%global appLoc; %let compiled_apploc=/30.SASApps/3030.Projects/303001.DataController/build2/DataController; %let appLoc=%sysfunc(coalescec(&appLoc,&compiled_apploc)); /** * The serverName represents the SAS 9 logical server context * There is no programmatic (SAS code) way to obtain this * So it is taken from the sasjsconfig file OR supplied at runtime, eg: * * %let apploc=/my/apploc; * %let serverName=SASAppDC; * %inc thisfile; * */ %global serverName; %let compiled_serverName=SASApp; %let serverName=%sysfunc(coalescec(&serverName,&compiled_serverName)); %let sasjs_clickmeservice=clickme; %let syscc=0; options ps=max nonotes nosgen nomprint nomlogic nosource2 nosource noquotelenmax; /* user supplied build vars */ /* user supplied build vars end */ /* system macro dependencies for build process */ %macro mf_getattrn( libds ,attr )/*/STORE SOURCE*/; %local dsid rc; %let dsid=%sysfunc(open(&libds,is)); %if &dsid = 0 %then %do; %put %str(WARN)ING: Cannot open %trim(&libds), system message below; %put %sysfunc(sysmsg()); -1 %end; %else %do; %sysfunc(attrn(&dsid,&attr)) %let rc=%sysfunc(close(&dsid)); %end; %mend mf_getattrn; %macro mf_nobs(libds )/*/STORE SOURCE*/; %mf_getattrn(&libds,NLOBS) %mend mf_nobs; %macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1) )/des='ungraceful abort' /*STORE SOURCE*/; %if not(%eval(%unquote(&iftrue))) %then %return; %put NOTE: /// mf_abort macro executing //; %if %length(&mac)>0 %then %put NOTE- called by &mac; %put NOTE - &msg; %abort; %mend mf_abort; /** @endcond */ %macro mf_verifymacvars( verifyVars /* list of macro variable NAMES */ ,makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */ ,mAbort=SOFT )/*/STORE SOURCE*/; %local verifyIterator verifyVar abortmsg; %do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( ))); %let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( )); %if not %symexist(&verifyvar) %then %do; %let abortmsg= Variable &verifyVar is MISSING; %goto exit_err; %end; %if %length(%trim(&&&verifyVar))=0 %then %do; %let abortmsg= Variable &verifyVar is EMPTY; %goto exit_err; %end; %if &makeupcase=YES %then %do; %let &verifyVar=%upcase(&&&verifyvar); %end; %end; %goto exit_success; %exit_err: %put &abortmsg; %mf_abort(iftrue=(&mabort ne SOFT), mac=mf_verifymacvars, msg=%str(&abortmsg) ) 0 %return; %exit_success: 1 %mend mf_verifymacvars; %macro mm_getDirectories( path= ,outds=work.mm_getDirectories ,mDebug=0 )/*/STORE SOURCE*/; %local mD; %if &mDebug=1 %then %let mD=; %else %let mD=%str(*); %&mD.put Executing mm_getDirectories.sas; %&mD.put _local_; data &outds (keep=directoryuri name directoryname directorydesc ); length directoryuri name directoryname directorydesc $256; call missing(of _all_); __i+1; %if %length(&path)=0 %then %do; do while (metadata_getnobj("omsobj:Directory?@Id contains '.'",__i,directoryuri)>0); %end; %else %do; do while( metadata_getnobj("omsobj:Directory?@DirectoryName='&path'",__i,directoryuri) >0 ); %end; __rc1=metadata_getattr(directoryuri, "Name", name); __rc2=metadata_getattr(directoryuri, "DirectoryName", directoryname); __rc3=metadata_getattr(directoryuri, "Desc", directorydesc); &mD.putlog (_all_) (=); drop __:; __i+1; if sum(of __rc1-__rc3)=0 then output; end; run; %mend mm_getDirectories; %macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767); %local rc fname; %if &prefix=0 %then %do; %let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl)); %if &rc %then %put %sysfunc(sysmsg()); &fname %end; %else %do; %local x len; %let len=%eval(8-%length(&prefix)); %let x=0; %do x=0 %to &maxtries; %let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len); %if %sysfunc(fileref(&fname)) > 0 %then %do; %let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl)); %if &rc %then %put %sysfunc(sysmsg()); &fname %return; %end; %end; %put unable to find available fileref after &maxtries attempts; %end; %mend mf_getuniquefileref; %macro mm_updatestpsourcecode(stp= ,stpcode= ,minify=NO ,mdebug=0 ); /* first, check if STP exists */ %local tsuri; %let tsuri=stopifempty ; data _null_; format type uri tsuri value $200.; call missing (of _all_); path="&stp.(StoredProcess)"; /* first, find the STP ID */ if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do; /* get sourcecode */ cnt=1; do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0); rc=metadata_getattr(tsuri,"Name",value); %if &mdebug=1 %then %do; put tsuri= value=; %end; if value="SourceCode" then do; /* found it! */ rc=metadata_getattr(tsuri,"Id",value); call symputx('tsuri',value,'l'); stop; end; cnt+1; end; end; else put (_all_)(=); run; %if &tsuri=stopifempty %then %do; %put %str(WARN)ING: &stp.(StoredProcess) not found!; %return; %end; %if %length(&stpcode)<2 %then %do; %put %str(WARN)ING: No SAS code supplied!!; %return; %end; %local frefin frefout; %let frefin=%mf_getuniquefileref(); %let frefout=%mf_getuniquefileref(); /* write header XML */ data _null_; file &frefin; put "$METAREPOSITORY ','>'); outstr=tranwrd(outstr,"'",'''); outstr=tranwrd(outstr,'"','"'); outstr=tranwrd(outstr,'0A'x,' '); outstr=tranwrd(outstr,'0D'x,' '); outstr=tranwrd(outstr,'$','$'); %if &minify=YES %then %do; outstr=cats(outstr); if outstr ne ''; if not (outstr=:'/*' and subpad(left(reverse(outstr)),1,2)='/*'); %end; outstr=trim(outstr); put outstr ' '; run; %end; data _null_; file &frefin mod; put "'>SAS268435456 "; run; proc metadata in= &frefin out=&frefout; run; %if &mdebug=1 %then %do; /* write the response to the log for debugging */ data _null_; infile &frefout lrecl=32767; input; put _infile_; run; %end; %else %do; filename &frefin clear; filename &frefout clear; %end; %mend mm_updatestpsourcecode; %macro mm_getrepos( outds=work.mm_getrepos )/*/STORE SOURCE*/; * use a temporary fileref to hold the response; filename response temp; /* get list of libraries */ proc metadata in= "1" out=response; run; /* write the response to the log for debugging */ /* data _null_; infile response lrecl=1048576; input; put _infile_; run; */ /* create an XML map to read the response */ filename sxlemap temp; data _null_; file sxlemap; put ''; put "/GetRepositories/Repositories/Repository"; put ""; put ''; put "/GetRepositories/Repositories/Repository/@Id"; put ""; put "characterstring200"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Name"; put ""; put "characterstring200"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Desc"; put ""; put "characterstring200"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@DefaultNS"; put "characterstring200"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@RepositoryType"; put "characterstring20"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@RepositoryFormat"; put "characterstring10"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@Access"; put "characterstring16"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@CurrentAccess"; put "characterstring16"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@PauseState"; put "characterstring16"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Path"; put ""; put "characterstring256"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Engine"; put ""; put "characterstring8"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Options"; put ""; put "characterstring32"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@MetadataCreated"; put "characterstring24"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@MetadataUpdated"; put "characterstring24"; put ''; put '
'; run; libname _XML_ xml xmlfileref=response xmlmap=sxlemap; proc sort data= _XML_.SASRepos out=&outds; by name; run; /* clear references */ filename sxlemap clear; filename response clear; libname _XML_ clear; %mend mm_getrepos; %macro mm_getservercontexts( outds=work.mm_getrepos )/*/STORE SOURCE*/; %local repo repocnt x; %let repo=%sysfunc(getoption(metarepository)); /* first get list of available repos */ %mm_getrepos(outds=work.repos) %let repocnt=0; data _null_; set repos; where repositorytype in('CUSTOM','FOUNDATION'); keep id name ; call symputx(cats('repo',_n_),name,'l'); call symputx('repocnt',_n_,'l'); run; filename __mc1 temp; filename __mc2 temp; data &outds; length serveruri servername $200; call missing (of _all_); stop; run; %do x=1 %to &repocnt; options metarepository=&&repo&x; proc metadata in= "$METAREPOSITORY ServerContextSAS 0" out=__mc1; run; /* data _null_; infile __mc1 lrecl=1048576; input; put _infile_; run; */ data _null_; file __mc2; put ''; put "/GetMetadataObjects/Objects/ServerContext"; put ""; put ''; put "/GetMetadataObjects/Objects/ServerContext/@Id"; put ""; put "characterstring200"; put ''; put ''; put "/GetMetadataObjects/Objects/ServerContext/@Name"; put ""; put "characterstring200"; put ''; put '
'; run; libname __mc3 xml xmlfileref=__mc1 xmlmap=__mc2; proc append base=&outds data=__mc3.SASContexts;run; libname __mc3 clear; %end; options metarepository=&repo; filename __mc1 clear; filename __mc2 clear; %mend mm_getservercontexts; %macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1) , errds=work.mp_abort_errds , mode=REGULAR )/*/STORE SOURCE*/; %global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode; %local fref fid i; %if not(%eval(%unquote(&iftrue))) %then %return; %put NOTE: /// mp_abort macro executing //; %if %length(&mac)>0 %then %put NOTE- called by &mac; %put NOTE - &msg; %if %symexist(_SYSINCLUDEFILEDEVICE) /* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */ and %superq(SYSPROCESSNAME) ne %str(Compute Server) %then %do; %if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do; data &errds; iftrue='1=1'; length mac $100 msg $5000; mac=symget('mac'); msg=symget('msg'); run; data _null_; abort cancel FILE; run; %return; %end; %end; /* Web App Context */ %if %symexist(_PROGRAM) or %superq(SYSPROCESSNAME) = %str(Compute Server) or &mode=INCLUDE %then %do; options obs=max replace mprint; %if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do; options nosyntaxcheck; %end; %if &mode=INCLUDE %then %do; %if %sysfunc(exist(&errds))=1 %then %do; data _null_; set &errds; call symputx('iftrue',iftrue,'l'); call symputx('mac',mac,'l'); call symputx('msg',msg,'l'); putlog (_all_)(=); run; %if (&iftrue)=0 %then %return; %end; %else %do; %put &sysmacroname: No include errors found; %return; %end; %end; /* extract log errs / warns, if exist */ %local logloc logline; %global logmsg; /* capture global messages */ %if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG; %else %let logloc=%qsysfunc(getoption(LOG)); proc printto log=log;run; %let logline=0; %if %length(&logloc)>0 %then %do; data _null_; infile &logloc lrecl=5000; input; putlog _infile_; i=1; retain logonce 0; if ( _infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR" ) and logonce=0 then do; call symputx('logline',_n_); logonce+1; end; run; /* capture log including lines BEFORE the err */ %if &logline>0 %then %do; data _null_; infile &logloc lrecl=5000; input; i=1; stoploop=0; if _n_ ge &logline-15 and stoploop=0 then do until (i>22); call symputx('logmsg',catx('\n',symget('logmsg'),_infile_)); input; i+1; stoploop=1; end; if stoploop=1 then stop; run; %end; %end; %if %symexist(SYS_JES_JOB_URI) %then %do; /* setup webout for Viya */ options nobomfile; %if "X&SYS_JES_JOB_URI.X"="XX" %then %do; filename _webout temp lrecl=999999 mod; %end; %else %do; filename _webout filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json" lrecl=999999 mod; %end; %end; %else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do; options nobomfile; /* set up http header for SASjs Server */ %let fid=%sysfunc(fopen(&fref,A)); %if &fid=0 %then %do; %put %str(ERR)OR: %sysfunc(sysmsg()); %return; %end; %let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json))); %let rc=%sysfunc(fwrite(&fid)); %let rc=%sysfunc(fclose(&fid)); %let rc=%sysfunc(filename(&fref)); %end; /* send response in SASjs JSON format */ data _null_; file _webout mod lrecl=32000 encoding='utf-8'; length msg syswarningtext syserrortext $32767 mode $10 ; sasdatetime=datetime(); msg=symget('msg'); %if &logline>0 %then %do; msg=cats(msg,'\n\nLog Extract:\n',symget('logmsg')); %end; /* escape the escapes */ msg=tranwrd(msg,'\','\\'); /* escape the quotes */ msg=tranwrd(msg,'"','\"'); /* ditch the CRLFs as chrome complains */ msg=compress(msg,,'kw'); /* quote without quoting the quotes (which are escaped instead) */ msg=cats('"',msg,'"'); if symexist('_debug') then debug=quote(trim(symget('_debug'))); else debug='""'; if symget('sasjsprocessmode')='Stored Program' then mode='SASJS'; if mode ne 'SASJS' then put '>>weboutBEGIN<<'; put '{"SYSDATE" : "' "&SYSDATE" '"'; put ',"SYSTIME" : "' "&SYSTIME" '"'; put ',"sasjsAbort" : [{'; put ' "MSG":' msg ; put ' ,"MAC": "' "&mac" '"}]'; put ",""SYSUSERID"" : ""&sysuserid"" "; put ',"_DEBUG":' debug ; if symexist('_metauser') then do; _METAUSER=quote(trim(symget('_METAUSER'))); put ",""_METAUSER"": " _METAUSER; _METAPERSON=quote(trim(symget('_METAPERSON'))); put ',"_METAPERSON": ' _METAPERSON; end; if symexist('SYS_JES_JOB_URI') then do; SYS_JES_JOB_URI=quote(trim(symget('SYS_JES_JOB_URI'))); put ',"SYS_JES_JOB_URI": ' SYS_JES_JOB_URI; end; _PROGRAM=quote(trim(resolve(symget('_PROGRAM')))); put ',"_PROGRAM" : ' _PROGRAM ; put ",""SYSCC"" : ""&syscc"" "; syserrortext=cats(symget('syserrortext')); if findc(syserrortext,'"\'!!'0A0D09000E0F010210111A'x) then do; syserrortext='"'!!trim( prxchange('s/"/\\"/',-1, /* double quote */ prxchange('s/\x0A/\n/',-1, /* new line */ prxchange('s/\x0D/\r/',-1, /* carriage return */ prxchange('s/\x09/\\t/',-1, /* tab */ prxchange('s/\x00/\\u0000/',-1, /* NUL */ prxchange('s/\x0E/\\u000E/',-1, /* SS */ prxchange('s/\x0F/\\u000F/',-1, /* SF */ prxchange('s/\x01/\\u0001/',-1, /* SOH */ prxchange('s/\x02/\\u0002/',-1, /* STX */ prxchange('s/\x10/\\u0010/',-1, /* DLE */ prxchange('s/\x11/\\u0011/',-1, /* DC1 */ prxchange('s/\x1A/\\u001A/',-1, /* SUB */ prxchange('s/\\/\\\\/',-1,syserrortext) )))))))))))))!!'"'; end; else syserrortext=cats('"',syserrortext,'"'); put ',"SYSERRORTEXT" : ' syserrortext; put ",""SYSHOSTNAME"" : ""&syshostname"" "; put ",""SYSJOBID"" : ""&sysjobid"" "; put ",""SYSSCPL"" : ""&sysscpl"" "; put ",""SYSSITE"" : ""&syssite"" "; sysvlong=quote(trim(symget('sysvlong'))); put ',"SYSVLONG" : ' sysvlong; syswarningtext=cats(symget('syswarningtext')); if findc(syswarningtext,'"\'!!'0A0D09000E0F010210111A'x) then do; syswarningtext='"'!!trim( prxchange('s/"/\\"/',-1, /* double quote */ prxchange('s/\x0A/\n/',-1, /* new line */ prxchange('s/\x0D/\r/',-1, /* carriage return */ prxchange('s/\x09/\\t/',-1, /* tab */ prxchange('s/\x00/\\u0000/',-1, /* NUL */ prxchange('s/\x0E/\\u000E/',-1, /* SS */ prxchange('s/\x0F/\\u000F/',-1, /* SF */ prxchange('s/\x01/\\u0001/',-1, /* SOH */ prxchange('s/\x02/\\u0002/',-1, /* STX */ prxchange('s/\x10/\\u0010/',-1, /* DLE */ prxchange('s/\x11/\\u0011/',-1, /* DC1 */ prxchange('s/\x1A/\\u001A/',-1, /* SUB */ prxchange('s/\\/\\\\/',-1,syswarningtext) )))))))))))))!!'"'; end; else syswarningtext=cats('"',syswarningtext,'"'); put ",""SYSWARNINGTEXT"" : " syswarningtext; put ',"END_DTTM" : "' "%sysfunc(datetime(),E8601DT26.6)" '" '; put "}" ; if mode ne 'SASJS' then put '>>weboutEND<<'; run; %put _all_; %if "&sysprocessmode " = "SAS Stored Process Server " %then %do; data _null_; putlog 'stpsrvset program err and syscc'; rc=stpsrvset('program error', 0); call symputx("syscc",0,"g"); run; %if &sysscp=WIN and 1=0 /* deprecating this logic until we figure out a consistent abort */ and "%substr(%str(&sysvlong ),1,8)"="9.04.01M" and "%substr(%str(&sysvlong ),9,1)">"5" %then %do; /* skip approach (below) does not work in windows m6+ envs */ endsas; %end; %else %do; /** * endsas kills 9.4m3 deployments by orphaning multibridges. * Abort variants are ungraceful (non zero return code) * This approach lets SAS run silently until the end :-) * Caution - fails when called within a %include within a macro * Use mp_include() to handle this. */ filename skip temp; data _null_; file skip; put '%macro skip();'; comment '%mend skip; -> fix lint '; put '%macro skippy();'; comment '%mend skippy; -> fix lint '; run; %inc skip; %end; %end; %else %if "&sysprocessmode " = "SAS Compute Server " %then %do; /* endsas kills the session making it harder to fetch results */ data _null_; syswarningtext=symget('syswarningtext'); syserrortext=symget('syserrortext'); abort_msg=symget('msg'); syscc=symget('syscc'); sysuserid=symget('sysuserid'); iftrue=symget('iftrue'); put (_all_)(/=); call symputx('syscc',0); abort cancel nolist; run; %end; %else %do; %abort cancel; %end; %end; %else %do; %put _all_; %abort cancel; %end; %mend mp_abort; /** @endcond */ %macro mf_isblank(param )/*/STORE SOURCE*/; %sysevalf(%superq(param)=,boolean) %mend mf_isblank; %macro mp_dropmembers( list /* space separated list of datasets / views */ ,libref=WORK /* can only drop from a single library at a time */ ,iftrue=%str(1=1) )/*/STORE SOURCE*/; %if not(%eval(%unquote(&iftrue))) %then %return; %if %mf_isblank(&list) %then %do; %put NOTE: nothing to drop!; %return; %end; proc datasets lib=&libref nolist; delete &list; delete &list /mtype=view; run; %mend mp_dropmembers; %macro mm_createstp( stpname=SASjs Default STP ,stpdesc=This stp was created automatically by the mm_createstp macro ,filename=mm_createstp.sas ,directory=SASEnvironment/SASCode ,tree=/User Folders/sasdemo ,package=false ,streaming=true ,outds=work.mm_createstp ,mDebug=0 ,server=SASApp ,stptype=1 ,minify=NO ,frefin=mm_in ,frefout=mm_out ,LogicalServerType=Sps )/*/STORE SOURCE*/; %local mD; %if &mDebug=1 %then %let mD=; %else %let mD=%str(*); %&mD.put Executing mm_CreateSTP.sas; %&mD.put _local_; %mp_abort( iftrue=(%mf_verifymacvars(stpname filename directory tree)=0) ,mac=&sysmacroname ,msg=%str(Empty inputs: stpname filename directory tree) ) %mp_dropmembers(%scan(&outds,2,.)) /* check LogicalServerType validity */ %mp_abort( iftrue=( &LogicalServerType ne Sps and &LogicalServerType ne Wks and &LogicalServerType ne Any ) ,mac=&sysmacroname ,msg=%str(Invalid value for LogicalServerType (&LogicalServerType)) ) /** * check tree exists */ data _null_; length type uri $256; rc=metadata_pathobj("","&tree","Folder",type,uri); call symputx('foldertype',type,'l'); call symputx('treeuri',uri,'l'); run; %if &foldertype ne Tree %then %do; %put %str(WARN)ING: Tree &tree does not exist!; %return; %end; /** * Check STP does not exist already */ %local cmtype; data _null_; length type uri $256; rc=metadata_pathobj("","&tree/&stpname",'StoredProcess',type,uri); call symputx('cmtype',type,'l'); call symputx('stpuri',uri,'l'); run; %if &cmtype = ClassifierMap %then %do; %put %str(WARN)ING: Stored Process &stpname already exists in &tree!; %return; %end; /** * Check that the physical file exists */ %if %sysfunc(fileexist(&directory/&filename)) ne 1 %then %do; %put %str(WARN)ING: FILE *&directory/&filename* NOT FOUND!; %return; %end; %if &stptype=1 %then %do; /* type 1 STP - where code is stored on filesystem */ %if %sysevalf(&sysver lt 9.2) %then %do; %put %str(WARN)ING: Version 9.2 or later required; %return; %end; /* check directory object (where 9.2 source code reference is stored) */ data _null_; length id $20 dirtype $256; rc=metadata_resolve("&directory",dirtype,id); call symputx('checkdirtype',dirtype,'l'); run; %if &checkdirtype ne Directory %then %do; %mm_getdirectories(path=&directory,outds=&outds ,mDebug=&mDebug) %if %mf_nobs(&outds)=0 or %sysfunc(exist(&outds))=0 %then %do; %put %str(WARN)ING: The directory object does not exist for &directory; %return; %end; %end; %else %do; data &outds; directoryuri="&directory"; run; %end; data &outds (keep=stpuri prompturi fileuri texturi); length stpuri prompturi fileuri texturi serveruri $256 ; if _n_=1 then call missing (of _all_); set &outds; /* final checks on uris */ length id $20 type $256; __rc=metadata_resolve("&treeuri",type,id); if type ne 'Tree' then do; putlog "%str(WARN)ING: Invalid tree URI: &treeuri"; stopme=1; end; __rc=metadata_resolve(directoryuri,type,id); if type ne 'Directory' then do; putlog "%str(WARN)ING: Invalid directory URI: " directoryuri; stopme=1; end; /* get server info */ __rc=metadata_resolve("&server",type,serveruri); if type ne 'LogicalServer' then do; __rc=metadata_getnobj("omsobj:LogicalServer?@Name='&server'",1,serveruri); if serveruri='' then do; putlog "%str(WARN)ING: Invalid server: &server"; stopme=1; end; end; if stopme=1 then do; putlog (_all_)(=); stop; end; /* create empty prompt */ rc1=METADATA_NEWOBJ('PromptGroup',prompturi,'Parameters'); rc2=METADATA_SETATTR(prompturi, 'UsageVersion', '1000000'); rc3=METADATA_SETATTR(prompturi, 'GroupType','2'); rc4=METADATA_SETATTR(prompturi, 'Name','Parameters'); rc5=METADATA_SETATTR(prompturi, 'PublicType','Embedded:PromptGroup'); GroupInfo= ""; rc6 = METADATA_SETATTR(prompturi, 'GroupInfo',groupinfo); if sum(of rc1-rc6) ne 0 then do; putlog "%str(WARN)ING: Issue creating prompt."; if prompturi ne . then do; putlog ' Removing orphan: ' prompturi; rc = METADATA_DELOBJ(prompturi); put rc=; end; stop; end; /* create a file uri */ rc7=METADATA_NEWOBJ('File',fileuri,'SP Source File'); rc8=METADATA_SETATTR(fileuri, 'FileName',"&filename"); rc9=METADATA_SETATTR(fileuri, 'IsARelativeName','1'); rc10=METADATA_SETASSN(fileuri, 'Directories','MODIFY',directoryuri); if sum(of rc7-rc10) ne 0 then do; putlog "%str(WARN)ING: Issue creating file."; if fileuri ne . then do; putlog ' Removing orphans:' prompturi fileuri; rc = METADATA_DELOBJ(prompturi); rc = METADATA_DELOBJ(fileuri); put (_all_)(=); end; stop; end; /* create a TextStore object */ rc11= METADATA_NEWOBJ('TextStore',texturi,'Stored Process'); rc12= METADATA_SETATTR(texturi, 'TextRole','StoredProcessConfiguration'); rc13= METADATA_SETATTR(texturi, 'TextType','XML'); storedtext='' !!"" !!""; rc14= METADATA_SETATTR(texturi, 'StoredText',storedtext); if sum(of rc11-rc14) ne 0 then do; putlog "%str(WARN)ING: Issue creating TextStore."; if texturi ne . then do; putlog ' Removing orphans: ' prompturi fileuri texturi; rc = METADATA_DELOBJ(prompturi); rc = METADATA_DELOBJ(fileuri); rc = METADATA_DELOBJ(texturi); put (_all_)(=); end; stop; end; /* create meta obj */ rc15= METADATA_NEWOBJ('ClassifierMap',stpuri,"&stpname"); rc16= METADATA_SETASSN(stpuri, 'Trees','MODIFY',treeuri); rc17= METADATA_SETASSN(stpuri, 'ComputeLocations','MODIFY',serveruri); rc18= METADATA_SETASSN(stpuri, 'SourceCode','MODIFY',fileuri); rc19= METADATA_SETASSN(stpuri, 'Prompts','MODIFY',prompturi); rc20= METADATA_SETASSN(stpuri, 'Notes','MODIFY',texturi); rc21= METADATA_SETATTR(stpuri, 'PublicType', 'StoredProcess'); rc22= METADATA_SETATTR(stpuri, 'TransformRole', 'StoredProcess'); rc23= METADATA_SETATTR(stpuri, 'UsageVersion', '1000000'); rc24= METADATA_SETATTR(stpuri, 'Desc', "&stpdesc"); /* tidy up if err */ if sum(of rc15-rc24) ne 0 then do; putlog "%str(WARN)ING: Issue creating STP."; if stpuri ne . then do; putlog ' Removing orphans: ' prompturi fileuri texturi stpuri; rc = METADATA_DELOBJ(prompturi); rc = METADATA_DELOBJ(fileuri); rc = METADATA_DELOBJ(texturi); rc = METADATA_DELOBJ(stpuri); put (_all_)(=); end; end; else do; fullpath=cats('_program=',treepath,"/&stpname"); putlog "NOTE: Stored Process Created!"; putlog "NOTE- "; putlog "NOTE-"; putlog "NOTE-" fullpath; putlog "NOTE- "; putlog "NOTE-"; end; output; stop; run; %end; %else %if &stptype=2 %then %do; /* type 2 stp - code is stored in metadata */ %if %sysevalf(&sysver lt 9.3) %then %do; %put %str(WARN)ING: SAS version 9.3 or later required to create type2 STPs; %return; %end; /* check we have the correct ServerContext */ %mm_getservercontexts(outds=contexts) %local serveruri; %let serveruri=NOTFOUND; data _null_; set contexts; where upcase(servername)="%upcase(&server)"; call symputx('serveruri',serveruri); run; %if &serveruri=NOTFOUND %then %do; %put %str(WARN)ING: ServerContext *&server* not found!; %return; %end; /** * First, create a Hello World type 2 stored process */ filename &frefin temp; data _null_; file &frefin; treeuri=quote(symget('treeuri')); serveruri=quote(symget('serveruri')); stpdesc=quote(symget('stpdesc')); stpname=quote(symget('stpname')); put "$METAREPOSITORY "/ ''/ " "/ " "/ " "/ " "/ ' '/ ' ' / " "/ " "/ ' '/ " "/ ""/ "SAS"/ "268435456"; run; filename &frefout temp; proc metadata in= &frefin out=&frefout ; run; %if &mdebug=1 %then %do; /* write the response to the log for debugging */ data _null_; infile &frefout lrecl=1048576; input; put _infile_; run; %end; /** * Next, add the source code */ %mm_updatestpsourcecode(stp=&tree/&stpname ,stpcode="&directory/&filename" ,mdebug=&mdebug ,minify=&minify) %end; %else %do; %put %str(WARN)ING: STPTYPE=*&stptype* not recognised!; %end; %mend mm_createstp; %macro mf_getuser( )/*/STORE SOURCE*/; %local user; %if %symexist(_sasjs_username) %then %let user=&_sasjs_username; %else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do; %let user=&SYS_COMPUTE_SESSION_OWNER; %end; %else %if %symexist(_metaperson) %then %do; %if %length(&_metaperson)=0 %then %let user=&sysuserid; /* sometimes SAS will add @domain extension - remove for consistency */ /* but be sure to quote in case of usernames with commas */ %else %let user=%unquote(%scan(%quote(&_metaperson),1,@)); %end; %else %let user=&sysuserid; %quote(&user) %mend mf_getuser; %macro mm_createfolder(path=,mDebug=0); %put &sysmacroname: execution started for &path; %local dbg errorcheck; %if &mDebug=0 %then %let dbg=*; %local parentFolderObjId child errorcheck paths; %let paths=0; %let errorcheck=1; %if &syscc ge 4 %then %do; %put SYSCC=&syscc - this macro requires a clean session; %return; %end; data _null_; length objId parentId objType parent child $200 folderPath $1000; call missing (of _all_); folderPath = "%trim(&path)"; * remove any trailing slash ; if ( substr(folderPath,length(folderPath),1) = '/' ) then folderPath=substr(folderPath,1,length(folderPath)-1); * name must not be blank; if ( folderPath = '' ) then do; put 'ERR' +(-1) "OR: &sysmacroname PATH parameter value must be non-blank"; end; * must have a starting slash ; if ( substr(folderPath,1,1) ne '/' ) then do; put 'ERR' +(-1) "OR: &sysmacroname PATH param value must have starting slash"; stop; end; * check if folder already exists ; rc=metadata_pathobj('',cats(folderPath,"(Folder)"),"",objType,objId); if rc ge 1 then do; put "NOTE: Folder " folderPath " already exists!"; stop; end; * do not create a root (one level) folder ; if countc(folderPath,'/')=1 then do; put 'ERR' +(-1) "OR: &sysmacroname will not create a new ROOT folder"; stop; end; * check that root folder exists ; root=cats('/',scan(folderpath,1,'/'),"(Folder)"); if metadata_pathobj('',root,"",objType,parentId)<1 then do; put 'ERR' +(-1) "OR: " root " does not exist!"; stop; end; * check that parent folder exists ; child=scan(folderPath,-1,'/'); parent=substr(folderpath,1,length(folderpath)-length(child)-1); rc=metadata_pathobj('',cats(parent,"(Folder)"),"",objType,parentId); if rc<1 then do; putlog 'The following folders will be created:'; /* folder does not exist - so start from top and work down */ length newpath $1000; paths=0; do x=2 to countw(folderpath,'/'); newpath=''; do i=1 to x; newpath=cats(newpath,'/',scan(folderpath,i,'/')); end; rc=metadata_pathobj('',cats(newpath,"(Folder)"),"",objType,parentId); if rc<1 then do; paths+1; call symputx(cats('path',paths),newpath); putlog newpath; end; call symputx('paths',paths); end; end; else putlog "parent " parent " exists"; call symputx('parentFolderObjId',parentId,'l'); call symputx('child',child,'l'); call symputx('errorcheck',0,'l'); &dbg put (_all_)(=); run; %if &errorcheck=1 or &syscc ge 4 %then %return; %if &paths>0 %then %do x=1 %to &paths; %put executing recursive call for &&path&x; %mm_createfolder(path=&&path&x) %end; %else %do; filename __newdir temp; options noquotelenmax; %local inmeta; %put creating: &path; %let inmeta=$METAREPOSITORY SAS268435456 ; proc metadata in="&inmeta" out=__newdir verbose; run ; /* check it was successful */ data _null_; length objId parentId objType parent child $200 ; call missing (of _all_); rc=metadata_pathobj('',cats("&path","(Folder)"),"",objType,objId); if rc ge 1 then do; putlog "SUCCCESS! &path created."; end; else do; putlog 'ERR' +(-1) "OR: unsuccessful attempt to create &path"; call symputx('syscc',8); end; run; /* write the response to the log for debugging */ %if &mDebug ne 0 %then %do; data _null_; infile __newdir lrecl=32767; input; put _infile_; run; %end; filename __newdir clear; %end; %put &sysmacroname: execution finished for &path; %mend mm_createfolder; %macro mm_deletestp( target= )/*/STORE SOURCE*/; /** * Check STP does exist */ %local cmtype; data _null_; length type uri $256; rc=metadata_pathobj("","&target",'StoredProcess',type,uri); call symputx('cmtype',type,'l'); call symputx('stpuri',uri,'l'); run; %if &cmtype ne ClassifierMap %then %do; %put NOTE: No Stored Process found at ⌖ %return; %end; filename __in temp lrecl=10000; filename __out temp lrecl=10000; data _null_ ; file __in ; put ""; put "SAS268436480"; put ""; run ; proc metadata in=__in out=__out verbose;run; /* list the result */ data _null_;infile __out; input; list; run; filename __in clear; filename __out clear; /** * Check deletion */ %local isgone; data _null_; length type uri $256; call missing (of _all_); rc=metadata_pathobj("","&target",'Note',type,uri); call symputx('isgone',type,'l'); run; %if &isgone = ClassifierMap %then %do; %put %str(ERR)OR: STP not deleted from ⌖ %let syscc=4; %return; %end; %mend mm_deletestp; /* system macro dependencies for build process end*/ /* system macros for build process */ %macro mm_createwebservice(path= ,name=initService ,precode= ,code=ft15f001 ,desc=This stp was created automagically by the mm_createwebservice macro ,mDebug=0 ,server=SASApp ,replace=YES ,adapter=sasjs )/*/STORE SOURCE*/; %if &syscc ge 4 %then %do; %put &=syscc - &sysmacroname will not execute in this state; %return; %end; %local mD; %if &mDebug=1 %then %let mD=; %else %let mD=%str(*); %&mD.put Executing mm_createwebservice.sas; %&mD.put _local_; * remove any trailing slash ; %if "%substr(&path,%length(&path),1)" = "/" %then %let path=%substr(&path,1,%length(&path)-1); /** * Add webout macro * These put statements are auto generated - to change the macro, change the * source (mm_webout) and run `build.py` */ filename sasjs temp; data _null_; file sasjs lrecl=3000 ; put "/* Created on %sysfunc(datetime(),datetime19.) by %mf_getuser() */"; /* WEBOUT BEGIN */ put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y '; put ' ,engine=DATASTEP '; put ' ,missing=NULL '; put ' ,showmeta=N '; put ' ,maxobs=MAX '; put ')/*/STORE SOURCE*/; '; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval '; put ' tmpds1 tmpds2 tmpds3 tmpds4; '; put '%let numcols=0; '; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;); '; put ' '; put '%if &action=OPEN %then %do; '; put ' options nobomfile; '; put ' data _null_;file &jref encoding=''utf-8'' lrecl=200; '; put ' put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"''; '; put ' run; '; put '%end; '; put '%else %if (&action=ARR or &action=OBJ) %then %do; '; put ' /* force variable names to always be uppercase in the JSON */ '; put ' options validvarname=upcase; '; put ' /* To avoid issues with _webout on EBI - such as encoding diffs and truncation '; put ' (https://support.sas.com/kb/49/325.html) we use temporary files */ '; put ' filename _sjs1 temp lrecl=200 ; '; put ' data _null_; file _sjs1 encoding=''utf-8''; '; put ' put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":"; '; put ' run; '; put ' /* now write to _webout 1 char at a time */ '; put ' data _null_; '; put ' infile _sjs1 lrecl=1 recfm=n; '; put ' file &jref mod lrecl=1 recfm=n; '; put ' input sourcechar $char1. @@; '; put ' format sourcechar hex2.; '; put ' put sourcechar char1. @@; '; put ' run; '; put ' filename _sjs1 clear; '; put ' '; put ' /* grab col defs */ '; put ' proc contents noprint data=&ds '; put ' out=_data_(keep=name type length format formatl formatd varnum label); '; put ' run; '; put ' %let colinfo=%scan(&syslast,2,.); '; put ' proc sort data=&colinfo; '; put ' by varnum; '; put ' run; '; put ' /* move meta to mac vars */ '; put ' data &colinfo; '; put ' if _n_=1 then call symputx(''numcols'',nobs,''l''); '; put ' set &colinfo end=last nobs=nobs; '; put ' name=upcase(name); '; put ' /* fix formats */ '; put ' if type=2 or type=6 then do; '; put ' typelong=''char''; '; put ' length fmt $49.; '; put ' if format='''' then fmt=cats(''$'',length,''.''); '; put ' else if formatl=0 then fmt=cats(format,''.''); '; put ' else fmt=cats(format,formatl,''.''); '; put ' end; '; put ' else do; '; put ' typelong=''num''; '; put ' if format='''' then fmt=''best.''; '; put ' else if formatl=0 then fmt=cats(format,''.''); '; put ' else if formatd=0 then fmt=cats(format,formatl,''.''); '; put ' else fmt=cats(format,formatl,''.'',formatd); '; put ' end; '; put ' /* 32 char unique name */ '; put ' newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27); '; put ' '; put ' call symputx(cats(''name'',_n_),name,''l''); '; put ' call symputx(cats(''newname'',_n_),newname,''l''); '; put ' call symputx(cats(''length'',_n_),length,''l''); '; put ' call symputx(cats(''fmt'',_n_),fmt,''l''); '; put ' call symputx(cats(''type'',_n_),type,''l''); '; put ' call symputx(cats(''typelong'',_n_),typelong,''l''); '; put ' call symputx(cats(''label'',_n_),coalescec(label,name),''l''); '; put ' /* overwritten when fmt=Y and a custom format exists in catalog */ '; put ' if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l''); '; put ' else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l''); '; put ' run; '; put ' '; put ' %let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); '; put ' proc sql; '; put ' select count(*) into: lastobs from &ds; '; put ' %if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs)); '; put ' '; put ' %if &engine=PROCJSON %then %do; '; put ' %if &missing=STRING %then %do; '; put ' %put &sysmacroname: Special Missings not supported in proc json.; '; put ' %put &sysmacroname: Switching to DATASTEP engine; '; put ' %goto datastep; '; put ' %end; '; put ' data &tempds; '; put ' set &ds; '; put ' &stmt_obs; '; put ' %if &fmt=N %then format _numeric_ best32.;; '; put ' /* PRETTY is necessary to avoid line truncation in large files */ '; put ' filename _sjs2 temp lrecl=131068 encoding=''utf-8''; '; put ' proc json out=_sjs2 pretty '; put ' %if &action=ARR %then nokeys ; '; put ' ;export &tempds / nosastags fmtnumeric; '; put ' run; '; put ' /* send back to webout */ '; put ' data _null_; '; put ' infile _sjs2 lrecl=1 recfm=n; '; put ' file &jref mod lrecl=1 recfm=n; '; put ' input sourcechar $char1. @@; '; put ' format sourcechar hex2.; '; put ' put sourcechar char1. @@; '; put ' run; '; put ' filename _sjs2 clear; '; put ' %end; '; put ' %else %if &engine=DATASTEP %then %do; '; put ' %datastep: '; put ' %if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1 '; put ' %then %do; '; put ' %put &sysmacroname: &ds NOT FOUND!!!; '; put ' %return; '; put ' %end; '; put ' '; put ' %if &fmt=Y %then %do; '; put ' /** '; put ' * Extract format definitions '; put ' * First, by getting library locations from dictionary.formats '; put ' * Then, by exporting the width using proc format '; put ' * Cannot use maxw from sashelp.vformat as not always populated '; put ' * Cannot use fmtinfo() as not supported in all flavours '; put ' */ '; put ' %let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); '; put ' %let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); '; put ' %let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); '; put ' %let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); '; put ' proc sql noprint; '; put ' create table &tmpds1 as '; put ' select cats(libname,''.'',memname) as FMTCAT, '; put ' FMTNAME '; put ' from dictionary.formats '; put ' where fmttype=''F'' and libname is not null '; put ' and fmtname in (select format from &colinfo where format is not null) '; put ' order by 1; '; put ' create table &tmpds2( '; put ' FMTNAME char(32), '; put ' LENGTH num '; put ' ); '; put ' %local catlist cat fmtlist i; '; put ' select distinct fmtcat into: catlist separated by '' '' from &tmpds1; '; put ' %do i=1 %to %sysfunc(countw(&catlist,%str( ))); '; put ' %let cat=%scan(&catlist,&i,%str( )); '; put ' proc sql; '; put ' select distinct fmtname into: fmtlist separated by '' '' '; put ' from &tmpds1 where fmtcat="&cat"; '; put ' proc format lib=&cat cntlout=&tmpds3(keep=fmtname length); '; put ' select &fmtlist; '; put ' run; '; put ' proc sql; '; put ' insert into &tmpds2 select distinct fmtname,length from &tmpds3; '; put ' %end; '; put ' '; put ' proc sql; '; put ' create table &tmpds4 as '; put ' select a.*, b.length as MAXW '; put ' from &colinfo a '; put ' left join &tmpds2 b '; put ' on cats(a.format)=cats(upcase(b.fmtname)) '; put ' order by a.varnum; '; put ' data _null_; '; put ' set &tmpds4; '; put ' if not missing(maxw); '; put ' call symputx( '; put ' cats(''fmtlen'',_n_), '; put ' /* vars need extra padding due to JSON escaping of special chars */ '; put ' min(32767,ceil((max(length,maxw)+10)*1.5)) '; put ' ,''l'' '; put ' ); '; put ' run; '; put ' '; put ' /* configure varlenchk - as we are explicitly shortening the variables */ '; put ' %let optval=%sysfunc(getoption(varlenchk)); '; put ' options varlenchk=NOWARN; '; put ' data _data_(compress=char); '; put ' /* shorten the new vars */ '; put ' length '; put ' %do i=1 %to &numcols; '; put ' &&name&i $&&fmtlen&i '; put ' %end; '; put ' ; '; put ' /* rename on entry */ '; put ' set &ds(rename=( '; put ' %do i=1 %to &numcols; '; put ' &&name&i=&&newname&i '; put ' %end; '; put ' )); '; put ' &stmt_obs; '; put ' '; put ' drop '; put ' %do i=1 %to &numcols; '; put ' &&newname&i '; put ' %end; '; put ' ; '; put ' %do i=1 %to &numcols; '; put ' %if &&typelong&i=num %then %do; '; put ' &&name&i=cats(put(&&newname&i,&&fmt&i)); '; put ' %end; '; put ' %else %do; '; put ' &&name&i=put(&&newname&i,&&fmt&i); '; put ' %end; '; put ' %end; '; put ' if _error_ then do; '; put ' call symputx(''syscc'',1012); '; put ' stop; '; put ' end; '; put ' run; '; put ' %let fmtds=&syslast; '; put ' options varlenchk=&optval; '; put ' %end; '; put ' '; put ' proc format; /* credit yabwon for special null removal */ '; put ' value bart (default=40) '; put ' %if &missing=NULL %then %do; '; put ' ._ - .z = null '; put ' %end; '; put ' %else %do; '; put ' ._ = [quote()] '; put ' . = null '; put ' .a - .z = [quote()] '; put ' %end; '; put ' other = [best.]; '; put ' '; put ' data &tempds; '; put ' attrib _all_ label=''''; '; put ' %do i=1 %to &numcols; '; put ' %if &&typelong&i=char or &fmt=Y %then %do; '; put ' length &&name&i $&&fmtlen&i...; '; put ' format &&name&i $&&fmtlen&i...; '; put ' %end; '; put ' %end; '; put ' %if &fmt=Y %then %do; '; put ' set &fmtds; '; put ' %end; '; put ' %else %do; '; put ' set &ds; '; put ' %end; '; put ' &stmt_obs; '; put ' format _numeric_ bart.; '; put ' %do i=1 %to &numcols; '; put ' %if &&typelong&i=char or &fmt=Y %then %do; '; put ' if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do; '; put ' &&name&i=''"''!!trim( '; put ' prxchange(''s/"/\\"/'',-1, /* double quote */ '; put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ '; put ' prxchange(''s/\x0D/\r/'',-1, /* carriage return */ '; put ' prxchange(''s/\x09/\\t/'',-1, /* tab */ '; put ' prxchange(''s/\x00/\\u0000/'',-1, /* NUL */ '; put ' prxchange(''s/\x0E/\\u000E/'',-1, /* SS */ '; put ' prxchange(''s/\x0F/\\u000F/'',-1, /* SF */ '; put ' prxchange(''s/\x01/\\u0001/'',-1, /* SOH */ '; put ' prxchange(''s/\x02/\\u0002/'',-1, /* STX */ '; put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ '; put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ '; put ' prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */ '; put ' prxchange(''s/\\/\\\\/'',-1,&&name&i) '; put ' )))))))))))))!!''"''; '; put ' end; '; put ' else &&name&i=quote(cats(&&name&i)); '; put ' %end; '; put ' %end; '; put ' run; '; put ' '; put ' filename _sjs3 temp lrecl=131068 ; '; put ' data _null_; '; put ' file _sjs3 encoding=''utf-8''; '; put ' if _n_=1 then put "["; '; put ' set &tempds; '; put ' if _n_>1 then put "," @; put '; put ' %if &action=ARR %then "[" ; %else "{" ; '; put ' %do i=1 %to &numcols; '; put ' %if &i>1 %then "," ; '; put ' %if &action=OBJ %then """&&name&i"":" ; '; put ' "&&name&i"n /* name literal for reserved variable names */ '; put ' %end; '; put ' %if &action=ARR %then "]" ; %else "}" ; ; '; put ' '; put ' /* close out the table */ '; put ' data _null_; '; put ' file _sjs3 mod encoding=''utf-8''; '; put ' put '']''; '; put ' run; '; put ' data _null_; '; put ' infile _sjs3 lrecl=1 recfm=n; '; put ' file &jref mod lrecl=1 recfm=n; '; put ' input sourcechar $char1. @@; '; put ' format sourcechar hex2.; '; put ' put sourcechar char1. @@; '; put ' run; '; put ' filename _sjs3 clear; '; put ' %end; '; put ' '; put ' proc sql; '; put ' drop table &colinfo, &tempds; '; put ' '; put ' %if %substr(&showmeta,1,1)=Y %then %do; '; put ' filename _sjs4 temp lrecl=131068 encoding=''utf-8''; '; put ' data _null_; '; put ' file _sjs4; '; put ' length label $350; '; put ' put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{"; '; put ' do i=1 to &numcols; '; put ' name=quote(trim(symget(cats(''name'',i)))); '; put ' format=quote(trim(symget(cats(''fmt'',i)))); '; put ' label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i))))); '; put ' length=quote(trim(symget(cats(''length'',i)))); '; put ' type=quote(trim(symget(cats(''typelong'',i)))); '; put ' if i>1 then put "," @@; '; put ' put name '':{"format":'' format '',"label":'' label '; put ' '',"length":'' length '',"type":'' type ''}''; '; put ' end; '; put ' put ''}}''; '; put ' run; '; put ' /* send back to webout */ '; put ' data _null_; '; put ' infile _sjs4 lrecl=1 recfm=n; '; put ' file &jref mod lrecl=1 recfm=n; '; put ' input sourcechar $char1. @@; '; put ' format sourcechar hex2.; '; put ' put sourcechar char1. @@; '; put ' run; '; put ' filename _sjs4 clear; '; put ' %end; '; put '%end; '; put ' '; put '%else %if &action=CLOSE %then %do; '; put ' data _null_; file &jref encoding=''utf-8'' mod ; '; put ' put "}"; '; put ' run; '; put '%end; '; put '%mend mp_jsonout; '; put ' '; put '%macro mf_getuser( '; put ')/*/STORE SOURCE*/; '; put ' %local user; '; put ' '; put ' %if %symexist(_sasjs_username) %then %let user=&_sasjs_username; '; put ' %else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do; '; put ' %let user=&SYS_COMPUTE_SESSION_OWNER; '; put ' %end; '; put ' %else %if %symexist(_metaperson) %then %do; '; put ' %if %length(&_metaperson)=0 %then %let user=&sysuserid; '; put ' /* sometimes SAS will add @domain extension - remove for consistency */ '; put ' /* but be sure to quote in case of usernames with commas */ '; put ' %else %let user=%unquote(%scan(%quote(&_metaperson),1,@)); '; put ' %end; '; put ' %else %let user=&sysuserid; '; put ' '; put ' %quote(&user) '; put ' '; put '%mend mf_getuser; '; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL '; put ' ,showmeta=N,maxobs=MAX,workobs=0 '; put '); '; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug '; put ' sasjs_tables; '; put '%local i tempds jsonengine; '; put ' '; put '/* see https://github.com/sasjs/core/issues/41 */ '; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON; '; put '%else %let jsonengine=DATASTEP; '; put ' '; put ' '; put '%if &action=FETCH %then %do; '; put ' %if %str(&_debug) ge 131 %then %do; '; put ' options mprint notes mprintnest; '; put ' %end; '; put ' %let _webin_file_count=%eval(&_webin_file_count+0); '; put ' /* now read in the data */ '; put ' %do i=1 %to &_webin_file_count; '; put ' %if &_webin_file_count=1 %then %do; '; put ' %let _webin_fileref1=&_webin_fileref; '; put ' %let _webin_name1=&_webin_name; '; put ' %end; '; put ' data _null_; '; put ' infile &&_webin_fileref&i termstr=crlf; '; put ' input; '; put ' call symputx(''input_statement'',_infile_); '; put ' putlog "&&_webin_name&i input statement: " _infile_; '; put ' stop; '; put ' data &&_webin_name&i; '; put ' infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8''; '; put ' input &input_statement; '; put ' %if %str(&_debug) ge 131 %then %do; '; put ' if _n_<20 then putlog _infile_; '; put ' %end; '; put ' run; '; put ' %let sasjs_tables=&sasjs_tables &&_webin_name&i; '; put ' %end; '; put '%end; '; put ' '; put '%else %if &action=OPEN %then %do; '; put ' /* fix encoding */ '; put ' OPTIONS NOBOMFILE; '; put ' '; put ' /** '; put ' * check xengine type to avoid the below err message: '; put ' * > Function is only valid for filerefs using the CACHE access method. '; put ' */ '; put ' data _null_; '; put ' set sashelp.vextfl(where=(fileref="_WEBOUT")); '; put ' if xengine=''STREAM'' then do; '; put ' rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8"); '; put ' end; '; put ' run; '; put ' '; put ' /* setup json */ '; put ' data _null_;file &fref encoding=''utf-8''; '; put ' %if %str(&_debug) ge 131 %then %do; '; put ' put ''>>weboutBEGIN<<''; '; put ' %end; '; put ' put ''{"SYSDATE" : "'' "&SYSDATE" ''"''; '; put ' put '',"SYSTIME" : "'' "&SYSTIME" ''"''; '; put ' run; '; put ' '; put '%end; '; put ' '; put '%else %if &action=ARR or &action=OBJ %then %do; '; put ' %mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref '; put ' ,engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs '; put ' ) '; put '%end; '; put '%else %if &action=CLOSE %then %do; '; put ' /* To avoid issues with _webout on EBI we use a temporary file */ '; put ' filename _sjsref temp lrecl=131068; '; put ' %if %str(&workobs) > 0 %then %do; '; put ' /* if debug mode, send back first XX records of each work table also */ '; put ' data;run;%let tempds=%scan(&syslast,2,.); '; put ' ods output Members=&tempds; '; put ' proc datasets library=WORK memtype=data; '; put ' %local wtcnt;%let wtcnt=0; '; put ' data _null_; '; put ' set &tempds; '; put ' if not (upcase(name) =:"DATA"); /* ignore temp datasets */ '; put ' i+1; '; put ' call symputx(cats(''wt'',i),name,''l''); '; put ' call symputx(''wtcnt'',i,''l''); '; put ' data _null_; file _sjsref mod encoding=''utf-8''; '; put ' put ",""WORK"":{"; '; put ' %do i=1 %to &wtcnt; '; put ' %let wt=&&wt&i; '; put ' data _null_; file _sjsref mod encoding=''utf-8''; '; put ' dsid=open("WORK.&wt",''is''); '; put ' nlobs=attrn(dsid,''NLOBS''); '; put ' nvars=attrn(dsid,''NVARS''); '; put ' rc=close(dsid); '; put ' if &i>1 then put '',''@; '; put ' put " ""&wt"" : {"; '; put ' put ''"nlobs":'' nlobs; '; put ' put '',"nvars":'' nvars; '; put ' %mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y '; put ' ,maxobs=&workobs '; put ' ) '; put ' data _null_; file _sjsref mod encoding=''utf-8''; '; put ' put "}"; '; put ' %end; '; put ' data _null_; file _sjsref mod encoding=''utf-8''; '; put ' put "}"; '; put ' run; '; put ' %end; '; put ' /* close off json */ '; put ' data _null_;file _sjsref mod encoding=''utf-8''; '; put ' length SYSPROCESSNAME syserrortext syswarningtext autoexec $512; '; put ' put ",""_DEBUG"" : ""&_debug"" "; '; put ' _METAUSER=quote(trim(symget(''_METAUSER''))); '; put ' put ",""_METAUSER"": " _METAUSER; '; put ' _METAPERSON=quote(trim(symget(''_METAPERSON''))); '; put ' put '',"_METAPERSON": '' _METAPERSON; '; put ' _PROGRAM=quote(trim(resolve(symget(''_PROGRAM'')))); '; put ' put '',"_PROGRAM" : '' _PROGRAM ; '; put ' autoexec=quote(urlencode(trim(getoption(''autoexec'')))); '; put ' put '',"AUTOEXEC" : '' autoexec; '; put ' put ",""MF_GETUSER"" : ""%mf_getuser()"" "; '; put ' put ",""SYSCC"" : ""&syscc"" "; '; put ' put ",""SYSENCODING"" : ""&sysencoding"" "; '; put ' syserrortext=cats(symget(''syserrortext'')); '; put ' if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do; '; put ' syserrortext=''"''!!trim( '; put ' prxchange(''s/"/\\"/'',-1, /* double quote */ '; put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ '; put ' prxchange(''s/\x0D/\r/'',-1, /* carriage return */ '; put ' prxchange(''s/\x09/\\t/'',-1, /* tab */ '; put ' prxchange(''s/\x00/\\u0000/'',-1, /* NUL */ '; put ' prxchange(''s/\x0E/\\u000E/'',-1, /* SS */ '; put ' prxchange(''s/\x0F/\\u000F/'',-1, /* SF */ '; put ' prxchange(''s/\x01/\\u0001/'',-1, /* SOH */ '; put ' prxchange(''s/\x02/\\u0002/'',-1, /* STX */ '; put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ '; put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ '; put ' prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */ '; put ' prxchange(''s/\\/\\\\/'',-1,syserrortext) '; put ' )))))))))))))!!''"''; '; put ' end; '; put ' else syserrortext=cats(''"'',syserrortext,''"''); '; put ' put '',"SYSERRORTEXT" : '' syserrortext; '; put ' put ",""SYSHOSTNAME"" : ""&syshostname"" "; '; put ' put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" "; '; put ' put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" "; '; put ' SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME))); '; put ' put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME; '; put ' put ",""SYSJOBID"" : ""&sysjobid"" "; '; put ' put ",""SYSSCPL"" : ""&sysscpl"" "; '; put ' put ",""SYSSITE"" : ""&syssite"" "; '; put ' put ",""SYSUSERID"" : ""&sysuserid"" "; '; put ' sysvlong=quote(trim(symget(''sysvlong''))); '; put ' put '',"SYSVLONG" : '' sysvlong; '; put ' syswarningtext=cats(symget(''syswarningtext'')); '; put ' if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do; '; put ' syswarningtext=''"''!!trim( '; put ' prxchange(''s/"/\\"/'',-1, /* double quote */ '; put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ '; put ' prxchange(''s/\x0D/\r/'',-1, /* carriage return */ '; put ' prxchange(''s/\x09/\\t/'',-1, /* tab */ '; put ' prxchange(''s/\x00/\\u0000/'',-1, /* NUL */ '; put ' prxchange(''s/\x0E/\\u000E/'',-1, /* SS */ '; put ' prxchange(''s/\x0F/\\u000F/'',-1, /* SF */ '; put ' prxchange(''s/\x01/\\u0001/'',-1, /* SOH */ '; put ' prxchange(''s/\x02/\\u0002/'',-1, /* STX */ '; put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ '; put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ '; put ' prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */ '; put ' prxchange(''s/\\/\\\\/'',-1,syswarningtext) '; put ' )))))))))))))!!''"''; '; put ' end; '; put ' else syswarningtext=cats(''"'',syswarningtext,''"''); '; put ' put '',"SYSWARNINGTEXT" : '' syswarningtext; '; put ' put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" ''; '; put ' length memsize $32; '; put ' memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)"; '; put ' memsize=quote(cats(memsize)); '; put ' put '',"MEMSIZE" : '' memsize; '; put ' put "}" @; '; put ' %if %str(&_debug) ge 131 %then %do; '; put ' put ''>>weboutEND<<''; '; put ' %end; '; put ' run; '; put ' /* now write to _webout 1 char at a time */ '; put ' data _null_; '; put ' infile _sjsref lrecl=1 recfm=n; '; put ' file &fref mod lrecl=1 recfm=n; '; put ' input sourcechar $char1. @@; '; put ' format sourcechar hex2.; '; put ' put sourcechar char1. @@; '; put ' run; '; put ' filename _sjsref clear; '; put ' '; put '%end; '; put ' '; put '%mend mm_webout; '; /* WEBOUT END */ put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO'; put ' ,maxobs=MAX'; put ');'; put ' %mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt,missing=&missing'; put ' ,showmeta=&showmeta,maxobs=&maxobs'; put ' )'; put '%mend;'; run; /* add precode and code */ %local work tmpfile; %let work=%sysfunc(pathname(work)); %let tmpfile=__mm_createwebservice.temp; %local x fref freflist mod; %let freflist= &adapter &precode &code ; %do x=1 %to %sysfunc(countw(&freflist)); %if &x>1 %then %let mod=mod; %let fref=%scan(&freflist,&x); %&mD.put &sysmacroname: adding &fref; data _null_; file "&work/&tmpfile" lrecl=3000 &mod; infile &fref; input; put _infile_; run; %end; /* create the metadata folder if not already there */ %mm_createfolder(path=&path) %if &syscc ge 4 %then %return; %if %upcase(&replace)=YES %then %do; %mm_deletestp(target=&path/&name) %end; /* create the web service */ %mm_createstp(stpname=&name ,filename=&tmpfile ,directory=&work ,tree=&path ,stpdesc=&desc ,mDebug=&mdebug ,server=&server ,stptype=2) /* find the web app url */ %local url; %let url=localhost/SASStoredProcess; data _null_; length url $128; rc=METADATA_GETURI("Stored Process Web App",url); if rc=0 then call symputx('url',url,'l'); run; %put &sysmacroname: STP &name successfully created in &path; %put Check it out here:; %put ;%put ;%put ; %put &url?_PROGRAM=&path/&name; %put ;%put ;%put ; %mend mm_createwebservice; /* system macros for build process end */ * BuildInit start; /** @file @brief Initialise build program for SAS 9 DC

SAS Macros

**/ options nomprint; %global _metaperson _url dcpath; /* set webout if not running in STP mode */ data _null_; if "&sysprocessmode" ne "SAS Stored Process Server" then do; call execute('filename _webout temp;'); end; run; * BuildInit end; %let path=services; %let service=clickme; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put '''';'; put 'put '' '';'; put 'put '' Data Controller'';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '''';'; put 'run;'; put '%sasjsout(HTML)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/admin; %let service=configurator; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief provides the web service to create the control tables'; put '@details'; put '

SAS Macros

'; put '@li dc_getusergroups.sas'; put '@li mf_getuser.sas'; put '@li mf_getapploc.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%let root=%mf_getapploc();'; put '/* create web page */'; put 'data _null_;'; put 'file _webout;'; put 'infile datalines ;'; put 'input;'; put 'put _infile_;'; put 'datalines4;'; put ''; put ''; put ''; put ''; put 'Data Controller'; put ''; put ''; put ''; put ''; put ''; put '
'; put '
'; put ''; put 'Data Controller'; put '
'; put '
'; put '
'; put '
'; put '
'; put '
'; put ''; put '
'; put '
'; put 'Terms and Conditions'; put '
'; put '
'; put '
'; put '

Due to the way the Demo version is compiled (in an easy-to-deploy but'; put 'inefficient-to-run format), it should not be deployed to production servers.'; put 'Before proceeding with configuration, please confirm that you have read,'; put 'understood, and agreed to the'; put 'Data Controller for SAS© Evaluation Agreement.'; put '

'; put '
'; put '
'; put '>'; put ''; put '
'; put '
'; put '
'; put ''; put ''; put '
'; put '
'; put '
'; put ''; put ''; put ';;;;'; put 'run;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=dirlist; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_dirlist(path=%sysfunc(pathname(work))'; put ', fref=0'; put ', outds=work.mp_dirlist'; put ', getattrs=NO'; put ', showparent=NO'; put ', maxdepth=0'; put ', level=0 /* The level of recursion to perform. For internal use only. */'; put ')/*/STORE SOURCE*/;'; put '%let getattrs=%upcase(&getattrs)XX;'; put '/* temp table */'; put '%local out_ds;'; put 'data;run;'; put '%let out_ds=%str(&syslast);'; put '/* drop main (top) table if it exists */'; put '%if &level=0 %then %do;'; put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)'; put '%end;'; put 'data &out_ds(compress=no'; put 'keep=file_or_folder filepath filename ext msg directory level'; put ');'; put 'length directory filepath $2000 fref fref2 $8 file_or_folder $6 filename $255'; put 'ext $20 msg $200 foption $16;'; put 'if _n_=1 then call missing(of _all_);'; put 'retain level &level;'; put '%if &fref=0 %then %do;'; put 'rc = filename(fref, "&path");'; put '%end;'; put '%else %do;'; put 'fref="&fref";'; put 'rc=0;'; put '%end;'; put 'if rc = 0 then do;'; put 'did = dopen(fref);'; put 'if did=0 then do;'; put 'putlog "NOTE: This directory is empty, or does not exist - &path";'; put 'msg=sysmsg();'; put 'put (_all_)(=);'; put 'stop;'; put 'end;'; put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */'; put 'numopts=doptnum(did);'; put 'do i=1 to numopts;'; put 'foption=doptname(did,i);'; put 'if foption=:''Directory'' then i=numopts;'; put 'end;'; put 'directory=dinfo(did,foption);'; put 'rc = filename(fref);'; put 'end;'; put 'else do;'; put 'msg=sysmsg();'; put 'put _all_;'; put 'stop;'; put 'end;'; put 'dnum = dnum(did);'; put 'do i = 1 to dnum;'; put 'filename = dread(did, i);'; put 'filepath=cats(directory,''/'',filename);'; put 'rc = filename(fref2,filepath);'; put 'midd=dopen(fref2);'; put 'dmsg=sysmsg();'; put 'if did > 0 then file_or_folder=''folder'';'; put 'rc=dclose(midd);'; put 'midf=fopen(fref2);'; put 'fmsg=sysmsg();'; put 'if midf > 0 then file_or_folder=''file'';'; put 'rc=fclose(midf);'; put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')'; put 'then file_or_folder=''file'';'; put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';'; put 'else if file_or_folder='''' then file_or_folder=''locked'';'; put 'if file_or_folder=''file'' then do;'; put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);'; put 'if filename = ext then ext = '' '';'; put 'end;'; put 'else do;'; put 'ext='''';'; put 'file_or_folder=''folder'';'; put 'end;'; put 'output;'; put 'end;'; put 'rc = dclose(did);'; put '%if &showparent=YES and &level=0 %then %do;'; put 'filepath=directory;'; put 'file_or_folder=''folder'';'; put 'ext='''';'; put 'filename=scan(directory,-1,''/\'');'; put 'msg='''';'; put 'level=&level;'; put 'output;'; put '%end;'; put 'stop;'; put 'run;'; put '%if %substr(&getattrs,1,1)=Y %then %do;'; put 'data &out_ds;'; put 'set &out_ds;'; put 'length infoname infoval $60 fref $8;'; put 'if _n_=1 then call missing(fref);'; put 'rc=filename(fref,filepath);'; put 'drop rc infoname fid i close fref;'; put 'if file_or_folder=''file'' then do;'; put 'fid=fopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open file:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to foptnum(fid);'; put 'infoname=foptname(fid,i);'; put 'infoval=finfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=fclose(fid);'; put 'end;'; put 'else do;'; put 'fid=dopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open folder:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to doptnum(fid);'; put 'infoname=doptname(fid,i);'; put 'infoval=dinfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=dclose(fid);'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by filepath sasname;'; put 'proc transpose data=&out_ds out=&out_ds(drop=_:);'; put 'id sasname;'; put 'var infoval;'; put 'by filepath file_or_folder filename ext ;'; put 'run;'; put '%end;'; put 'data &out_ds;'; put 'set &out_ds(where=(filepath ne ''''));'; put 'run;'; put '/**'; put '* The above transpose can mean that some updates create additional columns.'; put '* This necessitates the occasional use of datastep over proc append.'; put '*/'; put '%if %mf_existds(&outds) %then %do;'; put '%local basevars appvars newvars;'; put '%let basevars=%mf_getvarlist(&outds);'; put '%let appvars=%mf_getvarlist(&out_ds);'; put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));'; put '%if &newvars>0 %then %do;'; put 'data &outds;'; put 'set &outds &out_ds;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds force nowarn;'; put 'run;'; put '%end;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds;'; put 'run;'; put '%end;'; put '/* recursive call */'; put '%if &maxdepth>&level or &maxdepth=MAX %then %do;'; put 'data _null_;'; put 'set &out_ds;'; put 'where file_or_folder=''folder'';'; put '%if &showparent=YES and &level=0 %then %do;'; put 'if filepath ne directory;'; put '%end;'; put 'length code $10000;'; put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"'; put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");'; put 'put code=;'; put 'call execute(code);'; put 'run;'; put '%end;'; put '/* tidy up */'; put 'proc sql;'; put 'drop table &out_ds;'; put '%mend mp_dirlist;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Fetches directories to facilitate configuration'; put '@details The service can also be invoked using the following URL param:'; put '@li &parent= (parent path)'; put '

SAS Macros

'; put '@li mp_dirlist.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%global parent;'; put '/* if no flavour is specified, default to root */'; put '%let parent=%sysfunc(coalescec(&parent,/));'; put '%mp_dirlist(path=&parent,outds=dirlist, maxdepth=2)'; put '%webout(OPEN)'; put '%webout(OBJ,dirlist)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=exportconfig; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_ds2cards(base_ds, tgt_ds='; put ',cards_file="%sysfunc(pathname(work))/cardgen.sas"'; put ',maxobs=max'; put ',random_sample=NO'; put ',showlog=YES'; put ',outencoding='; put ',append=NO'; put ')/*/STORE SOURCE*/;'; put '%local i setds nvars;'; put '%if not %sysfunc(exist(&base_ds)) %then %do;'; put '%put %str(WARN)ING: &base_ds does not exist;'; put '%return;'; put '%end;'; put '%if %index(&base_ds,.)=0 %then %let base_ds=WORK.&base_ds;'; put '%if (&tgt_ds = ) %then %let tgt_ds=&base_ds;'; put '%if %index(&tgt_ds,.)=0 %then %let tgt_ds=WORK.%scan(&base_ds,2,.);'; put '%if ("&outencoding" ne "") %then %let outencoding=encoding="&outencoding";'; put '%if ("&append" = "" or "&append" = "NO") %then %let append=;'; put '%else %let append=mod;'; put '/* get varcount */'; put '%let nvars=0;'; put 'proc sql noprint;'; put 'select count(*) into: nvars from dictionary.columns'; put 'where upcase(libname)="%scan(%upcase(&base_ds),1)"'; put 'and upcase(memname)="%scan(%upcase(&base_ds),2)";'; put '%if &nvars=0 %then %do;'; put '%put %str(WARN)ING: Dataset &base_ds has no variables, will not be converted.;'; put '%return;'; put '%end;'; put '/* get indexes */'; put 'proc sort'; put 'data=sashelp.vindex('; put 'where=(upcase(libname)="%scan(%upcase(&base_ds),1)"'; put 'and upcase(memname)="%scan(%upcase(&base_ds),2)")'; put ')'; put 'out=_data_;'; put 'by indxname indxpos;'; put 'run;'; put '%local indexes;'; put 'data _null_;'; put 'set &syslast end=last;'; put 'if _n_=1 then call symputx(''indexes'',''(index=('',''l'');'; put 'by indxname indxpos;'; put 'length vars $32767 nom uni $8;'; put 'retain vars;'; put 'if first.indxname then do;'; put 'idxcnt+1;'; put 'nom='''';'; put 'uni='''';'; put 'vars=name;'; put 'end;'; put 'else vars=catx('' '',vars,name);'; put 'if last.indxname then do;'; put 'if nomiss=''yes'' then nom=''/nomiss'';'; put 'if unique=''yes'' then uni=''/unique'';'; put 'call symputx(''indexes'''; put ',catx('' '',symget(''indexes''),indxname,''=('',vars,'')'',nom,uni)'; put ',''l'');'; put 'end;'; put 'if last then call symputx(''indexes'',cats(symget(''indexes''),''))''),''l'');'; put 'run;'; put 'data;run;'; put '%let setds=&syslast;'; put 'proc sql'; put '%if %datatyp(&maxobs)=NUMERIC %then %do;'; put 'outobs=&maxobs;'; put '%end;'; put ';'; put 'create table &setds as select * from &base_ds'; put '%if &random_sample=YES %then %do;'; put 'order by ranuni(42)'; put '%end;'; put ';'; put 'reset outobs=max;'; put 'create table datalines1 as'; put 'select name,type,length,varnum,format,label from dictionary.columns'; put 'where upcase(libname)="%upcase(%scan(&base_ds,1))"'; put 'and upcase(memname)="%upcase(%scan(&base_ds,2))";'; put '/**'; put 'Due to long decimals cannot use best. format'; put 'So - use bestd. format and then use character functions to strip trailing'; put 'zeros, if NOT an integer or missing!! Cannot use int() as it upsets'; put 'note2err when there are missings.'; put 'resolved code = ifc( mod(coalesce(VARIABLE,0),1)=0'; put ',put(VARIABLE,best32.)'; put ',substrn(put(VARIABLE,bestd32.),1'; put ',findc(put(VARIABLE,bestd32.),''0'',''TBK'')));'; put '**/'; put 'data datalines_2;'; put 'format dataline $32000.;'; put 'set datalines1 (where=(upcase(name) not in'; put '(''PROCESSED_DTTM'',''VALID_FROM_DTTM'',''VALID_TO_DTTM'')));'; put 'if type=''num'' then dataline='; put 'cats(''ifc(mod(coalesce('',name,'',0),1)=0'; put ',put('',name,'',best32.-l)'; put ',substrn(put('',name,'',bestd32.-l),1'; put ',findc(put('',name,'',bestd32.-l),"0","TBK")))'');'; put '/**'; put '* binary data must be converted, to store in text format. It is identified'; put '* by the presence of the $HEX keyword in the format.'; put '*/'; put 'else if upcase(format)=:''$HEX'' then'; put 'dataline=cats(''put(trim('',name,''),'',format,'')'');'; put '/**'; put '* There is no easy way to store line breaks in a cards file.'; put '* To discuss this, use: https://github.com/sasjs/core/issues/80'; put '* Removing all nonprintables with kw (keep writeable)'; put '*/'; put 'else dataline=cats(''compress('',name,'', ,"kw")'');'; put 'run;'; put 'proc sql noprint;'; put 'select dataline into: datalines separated by '','' from datalines_2;'; put '%local'; put 'process_dttm_flg'; put 'valid_from_dttm_flg'; put 'valid_to_dttm_flg'; put ';'; put '%let process_dttm_flg = N;'; put '%let valid_from_dttm_flg = N;'; put '%let valid_to_dttm_flg = N;'; put 'data _null_;'; put 'set datalines1 ;'; put '/* build attrib statement */'; put 'if type=''char'' then type2=''$'';'; put 'if strip(format) ne '''' then format2=cats(''format='',format);'; put 'if strip(label) ne '''' then label2=cats(''label='',quote(trim(label)));'; put 'str1=catx('' '',(put(name,$33.)||''length='')'; put ',put(cats(type2,length),$7.)||format2,label2);'; put '/* Build input statement */'; put 'if upcase(format)=:''$HEX'' then type3='':''!!format;'; put 'else if type=''char'' then type3='':$char.'';'; put 'str2=put(name,$33.)||type3;'; put 'if(upcase(name) = "PROCESSED_DTTM") then'; put 'call symputx("process_dttm_flg", "Y", "L");'; put 'if(upcase(name) = "VALID_FROM_DTTM") then'; put 'call symputx("valid_from_dttm_flg", "Y", "L");'; put 'if(upcase(name) = "VALID_TO_DTTM") then'; put 'call symputx("valid_to_dttm_flg", "Y", "L");'; put 'call symputx(cats("attrib_stmt_", put(_N_, 8.)), str1, "L");'; put 'call symputx(cats("input_stmt_", put(_N_, 8.))'; put ', ifc(upcase(name) not in'; put '(''PROCESSED_DTTM'',''VALID_FROM_DTTM'',''VALID_TO_DTTM''), str2, ""), "L");'; put 'run;'; put 'data _null_;'; put 'file &cards_file. &outencoding lrecl=32767 termstr=nl &append;'; put 'length __attrib $32767;'; put 'if _n_=1 then do;'; put 'put ''/**'';'; put 'put '' @file'';'; put 'put " @brief Datalines for %upcase(%scan(&base_ds,2)) dataset";'; put 'put " @details Generated by %nrstr(%%)mp_ds2cards()";'; put 'put " Source: https://github.com/sasjs/core";'; put 'put '' @cond '';'; put 'put ''**/'';'; put 'put "data &tgt_ds &indexes;";'; put 'put "attrib ";'; put '%do i = 1 %to &nvars;'; put '__attrib=symget("attrib_stmt_&i");'; put 'put __attrib;'; put '%end;'; put 'put ";";'; put '%if &process_dttm_flg. eq Y %then %do;'; put 'put ''retain PROCESSED_DTTM %sysfunc(datetime());'';'; put '%end;'; put '%if &valid_from_dttm_flg. eq Y %then %do;'; put 'put ''retain VALID_FROM_DTTM &low_date;'';'; put '%end;'; put '%if &valid_to_dttm_flg. eq Y %then %do;'; put 'put ''retain VALID_TO_DTTM &high_date;'';'; put '%end;'; put 'if __nobs=0 then do;'; put 'put ''call missing(of _all_);/* avoid uninitialised notes */'';'; put 'put ''stop;'';'; put 'put ''run;'';'; put 'end;'; put 'else do;'; put 'put "infile cards dsd;";'; put 'put "input ";'; put '%do i = 1 %to &nvars.;'; put '%if(%length(&&input_stmt_&i..)) %then'; put 'put " &&input_stmt_&i..";'; put ';'; put '%end;'; put 'put ";";'; put 'put ''missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;'';'; put 'put "datalines4;";'; put 'end;'; put 'end;'; put 'set &setds end=__lastobs nobs=__nobs;'; put '/* remove all formats for write purposes - some have long underlying decimals */'; put 'format _numeric_ best30.29;'; put 'length __dataline $32767;'; put '__dataline=catq(''cqtmb'',&datalines);'; put 'put __dataline;'; put 'if __lastobs then do;'; put 'put '';;;;'';'; put 'put ''run;'';'; put 'put ''/** @endcond **/'';'; put 'stop;'; put 'end;'; put 'run;'; put 'proc sql;'; put 'drop table &setds;'; put 'quit;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &cards_file lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: CARDS FILE SAVED IN:;'; put '%put NOTE-;%put NOTE-;'; put '%put NOTE- %sysfunc(dequote(&cards_file.));'; put '%put NOTE-;%put NOTE-;'; put '%mend mp_ds2cards;'; put '/** @endcond **/'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mfs_httpheader(header_name'; put ',header_value'; put ')/*/STORE SOURCE*/;'; put '%global sasjs_stpsrv_header_loc;'; put '%local fref fid i;'; put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;'; put '%put &=fref &=sasjs_stpsrv_header_loc;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%mend mfs_httpheader;'; put '%macro mp_streamfile('; put 'contenttype=TEXT'; put ',inloc='; put ',inref=0'; put ',iftrue=%str(1=1)'; put ',outname='; put ',outref=_webout'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let contentype=%upcase(&contenttype);'; put '%let outref=%upcase(&outref);'; put '%local platform; %let platform=%mf_getplatform();'; put '/**'; put '* check engine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put '%local streamweb;'; put '%let streamweb=0;'; put 'data _null_;'; put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));'; put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');'; put 'run;'; put '%if &contentype=CSV %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/csv'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/csv'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/csv)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=EXCEL %then %do;'; put '/* suitable for XLS format */'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype=''application/vnd.ms-excel'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="image/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"'; put 'contenttype="text/%lowcase(&contenttype)"'; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=TEXT %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/text'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/text'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/text)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="font/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=XLSX %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'','; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype='; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type'; put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; put ')'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=ZIP %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/zip'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip'''; put 'contenttype=''application/zip'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/zip)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;'; put '%end;'; put '%if &inref ne 0 %then %do;'; put '%mp_binarycopy(inref=&inref,outref=&outref)'; put '%end;'; put '%else %do;'; put '%mp_binarycopy(inloc="&inloc",outref=&outref)'; put '%end;'; put '%mend mp_streamfile;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Downloads zip file of DC customer configurations'; put '@details Zip contains several excel files, containing the customer specific'; put '(non-DC) configurations. Useful when migrating to a new instance of'; put 'Data Controller.'; put '

SAS Macros

'; put '@li mf_getuser.sas'; put '@li mf_nobs.sas'; put '@li mp_ds2cards.sas'; put '@li mp_abort.sas'; put '@li mp_binarycopy.sas'; put '@li mp_streamfile.sas'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%let work=%sysfunc(pathname(work));'; put '/* excel does not work in all envs */'; put '%let mime=application/vnd.ms-excel;'; put '%let dbms=EXCEL;'; put '%let mime=application/csv;'; put '%let dbms=CSV;'; put '%let ext=csv;'; put '%macro conditional_export(ds);'; put '%if %mf_nobs(&ds)>0 %then %do;'; put 'PROC EXPORT DATA= &ds OUTFILE= "&work/&ds..&ext"'; put 'DBMS=&dbms REPLACE;'; put 'RUN;'; put 'ods package(ProdOutput) add file="&work/&ds..&ext" mimetype="&mime";'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%nrstr(syscc=&syscc after &ds prep)'; put ')'; put '%mend conditional_export;'; put 'ods package(ProdOutput) open nopf;'; put 'data MPE_ALERTS;'; put 'set &mpelib..MPE_ALERTS;'; put 'where &dc_dttmtfmt. le tx_to;'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_ALERTS)'; put 'data MPE_COLUMN_LEVEL_SECURITY;'; put 'set &mpelib..MPE_COLUMN_LEVEL_SECURITY;'; put 'where &dc_dttmtfmt. le tx_to;'; put 'where also CLS_LIBREF ne "&mpelib";'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_COLUMN_LEVEL_SECURITY)'; put 'data MPE_CONFIG;'; put 'set &mpelib..MPE_CONFIG;'; put 'where &dc_dttmtfmt. le tx_to;'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_CONFIG)'; put 'data MPE_DATADICTIONARY;'; put 'set &mpelib..MPE_DATADICTIONARY;'; put 'where &dc_dttmtfmt. le tx_to;'; put 'drop tx_: ;'; put 'if DD_SOURCE=:"&mpelib" then do;'; put '/* nothing */'; put 'end;'; put 'else output;'; put 'run;'; put '%conditional_export(MPE_DATADICTIONARY)'; put 'data MPE_EMAILS;'; put 'set &mpelib..MPE_EMAILS;'; put 'where &dc_dttmtfmt. le tx_to;'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_EMAILS)'; put 'data MPE_EXCEL_CONFIG;'; put 'set &mpelib..MPE_EXCEL_CONFIG;'; put 'where &dc_dttmtfmt. le tx_to;'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_EXCEL_CONFIG)'; put 'data MPE_GROUPS;'; put 'set &mpelib..MPE_GROUPS;'; put 'where &dc_dttmtfmt. le tx_to;'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_GROUPS)'; put 'data MPE_ROW_LEVEL_SECURITY;'; put 'set &mpelib..MPE_ROW_LEVEL_SECURITY;'; put 'where &dc_dttmtfmt. le tx_to;'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_ROW_LEVEL_SECURITY)'; put 'data MPE_SECURITY;'; put 'set &mpelib..MPE_SECURITY;'; put 'where &dc_dttmtfmt. le TX_TO;'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_SECURITY)'; put 'data MPE_SELECTBOX;'; put 'set &mpelib..MPE_SELECTBOX;'; put 'where &dc_dttmtfmt. le ver_to_dttm;'; put 'where also select_lib ne "&mpelib";'; put 'drop ver_: selectbox_rk;'; put 'run;'; put '%conditional_export(MPE_SELECTBOX)'; put 'data MPE_TABLES;'; put 'set &mpelib..MPE_TABLES;'; put 'where &dc_dttmtfmt. le TX_TO;'; put 'where also LIBREF ne "&mpelib";'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_TABLES)'; put 'data MPE_VALIDATIONS;'; put 'set &mpelib..MPE_VALIDATIONS;'; put 'where &dc_dttmtfmt. le TX_TO;'; put 'where also BASE_LIB ne "&mpelib";'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_VALIDATIONS)'; put '/* finish up zip file */'; put 'ods package(ProdOutput) publish archive properties'; put '(archive_name="DCBACKUP.zip" archive_path="&work");'; put 'ods package(ProdOutput) close;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%nrstr(syscc=&syscc after zip prep)'; put ')'; put '/* now serve zip file to client */'; put '%mp_streamfile(contenttype=ZIP'; put ',inloc=%str(&work/DCBACKUP.zip)'; put ',outname=DCBACKUP.zip'; put ')'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=exportdb; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_existfileref(fref'; put ')/*/STORE SOURCE*/;'; put '%local rc;'; put '%let rc=%sysfunc(fileref(&fref));'; put '%if &rc=0 %then %do;'; put '1'; put '%end;'; put '%else %if &rc<0 %then %do;'; put '%put &sysmacroname: Fileref &fref exists but the underlying file does not;'; put '1'; put '%end;'; put '%else %do;'; put '0'; put '%end;'; put '%mend mf_existfileref;'; put '%macro mf_getvarcount(libds,typefilter=A'; put ')/*/STORE SOURCE*/;'; put '%local dsid nvars rc outcnt x;'; put '%let dsid=%sysfunc(open(&libds));'; put '%let nvars=.;'; put '%let outcnt=0;'; put '%let typefilter=%upcase(&typefilter);'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &typefilter=A %then %let outcnt=&nvars;'; put '%else %if &nvars>0 %then %do x=1 %to &nvars;'; put '/* increment based on variable type */'; put '%if %sysfunc(vartype(&dsid,&x))=&typefilter %then %do;'; put '%let outcnt=%eval(&outcnt+1);'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put unable to open &libds (rc=&dsid);'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '&outcnt'; put '%mend mf_getvarcount;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_getconstraints(lib=WORK'; put ',ds='; put ',outds=mp_getconstraints'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '/**'; put '* Cater for environments where sashelp.vcncolu is not available'; put '*/'; put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;'; put 'proc sql;'; put 'create table &outds('; put 'libref char(8)'; put ',TABLE_NAME char(32)'; put ',constraint_type char(8) label=''Constraint Type'''; put ',constraint_name char(32) label=''Constraint Name'''; put ',column_name char(32) label=''Column'''; put ',constraint_order num'; put ');'; put '%return;'; put '%end;'; put '/**'; put '* Neither dictionary tables nor sashelp provides a constraint order column,'; put '* however they DO arrive in the correct order. So, create the col.'; put '**/'; put '%local vw;'; put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);'; put 'data &vw /view=&vw;'; put 'set sashelp.vcncolu;'; put 'where table_catalog="&lib";'; put '/* use retain approach to reset the constraint order with each constraint */'; put 'length tmp $1000;'; put 'retain tmp;'; put 'drop tmp;'; put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;'; put 'constraint_order=1;'; put 'end;'; put 'else constraint_order+1;'; put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);'; put 'run;'; put '/* must use SQL as proc datasets does not support length changes */'; put 'proc sql noprint;'; put 'create table &outds as'; put 'select upcase(a.TABLE_CATALOG) as libref'; put ',upcase(a.TABLE_NAME) as TABLE_NAME'; put ',a.constraint_type'; put ',a.constraint_name'; put ',b.column_name'; put ',b.constraint_order'; put 'from dictionary.TABLE_CONSTRAINTS a'; put 'left join &vw b'; put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)'; put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)'; put 'and a.constraint_name=b.constraint_name'; put '/**'; put '* We cannot apply this clause to the underlying dictionary table. See:'; put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867'; put '* cannot use`where calculated libref="&lib"` either as it will STILL execute'; put '* all the underlying constraint queries, causing exception errors in some'; put '* cases: https://github.com/sasjs/core/issues/283'; put '*/'; put 'where a.TABLE_CATALOG="&lib"'; put '%if "&ds" ne "" %then %do;'; put 'and upcase(a.TABLE_NAME)="&ds"'; put 'and upcase(b.TABLE_NAME)="&ds"'; put '%end;'; put 'order by libref, table_name, constraint_name, constraint_order'; put ';'; put '/* tidy up */'; put '%mp_dropmembers('; put '&vw,'; put 'iftrue=(&mdebug=0)'; put ')'; put '%mend mp_getconstraints;'; put '%macro mp_getddl(libref,ds,fref=getddl,flavour=SAS,showlog=NO,schema='; put ',applydttm=NO'; put ')/*/STORE SOURCE*/;'; put '/* check fileref is assigned */'; put '%if %mf_existfileref(&fref)=0 %then %do;'; put 'filename &fref temp ;'; put '%end;'; put '%if %length(&libref)=0 %then %let libref=WORK;'; put '%let flavour=%upcase(&flavour);'; put 'proc sql noprint;'; put 'create table _data_ as'; put 'select * from dictionary.tables'; put 'where upcase(libname)="%upcase(&libref)"'; put 'and memtype=''DATA'' /* views not currently supported */'; put '%if %length(&ds)>0 %then %do;'; put 'and upcase(memname)="%upcase(&ds)"'; put '%end;'; put ';'; put '%local tabinfo; %let tabinfo=&syslast;'; put 'create table _data_ as'; put 'select * from dictionary.columns'; put 'where upcase(libname)="%upcase(&libref)"'; put '%if %length(&ds)>0 %then %do;'; put 'and upcase(memname)="%upcase(&ds)"'; put '%end;'; put ';'; put '%local colinfo; %let colinfo=&syslast;'; put '%local dsnlist;'; put 'select distinct upcase(memname) into: dsnlist'; put 'separated by '' '''; put 'from &syslast'; put ';'; put 'create table _data_ as'; put 'select * from dictionary.indexes'; put 'where upcase(libname)="%upcase(&libref)"'; put '%if %length(&ds)>0 %then %do;'; put 'and upcase(memname)="%upcase(&ds)"'; put '%end;'; put 'order by idxusage, indxname, indxpos'; put ';'; put '%local idxinfo; %let idxinfo=&syslast;'; put '/* Extract all Primary Key and Unique data constraints */'; put '%mp_getconstraints(lib=%upcase(&libref),ds=%upcase(&ds),outds=_data_)'; put '%local colconst; %let colconst=&syslast;'; put '%macro addConst();'; put '%global constraints_used;'; put 'data _null_;'; put 'length ctype $11 constraint_name_orig $256 constraints_used $5000;'; put 'set &colconst('; put 'where=(table_name="&curds" and constraint_type in (''PRIMARY'',''UNIQUE''))'; put ') end=last;'; put 'file &fref mod;'; put 'by constraint_type constraint_name;'; put 'retain constraints_used;'; put 'constraint_name_orig=constraint_name;'; put 'if upcase(strip(constraint_type)) = ''PRIMARY'' then ctype=''PRIMARY KEY'';'; put 'else ctype=strip(constraint_type);'; put '%if &flavour=TSQL %then %do;'; put 'column_name=catt(''['',column_name,'']'');'; put 'constraint_name=catt(''['',constraint_name,'']'');'; put '%end;'; put '%else %if &flavour=PGSQL %then %do;'; put 'column_name=catt(''"'',column_name,''"'');'; put 'constraint_name=catt(''"'',constraint_name,''"'');'; put '%end;'; put 'if first.constraint_name then do;'; put 'constraints_used = catx('' '', constraints_used, constraint_name_orig);'; put 'put " ,CONSTRAINT " constraint_name ctype "(" ;'; put 'put '' '' column_name;'; put 'end;'; put 'else put '' ,'' column_name;'; put 'if last.constraint_name then do;'; put 'put " )";'; put 'call symput(''constraints_used'',strip(constraints_used));'; put 'end;'; put 'run;'; put '%put &=constraints_used;'; put '%mend addConst;'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* DDL generated by &sysuserid on %sysfunc(datetime(),datetime19.) */";'; put 'run;'; put '%local x curds;'; put '%if &flavour=SAS %then %do;'; put '%do x=1 %to %sysfunc(countw(&dsnlist));'; put '%let curds=%scan(&dsnlist,&x);'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* SAS Flavour DDL for %upcase(&libref).&curds */";'; put 'put "proc sql;";'; put 'run;'; put 'data _null_;'; put 'file &fref mod;'; put 'length lab $1024 typ $20;'; put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;'; put 'if _n_=1 then do;'; put 'if memtype=''DATA'' then do;'; put 'put "create table &libref..&curds(";'; put 'end;'; put 'else do;'; put '/* just a placeholder - we filter out views at the top */'; put 'put "create view &libref..&curds(";'; put 'end;'; put 'put " "@@;'; put 'end;'; put 'else put " ,"@@;'; put 'if length(format)>1 then fmt=" format="!!cats(format);'; put 'if length(label)>1 then'; put 'lab=" label="!!cats("''",tranwrd(label,"''","''''"),"''");'; put 'if notnull=''yes'' then notnul='' not null'';'; put 'if type=''char'' then typ=cats(''char('',length,'')'');'; put 'else if length ne 8 then typ=''num length=''!!cats(length);'; put 'else typ=''num'';'; put 'put name typ fmt notnul lab;'; put 'run;'; put '/* Extra step for data constraints */'; put '%addConst()'; put 'data _null_;'; put 'file &fref mod;'; put 'put '');'';'; put 'run;'; put '/* Create Unique Indexes, but only if they were not already defined within'; put 'the Constraints section. */'; put 'data _null_;'; put '*length ds $128;'; put 'set &idxinfo('; put 'where=('; put 'memname="&curds"'; put 'and unique=''yes'''; put 'and indxname not in ('; put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))'; put ')'; put ')'; put ');'; put 'file &fref mod;'; put 'by idxusage indxname;'; put '/* ds=cats(libname,''.'',memname); */'; put 'if first.indxname then do;'; put 'put ''CREATE UNIQUE INDEX '' indxname "ON &libref..&curds (" ;'; put 'put '' '' name ;'; put 'end;'; put 'else put '' ,'' name ;'; put '*else put '' ,'' name ;'; put 'if last.indxname then do;'; put 'put '');'';'; put 'end;'; put 'run;'; put '/*'; put 'ods output IntegrityConstraints=ic;'; put 'proc contents data=testali out2=info;'; put 'run;'; put '*/'; put '%end;'; put '%end;'; put '%else %if &flavour=TSQL %then %do;'; put '/* if schema does not exist, set to be same as libref */'; put '%local schemaactual;'; put 'proc sql noprint;'; put 'select sysvalue into: schemaactual'; put 'from dictionary.libnames'; put 'where upcase(libname)="&libref" and engine=''SQLSVR'';'; put '%let schema=%sysfunc(coalescec(&schemaactual,&schema,&libref));'; put '%do x=1 %to %sysfunc(countw(&dsnlist));'; put '%let curds=%scan(&dsnlist,&x);'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* TSQL Flavour DDL for &schema..&curds */";'; put 'data _null_;'; put 'file &fref mod;'; put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;'; put 'if _n_=1 then do;'; put 'if memtype=''DATA'' then do;'; put 'put "create table [&schema].[&curds](";'; put 'end;'; put 'else do;'; put '/* just a placeholder - we filter out views at the top */'; put 'put "create view [&schema].[&curds](";'; put 'end;'; put 'put " "@@;'; put 'end;'; put 'else put " ,"@@;'; put 'format=upcase(format);'; put 'if 1=0 then; /* dummy if */'; put '%if &applydttm=YES %then %do;'; put 'else if format=:''DATETIME'' then fmt=''[datetime2](7) '';'; put '%end;'; put 'else if type=''num'' then fmt=''[decimal](18,2)'';'; put 'else if length le 8000 then fmt=''[varchar](''!!cats(length)!!'')'';'; put 'else fmt=cats(''[varchar](max)'');'; put 'if notnull=''yes'' then notnul='' NOT NULL'';'; put 'put "[" name +(-1) "]" fmt notnul;'; put 'run;'; put '/* Extra step for data constraints */'; put '%addConst()'; put '/* Create Unique Indexes, but only if they were not already defined within'; put 'the Constraints section. */'; put 'data _null_;'; put '*length ds $128;'; put 'set &idxinfo('; put 'where=('; put 'memname="&curds"'; put 'and unique=''yes'''; put 'and indxname not in ('; put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))'; put ')'; put ')'; put ');'; put 'file &fref mod;'; put 'by idxusage indxname;'; put '*ds=cats(libname,''.'',memname);'; put 'if first.indxname then do;'; put '/* add nonclustered in case of multiple unique indexes */'; put 'put '' ,index ['' indxname +(-1) ''] UNIQUE NONCLUSTERED ('';'; put 'put '' ['' name +(-1) '']'';'; put 'end;'; put 'else put '' ,['' name +(-1) '']'';'; put 'if last.indxname then do;'; put 'put '' )'';'; put 'end;'; put 'run;'; put 'data _null_;'; put 'file &fref mod;'; put 'put '')'';'; put 'put ''GO'';'; put 'run;'; put '/* add extended properties for labels */'; put 'data _null_;'; put 'file &fref mod;'; put 'length nm $64 lab $1024;'; put 'set &colinfo (where=(upcase(memname)="&curds" and label ne '''')) end=last;'; put 'nm=cats("N''",tranwrd(name,"''","''''"),"''");'; put 'lab=cats("N''",tranwrd(label,"''","''''"),"''");'; put 'put '' '';'; put 'put "EXEC sys.sp_addextendedproperty ";'; put 'put " @name=N''MS_Description'',@value=" lab ;'; put 'put " ,@level0type=N''SCHEMA'',@level0name=N''&schema'' ";'; put 'put " ,@level1type=N''TABLE'',@level1name=N''&curds''";'; put 'put " ,@level2type=N''COLUMN'',@level2name=" nm ;'; put 'if last then put ''GO'';'; put 'run;'; put '%end;'; put '%end;'; put '%else %if &flavour=PGSQL %then %do;'; put '/* if schema does not exist, set to be same as libref */'; put '%local schemaactual;'; put 'proc sql noprint;'; put 'select sysvalue into: schemaactual'; put 'from dictionary.libnames'; put 'where upcase(libname)="&libref" and engine=''POSTGRES'';'; put '%let schema=%sysfunc(coalescec(&schemaactual,&schema,&libref));'; put 'data _null_;'; put 'file &fref mod;'; put 'put "CREATE SCHEMA &schema;";'; put '%do x=1 %to %sysfunc(countw(&dsnlist));'; put '%let curds=%scan(&dsnlist,&x);'; put '%local curdsvarcount;'; put '%let curdsvarcount=%mf_getvarcount(&libref..&curds);'; put '%if &curdsvarcount>1600 %then %do;'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* &libref..&curds contains &curdsvarcount vars */";'; put 'put "/* Postgres cannot create tables with over 1600 vars */";'; put 'put "/* No DDL will be generated for this table";'; put 'run;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* Postgres Flavour DDL for &schema..&curds */";'; put 'data _null_;'; put 'file &fref mod;'; put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;'; put 'length fmt $32;'; put 'if _n_=1 then do;'; put 'if memtype=''DATA'' then do;'; put 'put "CREATE TABLE &schema..&curds (";'; put 'end;'; put 'else do;'; put '/* just a placeholder - we filter out views at the top */'; put 'put "CREATE VIEW &schema..&curds (";'; put 'end;'; put 'put " "@@;'; put 'end;'; put 'else put " ,"@@;'; put 'format=upcase(format);'; put 'if 1=0 then; /* dummy if */'; put '%if &applydttm=YES %then %do;'; put 'else if format=:''DATETIME'' then fmt='' TIMESTAMP '';'; put '%end;'; put 'else if type=''num'' then fmt='' DOUBLE PRECISION'';'; put 'else fmt=''VARCHAR(''!!cats(length)!!'')'';'; put 'if notnull=''yes'' then notnul='' NOT NULL'';'; put '/* quote column names in case they represent reserved words */'; put 'name2=quote(trim(name));'; put 'put name2 fmt notnul;'; put 'run;'; put '/* Extra step for data constraints */'; put '%addConst()'; put 'data _null_;'; put 'file &fref mod;'; put 'put '');'';'; put 'run;'; put '/* Create Unique Indexes, but only if they were not already defined within'; put 'the Constraints section. */'; put 'data _null_;'; put '*length ds $128;'; put 'set &idxinfo('; put 'where=('; put 'memname="&curds"'; put 'and unique=''yes'''; put 'and indxname not in ('; put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))'; put ')'; put ')'; put ');'; put 'file &fref mod;'; put 'by idxusage indxname;'; put 'if first.indxname then do;'; put 'put ''CREATE UNIQUE INDEX "'' indxname +(-1) ''" '' "ON &schema..&curds(";'; put 'put '' "'' name +(-1) ''"'' ;'; put 'end;'; put 'else put '' ,"'' name +(-1) ''"'';'; put 'if last.indxname then do;'; put 'put '');'';'; put 'end;'; put 'run;'; put '%end;'; put '%end;'; put '%end;'; put '%if %upcase(&showlog)=YES %then %do;'; put 'options ps=max;'; put 'data _null_;'; put 'infile &fref;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%end;'; put '%mend mp_getddl;'; put '%macro mf_getVarFormat(libds /* two level ds name */'; put ', var /* variable name from which to return the format */'; put ', force=0'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vformat rc vlen vtype;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable format */'; put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let rc = %sysfunc(close(&dsid));'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* supply a default if no format available */'; put '%if %length(&vformat)<2 & &force=1 %then %do;'; put '%let vlen = %sysfunc(varlen(&dsid, &vnum));'; put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%if &vtype=C %then %let vformat=$&vlen..;'; put '%else %let vformat=best.;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable format */'; put '&vformat'; put '%mend mf_getVarFormat;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mp_ds2inserts(ds, outref=0,schema=0,outds=0,flavour=SAS,maxobs=max'; put ',applydttm=YES'; put ')/*/STORE SOURCE*/;'; put '%if not %sysfunc(exist(&ds)) %then %do;'; put '%put %str(WAR)NING: &ds does not exist;'; put '%return;'; put '%end;'; put '%if not %sysfunc(exist(&ds)) %then %do;'; put '%put %str(WAR)NING: &ds does not exist;'; put '%return;'; put '%end;'; put '%if %index(&ds,.)=0 %then %let ds=WORK.&ds;'; put '%let flavour=%upcase(&flavour);'; put '%if &flavour ne SAS and &flavour ne PGSQL %then %do;'; put '%put %str(WAR)NING: &flavour is not supported;'; put '%return;'; put '%end;'; put '%if &outref=0 %then %do;'; put '%put %str(WAR)NING: Please provide a fileref;'; put '%return;'; put '%end;'; put '%if %mf_existfileref(&outref)=0 %then %do;'; put 'filename &outref temp lrecl=66000;'; put '%end;'; put '%if &schema=0 %then %let schema=;'; put '%else %let schema=&schema..;'; put '%if &outds=0 %then %let outds=%scan(&ds,2,.);'; put '%local nobs;'; put 'proc sql noprint;'; put 'select count(*) into: nobs TRIMMED from &ds;'; put '%if &nobs=0 %then %do;'; put 'data _null_;'; put 'file &outref mod;'; put 'put "/* No rows found in &ds */";'; put 'run;'; put '%end;'; put '%local vars;'; put '%let vars=%mf_getvarcount(&ds);'; put '%if &vars=0 %then %do;'; put 'data _null_;'; put 'file &outref mod;'; put 'put "/* No columns found in &schema.&ds */";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &vars>1600 and &flavour=PGSQL %then %do;'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* &schema.&ds contains &vars vars */";'; put 'put "/* Postgres cannot handle tables with over 1600 vars */";'; put 'put "/* No inserts will be generated for this table */";'; put 'run;'; put '%return;'; put '%end;'; put '%local varlist varlistcomma;'; put '%let varlist=%mf_getvarlist(&ds);'; put '%let varlistcomma=%mf_getvarlist(&ds,dlm=%str(,),quote=double);'; put '/* next, export data */'; put 'data _null_;'; put 'file &outref mod ;'; put 'if _n_=1 then put "/* &schema.&outds (&nobs rows, &vars columns) */";'; put 'set &ds;'; put '%if &maxobs ne max %then %do;'; put 'if _n_>&maxobs then stop;'; put '%end;'; put 'length _____str $32767;'; put 'call missing(_____str);'; put 'format _numeric_ best.;'; put 'format _character_ ;'; put '%local i comma var vtype vfmt;'; put '%do i=1 %to %sysfunc(countw(&varlist));'; put '%let var=%scan(&varlist,&i);'; put '%let vtype=%mf_getvartype(&ds,&var);'; put '%let vfmt=%upcase(%mf_getvarformat(&ds,&var,force=1));'; put '%if &i=1 %then %do;'; put '%if &flavour=SAS %then %do;'; put 'put "insert into &schema.&outds set ";'; put 'put " &var="@;'; put '%end;'; put '%else %if &flavour=PGSQL %then %do;'; put '_____str=cats('; put '"INSERT INTO &schema.&outds ("'; put ',symget(''varlistcomma'')'; put ',") VALUES ("'; put ');'; put 'put _____str;'; put 'put " "@;'; put '%end;'; put '%end;'; put '%else %do;'; put '%if &flavour=SAS %then %do;'; put 'put " ,&var="@;'; put '%end;'; put '%else %if &flavour=PGSQL %then %do;'; put 'put " ,"@;'; put '%end;'; put '%end;'; put '%if &vtype=N %then %do;'; put '%if &flavour=SAS %then %do;'; put 'put &var;'; put '%end;'; put '%else %if &flavour=PGSQL %then %do;'; put 'if missing(&var) then put ''NULL'';'; put '%if &applydttm=YES and "%substr(&vfmt.xxxxxxxx,1,8)"="DATETIME"'; put '%then %do;'; put 'else put "TIMESTAMP ''" &var E8601DT25.6 "''";'; put '%end;'; put '%else %do;'; put 'else put &var;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '_____str="''"!!trim(tranwrd(&var,"''","''''"))!!"''";'; put 'put _____str;'; put '%end;'; put '%end;'; put '%if &flavour=SAS %then %do;'; put 'put '';'';'; put '%end;'; put '%else %if &flavour=PGSQL %then %do;'; put 'put '');'';'; put '%end;'; put 'if _n_=&nobs then put /;'; put 'run;'; put '%mend mp_ds2inserts;'; put '%macro mp_lib2inserts(lib'; put ',flavour=SAS'; put ',outref=0'; put ',schema=0'; put ',maxobs=max'; put ',applydttm=YES'; put ')/*/STORE SOURCE*/;'; put '/* Find the tables */'; put '%local x ds memlist;'; put 'proc sql noprint;'; put 'select distinct lowcase(memname)'; put 'into: memlist'; put 'separated by '' '''; put 'from dictionary.tables'; put 'where upcase(libname)="%upcase(&lib)"'; put 'and memtype=''DATA''; /* exclude views */'; put '%let flavour=%upcase(&flavour);'; put '%if &flavour ne SAS and &flavour ne PGSQL %then %do;'; put '%put %str(WAR)NING: &flavour is not supported;'; put '%return;'; put '%end;'; put '/* create the inserts */'; put '%do x=1 %to %sysfunc(countw(&memlist));'; put '%let ds=%scan(&memlist,&x);'; put '%mp_ds2inserts(&lib..&ds'; put ',outref=&outref'; put ',schema=&schema'; put ',outds=&ds'; put ',flavour=&flavour'; put ',maxobs=&maxobs'; put ',applydttm=&applydttm'; put ')'; put '%end;'; put '%mend mp_lib2inserts;'; put '%macro mfs_httpheader(header_name'; put ',header_value'; put ')/*/STORE SOURCE*/;'; put '%global sasjs_stpsrv_header_loc;'; put '%local fref fid i;'; put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;'; put '%put &=fref &=sasjs_stpsrv_header_loc;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%mend mfs_httpheader;'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mp_streamfile('; put 'contenttype=TEXT'; put ',inloc='; put ',inref=0'; put ',iftrue=%str(1=1)'; put ',outname='; put ',outref=_webout'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let contentype=%upcase(&contenttype);'; put '%let outref=%upcase(&outref);'; put '%local platform; %let platform=%mf_getplatform();'; put '/**'; put '* check engine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put '%local streamweb;'; put '%let streamweb=0;'; put 'data _null_;'; put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));'; put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');'; put 'run;'; put '%if &contentype=CSV %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/csv'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/csv'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/csv)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=EXCEL %then %do;'; put '/* suitable for XLS format */'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype=''application/vnd.ms-excel'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="image/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"'; put 'contenttype="text/%lowcase(&contenttype)"'; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=TEXT %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/text'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/text'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/text)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="font/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=XLSX %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'','; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype='; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type'; put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; put ')'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=ZIP %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/zip'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip'''; put 'contenttype=''application/zip'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/zip)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;'; put '%end;'; put '%if &inref ne 0 %then %do;'; put '%mp_binarycopy(inref=&inref,outref=&outref)'; put '%end;'; put '%else %do;'; put '%mp_binarycopy(inloc="&inloc",outref=&outref)'; put '%end;'; put '%mend mp_streamfile;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Exports the data controller library in DB specific DDL'; put '@details If user is in the administrator group, they can call this'; put 'service directly adding the following URL params:'; put '@li &flavour= (only PGSQL supported at this time)'; put '@li &schema= (optional, if target schema is needed)'; put '

SAS Macros

'; put '@li mf_getuser.sas'; put '@li mp_abort.sas'; put '@li mp_getddl.sas'; put '@li mp_lib2inserts.sas'; put '@li mp_streamfile.sas'; put '@li mpe_getgroups.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%global flavour schema;'; put '/* if no flavour is specified, default to SAS */'; put '%let flavour=%sysfunc(coalescec(&flavour,SAS));'; put '/* if no schema var provided, DC Libref is used */'; put '%let schema=%sysfunc(coalescec(&schema,&dc_libref));'; put '/* check user is in admin group */'; put '%mpe_getgroups(user=%mf_getuser(),outds=work.usergroups)'; put 'data work.admins;'; put 'set work.usergroups;'; put 'put (_all_)(=);'; put 'run;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into:cnt'; put 'from usergroups'; put 'where groupname="&mpeadmins";'; put '%put &=cnt;'; put '%mp_abort(iftrue= (&cnt=0)'; put ',mac=&_program'; put ',msg=%str(The &DC_LIBREF library can only be exported by &mpeadmins members)'; put ')'; put '%mp_getddl(&DC_LIBREF'; put ',flavour=&flavour'; put ',schema=&schema'; put ',applydttm=YES'; put ',fref=tmpref'; put ')'; put '%mp_lib2inserts(&DC_LIBREF,flavour=&flavour,schema=&schema, outref=tmpref)'; put '%mp_streamfile(contenttype=TEXT'; put ',inref=tmpref'; put ',outname=&dc_libref..ddl'; put ')'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=makedata; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mf_increment(macro_name,incr=1);'; put '/* iterate the value */'; put '%let ¯o_name=%eval(&&¯o_name+&incr);'; put '/* return the value */'; put '&&¯o_name'; put '%mend mf_increment;'; put '%macro mpe_makedata(lib=,mpeadmins=,path=);'; put '%if &syscc ne 0 %then %do;'; put '%put syscc=&syscc exiting &sysmacroname;'; put '%return;'; put '%end;'; put 'proc sql;'; put 'insert into &lib..mpe_column_level_security set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',CLS_SCOPE=''EDIT'''; put ',CLS_GROUP=''AllUsers'''; put ',CLS_LIBREF="&lib"'; put ',CLS_TABLE=''MPE_LOCKANYTABLE'''; put ',CLS_VARIABLE_NM=''LOCK_STATUS_CD'''; put ',CLS_ACTIVE=1'; put ',CLS_HIDE=0;'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_EMAIL_ALERTS"'; put ',var_value=''NO'''; put ',var_active=1'; put ',var_desc=''YES or NO to enable email alerts. Note - this requires email '''; put '!!''options to be preconfigured! They can be configured in the '''; put '!!''settings stp if needed.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_VIEWLIB_CHECK"'; put ',var_value=''NO'''; put ',var_active=1'; put ',var_desc='; put '''Set to YES to enable library validity checking in viewLibs service.'''; put '!!'' Note: this can make the service very slow if there are lots of '''; put '!!''external libraries. If enabled, this removes empty libraries from '''; put '!!''the viewer library dropdown. To switch off, set to NO.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_MACROS"'; put ',var_value=cats(symget(''path''),"/dc_macros")'; put ',var_active=1'; put ',var_desc=''Location of underlying macros - EUC feature.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_MAXOBS_WEBEDIT"'; put ',var_value="100"'; put ',var_active=1'; put ',var_desc=''This sets the maximum number of observations that can be loaded'''; put '!!'' into the browser for editing in the EDIT screen. A higher number'''; put '!!'' will require a decent browser (ie, not IE) and more memory on the'''; put '!!'' client side.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_REQUEST_LOGS"'; put ',var_value="YES"'; put ',var_active=1'; put ',var_desc=''Setting to NO will prevent each request being logged to the'''; put '!!'' MPE_REQUESTS table Default=YES.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_RESTRICT_VIEWER"'; put ',var_value="NO"'; put ',var_active=1'; put ',var_desc=''YES will restrict the list of libraries and tables in VIEWER to'''; put '!!'' those explicitly set to VIEW in the MPE_SECURITY table. Default=NO.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_RESTRICT_EDITRECORD"'; put ',var_value="NO"'; put ',var_active=1'; put ',var_desc=''Setting YES will prevent the EDIT RECORD dialog appearing in the'''; put '!!'' EDIT screen by removing the "Edit Row" option in the right click menu'''; put '!!'', and the "ADD RECORD" button in the bottom left. Default=NO.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC_CATALOG"'; put ',var_name="DC_IGNORELIBS"'; put ',var_value="|MAPSSAS|MAPS|"'; put ',var_active=1'; put ',var_desc=''Pipe seperated list of librefs (uppercase) to be ignored when'''; put '!!'' running the Data Catalog refresh process. This can enable a clean'''; put '!!'' run when invalid librefs are returned by the mpe_refreshlibs macro.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_LOCALE"'; put ',var_value="SYSTEM"'; put ',var_active=1'; put ',var_desc=''Set to a locale (such as en_gb or en_be) to override the system'''; put '!!'' value (which can be driven from the browser settings). This is '''; put '!!''useful when importing ambiguous dates from CSV or Excel (eg 1/2/20 vs '''; put '!!''2/1/20) as DC uses the anydtdtm informats for import. Default=SYSTEM.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BULKLOAD"'; put ',var_value="YES"'; put ',var_active=0'; put ',var_desc=''Set to YES to enable BULKLOAD=YES in redshift'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BL_BUCKET"'; put ',var_value="''your-aws-bucket/Exchange''"'; put ',var_active=0'; put ',var_desc=''Set to the (quoted) value of the AWS bucket to'''; put '!!'' use for s3 uploads in redshift'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BL_AWS_CREDENTIALS_FILE"'; put ',var_value="''/path/to/your/aws/s3/.credentials''"'; put ',var_active=0'; put ',var_desc=''Set to the (quoted) value of the AWS creds file'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BL_REGION"'; put ',var_value="''eu-west-1''"'; put ',var_active=0'; put ',var_desc=''Set to the (quoted) AWS region in use'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BL_COMPRESS"'; put ',var_value="YES"'; put ',var_active=0'; put ',var_desc=''Set to YES to perform compression ahead of the COPY command'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BL_USE_SSL"'; put ',var_value="YES"'; put ',var_active=0'; put ',var_desc=''Set to YES to use SSL encryption'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC_REVIEW"'; put ',var_name="HISTORY_ROWS"'; put ',var_value=''100'''; put ',var_active=1'; put ',var_desc=''Number of rows (or additional rows) to return in the HISTORY '''; put '!!''page'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_LICENCE_KEY"'; put ',var_value='' '''; put ',var_active=1'; put ',var_desc=''Licence Key'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_ACTIVATION_KEY"'; put ',var_value='' '''; put ',var_active=1'; put ',var_desc=''Activation Key'';'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''LIBRARY'''; put ',DD_SOURCE="&lib"'; put ',DD_SHORTDESC="Data Controller Control Tables"'; put ',DD_LONGDESC="# The Data Controller Library"'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''TABLE'''; put ',DD_SOURCE="&lib..MPE_TABLES"'; put ',DD_SHORTDESC="Configuration of new tables for Data Controller"'; put ',DD_LONGDESC="# MPE_TABLES - adding new tabels to Data Controller"'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''COLUMN'''; put ',DD_SOURCE="&lib..MPE_TABLES.DSN"'; put ',DD_SHORTDESC="Dataset Name to be edited"'; put ',DD_LONGDESC="_DSN_ - must be UPCASE"'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''DIRECTORY'''; put ',DD_SOURCE="/some/directory"'; put ',DD_SHORTDESC="Directory for some purpose"'; put ',DD_LONGDESC="This directory is great. It''s great directory.'; put 'It trumps all other directories."'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''TABLE'''; put ',DD_SOURCE="&lib"'; put ',DD_SHORTDESC="Transaction table for capturing Data Controller users"'; put ',DD_LONGDESC="After a user accepts the Data Controller EULA they are "'; put '!!"registered as a user in this table."'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''COLUMN'''; put ',DD_SOURCE="&lib..MPE_CONFIG.VAR_ACTIVE"'; put ',DD_SHORTDESC="Set to 1 to make an option active"'; put ',DD_LONGDESC="This value is used as a filter by data controller whenever "'; put '!!"querying for option settings."'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/**'; put '* mpe_xlmap_info'; put '*/'; put 'insert into &lib..mpe_xlmap_info set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_description=''Basel 3 Key Metrics report'''; put ',XLMAP_TARGETLIBDS="&lib..MPE_XLMAP_DATA";'; put '/**'; put '* mpe_xlmap_rules'; put '*/'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:a'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:a'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:b'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:b'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:c'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:c'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:d'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:d'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:e'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:e'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:f'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:f'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/a'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[1]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/b'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[2]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/c'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[3]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/d'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[4]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/e'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[5]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/f'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[6]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1a/e'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[1]C[5]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1a/f'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[1]C[6]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/a'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''ABSOLUTE D10'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/b'''; put ',xlmap_sheet=''/3'''; put ',xlmap_start=''ABSOLUTE E10'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/c'''; put ',xlmap_sheet=''/3'''; put ',xlmap_start=''RELATIVE R[10]C[6]'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/d'''; put ',xlmap_sheet=''/3'''; put ',xlmap_start=''RELATIVE R[10]C[8]'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/e'''; put ',xlmap_sheet=''/3'''; put ',xlmap_start=''RELATIVE R[10]C[9]'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/f'''; put ',xlmap_sheet=''/3'''; put ',xlmap_start=''RELATIVE R[10]C[10]'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2a'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''ABSOLUTE H11'''; put ',xlmap_finish=''RELATIVE R[0]C[1]'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:3'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''RELATIVE R[12]C[4]'''; put ',xlmap_finish=''ABSOLUTE I13'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-CR2'''; put ',xlmap_range_id=''CR2-sec1'''; put ',xlmap_sheet=''CR2'''; put ',xlmap_start=''ABSOLUTE D8'''; put ',xlmap_finish=''BLANKROW'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-CR2'''; put ',xlmap_range_id=''CR2-sec2'''; put ',xlmap_sheet=''CR2'''; put ',xlmap_start=''ABSOLUTE D18'''; put ',xlmap_finish=''LASTDOWN'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''SAMPLE'''; put ',xlmap_range_id=''header'''; put ',xlmap_sheet=''/1'''; put ',xlmap_start=''ABSOLUTE B3'''; put ',xlmap_finish=''ABSOLUTE B8'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''SAMPLE'''; put ',xlmap_range_id=''data'''; put ',xlmap_sheet=''/1'''; put ',xlmap_start=''ABSOLUTE B13'''; put ',xlmap_finish=''ABSOLUTE E16'';'; put '/**'; put '* MPE_GROUPS'; put '*/'; put 'insert into &lib..mpe_groups set'; put 'tx_from=0'; put ',group_name="dc-admin"'; put ',group_desc="Custom Group for Data Controller Purposes"'; put ',user_name="allbow"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_groups set'; put 'tx_from=0'; put ',group_name="dc-admin"'; put ',group_desc="Custom Group for Data Controller Purposes"'; put ',user_name="dctestuser1"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_groups set'; put 'tx_from=0'; put ',group_name="dc-admin"'; put ',group_desc="Custom Group for Data Controller Purposes"'; put ',user_name="mihmed"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_groups set'; put 'tx_from=0'; put ',group_name="sec-sas9-prd-ext-sasplatform-300115datacontroller"'; put ',group_desc="Custom Group for Data Controller Purposes"'; put ',user_name="DCTest"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/**'; put '* MPE_ROW_LEVEL_SECURITY'; put '*/'; put 'insert into &lib..mpe_row_level_security set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',RLS_RK=1'; put ',RLS_SCOPE=''ALL'''; put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs'''; put ',RLS_LIBREF="&lib."'; put ',RLS_TABLE="MPE_GROUPS"'; put ',RLS_GROUP_LOGIC=''AND'''; put ',RLS_SUBGROUP_LOGIC=''OR'''; put ',RLS_SUBGROUP_ID=0'; put ',RLS_VARIABLE_NM=''GROUP_NAME'''; put ',RLS_OPERATOR_NM=''NE'''; put ',RLS_RAW_VALUE="''-1''"'; put ',RLS_ACTIVE=1;'; put 'insert into &lib..mpe_row_level_security set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',RLS_RK=2'; put ',RLS_SCOPE=''ALL'''; put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs'''; put ',RLS_LIBREF="&lib"'; put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"'; put ',RLS_GROUP_LOGIC=''AND'''; put ',RLS_SUBGROUP_LOGIC=''OR'''; put ',RLS_SUBGROUP_ID=0'; put ',RLS_VARIABLE_NM=''RLS_RK'''; put ',RLS_OPERATOR_NM=''>'''; put ',RLS_RAW_VALUE=''0'''; put ',RLS_ACTIVE=1;'; put 'insert into &lib..mpe_row_level_security set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',RLS_RK=3'; put ',RLS_SCOPE=''ALL'''; put ',RLS_GROUP=''DC Demo Group'''; put ',RLS_LIBREF="&lib"'; put ',RLS_TABLE="MPE_SECURITY"'; put ',RLS_GROUP_LOGIC=''AND'''; put ',RLS_SUBGROUP_LOGIC=''OR'''; put ',RLS_SUBGROUP_ID=0'; put ',RLS_VARIABLE_NM=''ACCESS_LEVEL'''; put ',RLS_OPERATOR_NM=''NE'''; put ',RLS_RAW_VALUE="''N/A''"'; put ',RLS_ACTIVE=1;'; put '/**'; put '* MPE_SECURITY'; put '*/'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="APPROVE"'; put ',sas_group="sec-sas9-prd-int-sasplatform-300114sasjs"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="EDIT"'; put ',sas_group="sec-sas9-prd-int-sasplatform-300114sasjs"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="APPROVE"'; put ',sas_group="sec-sas9-prd-ext-sasplatform-300114sasjs"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="EDIT"'; put ',sas_group="sec-sas9-prd-ext-sasplatform-300114sasjs"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="EDIT"'; put ',sas_group="dc-admin"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="APPROVE"'; put ',sas_group="dc-admin"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/* mpe_selectbox */'; put '%let rk=1;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=&rk'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_LOCKANYTABLE"'; put ',base_column="LOCK_STATUS_CD"'; put ',selectbox_value=''LOCKED'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_LOCKANYTABLE"'; put ',base_column="LOCK_STATUS_CD"'; put ',selectbox_value=''UNLOCKED'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="ACCESS_LEVEL"'; put ',selectbox_value=''EDIT'''; put ',selectbox_order=0'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="ACCESS_LEVEL"'; put ',selectbox_value=''APPROVE'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="ACCESS_LEVEL"'; put ',selectbox_value=''VIEW'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="ACCESS_LEVEL"'; put ',selectbox_value=''SIGNOFF'''; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_TABLES"'; put ',base_column="LOADTYPE"'; put ',selectbox_value=''UPDATE'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_TABLES"'; put ',base_column="LOADTYPE"'; put ',selectbox_value=''REPLACE'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_TABLES"'; put ',base_column="LOADTYPE"'; put ',selectbox_value=''TXTEMPORAL'''; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_TABLES"'; put ',base_column="LOADTYPE"'; put ',selectbox_value=''BITEMPORAL'''; put ',selectbox_order=4'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_TABLES"'; put ',base_column="LOADTYPE"'; put ',selectbox_value=''FORMAT_CAT'''; put ',selectbox_order=5'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ALERTS"'; put ',base_column="ALERT_EVENT"'; put ',selectbox_value=''*ALL*'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ALERTS"'; put ',base_column="ALERT_EVENT"'; put ',selectbox_value=''SUBMITTED'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ALERTS"'; put ',base_column="ALERT_EVENT"'; put ',selectbox_value=''APPROVED'''; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ALERTS"'; put ',base_column="ALERT_EVENT"'; put ',selectbox_value=''REJECTED'''; put ',selectbox_order=4'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_X_TEST"'; put ',base_column="SOME_DROPDOWN"'; put ',selectbox_value=''Option 1'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_X_TEST"'; put ',base_column="SOME_DROPDOWN"'; put ',selectbox_value=''Option 2'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_X_TEST"'; put ',base_column="SOME_DROPDOWN"'; put ',selectbox_value=''Option 3'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_X_TEST"'; put ',base_column="SOME_DROPDOWN"'; put ',selectbox_value="This is a long option. This option is very long. "'; put '!!"It is optional, though."'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="CASE"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="MINVAL"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="MAXVAL"'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="HARDSELECT"'; put ',selectbox_order=4'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="SOFTSELECT"'; put ',selectbox_order=5'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="NOTNULL"'; put ',selectbox_order=6'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="DSN"'; put ',selectbox_value="SOME_DATASET"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="DSN"'; put ',selectbox_value="EXAMPLE"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_DATADICTIONARY"'; put ',base_column="DD_TYPE"'; put ',selectbox_value="COLUMN"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_DATADICTIONARY"'; put ',base_column="DD_TYPE"'; put ',selectbox_value="TABLE"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_DATADICTIONARY"'; put ',base_column="DD_TYPE"'; put ',selectbox_value="LIBRARY"'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_DATADICTIONARY"'; put ',base_column="DD_TYPE"'; put ',selectbox_value="CATALOG"'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_DATADICTIONARY"'; put ',base_column="DD_TYPE"'; put ',selectbox_value="FORMAT"'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="LIBREF"'; put ',selectbox_value=''*ALL*'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="ACCESS_LEVEL"'; put ',selectbox_value=''AUDIT'''; put ',selectbox_order=4'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="HARDSELECT_HOOK"'; put ',selectbox_order=7'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="SOFTSELECT_HOOK"'; put ',selectbox_order=7'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_SCOPE"'; put ',selectbox_value="ALL"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_SCOPE"'; put ',selectbox_value="EDIT"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_SCOPE"'; put ',selectbox_value="VIEW"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_GROUP_LOGIC"'; put ',selectbox_value="AND"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_GROUP_LOGIC"'; put ',selectbox_value="OR"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_SUBGROUP_LOGIC"'; put ',selectbox_value="AND"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_SUBGROUP_LOGIC"'; put ',selectbox_value="OR"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="="'; put ',selectbox_order=0'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value=">"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="<"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="<="'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value=">="'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="BETWEEN"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="IN"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="NOT IN"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="NE"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="CONTAINS"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_EXCEL_CONFIG"'; put ',base_column="XL_RULE"'; put ',selectbox_value="FORMULA"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_ACTIVE"'; put ',selectbox_value="1"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_ACTIVE"'; put ',selectbox_value="0"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_ACTIVE"'; put ',selectbox_value="1"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_ACTIVE"'; put ',selectbox_value="0"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_SCOPE"'; put ',selectbox_value="EDIT"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_SCOPE"'; put ',selectbox_value="VIEW"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_SCOPE"'; put ',selectbox_value="ALL"'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_HIDE"'; put ',selectbox_value="0"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_HIDE"'; put ',selectbox_value="1"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put '/**'; put '* MPE_TABLES'; put '*/'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_COLUMN_LEVEL_SECURITY'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',buskey=''CLS_SCOPE CLS_GROUP CLS_LIBREF CLS_TABLE CLS_VARIABLE_NM'''; put ',notes=''Docs: https://docs.datacontroller.io/column-level-security'''; put ',post_edit_hook=''services/hooks/mpe_column_level_security_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_XLMAP_INFO'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',buskey=''XLMAP_ID'''; put ',notes=''Docs: https://docs.datacontroller.io/complex-excel-uploads'''; put ',post_edit_hook=''services/hooks/mpe_xlmap_info_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_XLMAP_RULES'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',buskey=''XLMAP_ID XLMAP_RANGE_ID'''; put ',notes=''Docs: https://docs.datacontroller.io/complex-excel-uploads'''; put ',post_edit_hook=''services/hooks/mpe_xlmap_rules_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_XLMAP_DATA'''; put ',num_of_approvals_required=1'; put ',loadtype=''UPDATE'''; put ',buskey=''LOAD_REF XLMAP_ID XLMAP_RANGE_ID ROW_NO COL_NO'''; put ',notes=''Docs: https://docs.datacontroller.io/complex-excel-uploads'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_LOCKANYTABLE'''; put ',num_of_approvals_required=1'; put ',loadtype=''UPDATE'''; put ',buskey=''LOCK_LIB LOCK_DS'''; put ',notes=''This table may be edited when a process failed and left a lock'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_TABLES'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''LIBREF DSN'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',notes=''This entry allows the MP Editor to edit itself!'''; put ',post_edit_hook=''services/hooks/mpe_tables_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_SECURITY'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''LIBREF DSN ACCESS_LEVEL SAS_GROUP'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',notes=''Determines which groups can view/edit/approve which tables'''; put ',post_edit_hook=''services/hooks/mpe_security_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_SELECTBOX'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''SELECTBOX_RK'''; put ',var_txfrom=''VER_FROM_DTTM'''; put ',var_txto=''VER_TO_DTTM'''; put ',notes=''Can configure dropdowns for the front end'''; put ',rk_underlying=''SELECT_LIB SELECT_DS BASE_COLUMN SELECTBOX_VALUE'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_X_TEST'''; put ',num_of_approvals_required=1'; put ',loadtype=''UPDATE'''; put ',buskey=''PRIMARY_KEY_FIELD'''; put ',notes=''Test table for controller'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_EMAILS'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''USER_NAME'''; put ',notes=''Primary Emails Table (backup is metadata)'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_CONFIG'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''VAR_SCOPE VAR_NAME'''; put ',notes=''Configuration variables for Data Controller'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_ALERTS'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''ALERT_EVENT ALERT_LIB ALERT_DS ALERT_USER'''; put ',notes=''Configuration for alert email events'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_GROUPS'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''GROUP_NAME USER_NAME'''; put ',notes=''Configuration for additional groups within Data Controller'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_VALIDATIONS'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''BASE_LIB BASE_DS BASE_COL RULE_TYPE'''; put ',notes=''Configuration of data quality rules in Editor component'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',post_edit_hook=''services/hooks/mpe_validations_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_DATADICTIONARY'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''DD_TYPE DD_SOURCE'''; put ',notes=''Configuration of data dictionary'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_EXCEL_CONFIG'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''XL_LIBREF XL_TABLE XL_COLUMN'''; put ',notes=''Configuration of the excel import rules'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_ROW_LEVEL_SECURITY'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''RLS_RK'''; put ',notes=''Configuration of Row Level Security'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',rk_underlying=''RLS_SCOPE RLS_GROUP RLS_LIBREF RLS_TABLE RLS_GROUP_LOGIC '''; put '!!''RLS_SUBGROUP_LOGIC RLS_SUBGROUP_ID RLS_VARIABLE_NM RLS_OPERATOR_NM '''; put '!!''RLS_RAW_VALUE '''; put ',post_edit_hook=''services/hooks/mpe_row_level_security_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_X_CATALOG-FC'''; put ',num_of_approvals_required=1'; put ',loadtype=''FORMAT_CAT'''; put ',buskey=''TYPE FMTNAME FMTROW'''; put ',notes=''Sample Format Catalog'''; put ';'; put '/* mpe_validations */'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_SCOPE"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_LIBREF"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_LIBREF"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_all"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_TABLE"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_TABLE"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/tables_all"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_VARIABLE_NM"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_VARIABLE_NM"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_ACTIVE"'; put ',rule_type=''MAXVAL'''; put ',rule_value=''1'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_HIDE"'; put ',rule_type=''MAXVAL'''; put ',rule_value=''1'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_GROUP"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/sas_groups"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ALERTS"'; put ',base_col="ALERT_LIB"'; put ',rule_type=''HARDSELECT_HOOK'''; put ',rule_value="services/validations/mpe_alerts.alert_lib"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_XLMAP_INFO"'; put ',base_col="XLMAP_ID"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_XLMAP_RULES"'; put ',base_col="XLMAP_ID"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="LIBREF"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="DSN"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="LIBREF"'; put ',rule_type=''NOTNULL'''; put ',rule_value='' '''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="DSN"'; put ',rule_type=''NOTNULL'''; put ',rule_value='' '''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="NUM_OF_APPROVALS_REQUIRED"'; put ',rule_type=''MINVAL'''; put ',rule_value=''1'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="BUSKEY"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="BUSKEY"'; put ',rule_type=''NOTNULL'''; put ',rule_value=" "'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_TXFROM"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_TXTO"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_BUSFROM"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_BUSTO"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SECURITY"'; put ',base_col="LIBREF"'; put ',rule_type=''CASE'''; put ',rule_value="UPCASE"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_PROCESSED"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SECURITY"'; put ',base_col="LIBREF"'; put ',rule_type=''HARDSELECT'''; put ',rule_value="&lib..MPE_TABLES.LIBREF"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SECURITY"'; put ',base_col="DSN"'; put ',rule_type=''CASE'''; put ',rule_value="UPCASE"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SECURITY"'; put ',base_col="DSN"'; put ',rule_type=''SOFTSELECT'''; put ',rule_value="&lib..MPE_TABLES.DSN"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SECURITY"'; put ',base_col="SAS_GROUP"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/sas_groups"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_VALIDATIONS"'; put ',base_col="BASE_LIB"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_VALIDATIONS"'; put ',base_col="BASE_DS"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/tables_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_VALIDATIONS"'; put ',base_col="BASE_COL"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_VALIDATIONS"'; put ',base_col="RULE_ACTIVE"'; put ',rule_type=''MINVAL'''; put ',rule_value="0"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_VALIDATIONS"'; put ',base_col="RULE_ACTIVE"'; put ',rule_type=''MAXVAL'''; put ',rule_value="1"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_EXCEL_CONFIG"'; put ',base_col="XL_LIBREF"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_EXCEL_CONFIG"'; put ',base_col="XL_TABLE"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/tables_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_EXCEL_CONFIG"'; put ',base_col="XL_COLUMN"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="LIBREF"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_all"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="DSN"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/mpe_tables.dsn"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_TXFROM"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_TXTO"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_BUSFROM"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_BUSTO"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_PROCESSED"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SELECTBOX"'; put ',base_col="SELECT_LIB"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SELECTBOX"'; put ',base_col="SELECT_DS"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/tables_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SELECTBOX"'; put ',base_col="BASE_COLUMN"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_col="RLS_GROUP"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/sas_groups"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_col="RLS_LIBREF"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_all"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_col="RLS_TABLE"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/tables_all"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_col="RLS_SUBGROUP_ID"'; put ',rule_type=''MINVAL'''; put ',rule_value=''0'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_col="RLS_VARIABLE_NM"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/* test softselect on numeric var (should be ordered numerically) */'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_X_TEST"'; put ',base_col="SOME_BESTNUM"'; put ',rule_type=''SOFTSELECT'''; put ',rule_value="&lib..MPE_X_TEST.SOME_BESTNUM"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_X_TEST"'; put ',base_col="SOME_NUM"'; put ',rule_type=''HARDSELECT_HOOK'''; put ',rule_value="services/validations/mpe_x_test.some_num"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_EXCEL_CONFIG"'; put ',base_col="XL_ACTIVE"'; put ',rule_type=''MINVAL'''; put ',rule_value=''0'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_EXCEL_CONFIG"'; put ',base_col="XL_ACTIVE"'; put ',rule_type=''MAXVAL'''; put ',rule_value=''1'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_XLMAP_INFO"'; put ',base_col="XLMAP_ID"'; put ',rule_type=''SOFTSELECT'''; put ',rule_value="&lib..MPE_XLMAP_RULES.XLMAP_ID"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/**'; put '* MPE_X_TEST'; put '*/'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=0'; put ',some_char=''this is dummy data'''; put ',some_dropdown=''Option 1'''; put ',some_num=42'; put ',some_date=42'; put ',some_datetime=42'; put ',some_time=42'; put ',some_shortnum=3'; put ',some_bestnum=44;'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=1'; put ',some_char=''more dummy data'''; put ',some_dropdown=''Option 2'''; put ',some_num=42'; put ',some_date=42'; put ',some_datetime=42'; put ',some_time=422'; put ',some_shortnum=3'; put ',some_bestnum=44;'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=2'; put ',some_char=''even more dummy data'''; put ',some_dropdown=''Option 3'''; put ',some_num=42'; put ',some_date=42'; put ',some_datetime=42'; put ',some_time=142'; put ',some_shortnum=3'; put ',some_bestnum=44;'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=3'; put ',some_char=repeat(''It was a dark and stormy night. The wind was blowing'''; put '!!'' a gale! The captain said to his mate - mate, tell us a tale. And'''; put '!!'' this, is the tale he told: '',3)'; put ',some_dropdown=''Option 2'''; put ',some_num=1613.001'; put ',some_date=423'; put ',some_datetime=423'; put ',some_time=44'; put ',some_shortnum=3'; put ',some_bestnum=44;'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=4'; put ',some_char=''if you can fill the unforgiving minute'''; put ',some_dropdown=''Option 1'''; put ',some_num=1613.001123456'; put ',some_date=4231'; put ',some_datetime=423123123'; put ',some_time=412'; put ',some_shortnum=3'; put ',some_bestnum=44;'; put '%do x=10 %to 500;'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=10&x'; put ',some_char="&x bottles of beer on the wall"'; put ',some_dropdown=''Option 1'''; put ',some_num=ranuni(0)'; put ',some_date=round(ranuni(0)*1000,1)'; put ',some_datetime=round(ranuni(0)*50000,1)'; put ',some_time=round(ranuni(0)*100,1)'; put ',some_shortnum=round(ranuni(0)*100,1)'; put ',some_bestnum=round(ranuni(0)*100,1);'; put '%end;'; put '/* https://support.sas.com/resources/papers/proceedings/proceedings/sugi27/p056-27.pdf */'; put 'proc format library=&lib..mpe_x_catalog;'; put 'value otdate'; put '.Z = ''Some Zs'''; put '.N = ''Some 9s'''; put 'other = [date9.]'; put ';'; put 'invalue disc'; put '''ABC'' = 0.20'; put '''DEF'' = 0.25'; put '''XYZ'' = 0.00'; put 'other = 0.00'; put ';'; put 'invalue indate'; put '''00000000'' = .Z'; put '''99999999'' = .N'; put 'other = [yymmdd8.]'; put ';'; put 'value age(multilabel)'; put '20 - 29 = ''20 - 29'''; put '30 - 39 = ''30 - 39'''; put '40 - 49 = ''40 - 49'''; put '50 - 59 = ''50 - 59'''; put '60 - high = ''60 +++'''; put '20 - 35 = ''20 - 35'''; put '36 - 55 = ''36 - 55'''; put '55 - high = ''55 +++'''; put ';'; put '/* https://libguides.library.kent.edu/SAS/UserDefinedFormats */'; put 'VALUE $GENDERLABEL'; put '"M" = "Male"'; put '"F" = "Female"'; put ';'; put 'VALUE LIKERT_SEVEN'; put '1 = "Strongly Disagree"'; put '2 = "Disagree"'; put '3 = "Slightly Disagree"'; put '4 = "Neither Agree nor Disagree"'; put '5 = "Slightly Agree"'; put '6 = "Agree"'; put '7 = "Strongly Agree"'; put ';'; put 'VALUE LIKERT7_ELEVEN'; put '1,2,3 = "Disagree"'; put '4 = "Neither Agree nor Disagree"'; put '5,6,7 = "Agree"'; put ';'; put 'VALUE LIKERT7_SISTERS'; put '1-3 = "Disagree"'; put '4 = "Neither Agree nor Disagree"'; put '5-7 = "Agree"'; put ';'; put 'VALUE INCOME'; put 'LOW -< 20000 = "Low"'; put '20000 -< 60000 = "Middle"'; put '60000 - HIGH = "High"'; put ';'; put 'VALUE RACE'; put '1 = "White"'; put '2 = "Black"'; put 'OTHER = "Other"'; put ';'; put 'VALUE GENDERCODE'; put '0 = ''Male'''; put '1 = ''Female'';'; put 'VALUE ATHLETECODE'; put '0 = ''Non-athlete'''; put '1 = ''Athlete'';'; put 'VALUE SMOKINGCODE'; put '0 = ''Nonsmoker'''; put '1 = ''Past smoker'''; put '2 = ''Current smoker'';'; put '/* https://documentation.sas.com/doc/en/pgmsascdc/v_017/proc/p1upn25lbfo6mkn1wncu4dyh9q91.htm */'; put 'value $state'; put '''Delaware''=''DE'''; put '''Florida''=''FL'''; put '''Ohio''=''OH'';'; put 'value MYfmt'; put '/* Format dates prior to 31DEC2011 using only a year. */'; put 'low-''31DEC2011''d=[year4.]'; put '/* Format 2012 dates using the month and year. */'; put '''01jan2012''d-''31DEC12''d=[monyy7.]'; put '/* Format dates 01JAN2013 and beyond using the day, month, and year. */'; put '''01JAN2013''d-high=[date9.]'; put '/* Catch missing values. */'; put 'other=''n/a'';'; put 'value newfmt .=''N/A'' other=[12.1];'; put '/* https://www.lexjansen.com/nesug/nesug08/cc/cc14.pdf */'; put 'value $genderml (multilabel)'; put '''1''=''Male'''; put '''2''=''Female'''; put '''1'',''2'','' ''=''Total people'';'; put 'value agemla (multilabel)'; put '1-4=''Preschool'''; put '1-18=''Children'''; put '19-120=''Adults'';'; put 'value agemlb (multilabel)'; put '19-120=''Adults'''; put '1-18=''Children'''; put '1-4=''Preschool'';'; put 'value agemlc (multilabel notsorted)'; put '19-120=''Adults'''; put '1-18=''Children'''; put '1-4=''Preschool'';'; put '%mend mpe_makedata;'; put '/** @cond */'; put '%macro mf_existfeature(feature'; put ')/*/STORE SOURCE*/;'; put '%let feature=%upcase(&feature);'; put '%local platform;'; put '%let platform=%mf_getplatform();'; put '%if &feature= %then %do;'; put '%put No feature was requested for detection;'; put '%end;'; put '%else %if &feature=COLCONSTRAINTS %then %do;'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=PROCLUA %then %do;'; put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */'; put '%if &platform=SASVIYA %then 1;'; put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;'; put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=DBMS_MEMTYPE %then %do;'; put '/* does dbms_memtype exist in dictionary.tables? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=EXPORTXLS %then %do;'; put '/* is it possible to PROC EXPORT an excel file? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;'; put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;'; put '%else 0;'; put '%end;'; put '%else %do;'; put '-1'; put '%put &sysmacroname: &feature not found;'; put '%end;'; put '%mend mf_existfeature;'; put '/** @endcond */'; put '%macro mpe_makedatamodel(lib=);'; put '%if &syscc ne 0 %then %do;'; put '%put syscc=&syscc exiting &sysmacroname;'; put '%return;'; put '%end;'; put '%local notnull;'; put '%if %mf_existfeature(COLCONSTRAINTS)=1 %then %let notnull=not null;'; put '%put &=notnull;'; put 'proc sql;'; put 'create table &lib..mpe_alerts('; put 'tx_from num format=datetime19.3,'; put 'alert_event char(20),'; put 'alert_lib char(8),'; put 'alert_ds char(32),'; put 'alert_user char(100) ,'; put 'tx_to num ¬null format=datetime19.3'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_alerts;'; put 'index create'; put 'pk_mpealerts=(tx_from alert_event alert_lib alert_ds alert_user)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_audit('; put 'load_ref char(36) label=''unique load reference'','; put 'libref char(8) label=''Library Reference (8 chars)'','; put 'dsn char(32) label=''Dataset Name (32 chars)'','; put 'key_hash char(32) label='; put '''MD5 Hash of primary key values (pipe seperated)'','; put 'tgtvar_nm char(32) label=''Target variable name (32 chars)'','; put 'move_type char(1) label=''Either (A)ppended, (D)eleted or (M)odified'','; put 'processed_dttm num format=E8601DT26.6 label=''Processed at timestamp'','; put 'is_pk num label=''Is Primary Key Field? (1/0)'','; put 'is_diff num label='; put '''Did value change? (1/0/-1). Always -1 for appends and deletes.'','; put 'tgtvar_type char(1) label=''Either (C)haracter or (N)umeric'','; put 'oldval_num num format=best32. label=''Old (numeric) value'','; put 'newval_num num format=best32. label=''New (numeric) value'','; put 'oldval_char char(32765) label=''Old (character) value'','; put 'newval_char char(32765) label=''New (character) value'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_audit;'; put 'index create'; put 'pk_mpe_audit=(load_ref libref dsn key_hash tgtvar_nm)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_column_level_security('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'CLS_SCOPE char(4) ¬null,'; put 'CLS_GROUP char(64) ¬null,'; put 'CLS_LIBREF char(8) ¬null,'; put 'CLS_TABLE char(32) ¬null,'; put 'CLS_VARIABLE_NM char(32) ¬null,'; put 'CLS_ACTIVE num ¬null,'; put 'CLS_HIDE num'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_column_level_security;'; put 'index create'; put 'pk_mpe_column_level_security='; put '(tx_to CLS_SCOPE CLS_GROUP CLS_LIBREF CLS_TABLE CLS_VARIABLE_NM)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_config('; put 'tx_from num ¬null format=datetime19.3'; put ',tx_to num ¬null format=datetime19.3'; put ',var_scope varchar(10) ¬null'; put ',var_name varchar(32) ¬null'; put ',var_value varchar(5000)'; put ',var_active num'; put ',var_desc varchar(300)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_config;'; put 'index create'; put 'pk_mpe_config=(tx_to var_scope var_name)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datacatalog_CATS('; put 'TX_FROM float ¬null format=datetime19.,'; put 'TX_TO float format=datetime19.,'; put 'libref char(8) label=''Library Name'','; put 'memname char(64) label=''Member Name'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datacatalog_CATS;'; put 'index create'; put 'pk_mpe_datacatalog_CATS=(tx_to libref memname)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datacatalog_libs('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'TX_TO num ¬null format=datetime19.3,'; put 'libref char(8) label=''Library Ref'','; put 'engine char(32) label=''Library Engine'','; put 'libname char(256) format=$256. label=''Library Name'','; put 'paths char(8192) label=''Library Paths'','; put 'perms char(500) label=''Library Permissions (if BASE)'','; put 'owners char(500) label=''Library Owners (if BASE)'','; put 'schemas char(500) label=''Library Schemas (if DB)'','; put 'libid char(17) label=''LibraryId'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datacatalog_libs;'; put 'index create'; put 'pk_mpe_datacatalog_libs=(libref tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datacatalog_OBJS('; put 'TX_FROM num ¬null format=datetime19.,'; put 'TX_TO num ¬null format=datetime19.,'; put 'libref char(8) ¬null label=''Library Name'','; put 'memname char(64) ¬null label=''Member Name'','; put 'objname char(32) ¬null label=''Object Name'','; put 'objtype char(8) ¬null label=''Object Type'','; put 'objdesc char(256) label=''Object Description'','; put 'alias char(32) label=''Object Alias'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datacatalog_OBJS;'; put 'index create'; put 'pk_mpe_datacatalog_OBJS=(libref memname objname objtype tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datacatalog_TABS('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'TX_TO num ¬null format=datetime19.3,'; put 'libref char(8) label=''Library Name'','; put 'dsn char(64) label=''Member Name'','; put 'memtype char(8) label=''Member Type'','; put 'dbms_memtype char(32) label=''DBMS Member Type'','; put 'memlabel char(512) label=''Data Set Label'','; put 'typemem char(8) label=''Data Set Type'','; put 'nvar num label=''Number of Variables'','; put 'compress char(8) label=''Compression Routine'','; put 'pk_fields char(512)'; put 'label=''Primary Key Fields - in a constraint being both Unique and Not Null'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datacatalog_TABS;'; put 'index create'; put 'pk_mpe_datacatalog_TABS=(libref dsn tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datacatalog_vars('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'TX_TO num ¬null format=datetime19.3,'; put 'libref char(8) label=''Library Name'','; put 'dsn char(64) label=''Table Name'','; put 'name char(64) label=''Column Name'','; put 'memtype char(8) label=''Member Type'','; put 'type char(16) label=''Column Type'','; put 'length num label=''Column Length'','; put 'varnum num label=''Column Number in Table'','; put 'label char(512) label=''Column Label'','; put 'format char(49) label=''Column Format'','; put 'idxusage char(9) label=''Column Index Type'','; put 'notnull char(3) label=''Not NULL?'','; put 'pk_ind num label=''Primary Key Indicator (1=Primary Key field)'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datacatalog_vars;'; put 'index create'; put 'pk_mpe_datacatalog_vars=(libref dsn name tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datastatus_CATS('; put 'TX_FROM float format=datetime19.,'; put 'TX_TO float format=datetime19.,'; put 'libref char(8) label=''Library Name'','; put 'memname char(64) label=''Member Name'','; put 'nobjs num ¬null label=''Number of objects'','; put 'created num ¬null format=DATETIME. label=''Date Created'','; put 'modified num format=DATETIME. label=''Date Modified'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datastatus_CATS;'; put 'index create'; put 'pk_mpe_datastatus_cats=(libref memname tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datastatus_libs('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'TX_TO num ¬null format=datetime19.3,'; put 'libref char(8) label=''Library Name'','; put 'libsize num format=SIZEKMG. label=''Size of library'','; put 'table_cnt num label=''Number of Tables'','; put 'catalog_cnt num label=''Number of Catalogs'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datastatus_libs;'; put 'index create'; put 'pk_mpe_datastatus_libs=(libref tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datastatus_OBJS('; put 'TX_FROM float ¬null format=datetime19.,'; put 'TX_TO float ¬null format=datetime19.,'; put 'libref char(8) label=''Library Name'','; put 'memname char(64) label=''Member Name'','; put 'objname char(32) label=''Object Name'','; put 'objtype char(8) label=''Object Type'','; put 'created num ¬null format=DATETIME. label=''Date Created'','; put 'modified num format=DATETIME. label=''Date Modified'','; put 'level num label=''Library Concatenation Level'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datastatus_OBJS;'; put 'index create'; put 'pk_mpe_datastatus_OBJS=(libref memname objname objtype tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datastatus_tabs('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'TX_TO num ¬null format=datetime19.3,'; put 'libref char(8) label=''Library Name'','; put 'dsn char(64) label=''Member Name'','; put 'filesize num format=SIZEKMG. label=''Size of file'','; put 'crdate num format=DATETIME. label=''Date Created'','; put 'modate num format=DATETIME. label=''Date Modified'','; put 'nobs num label=''Number of Physical (Actual, inc. deleted) Observations'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datastatus_tabs;'; put 'index create'; put 'pk_mpe_datastatus_tabs=(libref dsn tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datadictionary'; put '('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'TX_TO num ¬null format=datetime19.3,'; put 'DD_TYPE char(16),'; put 'DD_SOURCE char(1024),'; put 'DD_SHORTDESC char(256),'; put 'DD_LONGDESC char(32767),'; put 'DD_OWNER char(128),'; put 'DD_RESPONSIBLE char(128),'; put 'DD_SENSITIVITY char(64)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datadictionary;'; put 'index create'; put 'pk_mpe_datadictionary=(tx_to dd_type dd_source)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_dataloads('; put 'libref varchar(8) ¬null,'; put 'dsn varchar(32) ¬null,'; put 'etlsource varchar(100) ¬null,'; put 'loadtype varchar(20) ¬null,'; put 'changed_records int,'; put 'new_records int,'; put 'deleted_records int,'; put 'duration num,'; put 'user_nm varchar(50) ¬null,'; put 'processed_dttm num format=datetime19.3,'; put 'mac_ver varchar(5)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_dataloads;'; put 'index create'; put 'pk_mpe_dataloads=(processed_dttm libref dsn etlsource)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_emails('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'user_name char(50) ¬null,'; put 'user_displayname char(100),'; put 'user_email char(100) ¬null'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_emails;'; put 'index create'; put 'pk_mpe_emails=(tx_to user_name)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_excel_config('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'xl_libref char(8),'; put 'xl_table char(32),'; put 'xl_column char(32),'; put 'xl_rule char(32),'; put 'xl_active num'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_excel_config;'; put 'index create'; put 'pk_mpe_excel_config=(tx_to xl_libref xl_table xl_column)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..MPE_XLMAP_DATA('; put 'LOAD_REF char(32) ¬null,'; put 'XLMAP_ID char(32) ¬null,'; put 'XLMAP_RANGE_ID char(32) ¬null,'; put 'ROW_NO num ¬null,'; put 'COL_NO num ¬null,'; put 'VALUE_TXT char(4000)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify MPE_XLMAP_DATA;'; put 'index create'; put 'pk_MPE_XLMAP_DATA=(load_ref xlmap_id xlmap_range_id row_no col_no)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_xlmap_info('; put 'tx_from num ¬null,'; put 'tx_to num ¬null,'; put 'XLMAP_ID char(32) ¬null,'; put 'XLMAP_DESCRIPTION char(1000) ¬null,'; put 'XLMAP_TARGETLIBDS char(41) ¬null'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_xlmap_info;'; put 'index create'; put 'pk_mpe_xlmap_info=(tx_to xlmap_id)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_xlmap_rules('; put 'tx_from num ¬null,'; put 'tx_to num ¬null,'; put 'XLMAP_ID char(32) ¬null,'; put 'XLMAP_RANGE_ID char(32) ¬null,'; put 'XLMAP_SHEET char(32) ¬null,'; put 'XLMAP_START char(1000) ¬null,'; put 'XLMAP_FINISH char(1000)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_xlmap_rules;'; put 'index create'; put 'pk_mpe_xlmap_rules=(tx_to xlmap_id xlmap_range_id)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_filteranytable('; put 'filter_rk num ¬null,'; put 'filter_hash char(32) ¬null,'; put 'filter_table char(41) ¬null,'; put 'processed_dttm num ¬null format=datetime19.'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_filteranytable;'; put 'index create filter_rk /nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_filtersource('; put 'filter_hash char(32) ¬null,'; put 'filter_line num ¬null,'; put 'group_logic char(3) ¬null,'; put 'subgroup_logic char(3) ¬null,'; put 'subgroup_id num ¬null,'; put 'variable_nm varchar(32) ¬null,'; put 'operator_nm varchar(12) ¬null,'; put 'raw_value varchar(4000) ¬null,'; put 'processed_dttm num ¬null format=datetime19.'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_filtersource;'; put 'index create'; put 'pk_mpe_filtersource=(filter_hash filter_line)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_groups('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'group_name char(100) ¬null,'; put 'user_name char(50) ¬null,'; put 'group_desc char(256)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_groups;'; put 'index create'; put 'pk_mpe_groups=(tx_to group_name user_name)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_lineage_cols'; put '('; put 'col_id char(32),'; put 'direction char(1),'; put 'sourcecoluri char(256),'; put 'map_type char(256),'; put 'map_transform char(256),'; put 'jobname char(256),'; put 'sourcetablename char(256),'; put 'sourcecolname char(256),'; put 'targettablename char(256),'; put 'targetcolname char(256),'; put 'targetcoluri char(256),'; put 'Derived_Rule char(500),'; put 'level int,'; put 'modified_dttm num format=datetime19.3,'; put 'modified_by char(64)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_lineage_cols;'; put 'index create'; put 'pk_mpe_lineage_cols=(col_id direction sourcecoluri targetcoluri map_type map_transform)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..MPE_LINEAGE_TABS'; put '('; put 'tx_from num ¬null format=datetime19.3,'; put 'jobid char(17),'; put 'srctableid char(17),'; put 'tgttableid char(17),'; put 'jobname char(128),'; put 'srctabletype char(16),'; put 'srctablename char(64),'; put 'srclibref char(8),'; put 'tgttabletype char(16),'; put 'tgttablename char(64),'; put 'tgtlibref char(8),'; put 'tx_to num ¬null format=datetime19.3'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_lineage_tabs;'; put 'index create'; put 'pk_mpe_lineage_tabs=(tx_to jobid srctableid tgttableid)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_loads('; put 'csv_dir char(255),'; put 'user_nm char(50) ,'; put 'status char(15) ,'; put 'duration num ,'; put 'processed_dttm num format=datetime19.3,'; put 'reason_txt char(2048) ,'; put 'approvals char(64)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_loads;'; put 'index create csv_dir /nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_lockanytable('; put 'lock_lib varchar(8) ¬null ,'; put 'lock_ds varchar(32) ¬null,'; put 'lock_status_cd varchar(10) ¬null,'; put 'lock_user_nm varchar(100) ¬null ,'; put 'lock_ref varchar(200),'; put 'lock_pid varchar(10),'; put 'lock_start_dttm num format=E8601DT26.6,'; put 'lock_end_dttm num format=E8601DT26.6'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_lockanytable;'; put 'index create'; put 'pk_mpe_lockanytable=(lock_lib lock_ds)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_maxkeyvalues('; put 'keytable varchar(41) label=''Base table in libref.dataset format'','; put 'keycolumn char(32) format=$32.'; put 'label=''The Surrogate / Retained key field containing the key values.'','; put 'max_key num label='; put '''Integer value representing current max RK or SK value in the KEYTABLE'','; put 'processed_dttm num format=E8601DT26.6'; put 'label=''Datetime this value was last updated'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_maxkeyvalues;'; put 'index create keytable /nomiss unique;'; put 'quit;'; put '/* no PK defined as it is a transaction table */'; put 'proc sql;'; put 'create table &lib..mpe_requests('; put 'request_dttm num ¬null format=datetime19.,'; put 'request_user char(64) ¬null,'; put 'request_service char(64) ¬null,'; put 'request_params char(128)'; put ');'; put 'proc sql;'; put 'create table &lib..mpe_review('; put 'table_id varchar(32) ¬null,'; put 'reviewed_by_nm varchar(100) ¬null,'; put 'base_table varchar(41) ¬null,'; put 'review_status_id varchar(10) ¬null,'; put 'reviewed_on_dttm num ¬null format=datetime19.3,'; put 'review_reason_txt varchar(400)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_review;'; put 'index create'; put 'pk_mpe_review=(table_id reviewed_by_nm)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_row_level_security('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'RLS_RK num ¬null,'; put 'RLS_SCOPE char(8) ¬null,'; put 'RLS_GROUP char(128) ¬null,'; put 'RLS_LIBREF char(8) ¬null,'; put 'RLS_TABLE char(32) ¬null,'; put 'RLS_GROUP_LOGIC char(3) ¬null,'; put 'RLS_SUBGROUP_LOGIC char(3) ¬null,'; put 'RLS_SUBGROUP_ID num ¬null,'; put 'RLS_VARIABLE_NM varchar(32) ¬null,'; put 'RLS_OPERATOR_NM varchar(12) ¬null,'; put 'RLS_RAW_VALUE varchar(4000) ¬null,'; put 'RLS_ACTIVE num ¬null'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_row_level_security;'; put 'index create'; put 'pk_mpe_row_level_security=(tx_to RLS_RK)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_security('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'libref char(8) ¬null,'; put 'dsn char(32) ¬null,'; put 'access_level char(10) ¬null,'; put 'sas_group char(100) ¬null'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_security;'; put 'index create'; put 'pk_mpe_security=(tx_to libref dsn access_level sas_group)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_selectbox('; put 'ver_from_dttm num ¬null format=datetime19.3,/* timestamp for versioning*/'; put 'ver_to_dttm num ¬null format=datetime19.3, /* timestamp for versioning */'; put 'selectbox_rk num ¬null, /* surrogate key */'; put 'select_lib varchar(17) ¬null, /* libref (big enough for uri)*/'; put 'select_ds varchar(32) ¬null,'; put 'base_column varchar(36) ¬null, /* variable name against which to apply selectbox */'; put 'selectbox_value varchar(500) ¬null, /* selectbox value */'; put 'selectbox_order num , /* optional ordering (1 comes before 2) */'; put 'selectbox_type varchar(32) /* column type (blank for default, else'; put 'sas or js to indicate relevant system functions)*/'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_selectbox;'; put 'index create'; put 'pk_mpe_selectbox=(ver_to_dttm selectbox_rk)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_signoffs('; put 'tech_from_dttm num ¬null format=datetime19.3,'; put 'tech_to_dttm num ¬null format=datetime19.3,'; put 'signoff_table varchar(50) ¬null,'; put 'signoff_section_rk num ¬null,'; put 'signoff_version_rk num ¬null,'; put 'signoff_name varchar(100) ¬null'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_signoffs;'; put 'index create'; put 'pk_mpe_signoffs=(tech_to_dttm signoff_table signoff_section_rk)'; put '/nomiss unique;'; put 'quit;'; put '/* mpe_submit */'; put 'proc sql;'; put 'create table &lib..mpe_submit('; put 'table_id varchar(32) ¬null,'; put 'submit_status_cd varchar(10) ¬null,'; put 'base_lib char(8) ¬null,'; put 'base_ds char(32) ¬null,'; put 'submitted_by_nm varchar(100) ¬null,'; put 'submitted_on_dttm num ¬null format=datetime19.3,'; put 'submitted_reason_txt varchar(400),'; put 'input_obs num,'; put 'input_vars num,'; put 'num_of_approvals_required num ¬null ,'; put 'num_of_approvals_remaining num ¬null ,'; put 'reviewed_by_nm char(100),'; put 'reviewed_on_dttm num'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_submit;'; put 'index create table_id /nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_tables('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'libref char(8) ¬null,'; put 'dsn char(32) ¬null,'; put 'num_of_approvals_required int,'; put 'loadtype char(12) ,'; put 'buskey char(1000) ,'; put 'var_txfrom char(32) ,'; put 'var_txto char(32) ,'; put 'var_busfrom char(32) ,'; put 'var_busto char(32) ,'; put 'var_processed char(32) ,'; put 'close_vars varchar(500),'; put 'pre_edit_hook char(200),'; put 'post_edit_hook char(200),'; put 'pre_approve_hook char(200) ,'; put 'post_approve_hook char(200) ,'; put 'signoff_cols varchar(500),'; put 'signoff_hook varchar(200),'; put 'notes char(1000) ,'; put 'rk_underlying char(1000) ,'; put 'audit_libds char(41)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_tables;'; put 'index create'; put 'pk_mpe_tables=(tx_to libref dsn)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_users('; put 'user_id char(50) ¬null,'; put 'last_seen_dt num ¬null format=date9.,'; put 'registered_dt num ¬null format=date9.'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_users;'; put 'index create user_id /nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..MPE_VALIDATIONS'; put '('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'BASE_LIB varchar(8),'; put 'BASE_DS varchar(32),'; put 'BASE_COL varchar(32),'; put 'RULE_TYPE varchar(32),'; put 'RULE_VALUE varchar(128),'; put 'RULE_ACTIVE num ,'; put 'TX_TO num ¬null format=datetime19.3'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_validations;'; put 'index create'; put 'pk_mpe_validations=(tx_from base_lib base_ds base_col rule_type)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_x_test('; put 'primary_key_field num ¬null,'; put 'some_char char(32767) ,'; put 'some_dropdown char(128),'; put 'some_num num ,'; put 'some_date num format=date9.,'; put 'some_datetime num format=datetime19. informat=ANYDTDTM19.,'; put 'some_time num format=time8.,'; put 'some_shortnum num length=4,'; put 'some_bestnum num format=best.'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_x_test;'; put 'index create primary_key_field /nomiss unique;'; put 'quit;'; put '%mend mpe_makedatamodel;'; put '%macro mf_mkdir(dir'; put ')/*/STORE SOURCE*/;'; put '%local lastchar child parent;'; put '%let lastchar = %substr(&dir, %length(&dir));'; put '%if (%bquote(&lastchar) eq %str(:)) %then %do;'; put '/* Cannot create drive mappings */'; put '%return;'; put '%end;'; put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;'; put '/* last char is a slash */'; put '%if (%length(&dir) eq 1) %then %do;'; put '/* one single slash - root location is assumed to exist */'; put '%return;'; put '%end;'; put '%else %do;'; put '/* strip last slash */'; put '%let dir = %substr(&dir, 1, %length(&dir)-1);'; put '%end;'; put '%end;'; put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;'; put '/* directory does not exist so prepare to create */'; put '/* first get the childmost directory */'; put '%let child = %scan(&dir, -1, %str(/\:));'; put '/*'; put 'If child name = path name then there are no parents to create. Else'; put 'they must be recursively scanned.'; put '*/'; put '%if (%length(&dir) gt %length(&child)) %then %do;'; put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));'; put '%mf_mkdir(&parent)'; put '%end;'; put '/*'; put 'Now create the directory. Complain loudly of any errs.'; put '*/'; put '%let dname = %sysfunc(dcreate(&child, &parent));'; put '%if (%bquote(&dname) eq ) %then %do;'; put '%put %str(ERR)OR: could not create &parent + &child;'; put '%abort cancel;'; put '%end;'; put '%else %do;'; put '%put Directory created: &dir;'; put '%end;'; put '%end;'; put '/* exit quietly if directory did exist.*/'; put '%mend mf_mkdir;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mm_createdocument('; put 'tree=/User Folders/sasdemo'; put ',name=myNote'; put ',desc=Created by &sysmacroname'; put ',textrole='; put ',frefin=mm_in'; put ',frefout=mm_out'; put ',mDebug=1'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%mp_abort(iftrue= (%mf_verifymacvars(tree name)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: tree name)'; put ')'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%mp_abort('; put 'iftrue= (&type ne Tree)'; put ',mac=mm_createdocument.sas'; put ',msg=Tree &tree does not exist!'; put ')'; put '/**'; put '* Check object does not exist already'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&name","Note",type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''docuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &type = Document %then %do;'; put '%put Document &name already exists in &tree!;'; put '%return;'; put '%end;'; put '/**'; put '* Now we can create the document'; put '*/'; put 'filename &frefin temp;'; put '/* write header XML */'; put 'data _null_;'; put 'file &frefin;'; put 'name=quote("&name");'; put 'desc=quote("&desc");'; put 'textrole=quote("&textrole");'; put 'treeuri=quote("&treeuri");'; put 'put "$METAREPOSITORY"/'; put '''"/'; put '" "/'; put ''' '' /'; put '''''/'; put '/*URI="Document for public note" */'; put '""/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'filename &frefout temp;'; put 'proc metadata in= &frefin out=&frefout verbose;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%mend mm_createdocument;'; put '%macro mm_createfolder(path=,mDebug=0);'; put '%put &sysmacroname: execution started for &path;'; put '%local dbg errorcheck;'; put '%if &mDebug=0 %then %let dbg=*;'; put '%local parentFolderObjId child errorcheck paths;'; put '%let paths=0;'; put '%let errorcheck=1;'; put '%if &syscc ge 4 %then %do;'; put '%put SYSCC=&syscc - this macro requires a clean session;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'length objId parentId objType parent child $200'; put 'folderPath $1000;'; put 'call missing (of _all_);'; put 'folderPath = "%trim(&path)";'; put '* remove any trailing slash ;'; put 'if ( substr(folderPath,length(folderPath),1) = ''/'' ) then'; put 'folderPath=substr(folderPath,1,length(folderPath)-1);'; put '* name must not be blank;'; put 'if ( folderPath = '''' ) then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname PATH parameter value must be non-blank";'; put 'end;'; put '* must have a starting slash ;'; put 'if ( substr(folderPath,1,1) ne ''/'' ) then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname PATH param value must have starting slash";'; put 'stop;'; put 'end;'; put '* check if folder already exists ;'; put 'rc=metadata_pathobj('''',cats(folderPath,"(Folder)"),"",objType,objId);'; put 'if rc ge 1 then do;'; put 'put "NOTE: Folder " folderPath " already exists!";'; put 'stop;'; put 'end;'; put '* do not create a root (one level) folder ;'; put 'if countc(folderPath,''/'')=1 then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname will not create a new ROOT folder";'; put 'stop;'; put 'end;'; put '* check that root folder exists ;'; put 'root=cats(''/'',scan(folderpath,1,''/''),"(Folder)");'; put 'if metadata_pathobj('''',root,"",objType,parentId)<1 then do;'; put 'put ''ERR'' +(-1) "OR: " root " does not exist!";'; put 'stop;'; put 'end;'; put '* check that parent folder exists ;'; put 'child=scan(folderPath,-1,''/'');'; put 'parent=substr(folderpath,1,length(folderpath)-length(child)-1);'; put 'rc=metadata_pathobj('''',cats(parent,"(Folder)"),"",objType,parentId);'; put 'if rc<1 then do;'; put 'putlog ''The following folders will be created:'';'; put '/* folder does not exist - so start from top and work down */'; put 'length newpath $1000;'; put 'paths=0;'; put 'do x=2 to countw(folderpath,''/'');'; put 'newpath='''';'; put 'do i=1 to x;'; put 'newpath=cats(newpath,''/'',scan(folderpath,i,''/''));'; put 'end;'; put 'rc=metadata_pathobj('''',cats(newpath,"(Folder)"),"",objType,parentId);'; put 'if rc<1 then do;'; put 'paths+1;'; put 'call symputx(cats(''path'',paths),newpath);'; put 'putlog newpath;'; put 'end;'; put 'call symputx(''paths'',paths);'; put 'end;'; put 'end;'; put 'else putlog "parent " parent " exists";'; put 'call symputx(''parentFolderObjId'',parentId,''l'');'; put 'call symputx(''child'',child,''l'');'; put 'call symputx(''errorcheck'',0,''l'');'; put '&dbg put (_all_)(=);'; put 'run;'; put '%if &errorcheck=1 or &syscc ge 4 %then %return;'; put '%if &paths>0 %then %do x=1 %to &paths;'; put '%put executing recursive call for &&path&x;'; put '%mm_createfolder(path=&&path&x)'; put '%end;'; put '%else %do;'; put 'filename __newdir temp;'; put 'options noquotelenmax;'; put '%local inmeta;'; put '%put creating: &path;'; put '%let inmeta=$METAREPOSITORY'; put ''; put 'SAS268435456'; put ';'; put 'proc metadata in="&inmeta" out=__newdir verbose;'; put 'run ;'; put '/* check it was successful */'; put 'data _null_;'; put 'length objId parentId objType parent child $200 ;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj('''',cats("&path","(Folder)"),"",objType,objId);'; put 'if rc ge 1 then do;'; put 'putlog "SUCCCESS! &path created.";'; put 'end;'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unsuccessful attempt to create &path";'; put 'call symputx(''syscc'',8);'; put 'end;'; put 'run;'; put '/* write the response to the log for debugging */'; put '%if &mDebug ne 0 %then %do;'; put 'data _null_;'; put 'infile __newdir lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put 'filename __newdir clear;'; put '%end;'; put '%put &sysmacroname: execution finished for &path;'; put '%mend mm_createfolder;'; put '%macro mm_createlibrary('; put 'libname=My New Library'; put ',libref=mynewlib'; put ',libdesc=Created automatically using the mm_createlibrary macro'; put ',engine=BASE'; put ',tree=/User Folders/sasdemo'; put ',servercontext=SASApp'; put ',directory=/tmp/somelib'; put ',IsPreassigned=0'; put ',mDebug=0'; put ',frefin=mm_in'; put ',frefout=mm_out'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%let libref=%upcase(&libref);'; put '/**'; put '* Check Library does not exist already with this libname'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:SASLibrary?@Name=''&libname''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype = SASLibrary %then %do;'; put '%put %str(WARN)ING: Library (&liburi) already exists with libname (&libname);'; put '%return;'; put '%end;'; put '/**'; put '* Check Library does not exist already with this libref'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:SASLibrary?@Libref=''&libref''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype = SASLibrary %then %do;'; put '%put %str(WARN)ING: Library (&liburi) already exists with libref (&libref) ;'; put '%return;'; put '%end;'; put '/**'; put '* Attempt to create tree'; put '*/'; put '%mm_createfolder(path=&tree)'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''foldertype'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%if &foldertype ne Tree %then %do;'; put '%put %str(WARN)ING: Tree &tree does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Create filerefs for proc metadata call'; put '*/'; put 'filename &frefin temp;'; put 'filename &frefout temp;'; put '%mp_abort(iftrue= ('; put '&engine=BASE & %mf_verifymacvars(libname libref engine servercontext tree)=0'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: libname libref engine servercontext tree)'; put ')'; put '%if &engine=BASE %then %do;'; put '/**'; put '* Check that the ServerContext exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:ServerContext?@Name=''&ServerContext''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''serveruri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne ServerContext %then %do;'; put '%put %str(ERR)OR: ServerContext (&ServerContext) does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Get prototype info'; put '*/'; put 'data _null_;'; put 'length type uri str $256;'; put 'str="omsobj:Prototype?@Name=''Library.SAS.Prototype.Name.xmlKey.txt''";'; put 'rc=metadata_resolve(str,type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''prototypeuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne Prototype %then %do;'; put '%put %str(ERR)OR: Prototype Library.SAS.Prototype.Name.xmlKey.txt not found;'; put '%return;'; put '%end;'; put '/**'; put '* Check that Physical location exists'; put '*/'; put '%if %sysfunc(fileexist(&directory))=0 %then %do;'; put '%put %str(ERR)OR: Physical directory (&directory) does not appear to exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Check that Directory Object exists in metadata'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:Directory?@DirectoryRole=''LibraryPath''"'; put '!!" and @DirectoryName=''&directory''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''directoryuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne Directory %then %do;'; put '%put NOTE: Directory object does not exist for (&directory) location;'; put '%put NOTE: It will now be created;'; put 'data _null_;'; put 'file &frefin;'; put 'directory=quote(symget(''directory''));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'proc metadata in= &frefin out=&frefout %if &mdebug=1 %then verbose;;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input; put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: Checking to ensure directory (&directory) object was created;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:Directory?@DirectoryRole=''LibraryPath''"'; put '!!" and @DirectoryName=''&directory''",type,uri);'; put 'call symputx(''checktype2'',type,''l'');'; put 'call symputx(''directoryuri'',uri,''l'');'; put '%if &mdebug=1 %then putlog (_all_)(=);;'; put 'run;'; put '%if &checktype2 ne Directory %then %do;'; put '%put %str(ERR)OR: Directory (&directory) object was NOT created!;'; put '%return;'; put '%end;'; put '%else %put NOTE: Directory (&directoryuri) successfully created!;'; put '%end;'; put '/**'; put '* check SAS version'; put '*/'; put '%if %sysevalf(&sysver lt 9.3) %then %do;'; put '%put %str(WARN)ING: Version 9.3 or later required;'; put '%return;'; put '%end;'; put '/**'; put '* Prepare the XML and create the library'; put '*/'; put 'data _null_;'; put 'file &frefin;'; put 'treeuri=quote(symget(''treeuri''));'; put 'serveruri=quote(symget(''serveruri''));'; put 'directoryuri=quote(symget(''directoryuri''));'; put 'libname=quote(symget(''libname''));'; put 'libref=quote(symget(''libref''));'; put 'IsPreassigned=quote(symget(''IsPreassigned''));'; put 'prototypeuri=quote(symget(''prototypeuri''));'; put '/* escape description so it can be stored as XML */'; put 'libdesc=tranwrd(symget(''libdesc''),''&'',''&'');'; put 'libdesc=tranwrd(libdesc,''<'',''<'');'; put 'libdesc=tranwrd(libdesc,''>'',''>'');'; put 'libdesc=tranwrd(libdesc,"''",''''');'; put 'libdesc=tranwrd(libdesc,''"'',''"'');'; put 'libdesc=tranwrd(libdesc,''0A''x,'' '');'; put 'libdesc=tranwrd(libdesc,''0D''x,'' '');'; put 'libdesc=tranwrd(libdesc,''$'',''$'');'; put 'libdesc=quote(trim(libdesc));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put ''' ''/'; put ''' "/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put '" "/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put '''SAS''/'; put '''268435456'';'; put 'run;'; put 'proc metadata in= &frefin out=&frefout %if &mdebug=1 %then verbose ;;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: Checking to ensure library (&libname) was created;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&libname","Library",type,uri);'; put 'call symputx(''libtype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put '%if &mdebug=1 %then putlog (_all_)(=);;'; put 'run;'; put '%if &libtype ne SASLibrary %then %do;'; put '%put %str(ERR)OR: Could not find (&libname) at (&tree)!!;'; put '%return;'; put '%end;'; put '%else %put NOTE: Library (&libname) successfully created in (&tree)!;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Other library engine types are not yet supported!!;'; put '%end;'; put '/**'; put '* Wrap up'; put '*/'; put '%if &mdebug ne 1 %then %do;'; put 'filename &frefin clear;'; put 'filename &frefout clear;'; put '%end;'; put '%mend mm_createlibrary;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mm_getDirectories('; put 'path='; put ',outds=work.mm_getDirectories'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getDirectories.sas;'; put '%&mD.put _local_;'; put 'data &outds (keep=directoryuri name directoryname directorydesc );'; put 'length directoryuri name directoryname directorydesc $256;'; put 'call missing(of _all_);'; put '__i+1;'; put '%if %length(&path)=0 %then %do;'; put 'do while'; put '(metadata_getnobj("omsobj:Directory?@Id contains ''.''",__i,directoryuri)>0);'; put '%end; %else %do;'; put 'do while('; put 'metadata_getnobj("omsobj:Directory?@DirectoryName=''&path''",__i,directoryuri)'; put '>0'; put ');'; put '%end;'; put '__rc1=metadata_getattr(directoryuri, "Name", name);'; put '__rc2=metadata_getattr(directoryuri, "DirectoryName", directoryname);'; put '__rc3=metadata_getattr(directoryuri, "Desc", directorydesc);'; put '&mD.putlog (_all_) (=);'; put 'drop __:;'; put '__i+1;'; put 'if sum(of __rc1-__rc3)=0 then output;'; put 'end;'; put 'run;'; put '%mend mm_getDirectories;'; put '%macro mm_updatestpsourcecode(stp='; put ',stpcode='; put ',minify=NO'; put ',mdebug=0'; put ');'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&stp.(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '%if &mdebug=1 %then %do;'; put 'put tsuri= value=;'; put '%end;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%if &tsuri=stopifempty %then %do;'; put '%put %str(WARN)ING: &stp.(StoredProcess) not found!;'; put '%return;'; put '%end;'; put '%if %length(&stpcode)<2 %then %do;'; put '%put %str(WARN)ING: No SAS code supplied!!;'; put '%return;'; put '%end;'; put '%local frefin frefout;'; put '%let frefin=%mf_getuniquefileref();'; put '%let frefout=%mf_getuniquefileref();'; put '/* write header XML */'; put 'data _null_;'; put 'file &frefin;'; put 'put "$METAREPOSITORY'; put '2 %then %do;'; put 'data _null_;'; put 'file &frefin lrecl=32767 mod;'; put 'infile &stpcode lrecl=32767;'; put 'length outstr $32767;'; put 'input outstr ;'; put '/* escape code so it can be stored as XML */'; put 'outstr=tranwrd(_infile_,''&'',''&'');'; put 'outstr=tranwrd(outstr,''<'',''<'');'; put 'outstr=tranwrd(outstr,''>'',''>'');'; put 'outstr=tranwrd(outstr,"''",''''');'; put 'outstr=tranwrd(outstr,''"'',''"'');'; put 'outstr=tranwrd(outstr,''0A''x,'' '');'; put 'outstr=tranwrd(outstr,''0D''x,'' '');'; put 'outstr=tranwrd(outstr,''$'',''$'');'; put '%if &minify=YES %then %do;'; put 'outstr=cats(outstr);'; put 'if outstr ne '''';'; put 'if not (outstr=:''/*'' and subpad(left(reverse(outstr)),1,2)=''/*'');'; put '%end;'; put 'outstr=trim(outstr);'; put 'put outstr '' '';'; put 'run;'; put '%end;'; put 'data _null_;'; put 'file &frefin mod;'; put 'put "''>SAS268435456'; put '";'; put 'run;'; put 'proc metadata in= &frefin out=&frefout;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%else %do;'; put 'filename &frefin clear;'; put 'filename &frefout clear;'; put '%end;'; put '%mend mm_updatestpsourcecode;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro mm_getservercontexts('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* first get list of available repos */'; put '%mm_getrepos(outds=work.repos)'; put '%let repocnt=0;'; put 'data _null_;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'');'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put 'filename __mc1 temp;'; put 'filename __mc2 temp;'; put 'data &outds;'; put 'length serveruri servername $200;'; put 'call missing (of _all_);'; put 'stop;'; put 'run;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'proc metadata in='; put '"$METAREPOSITORY'; put 'ServerContextSAS'; put '0"'; put 'out=__mc1;'; put 'run;'; put '/*'; put 'data _null_;'; put 'infile __mc1 lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put 'data _null_;'; put 'file __mc2;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname __mc3 xml xmlfileref=__mc1 xmlmap=__mc2;'; put 'proc append base=&outds data=__mc3.SASContexts;run;'; put 'libname __mc3 clear;'; put '%end;'; put 'options metarepository=&repo;'; put 'filename __mc1 clear;'; put 'filename __mc2 clear;'; put '%mend mm_getservercontexts;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mm_createstp('; put 'stpname=SASjs Default STP'; put ',stpdesc=This stp was created automatically by the mm_createstp macro'; put ',filename=mm_createstp.sas'; put ',directory=SASEnvironment/SASCode'; put ',tree=/User Folders/sasdemo'; put ',package=false'; put ',streaming=true'; put ',outds=work.mm_createstp'; put ',mDebug=0'; put ',server=SASApp'; put ',stptype=1'; put ',minify=NO'; put ',frefin=mm_in'; put ',frefout=mm_out'; put ',LogicalServerType=Sps'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_CreateSTP.sas;'; put '%&mD.put _local_;'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(stpname filename directory tree)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: stpname filename directory tree)'; put ')'; put '%mp_dropmembers(%scan(&outds,2,.))'; put '/* check LogicalServerType validity */'; put '%mp_abort('; put 'iftrue=('; put '&LogicalServerType ne Sps'; put 'and &LogicalServerType ne Wks'; put 'and &LogicalServerType ne Any'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid value for LogicalServerType (&LogicalServerType))'; put ')'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''foldertype'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%if &foldertype ne Tree %then %do;'; put '%put %str(WARN)ING: Tree &tree does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Check STP does not exist already'; put '*/'; put '%local cmtype;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&stpname",''StoredProcess'',type,uri);'; put 'call symputx(''cmtype'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &cmtype = ClassifierMap %then %do;'; put '%put %str(WARN)ING: Stored Process &stpname already exists in &tree!;'; put '%return;'; put '%end;'; put '/**'; put '* Check that the physical file exists'; put '*/'; put '%if %sysfunc(fileexist(&directory/&filename)) ne 1 %then %do;'; put '%put %str(WARN)ING: FILE *&directory/&filename* NOT FOUND!;'; put '%return;'; put '%end;'; put '%if &stptype=1 %then %do;'; put '/* type 1 STP - where code is stored on filesystem */'; put '%if %sysevalf(&sysver lt 9.2) %then %do;'; put '%put %str(WARN)ING: Version 9.2 or later required;'; put '%return;'; put '%end;'; put '/* check directory object (where 9.2 source code reference is stored) */'; put 'data _null_;'; put 'length id $20 dirtype $256;'; put 'rc=metadata_resolve("&directory",dirtype,id);'; put 'call symputx(''checkdirtype'',dirtype,''l'');'; put 'run;'; put '%if &checkdirtype ne Directory %then %do;'; put '%mm_getdirectories(path=&directory,outds=&outds ,mDebug=&mDebug)'; put '%if %mf_nobs(&outds)=0 or %sysfunc(exist(&outds))=0 %then %do;'; put '%put %str(WARN)ING: The directory object does not exist for &directory;'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data &outds;'; put 'directoryuri="&directory";'; put 'run;'; put '%end;'; put 'data &outds (keep=stpuri prompturi fileuri texturi);'; put 'length stpuri prompturi fileuri texturi serveruri $256 ;'; put 'if _n_=1 then call missing (of _all_);'; put 'set &outds;'; put '/* final checks on uris */'; put 'length id $20 type $256;'; put '__rc=metadata_resolve("&treeuri",type,id);'; put 'if type ne ''Tree'' then do;'; put 'putlog "%str(WARN)ING: Invalid tree URI: &treeuri";'; put 'stopme=1;'; put 'end;'; put '__rc=metadata_resolve(directoryuri,type,id);'; put 'if type ne ''Directory'' then do;'; put 'putlog "%str(WARN)ING: Invalid directory URI: " directoryuri;'; put 'stopme=1;'; put 'end;'; put '/* get server info */'; put '__rc=metadata_resolve("&server",type,serveruri);'; put 'if type ne ''LogicalServer'' then do;'; put '__rc=metadata_getnobj("omsobj:LogicalServer?@Name=''&server''",1,serveruri);'; put 'if serveruri='''' then do;'; put 'putlog "%str(WARN)ING: Invalid server: &server";'; put 'stopme=1;'; put 'end;'; put 'end;'; put 'if stopme=1 then do;'; put 'putlog (_all_)(=);'; put 'stop;'; put 'end;'; put '/* create empty prompt */'; put 'rc1=METADATA_NEWOBJ(''PromptGroup'',prompturi,''Parameters'');'; put 'rc2=METADATA_SETATTR(prompturi, ''UsageVersion'', ''1000000'');'; put 'rc3=METADATA_SETATTR(prompturi, ''GroupType'',''2'');'; put 'rc4=METADATA_SETATTR(prompturi, ''Name'',''Parameters'');'; put 'rc5=METADATA_SETATTR(prompturi, ''PublicType'',''Embedded:PromptGroup'');'; put 'GroupInfo='; put '"";'; put 'rc6 = METADATA_SETATTR(prompturi, ''GroupInfo'',groupinfo);'; put 'if sum(of rc1-rc6) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating prompt.";'; put 'if prompturi ne . then do;'; put 'putlog '' Removing orphan: '' prompturi;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'put rc=;'; put 'end;'; put 'stop;'; put 'end;'; put '/* create a file uri */'; put 'rc7=METADATA_NEWOBJ(''File'',fileuri,''SP Source File'');'; put 'rc8=METADATA_SETATTR(fileuri, ''FileName'',"&filename");'; put 'rc9=METADATA_SETATTR(fileuri, ''IsARelativeName'',''1'');'; put 'rc10=METADATA_SETASSN(fileuri, ''Directories'',''MODIFY'',directoryuri);'; put 'if sum(of rc7-rc10) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating file.";'; put 'if fileuri ne . then do;'; put 'putlog '' Removing orphans:'' prompturi fileuri;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'put (_all_)(=);'; put 'end;'; put 'stop;'; put 'end;'; put '/* create a TextStore object */'; put 'rc11= METADATA_NEWOBJ(''TextStore'',texturi,''Stored Process'');'; put 'rc12= METADATA_SETATTR(texturi, ''TextRole'',''StoredProcessConfiguration'');'; put 'rc13= METADATA_SETATTR(texturi, ''TextType'',''XML'');'; put 'storedtext='''''; put '!!""'; put '!!"";'; put 'rc14= METADATA_SETATTR(texturi, ''StoredText'',storedtext);'; put 'if sum(of rc11-rc14) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating TextStore.";'; put 'if texturi ne . then do;'; put 'putlog '' Removing orphans: '' prompturi fileuri texturi;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'rc = METADATA_DELOBJ(texturi);'; put 'put (_all_)(=);'; put 'end;'; put 'stop;'; put 'end;'; put '/* create meta obj */'; put 'rc15= METADATA_NEWOBJ(''ClassifierMap'',stpuri,"&stpname");'; put 'rc16= METADATA_SETASSN(stpuri, ''Trees'',''MODIFY'',treeuri);'; put 'rc17= METADATA_SETASSN(stpuri, ''ComputeLocations'',''MODIFY'',serveruri);'; put 'rc18= METADATA_SETASSN(stpuri, ''SourceCode'',''MODIFY'',fileuri);'; put 'rc19= METADATA_SETASSN(stpuri, ''Prompts'',''MODIFY'',prompturi);'; put 'rc20= METADATA_SETASSN(stpuri, ''Notes'',''MODIFY'',texturi);'; put 'rc21= METADATA_SETATTR(stpuri, ''PublicType'', ''StoredProcess'');'; put 'rc22= METADATA_SETATTR(stpuri, ''TransformRole'', ''StoredProcess'');'; put 'rc23= METADATA_SETATTR(stpuri, ''UsageVersion'', ''1000000'');'; put 'rc24= METADATA_SETATTR(stpuri, ''Desc'', "&stpdesc");'; put '/* tidy up if err */'; put 'if sum(of rc15-rc24) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating STP.";'; put 'if stpuri ne . then do;'; put 'putlog '' Removing orphans: '' prompturi fileuri texturi stpuri;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'rc = METADATA_DELOBJ(texturi);'; put 'rc = METADATA_DELOBJ(stpuri);'; put 'put (_all_)(=);'; put 'end;'; put 'end;'; put 'else do;'; put 'fullpath=cats(''_program='',treepath,"/&stpname");'; put 'putlog "NOTE: Stored Process Created!";'; put 'putlog "NOTE- "; putlog "NOTE-"; putlog "NOTE-" fullpath;'; put 'putlog "NOTE- "; putlog "NOTE-";'; put 'end;'; put 'output;'; put 'stop;'; put 'run;'; put '%end;'; put '%else %if &stptype=2 %then %do;'; put '/* type 2 stp - code is stored in metadata */'; put '%if %sysevalf(&sysver lt 9.3) %then %do;'; put '%put %str(WARN)ING: SAS version 9.3 or later required to create type2 STPs;'; put '%return;'; put '%end;'; put '/* check we have the correct ServerContext */'; put '%mm_getservercontexts(outds=contexts)'; put '%local serveruri; %let serveruri=NOTFOUND;'; put 'data _null_;'; put 'set contexts;'; put 'where upcase(servername)="%upcase(&server)";'; put 'call symputx(''serveruri'',serveruri);'; put 'run;'; put '%if &serveruri=NOTFOUND %then %do;'; put '%put %str(WARN)ING: ServerContext *&server* not found!;'; put '%return;'; put '%end;'; put '/**'; put '* First, create a Hello World type 2 stored process'; put '*/'; put 'filename &frefin temp;'; put 'data _null_;'; put 'file &frefin;'; put 'treeuri=quote(symget(''treeuri''));'; put 'serveruri=quote(symget(''serveruri''));'; put 'stpdesc=quote(symget(''stpdesc''));'; put 'stpname=quote(symget(''stpname''));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put '" "/'; put '" "/'; put '" "/'; put '" "/'; put ''' ''/'; put ''' '' /'; put '" "/'; put '" "/'; put ''' ''/'; put '" "/'; put '""/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'filename &frefout temp;'; put 'proc metadata in= &frefin out=&frefout ;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '/**'; put '* Next, add the source code'; put '*/'; put '%mm_updatestpsourcecode(stp=&tree/&stpname'; put ',stpcode="&directory/&filename"'; put ',mdebug=&mdebug'; put ',minify=&minify)'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: STPTYPE=*&stptype* not recognised!;'; put '%end;'; put '%mend mm_createstp;'; put '%macro mm_deletedocument('; put 'target='; put ')/*/STORE SOURCE*/;'; put '/**'; put '* Check document exist'; put '*/'; put '%local type;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &type ne Document %then %do;'; put '%put %str(WARN)ING: No Document found at ⌖'; put '%return;'; put '%end;'; put 'filename __in temp lrecl=10000;'; put 'filename __out temp lrecl=10000;'; put 'data _null_ ;'; put 'file __in ;'; put 'put "";'; put 'put "SAS268436480";'; put 'put "";'; put 'run ;'; put 'proc metadata in=__in out=__out verbose;run;'; put '/* list the result */'; put 'data _null_;infile __out; input; list; run;'; put 'filename __in clear;'; put 'filename __out clear;'; put '/**'; put '* Check deletion'; put '*/'; put '%local isgone;'; put 'data _null_;'; put 'length type uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''isgone'',type,''l'');'; put 'run;'; put '%if &isgone = Document %then %do;'; put '%put %str(ERR)OR: Document not deleted from ⌖'; put '%let syscc=4;'; put '%return;'; put '%end;'; put '%mend mm_deletedocument;'; put '%macro mm_deletestp('; put 'target='; put ')/*/STORE SOURCE*/;'; put '/**'; put '* Check STP does exist'; put '*/'; put '%local cmtype;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&target",''StoredProcess'',type,uri);'; put 'call symputx(''cmtype'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &cmtype ne ClassifierMap %then %do;'; put '%put NOTE: No Stored Process found at ⌖'; put '%return;'; put '%end;'; put 'filename __in temp lrecl=10000;'; put 'filename __out temp lrecl=10000;'; put 'data _null_ ;'; put 'file __in ;'; put 'put "";'; put 'put "SAS268436480";'; put 'put "";'; put 'run ;'; put 'proc metadata in=__in out=__out verbose;run;'; put '/* list the result */'; put 'data _null_;infile __out; input; list; run;'; put 'filename __in clear;'; put 'filename __out clear;'; put '/**'; put '* Check deletion'; put '*/'; put '%local isgone;'; put 'data _null_;'; put 'length type uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''isgone'',type,''l'');'; put 'run;'; put '%if &isgone = ClassifierMap %then %do;'; put '%put %str(ERR)OR: STP not deleted from ⌖'; put '%let syscc=4;'; put '%return;'; put '%end;'; put '%mend mm_deletestp;'; put '%macro mm_getstpinfo(pgm'; put ',outds=work.mm_getstpinfo'; put ',mDebug=0'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put 'data &outds;'; put 'length type stp_uri tsuri servercontext value $200'; put 'StoredProcessConfiguration $1000 sourcecode_first32k $32767;'; put 'keep path stp_uri sourcecode_first32k StoredProcessConfiguration'; put 'servercontext;'; put 'call missing (of _all_);'; put 'path="&pgm(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,stp_uri)>0 then do;'; put '/* get attributes */'; put 'cnt=1;'; put 'do while (metadata_getnasn(stp_uri,"Notes",cnt,tsuri)>0);'; put 'rc1=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put 'rc2=metadata_getattr(tsuri,"StoredText",sourcecode_first32k);'; put 'end;'; put 'else if value="Stored Process" then do;'; put 'rc3=metadata_getattr(tsuri,"StoredText",StoredProcessConfiguration);'; put 'end;'; put 'cnt+1;'; put 'end;'; put '/* get context (should only be one) */'; put 'rc4=metadata_getnasn(stp_uri,"ComputeLocations",1,tsuri);'; put 'rc5=metadata_getattr(tsuri,"Name",servercontext);'; put 'end;'; put 'else do;'; put 'put ''ERR'' +(-1) "OR: could not find " path;'; put 'put (_all_)(=);'; put 'end;'; put '&md.put (_all_)(=);'; put 'run;'; put '%mend mm_getstpinfo ;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief service for creating the configuration tables in DEMO mode.'; put '@details'; put 'STP for creating the configuration tables in DEMO mode.'; put 'It also adds the STAGING directory as subdirectory to the BASE'; put 'library location.'; put 'Note - the CURLIB var is added during the build process.'; put '@warning This STP self destructs! It will delete itself after a successful run'; put 'to avoid being executed twice (and overwriting actual data)'; put '

SAS Macros

'; put '@li mf_getapploc.sas'; put '@li mf_getuser.sas'; put '@li mf_mkdir.sas'; put '@li mm_createdocument.sas'; put '@li mm_createlibrary.sas'; put '@li mm_createstp.sas'; put '@li mm_deletedocument.sas'; put '@li mm_deletestp.sas'; put '@li mm_getstpcode.sas'; put '@li mm_getstpinfo.sas'; put '@li mp_abort.sas'; put '@li mp_init.sas'; put '@li mpe_makedata.sas'; put '@li mpe_makedatamodel.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mp_init()'; put '%global admin repo path; /* URL params from configurator */'; put '%let repo=%sysfunc(coalescec(&repo,Foundation));'; put '%let admin=%sysfunc(coalescec(&admin,dc-admin));'; put '%let dcpath=%sysfunc(coalescec(&path,NOTFOUND));'; put '%mp_abort(iftrue= ("&dcpath" = "NOTFOUND")'; put ',mac=&_program'; put ',msg=%str(PATH variable was not provided)'; put ')'; put '%let root=%mf_getapploc();'; put '%let work=%sysfunc(pathname(work));'; put '%let dc_libref=%upcase(DC%substr(%sysevalf(%sysfunc(datetime())/60),3,6));'; put '%let DC_LIBNAME=Data Controller(&dc_libref);'; put '%let dcpath=&dcpath/&dc_libref;'; put '%put _all_;'; put '%mf_mkdir(&dcpath/dc_staging)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Unable to create &dcpath using &sysuserid)'; put ')'; put '/* check we have the admin rights to update the items in the Admin folder */'; put '%mm_createdocument(tree=&root/services/admin,name=permTest)'; put '%mm_deletedocument(target=&root/services/admin/permTest)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(User &_metaperson does not have WriteMetadata on metadata folder:'; put '&root )'; put ')'; put '/* check we have physical permissions to the DCLIB folder */'; put 'data _null_;'; put 'putlog "dcpath=&dcpath/permTest.txt";'; put 'putlog "sysuserid=&sysuserid";'; put 'data _null_;'; put 'file "&dcpath/permTest.txt";'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(User &sysuserid does not have WRITE permissions on physical'; put 'directory: &dcpath )'; put ')'; put 'filename delfile "&dcpath/permTest.txt";'; put 'data _null_;'; put 'rc=fdelete(''delfile'');'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(User &sysuserid could create (but not delete) &dcpath/permTest.txt )'; put ')'; put '/* get the server context from the current STP */'; put '%mm_getstpinfo(&_program,outds=work.stpinfo)'; put 'data _null_;'; put 'set work.stpinfo;'; put 'call symputx(''serverContext'',serverContext);'; put 'run;'; put '/* create the library */'; put '%mm_createlibrary('; put 'libname=&DC_LIBNAME'; put ',libref=&dc_libref'; put ',libdesc=Data Controller for SAS configuration tables'; put ',engine=BASE'; put ',tree=&root/data'; put ',servercontext=&serverContext'; put ',directory=&dcpath'; put ',mDebug=1'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=buildtermsas9'; put ',msg=%str(Unable to create &dc_libref library)'; put ')'; put '/* assign the library */'; put 'libname &dc_libref "&dcpath";'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=buildtermsas9'; put ',msg=%str(Unable to assign the &dc_libref library)'; put ')'; put '/* make the tables */'; put '/* SASAdministrators */'; put '%mpe_makedatamodel(lib=&dc_libref)'; put '%mpe_makedata(lib=&DC_LIBREF,mpeadmins=&admin,path=%str(&dcpath))'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem creating tables in &DC_LIBREF library\n'; put 'SYSERRORTEXT=&SYSERRORTEXT \n'; put 'SYSWARNINGTEXT=&SYSWARNINGTEXT)'; put ')'; put '/* register tables in metadata */'; put 'proc metalib;'; put 'omr (library="&DC_LIBNAME");'; put 'folder="&root/data";'; put 'update_rule=(delete);'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem registering metadata for tables in &DC_LIBREF library \n'; put 'os user=&sysuserid \n'; put 'metaperson=%mf_getuser() \n'; put 'SYSERRORTEXT=&SYSERRORTEXT \n'; put 'SYSWARNINGTEXT=&SYSWARNINGTEXT'; put ')'; put ')'; put '/* finally, update the app component. The user will need WM perms for this. */'; put 'data _null_;'; put 'file "&work/settings.sas" mod ;'; put 'put '' '';'; put 'put ''%global DC_LIBREF DC_LIBNAME DC_LIBLOC DC_STAGING_AREA DC_ADMIN_GROUP'';'; put 'put '' DC_REPO_USERS DC_DTTMTFMT DC_MACROS;'';'; put 'put '' '';'; put 'put ''/* This metadata library (libref) contains control datasets for DC */'';'; put 'put ''/* If a different libref must be used, configure it below */'';'; put 'put ''%let DC_LIBREF='' "&DC_LIBREF;";'; put 'put ''%let DC_LIBNAME='' "&DC_LIBNAME;";'; put 'put ''%let DC_LIBLOC='' "&dcpath;";'; put 'put '' '';'; put 'put ''libname &DC_LIBREF "&dc_libloc";'';'; put 'put '' '';'; put 'put ''/* This metadata group has unrestricted access to Data Controller */'';'; put 'put ''%let dc_admin_group='' "&admin;";'; put 'put '' '';'; put 'put ''/* This repository is used to query for users and groups */'';'; put 'put ''%let dc_repo_users='' "&repo;";'; put 'put '' '';'; put 'put ''/* This physical location is used for staging data and audit history */'';'; put 'put ''%let dc_staging_area=&dc_libloc/dc_staging;'';'; put 'put '' '';'; put 'put ''data _null_;'';'; put 'put '' set &DC_LIBREF..mpe_config(where=('';'; put 'put '' var_scope="DC" '';'; put 'put '' and &dc_dttmtfmt. lt tx_to'';'; put 'put '' and var_active=1'';'; put 'put " ));";'; put 'put " call symputx(var_name,var_value,''G'');";'; put 'put '' putlog var_name "=" var_value;'';'; put 'put "run;";'; put 'put '' '';'; put 'put ''/* to override any DC macros with client versions, place them below */'';'; put 'put ''options insert=(sasautos=("&dc_macros"));'';'; put 'run;'; put '/*'; put 'put ''data _null_;'';'; put 'put '' length lib_uri up_uri path $256;'';'; put 'put '' call missing (of _all_);'';'; put 'put '' rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''''&dc_libref''''",1,lib_uri);'';'; put 'put '' rc=metadata_getnasn(lib_uri,"UsingPackages",1,up_uri);'';'; put 'put '' rc=metadata_getattr(up_uri,"DirectoryName",path);'';'; put 'put '' call symputx("dc_libloc",path);'';'; put 'put ''run;'';'; put '*/'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=syscc=&syscc when preparing data_controller_settings)'; put ')'; put '%mm_createstp(stpname=Data_Controller_Settings'; put ',filename=settings.sas'; put ',directory=&work'; put ',tree=&root/services/public'; put ',Server=&serverContext'; put ',stptype=2'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str('; put 'Problem updating the dc_staging area in'; put '&root/services/public/DataController Settings \n'; put 'SYSERRORTEXT=&SYSERRORTEXT \n'; put 'SYSWARNINGTEXT=&SYSWARNINGTEXT'; put ')'; put ')'; put 'data _null_;'; put 'file _webout;'; put 'put ''

Data Controller Config

'';'; put 'put ''

The following items have been successfully configured:

'';'; put 'put "";'; put 'put "

Next Steps:

";'; put 'put "
  1. Populate ";'; put 'put "Table Lineage
  2. ";'; put 'put "
  3. Populate";'; put 'put "Data Catalog
  4. ";'; put 'put "
  5. Now, ";'; put 'put "hereLaunch!
";'; put 'run;'; put '/* We ran successfully, now remove configurator and makedata STPs */'; put '%mm_deletestp(target=&root/services/admin/configurator)'; put '%mm_deletestp(target=&_program)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=makelib; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mm_createfolder(path=,mDebug=0);'; put '%put &sysmacroname: execution started for &path;'; put '%local dbg errorcheck;'; put '%if &mDebug=0 %then %let dbg=*;'; put '%local parentFolderObjId child errorcheck paths;'; put '%let paths=0;'; put '%let errorcheck=1;'; put '%if &syscc ge 4 %then %do;'; put '%put SYSCC=&syscc - this macro requires a clean session;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'length objId parentId objType parent child $200'; put 'folderPath $1000;'; put 'call missing (of _all_);'; put 'folderPath = "%trim(&path)";'; put '* remove any trailing slash ;'; put 'if ( substr(folderPath,length(folderPath),1) = ''/'' ) then'; put 'folderPath=substr(folderPath,1,length(folderPath)-1);'; put '* name must not be blank;'; put 'if ( folderPath = '''' ) then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname PATH parameter value must be non-blank";'; put 'end;'; put '* must have a starting slash ;'; put 'if ( substr(folderPath,1,1) ne ''/'' ) then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname PATH param value must have starting slash";'; put 'stop;'; put 'end;'; put '* check if folder already exists ;'; put 'rc=metadata_pathobj('''',cats(folderPath,"(Folder)"),"",objType,objId);'; put 'if rc ge 1 then do;'; put 'put "NOTE: Folder " folderPath " already exists!";'; put 'stop;'; put 'end;'; put '* do not create a root (one level) folder ;'; put 'if countc(folderPath,''/'')=1 then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname will not create a new ROOT folder";'; put 'stop;'; put 'end;'; put '* check that root folder exists ;'; put 'root=cats(''/'',scan(folderpath,1,''/''),"(Folder)");'; put 'if metadata_pathobj('''',root,"",objType,parentId)<1 then do;'; put 'put ''ERR'' +(-1) "OR: " root " does not exist!";'; put 'stop;'; put 'end;'; put '* check that parent folder exists ;'; put 'child=scan(folderPath,-1,''/'');'; put 'parent=substr(folderpath,1,length(folderpath)-length(child)-1);'; put 'rc=metadata_pathobj('''',cats(parent,"(Folder)"),"",objType,parentId);'; put 'if rc<1 then do;'; put 'putlog ''The following folders will be created:'';'; put '/* folder does not exist - so start from top and work down */'; put 'length newpath $1000;'; put 'paths=0;'; put 'do x=2 to countw(folderpath,''/'');'; put 'newpath='''';'; put 'do i=1 to x;'; put 'newpath=cats(newpath,''/'',scan(folderpath,i,''/''));'; put 'end;'; put 'rc=metadata_pathobj('''',cats(newpath,"(Folder)"),"",objType,parentId);'; put 'if rc<1 then do;'; put 'paths+1;'; put 'call symputx(cats(''path'',paths),newpath);'; put 'putlog newpath;'; put 'end;'; put 'call symputx(''paths'',paths);'; put 'end;'; put 'end;'; put 'else putlog "parent " parent " exists";'; put 'call symputx(''parentFolderObjId'',parentId,''l'');'; put 'call symputx(''child'',child,''l'');'; put 'call symputx(''errorcheck'',0,''l'');'; put '&dbg put (_all_)(=);'; put 'run;'; put '%if &errorcheck=1 or &syscc ge 4 %then %return;'; put '%if &paths>0 %then %do x=1 %to &paths;'; put '%put executing recursive call for &&path&x;'; put '%mm_createfolder(path=&&path&x)'; put '%end;'; put '%else %do;'; put 'filename __newdir temp;'; put 'options noquotelenmax;'; put '%local inmeta;'; put '%put creating: &path;'; put '%let inmeta=$METAREPOSITORY'; put ''; put 'SAS268435456'; put ';'; put 'proc metadata in="&inmeta" out=__newdir verbose;'; put 'run ;'; put '/* check it was successful */'; put 'data _null_;'; put 'length objId parentId objType parent child $200 ;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj('''',cats("&path","(Folder)"),"",objType,objId);'; put 'if rc ge 1 then do;'; put 'putlog "SUCCCESS! &path created.";'; put 'end;'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unsuccessful attempt to create &path";'; put 'call symputx(''syscc'',8);'; put 'end;'; put 'run;'; put '/* write the response to the log for debugging */'; put '%if &mDebug ne 0 %then %do;'; put 'data _null_;'; put 'infile __newdir lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put 'filename __newdir clear;'; put '%end;'; put '%put &sysmacroname: execution finished for &path;'; put '%mend mm_createfolder;'; put '%macro mm_createlibrary('; put 'libname=My New Library'; put ',libref=mynewlib'; put ',libdesc=Created automatically using the mm_createlibrary macro'; put ',engine=BASE'; put ',tree=/User Folders/sasdemo'; put ',servercontext=SASApp'; put ',directory=/tmp/somelib'; put ',IsPreassigned=0'; put ',mDebug=0'; put ',frefin=mm_in'; put ',frefout=mm_out'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%let libref=%upcase(&libref);'; put '/**'; put '* Check Library does not exist already with this libname'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:SASLibrary?@Name=''&libname''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype = SASLibrary %then %do;'; put '%put %str(WARN)ING: Library (&liburi) already exists with libname (&libname);'; put '%return;'; put '%end;'; put '/**'; put '* Check Library does not exist already with this libref'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:SASLibrary?@Libref=''&libref''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype = SASLibrary %then %do;'; put '%put %str(WARN)ING: Library (&liburi) already exists with libref (&libref) ;'; put '%return;'; put '%end;'; put '/**'; put '* Attempt to create tree'; put '*/'; put '%mm_createfolder(path=&tree)'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''foldertype'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%if &foldertype ne Tree %then %do;'; put '%put %str(WARN)ING: Tree &tree does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Create filerefs for proc metadata call'; put '*/'; put 'filename &frefin temp;'; put 'filename &frefout temp;'; put '%mp_abort(iftrue= ('; put '&engine=BASE & %mf_verifymacvars(libname libref engine servercontext tree)=0'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: libname libref engine servercontext tree)'; put ')'; put '%if &engine=BASE %then %do;'; put '/**'; put '* Check that the ServerContext exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:ServerContext?@Name=''&ServerContext''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''serveruri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne ServerContext %then %do;'; put '%put %str(ERR)OR: ServerContext (&ServerContext) does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Get prototype info'; put '*/'; put 'data _null_;'; put 'length type uri str $256;'; put 'str="omsobj:Prototype?@Name=''Library.SAS.Prototype.Name.xmlKey.txt''";'; put 'rc=metadata_resolve(str,type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''prototypeuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne Prototype %then %do;'; put '%put %str(ERR)OR: Prototype Library.SAS.Prototype.Name.xmlKey.txt not found;'; put '%return;'; put '%end;'; put '/**'; put '* Check that Physical location exists'; put '*/'; put '%if %sysfunc(fileexist(&directory))=0 %then %do;'; put '%put %str(ERR)OR: Physical directory (&directory) does not appear to exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Check that Directory Object exists in metadata'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:Directory?@DirectoryRole=''LibraryPath''"'; put '!!" and @DirectoryName=''&directory''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''directoryuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne Directory %then %do;'; put '%put NOTE: Directory object does not exist for (&directory) location;'; put '%put NOTE: It will now be created;'; put 'data _null_;'; put 'file &frefin;'; put 'directory=quote(symget(''directory''));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'proc metadata in= &frefin out=&frefout %if &mdebug=1 %then verbose;;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input; put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: Checking to ensure directory (&directory) object was created;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:Directory?@DirectoryRole=''LibraryPath''"'; put '!!" and @DirectoryName=''&directory''",type,uri);'; put 'call symputx(''checktype2'',type,''l'');'; put 'call symputx(''directoryuri'',uri,''l'');'; put '%if &mdebug=1 %then putlog (_all_)(=);;'; put 'run;'; put '%if &checktype2 ne Directory %then %do;'; put '%put %str(ERR)OR: Directory (&directory) object was NOT created!;'; put '%return;'; put '%end;'; put '%else %put NOTE: Directory (&directoryuri) successfully created!;'; put '%end;'; put '/**'; put '* check SAS version'; put '*/'; put '%if %sysevalf(&sysver lt 9.3) %then %do;'; put '%put %str(WARN)ING: Version 9.3 or later required;'; put '%return;'; put '%end;'; put '/**'; put '* Prepare the XML and create the library'; put '*/'; put 'data _null_;'; put 'file &frefin;'; put 'treeuri=quote(symget(''treeuri''));'; put 'serveruri=quote(symget(''serveruri''));'; put 'directoryuri=quote(symget(''directoryuri''));'; put 'libname=quote(symget(''libname''));'; put 'libref=quote(symget(''libref''));'; put 'IsPreassigned=quote(symget(''IsPreassigned''));'; put 'prototypeuri=quote(symget(''prototypeuri''));'; put '/* escape description so it can be stored as XML */'; put 'libdesc=tranwrd(symget(''libdesc''),''&'',''&'');'; put 'libdesc=tranwrd(libdesc,''<'',''<'');'; put 'libdesc=tranwrd(libdesc,''>'',''>'');'; put 'libdesc=tranwrd(libdesc,"''",''''');'; put 'libdesc=tranwrd(libdesc,''"'',''"'');'; put 'libdesc=tranwrd(libdesc,''0A''x,'' '');'; put 'libdesc=tranwrd(libdesc,''0D''x,'' '');'; put 'libdesc=tranwrd(libdesc,''$'',''$'');'; put 'libdesc=quote(trim(libdesc));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put ''' ''/'; put ''' "/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put '" "/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put '''SAS''/'; put '''268435456'';'; put 'run;'; put 'proc metadata in= &frefin out=&frefout %if &mdebug=1 %then verbose ;;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: Checking to ensure library (&libname) was created;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&libname","Library",type,uri);'; put 'call symputx(''libtype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put '%if &mdebug=1 %then putlog (_all_)(=);;'; put 'run;'; put '%if &libtype ne SASLibrary %then %do;'; put '%put %str(ERR)OR: Could not find (&libname) at (&tree)!!;'; put '%return;'; put '%end;'; put '%else %put NOTE: Library (&libname) successfully created in (&tree)!;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Other library engine types are not yet supported!!;'; put '%end;'; put '/**'; put '* Wrap up'; put '*/'; put '%if &mdebug ne 1 %then %do;'; put 'filename &frefin clear;'; put 'filename &frefout clear;'; put '%end;'; put '%mend mm_createlibrary;'; put '%macro mm_createdocument('; put 'tree=/User Folders/sasdemo'; put ',name=myNote'; put ',desc=Created by &sysmacroname'; put ',textrole='; put ',frefin=mm_in'; put ',frefout=mm_out'; put ',mDebug=1'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%mp_abort(iftrue= (%mf_verifymacvars(tree name)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: tree name)'; put ')'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%mp_abort('; put 'iftrue= (&type ne Tree)'; put ',mac=mm_createdocument.sas'; put ',msg=Tree &tree does not exist!'; put ')'; put '/**'; put '* Check object does not exist already'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&name","Note",type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''docuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &type = Document %then %do;'; put '%put Document &name already exists in &tree!;'; put '%return;'; put '%end;'; put '/**'; put '* Now we can create the document'; put '*/'; put 'filename &frefin temp;'; put '/* write header XML */'; put 'data _null_;'; put 'file &frefin;'; put 'name=quote("&name");'; put 'desc=quote("&desc");'; put 'textrole=quote("&textrole");'; put 'treeuri=quote("&treeuri");'; put 'put "$METAREPOSITORY"/'; put '''"/'; put '" "/'; put ''' '' /'; put '''''/'; put '/*URI="Document for public note" */'; put '""/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'filename &frefout temp;'; put 'proc metadata in= &frefin out=&frefout verbose;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%mend mm_createdocument;'; put '%macro mm_deletedocument('; put 'target='; put ')/*/STORE SOURCE*/;'; put '/**'; put '* Check document exist'; put '*/'; put '%local type;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &type ne Document %then %do;'; put '%put %str(WARN)ING: No Document found at ⌖'; put '%return;'; put '%end;'; put 'filename __in temp lrecl=10000;'; put 'filename __out temp lrecl=10000;'; put 'data _null_ ;'; put 'file __in ;'; put 'put "";'; put 'put "SAS268436480";'; put 'put "";'; put 'run ;'; put 'proc metadata in=__in out=__out verbose;run;'; put '/* list the result */'; put 'data _null_;infile __out; input; list; run;'; put 'filename __in clear;'; put 'filename __out clear;'; put '/**'; put '* Check deletion'; put '*/'; put '%local isgone;'; put 'data _null_;'; put 'length type uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''isgone'',type,''l'');'; put 'run;'; put '%if &isgone = Document %then %do;'; put '%put %str(ERR)OR: Document not deleted from ⌖'; put '%let syscc=4;'; put '%return;'; put '%end;'; put '%mend mm_deletedocument;'; put '%macro mm_deletestp('; put 'target='; put ')/*/STORE SOURCE*/;'; put '/**'; put '* Check STP does exist'; put '*/'; put '%local cmtype;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&target",''StoredProcess'',type,uri);'; put 'call symputx(''cmtype'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &cmtype ne ClassifierMap %then %do;'; put '%put NOTE: No Stored Process found at ⌖'; put '%return;'; put '%end;'; put 'filename __in temp lrecl=10000;'; put 'filename __out temp lrecl=10000;'; put 'data _null_ ;'; put 'file __in ;'; put 'put "";'; put 'put "SAS268436480";'; put 'put "";'; put 'run ;'; put 'proc metadata in=__in out=__out verbose;run;'; put '/* list the result */'; put 'data _null_;infile __out; input; list; run;'; put 'filename __in clear;'; put 'filename __out clear;'; put '/**'; put '* Check deletion'; put '*/'; put '%local isgone;'; put 'data _null_;'; put 'length type uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''isgone'',type,''l'');'; put 'run;'; put '%if &isgone = ClassifierMap %then %do;'; put '%put %str(ERR)OR: STP not deleted from ⌖'; put '%let syscc=4;'; put '%return;'; put '%end;'; put '%mend mm_deletestp;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mm_getDirectories('; put 'path='; put ',outds=work.mm_getDirectories'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getDirectories.sas;'; put '%&mD.put _local_;'; put 'data &outds (keep=directoryuri name directoryname directorydesc );'; put 'length directoryuri name directoryname directorydesc $256;'; put 'call missing(of _all_);'; put '__i+1;'; put '%if %length(&path)=0 %then %do;'; put 'do while'; put '(metadata_getnobj("omsobj:Directory?@Id contains ''.''",__i,directoryuri)>0);'; put '%end; %else %do;'; put 'do while('; put 'metadata_getnobj("omsobj:Directory?@DirectoryName=''&path''",__i,directoryuri)'; put '>0'; put ');'; put '%end;'; put '__rc1=metadata_getattr(directoryuri, "Name", name);'; put '__rc2=metadata_getattr(directoryuri, "DirectoryName", directoryname);'; put '__rc3=metadata_getattr(directoryuri, "Desc", directorydesc);'; put '&mD.putlog (_all_) (=);'; put 'drop __:;'; put '__i+1;'; put 'if sum(of __rc1-__rc3)=0 then output;'; put 'end;'; put 'run;'; put '%mend mm_getDirectories;'; put '%macro mm_updatestpsourcecode(stp='; put ',stpcode='; put ',minify=NO'; put ',mdebug=0'; put ');'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&stp.(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '%if &mdebug=1 %then %do;'; put 'put tsuri= value=;'; put '%end;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%if &tsuri=stopifempty %then %do;'; put '%put %str(WARN)ING: &stp.(StoredProcess) not found!;'; put '%return;'; put '%end;'; put '%if %length(&stpcode)<2 %then %do;'; put '%put %str(WARN)ING: No SAS code supplied!!;'; put '%return;'; put '%end;'; put '%local frefin frefout;'; put '%let frefin=%mf_getuniquefileref();'; put '%let frefout=%mf_getuniquefileref();'; put '/* write header XML */'; put 'data _null_;'; put 'file &frefin;'; put 'put "$METAREPOSITORY'; put '2 %then %do;'; put 'data _null_;'; put 'file &frefin lrecl=32767 mod;'; put 'infile &stpcode lrecl=32767;'; put 'length outstr $32767;'; put 'input outstr ;'; put '/* escape code so it can be stored as XML */'; put 'outstr=tranwrd(_infile_,''&'',''&'');'; put 'outstr=tranwrd(outstr,''<'',''<'');'; put 'outstr=tranwrd(outstr,''>'',''>'');'; put 'outstr=tranwrd(outstr,"''",''''');'; put 'outstr=tranwrd(outstr,''"'',''"'');'; put 'outstr=tranwrd(outstr,''0A''x,'' '');'; put 'outstr=tranwrd(outstr,''0D''x,'' '');'; put 'outstr=tranwrd(outstr,''$'',''$'');'; put '%if &minify=YES %then %do;'; put 'outstr=cats(outstr);'; put 'if outstr ne '''';'; put 'if not (outstr=:''/*'' and subpad(left(reverse(outstr)),1,2)=''/*'');'; put '%end;'; put 'outstr=trim(outstr);'; put 'put outstr '' '';'; put 'run;'; put '%end;'; put 'data _null_;'; put 'file &frefin mod;'; put 'put "''>SAS268435456'; put '";'; put 'run;'; put 'proc metadata in= &frefin out=&frefout;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%else %do;'; put 'filename &frefin clear;'; put 'filename &frefout clear;'; put '%end;'; put '%mend mm_updatestpsourcecode;'; put '%macro mm_getservercontexts('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* first get list of available repos */'; put '%mm_getrepos(outds=work.repos)'; put '%let repocnt=0;'; put 'data _null_;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'');'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put 'filename __mc1 temp;'; put 'filename __mc2 temp;'; put 'data &outds;'; put 'length serveruri servername $200;'; put 'call missing (of _all_);'; put 'stop;'; put 'run;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'proc metadata in='; put '"$METAREPOSITORY'; put 'ServerContextSAS'; put '0"'; put 'out=__mc1;'; put 'run;'; put '/*'; put 'data _null_;'; put 'infile __mc1 lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put 'data _null_;'; put 'file __mc2;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname __mc3 xml xmlfileref=__mc1 xmlmap=__mc2;'; put 'proc append base=&outds data=__mc3.SASContexts;run;'; put 'libname __mc3 clear;'; put '%end;'; put 'options metarepository=&repo;'; put 'filename __mc1 clear;'; put 'filename __mc2 clear;'; put '%mend mm_getservercontexts;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mm_createstp('; put 'stpname=SASjs Default STP'; put ',stpdesc=This stp was created automatically by the mm_createstp macro'; put ',filename=mm_createstp.sas'; put ',directory=SASEnvironment/SASCode'; put ',tree=/User Folders/sasdemo'; put ',package=false'; put ',streaming=true'; put ',outds=work.mm_createstp'; put ',mDebug=0'; put ',server=SASApp'; put ',stptype=1'; put ',minify=NO'; put ',frefin=mm_in'; put ',frefout=mm_out'; put ',LogicalServerType=Sps'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_CreateSTP.sas;'; put '%&mD.put _local_;'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(stpname filename directory tree)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: stpname filename directory tree)'; put ')'; put '%mp_dropmembers(%scan(&outds,2,.))'; put '/* check LogicalServerType validity */'; put '%mp_abort('; put 'iftrue=('; put '&LogicalServerType ne Sps'; put 'and &LogicalServerType ne Wks'; put 'and &LogicalServerType ne Any'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid value for LogicalServerType (&LogicalServerType))'; put ')'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''foldertype'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%if &foldertype ne Tree %then %do;'; put '%put %str(WARN)ING: Tree &tree does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Check STP does not exist already'; put '*/'; put '%local cmtype;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&stpname",''StoredProcess'',type,uri);'; put 'call symputx(''cmtype'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &cmtype = ClassifierMap %then %do;'; put '%put %str(WARN)ING: Stored Process &stpname already exists in &tree!;'; put '%return;'; put '%end;'; put '/**'; put '* Check that the physical file exists'; put '*/'; put '%if %sysfunc(fileexist(&directory/&filename)) ne 1 %then %do;'; put '%put %str(WARN)ING: FILE *&directory/&filename* NOT FOUND!;'; put '%return;'; put '%end;'; put '%if &stptype=1 %then %do;'; put '/* type 1 STP - where code is stored on filesystem */'; put '%if %sysevalf(&sysver lt 9.2) %then %do;'; put '%put %str(WARN)ING: Version 9.2 or later required;'; put '%return;'; put '%end;'; put '/* check directory object (where 9.2 source code reference is stored) */'; put 'data _null_;'; put 'length id $20 dirtype $256;'; put 'rc=metadata_resolve("&directory",dirtype,id);'; put 'call symputx(''checkdirtype'',dirtype,''l'');'; put 'run;'; put '%if &checkdirtype ne Directory %then %do;'; put '%mm_getdirectories(path=&directory,outds=&outds ,mDebug=&mDebug)'; put '%if %mf_nobs(&outds)=0 or %sysfunc(exist(&outds))=0 %then %do;'; put '%put %str(WARN)ING: The directory object does not exist for &directory;'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data &outds;'; put 'directoryuri="&directory";'; put 'run;'; put '%end;'; put 'data &outds (keep=stpuri prompturi fileuri texturi);'; put 'length stpuri prompturi fileuri texturi serveruri $256 ;'; put 'if _n_=1 then call missing (of _all_);'; put 'set &outds;'; put '/* final checks on uris */'; put 'length id $20 type $256;'; put '__rc=metadata_resolve("&treeuri",type,id);'; put 'if type ne ''Tree'' then do;'; put 'putlog "%str(WARN)ING: Invalid tree URI: &treeuri";'; put 'stopme=1;'; put 'end;'; put '__rc=metadata_resolve(directoryuri,type,id);'; put 'if type ne ''Directory'' then do;'; put 'putlog "%str(WARN)ING: Invalid directory URI: " directoryuri;'; put 'stopme=1;'; put 'end;'; put '/* get server info */'; put '__rc=metadata_resolve("&server",type,serveruri);'; put 'if type ne ''LogicalServer'' then do;'; put '__rc=metadata_getnobj("omsobj:LogicalServer?@Name=''&server''",1,serveruri);'; put 'if serveruri='''' then do;'; put 'putlog "%str(WARN)ING: Invalid server: &server";'; put 'stopme=1;'; put 'end;'; put 'end;'; put 'if stopme=1 then do;'; put 'putlog (_all_)(=);'; put 'stop;'; put 'end;'; put '/* create empty prompt */'; put 'rc1=METADATA_NEWOBJ(''PromptGroup'',prompturi,''Parameters'');'; put 'rc2=METADATA_SETATTR(prompturi, ''UsageVersion'', ''1000000'');'; put 'rc3=METADATA_SETATTR(prompturi, ''GroupType'',''2'');'; put 'rc4=METADATA_SETATTR(prompturi, ''Name'',''Parameters'');'; put 'rc5=METADATA_SETATTR(prompturi, ''PublicType'',''Embedded:PromptGroup'');'; put 'GroupInfo='; put '"";'; put 'rc6 = METADATA_SETATTR(prompturi, ''GroupInfo'',groupinfo);'; put 'if sum(of rc1-rc6) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating prompt.";'; put 'if prompturi ne . then do;'; put 'putlog '' Removing orphan: '' prompturi;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'put rc=;'; put 'end;'; put 'stop;'; put 'end;'; put '/* create a file uri */'; put 'rc7=METADATA_NEWOBJ(''File'',fileuri,''SP Source File'');'; put 'rc8=METADATA_SETATTR(fileuri, ''FileName'',"&filename");'; put 'rc9=METADATA_SETATTR(fileuri, ''IsARelativeName'',''1'');'; put 'rc10=METADATA_SETASSN(fileuri, ''Directories'',''MODIFY'',directoryuri);'; put 'if sum(of rc7-rc10) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating file.";'; put 'if fileuri ne . then do;'; put 'putlog '' Removing orphans:'' prompturi fileuri;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'put (_all_)(=);'; put 'end;'; put 'stop;'; put 'end;'; put '/* create a TextStore object */'; put 'rc11= METADATA_NEWOBJ(''TextStore'',texturi,''Stored Process'');'; put 'rc12= METADATA_SETATTR(texturi, ''TextRole'',''StoredProcessConfiguration'');'; put 'rc13= METADATA_SETATTR(texturi, ''TextType'',''XML'');'; put 'storedtext='''''; put '!!""'; put '!!"";'; put 'rc14= METADATA_SETATTR(texturi, ''StoredText'',storedtext);'; put 'if sum(of rc11-rc14) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating TextStore.";'; put 'if texturi ne . then do;'; put 'putlog '' Removing orphans: '' prompturi fileuri texturi;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'rc = METADATA_DELOBJ(texturi);'; put 'put (_all_)(=);'; put 'end;'; put 'stop;'; put 'end;'; put '/* create meta obj */'; put 'rc15= METADATA_NEWOBJ(''ClassifierMap'',stpuri,"&stpname");'; put 'rc16= METADATA_SETASSN(stpuri, ''Trees'',''MODIFY'',treeuri);'; put 'rc17= METADATA_SETASSN(stpuri, ''ComputeLocations'',''MODIFY'',serveruri);'; put 'rc18= METADATA_SETASSN(stpuri, ''SourceCode'',''MODIFY'',fileuri);'; put 'rc19= METADATA_SETASSN(stpuri, ''Prompts'',''MODIFY'',prompturi);'; put 'rc20= METADATA_SETASSN(stpuri, ''Notes'',''MODIFY'',texturi);'; put 'rc21= METADATA_SETATTR(stpuri, ''PublicType'', ''StoredProcess'');'; put 'rc22= METADATA_SETATTR(stpuri, ''TransformRole'', ''StoredProcess'');'; put 'rc23= METADATA_SETATTR(stpuri, ''UsageVersion'', ''1000000'');'; put 'rc24= METADATA_SETATTR(stpuri, ''Desc'', "&stpdesc");'; put '/* tidy up if err */'; put 'if sum(of rc15-rc24) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating STP.";'; put 'if stpuri ne . then do;'; put 'putlog '' Removing orphans: '' prompturi fileuri texturi stpuri;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'rc = METADATA_DELOBJ(texturi);'; put 'rc = METADATA_DELOBJ(stpuri);'; put 'put (_all_)(=);'; put 'end;'; put 'end;'; put 'else do;'; put 'fullpath=cats(''_program='',treepath,"/&stpname");'; put 'putlog "NOTE: Stored Process Created!";'; put 'putlog "NOTE- "; putlog "NOTE-"; putlog "NOTE-" fullpath;'; put 'putlog "NOTE- "; putlog "NOTE-";'; put 'end;'; put 'output;'; put 'stop;'; put 'run;'; put '%end;'; put '%else %if &stptype=2 %then %do;'; put '/* type 2 stp - code is stored in metadata */'; put '%if %sysevalf(&sysver lt 9.3) %then %do;'; put '%put %str(WARN)ING: SAS version 9.3 or later required to create type2 STPs;'; put '%return;'; put '%end;'; put '/* check we have the correct ServerContext */'; put '%mm_getservercontexts(outds=contexts)'; put '%local serveruri; %let serveruri=NOTFOUND;'; put 'data _null_;'; put 'set contexts;'; put 'where upcase(servername)="%upcase(&server)";'; put 'call symputx(''serveruri'',serveruri);'; put 'run;'; put '%if &serveruri=NOTFOUND %then %do;'; put '%put %str(WARN)ING: ServerContext *&server* not found!;'; put '%return;'; put '%end;'; put '/**'; put '* First, create a Hello World type 2 stored process'; put '*/'; put 'filename &frefin temp;'; put 'data _null_;'; put 'file &frefin;'; put 'treeuri=quote(symget(''treeuri''));'; put 'serveruri=quote(symget(''serveruri''));'; put 'stpdesc=quote(symget(''stpdesc''));'; put 'stpname=quote(symget(''stpname''));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put '" "/'; put '" "/'; put '" "/'; put '" "/'; put ''' ''/'; put ''' '' /'; put '" "/'; put '" "/'; put ''' ''/'; put '" "/'; put '""/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'filename &frefout temp;'; put 'proc metadata in= &frefin out=&frefout ;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '/**'; put '* Next, add the source code'; put '*/'; put '%mm_updatestpsourcecode(stp=&tree/&stpname'; put ',stpcode="&directory/&filename"'; put ',mdebug=&mdebug'; put ',minify=&minify)'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: STPTYPE=*&stptype* not recognised!;'; put '%end;'; put '%mend mm_createstp;'; put '%macro mf_mkdir(dir'; put ')/*/STORE SOURCE*/;'; put '%local lastchar child parent;'; put '%let lastchar = %substr(&dir, %length(&dir));'; put '%if (%bquote(&lastchar) eq %str(:)) %then %do;'; put '/* Cannot create drive mappings */'; put '%return;'; put '%end;'; put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;'; put '/* last char is a slash */'; put '%if (%length(&dir) eq 1) %then %do;'; put '/* one single slash - root location is assumed to exist */'; put '%return;'; put '%end;'; put '%else %do;'; put '/* strip last slash */'; put '%let dir = %substr(&dir, 1, %length(&dir)-1);'; put '%end;'; put '%end;'; put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;'; put '/* directory does not exist so prepare to create */'; put '/* first get the childmost directory */'; put '%let child = %scan(&dir, -1, %str(/\:));'; put '/*'; put 'If child name = path name then there are no parents to create. Else'; put 'they must be recursively scanned.'; put '*/'; put '%if (%length(&dir) gt %length(&child)) %then %do;'; put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));'; put '%mf_mkdir(&parent)'; put '%end;'; put '/*'; put 'Now create the directory. Complain loudly of any errs.'; put '*/'; put '%let dname = %sysfunc(dcreate(&child, &parent));'; put '%if (%bquote(&dname) eq ) %then %do;'; put '%put %str(ERR)OR: could not create &parent + &child;'; put '%abort cancel;'; put '%end;'; put '%else %do;'; put '%put Directory created: &dir;'; put '%end;'; put '%end;'; put '/* exit quietly if directory did exist.*/'; put '%mend mf_mkdir;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Create a demo (base engine) library'; put '@details'; put 'Creates the library'; put '@warning This STP self destructs! It will delete itself after a successful run'; put 'to avoid being executed twice (and overwriting actual data)'; put '

SAS Macros

'; put '@li mm_createlibrary.sas'; put '@li mm_createdocument.sas'; put '@li mm_deletedocument.sas'; put '@li mp_abort.sas'; put '@li dc_assignlib.sas'; put '@li mm_deletestp.sas'; put '@li mm_createstp.sas'; put '@li mf_mkdir.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%global dcpath;'; put '%let dclib=%upcase(DC%substr(%sysevalf(%sysfunc(datetime())/60),3,6));'; put '%let dclibname=Data Controller(&dclib);'; put '%let work=%sysfunc(pathname(work));'; put '%let dcpath=&dcpath/&dclib;'; put '%mf_mkdir(&dcpath)'; put '%mf_mkdir(&work)'; put '%put &=dcpath;'; put '/* check we have physical permissions to the DCLIB folder */'; put 'data _null_;'; put 'file "&dcpath/permTest.txt";'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(User &sysuserid does not have WRITE permissions on physical'; put 'directory: &dcpath )'; put ')'; put 'filename delfile "&dcpath/permTest.txt";'; put 'data _null_;'; put 'rc=fdelete(''delfile'');'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(User &sysuserid could create (but not delete) &dcpath/permTest.txt )'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Unable to write to &dcpath)'; put ')'; put 'data _null_;'; put 'pgm="&_program";'; put 'rootlen=length(trim(pgm))-length("/services/admin/makelib");'; put 'root=substr(pgm,1,rootlen);'; put 'putlog root=;'; put 'call symputx(''deploy_dir'',root);'; put 'run;'; put 'options noquotelenmax ps=max;'; put '/* check we have the admin rights to update the items in the Admin folder */'; put '%mm_createdocument(tree=&deploy_dir/services/admin,name=permTest)'; put '%mm_deletedocument(target=&deploy_dir/services/admin/permTest)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(User &_metaperson does not have WriteMetadata on SAS folder:'; put '&deploy_dir )'; put ')'; put '/**'; put '* Create library and load data'; put '*/'; put '%let mpelibname=Data Controller (&dclib);'; put '%mm_createlibrary('; put 'libname=&mpelibname'; put ',libref=&dclib'; put ',libdesc=Configuration tables for the MacroPeople Data Controller application'; put ',engine=BASE'; put ',tree=&deploy_dir/data'; put ',servercontext=SASApp'; put ',directory=&dcpath'; put ',mDebug=1)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Unable to create &dclib library)'; put ')'; put '/* get direct libref */'; put '%dc_assignlib(READ,&dclib)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Unable to assign &dclib library)'; put ')'; put '/* create an initial settings service (this will be overwritten in the'; put 'data update step)'; put '*/'; put '%let temploc=&work/temp.txt;'; put 'data _null_;'; put 'file "&temploc" ;'; put 'put ''/* Data Controller Precode */'' / / ;'; put 'put '' '';'; put 'put ''options noquotelenmax ps=max;'';'; put 'put ''%global DC_LIBREF DC_LIBNAME;'';'; put 'put '' '';'; put 'put ''/* This metadata library (libref) contains control datasets for DC */'';'; put 'put ''/* If a different libref must be used, configure it below */'';'; put 'put ''%let DC_LIBREF='' "&dclib;";'; put 'put ''%let DC_LIBNAME='' "&mpelibname;";'; put 'put '' '';'; put 'put ''/* get physical path for direct libname - needed to track requests */'';'; put 'put ''data _null_;'';'; put 'put '' length lib_uri up_uri path $256;'';'; put 'put '' call missing (of _all_);'';'; put 'put '' rc=metadata_getnobj("omsobj:SASLibrary?@Libref=''''&dc_libref''''",1,lib_uri);'';'; put 'put '' rc=metadata_getnasn(lib_uri,"UsingPackages",1,up_uri);'';'; put 'put '' rc=metadata_getattr(up_uri,"DirectoryName",path);'';'; put 'put '' call symputx("dc_libloc",path);'';'; put 'put ''run;'';'; put 'put ''libname &DC_LIBREF "&dc_libloc";'';'; put 'put '' '';'; put 'run;'; put '%mm_deletestp(target=&deploy_dir/services/public/Data_Controller_Settings)'; put '%mm_createstp(stpname=Data_Controller_Settings'; put ',filename=temp.txt'; put ',directory=&work'; put ',tree=&deploy_dir/services/public'; put ',Server=SASApp'; put ',stptype=2'; put ',mdebug=1'; put ',stpdesc=Data Controller Configuration'; put ',minify=NO)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Issue creating settings stp)'; put ')'; put 'data _null_;'; put 'file _webout;'; put 'put "

Library &dclib successfully assigned

";'; put 'run;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=refreshcatalog; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '/** @cond */'; put '%macro mf_existvar(libds /* 2 part dataset name */'; put ', var /* variable name */'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid=0 %then %do;'; put '%put %sysfunc(sysmsg());'; put '0'; put '%end;'; put '%else %if %length(&var)=0 %then %do;'; put '0'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%sysfunc(varnum(&dsid,&var))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_existvar;'; put '/** @endcond */'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro bitemporal_closeouts('; put 'tech_from=tx_from_dttm'; put ',tech_to = tx_to_dttm /* Technical TO datetime variable.'; put 'Req''d on BASE table only. */'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE /* Name of STAGING table. */'; put ',PK= name sex /* Business key, space separated. */'; put '/* Should INCLUDE BUS_FROM field if relevant. */'; put ',NOW=DEFINE'; put ',FILTER= /* supply a filter to limit the update */'; put ',outdest= /* supply an unquoted filepath/filename.ext to get'; put 'a text file containing the update statements */'; put ',loadtype='; put ',loadtarget=YES /* if <> YES will return without changing anything */'; put ');'; put '%put ENTERING &sysmacroname;'; put '%local x var start;'; put '%let start=%sysfunc(datetime());'; put '%dc_assignlib(WRITE,&base_lib)'; put '%dc_assignlib(WRITE,&append_lib)'; put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;'; put '%put &=now;'; put '/**'; put '* perform basic checks'; put '*/'; put '/* do tables exist? */'; put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;'; put '%mp_abort(msg=&base_lib..&base_dsn does not exist)'; put '%end;'; put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;'; put '%mp_abort(msg=&append_lib..&append_dsn does not exist)'; put '%end;'; put '/* do TX columns exist? */'; put '%if &loadtype ne UPDATE %then %do;'; put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;'; put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;'; put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%end;'; put '/* do PK columns exist? */'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)'; put '%end;'; put '%end;'; put '/* check uniqueness */'; put 'proc sort data=&append_lib..&append_dsn'; put 'out=___closeout1 noduprecs dupout=___closeout1a;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then'; put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);'; put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */'; put '%local gap;'; put '%let gap=0;'; put 'data _null_;'; put 'now=&now;'; put 'gap=intck(''HOURS'',now,datetime());'; put 'call symputx(''gap'',gap,''l'');'; put 'run;'; put '%mf_abort('; put 'iftrue=(&gap > 24),'; put 'msg=NOW variable (&now) is not within a 24hr tolerance'; put ')'; put '/* have any warnings / errs occurred thus far? If so, abort */'; put '%mf_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/**'; put '* Create closeout statements. These are sent as individual SQL statements'; put '* to ensure pass-through utilisation. The update_cnt variable monitors'; put '* how many records were actually updated on the target table.'; put '*/'; put '%local update_cnt;'; put '%let update_cnt=0;'; put 'filename tmp temp;'; put 'data _null_;'; put 'set ___closeout1;'; put 'file tmp;'; put 'if _n_=1 then put ''proc sql noprint;'' ;'; put 'length string $32767.;'; put '%if &loadtype=UPDATE %then %do;'; put 'put "delete from &base_lib..&base_dsn where 1";'; put '%end;'; put '%else %do;'; put 'now=symget(''now'');'; put 'put "update &base_lib..&base_dsn set &tech_to= " now @;'; put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;'; put 'put " ,PROCESSED_DTTM=" now @;'; put '%end;'; put 'put " where " now " lt &tech_to ";'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;'; put '/* use single quotes to avoid ampersand resolution in data */'; put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";'; put '%end;'; put '%else %do;'; put 'string=cats(" & &var=",&var);'; put '%end;'; put 'put string;'; put '%end;'; put 'put "&filter ;";'; put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';'; put 'run;'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%if &loadtarget ne YES %then %return;'; put '/* ensure we have a lock */'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn'; put ',ref=bitemporal_closeouts'; put ',ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'options source2;'; put '%inc tmp;'; put 'filename tmp clear;'; put '/**'; put '* Update audit tracker'; put '*/'; put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);'; put '%local user; %let user=%mf_getuser();'; put 'proc sql;'; put 'insert into &mpelib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"'; put ',LOADTYPE="CLOSEOUT"'; put ',DELETED_RECORDS=&update_cnt'; put ',NEW_RECORDS=0'; put ',DURATION=%sysfunc(datetime())-&start'; put ',USER_NM="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%mend bitemporal_closeouts;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=''Schema/Owner'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '/** @cond */'; put '%macro mp_storediffs(libds'; put ',origds'; put ',key'; put ',delds=0'; put ',appds=0'; put ',modds=0'; put ',outds=work.mp_storediffs'; put ',loadref=0'; put ',processed_dttm=0'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));'; put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));'; put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));'; put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));'; put '%let dslist=&origds;'; put '%if &delds ne 0 %then %do;'; put '%let delds=%upcase(&delds);'; put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;'; put '%let dslist=&dslist &delds;'; put '%end;'; put '%if &appds ne 0 %then %do;'; put '%let appds=%upcase(&appds);'; put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;'; put '%let dslist=&dslist &appds;'; put '%end;'; put '%if &modds ne 0 %then %do;'; put '%let modds=%upcase(&modds);'; put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;'; put '%let dslist=&dslist &modds;'; put '%end;'; put '%let origds=%upcase(&origds);'; put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;'; put '%let key=%upcase(&key);'; put '/* hash the key and append all the tables (marking the source) */'; put 'data &ds1;'; put 'set &dslist indsname=&inds_auto;'; put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);'; put '&inds_keep=upcase(&inds_auto);'; put 'proc sort;'; put 'by &inds_keep &hashkey;'; put 'run;'; put '/* transpose numeric & char vars */'; put 'proc transpose data=&ds1'; put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));'; put 'by &inds_keep &hashkey;'; put 'var _numeric_;'; put 'run;'; put 'proc transpose data=&ds1'; put 'out=&ds3('; put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)'; put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))'; put ');'; put 'by &inds_keep &hashkey;'; put 'var _character_;'; put 'run;'; put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;'; put '/* this is a format catalog - cannot query cols directly */'; put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"'; put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"'; put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";'; put '%end;'; put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);'; put 'data &ds4;'; put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;'; put 'if _n_=1 then call missing(_label_);'; put 'drop _label_;'; put 'set &ds2 &ds3 indsname=&inds_auto;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%upcase(&vlist));'; put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';'; put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;'; put 'call symputx(''syscc'',98);'; put 'end;'; put 'if &inds_keep="&appds" then move_type=''A'';'; put 'else if &inds_keep="&delds" then move_type=''D'';'; put 'else if &inds_keep="&modds" then move_type=''M'';'; put 'else if &inds_keep="&origds" then move_type=''O'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;'; put 'call symputx(''syscc'',99);'; put 'end;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;'; put 'else is_pk=0;'; put 'drop &inds_keep;'; put 'run;'; put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());'; put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);'; put '%let libds=%upcase(&libds);'; put '/* join orig vals for modified & deleted */'; put 'proc sql;'; put 'create table &outds as'; put 'select "&loadref" as load_ref length=36'; put ',&processed_dttm as processed_dttm format=E8601DT26.6'; put ',"%scan(&libds,1,.)" as libref length=8'; put ',"%scan(&libds,2,.)" as dsn length=32'; put ',b.key_hash length=32'; put ',b.move_type length=1'; put ',b.tgtvar_nm length=32'; put ',b.is_pk'; put ',case when b.move_type ne ''M'' then -1'; put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0'; put 'else 1'; put 'end as is_diff'; put ',b.tgtvar_type length=1'; put ',case when b.move_type=''D'' then b.newval_num'; put 'else a.newval_num'; put 'end as oldval_num format=best32.'; put ',case when b.move_type=''D'' then .'; put 'else b.newval_num'; put 'end as newval_num format=best32.'; put ',case when b.move_type=''D'' then b.newval_char'; put 'else a.newval_char'; put 'end as oldval_char length=32765'; put ',case when b.move_type=''D'' then '''''; put 'else b.newval_char'; put 'end as newval_char length=32765'; put 'from &ds4(where=(move_type=''O'')) as a'; put 'right join &ds4(where=(move_type ne ''O'')) as b'; put 'on a.tgtvar_nm=b.tgtvar_nm'; put 'and a.key_hash=b.key_hash'; put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4;'; put '%end;'; put '%mend mp_storediffs;'; put '/** @endcond */'; put '%macro bitemporal_dataloader('; put 'bus_from= /* Business FROM datetime variable. Req''d on'; put 'STAGING & BASE tables.*/'; put ',bus_to = /* Business TO datetime variable. Req''d on'; put 'STAGING & BASE tables. */'; put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/'; put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */'; put ',tech_from= /* Technical FROM datetime variable. Req''d on'; put 'BASE table only. */'; put ',tech_to = /* Technical TO datetime variable. Req''d on BASE'; put 'table only. */'; put ',processed= 0'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE'; put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */'; put ',PK= name sex'; put ',RK_UNDERLYING='; put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */'; put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular'; put 'SCD2 loader then set this switch to YES to'; put 'ensure the MAXKEYTABLE is updated with the'; put 'current maximum RK value for the target table'; put '*/'; put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is'; put 'unique on its business key */'; put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in'; put '&dclib..DATALOADS */'; put ',LOADTYPE=BITEMPORAL'; put ',RK_MAXKEYTABLE= mpe_maxkeyvalues'; put ',LOG=1 /* Switch to 0 to prevent records being added to'; put '&mpelib..mpe_DATALOADS (ie when testing)*/'; put ',DELETE_COL= _____DELETE__THIS__RECORD_____'; put '/* If this variable is found in the append dataset'; put 'then records are closed out (or deleted) in the'; put 'append table where that variable= "Yes" */'; put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off'; put 'target table load and generate temp tables only */'; put ',CLOSE_VARS='; put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is'; put 'no facility to close out removed records (all records are'; put 'assumed new or changed). But how does one determine which'; put 'records are removed? Short of loading the entire table'; put 'each time? This parameter allows a set of variables'; put '(this should be a subset of the PK) to be declared, and'; put 'the macro will determine which records in the base table'; put 'need to be closed out ahead of the load.'; put 'For instance, given the following:'; put 'Base Table Staging Table'; put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT'; put 'JAN ACME4 66 JAN ACME4 66'; put 'FEB ACME4 99 FEB ACME4 99'; put 'FEB ACME1 22'; put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,'; put 'the "FEB PAG 22" record would get closed out.'; put '*/'; put ',config_table=&dclib..MPE_CONFIG'; put ',dclib=&dc_libref'; put ',outds_del=work.outds_del'; put ',outds_add=work.outds_add'; put ',outds_mod=work.outds_mod'; put ',outds_audit=0'; put ');'; put '/* when changing this macro, update the version num here */'; put '%local ver;'; put '%let ver=32;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */'; put '/* return straight away if nothing to load */'; put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);'; put '%if &nobs=-1 %then %do;'; put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;'; put '%end;'; put '%if &nobs=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/* hard exit if err condition exists */'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)'; put ')'; put '%local engine_type;'; put '%let engine_type=%mf_getengine(&base_lib);'; put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0'; put '%then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/**'; put '* The metadata functions (eg mf_existvar) will fail if the base table has a'; put '* SAS lock. So, make a snapshot of the base table for further use.'; put '* Also, make output tables (regardless).'; put '*/'; put '%local basecopy;'; put '%let basecopy=%mf_getuniquename(prefix=basecopy);'; put 'data &basecopy &outds_mod &outds_add &outds_del;'; put 'set &base_lib..&base_dsn;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)'; put ')'; put '%local cols idx_pk md5_col ;'; put '%let md5_col=___TMP___md5;'; put '%let check_uniqueness=%upcase(&check_uniqueness);'; put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);'; put '%let high_date=%unquote(&high_date);'; put '%let loadtype=%upcase(&loadtype);'; put '/* ensure irrelevant variables are cleared */'; put '%if &loadtype=BUSTEMPORAL %then %do;'; put '%let tech_from=;'; put '%let tech_to=;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put '%let bus_from=;'; put '%let bus_to=;'; put '%end;'; put '/* ensure relevant variables are supplied */'; put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing BUS_FROM / BUS_TO)'; put ')'; put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing TECH_FROM / TECH_TO)'; put ')'; put '/**'; put '* drop any tables (may be defined as views or vice versa preventing overwrite)'; put '*/'; put '%mp_dropmembers(append bitemp0_append bitemp_cols)'; put '/* SQL Server requires its own time values */'; put '/* 9.2 will only give picture format down to seconds. 9.3 allows'; put 'milliseconds by using lower S and defining the decimal in the format name..*/'; put 'PROC FORMAT;'; put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put '%local dbnow;'; put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'data _null_;'; put '/* convert space separated macvar to comma separated for SQL processing */'; put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');'; put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');'; put 'now=&dbnow;'; put 'call symputx(''NOW'',now,''L'');'; put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');'; put 'length etlsource $100;'; put 'etlsource=subpad(symget(''etlsource''),1,100);'; put 'call symputx(''etlsource'',etlsource,''l'');'; put 'run;'; put '/**'; put '* Even if no PROCESSED var provided, assume that any variable named'; put '* PROCESSED_DTTM should be updated'; put '*/'; put '%if &processed=0 %then %do;'; put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)'; put '%then %let processed=PROCESSED_DTTM;'; put '%else %let processed=;'; put '%end;'; put '/* extract colnames for md5 creation / change tracking */'; put 'proc contents noprint data=&base_lib..&base_dsn'; put 'out=work.bitemp_cols (keep=name type length varnum format:);'; put 'run;'; put 'proc sql noprint;'; put 'select name into: cols separated by '','''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put 'else cats(''put(md5(trim(put(ifn(missing('''; put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end'; put 'into: stripcols separated by ''||'''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put '/* set default formats*/'; put '%let bus_from_fmt = datetime19.;'; put '%let bus_to_fmt = datetime19.;'; put '%let processed_fmt = datetime19.;'; put '%let tech_from_fmt = format=datetime19.;'; put '%let tech_to_fmt = format=datetime19.;'; put '%put &=stripcols;'; put '%put &=pk;'; put 'data _null_;'; put 'set work.bitemp_cols;'; put 'if type=2 or type=6 then do;'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'if format='''' then fmt=cats(length,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put 'if upcase(name)="%upcase(&bus_from)" then'; put 'call symputx(''bus_from_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&bus_to)" then'; put 'call symputx(''bus_to_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_from)" then'; put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_to)" then'; put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&processed)" then'; put 'call symputx(''processed_fmt'',fmt,''L'');'; put 'run;'; put '%if %index(%quote(&cols),___TMP___) %then %do;'; put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim('; put ') This may conflict with temp variable generation!!);'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);'; put '%let syscc=5;'; put '%return;'; put '%end;'; put '/* if transaction dates appear on the APPEND table, need to remove them */'; put '%local drop_tx_dates /* used in append table */'; put 'drop_tx_dates_noobs /* used to take the base table structure */;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)'; put '%then %let drop_tx_dates=&tech_from;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)'; put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;'; put '%if %length(%trim(&drop_tx_dates))>0'; put '%then %let drop_tx_dates=(drop=&drop_tx_dates);'; put '%if %mf_existvar(&basecopy, &tech_from)'; put '%then %let drop_tx_dates_noobs=&tech_from;'; put '%if %mf_existvar(&basecopy, &tech_to)'; put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;'; put '%if %length(%trim(&drop_tx_dates_noobs))>0'; put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);'; put '%else %let drop_tx_dates_noobs=(obs=0);'; put '/**'; put '* Lock the table. This is necessary as we are doing a two part update (first'; put '* closing records then appending new records). It is theoretically possible'; put '* that an upload may occur whilst preparing the staging tables. And the'; put '* staging tables are about to be prepared..'; put '*/'; put '%if &LOADTARGET = YES %then %do;'; put '%put locking &base_lib..&base_dsn;'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%put locking &outds_audit;'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put '/* not an actual load, so avoid updating the max key table in next step. */'; put '%let rk_update_maxkeytable=NO;'; put '%end;'; put '%if %length(&RK_UNDERLYING)>0 %then %do;'; put '%mp_retainedkey('; put 'base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=&append_lib'; put ',append_dsn=&append_dsn'; put ',retained_key=&pk'; put ',business_key=&rk_underlying'; put ',check_uniqueness=&CHECK_UNIQUENESS'; put ',outds=work.append'; put '%if &rk_update_maxkeytable=NO %then %do;'; put ',maxkeytable=0'; put '%end;'; put '%else %do;'; put ',maxkeytable=&dclib..&RK_MAXKEYTABLE'; put '%end;'; put ',locktable=&dclib..mpe_lockanytable'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',filter_str=%str( (where=( &now < &tech_to)) )'; put '%end;'; put ')'; put '%end;'; put '%else %do;'; put 'proc sql;'; put 'create view work.append as select * from &append_lib..&append_dsn;'; put '%end;'; put '/**'; put '* generate md5 for append table'; put '*/'; put '/* it is possible the source dataset has additional (unwanted) columns.'; put 'Drop if specified; */'; put '%if %length(&keepvars)>0 %then %do;'; put '/* remove tech dates from keepvars as they are generated later */'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));'; put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);'; put '%end;'; put '/* CAS varchar types cause append issues here, so perform autoconvert'; put 'by creating empty local table first */'; put 'data;'; put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;'; put 'run;'; put '%local emptybasetable; %let emptybasetable=&syslast;'; put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put '/* apply formats for bitemporal vars but not tx dates which are added later */'; put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;'; put 'format &bus_from &bus_from_fmt;'; put 'format &bus_to &bus_to_fmt;'; put '%end;'; put 'set &emptybasetable /* base table reqd in case append has fewer cols */'; put 'work.append &drop_tx_dates;'; put '%if %length(%str(&bus_from_override))>0 %then %do;'; put '&bus_from= %unquote(&bus_from_override) ;'; put '%end;'; put '%if %length(%str(&bus_to_override))>0 %then %do;'; put '&bus_to= %unquote(&bus_to_override) ;'; put '%end;'; put 'length &md5_col $32;'; put '&md5_col=put(md5(&stripcols),hex32.);'; put '%if %length(&processed)>0 %then %do;'; put 'format &processed &processed_fmt;'; put '&processed=&now;'; put '%end;'; put '/**'; put '* If a delete column exists then create the delete dataset'; put '*/'; put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;'; put 'drop &delete_col;'; put 'if upcase(&delete_col) = "YES" then output &outds_del ;'; put 'else output work.bitemp0_append ;'; put 'run;'; put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=%scan(&outds_del,-1,.)'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put 'output work.bitemp0_append;'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc gt 0 at line 494)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if %length(&close_vars)>0 %then %do;'; put '/**'; put '* need to close out records that are not provided'; put '*/'; put 'proc sql;'; put 'create table bitemp1_closevars1 as'; put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)'; put 'from &base_lib..&base_dsn a'; put 'inner join work.bitemp0_append b'; put 'on 1=1'; put '/* join on closevars key */'; put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));'; put '%let idx_val=%scan(&close_vars,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* filter base on tech dates if necessary */'; put '%if &loadtype=TXTEMPORAL %then %do;'; put 'where a.&tech_from <=&now and &now < a.&tech_to'; put '%end;'; put ';'; put 'create table bitemp1_closevars2 as'; put 'select distinct a.*'; put 'from bitemp1_closevars1 a'; put 'left join work.bitemp0_append b'; put 'on 1=1'; put '/* join on primary key */'; put '%do idx_pk=1 %to %sysfunc(countw(&pk));'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* identify removed records by null value in a field in PK but not close_vars'; put '*/'; put 'where b.%scan('; put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )'; put ') IS NULL'; put ';'; put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=bitemp1_closevars2'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '/* grab schema */'; put '%let baselib_schema=%mf_getschema(&base_lib);'; put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;'; put '/* grab redshift config */'; put '%local redcnt; %let redcnt=0;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'data _null_;'; put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));'; put 'x+1;'; put 'call symputx(cats(''rednm'',x),var_value,''l'');'; put 'call symputx(cats(''redval'',x),var_value,''l'');'; put 'call symputx(''redcnt'',x,''l'');'; put 'run;'; put '%end;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from &baselib_schema.&base_dsn'; put 'where timestamp &sqlnow < &tech_to );'; put '%else %let base_table=&baselib_schema.&base_dsn;'; put '/* make empty table first - must clone & drop extra cols as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &temp_table alter sortkey none) by myAlias;'; put '%end;'; put '%local dropcols;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(&pk)'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;'; put '%end;'; put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp0/view=work.vw_bitemp0;'; put 'set work.bitemp0_append(keep=&pk &md5_col);'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&temp_table'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=work.vw_bitemp0 force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);'; put 'data &temp_table;'; put 'set work.bitemp0_append;'; put 'run;'; put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);'; put 'proc fedsql sessref=dcsession;'; put 'create table &bitemp0base{options replace=true} as'; put '%end;'; put '%else %do;'; put '%let temp_table=work.bitemp0_append;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put 'proc sql;'; put 'create table work.bitemp0_base as'; put '%end;'; put 'select a.&md5_col /* this identifies NEW records */'; put ', b.*'; put '/* assume first PK field cannot be null (if defined in a PK constraint then'; put 'it definitely cannot be null) */'; put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG'; put 'from &baselib_schema.&temp_table a'; put 'left join &base_table b'; put 'on 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put '); proc sql; drop table &base_lib.."&temp_table"n;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put ';'; put 'quit;'; put 'data work.bitemp0_base;'; put 'set &bitemp0base;'; put 'run;'; put 'proc sql;'; put 'drop table &temp_table;'; put 'drop table &bitemp0base;'; put '%end;'; put '%else %do;'; put ';'; put '%end;'; put '/**'; put '* matching & changed records are those without NULL key values'; put '* &idx_val resolves to rightmost PK value (loop above)'; put '*/'; put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;'; put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)'; put ')'; put '%put hashcols2=&stripcols;'; put 'proc sql;'; put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as'; put 'select *'; put ', put(md5(&stripcols),$hex32.) as &md5_col'; put 'from work.bitemp0_base (drop=&md5_col)'; put 'where ___TMP___NEW_FLG=0;'; put '/**'; put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base'; put '*/'; put 'proc sql;'; put 'create table &outds_add'; put '(drop=&md5_col'; put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;'; put '&delete_col'; put '%end;'; put ')'; put 'as select a.*'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',&now as &tech_from &tech_from_fmt'; put ',&high_date as &tech_to &tech_to_fmt'; put '%end;'; put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */'; put ', work.bitemp0_base b /* BASE records (contains null values for new) */'; put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */'; put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */'; put '/**'; put '* identify INSERTS. These are records with the same business key but'; put '* the bus_from and bus_to value are higher / lower (respectively)'; put '* such that the existing record needs to be SPLIT to surround the new'; put '* record.'; put '* eg: OLD RECORD from=1 to=10'; put '* NEW RECORD from=5 to=7'; put '*'; put '* APPENDED RECORDS:'; put '* - from=1 to=5'; put '* - from=5 to=7'; put '* - from=7 to=10'; put '*/'; put '/* inserts cannot happen with TXTEMPORAL */'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* IDENTIFY */'; put 'create table work.bitemp3_inserts as'; put 'select b.*'; put ',a.&bus_from as ___TMP___from'; put ',a.&bus_to as ___TMP___to'; put 'from work.bitemp0_append a'; put ',work.bitemp1_current b'; put 'where a.&bus_from > b.&bus_from'; put 'and a.&bus_to < b.&bus_to'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields may'; put 'not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '/* SPLIT */'; put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;'; put 'set work.bitemp3_inserts;'; put 'by &pk &bus_from &bus_to &processed;'; put 'if first.&idx_val then do;'; put '___TMP___retain=&bus_to;'; put '&bus_to=___TMP___from;'; put 'output;'; put '&bus_to=___TMP___retain;'; put 'end;'; put 'if last.&idx_val then do;'; put '&bus_from=___TMP___to;'; put 'output;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* TX temporal load */'; put 'data work.bitemp3a_inserts;'; put 'set work.bitemp1_current;'; put 'stop;'; put 'run;'; put '%end;'; put '/* APPEND */'; put 'proc sql;'; put 'create view work.bitemp3a_view as'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put 'data bitemp3b_newbase;'; put 'set work.bitemp3a_inserts work.bitemp3a_view;'; put 'run;'; put '/** do not use! this converts short numerics into 8 bytes'; put 'proc sql;'; put 'create table work.bitemp3b_newbase as'; put 'select * from work.bitemp3a_inserts'; put 'union corr'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put '*/'; put '/**'; put '* identify CHANGED records from staging.'; put '* Same business key with different temporal dates or md5 value'; put '* This table must be overlayed onto / into existing business history'; put '*/'; put 'proc sql;'; put 'create table work.bitemp4_updated as select distinct a.*'; put 'from work.bitemp0_append a'; put ',work.bitemp3b_newbase b'; put 'where 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'and ( a.&md5_col ne b.&md5_col'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)'; put '%end;'; put ')'; put ';'; put '/**'; put '* This section would have been one simple step with union all'; put '* but that converts short numerics into 8 bytes!'; put '* so, convoluted alternative to retain the same functionality.'; put '*/'; put '/* base records */'; put 'create view work.bitemp4_prep1 as'; put 'select ''BASE'' as ___TMP___'; put ',b.*'; put 'from work.bitemp4_updated a'; put ',work.bitemp3b_newbase b'; put 'where 1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put ';'; put '/* updated records */'; put 'create view work.bitemp4_prep2 as'; put 'select ''STAG'' as ___TMP___ ,*'; put 'from work.bitemp4_updated;'; put '/* ensure we only keep columns that appear in both */'; put '%local bp1 bp2 bp3 bp4;'; put '%let bp1=%mf_getvarlist(bitemp4_prep1);'; put '%let bp2=%mf_getvarlist(bitemp4_prep2);'; put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);'; put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);'; put 'data work.bitemp4_prep3/view=bitemp4_prep3;'; put 'set bitemp4_prep1 bitemp4_prep2;'; put '%if %length(XX&bp3&bp4)>2 %then %do;'; put 'drop &bp3 &bp4 ;'; put '%end;'; put 'run;'; put '/* remove duplicates */'; put 'proc sql;'; put 'create table work.bitemp4a_allrecs as'; put 'select distinct *'; put 'from work.bitemp4_prep3'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields'; put 'may not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* this section aligns the business dates'; put '(eg for inserts or overlaps in the range) */'; put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );'; put 'set work.bitemp4a_allrecs;'; put 'by &pk &bus_from &bus_to &processed;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '___TMP___md5lag=lag(&md5_col);'; put '/* reset retained variables */'; put 'if first.&idx_val then do;'; put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/'; put 'if &md5_col=___TMP___md5lag then do;'; put '&bus_from=___TMP___from;'; put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;'; put 'end;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 1'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 1'' then do;'; put '/* else ensure bus_from starts from prior record bus_to */'; put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to'; put 'then &bus_from= ___TMP___to;'; put '/* new record may replace old record entirely */'; put 'if &bus_to <= &bus_from then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* keep staged records only */'; put 'data work.bitemp4b_firstpass;'; put 'set work.bitemp4a_allrecs;'; put 'if ___TMP___=''STAG'';'; put 'run;'; put '%end;'; put '/* next phase is to pass through in reverse - so set up the sort statement */'; put '%local byvar;'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let byvar=&byvar descending %scan(&pk,&idx_pk);'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL'; put '%then %let byvar=&byvar descending &bus_from descending &bus_to;'; put '/* if matching bus dates supplied, need to ensure we also have a sort'; put 'between BASE and STAGING tables */'; put '%let byvar=&byvar descending ___TMP___;'; put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;'; put 'by &byvar;'; put 'run;'; put '/**'; put '* Now (in reverse) pass back business start dates'; put '*/'; put 'data work.bitemp4d_secondpass;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '&tech_from=&now;'; put '&tech_to=&high_date;'; put '%end;'; put 'set work.bitemp4c_sort ;'; put 'by &byvar;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* put / _all_ /;*/'; put '___TMP___md5lag=lag(&md5_col);'; put 'if first.&idx_val then do;'; put '/* reset retained variables */'; put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry back bus_to */'; put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 2'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 2'' then do;'; put '/* else ensure bus_to stops at subsequent record bus_from */'; put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from'; put 'then &bus_to= ___TMP___from;'; put '/* new record may replace old record entirely */'; put 'if &bus_from >= &bus_to then delete;'; put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put '%end;'; put 'run;'; put '%put syscc (line600)=&syscc;'; put '/**'; put 'There may still be some records (eg old business history) which have not'; put 'changed.'; put 'Need to identify these and remove from the append so they are not updated'; put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the'; put 'business key) and any matching / identical records are split out (from those'; put 'that need to be updated).'; put '*/'; put '%if &loadtype=BITEMPORAL %then %do;'; put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);'; put 'data work.bitemp5a_lkp (keep=&md5_col)'; put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'set work.bitemp0_base;'; put '/* for BITEMPORAL we need to compare business dates also */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);'; put 'run;'; put 'data bitemp5b_updates;'; put 'set bitemp4d_secondpass;'; put 'if _n_=1 then do;'; put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');'; put 'md5_lkp.definekey("&md5_col");'; put 'md5_lkp.definedone();'; put 'end;'; put '/* drop old md5 col as will rebuild with new business dates */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;'; put 'if md5_lkp.check()=0 then delete;'; put 'run;'; put 'proc sql;'; put '/* get min bus from as will update (close out) all records from this point'; put '(for that PK)*/'; put 'create table work.bitemp5d_subquery as'; put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to'; put 'from work.bitemp5b_updates'; put 'group by &pk_comma;'; put '/* index has a huge efficiency impact on upcoming nested subquery */'; put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);'; put '%let lastds=work.bitemp5b_updates;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put 'proc sql;'; put 'create table work.bitemp5d_subquery as'; put 'select distinct &pk_comma'; put 'from bitemp4d_secondpass;'; put '%let lastds=work.bitemp4d_secondpass;'; put '%end;'; put '%else %let lastds=work.bitemp4d_secondpass;'; put '/* create single append table (an overlapped pre-sert may be classed as'; put 'both an update AND a new record). Also create temp views that may be'; put 'used for pre-load analysis. */'; put 'data &outds_mod;'; put 'set &lastds(drop=___TMP___: &md5_col);'; put 'run;'; put 'data bitemp6_allrecs / view=bitemp6_allrecs;'; put 'set &outds_mod /* UPDATED records */'; put '&outds_add /* NEW records */;'; put 'run;'; put 'proc sort data=work.bitemp6_allrecs'; put 'out=work.bitemp6_unique'; put 'noduprec'; put 'dupout=work.xx_BADBADBAD;'; put 'by _all_;'; put 'run;'; put '/* we have all our temp tables now so exit if this is all that is needed */'; put '%if &LOADTARGET ne YES %then %return;'; put '/* also exit if an err condition exists */'; put '%if &syscc>0 %then %do;'; put '%put syscc=&syscc;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)'; put ')'; put '/* final check - abort if a lock has appeared on the target or audit table */'; put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)'; put '%if %mf_existds(&outds_audit) %then %do;'; put '%mp_lockfilecheck(libds=&outds_audit)'; put '%end;'; put '/**'; put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!'; put '*/'; put '/**'; put '* First, CLOSE OUT changed records (if not a REPLACE)'; put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.'; put '* However - this can be worked around using a nested subquery..'; put '*/'; put 'data _null_;'; put 'putlog "&sysmacroname: CLOSEOUTS commencing";'; put 'run;'; put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: No closeouts needed";'; put 'run;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(&loadtype not yet supported in CAS engine)'; put ')'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds;'; put 'set work.bitemp5d_subquery;'; put 'run;'; put '/* delete the records */'; put 'proc cas ;'; put 'table.deleteRows / table={'; put 'caslib="&base_lib",'; put 'name="&base_dsn",'; put 'where="1=1",'; put 'whereTable={caslib=''CASUSER'',name="&delds"}'; put '};'; put 'quit;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&delds;'; put '%end;'; put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)'; put '%then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";'; put 'run;'; put '%local flexinow;'; put 'proc sql;'; put '/* if OLEDB then create a temp table for efficiency */'; put '%local innertable;'; put '%if &engine_type=OLEDB %then %do;'; put '%let innertable=[&temp_table];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp5d_subquery;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);'; put '%let top_table=&baselib_schema.&base_dsn;'; put '%let flexinow=timestamp &SQLNOW;'; put '/* make empty table first - must clone & drop extra cols'; put 'as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;'; put '%end;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;'; put 'set work.bitemp5d_subquery;'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&innertable ('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put 'data=work.vw_bitemp5d force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %do;'; put '%let innertable=bitemp5d_subquery;'; put '%let top_table=&base_lib..&base_dsn;'; put '%let flexinow=&now;'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put 'update &top_table set &tech_to=&flexinow'; put '%if %length(&processed)>0 %then %do;'; put ',&processed=&flexinow'; put '%end;'; put 'where &tech_from <= &flexinow and &flexinow < &tech_to and'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '/* changed records are deleted then re-appended when doing UPDATEs */'; put 'delete from &top_table where'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;'; put '%let syscc=5;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%goto end_of_macro;'; put '%end;'; put '/* perform join inside query as per'; put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */'; put 'exists( select 1 from &baselib_schema.&innertable where'; put '/* loop PK join */'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put '&base_dsn..&idx_val=&innertable..&idx_val and'; put '%end;'; put '%if &loadtype=BITEMPORAL %then %do;'; put '&base_dsn..&bus_from >= &innertable..&bus_from'; put 'and &base_dsn..&bus_to <= &innertable..&bus_to and'; put '%end;'; put '/* close the statement */'; put '1=1);'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put ') by myAlias;'; put 'execute (drop table &baselib_schema.&innertable) by myAlias;'; put '%end;'; put '%end;'; put 'quit;'; put 'data _null_;'; put 'putlog "&sysmacroname: Closeout complete";'; put 'run;'; put '/**'; put '* Append the new / updated records'; put '*/'; put '%if &engine_type=CAS %then %do;'; put '/* get varchar variables ready for casting */'; put '%local vcfmt vcrename vcassign vcdrop;'; put 'data _null_;'; put 'set work.bitemp_cols(where=(type=6)) end=last;'; put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;'; put 'retain vcrename vcassign vcdrop vcfmt;'; put 'if _n_=1 then vcrename=''(rename=('';'; put 'rancol=resolve(''%mf_getuniquename()'');'; put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';'; put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);'; put 'vcassign=cats(vcassign,name,''='',rancol,'';'');'; put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');'; put 'if last then do;'; put 'vcrename=cats(vcrename,''))'');'; put 'call symputx(''vcfmt'',vcfmt);'; put 'call symputx(''vcrename'',vcrename);'; put 'call symputx(''vcassign'',vcassign);'; put 'call symputx(''vcdrop'',vcdrop);'; put 'end;'; put 'run;'; put '/* prepare a temp cas table with varchars casted */'; put '%let tmp=%mf_getuniquename();'; put 'data casuser.&tmp ;'; put '&vcfmt'; put 'set work.bitemp6_unique &vcrename;'; put '&vcassign'; put '&vcdrop'; put 'run;'; put '/* load the table with varchars applied*/'; put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;'; put 'set casuser.&tmp;'; put 'run;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&tmp;'; put '/* this code will not work as regular tables do not have varchars */'; put '/*'; put 'proc casutil;'; put 'load data=work.bitemp6_unique'; put 'outcaslib="&base_lib" casout="&base_dsn" append ;'; put 'quit;'; put '*/'; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put 'proc append base=&base_lib..&base_dsn'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=bitemp6_unique force nowarn;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;'; put '%end;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '/* final check on syscc */'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=&_program'; put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)'; put ')'; put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;'; put 'data work.vw_outds_orig /view=work.vw_outds_orig;'; put 'set work.bitemp0_base (drop=&md5_col);'; put 'where ___TMP___NEW_FLG=0;'; put 'drop ___TMP___NEW_FLG;'; put 'run;'; put '/* update the AUDIT table */'; put '%if %mf_existds(&outds_audit) %then %do;'; put 'options mprint;'; put '%mp_storediffs(&base_lib..&base_dsn'; put ',work.vw_outds_orig'; put ',&pk &bus_from'; put ',delds=&outds_del'; put ',modds=&outds_mod'; put ',appds=&outds_add'; put ',outds=work.mp_storediffs'; put ',processed_dttm=&now'; put ',loadref=%superq(etlsource)'; put ')'; put '/* exclude unchanged values in modified rows */'; put 'data work.mp_storediffs;'; put 'set work.mp_storediffs;'; put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;'; put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;'; put 'run;'; put 'proc append base=&outds_audit data=work.mp_storediffs;'; put 'run;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Problem in audit stage (&outds_audit))'; put ')'; put '%let user=%mf_getUser();'; put '/**'; put 'Notify as appropriate EMAILS DISABLED'; put '%sumo_alerts(ALERT_EVENT=UPDATE'; put ', ALERT_TARGET=&base_lib..&base_dsn'; put ', from_user= &user);'; put '*/'; put '/* monitor BiTemporal usage */'; put '%if &log=1 %then %do;'; put '%put syscc=&syscc;'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'insert into &dclib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&ETLSOURCE"'; put ',LOADTYPE="&loadtype"'; put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)'; put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)'; put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)'; put ',DURATION=&dur'; put ',MAC_VER="v&ver"'; put ',user_nm="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%put syscc=&syscc;'; put '%end;'; put '%end_of_macro:'; put '%mend bitemporal_dataloader;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getlibs;'; put '%macro mpe_refreshlibs(lib=0);'; put '%dc_getlibs(outds=work.mm_getLibs)'; put 'proc sort data=mm_getlibs;'; put 'by libraryref libraryname;'; put 'run;'; put 'data libs0;'; put 'set mm_getlibs;'; put 'by libraryref;'; put '%if &lib ne 0 %then %do;'; put 'where upcase(libraryref)="%upcase(&lib)";'; put '%end;'; put 'if "%mf_getplatform()"="SASMETA" then do;'; put '/* note - invalid libraries can result in exception errors. If this happens,'; put 'configure the dc_viewlib_check variable to NO in Data Controller Settings */'; put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));'; put 'drop rc;'; put 'if rc ne 0 then do;'; put 'putlog "NOTE: Library " libraryname " does not exist!!";'; put 'putlog (_all_) (=);'; put 'delete;'; put 'end;'; put 'end;'; put 'if not first.libraryref then delete;'; put 'run;'; put 'proc sql;'; put 'create table libs1 as'; put 'select distinct libname'; put ',engine'; put ',path'; put ',level'; put ',sysname'; put ',sysvalue'; put 'from dictionary.libnames'; put 'order by libname, level,engine,path;'; put 'data libs2;'; put 'set libs1;'; put 'length tran $1024;'; put 'if missing(sysname) then sysname=''Missing'';'; put 'select(sysname);'; put 'when(''Access Permission'') tran=''Permissions'';'; put 'when(''Owner Name'') tran=''Owner'';'; put 'when(''Schema/Owner'') tran=''schema'';'; put 'otherwise tran=sysname;'; put 'end;'; put 'run;'; put 'proc transpose data=libs2 out=libs3;'; put 'by libname level engine path;'; put 'var sysvalue;'; put 'id tran;'; put 'run;'; put 'data libs4(rename=(libname=libref));'; put 'length paths $8192 perms owners schemas $500 permissions owner schema $1024;'; put 'if _n_=1 then call missing (of _all_);'; put 'set libs3;'; put 'by libname;'; put 'if engine=''V9'' then engine=''BASE'';'; put 'if first.libname then do;'; put 'retain paths perms owners schemas;'; put 'paths=''(''!!quote(trim(path));'; put 'perms=permissions;'; put 'owners=owner;'; put 'schemas=schema;'; put 'end;'; put 'else do;'; put 'paths=trim(paths)!!'' ''!!quote(trim(path));'; put 'perms=trim(perms)!!'',''!!trim(permissions);'; put 'owners=trim(owners)!!'',''!!trim(owner);'; put 'schemas=trim(schemas)!!'' ''!!trim(schema);'; put 'end;'; put 'if last.libname then do;'; put 'paths=trim(paths)!!'')'';'; put 'schemas=cats(schemas);'; put 'output;'; put 'end;'; put 'keep libname engine paths perms owners schemas;'; put 'run;'; put 'proc sql;'; put 'create table libs5 as'; put 'select a.libref'; put ',coalescec(b.engine,a.engine) as engine length=32'; put ',b.libraryname as libname'; put ',a.paths'; put ',a.perms'; put ',a.owners'; put ',a.schemas'; put ',b.libraryid as libid'; put 'from libs4 a'; put 'left join libs0 b'; put 'on upcase(a.libref)=upcase(b.libraryref)'; put 'where libref not in (''SASWORK'',''WORK'',''SASUSER'',''CASUSER'',''TEMP'',''STPSAMP'''; put ',''MAPSGFK'');'; put '%bitemporal_dataloader(base_lib=&dc_libref'; put ',base_dsn=MPE_DATACATALOG_LIBS'; put ',append_dsn=libs5'; put ',PK=LIBREF'; put ',etlsource=&_program'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&dc_libref'; put ')'; put '%mend mpe_refreshlibs;'; put '%macro mpe_refreshcatalogs(lib,cat=#all);'; put '%let lib=%upcase(&lib);'; put '%let cat=%upcase(&cat);'; put '%put running &sysmacroname &lib for &cat;'; put 'proc sql;'; put 'create table work.catdata as'; put 'select libname as libref,'; put 'memname,'; put 'objname,'; put 'objtype,'; put 'objdesc,'; put 'created,'; put 'modified,'; put 'alias,'; put 'level'; put 'from dictionary.catalogs'; put 'where upcase(libname)="&lib"'; put '%if &cat ne #ALL %then %do;'; put 'and upcase(memname)="&cat"'; put '%end;'; put ';'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc afer &lib objects extraction)'; put ')'; put '/* load mpe_datacatalog_CATS */'; put 'proc sql;'; put 'create table datacats as select distinct libref,memname from catdata;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datacatalog_CATS'; put ',append_dsn=datacats'; put ',PK=LIBREF MEMNAME'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &cat = #ALL %then %do;'; put ',close_vars=LIBREF'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '/* load mpe_datacatalog_objsS */'; put 'proc sql;'; put 'create table dataobjs as'; put 'select distinct libref,'; put 'memname,'; put 'objname,'; put 'objtype,'; put 'objdesc,'; put 'alias'; put 'from catdata;'; put 'quit;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datacatalog_OBJS'; put ',append_dsn=dataobjs'; put ',PK=LIBREF MEMNAME OBJNAME OBJTYPE'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &cat = #ALL %then %do;'; put ',close_vars=LIBREF MEMNAME'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '%put load mpe_datastatus_OBJS;'; put 'proc sql;'; put 'create table statusobjs as'; put 'select distinct libref,'; put 'memname,'; put 'objname,'; put 'objtype,'; put 'created,'; put 'modified,'; put 'level'; put 'from catdata;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datastatus_OBJS'; put ',append_dsn=statusobjs'; put ',PK=LIBREF MEMNAME OBJNAME OBJTYPE'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &cat = #ALL %then %do;'; put ',close_vars=LIBREF MEMNAME'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '%put load mpe_datastatus_cats;'; put 'proc sql;'; put 'create table statuscats as'; put 'select libref,'; put 'memname,'; put 'count(*) as nobjs,'; put 'min(created) as created,'; put 'max(modified) as modified'; put 'from catdata'; put 'group by 1,2;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datastatus_cats'; put ',append_dsn=statuscats'; put ',PK=LIBREF MEMNAME'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &cat = #ALL %then %do;'; put ',close_vars=LIBREF'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '%mend mpe_refreshcatalogs;'; put '/** @cond */'; put '%macro mf_existfeature(feature'; put ')/*/STORE SOURCE*/;'; put '%let feature=%upcase(&feature);'; put '%local platform;'; put '%let platform=%mf_getplatform();'; put '%if &feature= %then %do;'; put '%put No feature was requested for detection;'; put '%end;'; put '%else %if &feature=COLCONSTRAINTS %then %do;'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=PROCLUA %then %do;'; put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */'; put '%if &platform=SASVIYA %then 1;'; put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;'; put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=DBMS_MEMTYPE %then %do;'; put '/* does dbms_memtype exist in dictionary.tables? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=EXPORTXLS %then %do;'; put '/* is it possible to PROC EXPORT an excel file? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;'; put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;'; put '%else 0;'; put '%end;'; put '%else %do;'; put '-1'; put '%put &sysmacroname: &feature not found;'; put '%end;'; put '%mend mf_existfeature;'; put '/** @endcond */'; put '%macro mp_getconstraints(lib=WORK'; put ',ds='; put ',outds=mp_getconstraints'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '/**'; put '* Cater for environments where sashelp.vcncolu is not available'; put '*/'; put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;'; put 'proc sql;'; put 'create table &outds('; put 'libref char(8)'; put ',TABLE_NAME char(32)'; put ',constraint_type char(8) label=''Constraint Type'''; put ',constraint_name char(32) label=''Constraint Name'''; put ',column_name char(32) label=''Column'''; put ',constraint_order num'; put ');'; put '%return;'; put '%end;'; put '/**'; put '* Neither dictionary tables nor sashelp provides a constraint order column,'; put '* however they DO arrive in the correct order. So, create the col.'; put '**/'; put '%local vw;'; put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);'; put 'data &vw /view=&vw;'; put 'set sashelp.vcncolu;'; put 'where table_catalog="&lib";'; put '/* use retain approach to reset the constraint order with each constraint */'; put 'length tmp $1000;'; put 'retain tmp;'; put 'drop tmp;'; put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;'; put 'constraint_order=1;'; put 'end;'; put 'else constraint_order+1;'; put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);'; put 'run;'; put '/* must use SQL as proc datasets does not support length changes */'; put 'proc sql noprint;'; put 'create table &outds as'; put 'select upcase(a.TABLE_CATALOG) as libref'; put ',upcase(a.TABLE_NAME) as TABLE_NAME'; put ',a.constraint_type'; put ',a.constraint_name'; put ',b.column_name'; put ',b.constraint_order'; put 'from dictionary.TABLE_CONSTRAINTS a'; put 'left join &vw b'; put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)'; put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)'; put 'and a.constraint_name=b.constraint_name'; put '/**'; put '* We cannot apply this clause to the underlying dictionary table. See:'; put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867'; put '* cannot use`where calculated libref="&lib"` either as it will STILL execute'; put '* all the underlying constraint queries, causing exception errors in some'; put '* cases: https://github.com/sasjs/core/issues/283'; put '*/'; put 'where a.TABLE_CATALOG="&lib"'; put '%if "&ds" ne "" %then %do;'; put 'and upcase(a.TABLE_NAME)="&ds"'; put 'and upcase(b.TABLE_NAME)="&ds"'; put '%end;'; put 'order by libref, table_name, constraint_name, constraint_order'; put ';'; put '/* tidy up */'; put '%mp_dropmembers('; put '&vw,'; put 'iftrue=(&mdebug=0)'; put ')'; put '%mend mp_getconstraints;'; put '%macro mpe_refreshtables(lib,ds=#all);'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%local engine; %let engine=%mf_getengine(&lib);'; put '%local schema; %let schema=%mf_getschema(&lib);'; put '%put running &sysmacroname &lib(&engine &schema) for &ds;'; put 'proc sql;'; put 'create table cols as'; put 'select libname as libref'; put ',upcase(memname) as dsn'; put ',memtype'; put ',upcase(name) as name'; put ',type'; put ',length'; put ',varnum'; put ',label'; put ',format'; put ',idxusage'; put ',notnull'; put 'from dictionary.columns'; put 'where upcase(libname)="&lib"'; put '%if &ds ne #ALL %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc afer &lib cols extraction)'; put ')'; put '%if &engine=SQLSVR %then %do;'; put 'proc sql;'; put 'connect using &lib;'; put 'create table work.indexes as'; put 'select * from connection to &lib('; put 'select'; put 's.name as SchemaName,'; put 't.name as memname,'; put 'tc.name as name,'; put 'ic.key_ordinal as KeyOrderNr'; put 'from'; put 'sys.schemas s'; put 'inner join sys.tables t on s.schema_id=t.schema_id'; put 'inner join sys.indexes i on t.object_id=i.object_id'; put 'inner join sys.index_columns ic on i.object_id=ic.object_id'; put 'and i.index_id=ic.index_id'; put 'inner join sys.columns tc on ic.object_id=tc.object_id'; put 'and ic.column_id=tc.column_id'; put 'where i.is_primary_key=1'; put 'and s.name=%str(%'')&schema%str(%'')'; put 'order by t.name, ic.key_ordinal ;'; put ');disconnect from &lib;'; put 'create table finalcols as'; put 'select a.*'; put ',case when b.name is not null then 1 else 0 end as pk_ind'; put 'from work.cols a'; put 'left join work.indexes b'; put 'on a.dsn=b.memname'; put 'and upcase(a.name)=upcase(b.name)'; put 'order by libref,dsn;'; put '%end;'; put '%else %do;'; put '%local dsn;'; put '%if &ds = #ALL %then %let dsn=;'; put '%mp_getconstraints(lib=&lib.,ds=&dsn,outds=work.constraints)'; put '/* extract cols that are clearly primary keys */'; put 'proc sql;'; put 'create table work.pk4sure as'; put 'select libref'; put ',table_name'; put ',constraint_name'; put ',constraint_order'; put ',column_name as name'; put 'from work.constraints'; put 'where constraint_type=''PRIMARY'''; put 'order by 1,2,3,4;'; put '/* extract unique constraints where every col is also NOT NULL */'; put 'proc sql;'; put 'create table work.sum as'; put 'select a.libref'; put ',a.table_name'; put ',a.constraint_name'; put ',count(a.column_name) as unq_cnt'; put ',count(b.column_name) as nul_cnt'; put 'from work.constraints(where=(constraint_type =''UNIQUE'')) a'; put 'left join work.constraints(where=(constraint_type =''NOT NULL'')) b'; put 'on a.libref=b.libref'; put 'and a.table_name=b.table_name'; put 'and a.column_name=b.column_name'; put 'group by 1,2,3'; put 'having unq_cnt=nul_cnt;'; put '/* extract cols from the relevant unique constraints */'; put 'create table work.pkdefault as'; put 'select a.libref'; put ',a.table_name'; put ',a.constraint_name'; put ',b.constraint_order'; put ',b.column_name as name'; put 'from work.sum a'; put 'left join work.constraints(where=(constraint_type =''UNIQUE'')) b'; put 'on a.libref=b.libref'; put 'and a.table_name=b.table_name'; put 'and a.constraint_name=b.constraint_name'; put 'order by 1,2,3,4;'; put '/* extract cols from the relevant unique INDEXES */'; put 'create table work.pkfromindex as'; put 'select libname as libref'; put ',memname as table_name'; put ',indxname as constraint_name'; put ',indxpos as constraint_order'; put ',name'; put 'from dictionary.indexes'; put 'where nomiss=''yes'' and unique=''yes'' and upcase(libname)="&lib"'; put '%if &ds ne #ALL %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put 'order by 1,2,3,4;'; put '/* create one table */'; put 'data work.finalpks;'; put 'set pkdefault pk4sure pkfromindex;'; put 'pk_ind=1;'; put '/* if there are multiple unique constraints, take the first */'; put 'by libref table_name constraint_name;'; put 'retain keepme;'; put 'if first.table_name then keepme=1;'; put 'if first.constraint_name and not first.table_name then keepme=0;'; put 'if keepme=1;'; put 'run;'; put '/* join back to starting table */'; put 'proc sql;'; put 'create table finalcols as'; put 'select a.*'; put ',b.constraint_order'; put ',case when b.pk_ind=1 then 1 else 0 end as pk_ind'; put 'from work.cols a'; put 'left join work.finalpks b'; put 'on a.libref=b.libref'; put 'and a.dsn=b.table_name'; put 'and upcase(a.name)=upcase(b.name)'; put 'order by libref,dsn,constraint_order;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc afer &lib indexes extraction)'; put ')'; put '/* load columns */'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datacatalog_vars'; put ',append_dsn=finalcols'; put ',PK=LIBREF DSN NAME'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &ds ne #ALL %then %do;'; put ',close_vars=LIBREF DSN'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '/* prepare tables */'; put 'proc sql;'; put 'create table work.tabs as select'; put 'libname as libref'; put ',upcase(memname) as dsn'; put ',memtype'; put '%if %mf_existfeature(DBMS_MEMTYPE)=1 %then %do;'; put ',dbms_memtype'; put '%end;'; put '%else %do;'; put ',''n/a'' as dbms_memtype format=$32.'; put '%end;'; put ',typemem'; put ',memlabel'; put ',nvar'; put ',compress'; put 'from dictionary.tables'; put 'where upcase(libname)="&lib"'; put '%if &ds ne #ALL %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put 'data tabs2;'; put 'set finalcols;'; put 'length pk_fields $512;'; put 'retain pk_fields;'; put 'by libref dsn;'; put 'if first.dsn then pk_fields='''';'; put 'if pk_ind=1 then pk_fields=catx('' '',pk_fields,name);'; put 'if last.dsn then output;'; put 'run;'; put 'proc sql;'; put 'create table work.finaltabs as'; put 'select a.libref'; put ',a.dsn'; put ',a.memtype'; put ',a.dbms_memtype'; put ',a.typemem'; put ',a.memlabel'; put ',a.nvar'; put ',a.compress'; put ',b.pk_fields'; put 'from work.tabs a'; put 'left join work.tabs2 b'; put 'on a.libref=b.libref'; put 'and a.dsn=b.dsn;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datacatalog_tabs'; put ',append_dsn=finaltabs'; put ',PK=LIBREF DSN'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&mpelib'; put '%if &ds ne #ALL %then %do;'; put ',close_vars=LIBREF'; put '%end;'; put ')'; put '/* prepare table frequently changing attributes */'; put 'proc sql;'; put '%if &engine=SQLSVR %then %do;'; put 'connect using &lib;'; put 'create table work.attrs as select * from connection to &lib('; put 'SELECT SCHEMA_NAME(schema_id) as ''schema'', name, create_date, modify_date'; put 'FROM sys.tables ;'; put ');'; put 'create table work.nobs as select * from connection to &lib('; put 'SELECT SCHEMA_NAME(A.schema_id) AS ''schema'''; put ',A.Name, AVG(B.rows) AS ''RowCount'''; put 'FROM sys.objects A'; put 'INNER JOIN sys.partitions B ON A.object_id = B.object_id'; put 'WHERE A.type = ''U'''; put 'GROUP BY A.schema_id, A.Name'; put ');'; put 'disconnect from &lib;'; put 'create table statustabs as select'; put 'a.libref'; put ',a.dsn'; put ',b.create_date as crdate'; put ',b.modify_date as modate'; put ',. as filesize'; put ',c.RowCount as nobs'; put 'from work.tabs a'; put 'left join work.attrs(where=(schema="&schema")) b'; put 'on upcase(a.dsn)=upcase(b.name)'; put 'left join work.nobs(where=(schema="&schema")) c'; put 'on upcase(a.dsn)=upcase(c.name);'; put '%end;'; put '%else %do;'; put 'create table statustabs as select'; put 'libname as libref'; put ',upcase(memname) as dsn'; put ',crdate'; put ',modate'; put ',filesize'; put ',nobs'; put 'from dictionary.tables'; put 'where upcase(libname)="&lib"'; put '%if &ds ne #ALL %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put '%end;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datastatus_tabs'; put ',append_dsn=statustabs'; put ',PK=LIBREF DSN'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&mpelib'; put '%if &ds ne #ALL %then %do;'; put ',close_vars=LIBREF'; put '%end;'; put ')'; put '%if &ds = #ALL %then %do;'; put 'proc sql;'; put 'create table work.sumcat as'; put 'select libname as libref,'; put 'count(distinct memname) as catalog_cnt'; put 'from dictionary.catalogs'; put 'where upcase(libname)="&lib"'; put 'group by 1;'; put 'create table work.sumdsn as select'; put 'libref'; put ',sum(filesize) as libsize'; put ',count(*) as table_cnt'; put 'from statustabs'; put 'group by 1;'; put 'create table work.libs as'; put 'select libref from work.sumcat'; put 'union'; put 'select libref from work.sumdsn;'; put 'create table work.statuslibs as'; put 'select a.libref,'; put 'b.libsize,'; put 'b.table_cnt,'; put 'c.catalog_cnt'; put 'from work.libs a'; put 'left join work.sumdsn b'; put 'on a.libref=b.libref'; put 'left join work.sumcat c'; put 'on a.libref=c.libref;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datastatus_libs'; put ',append_dsn=statuslibs'; put ',PK=LIBREF'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&mpelib'; put ')'; put '%end;'; put '%mend mpe_refreshtables;'; put '%macro dc_refreshcatalog(libref);'; put '/* take current repository */'; put '%local repo repocnt xx;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'put (_all_)(=);'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'');'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put &sysmacroname #&libref#;'; put '%if #&libref# ne ## %then %do;'; put '%put &sysmacroname: assigning specific libref, &libref;'; put '%dc_assignlib(WRITE,&libref) /* write just in order to assign direct lib */'; put '%mpe_refreshlibs(lib=&libref)'; put '%mpe_refreshtables(&libref)'; put '%mpe_refreshcatalogs(&libref)'; put '%end;'; put '%else %do xx=1 %to &repocnt;'; put 'options metarepository=&&repo&xx;'; put '%mpe_refreshlibs()'; put '/* get libs to be ignored */'; put '%local ignorelist;'; put 'proc sql noprint;'; put 'select var_value into: ignorelist'; put 'from &mpelib..MPE_CONFIG'; put 'where var_scope=''DC_CATALOG'''; put 'and var_name="DC_IGNORELIBS"'; put 'and &dc_dttmtfmt. < TX_TO'; put 'and var_active=1;'; put '/* get all libs */'; put '%let libcnt=0;'; put 'data libraries;'; put 'set &mpelib..mpe_datacatalog_libs;'; put 'where &dc_dttmtfmt. le TX_TO;'; put 'if index("&ignorelist",''|''!!upcase(trim(libref))!!''|'')=0;'; put 'i+1;'; put 'call symputx(cats(''lib'',i),libref);'; put 'call symputx(''libcnt'',i);'; put 'run;'; put '%local i;'; put '%do i=1 %to &libcnt;'; put '%dc_assignlib(WRITE,&&lib&i)'; put '%mpe_refreshtables(&&lib&i)'; put '%mpe_refreshcatalogs(&&lib&i)'; put '%end;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_refreshcatalog;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file refreshcatalog.sas'; put '@brief Refreshes the library data catalog'; put '@details A library may be passed in a LIBREF url param.'; put '

SAS Macros

'; put '@li mpeinit.sas'; put '@li dc_refreshcatalog.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%global libref;'; put '%mpeinit()'; put '%dc_refreshcatalog(&libref)'; put 'data _null_;'; put 'file _webout;'; put 'put ''

Catalog Refresh Complete

'';'; put 'run;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=refreshlibs; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '/** @cond */'; put '%macro mf_existvar(libds /* 2 part dataset name */'; put ', var /* variable name */'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid=0 %then %do;'; put '%put %sysfunc(sysmsg());'; put '0'; put '%end;'; put '%else %if %length(&var)=0 %then %do;'; put '0'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%sysfunc(varnum(&dsid,&var))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_existvar;'; put '/** @endcond */'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro bitemporal_closeouts('; put 'tech_from=tx_from_dttm'; put ',tech_to = tx_to_dttm /* Technical TO datetime variable.'; put 'Req''d on BASE table only. */'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE /* Name of STAGING table. */'; put ',PK= name sex /* Business key, space separated. */'; put '/* Should INCLUDE BUS_FROM field if relevant. */'; put ',NOW=DEFINE'; put ',FILTER= /* supply a filter to limit the update */'; put ',outdest= /* supply an unquoted filepath/filename.ext to get'; put 'a text file containing the update statements */'; put ',loadtype='; put ',loadtarget=YES /* if <> YES will return without changing anything */'; put ');'; put '%put ENTERING &sysmacroname;'; put '%local x var start;'; put '%let start=%sysfunc(datetime());'; put '%dc_assignlib(WRITE,&base_lib)'; put '%dc_assignlib(WRITE,&append_lib)'; put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;'; put '%put &=now;'; put '/**'; put '* perform basic checks'; put '*/'; put '/* do tables exist? */'; put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;'; put '%mp_abort(msg=&base_lib..&base_dsn does not exist)'; put '%end;'; put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;'; put '%mp_abort(msg=&append_lib..&append_dsn does not exist)'; put '%end;'; put '/* do TX columns exist? */'; put '%if &loadtype ne UPDATE %then %do;'; put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;'; put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;'; put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%end;'; put '/* do PK columns exist? */'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)'; put '%end;'; put '%end;'; put '/* check uniqueness */'; put 'proc sort data=&append_lib..&append_dsn'; put 'out=___closeout1 noduprecs dupout=___closeout1a;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then'; put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);'; put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */'; put '%local gap;'; put '%let gap=0;'; put 'data _null_;'; put 'now=&now;'; put 'gap=intck(''HOURS'',now,datetime());'; put 'call symputx(''gap'',gap,''l'');'; put 'run;'; put '%mf_abort('; put 'iftrue=(&gap > 24),'; put 'msg=NOW variable (&now) is not within a 24hr tolerance'; put ')'; put '/* have any warnings / errs occurred thus far? If so, abort */'; put '%mf_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/**'; put '* Create closeout statements. These are sent as individual SQL statements'; put '* to ensure pass-through utilisation. The update_cnt variable monitors'; put '* how many records were actually updated on the target table.'; put '*/'; put '%local update_cnt;'; put '%let update_cnt=0;'; put 'filename tmp temp;'; put 'data _null_;'; put 'set ___closeout1;'; put 'file tmp;'; put 'if _n_=1 then put ''proc sql noprint;'' ;'; put 'length string $32767.;'; put '%if &loadtype=UPDATE %then %do;'; put 'put "delete from &base_lib..&base_dsn where 1";'; put '%end;'; put '%else %do;'; put 'now=symget(''now'');'; put 'put "update &base_lib..&base_dsn set &tech_to= " now @;'; put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;'; put 'put " ,PROCESSED_DTTM=" now @;'; put '%end;'; put 'put " where " now " lt &tech_to ";'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;'; put '/* use single quotes to avoid ampersand resolution in data */'; put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";'; put '%end;'; put '%else %do;'; put 'string=cats(" & &var=",&var);'; put '%end;'; put 'put string;'; put '%end;'; put 'put "&filter ;";'; put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';'; put 'run;'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%if &loadtarget ne YES %then %return;'; put '/* ensure we have a lock */'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn'; put ',ref=bitemporal_closeouts'; put ',ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'options source2;'; put '%inc tmp;'; put 'filename tmp clear;'; put '/**'; put '* Update audit tracker'; put '*/'; put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);'; put '%local user; %let user=%mf_getuser();'; put 'proc sql;'; put 'insert into &mpelib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"'; put ',LOADTYPE="CLOSEOUT"'; put ',DELETED_RECORDS=&update_cnt'; put ',NEW_RECORDS=0'; put ',DURATION=%sysfunc(datetime())-&start'; put ',USER_NM="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%mend bitemporal_closeouts;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=''Schema/Owner'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '/** @cond */'; put '%macro mp_storediffs(libds'; put ',origds'; put ',key'; put ',delds=0'; put ',appds=0'; put ',modds=0'; put ',outds=work.mp_storediffs'; put ',loadref=0'; put ',processed_dttm=0'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));'; put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));'; put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));'; put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));'; put '%let dslist=&origds;'; put '%if &delds ne 0 %then %do;'; put '%let delds=%upcase(&delds);'; put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;'; put '%let dslist=&dslist &delds;'; put '%end;'; put '%if &appds ne 0 %then %do;'; put '%let appds=%upcase(&appds);'; put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;'; put '%let dslist=&dslist &appds;'; put '%end;'; put '%if &modds ne 0 %then %do;'; put '%let modds=%upcase(&modds);'; put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;'; put '%let dslist=&dslist &modds;'; put '%end;'; put '%let origds=%upcase(&origds);'; put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;'; put '%let key=%upcase(&key);'; put '/* hash the key and append all the tables (marking the source) */'; put 'data &ds1;'; put 'set &dslist indsname=&inds_auto;'; put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);'; put '&inds_keep=upcase(&inds_auto);'; put 'proc sort;'; put 'by &inds_keep &hashkey;'; put 'run;'; put '/* transpose numeric & char vars */'; put 'proc transpose data=&ds1'; put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));'; put 'by &inds_keep &hashkey;'; put 'var _numeric_;'; put 'run;'; put 'proc transpose data=&ds1'; put 'out=&ds3('; put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)'; put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))'; put ');'; put 'by &inds_keep &hashkey;'; put 'var _character_;'; put 'run;'; put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;'; put '/* this is a format catalog - cannot query cols directly */'; put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"'; put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"'; put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";'; put '%end;'; put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);'; put 'data &ds4;'; put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;'; put 'if _n_=1 then call missing(_label_);'; put 'drop _label_;'; put 'set &ds2 &ds3 indsname=&inds_auto;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%upcase(&vlist));'; put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';'; put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;'; put 'call symputx(''syscc'',98);'; put 'end;'; put 'if &inds_keep="&appds" then move_type=''A'';'; put 'else if &inds_keep="&delds" then move_type=''D'';'; put 'else if &inds_keep="&modds" then move_type=''M'';'; put 'else if &inds_keep="&origds" then move_type=''O'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;'; put 'call symputx(''syscc'',99);'; put 'end;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;'; put 'else is_pk=0;'; put 'drop &inds_keep;'; put 'run;'; put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());'; put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);'; put '%let libds=%upcase(&libds);'; put '/* join orig vals for modified & deleted */'; put 'proc sql;'; put 'create table &outds as'; put 'select "&loadref" as load_ref length=36'; put ',&processed_dttm as processed_dttm format=E8601DT26.6'; put ',"%scan(&libds,1,.)" as libref length=8'; put ',"%scan(&libds,2,.)" as dsn length=32'; put ',b.key_hash length=32'; put ',b.move_type length=1'; put ',b.tgtvar_nm length=32'; put ',b.is_pk'; put ',case when b.move_type ne ''M'' then -1'; put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0'; put 'else 1'; put 'end as is_diff'; put ',b.tgtvar_type length=1'; put ',case when b.move_type=''D'' then b.newval_num'; put 'else a.newval_num'; put 'end as oldval_num format=best32.'; put ',case when b.move_type=''D'' then .'; put 'else b.newval_num'; put 'end as newval_num format=best32.'; put ',case when b.move_type=''D'' then b.newval_char'; put 'else a.newval_char'; put 'end as oldval_char length=32765'; put ',case when b.move_type=''D'' then '''''; put 'else b.newval_char'; put 'end as newval_char length=32765'; put 'from &ds4(where=(move_type=''O'')) as a'; put 'right join &ds4(where=(move_type ne ''O'')) as b'; put 'on a.tgtvar_nm=b.tgtvar_nm'; put 'and a.key_hash=b.key_hash'; put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4;'; put '%end;'; put '%mend mp_storediffs;'; put '/** @endcond */'; put '%macro bitemporal_dataloader('; put 'bus_from= /* Business FROM datetime variable. Req''d on'; put 'STAGING & BASE tables.*/'; put ',bus_to = /* Business TO datetime variable. Req''d on'; put 'STAGING & BASE tables. */'; put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/'; put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */'; put ',tech_from= /* Technical FROM datetime variable. Req''d on'; put 'BASE table only. */'; put ',tech_to = /* Technical TO datetime variable. Req''d on BASE'; put 'table only. */'; put ',processed= 0'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE'; put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */'; put ',PK= name sex'; put ',RK_UNDERLYING='; put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */'; put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular'; put 'SCD2 loader then set this switch to YES to'; put 'ensure the MAXKEYTABLE is updated with the'; put 'current maximum RK value for the target table'; put '*/'; put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is'; put 'unique on its business key */'; put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in'; put '&dclib..DATALOADS */'; put ',LOADTYPE=BITEMPORAL'; put ',RK_MAXKEYTABLE= mpe_maxkeyvalues'; put ',LOG=1 /* Switch to 0 to prevent records being added to'; put '&mpelib..mpe_DATALOADS (ie when testing)*/'; put ',DELETE_COL= _____DELETE__THIS__RECORD_____'; put '/* If this variable is found in the append dataset'; put 'then records are closed out (or deleted) in the'; put 'append table where that variable= "Yes" */'; put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off'; put 'target table load and generate temp tables only */'; put ',CLOSE_VARS='; put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is'; put 'no facility to close out removed records (all records are'; put 'assumed new or changed). But how does one determine which'; put 'records are removed? Short of loading the entire table'; put 'each time? This parameter allows a set of variables'; put '(this should be a subset of the PK) to be declared, and'; put 'the macro will determine which records in the base table'; put 'need to be closed out ahead of the load.'; put 'For instance, given the following:'; put 'Base Table Staging Table'; put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT'; put 'JAN ACME4 66 JAN ACME4 66'; put 'FEB ACME4 99 FEB ACME4 99'; put 'FEB ACME1 22'; put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,'; put 'the "FEB PAG 22" record would get closed out.'; put '*/'; put ',config_table=&dclib..MPE_CONFIG'; put ',dclib=&dc_libref'; put ',outds_del=work.outds_del'; put ',outds_add=work.outds_add'; put ',outds_mod=work.outds_mod'; put ',outds_audit=0'; put ');'; put '/* when changing this macro, update the version num here */'; put '%local ver;'; put '%let ver=32;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */'; put '/* return straight away if nothing to load */'; put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);'; put '%if &nobs=-1 %then %do;'; put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;'; put '%end;'; put '%if &nobs=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/* hard exit if err condition exists */'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)'; put ')'; put '%local engine_type;'; put '%let engine_type=%mf_getengine(&base_lib);'; put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0'; put '%then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/**'; put '* The metadata functions (eg mf_existvar) will fail if the base table has a'; put '* SAS lock. So, make a snapshot of the base table for further use.'; put '* Also, make output tables (regardless).'; put '*/'; put '%local basecopy;'; put '%let basecopy=%mf_getuniquename(prefix=basecopy);'; put 'data &basecopy &outds_mod &outds_add &outds_del;'; put 'set &base_lib..&base_dsn;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)'; put ')'; put '%local cols idx_pk md5_col ;'; put '%let md5_col=___TMP___md5;'; put '%let check_uniqueness=%upcase(&check_uniqueness);'; put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);'; put '%let high_date=%unquote(&high_date);'; put '%let loadtype=%upcase(&loadtype);'; put '/* ensure irrelevant variables are cleared */'; put '%if &loadtype=BUSTEMPORAL %then %do;'; put '%let tech_from=;'; put '%let tech_to=;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put '%let bus_from=;'; put '%let bus_to=;'; put '%end;'; put '/* ensure relevant variables are supplied */'; put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing BUS_FROM / BUS_TO)'; put ')'; put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing TECH_FROM / TECH_TO)'; put ')'; put '/**'; put '* drop any tables (may be defined as views or vice versa preventing overwrite)'; put '*/'; put '%mp_dropmembers(append bitemp0_append bitemp_cols)'; put '/* SQL Server requires its own time values */'; put '/* 9.2 will only give picture format down to seconds. 9.3 allows'; put 'milliseconds by using lower S and defining the decimal in the format name..*/'; put 'PROC FORMAT;'; put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put '%local dbnow;'; put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'data _null_;'; put '/* convert space separated macvar to comma separated for SQL processing */'; put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');'; put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');'; put 'now=&dbnow;'; put 'call symputx(''NOW'',now,''L'');'; put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');'; put 'length etlsource $100;'; put 'etlsource=subpad(symget(''etlsource''),1,100);'; put 'call symputx(''etlsource'',etlsource,''l'');'; put 'run;'; put '/**'; put '* Even if no PROCESSED var provided, assume that any variable named'; put '* PROCESSED_DTTM should be updated'; put '*/'; put '%if &processed=0 %then %do;'; put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)'; put '%then %let processed=PROCESSED_DTTM;'; put '%else %let processed=;'; put '%end;'; put '/* extract colnames for md5 creation / change tracking */'; put 'proc contents noprint data=&base_lib..&base_dsn'; put 'out=work.bitemp_cols (keep=name type length varnum format:);'; put 'run;'; put 'proc sql noprint;'; put 'select name into: cols separated by '','''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put 'else cats(''put(md5(trim(put(ifn(missing('''; put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end'; put 'into: stripcols separated by ''||'''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put '/* set default formats*/'; put '%let bus_from_fmt = datetime19.;'; put '%let bus_to_fmt = datetime19.;'; put '%let processed_fmt = datetime19.;'; put '%let tech_from_fmt = format=datetime19.;'; put '%let tech_to_fmt = format=datetime19.;'; put '%put &=stripcols;'; put '%put &=pk;'; put 'data _null_;'; put 'set work.bitemp_cols;'; put 'if type=2 or type=6 then do;'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'if format='''' then fmt=cats(length,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put 'if upcase(name)="%upcase(&bus_from)" then'; put 'call symputx(''bus_from_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&bus_to)" then'; put 'call symputx(''bus_to_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_from)" then'; put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_to)" then'; put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&processed)" then'; put 'call symputx(''processed_fmt'',fmt,''L'');'; put 'run;'; put '%if %index(%quote(&cols),___TMP___) %then %do;'; put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim('; put ') This may conflict with temp variable generation!!);'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);'; put '%let syscc=5;'; put '%return;'; put '%end;'; put '/* if transaction dates appear on the APPEND table, need to remove them */'; put '%local drop_tx_dates /* used in append table */'; put 'drop_tx_dates_noobs /* used to take the base table structure */;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)'; put '%then %let drop_tx_dates=&tech_from;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)'; put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;'; put '%if %length(%trim(&drop_tx_dates))>0'; put '%then %let drop_tx_dates=(drop=&drop_tx_dates);'; put '%if %mf_existvar(&basecopy, &tech_from)'; put '%then %let drop_tx_dates_noobs=&tech_from;'; put '%if %mf_existvar(&basecopy, &tech_to)'; put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;'; put '%if %length(%trim(&drop_tx_dates_noobs))>0'; put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);'; put '%else %let drop_tx_dates_noobs=(obs=0);'; put '/**'; put '* Lock the table. This is necessary as we are doing a two part update (first'; put '* closing records then appending new records). It is theoretically possible'; put '* that an upload may occur whilst preparing the staging tables. And the'; put '* staging tables are about to be prepared..'; put '*/'; put '%if &LOADTARGET = YES %then %do;'; put '%put locking &base_lib..&base_dsn;'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%put locking &outds_audit;'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put '/* not an actual load, so avoid updating the max key table in next step. */'; put '%let rk_update_maxkeytable=NO;'; put '%end;'; put '%if %length(&RK_UNDERLYING)>0 %then %do;'; put '%mp_retainedkey('; put 'base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=&append_lib'; put ',append_dsn=&append_dsn'; put ',retained_key=&pk'; put ',business_key=&rk_underlying'; put ',check_uniqueness=&CHECK_UNIQUENESS'; put ',outds=work.append'; put '%if &rk_update_maxkeytable=NO %then %do;'; put ',maxkeytable=0'; put '%end;'; put '%else %do;'; put ',maxkeytable=&dclib..&RK_MAXKEYTABLE'; put '%end;'; put ',locktable=&dclib..mpe_lockanytable'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',filter_str=%str( (where=( &now < &tech_to)) )'; put '%end;'; put ')'; put '%end;'; put '%else %do;'; put 'proc sql;'; put 'create view work.append as select * from &append_lib..&append_dsn;'; put '%end;'; put '/**'; put '* generate md5 for append table'; put '*/'; put '/* it is possible the source dataset has additional (unwanted) columns.'; put 'Drop if specified; */'; put '%if %length(&keepvars)>0 %then %do;'; put '/* remove tech dates from keepvars as they are generated later */'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));'; put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);'; put '%end;'; put '/* CAS varchar types cause append issues here, so perform autoconvert'; put 'by creating empty local table first */'; put 'data;'; put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;'; put 'run;'; put '%local emptybasetable; %let emptybasetable=&syslast;'; put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put '/* apply formats for bitemporal vars but not tx dates which are added later */'; put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;'; put 'format &bus_from &bus_from_fmt;'; put 'format &bus_to &bus_to_fmt;'; put '%end;'; put 'set &emptybasetable /* base table reqd in case append has fewer cols */'; put 'work.append &drop_tx_dates;'; put '%if %length(%str(&bus_from_override))>0 %then %do;'; put '&bus_from= %unquote(&bus_from_override) ;'; put '%end;'; put '%if %length(%str(&bus_to_override))>0 %then %do;'; put '&bus_to= %unquote(&bus_to_override) ;'; put '%end;'; put 'length &md5_col $32;'; put '&md5_col=put(md5(&stripcols),hex32.);'; put '%if %length(&processed)>0 %then %do;'; put 'format &processed &processed_fmt;'; put '&processed=&now;'; put '%end;'; put '/**'; put '* If a delete column exists then create the delete dataset'; put '*/'; put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;'; put 'drop &delete_col;'; put 'if upcase(&delete_col) = "YES" then output &outds_del ;'; put 'else output work.bitemp0_append ;'; put 'run;'; put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=%scan(&outds_del,-1,.)'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put 'output work.bitemp0_append;'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc gt 0 at line 494)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if %length(&close_vars)>0 %then %do;'; put '/**'; put '* need to close out records that are not provided'; put '*/'; put 'proc sql;'; put 'create table bitemp1_closevars1 as'; put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)'; put 'from &base_lib..&base_dsn a'; put 'inner join work.bitemp0_append b'; put 'on 1=1'; put '/* join on closevars key */'; put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));'; put '%let idx_val=%scan(&close_vars,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* filter base on tech dates if necessary */'; put '%if &loadtype=TXTEMPORAL %then %do;'; put 'where a.&tech_from <=&now and &now < a.&tech_to'; put '%end;'; put ';'; put 'create table bitemp1_closevars2 as'; put 'select distinct a.*'; put 'from bitemp1_closevars1 a'; put 'left join work.bitemp0_append b'; put 'on 1=1'; put '/* join on primary key */'; put '%do idx_pk=1 %to %sysfunc(countw(&pk));'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* identify removed records by null value in a field in PK but not close_vars'; put '*/'; put 'where b.%scan('; put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )'; put ') IS NULL'; put ';'; put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=bitemp1_closevars2'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '/* grab schema */'; put '%let baselib_schema=%mf_getschema(&base_lib);'; put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;'; put '/* grab redshift config */'; put '%local redcnt; %let redcnt=0;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'data _null_;'; put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));'; put 'x+1;'; put 'call symputx(cats(''rednm'',x),var_value,''l'');'; put 'call symputx(cats(''redval'',x),var_value,''l'');'; put 'call symputx(''redcnt'',x,''l'');'; put 'run;'; put '%end;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from &baselib_schema.&base_dsn'; put 'where timestamp &sqlnow < &tech_to );'; put '%else %let base_table=&baselib_schema.&base_dsn;'; put '/* make empty table first - must clone & drop extra cols as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &temp_table alter sortkey none) by myAlias;'; put '%end;'; put '%local dropcols;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(&pk)'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;'; put '%end;'; put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp0/view=work.vw_bitemp0;'; put 'set work.bitemp0_append(keep=&pk &md5_col);'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&temp_table'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=work.vw_bitemp0 force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);'; put 'data &temp_table;'; put 'set work.bitemp0_append;'; put 'run;'; put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);'; put 'proc fedsql sessref=dcsession;'; put 'create table &bitemp0base{options replace=true} as'; put '%end;'; put '%else %do;'; put '%let temp_table=work.bitemp0_append;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put 'proc sql;'; put 'create table work.bitemp0_base as'; put '%end;'; put 'select a.&md5_col /* this identifies NEW records */'; put ', b.*'; put '/* assume first PK field cannot be null (if defined in a PK constraint then'; put 'it definitely cannot be null) */'; put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG'; put 'from &baselib_schema.&temp_table a'; put 'left join &base_table b'; put 'on 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put '); proc sql; drop table &base_lib.."&temp_table"n;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put ';'; put 'quit;'; put 'data work.bitemp0_base;'; put 'set &bitemp0base;'; put 'run;'; put 'proc sql;'; put 'drop table &temp_table;'; put 'drop table &bitemp0base;'; put '%end;'; put '%else %do;'; put ';'; put '%end;'; put '/**'; put '* matching & changed records are those without NULL key values'; put '* &idx_val resolves to rightmost PK value (loop above)'; put '*/'; put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;'; put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)'; put ')'; put '%put hashcols2=&stripcols;'; put 'proc sql;'; put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as'; put 'select *'; put ', put(md5(&stripcols),$hex32.) as &md5_col'; put 'from work.bitemp0_base (drop=&md5_col)'; put 'where ___TMP___NEW_FLG=0;'; put '/**'; put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base'; put '*/'; put 'proc sql;'; put 'create table &outds_add'; put '(drop=&md5_col'; put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;'; put '&delete_col'; put '%end;'; put ')'; put 'as select a.*'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',&now as &tech_from &tech_from_fmt'; put ',&high_date as &tech_to &tech_to_fmt'; put '%end;'; put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */'; put ', work.bitemp0_base b /* BASE records (contains null values for new) */'; put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */'; put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */'; put '/**'; put '* identify INSERTS. These are records with the same business key but'; put '* the bus_from and bus_to value are higher / lower (respectively)'; put '* such that the existing record needs to be SPLIT to surround the new'; put '* record.'; put '* eg: OLD RECORD from=1 to=10'; put '* NEW RECORD from=5 to=7'; put '*'; put '* APPENDED RECORDS:'; put '* - from=1 to=5'; put '* - from=5 to=7'; put '* - from=7 to=10'; put '*/'; put '/* inserts cannot happen with TXTEMPORAL */'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* IDENTIFY */'; put 'create table work.bitemp3_inserts as'; put 'select b.*'; put ',a.&bus_from as ___TMP___from'; put ',a.&bus_to as ___TMP___to'; put 'from work.bitemp0_append a'; put ',work.bitemp1_current b'; put 'where a.&bus_from > b.&bus_from'; put 'and a.&bus_to < b.&bus_to'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields may'; put 'not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '/* SPLIT */'; put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;'; put 'set work.bitemp3_inserts;'; put 'by &pk &bus_from &bus_to &processed;'; put 'if first.&idx_val then do;'; put '___TMP___retain=&bus_to;'; put '&bus_to=___TMP___from;'; put 'output;'; put '&bus_to=___TMP___retain;'; put 'end;'; put 'if last.&idx_val then do;'; put '&bus_from=___TMP___to;'; put 'output;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* TX temporal load */'; put 'data work.bitemp3a_inserts;'; put 'set work.bitemp1_current;'; put 'stop;'; put 'run;'; put '%end;'; put '/* APPEND */'; put 'proc sql;'; put 'create view work.bitemp3a_view as'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put 'data bitemp3b_newbase;'; put 'set work.bitemp3a_inserts work.bitemp3a_view;'; put 'run;'; put '/** do not use! this converts short numerics into 8 bytes'; put 'proc sql;'; put 'create table work.bitemp3b_newbase as'; put 'select * from work.bitemp3a_inserts'; put 'union corr'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put '*/'; put '/**'; put '* identify CHANGED records from staging.'; put '* Same business key with different temporal dates or md5 value'; put '* This table must be overlayed onto / into existing business history'; put '*/'; put 'proc sql;'; put 'create table work.bitemp4_updated as select distinct a.*'; put 'from work.bitemp0_append a'; put ',work.bitemp3b_newbase b'; put 'where 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'and ( a.&md5_col ne b.&md5_col'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)'; put '%end;'; put ')'; put ';'; put '/**'; put '* This section would have been one simple step with union all'; put '* but that converts short numerics into 8 bytes!'; put '* so, convoluted alternative to retain the same functionality.'; put '*/'; put '/* base records */'; put 'create view work.bitemp4_prep1 as'; put 'select ''BASE'' as ___TMP___'; put ',b.*'; put 'from work.bitemp4_updated a'; put ',work.bitemp3b_newbase b'; put 'where 1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put ';'; put '/* updated records */'; put 'create view work.bitemp4_prep2 as'; put 'select ''STAG'' as ___TMP___ ,*'; put 'from work.bitemp4_updated;'; put '/* ensure we only keep columns that appear in both */'; put '%local bp1 bp2 bp3 bp4;'; put '%let bp1=%mf_getvarlist(bitemp4_prep1);'; put '%let bp2=%mf_getvarlist(bitemp4_prep2);'; put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);'; put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);'; put 'data work.bitemp4_prep3/view=bitemp4_prep3;'; put 'set bitemp4_prep1 bitemp4_prep2;'; put '%if %length(XX&bp3&bp4)>2 %then %do;'; put 'drop &bp3 &bp4 ;'; put '%end;'; put 'run;'; put '/* remove duplicates */'; put 'proc sql;'; put 'create table work.bitemp4a_allrecs as'; put 'select distinct *'; put 'from work.bitemp4_prep3'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields'; put 'may not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* this section aligns the business dates'; put '(eg for inserts or overlaps in the range) */'; put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );'; put 'set work.bitemp4a_allrecs;'; put 'by &pk &bus_from &bus_to &processed;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '___TMP___md5lag=lag(&md5_col);'; put '/* reset retained variables */'; put 'if first.&idx_val then do;'; put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/'; put 'if &md5_col=___TMP___md5lag then do;'; put '&bus_from=___TMP___from;'; put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;'; put 'end;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 1'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 1'' then do;'; put '/* else ensure bus_from starts from prior record bus_to */'; put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to'; put 'then &bus_from= ___TMP___to;'; put '/* new record may replace old record entirely */'; put 'if &bus_to <= &bus_from then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* keep staged records only */'; put 'data work.bitemp4b_firstpass;'; put 'set work.bitemp4a_allrecs;'; put 'if ___TMP___=''STAG'';'; put 'run;'; put '%end;'; put '/* next phase is to pass through in reverse - so set up the sort statement */'; put '%local byvar;'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let byvar=&byvar descending %scan(&pk,&idx_pk);'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL'; put '%then %let byvar=&byvar descending &bus_from descending &bus_to;'; put '/* if matching bus dates supplied, need to ensure we also have a sort'; put 'between BASE and STAGING tables */'; put '%let byvar=&byvar descending ___TMP___;'; put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;'; put 'by &byvar;'; put 'run;'; put '/**'; put '* Now (in reverse) pass back business start dates'; put '*/'; put 'data work.bitemp4d_secondpass;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '&tech_from=&now;'; put '&tech_to=&high_date;'; put '%end;'; put 'set work.bitemp4c_sort ;'; put 'by &byvar;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* put / _all_ /;*/'; put '___TMP___md5lag=lag(&md5_col);'; put 'if first.&idx_val then do;'; put '/* reset retained variables */'; put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry back bus_to */'; put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 2'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 2'' then do;'; put '/* else ensure bus_to stops at subsequent record bus_from */'; put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from'; put 'then &bus_to= ___TMP___from;'; put '/* new record may replace old record entirely */'; put 'if &bus_from >= &bus_to then delete;'; put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put '%end;'; put 'run;'; put '%put syscc (line600)=&syscc;'; put '/**'; put 'There may still be some records (eg old business history) which have not'; put 'changed.'; put 'Need to identify these and remove from the append so they are not updated'; put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the'; put 'business key) and any matching / identical records are split out (from those'; put 'that need to be updated).'; put '*/'; put '%if &loadtype=BITEMPORAL %then %do;'; put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);'; put 'data work.bitemp5a_lkp (keep=&md5_col)'; put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'set work.bitemp0_base;'; put '/* for BITEMPORAL we need to compare business dates also */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);'; put 'run;'; put 'data bitemp5b_updates;'; put 'set bitemp4d_secondpass;'; put 'if _n_=1 then do;'; put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');'; put 'md5_lkp.definekey("&md5_col");'; put 'md5_lkp.definedone();'; put 'end;'; put '/* drop old md5 col as will rebuild with new business dates */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;'; put 'if md5_lkp.check()=0 then delete;'; put 'run;'; put 'proc sql;'; put '/* get min bus from as will update (close out) all records from this point'; put '(for that PK)*/'; put 'create table work.bitemp5d_subquery as'; put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to'; put 'from work.bitemp5b_updates'; put 'group by &pk_comma;'; put '/* index has a huge efficiency impact on upcoming nested subquery */'; put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);'; put '%let lastds=work.bitemp5b_updates;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put 'proc sql;'; put 'create table work.bitemp5d_subquery as'; put 'select distinct &pk_comma'; put 'from bitemp4d_secondpass;'; put '%let lastds=work.bitemp4d_secondpass;'; put '%end;'; put '%else %let lastds=work.bitemp4d_secondpass;'; put '/* create single append table (an overlapped pre-sert may be classed as'; put 'both an update AND a new record). Also create temp views that may be'; put 'used for pre-load analysis. */'; put 'data &outds_mod;'; put 'set &lastds(drop=___TMP___: &md5_col);'; put 'run;'; put 'data bitemp6_allrecs / view=bitemp6_allrecs;'; put 'set &outds_mod /* UPDATED records */'; put '&outds_add /* NEW records */;'; put 'run;'; put 'proc sort data=work.bitemp6_allrecs'; put 'out=work.bitemp6_unique'; put 'noduprec'; put 'dupout=work.xx_BADBADBAD;'; put 'by _all_;'; put 'run;'; put '/* we have all our temp tables now so exit if this is all that is needed */'; put '%if &LOADTARGET ne YES %then %return;'; put '/* also exit if an err condition exists */'; put '%if &syscc>0 %then %do;'; put '%put syscc=&syscc;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)'; put ')'; put '/* final check - abort if a lock has appeared on the target or audit table */'; put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)'; put '%if %mf_existds(&outds_audit) %then %do;'; put '%mp_lockfilecheck(libds=&outds_audit)'; put '%end;'; put '/**'; put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!'; put '*/'; put '/**'; put '* First, CLOSE OUT changed records (if not a REPLACE)'; put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.'; put '* However - this can be worked around using a nested subquery..'; put '*/'; put 'data _null_;'; put 'putlog "&sysmacroname: CLOSEOUTS commencing";'; put 'run;'; put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: No closeouts needed";'; put 'run;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(&loadtype not yet supported in CAS engine)'; put ')'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds;'; put 'set work.bitemp5d_subquery;'; put 'run;'; put '/* delete the records */'; put 'proc cas ;'; put 'table.deleteRows / table={'; put 'caslib="&base_lib",'; put 'name="&base_dsn",'; put 'where="1=1",'; put 'whereTable={caslib=''CASUSER'',name="&delds"}'; put '};'; put 'quit;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&delds;'; put '%end;'; put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)'; put '%then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";'; put 'run;'; put '%local flexinow;'; put 'proc sql;'; put '/* if OLEDB then create a temp table for efficiency */'; put '%local innertable;'; put '%if &engine_type=OLEDB %then %do;'; put '%let innertable=[&temp_table];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp5d_subquery;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);'; put '%let top_table=&baselib_schema.&base_dsn;'; put '%let flexinow=timestamp &SQLNOW;'; put '/* make empty table first - must clone & drop extra cols'; put 'as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;'; put '%end;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;'; put 'set work.bitemp5d_subquery;'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&innertable ('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put 'data=work.vw_bitemp5d force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %do;'; put '%let innertable=bitemp5d_subquery;'; put '%let top_table=&base_lib..&base_dsn;'; put '%let flexinow=&now;'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put 'update &top_table set &tech_to=&flexinow'; put '%if %length(&processed)>0 %then %do;'; put ',&processed=&flexinow'; put '%end;'; put 'where &tech_from <= &flexinow and &flexinow < &tech_to and'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '/* changed records are deleted then re-appended when doing UPDATEs */'; put 'delete from &top_table where'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;'; put '%let syscc=5;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%goto end_of_macro;'; put '%end;'; put '/* perform join inside query as per'; put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */'; put 'exists( select 1 from &baselib_schema.&innertable where'; put '/* loop PK join */'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put '&base_dsn..&idx_val=&innertable..&idx_val and'; put '%end;'; put '%if &loadtype=BITEMPORAL %then %do;'; put '&base_dsn..&bus_from >= &innertable..&bus_from'; put 'and &base_dsn..&bus_to <= &innertable..&bus_to and'; put '%end;'; put '/* close the statement */'; put '1=1);'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put ') by myAlias;'; put 'execute (drop table &baselib_schema.&innertable) by myAlias;'; put '%end;'; put '%end;'; put 'quit;'; put 'data _null_;'; put 'putlog "&sysmacroname: Closeout complete";'; put 'run;'; put '/**'; put '* Append the new / updated records'; put '*/'; put '%if &engine_type=CAS %then %do;'; put '/* get varchar variables ready for casting */'; put '%local vcfmt vcrename vcassign vcdrop;'; put 'data _null_;'; put 'set work.bitemp_cols(where=(type=6)) end=last;'; put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;'; put 'retain vcrename vcassign vcdrop vcfmt;'; put 'if _n_=1 then vcrename=''(rename=('';'; put 'rancol=resolve(''%mf_getuniquename()'');'; put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';'; put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);'; put 'vcassign=cats(vcassign,name,''='',rancol,'';'');'; put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');'; put 'if last then do;'; put 'vcrename=cats(vcrename,''))'');'; put 'call symputx(''vcfmt'',vcfmt);'; put 'call symputx(''vcrename'',vcrename);'; put 'call symputx(''vcassign'',vcassign);'; put 'call symputx(''vcdrop'',vcdrop);'; put 'end;'; put 'run;'; put '/* prepare a temp cas table with varchars casted */'; put '%let tmp=%mf_getuniquename();'; put 'data casuser.&tmp ;'; put '&vcfmt'; put 'set work.bitemp6_unique &vcrename;'; put '&vcassign'; put '&vcdrop'; put 'run;'; put '/* load the table with varchars applied*/'; put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;'; put 'set casuser.&tmp;'; put 'run;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&tmp;'; put '/* this code will not work as regular tables do not have varchars */'; put '/*'; put 'proc casutil;'; put 'load data=work.bitemp6_unique'; put 'outcaslib="&base_lib" casout="&base_dsn" append ;'; put 'quit;'; put '*/'; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put 'proc append base=&base_lib..&base_dsn'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=bitemp6_unique force nowarn;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;'; put '%end;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '/* final check on syscc */'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=&_program'; put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)'; put ')'; put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;'; put 'data work.vw_outds_orig /view=work.vw_outds_orig;'; put 'set work.bitemp0_base (drop=&md5_col);'; put 'where ___TMP___NEW_FLG=0;'; put 'drop ___TMP___NEW_FLG;'; put 'run;'; put '/* update the AUDIT table */'; put '%if %mf_existds(&outds_audit) %then %do;'; put 'options mprint;'; put '%mp_storediffs(&base_lib..&base_dsn'; put ',work.vw_outds_orig'; put ',&pk &bus_from'; put ',delds=&outds_del'; put ',modds=&outds_mod'; put ',appds=&outds_add'; put ',outds=work.mp_storediffs'; put ',processed_dttm=&now'; put ',loadref=%superq(etlsource)'; put ')'; put '/* exclude unchanged values in modified rows */'; put 'data work.mp_storediffs;'; put 'set work.mp_storediffs;'; put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;'; put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;'; put 'run;'; put 'proc append base=&outds_audit data=work.mp_storediffs;'; put 'run;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Problem in audit stage (&outds_audit))'; put ')'; put '%let user=%mf_getUser();'; put '/**'; put 'Notify as appropriate EMAILS DISABLED'; put '%sumo_alerts(ALERT_EVENT=UPDATE'; put ', ALERT_TARGET=&base_lib..&base_dsn'; put ', from_user= &user);'; put '*/'; put '/* monitor BiTemporal usage */'; put '%if &log=1 %then %do;'; put '%put syscc=&syscc;'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'insert into &dclib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&ETLSOURCE"'; put ',LOADTYPE="&loadtype"'; put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)'; put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)'; put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)'; put ',DURATION=&dur'; put ',MAC_VER="v&ver"'; put ',user_nm="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%put syscc=&syscc;'; put '%end;'; put '%end_of_macro:'; put '%mend bitemporal_dataloader;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getlibs;'; put '%macro mpe_refreshlibs(lib=0);'; put '%dc_getlibs(outds=work.mm_getLibs)'; put 'proc sort data=mm_getlibs;'; put 'by libraryref libraryname;'; put 'run;'; put 'data libs0;'; put 'set mm_getlibs;'; put 'by libraryref;'; put '%if &lib ne 0 %then %do;'; put 'where upcase(libraryref)="%upcase(&lib)";'; put '%end;'; put 'if "%mf_getplatform()"="SASMETA" then do;'; put '/* note - invalid libraries can result in exception errors. If this happens,'; put 'configure the dc_viewlib_check variable to NO in Data Controller Settings */'; put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));'; put 'drop rc;'; put 'if rc ne 0 then do;'; put 'putlog "NOTE: Library " libraryname " does not exist!!";'; put 'putlog (_all_) (=);'; put 'delete;'; put 'end;'; put 'end;'; put 'if not first.libraryref then delete;'; put 'run;'; put 'proc sql;'; put 'create table libs1 as'; put 'select distinct libname'; put ',engine'; put ',path'; put ',level'; put ',sysname'; put ',sysvalue'; put 'from dictionary.libnames'; put 'order by libname, level,engine,path;'; put 'data libs2;'; put 'set libs1;'; put 'length tran $1024;'; put 'if missing(sysname) then sysname=''Missing'';'; put 'select(sysname);'; put 'when(''Access Permission'') tran=''Permissions'';'; put 'when(''Owner Name'') tran=''Owner'';'; put 'when(''Schema/Owner'') tran=''schema'';'; put 'otherwise tran=sysname;'; put 'end;'; put 'run;'; put 'proc transpose data=libs2 out=libs3;'; put 'by libname level engine path;'; put 'var sysvalue;'; put 'id tran;'; put 'run;'; put 'data libs4(rename=(libname=libref));'; put 'length paths $8192 perms owners schemas $500 permissions owner schema $1024;'; put 'if _n_=1 then call missing (of _all_);'; put 'set libs3;'; put 'by libname;'; put 'if engine=''V9'' then engine=''BASE'';'; put 'if first.libname then do;'; put 'retain paths perms owners schemas;'; put 'paths=''(''!!quote(trim(path));'; put 'perms=permissions;'; put 'owners=owner;'; put 'schemas=schema;'; put 'end;'; put 'else do;'; put 'paths=trim(paths)!!'' ''!!quote(trim(path));'; put 'perms=trim(perms)!!'',''!!trim(permissions);'; put 'owners=trim(owners)!!'',''!!trim(owner);'; put 'schemas=trim(schemas)!!'' ''!!trim(schema);'; put 'end;'; put 'if last.libname then do;'; put 'paths=trim(paths)!!'')'';'; put 'schemas=cats(schemas);'; put 'output;'; put 'end;'; put 'keep libname engine paths perms owners schemas;'; put 'run;'; put 'proc sql;'; put 'create table libs5 as'; put 'select a.libref'; put ',coalescec(b.engine,a.engine) as engine length=32'; put ',b.libraryname as libname'; put ',a.paths'; put ',a.perms'; put ',a.owners'; put ',a.schemas'; put ',b.libraryid as libid'; put 'from libs4 a'; put 'left join libs0 b'; put 'on upcase(a.libref)=upcase(b.libraryref)'; put 'where libref not in (''SASWORK'',''WORK'',''SASUSER'',''CASUSER'',''TEMP'',''STPSAMP'''; put ',''MAPSGFK'');'; put '%bitemporal_dataloader(base_lib=&dc_libref'; put ',base_dsn=MPE_DATACATALOG_LIBS'; put ',append_dsn=libs5'; put ',PK=LIBREF'; put ',etlsource=&_program'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&dc_libref'; put ')'; put '%mend mpe_refreshlibs;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file refreshlibs.sas'; put '@brief Refreshes the library data catalog'; put '@details'; put '

SAS Macros

'; put '@li mpeinit.sas'; put '@li mpe_refreshlibs.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%mpe_refreshlibs()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=refreshtablelineage; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '/** @cond */'; put '%macro mf_existvar(libds /* 2 part dataset name */'; put ', var /* variable name */'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid=0 %then %do;'; put '%put %sysfunc(sysmsg());'; put '0'; put '%end;'; put '%else %if %length(&var)=0 %then %do;'; put '0'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%sysfunc(varnum(&dsid,&var))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_existvar;'; put '/** @endcond */'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro bitemporal_closeouts('; put 'tech_from=tx_from_dttm'; put ',tech_to = tx_to_dttm /* Technical TO datetime variable.'; put 'Req''d on BASE table only. */'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE /* Name of STAGING table. */'; put ',PK= name sex /* Business key, space separated. */'; put '/* Should INCLUDE BUS_FROM field if relevant. */'; put ',NOW=DEFINE'; put ',FILTER= /* supply a filter to limit the update */'; put ',outdest= /* supply an unquoted filepath/filename.ext to get'; put 'a text file containing the update statements */'; put ',loadtype='; put ',loadtarget=YES /* if <> YES will return without changing anything */'; put ');'; put '%put ENTERING &sysmacroname;'; put '%local x var start;'; put '%let start=%sysfunc(datetime());'; put '%dc_assignlib(WRITE,&base_lib)'; put '%dc_assignlib(WRITE,&append_lib)'; put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;'; put '%put &=now;'; put '/**'; put '* perform basic checks'; put '*/'; put '/* do tables exist? */'; put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;'; put '%mp_abort(msg=&base_lib..&base_dsn does not exist)'; put '%end;'; put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;'; put '%mp_abort(msg=&append_lib..&append_dsn does not exist)'; put '%end;'; put '/* do TX columns exist? */'; put '%if &loadtype ne UPDATE %then %do;'; put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;'; put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;'; put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%end;'; put '/* do PK columns exist? */'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)'; put '%end;'; put '%end;'; put '/* check uniqueness */'; put 'proc sort data=&append_lib..&append_dsn'; put 'out=___closeout1 noduprecs dupout=___closeout1a;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then'; put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);'; put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */'; put '%local gap;'; put '%let gap=0;'; put 'data _null_;'; put 'now=&now;'; put 'gap=intck(''HOURS'',now,datetime());'; put 'call symputx(''gap'',gap,''l'');'; put 'run;'; put '%mf_abort('; put 'iftrue=(&gap > 24),'; put 'msg=NOW variable (&now) is not within a 24hr tolerance'; put ')'; put '/* have any warnings / errs occurred thus far? If so, abort */'; put '%mf_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/**'; put '* Create closeout statements. These are sent as individual SQL statements'; put '* to ensure pass-through utilisation. The update_cnt variable monitors'; put '* how many records were actually updated on the target table.'; put '*/'; put '%local update_cnt;'; put '%let update_cnt=0;'; put 'filename tmp temp;'; put 'data _null_;'; put 'set ___closeout1;'; put 'file tmp;'; put 'if _n_=1 then put ''proc sql noprint;'' ;'; put 'length string $32767.;'; put '%if &loadtype=UPDATE %then %do;'; put 'put "delete from &base_lib..&base_dsn where 1";'; put '%end;'; put '%else %do;'; put 'now=symget(''now'');'; put 'put "update &base_lib..&base_dsn set &tech_to= " now @;'; put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;'; put 'put " ,PROCESSED_DTTM=" now @;'; put '%end;'; put 'put " where " now " lt &tech_to ";'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;'; put '/* use single quotes to avoid ampersand resolution in data */'; put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";'; put '%end;'; put '%else %do;'; put 'string=cats(" & &var=",&var);'; put '%end;'; put 'put string;'; put '%end;'; put 'put "&filter ;";'; put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';'; put 'run;'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%if &loadtarget ne YES %then %return;'; put '/* ensure we have a lock */'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn'; put ',ref=bitemporal_closeouts'; put ',ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'options source2;'; put '%inc tmp;'; put 'filename tmp clear;'; put '/**'; put '* Update audit tracker'; put '*/'; put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);'; put '%local user; %let user=%mf_getuser();'; put 'proc sql;'; put 'insert into &mpelib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"'; put ',LOADTYPE="CLOSEOUT"'; put ',DELETED_RECORDS=&update_cnt'; put ',NEW_RECORDS=0'; put ',DURATION=%sysfunc(datetime())-&start'; put ',USER_NM="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%mend bitemporal_closeouts;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=''Schema/Owner'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '/** @cond */'; put '%macro mp_storediffs(libds'; put ',origds'; put ',key'; put ',delds=0'; put ',appds=0'; put ',modds=0'; put ',outds=work.mp_storediffs'; put ',loadref=0'; put ',processed_dttm=0'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));'; put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));'; put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));'; put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));'; put '%let dslist=&origds;'; put '%if &delds ne 0 %then %do;'; put '%let delds=%upcase(&delds);'; put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;'; put '%let dslist=&dslist &delds;'; put '%end;'; put '%if &appds ne 0 %then %do;'; put '%let appds=%upcase(&appds);'; put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;'; put '%let dslist=&dslist &appds;'; put '%end;'; put '%if &modds ne 0 %then %do;'; put '%let modds=%upcase(&modds);'; put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;'; put '%let dslist=&dslist &modds;'; put '%end;'; put '%let origds=%upcase(&origds);'; put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;'; put '%let key=%upcase(&key);'; put '/* hash the key and append all the tables (marking the source) */'; put 'data &ds1;'; put 'set &dslist indsname=&inds_auto;'; put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);'; put '&inds_keep=upcase(&inds_auto);'; put 'proc sort;'; put 'by &inds_keep &hashkey;'; put 'run;'; put '/* transpose numeric & char vars */'; put 'proc transpose data=&ds1'; put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));'; put 'by &inds_keep &hashkey;'; put 'var _numeric_;'; put 'run;'; put 'proc transpose data=&ds1'; put 'out=&ds3('; put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)'; put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))'; put ');'; put 'by &inds_keep &hashkey;'; put 'var _character_;'; put 'run;'; put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;'; put '/* this is a format catalog - cannot query cols directly */'; put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"'; put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"'; put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";'; put '%end;'; put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);'; put 'data &ds4;'; put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;'; put 'if _n_=1 then call missing(_label_);'; put 'drop _label_;'; put 'set &ds2 &ds3 indsname=&inds_auto;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%upcase(&vlist));'; put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';'; put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;'; put 'call symputx(''syscc'',98);'; put 'end;'; put 'if &inds_keep="&appds" then move_type=''A'';'; put 'else if &inds_keep="&delds" then move_type=''D'';'; put 'else if &inds_keep="&modds" then move_type=''M'';'; put 'else if &inds_keep="&origds" then move_type=''O'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;'; put 'call symputx(''syscc'',99);'; put 'end;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;'; put 'else is_pk=0;'; put 'drop &inds_keep;'; put 'run;'; put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());'; put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);'; put '%let libds=%upcase(&libds);'; put '/* join orig vals for modified & deleted */'; put 'proc sql;'; put 'create table &outds as'; put 'select "&loadref" as load_ref length=36'; put ',&processed_dttm as processed_dttm format=E8601DT26.6'; put ',"%scan(&libds,1,.)" as libref length=8'; put ',"%scan(&libds,2,.)" as dsn length=32'; put ',b.key_hash length=32'; put ',b.move_type length=1'; put ',b.tgtvar_nm length=32'; put ',b.is_pk'; put ',case when b.move_type ne ''M'' then -1'; put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0'; put 'else 1'; put 'end as is_diff'; put ',b.tgtvar_type length=1'; put ',case when b.move_type=''D'' then b.newval_num'; put 'else a.newval_num'; put 'end as oldval_num format=best32.'; put ',case when b.move_type=''D'' then .'; put 'else b.newval_num'; put 'end as newval_num format=best32.'; put ',case when b.move_type=''D'' then b.newval_char'; put 'else a.newval_char'; put 'end as oldval_char length=32765'; put ',case when b.move_type=''D'' then '''''; put 'else b.newval_char'; put 'end as newval_char length=32765'; put 'from &ds4(where=(move_type=''O'')) as a'; put 'right join &ds4(where=(move_type ne ''O'')) as b'; put 'on a.tgtvar_nm=b.tgtvar_nm'; put 'and a.key_hash=b.key_hash'; put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4;'; put '%end;'; put '%mend mp_storediffs;'; put '/** @endcond */'; put '%macro bitemporal_dataloader('; put 'bus_from= /* Business FROM datetime variable. Req''d on'; put 'STAGING & BASE tables.*/'; put ',bus_to = /* Business TO datetime variable. Req''d on'; put 'STAGING & BASE tables. */'; put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/'; put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */'; put ',tech_from= /* Technical FROM datetime variable. Req''d on'; put 'BASE table only. */'; put ',tech_to = /* Technical TO datetime variable. Req''d on BASE'; put 'table only. */'; put ',processed= 0'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE'; put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */'; put ',PK= name sex'; put ',RK_UNDERLYING='; put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */'; put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular'; put 'SCD2 loader then set this switch to YES to'; put 'ensure the MAXKEYTABLE is updated with the'; put 'current maximum RK value for the target table'; put '*/'; put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is'; put 'unique on its business key */'; put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in'; put '&dclib..DATALOADS */'; put ',LOADTYPE=BITEMPORAL'; put ',RK_MAXKEYTABLE= mpe_maxkeyvalues'; put ',LOG=1 /* Switch to 0 to prevent records being added to'; put '&mpelib..mpe_DATALOADS (ie when testing)*/'; put ',DELETE_COL= _____DELETE__THIS__RECORD_____'; put '/* If this variable is found in the append dataset'; put 'then records are closed out (or deleted) in the'; put 'append table where that variable= "Yes" */'; put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off'; put 'target table load and generate temp tables only */'; put ',CLOSE_VARS='; put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is'; put 'no facility to close out removed records (all records are'; put 'assumed new or changed). But how does one determine which'; put 'records are removed? Short of loading the entire table'; put 'each time? This parameter allows a set of variables'; put '(this should be a subset of the PK) to be declared, and'; put 'the macro will determine which records in the base table'; put 'need to be closed out ahead of the load.'; put 'For instance, given the following:'; put 'Base Table Staging Table'; put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT'; put 'JAN ACME4 66 JAN ACME4 66'; put 'FEB ACME4 99 FEB ACME4 99'; put 'FEB ACME1 22'; put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,'; put 'the "FEB PAG 22" record would get closed out.'; put '*/'; put ',config_table=&dclib..MPE_CONFIG'; put ',dclib=&dc_libref'; put ',outds_del=work.outds_del'; put ',outds_add=work.outds_add'; put ',outds_mod=work.outds_mod'; put ',outds_audit=0'; put ');'; put '/* when changing this macro, update the version num here */'; put '%local ver;'; put '%let ver=32;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */'; put '/* return straight away if nothing to load */'; put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);'; put '%if &nobs=-1 %then %do;'; put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;'; put '%end;'; put '%if &nobs=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/* hard exit if err condition exists */'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)'; put ')'; put '%local engine_type;'; put '%let engine_type=%mf_getengine(&base_lib);'; put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0'; put '%then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/**'; put '* The metadata functions (eg mf_existvar) will fail if the base table has a'; put '* SAS lock. So, make a snapshot of the base table for further use.'; put '* Also, make output tables (regardless).'; put '*/'; put '%local basecopy;'; put '%let basecopy=%mf_getuniquename(prefix=basecopy);'; put 'data &basecopy &outds_mod &outds_add &outds_del;'; put 'set &base_lib..&base_dsn;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)'; put ')'; put '%local cols idx_pk md5_col ;'; put '%let md5_col=___TMP___md5;'; put '%let check_uniqueness=%upcase(&check_uniqueness);'; put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);'; put '%let high_date=%unquote(&high_date);'; put '%let loadtype=%upcase(&loadtype);'; put '/* ensure irrelevant variables are cleared */'; put '%if &loadtype=BUSTEMPORAL %then %do;'; put '%let tech_from=;'; put '%let tech_to=;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put '%let bus_from=;'; put '%let bus_to=;'; put '%end;'; put '/* ensure relevant variables are supplied */'; put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing BUS_FROM / BUS_TO)'; put ')'; put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing TECH_FROM / TECH_TO)'; put ')'; put '/**'; put '* drop any tables (may be defined as views or vice versa preventing overwrite)'; put '*/'; put '%mp_dropmembers(append bitemp0_append bitemp_cols)'; put '/* SQL Server requires its own time values */'; put '/* 9.2 will only give picture format down to seconds. 9.3 allows'; put 'milliseconds by using lower S and defining the decimal in the format name..*/'; put 'PROC FORMAT;'; put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put '%local dbnow;'; put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'data _null_;'; put '/* convert space separated macvar to comma separated for SQL processing */'; put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');'; put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');'; put 'now=&dbnow;'; put 'call symputx(''NOW'',now,''L'');'; put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');'; put 'length etlsource $100;'; put 'etlsource=subpad(symget(''etlsource''),1,100);'; put 'call symputx(''etlsource'',etlsource,''l'');'; put 'run;'; put '/**'; put '* Even if no PROCESSED var provided, assume that any variable named'; put '* PROCESSED_DTTM should be updated'; put '*/'; put '%if &processed=0 %then %do;'; put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)'; put '%then %let processed=PROCESSED_DTTM;'; put '%else %let processed=;'; put '%end;'; put '/* extract colnames for md5 creation / change tracking */'; put 'proc contents noprint data=&base_lib..&base_dsn'; put 'out=work.bitemp_cols (keep=name type length varnum format:);'; put 'run;'; put 'proc sql noprint;'; put 'select name into: cols separated by '','''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put 'else cats(''put(md5(trim(put(ifn(missing('''; put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end'; put 'into: stripcols separated by ''||'''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put '/* set default formats*/'; put '%let bus_from_fmt = datetime19.;'; put '%let bus_to_fmt = datetime19.;'; put '%let processed_fmt = datetime19.;'; put '%let tech_from_fmt = format=datetime19.;'; put '%let tech_to_fmt = format=datetime19.;'; put '%put &=stripcols;'; put '%put &=pk;'; put 'data _null_;'; put 'set work.bitemp_cols;'; put 'if type=2 or type=6 then do;'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'if format='''' then fmt=cats(length,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put 'if upcase(name)="%upcase(&bus_from)" then'; put 'call symputx(''bus_from_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&bus_to)" then'; put 'call symputx(''bus_to_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_from)" then'; put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_to)" then'; put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&processed)" then'; put 'call symputx(''processed_fmt'',fmt,''L'');'; put 'run;'; put '%if %index(%quote(&cols),___TMP___) %then %do;'; put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim('; put ') This may conflict with temp variable generation!!);'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);'; put '%let syscc=5;'; put '%return;'; put '%end;'; put '/* if transaction dates appear on the APPEND table, need to remove them */'; put '%local drop_tx_dates /* used in append table */'; put 'drop_tx_dates_noobs /* used to take the base table structure */;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)'; put '%then %let drop_tx_dates=&tech_from;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)'; put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;'; put '%if %length(%trim(&drop_tx_dates))>0'; put '%then %let drop_tx_dates=(drop=&drop_tx_dates);'; put '%if %mf_existvar(&basecopy, &tech_from)'; put '%then %let drop_tx_dates_noobs=&tech_from;'; put '%if %mf_existvar(&basecopy, &tech_to)'; put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;'; put '%if %length(%trim(&drop_tx_dates_noobs))>0'; put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);'; put '%else %let drop_tx_dates_noobs=(obs=0);'; put '/**'; put '* Lock the table. This is necessary as we are doing a two part update (first'; put '* closing records then appending new records). It is theoretically possible'; put '* that an upload may occur whilst preparing the staging tables. And the'; put '* staging tables are about to be prepared..'; put '*/'; put '%if &LOADTARGET = YES %then %do;'; put '%put locking &base_lib..&base_dsn;'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%put locking &outds_audit;'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put '/* not an actual load, so avoid updating the max key table in next step. */'; put '%let rk_update_maxkeytable=NO;'; put '%end;'; put '%if %length(&RK_UNDERLYING)>0 %then %do;'; put '%mp_retainedkey('; put 'base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=&append_lib'; put ',append_dsn=&append_dsn'; put ',retained_key=&pk'; put ',business_key=&rk_underlying'; put ',check_uniqueness=&CHECK_UNIQUENESS'; put ',outds=work.append'; put '%if &rk_update_maxkeytable=NO %then %do;'; put ',maxkeytable=0'; put '%end;'; put '%else %do;'; put ',maxkeytable=&dclib..&RK_MAXKEYTABLE'; put '%end;'; put ',locktable=&dclib..mpe_lockanytable'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',filter_str=%str( (where=( &now < &tech_to)) )'; put '%end;'; put ')'; put '%end;'; put '%else %do;'; put 'proc sql;'; put 'create view work.append as select * from &append_lib..&append_dsn;'; put '%end;'; put '/**'; put '* generate md5 for append table'; put '*/'; put '/* it is possible the source dataset has additional (unwanted) columns.'; put 'Drop if specified; */'; put '%if %length(&keepvars)>0 %then %do;'; put '/* remove tech dates from keepvars as they are generated later */'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));'; put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);'; put '%end;'; put '/* CAS varchar types cause append issues here, so perform autoconvert'; put 'by creating empty local table first */'; put 'data;'; put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;'; put 'run;'; put '%local emptybasetable; %let emptybasetable=&syslast;'; put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put '/* apply formats for bitemporal vars but not tx dates which are added later */'; put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;'; put 'format &bus_from &bus_from_fmt;'; put 'format &bus_to &bus_to_fmt;'; put '%end;'; put 'set &emptybasetable /* base table reqd in case append has fewer cols */'; put 'work.append &drop_tx_dates;'; put '%if %length(%str(&bus_from_override))>0 %then %do;'; put '&bus_from= %unquote(&bus_from_override) ;'; put '%end;'; put '%if %length(%str(&bus_to_override))>0 %then %do;'; put '&bus_to= %unquote(&bus_to_override) ;'; put '%end;'; put 'length &md5_col $32;'; put '&md5_col=put(md5(&stripcols),hex32.);'; put '%if %length(&processed)>0 %then %do;'; put 'format &processed &processed_fmt;'; put '&processed=&now;'; put '%end;'; put '/**'; put '* If a delete column exists then create the delete dataset'; put '*/'; put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;'; put 'drop &delete_col;'; put 'if upcase(&delete_col) = "YES" then output &outds_del ;'; put 'else output work.bitemp0_append ;'; put 'run;'; put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=%scan(&outds_del,-1,.)'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put 'output work.bitemp0_append;'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc gt 0 at line 494)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if %length(&close_vars)>0 %then %do;'; put '/**'; put '* need to close out records that are not provided'; put '*/'; put 'proc sql;'; put 'create table bitemp1_closevars1 as'; put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)'; put 'from &base_lib..&base_dsn a'; put 'inner join work.bitemp0_append b'; put 'on 1=1'; put '/* join on closevars key */'; put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));'; put '%let idx_val=%scan(&close_vars,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* filter base on tech dates if necessary */'; put '%if &loadtype=TXTEMPORAL %then %do;'; put 'where a.&tech_from <=&now and &now < a.&tech_to'; put '%end;'; put ';'; put 'create table bitemp1_closevars2 as'; put 'select distinct a.*'; put 'from bitemp1_closevars1 a'; put 'left join work.bitemp0_append b'; put 'on 1=1'; put '/* join on primary key */'; put '%do idx_pk=1 %to %sysfunc(countw(&pk));'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* identify removed records by null value in a field in PK but not close_vars'; put '*/'; put 'where b.%scan('; put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )'; put ') IS NULL'; put ';'; put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=bitemp1_closevars2'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '/* grab schema */'; put '%let baselib_schema=%mf_getschema(&base_lib);'; put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;'; put '/* grab redshift config */'; put '%local redcnt; %let redcnt=0;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'data _null_;'; put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));'; put 'x+1;'; put 'call symputx(cats(''rednm'',x),var_value,''l'');'; put 'call symputx(cats(''redval'',x),var_value,''l'');'; put 'call symputx(''redcnt'',x,''l'');'; put 'run;'; put '%end;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from &baselib_schema.&base_dsn'; put 'where timestamp &sqlnow < &tech_to );'; put '%else %let base_table=&baselib_schema.&base_dsn;'; put '/* make empty table first - must clone & drop extra cols as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &temp_table alter sortkey none) by myAlias;'; put '%end;'; put '%local dropcols;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(&pk)'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;'; put '%end;'; put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp0/view=work.vw_bitemp0;'; put 'set work.bitemp0_append(keep=&pk &md5_col);'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&temp_table'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=work.vw_bitemp0 force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);'; put 'data &temp_table;'; put 'set work.bitemp0_append;'; put 'run;'; put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);'; put 'proc fedsql sessref=dcsession;'; put 'create table &bitemp0base{options replace=true} as'; put '%end;'; put '%else %do;'; put '%let temp_table=work.bitemp0_append;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put 'proc sql;'; put 'create table work.bitemp0_base as'; put '%end;'; put 'select a.&md5_col /* this identifies NEW records */'; put ', b.*'; put '/* assume first PK field cannot be null (if defined in a PK constraint then'; put 'it definitely cannot be null) */'; put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG'; put 'from &baselib_schema.&temp_table a'; put 'left join &base_table b'; put 'on 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put '); proc sql; drop table &base_lib.."&temp_table"n;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put ';'; put 'quit;'; put 'data work.bitemp0_base;'; put 'set &bitemp0base;'; put 'run;'; put 'proc sql;'; put 'drop table &temp_table;'; put 'drop table &bitemp0base;'; put '%end;'; put '%else %do;'; put ';'; put '%end;'; put '/**'; put '* matching & changed records are those without NULL key values'; put '* &idx_val resolves to rightmost PK value (loop above)'; put '*/'; put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;'; put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)'; put ')'; put '%put hashcols2=&stripcols;'; put 'proc sql;'; put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as'; put 'select *'; put ', put(md5(&stripcols),$hex32.) as &md5_col'; put 'from work.bitemp0_base (drop=&md5_col)'; put 'where ___TMP___NEW_FLG=0;'; put '/**'; put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base'; put '*/'; put 'proc sql;'; put 'create table &outds_add'; put '(drop=&md5_col'; put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;'; put '&delete_col'; put '%end;'; put ')'; put 'as select a.*'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',&now as &tech_from &tech_from_fmt'; put ',&high_date as &tech_to &tech_to_fmt'; put '%end;'; put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */'; put ', work.bitemp0_base b /* BASE records (contains null values for new) */'; put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */'; put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */'; put '/**'; put '* identify INSERTS. These are records with the same business key but'; put '* the bus_from and bus_to value are higher / lower (respectively)'; put '* such that the existing record needs to be SPLIT to surround the new'; put '* record.'; put '* eg: OLD RECORD from=1 to=10'; put '* NEW RECORD from=5 to=7'; put '*'; put '* APPENDED RECORDS:'; put '* - from=1 to=5'; put '* - from=5 to=7'; put '* - from=7 to=10'; put '*/'; put '/* inserts cannot happen with TXTEMPORAL */'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* IDENTIFY */'; put 'create table work.bitemp3_inserts as'; put 'select b.*'; put ',a.&bus_from as ___TMP___from'; put ',a.&bus_to as ___TMP___to'; put 'from work.bitemp0_append a'; put ',work.bitemp1_current b'; put 'where a.&bus_from > b.&bus_from'; put 'and a.&bus_to < b.&bus_to'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields may'; put 'not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '/* SPLIT */'; put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;'; put 'set work.bitemp3_inserts;'; put 'by &pk &bus_from &bus_to &processed;'; put 'if first.&idx_val then do;'; put '___TMP___retain=&bus_to;'; put '&bus_to=___TMP___from;'; put 'output;'; put '&bus_to=___TMP___retain;'; put 'end;'; put 'if last.&idx_val then do;'; put '&bus_from=___TMP___to;'; put 'output;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* TX temporal load */'; put 'data work.bitemp3a_inserts;'; put 'set work.bitemp1_current;'; put 'stop;'; put 'run;'; put '%end;'; put '/* APPEND */'; put 'proc sql;'; put 'create view work.bitemp3a_view as'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put 'data bitemp3b_newbase;'; put 'set work.bitemp3a_inserts work.bitemp3a_view;'; put 'run;'; put '/** do not use! this converts short numerics into 8 bytes'; put 'proc sql;'; put 'create table work.bitemp3b_newbase as'; put 'select * from work.bitemp3a_inserts'; put 'union corr'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put '*/'; put '/**'; put '* identify CHANGED records from staging.'; put '* Same business key with different temporal dates or md5 value'; put '* This table must be overlayed onto / into existing business history'; put '*/'; put 'proc sql;'; put 'create table work.bitemp4_updated as select distinct a.*'; put 'from work.bitemp0_append a'; put ',work.bitemp3b_newbase b'; put 'where 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'and ( a.&md5_col ne b.&md5_col'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)'; put '%end;'; put ')'; put ';'; put '/**'; put '* This section would have been one simple step with union all'; put '* but that converts short numerics into 8 bytes!'; put '* so, convoluted alternative to retain the same functionality.'; put '*/'; put '/* base records */'; put 'create view work.bitemp4_prep1 as'; put 'select ''BASE'' as ___TMP___'; put ',b.*'; put 'from work.bitemp4_updated a'; put ',work.bitemp3b_newbase b'; put 'where 1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put ';'; put '/* updated records */'; put 'create view work.bitemp4_prep2 as'; put 'select ''STAG'' as ___TMP___ ,*'; put 'from work.bitemp4_updated;'; put '/* ensure we only keep columns that appear in both */'; put '%local bp1 bp2 bp3 bp4;'; put '%let bp1=%mf_getvarlist(bitemp4_prep1);'; put '%let bp2=%mf_getvarlist(bitemp4_prep2);'; put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);'; put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);'; put 'data work.bitemp4_prep3/view=bitemp4_prep3;'; put 'set bitemp4_prep1 bitemp4_prep2;'; put '%if %length(XX&bp3&bp4)>2 %then %do;'; put 'drop &bp3 &bp4 ;'; put '%end;'; put 'run;'; put '/* remove duplicates */'; put 'proc sql;'; put 'create table work.bitemp4a_allrecs as'; put 'select distinct *'; put 'from work.bitemp4_prep3'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields'; put 'may not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* this section aligns the business dates'; put '(eg for inserts or overlaps in the range) */'; put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );'; put 'set work.bitemp4a_allrecs;'; put 'by &pk &bus_from &bus_to &processed;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '___TMP___md5lag=lag(&md5_col);'; put '/* reset retained variables */'; put 'if first.&idx_val then do;'; put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/'; put 'if &md5_col=___TMP___md5lag then do;'; put '&bus_from=___TMP___from;'; put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;'; put 'end;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 1'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 1'' then do;'; put '/* else ensure bus_from starts from prior record bus_to */'; put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to'; put 'then &bus_from= ___TMP___to;'; put '/* new record may replace old record entirely */'; put 'if &bus_to <= &bus_from then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* keep staged records only */'; put 'data work.bitemp4b_firstpass;'; put 'set work.bitemp4a_allrecs;'; put 'if ___TMP___=''STAG'';'; put 'run;'; put '%end;'; put '/* next phase is to pass through in reverse - so set up the sort statement */'; put '%local byvar;'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let byvar=&byvar descending %scan(&pk,&idx_pk);'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL'; put '%then %let byvar=&byvar descending &bus_from descending &bus_to;'; put '/* if matching bus dates supplied, need to ensure we also have a sort'; put 'between BASE and STAGING tables */'; put '%let byvar=&byvar descending ___TMP___;'; put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;'; put 'by &byvar;'; put 'run;'; put '/**'; put '* Now (in reverse) pass back business start dates'; put '*/'; put 'data work.bitemp4d_secondpass;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '&tech_from=&now;'; put '&tech_to=&high_date;'; put '%end;'; put 'set work.bitemp4c_sort ;'; put 'by &byvar;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* put / _all_ /;*/'; put '___TMP___md5lag=lag(&md5_col);'; put 'if first.&idx_val then do;'; put '/* reset retained variables */'; put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry back bus_to */'; put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 2'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 2'' then do;'; put '/* else ensure bus_to stops at subsequent record bus_from */'; put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from'; put 'then &bus_to= ___TMP___from;'; put '/* new record may replace old record entirely */'; put 'if &bus_from >= &bus_to then delete;'; put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put '%end;'; put 'run;'; put '%put syscc (line600)=&syscc;'; put '/**'; put 'There may still be some records (eg old business history) which have not'; put 'changed.'; put 'Need to identify these and remove from the append so they are not updated'; put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the'; put 'business key) and any matching / identical records are split out (from those'; put 'that need to be updated).'; put '*/'; put '%if &loadtype=BITEMPORAL %then %do;'; put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);'; put 'data work.bitemp5a_lkp (keep=&md5_col)'; put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'set work.bitemp0_base;'; put '/* for BITEMPORAL we need to compare business dates also */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);'; put 'run;'; put 'data bitemp5b_updates;'; put 'set bitemp4d_secondpass;'; put 'if _n_=1 then do;'; put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');'; put 'md5_lkp.definekey("&md5_col");'; put 'md5_lkp.definedone();'; put 'end;'; put '/* drop old md5 col as will rebuild with new business dates */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;'; put 'if md5_lkp.check()=0 then delete;'; put 'run;'; put 'proc sql;'; put '/* get min bus from as will update (close out) all records from this point'; put '(for that PK)*/'; put 'create table work.bitemp5d_subquery as'; put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to'; put 'from work.bitemp5b_updates'; put 'group by &pk_comma;'; put '/* index has a huge efficiency impact on upcoming nested subquery */'; put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);'; put '%let lastds=work.bitemp5b_updates;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put 'proc sql;'; put 'create table work.bitemp5d_subquery as'; put 'select distinct &pk_comma'; put 'from bitemp4d_secondpass;'; put '%let lastds=work.bitemp4d_secondpass;'; put '%end;'; put '%else %let lastds=work.bitemp4d_secondpass;'; put '/* create single append table (an overlapped pre-sert may be classed as'; put 'both an update AND a new record). Also create temp views that may be'; put 'used for pre-load analysis. */'; put 'data &outds_mod;'; put 'set &lastds(drop=___TMP___: &md5_col);'; put 'run;'; put 'data bitemp6_allrecs / view=bitemp6_allrecs;'; put 'set &outds_mod /* UPDATED records */'; put '&outds_add /* NEW records */;'; put 'run;'; put 'proc sort data=work.bitemp6_allrecs'; put 'out=work.bitemp6_unique'; put 'noduprec'; put 'dupout=work.xx_BADBADBAD;'; put 'by _all_;'; put 'run;'; put '/* we have all our temp tables now so exit if this is all that is needed */'; put '%if &LOADTARGET ne YES %then %return;'; put '/* also exit if an err condition exists */'; put '%if &syscc>0 %then %do;'; put '%put syscc=&syscc;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)'; put ')'; put '/* final check - abort if a lock has appeared on the target or audit table */'; put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)'; put '%if %mf_existds(&outds_audit) %then %do;'; put '%mp_lockfilecheck(libds=&outds_audit)'; put '%end;'; put '/**'; put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!'; put '*/'; put '/**'; put '* First, CLOSE OUT changed records (if not a REPLACE)'; put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.'; put '* However - this can be worked around using a nested subquery..'; put '*/'; put 'data _null_;'; put 'putlog "&sysmacroname: CLOSEOUTS commencing";'; put 'run;'; put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: No closeouts needed";'; put 'run;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(&loadtype not yet supported in CAS engine)'; put ')'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds;'; put 'set work.bitemp5d_subquery;'; put 'run;'; put '/* delete the records */'; put 'proc cas ;'; put 'table.deleteRows / table={'; put 'caslib="&base_lib",'; put 'name="&base_dsn",'; put 'where="1=1",'; put 'whereTable={caslib=''CASUSER'',name="&delds"}'; put '};'; put 'quit;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&delds;'; put '%end;'; put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)'; put '%then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";'; put 'run;'; put '%local flexinow;'; put 'proc sql;'; put '/* if OLEDB then create a temp table for efficiency */'; put '%local innertable;'; put '%if &engine_type=OLEDB %then %do;'; put '%let innertable=[&temp_table];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp5d_subquery;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);'; put '%let top_table=&baselib_schema.&base_dsn;'; put '%let flexinow=timestamp &SQLNOW;'; put '/* make empty table first - must clone & drop extra cols'; put 'as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;'; put '%end;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;'; put 'set work.bitemp5d_subquery;'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&innertable ('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put 'data=work.vw_bitemp5d force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %do;'; put '%let innertable=bitemp5d_subquery;'; put '%let top_table=&base_lib..&base_dsn;'; put '%let flexinow=&now;'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put 'update &top_table set &tech_to=&flexinow'; put '%if %length(&processed)>0 %then %do;'; put ',&processed=&flexinow'; put '%end;'; put 'where &tech_from <= &flexinow and &flexinow < &tech_to and'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '/* changed records are deleted then re-appended when doing UPDATEs */'; put 'delete from &top_table where'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;'; put '%let syscc=5;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%goto end_of_macro;'; put '%end;'; put '/* perform join inside query as per'; put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */'; put 'exists( select 1 from &baselib_schema.&innertable where'; put '/* loop PK join */'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put '&base_dsn..&idx_val=&innertable..&idx_val and'; put '%end;'; put '%if &loadtype=BITEMPORAL %then %do;'; put '&base_dsn..&bus_from >= &innertable..&bus_from'; put 'and &base_dsn..&bus_to <= &innertable..&bus_to and'; put '%end;'; put '/* close the statement */'; put '1=1);'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put ') by myAlias;'; put 'execute (drop table &baselib_schema.&innertable) by myAlias;'; put '%end;'; put '%end;'; put 'quit;'; put 'data _null_;'; put 'putlog "&sysmacroname: Closeout complete";'; put 'run;'; put '/**'; put '* Append the new / updated records'; put '*/'; put '%if &engine_type=CAS %then %do;'; put '/* get varchar variables ready for casting */'; put '%local vcfmt vcrename vcassign vcdrop;'; put 'data _null_;'; put 'set work.bitemp_cols(where=(type=6)) end=last;'; put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;'; put 'retain vcrename vcassign vcdrop vcfmt;'; put 'if _n_=1 then vcrename=''(rename=('';'; put 'rancol=resolve(''%mf_getuniquename()'');'; put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';'; put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);'; put 'vcassign=cats(vcassign,name,''='',rancol,'';'');'; put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');'; put 'if last then do;'; put 'vcrename=cats(vcrename,''))'');'; put 'call symputx(''vcfmt'',vcfmt);'; put 'call symputx(''vcrename'',vcrename);'; put 'call symputx(''vcassign'',vcassign);'; put 'call symputx(''vcdrop'',vcdrop);'; put 'end;'; put 'run;'; put '/* prepare a temp cas table with varchars casted */'; put '%let tmp=%mf_getuniquename();'; put 'data casuser.&tmp ;'; put '&vcfmt'; put 'set work.bitemp6_unique &vcrename;'; put '&vcassign'; put '&vcdrop'; put 'run;'; put '/* load the table with varchars applied*/'; put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;'; put 'set casuser.&tmp;'; put 'run;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&tmp;'; put '/* this code will not work as regular tables do not have varchars */'; put '/*'; put 'proc casutil;'; put 'load data=work.bitemp6_unique'; put 'outcaslib="&base_lib" casout="&base_dsn" append ;'; put 'quit;'; put '*/'; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put 'proc append base=&base_lib..&base_dsn'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=bitemp6_unique force nowarn;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;'; put '%end;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '/* final check on syscc */'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=&_program'; put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)'; put ')'; put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;'; put 'data work.vw_outds_orig /view=work.vw_outds_orig;'; put 'set work.bitemp0_base (drop=&md5_col);'; put 'where ___TMP___NEW_FLG=0;'; put 'drop ___TMP___NEW_FLG;'; put 'run;'; put '/* update the AUDIT table */'; put '%if %mf_existds(&outds_audit) %then %do;'; put 'options mprint;'; put '%mp_storediffs(&base_lib..&base_dsn'; put ',work.vw_outds_orig'; put ',&pk &bus_from'; put ',delds=&outds_del'; put ',modds=&outds_mod'; put ',appds=&outds_add'; put ',outds=work.mp_storediffs'; put ',processed_dttm=&now'; put ',loadref=%superq(etlsource)'; put ')'; put '/* exclude unchanged values in modified rows */'; put 'data work.mp_storediffs;'; put 'set work.mp_storediffs;'; put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;'; put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;'; put 'run;'; put 'proc append base=&outds_audit data=work.mp_storediffs;'; put 'run;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Problem in audit stage (&outds_audit))'; put ')'; put '%let user=%mf_getUser();'; put '/**'; put 'Notify as appropriate EMAILS DISABLED'; put '%sumo_alerts(ALERT_EVENT=UPDATE'; put ', ALERT_TARGET=&base_lib..&base_dsn'; put ', from_user= &user);'; put '*/'; put '/* monitor BiTemporal usage */'; put '%if &log=1 %then %do;'; put '%put syscc=&syscc;'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'insert into &dclib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&ETLSOURCE"'; put ',LOADTYPE="&loadtype"'; put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)'; put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)'; put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)'; put ',DURATION=&dur'; put ',MAC_VER="v&ver"'; put ',user_nm="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%put syscc=&syscc;'; put '%end;'; put '%end_of_macro:'; put '%mend bitemporal_dataloader;'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file refreshtablelineage.sas'; put '@brief updates the table level lineage'; put '@details extracts all sources/targets from every job'; put '

SAS Macros

'; put '@li mpeinit.sas'; put '@li bitemporal_dataloader.sas'; put '@li mp_binarycopy.sas'; put '@li mf_getuniquefileref.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '/* get list of libraries */'; put '%let fileref1=%mf_getuniquefileref();'; put 'filename &fileref1 temp;'; put 'proc metadata in='; put '"$METAREPOSITORY'; put 'JobSAS'; put ''; put '8452'; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put '"'; put 'out=&fileref1'; put ';'; put 'run;'; put '/* create an XML map and extract dependencies from response */'; put '%macro getTables(type=);'; put '%local x;'; put '%do x=1 %to 2;'; put '%local dir;'; put '%if &x=1 %then %let dir=Source;'; put '%else %let dir=Target;'; put '%local y;'; put '%do y=1 %to 3;'; put '%local maptype;'; put '%if &y=1 %then %let maptype=ClassifierMap;'; put '%else %if &y=2 %then %let maptype=Select;'; put '%else %if &y=3 %then %let maptype=Join;'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "";'; put 'put "";'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities/TransformationActivi"@;'; put 'put "ty/Steps/TransformationStep/Transformations/&maptype/Classifier"@;'; put 'put "&dir.s/&type";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/@Name";'; put 'put "characterstring128";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities"@;'; put 'put "/TransformationActivity/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities"@;'; put 'put "/TransformationActivity/Steps/TransformationStep/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities"@;'; put 'put "/TransformationActivity/Steps/TransformationStep/Transformations"@;'; put 'put "/&maptype/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put "";'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities"@;'; put 'put "/TransformationActivity/Steps/TransformationStep/Transformations/"@;'; put 'put "&maptype/Classifier&dir.s/&type/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=&fileref1 xmlmap=sxlemap;'; put 'data work.&dir.&type/view=work.&dir.&type;'; put 'set _xml_.&dir.&type;'; put 'length tabletype maptype $16 tabledirection $1;'; put 'jobname=upcase(jobname);'; put 'tabletype="&type";'; put 'maptype="&maptype";'; put 'if "&dir"="Source" then tabledirection="R";'; put 'else tabledirection=''F'';'; put 'run;'; put 'proc append base=work.alldata data=work.&dir.&type;'; put 'run;'; put 'libname _XML_ clear;'; put '%end;'; put '%end;'; put '%mend getTables;'; put '/* list of types:'; put 'https://support.sas.com/documentation/cdl/en/omamodref/63903/HTML/default/viewer.htm#classifiermap.htm'; put '*/'; put '%getTables(type=PhysicalTable)'; put '%getTables(type=ExternalTable)'; put '%getTables(type=QueryTable)'; put '%getTables(type=RelationalTable)'; put '%getTables(type=Report)'; put '%getTables(type=Cube)'; put '%getTables(type=DataTable)'; put '/* remove dups and get tables */'; put 'proc sort data=work.alldata(keep=jobid jobname tableid tabletype tabledirection)'; put 'out=work.sorted nodupkey;'; put 'by _all_;'; put 'run;'; put 'proc sort data=work.sorted(keep=tableid) out=work.tables nodupkey;'; put 'by tableid;'; put 'run;'; put '/* this bit is slow due to lookups but given the different table types'; put 'it was the easiest approach */'; put 'data work.tables2;'; put 'length tablename liburi puri $64 libref schemaname $8 ;'; put 'if _n_=1 then call missing(tablename, liburi, puri, libref, schemaname);'; put 'set work.tables;'; put 'drop rc liburi;'; put 'if metadata_getnasn(tableid,"TablePackage",1,liburi)>0 then do;'; put 'rc= metadata_getattr(liburi, "SchemaName", SchemaName);'; put 'if ^missing(SchemaName) then do;'; put 'if metadata_getnasn(liburi,"UsedByPackages",1,puri)>0 then do;'; put 'rc=metadata_getattr(puri,"Libref",libref);'; put 'end;'; put 'end;'; put 'else rc=metadata_getattr(liburi,"Libref",libref);'; put 'libref=upcase(libref);'; put 'end;'; put 'rc=metadata_getattr(tableid,"Name",tablename);'; put 'tablename=upcase(tablename);'; put 'run;'; put 'proc sql;'; put 'create table work.augmented as'; put 'select a.*'; put ',b.tablename'; put ',b.libref'; put 'from work.sorted a'; put 'left join work.tables2 b'; put 'on a.tableid=b.tableid;'; put 'create table work.mpe_lineage_tabs as'; put 'select distinct'; put 'coalesce(a.jobid,b.jobid) as jobid,'; put 'coalesce(a.jobname,b.jobname) as jobname,'; put 'coalesce(a.tableid,"N/A") as srctableid,'; put 'a.tabletype as srctabletype,'; put 'a.tablename as srctablename,'; put 'coalesce(a.libref,''nolib'') as srclibref,'; put 'coalesce(b.tableid,"N/A") as tgttableid,'; put 'b.tabletype as tgttabletype,'; put 'b.tablename as tgttablename,'; put 'coalesce(b.libref,''nolib'') as tgtlibref'; put 'from work.augmented(where=(tabledirection=''R'')) a'; put 'full join work.augmented(where=(tabledirection=''F'')) b'; put 'on a.jobid=b.jobid'; put ';'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=MPE_LINEAGE_TABS'; put ',append_dsn=MPE_LINEAGE_TABS'; put ',PK=jobid srctableid tgttableid'; put ',etlsource=&_program'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&mpelib'; put ')'; put '%mp_binarycopy(inref=&fileref1, outref=_webout)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=registerkey; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '/** @cond */'; put '%macro mf_existvar(libds /* 2 part dataset name */'; put ', var /* variable name */'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid=0 %then %do;'; put '%put %sysfunc(sysmsg());'; put '0'; put '%end;'; put '%else %if %length(&var)=0 %then %do;'; put '0'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%sysfunc(varnum(&dsid,&var))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_existvar;'; put '/** @endcond */'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro bitemporal_closeouts('; put 'tech_from=tx_from_dttm'; put ',tech_to = tx_to_dttm /* Technical TO datetime variable.'; put 'Req''d on BASE table only. */'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE /* Name of STAGING table. */'; put ',PK= name sex /* Business key, space separated. */'; put '/* Should INCLUDE BUS_FROM field if relevant. */'; put ',NOW=DEFINE'; put ',FILTER= /* supply a filter to limit the update */'; put ',outdest= /* supply an unquoted filepath/filename.ext to get'; put 'a text file containing the update statements */'; put ',loadtype='; put ',loadtarget=YES /* if <> YES will return without changing anything */'; put ');'; put '%put ENTERING &sysmacroname;'; put '%local x var start;'; put '%let start=%sysfunc(datetime());'; put '%dc_assignlib(WRITE,&base_lib)'; put '%dc_assignlib(WRITE,&append_lib)'; put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;'; put '%put &=now;'; put '/**'; put '* perform basic checks'; put '*/'; put '/* do tables exist? */'; put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;'; put '%mp_abort(msg=&base_lib..&base_dsn does not exist)'; put '%end;'; put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;'; put '%mp_abort(msg=&append_lib..&append_dsn does not exist)'; put '%end;'; put '/* do TX columns exist? */'; put '%if &loadtype ne UPDATE %then %do;'; put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;'; put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;'; put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%end;'; put '/* do PK columns exist? */'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)'; put '%end;'; put '%end;'; put '/* check uniqueness */'; put 'proc sort data=&append_lib..&append_dsn'; put 'out=___closeout1 noduprecs dupout=___closeout1a;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then'; put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);'; put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */'; put '%local gap;'; put '%let gap=0;'; put 'data _null_;'; put 'now=&now;'; put 'gap=intck(''HOURS'',now,datetime());'; put 'call symputx(''gap'',gap,''l'');'; put 'run;'; put '%mf_abort('; put 'iftrue=(&gap > 24),'; put 'msg=NOW variable (&now) is not within a 24hr tolerance'; put ')'; put '/* have any warnings / errs occurred thus far? If so, abort */'; put '%mf_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/**'; put '* Create closeout statements. These are sent as individual SQL statements'; put '* to ensure pass-through utilisation. The update_cnt variable monitors'; put '* how many records were actually updated on the target table.'; put '*/'; put '%local update_cnt;'; put '%let update_cnt=0;'; put 'filename tmp temp;'; put 'data _null_;'; put 'set ___closeout1;'; put 'file tmp;'; put 'if _n_=1 then put ''proc sql noprint;'' ;'; put 'length string $32767.;'; put '%if &loadtype=UPDATE %then %do;'; put 'put "delete from &base_lib..&base_dsn where 1";'; put '%end;'; put '%else %do;'; put 'now=symget(''now'');'; put 'put "update &base_lib..&base_dsn set &tech_to= " now @;'; put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;'; put 'put " ,PROCESSED_DTTM=" now @;'; put '%end;'; put 'put " where " now " lt &tech_to ";'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;'; put '/* use single quotes to avoid ampersand resolution in data */'; put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";'; put '%end;'; put '%else %do;'; put 'string=cats(" & &var=",&var);'; put '%end;'; put 'put string;'; put '%end;'; put 'put "&filter ;";'; put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';'; put 'run;'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%if &loadtarget ne YES %then %return;'; put '/* ensure we have a lock */'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn'; put ',ref=bitemporal_closeouts'; put ',ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'options source2;'; put '%inc tmp;'; put 'filename tmp clear;'; put '/**'; put '* Update audit tracker'; put '*/'; put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);'; put '%local user; %let user=%mf_getuser();'; put 'proc sql;'; put 'insert into &mpelib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"'; put ',LOADTYPE="CLOSEOUT"'; put ',DELETED_RECORDS=&update_cnt'; put ',NEW_RECORDS=0'; put ',DURATION=%sysfunc(datetime())-&start'; put ',USER_NM="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%mend bitemporal_closeouts;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=''Schema/Owner'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '/** @cond */'; put '%macro mp_storediffs(libds'; put ',origds'; put ',key'; put ',delds=0'; put ',appds=0'; put ',modds=0'; put ',outds=work.mp_storediffs'; put ',loadref=0'; put ',processed_dttm=0'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));'; put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));'; put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));'; put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));'; put '%let dslist=&origds;'; put '%if &delds ne 0 %then %do;'; put '%let delds=%upcase(&delds);'; put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;'; put '%let dslist=&dslist &delds;'; put '%end;'; put '%if &appds ne 0 %then %do;'; put '%let appds=%upcase(&appds);'; put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;'; put '%let dslist=&dslist &appds;'; put '%end;'; put '%if &modds ne 0 %then %do;'; put '%let modds=%upcase(&modds);'; put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;'; put '%let dslist=&dslist &modds;'; put '%end;'; put '%let origds=%upcase(&origds);'; put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;'; put '%let key=%upcase(&key);'; put '/* hash the key and append all the tables (marking the source) */'; put 'data &ds1;'; put 'set &dslist indsname=&inds_auto;'; put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);'; put '&inds_keep=upcase(&inds_auto);'; put 'proc sort;'; put 'by &inds_keep &hashkey;'; put 'run;'; put '/* transpose numeric & char vars */'; put 'proc transpose data=&ds1'; put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));'; put 'by &inds_keep &hashkey;'; put 'var _numeric_;'; put 'run;'; put 'proc transpose data=&ds1'; put 'out=&ds3('; put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)'; put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))'; put ');'; put 'by &inds_keep &hashkey;'; put 'var _character_;'; put 'run;'; put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;'; put '/* this is a format catalog - cannot query cols directly */'; put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"'; put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"'; put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";'; put '%end;'; put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);'; put 'data &ds4;'; put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;'; put 'if _n_=1 then call missing(_label_);'; put 'drop _label_;'; put 'set &ds2 &ds3 indsname=&inds_auto;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%upcase(&vlist));'; put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';'; put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;'; put 'call symputx(''syscc'',98);'; put 'end;'; put 'if &inds_keep="&appds" then move_type=''A'';'; put 'else if &inds_keep="&delds" then move_type=''D'';'; put 'else if &inds_keep="&modds" then move_type=''M'';'; put 'else if &inds_keep="&origds" then move_type=''O'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;'; put 'call symputx(''syscc'',99);'; put 'end;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;'; put 'else is_pk=0;'; put 'drop &inds_keep;'; put 'run;'; put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());'; put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);'; put '%let libds=%upcase(&libds);'; put '/* join orig vals for modified & deleted */'; put 'proc sql;'; put 'create table &outds as'; put 'select "&loadref" as load_ref length=36'; put ',&processed_dttm as processed_dttm format=E8601DT26.6'; put ',"%scan(&libds,1,.)" as libref length=8'; put ',"%scan(&libds,2,.)" as dsn length=32'; put ',b.key_hash length=32'; put ',b.move_type length=1'; put ',b.tgtvar_nm length=32'; put ',b.is_pk'; put ',case when b.move_type ne ''M'' then -1'; put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0'; put 'else 1'; put 'end as is_diff'; put ',b.tgtvar_type length=1'; put ',case when b.move_type=''D'' then b.newval_num'; put 'else a.newval_num'; put 'end as oldval_num format=best32.'; put ',case when b.move_type=''D'' then .'; put 'else b.newval_num'; put 'end as newval_num format=best32.'; put ',case when b.move_type=''D'' then b.newval_char'; put 'else a.newval_char'; put 'end as oldval_char length=32765'; put ',case when b.move_type=''D'' then '''''; put 'else b.newval_char'; put 'end as newval_char length=32765'; put 'from &ds4(where=(move_type=''O'')) as a'; put 'right join &ds4(where=(move_type ne ''O'')) as b'; put 'on a.tgtvar_nm=b.tgtvar_nm'; put 'and a.key_hash=b.key_hash'; put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4;'; put '%end;'; put '%mend mp_storediffs;'; put '/** @endcond */'; put '%macro bitemporal_dataloader('; put 'bus_from= /* Business FROM datetime variable. Req''d on'; put 'STAGING & BASE tables.*/'; put ',bus_to = /* Business TO datetime variable. Req''d on'; put 'STAGING & BASE tables. */'; put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/'; put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */'; put ',tech_from= /* Technical FROM datetime variable. Req''d on'; put 'BASE table only. */'; put ',tech_to = /* Technical TO datetime variable. Req''d on BASE'; put 'table only. */'; put ',processed= 0'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE'; put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */'; put ',PK= name sex'; put ',RK_UNDERLYING='; put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */'; put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular'; put 'SCD2 loader then set this switch to YES to'; put 'ensure the MAXKEYTABLE is updated with the'; put 'current maximum RK value for the target table'; put '*/'; put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is'; put 'unique on its business key */'; put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in'; put '&dclib..DATALOADS */'; put ',LOADTYPE=BITEMPORAL'; put ',RK_MAXKEYTABLE= mpe_maxkeyvalues'; put ',LOG=1 /* Switch to 0 to prevent records being added to'; put '&mpelib..mpe_DATALOADS (ie when testing)*/'; put ',DELETE_COL= _____DELETE__THIS__RECORD_____'; put '/* If this variable is found in the append dataset'; put 'then records are closed out (or deleted) in the'; put 'append table where that variable= "Yes" */'; put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off'; put 'target table load and generate temp tables only */'; put ',CLOSE_VARS='; put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is'; put 'no facility to close out removed records (all records are'; put 'assumed new or changed). But how does one determine which'; put 'records are removed? Short of loading the entire table'; put 'each time? This parameter allows a set of variables'; put '(this should be a subset of the PK) to be declared, and'; put 'the macro will determine which records in the base table'; put 'need to be closed out ahead of the load.'; put 'For instance, given the following:'; put 'Base Table Staging Table'; put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT'; put 'JAN ACME4 66 JAN ACME4 66'; put 'FEB ACME4 99 FEB ACME4 99'; put 'FEB ACME1 22'; put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,'; put 'the "FEB PAG 22" record would get closed out.'; put '*/'; put ',config_table=&dclib..MPE_CONFIG'; put ',dclib=&dc_libref'; put ',outds_del=work.outds_del'; put ',outds_add=work.outds_add'; put ',outds_mod=work.outds_mod'; put ',outds_audit=0'; put ');'; put '/* when changing this macro, update the version num here */'; put '%local ver;'; put '%let ver=32;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */'; put '/* return straight away if nothing to load */'; put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);'; put '%if &nobs=-1 %then %do;'; put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;'; put '%end;'; put '%if &nobs=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/* hard exit if err condition exists */'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)'; put ')'; put '%local engine_type;'; put '%let engine_type=%mf_getengine(&base_lib);'; put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0'; put '%then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/**'; put '* The metadata functions (eg mf_existvar) will fail if the base table has a'; put '* SAS lock. So, make a snapshot of the base table for further use.'; put '* Also, make output tables (regardless).'; put '*/'; put '%local basecopy;'; put '%let basecopy=%mf_getuniquename(prefix=basecopy);'; put 'data &basecopy &outds_mod &outds_add &outds_del;'; put 'set &base_lib..&base_dsn;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)'; put ')'; put '%local cols idx_pk md5_col ;'; put '%let md5_col=___TMP___md5;'; put '%let check_uniqueness=%upcase(&check_uniqueness);'; put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);'; put '%let high_date=%unquote(&high_date);'; put '%let loadtype=%upcase(&loadtype);'; put '/* ensure irrelevant variables are cleared */'; put '%if &loadtype=BUSTEMPORAL %then %do;'; put '%let tech_from=;'; put '%let tech_to=;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put '%let bus_from=;'; put '%let bus_to=;'; put '%end;'; put '/* ensure relevant variables are supplied */'; put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing BUS_FROM / BUS_TO)'; put ')'; put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing TECH_FROM / TECH_TO)'; put ')'; put '/**'; put '* drop any tables (may be defined as views or vice versa preventing overwrite)'; put '*/'; put '%mp_dropmembers(append bitemp0_append bitemp_cols)'; put '/* SQL Server requires its own time values */'; put '/* 9.2 will only give picture format down to seconds. 9.3 allows'; put 'milliseconds by using lower S and defining the decimal in the format name..*/'; put 'PROC FORMAT;'; put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put '%local dbnow;'; put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'data _null_;'; put '/* convert space separated macvar to comma separated for SQL processing */'; put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');'; put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');'; put 'now=&dbnow;'; put 'call symputx(''NOW'',now,''L'');'; put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');'; put 'length etlsource $100;'; put 'etlsource=subpad(symget(''etlsource''),1,100);'; put 'call symputx(''etlsource'',etlsource,''l'');'; put 'run;'; put '/**'; put '* Even if no PROCESSED var provided, assume that any variable named'; put '* PROCESSED_DTTM should be updated'; put '*/'; put '%if &processed=0 %then %do;'; put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)'; put '%then %let processed=PROCESSED_DTTM;'; put '%else %let processed=;'; put '%end;'; put '/* extract colnames for md5 creation / change tracking */'; put 'proc contents noprint data=&base_lib..&base_dsn'; put 'out=work.bitemp_cols (keep=name type length varnum format:);'; put 'run;'; put 'proc sql noprint;'; put 'select name into: cols separated by '','''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put 'else cats(''put(md5(trim(put(ifn(missing('''; put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end'; put 'into: stripcols separated by ''||'''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put '/* set default formats*/'; put '%let bus_from_fmt = datetime19.;'; put '%let bus_to_fmt = datetime19.;'; put '%let processed_fmt = datetime19.;'; put '%let tech_from_fmt = format=datetime19.;'; put '%let tech_to_fmt = format=datetime19.;'; put '%put &=stripcols;'; put '%put &=pk;'; put 'data _null_;'; put 'set work.bitemp_cols;'; put 'if type=2 or type=6 then do;'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'if format='''' then fmt=cats(length,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put 'if upcase(name)="%upcase(&bus_from)" then'; put 'call symputx(''bus_from_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&bus_to)" then'; put 'call symputx(''bus_to_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_from)" then'; put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_to)" then'; put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&processed)" then'; put 'call symputx(''processed_fmt'',fmt,''L'');'; put 'run;'; put '%if %index(%quote(&cols),___TMP___) %then %do;'; put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim('; put ') This may conflict with temp variable generation!!);'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);'; put '%let syscc=5;'; put '%return;'; put '%end;'; put '/* if transaction dates appear on the APPEND table, need to remove them */'; put '%local drop_tx_dates /* used in append table */'; put 'drop_tx_dates_noobs /* used to take the base table structure */;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)'; put '%then %let drop_tx_dates=&tech_from;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)'; put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;'; put '%if %length(%trim(&drop_tx_dates))>0'; put '%then %let drop_tx_dates=(drop=&drop_tx_dates);'; put '%if %mf_existvar(&basecopy, &tech_from)'; put '%then %let drop_tx_dates_noobs=&tech_from;'; put '%if %mf_existvar(&basecopy, &tech_to)'; put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;'; put '%if %length(%trim(&drop_tx_dates_noobs))>0'; put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);'; put '%else %let drop_tx_dates_noobs=(obs=0);'; put '/**'; put '* Lock the table. This is necessary as we are doing a two part update (first'; put '* closing records then appending new records). It is theoretically possible'; put '* that an upload may occur whilst preparing the staging tables. And the'; put '* staging tables are about to be prepared..'; put '*/'; put '%if &LOADTARGET = YES %then %do;'; put '%put locking &base_lib..&base_dsn;'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%put locking &outds_audit;'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put '/* not an actual load, so avoid updating the max key table in next step. */'; put '%let rk_update_maxkeytable=NO;'; put '%end;'; put '%if %length(&RK_UNDERLYING)>0 %then %do;'; put '%mp_retainedkey('; put 'base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=&append_lib'; put ',append_dsn=&append_dsn'; put ',retained_key=&pk'; put ',business_key=&rk_underlying'; put ',check_uniqueness=&CHECK_UNIQUENESS'; put ',outds=work.append'; put '%if &rk_update_maxkeytable=NO %then %do;'; put ',maxkeytable=0'; put '%end;'; put '%else %do;'; put ',maxkeytable=&dclib..&RK_MAXKEYTABLE'; put '%end;'; put ',locktable=&dclib..mpe_lockanytable'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',filter_str=%str( (where=( &now < &tech_to)) )'; put '%end;'; put ')'; put '%end;'; put '%else %do;'; put 'proc sql;'; put 'create view work.append as select * from &append_lib..&append_dsn;'; put '%end;'; put '/**'; put '* generate md5 for append table'; put '*/'; put '/* it is possible the source dataset has additional (unwanted) columns.'; put 'Drop if specified; */'; put '%if %length(&keepvars)>0 %then %do;'; put '/* remove tech dates from keepvars as they are generated later */'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));'; put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);'; put '%end;'; put '/* CAS varchar types cause append issues here, so perform autoconvert'; put 'by creating empty local table first */'; put 'data;'; put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;'; put 'run;'; put '%local emptybasetable; %let emptybasetable=&syslast;'; put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put '/* apply formats for bitemporal vars but not tx dates which are added later */'; put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;'; put 'format &bus_from &bus_from_fmt;'; put 'format &bus_to &bus_to_fmt;'; put '%end;'; put 'set &emptybasetable /* base table reqd in case append has fewer cols */'; put 'work.append &drop_tx_dates;'; put '%if %length(%str(&bus_from_override))>0 %then %do;'; put '&bus_from= %unquote(&bus_from_override) ;'; put '%end;'; put '%if %length(%str(&bus_to_override))>0 %then %do;'; put '&bus_to= %unquote(&bus_to_override) ;'; put '%end;'; put 'length &md5_col $32;'; put '&md5_col=put(md5(&stripcols),hex32.);'; put '%if %length(&processed)>0 %then %do;'; put 'format &processed &processed_fmt;'; put '&processed=&now;'; put '%end;'; put '/**'; put '* If a delete column exists then create the delete dataset'; put '*/'; put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;'; put 'drop &delete_col;'; put 'if upcase(&delete_col) = "YES" then output &outds_del ;'; put 'else output work.bitemp0_append ;'; put 'run;'; put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=%scan(&outds_del,-1,.)'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put 'output work.bitemp0_append;'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc gt 0 at line 494)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if %length(&close_vars)>0 %then %do;'; put '/**'; put '* need to close out records that are not provided'; put '*/'; put 'proc sql;'; put 'create table bitemp1_closevars1 as'; put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)'; put 'from &base_lib..&base_dsn a'; put 'inner join work.bitemp0_append b'; put 'on 1=1'; put '/* join on closevars key */'; put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));'; put '%let idx_val=%scan(&close_vars,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* filter base on tech dates if necessary */'; put '%if &loadtype=TXTEMPORAL %then %do;'; put 'where a.&tech_from <=&now and &now < a.&tech_to'; put '%end;'; put ';'; put 'create table bitemp1_closevars2 as'; put 'select distinct a.*'; put 'from bitemp1_closevars1 a'; put 'left join work.bitemp0_append b'; put 'on 1=1'; put '/* join on primary key */'; put '%do idx_pk=1 %to %sysfunc(countw(&pk));'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* identify removed records by null value in a field in PK but not close_vars'; put '*/'; put 'where b.%scan('; put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )'; put ') IS NULL'; put ';'; put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=bitemp1_closevars2'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '/* grab schema */'; put '%let baselib_schema=%mf_getschema(&base_lib);'; put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;'; put '/* grab redshift config */'; put '%local redcnt; %let redcnt=0;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'data _null_;'; put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));'; put 'x+1;'; put 'call symputx(cats(''rednm'',x),var_value,''l'');'; put 'call symputx(cats(''redval'',x),var_value,''l'');'; put 'call symputx(''redcnt'',x,''l'');'; put 'run;'; put '%end;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from &baselib_schema.&base_dsn'; put 'where timestamp &sqlnow < &tech_to );'; put '%else %let base_table=&baselib_schema.&base_dsn;'; put '/* make empty table first - must clone & drop extra cols as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &temp_table alter sortkey none) by myAlias;'; put '%end;'; put '%local dropcols;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(&pk)'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;'; put '%end;'; put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp0/view=work.vw_bitemp0;'; put 'set work.bitemp0_append(keep=&pk &md5_col);'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&temp_table'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=work.vw_bitemp0 force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);'; put 'data &temp_table;'; put 'set work.bitemp0_append;'; put 'run;'; put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);'; put 'proc fedsql sessref=dcsession;'; put 'create table &bitemp0base{options replace=true} as'; put '%end;'; put '%else %do;'; put '%let temp_table=work.bitemp0_append;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put 'proc sql;'; put 'create table work.bitemp0_base as'; put '%end;'; put 'select a.&md5_col /* this identifies NEW records */'; put ', b.*'; put '/* assume first PK field cannot be null (if defined in a PK constraint then'; put 'it definitely cannot be null) */'; put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG'; put 'from &baselib_schema.&temp_table a'; put 'left join &base_table b'; put 'on 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put '); proc sql; drop table &base_lib.."&temp_table"n;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put ';'; put 'quit;'; put 'data work.bitemp0_base;'; put 'set &bitemp0base;'; put 'run;'; put 'proc sql;'; put 'drop table &temp_table;'; put 'drop table &bitemp0base;'; put '%end;'; put '%else %do;'; put ';'; put '%end;'; put '/**'; put '* matching & changed records are those without NULL key values'; put '* &idx_val resolves to rightmost PK value (loop above)'; put '*/'; put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;'; put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)'; put ')'; put '%put hashcols2=&stripcols;'; put 'proc sql;'; put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as'; put 'select *'; put ', put(md5(&stripcols),$hex32.) as &md5_col'; put 'from work.bitemp0_base (drop=&md5_col)'; put 'where ___TMP___NEW_FLG=0;'; put '/**'; put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base'; put '*/'; put 'proc sql;'; put 'create table &outds_add'; put '(drop=&md5_col'; put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;'; put '&delete_col'; put '%end;'; put ')'; put 'as select a.*'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',&now as &tech_from &tech_from_fmt'; put ',&high_date as &tech_to &tech_to_fmt'; put '%end;'; put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */'; put ', work.bitemp0_base b /* BASE records (contains null values for new) */'; put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */'; put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */'; put '/**'; put '* identify INSERTS. These are records with the same business key but'; put '* the bus_from and bus_to value are higher / lower (respectively)'; put '* such that the existing record needs to be SPLIT to surround the new'; put '* record.'; put '* eg: OLD RECORD from=1 to=10'; put '* NEW RECORD from=5 to=7'; put '*'; put '* APPENDED RECORDS:'; put '* - from=1 to=5'; put '* - from=5 to=7'; put '* - from=7 to=10'; put '*/'; put '/* inserts cannot happen with TXTEMPORAL */'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* IDENTIFY */'; put 'create table work.bitemp3_inserts as'; put 'select b.*'; put ',a.&bus_from as ___TMP___from'; put ',a.&bus_to as ___TMP___to'; put 'from work.bitemp0_append a'; put ',work.bitemp1_current b'; put 'where a.&bus_from > b.&bus_from'; put 'and a.&bus_to < b.&bus_to'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields may'; put 'not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '/* SPLIT */'; put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;'; put 'set work.bitemp3_inserts;'; put 'by &pk &bus_from &bus_to &processed;'; put 'if first.&idx_val then do;'; put '___TMP___retain=&bus_to;'; put '&bus_to=___TMP___from;'; put 'output;'; put '&bus_to=___TMP___retain;'; put 'end;'; put 'if last.&idx_val then do;'; put '&bus_from=___TMP___to;'; put 'output;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* TX temporal load */'; put 'data work.bitemp3a_inserts;'; put 'set work.bitemp1_current;'; put 'stop;'; put 'run;'; put '%end;'; put '/* APPEND */'; put 'proc sql;'; put 'create view work.bitemp3a_view as'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put 'data bitemp3b_newbase;'; put 'set work.bitemp3a_inserts work.bitemp3a_view;'; put 'run;'; put '/** do not use! this converts short numerics into 8 bytes'; put 'proc sql;'; put 'create table work.bitemp3b_newbase as'; put 'select * from work.bitemp3a_inserts'; put 'union corr'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put '*/'; put '/**'; put '* identify CHANGED records from staging.'; put '* Same business key with different temporal dates or md5 value'; put '* This table must be overlayed onto / into existing business history'; put '*/'; put 'proc sql;'; put 'create table work.bitemp4_updated as select distinct a.*'; put 'from work.bitemp0_append a'; put ',work.bitemp3b_newbase b'; put 'where 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'and ( a.&md5_col ne b.&md5_col'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)'; put '%end;'; put ')'; put ';'; put '/**'; put '* This section would have been one simple step with union all'; put '* but that converts short numerics into 8 bytes!'; put '* so, convoluted alternative to retain the same functionality.'; put '*/'; put '/* base records */'; put 'create view work.bitemp4_prep1 as'; put 'select ''BASE'' as ___TMP___'; put ',b.*'; put 'from work.bitemp4_updated a'; put ',work.bitemp3b_newbase b'; put 'where 1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put ';'; put '/* updated records */'; put 'create view work.bitemp4_prep2 as'; put 'select ''STAG'' as ___TMP___ ,*'; put 'from work.bitemp4_updated;'; put '/* ensure we only keep columns that appear in both */'; put '%local bp1 bp2 bp3 bp4;'; put '%let bp1=%mf_getvarlist(bitemp4_prep1);'; put '%let bp2=%mf_getvarlist(bitemp4_prep2);'; put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);'; put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);'; put 'data work.bitemp4_prep3/view=bitemp4_prep3;'; put 'set bitemp4_prep1 bitemp4_prep2;'; put '%if %length(XX&bp3&bp4)>2 %then %do;'; put 'drop &bp3 &bp4 ;'; put '%end;'; put 'run;'; put '/* remove duplicates */'; put 'proc sql;'; put 'create table work.bitemp4a_allrecs as'; put 'select distinct *'; put 'from work.bitemp4_prep3'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields'; put 'may not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* this section aligns the business dates'; put '(eg for inserts or overlaps in the range) */'; put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );'; put 'set work.bitemp4a_allrecs;'; put 'by &pk &bus_from &bus_to &processed;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '___TMP___md5lag=lag(&md5_col);'; put '/* reset retained variables */'; put 'if first.&idx_val then do;'; put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/'; put 'if &md5_col=___TMP___md5lag then do;'; put '&bus_from=___TMP___from;'; put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;'; put 'end;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 1'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 1'' then do;'; put '/* else ensure bus_from starts from prior record bus_to */'; put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to'; put 'then &bus_from= ___TMP___to;'; put '/* new record may replace old record entirely */'; put 'if &bus_to <= &bus_from then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* keep staged records only */'; put 'data work.bitemp4b_firstpass;'; put 'set work.bitemp4a_allrecs;'; put 'if ___TMP___=''STAG'';'; put 'run;'; put '%end;'; put '/* next phase is to pass through in reverse - so set up the sort statement */'; put '%local byvar;'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let byvar=&byvar descending %scan(&pk,&idx_pk);'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL'; put '%then %let byvar=&byvar descending &bus_from descending &bus_to;'; put '/* if matching bus dates supplied, need to ensure we also have a sort'; put 'between BASE and STAGING tables */'; put '%let byvar=&byvar descending ___TMP___;'; put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;'; put 'by &byvar;'; put 'run;'; put '/**'; put '* Now (in reverse) pass back business start dates'; put '*/'; put 'data work.bitemp4d_secondpass;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '&tech_from=&now;'; put '&tech_to=&high_date;'; put '%end;'; put 'set work.bitemp4c_sort ;'; put 'by &byvar;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* put / _all_ /;*/'; put '___TMP___md5lag=lag(&md5_col);'; put 'if first.&idx_val then do;'; put '/* reset retained variables */'; put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry back bus_to */'; put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 2'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 2'' then do;'; put '/* else ensure bus_to stops at subsequent record bus_from */'; put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from'; put 'then &bus_to= ___TMP___from;'; put '/* new record may replace old record entirely */'; put 'if &bus_from >= &bus_to then delete;'; put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put '%end;'; put 'run;'; put '%put syscc (line600)=&syscc;'; put '/**'; put 'There may still be some records (eg old business history) which have not'; put 'changed.'; put 'Need to identify these and remove from the append so they are not updated'; put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the'; put 'business key) and any matching / identical records are split out (from those'; put 'that need to be updated).'; put '*/'; put '%if &loadtype=BITEMPORAL %then %do;'; put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);'; put 'data work.bitemp5a_lkp (keep=&md5_col)'; put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'set work.bitemp0_base;'; put '/* for BITEMPORAL we need to compare business dates also */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);'; put 'run;'; put 'data bitemp5b_updates;'; put 'set bitemp4d_secondpass;'; put 'if _n_=1 then do;'; put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');'; put 'md5_lkp.definekey("&md5_col");'; put 'md5_lkp.definedone();'; put 'end;'; put '/* drop old md5 col as will rebuild with new business dates */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;'; put 'if md5_lkp.check()=0 then delete;'; put 'run;'; put 'proc sql;'; put '/* get min bus from as will update (close out) all records from this point'; put '(for that PK)*/'; put 'create table work.bitemp5d_subquery as'; put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to'; put 'from work.bitemp5b_updates'; put 'group by &pk_comma;'; put '/* index has a huge efficiency impact on upcoming nested subquery */'; put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);'; put '%let lastds=work.bitemp5b_updates;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put 'proc sql;'; put 'create table work.bitemp5d_subquery as'; put 'select distinct &pk_comma'; put 'from bitemp4d_secondpass;'; put '%let lastds=work.bitemp4d_secondpass;'; put '%end;'; put '%else %let lastds=work.bitemp4d_secondpass;'; put '/* create single append table (an overlapped pre-sert may be classed as'; put 'both an update AND a new record). Also create temp views that may be'; put 'used for pre-load analysis. */'; put 'data &outds_mod;'; put 'set &lastds(drop=___TMP___: &md5_col);'; put 'run;'; put 'data bitemp6_allrecs / view=bitemp6_allrecs;'; put 'set &outds_mod /* UPDATED records */'; put '&outds_add /* NEW records */;'; put 'run;'; put 'proc sort data=work.bitemp6_allrecs'; put 'out=work.bitemp6_unique'; put 'noduprec'; put 'dupout=work.xx_BADBADBAD;'; put 'by _all_;'; put 'run;'; put '/* we have all our temp tables now so exit if this is all that is needed */'; put '%if &LOADTARGET ne YES %then %return;'; put '/* also exit if an err condition exists */'; put '%if &syscc>0 %then %do;'; put '%put syscc=&syscc;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)'; put ')'; put '/* final check - abort if a lock has appeared on the target or audit table */'; put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)'; put '%if %mf_existds(&outds_audit) %then %do;'; put '%mp_lockfilecheck(libds=&outds_audit)'; put '%end;'; put '/**'; put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!'; put '*/'; put '/**'; put '* First, CLOSE OUT changed records (if not a REPLACE)'; put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.'; put '* However - this can be worked around using a nested subquery..'; put '*/'; put 'data _null_;'; put 'putlog "&sysmacroname: CLOSEOUTS commencing";'; put 'run;'; put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: No closeouts needed";'; put 'run;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(&loadtype not yet supported in CAS engine)'; put ')'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds;'; put 'set work.bitemp5d_subquery;'; put 'run;'; put '/* delete the records */'; put 'proc cas ;'; put 'table.deleteRows / table={'; put 'caslib="&base_lib",'; put 'name="&base_dsn",'; put 'where="1=1",'; put 'whereTable={caslib=''CASUSER'',name="&delds"}'; put '};'; put 'quit;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&delds;'; put '%end;'; put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)'; put '%then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";'; put 'run;'; put '%local flexinow;'; put 'proc sql;'; put '/* if OLEDB then create a temp table for efficiency */'; put '%local innertable;'; put '%if &engine_type=OLEDB %then %do;'; put '%let innertable=[&temp_table];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp5d_subquery;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);'; put '%let top_table=&baselib_schema.&base_dsn;'; put '%let flexinow=timestamp &SQLNOW;'; put '/* make empty table first - must clone & drop extra cols'; put 'as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;'; put '%end;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;'; put 'set work.bitemp5d_subquery;'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&innertable ('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put 'data=work.vw_bitemp5d force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %do;'; put '%let innertable=bitemp5d_subquery;'; put '%let top_table=&base_lib..&base_dsn;'; put '%let flexinow=&now;'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put 'update &top_table set &tech_to=&flexinow'; put '%if %length(&processed)>0 %then %do;'; put ',&processed=&flexinow'; put '%end;'; put 'where &tech_from <= &flexinow and &flexinow < &tech_to and'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '/* changed records are deleted then re-appended when doing UPDATEs */'; put 'delete from &top_table where'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;'; put '%let syscc=5;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%goto end_of_macro;'; put '%end;'; put '/* perform join inside query as per'; put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */'; put 'exists( select 1 from &baselib_schema.&innertable where'; put '/* loop PK join */'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put '&base_dsn..&idx_val=&innertable..&idx_val and'; put '%end;'; put '%if &loadtype=BITEMPORAL %then %do;'; put '&base_dsn..&bus_from >= &innertable..&bus_from'; put 'and &base_dsn..&bus_to <= &innertable..&bus_to and'; put '%end;'; put '/* close the statement */'; put '1=1);'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put ') by myAlias;'; put 'execute (drop table &baselib_schema.&innertable) by myAlias;'; put '%end;'; put '%end;'; put 'quit;'; put 'data _null_;'; put 'putlog "&sysmacroname: Closeout complete";'; put 'run;'; put '/**'; put '* Append the new / updated records'; put '*/'; put '%if &engine_type=CAS %then %do;'; put '/* get varchar variables ready for casting */'; put '%local vcfmt vcrename vcassign vcdrop;'; put 'data _null_;'; put 'set work.bitemp_cols(where=(type=6)) end=last;'; put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;'; put 'retain vcrename vcassign vcdrop vcfmt;'; put 'if _n_=1 then vcrename=''(rename=('';'; put 'rancol=resolve(''%mf_getuniquename()'');'; put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';'; put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);'; put 'vcassign=cats(vcassign,name,''='',rancol,'';'');'; put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');'; put 'if last then do;'; put 'vcrename=cats(vcrename,''))'');'; put 'call symputx(''vcfmt'',vcfmt);'; put 'call symputx(''vcrename'',vcrename);'; put 'call symputx(''vcassign'',vcassign);'; put 'call symputx(''vcdrop'',vcdrop);'; put 'end;'; put 'run;'; put '/* prepare a temp cas table with varchars casted */'; put '%let tmp=%mf_getuniquename();'; put 'data casuser.&tmp ;'; put '&vcfmt'; put 'set work.bitemp6_unique &vcrename;'; put '&vcassign'; put '&vcdrop'; put 'run;'; put '/* load the table with varchars applied*/'; put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;'; put 'set casuser.&tmp;'; put 'run;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&tmp;'; put '/* this code will not work as regular tables do not have varchars */'; put '/*'; put 'proc casutil;'; put 'load data=work.bitemp6_unique'; put 'outcaslib="&base_lib" casout="&base_dsn" append ;'; put 'quit;'; put '*/'; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put 'proc append base=&base_lib..&base_dsn'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=bitemp6_unique force nowarn;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;'; put '%end;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '/* final check on syscc */'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=&_program'; put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)'; put ')'; put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;'; put 'data work.vw_outds_orig /view=work.vw_outds_orig;'; put 'set work.bitemp0_base (drop=&md5_col);'; put 'where ___TMP___NEW_FLG=0;'; put 'drop ___TMP___NEW_FLG;'; put 'run;'; put '/* update the AUDIT table */'; put '%if %mf_existds(&outds_audit) %then %do;'; put 'options mprint;'; put '%mp_storediffs(&base_lib..&base_dsn'; put ',work.vw_outds_orig'; put ',&pk &bus_from'; put ',delds=&outds_del'; put ',modds=&outds_mod'; put ',appds=&outds_add'; put ',outds=work.mp_storediffs'; put ',processed_dttm=&now'; put ',loadref=%superq(etlsource)'; put ')'; put '/* exclude unchanged values in modified rows */'; put 'data work.mp_storediffs;'; put 'set work.mp_storediffs;'; put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;'; put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;'; put 'run;'; put 'proc append base=&outds_audit data=work.mp_storediffs;'; put 'run;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Problem in audit stage (&outds_audit))'; put ')'; put '%let user=%mf_getUser();'; put '/**'; put 'Notify as appropriate EMAILS DISABLED'; put '%sumo_alerts(ALERT_EVENT=UPDATE'; put ', ALERT_TARGET=&base_lib..&base_dsn'; put ', from_user= &user);'; put '*/'; put '/* monitor BiTemporal usage */'; put '%if &log=1 %then %do;'; put '%put syscc=&syscc;'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'insert into &dclib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&ETLSOURCE"'; put ',LOADTYPE="&loadtype"'; put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)'; put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)'; put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)'; put ',DURATION=&dur'; put ',MAC_VER="v&ver"'; put ',user_nm="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%put syscc=&syscc;'; put '%end;'; put '%end_of_macro:'; put '%mend bitemporal_dataloader;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Register a new licence key'; put '@details'; put '

SAS Macros

'; put '@li mpeinit.sas'; put '@li bitemporal_dataloader.sas'; put '@li mp_abort.sas'; put '@li mf_getuser.sas'; put '@li mpe_getgroups.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '@test'; put 'echo ''{"keyupload":[{"activation_key":"slfdjasfda;dslf","licence_key":"asdfasdlfkajsfdas"}]}''>in.json'; put 'sasjs request admin/registerkey -d in.json'; put '**/'; put '%mpeinit()'; put '/* determine users group membership */'; put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)'; put '%global admin_check;'; put 'proc sql;'; put 'select count(*) into: admin_check'; put 'from groups where groupname="&mpeadmins";'; put '%mp_abort(iftrue= (&admin_check = 0)'; put ',mac=%str(&_program)'; put ',msg=%str(Only members of &mpeadmins may register a key)'; put ')'; put '%global licencekey activation_key;'; put 'data _null_;'; put 'set work.keyupload;'; put 'call symputx(''activation_key'',activation_key);'; put 'call symputx(''licencekey'',licence_key);'; put 'call symputx(''activlen'',length(activation_key));'; put 'call symputx(''liclen'',length(licence_key));'; put 'run;'; put '%mp_abort(iftrue= (&activlen< 10)'; put ',mac=%str(&_program)'; put ',msg=%str(Invalid activation_key)'; put ')'; put '%mp_abort(iftrue= (&liclen < 10)'; put ',mac=%str(&_program)'; put ',msg=%str(Invalid licencekey)'; put ')'; put 'data work.loadme;'; put 'if 0 then set &mpelib..mpe_config;'; put 'VAR_SCOPE=''DC'';'; put 'VAR_NAME=''DC_ACTIVATION_KEY'';'; put 'VAR_VALUE=symget(''activation_key'');'; put 'VAR_ACTIVE=1;'; put 'output;'; put 'VAR_NAME=''DC_LICENCE_KEY'';'; put 'VAR_VALUE=symget(''licencekey'');'; put 'VAR_ACTIVE=1;'; put 'output;'; put 'keep VAR_: ;'; put 'run;'; put '%bitemporal_dataloader('; put 'tech_from=tx_from'; put ',tech_to = tx_to'; put ',base_lib=&mpelib'; put ',base_dsn=mpe_config'; put ',append_lib=WORK'; put ',append_dsn=loadme'; put ',PK= VAR_SCOPE VAR_NAME'; put ',ETLSOURCE=%str(&_program STP)'; put ',LOADTYPE=TXTEMPORAL'; put ',dclib=&mpelib'; put ')'; put 'data work.return;'; put 'msg=''SUCCESS'';'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,return)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/approvers; %let service=getapprovals; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getapprovals.sas'; put '@brief Returns a list of staged data items that need to be approved'; put '@details'; put '

SAS Macros

'; put '@li mpe_getgroups.sas'; put '@li mp_abort.sas'; put '@li mf_getuser.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '/* determine users group membership */'; put '%let user=%mf_getuser();'; put '%mpe_getgroups(user=&user,outds=work.groups)'; put 'PROC FORMAT;'; put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put 'proc sql noprint;'; put 'create table out1 (rename=(SUBMITTED_ON_DTTM1=SUBMITTED_ON_DTTM)) as'; put 'select table_id'; put ',submit_status_cd as REVIEW_STATUS_ID'; put ',SUBMITTED_BY_NM'; put ',cats(base_lib,''.'',base_ds) as base_table'; put ',put(submitted_on_dttm,yymmddhhmmss.) as SUBMITTED_ON_DTTM1'; put ',submitted_on_dttm as SUBMITTED_ON_DTTM2'; put ',submitted_reason_txt'; put ',num_of_approvals_required'; put ',num_of_approvals_remaining'; put ',base_lib as libref'; put ',base_ds as dsn'; put 'from &mpelib..mpe_submit (where=(submit_status_cd=''SUBMITTED''))'; put '/* filter out any submits for which approval is already made */'; put 'where table_id not in ('; put 'select table_id from &mpelib..mpe_review where submitted_by_nm="&user"'; put ');'; put '%macro getapprovals();'; put '%local admin_check;'; put 'select count(*) into: admin_check'; put 'from groups'; put 'where groupname="&mpeadmins"'; put 'or groupname in ('; put 'select sas_group from &mpelib..mpe_security'; put 'where libref=''*ALL*'''; put 'and &dc_dttmtfmt. lt tx_to'; put 'and access_level in (''APPROVE'')'; put ');'; put '%if &admin_check >0 %then %do;'; put 'create table fromSAS as'; put 'select distinct * from out1'; put 'order by SUBMITTED_ON_DTTM2 desc;'; put '%end;'; put '%else %do;'; put 'create table fromSAS as'; put 'select distinct a.*'; put 'from out1 a'; put 'inner join &mpelib..mpe_security b'; put 'on a.libref=b.libref'; put 'and (a.dsn=b.dsn or b.dsn=''*ALL*'')'; put 'and &dc_dttmtfmt. lt b.tx_to'; put 'and b.ACCESS_LEVEL =''APPROVE'''; put 'and b.SAS_GROUP in (select groupname from work.groups)'; put 'order by SUBMITTED_ON_DTTM2 desc;'; put '%end;'; put '%mend getapprovals;'; put '%getapprovals()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,fromSAS,missing=STRING)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=gethistory; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mpe_getvars(injs,outds);'; put '/* load parameters */'; put 'data _null_;'; put '__dummychar='''';__dummynum=0;'; put 'set &outds;'; put 'array __charvals _character_;'; put 'do over __charvals;'; put 'call symputx(vname(__charvals),__charvals,''g'');'; put 'end;'; put 'array __numvals _numeric_;'; put 'do over __numvals;'; put 'call symputx(vname(__numvals),__numvals,''g'');'; put 'end;'; put 'run;'; put '%mend mpe_getvars;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Returns the list of previously approved / rejected items.'; put '@details History is taken from MPE_SUBMIT (where status_cd ne ''SUBMITTED'') and'; put 'filtered according to the groups in MPE_SECURITY (unless the user is in the'; put 'DC admin group).'; put '

SAS Macros

'; put '@li mpe_getvars.sas'; put '@li mpe_getgroups.sas'; put '@li mp_abort.sas'; put '@li mf_getuser.sas'; put '

Service Inputs

'; put '
BROWSERPARAMS
'; put 'The following variables MAY be provided from frontend (HIST can also be set'; put 'in MPE_CONFIG):'; put '@li HIST - number of records to return'; put '@li STARTROW - the starting row (default is 1)'; put '

Service Outputs

'; put '
FROMSAS
'; put 'This table is returned, starting from &STARTROW for &HIST rows (ordered'; put 'descending on SUBMITTED datetime)'; put '@li TABLE_ID'; put '@li BASE_TABLE'; put '@li SUBMITTED'; put '@li SUBMITTED_REASON_TXT'; put '@li SUBMITTER'; put '@li REVIEWED'; put '@li STATUS'; put '@li REVIEWED_ON_DTTM'; put '@li APPROVER'; put '
HISTPARAMS
'; put '@li HIST - rows returned'; put '@li STARTROW - starting row used'; put '@li NOBS - Number of observations (rows) available'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '/* hard coded HIST value */'; put '%let hist=40;'; put '%let startrow=1;'; put '/* load parameters from frontend (HIST and STARTROW) */'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC_REVIEW"'; put 'and var_name=''HISTORY_ROWS'''; put 'and &dc_dttmtfmt. lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(''hist'',var_value,''G'');'; put 'putlog ''mpe_config: '' var_name "=" var_value;'; put 'run;'; put '/* load parameters (override HIST again if provided) */'; put '%mpe_getvars(BrowserParams, BrowserParams)'; put '/* determine users group membership */'; put '%mpe_getgroups(user=%mf_getuser(),outds=work.usergroups)'; put 'PROC FORMAT;'; put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put '/* check to see if the user is an admin, or has *ALL* access rights */'; put '%let authcheck=0;'; put 'proc sql noprint;'; put 'create table work.authcheck'; put 'as select *'; put 'from usergroups'; put 'where upcase(groupname)="%upcase(&mpeadmins)"'; put 'or upcase(groupname) in ('; put 'select upcase(sas_group) from &mpelib..mpe_security'; put 'where libref=''*ALL*'' and &dc_dttmtfmt. lt tx_to'; put ');'; put 'select count(*) into: authcheck from &syslast;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after auth check)'; put ')'; put '/* now get the previous &hist records from mpe_submit */'; put 'proc sql;'; put 'create view work.submits as'; put 'select distinct a.TABLE_ID'; put ',cats(a.base_lib,''.'',a.base_ds) as base_table'; put ',put(a.SUBMITTED_ON_DTTM,yymmddhhmmss.) as submitted'; put ',a.submitted_reason_txt'; put ',a.submitted_by_nm as submitter'; put ',put(a.REVIEWED_ON_DTTM,yymmddhhmmss.) as REVIEWED'; put ',a.submit_status_cd as status'; put 'from &mpelib..mpe_submit(where=(submit_status_cd ne ''SUBMITTED'')) a'; put '%macro gethistory();'; put '%if &authcheck=0 %then %do;'; put '/* filter for allowed items */'; put 'left join &mpelib..mpe_security(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on a.base_lib=b.libref'; put 'and (a.base_ds=b.dsn or b.dsn=''*ALL*'')'; put 'where upcase(b.SAS_GROUP) in (select upcase(groupname) from work.usergroups)'; put 'and b.access_level in (''VIEW'',''AUDIT'',''EDIT'',''APPROVE'')'; put '%end;'; put '%mend gethistory;'; put '%gethistory()'; put ';'; put '/* get latest reason text */'; put 'create table work.reviews as'; put 'select a.*'; put ',b.reviewed_on_dttm'; put ',b.reviewed_by_nm as approver'; put ',b.review_reason_txt'; put 'from work.submits a'; put 'left join &mpelib..mpe_review b'; put 'on a.table_id=b.table_id'; put 'order by a.table_id desc, b.reviewed_on_dttm desc;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after fetching submits)'; put ')'; put 'data work.fromsas;'; put 'set work.reviews;'; put 'by descending table_id descending reviewed_on_dttm;'; put 'if first.table_id;'; put 'if _n_ ge &startrow;'; put 'n+1;'; put 'if n>&hist then stop;'; put 'drop n;'; put 'run;'; put 'proc sql noprint;'; put 'select count(*) into: nobs from work.submits;'; put 'data work.histparams;'; put 'hist=&hist;'; put 'startrow=&startrow;'; put 'nobs=&nobs;'; put 'run;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,fromSAS,missing=STRING)'; put '%webout(OBJ,histparams)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=rejection; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mpe_alerts(alert_event='; put ', alert_lib='; put ', alert_ds='; put ', dsid='; put ');'; put '/* exit if not configured */'; put '%global DC_EMAIL_ALERTS;'; put '%if &DC_EMAIL_ALERTS ne YES %then %do;'; put '%put DCNOTE: Email alerts are not configured;'; put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);'; put '%return;'; put '%end;'; put '%let alert_event=%upcase(&alert_event);'; put '%let alert_lib=%upcase(&alert_lib);'; put '%let alert_ds=%upcase(&alert_ds);'; put '%let from_user=%mf_getuser();'; put '/* get users TO which the email should be sent */'; put 'proc sql noprint;'; put 'create table work.users as select distinct a.alert_user,'; put 'b.user_displayname,'; put 'b.user_email'; put 'from &mpelib..mpe_alerts'; put '(where=(&dc_dttmtfmt. lt tx_to)) a'; put 'left join &mpelib..mpe_emails'; put '(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))'; put 'where a.alert_event in ("&alert_event","*ALL*")'; put 'and a.alert_lib in ("&alert_lib","*ALL*")'; put 'and a.alert_ds in ("&alert_ds","*ALL*");'; put '/* ensure the submitter is included on the email */'; put '%local isThere userdisp user_eml;'; put '%let isThere=0;'; put 'select count(*) into: isThere from &syslast where alert_user="&from_user";'; put '%if &isThere=0 %then %do;'; put 'select user_displayname, user_email'; put 'into: userdisp trimmed, :user_eml trimmed'; put 'from &mpelib..mpe_emails'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and user_name="&from_user";'; put 'insert into work.users'; put 'set alert_user="&from_user"'; put ',user_displayname="&userdisp"'; put ',user_email="&user_eml";'; put '%end;'; put '/* if no email / displayname is provided, then extract from metadata */'; put 'data work.emails;'; put 'set work.users;'; put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;'; put '/* get displayname */'; put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");'; put 'if metadata_getnobj(text,1,uri)<=0 then do;'; put 'putlog "DCWARN: &from_user not found";'; put 'return;'; put 'end;'; put 'else if user_displayname = '''' then do;'; put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;'; put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';'; put 'end;'; put 'end;'; put 'if index(user_email,''@'') then return;'; put '/* get email from metadata if not in input table */'; put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;'; put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";'; put 'end;'; put 'else do;'; put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;'; put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';'; put 'end;'; put 'end;'; put '/* only keep valid emails */'; put 'if index(user_email,''@'') ;'; put '/* dump contents for debugging */'; put 'if _n_<21 then putlog (_all_)(=);'; put 'run;'; put '%local emails;'; put 'proc sql noprint;'; put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;'; put '/* exit if nobody to email */'; put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;'; put '%put NOTE: No alerts configured (mpe_alerts.sas);'; put '%return;'; put '%end;'; put '/* display email options */'; put 'data _null_;'; put 'set sashelp.voption(where=(group=''EMAIL''));'; put 'put optname ''='' setting;'; put 'run;'; put 'filename __out email (&emails)'; put 'subject="Table &alert_lib..&alert_ds has been &alert_event";'; put '%local SUBMITTED_TXT;'; put '%if &alert_event=SUBMITTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_submit;'; put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';'; put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been proposed by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''SUBMITTED_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=APPROVED %then %do;'; put '/* there is no approval message */'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been approved by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=REJECTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_review;'; put 'where table_id="&dsid" and review_status_id=''REJECTED'';'; put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been rejected by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''REVIEW_REASON_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put 'filename __out clear;'; put '%mend mpe_alerts ;'; put '%macro mpe_getvars(injs,outds);'; put '/* load parameters */'; put 'data _null_;'; put '__dummychar='''';__dummynum=0;'; put 'set &outds;'; put 'array __charvals _character_;'; put 'do over __charvals;'; put 'call symputx(vname(__charvals),__charvals,''g'');'; put 'end;'; put 'array __numvals _numeric_;'; put 'do over __numvals;'; put 'call symputx(vname(__numvals),__numvals,''g'');'; put 'end;'; put 'run;'; put '%mend mpe_getvars;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro removecolsfromwork(col);'; put '/* only an issue if debug mode enabled */'; put '%global _debug;'; put '%if &_debug ge 131 %then %do;'; put '%let col=%upcase(&col);'; put '%local memlist;'; put 'proc sql noprint;'; put 'select distinct memname into: memlist'; put 'separated by '' '''; put 'from dictionary.columns'; put 'where libname=''WORK'' and upcase(name)="&col";'; put '%if %mf_isblank(&memlist) %then %return;'; put '%mp_dropmembers(list=&memlist)'; put '%end;'; put '%mend removecolsfromwork;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Removes a staged data package from approval screen'; put '@details'; put '

SAS Macros

'; put '@li mf_getuser.sas'; put '@li mf_getvarlist.sas'; put '@li mf_verifymacvars.sas'; put '@li mp_abort.sas'; put '@li mp_lockanytable.sas'; put '@li mpe_accesscheck.sas'; put '@li mpe_alerts.sas'; put '@li mpe_getvars.sas'; put '@li removecolsfromwork.sas'; put '

Service Outputs

'; put '
fromsas
'; put '@li TABLE_ID'; put '@li SUBMITTED_REASON_TXT'; put '@li RESPONSE'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%global STP_ACTION TABLE STP_REASON;'; put '%mpeinit()'; put '%mpe_getvars(BrowserParams, BrowserParams)'; put 'PROC FORMAT;'; put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put '/* get current status and base table */'; put 'data _null_;'; put 'set &mpelib..mpe_submit(where=(TABLE_ID="&TABLE"));'; put 'call symputx(''BASE_TABLE'',cats(base_lib,''.'',base_ds));'; put 'call symputx(''submit_status_cd'',submit_status_cd);'; put 'run;'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table)=0)'; put ',mac=&_program'; put ',msg=%str(Missing: base_table)'; put ')'; put '%mp_abort('; put 'iftrue=(%quote(&submit_status_cd)=%quote(REJECTED))'; put ',mac=&_program'; put ',msg=%str(&table is already rejected!)'; put ')'; put '%mp_abort(iftrue= (&syscc ge 4)'; put ',mac=&_program'; put ',msg=%str(Issue on setup)'; put ')'; put '/**'; put '* determine if user is authorised to reject table'; put '*/'; put '%let user=%mf_getuser();'; put '%global authcheck; %let authcheck=0;'; put '%mpe_accesscheck(&base_table,outds=authAPP,user=&user,access_level=APPROVE)'; put '%let authcheck=%mf_getattrn(work.authAPP,NLOBS);'; put '%mp_abort(iftrue= (&authcheck=0)'; put ',mac=&_program..sas'; put ',msg=%str(User &user does not have APPROVE rights on &base_table and is not'; put 'in the &mpeadmins group)'; put ')'; put '/* update the control table to show table as rejected (and why) */'; put '%let now=%sysfunc(datetime());'; put 'data work.reject;'; put 'if 0 then set &mpelib..mpe_review;'; put 'TABLE_ID="&table";'; put 'BASE_TABLE="&base_table";'; put 'REVIEW_STATUS_ID="REJECTED";'; put 'REVIEWED_BY_NM="&user";'; put 'REVIEWED_ON_DTTM=&now;'; put 'REVIEW_REASON_TXT=symget(''STP_REASON'');'; put 'run;'; put '%mp_lockanytable(LOCK,'; put 'lib=&mpelib,ds=mpe_review,ref=%str(&table rejection),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc append base=&mpelib..mpe_review data=work.reject;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_review,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(LOCK,'; put 'lib=&mpelib,ds=mpe_submit,ref=%str(&table rejection),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc sql;'; put 'update &mpelib..mpe_submit'; put 'set submit_status_cd=''REJECTED'','; put 'num_of_approvals_remaining=0,'; put 'reviewed_by_nm="&user",'; put 'reviewed_on_dttm=&now'; put 'where table_id="&table";'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_submit,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc AFTER update...)'; put ')'; put '%mpe_alerts(alert_event=REJECTED'; put ', alert_lib=%scan(&BASE_TABLE,1,.)'; put ', alert_ds=%scan(&BASE_TABLE,2,.)'; put ', dsid=&TABLE'; put ')'; put 'data fromSAS;'; put 'RESPONSE=''SUCCESS!'';'; put 'set REJECT;'; put 'run;'; put '%removecolsfromwork(___TMP___MD5)'; put '%webout(OPEN)'; put '%webout(OBJ,fromSAS)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/auditors; %let service=getauditfile; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_dirlist(path=%sysfunc(pathname(work))'; put ', fref=0'; put ', outds=work.mp_dirlist'; put ', getattrs=NO'; put ', showparent=NO'; put ', maxdepth=0'; put ', level=0 /* The level of recursion to perform. For internal use only. */'; put ')/*/STORE SOURCE*/;'; put '%let getattrs=%upcase(&getattrs)XX;'; put '/* temp table */'; put '%local out_ds;'; put 'data;run;'; put '%let out_ds=%str(&syslast);'; put '/* drop main (top) table if it exists */'; put '%if &level=0 %then %do;'; put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)'; put '%end;'; put 'data &out_ds(compress=no'; put 'keep=file_or_folder filepath filename ext msg directory level'; put ');'; put 'length directory filepath $2000 fref fref2 $8 file_or_folder $6 filename $255'; put 'ext $20 msg $200 foption $16;'; put 'if _n_=1 then call missing(of _all_);'; put 'retain level &level;'; put '%if &fref=0 %then %do;'; put 'rc = filename(fref, "&path");'; put '%end;'; put '%else %do;'; put 'fref="&fref";'; put 'rc=0;'; put '%end;'; put 'if rc = 0 then do;'; put 'did = dopen(fref);'; put 'if did=0 then do;'; put 'putlog "NOTE: This directory is empty, or does not exist - &path";'; put 'msg=sysmsg();'; put 'put (_all_)(=);'; put 'stop;'; put 'end;'; put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */'; put 'numopts=doptnum(did);'; put 'do i=1 to numopts;'; put 'foption=doptname(did,i);'; put 'if foption=:''Directory'' then i=numopts;'; put 'end;'; put 'directory=dinfo(did,foption);'; put 'rc = filename(fref);'; put 'end;'; put 'else do;'; put 'msg=sysmsg();'; put 'put _all_;'; put 'stop;'; put 'end;'; put 'dnum = dnum(did);'; put 'do i = 1 to dnum;'; put 'filename = dread(did, i);'; put 'filepath=cats(directory,''/'',filename);'; put 'rc = filename(fref2,filepath);'; put 'midd=dopen(fref2);'; put 'dmsg=sysmsg();'; put 'if did > 0 then file_or_folder=''folder'';'; put 'rc=dclose(midd);'; put 'midf=fopen(fref2);'; put 'fmsg=sysmsg();'; put 'if midf > 0 then file_or_folder=''file'';'; put 'rc=fclose(midf);'; put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')'; put 'then file_or_folder=''file'';'; put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';'; put 'else if file_or_folder='''' then file_or_folder=''locked'';'; put 'if file_or_folder=''file'' then do;'; put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);'; put 'if filename = ext then ext = '' '';'; put 'end;'; put 'else do;'; put 'ext='''';'; put 'file_or_folder=''folder'';'; put 'end;'; put 'output;'; put 'end;'; put 'rc = dclose(did);'; put '%if &showparent=YES and &level=0 %then %do;'; put 'filepath=directory;'; put 'file_or_folder=''folder'';'; put 'ext='''';'; put 'filename=scan(directory,-1,''/\'');'; put 'msg='''';'; put 'level=&level;'; put 'output;'; put '%end;'; put 'stop;'; put 'run;'; put '%if %substr(&getattrs,1,1)=Y %then %do;'; put 'data &out_ds;'; put 'set &out_ds;'; put 'length infoname infoval $60 fref $8;'; put 'if _n_=1 then call missing(fref);'; put 'rc=filename(fref,filepath);'; put 'drop rc infoname fid i close fref;'; put 'if file_or_folder=''file'' then do;'; put 'fid=fopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open file:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to foptnum(fid);'; put 'infoname=foptname(fid,i);'; put 'infoval=finfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=fclose(fid);'; put 'end;'; put 'else do;'; put 'fid=dopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open folder:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to doptnum(fid);'; put 'infoname=doptname(fid,i);'; put 'infoval=dinfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=dclose(fid);'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by filepath sasname;'; put 'proc transpose data=&out_ds out=&out_ds(drop=_:);'; put 'id sasname;'; put 'var infoval;'; put 'by filepath file_or_folder filename ext ;'; put 'run;'; put '%end;'; put 'data &out_ds;'; put 'set &out_ds(where=(filepath ne ''''));'; put 'run;'; put '/**'; put '* The above transpose can mean that some updates create additional columns.'; put '* This necessitates the occasional use of datastep over proc append.'; put '*/'; put '%if %mf_existds(&outds) %then %do;'; put '%local basevars appvars newvars;'; put '%let basevars=%mf_getvarlist(&outds);'; put '%let appvars=%mf_getvarlist(&out_ds);'; put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));'; put '%if &newvars>0 %then %do;'; put 'data &outds;'; put 'set &outds &out_ds;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds force nowarn;'; put 'run;'; put '%end;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds;'; put 'run;'; put '%end;'; put '/* recursive call */'; put '%if &maxdepth>&level or &maxdepth=MAX %then %do;'; put 'data _null_;'; put 'set &out_ds;'; put 'where file_or_folder=''folder'';'; put '%if &showparent=YES and &level=0 %then %do;'; put 'if filepath ne directory;'; put '%end;'; put 'length code $10000;'; put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"'; put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");'; put 'put code=;'; put 'call execute(code);'; put 'run;'; put '%end;'; put '/* tidy up */'; put 'proc sql;'; put 'drop table &out_ds;'; put '%mend mp_dirlist;'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mfs_httpheader(header_name'; put ',header_value'; put ')/*/STORE SOURCE*/;'; put '%global sasjs_stpsrv_header_loc;'; put '%local fref fid i;'; put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;'; put '%put &=fref &=sasjs_stpsrv_header_loc;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%mend mfs_httpheader;'; put '%macro mp_streamfile('; put 'contenttype=TEXT'; put ',inloc='; put ',inref=0'; put ',iftrue=%str(1=1)'; put ',outname='; put ',outref=_webout'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let contentype=%upcase(&contenttype);'; put '%let outref=%upcase(&outref);'; put '%local platform; %let platform=%mf_getplatform();'; put '/**'; put '* check engine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put '%local streamweb;'; put '%let streamweb=0;'; put 'data _null_;'; put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));'; put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');'; put 'run;'; put '%if &contentype=CSV %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/csv'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/csv'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/csv)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=EXCEL %then %do;'; put '/* suitable for XLS format */'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype=''application/vnd.ms-excel'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="image/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"'; put 'contenttype="text/%lowcase(&contenttype)"'; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=TEXT %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/text'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/text'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/text)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="font/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=XLSX %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'','; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype='; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type'; put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; put ')'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=ZIP %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/zip'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip'''; put 'contenttype=''application/zip'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/zip)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;'; put '%end;'; put '%if &inref ne 0 %then %do;'; put '%mp_binarycopy(inref=&inref,outref=&outref)'; put '%end;'; put '%else %do;'; put '%mp_binarycopy(inloc="&inloc",outref=&outref)'; put '%end;'; put '%mend mp_streamfile;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getauditfile.sas'; put '@brief Downloads a zip file containing audit info.'; put '@details The staging location from the &mpelocapprovals location'; put 'is zipped and returned as a file download. A user can only request the'; put 'audit pack if they have EDIT or APPROVE rights on the target table.'; put '

SAS Macros

'; put '@li mf_getuser.sas'; put '@li mf_verifymacvars.sas'; put '@li mpe_accesscheck.sas'; put '@li mp_abort.sas'; put '@li mp_dirlist.sas'; put '@li mp_binarycopy.sas'; put '@li mf_getattrn.sas'; put '@li mp_streamfile.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put 'options mprint;'; put '/* security checks */'; put '%let user=%mf_getuser();'; put 'proc sql noprint;'; put 'select cats(base_lib,''.'',base_ds) into: libds'; put 'from &mpelib..mpe_submit'; put 'where table_id="&table";'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(libds table)=0)'; put ',mac=&_program'; put ',msg=%str(Missing: libds table)'; put ')'; put '%mpe_accesscheck(&libds,outds=authEDIT,user=&user,access_level=EDIT);'; put '%mpe_accesscheck(&libds,outds=authAPP,user=&user,access_level=APPROVE);'; put '%mp_abort('; put 'iftrue=('; put '%mf_getattrn(work.authEDIT,NLOBS)=0 & %mf_getattrn(work.authAPP,NLOBS)=0'; put ')'; put ',mac=mpestp_audit'; put ',msg=%str(&user not authorised to download audit data for &table)'; put ')'; put 'ods package(ProdOutput) open nopf;'; put 'options notes source2 mprint;'; put '%let table=%unquote(&table);'; put '%mp_dirlist(outds=dirs, path=&mpelocapprovals/&TABLE);'; put 'data _null_;'; put 'set dirs;'; put 'retain str1'; put '"ods package(ProdOutput) add file=''&mpelocapprovals/&TABLE/";'; put 'retain str2 "'' mimetype=''text/plain'' path=''contents/'';";'; put 'call execute(cats(str1,filename,str2));'; put 'run;'; put '%let archive_path=%sysfunc(pathname(work));'; put 'ods package(ProdOutput) publish archive properties'; put '(archive_name= "&table..zip" archive_path="&archive_path");'; put 'ods package(ProdOutput) close;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%nrstr(syscc=&syscc)'; put ')'; put '/* now serve zip file to client */'; put '%mp_streamfile(contenttype=ZIP'; put ',inloc=%str(&archive_path/&table..zip)'; put ',outname=&table..zip'; put ')'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getdiffs; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mpe_getvars(injs,outds);'; put '/* load parameters */'; put 'data _null_;'; put '__dummychar='''';__dummynum=0;'; put 'set &outds;'; put 'array __charvals _character_;'; put 'do over __charvals;'; put 'call symputx(vname(__charvals),__charvals,''g'');'; put 'end;'; put 'array __numvals _numeric_;'; put 'do over __numvals;'; put 'call symputx(vname(__numvals),__numvals,''g'');'; put 'end;'; put 'run;'; put '%mend mpe_getvars;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mfs_httpheader(header_name'; put ',header_value'; put ')/*/STORE SOURCE*/;'; put '%global sasjs_stpsrv_header_loc;'; put '%local fref fid i;'; put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;'; put '%put &=fref &=sasjs_stpsrv_header_loc;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%mend mfs_httpheader;'; put '%macro mp_streamfile('; put 'contenttype=TEXT'; put ',inloc='; put ',inref=0'; put ',iftrue=%str(1=1)'; put ',outname='; put ',outref=_webout'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let contentype=%upcase(&contenttype);'; put '%let outref=%upcase(&outref);'; put '%local platform; %let platform=%mf_getplatform();'; put '/**'; put '* check engine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put '%local streamweb;'; put '%let streamweb=0;'; put 'data _null_;'; put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));'; put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');'; put 'run;'; put '%if &contentype=CSV %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/csv'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/csv'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/csv)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=EXCEL %then %do;'; put '/* suitable for XLS format */'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype=''application/vnd.ms-excel'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="image/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"'; put 'contenttype="text/%lowcase(&contenttype)"'; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=TEXT %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/text'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/text'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/text)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="font/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=XLSX %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'','; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype='; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type'; put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; put ')'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=ZIP %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/zip'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip'''; put 'contenttype=''application/zip'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/zip)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;'; put '%end;'; put '%if &inref ne 0 %then %do;'; put '%mp_binarycopy(inref=&inref,outref=&outref)'; put '%end;'; put '%else %do;'; put '%mp_binarycopy(inloc="&inloc",outref=&outref)'; put '%end;'; put '%mend mp_streamfile;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getdiffs.sas'; put '@brief Retrieves the diff file for viewing'; put '@details'; put '

SAS Macros

'; put '@li mpe_getvars.sas'; put '@li mpe_accesscheck.sas'; put '@li mf_getattrn.sas'; put '@li mp_abort.sas'; put '@li mp_binarycopy.sas'; put '@li mp_streamfile.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%mpe_getvars(BrowserParams, BrowserParams);'; put '/* security checks */'; put '%let user=%mf_getuser();'; put '%mpe_accesscheck(&libds,outds=authEDIT,user=&user,access_level=EDIT)'; put '%mpe_accesscheck(&libds,outds=authAPP,user=&user,access_level=APPROVE)'; put '%macro mpestp_diffs();'; put '%if %mf_getattrn(work.authEDIT,NLOBS)=0 & %mf_getattrn(work.authAPP,NLOBS)=0'; put '%then %do;'; put '%mp_abort(msg=%str('; put '&user not authorised to download diffs data for &stp_table)'; put ',mac=mpestp_diffs.sas);'; put '%return;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '/* stream diffs csv to client */'; put '%mp_streamfile(contenttype=EXCEL'; put ',inloc=%str(&mpelocapprovals/&TABLE/&STP_DIFFS_CSV)'; put ',outname=&STP_DIFFS_CSV'; put ')'; put '%mend mpestp_diffs;'; put '%mpestp_diffs()'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getstagetable; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvalue(libds,variable,filter=1'; put ')/*/STORE SOURCE*/;'; put '%if %mf_getattrn(&libds,NLOBS)>0 %then %do;'; put '%local dsid rc &variable;'; put '%let dsid=%sysfunc(open(&libds(where=(&filter))));'; put '%syscall set(dsid);'; put '%let rc = %sysfunc(fetch(&dsid));'; put '%let rc = %sysfunc(close(&dsid));'; put '%trim(&&&variable)'; put '%end;'; put '%mend mf_getvalue;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getstagetable.sas'; put '@brief Retrieves the actual table that is being sent for update'; put '@details'; put '

SAS Macros

'; put '@li mf_getvalue.sas'; put '@li mp_abort.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%let table_id=%mf_getvalue(work.iwant,table_id);'; put 'libname loc "&mpelocapprovals/&table_id";'; put 'data stagetable;'; put 'set loc.&table_id;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,stagetable,missing=STRING)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=postdata; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '/** @cond */'; put '%macro mf_existvar(libds /* 2 part dataset name */'; put ', var /* variable name */'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid=0 %then %do;'; put '%put %sysfunc(sysmsg());'; put '0'; put '%end;'; put '%else %if %length(&var)=0 %then %do;'; put '0'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%sysfunc(varnum(&dsid,&var))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_existvar;'; put '/** @endcond */'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro bitemporal_closeouts('; put 'tech_from=tx_from_dttm'; put ',tech_to = tx_to_dttm /* Technical TO datetime variable.'; put 'Req''d on BASE table only. */'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE /* Name of STAGING table. */'; put ',PK= name sex /* Business key, space separated. */'; put '/* Should INCLUDE BUS_FROM field if relevant. */'; put ',NOW=DEFINE'; put ',FILTER= /* supply a filter to limit the update */'; put ',outdest= /* supply an unquoted filepath/filename.ext to get'; put 'a text file containing the update statements */'; put ',loadtype='; put ',loadtarget=YES /* if <> YES will return without changing anything */'; put ');'; put '%put ENTERING &sysmacroname;'; put '%local x var start;'; put '%let start=%sysfunc(datetime());'; put '%dc_assignlib(WRITE,&base_lib)'; put '%dc_assignlib(WRITE,&append_lib)'; put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;'; put '%put &=now;'; put '/**'; put '* perform basic checks'; put '*/'; put '/* do tables exist? */'; put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;'; put '%mp_abort(msg=&base_lib..&base_dsn does not exist)'; put '%end;'; put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;'; put '%mp_abort(msg=&append_lib..&append_dsn does not exist)'; put '%end;'; put '/* do TX columns exist? */'; put '%if &loadtype ne UPDATE %then %do;'; put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;'; put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;'; put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%end;'; put '/* do PK columns exist? */'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)'; put '%end;'; put '%end;'; put '/* check uniqueness */'; put 'proc sort data=&append_lib..&append_dsn'; put 'out=___closeout1 noduprecs dupout=___closeout1a;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then'; put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);'; put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */'; put '%local gap;'; put '%let gap=0;'; put 'data _null_;'; put 'now=&now;'; put 'gap=intck(''HOURS'',now,datetime());'; put 'call symputx(''gap'',gap,''l'');'; put 'run;'; put '%mf_abort('; put 'iftrue=(&gap > 24),'; put 'msg=NOW variable (&now) is not within a 24hr tolerance'; put ')'; put '/* have any warnings / errs occurred thus far? If so, abort */'; put '%mf_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/**'; put '* Create closeout statements. These are sent as individual SQL statements'; put '* to ensure pass-through utilisation. The update_cnt variable monitors'; put '* how many records were actually updated on the target table.'; put '*/'; put '%local update_cnt;'; put '%let update_cnt=0;'; put 'filename tmp temp;'; put 'data _null_;'; put 'set ___closeout1;'; put 'file tmp;'; put 'if _n_=1 then put ''proc sql noprint;'' ;'; put 'length string $32767.;'; put '%if &loadtype=UPDATE %then %do;'; put 'put "delete from &base_lib..&base_dsn where 1";'; put '%end;'; put '%else %do;'; put 'now=symget(''now'');'; put 'put "update &base_lib..&base_dsn set &tech_to= " now @;'; put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;'; put 'put " ,PROCESSED_DTTM=" now @;'; put '%end;'; put 'put " where " now " lt &tech_to ";'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;'; put '/* use single quotes to avoid ampersand resolution in data */'; put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";'; put '%end;'; put '%else %do;'; put 'string=cats(" & &var=",&var);'; put '%end;'; put 'put string;'; put '%end;'; put 'put "&filter ;";'; put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';'; put 'run;'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%if &loadtarget ne YES %then %return;'; put '/* ensure we have a lock */'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn'; put ',ref=bitemporal_closeouts'; put ',ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'options source2;'; put '%inc tmp;'; put 'filename tmp clear;'; put '/**'; put '* Update audit tracker'; put '*/'; put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);'; put '%local user; %let user=%mf_getuser();'; put 'proc sql;'; put 'insert into &mpelib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"'; put ',LOADTYPE="CLOSEOUT"'; put ',DELETED_RECORDS=&update_cnt'; put ',NEW_RECORDS=0'; put ',DURATION=%sysfunc(datetime())-&start'; put ',USER_NM="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%mend bitemporal_closeouts;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=''Schema/Owner'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '/** @cond */'; put '%macro mp_storediffs(libds'; put ',origds'; put ',key'; put ',delds=0'; put ',appds=0'; put ',modds=0'; put ',outds=work.mp_storediffs'; put ',loadref=0'; put ',processed_dttm=0'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));'; put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));'; put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));'; put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));'; put '%let dslist=&origds;'; put '%if &delds ne 0 %then %do;'; put '%let delds=%upcase(&delds);'; put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;'; put '%let dslist=&dslist &delds;'; put '%end;'; put '%if &appds ne 0 %then %do;'; put '%let appds=%upcase(&appds);'; put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;'; put '%let dslist=&dslist &appds;'; put '%end;'; put '%if &modds ne 0 %then %do;'; put '%let modds=%upcase(&modds);'; put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;'; put '%let dslist=&dslist &modds;'; put '%end;'; put '%let origds=%upcase(&origds);'; put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;'; put '%let key=%upcase(&key);'; put '/* hash the key and append all the tables (marking the source) */'; put 'data &ds1;'; put 'set &dslist indsname=&inds_auto;'; put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);'; put '&inds_keep=upcase(&inds_auto);'; put 'proc sort;'; put 'by &inds_keep &hashkey;'; put 'run;'; put '/* transpose numeric & char vars */'; put 'proc transpose data=&ds1'; put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));'; put 'by &inds_keep &hashkey;'; put 'var _numeric_;'; put 'run;'; put 'proc transpose data=&ds1'; put 'out=&ds3('; put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)'; put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))'; put ');'; put 'by &inds_keep &hashkey;'; put 'var _character_;'; put 'run;'; put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;'; put '/* this is a format catalog - cannot query cols directly */'; put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"'; put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"'; put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";'; put '%end;'; put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);'; put 'data &ds4;'; put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;'; put 'if _n_=1 then call missing(_label_);'; put 'drop _label_;'; put 'set &ds2 &ds3 indsname=&inds_auto;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%upcase(&vlist));'; put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';'; put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;'; put 'call symputx(''syscc'',98);'; put 'end;'; put 'if &inds_keep="&appds" then move_type=''A'';'; put 'else if &inds_keep="&delds" then move_type=''D'';'; put 'else if &inds_keep="&modds" then move_type=''M'';'; put 'else if &inds_keep="&origds" then move_type=''O'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;'; put 'call symputx(''syscc'',99);'; put 'end;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;'; put 'else is_pk=0;'; put 'drop &inds_keep;'; put 'run;'; put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());'; put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);'; put '%let libds=%upcase(&libds);'; put '/* join orig vals for modified & deleted */'; put 'proc sql;'; put 'create table &outds as'; put 'select "&loadref" as load_ref length=36'; put ',&processed_dttm as processed_dttm format=E8601DT26.6'; put ',"%scan(&libds,1,.)" as libref length=8'; put ',"%scan(&libds,2,.)" as dsn length=32'; put ',b.key_hash length=32'; put ',b.move_type length=1'; put ',b.tgtvar_nm length=32'; put ',b.is_pk'; put ',case when b.move_type ne ''M'' then -1'; put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0'; put 'else 1'; put 'end as is_diff'; put ',b.tgtvar_type length=1'; put ',case when b.move_type=''D'' then b.newval_num'; put 'else a.newval_num'; put 'end as oldval_num format=best32.'; put ',case when b.move_type=''D'' then .'; put 'else b.newval_num'; put 'end as newval_num format=best32.'; put ',case when b.move_type=''D'' then b.newval_char'; put 'else a.newval_char'; put 'end as oldval_char length=32765'; put ',case when b.move_type=''D'' then '''''; put 'else b.newval_char'; put 'end as newval_char length=32765'; put 'from &ds4(where=(move_type=''O'')) as a'; put 'right join &ds4(where=(move_type ne ''O'')) as b'; put 'on a.tgtvar_nm=b.tgtvar_nm'; put 'and a.key_hash=b.key_hash'; put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4;'; put '%end;'; put '%mend mp_storediffs;'; put '/** @endcond */'; put '%macro bitemporal_dataloader('; put 'bus_from= /* Business FROM datetime variable. Req''d on'; put 'STAGING & BASE tables.*/'; put ',bus_to = /* Business TO datetime variable. Req''d on'; put 'STAGING & BASE tables. */'; put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/'; put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */'; put ',tech_from= /* Technical FROM datetime variable. Req''d on'; put 'BASE table only. */'; put ',tech_to = /* Technical TO datetime variable. Req''d on BASE'; put 'table only. */'; put ',processed= 0'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE'; put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */'; put ',PK= name sex'; put ',RK_UNDERLYING='; put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */'; put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular'; put 'SCD2 loader then set this switch to YES to'; put 'ensure the MAXKEYTABLE is updated with the'; put 'current maximum RK value for the target table'; put '*/'; put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is'; put 'unique on its business key */'; put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in'; put '&dclib..DATALOADS */'; put ',LOADTYPE=BITEMPORAL'; put ',RK_MAXKEYTABLE= mpe_maxkeyvalues'; put ',LOG=1 /* Switch to 0 to prevent records being added to'; put '&mpelib..mpe_DATALOADS (ie when testing)*/'; put ',DELETE_COL= _____DELETE__THIS__RECORD_____'; put '/* If this variable is found in the append dataset'; put 'then records are closed out (or deleted) in the'; put 'append table where that variable= "Yes" */'; put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off'; put 'target table load and generate temp tables only */'; put ',CLOSE_VARS='; put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is'; put 'no facility to close out removed records (all records are'; put 'assumed new or changed). But how does one determine which'; put 'records are removed? Short of loading the entire table'; put 'each time? This parameter allows a set of variables'; put '(this should be a subset of the PK) to be declared, and'; put 'the macro will determine which records in the base table'; put 'need to be closed out ahead of the load.'; put 'For instance, given the following:'; put 'Base Table Staging Table'; put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT'; put 'JAN ACME4 66 JAN ACME4 66'; put 'FEB ACME4 99 FEB ACME4 99'; put 'FEB ACME1 22'; put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,'; put 'the "FEB PAG 22" record would get closed out.'; put '*/'; put ',config_table=&dclib..MPE_CONFIG'; put ',dclib=&dc_libref'; put ',outds_del=work.outds_del'; put ',outds_add=work.outds_add'; put ',outds_mod=work.outds_mod'; put ',outds_audit=0'; put ');'; put '/* when changing this macro, update the version num here */'; put '%local ver;'; put '%let ver=32;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */'; put '/* return straight away if nothing to load */'; put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);'; put '%if &nobs=-1 %then %do;'; put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;'; put '%end;'; put '%if &nobs=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/* hard exit if err condition exists */'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)'; put ')'; put '%local engine_type;'; put '%let engine_type=%mf_getengine(&base_lib);'; put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0'; put '%then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/**'; put '* The metadata functions (eg mf_existvar) will fail if the base table has a'; put '* SAS lock. So, make a snapshot of the base table for further use.'; put '* Also, make output tables (regardless).'; put '*/'; put '%local basecopy;'; put '%let basecopy=%mf_getuniquename(prefix=basecopy);'; put 'data &basecopy &outds_mod &outds_add &outds_del;'; put 'set &base_lib..&base_dsn;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)'; put ')'; put '%local cols idx_pk md5_col ;'; put '%let md5_col=___TMP___md5;'; put '%let check_uniqueness=%upcase(&check_uniqueness);'; put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);'; put '%let high_date=%unquote(&high_date);'; put '%let loadtype=%upcase(&loadtype);'; put '/* ensure irrelevant variables are cleared */'; put '%if &loadtype=BUSTEMPORAL %then %do;'; put '%let tech_from=;'; put '%let tech_to=;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put '%let bus_from=;'; put '%let bus_to=;'; put '%end;'; put '/* ensure relevant variables are supplied */'; put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing BUS_FROM / BUS_TO)'; put ')'; put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing TECH_FROM / TECH_TO)'; put ')'; put '/**'; put '* drop any tables (may be defined as views or vice versa preventing overwrite)'; put '*/'; put '%mp_dropmembers(append bitemp0_append bitemp_cols)'; put '/* SQL Server requires its own time values */'; put '/* 9.2 will only give picture format down to seconds. 9.3 allows'; put 'milliseconds by using lower S and defining the decimal in the format name..*/'; put 'PROC FORMAT;'; put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put '%local dbnow;'; put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'data _null_;'; put '/* convert space separated macvar to comma separated for SQL processing */'; put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');'; put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');'; put 'now=&dbnow;'; put 'call symputx(''NOW'',now,''L'');'; put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');'; put 'length etlsource $100;'; put 'etlsource=subpad(symget(''etlsource''),1,100);'; put 'call symputx(''etlsource'',etlsource,''l'');'; put 'run;'; put '/**'; put '* Even if no PROCESSED var provided, assume that any variable named'; put '* PROCESSED_DTTM should be updated'; put '*/'; put '%if &processed=0 %then %do;'; put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)'; put '%then %let processed=PROCESSED_DTTM;'; put '%else %let processed=;'; put '%end;'; put '/* extract colnames for md5 creation / change tracking */'; put 'proc contents noprint data=&base_lib..&base_dsn'; put 'out=work.bitemp_cols (keep=name type length varnum format:);'; put 'run;'; put 'proc sql noprint;'; put 'select name into: cols separated by '','''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put 'else cats(''put(md5(trim(put(ifn(missing('''; put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end'; put 'into: stripcols separated by ''||'''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put '/* set default formats*/'; put '%let bus_from_fmt = datetime19.;'; put '%let bus_to_fmt = datetime19.;'; put '%let processed_fmt = datetime19.;'; put '%let tech_from_fmt = format=datetime19.;'; put '%let tech_to_fmt = format=datetime19.;'; put '%put &=stripcols;'; put '%put &=pk;'; put 'data _null_;'; put 'set work.bitemp_cols;'; put 'if type=2 or type=6 then do;'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'if format='''' then fmt=cats(length,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put 'if upcase(name)="%upcase(&bus_from)" then'; put 'call symputx(''bus_from_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&bus_to)" then'; put 'call symputx(''bus_to_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_from)" then'; put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_to)" then'; put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&processed)" then'; put 'call symputx(''processed_fmt'',fmt,''L'');'; put 'run;'; put '%if %index(%quote(&cols),___TMP___) %then %do;'; put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim('; put ') This may conflict with temp variable generation!!);'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);'; put '%let syscc=5;'; put '%return;'; put '%end;'; put '/* if transaction dates appear on the APPEND table, need to remove them */'; put '%local drop_tx_dates /* used in append table */'; put 'drop_tx_dates_noobs /* used to take the base table structure */;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)'; put '%then %let drop_tx_dates=&tech_from;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)'; put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;'; put '%if %length(%trim(&drop_tx_dates))>0'; put '%then %let drop_tx_dates=(drop=&drop_tx_dates);'; put '%if %mf_existvar(&basecopy, &tech_from)'; put '%then %let drop_tx_dates_noobs=&tech_from;'; put '%if %mf_existvar(&basecopy, &tech_to)'; put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;'; put '%if %length(%trim(&drop_tx_dates_noobs))>0'; put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);'; put '%else %let drop_tx_dates_noobs=(obs=0);'; put '/**'; put '* Lock the table. This is necessary as we are doing a two part update (first'; put '* closing records then appending new records). It is theoretically possible'; put '* that an upload may occur whilst preparing the staging tables. And the'; put '* staging tables are about to be prepared..'; put '*/'; put '%if &LOADTARGET = YES %then %do;'; put '%put locking &base_lib..&base_dsn;'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%put locking &outds_audit;'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put '/* not an actual load, so avoid updating the max key table in next step. */'; put '%let rk_update_maxkeytable=NO;'; put '%end;'; put '%if %length(&RK_UNDERLYING)>0 %then %do;'; put '%mp_retainedkey('; put 'base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=&append_lib'; put ',append_dsn=&append_dsn'; put ',retained_key=&pk'; put ',business_key=&rk_underlying'; put ',check_uniqueness=&CHECK_UNIQUENESS'; put ',outds=work.append'; put '%if &rk_update_maxkeytable=NO %then %do;'; put ',maxkeytable=0'; put '%end;'; put '%else %do;'; put ',maxkeytable=&dclib..&RK_MAXKEYTABLE'; put '%end;'; put ',locktable=&dclib..mpe_lockanytable'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',filter_str=%str( (where=( &now < &tech_to)) )'; put '%end;'; put ')'; put '%end;'; put '%else %do;'; put 'proc sql;'; put 'create view work.append as select * from &append_lib..&append_dsn;'; put '%end;'; put '/**'; put '* generate md5 for append table'; put '*/'; put '/* it is possible the source dataset has additional (unwanted) columns.'; put 'Drop if specified; */'; put '%if %length(&keepvars)>0 %then %do;'; put '/* remove tech dates from keepvars as they are generated later */'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));'; put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);'; put '%end;'; put '/* CAS varchar types cause append issues here, so perform autoconvert'; put 'by creating empty local table first */'; put 'data;'; put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;'; put 'run;'; put '%local emptybasetable; %let emptybasetable=&syslast;'; put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put '/* apply formats for bitemporal vars but not tx dates which are added later */'; put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;'; put 'format &bus_from &bus_from_fmt;'; put 'format &bus_to &bus_to_fmt;'; put '%end;'; put 'set &emptybasetable /* base table reqd in case append has fewer cols */'; put 'work.append &drop_tx_dates;'; put '%if %length(%str(&bus_from_override))>0 %then %do;'; put '&bus_from= %unquote(&bus_from_override) ;'; put '%end;'; put '%if %length(%str(&bus_to_override))>0 %then %do;'; put '&bus_to= %unquote(&bus_to_override) ;'; put '%end;'; put 'length &md5_col $32;'; put '&md5_col=put(md5(&stripcols),hex32.);'; put '%if %length(&processed)>0 %then %do;'; put 'format &processed &processed_fmt;'; put '&processed=&now;'; put '%end;'; put '/**'; put '* If a delete column exists then create the delete dataset'; put '*/'; put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;'; put 'drop &delete_col;'; put 'if upcase(&delete_col) = "YES" then output &outds_del ;'; put 'else output work.bitemp0_append ;'; put 'run;'; put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=%scan(&outds_del,-1,.)'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put 'output work.bitemp0_append;'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc gt 0 at line 494)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if %length(&close_vars)>0 %then %do;'; put '/**'; put '* need to close out records that are not provided'; put '*/'; put 'proc sql;'; put 'create table bitemp1_closevars1 as'; put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)'; put 'from &base_lib..&base_dsn a'; put 'inner join work.bitemp0_append b'; put 'on 1=1'; put '/* join on closevars key */'; put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));'; put '%let idx_val=%scan(&close_vars,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* filter base on tech dates if necessary */'; put '%if &loadtype=TXTEMPORAL %then %do;'; put 'where a.&tech_from <=&now and &now < a.&tech_to'; put '%end;'; put ';'; put 'create table bitemp1_closevars2 as'; put 'select distinct a.*'; put 'from bitemp1_closevars1 a'; put 'left join work.bitemp0_append b'; put 'on 1=1'; put '/* join on primary key */'; put '%do idx_pk=1 %to %sysfunc(countw(&pk));'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* identify removed records by null value in a field in PK but not close_vars'; put '*/'; put 'where b.%scan('; put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )'; put ') IS NULL'; put ';'; put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=bitemp1_closevars2'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '/* grab schema */'; put '%let baselib_schema=%mf_getschema(&base_lib);'; put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;'; put '/* grab redshift config */'; put '%local redcnt; %let redcnt=0;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'data _null_;'; put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));'; put 'x+1;'; put 'call symputx(cats(''rednm'',x),var_value,''l'');'; put 'call symputx(cats(''redval'',x),var_value,''l'');'; put 'call symputx(''redcnt'',x,''l'');'; put 'run;'; put '%end;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from &baselib_schema.&base_dsn'; put 'where timestamp &sqlnow < &tech_to );'; put '%else %let base_table=&baselib_schema.&base_dsn;'; put '/* make empty table first - must clone & drop extra cols as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &temp_table alter sortkey none) by myAlias;'; put '%end;'; put '%local dropcols;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(&pk)'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;'; put '%end;'; put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp0/view=work.vw_bitemp0;'; put 'set work.bitemp0_append(keep=&pk &md5_col);'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&temp_table'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=work.vw_bitemp0 force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);'; put 'data &temp_table;'; put 'set work.bitemp0_append;'; put 'run;'; put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);'; put 'proc fedsql sessref=dcsession;'; put 'create table &bitemp0base{options replace=true} as'; put '%end;'; put '%else %do;'; put '%let temp_table=work.bitemp0_append;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put 'proc sql;'; put 'create table work.bitemp0_base as'; put '%end;'; put 'select a.&md5_col /* this identifies NEW records */'; put ', b.*'; put '/* assume first PK field cannot be null (if defined in a PK constraint then'; put 'it definitely cannot be null) */'; put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG'; put 'from &baselib_schema.&temp_table a'; put 'left join &base_table b'; put 'on 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put '); proc sql; drop table &base_lib.."&temp_table"n;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put ';'; put 'quit;'; put 'data work.bitemp0_base;'; put 'set &bitemp0base;'; put 'run;'; put 'proc sql;'; put 'drop table &temp_table;'; put 'drop table &bitemp0base;'; put '%end;'; put '%else %do;'; put ';'; put '%end;'; put '/**'; put '* matching & changed records are those without NULL key values'; put '* &idx_val resolves to rightmost PK value (loop above)'; put '*/'; put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;'; put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)'; put ')'; put '%put hashcols2=&stripcols;'; put 'proc sql;'; put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as'; put 'select *'; put ', put(md5(&stripcols),$hex32.) as &md5_col'; put 'from work.bitemp0_base (drop=&md5_col)'; put 'where ___TMP___NEW_FLG=0;'; put '/**'; put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base'; put '*/'; put 'proc sql;'; put 'create table &outds_add'; put '(drop=&md5_col'; put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;'; put '&delete_col'; put '%end;'; put ')'; put 'as select a.*'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',&now as &tech_from &tech_from_fmt'; put ',&high_date as &tech_to &tech_to_fmt'; put '%end;'; put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */'; put ', work.bitemp0_base b /* BASE records (contains null values for new) */'; put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */'; put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */'; put '/**'; put '* identify INSERTS. These are records with the same business key but'; put '* the bus_from and bus_to value are higher / lower (respectively)'; put '* such that the existing record needs to be SPLIT to surround the new'; put '* record.'; put '* eg: OLD RECORD from=1 to=10'; put '* NEW RECORD from=5 to=7'; put '*'; put '* APPENDED RECORDS:'; put '* - from=1 to=5'; put '* - from=5 to=7'; put '* - from=7 to=10'; put '*/'; put '/* inserts cannot happen with TXTEMPORAL */'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* IDENTIFY */'; put 'create table work.bitemp3_inserts as'; put 'select b.*'; put ',a.&bus_from as ___TMP___from'; put ',a.&bus_to as ___TMP___to'; put 'from work.bitemp0_append a'; put ',work.bitemp1_current b'; put 'where a.&bus_from > b.&bus_from'; put 'and a.&bus_to < b.&bus_to'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields may'; put 'not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '/* SPLIT */'; put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;'; put 'set work.bitemp3_inserts;'; put 'by &pk &bus_from &bus_to &processed;'; put 'if first.&idx_val then do;'; put '___TMP___retain=&bus_to;'; put '&bus_to=___TMP___from;'; put 'output;'; put '&bus_to=___TMP___retain;'; put 'end;'; put 'if last.&idx_val then do;'; put '&bus_from=___TMP___to;'; put 'output;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* TX temporal load */'; put 'data work.bitemp3a_inserts;'; put 'set work.bitemp1_current;'; put 'stop;'; put 'run;'; put '%end;'; put '/* APPEND */'; put 'proc sql;'; put 'create view work.bitemp3a_view as'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put 'data bitemp3b_newbase;'; put 'set work.bitemp3a_inserts work.bitemp3a_view;'; put 'run;'; put '/** do not use! this converts short numerics into 8 bytes'; put 'proc sql;'; put 'create table work.bitemp3b_newbase as'; put 'select * from work.bitemp3a_inserts'; put 'union corr'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put '*/'; put '/**'; put '* identify CHANGED records from staging.'; put '* Same business key with different temporal dates or md5 value'; put '* This table must be overlayed onto / into existing business history'; put '*/'; put 'proc sql;'; put 'create table work.bitemp4_updated as select distinct a.*'; put 'from work.bitemp0_append a'; put ',work.bitemp3b_newbase b'; put 'where 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'and ( a.&md5_col ne b.&md5_col'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)'; put '%end;'; put ')'; put ';'; put '/**'; put '* This section would have been one simple step with union all'; put '* but that converts short numerics into 8 bytes!'; put '* so, convoluted alternative to retain the same functionality.'; put '*/'; put '/* base records */'; put 'create view work.bitemp4_prep1 as'; put 'select ''BASE'' as ___TMP___'; put ',b.*'; put 'from work.bitemp4_updated a'; put ',work.bitemp3b_newbase b'; put 'where 1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put ';'; put '/* updated records */'; put 'create view work.bitemp4_prep2 as'; put 'select ''STAG'' as ___TMP___ ,*'; put 'from work.bitemp4_updated;'; put '/* ensure we only keep columns that appear in both */'; put '%local bp1 bp2 bp3 bp4;'; put '%let bp1=%mf_getvarlist(bitemp4_prep1);'; put '%let bp2=%mf_getvarlist(bitemp4_prep2);'; put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);'; put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);'; put 'data work.bitemp4_prep3/view=bitemp4_prep3;'; put 'set bitemp4_prep1 bitemp4_prep2;'; put '%if %length(XX&bp3&bp4)>2 %then %do;'; put 'drop &bp3 &bp4 ;'; put '%end;'; put 'run;'; put '/* remove duplicates */'; put 'proc sql;'; put 'create table work.bitemp4a_allrecs as'; put 'select distinct *'; put 'from work.bitemp4_prep3'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields'; put 'may not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* this section aligns the business dates'; put '(eg for inserts or overlaps in the range) */'; put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );'; put 'set work.bitemp4a_allrecs;'; put 'by &pk &bus_from &bus_to &processed;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '___TMP___md5lag=lag(&md5_col);'; put '/* reset retained variables */'; put 'if first.&idx_val then do;'; put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/'; put 'if &md5_col=___TMP___md5lag then do;'; put '&bus_from=___TMP___from;'; put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;'; put 'end;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 1'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 1'' then do;'; put '/* else ensure bus_from starts from prior record bus_to */'; put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to'; put 'then &bus_from= ___TMP___to;'; put '/* new record may replace old record entirely */'; put 'if &bus_to <= &bus_from then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* keep staged records only */'; put 'data work.bitemp4b_firstpass;'; put 'set work.bitemp4a_allrecs;'; put 'if ___TMP___=''STAG'';'; put 'run;'; put '%end;'; put '/* next phase is to pass through in reverse - so set up the sort statement */'; put '%local byvar;'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let byvar=&byvar descending %scan(&pk,&idx_pk);'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL'; put '%then %let byvar=&byvar descending &bus_from descending &bus_to;'; put '/* if matching bus dates supplied, need to ensure we also have a sort'; put 'between BASE and STAGING tables */'; put '%let byvar=&byvar descending ___TMP___;'; put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;'; put 'by &byvar;'; put 'run;'; put '/**'; put '* Now (in reverse) pass back business start dates'; put '*/'; put 'data work.bitemp4d_secondpass;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '&tech_from=&now;'; put '&tech_to=&high_date;'; put '%end;'; put 'set work.bitemp4c_sort ;'; put 'by &byvar;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* put / _all_ /;*/'; put '___TMP___md5lag=lag(&md5_col);'; put 'if first.&idx_val then do;'; put '/* reset retained variables */'; put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry back bus_to */'; put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 2'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 2'' then do;'; put '/* else ensure bus_to stops at subsequent record bus_from */'; put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from'; put 'then &bus_to= ___TMP___from;'; put '/* new record may replace old record entirely */'; put 'if &bus_from >= &bus_to then delete;'; put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put '%end;'; put 'run;'; put '%put syscc (line600)=&syscc;'; put '/**'; put 'There may still be some records (eg old business history) which have not'; put 'changed.'; put 'Need to identify these and remove from the append so they are not updated'; put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the'; put 'business key) and any matching / identical records are split out (from those'; put 'that need to be updated).'; put '*/'; put '%if &loadtype=BITEMPORAL %then %do;'; put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);'; put 'data work.bitemp5a_lkp (keep=&md5_col)'; put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'set work.bitemp0_base;'; put '/* for BITEMPORAL we need to compare business dates also */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);'; put 'run;'; put 'data bitemp5b_updates;'; put 'set bitemp4d_secondpass;'; put 'if _n_=1 then do;'; put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');'; put 'md5_lkp.definekey("&md5_col");'; put 'md5_lkp.definedone();'; put 'end;'; put '/* drop old md5 col as will rebuild with new business dates */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;'; put 'if md5_lkp.check()=0 then delete;'; put 'run;'; put 'proc sql;'; put '/* get min bus from as will update (close out) all records from this point'; put '(for that PK)*/'; put 'create table work.bitemp5d_subquery as'; put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to'; put 'from work.bitemp5b_updates'; put 'group by &pk_comma;'; put '/* index has a huge efficiency impact on upcoming nested subquery */'; put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);'; put '%let lastds=work.bitemp5b_updates;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put 'proc sql;'; put 'create table work.bitemp5d_subquery as'; put 'select distinct &pk_comma'; put 'from bitemp4d_secondpass;'; put '%let lastds=work.bitemp4d_secondpass;'; put '%end;'; put '%else %let lastds=work.bitemp4d_secondpass;'; put '/* create single append table (an overlapped pre-sert may be classed as'; put 'both an update AND a new record). Also create temp views that may be'; put 'used for pre-load analysis. */'; put 'data &outds_mod;'; put 'set &lastds(drop=___TMP___: &md5_col);'; put 'run;'; put 'data bitemp6_allrecs / view=bitemp6_allrecs;'; put 'set &outds_mod /* UPDATED records */'; put '&outds_add /* NEW records */;'; put 'run;'; put 'proc sort data=work.bitemp6_allrecs'; put 'out=work.bitemp6_unique'; put 'noduprec'; put 'dupout=work.xx_BADBADBAD;'; put 'by _all_;'; put 'run;'; put '/* we have all our temp tables now so exit if this is all that is needed */'; put '%if &LOADTARGET ne YES %then %return;'; put '/* also exit if an err condition exists */'; put '%if &syscc>0 %then %do;'; put '%put syscc=&syscc;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)'; put ')'; put '/* final check - abort if a lock has appeared on the target or audit table */'; put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)'; put '%if %mf_existds(&outds_audit) %then %do;'; put '%mp_lockfilecheck(libds=&outds_audit)'; put '%end;'; put '/**'; put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!'; put '*/'; put '/**'; put '* First, CLOSE OUT changed records (if not a REPLACE)'; put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.'; put '* However - this can be worked around using a nested subquery..'; put '*/'; put 'data _null_;'; put 'putlog "&sysmacroname: CLOSEOUTS commencing";'; put 'run;'; put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: No closeouts needed";'; put 'run;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(&loadtype not yet supported in CAS engine)'; put ')'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds;'; put 'set work.bitemp5d_subquery;'; put 'run;'; put '/* delete the records */'; put 'proc cas ;'; put 'table.deleteRows / table={'; put 'caslib="&base_lib",'; put 'name="&base_dsn",'; put 'where="1=1",'; put 'whereTable={caslib=''CASUSER'',name="&delds"}'; put '};'; put 'quit;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&delds;'; put '%end;'; put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)'; put '%then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";'; put 'run;'; put '%local flexinow;'; put 'proc sql;'; put '/* if OLEDB then create a temp table for efficiency */'; put '%local innertable;'; put '%if &engine_type=OLEDB %then %do;'; put '%let innertable=[&temp_table];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp5d_subquery;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);'; put '%let top_table=&baselib_schema.&base_dsn;'; put '%let flexinow=timestamp &SQLNOW;'; put '/* make empty table first - must clone & drop extra cols'; put 'as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;'; put '%end;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;'; put 'set work.bitemp5d_subquery;'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&innertable ('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put 'data=work.vw_bitemp5d force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %do;'; put '%let innertable=bitemp5d_subquery;'; put '%let top_table=&base_lib..&base_dsn;'; put '%let flexinow=&now;'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put 'update &top_table set &tech_to=&flexinow'; put '%if %length(&processed)>0 %then %do;'; put ',&processed=&flexinow'; put '%end;'; put 'where &tech_from <= &flexinow and &flexinow < &tech_to and'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '/* changed records are deleted then re-appended when doing UPDATEs */'; put 'delete from &top_table where'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;'; put '%let syscc=5;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%goto end_of_macro;'; put '%end;'; put '/* perform join inside query as per'; put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */'; put 'exists( select 1 from &baselib_schema.&innertable where'; put '/* loop PK join */'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put '&base_dsn..&idx_val=&innertable..&idx_val and'; put '%end;'; put '%if &loadtype=BITEMPORAL %then %do;'; put '&base_dsn..&bus_from >= &innertable..&bus_from'; put 'and &base_dsn..&bus_to <= &innertable..&bus_to and'; put '%end;'; put '/* close the statement */'; put '1=1);'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put ') by myAlias;'; put 'execute (drop table &baselib_schema.&innertable) by myAlias;'; put '%end;'; put '%end;'; put 'quit;'; put 'data _null_;'; put 'putlog "&sysmacroname: Closeout complete";'; put 'run;'; put '/**'; put '* Append the new / updated records'; put '*/'; put '%if &engine_type=CAS %then %do;'; put '/* get varchar variables ready for casting */'; put '%local vcfmt vcrename vcassign vcdrop;'; put 'data _null_;'; put 'set work.bitemp_cols(where=(type=6)) end=last;'; put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;'; put 'retain vcrename vcassign vcdrop vcfmt;'; put 'if _n_=1 then vcrename=''(rename=('';'; put 'rancol=resolve(''%mf_getuniquename()'');'; put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';'; put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);'; put 'vcassign=cats(vcassign,name,''='',rancol,'';'');'; put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');'; put 'if last then do;'; put 'vcrename=cats(vcrename,''))'');'; put 'call symputx(''vcfmt'',vcfmt);'; put 'call symputx(''vcrename'',vcrename);'; put 'call symputx(''vcassign'',vcassign);'; put 'call symputx(''vcdrop'',vcdrop);'; put 'end;'; put 'run;'; put '/* prepare a temp cas table with varchars casted */'; put '%let tmp=%mf_getuniquename();'; put 'data casuser.&tmp ;'; put '&vcfmt'; put 'set work.bitemp6_unique &vcrename;'; put '&vcassign'; put '&vcdrop'; put 'run;'; put '/* load the table with varchars applied*/'; put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;'; put 'set casuser.&tmp;'; put 'run;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&tmp;'; put '/* this code will not work as regular tables do not have varchars */'; put '/*'; put 'proc casutil;'; put 'load data=work.bitemp6_unique'; put 'outcaslib="&base_lib" casout="&base_dsn" append ;'; put 'quit;'; put '*/'; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put 'proc append base=&base_lib..&base_dsn'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=bitemp6_unique force nowarn;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;'; put '%end;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '/* final check on syscc */'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=&_program'; put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)'; put ')'; put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;'; put 'data work.vw_outds_orig /view=work.vw_outds_orig;'; put 'set work.bitemp0_base (drop=&md5_col);'; put 'where ___TMP___NEW_FLG=0;'; put 'drop ___TMP___NEW_FLG;'; put 'run;'; put '/* update the AUDIT table */'; put '%if %mf_existds(&outds_audit) %then %do;'; put 'options mprint;'; put '%mp_storediffs(&base_lib..&base_dsn'; put ',work.vw_outds_orig'; put ',&pk &bus_from'; put ',delds=&outds_del'; put ',modds=&outds_mod'; put ',appds=&outds_add'; put ',outds=work.mp_storediffs'; put ',processed_dttm=&now'; put ',loadref=%superq(etlsource)'; put ')'; put '/* exclude unchanged values in modified rows */'; put 'data work.mp_storediffs;'; put 'set work.mp_storediffs;'; put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;'; put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;'; put 'run;'; put 'proc append base=&outds_audit data=work.mp_storediffs;'; put 'run;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Problem in audit stage (&outds_audit))'; put ')'; put '%let user=%mf_getUser();'; put '/**'; put 'Notify as appropriate EMAILS DISABLED'; put '%sumo_alerts(ALERT_EVENT=UPDATE'; put ', ALERT_TARGET=&base_lib..&base_dsn'; put ', from_user= &user);'; put '*/'; put '/* monitor BiTemporal usage */'; put '%if &log=1 %then %do;'; put '%put syscc=&syscc;'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'insert into &dclib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&ETLSOURCE"'; put ',LOADTYPE="&loadtype"'; put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)'; put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)'; put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)'; put ',DURATION=&dur'; put ',MAC_VER="v&ver"'; put ',user_nm="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%put syscc=&syscc;'; put '%end;'; put '%end_of_macro:'; put '%mend bitemporal_dataloader;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mpe_alerts(alert_event='; put ', alert_lib='; put ', alert_ds='; put ', dsid='; put ');'; put '/* exit if not configured */'; put '%global DC_EMAIL_ALERTS;'; put '%if &DC_EMAIL_ALERTS ne YES %then %do;'; put '%put DCNOTE: Email alerts are not configured;'; put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);'; put '%return;'; put '%end;'; put '%let alert_event=%upcase(&alert_event);'; put '%let alert_lib=%upcase(&alert_lib);'; put '%let alert_ds=%upcase(&alert_ds);'; put '%let from_user=%mf_getuser();'; put '/* get users TO which the email should be sent */'; put 'proc sql noprint;'; put 'create table work.users as select distinct a.alert_user,'; put 'b.user_displayname,'; put 'b.user_email'; put 'from &mpelib..mpe_alerts'; put '(where=(&dc_dttmtfmt. lt tx_to)) a'; put 'left join &mpelib..mpe_emails'; put '(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))'; put 'where a.alert_event in ("&alert_event","*ALL*")'; put 'and a.alert_lib in ("&alert_lib","*ALL*")'; put 'and a.alert_ds in ("&alert_ds","*ALL*");'; put '/* ensure the submitter is included on the email */'; put '%local isThere userdisp user_eml;'; put '%let isThere=0;'; put 'select count(*) into: isThere from &syslast where alert_user="&from_user";'; put '%if &isThere=0 %then %do;'; put 'select user_displayname, user_email'; put 'into: userdisp trimmed, :user_eml trimmed'; put 'from &mpelib..mpe_emails'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and user_name="&from_user";'; put 'insert into work.users'; put 'set alert_user="&from_user"'; put ',user_displayname="&userdisp"'; put ',user_email="&user_eml";'; put '%end;'; put '/* if no email / displayname is provided, then extract from metadata */'; put 'data work.emails;'; put 'set work.users;'; put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;'; put '/* get displayname */'; put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");'; put 'if metadata_getnobj(text,1,uri)<=0 then do;'; put 'putlog "DCWARN: &from_user not found";'; put 'return;'; put 'end;'; put 'else if user_displayname = '''' then do;'; put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;'; put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';'; put 'end;'; put 'end;'; put 'if index(user_email,''@'') then return;'; put '/* get email from metadata if not in input table */'; put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;'; put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";'; put 'end;'; put 'else do;'; put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;'; put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';'; put 'end;'; put 'end;'; put '/* only keep valid emails */'; put 'if index(user_email,''@'') ;'; put '/* dump contents for debugging */'; put 'if _n_<21 then putlog (_all_)(=);'; put 'run;'; put '%local emails;'; put 'proc sql noprint;'; put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;'; put '/* exit if nobody to email */'; put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;'; put '%put NOTE: No alerts configured (mpe_alerts.sas);'; put '%return;'; put '%end;'; put '/* display email options */'; put 'data _null_;'; put 'set sashelp.voption(where=(group=''EMAIL''));'; put 'put optname ''='' setting;'; put 'run;'; put 'filename __out email (&emails)'; put 'subject="Table &alert_lib..&alert_ds has been &alert_event";'; put '%local SUBMITTED_TXT;'; put '%if &alert_event=SUBMITTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_submit;'; put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';'; put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been proposed by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''SUBMITTED_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=APPROVED %then %do;'; put '/* there is no approval message */'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been approved by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=REJECTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_review;'; put 'where table_id="&dsid" and review_status_id=''REJECTED'';'; put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been rejected by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''REVIEW_REASON_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put 'filename __out clear;'; put '%mend mpe_alerts ;'; put '%macro dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; put ',outref=&outref'; put ')'; put '%mend dc_getservicecode;'; put '%macro mp_include(fileref'; put ',prefix=_'; put ',opts=SOURCE2'; put ',errds=work.mp_abort_errds'; put ')/*/STORE SOURCE*/;'; put '/* prepare precode */'; put '%local tempref;'; put '%let tempref=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &tempref;'; put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));'; put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';'; put 'name=scan(xpath,-1,''/\'');'; put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';'; put 'path=subpad(xpath,1,length(xpath)-length(name)-1);'; put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';'; put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";'; put 'run;'; put '/* prepare the errds */'; put 'data &errds;'; put 'length msg mac $1000;'; put 'call missing(msg,mac);'; put 'iftrue=''1=0'';'; put 'run;'; put '/* include the include */'; put '%inc &tempref &fileref/&opts;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)'; put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)'; put ')'; put 'filename &tempref clear;'; put '%mend mp_include;'; put '%macro mpe_runhook(hookvar);'; put '%local pgmloc pgmtype;'; put '%let pgmtype=0;'; put '%put &sysmacroname: &=hookvar;'; put '%if %length(&&&hookvar)>0 %then %do;'; put '%put &sysmacroname: Executing &&&hookvar;'; put 'data _null_;'; put 'rule_value=symget("&hookvar");'; put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;'; put 'call symputx(''pgmtype'',''PGM'');'; put 'call symputx(''pgmloc'',rule_value);'; put 'end;'; put 'else do;'; put 'apploc="%mf_getapploc()";'; put 'if substr(rule_value,1,1) ne ''/'''; put 'then rule_value=cats(apploc,''/'',rule_value);'; put 'call symputx(''pgmloc'',rule_value);'; put 'call symputx(''pgmtype'',''JOB'');'; put 'end;'; put 'run;'; put '%if &pgmtype=PGM %then %do;'; put 'filename sascode "&pgmloc";'; put '%end;'; put '%else %do;'; put '%dc_getservicecode(loc=&pgmloc'; put ',outref=sascode'; put ')'; put '%end;'; put '/* the below script will need to modify work.STAGING_DS */'; put '%local x; %let x=; /* legacy feature */'; put '%mp_include(sascode)'; put '%end;'; put '%mend mpe_runhook;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mp_md5(cvars=,nvars=);'; put '%local i var sep;'; put 'put(md5('; put '%do i=1 %to %sysfunc(countw(&cvars));'; put '%let var=%scan(&cvars,&i,%str( ));'; put '&sep put(md5(trim(&var)),$hex32.)'; put '%let sep=!!;'; put '%end;'; put '%do i=1 %to %sysfunc(countw(&nvars));'; put '%let var=%scan(&nvars,&i,%str( ));'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put '&sep put(md5(trim(put(ifn(missing(&var),&var,&var*1),binary64.))),$hex32.)'; put '%let sep=!!;'; put '%end;'; put '),$hex32.)'; put '%mend mp_md5;'; put '%macro mp_loadformat(libcat,libds'; put ',loadtarget=NO'; put ',auditlibds=0'; put ',locklibds=0'; put ',delete_col=_____DELETE__THIS__RECORD_____'; put ',outds_add=0'; put ',outds_del=0'; put ',outds_mod=0'; put ',mdebug=0'; put ');'; put '/* set up local macro variables and temporary tables (with a prefix) */'; put '%local err msg prefix dslist i var fmtlist ibufsize;'; put '%let dslist=base_fmts template inlibds ds1 stagedata storediffs del1 del2;'; put '%if &outds_add=0 %then %let dslist=&dslist outds_add;'; put '%if &outds_del=0 %then %let dslist=&dslist outds_del;'; put '%if &outds_mod=0 %then %let dslist=&dslist outds_mod;'; put '%let prefix=%substr(%mf_getuniquename(),1,21);'; put '%do i=1 %to %sysfunc(countw(&dslist));'; put '%let var=%scan(&dslist,&i);'; put '%local &var;'; put '%let &var=%upcase(&prefix._&var);'; put '%end;'; put '/* in DC, format catalogs maybe specified in the libds with a -FC extension */'; put '%let libcat=%scan(&libcat,1,-);'; put '/* perform input validations */'; put '%mp_abort('; put 'iftrue=(%mf_existds(&libds)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(&libds could not be found)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_existvar(&libds,FMTROW)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(FMTROW not found in &libds)'; put ')'; put '%let err=0;'; put '%let msg=0;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'value=upcase(value);'; put 'if &mdebug=0 then put name ''='' value;'; put 'if name=:''LOAD'' and value not in (''YES'',''NO'') then do;'; put 'call symputx(''msg'',"invalid value for "!!name!!":"!!value);'; put 'call symputx(''err'',1);'; put 'stop;'; put 'end;'; put 'else if name=''LIBCAT'' then do;'; put 'if exist(value,''CATALOG'') le 0 then do;'; put 'call symputx(''msg'',"Unable to open catalog: "!!value);'; put 'call symputx(''err'',1);'; put 'stop;'; put 'end;'; put 'end;'; put 'else if (name=:''OUTDS'' or name in (''DELETE_COL'',''LOCKLIBDS'',''AUDITLIBDS''))'; put 'and missing(value) then do;'; put 'call symputx(''msg'',"missing value in var: "!!name);'; put 'call symputx(''err'',1);'; put 'stop;'; put 'end;'; put 'run;'; put 'data _null_;'; put 'set &libds;'; put 'if missing(fmtrow) then do;'; put 'call symputx(''msg'',"missing fmtrow in format: "!!FMTNAME);'; put 'call symputx(''err'',1);'; put 'stop;'; put 'end;'; put 'run;'; put '%mp_abort('; put 'iftrue=(&err ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(&msg)'; put ')'; put '%local cnt;'; put 'proc sql noprint;'; put 'select count(distinct catx(''|'',type,fmtname,fmtrow)) into: cnt from &libds;'; put '%mp_abort('; put 'iftrue=(&cnt ne %mf_nobs(&libds))'; put ',mac=&sysmacroname'; put ',msg=%str(Non-unique primary key on &libds)'; put ')'; put '/**'; put '* First, extract only relevant formats from the catalog'; put '*/'; put 'proc sql noprint;'; put 'select distinct'; put 'case'; put 'when type=''N'' then upcase(fmtname)'; put 'when type=''C'' then cats(''$'',upcase(fmtname))'; put 'when type=''I'' then cats(''@'',upcase(fmtname))'; put 'when type=''J'' then cats(''@$'',upcase(fmtname))'; put 'else "&sysmacroname:UNHANDLED"'; put 'end'; put 'into: fmtlist separated by '' '''; put 'from &libds;'; put '%mp_cntlout(libcat=&libcat,fmtlist=&fmtlist,cntlout=&base_fmts)'; put '/* get a hash of the row */'; put '%local cvars nvars;'; put '%let cvars=TYPE FMTNAME START END LABEL PREFIX FILL SEXCL EEXCL HLO DECSEP'; put 'DIG3SEP DATATYPE LANGUAGE;'; put '%let nvars=FMTROW MIN MAX DEFAULT LENGTH FUZZ MULT NOEDIT;'; put 'data &base_fmts/note2err;'; put 'set &base_fmts;'; put 'fmthash=%mp_md5(cvars=&cvars, nvars=&nvars);'; put 'run;'; put '/**'; put '* Ensure input table and base_formats have consistent lengths and types'; put '*/'; put 'data &inlibds/nonote2err;'; put 'length &delete_col $3 FMTROW 8 start end label $32767;'; put 'if 0 then set &base_fmts;'; put 'set &libds;'; put 'by type fmtname notsorted;'; put 'if &delete_col='''' then &delete_col=''No'';'; put 'fmtname=upcase(fmtname);'; put 'type=upcase(type);'; put 'if missing(type) then do;'; put 'if substr(fmtname,1,1)=''@'' then do;'; put 'if substr(fmtname,2,1)=''$'' then type=''J'';'; put 'else type=''I'';'; put 'end;'; put 'else do;'; put 'if substr(fmtname,1,1)=''$'' then type=''C'';'; put 'else type=''N'';'; put 'end;'; put 'end;'; put 'if type in (''N'',''I'') then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put 'fmthash=%mp_md5(cvars=&cvars, nvars=&nvars);'; put 'run;'; put '/**'; put '* Identify new records'; put '*/'; put 'proc sql;'; put 'create table &outds_add(drop=&delete_col) as'; put 'select a.*'; put 'from &inlibds a'; put 'left join &base_fmts b'; put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow'; put 'where b.fmtname is null'; put 'and upcase(a.&delete_col) ne "YES"'; put 'order by type, fmtname, fmtrow;'; put '/**'; put '* Identify modified records'; put '*/'; put 'create table &outds_mod (drop=&delete_col) as'; put 'select a.*'; put 'from &inlibds a'; put 'inner join &base_fmts b'; put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow'; put 'where upcase(a.&delete_col) ne "YES"'; put 'and a.fmthash ne b.fmthash'; put 'order by type, fmtname, fmtrow;'; put '/**'; put '* Identify deleted records'; put '*/'; put 'create table &outds_del(drop=&delete_col) as'; put 'select a.*'; put 'from &inlibds a'; put 'inner join &base_fmts b'; put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow'; put 'where upcase(a.&delete_col)="YES"'; put 'order by type, fmtname, fmtrow;'; put '/**'; put '* Identify fully deleted formats (where every record is removed)'; put '* These require to be explicitly deleted in proc format'; put '* del1 - identify _partial_ deletes'; put '* del2 - exclude these, and also formats that come with _additions_'; put '*/'; put 'create table &del1 as'; put 'select a.*'; put 'from &base_fmts a'; put 'left join &outds_del b'; put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow'; put 'where b.fmtrow is null;'; put 'create table &del2 as'; put 'select * from &outds_del'; put 'where cats(type,fmtname) not in (select cats(type,fmtname) from &outds_add)'; put 'and cats(type,fmtname) not in (select cats(type,fmtname) from &del1);'; put '%mp_abort('; put 'iftrue=(&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(SYSCC=&syscc prior to load prep)'; put ')'; put '%if &loadtarget=YES %then %do;'; put '/* new records plus base records that are not deleted or modified */'; put 'data &ds1;'; put 'merge &base_fmts(in=base)'; put '&outds_mod(in=mod)'; put '&outds_add(in=add)'; put '&outds_del(in=del);'; put 'if not del and not mod;'; put 'by type fmtname fmtrow;'; put 'run;'; put '/* add back the modified records */'; put 'data &stagedata;'; put 'set &ds1 &outds_mod;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put '%end;'; put '/* mp abort needs to run outside of conditional blocks */'; put '%mp_abort('; put 'iftrue=(&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(SYSCC=&syscc prior to actual load)'; put ')'; put '%if &loadtarget=YES %then %do;'; put '%if %mf_nobs(&stagedata)=0 and %mf_nobs(&del2)=0 %then %do;'; put '%put There are no changes to load in &libcat!;'; put '%return;'; put '%end;'; put '%if &locklibds ne 0 %then %do;'; put '/* prevent parallel updates */'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&libcat,1,.)'; put ',ds=%scan(&libcat,2,.)-FC'; put ',ref=MP_LOADFORMAT commencing format load'; put ',ctl_ds=&locklibds'; put ')'; put '%end;'; put '/* do the actual load */'; put 'proc format lib=&libcat cntlin=&stagedata;'; put 'run;'; put '/* apply any full deletes */'; put '%if %mf_nobs(&del2)>0 %then %do;'; put '%local delfmtlist;'; put 'proc sql noprint;'; put 'select distinct case when type=''N'' then cats(fmtname,''.FORMAT'')'; put 'when type=''C'' then cats(fmtname,''.FORMATC'')'; put 'when type=''J'' then cats(fmtname,''.INFMTC'')'; put 'when type=''I'' then cats(fmtname,''.INFMT'')'; put 'else cats(fmtname,''.BADENTRY!!!'') end'; put 'into: delfmtlist'; put 'separated by '' '''; put 'from &del2;'; put 'proc catalog catalog=&libcat;'; put 'delete &delfmtlist;'; put 'quit;'; put '%end;'; put '%if &locklibds ne 0 %then %do;'; put '/* unlock the table */'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&libcat,1,.)'; put ',ds=%scan(&libcat,2,.)-FC'; put ',ref=MP_LOADFORMAT completed format load'; put ',ctl_ds=&locklibds'; put ')'; put '%end;'; put '/* track the changes */'; put '%if &auditlibds ne 0 %then %do;'; put '%if &locklibds ne 0 %then %do;'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&auditlibds,1,.)'; put ',ds=%scan(&auditlibds,2,.)'; put ',ref=MP_LOADFORMAT commencing audit table load'; put ',ctl_ds=&locklibds'; put ')'; put '%end;'; put '%mp_storediffs(&libcat-FC'; put ',&base_fmts'; put ',TYPE FMTNAME FMTROW'; put ',delds=&outds_del'; put ',modds=&outds_mod'; put ',appds=&outds_add'; put ',outds=&storediffs'; put ',mdebug=&mdebug'; put ')'; put 'proc append base=&auditlibds data=&storediffs;'; put 'run;'; put '%if &locklibds ne 0 %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&auditlibds,1,.)'; put ',ds=%scan(&auditlibds,2,.)'; put ',ref=MP_LOADFORMAT commencing audit table load'; put ',ctl_ds=&locklibds'; put ')'; put '%end;'; put '%end;'; put '%end;'; put '%mp_abort('; put 'iftrue=(&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(SYSCC=&syscc after load)'; put ')'; put '%if &mdebug=0 %then %do;'; put 'proc datasets lib=work;'; put 'delete &prefix:;'; put 'run;'; put '%put &sysmacroname exit vars:;'; put '%put _local_;'; put '%end;'; put '%mend mp_loadformat;'; put '%macro mpe_targetloader(libds= /* library.dataset to LOAD (target) */'; put ',now= %sysfunc(datetime()) /* static processed timestamp */'; put ',etlsource= /* process from whence the data came */'; put ',STAGING_DS= STAGING_DS /* name of staging (work) dataset which should'; put 'be appended into the target. */'; put ',LOADTARGET=NO /* set to yes to actually load the target */'; put ',CLOSE_VARS= /* provide close vars to override defaults */'; put ',dclib=NOTPROVIDED'; put ',mdebug=0'; put ',dc_dttmtfmt=%sysfunc(datetime())'; put ');'; put '%local lib ds nobs;'; put '/**'; put '* if a format catalog (suffix "-FC") we assume the catalog has already been'; put '* created by the calling program with a libds of work.fmtextract'; put '*/'; put '%let orig_lib=%upcase(%scan(&libds,1,.));'; put '%let orig_ds=%upcase(%scan(&libds,2,.));'; put '%let orig_libds=&libds;'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%let lib=WORK;'; put '%let ds=FMTEXTRACT;'; put '%let libds=&lib..&ds;'; put '%end;'; put '%else %do;'; put '%let lib=&orig_lib;'; put '%let ds=&orig_ds;'; put '%end;'; put '%mp_abort(iftrue= (&dclib=NOTPROVIDED)'; put ',mac=&sysmacroname'; put ',msg=%str(dclib=NOTPROVIDED)'; put ')'; put '/* get table attributes */'; put '%let nobs=0;'; put 'data work.sumo_config;'; put 'set &mpelib..mpe_tables;'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and libref="&orig_lib"'; put 'and dsn="&orig_ds";'; put 'call symputx(''LOADTYPE'',loadtype,''l'');'; put 'call symputx(''BUSKEY'',buskey,''l'');'; put 'call symputx(''VAR_TXFROM'',var_txfrom,''l'');'; put 'call symputx(''VAR_TXTO'',var_txto,''l'');'; put 'call symputx(''VAR_BUSFROM'',var_busfrom,''l'');'; put 'call symputx(''VAR_BUSTO'',var_busto,''l'');'; put 'call symputx(''VAR_PROCESSED'',VAR_PROCESSED,''l'');'; put 'call symputx(''RK_UNDERLYING'',RK_UNDERLYING,''l'');'; put '%if %length(&CLOSE_VARS)=0 %then %do;'; put 'call symputx(''CLOSE_VARS'',CLOSE_VARS,''l'');'; put '%end;'; put 'call symputx(''nobs'',_n_,''l'');'; put 'if missing(AUDIT_LIBDS) then AUDIT_LIBDS="&dclib..MPE_AUDIT";'; put 'call symputx(''AUDIT_LIBDS'',AUDIT_LIBDS,''l'');'; put 'put (_all_)(=);'; put 'run;'; put '/* check if table is actually configured to load */'; put '%if &nobs ne 1 %then %do;'; put 'proc sql;'; put 'insert into &mpelib..mpe_loads'; put 'set USER_NM="%mf_getuser()"'; put ',STATUS=''FAILED (BAD DS)'''; put ',CSV_DIR=symget(''ETLSOURCE'')'; put ',PROCESSED_DTTM=&now;'; put '%end;'; put '%mp_abort(iftrue= (&nobs=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Table not registered in &mpelib..mpe_tables)'; put ')'; put '%mp_abort(iftrue= (&nobs>1)'; put ',mac=&sysmacroname'; put ',msg=%str(Something is very wrong with the PK in &mpelib..mpe_tables)'; put ')'; put '%if &LOADTYPE=TXTEMPORAL %then %do;'; put '%bitemporal_dataloader(bus_from=,bus_to= /* explicitly empty*/'; put ',tech_from=&VAR_TXFROM'; put ',tech_to = &VAR_TXTO'; put ',base_lib=&lib'; put ',base_dsn=&ds'; put ',append_lib=WORK'; put ',append_dsn=&STAGING_DS'; put ',high_date=''31DEC9999:23:59:59''dt'; put ',PK= &buskey'; put ',ETLSOURCE=&ETLSOURCE'; put ',LOADTYPE=&loadtype'; put ',RK_UNDERLYING=&RK_UNDERLYING'; put ',LOADTARGET=&LOADTARGET'; put ',RK_UPDATE_MAXKEYTABLE=&LOADTARGET'; put ',CLOSE_VARS=&CLOSE_VARS'; put ',processed=&VAR_PROCESSED'; put ',dclib=&dclib'; put ',outds_audit=&AUDIT_LIBDS'; put ')'; put '%end;'; put '%else %if &loadtype=REPLACE %then %do;'; put '%if &LOADTARGET=YES %then %do;'; put '%mp_lockanytable(LOCK,lib=&lib,ds=&ds,ref=%str(&etlsource),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put 'data WORK.&STAGING_DS;'; put 'set WORK.&STAGING_DS;'; put '%if %mf_existvar(&libds,&VAR_PROCESSED) %then %do;'; put '&VAR_PROCESSED = &now;'; put '%end;'; put 'drop _____DELETE__THIS__RECORD_____;'; put 'run;'; put 'proc sql; delete * from &libds;'; put 'proc append base=&libds data=WORK.&STAGING_DS force nowarn;run;'; put '%mp_lockanytable(UNLOCK,lib=&lib,ds=&ds,ctl_ds=&dclib..mpe_lockanytable)'; put '%end;'; put '%else %do;'; put '/* is full replace so treat all staged records as new in diff screen */'; put 'data work.outds_mod work.outds_add ;'; put 'set work.&staging_ds;'; put 'output work.outds_add;'; put 'run;'; put '/* previous table will be considered fully deleted */'; put 'data work.outds_del;'; put 'set &lib..&ds;'; put 'run;'; put '%end;'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '%bitemporal_dataloader(bus_from=,bus_to='; put ',tech_from= ,tech_to = /* explicitly empty*/'; put ',base_lib=&lib'; put ',base_dsn=&ds'; put ',append_lib=WORK'; put ',append_dsn=&STAGING_DS'; put ',high_date=''31DEC9999:23:59:59''dt'; put ',PK= &buskey'; put ',ETLSOURCE=%superq(etlsource)'; put ',LOADTYPE=UPDATE'; put ',RK_UNDERLYING=&RK_UNDERLYING'; put ',LOADTARGET=&LOADTARGET'; put ',RK_UPDATE_MAXKEYTABLE=&LOADTARGET'; put ',processed=&VAR_PROCESSED'; put ',dclib=&dclib'; put ',outds_audit=&AUDIT_LIBDS'; put ')'; put '%end;'; put '%else %if &loadtype=FORMAT_CAT %then %do;'; put '/**'; put '* run mp_formatload'; put '* inputs:'; put '* - LOADTARGET'; put '* - CATALOG'; put '* - STAGEDATA'; put '* - LOADAUDIT'; put '* outputs:'; put '* work.outds_add'; put '* work.outds_del'; put '* work.outds_mod'; put '*/'; put '%mp_loadformat(&orig_libds'; put ',&staging_ds'; put ',loadtarget=&LOADTARGET'; put ',auditlibds=&AUDIT_LIBDS'; put ',locklibds=&dclib..mpe_lockanytable'; put ',delete_col=_____DELETE__THIS__RECORD_____'; put ',outds_add=outds_add'; put ',outds_del=outds_del'; put ',outds_mod=outds_mod'; put ',mdebug=&mdebug'; put ')'; put '%end;'; put '%else %if &loadtype=BITEMPORAL %then %do;'; put '%bitemporal_dataloader(bus_from=&VAR_BUSFROM,bus_to=&VAR_BUSTO'; put ',tech_from=&VAR_TXFROM'; put ',tech_to = &VAR_TXTO'; put ',base_lib=&lib'; put ',base_dsn=&ds'; put ',append_lib=WORK'; put ',append_dsn=&STAGING_DS'; put ',high_date=''31DEC9999:23:59:59''dt'; put ',PK= &buskey'; put ',ETLSOURCE=%superq(etlsource)'; put ',LOADTYPE=BITEMPORAL'; put ',RK_UNDERLYING=&RK_UNDERLYING'; put ',LOADTARGET=&LOADTARGET'; put ',RK_UPDATE_MAXKEYTABLE=&LOADTARGET'; put ',CLOSE_VARS=&CLOSE_VARS'; put ',processed=&VAR_PROCESSED'; put ',dclib=&dclib'; put ',outds_audit=&AUDIT_LIBDS'; put ')'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: LOADTYPE &LOADTYPE not supported;'; put '%let syscc=4;'; put '%mp_abort(msg=LOADTYPE &LOADTYPE not supported,mac=mpe_targetloader.sas)'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc exiting MPE_TARGETLOADER macro)'; put ')'; put '%mend mpe_targetloader;'; put '%macro removecolsfromwork(col);'; put '/* only an issue if debug mode enabled */'; put '%global _debug;'; put '%if &_debug ge 131 %then %do;'; put '%let col=%upcase(&col);'; put '%local memlist;'; put 'proc sql noprint;'; put 'select distinct memname into: memlist'; put 'separated by '' '''; put 'from dictionary.columns'; put 'where libname=''WORK'' and upcase(name)="&col";'; put '%if %mf_isblank(&memlist) %then %return;'; put '%mp_dropmembers(list=&memlist)'; put '%end;'; put '%mend removecolsfromwork;'; put '%macro mf_getuniquelibref(prefix=mc,maxtries=1000);'; put '%local x;'; put '%if ( %length(&prefix) gt 7 ) %then %do;'; put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;'; put '0'; put '%return;'; put '%end;'; put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;'; put '%put %str(ERR)OR: Invalid prefix (&prefix);'; put '0'; put '%return;'; put '%end;'; put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */'; put '%let maxtries=%eval(10**(8-%length(&prefix))-1);'; put '%do x = 0 %to &maxtries;'; put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;'; put '&prefix&x'; put '%return;'; put '%end;'; put '%let x = %eval(&x + 1);'; put '%end;'; put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;'; put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;'; put '0'; put '%mend mf_getuniquelibref;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file postdata.sas'; put '@brief Either returns the file diffs or actually loads the data to target'; put '@details Before loading the target, a check is made against the time the'; put 'target was last updated (backend) and the time the DIFF was generated'; put '(frontend). If the target was updated whilst the DIFF was on the screen,'; put 'then the provided diff may have been incorrect and so a new DIFF should be'; put 'generated and approved before load.'; put 'Only 100 rows (of each DIFF type) are displayed on the DIFF screen.'; put '

Service Inputs

'; put '
SASCONTROLTABLE
'; put '|ACTION:$char10.|TABLE:$char32.|DIFFTIME:$char29.|'; put '|---|---|---|'; put '|SHOW_DIFFS|DC20220208T142124517_124703_1184|"Tue, 08 Feb 2022 14:23:05 GMT"|'; put '

SAS Macros

'; put '@li bitemporal_dataloader.sas'; put '@li dc_assignlib.sas'; put '@li mf_existds.sas'; put '@li mf_existvar.sas'; put '@li mf_getattrn.sas'; put '@li mf_getengine.sas'; put '@li mf_getquotedstr.sas'; put '@li mf_getuniquelibref.sas'; put '@li mf_getuser.sas'; put '@li mf_getvarlist.sas'; put '@li mf_nobs.sas'; put '@li mf_verifymacvars.sas'; put '@li mp_abort.sas'; put '@li mp_cntlout.sas'; put '@li mp_lockanytable.sas'; put '@li mpe_accesscheck.sas'; put '@li mpe_alerts.sas'; put '@li mpe_runhook.sas'; put '@li mpe_targetloader.sas'; put '@li removecolsfromwork.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '/* this could be a config setting if required */'; put '%let maxdiff=100;'; put '%mpeinit()'; put '/* load parameters */'; put 'data _null_;'; put 'set work.sascontroltable;'; put 'call symputx(''ACTION'',ACTION);'; put 'call symputx(''LOAD_REF'',TABLE);'; put '/* DIFFTIME is when the DIFF was generated on the frontend */'; put 'call symputx(''DIFFTIME'',DIFFTIME);'; put 'putlog (_all_)(=);'; put 'run;'; put '%global action is_err err_msg msg;'; put '%let is_err=0;'; put '%let user=%mf_getuser();'; put '%let sastime=%sysfunc(datetime());'; put 'data sastime;'; put 'dt_sastime=&sastime;'; put 'run;'; put 'PROC FORMAT;'; put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);'; put 'picture flatdate other=''%0Y%0m%0d_%0H%0M%0S'' (datatype=datetime);'; put 'RUN;'; put '/* SHOW_DIFFS works by getting the temp tables from the bitemporal loader */'; put '/* so we share much of the logic from the actual load process */'; put '%let isfmtcat=0;'; put 'data APPROVE1;'; put 'set &mpelib..mpe_submit;'; put 'where TABLE_ID="&LOAD_REF";'; put '/* fetch mpe_submit data */'; put 'libds=cats(base_lib,''.'',base_ds);'; put 'REVIEWED_ON=put(reviewed_on_dttm,datetime19.);'; put 'call symputx(''REVIEW_STATUS_ID'',submit_status_cd,''l'');'; put 'call symputx(''NUM_OF_APPROVALS_REQUIRED'',NUM_OF_APPROVALS_REQUIRED);'; put 'call symputx(''num_of_approvals_remaining'',num_of_approvals_remaining);'; put '/* other stuff that''s useful to do in data step */'; put 'call symputx(''orig_libds'',libds);'; put 'call symputx(''libds'',libds);'; put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'call symputx(''isfmtcat'',1);'; put 'libds=''work.fmtextract'';'; put 'call symputx(''libds'',libds);'; put 'end;'; put 'putlog (_all_)(=);'; put '/* convert provided string DIFFTIME back to a numeric SAS datetime */'; put 'if "&action" ne "SHOW_DIFFS" then do;'; put 'call symputx(''DIFFTIME'',input(symget(''DIFFTIME''),anydtdtm18.));'; put 'end;'; put 'length difftime $32;'; put 'DIFFTIME=put(&sastime,datetime19.2);'; put 'run;'; put '%mp_cntlout('; put 'iftrue=(&isfmtcat=1)'; put ',libcat=&orig_libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(difftime orig_libds libds load_ref)=0)'; put ',mac=&_program'; put ',msg=%str(Missing: difftime orig_libds libds load_ref)'; put ')'; put '/* security checks */'; put '%mpe_accesscheck(&orig_libds,outds=authEDIT,user=&user,access_level=EDIT)'; put '%mpe_accesscheck(&orig_libds,outds=authAPP,user=&user,access_level=APPROVE)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc Before entering postdata macro)'; put ')'; put '%mp_abort('; put 'iftrue=('; put '%mf_getattrn(work.authEDIT,NLOBS)=0 & %mf_getattrn(work.authAPP,NLOBS)=0'; put ')'; put ',mac=&_program'; put ',msg=%str(&user not authorised to view approval screen for &orig_libds)'; put ')'; put '%macro quickmacro(inds,outds);'; put 'data &outds ;'; put '%if %length(&VAR_BUSFROM)>0 %then %do;'; put 'format &VAR_BUSFROM &VAR_BUSTO yymmddhhmmss.;'; put '%end;'; put 'if 0 then set &emptybasetable;'; put 'set &inds;'; put '%if %mf_existvar(&libds,&var_txfrom) %then %do;'; put 'drop &var_txfrom &var_txto;'; put '%end;'; put '%if %mf_existvar(&inds,_____DELETE__THIS__RECORD_____) %then %do;'; put 'drop _____DELETE__THIS__RECORD_____;'; put '%end;'; put '%if %mf_existvar(&inds,&VAR_PROCESSED) %then %do;'; put 'drop &VAR_PROCESSED;'; put '%end;'; put 'run;'; put '%mend quickmacro;'; put '%macro postdata();'; put '%if %quote(&REVIEW_STATUS_ID)=%quote(REJECTED)'; put 'or %quote(&REVIEW_STATUS_ID)=%quote(APPROVED) %then'; put '%do;'; put 'data params; set approve1; run;'; put '%webout(OPEN)'; put '%webout(OBJ,PARAMS)'; put '%webout(CLOSE)'; put '%return;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if &action=APPROVE_TABLE %then %do;'; put '/* check user is authorised to approve table */'; put '/* user could be an editor but not an approver */'; put '%mp_abort(iftrue= (%mf_getattrn(work.authAPP,NLOBS)=0)'; put ',mac=&_program'; put ',msg=%str(&user may not APPROVE changes)'; put ')'; put '/* see if this user has already submitted an approval */'; put '%let prev_upload_check=1;'; put 'proc sql;'; put 'select count(*) into: prev_upload_check from &mpelib..mpe_review'; put 'where TABLE_ID="&LOAD_REF" and REVIEWED_BY_NM="&user"'; put 'and REVIEW_STATUS_ID ne "SUBMITTED";'; put '%let authcheck=%mf_getattrn(work.authAPP,NLOBS);'; put '%if &authcheck=0 or &prev_upload_check=1 %then %do;'; put '%put %str(WARN)ING: &=authcheck &=prev_upload_check;'; put 'data apPARAMS;'; put 'AUTHORISED=&authcheck;'; put 'PREV_UPLOAD_CHECK=&prev_upload_check;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,apPARAMS);'; put '%webout(CLOSE)'; put '%return;'; put '%end;'; put '/* now check if table has been updated since DIFF screen shown */'; put '%local fmt_tm usernm last_load etlsource;'; put '%let last_load=0;'; put 'proc sql noprint;'; put 'select max(processed_dttm) format=16.2 into: last_load'; put 'from &mpelib..mpe_dataloads'; put 'where libref="%scan(&orig_libds,1,.)" and dsn="%scan(&orig_libds,2,.)";'; put 'select processed_dttm format=datetime19., user_nm, etlsource'; put 'into: fmt_tm, :usernm, :etlsource'; put 'from &mpelib..mpe_dataloads'; put 'where libref="%scan(&orig_libds,1,.)" and dsn="%scan(&orig_libds,2,.)"'; put 'and processed_dttm=&last_load;'; put '%put TIMECHECK: &last_load>&difftime;'; put '%if %sysevalf(&last_load>&difftime,boolean)=1 %then %do;'; put '%let is_err=1;'; put '%let err_msg=&orig_libds was updated in batch %trim(&etlsource'; put ') by %trim(&usernm) on &fmt_tm - please refresh the page!!;'; put '%return;'; put '%end;'; put '%if &syscc ne 0 %then %do;'; put '%let is_err=1;'; put '%let err_msg=syscc=&syscc before logchange;'; put '%return;'; put '%end;'; put '/* upload about to commence so ensure logs */'; put 'options notes mprint source2;'; put '%local oldloc;'; put '%if %symexist(SYSPRINTTOLOG) %then %let oldloc=&SYSPRINTTOLOG;'; put '%else %let oldloc=%qsysfunc(getoption(LOG));'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto'; put 'log="&mpelocapprovals/&LOAD_REF/approval.log";'; put 'run;'; put 'data _null_;'; put 'if _n_=1 then do;'; put 'length oldloc $1000;'; put 'oldloc=symget(''oldloc'');'; put 'putlog "****** redirected:" oldloc " *****";'; put 'end;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc printto'; put 'log="&mpelocapprovals/&LOAD_REF/approval.log";'; put 'run;'; put '%end;'; put '%if &syscc ne 0 %then %do;'; put '%let is_err=1;'; put '%let err_msg=syscc=&syscc after logchange;'; put '%return;'; put '%end;'; put '%end;'; put '/**'; put '* upload the actual table'; put '*/'; put '%local libref ds;'; put '%let libref=%scan(&orig_libds,1,.);'; put '%let ds=%scan(&orig_libds,2,.);'; put 'proc sql noprint;'; put 'select PRE_APPROVE_HOOK, POST_APPROVE_HOOK, LOADTYPE, var_txfrom, var_txto'; put ',BUSKEY, VAR_BUSFROM, VAR_BUSTO'; put ',AUDIT_LIBDS, NOTES, coalesce(NUM_OF_APPROVALS_REQUIRED,1)'; put ',VAR_PROCESSED'; put 'into: PRE_APPROVE_HOOK, :POST_APPROVE_HOOK, :LOADTYPE,:var_txfrom,:var_txto'; put ',:BUSKEY,:VAR_BUSFROM,:VAR_BUSTO'; put ',:AUDIT_LIBDS, :TABLE_DESC, :NUM_OF_APPROVALS_REQUIRED_TOT'; put ',:VAR_PROCESSED'; put 'from &mpelib..mpe_tables'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and libref="&libref"'; put 'and dsn="&ds";'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(mpelocapprovals orig_libds)=0)'; put ',mac=&_program'; put ',msg=%str(Missing: mpelocapprovals orig_libds)'; put ')'; put '/* get dataset from approvals location (has same name as load_ref) */'; put '%let tmplib=%mf_getuniquelibref();'; put 'libname &tmplib "&mpelocapprovals/&LOAD_REF";'; put 'data STAGING_DS;'; put 'set &tmplib..&LOAD_REF;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc before preapprove)'; put ')'; put '%dc_assignlib(WRITE,&libref)'; put '/* run pre-approve hook - occurs both BEFORE _and_ AFTER the diff */'; put '%mpe_runhook(PRE_APPROVE_HOOK)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc after preapprove)'; put ')'; put '%if &num_of_approvals_remaining>1 and &action=APPROVE_TABLE %then %do;'; put '/* append to mpe_review table */'; put '%let apprno=%eval(&num_of_approvals_required-&num_of_approvals_remaining+1);'; put 'data work.append_review;'; put 'if 0 then set &mpelib..mpe_review;'; put 'TABLE_ID="&LOAD_REF";'; put 'BASE_TABLE="&orig_libds";'; put 'REVIEW_STATUS_ID="APPROVED";'; put 'REVIEWED_BY_NM="&user";'; put 'REVIEWED_ON_DTTM=&sastime;'; put 'REVIEW_REASON_TXT="APPROVAL &apprno of &num_of_approvals_required";'; put 'output;'; put 'stop;'; put 'run;'; put '%mp_lockanytable(LOCK,'; put 'lib=&mpelib,ds=mpe_review,ref=%str(&LOAD_REF Approval),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc append base=&mpelib..mpe_review data=work.append_review;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_review,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '/* update mpe_submit table */'; put '%mp_lockanytable(LOCK,'; put 'lib=&mpelib,ds=mpe_submit,ref=%str(&LOAD_REF Approval),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc sql;'; put 'update &mpelib..mpe_submit'; put 'set num_of_approvals_remaining=&num_of_approvals_remaining-1,'; put 'reviewed_by_nm="&user",'; put 'reviewed_on_dttm=&sastime'; put 'where table_id="&LOAD_REF";'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_submit,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'data apReqd;'; put 'AUTHORISED=1;'; put 'ALREADY_UPDATED=0;'; put 'ALREADY_UPDATED_DTTM=.;'; put 'set approve1; /* js will test for NUM_OF_APPROVALS_REQUIRED */'; put 'run;'; put '%removecolsfromwork(___TMP___MD5)'; put '%webout(OPEN)'; put '%webout(OBJ,apReqd);'; put '%webout(CLOSE)'; put '%return;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc entering TARGETLOADER)'; put ')'; put '%mpe_targetloader(libds=&orig_libds'; put ',now= &sastime'; put ',etlsource=&LOAD_REF'; put ',STAGING_DS=STAGING_DS'; put ',dclib=&mpelib'; put '%if &action=APPROVE_TABLE %then %do;'; put ',LOADTARGET=YES'; put '%end;'; put '%else %do;'; put ',LOADTARGET=NO'; put '%end;'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%if %mf_getattrn(STAGING_DS,NLOBS)=0 %then %do;'; put '/* empty dataset! */'; put 'data out;'; put 'set STAGING_DS;'; put 'run;'; put '%return;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc entering SHOWDIFFS)'; put ')'; put '%if &action=SHOW_DIFFS %then %do;'; put '/**'; put '* Now prepare the SHOW DIFFS (approve) screen'; put '*/'; put '/*To create the CURRENT diffs, we compare with the ACTUAL data. But first'; put 'need to find out what version TIME to query it for.. */'; put 'proc sql noprint;'; put 'select max(processed_dttm)-1 format=datetime19. into: tstamp'; put 'from &mpelib..mpe_dataloads'; put 'where libref="&libref" and dsn="&ds" and ETLSOURCE="&LOAD_REF";'; put 'quit;'; put '%if &tstamp=. %then %let tstamp=%sysfunc(datetime(),datetime19.);'; put '/**'; put '* now create the DIFFS dataset'; put '* If using a database, then utilise pass through!'; put '* Create a temporary table inside the database for joins..'; put '*/'; put 'options mprint;'; put '%let engine_type=%mf_getEngine(%scan(&libds,1,.));'; put '%put &libds engine type = &engine_type;'; put '%local inner_table ;'; put '%if &engine_type=OLEDB %then %do;'; put '/* generate a unique ID for the temporary table */'; put 'data _null_;'; put 'call symputx(''UNIQUE_REF'''; put ',cats(round(datetime(),1)'; put ',''_'''; put ',round(ranuni(0)*100000,1)'; put ')'; put ',''l'''; put ');'; put 'run;'; put '%let inner_table=&libref.."##DIFF_&UNIQUE_REF"n;'; put 'proc sql;'; put 'create table &inner_table as'; put 'select * from work.outds_mod;'; put '%end;'; put '%else %let inner_table=work.outds_mod;'; put 'proc sql;'; put 'create view work.originals2 as'; put 'select b.*'; put 'from &inner_table a'; put 'inner join &libds'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '(where=("&tstamp"dt < &VAR_TXTO))'; put '%end;'; put 'b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&buskey));'; put '%let idx_val=%scan(&buskey,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by %mf_getquotedstr(in_str=&buskey,dlm=%str(,),quote=)'; put ';'; put 'create view bitemp5c_updates2 as'; put 'select * from work.outds_mod'; put 'order by %mf_getquotedstr(in_str=&buskey,dlm=%str(,),quote=)'; put ';'; put 'data; set &libds;stop;run;'; put '%let emptybasetable=&syslast;'; put 'options varlenchk=nowarn; /* for small numerics (<8) */'; put '%quickmacro(work.outds_del,deleted)'; put '%quickmacro(work.outds_add,new)'; put '%quickmacro(bitemp5c_updates2,updates)'; put '%quickmacro(originals2,originals)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc in quickmacro)'; put ')'; put '/* extract colnames for md5 creation / change tracking */'; put 'proc contents noprint data=work.updates'; put 'out=cols (keep=name type length varnum format);'; put 'run;'; put 'proc sort data=cols out=cols(drop=varnum); by varnum;run;'; put 'data cols; set cols; name=upcase(name);run;'; put '%let tempDIFFS_CSV=tempDiffs_%trim('; put '%sysfunc(datetime(),flatdate.)).csv;'; put '/**'; put '* Store temp tables so we have a record of diffs'; put '* do not change this libname or table name as it is used in some'; put '* post approve hooks'; put '*/'; put 'data TEMPDIFFS (compress=no) /* for realistic file size */;'; put 'length _____status $10;'; put 'set work.deleted (in=_____del)'; put 'work.new(in=_____new)'; put 'work.updates (in=_____upd)'; put 'work.originals2 (in=_____orig);'; put 'if _____del then _____status=''DELETED '';'; put 'else if _____new then _____status=''NEW'';'; put 'else if _____upd then _____status=''UPDATED'';'; put 'else if _____orig then _____status=''ORIGINAL'';'; put 'run;'; put 'proc export data=TEMPDIFFS dbms=csv replace'; put 'outfile="&mpelocapprovals/&LOAD_REF/&tempDIFFS_CSV" ;'; put 'run;'; put 'proc sql noprint;'; put 'select filesize format=sizekmg10.1, filesize as filesize_raw'; put 'into: filesize,:filesize_raw'; put 'from dictionary.tables'; put 'where libname=''WORK'' and memtype=''DATA'' and memname=''TEMPDIFFS'';'; put 'data params;'; put 'set approve1;'; put 'DIFFS_CSV="&tempDIFFS_CSV";'; put 'FILESIZE="&filesize";'; put 'FILESIZE_RAW=&filesize_raw;'; put 'if %mf_nobs(work.originals)>&maxdiff'; put 'or %mf_nobs(work.new)>&maxdiff'; put 'or %mf_nobs(work.deleted)>&maxdiff'; put 'or %mf_nobs(work.updates)>&maxdiff'; put 'then TRUNCATED="YES";'; put 'else TRUNCATED="NO";'; put 'NUM_ADDED=%mf_getattrn(work.new,NLOBS);'; put 'NUM_DELETED=%mf_getattrn(work.deleted,NLOBS);'; put 'NUM_UPDATED=%mf_getattrn(work.updates,NLOBS);'; put 'SUBMITTED_ON=put(submitted_on_dttm,datetime19.);'; put '%if %mf_getattrn(work.authAPP,NLOBS)>0 %then %do;'; put 'ISAPPROVER=''YES'';'; put '%end;'; put '%else %do;'; put 'ISAPPROVER=''NO'';'; put '%end;'; put 'run;'; put '/*'; put '* The PRE_APPROVE_HOOK may have applied custom formats to the staged table.'; put '* To ensure consistency in the DIFF screen, we should apply the same formats'; put '* to the base table. Limit rows at the same time.'; put '*/'; put 'data work.originals;'; put 'if 0 then set deleted new updates;'; put 'set work.originals;'; put 'if _n_>&maxdiff then stop;'; put 'run;'; put '/* get additional submits against the same base table */'; put 'proc sort data=&mpelib..mpe_submit(where=('; put 'submit_status_cd=''SUBMITTED'''; put 'and cats(base_lib,''.'',base_ds)="&orig_libds"'; put 'and table_id ne "&LOAD_REF"'; put ')) out=submits;'; put 'by descending submitted_on_dttm;'; put 'run;'; put '/* filter last 10 */'; put 'data submits;'; put 'set submits;'; put 'if _n_>10 then stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc SHOWDIFFS prior to streamout)'; put ')'; put '%removecolsfromwork(___TMP___MD5)'; put '%webout(OPEN)'; put '%webout(OBJ,params)'; put '%webout(OBJ,cols)'; put '%webout(OBJ,submits)'; put '%webout(OBJ,deleted,fmt=N,missing=STRING,maxobs=&maxdiff)'; put '%webout(OBJ,new,fmt=N,missing=STRING,maxobs=&maxdiff)'; put '%webout(OBJ,updates,fmt=N,missing=STRING,maxobs=&maxdiff)'; put '%webout(OBJ,ORIGINALS,fmt=N,missing=STRING)'; put '/* need same for formatted view */'; put '%webout(OBJ,deleted,dslabel=fmt_deleted,fmt=Y,missing=STRING,maxobs=&maxdiff)'; put '%webout(OBJ,new,dslabel=fmt_new,fmt=Y,missing=STRING,maxobs=&maxdiff)'; put '%webout(OBJ,updates,dslabel=fmt_updates,fmt=Y,missing=STRING,maxobs=&maxdiff)'; put '%webout(OBJ,originals,dslabel=fmt_ORIGINALS,fmt=Y,missing=STRING)'; put '%webout(CLOSE)'; put '%if &engine_type=OLEDB %then %do;'; put 'proc sql; /* needs to be dropped AFTER view execution */'; put 'drop table &inner_table;'; put '%end;'; put '%return;'; put '%end;'; put '%if &action=APPROVE_TABLE %then %do;'; put '%approve:'; put '/**'; put '* store temp tables so we have a record of diffs'; put '* do not change this libname or table name as it is used in some'; put '* post approve hooks'; put '* for REPLACE loads, temp tables not made, so make them'; put '*/'; put '%if &LOADTYPE=REPLACE %then %do;'; put 'data work.outds_add; run;'; put 'data work.outds_mod; run;'; put 'data work.outds_del; run;'; put '%end;'; put 'libname approve "&mpelocapprovals/&LOAD_REF";'; put 'data; set &libds;stop;run;'; put '%let emptybasetable=&syslast;'; put 'data approve.ActualDiffs;'; put 'length _____STATUS_____ $10;'; put 'if 0 then set &emptybasetable;'; put 'set work.outds_del (in=_____del)'; put 'work.outds_add (in=_____new)'; put 'work.outds_mod (in=_____upd);'; put 'if _____del then _____STATUS_____=''DELETED'';'; put 'else if _____new then _____STATUS_____=''NEW'';'; put 'else if _____upd then _____STATUS_____=''UPDATED'';'; put '%if %mf_existvar(&libds,&var_txfrom) %then %do;'; put 'drop &var_txfrom &var_txto;'; put '%end;'; put '%if %mf_existvar(&libds,&VAR_PROCESSED) %then %do;'; put 'drop &VAR_PROCESSED;'; put '%end;'; put 'run;'; put 'proc export data=approve.ActualDiffs'; put 'outfile="&mpelocapprovals/&LOAD_REF/ActualDiffs.csv"'; put 'dbms=csv'; put 'replace;'; put 'run;'; put '/* update the control table to show table as approved */'; put '/* append to mpe_review table */'; put '%let apprno=%eval(&num_of_approvals_required-&num_of_approvals_remaining+1);'; put 'data work.append_review;'; put 'if 0 then set &mpelib..mpe_review;'; put 'TABLE_ID="&LOAD_REF";'; put 'BASE_TABLE="&orig_libds";'; put 'REVIEW_STATUS_ID="APPROVED";'; put 'REVIEWED_BY_NM="&user";'; put 'REVIEWED_ON_DTTM=&sastime;'; put 'REVIEW_REASON_TXT="APPROVAL &apprno of &num_of_approvals_required";'; put 'output;'; put 'stop;'; put 'run;'; put '%mp_lockanytable(LOCK,'; put 'lib=&mpelib,ds=mpe_review,ref=%str(&LOAD_REF Approval),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc append base=&mpelib..mpe_review data=work.append_review;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_review,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '/* update mpe_submit table */'; put '%mp_lockanytable(LOCK,'; put 'lib=&mpelib,ds=mpe_submit,ref=%str(&LOAD_REF Approval in auditors/postdata),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc sql;'; put 'update &mpelib..mpe_submit'; put 'set submit_status_cd=''APPROVED'','; put 'num_of_approvals_remaining=&num_of_approvals_remaining-1,'; put 'reviewed_by_nm="&user",'; put 'reviewed_on_dttm=&sastime'; put 'where table_id="&LOAD_REF";'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_submit,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '/* run post-approve hook */'; put '%mpe_runhook(POST_APPROVE_HOOK)'; put 'data apPARAMS;'; put 'AUTHORISED=1;'; put 'ALREADY_UPDATED=0;'; put 'ALREADY_UPDATED_DTTM=.;'; put 'DIFFTIME="&difftime";'; put 'if &syscc=0 then RESPONSE=''SUCCESS!'';'; put 'else response="SYSCC=&syscc.";'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program 582'; put ',msg=%superq(msg)'; put ')'; put '%mpe_alerts(alert_event=APPROVED'; put ', alert_lib=&libref'; put ', alert_ds=&ds'; put ', dsid=&LOAD_REF'; put ')'; put '%removecolsfromwork(___TMP___MD5)'; put '%webout(OPEN)'; put '%webout(OBJ,apPARAMS)'; put '%webout(CLOSE)'; put '%return;'; put '%end;'; put '%mend postdata;'; put '%postdata()'; put '%mp_abort(mode=INCLUDE)'; put '%mp_abort(iftrue= (&is_err=1)'; put ',mac=&_program'; put ',msg=%superq(err_msg)'; put ')'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/editors; %let service=getdata; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mpe_columnlevelsecurity(tgtlib,tgtds,inds'; put ',mode=VIEW'; put ',groupds=work.groups'; put ',clsds=work.clsview'; put ',outds=CLSVIEW'; put ',outmeta=work.cls_rules'; put ');'; put '%local col_list is_admin;'; put '/* filter for the appropriate rules */'; put 'proc sql;'; put 'create table &outmeta as'; put 'select CLS_VARIABLE_NM,'; put 'min(case when CLS_HIDE=1 then 1 else 0 end) as CLS_HIDE'; put 'from &clsds'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and CLS_SCOPE in ("&mode",''ALL'')'; put 'and CLS_ACTIVE=1'; put '%if &mode=VIEW %then %do;'; put 'and CLS_HIDE ne 1'; put '%end;'; put 'and upcase(CLS_GROUP) in (select upcase(groupname) from &groupds)'; put 'and CLS_LIBREF="%upcase(&tgtlib)"'; put 'and CLS_TABLE="%upcase(&tgtds)"'; put 'group by CLS_VARIABLE_NM;'; put '%let is_admin=0;'; put 'proc sql;'; put 'select count(*) into: is_admin from &groupds where groupname="&MPEADMINS";'; put '%put &sysmacroname: &=is_admin;'; put '%if %mf_nobs(work.cls_rules) = 0 or &is_admin>0 %then %do;'; put '%put &sysmacroname: no CLS rules to apply;'; put '%put &=is_admin;'; put '/* copy using append for speed */'; put 'data &outds;'; put 'set &inds;'; put 'stop;'; put 'run;'; put 'proc append base=&outds data=&inds;'; put 'run;'; put '/* ensure CLS_RULES is empty in case of admin */'; put 'data &outmeta;'; put 'set &outmeta;'; put 'stop;'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &mode=VIEW %then %do;'; put '/* just send back the relevant columns */'; put '%let col_list=0;'; put 'proc sql noprint;'; put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta'; put 'where CLS_HIDE=0;'; put '%if &col_list=0 %then %do;'; put '/*'; put 'We have columns that are set to CLS_HIDE=1 but we do not have any to'; put 'explicitly show. Therefore we assume all columns are to be shown except'; put 'those that are explicitly hidden.'; put '*/'; put 'proc sql noprint;'; put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta'; put 'where CLS_HIDE=1;'; put 'data &outds;'; put 'set &inds;'; put 'drop &col_list;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds;'; put 'set &inds;'; put 'keep &col_list;'; put 'run;'; put '%end;'; put '%end;'; put '%else %if &mode=EDIT %then %do;'; put '/*'; put 'In this case we pass all columns and the frontend will filter out the'; put 'ones that are not allowed to be edited.'; put '*/'; put 'data &outds;'; put 'set &inds;'; put 'stop;'; put 'run;'; put 'proc append base=&outds data=&inds;'; put 'run;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: invalid mode - &mode!;'; put '%abort;'; put '%end;'; put '%mend mpe_columnlevelsecurity;'; put '%macro mp_dsmeta(libds,outds=work.dsmeta);'; put '%local ds1 ds2;'; put 'data;run; %let ds1=&syslast;'; put 'data;run; %let ds2=&syslast;'; put '/* setup the ODS capture */'; put 'ods output attributes=&ds1 enginehost=&ds2;'; put '/* export the metadata */'; put 'proc contents data=&libds;'; put 'run;'; put '/* load it into a single table */'; put 'data &outds (keep=ods_table name value);'; put 'length ods_table $10 name label2 label1 label $100'; put 'value cvalue cvalue1 cvalue2 $1000'; put 'nvalue nvalue1 nvalue2 8;'; put 'if _n_=1 then call missing (of _all_);'; put '* putlog (_all_)(=);'; put 'set &ds1 (in=atrs) &ds2 (in=eng);'; put 'if atrs then do;'; put 'ods_table=''ATTRIBUTES'';'; put 'name=coalescec(label1,label);'; put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));'; put 'output;'; put 'if label2 ne '''' then do;'; put 'name=label2;'; put 'value=coalescec(cvalue2,put(nvalue2,best.));'; put 'output;'; put 'end;'; put 'end;'; put 'else if eng then do;'; put 'ods_table=''ENGINEHOST'';'; put 'name=coalescec(label1,label);'; put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));'; put 'output;'; put 'end;'; put 'run;'; put 'proc sql;'; put 'drop table &ds1, &ds2;'; put '%mend mp_dsmeta;'; put '%macro mpe_dsmeta(libds, outds=dsmeta);'; put '%local ddsd ddld notes lenstmt memname;'; put '%let lenstmt=length ods_table $18 name $100 value $1000;'; put '%let libds=%upcase(&libds);'; put '%if "%scan(&libds,2,-)" ne "FC" %then %do;'; put '%let memname=%scan(&libds,2,.);'; put '%mp_dsmeta(&libds, outds=&outds)'; put '%end;'; put '%else %do;'; put '%let memname=%scan(&libds,2,.-);'; put 'data &outds;'; put '&lenstmt;'; put 'set sashelp.vcatalg;'; put 'ods_table=cats(objtype);'; put 'name=cats(objname);'; put 'value=catx('' '',objdesc,''(modified:'',put(modified,datetime19.),'')'');'; put 'where libname="%scan(&libds,1,.)" and memname="&memname";'; put 'keep ods_table name value;'; put 'run;'; put 'proc sort; by ods_table name;run;'; put '%end;'; put 'data _null_;'; put 'set &mpelib..mpe_datadictionary;'; put 'where &dc_dttmtfmt < tx_to & dd_source="&memname" & dd_type=''TABLE'';'; put 'call symputx(''ddsd'',dd_shortdesc,''l'');'; put 'call symputx(''ddld'',dd_longdesc,''l'');'; put 'run;'; put 'data &outds;'; put '&lenstmt;'; put 'if last then do;'; put 'ODS_TABLE=''MPE_DATADICTIONARY'';'; put 'NAME=''DD_SHORTDESC'';'; put 'VALUE="&ddsd";'; put 'output;'; put 'NAME=''DD_LONGDESC'';'; put 'VALUE="&ddld";'; put 'output;'; put 'end;'; put 'set &outds end=last;'; put 'output;'; put 'run;'; put 'data _data_;'; put 'set &mpelib..mpe_tables;'; put 'where libref="%scan(&libds,1,.)"'; put '& dsn="%scan(&libds,2,.)"'; put '& &dc_dttmtfmt 0 then put ''AND '' filter_text;'; put 'else put filter_text;'; put 'run;'; put '%end;'; put '%end;'; put '/**'; put '* Now do Row Level Security based on the MPE_ROW_LEVEL_SECURITY table'; put '*/'; put '/* first determine users group membership */'; put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)'; put '%local admin_check;'; put 'proc sql;'; put 'select count(*) into: admin_check'; put 'from work.groups'; put 'where groupname="&mpeadmins";'; put '%put &sysmacroname: &=admin_check &=mpeadmins;'; put '%if &admin_check=0 %then %do;'; put '%local scopeval;'; put '%if &mode=DLOAD %then %let scopeval=VIEW;'; put '%if &mode=ULOAD %then %let scopeval=EDIT;'; put '%else %let scopeval=&mode;'; put '/* extract relevant rows */'; put '%local rlsds;'; put '%let rlsds=%mf_getuniquename();'; put 'proc sql;'; put 'create table work.&rlsds as'; put 'select rls_group,'; put 'rls_group_logic as group_logic,'; put 'rls_subgroup_logic as subgroup_logic,'; put 'rls_subgroup_id as subgroup_id,'; put 'rls_variable_nm as variable_nm,'; put 'rls_operator_nm as operator_nm,'; put 'rls_raw_value as raw_value'; put 'from &mpelib..mpe_row_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and rls_scope in ("&scopeval",''ALL'')'; put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)'; put 'and rls_libref="%scan(&libds,1,.)"'; put 'and rls_table="%scan(&libds,2,.)"'; put 'and rls_active=1'; put 'order by rls_group,rls_subgroup_id;'; put '%if &sqlobs>0 %then %do;'; put '/* check if we currently have filter or not */'; put 'data ;'; put 'infile &outref end=eof;'; put 'input;'; put 'if _n_=1 and eof and cats(_infile_)='''' then newfilter=1;'; put 'output;'; put 'stop;'; put 'run;'; put 'data _null_;'; put 'set &syslast;'; put 'file &outref mod;'; put 'if newfilter=1 then put ''('';'; put 'else put ''AND ('';'; put 'run;'; put '/* loop through and apply filters for each group membership */'; put '%local fref ds;'; put '%let fref=%mf_getuniquefileref();'; put '%let ds=%mf_getuniquename();'; put 'proc sql noprint;'; put 'select distinct rls_group into : group1 -'; put 'from work.&rlsds;'; put '%do i=1 %to &sqlobs;'; put 'data work.&ds;'; put 'set work.&rlsds;'; put 'where rls_group="&&group&i";'; put 'drop rls_group;'; put 'run;'; put '%mp_filtergenerate(&ds,outref=&fref)'; put 'data _null_;'; put 'infile &fref;'; put 'file &outref mod;'; put 'input;'; put 'if &i>1 and _n_=1 then put '' OR '';'; put 'put _infile_;'; put 'run;'; put '%end;'; put 'data _null_;'; put 'file &outref mod;'; put 'put '')'';'; put 'run;'; put '%end; /* &sqlobs>0 */'; put '%else %do;'; put '%put &sysmacroname: no matching groups;'; put 'data _null_;'; put 'set work.groups;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname'; put ',msg=%str(Row Level Security Generation Error)'; put ')'; put '%end; /* &admin_check=0 */'; put '%put leaving &sysmacroname with the following query:;'; put '%local empty;'; put '%let empty=0;'; put 'data _null_;'; put 'infile &outref end=eof;'; put 'input;'; put 'putlog _infile_;'; put 'if _n_=1 and eof and cats(_infile_)='''' then do;'; put 'put ''1=1'';'; put 'call symputx(''empty'',1,''l'');'; put 'end;'; put 'run;'; put '%if &empty=1 %then %do;'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%mend mpe_filtermaster;'; put '%macro dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; put ',outref=&outref'; put ')'; put '%mend dc_getservicecode;'; put '%macro mp_include(fileref'; put ',prefix=_'; put ',opts=SOURCE2'; put ',errds=work.mp_abort_errds'; put ')/*/STORE SOURCE*/;'; put '/* prepare precode */'; put '%local tempref;'; put '%let tempref=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &tempref;'; put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));'; put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';'; put 'name=scan(xpath,-1,''/\'');'; put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';'; put 'path=subpad(xpath,1,length(xpath)-length(name)-1);'; put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';'; put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";'; put 'run;'; put '/* prepare the errds */'; put 'data &errds;'; put 'length msg mac $1000;'; put 'call missing(msg,mac);'; put 'iftrue=''1=0'';'; put 'run;'; put '/* include the include */'; put '%inc &tempref &fileref/&opts;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)'; put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)'; put ')'; put 'filename &tempref clear;'; put '%mend mp_include;'; put '%macro mpe_runhook(hookvar);'; put '%local pgmloc pgmtype;'; put '%let pgmtype=0;'; put '%put &sysmacroname: &=hookvar;'; put '%if %length(&&&hookvar)>0 %then %do;'; put '%put &sysmacroname: Executing &&&hookvar;'; put 'data _null_;'; put 'rule_value=symget("&hookvar");'; put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;'; put 'call symputx(''pgmtype'',''PGM'');'; put 'call symputx(''pgmloc'',rule_value);'; put 'end;'; put 'else do;'; put 'apploc="%mf_getapploc()";'; put 'if substr(rule_value,1,1) ne ''/'''; put 'then rule_value=cats(apploc,''/'',rule_value);'; put 'call symputx(''pgmloc'',rule_value);'; put 'call symputx(''pgmtype'',''JOB'');'; put 'end;'; put 'run;'; put '%if &pgmtype=PGM %then %do;'; put 'filename sascode "&pgmloc";'; put '%end;'; put '%else %do;'; put '%dc_getservicecode(loc=&pgmloc'; put ',outref=sascode'; put ')'; put '%end;'; put '/* the below script will need to modify work.STAGING_DS */'; put '%local x; %let x=; /* legacy feature */'; put '%mp_include(sascode)'; put '%end;'; put '%mend mpe_runhook;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mm_getgroupmembers('; put 'group /* metadata group for which to bring back members */'; put ',outds=work.mm_getgroupmembers /* output dataset to contain the results */'; put ',emails=NO /* set to yes to bring back emails also */'; put ',id=NO /* set to yes if passing an ID rather than group name */'; put ')/*/STORE SOURCE*/;'; put 'data &outds ;'; put 'attrib uriGrp uriMem GroupId GroupName Group_or_Role MemberName MemberType'; put 'euri email length=$64'; put 'GroupDesc length=$256'; put 'rcGrp rcMem rc i j length=3;'; put 'call missing (of _all_);'; put 'drop uriGrp uriMem rcGrp rcMem rc i j arc ;'; put 'i=1;'; put '* Grab the URI for the first Group ;'; put '%if &id=NO %then %do;'; put 'rcGrp=metadata_getnobj("omsobj:IdentityGroup?@Name=''&group''",i,uriGrp);'; put '%end;'; put '%else %do;'; put 'rcGrp=metadata_getnobj("omsobj:IdentityGroup?@Id=''&group''",i,uriGrp);'; put '%end;'; put '* If Group found, enter do loop ;'; put 'if rcGrp>0 then do;'; put 'call missing (rcMem,uriMem,GroupId,GroupName,Group_or_Role'; put ',MemberName,MemberType);'; put '* get group info ;'; put 'rc = metadata_getattr(uriGrp,"Id",GroupId);'; put 'rc = metadata_getattr(uriGrp,"Name",GroupName);'; put 'rc = metadata_getattr(uriGrp,"PublicType",Group_or_Role);'; put 'rc = metadata_getattr(uriGrp,"Desc",GroupDesc);'; put 'j=1;'; put 'do while (metadata_getnasn(uriGrp,"MemberIdentities",j,uriMem) > 0);'; put 'call missing (MemberName, MemberType, email);'; put 'rc = metadata_getattr(uriMem,"Name",MemberName);'; put 'rc = metadata_getattr(uriMem,"PublicType",MemberType);'; put 'if membertype=''User'' and "&emails"=''YES'' then do;'; put 'if metadata_getnasn(uriMem,"EmailAddresses",1,euri)>0 then do;'; put 'arc=metadata_getattr(euri,"Address",email);'; put 'end;'; put 'end;'; put 'output;'; put 'j+1;'; put 'end;'; put 'end;'; put 'run;'; put '%mend mm_getgroupmembers;'; put '%macro dc_getgroupmembers(group,outds=dc_getgroupmembers);'; put '%mm_getgroupmembers(&group,outds=&outds)'; put '%mend dc_getgroupmembers;'; put '/** @cond */'; put '%macro mf_existvar(libds /* 2 part dataset name */'; put ', var /* variable name */'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid=0 %then %do;'; put '%put %sysfunc(sysmsg());'; put '0'; put '%end;'; put '%else %if %length(&var)=0 %then %do;'; put '0'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%sysfunc(varnum(&dsid,&var))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_existvar;'; put '/** @endcond */'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mp_getcols(ds, outds=work.cols);'; put '%local dropds;'; put 'proc contents noprint data=&ds'; put 'out=_data_ (keep=name type length label varnum format:);'; put 'run;'; put '%let dropds=&syslast;'; put 'data &outds(keep=name type length varnum format label ddtype fmtname);'; put 'set &dropds(rename=(format=fmtname type=type2));'; put 'name=upcase(name);'; put 'if type2=2 then do;'; put 'length format $49.;'; put 'if fmtname='''' then format=cats(''$'',length,''.'');'; put 'else if formatl=0 then format=cats(fmtname,''.'');'; put 'else format=cats(fmtname,formatl,''.'');'; put 'type=''C'';'; put 'ddtype=''CHARACTER'';'; put 'end;'; put 'else do;'; put 'if fmtname='''' then format=cats(length,''.'');'; put 'else if formatl=0 then format=cats(fmtname,''.'');'; put 'else if formatd=0 then format=cats(fmtname,formatl,''.'');'; put 'else format=cats(fmtname,formatl,''.'',formatd);'; put 'type=''N'';'; put 'if format=:''DATETIME'' or format=:''E8601DT'' or format=:''NLDATM'''; put 'then ddtype=''DATETIME'';'; put 'else if format=:''DATE'' or format=:''DDMMYY'' or format=:''MMDDYY'''; put 'or format=:''YYMMDD'' or format=:''E8601DA'' or format=:''B8601DA'''; put 'or format=:''MONYY'' or format=:''NLDATE'''; put 'then ddtype=''DATE'';'; put 'else if format=:''TIME'' then ddtype=''TIME'';'; put 'else ddtype=''NUMERIC'';'; put 'end;'; put 'if label='''' then label=name;'; put 'run;'; put 'proc sql;'; put 'drop table &dropds;'; put '%mend mp_getcols;'; put '%macro mcf_init(func'; put ')/*/STORE SOURCE*/;'; put '%if not (%symexist(SASJS_PREFIX)) %then %do;'; put '%global SASJS_PREFIX;'; put '%let SASJS_PREFIX=SASJS;'; put '%end;'; put '%let func=%upcase(&func);'; put '/* the / character is just a seperator */'; put '%global &sasjs_prefix._FUNCTIONS;'; put '%if %index(&&&sasjs_prefix._FUNCTIONS,&func/)>0 %then %do;'; put '1'; put '%return;'; put '%end;'; put '%else %do;'; put '%let &sasjs_prefix._FUNCTIONS=&&&sasjs_prefix._FUNCTIONS &func/;'; put '0'; put '%end;'; put '%mend mcf_init;'; put '%macro mcf_length(wrap=NO'; put ',insert_cmplib=DEPRECATED'; put ',lib=WORK'; put ',cat=SASJS'; put ',pkg=UTILS'; put ')/*/STORE SOURCE*/;'; put '%local i var cmpval found;'; put '%if %mcf_init(mcf_length)=1 %then %return;'; put '%if &wrap=YES %then %do;'; put 'proc fcmp outlib=&lib..&cat..&pkg;'; put '%end;'; put 'function mcf_length(var);'; put 'if var=. then len=0;'; put 'else if missing(var) or trunc(var,3)=var then len=3;'; put 'else if trunc(var,4)=var then len=4;'; put 'else if trunc(var,5)=var then len=5;'; put 'else if trunc(var,6)=var then len=6;'; put 'else if trunc(var,7)=var then len=7;'; put 'else len=8;'; put 'return(len);'; put 'endsub;'; put '%if &wrap=YES %then %do;'; put 'quit;'; put '%end;'; put '/* insert the CMPLIB if not already there */'; put '%let cmpval=%sysfunc(getoption(cmplib));'; put '%let found=0;'; put '%do i=1 %to %sysfunc(countw(&cmpval,%str( %(%))));'; put '%let var=%scan(&cmpval,&i,%str( %(%)));'; put '%if &var=&lib..&cat %then %let found=1;'; put '%end;'; put '%if &found=0 %then %do;'; put 'options insert=(CMPLIB=(&lib..&cat));'; put '%end;'; put '%mend mcf_length;'; put '%macro mf_getvarcount(libds,typefilter=A'; put ')/*/STORE SOURCE*/;'; put '%local dsid nvars rc outcnt x;'; put '%let dsid=%sysfunc(open(&libds));'; put '%let nvars=.;'; put '%let outcnt=0;'; put '%let typefilter=%upcase(&typefilter);'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &typefilter=A %then %let outcnt=&nvars;'; put '%else %if &nvars>0 %then %do x=1 %to &nvars;'; put '/* increment based on variable type */'; put '%if %sysfunc(vartype(&dsid,&x))=&typefilter %then %do;'; put '%let outcnt=%eval(&outcnt+1);'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put unable to open &libds (rc=&dsid);'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '&outcnt'; put '%mend mf_getvarcount;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getVarFormat(libds /* two level ds name */'; put ', var /* variable name from which to return the format */'; put ', force=0'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vformat rc vlen vtype;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable format */'; put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let rc = %sysfunc(close(&dsid));'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* supply a default if no format available */'; put '%if %length(&vformat)<2 & &force=1 %then %do;'; put '%let vlen = %sysfunc(varlen(&dsid, &vnum));'; put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%if &vtype=C %then %let vformat=$&vlen..;'; put '%else %let vformat=best.;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable format */'; put '&vformat'; put '%mend mf_getVarFormat;'; put '%macro mp_getmaxvarlengths('; put 'libds'; put ',num2char=NO'; put ',outds=work.mp_getmaxvarlengths'; put ')/*/STORE SOURCE*/;'; put '%local vars prefix x var fmt srcds;'; put '%let vars=%mf_getvarlist(libds=&libds);'; put '%let prefix=%substr(%mf_getuniquename(),1,25);'; put '%let num2char=%upcase(&num2char);'; put '%if &num2char=NO %then %do;'; put '/* compile length function for numeric fields */'; put '%mcf_length(wrap=YES, insert_cmplib=YES)'; put '%end;'; put '%if &num2char=NO'; put 'and ("%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5")'; put 'and %mf_getvarcount(&libds,typefilter=N) gt 0'; put '%then %do;'; put '/* custom functions not supported in summary operations */'; put '%let srcds=%mf_getuniquename();'; put 'data &srcds/view=&srcds;'; put 'set &libds;'; put '%do x=1 %to %sysfunc(countw(&vars,%str( )));'; put '%let var=%scan(&vars,&x);'; put '%if %mf_getvartype(&libds,&var)=N %then %do;'; put '&prefix.&x=mcf_length(&var);'; put '%end;'; put '%end;'; put 'run;'; put '%end;'; put '%else %let srcds=&libds;'; put 'proc sql;'; put 'create table &outds (rename=('; put '%do x=1 %to %sysfunc(countw(&vars,%str( )));'; put '&prefix.&x=%scan(&vars,&x)'; put '%end;'; put '))'; put 'as select'; put '%do x=1 %to %sysfunc(countw(&vars,%str( )));'; put '%let var=%scan(&vars,&x);'; put '%if &x>1 %then ,;'; put '%if %mf_getvartype(&libds,&var)=C %then %do;'; put 'max(lengthn(&var)) as &prefix.&x'; put '%end;'; put '%else %if &num2char=YES %then %do;'; put '%let fmt=%mf_getvarformat(&libds,&var);'; put '%put fmt=&fmt;'; put '%if %str(&fmt)=%str() %then %do;'; put 'max(lengthn(cats(&var))) as &prefix.&x'; put '%end;'; put '%else %do;'; put 'max(lengthn(put(&var,&fmt))) as &prefix.&x'; put '%end;'; put '%end;'; put '%else %do;'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then %do;'; put 'max(&prefix.&x) as &prefix.&x'; put '%end;'; put '%else %do;'; put 'max(mcf_length(&var)) as &prefix.&x'; put '%end;'; put '%end;'; put '%end;'; put 'from &srcds;'; put 'proc transpose data=&outds'; put 'out=&outds(rename=(_name_=NAME COL1=MAXLEN));'; put 'run;'; put '%mend mp_getmaxvarlengths;'; put '%macro mp_validatecol(incol,rule,outcol);'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename();'; put '%if &rule=ISINT %then %do;'; put '&outcol=0;'; put 'if not missing(&incol) then do;'; put '&tempcol=input(&incol,?? best32.);'; put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;'; put 'end;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=ISNUM %then %do;'; put '/*'; put 'credit SOREN LASSEN'; put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html'; put '*/'; put '&tempcol=input(&incol,?? best32.);'; put 'if missing(&tempcol) then &outcol=0;'; put 'else &outcol=1;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=LIBDS %then %do;'; put '/* match libref.dataset */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%else %if &rule=FORMAT %then %do;'; put '/* match valid format - regex could probably be improved */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%mend mp_validatecol;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getdata.sas'; put '@brief Returns a dataset to the editor front end'; put '@details'; put '

Service Inputs

'; put '
SASCONTROLTABLE
'; put '|LIBDS:$41.|FILTER_RK:$5.|'; put '|---|---|'; put '|DC258467.MPE_X_TEST|-1|'; put '

Service Outputs

'; put '
sasdata
'; put '
sasparams
'; put 'Contains info on the request. One row is returned.'; put '@li CLS_FLG - set to 0 if there are no CLS rules (everything editable)'; put 'else set to 1 (CLS rules exist)'; put '@li ISMAP - set to 1 if the target DS is an excel map target, else 0'; put '
approvers
'; put '
dqrules
'; put '
dqdata
'; put '
cols
'; put 'Contains column level attributes.'; put '@li NAME - column name'; put '@li VARNUM - variable position. Source: https://core.sasjs.io/mp__getcols_8sas.html'; put '@li LABEL - variable label. Source: https://core.sasjs.io/mp__getcols_8sas.html'; put '@li FMTNAME - derived format name. Source: https://core.sasjs.io/mp__getcols_8sas.html'; put '@li DDTYPE - derived dropdown type. Source: https://core.sasjs.io/mp__getcols_8sas.html'; put '@li CLS_RULE - values include:'; put '- EDIT - the column is editable'; put '- READ - the column should be readonly'; put '- HIDE - the column should be hidden'; put '@li memlabel'; put '@li desc- augmented with MPE_DATADICTIONARY if exists, else label'; put '@li longdesc - from MPE_DATADICTIONARY'; put '
maxvarlengths
'; put '
xl_rules
'; put '
query
'; put '
versions
'; put 'history of DC versions for this particular table'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li dc_getgroupmembers.sas'; put '@li mf_existvar.sas'; put '@li mf_getattrn.sas'; put '@li mf_getvarlist.sas'; put '@li mf_existds.sas'; put '@li mf_getquotedstr.sas'; put '@li mf_getuser.sas'; put '@li mf_nobs.sas'; put '@li mf_verifymacvars.sas'; put '@li mf_wordsinstr1butnotstr2.sas'; put '@li mp_abort.sas'; put '@li mp_cntlout.sas'; put '@li mp_getcols.sas'; put '@li mp_getmaxvarlengths.sas'; put '@li mp_validatecol.sas'; put '@li mpe_accesscheck.sas'; put '@li mpe_columnlevelsecurity.sas'; put '@li mpe_dsmeta.sas'; put '@li mpe_getlabels.sas'; put '@li mpe_getversions.sas'; put '@li mpe_filtermaster.sas'; put '@li mpe_runhook.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '/**'; put '* Validate inputs'; put '*/'; put 'data work.intest;'; put 'length filter_rk 8;'; put 'set work.SASCONTROLTABLE;'; put '/* validate filter_rk */'; put 'if filter_rk le 0 then filter_rk=-1;'; put 'call symputx(''orig_libds'',upcase(libds));'; put 'is_fmt=0;'; put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'is_fmt=1;'; put 'libds=''work.fmtextract'';'; put 'call symputx(''libds'',libds);'; put 'end;'; put 'call symputx(''is_fmt'',is_fmt);'; put 'putlog (_all_)(=);'; put '/* validate libds */'; put '%mp_validatecol(LIBDS,LIBDS,is_libds)'; put 'if is_libds=0 then do;'; put 'putlog ''ERR'' ''OR: Invalid libds:'' libds;'; put 'stop;'; put 'end;'; put 'else do;'; put 'call symputx(''filter_rk'',filter_rk);'; put 'call symputx(''libds'',libds);'; put 'end;'; put 'output;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (%mf_nobs(work.intest)=0)'; put ',mac=&_program'; put ',msg=%str(Some err with service inputs)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(libds filter_rk)=0)'; put ',mac=&_program'; put ',msg=%str(Missing: libds filter_rk)'; put ')'; put '/* export format catalog */'; put '%mp_cntlout('; put 'iftrue=(&is_fmt=1)'; put ',libcat=&orig_libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '/* stream back meta info, further calls will return col metadata and actual data'; put '*/'; put '%let libref=%upcase(%scan(&libds,1,.));'; put '%let dsn=%upcase(%scan(&libds,2,.));'; put '%dc_assignlib(WRITE,&libref)'; put '/**'; put '* First check user has access permission to edit the table'; put '*/'; put '%put checking access;'; put '%let user=%mf_getuser();'; put '%mpe_accesscheck(&orig_libds,outds=mw_auth,user=&user,access_level=EDIT)'; put '%mp_abort(iftrue= (%mf_getattrn(work.mw_auth,NLOBS)=0)'; put ',mac=mpestp_getdata.sas'; put ',msg=&user is not authorised to edit &orig_libds %trim('; put ')in the &mpelib..MPE_SECURITY table'; put ')'; put '%mp_abort(iftrue= ( %mf_existds(libds=&libds) ne 1)'; put ',mac=mpestp_getdata.sas'; put ',msg=dataset &libds does not exist!!'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc at line 60 )'; put ')'; put '%global loadtype var_txfrom var_txto var_processed filter_text pk coltype'; put 'sortpk;'; put '%put getting table attributes;'; put 'proc sql noprint;'; put 'select upcase(loadtype)'; put ',var_txfrom,var_txto'; put ',var_busfrom,var_busto'; put ',var_processed,rk_underlying,buskey'; put ',coalesce(rk_underlying,buskey)'; put ',pre_edit_hook'; put ',case when missing(rk_underlying) then buskey else rk_underlying end'; put 'into: loadtype,:var_txfrom,:var_txto'; put ',:var_busfrom ,:var_busto'; put ',:var_processed,:rk_underlying,:buskey, :sortPK, :pre_edit_hook,:pk'; put 'from &mpelib..mpe_tables'; put 'where &dc_dttmtfmt. lt TX_TO'; put 'and upcase(dsn)="%scan(&orig_libds,2,.)"'; put 'and upcase(libref)="%scan(&orig_libds,1,.)";'; put '%put preparing filter query:;'; put '%mpe_filtermaster(EDIT,&orig_libds,'; put 'dclib=&mpelib,'; put 'filter_rk=&filter_rk,'; put 'outref=filtref,'; put 'outds=work.query'; put ')'; put '%macro mpestp_getdata();'; put '%if not %symexist(DC_MAXOBS_WEBEDIT) %then %do;'; put '%put NOTE:;%put NOTE- DC_MAXOBS_WEBEDIT not found!;'; put '%put NOTE- Please add to &mpelib..MPE_CONFIG table;'; put '%put NOTE-;%put NOTE-;'; put '%global DC_MAXOBS_WEBEDIT;'; put '%let DC_MAXOBS_WEBEDIT=500;'; put '%end;'; put '/* for tables which use RKs/SKs then we just expose the business key to'; put 'users - this lets uploads be sent to multiple environments (with'; put 'potentially different RK/SK values for the same business key).'; put 'Note that the config table has the RK column in the buskey field in'; put 'this scenario. */'; put '%if %length(&rk_underlying)>0 %then %let drop_rk=&buskey;'; put '%else %let drop_rk=;'; put '/* always remove the PROCESSED_DTTM column, if it exists */'; put '%if %length(&var_processed)=0 %then %do;'; put '%if %mf_existvar(&libds,PROCESSED_DTTM)>0 %then'; put '%let var_processed=PROCESSED_DTTM;'; put '%end;'; put '/**'; put '* Now get the slice of the actual table'; put '*/'; put 'options obs=10000;'; put '%if &loadtype=BITEMPORAL %then %do;'; put 'data out (drop=&var_txfrom &var_txto &var_processed &drop_rk );'; put '_____DELETE__THIS__RECORD_____="No";'; put 'set &libds;'; put 'where %inc filtref;;'; put 'run;'; put 'proc sort data=out;'; put 'by &pk &var_busfrom;'; put 'run;'; put 'data out;'; put 'set out;'; put 'by &pk &var_busfrom;'; put 'if last.%scan(&pk,-1);'; put 'run;'; put '%end;'; put '%else %do;'; put 'data out (drop=&var_txfrom &var_txto &var_processed &drop_rk);'; put '_____DELETE__THIS__RECORD_____="No";'; put 'set &libds;'; put 'where %inc filtref;;'; put 'run;'; put '%end;'; put 'options obs=max;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Issue with filtering (line 165) )'; put ')'; put 'options obs=&DC_MAXOBS_WEBEDIT;'; put '%let sortpk=%sysfunc(coalescec(&sortpk &var_busfrom,_ALL_));'; put 'proc sort data=work.out; by &sortPK; run;'; put 'options obs=max;'; put '%mpe_runhook(PRE_EDIT_HOOK)'; put '%let obscnt=%mf_getattrn(work.out,NLOBS);'; put '%mp_abort(iftrue=(&obscnt>&DC_MAXOBS_WEBEDIT)'; put ',mac=&_program'; put ',msg=Table is too big (&obscnt rows) - please filter and try again!'; put ')'; put '/* order delete var and pk fields at start of table */'; put '%let sourcevars=%mf_wordsInStr1ButNotStr2('; put 'Str1=%mf_getvarlist(work.out)'; put ',Str2= _____DELETE__THIS__RECORD_____ &pk'; put ');'; put '%put sourcevars=&sourcevars;'; put 'data outdata;'; put '/* delete & pk fields come first */'; put 'attrib _____DELETE__THIS__RECORD_____ &pk label='''';'; put '/* keep remaining variable order */'; put '%if %length(&sourcevars)>0 %then %do;'; put 'attrib &sourcevars label='''';'; put '%end;'; put '_____DELETE__THIS__RECORD_____="No ";'; put '%if %mf_nobs(work.out)=0 %then %do;'; put '/* send empty row if empty table to help with hot rendering */'; put 'output;'; put '%end;'; put 'set work.out ;'; put 'run;'; put '/* get list of variables and their formats */'; put 'proc contents noprint data=outdata'; put 'out=vars(keep=name type length varnum format: label);'; put 'run;'; put 'proc sort;'; put 'by varnum;'; put 'run;'; put 'data vars3(keep=name type length format label pk varnum ctrloptions formatd);'; put 'set vars(rename=(format=format2 type=type2));'; put 'name=upcase(name);'; put '/* not interested in transaction or processing dates'; put '(append table must be supplied without them) */'; put 'if name not in ("&VAR_TXFROM","&VAR_TXTO","&VAR_PROCESSED");'; put 'if type2=2 or type2=6 then do;'; put 'length format $49.;'; put 'if format2='''' then format=cats(''$'',length,''.'');'; put 'else format=cats(format2,formatl,''.'');'; put 'type=''char'';'; put 'end;'; put 'else do;'; put 'if format2='''' then format=cats(length,''.'');'; put 'else if upcase(format2)=''DATETIME'' and formatl=0 then format=''DATETIME.'';'; put 'else format=cats(format2,formatl,''.'',formatd);'; put 'type=''num'';'; put 'end;'; put 'if name in ('''',%upcase(%mf_getQuotedStr(&pk,dlm=%str(,),quote=S)))'; put 'then PK=''YES'';'; put 'length ctrlOptions $500;'; put 'if name="_____DELETE__THIS__RECORD_____" then ctrlOptions=''["No","Yes"]'';'; put 'else ctrlOptions='''';'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc at 242 (vars3 step) in &_program \n'; put '%superq(syserrortext)'; put ')'; put ')'; put '%global jsdttmvars jsdtvars jstmvars;'; put 'data _null_;'; put 'set vars3 end=last;'; put 'if _n_>1 then comma='','';'; put 'length coltype $500.;'; put 'format=upcase(format);'; put 'coltype=cats(comma,''{"data":"'',name,''"'');'; put 'if ctrlOptions ne '''' then'; put 'colType=cats(coltype,'',"type":"dropdown","source":'',ctrlOptions,"}");'; put 'else if type=''num'' then do;'; put 'if format=:''DATETIME'' or format=:''E8601DT'' or format=:''NLDATM'''; put 'then do;'; put 'colType=cats(coltype'; put ','',"type":"date","dateFormat":"YYYY-MM-DD HH:mm:ss"'''; put ','',"correctFormat":"true"}'');'; put '/* build var list to reformat datetimes in javascript format */'; put 'call symput(''jsdttmvars'',symget(''jsdttmvars'')!!'' ''!!name);'; put 'end;'; put 'else if format=:''DATE'' or format=:''DDMMYY'' or format=:''MMDDYY'''; put 'or format=:''YYMMDD'' or format=:''E8601DA'' or format=:''B8601DA'''; put 'or format=:''MONYY'' or format=:''NLDATE'''; put 'then do;'; put '/* see bottom of file for more date formats!! */'; put '/* also when updating, update stagedata.sas and mp_getcols.sas'; put 'and mpe_loader.sas */'; put 'colType=cats(coltype,'',"type":"date","dateFormat":"YYYY-MM-DD"'''; put '/*colType=cats(coltype,'',"type":"date","dateFormat":"MM/DD/YYYY"''*/'; put ','',"correctFormat":"true"}'');'; put '/* build var list to reformat as javascript dates */'; put 'call symput(''jsdtvars'',symget(''jsdtvars'')!!'' ''!!name);'; put 'end;'; put 'else if format=:''TIME'' or format=:''HHMM'' then do;'; put 'colType=cats(coltype,'',"type":"time","timeFormat":"HH:mm:ss"'''; put ','',"correctFormat":"true"}'');'; put '/* build var list to reformat as javascript times */'; put 'call symput(''jstmvars'',symget(''jstmvars'')!!'' ''!!name);'; put 'end;'; put 'else do;'; put '/* is standard numeric but need to ascertain precision */'; put 'retain base ''000000000000000000'';'; put 'if formatd>0 then numFormat=cats(''.'',substr(base,1,formatd));'; put 'colType=cats(coltype,'',"type":"numeric","format":"0'',numFormat,''"}'');'; put 'end;'; put 'end;'; put 'else colType=cats(coltype,''}'');'; put 'length concatcoltype $32767;'; put 'retain concatcoltype;'; put 'concatcoltype=cats(concatcoltype,coltype);'; put 'if last then call symputx(''colType'',strip(concatcoltype),''g'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc at 283 (null step) in &_program)'; put ')'; put 'PROC FORMAT;'; put 'picture yymmddThhmmss (default=28) other=''%0Y-%0m-%0d %0H:%0M:%0s'''; put '(datatype=datetime);'; put 'picture JSyymmdd other=''%0Y-%0m-%0d'' (datatype=date);'; put 'picture JShhmmss (default=16) other=''%0H:%0M:%0s'' (datatype=time);'; put 'RUN;'; put '/* before we send the data, need to rebuild all date & datetime vars as char*/'; put '%let finalvars=%mf_getvarlist(work.outdata);'; put 'data sasdata;'; put '/* set formats & col order ahead of rename+import */'; put 'informat &finalvars ;'; put '/* read dataset and rename date / datetime vars as necessary */'; put 'set outdata'; put '%if %length(&jsdttmvars&jsdtvars&jstmvars)>0 %then %do;'; put '(rename=('; put '%local dtvarnum dtvar tmvar;'; put '/* temp datetime vars end in _____ */'; put '%do dtvarnum=1 %to %sysfunc(countw(&jsdttmvars,%str( )));'; put '%let dtvar=%scan(&jsdttmvars ,&dtvarnum);'; put '&dtvar=_____&dtvarnum._____'; put '%end;'; put '/* temp date vars do not end in _____ */'; put '%do dtvarnum=1 %to %sysfunc(countw(&jsdtvars,%str( )));'; put '%let dtvar=%scan( &jsdtvars,&dtvarnum);'; put '&dtvar=_____&dtvarnum'; put '%end;'; put '/* temp time vars end in ___tm */'; put '%do tmvarnum=1 %to %sysfunc(countw(&jstmvars,%str( )));'; put '%let tmvar=%scan( &jstmvars,&tmvarnum);'; put '&tmvar=_____&tmvarnum.___tm'; put '%end;'; put '))'; put '%end;'; put ';'; put '%if %length(&jsdttmvars)>0 %then %do ;'; put '%do dtvarnum=1 %to %sysfunc(countw(&jsdttmvars,%str( )));'; put '%let dtvar=%scan(&jsdttmvars,&dtvarnum);'; put '&dtvar=cats(put(_____&dtvarnum._____,yymmddThhmmss28.));'; put 'if &dtvar="ERROR" then call missing(&dtvar);'; put 'drop _____&dtvarnum._____;'; put '%end;'; put '%end;'; put '%if %length(&jsdtvars)>0 %then %do;'; put '%do dtvarnum=1 %to %sysfunc(countw(&jsdtvars,%str( )));'; put '%let dtvar=%scan(&jsdtvars,&dtvarnum);'; put '&dtvar=cats(put(_____&dtvarnum,JSyymmdd.));'; put 'if &dtvar="ERROR" then call missing(&dtvar);'; put 'drop _____&dtvarnum;'; put '%end;'; put '%end;'; put '%if %length(&jstmvars)>0 %then %do;'; put '%do tmvarnum=1 %to %sysfunc(countw(&jstmvars,%str( )));'; put '%let tmvar=%scan(&jstmvars,&tmvarnum);'; put '&tmvar=cats(put(_____&tmvarnum.___tm,JShhmmss14.));'; put 'if &tmvar="ERROR" then call missing(&tmvar);'; put 'drop _____&tmvarnum.___tm;'; put '%end;'; put '%end;'; put 'output;'; put 'run;'; put '/* get the relevant approvers for the drop down */'; put '%put getting approvers;'; put '%local sas_groups sas_i sas_group;'; put 'proc sql noprint;'; put 'select distinct sas_Group into: sas_groups separated by "|"'; put 'from &mpelib..mpe_security'; put 'where libref="%scan(&orig_libds,1,.)"'; put 'and dsn="%scan(&orig_libds,2,.)"'; put 'and access_level=''APPROVE'''; put 'and &dc_dttmtfmt. lt TX_TO;'; put '%if %length(&sas_groups)=0 %then %do;'; put '%dc_getgroupmembers(&dc_admin_group,outds=work.access1)'; put '%end;'; put '%else %do sas_i=1 %to %sysfunc(countw(&sas_groups,%str(|)));'; put '%let sas_group=%scan(&sas_Groups,&sas_i,%str(|));'; put '%dc_getgroupmembers(&sas_group,outds=work.temp&sas_i)'; put 'proc append base=work.access1 data=work.temp&sas_i;run;'; put '%end;'; put '%mend mpestp_getdata;'; put '%mpestp_getdata()'; put '%mp_abort(mode=INCLUDE)'; put '/* extract column level security rules */'; put '%mpe_columnlevelsecurity(%scan(&libds,1,.),%scan(&libds,2,.),work.sasdata'; put ',mode=EDIT'; put ',clsds=&mpelib..mpe_column_level_security'; put ',groupds=work.groups /* was created in mpe_filtermaster */'; put ',outds=work.sasdata1'; put ',outmeta=work.cls_rules'; put ')'; put '/* get labels */'; put '%mpe_getlabels(COLUMNS,sasdata1,outds=spec)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc extracting spec info)'; put ')'; put '/* extract col info */'; put '%mp_getcols(&libds, outds=cols1)'; put '/* join with cls rules */'; put 'proc sql;'; put 'create table work.cols as'; put 'select a.NAME'; put ',a.VARNUM'; put ',a.LABEL'; put ',a.FMTNAME'; put ',a.DDTYPE'; put ',case b.cls_hide'; put 'when 1 then ''HIDE'''; put 'when 0 then ''EDIT'''; put 'else ''READ'' end as CLS_RULE'; put ',c.memlabel'; put ',c.desc'; put ',c.longdesc'; put 'from work.cols1 a'; put 'left join work.cls_rules b'; put 'on a.NAME=b.CLS_VARIABLE_NM'; put 'left join work.spec c'; put 'on a.NAME=c.NAME;'; put 'proc sql;'; put 'create table approvers as select distinct membername as personname'; put ',membername as email, membername as userid'; put 'from work.access1;'; put '/*'; put 'create table access3 as select b.userid,b.email'; put 'from access2 a'; put ',support.users b'; put 'where a.personname=b.userid'; put 'and a.personname ne "%mf_getuser()"'; put 'and %sysfunc(datetime()) lt b.tx_to_dttm'; put 'order by 1;'; put '*/'; put 'data _null_;'; put 'infile filtref end=eof;'; put 'input;'; put 'length filter_text $32767;'; put 'retain filter_text;'; put 'filter_text=catx('' '',filter_text,_infile_);'; put 'if eof then do;'; put 'if cats(filter_text)=''1=1'' then filter_text='''';'; put 'call symputx(''filter_text'',filter_text);'; put 'end;'; put 'run;'; put '%put params;'; put '%let ismap=0;'; put 'proc sql noprint;'; put 'select count(*) into: ismap from &mpelib..mpe_xlmap_info'; put 'where XLMAP_TARGETLIBDS="&orig_libds" and &dc_dttmtfmt. le TX_TO;'; put 'data sasparams;'; put 'length colHeaders $20000 filter_text $32767;'; put 'colHeaders=cats(upcase("%mf_getvarlist(sasdata1,dlm=%str(,))"));'; put 'pkCnt=countw("&pk");'; put 'pk="&pk";'; put 'dtvars=compbl("&jsdtvars");'; put 'dttmvars=compbl("&jsdttmvars");'; put 'tmvars=compbl("&jstmvars");'; put 'length coltype $32000;'; put 'coltype=symget(''coltype'');'; put 'loadtype=symget(''loadtype'');'; put 'if trim(symget(''rk_underlying'')) ne '''' then rk_flag=1;'; put 'else rk_flag=0;'; put 'filter_text=symget(''filter_text'');'; put 'if %mf_nobs(work.cls_rules)=0 then cls_flag=0;'; put 'else cls_flag=1;'; put 'put (_all_)(=);'; put 'if "&orig_libds"="&mpelib..MPE_XLMAP_DATA" or &ismap ne 0 then ismap=1;'; put 'else ismap=0;'; put 'run;'; put '/* Extract validation DQ Rules */'; put 'proc sort data=&mpelib..mpe_validations'; put '(where=(&dc_dttmtfmt. le TX_TO'; put 'and BASE_LIB="%scan(&orig_libds,1,.)" and BASE_DS="%scan(&orig_libds,2,.)"'; put 'and rule_active=1))'; put 'out=dqrules (keep=base_col rule_type rule_value);'; put 'by base_col rule_type rule_value;'; put 'run;'; put '/* merge with NOTNULL constraints in the physical table */'; put 'proc sql;'; put 'create table _data_ as'; put 'select * from dqrules'; put 'union'; put 'select upcase(name) as base_col'; put ',''NOTNULL'' as rule_type'; put ','''' as rule_value'; put 'from dictionary.columns'; put 'where upcase(libname)="%scan(&orig_libds,1,.)"'; put 'and upcase(memname)="%scan(&orig_libds,2,.)"'; put 'and upcase(name) in (select name from vars3)'; put 'and notnull=''yes'''; put 'order by 1,2,3;'; put 'data dqrules;'; put 'set &syslast;'; put 'by base_col rule_type rule_value;'; put 'if last.rule_type;'; put 'if rule_type in (''HARDSELECT'',''SOFTSELECT'') and countw(rule_value)=3 then'; put 'do;'; put 'retain x 0; x+1;'; put 'call symputx(cats(''source'',x),rule_value);'; put '%let sourcecnt=0;'; put 'call symputx(''sourcecnt'',x);'; put 'call symputx(cats(''base_col'',x),base_col);'; put 'end;'; put 'run;'; put 'proc sql;'; put 'create table dqdata as'; put 'select distinct base_column as base_col length=32'; put ',upcase(base_column) as rule_value length=74 /* deprecated */'; put ',selectbox_value as rule_data length=1000'; put ',selectbox_order'; put 'from &mpelib..mpe_selectbox'; put 'where &dc_dttmtfmt. lt ver_to_dttm'; put 'and select_lib="%scan(&orig_libds,1,.)"'; put 'and select_ds="%scan(&orig_libds,2,.)";'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc during DQ rule validation)'; put ')'; put '/* extract selectbox data */'; put '%macro dq_selects();'; put '%local x source lib ds col;'; put '%do x=1 %to &sourcecnt;'; put '%let source=&&source&x;'; put '%let lib=%scan(&source,1,.);'; put '%let ds=%scan(&source,2,.);'; put '%let col=%scan(&source,3,.);'; put '%put &=source;'; put '%put &=lib;'; put '%dc_assignlib(READ,&lib)'; put 'proc sql;'; put 'create table dqdata&x as'; put 'select distinct "&&base_col&x" as base_col length=32'; put ',"&source" as rule_value length=74'; put ',cats(&col) as rule_data length=1000'; put ',&col as tmp_order'; put 'from &lib..&ds'; put 'order by tmp_order;'; put '/* ensure both numerics and char vals are ordered correctly */'; put 'data work.dqdata&x (drop=tmp_order);'; put 'set work.dqdata&x;'; put 'selectbox_order=_n_;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc when selecting &&base_col&x from &orig_libds)'; put ')'; put 'proc append base=dqdata data=dqdata&x;run;'; put 'proc sql; drop table dqdata&x;'; put '%end;'; put '%mend dq_selects;'; put '%dq_selects()'; put 'proc sort data=dqdata;'; put '/* order by selectbox_order then the value */'; put 'by base_col selectbox_order rule_data;'; put 'run;'; put '%mp_getmaxvarlengths(work.sasdata1,outds=maxvarlengths)'; put 'data maxvarlengths;'; put 'set maxvarlengths;'; put 'if name=''_____DELETE__THIS__RECORD_____'' then mAXLEN=3;'; put 'run;'; put 'data xl_rules;'; put 'set &mpelib..mpe_excel_config;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(xl_libref)="%scan(&orig_libds,1,.)";'; put 'where also upcase(xl_table)="%scan(&orig_libds,2,.)";'; put 'where also xl_active=1;'; put 'keep xl_column xl_rule;'; put 'run;'; put '%mpe_dsmeta(&orig_libds, outds=dsmeta)'; put '%mpe_getversions(&mpelib,'; put '%scan(&orig_libds,1,.),'; put '%scan(&orig_libds,2,.),'; put 'outds=versions'; put ')'; put '/* send to the client */'; put '%webout(OPEN)'; put '%webout(OBJ,approvers)'; put '%webout(OBJ,cols)'; put '%webout(OBJ,dqdata,missing=STRING)'; put '%webout(OBJ,dqrules)'; put '%webout(OBJ,dsmeta)'; put '%webout(OBJ,maxvarlengths)'; put '%webout(OBJ,query)'; put '%webout(OBJ,sasdata1,fmt=N,missing=STRING,showmeta=YES,dslabel=sasdata)'; put '%webout(OBJ,sasparams)'; put '%webout(OBJ,versions)'; put '%webout(OBJ,xl_rules)'; put '%webout(CLOSE)'; put '/*'; put '$N8601Bw'; put '$N8601BAw'; put '$N8601Ew'; put '$N8601EAw'; put '$N8601EHw'; put '$N8601EXw'; put '$N8601Hw'; put '$N8601Xw'; put 'B8601DAw'; put 'B8601DNw'; put 'B8601DTw'; put 'B8601DZw'; put 'B8601LZw'; put 'B8601TMw'; put 'B8601TZw'; put 'DATEw'; put 'DATEAMPMw'; put 'DATETIMEw'; put 'DAYw'; put 'DDMMYYw'; put 'DDMMYYxw'; put 'DOWNAMEw'; put 'DTDATEw'; put 'DTMONYYw'; put 'DTWKDATXw'; put 'DTYEARw'; put 'DTYYQCw'; put 'E8601DAw'; put 'E8601DNw'; put 'E8601DTw'; put 'E8601DZw'; put 'E8601LZw'; put 'E8601TMw'; put 'E8601TZw'; put 'HHMMw'; put 'HOURw'; put 'JULDAYw'; put 'JULIANw'; put 'MMDDYYw'; put 'MMDDYYxw'; put 'MMSSw'; put 'MMYYw'; put 'MMYYxw'; put 'MONNAMEw'; put 'MONTHw'; put 'MONYYw'; put 'PDJULGw'; put 'PDJULIw'; put 'QTRw'; put 'QTRRw'; put 'TIMEw'; put 'TIMEAMPMw'; put 'TODw'; put 'WEEKDATEw'; put 'WEEKDATXw'; put 'WEEKDAYw'; put 'WEEKUw'; put 'WEEKVw'; put 'WEEKWw'; put 'WORDDATEw'; put 'WORDDATXw'; put 'YEARw'; put 'YYMMw'; put 'YYMMxw'; put 'YYMMDDw'; put 'YYMMDDxw'; put 'YYMONw'; put 'YYQw'; put 'YYQxw'; put 'YYQRw'; put 'YYQRxw'; put '$N8601BAw'; put '$N8601Ew'; put '$N8601EAw'; put '$N8601EHw'; put '$N8601EXw'; put '$N8601Hw'; put '$N8601Xw'; put 'B8601DAw'; put 'B8601DNw'; put 'B8601DTw'; put 'B8601DZw'; put 'B8601LZw'; put 'B8601TMw'; put 'B8601TZw'; put 'E8601DAw'; put 'E8601DNw'; put 'E8601DTw'; put 'E8601DZw'; put 'E8601LZw'; put 'E8601TMw'; put 'E8601TZw'; put '*/'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getdynamiccolvals; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; put ',outref=&outref'; put ')'; put '%mend dc_getservicecode;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_include(fileref'; put ',prefix=_'; put ',opts=SOURCE2'; put ',errds=work.mp_abort_errds'; put ')/*/STORE SOURCE*/;'; put '/* prepare precode */'; put '%local tempref;'; put '%let tempref=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &tempref;'; put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));'; put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';'; put 'name=scan(xpath,-1,''/\'');'; put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';'; put 'path=subpad(xpath,1,length(xpath)-length(name)-1);'; put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';'; put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";'; put 'run;'; put '/* prepare the errds */'; put 'data &errds;'; put 'length msg mac $1000;'; put 'call missing(msg,mac);'; put 'iftrue=''1=0'';'; put 'run;'; put '/* include the include */'; put '%inc &tempref &fileref/&opts;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)'; put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)'; put ')'; put 'filename &tempref clear;'; put '%mend mp_include;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mp_validatecol(incol,rule,outcol);'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename();'; put '%if &rule=ISINT %then %do;'; put '&outcol=0;'; put 'if not missing(&incol) then do;'; put '&tempcol=input(&incol,?? best32.);'; put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;'; put 'end;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=ISNUM %then %do;'; put '/*'; put 'credit SOREN LASSEN'; put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html'; put '*/'; put '&tempcol=input(&incol,?? best32.);'; put 'if missing(&tempcol) then &outcol=0;'; put 'else &outcol=1;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=LIBDS %then %do;'; put '/* match libref.dataset */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%else %if &rule=FORMAT %then %do;'; put '/* match valid format - regex could probably be improved */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%mend mp_validatecol;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getdynamiccolvals.sas'; put '@brief Provide dynamic list of values according to a SAS program or service'; put '@details Configuration is made in the MPE_VALIDATIONS table, the dropdown'; put 'can be either a SOFTSELECT_HOOK or HARDSELECT_HOOK.'; put 'Results are sent in ARRAY format for efficiency.'; put '

Service Inputs

'; put '
SASCONTROLTABLE
'; put '|LIBDS:$41.|VARIABLE_NM:$32.|'; put '|---|---|'; put '|DC258467.MPE_SECURITY|SAS_GROUP|'; put '
SOURCE_ROW
'; put 'This contains the raw values from the source table.'; put '

Service Outputs

'; put '
DYNAMIC_VALUES
'; put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not'; put 'provided, it is added automatically.'; put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5||'; put '|1|DISCOUNT_RT|"40%"|N|0.4||'; put '|1|DISCOUNT_RT|"30%"|N|0.3||'; put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|'; put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|'; put '|2|DISCOUNT_RT|"50%"|N|0.5||'; put '|2|DISCOUNT_RT|"40%"|N|0.4||'; put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|'; put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li dc_getservicecode.sas'; put '@li mf_nobs.sas'; put '@li mp_abort.sas'; put '@li mp_include.sas'; put '@li mp_validatecol.sas'; put '@li mf_getapploc.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '/**'; put '* Validate inputs'; put '*/'; put '%let err_msg=;'; put 'data work.intest;'; put 'set work.SASCONTROLTABLE;'; put '/* validate libds */'; put '%mp_validatecol(LIBDS,LIBDS,is_libds)'; put '/* validate varname */'; put 'is_name=nvalid(variable_nm,''v7'');'; put 'putlog (_all_)(=);'; put 'if is_libds ne 1 then do;'; put 'msg=''ERR''!!''OR: Invalid libds:''!!libds;'; put 'call symputx(''err_msg'',msg);'; put 'stop;'; put 'end;'; put 'else if is_name ne 1 then do;'; put 'msg=''ERR''!!''OR: Invalid name:''!!variable_nm;'; put 'call symputx(''err_msg'',msg);'; put 'stop;'; put 'end;'; put 'else do;'; put 'call symputx(''variable_nm'',variable_nm);'; put 'call symputx(''libds'',libds);'; put 'end;'; put 'output;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc after reading work.sascontroltable)'; put ')'; put '%mp_abort(iftrue= (%mf_nobs(work.intest)=0)'; put ',mac=&_program'; put ',msg=%str(&err_msg)'; put ')'; put '%dc_assignlib(READ,%scan(&libds,1,.))'; put '/* ensure that work.dynamic_extended_values exists */'; put 'data work.dynamic_extended_values;'; put 'run;'; put '/**'; put '* Get the code to execute'; put '*/'; put 'data work.codetest;'; put 'set &mpelib..MPE_VALIDATIONS;'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and base_lib="%scan(&libds,1,.)"'; put 'and base_ds="%scan(&libds,2,.)"'; put 'and base_col="&variable_nm"'; put 'and RULE_TYPE in (''HARDSELECT_HOOK'',''SOFTSELECT_HOOK'')'; put 'and RULE_ACTIVE=1;'; put 'putlog (_all_)(=);'; put 'if length(rule_value)>1 then do;'; put 'call symputx(''pgmloc'',rule_value);'; put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;'; put 'call symputx(''pgmtype'',''PGM'');'; put 'call symputx(''pgmloc'',rule_value);'; put 'end;'; put 'else do;'; put 'apploc="%mf_getapploc()";'; put 'if substr(rule_value,1,1) ne ''/'''; put 'then rule_value=cats(apploc,''/'',rule_value);'; put 'call symputx(''pgmloc'',rule_value);'; put 'call symputx(''pgmtype'',''JOB'');'; put 'end;'; put 'output;'; put 'stop;'; put 'end;'; put 'else stop;'; put 'run;'; put '%mp_abort(iftrue= (%mf_nobs(work.codetest)=0)'; put ',mac=&_program'; put ',msg=%str(Hook not found in &mpelib..mpe_validations for &libds..&variable_nm)'; put ')'; put '%macro getdynamiccolvals();'; put '%if &pgmtype=PGM %then %do;'; put 'filename sascode "&pgmloc";'; put '%end;'; put '%else %do;'; put '%dc_getservicecode(loc=&pgmloc'; put ',outref=sascode'; put ')'; put '%end;'; put '%mend getdynamiccolvals;'; put '%getdynamiccolvals()'; put '/* execute the dynamic code */'; put '%mp_include(sascode)'; put '%mp_abort(mode=INCLUDE)'; put '/* ensure that the DISPLAY_INDEX variable exists */'; put 'data work.dynamic_values;'; put 'length DISPLAY_INDEX 8 DISPLAY_VALUE $32767;'; put 'if _n_=1 then call missing(of _all_);'; put 'set work.dynamic_values;'; put 'display_index=coalesce(display_index,_n_);'; put 'keep DISPLAY_INDEX DISPLAY_VALUE RAW_VALUE;'; put 'run;'; put '/* ensure that work.dynamic_extended_values exists with correct types */'; put 'data work.dynamic_extended_values;'; put 'length DISPLAY_INDEX 8 EXTRA_COL_NAME $32 DISPLAY_VALUE $5000 DISPLAY_TYPE $1'; put 'RAW_VALUE_NUM 8 RAW_VALUE_CHAR $5000 FORCED_VALUE 8;'; put 'if _n_=1 then call missing(of _all_);'; put 'set work.dynamic_extended_values;'; put 'run;'; put '%webout(OPEN)'; put '%webout(ARR,dynamic_values,fmt=N)'; put '%webout(ARR,dynamic_extended_values,fmt=N)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getlog; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_dirlist(path=%sysfunc(pathname(work))'; put ', fref=0'; put ', outds=work.mp_dirlist'; put ', getattrs=NO'; put ', showparent=NO'; put ', maxdepth=0'; put ', level=0 /* The level of recursion to perform. For internal use only. */'; put ')/*/STORE SOURCE*/;'; put '%let getattrs=%upcase(&getattrs)XX;'; put '/* temp table */'; put '%local out_ds;'; put 'data;run;'; put '%let out_ds=%str(&syslast);'; put '/* drop main (top) table if it exists */'; put '%if &level=0 %then %do;'; put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)'; put '%end;'; put 'data &out_ds(compress=no'; put 'keep=file_or_folder filepath filename ext msg directory level'; put ');'; put 'length directory filepath $2000 fref fref2 $8 file_or_folder $6 filename $255'; put 'ext $20 msg $200 foption $16;'; put 'if _n_=1 then call missing(of _all_);'; put 'retain level &level;'; put '%if &fref=0 %then %do;'; put 'rc = filename(fref, "&path");'; put '%end;'; put '%else %do;'; put 'fref="&fref";'; put 'rc=0;'; put '%end;'; put 'if rc = 0 then do;'; put 'did = dopen(fref);'; put 'if did=0 then do;'; put 'putlog "NOTE: This directory is empty, or does not exist - &path";'; put 'msg=sysmsg();'; put 'put (_all_)(=);'; put 'stop;'; put 'end;'; put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */'; put 'numopts=doptnum(did);'; put 'do i=1 to numopts;'; put 'foption=doptname(did,i);'; put 'if foption=:''Directory'' then i=numopts;'; put 'end;'; put 'directory=dinfo(did,foption);'; put 'rc = filename(fref);'; put 'end;'; put 'else do;'; put 'msg=sysmsg();'; put 'put _all_;'; put 'stop;'; put 'end;'; put 'dnum = dnum(did);'; put 'do i = 1 to dnum;'; put 'filename = dread(did, i);'; put 'filepath=cats(directory,''/'',filename);'; put 'rc = filename(fref2,filepath);'; put 'midd=dopen(fref2);'; put 'dmsg=sysmsg();'; put 'if did > 0 then file_or_folder=''folder'';'; put 'rc=dclose(midd);'; put 'midf=fopen(fref2);'; put 'fmsg=sysmsg();'; put 'if midf > 0 then file_or_folder=''file'';'; put 'rc=fclose(midf);'; put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')'; put 'then file_or_folder=''file'';'; put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';'; put 'else if file_or_folder='''' then file_or_folder=''locked'';'; put 'if file_or_folder=''file'' then do;'; put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);'; put 'if filename = ext then ext = '' '';'; put 'end;'; put 'else do;'; put 'ext='''';'; put 'file_or_folder=''folder'';'; put 'end;'; put 'output;'; put 'end;'; put 'rc = dclose(did);'; put '%if &showparent=YES and &level=0 %then %do;'; put 'filepath=directory;'; put 'file_or_folder=''folder'';'; put 'ext='''';'; put 'filename=scan(directory,-1,''/\'');'; put 'msg='''';'; put 'level=&level;'; put 'output;'; put '%end;'; put 'stop;'; put 'run;'; put '%if %substr(&getattrs,1,1)=Y %then %do;'; put 'data &out_ds;'; put 'set &out_ds;'; put 'length infoname infoval $60 fref $8;'; put 'if _n_=1 then call missing(fref);'; put 'rc=filename(fref,filepath);'; put 'drop rc infoname fid i close fref;'; put 'if file_or_folder=''file'' then do;'; put 'fid=fopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open file:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to foptnum(fid);'; put 'infoname=foptname(fid,i);'; put 'infoval=finfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=fclose(fid);'; put 'end;'; put 'else do;'; put 'fid=dopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open folder:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to doptnum(fid);'; put 'infoname=doptname(fid,i);'; put 'infoval=dinfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=dclose(fid);'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by filepath sasname;'; put 'proc transpose data=&out_ds out=&out_ds(drop=_:);'; put 'id sasname;'; put 'var infoval;'; put 'by filepath file_or_folder filename ext ;'; put 'run;'; put '%end;'; put 'data &out_ds;'; put 'set &out_ds(where=(filepath ne ''''));'; put 'run;'; put '/**'; put '* The above transpose can mean that some updates create additional columns.'; put '* This necessitates the occasional use of datastep over proc append.'; put '*/'; put '%if %mf_existds(&outds) %then %do;'; put '%local basevars appvars newvars;'; put '%let basevars=%mf_getvarlist(&outds);'; put '%let appvars=%mf_getvarlist(&out_ds);'; put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));'; put '%if &newvars>0 %then %do;'; put 'data &outds;'; put 'set &outds &out_ds;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds force nowarn;'; put 'run;'; put '%end;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds;'; put 'run;'; put '%end;'; put '/* recursive call */'; put '%if &maxdepth>&level or &maxdepth=MAX %then %do;'; put 'data _null_;'; put 'set &out_ds;'; put 'where file_or_folder=''folder'';'; put '%if &showparent=YES and &level=0 %then %do;'; put 'if filepath ne directory;'; put '%end;'; put 'length code $10000;'; put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"'; put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");'; put 'put code=;'; put 'call execute(code);'; put 'run;'; put '%end;'; put '/* tidy up */'; put 'proc sql;'; put 'drop table &out_ds;'; put '%mend mp_dirlist;'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mfs_httpheader(header_name'; put ',header_value'; put ')/*/STORE SOURCE*/;'; put '%global sasjs_stpsrv_header_loc;'; put '%local fref fid i;'; put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;'; put '%put &=fref &=sasjs_stpsrv_header_loc;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%mend mfs_httpheader;'; put '%macro mp_streamfile('; put 'contenttype=TEXT'; put ',inloc='; put ',inref=0'; put ',iftrue=%str(1=1)'; put ',outname='; put ',outref=_webout'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let contentype=%upcase(&contenttype);'; put '%let outref=%upcase(&outref);'; put '%local platform; %let platform=%mf_getplatform();'; put '/**'; put '* check engine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put '%local streamweb;'; put '%let streamweb=0;'; put 'data _null_;'; put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));'; put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');'; put 'run;'; put '%if &contentype=CSV %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/csv'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/csv'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/csv)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=EXCEL %then %do;'; put '/* suitable for XLS format */'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype=''application/vnd.ms-excel'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="image/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"'; put 'contenttype="text/%lowcase(&contenttype)"'; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=TEXT %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/text'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/text'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/text)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="font/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=XLSX %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'','; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype='; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type'; put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; put ')'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=ZIP %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/zip'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip'''; put 'contenttype=''application/zip'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/zip)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;'; put '%end;'; put '%if &inref ne 0 %then %do;'; put '%mp_binarycopy(inref=&inref,outref=&outref)'; put '%end;'; put '%else %do;'; put '%mp_binarycopy(inloc="&inloc",outref=&outref)'; put '%end;'; put '%mend mp_streamfile;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getlog.sas'; put '@brief Downloads the submission, useful if there is an error'; put '@details'; put '

SAS Macros

'; put '@li mf_verifymacvars.sas'; put '@li mf_getuser.sas'; put '@li mp_abort.sas'; put '@li mp_dirlist.sas'; put '@li mp_binarycopy.sas'; put '@li mp_streamfile.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(table)=0)'; put ',mac=&_program'; put ',msg=%str(Missing: table)'; put ')'; put '/* security checks */'; put '%let user=%mf_getuser();'; put '%let check_access=0;'; put 'proc sql noprint;'; put 'select count(*) into: check_access from &mpelib..mpe_loads'; put 'where csv_dir="&table" and user_nm="&user";'; put '%mp_abort(iftrue= (&check_access=0 )'; put ',msg=%str(&user not authorised to download audit data for &table)'; put ',mac=mpestp_getlog.sas'; put ')'; put 'ods package(ProdOutput) open nopf;'; put 'options notes source2 mprint;'; put '%mp_dirlist(outds=dirs, path=&mpelocapprovals/&TABLE)'; put 'data _null_;'; put 'set dirs;'; put 'if scan(filename,-1,''.'') not in (''sas7bdat'',''wpd'');'; put 'retain str1'; put '"ods package(ProdOutput) add file=''&mpelocapprovals/&TABLE/";'; put 'retain str2 "'' mimetype=''text/plain'' path=''contents/'';";'; put 'call execute(cats(str1,filename,str2));'; put 'run;'; put '%let archive_path=%sysfunc(pathname(work));'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put 'ods package(ProdOutput) publish archive properties'; put '(archive_name= "&table..zip" archive_path="&archive_path");'; put 'ods package(ProdOutput) close;'; put '/* now serve zip file to client */'; put '%mp_streamfile(contenttype=ZIP'; put ',inloc=%str(&archive_path/&table..zip)'; put ',outname=&table..zip'; put ')'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getsubmits; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getsubmits.sas'; put '@brief Returns a list of staged data items that need to be approved'; put '@details'; put '

SAS Macros

'; put '@li mp_abort.sas'; put '@li mf_getuser.sas'; put '@li mpeinit.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put 'PROC FORMAT;'; put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put 'proc sql noprint;'; put 'create table work.fromsas (rename=(SUBMITTED_ON=SUBMITTED_ON_DTTM)) as'; put 'select table_id'; put ',cats(base_lib,''.'',base_ds) as base_table'; put ',input_vars'; put ',input_obs'; put ',submitted_by_nm'; put ',submitted_reason_txt'; put ',''DEPRECATED'' as approve_group'; put ',submit_status_cd as review_status_id'; put ',reviewed_by_nm'; put ',reviewed_on_dttm'; put ',cats(put(SUBMITTED_ON_DTTM,yymmddhhmmss.)) as SUBMITTED_ON'; put 'from &mpelib..mpe_submit'; put 'where submitted_by_nm="%mf_getuser()" and submit_status_cd=''SUBMITTED'''; put 'order by submitted_on_dttm desc;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,fromSAS,missing=STRING)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getxlmaps; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getxlmaps.sas'; put '@brief Returns a list of rules and other info for a specific xlmap_id'; put '

Service Inputs

'; put '
getxlmaps_in
'; put '|XLMAP_ID|'; put '|---|'; put '|Sample|'; put '

Service Outputs

'; put '
xlmaprules
'; put 'Filtered output of the dc.MPE_XLMAP_RULES table'; put '|XLMAP_ID|XLMAP_RANGE_ID|XLMAP_SHEET|XLMAP_START|XLMAP_FINISH|'; put '|---|---|---|---|---|'; put '|Sample|Range1|Sheet1|ABSOLUTE A1| |'; put '|Sample|Range2|Sheet1|RELATIVE R[2]C[2]|ABSOLUTE H11|'; put '
xlmapinfo
'; put 'Extra info for a map id'; put '|TARGET_DS|'; put '|---|'; put '|DCXXX.MPE_XLMAP_DATA|'; put '

SAS Macros

'; put '@li mp_abort.sas'; put '@li mpeinit.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put 'data _null_;'; put 'set work.getxlmaps_in;'; put 'putlog (_all_)(=);'; put 'call symputx(''xlmap_id'',xlmap_id);'; put 'run;'; put 'proc sql noprint;'; put 'create table work.xlmaprules as'; put 'select xlmap_id'; put ',XLMAP_RANGE_ID'; put ',XLMAP_SHEET'; put ',XLMAP_START'; put ',XLMAP_FINISH'; put 'from &mpelib..MPE_XLMAP_RULES'; put 'where &dc_dttmtfmt. lt tx_to and xlmap_id="&xlmap_id"'; put 'order by xlmap_sheet, xlmap_range_id;'; put '%global target_ds;'; put 'select XLMAP_TARGETLIBDS into: target_ds'; put 'from &mpelib..MPE_XLMAP_INFO'; put 'where &dc_dttmtfmt. lt tx_to and xlmap_id="&xlmap_id";'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put 'data work.xlmapinfo;'; put 'target_ds=coalescec("&target_ds","&mpelib..MPE_XLMAP_DATA");'; put 'output;'; put 'stop;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,xlmaprules)'; put '%webout(OBJ,xlmapinfo)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=loadfile; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mpe_alerts(alert_event='; put ', alert_lib='; put ', alert_ds='; put ', dsid='; put ');'; put '/* exit if not configured */'; put '%global DC_EMAIL_ALERTS;'; put '%if &DC_EMAIL_ALERTS ne YES %then %do;'; put '%put DCNOTE: Email alerts are not configured;'; put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);'; put '%return;'; put '%end;'; put '%let alert_event=%upcase(&alert_event);'; put '%let alert_lib=%upcase(&alert_lib);'; put '%let alert_ds=%upcase(&alert_ds);'; put '%let from_user=%mf_getuser();'; put '/* get users TO which the email should be sent */'; put 'proc sql noprint;'; put 'create table work.users as select distinct a.alert_user,'; put 'b.user_displayname,'; put 'b.user_email'; put 'from &mpelib..mpe_alerts'; put '(where=(&dc_dttmtfmt. lt tx_to)) a'; put 'left join &mpelib..mpe_emails'; put '(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))'; put 'where a.alert_event in ("&alert_event","*ALL*")'; put 'and a.alert_lib in ("&alert_lib","*ALL*")'; put 'and a.alert_ds in ("&alert_ds","*ALL*");'; put '/* ensure the submitter is included on the email */'; put '%local isThere userdisp user_eml;'; put '%let isThere=0;'; put 'select count(*) into: isThere from &syslast where alert_user="&from_user";'; put '%if &isThere=0 %then %do;'; put 'select user_displayname, user_email'; put 'into: userdisp trimmed, :user_eml trimmed'; put 'from &mpelib..mpe_emails'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and user_name="&from_user";'; put 'insert into work.users'; put 'set alert_user="&from_user"'; put ',user_displayname="&userdisp"'; put ',user_email="&user_eml";'; put '%end;'; put '/* if no email / displayname is provided, then extract from metadata */'; put 'data work.emails;'; put 'set work.users;'; put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;'; put '/* get displayname */'; put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");'; put 'if metadata_getnobj(text,1,uri)<=0 then do;'; put 'putlog "DCWARN: &from_user not found";'; put 'return;'; put 'end;'; put 'else if user_displayname = '''' then do;'; put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;'; put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';'; put 'end;'; put 'end;'; put 'if index(user_email,''@'') then return;'; put '/* get email from metadata if not in input table */'; put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;'; put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";'; put 'end;'; put 'else do;'; put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;'; put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';'; put 'end;'; put 'end;'; put '/* only keep valid emails */'; put 'if index(user_email,''@'') ;'; put '/* dump contents for debugging */'; put 'if _n_<21 then putlog (_all_)(=);'; put 'run;'; put '%local emails;'; put 'proc sql noprint;'; put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;'; put '/* exit if nobody to email */'; put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;'; put '%put NOTE: No alerts configured (mpe_alerts.sas);'; put '%return;'; put '%end;'; put '/* display email options */'; put 'data _null_;'; put 'set sashelp.voption(where=(group=''EMAIL''));'; put 'put optname ''='' setting;'; put 'run;'; put 'filename __out email (&emails)'; put 'subject="Table &alert_lib..&alert_ds has been &alert_event";'; put '%local SUBMITTED_TXT;'; put '%if &alert_event=SUBMITTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_submit;'; put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';'; put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been proposed by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''SUBMITTED_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=APPROVED %then %do;'; put '/* there is no approval message */'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been approved by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=REJECTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_review;'; put 'where table_id="&dsid" and review_status_id=''REJECTED'';'; put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been rejected by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''REVIEW_REASON_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put 'filename __out clear;'; put '%mend mpe_alerts ;'; put '%macro mpe_xlmapvalidate(mperef,inds,dclib,tgtds);'; put '%local ismap;'; put 'proc sql noprint;'; put 'select count(*) into: ismap'; put 'from &dclib..mpe_xlmap_info'; put 'where XLMAP_TARGETLIBDS="&tgtds" and &dc_dttmtfmt. le TX_TO ;'; put '%if "&tgtds"="&dclib..MPE_XLMAP_DATA" or &ismap>0 %then %do;'; put 'data &inds;'; put 'set &inds;'; put 'LOAD_REF="&mperef";'; put 'run;'; put '%end;'; put '%mend mpe_xlmapvalidate;'; put '%macro mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=%sysfunc(datetime())'; put ',approvals='; put ',mperef='; put ',reason_txt='; put ',mac=mpe_loadfail.sas'; put ',dc_dttmtfmt=E8601DT26.6'; put ');'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'update &mpelib..mpe_loads'; put 'set STATUS=symget(''status'')'; put ', duration=&dur'; put ', processed_dttm=&dc_dttmtfmt.'; put ', approvals = symget(''approvals'')'; put ', reason_txt= symget(''reason_txt'')'; put 'where CSV_DIR="&mperef";'; put '%let syscc=666;'; put '%mp_abort(msg=%superq(status)\n%superq(reason_txt),mac=&mac)'; put '%mend mpe_loadfail;'; put '%macro dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; put ',outref=&outref'; put ')'; put '%mend dc_getservicecode;'; put '%macro mp_include(fileref'; put ',prefix=_'; put ',opts=SOURCE2'; put ',errds=work.mp_abort_errds'; put ')/*/STORE SOURCE*/;'; put '/* prepare precode */'; put '%local tempref;'; put '%let tempref=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &tempref;'; put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));'; put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';'; put 'name=scan(xpath,-1,''/\'');'; put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';'; put 'path=subpad(xpath,1,length(xpath)-length(name)-1);'; put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';'; put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";'; put 'run;'; put '/* prepare the errds */'; put 'data &errds;'; put 'length msg mac $1000;'; put 'call missing(msg,mac);'; put 'iftrue=''1=0'';'; put 'run;'; put '/* include the include */'; put '%inc &tempref &fileref/&opts;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)'; put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)'; put ')'; put 'filename &tempref clear;'; put '%mend mp_include;'; put '%macro mpe_runhook(hookvar);'; put '%local pgmloc pgmtype;'; put '%let pgmtype=0;'; put '%put &sysmacroname: &=hookvar;'; put '%if %length(&&&hookvar)>0 %then %do;'; put '%put &sysmacroname: Executing &&&hookvar;'; put 'data _null_;'; put 'rule_value=symget("&hookvar");'; put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;'; put 'call symputx(''pgmtype'',''PGM'');'; put 'call symputx(''pgmloc'',rule_value);'; put 'end;'; put 'else do;'; put 'apploc="%mf_getapploc()";'; put 'if substr(rule_value,1,1) ne ''/'''; put 'then rule_value=cats(apploc,''/'',rule_value);'; put 'call symputx(''pgmloc'',rule_value);'; put 'call symputx(''pgmtype'',''JOB'');'; put 'end;'; put 'run;'; put '%if &pgmtype=PGM %then %do;'; put 'filename sascode "&pgmloc";'; put '%end;'; put '%else %do;'; put '%dc_getservicecode(loc=&pgmloc'; put ',outref=sascode'; put ')'; put '%end;'; put '/* the below script will need to modify work.STAGING_DS */'; put '%local x; %let x=; /* legacy feature */'; put '%mp_include(sascode)'; put '%end;'; put '%mend mpe_runhook;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_mkdir(dir'; put ')/*/STORE SOURCE*/;'; put '%local lastchar child parent;'; put '%let lastchar = %substr(&dir, %length(&dir));'; put '%if (%bquote(&lastchar) eq %str(:)) %then %do;'; put '/* Cannot create drive mappings */'; put '%return;'; put '%end;'; put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;'; put '/* last char is a slash */'; put '%if (%length(&dir) eq 1) %then %do;'; put '/* one single slash - root location is assumed to exist */'; put '%return;'; put '%end;'; put '%else %do;'; put '/* strip last slash */'; put '%let dir = %substr(&dir, 1, %length(&dir)-1);'; put '%end;'; put '%end;'; put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;'; put '/* directory does not exist so prepare to create */'; put '/* first get the childmost directory */'; put '%let child = %scan(&dir, -1, %str(/\:));'; put '/*'; put 'If child name = path name then there are no parents to create. Else'; put 'they must be recursively scanned.'; put '*/'; put '%if (%length(&dir) gt %length(&child)) %then %do;'; put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));'; put '%mf_mkdir(&parent)'; put '%end;'; put '/*'; put 'Now create the directory. Complain loudly of any errs.'; put '*/'; put '%let dname = %sysfunc(dcreate(&child, &parent));'; put '%if (%bquote(&dname) eq ) %then %do;'; put '%put %str(ERR)OR: could not create &parent + &child;'; put '%abort cancel;'; put '%end;'; put '%else %do;'; put '%put Directory created: &dir;'; put '%end;'; put '%end;'; put '/* exit quietly if directory did exist.*/'; put '%mend mf_mkdir;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_dirlist(path=%sysfunc(pathname(work))'; put ', fref=0'; put ', outds=work.mp_dirlist'; put ', getattrs=NO'; put ', showparent=NO'; put ', maxdepth=0'; put ', level=0 /* The level of recursion to perform. For internal use only. */'; put ')/*/STORE SOURCE*/;'; put '%let getattrs=%upcase(&getattrs)XX;'; put '/* temp table */'; put '%local out_ds;'; put 'data;run;'; put '%let out_ds=%str(&syslast);'; put '/* drop main (top) table if it exists */'; put '%if &level=0 %then %do;'; put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)'; put '%end;'; put 'data &out_ds(compress=no'; put 'keep=file_or_folder filepath filename ext msg directory level'; put ');'; put 'length directory filepath $2000 fref fref2 $8 file_or_folder $6 filename $255'; put 'ext $20 msg $200 foption $16;'; put 'if _n_=1 then call missing(of _all_);'; put 'retain level &level;'; put '%if &fref=0 %then %do;'; put 'rc = filename(fref, "&path");'; put '%end;'; put '%else %do;'; put 'fref="&fref";'; put 'rc=0;'; put '%end;'; put 'if rc = 0 then do;'; put 'did = dopen(fref);'; put 'if did=0 then do;'; put 'putlog "NOTE: This directory is empty, or does not exist - &path";'; put 'msg=sysmsg();'; put 'put (_all_)(=);'; put 'stop;'; put 'end;'; put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */'; put 'numopts=doptnum(did);'; put 'do i=1 to numopts;'; put 'foption=doptname(did,i);'; put 'if foption=:''Directory'' then i=numopts;'; put 'end;'; put 'directory=dinfo(did,foption);'; put 'rc = filename(fref);'; put 'end;'; put 'else do;'; put 'msg=sysmsg();'; put 'put _all_;'; put 'stop;'; put 'end;'; put 'dnum = dnum(did);'; put 'do i = 1 to dnum;'; put 'filename = dread(did, i);'; put 'filepath=cats(directory,''/'',filename);'; put 'rc = filename(fref2,filepath);'; put 'midd=dopen(fref2);'; put 'dmsg=sysmsg();'; put 'if did > 0 then file_or_folder=''folder'';'; put 'rc=dclose(midd);'; put 'midf=fopen(fref2);'; put 'fmsg=sysmsg();'; put 'if midf > 0 then file_or_folder=''file'';'; put 'rc=fclose(midf);'; put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')'; put 'then file_or_folder=''file'';'; put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';'; put 'else if file_or_folder='''' then file_or_folder=''locked'';'; put 'if file_or_folder=''file'' then do;'; put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);'; put 'if filename = ext then ext = '' '';'; put 'end;'; put 'else do;'; put 'ext='''';'; put 'file_or_folder=''folder'';'; put 'end;'; put 'output;'; put 'end;'; put 'rc = dclose(did);'; put '%if &showparent=YES and &level=0 %then %do;'; put 'filepath=directory;'; put 'file_or_folder=''folder'';'; put 'ext='''';'; put 'filename=scan(directory,-1,''/\'');'; put 'msg='''';'; put 'level=&level;'; put 'output;'; put '%end;'; put 'stop;'; put 'run;'; put '%if %substr(&getattrs,1,1)=Y %then %do;'; put 'data &out_ds;'; put 'set &out_ds;'; put 'length infoname infoval $60 fref $8;'; put 'if _n_=1 then call missing(fref);'; put 'rc=filename(fref,filepath);'; put 'drop rc infoname fid i close fref;'; put 'if file_or_folder=''file'' then do;'; put 'fid=fopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open file:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to foptnum(fid);'; put 'infoname=foptname(fid,i);'; put 'infoval=finfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=fclose(fid);'; put 'end;'; put 'else do;'; put 'fid=dopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open folder:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to doptnum(fid);'; put 'infoname=doptname(fid,i);'; put 'infoval=dinfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=dclose(fid);'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by filepath sasname;'; put 'proc transpose data=&out_ds out=&out_ds(drop=_:);'; put 'id sasname;'; put 'var infoval;'; put 'by filepath file_or_folder filename ext ;'; put 'run;'; put '%end;'; put 'data &out_ds;'; put 'set &out_ds(where=(filepath ne ''''));'; put 'run;'; put '/**'; put '* The above transpose can mean that some updates create additional columns.'; put '* This necessitates the occasional use of datastep over proc append.'; put '*/'; put '%if %mf_existds(&outds) %then %do;'; put '%local basevars appvars newvars;'; put '%let basevars=%mf_getvarlist(&outds);'; put '%let appvars=%mf_getvarlist(&out_ds);'; put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));'; put '%if &newvars>0 %then %do;'; put 'data &outds;'; put 'set &outds &out_ds;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds force nowarn;'; put 'run;'; put '%end;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds;'; put 'run;'; put '%end;'; put '/* recursive call */'; put '%if &maxdepth>&level or &maxdepth=MAX %then %do;'; put 'data _null_;'; put 'set &out_ds;'; put 'where file_or_folder=''folder'';'; put '%if &showparent=YES and &level=0 %then %do;'; put 'if filepath ne directory;'; put '%end;'; put 'length code $10000;'; put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"'; put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");'; put 'put code=;'; put 'call execute(code);'; put 'run;'; put '%end;'; put '/* tidy up */'; put 'proc sql;'; put 'drop table &out_ds;'; put '%mend mp_dirlist;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro mpe_loader('; put 'mperef= /* name of subfolder containing the staged data */'; put ',mDebug=0 /* set to 1 for development or debugging */'; put ',submitted_reason_txt= /* populates column of same name in sumo_approvals*/'; put ',approver= /* allows a userid to be provided for direct approval email */'; put ',url= /* optional - url for debugging */'; put ',dlm=%str(,)'; put ',termstr=crlf'; put ',dc_dttmtfmt=E8601DT26.6'; put ');'; put '%put entered mpe_loader from &=_program;'; put '%put &=url;'; put '%put &=termstr;'; put '%put &=dlm;'; put '/* determine full path to CSV directory */'; put '%local now;'; put '%let now=&dc_dttmtfmt;'; put '%put &=now;'; put '/**'; put '* get full path to package (only subdirectory passed through)'; put '*/'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(mperef mpelocapprovals)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing: mperef mpelocapprovals)'; put ')'; put '%let csv_dir=%trim(&mpelocapprovals/&mperef);'; put '/* exit if package has already been uploaded */'; put '%local check;'; put 'proc sql noprint;'; put 'select count(*) into: check'; put 'from &mpelib..mpe_loads'; put 'where csv_dir="&mperef";'; put '%if &check %then %do;'; put '%mp_abort(msg=Folder &mperef already has an entry in &mpelib..mpe_loads'; put ',mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '/* get CSV directory contents */'; put '%mp_dirlist(path=&csv_dir,outds=WORK.getfiles)'; put 'data WORK.csvs;'; put 'set WORK.getfiles;'; put 'if upcase(scan(filename,3,''.''))=''CSV'' then do;'; put 'lib=upcase(scan(filename,1,''.''));'; put 'ds=upcase(scan(filename,2,''.''));'; put 'output;'; put 'end;'; put 'run;'; put '/* get table attributes */'; put 'proc sql noprint;'; put 'create table WORK.sumo_tables as'; put 'select a.filename, b.*'; put 'from WORK.csvs a'; put 'left join &mpelib..mpe_tables b'; put 'on a.lib=b.libref'; put 'and a.ds=b.dsn'; put 'where b.tx_from le &now'; put 'and &now lt b.tx_to;'; put '/* define user as meta user if available */'; put '%local user;'; put '%let user=%mf_getuser();'; put '/* check if there is actually a table to load */'; put '%if %mf_getattrn(WORK.sumo_tables,NLOBS)=0 %then %do;'; put '%let msg=Table not registered in &mpelib..mpe_tables;'; put '%mpe_loadfail('; put 'status=&msg'; put ',now=&now'; put ',mperef=&mperef'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%mp_abort(msg=&msg,mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put 'proc sql;'; put 'insert into &mpelib..mpe_loads'; put 'set USER_NM="&user"'; put ',STATUS=''IN PROGRESS'''; put ',CSV_dir="&mperef"'; put ',PROCESSED_DTTM=&now'; put ',reason_txt = symget(''submitted_reason_txt'');'; put '/* import CSV */'; put '%let droplist=;'; put '%let attrib=;'; put '%let droplist=;'; put '%let libref=;'; put '%let DS=;'; put '/* get table info */'; put 'data _null_;'; put 'set sumo_tables;'; put 'libds=upcase(cats(libref,''.'',dsn));'; put 'call symputx(''orig_libds'',libds);'; put 'is_fmt=0;'; put 'if substr(cats(reverse(dsn)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'libds=''work.fmtextract'';'; put 'is_fmt=1;'; put 'end;'; put 'call symputx(''is_fmt'',is_fmt);'; put 'call symputx(''libds'',libds);'; put 'call symputx(''FNAME'',filename);'; put 'call symputx(''LIBREF'',libref);'; put 'call symputx(''DS'',dsn);'; put 'call symputx(''LOADTYPE'',loadtype);'; put 'call symputx(''BUSKEY'',buskey);'; put 'call symputx(''VAR_TXFROM'',var_txfrom);'; put 'call symputx(''VAR_TXTO'',var_txto);'; put 'call symputx(''VAR_BUSFROM'',var_busfrom);'; put 'call symputx(''VAR_BUSTO'',var_busto);'; put 'call symputx(''VAR_PROCESSED'',var_processed);'; put 'call symputx(''RK_UNDERLYING'',RK_UNDERLYING);'; put 'call symputx(''POST_EDIT_HOOK'',POST_EDIT_HOOK);'; put 'call symputx(''NOTES'',NOTES);'; put 'call symputx(''PK'',coalescec(RK_UNDERLYING,buskey));'; put 'call symputx(''NUM_OF_APPROVALS_REQUIRED'',NUM_OF_APPROVALS_REQUIRED,''l'');'; put 'put (_all_)(=);'; put 'stop;'; put 'run;'; put '%if %length(&ds)=0 %then %do;'; put '%let msg=%str(ERR)OR: Unable to extract record from &mpelib..mpe_tables;'; put '%mpe_loadfail('; put 'status=FAILED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%mp_abort(msg=&msg,mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '/* export format catalog */'; put '%mp_cntlout('; put 'iftrue=(&is_fmt=1)'; put ',libcat=&orig_libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '/* user must have EDIT access to load a table */'; put '%mpe_accesscheck(&orig_libds'; put ',outds=work.sumo_access'; put ',user=&user'; put ',access_level=EDIT )'; put '%put exiting accesscheck;'; put '%if %mf_getattrn(work.sumo_access,NLOBS)=0 %then %do;'; put '%let msg=%str(ERR)OR: User is not authorised to edit &orig_libds!;'; put '%mpe_loadfail('; put 'status=UNAUTHORISED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%mp_abort(msg=&msg,mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '%put now importing: "&csv_dir/&fname" termstr=&termstr;'; put '/* get the variables from the CSV */'; put 'data vars_csv1(index=(idxname=(varnum name)) drop=infile);'; put 'infile "&csv_dir/&fname" lrecl=32767 dsd termstr=&termstr encoding=''utf-8'';'; put 'input;'; put 'length infile $32767;'; put 'infile=compress(_infile_,''"'',);'; put 'infile=compress(infile,"''",);'; put 'format name $32.;'; put 'putlog ''received vars: '' infile;'; put 'call symputx(''received_vars'',infile,''l'');'; put 'do varnum=1 to countw(infile,"&dlm");'; put '/* keep writeable chars */'; put 'name=compress(upcase(scan(infile,varnum)),,''kw'');'; put 'if name ne "_____DELETE__THIS__RECORD_____" then output;'; put 'end;'; put 'stop;'; put 'run;'; put '%put received_vars = &received_vars;'; put '%dc_assignlib(WRITE,&libref)'; put '/* get list of variables and their formats */'; put 'proc contents noprint data=&libds'; put 'out=vars(keep=name type length varnum format:);'; put 'run;'; put 'data vars(keep=name type length varnum format);'; put 'set vars(rename=(format=format2 type=type2));'; put 'name=upcase(name);'; put 'format2=upcase(format2);'; put '/* not interested in transaction or processing dates'; put '(append table must be supplied without them) */'; put 'if name not in ("&VAR_TXFROM","&VAR_TXTO","&VAR_PROCESSED"'; put ',"_____DELETE__THIS__RECORD_____");'; put 'if type2 in (2,6) then do;'; put 'length format $49.;'; put 'if format2='''' then format=cats(''$'',length,''.'');'; put 'else format=cats(format2,max(formatl,length),''.'');'; put 'type=''char'';'; put 'end;'; put 'else do;'; put 'if format2='''' then format=cats(length,''.'');'; put 'else if format2=:''DATETIME'' or format2=:''E8601DT'' or format2=:''NLDATM'''; put 'then do;'; put 'format=''DATETIME19.'';'; put 'end;'; put 'else if format2=:''DATE'' or format2=:''DDMMYY'''; put 'or format2=:''MMDDYY'' or format2=:''YYMMDD'''; put 'or format2=:''E8601DA'' or format2=:''B8601DA'''; put 'or format2=:''NLDATE'''; put 'then do;'; put 'format=''DATE9.'';'; put 'end;'; put 'else if format2=''BEST'' & formatl=0 then format=cats(''BEST'',length,''.'');'; put 'else do;'; put 'if formatl=0 then formatl=length;'; put 'format=cats(format2,formatl,''.'',formatd);'; put 'end;'; put 'type=''num'';'; put 'end;'; put 'put (_all_)(=);'; put 'run;'; put '/* build attrib statement */'; put 'data vars_attrib;'; put 'length attrib_statement $32767 type2 $20;'; put 'set vars end=lastobs;'; put 'retain attrib_statement;'; put 'if type=''char'' then type2=''$'';'; put 'str1=catx('' '',name,''length='',cats(type2,length));'; put 'attrib_statement=trim(attrib_statement)!!'' ''!!trim(str1);'; put 'if lastobs then call symputx(''ATTRIB'',attrib_statement,''L'');'; put 'run;'; put '/* build input statement - first get vars in right order'; put 'and join with target formats*/'; put 'proc sql noprint;'; put 'create table vars_csv2 as'; put 'select b.*'; put 'from vars_csv1 a'; put 'left join vars_attrib b'; put 'on a.name=b.name'; put 'order by a.varnum;'; put '/* now build input statement */'; put 'data final_check;'; put 'set vars_csv2 end=lastobs;'; put 'length input_statement $32767 type2 $20 droplist $32767;'; put 'retain input_statement droplist;'; put '/* Build input statement - CATCH EXCEPTIONS HERE!*/'; put 'if name in (''QUOTE_DTTM'') then do;'; put 'name=cats(name,''2'');'; put 'droplist=catx('' '',trim(droplist),name);'; put 'type2=''$20.'';/* converted below */'; put 'end;'; put 'else if type=''char'' then type2=cats(''$CHAR'', length,''.'');'; put 'else if format=''DATE9.'' then type2=''ANYDTDTE.'';'; put 'else if format=''DATETIME19.'' then type2=''ANYDTDTM.'';'; put 'else if format=:''TIME'' then type2=''ANYDTTME.'';'; put 'else if name='''' then do;/* additional vars in input data */'; put 'name=''_____DELETE__THIS__VARIABLE_____'';'; put 'droplist=catx('' '',trim(droplist),''_____DELETE__THIS__VARIABLE_____'');'; put 'type2=''$1.'';'; put 'end;'; put 'else type2=''best32.'';'; put '* else type2=cats(length,''.'');'; put 'input_statement=catx('' '',input_statement,name,'':'',type2);'; put 'if lastobs then do;'; put 'call symputx(''INPUT'', input_statement,''L'');'; put 'if trim(droplist) ne '''' then'; put 'call symputx(''droplist'',"drop "!!droplist!!'';'',''l'');'; put 'end;'; put 'run;'; put '%let mpeloadstop=0;'; put 'data work.STAGING_DS;'; put '&droplist;'; put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767'; put 'firstobs=2 missover termstr=&termstr encoding=''utf-8'';'; put 'attrib _____DELETE__THIS__RECORD_____ length=$3 &attrib ;'; put 'if _n_=1 then call missing (of _all_);'; put 'missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;'; put 'input'; put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____ %then %do;'; put '_____DELETE__THIS__RECORD_____: $3.'; put '%end;'; put '&input;'; put '%if %index(%quote(&attrib.),UNLIKELY_VAR ) %then %do;'; put '/*UNLIKELY_VAR=input(UNLIKELY_VAR2,ANYDTDTM21.);*/'; put '/* SPECIAL LOGIC FOR SPECIAL VARS */'; put '%end;'; put 'if _error_ ne 0 then do;'; put 'putlog _infile_;'; put 'call symputx(''mpeloadstop'',_n_);'; put 'stop;'; put 'end;'; put '/* remove all blank rows */'; put 'if compress(cats(of _all_),''.'')='' '' then delete;'; put 'run;'; put '%if &mpeloadstop>0 %then %do;'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put '%put redirecting log output to capture return message;'; put '%put currentloc=&logloc;'; put 'filename tmp temp;'; put 'proc printto log=tmp;run;'; put 'data _null_;'; put '&droplist;'; put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767 firstobs=2'; put 'missover termstr=&termstr;'; put 'attrib &attrib ;'; put 'input'; put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____'; put '%then %do;'; put '_____DELETE__THIS__RECORD_____: $3.'; put '%end;'; put '&input;'; put 'if _error_ then stop;'; put 'run;'; put '/* get log back */'; put 'proc printto log=&logloc;run;'; put 'data _null_; infile tmp; input; putlog _infile_;run;'; put '/* scan log for invalid data warnings */'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'length msg1 msg2 msg3 msg4 msg5 msg url $32767;'; put 'if index(_infile_,''NOTE: Invalid data for'') then do;'; put 'msg1=_infile_;'; put 'input;'; put 'msg2=_infile_;'; put 'input;'; put 'msg3=_infile_;'; put 'input;'; put 'msg4=_infile_;'; put 'input;'; put 'msg5=_infile_;'; put 'url=symget(''url'');'; put 'msg=catx(''\n'',msg1,msg2,msg3,msg4,msg5,''\n'',url);'; put 'call symputx(''msg'',msg);'; put 'stop;'; put 'end;'; put 'run;'; put '%mpe_loadfail('; put 'status=FAILED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%superq(msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '/* check that the table is unique on PK */'; put 'proc sort data=work.STAGING_DS dupout=work.MPE_DUPS (keep=&pk) nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.MPE_DUPS,NLOBS)>0 %then %do;'; put '%local duplist;'; put 'data _null_;'; put 'set work.mpe_dups;'; put '%do i=1 %to %sysfunc(countw(&pk));'; put '%let iWord=%scan(&pk,&i);'; put 'call symputx(''duplist'',symget(''duplist'')!!'; put '" &iWord="!!cats(&iWord));'; put '%end;'; put 'run;'; put '%let msg=This upload contains duplicates on the Primary Key columns %trim('; put ')(&pk) \n Please remove the duplicates and try again. %trim('; put ')\n &duplist \n ;'; put '%mp_abort(msg=%superq(msg),mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '%if &syscc gt 4 %then %do;'; put '%let msg=SYSCC=&syscc prior to post edit hook (%superq(syserrortext));'; put '%mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%superq(msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '/* If a Complex Excel Upload, needs to have the load ref added to the table */'; put '%mpe_xlmapvalidate(&mperef,work.staging_ds,&mpelib,&orig_libds)'; put '/* Run the Post Edit Hook prior to creation of staging folder */'; put '%mpe_runhook(POST_EDIT_HOOK)'; put '/* stop if err */'; put '%if &syscc gt 4 %then %do;'; put '%let msg=ERR in post edit hook (&post_edit_hook);'; put '%mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '/**'; put '* send to approve process'; put '*/'; put '/* create a dataset key (datetime plus 3 digit random number plus PID) */'; put '/* send dataset to approvals subfolder with same name as subfolder */'; put 'libname approval "&mpelocapprovals/&mperef";'; put 'data approval.&mperef;'; put 'set work.staging_ds;'; put 'run;'; put 'proc export data=approval.&mperef'; put 'outfile="&mpelocapprovals/&mperef/&mperef..csv"'; put 'dbms=csv'; put 'replace;'; put 'run;'; put '/* update the control dataset with relevant info */'; put 'data append_app;'; put 'if 0 then set &mpelib..mpe_submit;/* get formats */'; put 'call missing (of _all_);'; put 'TABLE_ID="&mperef";'; put 'submit_status_cd=''SUBMITTED'';'; put 'submitted_by_nm="%mf_getuser()";'; put 'base_lib="&libref";'; put 'base_ds="&ds";'; put 'submitted_on_dttm=&now;'; put 'submitted_reason_txt=symget(''submitted_reason_txt'');'; put 'input_vars=%mf_getattrn(approval.&mperef,NVARS);'; put 'input_obs=%mf_getattrn(approval.&mperef,NLOBS);'; put 'num_of_approvals_required=&NUM_OF_APPROVALS_REQUIRED;'; put 'num_of_approvals_remaining=&NUM_OF_APPROVALS_REQUIRED;'; put 'reviewed_by_nm='''';'; put 'reviewed_on_dttm=.;'; put 'run;'; put '%mp_lockanytable(LOCK,lib=&mpelib,ds=mpe_submit,'; put 'ref=%str(&mperef update in &_program),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc append base= &mpelib..mpe_submit data=append_app;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_submit,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '/* send email to REVIEW members */'; put '%put sending mpe_alerts;'; put '%mpe_alerts(alert_event=SUBMITTED'; put ', alert_lib=&libref'; put ', alert_ds=&ds'; put ', dsid=&mperef'; put ')'; put '/* DISABLE EMAIL FOR NOW'; put '%let b2=REASON: %quote(&submitted_reason_txt);'; put '%local URLNOTES;'; put '%if %length(¬es)>0 %then %let URLNOTES=%quote(%sysfunc(urlencode(¬es)));'; put '%let b3=%str(Click to review / approve: )%trim('; put ')%str(http://&_srvname:&_srvport&_url?_PROGRAM=/Web/approvals&)%trim('; put ')TABLEID=&dsid%str(&)BASETABLE=&libref..&ds%str(&)NOTES=&URLNOTES;'; put '%let b4=%str(Reference ID: &mperef);'; put '*/'; put '%put mpe_loader finishing up with syscc=&syscc;'; put '%if &syscc le 4 %then %do;'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'putlog ''Updating mpe_loads with the following query:'';'; put 'putlog "update &mpelib..mpe_loads set STATUS=''SUCCESS''";'; put 'putlog " , duration=" dur;'; put 'putlog " , processed_dttm=" now;'; put 'putlog " , approvals = ''&libref..&ds''";'; put 'putlog " where CSV_DIR=''&mperef'';";'; put 'run;'; put 'proc sql;'; put 'update &mpelib..mpe_loads set STATUS=''SUCCESS'''; put ', duration=&dur'; put ', processed_dttm=&now'; put ', approvals = "&libref..&ds"'; put 'where CSV_DIR="&mperef";'; put '%end;'; put '%else %do;'; put '%mpe_loadfail('; put 'status="FAILED - &syscc"'; put ',now=&now'; put ',approvals=&libref..&ds'; put ',mperef=&mperef'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '%mend mpe_loader;'; put '%macro mp_cleancsv(in=NOTPROVIDED,out=NOTPROVIDED,qchar=''22''x);'; put '%if "&in"="NOTPROVIDED" or "&out"="NOTPROVIDED" %then %do;'; put '%put %str(ERR)OR: Please provide valid input (&in) & output (&out) locations;'; put '%return;'; put '%end;'; put '/* presence of a period(.) indicates a physical location */'; put '%if %index(&in,.) %then %let in="&in";'; put '%if %index(&out,.) %then %let out="&out";'; put '/**'; put '* convert all cr and crlf within quotes to lf'; put '* convert all other cr or lf to crlf'; put '*/'; put 'data _null_;'; put 'infile &in recfm=n ;'; put 'file &out recfm=n;'; put 'retain isq iscrlf 0 qchar &qchar;'; put 'input inchar $char1. ;'; put 'if inchar=qchar then isq = mod(isq+1,2);'; put 'if isq then do;'; put '/* inside a quote change cr and crlf to lf */'; put 'if inchar=''0D''x then do;'; put 'put ''0A''x;'; put 'input inchar $char1.;'; put 'if inchar ne ''0A''x then do;'; put 'put inchar $char1.;'; put 'if inchar=qchar then isq = mod(isq+1,2);'; put 'end;'; put 'end;'; put 'else put inchar $char1.;'; put 'end;'; put 'else do;'; put '/* outside a quote, change cr and lf to crlf */'; put 'if inchar=''0D''x then do;'; put 'crblank:'; put 'put ''0D0A''x;'; put 'input inchar $char1.;'; put 'if inchar=''0D''x then do;'; put '/* multiple CR indicates CR formatted file with blank lines */'; put 'goto crblank;'; put 'end;'; put 'else if inchar ne ''0A''x then do;'; put 'put inchar $char1.;'; put 'if inchar=qchar then isq = mod(isq+1,2);'; put 'end;'; put 'end;'; put 'else if inchar=''0A''x then put ''0D0A''x;'; put 'else put inchar $char1.;'; put 'end;'; put 'run;'; put '%mend mp_cleancsv;'; put '/** @endcond */'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file loadfile.sas'; put '@brief Loads a file'; put '@details'; put '

SAS Macros

'; put '@li mddl_sas_cntlout.sas'; put '@li mp_abort.sas'; put '@li mf_getplatform.sas'; put '@li mf_getuser.sas'; put '@li mf_getvarlist.sas'; put '@li mf_mkdir.sas'; put '@li mf_verifymacvars.sas'; put '@li mf_wordsinstr1butnotstr2.sas'; put '@li dc_assignlib.sas'; put '@li mpe_getgroups.sas'; put '@li mp_lockfilecheck.sas'; put '@li mpe_loader.sas'; put '@li mp_cleancsv.sas'; put '@li mp_binarycopy.sas'; put '@li mpeinit.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%global table dlm;'; put '%mpeinit(fetch=NO)'; put '%global _WEBIN_FILENAME1 _WEBIN_FILENAME2'; put '_WEBIN_FILEREF _WEBIN_FILEREF1 _WEBIN_FILEREF2;'; put '%macro load();'; put '%if %mf_getplatform()=SASVIYA %then %do;'; put '%global _webin_fileuri _webin_fileuri1 _webin_fileuri2;'; put '%let _webin_fileuri1=%sysfunc(coalescec(&_webin_fileuri1,&_webin_fileuri));'; put '%if "&_webin_fileuri1" ne "" %then %do;'; put '%put &=_webin_fileuri1;'; put 'filename sjfref1 filesrvc "&_webin_fileuri1";'; put '%let _WEBIN_FILEREF1=sjfref1;'; put '%end;'; put '%if "&_webin_fileuri2" ne "" %then %do;'; put '%put &=_webin_fileuri2;'; put 'filename sjfref2 filesrvc "&_webin_fileuri2";'; put '%let _WEBIN_FILEREF2=sjfref2;'; put '%end;'; put '%end;'; put '%mend load;'; put '%load()'; put '%let _WEBIN_FILENAME1=%sysfunc(coalescec(&_WEBIN_FILENAME1,&_WEBIN_FILENAME));'; put '%let _WEBIN_FILEREF1=%sysfunc(coalescec(&_WEBIN_FILEREF1,&_WEBIN_FILEREF));'; put '%let abort=0;'; put '/* we do not know if the excel file will be first or second fileref */'; put 'data _null_;'; put 'ext1=upcase(scan(symget(''_WEBIN_FILENAME1''),-1,''.''));'; put 'ext2=upcase(scan(symget(''_WEBIN_FILENAME2''),-1,''.''));'; put 'if ext1=''CSV'' then do;'; put 'csvname=symget(''_WEBIN_FILENAME1'');'; put 'csvref=symget(''_WEBIN_FILEREF1'');'; put 'xlsname=symget(''_WEBIN_FILENAME2'');'; put 'xlsref=symget(''_WEBIN_FILEREF2'');'; put 'end;'; put 'else if ext2=''CSV'' then do;'; put 'csvname=symget(''_WEBIN_FILENAME2'');'; put 'csvref=symget(''_WEBIN_FILEREF2'');'; put 'xlsname=symget(''_WEBIN_FILENAME1'');'; put 'xlsref=symget(''_WEBIN_FILEREF1'');'; put 'end;'; put 'else call symputx(''abort'',1);'; put 'call symputx(''csvname'',csvname);'; put 'call symputx(''csvref'',csvref);'; put 'call symputx(''xlsname'',xlsname);'; put 'call symputx(''xlsref'',coalescec(xlsref,''0''));'; put 'run;'; put '%mp_abort(iftrue= (&abort=1)'; put ',mac=&_program'; put ',msg=%str(File "&csvname" or "&xlsname" must be a CSV!'; put '(Comma separated with .csv extension))'; put ')'; put '%let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(table)=0)'; put ',mac=&_program'; put ',msg=%str(Missing: table)'; put ')'; put '%let table=%upcase(%trim(&table));'; put '/* load parameters */'; put 'data _null_;'; put 'libds=upcase(symget(''table''));'; put 'call symputx(''orig_libds'',libds);'; put 'call symputx(''orig_lib'',scan(libds,1,''.''));'; put 'call symputx(''orig_ds'',scan(libds,2,''.''));'; put 'is_fmt=0;'; put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'libds=''work.fmtextract'';'; put 'call symputx(''libds'',libds);'; put 'call execute(''%mddl_sas_cntlout(libds=work.fmtextract)'');'; put 'is_fmt=1;'; put 'end;'; put 'else call symputx(''libds'',libds);'; put 'call symputx(''is_fmt'',is_fmt);'; put 'putlog (_all_)(=);'; put 'run;'; put '/* check that the user has the requisite access */'; put '%mpe_getgroups(user=&user,outds=groups)'; put 'proc sql;'; put 'create table accesscheck as'; put 'select * from groups'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select sas_group from &mpelib..mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="EDIT"'; put 'and ('; put '(libref="&orig_lib" and dsn="&orig_ds")'; put 'or (libref="&orig_lib" and dsn="*ALL*")'; put 'or (libref="*ALL*" and dsn="*ALL*")'; put 'or (libref="*ALL*" and dsn="&orig_ds")'; put '));'; put '%let nobs=;'; put 'select count(*) into: nobs from &syslast;'; put '%mp_abort(iftrue= (&nobs=0)'; put ',mac=&sysmacroname'; put ',msg=%str(&user not authorised to load &orig_libds per &mpelib..mpe_security)'; put ')'; put '%dc_assignlib(WRITE,&orig_lib)'; put '%mp_abort(iftrue= (&syscc ge 4)'; put ',mac=loadfile'; put ',msg=%str(Issue assigning library &orig_lib)'; put ')'; put '%global txfrom txto processed rk;'; put 'data _null_;'; put 'set &mpelib..MPE_TABLES;'; put 'where libref="&orig_lib" and dsn="&orig_ds";'; put 'call symputx(''txfrom'',var_txfrom);'; put 'call symputx(''txto'',var_txto);'; put 'call symputx(''processed'',var_processed);'; put 'if not missing(RK_UNDERLYING) then call symputx(''rk'',buskey);'; put 'run;'; put '%mp_lockfilecheck(libds=&orig_libds)'; put 'data compare;'; put 'set &libds(drop=&txfrom &txto &processed &rk);'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc line 80)'; put ')'; put '/* get line terminator, assume it''s the first cr, lf, or crlf */'; put 'data _null_;'; put 'length text $32767 term $4;'; put 'call missing (of _all_);'; put 'fid=fopen("&csvref",''I'',32767,''b'');'; put 'rc=fread(fid);'; put 'rc2=fget(fid,text,32767);'; put 'cr=find(text,''0D''x );'; put 'lf=find(text,''0A''x );'; put 'crlf=find(text,''0D0A''x);'; put 'rc=fclose(fid);'; put 'if crlf>0 & cr0 & crlf0 & cr>0 & lf0 then term=''LF'';'; put 'else term=''CR'';'; put 'call symputx(''termstr'',term);'; put 'run;'; put 'data _null_;'; put 'infile &csvref lrecl=32000 dsd termstr=&termstr;'; put 'input;'; put 'length incols_unsorted $32000 dlm $1;'; put 'incols_unsorted=compress(upcase(_infile_),"''"!!''"'');'; put '/* dlm has length 1 so will be the first non alpha / digit char */'; put '/* expectation is that there will not be any crazy characters in first col! */'; put 'dlm=compress(incols_unsorted,''_ '',''ad'');'; put 'incols_unsorted=compress(incols_unsorted,dlm!!''_'',''kado'');'; put 'incols_unsorted=tranwrd(incols_unsorted,dlm,'' '');'; put 'call symputx(''incols_unsorted'',incols_unsorted);'; put 'call symputx(''dlm'',dlm);'; put 'putlog incols_unsorted=;'; put 'putlog dlm=;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc line 99)'; put ')'; put '%let basecols=%upcase(%mf_getvarlist(work.compare,dlm=%str( )));'; put '%let missing_cols=%trim('; put '%mf_wordsInStr1ButNotStr2('; put 'Str1=&basecols'; put ',Str2=&incols_unsorted'; put '));'; put '%let msg='; put 'Expected cols: &basecols'; put '
Received cols: &incols_unsorted'; put '
Missing cols: &missing_cols'; put ';'; put '%mp_abort(iftrue= (%length(%trim(&missing_cols)) > 1 or &syscc ne 0)'; put ',mac=mpestp_loadfile.sas'; put ',msg=%superq(msg)'; put ')'; put '%let msg=0;'; put 'PROC FORMAT;'; put 'picture yymmddhhmmss other=''%0Y%0m%0d_%0H%0M%0S'' (datatype=datetime);'; put 'RUN;'; put '/* create a dataset key (datetime plus 6 digit random number plus PID) */'; put '%let mperef=DC%left(%sysfunc(datetime(),B8601DT19.3))_%substr('; put '%sysfunc(ranuni(0)),3,6)_%substr(%str(&sysjobid ),1,4);'; put '/* Create package folder and redirect the log */'; put '%let dir=&mpelocapprovals/&mperef;'; put '%mf_mkdir(&dir)'; put '/* clean embedded line breaks and force CRLF line endings */'; put '%mp_cleancsv(in=&csvref, out=&dir/&orig_libds..csv)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(issue in mp_cleancsv)'; put ')'; put '%put; %put; %put log is being redirected;'; put '%let url=_program=%substr(&_program'; put ',1,%length(&_program)-8)getlog%nrstr(&)table=&mperef;'; put '%put to retrieve, visit this url:; %put;%put;'; put '%put &url;'; put '%put;'; put '/* proc printto log="&dir/weblog.txt";run; */'; put 'libname approve "&dir";'; put 'options mprint;'; put '%put &=mperef;'; put '%put &=termstr;'; put '%put &=dlm;'; put '%mpe_loader(mperef=&mperef'; put ',submitted_reason_txt=%quote(File upload: %superq(csvname))'; put ',dlm=%superq(dlm)'; put ',url=%superq(url)'; put ',termstr=CRLF'; put ',dc_dttmtfmt=&dc_dttmtfmt'; put ')'; put '%mp_abort(mode=INCLUDE)'; put '%mp_abort('; put 'iftrue= (%sysfunc(fileexist(%sysfunc(pathname(work))/mf_abort.error)) ne 0)'; put ',mac=&_program'; put ',msg=%nrstr(Problem occurred in &sysmacroname (mf_abort.error file found))'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=mpestp_loadfile.sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put 'filename outref "&dir/BKP_&xlsname";'; put '%mp_binarycopy(iftrue=("&xlsref" ne "0"),inref=&xlsref,outref=outref)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc when backing up source file &xlsname)'; put ')'; put 'data sasparams;'; put 'STATUS=''SUCCESS'';'; put 'DSID="&mperef";'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,sasparams)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=restore; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mpe_checkrestore(load_ref,'; put 'outresult=ALLOW_RESTORE,'; put 'outreason=REASON'; put ');'; put '%global &outresult &outreason;'; put '%let &outresult=NO;'; put '%let &outreason=NOTFOUND;'; put '%local libds;'; put 'proc sql noprint;'; put 'select upcase(cats(base_lib,''.'',base_ds)) into: libds'; put 'from &dc_libref..mpe_submit'; put 'where TABLE_ID="&load_ref";'; put '/**'; put '* check if there is actually a version to restore'; put '*/'; put '%local audtab;'; put 'proc sql noprint;'; put 'select coalescec(audit_libds,"&dc_libref..MPE_AUDIT") into: audtab'; put 'from &dc_libref..MPE_TABLES'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and libref="%scan(&libds,1,.)" and dsn="%scan(&libds,2,.)";'; put '%if "&audtab"="0" %then %do;'; put '%let &outresult=NO;'; put '%let &outreason= &libds has no audit table configured;'; put '%return;'; put '%end;'; put '%local chk;'; put '%let chk=0;'; put 'proc sql noprint;'; put 'select count(*) into: chk from &audtab'; put 'where load_ref="&load_ref";'; put '%if &chk=0 %then %do;'; put '%let &outresult=NO;'; put '%let &outreason=No entry for &load_ref in &audtab;'; put '%return;'; put '%end;'; put '/* grab user groups */'; put '%local user;'; put '%let user=%mf_getuser();'; put '%mpe_getgroups(user=&user,outds=work.groups)'; put '/* check if user is admin */'; put '%local is_admin;'; put '%let is_admin=0;'; put 'proc sql;'; put 'select count(*) into: is_admin from work.groups'; put 'where groupname="&dc_admin_group";'; put '%if &is_admin>0 %then %do;'; put '%let &outresult=YES;'; put '%let &outreason=IS ADMIN;'; put '%return;'; put '%end;'; put '/* check if user has basic access */'; put '%mpe_accesscheck(&libds,outds=work.access_check'; put ',user=&user'; put ',access_level=EDIT'; put ')'; put '%if %mf_nobs(access_check)=0 %then %do;'; put '%let &outresult=NO;'; put '%let &outreason=No access in MPE_TABLES;'; put '%return;'; put '%end;'; put '/* check if user has column level security rules */'; put 'proc sql;'; put 'create table work.cls_rules as'; put 'select *'; put 'from &mpelib..mpe_column_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and CLS_SCOPE in ("EDIT",''ALL'')'; put 'and CLS_ACTIVE=1'; put 'and upcase(CLS_GROUP) in (select upcase(groupname) from work.groups)'; put 'and CLS_LIBREF="%upcase(&base_lib)"'; put 'and CLS_TABLE="%upcase(&base_ds)";'; put '%if %mf_nobs(work.cls_rules)>0 %then %do;'; put '%let &outresult=NO;'; put '%let &outreason=User has restrictions in MPE_COLUMN_LEVEL_SECURITY;'; put 'data _null_;'; put 'set work.cls_rules;'; put 'putlog (_all_)(=);'; put 'if _n_>5 then stop;'; put 'run;'; put '%return;'; put '%end;'; put '/* check if user has row level security rules */'; put 'proc sql;'; put 'create table work.rls_rules as'; put 'select *'; put 'from &mpelib..mpe_row_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and rls_scope in ("EDIT",''ALL'')'; put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)'; put 'and rls_libref="&base_lib"'; put 'and rls_table="&base_ds"'; put 'and rls_active=1;'; put '%if %mf_nobs(work.rls_rules)>0 %then %do;'; put '%let &outresult=NO;'; put '%let &outreason=User has restrictions in MPE_ROW_LEVEL_SECURITY;'; put 'data _null_;'; put 'set work.rls_rules;'; put 'putlog (_all_)(=);'; put 'if _n_>5 then stop;'; put 'run;'; put '%return;'; put '%end;'; put '%else %do;'; put '%let &outresult=YES;'; put '%let &outreason=CHECKS PASSED;'; put '%end;'; put '%mend mpe_checkrestore;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mpe_alerts(alert_event='; put ', alert_lib='; put ', alert_ds='; put ', dsid='; put ');'; put '/* exit if not configured */'; put '%global DC_EMAIL_ALERTS;'; put '%if &DC_EMAIL_ALERTS ne YES %then %do;'; put '%put DCNOTE: Email alerts are not configured;'; put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);'; put '%return;'; put '%end;'; put '%let alert_event=%upcase(&alert_event);'; put '%let alert_lib=%upcase(&alert_lib);'; put '%let alert_ds=%upcase(&alert_ds);'; put '%let from_user=%mf_getuser();'; put '/* get users TO which the email should be sent */'; put 'proc sql noprint;'; put 'create table work.users as select distinct a.alert_user,'; put 'b.user_displayname,'; put 'b.user_email'; put 'from &mpelib..mpe_alerts'; put '(where=(&dc_dttmtfmt. lt tx_to)) a'; put 'left join &mpelib..mpe_emails'; put '(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))'; put 'where a.alert_event in ("&alert_event","*ALL*")'; put 'and a.alert_lib in ("&alert_lib","*ALL*")'; put 'and a.alert_ds in ("&alert_ds","*ALL*");'; put '/* ensure the submitter is included on the email */'; put '%local isThere userdisp user_eml;'; put '%let isThere=0;'; put 'select count(*) into: isThere from &syslast where alert_user="&from_user";'; put '%if &isThere=0 %then %do;'; put 'select user_displayname, user_email'; put 'into: userdisp trimmed, :user_eml trimmed'; put 'from &mpelib..mpe_emails'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and user_name="&from_user";'; put 'insert into work.users'; put 'set alert_user="&from_user"'; put ',user_displayname="&userdisp"'; put ',user_email="&user_eml";'; put '%end;'; put '/* if no email / displayname is provided, then extract from metadata */'; put 'data work.emails;'; put 'set work.users;'; put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;'; put '/* get displayname */'; put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");'; put 'if metadata_getnobj(text,1,uri)<=0 then do;'; put 'putlog "DCWARN: &from_user not found";'; put 'return;'; put 'end;'; put 'else if user_displayname = '''' then do;'; put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;'; put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';'; put 'end;'; put 'end;'; put 'if index(user_email,''@'') then return;'; put '/* get email from metadata if not in input table */'; put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;'; put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";'; put 'end;'; put 'else do;'; put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;'; put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';'; put 'end;'; put 'end;'; put '/* only keep valid emails */'; put 'if index(user_email,''@'') ;'; put '/* dump contents for debugging */'; put 'if _n_<21 then putlog (_all_)(=);'; put 'run;'; put '%local emails;'; put 'proc sql noprint;'; put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;'; put '/* exit if nobody to email */'; put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;'; put '%put NOTE: No alerts configured (mpe_alerts.sas);'; put '%return;'; put '%end;'; put '/* display email options */'; put 'data _null_;'; put 'set sashelp.voption(where=(group=''EMAIL''));'; put 'put optname ''='' setting;'; put 'run;'; put 'filename __out email (&emails)'; put 'subject="Table &alert_lib..&alert_ds has been &alert_event";'; put '%local SUBMITTED_TXT;'; put '%if &alert_event=SUBMITTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_submit;'; put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';'; put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been proposed by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''SUBMITTED_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=APPROVED %then %do;'; put '/* there is no approval message */'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been approved by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=REJECTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_review;'; put 'where table_id="&dsid" and review_status_id=''REJECTED'';'; put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been rejected by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''REVIEW_REASON_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put 'filename __out clear;'; put '%mend mpe_alerts ;'; put '%macro mpe_xlmapvalidate(mperef,inds,dclib,tgtds);'; put '%local ismap;'; put 'proc sql noprint;'; put 'select count(*) into: ismap'; put 'from &dclib..mpe_xlmap_info'; put 'where XLMAP_TARGETLIBDS="&tgtds" and &dc_dttmtfmt. le TX_TO ;'; put '%if "&tgtds"="&dclib..MPE_XLMAP_DATA" or &ismap>0 %then %do;'; put 'data &inds;'; put 'set &inds;'; put 'LOAD_REF="&mperef";'; put 'run;'; put '%end;'; put '%mend mpe_xlmapvalidate;'; put '%macro mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=%sysfunc(datetime())'; put ',approvals='; put ',mperef='; put ',reason_txt='; put ',mac=mpe_loadfail.sas'; put ',dc_dttmtfmt=E8601DT26.6'; put ');'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'update &mpelib..mpe_loads'; put 'set STATUS=symget(''status'')'; put ', duration=&dur'; put ', processed_dttm=&dc_dttmtfmt.'; put ', approvals = symget(''approvals'')'; put ', reason_txt= symget(''reason_txt'')'; put 'where CSV_DIR="&mperef";'; put '%let syscc=666;'; put '%mp_abort(msg=%superq(status)\n%superq(reason_txt),mac=&mac)'; put '%mend mpe_loadfail;'; put '%macro dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; put ',outref=&outref'; put ')'; put '%mend dc_getservicecode;'; put '%macro mp_include(fileref'; put ',prefix=_'; put ',opts=SOURCE2'; put ',errds=work.mp_abort_errds'; put ')/*/STORE SOURCE*/;'; put '/* prepare precode */'; put '%local tempref;'; put '%let tempref=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &tempref;'; put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));'; put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';'; put 'name=scan(xpath,-1,''/\'');'; put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';'; put 'path=subpad(xpath,1,length(xpath)-length(name)-1);'; put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';'; put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";'; put 'run;'; put '/* prepare the errds */'; put 'data &errds;'; put 'length msg mac $1000;'; put 'call missing(msg,mac);'; put 'iftrue=''1=0'';'; put 'run;'; put '/* include the include */'; put '%inc &tempref &fileref/&opts;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)'; put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)'; put ')'; put 'filename &tempref clear;'; put '%mend mp_include;'; put '%macro mpe_runhook(hookvar);'; put '%local pgmloc pgmtype;'; put '%let pgmtype=0;'; put '%put &sysmacroname: &=hookvar;'; put '%if %length(&&&hookvar)>0 %then %do;'; put '%put &sysmacroname: Executing &&&hookvar;'; put 'data _null_;'; put 'rule_value=symget("&hookvar");'; put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;'; put 'call symputx(''pgmtype'',''PGM'');'; put 'call symputx(''pgmloc'',rule_value);'; put 'end;'; put 'else do;'; put 'apploc="%mf_getapploc()";'; put 'if substr(rule_value,1,1) ne ''/'''; put 'then rule_value=cats(apploc,''/'',rule_value);'; put 'call symputx(''pgmloc'',rule_value);'; put 'call symputx(''pgmtype'',''JOB'');'; put 'end;'; put 'run;'; put '%if &pgmtype=PGM %then %do;'; put 'filename sascode "&pgmloc";'; put '%end;'; put '%else %do;'; put '%dc_getservicecode(loc=&pgmloc'; put ',outref=sascode'; put ')'; put '%end;'; put '/* the below script will need to modify work.STAGING_DS */'; put '%local x; %let x=; /* legacy feature */'; put '%mp_include(sascode)'; put '%end;'; put '%mend mpe_runhook;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_mkdir(dir'; put ')/*/STORE SOURCE*/;'; put '%local lastchar child parent;'; put '%let lastchar = %substr(&dir, %length(&dir));'; put '%if (%bquote(&lastchar) eq %str(:)) %then %do;'; put '/* Cannot create drive mappings */'; put '%return;'; put '%end;'; put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;'; put '/* last char is a slash */'; put '%if (%length(&dir) eq 1) %then %do;'; put '/* one single slash - root location is assumed to exist */'; put '%return;'; put '%end;'; put '%else %do;'; put '/* strip last slash */'; put '%let dir = %substr(&dir, 1, %length(&dir)-1);'; put '%end;'; put '%end;'; put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;'; put '/* directory does not exist so prepare to create */'; put '/* first get the childmost directory */'; put '%let child = %scan(&dir, -1, %str(/\:));'; put '/*'; put 'If child name = path name then there are no parents to create. Else'; put 'they must be recursively scanned.'; put '*/'; put '%if (%length(&dir) gt %length(&child)) %then %do;'; put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));'; put '%mf_mkdir(&parent)'; put '%end;'; put '/*'; put 'Now create the directory. Complain loudly of any errs.'; put '*/'; put '%let dname = %sysfunc(dcreate(&child, &parent));'; put '%if (%bquote(&dname) eq ) %then %do;'; put '%put %str(ERR)OR: could not create &parent + &child;'; put '%abort cancel;'; put '%end;'; put '%else %do;'; put '%put Directory created: &dir;'; put '%end;'; put '%end;'; put '/* exit quietly if directory did exist.*/'; put '%mend mf_mkdir;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_dirlist(path=%sysfunc(pathname(work))'; put ', fref=0'; put ', outds=work.mp_dirlist'; put ', getattrs=NO'; put ', showparent=NO'; put ', maxdepth=0'; put ', level=0 /* The level of recursion to perform. For internal use only. */'; put ')/*/STORE SOURCE*/;'; put '%let getattrs=%upcase(&getattrs)XX;'; put '/* temp table */'; put '%local out_ds;'; put 'data;run;'; put '%let out_ds=%str(&syslast);'; put '/* drop main (top) table if it exists */'; put '%if &level=0 %then %do;'; put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)'; put '%end;'; put 'data &out_ds(compress=no'; put 'keep=file_or_folder filepath filename ext msg directory level'; put ');'; put 'length directory filepath $2000 fref fref2 $8 file_or_folder $6 filename $255'; put 'ext $20 msg $200 foption $16;'; put 'if _n_=1 then call missing(of _all_);'; put 'retain level &level;'; put '%if &fref=0 %then %do;'; put 'rc = filename(fref, "&path");'; put '%end;'; put '%else %do;'; put 'fref="&fref";'; put 'rc=0;'; put '%end;'; put 'if rc = 0 then do;'; put 'did = dopen(fref);'; put 'if did=0 then do;'; put 'putlog "NOTE: This directory is empty, or does not exist - &path";'; put 'msg=sysmsg();'; put 'put (_all_)(=);'; put 'stop;'; put 'end;'; put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */'; put 'numopts=doptnum(did);'; put 'do i=1 to numopts;'; put 'foption=doptname(did,i);'; put 'if foption=:''Directory'' then i=numopts;'; put 'end;'; put 'directory=dinfo(did,foption);'; put 'rc = filename(fref);'; put 'end;'; put 'else do;'; put 'msg=sysmsg();'; put 'put _all_;'; put 'stop;'; put 'end;'; put 'dnum = dnum(did);'; put 'do i = 1 to dnum;'; put 'filename = dread(did, i);'; put 'filepath=cats(directory,''/'',filename);'; put 'rc = filename(fref2,filepath);'; put 'midd=dopen(fref2);'; put 'dmsg=sysmsg();'; put 'if did > 0 then file_or_folder=''folder'';'; put 'rc=dclose(midd);'; put 'midf=fopen(fref2);'; put 'fmsg=sysmsg();'; put 'if midf > 0 then file_or_folder=''file'';'; put 'rc=fclose(midf);'; put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')'; put 'then file_or_folder=''file'';'; put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';'; put 'else if file_or_folder='''' then file_or_folder=''locked'';'; put 'if file_or_folder=''file'' then do;'; put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);'; put 'if filename = ext then ext = '' '';'; put 'end;'; put 'else do;'; put 'ext='''';'; put 'file_or_folder=''folder'';'; put 'end;'; put 'output;'; put 'end;'; put 'rc = dclose(did);'; put '%if &showparent=YES and &level=0 %then %do;'; put 'filepath=directory;'; put 'file_or_folder=''folder'';'; put 'ext='''';'; put 'filename=scan(directory,-1,''/\'');'; put 'msg='''';'; put 'level=&level;'; put 'output;'; put '%end;'; put 'stop;'; put 'run;'; put '%if %substr(&getattrs,1,1)=Y %then %do;'; put 'data &out_ds;'; put 'set &out_ds;'; put 'length infoname infoval $60 fref $8;'; put 'if _n_=1 then call missing(fref);'; put 'rc=filename(fref,filepath);'; put 'drop rc infoname fid i close fref;'; put 'if file_or_folder=''file'' then do;'; put 'fid=fopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open file:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to foptnum(fid);'; put 'infoname=foptname(fid,i);'; put 'infoval=finfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=fclose(fid);'; put 'end;'; put 'else do;'; put 'fid=dopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open folder:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to doptnum(fid);'; put 'infoname=doptname(fid,i);'; put 'infoval=dinfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=dclose(fid);'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by filepath sasname;'; put 'proc transpose data=&out_ds out=&out_ds(drop=_:);'; put 'id sasname;'; put 'var infoval;'; put 'by filepath file_or_folder filename ext ;'; put 'run;'; put '%end;'; put 'data &out_ds;'; put 'set &out_ds(where=(filepath ne ''''));'; put 'run;'; put '/**'; put '* The above transpose can mean that some updates create additional columns.'; put '* This necessitates the occasional use of datastep over proc append.'; put '*/'; put '%if %mf_existds(&outds) %then %do;'; put '%local basevars appvars newvars;'; put '%let basevars=%mf_getvarlist(&outds);'; put '%let appvars=%mf_getvarlist(&out_ds);'; put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));'; put '%if &newvars>0 %then %do;'; put 'data &outds;'; put 'set &outds &out_ds;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds force nowarn;'; put 'run;'; put '%end;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds;'; put 'run;'; put '%end;'; put '/* recursive call */'; put '%if &maxdepth>&level or &maxdepth=MAX %then %do;'; put 'data _null_;'; put 'set &out_ds;'; put 'where file_or_folder=''folder'';'; put '%if &showparent=YES and &level=0 %then %do;'; put 'if filepath ne directory;'; put '%end;'; put 'length code $10000;'; put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"'; put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");'; put 'put code=;'; put 'call execute(code);'; put 'run;'; put '%end;'; put '/* tidy up */'; put 'proc sql;'; put 'drop table &out_ds;'; put '%mend mp_dirlist;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro mpe_loader('; put 'mperef= /* name of subfolder containing the staged data */'; put ',mDebug=0 /* set to 1 for development or debugging */'; put ',submitted_reason_txt= /* populates column of same name in sumo_approvals*/'; put ',approver= /* allows a userid to be provided for direct approval email */'; put ',url= /* optional - url for debugging */'; put ',dlm=%str(,)'; put ',termstr=crlf'; put ',dc_dttmtfmt=E8601DT26.6'; put ');'; put '%put entered mpe_loader from &=_program;'; put '%put &=url;'; put '%put &=termstr;'; put '%put &=dlm;'; put '/* determine full path to CSV directory */'; put '%local now;'; put '%let now=&dc_dttmtfmt;'; put '%put &=now;'; put '/**'; put '* get full path to package (only subdirectory passed through)'; put '*/'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(mperef mpelocapprovals)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing: mperef mpelocapprovals)'; put ')'; put '%let csv_dir=%trim(&mpelocapprovals/&mperef);'; put '/* exit if package has already been uploaded */'; put '%local check;'; put 'proc sql noprint;'; put 'select count(*) into: check'; put 'from &mpelib..mpe_loads'; put 'where csv_dir="&mperef";'; put '%if &check %then %do;'; put '%mp_abort(msg=Folder &mperef already has an entry in &mpelib..mpe_loads'; put ',mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '/* get CSV directory contents */'; put '%mp_dirlist(path=&csv_dir,outds=WORK.getfiles)'; put 'data WORK.csvs;'; put 'set WORK.getfiles;'; put 'if upcase(scan(filename,3,''.''))=''CSV'' then do;'; put 'lib=upcase(scan(filename,1,''.''));'; put 'ds=upcase(scan(filename,2,''.''));'; put 'output;'; put 'end;'; put 'run;'; put '/* get table attributes */'; put 'proc sql noprint;'; put 'create table WORK.sumo_tables as'; put 'select a.filename, b.*'; put 'from WORK.csvs a'; put 'left join &mpelib..mpe_tables b'; put 'on a.lib=b.libref'; put 'and a.ds=b.dsn'; put 'where b.tx_from le &now'; put 'and &now lt b.tx_to;'; put '/* define user as meta user if available */'; put '%local user;'; put '%let user=%mf_getuser();'; put '/* check if there is actually a table to load */'; put '%if %mf_getattrn(WORK.sumo_tables,NLOBS)=0 %then %do;'; put '%let msg=Table not registered in &mpelib..mpe_tables;'; put '%mpe_loadfail('; put 'status=&msg'; put ',now=&now'; put ',mperef=&mperef'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%mp_abort(msg=&msg,mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put 'proc sql;'; put 'insert into &mpelib..mpe_loads'; put 'set USER_NM="&user"'; put ',STATUS=''IN PROGRESS'''; put ',CSV_dir="&mperef"'; put ',PROCESSED_DTTM=&now'; put ',reason_txt = symget(''submitted_reason_txt'');'; put '/* import CSV */'; put '%let droplist=;'; put '%let attrib=;'; put '%let droplist=;'; put '%let libref=;'; put '%let DS=;'; put '/* get table info */'; put 'data _null_;'; put 'set sumo_tables;'; put 'libds=upcase(cats(libref,''.'',dsn));'; put 'call symputx(''orig_libds'',libds);'; put 'is_fmt=0;'; put 'if substr(cats(reverse(dsn)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'libds=''work.fmtextract'';'; put 'is_fmt=1;'; put 'end;'; put 'call symputx(''is_fmt'',is_fmt);'; put 'call symputx(''libds'',libds);'; put 'call symputx(''FNAME'',filename);'; put 'call symputx(''LIBREF'',libref);'; put 'call symputx(''DS'',dsn);'; put 'call symputx(''LOADTYPE'',loadtype);'; put 'call symputx(''BUSKEY'',buskey);'; put 'call symputx(''VAR_TXFROM'',var_txfrom);'; put 'call symputx(''VAR_TXTO'',var_txto);'; put 'call symputx(''VAR_BUSFROM'',var_busfrom);'; put 'call symputx(''VAR_BUSTO'',var_busto);'; put 'call symputx(''VAR_PROCESSED'',var_processed);'; put 'call symputx(''RK_UNDERLYING'',RK_UNDERLYING);'; put 'call symputx(''POST_EDIT_HOOK'',POST_EDIT_HOOK);'; put 'call symputx(''NOTES'',NOTES);'; put 'call symputx(''PK'',coalescec(RK_UNDERLYING,buskey));'; put 'call symputx(''NUM_OF_APPROVALS_REQUIRED'',NUM_OF_APPROVALS_REQUIRED,''l'');'; put 'put (_all_)(=);'; put 'stop;'; put 'run;'; put '%if %length(&ds)=0 %then %do;'; put '%let msg=%str(ERR)OR: Unable to extract record from &mpelib..mpe_tables;'; put '%mpe_loadfail('; put 'status=FAILED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%mp_abort(msg=&msg,mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '/* export format catalog */'; put '%mp_cntlout('; put 'iftrue=(&is_fmt=1)'; put ',libcat=&orig_libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '/* user must have EDIT access to load a table */'; put '%mpe_accesscheck(&orig_libds'; put ',outds=work.sumo_access'; put ',user=&user'; put ',access_level=EDIT )'; put '%put exiting accesscheck;'; put '%if %mf_getattrn(work.sumo_access,NLOBS)=0 %then %do;'; put '%let msg=%str(ERR)OR: User is not authorised to edit &orig_libds!;'; put '%mpe_loadfail('; put 'status=UNAUTHORISED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%mp_abort(msg=&msg,mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '%put now importing: "&csv_dir/&fname" termstr=&termstr;'; put '/* get the variables from the CSV */'; put 'data vars_csv1(index=(idxname=(varnum name)) drop=infile);'; put 'infile "&csv_dir/&fname" lrecl=32767 dsd termstr=&termstr encoding=''utf-8'';'; put 'input;'; put 'length infile $32767;'; put 'infile=compress(_infile_,''"'',);'; put 'infile=compress(infile,"''",);'; put 'format name $32.;'; put 'putlog ''received vars: '' infile;'; put 'call symputx(''received_vars'',infile,''l'');'; put 'do varnum=1 to countw(infile,"&dlm");'; put '/* keep writeable chars */'; put 'name=compress(upcase(scan(infile,varnum)),,''kw'');'; put 'if name ne "_____DELETE__THIS__RECORD_____" then output;'; put 'end;'; put 'stop;'; put 'run;'; put '%put received_vars = &received_vars;'; put '%dc_assignlib(WRITE,&libref)'; put '/* get list of variables and their formats */'; put 'proc contents noprint data=&libds'; put 'out=vars(keep=name type length varnum format:);'; put 'run;'; put 'data vars(keep=name type length varnum format);'; put 'set vars(rename=(format=format2 type=type2));'; put 'name=upcase(name);'; put 'format2=upcase(format2);'; put '/* not interested in transaction or processing dates'; put '(append table must be supplied without them) */'; put 'if name not in ("&VAR_TXFROM","&VAR_TXTO","&VAR_PROCESSED"'; put ',"_____DELETE__THIS__RECORD_____");'; put 'if type2 in (2,6) then do;'; put 'length format $49.;'; put 'if format2='''' then format=cats(''$'',length,''.'');'; put 'else format=cats(format2,max(formatl,length),''.'');'; put 'type=''char'';'; put 'end;'; put 'else do;'; put 'if format2='''' then format=cats(length,''.'');'; put 'else if format2=:''DATETIME'' or format2=:''E8601DT'' or format2=:''NLDATM'''; put 'then do;'; put 'format=''DATETIME19.'';'; put 'end;'; put 'else if format2=:''DATE'' or format2=:''DDMMYY'''; put 'or format2=:''MMDDYY'' or format2=:''YYMMDD'''; put 'or format2=:''E8601DA'' or format2=:''B8601DA'''; put 'or format2=:''NLDATE'''; put 'then do;'; put 'format=''DATE9.'';'; put 'end;'; put 'else if format2=''BEST'' & formatl=0 then format=cats(''BEST'',length,''.'');'; put 'else do;'; put 'if formatl=0 then formatl=length;'; put 'format=cats(format2,formatl,''.'',formatd);'; put 'end;'; put 'type=''num'';'; put 'end;'; put 'put (_all_)(=);'; put 'run;'; put '/* build attrib statement */'; put 'data vars_attrib;'; put 'length attrib_statement $32767 type2 $20;'; put 'set vars end=lastobs;'; put 'retain attrib_statement;'; put 'if type=''char'' then type2=''$'';'; put 'str1=catx('' '',name,''length='',cats(type2,length));'; put 'attrib_statement=trim(attrib_statement)!!'' ''!!trim(str1);'; put 'if lastobs then call symputx(''ATTRIB'',attrib_statement,''L'');'; put 'run;'; put '/* build input statement - first get vars in right order'; put 'and join with target formats*/'; put 'proc sql noprint;'; put 'create table vars_csv2 as'; put 'select b.*'; put 'from vars_csv1 a'; put 'left join vars_attrib b'; put 'on a.name=b.name'; put 'order by a.varnum;'; put '/* now build input statement */'; put 'data final_check;'; put 'set vars_csv2 end=lastobs;'; put 'length input_statement $32767 type2 $20 droplist $32767;'; put 'retain input_statement droplist;'; put '/* Build input statement - CATCH EXCEPTIONS HERE!*/'; put 'if name in (''QUOTE_DTTM'') then do;'; put 'name=cats(name,''2'');'; put 'droplist=catx('' '',trim(droplist),name);'; put 'type2=''$20.'';/* converted below */'; put 'end;'; put 'else if type=''char'' then type2=cats(''$CHAR'', length,''.'');'; put 'else if format=''DATE9.'' then type2=''ANYDTDTE.'';'; put 'else if format=''DATETIME19.'' then type2=''ANYDTDTM.'';'; put 'else if format=:''TIME'' then type2=''ANYDTTME.'';'; put 'else if name='''' then do;/* additional vars in input data */'; put 'name=''_____DELETE__THIS__VARIABLE_____'';'; put 'droplist=catx('' '',trim(droplist),''_____DELETE__THIS__VARIABLE_____'');'; put 'type2=''$1.'';'; put 'end;'; put 'else type2=''best32.'';'; put '* else type2=cats(length,''.'');'; put 'input_statement=catx('' '',input_statement,name,'':'',type2);'; put 'if lastobs then do;'; put 'call symputx(''INPUT'', input_statement,''L'');'; put 'if trim(droplist) ne '''' then'; put 'call symputx(''droplist'',"drop "!!droplist!!'';'',''l'');'; put 'end;'; put 'run;'; put '%let mpeloadstop=0;'; put 'data work.STAGING_DS;'; put '&droplist;'; put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767'; put 'firstobs=2 missover termstr=&termstr encoding=''utf-8'';'; put 'attrib _____DELETE__THIS__RECORD_____ length=$3 &attrib ;'; put 'if _n_=1 then call missing (of _all_);'; put 'missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;'; put 'input'; put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____ %then %do;'; put '_____DELETE__THIS__RECORD_____: $3.'; put '%end;'; put '&input;'; put '%if %index(%quote(&attrib.),UNLIKELY_VAR ) %then %do;'; put '/*UNLIKELY_VAR=input(UNLIKELY_VAR2,ANYDTDTM21.);*/'; put '/* SPECIAL LOGIC FOR SPECIAL VARS */'; put '%end;'; put 'if _error_ ne 0 then do;'; put 'putlog _infile_;'; put 'call symputx(''mpeloadstop'',_n_);'; put 'stop;'; put 'end;'; put '/* remove all blank rows */'; put 'if compress(cats(of _all_),''.'')='' '' then delete;'; put 'run;'; put '%if &mpeloadstop>0 %then %do;'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put '%put redirecting log output to capture return message;'; put '%put currentloc=&logloc;'; put 'filename tmp temp;'; put 'proc printto log=tmp;run;'; put 'data _null_;'; put '&droplist;'; put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767 firstobs=2'; put 'missover termstr=&termstr;'; put 'attrib &attrib ;'; put 'input'; put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____'; put '%then %do;'; put '_____DELETE__THIS__RECORD_____: $3.'; put '%end;'; put '&input;'; put 'if _error_ then stop;'; put 'run;'; put '/* get log back */'; put 'proc printto log=&logloc;run;'; put 'data _null_; infile tmp; input; putlog _infile_;run;'; put '/* scan log for invalid data warnings */'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'length msg1 msg2 msg3 msg4 msg5 msg url $32767;'; put 'if index(_infile_,''NOTE: Invalid data for'') then do;'; put 'msg1=_infile_;'; put 'input;'; put 'msg2=_infile_;'; put 'input;'; put 'msg3=_infile_;'; put 'input;'; put 'msg4=_infile_;'; put 'input;'; put 'msg5=_infile_;'; put 'url=symget(''url'');'; put 'msg=catx(''\n'',msg1,msg2,msg3,msg4,msg5,''\n'',url);'; put 'call symputx(''msg'',msg);'; put 'stop;'; put 'end;'; put 'run;'; put '%mpe_loadfail('; put 'status=FAILED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%superq(msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '/* check that the table is unique on PK */'; put 'proc sort data=work.STAGING_DS dupout=work.MPE_DUPS (keep=&pk) nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.MPE_DUPS,NLOBS)>0 %then %do;'; put '%local duplist;'; put 'data _null_;'; put 'set work.mpe_dups;'; put '%do i=1 %to %sysfunc(countw(&pk));'; put '%let iWord=%scan(&pk,&i);'; put 'call symputx(''duplist'',symget(''duplist'')!!'; put '" &iWord="!!cats(&iWord));'; put '%end;'; put 'run;'; put '%let msg=This upload contains duplicates on the Primary Key columns %trim('; put ')(&pk) \n Please remove the duplicates and try again. %trim('; put ')\n &duplist \n ;'; put '%mp_abort(msg=%superq(msg),mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '%if &syscc gt 4 %then %do;'; put '%let msg=SYSCC=&syscc prior to post edit hook (%superq(syserrortext));'; put '%mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%superq(msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '/* If a Complex Excel Upload, needs to have the load ref added to the table */'; put '%mpe_xlmapvalidate(&mperef,work.staging_ds,&mpelib,&orig_libds)'; put '/* Run the Post Edit Hook prior to creation of staging folder */'; put '%mpe_runhook(POST_EDIT_HOOK)'; put '/* stop if err */'; put '%if &syscc gt 4 %then %do;'; put '%let msg=ERR in post edit hook (&post_edit_hook);'; put '%mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '/**'; put '* send to approve process'; put '*/'; put '/* create a dataset key (datetime plus 3 digit random number plus PID) */'; put '/* send dataset to approvals subfolder with same name as subfolder */'; put 'libname approval "&mpelocapprovals/&mperef";'; put 'data approval.&mperef;'; put 'set work.staging_ds;'; put 'run;'; put 'proc export data=approval.&mperef'; put 'outfile="&mpelocapprovals/&mperef/&mperef..csv"'; put 'dbms=csv'; put 'replace;'; put 'run;'; put '/* update the control dataset with relevant info */'; put 'data append_app;'; put 'if 0 then set &mpelib..mpe_submit;/* get formats */'; put 'call missing (of _all_);'; put 'TABLE_ID="&mperef";'; put 'submit_status_cd=''SUBMITTED'';'; put 'submitted_by_nm="%mf_getuser()";'; put 'base_lib="&libref";'; put 'base_ds="&ds";'; put 'submitted_on_dttm=&now;'; put 'submitted_reason_txt=symget(''submitted_reason_txt'');'; put 'input_vars=%mf_getattrn(approval.&mperef,NVARS);'; put 'input_obs=%mf_getattrn(approval.&mperef,NLOBS);'; put 'num_of_approvals_required=&NUM_OF_APPROVALS_REQUIRED;'; put 'num_of_approvals_remaining=&NUM_OF_APPROVALS_REQUIRED;'; put 'reviewed_by_nm='''';'; put 'reviewed_on_dttm=.;'; put 'run;'; put '%mp_lockanytable(LOCK,lib=&mpelib,ds=mpe_submit,'; put 'ref=%str(&mperef update in &_program),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc append base= &mpelib..mpe_submit data=append_app;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_submit,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '/* send email to REVIEW members */'; put '%put sending mpe_alerts;'; put '%mpe_alerts(alert_event=SUBMITTED'; put ', alert_lib=&libref'; put ', alert_ds=&ds'; put ', dsid=&mperef'; put ')'; put '/* DISABLE EMAIL FOR NOW'; put '%let b2=REASON: %quote(&submitted_reason_txt);'; put '%local URLNOTES;'; put '%if %length(¬es)>0 %then %let URLNOTES=%quote(%sysfunc(urlencode(¬es)));'; put '%let b3=%str(Click to review / approve: )%trim('; put ')%str(http://&_srvname:&_srvport&_url?_PROGRAM=/Web/approvals&)%trim('; put ')TABLEID=&dsid%str(&)BASETABLE=&libref..&ds%str(&)NOTES=&URLNOTES;'; put '%let b4=%str(Reference ID: &mperef);'; put '*/'; put '%put mpe_loader finishing up with syscc=&syscc;'; put '%if &syscc le 4 %then %do;'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'putlog ''Updating mpe_loads with the following query:'';'; put 'putlog "update &mpelib..mpe_loads set STATUS=''SUCCESS''";'; put 'putlog " , duration=" dur;'; put 'putlog " , processed_dttm=" now;'; put 'putlog " , approvals = ''&libref..&ds''";'; put 'putlog " where CSV_DIR=''&mperef'';";'; put 'run;'; put 'proc sql;'; put 'update &mpelib..mpe_loads set STATUS=''SUCCESS'''; put ', duration=&dur'; put ', processed_dttm=&now'; put ', approvals = "&libref..&ds"'; put 'where CSV_DIR="&mperef";'; put '%end;'; put '%else %do;'; put '%mpe_loadfail('; put 'status="FAILED - &syscc"'; put ',now=&now'; put ',approvals=&libref..&ds'; put ',mperef=&mperef'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '%mend mpe_loader;'; put '%macro mcf_init(func'; put ')/*/STORE SOURCE*/;'; put '%if not (%symexist(SASJS_PREFIX)) %then %do;'; put '%global SASJS_PREFIX;'; put '%let SASJS_PREFIX=SASJS;'; put '%end;'; put '%let func=%upcase(&func);'; put '/* the / character is just a seperator */'; put '%global &sasjs_prefix._FUNCTIONS;'; put '%if %index(&&&sasjs_prefix._FUNCTIONS,&func/)>0 %then %do;'; put '1'; put '%return;'; put '%end;'; put '%else %do;'; put '%let &sasjs_prefix._FUNCTIONS=&&&sasjs_prefix._FUNCTIONS &func/;'; put '0'; put '%end;'; put '%mend mcf_init;'; put '%macro mcf_getfmttype(wrap=NO'; put ',insert_cmplib=DEPRECATED'; put ',lib=WORK'; put ',cat=SASJS'; put ',pkg=UTILS'; put ')/*/STORE SOURCE*/;'; put '%local i var cmpval found;'; put '%if %mcf_init(mcf_getfmttype)=1 %then %return;'; put '%if &wrap=YES %then %do;'; put 'proc fcmp outlib=&lib..&cat..&pkg;'; put '%end;'; put 'function mcf_getfmttype(fmtnm $) $8;'; put 'if substr(fmtnm,1,1)=''$'' then return(''CHAR'');'; put 'else do;'; put '/* extract NAME */'; put 'length fmt $32;'; put 'fmt=scan(fmtnm,1,''.'');'; put 'do while ('; put 'substr(fmt,length(fmt),1) in (''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'',''0'')'; put ');'; put 'if length(fmt)=1 then fmt=''W'';'; put 'else fmt=substr(fmt,1,length(fmt)-1);'; put 'end;'; put '/* apply lookups */'; put 'if cats(fmt) in (''DATETIME'',''B8601DN'',''B8601DN'',''B8601DT'',''B8601DT'''; put ',''B8601DZ'',''B8601DZ'',''DATEAMPM'',''DTDATE'',''DTMONYY'',''DTWKDATX'',''DTYEAR'''; put ',''DTYYQC'',''E8601DN'',''E8601DN'',''E8601DT'',''E8601DT'',''E8601DZ'',''E8601DZ'''; put ',''NLDATM'') then return(''DATETIME'');'; put 'else if fmt in (''DATE'',''YYMMDD'',''B8601DA'',''B8601DA'',''DAY'',''DDMMYY'''; put ',''DDMMYYB'',''DDMMYYC'',''DDMMYYD'',''DDMMYYN'',''DDMMYYP'',''DDMMYYS'',''DDMMYYx'''; put ',''DOWNAME'',''E8601DA'',''E8601DA'',''JULDAY'',''JULIAN'',''MMDDYY'',''MMDDYYB'''; put ',''MMDDYYC'',''MMDDYYD'',''MMDDYYN'',''MMDDYYP'',''MMDDYYS'',''MMDDYYx'',''MMYY'''; put ',''MMYYC'',''MMYYD'',''MMYYN'',''MMYYP'',''MMYYS'',''MMYYx'',''MONNAME'',''MONTH'''; put ',''MONYY'',''PDJULG'',''PDJULI'',''QTR'',''QTRR'',''WEEKDATE'',''WEEKDATX'',''WEEKDAY'''; put ',''WEEKU'',''WEEKV'',''WEEKW'',''WORDDATE'',''WORDDATX'',''YEAR'',''YYMM'',''YYMMC'''; put ',''YYMMD'',''YYMMDDB'',''YYMMDDC'',''YYMMDDD'',''YYMMDDN'',''YYMMDDP'',''YYMMDDS'''; put ',''YYMMDDx'',''YYMMN'',''YYMMP'',''YYMMS'',''YYMMx'',''YYMON'',''YYQ'',''YYQC'',''YYQD'''; put ',''YYQN'',''YYQP'',''YYQR'',''YYQRC'',''YYQRD'',''YYQRN'',''YYQRP'',''YYQRS'',''YYQRx'''; put ',''YYQS'',''YYQx'',''YYQZ'',''NLDATE'') then return(''DATE'');'; put 'else if fmt in (''TIME'',''B8601LZ'',''B8601LZ'',''B8601TM'',''B8601TM'',''B8601TZ'''; put ',''B8601TZ'',''E8601LZ'',''E8601LZ'',''E8601TM'',''E8601TM'',''E8601TZ'',''E8601TZ'''; put ',''HHMM'',''HOUR'',''MMSS'',''TIMEAMPM'',''TOD'') then return(''TIME'');'; put 'else return(''NUM'');'; put 'end;'; put 'endsub;'; put '%if &wrap=YES %then %do;'; put 'quit;'; put '%end;'; put '/* insert the CMPLIB if not already there */'; put '%let cmpval=%sysfunc(getoption(cmplib));'; put '%let found=0;'; put '%do i=1 %to %sysfunc(countw(&cmpval,%str( %(%))));'; put '%let var=%scan(&cmpval,&i,%str( %(%)));'; put '%if &var=&lib..&cat %then %let found=1;'; put '%end;'; put '%if &found=0 %then %do;'; put 'options insert=(CMPLIB=(&lib..&cat));'; put '%end;'; put '%mend mcf_getfmttype;'; put '%macro mf_getVarFormat(libds /* two level ds name */'; put ', var /* variable name from which to return the format */'; put ', force=0'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vformat rc vlen vtype;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable format */'; put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let rc = %sysfunc(close(&dsid));'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* supply a default if no format available */'; put '%if %length(&vformat)<2 & &force=1 %then %do;'; put '%let vlen = %sysfunc(varlen(&dsid, &vnum));'; put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%if &vtype=C %then %let vformat=$&vlen..;'; put '%else %let vformat=best.;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable format */'; put '&vformat'; put '%mend mf_getVarFormat;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mp_ds2csv(ds'; put ',dlm=COMMA'; put ',outref=0'; put ',outfile='; put ',outencoding=0'; put ',headerformat=LABEL'; put ',termstr=CRLF'; put ')/*/STORE SOURCE*/;'; put '%local outloc delim i varlist var vcnt vat dsv vcom vmiss fmttype vfmt;'; put '%if not %sysfunc(exist(&ds)) %then %do;'; put '%put %str(WARN)ING: &ds does not exist;'; put '%return;'; put '%end;'; put '%if %index(&ds,.)=0 %then %let ds=WORK.&ds;'; put '%if &outencoding=0 %then %let outencoding=;'; put '%else %let outencoding=encoding=&outencoding;'; put '%if &outref=0 %then %let outloc=&outfile;'; put '%else %let outloc=&outref;'; put '%if &headerformat=SASJS %then %do;'; put '%let delim=",";'; put '%let termstr=CRLF;'; put '%mcf_getfmttype(wrap=YES)'; put '%end;'; put '%else %if &dlm=COMMA %then %let delim=",";'; put '%else %let delim=";";'; put '/* credit to mjsq - https://stackoverflow.com/a/55642267 */'; put '/* first get headers */'; put 'data _null_;'; put 'file &outloc &outencoding lrecl=32767 termstr=&termstr;'; put 'length header $ 2000 varnm vfmt $32 dlm $1 fmttype $8;'; put 'call missing(of _all_);'; put 'dsid=open("&ds.","i");'; put 'num=attrn(dsid,"nvars");'; put 'dlm=&delim;'; put 'do i=1 to num;'; put 'varnm=upcase(varname(dsid,i));'; put 'if i=num then dlm='''';'; put '%if &headerformat=NAME %then %do;'; put 'header=cats(varnm,dlm);'; put '%end;'; put '%else %if &headerformat=LABEL %then %do;'; put 'header = cats(coalescec(varlabel(dsid,i),varnm),dlm);'; put '%end;'; put '%else %if &headerformat=SASJS %then %do;'; put 'vlen=varlen(dsid,i);'; put 'if vartype(dsid,i)=''C'' then header=cats(varnm,'':$char'',vlen,''.'');'; put 'else do;'; put 'vfmt=coalescec(varfmt(dsid,i),''0'');'; put 'fmttype=mcf_getfmttype(vfmt);'; put 'if fmttype=''DATE'' then header=cats(varnm,'':date9.'');'; put 'else if fmttype=''DATETIME'' then header=cats(varnm,'':E8601DT26.6'');'; put 'else if fmttype=''TIME'' then header=cats(varnm,'':TIME12.'');'; put '/**'; put '* there is not much point importing a short length numeric like this,'; put '* eg with best4., as the resulting variable will still be stored as'; put '* length 8. We need a length or format statement to ensure variable'; put '* is creatd with the smaller length...'; put '**/'; put 'else if vlen<8 then header=cats(varnm,'':best'',vlen,''.'');'; put 'else header=cats(varnm,'':best.'');'; put 'end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Invalid headerformat value (&headerformat);'; put '%return;'; put '%end;'; put 'put header @;'; put 'end;'; put 'rc=close(dsid);'; put 'run;'; put '%let varlist=%mf_getvarlist(&ds);'; put '%let vcnt=%sysfunc(countw(&varlist));'; put '/**'; put '* The $quote modifier (without a width) will take the length from the variable'; put '* and increase by two. However this will lead to truncation where the value'; put '* contains double quotes (which are doubled up). To get around this, scan the'; put '* data to see the max number of double quotes, so that the appropriate width'; put '* can be applied in the subsequent step.'; put '*/'; put 'data _null_;'; put 'set &ds end=last;'; put '%do i=1 %to &vcnt;'; put '%let var=%scan(&varlist,&i);'; put '%local vlen&i;'; put '%if %mf_getvartype(&ds,&var)=C %then %do;'; put '%let dsv1=%mf_getuniquename(prefix=csvcol1_);'; put '%let dsv2=%mf_getuniquename(prefix=csvcol2_);'; put 'retain &dsv1 0;'; put '&dsv2=length(&var)+countc(&var,''"'');'; put 'if &dsv2>&dsv1 then &dsv1=&dsv2;'; put 'if last then call symputx('; put '"vlen&i"'; put '/* should be no shorter than varlen, and no longer than 32767 */'; put ',cats(''$quote'',min(&dsv1+2,32767),''.'')'; put ',''l'''; put ');'; put '%end;'; put '%end;'; put '%let vat=@;'; put '%let vcom=&delim;'; put '%let vmiss=%mf_getuniquename(prefix=csvcol3_);'; put '/* next, export data */'; put 'data _null_;'; put 'set &ds.;'; put 'file &outloc mod dlm=&delim dsd &outencoding lrecl=32767 termstr=&termstr;'; put 'if _n_=1 then &vmiss='' '';'; put '%do i=1 %to &vcnt;'; put '%let var=%scan(&varlist,&i);'; put '%if &i=&vcnt %then %do;'; put '%let vat=;'; put '%let vcom=;'; put '%end;'; put '%if %mf_getvartype(&ds,&var)=N %then %do;'; put '%if &headerformat = SASJS %then %do;'; put '%let vcom=&delim;'; put '%let fmttype=%sysfunc(mcf_getfmttype(%mf_getvarformat(&ds,&var)0));'; put '%if &fmttype=DATE %then %let vfmt=DATE9.;'; put '%else %if &fmttype=DATETIME %then %let vfmt=E8601DT26.6;'; put '%else %if &fmttype=TIME %then %let vfmt=TIME12.;'; put '%else %do;'; put '%let vfmt=;'; put '%let vcom=;'; put '%end;'; put '%end;'; put '%else %let vcom=;'; put '/* must use period - in order to work in both 9.4 and Viya 3.5 */'; put 'if missing(&var) and &var ne %sysfunc(getoption(MISSING)) then do;'; put '&vmiss=cats(''.'',&var);'; put 'put &vmiss &vat;'; put 'end;'; put 'else put &var &vfmt &vcom &vat;'; put '%end;'; put '%else %do;'; put '%if &i ne &vcnt %then %let vcom=&delim;'; put 'put &var &&vlen&i &vcom &vat;'; put '%end;'; put '%end;'; put 'run;'; put '%mend mp_ds2csv;'; put '%macro mf_islibds(libds'; put ')/*/STORE SOURCE*/;'; put '%local regex;'; put '%let regex=%sysfunc(prxparse(%str(/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i)));'; put '%sysfunc(prxmatch(®ex,&libds))'; put '%mend mf_islibds;'; put '%macro mf_getfilesize(fpath=,libds=0,format=NO'; put ')/*/STORE SOURCE*/;'; put '%local rc fid fref bytes dsid lib vnum;'; put '%if &libds ne 0 %then %do;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put '%let dsid=%sysfunc(open('; put 'sashelp.vtable(where=(libname="&lib" and memname="%scan(&libds,-1,.)")'; put 'keep=libname memname filesize'; put ')'; put '));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,FILESIZE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let bytes=%sysfunc(getvarn(&dsid,&vnum));'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%else %put &sysmacroname: &libds could not be opened! %sysfunc(sysmsg());'; put '%end;'; put '%else %do;'; put '%let rc=%sysfunc(filename(fref,&fpath));'; put '%let fid=%sysfunc(fopen(&fref));'; put '%let bytes=%sysfunc(finfo(&fid,File Size (bytes)));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(fref));'; put '%end;'; put '%if &format=NO %then %do;'; put '&bytes'; put '%end;'; put '%else %do;'; put '%sysfunc(INPUTN(&bytes, best.),sizekmg.)'; put '%end;'; put '%mend mf_getfilesize ;'; put '%macro mcf_length(wrap=NO'; put ',insert_cmplib=DEPRECATED'; put ',lib=WORK'; put ',cat=SASJS'; put ',pkg=UTILS'; put ')/*/STORE SOURCE*/;'; put '%local i var cmpval found;'; put '%if %mcf_init(mcf_length)=1 %then %return;'; put '%if &wrap=YES %then %do;'; put 'proc fcmp outlib=&lib..&cat..&pkg;'; put '%end;'; put 'function mcf_length(var);'; put 'if var=. then len=0;'; put 'else if missing(var) or trunc(var,3)=var then len=3;'; put 'else if trunc(var,4)=var then len=4;'; put 'else if trunc(var,5)=var then len=5;'; put 'else if trunc(var,6)=var then len=6;'; put 'else if trunc(var,7)=var then len=7;'; put 'else len=8;'; put 'return(len);'; put 'endsub;'; put '%if &wrap=YES %then %do;'; put 'quit;'; put '%end;'; put '/* insert the CMPLIB if not already there */'; put '%let cmpval=%sysfunc(getoption(cmplib));'; put '%let found=0;'; put '%do i=1 %to %sysfunc(countw(&cmpval,%str( %(%))));'; put '%let var=%scan(&cmpval,&i,%str( %(%)));'; put '%if &var=&lib..&cat %then %let found=1;'; put '%end;'; put '%if &found=0 %then %do;'; put 'options insert=(CMPLIB=(&lib..&cat));'; put '%end;'; put '%mend mcf_length;'; put '%macro mf_getvarcount(libds,typefilter=A'; put ')/*/STORE SOURCE*/;'; put '%local dsid nvars rc outcnt x;'; put '%let dsid=%sysfunc(open(&libds));'; put '%let nvars=.;'; put '%let outcnt=0;'; put '%let typefilter=%upcase(&typefilter);'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &typefilter=A %then %let outcnt=&nvars;'; put '%else %if &nvars>0 %then %do x=1 %to &nvars;'; put '/* increment based on variable type */'; put '%if %sysfunc(vartype(&dsid,&x))=&typefilter %then %do;'; put '%let outcnt=%eval(&outcnt+1);'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put unable to open &libds (rc=&dsid);'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '&outcnt'; put '%mend mf_getvarcount;'; put '%macro mp_getmaxvarlengths('; put 'libds'; put ',num2char=NO'; put ',outds=work.mp_getmaxvarlengths'; put ')/*/STORE SOURCE*/;'; put '%local vars prefix x var fmt srcds;'; put '%let vars=%mf_getvarlist(libds=&libds);'; put '%let prefix=%substr(%mf_getuniquename(),1,25);'; put '%let num2char=%upcase(&num2char);'; put '%if &num2char=NO %then %do;'; put '/* compile length function for numeric fields */'; put '%mcf_length(wrap=YES, insert_cmplib=YES)'; put '%end;'; put '%if &num2char=NO'; put 'and ("%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5")'; put 'and %mf_getvarcount(&libds,typefilter=N) gt 0'; put '%then %do;'; put '/* custom functions not supported in summary operations */'; put '%let srcds=%mf_getuniquename();'; put 'data &srcds/view=&srcds;'; put 'set &libds;'; put '%do x=1 %to %sysfunc(countw(&vars,%str( )));'; put '%let var=%scan(&vars,&x);'; put '%if %mf_getvartype(&libds,&var)=N %then %do;'; put '&prefix.&x=mcf_length(&var);'; put '%end;'; put '%end;'; put 'run;'; put '%end;'; put '%else %let srcds=&libds;'; put 'proc sql;'; put 'create table &outds (rename=('; put '%do x=1 %to %sysfunc(countw(&vars,%str( )));'; put '&prefix.&x=%scan(&vars,&x)'; put '%end;'; put '))'; put 'as select'; put '%do x=1 %to %sysfunc(countw(&vars,%str( )));'; put '%let var=%scan(&vars,&x);'; put '%if &x>1 %then ,;'; put '%if %mf_getvartype(&libds,&var)=C %then %do;'; put 'max(lengthn(&var)) as &prefix.&x'; put '%end;'; put '%else %if &num2char=YES %then %do;'; put '%let fmt=%mf_getvarformat(&libds,&var);'; put '%put fmt=&fmt;'; put '%if %str(&fmt)=%str() %then %do;'; put 'max(lengthn(cats(&var))) as &prefix.&x'; put '%end;'; put '%else %do;'; put 'max(lengthn(put(&var,&fmt))) as &prefix.&x'; put '%end;'; put '%end;'; put '%else %do;'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then %do;'; put 'max(&prefix.&x) as &prefix.&x'; put '%end;'; put '%else %do;'; put 'max(mcf_length(&var)) as &prefix.&x'; put '%end;'; put '%end;'; put '%end;'; put 'from &srcds;'; put 'proc transpose data=&outds'; put 'out=&outds(rename=(_name_=NAME COL1=MAXLEN));'; put 'run;'; put '%mend mp_getmaxvarlengths;'; put '%macro mp_ds2squeeze('; put 'libds,'; put 'outds=work.mp_ds2squeeze,'; put 'mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg source;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %do;'; put '%let dbg=*;'; put '%let source=/source2;'; put '%end;'; put '%local optval ds fref startsize;'; put '%let ds=%mf_getuniquename();'; put '%let fref=%mf_getuniquefileref();'; put '%let startsize=%mf_getfilesize(libds=&libds,format=yes);'; put '%mp_getmaxvarlengths(&libds,outds=&ds)'; put 'data _null_;'; put 'set &ds end=last;'; put 'file &fref;'; put '/* grab the types */'; put 'retain dsid;'; put 'if _n_=1 then dsid=open("&libds",''is'');'; put 'if dsid le 0 then do;'; put 'msg=sysmsg();'; put 'put msg=;'; put 'stop;'; put 'end;'; put 'type=vartype(dsid,varnum(dsid, name));'; put 'if last then rc=close(dsid);'; put '/* write out the length statement */'; put 'if _n_=1 then put ''length '';'; put 'length len $6;'; put 'if type=''C'' then do;'; put 'if maxlen=0 then len=''$1'';'; put 'else len=cats(''$'',maxlen);'; put 'end;'; put 'else do;'; put 'if maxlen=0 then len=''3'';'; put 'else len=cats(maxlen);'; put 'end;'; put 'put '' '' name '' '' len;'; put 'if last then put '';'';'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data &outds;'; put '%inc &fref &source;'; put 'set &libds;'; put 'run;'; put 'options varlenchk=&optval;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds;'; put 'filename &fref clear;'; put '%end;'; put '%put &sysmacroname: &libds was &startsize;'; put '%put &sysmacroname: &outds is %mf_getfilesize(libds=&outds,format=yes);'; put '%mend mp_ds2squeeze;'; put '/** @cond */'; put '%macro mp_stripdiffs(libds'; put ',loadref'; put ',difftable'; put ',filtervar=0'; put ',outds=work.mp_stripdiffs'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '%let libds=%upcase(&libds);'; put '/* safety checks */'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(SYSCC=&syscc on entry. Clean session required!)'; put ')'; put '%let libds=%upcase(&libds);'; put '%mp_abort(iftrue= (%mf_islibds(&libds)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid library.dataset reference - %superq(libds))'; put ')'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 ds5 fref1 filterstr;'; put '%let fref1=%mf_getuniquefileref();'; put '%if &filtervar ne 0 %then %let filterstr=%superq(&filtervar);'; put '%else %let filterstr=%str(1=1);'; put '/* get timestamp of the diff to be reverted */'; put '%local ts;'; put 'proc sql noprint;'; put 'select put(processed_dttm,datetime19.6) into: ts'; put 'from &difftable where load_ref="&loadref";'; put '%mp_abort(iftrue= (&sqlobs=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Load ref %superq(loadref) not found!)'; put ')'; put '/* extract diffs for this base table from this timestamp onwards */'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_diffs));'; put 'create table &ds1 (drop=libref dsn) as'; put 'select * from &difftable'; put 'where upcase(cats(libref))="%scan(&libds,1,.)"'; put 'and upcase(cats(dsn))="%scan(&libds,2,.)"'; put 'and processed_dttm ge "&ts"dt'; put 'order by processed_dttm desc, key_hash, is_pk;'; put '/* extract key values only */'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_pks));'; put '%local keyhash processed;'; put '%let keyhash=%upcase(%mf_getuniquename(prefix=mpsdvar_keyhash));'; put '%let processed=%upcase(%mf_getuniquename(prefix=mpsdvar_processed));'; put 'create table &ds2 as'; put 'select key_hash as &keyhash,'; put 'tgtvar_nm,'; put 'tgtvar_type,'; put 'coalescec(oldval_char,newval_char) as charval,'; put 'coalesce(oldval_num, newval_num) as numval,'; put 'processed_dttm as &processed'; put 'from &ds1'; put 'where is_pk=1'; put 'order by &keyhash, &processed;'; put '/* grab pk values */'; put '%local pk;'; put 'select distinct upcase(tgtvar_nm) into: pk separated by '' '' from &ds2;'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_keychar));'; put 'proc transpose data=&ds2(where=(tgtvar_type=''C''))'; put 'out=&ds3(drop=_name_);'; put 'by &keyhash &processed;'; put 'id TGTVAR_NM;'; put 'var charval;'; put 'run;'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_keynum));'; put 'proc transpose data=&ds2(where=(tgtvar_type=''N''))'; put 'out=&ds4(drop=_name_);'; put 'by &keyhash &processed;'; put 'id TGTVAR_NM;'; put 'var numval;'; put 'run;'; put '/* shorten the lengths */'; put '%mp_ds2squeeze(&ds3,outds=&ds3)'; put '%mp_ds2squeeze(&ds4,outds=&ds4)'; put '/* now merge to get all key values and de-dup */'; put '%let ds5=%upcase(work.%mf_getuniquename(prefix=mpsd_merged));'; put 'data &ds5;'; put 'length &keyhash $32 &processed 8;'; put 'merge &ds3 &ds4;'; put 'by &keyhash &processed;'; put 'if not missing(&keyhash);'; put 'run;'; put 'proc sort data=&ds5 nodupkey;'; put 'by &pk;'; put 'run;'; put '/* join to base table for preliminary stage DS */'; put 'proc sql;'; put 'create table &outds as select "No " as _____DELETE__THIS__RECORD_____'; put '%do x=1 %to %sysfunc(countw(&pk,%str( )));'; put ',a.%scan(&pk,&x,%str( ))'; put '%end;'; put '%local notpkcols;'; put '%let notpkcols=%upcase(%mf_getvarlist(&libds));'; put '%let notpkcols=%mf_wordsinstr1butnotstr2(str1=¬pkcols,str2=&pk);'; put '%do x=1 %to %sysfunc(countw(¬pkcols,%str( )));'; put ',b.%scan(¬pkcols,&x,%str( ))'; put '%end;'; put 'from &ds5 a'; put 'left join &libds (where=(&filterstr)) b'; put 'on 1=1'; put '%do x=1 %to %sysfunc(countw(&pk,%str( )));'; put 'and a.%scan(&pk,&x,%str( ))=b.%scan(&pk,&x,%str( ))'; put '%end;'; put ';'; put '/* create SAS code to apply to stage_ds */'; put 'data _null_;'; put 'set &ds1;'; put 'file &fref1 lrecl=33000;'; put 'length charval $32767;'; put 'if _n_=1 then put ''proc sql noprint;'';'; put 'by descending processed_dttm key_hash is_pk;'; put 'if move_type=''M'' then do;'; put 'if first.key_hash then do;'; put 'put "update &outds set " @@;'; put 'end;'; put 'if IS_PK=0 then do;'; put 'put " " tgtvar_nm ''='' @@;'; put 'cnt=count(oldval_char,''"'');'; put 'charval=quote(trim(substr(oldval_char,1,32765-cnt)));'; put 'if tgtvar_type=''C'' then put charval @@;'; put 'else put oldval_num @@;'; put 'if not last.is_pk then put '','';'; put 'end;'; put 'else do;'; put 'if first.is_pk then put " where 1=1 " @@;'; put 'put " and " tgtvar_nm ''='' @@;'; put 'cnt=count(oldval_char,''"'');'; put 'charval=quote(trim(substr(oldval_char,1,32765-cnt)));'; put 'if tgtvar_type=''C'' then put charval @@;'; put 'else put oldval_num @@;'; put 'end;'; put 'end;'; put 'else if move_type=''A'' then do;'; put 'if first.key_hash then do;'; put 'put "update &outds set _____DELETE__THIS__RECORD_____=''Yes'' where 1=1 "@@;'; put 'end;'; put '/* gating if - as only need PK now */'; put 'if is_pk=1;'; put 'put '' AND '' tgtvar_nm ''='' @@;'; put 'cnt=count(newval_char,''"'');'; put 'charval=quote(trim(substr(newval_char,1,32765-cnt)));'; put 'if tgtvar_type=''C'' then put charval @@;'; put 'else put newval_num @@;'; put 'end;'; put 'else if move_type=''D'' then do;'; put 'if first.key_hash then do;'; put 'put "update &outds set _____DELETE__THIS__RECORD_____=''No'' " @@;'; put 'end;'; put 'if IS_PK=0 then do;'; put 'put " ," tgtvar_nm ''='' @@;'; put 'cnt=count(oldval_char,''"'');'; put 'charval=quote(trim(substr(oldval_char,1,32765-cnt)));'; put 'if tgtvar_type=''C'' then put charval @@;'; put 'else put oldval_num @@;'; put 'end;'; put 'else do;'; put 'if first.is_pk then put " where 1=1 " @@;'; put 'put " and " tgtvar_nm ''='' @@;'; put 'cnt=count(oldval_char,''"'');'; put 'charval=quote(trim(substr(oldval_char,1,32765-cnt)));'; put 'if tgtvar_type=''C'' then put charval @@;'; put 'else put oldval_num @@;'; put 'end;'; put 'end;'; put 'if last.key_hash then put '';'';'; put 'run;'; put '/* apply the modification statements */'; put '%inc &fref1/source2 lrecl=33000;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4, &ds5;'; put 'file &fref1 clear;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'infile &fref1;'; put 'input;'; put 'if _n_=1 then putlog "Contents of SQL adjustments";'; put 'putlog _infile_;'; put 'run;'; put '%end;'; put '%mend mp_stripdiffs;'; put '/** @endcond */'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file restore.sas'; put '@brief Restores a data version'; put '@details Only applies if the history is stored in the audit table'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li mf_nobs.sas'; put '@li mp_abort.sas'; put '@li mp_ds2csv.sas'; put '@li mp_stripdiffs.sas'; put '@li mpeinit.sas'; put '@li mpe_checkrestore.sas'; put '@li mpe_loader.sas'; put '

Service Inputs

'; put '
restore_in
'; put '|LOAD_REF:$32|'; put '|---|'; put '|DCXXXXXX|'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%let loadref=;'; put 'data _null_;'; put 'set work.restore_in;'; put 'call symputx(''loadref'',load_ref);'; put 'run;'; put '/**'; put '* Check if user has basic access permission to RESTORE the table'; put '*/'; put '%put checking access;'; put '%global allow_restore reason;'; put '%mpe_checkrestore(&loadref,outresult=ALLOW_RESTORE,outreason=REASON)'; put '%mp_abort(iftrue= (&ALLOW_RESTORE ne YES)'; put ',mac=&_program..sas'; put ',msg=%str(Cannot restore because: &reason)'; put ')'; put '/* grab the base DS */'; put 'proc sql noprint;'; put 'select cats(base_lib,''.'',base_ds) into: tgtds'; put 'from &mpelib..mpe_submit'; put 'where TABLE_ID="&loadref";'; put '/* find the audit table */'; put 'select coalescec(audit_libds,"&mpelib..MPE_AUDIT"), loadtype, var_txto'; put 'into: difftable, :loadtype, :txto'; put 'from &mpelib..MPE_TABLES'; put 'where libref="%scan(&tgtds,1,.)"'; put '& dsn="%scan(&tgtds,2,.)"'; put '& &dc_dttmtfmt0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc after stripdiffs)'; put ')'; put '%mp_abort(iftrue= (%mf_nobs(work.mp_stripdiffs)=0)'; put ',mac=&_program..sas'; put ',msg=%str(THERE ARE NO DIFFERENCES TO APPLY)'; put ')'; put '/* create a new load ref */'; put '%let mperef=DC%left(%sysfunc(datetime(),B8601DT19.3))_%substr('; put '%sysfunc(ranuni(0)),3,6)_%substr(%str(&sysjobid ),1,4);'; put '/* Create package folder */'; put '%let dir=&mpelocapprovals/&mperef;'; put '%mf_mkdir(&dir)'; put 'options notes mprint;'; put 'libname approve "&dir";'; put '/* take copy of macvars */'; put 'data _null_;'; put 'file "&dir/macvars.sas";'; put 'set sashelp.vmacro;'; put 'where scope=''GLOBAL'';'; put 'put ''%let '' name ''='' value '';'';'; put 'run;'; put '/* copy the diffs dataset */'; put 'data approve.jsdset;'; put 'length _____DELETE__THIS__RECORD_____ $3;'; put 'if 0 then call missing(_____DELETE__THIS__RECORD_____);'; put 'set work.mp_stripdiffs;'; put 'run;'; put '/* export to csv */'; put '%mp_ds2csv(approve.jsdset'; put ',dlm=COMMA'; put ',outfile="&dir/%trim(&tgtds).csv"'; put ',outencoding="UTF-8"'; put ',headerformat=NAME'; put ',termstr=CRLF'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc when writing the CSV)'; put ')'; put '%mpe_loader(mperef=&mperef'; put ',submitted_reason_txt=Restoring &loadref'; put ',dc_dttmtfmt=&dc_dttmtfmt'; put ')'; put '%mp_abort(mode=INCLUDE)'; put '%mp_abort('; put 'iftrue=(%sysfunc(fileexist(%sysfunc(pathname(work))/mf_abort.error))=1)'; put ',mac=&_program..sas'; put ',msg=%str(mf_abort.error=1)'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '/* send relevant SUCCESS values */'; put 'data work.restore_out;'; put 'loadref="&mperef";'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,restore_out)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=stagedata; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mpe_alerts(alert_event='; put ', alert_lib='; put ', alert_ds='; put ', dsid='; put ');'; put '/* exit if not configured */'; put '%global DC_EMAIL_ALERTS;'; put '%if &DC_EMAIL_ALERTS ne YES %then %do;'; put '%put DCNOTE: Email alerts are not configured;'; put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);'; put '%return;'; put '%end;'; put '%let alert_event=%upcase(&alert_event);'; put '%let alert_lib=%upcase(&alert_lib);'; put '%let alert_ds=%upcase(&alert_ds);'; put '%let from_user=%mf_getuser();'; put '/* get users TO which the email should be sent */'; put 'proc sql noprint;'; put 'create table work.users as select distinct a.alert_user,'; put 'b.user_displayname,'; put 'b.user_email'; put 'from &mpelib..mpe_alerts'; put '(where=(&dc_dttmtfmt. lt tx_to)) a'; put 'left join &mpelib..mpe_emails'; put '(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))'; put 'where a.alert_event in ("&alert_event","*ALL*")'; put 'and a.alert_lib in ("&alert_lib","*ALL*")'; put 'and a.alert_ds in ("&alert_ds","*ALL*");'; put '/* ensure the submitter is included on the email */'; put '%local isThere userdisp user_eml;'; put '%let isThere=0;'; put 'select count(*) into: isThere from &syslast where alert_user="&from_user";'; put '%if &isThere=0 %then %do;'; put 'select user_displayname, user_email'; put 'into: userdisp trimmed, :user_eml trimmed'; put 'from &mpelib..mpe_emails'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and user_name="&from_user";'; put 'insert into work.users'; put 'set alert_user="&from_user"'; put ',user_displayname="&userdisp"'; put ',user_email="&user_eml";'; put '%end;'; put '/* if no email / displayname is provided, then extract from metadata */'; put 'data work.emails;'; put 'set work.users;'; put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;'; put '/* get displayname */'; put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");'; put 'if metadata_getnobj(text,1,uri)<=0 then do;'; put 'putlog "DCWARN: &from_user not found";'; put 'return;'; put 'end;'; put 'else if user_displayname = '''' then do;'; put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;'; put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';'; put 'end;'; put 'end;'; put 'if index(user_email,''@'') then return;'; put '/* get email from metadata if not in input table */'; put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;'; put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";'; put 'end;'; put 'else do;'; put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;'; put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';'; put 'end;'; put 'end;'; put '/* only keep valid emails */'; put 'if index(user_email,''@'') ;'; put '/* dump contents for debugging */'; put 'if _n_<21 then putlog (_all_)(=);'; put 'run;'; put '%local emails;'; put 'proc sql noprint;'; put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;'; put '/* exit if nobody to email */'; put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;'; put '%put NOTE: No alerts configured (mpe_alerts.sas);'; put '%return;'; put '%end;'; put '/* display email options */'; put 'data _null_;'; put 'set sashelp.voption(where=(group=''EMAIL''));'; put 'put optname ''='' setting;'; put 'run;'; put 'filename __out email (&emails)'; put 'subject="Table &alert_lib..&alert_ds has been &alert_event";'; put '%local SUBMITTED_TXT;'; put '%if &alert_event=SUBMITTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_submit;'; put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';'; put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been proposed by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''SUBMITTED_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=APPROVED %then %do;'; put '/* there is no approval message */'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been approved by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=REJECTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_review;'; put 'where table_id="&dsid" and review_status_id=''REJECTED'';'; put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been rejected by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''REVIEW_REASON_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put 'filename __out clear;'; put '%mend mpe_alerts ;'; put '%macro mpe_xlmapvalidate(mperef,inds,dclib,tgtds);'; put '%local ismap;'; put 'proc sql noprint;'; put 'select count(*) into: ismap'; put 'from &dclib..mpe_xlmap_info'; put 'where XLMAP_TARGETLIBDS="&tgtds" and &dc_dttmtfmt. le TX_TO ;'; put '%if "&tgtds"="&dclib..MPE_XLMAP_DATA" or &ismap>0 %then %do;'; put 'data &inds;'; put 'set &inds;'; put 'LOAD_REF="&mperef";'; put 'run;'; put '%end;'; put '%mend mpe_xlmapvalidate;'; put '%macro mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=%sysfunc(datetime())'; put ',approvals='; put ',mperef='; put ',reason_txt='; put ',mac=mpe_loadfail.sas'; put ',dc_dttmtfmt=E8601DT26.6'; put ');'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'update &mpelib..mpe_loads'; put 'set STATUS=symget(''status'')'; put ', duration=&dur'; put ', processed_dttm=&dc_dttmtfmt.'; put ', approvals = symget(''approvals'')'; put ', reason_txt= symget(''reason_txt'')'; put 'where CSV_DIR="&mperef";'; put '%let syscc=666;'; put '%mp_abort(msg=%superq(status)\n%superq(reason_txt),mac=&mac)'; put '%mend mpe_loadfail;'; put '%macro dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; put ',outref=&outref'; put ')'; put '%mend dc_getservicecode;'; put '%macro mp_include(fileref'; put ',prefix=_'; put ',opts=SOURCE2'; put ',errds=work.mp_abort_errds'; put ')/*/STORE SOURCE*/;'; put '/* prepare precode */'; put '%local tempref;'; put '%let tempref=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &tempref;'; put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));'; put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';'; put 'name=scan(xpath,-1,''/\'');'; put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';'; put 'path=subpad(xpath,1,length(xpath)-length(name)-1);'; put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';'; put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";'; put 'run;'; put '/* prepare the errds */'; put 'data &errds;'; put 'length msg mac $1000;'; put 'call missing(msg,mac);'; put 'iftrue=''1=0'';'; put 'run;'; put '/* include the include */'; put '%inc &tempref &fileref/&opts;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)'; put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)'; put ')'; put 'filename &tempref clear;'; put '%mend mp_include;'; put '%macro mpe_runhook(hookvar);'; put '%local pgmloc pgmtype;'; put '%let pgmtype=0;'; put '%put &sysmacroname: &=hookvar;'; put '%if %length(&&&hookvar)>0 %then %do;'; put '%put &sysmacroname: Executing &&&hookvar;'; put 'data _null_;'; put 'rule_value=symget("&hookvar");'; put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;'; put 'call symputx(''pgmtype'',''PGM'');'; put 'call symputx(''pgmloc'',rule_value);'; put 'end;'; put 'else do;'; put 'apploc="%mf_getapploc()";'; put 'if substr(rule_value,1,1) ne ''/'''; put 'then rule_value=cats(apploc,''/'',rule_value);'; put 'call symputx(''pgmloc'',rule_value);'; put 'call symputx(''pgmtype'',''JOB'');'; put 'end;'; put 'run;'; put '%if &pgmtype=PGM %then %do;'; put 'filename sascode "&pgmloc";'; put '%end;'; put '%else %do;'; put '%dc_getservicecode(loc=&pgmloc'; put ',outref=sascode'; put ')'; put '%end;'; put '/* the below script will need to modify work.STAGING_DS */'; put '%local x; %let x=; /* legacy feature */'; put '%mp_include(sascode)'; put '%end;'; put '%mend mpe_runhook;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_mkdir(dir'; put ')/*/STORE SOURCE*/;'; put '%local lastchar child parent;'; put '%let lastchar = %substr(&dir, %length(&dir));'; put '%if (%bquote(&lastchar) eq %str(:)) %then %do;'; put '/* Cannot create drive mappings */'; put '%return;'; put '%end;'; put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;'; put '/* last char is a slash */'; put '%if (%length(&dir) eq 1) %then %do;'; put '/* one single slash - root location is assumed to exist */'; put '%return;'; put '%end;'; put '%else %do;'; put '/* strip last slash */'; put '%let dir = %substr(&dir, 1, %length(&dir)-1);'; put '%end;'; put '%end;'; put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;'; put '/* directory does not exist so prepare to create */'; put '/* first get the childmost directory */'; put '%let child = %scan(&dir, -1, %str(/\:));'; put '/*'; put 'If child name = path name then there are no parents to create. Else'; put 'they must be recursively scanned.'; put '*/'; put '%if (%length(&dir) gt %length(&child)) %then %do;'; put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));'; put '%mf_mkdir(&parent)'; put '%end;'; put '/*'; put 'Now create the directory. Complain loudly of any errs.'; put '*/'; put '%let dname = %sysfunc(dcreate(&child, &parent));'; put '%if (%bquote(&dname) eq ) %then %do;'; put '%put %str(ERR)OR: could not create &parent + &child;'; put '%abort cancel;'; put '%end;'; put '%else %do;'; put '%put Directory created: &dir;'; put '%end;'; put '%end;'; put '/* exit quietly if directory did exist.*/'; put '%mend mf_mkdir;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_dirlist(path=%sysfunc(pathname(work))'; put ', fref=0'; put ', outds=work.mp_dirlist'; put ', getattrs=NO'; put ', showparent=NO'; put ', maxdepth=0'; put ', level=0 /* The level of recursion to perform. For internal use only. */'; put ')/*/STORE SOURCE*/;'; put '%let getattrs=%upcase(&getattrs)XX;'; put '/* temp table */'; put '%local out_ds;'; put 'data;run;'; put '%let out_ds=%str(&syslast);'; put '/* drop main (top) table if it exists */'; put '%if &level=0 %then %do;'; put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)'; put '%end;'; put 'data &out_ds(compress=no'; put 'keep=file_or_folder filepath filename ext msg directory level'; put ');'; put 'length directory filepath $2000 fref fref2 $8 file_or_folder $6 filename $255'; put 'ext $20 msg $200 foption $16;'; put 'if _n_=1 then call missing(of _all_);'; put 'retain level &level;'; put '%if &fref=0 %then %do;'; put 'rc = filename(fref, "&path");'; put '%end;'; put '%else %do;'; put 'fref="&fref";'; put 'rc=0;'; put '%end;'; put 'if rc = 0 then do;'; put 'did = dopen(fref);'; put 'if did=0 then do;'; put 'putlog "NOTE: This directory is empty, or does not exist - &path";'; put 'msg=sysmsg();'; put 'put (_all_)(=);'; put 'stop;'; put 'end;'; put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */'; put 'numopts=doptnum(did);'; put 'do i=1 to numopts;'; put 'foption=doptname(did,i);'; put 'if foption=:''Directory'' then i=numopts;'; put 'end;'; put 'directory=dinfo(did,foption);'; put 'rc = filename(fref);'; put 'end;'; put 'else do;'; put 'msg=sysmsg();'; put 'put _all_;'; put 'stop;'; put 'end;'; put 'dnum = dnum(did);'; put 'do i = 1 to dnum;'; put 'filename = dread(did, i);'; put 'filepath=cats(directory,''/'',filename);'; put 'rc = filename(fref2,filepath);'; put 'midd=dopen(fref2);'; put 'dmsg=sysmsg();'; put 'if did > 0 then file_or_folder=''folder'';'; put 'rc=dclose(midd);'; put 'midf=fopen(fref2);'; put 'fmsg=sysmsg();'; put 'if midf > 0 then file_or_folder=''file'';'; put 'rc=fclose(midf);'; put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')'; put 'then file_or_folder=''file'';'; put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';'; put 'else if file_or_folder='''' then file_or_folder=''locked'';'; put 'if file_or_folder=''file'' then do;'; put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);'; put 'if filename = ext then ext = '' '';'; put 'end;'; put 'else do;'; put 'ext='''';'; put 'file_or_folder=''folder'';'; put 'end;'; put 'output;'; put 'end;'; put 'rc = dclose(did);'; put '%if &showparent=YES and &level=0 %then %do;'; put 'filepath=directory;'; put 'file_or_folder=''folder'';'; put 'ext='''';'; put 'filename=scan(directory,-1,''/\'');'; put 'msg='''';'; put 'level=&level;'; put 'output;'; put '%end;'; put 'stop;'; put 'run;'; put '%if %substr(&getattrs,1,1)=Y %then %do;'; put 'data &out_ds;'; put 'set &out_ds;'; put 'length infoname infoval $60 fref $8;'; put 'if _n_=1 then call missing(fref);'; put 'rc=filename(fref,filepath);'; put 'drop rc infoname fid i close fref;'; put 'if file_or_folder=''file'' then do;'; put 'fid=fopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open file:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to foptnum(fid);'; put 'infoname=foptname(fid,i);'; put 'infoval=finfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=fclose(fid);'; put 'end;'; put 'else do;'; put 'fid=dopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open folder:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to doptnum(fid);'; put 'infoname=doptname(fid,i);'; put 'infoval=dinfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=dclose(fid);'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by filepath sasname;'; put 'proc transpose data=&out_ds out=&out_ds(drop=_:);'; put 'id sasname;'; put 'var infoval;'; put 'by filepath file_or_folder filename ext ;'; put 'run;'; put '%end;'; put 'data &out_ds;'; put 'set &out_ds(where=(filepath ne ''''));'; put 'run;'; put '/**'; put '* The above transpose can mean that some updates create additional columns.'; put '* This necessitates the occasional use of datastep over proc append.'; put '*/'; put '%if %mf_existds(&outds) %then %do;'; put '%local basevars appvars newvars;'; put '%let basevars=%mf_getvarlist(&outds);'; put '%let appvars=%mf_getvarlist(&out_ds);'; put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));'; put '%if &newvars>0 %then %do;'; put 'data &outds;'; put 'set &outds &out_ds;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds force nowarn;'; put 'run;'; put '%end;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds;'; put 'run;'; put '%end;'; put '/* recursive call */'; put '%if &maxdepth>&level or &maxdepth=MAX %then %do;'; put 'data _null_;'; put 'set &out_ds;'; put 'where file_or_folder=''folder'';'; put '%if &showparent=YES and &level=0 %then %do;'; put 'if filepath ne directory;'; put '%end;'; put 'length code $10000;'; put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"'; put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");'; put 'put code=;'; put 'call execute(code);'; put 'run;'; put '%end;'; put '/* tidy up */'; put 'proc sql;'; put 'drop table &out_ds;'; put '%mend mp_dirlist;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro mpe_loader('; put 'mperef= /* name of subfolder containing the staged data */'; put ',mDebug=0 /* set to 1 for development or debugging */'; put ',submitted_reason_txt= /* populates column of same name in sumo_approvals*/'; put ',approver= /* allows a userid to be provided for direct approval email */'; put ',url= /* optional - url for debugging */'; put ',dlm=%str(,)'; put ',termstr=crlf'; put ',dc_dttmtfmt=E8601DT26.6'; put ');'; put '%put entered mpe_loader from &=_program;'; put '%put &=url;'; put '%put &=termstr;'; put '%put &=dlm;'; put '/* determine full path to CSV directory */'; put '%local now;'; put '%let now=&dc_dttmtfmt;'; put '%put &=now;'; put '/**'; put '* get full path to package (only subdirectory passed through)'; put '*/'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(mperef mpelocapprovals)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing: mperef mpelocapprovals)'; put ')'; put '%let csv_dir=%trim(&mpelocapprovals/&mperef);'; put '/* exit if package has already been uploaded */'; put '%local check;'; put 'proc sql noprint;'; put 'select count(*) into: check'; put 'from &mpelib..mpe_loads'; put 'where csv_dir="&mperef";'; put '%if &check %then %do;'; put '%mp_abort(msg=Folder &mperef already has an entry in &mpelib..mpe_loads'; put ',mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '/* get CSV directory contents */'; put '%mp_dirlist(path=&csv_dir,outds=WORK.getfiles)'; put 'data WORK.csvs;'; put 'set WORK.getfiles;'; put 'if upcase(scan(filename,3,''.''))=''CSV'' then do;'; put 'lib=upcase(scan(filename,1,''.''));'; put 'ds=upcase(scan(filename,2,''.''));'; put 'output;'; put 'end;'; put 'run;'; put '/* get table attributes */'; put 'proc sql noprint;'; put 'create table WORK.sumo_tables as'; put 'select a.filename, b.*'; put 'from WORK.csvs a'; put 'left join &mpelib..mpe_tables b'; put 'on a.lib=b.libref'; put 'and a.ds=b.dsn'; put 'where b.tx_from le &now'; put 'and &now lt b.tx_to;'; put '/* define user as meta user if available */'; put '%local user;'; put '%let user=%mf_getuser();'; put '/* check if there is actually a table to load */'; put '%if %mf_getattrn(WORK.sumo_tables,NLOBS)=0 %then %do;'; put '%let msg=Table not registered in &mpelib..mpe_tables;'; put '%mpe_loadfail('; put 'status=&msg'; put ',now=&now'; put ',mperef=&mperef'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%mp_abort(msg=&msg,mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put 'proc sql;'; put 'insert into &mpelib..mpe_loads'; put 'set USER_NM="&user"'; put ',STATUS=''IN PROGRESS'''; put ',CSV_dir="&mperef"'; put ',PROCESSED_DTTM=&now'; put ',reason_txt = symget(''submitted_reason_txt'');'; put '/* import CSV */'; put '%let droplist=;'; put '%let attrib=;'; put '%let droplist=;'; put '%let libref=;'; put '%let DS=;'; put '/* get table info */'; put 'data _null_;'; put 'set sumo_tables;'; put 'libds=upcase(cats(libref,''.'',dsn));'; put 'call symputx(''orig_libds'',libds);'; put 'is_fmt=0;'; put 'if substr(cats(reverse(dsn)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'libds=''work.fmtextract'';'; put 'is_fmt=1;'; put 'end;'; put 'call symputx(''is_fmt'',is_fmt);'; put 'call symputx(''libds'',libds);'; put 'call symputx(''FNAME'',filename);'; put 'call symputx(''LIBREF'',libref);'; put 'call symputx(''DS'',dsn);'; put 'call symputx(''LOADTYPE'',loadtype);'; put 'call symputx(''BUSKEY'',buskey);'; put 'call symputx(''VAR_TXFROM'',var_txfrom);'; put 'call symputx(''VAR_TXTO'',var_txto);'; put 'call symputx(''VAR_BUSFROM'',var_busfrom);'; put 'call symputx(''VAR_BUSTO'',var_busto);'; put 'call symputx(''VAR_PROCESSED'',var_processed);'; put 'call symputx(''RK_UNDERLYING'',RK_UNDERLYING);'; put 'call symputx(''POST_EDIT_HOOK'',POST_EDIT_HOOK);'; put 'call symputx(''NOTES'',NOTES);'; put 'call symputx(''PK'',coalescec(RK_UNDERLYING,buskey));'; put 'call symputx(''NUM_OF_APPROVALS_REQUIRED'',NUM_OF_APPROVALS_REQUIRED,''l'');'; put 'put (_all_)(=);'; put 'stop;'; put 'run;'; put '%if %length(&ds)=0 %then %do;'; put '%let msg=%str(ERR)OR: Unable to extract record from &mpelib..mpe_tables;'; put '%mpe_loadfail('; put 'status=FAILED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%mp_abort(msg=&msg,mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '/* export format catalog */'; put '%mp_cntlout('; put 'iftrue=(&is_fmt=1)'; put ',libcat=&orig_libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '/* user must have EDIT access to load a table */'; put '%mpe_accesscheck(&orig_libds'; put ',outds=work.sumo_access'; put ',user=&user'; put ',access_level=EDIT )'; put '%put exiting accesscheck;'; put '%if %mf_getattrn(work.sumo_access,NLOBS)=0 %then %do;'; put '%let msg=%str(ERR)OR: User is not authorised to edit &orig_libds!;'; put '%mpe_loadfail('; put 'status=UNAUTHORISED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%mp_abort(msg=&msg,mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '%put now importing: "&csv_dir/&fname" termstr=&termstr;'; put '/* get the variables from the CSV */'; put 'data vars_csv1(index=(idxname=(varnum name)) drop=infile);'; put 'infile "&csv_dir/&fname" lrecl=32767 dsd termstr=&termstr encoding=''utf-8'';'; put 'input;'; put 'length infile $32767;'; put 'infile=compress(_infile_,''"'',);'; put 'infile=compress(infile,"''",);'; put 'format name $32.;'; put 'putlog ''received vars: '' infile;'; put 'call symputx(''received_vars'',infile,''l'');'; put 'do varnum=1 to countw(infile,"&dlm");'; put '/* keep writeable chars */'; put 'name=compress(upcase(scan(infile,varnum)),,''kw'');'; put 'if name ne "_____DELETE__THIS__RECORD_____" then output;'; put 'end;'; put 'stop;'; put 'run;'; put '%put received_vars = &received_vars;'; put '%dc_assignlib(WRITE,&libref)'; put '/* get list of variables and their formats */'; put 'proc contents noprint data=&libds'; put 'out=vars(keep=name type length varnum format:);'; put 'run;'; put 'data vars(keep=name type length varnum format);'; put 'set vars(rename=(format=format2 type=type2));'; put 'name=upcase(name);'; put 'format2=upcase(format2);'; put '/* not interested in transaction or processing dates'; put '(append table must be supplied without them) */'; put 'if name not in ("&VAR_TXFROM","&VAR_TXTO","&VAR_PROCESSED"'; put ',"_____DELETE__THIS__RECORD_____");'; put 'if type2 in (2,6) then do;'; put 'length format $49.;'; put 'if format2='''' then format=cats(''$'',length,''.'');'; put 'else format=cats(format2,max(formatl,length),''.'');'; put 'type=''char'';'; put 'end;'; put 'else do;'; put 'if format2='''' then format=cats(length,''.'');'; put 'else if format2=:''DATETIME'' or format2=:''E8601DT'' or format2=:''NLDATM'''; put 'then do;'; put 'format=''DATETIME19.'';'; put 'end;'; put 'else if format2=:''DATE'' or format2=:''DDMMYY'''; put 'or format2=:''MMDDYY'' or format2=:''YYMMDD'''; put 'or format2=:''E8601DA'' or format2=:''B8601DA'''; put 'or format2=:''NLDATE'''; put 'then do;'; put 'format=''DATE9.'';'; put 'end;'; put 'else if format2=''BEST'' & formatl=0 then format=cats(''BEST'',length,''.'');'; put 'else do;'; put 'if formatl=0 then formatl=length;'; put 'format=cats(format2,formatl,''.'',formatd);'; put 'end;'; put 'type=''num'';'; put 'end;'; put 'put (_all_)(=);'; put 'run;'; put '/* build attrib statement */'; put 'data vars_attrib;'; put 'length attrib_statement $32767 type2 $20;'; put 'set vars end=lastobs;'; put 'retain attrib_statement;'; put 'if type=''char'' then type2=''$'';'; put 'str1=catx('' '',name,''length='',cats(type2,length));'; put 'attrib_statement=trim(attrib_statement)!!'' ''!!trim(str1);'; put 'if lastobs then call symputx(''ATTRIB'',attrib_statement,''L'');'; put 'run;'; put '/* build input statement - first get vars in right order'; put 'and join with target formats*/'; put 'proc sql noprint;'; put 'create table vars_csv2 as'; put 'select b.*'; put 'from vars_csv1 a'; put 'left join vars_attrib b'; put 'on a.name=b.name'; put 'order by a.varnum;'; put '/* now build input statement */'; put 'data final_check;'; put 'set vars_csv2 end=lastobs;'; put 'length input_statement $32767 type2 $20 droplist $32767;'; put 'retain input_statement droplist;'; put '/* Build input statement - CATCH EXCEPTIONS HERE!*/'; put 'if name in (''QUOTE_DTTM'') then do;'; put 'name=cats(name,''2'');'; put 'droplist=catx('' '',trim(droplist),name);'; put 'type2=''$20.'';/* converted below */'; put 'end;'; put 'else if type=''char'' then type2=cats(''$CHAR'', length,''.'');'; put 'else if format=''DATE9.'' then type2=''ANYDTDTE.'';'; put 'else if format=''DATETIME19.'' then type2=''ANYDTDTM.'';'; put 'else if format=:''TIME'' then type2=''ANYDTTME.'';'; put 'else if name='''' then do;/* additional vars in input data */'; put 'name=''_____DELETE__THIS__VARIABLE_____'';'; put 'droplist=catx('' '',trim(droplist),''_____DELETE__THIS__VARIABLE_____'');'; put 'type2=''$1.'';'; put 'end;'; put 'else type2=''best32.'';'; put '* else type2=cats(length,''.'');'; put 'input_statement=catx('' '',input_statement,name,'':'',type2);'; put 'if lastobs then do;'; put 'call symputx(''INPUT'', input_statement,''L'');'; put 'if trim(droplist) ne '''' then'; put 'call symputx(''droplist'',"drop "!!droplist!!'';'',''l'');'; put 'end;'; put 'run;'; put '%let mpeloadstop=0;'; put 'data work.STAGING_DS;'; put '&droplist;'; put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767'; put 'firstobs=2 missover termstr=&termstr encoding=''utf-8'';'; put 'attrib _____DELETE__THIS__RECORD_____ length=$3 &attrib ;'; put 'if _n_=1 then call missing (of _all_);'; put 'missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;'; put 'input'; put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____ %then %do;'; put '_____DELETE__THIS__RECORD_____: $3.'; put '%end;'; put '&input;'; put '%if %index(%quote(&attrib.),UNLIKELY_VAR ) %then %do;'; put '/*UNLIKELY_VAR=input(UNLIKELY_VAR2,ANYDTDTM21.);*/'; put '/* SPECIAL LOGIC FOR SPECIAL VARS */'; put '%end;'; put 'if _error_ ne 0 then do;'; put 'putlog _infile_;'; put 'call symputx(''mpeloadstop'',_n_);'; put 'stop;'; put 'end;'; put '/* remove all blank rows */'; put 'if compress(cats(of _all_),''.'')='' '' then delete;'; put 'run;'; put '%if &mpeloadstop>0 %then %do;'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put '%put redirecting log output to capture return message;'; put '%put currentloc=&logloc;'; put 'filename tmp temp;'; put 'proc printto log=tmp;run;'; put 'data _null_;'; put '&droplist;'; put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767 firstobs=2'; put 'missover termstr=&termstr;'; put 'attrib &attrib ;'; put 'input'; put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____'; put '%then %do;'; put '_____DELETE__THIS__RECORD_____: $3.'; put '%end;'; put '&input;'; put 'if _error_ then stop;'; put 'run;'; put '/* get log back */'; put 'proc printto log=&logloc;run;'; put 'data _null_; infile tmp; input; putlog _infile_;run;'; put '/* scan log for invalid data warnings */'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'length msg1 msg2 msg3 msg4 msg5 msg url $32767;'; put 'if index(_infile_,''NOTE: Invalid data for'') then do;'; put 'msg1=_infile_;'; put 'input;'; put 'msg2=_infile_;'; put 'input;'; put 'msg3=_infile_;'; put 'input;'; put 'msg4=_infile_;'; put 'input;'; put 'msg5=_infile_;'; put 'url=symget(''url'');'; put 'msg=catx(''\n'',msg1,msg2,msg3,msg4,msg5,''\n'',url);'; put 'call symputx(''msg'',msg);'; put 'stop;'; put 'end;'; put 'run;'; put '%mpe_loadfail('; put 'status=FAILED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%superq(msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '/* check that the table is unique on PK */'; put 'proc sort data=work.STAGING_DS dupout=work.MPE_DUPS (keep=&pk) nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.MPE_DUPS,NLOBS)>0 %then %do;'; put '%local duplist;'; put 'data _null_;'; put 'set work.mpe_dups;'; put '%do i=1 %to %sysfunc(countw(&pk));'; put '%let iWord=%scan(&pk,&i);'; put 'call symputx(''duplist'',symget(''duplist'')!!'; put '" &iWord="!!cats(&iWord));'; put '%end;'; put 'run;'; put '%let msg=This upload contains duplicates on the Primary Key columns %trim('; put ')(&pk) \n Please remove the duplicates and try again. %trim('; put ')\n &duplist \n ;'; put '%mp_abort(msg=%superq(msg),mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '%if &syscc gt 4 %then %do;'; put '%let msg=SYSCC=&syscc prior to post edit hook (%superq(syserrortext));'; put '%mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%superq(msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '/* If a Complex Excel Upload, needs to have the load ref added to the table */'; put '%mpe_xlmapvalidate(&mperef,work.staging_ds,&mpelib,&orig_libds)'; put '/* Run the Post Edit Hook prior to creation of staging folder */'; put '%mpe_runhook(POST_EDIT_HOOK)'; put '/* stop if err */'; put '%if &syscc gt 4 %then %do;'; put '%let msg=ERR in post edit hook (&post_edit_hook);'; put '%mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '/**'; put '* send to approve process'; put '*/'; put '/* create a dataset key (datetime plus 3 digit random number plus PID) */'; put '/* send dataset to approvals subfolder with same name as subfolder */'; put 'libname approval "&mpelocapprovals/&mperef";'; put 'data approval.&mperef;'; put 'set work.staging_ds;'; put 'run;'; put 'proc export data=approval.&mperef'; put 'outfile="&mpelocapprovals/&mperef/&mperef..csv"'; put 'dbms=csv'; put 'replace;'; put 'run;'; put '/* update the control dataset with relevant info */'; put 'data append_app;'; put 'if 0 then set &mpelib..mpe_submit;/* get formats */'; put 'call missing (of _all_);'; put 'TABLE_ID="&mperef";'; put 'submit_status_cd=''SUBMITTED'';'; put 'submitted_by_nm="%mf_getuser()";'; put 'base_lib="&libref";'; put 'base_ds="&ds";'; put 'submitted_on_dttm=&now;'; put 'submitted_reason_txt=symget(''submitted_reason_txt'');'; put 'input_vars=%mf_getattrn(approval.&mperef,NVARS);'; put 'input_obs=%mf_getattrn(approval.&mperef,NLOBS);'; put 'num_of_approvals_required=&NUM_OF_APPROVALS_REQUIRED;'; put 'num_of_approvals_remaining=&NUM_OF_APPROVALS_REQUIRED;'; put 'reviewed_by_nm='''';'; put 'reviewed_on_dttm=.;'; put 'run;'; put '%mp_lockanytable(LOCK,lib=&mpelib,ds=mpe_submit,'; put 'ref=%str(&mperef update in &_program),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc append base= &mpelib..mpe_submit data=append_app;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_submit,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '/* send email to REVIEW members */'; put '%put sending mpe_alerts;'; put '%mpe_alerts(alert_event=SUBMITTED'; put ', alert_lib=&libref'; put ', alert_ds=&ds'; put ', dsid=&mperef'; put ')'; put '/* DISABLE EMAIL FOR NOW'; put '%let b2=REASON: %quote(&submitted_reason_txt);'; put '%local URLNOTES;'; put '%if %length(¬es)>0 %then %let URLNOTES=%quote(%sysfunc(urlencode(¬es)));'; put '%let b3=%str(Click to review / approve: )%trim('; put ')%str(http://&_srvname:&_srvport&_url?_PROGRAM=/Web/approvals&)%trim('; put ')TABLEID=&dsid%str(&)BASETABLE=&libref..&ds%str(&)NOTES=&URLNOTES;'; put '%let b4=%str(Reference ID: &mperef);'; put '*/'; put '%put mpe_loader finishing up with syscc=&syscc;'; put '%if &syscc le 4 %then %do;'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'putlog ''Updating mpe_loads with the following query:'';'; put 'putlog "update &mpelib..mpe_loads set STATUS=''SUCCESS''";'; put 'putlog " , duration=" dur;'; put 'putlog " , processed_dttm=" now;'; put 'putlog " , approvals = ''&libref..&ds''";'; put 'putlog " where CSV_DIR=''&mperef'';";'; put 'run;'; put 'proc sql;'; put 'update &mpelib..mpe_loads set STATUS=''SUCCESS'''; put ', duration=&dur'; put ', processed_dttm=&now'; put ', approvals = "&libref..&ds"'; put 'where CSV_DIR="&mperef";'; put '%end;'; put '%else %do;'; put '%mpe_loadfail('; put 'status="FAILED - &syscc"'; put ',now=&now'; put ',approvals=&libref..&ds'; put ',mperef=&mperef'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '%mend mpe_loader;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_filtergenerate(inds,outref=filter);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put 'filename &outref temp;'; put '%if %mf_nobs(&inds)=0 %then %do;'; put '/* ensure we have a default filter */'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc sort data=&inds;'; put 'by SUBGROUP_ID;'; put 'run;'; put 'data _null_;'; put 'file &outref lrecl=32800;'; put 'set &inds end=last;'; put 'by SUBGROUP_ID;'; put 'if _n_=1 then put ''(('';'; put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';'; put 'else put +2 SUBGROUP_LOGIC;'; put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;'; put 'if last.SUBGROUP_ID then put '')''@;'; put 'if last then put '')'';'; put 'run;'; put '%end;'; put '%mend mp_filtergenerate;'; put '%macro mpe_filtermaster(mode,libds,'; put 'dclib=,'; put 'filter_rk=-1,'; put 'outref=0,'; put 'outds=work.query'; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%let mode=%upcase(&mode);'; put '%let libds=%upcase(&libds);'; put '%mp_abort(iftrue= ('; put '&mode ne EDIT and &mode ne VIEW and &mode ne DLOAD and &mode ne ULOAD'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid MODE: &mode)'; put ')'; put '%mp_abort(iftrue= (&outref = 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Please provide a fileref!)'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc)'; put ')'; put 'filename &outref temp;'; put '/* ensure outputs exist */'; put 'data _null_;'; put 'file &outref;'; put 'put '' '';'; put 'run;'; put 'data &outds;'; put 'set &dclib..mpe_filtersource;'; put 'stop;'; put 'run;'; put '/**'; put '* Deal with FILTER_RK first'; put '*/'; put '%if &filter_rk gt 0 %then %do;'; put 'data _null_;'; put 'file &outref;'; put 'put ''( ''@@;'; put 'set &dclib..mpe_filteranytable(where=(filter_rk=&filter_rk));'; put 'call symputx(''filter_hash'',filter_hash,''l'');'; put 'run;'; put 'proc sort data=&dclib..mpe_filtersource(where=(filter_hash="&filter_hash"))'; put 'out=&outds(drop=filter_hash filter_line processed_dttm);'; put 'by filter_line;'; put 'run;'; put '%mp_filtergenerate(&outds,outref=&outref)'; put '%end;'; put '/* Now filter for current records if the MODE is EDIT or DLOAD */'; put '%local varfrom varto;'; put '%let varfrom=0;'; put 'proc sql;'; put 'select coalescec(var_txfrom,''0''), var_txto into: varfrom,:varto'; put 'from &dclib..MPE_TABLES'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and libref="%scan(&libds,1,.)" and dsn="%scan(&libds,2,.)";'; put '%put &=varfrom;'; put '%put &=varto;'; put '/**'; put '* Check if the date variables were mentioned in the query'; put '* This is a trigger for serving a historical view instead of current'; put '* we skip this part when checking an ULOAD as there are no date vars'; put '*/'; put '%if &varfrom ne 0 and (&mode=EDIT or &mode=DLOAD) %then %do;'; put '%local validityvars;'; put 'proc sql;'; put 'select count(*) into: validityvars'; put 'from &outds'; put 'where variable_nm in ("&varfrom","&varto");'; put '%if &validityvars=0 %then %do;'; put 'data _null_;'; put 'file &outref mod;'; put 'length filter_text $32767;'; put 'varfrom=symget(''varfrom'');'; put 'varto=symget(''varto'');'; put 'filter_text=catx('' '','; put '''("%sysfunc(datetime(),'',"%mf_fmtdttm()",'')"dt <'',varto,'')'''; put ');'; put 'if &filter_rk > 0 then put ''AND '' filter_text;'; put 'else put filter_text;'; put 'run;'; put '%end;'; put '%end;'; put '/**'; put '* Now do Row Level Security based on the MPE_ROW_LEVEL_SECURITY table'; put '*/'; put '/* first determine users group membership */'; put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)'; put '%local admin_check;'; put 'proc sql;'; put 'select count(*) into: admin_check'; put 'from work.groups'; put 'where groupname="&mpeadmins";'; put '%put &sysmacroname: &=admin_check &=mpeadmins;'; put '%if &admin_check=0 %then %do;'; put '%local scopeval;'; put '%if &mode=DLOAD %then %let scopeval=VIEW;'; put '%if &mode=ULOAD %then %let scopeval=EDIT;'; put '%else %let scopeval=&mode;'; put '/* extract relevant rows */'; put '%local rlsds;'; put '%let rlsds=%mf_getuniquename();'; put 'proc sql;'; put 'create table work.&rlsds as'; put 'select rls_group,'; put 'rls_group_logic as group_logic,'; put 'rls_subgroup_logic as subgroup_logic,'; put 'rls_subgroup_id as subgroup_id,'; put 'rls_variable_nm as variable_nm,'; put 'rls_operator_nm as operator_nm,'; put 'rls_raw_value as raw_value'; put 'from &mpelib..mpe_row_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and rls_scope in ("&scopeval",''ALL'')'; put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)'; put 'and rls_libref="%scan(&libds,1,.)"'; put 'and rls_table="%scan(&libds,2,.)"'; put 'and rls_active=1'; put 'order by rls_group,rls_subgroup_id;'; put '%if &sqlobs>0 %then %do;'; put '/* check if we currently have filter or not */'; put 'data ;'; put 'infile &outref end=eof;'; put 'input;'; put 'if _n_=1 and eof and cats(_infile_)='''' then newfilter=1;'; put 'output;'; put 'stop;'; put 'run;'; put 'data _null_;'; put 'set &syslast;'; put 'file &outref mod;'; put 'if newfilter=1 then put ''('';'; put 'else put ''AND ('';'; put 'run;'; put '/* loop through and apply filters for each group membership */'; put '%local fref ds;'; put '%let fref=%mf_getuniquefileref();'; put '%let ds=%mf_getuniquename();'; put 'proc sql noprint;'; put 'select distinct rls_group into : group1 -'; put 'from work.&rlsds;'; put '%do i=1 %to &sqlobs;'; put 'data work.&ds;'; put 'set work.&rlsds;'; put 'where rls_group="&&group&i";'; put 'drop rls_group;'; put 'run;'; put '%mp_filtergenerate(&ds,outref=&fref)'; put 'data _null_;'; put 'infile &fref;'; put 'file &outref mod;'; put 'input;'; put 'if &i>1 and _n_=1 then put '' OR '';'; put 'put _infile_;'; put 'run;'; put '%end;'; put 'data _null_;'; put 'file &outref mod;'; put 'put '')'';'; put 'run;'; put '%end; /* &sqlobs>0 */'; put '%else %do;'; put '%put &sysmacroname: no matching groups;'; put 'data _null_;'; put 'set work.groups;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname'; put ',msg=%str(Row Level Security Generation Error)'; put ')'; put '%end; /* &admin_check=0 */'; put '%put leaving &sysmacroname with the following query:;'; put '%local empty;'; put '%let empty=0;'; put 'data _null_;'; put 'infile &outref end=eof;'; put 'input;'; put 'putlog _infile_;'; put 'if _n_=1 and eof and cats(_infile_)='''' then do;'; put 'put ''1=1'';'; put 'call symputx(''empty'',1,''l'');'; put 'end;'; put 'run;'; put '%if &empty=1 %then %do;'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%mend mpe_filtermaster;'; put '%macro removecolsfromwork(col);'; put '/* only an issue if debug mode enabled */'; put '%global _debug;'; put '%if &_debug ge 131 %then %do;'; put '%let col=%upcase(&col);'; put '%local memlist;'; put 'proc sql noprint;'; put 'select distinct memname into: memlist'; put 'separated by '' '''; put 'from dictionary.columns'; put 'where libname=''WORK'' and upcase(name)="&col";'; put '%if %mf_isblank(&memlist) %then %return;'; put '%mp_dropmembers(list=&memlist)'; put '%end;'; put '%mend removecolsfromwork;'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mcf_init(func'; put ')/*/STORE SOURCE*/;'; put '%if not (%symexist(SASJS_PREFIX)) %then %do;'; put '%global SASJS_PREFIX;'; put '%let SASJS_PREFIX=SASJS;'; put '%end;'; put '%let func=%upcase(&func);'; put '/* the / character is just a seperator */'; put '%global &sasjs_prefix._FUNCTIONS;'; put '%if %index(&&&sasjs_prefix._FUNCTIONS,&func/)>0 %then %do;'; put '1'; put '%return;'; put '%end;'; put '%else %do;'; put '%let &sasjs_prefix._FUNCTIONS=&&&sasjs_prefix._FUNCTIONS &func/;'; put '0'; put '%end;'; put '%mend mcf_init;'; put '%macro mcf_getfmttype(wrap=NO'; put ',insert_cmplib=DEPRECATED'; put ',lib=WORK'; put ',cat=SASJS'; put ',pkg=UTILS'; put ')/*/STORE SOURCE*/;'; put '%local i var cmpval found;'; put '%if %mcf_init(mcf_getfmttype)=1 %then %return;'; put '%if &wrap=YES %then %do;'; put 'proc fcmp outlib=&lib..&cat..&pkg;'; put '%end;'; put 'function mcf_getfmttype(fmtnm $) $8;'; put 'if substr(fmtnm,1,1)=''$'' then return(''CHAR'');'; put 'else do;'; put '/* extract NAME */'; put 'length fmt $32;'; put 'fmt=scan(fmtnm,1,''.'');'; put 'do while ('; put 'substr(fmt,length(fmt),1) in (''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'',''0'')'; put ');'; put 'if length(fmt)=1 then fmt=''W'';'; put 'else fmt=substr(fmt,1,length(fmt)-1);'; put 'end;'; put '/* apply lookups */'; put 'if cats(fmt) in (''DATETIME'',''B8601DN'',''B8601DN'',''B8601DT'',''B8601DT'''; put ',''B8601DZ'',''B8601DZ'',''DATEAMPM'',''DTDATE'',''DTMONYY'',''DTWKDATX'',''DTYEAR'''; put ',''DTYYQC'',''E8601DN'',''E8601DN'',''E8601DT'',''E8601DT'',''E8601DZ'',''E8601DZ'''; put ',''NLDATM'') then return(''DATETIME'');'; put 'else if fmt in (''DATE'',''YYMMDD'',''B8601DA'',''B8601DA'',''DAY'',''DDMMYY'''; put ',''DDMMYYB'',''DDMMYYC'',''DDMMYYD'',''DDMMYYN'',''DDMMYYP'',''DDMMYYS'',''DDMMYYx'''; put ',''DOWNAME'',''E8601DA'',''E8601DA'',''JULDAY'',''JULIAN'',''MMDDYY'',''MMDDYYB'''; put ',''MMDDYYC'',''MMDDYYD'',''MMDDYYN'',''MMDDYYP'',''MMDDYYS'',''MMDDYYx'',''MMYY'''; put ',''MMYYC'',''MMYYD'',''MMYYN'',''MMYYP'',''MMYYS'',''MMYYx'',''MONNAME'',''MONTH'''; put ',''MONYY'',''PDJULG'',''PDJULI'',''QTR'',''QTRR'',''WEEKDATE'',''WEEKDATX'',''WEEKDAY'''; put ',''WEEKU'',''WEEKV'',''WEEKW'',''WORDDATE'',''WORDDATX'',''YEAR'',''YYMM'',''YYMMC'''; put ',''YYMMD'',''YYMMDDB'',''YYMMDDC'',''YYMMDDD'',''YYMMDDN'',''YYMMDDP'',''YYMMDDS'''; put ',''YYMMDDx'',''YYMMN'',''YYMMP'',''YYMMS'',''YYMMx'',''YYMON'',''YYQ'',''YYQC'',''YYQD'''; put ',''YYQN'',''YYQP'',''YYQR'',''YYQRC'',''YYQRD'',''YYQRN'',''YYQRP'',''YYQRS'',''YYQRx'''; put ',''YYQS'',''YYQx'',''YYQZ'',''NLDATE'') then return(''DATE'');'; put 'else if fmt in (''TIME'',''B8601LZ'',''B8601LZ'',''B8601TM'',''B8601TM'',''B8601TZ'''; put ',''B8601TZ'',''E8601LZ'',''E8601LZ'',''E8601TM'',''E8601TM'',''E8601TZ'',''E8601TZ'''; put ',''HHMM'',''HOUR'',''MMSS'',''TIMEAMPM'',''TOD'') then return(''TIME'');'; put 'else return(''NUM'');'; put 'end;'; put 'endsub;'; put '%if &wrap=YES %then %do;'; put 'quit;'; put '%end;'; put '/* insert the CMPLIB if not already there */'; put '%let cmpval=%sysfunc(getoption(cmplib));'; put '%let found=0;'; put '%do i=1 %to %sysfunc(countw(&cmpval,%str( %(%))));'; put '%let var=%scan(&cmpval,&i,%str( %(%)));'; put '%if &var=&lib..&cat %then %let found=1;'; put '%end;'; put '%if &found=0 %then %do;'; put 'options insert=(CMPLIB=(&lib..&cat));'; put '%end;'; put '%mend mcf_getfmttype;'; put '%macro mf_getVarFormat(libds /* two level ds name */'; put ', var /* variable name from which to return the format */'; put ', force=0'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vformat rc vlen vtype;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable format */'; put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let rc = %sysfunc(close(&dsid));'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* supply a default if no format available */'; put '%if %length(&vformat)<2 & &force=1 %then %do;'; put '%let vlen = %sysfunc(varlen(&dsid, &vnum));'; put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%if &vtype=C %then %let vformat=$&vlen..;'; put '%else %let vformat=best.;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable format */'; put '&vformat'; put '%mend mf_getVarFormat;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mp_ds2csv(ds'; put ',dlm=COMMA'; put ',outref=0'; put ',outfile='; put ',outencoding=0'; put ',headerformat=LABEL'; put ',termstr=CRLF'; put ')/*/STORE SOURCE*/;'; put '%local outloc delim i varlist var vcnt vat dsv vcom vmiss fmttype vfmt;'; put '%if not %sysfunc(exist(&ds)) %then %do;'; put '%put %str(WARN)ING: &ds does not exist;'; put '%return;'; put '%end;'; put '%if %index(&ds,.)=0 %then %let ds=WORK.&ds;'; put '%if &outencoding=0 %then %let outencoding=;'; put '%else %let outencoding=encoding=&outencoding;'; put '%if &outref=0 %then %let outloc=&outfile;'; put '%else %let outloc=&outref;'; put '%if &headerformat=SASJS %then %do;'; put '%let delim=",";'; put '%let termstr=CRLF;'; put '%mcf_getfmttype(wrap=YES)'; put '%end;'; put '%else %if &dlm=COMMA %then %let delim=",";'; put '%else %let delim=";";'; put '/* credit to mjsq - https://stackoverflow.com/a/55642267 */'; put '/* first get headers */'; put 'data _null_;'; put 'file &outloc &outencoding lrecl=32767 termstr=&termstr;'; put 'length header $ 2000 varnm vfmt $32 dlm $1 fmttype $8;'; put 'call missing(of _all_);'; put 'dsid=open("&ds.","i");'; put 'num=attrn(dsid,"nvars");'; put 'dlm=&delim;'; put 'do i=1 to num;'; put 'varnm=upcase(varname(dsid,i));'; put 'if i=num then dlm='''';'; put '%if &headerformat=NAME %then %do;'; put 'header=cats(varnm,dlm);'; put '%end;'; put '%else %if &headerformat=LABEL %then %do;'; put 'header = cats(coalescec(varlabel(dsid,i),varnm),dlm);'; put '%end;'; put '%else %if &headerformat=SASJS %then %do;'; put 'vlen=varlen(dsid,i);'; put 'if vartype(dsid,i)=''C'' then header=cats(varnm,'':$char'',vlen,''.'');'; put 'else do;'; put 'vfmt=coalescec(varfmt(dsid,i),''0'');'; put 'fmttype=mcf_getfmttype(vfmt);'; put 'if fmttype=''DATE'' then header=cats(varnm,'':date9.'');'; put 'else if fmttype=''DATETIME'' then header=cats(varnm,'':E8601DT26.6'');'; put 'else if fmttype=''TIME'' then header=cats(varnm,'':TIME12.'');'; put '/**'; put '* there is not much point importing a short length numeric like this,'; put '* eg with best4., as the resulting variable will still be stored as'; put '* length 8. We need a length or format statement to ensure variable'; put '* is creatd with the smaller length...'; put '**/'; put 'else if vlen<8 then header=cats(varnm,'':best'',vlen,''.'');'; put 'else header=cats(varnm,'':best.'');'; put 'end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Invalid headerformat value (&headerformat);'; put '%return;'; put '%end;'; put 'put header @;'; put 'end;'; put 'rc=close(dsid);'; put 'run;'; put '%let varlist=%mf_getvarlist(&ds);'; put '%let vcnt=%sysfunc(countw(&varlist));'; put '/**'; put '* The $quote modifier (without a width) will take the length from the variable'; put '* and increase by two. However this will lead to truncation where the value'; put '* contains double quotes (which are doubled up). To get around this, scan the'; put '* data to see the max number of double quotes, so that the appropriate width'; put '* can be applied in the subsequent step.'; put '*/'; put 'data _null_;'; put 'set &ds end=last;'; put '%do i=1 %to &vcnt;'; put '%let var=%scan(&varlist,&i);'; put '%local vlen&i;'; put '%if %mf_getvartype(&ds,&var)=C %then %do;'; put '%let dsv1=%mf_getuniquename(prefix=csvcol1_);'; put '%let dsv2=%mf_getuniquename(prefix=csvcol2_);'; put 'retain &dsv1 0;'; put '&dsv2=length(&var)+countc(&var,''"'');'; put 'if &dsv2>&dsv1 then &dsv1=&dsv2;'; put 'if last then call symputx('; put '"vlen&i"'; put '/* should be no shorter than varlen, and no longer than 32767 */'; put ',cats(''$quote'',min(&dsv1+2,32767),''.'')'; put ',''l'''; put ');'; put '%end;'; put '%end;'; put '%let vat=@;'; put '%let vcom=&delim;'; put '%let vmiss=%mf_getuniquename(prefix=csvcol3_);'; put '/* next, export data */'; put 'data _null_;'; put 'set &ds.;'; put 'file &outloc mod dlm=&delim dsd &outencoding lrecl=32767 termstr=&termstr;'; put 'if _n_=1 then &vmiss='' '';'; put '%do i=1 %to &vcnt;'; put '%let var=%scan(&varlist,&i);'; put '%if &i=&vcnt %then %do;'; put '%let vat=;'; put '%let vcom=;'; put '%end;'; put '%if %mf_getvartype(&ds,&var)=N %then %do;'; put '%if &headerformat = SASJS %then %do;'; put '%let vcom=&delim;'; put '%let fmttype=%sysfunc(mcf_getfmttype(%mf_getvarformat(&ds,&var)0));'; put '%if &fmttype=DATE %then %let vfmt=DATE9.;'; put '%else %if &fmttype=DATETIME %then %let vfmt=E8601DT26.6;'; put '%else %if &fmttype=TIME %then %let vfmt=TIME12.;'; put '%else %do;'; put '%let vfmt=;'; put '%let vcom=;'; put '%end;'; put '%end;'; put '%else %let vcom=;'; put '/* must use period - in order to work in both 9.4 and Viya 3.5 */'; put 'if missing(&var) and &var ne %sysfunc(getoption(MISSING)) then do;'; put '&vmiss=cats(''.'',&var);'; put 'put &vmiss &vat;'; put 'end;'; put 'else put &var &vfmt &vcom &vat;'; put '%end;'; put '%else %do;'; put '%if &i ne &vcnt %then %let vcom=&delim;'; put 'put &var &&vlen&i &vcom &vat;'; put '%end;'; put '%end;'; put 'run;'; put '%mend mp_ds2csv;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Sends a changeset to staging area'; put '@details This is the service that is called when submitting a new edit.'; put '

Service Inputs

'; put '
jsdata
'; put 'This is the staged data table, plus an _____DELETE__THIS__RECORD_____ column'; put '
SASControlTable
'; put '|ACTION:$char4.|MESSAGE:$char1.|LIBDS:$char19.|'; put '|---|---|---|'; put '|LOAD|User-Provided message|LIBREF.DATASET_NAME|'; put '

SAS Macros

'; put '@li mf_getuser.sas'; put '@li mf_nobs.sas'; put '@li dc_assignlib.sas'; put '@li mf_verifymacvars.sas'; put '@li mf_mkdir.sas'; put '@li mf_getuniquefileref.sas'; put '@li mpe_loader.sas'; put '@li mpe_filtermaster.sas'; put '@li mp_abort.sas'; put '@li mp_binarycopy.sas'; put '@li mp_cntlout.sas'; put '@li mp_ds2csv.sas'; put '@li mf_getplatform.sas'; put '@li removecolsfromwork.sas'; put '@li mpeinit.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%global approver; %let approver=;'; put '%global libref; %let libref=;'; put '%global dsn; %let dsn=;'; put '%global user; %let user=;'; put '%let user=%mf_getuser();'; put '/* load parameters */'; put 'data _null_;'; put 'set work.sascontroltable;'; put 'call symputx(''action'',action);'; put 'call symputx(''message'',message);'; put 'libds=upcase(libds);'; put 'call symputx(''orig_libds'',libds);'; put 'is_fmt=0;'; put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'libds=''work.fmtextract'';'; put 'call symputx(''libds'',libds);'; put 'is_fmt=1;'; put 'end;'; put 'else call symputx(''libds'',libds);'; put 'call symputx(''is_fmt'',is_fmt);'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_cntlout('; put 'iftrue=(&is_fmt=1)'; put ',libcat=&orig_libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '/* stream back meta info, further jquery calls will return col metadata and'; put 'actual data */'; put '%let libref=%upcase(%scan(&libds,1,.));'; put '%let dsn=%upcase(%scan(&libds,2,.));'; put '%dc_assignlib(WRITE,&libref)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc - unable to assign library &libref)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(mpelocapprovals libds)=0)'; put ',mac=&_program'; put ',msg=%str(Missing: mpelocapprovals libds)'; put ')'; put '%put Verify that the upload does not violate Row Level Security checks:;'; put '%mpe_filtermaster(ULOAD,&libds,'; put 'dclib=&mpelib,'; put 'outref=filtref,'; put 'outds=work.query'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc during filtering process)'; put ')'; put '/* prepare inverse query */'; put '%let tempref=%mf_getuniquefileref();'; put 'data _null_;'; put 'infile filtref end=eof;'; put 'file &tempref;'; put 'if _n_=1 then put ''where not('';'; put 'input;'; put 'put _infile_;'; put 'if eof then put '')'';'; put 'run;'; put '/* apply the query */'; put 'data work.badrecords;'; put 'set work.jsdata;'; put '%inc &tempref/source2;;'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (%mf_nobs(work.badrecords)>0)'; put ',mac=&_program'; put ',msg=%str('; put 'Security Problem - %mf_nobs(work.badrecords) unauthorised records submitted'; put ')'; put ')'; put 'PROC FORMAT;'; put 'picture yymmddhhmmss other=''%0Y%0m%0d_%0H%0M%0S'' (datatype=datetime);'; put 'RUN;'; put '/**'; put '* Create package folder and redirect the log'; put '*/'; put '/* create a dataset key (datetime plus 6 digit random number plus PID) */'; put '%let mperef=DC%left(%sysfunc(datetime(),B8601DT19.3))_%substr('; put '%sysfunc(ranuni(0)),3,6)_%substr(%str(&sysjobid ),1,4);'; put '/* get web url */'; put '%global url;'; put '%let url=localhost/SASStoredProcess;'; put '%let platform=%mf_getplatform();'; put '%put &=platform;'; put 'data _null_;'; put 'length url $128;'; put '%macro stagedata();'; put '%if &platform=SASVIYA %then %do;'; put 'if symexist(''_baseurl'') then do;'; put 'url=symget(''_baseurl'');'; put 'if subpad(url,length(url)-9,9)=''SASStudio'''; put 'then url=substr(url,1,length(url)-11);'; put 'else url="&systcpiphostname/SASJobExecution";'; put 'end;'; put 'else url="&systcpiphostname/SASJobExecution";'; put '%end;'; put '%else %if &platform=SASMETA %then %do;'; put 'rc=METADATA_GETURI("Stored Process Web App",url);'; put '%end;'; put '%mend stagedata;'; put '%stagedata()'; put 'call symputx(''url'',url);'; put 'putlog url=;'; put 'run;'; put '/* Create package folder */'; put '%let dir=&mpelocapprovals/&mperef;'; put '%mf_mkdir(&dir)'; put '/* redirect the log */'; put '%put; %put; %put log is being redirected;'; put '%put to retrieve, visit this url:; %put;%put;'; put '%let url=&url?_program=%substr(&_program'; put ',1,%length(&_program)-9)getlog%str(&)table=&mperef;'; put '%put &url;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to log redirection)'; put ')'; put 'proc printto log="&dir/weblog.txt";run;'; put 'options notes mprint;'; put 'libname approve "&dir";'; put '/* take copy of webin file */'; put 'data _null_;'; put 'if symexist(''_WEBIN_FILEREF1'') then ref=symget(''_WEBIN_FILEREF1'');'; put 'else if symexist(''sasjs_tables'') then ref=''0ref''; /* no fileref created */'; put 'else ref=''indata1'';'; put 'call symputx(''ref'',ref);'; put 'putlog ref=;'; put 'run;'; put '%mp_binarycopy(inref=&ref,outloc="&dir/_WEBIN_FILEREF1.txt",iftrue=&ref ne 0ref)'; put '/* take copy of macvars */'; put 'data _null_;'; put 'file "&dir/macvars.sas";'; put 'set sashelp.vmacro;'; put 'where scope=''GLOBAL'';'; put 'put ''%let '' name ''='' value '';'';'; put 'run;'; put 'data approve.jsdset;'; put 'length _____DELETE__THIS__RECORD_____ $3;'; put 'set jsdata;'; put 'run;'; put '/**'; put '* mf_getvarXXX functions will fail if the target is locked - so take a copy'; put '* and reference that (this will also explicitly throw the lock situation)'; put '*/'; put '%let dscopy=work.dscopy;'; put 'data &dscopy;'; put 'set &libds;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Issue getting lock on &libds)'; put ')'; put '%mp_ds2csv(approve.jsdset'; put ',dlm=COMMA'; put ',outfile="&dir/&orig_libds..csv"'; put ',outencoding="UTF-8"'; put ',headerformat=NAME'; put ',termstr=CRLF'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc when writing the CSV)'; put ')'; put '%mpe_loader(mperef=&mperef'; put ',submitted_reason_txt=%superq(message)'; put ',approver=%quote(%trim(&approver))'; put ',url=%superq(url)'; put ',dc_dttmtfmt=&dc_dttmtfmt'; put ')'; put '%mp_abort(mode=INCLUDE)'; put '%mp_abort('; put 'iftrue=(%sysfunc(fileexist(%sysfunc(pathname(work))/mf_abort.error))=1)'; put ',mac=&_program..sas'; put ',msg=%str(mf_abort.error=1)'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '/* send relevant SUCCESS values */'; put 'data sasparams;'; put 'STATUS=''SUCCESS'';'; put 'DSID="&mperef";'; put 'url="&url";'; put 'run;'; put '%removecolsfromwork(___TMP___MD5)'; put '%webout(OPEN)'; put '%webout(OBJ,sasparams)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/hooks; %let service=mpe_column_level_security_postedit; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Post Edit Hook script for the MPE_COLUMN_LEVEL_SECURITY table'; put '@details Post edit hooks provide additional backend validation for user'; put 'provided data. The incoming dataset is named `work.staging_ds` and is'; put 'provided in mpe_loader.sas.'; put 'Available macro variables:'; put '@li DC_LIBREF - The DC control library'; put '@li LIBREF - The library of the dataset being edited (is assigned)'; put '@li DS - The dataset being edited'; put 'This validation checks the incoming column_level_security settings to ensure'; put 'each individual filter is valid'; put '**/'; put '/* check scope values and ensure uppercasing */'; put '%let errflag=0;'; put '%let errmsg=;'; put 'data work.staging_ds;'; put 'set work.staging_ds;'; put 'cls_scope=upcase(cls_scope);'; put 'CLS_LIBREF=upcase(CLS_LIBREF);'; put 'cls_table=upcase(CLS_TABLE);'; put 'CLS_VARIABLE_NM=upcase(CLS_VARIABLE_NM);'; put 'if cls_scope not in (''ALL'',''VIEW'',''EDIT'') then do;'; put 'call symputx(''errflag'',1);'; put 'call symputx(''errmsg'',"Invalid scope: "!!cls_scope);'; put 'stop;'; put 'end;'; put 'if cls_hide<1 then cls_hide=0;'; put 'else cls_hide=1;'; put 'if CLS_ACTIVE<1 then CLS_ACTIVE=0;'; put 'else CLS_ACTIVE=1;'; put 'run;'; put '%mp_abort(iftrue=(&errflag=1)'; put ',mac=mpe_column_level_security_postedit'; put ',msg=%superq(errmsg)'; put ')'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=mpe_row_level_security_postedit; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_filtergenerate(inds,outref=filter);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put 'filename &outref temp;'; put '%if %mf_nobs(&inds)=0 %then %do;'; put '/* ensure we have a default filter */'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc sort data=&inds;'; put 'by SUBGROUP_ID;'; put 'run;'; put 'data _null_;'; put 'file &outref lrecl=32800;'; put 'set &inds end=last;'; put 'by SUBGROUP_ID;'; put 'if _n_=1 then put ''(('';'; put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';'; put 'else put +2 SUBGROUP_LOGIC;'; put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;'; put 'if last.SUBGROUP_ID then put '')''@;'; put 'if last then put '')'';'; put 'run;'; put '%end;'; put '%mend mp_filtergenerate;'; put '%macro mp_filtervalidate(inref,targetds,abort=YES,outds=work.mp_filtervalidate);'; put '%mp_abort(iftrue= (&syscc ne 0 or &syserr ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc / syserr=&syserr - on macro entry)'; put ')'; put '%local fref1;'; put '%let fref1=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &fref1;'; put 'infile &inref end=eof;'; put 'if _n_=1 then do;'; put 'put "proc sql;";'; put 'put "validate select * from &targetds";'; put 'put "where " ;'; put 'end;'; put 'input;'; put 'put _infile_;'; put 'putlog _infile_;'; put 'if eof then put ";quit;";'; put 'run;'; put '%inc &fref1;'; put 'data &outds;'; put 'if &sqlrc or &syscc or &syserr then do;'; put 'REASON_CD=''VALIDATION_ERR''!!''OR: ''!!'; put 'coalescec(symget(''SYSERRORTEXT''),symget(''SYSWARNINGTEXT''));'; put 'output;'; put 'end;'; put 'else stop;'; put 'run;'; put 'filename &fref1 clear;'; put '%if %mf_nobs(&outds)>0 %then %do;'; put '%if &abort=YES %then %do;'; put 'data _null_;'; put 'set &outds;'; put 'call symputx(''REASON_CD'',reason_cd,''l'');'; put 'stop;'; put 'run;'; put '%mp_abort('; put 'mac=&sysmacroname,'; put 'msg=%str(Filter validation issues.)'; put ')'; put '%end;'; put '%let syscc=1008;'; put '%end;'; put '%mend mp_filtervalidate;'; put '%macro mp_filtercheck(inds,targetds=,outds=work.badrecords,abort=YES);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put '/* Validate input column */'; put '%local vtype;'; put '%let vtype=%mf_getvartype(&inds,RAW_VALUE);'; put '%mp_abort(iftrue=(&abort=YES and &vtype ne C),'; put 'mac=&sysmacroname,'; put 'msg=%str(%str(ERR)OR: RAW_VALUE must be character)'; put ')'; put '%if &vtype ne C %then %do;'; put '%put &sysmacroname: RAW_VALUE must be character;'; put '%let syscc=42;'; put '%return;'; put '%end;'; put '/**'; put '* Sanitise the values based on valid value lists, then strip out'; put '* quotes, commas, periods and spaces.'; put '*/'; put '%local reason_cd nobs;'; put '%let nobs=0;'; put 'data &outds;'; put '/*length GROUP_LOGIC SUBGROUP_LOGIC $3 SUBGROUP_ID 8 VARIABLE_NM $32'; put 'OPERATOR_NM $10 RAW_VALUE $4000;*/'; put 'set &inds end=last;'; put 'length reason_cd $4032 vtype vtype2 $1 vnum dsid 8 tmp $4000;'; put 'drop tmp;'; put '/* quick check to ensure column exists */'; put 'if upcase(VARIABLE_NM) not in'; put '(%upcase(%mf_getvarlist(&targetds,dlm=%str(,),quote=SINGLE)))'; put 'then do;'; put 'REASON_CD="Variable "!!cats(variable_nm)!!" not in &targetds";'; put 'putlog REASON_CD= VARIABLE_NM=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'return;'; put 'end;'; put '/* need to open the dataset to get the column type */'; put 'retain dsid;'; put 'if _n_=1 then dsid=open("&targetds","i");'; put 'if dsid>0 then do;'; put 'vnum=varnum(dsid,VARIABLE_NM);'; put 'if vnum<1 then do;'; put '/* should not happen as was also tested for above */'; put 'REASON_CD=cats("Variable (",VARIABLE_NM,") not found in &targetds");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put '/* now we can get the type */'; put 'else vtype=vartype(dsid,vnum);'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Could not open &targetds");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'stop;'; put 'end;'; put '/* closed list checks */'; put 'if GROUP_LOGIC not in (''AND'',''OR'') then do;'; put 'REASON_CD=''GROUP_LOGIC should be AND/OR, not:''!!cats(GROUP_LOGIC);'; put 'putlog REASON_CD= GROUP_LOGIC=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if SUBGROUP_LOGIC not in (''AND'',''OR'') then do;'; put 'REASON_CD=''SUBGROUP_LOGIC should be AND/OR, not:''!!cats(SUBGROUP_LOGIC);'; put 'putlog REASON_CD= SUBGROUP_LOGIC=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if mod(SUBGROUP_ID,1) ne 0 then do;'; put 'REASON_CD=''SUBGROUP_ID should be integer, not ''!!cats(subgroup_id);'; put 'putlog REASON_CD= SUBGROUP_ID=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if OPERATOR_NM not in'; put '(''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'',''BETWEEN'',''IN'',''NOT IN'',''CONTAINS'')'; put 'then do;'; put 'REASON_CD=''Invalid OPERATOR_NM: ''!!cats(OPERATOR_NM);'; put 'putlog REASON_CD= OPERATOR_NM=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put '/* special missing logic */'; put 'if vtype=''N'' & OPERATOR_NM in (''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'') then do;'; put 'if cats(upcase(raw_value)) in ('; put '''.'',''.A'',''.B'',''.C'',''.D'',''.E'',''.F'',''.G'',''.H'',''.I'',''.J'',''.K'',''.L'',''.M'',''.N'''; put '''.N'',''.O'',''.P'',''.Q'',''.R'',''.S'',''.T'',''.U'',''.V'',''.W'',''.X'',''.Y'',''.Z'',''._'''; put ')'; put 'then do;'; put '/* valid numeric - exit data step loop */'; put 'return;'; put 'end;'; put 'else if subpad(upcase(raw_value),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put 'vnum=varnum(dsid,subpad(raw_value,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'end;'; put '/* special logic */'; put 'if OPERATOR_NM in (''IN'',''NOT IN'',''BETWEEN'') then do;'; put 'if OPERATOR_NM=''BETWEEN'' then raw_value1=tranwrd(raw_value,'' AND '','','');'; put 'else do;'; put 'if substr(raw_value,1,1) ne ''('''; put 'or substr(cats(reverse(raw_value)),1,1) ne '')'''; put 'then do;'; put 'REASON_CD=''Missing start/end bracket in RAW_VALUE'';'; put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'else raw_value1=substr(raw_value,2,max(length(raw_value)-2,0));'; put 'end;'; put '/* we now have a comma seperated list of values */'; put 'if vtype=''N'' then do i=1 to countc(raw_value1, '','')+1;'; put 'tmp=scan(raw_value1,i,'','');'; put 'if cats(tmp) ne ''.'' and input(tmp, ?? 8.) eq . then do;'; put 'if OPERATOR_NM =''BETWEEN'' and subpad(upcase(tmp),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put '/* is not valid syntax for IN or NOT IN */'; put 'vnum=varnum(dsid,subpad(tmp,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'REASON_CD=''Non Numeric value provided'';'; put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'return;'; put 'end;'; put 'end;'; put 'else raw_value1=raw_value;'; put '/* remove nested literals eg '''' */'; put 'raw_value1=tranwrd(raw_value1,"''''",'''');'; put '/* now match string literals (always single quotes) */'; put 'raw_value2=raw_value1;'; put 'regex = prxparse("s/(\'').*?(\'')//");'; put 'call prxchange(regex,-1,raw_value2);'; put '/* remove commas and periods*/'; put 'raw_value3=compress(raw_value2,'',.'');'; put '/* output records that contain values other than digits and spaces */'; put 'if notdigit(compress(raw_value3,'' ''))>0 then do;'; put 'if vtype=''C'' and subpad(upcase(raw_value),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put 'vnum=varnum(dsid,subpad(raw_value,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Char Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'putlog raw_value3= $hex32.;'; put 'REASON_CD=cats(''Invalid RAW_VALUE:'',raw_value);'; put 'putlog (_all_)(=);'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'endstep:'; put 'if last then rc=close(dsid);'; put 'run;'; put 'data _null_;'; put 'set &outds end=last;'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue=(&abort=YES and &nobs>0),'; put 'mac=&sysmacroname,'; put 'msg=%str(Data issue: %superq(reason_cd))'; put ')'; put '%if &nobs>0 %then %do;'; put '%let syscc=1008;'; put '%return;'; put '%end;'; put '/**'; put '* syntax checking passed but it does not mean the filter is valid'; put '* for that we can run a proc sql validate query'; put '*/'; put '%local fref1;'; put '%let fref1=%mf_getuniquefileref();'; put '%mp_filtergenerate(&inds,outref=&fref1)'; put '/* this macro will also set syscc to 1008 if any issues found */'; put '%mp_filtervalidate(&fref1,&targetds,outds=&outds,abort=&abort)'; put '%mend mp_filtercheck;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Post Edit Hook script for the MPE_ROW_LEVEL_SECURITY table'; put '@details Post edit hooks provide additional backend validation for user'; put 'provided data. The incoming dataset is named `work.staging_ds` and is'; put 'provided in mpe_loader.sas.'; put 'Available macro variables:'; put '@li DC_LIBREF - The DC control library'; put '@li LIBREF - The library of the dataset being edited (is assigned)'; put '@li DS - The dataset being edited'; put 'This validation checks the incoming row_level_security settings to ensure'; put 'each individual filter is'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li mp_filtercheck.sas'; put '

Related Macros

'; put '@li mpe_loader.sas'; put '**/'; put '/* ignore scope and group for validation */'; put 'proc sql;'; put 'create table work.batches as'; put 'select distinct upcase(rls_libref) as rls_libref,'; put 'upcase(rls_table) as rls_table,'; put 'rls_group_logic as group_logic,'; put 'rls_subgroup_logic as subgroup_logic,'; put 'rls_subgroup_id as subgroup_id,'; put 'rls_variable_nm as variable_nm,'; put 'rls_operator_nm as operator_nm,'; put 'rls_raw_value as raw_value'; put 'from work.staging_ds'; put 'where rls_active=1'; put 'order by rls_libref, rls_table;'; put '%let cnt=0;'; put 'data _null_;'; put 'set work.batches;'; put 'by rls_libref rls_table;'; put 'putlog (_all_)(=);'; put 'if last.rls_table then do;'; put 'x+1;'; put 'call symputx(cats(''libds'',x),cats(rls_libref,''.'',rls_table));'; put 'call symputx(''cnt'',x);'; put 'end;'; put 'run;'; put '%macro quickloop();'; put '%do i=1 %to &cnt;'; put 'data work.inds&i;'; put 'set work.batches;'; put 'if cats(rls_libref,''.'',rls_table)="&&libds&i";'; put 'keep group_logic subgroup_logic subgroup_id variable_nm operator_nm'; put 'raw_value;'; put 'run;'; put '%dc_assignlib(READ,%scan(&&libds&i,1,.))'; put '%mp_filtercheck(work.inds&i'; put ',targetds=&&libds&i'; put ',outds=work.badrecords'; put ',abort=YES'; put ')'; put '%end;'; put '%mend quickloop;'; put '%quickloop()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=mpe_security_postedit; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Post Edit Hook script for the MPE_SECURITY table'; put '@details Post edit hooks provide additional backend validation against'; put 'user-sourced data. The incoming dataset is always `work.staging_ds` and this'; put 'file is included from the mpe_loader.sas macro.'; put 'Available (at runtime) macro variables:'; put '@li DC_LIBREF - The DC control library for your site'; put '@li LIBREF - The library of the dataset being edited (is assigned)'; put '@li DS - The dataset being edited'; put '**/'; put '/* ensure upcase and check access level values*/'; put '%let errval=0;'; put '%let errmsg=;'; put 'data work.staging_ds;'; put 'set work.staging_ds;'; put 'LIBREF=upcase(LIBREF);'; put 'DSN=upcase(DSN);'; put 'ACCESS_LEVEL=upcase(ACCESS_LEVEL);'; put 'if ACCESS_LEVEL not in (''EDIT'',''APPROVE'',''VIEW'',''SIGNOFF'',''AUDIT'') then do;'; put 'putlog "ERR" +(-1) "OR: invalid ACCESS_LEVEL - " access_level;'; put 'call symputx(''errval'',1);'; put 'call symputx(''errmsg'',"Invalid ACCESS_LEVEL: "!!access_level);'; put 'end;'; put 'run;'; put '%mp_abort(iftrue=(&errval=1)'; put ',mac=mpe_security_postedit.sas'; put ',msg=%str(&errmsg)'; put ')'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=mpe_tables_postedit; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Post Edit Hook script for the MPE_TABLES table'; put '@details Post edit hooks provide additional backend validation for user'; put 'provided data. The incoming dataset is named `work.staging_ds` and is'; put 'provided in mpe_loader.sas.'; put 'Available macro variables:'; put '@li DC_LIBREF - The DC control library'; put '@li LIBREF - The library of the dataset being edited (is assigned)'; put '@li DS - The dataset being edited'; put 'This validation checks MPE_TABLES to ensure modified / added records are'; put 'valid. If a non-default AUDIT_LIBDS is being used, there is also a check'; put 'to ensure that this table already exists.'; put '**/'; put '%let errmsg=;'; put '%let errflag=0;'; put '/* ensure uppercasing */'; put 'data work.staging_ds;'; put 'set work.staging_ds;'; put '/* PK fields should not be upcased if we are trying to delete records */'; put 'if upcase(_____DELETE__THIS__RECORD_____) ne "YES" then do;'; put 'LIBREF=upcase(LIBREF);'; put 'DSN=upcase(DSN);'; put 'end;'; put 'loadtype=upcase(loadtype);'; put 'buskey=upcase(buskey);'; put 'var_txfrom=upcase(var_txfrom);'; put 'var_txto=upcase(var_txto);'; put 'var_busfrom=upcase(var_busfrom);'; put 'var_busto=upcase(var_busto);'; put 'var_processed=upcase(var_processed);'; put 'close_vars=upcase(close_vars);'; put 'audit_libds=upcase(audit_libds);'; put 'rk_underlying=upcase(rk_underlying);'; put '/* check for valid loadtype */'; put 'if LOADTYPE not in (''UPDATE'',''TXTEMPORAL'',''FORMAT_CAT'',''BITEMPORAL'',''REPLACE'')'; put 'then do;'; put 'call symputx(''errmsg'',"Invalid LOADTYPE: "!!LOADTYPE);'; put 'call symputx(''errflag'',1);'; put 'end;'; put '/* force correct BUSKEY and DSN when loading format catalogs */'; put 'if LOADTYPE=''FORMAT_CAT'' then do;'; put 'BUSKEY=''TYPE FMTNAME FMTROW'';'; put 'DSN=scan(dsn,1,''-'')!!''-FC'';'; put 'end;'; put '/* convert tabs into spaces */'; put 'buskey=translate(buskey," ","09"x);'; put 'rk_underlying=translate(rk_underlying," ","09"x);'; put 'run;'; put '%mp_abort(iftrue=(&errflag=1)'; put ',mac=mpe_tables_postedit'; put ',msg=%superq(errmsg)'; put ')'; put '/* get distinct list of audit libs */'; put 'proc sql;'; put 'create table work.liblist as'; put 'select distinct audit_libds'; put 'from work.staging_ds'; put 'where audit_libds not in ('''',''0'', "&dc_libref..MPE_AUDIT")'; put 'and upcase(_____DELETE__THIS__RECORD_____) ne "YES";'; put '/* assign the libs */'; put 'data _null_;'; put 'set work.liblist;'; put 'call symputx(cats(''lib'',_n_),audit_libds);'; put 'libref=scan(audit_libds,1,''.'');'; put 'call execute(''%dc_assignlib(WRITE,''!!libref!!'')'');'; put 'run;'; put '/* check the audit tables exist */'; put 'data _null_;'; put 'set work.liblist;'; put 'if exist(audit_libds,"DATA")=0 then do;'; put 'call symputx(''errmsg'','; put '"Audit Table "!!audit_libds!!" does not exist, or could not be assigned."'; put ');'; put 'call symputx(''errflag'',1);'; put 'end;'; put 'run;'; put '%mp_abort(iftrue=(&errflag=1)'; put ',mac=mpe_tables_postedit'; put ',msg=%superq(errmsg)'; put ')'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=mpe_validations_postedit; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Post Edit Hook script for the MPE_VALIDATIONS table'; put '@details Post edit hooks provide additional backend validation for user'; put 'provided data. The incoming dataset is named `work.staging_ds` and is'; put 'provided in mpe_loader.sas.'; put 'Available macro variables:'; put '@li DC_LIBREF - The DC control library'; put '@li LIBREF - The library of the dataset being edited (is assigned)'; put '@li DS - The dataset being edited'; put 'This validation checks the incoming mpe_validations settings to ensure'; put 'there are no columns that have both HARDSELECT_HOOK and SOFTSELECT_HOOK.'; put '

SAS Macros

'; put '@li mf_nobs.sas'; put '

Related Macros

'; put '@li mpe_loader.sas'; put '**/'; put '/** check to avoid a colum having both HARDSELECT_HOOK and SOFTSELECT_HOOK */'; put '/* need to merge with base table in the case of a single row being added */'; put '%global src_list1 src_list2;'; put '%let src_list1='''';'; put 'proc sql noprint;'; put 'create table work.check1 as'; put 'select quote(catx(''.'',base_lib,base_ds,base_col)) as source'; put ',rule_type'; put 'from work.staging_ds'; put 'where rule_type in (''SOFTSELECT_HOOK'',''HARDSELECT_HOOK'')'; put 'and upcase(_____DELETE__THIS__RECORD_____) ne "YES";'; put 'select distinct cats(source) into: src_list1 separated by '','''; put 'from work.check1;'; put 'create table work.check2 as'; put 'select quote(catx(''.'',base_lib,base_ds,base_col)) as source'; put ',rule_type'; put 'from &DC_LIBREF..MPE_VALIDATIONS'; put 'where rule_type in (''SOFTSELECT_HOOK'',''HARDSELECT_HOOK'')'; put 'and &dc_dttmtfmt. lt tx_to'; put 'and catx(''.'',base_lib,base_ds,base_col) in (&src_list1);'; put 'create table work.check3 as'; put 'select * from work.check1'; put 'union'; put 'select * from work.check2;'; put 'create table work.validation_checker as'; put 'select source'; put ',count(*) as cnt'; put 'from work.check3'; put 'group by 1'; put 'having cnt>1;'; put 'select distinct source into: src_list2 from work.validation_checker;'; put 'data _null_;'; put 'set work.validation_checker;'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (%mf_nobs(work.validation_checker)>0)'; put ',mac=mpe_validations_postedit'; put ',msg=%str(The following vars have duplicate HOOKS: &src_list2)'; put ')'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=mpe_xlmap_info_postedit; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mp_validatecol(incol,rule,outcol);'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename();'; put '%if &rule=ISINT %then %do;'; put '&outcol=0;'; put 'if not missing(&incol) then do;'; put '&tempcol=input(&incol,?? best32.);'; put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;'; put 'end;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=ISNUM %then %do;'; put '/*'; put 'credit SOREN LASSEN'; put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html'; put '*/'; put '&tempcol=input(&incol,?? best32.);'; put 'if missing(&tempcol) then &outcol=0;'; put 'else &outcol=1;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=LIBDS %then %do;'; put '/* match libref.dataset */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%else %if &rule=FORMAT %then %do;'; put '/* match valid format - regex could probably be improved */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%mend mp_validatecol;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Post Edit Hook script for the MPE_XLMAP_INFO table'; put '@details Post edit hooks provide additional backend validation for user'; put 'provided data. The incoming dataset is named `work.staging_ds` and is'; put 'provided in mpe_loader.sas.'; put 'Available macro variables:'; put '@li DC_LIBREF - The DC control library'; put '@li LIBREF - The library of the dataset being edited (is assigned)'; put '@li DS - The dataset being edited'; put '

SAS Macros

'; put '@li mf_existds.sas'; put '@li mf_getvarlist.sas'; put '@li mf_wordsinstr1butnotstr2.sas'; put '@li dc_assignlib.sas'; put '@li mp_validatecol.sas'; put '**/'; put 'data work.staging_ds;'; put 'set work.staging_ds;'; put '/* apply the first excel map to all cells */'; put 'length tgtds $41;'; put 'retain tgtds;'; put 'drop tgtds is_libds;'; put 'if _n_=1 then do;'; put 'if missing(XLMAP_TARGETLIBDS) then tgtds="&dc_libref..MPE_XLMAP_DATA";'; put 'else tgtds=upcase(XLMAP_TARGETLIBDS);'; put '%mp_validatecol(XLMAP_TARGETLIBDS,LIBDS,is_libds)'; put 'call symputx(''tgtds'',tgtds);'; put 'call symputx(''is_libds'',is_libds);'; put 'end;'; put 'XLMAP_TARGETLIBDS=tgtds;'; put 'run;'; put '%mp_abort(iftrue=(&is_libds ne 1)'; put ',mac=mpe_xlmap_info_postedit'; put ',msg=Invalid target dataset (&tgtds)'; put ')'; put '/**'; put '* make sure that the supplied target dataset exists and'; put '* has the necessary columns'; put '*/'; put '%dc_assignlib(READ,%scan(&tgtds,1,.))'; put '%mp_abort(iftrue=(%mf_existds(libds=&tgtds) ne 1)'; put ',mac=mpe_xlmap_info_postedit'; put ',msg=Target dataset (&tgtds) could not be opened'; put ')'; put '%let tgtvars=%upcase(%mf_getvarlist(&tgtds));'; put '%let srcvars=%upcase(%mf_getvarlist(&dc_libref..MPE_XLMAP_DATA));'; put '%let badvars1=%mf_wordsInStr1ButNotStr2(Str1=&srcvars,Str2=&tgtvars);'; put '%let badvars2=%mf_wordsInStr1ButNotStr2(Str1=&tgtvars,Str2=&srcvars);'; put '%mp_abort(iftrue=(%length(&badvars1.X)>1)'; put ',mac=mpe_xlmap_info_postedit'; put ',msg=%str(Target dataset (&tgtds) has missing vars: &badvars1)'; put ')'; put '%mp_abort(iftrue=(%length(&badvars2.X)>1)'; put ',mac=mpe_xlmap_info_postedit'; put ',msg=%str(Target dataset (&tgtds) has unrecognised vars: &badvars2)'; put ')'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=mpe_xlmap_rules_postedit; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Post Edit Hook script for the MPE_XLMAP_RULES table'; put '@details Post edit hooks provide additional backend validation for user'; put 'provided data. The incoming dataset is named `work.staging_ds` and is'; put 'provided in mpe_loader.sas.'; put 'Available macro variables:'; put '@li DC_LIBREF - The DC control library'; put '@li LIBREF - The library of the dataset being edited (is assigned)'; put '@li DS - The dataset being edited'; put '**/'; put 'data work.staging_ds;'; put 'set work.staging_ds;'; put '/* ensure uppercasing */'; put 'XLMAP_ID=upcase(XLMAP_ID);'; put 'run;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=sample_xlmap_data_postapprove; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Sample XLMAP Data hook program (sample_xlmap_data_postapprove)'; put '@details This hook script should NOT be modified in place, as the changes'; put 'would be lost in your next Data Controller deployment.'; put 'Instead, create a copy of this hook script and place it OUTSIDE the'; put 'Data Controller metadata folder.'; put 'Available macro variables:'; put '@li LOAD_REF - The Load Reference (unique upload id)'; put '@li ORIG_LIBDS - The target library.dataset that was just loaded'; put '**/'; put 'data _null_;'; put 'set work.staging_ds;'; put 'putlog ''load ref is in the staged data: '' load_ref;'; put 'stop;'; put 'run;'; put '%put the unique identifier (LOAD_REF) is also a macro variable: &LOAD_REF;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=sample_xlmap_data_postedit; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Sample XLMAP Data hook program'; put '@details This hook script should NOT be modified in place, as the changes'; put 'would be lost in your next Data Controller deployment.'; put 'Instead, create a copy of this hook script and place it OUTSIDE the'; put 'Data Controller metadata folder.'; put 'Available macro variables:'; put '@li DC_LIBREF - The DC control library'; put '@li LIBREF - The library of the dataset being edited (is assigned)'; put '@li DS - The target dataset being loaded'; put '**/'; put '%let abort=0;'; put '%let errmsg=;'; put 'data work.staging_ds;'; put 'set work.staging_ds;'; put 'length errmsg $1000;'; put 'drop err:;'; put '/* KM1 validations */'; put 'if XLMAP_ID=''BASEL-KM1'' then do;'; put 'if XLMAP_RANGE_ID=''KM1:a'' & input(value_txt,8.)<100 then do;'; put 'errmsg=''Should be greater than 100'';'; put 'err=1;'; put 'end;'; put 'end;'; put '/* CR2 Validations */'; put 'if XLMAP_ID=''BASEL-CR2'' then do;'; put 'if XLMAP_RANGE_ID=''CR2-sec1'' & row_no=3 & input(value_txt,8.)>0 then do;'; put 'errmsg=''Should be negative'';'; put 'err=1;'; put 'end;'; put 'end;'; put '/* publish error message */'; put 'if err=1 then do;'; put 'errmsg=catx('' '',xlmap_range_id,'':'',value_txt,''->'',errmsg);'; put 'call symputx(''errmsg'',errmsg);'; put 'call symputx(''abort'',1);'; put 'end;'; put 'run;'; put '%mp_abort(iftrue=(&abort ne 0)'; put ',mac=xlmap_data_postedit'; put ',msg=%superq(errmsg)'; put ')'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/lineage; %let service=fetchcollineage; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '/** @cond */'; put '%macro mf_existvar(libds /* 2 part dataset name */'; put ', var /* variable name */'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid=0 %then %do;'; put '%put %sysfunc(sysmsg());'; put '0'; put '%end;'; put '%else %if %length(&var)=0 %then %do;'; put '0'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%sysfunc(varnum(&dsid,&var))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_existvar;'; put '/** @endcond */'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro bitemporal_closeouts('; put 'tech_from=tx_from_dttm'; put ',tech_to = tx_to_dttm /* Technical TO datetime variable.'; put 'Req''d on BASE table only. */'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE /* Name of STAGING table. */'; put ',PK= name sex /* Business key, space separated. */'; put '/* Should INCLUDE BUS_FROM field if relevant. */'; put ',NOW=DEFINE'; put ',FILTER= /* supply a filter to limit the update */'; put ',outdest= /* supply an unquoted filepath/filename.ext to get'; put 'a text file containing the update statements */'; put ',loadtype='; put ',loadtarget=YES /* if <> YES will return without changing anything */'; put ');'; put '%put ENTERING &sysmacroname;'; put '%local x var start;'; put '%let start=%sysfunc(datetime());'; put '%dc_assignlib(WRITE,&base_lib)'; put '%dc_assignlib(WRITE,&append_lib)'; put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;'; put '%put &=now;'; put '/**'; put '* perform basic checks'; put '*/'; put '/* do tables exist? */'; put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;'; put '%mp_abort(msg=&base_lib..&base_dsn does not exist)'; put '%end;'; put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;'; put '%mp_abort(msg=&append_lib..&append_dsn does not exist)'; put '%end;'; put '/* do TX columns exist? */'; put '%if &loadtype ne UPDATE %then %do;'; put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;'; put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;'; put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%end;'; put '/* do PK columns exist? */'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)'; put '%end;'; put '%end;'; put '/* check uniqueness */'; put 'proc sort data=&append_lib..&append_dsn'; put 'out=___closeout1 noduprecs dupout=___closeout1a;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then'; put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);'; put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */'; put '%local gap;'; put '%let gap=0;'; put 'data _null_;'; put 'now=&now;'; put 'gap=intck(''HOURS'',now,datetime());'; put 'call symputx(''gap'',gap,''l'');'; put 'run;'; put '%mf_abort('; put 'iftrue=(&gap > 24),'; put 'msg=NOW variable (&now) is not within a 24hr tolerance'; put ')'; put '/* have any warnings / errs occurred thus far? If so, abort */'; put '%mf_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/**'; put '* Create closeout statements. These are sent as individual SQL statements'; put '* to ensure pass-through utilisation. The update_cnt variable monitors'; put '* how many records were actually updated on the target table.'; put '*/'; put '%local update_cnt;'; put '%let update_cnt=0;'; put 'filename tmp temp;'; put 'data _null_;'; put 'set ___closeout1;'; put 'file tmp;'; put 'if _n_=1 then put ''proc sql noprint;'' ;'; put 'length string $32767.;'; put '%if &loadtype=UPDATE %then %do;'; put 'put "delete from &base_lib..&base_dsn where 1";'; put '%end;'; put '%else %do;'; put 'now=symget(''now'');'; put 'put "update &base_lib..&base_dsn set &tech_to= " now @;'; put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;'; put 'put " ,PROCESSED_DTTM=" now @;'; put '%end;'; put 'put " where " now " lt &tech_to ";'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;'; put '/* use single quotes to avoid ampersand resolution in data */'; put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";'; put '%end;'; put '%else %do;'; put 'string=cats(" & &var=",&var);'; put '%end;'; put 'put string;'; put '%end;'; put 'put "&filter ;";'; put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';'; put 'run;'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%if &loadtarget ne YES %then %return;'; put '/* ensure we have a lock */'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn'; put ',ref=bitemporal_closeouts'; put ',ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'options source2;'; put '%inc tmp;'; put 'filename tmp clear;'; put '/**'; put '* Update audit tracker'; put '*/'; put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);'; put '%local user; %let user=%mf_getuser();'; put 'proc sql;'; put 'insert into &mpelib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"'; put ',LOADTYPE="CLOSEOUT"'; put ',DELETED_RECORDS=&update_cnt'; put ',NEW_RECORDS=0'; put ',DURATION=%sysfunc(datetime())-&start'; put ',USER_NM="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%mend bitemporal_closeouts;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=''Schema/Owner'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '/** @cond */'; put '%macro mp_storediffs(libds'; put ',origds'; put ',key'; put ',delds=0'; put ',appds=0'; put ',modds=0'; put ',outds=work.mp_storediffs'; put ',loadref=0'; put ',processed_dttm=0'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));'; put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));'; put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));'; put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));'; put '%let dslist=&origds;'; put '%if &delds ne 0 %then %do;'; put '%let delds=%upcase(&delds);'; put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;'; put '%let dslist=&dslist &delds;'; put '%end;'; put '%if &appds ne 0 %then %do;'; put '%let appds=%upcase(&appds);'; put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;'; put '%let dslist=&dslist &appds;'; put '%end;'; put '%if &modds ne 0 %then %do;'; put '%let modds=%upcase(&modds);'; put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;'; put '%let dslist=&dslist &modds;'; put '%end;'; put '%let origds=%upcase(&origds);'; put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;'; put '%let key=%upcase(&key);'; put '/* hash the key and append all the tables (marking the source) */'; put 'data &ds1;'; put 'set &dslist indsname=&inds_auto;'; put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);'; put '&inds_keep=upcase(&inds_auto);'; put 'proc sort;'; put 'by &inds_keep &hashkey;'; put 'run;'; put '/* transpose numeric & char vars */'; put 'proc transpose data=&ds1'; put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));'; put 'by &inds_keep &hashkey;'; put 'var _numeric_;'; put 'run;'; put 'proc transpose data=&ds1'; put 'out=&ds3('; put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)'; put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))'; put ');'; put 'by &inds_keep &hashkey;'; put 'var _character_;'; put 'run;'; put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;'; put '/* this is a format catalog - cannot query cols directly */'; put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"'; put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"'; put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";'; put '%end;'; put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);'; put 'data &ds4;'; put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;'; put 'if _n_=1 then call missing(_label_);'; put 'drop _label_;'; put 'set &ds2 &ds3 indsname=&inds_auto;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%upcase(&vlist));'; put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';'; put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;'; put 'call symputx(''syscc'',98);'; put 'end;'; put 'if &inds_keep="&appds" then move_type=''A'';'; put 'else if &inds_keep="&delds" then move_type=''D'';'; put 'else if &inds_keep="&modds" then move_type=''M'';'; put 'else if &inds_keep="&origds" then move_type=''O'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;'; put 'call symputx(''syscc'',99);'; put 'end;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;'; put 'else is_pk=0;'; put 'drop &inds_keep;'; put 'run;'; put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());'; put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);'; put '%let libds=%upcase(&libds);'; put '/* join orig vals for modified & deleted */'; put 'proc sql;'; put 'create table &outds as'; put 'select "&loadref" as load_ref length=36'; put ',&processed_dttm as processed_dttm format=E8601DT26.6'; put ',"%scan(&libds,1,.)" as libref length=8'; put ',"%scan(&libds,2,.)" as dsn length=32'; put ',b.key_hash length=32'; put ',b.move_type length=1'; put ',b.tgtvar_nm length=32'; put ',b.is_pk'; put ',case when b.move_type ne ''M'' then -1'; put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0'; put 'else 1'; put 'end as is_diff'; put ',b.tgtvar_type length=1'; put ',case when b.move_type=''D'' then b.newval_num'; put 'else a.newval_num'; put 'end as oldval_num format=best32.'; put ',case when b.move_type=''D'' then .'; put 'else b.newval_num'; put 'end as newval_num format=best32.'; put ',case when b.move_type=''D'' then b.newval_char'; put 'else a.newval_char'; put 'end as oldval_char length=32765'; put ',case when b.move_type=''D'' then '''''; put 'else b.newval_char'; put 'end as newval_char length=32765'; put 'from &ds4(where=(move_type=''O'')) as a'; put 'right join &ds4(where=(move_type ne ''O'')) as b'; put 'on a.tgtvar_nm=b.tgtvar_nm'; put 'and a.key_hash=b.key_hash'; put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4;'; put '%end;'; put '%mend mp_storediffs;'; put '/** @endcond */'; put '%macro bitemporal_dataloader('; put 'bus_from= /* Business FROM datetime variable. Req''d on'; put 'STAGING & BASE tables.*/'; put ',bus_to = /* Business TO datetime variable. Req''d on'; put 'STAGING & BASE tables. */'; put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/'; put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */'; put ',tech_from= /* Technical FROM datetime variable. Req''d on'; put 'BASE table only. */'; put ',tech_to = /* Technical TO datetime variable. Req''d on BASE'; put 'table only. */'; put ',processed= 0'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE'; put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */'; put ',PK= name sex'; put ',RK_UNDERLYING='; put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */'; put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular'; put 'SCD2 loader then set this switch to YES to'; put 'ensure the MAXKEYTABLE is updated with the'; put 'current maximum RK value for the target table'; put '*/'; put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is'; put 'unique on its business key */'; put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in'; put '&dclib..DATALOADS */'; put ',LOADTYPE=BITEMPORAL'; put ',RK_MAXKEYTABLE= mpe_maxkeyvalues'; put ',LOG=1 /* Switch to 0 to prevent records being added to'; put '&mpelib..mpe_DATALOADS (ie when testing)*/'; put ',DELETE_COL= _____DELETE__THIS__RECORD_____'; put '/* If this variable is found in the append dataset'; put 'then records are closed out (or deleted) in the'; put 'append table where that variable= "Yes" */'; put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off'; put 'target table load and generate temp tables only */'; put ',CLOSE_VARS='; put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is'; put 'no facility to close out removed records (all records are'; put 'assumed new or changed). But how does one determine which'; put 'records are removed? Short of loading the entire table'; put 'each time? This parameter allows a set of variables'; put '(this should be a subset of the PK) to be declared, and'; put 'the macro will determine which records in the base table'; put 'need to be closed out ahead of the load.'; put 'For instance, given the following:'; put 'Base Table Staging Table'; put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT'; put 'JAN ACME4 66 JAN ACME4 66'; put 'FEB ACME4 99 FEB ACME4 99'; put 'FEB ACME1 22'; put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,'; put 'the "FEB PAG 22" record would get closed out.'; put '*/'; put ',config_table=&dclib..MPE_CONFIG'; put ',dclib=&dc_libref'; put ',outds_del=work.outds_del'; put ',outds_add=work.outds_add'; put ',outds_mod=work.outds_mod'; put ',outds_audit=0'; put ');'; put '/* when changing this macro, update the version num here */'; put '%local ver;'; put '%let ver=32;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */'; put '/* return straight away if nothing to load */'; put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);'; put '%if &nobs=-1 %then %do;'; put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;'; put '%end;'; put '%if &nobs=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/* hard exit if err condition exists */'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)'; put ')'; put '%local engine_type;'; put '%let engine_type=%mf_getengine(&base_lib);'; put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0'; put '%then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/**'; put '* The metadata functions (eg mf_existvar) will fail if the base table has a'; put '* SAS lock. So, make a snapshot of the base table for further use.'; put '* Also, make output tables (regardless).'; put '*/'; put '%local basecopy;'; put '%let basecopy=%mf_getuniquename(prefix=basecopy);'; put 'data &basecopy &outds_mod &outds_add &outds_del;'; put 'set &base_lib..&base_dsn;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)'; put ')'; put '%local cols idx_pk md5_col ;'; put '%let md5_col=___TMP___md5;'; put '%let check_uniqueness=%upcase(&check_uniqueness);'; put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);'; put '%let high_date=%unquote(&high_date);'; put '%let loadtype=%upcase(&loadtype);'; put '/* ensure irrelevant variables are cleared */'; put '%if &loadtype=BUSTEMPORAL %then %do;'; put '%let tech_from=;'; put '%let tech_to=;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put '%let bus_from=;'; put '%let bus_to=;'; put '%end;'; put '/* ensure relevant variables are supplied */'; put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing BUS_FROM / BUS_TO)'; put ')'; put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing TECH_FROM / TECH_TO)'; put ')'; put '/**'; put '* drop any tables (may be defined as views or vice versa preventing overwrite)'; put '*/'; put '%mp_dropmembers(append bitemp0_append bitemp_cols)'; put '/* SQL Server requires its own time values */'; put '/* 9.2 will only give picture format down to seconds. 9.3 allows'; put 'milliseconds by using lower S and defining the decimal in the format name..*/'; put 'PROC FORMAT;'; put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put '%local dbnow;'; put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'data _null_;'; put '/* convert space separated macvar to comma separated for SQL processing */'; put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');'; put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');'; put 'now=&dbnow;'; put 'call symputx(''NOW'',now,''L'');'; put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');'; put 'length etlsource $100;'; put 'etlsource=subpad(symget(''etlsource''),1,100);'; put 'call symputx(''etlsource'',etlsource,''l'');'; put 'run;'; put '/**'; put '* Even if no PROCESSED var provided, assume that any variable named'; put '* PROCESSED_DTTM should be updated'; put '*/'; put '%if &processed=0 %then %do;'; put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)'; put '%then %let processed=PROCESSED_DTTM;'; put '%else %let processed=;'; put '%end;'; put '/* extract colnames for md5 creation / change tracking */'; put 'proc contents noprint data=&base_lib..&base_dsn'; put 'out=work.bitemp_cols (keep=name type length varnum format:);'; put 'run;'; put 'proc sql noprint;'; put 'select name into: cols separated by '','''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put 'else cats(''put(md5(trim(put(ifn(missing('''; put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end'; put 'into: stripcols separated by ''||'''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put '/* set default formats*/'; put '%let bus_from_fmt = datetime19.;'; put '%let bus_to_fmt = datetime19.;'; put '%let processed_fmt = datetime19.;'; put '%let tech_from_fmt = format=datetime19.;'; put '%let tech_to_fmt = format=datetime19.;'; put '%put &=stripcols;'; put '%put &=pk;'; put 'data _null_;'; put 'set work.bitemp_cols;'; put 'if type=2 or type=6 then do;'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'if format='''' then fmt=cats(length,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put 'if upcase(name)="%upcase(&bus_from)" then'; put 'call symputx(''bus_from_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&bus_to)" then'; put 'call symputx(''bus_to_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_from)" then'; put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_to)" then'; put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&processed)" then'; put 'call symputx(''processed_fmt'',fmt,''L'');'; put 'run;'; put '%if %index(%quote(&cols),___TMP___) %then %do;'; put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim('; put ') This may conflict with temp variable generation!!);'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);'; put '%let syscc=5;'; put '%return;'; put '%end;'; put '/* if transaction dates appear on the APPEND table, need to remove them */'; put '%local drop_tx_dates /* used in append table */'; put 'drop_tx_dates_noobs /* used to take the base table structure */;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)'; put '%then %let drop_tx_dates=&tech_from;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)'; put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;'; put '%if %length(%trim(&drop_tx_dates))>0'; put '%then %let drop_tx_dates=(drop=&drop_tx_dates);'; put '%if %mf_existvar(&basecopy, &tech_from)'; put '%then %let drop_tx_dates_noobs=&tech_from;'; put '%if %mf_existvar(&basecopy, &tech_to)'; put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;'; put '%if %length(%trim(&drop_tx_dates_noobs))>0'; put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);'; put '%else %let drop_tx_dates_noobs=(obs=0);'; put '/**'; put '* Lock the table. This is necessary as we are doing a two part update (first'; put '* closing records then appending new records). It is theoretically possible'; put '* that an upload may occur whilst preparing the staging tables. And the'; put '* staging tables are about to be prepared..'; put '*/'; put '%if &LOADTARGET = YES %then %do;'; put '%put locking &base_lib..&base_dsn;'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%put locking &outds_audit;'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put '/* not an actual load, so avoid updating the max key table in next step. */'; put '%let rk_update_maxkeytable=NO;'; put '%end;'; put '%if %length(&RK_UNDERLYING)>0 %then %do;'; put '%mp_retainedkey('; put 'base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=&append_lib'; put ',append_dsn=&append_dsn'; put ',retained_key=&pk'; put ',business_key=&rk_underlying'; put ',check_uniqueness=&CHECK_UNIQUENESS'; put ',outds=work.append'; put '%if &rk_update_maxkeytable=NO %then %do;'; put ',maxkeytable=0'; put '%end;'; put '%else %do;'; put ',maxkeytable=&dclib..&RK_MAXKEYTABLE'; put '%end;'; put ',locktable=&dclib..mpe_lockanytable'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',filter_str=%str( (where=( &now < &tech_to)) )'; put '%end;'; put ')'; put '%end;'; put '%else %do;'; put 'proc sql;'; put 'create view work.append as select * from &append_lib..&append_dsn;'; put '%end;'; put '/**'; put '* generate md5 for append table'; put '*/'; put '/* it is possible the source dataset has additional (unwanted) columns.'; put 'Drop if specified; */'; put '%if %length(&keepvars)>0 %then %do;'; put '/* remove tech dates from keepvars as they are generated later */'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));'; put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);'; put '%end;'; put '/* CAS varchar types cause append issues here, so perform autoconvert'; put 'by creating empty local table first */'; put 'data;'; put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;'; put 'run;'; put '%local emptybasetable; %let emptybasetable=&syslast;'; put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put '/* apply formats for bitemporal vars but not tx dates which are added later */'; put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;'; put 'format &bus_from &bus_from_fmt;'; put 'format &bus_to &bus_to_fmt;'; put '%end;'; put 'set &emptybasetable /* base table reqd in case append has fewer cols */'; put 'work.append &drop_tx_dates;'; put '%if %length(%str(&bus_from_override))>0 %then %do;'; put '&bus_from= %unquote(&bus_from_override) ;'; put '%end;'; put '%if %length(%str(&bus_to_override))>0 %then %do;'; put '&bus_to= %unquote(&bus_to_override) ;'; put '%end;'; put 'length &md5_col $32;'; put '&md5_col=put(md5(&stripcols),hex32.);'; put '%if %length(&processed)>0 %then %do;'; put 'format &processed &processed_fmt;'; put '&processed=&now;'; put '%end;'; put '/**'; put '* If a delete column exists then create the delete dataset'; put '*/'; put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;'; put 'drop &delete_col;'; put 'if upcase(&delete_col) = "YES" then output &outds_del ;'; put 'else output work.bitemp0_append ;'; put 'run;'; put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=%scan(&outds_del,-1,.)'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put 'output work.bitemp0_append;'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc gt 0 at line 494)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if %length(&close_vars)>0 %then %do;'; put '/**'; put '* need to close out records that are not provided'; put '*/'; put 'proc sql;'; put 'create table bitemp1_closevars1 as'; put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)'; put 'from &base_lib..&base_dsn a'; put 'inner join work.bitemp0_append b'; put 'on 1=1'; put '/* join on closevars key */'; put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));'; put '%let idx_val=%scan(&close_vars,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* filter base on tech dates if necessary */'; put '%if &loadtype=TXTEMPORAL %then %do;'; put 'where a.&tech_from <=&now and &now < a.&tech_to'; put '%end;'; put ';'; put 'create table bitemp1_closevars2 as'; put 'select distinct a.*'; put 'from bitemp1_closevars1 a'; put 'left join work.bitemp0_append b'; put 'on 1=1'; put '/* join on primary key */'; put '%do idx_pk=1 %to %sysfunc(countw(&pk));'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* identify removed records by null value in a field in PK but not close_vars'; put '*/'; put 'where b.%scan('; put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )'; put ') IS NULL'; put ';'; put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=bitemp1_closevars2'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '/* grab schema */'; put '%let baselib_schema=%mf_getschema(&base_lib);'; put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;'; put '/* grab redshift config */'; put '%local redcnt; %let redcnt=0;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'data _null_;'; put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));'; put 'x+1;'; put 'call symputx(cats(''rednm'',x),var_value,''l'');'; put 'call symputx(cats(''redval'',x),var_value,''l'');'; put 'call symputx(''redcnt'',x,''l'');'; put 'run;'; put '%end;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from &baselib_schema.&base_dsn'; put 'where timestamp &sqlnow < &tech_to );'; put '%else %let base_table=&baselib_schema.&base_dsn;'; put '/* make empty table first - must clone & drop extra cols as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &temp_table alter sortkey none) by myAlias;'; put '%end;'; put '%local dropcols;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(&pk)'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;'; put '%end;'; put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp0/view=work.vw_bitemp0;'; put 'set work.bitemp0_append(keep=&pk &md5_col);'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&temp_table'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=work.vw_bitemp0 force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);'; put 'data &temp_table;'; put 'set work.bitemp0_append;'; put 'run;'; put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);'; put 'proc fedsql sessref=dcsession;'; put 'create table &bitemp0base{options replace=true} as'; put '%end;'; put '%else %do;'; put '%let temp_table=work.bitemp0_append;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put 'proc sql;'; put 'create table work.bitemp0_base as'; put '%end;'; put 'select a.&md5_col /* this identifies NEW records */'; put ', b.*'; put '/* assume first PK field cannot be null (if defined in a PK constraint then'; put 'it definitely cannot be null) */'; put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG'; put 'from &baselib_schema.&temp_table a'; put 'left join &base_table b'; put 'on 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put '); proc sql; drop table &base_lib.."&temp_table"n;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put ';'; put 'quit;'; put 'data work.bitemp0_base;'; put 'set &bitemp0base;'; put 'run;'; put 'proc sql;'; put 'drop table &temp_table;'; put 'drop table &bitemp0base;'; put '%end;'; put '%else %do;'; put ';'; put '%end;'; put '/**'; put '* matching & changed records are those without NULL key values'; put '* &idx_val resolves to rightmost PK value (loop above)'; put '*/'; put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;'; put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)'; put ')'; put '%put hashcols2=&stripcols;'; put 'proc sql;'; put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as'; put 'select *'; put ', put(md5(&stripcols),$hex32.) as &md5_col'; put 'from work.bitemp0_base (drop=&md5_col)'; put 'where ___TMP___NEW_FLG=0;'; put '/**'; put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base'; put '*/'; put 'proc sql;'; put 'create table &outds_add'; put '(drop=&md5_col'; put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;'; put '&delete_col'; put '%end;'; put ')'; put 'as select a.*'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',&now as &tech_from &tech_from_fmt'; put ',&high_date as &tech_to &tech_to_fmt'; put '%end;'; put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */'; put ', work.bitemp0_base b /* BASE records (contains null values for new) */'; put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */'; put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */'; put '/**'; put '* identify INSERTS. These are records with the same business key but'; put '* the bus_from and bus_to value are higher / lower (respectively)'; put '* such that the existing record needs to be SPLIT to surround the new'; put '* record.'; put '* eg: OLD RECORD from=1 to=10'; put '* NEW RECORD from=5 to=7'; put '*'; put '* APPENDED RECORDS:'; put '* - from=1 to=5'; put '* - from=5 to=7'; put '* - from=7 to=10'; put '*/'; put '/* inserts cannot happen with TXTEMPORAL */'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* IDENTIFY */'; put 'create table work.bitemp3_inserts as'; put 'select b.*'; put ',a.&bus_from as ___TMP___from'; put ',a.&bus_to as ___TMP___to'; put 'from work.bitemp0_append a'; put ',work.bitemp1_current b'; put 'where a.&bus_from > b.&bus_from'; put 'and a.&bus_to < b.&bus_to'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields may'; put 'not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '/* SPLIT */'; put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;'; put 'set work.bitemp3_inserts;'; put 'by &pk &bus_from &bus_to &processed;'; put 'if first.&idx_val then do;'; put '___TMP___retain=&bus_to;'; put '&bus_to=___TMP___from;'; put 'output;'; put '&bus_to=___TMP___retain;'; put 'end;'; put 'if last.&idx_val then do;'; put '&bus_from=___TMP___to;'; put 'output;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* TX temporal load */'; put 'data work.bitemp3a_inserts;'; put 'set work.bitemp1_current;'; put 'stop;'; put 'run;'; put '%end;'; put '/* APPEND */'; put 'proc sql;'; put 'create view work.bitemp3a_view as'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put 'data bitemp3b_newbase;'; put 'set work.bitemp3a_inserts work.bitemp3a_view;'; put 'run;'; put '/** do not use! this converts short numerics into 8 bytes'; put 'proc sql;'; put 'create table work.bitemp3b_newbase as'; put 'select * from work.bitemp3a_inserts'; put 'union corr'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put '*/'; put '/**'; put '* identify CHANGED records from staging.'; put '* Same business key with different temporal dates or md5 value'; put '* This table must be overlayed onto / into existing business history'; put '*/'; put 'proc sql;'; put 'create table work.bitemp4_updated as select distinct a.*'; put 'from work.bitemp0_append a'; put ',work.bitemp3b_newbase b'; put 'where 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'and ( a.&md5_col ne b.&md5_col'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)'; put '%end;'; put ')'; put ';'; put '/**'; put '* This section would have been one simple step with union all'; put '* but that converts short numerics into 8 bytes!'; put '* so, convoluted alternative to retain the same functionality.'; put '*/'; put '/* base records */'; put 'create view work.bitemp4_prep1 as'; put 'select ''BASE'' as ___TMP___'; put ',b.*'; put 'from work.bitemp4_updated a'; put ',work.bitemp3b_newbase b'; put 'where 1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put ';'; put '/* updated records */'; put 'create view work.bitemp4_prep2 as'; put 'select ''STAG'' as ___TMP___ ,*'; put 'from work.bitemp4_updated;'; put '/* ensure we only keep columns that appear in both */'; put '%local bp1 bp2 bp3 bp4;'; put '%let bp1=%mf_getvarlist(bitemp4_prep1);'; put '%let bp2=%mf_getvarlist(bitemp4_prep2);'; put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);'; put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);'; put 'data work.bitemp4_prep3/view=bitemp4_prep3;'; put 'set bitemp4_prep1 bitemp4_prep2;'; put '%if %length(XX&bp3&bp4)>2 %then %do;'; put 'drop &bp3 &bp4 ;'; put '%end;'; put 'run;'; put '/* remove duplicates */'; put 'proc sql;'; put 'create table work.bitemp4a_allrecs as'; put 'select distinct *'; put 'from work.bitemp4_prep3'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields'; put 'may not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* this section aligns the business dates'; put '(eg for inserts or overlaps in the range) */'; put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );'; put 'set work.bitemp4a_allrecs;'; put 'by &pk &bus_from &bus_to &processed;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '___TMP___md5lag=lag(&md5_col);'; put '/* reset retained variables */'; put 'if first.&idx_val then do;'; put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/'; put 'if &md5_col=___TMP___md5lag then do;'; put '&bus_from=___TMP___from;'; put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;'; put 'end;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 1'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 1'' then do;'; put '/* else ensure bus_from starts from prior record bus_to */'; put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to'; put 'then &bus_from= ___TMP___to;'; put '/* new record may replace old record entirely */'; put 'if &bus_to <= &bus_from then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* keep staged records only */'; put 'data work.bitemp4b_firstpass;'; put 'set work.bitemp4a_allrecs;'; put 'if ___TMP___=''STAG'';'; put 'run;'; put '%end;'; put '/* next phase is to pass through in reverse - so set up the sort statement */'; put '%local byvar;'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let byvar=&byvar descending %scan(&pk,&idx_pk);'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL'; put '%then %let byvar=&byvar descending &bus_from descending &bus_to;'; put '/* if matching bus dates supplied, need to ensure we also have a sort'; put 'between BASE and STAGING tables */'; put '%let byvar=&byvar descending ___TMP___;'; put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;'; put 'by &byvar;'; put 'run;'; put '/**'; put '* Now (in reverse) pass back business start dates'; put '*/'; put 'data work.bitemp4d_secondpass;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '&tech_from=&now;'; put '&tech_to=&high_date;'; put '%end;'; put 'set work.bitemp4c_sort ;'; put 'by &byvar;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* put / _all_ /;*/'; put '___TMP___md5lag=lag(&md5_col);'; put 'if first.&idx_val then do;'; put '/* reset retained variables */'; put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry back bus_to */'; put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 2'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 2'' then do;'; put '/* else ensure bus_to stops at subsequent record bus_from */'; put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from'; put 'then &bus_to= ___TMP___from;'; put '/* new record may replace old record entirely */'; put 'if &bus_from >= &bus_to then delete;'; put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put '%end;'; put 'run;'; put '%put syscc (line600)=&syscc;'; put '/**'; put 'There may still be some records (eg old business history) which have not'; put 'changed.'; put 'Need to identify these and remove from the append so they are not updated'; put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the'; put 'business key) and any matching / identical records are split out (from those'; put 'that need to be updated).'; put '*/'; put '%if &loadtype=BITEMPORAL %then %do;'; put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);'; put 'data work.bitemp5a_lkp (keep=&md5_col)'; put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'set work.bitemp0_base;'; put '/* for BITEMPORAL we need to compare business dates also */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);'; put 'run;'; put 'data bitemp5b_updates;'; put 'set bitemp4d_secondpass;'; put 'if _n_=1 then do;'; put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');'; put 'md5_lkp.definekey("&md5_col");'; put 'md5_lkp.definedone();'; put 'end;'; put '/* drop old md5 col as will rebuild with new business dates */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;'; put 'if md5_lkp.check()=0 then delete;'; put 'run;'; put 'proc sql;'; put '/* get min bus from as will update (close out) all records from this point'; put '(for that PK)*/'; put 'create table work.bitemp5d_subquery as'; put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to'; put 'from work.bitemp5b_updates'; put 'group by &pk_comma;'; put '/* index has a huge efficiency impact on upcoming nested subquery */'; put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);'; put '%let lastds=work.bitemp5b_updates;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put 'proc sql;'; put 'create table work.bitemp5d_subquery as'; put 'select distinct &pk_comma'; put 'from bitemp4d_secondpass;'; put '%let lastds=work.bitemp4d_secondpass;'; put '%end;'; put '%else %let lastds=work.bitemp4d_secondpass;'; put '/* create single append table (an overlapped pre-sert may be classed as'; put 'both an update AND a new record). Also create temp views that may be'; put 'used for pre-load analysis. */'; put 'data &outds_mod;'; put 'set &lastds(drop=___TMP___: &md5_col);'; put 'run;'; put 'data bitemp6_allrecs / view=bitemp6_allrecs;'; put 'set &outds_mod /* UPDATED records */'; put '&outds_add /* NEW records */;'; put 'run;'; put 'proc sort data=work.bitemp6_allrecs'; put 'out=work.bitemp6_unique'; put 'noduprec'; put 'dupout=work.xx_BADBADBAD;'; put 'by _all_;'; put 'run;'; put '/* we have all our temp tables now so exit if this is all that is needed */'; put '%if &LOADTARGET ne YES %then %return;'; put '/* also exit if an err condition exists */'; put '%if &syscc>0 %then %do;'; put '%put syscc=&syscc;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)'; put ')'; put '/* final check - abort if a lock has appeared on the target or audit table */'; put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)'; put '%if %mf_existds(&outds_audit) %then %do;'; put '%mp_lockfilecheck(libds=&outds_audit)'; put '%end;'; put '/**'; put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!'; put '*/'; put '/**'; put '* First, CLOSE OUT changed records (if not a REPLACE)'; put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.'; put '* However - this can be worked around using a nested subquery..'; put '*/'; put 'data _null_;'; put 'putlog "&sysmacroname: CLOSEOUTS commencing";'; put 'run;'; put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: No closeouts needed";'; put 'run;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(&loadtype not yet supported in CAS engine)'; put ')'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds;'; put 'set work.bitemp5d_subquery;'; put 'run;'; put '/* delete the records */'; put 'proc cas ;'; put 'table.deleteRows / table={'; put 'caslib="&base_lib",'; put 'name="&base_dsn",'; put 'where="1=1",'; put 'whereTable={caslib=''CASUSER'',name="&delds"}'; put '};'; put 'quit;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&delds;'; put '%end;'; put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)'; put '%then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";'; put 'run;'; put '%local flexinow;'; put 'proc sql;'; put '/* if OLEDB then create a temp table for efficiency */'; put '%local innertable;'; put '%if &engine_type=OLEDB %then %do;'; put '%let innertable=[&temp_table];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp5d_subquery;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);'; put '%let top_table=&baselib_schema.&base_dsn;'; put '%let flexinow=timestamp &SQLNOW;'; put '/* make empty table first - must clone & drop extra cols'; put 'as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;'; put '%end;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;'; put 'set work.bitemp5d_subquery;'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&innertable ('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put 'data=work.vw_bitemp5d force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %do;'; put '%let innertable=bitemp5d_subquery;'; put '%let top_table=&base_lib..&base_dsn;'; put '%let flexinow=&now;'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put 'update &top_table set &tech_to=&flexinow'; put '%if %length(&processed)>0 %then %do;'; put ',&processed=&flexinow'; put '%end;'; put 'where &tech_from <= &flexinow and &flexinow < &tech_to and'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '/* changed records are deleted then re-appended when doing UPDATEs */'; put 'delete from &top_table where'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;'; put '%let syscc=5;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%goto end_of_macro;'; put '%end;'; put '/* perform join inside query as per'; put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */'; put 'exists( select 1 from &baselib_schema.&innertable where'; put '/* loop PK join */'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put '&base_dsn..&idx_val=&innertable..&idx_val and'; put '%end;'; put '%if &loadtype=BITEMPORAL %then %do;'; put '&base_dsn..&bus_from >= &innertable..&bus_from'; put 'and &base_dsn..&bus_to <= &innertable..&bus_to and'; put '%end;'; put '/* close the statement */'; put '1=1);'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put ') by myAlias;'; put 'execute (drop table &baselib_schema.&innertable) by myAlias;'; put '%end;'; put '%end;'; put 'quit;'; put 'data _null_;'; put 'putlog "&sysmacroname: Closeout complete";'; put 'run;'; put '/**'; put '* Append the new / updated records'; put '*/'; put '%if &engine_type=CAS %then %do;'; put '/* get varchar variables ready for casting */'; put '%local vcfmt vcrename vcassign vcdrop;'; put 'data _null_;'; put 'set work.bitemp_cols(where=(type=6)) end=last;'; put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;'; put 'retain vcrename vcassign vcdrop vcfmt;'; put 'if _n_=1 then vcrename=''(rename=('';'; put 'rancol=resolve(''%mf_getuniquename()'');'; put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';'; put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);'; put 'vcassign=cats(vcassign,name,''='',rancol,'';'');'; put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');'; put 'if last then do;'; put 'vcrename=cats(vcrename,''))'');'; put 'call symputx(''vcfmt'',vcfmt);'; put 'call symputx(''vcrename'',vcrename);'; put 'call symputx(''vcassign'',vcassign);'; put 'call symputx(''vcdrop'',vcdrop);'; put 'end;'; put 'run;'; put '/* prepare a temp cas table with varchars casted */'; put '%let tmp=%mf_getuniquename();'; put 'data casuser.&tmp ;'; put '&vcfmt'; put 'set work.bitemp6_unique &vcrename;'; put '&vcassign'; put '&vcdrop'; put 'run;'; put '/* load the table with varchars applied*/'; put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;'; put 'set casuser.&tmp;'; put 'run;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&tmp;'; put '/* this code will not work as regular tables do not have varchars */'; put '/*'; put 'proc casutil;'; put 'load data=work.bitemp6_unique'; put 'outcaslib="&base_lib" casout="&base_dsn" append ;'; put 'quit;'; put '*/'; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put 'proc append base=&base_lib..&base_dsn'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=bitemp6_unique force nowarn;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;'; put '%end;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '/* final check on syscc */'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=&_program'; put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)'; put ')'; put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;'; put 'data work.vw_outds_orig /view=work.vw_outds_orig;'; put 'set work.bitemp0_base (drop=&md5_col);'; put 'where ___TMP___NEW_FLG=0;'; put 'drop ___TMP___NEW_FLG;'; put 'run;'; put '/* update the AUDIT table */'; put '%if %mf_existds(&outds_audit) %then %do;'; put 'options mprint;'; put '%mp_storediffs(&base_lib..&base_dsn'; put ',work.vw_outds_orig'; put ',&pk &bus_from'; put ',delds=&outds_del'; put ',modds=&outds_mod'; put ',appds=&outds_add'; put ',outds=work.mp_storediffs'; put ',processed_dttm=&now'; put ',loadref=%superq(etlsource)'; put ')'; put '/* exclude unchanged values in modified rows */'; put 'data work.mp_storediffs;'; put 'set work.mp_storediffs;'; put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;'; put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;'; put 'run;'; put 'proc append base=&outds_audit data=work.mp_storediffs;'; put 'run;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Problem in audit stage (&outds_audit))'; put ')'; put '%let user=%mf_getUser();'; put '/**'; put 'Notify as appropriate EMAILS DISABLED'; put '%sumo_alerts(ALERT_EVENT=UPDATE'; put ', ALERT_TARGET=&base_lib..&base_dsn'; put ', from_user= &user);'; put '*/'; put '/* monitor BiTemporal usage */'; put '%if &log=1 %then %do;'; put '%put syscc=&syscc;'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'insert into &dclib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&ETLSOURCE"'; put ',LOADTYPE="&loadtype"'; put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)'; put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)'; put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)'; put ',DURATION=&dur'; put ',MAC_VER="v&ver"'; put ',user_nm="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%put syscc=&syscc;'; put '%end;'; put '%end_of_macro:'; put '%mend bitemporal_dataloader;'; put '%macro meta_mapper('; put 'baseds=work.allmap /* base table to contain metamapping (two level) */'; put ', stageds=col_meta /* temp table to append to base*/'; put ', metaid=OMSOBJ:Column\A5HOSDWY.BF00LWQT'; put ', direction=REVERSE /* either REVERSE or FORWARDS */'; put ', level=0 /* system var - show level of nesting */'; put ', job= /* system var - avoid looping same source */'; put ', levelcheck=50 /* system var - avoid going too deep down the rabbit hole */'; put ', append=NO /* system var - when YES means appending within nested loop */'; put ');'; put '%if &level>&levelcheck %then %return;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%if &direction=REVERSE %then %do;'; put '%let start=Target;'; put '%let finish=Source;'; put '%end;'; put '%else %do;'; put '%let start=Source;'; put '%let finish=Target;'; put '%end;'; put '%if &append=NO %then %do;'; put 'proc datasets lib=work;'; put 'delete %scan(&baseds,2,.);'; put 'quit;'; put '%let index_statement=(index=(HASH/unique));'; put '%end;'; put '%else %let index_statement=;'; put 'data &stageds &index_statement ;'; put 'length HASH $32'; put 'jobname sourcetablename sourcecolname sourcecoluri'; put 'map_type map_transform targettablename targetcolname targetcoluri'; put 'uri targettableuri tfmuri sourcetableuri scuri tpuri tmpuri mturi $256'; put 'Derived_Rule $500 Marker_ID Name_ID N_Name LibRef engine sourcePublicType'; put 'targetPublicType $64;'; put 'keep HASH jobname sourcetablename sourcecolname sourcecoluri'; put 'map_type map_transform'; put 'targettablename targetcolname targetcoluri Derived_Rule level;'; put '/* proc transpose logic only */'; put 'length sourceshorttablename sourcemembertype sourcelocation'; put 'assoc assocuri name sturi foundrefuri foundfinishuri'; put 'targetshorttablename targetlocation targetmembertype trafoName $256'; put 'sourceshorttableuri sourceshortcoluri checkrdm targetshorttableuri'; put 'targetshortcoluri selected_direction $17'; put 'lturi _location $200;'; put 'call missing (of _all_);'; put '&start.coluri="&METAID";'; put 'level=&level;'; put '/* first get table associated with the column */'; put 'if metadata_getnasn(&start.coluri,''Table'',1,&start.tableuri)=0 then do;'; put 'putlog "ERR" "OR: Table not found";'; put 'stop;'; put 'end;'; put 'rc=metadata_getattr(&start.tableuri,"Name",&start.tablename);'; put 'rc=metadata_getattr(&start.coluri,"Name",&start.colname);'; put 'rc=metadata_getattr(&start.tableuri,''PublicType'',&start.PublicType);'; put 'if (metadata_getnasn(&start.tableuri, "TablePackage",1, tpuri)>0) then'; put 'do;'; put 'rc=metadata_getattr(tpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tpuri,"Engine",engine);'; put 'if missing(libref) then do;'; put 'rc=metadata_getnasn(tpuri, "UsedByPackages",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tmpuri,"Engine",engine);'; put 'end;'; put '&start.tablename=cats('; put 'upcase(LibRef),''-'',upcase(engine),''.'',&start.tablename'; put ');'; put 'end;'; put 'else if (&start.PublicType="ExternalFile") then do;'; put 'rc=metadata_getnasn(&start.tableuri, "OwningFile",1, tmpuri);'; put 'rc=metadata_getnasn(tmpuri, "FileRefs",1, tmpuri);'; put 'rc=metadata_getnasn(tmpuri, "FileRefLocations",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,''FileName'',&start.tablename);'; put 'end;'; put 'else &start.tablename = ''work. ''||trim(lowcase(&start.tablename));'; put '/* now loop the Source / TargetFeatureMaps */'; put 'tfm=1;'; put 'do while(metadata_getnasn(&start.coluri,"&start.FeatureMaps",tfm,tfmuri)>0);'; put 'call missing(derived_rule);'; put 'rc=metadata_getattr(tfmuri,''TransformRole'',map_type);'; put '/* get job and step name */'; put 'if (metadata_getnasn(tfmuri,''AssociatedClassifierMap'',1,tmpuri)<1) then'; put 'do;'; put 'rc=metadata_getnasn(tfmuri,"&finish.Transformations",1,tmpuri);'; put 'rc=metadata_getnasn(tmpuri,''AssociatedClassifierMap'',1,tmpuri);'; put 'end ;'; put 'rc=metadata_getnasn(tmpuri,''Steps'',1,tmpuri);'; put 'rc=metadata_getattr(tmpuri,''Name'',map_transform);'; put 'rc=metadata_getnasn(tmpuri,''Activities'',1,tmpuri);'; put 'rc=metadata_getnasn(tmpuri,''Jobs'',1,tmpuri);'; put 'rc=metadata_getattr(tmpuri,''Name'',jobname);'; put 'if Map_Type = ''DERIVED'' then do;'; put 'if(metadata_getnasn(tfmuri,"SourceCode",1, scuri)>0) then do;'; put '/* standard */'; put 'mturi=tfmuri;'; put 'end;'; put 'else do;'; put '/* some SQL joins store transform rules elsewhere */'; put 'rc=metadata_getnasn(tfmuri,"Feature&start.s",1, tmpuri);'; put 'if (metadata_getnasn(tmpuri,"Variables",1, tmpuri)>0)'; put 'then rc=metadata_getnasn(tmpuri,"OwningTransformation",1, mturi);'; put 'else rc=metadata_getnasn(tfmuri,"Transformation&start.s",1, mturi);'; put 'rc=metadata_getnasn(mturi,"SourceCode",1, scuri);'; put 'end;'; put 'rc=metadata_getattr(scuri,"StoredText",Derived_Rule);'; put 'Derived_Rule = compress(Derived_Rule,''0A''x);'; put '/* loop to generate derived rule (swap ref numbers for col descs) */'; put 'sv=1;'; put 'do while(metadata_getnasn(mturi,"SubstitutionVariables",sv,tmpuri)>0);'; put 'rc=metadata_getattr(tmpuri,"Marker",Marker_ID);'; put 'rc=metadata_getattr(tmpuri,"Name",Name_ID);'; put 'N_Name = compress(scan(Name_ID,2,''-''));'; put 'Derived_Rule=tranwrd('; put 'Derived_Rule,compress(Marker_ID),compress(N_Name)'; put ');'; put 'sv+1;'; put 'end;'; put 'end;'; put '/* get source col attributes */'; put 'fs=1;'; put 'do while(metadata_getnasn(tfmuri,"Feature&finish.s",fs,&finish.coluri)>0);'; put 'rc=metadata_getattr(&finish.coluri,''Name'',&finish.colname);'; put 'rc=metadata_getnasn(&finish.coluri,''Table'',1,&finish.tableuri);'; put 'rc=metadata_getattr(&finish.tableuri,''Name'',&finish.tablename);'; put 'rc=metadata_getattr(&finish.tableuri,''PublicType'',&finish.PublicType);'; put 'if (metadata_getnasn(&finish.tableuri,"TablePackage",1,tpuri)>0) then'; put 'do;'; put 'rc=metadata_getattr(tpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tpuri,"Engine",engine);'; put 'if missing(libref) then do;'; put 'rc=metadata_getnasn(tpuri, "UsedByPackages",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tmpuri,"Engine",engine);'; put 'end;'; put '&finish.tablename=cats('; put 'upcase(LibRef),''-'',upcase(engine),''.'',&finish.tablename'; put ');'; put 'end;'; put 'else if (&finish.PublicType="ExternalFile") then do;'; put 'rc=metadata_getnasn(&finish.tableuri, "OwningFile",1, tmpuri);'; put 'rc=metadata_getnasn(tmpuri, "FileRefs",1, tmpuri);'; put 'rc=metadata_getnasn(tmpuri, "FileRefLocations",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,''FileName'',&finish.tablename);'; put 'end;'; put 'else &finish.tablename=compress(''work.''||lowcase(&finish.tablename));'; put '/* do a lookup to see if this record has been loaded before,'; put 'IF base table exists */'; put 'hash=put(md5('; put 'cats(jobname,sourcecoluri,map_type,map_transform,targetcoluri)'; put '),$hex32.);'; put '%if %sysfunc(exist(&baseds)) %then %do;'; put 'set &baseds(keep=hash) key=hash/unique;'; put 'if _iorc_ ne 0 then do;'; put '/* hash did not exist, hence this is a new record */'; put 'output;'; put '_error_=0;'; put 'end;'; put '%end;'; put '%else %do;'; put 'output;'; put '%end;'; put 'fs+1;'; put 'end;'; put 'tfm+1;'; put 'end;'; put '/* No finish URI found - so proceed to see if this is due to transpose */'; put 'if missing(&finish.coluri)'; put 'and (metadata_getnasn(&start.tableuri,"&start.ClassifierMaps",1,tmpuri)>0)'; put 'then do;'; put 'length trafoname $256;'; put 'call missing(trafoName);'; put 'rc=metadata_getattr(tmpuri,''Name'',trafoName);'; put '/* get &finsh.tablename and jobname */'; put 'rc=metadata_getnasn(tmpuri,"Classifier&finish.s",1,&finish.tableuri);'; put 'rc=metadata_getattr(&finish.tableuri,''Name'',&finish.tablename);'; put '&finish.shorttablename=&finish.tablename;'; put 'rc=metadata_getnasn(tmpuri,''Steps'',1,tmpuri);'; put 'rc=metadata_getnasn(tmpuri,''Activities'',1,tmpuri);'; put 'rc=metadata_getnasn(tmpuri,''Jobs'',1,tmpuri);'; put 'rc=metadata_getattr(tmpuri,''Name'',jobname);'; put 'rc1=1;n1=1;'; put 'do while(rc1>0);'; put 'rc1=metadata_getnasl(&finish.tableuri,n1,assoc);'; put 'if (assoc="Columns") then do;'; put 'rc2=1;n2=1;'; put 'do while(rc2>0 and missing(foundfinishuri));'; put '/* Walk through all column associations: SpecSourceTransformations*/'; put 'rc2=metadata_getnasn(&finish.tableuri,trim(assoc),n2,assocuri);'; put '/* REVERSE */'; put '%if ("&direction." = "REVERSE") %then %do;'; put 'if metadata_getnasn(assocuri,"SpecSourceTransformations",1,sturi)>0'; put 'then do;'; put 'rc=metadata_getattr(sturi,"Name",name);'; put '/* SAS Transpose: varColumns */'; put 'if (name ="varColumns") then do;'; put 'foundfinishuri = "true"; /* do a while exit */'; put 'put "scource colname name=" name;'; put 'put "scource colname uri=" assocuri;'; put '&finish.coluri=assocuri;'; put '&finish.shortcoluri=substr('; put '&finish.coluri,find(&finish.coluri, ''\'')+1'; put ');'; put 'rc=metadata_getattr(&finish.coluri,''Name'',&finish.colname);'; put 'rc=metadata_getnasn(&finish.coluri,''Table'',1,&finish.tableuri);'; put 'rc=metadata_getattr(&finish.tableuri,''Name'',&finish.tablename);'; put '&finish.shorttablename=&finish.tablename;'; put 'map_type = "ONETOONE";'; put '/* get MemberType */'; put 'rc=metadata_getattr('; put '&finish.tableuri,"MemberType",&finish.membertype'; put ');'; put '&finish.shorttableuri = substr('; put '&finish.tableuri,find(&finish.tableuri, ''\'')+1'; put ');'; put 'rc=metadata_getattr('; put '&finish.shorttableuri,"PublicType",&finish.publictype'; put ');'; put 'if metadata_getnasn('; put '&finish.shorttableuri,"TablePackage",1,tpuri'; put ')>0'; put 'then do;'; put '/* init LibRef to overwrite previous for &start!!! */'; put 'call missing (LibRef);'; put 'rc=metadata_getattr(tpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tpuri,"Engine",engine);'; put 'if missing(libref) then do;'; put 'rc=metadata_getnasn(tpuri, "UsedByPackages",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tmpuri,"Engine",engine);'; put 'end;'; put '&finish.shorttablename=&finish.tablename;'; put '&finish.tablename=cats('; put 'upcase(LibRef),''-'',upcase(engine),''.'',&finish.tablename'; put ');'; put 'end;'; put '/* get SAS Folder location of the table */'; put 'if &finish.publictype eq "Table" then do;'; put 'lturi=&finish.shorttableuri;'; put 'rc=metadata_getnasn(lturi,"Trees",1,lturi);'; put 'rc=metadata_getattr(lturi,"Name",&finish.location);'; put 'tree=1;'; put 'do while (tree>0);'; put 'tree=metadata_getnasn(lturi,"ParentTree",1,lturi);'; put 'if tree > 0 then do;'; put 'rc=metadata_getattr(lturi,"Name",_location);'; put '&finish.location=catx(''/'',_location,&finish.location);'; put 'end;'; put 'end;'; put '&finish.location = ''/''||&finish.location;'; put 'end;'; put 'map_transform = trafoName;'; put 'derived_rule = "Transpose vertical";'; put '/* do a lookup to see if this record has been loaded before,'; put 'IF base table exists */'; put 'hash=put(md5('; put 'cats(jobname,sourcecoluri,map_type,map_transform,targetcoluri)'; put '),$hex32.);'; put '%if %sysfunc(exist(&baseds)) %then %do;'; put 'set &baseds(keep=hash) key=hash/unique;'; put 'if _iorc_ ne 0 then do;'; put '/* hash did not exist, hence this is a new record */'; put 'output;'; put '_error_=0;'; put 'end;'; put '%end;'; put '%else %do;'; put 'output;'; put '%end;'; put 'end; /* (name = "_VALUE_COLUMN") */'; put 'end; /* (metadata_getnasn(assocuri2,"Spec&finish.xxx",1,sturi)>0) */'; put '%end; /* &direction = "REVERSE" */'; put '/* FORWARDS: if TargetFeatureMaps not available: -> target! */'; put '%if ("&direction." = "FORWARDS") %then %do;'; put 'if (metadata_getnasn(assocuri,"TargetFeatureMaps",1,sfuri)<0)'; put 'then do;'; put 'rc=metadata_getattr(assocuri,"Name",name);'; put 'if not missing(assocuri) then do;'; put 'put "target colname name=" name;'; put 'put "target colname uri=" assocuri;'; put '&finish.coluri=assocuri;'; put '&finish.shortcoluri=substr('; put '&finish.coluri,find(&finish.coluri, ''\'')+1'; put ');'; put 'rc=metadata_getattr(&finish.coluri,''Name'',&finish.colname);'; put 'rc=metadata_getnasn(&finish.coluri,''Table'',1,&finish.tableuri);'; put 'rc=metadata_getattr(&finish.tableuri,''Name'',&finish.tablename);'; put '&finish.shorttablename=&finish.tablename;'; put 'map_type = "ONETOMANY";'; put '/* get MemberType */'; put 'rc=metadata_getattr('; put '&finish.tableuri,"MemberType",&finish.membertype'; put ');'; put '&finish.shorttableuri = substr('; put '&finish.tableuri,find(&finish.tableuri, ''\'')+1'; put ');'; put 'rc=metadata_getattr('; put '&finish.shorttableuri,"PublicType",&finish.publictype'; put ');'; put 'if metadata_getnasn('; put '&finish.shorttableuri,"TablePackage",1,tpuri'; put ')>0'; put 'then do;'; put '/* init LibRef to overwrite previous for &start!!! */'; put 'call missing (LibRef);'; put 'rc=metadata_getattr(tpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tpuri,"Engine",engine);'; put 'if missing(libref) then do;'; put 'rc=metadata_getnasn(tpuri, "UsedByPackages",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tmpuri,"Engine",engine);'; put 'end;'; put '&finish.shorttablename=&finish.tablename;'; put '&finish.tablename=cats('; put 'upcase(LibRef),''-'',upcase(engine),''.'',&finish.tablename'; put ');'; put 'end;'; put '/* get table''s SAS Folder location */'; put 'if &finish.publictype eq "Table" then do;'; put 'lturi=&finish.shorttableuri;'; put 'rc=metadata_getnasn(lturi,"Trees",1,lturi);'; put 'rc=metadata_getattr(lturi,"Name",&finish.location);'; put 'tree=1;'; put 'do while (tree>0);'; put 'tree=metadata_getnasn(lturi,"ParentTree",1,lturi);'; put 'if tree > 0 then do;'; put 'rc=metadata_getattr(lturi,"Name",_location);'; put '&finish.location=catx(''/'',_location,&finish.location);'; put 'end;'; put 'end;'; put '&finish.location = ''/''||&finish.location;'; put 'end;'; put 'map_transform = trafoName;'; put 'derived_rule = "Transpose horizontal";'; put '/* do a lookup to see if this record has been loaded before,'; put 'IF base table exists */'; put 'hash=put(md5('; put 'cats(jobname,sourcecoluri,map_type,map_transform,targetcoluri)'; put '),$hex32.);'; put '%if %sysfunc(exist(&baseds)) %then %do;'; put 'set &baseds(keep=hash) key=hash/unique;'; put 'if _iorc_ ne 0 then do;'; put '/* hash did not exist, hence this is a new record */'; put 'output;'; put '_error_=0;'; put 'end;'; put '%end;'; put '%else %do;'; put 'output;'; put '%end;'; put 'end;'; put 'end;'; put '%end; /* (&direction = "FORWARDS" */'; put 'call missing(assocuri);'; put 'n2+1;'; put 'end; /* while(rc1>0) */'; put 'end; /* (assoc="Columns") */'; put 'call missing(assoc);'; put 'n1+1;'; put 'end; /* while(rc1>0) */'; put 'end; /* missing(&finish.coluri) */'; put '/* ################# end mapping for Transpose flat ################# */'; put 'stop;'; put 'run;'; put 'proc append base=&baseds data=&stageds;'; put 'run;'; put 'data _null_;'; put 'set &stageds;'; put 'call execute(''%meta_mapper(metaid=''!!&finish.coluri'; put '!!",baseds=&baseds"'; put '!!",direction=&direction"'; put '!!",level=%eval(&level+1)"'; put '!!",levelcheck=&levelcheck"'; put '!!",job="!!jobname'; put '!!",append=YES)");'; put 'run;'; put '%mend meta_mapper;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief fetch the metadata and server as dotlang'; put 'Some nice ideas for formatting are available here:'; put 'https://renenyffenegger.ch/notes/tools/Graphviz/examples/index'; put '

SAS Macros

'; put '@li mp_abort.sas'; put '@li mf_getuser.sas'; put '@li bitemporal_dataloader.sas'; put '@li meta_mapper.sas'; put '@version 9.4'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%global column_id direction refresh;'; put '/* enable col id and direction to be passed as url params */'; put '%let exist=%sysfunc(exist(work.SASControlTable));'; put '%let inds=%sysfunc(ifc(&exist=1,SASControlTable,_null_));'; put '%let max_depth=50;'; put '%put &=inds;'; put 'data _null_;'; put 'length max_depth $ 8;'; put 'set &inds;'; put 'call symputx(''column_id'',coluri);'; put 'call symputx(''direction'',direction);'; put 'call symputx(''refresh'',refresh);'; put 'if input(max_depth,8.)>0 then call symputx(''max_depth'',max_depth);'; put 'putlog (_all_)(=);'; put 'run;'; put '%put &=max_depth &=refresh;'; put 'data info;'; put 'length coluri colname taburi tabname liburi libref $256;'; put 'call missing(of _all_);'; put 'if metadata_getattr("&column_id","Name",colname)<0 then do;'; put 'putlog "Col &column_id not found";'; put 'call symputx(''syscc'',''1234'');'; put 'stop;'; put 'end;'; put 'rc=metadata_getnasn("&column_id","Table",1,taburi);'; put 'rc=metadata_getattr(taburi,"Name",tabname);'; put 'rc=metadata_getnasn(taburi,"TablePackage",1,liburi);'; put 'rc=metadata_getattr(liburi,"Libref",libref);'; put 'call symputx(''lib'',libref);'; put 'call symputx(''tab'',tabname);'; put 'call symputx(''col'',colname);'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%macro launcher();'; put '/* check whether a lineage run already taken place */'; put 'proc sql noprint;'; put 'create table existing_data as'; put 'select * from &mpelib..mpe_lineage_cols'; put 'where col_id="&column_id"'; put 'and direction="%substr(&direction,1,1)";'; put '/* no data, so make some, and append it */'; put '%if &sqlobs=0 or &refresh=1 %then %do;'; put '%meta_mapper(metaid=&column_id'; put ', direction=&direction /* either REVERSE or FORWARDS */'; put ', baseds=work.allmap'; put ', levelcheck=%eval(&max_depth-1)'; put ')'; put 'data append;'; put 'length col_id $32 direction $1 modified_by $64;'; put 'retain col_id "&column_id";'; put 'retain direction "%substr(&direction,1,1)";'; put '%global modified_by modified_dttm;'; put '%let modified_dttm=%sysfunc(datetime());'; put 'retain modified_dttm &modified_dttm;'; put 'retain modified_by "%mf_getuser()";'; put '%let modified_by=%mf_getuser();'; put 'set allmap;'; put 'drop hash;'; put 'run;'; put 'proc sort data=append out=appendme nodupkey;'; put 'by col_id direction sourcecoluri targetcoluri map_type map_transform;'; put 'run;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_lineage_cols'; put ',append_dsn=appendme'; put ',PK=col_id direction sourcecoluri targetcoluri map_type map_transform'; put ',etlsource=&_program'; put ',loadtype=UPDATE'; put ',close_vars=col_id direction'; put ',dclib=&mpelib'; put ')'; put '%end;'; put '%else %do;'; put '/* data exists, so use it */'; put 'data work.allmap(drop=modified_by modified_dttm);'; put 'set existing_data(drop=col_id direction );'; put 'if _n_=1 then do;'; put 'call symputx(''modified_by'',modified_by,''g'');'; put 'call symputx(''modified_dttm'',modified_dttm,''g'');'; put 'end;'; put 'where level < &max_depth;'; put 'run;'; put '%end;'; put '%mend launcher;'; put '%launcher()'; put '/* generate graphviz */'; put 'filename tmp "%sysfunc(pathname(work))\GraphViz%sysfunc(datetime()).txt"'; put 'lrecl=10000 encoding=''utf-8'';'; put 'options noquotelenmax;'; put '%macro fcmpconditional();'; put '%if &sysver=9.3 and &sysscp=WIN %then %do;'; put '/* nothing - as the FCMP function causes an exception err in this case */'; put '%end;'; put '%else %do;'; put '/* prepare quick func to enable word wrapping of transformations */'; put 'options cmplib=work.funcs;'; put 'proc fcmp outlib=work.funcs.macrocore;'; put 'function wordwrap(str $,cols,splitchar $) $;'; put 'length outstr $32767 curstr $5000;'; put 'base=0;'; put 'put str=;'; put 'do i=1 to countw(str,'' '','' '');'; put 'curstr=scan(str,i,'' '');'; put 'outstr=trim(outstr)!!'' ''!!curstr;'; put 'base=base+length(curstr)+1;'; put 'if base>cols then do;'; put 'outstr=cats(outstr,splitchar);'; put 'base=0;'; put 'end;'; put 'end;'; put 'return (outstr);'; put 'endsub;'; put 'run;'; put '%end;'; put '%mend fcmpconditional;'; put '%fcmpconditional()'; put '/* prepare label with metadata */'; put 'proc sql;'; put 'create table jobs as select distinct jobname as job from work.allmap ;'; put 'create table cols as select distinct upcase(scan(cat,1,''.-'')) as tmplib'; put ',cats(calculated tmplib,''.'',upcase(scan(cat,2,''.''))) as tmptab'; put ',cats(calculated tmptab,''.'',upcase(col)) as col'; put 'from (select sourcetablename as cat, sourcecolname as col from work.allmap'; put 'union select targettablename as cat, targetcolname as col from work.allmap )'; put 'having findc(tmplib,''/\'')=0 and tmplib ne ''WORK'';'; put 'create table files as select distinct file'; put 'from (select sourcetablename as file from work.allmap'; put 'where findc(sourcetablename,''/\'')>0'; put 'union select targettablename as file from work.allmap'; put 'where findc(targettablename,''/\'')>0'; put ') ;'; put 'create table libs as select distinct tmplib as lib from cols;'; put 'create table tabs as select distinct tmptab as tab from cols;'; put 'data _null_;'; put 'file tmp;'; put 'put ''digraph G {'; put 'concentrate=true;'; put 'node [style=filled,shape=plain];'; put 'labelloc = "t";'; put ''';'; put 'label= "label=<'; put ''; put ''; put ''; put ''; put ''; put ''; put '
&direction Lineage for &col
Library:
&libGenerated by:&modified_by
Table:&tabGenerated on:'; put '%sysfunc(round(&modified_dttm,2),datetime19.)
>";'; put 'put label;'; put 'if "FORWARD"="&direction" then call symputx(''dirdesc'',''Impacted'');'; put 'else call symputx(''dirdesc'',''Source'');'; put '/* close out if there is no lineage */'; put 'if nobs=0 then put ''x [label="No lineage found" shape=Mdiamond]}'';'; put 'set work.allmap nobs=nobs;'; put 'stop;'; put 'run;'; put 'data graphviz1;'; put 'file tmp mod;'; put 'length line arrow $1000 stab ttab slib tlib $100 sbox tbox tooltip $500;'; put 'if _n_=1 then call missing(line, sbox, tbox, tooltip);'; put 'set work.allmap ;'; put 'sourceid=sourcecoluri;'; put 'targetid=targetcoluri;'; put 'if index(sourcetablename,'':'') then do;'; put 'slib='''';'; put 'stab=sourcetablename;'; put 'end;'; put 'else if map_transform=''File Reader'' then do;'; put 'stab=scan(sourcetablename,-1,''/\'');'; put 'slib=subpad(sourcetablename,1,length(sourcetablename)-length(stab));'; put 'end;'; put 'else do;'; put 'slib=scan(sourcetablename,1,''.'');'; put 'stab=scan(sourcetablename,2,''.'');'; put 'end;'; put 'if index(targettablename,'':'') then do;'; put 'tlib='''';'; put 'ttab=targettablename;'; put 'end;'; put 'else if map_transform=''File Reader'' then do;'; put 'ttab=scan(targettablename,-1,''/\'');'; put 'tlib=subpad(targettablename,1,length(targettablename)-length(ttab));'; put 'end;'; put 'else do;'; put 'tlib=scan(targettablename,1,''.'');'; put 'ttab=scan(targettablename,2,''.'');'; put 'end;'; put 'if trim(derived_rule) ne '''' then do;'; put 'derived_rule=tranwrd(derived_rule,''"'',''\"'');'; put '%macro quick();'; put '%if "&sysver"="9.3" and "&sysscp"="WIN" %then %do;'; put 'arrow=cats(''[color=Red, fontcolor=Red, penwidth="3", arrowsize="2",'''; put ',''label=">>'',map_transform,''<<\n'',derived_rule,''"]'');'; put '%end;'; put '%else %do;'; put 'arrow=cats(''[color=Red, fontcolor=Red, penwidth="3", arrowsize="2",'''; put ',''label=">>'',map_transform,''<<\n'',wordwrap(derived_rule,24,''\n''),''"]'');'; put '%end;'; put '%mend quick; %quick()'; put 'end;'; put 'else arrow=cats(''[ label="'',map_transform,''"]'');'; put 'source=quote(strip(sourceid));'; put 'target=quote(strip(targetid));'; put 'put '' '' source '' -> '' target arrow;'; put 'run;'; put 'data graphviz2 (keep=id tab lib col tooltip map_transform);'; put 'set graphviz1 (rename=(source=id stab=tab slib=lib sourcecolname=col ))'; put 'graphviz1 (rename=(target=id ttab=tab tlib=lib targetcolname=col ));'; put 'if upcase(lib)=:''WORK'' then tooltip=cats('',tooltip="Job:'',jobname,''"'');'; put 'else tooltip='''';'; put 'run;'; put 'proc sort data=graphviz2 out=graphviz3 noduprec; by _all_; run;'; put 'data _null_;'; put 'length shape $100 ;'; put 'set graphviz3 end=last;'; put 'file tmp mod;'; put 'tab=tranwrd(tab,''\'',''\\'');'; put 'tab=tranwrd(tab,''&'',''&'');'; put 'lib=tranwrd(lib,''&'',''&'');'; put 'if upcase(lib)=:''WORK'' then do;'; put 'lib=''WORK'';'; put 'put id ''[label=<
Table'' tab'; put '''
Column'' col'; put '''
> ,fillcolor=lightgrey, shape=" " '' tooltip '']'';'; put 'end;'; put 'else if map_transform=''File Reader'' then do;'; put 'put id ''[label="Location: '' lib ''\nFile:'' tab ''\nColumn: '' col'; put '''",shape=parallelogram, fillcolor="#00b300"'' tooltip '']'';'; put 'end;'; put 'else do;'; put 'engine=scan(lib,2,''-'');'; put 'lib=scan(lib,1,''-'');'; put 'if engine=''BASE'' then fillcolour=''lightyellow '';'; put 'else fillcolour=''lightblue'';'; put 'shape='' shape=cylinder, fillcolor= ''!!fillcolour;'; put 'put id ''[label=<
Library'' lib'; put '''
Table'' tab'; put '''
Column'' col'; put '''
> ,'' shape tooltip '']'';'; put 'end;'; put 'run;'; put 'data _null_;'; put 'file tmp mod;'; put '/* close out if records exist */'; put 'set work.allmap;'; put 'put ''}'';'; put 'stop;'; put 'run;'; put 'data flatdata;'; put 'length type $8 item $256;'; put 'keep type item;'; put 'set cols(in=cols) tabs(in=tabs) files(in=files) libs(in=libs) jobs(in=jobs);'; put 'if cols then do;'; put 'type=''Column'';'; put 'item=col;'; put 'end;'; put 'else if tabs then do;'; put 'type=''Table'';'; put 'item=tab;'; put 'end;'; put 'else if files then do;'; put 'type=''File'';'; put 'item=file;'; put 'end;'; put 'else if libs then do;'; put 'type=''Library'';'; put 'item=lib;'; put 'end;'; put 'else if jobs then do;'; put 'type=''Job'';'; put 'item=job;'; put 'end;'; put 'run;'; put 'data fromSAS;'; put 'infile tmp end=last;'; put 'file tmp;'; put 'input ;'; put 'string=_infile_;'; put 'put string;'; put 'run;'; put 'filename tmp clear;'; put '/* get list of IDs so frontend can make a clickable list */'; put 'proc sql;'; put 'create table ids as select distinct id from graphviz3;'; put '%webout(OPEN)'; put '%webout(OBJ,fromSAS,missing=STRING)'; put '%webout(OBJ,ids,dslabel=clickableIDS)'; put '%webout(OBJ,info)'; put '%webout(OBJ,flatdata)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=fetchtablelineage; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief fetch Table Lineage for SAS 9'; put 'Some nice ideas for formatting are available here:'; put 'https://renenyffenegger.ch/notes/tools/Graphviz/examples/index'; put '

SAS Macros

'; put '@li mpeinit.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%global table_id direction graphOrientation;'; put '/* enable table id and direction to be passed as url params */'; put '%let exist=%sysfunc(exist(work.SASControlTable));'; put '%let inds=%sysfunc(ifc(&exist=1,SASControlTable,_null_));'; put '%put &=inds;'; put '%let max_depth=50;'; put 'data _null_;'; put 'length max_depth $ 8;'; put 'set &inds;'; put 'call symputx(''table_id'',table_id);'; put 'call symputx(''direction'',direction);'; put 'call symputx(''graphOrientation'',''LR'');'; put 'if max_depth>''0'' then call symputx(''max_depth'',max_depth);'; put 'putlog (_all_)(=);'; put 'run;'; put '%put &=max_depth;'; put '%mp_abort(iftrue= (&table_id=undefined)'; put ',mac=&_program'; put ',msg=%str(Table_id UNDEFINED provided from frontend)'; put ')'; put 'data work.info;'; put 'length tableid tablename liburi $64 libref $8;'; put 'drop rc;'; put 'tableid="&table_id";'; put 'call missing(liburi);'; put 'rc=metadata_getattr(tableid,"Name",tablename);'; put 'if metadata_getnasn(tableid,"TablePackage",1,liburi)>0 then do;'; put 'rc=metadata_getattr(liburi,"Libref",libref);'; put 'libref=upcase(libref);'; put 'end;'; put 'tablename=upcase(tablename);'; put 'if missing(libref) then libref=''nolib'';'; put 'call symputx(''libds'',cats(libref,''.'',tablename));'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%let src=%sysfunc(ifc(&direction=REVERSE,src,tgt));'; put '%let tgt=%sysfunc(ifc(&direction=REVERSE,tgt,src));'; put 'data work.sourcetable/view=work.sourcetable;'; put 'set &mpelib..MPE_LINEAGE_TABS;'; put 'where &dc_dttmtfmt. lt tx_to ;'; put 'drop tx_from tx_to;'; put 'run;'; put '%macro recursivejoin(iter=0'; put ',maxiter=&max_depth /* avoid infinite loop */'; put ');'; put '%if &iter=0 %then %do;'; put 'data work.baseds ;'; put 'retain level 0;'; put 'set work.sourcetable;'; put 'where &tgt.tableid="&table_id";'; put 'run;'; put '%let iter=1;'; put 'proc sql;'; put '%end;'; put '%else %if &iter>&maxiter %then %return;'; put 'create table work.appendds as'; put 'select distinct &iter as level'; put ',b.*'; put 'from work.baseds a'; put 'left join work.sourcetable b'; put 'on a.&src.tableid=b.&tgt.tableid'; put 'where a.level=%eval(&iter.-1)'; put 'and b.&src.tableid is not null'; put 'and a.&src.tableid is not null'; put 'and a.&src.tableid ne ''N/A'';'; put '%let obs=&sqlobs;'; put 'insert into work.baseds select * from work.appendds;'; put '%if &obs %then %do;'; put '%recursivejoin(iter=%eval(&iter.+1) )'; put '%end;'; put '%mend recursivejoin;'; put '%recursivejoin()'; put 'proc sql;'; put 'create table work.final as'; put 'select distinct *'; put 'from work.baseds(drop=level)'; put 'where jobid is not null;'; put '/* generate graphviz */'; put 'filename tmp "%sysfunc(pathname(work))\GraphViz%sysfunc(datetime()).txt"'; put 'lrecl=10000 encoding=''utf-8'';'; put '/* prepare label with metadata */'; put 'proc sql;'; put 'create table work.jobs as'; put 'select distinct jobid'; put ', jobname'; put ',quote(cats(jobid))||'' [label=''||quote(cats(jobname))||''];'' as line'; put 'from work.final;'; put 'create table work.tables as'; put 'select distinct &src.tableid as tableid'; put ',&src.tablename as tablename'; put ',&src.libref as libref'; put 'from work.final'; put 'where &src.tableid ne ''N/A'''; put 'union select'; put '&tgt.tableid as tableid'; put ',&tgt.tablename as tablename'; put ',&tgt.libref as libref'; put 'from work.final'; put 'where &tgt.tableid ne ''N/A'''; put 'order by libref, tablename;'; put 'create table idlookup as'; put 'select tableid as metaid'; put ',''TABLE'' as metatype'; put ',cats(libref,''.'',tablename) as metaname'; put 'from work.tables'; put 'union'; put 'select jobid as metaid'; put ',''JOB'' as metatype'; put ',jobname as metaname'; put 'from work.jobs'; put 'order by metaid;'; put 'data CRAYONS;'; put 'length attribute value $8;'; put 'infile datalines4 dsd;'; put 'input attribute value;'; put 'call symput(cats(''col'',_n_),quote(trim(value)));'; put 'datalines;'; put 'red,#e6194b'; put 'green,#3cb44b'; put 'blue,#4363d8'; put 'orange,#f58231'; put 'purple,#911eb4'; put 'cyan,#46f0f0'; put 'magenta,#f032e6'; put 'lime,#bcf60c'; put 'pink,#fabebe'; put 'teal,#008080'; put 'lavender,#e6beff'; put 'brown,#9a6324'; put 'beige,#fffac8'; put 'maroon,#800000'; put 'mint,#aaffc3'; put 'olive,#808000'; put 'apricot,#ffd8b1'; put 'navy,#000075'; put 'gray,#808080'; put 'black,#00000'; put 'yellow,#ffe119'; put 'white,#ffffff'; put 'bazaar,#98777b'; put 'beaver,#9f8170'; put 'bisque,#ffe4c4'; put 'blond,#faf0be'; put 'blush,#de5d83'; put 'bole,#79443b'; put 'bone,#e3dac9'; put 'brass,#b5a642'; put 'bronze,#cd7f32'; put 'bubbles,#e7feff'; put 'buff,#f0dc82'; put 'camel,#c19a6b'; put 'canary,#ffff99'; put 'capri,#00bfff'; put 'cardinal,#c41e3a'; put 'carmine,#ff0040'; put 'celadon,#ace1af'; put 'celeste,#b2ffff'; put 'cerise,#de3163'; put 'cerulean,#007ba7'; put 'cherry,#de3163'; put 'chestnut,#cd5c5c'; put 'cinnabar,#e34234'; put 'cinnamon,#d2691e'; put 'citrine,#e4d00a'; put 'cobalt,#0047ab'; put 'coffee,#6f4e37'; put 'copper,#b87333'; put 'coral,#ff7f50'; put 'corn,#fbec5d'; put 'cornsilk,#fff8dc'; put 'cream,#fffdd0'; put 'crimson,#dc143c'; put 'daffodil,#ffff31'; put 'denim,#1560bd'; put 'desert,#c19a6b'; put 'drab,#967117'; put 'ecru,#c2b280'; put 'eggplant,#614051'; put 'eggshell,#f0ead6'; put 'emerald,#50c878'; put 'fallow,#c19a6b'; put 'fawn,#e5aa70'; put 'fern,#71bc78'; put 'flame,#e25822'; put 'flax,#eedc82'; put 'folly,#ff004f'; put 'fuchsia,#ff00ff'; put 'fulvous,#e48400'; put 'gamboge,#e49b0f'; put 'ginger,#b06500'; put 'glaucous,#6082b6'; put 'glitter,#e6e8fa'; put 'gold,#ffd700'; put 'grullo,#a99a86'; put 'icterine,#fcf75e'; put 'indigo,#4b0082'; put 'iris,#5a4fcf'; put 'ivory,#fffff0'; put 'jade,#00a86b'; put ';;;;'; put 'run;'; put 'proc sort data=work.tables out=work.libs nodupkey;'; put 'by libref;'; put 'run;'; put 'data work.alllibs;'; put 'set work.libs end=last;'; put 'length line $1000. ;'; put 'crayon=symget(cats(''col'',_n_));'; put 'call symputx(libref,crayon);'; put 'if _n_=1 then do;'; put 'line=''subgraph cluster_libs { label="Libraries";'';output;'; put 'end;'; put 'line=cats(libref)!!'' [label=''||quote(cats(libref))||''; style="filled"; color='''; put '||cats(crayon)||'', shape = Mrecord, fontcolor=white]'';output;'; put 'if last then do;'; put 'line=''}'';output;'; put 'end;'; put 'run;'; put 'data alltables;'; put 'length line $1000. ;'; put 'set work.tables;'; put 'crayon=symget(libref);'; put 'line=quote(cats(tableid))||'' [label="''||cats(tablename)'; put '!!''", color=''!!cats(crayon)'; put '!!'', shape=cylinder,style=filled,fontcolor=white];'';'; put 'output;'; put 'run;'; put 'proc sort'; put 'data=final(keep=&src.tableid jobid &src.libref) out=&src.relations nodupkey;'; put 'by &src.tableid jobid;'; put 'proc sort'; put 'data=final(keep=&tgt.tableid jobid &tgt.libref) out=&tgt.relations nodupkey;'; put 'by jobid &tgt.tableid;'; put 'run;'; put 'data srcrelations;'; put 'set srcrelations;'; put 'length line $1000;'; put 'where srctableid ne ''N/A'';'; put 'line=cats('; put '''"'',cats(srctableid),''" -> "'',jobid,''" [color='',symget(srclibref),''];'''; put ');'; put 'data tgtrelations;'; put 'set tgtrelations;'; put 'where tgttableid ne ''N/A'';'; put 'length line $1000;'; put 'line=cats('; put '''"'',cats(jobid),''" -> "'',tgttableid,''" [color='',symget(tgtlibref),''];'''; put ');'; put 'run;'; put 'data finalfinal;'; put 'set work.alllibs(keep=line) work.alltables (keep=line) work.jobs(keep=line)'; put 'work.&src.relations(keep=line) work.&tgt.relations(keep=line) end=last;'; put 'if _N_ = 1 then do;'; put 'firstline=line;'; put 'line=''strict digraph "''!!"&libds"!!''" {''; output;'; put 'line="rankdir=&graphOrientation; nodesep=0.5; node [shape = octagon];";output;'; put 'line=firstline;'; put 'end;'; put 'output;'; put 'if last then do;'; put 'line=''}'';'; put 'output;'; put 'end;'; put 'drop firstline;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,finalfinal)'; put '%webout(OBJ,info)'; put '%webout(OBJ,final,dslabel=flatdata)'; put '%webout(OBJ,idlookup)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getmetacols; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getcols('; put 'tableuri='; put ',outds=work.mm_getcols'; put ')/*/STORE SOURCE*/;'; put 'data &outds;'; put 'keep col: SAS:;'; put 'length assoc uri coluri colname coldesc SASColumnType SASFormat SASInformat'; put 'SASPrecision SASColumnLength $256;'; put 'call missing (of _all_);'; put 'uri=symget(''tableuri'');'; put 'n=1;'; put 'do while (metadata_getnasn(uri,''Columns'',n,coluri)>0);'; put 'rc3=metadata_getattr(coluri,"Name",colname);'; put 'rc3=metadata_getattr(coluri,"Desc",coldesc);'; put 'rc4=metadata_getattr(coluri,"SASColumnType",SASColumnType);'; put 'rc5=metadata_getattr(coluri,"SASFormat",SASFormat);'; put 'rc6=metadata_getattr(coluri,"SASInformat",SASInformat);'; put 'rc7=metadata_getattr(coluri,"SASPrecision",SASPrecision);'; put 'rc8=metadata_getattr(coluri,"SASColumnLength",SASColumnLength);'; put 'output;'; put 'call missing(colname,coldesc,SASColumnType,SASFormat,SASInformat'; put ',SASPrecision,SASColumnLength);'; put 'n+1;'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by colname;'; put 'run;'; put '%mend mm_getcols;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getmetacols.sas'; put '@brief List the cols as defined in metadata'; put '@details Provide a table uri and get list of columns'; put '

SAS Macros

'; put '@li mm_getcols.sas'; put '@li mp_abort.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%global tableuri;'; put '%let exist=%sysfunc(exist(work.SASControlTable));'; put '%let inds=%sysfunc(ifc(&exist=1,SASControlTable,_null_));'; put '%put &=inds;'; put 'data _null_;'; put 'set &inds;'; put 'call symputx(''tableuri'',scan(tableuri,-1,''\''));'; put 'run;'; put '%put &=tableuri;'; put '/* load parameters */'; put '%mm_getcols(tableuri=&tableuri,outds=metacols)'; put 'data out;'; put 'set metacols;'; put 'keep col:;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,out,dslabel=metacols)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getmetatables; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_gettables('; put 'uri='; put ',outds=work.mm_gettables'; put ',getauth=YES'; put ')/*/STORE SOURCE*/;'; put 'data &outds;'; put 'length uri serveruri conn_uri domainuri libname ServerContext AuthDomain'; put 'path_schema usingpkguri type tableuri $256 id $17'; put 'libdesc $200 libref engine $8 IsDBMSLibname IsPreassigned $1'; put 'tablename $50 /* metadata table names can be longer than $32 */'; put ';'; put 'keep libname libdesc libref engine ServerContext path_schema AuthDomain'; put 'tableuri tablename IsPreassigned IsDBMSLibname id;'; put 'call missing (of _all_);'; put 'uri=symget(''uri'');'; put 'rc= metadata_getattr(uri, "Name", libname);'; put 'if rc <0 then do;'; put 'put ''The library is not defined in this metadata repository.'';'; put 'stop;'; put 'end;'; put 'rc= metadata_getattr(uri, "Desc", libdesc);'; put 'rc= metadata_getattr(uri, "Libref", libref);'; put 'rc= metadata_getattr(uri, "Engine", engine);'; put 'rc= metadata_getattr(uri, "IsDBMSLibname", IsDBMSLibname);'; put 'rc= metadata_getattr(uri, "IsPreassigned", IsPreassigned);'; put 'rc= metadata_getattr(uri, "Id", Id);'; put '/*** Get associated ServerContext ***/'; put 'rc= metadata_getnasn(uri, "DeployedComponents", 1, serveruri);'; put 'if rc > 0 then rc2= metadata_getattr(serveruri, "Name", ServerContext);'; put 'else ServerContext='''';'; put '/*** If the library is a DBMS library, get the Authentication Domain'; put 'associated with the DBMS connection credentials ***/'; put 'if IsDBMSLibname="1" and "&getauth"=''YES'' then do;'; put 'rc= metadata_getnasn(uri, "LibraryConnection", 1, conn_uri);'; put 'if rc>0 then do;'; put 'rc2= metadata_getnasn(conn_uri, "Domain", 1, domainuri);'; put 'if rc2>0 then rc3= metadata_getattr(domainuri, "Name", AuthDomain);'; put 'end;'; put 'end;'; put '/*** Get the path/database schema for this library ***/'; put 'rc=metadata_getnasn(uri, "UsingPackages", 1, usingpkguri);'; put 'if rc>0 then do;'; put 'rc=metadata_resolve(usingpkguri,type,id);'; put 'if type=''Directory'' then'; put 'rc=metadata_getattr(usingpkguri, "DirectoryName", path_schema);'; put 'else if type=''DatabaseSchema'' then'; put 'rc=metadata_getattr(usingpkguri, "Name", path_schema);'; put 'else path_schema="unknown";'; put 'end;'; put '/*** Get the tables associated with this library ***/'; put '/*** If DBMS, tables are associated with DatabaseSchema ***/'; put 'if type=''DatabaseSchema'' then do;'; put 't=1;'; put 'ntab=metadata_getnasn(usingpkguri, "Tables", t, tableuri);'; put 'if ntab>0 then do t=1 to ntab;'; put 'tableuri='''';'; put 'tablename='''';'; put 'ntab=metadata_getnasn(usingpkguri, "Tables", t, tableuri);'; put 'tabrc= metadata_getattr(tableuri, "Name", tablename);'; put 'output;'; put 'end;'; put 'else put ''Library '' libname '' has no tables registered'';'; put 'end;'; put 'else if type in (''Directory'',''SASLibrary'') then do;'; put 't=1;'; put 'ntab=metadata_getnasn(uri, "Tables", t, tableuri);'; put 'if ntab>0 then do t=1 to ntab;'; put 'tableuri='''';'; put 'tablename='''';'; put 'ntab=metadata_getnasn(uri, "Tables", t, tableuri);'; put 'tabrc= metadata_getattr(tableuri, "Name", tablename);'; put 'output;'; put 'end;'; put 'else put ''Library '' libname '' has no tables registered'';'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by tablename tableuri;'; put 'run;'; put '%mend mm_gettables;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getmetatables.sas'; put '@brief List the tables as defined in metadata'; put '@details Provide a library uri and get list of tables'; put '

SAS Macros

'; put '@li mm_gettables.sas'; put '@li mp_abort.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%global liburi;'; put '%let exist=%sysfunc(exist(work.SASControlTable));'; put '%let inds=%sysfunc(ifc(&exist=1,SASControlTable,_null_));'; put '%put &=inds;'; put 'data _null_;'; put 'set &inds;'; put 'call symputx(''liburi'',liburi);'; put 'run;'; put '/* load parameters */'; put '%mm_gettables(uri=&liburi,outds=metatables,getauth=NO)'; put 'data out;'; put 'set metatables;'; put 'keep table:;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,metatables)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/metanav; %let service=metadetails; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mpe_getvars(injs,outds);'; put '/* load parameters */'; put 'data _null_;'; put '__dummychar='''';__dummynum=0;'; put 'set &outds;'; put 'array __charvals _character_;'; put 'do over __charvals;'; put 'call symputx(vname(__charvals),__charvals,''g'');'; put 'end;'; put 'array __numvals _numeric_;'; put 'do over __numvals;'; put 'call symputx(vname(__numvals),__numvals,''g'');'; put 'end;'; put 'run;'; put '%mend mpe_getvars;'; put '%macro mm_getdetails(uri'; put ',outattrs=work.attributes'; put ',outassocs=work.associations'; put ',sortoptions='; put ')/*/STORE SOURCE*/;'; put 'data &outassocs;'; put 'keep assoc assocuri name;'; put 'length assoc assocuri name $256;'; put 'call missing(of _all_);'; put 'rc1=1;n1=1;'; put 'do while(rc1>0);'; put '/* Walk through all possible associations of this object. */'; put 'rc1=metadata_getnasl("&uri",n1,assoc);'; put 'rc2=1;n2=1;'; put 'do while(rc2>0);'; put '/* Walk through all the associations on this machine object. */'; put 'rc2=metadata_getnasn("&uri",trim(assoc),n2,assocuri);'; put 'if (rc2>0) then do;'; put 'rc3=metadata_getattr(assocuri,"Name",name);'; put 'output;'; put 'end;'; put 'call missing(name,assocuri);'; put 'n2+1;'; put 'end;'; put 'n1+1;'; put 'end;'; put 'run;'; put 'proc sort &sortoptions;'; put 'by assoc name;'; put 'run;'; put 'data &outattrs;'; put 'keep type name value;'; put 'length type $4 name $256 value $32767;'; put 'rc1=1;n1=1;type=''Prop'';name='''';value='''';'; put 'do while(rc1>0);'; put 'rc1=metadata_getnprp("&uri",n1,name,value);'; put 'if rc1>0 then output;'; put 'n1+1;'; put 'end;'; put 'rc1=1;n1=1;type=''Attr'';'; put 'do while(rc1>0);'; put 'rc1=metadata_getnatr("&uri",n1,name,value);'; put 'if rc1>0 then output;'; put 'n1+1;'; put 'end;'; put 'run;'; put 'proc sort &sortoptions;'; put 'by type name;'; put 'run;'; put '%mend mm_getdetails;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file metadetails.sas'; put '@brief Retrieves metadata attributes and associations for a particular object'; put '@details'; put '

SAS Macros

'; put '@li mm_getdetails.sas'; put '@li mpe_getvars.sas'; put '@li mpeinit.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%mpe_getvars(SASControlTable, SASControlTable)'; put '%mm_getdetails(&objecturi'; put ',outattrs=work.attributes'; put ',outassocs=work.associations'; put ',sortoptions=SORTSEQ=LINGUISTIC'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,attributes, missing=STRING)'; put '%webout(OBJ,associations)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=metaobjects; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mpe_getvars(injs,outds);'; put '/* load parameters */'; put 'data _null_;'; put '__dummychar='''';__dummynum=0;'; put 'set &outds;'; put 'array __charvals _character_;'; put 'do over __charvals;'; put 'call symputx(vname(__charvals),__charvals,''g'');'; put 'end;'; put 'array __numvals _numeric_;'; put 'do over __numvals;'; put 'call symputx(vname(__numvals),__numvals,''g'');'; put 'end;'; put 'run;'; put '%mend mpe_getvars;'; put '%macro mm_getobjects('; put 'type=SASLibrary'; put ',outds=work.mm_getobjects'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"$METAREPOSITORY'; put '&typeSAS'; put '0"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/&type";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/&type/@Id";'; put 'put "characterstring200";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/&type/@Name";'; put 'put "characterstring200";'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASObjects out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getobjects;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file metaobjects.sas'; put '@brief Retrieves list of objects for a particular metadata type'; put '@details'; put '

SAS Macros

'; put '@li mm_getobjects.sas'; put '@li mpe_getvars.sas'; put '@li mpeinit.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%mpe_getvars(SASControlTable, SASControlTable)'; put 'options metarepository=&repo;'; put '%mm_getobjects('; put 'type=&metatype'; put ',outds=work.objects'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,objects,missing=STRING)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=metarepos; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file metarepos.sas'; put '@brief Retrieves list of metadata types'; put '@details'; put '

SAS Macros

'; put '@li mm_getrepos.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%mm_getrepos(outds=work.repos)'; put 'data outrepos;'; put 'set repos;'; put 'if repositorytype in (''CUSTOM'',''FOUNDATION'');'; put 'keep id name description;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,outrepos)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=metatypes; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_gettypes('; put 'outds=work.mm_gettypes'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put ''; put 'SAS'; put ''; put '2048'; put ''; put ''; put '$METAREPOSITORY'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put ''//GetTypes/Types/Type'';'; put 'put ''64'';'; put 'put ''//GetTypes/Types/Type/@Id'';'; put 'put ''256'';'; put 'put ''//GetTypes/Types/Type/@Desc'';'; put 'put '''';'; put 'put ''//GetTypes/Types/Type/@HasSubtypes'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.sastypes out=&outds;'; put 'by id;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_gettypes;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file metatypes.sas'; put '@brief Retrieves list of metadata types'; put '@details'; put '

SAS Macros

'; put '@li mm_gettypes.sas'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%mm_gettypes(outds=work.types)'; put '%webout(OPEN)'; put '%webout(OBJ,types)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/public; %let service=getchangeinfo; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mpe_checkrestore(load_ref,'; put 'outresult=ALLOW_RESTORE,'; put 'outreason=REASON'; put ');'; put '%global &outresult &outreason;'; put '%let &outresult=NO;'; put '%let &outreason=NOTFOUND;'; put '%local libds;'; put 'proc sql noprint;'; put 'select upcase(cats(base_lib,''.'',base_ds)) into: libds'; put 'from &dc_libref..mpe_submit'; put 'where TABLE_ID="&load_ref";'; put '/**'; put '* check if there is actually a version to restore'; put '*/'; put '%local audtab;'; put 'proc sql noprint;'; put 'select coalescec(audit_libds,"&dc_libref..MPE_AUDIT") into: audtab'; put 'from &dc_libref..MPE_TABLES'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and libref="%scan(&libds,1,.)" and dsn="%scan(&libds,2,.)";'; put '%if "&audtab"="0" %then %do;'; put '%let &outresult=NO;'; put '%let &outreason= &libds has no audit table configured;'; put '%return;'; put '%end;'; put '%local chk;'; put '%let chk=0;'; put 'proc sql noprint;'; put 'select count(*) into: chk from &audtab'; put 'where load_ref="&load_ref";'; put '%if &chk=0 %then %do;'; put '%let &outresult=NO;'; put '%let &outreason=No entry for &load_ref in &audtab;'; put '%return;'; put '%end;'; put '/* grab user groups */'; put '%local user;'; put '%let user=%mf_getuser();'; put '%mpe_getgroups(user=&user,outds=work.groups)'; put '/* check if user is admin */'; put '%local is_admin;'; put '%let is_admin=0;'; put 'proc sql;'; put 'select count(*) into: is_admin from work.groups'; put 'where groupname="&dc_admin_group";'; put '%if &is_admin>0 %then %do;'; put '%let &outresult=YES;'; put '%let &outreason=IS ADMIN;'; put '%return;'; put '%end;'; put '/* check if user has basic access */'; put '%mpe_accesscheck(&libds,outds=work.access_check'; put ',user=&user'; put ',access_level=EDIT'; put ')'; put '%if %mf_nobs(access_check)=0 %then %do;'; put '%let &outresult=NO;'; put '%let &outreason=No access in MPE_TABLES;'; put '%return;'; put '%end;'; put '/* check if user has column level security rules */'; put 'proc sql;'; put 'create table work.cls_rules as'; put 'select *'; put 'from &mpelib..mpe_column_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and CLS_SCOPE in ("EDIT",''ALL'')'; put 'and CLS_ACTIVE=1'; put 'and upcase(CLS_GROUP) in (select upcase(groupname) from work.groups)'; put 'and CLS_LIBREF="%upcase(&base_lib)"'; put 'and CLS_TABLE="%upcase(&base_ds)";'; put '%if %mf_nobs(work.cls_rules)>0 %then %do;'; put '%let &outresult=NO;'; put '%let &outreason=User has restrictions in MPE_COLUMN_LEVEL_SECURITY;'; put 'data _null_;'; put 'set work.cls_rules;'; put 'putlog (_all_)(=);'; put 'if _n_>5 then stop;'; put 'run;'; put '%return;'; put '%end;'; put '/* check if user has row level security rules */'; put 'proc sql;'; put 'create table work.rls_rules as'; put 'select *'; put 'from &mpelib..mpe_row_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and rls_scope in ("EDIT",''ALL'')'; put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)'; put 'and rls_libref="&base_lib"'; put 'and rls_table="&base_ds"'; put 'and rls_active=1;'; put '%if %mf_nobs(work.rls_rules)>0 %then %do;'; put '%let &outresult=NO;'; put '%let &outreason=User has restrictions in MPE_ROW_LEVEL_SECURITY;'; put 'data _null_;'; put 'set work.rls_rules;'; put 'putlog (_all_)(=);'; put 'if _n_>5 then stop;'; put 'run;'; put '%return;'; put '%end;'; put '%else %do;'; put '%let &outresult=YES;'; put '%let &outreason=CHECKS PASSED;'; put '%end;'; put '%mend mpe_checkrestore;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getchangeinfo.sas'; put '@brief Returns the details for an approval diff'; put '@details'; put '

SAS Macros

'; put '@li mf_getengine.sas'; put '@li mp_abort.sas'; put '@li mpe_checkrestore.sas'; put '

Service Inputs

'; put '
sascontroltable
'; put '@li table table ID or LOAD_REF used to uniquely identify a staged change'; put '

Service Outputs

'; put '
work.jsparams
'; put 'Mainly sourced from MPE_SUBMIT plus some extra cols:'; put '@li LIB_ENGINE Library engine'; put '@li allow_restore YES if a user can restore, else NO'; put '@li REASON reason why a restore is / is no possible'; put '

Data Inputs

'; put '@li MPE_AUDIT'; put '@li MPE_COLUMN_LEVEL_SECURITY'; put '@li MPE_ROW_LEVEL_SECURITY'; put '@li MPE_SUBMIT'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%let table=;'; put 'data _null_;'; put 'set SASControlTable;'; put 'call symputx(''table'',table);'; put 'run;'; put 'data APPROVE1;'; put 'set &mpelib..mpe_submit'; put '(rename=(SUBMITTED_ON_DTTM=submitted_on REVIEWED_ON_DTTM=REVIEWED_ON));'; put 'where TABLE_ID="&TABLE";'; put 'TABLE_NM=cats(base_lib,''.'',base_ds);'; put 'BASE_TABLE=table_nm;'; put 'call symputx(''base_lib'',base_lib);'; put 'REVIEWED_ON_DTTM=put(reviewed_on,datetime19.);'; put 'SUBMITTED_ON_DTTM=put(submitted_on,datetime19.);'; put 'run;'; put '/**'; put '* Check if user has basic access permission to RESTORE the table'; put '*/'; put '%put checking access;'; put '%global allow_restore reason;'; put '%mpe_checkrestore(&table,outresult=ALLOW_RESTORE,outreason=REASON)'; put 'data work.jsParams;'; put 'set approve1;'; put 'LIB_ENGINE="%mf_getEngine(&base_lib)";'; put 'allow_restore="&allow_restore";'; put 'REASON="&reason";'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,jsParams,missing=STRING)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getcols; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvalue(libds,variable,filter=1'; put ')/*/STORE SOURCE*/;'; put '%if %mf_getattrn(&libds,NLOBS)>0 %then %do;'; put '%local dsid rc &variable;'; put '%let dsid=%sysfunc(open(&libds(where=(&filter))));'; put '%syscall set(dsid);'; put '%let rc = %sysfunc(fetch(&dsid));'; put '%let rc = %sysfunc(close(&dsid));'; put '%trim(&&&variable)'; put '%end;'; put '%mend mf_getvalue;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getcols.sas'; put '@brief Retrieves column info to enable population of dropdowns'; put '@details'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li mf_getvalue.sas'; put '@li mp_abort.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%let ds=%mf_getvalue(work.iwant,libds);'; put '%dc_assignlib(READ,%scan(&ds,1,.))'; put 'proc contents noprint data=&ds'; put 'out=droplist1 (keep=name type length label varnum format:);'; put 'run;'; put 'data cols(keep=name type length varnum format label);'; put 'set droplist1(rename=(format=format2 type=type2));'; put 'name=upcase(name);'; put 'if type2=2 then do;'; put 'length format $49.;'; put 'if format2='''' then format=cats(''$'',length,''.'');'; put 'else if formatl=0 then format=cats(format2,''.'');'; put 'else format=cats(format2,formatl,''.'');'; put 'type=''C'';'; put 'ddtype=''CHARACTER'';'; put 'end;'; put 'else do;'; put 'if format2='''' then format=cats(length,''.'');'; put 'else if formatl=0 then format=cats(format2,''.'');'; put 'else if formatd=0 then format=cats(format2,formatl,''.'');'; put 'else format=cats(format2,formatl,''.'',formatd);'; put 'type=''N'';'; put 'if format=:''DATETIME'' then ddtype=''DATETIME'';'; put 'else if format=:''DATE'' then ddtype=''DATE'';'; put 'else if format=:''TIME'' then ddtype=''TIME'';'; put 'else ddtype=''NUMERIC'';'; put 'end;'; put 'if label='''' then label=name;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,cols)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getcolvals; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvalue(libds,variable,filter=1'; put ')/*/STORE SOURCE*/;'; put '%if %mf_getattrn(&libds,NLOBS)>0 %then %do;'; put '%local dsid rc &variable;'; put '%let dsid=%sysfunc(open(&libds(where=(&filter))));'; put '%syscall set(dsid);'; put '%let rc = %sysfunc(fetch(&dsid));'; put '%let rc = %sysfunc(close(&dsid));'; put '%trim(&&&variable)'; put '%end;'; put '%mend mf_getvalue;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_getVarFormat(libds /* two level ds name */'; put ', var /* variable name from which to return the format */'; put ', force=0'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vformat rc vlen vtype;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable format */'; put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let rc = %sysfunc(close(&dsid));'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* supply a default if no format available */'; put '%if %length(&vformat)<2 & &force=1 %then %do;'; put '%let vlen = %sysfunc(varlen(&dsid, &vnum));'; put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%if &vtype=C %then %let vformat=$&vlen..;'; put '%else %let vformat=best.;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable format */'; put '&vformat'; put '%mend mf_getVarFormat;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_filtergenerate(inds,outref=filter);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put 'filename &outref temp;'; put '%if %mf_nobs(&inds)=0 %then %do;'; put '/* ensure we have a default filter */'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc sort data=&inds;'; put 'by SUBGROUP_ID;'; put 'run;'; put 'data _null_;'; put 'file &outref lrecl=32800;'; put 'set &inds end=last;'; put 'by SUBGROUP_ID;'; put 'if _n_=1 then put ''(('';'; put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';'; put 'else put +2 SUBGROUP_LOGIC;'; put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;'; put 'if last.SUBGROUP_ID then put '')''@;'; put 'if last then put '')'';'; put 'run;'; put '%end;'; put '%mend mp_filtergenerate;'; put '%macro mp_filtervalidate(inref,targetds,abort=YES,outds=work.mp_filtervalidate);'; put '%mp_abort(iftrue= (&syscc ne 0 or &syserr ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc / syserr=&syserr - on macro entry)'; put ')'; put '%local fref1;'; put '%let fref1=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &fref1;'; put 'infile &inref end=eof;'; put 'if _n_=1 then do;'; put 'put "proc sql;";'; put 'put "validate select * from &targetds";'; put 'put "where " ;'; put 'end;'; put 'input;'; put 'put _infile_;'; put 'putlog _infile_;'; put 'if eof then put ";quit;";'; put 'run;'; put '%inc &fref1;'; put 'data &outds;'; put 'if &sqlrc or &syscc or &syserr then do;'; put 'REASON_CD=''VALIDATION_ERR''!!''OR: ''!!'; put 'coalescec(symget(''SYSERRORTEXT''),symget(''SYSWARNINGTEXT''));'; put 'output;'; put 'end;'; put 'else stop;'; put 'run;'; put 'filename &fref1 clear;'; put '%if %mf_nobs(&outds)>0 %then %do;'; put '%if &abort=YES %then %do;'; put 'data _null_;'; put 'set &outds;'; put 'call symputx(''REASON_CD'',reason_cd,''l'');'; put 'stop;'; put 'run;'; put '%mp_abort('; put 'mac=&sysmacroname,'; put 'msg=%str(Filter validation issues.)'; put ')'; put '%end;'; put '%let syscc=1008;'; put '%end;'; put '%mend mp_filtervalidate;'; put '%macro mp_filtercheck(inds,targetds=,outds=work.badrecords,abort=YES);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put '/* Validate input column */'; put '%local vtype;'; put '%let vtype=%mf_getvartype(&inds,RAW_VALUE);'; put '%mp_abort(iftrue=(&abort=YES and &vtype ne C),'; put 'mac=&sysmacroname,'; put 'msg=%str(%str(ERR)OR: RAW_VALUE must be character)'; put ')'; put '%if &vtype ne C %then %do;'; put '%put &sysmacroname: RAW_VALUE must be character;'; put '%let syscc=42;'; put '%return;'; put '%end;'; put '/**'; put '* Sanitise the values based on valid value lists, then strip out'; put '* quotes, commas, periods and spaces.'; put '*/'; put '%local reason_cd nobs;'; put '%let nobs=0;'; put 'data &outds;'; put '/*length GROUP_LOGIC SUBGROUP_LOGIC $3 SUBGROUP_ID 8 VARIABLE_NM $32'; put 'OPERATOR_NM $10 RAW_VALUE $4000;*/'; put 'set &inds end=last;'; put 'length reason_cd $4032 vtype vtype2 $1 vnum dsid 8 tmp $4000;'; put 'drop tmp;'; put '/* quick check to ensure column exists */'; put 'if upcase(VARIABLE_NM) not in'; put '(%upcase(%mf_getvarlist(&targetds,dlm=%str(,),quote=SINGLE)))'; put 'then do;'; put 'REASON_CD="Variable "!!cats(variable_nm)!!" not in &targetds";'; put 'putlog REASON_CD= VARIABLE_NM=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'return;'; put 'end;'; put '/* need to open the dataset to get the column type */'; put 'retain dsid;'; put 'if _n_=1 then dsid=open("&targetds","i");'; put 'if dsid>0 then do;'; put 'vnum=varnum(dsid,VARIABLE_NM);'; put 'if vnum<1 then do;'; put '/* should not happen as was also tested for above */'; put 'REASON_CD=cats("Variable (",VARIABLE_NM,") not found in &targetds");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put '/* now we can get the type */'; put 'else vtype=vartype(dsid,vnum);'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Could not open &targetds");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'stop;'; put 'end;'; put '/* closed list checks */'; put 'if GROUP_LOGIC not in (''AND'',''OR'') then do;'; put 'REASON_CD=''GROUP_LOGIC should be AND/OR, not:''!!cats(GROUP_LOGIC);'; put 'putlog REASON_CD= GROUP_LOGIC=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if SUBGROUP_LOGIC not in (''AND'',''OR'') then do;'; put 'REASON_CD=''SUBGROUP_LOGIC should be AND/OR, not:''!!cats(SUBGROUP_LOGIC);'; put 'putlog REASON_CD= SUBGROUP_LOGIC=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if mod(SUBGROUP_ID,1) ne 0 then do;'; put 'REASON_CD=''SUBGROUP_ID should be integer, not ''!!cats(subgroup_id);'; put 'putlog REASON_CD= SUBGROUP_ID=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if OPERATOR_NM not in'; put '(''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'',''BETWEEN'',''IN'',''NOT IN'',''CONTAINS'')'; put 'then do;'; put 'REASON_CD=''Invalid OPERATOR_NM: ''!!cats(OPERATOR_NM);'; put 'putlog REASON_CD= OPERATOR_NM=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put '/* special missing logic */'; put 'if vtype=''N'' & OPERATOR_NM in (''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'') then do;'; put 'if cats(upcase(raw_value)) in ('; put '''.'',''.A'',''.B'',''.C'',''.D'',''.E'',''.F'',''.G'',''.H'',''.I'',''.J'',''.K'',''.L'',''.M'',''.N'''; put '''.N'',''.O'',''.P'',''.Q'',''.R'',''.S'',''.T'',''.U'',''.V'',''.W'',''.X'',''.Y'',''.Z'',''._'''; put ')'; put 'then do;'; put '/* valid numeric - exit data step loop */'; put 'return;'; put 'end;'; put 'else if subpad(upcase(raw_value),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put 'vnum=varnum(dsid,subpad(raw_value,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'end;'; put '/* special logic */'; put 'if OPERATOR_NM in (''IN'',''NOT IN'',''BETWEEN'') then do;'; put 'if OPERATOR_NM=''BETWEEN'' then raw_value1=tranwrd(raw_value,'' AND '','','');'; put 'else do;'; put 'if substr(raw_value,1,1) ne ''('''; put 'or substr(cats(reverse(raw_value)),1,1) ne '')'''; put 'then do;'; put 'REASON_CD=''Missing start/end bracket in RAW_VALUE'';'; put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'else raw_value1=substr(raw_value,2,max(length(raw_value)-2,0));'; put 'end;'; put '/* we now have a comma seperated list of values */'; put 'if vtype=''N'' then do i=1 to countc(raw_value1, '','')+1;'; put 'tmp=scan(raw_value1,i,'','');'; put 'if cats(tmp) ne ''.'' and input(tmp, ?? 8.) eq . then do;'; put 'if OPERATOR_NM =''BETWEEN'' and subpad(upcase(tmp),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put '/* is not valid syntax for IN or NOT IN */'; put 'vnum=varnum(dsid,subpad(tmp,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'REASON_CD=''Non Numeric value provided'';'; put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'return;'; put 'end;'; put 'end;'; put 'else raw_value1=raw_value;'; put '/* remove nested literals eg '''' */'; put 'raw_value1=tranwrd(raw_value1,"''''",'''');'; put '/* now match string literals (always single quotes) */'; put 'raw_value2=raw_value1;'; put 'regex = prxparse("s/(\'').*?(\'')//");'; put 'call prxchange(regex,-1,raw_value2);'; put '/* remove commas and periods*/'; put 'raw_value3=compress(raw_value2,'',.'');'; put '/* output records that contain values other than digits and spaces */'; put 'if notdigit(compress(raw_value3,'' ''))>0 then do;'; put 'if vtype=''C'' and subpad(upcase(raw_value),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put 'vnum=varnum(dsid,subpad(raw_value,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Char Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'putlog raw_value3= $hex32.;'; put 'REASON_CD=cats(''Invalid RAW_VALUE:'',raw_value);'; put 'putlog (_all_)(=);'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'endstep:'; put 'if last then rc=close(dsid);'; put 'run;'; put 'data _null_;'; put 'set &outds end=last;'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue=(&abort=YES and &nobs>0),'; put 'mac=&sysmacroname,'; put 'msg=%str(Data issue: %superq(reason_cd))'; put ')'; put '%if &nobs>0 %then %do;'; put '%let syscc=1008;'; put '%return;'; put '%end;'; put '/**'; put '* syntax checking passed but it does not mean the filter is valid'; put '* for that we can run a proc sql validate query'; put '*/'; put '%local fref1;'; put '%let fref1=%mf_getuniquefileref();'; put '%mp_filtergenerate(&inds,outref=&fref1)'; put '/* this macro will also set syscc to 1008 if any issues found */'; put '%mp_filtervalidate(&fref1,&targetds,outds=&outds,abort=&abort)'; put '%mend mp_filtercheck;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Retrieves column info to enable population of dropdowns'; put '@details An optional filterquery may be provided, if so then it is validated'; put 'and then used to filter the subsequent results.'; put '

Service Inputs

'; put '
IWANT
'; put 'The STARTROW and ROWS variables are used to fetch additional values beyond'; put 'the initial default (4000).'; put '|libds:$19.|col:$9.|STARTROW:8.|ROWS:8.|'; put '|---|---|---|---|'; put '|DC258467.MPE_X_TEST|SOME_TIME|4001|1000'; put '
FILTERQUERY
'; put '|GROUP_LOGIC:$3|SUBGROUP_LOGIC:$3|SUBGROUP_ID:8.|VARIABLE_NM:$32|OPERATOR_NM:$10|RAW_VALUE:$32767|'; put '|---|---|---|---|---|---|'; put '|AND|AND|1|SOME_BESTNUM|>|1|'; put '|AND|AND|1|SOME_TIME|=|77333|'; put '

Service Outputs

'; put '
VALS
'; put 'The type of this column actually depends on the underlying column type, so it can change'; put '|FORMATTED|UNFORMATTED|'; put '|---|---|'; put '|$44.00|44|'; put '
META
'; put '|COLUMN:$32.|SASFORMAT:$32.|STARTROW:8.|ROWS:8.|'; put '|---|---|---|---|'; put '|COL_NAME|DOLLAR8.2|4001|1000'; put '

SAS Macros

'; put '@li mf_existds.sas'; put '@li mf_getvalue.sas'; put '@li mf_verifymacvars.sas'; put '@li dc_assignlib.sas'; put '@li mf_getvarformat.sas'; put '@li mp_abort.sas'; put '@li mp_cntlout.sas'; put '@li mp_filtercheck.sas'; put '@li mp_filtergenerate.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd.'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '/* input table may or may not exist */'; put 'data work.initvars;'; put 'length GROUP_LOGIC $3 SUBGROUP_LOGIC $3 SUBGROUP_ID 8 VARIABLE_NM $32'; put 'OPERATOR_NM $10 RAW_VALUE $32767;'; put 'call missing(of _all_);'; put 'stop;'; put 'data work.filterquery;'; put 'set %sysfunc(ifc('; put '%mf_existds(work.filterquery)=1'; put ',work.filterquery'; put ',work.initvars'; put '));'; put 'run;'; put '/* print data for debugging */'; put 'data _null_;'; put 'set work.iwant;'; put 'put (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set work.filterquery;'; put 'put (_all_)(=);'; put 'run;'; put '%let libds=%mf_getvalue(work.iwant,libds);'; put '%let col2=%mf_getvalue(work.iwant,col);'; put '%let is_fmt=0;'; put '%let startrow=1;'; put '%let rows=4000;'; put '%put &=libds;'; put '%put &=col2;'; put '%mp_abort(iftrue= (%mf_verifymacvars(libds col2)=0)'; put ',mac=&_program..sas'; put ',msg=%str(Missing inputs from iwant. Libds=&libds col=&col2 )'; put ')'; put '%dc_assignlib(WRITE,%scan(&libds,1,.))'; put 'data _null_;'; put 'call missing(startrow,rows);'; put 'set work.iwant;'; put '/* check if the request is for a format catalog */'; put 'call symputx(''orig_libds'',libds);'; put 'is_fmt=0;'; put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'call symputx(''libds'',''work.fmtextract'');'; put 'is_fmt=1;'; put 'end;'; put 'call symputx(''is_fmt'',is_fmt);'; put 'call symputx(''startrow'',coalesce(startrow,&startrow));'; put 'call symputx(''rows'',coalesce(rows,&rows));'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_cntlout('; put 'iftrue=(&is_fmt=1)'; put ',libcat=&orig_libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '/**'; put '* Validate the filter query'; put '*/'; put '%mp_filtercheck(work.filterquery,targetds=&libds,abort=YES)'; put '/**'; put '* Prepare the query'; put '*/'; put '%mp_filtergenerate(work.filterquery,outref=myfilter)'; put '/* cannot %inc in a sql where clause, only data step, so - use a view */'; put 'data work.vw_vals/view=work.vw_vals;'; put 'set &libds;'; put 'where %inc myfilter;;'; put 'run;'; put 'proc sql;'; put 'create view work.vw_vals_sorted as'; put 'select distinct'; put 'put(&col2,%mf_getVarFormat(&libds,&col2,force=1)) as formatted,'; put '&col2 as unformatted'; put 'from work.vw_vals;'; put '/* restrict num of output values */'; put 'data work.vals;'; put 'set work.vw_vals_sorted;'; put 'if _n_ ge &startrow;'; put 'x+1;'; put 'if x>&rows then stop;'; put 'drop x;'; put 'run;'; put 'data vals;'; put '/* ensure empty value if table is empty, for dropdowns */'; put 'if nobs=0 then output;'; put 'set vals nobs=nobs;'; put 'format unformatted ;'; put 'output;'; put 'run;'; put 'proc sql noprint;'; put 'select count(*) into: nobs from work.vw_vals_sorted;'; put 'data meta;'; put 'column="&col2";'; put 'sasformat="%mf_getVarFormat(&libds,&col2)";'; put 'startrow=&startrow;'; put 'rows=&rows;'; put 'nobs=&nobs;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,vals,missing=STRING,showmeta=YES)'; put '%webout(OBJ,meta)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getddl; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_existfileref(fref'; put ')/*/STORE SOURCE*/;'; put '%local rc;'; put '%let rc=%sysfunc(fileref(&fref));'; put '%if &rc=0 %then %do;'; put '1'; put '%end;'; put '%else %if &rc<0 %then %do;'; put '%put &sysmacroname: Fileref &fref exists but the underlying file does not;'; put '1'; put '%end;'; put '%else %do;'; put '0'; put '%end;'; put '%mend mf_existfileref;'; put '%macro mf_getvarcount(libds,typefilter=A'; put ')/*/STORE SOURCE*/;'; put '%local dsid nvars rc outcnt x;'; put '%let dsid=%sysfunc(open(&libds));'; put '%let nvars=.;'; put '%let outcnt=0;'; put '%let typefilter=%upcase(&typefilter);'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &typefilter=A %then %let outcnt=&nvars;'; put '%else %if &nvars>0 %then %do x=1 %to &nvars;'; put '/* increment based on variable type */'; put '%if %sysfunc(vartype(&dsid,&x))=&typefilter %then %do;'; put '%let outcnt=%eval(&outcnt+1);'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put unable to open &libds (rc=&dsid);'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '&outcnt'; put '%mend mf_getvarcount;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_getconstraints(lib=WORK'; put ',ds='; put ',outds=mp_getconstraints'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '/**'; put '* Cater for environments where sashelp.vcncolu is not available'; put '*/'; put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;'; put 'proc sql;'; put 'create table &outds('; put 'libref char(8)'; put ',TABLE_NAME char(32)'; put ',constraint_type char(8) label=''Constraint Type'''; put ',constraint_name char(32) label=''Constraint Name'''; put ',column_name char(32) label=''Column'''; put ',constraint_order num'; put ');'; put '%return;'; put '%end;'; put '/**'; put '* Neither dictionary tables nor sashelp provides a constraint order column,'; put '* however they DO arrive in the correct order. So, create the col.'; put '**/'; put '%local vw;'; put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);'; put 'data &vw /view=&vw;'; put 'set sashelp.vcncolu;'; put 'where table_catalog="&lib";'; put '/* use retain approach to reset the constraint order with each constraint */'; put 'length tmp $1000;'; put 'retain tmp;'; put 'drop tmp;'; put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;'; put 'constraint_order=1;'; put 'end;'; put 'else constraint_order+1;'; put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);'; put 'run;'; put '/* must use SQL as proc datasets does not support length changes */'; put 'proc sql noprint;'; put 'create table &outds as'; put 'select upcase(a.TABLE_CATALOG) as libref'; put ',upcase(a.TABLE_NAME) as TABLE_NAME'; put ',a.constraint_type'; put ',a.constraint_name'; put ',b.column_name'; put ',b.constraint_order'; put 'from dictionary.TABLE_CONSTRAINTS a'; put 'left join &vw b'; put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)'; put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)'; put 'and a.constraint_name=b.constraint_name'; put '/**'; put '* We cannot apply this clause to the underlying dictionary table. See:'; put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867'; put '* cannot use`where calculated libref="&lib"` either as it will STILL execute'; put '* all the underlying constraint queries, causing exception errors in some'; put '* cases: https://github.com/sasjs/core/issues/283'; put '*/'; put 'where a.TABLE_CATALOG="&lib"'; put '%if "&ds" ne "" %then %do;'; put 'and upcase(a.TABLE_NAME)="&ds"'; put 'and upcase(b.TABLE_NAME)="&ds"'; put '%end;'; put 'order by libref, table_name, constraint_name, constraint_order'; put ';'; put '/* tidy up */'; put '%mp_dropmembers('; put '&vw,'; put 'iftrue=(&mdebug=0)'; put ')'; put '%mend mp_getconstraints;'; put '%macro mp_getddl(libref,ds,fref=getddl,flavour=SAS,showlog=NO,schema='; put ',applydttm=NO'; put ')/*/STORE SOURCE*/;'; put '/* check fileref is assigned */'; put '%if %mf_existfileref(&fref)=0 %then %do;'; put 'filename &fref temp ;'; put '%end;'; put '%if %length(&libref)=0 %then %let libref=WORK;'; put '%let flavour=%upcase(&flavour);'; put 'proc sql noprint;'; put 'create table _data_ as'; put 'select * from dictionary.tables'; put 'where upcase(libname)="%upcase(&libref)"'; put 'and memtype=''DATA'' /* views not currently supported */'; put '%if %length(&ds)>0 %then %do;'; put 'and upcase(memname)="%upcase(&ds)"'; put '%end;'; put ';'; put '%local tabinfo; %let tabinfo=&syslast;'; put 'create table _data_ as'; put 'select * from dictionary.columns'; put 'where upcase(libname)="%upcase(&libref)"'; put '%if %length(&ds)>0 %then %do;'; put 'and upcase(memname)="%upcase(&ds)"'; put '%end;'; put ';'; put '%local colinfo; %let colinfo=&syslast;'; put '%local dsnlist;'; put 'select distinct upcase(memname) into: dsnlist'; put 'separated by '' '''; put 'from &syslast'; put ';'; put 'create table _data_ as'; put 'select * from dictionary.indexes'; put 'where upcase(libname)="%upcase(&libref)"'; put '%if %length(&ds)>0 %then %do;'; put 'and upcase(memname)="%upcase(&ds)"'; put '%end;'; put 'order by idxusage, indxname, indxpos'; put ';'; put '%local idxinfo; %let idxinfo=&syslast;'; put '/* Extract all Primary Key and Unique data constraints */'; put '%mp_getconstraints(lib=%upcase(&libref),ds=%upcase(&ds),outds=_data_)'; put '%local colconst; %let colconst=&syslast;'; put '%macro addConst();'; put '%global constraints_used;'; put 'data _null_;'; put 'length ctype $11 constraint_name_orig $256 constraints_used $5000;'; put 'set &colconst('; put 'where=(table_name="&curds" and constraint_type in (''PRIMARY'',''UNIQUE''))'; put ') end=last;'; put 'file &fref mod;'; put 'by constraint_type constraint_name;'; put 'retain constraints_used;'; put 'constraint_name_orig=constraint_name;'; put 'if upcase(strip(constraint_type)) = ''PRIMARY'' then ctype=''PRIMARY KEY'';'; put 'else ctype=strip(constraint_type);'; put '%if &flavour=TSQL %then %do;'; put 'column_name=catt(''['',column_name,'']'');'; put 'constraint_name=catt(''['',constraint_name,'']'');'; put '%end;'; put '%else %if &flavour=PGSQL %then %do;'; put 'column_name=catt(''"'',column_name,''"'');'; put 'constraint_name=catt(''"'',constraint_name,''"'');'; put '%end;'; put 'if first.constraint_name then do;'; put 'constraints_used = catx('' '', constraints_used, constraint_name_orig);'; put 'put " ,CONSTRAINT " constraint_name ctype "(" ;'; put 'put '' '' column_name;'; put 'end;'; put 'else put '' ,'' column_name;'; put 'if last.constraint_name then do;'; put 'put " )";'; put 'call symput(''constraints_used'',strip(constraints_used));'; put 'end;'; put 'run;'; put '%put &=constraints_used;'; put '%mend addConst;'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* DDL generated by &sysuserid on %sysfunc(datetime(),datetime19.) */";'; put 'run;'; put '%local x curds;'; put '%if &flavour=SAS %then %do;'; put '%do x=1 %to %sysfunc(countw(&dsnlist));'; put '%let curds=%scan(&dsnlist,&x);'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* SAS Flavour DDL for %upcase(&libref).&curds */";'; put 'put "proc sql;";'; put 'run;'; put 'data _null_;'; put 'file &fref mod;'; put 'length lab $1024 typ $20;'; put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;'; put 'if _n_=1 then do;'; put 'if memtype=''DATA'' then do;'; put 'put "create table &libref..&curds(";'; put 'end;'; put 'else do;'; put '/* just a placeholder - we filter out views at the top */'; put 'put "create view &libref..&curds(";'; put 'end;'; put 'put " "@@;'; put 'end;'; put 'else put " ,"@@;'; put 'if length(format)>1 then fmt=" format="!!cats(format);'; put 'if length(label)>1 then'; put 'lab=" label="!!cats("''",tranwrd(label,"''","''''"),"''");'; put 'if notnull=''yes'' then notnul='' not null'';'; put 'if type=''char'' then typ=cats(''char('',length,'')'');'; put 'else if length ne 8 then typ=''num length=''!!cats(length);'; put 'else typ=''num'';'; put 'put name typ fmt notnul lab;'; put 'run;'; put '/* Extra step for data constraints */'; put '%addConst()'; put 'data _null_;'; put 'file &fref mod;'; put 'put '');'';'; put 'run;'; put '/* Create Unique Indexes, but only if they were not already defined within'; put 'the Constraints section. */'; put 'data _null_;'; put '*length ds $128;'; put 'set &idxinfo('; put 'where=('; put 'memname="&curds"'; put 'and unique=''yes'''; put 'and indxname not in ('; put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))'; put ')'; put ')'; put ');'; put 'file &fref mod;'; put 'by idxusage indxname;'; put '/* ds=cats(libname,''.'',memname); */'; put 'if first.indxname then do;'; put 'put ''CREATE UNIQUE INDEX '' indxname "ON &libref..&curds (" ;'; put 'put '' '' name ;'; put 'end;'; put 'else put '' ,'' name ;'; put '*else put '' ,'' name ;'; put 'if last.indxname then do;'; put 'put '');'';'; put 'end;'; put 'run;'; put '/*'; put 'ods output IntegrityConstraints=ic;'; put 'proc contents data=testali out2=info;'; put 'run;'; put '*/'; put '%end;'; put '%end;'; put '%else %if &flavour=TSQL %then %do;'; put '/* if schema does not exist, set to be same as libref */'; put '%local schemaactual;'; put 'proc sql noprint;'; put 'select sysvalue into: schemaactual'; put 'from dictionary.libnames'; put 'where upcase(libname)="&libref" and engine=''SQLSVR'';'; put '%let schema=%sysfunc(coalescec(&schemaactual,&schema,&libref));'; put '%do x=1 %to %sysfunc(countw(&dsnlist));'; put '%let curds=%scan(&dsnlist,&x);'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* TSQL Flavour DDL for &schema..&curds */";'; put 'data _null_;'; put 'file &fref mod;'; put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;'; put 'if _n_=1 then do;'; put 'if memtype=''DATA'' then do;'; put 'put "create table [&schema].[&curds](";'; put 'end;'; put 'else do;'; put '/* just a placeholder - we filter out views at the top */'; put 'put "create view [&schema].[&curds](";'; put 'end;'; put 'put " "@@;'; put 'end;'; put 'else put " ,"@@;'; put 'format=upcase(format);'; put 'if 1=0 then; /* dummy if */'; put '%if &applydttm=YES %then %do;'; put 'else if format=:''DATETIME'' then fmt=''[datetime2](7) '';'; put '%end;'; put 'else if type=''num'' then fmt=''[decimal](18,2)'';'; put 'else if length le 8000 then fmt=''[varchar](''!!cats(length)!!'')'';'; put 'else fmt=cats(''[varchar](max)'');'; put 'if notnull=''yes'' then notnul='' NOT NULL'';'; put 'put "[" name +(-1) "]" fmt notnul;'; put 'run;'; put '/* Extra step for data constraints */'; put '%addConst()'; put '/* Create Unique Indexes, but only if they were not already defined within'; put 'the Constraints section. */'; put 'data _null_;'; put '*length ds $128;'; put 'set &idxinfo('; put 'where=('; put 'memname="&curds"'; put 'and unique=''yes'''; put 'and indxname not in ('; put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))'; put ')'; put ')'; put ');'; put 'file &fref mod;'; put 'by idxusage indxname;'; put '*ds=cats(libname,''.'',memname);'; put 'if first.indxname then do;'; put '/* add nonclustered in case of multiple unique indexes */'; put 'put '' ,index ['' indxname +(-1) ''] UNIQUE NONCLUSTERED ('';'; put 'put '' ['' name +(-1) '']'';'; put 'end;'; put 'else put '' ,['' name +(-1) '']'';'; put 'if last.indxname then do;'; put 'put '' )'';'; put 'end;'; put 'run;'; put 'data _null_;'; put 'file &fref mod;'; put 'put '')'';'; put 'put ''GO'';'; put 'run;'; put '/* add extended properties for labels */'; put 'data _null_;'; put 'file &fref mod;'; put 'length nm $64 lab $1024;'; put 'set &colinfo (where=(upcase(memname)="&curds" and label ne '''')) end=last;'; put 'nm=cats("N''",tranwrd(name,"''","''''"),"''");'; put 'lab=cats("N''",tranwrd(label,"''","''''"),"''");'; put 'put '' '';'; put 'put "EXEC sys.sp_addextendedproperty ";'; put 'put " @name=N''MS_Description'',@value=" lab ;'; put 'put " ,@level0type=N''SCHEMA'',@level0name=N''&schema'' ";'; put 'put " ,@level1type=N''TABLE'',@level1name=N''&curds''";'; put 'put " ,@level2type=N''COLUMN'',@level2name=" nm ;'; put 'if last then put ''GO'';'; put 'run;'; put '%end;'; put '%end;'; put '%else %if &flavour=PGSQL %then %do;'; put '/* if schema does not exist, set to be same as libref */'; put '%local schemaactual;'; put 'proc sql noprint;'; put 'select sysvalue into: schemaactual'; put 'from dictionary.libnames'; put 'where upcase(libname)="&libref" and engine=''POSTGRES'';'; put '%let schema=%sysfunc(coalescec(&schemaactual,&schema,&libref));'; put 'data _null_;'; put 'file &fref mod;'; put 'put "CREATE SCHEMA &schema;";'; put '%do x=1 %to %sysfunc(countw(&dsnlist));'; put '%let curds=%scan(&dsnlist,&x);'; put '%local curdsvarcount;'; put '%let curdsvarcount=%mf_getvarcount(&libref..&curds);'; put '%if &curdsvarcount>1600 %then %do;'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* &libref..&curds contains &curdsvarcount vars */";'; put 'put "/* Postgres cannot create tables with over 1600 vars */";'; put 'put "/* No DDL will be generated for this table";'; put 'run;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* Postgres Flavour DDL for &schema..&curds */";'; put 'data _null_;'; put 'file &fref mod;'; put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;'; put 'length fmt $32;'; put 'if _n_=1 then do;'; put 'if memtype=''DATA'' then do;'; put 'put "CREATE TABLE &schema..&curds (";'; put 'end;'; put 'else do;'; put '/* just a placeholder - we filter out views at the top */'; put 'put "CREATE VIEW &schema..&curds (";'; put 'end;'; put 'put " "@@;'; put 'end;'; put 'else put " ,"@@;'; put 'format=upcase(format);'; put 'if 1=0 then; /* dummy if */'; put '%if &applydttm=YES %then %do;'; put 'else if format=:''DATETIME'' then fmt='' TIMESTAMP '';'; put '%end;'; put 'else if type=''num'' then fmt='' DOUBLE PRECISION'';'; put 'else fmt=''VARCHAR(''!!cats(length)!!'')'';'; put 'if notnull=''yes'' then notnul='' NOT NULL'';'; put '/* quote column names in case they represent reserved words */'; put 'name2=quote(trim(name));'; put 'put name2 fmt notnul;'; put 'run;'; put '/* Extra step for data constraints */'; put '%addConst()'; put 'data _null_;'; put 'file &fref mod;'; put 'put '');'';'; put 'run;'; put '/* Create Unique Indexes, but only if they were not already defined within'; put 'the Constraints section. */'; put 'data _null_;'; put '*length ds $128;'; put 'set &idxinfo('; put 'where=('; put 'memname="&curds"'; put 'and unique=''yes'''; put 'and indxname not in ('; put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))'; put ')'; put ')'; put ');'; put 'file &fref mod;'; put 'by idxusage indxname;'; put 'if first.indxname then do;'; put 'put ''CREATE UNIQUE INDEX "'' indxname +(-1) ''" '' "ON &schema..&curds(";'; put 'put '' "'' name +(-1) ''"'' ;'; put 'end;'; put 'else put '' ,"'' name +(-1) ''"'';'; put 'if last.indxname then do;'; put 'put '');'';'; put 'end;'; put 'run;'; put '%end;'; put '%end;'; put '%end;'; put '%if %upcase(&showlog)=YES %then %do;'; put 'options ps=max;'; put 'data _null_;'; put 'infile &fref;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%end;'; put '%mend mp_getddl;'; put '%macro mfs_httpheader(header_name'; put ',header_value'; put ')/*/STORE SOURCE*/;'; put '%global sasjs_stpsrv_header_loc;'; put '%local fref fid i;'; put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;'; put '%put &=fref &=sasjs_stpsrv_header_loc;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%mend mfs_httpheader;'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mp_streamfile('; put 'contenttype=TEXT'; put ',inloc='; put ',inref=0'; put ',iftrue=%str(1=1)'; put ',outname='; put ',outref=_webout'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let contentype=%upcase(&contenttype);'; put '%let outref=%upcase(&outref);'; put '%local platform; %let platform=%mf_getplatform();'; put '/**'; put '* check engine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put '%local streamweb;'; put '%let streamweb=0;'; put 'data _null_;'; put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));'; put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');'; put 'run;'; put '%if &contentype=CSV %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/csv'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/csv'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/csv)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=EXCEL %then %do;'; put '/* suitable for XLS format */'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype=''application/vnd.ms-excel'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="image/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"'; put 'contenttype="text/%lowcase(&contenttype)"'; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=TEXT %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/text'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/text'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/text)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="font/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=XLSX %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'','; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype='; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type'; put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; put ')'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=ZIP %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/zip'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip'''; put 'contenttype=''application/zip'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/zip)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;'; put '%end;'; put '%if &inref ne 0 %then %do;'; put '%mp_binarycopy(inref=&inref,outref=&outref)'; put '%end;'; put '%else %do;'; put '%mp_binarycopy(inloc="&inloc",outref=&outref)'; put '%end;'; put '%mend mp_streamfile;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Download DDL for a table or entire library in a particular flavour.'; put '@details'; put '

SAS Macros

'; put '@li mddl_sas_cntlout.sas'; put '@li dc_assignlib.sas'; put '@li mf_existds.sas'; put '@li mp_abort.sas'; put '@li mp_getddl.sas'; put '@li mp_streamfile.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%global libref ds flavour;'; put '%let flavour=%sysfunc(coalescec(&flavour,SAS));'; put '%mpeinit()'; put '%dc_assignlib(READ,&libref)'; put 'data _null_;'; put '/* check if the request is for a format catalog */'; put 'ds=symget(''ds'');'; put 'if subpad(cats(reverse(ds)),1,3)=:''CF-'' then do;'; put 'ds=scan(ds,1,''-'');'; put 'libds=cats(symget(''libref''),''.'',ds);'; put 'putlog "Format Catalog Captured";'; put 'call execute(''%mddl_sas_cntlout(libds=work.fmtextract)'');'; put 'call symputx(''libref'',''work'');'; put 'call symputx(''ds'',''fmtextract'');'; put 'end;'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue=("exist&ds" ne "exist" and %mf_existds(libds=&libref..&ds)<1)'; put ',mac=&_program'; put ',msg=%str(Dataset &libref..&ds was not found)'; put ')'; put '%let tmploc=%sysfunc(pathname(work))/temp.txt;'; put 'filename tmp "&tmploc";'; put '%mp_getddl(&libref,&ds,flavour=&flavour, fref=tmp, applydttm=YES)'; put '%mp_streamfile(contenttype=TEXT'; put ',inloc=%str(&tmploc)'; put ',outname=&libref._&ds..ddl'; put ')'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getgroups; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getgroups(outds=mm_getlibs);'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getgroups(outds=&outds,repo=foundation)'; put '%do x=1 %to &repocnt;'; put '%mm_getgroups(outds=&outds.a, repo=&&repo&x)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'proc sort data=&outds noduprec;'; put 'by groupname;'; put 'run;'; put '%mend dc_getgroups;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getgroups.sas'; put '@brief List all SAS Groups'; put '@details Gets a list of all SAS Groups. Runs without mpeinit() so that it'; put 'can be available to the sasjs/server configurator'; put '

SAS Macros

'; put '@li dc_getgroups.sas'; put '

Data Outputs

'; put '
groups
'; put '|NAME:$32.|DESCRIPTION:$64.|GROUPID:best.|'; put '|---|---|---|'; put '|`SomeGroup `|`A group `|`1`|'; put '|`Another Group`|`this is a different group`|`2`|'; put '|`admin`|`Administrators `|`3`|'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%dc_getgroups(outds=groups)'; put '%webout(OPEN)'; put '%webout(OBJ,groups)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getrawdata; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_filtergenerate(inds,outref=filter);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put 'filename &outref temp;'; put '%if %mf_nobs(&inds)=0 %then %do;'; put '/* ensure we have a default filter */'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc sort data=&inds;'; put 'by SUBGROUP_ID;'; put 'run;'; put 'data _null_;'; put 'file &outref lrecl=32800;'; put 'set &inds end=last;'; put 'by SUBGROUP_ID;'; put 'if _n_=1 then put ''(('';'; put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';'; put 'else put +2 SUBGROUP_LOGIC;'; put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;'; put 'if last.SUBGROUP_ID then put '')''@;'; put 'if last then put '')'';'; put 'run;'; put '%end;'; put '%mend mp_filtergenerate;'; put '%macro mpe_filtermaster(mode,libds,'; put 'dclib=,'; put 'filter_rk=-1,'; put 'outref=0,'; put 'outds=work.query'; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%let mode=%upcase(&mode);'; put '%let libds=%upcase(&libds);'; put '%mp_abort(iftrue= ('; put '&mode ne EDIT and &mode ne VIEW and &mode ne DLOAD and &mode ne ULOAD'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid MODE: &mode)'; put ')'; put '%mp_abort(iftrue= (&outref = 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Please provide a fileref!)'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc)'; put ')'; put 'filename &outref temp;'; put '/* ensure outputs exist */'; put 'data _null_;'; put 'file &outref;'; put 'put '' '';'; put 'run;'; put 'data &outds;'; put 'set &dclib..mpe_filtersource;'; put 'stop;'; put 'run;'; put '/**'; put '* Deal with FILTER_RK first'; put '*/'; put '%if &filter_rk gt 0 %then %do;'; put 'data _null_;'; put 'file &outref;'; put 'put ''( ''@@;'; put 'set &dclib..mpe_filteranytable(where=(filter_rk=&filter_rk));'; put 'call symputx(''filter_hash'',filter_hash,''l'');'; put 'run;'; put 'proc sort data=&dclib..mpe_filtersource(where=(filter_hash="&filter_hash"))'; put 'out=&outds(drop=filter_hash filter_line processed_dttm);'; put 'by filter_line;'; put 'run;'; put '%mp_filtergenerate(&outds,outref=&outref)'; put '%end;'; put '/* Now filter for current records if the MODE is EDIT or DLOAD */'; put '%local varfrom varto;'; put '%let varfrom=0;'; put 'proc sql;'; put 'select coalescec(var_txfrom,''0''), var_txto into: varfrom,:varto'; put 'from &dclib..MPE_TABLES'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and libref="%scan(&libds,1,.)" and dsn="%scan(&libds,2,.)";'; put '%put &=varfrom;'; put '%put &=varto;'; put '/**'; put '* Check if the date variables were mentioned in the query'; put '* This is a trigger for serving a historical view instead of current'; put '* we skip this part when checking an ULOAD as there are no date vars'; put '*/'; put '%if &varfrom ne 0 and (&mode=EDIT or &mode=DLOAD) %then %do;'; put '%local validityvars;'; put 'proc sql;'; put 'select count(*) into: validityvars'; put 'from &outds'; put 'where variable_nm in ("&varfrom","&varto");'; put '%if &validityvars=0 %then %do;'; put 'data _null_;'; put 'file &outref mod;'; put 'length filter_text $32767;'; put 'varfrom=symget(''varfrom'');'; put 'varto=symget(''varto'');'; put 'filter_text=catx('' '','; put '''("%sysfunc(datetime(),'',"%mf_fmtdttm()",'')"dt <'',varto,'')'''; put ');'; put 'if &filter_rk > 0 then put ''AND '' filter_text;'; put 'else put filter_text;'; put 'run;'; put '%end;'; put '%end;'; put '/**'; put '* Now do Row Level Security based on the MPE_ROW_LEVEL_SECURITY table'; put '*/'; put '/* first determine users group membership */'; put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)'; put '%local admin_check;'; put 'proc sql;'; put 'select count(*) into: admin_check'; put 'from work.groups'; put 'where groupname="&mpeadmins";'; put '%put &sysmacroname: &=admin_check &=mpeadmins;'; put '%if &admin_check=0 %then %do;'; put '%local scopeval;'; put '%if &mode=DLOAD %then %let scopeval=VIEW;'; put '%if &mode=ULOAD %then %let scopeval=EDIT;'; put '%else %let scopeval=&mode;'; put '/* extract relevant rows */'; put '%local rlsds;'; put '%let rlsds=%mf_getuniquename();'; put 'proc sql;'; put 'create table work.&rlsds as'; put 'select rls_group,'; put 'rls_group_logic as group_logic,'; put 'rls_subgroup_logic as subgroup_logic,'; put 'rls_subgroup_id as subgroup_id,'; put 'rls_variable_nm as variable_nm,'; put 'rls_operator_nm as operator_nm,'; put 'rls_raw_value as raw_value'; put 'from &mpelib..mpe_row_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and rls_scope in ("&scopeval",''ALL'')'; put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)'; put 'and rls_libref="%scan(&libds,1,.)"'; put 'and rls_table="%scan(&libds,2,.)"'; put 'and rls_active=1'; put 'order by rls_group,rls_subgroup_id;'; put '%if &sqlobs>0 %then %do;'; put '/* check if we currently have filter or not */'; put 'data ;'; put 'infile &outref end=eof;'; put 'input;'; put 'if _n_=1 and eof and cats(_infile_)='''' then newfilter=1;'; put 'output;'; put 'stop;'; put 'run;'; put 'data _null_;'; put 'set &syslast;'; put 'file &outref mod;'; put 'if newfilter=1 then put ''('';'; put 'else put ''AND ('';'; put 'run;'; put '/* loop through and apply filters for each group membership */'; put '%local fref ds;'; put '%let fref=%mf_getuniquefileref();'; put '%let ds=%mf_getuniquename();'; put 'proc sql noprint;'; put 'select distinct rls_group into : group1 -'; put 'from work.&rlsds;'; put '%do i=1 %to &sqlobs;'; put 'data work.&ds;'; put 'set work.&rlsds;'; put 'where rls_group="&&group&i";'; put 'drop rls_group;'; put 'run;'; put '%mp_filtergenerate(&ds,outref=&fref)'; put 'data _null_;'; put 'infile &fref;'; put 'file &outref mod;'; put 'input;'; put 'if &i>1 and _n_=1 then put '' OR '';'; put 'put _infile_;'; put 'run;'; put '%end;'; put 'data _null_;'; put 'file &outref mod;'; put 'put '')'';'; put 'run;'; put '%end; /* &sqlobs>0 */'; put '%else %do;'; put '%put &sysmacroname: no matching groups;'; put 'data _null_;'; put 'set work.groups;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname'; put ',msg=%str(Row Level Security Generation Error)'; put ')'; put '%end; /* &admin_check=0 */'; put '%put leaving &sysmacroname with the following query:;'; put '%local empty;'; put '%let empty=0;'; put 'data _null_;'; put 'infile &outref end=eof;'; put 'input;'; put 'putlog _infile_;'; put 'if _n_=1 and eof and cats(_infile_)='''' then do;'; put 'put ''1=1'';'; put 'call symputx(''empty'',1,''l'');'; put 'end;'; put 'run;'; put '%if &empty=1 %then %do;'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%mend mpe_filtermaster;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '/** @cond */'; put '%macro mf_existfeature(feature'; put ')/*/STORE SOURCE*/;'; put '%let feature=%upcase(&feature);'; put '%local platform;'; put '%let platform=%mf_getplatform();'; put '%if &feature= %then %do;'; put '%put No feature was requested for detection;'; put '%end;'; put '%else %if &feature=COLCONSTRAINTS %then %do;'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=PROCLUA %then %do;'; put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */'; put '%if &platform=SASVIYA %then 1;'; put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;'; put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=DBMS_MEMTYPE %then %do;'; put '/* does dbms_memtype exist in dictionary.tables? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=EXPORTXLS %then %do;'; put '/* is it possible to PROC EXPORT an excel file? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;'; put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;'; put '%else 0;'; put '%end;'; put '%else %do;'; put '-1'; put '%put &sysmacroname: &feature not found;'; put '%end;'; put '%mend mf_existfeature;'; put '/** @endcond */'; put '%macro mp_ds2cards(base_ds, tgt_ds='; put ',cards_file="%sysfunc(pathname(work))/cardgen.sas"'; put ',maxobs=max'; put ',random_sample=NO'; put ',showlog=YES'; put ',outencoding='; put ',append=NO'; put ')/*/STORE SOURCE*/;'; put '%local i setds nvars;'; put '%if not %sysfunc(exist(&base_ds)) %then %do;'; put '%put %str(WARN)ING: &base_ds does not exist;'; put '%return;'; put '%end;'; put '%if %index(&base_ds,.)=0 %then %let base_ds=WORK.&base_ds;'; put '%if (&tgt_ds = ) %then %let tgt_ds=&base_ds;'; put '%if %index(&tgt_ds,.)=0 %then %let tgt_ds=WORK.%scan(&base_ds,2,.);'; put '%if ("&outencoding" ne "") %then %let outencoding=encoding="&outencoding";'; put '%if ("&append" = "" or "&append" = "NO") %then %let append=;'; put '%else %let append=mod;'; put '/* get varcount */'; put '%let nvars=0;'; put 'proc sql noprint;'; put 'select count(*) into: nvars from dictionary.columns'; put 'where upcase(libname)="%scan(%upcase(&base_ds),1)"'; put 'and upcase(memname)="%scan(%upcase(&base_ds),2)";'; put '%if &nvars=0 %then %do;'; put '%put %str(WARN)ING: Dataset &base_ds has no variables, will not be converted.;'; put '%return;'; put '%end;'; put '/* get indexes */'; put 'proc sort'; put 'data=sashelp.vindex('; put 'where=(upcase(libname)="%scan(%upcase(&base_ds),1)"'; put 'and upcase(memname)="%scan(%upcase(&base_ds),2)")'; put ')'; put 'out=_data_;'; put 'by indxname indxpos;'; put 'run;'; put '%local indexes;'; put 'data _null_;'; put 'set &syslast end=last;'; put 'if _n_=1 then call symputx(''indexes'',''(index=('',''l'');'; put 'by indxname indxpos;'; put 'length vars $32767 nom uni $8;'; put 'retain vars;'; put 'if first.indxname then do;'; put 'idxcnt+1;'; put 'nom='''';'; put 'uni='''';'; put 'vars=name;'; put 'end;'; put 'else vars=catx('' '',vars,name);'; put 'if last.indxname then do;'; put 'if nomiss=''yes'' then nom=''/nomiss'';'; put 'if unique=''yes'' then uni=''/unique'';'; put 'call symputx(''indexes'''; put ',catx('' '',symget(''indexes''),indxname,''=('',vars,'')'',nom,uni)'; put ',''l'');'; put 'end;'; put 'if last then call symputx(''indexes'',cats(symget(''indexes''),''))''),''l'');'; put 'run;'; put 'data;run;'; put '%let setds=&syslast;'; put 'proc sql'; put '%if %datatyp(&maxobs)=NUMERIC %then %do;'; put 'outobs=&maxobs;'; put '%end;'; put ';'; put 'create table &setds as select * from &base_ds'; put '%if &random_sample=YES %then %do;'; put 'order by ranuni(42)'; put '%end;'; put ';'; put 'reset outobs=max;'; put 'create table datalines1 as'; put 'select name,type,length,varnum,format,label from dictionary.columns'; put 'where upcase(libname)="%upcase(%scan(&base_ds,1))"'; put 'and upcase(memname)="%upcase(%scan(&base_ds,2))";'; put '/**'; put 'Due to long decimals cannot use best. format'; put 'So - use bestd. format and then use character functions to strip trailing'; put 'zeros, if NOT an integer or missing!! Cannot use int() as it upsets'; put 'note2err when there are missings.'; put 'resolved code = ifc( mod(coalesce(VARIABLE,0),1)=0'; put ',put(VARIABLE,best32.)'; put ',substrn(put(VARIABLE,bestd32.),1'; put ',findc(put(VARIABLE,bestd32.),''0'',''TBK'')));'; put '**/'; put 'data datalines_2;'; put 'format dataline $32000.;'; put 'set datalines1 (where=(upcase(name) not in'; put '(''PROCESSED_DTTM'',''VALID_FROM_DTTM'',''VALID_TO_DTTM'')));'; put 'if type=''num'' then dataline='; put 'cats(''ifc(mod(coalesce('',name,'',0),1)=0'; put ',put('',name,'',best32.-l)'; put ',substrn(put('',name,'',bestd32.-l),1'; put ',findc(put('',name,'',bestd32.-l),"0","TBK")))'');'; put '/**'; put '* binary data must be converted, to store in text format. It is identified'; put '* by the presence of the $HEX keyword in the format.'; put '*/'; put 'else if upcase(format)=:''$HEX'' then'; put 'dataline=cats(''put(trim('',name,''),'',format,'')'');'; put '/**'; put '* There is no easy way to store line breaks in a cards file.'; put '* To discuss this, use: https://github.com/sasjs/core/issues/80'; put '* Removing all nonprintables with kw (keep writeable)'; put '*/'; put 'else dataline=cats(''compress('',name,'', ,"kw")'');'; put 'run;'; put 'proc sql noprint;'; put 'select dataline into: datalines separated by '','' from datalines_2;'; put '%local'; put 'process_dttm_flg'; put 'valid_from_dttm_flg'; put 'valid_to_dttm_flg'; put ';'; put '%let process_dttm_flg = N;'; put '%let valid_from_dttm_flg = N;'; put '%let valid_to_dttm_flg = N;'; put 'data _null_;'; put 'set datalines1 ;'; put '/* build attrib statement */'; put 'if type=''char'' then type2=''$'';'; put 'if strip(format) ne '''' then format2=cats(''format='',format);'; put 'if strip(label) ne '''' then label2=cats(''label='',quote(trim(label)));'; put 'str1=catx('' '',(put(name,$33.)||''length='')'; put ',put(cats(type2,length),$7.)||format2,label2);'; put '/* Build input statement */'; put 'if upcase(format)=:''$HEX'' then type3='':''!!format;'; put 'else if type=''char'' then type3='':$char.'';'; put 'str2=put(name,$33.)||type3;'; put 'if(upcase(name) = "PROCESSED_DTTM") then'; put 'call symputx("process_dttm_flg", "Y", "L");'; put 'if(upcase(name) = "VALID_FROM_DTTM") then'; put 'call symputx("valid_from_dttm_flg", "Y", "L");'; put 'if(upcase(name) = "VALID_TO_DTTM") then'; put 'call symputx("valid_to_dttm_flg", "Y", "L");'; put 'call symputx(cats("attrib_stmt_", put(_N_, 8.)), str1, "L");'; put 'call symputx(cats("input_stmt_", put(_N_, 8.))'; put ', ifc(upcase(name) not in'; put '(''PROCESSED_DTTM'',''VALID_FROM_DTTM'',''VALID_TO_DTTM''), str2, ""), "L");'; put 'run;'; put 'data _null_;'; put 'file &cards_file. &outencoding lrecl=32767 termstr=nl &append;'; put 'length __attrib $32767;'; put 'if _n_=1 then do;'; put 'put ''/**'';'; put 'put '' @file'';'; put 'put " @brief Datalines for %upcase(%scan(&base_ds,2)) dataset";'; put 'put " @details Generated by %nrstr(%%)mp_ds2cards()";'; put 'put " Source: https://github.com/sasjs/core";'; put 'put '' @cond '';'; put 'put ''**/'';'; put 'put "data &tgt_ds &indexes;";'; put 'put "attrib ";'; put '%do i = 1 %to &nvars;'; put '__attrib=symget("attrib_stmt_&i");'; put 'put __attrib;'; put '%end;'; put 'put ";";'; put '%if &process_dttm_flg. eq Y %then %do;'; put 'put ''retain PROCESSED_DTTM %sysfunc(datetime());'';'; put '%end;'; put '%if &valid_from_dttm_flg. eq Y %then %do;'; put 'put ''retain VALID_FROM_DTTM &low_date;'';'; put '%end;'; put '%if &valid_to_dttm_flg. eq Y %then %do;'; put 'put ''retain VALID_TO_DTTM &high_date;'';'; put '%end;'; put 'if __nobs=0 then do;'; put 'put ''call missing(of _all_);/* avoid uninitialised notes */'';'; put 'put ''stop;'';'; put 'put ''run;'';'; put 'end;'; put 'else do;'; put 'put "infile cards dsd;";'; put 'put "input ";'; put '%do i = 1 %to &nvars.;'; put '%if(%length(&&input_stmt_&i..)) %then'; put 'put " &&input_stmt_&i..";'; put ';'; put '%end;'; put 'put ";";'; put 'put ''missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;'';'; put 'put "datalines4;";'; put 'end;'; put 'end;'; put 'set &setds end=__lastobs nobs=__nobs;'; put '/* remove all formats for write purposes - some have long underlying decimals */'; put 'format _numeric_ best30.29;'; put 'length __dataline $32767;'; put '__dataline=catq(''cqtmb'',&datalines);'; put 'put __dataline;'; put 'if __lastobs then do;'; put 'put '';;;;'';'; put 'put ''run;'';'; put 'put ''/** @endcond **/'';'; put 'stop;'; put 'end;'; put 'run;'; put 'proc sql;'; put 'drop table &setds;'; put 'quit;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &cards_file lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: CARDS FILE SAVED IN:;'; put '%put NOTE-;%put NOTE-;'; put '%put NOTE- %sysfunc(dequote(&cards_file.));'; put '%put NOTE-;%put NOTE-;'; put '%mend mp_ds2cards;'; put '/** @endcond **/'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mfs_httpheader(header_name'; put ',header_value'; put ')/*/STORE SOURCE*/;'; put '%global sasjs_stpsrv_header_loc;'; put '%local fref fid i;'; put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;'; put '%put &=fref &=sasjs_stpsrv_header_loc;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%mend mfs_httpheader;'; put '%macro mp_streamfile('; put 'contenttype=TEXT'; put ',inloc='; put ',inref=0'; put ',iftrue=%str(1=1)'; put ',outname='; put ',outref=_webout'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let contentype=%upcase(&contenttype);'; put '%let outref=%upcase(&outref);'; put '%local platform; %let platform=%mf_getplatform();'; put '/**'; put '* check engine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put '%local streamweb;'; put '%let streamweb=0;'; put 'data _null_;'; put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));'; put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');'; put 'run;'; put '%if &contentype=CSV %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/csv'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/csv'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/csv)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=EXCEL %then %do;'; put '/* suitable for XLS format */'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype=''application/vnd.ms-excel'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="image/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"'; put 'contenttype="text/%lowcase(&contenttype)"'; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=TEXT %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/text'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/text'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/text)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="font/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=XLSX %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'','; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype='; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type'; put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; put ')'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=ZIP %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/zip'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip'''; put 'contenttype=''application/zip'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/zip)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;'; put '%end;'; put '%if &inref ne 0 %then %do;'; put '%mp_binarycopy(inref=&inref,outref=&outref)'; put '%end;'; put '%else %do;'; put '%mp_binarycopy(inloc="&inloc",outref=&outref)'; put '%end;'; put '%mend mp_streamfile;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Downloads data in a variety of formats'; put '@details To enable direct download, this service runs in a dedicated stream'; put 'as a GET request using URL parameters as inputs.'; put 'The inputs are:'; put '@li table - the libds of the table to be downloaded'; put '@li type - either SAS, CSV, EXCEL, MARKDOWN, WEBCSV or WEBTAB'; put '@li filter - the filter RK if used'; put '

SAS Macros

'; put '@li mf_verifymacvars.sas'; put '@li mf_getuser.sas'; put '@li mf_existfeature.sas'; put '@li dc_assignlib.sas'; put '@li mp_ds2cards.sas'; put '@li mp_abort.sas'; put '@li mp_binarycopy.sas'; put '@li mp_cntlout.sas'; put '@li mp_streamfile.sas'; put '@li mpe_filtermaster.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%global table type filter ds format is_fmt txfrom txto;'; put '%mpeinit()'; put '%let user=%mf_getuser();'; put '%let is_fmt=0;'; put '%mp_abort(iftrue= (%mf_verifymacvars(type table)=0)'; put ',mac=&_program..sas'; put ',msg=%str(Invalid inputs: type table)'; put ')'; put '%let libds=%upcase(&table); /* actual source */'; put '%let table=%upcase(&table); /* used as label for fmt catalogs */'; put '%let lib=%scan(&table,1,.);'; put '%let ds=%scan(&table,2,.);'; put '%dc_assignlib(READ,&lib)'; put 'data _null_;'; put 'set &mpelib..MPE_TABLES;'; put 'where upcase(libref)="&lib" and upcase(dsn)="&ds";'; put '/* if a TXTEMPORAL table then filter as such */'; put 'call symputx(''txfrom'',var_txfrom);'; put 'call symputx(''txto'',var_txto);'; put 'run;'; put '/* if a format, extract relevant info */'; put 'data _null_;'; put 'ds=symget(''ds'');'; put 'is_fmt=0;'; put 'if subpad(cats(reverse(ds)),1,3)=:''CF-'' then do;'; put 'ds=scan(ds,1,''-'');'; put 'table=cats("&lib..",ds);'; put 'putlog "Format Catalog Captured";'; put 'is_fmt=1;'; put 'call symputx(''libds'',''work.fmtextract'');'; put 'call symputx(''table'',table);'; put 'end;'; put 'call symputx(''is_fmt'',is_fmt);'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_cntlout('; put 'iftrue=(&is_fmt=1)'; put ',libcat=&table'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '%put preparing query;'; put '%mpe_filtermaster(DLOAD,&libds,'; put 'dclib=&mpelib,'; put 'filter_rk=&filter,'; put 'outref=filtref,'; put 'outds=work.query'; put ')'; put '%put printing generated filterquery:;'; put 'data _null_;'; put 'infile filtref;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put 'options obs=200000;/* stop limit */'; put 'data staged(drop=&txfrom &txto);'; put 'set &libds;'; put 'where %inc filtref;;'; put 'run;'; put 'options obs=max;'; put 'options validvarname=upcase;'; put '%macro mpestp_getrawdata();'; put '%local outfile;'; put '%if &type=SAS %then %do;'; put '%let outfile=%sysfunc(pathname(work))/&table..sas;'; put '%mp_ds2cards(base_ds=staged'; put ', tgt_ds=&table'; put ', cards_file= "&outfile"'; put ', maxobs=100000)'; put '%let ext=sas;'; put '%let mimetype=text;'; put '%end;'; put '%else %if &type=CSV or (&type=EXCEL and %mf_existfeature(EXPORTXLS) ne 1)'; put '/* cannot proc export excel if PC Files is not licensed */'; put '%then %do;'; put '%let outfile=%sysfunc(pathname(work))/&table..csv;'; put 'PROC EXPORT DATA= staged'; put 'OUTFILE= "&outfile"'; put 'DBMS=csv REPLACE;'; put 'RUN;'; put '%let ext=csv;'; put '%let mimetype=csv;'; put '%end;'; put '%else %if &type=EXCEL %then %do;'; put '%let ext=xlsx;'; put '%let outfile=%sysfunc(pathname(work))/&table..&ext;'; put 'PROC EXPORT DATA= staged'; put 'OUTFILE= "&outfile"'; put 'DBMS=xlsx ;'; put 'RUN;'; put '%let mimetype=XLSX;'; put '%end;'; put '%else %if &type=MARKDOWN %then %do;'; put '%let ext=md;'; put '%let outfile=%sysfunc(pathname(work))/&table..&ext;'; put 'filename mdref "&outfile" lrecl=32767;'; put '%mp_ds2md(staged,outref=mdref,showlog=NO)'; put '%let mimetype=MARKDOWN;'; put '%end;'; put '%else %if &type=WEBCSV %then %do;'; put 'PROC EXPORT DATA= staged'; put 'OUTFILE= _webout'; put 'DBMS=csv REPLACE;'; put 'RUN;'; put '/* don''t set headers */'; put '%return;'; put '%end;'; put '%else %if &type=WEBTAB %then %do;'; put 'PROC EXPORT DATA= staged'; put 'OUTFILE= _webout'; put 'DBMS=tab REPLACE;'; put 'RUN;'; put '/* don''t set headers */'; put '%return;'; put '%end;'; put '%else %do;'; put '%mp_abort(msg=type &type not supported,mac=mpestp_getrawdata.sas);'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%mp_streamfile(contenttype=&mimetype'; put ',inloc=%str(&outfile)'; put ',outname=&table..&ext'; put ')'; put '%mend mpestp_getrawdata;'; put '%mpestp_getrawdata()'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getversion; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mpe_getvars(injs,outds);'; put '/* load parameters */'; put 'data _null_;'; put '__dummychar='''';__dummynum=0;'; put 'set &outds;'; put 'array __charvals _character_;'; put 'do over __charvals;'; put 'call symputx(vname(__charvals),__charvals,''g'');'; put 'end;'; put 'array __numvals _numeric_;'; put 'do over __numvals;'; put 'call symputx(vname(__numvals),__numvals,''g'');'; put 'end;'; put 'run;'; put '%mend mpe_getvars;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getversion.sas'; put '@brief get a specific (previous) version of a particular table'; put '@details Used to fetch a version of a table as at a previous point in time'; put 'Delivered as part of this issue: https://git.datacontroller.io/dc/dc/issues/84'; put '

Service Inputs

'; put '
getversion_input
'; put '|LIBREF:$char8.|DS:$char32.|TS: 8.|'; put '|---|---|---|'; put '|SOMELIB|SOMEDS|1341344.804|'; put '

Service Outputs

'; put '
work.getversion_output
'; put 'The data for a particular version'; put '

SAS Macros

'; put '@li mf_getuser.sas'; put '@li mpeinit.sas'; put '@li mpe_getvars.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '**/'; put '%mpeinit()'; put '%global LIBREF DS;'; put '/* load parameters */'; put '%mpe_getvars(getversion_input, getversion_input)'; put '%mp_abort(iftrue= (&syscc ne 0 )'; put ',mac=&_program'; put ',msg=%str(Issue on startup)'; put ')'; put '/* todo */'; put '%webout(OPEN)'; put '%webout(OBJ,getversion_output)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=refreshlibinfo; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '/** @cond */'; put '%macro mf_existvar(libds /* 2 part dataset name */'; put ', var /* variable name */'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid=0 %then %do;'; put '%put %sysfunc(sysmsg());'; put '0'; put '%end;'; put '%else %if %length(&var)=0 %then %do;'; put '0'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%sysfunc(varnum(&dsid,&var))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_existvar;'; put '/** @endcond */'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro bitemporal_closeouts('; put 'tech_from=tx_from_dttm'; put ',tech_to = tx_to_dttm /* Technical TO datetime variable.'; put 'Req''d on BASE table only. */'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE /* Name of STAGING table. */'; put ',PK= name sex /* Business key, space separated. */'; put '/* Should INCLUDE BUS_FROM field if relevant. */'; put ',NOW=DEFINE'; put ',FILTER= /* supply a filter to limit the update */'; put ',outdest= /* supply an unquoted filepath/filename.ext to get'; put 'a text file containing the update statements */'; put ',loadtype='; put ',loadtarget=YES /* if <> YES will return without changing anything */'; put ');'; put '%put ENTERING &sysmacroname;'; put '%local x var start;'; put '%let start=%sysfunc(datetime());'; put '%dc_assignlib(WRITE,&base_lib)'; put '%dc_assignlib(WRITE,&append_lib)'; put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;'; put '%put &=now;'; put '/**'; put '* perform basic checks'; put '*/'; put '/* do tables exist? */'; put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;'; put '%mp_abort(msg=&base_lib..&base_dsn does not exist)'; put '%end;'; put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;'; put '%mp_abort(msg=&append_lib..&append_dsn does not exist)'; put '%end;'; put '/* do TX columns exist? */'; put '%if &loadtype ne UPDATE %then %do;'; put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;'; put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;'; put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%end;'; put '/* do PK columns exist? */'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)'; put '%end;'; put '%end;'; put '/* check uniqueness */'; put 'proc sort data=&append_lib..&append_dsn'; put 'out=___closeout1 noduprecs dupout=___closeout1a;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then'; put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);'; put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */'; put '%local gap;'; put '%let gap=0;'; put 'data _null_;'; put 'now=&now;'; put 'gap=intck(''HOURS'',now,datetime());'; put 'call symputx(''gap'',gap,''l'');'; put 'run;'; put '%mf_abort('; put 'iftrue=(&gap > 24),'; put 'msg=NOW variable (&now) is not within a 24hr tolerance'; put ')'; put '/* have any warnings / errs occurred thus far? If so, abort */'; put '%mf_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/**'; put '* Create closeout statements. These are sent as individual SQL statements'; put '* to ensure pass-through utilisation. The update_cnt variable monitors'; put '* how many records were actually updated on the target table.'; put '*/'; put '%local update_cnt;'; put '%let update_cnt=0;'; put 'filename tmp temp;'; put 'data _null_;'; put 'set ___closeout1;'; put 'file tmp;'; put 'if _n_=1 then put ''proc sql noprint;'' ;'; put 'length string $32767.;'; put '%if &loadtype=UPDATE %then %do;'; put 'put "delete from &base_lib..&base_dsn where 1";'; put '%end;'; put '%else %do;'; put 'now=symget(''now'');'; put 'put "update &base_lib..&base_dsn set &tech_to= " now @;'; put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;'; put 'put " ,PROCESSED_DTTM=" now @;'; put '%end;'; put 'put " where " now " lt &tech_to ";'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;'; put '/* use single quotes to avoid ampersand resolution in data */'; put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";'; put '%end;'; put '%else %do;'; put 'string=cats(" & &var=",&var);'; put '%end;'; put 'put string;'; put '%end;'; put 'put "&filter ;";'; put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';'; put 'run;'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%if &loadtarget ne YES %then %return;'; put '/* ensure we have a lock */'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn'; put ',ref=bitemporal_closeouts'; put ',ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'options source2;'; put '%inc tmp;'; put 'filename tmp clear;'; put '/**'; put '* Update audit tracker'; put '*/'; put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);'; put '%local user; %let user=%mf_getuser();'; put 'proc sql;'; put 'insert into &mpelib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"'; put ',LOADTYPE="CLOSEOUT"'; put ',DELETED_RECORDS=&update_cnt'; put ',NEW_RECORDS=0'; put ',DURATION=%sysfunc(datetime())-&start'; put ',USER_NM="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%mend bitemporal_closeouts;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=''Schema/Owner'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '/** @cond */'; put '%macro mp_storediffs(libds'; put ',origds'; put ',key'; put ',delds=0'; put ',appds=0'; put ',modds=0'; put ',outds=work.mp_storediffs'; put ',loadref=0'; put ',processed_dttm=0'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));'; put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));'; put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));'; put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));'; put '%let dslist=&origds;'; put '%if &delds ne 0 %then %do;'; put '%let delds=%upcase(&delds);'; put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;'; put '%let dslist=&dslist &delds;'; put '%end;'; put '%if &appds ne 0 %then %do;'; put '%let appds=%upcase(&appds);'; put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;'; put '%let dslist=&dslist &appds;'; put '%end;'; put '%if &modds ne 0 %then %do;'; put '%let modds=%upcase(&modds);'; put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;'; put '%let dslist=&dslist &modds;'; put '%end;'; put '%let origds=%upcase(&origds);'; put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;'; put '%let key=%upcase(&key);'; put '/* hash the key and append all the tables (marking the source) */'; put 'data &ds1;'; put 'set &dslist indsname=&inds_auto;'; put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);'; put '&inds_keep=upcase(&inds_auto);'; put 'proc sort;'; put 'by &inds_keep &hashkey;'; put 'run;'; put '/* transpose numeric & char vars */'; put 'proc transpose data=&ds1'; put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));'; put 'by &inds_keep &hashkey;'; put 'var _numeric_;'; put 'run;'; put 'proc transpose data=&ds1'; put 'out=&ds3('; put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)'; put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))'; put ');'; put 'by &inds_keep &hashkey;'; put 'var _character_;'; put 'run;'; put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;'; put '/* this is a format catalog - cannot query cols directly */'; put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"'; put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"'; put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";'; put '%end;'; put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);'; put 'data &ds4;'; put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;'; put 'if _n_=1 then call missing(_label_);'; put 'drop _label_;'; put 'set &ds2 &ds3 indsname=&inds_auto;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%upcase(&vlist));'; put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';'; put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;'; put 'call symputx(''syscc'',98);'; put 'end;'; put 'if &inds_keep="&appds" then move_type=''A'';'; put 'else if &inds_keep="&delds" then move_type=''D'';'; put 'else if &inds_keep="&modds" then move_type=''M'';'; put 'else if &inds_keep="&origds" then move_type=''O'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;'; put 'call symputx(''syscc'',99);'; put 'end;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;'; put 'else is_pk=0;'; put 'drop &inds_keep;'; put 'run;'; put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());'; put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);'; put '%let libds=%upcase(&libds);'; put '/* join orig vals for modified & deleted */'; put 'proc sql;'; put 'create table &outds as'; put 'select "&loadref" as load_ref length=36'; put ',&processed_dttm as processed_dttm format=E8601DT26.6'; put ',"%scan(&libds,1,.)" as libref length=8'; put ',"%scan(&libds,2,.)" as dsn length=32'; put ',b.key_hash length=32'; put ',b.move_type length=1'; put ',b.tgtvar_nm length=32'; put ',b.is_pk'; put ',case when b.move_type ne ''M'' then -1'; put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0'; put 'else 1'; put 'end as is_diff'; put ',b.tgtvar_type length=1'; put ',case when b.move_type=''D'' then b.newval_num'; put 'else a.newval_num'; put 'end as oldval_num format=best32.'; put ',case when b.move_type=''D'' then .'; put 'else b.newval_num'; put 'end as newval_num format=best32.'; put ',case when b.move_type=''D'' then b.newval_char'; put 'else a.newval_char'; put 'end as oldval_char length=32765'; put ',case when b.move_type=''D'' then '''''; put 'else b.newval_char'; put 'end as newval_char length=32765'; put 'from &ds4(where=(move_type=''O'')) as a'; put 'right join &ds4(where=(move_type ne ''O'')) as b'; put 'on a.tgtvar_nm=b.tgtvar_nm'; put 'and a.key_hash=b.key_hash'; put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4;'; put '%end;'; put '%mend mp_storediffs;'; put '/** @endcond */'; put '%macro bitemporal_dataloader('; put 'bus_from= /* Business FROM datetime variable. Req''d on'; put 'STAGING & BASE tables.*/'; put ',bus_to = /* Business TO datetime variable. Req''d on'; put 'STAGING & BASE tables. */'; put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/'; put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */'; put ',tech_from= /* Technical FROM datetime variable. Req''d on'; put 'BASE table only. */'; put ',tech_to = /* Technical TO datetime variable. Req''d on BASE'; put 'table only. */'; put ',processed= 0'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE'; put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */'; put ',PK= name sex'; put ',RK_UNDERLYING='; put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */'; put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular'; put 'SCD2 loader then set this switch to YES to'; put 'ensure the MAXKEYTABLE is updated with the'; put 'current maximum RK value for the target table'; put '*/'; put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is'; put 'unique on its business key */'; put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in'; put '&dclib..DATALOADS */'; put ',LOADTYPE=BITEMPORAL'; put ',RK_MAXKEYTABLE= mpe_maxkeyvalues'; put ',LOG=1 /* Switch to 0 to prevent records being added to'; put '&mpelib..mpe_DATALOADS (ie when testing)*/'; put ',DELETE_COL= _____DELETE__THIS__RECORD_____'; put '/* If this variable is found in the append dataset'; put 'then records are closed out (or deleted) in the'; put 'append table where that variable= "Yes" */'; put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off'; put 'target table load and generate temp tables only */'; put ',CLOSE_VARS='; put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is'; put 'no facility to close out removed records (all records are'; put 'assumed new or changed). But how does one determine which'; put 'records are removed? Short of loading the entire table'; put 'each time? This parameter allows a set of variables'; put '(this should be a subset of the PK) to be declared, and'; put 'the macro will determine which records in the base table'; put 'need to be closed out ahead of the load.'; put 'For instance, given the following:'; put 'Base Table Staging Table'; put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT'; put 'JAN ACME4 66 JAN ACME4 66'; put 'FEB ACME4 99 FEB ACME4 99'; put 'FEB ACME1 22'; put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,'; put 'the "FEB PAG 22" record would get closed out.'; put '*/'; put ',config_table=&dclib..MPE_CONFIG'; put ',dclib=&dc_libref'; put ',outds_del=work.outds_del'; put ',outds_add=work.outds_add'; put ',outds_mod=work.outds_mod'; put ',outds_audit=0'; put ');'; put '/* when changing this macro, update the version num here */'; put '%local ver;'; put '%let ver=32;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */'; put '/* return straight away if nothing to load */'; put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);'; put '%if &nobs=-1 %then %do;'; put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;'; put '%end;'; put '%if &nobs=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/* hard exit if err condition exists */'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)'; put ')'; put '%local engine_type;'; put '%let engine_type=%mf_getengine(&base_lib);'; put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0'; put '%then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/**'; put '* The metadata functions (eg mf_existvar) will fail if the base table has a'; put '* SAS lock. So, make a snapshot of the base table for further use.'; put '* Also, make output tables (regardless).'; put '*/'; put '%local basecopy;'; put '%let basecopy=%mf_getuniquename(prefix=basecopy);'; put 'data &basecopy &outds_mod &outds_add &outds_del;'; put 'set &base_lib..&base_dsn;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)'; put ')'; put '%local cols idx_pk md5_col ;'; put '%let md5_col=___TMP___md5;'; put '%let check_uniqueness=%upcase(&check_uniqueness);'; put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);'; put '%let high_date=%unquote(&high_date);'; put '%let loadtype=%upcase(&loadtype);'; put '/* ensure irrelevant variables are cleared */'; put '%if &loadtype=BUSTEMPORAL %then %do;'; put '%let tech_from=;'; put '%let tech_to=;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put '%let bus_from=;'; put '%let bus_to=;'; put '%end;'; put '/* ensure relevant variables are supplied */'; put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing BUS_FROM / BUS_TO)'; put ')'; put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing TECH_FROM / TECH_TO)'; put ')'; put '/**'; put '* drop any tables (may be defined as views or vice versa preventing overwrite)'; put '*/'; put '%mp_dropmembers(append bitemp0_append bitemp_cols)'; put '/* SQL Server requires its own time values */'; put '/* 9.2 will only give picture format down to seconds. 9.3 allows'; put 'milliseconds by using lower S and defining the decimal in the format name..*/'; put 'PROC FORMAT;'; put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put '%local dbnow;'; put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'data _null_;'; put '/* convert space separated macvar to comma separated for SQL processing */'; put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');'; put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');'; put 'now=&dbnow;'; put 'call symputx(''NOW'',now,''L'');'; put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');'; put 'length etlsource $100;'; put 'etlsource=subpad(symget(''etlsource''),1,100);'; put 'call symputx(''etlsource'',etlsource,''l'');'; put 'run;'; put '/**'; put '* Even if no PROCESSED var provided, assume that any variable named'; put '* PROCESSED_DTTM should be updated'; put '*/'; put '%if &processed=0 %then %do;'; put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)'; put '%then %let processed=PROCESSED_DTTM;'; put '%else %let processed=;'; put '%end;'; put '/* extract colnames for md5 creation / change tracking */'; put 'proc contents noprint data=&base_lib..&base_dsn'; put 'out=work.bitemp_cols (keep=name type length varnum format:);'; put 'run;'; put 'proc sql noprint;'; put 'select name into: cols separated by '','''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put 'else cats(''put(md5(trim(put(ifn(missing('''; put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end'; put 'into: stripcols separated by ''||'''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put '/* set default formats*/'; put '%let bus_from_fmt = datetime19.;'; put '%let bus_to_fmt = datetime19.;'; put '%let processed_fmt = datetime19.;'; put '%let tech_from_fmt = format=datetime19.;'; put '%let tech_to_fmt = format=datetime19.;'; put '%put &=stripcols;'; put '%put &=pk;'; put 'data _null_;'; put 'set work.bitemp_cols;'; put 'if type=2 or type=6 then do;'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'if format='''' then fmt=cats(length,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put 'if upcase(name)="%upcase(&bus_from)" then'; put 'call symputx(''bus_from_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&bus_to)" then'; put 'call symputx(''bus_to_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_from)" then'; put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_to)" then'; put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&processed)" then'; put 'call symputx(''processed_fmt'',fmt,''L'');'; put 'run;'; put '%if %index(%quote(&cols),___TMP___) %then %do;'; put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim('; put ') This may conflict with temp variable generation!!);'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);'; put '%let syscc=5;'; put '%return;'; put '%end;'; put '/* if transaction dates appear on the APPEND table, need to remove them */'; put '%local drop_tx_dates /* used in append table */'; put 'drop_tx_dates_noobs /* used to take the base table structure */;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)'; put '%then %let drop_tx_dates=&tech_from;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)'; put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;'; put '%if %length(%trim(&drop_tx_dates))>0'; put '%then %let drop_tx_dates=(drop=&drop_tx_dates);'; put '%if %mf_existvar(&basecopy, &tech_from)'; put '%then %let drop_tx_dates_noobs=&tech_from;'; put '%if %mf_existvar(&basecopy, &tech_to)'; put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;'; put '%if %length(%trim(&drop_tx_dates_noobs))>0'; put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);'; put '%else %let drop_tx_dates_noobs=(obs=0);'; put '/**'; put '* Lock the table. This is necessary as we are doing a two part update (first'; put '* closing records then appending new records). It is theoretically possible'; put '* that an upload may occur whilst preparing the staging tables. And the'; put '* staging tables are about to be prepared..'; put '*/'; put '%if &LOADTARGET = YES %then %do;'; put '%put locking &base_lib..&base_dsn;'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%put locking &outds_audit;'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put '/* not an actual load, so avoid updating the max key table in next step. */'; put '%let rk_update_maxkeytable=NO;'; put '%end;'; put '%if %length(&RK_UNDERLYING)>0 %then %do;'; put '%mp_retainedkey('; put 'base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=&append_lib'; put ',append_dsn=&append_dsn'; put ',retained_key=&pk'; put ',business_key=&rk_underlying'; put ',check_uniqueness=&CHECK_UNIQUENESS'; put ',outds=work.append'; put '%if &rk_update_maxkeytable=NO %then %do;'; put ',maxkeytable=0'; put '%end;'; put '%else %do;'; put ',maxkeytable=&dclib..&RK_MAXKEYTABLE'; put '%end;'; put ',locktable=&dclib..mpe_lockanytable'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',filter_str=%str( (where=( &now < &tech_to)) )'; put '%end;'; put ')'; put '%end;'; put '%else %do;'; put 'proc sql;'; put 'create view work.append as select * from &append_lib..&append_dsn;'; put '%end;'; put '/**'; put '* generate md5 for append table'; put '*/'; put '/* it is possible the source dataset has additional (unwanted) columns.'; put 'Drop if specified; */'; put '%if %length(&keepvars)>0 %then %do;'; put '/* remove tech dates from keepvars as they are generated later */'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));'; put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);'; put '%end;'; put '/* CAS varchar types cause append issues here, so perform autoconvert'; put 'by creating empty local table first */'; put 'data;'; put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;'; put 'run;'; put '%local emptybasetable; %let emptybasetable=&syslast;'; put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put '/* apply formats for bitemporal vars but not tx dates which are added later */'; put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;'; put 'format &bus_from &bus_from_fmt;'; put 'format &bus_to &bus_to_fmt;'; put '%end;'; put 'set &emptybasetable /* base table reqd in case append has fewer cols */'; put 'work.append &drop_tx_dates;'; put '%if %length(%str(&bus_from_override))>0 %then %do;'; put '&bus_from= %unquote(&bus_from_override) ;'; put '%end;'; put '%if %length(%str(&bus_to_override))>0 %then %do;'; put '&bus_to= %unquote(&bus_to_override) ;'; put '%end;'; put 'length &md5_col $32;'; put '&md5_col=put(md5(&stripcols),hex32.);'; put '%if %length(&processed)>0 %then %do;'; put 'format &processed &processed_fmt;'; put '&processed=&now;'; put '%end;'; put '/**'; put '* If a delete column exists then create the delete dataset'; put '*/'; put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;'; put 'drop &delete_col;'; put 'if upcase(&delete_col) = "YES" then output &outds_del ;'; put 'else output work.bitemp0_append ;'; put 'run;'; put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=%scan(&outds_del,-1,.)'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put 'output work.bitemp0_append;'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc gt 0 at line 494)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if %length(&close_vars)>0 %then %do;'; put '/**'; put '* need to close out records that are not provided'; put '*/'; put 'proc sql;'; put 'create table bitemp1_closevars1 as'; put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)'; put 'from &base_lib..&base_dsn a'; put 'inner join work.bitemp0_append b'; put 'on 1=1'; put '/* join on closevars key */'; put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));'; put '%let idx_val=%scan(&close_vars,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* filter base on tech dates if necessary */'; put '%if &loadtype=TXTEMPORAL %then %do;'; put 'where a.&tech_from <=&now and &now < a.&tech_to'; put '%end;'; put ';'; put 'create table bitemp1_closevars2 as'; put 'select distinct a.*'; put 'from bitemp1_closevars1 a'; put 'left join work.bitemp0_append b'; put 'on 1=1'; put '/* join on primary key */'; put '%do idx_pk=1 %to %sysfunc(countw(&pk));'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* identify removed records by null value in a field in PK but not close_vars'; put '*/'; put 'where b.%scan('; put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )'; put ') IS NULL'; put ';'; put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=bitemp1_closevars2'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '/* grab schema */'; put '%let baselib_schema=%mf_getschema(&base_lib);'; put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;'; put '/* grab redshift config */'; put '%local redcnt; %let redcnt=0;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'data _null_;'; put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));'; put 'x+1;'; put 'call symputx(cats(''rednm'',x),var_value,''l'');'; put 'call symputx(cats(''redval'',x),var_value,''l'');'; put 'call symputx(''redcnt'',x,''l'');'; put 'run;'; put '%end;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from &baselib_schema.&base_dsn'; put 'where timestamp &sqlnow < &tech_to );'; put '%else %let base_table=&baselib_schema.&base_dsn;'; put '/* make empty table first - must clone & drop extra cols as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &temp_table alter sortkey none) by myAlias;'; put '%end;'; put '%local dropcols;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(&pk)'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;'; put '%end;'; put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp0/view=work.vw_bitemp0;'; put 'set work.bitemp0_append(keep=&pk &md5_col);'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&temp_table'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=work.vw_bitemp0 force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);'; put 'data &temp_table;'; put 'set work.bitemp0_append;'; put 'run;'; put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);'; put 'proc fedsql sessref=dcsession;'; put 'create table &bitemp0base{options replace=true} as'; put '%end;'; put '%else %do;'; put '%let temp_table=work.bitemp0_append;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put 'proc sql;'; put 'create table work.bitemp0_base as'; put '%end;'; put 'select a.&md5_col /* this identifies NEW records */'; put ', b.*'; put '/* assume first PK field cannot be null (if defined in a PK constraint then'; put 'it definitely cannot be null) */'; put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG'; put 'from &baselib_schema.&temp_table a'; put 'left join &base_table b'; put 'on 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put '); proc sql; drop table &base_lib.."&temp_table"n;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put ';'; put 'quit;'; put 'data work.bitemp0_base;'; put 'set &bitemp0base;'; put 'run;'; put 'proc sql;'; put 'drop table &temp_table;'; put 'drop table &bitemp0base;'; put '%end;'; put '%else %do;'; put ';'; put '%end;'; put '/**'; put '* matching & changed records are those without NULL key values'; put '* &idx_val resolves to rightmost PK value (loop above)'; put '*/'; put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;'; put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)'; put ')'; put '%put hashcols2=&stripcols;'; put 'proc sql;'; put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as'; put 'select *'; put ', put(md5(&stripcols),$hex32.) as &md5_col'; put 'from work.bitemp0_base (drop=&md5_col)'; put 'where ___TMP___NEW_FLG=0;'; put '/**'; put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base'; put '*/'; put 'proc sql;'; put 'create table &outds_add'; put '(drop=&md5_col'; put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;'; put '&delete_col'; put '%end;'; put ')'; put 'as select a.*'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',&now as &tech_from &tech_from_fmt'; put ',&high_date as &tech_to &tech_to_fmt'; put '%end;'; put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */'; put ', work.bitemp0_base b /* BASE records (contains null values for new) */'; put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */'; put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */'; put '/**'; put '* identify INSERTS. These are records with the same business key but'; put '* the bus_from and bus_to value are higher / lower (respectively)'; put '* such that the existing record needs to be SPLIT to surround the new'; put '* record.'; put '* eg: OLD RECORD from=1 to=10'; put '* NEW RECORD from=5 to=7'; put '*'; put '* APPENDED RECORDS:'; put '* - from=1 to=5'; put '* - from=5 to=7'; put '* - from=7 to=10'; put '*/'; put '/* inserts cannot happen with TXTEMPORAL */'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* IDENTIFY */'; put 'create table work.bitemp3_inserts as'; put 'select b.*'; put ',a.&bus_from as ___TMP___from'; put ',a.&bus_to as ___TMP___to'; put 'from work.bitemp0_append a'; put ',work.bitemp1_current b'; put 'where a.&bus_from > b.&bus_from'; put 'and a.&bus_to < b.&bus_to'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields may'; put 'not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '/* SPLIT */'; put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;'; put 'set work.bitemp3_inserts;'; put 'by &pk &bus_from &bus_to &processed;'; put 'if first.&idx_val then do;'; put '___TMP___retain=&bus_to;'; put '&bus_to=___TMP___from;'; put 'output;'; put '&bus_to=___TMP___retain;'; put 'end;'; put 'if last.&idx_val then do;'; put '&bus_from=___TMP___to;'; put 'output;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* TX temporal load */'; put 'data work.bitemp3a_inserts;'; put 'set work.bitemp1_current;'; put 'stop;'; put 'run;'; put '%end;'; put '/* APPEND */'; put 'proc sql;'; put 'create view work.bitemp3a_view as'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put 'data bitemp3b_newbase;'; put 'set work.bitemp3a_inserts work.bitemp3a_view;'; put 'run;'; put '/** do not use! this converts short numerics into 8 bytes'; put 'proc sql;'; put 'create table work.bitemp3b_newbase as'; put 'select * from work.bitemp3a_inserts'; put 'union corr'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put '*/'; put '/**'; put '* identify CHANGED records from staging.'; put '* Same business key with different temporal dates or md5 value'; put '* This table must be overlayed onto / into existing business history'; put '*/'; put 'proc sql;'; put 'create table work.bitemp4_updated as select distinct a.*'; put 'from work.bitemp0_append a'; put ',work.bitemp3b_newbase b'; put 'where 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'and ( a.&md5_col ne b.&md5_col'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)'; put '%end;'; put ')'; put ';'; put '/**'; put '* This section would have been one simple step with union all'; put '* but that converts short numerics into 8 bytes!'; put '* so, convoluted alternative to retain the same functionality.'; put '*/'; put '/* base records */'; put 'create view work.bitemp4_prep1 as'; put 'select ''BASE'' as ___TMP___'; put ',b.*'; put 'from work.bitemp4_updated a'; put ',work.bitemp3b_newbase b'; put 'where 1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put ';'; put '/* updated records */'; put 'create view work.bitemp4_prep2 as'; put 'select ''STAG'' as ___TMP___ ,*'; put 'from work.bitemp4_updated;'; put '/* ensure we only keep columns that appear in both */'; put '%local bp1 bp2 bp3 bp4;'; put '%let bp1=%mf_getvarlist(bitemp4_prep1);'; put '%let bp2=%mf_getvarlist(bitemp4_prep2);'; put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);'; put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);'; put 'data work.bitemp4_prep3/view=bitemp4_prep3;'; put 'set bitemp4_prep1 bitemp4_prep2;'; put '%if %length(XX&bp3&bp4)>2 %then %do;'; put 'drop &bp3 &bp4 ;'; put '%end;'; put 'run;'; put '/* remove duplicates */'; put 'proc sql;'; put 'create table work.bitemp4a_allrecs as'; put 'select distinct *'; put 'from work.bitemp4_prep3'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields'; put 'may not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* this section aligns the business dates'; put '(eg for inserts or overlaps in the range) */'; put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );'; put 'set work.bitemp4a_allrecs;'; put 'by &pk &bus_from &bus_to &processed;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '___TMP___md5lag=lag(&md5_col);'; put '/* reset retained variables */'; put 'if first.&idx_val then do;'; put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/'; put 'if &md5_col=___TMP___md5lag then do;'; put '&bus_from=___TMP___from;'; put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;'; put 'end;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 1'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 1'' then do;'; put '/* else ensure bus_from starts from prior record bus_to */'; put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to'; put 'then &bus_from= ___TMP___to;'; put '/* new record may replace old record entirely */'; put 'if &bus_to <= &bus_from then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* keep staged records only */'; put 'data work.bitemp4b_firstpass;'; put 'set work.bitemp4a_allrecs;'; put 'if ___TMP___=''STAG'';'; put 'run;'; put '%end;'; put '/* next phase is to pass through in reverse - so set up the sort statement */'; put '%local byvar;'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let byvar=&byvar descending %scan(&pk,&idx_pk);'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL'; put '%then %let byvar=&byvar descending &bus_from descending &bus_to;'; put '/* if matching bus dates supplied, need to ensure we also have a sort'; put 'between BASE and STAGING tables */'; put '%let byvar=&byvar descending ___TMP___;'; put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;'; put 'by &byvar;'; put 'run;'; put '/**'; put '* Now (in reverse) pass back business start dates'; put '*/'; put 'data work.bitemp4d_secondpass;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '&tech_from=&now;'; put '&tech_to=&high_date;'; put '%end;'; put 'set work.bitemp4c_sort ;'; put 'by &byvar;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* put / _all_ /;*/'; put '___TMP___md5lag=lag(&md5_col);'; put 'if first.&idx_val then do;'; put '/* reset retained variables */'; put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry back bus_to */'; put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 2'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 2'' then do;'; put '/* else ensure bus_to stops at subsequent record bus_from */'; put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from'; put 'then &bus_to= ___TMP___from;'; put '/* new record may replace old record entirely */'; put 'if &bus_from >= &bus_to then delete;'; put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put '%end;'; put 'run;'; put '%put syscc (line600)=&syscc;'; put '/**'; put 'There may still be some records (eg old business history) which have not'; put 'changed.'; put 'Need to identify these and remove from the append so they are not updated'; put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the'; put 'business key) and any matching / identical records are split out (from those'; put 'that need to be updated).'; put '*/'; put '%if &loadtype=BITEMPORAL %then %do;'; put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);'; put 'data work.bitemp5a_lkp (keep=&md5_col)'; put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'set work.bitemp0_base;'; put '/* for BITEMPORAL we need to compare business dates also */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);'; put 'run;'; put 'data bitemp5b_updates;'; put 'set bitemp4d_secondpass;'; put 'if _n_=1 then do;'; put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');'; put 'md5_lkp.definekey("&md5_col");'; put 'md5_lkp.definedone();'; put 'end;'; put '/* drop old md5 col as will rebuild with new business dates */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;'; put 'if md5_lkp.check()=0 then delete;'; put 'run;'; put 'proc sql;'; put '/* get min bus from as will update (close out) all records from this point'; put '(for that PK)*/'; put 'create table work.bitemp5d_subquery as'; put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to'; put 'from work.bitemp5b_updates'; put 'group by &pk_comma;'; put '/* index has a huge efficiency impact on upcoming nested subquery */'; put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);'; put '%let lastds=work.bitemp5b_updates;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put 'proc sql;'; put 'create table work.bitemp5d_subquery as'; put 'select distinct &pk_comma'; put 'from bitemp4d_secondpass;'; put '%let lastds=work.bitemp4d_secondpass;'; put '%end;'; put '%else %let lastds=work.bitemp4d_secondpass;'; put '/* create single append table (an overlapped pre-sert may be classed as'; put 'both an update AND a new record). Also create temp views that may be'; put 'used for pre-load analysis. */'; put 'data &outds_mod;'; put 'set &lastds(drop=___TMP___: &md5_col);'; put 'run;'; put 'data bitemp6_allrecs / view=bitemp6_allrecs;'; put 'set &outds_mod /* UPDATED records */'; put '&outds_add /* NEW records */;'; put 'run;'; put 'proc sort data=work.bitemp6_allrecs'; put 'out=work.bitemp6_unique'; put 'noduprec'; put 'dupout=work.xx_BADBADBAD;'; put 'by _all_;'; put 'run;'; put '/* we have all our temp tables now so exit if this is all that is needed */'; put '%if &LOADTARGET ne YES %then %return;'; put '/* also exit if an err condition exists */'; put '%if &syscc>0 %then %do;'; put '%put syscc=&syscc;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)'; put ')'; put '/* final check - abort if a lock has appeared on the target or audit table */'; put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)'; put '%if %mf_existds(&outds_audit) %then %do;'; put '%mp_lockfilecheck(libds=&outds_audit)'; put '%end;'; put '/**'; put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!'; put '*/'; put '/**'; put '* First, CLOSE OUT changed records (if not a REPLACE)'; put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.'; put '* However - this can be worked around using a nested subquery..'; put '*/'; put 'data _null_;'; put 'putlog "&sysmacroname: CLOSEOUTS commencing";'; put 'run;'; put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: No closeouts needed";'; put 'run;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(&loadtype not yet supported in CAS engine)'; put ')'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds;'; put 'set work.bitemp5d_subquery;'; put 'run;'; put '/* delete the records */'; put 'proc cas ;'; put 'table.deleteRows / table={'; put 'caslib="&base_lib",'; put 'name="&base_dsn",'; put 'where="1=1",'; put 'whereTable={caslib=''CASUSER'',name="&delds"}'; put '};'; put 'quit;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&delds;'; put '%end;'; put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)'; put '%then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";'; put 'run;'; put '%local flexinow;'; put 'proc sql;'; put '/* if OLEDB then create a temp table for efficiency */'; put '%local innertable;'; put '%if &engine_type=OLEDB %then %do;'; put '%let innertable=[&temp_table];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp5d_subquery;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);'; put '%let top_table=&baselib_schema.&base_dsn;'; put '%let flexinow=timestamp &SQLNOW;'; put '/* make empty table first - must clone & drop extra cols'; put 'as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;'; put '%end;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;'; put 'set work.bitemp5d_subquery;'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&innertable ('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put 'data=work.vw_bitemp5d force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %do;'; put '%let innertable=bitemp5d_subquery;'; put '%let top_table=&base_lib..&base_dsn;'; put '%let flexinow=&now;'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put 'update &top_table set &tech_to=&flexinow'; put '%if %length(&processed)>0 %then %do;'; put ',&processed=&flexinow'; put '%end;'; put 'where &tech_from <= &flexinow and &flexinow < &tech_to and'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '/* changed records are deleted then re-appended when doing UPDATEs */'; put 'delete from &top_table where'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;'; put '%let syscc=5;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%goto end_of_macro;'; put '%end;'; put '/* perform join inside query as per'; put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */'; put 'exists( select 1 from &baselib_schema.&innertable where'; put '/* loop PK join */'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put '&base_dsn..&idx_val=&innertable..&idx_val and'; put '%end;'; put '%if &loadtype=BITEMPORAL %then %do;'; put '&base_dsn..&bus_from >= &innertable..&bus_from'; put 'and &base_dsn..&bus_to <= &innertable..&bus_to and'; put '%end;'; put '/* close the statement */'; put '1=1);'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put ') by myAlias;'; put 'execute (drop table &baselib_schema.&innertable) by myAlias;'; put '%end;'; put '%end;'; put 'quit;'; put 'data _null_;'; put 'putlog "&sysmacroname: Closeout complete";'; put 'run;'; put '/**'; put '* Append the new / updated records'; put '*/'; put '%if &engine_type=CAS %then %do;'; put '/* get varchar variables ready for casting */'; put '%local vcfmt vcrename vcassign vcdrop;'; put 'data _null_;'; put 'set work.bitemp_cols(where=(type=6)) end=last;'; put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;'; put 'retain vcrename vcassign vcdrop vcfmt;'; put 'if _n_=1 then vcrename=''(rename=('';'; put 'rancol=resolve(''%mf_getuniquename()'');'; put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';'; put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);'; put 'vcassign=cats(vcassign,name,''='',rancol,'';'');'; put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');'; put 'if last then do;'; put 'vcrename=cats(vcrename,''))'');'; put 'call symputx(''vcfmt'',vcfmt);'; put 'call symputx(''vcrename'',vcrename);'; put 'call symputx(''vcassign'',vcassign);'; put 'call symputx(''vcdrop'',vcdrop);'; put 'end;'; put 'run;'; put '/* prepare a temp cas table with varchars casted */'; put '%let tmp=%mf_getuniquename();'; put 'data casuser.&tmp ;'; put '&vcfmt'; put 'set work.bitemp6_unique &vcrename;'; put '&vcassign'; put '&vcdrop'; put 'run;'; put '/* load the table with varchars applied*/'; put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;'; put 'set casuser.&tmp;'; put 'run;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&tmp;'; put '/* this code will not work as regular tables do not have varchars */'; put '/*'; put 'proc casutil;'; put 'load data=work.bitemp6_unique'; put 'outcaslib="&base_lib" casout="&base_dsn" append ;'; put 'quit;'; put '*/'; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put 'proc append base=&base_lib..&base_dsn'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=bitemp6_unique force nowarn;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;'; put '%end;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '/* final check on syscc */'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=&_program'; put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)'; put ')'; put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;'; put 'data work.vw_outds_orig /view=work.vw_outds_orig;'; put 'set work.bitemp0_base (drop=&md5_col);'; put 'where ___TMP___NEW_FLG=0;'; put 'drop ___TMP___NEW_FLG;'; put 'run;'; put '/* update the AUDIT table */'; put '%if %mf_existds(&outds_audit) %then %do;'; put 'options mprint;'; put '%mp_storediffs(&base_lib..&base_dsn'; put ',work.vw_outds_orig'; put ',&pk &bus_from'; put ',delds=&outds_del'; put ',modds=&outds_mod'; put ',appds=&outds_add'; put ',outds=work.mp_storediffs'; put ',processed_dttm=&now'; put ',loadref=%superq(etlsource)'; put ')'; put '/* exclude unchanged values in modified rows */'; put 'data work.mp_storediffs;'; put 'set work.mp_storediffs;'; put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;'; put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;'; put 'run;'; put 'proc append base=&outds_audit data=work.mp_storediffs;'; put 'run;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Problem in audit stage (&outds_audit))'; put ')'; put '%let user=%mf_getUser();'; put '/**'; put 'Notify as appropriate EMAILS DISABLED'; put '%sumo_alerts(ALERT_EVENT=UPDATE'; put ', ALERT_TARGET=&base_lib..&base_dsn'; put ', from_user= &user);'; put '*/'; put '/* monitor BiTemporal usage */'; put '%if &log=1 %then %do;'; put '%put syscc=&syscc;'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'insert into &dclib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&ETLSOURCE"'; put ',LOADTYPE="&loadtype"'; put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)'; put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)'; put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)'; put ',DURATION=&dur'; put ',MAC_VER="v&ver"'; put ',user_nm="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%put syscc=&syscc;'; put '%end;'; put '%end_of_macro:'; put '%mend bitemporal_dataloader;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getlibs;'; put '%macro mpe_refreshlibs(lib=0);'; put '%dc_getlibs(outds=work.mm_getLibs)'; put 'proc sort data=mm_getlibs;'; put 'by libraryref libraryname;'; put 'run;'; put 'data libs0;'; put 'set mm_getlibs;'; put 'by libraryref;'; put '%if &lib ne 0 %then %do;'; put 'where upcase(libraryref)="%upcase(&lib)";'; put '%end;'; put 'if "%mf_getplatform()"="SASMETA" then do;'; put '/* note - invalid libraries can result in exception errors. If this happens,'; put 'configure the dc_viewlib_check variable to NO in Data Controller Settings */'; put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));'; put 'drop rc;'; put 'if rc ne 0 then do;'; put 'putlog "NOTE: Library " libraryname " does not exist!!";'; put 'putlog (_all_) (=);'; put 'delete;'; put 'end;'; put 'end;'; put 'if not first.libraryref then delete;'; put 'run;'; put 'proc sql;'; put 'create table libs1 as'; put 'select distinct libname'; put ',engine'; put ',path'; put ',level'; put ',sysname'; put ',sysvalue'; put 'from dictionary.libnames'; put 'order by libname, level,engine,path;'; put 'data libs2;'; put 'set libs1;'; put 'length tran $1024;'; put 'if missing(sysname) then sysname=''Missing'';'; put 'select(sysname);'; put 'when(''Access Permission'') tran=''Permissions'';'; put 'when(''Owner Name'') tran=''Owner'';'; put 'when(''Schema/Owner'') tran=''schema'';'; put 'otherwise tran=sysname;'; put 'end;'; put 'run;'; put 'proc transpose data=libs2 out=libs3;'; put 'by libname level engine path;'; put 'var sysvalue;'; put 'id tran;'; put 'run;'; put 'data libs4(rename=(libname=libref));'; put 'length paths $8192 perms owners schemas $500 permissions owner schema $1024;'; put 'if _n_=1 then call missing (of _all_);'; put 'set libs3;'; put 'by libname;'; put 'if engine=''V9'' then engine=''BASE'';'; put 'if first.libname then do;'; put 'retain paths perms owners schemas;'; put 'paths=''(''!!quote(trim(path));'; put 'perms=permissions;'; put 'owners=owner;'; put 'schemas=schema;'; put 'end;'; put 'else do;'; put 'paths=trim(paths)!!'' ''!!quote(trim(path));'; put 'perms=trim(perms)!!'',''!!trim(permissions);'; put 'owners=trim(owners)!!'',''!!trim(owner);'; put 'schemas=trim(schemas)!!'' ''!!trim(schema);'; put 'end;'; put 'if last.libname then do;'; put 'paths=trim(paths)!!'')'';'; put 'schemas=cats(schemas);'; put 'output;'; put 'end;'; put 'keep libname engine paths perms owners schemas;'; put 'run;'; put 'proc sql;'; put 'create table libs5 as'; put 'select a.libref'; put ',coalescec(b.engine,a.engine) as engine length=32'; put ',b.libraryname as libname'; put ',a.paths'; put ',a.perms'; put ',a.owners'; put ',a.schemas'; put ',b.libraryid as libid'; put 'from libs4 a'; put 'left join libs0 b'; put 'on upcase(a.libref)=upcase(b.libraryref)'; put 'where libref not in (''SASWORK'',''WORK'',''SASUSER'',''CASUSER'',''TEMP'',''STPSAMP'''; put ',''MAPSGFK'');'; put '%bitemporal_dataloader(base_lib=&dc_libref'; put ',base_dsn=MPE_DATACATALOG_LIBS'; put ',append_dsn=libs5'; put ',PK=LIBREF'; put ',etlsource=&_program'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&dc_libref'; put ')'; put '%mend mpe_refreshlibs;'; put '%macro mpe_refreshcatalogs(lib,cat=#all);'; put '%let lib=%upcase(&lib);'; put '%let cat=%upcase(&cat);'; put '%put running &sysmacroname &lib for &cat;'; put 'proc sql;'; put 'create table work.catdata as'; put 'select libname as libref,'; put 'memname,'; put 'objname,'; put 'objtype,'; put 'objdesc,'; put 'created,'; put 'modified,'; put 'alias,'; put 'level'; put 'from dictionary.catalogs'; put 'where upcase(libname)="&lib"'; put '%if &cat ne #ALL %then %do;'; put 'and upcase(memname)="&cat"'; put '%end;'; put ';'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc afer &lib objects extraction)'; put ')'; put '/* load mpe_datacatalog_CATS */'; put 'proc sql;'; put 'create table datacats as select distinct libref,memname from catdata;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datacatalog_CATS'; put ',append_dsn=datacats'; put ',PK=LIBREF MEMNAME'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &cat = #ALL %then %do;'; put ',close_vars=LIBREF'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '/* load mpe_datacatalog_objsS */'; put 'proc sql;'; put 'create table dataobjs as'; put 'select distinct libref,'; put 'memname,'; put 'objname,'; put 'objtype,'; put 'objdesc,'; put 'alias'; put 'from catdata;'; put 'quit;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datacatalog_OBJS'; put ',append_dsn=dataobjs'; put ',PK=LIBREF MEMNAME OBJNAME OBJTYPE'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &cat = #ALL %then %do;'; put ',close_vars=LIBREF MEMNAME'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '%put load mpe_datastatus_OBJS;'; put 'proc sql;'; put 'create table statusobjs as'; put 'select distinct libref,'; put 'memname,'; put 'objname,'; put 'objtype,'; put 'created,'; put 'modified,'; put 'level'; put 'from catdata;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datastatus_OBJS'; put ',append_dsn=statusobjs'; put ',PK=LIBREF MEMNAME OBJNAME OBJTYPE'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &cat = #ALL %then %do;'; put ',close_vars=LIBREF MEMNAME'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '%put load mpe_datastatus_cats;'; put 'proc sql;'; put 'create table statuscats as'; put 'select libref,'; put 'memname,'; put 'count(*) as nobjs,'; put 'min(created) as created,'; put 'max(modified) as modified'; put 'from catdata'; put 'group by 1,2;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datastatus_cats'; put ',append_dsn=statuscats'; put ',PK=LIBREF MEMNAME'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &cat = #ALL %then %do;'; put ',close_vars=LIBREF'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '%mend mpe_refreshcatalogs;'; put '/** @cond */'; put '%macro mf_existfeature(feature'; put ')/*/STORE SOURCE*/;'; put '%let feature=%upcase(&feature);'; put '%local platform;'; put '%let platform=%mf_getplatform();'; put '%if &feature= %then %do;'; put '%put No feature was requested for detection;'; put '%end;'; put '%else %if &feature=COLCONSTRAINTS %then %do;'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=PROCLUA %then %do;'; put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */'; put '%if &platform=SASVIYA %then 1;'; put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;'; put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=DBMS_MEMTYPE %then %do;'; put '/* does dbms_memtype exist in dictionary.tables? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=EXPORTXLS %then %do;'; put '/* is it possible to PROC EXPORT an excel file? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;'; put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;'; put '%else 0;'; put '%end;'; put '%else %do;'; put '-1'; put '%put &sysmacroname: &feature not found;'; put '%end;'; put '%mend mf_existfeature;'; put '/** @endcond */'; put '%macro mp_getconstraints(lib=WORK'; put ',ds='; put ',outds=mp_getconstraints'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '/**'; put '* Cater for environments where sashelp.vcncolu is not available'; put '*/'; put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;'; put 'proc sql;'; put 'create table &outds('; put 'libref char(8)'; put ',TABLE_NAME char(32)'; put ',constraint_type char(8) label=''Constraint Type'''; put ',constraint_name char(32) label=''Constraint Name'''; put ',column_name char(32) label=''Column'''; put ',constraint_order num'; put ');'; put '%return;'; put '%end;'; put '/**'; put '* Neither dictionary tables nor sashelp provides a constraint order column,'; put '* however they DO arrive in the correct order. So, create the col.'; put '**/'; put '%local vw;'; put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);'; put 'data &vw /view=&vw;'; put 'set sashelp.vcncolu;'; put 'where table_catalog="&lib";'; put '/* use retain approach to reset the constraint order with each constraint */'; put 'length tmp $1000;'; put 'retain tmp;'; put 'drop tmp;'; put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;'; put 'constraint_order=1;'; put 'end;'; put 'else constraint_order+1;'; put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);'; put 'run;'; put '/* must use SQL as proc datasets does not support length changes */'; put 'proc sql noprint;'; put 'create table &outds as'; put 'select upcase(a.TABLE_CATALOG) as libref'; put ',upcase(a.TABLE_NAME) as TABLE_NAME'; put ',a.constraint_type'; put ',a.constraint_name'; put ',b.column_name'; put ',b.constraint_order'; put 'from dictionary.TABLE_CONSTRAINTS a'; put 'left join &vw b'; put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)'; put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)'; put 'and a.constraint_name=b.constraint_name'; put '/**'; put '* We cannot apply this clause to the underlying dictionary table. See:'; put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867'; put '* cannot use`where calculated libref="&lib"` either as it will STILL execute'; put '* all the underlying constraint queries, causing exception errors in some'; put '* cases: https://github.com/sasjs/core/issues/283'; put '*/'; put 'where a.TABLE_CATALOG="&lib"'; put '%if "&ds" ne "" %then %do;'; put 'and upcase(a.TABLE_NAME)="&ds"'; put 'and upcase(b.TABLE_NAME)="&ds"'; put '%end;'; put 'order by libref, table_name, constraint_name, constraint_order'; put ';'; put '/* tidy up */'; put '%mp_dropmembers('; put '&vw,'; put 'iftrue=(&mdebug=0)'; put ')'; put '%mend mp_getconstraints;'; put '%macro mpe_refreshtables(lib,ds=#all);'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%local engine; %let engine=%mf_getengine(&lib);'; put '%local schema; %let schema=%mf_getschema(&lib);'; put '%put running &sysmacroname &lib(&engine &schema) for &ds;'; put 'proc sql;'; put 'create table cols as'; put 'select libname as libref'; put ',upcase(memname) as dsn'; put ',memtype'; put ',upcase(name) as name'; put ',type'; put ',length'; put ',varnum'; put ',label'; put ',format'; put ',idxusage'; put ',notnull'; put 'from dictionary.columns'; put 'where upcase(libname)="&lib"'; put '%if &ds ne #ALL %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc afer &lib cols extraction)'; put ')'; put '%if &engine=SQLSVR %then %do;'; put 'proc sql;'; put 'connect using &lib;'; put 'create table work.indexes as'; put 'select * from connection to &lib('; put 'select'; put 's.name as SchemaName,'; put 't.name as memname,'; put 'tc.name as name,'; put 'ic.key_ordinal as KeyOrderNr'; put 'from'; put 'sys.schemas s'; put 'inner join sys.tables t on s.schema_id=t.schema_id'; put 'inner join sys.indexes i on t.object_id=i.object_id'; put 'inner join sys.index_columns ic on i.object_id=ic.object_id'; put 'and i.index_id=ic.index_id'; put 'inner join sys.columns tc on ic.object_id=tc.object_id'; put 'and ic.column_id=tc.column_id'; put 'where i.is_primary_key=1'; put 'and s.name=%str(%'')&schema%str(%'')'; put 'order by t.name, ic.key_ordinal ;'; put ');disconnect from &lib;'; put 'create table finalcols as'; put 'select a.*'; put ',case when b.name is not null then 1 else 0 end as pk_ind'; put 'from work.cols a'; put 'left join work.indexes b'; put 'on a.dsn=b.memname'; put 'and upcase(a.name)=upcase(b.name)'; put 'order by libref,dsn;'; put '%end;'; put '%else %do;'; put '%local dsn;'; put '%if &ds = #ALL %then %let dsn=;'; put '%mp_getconstraints(lib=&lib.,ds=&dsn,outds=work.constraints)'; put '/* extract cols that are clearly primary keys */'; put 'proc sql;'; put 'create table work.pk4sure as'; put 'select libref'; put ',table_name'; put ',constraint_name'; put ',constraint_order'; put ',column_name as name'; put 'from work.constraints'; put 'where constraint_type=''PRIMARY'''; put 'order by 1,2,3,4;'; put '/* extract unique constraints where every col is also NOT NULL */'; put 'proc sql;'; put 'create table work.sum as'; put 'select a.libref'; put ',a.table_name'; put ',a.constraint_name'; put ',count(a.column_name) as unq_cnt'; put ',count(b.column_name) as nul_cnt'; put 'from work.constraints(where=(constraint_type =''UNIQUE'')) a'; put 'left join work.constraints(where=(constraint_type =''NOT NULL'')) b'; put 'on a.libref=b.libref'; put 'and a.table_name=b.table_name'; put 'and a.column_name=b.column_name'; put 'group by 1,2,3'; put 'having unq_cnt=nul_cnt;'; put '/* extract cols from the relevant unique constraints */'; put 'create table work.pkdefault as'; put 'select a.libref'; put ',a.table_name'; put ',a.constraint_name'; put ',b.constraint_order'; put ',b.column_name as name'; put 'from work.sum a'; put 'left join work.constraints(where=(constraint_type =''UNIQUE'')) b'; put 'on a.libref=b.libref'; put 'and a.table_name=b.table_name'; put 'and a.constraint_name=b.constraint_name'; put 'order by 1,2,3,4;'; put '/* extract cols from the relevant unique INDEXES */'; put 'create table work.pkfromindex as'; put 'select libname as libref'; put ',memname as table_name'; put ',indxname as constraint_name'; put ',indxpos as constraint_order'; put ',name'; put 'from dictionary.indexes'; put 'where nomiss=''yes'' and unique=''yes'' and upcase(libname)="&lib"'; put '%if &ds ne #ALL %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put 'order by 1,2,3,4;'; put '/* create one table */'; put 'data work.finalpks;'; put 'set pkdefault pk4sure pkfromindex;'; put 'pk_ind=1;'; put '/* if there are multiple unique constraints, take the first */'; put 'by libref table_name constraint_name;'; put 'retain keepme;'; put 'if first.table_name then keepme=1;'; put 'if first.constraint_name and not first.table_name then keepme=0;'; put 'if keepme=1;'; put 'run;'; put '/* join back to starting table */'; put 'proc sql;'; put 'create table finalcols as'; put 'select a.*'; put ',b.constraint_order'; put ',case when b.pk_ind=1 then 1 else 0 end as pk_ind'; put 'from work.cols a'; put 'left join work.finalpks b'; put 'on a.libref=b.libref'; put 'and a.dsn=b.table_name'; put 'and upcase(a.name)=upcase(b.name)'; put 'order by libref,dsn,constraint_order;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc afer &lib indexes extraction)'; put ')'; put '/* load columns */'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datacatalog_vars'; put ',append_dsn=finalcols'; put ',PK=LIBREF DSN NAME'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &ds ne #ALL %then %do;'; put ',close_vars=LIBREF DSN'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '/* prepare tables */'; put 'proc sql;'; put 'create table work.tabs as select'; put 'libname as libref'; put ',upcase(memname) as dsn'; put ',memtype'; put '%if %mf_existfeature(DBMS_MEMTYPE)=1 %then %do;'; put ',dbms_memtype'; put '%end;'; put '%else %do;'; put ',''n/a'' as dbms_memtype format=$32.'; put '%end;'; put ',typemem'; put ',memlabel'; put ',nvar'; put ',compress'; put 'from dictionary.tables'; put 'where upcase(libname)="&lib"'; put '%if &ds ne #ALL %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put 'data tabs2;'; put 'set finalcols;'; put 'length pk_fields $512;'; put 'retain pk_fields;'; put 'by libref dsn;'; put 'if first.dsn then pk_fields='''';'; put 'if pk_ind=1 then pk_fields=catx('' '',pk_fields,name);'; put 'if last.dsn then output;'; put 'run;'; put 'proc sql;'; put 'create table work.finaltabs as'; put 'select a.libref'; put ',a.dsn'; put ',a.memtype'; put ',a.dbms_memtype'; put ',a.typemem'; put ',a.memlabel'; put ',a.nvar'; put ',a.compress'; put ',b.pk_fields'; put 'from work.tabs a'; put 'left join work.tabs2 b'; put 'on a.libref=b.libref'; put 'and a.dsn=b.dsn;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datacatalog_tabs'; put ',append_dsn=finaltabs'; put ',PK=LIBREF DSN'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&mpelib'; put '%if &ds ne #ALL %then %do;'; put ',close_vars=LIBREF'; put '%end;'; put ')'; put '/* prepare table frequently changing attributes */'; put 'proc sql;'; put '%if &engine=SQLSVR %then %do;'; put 'connect using &lib;'; put 'create table work.attrs as select * from connection to &lib('; put 'SELECT SCHEMA_NAME(schema_id) as ''schema'', name, create_date, modify_date'; put 'FROM sys.tables ;'; put ');'; put 'create table work.nobs as select * from connection to &lib('; put 'SELECT SCHEMA_NAME(A.schema_id) AS ''schema'''; put ',A.Name, AVG(B.rows) AS ''RowCount'''; put 'FROM sys.objects A'; put 'INNER JOIN sys.partitions B ON A.object_id = B.object_id'; put 'WHERE A.type = ''U'''; put 'GROUP BY A.schema_id, A.Name'; put ');'; put 'disconnect from &lib;'; put 'create table statustabs as select'; put 'a.libref'; put ',a.dsn'; put ',b.create_date as crdate'; put ',b.modify_date as modate'; put ',. as filesize'; put ',c.RowCount as nobs'; put 'from work.tabs a'; put 'left join work.attrs(where=(schema="&schema")) b'; put 'on upcase(a.dsn)=upcase(b.name)'; put 'left join work.nobs(where=(schema="&schema")) c'; put 'on upcase(a.dsn)=upcase(c.name);'; put '%end;'; put '%else %do;'; put 'create table statustabs as select'; put 'libname as libref'; put ',upcase(memname) as dsn'; put ',crdate'; put ',modate'; put ',filesize'; put ',nobs'; put 'from dictionary.tables'; put 'where upcase(libname)="&lib"'; put '%if &ds ne #ALL %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put '%end;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datastatus_tabs'; put ',append_dsn=statustabs'; put ',PK=LIBREF DSN'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&mpelib'; put '%if &ds ne #ALL %then %do;'; put ',close_vars=LIBREF'; put '%end;'; put ')'; put '%if &ds = #ALL %then %do;'; put 'proc sql;'; put 'create table work.sumcat as'; put 'select libname as libref,'; put 'count(distinct memname) as catalog_cnt'; put 'from dictionary.catalogs'; put 'where upcase(libname)="&lib"'; put 'group by 1;'; put 'create table work.sumdsn as select'; put 'libref'; put ',sum(filesize) as libsize'; put ',count(*) as table_cnt'; put 'from statustabs'; put 'group by 1;'; put 'create table work.libs as'; put 'select libref from work.sumcat'; put 'union'; put 'select libref from work.sumdsn;'; put 'create table work.statuslibs as'; put 'select a.libref,'; put 'b.libsize,'; put 'b.table_cnt,'; put 'c.catalog_cnt'; put 'from work.libs a'; put 'left join work.sumdsn b'; put 'on a.libref=b.libref'; put 'left join work.sumcat c'; put 'on a.libref=c.libref;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datastatus_libs'; put ',append_dsn=statuslibs'; put ',PK=LIBREF'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&mpelib'; put ')'; put '%end;'; put '%mend mpe_refreshtables;'; put '%macro dc_refreshcatalog(libref);'; put '/* take current repository */'; put '%local repo repocnt xx;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'put (_all_)(=);'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'');'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put &sysmacroname #&libref#;'; put '%if #&libref# ne ## %then %do;'; put '%put &sysmacroname: assigning specific libref, &libref;'; put '%dc_assignlib(WRITE,&libref) /* write just in order to assign direct lib */'; put '%mpe_refreshlibs(lib=&libref)'; put '%mpe_refreshtables(&libref)'; put '%mpe_refreshcatalogs(&libref)'; put '%end;'; put '%else %do xx=1 %to &repocnt;'; put 'options metarepository=&&repo&xx;'; put '%mpe_refreshlibs()'; put '/* get libs to be ignored */'; put '%local ignorelist;'; put 'proc sql noprint;'; put 'select var_value into: ignorelist'; put 'from &mpelib..MPE_CONFIG'; put 'where var_scope=''DC_CATALOG'''; put 'and var_name="DC_IGNORELIBS"'; put 'and &dc_dttmtfmt. < TX_TO'; put 'and var_active=1;'; put '/* get all libs */'; put '%let libcnt=0;'; put 'data libraries;'; put 'set &mpelib..mpe_datacatalog_libs;'; put 'where &dc_dttmtfmt. le TX_TO;'; put 'if index("&ignorelist",''|''!!upcase(trim(libref))!!''|'')=0;'; put 'i+1;'; put 'call symputx(cats(''lib'',i),libref);'; put 'call symputx(''libcnt'',i);'; put 'run;'; put '%local i;'; put '%do i=1 %to &libcnt;'; put '%dc_assignlib(WRITE,&&lib&i)'; put '%mpe_refreshtables(&&lib&i)'; put '%mpe_refreshcatalogs(&&lib&i)'; put '%end;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_refreshcatalog;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file refreshlibinfo.sas'; put '@brief Refresh the Data Catalog for a particular library'; put '@details When showing library info in the VIEW menu, the data is taken from'; put 'the Data Catalog tables. These may be empty or outdated, and so this service'; put 'allows end users to run a refresh of the data.'; put '

Service Inputs

'; put '
lib2refresh
'; put 'Should contain the libref to be refreshed.'; put '|libref:$8.|'; put '|---|'; put '|SOMELIB|'; put '

Service Outputs

'; put '
libinfo
'; put '|engine $|libname $|paths $|perms $|owners $|schemas $ |libid $|libsize $|table_cnt |'; put '|---|---|---|---|---|---|---|---|---|'; put '|V9|SOMELIB|"some/path"|rwxrwxr-x|sassrv|` `|` `|636MB|33|'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li dc_refreshcatalog.sas'; put '@li mp_abort.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%webout(FETCH)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',msg=%str(syscc=&syscc Problem on startup)'; put ')'; put '%let libref=;'; put 'data _null_;'; put 'set work.lib2refresh;'; put 'call symputx(''libref'',libref);'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',msg=%str(syscc=&syscc Problem with inputs - was lib2refresh object sent?)'; put ')'; put '%dc_assignlib(WRITE,&libref)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',msg=%str(syscc=&syscc after lib assignment)'; put ')'; put '%dc_refreshcatalog(&libref)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',msg=%str(syscc=&syscc Problem when running the catalog refresh)'; put ')'; put '/* get libinfo */'; put 'proc sql;'; put 'create table work.libinfo as'; put 'select a.engine,'; put 'a.libname,'; put 'a.paths,'; put 'a.perms,'; put 'a.owners,'; put 'a.schemas,'; put 'a.libid,'; put 'b.libsize,'; put 'b.table_cnt,'; put 'b.catalog_cnt'; put 'from &mpelib..mpe_datacatalog_libs(where=(&dc_dttmtfmt. lt tx_to)) a'; put 'inner join &mpelib..mpe_datastatus_libs(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on a.libref=b.libref'; put 'where a.libref="&libref";'; put '%webout(OPEN)'; put '%webout(OBJ,libinfo)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=registeruser; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file registeruser.sas'; put '@brief Registers a new user in Data Controller'; put '@details New users are logged after accepting EULA terms.'; put '

SAS Macros

'; put '@li mf_getuser.sas'; put '@li mp_abort.sas'; put '@li mpeinit.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%let userid=%mf_getuser();'; put '/* confirm the user is not registered */'; put '%let isRegistered=0;'; put 'proc sql noprint;'; put 'select count(*) into: isregistered'; put 'from &mpelib..mpe_users'; put 'where user_id="&userid";'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem accessing &mpelib..mpe_users table)'; put ')'; put '%mp_abort(iftrue= (&isregistered > 0)'; put ',mac=&_program..sas'; put ',msg=%str(User &userid is already registered on &mpelib..mpe_users!)'; put ')'; put 'data work.append;'; put 'if 0 then set &mpelib..mpe_users;'; put 'user_id=symget(''userid'');'; put 'registered_dt=today();'; put 'last_seen_dt=today();'; put 'run;'; put 'proc append base=&mpelib..mpe_users data=work.append;'; put '%let isRegistered=0;'; put 'proc sql noprint;'; put 'select count(*) into: isregistered'; put 'from &mpelib..mpe_users'; put 'where user_id="&userid";'; put '%mp_abort(iftrue= (&syscc ne 0 or &isregistered ne 1)'; put ',mac=&_program..sas'; put ',msg=%str(Problem appending to &mpelib..mpe_users table)'; put ')'; put 'data work.return;'; put 'msg=''SUCCESS'';'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,return)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=startupservice; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file startupservice.sas'; put '@brief List the libraries and tables the mp-editor user can access'; put '@details If user is in a control group (&mpeadmins, configured in mpeinit.sas)'; put 'then they have access to all libraries / tables. Otherwise a join is made'; put 'to the &mpelib..mpe_security table.'; put '

SAS Macros

'; put '@li mf_getuser.sas'; put '@li mpe_getgroups.sas'; put '@li mp_abort.sas'; put '@li mpeinit.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Issue on startup in startupService)'; put ')'; put '%let userid=%mf_getuser();'; put '%put userid is &userid;'; put '%mpe_getgroups(user=&userid,outds=groups)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Issue with Groups syscc=&syscc for user &userid)'; put ')'; put '/* check if user is an admin */'; put '%let admin_check=0;'; put 'proc sql noprint;'; put 'select count(*) into: admin_check'; put 'from groups'; put 'where groupname="&mpeadmins";'; put '/* check if user is registered or not */'; put '%let isRegistered=0;'; put 'select count(*) into: isregistered'; put 'from &mpelib..mpe_users'; put 'where user_id="&userid";'; put '/* get number of registered users */'; put '%let registerCount=0;'; put 'select count(*) into: registercount'; put 'from &mpelib..mpe_users'; put 'where last_seen_dt>%sysfunc(today())-365;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem accessing &mpelib..mpe_users table)'; put ')'; put '%global dc_restrict_editrecord;'; put 'data work.globvars;'; put 'dclib="&mpelib";'; put 'sas9lineage_enabled=1;'; put 'isadmin=&admin_check;'; put 'isregistered=&isregistered;'; put 'registercount=®isterCount;'; put 'dc_admin_group="&mpeadmins";'; put '/* fetched from mpe_config in dc_getsettings */'; put 'licence_key="&dc_licence_key";'; put 'activation_key="&dc_activation_key";'; put 'dc_restrict_editrecord="&dc_restrict_editrecord";'; put 'run;'; put '%macro mstp_mpeditorstartup();'; put 'data _null_;'; put 'putlog "entering &sysmacroname";'; put 'run;'; put 'proc sql noprint;'; put '/* update last seen, if seen */'; put '%if &isregistered>0 %then %do;'; put 'update &mpelib..mpe_users'; put 'set last_seen_dt=%sysfunc(today())'; put 'where user_id="&userid";'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem updating &mpelib..mpe_users table)'; put ')'; put '%local all_cnt;'; put 'select count(*) into: all_cnt'; put 'from &mpelib..mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and ACCESS_LEVEL in (''EDIT'')'; put 'and libref=''*ALL*'''; put 'and SAS_GROUP in (select groupname from groups);'; put '%if &admin_check >0 or &all_cnt>0 %then %do;'; put 'create table sasDatasets as'; put 'select distinct libref, dsn'; put 'from &mpelib..mpe_tables'; put 'where &dc_dttmtfmt. lt tx_to'; put 'order by 1;'; put '%end;'; put '%else %do;'; put 'create table sasDatasets as'; put 'select distinct a.libref,a.dsn'; put 'from &mpelib..mpe_tables a'; put 'left join &mpelib..mpe_security b'; put 'on a.libref=b.libref'; put 'and a.dsn=b.dsn'; put 'where &dc_dttmtfmt. lt a.tx_to'; put 'and &dc_dttmtfmt. lt b.tx_to'; put 'and b.ACCESS_LEVEL in (''EDIT'')'; put 'and b.SAS_GROUP in (select groupname from groups)'; put 'order by 1;'; put '%end;'; put '%mend mstp_mpeditorstartup;'; put '%mstp_mpeditorstartup()'; put 'create table saslibs as'; put 'select distinct libref'; put 'from &syslast;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(issue with security validation)'; put ')'; put 'proc sql;'; put 'create table work.xlmaps as'; put 'select distinct a.XLMAP_ID'; put ',b.XLMAP_DESCRIPTION'; put ',coalescec(b.XLMAP_TARGETLIBDS,"&mpelib..MPE_XLMAP_DATA")'; put 'as XLMAP_TARGETLIBDS'; put 'from &mpelib..MPE_XLMAP_RULES a'; put 'left join &mpelib..MPE_XLMAP_INFO(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on a.XLMAP_ID=b.XLMAP_ID'; put 'where &dc_dttmtfmt. lt a.tx_to;'; put '/* we don''t want the XLMAP target datasets to be directly editable */'; put 'delete from sasdatasets'; put 'where cats(libref,''.'',dsn) in (select XLMAP_TARGETLIBDS from xlmaps);'; put '%webout(OPEN)'; put '%webout(OBJ,sasDatasets)'; put '%webout(OBJ,saslibs)'; put '%webout(OBJ,globvars)'; put '%webout(ARR,xlmaps)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=validatefilter; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro removecolsfromwork(col);'; put '/* only an issue if debug mode enabled */'; put '%global _debug;'; put '%if &_debug ge 131 %then %do;'; put '%let col=%upcase(&col);'; put '%local memlist;'; put 'proc sql noprint;'; put 'select distinct memname into: memlist'; put 'separated by '' '''; put 'from dictionary.columns'; put 'where libname=''WORK'' and upcase(name)="&col";'; put '%if %mf_isblank(&memlist) %then %return;'; put '%mp_dropmembers(list=&memlist)'; put '%end;'; put '%mend removecolsfromwork;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvalue(libds,variable,filter=1'; put ')/*/STORE SOURCE*/;'; put '%if %mf_getattrn(&libds,NLOBS)>0 %then %do;'; put '%local dsid rc &variable;'; put '%let dsid=%sysfunc(open(&libds(where=(&filter))));'; put '%syscall set(dsid);'; put '%let rc = %sysfunc(fetch(&dsid));'; put '%let rc = %sysfunc(close(&dsid));'; put '%trim(&&&variable)'; put '%end;'; put '%mend mf_getvalue;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_islibds(libds'; put ')/*/STORE SOURCE*/;'; put '%local regex;'; put '%let regex=%sysfunc(prxparse(%str(/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i)));'; put '%sysfunc(prxmatch(®ex,&libds))'; put '%mend mf_islibds;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mp_filtergenerate(inds,outref=filter);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put 'filename &outref temp;'; put '%if %mf_nobs(&inds)=0 %then %do;'; put '/* ensure we have a default filter */'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc sort data=&inds;'; put 'by SUBGROUP_ID;'; put 'run;'; put 'data _null_;'; put 'file &outref lrecl=32800;'; put 'set &inds end=last;'; put 'by SUBGROUP_ID;'; put 'if _n_=1 then put ''(('';'; put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';'; put 'else put +2 SUBGROUP_LOGIC;'; put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;'; put 'if last.SUBGROUP_ID then put '')''@;'; put 'if last then put '')'';'; put 'run;'; put '%end;'; put '%mend mp_filtergenerate;'; put '%macro mp_filtervalidate(inref,targetds,abort=YES,outds=work.mp_filtervalidate);'; put '%mp_abort(iftrue= (&syscc ne 0 or &syserr ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc / syserr=&syserr - on macro entry)'; put ')'; put '%local fref1;'; put '%let fref1=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &fref1;'; put 'infile &inref end=eof;'; put 'if _n_=1 then do;'; put 'put "proc sql;";'; put 'put "validate select * from &targetds";'; put 'put "where " ;'; put 'end;'; put 'input;'; put 'put _infile_;'; put 'putlog _infile_;'; put 'if eof then put ";quit;";'; put 'run;'; put '%inc &fref1;'; put 'data &outds;'; put 'if &sqlrc or &syscc or &syserr then do;'; put 'REASON_CD=''VALIDATION_ERR''!!''OR: ''!!'; put 'coalescec(symget(''SYSERRORTEXT''),symget(''SYSWARNINGTEXT''));'; put 'output;'; put 'end;'; put 'else stop;'; put 'run;'; put 'filename &fref1 clear;'; put '%if %mf_nobs(&outds)>0 %then %do;'; put '%if &abort=YES %then %do;'; put 'data _null_;'; put 'set &outds;'; put 'call symputx(''REASON_CD'',reason_cd,''l'');'; put 'stop;'; put 'run;'; put '%mp_abort('; put 'mac=&sysmacroname,'; put 'msg=%str(Filter validation issues.)'; put ')'; put '%end;'; put '%let syscc=1008;'; put '%end;'; put '%mend mp_filtervalidate;'; put '%macro mp_filtercheck(inds,targetds=,outds=work.badrecords,abort=YES);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put '/* Validate input column */'; put '%local vtype;'; put '%let vtype=%mf_getvartype(&inds,RAW_VALUE);'; put '%mp_abort(iftrue=(&abort=YES and &vtype ne C),'; put 'mac=&sysmacroname,'; put 'msg=%str(%str(ERR)OR: RAW_VALUE must be character)'; put ')'; put '%if &vtype ne C %then %do;'; put '%put &sysmacroname: RAW_VALUE must be character;'; put '%let syscc=42;'; put '%return;'; put '%end;'; put '/**'; put '* Sanitise the values based on valid value lists, then strip out'; put '* quotes, commas, periods and spaces.'; put '*/'; put '%local reason_cd nobs;'; put '%let nobs=0;'; put 'data &outds;'; put '/*length GROUP_LOGIC SUBGROUP_LOGIC $3 SUBGROUP_ID 8 VARIABLE_NM $32'; put 'OPERATOR_NM $10 RAW_VALUE $4000;*/'; put 'set &inds end=last;'; put 'length reason_cd $4032 vtype vtype2 $1 vnum dsid 8 tmp $4000;'; put 'drop tmp;'; put '/* quick check to ensure column exists */'; put 'if upcase(VARIABLE_NM) not in'; put '(%upcase(%mf_getvarlist(&targetds,dlm=%str(,),quote=SINGLE)))'; put 'then do;'; put 'REASON_CD="Variable "!!cats(variable_nm)!!" not in &targetds";'; put 'putlog REASON_CD= VARIABLE_NM=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'return;'; put 'end;'; put '/* need to open the dataset to get the column type */'; put 'retain dsid;'; put 'if _n_=1 then dsid=open("&targetds","i");'; put 'if dsid>0 then do;'; put 'vnum=varnum(dsid,VARIABLE_NM);'; put 'if vnum<1 then do;'; put '/* should not happen as was also tested for above */'; put 'REASON_CD=cats("Variable (",VARIABLE_NM,") not found in &targetds");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put '/* now we can get the type */'; put 'else vtype=vartype(dsid,vnum);'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Could not open &targetds");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'stop;'; put 'end;'; put '/* closed list checks */'; put 'if GROUP_LOGIC not in (''AND'',''OR'') then do;'; put 'REASON_CD=''GROUP_LOGIC should be AND/OR, not:''!!cats(GROUP_LOGIC);'; put 'putlog REASON_CD= GROUP_LOGIC=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if SUBGROUP_LOGIC not in (''AND'',''OR'') then do;'; put 'REASON_CD=''SUBGROUP_LOGIC should be AND/OR, not:''!!cats(SUBGROUP_LOGIC);'; put 'putlog REASON_CD= SUBGROUP_LOGIC=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if mod(SUBGROUP_ID,1) ne 0 then do;'; put 'REASON_CD=''SUBGROUP_ID should be integer, not ''!!cats(subgroup_id);'; put 'putlog REASON_CD= SUBGROUP_ID=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if OPERATOR_NM not in'; put '(''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'',''BETWEEN'',''IN'',''NOT IN'',''CONTAINS'')'; put 'then do;'; put 'REASON_CD=''Invalid OPERATOR_NM: ''!!cats(OPERATOR_NM);'; put 'putlog REASON_CD= OPERATOR_NM=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put '/* special missing logic */'; put 'if vtype=''N'' & OPERATOR_NM in (''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'') then do;'; put 'if cats(upcase(raw_value)) in ('; put '''.'',''.A'',''.B'',''.C'',''.D'',''.E'',''.F'',''.G'',''.H'',''.I'',''.J'',''.K'',''.L'',''.M'',''.N'''; put '''.N'',''.O'',''.P'',''.Q'',''.R'',''.S'',''.T'',''.U'',''.V'',''.W'',''.X'',''.Y'',''.Z'',''._'''; put ')'; put 'then do;'; put '/* valid numeric - exit data step loop */'; put 'return;'; put 'end;'; put 'else if subpad(upcase(raw_value),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put 'vnum=varnum(dsid,subpad(raw_value,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'end;'; put '/* special logic */'; put 'if OPERATOR_NM in (''IN'',''NOT IN'',''BETWEEN'') then do;'; put 'if OPERATOR_NM=''BETWEEN'' then raw_value1=tranwrd(raw_value,'' AND '','','');'; put 'else do;'; put 'if substr(raw_value,1,1) ne ''('''; put 'or substr(cats(reverse(raw_value)),1,1) ne '')'''; put 'then do;'; put 'REASON_CD=''Missing start/end bracket in RAW_VALUE'';'; put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'else raw_value1=substr(raw_value,2,max(length(raw_value)-2,0));'; put 'end;'; put '/* we now have a comma seperated list of values */'; put 'if vtype=''N'' then do i=1 to countc(raw_value1, '','')+1;'; put 'tmp=scan(raw_value1,i,'','');'; put 'if cats(tmp) ne ''.'' and input(tmp, ?? 8.) eq . then do;'; put 'if OPERATOR_NM =''BETWEEN'' and subpad(upcase(tmp),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put '/* is not valid syntax for IN or NOT IN */'; put 'vnum=varnum(dsid,subpad(tmp,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'REASON_CD=''Non Numeric value provided'';'; put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'return;'; put 'end;'; put 'end;'; put 'else raw_value1=raw_value;'; put '/* remove nested literals eg '''' */'; put 'raw_value1=tranwrd(raw_value1,"''''",'''');'; put '/* now match string literals (always single quotes) */'; put 'raw_value2=raw_value1;'; put 'regex = prxparse("s/(\'').*?(\'')//");'; put 'call prxchange(regex,-1,raw_value2);'; put '/* remove commas and periods*/'; put 'raw_value3=compress(raw_value2,'',.'');'; put '/* output records that contain values other than digits and spaces */'; put 'if notdigit(compress(raw_value3,'' ''))>0 then do;'; put 'if vtype=''C'' and subpad(upcase(raw_value),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put 'vnum=varnum(dsid,subpad(raw_value,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Char Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'putlog raw_value3= $hex32.;'; put 'REASON_CD=cats(''Invalid RAW_VALUE:'',raw_value);'; put 'putlog (_all_)(=);'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'endstep:'; put 'if last then rc=close(dsid);'; put 'run;'; put 'data _null_;'; put 'set &outds end=last;'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue=(&abort=YES and &nobs>0),'; put 'mac=&sysmacroname,'; put 'msg=%str(Data issue: %superq(reason_cd))'; put ')'; put '%if &nobs>0 %then %do;'; put '%let syscc=1008;'; put '%return;'; put '%end;'; put '/**'; put '* syntax checking passed but it does not mean the filter is valid'; put '* for that we can run a proc sql validate query'; put '*/'; put '%local fref1;'; put '%let fref1=%mf_getuniquefileref();'; put '%mp_filtergenerate(&inds,outref=&fref1)'; put '/* this macro will also set syscc to 1008 if any issues found */'; put '%mp_filtervalidate(&fref1,&targetds,outds=&outds,abort=&abort)'; put '%mend mp_filtercheck;'; put '%macro mp_md5(cvars=,nvars=);'; put '%local i var sep;'; put 'put(md5('; put '%do i=1 %to %sysfunc(countw(&cvars));'; put '%let var=%scan(&cvars,&i,%str( ));'; put '&sep put(md5(trim(&var)),$hex32.)'; put '%let sep=!!;'; put '%end;'; put '%do i=1 %to %sysfunc(countw(&nvars));'; put '%let var=%scan(&nvars,&i,%str( ));'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put '&sep put(md5(trim(put(ifn(missing(&var),&var,&var*1),binary64.))),$hex32.)'; put '%let sep=!!;'; put '%end;'; put '),$hex32.)'; put '%mend mp_md5;'; put '%macro mp_hashdataset('; put 'libds,'; put 'outds=work._data_,'; put 'salt=,'; put 'iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local keyvar /* roll up the md5 */'; put 'prevkeyvar /* retain prev record md5 */'; put 'lastvar /* last var in input ds */'; put 'cvars nvars;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '/* avoid naming conflict for hash key vars */'; put '%let keyvar=%mf_getuniquename();'; put '%let prevkeyvar=%mf_getuniquename();'; put '%let lastvar=%mf_getuniquename();'; put '%if %mf_getattrn(&libds,NLOBS)=0 %then %do;'; put 'data &outds;'; put 'length hashkey $32;'; put 'hashkey=put(md5("&salt"),$hex32.);'; put 'output;'; put 'stop;'; put 'run;'; put '%put &sysmacroname: Dataset &libds is empty, or is not a dataset;'; put '%put &sysmacroname: hashkey of &outds is based on salt (&salt) only;'; put '%end;'; put '%else %if %mf_getattrn(&libds,NLOBS)<0 %then %do;'; put '%put %str(ERR)OR: Dataset &libds is not a dataset;'; put '%end;'; put '%else %do;'; put 'data &outds(rename=(&keyvar=hashkey) keep=&keyvar)'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'length &prevkeyvar &keyvar $32;'; put 'retain &prevkeyvar;'; put 'if _n_=1 then &prevkeyvar=put(md5("&salt"),$hex32.);'; put 'set &libds end=&lastvar;'; put '/* hash should include previous row */'; put '&keyvar=%mp_md5('; put 'cvars=%mf_getvarlist(&libds,typefilter=C) &prevkeyvar,'; put 'nvars=%mf_getvarlist(&libds,typefilter=N)'; put ');'; put '&prevkeyvar=&keyvar;'; put 'if &lastvar then output;'; put 'run;'; put '%end;'; put '%mend mp_hashdataset;'; put '/** @cond */'; put '%macro mf_existvar(libds /* 2 part dataset name */'; put ', var /* variable name */'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid=0 %then %do;'; put '%put %sysfunc(sysmsg());'; put '0'; put '%end;'; put '%else %if %length(&var)=0 %then %do;'; put '0'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%sysfunc(varnum(&dsid,&var))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_existvar;'; put '/** @endcond */'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '%macro mp_filterstore(libds=,'; put 'queryds=work.filterquery,'; put 'filter_summary=PERM.FILTER_SUMMARY,'; put 'filter_detail=PERM.FILTER_DETAIL,'; put 'lock_table=PERM.LOCK_TABLE,'; put 'maxkeytable=PERM.MAXKEYTABLE,'; put 'outresult=work.result,'; put 'outquery=work.query,'; put 'mdebug=1'; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local ds0 ds1 ds2 ds3 ds4 filter_hash orig_libds;'; put '%let libds=%upcase(&libds);'; put '%let orig_libds=&libds;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=mp_filterstore'; put ',msg=%str(syscc=&syscc on macro entry)'; put ')'; put '%mp_abort(iftrue= (%mf_islibds(&filter_summary)=0)'; put ',mac=mp_filterstore'; put ',msg=%str(Invalid filter_summary value: &filter_summary)'; put ')'; put '%mp_abort(iftrue= (%mf_islibds(&filter_detail)=0)'; put ',mac=mp_filterstore'; put ',msg=%str(Invalid filter_detail value: &filter_detail)'; put ')'; put '%mp_abort(iftrue= (%mf_islibds(&lock_table)=0)'; put ',mac=mp_filterstore'; put ',msg=%str(Invalid lock_table value: &lock_table)'; put ')'; put '/**'; put '* validate query'; put '* use format catalog export, if a format'; put '*/'; put '%if "%substr(&libds,%length(&libds)-2,3)"="-FC" %then %do;'; put '%let libds=%scan(&libds,1,-); /* chop off -FC extension */'; put '%let ds0=%mf_getuniquename(prefix=fmtds_);'; put '%let libds=&ds0;'; put '/*'; put 'There is no need to export the entire format catalog here - the validations'; put 'are done against the data model, not the data values. So we can simply'; put 'hardcode the structure based on the cntlout dataset.'; put '*/'; put '%mddl_sas_cntlout(libds=&ds0)'; put '%end;'; put '%mp_filtercheck(&queryds,targetds=&libds,abort=YES)'; put '/* hash the result */'; put '%let ds1=%mf_getuniquename(prefix=hashds);'; put '%mp_hashdataset(&queryds,outds=&ds1,salt=&orig_libds)'; put '%let filter_hash=%upcase(%mf_getvalue(&ds1,hashkey));'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'putlog "filter_hash=&filter_hash";'; put 'set &ds1;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '/* check if data already exists for this hash */'; put 'data &outresult;'; put 'set &filter_summary;'; put 'where filter_hash="&filter_hash";'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=mp_filterstore'; put ',msg=%str(syscc=&syscc after hash check)'; put ')'; put '%mp_abort(iftrue= ("&filter_hash "=" ")'; put ',mac=mp_filterstore'; put ',msg=%str(problem with filter_hash generation)'; put ')'; put '%if %mf_nobs(&outresult)=0 %then %do;'; put '/* first update summary table */'; put '%let ds3=%mf_getuniquename(prefix=filtersum);'; put 'data work.&ds3;'; put 'if 0 then set &filter_summary;'; put 'filter_table="&orig_libds";'; put 'filter_hash="&filter_hash";'; put 'PROCESSED_DTTM=%sysfunc(datetime());'; put 'output;'; put 'stop;'; put 'run;'; put '%mp_lockanytable(LOCK,'; put 'lib=%scan(&filter_summary,1,.)'; put ',ds=%scan(&filter_summary,2,.)'; put ',ref=MP_FILTERSTORE summary update - &filter_hash'; put ',ctl_ds=&lock_table'; put ')'; put '%let ds4=%mf_getuniquename(prefix=filtersumappend);'; put '%mp_retainedkey('; put 'base_lib=%scan(&filter_summary,1,.)'; put ',base_dsn=%scan(&filter_summary,2,.)'; put ',append_lib=work'; put ',append_dsn=&ds3'; put ',retained_key=filter_rk'; put ',business_key=filter_hash'; put ',maxkeytable=&maxkeytable'; put ',locktable=&lock_table'; put ',outds=work.&ds4'; put ')'; put 'proc append base=&filter_summary data=&ds4;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=%scan(&filter_summary,1,.)'; put ',ds=%scan(&filter_summary,2,.)'; put ',ref=MP_FILTERSTORE summary update - &filter_hash'; put ',ctl_ds=&lock_table'; put ')'; put '%if &syscc ne 0 %then %do;'; put 'data _null_;'; put 'set &ds4;'; put 'putlog (_all_)(=);'; put 'run;'; put '%goto err;'; put '%end;'; put 'data &outresult;'; put 'set &filter_summary;'; put 'where filter_hash="&filter_hash";'; put 'run;'; put '/* Next, update detail table */'; put '%let ds2=%mf_getuniquename(prefix=filterdetail);'; put 'data &ds2;'; put 'if 0 then set &filter_detail;'; put 'set &queryds;'; put 'format filter_hash $hex32. filter_line 8.;'; put 'filter_hash="&filter_hash";'; put 'filter_line=_n_;'; put 'PROCESSED_DTTM=%sysfunc(datetime());'; put 'run;'; put '%mp_lockanytable(LOCK,'; put 'lib=%scan(&filter_detail,1,.)'; put ',ds=%scan(&filter_detail,2,.)'; put ',ref=MP_FILTERSTORE update - &filter_hash'; put ',ctl_ds=&lock_table'; put ')'; put 'proc append base=&filter_detail data=&ds2;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=%scan(&filter_detail,1,.)'; put ',ds=%scan(&filter_detail,2,.)'; put ',ref=MP_FILTERSTORE detail update &filter_hash'; put ',ctl_ds=&lock_table'; put ')'; put '%if &syscc ne 0 %then %do;'; put 'data _null_;'; put 'set &ds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%goto err;'; put '%end;'; put '%end;'; put 'proc sort data=&filter_detail(where=(filter_hash="&filter_hash")) out=&outquery;'; put 'by filter_line;'; put 'run;'; put '%err:'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=mp_filterstore'; put ',msg=%str(syscc=&syscc on macro exit)'; put ')'; put '%mend mp_filterstore;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Validates a filter clause before it gets hashified, returns the RK'; put '@details Used to generate a FILTER_RK from an input query dataset.'; put 'Raw values are stored in dc.mpe_filtersource and the meta values are stored'; put 'in dc.mpe_filteranytable'; put '

Service Inputs

'; put '
IWANT
'; put '|FILTER_TABLE:$41.|'; put '|---|'; put '|DC258467.MPE_X_TEST|'; put '
FILTERQUERY
'; put '|GROUP_LOGIC:$3|SUBGROUP_LOGIC:$3|SUBGROUP_ID:8.|VARIABLE_NM:$32|OPERATOR_NM:$10|RAW_VALUE:$32767|'; put '|---|---|---|---|---|---|'; put '|AND|AND|1|SOME_BESTNUM|>|1|'; put '|AND|AND|1|SOME_TIME|=|77333|'; put '

Service Outputs

'; put '
result
'; put '@li FILTER_HASH'; put '@li FILTER_RK'; put '@li FILTER_TABLE'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li mf_getvalue.sas'; put '@li mp_filterstore.sas'; put '@li removecolsfromwork.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%let ds=%upcase(%mf_getvalue(work.iwant,filter_table));'; put '%dc_assignlib(WRITE,%scan(&ds,1,.))'; put '%mp_filterstore('; put 'libds=&ds,'; put 'queryds=work.filterquery,'; put 'filter_summary=&dc_libref..mpe_filteranytable,'; put 'filter_detail=&dc_libref..mpe_filtersource,'; put 'lock_table=&dc_libref..mpe_lockanytable,'; put 'maxkeytable=&dc_libref..mpe_maxkeyvalues,'; put 'outresult=work.result,'; put 'outquery=work.query, /* not used */'; put 'mdebug=1'; put ')'; put '%removecolsfromwork(___TMP___MD5)'; put 'proc sql;'; put 'alter table work.result drop PROCESSED_DTTM;'; put '%webout(OPEN)'; put '%webout(OBJ,result)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=viewdata; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mpe_columnlevelsecurity(tgtlib,tgtds,inds'; put ',mode=VIEW'; put ',groupds=work.groups'; put ',clsds=work.clsview'; put ',outds=CLSVIEW'; put ',outmeta=work.cls_rules'; put ');'; put '%local col_list is_admin;'; put '/* filter for the appropriate rules */'; put 'proc sql;'; put 'create table &outmeta as'; put 'select CLS_VARIABLE_NM,'; put 'min(case when CLS_HIDE=1 then 1 else 0 end) as CLS_HIDE'; put 'from &clsds'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and CLS_SCOPE in ("&mode",''ALL'')'; put 'and CLS_ACTIVE=1'; put '%if &mode=VIEW %then %do;'; put 'and CLS_HIDE ne 1'; put '%end;'; put 'and upcase(CLS_GROUP) in (select upcase(groupname) from &groupds)'; put 'and CLS_LIBREF="%upcase(&tgtlib)"'; put 'and CLS_TABLE="%upcase(&tgtds)"'; put 'group by CLS_VARIABLE_NM;'; put '%let is_admin=0;'; put 'proc sql;'; put 'select count(*) into: is_admin from &groupds where groupname="&MPEADMINS";'; put '%put &sysmacroname: &=is_admin;'; put '%if %mf_nobs(work.cls_rules) = 0 or &is_admin>0 %then %do;'; put '%put &sysmacroname: no CLS rules to apply;'; put '%put &=is_admin;'; put '/* copy using append for speed */'; put 'data &outds;'; put 'set &inds;'; put 'stop;'; put 'run;'; put 'proc append base=&outds data=&inds;'; put 'run;'; put '/* ensure CLS_RULES is empty in case of admin */'; put 'data &outmeta;'; put 'set &outmeta;'; put 'stop;'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &mode=VIEW %then %do;'; put '/* just send back the relevant columns */'; put '%let col_list=0;'; put 'proc sql noprint;'; put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta'; put 'where CLS_HIDE=0;'; put '%if &col_list=0 %then %do;'; put '/*'; put 'We have columns that are set to CLS_HIDE=1 but we do not have any to'; put 'explicitly show. Therefore we assume all columns are to be shown except'; put 'those that are explicitly hidden.'; put '*/'; put 'proc sql noprint;'; put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta'; put 'where CLS_HIDE=1;'; put 'data &outds;'; put 'set &inds;'; put 'drop &col_list;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds;'; put 'set &inds;'; put 'keep &col_list;'; put 'run;'; put '%end;'; put '%end;'; put '%else %if &mode=EDIT %then %do;'; put '/*'; put 'In this case we pass all columns and the frontend will filter out the'; put 'ones that are not allowed to be edited.'; put '*/'; put 'data &outds;'; put 'set &inds;'; put 'stop;'; put 'run;'; put 'proc append base=&outds data=&inds;'; put 'run;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: invalid mode - &mode!;'; put '%abort;'; put '%end;'; put '%mend mpe_columnlevelsecurity;'; put '%macro mp_dsmeta(libds,outds=work.dsmeta);'; put '%local ds1 ds2;'; put 'data;run; %let ds1=&syslast;'; put 'data;run; %let ds2=&syslast;'; put '/* setup the ODS capture */'; put 'ods output attributes=&ds1 enginehost=&ds2;'; put '/* export the metadata */'; put 'proc contents data=&libds;'; put 'run;'; put '/* load it into a single table */'; put 'data &outds (keep=ods_table name value);'; put 'length ods_table $10 name label2 label1 label $100'; put 'value cvalue cvalue1 cvalue2 $1000'; put 'nvalue nvalue1 nvalue2 8;'; put 'if _n_=1 then call missing (of _all_);'; put '* putlog (_all_)(=);'; put 'set &ds1 (in=atrs) &ds2 (in=eng);'; put 'if atrs then do;'; put 'ods_table=''ATTRIBUTES'';'; put 'name=coalescec(label1,label);'; put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));'; put 'output;'; put 'if label2 ne '''' then do;'; put 'name=label2;'; put 'value=coalescec(cvalue2,put(nvalue2,best.));'; put 'output;'; put 'end;'; put 'end;'; put 'else if eng then do;'; put 'ods_table=''ENGINEHOST'';'; put 'name=coalescec(label1,label);'; put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));'; put 'output;'; put 'end;'; put 'run;'; put 'proc sql;'; put 'drop table &ds1, &ds2;'; put '%mend mp_dsmeta;'; put '%macro mpe_dsmeta(libds, outds=dsmeta);'; put '%local ddsd ddld notes lenstmt memname;'; put '%let lenstmt=length ods_table $18 name $100 value $1000;'; put '%let libds=%upcase(&libds);'; put '%if "%scan(&libds,2,-)" ne "FC" %then %do;'; put '%let memname=%scan(&libds,2,.);'; put '%mp_dsmeta(&libds, outds=&outds)'; put '%end;'; put '%else %do;'; put '%let memname=%scan(&libds,2,.-);'; put 'data &outds;'; put '&lenstmt;'; put 'set sashelp.vcatalg;'; put 'ods_table=cats(objtype);'; put 'name=cats(objname);'; put 'value=catx('' '',objdesc,''(modified:'',put(modified,datetime19.),'')'');'; put 'where libname="%scan(&libds,1,.)" and memname="&memname";'; put 'keep ods_table name value;'; put 'run;'; put 'proc sort; by ods_table name;run;'; put '%end;'; put 'data _null_;'; put 'set &mpelib..mpe_datadictionary;'; put 'where &dc_dttmtfmt < tx_to & dd_source="&memname" & dd_type=''TABLE'';'; put 'call symputx(''ddsd'',dd_shortdesc,''l'');'; put 'call symputx(''ddld'',dd_longdesc,''l'');'; put 'run;'; put 'data &outds;'; put '&lenstmt;'; put 'if last then do;'; put 'ODS_TABLE=''MPE_DATADICTIONARY'';'; put 'NAME=''DD_SHORTDESC'';'; put 'VALUE="&ddsd";'; put 'output;'; put 'NAME=''DD_LONGDESC'';'; put 'VALUE="&ddld";'; put 'output;'; put 'end;'; put 'set &outds end=last;'; put 'output;'; put 'run;'; put 'data _data_;'; put 'set &mpelib..mpe_tables;'; put 'where libref="%scan(&libds,1,.)"'; put '& dsn="%scan(&libds,2,.)"'; put '& &dc_dttmtfmt0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_filtergenerate(inds,outref=filter);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put 'filename &outref temp;'; put '%if %mf_nobs(&inds)=0 %then %do;'; put '/* ensure we have a default filter */'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc sort data=&inds;'; put 'by SUBGROUP_ID;'; put 'run;'; put 'data _null_;'; put 'file &outref lrecl=32800;'; put 'set &inds end=last;'; put 'by SUBGROUP_ID;'; put 'if _n_=1 then put ''(('';'; put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';'; put 'else put +2 SUBGROUP_LOGIC;'; put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;'; put 'if last.SUBGROUP_ID then put '')''@;'; put 'if last then put '')'';'; put 'run;'; put '%end;'; put '%mend mp_filtergenerate;'; put '%macro mpe_filtermaster(mode,libds,'; put 'dclib=,'; put 'filter_rk=-1,'; put 'outref=0,'; put 'outds=work.query'; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%let mode=%upcase(&mode);'; put '%let libds=%upcase(&libds);'; put '%mp_abort(iftrue= ('; put '&mode ne EDIT and &mode ne VIEW and &mode ne DLOAD and &mode ne ULOAD'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid MODE: &mode)'; put ')'; put '%mp_abort(iftrue= (&outref = 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Please provide a fileref!)'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc)'; put ')'; put 'filename &outref temp;'; put '/* ensure outputs exist */'; put 'data _null_;'; put 'file &outref;'; put 'put '' '';'; put 'run;'; put 'data &outds;'; put 'set &dclib..mpe_filtersource;'; put 'stop;'; put 'run;'; put '/**'; put '* Deal with FILTER_RK first'; put '*/'; put '%if &filter_rk gt 0 %then %do;'; put 'data _null_;'; put 'file &outref;'; put 'put ''( ''@@;'; put 'set &dclib..mpe_filteranytable(where=(filter_rk=&filter_rk));'; put 'call symputx(''filter_hash'',filter_hash,''l'');'; put 'run;'; put 'proc sort data=&dclib..mpe_filtersource(where=(filter_hash="&filter_hash"))'; put 'out=&outds(drop=filter_hash filter_line processed_dttm);'; put 'by filter_line;'; put 'run;'; put '%mp_filtergenerate(&outds,outref=&outref)'; put '%end;'; put '/* Now filter for current records if the MODE is EDIT or DLOAD */'; put '%local varfrom varto;'; put '%let varfrom=0;'; put 'proc sql;'; put 'select coalescec(var_txfrom,''0''), var_txto into: varfrom,:varto'; put 'from &dclib..MPE_TABLES'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and libref="%scan(&libds,1,.)" and dsn="%scan(&libds,2,.)";'; put '%put &=varfrom;'; put '%put &=varto;'; put '/**'; put '* Check if the date variables were mentioned in the query'; put '* This is a trigger for serving a historical view instead of current'; put '* we skip this part when checking an ULOAD as there are no date vars'; put '*/'; put '%if &varfrom ne 0 and (&mode=EDIT or &mode=DLOAD) %then %do;'; put '%local validityvars;'; put 'proc sql;'; put 'select count(*) into: validityvars'; put 'from &outds'; put 'where variable_nm in ("&varfrom","&varto");'; put '%if &validityvars=0 %then %do;'; put 'data _null_;'; put 'file &outref mod;'; put 'length filter_text $32767;'; put 'varfrom=symget(''varfrom'');'; put 'varto=symget(''varto'');'; put 'filter_text=catx('' '','; put '''("%sysfunc(datetime(),'',"%mf_fmtdttm()",'')"dt <'',varto,'')'''; put ');'; put 'if &filter_rk > 0 then put ''AND '' filter_text;'; put 'else put filter_text;'; put 'run;'; put '%end;'; put '%end;'; put '/**'; put '* Now do Row Level Security based on the MPE_ROW_LEVEL_SECURITY table'; put '*/'; put '/* first determine users group membership */'; put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)'; put '%local admin_check;'; put 'proc sql;'; put 'select count(*) into: admin_check'; put 'from work.groups'; put 'where groupname="&mpeadmins";'; put '%put &sysmacroname: &=admin_check &=mpeadmins;'; put '%if &admin_check=0 %then %do;'; put '%local scopeval;'; put '%if &mode=DLOAD %then %let scopeval=VIEW;'; put '%if &mode=ULOAD %then %let scopeval=EDIT;'; put '%else %let scopeval=&mode;'; put '/* extract relevant rows */'; put '%local rlsds;'; put '%let rlsds=%mf_getuniquename();'; put 'proc sql;'; put 'create table work.&rlsds as'; put 'select rls_group,'; put 'rls_group_logic as group_logic,'; put 'rls_subgroup_logic as subgroup_logic,'; put 'rls_subgroup_id as subgroup_id,'; put 'rls_variable_nm as variable_nm,'; put 'rls_operator_nm as operator_nm,'; put 'rls_raw_value as raw_value'; put 'from &mpelib..mpe_row_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and rls_scope in ("&scopeval",''ALL'')'; put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)'; put 'and rls_libref="%scan(&libds,1,.)"'; put 'and rls_table="%scan(&libds,2,.)"'; put 'and rls_active=1'; put 'order by rls_group,rls_subgroup_id;'; put '%if &sqlobs>0 %then %do;'; put '/* check if we currently have filter or not */'; put 'data ;'; put 'infile &outref end=eof;'; put 'input;'; put 'if _n_=1 and eof and cats(_infile_)='''' then newfilter=1;'; put 'output;'; put 'stop;'; put 'run;'; put 'data _null_;'; put 'set &syslast;'; put 'file &outref mod;'; put 'if newfilter=1 then put ''('';'; put 'else put ''AND ('';'; put 'run;'; put '/* loop through and apply filters for each group membership */'; put '%local fref ds;'; put '%let fref=%mf_getuniquefileref();'; put '%let ds=%mf_getuniquename();'; put 'proc sql noprint;'; put 'select distinct rls_group into : group1 -'; put 'from work.&rlsds;'; put '%do i=1 %to &sqlobs;'; put 'data work.&ds;'; put 'set work.&rlsds;'; put 'where rls_group="&&group&i";'; put 'drop rls_group;'; put 'run;'; put '%mp_filtergenerate(&ds,outref=&fref)'; put 'data _null_;'; put 'infile &fref;'; put 'file &outref mod;'; put 'input;'; put 'if &i>1 and _n_=1 then put '' OR '';'; put 'put _infile_;'; put 'run;'; put '%end;'; put 'data _null_;'; put 'file &outref mod;'; put 'put '')'';'; put 'run;'; put '%end; /* &sqlobs>0 */'; put '%else %do;'; put '%put &sysmacroname: no matching groups;'; put 'data _null_;'; put 'set work.groups;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname'; put ',msg=%str(Row Level Security Generation Error)'; put ')'; put '%end; /* &admin_check=0 */'; put '%put leaving &sysmacroname with the following query:;'; put '%local empty;'; put '%let empty=0;'; put 'data _null_;'; put 'infile &outref end=eof;'; put 'input;'; put 'putlog _infile_;'; put 'if _n_=1 and eof and cats(_infile_)='''' then do;'; put 'put ''1=1'';'; put 'call symputx(''empty'',1,''l'');'; put 'end;'; put 'run;'; put '%if &empty=1 %then %do;'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%mend mpe_filtermaster;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_gettables('; put 'uri='; put ',outds=work.mm_gettables'; put ',getauth=YES'; put ')/*/STORE SOURCE*/;'; put 'data &outds;'; put 'length uri serveruri conn_uri domainuri libname ServerContext AuthDomain'; put 'path_schema usingpkguri type tableuri $256 id $17'; put 'libdesc $200 libref engine $8 IsDBMSLibname IsPreassigned $1'; put 'tablename $50 /* metadata table names can be longer than $32 */'; put ';'; put 'keep libname libdesc libref engine ServerContext path_schema AuthDomain'; put 'tableuri tablename IsPreassigned IsDBMSLibname id;'; put 'call missing (of _all_);'; put 'uri=symget(''uri'');'; put 'rc= metadata_getattr(uri, "Name", libname);'; put 'if rc <0 then do;'; put 'put ''The library is not defined in this metadata repository.'';'; put 'stop;'; put 'end;'; put 'rc= metadata_getattr(uri, "Desc", libdesc);'; put 'rc= metadata_getattr(uri, "Libref", libref);'; put 'rc= metadata_getattr(uri, "Engine", engine);'; put 'rc= metadata_getattr(uri, "IsDBMSLibname", IsDBMSLibname);'; put 'rc= metadata_getattr(uri, "IsPreassigned", IsPreassigned);'; put 'rc= metadata_getattr(uri, "Id", Id);'; put '/*** Get associated ServerContext ***/'; put 'rc= metadata_getnasn(uri, "DeployedComponents", 1, serveruri);'; put 'if rc > 0 then rc2= metadata_getattr(serveruri, "Name", ServerContext);'; put 'else ServerContext='''';'; put '/*** If the library is a DBMS library, get the Authentication Domain'; put 'associated with the DBMS connection credentials ***/'; put 'if IsDBMSLibname="1" and "&getauth"=''YES'' then do;'; put 'rc= metadata_getnasn(uri, "LibraryConnection", 1, conn_uri);'; put 'if rc>0 then do;'; put 'rc2= metadata_getnasn(conn_uri, "Domain", 1, domainuri);'; put 'if rc2>0 then rc3= metadata_getattr(domainuri, "Name", AuthDomain);'; put 'end;'; put 'end;'; put '/*** Get the path/database schema for this library ***/'; put 'rc=metadata_getnasn(uri, "UsingPackages", 1, usingpkguri);'; put 'if rc>0 then do;'; put 'rc=metadata_resolve(usingpkguri,type,id);'; put 'if type=''Directory'' then'; put 'rc=metadata_getattr(usingpkguri, "DirectoryName", path_schema);'; put 'else if type=''DatabaseSchema'' then'; put 'rc=metadata_getattr(usingpkguri, "Name", path_schema);'; put 'else path_schema="unknown";'; put 'end;'; put '/*** Get the tables associated with this library ***/'; put '/*** If DBMS, tables are associated with DatabaseSchema ***/'; put 'if type=''DatabaseSchema'' then do;'; put 't=1;'; put 'ntab=metadata_getnasn(usingpkguri, "Tables", t, tableuri);'; put 'if ntab>0 then do t=1 to ntab;'; put 'tableuri='''';'; put 'tablename='''';'; put 'ntab=metadata_getnasn(usingpkguri, "Tables", t, tableuri);'; put 'tabrc= metadata_getattr(tableuri, "Name", tablename);'; put 'output;'; put 'end;'; put 'else put ''Library '' libname '' has no tables registered'';'; put 'end;'; put 'else if type in (''Directory'',''SASLibrary'') then do;'; put 't=1;'; put 'ntab=metadata_getnasn(uri, "Tables", t, tableuri);'; put 'if ntab>0 then do t=1 to ntab;'; put 'tableuri='''';'; put 'tablename='''';'; put 'ntab=metadata_getnasn(uri, "Tables", t, tableuri);'; put 'tabrc= metadata_getattr(tableuri, "Name", tablename);'; put 'output;'; put 'end;'; put 'else put ''Library '' libname '' has no tables registered'';'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by tablename tableuri;'; put 'run;'; put '%mend mm_gettables;'; put '%macro mm_getcols('; put 'tableuri='; put ',outds=work.mm_getcols'; put ')/*/STORE SOURCE*/;'; put 'data &outds;'; put 'keep col: SAS:;'; put 'length assoc uri coluri colname coldesc SASColumnType SASFormat SASInformat'; put 'SASPrecision SASColumnLength $256;'; put 'call missing (of _all_);'; put 'uri=symget(''tableuri'');'; put 'n=1;'; put 'do while (metadata_getnasn(uri,''Columns'',n,coluri)>0);'; put 'rc3=metadata_getattr(coluri,"Name",colname);'; put 'rc3=metadata_getattr(coluri,"Desc",coldesc);'; put 'rc4=metadata_getattr(coluri,"SASColumnType",SASColumnType);'; put 'rc5=metadata_getattr(coluri,"SASFormat",SASFormat);'; put 'rc6=metadata_getattr(coluri,"SASInformat",SASInformat);'; put 'rc7=metadata_getattr(coluri,"SASPrecision",SASPrecision);'; put 'rc8=metadata_getattr(coluri,"SASColumnLength",SASColumnLength);'; put 'output;'; put 'call missing(colname,coldesc,SASColumnType,SASFormat,SASInformat'; put ',SASPrecision,SASColumnLength);'; put 'n+1;'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by colname;'; put 'run;'; put '%mend mm_getcols;'; put '%macro mm_createdataset(libds=,tableuri=,outds=work.mm_createdataset,mDebug=0);'; put '%local dbg errorcheck tempds1 tempds2 tempds3;'; put '%if &mDebug=0 %then %let dbg=*;'; put '%let errorcheck=1;'; put '%if %index(&libds,.)>0 %then %do;'; put '/* get lib uri */'; put 'data;run;%let tempds1=&syslast;'; put '%mm_getlibs(outds=&tempds1)'; put 'data _null_;'; put 'set &tempds1;'; put 'if upcase(libraryref)="%upcase(%scan(&libds,1,.))";'; put 'call symputx(''liburi'',LibraryId,''l'');'; put 'run;'; put '/* get ds uri */'; put 'data;run;%let tempds2=&syslast;'; put '%mm_gettables(uri=&liburi,outds=&tempds2)'; put 'data _null_;'; put 'set &tempds2;'; put 'where upcase(tablename)="%upcase(%scan(&libds,2,.))";'; put '&dbg putlog tableuri=;'; put 'call symputx(''tableuri'',tableuri);'; put 'run;'; put '%end;'; put 'data;run;'; put '%let tempds3=&syslast;'; put '%mm_getcols(tableuri=&tableuri,outds=&tempds3)'; put '%if %mf_nobs(&tempds3)=0 %then %do;'; put '%put &libds (&tableuri) has no columns defined!!;'; put 'data &outds;'; put 'run;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'set &tempds3 end=last;'; put 'if _n_=1 then call execute(''data &outds;'');'; put 'length attrib $32767;'; put 'if SAScolumntype=''C'' then type=''$'';'; put 'attrib=''attrib ''!!cats(colname)!!'' length=''!!cats(type,SASColumnLength,''.'');'; put 'if not missing(sasformat) then fmt='' format=''!!cats(sasformat);'; put 'if not missing(sasinformat) then infmt='' informat=''!!cats(sasinformat);'; put 'if not missing(coldesc) then desc='' label=''!!quote(cats(coldesc));'; put 'attrib=trim(attrib)!!fmt!!infmt!!desc!!'';'';'; put 'call execute(attrib);'; put 'if last then call execute(''call missing(of _all_);stop;run;'');'; put 'run;'; put '%mend mm_createdataset;'; put '%macro dc_createdataset(libds=mm_getlibs,outds=viewdata);'; put '%mm_createdataset(libds=&libds,outds=viewdata)'; put '%mend dc_createdataset;'; put '%macro mm_gettableid('; put 'libref='; put ',ds='; put ',outds=work.mm_gettableid'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put 'data &outds;'; put 'length uri usingpkguri id type tableuri tablename tmpuri $256;'; put 'call missing(of _all_);'; put 'keep tableuri tablename;'; put 'n=1;'; put 'rc=0;'; put 'if metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",n,uri)<1 then do;'; put 'put "Library &libref not found";'; put 'stop;'; put 'end;'; put '&mD.putlog "uri is " uri;'; put 'if metadata_getnasn(uri, "UsingPackages", 1, usingpkguri)>0 then do;'; put 'rc=metadata_resolve(usingpkguri,type,id);'; put '&mD.putlog "Type is " type;'; put 'end;'; put 'if type=''DatabaseSchema'' then tmpuri=usingpkguri;'; put 'else tmpuri=uri;'; put 't=1;'; put 'do while(metadata_getnasn(tmpuri, "Tables", t, tableuri)>0);'; put 't+1;'; put 'rc= metadata_getattr(tableuri, "Name", tablename);'; put '&mD.putlog "Table is " tablename;'; put 'if upcase(tablename)="%upcase(&ds)" then do;'; put 'output;'; put 'end;'; put 'end;'; put 'run;'; put '%mend mm_gettableid;'; put '%macro dc_gettableid(libref='; put ',ds='; put ',outds=);'; put '%mm_gettableid(libref=&libref,ds=&ds,outds=&outds)'; put '%if %mf_nobs(&outds)=0 %then %do;'; put 'data &outds;'; put 'tableuri='''';'; put 'tablename="&ds";'; put 'run;'; put '%end;'; put '%mend dc_gettableid;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getvarcount(libds,typefilter=A'; put ')/*/STORE SOURCE*/;'; put '%local dsid nvars rc outcnt x;'; put '%let dsid=%sysfunc(open(&libds));'; put '%let nvars=.;'; put '%let outcnt=0;'; put '%let typefilter=%upcase(&typefilter);'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &typefilter=A %then %let outcnt=&nvars;'; put '%else %if &nvars>0 %then %do x=1 %to &nvars;'; put '/* increment based on variable type */'; put '%if %sysfunc(vartype(&dsid,&x))=&typefilter %then %do;'; put '%let outcnt=%eval(&outcnt+1);'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put unable to open &libds (rc=&dsid);'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '&outcnt'; put '%mend mf_getvarcount;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mp_getcols(ds, outds=work.cols);'; put '%local dropds;'; put 'proc contents noprint data=&ds'; put 'out=_data_ (keep=name type length label varnum format:);'; put 'run;'; put '%let dropds=&syslast;'; put 'data &outds(keep=name type length varnum format label ddtype fmtname);'; put 'set &dropds(rename=(format=fmtname type=type2));'; put 'name=upcase(name);'; put 'if type2=2 then do;'; put 'length format $49.;'; put 'if fmtname='''' then format=cats(''$'',length,''.'');'; put 'else if formatl=0 then format=cats(fmtname,''.'');'; put 'else format=cats(fmtname,formatl,''.'');'; put 'type=''C'';'; put 'ddtype=''CHARACTER'';'; put 'end;'; put 'else do;'; put 'if fmtname='''' then format=cats(length,''.'');'; put 'else if formatl=0 then format=cats(fmtname,''.'');'; put 'else if formatd=0 then format=cats(fmtname,formatl,''.'');'; put 'else format=cats(fmtname,formatl,''.'',formatd);'; put 'type=''N'';'; put 'if format=:''DATETIME'' or format=:''E8601DT'' or format=:''NLDATM'''; put 'then ddtype=''DATETIME'';'; put 'else if format=:''DATE'' or format=:''DDMMYY'' or format=:''MMDDYY'''; put 'or format=:''YYMMDD'' or format=:''E8601DA'' or format=:''B8601DA'''; put 'or format=:''MONYY'' or format=:''NLDATE'''; put 'then ddtype=''DATE'';'; put 'else if format=:''TIME'' then ddtype=''TIME'';'; put 'else ddtype=''NUMERIC'';'; put 'end;'; put 'if label='''' then label=name;'; put 'run;'; put 'proc sql;'; put 'drop table &dropds;'; put '%mend mp_getcols;'; put '/** @cond */'; put '%macro mf_existfeature(feature'; put ')/*/STORE SOURCE*/;'; put '%let feature=%upcase(&feature);'; put '%local platform;'; put '%let platform=%mf_getplatform();'; put '%if &feature= %then %do;'; put '%put No feature was requested for detection;'; put '%end;'; put '%else %if &feature=COLCONSTRAINTS %then %do;'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=PROCLUA %then %do;'; put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */'; put '%if &platform=SASVIYA %then 1;'; put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;'; put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=DBMS_MEMTYPE %then %do;'; put '/* does dbms_memtype exist in dictionary.tables? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=EXPORTXLS %then %do;'; put '/* is it possible to PROC EXPORT an excel file? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;'; put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;'; put '%else 0;'; put '%end;'; put '%else %do;'; put '-1'; put '%put &sysmacroname: &feature not found;'; put '%end;'; put '%mend mf_existfeature;'; put '/** @endcond */'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=''Schema/Owner'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_getconstraints(lib=WORK'; put ',ds='; put ',outds=mp_getconstraints'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '/**'; put '* Cater for environments where sashelp.vcncolu is not available'; put '*/'; put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;'; put 'proc sql;'; put 'create table &outds('; put 'libref char(8)'; put ',TABLE_NAME char(32)'; put ',constraint_type char(8) label=''Constraint Type'''; put ',constraint_name char(32) label=''Constraint Name'''; put ',column_name char(32) label=''Column'''; put ',constraint_order num'; put ');'; put '%return;'; put '%end;'; put '/**'; put '* Neither dictionary tables nor sashelp provides a constraint order column,'; put '* however they DO arrive in the correct order. So, create the col.'; put '**/'; put '%local vw;'; put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);'; put 'data &vw /view=&vw;'; put 'set sashelp.vcncolu;'; put 'where table_catalog="&lib";'; put '/* use retain approach to reset the constraint order with each constraint */'; put 'length tmp $1000;'; put 'retain tmp;'; put 'drop tmp;'; put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;'; put 'constraint_order=1;'; put 'end;'; put 'else constraint_order+1;'; put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);'; put 'run;'; put '/* must use SQL as proc datasets does not support length changes */'; put 'proc sql noprint;'; put 'create table &outds as'; put 'select upcase(a.TABLE_CATALOG) as libref'; put ',upcase(a.TABLE_NAME) as TABLE_NAME'; put ',a.constraint_type'; put ',a.constraint_name'; put ',b.column_name'; put ',b.constraint_order'; put 'from dictionary.TABLE_CONSTRAINTS a'; put 'left join &vw b'; put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)'; put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)'; put 'and a.constraint_name=b.constraint_name'; put '/**'; put '* We cannot apply this clause to the underlying dictionary table. See:'; put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867'; put '* cannot use`where calculated libref="&lib"` either as it will STILL execute'; put '* all the underlying constraint queries, causing exception errors in some'; put '* cases: https://github.com/sasjs/core/issues/283'; put '*/'; put 'where a.TABLE_CATALOG="&lib"'; put '%if "&ds" ne "" %then %do;'; put 'and upcase(a.TABLE_NAME)="&ds"'; put 'and upcase(b.TABLE_NAME)="&ds"'; put '%end;'; put 'order by libref, table_name, constraint_name, constraint_order'; put ';'; put '/* tidy up */'; put '%mp_dropmembers('; put '&vw,'; put 'iftrue=(&mdebug=0)'; put ')'; put '%mend mp_getconstraints;'; put '%macro mp_getpk('; put 'lib,'; put 'ds=0,'; put 'outds=work.mp_getpk,'; put 'mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local engine schema ds1 ds2 ds3 dsn tabs1 tabs2 sum pk4sure pkdefault finalpks'; put 'pkfromindex;'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let engine=%mf_getengine(&lib);'; put '%let schema=%mf_getschema(&lib);'; put '%let ds1=%mf_getuniquename(prefix=getpk_ds1);'; put '%let ds2=%mf_getuniquename(prefix=getpk_ds2);'; put '%let ds3=%mf_getuniquename(prefix=getpk_ds3);'; put '%let tabs1=%mf_getuniquename(prefix=getpk_tabs1);'; put '%let tabs2=%mf_getuniquename(prefix=getpk_tabs2);'; put '%let sum=%mf_getuniquename(prefix=getpk_sum);'; put '%let pk4sure=%mf_getuniquename(prefix=getpk_pk4sure);'; put '%let pkdefault=%mf_getuniquename(prefix=getpk_pkdefault);'; put '%let pkfromindex=%mf_getuniquename(prefix=getpk_pkfromindex);'; put '%let finalpks=%mf_getuniquename(prefix=getpk_finalpks);'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put 'proc sql;'; put 'create table &ds1 as'; put 'select libname as libref'; put ',upcase(memname) as dsn'; put ',memtype'; put ',upcase(name) as name'; put ',type'; put ',length'; put ',varnum'; put ',label'; put ',format'; put ',idxusage'; put ',notnull'; put 'from dictionary.columns'; put 'where upcase(libname)="&lib"'; put '%if &ds ne 0 %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put '%if &engine=SQLSVR %then %do;'; put 'proc sql;'; put 'connect using &lib;'; put 'create table work.&ds2 as'; put 'select * from connection to &lib('; put 'select'; put 's.name as SchemaName,'; put 't.name as memname,'; put 'tc.name as name,'; put 'ic.key_ordinal as KeyOrderNr'; put 'from'; put 'sys.schemas s'; put 'inner join sys.tables t on s.schema_id=t.schema_id'; put 'inner join sys.indexes i on t.object_id=i.object_id'; put 'inner join sys.index_columns ic on i.object_id=ic.object_id'; put 'and i.index_id=ic.index_id'; put 'inner join sys.columns tc on ic.object_id=tc.object_id'; put 'and ic.column_id=tc.column_id'; put 'where i.is_primary_key=1'; put 'and s.name=%str(%'')&schema%str(%'')'; put 'order by t.name, ic.key_ordinal ;'; put ');disconnect from &lib;'; put 'create table &ds3 as'; put 'select a.*'; put ',case when b.name is not null then 1 else 0 end as pk_ind'; put 'from work.&ds1 a'; put 'left join work.&ds2 b'; put 'on a.dsn=b.memname'; put 'and upcase(a.name)=upcase(b.name)'; put 'order by libref,dsn;'; put '%end;'; put '%else %do;'; put '%if &ds = 0 %then %let dsn=;'; put '/* get all constraints, in constraint order*/'; put '%mp_getconstraints(lib=&lib,ds=&dsn,outds=work.&ds2)'; put '/* extract cols that are clearly primary keys */'; put 'proc sql;'; put 'create table &pk4sure as'; put 'select libref'; put ',table_name'; put ',constraint_name'; put ',constraint_order'; put ',column_name as name'; put 'from work.&ds2'; put 'where constraint_type=''PRIMARY'''; put 'order by 1,2,3,4;'; put '/* extract unique constraints where every col is also NOT NULL */'; put 'proc sql;'; put 'create table &sum as'; put 'select a.libref'; put ',a.table_name'; put ',a.constraint_name'; put ',count(a.column_name) as unq_cnt'; put ',count(b.column_name) as nul_cnt'; put 'from work.&ds2(where=(constraint_type =''UNIQUE'')) a'; put 'left join work.&ds2(where=(constraint_type =''NOT NULL'')) b'; put 'on a.libref=b.libref'; put 'and a.table_name=b.table_name'; put 'and a.column_name=b.column_name'; put 'group by 1,2,3'; put 'having unq_cnt=nul_cnt;'; put '/* extract cols from the relevant unique constraints */'; put 'create table &pkdefault as'; put 'select a.libref'; put ',a.table_name'; put ',a.constraint_name'; put ',b.constraint_order'; put ',b.column_name as name'; put 'from &sum a'; put 'left join &ds2(where=(constraint_type =''UNIQUE'')) b'; put 'on a.libref=b.libref'; put 'and a.table_name=b.table_name'; put 'and a.constraint_name=b.constraint_name'; put 'order by 1,2,3,4;'; put '/* extract cols from the relevant unique INDEXES */'; put 'create table &pkfromindex as'; put 'select libname as libref'; put ',memname as table_name'; put ',indxname as constraint_name'; put ',indxpos as constraint_order'; put ',name'; put 'from dictionary.indexes'; put 'where nomiss=''yes'' and unique=''yes'' and upcase(libname)="&lib"'; put '%if &ds ne 0 %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put 'order by 1,2,3,4;'; put '/* create one table */'; put 'data &finalpks;'; put 'set &pkdefault &pk4sure &pkfromindex;'; put 'pk_ind=1;'; put '/* if there are multiple unique constraints, take the first */'; put 'by libref table_name constraint_name;'; put 'retain keepme;'; put 'if first.table_name then keepme=1;'; put 'if first.constraint_name and not first.table_name then keepme=0;'; put 'if keepme=1;'; put 'run;'; put '/* join back to starting table */'; put 'proc sql;'; put 'create table &ds3 as'; put 'select a.*'; put ',b.constraint_order'; put ',case when b.pk_ind=1 then 1 else 0 end as pk_ind'; put 'from work.&ds1 a'; put 'left join work.&finalpks b'; put 'on a.libref=b.libref'; put 'and a.dsn=b.table_name'; put 'and upcase(a.name)=upcase(b.name)'; put 'order by libref,dsn,constraint_order;'; put '%end;'; put '/* prepare tables */'; put 'proc sql;'; put 'create table work.&tabs1 as select'; put 'libname as libref'; put ',upcase(memname) as dsn'; put ',memtype'; put '%if %mf_existfeature(DBMS_MEMTYPE)=1 %then %do;'; put ',dbms_memtype'; put '%end;'; put '%else %do;'; put ',''n/a'' as dbms_memtype format=$32.'; put '%end;'; put ',typemem'; put ',memlabel'; put ',nvar'; put ',compress'; put 'from dictionary.tables'; put 'where upcase(libname)="&lib"'; put '%if &ds ne 0 %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put 'data &tabs2;'; put 'set &ds3;'; put 'length pk_fields $512;'; put 'retain pk_fields;'; put 'by libref dsn constraint_order;'; put 'if first.dsn then pk_fields='''';'; put 'if pk_ind=1 then pk_fields=catx('' '',pk_fields,name);'; put 'if last.dsn then output;'; put 'run;'; put 'proc sql;'; put 'create table &outds as'; put 'select a.libref'; put ',a.dsn'; put ',a.memtype'; put ',a.dbms_memtype'; put ',a.typemem'; put ',a.memlabel'; put ',a.nvar'; put ',a.compress'; put ',b.pk_fields'; put 'from work.&tabs1 a'; put 'left join work.&tabs2 b'; put 'on a.libref=b.libref'; put 'and a.dsn=b.dsn;'; put '/* tidy up */'; put '%mp_dropmembers('; put '&ds1 &ds2 &ds3 &dsn &tabs1 &tabs2 &sum &pk4sure &pkdefault &finalpks,'; put 'iftrue=(&mdebug=0)'; put ')'; put '%mend mp_getpk;'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_mkdir(dir'; put ')/*/STORE SOURCE*/;'; put '%local lastchar child parent;'; put '%let lastchar = %substr(&dir, %length(&dir));'; put '%if (%bquote(&lastchar) eq %str(:)) %then %do;'; put '/* Cannot create drive mappings */'; put '%return;'; put '%end;'; put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;'; put '/* last char is a slash */'; put '%if (%length(&dir) eq 1) %then %do;'; put '/* one single slash - root location is assumed to exist */'; put '%return;'; put '%end;'; put '%else %do;'; put '/* strip last slash */'; put '%let dir = %substr(&dir, 1, %length(&dir)-1);'; put '%end;'; put '%end;'; put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;'; put '/* directory does not exist so prepare to create */'; put '/* first get the childmost directory */'; put '%let child = %scan(&dir, -1, %str(/\:));'; put '/*'; put 'If child name = path name then there are no parents to create. Else'; put 'they must be recursively scanned.'; put '*/'; put '%if (%length(&dir) gt %length(&child)) %then %do;'; put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));'; put '%mf_mkdir(&parent)'; put '%end;'; put '/*'; put 'Now create the directory. Complain loudly of any errs.'; put '*/'; put '%let dname = %sysfunc(dcreate(&child, &parent));'; put '%if (%bquote(&dname) eq ) %then %do;'; put '%put %str(ERR)OR: could not create &parent + &child;'; put '%abort cancel;'; put '%end;'; put '%else %do;'; put '%put Directory created: &dir;'; put '%end;'; put '%end;'; put '/* exit quietly if directory did exist.*/'; put '%mend mf_mkdir;'; put '%macro mp_searchdata(lib='; put ',ds='; put ',string= /* the query will use a contains (?) operator */'; put ',numval= /* numeric must match exactly */'; put ',outloc=0'; put ',outlib=MPSEARCH'; put ',outobs=-1'; put ',filter_text=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local table_list table table_num table colnum col start_tm check_tm vars type'; put 'coltype;'; put '%put process began at %sysfunc(datetime(),datetime19.);'; put '%if &syscc ge 4 %then %do;'; put '%put %str(WAR)NING: SYSCC=&syscc on macro entry;'; put '%return;'; put '%end;'; put '%if &string = %then %let type=N;'; put '%else %let type=C;'; put '%if "&outloc"="0" %then %do;'; put '%let outloc=%sysfunc(pathname(work))/%mf_getuniquename();'; put '%end;'; put '%mf_mkdir(&outloc)'; put 'libname &outlib "&outloc";'; put '/* get the list of tables in the library */'; put 'proc sql noprint;'; put 'select distinct memname into: table_list separated by '' '''; put 'from dictionary.tables'; put 'where upcase(libname)="%upcase(&lib)"'; put '%if &ds ne %then %do;'; put 'and upcase(memname)=%upcase("&ds")'; put '%end;'; put ';'; put '/* check that we have something to check */'; put '%if %length(&table_list)=0 %then %put library &lib contains no tables!;'; put '/* loop through each table */'; put '%else %do table_num=1 %to %sysfunc(countw(&table_list,%str( )));'; put '%let table=%scan(&table_list,&table_num,%str( ));'; put '%let vars=%mf_getvarlist(&lib..&table);'; put '%if %length(&vars)=0 %then %do;'; put '%put NO COLUMNS IN &lib..&table! This will be skipped.;'; put '%end;'; put '%else %do;'; put '%let check_tm=%sysfunc(datetime());'; put '/* prep input */'; put 'data &outlib..&table;'; put 'set &lib..&table;'; put 'where %unquote(&filter_text) and ( 0'; put '/* loop through columns */'; put '%do colnum=1 %to %sysfunc(countw(&vars,%str( )));'; put '%let col=%scan(&vars,&colnum,%str( ));'; put '%let coltype=%mf_getvartype(&lib..&table,&col);'; put '%if &type=C and &coltype=C %then %do;'; put '/* if a char column, see if it contains the string */'; put 'or ("&col"n ? "&string")'; put '%end;'; put '%else %if &type=N and &coltype=N %then %do;'; put '/* if numeric match exactly */'; put 'or ("&col"n = &numval)'; put '%end;'; put '%end;'; put ');'; put '%if &outobs>-1 %then %do;'; put 'if _n_ > &outobs then stop;'; put '%end;'; put 'run;'; put '%put Search query for &table took'; put '%sysevalf(%sysfunc(datetime())-&check_tm) seconds;'; put '%if &syscc ne 0 %then %do;'; put '%put %str(ERR)ROR: SYSCC=&syscc when processing &lib..&table;'; put '%return;'; put '%end;'; put '%if %mf_nobs(&outlib..&table)=0 %then %do;'; put 'proc sql;'; put 'drop table &outlib..&table;'; put '%end;'; put '%end;'; put '%end;'; put '%put process finished at %sysfunc(datetime(),datetime19.);'; put '%mend mp_searchdata;'; put '%macro mp_validatecol(incol,rule,outcol);'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename();'; put '%if &rule=ISINT %then %do;'; put '&outcol=0;'; put 'if not missing(&incol) then do;'; put '&tempcol=input(&incol,?? best32.);'; put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;'; put 'end;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=ISNUM %then %do;'; put '/*'; put 'credit SOREN LASSEN'; put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html'; put '*/'; put '&tempcol=input(&incol,?? best32.);'; put 'if missing(&tempcol) then &outcol=0;'; put 'else &outcol=1;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=LIBDS %then %do;'; put '/* match libref.dataset */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%else %if &rule=FORMAT %then %do;'; put '/* match valid format - regex could probably be improved */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%mend mp_validatecol;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file viewdata.sas'; put '@brief Provide the raw view of the data'; put '@details Pass a LIBDS and FILTER_RK to return a dataset for viewing.'; put 'VIEW datasets include all columns / rows (unlike EDIT, which are filtered'; put 'for current records and don''t include the SCD2 etc cols).'; put '

Service Inputs

'; put '
SASCONTROLTABLE
'; put '|LIBDS:$41.|FILTER_RK:$5.|SEARCHTYPE:$4|SEARCHVAL:$1000'; put '|---|---|---|---'; put '|DC258467.MPE_X_TEST|-1|CHAR|Some String|'; put '

Service Outputs

'; put '
cols
'; put '@li DDTYPE'; put '@li FORMAT'; put '@li LABEL'; put '@li LENGTH'; put '@li NAME'; put '@li TYPE'; put '@li VARNUM'; put '
sasparams
'; put '@li FILTER_TEXT'; put '@li NOBS'; put '@li PK_FIELDS - string seperated list of primary key fields, if they exist'; put '@li TABLENAME'; put '@li TABLEURI'; put '@li VARS'; put '
versions
'; put 'history of DC versions for this particular table'; put '
viewdata
'; put 'The raw data from the target table.'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li dc_createdataset.sas'; put '@li dc_gettableid.sas'; put '@li mf_existds.sas'; put '@li mf_getvarcount.sas'; put '@li mf_nobs.sas'; put '@li mf_verifymacvars.sas'; put '@li mp_abort.sas'; put '@li mp_cntlout.sas'; put '@li mp_getcols.sas'; put '@li mp_getpk.sas'; put '@li mp_jsonout.sas'; put '@li mp_searchdata.sas'; put '@li mp_validatecol.sas'; put '@li mpe_columnlevelsecurity.sas'; put '@li mpe_dsmeta.sas'; put '@li mpe_getversions.sas'; put '@li mpe_filtermaster.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '/* configure macvars */'; put '%global LIBDS FILTER_RK SEARCHVAL SEARCHTYPE FMT_IND;'; put '%let maxrows=250;'; put '/* avoid code injection */'; put '%let FMT_IND=0;'; put '%let SEARCHTYPE=;'; put '%let SEARCHVAL=;'; put '%let FILTER_RK=;'; put '%let LIBDS=;'; put '/**'; put '* Validate inputs'; put '*/'; put 'data work.intest;'; put 'length libds $41 filter_rk 8. searchval $100 searchtype $4;'; put 'set work.SASCONTROLTABLE;'; put 'call symputx(''orig_libds'',libds);'; put '/* validate filter_rk */'; put 'if filter_rk le 0 then filter_rk=-1;'; put '/* check if the request is for a format catalog */'; put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'call symputx(''fmt_ind'',1);'; put 'end;'; put 'putlog (_all_)(=);'; put '/* validate libds */'; put '%mp_validatecol(LIBDS,LIBDS,is_libds)'; put 'if searchtype in (''CHAR'',''NUM'') then do;'; put 'searchval=tranwrd(searchval,''%'','''');'; put 'searchval=tranwrd(searchval,''&'','''');'; put 'searchval=tranwrd(searchval,'';'','''');'; put 'searchval=tranwrd(searchval,''"'','''');'; put 'call symputx(''searchtype'',searchtype);'; put 'call symputx(''searchval'',searchval);'; put 'end;'; put 'else if searchtype not in ('''',''NONE'') then do;'; put 'putlog ''ERR'' ''OR: Invalid searchtype:'' searchtype;'; put 'stop;'; put 'end;'; put 'if is_libds=0 then do;'; put 'putlog ''ERR'' ''OR: Invalid libds:'' libds;'; put 'stop;'; put 'end;'; put 'else do;'; put 'call symputx(''filter_rk'',filter_rk);'; put 'call symputx(''libds'',libds);'; put 'end;'; put 'output;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (%mf_verifymacvars(libds filter_rk fmt_ind)=0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem with macro inputs)'; put ')'; put '%mp_abort(iftrue= (%mf_nobs(work.intest)=0)'; put ',mac=&_program'; put ',msg=%str(Some err with service inputs)'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '/**'; put '* assign the Library'; put '*/'; put '%dc_assignlib(READ,%scan(&LIBDS,1,.))'; put '/* abort if looking for a format and the catalog doesn''t exist */'; put '%mp_abort(iftrue= (&fmt_ind=1 and %sysfunc(exist(&libds,CATALOG))=0)'; put ',mac=&_program..sas'; put ',msg=%str(Catalog &libds does not exist!)'; put ')'; put '/**'; put 'check if dataset can actually be opened - as library may exist but it may not'; put 'be possible to assign, and even if it can, the physical table may not exist'; put '**/'; put 'data _null_;'; put 'if &fmt_ind=0 then do;'; put 'dsid=open("&libds");'; put 'rc=close(dsid);'; put 'end;'; put 'else dsid=42;'; put 'call symputx(''existds'',dsid,''l'');'; put 'putlog ''dataset exists check:'' dsid;'; put 'run;'; put '/**'; put '* get the data'; put '*/'; put '%global dsobs;'; put '%let dsobs=0;'; put '%macro x();'; put '%if &existds>0 %then %do;'; put '%if &fmt_ind=1 %then %do;'; put '/* export format and point the libds to the output table from here on */'; put '%mp_cntlout('; put 'libcat=&libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '%let libds=WORK.FMTEXTRACT;'; put 'proc datasets lib=work noprint;'; put 'modify FMTEXTRACT;'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%end;'; put 'proc sql noprint;'; put 'select count(*) into: dsobs from &libds;'; put '%put preparing query;'; put '%mpe_filtermaster(VIEW,&libds,'; put 'dclib=&mpelib,'; put 'filter_rk=&filter_rk,'; put 'outref=filtref,'; put 'outds=work.query'; put ')'; put '%put printing generated filterquery:;'; put 'data _null_;'; put 'infile filtref;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%if &searchtype=NONE or "%trim(&searchtype) " = " " %then %do;'; put '/* get row count */'; put 'filename rows temp;'; put 'data _null_;'; put 'file rows;'; put 'infile filtref end=eof;'; put 'input;'; put 'if _n_=1 then do;'; put 'put ''proc sql;'';'; put 'put "select count(*) into: dsobs from &libds where";'; put 'end;'; put 'put _infile_;'; put 'if eof then put '';'';'; put 'run;'; put 'data _null_;'; put 'infile rows;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%inc rows;'; put '/* send actual data, filtered and row-capped */'; put 'data work.viewdata;'; put 'set &libds;'; put 'where %inc filtref;;'; put 'if _n_>&maxrows then stop;'; put 'run;'; put '%if %mf_nobs(work.viewdata)=0 %then %do;'; put 'data work.viewdata;'; put '/* send empty row if empty table to help with hot rendering */'; put 'output;'; put 'set work.viewdata;'; put 'run;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data work.vwsearch/view=work.vwsearch;'; put 'set &libds;'; put 'where %inc filtref;;'; put 'run;'; put '%if %upcase(&searchtype)=CHAR %then %do;'; put '%mp_searchdata(lib=work'; put ',ds=vwsearch'; put ',string=%superq(searchval)'; put ',outobs=&maxrows'; put ')'; put '%end;'; put '%else %if %upcase(&searchtype)=NUM %then %do;'; put '%mp_searchdata(lib=work'; put ',ds=vwsearch'; put ',numval=%superq(searchval)'; put ',outobs=&maxrows'; put ')'; put '%end;'; put '%if %mf_existds(libds=MPSEARCH.vwsearch) %then %do;'; put '%let dsobs=%mf_nobs(MPSEARCH.vwsearch);'; put 'data viewdata;'; put 'set MPSEARCH.vwsearch;'; put 'if _n_<&maxrows;'; put 'run;'; put '%end;'; put '%else %do;'; put '%let dsobs=0;'; put 'data viewdata;'; put 'set &libds;'; put 'stop;'; put 'run;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '/* physical table is not accessible so create from metatadata definition */'; put '%dc_createdataset(libds=&libds,outds=viewdata)'; put 'data viewData;'; put 'output;'; put 'set viewdata;'; put 'run;'; put '/* make filtref / work.query / work.groups to avoid downstream issues */'; put 'filename filtref temp;'; put 'data work.query;'; put 'file filtref;'; put 'x=0;'; put 'put x;'; put 'run;'; put 'data work.groups;'; put 'length groupuri groupname $32 groupdesc $128 ;'; put 'call missing (of _all_);'; put 'output;'; put 'stop;'; put 'run;'; put '%end;'; put '%mend x; %x()'; put '/* apply column level security */'; put '%mpe_columnlevelsecurity(%scan(&libds,1,.),%scan(&libds,2,.),work.viewdata'; put ',mode=VIEW'; put ',clsds=&mpelib..mpe_column_level_security'; put ',groupds=work.groups /* was created in mpe_filtermaster */'; put ',outds=work.viewdata2'; put ',outmeta=work.cls_rules'; put ')'; put '/* get table uri (if sas 9) to enable linking direct to lineage */'; put '%dc_gettableid(libref=%scan(&libds,1,.)'; put ',ds=%scan(&libds,2,.)'; put ',outds=work.parambase'; put ')'; put 'data _null_;'; put 'infile filtref end=eof;'; put 'input;'; put 'length filter_text $32767;'; put 'retain filter_text;'; put 'filter_text=catx('' '',filter_text,_infile_);'; put 'if eof then do;'; put 'if cats(filter_text)=''1=1'' then filter_text='''';'; put 'call symputx(''filter_text'',filter_text);'; put 'end;'; put 'run;'; put '%mp_getpk(%scan(&libds,1,.), ds=%scan(&libds,2,.), outds=work.pk_fields)'; put '%let pk_fields=;'; put 'data _null_;'; put 'set work.pk_fields;'; put 'call symputx(''pk_fields'',pk_fields);'; put 'run;'; put 'data work.sasparams;'; put 'set work.parambase;'; put 'format FILTER_TEXT $32767.;'; put 'FILTER_TEXT=symget(''FILTER_TEXT'');'; put 'length PK_FIELDS $512;'; put 'PK_FIELDS=symget(''PK_FIELDS'');'; put 'nobs=&dsobs;'; put 'vars=%mf_getvarcount(viewdata);'; put 'maxrows=&maxrows;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%mp_getcols(&libds, outds=cols)'; put '%mpe_dsmeta(&orig_libds, outds=dsmeta)'; put '%mpe_getversions(&mpelib,'; put '%scan(&orig_libds,1,.),'; put '%scan(&orig_libds,2,.),'; put 'outds=versions'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,cls_rules)'; put '%webout(OBJ,cols)'; put '%webout(OBJ,dsmeta)'; put '%webout(OBJ,query)'; put '%webout(OBJ,sasparams)'; put '%webout(OBJ,versions)'; put '%webout(OBJ,viewData2,fmt=Y,missing=STRING,showmeta=YES,dslabel=viewdata)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=viewlibarray; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getlibs;'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file viewlibarray.sas'; put '@brief List the libraries for view access'; put '@details'; put '

SAS Macros

'; put '@li dc_getlibs.sas'; put '@li mp_abort.sas'; put '@li mf_getuser.sas'; put '@li mpe_getgroups.sas'; put '@li mm_webout.sas'; put '@li mf_existds.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%let keepvars=libraryref libraryname;'; put 'data _null_;'; put 'length keepvars $32;'; put 'set %sysfunc(ifc(%mf_existds(iwant),iwant,_null_));'; put 'call symputx(''keepvars'',keepvars);'; put 'run;'; put '/**'; put '* get full list of libraries'; put '*/'; put '%dc_getlibs(outds=work.mm_getLibs)'; put '/* get security groups */'; put '%mpe_getgroups(user=%mf_getuser(),outds=groups)'; put '/* get security settings */'; put 'data sec;'; put 'set &mpelib..mpe_security;'; put 'where &dc_dttmtfmt. lt tx_to and ACCESS_LEVEL=''VIEW'';'; put 'run;'; put '/* check for any matching groups */'; put 'proc sql noprint;'; put 'create table matches as'; put 'select * from sec'; put 'where upcase(sas_group) in (select upcase(groupname) from groups);'; put 'select count(*) into: securitygroupscount from matches;'; put 'select count(*) into: ALL_CNT from matches where libref=''*ALL*'';'; put '%put securitygroupscount=&securitygroupscount;'; put '%put ALL_CNT=&ALL_CNT;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%macro mpestp_viewlibs();'; put '%if not %symexist(DC_RESTRICT_VIEWER) %then %let DC_RESTRICT_VIEWER=NO;'; put '/* scenario 1 - user is in admin group, hence can view all libraries */'; put 'proc sql noprint;'; put 'select count(*) into: scenario1 from groups where groupname="&mpeadmins";'; put '%if &scenario1>0 %then %do;'; put '%put user in admin group (scenario1=&scenario1);'; put '%return;'; put '%end;'; put '/* scenario 2 - viewer unrestricted and no groups listed */'; put '%if &DC_RESTRICT_VIEWER=NO and &securitygroupscount=0 %then %do;'; put '%put DC_RESTRICT_VIEWER=&DC_RESTRICT_VIEWER;'; put '%put securitygroupscount=&securitygroupscount;'; put '%return;'; put '%end;'; put '/* scenario 3 - an *ALL* libref is listed */'; put '%if &all_cnt>0 %then %do;'; put '%put all_cnt=&all_cnt;'; put '%return;'; put '%end;'; put '/* scenario 4 - specific librefs listed */'; put '%if &securitygroupscount>0 %then %do;'; put '%put scenario 4;'; put '%put securitygroupscount=&securitygroupscount;'; put 'proc sql;'; put 'delete from mm_getLibs'; put 'where upcase(libraryref) not in (select upcase(libref) from matches);'; put '%return;'; put '%end;'; put '/* viewer restricted and no groups listed */'; put '%if &DC_RESTRICT_VIEWER=YES and &securitygroupscount=0 %then %do;'; put '%put DC_RESTRICT_VIEWER=&DC_RESTRICT_VIEWER;'; put '%put securitygroupscount=&securitygroupscount;'; put 'data mm_getlibs;'; put 'set mm_getlibs;'; put 'stop;'; put 'run;'; put '%return;'; put '%end;'; put '%mp_abort(iftrue= (1=1)'; put ',mac=&_program..sas'; put ',msg=%str(unhandled security logic error!)'; put ')'; put '%mend mpestp_viewlibs;'; put '%mpestp_viewlibs()'; put '%global dc_viewlib_check;'; put '/**'; put '* deal with invalid and duplicate library definitions'; put '*/'; put 'proc sort data=mm_getlibs;'; put 'by libraryref libraryname;'; put 'run;'; put 'data mm_getlibs;'; put 'set mm_getlibs;'; put 'by libraryref;'; put 'if symget(''dc_viewlib_check'')=''YES'' then do;'; put '/* note - invalid libraries can result in exception errors. If this happens,'; put 'configure the dc_viewlib_check variable to NO in Data Controller Settings'; put '*/'; put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));'; put 'drop rc;'; put 'if rc ne 0 then do;'; put 'putlog "NOTE: Library " libraryname " does not exist!!";'; put 'putlog (_all_) (=);'; put 'delete;'; put 'end;'; put 'end;'; put 'if not first.libraryref then delete;'; put 'run;'; put 'proc sort data=mm_getlibs (keep=&keepvars);'; put 'by libraryname;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR, mm_getLibs)'; put '%mm_webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=viewlibs; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getlibs;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file viewlibs.sas'; put '@brief List the libraries for view access'; put '@details'; put '

SAS Macros

'; put '@li dc_getlibs.sas'; put '@li mp_abort.sas'; put '@li mf_getuser.sas'; put '@li mpe_getgroups.sas'; put '@li mpeinit.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '/**'; put '* get full list of libraries'; put '*/'; put '%dc_getlibs(outds=work.mm_getLibs)'; put '/* get security groups */'; put '%mpe_getgroups(user=%mf_getuser(),outds=groups)'; put '/* get security settings */'; put 'data sec;'; put 'set &mpelib..mpe_security;'; put 'where &dc_dttmtfmt.lt tx_to and ACCESS_LEVEL=''VIEW'';'; put 'run;'; put '/* check for any matching groups */'; put 'proc sql noprint;'; put 'create table matches as'; put 'select * from sec'; put 'where upcase(sas_group) in (select upcase(groupname) from groups);'; put 'select count(*) into: securitygroupscount from matches;'; put 'select count(*) into: ALL_CNT from matches where libref=''*ALL*'';'; put '%put securitygroupscount=&securitygroupscount;'; put '%put ALL_CNT=&ALL_CNT;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%macro mpestp_viewlibs();'; put '%if not %symexist(DC_RESTRICT_VIEWER) %then %let DC_RESTRICT_VIEWER=NO;'; put '/* scenario 1 - user is in admin group, hence can view all libraries */'; put 'proc sql noprint;'; put 'select count(*) into: scenario1 from groups where groupname="&mpeadmins";'; put '%if &scenario1>0 %then %do;'; put '%put user in admin group (scenario1=&scenario1);'; put '%return;'; put '%end;'; put '/* scenario 2 - viewer unrestricted and no groups listed */'; put '%if &DC_RESTRICT_VIEWER=NO and &securitygroupscount=0 %then %do;'; put '%put DC_RESTRICT_VIEWER=&DC_RESTRICT_VIEWER;'; put '%put securitygroupscount=&securitygroupscount;'; put '%return;'; put '%end;'; put '/* scenario 3 - an *ALL* libref is listed */'; put '%if &all_cnt>0 %then %do;'; put '%put all_cnt=&all_cnt;'; put '%return;'; put '%end;'; put '/* scenario 4 - specific librefs listed */'; put '%if &securitygroupscount>0 %then %do;'; put '%put scenario 4;'; put '%put securitygroupscount=&securitygroupscount;'; put 'proc sql;'; put 'delete from mm_getLibs'; put 'where upcase(libraryref) not in (select upcase(libref) from matches);'; put '%return;'; put '%end;'; put '/* viewer restricted and no groups listed */'; put '%if &DC_RESTRICT_VIEWER=YES and &securitygroupscount=0 %then %do;'; put '%put DC_RESTRICT_VIEWER=&DC_RESTRICT_VIEWER;'; put '%put securitygroupscount=&securitygroupscount;'; put 'data mm_getlibs;'; put 'set mm_getlibs;'; put 'stop;'; put 'run;'; put '%return;'; put '%end;'; put '%mp_abort(iftrue= (1=1)'; put ',mac=&_program..sas'; put ',msg=%str(unhandled security logic err!)'; put ')'; put '%mend mpestp_viewlibs;'; put '%mpestp_viewlibs()'; put '%global dc_viewlib_check;'; put '/**'; put '* deal with invalid and duplicate library definitions'; put '*/'; put 'proc sort data=mm_getlibs;'; put 'by libraryref libraryname;'; put 'run;'; put 'data mm_getlibs;'; put 'set mm_getlibs;'; put 'by libraryref;'; put 'if symget(''dc_viewlib_check'')=''YES'' then do;'; put '/* note - invalid libraries can result in exception errors. If this happens,'; put 'configure the dc_viewlib_check variable to NO in Data Controller Settings'; put '*/'; put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));'; put 'drop rc;'; put 'if rc ne 0 then do;'; put 'putlog "NOTE: Library " libraryname " does not exist!!";'; put 'putlog (_all_) (=);'; put 'delete;'; put 'end;'; put 'end;'; put 'if not first.libraryref then delete;'; put 'run;'; put 'proc sort data=mm_getlibs out=saslibs;'; put 'by libraryname;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,saslibs,missing=STRING)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=viewtables; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mpe_getvars(injs,outds);'; put '/* load parameters */'; put 'data _null_;'; put '__dummychar='''';__dummynum=0;'; put 'set &outds;'; put 'array __charvals _character_;'; put 'do over __charvals;'; put 'call symputx(vname(__charvals),__charvals,''g'');'; put 'end;'; put 'array __numvals _numeric_;'; put 'do over __numvals;'; put 'call symputx(vname(__numvals),__numvals,''g'');'; put 'end;'; put 'run;'; put '%mend mpe_getvars;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file viewtables.sas'; put '@brief List the tables and format catalogs the user can view'; put '@details Provide a library and get list of tables and catalogs. Also return'; put 'the libinfo details.'; put '

Service Inputs

'; put '
SASControlTable
'; put 'Just one input - MPLIB (the libref to get tables and info for)'; put '|MPLIB:$char8.|'; put '|---|'; put '|SOMELIB|'; put '

Service Outputs

'; put '
work.mptables
'; put '|MEMNAME:$char32.|'; put '|---|'; put '|DS1|'; put '|DS2|'; put '|DS3|'; put 'etc'; put '
work.libinfo
'; put 'If attributes are empty, they don''t need to be shown on screen.'; put '|engine $|libname $|paths $|perms $|owners $|schemas $ |libid $|libsize $|table_cnt |'; put '|---|---|---|---|---|---|---|---|---|'; put '|V9|SOMELIB|"some/path"|rwxrwxr-x|sassrv|` `|` `|636MB|33|'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li mf_getuser.sas'; put '@li mpe_getgroups.sas'; put '@li mpe_getvars.sas'; put '@li mpeinit.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%global MPLIB;'; put '/* load parameters */'; put '%mpe_getvars(SASControlTable, SASControlTable)'; put '/**'; put '* assign the Library'; put '*/'; put '%put &=MPLIB;'; put '%dc_assignlib(READ,&MPLIB)'; put '%mp_abort(iftrue= (&syscc ne 0 )'; put ',mac=&_program..sas'; put ',msg=%str(Unable to assign &mplib library)'; put ')'; put '/**'; put '* get the tables'; put '*/'; put 'data members; /* empty table */'; put 'name='''';'; put 'memtype='''';'; put 'run;'; put 'ods output Members=Members;'; put 'proc datasets library=&mplib ;'; put 'quit;'; put '/* cannot avoid the proc datasets warn!ng for an empty lib */'; put '/* nolist means no output and nowarn has no effect */'; put '%put &=syscc;'; put 'data _null_;'; put 'if "&syscc" ne "0" then do;'; put 'putlog "Library &mplib is empty, setting syscc to zero";'; put 'call symputx(''syscc'',0);'; put 'end;'; put 'run;'; put '%put &=syscc;'; put 'proc sql;'; put 'create table work.mptables as'; put 'select distinct case when memtype=''CATALOG'' then cats(name,''-FC'')'; put 'else name end as memname'; put 'from members;'; put '/* get security groups */'; put '%mpe_getgroups(user=%mf_getuser(),outds=groups)'; put '/* get security settings */'; put 'data sec;'; put 'set &mpelib..mpe_security;'; put 'where &dc_dttmtfmt. lt tx_to and ACCESS_LEVEL=''VIEW'';'; put 'where also libref in (''*ALL*'',"%upcase(&mplib)");'; put 'run;'; put '/* check for any matching groups */'; put 'proc sql noprint;'; put 'create table matches as'; put 'select * from sec'; put 'where upcase(sas_group) in (select upcase(groupname) from groups);'; put 'select count(*) into: securitygroupscount from matches;'; put 'select count(*) into: ALL_CNT from matches'; put 'where libref=''*ALL*'''; put 'or (libref="&mplib" and dsn=''*ALL*'');'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%macro mpestp_viewtables();'; put '%if not %symexist(DC_RESTRICT_VIEWER) %then %let DC_RESTRICT_VIEWER=NO;'; put '/* scenario 1 - user is in admin group, hence can view all libraries */'; put 'proc sql noprint;'; put 'select count(*) into: scenario1 from groups where groupname="&mpeadmins";'; put '%if &scenario1>0 %then %return;'; put '/* scenario 2 - viewer unrestricted and no groups listed */'; put '%if &DC_RESTRICT_VIEWER=NO and &securitygroupscount=0 %then %return;'; put '/* scenario 3 - an *ALL* libref or DSN is listed */'; put '%if &all_cnt>0 %then %return;'; put '/* scenario 4 - specific tables listed */'; put '%if &securitygroupscount>0 %then %do;'; put 'proc sql;'; put 'delete from mptables'; put 'where upcase(memname) not in (select upcase(dsn) from sec);'; put '%return;'; put '%end;'; put '/* viewer restricted and no groups listed */'; put '%if &DC_RESTRICT_VIEWER=YES and &securitygroupscount=0 %then %do;'; put 'data mptables;'; put 'set mptables;'; put 'stop;'; put 'run;'; put '%return;'; put '%end;'; put '%mp_abort(iftrue= (1=1)'; put ',mac=&_program..sas'; put ',msg=%str(unhandled security logic error!)'; put ')'; put '%mend mpestp_viewtables;'; put '%mpestp_viewtables()'; put '/* get libinfo */'; put 'proc sql;'; put 'create table work.libinfo as'; put 'select a.engine,'; put 'a.libname,'; put 'a.paths,'; put 'a.perms,'; put 'a.owners,'; put 'a.schemas,'; put 'a.libid,'; put 'coalesce(b.libsize,0) as libsize,'; put 'coalesce(b.table_cnt,0) as table_cnt,'; put 'coalesce(b.catalog_cnt,0) as catalog_cnt'; put 'from &mpelib..mpe_datacatalog_libs(where=(&dc_dttmtfmt. lt tx_to)) a'; put 'left join &mpelib..mpe_datastatus_libs(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on a.libref=b.libref'; put 'where a.libref="&MPLIB";'; put '%webout(OPEN)'; put '%webout(OBJ,mptables)'; put '%webout(OBJ,libinfo)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/usernav; %let service=usergroupsbymember; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getusers('; put 'outds=work.mm_getusers,'; put 'user=0'; put ')/*/STORE SOURCE*/;'; put 'filename response temp;'; put '%if %superq(user)=0 %then %do;'; put 'proc metadata in= '''; put '$METAREPOSITORY'; put 'Person'; put 'SAS'; put '0'; put ''; put ''; put ''; put ''; put ''; put ''''; put 'out=response;'; put 'run;'; put '%end;'; put '%else %do;'; put 'filename inref temp;'; put 'data _null_;'; put 'file inref;'; put 'put "";'; put 'put "$METAREPOSITORY";'; put 'put "Person";'; put 'put "SAS";'; put 'put "";'; put 'put "128";'; put 'put "";'; put 'put "";'; put 'put '''';'; put 'put "";'; put 'length string $10000;'; put 'string=cats('''');'; put 'put string;'; put 'put "";'; put 'put "";'; put 'run;'; put 'proc metadata in=inref out=response;'; put 'run;'; put '%end;'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person/@Id";'; put 'put "characterstring32";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person/@Name";'; put 'put "characterstring256";'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASObjects out=&outds;'; put 'by name;'; put 'run;'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getusers;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file usergroupsbymember.sas'; put '@brief List the groups a member is in'; put '@details Runs without \%mpeinit() - this enables the dropdown to be populated'; put 'during configuration, when the settings service does not yet exist.'; put '

SAS Macros

'; put '@li mp_abort.sas'; put '@li mm_getusers.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%macro x();'; put '%if %sysfunc(exist(work.iwant)) ne 1 %then %do;'; put '/* macro called by configurator - grab the URI of calling user */'; put '%mm_getusers(user=&_metaperson, outds=work.iwant)'; put '%end;'; put '%mend x;'; put '%x()'; put 'data groups'; put 'roles(rename=(groupuri=roleuri groupname=rolename groupdesc=roledesc)) ;'; put 'length uri groupuri groupname groupdesc publictype str $256;'; put 'call missing(of _all_);'; put 'set iwant;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No groups found for ";'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri, "PublicType", PublicType);'; put 'a+1;'; put 'if PublicType = ''Role'' then output roles;'; put 'else output groups;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'keep groupuri groupname groupdesc;'; put 'if _n_=1 then delete; /* no content so don''t send empty row */'; put 'run;'; put 'data emails;'; put 'keep email type;'; put 'length emailuri email type uri str $256;'; put 'call missing(of _all_);'; put 'set iwant;'; put '/* credit'; put 'https://seleritysas.com/data-step-view-of-email-addresses-in-sas-metadata'; put '*/'; put 'emailrc=1;email_count=1;'; put 'do while(emailrc>0);'; put '/* Get Email from Person */'; put 'emailrc=metadata_getnasn(uri,"EmailAddresses",email_count,emailuri);'; put 'arc=1;'; put 'if (emailrc>0) then do;'; put 'arc=metadata_getattr(emailuri,"Address",email);'; put 'arc=metadata_getattr(emailuri,"EmailType",type);'; put 'end;'; put 'if (arc=0) then output emails;'; put 'email_count=email_count+1;'; put 'end;'; put 'run;'; put 'data logins;'; put 'length domain userid loginuri domainuri uri $256;'; put 'keep domain userid;'; put 'call missing(of _all_);'; put 'set iwant;'; put 'login_count=1;'; put 'do while(metadata_getnasn(uri,"Logins",login_count,loginuri)>0);'; put 'rc=metadata_getattr(loginuri,"UserID",userid);'; put 'rc=metadata_getnasn(loginuri,"Domain",1,domainuri);'; put 'rc=metadata_getattr(domainuri,"Name",domain);'; put 'output;'; put 'login_count+1;'; put 'end;'; put 'run;'; put 'data info;'; put 'length uri name displayname metadatacreated metadataupdated $256;'; put 'keep name displayname metadatacreated metadataupdated;'; put 'call missing(of _all_);'; put 'set iwant;'; put 'rc=metadata_getattr(uri,"Name",name);'; put 'rc=metadata_getattr(uri,"DisplayName",displayname);'; put 'rc=metadata_getattr(uri,"MetadataCreated",MetadataCreated);'; put 'rc=metadata_getattr(uri,"MetadataUpdated",MetadataUpdated);'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,emails)'; put '%webout(OBJ,groups)'; put '%webout(OBJ,roles)'; put '%webout(OBJ,logins)'; put '%webout(OBJ,info)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=usermembers; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getusers('; put 'outds=work.mm_getusers,'; put 'user=0'; put ')/*/STORE SOURCE*/;'; put 'filename response temp;'; put '%if %superq(user)=0 %then %do;'; put 'proc metadata in= '''; put '$METAREPOSITORY'; put 'Person'; put 'SAS'; put '0'; put ''; put ''; put ''; put ''; put ''; put ''''; put 'out=response;'; put 'run;'; put '%end;'; put '%else %do;'; put 'filename inref temp;'; put 'data _null_;'; put 'file inref;'; put 'put "";'; put 'put "$METAREPOSITORY";'; put 'put "Person";'; put 'put "SAS";'; put 'put "";'; put 'put "128";'; put 'put "";'; put 'put "";'; put 'put '''';'; put 'put "";'; put 'length string $10000;'; put 'string=cats('''');'; put 'put string;'; put 'put "";'; put 'put "";'; put 'run;'; put 'proc metadata in=inref out=response;'; put 'run;'; put '%end;'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person/@Id";'; put 'put "characterstring32";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person/@Name";'; put 'put "characterstring256";'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASObjects out=&outds;'; put 'by name;'; put 'run;'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getusers;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getusers(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getusers(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getusers(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getusers;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file usermembers.sas'; put '@brief List all SAS users'; put '@details Gets a list of all SAS users'; put '

SAS Macros

'; put '@li dc_getusers.sas'; put '@li mpeinit.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%dc_getusers(outds=users)'; put '%webout(OPEN)'; put '%webout(OBJ,users)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=usermembersbygroup; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file usermembersbygroup.sas'; put '@brief List the members of a group'; put '

SAS Macros

'; put '@li mp_abort.sas'; put '@li mpeinit.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put 'data sasMembers ;'; put 'attrib uriGrp uriMem GroupId GroupName Group_or_Role MemberName MemberType'; put 'MemberUpdated membercreated emailuri length=$64'; put 'GroupDesc email length=$256'; put 'rcGrp rcMem rc i j length=3;'; put 'call missing (of _all_);'; put 'drop uriGrp rcGrp rcMem rc i j;'; put 'set iwant;'; put 'i=1;'; put '* Grab the URI for the first Group ;'; put 'rcGrp=metadata_getnobj(groupid,i,uriGrp);'; put '* If Group found, enter do loop ;'; put 'if rcGrp>0 then do;'; put 'call missing (rcMem,uriMem,GroupId,GroupName,Group_or_Role'; put ',MemberName,MemberType);'; put '* get group info ;'; put 'rc = metadata_getattr(uriGrp,"Id",GroupId);'; put 'rc = metadata_getattr(uriGrp,"Name",GroupName);'; put 'rc = metadata_getattr(uriGrp,"PublicType",Group_or_Role);'; put 'rc = metadata_getattr(uriGrp,"Desc",GroupDesc);'; put 'j=1;'; put 'do while (metadata_getnasn(uriGrp,"MemberIdentities",j,uriMem) > 0);'; put 'call missing (MemberName,MemberType);'; put 'rc = metadata_getattr(uriMem,"Name",MemberName);'; put 'rc = metadata_getattr(uriMem,"PublicType",MemberType);'; put 'rc=metadata_getattr(uriMem, "MetadataCreated", MemberCreated);'; put 'rc=metadata_getattr(uriMem, "MetadataUpdated", MemberUpdated);'; put 'emailrc=metadata_getnasn(uriMem,"EmailAddresses",1,emailuri);'; put 'if (emailrc>0) then rc=metadata_getattr(emailuri,"Address",email);'; put 'output;'; put 'j+1;'; put 'call missing(email,emailuri);'; put 'end;'; put 'end;'; put 'if _n_=1 then delete;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,sasMembers)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=usermembersbyrole; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file usermembersbyrole.sas'; put '@brief List the members of a role'; put '

SAS Macros

'; put '@li mp_abort.sas'; put '@li mpeinit.sas'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put 'data sasMembers sasgroups;'; put 'attrib uriGrp uriMem roleId roleName Group_or_Role MemberName MemberType'; put 'MemberUpdated membercreated emailuri length=$64'; put 'roleDesc email length=$256'; put 'rcGrp rcMem rc i j length=3;'; put 'call missing (of _all_);'; put 'set iwant;'; put 'i=1;'; put '* Grab the URI for the first Group ;'; put 'rcGrp=metadata_getnobj(roleid,i,uriGrp);'; put '* If Group found, enter do loop ;'; put 'if rcGrp>0 then do;'; put 'call missing (rcMem,uriMem,roleId,roleName,Group_or_Role'; put ',MemberName,MemberType,roleDesc);'; put '* get group info ;'; put 'rc = metadata_getattr(uriGrp,"Id",roleId);'; put 'rc = metadata_getattr(uriGrp,"Name",roleName);'; put 'rc = metadata_getattr(uriGrp,"PublicType",Group_or_Role);'; put 'rc = metadata_getattr(uriGrp,"Desc",roleDesc);'; put 'j=1;'; put 'if Group_or_Role=''Role'' then do while'; put '(metadata_getnasn(uriGrp,"MemberIdentities",j,uriMem) > 0);'; put 'call missing (MemberName,MemberType);'; put 'call missing(email,emailuri);'; put 'rc = metadata_getattr(uriMem,"Name",MemberName);'; put 'rc = metadata_getattr(uriMem,"PublicType",MemberType);'; put 'rc=metadata_getattr(uriMem, "MetadataCreated", MemberCreated);'; put 'rc=metadata_getattr(uriMem, "MetadataUpdated", MemberUpdated);'; put 'emailrc=metadata_getnasn(uriMem,"EmailAddresses",1,emailuri);'; put 'if (emailrc>0) then rc=metadata_getattr(emailuri,"Address",email);'; put 'if membertype=''UserGroup'' then output sasgroups;'; put 'else output sasmembers;'; put 'j+1;'; put 'end;'; put 'end;'; put 'if _n_=1 then delete; /* no roles so don''t send empty row */'; put 'keep uriMem membertype membername MemberCreated MemberUpdated email;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,sasGroups)'; put '%webout(OBJ,sasMembers)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=userroles; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getroles('; put 'outds=work.mm_getroles'; put ')/*/STORE SOURCE*/;'; put 'filename response temp;'; put 'options noquotelenmax;'; put 'proc metadata in= ''$METAREPOSITORY'; put 'IdentityGroupSAS388'; put ''; put ''; put ''; put ''; put ''''; put 'out=response;'; put 'run;'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/IdentityGroup";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/IdentityGroup/@Id";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/IdentityGroup/@Name";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/IdentityGroup/@Desc";'; put 'put "";'; put 'put "characterstring500";'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.roles out=&outds;'; put 'by rolename;'; put 'run;'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getroles;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getroles(outds=mm_getroles);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getroles(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getroles(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getroles;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file userroles.sas'; put '@brief List all SAS Roles'; put '@details Gets a list of all SAS Roles'; put '

SAS Macros

'; put '@li dc_getroles.sas'; put '@li mpeinit.sas'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%dc_getroles(outds=roles)'; put '%webout(OPEN)'; put '%webout(OBJ,roles)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/validations; %let service=columns_in_libds; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mp_validatecol(incol,rule,outcol);'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename();'; put '%if &rule=ISINT %then %do;'; put '&outcol=0;'; put 'if not missing(&incol) then do;'; put '&tempcol=input(&incol,?? best32.);'; put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;'; put 'end;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=ISNUM %then %do;'; put '/*'; put 'credit SOREN LASSEN'; put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html'; put '*/'; put '&tempcol=input(&incol,?? best32.);'; put 'if missing(&tempcol) then &outcol=0;'; put 'else &outcol=1;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=LIBDS %then %do;'; put '/* match libref.dataset */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%else %if &rule=FORMAT %then %do;'; put '/* match valid format - regex could probably be improved */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%mend mp_validatecol;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Generic validator for table columns'; put '@details The input table is simply one row from the target table in table'; put 'called "work.source_row".'; put 'Available macro variables:'; put '@li MPELIB - The DC control library'; put '@li LIBDS - The library.dataset being filtered'; put '@li VARIABLE_NM - The column being filtered'; put '

Service Inputs

'; put '
work.sourcerow
'; put 'Has source table structure.'; put '

Service Outputs

'; put 'The values provided below are generic samples - we encourage you to replace'; put 'these with realistic values in your own deployments.'; put '
DYNAMIC_VALUES
'; put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not'; put 'provided, it is added automatically.'; put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5||'; put '|1|DISCOUNT_RT|"40%"|N|0.4||'; put '|1|DISCOUNT_RT|"30%"|N|0.3||'; put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|'; put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|'; put '|2|DISCOUNT_RT|"50%"|N|0.5||'; put '|2|DISCOUNT_RT|"40%"|N|0.4||'; put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|'; put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li mf_getuniquename.sas'; put '@li mp_abort.sas'; put '@li mp_validatecol.sas'; put '**/'; put '/* send back the raw and formatted values */'; put '%let tgtlibds=0;'; put '%let varlibds=%mf_getuniquename();'; put '%let vartgtlibds=%mf_getuniquename();'; put '%let var_is_libds=%mf_getuniquename();'; put 'data _null_;'; put 'length xl_libref base_lib select_lib rls_libref cls_libref libref $8'; put 'xl_table base_ds select_ds rls_table cls_table dsn $32;'; put 'if _n_=1 then call missing(of _all_);'; put 'set work.source_row;'; put '&varlibds=symget(''libds'');'; put 'if &varlibds="&mpelib..MPE_EXCEL_CONFIG"'; put 'then &vartgtlibds=cats(xl_libref,''.'',xl_table);'; put 'else if &varlibds="&mpelib..MPE_VALIDATIONS"'; put 'then &vartgtlibds=cats(BASE_LIB,''.'',BASE_DS);'; put 'else if &varlibds="&mpelib..MPE_SELECTBOX"'; put 'then &vartgtlibds=cats(select_lib,''.'',select_ds);'; put 'else if &varlibds="&mpelib..MPE_ROW_LEVEL_SECURITY"'; put 'then &vartgtlibds=cats(RLS_LIBREF,''.'',RLS_TABLE);'; put 'else if &varlibds="&mpelib..MPE_COLUMN_LEVEL_SECURITY"'; put 'then &vartgtlibds=cats(CLS_LIBREF,''.'',CLS_TABLE);'; put 'else if &varlibds="&mpelib..MPE_TABLES"'; put 'then &vartgtlibds=cats(LIBREF,''.'',DSN);'; put '/* validate libds */'; put '%mp_validatecol(&vartgtlibds,LIBDS,&var_is_libds)'; put 'if &var_is_libds=1 then call symputx(''tgtlibds'',&vartgtlibds);'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= ("&tgtlibds" ="0" )'; put ',mac=&_program..sas'; put ',msg=%str(Unable to extract libds vars from &libds inputs for &variable_nm)'; put ')'; put '%dc_assignlib(READ,%scan(&tgtlibds,1,.))'; put 'proc contents noprint data=&tgtlibds'; put 'out=work.DYNAMIC_VALUES (keep=name rename=(name=display_value) );'; put 'run;'; put 'data work.DYNAMIC_VALUES;'; put 'set work.DYNAMIC_VALUES;'; put 'raw_value=upcase(display_value);'; put 'format raw_value;'; put 'run;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=libraries_all; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getlibs;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Generic validator for libraries'; put '@details The input table is simply one row from the target table in table'; put 'called "work.source_row".'; put 'Available macro variables:'; put '@li MPELIB - The DC control library'; put '@li LIBDS - The library.dataset being filtered'; put '@li VARIABLE_NM - The column being filtered'; put '

Service Outputs

'; put 'The values provided below are generic samples - we encourage you to replace'; put 'these with realistic values in your own deployments.'; put '
DYNAMIC_VALUES
'; put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not'; put 'provided, it is added automatically.'; put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5||'; put '|1|DISCOUNT_RT|"40%"|N|0.4||'; put '|1|DISCOUNT_RT|"30%"|N|0.3||'; put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|'; put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|'; put '|2|DISCOUNT_RT|"50%"|N|0.5||'; put '|2|DISCOUNT_RT|"40%"|N|0.4||'; put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|'; put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|'; put '

SAS Macros

'; put '@li dc_getlibs.sas'; put '**/'; put '/**'; put '* get full list of libraries'; put '*/'; put '%dc_getlibs(outds=work.mm_getLibs)'; put 'proc sql;'; put 'create table work.DYNAMIC_VALUES as'; put 'select distinct libraryname as display_value,'; put 'upcase(libraryref) as raw_value'; put 'from work.mm_getLibs'; put 'order by 1;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=libraries_editable; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Generic validator for editable libraries'; put '@details The input table is simply one row from the target table in table'; put 'called "work.source_row".'; put 'Available macro variables:'; put '@li MPELIB - The DC control library'; put '@li LIBDS - The library.dataset being filtered'; put '@li VARIABLE_NM - The column being filtered'; put '

Service Outputs

'; put 'The values provided below are generic samples - we encourage you to replace'; put 'these with realistic values in your own deployments.'; put '
DYNAMIC_VALUES
'; put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not'; put 'provided, it is added automatically.'; put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5||'; put '|1|DISCOUNT_RT|"40%"|N|0.4||'; put '|1|DISCOUNT_RT|"30%"|N|0.3||'; put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|'; put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|'; put '|2|DISCOUNT_RT|"50%"|N|0.5||'; put '|2|DISCOUNT_RT|"40%"|N|0.4||'; put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|'; put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|'; put '**/'; put '/* send back the raw and formatted values */'; put 'proc sql;'; put 'create table work.DYNAMIC_VALUES as'; put 'select distinct libref as display_value,'; put 'upcase(libref) as raw_value'; put 'from &mpelib..mpe_tables'; put 'where &dc_dttmtfmt. < tx_to'; put 'order by 1;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=mpe_alerts.alert_lib; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getlibs;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief fetch extended values for alert_lib'; put '@details Fetches libraries from mpe_tables, creates extended values for'; put 'alert_ds, and marks "*ALL*" as the forced (default) value.'; put 'Available macro variables:'; put '@li DC_LIBREF - The DC control library'; put '@li LIBDS - The library.dataset being filtered'; put '@li VARIABLE_NM - The column being filtered'; put '

Service Outputs

'; put 'Output should be a single table called "work.dynamic_values" in the format'; put 'below. display_value should always be character, raw_value is unformatted'; put 'character/numeric.'; put '
DYNAMIC_VALUES
'; put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not'; put 'provided, it is added automatically.'; put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put 'The FORCED_VALUE column can be used to force an extended value to be selected'; put 'by default when a particular value is chosen.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|FORCED_VALUE|'; put '|---|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5||.|'; put '|1|DISCOUNT_RT|"40%"|N|0.4||0|'; put '|1|DISCOUNT_RT|"30%"|N|0.3||1|'; put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|.|'; put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|.|'; put '|2|DISCOUNT_RT|"50%"|N|0.5||.|'; put '|2|DISCOUNT_RT|"40%"|N|0.4||1|'; put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|.|'; put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|1|'; put '

SAS Macros

'; put '@li dc_getlibs.sas'; put '**/'; put '%mp_abort(iftrue= ("%upcase(&libds)" ne "&DC_LIBREF..MPE_ALERTS" )'; put ',mac=&_program'; put ',msg=%str('; put 'Invalid validation, expected MPE_ALERTS.ALERT_LIB, got %superq(libds)'; put ')'; put ')'; put 'proc sql;'; put 'create table work.source as'; put 'select libref,dsn'; put 'from &DC_LIBREF..MPE_TABLES'; put 'where tx_to > &dc_dttmtfmt.'; put 'order by 1,2;'; put 'data work.DYNAMIC_VALUES (keep=display_index raw_value display_value);'; put 'set work.source end=last;'; put 'by libref;'; put 'if last.libref then do;'; put 'display_index+1;'; put 'raw_value=libref;'; put 'display_value=libref;'; put 'output;'; put 'end;'; put 'if last then do;'; put 'display_index+1;'; put 'raw_value=''*ALL*'';'; put 'display_value=''*ALL*'';'; put 'output;'; put 'end;'; put 'run;'; put 'data work.dynamic_extended_values(keep=display_index extra_col_name display_type'; put 'display_value RAW_VALUE_CHAR raw_value_num forced_value);'; put 'set work.source end=last;'; put 'by libref dsn;'; put 'retain extra_col_name ''ALERT_DS'';'; put 'retain display_type ''C'';'; put 'retain raw_value_num .;'; put 'raw_value_char=dsn;'; put 'display_value=dsn;'; put 'forced_value=0;'; put 'if first.libref then display_index+1;'; put 'if last.libref then do;'; put 'display_value=''*ALL*'';'; put 'raw_value_char=''*ALL*'';'; put 'forced_value=1;'; put 'output;'; put 'end;'; put 'else output;'; put 'run;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=mpe_tables.dsn; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getlibs;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief fetch extended values for DSN'; put '@details Fetches datasets in a library, and ALSO fetches a list of numeric'; put 'vars for each dataset for use in adjacent columns (such as VAR_PROCESSED,'; put 'TX_TO etc).'; put 'Available macro variables:'; put '@li MPELIB - The DC control library'; put '@li LIBDS - The library.dataset being filtered'; put '@li VARIABLE_NM - The column being filtered'; put '

Service Outputs

'; put 'Output should be a single table called "work.dynamic_values" in the format'; put 'below. display_value should always be character, raw_value is unformatted'; put 'character/numeric.'; put '
DYNAMIC_VALUES
'; put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not'; put 'provided, it is added automatically.'; put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put 'The FORCED_VALUE column can be used to force an extended value to be selected'; put 'by default when a particular value is chosen.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|FORCED_VALUE|'; put '|---|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5||.|'; put '|1|DISCOUNT_RT|"40%"|N|0.4||0|'; put '|1|DISCOUNT_RT|"30%"|N|0.3||1|'; put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|.|'; put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|.|'; put '|2|DISCOUNT_RT|"50%"|N|0.5||.|'; put '|2|DISCOUNT_RT|"40%"|N|0.4||1|'; put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|.|'; put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|1|'; put '

SAS Macros

'; put '@li dc_getlibs.sas'; put '**/'; put '/* send back the raw and formatted values */'; put '%let tgtlib=0;'; put '%let varlibds=%mf_getuniquename();'; put '%let vartgtlib=%mf_getuniquename();'; put '%let var_is_lib=%mf_getuniquename();'; put 'data _null_;'; put 'length &varlibds $41 &vartgtlib $8;'; put 'set work.source_row;'; put '&varlibds=upcase(symget(''libds''));'; put 'if &varlibds="&mpelib..MPE_TABLES" then &vartgtlib=LIBREF;'; put 'else putlog "something unexpected happened";'; put '/* validate name */'; put 'if nvalid(&vartgtlib,''v7'') then call symputx(''tgtlib'',&vartgtlib);'; put 'call symputx(''vartgtlib'',&vartgtlib);'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= ("&tgtlib" ="0" )'; put ',mac=&_program..sas'; put ',msg=%str(Invalid library - %superq(vartgtlib))'; put ',errds=work.dc_error_response'; put ')'; put '%dc_assignlib(READ,&tgtlib)'; put 'proc sql;'; put 'create table work.source as'; put 'select upcase(memname) as memname'; put ',upcase(name) as name'; put ',type'; put 'from dictionary.columns'; put 'where libname="&TGTLIB"'; put 'and memtype=''DATA'';'; put 'create table work.members as'; put 'select distinct memname as display_value'; put 'from work.source;'; put 'data work.DYNAMIC_VALUES;'; put 'set work.members;'; put 'raw_value=display_value;'; put 'display_index=_n_;'; put 'run;'; put 'proc sql;'; put 'create table work.dynamic_extended_values as'; put 'select a.display_index'; put ',b.name as display_value'; put ',"C" as display_type'; put ',b.name as RAW_VALUE_CHAR'; put ',. as RAW_VALUE_NUM'; put 'from work.dynamic_values a'; put 'left join work.source b'; put 'on a.display_value=b.memname'; put 'where b.type=''num'';'; put 'data work.dynamic_extended_values;'; put 'set work.DYNAMIC_EXTENDED_VALUES;'; put 'extra_col_name=''VAR_PROCESSED'';output;'; put 'extra_col_name=''VAR_TXFROM'';output;'; put 'extra_col_name=''VAR_TXTO'';output;'; put 'extra_col_name=''VAR_BUSFROM'';output;'; put 'extra_col_name=''VAR_BUSTO'';output;'; put 'run;'; put '/* set some force flags */'; put 'data work.dynamic_extended_values;'; put 'set work.DYNAMIC_EXTENDED_VALUES;'; put 'forced_value=0;'; put 'if extra_col_name=''VAR_TXFROM'' & raw_value_char=''TX_FROM'' then forced_value=1;'; put 'if extra_col_name=''VAR_TXTO'' & raw_value_char=''TX_TO'' then forced_value=1;'; put 'run;'; put 'proc sort;'; put 'by extra_col_name display_index;'; put 'run;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=mpe_x_test.some_num; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getlibs;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Generic validator for libraries'; put '@details The input table is simply one row from the target table in table'; put 'called "work.source_row".'; put 'Available macro variables:'; put '@li DC_LIBREF - The DC control library'; put '@li LIBDS - The library.dataset being filtered'; put '@li VARIABLE_NM - The column being filtered'; put '

Service Outputs

'; put 'Output should be a single table called "work.dynamic_values" in the format'; put 'below. display_value should always be character, raw_value is unformatted'; put 'character/numeric.'; put '|DISPLAY_VALUE:$|RAW_VALUE:??|'; put '|---|---|'; put '|$44.00|44|'; put '

SAS Macros

'; put '@li dc_getlibs.sas'; put '**/'; put 'proc sql;'; put 'create table work.DYNAMIC_VALUES as'; put 'select distinct cats(some_num) as display_value,'; put 'some_num as raw_value'; put 'from &libds'; put 'order by 1;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=sas_groups; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getgroups(outds=mm_getlibs);'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getgroups(outds=&outds,repo=foundation)'; put '%do x=1 %to &repocnt;'; put '%mm_getgroups(outds=&outds.a, repo=&&repo&x)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'proc sort data=&outds noduprec;'; put 'by groupname;'; put 'run;'; put '%mend dc_getgroups;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief validating the mpe_security.sas_group column'; put '@details The input table is simply one row from the target table in table'; put 'called "work.source_row".'; put 'Available macro variables:'; put '@li LIBDS - The library.dataset being filtered'; put '@li VARIABLE_NM - The column being filtered'; put '

Service Outputs

'; put 'The values provided below are generic samples - we encourage you to replace'; put 'these with realistic values in your own deployments.'; put '
DYNAMIC_VALUES
'; put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not'; put 'provided, it is added automatically.'; put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5||'; put '|1|DISCOUNT_RT|"40%"|N|0.4||'; put '|1|DISCOUNT_RT|"30%"|N|0.3||'; put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|'; put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|'; put '|2|DISCOUNT_RT|"50%"|N|0.5||'; put '|2|DISCOUNT_RT|"40%"|N|0.4||'; put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|'; put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|'; put '

SAS Macros

'; put '@li dc_getgroups.sas'; put '**/'; put '%dc_getgroups(outds=groups)'; put 'proc sql;'; put 'create table work.DYNAMIC_VALUES as'; put 'select distinct groupname as display_value,'; put 'groupname as raw_value'; put 'from work.groups'; put 'order by 1;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=tables_all; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Generic validator for tables in a library'; put '@details The input table is simply one row from the target table in table'; put 'called "work.source_row".'; put 'Available macro variables:'; put '@li MPELIB - The DC control library'; put '@li LIBDS - The library.dataset being filtered'; put '@li VARIABLE_NM - The column being filtered'; put '

Service Outputs

'; put 'The values provided below are generic samples - we encourage you to replace'; put 'these with realistic values in your own deployments.'; put '
DYNAMIC_VALUES
'; put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not'; put 'provided, it is added automatically.'; put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5||'; put '|1|DISCOUNT_RT|"40%"|N|0.4||'; put '|1|DISCOUNT_RT|"30%"|N|0.3||'; put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|'; put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|'; put '|2|DISCOUNT_RT|"50%"|N|0.5||'; put '|2|DISCOUNT_RT|"40%"|N|0.4||'; put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|'; put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '**/'; put '/* send back the raw and formatted values */'; put '%let tgtlib=0;'; put '%let varlibds=%mf_getuniquename();'; put '%let vartgtlib=%mf_getuniquename();'; put '%let var_is_lib=%mf_getuniquename();'; put 'data _null_;'; put 'length &varlibds $41 &vartgtlib $8 libref $8 rls_libref $8;'; put 'if _n_=1 then call missing(of _all_);'; put 'set work.source_row;'; put '&varlibds=upcase(symget(''libds''));'; put 'if &varlibds="&mpelib..MPE_TABLES" then &vartgtlib=LIBREF;'; put 'else if &varlibds="&mpelib..MPE_ROW_LEVEL_SECURITY"'; put 'then &vartgtlib=RLS_LIBREF;'; put 'else if &varlibds="&mpelib..MPE_COLUMN_LEVEL_SECURITY"'; put 'then &vartgtlib=CLS_LIBREF;'; put '/* validate name */'; put 'if nvalid(&vartgtlib,''v7'') then call symputx(''tgtlib'',&vartgtlib);'; put 'call symputx(''vartgtlib'',&vartgtlib);'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= ("&tgtlib" ="0" )'; put ',mac=&_program..sas'; put ',msg=%str(Invalid library - %superq(vartgtlib))'; put ',errds=work.dc_error_response'; put ')'; put '%dc_assignlib(READ,&tgtlib)'; put 'data members; /* empty table */'; put 'name='' '';'; put 'run;'; put 'ods output Members=Members;'; put 'proc datasets library=&tgtlib ;'; put 'run;'; put '/* send back the raw and formatted values */'; put 'proc sql;'; put 'create table work.DYNAMIC_VALUES as'; put 'select distinct name as display_value,'; put 'upcase(name) as raw_value'; put 'from work.members'; put 'where MemType=''DATA'''; put 'order by 1;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=tables_editable; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Generic validator for editable libraries'; put '@details The input table is simply one row from the target table in table'; put 'called "work.source_row".'; put 'Available macro variables:'; put '@li MPELIB - The DC control library'; put '@li LIBDS - The library.dataset being filtered'; put '@li VARIABLE_NM - The column being filtered'; put '

Service Inputs

'; put '
work.source_row
'; put '|libref:$8|'; put '|somelib|'; put '

Service Outputs

'; put 'The values provided below are generic samples - we encourage you to replace'; put 'these with realistic values in your own deployments.'; put '
DYNAMIC_VALUES
'; put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not'; put 'provided, it is added automatically.'; put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5|` `|'; put '|1|DISCOUNT_RT|"40%"|N|0.4|` `|'; put '|1|DISCOUNT_RT|"30%"|N|0.3|` `|'; put '|1|CURRENCY_SYMBOL|"GBP"|C|` `|"GBP"|'; put '|1|CURRENCY_SYMBOL|"RSD"|C|` `|"RSD"|'; put '|2|DISCOUNT_RT|"50%"|N|0.5|` `|'; put '|2|DISCOUNT_RT|"40%"|N|0.4|` `|'; put '|2|CURRENCY_SYMBOL|"EUR"|C|` `|"EUR"|'; put '|2|CURRENCY_SYMBOL|"HKD"|C|` `|"HKD"|'; put '**/'; put '/* send back the raw and formatted values */'; put 'data _null_;'; put 'var=symget(''variable_nm'');'; put 'libds=symget(''libds'');'; put 'if libds="&mpelib..MPE_EXCEL_CONFIG" and var=''XL_TABLE'' then do;'; put 'call symputx(''srccol'',''XL_LIBREF'');'; put 'end;'; put 'else call symputx(''srccol'',''libref'');'; put 'run;'; put 'proc sql;'; put 'create table work.DYNAMIC_VALUES as'; put 'select distinct dsn as display_value,'; put 'upcase(dsn) as raw_value'; put 'from &mpelib..mpe_tables'; put '(where=(&dc_dttmtfmt. < tx_to))'; put 'where libref in (select &srccol from work.source_row)'; put 'order by 1;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/web9; %let service=411.d54ba91a178364d8-js; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''KCgpPT57InVzZSBzdHJpY3QiO3ZhciBEcj0xMjAwLFJ0PTEyNTIsRGM9Wzg3NCw5MzIsOTM2LDk0OSw5NTAsMTI1MCwxMjUxLDEyNTIsMTI1MywxMjU0LDEyNTUsMTI1NiwxMjU3LDEyNTgsMWU0XSxMMD17MDoxMjUyLDE6NjUwMDEsMjo2NTAwMSw3NzoxZTQsMTI4OjkzMiwxMjk6OTQ5LDEz''@;'; put 'put ''MDoxMzYxLDEzNDo5MzYsMTM2Ojk1MCwxNjE6MTI1MywxNjI6MTI1NCwxNjM6MTI1OCwxNzc6MTI1NSwxNzg6MTI1NiwxODY6MTI1NywyMDQ6MTI1MSwyMjI6ODc0LDIzODoxMjUwLDI1NToxMjUyLDY5OjY5Njl9LGUwPWZ1bmN0aW9uKGUpey0xIT1EYy5pbmRleE9mKGUpJiYoUnQ9TDBbMF09''@;'; put 'put ''ZSl9LE1yPWZ1bmN0aW9uKGUpe0RyPWUsZTAoZSl9O2Z1bmN0aW9uIHIwKCl7TXIoMTIwMCksZnVuY3Rpb24gT2MoKXtlMCgxMjUyKX0oKX1mdW5jdGlvbiB0MChlKXtmb3IodmFyIHQ9W10scj0wLGE9ZS5sZW5ndGg7cjxhOysrcil0W3JdPWUuY2hhckNvZGVBdChyKTtyZXR1cm4gdH1mdW5j''@;'; put 'put ''dGlvbiBhaShlKXtmb3IodmFyIHQ9W10scj0wO3I8ZS5sZW5ndGg+PjE7KytyKXRbcl09U3RyaW5nLmZyb21DaGFyQ29kZShlLmNoYXJDb2RlQXQoMipyKzEpKyhlLmNoYXJDb2RlQXQoMipyKTw8OCkpO3JldHVybiB0LmpvaW4oIiIpfXZhciBPZSxRdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkscj1lLmNoYXJDb2RlQXQoMSk7cmV0dXJuIDI1NT09dCYmMjU0PT1yP2Z1bmN0aW9uIEljKGUpe2Zvcih2YXIgdD1bXSxyPTA7cjxlLmxlbmd0aD4+MTsrK3IpdFtyXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGUuY2hhckNvZGVBdCgyKnIpKyhlLmNoYXJDb2RlQXQoMipyKzEp''@;'; put 'put ''PDw4KSk7cmV0dXJuIHQuam9pbigiIil9KGUuc2xpY2UoMikpOjI1ND09dCYmMjU1PT1yP2FpKGUuc2xpY2UoMikpOjY1Mjc5PT10P2Uuc2xpY2UoMSk6ZX0scGE9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodCl9LEIwPWZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcu''@;'; put 'put ''ZnJvbUNoYXJDb2RlKHQpfSxndD0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iO2Z1bmN0aW9uIGdhKGUpe2Zvcih2YXIgdD0iIixyPTAsYT0wLG49MCxpPTAscz0wLGY9MCxjPTAsbz0wO288ZS5sZW5ndGg7KWk9KHI9''@;'; put 'put ''ZS5jaGFyQ29kZUF0KG8rKykpPj4yLHM9KDMmcik8PDR8KGE9ZS5jaGFyQ29kZUF0KG8rKykpPj40LGY9KDE1JmEpPDwyfChuPWUuY2hhckNvZGVBdChvKyspKT4+NixjPTYzJm4saXNOYU4oYSk/Zj1jPTY0OmlzTmFOKG4pJiYoYz02NCksdCs9Z3QuY2hhckF0KGkpK2d0LmNoYXJBdChzKStn''@;'; put 'put ''dC5jaGFyQXQoZikrZ3QuY2hhckF0KGMpO3JldHVybiB0fWZ1bmN0aW9uIE9yKGUpe3ZhciB0PSIiLGk9MCxzPTAsZj0wLGM9MDtlPWUucmVwbGFjZSgvW15cd1wrXC9cPV0vZywiIik7Zm9yKHZhciBvPTA7bzxlLmxlbmd0aDspaT1ndC5pbmRleE9mKGUuY2hhckF0KG8rKykpLHM9Z3QuaW5k''@;'; put 'put ''ZXhPZihlLmNoYXJBdChvKyspKSx0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKGk8PDJ8cz4+NCksNjQhPT0oZj1ndC5pbmRleE9mKGUuY2hhckF0KG8rKykpKSYmKHQrPVN0cmluZy5mcm9tQ2hhckNvZGUoKDE1JnMpPDw0fGY+PjIpKSw2NCE9PShjPWd0LmluZGV4T2YoZS5jaGFyQXQobysrKSkp''@;'; put 'put ''JiYodCs9U3RyaW5nLmZyb21DaGFyQ29kZSgoMyZmKTw8NnxjKSk7cmV0dXJuIHR9dmFyIFNlPWZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiBCdWZmZXI8InUiJiZ0eXBlb2YgcHJvY2VzczwidSImJnR5cGVvZiBwcm9jZXNzLnZlcnNpb25zPCJ1IiYmISFwcm9jZXNzLnZlcnNpb25zLm5vZGV9''@;'; put 'put ''KCksb3Q9ZnVuY3Rpb24oKXtpZih0eXBlb2YgQnVmZmVyPCJ1Iil7dmFyIGU9IUJ1ZmZlci5mcm9tO2lmKCFlKXRyeXtCdWZmZXIuZnJvbSgiZm9vIiwidXRmOCIpfWNhdGNoe2U9ITB9cmV0dXJuIGU/ZnVuY3Rpb24odCxyKXtyZXR1cm4gcj9uZXcgQnVmZmVyKHQscik6bmV3IEJ1ZmZlcih0''@;'; put 'put ''KX06QnVmZmVyLmZyb20uYmluZChCdWZmZXIpfXJldHVybiBmdW5jdGlvbigpe319KCk7ZnVuY3Rpb24gX3QoZSl7cmV0dXJuIFNlP0J1ZmZlci5hbGxvYz9CdWZmZXIuYWxsb2MoZSk6bmV3IEJ1ZmZlcihlKTp0eXBlb2YgVWludDhBcnJheTwidSI/bmV3IFVpbnQ4QXJyYXkoZSk6bmV3IEFy''@;'; put 'put ''cmF5KGUpfWZ1bmN0aW9uIG5pKGUpe3JldHVybiBTZT9CdWZmZXIuYWxsb2NVbnNhZmU/QnVmZmVyLmFsbG9jVW5zYWZlKGUpOm5ldyBCdWZmZXIoZSk6dHlwZW9mIFVpbnQ4QXJyYXk8InUiP25ldyBVaW50OEFycmF5KGUpOm5ldyBBcnJheShlKX12YXIgSXI9ZnVuY3Rpb24odCl7cmV0dXJu''@;'; put 'put ''IFNlP290KHQsImJpbmFyeSIpOnQuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gMjU1JnIuY2hhckNvZGVBdCgwKX0pfTtmdW5jdGlvbiB3dChlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShh''@;'; put 'put ''KX0pLmpvaW4oIiIpO2Zvcih2YXIgdD1bXSxyPTA7cjxlLmxlbmd0aDsrK3IpdFtyXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbcl0pO3JldHVybiB0LmpvaW4oIiIpfWZ1bmN0aW9uIE0wKGUpe2lmKHR5cGVvZiBBcnJheUJ1ZmZlcj4idSIpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCIp''@;'; put 'put ''O2lmKGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilyZXR1cm4gTTAobmV3IFVpbnQ4QXJyYXkoZSkpO2Zvcih2YXIgdD1uZXcgQXJyYXkoZS5sZW5ndGgpLHI9MDtyPGUubGVuZ3RoOysrcil0W3JdPWVbcl07cmV0dXJuIHR9dmFyIGZyPVNlP2Z1bmN0aW9uKGUpe3JldHVybiBCdWZmZXIuY29u''@;'; put 'put ''Y2F0KGUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBCdWZmZXIuaXNCdWZmZXIodCk/dDpvdCh0KX0pKX06ZnVuY3Rpb24oZSl7aWYodHlwZW9mIFVpbnQ4QXJyYXk8InUiKXt2YXIgdD0wLHI9MDtmb3IodD0wO3Q8ZS5sZW5ndGg7Kyt0KXIrPWVbdF0ubGVuZ3RoO3ZhciBhPW5ldyBVaW50OEFy''@;'; put 'put ''cmF5KHIpLG49MDtmb3IodD0wLHI9MDt0PGUubGVuZ3RoO3IrPW4sKyt0KWlmKG49ZVt0XS5sZW5ndGgsZVt0XWluc3RhbmNlb2YgVWludDhBcnJheSlhLnNldChlW3RdLHIpO2Vsc2V7aWYoInN0cmluZyI9PXR5cGVvZiBlW3RdKXRocm93Ind0ZiI7YS5zZXQobmV3IFVpbnQ4QXJyYXkoZVt0''@;'; put 'put ''XSkscil9cmV0dXJuIGF9cmV0dXJuW10uY29uY2F0LmFwcGx5KFtdLGUubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBBcnJheS5pc0FycmF5KGkpP2k6W10uc2xpY2UuY2FsbChpKX0pKX0sZHI9L1x1MDAwMC9nLHdhPS9bXHUwMDAxLVx1MDAwNl0vZztmdW5jdGlvbiBlYShlKXtmb3IodmFyIHQ9''@;'; put 'put ''IiIscj1lLmxlbmd0aC0xO3I+PTA7KXQrPWUuY2hhckF0KHItLSk7cmV0dXJuIHR9ZnVuY3Rpb24gWXIoZSx0KXt2YXIgcj0iIitlO3JldHVybiByLmxlbmd0aD49dD9yOmplKCIwIix0LXIubGVuZ3RoKStyfWZ1bmN0aW9uIFUwKGUsdCl7dmFyIHI9IiIrZTtyZXR1cm4gci5sZW5ndGg+PXQ/''@;'; put 'put ''cjpqZSgiICIsdC1yLmxlbmd0aCkrcn1mdW5jdGlvbiBhMChlLHQpe3ZhciByPSIiK2U7cmV0dXJuIHIubGVuZ3RoPj10P3I6citqZSgiICIsdC1yLmxlbmd0aCl9dmFyIGlpPU1hdGgucG93KDIsMzIpO2Z1bmN0aW9uIHJhKGUsdCl7cmV0dXJuIGU+aWl8fGU8LWlpP2Z1bmN0aW9uIGJjKGUs''@;'; put 'put ''dCl7dmFyIHI9IiIrTWF0aC5yb3VuZChlKTtyZXR1cm4gci5sZW5ndGg+PXQ/cjpqZSgiMCIsdC1yLmxlbmd0aCkrcn0oZSx0KTpmdW5jdGlvbiBQYyhlLHQpe3ZhciByPSIiK2U7cmV0dXJuIHIubGVuZ3RoPj10P3I6amUoIjAiLHQtci5sZW5ndGgpK3J9KE1hdGgucm91bmQoZSksdCl9ZnVu''@;'; put 'put ''Y3Rpb24gbjAoZSx0KXtyZXR1cm4gZS5sZW5ndGg+PTcrKHQ9dHx8MCkmJjEwMz09KDMyfGUuY2hhckNvZGVBdCh0KSkmJjEwMT09KDMyfGUuY2hhckNvZGVBdCh0KzEpKSYmMTEwPT0oMzJ8ZS5jaGFyQ29kZUF0KHQrMikpJiYxMDE9PSgzMnxlLmNoYXJDb2RlQXQodCszKSkmJjExND09KDMy''@;'; put 'put ''fGUuY2hhckNvZGVBdCh0KzQpKSYmOTc9PSgzMnxlLmNoYXJDb2RlQXQodCs1KSkmJjEwOD09KDMyfGUuY2hhckNvZGVBdCh0KzYpKX12YXIgc2k9W1siU3VuIiwiU3VuZGF5Il0sWyJNb24iLCJNb25kYXkiXSxbIlR1ZSIsIlR1ZXNkYXkiXSxbIldlZCIsIldlZG5lc2RheSJdLFsiVGh1Iiwi''@;'; put 'put ''VGh1cnNkYXkiXSxbIkZyaSIsIkZyaWRheSJdLFsiU2F0IiwiU2F0dXJkYXkiXV0sVzA9W1siSiIsIkphbiIsIkphbnVhcnkiXSxbIkYiLCJGZWIiLCJGZWJydWFyeSJdLFsiTSIsIk1hciIsIk1hcmNoIl0sWyJBIiwiQXByIiwiQXByaWwiXSxbIk0iLCJNYXkiLCJNYXkiXSxbIkoiLCJKdW4i''@;'; put 'put ''LCJKdW5lIl0sWyJKIiwiSnVsIiwiSnVseSJdLFsiQSIsIkF1ZyIsIkF1Z3VzdCJdLFsiUyIsIlNlcCIsIlNlcHRlbWJlciJdLFsiTyIsIk9jdCIsIk9jdG9iZXIiXSxbIk4iLCJOb3YiLCJOb3ZlbWJlciJdLFsiRCIsIkRlYyIsIkRlY2VtYmVyIl1dLHBlPXswOiJHZW5lcmFsIiwxOiIwIiwy''@;'; put 'put ''OiIwLjAwIiwzOiIjLCMjMCIsNDoiIywjIzAuMDAiLDk6IjAlIiwxMDoiMC4wMCUiLDExOiIwLjAwRSswMCIsMTI6IiMgPy8/IiwxMzoiIyA/Py8/PyIsMTQ6Im0vZC95eSIsMTU6ImQtbW1tLXl5IiwxNjoiZC1tbW0iLDE3OiJtbW0teXkiLDE4OiJoOm1tIEFNL1BNIiwxOToiaDptbTpzcyBB''@;'; put 'put ''TS9QTSIsMjA6Img6bW0iLDIxOiJoOm1tOnNzIiwyMjoibS9kL3l5IGg6bW0iLDM3OiIjLCMjMCA7KCMsIyMwKSIsMzg6IiMsIyMwIDtbUmVkXSgjLCMjMCkiLDM5OiIjLCMjMC4wMDsoIywjIzAuMDApIiw0MDoiIywjIzAuMDA7W1JlZF0oIywjIzAuMDApIiw0NToibW06c3MiLDQ2OiJbaF06''@;'; put 'put ''bW06c3MiLDQ3OiJtbXNzLjAiLDQ4OiIjIzAuMEUrMCIsNDk6IkAiLDU2OiciXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCAiaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIgIid9LGZpPXs1OjM3LDY6MzgsNzozOSw4OjQwLDIzOjAsMjQ6MCwyNTowLDI2OjAsMjc6MTQsMjg6MTQsMjk6''@;'; put 'put ''MTQsMzA6MTQsMzE6MTQsNTA6MTQsNTE6MTQsNTI6MTQsNTM6MTQsNTQ6MTQsNTU6MTQsNTY6MTQsNTc6MTQsNTg6MTQsNTk6MSw2MDoyLDYxOjMsNjI6NCw2Nzo5LDY4OjEwLDY5OjEyLDcwOjEzLDcxOjE0LDcyOjE0LDczOjE1LDc0OjE2LDc1OjE3LDc2OjIwLDc3OjIxLDc4OjIyLDc5OjQ1''@;'; put 'put ''LDgwOjQ2LDgxOjQ3LDgyOjB9LEJjPXs1OiciJCIjLCMjMF8pO1xcKCIkIiMsIyMwXFwpJyw2MzonIiQiIywjIzBfKTtcXCgiJCIjLCMjMFxcKScsNjonIiQiIywjIzBfKTtbUmVkXVxcKCIkIiMsIyMwXFwpJyw2NDonIiQiIywjIzBfKTtbUmVkXVxcKCIkIiMsIyMwXFwpJyw3OiciJCIjLCMj''@;'; put 'put ''MC4wMF8pO1xcKCIkIiMsIyMwLjAwXFwpJyw2NTonIiQiIywjIzAuMDBfKTtcXCgiJCIjLCMjMC4wMFxcKScsODonIiQiIywjIzAuMDBfKTtbUmVkXVxcKCIkIiMsIyMwLjAwXFwpJyw2NjonIiQiIywjIzAuMDBfKTtbUmVkXVxcKCIkIiMsIyMwLjAwXFwpJyw0MTonXygqICMsIyMwXyk7Xygq''@;'; put 'put ''IFxcKCMsIyMwXFwpO18oKiAiLSJfKTtfKEBfKScsNDI6J18oIiQiKiAjLCMjMF8pO18oIiQiKiBcXCgjLCMjMFxcKTtfKCIkIiogIi0iXyk7XyhAXyknLDQzOidfKCogIywjIzAuMDBfKTtfKCogXFwoIywjIzAuMDBcXCk7XygqICItIj8/Xyk7XyhAXyknLDQ0OidfKCIkIiogIywjIzAuMDBf''@;'; put 'put ''KTtfKCIkIiogXFwoIywjIzAuMDBcXCk7XygiJCIqICItIj8/Xyk7XyhAXyknfTtmdW5jdGlvbiBpMChlLHQscil7Zm9yKHZhciBhPWU8MD8tMToxLG49ZSphLGk9MCxzPTEsZj0wLGM9MSxvPTAsbD0wLGg9TWF0aC5mbG9vcihuKTtvPHQmJihmPShoPU1hdGguZmxvb3IobikpKnMraSxsPWgq''@;'; put 'put ''bytjLCEobi1oPDVlLTgpKTspbj0xLyhuLWgpLGk9cyxzPWYsYz1vLG89bDtpZihsPnQmJihvPnQ/KGw9YyxmPWkpOihsPW8sZj1zKSksIXIpcmV0dXJuWzAsYSpmLGxdO3ZhciB4PU1hdGguZmxvb3IoYSpmL2wpO3JldHVyblt4LGEqZi14KmwsbF19ZnVuY3Rpb24ga3QoZSx0LHIpe2lmKGU+''@;'; put 'put ''Mjk1ODQ2NXx8ZTwwKXJldHVybiBudWxsO3ZhciBhPTB8ZSxuPU1hdGguZmxvb3IoODY0MDAqKGUtYSkpLGk9MCxzPVtdLGY9e0Q6YSxUOm4sdTo4NjQwMCooZS1hKS1uLHk6MCxtOjAsZDowLEg6MCxNOjAsUzowLHE6MH07aWYoTWF0aC5hYnMoZi51KTwxZS02JiYoZi51PTApLHQmJnQuZGF0''@;'; put 'put ''ZTE5MDQmJihhKz0xNDYyKSxmLnU+Ljk5OTkmJihmLnU9MCw4NjQwMD09KytuJiYoZi5UPW49MCwrK2EsKytmLkQpKSw2MD09PWEpcz1yP1sxMzE3LDEwLDI5XTpbMTkwMCwyLDI5XSxpPTM7ZWxzZSBpZigwPT09YSlzPXI/WzEzMTcsOCwyOV06WzE5MDAsMSwwXSxpPTY7ZWxzZXthPjYwJiYt''@;'; put 'put ''LWE7dmFyIGM9bmV3IERhdGUoMTkwMCwwLDEpO2Muc2V0RGF0ZShjLmdldERhdGUoKSthLTEpLHM9W2MuZ2V0RnVsbFllYXIoKSxjLmdldE1vbnRoKCkrMSxjLmdldERhdGUoKV0saT1jLmdldERheSgpLGE8NjAmJihpPShpKzYpJTcpLHImJihpPWZ1bmN0aW9uIFhjKGUsdCl7dFswXS09NTgx''@;'; put 'put ''O3ZhciByPWUuZ2V0RGF5KCk7cmV0dXJuIGU8NjAmJihyPShyKzYpJTcpLHJ9KGMscykpfXJldHVybiBmLnk9c1swXSxmLm09c1sxXSxmLmQ9c1syXSxmLlM9biU2MCxuPU1hdGguZmxvb3Iobi82MCksZi5NPW4lNjAsbj1NYXRoLmZsb29yKG4vNjApLGYuSD1uLGYucT1pLGZ9dmFyIGNpPW5l''@;'; put 'put ''dyBEYXRlKDE4OTksMTEsMzEsMCwwLDApLE1jPWNpLmdldFRpbWUoKSxVYz1uZXcgRGF0ZSgxOTAwLDIsMSwwLDAsMCk7ZnVuY3Rpb24gb2koZSx0KXt2YXIgcj1lLmdldFRpbWUoKTtyZXR1cm4gdD9yLT0xMjYyMzA0ZTU6ZT49VWMmJihyKz04NjRlNSksKHItKE1jKzZlNCooZS5nZXRUaW1l''@;'; put 'put ''em9uZU9mZnNldCgpLWNpLmdldFRpbWV6b25lT2Zmc2V0KCkpKSkvODY0ZTV9ZnVuY3Rpb24gSDAoZSl7cmV0dXJuLTE9PWUuaW5kZXhPZigiLiIpP2U6ZS5yZXBsYWNlKC8oPzpcLjAqfChcLlxkKlsxLTldKTArKSQvLCIkMSIpfWZ1bmN0aW9uIGthKGUpe3ZhciByLHQ9TWF0aC5mbG9vcihN''@;'; put 'put ''YXRoLmxvZyhNYXRoLmFicyhlKSkqTWF0aC5MT0cxMEUpO3JldHVybiByPXQ+PS00JiZ0PD0tMT9lLnRvUHJlY2lzaW9uKDEwK3QpOk1hdGguYWJzKHQpPD05P2Z1bmN0aW9uIEhjKGUpe3ZhciB0PWU8MD8xMjoxMSxyPUgwKGUudG9GaXhlZCgxMikpO3JldHVybiByLmxlbmd0aDw9dHx8KHI9''@;'; put 'put ''ZS50b1ByZWNpc2lvbigxMCkpLmxlbmd0aDw9dD9yOmUudG9FeHBvbmVudGlhbCg1KX0oZSk6MTA9PT10P2UudG9GaXhlZCgxMCkuc3Vic3RyKDAsMTIpOmZ1bmN0aW9uIFZjKGUpe3ZhciB0PUgwKGUudG9GaXhlZCgxMSkpO3JldHVybiB0Lmxlbmd0aD4oZTwwPzEyOjExKXx8IjAiPT09dHx8''@;'; put 'put ''Ii0wIj09PXQ/ZS50b1ByZWNpc2lvbig2KTp0fShlKSxIMChmdW5jdGlvbiBXYyhlKXtyZXR1cm4tMT09ZS5pbmRleE9mKCJFIik/ZTplLnJlcGxhY2UoLyg/OlwuMCp8KFwuXGQqWzEtOV0pMCspW0VlXS8sIiQxRSIpLnJlcGxhY2UoLyhFWystXSkoXGQpJC8sIiQxMCQyIil9KHIudG9VcHBl''@;'; put 'put ''ckNhc2UoKSkpfWZ1bmN0aW9uIE50KGUsdCl7c3dpdGNoKHR5cGVvZiBlKXtjYXNlInN0cmluZyI6cmV0dXJuIGU7Y2FzZSJib29sZWFuIjpyZXR1cm4gZT8iVFJVRSI6IkZBTFNFIjtjYXNlIm51bWJlciI6cmV0dXJuKDB8ZSk9PT1lP2UudG9TdHJpbmcoMTApOmthKGUpO2Nhc2UidW5kZWZp''@;'; put 'put ''bmVkIjpyZXR1cm4iIjtjYXNlIm9iamVjdCI6aWYobnVsbD09ZSlyZXR1cm4iIjtpZihlIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gUnIoMTQsb2koZSx0JiZ0LmRhdGUxOTA0KSx0KX10aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIHZhbHVlIGluIEdlbmVyYWwgZm9ybWF0OiAiK2UpfWZ1''@;'; put 'put ''bmN0aW9uIEdjKGUsdCxyLGEpe3ZhciBjLG49IiIsaT0wLHM9MCxmPXIueSxvPTA7c3dpdGNoKGUpe2Nhc2UgOTg6Zj1yLnkrNTQzO2Nhc2UgMTIxOnN3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpjPWYlMTAwLG89MjticmVhaztkZWZhdWx0OmM9ZiUxZTQsbz00fWJyZWFrO2Nhc2Ug''@;'; put 'put ''MTA5OnN3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpjPXIubSxvPXQubGVuZ3RoO2JyZWFrO2Nhc2UgMzpyZXR1cm4gVzBbci5tLTFdWzFdO2Nhc2UgNTpyZXR1cm4gVzBbci5tLTFdWzBdO2RlZmF1bHQ6cmV0dXJuIFcwW3IubS0xXVsyXX1icmVhaztjYXNlIDEwMDpzd2l0Y2godC5s''@;'; put 'put ''ZW5ndGgpe2Nhc2UgMTpjYXNlIDI6Yz1yLmQsbz10Lmxlbmd0aDticmVhaztjYXNlIDM6cmV0dXJuIHNpW3IucV1bMF07ZGVmYXVsdDpyZXR1cm4gc2lbci5xXVsxXX1icmVhaztjYXNlIDEwNDpzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6Yz0xKyhyLkgrMTEpJTEyLG89dC5sZW5n''@;'; put 'put ''dGg7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgaG91ciBmb3JtYXQ6ICIrdH1icmVhaztjYXNlIDcyOnN3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpjPXIuSCxvPXQubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIGhvdXIgZm9ybWF0OiAiK3R9YnJlYWs7Y2FzZSA3Nzpzd2l0''@;'; put 'put ''Y2godC5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6Yz1yLk0sbz10Lmxlbmd0aDticmVhaztkZWZhdWx0OnRocm93ImJhZCBtaW51dGUgZm9ybWF0OiAiK3R9YnJlYWs7Y2FzZSAxMTU6aWYoInMiIT10JiYic3MiIT10JiYiLjAiIT10JiYiLjAwIiE9dCYmIi4wMDAiIT10KXRocm93ImJhZCBzZWNv''@;'; put 'put ''bmQgZm9ybWF0OiAiK3Q7cmV0dXJuIDAhPT1yLnV8fCJzIiE9dCYmInNzIiE9dD8ocz1hPj0yPzM9PT1hPzFlMzoxMDA6MT09PWE/MTA6MSwoaT1NYXRoLnJvdW5kKHMqKHIuUytyLnUpKSk+PTYwKnMmJihpPTApLCJzIj09PXQ/MD09PWk/IjAiOiIiK2kvczoobj1ZcihpLDIrYSksInNzIj09''@;'; put 'put ''PXQ/bi5zdWJzdHIoMCwyKToiLiIrbi5zdWJzdHIoMix0Lmxlbmd0aC0xKSkpOllyKHIuUyx0Lmxlbmd0aCk7Y2FzZSA5MDpzd2l0Y2godCl7Y2FzZSJbaF0iOmNhc2UiW2hoXSI6Yz0yNCpyLkQrci5IO2JyZWFrO2Nhc2UiW21dIjpjYXNlIlttbV0iOmM9NjAqKDI0KnIuRCtyLkgpK3IuTTti''@;'; put 'put ''cmVhaztjYXNlIltzXSI6Y2FzZSJbc3NdIjpjPTYwKig2MCooMjQqci5EK3IuSCkrci5NKStNYXRoLnJvdW5kKHIuUytyLnUpO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIGFic3RpbWUgZm9ybWF0OiAiK3R9bz0zPT09dC5sZW5ndGg/MToyO2JyZWFrO2Nhc2UgMTAxOmM9ZixvPTF9cmV0dXJu''@;'; put 'put ''IG8+MD9ZcihjLG8pOiIifWZ1bmN0aW9uIEV0KGUpe2lmKGUubGVuZ3RoPD0zKXJldHVybiBlO2Zvcih2YXIgcj1lLmxlbmd0aCUzLGE9ZS5zdWJzdHIoMCxyKTtyIT1lLmxlbmd0aDtyKz0zKWErPShhLmxlbmd0aD4wPyIsIjoiIikrZS5zdWJzdHIociwzKTtyZXR1cm4gYX12YXIgbGk9LyUv''@;'; put 'put ''ZztmdW5jdGlvbiB1aShlLHQpe3ZhciByLGE9ZS5pbmRleE9mKCJFIiktZS5pbmRleE9mKCIuIiktMTtpZihlLm1hdGNoKC9eIyswLjBFXCswJC8pKXtpZigwPT10KXJldHVybiIwLjBFKzAiO2lmKHQ8MClyZXR1cm4iLSIrdWkoZSwtdCk7dmFyIG49ZS5pbmRleE9mKCIuIik7LTE9PT1uJiYo''@;'; put 'put ''bj1lLmluZGV4T2YoIkUiKSk7dmFyIGk9TWF0aC5mbG9vcihNYXRoLmxvZyh0KSpNYXRoLkxPRzEwRSklbjtpZihpPDAmJihpKz1uKSwtMT09PShyPSh0L01hdGgucG93KDEwLGkpKS50b1ByZWNpc2lvbihhKzErKG4raSklbikpLmluZGV4T2YoImUiKSl7dmFyIHM9TWF0aC5mbG9vcihNYXRo''@;'; put 'put ''LmxvZyh0KSpNYXRoLkxPRzEwRSk7Zm9yKC0xPT09ci5pbmRleE9mKCIuIik/cj1yLmNoYXJBdCgwKSsiLiIrci5zdWJzdHIoMSkrIkUrIisocy1yLmxlbmd0aCtpKTpyKz0iRSsiKyhzLWkpOyIwLiI9PT1yLnN1YnN0cigwLDIpOylyPShyPXIuY2hhckF0KDApK3Iuc3Vic3RyKDIsbikrIi4i''@;'; put 'put ''K3Iuc3Vic3RyKDIrbikpLnJlcGxhY2UoL14wKyhbMS05XSkvLCIkMSIpLnJlcGxhY2UoL14wK1wuLywiMC4iKTtyPXIucmVwbGFjZSgvXCstLywiLSIpfXI9ci5yZXBsYWNlKC9eKFsrLV0/KShcZCopXC4oXGQqKVtFZV0vLGZ1bmN0aW9uKGYsYyxvLGwpe3JldHVybiBjK28rbC5zdWJzdHIo''@;'; put 'put ''MCwobitpKSVuKSsiLiIrbC5zdWJzdHIoaSkrIkUifSl9ZWxzZSByPXQudG9FeHBvbmVudGlhbChhKTtyZXR1cm4gZS5tYXRjaCgvRVwrMDAkLykmJnIubWF0Y2goL2VbKy1dXGQkLykmJihyPXIuc3Vic3RyKDAsci5sZW5ndGgtMSkrIjAiK3IuY2hhckF0KHIubGVuZ3RoLTEpKSxlLm1hdGNo''@;'; put 'put ''KC9FXC0vKSYmci5tYXRjaCgvZVwrLykmJihyPXIucmVwbGFjZSgvZVwrLywiZSIpKSxyLnJlcGxhY2UoImUiLCJFIil9dmFyIGhpPS8jIChcPyspKCA/KVwvKCA/KShcZCspLyx4aT0vXiMqMCpcLihbMCNdKykvLGRpPS9cKS4qWzAjXS8sdmk9L1woIyMjXCkgIyMjXFw/LSMjIyMvO2Z1bmN0''@;'; put 'put ''aW9uIFRyKGUpe2Zvcih2YXIgcix0PSIiLGE9MDthIT1lLmxlbmd0aDsrK2Epc3dpdGNoKHI9ZS5jaGFyQ29kZUF0KGEpKXtjYXNlIDM1OmJyZWFrO2Nhc2UgNjM6dCs9IiAiO2JyZWFrO2Nhc2UgNDg6dCs9IjAiO2JyZWFrO2RlZmF1bHQ6dCs9U3RyaW5nLmZyb21DaGFyQ29kZShyKX1yZXR1''@;'; put 'put ''cm4gdH1mdW5jdGlvbiBwaShlLHQpe3ZhciByPU1hdGgucG93KDEwLHQpO3JldHVybiIiK01hdGgucm91bmQoZSpyKS9yfWZ1bmN0aW9uIG1pKGUsdCl7dmFyIHI9ZS1NYXRoLmZsb29yKGUpLGE9TWF0aC5wb3coMTAsdCk7cmV0dXJuIHQ8KCIiK01hdGgucm91bmQociphKSkubGVuZ3RoPzA6''@;'; put 'put ''TWF0aC5yb3VuZChyKmEpfWZ1bmN0aW9uIFVyKGUsdCxyKXtpZig0MD09PWUuY2hhckNvZGVBdCgwKSYmIXQubWF0Y2goZGkpKXt2YXIgYT10LnJlcGxhY2UoL1woICovLCIiKS5yZXBsYWNlKC8gXCkvLCIiKS5yZXBsYWNlKC9cKS8sIiIpO3JldHVybiByPj0wP1VyKCJuIixhLHIpOiIoIitV''@;'; put 'put ''cigibiIsYSwtcikrIikifWlmKDQ0PT09dC5jaGFyQ29kZUF0KHQubGVuZ3RoLTEpKXJldHVybiBmdW5jdGlvbiAkYyhlLHQscil7Zm9yKHZhciBhPXQubGVuZ3RoLTE7NDQ9PT10LmNoYXJDb2RlQXQoYS0xKTspLS1hO3JldHVybiBsdChlLHQuc3Vic3RyKDAsYSksci9NYXRoLnBvdygxMCwz''@;'; put 'put ''Kih0Lmxlbmd0aC1hKSkpfShlLHQscik7aWYoLTEhPT10LmluZGV4T2YoIiUiKSlyZXR1cm4gZnVuY3Rpb24gemMoZSx0LHIpe3ZhciBhPXQucmVwbGFjZShsaSwiIiksbj10Lmxlbmd0aC1hLmxlbmd0aDtyZXR1cm4gbHQoZSxhLHIqTWF0aC5wb3coMTAsMipuKSkramUoIiUiLG4pfShlLHQs''@;'; put 'put ''cik7aWYoLTEhPT10LmluZGV4T2YoIkUiKSlyZXR1cm4gdWkodCxyKTtpZigzNj09PXQuY2hhckNvZGVBdCgwKSlyZXR1cm4iJCIrVXIoZSx0LnN1YnN0cigiICI9PXQuY2hhckF0KDEpPzI6MSkscik7dmFyIG4saSxzLGYsYz1NYXRoLmFicyhyKSxvPXI8MD8iLSI6IiI7aWYodC5tYXRjaCgv''@;'; put 'put ''XjAwKyQvKSlyZXR1cm4gbytyYShjLHQubGVuZ3RoKTtpZih0Lm1hdGNoKC9eWyM/XSskLykpcmV0dXJuIjAiPT09KG49cmEociwwKSkmJihuPSIiKSxuLmxlbmd0aD50Lmxlbmd0aD9uOlRyKHQuc3Vic3RyKDAsdC5sZW5ndGgtbi5sZW5ndGgpKStuO2lmKGk9dC5tYXRjaChoaSkpcmV0dXJu''@;'; put 'put ''IGZ1bmN0aW9uIGpjKGUsdCxyKXt2YXIgYT1wYXJzZUludChlWzRdLDEwKSxuPU1hdGgucm91bmQodCphKSxpPU1hdGguZmxvb3Iobi9hKSxzPW4taSphLGY9YTtyZXR1cm4gcisoMD09PWk/IiI6IiIraSkrIiAiKygwPT09cz9qZSgiICIsZVsxXS5sZW5ndGgrMStlWzRdLmxlbmd0aCk6VTAo''@;'; put 'put ''cyxlWzFdLmxlbmd0aCkrZVsyXSsiLyIrZVszXStZcihmLGVbNF0ubGVuZ3RoKSl9KGksYyxvKTtpZih0Lm1hdGNoKC9eIyswKyQvKSlyZXR1cm4gbytyYShjLHQubGVuZ3RoLXQuaW5kZXhPZigiMCIpKTtpZihpPXQubWF0Y2goeGkpKXJldHVybiBuPXBpKHIsaVsxXS5sZW5ndGgpLnJlcGxh''@;'; put 'put ''Y2UoL14oW15cLl0rKSQvLCIkMS4iK1RyKGlbMV0pKS5yZXBsYWNlKC9cLiQvLCIuIitUcihpWzFdKSkucmVwbGFjZSgvXC4oXGQqKSQvLGZ1bmN0aW9uKHYsdSl7cmV0dXJuIi4iK3UramUoIjAiLFRyKGlbMV0pLmxlbmd0aC11Lmxlbmd0aCl9KSwtMSE9PXQuaW5kZXhPZigiMC4iKT9uOm4u''@;'; put 'put ''cmVwbGFjZSgvXjBcLi8sIi4iKTtpZih0PXQucmVwbGFjZSgvXiMrKFswLl0pLywiJDEiKSxpPXQubWF0Y2goL14oMCopXC4oIyopJC8pKXJldHVybiBvK3BpKGMsaVsyXS5sZW5ndGgpLnJlcGxhY2UoL1wuKFxkKlsxLTldKTAqJC8sIi4kMSIpLnJlcGxhY2UoL14oLT9cZCopJC8sIiQxLiIp''@;'; put 'put ''LnJlcGxhY2UoL14wXC4vLGlbMV0ubGVuZ3RoPyIwLiI6Ii4iKTtpZihpPXQubWF0Y2goL14jezEsM30sIyMwKFwuPykkLykpcmV0dXJuIG8rRXQocmEoYywwKSk7aWYoaT10Lm1hdGNoKC9eIywjIzBcLihbIzBdKjApJC8pKXJldHVybiByPDA/Ii0iK1VyKGUsdCwtcik6RXQoIiIrKE1hdGgu''@;'; put 'put ''Zmxvb3IocikrZnVuY3Rpb24gWWMoZSx0KXtyZXR1cm4gdDwoIiIrTWF0aC5yb3VuZCgoZS1NYXRoLmZsb29yKGUpKSpNYXRoLnBvdygxMCx0KSkpLmxlbmd0aD8xOjB9KHIsaVsxXS5sZW5ndGgpKSkrIi4iK1lyKG1pKHIsaVsxXS5sZW5ndGgpLGlbMV0ubGVuZ3RoKTtpZihpPXQubWF0Y2go''@;'; put 'put ''L14jLCMqLCMwLykpcmV0dXJuIFVyKGUsdC5yZXBsYWNlKC9eIywjKiwvLCIiKSxyKTtpZihpPXQubWF0Y2goL14oWzAjXSspKFxcPy0oWzAjXSspKSskLykpcmV0dXJuIG49ZWEoVXIoZSx0LnJlcGxhY2UoL1tcXC1dL2csIiIpLHIpKSxzPTAsZWEoZWEodC5yZXBsYWNlKC9cXC9nLCIiKSku''@;'; put 'put ''cmVwbGFjZSgvWzAjXS9nLGZ1bmN0aW9uKHYpe3JldHVybiBzPG4ubGVuZ3RoP24uY2hhckF0KHMrKyk6IjAiPT09dj8iMCI6IiJ9KSk7aWYodC5tYXRjaCh2aSkpcmV0dXJuIigiKyhuPVVyKGUsIiMjIyMjIyMjIyMiLHIpKS5zdWJzdHIoMCwzKSsiKSAiK24uc3Vic3RyKDMsMykrIi0iK24u''@;'; put 'put ''c3Vic3RyKDYpO3ZhciBsPSIiO2lmKGk9dC5tYXRjaCgvXihbIzA/XSspKCA/KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIHM9TWF0aC5taW4oaVs0XS5sZW5ndGgsNyksZj1pMChjLE1hdGgucG93KDEwLHMpLTEsITEpLG49IiIrbywiICI9PShsPWx0KCJuIixpWzFdLGZbMV0pKS5jaGFyQXQo''@;'; put 'put ''bC5sZW5ndGgtMSkmJihsPWwuc3Vic3RyKDAsbC5sZW5ndGgtMSkrIjAiKSxuKz1sK2lbMl0rIi8iK2lbM10sKGw9YTAoZlsyXSxzKSkubGVuZ3RoPGlbNF0ubGVuZ3RoJiYobD1UcihpWzRdLnN1YnN0cihpWzRdLmxlbmd0aC1sLmxlbmd0aCkpK2wpLG4rPWw7aWYoaT10Lm1hdGNoKC9eIyAo''@;'; put 'put ''WyMwP10rKSggPylcLyggPykoWyMwP10rKS8pKXJldHVybiBzPU1hdGgubWluKE1hdGgubWF4KGlbMV0ubGVuZ3RoLGlbNF0ubGVuZ3RoKSw3KSxvKygoZj1pMChjLE1hdGgucG93KDEwLHMpLTEsITApKVswXXx8KGZbMV0/IiI6IjAiKSkrIiAiKyhmWzFdP1UwKGZbMV0scykraVsyXSsiLyIr''@;'; put 'put ''aVszXSthMChmWzJdLHMpOmplKCIgIiwyKnMrMStpWzJdLmxlbmd0aCtpWzNdLmxlbmd0aCkpO2lmKGk9dC5tYXRjaCgvXlsjMD9dKyQvKSlyZXR1cm4gbj1yYShyLDApLHQubGVuZ3RoPD1uLmxlbmd0aD9uOlRyKHQuc3Vic3RyKDAsdC5sZW5ndGgtbi5sZW5ndGgpKStuO2lmKGk9dC5tYXRj''@;'; put 'put ''aCgvXihbIzA/XSspXC4oWyMwXSspJC8pKXtuPSIiK3IudG9GaXhlZChNYXRoLm1pbihpWzJdLmxlbmd0aCwxMCkpLnJlcGxhY2UoLyhbXjBdKTArJC8sIiQxIikscz1uLmluZGV4T2YoIi4iKTt2YXIgaD10LmluZGV4T2YoIi4iKS1zLHg9dC5sZW5ndGgtbi5sZW5ndGgtaDtyZXR1cm4gVHIo''@;'; put 'put ''dC5zdWJzdHIoMCxoKStuK3Quc3Vic3RyKHQubGVuZ3RoLXgpKX1pZihpPXQubWF0Y2goL14wMCwwMDBcLihbIzBdKjApJC8pKXJldHVybiBzPW1pKHIsaVsxXS5sZW5ndGgpLHI8MD8iLSIrVXIoZSx0LC1yKTpFdChmdW5jdGlvbiBKYyhlKXtyZXR1cm4gZTwyMTQ3NDgzNjQ3JiZlPi0yMTQ3''@;'; put 'put ''NDgzNjQ4PyIiKyhlPj0wPzB8ZTplLTF8MCk6IiIrTWF0aC5mbG9vcihlKX0ocikpLnJlcGxhY2UoL15cZCxcZHszfSQvLCIwJCYiKS5yZXBsYWNlKC9eXGQqJC8sZnVuY3Rpb24odil7cmV0dXJuIjAwLCIrKHYubGVuZ3RoPDM/WXIoMCwzLXYubGVuZ3RoKToiIikrdn0pKyIuIitZcihzLGlb''@;'; put 'put ''MV0ubGVuZ3RoKTtzd2l0Y2godCl7Y2FzZSIjIyMsIyMwLjAwIjpyZXR1cm4gVXIoZSwiIywjIzAuMDAiLHIpO2Nhc2UiIyMjLCMjIyI6Y2FzZSIjIywjIyMiOmNhc2UiIywjIyMiOnZhciBkPUV0KHJhKGMsMCkpO3JldHVybiIwIiE9PWQ/bytkOiIiO2Nhc2UiIyMjLCMjIy4wMCI6cmV0dXJu''@;'; put 'put ''IFVyKGUsIiMjIywjIzAuMDAiLHIpLnJlcGxhY2UoL14wXC4vLCIuIik7Y2FzZSIjLCMjIy4wMCI6cmV0dXJuIFVyKGUsIiMsIyMwLjAwIixyKS5yZXBsYWNlKC9eMFwuLywiLiIpfXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgZm9ybWF0IHwiK3QrInwiKX1mdW5jdGlvbiBnaShlLHQp''@;'; put 'put ''e3ZhciByLGE9ZS5pbmRleE9mKCJFIiktZS5pbmRleE9mKCIuIiktMTtpZihlLm1hdGNoKC9eIyswLjBFXCswJC8pKXtpZigwPT10KXJldHVybiIwLjBFKzAiO2lmKHQ8MClyZXR1cm4iLSIrZ2koZSwtdCk7dmFyIG49ZS5pbmRleE9mKCIuIik7LTE9PT1uJiYobj1lLmluZGV4T2YoIkUiKSk7''@;'; put 'put ''dmFyIGk9TWF0aC5mbG9vcihNYXRoLmxvZyh0KSpNYXRoLkxPRzEwRSklbjtpZihpPDAmJihpKz1uKSwhKHI9KHQvTWF0aC5wb3coMTAsaSkpLnRvUHJlY2lzaW9uKGErMSsobitpKSVuKSkubWF0Y2goL1tFZV0vKSl7dmFyIHM9TWF0aC5mbG9vcihNYXRoLmxvZyh0KSpNYXRoLkxPRzEwRSk7''@;'; put 'put ''LTE9PT1yLmluZGV4T2YoIi4iKT9yPXIuY2hhckF0KDApKyIuIityLnN1YnN0cigxKSsiRSsiKyhzLXIubGVuZ3RoK2kpOnIrPSJFKyIrKHMtaSkscj1yLnJlcGxhY2UoL1wrLS8sIi0iKX1yPXIucmVwbGFjZSgvXihbKy1dPykoXGQqKVwuKFxkKilbRWVdLyxmdW5jdGlvbihmLGMsbyxsKXty''@;'; put 'put ''ZXR1cm4gYytvK2wuc3Vic3RyKDAsKG4raSklbikrIi4iK2wuc3Vic3RyKGkpKyJFIn0pfWVsc2Ugcj10LnRvRXhwb25lbnRpYWwoYSk7cmV0dXJuIGUubWF0Y2goL0VcKzAwJC8pJiZyLm1hdGNoKC9lWystXVxkJC8pJiYocj1yLnN1YnN0cigwLHIubGVuZ3RoLTEpKyIwIityLmNoYXJBdChy''@;'; put 'put ''Lmxlbmd0aC0xKSksZS5tYXRjaCgvRVwtLykmJnIubWF0Y2goL2VcKy8pJiYocj1yLnJlcGxhY2UoL2VcKy8sImUiKSksci5yZXBsYWNlKCJlIiwiRSIpfWZ1bmN0aW9uIFFyKGUsdCxyKXtpZig0MD09PWUuY2hhckNvZGVBdCgwKSYmIXQubWF0Y2goZGkpKXt2YXIgYT10LnJlcGxhY2UoL1wo''@;'; put 'put ''ICovLCIiKS5yZXBsYWNlKC8gXCkvLCIiKS5yZXBsYWNlKC9cKS8sIiIpO3JldHVybiByPj0wP1FyKCJuIixhLHIpOiIoIitRcigibiIsYSwtcikrIikifWlmKDQ0PT09dC5jaGFyQ29kZUF0KHQubGVuZ3RoLTEpKXJldHVybiBmdW5jdGlvbiBxYyhlLHQscil7Zm9yKHZhciBhPXQubGVuZ3Ro''@;'; put 'put ''LTE7NDQ9PT10LmNoYXJDb2RlQXQoYS0xKTspLS1hO3JldHVybiBsdChlLHQuc3Vic3RyKDAsYSksci9NYXRoLnBvdygxMCwzKih0Lmxlbmd0aC1hKSkpfShlLHQscik7aWYoLTEhPT10LmluZGV4T2YoIiUiKSlyZXR1cm4gZnVuY3Rpb24gWmMoZSx0LHIpe3ZhciBhPXQucmVwbGFjZShsaSwi''@;'; put 'put ''Iiksbj10Lmxlbmd0aC1hLmxlbmd0aDtyZXR1cm4gbHQoZSxhLHIqTWF0aC5wb3coMTAsMipuKSkramUoIiUiLG4pfShlLHQscik7aWYoLTEhPT10LmluZGV4T2YoIkUiKSlyZXR1cm4gZ2kodCxyKTtpZigzNj09PXQuY2hhckNvZGVBdCgwKSlyZXR1cm4iJCIrUXIoZSx0LnN1YnN0cigiICI9''@;'; put 'put ''PXQuY2hhckF0KDEpPzI6MSkscik7dmFyIG4saSxzLGYsYz1NYXRoLmFicyhyKSxvPXI8MD8iLSI6IiI7aWYodC5tYXRjaCgvXjAwKyQvKSlyZXR1cm4gbytZcihjLHQubGVuZ3RoKTtpZih0Lm1hdGNoKC9eWyM/XSskLykpcmV0dXJuIG49IiIrciwwPT09ciYmKG49IiIpLG4ubGVuZ3RoPnQu''@;'; put 'put ''bGVuZ3RoP246VHIodC5zdWJzdHIoMCx0Lmxlbmd0aC1uLmxlbmd0aCkpK247aWYoaT10Lm1hdGNoKGhpKSlyZXR1cm4gZnVuY3Rpb24gS2MoZSx0LHIpe3JldHVybiByKygwPT09dD8iIjoiIit0KStqZSgiICIsZVsxXS5sZW5ndGgrMitlWzRdLmxlbmd0aCl9KGksYyxvKTtpZih0Lm1hdGNo''@;'; put 'put ''KC9eIyswKyQvKSlyZXR1cm4gbytZcihjLHQubGVuZ3RoLXQuaW5kZXhPZigiMCIpKTtpZihpPXQubWF0Y2goeGkpKXJldHVybiBuPShuPSgiIityKS5yZXBsYWNlKC9eKFteXC5dKykkLywiJDEuIitUcihpWzFdKSkucmVwbGFjZSgvXC4kLywiLiIrVHIoaVsxXSkpKS5yZXBsYWNlKC9cLihc''@;'; put 'put ''ZCopJC8sZnVuY3Rpb24odix1KXtyZXR1cm4iLiIrdStqZSgiMCIsVHIoaVsxXSkubGVuZ3RoLXUubGVuZ3RoKX0pLC0xIT09dC5pbmRleE9mKCIwLiIpP246bi5yZXBsYWNlKC9eMFwuLywiLiIpO2lmKHQ9dC5yZXBsYWNlKC9eIysoWzAuXSkvLCIkMSIpLGk9dC5tYXRjaCgvXigwKilcLigj''@;'; put 'put ''KikkLykpcmV0dXJuIG8rKCIiK2MpLnJlcGxhY2UoL1wuKFxkKlsxLTldKTAqJC8sIi4kMSIpLnJlcGxhY2UoL14oLT9cZCopJC8sIiQxLiIpLnJlcGxhY2UoL14wXC4vLGlbMV0ubGVuZ3RoPyIwLiI6Ii4iKTtpZihpPXQubWF0Y2goL14jezEsM30sIyMwKFwuPykkLykpcmV0dXJuIG8rRXQo''@;'; put 'put ''IiIrYyk7aWYoaT10Lm1hdGNoKC9eIywjIzBcLihbIzBdKjApJC8pKXJldHVybiByPDA/Ii0iK1FyKGUsdCwtcik6RXQoIiIrcikrIi4iK2plKCIwIixpWzFdLmxlbmd0aCk7aWYoaT10Lm1hdGNoKC9eIywjKiwjMC8pKXJldHVybiBRcihlLHQucmVwbGFjZSgvXiMsIyosLywiIikscik7aWYo''@;'; put 'put ''aT10Lm1hdGNoKC9eKFswI10rKShcXD8tKFswI10rKSkrJC8pKXJldHVybiBuPWVhKFFyKGUsdC5yZXBsYWNlKC9bXFwtXS9nLCIiKSxyKSkscz0wLGVhKGVhKHQucmVwbGFjZSgvXFwvZywiIikpLnJlcGxhY2UoL1swI10vZyxmdW5jdGlvbih2KXtyZXR1cm4gczxuLmxlbmd0aD9uLmNoYXJB''@;'; put 'put ''dChzKyspOiIwIj09PXY/IjAiOiIifSkpO2lmKHQubWF0Y2godmkpKXJldHVybiIoIisobj1RcihlLCIjIyMjIyMjIyMjIixyKSkuc3Vic3RyKDAsMykrIikgIituLnN1YnN0cigzLDMpKyItIituLnN1YnN0cig2KTt2YXIgbD0iIjtpZihpPXQubWF0Y2goL14oWyMwP10rKSggPylcLyggPyko''@;'; put 'put ''WyMwP10rKS8pKXJldHVybiBzPU1hdGgubWluKGlbNF0ubGVuZ3RoLDcpLGY9aTAoYyxNYXRoLnBvdygxMCxzKS0xLCExKSxuPSIiK28sIiAiPT0obD1sdCgibiIsaVsxXSxmWzFdKSkuY2hhckF0KGwubGVuZ3RoLTEpJiYobD1sLnN1YnN0cigwLGwubGVuZ3RoLTEpKyIwIiksbis9bCtpWzJd''@;'; put 'put ''KyIvIitpWzNdLChsPWEwKGZbMl0scykpLmxlbmd0aDxpWzRdLmxlbmd0aCYmKGw9VHIoaVs0XS5zdWJzdHIoaVs0XS5sZW5ndGgtbC5sZW5ndGgpKStsKSxuKz1sO2lmKGk9dC5tYXRjaCgvXiMgKFsjMD9dKykoID8pXC8oID8pKFsjMD9dKykvKSlyZXR1cm4gcz1NYXRoLm1pbihNYXRoLm1h''@;'; put 'put ''eChpWzFdLmxlbmd0aCxpWzRdLmxlbmd0aCksNyksbysoKGY9aTAoYyxNYXRoLnBvdygxMCxzKS0xLCEwKSlbMF18fChmWzFdPyIiOiIwIikpKyIgIisoZlsxXT9VMChmWzFdLHMpK2lbMl0rIi8iK2lbM10rYTAoZlsyXSxzKTpqZSgiICIsMipzKzEraVsyXS5sZW5ndGgraVszXS5sZW5ndGgp''@;'; put 'put ''KTtpZihpPXQubWF0Y2goL15bIzA/XSskLykpcmV0dXJuIHQubGVuZ3RoPD0obj0iIityKS5sZW5ndGg/bjpUcih0LnN1YnN0cigwLHQubGVuZ3RoLW4ubGVuZ3RoKSkrbjtpZihpPXQubWF0Y2goL14oWyMwXSspXC4oWyMwXSspJC8pKXtuPSIiK3IudG9GaXhlZChNYXRoLm1pbihpWzJdLmxl''@;'; put 'put ''bmd0aCwxMCkpLnJlcGxhY2UoLyhbXjBdKTArJC8sIiQxIikscz1uLmluZGV4T2YoIi4iKTt2YXIgaD10LmluZGV4T2YoIi4iKS1zLHg9dC5sZW5ndGgtbi5sZW5ndGgtaDtyZXR1cm4gVHIodC5zdWJzdHIoMCxoKStuK3Quc3Vic3RyKHQubGVuZ3RoLXgpKX1pZihpPXQubWF0Y2goL14wMCww''@;'; put 'put ''MDBcLihbIzBdKjApJC8pKXJldHVybiByPDA/Ii0iK1FyKGUsdCwtcik6RXQoIiIrcikucmVwbGFjZSgvXlxkLFxkezN9JC8sIjAkJiIpLnJlcGxhY2UoL15cZCokLyxmdW5jdGlvbih2KXtyZXR1cm4iMDAsIisodi5sZW5ndGg8Mz9ZcigwLDMtdi5sZW5ndGgpOiIiKSt2fSkrIi4iK1lyKDAs''@;'; put 'put ''aVsxXS5sZW5ndGgpO3N3aXRjaCh0KXtjYXNlIiMjIywjIyMiOmNhc2UiIyMsIyMjIjpjYXNlIiMsIyMjIjp2YXIgZD1FdCgiIitjKTtyZXR1cm4iMCIhPT1kP28rZDoiIjtkZWZhdWx0OmlmKHQubWF0Y2goL1wuWzAjP10qJC8pKXJldHVybiBRcihlLHQuc2xpY2UoMCx0Lmxhc3RJbmRleE9m''@;'; put 'put ''KCIuIikpLHIpK1RyKHQuc2xpY2UodC5sYXN0SW5kZXhPZigiLiIpKSl9dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBmb3JtYXQgfCIrdCsifCIpfWZ1bmN0aW9uIGx0KGUsdCxyKXtyZXR1cm4oMHxyKT09PXI/UXIoZSx0LHIpOlVyKGUsdCxyKX12YXIgX2k9L1xbW0hoTW1Tc1x1MEUw''@;'; put 'put ''QVx1MEUxOVx1MEUxN10qXF0vO2Z1bmN0aW9uIGJ0KGUpe2Zvcih2YXIgdD0wLHI9IiIsYT0iIjt0PGUubGVuZ3RoOylzd2l0Y2gocj1lLmNoYXJBdCh0KSl7Y2FzZSJHIjpuMChlLHQpJiYodCs9NiksdCsrO2JyZWFrO2Nhc2UnIic6Zm9yKDszNCE9PWUuY2hhckNvZGVBdCgrK3QpJiZ0PGUu''@;'; put 'put ''bGVuZ3RoOyk7Kyt0O2JyZWFrO2Nhc2UiXFwiOmNhc2UiXyI6dCs9MjticmVhaztjYXNlIkAiOisrdDticmVhaztjYXNlIkIiOmNhc2UiYiI6aWYoIjEiPT09ZS5jaGFyQXQodCsxKXx8IjIiPT09ZS5jaGFyQXQodCsxKSlyZXR1cm4hMDtjYXNlIk0iOmNhc2UiRCI6Y2FzZSJZIjpjYXNlIkgi''@;'; put 'put ''OmNhc2UiUyI6Y2FzZSJFIjpjYXNlIm0iOmNhc2UiZCI6Y2FzZSJ5IjpjYXNlImgiOmNhc2UicyI6Y2FzZSJlIjpjYXNlImciOnJldHVybiEwO2Nhc2UiQSI6Y2FzZSJhIjpjYXNlIlx1NGUwYSI6aWYoIkEvUCI9PT1lLnN1YnN0cih0LDMpLnRvVXBwZXJDYXNlKCl8fCJBTS9QTSI9PT1lLnN1''@;'; put 'put ''YnN0cih0LDUpLnRvVXBwZXJDYXNlKCl8fCJcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4Ij09PWUuc3Vic3RyKHQsNSkudG9VcHBlckNhc2UoKSlyZXR1cm4hMDsrK3Q7YnJlYWs7Y2FzZSJbIjpmb3IoYT1yOyJdIiE9PWUuY2hhckF0KHQrKykmJnQ8ZS5sZW5ndGg7KWErPWUuY2hhckF0KHQp''@;'; put 'put ''O2lmKGEubWF0Y2goX2kpKXJldHVybiEwO2JyZWFrO2Nhc2UiLiI6Y2FzZSIwIjpjYXNlIiMiOmZvcig7dDxlLmxlbmd0aCYmKCIwIz8uLEUrLSUiLmluZGV4T2Yocj1lLmNoYXJBdCgrK3QpKT4tMXx8IlxcIj09ciYmIi0iPT1lLmNoYXJBdCh0KzEpJiYiMCMiLmluZGV4T2YoZS5jaGFyQXQo''@;'; put 'put ''dCsyKSk+LTEpOyk7YnJlYWs7Y2FzZSI/Ijpmb3IoO2UuY2hhckF0KCsrdCk9PT1yOyk7YnJlYWs7Y2FzZSIqIjorK3QsKCIgIj09ZS5jaGFyQXQodCl8fCIqIj09ZS5jaGFyQXQodCkpJiYrK3Q7YnJlYWs7Y2FzZSIoIjpjYXNlIikiOisrdDticmVhaztjYXNlIjEiOmNhc2UiMiI6Y2FzZSIz''@;'; put 'put ''IjpjYXNlIjQiOmNhc2UiNSI6Y2FzZSI2IjpjYXNlIjciOmNhc2UiOCI6Y2FzZSI5Ijpmb3IoO3Q8ZS5sZW5ndGgmJiIwMTIzNDU2Nzg5Ii5pbmRleE9mKGUuY2hhckF0KCsrdCkpPi0xOyk7YnJlYWs7ZGVmYXVsdDorK3R9cmV0dXJuITF9dmFyIHdpPS9cWyg9fD5bPV0/fDxbPj1dPykoLT9c''@;'; put 'put ''ZCsoPzpcLlxkKik/KVxdLztmdW5jdGlvbiBraShlLHQpe2lmKG51bGw9PXQpcmV0dXJuITE7dmFyIHI9cGFyc2VGbG9hdCh0WzJdKTtzd2l0Y2godFsxXSl7Y2FzZSI9IjppZihlPT1yKXJldHVybiEwO2JyZWFrO2Nhc2UiPiI6aWYoZT5yKXJldHVybiEwO2JyZWFrO2Nhc2UiPCI6aWYoZTxy''@;'; put 'put ''KXJldHVybiEwO2JyZWFrO2Nhc2UiPD4iOmlmKGUhPXIpcmV0dXJuITA7YnJlYWs7Y2FzZSI+PSI6aWYoZT49cilyZXR1cm4hMDticmVhaztjYXNlIjw9IjppZihlPD1yKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIFJyKGUsdCxyKXtudWxsPT1yJiYocj17fSk7dmFyIGE9IiI7c3dpdGNo''@;'; put 'put ''KHR5cGVvZiBlKXtjYXNlInN0cmluZyI6YT0ibS9kL3l5Ij09ZSYmci5kYXRlTkY/ci5kYXRlTkY6ZTticmVhaztjYXNlIm51bWJlciI6bnVsbD09KGE9MTQ9PWUmJnIuZGF0ZU5GP3IuZGF0ZU5GOihudWxsIT1yLnRhYmxlP3IudGFibGU6cGUpW2VdKSYmKGE9ci50YWJsZSYmci50YWJsZVtm''@;'; put 'put ''aVtlXV18fHBlW2ZpW2VdXSksbnVsbD09YSYmKGE9QmNbZV18fCJHZW5lcmFsIil9aWYobjAoYSwwKSlyZXR1cm4gTnQodCxyKTt0IGluc3RhbmNlb2YgRGF0ZSYmKHQ9b2kodCxyLmRhdGUxOTA0KSk7dmFyIG49ZnVuY3Rpb24gcm8oZSx0KXt2YXIgcj1mdW5jdGlvbiBRYyhlKXtmb3IodmFy''@;'; put 'put ''IHQ9W10scj0hMSxhPTAsbj0wO2E8ZS5sZW5ndGg7KythKXN3aXRjaChlLmNoYXJDb2RlQXQoYSkpe2Nhc2UgMzQ6cj0hcjticmVhaztjYXNlIDk1OmNhc2UgNDI6Y2FzZSA5MjorK2E7YnJlYWs7Y2FzZSA1OTp0W3QubGVuZ3RoXT1lLnN1YnN0cihuLGEtbiksbj1hKzF9aWYodFt0Lmxlbmd0''@;'; put 'put ''aF09ZS5zdWJzdHIobiksITA9PT1yKXRocm93IG5ldyBFcnJvcigiRm9ybWF0IHwiK2UrInwgdW50ZXJtaW5hdGVkIHN0cmluZyAiKTtyZXR1cm4gdH0oZSksYT1yLmxlbmd0aCxuPXJbYS0xXS5pbmRleE9mKCJAIik7aWYoYTw0JiZuPi0xJiYtLWEsci5sZW5ndGg+NCl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoImNhbm5vdCBmaW5kIHJpZ2h0IGZvcm1hdCBmb3IgfCIrci5qb2luKCJ8IikrInwiKTtpZigibnVtYmVyIiE9dHlwZW9mIHQpcmV0dXJuWzQsND09PXIubGVuZ3RofHxuPi0xP3Jbci5sZW5ndGgtMV06IkAiXTtzd2l0Y2goci5sZW5ndGgpe2Nhc2UgMTpyPW4+LTE/WyJHZW5lcmFsIiwi''@;'; put 'put ''R2VuZXJhbCIsIkdlbmVyYWwiLHJbMF1dOltyWzBdLHJbMF0sclswXSwiQCJdO2JyZWFrO2Nhc2UgMjpyPW4+LTE/W3JbMF0sclswXSxyWzBdLHJbMV1dOltyWzBdLHJbMV0sclswXSwiQCJdO2JyZWFrO2Nhc2UgMzpyPW4+LTE/W3JbMF0sclsxXSxyWzBdLHJbMl1dOltyWzBdLHJbMV0sclsy''@;'; put 'put ''XSwiQCJdfXZhciBpPXQ+MD9yWzBdOnQ8MD9yWzFdOnJbMl07aWYoLTE9PT1yWzBdLmluZGV4T2YoIlsiKSYmLTE9PT1yWzFdLmluZGV4T2YoIlsiKSlyZXR1cm5bYSxpXTtpZihudWxsIT1yWzBdLm1hdGNoKC9cW1s9PD5dLyl8fG51bGwhPXJbMV0ubWF0Y2goL1xbWz08Pl0vKSl7dmFyIHM9''@;'; put 'put ''clswXS5tYXRjaCh3aSksZj1yWzFdLm1hdGNoKHdpKTtyZXR1cm4ga2kodCxzKT9bYSxyWzBdXTpraSh0LGYpP1thLHJbMV1dOlthLHJbbnVsbCE9cyYmbnVsbCE9Zj8yOjFdXX1yZXR1cm5bYSxpXX0oYSx0KTtpZihuMChuWzFdKSlyZXR1cm4gTnQodCxyKTtpZighMD09PXQpdD0iVFJVRSI7''@;'; put 'put ''ZWxzZSBpZighMT09PXQpdD0iRkFMU0UiO2Vsc2UgaWYoIiI9PT10fHxudWxsPT10KXJldHVybiIiO3JldHVybiBmdW5jdGlvbiBlbyhlLHQscixhKXtmb3IodmFyIG8sbCxoLG49W10saT0iIixzPTAsZj0iIixjPSJ0Iix4PSJIIjtzPGUubGVuZ3RoOylzd2l0Y2goZj1lLmNoYXJBdChzKSl7''@;'; put 'put ''Y2FzZSJHIjppZighbjAoZSxzKSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCBjaGFyYWN0ZXIgIitmKyIgaW4gIitlKTtuW24ubGVuZ3RoXT17dDoiRyIsdjoiR2VuZXJhbCJ9LHMrPTc7YnJlYWs7Y2FzZSciJzpmb3IoaT0iIjszNCE9PShoPWUuY2hhckNvZGVBdCgrK3MpKSYmczxl''@;'; put 'put ''Lmxlbmd0aDspaSs9U3RyaW5nLmZyb21DaGFyQ29kZShoKTtuW24ubGVuZ3RoXT17dDoidCIsdjppfSwrK3M7YnJlYWs7Y2FzZSJcXCI6dmFyIGQ9ZS5jaGFyQXQoKytzKTtuW24ubGVuZ3RoXT17dDoiKCI9PT1kfHwiKSI9PT1kP2Q6InQiLHY6ZH0sKytzO2JyZWFrO2Nhc2UiXyI6bltuLmxl''@;'; put 'put ''bmd0aF09e3Q6InQiLHY6IiAifSxzKz0yO2JyZWFrO2Nhc2UiQCI6bltuLmxlbmd0aF09e3Q6IlQiLHY6dH0sKytzO2JyZWFrO2Nhc2UiQiI6Y2FzZSJiIjppZigiMSI9PT1lLmNoYXJBdChzKzEpfHwiMiI9PT1lLmNoYXJBdChzKzEpKXtpZihudWxsPT1vJiZudWxsPT0obz1rdCh0LHIsIjIi''@;'; put 'put ''PT09ZS5jaGFyQXQocysxKSkpKXJldHVybiIiO25bbi5sZW5ndGhdPXt0OiJYIix2OmUuc3Vic3RyKHMsMil9LGM9ZixzKz0yO2JyZWFrfWNhc2UiTSI6Y2FzZSJEIjpjYXNlIlkiOmNhc2UiSCI6Y2FzZSJTIjpjYXNlIkUiOmY9Zi50b0xvd2VyQ2FzZSgpO2Nhc2UibSI6Y2FzZSJkIjpjYXNl''@;'; put 'put ''InkiOmNhc2UiaCI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiZyI6aWYodDwwfHxudWxsPT1vJiZudWxsPT0obz1rdCh0LHIpKSlyZXR1cm4iIjtmb3IoaT1mOysrczxlLmxlbmd0aCYmZS5jaGFyQXQocykudG9Mb3dlckNhc2UoKT09PWY7KWkrPWY7Im0iPT09ZiYmImgiPT09Yy50b0xvd2VyQ2Fz''@;'; put 'put ''ZSgpJiYoZj0iTSIpLCJoIj09PWYmJihmPXgpLG5bbi5sZW5ndGhdPXt0OmYsdjppfSxjPWY7YnJlYWs7Y2FzZSJBIjpjYXNlImEiOmNhc2UiXHU0ZTBhIjp2YXIgdT17dDpmLHY6Zn07aWYobnVsbD09byYmKG89a3QodCxyKSksIkEvUCI9PT1lLnN1YnN0cihzLDMpLnRvVXBwZXJDYXNlKCk/''@;'; put 'put ''KG51bGwhPW8mJih1LnY9by5IPj0xMj8iUCI6IkEiKSx1LnQ9IlQiLHg9ImgiLHMrPTMpOiJBTS9QTSI9PT1lLnN1YnN0cihzLDUpLnRvVXBwZXJDYXNlKCk/KG51bGwhPW8mJih1LnY9by5IPj0xMj8iUE0iOiJBTSIpLHUudD0iVCIscys9NSx4PSJoIik6Ilx1NGUwYVx1NTM0OC9cdTRlMGJc''@;'; put 'put ''dTUzNDgiPT09ZS5zdWJzdHIocyw1KS50b1VwcGVyQ2FzZSgpPyhudWxsIT1vJiYodS52PW8uSD49MTI/Ilx1NGUwYlx1NTM0OCI6Ilx1NGUwYVx1NTM0OCIpLHUudD0iVCIscys9NSx4PSJoIik6KHUudD0idCIsKytzKSxudWxsPT1vJiYiVCI9PT11LnQpcmV0dXJuIiI7bltuLmxlbmd0aF09''@;'; put 'put ''dSxjPWY7YnJlYWs7Y2FzZSJbIjpmb3IoaT1mOyJdIiE9PWUuY2hhckF0KHMrKykmJnM8ZS5sZW5ndGg7KWkrPWUuY2hhckF0KHMpO2lmKCJdIiE9PWkuc2xpY2UoLTEpKXRocm93J3VudGVybWluYXRlZCAiWyIgYmxvY2s6IHwnK2krInwiO2lmKGkubWF0Y2goX2kpKXtpZihudWxsPT1vJiZu''@;'; put 'put ''dWxsPT0obz1rdCh0LHIpKSlyZXR1cm4iIjtuW24ubGVuZ3RoXT17dDoiWiIsdjppLnRvTG93ZXJDYXNlKCl9LGM9aS5jaGFyQXQoMSl9ZWxzZSBpLmluZGV4T2YoIiQiKT4tMSYmKGk9KGkubWF0Y2goL1wkKFteLVxbXF1dKikvKXx8W10pWzFdfHwiJCIsYnQoZSl8fChuW24ubGVuZ3RoXT17''@;'; put 'put ''dDoidCIsdjppfSkpO2JyZWFrO2Nhc2UiLiI6aWYobnVsbCE9byl7Zm9yKGk9ZjsrK3M8ZS5sZW5ndGgmJiIwIj09PShmPWUuY2hhckF0KHMpKTspaSs9ZjtuW24ubGVuZ3RoXT17dDoicyIsdjppfTticmVha31jYXNlIjAiOmNhc2UiIyI6Zm9yKGk9ZjsrK3M8ZS5sZW5ndGgmJiIwIz8uLEUr''@;'; put 'put ''LSUiLmluZGV4T2YoZj1lLmNoYXJBdChzKSk+LTE7KWkrPWY7bltuLmxlbmd0aF09e3Q6Im4iLHY6aX07YnJlYWs7Y2FzZSI/Ijpmb3IoaT1mO2UuY2hhckF0KCsrcyk9PT1mOylpKz1mO25bbi5sZW5ndGhdPXt0OmYsdjppfSxjPWY7YnJlYWs7Y2FzZSIqIjorK3MsKCIgIj09ZS5jaGFyQXQo''@;'; put 'put ''cyl8fCIqIj09ZS5jaGFyQXQocykpJiYrK3M7YnJlYWs7Y2FzZSIoIjpjYXNlIikiOm5bbi5sZW5ndGhdPXt0OjE9PT1hPyJ0IjpmLHY6Zn0sKytzO2JyZWFrO2Nhc2UiMSI6Y2FzZSIyIjpjYXNlIjMiOmNhc2UiNCI6Y2FzZSI1IjpjYXNlIjYiOmNhc2UiNyI6Y2FzZSI4IjpjYXNlIjkiOmZv''@;'; put 'put ''cihpPWY7czxlLmxlbmd0aCYmIjAxMjM0NTY3ODkiLmluZGV4T2YoZS5jaGFyQXQoKytzKSk+LTE7KWkrPWUuY2hhckF0KHMpO25bbi5sZW5ndGhdPXt0OiJEIix2Oml9O2JyZWFrO2Nhc2UiICI6bltuLmxlbmd0aF09e3Q6Zix2OmZ9LCsrczticmVhaztjYXNlIiQiOm5bbi5sZW5ndGhdPXt0''@;'; put 'put ''OiJ0Iix2OiIkIn0sKytzO2JyZWFrO2RlZmF1bHQ6aWYoLTE9PT0iLCQtKy8oKTohXiYnfnt9PD49XHUyMGFjYWNmaWprbG9wcXJ0dXZ3eHpQIi5pbmRleE9mKGYpKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIGNoYXJhY3RlciAiK2YrIiBpbiAiK2UpO25bbi5sZW5ndGhdPXt0OiJ0''@;'; put 'put ''Iix2OmZ9LCsrc312YXIgVCxwPTAsaz0wO2ZvcihzPW4ubGVuZ3RoLTEsYz0idCI7cz49MDstLXMpc3dpdGNoKG5bc10udCl7Y2FzZSJoIjpjYXNlIkgiOm5bc10udD14LGM9ImgiLHA8MSYmKHA9MSk7YnJlYWs7Y2FzZSJzIjooVD1uW3NdLnYubWF0Y2goL1wuMCskLykpJiYoaz1NYXRoLm1h''@;'; put 'put ''eChrLFRbMF0ubGVuZ3RoLTEpKSxwPDMmJihwPTMpO2Nhc2UiZCI6Y2FzZSJ5IjpjYXNlIk0iOmNhc2UiZSI6Yz1uW3NdLnQ7YnJlYWs7Y2FzZSJtIjoicyI9PT1jJiYobltzXS50PSJNIixwPDImJihwPTIpKTticmVhaztjYXNlIlgiOmJyZWFrO2Nhc2UiWiI6cDwxJiZuW3NdLnYubWF0Y2go''@;'; put 'put ''L1tIaF0vKSYmKHA9MSkscDwyJiZuW3NdLnYubWF0Y2goL1tNbV0vKSYmKHA9MikscDwzJiZuW3NdLnYubWF0Y2goL1tTc10vKSYmKHA9Myl9c3dpdGNoKHApe2Nhc2UgMDpicmVhaztjYXNlIDE6by51Pj0uNSYmKG8udT0wLCsrby5TKSxvLlM+PTYwJiYoby5TPTAsKytvLk0pLG8uTT49NjAm''@;'; put 'put ''JihvLk09MCwrK28uSCk7YnJlYWs7Y2FzZSAyOm8udT49LjUmJihvLnU9MCwrK28uUyksby5TPj02MCYmKG8uUz0wLCsrby5NKX12YXIgTixnPSIiO2ZvcihzPTA7czxuLmxlbmd0aDsrK3Mpc3dpdGNoKG5bc10udCl7Y2FzZSJ0IjpjYXNlIlQiOmNhc2UiICI6Y2FzZSJEIjpicmVhaztjYXNl''@;'; put 'put ''IlgiOm5bc10udj0iIixuW3NdLnQ9IjsiO2JyZWFrO2Nhc2UiZCI6Y2FzZSJtIjpjYXNlInkiOmNhc2UiaCI6Y2FzZSJIIjpjYXNlIk0iOmNhc2UicyI6Y2FzZSJlIjpjYXNlImIiOmNhc2UiWiI6bltzXS52PUdjKG5bc10udC5jaGFyQ29kZUF0KDApLG5bc10udixvLGspLG5bc10udD0idCI7''@;'; put 'put ''YnJlYWs7Y2FzZSJuIjpjYXNlIj8iOmZvcihOPXMrMTtudWxsIT1uW05dJiYoIj8iPT09KGY9bltOXS50KXx8IkQiPT09Znx8KCIgIj09PWZ8fCJ0Ij09PWYpJiZudWxsIT1uW04rMV0mJigiPyI9PT1uW04rMV0udHx8InQiPT09bltOKzFdLnQmJiIvIj09PW5bTisxXS52KXx8IigiPT09bltz''@;'; put 'put ''XS50JiYoIiAiPT09Znx8Im4iPT09Znx8IikiPT09Zil8fCJ0Ij09PWYmJigiLyI9PT1uW05dLnZ8fCIgIj09PW5bTl0udiYmbnVsbCE9bltOKzFdJiYiPyI9PW5bTisxXS50KSk7KW5bc10udis9bltOXS52LG5bTl09e3Y6IiIsdDoiOyJ9LCsrTjtnKz1uW3NdLnYscz1OLTE7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJHIjpuW3NdLnQ9InQiLG5bc10udj1OdCh0LHIpfXZhciBJLHksTT0iIjtpZihnLmxlbmd0aD4wKXs0MD09Zy5jaGFyQ29kZUF0KDApPyhJPXQ8MCYmNDU9PT1nLmNoYXJDb2RlQXQoMCk/LXQ6dCx5PWx0KCJuIixnLEkpKTooeT1sdCgibiIsZyxJPXQ8MCYmYT4xPy10OnQpLEk8MCYmblsw''@;'; put 'put ''XSYmInQiPT1uWzBdLnQmJih5PXkuc3Vic3RyKDEpLG5bMF0udj0iLSIrblswXS52KSksTj15Lmxlbmd0aC0xO3ZhciBQPW4ubGVuZ3RoO2ZvcihzPTA7czxuLmxlbmd0aDsrK3MpaWYobnVsbCE9bltzXSYmInQiIT1uW3NdLnQmJm5bc10udi5pbmRleE9mKCIuIik+LTEpe1A9czticmVha312''@;'; put 'put ''YXIgUj1uLmxlbmd0aDtpZihQPT09bi5sZW5ndGgmJi0xPT09eS5pbmRleE9mKCJFIikpe2ZvcihzPW4ubGVuZ3RoLTE7cz49MDstLXMpbnVsbD09bltzXXx8LTE9PT0ibj8iLmluZGV4T2YobltzXS50KXx8KE4+PW5bc10udi5sZW5ndGgtMT9uW3NdLnY9eS5zdWJzdHIoMSsoTi09bltzXS52''@;'; put 'put ''Lmxlbmd0aCksbltzXS52Lmxlbmd0aCk6TjwwP25bc10udj0iIjoobltzXS52PXkuc3Vic3RyKDAsTisxKSxOPS0xKSxuW3NdLnQ9InQiLFI9cyk7Tj49MCYmUjxuLmxlbmd0aCYmKG5bUl0udj15LnN1YnN0cigwLE4rMSkrbltSXS52KX1lbHNlIGlmKFAhPT1uLmxlbmd0aCYmLTE9PT15Lmlu''@;'; put 'put ''ZGV4T2YoIkUiKSl7Zm9yKE49eS5pbmRleE9mKCIuIiktMSxzPVA7cz49MDstLXMpaWYobnVsbCE9bltzXSYmLTEhPT0ibj8iLmluZGV4T2YobltzXS50KSl7Zm9yKGw9bltzXS52LmluZGV4T2YoIi4iKT4tMSYmcz09PVA/bltzXS52LmluZGV4T2YoIi4iKS0xOm5bc10udi5sZW5ndGgtMSxN''@;'; put 'put ''PW5bc10udi5zdWJzdHIobCsxKTtsPj0wOy0tbClOPj0wJiYoIjAiPT09bltzXS52LmNoYXJBdChsKXx8IiMiPT09bltzXS52LmNoYXJBdChsKSkmJihNPXkuY2hhckF0KE4tLSkrTSk7bltzXS52PU0sbltzXS50PSJ0IixSPXN9Zm9yKE4+PTAmJlI8bi5sZW5ndGgmJihuW1JdLnY9eS5zdWJz''@;'; put 'put ''dHIoMCxOKzEpK25bUl0udiksTj15LmluZGV4T2YoIi4iKSsxLHM9UDtzPG4ubGVuZ3RoOysrcylpZihudWxsIT1uW3NdJiYoLTEhPT0ibj8oIi5pbmRleE9mKG5bc10udCl8fHM9PT1QKSl7Zm9yKGw9bltzXS52LmluZGV4T2YoIi4iKT4tMSYmcz09PVA/bltzXS52LmluZGV4T2YoIi4iKSsx''@;'; put 'put ''OjAsTT1uW3NdLnYuc3Vic3RyKDAsbCk7bDxuW3NdLnYubGVuZ3RoOysrbClOPHkubGVuZ3RoJiYoTSs9eS5jaGFyQXQoTisrKSk7bltzXS52PU0sbltzXS50PSJ0IixSPXN9fX1mb3Iocz0wO3M8bi5sZW5ndGg7KytzKW51bGwhPW5bc10mJiJuPyIuaW5kZXhPZihuW3NdLnQpPi0xJiYobltz''@;'; put 'put ''XS52PWx0KG5bc10udCxuW3NdLnYsST1hPjEmJnQ8MCYmcz4wJiYiLSI9PT1uW3MtMV0udj8tdDp0KSxuW3NdLnQ9InQiKTt2YXIgVj0iIjtmb3Iocz0wO3MhPT1uLmxlbmd0aDsrK3MpbnVsbCE9bltzXSYmKFYrPW5bc10udik7cmV0dXJuIFZ9KG5bMV0sdCxyLG5bMF0pfWZ1bmN0aW9uIGV0''@;'; put 'put ''KGUsdCl7aWYoIm51bWJlciIhPXR5cGVvZiB0KXt0PSt0fHwtMTtmb3IodmFyIHI9MDtyPDM5MjsrK3IpaWYobnVsbCE9cGVbcl0pe2lmKHBlW3JdPT1lKXt0PXI7YnJlYWt9fWVsc2UgdDwwJiYodD1yKTt0PDAmJih0PTM5MSl9cmV0dXJuIHBlW3RdPWUsdH1mdW5jdGlvbiB0YSgpe3BlPWZ1''@;'; put 'put ''bmN0aW9uIExjKGUpe3JldHVybiBlfHwoZT17fSksZVswXT0iR2VuZXJhbCIsZVsxXT0iMCIsZVsyXT0iMC4wMCIsZVszXT0iIywjIzAiLGVbNF09IiMsIyMwLjAwIixlWzldPSIwJSIsZVsxMF09IjAuMDAlIixlWzExXT0iMC4wMEUrMDAiLGVbMTJdPSIjID8vPyIsZVsxM109IiMgPz8vPz8i''@;'; put 'put ''LGVbMTRdPSJtL2QveXkiLGVbMTVdPSJkLW1tbS15eSIsZVsxNl09ImQtbW1tIixlWzE3XT0ibW1tLXl5IixlWzE4XT0iaDptbSBBTS9QTSIsZVsxOV09Img6bW06c3MgQU0vUE0iLGVbMjBdPSJoOm1tIixlWzIxXT0iaDptbTpzcyIsZVsyMl09Im0vZC95eSBoOm1tIixlWzM3XT0iIywjIzAg''@;'; put 'put ''OygjLCMjMCkiLGVbMzhdPSIjLCMjMCA7W1JlZF0oIywjIzApIixlWzM5XT0iIywjIzAuMDA7KCMsIyMwLjAwKSIsZVs0MF09IiMsIyMwLjAwO1tSZWRdKCMsIyMwLjAwKSIsZVs0NV09Im1tOnNzIixlWzQ2XT0iW2hdOm1tOnNzIixlWzQ3XT0ibW1zcy4wIixlWzQ4XT0iIyMwLjBFKzAiLGVb''@;'; put 'put ''NDldPSJAIixlWzU2XT0nIlx1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggImhoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyICInLGV9KCl9dmFyIGFvPXs1OiciJCIjLCMjMF8pO1xcKCIkIiMsIyMwXFwpJyw2OiciJCIjLCMjMF8pO1tSZWRdXFwoIiQiIywjIzBcXCknLDc6JyIkIiMsIyMw''@;'; put 'put ''LjAwXyk7XFwoIiQiIywjIzAuMDBcXCknLDg6JyIkIiMsIyMwLjAwXyk7W1JlZF1cXCgiJCIjLCMjMC4wMFxcKScsMjM6IkdlbmVyYWwiLDI0OiJHZW5lcmFsIiwyNToiR2VuZXJhbCIsMjY6IkdlbmVyYWwiLDI3OiJtL2QveXkiLDI4OiJtL2QveXkiLDI5OiJtL2QveXkiLDMwOiJtL2QveXki''@;'; put 'put ''LDMxOiJtL2QveXkiLDMyOiJoOm1tOnNzIiwzMzoiaDptbTpzcyIsMzQ6Img6bW06c3MiLDM1OiJoOm1tOnNzIiwzNjoibS9kL3l5Iiw0MTonXygqICMsIyMwXyk7XygqICgjLCMjMCk7XygqICItIl8pO18oQF8pJyw0MjonXygiJCIqICMsIyMwXyk7XygiJCIqICgjLCMjMCk7XygiJCIqICIt''@;'; put 'put ''Il8pO18oQF8pJyw0MzonXygqICMsIyMwLjAwXyk7XygqICgjLCMjMC4wMCk7XygqICItIj8/Xyk7XyhAXyknLDQ0OidfKCIkIiogIywjIzAuMDBfKTtfKCIkIiogKCMsIyMwLjAwKTtfKCIkIiogIi0iPz9fKTtfKEBfKScsNTA6Im0vZC95eSIsNTE6Im0vZC95eSIsNTI6Im0vZC95eSIsNTM6''@;'; put 'put ''Im0vZC95eSIsNTQ6Im0vZC95eSIsNTU6Im0vZC95eSIsNTY6Im0vZC95eSIsNTc6Im0vZC95eSIsNTg6Im0vZC95eSIsNTk6IjAiLDYwOiIwLjAwIiw2MToiIywjIzAiLDYyOiIjLCMjMC4wMCIsNjM6JyIkIiMsIyMwXyk7XFwoIiQiIywjIzBcXCknLDY0OiciJCIjLCMjMF8pO1tSZWRdXFwo''@;'; put 'put ''IiQiIywjIzBcXCknLDY1OiciJCIjLCMjMC4wMF8pO1xcKCIkIiMsIyMwLjAwXFwpJyw2NjonIiQiIywjIzAuMDBfKTtbUmVkXVxcKCIkIiMsIyMwLjAwXFwpJyw2NzoiMCUiLDY4OiIwLjAwJSIsNjk6IiMgPy8/Iiw3MDoiIyA/Py8/PyIsNzE6Im0vZC95eSIsNzI6Im0vZC95eSIsNzM6ImQt''@;'; put 'put ''bW1tLXl5Iiw3NDoiZC1tbW0iLDc1OiJtbW0teXkiLDc2OiJoOm1tIiw3NzoiaDptbTpzcyIsNzg6Im0vZC95eSBoOm1tIiw3OToibW06c3MiLDgwOiJbaF06bW06c3MiLDgxOiJtbXNzLjAifSxFaT0vW2REXSt8W21NXSt8W3lZZUVdK3xbSGhdK3xbU3NdKy9nLHNvPWZ1bmN0aW9uKCl7dmFy''@;'; put 'put ''IGU9e3ZlcnNpb246IjEuMi4wIn0scj1mdW5jdGlvbiB0KCl7Zm9yKHZhciB5PTAsUD1uZXcgQXJyYXkoMjU2KSxSPTA7MjU2IT1SOysrUilQW1JdPXk9MSYoeT0xJih5PTEmKHk9MSYoeT0xJih5PTEmKHk9MSYoeT0xJih5PVIpPy0zMDY2NzQ5MTJeeT4+PjE6eT4+PjEpPy0zMDY2NzQ5MTJe''@;'; put 'put ''eT4+PjE6eT4+PjEpPy0zMDY2NzQ5MTJeeT4+PjE6eT4+PjEpPy0zMDY2NzQ5MTJeeT4+PjE6eT4+PjEpPy0zMDY2NzQ5MTJeeT4+PjE6eT4+PjEpPy0zMDY2NzQ5MTJeeT4+PjE6eT4+PjEpPy0zMDY2NzQ5MTJeeT4+PjE6eT4+PjEpPy0zMDY2NzQ5MTJeeT4+PjE6eT4+PjE7cmV0dXJuIHR5''@;'; put 'put ''cGVvZiBJbnQzMkFycmF5PCJ1Ij9uZXcgSW50MzJBcnJheShQKTpQfSgpLG49ZnVuY3Rpb24gYSh5KXt2YXIgUD0wLFI9MCxWPTAsWD10eXBlb2YgSW50MzJBcnJheTwidSI/bmV3IEludDMyQXJyYXkoNDA5Nik6bmV3IEFycmF5KDQwOTYpO2ZvcihWPTA7MjU2IT1WOysrVilYW1ZdPXlbVl07''@;'; put 'put ''Zm9yKFY9MDsyNTYhPVY7KytWKWZvcihSPXlbVl0sUD0yNTYrVjtQPDQwOTY7UCs9MjU2KVI9WFtQXT1SPj4+OF55WzI1NSZSXTt2YXIgYj1bXTtmb3IoVj0xOzE2IT1WOysrViliW1YtMV09dHlwZW9mIEludDMyQXJyYXk8InUiP1guc3ViYXJyYXkoMjU2KlYsMjU2KlYrMjU2KTpYLnNsaWNl''@;'; put 'put ''KDI1NipWLDI1NipWKzI1Nik7cmV0dXJuIGJ9KHIpLGk9blswXSxzPW5bMV0sZj1uWzJdLGM9blszXSxvPW5bNF0sbD1uWzVdLGg9bls2XSx4PW5bN10sZD1uWzhdLHY9bls5XSx1PW5bMTBdLHA9blsxMV0saz1uWzEyXSxUPW5bMTNdLGc9blsxNF07cmV0dXJuIGUudGFibGU9cixlLmJzdHI9''@;'; put 'put ''ZnVuY3Rpb24gTih5LFApe2Zvcih2YXIgUj1+UCxWPTAsWD15Lmxlbmd0aDtWPFg7KVI9Uj4+PjheclsyNTUmKFJeeS5jaGFyQ29kZUF0KFYrKykpXTtyZXR1cm5+Un0sZS5idWY9ZnVuY3Rpb24gTSh5LFApe2Zvcih2YXIgUj1+UCxWPXkubGVuZ3RoLTE1LFg9MDtYPFY7KVI9Z1t5W1grK11e''@;'; put 'put ''MjU1JlJdXlRbeVtYKytdXlI+PjgmMjU1XV5rW3lbWCsrXV5SPj4xNiYyNTVdXnBbeVtYKytdXlI+Pj4yNF1edVt5W1grK11dXnZbeVtYKytdXV5kW3lbWCsrXV1eeFt5W1grK11dXmhbeVtYKytdXV5sW3lbWCsrXV1eb1t5W1grK11dXmNbeVtYKytdXV5mW3lbWCsrXV1ec1t5W1grK11dXmlb''@;'; put 'put ''eVtYKytdXV5yW3lbWCsrXV07Zm9yKFYrPTE1O1g8VjspUj1SPj4+OF5yWzI1NSYoUl55W1grK10pXTtyZXR1cm5+Un0sZS5zdHI9ZnVuY3Rpb24gSSh5LFApe2Zvcih2YXIgUj1+UCxWPTAsWD15Lmxlbmd0aCxiPTAsZWU9MDtWPFg7KShiPXkuY2hhckNvZGVBdChWKyspKTwxMjg/Uj1SPj4+''@;'; put 'put ''OF5yWzI1NSYoUl5iKV06YjwyMDQ4P1I9KFI9Uj4+PjheclsyNTUmKFJeKDE5MnxiPj42JjMxKSldKT4+PjheclsyNTUmKFJeKDEyOHw2MyZiKSldOmI+PTU1Mjk2JiZiPDU3MzQ0PyhiPTY0KygxMDIzJmIpLGVlPTEwMjMmeS5jaGFyQ29kZUF0KFYrKyksUj0oUj0oUj0oUj1SPj4+OF5yWzI1''@;'; put 'put ''NSYoUl4oMjQwfGI+PjgmNykpXSk+Pj44XnJbMjU1JihSXigxMjh8Yj4+MiY2MykpXSk+Pj44XnJbMjU1JihSXigxMjh8ZWU+PjYmMTV8KDMmYik8PDQpKV0pPj4+OF5yWzI1NSYoUl4oMTI4fDYzJmVlKSldKTpSPShSPShSPVI+Pj44XnJbMjU1JihSXigyMjR8Yj4+MTImMTUpKV0pPj4+OF5y''@;'; put 'put ''WzI1NSYoUl4oMTI4fGI+PjYmNjMpKV0pPj4+OF5yWzI1NSYoUl4oMTI4fDYzJmIpKV07cmV0dXJuflJ9LGV9KCksdmU9ZnVuY3Rpb24oKXt2YXIgYyx0PXt9O2Z1bmN0aW9uIGEobSl7aWYoIi8iPT1tLmNoYXJBdChtLmxlbmd0aC0xKSlyZXR1cm4tMT09PW0uc2xpY2UoMCwtMSkuaW5kZXhP''@;'; put 'put ''ZigiLyIpP206YShtLnNsaWNlKDAsLTEpKTt2YXIgRT1tLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuLTE9PT1FP206bS5zbGljZSgwLEUrMSl9ZnVuY3Rpb24gbihtKXtpZigiLyI9PW0uY2hhckF0KG0ubGVuZ3RoLTEpKXJldHVybiBuKG0uc2xpY2UoMCwtMSkpO3ZhciBFPW0ubGFzdEluZGV4''@;'; put 'put ''T2YoIi8iKTtyZXR1cm4tMT09PUU/bTptLnNsaWNlKEUrMSl9ZnVuY3Rpb24gaShtLEUpeyJzdHJpbmciPT10eXBlb2YgRSYmKEU9bmV3IERhdGUoRSkpO3ZhciBfPUUuZ2V0SG91cnMoKTtfPShfPV88PDZ8RS5nZXRNaW51dGVzKCkpPDw1fEUuZ2V0U2Vjb25kcygpPj4+MSxtLndyaXRlX3No''@;'; put 'put ''aWZ0KDIsXyk7dmFyIHc9RS5nZXRGdWxsWWVhcigpLTE5ODA7dz0odz13PDw0fEUuZ2V0TW9udGgoKSsxKTw8NXxFLmdldERhdGUoKSxtLndyaXRlX3NoaWZ0KDIsdyl9ZnVuY3Rpb24gZihtKXtocihtLDApO2Zvcih2YXIgRT17fSxfPTA7bS5sPD1tLmxlbmd0aC00Oyl7dmFyIHc9bS5yZWFk''@;'; put 'put ''X3NoaWZ0KDIpLFM9bS5yZWFkX3NoaWZ0KDIpLEY9bS5sK1MsTD17fTsyMTU4OT09PXcmJigxJihfPW0ucmVhZF9zaGlmdCgxKSkmJihMLm10aW1lPW0ucmVhZF9zaGlmdCg0KSksUz41JiYoMiZfJiYoTC5hdGltZT1tLnJlYWRfc2hpZnQoNCkpLDQmXyYmKEwuY3RpbWU9bS5yZWFkX3NoaWZ0''@;'; put 'put ''KDQpKSksTC5tdGltZSYmKEwubXQ9bmV3IERhdGUoMWUzKkwubXRpbWUpKSksbS5sPUYsRVt3XT1MfXJldHVybiBFfWZ1bmN0aW9uIG8oKXtyZXR1cm4gY3x8KGM9e30pfWZ1bmN0aW9uIGwobSxFKXtpZig4MD09bVswXSYmNzU9PW1bMV0pcmV0dXJuIENjKG0sRSk7aWYoMTA5PT0oMzJ8bVsw''@;'; put 'put ''XSkmJjEwNT09KDMyfG1bMV0pKXJldHVybiBmdW5jdGlvbiBOZyhtLEUpe2lmKCJtaW1lLXZlcnNpb246IiE9Y2UobS5zbGljZSgwLDEzKSkudG9Mb3dlckNhc2UoKSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIE1BRCBoZWFkZXIiKTt2YXIgXz1FJiZFLnJvb3R8fCIiLHc9KFNlJiZC''@;'; put 'put ''dWZmZXIuaXNCdWZmZXIobSk/bS50b1N0cmluZygiYmluYXJ5Iik6Y2UobSkpLnNwbGl0KCJcclxuIiksUz0wLEY9IiI7Zm9yKFM9MDtTPHcubGVuZ3RoOysrUylpZigvXkNvbnRlbnQtTG9jYXRpb246L2kudGVzdChGPXdbU10pJiYoRj1GLnNsaWNlKEYuaW5kZXhPZigiZmlsZSIpKSxffHwo''@;'; put 'put ''Xz1GLnNsaWNlKDAsRi5sYXN0SW5kZXhPZigiLyIpKzEpKSxGLnNsaWNlKDAsXy5sZW5ndGgpIT1fKSlmb3IoO18ubGVuZ3RoPjAmJihfPShfPV8uc2xpY2UoMCxfLmxlbmd0aC0xKSkuc2xpY2UoMCxfLmxhc3RJbmRleE9mKCIvIikrMSksRi5zbGljZSgwLF8ubGVuZ3RoKSE9Xyk7KTt2YXIg''@;'; put 'put ''TD0od1sxXXx8IiIpLm1hdGNoKC9ib3VuZGFyeT0iKC4qPykiLyk7aWYoIUwpdGhyb3cgbmV3IEVycm9yKCJNQUQgY2Fubm90IGZpbmQgYm91bmRhcnkiKTt2YXIgej0iLS0iKyhMWzFdfHwiIiksSD17RmlsZUluZGV4OltdLEZ1bGxQYXRoczpbXX07eShIKTt2YXIgcSxuZT0wO2ZvcihTPTA7''@;'; put 'put ''Uzx3Lmxlbmd0aDsrK1Mpe3ZhciBoZT13W1NdO2hlIT09eiYmaGUhPT16KyItLSJ8fChuZSsrJiZSZyhILHcuc2xpY2UocSxTKSxfKSxxPVMpfXJldHVybiBIfShtLEUpO2lmKG0ubGVuZ3RoPDUxMil0aHJvdyBuZXcgRXJyb3IoIkNGQiBmaWxlIHNpemUgIittLmxlbmd0aCsiIDwgNTEyIik7''@;'; put 'put ''dmFyIF8sUyxGLEwseixXLHc9NTEyLEI9W10sSD1tLnNsaWNlKDAsNTEyKTtocihILDApO3ZhciBxPWZ1bmN0aW9uIGgobSl7aWYoODA9PW1bbS5sXSYmNzU9PW1bbS5sKzFdKXJldHVyblswLDBdO20uY2hrKGxlLCJIZWFkZXIgU2lnbmF0dXJlOiAiKSxtLmwrPTE2O3ZhciBFPW0ucmVhZF9z''@;'; put 'put ''aGlmdCgyLCJ1Iik7cmV0dXJuW20ucmVhZF9zaGlmdCgyLCJ1IiksRV19KEgpO3N3aXRjaChfPXFbMF0pe2Nhc2UgMzp3PTUxMjticmVhaztjYXNlIDQ6dz00MDk2O2JyZWFrO2Nhc2UgMDppZigwPT1xWzFdKXJldHVybiBDYyhtLEUpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJNYWpvciBW''@;'; put 'put ''ZXJzaW9uOiBFeHBlY3RlZCAzIG9yIDQgc2F3ICIrXyl9NTEyIT09dyYmaHIoSD1tLnNsaWNlKDAsdyksMjgpO3ZhciBuZT1tLnNsaWNlKDAsdyk7IWZ1bmN0aW9uIHgobSxFKXt2YXIgXztzd2l0Y2gobS5sKz0yLF89bS5yZWFkX3NoaWZ0KDIpKXtjYXNlIDk6aWYoMyE9RSl0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIlNlY3RvciBTaGlmdDogRXhwZWN0ZWQgOSBzYXcgIitfKTticmVhaztjYXNlIDEyOmlmKDQhPUUpdGhyb3cgbmV3IEVycm9yKCJTZWN0b3IgU2hpZnQ6IEV4cGVjdGVkIDEyIHNhdyAiK18pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJTZWN0b3IgU2hpZnQ6IEV4cGVj''@;'; put 'put ''dGVkIDkgb3IgMTIgc2F3ICIrXyl9bS5jaGsoIjA2MDAiLCJNaW5pIFNlY3RvciBTaGlmdDogIiksbS5jaGsoIjAwMDAwMDAwMDAwMCIsIlJlc2VydmVkOiAiKX0oSCxfKTt2YXIgaGU9SC5yZWFkX3NoaWZ0KDQsImkiKTtpZigzPT09XyYmMCE9PWhlKXRocm93IG5ldyBFcnJvcigiIyBEaXJl''@;'; put 'put ''Y3RvcnkgU2VjdG9yczogRXhwZWN0ZWQgMCBzYXcgIitoZSk7SC5sKz00LEw9SC5yZWFkX3NoaWZ0KDQsImkiKSxILmwrPTQsSC5jaGsoIjAwMTAwMDAwIiwiTWluaSBTdHJlYW0gQ3V0b2ZmIFNpemU6ICIpLHo9SC5yZWFkX3NoaWZ0KDQsImkiKSxTPUgucmVhZF9zaGlmdCg0LCJpIiksVz1I''@;'; put 'put ''LnJlYWRfc2hpZnQoNCwiaSIpLEY9SC5yZWFkX3NoaWZ0KDQsImkiKTtmb3IodmFyIGllPS0xLGZlPTA7ZmU8MTA5JiYhKChpZT1ILnJlYWRfc2hpZnQoNCwiaSIpKTwwKTsrK2ZlKUJbZmVdPWllO3ZhciBfZT1mdW5jdGlvbiBkKG0sRSl7Zm9yKHZhciBfPU1hdGguY2VpbChtLmxlbmd0aC9F''@;'; put 'put ''KS0xLHc9W10sUz0xO1M8XzsrK1Mpd1tTLTFdPW0uc2xpY2UoUypFLChTKzEpKkUpO3JldHVybiB3W18tMV09bS5zbGljZShfKkUpLHd9KG0sdyk7cChXLEYsX2UsdyxCKTt2YXIgVmU9ZnVuY3Rpb24gVChtLEUsXyx3KXt2YXIgUz1tLmxlbmd0aCxGPVtdLEw9W10sej1bXSxXPVtdLEI9dy0x''@;'; put 'put ''LEg9MCxxPTAsbmU9MCxoZT0wO2ZvcihIPTA7SDxTOysrSClpZih6PVtdLChuZT1IK0UpPj1TJiYobmUtPVMpLCFMW25lXSl7Vz1bXTt2YXIgaWU9W107Zm9yKHE9bmU7cT49MDspe2llW3FdPSEwLExbcV09ITAselt6Lmxlbmd0aF09cSxXLnB1c2gobVtxXSk7dmFyIGZlPV9bTWF0aC5mbG9v''@;'; put 'put ''cig0KnEvdyldO2lmKHc8NCsoaGU9NCpxJkIpKXRocm93IG5ldyBFcnJvcigiRkFUIGJvdW5kYXJ5IGNyb3NzZWQ6ICIrcSsiIDQgIit3KTtpZighbVtmZV18fGllW3E9THQobVtmZV0saGUpXSlicmVha31GW25lXT17bm9kZXM6eixkYXRhOnppKFtXXSl9fXJldHVybiBGfShfZSxMLEIsdyk7''@;'; put 'put ''VmVbTF0ubmFtZT0iIURpcmVjdG9yeSIsUz4wJiZ6IT09ZWUmJihWZVt6XS5uYW1lPSIhTWluaUZBVCIpLFZlW0JbMF1dLm5hbWU9IiFGQVQiLFZlLmZhdF9hZGRycz1CLFZlLnNzej13O3ZhciBucj1bXSxCcj1bXSxaYT1bXTsoZnVuY3Rpb24gZyhtLEUsXyx3LFMsRixMLHope2Zvcih2YXIg''@;'; put 'put ''aGUsVz0wLEI9dy5sZW5ndGg/MjowLEg9RVttXS5kYXRhLHE9MCxuZT0wO3E8SC5sZW5ndGg7cSs9MTI4KXt2YXIgaWU9SC5zbGljZShxLHErMTI4KTtocihpZSw2NCksbmU9aWUucmVhZF9zaGlmdCgyKSxoZT11MChpZSwwLG5lLUIpLHcucHVzaChoZSk7dmFyIGZlPXtuYW1lOmhlLHR5cGU6''@;'; put 'put ''aWUucmVhZF9zaGlmdCgxKSxjb2xvcjppZS5yZWFkX3NoaWZ0KDEpLEw6aWUucmVhZF9zaGlmdCg0LCJpIiksUjppZS5yZWFkX3NoaWZ0KDQsImkiKSxDOmllLnJlYWRfc2hpZnQoNCwiaSIpLGNsc2lkOmllLnJlYWRfc2hpZnQoMTYpLHN0YXRlOmllLnJlYWRfc2hpZnQoNCwiaSIpLHN0YXJ0''@;'; put 'put ''OjAsc2l6ZTowfTswIT09aWUucmVhZF9zaGlmdCgyKStpZS5yZWFkX3NoaWZ0KDIpK2llLnJlYWRfc2hpZnQoMikraWUucmVhZF9zaGlmdCgyKSYmKGZlLmN0PU4oaWUsaWUubC04KSksMCE9PWllLnJlYWRfc2hpZnQoMikraWUucmVhZF9zaGlmdCgyKStpZS5yZWFkX3NoaWZ0KDIpK2llLnJl''@;'; put 'put ''YWRfc2hpZnQoMikmJihmZS5tdD1OKGllLGllLmwtOCkpLGZlLnN0YXJ0PWllLnJlYWRfc2hpZnQoNCwiaSIpLGZlLnNpemU9aWUucmVhZF9zaGlmdCg0LCJpIiksZmUuc2l6ZTwwJiZmZS5zdGFydDwwJiYoZmUuc2l6ZT1mZS50eXBlPTAsZmUuc3RhcnQ9ZWUsZmUubmFtZT0iIiksNT09PWZl''@;'; put 'put ''LnR5cGU/KFc9ZmUuc3RhcnQsUz4wJiZXIT09ZWUmJihFW1ddLm5hbWU9IiFTdHJlYW1EYXRhIikpOmZlLnNpemU+PTQwOTY/KGZlLnN0b3JhZ2U9ImZhdCIsdm9pZCAwPT09RVtmZS5zdGFydF0mJihFW2ZlLnN0YXJ0XT1rKF8sZmUuc3RhcnQsRS5mYXRfYWRkcnMsRS5zc3opKSxFW2ZlLnN0''@;'; put 'put ''YXJ0XS5uYW1lPWZlLm5hbWUsZmUuY29udGVudD1FW2ZlLnN0YXJ0XS5kYXRhLnNsaWNlKDAsZmUuc2l6ZSkpOihmZS5zdG9yYWdlPSJtaW5pZmF0IixmZS5zaXplPDA/ZmUuc2l6ZT0wOlchPT1lZSYmZmUuc3RhcnQhPT1lZSYmRVtXXSYmKGZlLmNvbnRlbnQ9dShmZSxFW1ddLmRhdGEsKEVb''@;'; put 'put ''el18fHt9KS5kYXRhKSkpLGZlLmNvbnRlbnQmJmhyKGZlLmNvbnRlbnQsMCksRltoZV09ZmUsTC5wdXNoKGZlKX19KShMLFZlLF9lLG5yLFMse30sQnIseiksZnVuY3Rpb24gdihtLEUsXyl7Zm9yKHZhciB3PTAsUz0wLEY9MCxMPTAsej0wLFc9Xy5sZW5ndGgsQj1bXSxIPVtdO3c8VzsrK3cp''@;'; put 'put ''Qlt3XT1IW3ddPXcsRVt3XT1fW3ddO2Zvcig7ejxILmxlbmd0aDsrK3opUz1tW3c9SFt6XV0uTCxGPW1bd10uUixMPW1bd10uQyxCW3ddPT09dyYmKC0xIT09UyYmQltTXSE9PVMmJihCW3ddPUJbU10pLC0xIT09RiYmQltGXSE9PUYmJihCW3ddPUJbRl0pKSwtMSE9PUwmJihCW0xdPXcpLC0x''@;'; put 'put ''IT09UyYmdyE9Qlt3XSYmKEJbU109Qlt3XSxILmxhc3RJbmRleE9mKFMpPHomJkgucHVzaChTKSksLTEhPT1GJiZ3IT1CW3ddJiYoQltGXT1CW3ddLEgubGFzdEluZGV4T2YoRik8eiYmSC5wdXNoKEYpKTtmb3Iodz0xO3c8VzsrK3cpQlt3XT09PXcmJigtMSE9PUYmJkJbRl0hPT1GP0Jbd109''@;'; put 'put ''QltGXTotMSE9PVMmJkJbU10hPT1TJiYoQlt3XT1CW1NdKSk7Zm9yKHc9MTt3PFc7Kyt3KWlmKDAhPT1tW3ddLnR5cGUpe2lmKCh6PXcpIT1CW3pdKWRve0Vbd109RVt6PUJbel1dKyIvIitFW3ddfXdoaWxlKDAhPT16JiYtMSE9PUJbel0mJnohPUJbel0pO0Jbd109LTF9Zm9yKEVbMF0rPSIv''@;'; put 'put ''Iix3PTE7dzxXOysrdykyIT09bVt3XS50eXBlJiYoRVt3XSs9Ii8iKX0oQnIsWmEsbnIpLG5yLnNoaWZ0KCk7dmFyIFFhPXtGaWxlSW5kZXg6QnIsRnVsbFBhdGhzOlphfTtyZXR1cm4gRSYmRS5yYXcmJihRYS5yYXc9e2hlYWRlcjpuZSxzZWN0b3JzOl9lfSksUWF9ZnVuY3Rpb24gdShtLEUs''@;'; put 'put ''Xyl7Zm9yKHZhciBTPW0uc2l6ZSxGPVtdLEw9bS5zdGFydDtfJiZTPjAmJkw+PTA7KUYucHVzaChFLnNsaWNlKEwqYixMKmIrYikpLFMtPWIsTD1MdChfLDQqTCk7cmV0dXJuIDA9PT1GLmxlbmd0aD9HKDApOmZyKEYpLnNsaWNlKDAsbS5zaXplKX1mdW5jdGlvbiBwKG0sRSxfLHcsUyl7dmFy''@;'; put 'put ''IEY9ZWU7aWYobT09PWVlKXtpZigwIT09RSl0aHJvdyBuZXcgRXJyb3IoIkRJRkFUIGNoYWluIHNob3J0ZXIgdGhhbiBleHBlY3RlZCIpfWVsc2UgaWYoLTEhPT1tKXt2YXIgTD1fW21dLHo9KHc+Pj4yKS0xO2lmKCFMKXJldHVybjtmb3IodmFyIFc9MDtXPHomJihGPUx0KEwsNCpXKSkhPT1l''@;'; put 'put ''ZTsrK1cpUy5wdXNoKEYpO3AoTHQoTCx3LTQpLEUtMSxfLHcsUyl9fWZ1bmN0aW9uIGsobSxFLF8sdyxTKXt2YXIgRj1bXSxMPVtdO1N8fChTPVtdKTt2YXIgej13LTEsVz0wLEI9MDtmb3IoVz1FO1c+PTA7KXtTW1ddPSEwLEZbRi5sZW5ndGhdPVcsTC5wdXNoKG1bV10pO3ZhciBIPV9bTWF0''@;'; put 'put ''aC5mbG9vcig0KlcvdyldO2lmKHc8NCsoQj00KlcmeikpdGhyb3cgbmV3IEVycm9yKCJGQVQgYm91bmRhcnkgY3Jvc3NlZDogIitXKyIgNCAiK3cpO2lmKCFtW0hdKWJyZWFrO1c9THQobVtIXSxCKX1yZXR1cm57bm9kZXM6RixkYXRhOnppKFtMXSl9fWZ1bmN0aW9uIE4obSxFKXtyZXR1cm4g''@;'; put 'put ''bmV3IERhdGUoMWUzKihjcihtLEUrNCkvMWU3Kk1hdGgucG93KDIsMzIpK2NyKG0sRSkvMWU3LTExNjQ0NDczNjAwKSl9ZnVuY3Rpb24geShtLEUpe3ZhciBfPUV8fHt9LHc9Xy5yb290fHwiUm9vdCBFbnRyeSI7aWYobS5GdWxsUGF0aHN8fChtLkZ1bGxQYXRocz1bXSksbS5GaWxlSW5kZXh8''@;'; put 'put ''fChtLkZpbGVJbmRleD1bXSksbS5GdWxsUGF0aHMubGVuZ3RoIT09bS5GaWxlSW5kZXgubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiaW5jb25zaXN0ZW50IENGQiBzdHJ1Y3R1cmUiKTswPT09bS5GdWxsUGF0aHMubGVuZ3RoJiYobS5GdWxsUGF0aHNbMF09dysiLyIsbS5GaWxlSW5kZXhbMF09''@;'; put 'put ''e25hbWU6dyx0eXBlOjV9KSxfLkNMU0lEJiYobS5GaWxlSW5kZXhbMF0uY2xzaWQ9Xy5DTFNJRCksZnVuY3Rpb24gUChtKXt2YXIgRT0iXHgwMVNoMzN0SjUiO2lmKCF2ZS5maW5kKG0sIi8iK0UpKXt2YXIgXz1HKDQpO19bMF09NTUsX1sxXT1fWzNdPTUwLF9bMl09NTQsbS5GaWxlSW5kZXgu''@;'; put 'put ''cHVzaCh7bmFtZTpFLHR5cGU6Mixjb250ZW50Ol8sc2l6ZTo0LEw6NjksUjo2OSxDOjY5fSksbS5GdWxsUGF0aHMucHVzaChtLkZ1bGxQYXRoc1swXStFKSxSKG0pfX0obSl9ZnVuY3Rpb24gUihtLEUpe3kobSk7Zm9yKHZhciBfPSExLHc9ITEsUz1tLkZ1bGxQYXRocy5sZW5ndGgtMTtTPj0w''@;'; put 'put ''Oy0tUyl7dmFyIEY9bS5GaWxlSW5kZXhbU107c3dpdGNoKEYudHlwZSl7Y2FzZSAwOnc/Xz0hMDoobS5GaWxlSW5kZXgucG9wKCksbS5GdWxsUGF0aHMucG9wKCkpO2JyZWFrO2Nhc2UgMTpjYXNlIDI6Y2FzZSA1Onc9ITAsaXNOYU4oRi5SKkYuTCpGLkMpJiYoXz0hMCksRi5SPi0xJiZGLkw+''@;'; put 'put ''LTEmJkYuUj09Ri5MJiYoXz0hMCk7YnJlYWs7ZGVmYXVsdDpfPSEwfX1pZihffHxFKXt2YXIgTD1uZXcgRGF0ZSgxOTg3LDEsMTkpLHo9MCxXPU9iamVjdC5jcmVhdGU/T2JqZWN0LmNyZWF0ZShudWxsKTp7fSxCPVtdO2ZvcihTPTA7UzxtLkZ1bGxQYXRocy5sZW5ndGg7KytTKVdbbS5GdWxs''@;'; put 'put ''UGF0aHNbU11dPSEwLDAhPT1tLkZpbGVJbmRleFtTXS50eXBlJiZCLnB1c2goW20uRnVsbFBhdGhzW1NdLG0uRmlsZUluZGV4W1NdXSk7Zm9yKFM9MDtTPEIubGVuZ3RoOysrUyl7dmFyIEg9YShCW1NdWzBdKTsodz1XW0hdKXx8KEIucHVzaChbSCx7bmFtZTpuKEgpLnJlcGxhY2UoIi8iLCIi''@;'; put 'put ''KSx0eXBlOjEsY2xzaWQ6ZGUsY3Q6TCxtdDpMLGNvbnRlbnQ6bnVsbH1dKSxXW0hdPSEwKX1mb3IoQi5zb3J0KGZ1bmN0aW9uKGhlLGllKXtyZXR1cm4gZnVuY3Rpb24gcihtLEUpe2Zvcih2YXIgXz1tLnNwbGl0KCIvIiksdz1FLnNwbGl0KCIvIiksUz0wLEY9MCxMPU1hdGgubWluKF8ubGVu''@;'; put 'put ''Z3RoLHcubGVuZ3RoKTtTPEw7KytTKXtpZihGPV9bU10ubGVuZ3RoLXdbU10ubGVuZ3RoKXJldHVybiBGO2lmKF9bU10hPXdbU10pcmV0dXJuIF9bU108d1tTXT8tMToxfXJldHVybiBfLmxlbmd0aC13Lmxlbmd0aH0oaGVbMF0saWVbMF0pfSksbS5GdWxsUGF0aHM9W10sbS5GaWxlSW5kZXg9''@;'; put 'put ''W10sUz0wO1M8Qi5sZW5ndGg7KytTKW0uRnVsbFBhdGhzW1NdPUJbU11bMF0sbS5GaWxlSW5kZXhbU109QltTXVsxXTtmb3IoUz0wO1M8Qi5sZW5ndGg7KytTKXt2YXIgcT1tLkZpbGVJbmRleFtTXSxuZT1tLkZ1bGxQYXRoc1tTXTtpZihxLm5hbWU9bihuZSkucmVwbGFjZSgiLyIsIiIpLHEu''@;'; put 'put ''TD1xLlI9cS5DPS0ocS5jb2xvcj0xKSxxLnNpemU9cS5jb250ZW50P3EuY29udGVudC5sZW5ndGg6MCxxLnN0YXJ0PTAscS5jbHNpZD1xLmNsc2lkfHxkZSwwPT09UylxLkM9Qi5sZW5ndGg+MT8xOi0xLHEuc2l6ZT0wLHEudHlwZT01O2Vsc2UgaWYoIi8iPT1uZS5zbGljZSgtMSkpe2Zvcih6''@;'; put 'put ''PVMrMTt6PEIubGVuZ3RoJiZhKG0uRnVsbFBhdGhzW3pdKSE9bmU7Kyt6KTtmb3IocS5DPXo+PUIubGVuZ3RoPy0xOnosej1TKzE7ejxCLmxlbmd0aCYmYShtLkZ1bGxQYXRoc1t6XSkhPWEobmUpOysreik7cS5SPXo+PUIubGVuZ3RoPy0xOnoscS50eXBlPTF9ZWxzZSBhKG0uRnVsbFBhdGhz''@;'; put 'put ''W1MrMV18fCIiKT09YShuZSkmJihxLlI9UysxKSxxLnR5cGU9Mn19fWZ1bmN0aW9uIFYobSxFKXt2YXIgXz1FfHx7fTtpZigibWFkIj09Xy5maWxlVHlwZSlyZXR1cm4gZnVuY3Rpb24gYmcobSxFKXtmb3IodmFyIF89RXx8e30sdz1fLmJvdW5kYXJ5fHwiU2hlZXRKUyIsUz1bIk1JTUUtVmVy''@;'; put 'put ''c2lvbjogMS4wIiwnQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvcmVsYXRlZDsgYm91bmRhcnk9IicrKHc9Ii0tLS0tLT0iK3cpLnNsaWNlKDIpKyciJywiIiwiIiwiIl0sRj1tLkZ1bGxQYXRoc1swXSxMPUYsej1tLkZpbGVJbmRleFswXSxXPTE7VzxtLkZ1bGxQYXRocy5sZW5ndGg7KytXKWlm''@;'; put 'put ''KEw9bS5GdWxsUGF0aHNbV10uc2xpY2UoRi5sZW5ndGgpLCh6PW0uRmlsZUluZGV4W1ddKS5zaXplJiZ6LmNvbnRlbnQmJiJceDAxU2gzM3RKNSIhPUwpe0w9TC5yZXBsYWNlKC9bXHgwMC1ceDA4XHgwQlx4MENceDBFLVx4MUZceDdFLVx4RkZdL2csZnVuY3Rpb24oX2Upe3JldHVybiJfeCIr''@;'; put 'put ''X2UuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikrIl8ifSkucmVwbGFjZSgvW1x1MDA4MC1cdUZGRkZdL2csZnVuY3Rpb24oX2Upe3JldHVybiJfdSIrX2UuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikrIl8ifSk7Zm9yKHZhciBCPXouY29udGVudCxIPVNlJiZCdWZmZXIuaXNCdWZmZXIo''@;'; put 'put ''Qik/Qi50b1N0cmluZygiYmluYXJ5Iik6Y2UoQikscT0wLG5lPU1hdGgubWluKDEwMjQsSC5sZW5ndGgpLGhlPTAsaWU9MDtpZTw9bmU7KytpZSkoaGU9SC5jaGFyQ29kZUF0KGllKSk+PTMyJiZoZTwxMjgmJisrcTt2YXIgZmU9cT49NCpuZS81O1MucHVzaCh3KSxTLnB1c2goIkNvbnRlbnQt''@;'; put 'put ''TG9jYXRpb246ICIrKF8ucm9vdHx8ImZpbGU6Ly8vQzovU2hlZXRKUy8iKStMKSxTLnB1c2goIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6ICIrKGZlPyJxdW90ZWQtcHJpbnRhYmxlIjoiYmFzZTY0IikpLFMucHVzaCgiQ29udGVudC1UeXBlOiAiK0NnKHosTCkpLFMucHVzaCgiIiksUy5w''@;'; put 'put ''dXNoKGZlP09nKEgpOkRnKEgpKX1yZXR1cm4gUy5wdXNoKHcrIi0tXHJcbiIpLFMuam9pbigiXHJcbiIpfShtLF8pO2lmKCJ6aXAiPT09KFIobSksXy5maWxlVHlwZSkpcmV0dXJuIGZ1bmN0aW9uIEFnKG0sRSl7dmFyIF89RXx8e30sdz1bXSxTPVtdLEY9RygxKSxMPV8uY29tcHJlc3Npb24/''@;'; put 'put ''ODowLHo9MCxCPTAsSD0wLHE9MCxuZT0wLGhlPW0uRnVsbFBhdGhzWzBdLGllPWhlLGZlPW0uRmlsZUluZGV4WzBdLF9lPVtdLFZlPTA7Zm9yKEI9MTtCPG0uRnVsbFBhdGhzLmxlbmd0aDsrK0IpaWYoaWU9bS5GdWxsUGF0aHNbQl0uc2xpY2UoaGUubGVuZ3RoKSwoZmU9bS5GaWxlSW5kZXhb''@;'; put 'put ''Ql0pLnNpemUmJmZlLmNvbnRlbnQmJiJceDAxU2gzM3RKNSIhPWllKXt2YXIgQ3I9cSxucj1HKGllLmxlbmd0aCk7Zm9yKEg9MDtIPGllLmxlbmd0aDsrK0gpbnIud3JpdGVfc2hpZnQoMSwxMjcmaWUuY2hhckNvZGVBdChIKSk7bnI9bnIuc2xpY2UoMCxuci5sKSxfZVtuZV09c28uYnVmKGZl''@;'; put 'put ''LmNvbnRlbnQsMCk7dmFyIEJyPWZlLmNvbnRlbnQ7OD09TCYmKEJyPU8oQnIpKSwoRj1HKDMwKSkud3JpdGVfc2hpZnQoNCw2NzMyNDc1MiksRi53cml0ZV9zaGlmdCgyLDIwKSxGLndyaXRlX3NoaWZ0KDIseiksRi53cml0ZV9zaGlmdCgyLEwpLGZlLm10P2koRixmZS5tdCk6Ri53cml0ZV9z''@;'; put 'put ''aGlmdCg0LDApLEYud3JpdGVfc2hpZnQoLTQsOCZ6PzA6X2VbbmVdKSxGLndyaXRlX3NoaWZ0KDQsOCZ6PzA6QnIubGVuZ3RoKSxGLndyaXRlX3NoaWZ0KDQsOCZ6PzA6ZmUuY29udGVudC5sZW5ndGgpLEYud3JpdGVfc2hpZnQoMixuci5sZW5ndGgpLEYud3JpdGVfc2hpZnQoMiwwKSxxKz1G''@;'; put 'put ''Lmxlbmd0aCx3LnB1c2goRikscSs9bnIubGVuZ3RoLHcucHVzaChucikscSs9QnIubGVuZ3RoLHcucHVzaChCciksOCZ6JiYoKEY9RygxMikpLndyaXRlX3NoaWZ0KC00LF9lW25lXSksRi53cml0ZV9zaGlmdCg0LEJyLmxlbmd0aCksRi53cml0ZV9zaGlmdCg0LGZlLmNvbnRlbnQubGVuZ3Ro''@;'; put 'put ''KSxxKz1GLmwsdy5wdXNoKEYpKSwoRj1HKDQ2KSkud3JpdGVfc2hpZnQoNCwzMzYzOTI0OCksRi53cml0ZV9zaGlmdCgyLDApLEYud3JpdGVfc2hpZnQoMiwyMCksRi53cml0ZV9zaGlmdCgyLHopLEYud3JpdGVfc2hpZnQoMixMKSxGLndyaXRlX3NoaWZ0KDQsMCksRi53cml0ZV9zaGlmdCgt''@;'; put 'put ''NCxfZVtuZV0pLEYud3JpdGVfc2hpZnQoNCxCci5sZW5ndGgpLEYud3JpdGVfc2hpZnQoNCxmZS5jb250ZW50Lmxlbmd0aCksRi53cml0ZV9zaGlmdCgyLG5yLmxlbmd0aCksRi53cml0ZV9zaGlmdCgyLDApLEYud3JpdGVfc2hpZnQoMiwwKSxGLndyaXRlX3NoaWZ0KDIsMCksRi53cml0ZV9z''@;'; put 'put ''aGlmdCgyLDApLEYud3JpdGVfc2hpZnQoNCwwKSxGLndyaXRlX3NoaWZ0KDQsQ3IpLFZlKz1GLmwsUy5wdXNoKEYpLFZlKz1uci5sZW5ndGgsUy5wdXNoKG5yKSwrK25lfXJldHVybihGPUcoMjIpKS53cml0ZV9zaGlmdCg0LDEwMTAxMDI1NiksRi53cml0ZV9zaGlmdCgyLDApLEYud3JpdGVf''@;'; put 'put ''c2hpZnQoMiwwKSxGLndyaXRlX3NoaWZ0KDIsbmUpLEYud3JpdGVfc2hpZnQoMixuZSksRi53cml0ZV9zaGlmdCg0LFZlKSxGLndyaXRlX3NoaWZ0KDQscSksRi53cml0ZV9zaGlmdCgyLDApLGZyKFtmcih3KSxmcihTKSxGXSl9KG0sXyk7dmFyIHc9ZnVuY3Rpb24oaGUpe2Zvcih2YXIgaWU9''@;'; put 'put ''MCxmZT0wLF9lPTA7X2U8aGUuRmlsZUluZGV4Lmxlbmd0aDsrK19lKXt2YXIgVmU9aGUuRmlsZUluZGV4W19lXTtpZihWZS5jb250ZW50KXt2YXIgQ3I9VmUuY29udGVudC5sZW5ndGg7Q3I+MCYmKENyPDQwOTY/aWUrPUNyKzYzPj42OmZlKz1Dcis1MTE+PjkpfX1mb3IodmFyIG5yPWhlLkZ1''@;'; put 'put ''bGxQYXRocy5sZW5ndGgrMz4+MixaYT1pZSsxMjc+PjcsUWE9KGllKzc+PjMpK2ZlK25yK1phLFp0PVFhKzEyNz4+Nyx0aT1adDw9MTA5PzA6TWF0aC5jZWlsKChadC0xMDkpLzEyNyk7UWErWnQrdGkrMTI3Pj43Plp0Oyl0aT0rK1p0PD0xMDk/MDpNYXRoLmNlaWwoKFp0LTEwOSkvMTI3KTt2''@;'; put 'put ''YXIgbXQ9WzEsdGksWnQsWmEsbnIsZmUsaWUsMF07cmV0dXJuIGhlLkZpbGVJbmRleFswXS5zaXplPWllPDw2LG10WzddPShoZS5GaWxlSW5kZXhbMF0uc3RhcnQ9bXRbMF0rbXRbMV0rbXRbMl0rbXRbM10rbXRbNF0rbXRbNV0pKyhtdFs2XSs3Pj4zKSxtdH0obSksUz1HKHdbN108PDkpLEY9''@;'; put 'put ''MCxMPTA7Zm9yKEY9MDtGPDg7KytGKVMud3JpdGVfc2hpZnQoMSxyZVtGXSk7Zm9yKEY9MDtGPDg7KytGKVMud3JpdGVfc2hpZnQoMiwwKTtmb3IoUy53cml0ZV9zaGlmdCgyLDYyKSxTLndyaXRlX3NoaWZ0KDIsMyksUy53cml0ZV9zaGlmdCgyLDY1NTM0KSxTLndyaXRlX3NoaWZ0KDIsOSks''@;'; put 'put ''Uy53cml0ZV9zaGlmdCgyLDYpLEY9MDtGPDM7KytGKVMud3JpdGVfc2hpZnQoMiwwKTtmb3IoUy53cml0ZV9zaGlmdCg0LDApLFMud3JpdGVfc2hpZnQoNCx3WzJdKSxTLndyaXRlX3NoaWZ0KDQsd1swXSt3WzFdK3dbMl0rd1szXS0xKSxTLndyaXRlX3NoaWZ0KDQsMCksUy53cml0ZV9zaGlm''@;'; put 'put ''dCg0LDQwOTYpLFMud3JpdGVfc2hpZnQoNCx3WzNdP3dbMF0rd1sxXSt3WzJdLTE6ZWUpLFMud3JpdGVfc2hpZnQoNCx3WzNdKSxTLndyaXRlX3NoaWZ0KC00LHdbMV0/d1swXS0xOmVlKSxTLndyaXRlX3NoaWZ0KDQsd1sxXSksRj0wO0Y8MTA5OysrRilTLndyaXRlX3NoaWZ0KC00LEY8d1sy''@;'; put 'put ''XT93WzFdK0Y6LTEpO2lmKHdbMV0pZm9yKEw9MDtMPHdbMV07KytMKXtmb3IoO0Y8MjM2KzEyNypMOysrRilTLndyaXRlX3NoaWZ0KC00LEY8d1syXT93WzFdK0Y6LTEpO1Mud3JpdGVfc2hpZnQoLTQsTD09PXdbMV0tMT9lZTpMKzEpfXZhciB6PWZ1bmN0aW9uKGhlKXtmb3IoTCs9aGU7RjxM''@;'; put 'put ''LTE7KytGKVMud3JpdGVfc2hpZnQoLTQsRisxKTtoZSYmKCsrRixTLndyaXRlX3NoaWZ0KC00LGVlKSl9O2ZvcihMPUY9MCxMKz13WzFdO0Y8TDsrK0YpUy53cml0ZV9zaGlmdCgtNCx1ZS5ESUZTRUNUKTtmb3IoTCs9d1syXTtGPEw7KytGKVMud3JpdGVfc2hpZnQoLTQsdWUuRkFUU0VDVCk7''@;'; put 'put ''eih3WzNdKSx6KHdbNF0pO2Zvcih2YXIgVz0wLEI9MCxIPW0uRmlsZUluZGV4WzBdO1c8bS5GaWxlSW5kZXgubGVuZ3RoOysrVykoSD1tLkZpbGVJbmRleFtXXSkuY29udGVudCYmISgoQj1ILmNvbnRlbnQubGVuZ3RoKTw0MDk2KSYmKEguc3RhcnQ9TCx6KEIrNTExPj45KSk7Zm9yKHood1s2''@;'; put 'put ''XSs3Pj4zKTs1MTEmUy5sOylTLndyaXRlX3NoaWZ0KC00LHVlLkVORE9GQ0hBSU4pO2ZvcihMPUY9MCxXPTA7VzxtLkZpbGVJbmRleC5sZW5ndGg7KytXKShIPW0uRmlsZUluZGV4W1ddKS5jb250ZW50JiYoQj1ILmNvbnRlbnQubGVuZ3RoKSYmIShCPj00MDk2KSYmKEguc3RhcnQ9TCx6KEIr''@;'; put 'put ''NjM+PjYpKTtmb3IoOzUxMSZTLmw7KVMud3JpdGVfc2hpZnQoLTQsdWUuRU5ET0ZDSEFJTik7Zm9yKEY9MDtGPHdbNF08PDI7KytGKXt2YXIgcT1tLkZ1bGxQYXRoc1tGXTtpZihxJiYwIT09cS5sZW5ndGgpe0g9bS5GaWxlSW5kZXhbRl0sMD09PUYmJihILnN0YXJ0PUguc2l6ZT9ILnN0YXJ0''@;'; put 'put ''LTE6ZWUpO3ZhciBuZT0wPT09RiYmXy5yb290fHxILm5hbWU7aWYoQj0yKihuZS5sZW5ndGgrMSksUy53cml0ZV9zaGlmdCg2NCxuZSwidXRmMTZsZSIpLFMud3JpdGVfc2hpZnQoMixCKSxTLndyaXRlX3NoaWZ0KDEsSC50eXBlKSxTLndyaXRlX3NoaWZ0KDEsSC5jb2xvciksUy53cml0ZV9z''@;'; put 'put ''aGlmdCgtNCxILkwpLFMud3JpdGVfc2hpZnQoLTQsSC5SKSxTLndyaXRlX3NoaWZ0KC00LEguQyksSC5jbHNpZClTLndyaXRlX3NoaWZ0KDE2LEguY2xzaWQsImhleCIpO2Vsc2UgZm9yKFc9MDtXPDQ7KytXKVMud3JpdGVfc2hpZnQoNCwwKTtTLndyaXRlX3NoaWZ0KDQsSC5zdGF0ZXx8MCks''@;'; put 'put ''Uy53cml0ZV9zaGlmdCg0LDApLFMud3JpdGVfc2hpZnQoNCwwKSxTLndyaXRlX3NoaWZ0KDQsMCksUy53cml0ZV9zaGlmdCg0LDApLFMud3JpdGVfc2hpZnQoNCxILnN0YXJ0KSxTLndyaXRlX3NoaWZ0KDQsSC5zaXplKSxTLndyaXRlX3NoaWZ0KDQsMCl9ZWxzZXtmb3IoVz0wO1c8MTc7KytX''@;'; put 'put ''KVMud3JpdGVfc2hpZnQoNCwwKTtmb3IoVz0wO1c8MzsrK1cpUy53cml0ZV9zaGlmdCg0LC0xKTtmb3IoVz0wO1c8MTI7KytXKVMud3JpdGVfc2hpZnQoNCwwKX19Zm9yKEY9MTtGPG0uRmlsZUluZGV4Lmxlbmd0aDsrK0YpaWYoKEg9bS5GaWxlSW5kZXhbRl0pLnNpemU+PTQwOTYpaWYoUy5s''@;'; put 'put ''PUguc3RhcnQrMTw8OSxTZSYmQnVmZmVyLmlzQnVmZmVyKEguY29udGVudCkpSC5jb250ZW50LmNvcHkoUyxTLmwsMCxILnNpemUpLFMubCs9SC5zaXplKzUxMSYtNTEyO2Vsc2V7Zm9yKFc9MDtXPEguc2l6ZTsrK1cpUy53cml0ZV9zaGlmdCgxLEguY29udGVudFtXXSk7Zm9yKDs1MTEmVzsr''@;'; put 'put ''K1cpUy53cml0ZV9zaGlmdCgxLDApfWZvcihGPTE7RjxtLkZpbGVJbmRleC5sZW5ndGg7KytGKWlmKChIPW0uRmlsZUluZGV4W0ZdKS5zaXplPjAmJkguc2l6ZTw0MDk2KWlmKFNlJiZCdWZmZXIuaXNCdWZmZXIoSC5jb250ZW50KSlILmNvbnRlbnQuY29weShTLFMubCwwLEguc2l6ZSksUy5s''@;'; put 'put ''Kz1ILnNpemUrNjMmLTY0O2Vsc2V7Zm9yKFc9MDtXPEguc2l6ZTsrK1cpUy53cml0ZV9zaGlmdCgxLEguY29udGVudFtXXSk7Zm9yKDs2MyZXOysrVylTLndyaXRlX3NoaWZ0KDEsMCl9aWYoU2UpUy5sPVMubGVuZ3RoO2Vsc2UgZm9yKDtTLmw8Uy5sZW5ndGg7KVMud3JpdGVfc2hpZnQoMSww''@;'; put 'put ''KTtyZXR1cm4gU310LnZlcnNpb249IjEuMi4xIjt2YXIgSyxiPTY0LGVlPS0yLGxlPSJkMGNmMTFlMGExYjExYWUxIixyZT1bMjA4LDIwNywxNywyMjQsMTYxLDE3NywyNiwyMjVdLGRlPSIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsdWU9e01BWFJFR1NFQ1Q6LTYsRElGU0VD''@;'; put 'put ''VDotNCxGQVRTRUNUOi0zLEVORE9GQ0hBSU46ZWUsRlJFRVNFQ1Q6LTEsSEVBREVSX1NJR05BVFVSRTpsZSxIRUFERVJfTUlOT1JfVkVSU0lPTjoiM2UwMCIsTUFYUkVHU0lEOi02LE5PU1RSRUFNOi0xLEhFQURFUl9DTFNJRDpkZSxFbnRyeVR5cGVzOlsidW5rbm93biIsInN0b3JhZ2UiLCJz''@;'; put 'put ''dHJlYW0iLCJsb2NrYnl0ZXMiLCJwcm9wZXJ0eSIsInJvb3QiXX07ZnVuY3Rpb24gY2UobSl7Zm9yKHZhciBFPW5ldyBBcnJheShtLmxlbmd0aCksXz0wO188bS5sZW5ndGg7KytfKUVbX109U3RyaW5nLmZyb21DaGFyQ29kZShtW19dKTtyZXR1cm4gRS5qb2luKCIiKX1mdW5jdGlvbiBPKG0p''@;'; put 'put ''e3JldHVybiBLP0suZGVmbGF0ZVJhd1N5bmMobSk6eWUobSl9Zm9yKHZhciBtLEUsRD1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0saj1bMyw0LDUsNiw3LDgsOSwxMCwxMSwxMywxNSwxNywxOSwyMywyNywzMSwzNSw0Myw1MSw1OSw2Nyw4Myw5OSwx''@;'; put 'put ''MTUsMTMxLDE2MywxOTUsMjI3LDI1OF0sc2U9WzEsMiwzLDQsNSw3LDksMTMsMTcsMjUsMzMsNDksNjUsOTcsMTI5LDE5MywyNTcsMzg1LDUxMyw3NjksMTAyNSwxNTM3LDIwNDksMzA3Myw0MDk3LDYxNDUsODE5MywxMjI4OSwxNjM4NSwyNDU3N10sUT10eXBlb2YgVWludDhBcnJheTwidSIs''@;'; put 'put ''WT1RP25ldyBVaW50OEFycmF5KDI1Nik6W10sRWU9MDtFZTwyNTY7KytFZSlZW0VlXT0odm9pZCAwLDI1NSYoKEU9MTM5NTM2JigobT1FZSk8PDF8bTw8MTEpfDU1ODE0NCYobTw8NXxtPDwxNSkpPj4xNnxFPj44fEUpKTtmdW5jdGlvbiBBKG0sRSl7dmFyIF89WVsyNTUmbV07cmV0dXJuIEU8''@;'; put 'put ''PTg/Xz4+PjgtRTooXz1fPDw4fFlbbT4+OCYyNTVdLEU8PTE2P18+Pj4xNi1FOihfPV88PDh8WVttPj4xNiYyNTVdKT4+PjI0LUUpfWZ1bmN0aW9uIFBlKG0sRSl7dmFyIF89NyZFLHc9RT4+PjM7cmV0dXJuKG1bd118KF88PTY/MDptW3crMV08PDgpKT4+Pl8mM31mdW5jdGlvbiBBZShtLEUp''@;'; put 'put ''e3ZhciBfPTcmRSx3PUU+Pj4zO3JldHVybihtW3ddfChfPD01PzA6bVt3KzFdPDw4KSk+Pj5fJjd9ZnVuY3Rpb24gQ2UobSxFKXt2YXIgXz03JkUsdz1FPj4+MztyZXR1cm4obVt3XXwoXzw9Mz8wOm1bdysxXTw8OCkpPj4+XyYzMX1mdW5jdGlvbiBvZShtLEUpe3ZhciBfPTcmRSx3PUU+Pj4z''@;'; put 'put ''O3JldHVybihtW3ddfChfPD0xPzA6bVt3KzFdPDw4KSk+Pj5fJjEyN31mdW5jdGlvbiBxZShtLEUsXyl7dmFyIHc9NyZFLFM9RT4+PjMsTD1tW1NdPj4+dztyZXR1cm4gXzw4LXd8fChMfD1tW1MrMV08PDgtdyxfPDE2LXcpfHwoTHw9bVtTKzJdPDwxNi13LF88MjQtdyl8fChMfD1tW1MrM108''@;'; put 'put ''PDI0LXcpLEwmKDE8PF8pLTF9ZnVuY3Rpb24ganIobSxFLF8pe3ZhciB3PTcmRSxTPUU+Pj4zO3JldHVybiB3PD01P21bU118PSg3Jl8pPDx3OihtW1NdfD1fPDx3JjI1NSxtW1MrMV09KDcmXyk+PjgtdyksRSszfWZ1bmN0aW9uIGZ0KG0sRSxfKXtyZXR1cm4gbVtFPj4+M118PV89KDEmXyk8''@;'; put 'put ''PCg3JkUpLEUrMX1mdW5jdGlvbiB2dChtLEUsXyl7dmFyIFM9RT4+PjM7cmV0dXJuIG1bU118PTI1NSYoXzw8PTcmRSksbVtTKzFdPV8+Pj49OCxFKzh9ZnVuY3Rpb24gSmEobSxFLF8pe3ZhciBTPUU+Pj4zO3JldHVybiBtW1NdfD0yNTUmKF88PD03JkUpLG1bUysxXT0yNTUmKF8+Pj49OCks''@;'; put 'put ''bVtTKzJdPV8+Pj44LEUrMTZ9ZnVuY3Rpb24gT3QobSxFKXt2YXIgXz1tLmxlbmd0aCx3PTIqXz5FPzIqXzpFKzUsUz0wO2lmKF8+PUUpcmV0dXJuIG07aWYoU2Upe3ZhciBGPW5pKHcpO2lmKG0uY29weSltLmNvcHkoRik7ZWxzZSBmb3IoO1M8bS5sZW5ndGg7KytTKUZbU109bVtTXTtyZXR1''@;'; put 'put ''cm4gRn1pZihRKXt2YXIgTD1uZXcgVWludDhBcnJheSh3KTtpZihMLnNldClMLnNldChtKTtlbHNlIGZvcig7UzxfOysrUylMW1NdPW1bU107cmV0dXJuIEx9cmV0dXJuIG0ubGVuZ3RoPXcsbX1mdW5jdGlvbiBMcihtKXtmb3IodmFyIEU9bmV3IEFycmF5KG0pLF89MDtfPG07KytfKUVbX109''@;'; put 'put ''MDtyZXR1cm4gRX1mdW5jdGlvbiBwdChtLEUsXyl7dmFyIHc9MSxTPTAsRj0wLEw9MCx6PTAsVz1tLmxlbmd0aCxCPVE/bmV3IFVpbnQxNkFycmF5KDMyKTpMcigzMik7Zm9yKEY9MDtGPDMyOysrRilCW0ZdPTA7Zm9yKEY9VztGPF87KytGKW1bRl09MDtXPW0ubGVuZ3RoO3ZhciBIPVE/bmV3''@;'; put 'put ''IFVpbnQxNkFycmF5KFcpOkxyKFcpO2ZvcihGPTA7RjxXOysrRilCW1M9bVtGXV0rKyx3PFMmJih3PVMpLEhbRl09MDtmb3IoQlswXT0wLEY9MTtGPD13OysrRilCW0YrMTZdPXo9eitCW0YtMV08PDE7Zm9yKEY9MDtGPFc7KytGKTAhPSh6PW1bRl0pJiYoSFtGXT1CW3orMTZdKyspO3ZhciBx''@;'; put 'put ''PTA7Zm9yKEY9MDtGPFc7KytGKWlmKDAhPShxPW1bRl0pKWZvcih6PUEoSFtGXSx3KT4+dy1xLEw9KDE8PHcrNC1xKS0xO0w+PTA7LS1MKUVbenxMPDxxXT0xNSZxfEY8PDQ7cmV0dXJuIHd9dmFyIEl0PVE/bmV3IFVpbnQxNkFycmF5KDUxMik6THIoNTEyKSxxYT1RP25ldyBVaW50MTZBcnJh''@;'; put 'put ''eSgzMik6THIoMzIpO2lmKCFRKXtmb3IodmFyIHlyPTA7eXI8NTEyOysreXIpSXRbeXJdPTA7Zm9yKHlyPTA7eXI8MzI7Kyt5cilxYVt5cl09MH0hZnVuY3Rpb24oKXtmb3IodmFyIG09W10sRT0wO0U8MzI7RSsrKW0ucHVzaCg1KTtwdChtLHFhLDMyKTt2YXIgXz1bXTtmb3IoRT0wO0U8PTE0''@;'; put 'put ''MztFKyspXy5wdXNoKDgpO2Zvcig7RTw9MjU1O0UrKylfLnB1c2goOSk7Zm9yKDtFPD0yNzk7RSsrKV8ucHVzaCg3KTtmb3IoO0U8PTI4NztFKyspXy5wdXNoKDgpO3B0KF8sSXQsMjg4KX0oKTt2YXIgY3Q9ZnVuY3Rpb24oKXtmb3IodmFyIEU9UT9uZXcgVWludDhBcnJheSgzMjc2OCk6W10s''@;'; put 'put ''Xz0wLHc9MDtfPHNlLmxlbmd0aC0xOysrXylmb3IoO3c8c2VbXysxXTsrK3cpRVt3XT1fO2Zvcig7dzwzMjc2ODsrK3cpRVt3XT0yOTt2YXIgUz1RP25ldyBVaW50OEFycmF5KDI1OSk6W107Zm9yKF89MCx3PTA7XzxqLmxlbmd0aC0xOysrXylmb3IoO3c8altfKzFdOysrdylTW3ddPV87cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uKFcsQil7cmV0dXJuIFcubGVuZ3RoPDg/ZnVuY3Rpb24gRih6LFcpe2Zvcih2YXIgQj0wO0I8ei5sZW5ndGg7KXt2YXIgSD1NYXRoLm1pbig2NTUzNSx6Lmxlbmd0aC1CKTtmb3IoVy53cml0ZV9zaGlmdCgxLCsoQitIPT16Lmxlbmd0aCkpLFcud3JpdGVfc2hpZnQoMixI''@;'; put 'put ''KSxXLndyaXRlX3NoaWZ0KDIsNjU1MzUmfkgpO0gtLSA+MDspV1tXLmwrK109eltCKytdfXJldHVybiBXLmx9KFcsQik6ZnVuY3Rpb24gTCh6LFcpe2Zvcih2YXIgQj0wLEg9MCxxPVE/bmV3IFVpbnQxNkFycmF5KDMyNzY4KTpbXTtIPHoubGVuZ3RoOyl7dmFyIG5lPU1hdGgubWluKDY1NTM1''@;'; put 'put ''LHoubGVuZ3RoLUgpO2lmKG5lPDEwKXtmb3IoNyYoQj1qcihXLEIsKyhIK25lPT16Lmxlbmd0aCkpKSYmKEIrPTgtKDcmQikpLFcubD1CLzh8MCxXLndyaXRlX3NoaWZ0KDIsbmUpLFcud3JpdGVfc2hpZnQoMiw2NTUzNSZ+bmUpO25lLS0gPjA7KVdbVy5sKytdPXpbSCsrXTtCPTgqVy5sfWVs''@;'; put 'put ''c2V7Qj1qcihXLEIsKyhIK25lPT16Lmxlbmd0aCkrMik7Zm9yKHZhciBoZT0wO25lLS0gPjA7KXt2YXIgaWU9eltIXSxmZT0tMSxfZT0wO2lmKChmZT1xW2hlPTMyNzY3JihoZTw8NV5pZSldKSYmKChmZXw9LTMyNzY4JkgpPkgmJihmZS09MzI3NjgpLGZlPEgpKWZvcig7eltmZStfZV09PXpb''@;'; put 'put ''SCtfZV0mJl9lPDI1MDspKytfZTtpZihfZT4yKXsoaWU9U1tfZV0pPD0yMj9CPXZ0KFcsQixZW2llKzFdPj4xKS0xOih2dChXLEIsMyksdnQoVyxCKz01LFlbaWUtMjNdPj41KSxCKz0zKTt2YXIgVmU9aWU8OD8wOmllLTQ+PjI7VmU+MCYmKEphKFcsQixfZS1qW2llXSksQis9VmUpLEI9dnQo''@;'; put 'put ''VyxCLFlbaWU9RVtILWZlXV0+PjMpLEItPTM7dmFyIENyPWllPDQ/MDppZS0yPj4xO0NyPjAmJihKYShXLEIsSC1mZS1zZVtpZV0pLEIrPUNyKTtmb3IodmFyIG5yPTA7bnI8X2U7KytucilxW2hlXT0zMjc2NyZILGhlPTMyNzY3JihoZTw8NV56W0hdKSwrK0g7bmUtPV9lLTF9ZWxzZSBpZTw9''@;'; put 'put ''MTQzP2llKz00ODpCPWZ0KFcsQiwxKSxCPXZ0KFcsQixZW2llXSkscVtoZV09MzI3NjcmSCwrK0h9Qj12dChXLEIsMCktMX19cmV0dXJuIFcubD0oQis3KS84fDAsVy5sfShXLEIpfX0oKTtmdW5jdGlvbiB5ZShtKXt2YXIgRT1HKDUwK01hdGguZmxvb3IoMS4xKm0ubGVuZ3RoKSksXz1jdCht''@;'; put 'put ''LEUpO3JldHVybiBFLnNsaWNlKDAsXyl9dmFyIFplPVE/bmV3IFVpbnQxNkFycmF5KDMyNzY4KTpMcigzMjc2OCksS3I9UT9uZXcgVWludDE2QXJyYXkoMzI3NjgpOkxyKDMyNzY4KSxzcj1RP25ldyBVaW50MTZBcnJheSgxMjgpOkxyKDEyOCkscXQ9MSxGYz0xO2Z1bmN0aW9uIFNnKG0sRSl7''@;'; put 'put ''dmFyIF89Q2UobSxFKSsyNTcsdz1DZShtLEUrPTUpKzEsUz1mdW5jdGlvbiBMZShtLEUpe3ZhciBfPTcmRSx3PUU+Pj4zO3JldHVybihtW3ddfChfPD00PzA6bVt3KzFdPDw4KSk+Pj5fJjE1fShtLEUrPTUpKzQ7RSs9NDtmb3IodmFyIEY9MCxMPVE/bmV3IFVpbnQ4QXJyYXkoMTkpOkxyKDE5''@;'; put 'put ''KSx6PVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXSxXPTEsQj1RP25ldyBVaW50OEFycmF5KDgpOkxyKDgpLEg9UT9uZXcgVWludDhBcnJheSg4KTpMcig4KSxxPUwubGVuZ3RoLG5lPTA7bmU8UzsrK25lKUxbRFtuZV1dPUY9QWUobSxFKSxXPEYmJihXPUYpLEJbRl0r''@;'; put 'put ''KyxFKz0zO3ZhciBoZT0wO2ZvcihCWzBdPTAsbmU9MTtuZTw9VzsrK25lKUhbbmVdPWhlPWhlK0JbbmUtMV08PDE7Zm9yKG5lPTA7bmU8cTsrK25lKTAhPShoZT1MW25lXSkmJih6W25lXT1IW2hlXSsrKTt2YXIgaWU9MDtmb3IobmU9MDtuZTxxOysrbmUpaWYoMCE9KGllPUxbbmVdKSl7aGU9''@;'; put 'put ''WVt6W25lXV0+PjgtaWU7Zm9yKHZhciBmZT0oMTw8Ny1pZSktMTtmZT49MDstLWZlKXNyW2hlfGZlPDxpZV09NyZpZXxuZTw8M312YXIgX2U9W107Zm9yKFc9MTtfZS5sZW5ndGg8Xyt3Oylzd2l0Y2goaGU9c3Jbb2UobSxFKV0sRSs9NyZoZSxoZT4+Pj0zKXtjYXNlIDE2OmZvcihGPTMrUGUo''@;'; put 'put ''bSxFKSxFKz0yLGhlPV9lW19lLmxlbmd0aC0xXTtGLS0gPjA7KV9lLnB1c2goaGUpO2JyZWFrO2Nhc2UgMTc6Zm9yKEY9MytBZShtLEUpLEUrPTM7Ri0tID4wOylfZS5wdXNoKDApO2JyZWFrO2Nhc2UgMTg6Zm9yKEY9MTErb2UobSxFKSxFKz03O0YtLSA+MDspX2UucHVzaCgwKTticmVhaztk''@;'; put 'put ''ZWZhdWx0Ol9lLnB1c2goaGUpLFc8aGUmJihXPWhlKX12YXIgVmU9X2Uuc2xpY2UoMCxfKSxDcj1fZS5zbGljZShfKTtmb3IobmU9XztuZTwyODY7KytuZSlWZVtuZV09MDtmb3IobmU9dztuZTwzMDsrK25lKUNyW25lXT0wO3JldHVybiBxdD1wdChWZSxaZSwyODYpLEZjPXB0KENyLEtyLDMw''@;'; put 'put ''KSxFfWZ1bmN0aW9uIHljKG0sRSl7dmFyIHc9ZnVuY3Rpb24gRmcobSxFKXtpZigzPT1tWzBdJiYhKDMmbVsxXSkpcmV0dXJuW190KEUpLDJdO2Zvcih2YXIgXz0wLHc9MCxTPW5pKEV8fDE8PDE4KSxGPTAsTD1TLmxlbmd0aD4+PjAsej0wLFc9MDshKDEmdyk7KWlmKHc9QWUobSxfKSxfKz0z''@;'; put 'put ''LHc+Pj4xKWZvcih3Pj4xPT0xPyh6PTksVz01KTooXz1TZyhtLF8pLHo9cXQsVz1GYyk7Oyl7IUUmJkw8RiszMjc2NyYmKEw9KFM9T3QoUyxGKzMyNzY3KSkubGVuZ3RoKTt2YXIgSD1xZShtLF8seikscT13Pj4+MT09MT9JdFtIXTpaZVtIXTtpZihfKz0xNSZxLChxPj4+PTQpPj4+OCYyNTUp''@;'; put 'put ''e2lmKDI1Nj09cSlicmVhazt2YXIgbmU9KHEtPTI1Nyk8OD8wOnEtND4+MjtuZT41JiYobmU9MCk7dmFyIGhlPUYraltxXTtuZT4wJiYoaGUrPXFlKG0sXyxuZSksXys9bmUpLEg9cWUobSxfLFcpLF8rPTE1JihxPXc+Pj4xPT0xP3FhW0hdOktyW0hdKTt2YXIgaWU9KHE+Pj49NCk8ND8wOnEt''@;'; put 'put ''Mj4+MSxmZT1zZVtxXTtmb3IoaWU+MCYmKGZlKz1xZShtLF8saWUpLF8rPWllKSwhRSYmTDxoZSYmKEw9KFM9T3QoUyxoZSsxMDApKS5sZW5ndGgpO0Y8aGU7KVNbRl09U1tGLWZlXSwrK0Z9ZWxzZSBTW0YrK109cX1lbHNlezcmXyYmKF8rPTgtKDcmXykpO3ZhciBCPW1bXz4+PjNdfG1bMSso''@;'; put 'put ''Xz4+PjMpXTw8ODtpZihfKz0zMixCPjApZm9yKCFFJiZMPEYrQiYmKEw9KFM9T3QoUyxGK0IpKS5sZW5ndGgpO0ItLSA+MDspU1tGKytdPW1bXz4+PjNdLF8rPTh9cmV0dXJuIEU/W1MsXys3Pj4+M106W1Muc2xpY2UoMCxGKSxfKzc+Pj4zXX0obS5zbGljZShtLmx8fDApLEUpO3JldHVybiBt''@;'; put 'put ''LmwrPXdbMV0sd1swXX1mdW5jdGlvbiBBYyhtLEUpe2lmKCFtKXRocm93IG5ldyBFcnJvcihFKTt0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUuZXJyb3IoRSl9ZnVuY3Rpb24gQ2MobSxFKXt2YXIgXz1tO2hyKF8sMCk7dmFyIEY9e0ZpbGVJbmRleDpbXSxGdWxsUGF0aHM6W119O3koRix7''@;'; put 'put ''cm9vdDpFLnJvb3R9KTtmb3IodmFyIEw9Xy5sZW5ndGgtNDsoODAhPV9bTF18fDc1IT1fW0wrMV18fDUhPV9bTCsyXXx8NiE9X1tMKzNdKSYmTD49MDspLS1MO18ubD1MKzQsXy5sKz00O3ZhciB6PV8ucmVhZF9zaGlmdCgyKTtfLmwrPTY7dmFyIFc9Xy5yZWFkX3NoaWZ0KDQpO2ZvcihfLmw9''@;'; put 'put ''VyxMPTA7TDx6OysrTCl7Xy5sKz0yMDt2YXIgQj1fLnJlYWRfc2hpZnQoNCksSD1fLnJlYWRfc2hpZnQoNCkscT1fLnJlYWRfc2hpZnQoMiksbmU9Xy5yZWFkX3NoaWZ0KDIpLGhlPV8ucmVhZF9zaGlmdCgyKTtfLmwrPTg7dmFyIGllPV8ucmVhZF9zaGlmdCg0KSxmZT1mKF8uc2xpY2UoXy5s''@;'; put 'put ''K3EsXy5sK3ErbmUpKTtfLmwrPXErbmUraGU7dmFyIF9lPV8ubDtfLmw9aWUrNCx5ZyhfLEIsSCxGLGZlKSxfLmw9X2V9cmV0dXJuIEZ9ZnVuY3Rpb24geWcobSxFLF8sdyxTKXttLmwrPTI7dmFyIEY9bS5yZWFkX3NoaWZ0KDIpLEw9bS5yZWFkX3NoaWZ0KDIpLHo9ZnVuY3Rpb24gcyhtKXt2''@;'; put 'put ''YXIgRT02NTUzNSZtLnJlYWRfc2hpZnQoMiksXz02NTUzNSZtLnJlYWRfc2hpZnQoMiksdz1uZXcgRGF0ZSxTPTMxJl8sRj0xNSYoXz4+Pj01KTtfPj4+PTQsdy5zZXRNaWxsaXNlY29uZHMoMCksdy5zZXRGdWxsWWVhcihfKzE5ODApLHcuc2V0TW9udGgoRi0xKSx3LnNldERhdGUoUyk7dmFy''@;'; put 'put ''IEw9MzEmRSx6PTYzJihFPj4+PTUpO3JldHVybiB3LnNldEhvdXJzKEU+Pj49Niksdy5zZXRNaW51dGVzKHopLHcuc2V0U2Vjb25kcyhMPDwxKSx3fShtKTtpZig4MjU3JkYpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBaSVAgZW5jcnlwdGlvbiIpO20ucmVhZF9zaGlmdCg0KTtmb3Io''@;'; put 'put ''dmFyIEI9bS5yZWFkX3NoaWZ0KDQpLEg9bS5yZWFkX3NoaWZ0KDQpLHE9bS5yZWFkX3NoaWZ0KDIpLG5lPW0ucmVhZF9zaGlmdCgyKSxoZT0iIixpZT0wO2llPHE7KytpZSloZSs9U3RyaW5nLmZyb21DaGFyQ29kZShtW20ubCsrXSk7aWYobmUpe3ZhciBmZT1mKG0uc2xpY2UobS5sLG0ubCtu''@;'; put 'put ''ZSkpOyhmZVsyMTU4OV18fHt9KS5tdCYmKHo9ZmVbMjE1ODldLm10KSwoKFN8fHt9KVsyMTU4OV18fHt9KS5tdCYmKHo9U1syMTU4OV0ubXQpfW0ubCs9bmU7dmFyIF9lPW0uc2xpY2UobS5sLG0ubCtCKTtzd2l0Y2goTCl7Y2FzZSA4Ol9lPWZ1bmN0aW9uIFUobSxFKXtpZighSylyZXR1cm4g''@;'; put 'put ''eWMobSxFKTt2YXIgdz1uZXcoMCxLLkluZmxhdGVSYXcpLFM9dy5fcHJvY2Vzc0NodW5rKG0uc2xpY2UobS5sKSx3Ll9maW5pc2hGbHVzaEZsYWcpO3JldHVybiBtLmwrPXcuYnl0ZXNSZWFkLFN9KG0sSCk7YnJlYWs7Y2FzZSAwOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1''@;'; put 'put ''cHBvcnRlZCBaSVAgQ29tcHJlc3Npb24gbWV0aG9kICIrTCl9dmFyIFZlPSExOzgmRiYmKDEzNDY5NTc2MD09bS5yZWFkX3NoaWZ0KDQpJiYobS5yZWFkX3NoaWZ0KDQpLFZlPSEwKSxCPW0ucmVhZF9zaGlmdCg0KSxIPW0ucmVhZF9zaGlmdCg0KSksQiE9RSYmQWMoVmUsIkJhZCBjb21wcmVz''@;'; put 'put ''c2VkIHNpemU6ICIrRSsiICE9ICIrQiksSCE9XyYmQWMoVmUsIkJhZCB1bmNvbXByZXNzZWQgc2l6ZTogIitfKyIgIT0gIitIKSxyaSh3LGhlLF9lLHt1bnNhZmU6ITAsbXQ6en0pfXZhciBQMD17aHRtOiJ0ZXh0L2h0bWwiLHhtbDoidGV4dC94bWwiLGdpZjoiaW1hZ2UvZ2lmIixqcGc6Imlt''@;'; put 'put ''YWdlL2pwZWciLHBuZzoiaW1hZ2UvcG5nIixtc286ImFwcGxpY2F0aW9uL3gtbXNvIix0aG14OiJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNldGhlbWUiLHNoMzN0ajU6ImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSJ9O2Z1bmN0aW9uIENnKG0sRSl7aWYobS5jdHlwZSlyZXR1cm4gbS5jdHlw''@;'; put 'put ''ZTt2YXIgXz1tLm5hbWV8fCIiLHc9Xy5tYXRjaCgvXC4oW15cLl0rKSQvKTtyZXR1cm4gdyYmUDBbd1sxXV18fEUmJih3PShfPUUpLm1hdGNoKC9bXC5cXF0oW15cLlxcXSkrJC8pKSYmUDBbd1sxXV0/UDBbd1sxXV06ImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSJ9ZnVuY3Rpb24gRGcobSl7''@;'; put 'put ''Zm9yKHZhciBFPWdhKG0pLF89W10sdz0wO3c8RS5sZW5ndGg7dys9NzYpXy5wdXNoKEUuc2xpY2Uodyx3Kzc2KSk7cmV0dXJuIF8uam9pbigiXHJcbiIpKyJcclxuIn1mdW5jdGlvbiBPZyhtKXt2YXIgRT1tLnJlcGxhY2UoL1tceDAwLVx4MDhceDBCXHgwQ1x4MEUtXHgxRlx4N0UtXHhGRj1d''@;'; put 'put ''L2csZnVuY3Rpb24oQil7dmFyIEg9Qi5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO3JldHVybiI9IisoMT09SC5sZW5ndGg/IjAiK0g6SCl9KTsiXG4iPT0oRT1FLnJlcGxhY2UoLyAkL2dtLCI9MjAiKS5yZXBsYWNlKC9cdCQvZ20sIj0wOSIpKS5jaGFyQXQoMCkm''@;'; put 'put ''JihFPSI9MEQiK0Uuc2xpY2UoMSkpO2Zvcih2YXIgXz1bXSx3PShFPUUucmVwbGFjZSgvXHIoPyFcbikvZ20sIj0wRCIpLnJlcGxhY2UoL1xuXG4vZ20sIlxuPTBBIikucmVwbGFjZSgvKFteXHJcbl0pXG4vZ20sIiQxPTBBIikpLnNwbGl0KCJcclxuIiksUz0wO1M8dy5sZW5ndGg7KytTKXt2''@;'; put 'put ''YXIgRj13W1NdO2lmKDAhPUYubGVuZ3RoKWZvcih2YXIgTD0wO0w8Ri5sZW5ndGg7KXt2YXIgej03NixXPUYuc2xpY2UoTCxMK3opOyI9Ij09Vy5jaGFyQXQoei0xKT96LS06Ij0iPT1XLmNoYXJBdCh6LTIpP3otPTI6Ij0iPT1XLmNoYXJBdCh6LTMpJiYoei09MyksVz1GLnNsaWNlKEwsTCt6''@;'; put 'put ''KSwoTCs9eik8Ri5sZW5ndGgmJihXKz0iPSIpLF8ucHVzaChXKX1lbHNlIF8ucHVzaCgiIil9cmV0dXJuIF8uam9pbigiXHJcbiIpfWZ1bmN0aW9uIFJnKG0sRSxfKXtmb3IodmFyIEwsdz0iIixTPSIiLEY9IiIsej0wO3o8MTA7Kyt6KXt2YXIgVz1FW3pdO2lmKCFXfHxXLm1hdGNoKC9eXHMq''@;'; put 'put ''JC8pKWJyZWFrO3ZhciBCPVcubWF0Y2goL14oLio/KTpccyooW15cc10uKikkLyk7aWYoQilzd2l0Y2goQlsxXS50b0xvd2VyQ2FzZSgpKXtjYXNlImNvbnRlbnQtbG9jYXRpb24iOnc9QlsyXS50cmltKCk7YnJlYWs7Y2FzZSJjb250ZW50LXR5cGUiOkY9QlsyXS50cmltKCk7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJjb250ZW50LXRyYW5zZmVyLWVuY29kaW5nIjpTPUJbMl0udHJpbSgpfX1zd2l0Y2goKyt6LFMudG9Mb3dlckNhc2UoKSl7Y2FzZSJiYXNlNjQiOkw9SXIoT3IoRS5zbGljZSh6KS5qb2luKCIiKSkpO2JyZWFrO2Nhc2UicXVvdGVkLXByaW50YWJsZSI6TD1mdW5jdGlvbiBJZyhtKXtmb3Io''@;'; put 'put ''dmFyIEU9W10sXz0wO188bS5sZW5ndGg7KytfKXtmb3IodmFyIHc9bVtfXTtfPD1tLmxlbmd0aCYmIj0iPT13LmNoYXJBdCh3Lmxlbmd0aC0xKTspdz13LnNsaWNlKDAsdy5sZW5ndGgtMSkrbVsrK19dO0UucHVzaCh3KX1mb3IodmFyIFM9MDtTPEUubGVuZ3RoOysrUylFW1NdPUVbU10ucmVw''@;'; put 'put ''bGFjZSgvWz1dWzAtOUEtRmEtZl17Mn0vZyxmdW5jdGlvbihGKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChGLnNsaWNlKDEpLDE2KSl9KTtyZXR1cm4gSXIoRS5qb2luKCJcclxuIikpfShFLnNsaWNlKHopKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5z''@;'; put 'put ''dXBwb3J0ZWQgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyAiK1MpfXZhciBIPXJpKG0sdy5zbGljZShfLmxlbmd0aCksTCx7dW5zYWZlOiEwfSk7RiYmKEguY3R5cGU9Ril9ZnVuY3Rpb24gcmkobSxFLF8sdyl7dmFyIFM9dyYmdy51bnNhZmU7U3x8eShtKTt2YXIgRj0hUyYmdmUuZmluZCht''@;'; put 'put ''LEUpO2lmKCFGKXt2YXIgTD1tLkZ1bGxQYXRoc1swXTtFLnNsaWNlKDAsTC5sZW5ndGgpPT1MP0w9RTooIi8iIT1MLnNsaWNlKC0xKSYmKEwrPSIvIiksTD0oTCtFKS5yZXBsYWNlKCIvLyIsIi8iKSksRj17bmFtZTpuKEUpLHR5cGU6Mn0sbS5GaWxlSW5kZXgucHVzaChGKSxtLkZ1bGxQYXRo''@;'; put 'put ''cy5wdXNoKEwpLFN8fHZlLnV0aWxzLmNmYl9nYyhtKX1yZXR1cm4gRi5jb250ZW50PV8sRi5zaXplPV8/Xy5sZW5ndGg6MCx3JiYody5DTFNJRCYmKEYuY2xzaWQ9dy5DTFNJRCksdy5tdCYmKEYubXQ9dy5tdCksdy5jdCYmKEYuY3Q9dy5jdCkpLEZ9cmV0dXJuIHQuZmluZD1mdW5jdGlvbiBY''@;'; put 'put ''KG0sRSl7dmFyIF89bS5GdWxsUGF0aHMubWFwKGZ1bmN0aW9uKFcpe3JldHVybiBXLnRvVXBwZXJDYXNlKCl9KSx3PV8ubWFwKGZ1bmN0aW9uKFcpe3ZhciBCPVcuc3BsaXQoIi8iKTtyZXR1cm4gQltCLmxlbmd0aC0oIi8iPT1XLnNsaWNlKC0xKT8yOjEpXX0pLFM9ITE7NDc9PT1FLmNoYXJD''@;'; put 'put ''b2RlQXQoMCk/KFM9ITAsRT1fWzBdLnNsaWNlKDAsLTEpK0UpOlM9LTEhPT1FLmluZGV4T2YoIi8iKTt2YXIgRj1FLnRvVXBwZXJDYXNlKCksTD0hMD09PVM/Xy5pbmRleE9mKEYpOncuaW5kZXhPZihGKTtpZigtMSE9PUwpcmV0dXJuIG0uRmlsZUluZGV4W0xdO3ZhciB6PSFGLm1hdGNoKHdh''@;'; put 'put ''KTtmb3IoRj1GLnJlcGxhY2UoZHIsIiIpLHomJihGPUYucmVwbGFjZSh3YSwiISIpKSxMPTA7TDxfLmxlbmd0aDsrK0wpaWYoKHo/X1tMXS5yZXBsYWNlKHdhLCIhIik6X1tMXSkucmVwbGFjZShkciwiIik9PUZ8fCh6P3dbTF0ucmVwbGFjZSh3YSwiISIpOndbTF0pLnJlcGxhY2UoZHIsIiIp''@;'; put 'put ''PT1GKXJldHVybiBtLkZpbGVJbmRleFtMXTtyZXR1cm4gbnVsbH0sdC5yZWFkPWZ1bmN0aW9uIEkobSxFKXt2YXIgXz1FJiZFLnR5cGU7c3dpdGNoKF98fFNlJiZCdWZmZXIuaXNCdWZmZXIobSkmJihfPSJidWZmZXIiKSxffHwiYmFzZTY0Iil7Y2FzZSJmaWxlIjpyZXR1cm4gZnVuY3Rpb24g''@;'; put 'put ''TShtLEUpe3JldHVybiBvKCksbChjLnJlYWRGaWxlU3luYyhtKSxFKX0obSxFKTtjYXNlImJhc2U2NCI6cmV0dXJuIGwoSXIoT3IobSkpLEUpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gbChJcihtKSxFKX1yZXR1cm4gbChtLEUpfSx0LnBhcnNlPWwsdC53cml0ZT1mdW5jdGlvbiB4ZShtLEUpe3Zh''@;'; put 'put ''ciBfPVYobSxFKTtzd2l0Y2goRSYmRS50eXBlfHwiYnVmZmVyIil7Y2FzZSJmaWxlIjpyZXR1cm4gbygpLGMud3JpdGVGaWxlU3luYyhFLmZpbGVuYW1lLF8pLF87Y2FzZSJiaW5hcnkiOnJldHVybiJzdHJpbmciPT10eXBlb2YgXz9fOmNlKF8pO2Nhc2UiYmFzZTY0IjpyZXR1cm4gZ2EoInN0''@;'; put 'put ''cmluZyI9PXR5cGVvZiBfP186Y2UoXykpO2Nhc2UiYnVmZmVyIjppZihTZSlyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKF8pP186b3QoXyk7Y2FzZSJhcnJheSI6cmV0dXJuInN0cmluZyI9PXR5cGVvZiBfP0lyKF8pOl99cmV0dXJuIF99LHQud3JpdGVGaWxlPWZ1bmN0aW9uIEZlKG0sRSxfKXtv''@;'; put 'put ''KCk7dmFyIHc9VihtLF8pO2Mud3JpdGVGaWxlU3luYyhFLHcpfSx0LnV0aWxzPXtjZmJfbmV3OmZ1bmN0aW9uIFBnKG0pe3ZhciBFPXt9O3JldHVybiB5KEUsbSksRX0sY2ZiX2FkZDpyaSxjZmJfZGVsOmZ1bmN0aW9uIExnKG0sRSl7eShtKTt2YXIgXz12ZS5maW5kKG0sRSk7aWYoXylmb3Io''@;'; put 'put ''dmFyIHc9MDt3PG0uRmlsZUluZGV4Lmxlbmd0aDsrK3cpaWYobS5GaWxlSW5kZXhbd109PV8pcmV0dXJuIG0uRmlsZUluZGV4LnNwbGljZSh3LDEpLG0uRnVsbFBhdGhzLnNwbGljZSh3LDEpLCEwO3JldHVybiExfSxjZmJfbW92OmZ1bmN0aW9uIEJnKG0sRSxfKXt5KG0pO3ZhciB3PXZlLmZp''@;'; put 'put ''bmQobSxFKTtpZih3KWZvcih2YXIgUz0wO1M8bS5GaWxlSW5kZXgubGVuZ3RoOysrUylpZihtLkZpbGVJbmRleFtTXT09dylyZXR1cm4gbS5GaWxlSW5kZXhbU10ubmFtZT1uKF8pLG0uRnVsbFBhdGhzW1NdPV8sITA7cmV0dXJuITF9LGNmYl9nYzpmdW5jdGlvbiBNZyhtKXtSKG0sITApfSxS''@;'; put 'put ''ZWFkU2hpZnQ6QWEsQ2hlY2tGaWVsZDphcyxwcmVwX2Jsb2I6aHIsYmNvbmNhdDpmcix1c2VfemxpYjpmdW5jdGlvbiBDKG0pe3RyeXt2YXIgXz1uZXcoMCxtLkluZmxhdGVSYXcpO2lmKF8uX3Byb2Nlc3NDaHVuayhuZXcgVWludDhBcnJheShbMywwXSksXy5fZmluaXNoRmx1c2hGbGFnKSwh''@;'; put 'put ''Xy5ieXRlc1JlYWQpdGhyb3cgbmV3IEVycm9yKCJ6bGliIGRvZXMgbm90IGV4cG9zZSBieXRlc1JlYWQiKTtLPW19Y2F0Y2godyl7Y29uc29sZS5lcnJvcigiY2Fubm90IHVzZSBuYXRpdmUgemxpYjogIisody5tZXNzYWdlfHx3KSl9fSxfZGVmbGF0ZVJhdzp5ZSxfaW5mbGF0ZVJhdzp5Yyxj''@;'; put 'put ''b25zdHM6dWV9LHR9KCk7ZnVuY3Rpb24gJGUoZSl7Zm9yKHZhciB0PU9iamVjdC5rZXlzKGUpLHI9W10sYT0wO2E8dC5sZW5ndGg7KythKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHRbYV0pJiZyLnB1c2godFthXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gczAoZSl7Zm9y''@;'; put 'put ''KHZhciB0PVtdLHI9JGUoZSksYT0wO2EhPT1yLmxlbmd0aDsrK2EpdFtlW3JbYV1dXT1yW2FdO3JldHVybiB0fXZhciBjMD1uZXcgRGF0ZSgxODk5LDExLDMwLDAsMCwwKTtmdW5jdGlvbiBpcihlLHQpe3ZhciByPWUuZ2V0VGltZSgpO3JldHVybiB0JiYoci09MTI2MzE2OGU1KSwoci0oYzAu''@;'; put 'put ''Z2V0VGltZSgpKzZlNCooZS5nZXRUaW1lem9uZU9mZnNldCgpLWMwLmdldFRpbWV6b25lT2Zmc2V0KCkpKSkvODY0ZTV9dmFyIFNpPW5ldyBEYXRlLGxvPWMwLmdldFRpbWUoKSs2ZTQqKFNpLmdldFRpbWV6b25lT2Zmc2V0KCktYzAuZ2V0VGltZXpvbmVPZmZzZXQoKSksRmk9U2kuZ2V0VGlt''@;'; put 'put ''ZXpvbmVPZmZzZXQoKTtmdW5jdGlvbiBvMChlKXt2YXIgdD1uZXcgRGF0ZTtyZXR1cm4gdC5zZXRUaW1lKDI0KmUqNjAqNjAqMWUzK2xvKSx0LmdldFRpbWV6b25lT2Zmc2V0KCkhPT1GaSYmdC5zZXRUaW1lKHQuZ2V0VGltZSgpKzZlNCoodC5nZXRUaW1lem9uZU9mZnNldCgpLUZpKSksdH1m''@;'; put 'put ''dW5jdGlvbiB1byhlKXt2YXIgdD0wLHI9MCxhPSExLG49ZS5tYXRjaCgvUChbMC05XC5dK1kpPyhbMC05XC5dK00pPyhbMC05XC5dK0QpP1QoWzAtOVwuXStIKT8oWzAtOVwuXStNKT8oWzAtOVwuXStTKT8vKTtpZighbil0aHJvdyBuZXcgRXJyb3IoInwiK2UrInwgaXMgbm90IGFuIElTTzg2''@;'; put 'put ''MDEgRHVyYXRpb24iKTtmb3IodmFyIGk9MTtpIT1uLmxlbmd0aDsrK2kpaWYobltpXSl7c3dpdGNoKHI9MSxpPjMmJihhPSEwKSxuW2ldLnNsaWNlKG5baV0ubGVuZ3RoLTEpKXtjYXNlIlkiOnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgSVNPIER1cmF0aW9uIEZpZWxkOiAiK25baV0u''@;'; put 'put ''c2xpY2UobltpXS5sZW5ndGgtMSkpO2Nhc2UiRCI6cio9MjQ7Y2FzZSJIIjpyKj02MDtjYXNlIk0iOmlmKCFhKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgSVNPIER1cmF0aW9uIEZpZWxkOiBNIik7cio9NjB9dCs9cipwYXJzZUludChuW2ldLDEwKX1yZXR1cm4gdH12YXIgeWk9bmV3''@;'; put 'put ''IERhdGUoIjIwMTctMDItMTlUMTk6MDY6MDkuMDAwWiIpLEFpPWlzTmFOKHlpLmdldEZ1bGxZZWFyKCkpP25ldyBEYXRlKCIyLzE5LzE3Iik6eWksaG89MjAxNz09QWkuZ2V0RnVsbFllYXIoKTtmdW5jdGlvbiBYZShlLHQpe3ZhciByPW5ldyBEYXRlKGUpO2lmKGhvKXJldHVybiB0PjA/ci5z''@;'; put 'put ''ZXRUaW1lKHIuZ2V0VGltZSgpKzYwKnIuZ2V0VGltZXpvbmVPZmZzZXQoKSoxZTMpOnQ8MCYmci5zZXRUaW1lKHIuZ2V0VGltZSgpLTYwKnIuZ2V0VGltZXpvbmVPZmZzZXQoKSoxZTMpLHI7aWYoZSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIGU7aWYoMTkxNz09QWkuZ2V0RnVsbFllYXIoKSYm''@;'; put 'put ''IWlzTmFOKHIuZ2V0RnVsbFllYXIoKSkpe3ZhciBhPXIuZ2V0RnVsbFllYXIoKTtyZXR1cm4gZS5pbmRleE9mKCIiK2EpPi0xfHxyLnNldEZ1bGxZZWFyKHIuZ2V0RnVsbFllYXIoKSsxMDApLHJ9dmFyIG49ZS5tYXRjaCgvXGQrL2cpfHxbIjIwMTciLCIyIiwiMTkiLCIwIiwiMCIsIjAiXSxp''@;'; put 'put ''PW5ldyBEYXRlKCtuWzBdLCtuWzFdLTEsK25bMl0sK25bM118fDAsK25bNF18fDAsK25bNV18fDApO3JldHVybiBlLmluZGV4T2YoIloiKT4tMSYmKGk9bmV3IERhdGUoaS5nZXRUaW1lKCktNjAqaS5nZXRUaW1lem9uZU9mZnNldCgpKjFlMykpLGl9ZnVuY3Rpb24gUHQoZSx0KXtpZihTZSYm''@;'; put 'put ''QnVmZmVyLmlzQnVmZmVyKGUpKXtpZih0KXtpZigyNTU9PWVbMF0mJjI1ND09ZVsxXSlyZXR1cm4gdHQoZS5zbGljZSgyKS50b1N0cmluZygidXRmMTZsZSIpKTtpZigyNTQ9PWVbMV0mJjI1NT09ZVsyXSlyZXR1cm4gdHQoYWkoZS5zbGljZSgyKS50b1N0cmluZygiYmluYXJ5IikpKX1yZXR1''@;'; put 'put ''cm4gZS50b1N0cmluZygiYmluYXJ5Iil9aWYodHlwZW9mIFRleHREZWNvZGVyPCJ1Iil0cnl7aWYodCl7aWYoMjU1PT1lWzBdJiYyNTQ9PWVbMV0pcmV0dXJuIHR0KG5ldyBUZXh0RGVjb2RlcigidXRmLTE2bGUiKS5kZWNvZGUoZS5zbGljZSgyKSkpO2lmKDI1ND09ZVswXSYmMjU1PT1lWzFd''@;'; put 'put ''KXJldHVybiB0dChuZXcgVGV4dERlY29kZXIoInV0Zi0xNmJlIikuZGVjb2RlKGUuc2xpY2UoMikpKX12YXIgcj17Ilx1MjBhYyI6Ilx4ODAiLCJcdTIwMWEiOiJceDgyIixcdTAxOTI6Ilx4ODMiLCJcdTIwMWUiOiJceDg0IiwiXHUyMDI2IjoiXHg4NSIsIlx1MjAyMCI6Ilx4ODYiLCJcdTIw''@;'; put 'put ''MjEiOiJceDg3IixcdTAyYzY6Ilx4ODgiLCJcdTIwMzAiOiJceDg5IixcdTAxNjA6Ilx4OGEiLCJcdTIwMzkiOiJceDhiIixcdTAxNTI6Ilx4OGMiLFx1MDE3ZDoiXHg4ZSIsIlx1MjAxOCI6Ilx4OTEiLCJcdTIwMTkiOiJceDkyIiwiXHUyMDFjIjoiXHg5MyIsIlx1MjAxZCI6Ilx4OTQiLCJc''@;'; put 'put ''dTIwMjIiOiJceDk1IiwiXHUyMDEzIjoiXHg5NiIsIlx1MjAxNCI6Ilx4OTciLCJcdTAyZGMiOiJceDk4IiwiXHUyMTIyIjoiXHg5OSIsXHUwMTYxOiJceDlhIiwiXHUyMDNhIjoiXHg5YiIsXHUwMTUzOiJceDljIixcdTAxN2U6Ilx4OWUiLFx1MDE3ODoiXHg5ZiJ9O3JldHVybiBBcnJheS5p''@;'; put 'put ''c0FycmF5KGUpJiYoZT1uZXcgVWludDhBcnJheShlKSksbmV3IFRleHREZWNvZGVyKCJsYXRpbjEiKS5kZWNvZGUoZSkucmVwbGFjZSgvW1x1MjBhY1x1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1Mlx1MDE3ZFx1MjAxOFx1''@;'; put 'put ''MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1MDE2MVx1MjAzYVx1MDE1M1x1MDE3ZVx1MDE3OF0vZyxmdW5jdGlvbihpKXtyZXR1cm4gcltpXXx8aX0pfWNhdGNoe31mb3IodmFyIGE9W10sbj0wO24hPWUubGVuZ3RoOysrbilhLnB1c2goU3RyaW5nLmZy''@;'; put 'put ''b21DaGFyQ29kZShlW25dKSk7cmV0dXJuIGEuam9pbigiIil9ZnVuY3Rpb24gTWUoZSl7aWYodHlwZW9mIEpTT048InUiJiYhQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShlKSk7aWYoIm9iamVjdCIhPXR5cGVvZiBlfHxudWxsPT1lKXJldHVybiBl''@;'; put 'put ''O2lmKGUgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBuZXcgRGF0ZShlLmdldFRpbWUoKSk7dmFyIHQ9e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJih0W3JdPU1lKGVbcl0pKTtyZXR1cm4gdH1mdW5jdGlvbiBqZShlLHQpe2Zvcih2''@;'; put 'put ''YXIgcj0iIjtyLmxlbmd0aDx0OylyKz1lO3JldHVybiByfWZ1bmN0aW9uIEpyKGUpe3ZhciB0PU51bWJlcihlKTtpZighaXNOYU4odCkpcmV0dXJuIGlzRmluaXRlKHQpP3Q6TmFOO2lmKCEvXGQvLnRlc3QoZSkpcmV0dXJuIHQ7dmFyIHI9MSxhPWUucmVwbGFjZSgvKFtcZF0pLChbXGRdKS9n''@;'; put 'put ''LCIkMSQyIikucmVwbGFjZSgvWyRdL2csIiIpLnJlcGxhY2UoL1slXS9nLGZ1bmN0aW9uKCl7cmV0dXJuIHIqPTEwMCwiIn0pO3JldHVybiBpc05hTih0PU51bWJlcihhKSkmJihhPWEucmVwbGFjZSgvWyhdKC4qKVspXS8sZnVuY3Rpb24obixpKXtyZXR1cm4gcj0tcixpfSksaXNOYU4odD1O''@;'; put 'put ''dW1iZXIoYSkpKT90OnQvcn12YXIgeG89WyJqYW51YXJ5IiwiZmVicnVhcnkiLCJtYXJjaCIsImFwcmlsIiwibWF5IiwianVuZSIsImp1bHkiLCJhdWd1c3QiLCJzZXB0ZW1iZXIiLCJvY3RvYmVyIiwibm92ZW1iZXIiLCJkZWNlbWJlciJdO2Z1bmN0aW9uIGFhKGUpe3ZhciB0PW5ldyBEYXRl''@;'; put 'put ''KGUpLHI9bmV3IERhdGUoTmFOKSxhPXQuZ2V0WWVhcigpLG49dC5nZXRNb250aCgpLGk9dC5nZXREYXRlKCk7aWYoaXNOYU4oaSkpcmV0dXJuIHI7dmFyIHM9ZS50b0xvd2VyQ2FzZSgpO2lmKHMubWF0Y2goL2phbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwfG9jdHxub3Z8ZGVj''@;'; put 'put ''Lykpe2lmKChzPXMucmVwbGFjZSgvW15hLXpdL2csIiIpLnJlcGxhY2UoLyhbXmEtel18XilbYXBdbT8oW15hLXpdfCQpLywiIikpLmxlbmd0aD4zJiYtMT09eG8uaW5kZXhPZihzKSlyZXR1cm4gcn1lbHNlIGlmKHMubWF0Y2goL1thLXpdLykpcmV0dXJuIHI7cmV0dXJuIGE8MHx8YT44MDk5''@;'; put 'put ''P3I6KG4+MHx8aT4xKSYmMTAxIT1hP3Q6ZS5tYXRjaCgvW14tMC05OixcL1xcXS8pP3I6dH12YXIgdm89ZnVuY3Rpb24oKXt2YXIgZT01PT0iYWJhY2FiYSIuc3BsaXQoLyg6P2IpL2kpLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24ocixhLG4pe2lmKGV8fCJzdHJpbmciPT10eXBlb2YgYSlyZXR1''@;'; put 'put ''cm4gci5zcGxpdChhKTtmb3IodmFyIGk9ci5zcGxpdChhKSxzPVtpWzBdXSxmPTE7ZjxpLmxlbmd0aDsrK2Ypcy5wdXNoKG4pLHMucHVzaChpW2ZdKTtyZXR1cm4gc319KCk7ZnVuY3Rpb24gQ2koZSl7cmV0dXJuIGU/ZS5jb250ZW50JiZlLnR5cGU/UHQoZS5jb250ZW50LCEwKTplLmRhdGE/''@;'; put 'put ''UXQoZS5kYXRhKTplLmFzTm9kZUJ1ZmZlciYmU2U/UXQoZS5hc05vZGVCdWZmZXIoKS50b1N0cmluZygiYmluYXJ5IikpOmUuYXNCaW5hcnk/UXQoZS5hc0JpbmFyeSgpKTplLl9kYXRhJiZlLl9kYXRhLmdldENvbnRlbnQ/UXQoUHQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZS5fZGF0''@;'; put 'put ''YS5nZXRDb250ZW50KCksMCkpKTpudWxsOm51bGx9ZnVuY3Rpb24gRGkoZSl7aWYoIWUpcmV0dXJuIG51bGw7aWYoZS5kYXRhKXJldHVybiB0MChlLmRhdGEpO2lmKGUuYXNOb2RlQnVmZmVyJiZTZSlyZXR1cm4gZS5hc05vZGVCdWZmZXIoKTtpZihlLl9kYXRhJiZlLl9kYXRhLmdldENvbnRl''@;'; put 'put ''bnQpe3ZhciB0PWUuX2RhdGEuZ2V0Q29udGVudCgpO3JldHVybiJzdHJpbmciPT10eXBlb2YgdD90MCh0KTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KX1yZXR1cm4gZS5jb250ZW50JiZlLnR5cGU/ZS5jb250ZW50Om51bGx9ZnVuY3Rpb24gV3IoZSx0KXtmb3IodmFyIHI9ZS5GdWxs''@;'; put 'put ''UGF0aHN8fCRlKGUuZmlsZXMpLGE9dC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1tcL10vZywiXFwiKSxuPWEucmVwbGFjZSgvXFwvZywiLyIpLGk9MDtpPHIubGVuZ3RoOysraSl7dmFyIHM9cltpXS5yZXBsYWNlKC9eUm9vdCBFbnRyeVtcL10vLCIiKS50b0xvd2VyQ2FzZSgpO2lmKGE9PXN8''@;'; put 'put ''fG49PXMpcmV0dXJuIGUuZmlsZXM/ZS5maWxlc1tyW2ldXTplLkZpbGVJbmRleFtpXX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBWMChlLHQpe3ZhciByPVdyKGUsdCk7aWYobnVsbD09cil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGZpbGUgIit0KyIgaW4gemlwIik7cmV0dXJuIHJ9ZnVu''@;'; put 'put ''Y3Rpb24gUWUoZSx0LHIpe2lmKCFyKXJldHVybiBmdW5jdGlvbiBwbyhlKXtyZXR1cm4gZSYmIi5iaW4iPT09ZS5uYW1lLnNsaWNlKC00KT9EaShlKTpDaShlKX0oVjAoZSx0KSk7aWYoIXQpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBRZShlLHQpfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlv''@;'; put 'put ''biBOcihlLHQscil7aWYoIXIpcmV0dXJuIENpKFYwKGUsdCkpO2lmKCF0KXJldHVybiBudWxsO3RyeXtyZXR1cm4gTnIoZSx0KX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gT2koZSx0LHIpe2lmKCFyKXJldHVybiBEaShWMChlLHQpKTtpZighdClyZXR1cm4gbnVsbDt0cnl7cmV0dXJu''@;'; put 'put ''IE9pKGUsdCl9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIElpKGUpe2Zvcih2YXIgdD1lLkZ1bGxQYXRoc3x8JGUoZS5maWxlcykscj1bXSxhPTA7YTx0Lmxlbmd0aDsrK2EpIi8iIT10W2FdLnNsaWNlKC0xKSYmci5wdXNoKHRbYV0ucmVwbGFjZSgvXlJvb3QgRW50cnlbXC9dLywiIikp''@;'; put 'put ''O3JldHVybiByLnNvcnQoKX1mdW5jdGlvbiBSaShlLHQpe3N3aXRjaCh0LnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gdmUucmVhZChlLHt0eXBlOiJiYXNlNjQifSk7Y2FzZSJiaW5hcnkiOnJldHVybiB2ZS5yZWFkKGUse3R5cGU6ImJpbmFyeSJ9KTtjYXNlImJ1ZmZlciI6Y2FzZSJhcnJh''@;'; put 'put ''eSI6cmV0dXJuIHZlLnJlYWQoZSx7dHlwZToiYnVmZmVyIn0pfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIit0LnR5cGUpfWZ1bmN0aW9uIFNhKGUsdCl7aWYoIi8iPT1lLmNoYXJBdCgwKSlyZXR1cm4gZS5zbGljZSgxKTt2YXIgcj10LnNwbGl0KCIvIik7Ii8iIT10LnNs''@;'; put 'put ''aWNlKC0xKSYmci5wb3AoKTtmb3IodmFyIGE9ZS5zcGxpdCgiLyIpOzAhPT1hLmxlbmd0aDspe3ZhciBuPWEuc2hpZnQoKTsiLi4iPT09bj9yLnBvcCgpOiIuIiE9PW4mJnIucHVzaChuKX1yZXR1cm4gci5qb2luKCIvIil9dmFyIGVyPSc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJV''@;'; put 'put ''VEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+XHJcbicsbW89LyhbXiJccz8+XC9dKylccyo9XHMqKCg/OiIpKFteIl0qKSg/OiIpfCg/OicpKFteJ10qKSg/OicpfChbXiciPlxzXSspKS9nLE5pPS88W1wvXD9dP1thLXpBLVowLTk6Xy1dKyg/OlxzK1teIlxzPz5cL10rXHMqPVxzKig/OiJbXiJd''@;'; put 'put ''KiJ8J1teJ10qJ3xbXiciPlxzPV0rKSkqXHMqW1wvXD9dPz4vZ20sdnI9ZXIubWF0Y2goTmkpP05pOi88W14+XSo+L2csX289Lzxcdyo6Lyx3bz0vPChcLz8pXHcrOi87ZnVuY3Rpb24gbWUoZSx0LHIpe2Zvcih2YXIgYT17fSxuPTAsaT0wO24hPT1lLmxlbmd0aCYmMzIhPT0oaT1lLmNoYXJD''@;'; put 'put ''b2RlQXQobikpJiYxMCE9PWkmJjEzIT09aTsrK24pO2lmKHR8fChhWzBdPWUuc2xpY2UoMCxuKSksbj09PWUubGVuZ3RoKXJldHVybiBhO3ZhciBzPWUubWF0Y2gobW8pLGY9MCxjPSIiLG89MCxsPSIiLGg9IiIseD0xO2lmKHMpZm9yKG89MDtvIT1zLmxlbmd0aDsrK28pe2ZvcihoPXNbb10s''@;'; put 'put ''aT0wO2khPWgubGVuZ3RoJiY2MSE9PWguY2hhckNvZGVBdChpKTsrK2kpO2ZvcihsPWguc2xpY2UoMCxpKS50cmltKCk7MzI9PWguY2hhckNvZGVBdChpKzEpOykrK2k7Zm9yKHg9MzQ9PShuPWguY2hhckNvZGVBdChpKzEpKXx8Mzk9PW4/MTowLGM9aC5zbGljZShpKzEreCxoLmxlbmd0aC14''@;'; put 'put ''KSxmPTA7ZiE9bC5sZW5ndGgmJjU4IT09bC5jaGFyQ29kZUF0KGYpOysrZik7aWYoZj09PWwubGVuZ3RoKWwuaW5kZXhPZigiXyIpPjAmJihsPWwuc2xpY2UoMCxsLmluZGV4T2YoIl8iKSkpLGFbbF09YyxyfHwoYVtsLnRvTG93ZXJDYXNlKCldPWMpO2Vsc2V7dmFyIGQ9KDU9PT1mJiYieG1s''@;'; put 'put ''bnMiPT09bC5zbGljZSgwLDUpPyJ4bWxucyI6IiIpK2wuc2xpY2UoZisxKTtpZihhW2RdJiYiZXh0Ij09bC5zbGljZShmLTMsZikpY29udGludWU7YVtkXT1jLHJ8fChhW2QudG9Mb3dlckNhc2UoKV09Yyl9fXJldHVybiBhfWZ1bmN0aW9uIHJ0KGUpe3JldHVybiBlLnJlcGxhY2Uod28sIjwk''@;'; put 'put ''MSIpfXZhciBiaT17IiZxdW90OyI6JyInLCImYXBvczsiOiInIiwiJmd0OyI6Ij4iLCImbHQ7IjoiPCIsIiZhbXA7IjoiJiJ9LEcwPXMwKGJpKSxJZT1mdW5jdGlvbigpe3ZhciBlPS8mKD86cXVvdHxhcG9zfGd0fGx0fGFtcHwjeD8oW1xkYS1mQS1GXSspKTsvZ2ksdD0vX3goW1xkYS1mQS1G''@;'; put 'put ''XXs0fSlfL2dpO3JldHVybiBmdW5jdGlvbiByKGEpe3ZhciBuPWErIiIsaT1uLmluZGV4T2YoIjwhW0NEQVRBWyIpO2lmKC0xPT1pKXJldHVybiBuLnJlcGxhY2UoZSxmdW5jdGlvbihmLGMpe3JldHVybiBiaVtmXXx8U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChjLGYuaW5kZXhPZigi''@;'; put 'put ''eCIpPi0xPzE2OjEwKSl8fGZ9KS5yZXBsYWNlKHQsZnVuY3Rpb24oZixjKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChjLDE2KSl9KTt2YXIgcz1uLmluZGV4T2YoIl1dPiIpO3JldHVybiByKG4uc2xpY2UoMCxpKSkrbi5zbGljZShpKzkscykrcihuLnNsaWNlKHMrMykp''@;'; put 'put ''fX0oKSx6MD0vWyY8PiciXS9nLExpPS9bXHUwMDAwLVx1MDAxZl0vZztmdW5jdGlvbiAkMChlKXtyZXR1cm4oZSsiIikucmVwbGFjZSh6MCxmdW5jdGlvbihyKXtyZXR1cm4gRzBbcl19KS5yZXBsYWNlKC9cbi9nLCI8YnIvPiIpLnJlcGxhY2UoTGksZnVuY3Rpb24ocil7cmV0dXJuIiYjeCIr''@;'; put 'put ''KCIwMDAiK3IuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KSsiOyJ9KX12YXIgQmk9ZnVuY3Rpb24oKXt2YXIgZT0vJiMoXGQrKTsvZztmdW5jdGlvbiB0KHIsYSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoYSwxMCkpfXJldHVybiBmdW5jdGlvbihh''@;'; put 'put ''KXtyZXR1cm4gYS5yZXBsYWNlKGUsdCl9fSgpO2Z1bmN0aW9uIFdlKGUpe3N3aXRjaChlKXtjYXNlIDE6Y2FzZSEwOmNhc2UiMSI6Y2FzZSJ0cnVlIjpjYXNlIlRSVUUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIGowKGUpe2Zvcih2YXIgdD0iIixyPTAsYT0wLG49MCxp''@;'; put 'put ''PTAscz0wLGY9MDtyPGUubGVuZ3RoOykoYT1lLmNoYXJDb2RlQXQocisrKSk8MTI4P3QrPVN0cmluZy5mcm9tQ2hhckNvZGUoYSk6KG49ZS5jaGFyQ29kZUF0KHIrKyksYT4xOTEmJmE8MjI0PyhzPSgzMSZhKTw8NixzfD02MyZuLHQrPVN0cmluZy5mcm9tQ2hhckNvZGUocykpOihpPWUuY2hh''@;'; put 'put ''ckNvZGVBdChyKyspLGE8MjQwP3QrPVN0cmluZy5mcm9tQ2hhckNvZGUoKDE1JmEpPDwxMnwoNjMmbik8PDZ8NjMmaSk6KGY9KCg3JmEpPDwxOHwoNjMmbik8PDEyfCg2MyZpKTw8Nnw2MyYocz1lLmNoYXJDb2RlQXQocisrKSkpLTY1NTM2LHQrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYr''@;'; put 'put ''KGY+Pj4xMCYxMDIzKSksdCs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NjMyMCsoMTAyMyZmKSkpKSk7cmV0dXJuIHR9ZnVuY3Rpb24gTWkoZSl7dmFyIHIsYSxmLHQ9X3QoMiplLmxlbmd0aCksbj0xLGk9MCxzPTA7Zm9yKGE9MDthPGUubGVuZ3RoO2ErPW4pbj0xLChmPWUuY2hhckNvZGVBdChh''@;'; put 'put ''KSk8MTI4P3I9ZjpmPDIyND8ocj02NCooMzEmZikrKDYzJmUuY2hhckNvZGVBdChhKzEpKSxuPTIpOmY8MjQwPyhyPTQwOTYqKDE1JmYpKzY0Kig2MyZlLmNoYXJDb2RlQXQoYSsxKSkrKDYzJmUuY2hhckNvZGVBdChhKzIpKSxuPTMpOihuPTQscj0yNjIxNDQqKDcmZikrNDA5NiooNjMmZS5j''@;'; put 'put ''aGFyQ29kZUF0KGErMSkpKzY0Kig2MyZlLmNoYXJDb2RlQXQoYSsyKSkrKDYzJmUuY2hhckNvZGVBdChhKzMpKSxzPTU1Mjk2Kygoci09NjU1MzYpPj4+MTAmMTAyMykscj01NjMyMCsoMTAyMyZyKSksMCE9PXMmJih0W2krK109MjU1JnMsdFtpKytdPXM+Pj44LHM9MCksdFtpKytdPXIlMjU2''@;'; put 'put ''LHRbaSsrXT1yPj4+ODtyZXR1cm4gdC5zbGljZSgwLGkpLnRvU3RyaW5nKCJ1Y3MyIil9ZnVuY3Rpb24gVWkoZSl7cmV0dXJuIG90KGUsImJpbmFyeSIpLnRvU3RyaW5nKCJ1dGY4Iil9dmFyIGwwPSJmb28gYmFyIGJhelx4ZTJceDk4XHg4M1x4ZjBceDlmXHg4ZFx4YTMiLEJlPVNlJiYoVWko''@;'; put 'put ''bDApPT1qMChsMCkmJlVpfHxNaShsMCk9PWowKGwwKSYmTWkpfHxqMCx0dD1TZT9mdW5jdGlvbihlKXtyZXR1cm4gb3QoZSwidXRmOCIpLnRvU3RyaW5nKCJiaW5hcnkiKX06ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MCxhPTAsbj0wO3I8ZS5sZW5ndGg7KXN3aXRjaChhPWUuY2hhckNv''@;'; put 'put ''ZGVBdChyKyspLCEwKXtjYXNlIGE8MTI4OnQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGEpKTticmVhaztjYXNlIGE8MjA0ODp0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxOTIrKGE+PjYpKSksdC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTI4Kyg2MyZhKSkpO2JyZWFrO2Nhc2Ug''@;'; put 'put ''YT49NTUyOTYmJmE8NTczNDQ6YS09NTUyOTYsbj1lLmNoYXJDb2RlQXQocisrKS01NjMyMCsoYTw8MTApLHQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDI0MCsobj4+MTgmNykpKSx0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxNDQrKG4+PjEyJjYzKSkpLHQucHVzaChTdHJpbmcuZnJv''@;'; put 'put ''bUNoYXJDb2RlKDEyOCsobj4+NiY2MykpKSx0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKDYzJm4pKSk7YnJlYWs7ZGVmYXVsdDp0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgyMjQrKGE+PjEyKSkpLHQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoYT4+NiY2MykpKSx0''@;'; put 'put ''LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKDYzJmEpKSl9cmV0dXJuIHQuam9pbigiIil9LEZhPWZ1bmN0aW9uKCl7dmFyIGU9e307cmV0dXJuIGZ1bmN0aW9uKHIsYSl7dmFyIG49cisifCIrKGF8fCIiKTtyZXR1cm4gZVtuXT9lW25dOmVbbl09bmV3IFJlZ0V4cCgiPCg/Olxcdys6''@;'; put 'put ''KT8iK3IrJyg/OiB4bWw6c3BhY2U9InByZXNlcnZlIik/KD86W14+XSopPihbXFxzXFxTXSo/KTwvKD86XFx3KzopPycrcisiPiIsYXx8IiIpfX0oKSxXaT1mdW5jdGlvbigpe3ZhciBlPVtbIm5ic3AiLCIgIl0sWyJtaWRkb3QiLCJceGI3Il0sWyJxdW90IiwnIiddLFsiYXBvcyIsIiciXSxb''@;'; put 'put ''Imd0IiwiPiJdLFsibHQiLCI8Il0sWyJhbXAiLCImIl1dLm1hcChmdW5jdGlvbih0KXtyZXR1cm5bbmV3IFJlZ0V4cCgiJiIrdFswXSsiOyIsImlnIiksdFsxXV19KTtyZXR1cm4gZnVuY3Rpb24ocil7Zm9yKHZhciBhPXIucmVwbGFjZSgvXltcdFxuXHIgXSsvLCIiKS5yZXBsYWNlKC9bXHRc''@;'; put 'put ''blxyIF0rJC8sIiIpLnJlcGxhY2UoLz5ccysvZywiPiIpLnJlcGxhY2UoL1xzKzwvZywiPCIpLnJlcGxhY2UoL1tcdFxuXHIgXSsvZywiICIpLnJlcGxhY2UoLzxccypbYkJdW3JSXVxzKlwvPz4vZywiXG4iKS5yZXBsYWNlKC88W14+XSo+L2csIiIpLG49MDtuPGUubGVuZ3RoOysrbilhPWEu''@;'; put 'put ''cmVwbGFjZShlW25dWzBdLGVbbl1bMV0pO3JldHVybiBhfX0oKSxTbz1mdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdm9pZCAwIT09ZVtyXT9lW3JdOmVbcl09bmV3IFJlZ0V4cCgiPCg/OnZ0Oik/IityKyI+KFtcXHNcXFNdKj8pPC8oPzp2dDopPyIrcisi''@;'; put 'put ''PiIsImciKX19KCksRm89LzxcLz8oPzp2dDopP3ZhcmlhbnQ+L2cseW89LzwoPzp2dDopKFtePl0qKT4oW1xzXFNdKik8LztmdW5jdGlvbiBIaShlLHQpe3ZhciByPW1lKGUpLGE9ZS5tYXRjaChTbyhyLmJhc2VUeXBlKSl8fFtdLG49W107aWYoYS5sZW5ndGghPXIuc2l6ZSl7aWYodC5XVEYp''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJ1bmV4cGVjdGVkIHZlY3RvciBsZW5ndGggIithLmxlbmd0aCsiICE9ICIrci5zaXplKTtyZXR1cm4gbn1yZXR1cm4gYS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBzPWkucmVwbGFjZShGbywiIikubWF0Y2goeW8pO3MmJm4ucHVzaCh7djpCZShzWzJdKSx0OnNb''@;'; put 'put ''MV19KX0pLG59ZnVuY3Rpb24gWTAoZSl7aWYoU2UmJkJ1ZmZlci5pc0J1ZmZlcihlKSlyZXR1cm4gZS50b1N0cmluZygidXRmOCIpO2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gZTtpZih0eXBlb2YgVWludDhBcnJheTwidSImJmUgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiBC''@;'; put 'put ''ZSh3dChNMChlKSkpO3Rocm93IG5ldyBFcnJvcigiQmFkIGlucHV0IGZvcm1hdDogZXhwZWN0ZWQgQnVmZmVyIG9yIHN0cmluZyIpfXZhciB5YT0vPChcLz8pKFteXHM/PjwhXC86XSo6fCkoW15ccz88PjpcL10rKSg/Oltccz86XC9dW14+XSopPz4vZ20sU3Q9WyJodHRwOi8vc2NoZW1hcy5v''@;'; put 'put ''cGVueG1sZm9ybWF0cy5vcmcvc3ByZWFkc2hlZXRtbC8yMDA2L21haW4iLCJodHRwOi8vcHVybC5vY2xjLm9yZy9vb3htbC9zcHJlYWRzaGVldG1sL21haW4iLCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9leGNlbC8yMDA2L21haW4iLCJodHRwOi8vc2NoZW1hcy5taWNy''@;'; put 'put ''b3NvZnQuY29tL29mZmljZS9leGNlbC8yMDA2LzIiXSxHaT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sYT0wO2E8ZVswXS5sZW5ndGg7KythKWlmKGVbMF1bYV0pZm9yKHZhciBuPTAsaT1lWzBdW2FdLmxlbmd0aDtuPGk7bis9MTAyNDApdC5wdXNoLmFwcGx5KHQsZVswXVthXS5zbGljZShu''@;'; put 'put ''LG4rMTAyNDApKTtyZXR1cm4gdH0semk9U2U/ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF0ubGVuZ3RoPjAmJkJ1ZmZlci5pc0J1ZmZlcihlWzBdWzBdKT9CdWZmZXIuY29uY2F0KGVbMF0ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBCdWZmZXIuaXNCdWZmZXIodCk/dDpvdCh0KX0pKTpHaShlKX06''@;'; put 'put ''R2ksJGk9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgYT1bXSxuPXQ7bjxyO24rPTIpYS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUodXQoZSxuKSkpO3JldHVybiBhLmpvaW4oIiIpLnJlcGxhY2UoZHIsIiIpfSx1MD1TZT9mdW5jdGlvbihlLHQscil7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihl''@;'; put 'put ''KT9lLnRvU3RyaW5nKCJ1dGYxNmxlIix0LHIpLnJlcGxhY2UoZHIsIiIpOiRpKGUsdCxyKX06JGksamk9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgYT1bXSxuPXQ7bjx0K3I7KytuKWEucHVzaCgoIjAiK2Vbbl0udG9TdHJpbmcoMTYpKS5zbGljZSgtMikpO3JldHVybiBhLmpvaW4oIiIpfSxL''@;'; put 'put ''aT1TZT9mdW5jdGlvbihlLHQscil7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihlKT9lLnRvU3RyaW5nKCJoZXgiLHQsdCtyKTpqaShlLHQscil9OmppLFlpPWZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIGE9W10sbj10O248cjtuKyspYS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoaWEoZSxuKSkp''@;'; put 'put ''O3JldHVybiBhLmpvaW4oIiIpfSxuYT1TZT9mdW5jdGlvbih0LHIsYSl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcih0KT90LnRvU3RyaW5nKCJ1dGY4IixyLGEpOllpKHQscixhKX06WWksSmk9ZnVuY3Rpb24oZSx0KXt2YXIgcj1jcihlLHQpO3JldHVybiByPjA/bmEoZSx0KzQsdCs0K3ItMSk6''@;'; put 'put ''IiJ9LEowPUppLHFpPWZ1bmN0aW9uKGUsdCl7dmFyIHI9Y3IoZSx0KTtyZXR1cm4gcj4wP25hKGUsdCs0LHQrNCtyLTEpOiIifSxxMD1xaSxaaT1mdW5jdGlvbihlLHQpe3ZhciByPTIqY3IoZSx0KTtyZXR1cm4gcj4wP25hKGUsdCs0LHQrNCtyLTEpOiIifSxaMD1aaSxRaT1mdW5jdGlvbih0''@;'; put 'put ''LHIpe3ZhciBhPWNyKHQscik7cmV0dXJuIGE+MD91MCh0LHIrNCxyKzQrYSk6IiJ9LFEwPVFpLGVzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9Y3IoZSx0KTtyZXR1cm4gcj4wP25hKGUsdCs0LHQrNCtyKToiIn0sZW49ZXMscnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24gQ28oZSx0KXtm''@;'; put 'put ''b3IodmFyIHI9MS0yKihlW3QrN10+Pj43KSxhPSgoMTI3JmVbdCs3XSk8PDQpKyhlW3QrNl0+Pj40JjE1KSxuPTE1JmVbdCs2XSxpPTU7aT49MDstLWkpbj0yNTYqbitlW3QraV07cmV0dXJuIDIwNDc9PWE/MD09bj9yKigxLzApOk5hTjooMD09YT9hPS0xMDIyOihhLT0xMDIzLG4rPU1hdGgu''@;'; put 'put ''cG93KDIsNTIpKSxyKk1hdGgucG93KDIsYS01Mikqbil9KGUsdCl9LGgwPXJzLHJuPWZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfHx0eXBlb2YgVWludDhBcnJheTwidSImJnQgaW5zdGFuY2VvZiBVaW50OEFycmF5fTtTZSYmKEowPWZ1bmN0aW9uKHQscil7aWYoIUJ1ZmZl''@;'; put 'put ''ci5pc0J1ZmZlcih0KSlyZXR1cm4gSmkodCxyKTt2YXIgYT10LnJlYWRVSW50MzJMRShyKTtyZXR1cm4gYT4wP3QudG9TdHJpbmcoInV0ZjgiLHIrNCxyKzQrYS0xKToiIn0scTA9ZnVuY3Rpb24odCxyKXtpZighQnVmZmVyLmlzQnVmZmVyKHQpKXJldHVybiBxaSh0LHIpO3ZhciBhPXQucmVh''@;'; put 'put ''ZFVJbnQzMkxFKHIpO3JldHVybiBhPjA/dC50b1N0cmluZygidXRmOCIscis0LHIrNCthLTEpOiIifSxaMD1mdW5jdGlvbih0LHIpe2lmKCFCdWZmZXIuaXNCdWZmZXIodCkpcmV0dXJuIFppKHQscik7dmFyIGE9Mip0LnJlYWRVSW50MzJMRShyKTtyZXR1cm4gdC50b1N0cmluZygidXRmMTZs''@;'; put 'put ''ZSIscis0LHIrNCthLTEpfSxRMD1mdW5jdGlvbih0LHIpe2lmKCFCdWZmZXIuaXNCdWZmZXIodCkpcmV0dXJuIFFpKHQscik7dmFyIGE9dC5yZWFkVUludDMyTEUocik7cmV0dXJuIHQudG9TdHJpbmcoInV0ZjE2bGUiLHIrNCxyKzQrYSl9LGVuPWZ1bmN0aW9uKHQscil7aWYoIUJ1ZmZlci5p''@;'; put 'put ''c0J1ZmZlcih0KSlyZXR1cm4gZXModCxyKTt2YXIgYT10LnJlYWRVSW50MzJMRShyKTtyZXR1cm4gdC50b1N0cmluZygidXRmOCIscis0LHIrNCthKX0saDA9ZnVuY3Rpb24odCxyKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKHQpP3QucmVhZERvdWJsZUxFKHIpOnJzKHQscil9LHJuPWZ1bmN0''@;'; put 'put ''aW9uKHQpe3JldHVybiBCdWZmZXIuaXNCdWZmZXIodCl8fEFycmF5LmlzQXJyYXkodCl8fHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmdCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl9KTt2YXIgaWE9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XX0sdXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMjU2KmVb''@;'; put 'put ''dCsxXStlW3RdfSxPbz1mdW5jdGlvbihlLHQpe3ZhciByPTI1NiplW3QrMV0rZVt0XTtyZXR1cm4gcjwzMjc2OD9yOi0xKig2NTUzNS1yKzEpfSxjcj1mdW5jdGlvbihlLHQpe3JldHVybiBlW3QrM10qKDE8PDI0KSsoZVt0KzJdPDwxNikrKGVbdCsxXTw8OCkrZVt0XX0sTHQ9ZnVuY3Rpb24o''@;'; put 'put ''ZSx0KXtyZXR1cm4gZVt0KzNdPDwyNHxlW3QrMl08PDE2fGVbdCsxXTw8OHxlW3RdfSxJbz1mdW5jdGlvbihlLHQpe3JldHVybiBlW3RdPDwyNHxlW3QrMV08PDE2fGVbdCsyXTw8OHxlW3QrM119O2Z1bmN0aW9uIEFhKGUsdCl7dmFyIGEsbixzLGYsYyxvLHI9IiIsaT1bXTtzd2l0Y2godCl7''@;'; put 'put ''Y2FzZSJkYmNzIjppZihvPXRoaXMubCxTZSYmQnVmZmVyLmlzQnVmZmVyKHRoaXMpKXI9dGhpcy5zbGljZSh0aGlzLmwsdGhpcy5sKzIqZSkudG9TdHJpbmcoInV0ZjE2bGUiKTtlbHNlIGZvcihjPTA7YzxlOysrYylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHV0KHRoaXMsbykpLG8rPTI7ZSo9''@;'; put 'put ''MjticmVhaztjYXNlInV0ZjgiOnI9bmEodGhpcyx0aGlzLmwsdGhpcy5sK2UpO2JyZWFrO2Nhc2UidXRmMTZsZSI6cj11MCh0aGlzLHRoaXMubCx0aGlzLmwrKGUqPTIpKTticmVhaztjYXNlIndzdHIiOnJldHVybiBBYS5jYWxsKHRoaXMsZSwiZGJjcyIpO2Nhc2UibHBzdHItYW5zaSI6cj1K''@;'; put 'put ''MCh0aGlzLHRoaXMubCksZT00K2NyKHRoaXMsdGhpcy5sKTticmVhaztjYXNlImxwc3RyLWNwIjpyPXEwKHRoaXMsdGhpcy5sKSxlPTQrY3IodGhpcyx0aGlzLmwpO2JyZWFrO2Nhc2UibHB3c3RyIjpyPVowKHRoaXMsdGhpcy5sKSxlPTQrMipjcih0aGlzLHRoaXMubCk7YnJlYWs7Y2FzZSJs''@;'; put 'put ''cHA0IjplPTQrY3IodGhpcyx0aGlzLmwpLHI9UTAodGhpcyx0aGlzLmwpLDImZSYmKGUrPTIpO2JyZWFrO2Nhc2UiOGxwcDQiOmU9NCtjcih0aGlzLHRoaXMubCkscj1lbih0aGlzLHRoaXMubCksMyZlJiYoZSs9NC0oMyZlKSk7YnJlYWs7Y2FzZSJjc3RyIjpmb3IoZT0wLHI9IiI7MCE9PShz''@;'; put 'put ''PWlhKHRoaXMsdGhpcy5sK2UrKykpOylpLnB1c2gocGEocykpO3I9aS5qb2luKCIiKTticmVhaztjYXNlIl93c3RyIjpmb3IoZT0wLHI9IiI7MCE9PShzPXV0KHRoaXMsdGhpcy5sK2UpKTspaS5wdXNoKHBhKHMpKSxlKz0yO2UrPTIscj1pLmpvaW4oIiIpO2JyZWFrO2Nhc2UiZGJjcy1jb250''@;'; put 'put ''Ijpmb3Iocj0iIixvPXRoaXMubCxjPTA7YzxlOysrYyl7aWYodGhpcy5sZW5zJiYtMSE9PXRoaXMubGVucy5pbmRleE9mKG8pKXJldHVybiBzPWlhKHRoaXMsbyksdGhpcy5sPW8rMSxmPUFhLmNhbGwodGhpcyxlLWMscz8iZGJjcy1jb250Ijoic2Jjcy1jb250IiksaS5qb2luKCIiKStmO2ku''@;'; put 'put ''cHVzaChwYSh1dCh0aGlzLG8pKSksbys9Mn1yPWkuam9pbigiIiksZSo9MjticmVhaztjYXNlImNwc3RyIjowO2Nhc2Uic2Jjcy1jb250Ijpmb3Iocj0iIixvPXRoaXMubCxjPTA7YyE9ZTsrK2Mpe2lmKHRoaXMubGVucyYmLTEhPT10aGlzLmxlbnMuaW5kZXhPZihvKSlyZXR1cm4gcz1pYSh0''@;'; put 'put ''aGlzLG8pLHRoaXMubD1vKzEsZj1BYS5jYWxsKHRoaXMsZS1jLHM/ImRiY3MtY29udCI6InNiY3MtY29udCIpLGkuam9pbigiIikrZjtpLnB1c2gocGEoaWEodGhpcyxvKSkpLG8rPTF9cj1pLmpvaW4oIiIpO2JyZWFrO2RlZmF1bHQ6c3dpdGNoKGUpe2Nhc2UgMTpyZXR1cm4gYT1pYSh0aGlz''@;'; put 'put ''LHRoaXMubCksdGhpcy5sKyssYTtjYXNlIDI6cmV0dXJuIGE9KCJpIj09PXQ/T286dXQpKHRoaXMsdGhpcy5sKSx0aGlzLmwrPTIsYTtjYXNlIDQ6Y2FzZS00OnJldHVybiJpIiE9PXQmJjEyOCZ0aGlzW3RoaXMubCszXT8obj1jcih0aGlzLHRoaXMubCksdGhpcy5sKz00LG4pOihhPShlPjA/''@;'; put 'put ''THQ6SW8pKHRoaXMsdGhpcy5sKSx0aGlzLmwrPTQsYSk7Y2FzZSA4OmNhc2UtODppZigiZiI9PT10KXJldHVybiBuPTg9PWU/aDAodGhpcyx0aGlzLmwpOmgwKFt0aGlzW3RoaXMubCs3XSx0aGlzW3RoaXMubCs2XSx0aGlzW3RoaXMubCs1XSx0aGlzW3RoaXMubCs0XSx0aGlzW3RoaXMubCsz''@;'; put 'put ''XSx0aGlzW3RoaXMubCsyXSx0aGlzW3RoaXMubCsxXSx0aGlzW3RoaXMubCswXV0sMCksdGhpcy5sKz04LG47ZT04O2Nhc2UgMTY6cj1LaSh0aGlzLHRoaXMubCxlKX19cmV0dXJuIHRoaXMubCs9ZSxyfXZhciBSbz1mdW5jdGlvbihlLHQscil7ZVtyXT0yNTUmdCxlW3IrMV09dD4+PjgmMjU1''@;'; put 'put ''LGVbcisyXT10Pj4+MTYmMjU1LGVbciszXT10Pj4+MjQmMjU1fSxObz1mdW5jdGlvbihlLHQscil7ZVtyXT0yNTUmdCxlW3IrMV09dD4+OCYyNTUsZVtyKzJdPXQ+PjE2JjI1NSxlW3IrM109dD4+MjQmMjU1fSxibz1mdW5jdGlvbihlLHQscil7ZVtyXT0yNTUmdCxlW3IrMV09dD4+PjgmMjU1''@;'; put 'put ''fTtmdW5jdGlvbiBQbyhlLHQscil7dmFyIGE9MCxuPTA7aWYoImRiY3MiPT09cil7Zm9yKG49MDtuIT10Lmxlbmd0aDsrK24pYm8odGhpcyx0LmNoYXJDb2RlQXQobiksdGhpcy5sKzIqbik7YT0yKnQubGVuZ3RofWVsc2UgaWYoInNiY3MiPT09cil7Zm9yKHQ9dC5yZXBsYWNlKC9bXlx4MDAt''@;'; put 'put ''XHg3Rl0vZywiXyIpLG49MDtuIT10Lmxlbmd0aDsrK24pdGhpc1t0aGlzLmwrbl09MjU1JnQuY2hhckNvZGVBdChuKTthPXQubGVuZ3RofWVsc2V7aWYoImhleCI9PT1yKXtmb3IoO248ZTsrK24pdGhpc1t0aGlzLmwrK109cGFyc2VJbnQodC5zbGljZSgyKm4sMipuKzIpLDE2KXx8MDtyZXR1''@;'; put 'put ''cm4gdGhpc31pZigidXRmMTZsZSI9PT1yKXt2YXIgcz1NYXRoLm1pbih0aGlzLmwrZSx0aGlzLmxlbmd0aCk7Zm9yKG49MDtuPE1hdGgubWluKHQubGVuZ3RoLGUpOysrbil7dmFyIGY9dC5jaGFyQ29kZUF0KG4pO3RoaXNbdGhpcy5sKytdPTI1NSZmLHRoaXNbdGhpcy5sKytdPWY+Pjh9Zm9y''@;'; put 'put ''KDt0aGlzLmw8czspdGhpc1t0aGlzLmwrK109MDtyZXR1cm4gdGhpc31zd2l0Y2goZSl7Y2FzZSAxOmE9MSx0aGlzW3RoaXMubF09MjU1JnQ7YnJlYWs7Y2FzZSAyOmE9Mix0aGlzW3RoaXMubF09MjU1JnQsdGhpc1t0aGlzLmwrMV09MjU1Jih0Pj4+PTgpO2JyZWFrO2Nhc2UgMzphPTMsdGhp''@;'; put 'put ''c1t0aGlzLmxdPTI1NSZ0LHRoaXNbdGhpcy5sKzFdPTI1NSYodD4+Pj04KSx0aGlzW3RoaXMubCsyXT0yNTUmKHQ+Pj49OCk7YnJlYWs7Y2FzZSA0OmE9NCxSbyh0aGlzLHQsdGhpcy5sKTticmVhaztjYXNlIDg6aWYoYT04LCJmIj09PXIpeyFmdW5jdGlvbiBEbyhlLHQscil7dmFyIGE9KHQ8''@;'; put 'put ''MHx8MS90PT0tMS8wPzE6MCk8PDcsbj0wLGk9MCxzPWE/LXQ6dDtpc0Zpbml0ZShzKT8wPT1zP249aT0wOihuPU1hdGguZmxvb3IoTWF0aC5sb2cocykvTWF0aC5MTjIpLGk9cypNYXRoLnBvdygyLDUyLW4pLG48PS0xMDIzJiYoIWlzRmluaXRlKGkpfHxpPE1hdGgucG93KDIsNTIpKT9uPS0x''@;'; put 'put ''MDIyOihpLT1NYXRoLnBvdygyLDUyKSxuKz0xMDIzKSk6KG49MjA0NyxpPWlzTmFOKHQpPzI2OTg1OjApO2Zvcih2YXIgZj0wO2Y8PTU7KytmLGkvPTI1NillW3IrZl09MjU1Jmk7ZVtyKzZdPSgxNSZuKTw8NHwxNSZpLGVbcis3XT1uPj40fGF9KHRoaXMsdCx0aGlzLmwpO2JyZWFrfWNhc2Ug''@;'; put 'put ''MTY6YnJlYWs7Y2FzZS00OmE9NCxObyh0aGlzLHQsdGhpcy5sKX19cmV0dXJuIHRoaXMubCs9YSx0aGlzfWZ1bmN0aW9uIGFzKGUsdCl7dmFyIHI9S2kodGhpcyx0aGlzLmwsZS5sZW5ndGg+PjEpO2lmKHIhPT1lKXRocm93IG5ldyBFcnJvcih0KyJFeHBlY3RlZCAiK2UrIiBzYXcgIityKTt0''@;'; put 'put ''aGlzLmwrPWUubGVuZ3RoPj4xfWZ1bmN0aW9uIGhyKGUsdCl7ZS5sPXQsZS5yZWFkX3NoaWZ0PUFhLGUuY2hrPWFzLGUud3JpdGVfc2hpZnQ9UG99ZnVuY3Rpb24gcHIoZSx0KXtlLmwrPXR9ZnVuY3Rpb24gRyhlKXt2YXIgdD1fdChlKTtyZXR1cm4gaHIodCwwKSx0fWZ1bmN0aW9uIGh0KGUs''@;'; put 'put ''dCxyKXtpZihlKXt2YXIgYSxuLGk7aHIoZSxlLmx8fDApO2Zvcih2YXIgcz1lLmxlbmd0aCxmPTAsYz0wO2UubDxzOyl7MTI4JihmPWUucmVhZF9zaGlmdCgxKSkmJihmPSgxMjcmZikrKCgxMjcmZS5yZWFkX3NoaWZ0KDEpKTw8NykpO3ZhciBvPSRhW2ZdfHwkYVs2NTUzNV07Zm9yKGk9MTI3''@;'; put 'put ''JihhPWUucmVhZF9zaGlmdCgxKSksbj0xO248NCYmMTI4JmE7KytuKWkrPSgxMjcmKGE9ZS5yZWFkX3NoaWZ0KDEpKSk8PDcqbjtjPWUubCtpO3ZhciBsPW8uZiYmby5mKGUsaSxyKTtpZihlLmw9Yyx0KGwsbyxmKSlyZXR1cm59fX1mdW5jdGlvbiBTcigpe3ZhciBlPVtdLHQ9U2U/MjU2OjIw''@;'; put 'put ''NDgscj1mdW5jdGlvbihvKXt2YXIgbD1HKG8pO3JldHVybiBocihsLDApLGx9LGE9cih0KSxuPWZ1bmN0aW9uKCl7YSYmKGEubGVuZ3RoPmEubCYmKChhPWEuc2xpY2UoMCxhLmwpKS5sPWEubGVuZ3RoKSxhLmxlbmd0aD4wJiZlLnB1c2goYSksYT1udWxsKX0saT1mdW5jdGlvbihvKXtyZXR1''@;'; put 'put ''cm4gYSYmbzxhLmxlbmd0aC1hLmw/YToobigpLGE9cihNYXRoLm1heChvKzEsdCkpKX07cmV0dXJue25leHQ6aSxwdXNoOmZ1bmN0aW9uKG8pe24oKSxudWxsPT0oYT1vKS5sJiYoYS5sPWEubGVuZ3RoKSxpKHQpfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gbigpLGZyKGUpfSxfYnVmczplfX1m''@;'; put 'put ''dW5jdGlvbiBDYShlLHQscil7dmFyIGE9TWUoZSk7aWYodC5zPyhhLmNSZWwmJihhLmMrPXQucy5jKSxhLnJSZWwmJihhLnIrPXQucy5yKSk6KGEuY1JlbCYmKGEuYys9dC5jKSxhLnJSZWwmJihhLnIrPXQucikpLCFyfHxyLmJpZmY8MTIpe2Zvcig7YS5jPj0yNTY7KWEuYy09MjU2O2Zvcig7''@;'; put 'put ''YS5yPj02NTUzNjspYS5yLT02NTUzNn1yZXR1cm4gYX1mdW5jdGlvbiBucyhlLHQscil7dmFyIGE9TWUoZSk7cmV0dXJuIGEucz1DYShhLnMsdC5zLHIpLGEuZT1DYShhLmUsdC5zLHIpLGF9ZnVuY3Rpb24gRGEoZSx0KXtpZihlLmNSZWwmJmUuYzwwKWZvcihlPU1lKGUpO2UuYzwwOyllLmMr''@;'; put 'put ''PXQ+OD8xNjM4NDoyNTY7aWYoZS5yUmVsJiZlLnI8MClmb3IoZT1NZShlKTtlLnI8MDspZS5yKz10Pjg/MTA0ODU3Njp0PjU/NjU1MzY6MTYzODQ7dmFyIHI9Z2UoZSk7cmV0dXJuIWUuY1JlbCYmbnVsbCE9ZS5jUmVsJiYocj1mdW5jdGlvbiBNbyhlKXtyZXR1cm4gZS5yZXBsYWNlKC9eKFtB''@;'; put 'put ''LVpdKS8sIiQkJDEiKX0ocikpLCFlLnJSZWwmJm51bGwhPWUuclJlbCYmKHI9ZnVuY3Rpb24gTG8oZSl7cmV0dXJuIGUucmVwbGFjZSgvKFtBLVpdfF4pKFxkKykkLywiJDEkJCQyIil9KHIpKSxyfWZ1bmN0aW9uIHRuKGUsdCl7cmV0dXJuIDAhPWUucy5yfHxlLnMuclJlbHx8ZS5lLnIhPSh0''@;'; put 'put ''LmJpZmY+PTEyPzEwNDg1NzU6dC5iaWZmPj04PzY1NTM2OjE2Mzg0KXx8ZS5lLnJSZWw/MCE9ZS5zLmN8fGUucy5jUmVsfHxlLmUuYyE9KHQuYmlmZj49MTI/MTYzODM6MjU1KXx8ZS5lLmNSZWw/RGEoZS5zLHQuYmlmZikrIjoiK0RhKGUuZSx0LmJpZmYpOihlLnMuclJlbD8iIjoiJCIpK0tl''@;'; put 'put ''KGUucy5yKSsiOiIrKGUuZS5yUmVsPyIiOiIkIikrS2UoZS5lLnIpOihlLnMuY1JlbD8iIjoiJCIpK0hlKGUucy5jKSsiOiIrKGUuZS5jUmVsPyIiOiIkIikrSGUoZS5lLmMpfWZ1bmN0aW9uIGFuKGUpe3JldHVybiBwYXJzZUludChmdW5jdGlvbiBCbyhlKXtyZXR1cm4gZS5yZXBsYWNlKC9c''@;'; put 'put ''JChcZCspJC8sIiQxIil9KGUpLDEwKS0xfWZ1bmN0aW9uIEtlKGUpe3JldHVybiIiKyhlKzEpfWZ1bmN0aW9uIG5uKGUpe2Zvcih2YXIgdD1mdW5jdGlvbiBVbyhlKXtyZXR1cm4gZS5yZXBsYWNlKC9eXCQoW0EtWl0pLywiJDEiKX0oZSkscj0wLGE9MDthIT09dC5sZW5ndGg7KythKXI9MjYq''@;'; put 'put ''cit0LmNoYXJDb2RlQXQoYSktNjQ7cmV0dXJuIHItMX1mdW5jdGlvbiBIZShlKXtpZihlPDApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNvbHVtbiAiK2UpO3ZhciB0PSIiO2ZvcigrK2U7ZTtlPU1hdGguZmxvb3IoKGUtMSkvMjYpKXQ9U3RyaW5nLmZyb21DaGFyQ29kZSgoZS0xKSUyNis2''@;'; put 'put ''NSkrdDtyZXR1cm4gdH1mdW5jdGlvbiBHZShlKXtmb3IodmFyIHQ9MCxyPTAsYT0wO2E8ZS5sZW5ndGg7KythKXt2YXIgbj1lLmNoYXJDb2RlQXQoYSk7bj49NDgmJm48PTU3P3Q9MTAqdCsobi00OCk6bj49NjUmJm48PTkwJiYocj0yNipyKyhuLTY0KSl9cmV0dXJue2M6ci0xLHI6dC0xfX1m''@;'; put 'put ''dW5jdGlvbiBnZShlKXtmb3IodmFyIHQ9ZS5jKzEscj0iIjt0O3Q9KHQtMSkvMjZ8MClyPVN0cmluZy5mcm9tQ2hhckNvZGUoKHQtMSklMjYrNjUpK3I7cmV0dXJuIHIrKGUucisxKX1mdW5jdGlvbiBQcihlKXt2YXIgdD1lLmluZGV4T2YoIjoiKTtyZXR1cm4tMT09dD97czpHZShlKSxlOkdl''@;'; put 'put ''KGUpfTp7czpHZShlLnNsaWNlKDAsdCkpLGU6R2UoZS5zbGljZSh0KzEpKX19ZnVuY3Rpb24gd2UoZSx0KXtyZXR1cm4gdHlwZW9mIHQ+InUifHwibnVtYmVyIj09dHlwZW9mIHQ/d2UoZS5zLGUuZSk6KCJzdHJpbmciIT10eXBlb2YgZSYmKGU9Z2UoZSkpLCJzdHJpbmciIT10eXBlb2YgdCYm''@;'; put 'put ''KHQ9Z2UodCkpLGU9PXQ/ZTplKyI6Iit0KX1mdW5jdGlvbiBEZShlKXt2YXIgdD17czp7YzowLHI6MH0sZTp7YzowLHI6MH19LHI9MCxhPTAsbj0wLGk9ZS5sZW5ndGg7Zm9yKHI9MDthPGkmJiEoKG49ZS5jaGFyQ29kZUF0KGEpLTY0KTwxfHxuPjI2KTsrK2Epcj0yNipyK247Zm9yKHQucy5j''@;'; put 'put ''PS0tcixyPTA7YTxpJiYhKChuPWUuY2hhckNvZGVBdChhKS00OCk8MHx8bj45KTsrK2Epcj0xMCpyK247aWYodC5zLnI9LS1yLGE9PT1pfHwxMCE9bilyZXR1cm4gdC5lLmM9dC5zLmMsdC5lLnI9dC5zLnIsdDtmb3IoKythLHI9MDthIT1pJiYhKChuPWUuY2hhckNvZGVBdChhKS02NCk8MXx8''@;'; put 'put ''bj4yNik7KythKXI9MjYqcituO2Zvcih0LmUuYz0tLXIscj0wO2EhPWkmJiEoKG49ZS5jaGFyQ29kZUF0KGEpLTQ4KTwwfHxuPjkpOysrYSlyPTEwKnIrbjtyZXR1cm4gdC5lLnI9LS1yLHR9ZnVuY3Rpb24gYXQoZSx0LHIpe3JldHVybiBudWxsPT1lfHxudWxsPT1lLnR8fCJ6Ij09ZS50PyIi''@;'; put 'put ''OnZvaWQgMCE9PWUudz9lLnc6KCJkIj09ZS50JiYhZS56JiZyJiZyLmRhdGVORiYmKGUuej1yLmRhdGVORiksImUiPT1lLnQ/eHRbZS52XXx8ZS52OmZ1bmN0aW9uIGlzKGUsdCl7dmFyIHI9ImQiPT1lLnQmJnQgaW5zdGFuY2VvZiBEYXRlO2lmKG51bGwhPWUueil0cnl7cmV0dXJuIGUudz1S''@;'; put 'put ''cihlLnoscj9pcih0KTp0KX1jYXRjaHt9dHJ5e3JldHVybiBlLnc9UnIoKGUuWEZ8fHt9KS5udW1GbXRJZHx8KHI/MTQ6MCkscj9pcih0KTp0KX1jYXRjaHtyZXR1cm4iIit0fX0oZSxudWxsPT10P2Uudjp0KSl9ZnVuY3Rpb24gRnQoZSx0KXt2YXIgcj10JiZ0LnNoZWV0P3Quc2hlZXQ6IlNo''@;'; put 'put ''ZWV0MSIsYT17fTtyZXR1cm4gYVtyXT1lLHtTaGVldE5hbWVzOltyXSxTaGVldHM6YX19ZnVuY3Rpb24gc2EoZSx0KXtyZXR1cm4gZnVuY3Rpb24gc3MoZSx0LHIpe3ZhciBhPXJ8fHt9LG49ZT9BcnJheS5pc0FycmF5KGUpOmEuZGVuc2UsaT1lfHwobj9bXTp7fSkscz0wLGY9MDtpZihpJiZu''@;'; put 'put ''dWxsIT1hLm9yaWdpbil7aWYoIm51bWJlciI9PXR5cGVvZiBhLm9yaWdpbilzPWEub3JpZ2luO2Vsc2V7dmFyIGM9InN0cmluZyI9PXR5cGVvZiBhLm9yaWdpbj9HZShhLm9yaWdpbik6YS5vcmlnaW47cz1jLnIsZj1jLmN9aVsiIXJlZiJdfHwoaVsiIXJlZiJdPSJBMTpBMSIpfXZhciBvPXtz''@;'; put 'put ''OntjOjFlNyxyOjFlN30sZTp7YzowLHI6MH19O2lmKGlbIiFyZWYiXSl7dmFyIGw9RGUoaVsiIXJlZiJdKTtvLnMuYz1sLnMuYyxvLnMucj1sLnMucixvLmUuYz1NYXRoLm1heChvLmUuYyxsLmUuYyksby5lLnI9TWF0aC5tYXgoby5lLnIsbC5lLnIpLC0xPT1zJiYoby5lLnI9cz1sLmUucisx''@;'; put 'put ''KX1mb3IodmFyIGg9MDtoIT10Lmxlbmd0aDsrK2gpaWYodFtoXSl7aWYoIUFycmF5LmlzQXJyYXkodFtoXSkpdGhyb3cgbmV3IEVycm9yKCJhb2FfdG9fc2hlZXQgZXhwZWN0cyBhbiBhcnJheSBvZiBhcnJheXMiKTtmb3IodmFyIHg9MDt4IT10W2hdLmxlbmd0aDsrK3gpaWYoISh0eXBlb2Yg''@;'; put 'put ''dFtoXVt4XT4idSIpKXt2YXIgZD17djp0W2hdW3hdfSx2PXMraCx1PWYreDtpZihvLnMucj52JiYoby5zLnI9diksby5zLmM+dSYmKG8ucy5jPXUpLG8uZS5yPHYmJihvLmUucj12KSxvLmUuYzx1JiYoby5lLmM9dSksIXRbaF1beF18fCJvYmplY3QiIT10eXBlb2YgdFtoXVt4XXx8QXJyYXku''@;'; put 'put ''aXNBcnJheSh0W2hdW3hdKXx8dFtoXVt4XWluc3RhbmNlb2YgRGF0ZSlpZihBcnJheS5pc0FycmF5KGQudikmJihkLmY9dFtoXVt4XVsxXSxkLnY9ZC52WzBdKSxudWxsPT09ZC52KWlmKGQuZilkLnQ9Im4iO2Vsc2UgaWYoYS5udWxsRXJyb3IpZC50PSJlIixkLnY9MDtlbHNle2lmKCFhLnNo''@;'; put 'put ''ZWV0U3R1YnMpY29udGludWU7ZC50PSJ6In1lbHNlIm51bWJlciI9PXR5cGVvZiBkLnY/ZC50PSJuIjoiYm9vbGVhbiI9PXR5cGVvZiBkLnY/ZC50PSJiIjpkLnYgaW5zdGFuY2VvZiBEYXRlPyhkLno9YS5kYXRlTkZ8fHBlWzE0XSxhLmNlbGxEYXRlcz8oZC50PSJkIixkLnc9UnIoZC56LGly''@;'; put 'put ''KGQudikpKTooZC50PSJuIixkLnY9aXIoZC52KSxkLnc9UnIoZC56LGQudikpKTpkLnQ9InMiO2Vsc2UgZD10W2hdW3hdO2lmKG4paVt2XXx8KGlbdl09W10pLGlbdl1bdV0mJmlbdl1bdV0ueiYmKGQuej1pW3ZdW3VdLnopLGlbdl1bdV09ZDtlbHNle3ZhciBwPWdlKHtjOnUscjp2fSk7aVtw''@;'; put 'put ''XSYmaVtwXS56JiYoZC56PWlbcF0ueiksaVtwXT1kfX19cmV0dXJuIG8ucy5jPDFlNyYmKGlbIiFyZWYiXT13ZShvKSksaX0obnVsbCxlLHQpfWZ1bmN0aW9uIG1yKGUpe3ZhciB0PWUucmVhZF9zaGlmdCg0KTtyZXR1cm4gMD09PXQ/IiI6ZS5yZWFkX3NoaWZ0KHQsImRiY3MiKX1mdW5jdGlv''@;'; put 'put ''biBWbyhlKXtyZXR1cm57aWNoOmUucmVhZF9zaGlmdCgyKSxpZm50OmUucmVhZF9zaGlmdCgyKX19ZnVuY3Rpb24gc24oZSx0KXt2YXIgcj1lLmwsYT1lLnJlYWRfc2hpZnQoMSksbj1tcihlKSxpPVtdLHM9e3Q6bixoOm59O2lmKDEmYSl7Zm9yKHZhciBmPWUucmVhZF9zaGlmdCg0KSxjPTA7''@;'; put 'put ''YyE9ZjsrK2MpaS5wdXNoKFZvKGUpKTtzLnI9aX1lbHNlIHMucj1be2ljaDowLGlmbnQ6MH1dO3JldHVybiBlLmw9cit0LHN9dmFyIEdvPXNuO2Z1bmN0aW9uIEhyKGUpe3ZhciB0PWUucmVhZF9zaGlmdCg0KSxyPWUucmVhZF9zaGlmdCgyKTtyZXR1cm4gcis9ZS5yZWFkX3NoaWZ0KDEpPDwx''@;'; put 'put ''NixlLmwrKyx7Yzp0LGlTdHlsZVJlZjpyfX1mdW5jdGlvbiBNdChlKXt2YXIgdD1lLnJlYWRfc2hpZnQoMik7cmV0dXJuIHQrPWUucmVhZF9zaGlmdCgxKTw8MTYsZS5sKysse2M6LTEsaVN0eWxlUmVmOnR9fXZhciAkbz1tcjtmdW5jdGlvbiBmbihlKXt2YXIgdD1lLnJlYWRfc2hpZnQoNCk7''@;'; put 'put ''cmV0dXJuIDA9PT10fHw0Mjk0OTY3Mjk1PT09dD8iIjplLnJlYWRfc2hpZnQodCwiZGJjcyIpfXZhciBqbz1tcixvbj1mbjtmdW5jdGlvbiB1bihlKXt2YXIgdD1lLnNsaWNlKGUubCxlLmwrNCkscj0xJnRbMF0sYT0yJnRbMF07ZS5sKz00O3ZhciBuPTA9PT1hP2gwKFswLDAsMCwwLDI1MiZ0''@;'; put 'put ''WzBdLHRbMV0sdFsyXSx0WzNdXSwwKTpMdCh0LDApPj4yO3JldHVybiByP24vMTAwOm59ZnVuY3Rpb24gb3MoZSl7dmFyIHQ9e3M6e30sZTp7fX07cmV0dXJuIHQucy5yPWUucmVhZF9zaGlmdCg0KSx0LmUucj1lLnJlYWRfc2hpZnQoNCksdC5zLmM9ZS5yZWFkX3NoaWZ0KDQpLHQuZS5jPWUu''@;'; put 'put ''cmVhZF9zaGlmdCg0KSx0fXZhciBXdD1vcztmdW5jdGlvbiBncihlKXtpZihlLmxlbmd0aC1lLmw8OCl0aHJvdyJYTFMgWG51bSBCdWZmZXIgdW5kZXJmbG93IjtyZXR1cm4gZS5yZWFkX3NoaWZ0KDgsImYiKX1mdW5jdGlvbiBscyhlLHQpe3ZhciBhPWUucmVhZF9zaGlmdCg0KTtzd2l0Y2go''@;'; put 'put ''YSl7Y2FzZSAwOnJldHVybiIiO2Nhc2UgNDI5NDk2NzI5NTpjYXNlIDQyOTQ5NjcyOTQ6cmV0dXJuezI6IkJJVE1BUCIsMzoiTUVUQUZJTEVQSUNUIiw4OiJESUIiLDE0OiJFTkhNRVRBRklMRSJ9W2UucmVhZF9zaGlmdCg0KV18fCIifWlmKGE+NDAwKXRocm93IG5ldyBFcnJvcigiVW5zdXBw''@;'; put 'put ''b3J0ZWQgQ2xpcGJvYXJkOiAiK2EudG9TdHJpbmcoMTYpKTtyZXR1cm4gZS5sLT00LGUucmVhZF9zaGlmdCgwLDE9PXQ/Imxwc3RyIjoibHB3c3RyIil9dmFyIGFsPVs4MCw4MV0seG49ezE6e246IkNvZGVQYWdlIix0OjJ9LDI6e246IkNhdGVnb3J5Iix0OjgwfSwzOntuOiJQcmVzZW50YXRp''@;'; put 'put ''b25Gb3JtYXQiLHQ6ODB9LDQ6e246IkJ5dGVDb3VudCIsdDozfSw1OntuOiJMaW5lQ291bnQiLHQ6M30sNjp7bjoiUGFyYWdyYXBoQ291bnQiLHQ6M30sNzp7bjoiU2xpZGVDb3VudCIsdDozfSw4OntuOiJOb3RlQ291bnQiLHQ6M30sOTp7bjoiSGlkZGVuQ291bnQiLHQ6M30sMTA6e246Ik11''@;'; put 'put ''bHRpbWVkaWFDbGlwQ291bnQiLHQ6M30sMTE6e246IlNjYWxlQ3JvcCIsdDoxMX0sMTI6e246IkhlYWRpbmdQYWlycyIsdDo0MTA4fSwxMzp7bjoiVGl0bGVzT2ZQYXJ0cyIsdDo0MTI2fSwxNDp7bjoiTWFuYWdlciIsdDo4MH0sMTU6e246IkNvbXBhbnkiLHQ6ODB9LDE2OntuOiJMaW5rc1Vw''@;'; put 'put ''VG9EYXRlIix0OjExfSwxNzp7bjoiQ2hhcmFjdGVyQ291bnQiLHQ6M30sMTk6e246IlNoYXJlZERvYyIsdDoxMX0sMjI6e246Ikh5cGVybGlua3NDaGFuZ2VkIix0OjExfSwyMzp7bjoiQXBwVmVyc2lvbiIsdDozLHA6InZlcnNpb24ifSwyNDp7bjoiRGlnU2lnIix0OjY1fSwyNjp7bjoiQ29u''@;'; put 'put ''dGVudFR5cGUiLHQ6ODB9LDI3OntuOiJDb250ZW50U3RhdHVzIix0OjgwfSwyODp7bjoiTGFuZ3VhZ2UiLHQ6ODB9LDI5OntuOiJWZXJzaW9uIix0OjgwfSwyNTU6e30sMjE0NzQ4MzY0ODp7bjoiTG9jYWxlIix0OjE5fSwyMTQ3NDgzNjUxOntuOiJCZWhhdmlvciIsdDoxOX0sMTkxOTA1NDQz''@;'; put 'put ''NDp7fX0sZG49ezE6e246IkNvZGVQYWdlIix0OjJ9LDI6e246IlRpdGxlIix0OjgwfSwzOntuOiJTdWJqZWN0Iix0OjgwfSw0OntuOiJBdXRob3IiLHQ6ODB9LDU6e246IktleXdvcmRzIix0OjgwfSw2OntuOiJDb21tZW50cyIsdDo4MH0sNzp7bjoiVGVtcGxhdGUiLHQ6ODB9LDg6e246Ikxh''@;'; put 'put ''c3RBdXRob3IiLHQ6ODB9LDk6e246IlJldk51bWJlciIsdDo4MH0sMTA6e246IkVkaXRUaW1lIix0OjY0fSwxMTp7bjoiTGFzdFByaW50ZWQiLHQ6NjR9LDEyOntuOiJDcmVhdGVkRGF0ZSIsdDo2NH0sMTM6e246Ik1vZGlmaWVkRGF0ZSIsdDo2NH0sMTQ6e246IlBhZ2VDb3VudCIsdDozfSwx''@;'; put 'put ''NTp7bjoiV29yZENvdW50Iix0OjN9LDE2OntuOiJDaGFyQ291bnQiLHQ6M30sMTc6e246IlRodW1ibmFpbCIsdDo3MX0sMTg6e246IkFwcGxpY2F0aW9uIix0OjgwfSwxOTp7bjoiRG9jU2VjdXJpdHkiLHQ6M30sMjU1Ont9LDIxNDc0ODM2NDg6e246IkxvY2FsZSIsdDoxOX0sMjE0NzQ4MzY1''@;'; put 'put ''MTp7bjoiQmVoYXZpb3IiLHQ6MTl9LDE5MTkwNTQ0MzQ6e319LHhzPXsxOiJVUyIsMjoiQ0EiLDM6IiIsNzoiUlUiLDIwOiJFRyIsMzA6IkdSIiwzMToiTkwiLDMyOiJCRSIsMzM6IkZSIiwzNDoiRVMiLDM2OiJIVSIsMzk6IklUIiw0MToiQ0giLDQzOiJBVCIsNDQ6IkdCIiw0NToiREsiLDQ2''@;'; put 'put ''OiJTRSIsNDc6Ik5PIiw0ODoiUEwiLDQ5OiJERSIsNTI6Ik1YIiw1NToiQlIiLDYxOiJBVSIsNjQ6Ik5aIiw2NjoiVEgiLDgxOiJKUCIsODI6IktSIiw4NDoiVk4iLDg2OiJDTiIsOTA6IlRSIiwxMDU6IkpTIiwyMTM6IkRaIiwyMTY6Ik1BIiwyMTg6IkxZIiwzNTE6IlBUIiwzNTQ6IklTIiwz''@;'; put 'put ''NTg6IkZJIiw0MjA6IkNaIiw4ODY6IlRXIiw5NjE6IkxCIiw5NjI6IkpPIiw5NjM6IlNZIiw5NjQ6IklRIiw5NjU6IktXIiw5NjY6IlNBIiw5NzE6IkFFIiw5NzI6IklMIiw5NzQ6IlFBIiw5ODE6IklSIiw2NTUzNToiVVMifSxubD1bbnVsbCwic29saWQiLCJtZWRpdW1HcmF5IiwiZGFya0dy''@;'; put 'put ''YXkiLCJsaWdodEdyYXkiLCJkYXJrSG9yaXpvbnRhbCIsImRhcmtWZXJ0aWNhbCIsImRhcmtEb3duIiwiZGFya1VwIiwiZGFya0dyaWQiLCJkYXJrVHJlbGxpcyIsImxpZ2h0SG9yaXpvbnRhbCIsImxpZ2h0VmVydGljYWwiLCJsaWdodERvd24iLCJsaWdodFVwIiwibGlnaHRHcmlkIiwibGln''@;'; put 'put ''aHRUcmVsbGlzIiwiZ3JheTEyNSIsImdyYXkwNjI1Il07ZnVuY3Rpb24gaWwoZSl7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKHQpe3JldHVyblt0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnRdfSl9dmFyIFZ0PU1lKGlsKFswLDE2Nzc3MjE1LDE2NzExNjgwLDY1MjgwLDI1NSwxNjc3Njk2MCwxNjcx''@;'; put 'put ''MTkzNSw2NTUzNSwwLDE2Nzc3MjE1LDE2NzExNjgwLDY1MjgwLDI1NSwxNjc3Njk2MCwxNjcxMTkzNSw2NTUzNSw4Mzg4NjA4LDMyNzY4LDEyOCw4NDIxMzc2LDgzODg3MzYsMzI4OTYsMTI2MzIyNTYsODQyMTUwNCwxMDA2NjQzMSwxMDA0MDE2NiwxNjc3NzE2NCwxMzQzNDg3OSw2Njg0Nzc0''@;'; put 'put ''LDE2NzQ0NTc2LDI2MzE2LDEzNDIxODIzLDEyOCwxNjcxMTkzNSwxNjc3Njk2MCw2NTUzNSw4Mzg4NzM2LDgzODg2MDgsMzI4OTYsMjU1LDUyNDc5LDEzNDM0ODc5LDEzNDM0ODI4LDE2Nzc3MTEzLDEwMDc5NDg3LDE2NzUxMDUyLDEzNDA4NzY3LDE2NzY0MDU3LDMzNjg3MDMsMzM5NDc2NCwx''@;'; put 'put ''MDA3OTIzMiwxNjc2MzkwNCwxNjc1MDg0OCwxNjczNzc5Miw2NzEwOTM3LDk4Njg5NTAsMTMxNTgsMzM4MTYwNiwxMzA1NiwzMzU1MzkyLDEwMDQwMDY0LDEwMDQwMTY2LDMzNTU1NDUsMzM1NTQ0MywxNjc3NzIxNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdKSkseHQ9ezA6''@;'; put 'put ''IiNOVUxMISIsNzoiI0RJVi8wISIsMTU6IiNWQUxVRSEiLDIzOiIjUkVGISIsMjk6IiNOQU1FPyIsMzY6IiNOVU0hIiw0MjoiI04vQSIsNDM6IiNHRVRUSU5HX0RBVEEiLDI1NToiI1dURj8ifSxkcz17IiNOVUxMISI6MCwiI0RJVi8wISI6NywiI1ZBTFVFISI6MTUsIiNSRUYhIjoyMywiI05B''@;'; put 'put ''TUU/IjoyOSwiI05VTSEiOjM2LCIjTi9BIjo0MiwiI0dFVFRJTkdfREFUQSI6NDMsIiNXVEY/IjoyNTV9LHZuPXsiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQubWFpbit4bWwiOiJ3b3JrYm9va3MiLCJhcHBsaWNhdGlv''@;'; put 'put ''bi92bmQubXMtZXhjZWwuc2hlZXQubWFjcm9FbmFibGVkLm1haW4reG1sIjoid29ya2Jvb2tzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0LmJpbmFyeS5tYWNyb0VuYWJsZWQubWFpbiI6Indvcmtib29rcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5hZGRpbi5tYWNyb0Vu''@;'; put 'put ''YWJsZWQubWFpbit4bWwiOiJ3b3JrYm9va3MiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50ZW1wbGF0ZS5tYWluK3htbCI6Indvcmtib29rcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVu''@;'; put 'put ''dC5zcHJlYWRzaGVldG1sLndvcmtzaGVldCt4bWwiOiJzaGVldHMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwud29ya3NoZWV0Ijoic2hlZXRzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmJpbkluZGV4V3MiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9m''@;'; put 'put ''ZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY2hhcnRzaGVldCt4bWwiOiJjaGFydHMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY2hhcnRzaGVldCI6ImNoYXJ0cyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5tYWNyb3NoZWV0K3htbCI6Im1hY3JvcyIsImFwcGxpY2F0aW9uL3Zu''@;'; put 'put ''ZC5tcy1leGNlbC5tYWNyb3NoZWV0IjoibWFjcm9zIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmludGxtYWNyb3NoZWV0IjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5iaW5JbmRleE1zIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vk''@;'; put 'put ''b2N1bWVudC5zcHJlYWRzaGVldG1sLmRpYWxvZ3NoZWV0K3htbCI6ImRpYWxvZ3MiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuZGlhbG9nc2hlZXQiOiJkaWFsb2dzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hhcmVk''@;'; put 'put ''U3RyaW5ncyt4bWwiOiJzdHJzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoYXJlZFN0cmluZ3MiOiJzdHJzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc3R5bGVzK3htbCI6InN0eWxlcyIsImFwcGxpY2F0aW9uL3Zu''@;'; put 'put ''ZC5tcy1leGNlbC5zdHlsZXMiOiJzdHlsZXMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtcGFja2FnZS5jb3JlLXByb3BlcnRpZXMreG1sIjoiY29yZXByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmN1c3RvbS1wcm9wZXJ0aWVz''@;'; put 'put ''K3htbCI6ImN1c3Rwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5leHRlbmRlZC1wcm9wZXJ0aWVzK3htbCI6ImV4dHByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmN1c3RvbVhtbFByb3BlcnRp''@;'; put 'put ''ZXMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmN1c3RvbVByb3BlcnR5IjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNvbW1l''@;'; put 'put ''bnRzK3htbCI6ImNvbW1lbnRzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNvbW1lbnRzIjoiY29tbWVudHMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudGhyZWFkZWRjb21tZW50cyt4bWwiOiJ0aHJlYWRlZGNvbW1lbnRzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBlcnNv''@;'; put 'put ''bit4bWwiOiJwZW9wbGUiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldE1ldGFkYXRhK3htbCI6Im1ldGFkYXRhIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0TWV0YWRhdGEiOiJtZXRhZGF0YSIsImFwcGxp''@;'; put 'put ''Y2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdFRhYmxlIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90VGFibGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1''@;'; put 'put ''bWVudC5kcmF3aW5nbWwuY2hhcnQreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuY2hhcnRjb2xvcnN0eWxlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmNoYXJ0c3R5bGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2Uu''@;'; put 'put ''Y2hhcnRleCt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNhbGNDaGFpbiI6ImNhbGNjaGFpbnMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jYWxjQ2hhaW4reG1sIjoiY2FsY2NoYWlucyIsImFwcGxp''@;'; put 'put ''Y2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnByaW50ZXJTZXR0aW5ncyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmFjdGl2ZVgiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5hY3RpdmVYK3htbCI6IlRP''@;'; put 'put ''RE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYXR0YWNoZWRUb29sYmFycyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29ubmVjdGlvbnMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29u''@;'; put 'put ''bmVjdGlvbnMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5leHRlcm5hbExpbmsiOiJsaW5rcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmV4dGVybmFsTGluayt4bWwiOiJsaW5rcyIsImFwcGxpY2F0''@;'; put 'put ''aW9uL3ZuZC5tcy1leGNlbC5waXZvdENhY2hlRGVmaW5pdGlvbiI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGl2b3RDYWNoZVJlY29yZHMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RD''@;'; put 'put ''YWNoZURlZmluaXRpb24reG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90Q2FjaGVSZWNvcmRzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucXVlcnlUYWJsZSI6IlRPRE8iLCJh''@;'; put 'put ''cHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5xdWVyeVRhYmxlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudXNlck5hbWVzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5yZXZpc2lvbkhlYWRl''@;'; put 'put ''cnMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnJldmlzaW9uTG9nIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnJldmlzaW9uSGVhZGVycyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9w''@;'; put 'put ''ZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucmV2aXNpb25Mb2creG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnVzZXJOYW1lcyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5k''@;'; put 'put ''Lm1zLWV4Y2VsLnRhYmxlU2luZ2xlQ2VsbHMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGFibGVTaW5nbGVDZWxscyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNsaWNlciI6IlRPRE8i''@;'; put 'put ''LCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2xpY2VyQ2FjaGUiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNsaWNlcit4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNsaWNlckNhY2hlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhj''@;'; put 'put ''ZWwud3NTb3J0TWFwIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC50YWJsZSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50YWJsZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxm''@;'; put 'put ''b3JtYXRzLW9mZmljZWRvY3VtZW50LnRoZW1lK3htbCI6InRoZW1lcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC50aGVtZU92ZXJyaWRlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuVGltZWxpbmUreG1sIjoiVE9ETyIsImFw''@;'; put 'put ''cGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5UaW1lbGluZUNhY2hlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLnZiYVByb2plY3QiOiJ2YmEiLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLnZiYVByb2plY3RTaWduYXR1cmUiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5k''@;'; put 'put ''Lm1zLW9mZmljZS52b2xhdGlsZURlcGVuZGVuY2llcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC52b2xhdGlsZURlcGVuZGVuY2llcyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNvbnRy''@;'; put 'put ''b2xwcm9wZXJ0aWVzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQubW9kZWwrZGF0YSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuU3VydmV5K3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1h''@;'; put 'put ''dHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZyt4bWwiOiJkcmF3aW5ncyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuY2hhcnRzaGFwZXMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1''@;'; put 'put ''bWVudC5kcmF3aW5nbWwuZGlhZ3JhbUNvbG9ycyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtRGF0YSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3Vt''@;'; put 'put ''ZW50LmRyYXdpbmdtbC5kaWFncmFtTGF5b3V0K3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1TdHlsZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3Vt''@;'; put 'put ''ZW50LnZtbERyYXdpbmciOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLXBhY2thZ2UucmVsYXRpb25zaGlwcyt4bWwiOiJyZWxzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50Lm9sZU9iamVjdCI6IlRPRE8iLCJpbWFnZS9wbmci''@;'; put 'put ''OiJUT0RPIixzaGVldDoianMifSxrZT17V0I6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvb2ZmaWNlRG9jdW1lbnQiLFNIRUVUOiJodHRwOi8vc2hlZXRqcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1l''@;'; put 'put ''bnQvMjAwNi9yZWxhdGlvbnNoaXBzL29mZmljZURvY3VtZW50IixITElOSzoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9oeXBlcmxpbmsiLFZNTDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29m''@;'; put 'put ''ZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy92bWxEcmF3aW5nIixYUEFUSDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9leHRlcm5hbExpbmtQYXRoIixYTUlTUzoiaHR0cDovL3NjaGVtYXMubWljcm9z''@;'; put 'put ''b2Z0LmNvbS9vZmZpY2UvMjAwNi9yZWxhdGlvbnNoaXBzL3hsRXh0ZXJuYWxMaW5rUGF0aC94bFBhdGhNaXNzaW5nIixYTElOSzoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9leHRlcm5hbExpbmsiLENYTUw6Imh0''@;'; put 'put ''dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY3VzdG9tWG1sIixDWE1MUDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jdXN0b21YbWxQcm9w''@;'; put 'put ''cyIsQ01OVDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jb21tZW50cyIsQ09SRV9QUk9QUzoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9yZWxhdGlvbnNoaXBzL21ldGFk''@;'; put 'put ''YXRhL2NvcmUtcHJvcGVydGllcyIsRVhUX1BST1BTOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2V4dGVuZGVkLXByb3BlcnRpZXMiLENVU1RfUFJPUFM6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9y''@;'; put 'put ''Zy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY3VzdG9tLXByb3BlcnRpZXMiLFNTVDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9zaGFyZWRTdHJpbmdzIixTVFk6Imh0dHA6Ly9zY2hlbWFzLm9w''@;'; put 'put ''ZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvc3R5bGVzIixUSEVNRToiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy90aGVtZSIsQ0hBUlQ6Imh0dHA6Ly9zY2hlbWFzLm9w''@;'; put 'put ''ZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY2hhcnQiLENIQVJURVg6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMTQvcmVsYXRpb25zaGlwcy9jaGFydEV4IixDUzoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMu''@;'; put 'put ''b3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jaGFydHNoZWV0IixXUzpbImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvd29ya3NoZWV0IiwiaHR0cDovL3B1cmwub2NsYy5vcmcvb294bWwvb2Zm''@;'; put 'put ''aWNlRG9jdW1lbnQvcmVsYXRpb25zaGlwcy93b3Jrc2hlZXQiXSxEUzoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9kaWFsb2dzaGVldCIsTVM6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIw''@;'; put 'put ''MDYvcmVsYXRpb25zaGlwcy94bE1hY3Jvc2hlZXQiLElNRzoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9pbWFnZSIsRFJBVzoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50''@;'; put 'put ''LzIwMDYvcmVsYXRpb25zaGlwcy9kcmF3aW5nIixYTE1FVEE6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvc2hlZXRNZXRhZGF0YSIsVENNTlQ6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIw''@;'; put 'put ''MTcvMTAvcmVsYXRpb25zaGlwcy90aHJlYWRlZENvbW1lbnQiLFBFT1BMRToiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAxNy8xMC9yZWxhdGlvbnNoaXBzL3BlcnNvbiIsVkJBOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L3JlbGF0aW9u''@;'; put 'put ''c2hpcHMvdmJhUHJvamVjdCJ9O2Z1bmN0aW9uIE9hKGUpe3ZhciB0PWUubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4gZS5zbGljZSgwLHQrMSkrIl9yZWxzLyIrZS5zbGljZSh0KzEpKyIucmVscyJ9ZnVuY3Rpb24gSWEoZSx0KXt2YXIgcj17IiFpZCI6e319O2lmKCFlKXJldHVybiByOyIvIiE9''@;'; put 'put ''PXQuY2hhckF0KDApJiYodD0iLyIrdCk7dmFyIGE9e307cmV0dXJuKGUubWF0Y2godnIpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgaT1tZShuKTtpZigiPFJlbGF0aW9uc2hpcCI9PT1pWzBdKXt2YXIgcz17fTtzLlR5cGU9aS5UeXBlLHMuVGFyZ2V0PWkuVGFyZ2V0LHMuSWQ9aS5J''@;'; put 'put ''ZCxpLlRhcmdldE1vZGUmJihzLlRhcmdldE1vZGU9aS5UYXJnZXRNb2RlKTt2YXIgZj0iRXh0ZXJuYWwiPT09aS5UYXJnZXRNb2RlP2kuVGFyZ2V0OlNhKGkuVGFyZ2V0LHQpO3JbZl09cyxhW2kuSWRdPXN9fSksclsiIWlkIl09YSxyfXZhciBWcj1bWyJjcDpjYXRlZ29yeSIsIkNhdGVnb3J5''@;'; put 'put ''Il0sWyJjcDpjb250ZW50U3RhdHVzIiwiQ29udGVudFN0YXR1cyJdLFsiY3A6a2V5d29yZHMiLCJLZXl3b3JkcyJdLFsiY3A6bGFzdE1vZGlmaWVkQnkiLCJMYXN0QXV0aG9yIl0sWyJjcDpsYXN0UHJpbnRlZCIsIkxhc3RQcmludGVkIl0sWyJjcDpyZXZpc2lvbiIsIlJldk51bWJlciJdLFsi''@;'; put 'put ''Y3A6dmVyc2lvbiIsIlZlcnNpb24iXSxbImRjOmNyZWF0b3IiLCJBdXRob3IiXSxbImRjOmRlc2NyaXB0aW9uIiwiQ29tbWVudHMiXSxbImRjOmlkZW50aWZpZXIiLCJJZGVudGlmaWVyIl0sWyJkYzpsYW5ndWFnZSIsIkxhbmd1YWdlIl0sWyJkYzpzdWJqZWN0IiwiU3ViamVjdCJdLFsiZGM6''@;'; put 'put ''dGl0bGUiLCJUaXRsZSJdLFsiZGN0ZXJtczpjcmVhdGVkIiwiQ3JlYXRlZERhdGUiLCJkYXRlIl0sWyJkY3Rlcm1zOm1vZGlmaWVkIiwiTW9kaWZpZWREYXRlIiwiZGF0ZSJdXSxkbD1mdW5jdGlvbigpe2Zvcih2YXIgZT1uZXcgQXJyYXkoVnIubGVuZ3RoKSx0PTA7dDxWci5sZW5ndGg7Kyt0''@;'; put 'put ''KXt2YXIgcj1Wclt0XSxhPSIoPzoiK3JbMF0uc2xpY2UoMCxyWzBdLmluZGV4T2YoIjoiKSkrIjopIityWzBdLnNsaWNlKHJbMF0uaW5kZXhPZigiOiIpKzEpO2VbdF09bmV3IFJlZ0V4cCgiPCIrYSsiW14+XSo+KFtcXHNcXFNdKj8pPC8iK2ErIj4iKX1yZXR1cm4gZX0oKTtmdW5jdGlvbiBt''@;'; put 'put ''cyhlKXt2YXIgdD17fTtlPUJlKGUpO2Zvcih2YXIgcj0wO3I8VnIubGVuZ3RoOysrcil7dmFyIGE9VnJbcl0sbj1lLm1hdGNoKGRsW3JdKTtudWxsIT1uJiZuLmxlbmd0aD4wJiYodFthWzFdXT1JZShuWzFdKSksImRhdGUiPT09YVsyXSYmdFthWzFdXSYmKHRbYVsxXV09WGUodFthWzFdXSkp''@;'; put 'put ''fXJldHVybiB0fXZhciBYdD1bWyJBcHBsaWNhdGlvbiIsIkFwcGxpY2F0aW9uIiwic3RyaW5nIl0sWyJBcHBWZXJzaW9uIiwiQXBwVmVyc2lvbiIsInN0cmluZyJdLFsiQ29tcGFueSIsIkNvbXBhbnkiLCJzdHJpbmciXSxbIkRvY1NlY3VyaXR5IiwiRG9jU2VjdXJpdHkiLCJzdHJpbmciXSxb''@;'; put 'put ''Ik1hbmFnZXIiLCJNYW5hZ2VyIiwic3RyaW5nIl0sWyJIeXBlcmxpbmtzQ2hhbmdlZCIsIkh5cGVybGlua3NDaGFuZ2VkIiwiYm9vbCJdLFsiU2hhcmVkRG9jIiwiU2hhcmVkRG9jIiwiYm9vbCJdLFsiTGlua3NVcFRvRGF0ZSIsIkxpbmtzVXBUb0RhdGUiLCJib29sIl0sWyJTY2FsZUNyb3Ai''@;'; put 'put ''LCJTY2FsZUNyb3AiLCJib29sIl0sWyJIZWFkaW5nUGFpcnMiLCJIZWFkaW5nUGFpcnMiLCJyYXciXSxbIlRpdGxlc09mUGFydHMiLCJUaXRsZXNPZlBhcnRzIiwicmF3Il1dO2Z1bmN0aW9uIHdzKGUsdCxyLGEpe3ZhciBuPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgZSluPUhpKGUsYSk7ZWxz''@;'; put 'put ''ZSBmb3IodmFyIGk9MDtpPGUubGVuZ3RoOysraSluPW4uY29uY2F0KGVbaV0ubWFwKGZ1bmN0aW9uKGwpe3JldHVybnt2Omx9fSkpO3ZhciBzPSJzdHJpbmciPT10eXBlb2YgdD9IaSh0LGEpLm1hcChmdW5jdGlvbihsKXtyZXR1cm4gbC52fSk6dCxmPTAsYz0wO2lmKHMubGVuZ3RoPjApZm9y''@;'; put 'put ''KHZhciBvPTA7byE9PW4ubGVuZ3RoO28rPTIpe3N3aXRjaChjPStuW28rMV0udixuW29dLnYpe2Nhc2UiV29ya3NoZWV0cyI6Y2FzZSJcdTVkZTVcdTRmNWNcdTg4NjgiOmNhc2UiXHUwNDFiXHUwNDM4XHUwNDQxXHUwNDQyXHUwNDRiIjpjYXNlIlx1MDYyM1x1MDY0OFx1MDYzMVx1MDYyN1x1''@;'; put 'put ''MDY0MiBcdTA2MjdcdTA2NDRcdTA2MzlcdTA2NDVcdTA2NDQiOmNhc2UiXHUzMGVmXHUzMGZjXHUzMGFmXHUzMGI3XHUzMGZjXHUzMGM4IjpjYXNlIlx1MDVkMlx1MDVkY1x1MDVkOVx1MDVkNVx1MDVlMFx1MDVkNVx1MDVlYSBcdTA1ZTJcdTA1ZDFcdTA1ZDVcdTA1ZDNcdTA1ZDQiOmNhc2Ui''@;'; put 'put ''QXJiZWl0c2JsXHhlNHR0ZXIiOmNhc2UiXHhjN2FsXHUwMTMxXHUwMTVmbWEgU2F5ZmFsYXJcdTAxMzEiOmNhc2UiRmV1aWxsZXMgZGUgY2FsY3VsIjpjYXNlIkZvZ2xpIGRpIGxhdm9ybyI6Y2FzZSJGb2xoYXMgZGUgY1x4ZTFsY3VsbyI6Y2FzZSJQbGFuaWxoYXMiOmNhc2UiUmVnbmVhcmsi''@;'; put 'put ''OmNhc2UiSG9qYXMgZGUgY1x4ZTFsY3VsbyI6Y2FzZSJXZXJrYmxhZGVuIjpyLldvcmtzaGVldHM9YyxyLlNoZWV0TmFtZXM9cy5zbGljZShmLGYrYyk7YnJlYWs7Y2FzZSJOYW1lZCBSYW5nZXMiOmNhc2UiUmFuZ29zIGNvbiBub21icmUiOmNhc2UiXHU1NDBkXHU1MjRkXHU0ZWQ4XHUzMDRk''@;'; put 'put ''XHU0ZTAwXHU4OWE3IjpjYXNlIkJlbmFubnRlIEJlcmVpY2hlIjpjYXNlIk5hdm5naXZuZSBvbXJceGU1ZGVyIjpyLk5hbWVkUmFuZ2VzPWMsci5EZWZpbmVkTmFtZXM9cy5zbGljZShmLGYrYyk7YnJlYWs7Y2FzZSJDaGFydHMiOmNhc2UiRGlhZ3JhbW1lIjpyLkNoYXJ0c2hlZXRzPWMsci5D''@;'; put 'put ''aGFydE5hbWVzPXMuc2xpY2UoZixmK2MpfWYrPWN9fXZhciBfbixwbD0vPFtePl0rPltePF0qL2csZ249e1RpdGxlOiJUaXRsZSIsU3ViamVjdDoiU3ViamVjdCIsQXV0aG9yOiJBdXRob3IiLEtleXdvcmRzOiJLZXl3b3JkcyIsQ29tbWVudHM6IkRlc2NyaXB0aW9uIixMYXN0QXV0aG9yOiJM''@;'; put 'put ''YXN0QXV0aG9yIixSZXZOdW1iZXI6IlJldmlzaW9uIixBcHBsaWNhdGlvbjoiQXBwTmFtZSIsTGFzdFByaW50ZWQ6Ikxhc3RQcmludGVkIixDcmVhdGVkRGF0ZToiQ3JlYXRlZCIsTW9kaWZpZWREYXRlOiJMYXN0U2F2ZWQiLENhdGVnb3J5OiJDYXRlZ29yeSIsTWFuYWdlcjoiTWFuYWdlciIs''@;'; put 'put ''Q29tcGFueToiQ29tcGFueSIsQXBwVmVyc2lvbjoiVmVyc2lvbiIsQ29udGVudFN0YXR1czoiQ29udGVudFN0YXR1cyIsSWRlbnRpZmllcjoiSWRlbnRpZmllciIsTGFuZ3VhZ2U6Ikxhbmd1YWdlIn07ZnVuY3Rpb24gZ2woZSx0LHIpe19ufHwoX249czAoZ24pKSxlW3Q9X25bdF18fHRdPXJ9''@;'; put 'put ''ZnVuY3Rpb24gd24oZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDQpLHI9ZS5yZWFkX3NoaWZ0KDQpO3JldHVybiBuZXcgRGF0ZSgxZTMqKHIvMWU3Kk1hdGgucG93KDIsMzIpK3QvMWU3LTExNjQ0NDczNjAwKSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cLjAwMC8sIiIpfWZ1bmN0aW9uIFRzKGUs''@;'; put 'put ''dCxyKXt2YXIgYT1lLmwsbj1lLnJlYWRfc2hpZnQoMCwibHBzdHItY3AiKTtpZihyKWZvcig7ZS5sLWEmMzspKytlLmw7cmV0dXJuIG59ZnVuY3Rpb24gU3MoZSx0LHIpe3ZhciBhPWUucmVhZF9zaGlmdCgwLCJscHdzdHIiKTtyZXR1cm4gciYmKGUubCs9NC0oYS5sZW5ndGgrMSYzKSYzKSxh''@;'; put 'put ''fWZ1bmN0aW9uIEZzKGUsdCxyKXtyZXR1cm4gMzE9PT10P1NzKGUpOlRzKGUsMCxyKX1mdW5jdGlvbiBrbihlLHQscil7cmV0dXJuIEZzKGUsdCwhMT09PXI/MDo0KX1mdW5jdGlvbiBGbChlKXt2YXIgdD1lLmwscj1fMChlLDgxKTtyZXR1cm4gMD09ZVtlLmxdJiYwPT1lW2UubCsxXSYmZS5s''@;'; put 'put ''LXQmMiYmKGUubCs9MiksW3IsXzAoZSwzKV19ZnVuY3Rpb24geXMoZSx0KXtmb3IodmFyIHI9ZS5yZWFkX3NoaWZ0KDQpLGE9e30sbj0wO24hPXI7KytuKXt2YXIgaT1lLnJlYWRfc2hpZnQoNCkscz1lLnJlYWRfc2hpZnQoNCk7YVtpXT1lLnJlYWRfc2hpZnQocywxMjAwPT09dD8idXRmMTZs''@;'; put 'put ''ZSI6InV0ZjgiKS5yZXBsYWNlKGRyLCIiKS5yZXBsYWNlKHdhLCIhIiksMTIwMD09PXQmJnMlMiYmKGUubCs9Mil9cmV0dXJuIDMmZS5sJiYoZS5sPWUubD4+Mzw8MiksYX1mdW5jdGlvbiBBcyhlKXt2YXIgdD1lLnJlYWRfc2hpZnQoNCkscj1lLnNsaWNlKGUubCxlLmwrdCk7cmV0dXJuIGUu''@;'; put 'put ''bCs9dCwoMyZ0KT4wJiYoZS5sKz00LSgzJnQpJjMpLHJ9ZnVuY3Rpb24gXzAoZSx0LHIpe3ZhciBuLGE9ZS5yZWFkX3NoaWZ0KDIpLGk9cnx8e307aWYoZS5sKz0yLDEyIT09dCYmYSE9PXQmJi0xPT09YWwuaW5kZXhPZih0KSYmKDQxMjYhPSg2NTUzNCZ0KXx8NDEyNiE9KDY1NTM0JmEpKSl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHR5cGUgIit0KyIgc2F3ICIrYSk7c3dpdGNoKDEyPT09dD9hOnQpe2Nhc2UgMjpyZXR1cm4gbj1lLnJlYWRfc2hpZnQoMiwiaSIpLGkucmF3fHwoZS5sKz0yKSxuO2Nhc2UgMzpyZXR1cm4gZS5yZWFkX3NoaWZ0KDQsImkiKTtjYXNlIDExOnJldHVy''@;'; put 'put ''biAwIT09ZS5yZWFkX3NoaWZ0KDQpO2Nhc2UgMTk6cmV0dXJuIGUucmVhZF9zaGlmdCg0KTtjYXNlIDMwOnJldHVybiBUcyhlLDAsNCkucmVwbGFjZShkciwiIik7Y2FzZSAzMTpyZXR1cm4gU3MoZSk7Y2FzZSA2NDpyZXR1cm4gd24oZSk7Y2FzZSA2NTpyZXR1cm4gQXMoZSk7Y2FzZSA3MTpy''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24gQWwoZSl7dmFyIHQ9e307cmV0dXJuIHQuU2l6ZT1lLnJlYWRfc2hpZnQoNCksZS5sKz10LlNpemUrMy0odC5TaXplLTEpJTQsdH0oZSk7Y2FzZSA4MDpyZXR1cm4ga24oZSxhLCFpLnJhdykucmVwbGFjZShkciwiIik7Y2FzZSA4MTpyZXR1cm4gZnVuY3Rpb24gRWwo''@;'; put 'put ''ZSx0KXtpZighdCl0aHJvdyBuZXcgRXJyb3IoIlZ0VW5hbGlnbmVkU3RyaW5nIG11c3QgaGF2ZSBwb3NpdGl2ZSBsZW5ndGgiKTtyZXR1cm4gRnMoZSx0LDApfShlLGEpLnJlcGxhY2UoZHIsIiIpO2Nhc2UgNDEwODpyZXR1cm4gZnVuY3Rpb24geWwoZSl7Zm9yKHZhciB0PWUucmVhZF9zaGlm''@;'; put 'put ''dCg0KSxyPVtdLGE9MDthPHQvMjsrK2Epci5wdXNoKEZsKGUpKTtyZXR1cm4gcn0oZSk7Y2FzZSA0MTI2OmNhc2UgNDEyNzpyZXR1cm4gNDEyNz09YT9mdW5jdGlvbiBUbChlKXtmb3IodmFyIHQ9ZS5yZWFkX3NoaWZ0KDQpLHI9W10sYT0wO2EhPXQ7KythKXt2YXIgbj1lLmw7clthXT1lLnJl''@;'; put 'put ''YWRfc2hpZnQoMCwibHB3c3RyIikucmVwbGFjZShkciwiIiksZS5sLW4mMiYmKGUubCs9Mil9cmV0dXJuIHJ9KGUpOmZ1bmN0aW9uIFNsKGUpe2Zvcih2YXIgdD1lLnJlYWRfc2hpZnQoNCkscj1bXSxhPTA7YSE9dDsrK2EpclthXT1lLnJlYWRfc2hpZnQoMCwibHBzdHItY3AiKS5yZXBsYWNl''@;'; put 'put ''KGRyLCIiKTtyZXR1cm4gcn0oZSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlR5cGVkUHJvcGVydHlWYWx1ZSB1bnJlY29nbml6ZWQgdHlwZSAiK3QrIiAiK2EpfX1mdW5jdGlvbiBEcyhlLHQpe3ZhciByPWUubCxhPWUucmVhZF9zaGlmdCg0KSxuPWUucmVhZF9zaGlmdCg0KSxpPVtdLHM9''@;'; put 'put ''MCxmPTAsYz0tMSxvPXt9O2ZvcihzPTA7cyE9bjsrK3Mpe3ZhciBsPWUucmVhZF9zaGlmdCg0KSxoPWUucmVhZF9zaGlmdCg0KTtpW3NdPVtsLGgrcl19aS5zb3J0KGZ1bmN0aW9uKFQsZyl7cmV0dXJuIFRbMV0tZ1sxXX0pO3ZhciB4PXt9O2ZvcihzPTA7cyE9bjsrK3Mpe2lmKGUubCE9PWlb''@;'; put 'put ''c11bMV0pe3ZhciBkPSEwO2lmKHM+MCYmdClzd2l0Y2godFtpW3MtMV1bMF1dLnQpe2Nhc2UgMjplLmwrMj09PWlbc11bMV0mJihlLmwrPTIsZD0hMSk7YnJlYWs7Y2FzZSA4MDpjYXNlIDQxMDg6ZS5sPD1pW3NdWzFdJiYoZS5sPWlbc11bMV0sZD0hMSl9aWYoKCF0fHwwPT1zKSYmZS5sPD1p''@;'; put 'put ''W3NdWzFdJiYoZD0hMSxlLmw9aVtzXVsxXSksZCl0aHJvdyBuZXcgRXJyb3IoIlJlYWQgRXJyb3I6IEV4cGVjdGVkIGFkZHJlc3MgIitpW3NdWzFdKyIgYXQgIitlLmwrIiA6IitzKX1pZih0KXt2YXIgdj10W2lbc11bMF1dO2lmKHhbdi5uXT1fMChlLHYudCx7cmF3OiEwfSksInZlcnNpb24i''@;'; put 'put ''PT09di5wJiYoeFt2Lm5dPVN0cmluZyh4W3Yubl0+PjE2KSsiLiIrKCIwMDAwIitTdHJpbmcoNjU1MzUmeFt2Lm5dKSkuc2xpY2UoLTQpKSwiQ29kZVBhZ2UiPT12Lm4pc3dpdGNoKHhbdi5uXSl7Y2FzZSAwOnhbdi5uXT0xMjUyO2Nhc2UgODc0OmNhc2UgOTMyOmNhc2UgOTM2OmNhc2UgOTQ5''@;'; put 'put ''OmNhc2UgOTUwOmNhc2UgMTI1MDpjYXNlIDEyNTE6Y2FzZSAxMjUzOmNhc2UgMTI1NDpjYXNlIDEyNTU6Y2FzZSAxMjU2OmNhc2UgMTI1NzpjYXNlIDEyNTg6Y2FzZSAxZTQ6Y2FzZSAxMjAwOmNhc2UgMTIwMTpjYXNlIDEyNTI6Y2FzZSA2NWUzOmNhc2UtNTM2OmNhc2UgNjUwMDE6Y2FzZS01''@;'; put 'put ''MzU6TXIoZj14W3Yubl0+Pj4wJjY1NTM1KTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgQ29kZVBhZ2U6ICIreFt2Lm5dKX19ZWxzZSBpZigxPT09aVtzXVswXSl7aWYoZj14LkNvZGVQYWdlPV8wKGUsMiksTXIoZiksLTEhPT1jKXt2YXIgdT1lLmw7ZS5sPWlb''@;'; put 'put ''Y11bMV0sbz15cyhlLGYpLGUubD11fX1lbHNlIGlmKDA9PT1pW3NdWzBdKXtpZigwPT09Zil7Yz1zLGUubD1pW3MrMV1bMV07Y29udGludWV9bz15cyhlLGYpfWVsc2V7dmFyIGsscD1vW2lbc11bMF1dO3N3aXRjaChlW2UubF0pe2Nhc2UgNjU6ZS5sKz00LGs9QXMoZSk7YnJlYWs7Y2FzZSAz''@;'; put 'put ''MDpjYXNlIDMxOmUubCs9NCxrPWtuKGUsZVtlLmwtNF0pLnJlcGxhY2UoL1x1MDAwMCskLywiIik7YnJlYWs7Y2FzZSAzOmUubCs9NCxrPWUucmVhZF9zaGlmdCg0LCJpIik7YnJlYWs7Y2FzZSAxOTplLmwrPTQsaz1lLnJlYWRfc2hpZnQoNCk7YnJlYWs7Y2FzZSA1OmUubCs9NCxrPWUucmVh''@;'; put 'put ''ZF9zaGlmdCg4LCJmIik7YnJlYWs7Y2FzZSAxMTplLmwrPTQsaz1KZShlLDQpO2JyZWFrO2Nhc2UgNjQ6ZS5sKz00LGs9WGUod24oZSkpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bnBhcnNlZCB2YWx1ZTogIitlW2UubF0pfXhbcF09a319cmV0dXJuIGUubD1yK2EseH1mdW5j''@;'; put 'put ''dGlvbiBScyhlLHQscil7dmFyIGE9ZS5jb250ZW50O2lmKCFhKXJldHVybnt9O2hyKGEsMCk7dmFyIG4saSxzLGYsYz0wO2EuY2hrKCJmZWZmIiwiQnl0ZSBPcmRlcjogIiksYS5yZWFkX3NoaWZ0KDIpO3ZhciBvPWEucmVhZF9zaGlmdCg0KSxsPWEucmVhZF9zaGlmdCgxNik7aWYobCE9PXZl''@;'; put 'put ''LnV0aWxzLmNvbnN0cy5IRUFERVJfQ0xTSUQmJmwhPT1yKXRocm93IG5ldyBFcnJvcigiQmFkIFByb3BlcnR5U2V0IENMU0lEICIrbCk7aWYoMSE9PShuPWEucmVhZF9zaGlmdCg0KSkmJjIhPT1uKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkICNTZXRzOiAiK24pO2lmKGk9YS5yZWFk''@;'; put 'put ''X3NoaWZ0KDE2KSxmPWEucmVhZF9zaGlmdCg0KSwxPT09biYmZiE9PWEubCl0aHJvdyBuZXcgRXJyb3IoIkxlbmd0aCBtaXNtYXRjaDogIitmKyIgIT09ICIrYS5sKTsyPT09biYmKHM9YS5yZWFkX3NoaWZ0KDE2KSxjPWEucmVhZF9zaGlmdCg0KSk7dmFyIHYsaD1EcyhhLHQpLHg9e1N5c3Rl''@;'; put 'put ''bUlkZW50aWZpZXI6b307Zm9yKHZhciBkIGluIGgpeFtkXT1oW2RdO2lmKHguRk1USUQ9aSwxPT09bilyZXR1cm4geDtpZihjLWEubD09MiYmKGEubCs9MiksYS5sIT09Yyl0aHJvdyBuZXcgRXJyb3IoIkxlbmd0aCBtaXNtYXRjaCAyOiAiK2EubCsiICE9PSAiK2MpO3RyeXt2PURzKGEsbnVs''@;'; put 'put ''bCl9Y2F0Y2h7fWZvcihkIGluIHYpeFtkXT12W2RdO3JldHVybiB4LkZNVElEPVtpLHNdLHh9ZnVuY3Rpb24geXQoZSx0KXtyZXR1cm4gZS5yZWFkX3NoaWZ0KHQpLG51bGx9ZnVuY3Rpb24gSmUoZSx0KXtyZXR1cm4gMT09PWUucmVhZF9zaGlmdCh0KX1mdW5jdGlvbiB0cihlKXtyZXR1cm4g''@;'; put 'put ''ZS5yZWFkX3NoaWZ0KDIsInUiKX1mdW5jdGlvbiBicyhlLHQpe3JldHVybiBmdW5jdGlvbiBPbChlLHQscil7Zm9yKHZhciBhPVtdLG49ZS5sK3Q7ZS5sPG47KWEucHVzaChyKGUsbi1lLmwpKTtpZihuIT09ZS5sKXRocm93IG5ldyBFcnJvcigiU2x1cnAgZXJyb3IiKTtyZXR1cm4gYX0oZSx0''@;'; put 'put ''LHRyKX1mdW5jdGlvbiBSYShlLHQscil7dmFyIGE9ZS5yZWFkX3NoaWZ0KHImJnIuYmlmZj49MTI/MjoxKSxuPSJzYmNzLWNvbnQiLGk9RHI7ciYmci5iaWZmPj04JiYoRHI9MTIwMCksciYmOCE9ci5iaWZmPzEyPT1yLmJpZmYmJihuPSJ3c3RyIik6ZS5yZWFkX3NoaWZ0KDEpJiYobj0iZGJj''@;'; put 'put ''cy1jb250Iiksci5iaWZmPj0yJiZyLmJpZmY8PTUmJihuPSJjcHN0ciIpO3ZhciBmPWE/ZS5yZWFkX3NoaWZ0KGEsbik6IiI7cmV0dXJuIERyPWksZn1mdW5jdGlvbiBSbChlKXt2YXIgdD1EcjtEcj0xMjAwO3ZhciBjLHI9ZS5yZWFkX3NoaWZ0KDIpLGE9ZS5yZWFkX3NoaWZ0KDEpLG49NCZh''@;'; put 'put ''LGk9OCZhLHM9MSsoMSZhKSxmPTAsbz17fTtpJiYoZj1lLnJlYWRfc2hpZnQoMikpLG4mJihjPWUucmVhZF9zaGlmdCg0KSk7dmFyIGg9MD09PXI/IiI6ZS5yZWFkX3NoaWZ0KHIsMj09cz8iZGJjcy1jb250Ijoic2Jjcy1jb250Iik7cmV0dXJuIGkmJihlLmwrPTQqZiksbiYmKGUubCs9Yyks''@;'; put 'put ''by50PWgsaXx8KG8ucmF3PSI8dD4iK28udCsiPC90PiIsby5yPW8udCksRHI9dCxvfWZ1bmN0aW9uIEd0KGUsdCxyKXtpZihyKXtpZihyLmJpZmY+PTImJnIuYmlmZjw9NSlyZXR1cm4gZS5yZWFkX3NoaWZ0KHQsImNwc3RyIik7aWYoci5iaWZmPj0xMilyZXR1cm4gZS5yZWFkX3NoaWZ0KHQs''@;'; put 'put ''ImRiY3MtY29udCIpfXZhciBuPWUucmVhZF9zaGlmdCgxKTtyZXR1cm4gZS5yZWFkX3NoaWZ0KHQsMD09PW4/InNiY3MtY29udCI6ImRiY3MtY29udCIpfWZ1bmN0aW9uIE5hKGUsdCxyKXt2YXIgYT1lLnJlYWRfc2hpZnQociYmMj09ci5iaWZmPzE6Mik7cmV0dXJuIDA9PT1hPyhlLmwrKywi''@;'; put 'put ''Iik6R3QoZSxhLHIpfWZ1bmN0aW9uIHp0KGUsdCxyKXtpZihyLmJpZmY+NSlyZXR1cm4gTmEoZSwwLHIpO3ZhciBhPWUucmVhZF9zaGlmdCgxKTtyZXR1cm4gMD09PWE/KGUubCsrLCIiKTplLnJlYWRfc2hpZnQoYSxyLmJpZmY8PTR8fCFlLmxlbnM/ImNwc3RyIjoic2Jjcy1jb250Iil9ZnVu''@;'; put 'put ''Y3Rpb24gdzAoZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDQpO3JldHVybiB0PjA/ZS5yZWFkX3NoaWZ0KHQsInV0ZjE2bGUiKS5yZXBsYWNlKGRyLCIiKToiIn1mdW5jdGlvbiBNcyhlKXtyZXR1cm5bZS5yZWFkX3NoaWZ0KDEpLGUucmVhZF9zaGlmdCgxKSxlLnJlYWRfc2hpZnQoMSksZS5yZWFk''@;'; put 'put ''X3NoaWZ0KDEpXX1mdW5jdGlvbiBVcyhlLHQpe3ZhciByPU1zKGUpO3JldHVybiByWzNdPTAscn1mdW5jdGlvbiBudChlKXtyZXR1cm57cjplLnJlYWRfc2hpZnQoMiksYzplLnJlYWRfc2hpZnQoMiksaXhmZTplLnJlYWRfc2hpZnQoMil9fWZ1bmN0aW9uIFZsKGUsdCxyKXt2YXIgYT1yLmJp''@;'; put 'put ''ZmY+OD80OjI7cmV0dXJuW2UucmVhZF9zaGlmdChhKSxlLnJlYWRfc2hpZnQoYSwiaSIpLGUucmVhZF9zaGlmdChhLCJpIildfWZ1bmN0aW9uIFdzKGUpe3JldHVybltlLnJlYWRfc2hpZnQoMiksdW4oZSldfWZ1bmN0aW9uIGswKGUpe3ZhciB0PWUucmVhZF9zaGlmdCgyKSxyPWUucmVhZF9z''@;'; put 'put ''aGlmdCgyKTtyZXR1cm57czp7YzplLnJlYWRfc2hpZnQoMikscjp0fSxlOntjOmUucmVhZF9zaGlmdCgyKSxyfX19ZnVuY3Rpb24gVnMoZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpLHI9ZS5yZWFkX3NoaWZ0KDIpO3JldHVybntzOntjOmUucmVhZF9zaGlmdCgxKSxyOnR9LGU6e2M6ZS5yZWFk''@;'; put 'put ''X3NoaWZ0KDEpLHJ9fX12YXIgR2w9VnM7ZnVuY3Rpb24gWHMoZSl7ZS5sKz00O3ZhciB0PWUucmVhZF9zaGlmdCgyKSxyPWUucmVhZF9zaGlmdCgyKSxhPWUucmVhZF9zaGlmdCgyKTtyZXR1cm4gZS5sKz0xMixbcix0LGFdfWZ1bmN0aW9uIF9yKGUpe2UubCs9MixlLmwrPWUucmVhZF9zaGlm''@;'; put 'put ''dCgyKX12YXIgamw9ezA6X3IsNDpfciw1Ol9yLDY6X3IsNzpmdW5jdGlvbiAkbChlKXtyZXR1cm4gZS5sKz00LGUuY2Y9ZS5yZWFkX3NoaWZ0KDIpLHt9fSw4Ol9yLDk6X3IsMTA6X3IsMTE6X3IsMTI6X3IsMTM6ZnVuY3Rpb24gemwoZSl7dmFyIHQ9e307cmV0dXJuIGUubCs9NCxlLmwrPTE2''@;'; put 'put ''LHQuZlNoYXJlZE5vdGU9ZS5yZWFkX3NoaWZ0KDIpLGUubCs9NCx0fSwxNDpfciwxNTpfciwxNjpfciwxNzpfciwxODpfciwxOTpfciwyMDpfciwyMTpYc307ZnVuY3Rpb24gRTAoZSx0KXt2YXIgcj17QklGRlZlcjowLGR0OjB9O3N3aXRjaChyLkJJRkZWZXI9ZS5yZWFkX3NoaWZ0KDIpLCh0''@;'; put 'put ''LT0yKT49MiYmKHIuZHQ9ZS5yZWFkX3NoaWZ0KDIpLGUubC09Miksci5CSUZGVmVyKXtjYXNlIDE1MzY6Y2FzZSAxMjgwOmNhc2UgMTAyNDpjYXNlIDc2ODpjYXNlIDUxMjpjYXNlIDI6Y2FzZSA3OmJyZWFrO2RlZmF1bHQ6aWYodD42KXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBCSUZG''@;'; put 'put ''IFZlciAiK3IuQklGRlZlcil9cmV0dXJuIGUucmVhZF9zaGlmdCh0KSxyfWZ1bmN0aW9uIEdzKGUsdCxyKXt2YXIgYT0wO3ImJjI9PXIuYmlmZnx8KGE9ZS5yZWFkX3NoaWZ0KDIpKTt2YXIgbj1lLnJlYWRfc2hpZnQoMik7cmV0dXJuIHImJjI9PXIuYmlmZiYmKGE9MS0obj4+MTUpLG4mPTMy''@;'; put 'put ''NzY3KSxbe1Vuc3luY2VkOjEmYSxEeVplcm86KDImYSk+PjEsRXhBc2M6KDQmYSk+PjIsRXhEc2M6KDgmYSk+PjN9LG5dfXZhciB3dT16dDtmdW5jdGlvbiB6cyhlLHQscil7dmFyIGE9ZS5sK3Qsbj04IT1yLmJpZmYmJnIuYmlmZj8yOjQsaT1lLnJlYWRfc2hpZnQobikscz1lLnJlYWRfc2hp''@;'; put 'put ''ZnQobiksZj1lLnJlYWRfc2hpZnQoMiksYz1lLnJlYWRfc2hpZnQoMik7cmV0dXJuIGUubD1hLHtzOntyOmksYzpmfSxlOntyOnMsY319fWZ1bmN0aW9uIGpzKGUsdCxyKXt2YXIgYT1udChlKTsoMj09ci5iaWZmfHw5PT10KSYmKytlLmw7dmFyIG49ZnVuY3Rpb24gSWwoZSl7dmFyIHQ9ZS5y''@;'; put 'put ''ZWFkX3NoaWZ0KDEpO3JldHVybiAxPT09ZS5yZWFkX3NoaWZ0KDEpP3Q6MT09PXR9KGUpO3JldHVybiBhLnZhbD1uLGEudD0hMD09PW58fCExPT09bj8iYiI6ImUiLGF9dmFyIEtzPWZ1bmN0aW9uIEhsKGUsdCxyKXtyZXR1cm4gMD09PXQ/IiI6enQoZSwwLHIpfTtmdW5jdGlvbiBZcyhlLHQs''@;'; put 'put ''cil7dmFyIG4sYT1lLnJlYWRfc2hpZnQoMiksaT17ZkJ1aWx0SW46MSZhLGZXYW50QWR2aXNlOmE+Pj4xJjEsZldhbnRQaWN0OmE+Pj4yJjEsZk9sZTphPj4+MyYxLGZPbGVMaW5rOmE+Pj40JjEsY2Y6YT4+PjUmMTAyMyxmSWNvbjphPj4+MTUmMX07cmV0dXJuIDE0ODQ5PT09ci5zYmNjaCYm''@;'; put 'put ''KG49ZnVuY3Rpb24gWGwoZSx0LHIpe2UubCs9NDt2YXIgYT1lLmwrKHQtPTQpLG49UmEoZSwwLHIpLGk9ZS5yZWFkX3NoaWZ0KDIpO2lmKGkhPT0oYS09ZS5sKSl0aHJvdyBuZXcgRXJyb3IoIk1hbGZvcm1lZCBBZGRpblVkZjogcGFkZGluZyA9ICIrYSsiICE9ICIraSk7cmV0dXJuIGUubCs9''@;'; put 'put ''aSxufShlLHQtMixyKSksaS5ib2R5PW58fGUucmVhZF9zaGlmdCh0LTIpLCJzdHJpbmciPT10eXBlb2YgbiYmKGkuTmFtZT1uKSxpfXZhciBOdT1bIl94bG5tLkNvbnNvbGlkYXRlX0FyZWEiLCJfeGxubS5BdXRvX09wZW4iLCJfeGxubS5BdXRvX0Nsb3NlIiwiX3hsbm0uRXh0cmFjdCIsIl94''@;'; put 'put ''bG5tLkRhdGFiYXNlIiwiX3hsbm0uQ3JpdGVyaWEiLCJfeGxubS5QcmludF9BcmVhIiwiX3hsbm0uUHJpbnRfVGl0bGVzIiwiX3hsbm0uUmVjb3JkZXIiLCJfeGxubS5EYXRhX0Zvcm0iLCJfeGxubS5BdXRvX0FjdGl2YXRlIiwiX3hsbm0uQXV0b19EZWFjdGl2YXRlIiwiX3hsbm0uU2hlZXRf''@;'; put 'put ''VGl0bGUiLCJfeGxubS5fRmlsdGVyRGF0YWJhc2UiXTtmdW5jdGlvbiBKcyhlLHQscil7dmFyIGE9ZS5sK3Qsbj1lLnJlYWRfc2hpZnQoMiksaT1lLnJlYWRfc2hpZnQoMSkscz1lLnJlYWRfc2hpZnQoMSksZj1lLnJlYWRfc2hpZnQociYmMj09ci5iaWZmPzE6MiksYz0wOyghcnx8ci5iaWZm''@;'; put 'put ''Pj01KSYmKDUhPXIuYmlmZiYmKGUubCs9MiksYz1lLnJlYWRfc2hpZnQoMiksNT09ci5iaWZmJiYoZS5sKz0yKSxlLmwrPTQpO3ZhciBvPUd0KGUscyxyKTszMiZuJiYobz1OdVtvLmNoYXJDb2RlQXQoMCldKTt2YXIgbD1hLWUubDtyJiYyPT1yLmJpZmYmJi0tbDt2YXIgaD1hIT1lLmwmJjAh''@;'; put 'put ''PT1mJiZsPjA/ZnVuY3Rpb24gS2QoZSx0LHIsYSl7dmFyIHMsbj1lLmwrdCxpPUhhKGUsYSxyKTtyZXR1cm4gbiE9PWUubCYmKHM9V2EoZSxuLWUubCxpLHIpKSxbaSxzXX0oZSxsLHIsZik6W107cmV0dXJue2NoS2V5OmksTmFtZTpvLGl0YWI6YyxyZ2NlOmh9fWZ1bmN0aW9uIHFzKGUsdCxy''@;'; put 'put ''KXtpZihyLmJpZmY8OClyZXR1cm4gZnVuY3Rpb24gYnUoZSx0LHIpezM9PWVbZS5sKzFdJiZlW2UubF0rKzt2YXIgYT1SYShlLDAscik7cmV0dXJuIDM9PWEuY2hhckNvZGVBdCgwKT9hLnNsaWNlKDEpOmF9KGUsMCxyKTtmb3IodmFyIGE9W10sbj1lLmwrdCxpPWUucmVhZF9zaGlmdChyLmJp''@;'; put 'put ''ZmY+OD80OjIpOzAhPWktLTspYS5wdXNoKFZsKGUsMCxyKSk7aWYoZS5sIT1uKXRocm93IG5ldyBFcnJvcigiQmFkIEV4dGVyblNoZWV0OiAiK2UubCsiICE9ICIrbik7cmV0dXJuIGF9ZnVuY3Rpb24gWnMoZSx0LHIpe3ZhciBhPUdsKGUsNik7c3dpdGNoKHIuYmlmZil7Y2FzZSAyOmUubCsr''@;'; put 'put ''LHQtPTc7YnJlYWs7Y2FzZSAzOmNhc2UgNDplLmwrPTIsdC09ODticmVhaztkZWZhdWx0OmUubCs9Nix0LT0xMn1yZXR1cm5bYSwkZChlLHQscildfXZhciBYdT17ODpmdW5jdGlvbihlLHQpe3ZhciByPWUubCt0O2UubCs9MTA7dmFyIGE9ZS5yZWFkX3NoaWZ0KDIpO2UubCs9NCxlLmwrPTIs''@;'; put 'put ''ZS5sKz0yLGUubCs9MixlLmwrPTQ7dmFyIG49ZS5yZWFkX3NoaWZ0KDEpO3JldHVybiBlLmwrPW4sZS5sPXIse2ZtdDphfX19O2Z1bmN0aW9uIFFzKGUsdCxyKXtpZighci5jZWxsU3R5bGVzKXJldHVybiBwcihlLHQpO3ZhciBhPXImJnIuYmlmZj49MTI/NDoyLG49ZS5yZWFkX3NoaWZ0KGEp''@;'; put 'put ''LGk9ZS5yZWFkX3NoaWZ0KGEpLHM9ZS5yZWFkX3NoaWZ0KGEpLGY9ZS5yZWFkX3NoaWZ0KGEpLGM9ZS5yZWFkX3NoaWZ0KDIpOzI9PWEmJihlLmwrPTIpO3ZhciBvPXtzOm4sZTppLHc6cyxpeGZlOmYsZmxhZ3M6Y307cmV0dXJuKHIuYmlmZj49NXx8IXIuYmlmZikmJihvLmxldmVsPWM+Pjgm''@;'; put 'put ''Nyksb312YXIgaWg9bnQsc2g9YnMsZmg9TmEsbWg9WzIsMyw0OCw0OSwxMzEsMTM5LDE0MCwyNDVdLFRuPWZ1bmN0aW9uKCl7dmFyIGU9ezE6NDM3LDI6ODUwLDM6MTI1Miw0OjFlNCwxMDA6ODUyLDEwMTo4NjYsMTAyOjg2NSwxMDM6ODYxLDEwNDo4OTUsMTA1OjYyMCwxMDY6NzM3LDEwNzo4''@;'; put 'put ''NTcsMTIwOjk1MCwxMjE6OTQ5LDEyMjo5MzYsMTIzOjkzMiwxMjQ6ODc0LDEyNToxMjU1LDEyNjoxMjU2LDE1MDoxMDAwNywxNTE6MTAwMjksMTUyOjEwMDA2LDIwMDoxMjUwLDIwMToxMjUxLDIwMjoxMjU0LDIwMzoxMjUzLDA6MjAxMjcsODo4NjUsOTo0MzcsMTA6ODUwLDExOjQzNywxMzo0''@;'; put 'put ''MzcsMTQ6ODUwLDE1OjQzNywxNjo4NTAsMTc6NDM3LDE4Ojg1MCwxOTo5MzIsMjA6ODUwLDIxOjQzNywyMjo4NTAsMjM6ODY1LDI0OjQzNywyNTo0MzcsMjY6ODUwLDI3OjQzNywyODo4NjMsMjk6ODUwLDMxOjg1MiwzNDo4NTIsMzU6ODUyLDM2Ojg2MCwzNzo4NTAsMzg6ODY2LDU1Ojg1MCw2''@;'; put 'put ''NDo4NTIsNzc6OTM2LDc4Ojk0OSw3OTo5NTAsODA6ODc0LDg3OjEyNTIsODg6MTI1Miw4OToxMjUyLDEwODo4NjMsMTM0OjczNywxMzU6ODUyLDEzNjo4NTcsMjA0OjEyNTcsMjU1OjE2OTY5fSx0PXMwKHsxOjQzNywyOjg1MCwzOjEyNTIsNDoxZTQsMTAwOjg1MiwxMDE6ODY2LDEwMjo4NjUs''@;'; put 'put ''MTAzOjg2MSwxMDQ6ODk1LDEwNTo2MjAsMTA2OjczNywxMDc6ODU3LDEyMDo5NTAsMTIxOjk0OSwxMjI6OTM2LDEyMzo5MzIsMTI0Ojg3NCwxMjU6MTI1NSwxMjY6MTI1NiwxNTA6MTAwMDcsMTUxOjEwMDI5LDE1MjoxMDAwNiwyMDA6MTI1MCwyMDE6MTI1MSwyMDI6MTI1NCwyMDM6MTI1Myww''@;'; put 'put ''OjIwMTI3fSk7ZnVuY3Rpb24gYShmLGMpe3ZhciBvPWN8fHt9O28uZGF0ZU5GfHwoby5kYXRlTkY9Inl5eXltbWRkIik7dmFyIGw9c2EoZnVuY3Rpb24gcihmLGMpe3ZhciBvPVtdLGw9X3QoMSk7c3dpdGNoKGMudHlwZSl7Y2FzZSJiYXNlNjQiOmw9SXIoT3IoZikpO2JyZWFrO2Nhc2UiYmlu''@;'; put 'put ''YXJ5IjpsPUlyKGYpO2JyZWFrO2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjpsPWZ9aHIobCwwKTt2YXIgaD1sLnJlYWRfc2hpZnQoMSkseD0hISgxMzYmaCksZD0hMSx2PSExO3N3aXRjaChoKXtjYXNlIDI6Y2FzZSAzOmNhc2UgMTMxOmNhc2UgMTM5OmNhc2UgMjQ1OmJyZWFrO2Nhc2UgNDg6''@;'; put 'put ''Y2FzZSA0OTpkPSEwLHg9ITA7YnJlYWs7Y2FzZSAxNDA6dj0hMDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiREJGIFVuc3VwcG9ydGVkIFZlcnNpb246ICIraC50b1N0cmluZygxNikpfXZhciB1PTAscD01MjE7Mj09aCYmKHU9bC5yZWFkX3NoaWZ0KDIpKSxsLmwrPTMsMiE9aCYm''@;'; put 'put ''KHU9bC5yZWFkX3NoaWZ0KDQpKSx1PjEwNDg1NzYmJih1PTFlNiksMiE9aCYmKHA9bC5yZWFkX3NoaWZ0KDIpKTt2YXIgaz1sLnJlYWRfc2hpZnQoMiksVD1jLmNvZGVwYWdlfHwxMjUyOzIhPWgmJihsLmwrPTE2LGwucmVhZF9zaGlmdCgxKSwwIT09bFtsLmxdJiYoVD1lW2xbbC5sXV0pLGwu''@;'; put 'put ''bCs9MSxsLmwrPTIpLHYmJihsLmwrPTM2KTtmb3IodmFyIGc9W10sTj17fSxNPU1hdGgubWluKGwubGVuZ3RoLDI9PWg/NTIxOnAtMTAtKGQ/MjY0OjApKSxJPXY/MzI6MTE7bC5sPE0mJjEzIT1sW2wubF07KXN3aXRjaChOPXt9LE4ubmFtZT1PZS51dGlscy5kZWNvZGUoVCxsLnNsaWNlKGwu''@;'; put 'put ''bCxsLmwrSSkpLnJlcGxhY2UoL1tcdTAwMDBcclxuXS4qJC9nLCIiKSxsLmwrPUksTi50eXBlPVN0cmluZy5mcm9tQ2hhckNvZGUobC5yZWFkX3NoaWZ0KDEpKSwyIT1oJiYhdiYmKE4ub2Zmc2V0PWwucmVhZF9zaGlmdCg0KSksTi5sZW49bC5yZWFkX3NoaWZ0KDEpLDI9PWgmJihOLm9mZnNl''@;'; put 'put ''dD1sLnJlYWRfc2hpZnQoMikpLE4uZGVjPWwucmVhZF9zaGlmdCgxKSxOLm5hbWUubGVuZ3RoJiZnLnB1c2goTiksMiE9aCYmKGwubCs9dj8xMzoxNCksTi50eXBlKXtjYXNlIkIiOighZHx8OCE9Ti5sZW4pJiZjLldURiYmY29uc29sZS5sb2coIlNraXBwaW5nICIrTi5uYW1lKyI6IitOLnR5''@;'; put 'put ''cGUpO2JyZWFrO2Nhc2UiRyI6Y2FzZSJQIjpjLldURiYmY29uc29sZS5sb2coIlNraXBwaW5nICIrTi5uYW1lKyI6IitOLnR5cGUpO2JyZWFrO2Nhc2UiKyI6Y2FzZSIwIjpjYXNlIkAiOmNhc2UiQyI6Y2FzZSJEIjpjYXNlIkYiOmNhc2UiSSI6Y2FzZSJMIjpjYXNlIk0iOmNhc2UiTiI6Y2Fz''@;'; put 'put ''ZSJPIjpjYXNlIlQiOmNhc2UiWSI6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gRmllbGQgVHlwZTogIitOLnR5cGUpfWlmKDEzIT09bFtsLmxdJiYobC5sPXAtMSksMTMhPT1sLnJlYWRfc2hpZnQoMSkpdGhyb3cgbmV3IEVycm9yKCJEQkYgVGVybWluYXRvciBub3Qg''@;'; put 'put ''Zm91bmQgIitsLmwrIiAiK2xbbC5sXSk7bC5sPXA7dmFyIHk9MCxQPTA7Zm9yKG9bMF09W10sUD0wO1AhPWcubGVuZ3RoOysrUClvWzBdW1BdPWdbUF0ubmFtZTtmb3IoO3UtLSA+MDspaWYoNDIhPT1sW2wubF0pZm9yKCsrbC5sLG9bKyt5XT1bXSxQPTAsUD0wO1AhPWcubGVuZ3RoOysrUCl7''@;'; put 'put ''dmFyIFI9bC5zbGljZShsLmwsbC5sK2dbUF0ubGVuKTtsLmwrPWdbUF0ubGVuLGhyKFIsMCk7dmFyIFY9T2UudXRpbHMuZGVjb2RlKFQsUik7c3dpdGNoKGdbUF0udHlwZSl7Y2FzZSJDIjpWLnRyaW0oKS5sZW5ndGgmJihvW3ldW1BdPVYucmVwbGFjZSgvXHMrJC8sIiIpKTticmVhaztjYXNl''@;'; put 'put ''IkQiOm9beV1bUF09OD09PVYubGVuZ3RoP25ldyBEYXRlKCtWLnNsaWNlKDAsNCksK1Yuc2xpY2UoNCw2KS0xLCtWLnNsaWNlKDYsOCkpOlY7YnJlYWs7Y2FzZSJGIjpvW3ldW1BdPXBhcnNlRmxvYXQoVi50cmltKCkpO2JyZWFrO2Nhc2UiKyI6Y2FzZSJJIjpvW3ldW1BdPXY/MjE0NzQ4MzY0''@;'; put 'put ''OF5SLnJlYWRfc2hpZnQoLTQsImkiKTpSLnJlYWRfc2hpZnQoNCwiaSIpO2JyZWFrO2Nhc2UiTCI6c3dpdGNoKFYudHJpbSgpLnRvVXBwZXJDYXNlKCkpe2Nhc2UiWSI6Y2FzZSJUIjpvW3ldW1BdPSEwO2JyZWFrO2Nhc2UiTiI6Y2FzZSJGIjpvW3ldW1BdPSExO2JyZWFrO2Nhc2UiIjpjYXNl''@;'; put 'put ''Ij8iOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJEQkYgVW5yZWNvZ25pemVkIEw6fCIrVisifCIpfWJyZWFrO2Nhc2UiTSI6aWYoIXgpdGhyb3cgbmV3IEVycm9yKCJEQkYgVW5leHBlY3RlZCBNRU1PIGZvciB0eXBlICIraC50b1N0cmluZygxNikpO29beV1bUF09IiMjTUVNTyMj''@;'; put 'put ''Iisodj9wYXJzZUludChWLnRyaW0oKSwxMCk6Ui5yZWFkX3NoaWZ0KDQpKTticmVhaztjYXNlIk4iOihWPVYucmVwbGFjZSgvXHUwMDAwL2csIiIpLnRyaW0oKSkmJiIuIiE9ViYmKG9beV1bUF09K1Z8fDApO2JyZWFrO2Nhc2UiQCI6b1t5XVtQXT1uZXcgRGF0ZShSLnJlYWRfc2hpZnQoLTgs''@;'; put 'put ''ImYiKS02MjEzNTY4MzJlNSk7YnJlYWs7Y2FzZSJUIjpvW3ldW1BdPW5ldyBEYXRlKDg2NGU1KihSLnJlYWRfc2hpZnQoNCktMjQ0MDU4OCkrUi5yZWFkX3NoaWZ0KDQpKTticmVhaztjYXNlIlkiOm9beV1bUF09Ui5yZWFkX3NoaWZ0KDQsImkiKS8xZTQrUi5yZWFkX3NoaWZ0KDQsImkiKS8x''@;'; put 'put ''ZTQqTWF0aC5wb3coMiwzMik7YnJlYWs7Y2FzZSJPIjpvW3ldW1BdPS1SLnJlYWRfc2hpZnQoLTgsImYiKTticmVhaztjYXNlIkIiOmlmKGQmJjg9PWdbUF0ubGVuKXtvW3ldW1BdPVIucmVhZF9zaGlmdCg4LCJmIik7YnJlYWt9Y2FzZSJHIjpjYXNlIlAiOlIubCs9Z1tQXS5sZW47YnJlYWs7''@;'; put 'put ''Y2FzZSIwIjppZigiX051bGxGbGFncyI9PT1nW1BdLm5hbWUpYnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbnN1cHBvcnRlZCBkYXRhIHR5cGUgIitnW1BdLnR5cGUpfX1lbHNlIGwubCs9aztpZigyIT1oJiZsLmw8bC5sZW5ndGgmJjI2IT1sW2wubCsrXSl0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIkRCRiBFT0YgTWFya2VyIG1pc3NpbmcgIisobC5sLTEpKyIgb2YgIitsLmxlbmd0aCsiICIrbFtsLmwtMV0udG9TdHJpbmcoMTYpKTtyZXR1cm4gYyYmYy5zaGVldFJvd3MmJihvPW8uc2xpY2UoMCxjLnNoZWV0Um93cykpLGMuREJGPWcsb30oZixvKSxvKTtyZXR1cm4gbFsiIWNv''@;'; put 'put ''bHMiXT1vLkRCRi5tYXAoZnVuY3Rpb24oaCl7cmV0dXJue3djaDpoLmxlbixEQkY6aH19KSxkZWxldGUgby5EQkYsbH12YXIgaT17Qjo4LEM6MjUwLEw6MSxEOjgsIj8iOjAsIiI6MH07cmV0dXJue3RvX3dvcmtib29rOmZ1bmN0aW9uIG4oZixjKXt0cnl7cmV0dXJuIEZ0KGEoZixjKSxjKX1j''@;'; put 'put ''YXRjaChvKXtpZihjJiZjLldURil0aHJvdyBvfXJldHVybntTaGVldE5hbWVzOltdLFNoZWV0czp7fX19LHRvX3NoZWV0OmEsZnJvbV9zaGVldDpmdW5jdGlvbiBzKGYsYyl7dmFyIG89Y3x8e307aWYoK28uY29kZXBhZ2U+PTAmJk1yKCtvLmNvZGVwYWdlKSwic3RyaW5nIj09by50eXBlKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigiQ2Fubm90IHdyaXRlIERCRiB0byBKUyBzdHJpbmciKTt2YXIgbD1TcigpLGg9ZnVuY3Rpb24gTjAoZSx0KXtpZihudWxsPT1lfHxudWxsPT1lWyIhcmVmIl0pcmV0dXJuW107dmFyIHI9e3Q6Im4iLHY6MH0sYT0wLG49MSxpPVtdLHM9MCxmPSIiLGM9e3M6e3I6MCxj''@;'; put 'put ''OjB9LGU6e3I6MCxjOjB9fSxvPXR8fHt9LGw9bnVsbCE9by5yYW5nZT9vLnJhbmdlOmVbIiFyZWYiXTtzd2l0Y2goMT09PW8uaGVhZGVyP2E9MToiQSI9PT1vLmhlYWRlcj9hPTI6QXJyYXkuaXNBcnJheShvLmhlYWRlcik/YT0zOm51bGw9PW8uaGVhZGVyJiYoYT0wKSx0eXBlb2YgbCl7Y2Fz''@;'; put 'put ''ZSJzdHJpbmciOmM9RGUobCk7YnJlYWs7Y2FzZSJudW1iZXIiOihjPURlKGVbIiFyZWYiXSkpLnMucj1sO2JyZWFrO2RlZmF1bHQ6Yz1sfWE+MCYmKG49MCk7dmFyIGg9S2UoYy5zLnIpLHg9W10sZD1bXSx2PTAsdT0wLHA9QXJyYXkuaXNBcnJheShlKSxrPWMucy5yLFQ9MCxnPXt9O3AmJiFl''@;'; put 'put ''W2tdJiYoZVtrXT1bXSk7dmFyIE49by5za2lwSGlkZGVuJiZlWyIhY29scyJdfHxbXSxNPW8uc2tpcEhpZGRlbiYmZVsiIXJvd3MiXXx8W107Zm9yKFQ9Yy5zLmM7VDw9Yy5lLmM7KytUKWlmKCEoTltUXXx8e30pLmhpZGRlbilzd2l0Y2goeFtUXT1IZShUKSxyPXA/ZVtrXVtUXTplW3hbVF0r''@;'; put 'put ''aF0sYSl7Y2FzZSAxOmlbVF09VC1jLnMuYzticmVhaztjYXNlIDI6aVtUXT14W1RdO2JyZWFrO2Nhc2UgMzppW1RdPW8uaGVhZGVyW1QtYy5zLmNdO2JyZWFrO2RlZmF1bHQ6aWYobnVsbD09ciYmKHI9e3c6Il9fRU1QVFkiLHQ6InMifSksZj1zPWF0KHIsbnVsbCxvKSx1PWdbc118fDApe2Rv''@;'; put 'put ''e2Y9cysiXyIrdSsrfXdoaWxlKGdbZl0pO2dbc109dSxnW2ZdPTF9ZWxzZSBnW3NdPTE7aVtUXT1mfWZvcihrPWMucy5yK247azw9Yy5lLnI7KytrKWlmKCEoTVtrXXx8e30pLmhpZGRlbil7dmFyIEk9X2MoZSxjLGsseCxhLGkscCxvKTsoITE9PT1JLmlzZW1wdHl8fCgxPT09YT8hMSE9PW8u''@;'; put 'put ''Ymxhbmtyb3dzOm8uYmxhbmtyb3dzKSkmJihkW3YrK109SS5yb3cpfXJldHVybiBkLmxlbmd0aD12LGR9KGYse2hlYWRlcjoxLHJhdzohMCxjZWxsRGF0ZXM6ITB9KSx4PWhbMF0sZD1oLnNsaWNlKDEpLHY9ZlsiIWNvbHMiXXx8W10sdT0wLHA9MCxrPTAsVD0xO2Zvcih1PTA7dTx4Lmxlbmd0''@;'; put 'put ''aDsrK3UpaWYoKCh2W3VdfHx7fSkuREJGfHx7fSkubmFtZSl4W3VdPXZbdV0uREJGLm5hbWUsKytrO2Vsc2UgaWYobnVsbCE9eFt1XSl7aWYoKytrLCJudW1iZXIiPT10eXBlb2YgeFt1XSYmKHhbdV09eFt1XS50b1N0cmluZygxMCkpLCJzdHJpbmciIT10eXBlb2YgeFt1XSl0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIkRCRiBJbnZhbGlkIGNvbHVtbiBuYW1lICIreFt1XSsiIHwiK3R5cGVvZiB4W3VdKyJ8Iik7aWYoeC5pbmRleE9mKHhbdV0pIT09dSlmb3IocD0wO3A8MTAyNDsrK3ApaWYoLTE9PXguaW5kZXhPZih4W3VdKyJfIitwKSl7eFt1XSs9Il8iK3A7YnJlYWt9fXZhciBnPURlKGZbIiFy''@;'; put 'put ''ZWYiXSksTj1bXSxNPVtdLEk9W107Zm9yKHU9MDt1PD1nLmUuYy1nLnMuYzsrK3Upe3ZhciB5PSIiLFA9IiIsUj0wLFY9W107Zm9yKHA9MDtwPGQubGVuZ3RoOysrcCludWxsIT1kW3BdW3VdJiZWLnB1c2goZFtwXVt1XSk7aWYoMCE9Vi5sZW5ndGgmJm51bGwhPXhbdV0pe2ZvcihwPTA7cDxW''@;'; put 'put ''Lmxlbmd0aDsrK3Ape3N3aXRjaCh0eXBlb2YgVltwXSl7Y2FzZSJudW1iZXIiOlA9IkIiO2JyZWFrO2Nhc2Uic3RyaW5nIjpkZWZhdWx0OlA9IkMiO2JyZWFrO2Nhc2UiYm9vbGVhbiI6UD0iTCI7YnJlYWs7Y2FzZSJvYmplY3QiOlA9VltwXWluc3RhbmNlb2YgRGF0ZT8iRCI6IkMifVI9TWF0''@;'; put 'put ''aC5tYXgoUixTdHJpbmcoVltwXSkubGVuZ3RoKSx5PXkmJnkhPVA/IkMiOlB9Uj4yNTAmJihSPTI1MCksIkMiPT0oUD0oKHZbdV18fHt9KS5EQkZ8fHt9KS50eXBlKSYmdlt1XS5EQkYubGVuPlImJihSPXZbdV0uREJGLmxlbiksIkIiPT15JiYiTiI9PVAmJih5PSJOIixJW3VdPXZbdV0uREJG''@;'; put 'put ''LmRlYyxSPXZbdV0uREJGLmxlbiksTVt1XT0iQyI9PXl8fCJOIj09UD9SOmlbeV18fDAsVCs9TVt1XSxOW3VdPXl9ZWxzZSBOW3VdPSI/In12YXIgWD1sLm5leHQoMzIpO2ZvcihYLndyaXRlX3NoaWZ0KDQsMzE4OTAyNTc2KSxYLndyaXRlX3NoaWZ0KDQsZC5sZW5ndGgpLFgud3JpdGVfc2hp''@;'; put 'put ''ZnQoMiwyOTYrMzIqayksWC53cml0ZV9zaGlmdCgyLFQpLHU9MDt1PDQ7Kyt1KVgud3JpdGVfc2hpZnQoNCwwKTtmb3IoWC53cml0ZV9zaGlmdCg0LCgrdFtSdF18fDMpPDw4KSx1PTAscD0wO3U8eC5sZW5ndGg7Kyt1KWlmKG51bGwhPXhbdV0pe3ZhciBiPWwubmV4dCgzMiksZWU9KHhbdV0u''@;'; put 'put ''c2xpY2UoLTEwKSsiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIpLnNsaWNlKDAsMTEpO2Iud3JpdGVfc2hpZnQoMSxlZSwic2JjcyIpLGIud3JpdGVfc2hpZnQoMSwiPyI9PU5bdV0/IkMiOk5bdV0sInNiY3MiKSxiLndyaXRlX3NoaWZ0KDQscCksYi53cml0ZV9zaGlmdCgxLE1bdV18fGlbTlt1''@;'; put 'put ''XV18fDApLGIud3JpdGVfc2hpZnQoMSxJW3VdfHwwKSxiLndyaXRlX3NoaWZ0KDEsMiksYi53cml0ZV9zaGlmdCg0LDApLGIud3JpdGVfc2hpZnQoMSwwKSxiLndyaXRlX3NoaWZ0KDQsMCksYi53cml0ZV9zaGlmdCg0LDApLHArPU1bdV18fGlbTlt1XV18fDB9dmFyIGxlPWwubmV4dCgyNjQp''@;'; put 'put ''O2ZvcihsZS53cml0ZV9zaGlmdCg0LDEzKSx1PTA7dTw2NTsrK3UpbGUud3JpdGVfc2hpZnQoNCwwKTtmb3IodT0wO3U8ZC5sZW5ndGg7Kyt1KXt2YXIgcmU9bC5uZXh0KFQpO2ZvcihyZS53cml0ZV9zaGlmdCgxLDApLHA9MDtwPHgubGVuZ3RoOysrcClpZihudWxsIT14W3BdKXN3aXRjaChO''@;'; put 'put ''W3BdKXtjYXNlIkwiOnJlLndyaXRlX3NoaWZ0KDEsbnVsbD09ZFt1XVtwXT82MzpkW3VdW3BdPzg0OjcwKTticmVhaztjYXNlIkIiOnJlLndyaXRlX3NoaWZ0KDgsZFt1XVtwXXx8MCwiZiIpO2JyZWFrO2Nhc2UiTiI6dmFyIGRlPSIwIjtmb3IoIm51bWJlciI9PXR5cGVvZiBkW3VdW3BdJiYo''@;'; put 'put ''ZGU9ZFt1XVtwXS50b0ZpeGVkKElbcF18fDApKSxrPTA7azxNW3BdLWRlLmxlbmd0aDsrK2spcmUud3JpdGVfc2hpZnQoMSwzMik7cmUud3JpdGVfc2hpZnQoMSxkZSwic2JjcyIpO2JyZWFrO2Nhc2UiRCI6ZFt1XVtwXT8ocmUud3JpdGVfc2hpZnQoNCwoIjAwMDAiK2RbdV1bcF0uZ2V0RnVs''@;'; put 'put ''bFllYXIoKSkuc2xpY2UoLTQpLCJzYmNzIikscmUud3JpdGVfc2hpZnQoMiwoIjAwIisoZFt1XVtwXS5nZXRNb250aCgpKzEpKS5zbGljZSgtMiksInNiY3MiKSxyZS53cml0ZV9zaGlmdCgyLCgiMDAiK2RbdV1bcF0uZ2V0RGF0ZSgpKS5zbGljZSgtMiksInNiY3MiKSk6cmUud3JpdGVfc2hp''@;'; put 'put ''ZnQoOCwiMDAwMDAwMDAiLCJzYmNzIik7YnJlYWs7Y2FzZSJDIjp2YXIgdWU9U3RyaW5nKG51bGwhPWRbdV1bcF0/ZFt1XVtwXToiIikuc2xpY2UoMCxNW3BdKTtmb3IocmUud3JpdGVfc2hpZnQoMSx1ZSwic2JjcyIpLGs9MDtrPE1bcF0tdWUubGVuZ3RoOysraylyZS53cml0ZV9zaGlmdCgx''@;'; put 'put ''LDMyKX19cmV0dXJuIGwubmV4dCgxKS53cml0ZV9zaGlmdCgxLDI2KSxsLmVuZCgpfX19KCksZWY9ZnVuY3Rpb24oKXt2YXIgZT17QUE6Ilx4YzAiLEJBOiJceGMxIixDQToiXHhjMiIsREE6MTk1LEhBOiJceGM0IixKQToxOTcsQUU6Ilx4YzgiLEJFOiJceGM5IixDRToiXHhjYSIsSEU6Ilx4''@;'; put 'put ''Y2IiLEFJOiJceGNjIixCSToiXHhjZCIsQ0k6Ilx4Y2UiLEhJOiJceGNmIixBTzoiXHhkMiIsQk86Ilx4ZDMiLENPOiJceGQ0IixETzoyMTMsSE86Ilx4ZDYiLEFVOiJceGQ5IixCVToiXHhkYSIsQ1U6Ilx4ZGIiLEhVOiJceGRjIixBYToiXHhlMCIsQmE6Ilx4ZTEiLENhOiJceGUyIixEYToy''@;'; put 'put ''MjcsSGE6Ilx4ZTQiLEphOjIyOSxBZToiXHhlOCIsQmU6Ilx4ZTkiLENlOiJceGVhIixIZToiXHhlYiIsQWk6Ilx4ZWMiLEJpOiJceGVkIixDaToiXHhlZSIsSGk6Ilx4ZWYiLEFvOiJceGYyIixCbzoiXHhmMyIsQ286Ilx4ZjQiLERvOjI0NSxIbzoiXHhmNiIsQXU6Ilx4ZjkiLEJ1OiJceGZh''@;'; put 'put ''IixDdToiXHhmYiIsSHU6Ilx4ZmMiLEtDOiJceGM3IixLYzoiXHhlNyIscToiXHhlNiIsejoiXHUwMTUzIixhOiJceGM2IixqOiJcdTAxNTIiLEROOjIwOSxEbjoyNDEsSHk6MjU1LFM6MTY5LGM6MTcwLFI6MTc0LCJCICI6MTgwLDA6MTc2LDE6MTc3LDI6MTc4LDM6MTc5LDU6MTgxLDY6MTgy''@;'; put 'put ''LDc6MTgzLFE6MTg1LGs6MTg2LGI6MjA4LGk6MjE2LGw6MjIyLHM6MjQwLHk6MjQ4LCIhIjoxNjEsJyInOjE2MiwiIyI6MTYzLCIoIjoxNjQsIiUiOjE2NSwiJyI6MTY3LCJIICI6MTY4LCIrIjoxNzEsIjsiOjE4NywiPCI6MTg4LCI9IjoxODksIj4iOjE5MCwiPyI6MTkxLCJ7IjoyMjN9LHQ9''@;'; put 'put ''bmV3IFJlZ0V4cCgiXHgxYk4oIiskZShlKS5qb2luKCJ8IikucmVwbGFjZSgvXHxcfFx8LywifFxcfHwiKS5yZXBsYWNlKC8oWz8oKStdKS9nLCJcXCQxIikrInxcXHwpIiwiZ20iKSxyPWZ1bmN0aW9uKHgsZCl7dmFyIHY9ZVtkXTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHY/QjAodik6dn0s''@;'; put 'put ''YT1mdW5jdGlvbih4LGQsdil7dmFyIHU9ZC5jaGFyQ29kZUF0KDApLTMyPDw0fHYuY2hhckNvZGVBdCgwKS00ODtyZXR1cm4gNTk9PXU/eDpCMCh1KX07ZnVuY3Rpb24gaSh4LGQpe3ZhciBYLHY9eC5zcGxpdCgvW1xuXHJdKy8pLHU9LTEscD0tMSxrPTAsVD0wLGc9W10sTj1bXSxNPW51bGws''@;'; put 'put ''ST17fSx5PVtdLFA9W10sUj1bXSxWPTA7Zm9yKCtkLmNvZGVwYWdlPj0wJiZNcigrZC5jb2RlcGFnZSk7ayE9PXYubGVuZ3RoOysrayl7Vj0wO3ZhciByZSxiPXZba10udHJpbSgpLnJlcGxhY2UoL1x4MUIoW1x4MjAtXHgyRl0pKFtceDMwLVx4M0ZdKS9nLGEpLnJlcGxhY2UodCxyKSxlZT1i''@;'; put 'put ''LnJlcGxhY2UoLzs7L2csIlwwIikuc3BsaXQoIjsiKS5tYXAoZnVuY3Rpb24oRCl7cmV0dXJuIEQucmVwbGFjZSgvXHUwMDAwL2csIjsiKX0pO2lmKGIubGVuZ3RoPjApc3dpdGNoKGVlWzBdKXtjYXNlIklEIjpjYXNlIkUiOmNhc2UiQiI6Y2FzZSJPIjpjYXNlIlciOmJyZWFrO2Nhc2UiUCI6''@;'; put 'put ''IlAiPT1lZVsxXS5jaGFyQXQoMCkmJk4ucHVzaChiLnNsaWNlKDMpLnJlcGxhY2UoLzs7L2csIjsiKSk7YnJlYWs7Y2FzZSJDIjp2YXIgZGU9ITEsdWU9ITEsRmU9ITEsY2U9ITEseGU9LTEsSz0tMTtmb3IoVD0xO1Q8ZWUubGVuZ3RoOysrVClzd2l0Y2goZWVbVF0uY2hhckF0KDApKXtjYXNl''@;'; put 'put ''IkEiOmNhc2UiRyI6YnJlYWs7Y2FzZSJYIjpwPXBhcnNlSW50KGVlW1RdLnNsaWNlKDEpKS0xLHVlPSEwO2JyZWFrO2Nhc2UiWSI6Zm9yKHU9cGFyc2VJbnQoZWVbVF0uc2xpY2UoMSkpLTEsdWV8fChwPTApLFg9Zy5sZW5ndGg7WDw9dTsrK1gpZ1tYXT1bXTticmVhaztjYXNlIksiOiciJz09''@;'; put 'put ''PShyZT1lZVtUXS5zbGljZSgxKSkuY2hhckF0KDApP3JlPXJlLnNsaWNlKDEscmUubGVuZ3RoLTEpOiJUUlVFIj09PXJlP3JlPSEwOiJGQUxTRSI9PT1yZT9yZT0hMTppc05hTihKcihyZSkpP2lzTmFOKGFhKHJlKS5nZXREYXRlKCkpfHwocmU9WGUocmUpKToocmU9SnIocmUpLG51bGwhPT1N''@;'; put 'put ''JiZidChNKSYmKHJlPW8wKHJlKSkpLGRlPSEwO2JyZWFrO2Nhc2UiRSI6Y2U9ITA7dmFyIEM9dWEoZWVbVF0uc2xpY2UoMSkse3I6dSxjOnB9KTtnW3VdW3BdPVtnW3VdW3BdLENdO2JyZWFrO2Nhc2UiUyI6RmU9ITAsZ1t1XVtwXT1bZ1t1XVtwXSwiUzVTIl07YnJlYWs7Y2FzZSJSIjp4ZT1w''@;'; put 'put ''YXJzZUludChlZVtUXS5zbGljZSgxKSktMTticmVhaztjYXNlIkMiOks9cGFyc2VJbnQoZWVbVF0uc2xpY2UoMSkpLTE7YnJlYWs7ZGVmYXVsdDppZihkJiZkLldURil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgYmFkIHJlY29yZCAiK2IpfWlmKGRlJiYoZ1t1XVtwXSYmMj09Z1t1XVtwXS5sZW5n''@;'; put 'put ''dGg/Z1t1XVtwXVswXT1yZTpnW3VdW3BdPXJlLE09bnVsbCksRmUpe2lmKGNlKXRocm93IG5ldyBFcnJvcigiU1lMSyBzaGFyZWQgZm9ybXVsYSBjYW5ub3QgaGF2ZSBvd24gZm9ybXVsYSIpO3ZhciBVPXhlPi0xJiZnW3hlXVtLXTtpZighVXx8IVVbMV0pdGhyb3cgbmV3IEVycm9yKCJTWUxL''@;'; put 'put ''IHNoYXJlZCBmb3JtdWxhIGNhbm5vdCBmaW5kIGJhc2UiKTtnW3VdW3BdWzFdPWtmKFVbMV0se3I6dS14ZSxjOnAtS30pfWJyZWFrO2Nhc2UiRiI6dmFyIE89MDtmb3IoVD0xO1Q8ZWUubGVuZ3RoOysrVClzd2l0Y2goZWVbVF0uY2hhckF0KDApKXtjYXNlIlgiOnA9cGFyc2VJbnQoZWVbVF0u''@;'; put 'put ''c2xpY2UoMSkpLTEsKytPO2JyZWFrO2Nhc2UiWSI6Zm9yKHU9cGFyc2VJbnQoZWVbVF0uc2xpY2UoMSkpLTEsWD1nLmxlbmd0aDtYPD11OysrWClnW1hdPVtdO2JyZWFrO2Nhc2UiTSI6Vj1wYXJzZUludChlZVtUXS5zbGljZSgxKSkvMjA7YnJlYWs7Y2FzZSJGIjpjYXNlIkciOmNhc2UiUyI6''@;'; put 'put ''Y2FzZSJEIjpjYXNlIk4iOmJyZWFrO2Nhc2UiUCI6TT1OW3BhcnNlSW50KGVlW1RdLnNsaWNlKDEpKV07YnJlYWs7Y2FzZSJXIjpmb3IoUj1lZVtUXS5zbGljZSgxKS5zcGxpdCgiICIpLFg9cGFyc2VJbnQoUlswXSwxMCk7WDw9cGFyc2VJbnQoUlsxXSwxMCk7KytYKVY9cGFyc2VJbnQoUlsy''@;'; put 'put ''XSwxMCksUFtYLTFdPTA9PT1WP3toaWRkZW46ITB9Ont3Y2g6Vn0sS3QoUFtYLTFdKTticmVhaztjYXNlIkMiOlBbcD1wYXJzZUludChlZVtUXS5zbGljZSgxKSktMV18fChQW3BdPXt9KTticmVhaztjYXNlIlIiOnlbdT1wYXJzZUludChlZVtUXS5zbGljZSgxKSktMV18fCh5W3VdPXt9KSxW''@;'; put 'put ''PjA/KHlbdV0uaHB0PVYseVt1XS5ocHg9b2EoVikpOjA9PT1WJiYoeVt1XS5oaWRkZW49ITApO2JyZWFrO2RlZmF1bHQ6aWYoZCYmZC5XVEYpdGhyb3cgbmV3IEVycm9yKCJTWUxLIGJhZCByZWNvcmQgIitiKX1PPDEmJihNPW51bGwpO2JyZWFrO2RlZmF1bHQ6aWYoZCYmZC5XVEYpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJTWUxLIGJhZCByZWNvcmQgIitiKX19cmV0dXJuIHkubGVuZ3RoPjAmJihJWyIhcm93cyJdPXkpLFAubGVuZ3RoPjAmJihJWyIhY29scyJdPVApLGQmJmQuc2hlZXRSb3dzJiYoZz1nLnNsaWNlKDAsZC5zaGVldFJvd3MpKSxbZyxJXX1mdW5jdGlvbiBzKHgsZCl7dmFyIHY9''@;'; put 'put ''ZnVuY3Rpb24gbih4LGQpe3N3aXRjaChkLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gaShPcih4KSxkKTtjYXNlImJpbmFyeSI6cmV0dXJuIGkoeCxkKTtjYXNlImJ1ZmZlciI6cmV0dXJuIGkoU2UmJkJ1ZmZlci5pc0J1ZmZlcih4KT94LnRvU3RyaW5nKCJiaW5hcnkiKTp3dCh4KSxkKTtj''@;'; put 'put ''YXNlImFycmF5IjpyZXR1cm4gaShQdCh4KSxkKX10aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrZC50eXBlKX0oeCxkKSxwPXZbMV0saz1zYSh2WzBdLGQpO3JldHVybiAkZShwKS5mb3JFYWNoKGZ1bmN0aW9uKFQpe2tbVF09cFtUXX0pLGt9ZnVuY3Rpb24gYyh4LGQsdix1''@;'; put 'put ''KXt2YXIgcD0iQztZIisodisxKSsiO1giKyh1KzEpKyI7SyI7c3dpdGNoKHgudCl7Y2FzZSJuIjpwKz14LnZ8fDAseC5mJiYheC5GJiYocCs9IjtFIitJbih4LmYse3I6dixjOnV9KSk7YnJlYWs7Y2FzZSJiIjpwKz14LnY/IlRSVUUiOiJGQUxTRSI7YnJlYWs7Y2FzZSJlIjpwKz14Lnd8fHgu''@;'; put 'put ''djticmVhaztjYXNlImQiOnArPSciJysoeC53fHx4LnYpKyciJzticmVhaztjYXNlInMiOnArPSciJyt4LnYucmVwbGFjZSgvIi9nLCIiKS5yZXBsYWNlKC87L2csIjs7IikrJyInfXJldHVybiBwfXJldHVybiBlWyJ8Il09MjU0LHt0b193b3JrYm9vazpmdW5jdGlvbiBmKHgsZCl7cmV0dXJu''@;'; put 'put ''IEZ0KHMoeCxkKSxkKX0sdG9fc2hlZXQ6cyxmcm9tX3NoZWV0OmZ1bmN0aW9uIGgoeCxkKXt2YXIgayx2PVsiSUQ7UFdYTDtOO0UiXSx1PVtdLHA9RGUoeFsiIXJlZiJdKSxUPUFycmF5LmlzQXJyYXkoeCksZz0iXHJcbiI7di5wdXNoKCJQO1BHZW5lcmFsIiksdi5wdXNoKCJGO1AwO0RHMEc4''@;'; put 'put ''O00yNTUiKSx4WyIhY29scyJdJiZmdW5jdGlvbiBvKHgsZCl7ZC5mb3JFYWNoKGZ1bmN0aW9uKHYsdSl7dmFyIHA9IkY7VyIrKHUrMSkrIiAiKyh1KzEpKyIgIjt2LmhpZGRlbj9wKz0iMCI6KCJudW1iZXIiPT10eXBlb2Ygdi53aWR0aCYmIXYud3B4JiYodi53cHg9UGEodi53aWR0aCkpLCJu''@;'; put 'put ''dW1iZXIiPT10eXBlb2Ygdi53cHgmJiF2LndjaCYmKHYud2NoPUxhKHYud3B4KSksIm51bWJlciI9PXR5cGVvZiB2LndjaCYmKHArPU1hdGgucm91bmQodi53Y2gpKSksIiAiIT1wLmNoYXJBdChwLmxlbmd0aC0xKSYmeC5wdXNoKHApfSl9KHYseFsiIWNvbHMiXSkseFsiIXJvd3MiXSYmZnVu''@;'; put 'put ''Y3Rpb24gbCh4LGQpe2QuZm9yRWFjaChmdW5jdGlvbih2LHUpe3ZhciBwPSJGOyI7di5oaWRkZW4/cCs9Ik0wOyI6di5ocHQ/cCs9Ik0iKzIwKnYuaHB0KyI7Ijp2LmhweCYmKHArPSJNIisyMCpCYSh2LmhweCkrIjsiKSxwLmxlbmd0aD4yJiZ4LnB1c2gocCsiUiIrKHUrMSkpfSl9KHYseFsi''@;'; put 'put ''IXJvd3MiXSksdi5wdXNoKCJCO1kiKyhwLmUuci1wLnMucisxKSsiO1giKyhwLmUuYy1wLnMuYysxKSsiO0QiK1twLnMuYyxwLnMucixwLmUuYyxwLmUucl0uam9pbigiICIpKTtmb3IodmFyIE49cC5zLnI7Tjw9cC5lLnI7KytOKWZvcih2YXIgTT1wLnMuYztNPD1wLmUuYzsrK00pe3ZhciBJ''@;'; put 'put ''PWdlKHtyOk4sYzpNfSk7KGs9VD8oeFtOXXx8W10pW01dOnhbSV0pJiYobnVsbCE9ay52fHxrLmYmJiFrLkYpJiZ1LnB1c2goYyhrLDAsTixNKSl9cmV0dXJuIHYuam9pbihnKStnK3Uuam9pbihnKStnKyJFIitnfX19KCkscmY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGkscyl7Zm9yKHZhciBm''@;'; put 'put ''PWkuc3BsaXQoIlxuIiksYz0tMSxvPS0xLGw9MCxoPVtdO2whPT1mLmxlbmd0aDsrK2wpaWYoIkJPVCIhPT1mW2xdLnRyaW0oKSl7aWYoIShjPDApKXtmb3IodmFyIHg9ZltsXS50cmltKCkuc3BsaXQoIiwiKSxkPXhbMF0sdj14WzFdLHU9ZlsrK2xdfHwiIjsxJih1Lm1hdGNoKC9bIl0vZyl8''@;'; put 'put ''fFtdKS5sZW5ndGgmJmw8Zi5sZW5ndGgtMTspdSs9IlxuIitmWysrbF07c3dpdGNoKHU9dS50cmltKCksK2Qpe2Nhc2UtMTppZigiQk9UIj09PXUpe2hbKytjXT1bXSxvPTA7Y29udGludWV9aWYoIkVPRCIhPT11KXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIERJRiBzcGVjaWFsIGNv''@;'; put 'put ''bW1hbmQgIit1KTticmVhaztjYXNlIDA6aFtjXVtvXT0iVFJVRSI9PT11fHwiRkFMU0UiIT09dSYmKGlzTmFOKEpyKHYpKT9pc05hTihhYSh2KS5nZXREYXRlKCkpP3Y6WGUodik6SnIodikpLCsrbzticmVhaztjYXNlIDE6KHU9KHU9dS5zbGljZSgxLHUubGVuZ3RoLTEpKS5yZXBsYWNlKC8i''@;'; put 'put ''Ii9nLCciJykpJiZ1Lm1hdGNoKC9ePSIuKiIkLykmJih1PXUuc2xpY2UoMiwtMSkpLGhbY11bbysrXT0iIiE9PXU/dTpudWxsfWlmKCJFT0QiPT09dSlicmVha319ZWxzZSBoWysrY109W10sbz0wO3JldHVybiBzJiZzLnNoZWV0Um93cyYmKGg9aC5zbGljZSgwLHMuc2hlZXRSb3dzKSksaH1m''@;'; put 'put ''dW5jdGlvbiByKGkscyl7cmV0dXJuIHNhKGZ1bmN0aW9uIGUoaSxzKXtzd2l0Y2gocy50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIHQoT3IoaSkscyk7Y2FzZSJiaW5hcnkiOnJldHVybiB0KGkscyk7Y2FzZSJidWZmZXIiOnJldHVybiB0KFNlJiZCdWZmZXIuaXNCdWZmZXIoaSk/aS50b1N0''@;'; put 'put ''cmluZygiYmluYXJ5Iik6d3QoaSkscyk7Y2FzZSJhcnJheSI6cmV0dXJuIHQoUHQoaSkscyl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK3MudHlwZSl9KGkscykscyl9cmV0dXJue3RvX3dvcmtib29rOmZ1bmN0aW9uIGEoaSxzKXtyZXR1cm4gRnQocihpLHMpLHMpfSx0''@;'; put 'put ''b19zaGVldDpyLGZyb21fc2hlZXQ6ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihjLG8sbCxoLHgpe2MucHVzaChvKSxjLnB1c2gobCsiLCIraCksYy5wdXNoKCciJyt4LnJlcGxhY2UoLyIvZywnIiInKSsnIicpfSxzPWZ1bmN0aW9uKGMsbyxsLGgpe2MucHVzaChvKyIsIitsKSxjLnB1c2go''@;'; put 'put ''MT09bz8nIicraC5yZXBsYWNlKC8iL2csJyIiJykrJyInOmgpfTtyZXR1cm4gZnVuY3Rpb24oYyl7dmFyIGgsbz1bXSxsPURlKGNbIiFyZWYiXSkseD1BcnJheS5pc0FycmF5KGMpO2kobywiVEFCTEUiLDAsMSwic2hlZXRqcyIpLGkobywiVkVDVE9SUyIsMCxsLmUuci1sLnMucisxLCIiKSxp''@;'; put 'put ''KG8sIlRVUExFUyIsMCxsLmUuYy1sLnMuYysxLCIiKSxpKG8sIkRBVEEiLDAsMCwiIik7Zm9yKHZhciBkPWwucy5yO2Q8PWwuZS5yOysrZCl7cyhvLC0xLDAsIkJPVCIpO2Zvcih2YXIgdj1sLnMuYzt2PD1sLmUuYzsrK3Ype3ZhciB1PWdlKHtyOmQsYzp2fSk7aWYoaD14PyhjW2RdfHxbXSlb''@;'; put 'put ''dl06Y1t1XSlzd2l0Y2goaC50KXtjYXNlIm4iOnZhciBwPWgudzshcCYmbnVsbCE9aC52JiYocD1oLnYpLG51bGw9PXA/cyhvLDEsMCxoLmYmJiFoLkY/Ij0iK2guZjoiIik6cyhvLDAscCwiViIpO2JyZWFrO2Nhc2UiYiI6cyhvLDAsaC52PzE6MCxoLnY/IlRSVUUiOiJGQUxTRSIpO2JyZWFr''@;'; put 'put ''O2Nhc2UicyI6cyhvLDEsMCxpc05hTihoLnYpP2gudjonPSInK2gudisnIicpO2JyZWFrO2Nhc2UiZCI6aC53fHwoaC53PVJyKGguenx8cGVbMTRdLGlyKFhlKGgudikpKSkscyhvLDAsaC53LCJWIik7YnJlYWs7ZGVmYXVsdDpzKG8sMSwwLCIiKX1lbHNlIHMobywxLDAsIiIpfX1yZXR1cm4g''@;'; put 'put ''cyhvLC0xLDAsIkVPRCIpLG8uam9pbigiXHJcbiIpfX0oKX19KCksdGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGgpe3JldHVybiBoLnJlcGxhY2UoL1xcYi9nLCJcXCIpLnJlcGxhY2UoL1xcYy9nLCI6IikucmVwbGFjZSgvXFxuL2csIlxuIil9ZnVuY3Rpb24gdChoKXtyZXR1cm4gaC5yZXBs''@;'; put 'put ''YWNlKC9cXC9nLCJcXGIiKS5yZXBsYWNlKC86L2csIlxcYyIpLnJlcGxhY2UoL1xuL2csIlxcbiIpfWZ1bmN0aW9uIGEoaCx4KXtyZXR1cm4gc2EoZnVuY3Rpb24gcihoLHgpe2Zvcih2YXIgZD1oLnNwbGl0KCJcbiIpLHY9LTEsdT0tMSxwPTAsaz1bXTtwIT09ZC5sZW5ndGg7KytwKXt2YXIg''@;'; put 'put ''VD1kW3BdLnRyaW0oKS5zcGxpdCgiOiIpO2lmKCJjZWxsIj09PVRbMF0pe3ZhciBnPUdlKFRbMV0pO2lmKGsubGVuZ3RoPD1nLnIpZm9yKHY9ay5sZW5ndGg7djw9Zy5yOysrdilrW3ZdfHwoa1t2XT1bXSk7c3dpdGNoKHY9Zy5yLHU9Zy5jLFRbMl0pe2Nhc2UidCI6a1t2XVt1XT1lKFRbM10p''@;'; put 'put ''O2JyZWFrO2Nhc2UidiI6a1t2XVt1XT0rVFszXTticmVhaztjYXNlInZ0ZiI6dmFyIE49VFtULmxlbmd0aC0xXTtjYXNlInZ0YyI6a1t2XVt1XT0ibmwiPT09VFszXT8hIStUWzRdOitUWzRdLCJ2dGYiPT1UWzJdJiYoa1t2XVt1XT1ba1t2XVt1XSxOXSl9fX1yZXR1cm4geCYmeC5zaGVldFJv''@;'; put 'put ''d3MmJihrPWsuc2xpY2UoMCx4LnNoZWV0Um93cykpLGt9KGgseCkseCl9dmFyIGk9WyJzb2NpYWxjYWxjOnZlcnNpb246MS41IiwiTUlNRS1WZXJzaW9uOiAxLjAiLCJDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9U29jaWFsQ2FsY1NwcmVhZHNoZWV0Q29udHJvbFNh''@;'; put 'put ''dmUiXS5qb2luKCJcbiIpLHM9WyItLVNvY2lhbENhbGNTcHJlYWRzaGVldENvbnRyb2xTYXZlIiwiQ29udGVudC10eXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04Il0uam9pbigiXG4iKSsiXG4iLGY9WyIjIFNvY2lhbENhbGMgU3ByZWFkc2hlZXQgQ29udHJvbCBTYXZlIiwicGFydDpz''@;'; put 'put ''aGVldCJdLmpvaW4oIlxuIiksYz0iLS1Tb2NpYWxDYWxjU3ByZWFkc2hlZXRDb250cm9sU2F2ZS0tIjtmdW5jdGlvbiBvKGgpe2lmKCFofHwhaFsiIXJlZiJdKXJldHVybiIiO2Zvcih2YXIgdix4PVtdLGQ9W10sdT0iIixwPVByKGhbIiFyZWYiXSksaz1BcnJheS5pc0FycmF5KGgpLFQ9cC5z''@;'; put 'put ''LnI7VDw9cC5lLnI7KytUKWZvcih2YXIgZz1wLnMuYztnPD1wLmUuYzsrK2cpaWYodT1nZSh7cjpULGM6Z30pLCh2PWs/KGhbVF18fFtdKVtnXTpoW3VdKSYmbnVsbCE9di52JiYieiIhPT12LnQpe3N3aXRjaChkPVsiY2VsbCIsdSwidCJdLHYudCl7Y2FzZSJzIjpjYXNlInN0ciI6ZC5wdXNo''@;'; put 'put ''KHQodi52KSk7YnJlYWs7Y2FzZSJuIjp2LmY/KGRbMl09InZ0ZiIsZFszXT0ibiIsZFs0XT12LnYsZFs1XT10KHYuZikpOihkWzJdPSJ2IixkWzNdPXYudik7YnJlYWs7Y2FzZSJiIjpkWzJdPSJ2dCIrKHYuZj8iZiI6ImMiKSxkWzNdPSJubCIsZFs0XT12LnY/IjEiOiIwIixkWzVdPXQodi5m''@;'; put 'put ''fHwodi52PyJUUlVFIjoiRkFMU0UiKSk7YnJlYWs7Y2FzZSJkIjp2YXIgTj1pcihYZSh2LnYpKTtkWzJdPSJ2dGMiLGRbM109Im5kIixkWzRdPSIiK04sZFs1XT12Lnd8fFJyKHYuenx8cGVbMTRdLE4pO2JyZWFrO2Nhc2UiZSI6Y29udGludWV9eC5wdXNoKGQuam9pbigiOiIpKX1yZXR1cm4g''@;'; put 'put ''eC5wdXNoKCJzaGVldDpjOiIrKHAuZS5jLXAucy5jKzEpKyI6cjoiKyhwLmUuci1wLnMucisxKSsiOnR2ZjoxIikseC5wdXNoKCJ2YWx1ZWZvcm1hdDoxOnRleHQtd2lraSIpLHguam9pbigiXG4iKX1yZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gbihoLHgpe3JldHVybiBGdChhKGgseCks''@;'; put 'put ''eCl9LHRvX3NoZWV0OmEsZnJvbV9zaGVldDpmdW5jdGlvbiBsKGgpe3JldHVybltpLHMsZixzLG8oaCksY10uam9pbigiXG4iKX19fSgpLGNhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShsLGgseCxkLHYpe3YucmF3P2hbeF1bZF09bDoiIj09PWx8fChoW3hdW2RdPSJUUlVFIj09PWx8fCJGQUxT''@;'; put 'put ''RSIhPT1sJiYoaXNOYU4oSnIobCkpP2lzTmFOKGFhKGwpLmdldERhdGUoKSk/bDpYZShsKTpKcihsKSkpfXZhciByPXs0NDoiLCIsOToiXHQiLDU5OiI7IiwxMjQ6InwifSxhPXs0NDozLDk6Miw1OToxLDEyNDowfTtmdW5jdGlvbiBuKGwpe2Zvcih2YXIgaD17fSx4PSExLGQ9MCx2PTA7ZDxs''@;'; put 'put ''Lmxlbmd0aDsrK2QpMzQ9PSh2PWwuY2hhckNvZGVBdChkKSk/eD0heDoheCYmdiBpbiByJiYoaFt2XT0oaFt2XXx8MCkrMSk7Zm9yKGQgaW4gdj1bXSxoKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChoLGQpJiZ2LnB1c2goW2hbZF0sZF0pO2lmKCF2Lmxlbmd0aClmb3Io''@;'; put 'put ''ZCBpbiBoPWEpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGgsZCkmJnYucHVzaChbaFtkXSxkXSk7cmV0dXJuIHYuc29ydChmdW5jdGlvbih1LHApe3JldHVybiB1WzBdLXBbMF18fGFbdVsxXV0tYVtwWzFdXX0pLHJbdi5wb3AoKVsxXV18fDQ0fWZ1bmN0aW9uIHMobCxo''@;'; put 'put ''KXtyZXR1cm4haHx8IWguUFJOfHxoLkZTfHwic2VwPSI9PWwuc2xpY2UoMCw0KXx8bC5pbmRleE9mKCJcdCIpPj0wfHxsLmluZGV4T2YoIiwiKT49MHx8bC5pbmRleE9mKCI7Iik+PTA/ZnVuY3Rpb24gaShsLGgpe3ZhciB4PWh8fHt9LGQ9IiIsdj14LmRlbnNlP1tdOnt9LHU9e3M6e2M6MCxy''@;'; put 'put ''OjB9LGU6e2M6MCxyOjB9fTsic2VwPSI9PWwuc2xpY2UoMCw0KT8xMz09bC5jaGFyQ29kZUF0KDUpJiYxMD09bC5jaGFyQ29kZUF0KDYpPyhkPWwuY2hhckF0KDQpLGw9bC5zbGljZSg3KSk6MTM9PWwuY2hhckNvZGVBdCg1KXx8MTA9PWwuY2hhckNvZGVBdCg1KT8oZD1sLmNoYXJBdCg0KSxs''@;'; put 'put ''PWwuc2xpY2UoNikpOmQ9bihsLnNsaWNlKDAsMTAyNCkpOmQ9eCYmeC5GUz94LkZTOm4obC5zbGljZSgwLDEwMjQpKTt2YXIgcD0wLGs9MCxUPTAsZz0wLE49MCxNPWQuY2hhckNvZGVBdCgwKSxJPSExLHk9MCxQPWwuY2hhckNvZGVBdCgwKTtsPWwucmVwbGFjZSgvXHJcbi9nbSwiXG4iKTt2''@;'; put 'put ''YXIgUj1udWxsIT14LmRhdGVORj9mdW5jdGlvbiBubyhlKXt2YXIgdD0ibnVtYmVyIj09dHlwZW9mIGU/cGVbZV06ZTtyZXR1cm4gdD10LnJlcGxhY2UoRWksIihcXGQrKSIpLG5ldyBSZWdFeHAoIl4iK3QrIiQiKX0oeC5kYXRlTkYpOm51bGw7ZnVuY3Rpb24gVigpe3ZhciBYPWwuc2xpY2Uo''@;'; put 'put ''ZyxOKSxiPXt9O2lmKCciJz09WC5jaGFyQXQoMCkmJiciJz09WC5jaGFyQXQoWC5sZW5ndGgtMSkmJihYPVguc2xpY2UoMSwtMSkucmVwbGFjZSgvIiIvZywnIicpKSwwPT09WC5sZW5ndGgpYi50PSJ6IjtlbHNlIGlmKHgucmF3KWIudD0icyIsYi52PVg7ZWxzZSBpZigwPT09WC50cmltKCku''@;'; put 'put ''bGVuZ3RoKWIudD0icyIsYi52PVg7ZWxzZSBpZig2MT09WC5jaGFyQ29kZUF0KDApKTM0PT1YLmNoYXJDb2RlQXQoMSkmJjM0PT1YLmNoYXJDb2RlQXQoWC5sZW5ndGgtMSk/KGIudD0icyIsYi52PVguc2xpY2UoMiwtMSkucmVwbGFjZSgvIiIvZywnIicpKTpmdW5jdGlvbiBSeChlKXtyZXR1''@;'; put 'put ''cm4gMSE9ZS5sZW5ndGh9KFgpPyhiLnQ9Im4iLGIuZj1YLnNsaWNlKDEpKTooYi50PSJzIixiLnY9WCk7ZWxzZSBpZigiVFJVRSI9PVgpYi50PSJiIixiLnY9ITA7ZWxzZSBpZigiRkFMU0UiPT1YKWIudD0iYiIsYi52PSExO2Vsc2UgaWYoaXNOYU4oVD1KcihYKSkpaWYoIWlzTmFOKGFhKFgp''@;'; put 'put ''LmdldERhdGUoKSl8fFImJlgubWF0Y2goUikpe2Iuej14LmRhdGVORnx8cGVbMTRdO3ZhciBlZT0wO1ImJlgubWF0Y2goUikmJihYPWZ1bmN0aW9uIGlvKGUsdCxyKXt2YXIgYT0tMSxuPS0xLGk9LTEscz0tMSxmPS0xLGM9LTE7KHQubWF0Y2goRWkpfHxbXSkuZm9yRWFjaChmdW5jdGlvbiho''@;'; put 'put ''LHgpe3ZhciBkPXBhcnNlSW50KHJbeCsxXSwxMCk7c3dpdGNoKGgudG9Mb3dlckNhc2UoKS5jaGFyQXQoMCkpe2Nhc2UieSI6YT1kO2JyZWFrO2Nhc2UiZCI6aT1kO2JyZWFrO2Nhc2UiaCI6cz1kO2JyZWFrO2Nhc2UicyI6Yz1kO2JyZWFrO2Nhc2UibSI6cz49MD9mPWQ6bj1kfX0pLGM+PTAm''@;'; put 'put ''Ji0xPT1mJiZuPj0wJiYoZj1uLG49LTEpO3ZhciBvPSgiIisoYT49MD9hOihuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSkpLnNsaWNlKC00KSsiLSIrKCIwMCIrKG4+PTE/bjoxKSkuc2xpY2UoLTIpKyItIisoIjAwIisoaT49MT9pOjEpKS5zbGljZSgtMik7Nz09by5sZW5ndGgmJihvPSIwIitv''@;'; put 'put ''KSw4PT1vLmxlbmd0aCYmKG89IjIwIitvKTt2YXIgbD0oIjAwIisocz49MD9zOjApKS5zbGljZSgtMikrIjoiKygiMDAiKyhmPj0wP2Y6MCkpLnNsaWNlKC0yKSsiOiIrKCIwMCIrKGM+PTA/YzowKSkuc2xpY2UoLTIpO3JldHVybi0xPT1zJiYtMT09ZiYmLTE9PWM/bzotMT09YSYmLTE9PW4m''@;'; put 'put ''Ji0xPT1pP2w6bysiVCIrbH0oMCx4LmRhdGVORixYLm1hdGNoKFIpfHxbXSksZWU9MSkseC5jZWxsRGF0ZXM/KGIudD0iZCIsYi52PVhlKFgsZWUpKTooYi50PSJuIixiLnY9aXIoWGUoWCxlZSkpKSwhMSE9PXguY2VsbFRleHQmJihiLnc9UnIoYi56LGIudiBpbnN0YW5jZW9mIERhdGU/aXIo''@;'; put 'put ''Yi52KTpiLnYpKSx4LmNlbGxORnx8ZGVsZXRlIGIuen1lbHNlIGIudD0icyIsYi52PVg7ZWxzZSBiLnQ9Im4iLCExIT09eC5jZWxsVGV4dCYmKGIudz1YKSxiLnY9VDtpZigieiI9PWIudHx8KHguZGVuc2U/KHZbcF18fCh2W3BdPVtdKSx2W3BdW2tdPWIpOnZbZ2Uoe2M6ayxyOnB9KV09Yiks''@;'; put 'put ''UD1sLmNoYXJDb2RlQXQoZz1OKzEpLHUuZS5jPGsmJih1LmUuYz1rKSx1LmUucjxwJiYodS5lLnI9cCkseT09TSkrK2s7ZWxzZSBpZihrPTAsKytwLHguc2hlZXRSb3dzJiZ4LnNoZWV0Um93czw9cClyZXR1cm4hMH1lOmZvcig7TjxsLmxlbmd0aDsrK04pc3dpdGNoKHk9bC5jaGFyQ29kZUF0''@;'; put 'put ''KE4pKXtjYXNlIDM0OjM0PT09UCYmKEk9IUkpO2JyZWFrO2Nhc2UgTTpjYXNlIDEwOmNhc2UgMTM6aWYoIUkmJlYoKSlicmVhayBlfXJldHVybiBOLWc+MCYmVigpLHZbIiFyZWYiXT13ZSh1KSx2fShsLGgpOnNhKGZ1bmN0aW9uIHQobCxoKXt2YXIgeD1ofHx7fSxkPVtdO2lmKCFsfHwwPT09''@;'; put 'put ''bC5sZW5ndGgpcmV0dXJuIGQ7Zm9yKHZhciB2PWwuc3BsaXQoL1tcclxuXS8pLHU9di5sZW5ndGgtMTt1Pj0wJiYwPT09dlt1XS5sZW5ndGg7KS0tdTtmb3IodmFyIHA9MTAsaz0wLFQ9MDtUPD11OysrVCktMT09KGs9dltUXS5pbmRleE9mKCIgIikpP2s9dltUXS5sZW5ndGg6aysrLHA9TWF0''@;'; put 'put ''aC5tYXgocCxrKTtmb3IoVD0wO1Q8PXU7KytUKXtkW1RdPVtdO3ZhciBnPTA7Zm9yKGUodltUXS5zbGljZSgwLHApLnRyaW0oKSxkLFQsZyx4KSxnPTE7Zzw9KHZbVF0ubGVuZ3RoLXApLzEwKzE7KytnKWUodltUXS5zbGljZShwKzEwKihnLTEpLHArMTAqZykudHJpbSgpLGQsVCxnLHgpfXJl''@;'; put 'put ''dHVybiB4LnNoZWV0Um93cyYmKGQ9ZC5zbGljZSgwLHguc2hlZXRSb3dzKSksZH0obCxoKSxoKX1mdW5jdGlvbiBmKGwsaCl7dmFyIHg9IiIsZD0ic3RyaW5nIj09aC50eXBlP1swLDAsMCwwXTpLbihsLGgpO3N3aXRjaChoLnR5cGUpe2Nhc2UiYmFzZTY0Ijp4PU9yKGwpO2JyZWFrO2Nhc2Ui''@;'; put 'put ''YmluYXJ5IjpjYXNlInN0cmluZyI6eD1sO2JyZWFrO2Nhc2UiYnVmZmVyIjp4PTY1MDAxPT1oLmNvZGVwYWdlP2wudG9TdHJpbmcoInV0ZjgiKTpTZSYmQnVmZmVyLmlzQnVmZmVyKGwpP2wudG9TdHJpbmcoImJpbmFyeSIpOnd0KGwpO2JyZWFrO2Nhc2UiYXJyYXkiOng9UHQobCk7YnJlYWs7''@;'; put 'put ''ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIraC50eXBlKX1yZXR1cm4gMjM5PT1kWzBdJiYxODc9PWRbMV0mJjE5MT09ZFsyXT94PUJlKHguc2xpY2UoMykpOiJzdHJpbmciIT1oLnR5cGUmJiJidWZmZXIiIT1oLnR5cGUmJjY1MDAxPT1oLmNvZGVwYWdlJiYo''@;'; put 'put ''eD1CZSh4KSksInNvY2lhbGNhbGM6dmVyc2lvbjoiPT14LnNsaWNlKDAsMTkpP3RmLnRvX3NoZWV0KCJzdHJpbmciPT1oLnR5cGU/eDpCZSh4KSxoKTpzKHgsaCl9cmV0dXJue3RvX3dvcmtib29rOmZ1bmN0aW9uIGMobCxoKXtyZXR1cm4gRnQoZihsLGgpLGgpfSx0b19zaGVldDpmLGZyb21f''@;'; put 'put ''c2hlZXQ6ZnVuY3Rpb24gbyhsKXtmb3IodmFyIGQsaD1bXSx4PURlKGxbIiFyZWYiXSksdj1BcnJheS5pc0FycmF5KGwpLHU9eC5zLnI7dTw9eC5lLnI7Kyt1KXtmb3IodmFyIHA9W10saz14LnMuYztrPD14LmUuYzsrK2spe3ZhciBUPWdlKHtyOnUsYzprfSk7aWYoKGQ9dj8obFt1XXx8W10p''@;'; put 'put ''W2tdOmxbVF0pJiZudWxsIT1kLnYpe2Zvcih2YXIgZz0oZC53fHwoYXQoZCksZC53KXx8IiIpLnNsaWNlKDAsMTApO2cubGVuZ3RoPDEwOylnKz0iICI7cC5wdXNoKGcrKDA9PT1rPyIgIjoiIikpfWVsc2UgcC5wdXNoKCIgICAgICAgICAgIil9aC5wdXNoKHAuam9pbigiIikpfXJldHVybiBo''@;'; put 'put ''LmpvaW4oIlxuIil9fX0oKSxqdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoQyxVLE8pe2lmKEMpe2hyKEMsQy5sfHwwKTtmb3IodmFyIEQ9Ty5FbnVtfHx4ZTtDLmw8Qy5sZW5ndGg7KXt2YXIgaj1DLnJlYWRfc2hpZnQoMiksc2U9RFtqXXx8RFs2NTUzNV0sWj1DLnJlYWRfc2hpZnQoMiksUT1D''@;'; put 'put ''LmwrWixZPXNlLmYmJnNlLmYoQyxaLE8pO2lmKEMubD1RLFUoWSxzZSxqKSlyZXR1cm59fX1mdW5jdGlvbiByKEMsVSl7aWYoIUMpcmV0dXJuIEM7dmFyIE89VXx8e30sRD1PLmRlbnNlP1tdOnt9LGo9IlNoZWV0MSIsc2U9IiIsWj0wLFE9e30sWT1bXSxFZT1bXSxBPXtzOntyOjAsYzowfSxl''@;'; put 'put ''OntyOjAsYzowfX0sUGU9Ty5zaGVldFJvd3N8fDA7aWYoMD09Q1syXSYmKDg9PUNbM118fDk9PUNbM10pJiZDLmxlbmd0aD49MTYmJjU9PUNbMTRdJiYxMDg9PT1DWzE1XSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIFdvcmtzIDMgZm9yIE1hYyBmaWxlIik7aWYoMj09Q1syXSlPLkVu''@;'; put 'put ''dW09eGUsZShDLGZ1bmN0aW9uKG9lLHFlLGpyKXtzd2l0Y2goanIpe2Nhc2UgMDpPLnZlcnM9b2Usb2U+PTQwOTYmJihPLnFwcm89ITApO2JyZWFrO2Nhc2UgNjpBPW9lO2JyZWFrO2Nhc2UgMjA0Om9lJiYoc2U9b2UpO2JyZWFrO2Nhc2UgMjIyOnNlPW9lO2JyZWFrO2Nhc2UgMTU6Y2FzZSA1''@;'; put 'put ''MTpPLnFwcm98fChvZVsxXS52PW9lWzFdLnYuc2xpY2UoMSkpO2Nhc2UgMTM6Y2FzZSAxNDpjYXNlIDE2OjE0PT1qciYmISgxMTImfm9lWzJdKSYmKDE1Jm9lWzJdKT4xJiYoMTUmb2VbMl0pPDE1JiYob2VbMV0uej1PLmRhdGVORnx8cGVbMTRdLE8uY2VsbERhdGVzJiYob2VbMV0udD0iZCIs''@;'; put 'put ''b2VbMV0udj1vMChvZVsxXS52KSkpLE8ucXBybyYmb2VbM10+WiYmKERbIiFyZWYiXT13ZShBKSxRW2pdPUQsWS5wdXNoKGopLEQ9Ty5kZW5zZT9bXTp7fSxBPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX0sWj1vZVszXSxqPXNlfHwiU2hlZXQiKyhaKzEpLHNlPSIiKTt2YXIgZnQ9Ty5kZW5z''@;'; put 'put ''ZT8oRFtvZVswXS5yXXx8W10pW29lWzBdLmNdOkRbZ2Uob2VbMF0pXTtpZihmdCl7ZnQudD1vZVsxXS50LGZ0LnY9b2VbMV0udixudWxsIT1vZVsxXS56JiYoZnQuej1vZVsxXS56KSxudWxsIT1vZVsxXS5mJiYoZnQuZj1vZVsxXS5mKTticmVha31PLmRlbnNlPyhEW29lWzBdLnJdfHwoRFtv''@;'; put 'put ''ZVswXS5yXT1bXSksRFtvZVswXS5yXVtvZVswXS5jXT1vZVsxXSk6RFtnZShvZVswXSldPW9lWzFdfX0sTyk7ZWxzZXtpZigyNiE9Q1syXSYmMTQhPUNbMl0pdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgTE9UVVMgQk9GICIrQ1syXSk7Ty5FbnVtPUssMTQ9PUNbMl0mJihPLnFwcm89''@;'; put 'put ''ITAsQy5sPTApLGUoQyxmdW5jdGlvbihvZSxxZSxqcil7c3dpdGNoKGpyKXtjYXNlIDIwNDpqPW9lO2JyZWFrO2Nhc2UgMjI6b2VbMV0udj1vZVsxXS52LnNsaWNlKDEpO2Nhc2UgMjM6Y2FzZSAyNDpjYXNlIDI1OmNhc2UgMzc6Y2FzZSAzOTpjYXNlIDQwOmlmKG9lWzNdPlomJihEWyIhcmVm''@;'; put 'put ''Il09d2UoQSksUVtqXT1ELFkucHVzaChqKSxEPU8uZGVuc2U/W106e30sQT17czp7cjowLGM6MH0sZTp7cjowLGM6MH19LGo9IlNoZWV0IisoKFo9b2VbM10pKzEpKSxQZT4wJiZvZVswXS5yPj1QZSlicmVhaztPLmRlbnNlPyhEW29lWzBdLnJdfHwoRFtvZVswXS5yXT1bXSksRFtvZVswXS5y''@;'; put 'put ''XVtvZVswXS5jXT1vZVsxXSk6RFtnZShvZVswXSldPW9lWzFdLEEuZS5jPG9lWzBdLmMmJihBLmUuYz1vZVswXS5jKSxBLmUucjxvZVswXS5yJiYoQS5lLnI9b2VbMF0ucik7YnJlYWs7Y2FzZSAyNzpvZVsxNGUzXSYmKEVlW29lWzE0ZTNdWzBdXT1vZVsxNGUzXVsxXSk7YnJlYWs7Y2FzZSAx''@;'; put 'put ''NTM3OkVlW29lWzBdXT1vZVsxXSxvZVswXT09WiYmKGo9b2VbMV0pfX0sTyl9aWYoRFsiIXJlZiJdPXdlKEEpLFFbc2V8fGpdPUQsWS5wdXNoKHNlfHxqKSwhRWUubGVuZ3RoKXJldHVybntTaGVldE5hbWVzOlksU2hlZXRzOlF9O2Zvcih2YXIgQWU9e30sTGU9W10sQ2U9MDtDZTxFZS5sZW5n''@;'; put 'put ''dGg7KytDZSlRW1lbQ2VdXT8oTGUucHVzaChFZVtDZV18fFlbQ2VdKSxBZVtFZVtDZV1dPVFbRWVbQ2VdXXx8UVtZW0NlXV0pOihMZS5wdXNoKEVlW0NlXSksQWVbRWVbQ2VdXT17IiFyZWYiOiJBMSJ9KTtyZXR1cm57U2hlZXROYW1lczpMZSxTaGVldHM6QWV9fWZ1bmN0aW9uIG8oQyxVLE8p''@;'; put 'put ''e3ZhciBEPVt7YzowLHI6MH0se3Q6Im4iLHY6MH0sMCwwXTtyZXR1cm4gTy5xcHJvJiYyMDc2OCE9Ty52ZXJzPyhEWzBdLmM9Qy5yZWFkX3NoaWZ0KDEpLERbM109Qy5yZWFkX3NoaWZ0KDEpLERbMF0ucj1DLnJlYWRfc2hpZnQoMiksQy5sKz0yKTooRFsyXT1DLnJlYWRfc2hpZnQoMSksRFsw''@;'; put 'put ''XS5jPUMucmVhZF9zaGlmdCgyKSxEWzBdLnI9Qy5yZWFkX3NoaWZ0KDIpKSxEfWZ1bmN0aW9uIGwoQyxVLE8pe3ZhciBEPUMubCtVLGo9byhDLDAsTyk7aWYoalsxXS50PSJzIiwyMDc2OD09Ty52ZXJzKXtDLmwrKzt2YXIgc2U9Qy5yZWFkX3NoaWZ0KDEpO3JldHVybiBqWzFdLnY9Qy5yZWFk''@;'; put 'put ''X3NoaWZ0KHNlLCJ1dGY4Iiksan1yZXR1cm4gTy5xcHJvJiZDLmwrKyxqWzFdLnY9Qy5yZWFkX3NoaWZ0KEQtQy5sLCJjc3RyIiksan1mdW5jdGlvbiBoKEMsVSxPKXt2YXIgRD1HKDcrTy5sZW5ndGgpO0Qud3JpdGVfc2hpZnQoMSwyNTUpLEQud3JpdGVfc2hpZnQoMixVKSxELndyaXRlX3No''@;'; put 'put ''aWZ0KDIsQyksRC53cml0ZV9zaGlmdCgxLDM5KTtmb3IodmFyIGo9MDtqPEQubGVuZ3RoOysrail7dmFyIHNlPU8uY2hhckNvZGVBdChqKTtELndyaXRlX3NoaWZ0KDEsc2U+PTEyOD85NTpzZSl9cmV0dXJuIEQud3JpdGVfc2hpZnQoMSwwKSxEfWZ1bmN0aW9uIGQoQyxVLE8pe3ZhciBEPUco''@;'; put 'put ''Nyk7cmV0dXJuIEQud3JpdGVfc2hpZnQoMSwyNTUpLEQud3JpdGVfc2hpZnQoMixVKSxELndyaXRlX3NoaWZ0KDIsQyksRC53cml0ZV9zaGlmdCgyLE8sImkiKSxEfWZ1bmN0aW9uIHUoQyxVLE8pe3ZhciBEPUcoMTMpO3JldHVybiBELndyaXRlX3NoaWZ0KDEsMjU1KSxELndyaXRlX3NoaWZ0''@;'; put 'put ''KDIsVSksRC53cml0ZV9zaGlmdCgyLEMpLEQud3JpdGVfc2hpZnQoOCxPLCJmIiksRH1mdW5jdGlvbiBrKEMsVSxPKXt2YXIgRD0zMjc2OCZVO3JldHVybiBVPShEP0M6MCkrKChVJj0tMzI3NjkpPj04MTkyP1UtMTYzODQ6VSksKEQ/IiI6IiQiKSsoTz9IZShVKTpLZShVKSl9dmFyIFQ9ezUx''@;'; put 'put ''OlsiRkFMU0UiLDBdLDUyOlsiVFJVRSIsMF0sNzA6WyJMRU4iLDFdLDgwOlsiU1VNIiw2OV0sODE6WyJBVkVSQUdFQSIsNjldLDgyOlsiQ09VTlRBIiw2OV0sODM6WyJNSU5BIiw2OV0sODQ6WyJNQVhBIiw2OV0sMTExOlsiVCIsMV19LGc9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIr''@;'; put 'put ''IiwiLSIsIioiLCIvIiwiXiIsIj0iLCI8PiIsIjw9IiwiPj0iLCI8IiwiPiIsIiIsIiIsIiIsIiIsIiYiLCIiLCIiLCIiLCIiLCIiLCIiLCIiXTtmdW5jdGlvbiBNKEMpe3ZhciBVPVt7YzowLHI6MH0se3Q6Im4iLHY6MH0sMF07cmV0dXJuIFVbMF0ucj1DLnJlYWRfc2hpZnQoMiksVVszXT1D''@;'; put 'put ''W0MubCsrXSxVWzBdLmM9Q1tDLmwrK10sVX1mdW5jdGlvbiB5KEMsVSxPLEQpe3ZhciBqPUcoNitELmxlbmd0aCk7ai53cml0ZV9zaGlmdCgyLEMpLGoud3JpdGVfc2hpZnQoMSxPKSxqLndyaXRlX3NoaWZ0KDEsVSksai53cml0ZV9zaGlmdCgxLDM5KTtmb3IodmFyIHNlPTA7c2U8RC5sZW5n''@;'; put 'put ''dGg7KytzZSl7dmFyIFo9RC5jaGFyQ29kZUF0KHNlKTtqLndyaXRlX3NoaWZ0KDEsWj49MTI4Pzk1OlopfXJldHVybiBqLndyaXRlX3NoaWZ0KDEsMCksan1mdW5jdGlvbiBSKEMsVSl7dmFyIE89TShDKSxEPUMucmVhZF9zaGlmdCg0KSxqPUMucmVhZF9zaGlmdCg0KSxzZT1DLnJlYWRfc2hp''@;'; put 'put ''ZnQoMik7aWYoNjU1MzU9PXNlKXJldHVybiAwPT09RCYmMzIyMTIyNTQ3Mj09PWo/KE9bMV0udD0iZSIsT1sxXS52PTE1KTowPT09RCYmMzQ4OTY2MDkyOD09PWo/KE9bMV0udD0iZSIsT1sxXS52PTQyKTpPWzFdLnY9MCxPO3ZhciBaPTMyNzY4JnNlO3JldHVybiBzZT0oMzI3Njcmc2UpLTE2''@;'; put 'put ''NDQ2LE9bMV0udj0oMS0yKlopKihqKk1hdGgucG93KDIsc2UrMzIpK0QqTWF0aC5wb3coMixzZSkpLE99ZnVuY3Rpb24gVihDLFUsTyxEKXt2YXIgaj1HKDE0KTtpZihqLndyaXRlX3NoaWZ0KDIsQyksai53cml0ZV9zaGlmdCgxLE8pLGoud3JpdGVfc2hpZnQoMSxVKSwwPT1EKXJldHVybiBq''@;'; put 'put ''LndyaXRlX3NoaWZ0KDQsMCksai53cml0ZV9zaGlmdCg0LDApLGoud3JpdGVfc2hpZnQoMiw2NTUzNSksajt2YXIgc2U9MCxaPTAsWT0wO3JldHVybiBEPDAmJihzZT0xLEQ9LUQpLFo9MHxNYXRoLmxvZzIoRCksISgyMTQ3NDgzNjQ4JihZPShELz1NYXRoLnBvdygyLFotMzEpKT4+PjApKSYm''@;'; put 'put ''KCsrWixZPShELz0yKT4+PjApLEQtPVksWXw9MjE0NzQ4MzY0OCxZPj4+PTAsRCo9TWF0aC5wb3coMiwzMiksai53cml0ZV9zaGlmdCg0LEQ+Pj4wKSxqLndyaXRlX3NoaWZ0KDQsWSksai53cml0ZV9zaGlmdCgyLForPTE2MzgzKyhzZT8zMjc2ODowKSksan1mdW5jdGlvbiBlZShDLFUpe3Zh''@;'; put 'put ''ciBPPU0oQyksRD1DLnJlYWRfc2hpZnQoOCwiZiIpO3JldHVybiBPWzFdLnY9RCxPfWZ1bmN0aW9uIHJlKEMsVSl7cmV0dXJuIDA9PUNbQy5sK1UtMV0/Qy5yZWFkX3NoaWZ0KFUsImNzdHIiKToiIn1mdW5jdGlvbiBjZShDLFUpe3ZhciBPPUcoNStDLmxlbmd0aCk7Ty53cml0ZV9zaGlmdCgy''@;'; put 'put ''LDE0ZTMpLE8ud3JpdGVfc2hpZnQoMixVKTtmb3IodmFyIEQ9MDtEPEMubGVuZ3RoOysrRCl7dmFyIGo9Qy5jaGFyQ29kZUF0KEQpO09bTy5sKytdPWo+MTI3Pzk1Omp9cmV0dXJuIE9bTy5sKytdPTAsT312YXIgeGU9ezA6e246IkJPRiIsZjp0cn0sMTp7bjoiRU9GIn0sMjp7bjoiQ0FMQ01P''@;'; put 'put ''REUifSwzOntuOiJDQUxDT1JERVIifSw0OntuOiJTUExJVCJ9LDU6e246IlNZTkMifSw2OntuOiJSQU5HRSIsZjpmdW5jdGlvbiBmKEMsVSxPKXt2YXIgRD17czp7YzowLHI6MH0sZTp7YzowLHI6MH19O3JldHVybiA4PT1VJiZPLnFwcm8/KEQucy5jPUMucmVhZF9zaGlmdCgxKSxDLmwrKyxE''@;'; put 'put ''LnMucj1DLnJlYWRfc2hpZnQoMiksRC5lLmM9Qy5yZWFkX3NoaWZ0KDEpLEMubCsrLEQuZS5yPUMucmVhZF9zaGlmdCgyKSxEKTooRC5zLmM9Qy5yZWFkX3NoaWZ0KDIpLEQucy5yPUMucmVhZF9zaGlmdCgyKSwxMj09VSYmTy5xcHJvJiYoQy5sKz0yKSxELmUuYz1DLnJlYWRfc2hpZnQoMiks''@;'; put 'put ''RC5lLnI9Qy5yZWFkX3NoaWZ0KDIpLDEyPT1VJiZPLnFwcm8mJihDLmwrPTIpLDY1NTM1PT1ELnMuYyYmKEQucy5jPUQuZS5jPUQucy5yPUQuZS5yPTApLEQpfX0sNzp7bjoiV0lORE9XMSJ9LDg6e246IkNPTFcxIn0sOTp7bjoiV0lOVFdPIn0sMTA6e246IkNPTFcyIn0sMTE6e246Ik5BTUUi''@;'; put 'put ''fSwxMjp7bjoiQkxBTksifSwxMzp7bjoiSU5URUdFUiIsZjpmdW5jdGlvbiB4KEMsVSxPKXt2YXIgRD1vKEMsMCxPKTtyZXR1cm4gRFsxXS52PUMucmVhZF9zaGlmdCgyLCJpIiksRH19LDE0OntuOiJOVU1CRVIiLGY6ZnVuY3Rpb24gdihDLFUsTyl7dmFyIEQ9byhDLDAsTyk7cmV0dXJuIERb''@;'; put 'put ''MV0udj1DLnJlYWRfc2hpZnQoOCwiZiIpLER9fSwxNTp7bjoiTEFCRUwiLGY6bH0sMTY6e246IkZPUk1VTEEiLGY6ZnVuY3Rpb24gcChDLFUsTyl7dmFyIEQ9Qy5sK1Usaj1vKEMsMCxPKTtpZihqWzFdLnY9Qy5yZWFkX3NoaWZ0KDgsImYiKSxPLnFwcm8pQy5sPUQ7ZWxzZXt2YXIgc2U9Qy5y''@;'; put 'put ''ZWFkX3NoaWZ0KDIpOyhmdW5jdGlvbiBOKEMsVSl7aHIoQywwKTtmb3IodmFyIE89W10sRD0wLGo9IiIsc2U9IiIsWj0iIixRPSIiO0MubDxDLmxlbmd0aDspe3ZhciBZPUNbQy5sKytdO3N3aXRjaChZKXtjYXNlIDA6Ty5wdXNoKEMucmVhZF9zaGlmdCg4LCJmIikpO2JyZWFrO2Nhc2UgMTpz''@;'; put 'put ''ZT1rKFVbMF0uYyxDLnJlYWRfc2hpZnQoMiksITApLGo9ayhVWzBdLnIsQy5yZWFkX3NoaWZ0KDIpLCExKSxPLnB1c2goc2Uraik7YnJlYWs7Y2FzZSAyOnZhciBFZT1rKFVbMF0uYyxDLnJlYWRfc2hpZnQoMiksITApLEE9ayhVWzBdLnIsQy5yZWFkX3NoaWZ0KDIpLCExKTtzZT1rKFVbMF0u''@;'; put 'put ''YyxDLnJlYWRfc2hpZnQoMiksITApLGo9ayhVWzBdLnIsQy5yZWFkX3NoaWZ0KDIpLCExKSxPLnB1c2goRWUrQSsiOiIrc2Uraik7YnJlYWs7Y2FzZSAzOmlmKEMubDxDLmxlbmd0aClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJXSzEgcHJlbWF0dXJlIGZvcm11bGEgZW5kIik7YnJlYWs7''@;'; put 'put ''Y2FzZSA0Ok8ucHVzaCgiKCIrTy5wb3AoKSsiKSIpO2JyZWFrO2Nhc2UgNTpPLnB1c2goQy5yZWFkX3NoaWZ0KDIpKTticmVhaztjYXNlIDY6Zm9yKHZhciBQZT0iIjtZPUNbQy5sKytdOylQZSs9U3RyaW5nLmZyb21DaGFyQ29kZShZKTtPLnB1c2goJyInK1BlLnJlcGxhY2UoLyIvZywnIiIn''@;'; put 'put ''KSsnIicpO2JyZWFrO2Nhc2UgODpPLnB1c2goIi0iK08ucG9wKCkpO2JyZWFrO2Nhc2UgMjM6Ty5wdXNoKCIrIitPLnBvcCgpKTticmVhaztjYXNlIDIyOk8ucHVzaCgiTk9UKCIrTy5wb3AoKSsiKSIpO2JyZWFrO2Nhc2UgMjA6Y2FzZSAyMTpRPU8ucG9wKCksWj1PLnBvcCgpLE8ucHVzaChb''@;'; put 'put ''IkFORCIsIk9SIl1bWS0yMF0rIigiK1orIiwiK1ErIikiKTticmVhaztkZWZhdWx0OmlmKFk8MzImJmdbWV0pUT1PLnBvcCgpLFo9Ty5wb3AoKSxPLnB1c2goWitnW1ldK1EpO2Vsc2V7aWYoIVRbWV0pcmV0dXJuIFk8PTc/Y29uc29sZS5lcnJvcigiV0sxIGludmFsaWQgb3Bjb2RlICIrWS50''@;'; put 'put ''b1N0cmluZygxNikpOlk8PTI0P2NvbnNvbGUuZXJyb3IoIldLMSB1bnN1cHBvcnRlZCBvcCAiK1kudG9TdHJpbmcoMTYpKTpZPD0zMD9jb25zb2xlLmVycm9yKCJXSzEgaW52YWxpZCBvcGNvZGUgIitZLnRvU3RyaW5nKDE2KSk6WTw9MTE1P2NvbnNvbGUuZXJyb3IoIldLMSB1bnN1cHBvcnRl''@;'; put 'put ''ZCBmdW5jdGlvbiBvcGNvZGUgIitZLnRvU3RyaW5nKDE2KSk6Y29uc29sZS5lcnJvcigiV0sxIHVucmVjb2duaXplZCBvcGNvZGUgIitZLnRvU3RyaW5nKDE2KSk7aWYoNjk9PShEPVRbWV1bMV0pJiYoRD1DW0MubCsrXSksRD5PLmxlbmd0aClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJX''@;'; put 'put ''SzEgYmFkIGZvcm11bGEgcGFyc2UgMHgiK1kudG9TdHJpbmcoMTYpKyI6fCIrTy5qb2luKCJ8IikrInwiKTt2YXIgQWU9Ty5zbGljZSgtRCk7Ty5sZW5ndGgtPUQsTy5wdXNoKFRbWV1bMF0rIigiK0FlLmpvaW4oIiwiKSsiKSIpfX19MT09Ty5sZW5ndGg/VVsxXS5mPSIiK09bMF06Y29uc29s''@;'; put 'put ''ZS5lcnJvcigiV0sxIGJhZCBmb3JtdWxhIHBhcnNlIHwiK08uam9pbigifCIpKyJ8Iil9KShDLnNsaWNlKEMubCxDLmwrc2UpLGopLEMubCs9c2V9cmV0dXJuIGp9fSwyNDp7bjoiVEFCTEUifSwyNTp7bjoiT1JBTkdFIn0sMjY6e246IlBSQU5HRSJ9LDI3OntuOiJTUkFOR0UifSwyODp7bjoi''@;'; put 'put ''RlJBTkdFIn0sMjk6e246IktSQU5HRTEifSwzMjp7bjoiSFJBTkdFIn0sMzU6e246IktSQU5HRTIifSwzNjp7bjoiUFJPVEVDIn0sMzc6e246IkZPT1RFUiJ9LDM4OntuOiJIRUFERVIifSwzOTp7bjoiU0VUVVAifSw0MDp7bjoiTUFSR0lOUyJ9LDQxOntuOiJMQUJFTEZNVCJ9LDQyOntuOiJU''@;'; put 'put ''SVRMRVMifSw0Mzp7bjoiU0hFRVRKUyJ9LDQ1OntuOiJHUkFQSCJ9LDQ2OntuOiJOR1JBUEgifSw0Nzp7bjoiQ0FMQ0NPVU5UIn0sNDg6e246IlVORk9STUFUVEVEIn0sNDk6e246IkNVUlNPUlcxMiJ9LDUwOntuOiJXSU5ET1cifSw1MTp7bjoiU1RSSU5HIixmOmx9LDU1OntuOiJQQVNTV09S''@;'; put 'put ''RCJ9LDU2OntuOiJMT0NLRUQifSw2MDp7bjoiUVVFUlkifSw2MTp7bjoiUVVFUllOQU1FIn0sNjI6e246IlBSSU5UIn0sNjM6e246IlBSSU5UTkFNRSJ9LDY0OntuOiJHUkFQSDIifSw2NTp7bjoiR1JBUEhOQU1FIn0sNjY6e246IlpPT00ifSw2Nzp7bjoiU1lNU1BMSVQifSw2ODp7bjoiTlNS''@;'; put 'put ''T1dTIn0sNjk6e246Ik5TQ09MUyJ9LDcwOntuOiJSVUxFUiJ9LDcxOntuOiJOTkFNRSJ9LDcyOntuOiJBQ09NTSJ9LDczOntuOiJBTUFDUk8ifSw3NDp7bjoiUEFSU0UifSwxMDI6e246IlBSQU5HRVM/PyJ9LDEwMzp7bjoiUlJBTkdFUz8/In0sMTA0OntuOiJGTkFNRT8/In0sMTA1OntuOiJN''@;'; put 'put ''UkFOR0VTPz8ifSwyMDQ6e246IlNIRUVUTkFNRUNTIixmOnJlfSwyMjI6e246IlNIRUVUTkFNRUxQIixmOmZ1bmN0aW9uIGRlKEMsVSl7dmFyIE89Q1tDLmwrK107Tz5VLTEmJihPPVUtMSk7Zm9yKHZhciBEPSIiO0QubGVuZ3RoPE87KUQrPVN0cmluZy5mcm9tQ2hhckNvZGUoQ1tDLmwrK10p''@;'; put 'put ''O3JldHVybiBEfX0sNjU1MzU6e246IiJ9fSxLPXswOntuOiJCT0YifSwxOntuOiJFT0YifSwyOntuOiJQQVNTV09SRCJ9LDM6e246IkNBTENTRVQifSw0OntuOiJXSU5ET1dTRVQifSw1OntuOiJTSEVFVENFTExQVFIifSw2OntuOiJTSEVFVExBWU9VVCJ9LDc6e246IkNPTFVNTldJRFRIIn0s''@;'; put 'put ''ODp7bjoiSElEREVOQ09MVU1OIn0sOTp7bjoiVVNFUlJBTkdFIn0sMTA6e246IlNZU1RFTVJBTkdFIn0sMTE6e246IlpFUk9GT1JDRSJ9LDEyOntuOiJTT1JUS0VZRElSIn0sMTM6e246IkZJTEVTRUFMIn0sMTQ6e246IkRBVEFGSUxMTlVNUyJ9LDE1OntuOiJQUklOVE1BSU4ifSwxNjp7bjoi''@;'; put 'put ''UFJJTlRTVFJJTkcifSwxNzp7bjoiR1JBUEhNQUlOIn0sMTg6e246IkdSQVBIU1RSSU5HIn0sMTk6e246Ij8/In0sMjA6e246IkVSUkNFTEwifSwyMTp7bjoiTkFDRUxMIn0sMjI6e246IkxBQkVMMTYiLGY6ZnVuY3Rpb24gSShDLFUpe3ZhciBPPU0oQyk7cmV0dXJuIE9bMV0udD0icyIsT1sx''@;'; put 'put ''XS52PUMucmVhZF9zaGlmdChVLTQsImNzdHIiKSxPfX0sMjM6e246Ik5VTUJFUjE3IixmOlJ9LDI0OntuOiJOVU1CRVIxOCIsZjpmdW5jdGlvbiBQKEMsVSl7dmFyIE89TShDKTtPWzFdLnY9Qy5yZWFkX3NoaWZ0KDIpO3ZhciBEPU9bMV0udj4+MTtpZigxJk9bMV0udilzd2l0Y2goNyZEKXtj''@;'; put 'put ''YXNlIDA6RD01ZTMqKEQ+PjMpO2JyZWFrO2Nhc2UgMTpEPTUwMCooRD4+Myk7YnJlYWs7Y2FzZSAyOkQ9KEQ+PjMpLzIwO2JyZWFrO2Nhc2UgMzpEPShEPj4zKS8yMDA7YnJlYWs7Y2FzZSA0OkQ9KEQ+PjMpLzJlMzticmVhaztjYXNlIDU6RD0oRD4+MykvMmU0O2JyZWFrO2Nhc2UgNjpEPShE''@;'; put 'put ''Pj4zKS8xNjticmVhaztjYXNlIDc6RD0oRD4+MykvNjR9cmV0dXJuIE9bMV0udj1ELE99fSwyNTp7bjoiRk9STVVMQTE5IixmOmZ1bmN0aW9uIFgoQyxVKXt2YXIgTz1SKEMpO3JldHVybiBDLmwrPVUtMTQsT319LDI2OntuOiJGT1JNVUxBMUEifSwyNzp7bjoiWEZPUk1BVCIsZjpmdW5jdGlv''@;'; put 'put ''biBGZShDLFUpe2Zvcih2YXIgTz17fSxEPUMubCtVO0MubDxEOyl7dmFyIGo9Qy5yZWFkX3NoaWZ0KDIpO2lmKDE0ZTM9PWope2ZvcihPW2pdPVswLCIiXSxPW2pdWzBdPUMucmVhZF9zaGlmdCgyKTtDW0MubF07KU9bal1bMV0rPVN0cmluZy5mcm9tQ2hhckNvZGUoQ1tDLmxdKSxDLmwrKztD''@;'; put 'put ''LmwrK319cmV0dXJuIE99fSwyODp7bjoiRFRMQUJFTE1JU0MifSwyOTp7bjoiRFRMQUJFTENFTEwifSwzMDp7bjoiR1JBUEhXSU5ET1cifSwzMTp7bjoiQ1BBIn0sMzI6e246IkxQTEFVVE8ifSwzMzp7bjoiUVVFUlkifSwzNDp7bjoiSElEREVOU0hFRVQifSwzNTp7bjoiPz8ifSwzNzp7bjoi''@;'; put 'put ''TlVNQkVSMjUiLGY6ZnVuY3Rpb24gYihDLFUpe3ZhciBPPU0oQyksRD1DLnJlYWRfc2hpZnQoNCk7cmV0dXJuIE9bMV0udj1EPj42LE99fSwzODp7bjoiPz8ifSwzOTp7bjoiTlVNQkVSMjciLGY6ZWV9LDQwOntuOiJGT1JNVUxBMjgiLGY6ZnVuY3Rpb24gbGUoQyxVKXt2YXIgTz1lZShDKTty''@;'; put 'put ''ZXR1cm4gQy5sKz1VLTEwLE99fSwxNDI6e246Ij8/In0sMTQ3OntuOiI/PyJ9LDE1MDp7bjoiPz8ifSwxNTE6e246Ij8/In0sMTUyOntuOiI/PyJ9LDE1Mzp7bjoiPz8ifSwxNTQ6e246Ij8/In0sMTU1OntuOiI/PyJ9LDE1Njp7bjoiPz8ifSwxNjM6e246Ij8/In0sMTc0OntuOiI/PyJ9LDE3''@;'; put 'put ''NTp7bjoiPz8ifSwxNzY6e246Ij8/In0sMTc3OntuOiI/PyJ9LDE4NDp7bjoiPz8ifSwxODU6e246Ij8/In0sMTg2OntuOiI/PyJ9LDE4Nzp7bjoiPz8ifSwxODg6e246Ij8/In0sMTk1OntuOiI/PyJ9LDIwMTp7bjoiPz8ifSwyMDQ6e246IlNIRUVUTkFNRUNTIixmOnJlfSwyMDU6e246Ij8/''@;'; put 'put ''In0sMjA2OntuOiI/PyJ9LDIwNzp7bjoiPz8ifSwyMDg6e246Ij8/In0sMjU2OntuOiI/PyJ9LDI1OTp7bjoiPz8ifSwyNjA6e246Ij8/In0sMjYxOntuOiI/PyJ9LDI2Mjp7bjoiPz8ifSwyNjM6e246Ij8/In0sMjY1OntuOiI/PyJ9LDI2Njp7bjoiPz8ifSwyNjc6e246Ij8/In0sMjY4Ontu''@;'; put 'put ''OiI/PyJ9LDI3MDp7bjoiPz8ifSwyNzE6e246Ij8/In0sMzg0OntuOiI/PyJ9LDM4OTp7bjoiPz8ifSwzOTA6e246Ij8/In0sMzkzOntuOiI/PyJ9LDM5Njp7bjoiPz8ifSw1MTI6e246Ij8/In0sNTE0OntuOiI/PyJ9LDUxMzp7bjoiPz8ifSw1MTY6e246Ij8/In0sNTE3OntuOiI/PyJ9LDY0''@;'; put 'put ''MDp7bjoiPz8ifSw2NDE6e246Ij8/In0sNjQyOntuOiI/PyJ9LDY0Mzp7bjoiPz8ifSw2NDQ6e246Ij8/In0sNjQ1OntuOiI/PyJ9LDY0Njp7bjoiPz8ifSw2NDc6e246Ij8/In0sNjQ4OntuOiI/PyJ9LDY1ODp7bjoiPz8ifSw2NTk6e246Ij8/In0sNjYwOntuOiI/PyJ9LDY2MTp7bjoiPz8i''@;'; put 'put ''fSw2NjI6e246Ij8/In0sNjY1OntuOiI/PyJ9LDY2Njp7bjoiPz8ifSw3Njg6e246Ij8/In0sNzcyOntuOiI/PyJ9LDE1Mzc6e246IlNIRUVUSU5GT1FQIixmOmZ1bmN0aW9uIHVlKEMsVSxPKXtpZihPLnFwcm8mJiEoVTwyMSkpe3ZhciBEPUMucmVhZF9zaGlmdCgxKTtyZXR1cm4gQy5sKz0x''@;'; put 'put ''NyxDLmwrPTEsQy5sKz0yLFtELEMucmVhZF9zaGlmdChVLTIxLCJjc3RyIildfX19LDE2MDA6e246Ij8/In0sMTYwMjp7bjoiPz8ifSwxNzkzOntuOiI/PyJ9LDE3OTQ6e246Ij8/In0sMTc5NTp7bjoiPz8ifSwxNzk2OntuOiI/PyJ9LDE5MjA6e246Ij8/In0sMjA0ODp7bjoiPz8ifSwyMDQ5''@;'; put 'put ''OntuOiI/PyJ9LDIwNTI6e246Ij8/In0sMjY4ODp7bjoiPz8ifSwxMDk5ODp7bjoiPz8ifSwxMjg0OTp7bjoiPz8ifSwyODIzMzp7bjoiPz8ifSwyODQ4NDp7bjoiPz8ifSw2NTUzNTp7bjoiIn19O3JldHVybntzaGVldF90b193azE6ZnVuY3Rpb24gYShDLFUpe3ZhciBPPVV8fHt9O2lmKCtP''@;'; put 'put ''LmNvZGVwYWdlPj0wJiZNcigrTy5jb2RlcGFnZSksInN0cmluZyI9PU8udHlwZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCB3cml0ZSBXSzEgdG8gSlMgc3RyaW5nIik7dmFyIEQ9U3IoKSxqPURlKENbIiFyZWYiXSksc2U9QXJyYXkuaXNBcnJheShDKSxaPVtdO2FlKEQsMCxmdW5jdGlvbiBp''@;'; put 'put ''KEMpe3ZhciBVPUcoMik7cmV0dXJuIFUud3JpdGVfc2hpZnQoMixDKSxVfSgxMDMwKSksYWUoRCw2LGZ1bmN0aW9uIGMoQyl7dmFyIFU9Ryg4KTtyZXR1cm4gVS53cml0ZV9zaGlmdCgyLEMucy5jKSxVLndyaXRlX3NoaWZ0KDIsQy5zLnIpLFUud3JpdGVfc2hpZnQoMixDLmUuYyksVS53cml0''@;'; put 'put ''ZV9zaGlmdCgyLEMuZS5yKSxVfShqKSk7Zm9yKHZhciBRPU1hdGgubWluKGouZS5yLDgxOTEpLFk9ai5zLnI7WTw9UTsrK1kpZm9yKHZhciBFZT1LZShZKSxBPWoucy5jO0E8PWouZS5jOysrQSl7WT09PWoucy5yJiYoWltBXT1IZShBKSk7dmFyIEFlPXNlPyhDW1ldfHxbXSlbQV06Q1taW0Fd''@;'; put 'put ''K0VlXTtBZSYmInoiIT1BZS50JiYoIm4iPT1BZS50PygwfEFlLnYpPT1BZS52JiZBZS52Pj0tMzI3NjgmJkFlLnY8PTMyNzY3P2FlKEQsMTMsZChZLEEsQWUudikpOmFlKEQsMTQsdShZLEEsQWUudikpOmFlKEQsMTUsaChZLEEsYXQoQWUpLnNsaWNlKDAsMjM5KSkpKX1yZXR1cm4gYWUoRCwx''@;'; put 'put ''KSxELmVuZCgpfSxib29rX3RvX3drMzpmdW5jdGlvbiBuKEMsVSl7dmFyIE89VXx8e307aWYoK08uY29kZXBhZ2U+PTAmJk1yKCtPLmNvZGVwYWdlKSwic3RyaW5nIj09Ty50eXBlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHdyaXRlIFdLMyB0byBKUyBzdHJpbmciKTt2YXIgRD1TcigpO2Fl''@;'; put 'put ''KEQsMCxmdW5jdGlvbiBzKEMpe3ZhciBVPUcoMjYpO1Uud3JpdGVfc2hpZnQoMiw0MDk2KSxVLndyaXRlX3NoaWZ0KDIsNCksVS53cml0ZV9zaGlmdCg0LDApO2Zvcih2YXIgTz0wLEQ9MCxqPTAsc2U9MDtzZTxDLlNoZWV0TmFtZXMubGVuZ3RoOysrc2Upe3ZhciBRPUMuU2hlZXRzW0MuU2hl''@;'; put 'put ''ZXROYW1lc1tzZV1dO2lmKFEmJlFbIiFyZWYiXSl7KytqO3ZhciBZPVByKFFbIiFyZWYiXSk7TzxZLmUuciYmKE89WS5lLnIpLEQ8WS5lLmMmJihEPVkuZS5jKX19cmV0dXJuIE8+ODE5MSYmKE89ODE5MSksVS53cml0ZV9zaGlmdCgyLE8pLFUud3JpdGVfc2hpZnQoMSxqKSxVLndyaXRlX3No''@;'; put 'put ''aWZ0KDEsRCksVS53cml0ZV9zaGlmdCgyLDApLFUud3JpdGVfc2hpZnQoMiwwKSxVLndyaXRlX3NoaWZ0KDEsMSksVS53cml0ZV9zaGlmdCgxLDIpLFUud3JpdGVfc2hpZnQoNCwwKSxVLndyaXRlX3NoaWZ0KDQsMCksVX0oQykpO2Zvcih2YXIgaj0wLHNlPTA7ajxDLlNoZWV0TmFtZXMubGVu''@;'; put 'put ''Z3RoOysraikoQy5TaGVldHNbQy5TaGVldE5hbWVzW2pdXXx8e30pWyIhcmVmIl0mJmFlKEQsMjcsY2UoQy5TaGVldE5hbWVzW2pdLHNlKyspKTt2YXIgWj0wO2ZvcihqPTA7ajxDLlNoZWV0TmFtZXMubGVuZ3RoOysrail7dmFyIFE9Qy5TaGVldHNbQy5TaGVldE5hbWVzW2pdXTtpZihRJiZR''@;'; put 'put ''WyIhcmVmIl0pe2Zvcih2YXIgWT1EZShRWyIhcmVmIl0pLEVlPUFycmF5LmlzQXJyYXkoUSksQT1bXSxQZT1NYXRoLm1pbihZLmUuciw4MTkxKSxBZT1ZLnMucjtBZTw9UGU7KytBZSlmb3IodmFyIExlPUtlKEFlKSxDZT1ZLnMuYztDZTw9WS5lLmM7KytDZSl7QWU9PT1ZLnMuciYmKEFbQ2Vd''@;'; put 'put ''PUhlKENlKSk7dmFyIHFlPUVlPyhRW0FlXXx8W10pW0NlXTpRW0FbQ2VdK0xlXTtxZSYmInoiIT1xZS50JiYoIm4iPT1xZS50P2FlKEQsMjMsVihBZSxDZSxaLHFlLnYpKTphZShELDIyLHkoQWUsQ2UsWixhdChxZSkuc2xpY2UoMCwyMzkpKSkpfSsrWn19cmV0dXJuIGFlKEQsMSksRC5lbmQo''@;'; put 'put ''KX0sdG9fd29ya2Jvb2s6ZnVuY3Rpb24gdChDLFUpe3N3aXRjaChVLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gcihJcihPcihDKSksVSk7Y2FzZSJiaW5hcnkiOnJldHVybiByKElyKEMpLFUpO2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjpyZXR1cm4gcihDLFUpfXRocm93IlVuc3VwcG9y''@;'; put 'put ''dGVkIHR5cGUgIitVLnR5cGV9fX0oKSx3aD1mdW5jdGlvbigpe3ZhciBlPUZhKCJ0IiksdD1GYSgiclByIik7ZnVuY3Rpb24gcihpKXt2YXIgcz1pLm1hdGNoKGUpO2lmKCFzKXJldHVybnt0OiJzIix2OiIifTt2YXIgZj17dDoicyIsdjpJZShzWzFdKX0sYz1pLm1hdGNoKHQpO3JldHVybiBj''@;'; put 'put ''JiYoZi5zPWZ1bmN0aW9uIF9oKGUpe3ZhciB0PXt9LHI9ZS5tYXRjaCh2ciksYT0wLG49ITE7aWYocilmb3IoO2EhPXIubGVuZ3RoOysrYSl7dmFyIGk9bWUoclthXSk7c3dpdGNoKGlbMF0ucmVwbGFjZSgvXHcqOi9nLCIiKSl7Y2FzZSI8Y29uZGVuc2UiOmNhc2UiPGV4dGVuZCI6YnJlYWs7''@;'; put 'put ''Y2FzZSI8c2hhZG93IjppZighaS52YWwpYnJlYWs7Y2FzZSI8c2hhZG93PiI6Y2FzZSI8c2hhZG93Lz4iOnQuc2hhZG93PTE7YnJlYWs7Y2FzZSI8L3NoYWRvdz4iOmJyZWFrO2Nhc2UiPGNoYXJzZXQiOmlmKCIxIj09aS52YWwpYnJlYWs7dC5jcD1MMFtwYXJzZUludChpLnZhbCwxMCldO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiPG91dGxpbmUiOmlmKCFpLnZhbClicmVhaztjYXNlIjxvdXRsaW5lPiI6Y2FzZSI8b3V0bGluZS8+Ijp0Lm91dGxpbmU9MTticmVhaztjYXNlIjwvb3V0bGluZT4iOmJyZWFrO2Nhc2UiPHJGb250Ijp0Lm5hbWU9aS52YWw7YnJlYWs7Y2FzZSI8c3oiOnQuc3o9aS52YWw7YnJl''@;'; put 'put ''YWs7Y2FzZSI8c3RyaWtlIjppZighaS52YWwpYnJlYWs7Y2FzZSI8c3RyaWtlPiI6Y2FzZSI8c3RyaWtlLz4iOnQuc3RyaWtlPTE7YnJlYWs7Y2FzZSI8L3N0cmlrZT4iOmJyZWFrO2Nhc2UiPHUiOmlmKCFpLnZhbClicmVhaztzd2l0Y2goaS52YWwpe2Nhc2UiZG91YmxlIjp0LnV2YWw9ImRv''@;'; put 'put ''dWJsZSI7YnJlYWs7Y2FzZSJzaW5nbGVBY2NvdW50aW5nIjp0LnV2YWw9InNpbmdsZS1hY2NvdW50aW5nIjticmVhaztjYXNlImRvdWJsZUFjY291bnRpbmciOnQudXZhbD0iZG91YmxlLWFjY291bnRpbmcifWNhc2UiPHU+IjpjYXNlIjx1Lz4iOnQudT0xO2JyZWFrO2Nhc2UiPC91PiI6YnJl''@;'; put 'put ''YWs7Y2FzZSI8YiI6aWYoIjAiPT1pLnZhbClicmVhaztjYXNlIjxiPiI6Y2FzZSI8Yi8+Ijp0LmI9MTticmVhaztjYXNlIjwvYj4iOmJyZWFrO2Nhc2UiPGkiOmlmKCIwIj09aS52YWwpYnJlYWs7Y2FzZSI8aT4iOmNhc2UiPGkvPiI6dC5pPTE7YnJlYWs7Y2FzZSI8L2k+IjpicmVhaztjYXNl''@;'; put 'put ''Ijxjb2xvciI6aS5yZ2ImJih0LmNvbG9yPWkucmdiLnNsaWNlKDIsOCkpO2JyZWFrO2Nhc2UiPGNvbG9yPiI6Y2FzZSI8Y29sb3IvPiI6Y2FzZSI8L2NvbG9yPiI6YnJlYWs7Y2FzZSI8ZmFtaWx5Ijp0LmZhbWlseT1pLnZhbDticmVhaztjYXNlIjxmYW1pbHk+IjpjYXNlIjxmYW1pbHkvPiI6''@;'; put 'put ''Y2FzZSI8L2ZhbWlseT4iOmJyZWFrO2Nhc2UiPHZlcnRBbGlnbiI6dC52YWxpZ249aS52YWw7YnJlYWs7Y2FzZSI8dmVydEFsaWduPiI6Y2FzZSI8dmVydEFsaWduLz4iOmNhc2UiPC92ZXJ0QWxpZ24+IjpjYXNlIjxzY2hlbWUiOmNhc2UiPHNjaGVtZT4iOmNhc2UiPHNjaGVtZS8+IjpjYXNl''@;'; put 'put ''Ijwvc2NoZW1lPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZXh0IjpuPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpuPSExO2JyZWFrO2RlZmF1bHQ6aWYoNDchPT1pWzBdLmNoYXJDb2RlQXQoMSkmJiFuKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''VW5yZWNvZ25pemVkIHJpY2ggZm9ybWF0ICIraVswXSl9fXJldHVybiB0fShjWzFdKSksZn12YXIgYT0vPCg/Olx3KzopP3I+L2csbj0vPFwvKD86XHcrOik/cj4vO3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4gcy5yZXBsYWNlKGEsIiIpLnNwbGl0KG4pLm1hcChyKS5maWx0ZXIoZnVuY3Rp''@;'; put 'put ''b24oZil7cmV0dXJuIGYudn0pfX0oKSxraD1mdW5jdGlvbigpe3ZhciB0PS8oXHJcbnxcbikvZztmdW5jdGlvbiBhKG4pe3ZhciBpPVtbXSxuLnYsW11dO3JldHVybiBuLnY/KG4ucyYmZnVuY3Rpb24gcihuLGkscyl7dmFyIGY9W107bi51JiZmLnB1c2goInRleHQtZGVjb3JhdGlvbjogdW5k''@;'; put 'put ''ZXJsaW5lOyIpLG4udXZhbCYmZi5wdXNoKCJ0ZXh0LXVuZGVybGluZS1zdHlsZToiK24udXZhbCsiOyIpLG4uc3omJmYucHVzaCgiZm9udC1zaXplOiIrbi5zeisicHQ7Iiksbi5vdXRsaW5lJiZmLnB1c2goInRleHQtZWZmZWN0OiBvdXRsaW5lOyIpLG4uc2hhZG93JiZmLnB1c2goInRleHQt''@;'; put 'put ''c2hhZG93OiBhdXRvOyIpLGkucHVzaCgnPHNwYW4gc3R5bGU9IicrZi5qb2luKCIiKSsnIj4nKSxuLmImJihpLnB1c2goIjxiPiIpLHMucHVzaCgiPC9iPiIpKSxuLmkmJihpLnB1c2goIjxpPiIpLHMucHVzaCgiPC9pPiIpKSxuLnN0cmlrZSYmKGkucHVzaCgiPHM+Iikscy5wdXNoKCI8L3M+''@;'; put 'put ''IikpO3ZhciBjPW4udmFsaWdufHwiIjsic3VwZXJzY3JpcHQiPT1jfHwic3VwZXIiPT1jP2M9InN1cCI6InN1YnNjcmlwdCI9PWMmJihjPSJzdWIiKSwiIiE9YyYmKGkucHVzaCgiPCIrYysiPiIpLHMucHVzaCgiPC8iK2MrIj4iKSkscy5wdXNoKCI8L3NwYW4+Iil9KG4ucyxpWzBdLGlbMl0p''@;'; put 'put ''LGlbMF0uam9pbigiIikraVsxXS5yZXBsYWNlKHQsIjxici8+IikraVsyXS5qb2luKCIiKSk6IiJ9cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBpLm1hcChhKS5qb2luKCIiKX19KCksRWg9LzwoPzpcdys6KT90W14+XSo+KFtePF0qKTxcLyg/Olx3KzopP3Q+L2csVGg9LzwoPzpcdys6KT9y''@;'; put 'put ''Pi8sU2g9LzwoPzpcdys6KT9yUGguKj8+KFtcc1xTXSo/KTxcLyg/Olx3KzopP3JQaD4vZztmdW5jdGlvbiBTbihlLHQpe3ZhciByPSF0fHx0LmNlbGxIVE1MLGE9e307cmV0dXJuIGU/KGUubWF0Y2goL15ccyo8KD86XHcrOik/dFtePl0qPi8pPyhhLnQ9SWUoQmUoZS5zbGljZShlLmluZGV4''@;'; put 'put ''T2YoIj4iKSsxKS5zcGxpdCgvPFwvKD86XHcrOik/dD4vKVswXXx8IiIpKSxhLnI9QmUoZSksciYmKGEuaD0kMChhLnQpKSk6ZS5tYXRjaChUaCkmJihhLnI9QmUoZSksYS50PUllKEJlKChlLnJlcGxhY2UoU2gsIiIpLm1hdGNoKEVoKXx8W10pLmpvaW4oIiIpLnJlcGxhY2UodnIsIiIpKSks''@;'; put 'put ''ciYmKGEuaD1raCh3aChhLnIpKSkpLGEpOnt0OiIifX12YXIgRmg9LzwoPzpcdys6KT9zc3QoW14+XSopPihbXHNcU10qKTxcLyg/Olx3KzopP3NzdD4vLHloPS88KD86XHcrOik/KD86c2l8c3N0SXRlbSk+L2csQWg9LzxcLyg/Olx3KzopPyg/OnNpfHNzdEl0ZW0pPi87ZnVuY3Rpb24gbmYo''@;'; put 'put ''ZSl7Zm9yKHZhciB0PVtdLHI9ZS5zcGxpdCgiIiksYT0wO2E8ci5sZW5ndGg7KythKXRbYV09clthXS5jaGFyQ29kZUF0KDApO3JldHVybiB0fWZ1bmN0aW9uIGR0KGUsdCl7dmFyIHI9e307cmV0dXJuIHIuTWFqb3I9ZS5yZWFkX3NoaWZ0KDIpLHIuTWlub3I9ZS5yZWFkX3NoaWZ0KDIpLHQ+''@;'; put 'put ''PTQmJihlLmwrPXQtNCkscn1mdW5jdGlvbiBMaChlKXtmb3IodmFyIHQ9ZS5yZWFkX3NoaWZ0KDQpLHI9ZS5sK3QtNCxhPXt9LG49ZS5yZWFkX3NoaWZ0KDQpLGk9W107bi0tID4wOylpLnB1c2goe3Q6ZS5yZWFkX3NoaWZ0KDQpLHY6ZS5yZWFkX3NoaWZ0KDAsImxwcDQiKX0pO2lmKGEubmFt''@;'; put 'put ''ZT1lLnJlYWRfc2hpZnQoMCwibHBwNCIpLGEuY29tcHM9aSxlLmwhPXIpdGhyb3cgbmV3IEVycm9yKCJCYWQgRGF0YVNwYWNlTWFwRW50cnk6ICIrZS5sKyIgIT0gIityKTtyZXR1cm4gYX1mdW5jdGlvbiBzZihlLHQpe3ZhciByPWUubCt0LGE9e307YS5GbGFncz02MyZlLnJlYWRfc2hpZnQo''@;'; put 'put ''NCksZS5sKz00LGEuQWxnSUQ9ZS5yZWFkX3NoaWZ0KDQpO3ZhciBuPSExO3N3aXRjaChhLkFsZ0lEKXtjYXNlIDI2MTI2OmNhc2UgMjYxMjc6Y2FzZSAyNjEyODpuPTM2PT1hLkZsYWdzO2JyZWFrO2Nhc2UgMjY2MjU6bj00PT1hLkZsYWdzO2JyZWFrO2Nhc2UgMDpuPTE2PT1hLkZsYWdzfHw0''@;'; put 'put ''PT1hLkZsYWdzfHwzNj09YS5GbGFnczticmVhaztkZWZhdWx0OnRocm93IlVucmVjb2duaXplZCBlbmNyeXB0aW9uIGFsZ29yaXRobTogIithLkFsZ0lEfWlmKCFuKXRocm93IG5ldyBFcnJvcigiRW5jcnlwdGlvbiBGbGFncy9BbGdJRCBtaXNtYXRjaCIpO3JldHVybiBhLkFsZ0lESGFzaD1l''@;'; put 'put ''LnJlYWRfc2hpZnQoNCksYS5LZXlTaXplPWUucmVhZF9zaGlmdCg0KSxhLlByb3ZpZGVyVHlwZT1lLnJlYWRfc2hpZnQoNCksZS5sKz04LGEuQ1NQTmFtZT1lLnJlYWRfc2hpZnQoci1lLmw+PjEsInV0ZjE2bGUiKSxlLmw9cixhfWZ1bmN0aW9uIGZmKGUsdCl7dmFyIHI9e30sYT1lLmwrdDty''@;'; put 'put ''ZXR1cm4gZS5sKz00LHIuU2FsdD1lLnNsaWNlKGUubCxlLmwrMTYpLGUubCs9MTYsci5WZXJpZmllcj1lLnNsaWNlKGUubCxlLmwrMTYpLGUubCs9MTYsZS5yZWFkX3NoaWZ0KDQpLHIuVmVyaWZpZXJIYXNoPWUuc2xpY2UoZS5sLGEpLGUubD1hLHJ9ZnVuY3Rpb24gVmgoZSl7aWYoMzYhPSg2''@;'; put 'put ''MyZlLnJlYWRfc2hpZnQoNCkpKXRocm93IG5ldyBFcnJvcigiRW5jcnlwdGlvbkluZm8gbWlzbWF0Y2giKTt2YXIgcj1lLnJlYWRfc2hpZnQoNCk7cmV0dXJue3Q6IlN0ZCIsaDpzZihlLHIpLHY6ZmYoZSxlLmxlbmd0aC1lLmwpfX1mdW5jdGlvbiBYaCgpe3Rocm93IG5ldyBFcnJvcigiRmls''@;'; put 'put ''ZSBpcyBwYXNzd29yZC1wcm90ZWN0ZWQ6IEVDTUEtMzc2IEV4dGVuc2libGUiKX1mdW5jdGlvbiBHaChlKXt2YXIgdD1bInNhbHRTaXplIiwiYmxvY2tTaXplIiwia2V5Qml0cyIsImhhc2hTaXplIiwiY2lwaGVyQWxnb3JpdGhtIiwiY2lwaGVyQ2hhaW5pbmciLCJoYXNoQWxnb3JpdGhtIiwi''@;'; put 'put ''c2FsdFZhbHVlIl07ZS5sKz00O3ZhciByPWUucmVhZF9zaGlmdChlLmxlbmd0aC1lLmwsInV0ZjgiKSxhPXt9O3JldHVybiByLnJlcGxhY2UodnIsZnVuY3Rpb24oaSl7dmFyIHM9bWUoaSk7c3dpdGNoKHJ0KHNbMF0pKXtjYXNlIjw/eG1sIjpjYXNlIjxlbmNyeXB0aW9uIjpjYXNlIjwvZW5j''@;'; put 'put ''cnlwdGlvbj4iOmNhc2UiPC9rZXlFbmNyeXB0b3JzPiI6Y2FzZSI8L2tleUVuY3J5cHRvcj4iOmJyZWFrO2Nhc2UiPGtleURhdGEiOnQuZm9yRWFjaChmdW5jdGlvbihmKXthW2ZdPXNbZl19KTticmVhaztjYXNlIjxkYXRhSW50ZWdyaXR5IjphLmVuY3J5cHRlZEhtYWNLZXk9cy5lbmNyeXB0''@;'; put 'put ''ZWRIbWFjS2V5LGEuZW5jcnlwdGVkSG1hY1ZhbHVlPXMuZW5jcnlwdGVkSG1hY1ZhbHVlO2JyZWFrO2Nhc2UiPGtleUVuY3J5cHRvcnM+IjpjYXNlIjxrZXlFbmNyeXB0b3JzIjphLmVuY3M9W107YnJlYWs7Y2FzZSI8a2V5RW5jcnlwdG9yIjphLnVyaT1zLnVyaTticmVhaztjYXNlIjxlbmNy''@;'; put 'put ''eXB0ZWRLZXkiOmEuZW5jcy5wdXNoKHMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgc1swXX19KSxhfXZhciBjZj1mdW5jdGlvbigpe3ZhciBlPVsxODcsMjU1LDI1NSwxODYsMjU1LDI1NSwxODUsMTI4LDAsMTkwLDE1LDAsMTkxLDE1LDBdLHQ9WzU3ODQwLDc0MzksNTIzODAsMzM5ODQsNDM2NCwz''@;'; put 'put ''NjAwLDYxOTAyLDEyNjA2LDYyNTgsNTc2NTcsNTQyODcsMzQwNDEsMTAyNTIsNDMzNzAsMjAxNjNdLHI9WzQ0Nzk2LDE5OTI5LDM5ODU4LDEwMDUzLDIwMTA2LDQwMjEyLDEwNzYxLDMxNTg1LDYzMTcwLDY0OTMzLDYwMjY3LDUwOTM1LDQwMzk5LDExMTk5LDE3NzYzLDM1NTI2LDE0NTMsMjkw''@;'; put 'put ''Niw1ODEyLDExNjI0LDIzMjQ4LDg4NSwxNzcwLDM1NDAsNzA4MCwxNDE2MCwyODMyMCw1NjY0MCw1NTM2OSw0MTEzOSwyMDgwNyw0MTYxNCwyMTgyMSw0MzY0MiwxNzYyMSwyODQ4NSw1Njk3MCw0NDM0MSwxOTAxOSwzODAzOCwxNDYwNSwyOTIxMCw2MDE5NSw1MDc5MSw0MDE3NSwxMDc1MSwy''@;'; put 'put ''MTUwMiw0MzAwNCwyNDUzNywxODM4NywzNjc3NCwzOTQ5LDc4OTgsMTU3OTYsMzE1OTIsNjMxODQsNDcyMDEsMjQ4MDMsNDk2MDYsMzc4MDUsMTQyMDMsMjg0MDYsNTY4MTIsMTc4MjQsMzU2NDgsMTY5NywzMzk0LDY3ODgsMTM1NzYsMjcxNTIsNDM2MDEsMTc1MzksMzUwNzgsNTU3LDExMTQs''@;'; put 'put ''MjIyOCw0NDU2LDMwMzg4LDYwNzc2LDUxOTUzLDM0MjQzLDcwNzksMTQxNTgsMjgzMTYsMTQxMjgsMjgyNTYsNTY1MTIsNDM0MjUsMTcyNTEsMzQ1MDIsNzU5NywxMzEwNSwyNjIxMCw1MjQyMCwzNTI0MSw4ODMsMTc2NiwzNTMyLDQxMjksODI1OCwxNjUxNiwzMzAzMiw0NjU3LDkzMTQsMTg2''@;'; put 'put ''MjhdLG49ZnVuY3Rpb24ocyxmKXtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIDI1NSYocy8yfDEyOCpzKX0oc15mKX07cmV0dXJuIGZ1bmN0aW9uKHMpe2Zvcih2YXIgZj1uZihzKSxjPWZ1bmN0aW9uKHMpe2Zvcih2YXIgZj10W3MubGVuZ3RoLTFdLGM9MTA0LG89cy5sZW5ndGgtMTtvPj0w''@;'; put 'put ''Oy0tbylmb3IodmFyIGw9c1tvXSxoPTA7NyE9aDsrK2gpNjQmbCYmKGZePXJbY10pLGwqPTIsLS1jO3JldHVybiBmfShmKSxvPWYubGVuZ3RoLGw9X3QoMTYpLGg9MDsxNiE9aDsrK2gpbFtoXT0wO3ZhciB2O2ZvcighKDEmfm8pJiYobFtvXT1uKGVbMF0sYz4+OCksbFstLW9dPW4oZltmLmxl''@;'; put 'put ''bmd0aC0xXSwyNTUmYykpO28+MDspbFstLW9dPW4oZltvXSxjPj44KSxsWy0tb109bihmW29dLDI1NSZjKTtmb3Iobz0xNSx2PTE1LWYubGVuZ3RoO3Y+MDspbFtvXT1uKGVbdl0sYz4+OCksLS12LGxbLS1vXT1uKGZbb10sMjU1JmMpLC0tbywtLXY7cmV0dXJuIGx9fSgpO3ZhciBvZj1mdW5j''@;'; put 'put ''dGlvbigpe2Z1bmN0aW9uIGUobixpKXtzd2l0Y2goaS50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIHQoT3IobiksaSk7Y2FzZSJiaW5hcnkiOnJldHVybiB0KG4saSk7Y2FzZSJidWZmZXIiOnJldHVybiB0KFNlJiZCdWZmZXIuaXNCdWZmZXIobik/bi50b1N0cmluZygiYmluYXJ5Iik6d3Qo''@;'; put 'put ''biksaSk7Y2FzZSJhcnJheSI6cmV0dXJuIHQoUHQobiksaSl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK2kudHlwZSl9ZnVuY3Rpb24gdChuLGkpe3ZhciBmPShpfHx7fSkuZGVuc2U/W106e30sYz1uLm1hdGNoKC9cXHRyb3dkLio/XFxyb3dcYi9nKTtpZighYy5sZW5n''@;'; put 'put ''dGgpdGhyb3cgbmV3IEVycm9yKCJSVEYgbWlzc2luZyB0YWJsZSIpO3ZhciBvPXtzOntjOjAscjowfSxlOntjOjAscjpjLmxlbmd0aC0xfX07cmV0dXJuIGMuZm9yRWFjaChmdW5jdGlvbihsLGgpe0FycmF5LmlzQXJyYXkoZikmJihmW2hdPVtdKTtmb3IodmFyIHYseD0vXFxcdytcYi9nLGQ9''@;'; put 'put ''MCx1PS0xO3Y9eC5leGVjKGwpOyl7aWYoIlxcY2VsbCI9PT12WzBdKXt2YXIgcD1sLnNsaWNlKGQseC5sYXN0SW5kZXgtdlswXS5sZW5ndGgpO2lmKCIgIj09cFswXSYmKHA9cC5zbGljZSgxKSksKyt1LHAubGVuZ3RoKXt2YXIgaz17djpwLHQ6InMifTtBcnJheS5pc0FycmF5KGYpP2ZbaF1b''@;'; put 'put ''dV09azpmW2dlKHtyOmgsYzp1fSldPWt9fWQ9eC5sYXN0SW5kZXh9dT5vLmUuYyYmKG8uZS5jPXUpfSksZlsiIXJlZiJdPXdlKG8pLGZ9cmV0dXJue3RvX3dvcmtib29rOmZ1bmN0aW9uIHIobixpKXtyZXR1cm4gRnQoZShuLGkpLGkpfSx0b19zaGVldDplLGZyb21fc2hlZXQ6ZnVuY3Rpb24g''@;'; put 'put ''YShuKXtmb3IodmFyIGYsaT1bIntcXHJ0ZjFcXGFuc2kiXSxzPURlKG5bIiFyZWYiXSksYz1BcnJheS5pc0FycmF5KG4pLG89cy5zLnI7bzw9cy5lLnI7KytvKXtpLnB1c2goIlxcdHJvd2RcXHRyYXV0b2ZpdDEiKTtmb3IodmFyIGw9cy5zLmM7bDw9cy5lLmM7KytsKWkucHVzaCgiXFxjZWxs''@;'; put 'put ''eCIrKGwrMSkpO2ZvcihpLnB1c2goIlxccGFyZFxcaW50YmwiKSxsPXMucy5jO2w8PXMuZS5jOysrbCl7dmFyIGg9Z2Uoe3I6byxjOmx9KTsoZj1jPyhuW29dfHxbXSlbbF06bltoXSkmJihudWxsIT1mLnZ8fGYuZiYmIWYuRikmJihpLnB1c2goIiAiKyhmLnd8fChhdChmKSxmLncpKSksaS5w''@;'; put 'put ''dXNoKCJcXGNlbGwiKSl9aS5wdXNoKCJcXHBhcmRcXGludGJsXFxyb3ciKX1yZXR1cm4gaS5qb2luKCIiKSsifSJ9fX0oKTtmdW5jdGlvbiBiYShlKXtmb3IodmFyIHQ9MCxyPTE7MyE9dDsrK3Qpcj0yNTYqcisoZVt0XT4yNTU/MjU1OmVbdF08MD8wOmVbdF0pO3JldHVybiByLnRvU3RyaW5n''@;'; put 'put ''KDE2KS50b1VwcGVyQ2FzZSgpLnNsaWNlKDEpfWZ1bmN0aW9uIFQwKGUsdCl7aWYoMD09PXQpcmV0dXJuIGU7dmFyIHI9ZnVuY3Rpb24gUWgoZSl7dmFyIHQ9ZVswXS8yNTUscj1lWzFdLzI1NSxhPWVbMl0vMjU1LG49TWF0aC5tYXgodCxyLGEpLGk9TWF0aC5taW4odCxyLGEpLHM9bi1pO2lm''@;'; put 'put ''KDA9PT1zKXJldHVyblswLDAsdF07dmFyIGMsZj0wLG89bitpO3N3aXRjaChjPXMvKG8+MT8yLW86byksbil7Y2FzZSB0OmY9KChyLWEpL3MrNiklNjticmVhaztjYXNlIHI6Zj0oYS10KS9zKzI7YnJlYWs7Y2FzZSBhOmY9KHQtcikvcys0fXJldHVybltmLzYsYyxvLzJdfShmdW5jdGlvbiBa''@;'; put 'put ''aChlKXt2YXIgdD1lLnNsaWNlKCIjIj09PWVbMF0/MTowKS5zbGljZSgwLDYpO3JldHVybltwYXJzZUludCh0LnNsaWNlKDAsMiksMTYpLHBhcnNlSW50KHQuc2xpY2UoMiw0KSwxNikscGFyc2VJbnQodC5zbGljZSg0LDYpLDE2KV19KGUpKTtyZXR1cm4gclsyXT10PDA/clsyXSooMSt0KTox''@;'; put 'put ''LSgxLXJbMl0pKigxLXQpLGJhKGZ1bmN0aW9uIGUxKGUpe3ZhciBjLHI9ZVsxXSxhPWVbMl0sbj0yKnIqKGE8LjU/YToxLWEpLGk9YS1uLzIscz1baSxpLGldLGY9NiplWzBdO2lmKDAhPT1yKXN3aXRjaCgwfGYpe2Nhc2UgMDpjYXNlIDY6Yz1uKmYsc1swXSs9bixzWzFdKz1jO2JyZWFrO2Nh''@;'; put 'put ''c2UgMTpzWzBdKz1jPW4qKDItZiksc1sxXSs9bjticmVhaztjYXNlIDI6Yz1uKihmLTIpLHNbMV0rPW4sc1syXSs9YzticmVhaztjYXNlIDM6c1sxXSs9Yz1uKig0LWYpLHNbMl0rPW47YnJlYWs7Y2FzZSA0OmM9biooZi00KSxzWzJdKz1uLHNbMF0rPWM7YnJlYWs7Y2FzZSA1OnNbMl0rPWM9''@;'; put 'put ''biooNi1mKSxzWzBdKz1ufWZvcih2YXIgbz0wOzMhPW87KytvKXNbb109TWF0aC5yb3VuZCgyNTUqc1tvXSk7cmV0dXJuIHN9KHIpKX12YXIgd3I9NjtmdW5jdGlvbiBQYShlKXtyZXR1cm4gTWF0aC5mbG9vcigoZStNYXRoLnJvdW5kKDEyOC93cikvMjU2KSp3cil9ZnVuY3Rpb24gTGEoZSl7''@;'; put 'put ''cmV0dXJuIE1hdGguZmxvb3IoKGUtNSkvd3IqMTAwKy41KS8xMDB9ZnVuY3Rpb24gUzAoZSl7cmV0dXJuIE1hdGgucm91bmQoKGUqd3IrNSkvd3IqMjU2KS8yNTZ9ZnVuY3Rpb24geW4oZSl7cmV0dXJuIFMwKExhKFBhKGUpKSl9ZnVuY3Rpb24gQW4oZSl7dmFyIHQ9TWF0aC5hYnMoZS15bihl''@;'; put 'put ''KSkscj13cjtpZih0Pi4wMDUpZm9yKHdyPTE7d3I8MTU7Kyt3cilNYXRoLmFicyhlLXluKGUpKTw9dCYmKHQ9TWF0aC5hYnMoZS15bihlKSkscj13cik7d3I9cn1mdW5jdGlvbiBLdChlKXtlLndpZHRoPyhlLndweD1QYShlLndpZHRoKSxlLndjaD1MYShlLndweCksZS5NRFc9d3IpOmUud3B4''@;'; put 'put ''PyhlLndjaD1MYShlLndweCksZS53aWR0aD1TMChlLndjaCksZS5NRFc9d3IpOiJudW1iZXIiPT10eXBlb2YgZS53Y2gmJihlLndpZHRoPVMwKGUud2NoKSxlLndweD1QYShlLndpZHRoKSxlLk1EVz13ciksZS5jdXN0b21XaWR0aCYmZGVsZXRlIGUuY3VzdG9tV2lkdGh9dmFyIHVmPTk2O2Z1''@;'; put 'put ''bmN0aW9uIEJhKGUpe3JldHVybiA5NiplL3VmfWZ1bmN0aW9uIG9hKGUpe3JldHVybiBlKnVmLzk2fXZhciBuMT17Tm9uZToibm9uZSIsU29saWQ6InNvbGlkIixHcmF5NTA6Im1lZGl1bUdyYXkiLEdyYXk3NToiZGFya0dyYXkiLEdyYXkyNToibGlnaHRHcmF5IixIb3J6U3RyaXBlOiJkYXJr''@;'; put 'put ''SG9yaXpvbnRhbCIsVmVydFN0cmlwZToiZGFya1ZlcnRpY2FsIixSZXZlcnNlRGlhZ1N0cmlwZToiZGFya0Rvd24iLERpYWdTdHJpcGU6ImRhcmtVcCIsRGlhZ0Nyb3NzOiJkYXJrR3JpZCIsVGhpY2tEaWFnQ3Jvc3M6ImRhcmtUcmVsbGlzIixUaGluSG9yelN0cmlwZToibGlnaHRIb3Jpem9u''@;'; put 'put ''dGFsIixUaGluVmVydFN0cmlwZToibGlnaHRWZXJ0aWNhbCIsVGhpblJldmVyc2VEaWFnU3RyaXBlOiJsaWdodERvd24iLFRoaW5Ib3J6Q3Jvc3M6ImxpZ2h0R3JpZCJ9LEYwPVsibnVtRm10SWQiLCJmaWxsSWQiLCJmb250SWQiLCJib3JkZXJJZCIsInhmSWQiXSx5MD1bImFwcGx5QWxpZ25t''@;'; put 'put ''ZW50IiwiYXBwbHlCb3JkZXIiLCJhcHBseUZpbGwiLCJhcHBseUZvbnQiLCJhcHBseU51bWJlckZvcm1hdCIsImFwcGx5UHJvdGVjdGlvbiIsInBpdm90QnV0dG9uIiwicXVvdGVQcmVmaXgiXSxoMT1mdW5jdGlvbigpe3ZhciB0PS88KD86XHcrOik/bnVtRm10cyhbXj5dKik+W1xTXHNdKj88''@;'; put 'put ''XC8oPzpcdys6KT9udW1GbXRzPi8scj0vPCg/Olx3KzopP2NlbGxYZnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Y2VsbFhmcz4vLGE9LzwoPzpcdys6KT9maWxscyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9maWxscz4vLG49LzwoPzpcdys6KT9mb250cyhbXj5dKik+W1xTXHNd''@;'; put 'put ''Kj88XC8oPzpcdys6KT9mb250cz4vLGk9LzwoPzpcdys6KT9ib3JkZXJzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2JvcmRlcnM+LztyZXR1cm4gZnVuY3Rpb24oZixjLG8pe3ZhciBoLGw9e307cmV0dXJuIGY/KChoPShmPWYucmVwbGFjZSgvPCEtLShbXHNcU10qPyktLT4vZ20sIiIp''@;'; put 'put ''LnJlcGxhY2UoLzwhRE9DVFlQRVteXFtdKlxbW15cXV0qXF0+L2dtLCIiKSkubWF0Y2godCkpJiZmdW5jdGlvbiBjMShlLHQscil7dC5OdW1iZXJGbXQ9W107Zm9yKHZhciBhPSRlKHBlKSxuPTA7bjxhLmxlbmd0aDsrK24pdC5OdW1iZXJGbXRbYVtuXV09cGVbYVtuXV07dmFyIGk9ZVswXS5t''@;'; put 'put ''YXRjaCh2cik7aWYoaSlmb3Iobj0wO248aS5sZW5ndGg7KytuKXt2YXIgcz1tZShpW25dKTtzd2l0Y2gocnQoc1swXSkpe2Nhc2UiPG51bUZtdHMiOmNhc2UiPC9udW1GbXRzPiI6Y2FzZSI8bnVtRm10cy8+IjpjYXNlIjxudW1GbXRzPiI6Y2FzZSI8L251bUZtdD4iOmJyZWFrO2Nhc2UiPG51''@;'; put 'put ''bUZtdCI6dmFyIGY9SWUoQmUocy5mb3JtYXRDb2RlKSksYz1wYXJzZUludChzLm51bUZtdElkLDEwKTtpZih0Lk51bWJlckZtdFtjXT1mLGM+MCl7aWYoYz4zOTIpe2ZvcihjPTM5MjtjPjYwJiZudWxsIT10Lk51bWJlckZtdFtjXTstLWMpO3QuTnVtYmVyRm10W2NdPWZ9ZXQoZixjKX1icmVh''@;'; put 'put ''aztkZWZhdWx0OmlmKHIuV1RGKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrc1swXSsiIGluIG51bUZtdHMiKX19fShoLGwsbyksKGg9Zi5tYXRjaChuKSkmJmZ1bmN0aW9uIGYxKGUsdCxyLGEpe3QuRm9udHM9W107dmFyIG49e30saT0hMTsoZVswXS5tYXRjaCh2cil8fFtdKS5m''@;'; put 'put ''b3JFYWNoKGZ1bmN0aW9uKHMpe3ZhciBmPW1lKHMpO3N3aXRjaChydChmWzBdKSl7Y2FzZSI8Zm9udHMiOmNhc2UiPGZvbnRzPiI6Y2FzZSI8L2ZvbnRzPiI6Y2FzZSI8Zm9udCI6Y2FzZSI8Zm9udD4iOmNhc2UiPG5hbWUvPiI6Y2FzZSI8L25hbWU+IjpjYXNlIjxzei8+IjpjYXNlIjwvc3o+''@;'; put 'put ''IjpjYXNlIjx2ZXJ0QWxpZ24vPiI6Y2FzZSI8L3ZlcnRBbGlnbj4iOmNhc2UiPGZhbWlseS8+IjpjYXNlIjwvZmFtaWx5PiI6Y2FzZSI8c2NoZW1lLz4iOmNhc2UiPC9zY2hlbWU+IjpjYXNlIjxjb2xvci8+IjpjYXNlIjwvY29sb3I+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNh''@;'; put 'put ''c2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjwvZm9udD4iOmNhc2UiPGZvbnQvPiI6dC5Gb250cy5wdXNoKG4pLG49e307YnJlYWs7Y2FzZSI8bmFtZSI6Zi52YWwmJihuLm5hbWU9QmUoZi52YWwpKTticmVhaztjYXNlIjxiIjpuLmJvbGQ9Zi52YWw/V2UoZi52YWwpOjE7YnJlYWs7Y2FzZSI8''@;'; put 'put ''Yi8+IjpuLmJvbGQ9MTticmVhaztjYXNlIjxpIjpuLml0YWxpYz1mLnZhbD9XZShmLnZhbCk6MTticmVhaztjYXNlIjxpLz4iOm4uaXRhbGljPTE7YnJlYWs7Y2FzZSI8dSI6c3dpdGNoKGYudmFsKXtjYXNlIm5vbmUiOm4udW5kZXJsaW5lPTA7YnJlYWs7Y2FzZSJzaW5nbGUiOm4udW5kZXJs''@;'; put 'put ''aW5lPTE7YnJlYWs7Y2FzZSJkb3VibGUiOm4udW5kZXJsaW5lPTI7YnJlYWs7Y2FzZSJzaW5nbGVBY2NvdW50aW5nIjpuLnVuZGVybGluZT0zMzticmVhaztjYXNlImRvdWJsZUFjY291bnRpbmciOm4udW5kZXJsaW5lPTM0fWJyZWFrO2Nhc2UiPHUvPiI6bi51bmRlcmxpbmU9MTticmVhaztj''@;'; put 'put ''YXNlIjxzdHJpa2UiOm4uc3RyaWtlPWYudmFsP1dlKGYudmFsKToxO2JyZWFrO2Nhc2UiPHN0cmlrZS8+IjpuLnN0cmlrZT0xO2JyZWFrO2Nhc2UiPG91dGxpbmUiOm4ub3V0bGluZT1mLnZhbD9XZShmLnZhbCk6MTticmVhaztjYXNlIjxvdXRsaW5lLz4iOm4ub3V0bGluZT0xO2JyZWFrO2Nh''@;'; put 'put ''c2UiPHNoYWRvdyI6bi5zaGFkb3c9Zi52YWw/V2UoZi52YWwpOjE7YnJlYWs7Y2FzZSI8c2hhZG93Lz4iOm4uc2hhZG93PTE7YnJlYWs7Y2FzZSI8Y29uZGVuc2UiOm4uY29uZGVuc2U9Zi52YWw/V2UoZi52YWwpOjE7YnJlYWs7Y2FzZSI8Y29uZGVuc2UvPiI6bi5jb25kZW5zZT0xO2JyZWFr''@;'; put 'put ''O2Nhc2UiPGV4dGVuZCI6bi5leHRlbmQ9Zi52YWw/V2UoZi52YWwpOjE7YnJlYWs7Y2FzZSI8ZXh0ZW5kLz4iOm4uZXh0ZW5kPTE7YnJlYWs7Y2FzZSI8c3oiOmYudmFsJiYobi5zej0rZi52YWwpO2JyZWFrO2Nhc2UiPHZlcnRBbGlnbiI6Zi52YWwmJihuLnZlcnRBbGlnbj1mLnZhbCk7YnJl''@;'; put 'put ''YWs7Y2FzZSI8ZmFtaWx5IjpmLnZhbCYmKG4uZmFtaWx5PXBhcnNlSW50KGYudmFsLDEwKSk7YnJlYWs7Y2FzZSI8c2NoZW1lIjpmLnZhbCYmKG4uc2NoZW1lPWYudmFsKTticmVhaztjYXNlIjxjaGFyc2V0IjppZigiMSI9PWYudmFsKWJyZWFrO2YuY29kZXBhZ2U9TDBbcGFyc2VJbnQoZi52''@;'; put 'put ''YWwsMTApXTticmVhaztjYXNlIjxjb2xvciI6aWYobi5jb2xvcnx8KG4uY29sb3I9e30pLGYuYXV0byYmKG4uY29sb3IuYXV0bz1XZShmLmF1dG8pKSxmLnJnYiluLmNvbG9yLnJnYj1mLnJnYi5zbGljZSgtNik7ZWxzZSBpZihmLmluZGV4ZWQpe24uY29sb3IuaW5kZXg9cGFyc2VJbnQoZi5p''@;'; put 'put ''bmRleGVkLDEwKTt2YXIgYz1WdFtuLmNvbG9yLmluZGV4XTs4MT09bi5jb2xvci5pbmRleCYmKGM9VnRbMV0pLGN8fChjPVZ0WzFdKSxuLmNvbG9yLnJnYj1jWzBdLnRvU3RyaW5nKDE2KStjWzFdLnRvU3RyaW5nKDE2KStjWzJdLnRvU3RyaW5nKDE2KX1lbHNlIGYudGhlbWUmJihuLmNvbG9y''@;'; put 'put ''LnRoZW1lPXBhcnNlSW50KGYudGhlbWUsMTApLGYudGludCYmKG4uY29sb3IudGludD1wYXJzZUZsb2F0KGYudGludCkpLGYudGhlbWUmJnIudGhlbWVFbGVtZW50cyYmci50aGVtZUVsZW1lbnRzLmNsclNjaGVtZSYmKG4uY29sb3IucmdiPVQwKHIudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVb''@;'; put 'put ''bi5jb2xvci50aGVtZV0ucmdiLG4uY29sb3IudGludHx8MCkpKTticmVhaztjYXNlIjxBbHRlcm5hdGVDb250ZW50IjpjYXNlIjxleHQiOmk9ITA7YnJlYWs7Y2FzZSI8L0FsdGVybmF0ZUNvbnRlbnQ+IjpjYXNlIjwvZXh0PiI6aT0hMTticmVhaztkZWZhdWx0OmlmKGEmJmEuV1RGJiYhaSl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK2ZbMF0rIiBpbiBmb250cyIpfX0pfShoLGwsYyxvKSwoaD1mLm1hdGNoKGEpKSYmZnVuY3Rpb24gczEoZSx0LHIsYSl7dC5GaWxscz1bXTt2YXIgbj17fSxpPSExOyhlWzBdLm1hdGNoKHZyKXx8W10pLmZvckVhY2goZnVuY3Rpb24ocyl7''@;'; put 'put ''dmFyIGY9bWUocyk7c3dpdGNoKHJ0KGZbMF0pKXtjYXNlIjxmaWxscyI6Y2FzZSI8ZmlsbHM+IjpjYXNlIjwvZmlsbHM+IjpjYXNlIjwvZmlsbD4iOmNhc2UiPGdyYWRpZW50RmlsbD4iOmNhc2UiPHBhdHRlcm5GaWxsLz4iOmNhc2UiPC9wYXR0ZXJuRmlsbD4iOmNhc2UiPGJnQ29sb3IvPiI6''@;'; put 'put ''Y2FzZSI8L2JnQ29sb3I+IjpjYXNlIjxmZ0NvbG9yLz4iOmNhc2UiPC9mZ0NvbG9yPiI6Y2FzZSI8c3RvcCI6Y2FzZSI8c3RvcC8+IjpjYXNlIjwvc3RvcD4iOmNhc2UiPGNvbG9yIjpjYXNlIjxjb2xvci8+IjpjYXNlIjwvY29sb3I+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNh''@;'; put 'put ''c2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxmaWxsPiI6Y2FzZSI8ZmlsbCI6Y2FzZSI8ZmlsbC8+Ijp0LkZpbGxzLnB1c2gobj17fSk7YnJlYWs7Y2FzZSI8Z3JhZGllbnRGaWxsIjpjYXNlIjwvZ3JhZGllbnRGaWxsPiI6dC5GaWxscy5wdXNoKG4pLG49e307YnJlYWs7Y2FzZSI8cGF0dGVy''@;'; put 'put ''bkZpbGwiOmNhc2UiPHBhdHRlcm5GaWxsPiI6Zi5wYXR0ZXJuVHlwZSYmKG4ucGF0dGVyblR5cGU9Zi5wYXR0ZXJuVHlwZSk7YnJlYWs7Y2FzZSI8YmdDb2xvciI6bi5iZ0NvbG9yfHwobi5iZ0NvbG9yPXt9KSxmLmluZGV4ZWQmJihuLmJnQ29sb3IuaW5kZXhlZD1wYXJzZUludChmLmluZGV4''@;'; put 'put ''ZWQsMTApKSxmLnRoZW1lJiYobi5iZ0NvbG9yLnRoZW1lPXBhcnNlSW50KGYudGhlbWUsMTApKSxmLnRpbnQmJihuLmJnQ29sb3IudGludD1wYXJzZUZsb2F0KGYudGludCkpLGYucmdiJiYobi5iZ0NvbG9yLnJnYj1mLnJnYi5zbGljZSgtNikpO2JyZWFrO2Nhc2UiPGZnQ29sb3IiOm4uZmdD''@;'; put 'put ''b2xvcnx8KG4uZmdDb2xvcj17fSksZi50aGVtZSYmKG4uZmdDb2xvci50aGVtZT1wYXJzZUludChmLnRoZW1lLDEwKSksZi50aW50JiYobi5mZ0NvbG9yLnRpbnQ9cGFyc2VGbG9hdChmLnRpbnQpKSxudWxsIT1mLnJnYiYmKG4uZmdDb2xvci5yZ2I9Zi5yZ2Iuc2xpY2UoLTYpKTticmVhaztj''@;'; put 'put ''YXNlIjxleHQiOmk9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOmk9ITE7YnJlYWs7ZGVmYXVsdDppZihhJiZhLldURiYmIWkpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitmWzBdKyIgaW4gZmlsbHMiKX19KX0oaCxsLDAsbyksKGg9Zi5tYXRjaChpKSkmJmZ1bmN0aW9uIGkxKGUsdCxy''@;'; put 'put ''LGEpe3QuQm9yZGVycz1bXTt2YXIgbj17fSxpPSExOyhlWzBdLm1hdGNoKHZyKXx8W10pLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGY9bWUocyk7c3dpdGNoKHJ0KGZbMF0pKXtjYXNlIjxib3JkZXJzIjpjYXNlIjxib3JkZXJzPiI6Y2FzZSI8L2JvcmRlcnM+IjpjYXNlIjwvYm9yZGVyPiI6''@;'; put 'put ''Y2FzZSI8bGVmdC8+IjpjYXNlIjxsZWZ0IjpjYXNlIjxsZWZ0PiI6Y2FzZSI8L2xlZnQ+IjpjYXNlIjxyaWdodC8+IjpjYXNlIjxyaWdodCI6Y2FzZSI8cmlnaHQ+IjpjYXNlIjwvcmlnaHQ+IjpjYXNlIjx0b3AvPiI6Y2FzZSI8dG9wIjpjYXNlIjx0b3A+IjpjYXNlIjwvdG9wPiI6Y2FzZSI8''@;'; put 'put ''Ym90dG9tLz4iOmNhc2UiPGJvdHRvbSI6Y2FzZSI8Ym90dG9tPiI6Y2FzZSI8L2JvdHRvbT4iOmNhc2UiPGRpYWdvbmFsIjpjYXNlIjxkaWFnb25hbD4iOmNhc2UiPGRpYWdvbmFsLz4iOmNhc2UiPC9kaWFnb25hbD4iOmNhc2UiPGhvcml6b250YWwiOmNhc2UiPGhvcml6b250YWw+IjpjYXNl''@;'; put 'put ''Ijxob3Jpem9udGFsLz4iOmNhc2UiPC9ob3Jpem9udGFsPiI6Y2FzZSI8dmVydGljYWwiOmNhc2UiPHZlcnRpY2FsPiI6Y2FzZSI8dmVydGljYWwvPiI6Y2FzZSI8L3ZlcnRpY2FsPiI6Y2FzZSI8c3RhcnQiOmNhc2UiPHN0YXJ0PiI6Y2FzZSI8c3RhcnQvPiI6Y2FzZSI8L3N0YXJ0PiI6Y2Fz''@;'; put 'put ''ZSI8ZW5kIjpjYXNlIjxlbmQ+IjpjYXNlIjxlbmQvPiI6Y2FzZSI8L2VuZD4iOmNhc2UiPGNvbG9yIjpjYXNlIjxjb2xvcj4iOmNhc2UiPGNvbG9yLz4iOmNhc2UiPC9jb2xvcj4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGJvcmRl''@;'; put 'put ''ciI6Y2FzZSI8Ym9yZGVyPiI6Y2FzZSI8Ym9yZGVyLz4iOm49e30sZi5kaWFnb25hbFVwJiYobi5kaWFnb25hbFVwPVdlKGYuZGlhZ29uYWxVcCkpLGYuZGlhZ29uYWxEb3duJiYobi5kaWFnb25hbERvd249V2UoZi5kaWFnb25hbERvd24pKSx0LkJvcmRlcnMucHVzaChuKTticmVhaztjYXNl''@;'; put 'put ''IjxleHQiOmk9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOmk9ITE7YnJlYWs7ZGVmYXVsdDppZihhJiZhLldURiYmIWkpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitmWzBdKyIgaW4gYm9yZGVycyIpfX0pfShoLGwsMCxvKSwoaD1mLm1hdGNoKHIpKSYmZnVuY3Rpb24gbDEoZSx0LHIp''@;'; put 'put ''e3QuQ2VsbFhmPVtdO3ZhciBhLG49ITE7KGVbMF0ubWF0Y2godnIpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgcz1tZShpKSxmPTA7c3dpdGNoKHJ0KHNbMF0pKXtjYXNlIjxjZWxsWGZzIjpjYXNlIjxjZWxsWGZzPiI6Y2FzZSI8Y2VsbFhmcy8+IjpjYXNlIjwvY2VsbFhmcz4iOmNh''@;'; put 'put ''c2UiPC94Zj4iOmNhc2UiPC9hbGlnbm1lbnQ+IjpjYXNlIjxwcm90ZWN0aW9uIjpjYXNlIjwvcHJvdGVjdGlvbj4iOmNhc2UiPHByb3RlY3Rpb24vPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8eGYiOmNhc2UiPHhmLz4iOmZvcihk''@;'; put 'put ''ZWxldGUoYT1zKVswXSxmPTA7ZjxGMC5sZW5ndGg7KytmKWFbRjBbZl1dJiYoYVtGMFtmXV09cGFyc2VJbnQoYVtGMFtmXV0sMTApKTtmb3IoZj0wO2Y8eTAubGVuZ3RoOysrZilhW3kwW2ZdXSYmKGFbeTBbZl1dPVdlKGFbeTBbZl1dKSk7aWYodC5OdW1iZXJGbXQmJmEubnVtRm10SWQ+Mzky''@;'; put 'put ''KWZvcihmPTM5MjtmPjYwOy0tZilpZih0Lk51bWJlckZtdFthLm51bUZtdElkXT09dC5OdW1iZXJGbXRbZl0pe2EubnVtRm10SWQ9ZjticmVha310LkNlbGxYZi5wdXNoKGEpO2JyZWFrO2Nhc2UiPGFsaWdubWVudCI6Y2FzZSI8YWxpZ25tZW50Lz4iOnZhciBjPXt9O3MudmVydGljYWwmJihj''@;'; put 'put ''LnZlcnRpY2FsPXMudmVydGljYWwpLHMuaG9yaXpvbnRhbCYmKGMuaG9yaXpvbnRhbD1zLmhvcml6b250YWwpLG51bGwhPXMudGV4dFJvdGF0aW9uJiYoYy50ZXh0Um90YXRpb249cy50ZXh0Um90YXRpb24pLHMuaW5kZW50JiYoYy5pbmRlbnQ9cy5pbmRlbnQpLHMud3JhcFRleHQmJihjLndy''@;'; put 'put ''YXBUZXh0PVdlKHMud3JhcFRleHQpKSxhLmFsaWdubWVudD1jO2JyZWFrO2Nhc2UiPEFsdGVybmF0ZUNvbnRlbnQiOmNhc2UiPGV4dCI6bj0hMDticmVhaztjYXNlIjwvQWx0ZXJuYXRlQ29udGVudD4iOmNhc2UiPC9leHQ+IjpuPSExO2JyZWFrO2RlZmF1bHQ6aWYociYmci5XVEYmJiFuKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrc1swXSsiIGluIGNlbGxYZnMiKX19KX0oaCxsLG8pLGwpOmx9fSgpLGcxPXByLHcxPXByLFAxPVsiPC9hOmx0MT4iLCI8L2E6ZGsxPiIsIjwvYTpsdDI+IiwiPC9hOmRrMj4iLCI8L2E6YWNjZW50MT4iLCI8L2E6YWNjZW50Mj4iLCI8L2E6''@;'; put 'put ''YWNjZW50Mz4iLCI8L2E6YWNjZW50ND4iLCI8L2E6YWNjZW50NT4iLCI8L2E6YWNjZW50Nj4iLCI8L2E6aGxpbms+IiwiPC9hOmZvbEhsaW5rPiJdO2Z1bmN0aW9uIEwxKGUsdCxyKXt0LnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lPVtdO3ZhciBhPXt9OyhlWzBdLm1hdGNoKHZyKXx8W10pLmZv''@;'; put 'put ''ckVhY2goZnVuY3Rpb24obil7dmFyIGk9bWUobik7c3dpdGNoKGlbMF0pe2Nhc2UiPGE6Y2xyU2NoZW1lIjpjYXNlIjwvYTpjbHJTY2hlbWU+IjpicmVhaztjYXNlIjxhOnNyZ2JDbHIiOmEucmdiPWkudmFsO2JyZWFrO2Nhc2UiPGE6c3lzQ2xyIjphLnJnYj1pLmxhc3RDbHI7YnJlYWs7Y2Fz''@;'; put 'put ''ZSI8YTpkazE+IjpjYXNlIjwvYTpkazE+IjpjYXNlIjxhOmx0MT4iOmNhc2UiPC9hOmx0MT4iOmNhc2UiPGE6ZGsyPiI6Y2FzZSI8L2E6ZGsyPiI6Y2FzZSI8YTpsdDI+IjpjYXNlIjwvYTpsdDI+IjpjYXNlIjxhOmFjY2VudDE+IjpjYXNlIjwvYTphY2NlbnQxPiI6Y2FzZSI8YTphY2NlbnQy''@;'; put 'put ''PiI6Y2FzZSI8L2E6YWNjZW50Mj4iOmNhc2UiPGE6YWNjZW50Mz4iOmNhc2UiPC9hOmFjY2VudDM+IjpjYXNlIjxhOmFjY2VudDQ+IjpjYXNlIjwvYTphY2NlbnQ0PiI6Y2FzZSI8YTphY2NlbnQ1PiI6Y2FzZSI8L2E6YWNjZW50NT4iOmNhc2UiPGE6YWNjZW50Nj4iOmNhc2UiPC9hOmFjY2Vu''@;'; put 'put ''dDY+IjpjYXNlIjxhOmhsaW5rPiI6Y2FzZSI8L2E6aGxpbms+IjpjYXNlIjxhOmZvbEhsaW5rPiI6Y2FzZSI8L2E6Zm9sSGxpbms+IjoiLyI9PT1pWzBdLmNoYXJBdCgxKT8odC50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtQMS5pbmRleE9mKGlbMF0pXT1hLGE9e30pOmEubmFtZT1pWzBdLnNs''@;'; put 'put ''aWNlKDMsaVswXS5sZW5ndGgtMSk7YnJlYWs7ZGVmYXVsdDppZihyJiZyLldURil0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCAiK2lbMF0rIiBpbiBjbHJTY2hlbWUiKX19KX1mdW5jdGlvbiBCMSgpe31mdW5jdGlvbiBNMSgpe312YXIgVTE9LzxhOmNsclNjaGVtZShbXj5dKik+W1xz''@;'; put 'put ''XFNdKjxcL2E6Y2xyU2NoZW1lPi8sVzE9LzxhOmZvbnRTY2hlbWUoW14+XSopPltcc1xTXSo8XC9hOmZvbnRTY2hlbWU+LyxIMT0vPGE6Zm10U2NoZW1lKFtePl0qKT5bXHNcU10qPFwvYTpmbXRTY2hlbWU+LyxYMT0vPGE6dGhlbWVFbGVtZW50cyhbXj5dKik+W1xzXFNdKjxcL2E6dGhlbWVF''@;'; put 'put ''bGVtZW50cz4vO2Z1bmN0aW9uIHZmKGUsdCl7KCFlfHwwPT09ZS5sZW5ndGgpJiYoZT1mdW5jdGlvbiBEbihlLHQpe2lmKHQmJnQudGhlbWVYTFNYKXJldHVybiB0LnRoZW1lWExTWDtpZihlJiYic3RyaW5nIj09dHlwZW9mIGUucmF3KXJldHVybiBlLnJhdzt2YXIgcj1bZXJdO3JldHVybiBy''@;'; put 'put ''W3IubGVuZ3RoXT0nPGE6dGhlbWUgeG1sbnM6YT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL2RyYXdpbmdtbC8yMDA2L21haW4iIG5hbWU9Ik9mZmljZSBUaGVtZSI+JyxyW3IubGVuZ3RoXT0iPGE6dGhlbWVFbGVtZW50cz4iLHJbci5sZW5ndGhdPSc8YTpjbHJTY2hlbWUg''@;'; put 'put ''bmFtZT0iT2ZmaWNlIj4nLHJbci5sZW5ndGhdPSc8YTpkazE+PGE6c3lzQ2xyIHZhbD0id2luZG93VGV4dCIgbGFzdENscj0iMDAwMDAwIi8+PC9hOmRrMT4nLHJbci5sZW5ndGhdPSc8YTpsdDE+PGE6c3lzQ2xyIHZhbD0id2luZG93IiBsYXN0Q2xyPSJGRkZGRkYiLz48L2E6bHQxPicsclty''@;'; put 'put ''Lmxlbmd0aF09JzxhOmRrMj48YTpzcmdiQ2xyIHZhbD0iMUY0OTdEIi8+PC9hOmRrMj4nLHJbci5sZW5ndGhdPSc8YTpsdDI+PGE6c3JnYkNsciB2YWw9IkVFRUNFMSIvPjwvYTpsdDI+JyxyW3IubGVuZ3RoXT0nPGE6YWNjZW50MT48YTpzcmdiQ2xyIHZhbD0iNEY4MUJEIi8+PC9hOmFjY2Vu''@;'; put 'put ''dDE+JyxyW3IubGVuZ3RoXT0nPGE6YWNjZW50Mj48YTpzcmdiQ2xyIHZhbD0iQzA1MDREIi8+PC9hOmFjY2VudDI+JyxyW3IubGVuZ3RoXT0nPGE6YWNjZW50Mz48YTpzcmdiQ2xyIHZhbD0iOUJCQjU5Ii8+PC9hOmFjY2VudDM+JyxyW3IubGVuZ3RoXT0nPGE6YWNjZW50ND48YTpzcmdiQ2xy''@;'; put 'put ''IHZhbD0iODA2NEEyIi8+PC9hOmFjY2VudDQ+JyxyW3IubGVuZ3RoXT0nPGE6YWNjZW50NT48YTpzcmdiQ2xyIHZhbD0iNEJBQ0M2Ii8+PC9hOmFjY2VudDU+JyxyW3IubGVuZ3RoXT0nPGE6YWNjZW50Nj48YTpzcmdiQ2xyIHZhbD0iRjc5NjQ2Ii8+PC9hOmFjY2VudDY+JyxyW3IubGVuZ3Ro''@;'; put 'put ''XT0nPGE6aGxpbms+PGE6c3JnYkNsciB2YWw9IjAwMDBGRiIvPjwvYTpobGluaz4nLHJbci5sZW5ndGhdPSc8YTpmb2xIbGluaz48YTpzcmdiQ2xyIHZhbD0iODAwMDgwIi8+PC9hOmZvbEhsaW5rPicscltyLmxlbmd0aF09IjwvYTpjbHJTY2hlbWU+IixyW3IubGVuZ3RoXT0nPGE6Zm9udFNj''@;'; put 'put ''aGVtZSBuYW1lPSJPZmZpY2UiPicscltyLmxlbmd0aF09IjxhOm1ham9yRm9udD4iLHJbci5sZW5ndGhdPSc8YTpsYXRpbiB0eXBlZmFjZT0iQ2FtYnJpYSIvPicscltyLmxlbmd0aF09JzxhOmVhIHR5cGVmYWNlPSIiLz4nLHJbci5sZW5ndGhdPSc8YTpjcyB0eXBlZmFjZT0iIi8+JyxyW3Iu''@;'; put 'put ''bGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkpwYW4iIHR5cGVmYWNlPSJcdWZmMmRcdWZmMzMgXHVmZjMwXHUzMGI0XHUzMGI3XHUzMGMzXHUzMGFmIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbmciIHR5cGVmYWNlPSJcdWI5ZDFcdWM3NDAgXHVhY2UwXHViNTE1Ii8+Jyxy''@;'; put 'put ''W3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbnMiIHR5cGVmYWNlPSJcdTViOGJcdTRmNTMiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFudCIgdHlwZWZhY2U9Ilx1NjViMFx1N2QzMFx1NjYwZVx1OWFkNCIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJB''@;'; put 'put ''cmFiIiB0eXBlZmFjZT0iVGltZXMgTmV3IFJvbWFuIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhlYnIiIHR5cGVmYWNlPSJUaW1lcyBOZXcgUm9tYW4iLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGhhaSIgdHlwZWZhY2U9IlRhaG9tYSIvPicscltyLmxlbmd0''@;'; put 'put ''aF09JzxhOmZvbnQgc2NyaXB0PSJFdGhpIiB0eXBlZmFjZT0iTnlhbGEiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQmVuZyIgdHlwZWZhY2U9IlZyaW5kYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHdWpyIiB0eXBlZmFjZT0iU2hydXRpIi8+JyxyW3IubGVu''@;'; put 'put ''Z3RoXT0nPGE6Zm9udCBzY3JpcHQ9IktobXIiIHR5cGVmYWNlPSJNb29sQm9yYW4iLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iS25kYSIgdHlwZWZhY2U9IlR1bmdhIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1cnUiIHR5cGVmYWNlPSJSYWF2aSIvPicsclty''@;'; put 'put ''Lmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJDYW5zIiB0eXBlZmFjZT0iRXVwaGVtaWEiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQ2hlciIgdHlwZWZhY2U9IlBsYW50YWdlbmV0IENoZXJva2VlIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IllpaWkiIHR5cGVm''@;'; put 'put ''YWNlPSJNaWNyb3NvZnQgWWkgQmFpdGkiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGlidCIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBIaW1hbGF5YSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFhIiB0eXBlZmFjZT0iTVYgQm9saSIvPicscltyLmxlbmd0aF09''@;'; put 'put ''JzxhOmZvbnQgc2NyaXB0PSJEZXZhIiB0eXBlZmFjZT0iTWFuZ2FsIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRlbHUiIHR5cGVmYWNlPSJHYXV0YW1pIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRhbWwiIHR5cGVmYWNlPSJMYXRoYSIvPicscltyLmxlbmd0''@;'; put 'put ''aF09JzxhOmZvbnQgc2NyaXB0PSJTeXJjIiB0eXBlZmFjZT0iRXN0cmFuZ2VsbyBFZGVzc2EiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iT3J5YSIgdHlwZWZhY2U9IkthbGluZ2EiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTWx5bSIgdHlwZWZhY2U9IkthcnRp''@;'; put 'put ''a2EiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTGFvbyIgdHlwZWZhY2U9IkRva0NoYW1wYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJTaW5oIiB0eXBlZmFjZT0iSXNrb29sYSBQb3RhIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik1vbmciIHR5''@;'; put 'put ''cGVmYWNlPSJNb25nb2xpYW4gQmFpdGkiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVmlldCIgdHlwZWZhY2U9IlRpbWVzIE5ldyBSb21hbiIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJVaWdoIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFVpZ2h1ciIvPicscltyLmxl''@;'; put 'put ''bmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHZW9yIiB0eXBlZmFjZT0iU3lsZmFlbiIvPicscltyLmxlbmd0aF09IjwvYTptYWpvckZvbnQ+IixyW3IubGVuZ3RoXT0iPGE6bWlub3JGb250PiIscltyLmxlbmd0aF09JzxhOmxhdGluIHR5cGVmYWNlPSJDYWxpYnJpIi8+JyxyW3IubGVuZ3RoXT0n''@;'; put 'put ''PGE6ZWEgdHlwZWZhY2U9IiIvPicscltyLmxlbmd0aF09JzxhOmNzIHR5cGVmYWNlPSIiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSnBhbiIgdHlwZWZhY2U9Ilx1ZmYyZFx1ZmYzMyBcdWZmMzBcdTMwYjRcdTMwYjdcdTMwYzNcdTMwYWYiLz4nLHJbci5sZW5ndGhdPSc8YTpm''@;'; put 'put ''b250IHNjcmlwdD0iSGFuZyIgdHlwZWZhY2U9Ilx1YjlkMVx1Yzc0MCBcdWFjZTBcdWI1MTUiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFucyIgdHlwZWZhY2U9Ilx1NWI4Ylx1NGY1MyIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW50IiB0eXBlZmFjZT0i''@;'; put 'put ''XHU2NWIwXHU3ZDMwXHU2NjBlXHU5YWQ0Ii8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkFyYWIiIHR5cGVmYWNlPSJBcmlhbCIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIZWJyIiB0eXBlZmFjZT0iQXJpYWwiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlw''@;'; put 'put ''dD0iVGhhaSIgdHlwZWZhY2U9IlRhaG9tYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJFdGhpIiB0eXBlZmFjZT0iTnlhbGEiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQmVuZyIgdHlwZWZhY2U9IlZyaW5kYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2Ny''@;'; put 'put ''aXB0PSJHdWpyIiB0eXBlZmFjZT0iU2hydXRpIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IktobXIiIHR5cGVmYWNlPSJEYXVuUGVuaCIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJLbmRhIiB0eXBlZmFjZT0iVHVuZ2EiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250''@;'; put 'put ''IHNjcmlwdD0iR3VydSIgdHlwZWZhY2U9IlJhYXZpIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkNhbnMiIHR5cGVmYWNlPSJFdXBoZW1pYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJDaGVyIiB0eXBlZmFjZT0iUGxhbnRhZ2VuZXQgQ2hlcm9rZWUiLz4nLHJb''@;'; put 'put ''ci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iWWlpaSIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBZaSBCYWl0aSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaWJ0IiB0eXBlZmFjZT0iTWljcm9zb2Z0IEhpbWFsYXlhIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRo''@;'; put 'put ''YWEiIHR5cGVmYWNlPSJNViBCb2xpIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkRldmEiIHR5cGVmYWNlPSJNYW5nYWwiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGVsdSIgdHlwZWZhY2U9IkdhdXRhbWkiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlw''@;'; put 'put ''dD0iVGFtbCIgdHlwZWZhY2U9IkxhdGhhIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlN5cmMiIHR5cGVmYWNlPSJFc3RyYW5nZWxvIEVkZXNzYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJPcnlhIiB0eXBlZmFjZT0iS2FsaW5nYSIvPicscltyLmxlbmd0aF09''@;'; put 'put ''JzxhOmZvbnQgc2NyaXB0PSJNbHltIiB0eXBlZmFjZT0iS2FydGlrYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJMYW9vIiB0eXBlZmFjZT0iRG9rQ2hhbXBhIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlNpbmgiIHR5cGVmYWNlPSJJc2tvb2xhIFBvdGEiLz4n''@;'; put 'put ''LHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTW9uZyIgdHlwZWZhY2U9Ik1vbmdvbGlhbiBCYWl0aSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJWaWV0IiB0eXBlZmFjZT0iQXJpYWwiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVWlnaCIgdHlwZWZhY2U9''@;'; put 'put ''Ik1pY3Jvc29mdCBVaWdodXIiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR2VvciIgdHlwZWZhY2U9IlN5bGZhZW4iLz4nLHJbci5sZW5ndGhdPSI8L2E6bWlub3JGb250PiIscltyLmxlbmd0aF09IjwvYTpmb250U2NoZW1lPiIscltyLmxlbmd0aF09JzxhOmZtdFNjaGVtZSBu''@;'; put 'put ''YW1lPSJPZmZpY2UiPicscltyLmxlbmd0aF09IjxhOmZpbGxTdHlsZUxzdD4iLHJbci5sZW5ndGhdPSc8YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiLz48L2E6c29saWRGaWxsPicscltyLmxlbmd0aF09JzxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+JyxyW3IubGVu''@;'; put 'put ''Z3RoXT0iPGE6Z3NMc3Q+IixyW3IubGVuZ3RoXT0nPGE6Z3MgcG9zPSIwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjUwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMzAwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxyW3IubGVuZ3RoXT0nPGE6Z3MgcG9zPSIzNTAw''@;'; put 'put ''MCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSIzNzAwMCIvPjxhOnNhdE1vZCB2YWw9IjMwMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicscltyLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9''@;'; put 'put ''IjE1MDAwIi8+PGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxyW3IubGVuZ3RoXT0iPC9hOmdzTHN0PiIscltyLmxlbmd0aF09JzxhOmxpbiBhbmc9IjE2MjAwMDAwIiBzY2FsZWQ9IjEiLz4nLHJbci5sZW5ndGhdPSI8L2E6Z3JhZEZpbGw+IixyW3IubGVu''@;'; put 'put ''Z3RoXT0nPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBlPSIxIj4nLHJbci5sZW5ndGhdPSI8YTpnc0xzdD4iLHJbci5sZW5ndGhdPSc8YTpncyBwb3M9IjAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iMTAwMDAwIi8+PGE6c2hhZGUgdmFsPSIxMDAwMDAiLz48YTpzYXRN''@;'; put 'put ''b2QgdmFsPSIxMzAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLHJbci5sZW5ndGhdPSc8YTpncyBwb3M9IjEwMDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSI1MDAwMCIvPjxhOnNoYWRlIHZhbD0iMTAwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+''@;'; put 'put ''PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxyW3IubGVuZ3RoXT0iPC9hOmdzTHN0PiIscltyLmxlbmd0aF09JzxhOmxpbiBhbmc9IjE2MjAwMDAwIiBzY2FsZWQ9IjAiLz4nLHJbci5sZW5ndGhdPSI8L2E6Z3JhZEZpbGw+IixyW3IubGVuZ3RoXT0iPC9hOmZpbGxTdHlsZUxzdD4iLHJbci5sZW5n''@;'; put 'put ''dGhdPSI8YTpsblN0eWxlTHN0PiIscltyLmxlbmd0aF09JzxhOmxuIHc9Ijk1MjUiIGNhcD0iZmxhdCIgY21wZD0ic25nIiBhbGduPSJjdHIiPjxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6c2hhZGUgdmFsPSI5NTAwMCIvPjxhOnNhdE1vZCB2YWw9IjEwNTAwMCIv''@;'; put 'put ''PjwvYTpzY2hlbWVDbHI+PC9hOnNvbGlkRmlsbD48YTpwcnN0RGFzaCB2YWw9InNvbGlkIi8+PC9hOmxuPicscltyLmxlbmd0aF09JzxhOmxuIHc9IjI1NDAwIiBjYXA9ImZsYXQiIGNtcGQ9InNuZyIgYWxnbj0iY3RyIj48YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiLz48''@;'; put 'put ''L2E6c29saWRGaWxsPjxhOnByc3REYXNoIHZhbD0ic29saWQiLz48L2E6bG4+JyxyW3IubGVuZ3RoXT0nPGE6bG4gdz0iMzgxMDAiIGNhcD0iZmxhdCIgY21wZD0ic25nIiBhbGduPSJjdHIiPjxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciIvPjwvYTpzb2xpZEZpbGw+PGE6''@;'; put 'put ''cHJzdERhc2ggdmFsPSJzb2xpZCIvPjwvYTpsbj4nLHJbci5sZW5ndGhdPSI8L2E6bG5TdHlsZUxzdD4iLHJbci5sZW5ndGhdPSI8YTplZmZlY3RTdHlsZUxzdD4iLHJbci5sZW5ndGhdPSI8YTplZmZlY3RTdHlsZT4iLHJbci5sZW5ndGhdPSI8YTplZmZlY3RMc3Q+IixyW3IubGVuZ3RoXT0n''@;'; put 'put ''PGE6b3V0ZXJTaGR3IGJsdXJSYWQ9IjQwMDAwIiBkaXN0PSIyMDAwMCIgZGlyPSI1NDAwMDAwIiByb3RXaXRoU2hhcGU9IjAiPjxhOnNyZ2JDbHIgdmFsPSIwMDAwMDAiPjxhOmFscGhhIHZhbD0iMzgwMDAiLz48L2E6c3JnYkNscj48L2E6b3V0ZXJTaGR3PicscltyLmxlbmd0aF09IjwvYTpl''@;'; put 'put ''ZmZlY3RMc3Q+IixyW3IubGVuZ3RoXT0iPC9hOmVmZmVjdFN0eWxlPiIscltyLmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlPiIscltyLmxlbmd0aF09IjxhOmVmZmVjdExzdD4iLHJbci5sZW5ndGhdPSc8YTpvdXRlclNoZHcgYmx1clJhZD0iNDAwMDAiIGRpc3Q9IjIzMDAwIiBkaXI9IjU0MDAw''@;'; put 'put ''MDAiIHJvdFdpdGhTaGFwZT0iMCI+PGE6c3JnYkNsciB2YWw9IjAwMDAwMCI+PGE6YWxwaGEgdmFsPSIzNTAwMCIvPjwvYTpzcmdiQ2xyPjwvYTpvdXRlclNoZHc+JyxyW3IubGVuZ3RoXT0iPC9hOmVmZmVjdExzdD4iLHJbci5sZW5ndGhdPSI8L2E6ZWZmZWN0U3R5bGU+IixyW3IubGVuZ3Ro''@;'; put 'put ''XT0iPGE6ZWZmZWN0U3R5bGU+IixyW3IubGVuZ3RoXT0iPGE6ZWZmZWN0THN0PiIscltyLmxlbmd0aF09JzxhOm91dGVyU2hkdyBibHVyUmFkPSI0MDAwMCIgZGlzdD0iMjMwMDAiIGRpcj0iNTQwMDAwMCIgcm90V2l0aFNoYXBlPSIwIj48YTpzcmdiQ2xyIHZhbD0iMDAwMDAwIj48YTphbHBo''@;'; put 'put ''YSB2YWw9IjM1MDAwIi8+PC9hOnNyZ2JDbHI+PC9hOm91dGVyU2hkdz4nLHJbci5sZW5ndGhdPSI8L2E6ZWZmZWN0THN0PiIscltyLmxlbmd0aF09JzxhOnNjZW5lM2Q+PGE6Y2FtZXJhIHByc3Q9Im9ydGhvZ3JhcGhpY0Zyb250Ij48YTpyb3QgbGF0PSIwIiBsb249IjAiIHJldj0iMCIvPjwv''@;'; put 'put ''YTpjYW1lcmE+PGE6bGlnaHRSaWcgcmlnPSJ0aHJlZVB0IiBkaXI9InQiPjxhOnJvdCBsYXQ9IjAiIGxvbj0iMCIgcmV2PSIxMjAwMDAwIi8+PC9hOmxpZ2h0UmlnPjwvYTpzY2VuZTNkPicscltyLmxlbmd0aF09JzxhOnNwM2Q+PGE6YmV2ZWxUIHc9IjYzNTAwIiBoPSIyNTQwMCIvPjwvYTpz''@;'; put 'put ''cDNkPicscltyLmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZT4iLHJbci5sZW5ndGhdPSI8L2E6ZWZmZWN0U3R5bGVMc3Q+IixyW3IubGVuZ3RoXT0iPGE6YmdGaWxsU3R5bGVMc3Q+IixyW3IubGVuZ3RoXT0nPGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8+PC9hOnNvbGlk''@;'; put 'put ''RmlsbD4nLHJbci5sZW5ndGhdPSc8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPicscltyLmxlbmd0aF09IjxhOmdzTHN0PiIscltyLmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSI0MDAwMCIvPjxhOnNhdE1vZCB2YWw9IjM1''@;'; put 'put ''MDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicscltyLmxlbmd0aF09JzxhOmdzIHBvcz0iNDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iNDUwMDAiLz48YTpzaGFkZSB2YWw9Ijk5MDAwIi8+PGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+PC9hOnNjaGVtZUNs''@;'; put 'put ''cj48L2E6Z3M+JyxyW3IubGVuZ3RoXT0nPGE6Z3MgcG9zPSIxMDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTpzaGFkZSB2YWw9IjIwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMjU1MDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxyW3IubGVuZ3RoXT0iPC9hOmdzTHN0PiIsclty''@;'; put 'put ''Lmxlbmd0aF09JzxhOnBhdGggcGF0aD0iY2lyY2xlIj48YTpmaWxsVG9SZWN0IGw9IjUwMDAwIiB0PSItODAwMDAiIHI9IjUwMDAwIiBiPSIxODAwMDAiLz48L2E6cGF0aD4nLHJbci5sZW5ndGhdPSI8L2E6Z3JhZEZpbGw+IixyW3IubGVuZ3RoXT0nPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBl''@;'; put 'put ''PSIxIj4nLHJbci5sZW5ndGhdPSI8YTpnc0xzdD4iLHJbci5sZW5ndGhdPSc8YTpncyBwb3M9IjAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iODAwMDAiLz48YTpzYXRNb2QgdmFsPSIzMDAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLHJbci5sZW5ndGhdPSc8''@;'; put 'put ''YTpncyBwb3M9IjEwMDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnNoYWRlIHZhbD0iMzAwMDAiLz48YTpzYXRNb2QgdmFsPSIyMDAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLHJbci5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixyW3IubGVuZ3RoXT0nPGE6cGF0aCBwYXRoPSJj''@;'; put 'put ''aXJjbGUiPjxhOmZpbGxUb1JlY3QgbD0iNTAwMDAiIHQ9IjUwMDAwIiByPSI1MDAwMCIgYj0iNTAwMDAiLz48L2E6cGF0aD4nLHJbci5sZW5ndGhdPSI8L2E6Z3JhZEZpbGw+IixyW3IubGVuZ3RoXT0iPC9hOmJnRmlsbFN0eWxlTHN0PiIscltyLmxlbmd0aF09IjwvYTpmbXRTY2hlbWU+Iixy''@;'; put 'put ''W3IubGVuZ3RoXT0iPC9hOnRoZW1lRWxlbWVudHM+IixyW3IubGVuZ3RoXT0iPGE6b2JqZWN0RGVmYXVsdHM+IixyW3IubGVuZ3RoXT0iPGE6c3BEZWY+IixyW3IubGVuZ3RoXT0nPGE6c3BQci8+PGE6Ym9keVByLz48YTpsc3RTdHlsZS8+PGE6c3R5bGU+PGE6bG5SZWYgaWR4PSIxIj48YTpz''@;'; put 'put ''Y2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmxuUmVmPjxhOmZpbGxSZWYgaWR4PSIzIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmZpbGxSZWY+PGE6ZWZmZWN0UmVmIGlkeD0iMiI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTplZmZlY3RSZWY+PGE6Zm9udFJl''@;'; put 'put ''ZiBpZHg9Im1pbm9yIj48YTpzY2hlbWVDbHIgdmFsPSJsdDEiLz48L2E6Zm9udFJlZj48L2E6c3R5bGU+JyxyW3IubGVuZ3RoXT0iPC9hOnNwRGVmPiIscltyLmxlbmd0aF09IjxhOmxuRGVmPiIscltyLmxlbmd0aF09JzxhOnNwUHIvPjxhOmJvZHlQci8+PGE6bHN0U3R5bGUvPjxhOnN0eWxl''@;'; put 'put ''PjxhOmxuUmVmIGlkeD0iMiI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTpsblJlZj48YTpmaWxsUmVmIGlkeD0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTpmaWxsUmVmPjxhOmVmZmVjdFJlZiBpZHg9IjEiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48''@;'; put 'put ''L2E6ZWZmZWN0UmVmPjxhOmZvbnRSZWYgaWR4PSJtaW5vciI+PGE6c2NoZW1lQ2xyIHZhbD0idHgxIi8+PC9hOmZvbnRSZWY+PC9hOnN0eWxlPicscltyLmxlbmd0aF09IjwvYTpsbkRlZj4iLHJbci5sZW5ndGhdPSI8L2E6b2JqZWN0RGVmYXVsdHM+IixyW3IubGVuZ3RoXT0iPGE6ZXh0cmFD''@;'; put 'put ''bHJTY2hlbWVMc3QvPiIscltyLmxlbmd0aF09IjwvYTp0aGVtZT4iLHIuam9pbigiIil9KCkpO3ZhciByLGE9e307aWYoIShyPWUubWF0Y2goWDEpKSl0aHJvdyBuZXcgRXJyb3IoInRoZW1lRWxlbWVudHMgbm90IGZvdW5kIGluIHRoZW1lIik7cmV0dXJuIGZ1bmN0aW9uIFYxKGUsdCxyKXt2''@;'; put 'put ''YXIgYTt0LnRoZW1lRWxlbWVudHM9e30sW1siY2xyU2NoZW1lIixVMSxMMV0sWyJmb250U2NoZW1lIixXMSxCMV0sWyJmbXRTY2hlbWUiLEgxLE0xXV0uZm9yRWFjaChmdW5jdGlvbihuKXtpZighKGE9ZS5tYXRjaChuWzFdKSkpdGhyb3cgbmV3IEVycm9yKG5bMF0rIiBub3QgZm91bmQgaW4g''@;'; put 'put ''dGhlbWVFbGVtZW50cyIpO25bMl0oYSx0LHIpfSl9KHJbMF0sYSx0KSxhLnJhdz1lLGF9ZnVuY3Rpb24gWTEoZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpLHI9ZS5yZWFkX3NoaWZ0KDIpLTQsYT1bdF07c3dpdGNoKHQpe2Nhc2UgNDpjYXNlIDU6Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAx''@;'; put 'put ''MDpjYXNlIDExOmNhc2UgMTM6YVsxXT1mdW5jdGlvbiAkMShlKXt2YXIgdD17fTtzd2l0Y2godC54Y2xyVHlwZT1lLnJlYWRfc2hpZnQoMiksdC5uVGludFNoYWRlPWUucmVhZF9zaGlmdCgyKSx0LnhjbHJUeXBlKXtjYXNlIDA6Y2FzZSA0OmUubCs9NDticmVhaztjYXNlIDE6dC54Y2xyVmFs''@;'; put 'put ''dWU9ZnVuY3Rpb24gajEoZSx0KXtyZXR1cm4gcHIoZSx0KX0oZSw0KTticmVhaztjYXNlIDI6dC54Y2xyVmFsdWU9TXMoZSk7YnJlYWs7Y2FzZSAzOnQueGNsclZhbHVlPWZ1bmN0aW9uIHoxKGUpe3JldHVybiBlLnJlYWRfc2hpZnQoNCl9KGUpfXJldHVybiBlLmwrPTgsdH0oZSk7YnJlYWs7''@;'; put 'put ''Y2FzZSA2OmFbMV09ZnVuY3Rpb24gSzEoZSx0KXtyZXR1cm4gcHIoZSx0KX0oZSxyKTticmVhaztjYXNlIDE0OmNhc2UgMTU6YVsxXT1lLnJlYWRfc2hpZnQoMT09PXI/MToyKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIEV4dFByb3AgdHlwZTogIit0KyIg''@;'; put 'put ''IityKX1yZXR1cm4gYX1mdW5jdGlvbiBxMShlLHQpe3QuZm9yRWFjaChmdW5jdGlvbihyKXt9KX1mdW5jdGlvbiBnZihlLHQscixhKXt2YXIgaSxuPUFycmF5LmlzQXJyYXkoZSk7dC5mb3JFYWNoKGZ1bmN0aW9uKHMpe3ZhciBmPUdlKHMucmVmKTtpZihuPyhlW2Yucl18fChlW2Yucl09W10p''@;'; put 'put ''LGk9ZVtmLnJdW2YuY10pOmk9ZVtzLnJlZl0sIWkpe2k9e3Q6InoifSxuP2VbZi5yXVtmLmNdPWk6ZVtzLnJlZl09aTt2YXIgYz1EZShlWyIhcmVmIl18fCJCRFdHTzEwMDAwMDE6QTEiKTtjLnMucj5mLnImJihjLnMucj1mLnIpLGMuZS5yPGYuciYmKGMuZS5yPWYuciksYy5zLmM+Zi5jJiYo''@;'; put 'put ''Yy5zLmM9Zi5jKSxjLmUuYzxmLmMmJihjLmUuYz1mLmMpO3ZhciBvPXdlKGMpO28hPT1lWyIhcmVmIl0mJihlWyIhcmVmIl09byl9aS5jfHwoaS5jPVtdKTt2YXIgbD17YTpzLmF1dGhvcix0OnMudCxyOnMucixUOnJ9O3MuaCYmKGwuaD1zLmgpO2Zvcih2YXIgaD1pLmMubGVuZ3RoLTE7aD49''@;'; put 'put ''MDstLWgpe2lmKCFyJiZpLmNbaF0uVClyZXR1cm47ciYmIWkuY1toXS5UJiZpLmMuc3BsaWNlKGgsMSl9aWYociYmYSlmb3IoaD0wO2g8YS5sZW5ndGg7KytoKWlmKGwuYT09YVtoXS5pZCl7bC5hPWFbaF0ubmFtZXx8bC5hO2JyZWFrfWkuYy5wdXNoKGwpfSl9dmFyIHd4PW1yLHVhPWZ1bmN0''@;'; put 'put ''aW9uKCl7dmFyIGU9LyhefFteQS1aYS16X10pUihcWz8tP1xkK1xdfFsxLTldXGQqfClDKFxbPy0/XGQrXF18WzEtOV1cZCp8KSg/IVtBLVphLXowLTlfXSkvZyx0PXtyOjAsYzowfTtmdW5jdGlvbiByKGEsbixpLHMpe3ZhciBmPSExLGM9ITE7MD09aS5sZW5ndGg/Yz0hMDoiWyI9PWkuY2hh''@;'; put 'put ''ckF0KDApJiYoYz0hMCxpPWkuc2xpY2UoMSwtMSkpLDA9PXMubGVuZ3RoP2Y9ITA6IlsiPT1zLmNoYXJBdCgwKSYmKGY9ITAscz1zLnNsaWNlKDEsLTEpKTt2YXIgbz1pLmxlbmd0aD4wPzB8cGFyc2VJbnQoaSwxMCk6MCxsPXMubGVuZ3RoPjA/MHxwYXJzZUludChzLDEwKTowO3JldHVybiBm''@;'; put 'put ''P2wrPXQuYzotLWwsYz9vKz10LnI6LS1vLG4rKGY/IiI6IiQiKStIZShsKSsoYz8iIjoiJCIpK0tlKG8pfXJldHVybiBmdW5jdGlvbihuLGkpe3JldHVybiB0PWksbi5yZXBsYWNlKGUscil9fSgpLE9uPS8oXnxbXi5fQS1aMC05XSkoWyRdPykoW0EtWl17MSwyfXxbQS1XXVtBLVpdezJ9fFhb''@;'; put 'put ''QS1FXVtBLVpdfFhGW0EtRF0pKFskXT8pKDEwWzAtM11cZHs0fXwxMDRbMC03XVxkezN9fDEwNDhbMC00XVxkezJ9fDEwNDg1WzAtNl1cZHwxMDQ4NTdbMC02XXxbMS05XVxkezAsNX0pKD8hW18uXChBLVphLXowLTldKS9nLEluPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0''@;'; put 'put ''dXJuIHQucmVwbGFjZShPbixmdW5jdGlvbihhLG4saSxzLGYsYyl7dmFyIG89bm4ocyktKGk/MDpyLmMpLGw9YW4oYyktKGY/MDpyLnIpO3JldHVybiBuKyJSIisoMD09bD8iIjpmP2wrMToiWyIrbCsiXSIpKyJDIisoMD09bz8iIjppP28rMToiWyIrbysiXSIpfSl9fSgpO2Z1bmN0aW9uIGtm''@;'; put 'put ''KGUsdCl7cmV0dXJuIGUucmVwbGFjZShPbixmdW5jdGlvbihyLGEsbixpLHMsZil7cmV0dXJuIGErKCIkIj09bj9uK2k6SGUobm4oaSkrdC5jKSkrKCIkIj09cz9zK2Y6S2UoYW4oZikrdC5yKSl9KX1mdW5jdGlvbiBJeChlLHQscil7dmFyIG49UHIodCkucyxpPUdlKHIpO3JldHVybiBrZihl''@;'; put 'put ''LHtyOmkuci1uLnIsYzppLmMtbi5jfSl9ZnVuY3Rpb24gRWYoZSl7cmV0dXJuIGUucmVwbGFjZSgvX3hsZm5cLi9nLCIiKX1mdW5jdGlvbiBhcihlKXtlLmwrPTF9ZnVuY3Rpb24gQXQoZSx0KXt2YXIgcj1lLnJlYWRfc2hpZnQoMT09dD8xOjIpO3JldHVyblsxNjM4MyZyLHI+PjE0JjEscj4+''@;'; put 'put ''MTUmMV19ZnVuY3Rpb24gVGYoZSx0LHIpe3ZhciBhPTI7aWYocil7aWYoci5iaWZmPj0yJiZyLmJpZmY8PTUpcmV0dXJuIFNmKGUpOzEyPT1yLmJpZmYmJihhPTQpfXZhciBuPWUucmVhZF9zaGlmdChhKSxpPWUucmVhZF9zaGlmdChhKSxzPUF0KGUsMiksZj1BdChlLDIpO3JldHVybntzOnty''@;'; put 'put ''Om4sYzpzWzBdLGNSZWw6c1sxXSxyUmVsOnNbMl19LGU6e3I6aSxjOmZbMF0sY1JlbDpmWzFdLHJSZWw6ZlsyXX19fWZ1bmN0aW9uIFNmKGUpe3ZhciB0PUF0KGUsMikscj1BdChlLDIpLGE9ZS5yZWFkX3NoaWZ0KDEpLG49ZS5yZWFkX3NoaWZ0KDEpO3JldHVybntzOntyOnRbMF0sYzphLGNS''@;'; put 'put ''ZWw6dFsxXSxyUmVsOnRbMl19LGU6e3I6clswXSxjOm4sY1JlbDpyWzFdLHJSZWw6clsyXX19fWZ1bmN0aW9uIEZmKGUsdCxyKXtpZihyJiZyLmJpZmY+PTImJnIuYmlmZjw9NSlyZXR1cm4gZnVuY3Rpb24gYngoZSl7dmFyIHQ9QXQoZSwyKSxyPWUucmVhZF9zaGlmdCgxKTtyZXR1cm57cjp0''@;'; put 'put ''WzBdLGM6cixjUmVsOnRbMV0sclJlbDp0WzJdfX0oZSk7dmFyIGE9ZS5yZWFkX3NoaWZ0KHImJjEyPT1yLmJpZmY/NDoyKSxuPUF0KGUsMik7cmV0dXJue3I6YSxjOm5bMF0sY1JlbDpuWzFdLHJSZWw6blsyXX19ZnVuY3Rpb24gUHgoZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpLHI9ZS5yZWFk''@;'; put 'put ''X3NoaWZ0KDIpO3JldHVybntyOnQsYzoyNTUmcixmUXVvdGVkOiEhKDE2Mzg0JnIpLGNSZWw6cj4+MTUsclJlbDpyPj4xNX19ZnVuY3Rpb24geWYoZSl7dmFyIHQ9MSZlW2UubCsxXTtyZXR1cm4gZS5sKz00LFt0LDFdfWZ1bmN0aW9uIEFmKGUpe3JldHVybltlLnJlYWRfc2hpZnQoMSksZS5y''@;'; put 'put ''ZWFkX3NoaWZ0KDEpXX1mdW5jdGlvbiBsZChlLHQpe3ZhciByPVtlLnJlYWRfc2hpZnQoMSldO2lmKDEyPT10KXN3aXRjaChyWzBdKXtjYXNlIDI6clswXT00O2JyZWFrO2Nhc2UgNDpyWzBdPTE2O2JyZWFrO2Nhc2UgMDpyWzBdPTE7YnJlYWs7Y2FzZSAxOnJbMF09Mn1zd2l0Y2goclswXSl7''@;'; put 'put ''Y2FzZSA0OnJbMV09SmUoZSwxKT8iVFJVRSI6IkZBTFNFIiwxMiE9dCYmKGUubCs9Nyk7YnJlYWs7Y2FzZSAzNzpjYXNlIDE2OnJbMV09eHRbZVtlLmxdXSxlLmwrPTEyPT10PzQ6ODticmVhaztjYXNlIDA6ZS5sKz04O2JyZWFrO2Nhc2UgMTpyWzFdPWdyKGUpO2JyZWFrO2Nhc2UgMjpyWzFd''@;'; put 'put ''PXp0KGUsMCx7YmlmZjp0PjAmJnQ8OD8yOnR9KTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiQmFkIFNlckFyOiAiK3JbMF0pfXJldHVybiByfWZ1bmN0aW9uIHVkKGUsdCxyKXtmb3IodmFyIGE9ZS5yZWFkX3NoaWZ0KDEyPT1yLmJpZmY/NDoyKSxuPVtdLGk9MDtpIT1hOysraSlu''@;'; put 'put ''LnB1c2goKDEyPT1yLmJpZmY/V3Q6azApKGUsOCkpO3JldHVybiBufWZ1bmN0aW9uIGhkKGUsdCxyKXt2YXIgYT0wLG49MDsxMj09ci5iaWZmPyhhPWUucmVhZF9zaGlmdCg0KSxuPWUucmVhZF9zaGlmdCg0KSk6KG49MStlLnJlYWRfc2hpZnQoMSksYT0xK2UucmVhZF9zaGlmdCgyKSksci5i''@;'; put 'put ''aWZmPj0yJiZyLmJpZmY8OCYmKC0tYSwwPT0tLW4mJihuPTI1NikpO2Zvcih2YXIgaT0wLHM9W107aSE9YSYmKHNbaV09W10pOysraSlmb3IodmFyIGY9MDtmIT1uOysrZilzW2ldW2ZdPWxkKGUsci5iaWZmKTtyZXR1cm4gc31mdW5jdGlvbiBVYShlLHQscil7cmV0dXJuIGUubCs9MixbUHgo''@;'; put 'put ''ZSldfWZ1bmN0aW9uIFJuKGUpe3JldHVybiBlLmwrPTYsW119ZnVuY3Rpb24gQ2YoZSl7cmV0dXJuIGUubCs9MixbdHIoZSksMSZlLnJlYWRfc2hpZnQoMildfXZhciBSZD1bIkRhdGEiLCJBbGwiLCJIZWFkZXJzIiwiPz8iLCI/RGF0YTIiLCI/PyIsIj9EYXRhSGVhZGVycyIsIj8/IiwiVG90''@;'; put 'put ''YWxzIiwiPz8iLCI/PyIsIj8/IiwiP0RhdGFUb3RhbHMiLCI/PyIsIj8/IiwiPz8iLCI/Q3VycmVudCJdLERmPXsxOntuOiJQdGdFeHAiLGY6ZnVuY3Rpb24gbmQoZSx0LHIpe3JldHVybiBlLmwrKyxyJiYxMj09ci5iaWZmP1tlLnJlYWRfc2hpZnQoNCwiaSIpLDBdOltlLnJlYWRfc2hpZnQo''@;'; put 'put ''MiksZS5yZWFkX3NoaWZ0KHImJjI9PXIuYmlmZj8xOjIpXX19LDI6e246IlB0Z1RibCIsZjpwcn0sMzp7bjoiUHRnQWRkIixmOmFyfSw0OntuOiJQdGdTdWIiLGY6YXJ9LDU6e246IlB0Z011bCIsZjphcn0sNjp7bjoiUHRnRGl2IixmOmFyfSw3OntuOiJQdGdQb3dlciIsZjphcn0sODp7bjoi''@;'; put 'put ''UHRnQ29uY2F0IixmOmFyfSw5OntuOiJQdGdMdCIsZjphcn0sMTA6e246IlB0Z0xlIixmOmFyfSwxMTp7bjoiUHRnRXEiLGY6YXJ9LDEyOntuOiJQdGdHZSIsZjphcn0sMTM6e246IlB0Z0d0IixmOmFyfSwxNDp7bjoiUHRnTmUiLGY6YXJ9LDE1OntuOiJQdGdJc2VjdCIsZjphcn0sMTY6e246''@;'; put 'put ''IlB0Z1VuaW9uIixmOmFyfSwxNzp7bjoiUHRnUmFuZ2UiLGY6YXJ9LDE4OntuOiJQdGdVcGx1cyIsZjphcn0sMTk6e246IlB0Z1VtaW51cyIsZjphcn0sMjA6e246IlB0Z1BlcmNlbnQiLGY6YXJ9LDIxOntuOiJQdGdQYXJlbiIsZjphcn0sMjI6e246IlB0Z01pc3NBcmciLGY6YXJ9LDIzOntu''@;'; put 'put ''OiJQdGdTdHIiLGY6ZnVuY3Rpb24gb2QoZSx0LHIpe3JldHVybiBlLmwrKyxSYShlLDAscil9fSwyNjp7bjoiUHRnU2hlZXQiLGY6ZnVuY3Rpb24gUGQoZSx0LHIpe3JldHVybiBlLmwrPTUsZS5sKz0yLGUubCs9Mj09ci5iaWZmPzE6NCxbIlBUR1NIRUVUIl19fSwyNzp7bjoiUHRnRW5kU2hl''@;'; put 'put ''ZXQiLGY6ZnVuY3Rpb24gTGQoZSx0LHIpe3JldHVybiBlLmwrPTI9PXIuYmlmZj80OjUsWyJQVEdFTkRTSEVFVCJdfX0sMjg6e246IlB0Z0VyciIsZjpmdW5jdGlvbiBpZChlKXtyZXR1cm4gZS5sKysseHRbZS5yZWFkX3NoaWZ0KDEpXX19LDI5OntuOiJQdGdCb29sIixmOmZ1bmN0aW9uIGZk''@;'; put 'put ''KGUpe3JldHVybiBlLmwrKywwIT09ZS5yZWFkX3NoaWZ0KDEpfX0sMzA6e246IlB0Z0ludCIsZjpmdW5jdGlvbiBzZChlKXtyZXR1cm4gZS5sKyssZS5yZWFkX3NoaWZ0KDIpfX0sMzE6e246IlB0Z051bSIsZjpmdW5jdGlvbiBjZChlKXtyZXR1cm4gZS5sKyssZ3IoZSl9fSwzMjp7bjoiUHRn''@;'; put 'put ''QXJyYXkiLGY6ZnVuY3Rpb24gWHgoZSx0LHIpe3ZhciBhPSg5NiZlW2UubCsrXSk+PjU7cmV0dXJuIGUubCs9Mj09ci5iaWZmPzY6MTI9PXIuYmlmZj8xNDo3LFthXX19LDMzOntuOiJQdGdGdW5jIixmOmZ1bmN0aW9uIGVkKGUsdCxyKXt2YXIgYT0oOTYmZVtlLmxdKT4+NTtlLmwrPTE7dmFy''@;'; put 'put ''IG49ZS5yZWFkX3NoaWZ0KHImJnIuYmlmZjw9Mz8xOjIpO3JldHVyblthdltuXSxSZltuXSxhXX19LDM0OntuOiJQdGdGdW5jVmFyIixmOmZ1bmN0aW9uIHJkKGUsdCxyKXt2YXIgYT1lW2UubCsrXSxuPWUucmVhZF9zaGlmdCgxKSxpPXImJnIuYmlmZjw9Mz9bODg9PWE/LTE6MCxlLnJlYWRf''@;'; put 'put ''c2hpZnQoMSldOmZ1bmN0aW9uIHRkKGUpe3JldHVybltlW2UubCsxXT4+NywzMjc2NyZlLnJlYWRfc2hpZnQoMildfShlKTtyZXR1cm5bbiwoMD09PWlbMF0/UmY6dHYpW2lbMV1dXX19LDM1OntuOiJQdGdOYW1lIixmOmZ1bmN0aW9uIHhkKGUsdCxyKXt2YXIgYT1lLnJlYWRfc2hpZnQoMSk+''@;'; put 'put ''Pj41JjMsaT1lLnJlYWRfc2hpZnQoIXJ8fHIuYmlmZj49OD80OjIpO3N3aXRjaChyLmJpZmYpe2Nhc2UgMjplLmwrPTU7YnJlYWs7Y2FzZSAzOmNhc2UgNDplLmwrPTg7YnJlYWs7Y2FzZSA1OmUubCs9MTJ9cmV0dXJuW2EsMCxpXX19LDM2OntuOiJQdGdSZWYiLGY6ZnVuY3Rpb24gcXgoZSx0''@;'; put 'put ''LHIpe3ZhciBhPSg5NiZlW2UubF0pPj41O3JldHVybiBlLmwrPTEsW2EsRmYoZSwwLHIpXX19LDM3OntuOiJQdGdBcmVhIixmOmZ1bmN0aW9uIE14KGUsdCxyKXtyZXR1cm5bKDk2JmVbZS5sKytdKT4+NSxUZihlLDAscildfX0sMzg6e246IlB0Z01lbUFyZWEiLGY6ZnVuY3Rpb24gcGQoZSx0''@;'; put 'put ''LHIpe3ZhciBhPWUucmVhZF9zaGlmdCgxKT4+PjUmMztyZXR1cm4gZS5sKz1yJiYyPT1yLmJpZmY/Mzo0LFthLGUucmVhZF9zaGlmdChyJiYyPT1yLmJpZmY/MToyKV19fSwzOTp7bjoiUHRnTWVtRXJyIixmOnByfSw0MDp7bjoiUHRnTWVtTm9NZW0iLGY6cHJ9LDQxOntuOiJQdGdNZW1GdW5j''@;'; put 'put ''IixmOmZ1bmN0aW9uIG1kKGUsdCxyKXtyZXR1cm5bZS5yZWFkX3NoaWZ0KDEpPj4+NSYzLGUucmVhZF9zaGlmdChyJiYyPT1yLmJpZmY/MToyKV19fSw0Mjp7bjoiUHRnUmVmRXJyIixmOmZ1bmN0aW9uIGdkKGUsdCxyKXt2YXIgYT1lLnJlYWRfc2hpZnQoMSk+Pj41JjM7cmV0dXJuIGUubCs9''@;'; put 'put ''NCxyLmJpZmY8OCYmZS5sLS0sMTI9PXIuYmlmZiYmKGUubCs9MiksW2FdfX0sNDM6e246IlB0Z0FyZWFFcnIiLGY6ZnVuY3Rpb24gV3goZSx0LHIpe3ZhciBhPSg5NiZlW2UubCsrXSk+PjU7cmV0dXJuIGUubCs9ciYmci5iaWZmPjg/MTI6ci5iaWZmPDg/Njo4LFthXX19LDQ0OntuOiJQdGdS''@;'; put 'put ''ZWZOIixmOmZ1bmN0aW9uIFp4KGUsdCxyKXt2YXIgYT0oOTYmZVtlLmxdKT4+NTtlLmwrPTE7dmFyIG49ZnVuY3Rpb24gTHgoZSx0LHIpe3ZhciBhPXImJnIuYmlmZj9yLmJpZmY6ODtpZihhPj0yJiZhPD01KXJldHVybiBmdW5jdGlvbiBCeChlKXt2YXIgdD1lLnJlYWRfc2hpZnQoMikscj1l''@;'; put 'put ''LnJlYWRfc2hpZnQoMSksYT0oMzI3NjgmdCk+PjE1LG49KDE2Mzg0JnQpPj4xNDtyZXR1cm4gdCY9MTYzODMsMT09YSYmdD49ODE5MiYmKHQtPTE2Mzg0KSwxPT1uJiZyPj0xMjgmJihyLT0yNTYpLHtyOnQsYzpyLGNSZWw6bixyUmVsOmF9fShlKTt2YXIgbj1lLnJlYWRfc2hpZnQoYT49MTI/''@;'; put 'put ''NDoyKSxpPWUucmVhZF9zaGlmdCgyKSxzPSgxNjM4NCZpKT4+MTQsZj0oMzI3NjgmaSk+PjE1O2lmKGkmPTE2MzgzLDE9PWYpZm9yKDtuPjUyNDI4Nzspbi09MTA0ODU3NjtpZigxPT1zKWZvcig7aT44MTkxOylpLT0xNjM4NDtyZXR1cm57cjpuLGM6aSxjUmVsOnMsclJlbDpmfX0oZSwwLHIp''@;'; put 'put ''O3JldHVyblthLG5dfX0sNDU6e246IlB0Z0FyZWFOIixmOmZ1bmN0aW9uIFZ4KGUsdCxyKXt2YXIgYT0oOTYmZVtlLmwrK10pPj41LG49ZnVuY3Rpb24gTngoZSx0LHIpe2lmKHIuYmlmZjw4KXJldHVybiBTZihlKTt2YXIgYT1lLnJlYWRfc2hpZnQoMTI9PXIuYmlmZj80OjIpLG49ZS5yZWFk''@;'; put 'put ''X3NoaWZ0KDEyPT1yLmJpZmY/NDoyKSxpPUF0KGUsMikscz1BdChlLDIpO3JldHVybntzOntyOmEsYzppWzBdLGNSZWw6aVsxXSxyUmVsOmlbMl19LGU6e3I6bixjOnNbMF0sY1JlbDpzWzFdLHJSZWw6c1syXX19fShlLDAscik7cmV0dXJuW2Esbl19fSw0Njp7bjoiUHRnTWVtQXJlYU4iLGY6''@;'; put 'put ''ZnVuY3Rpb24gQmQoZSl7cmV0dXJuW2UucmVhZF9zaGlmdCgxKT4+PjUmMyxlLnJlYWRfc2hpZnQoMildfX0sNDc6e246IlB0Z01lbU5vTWVtTiIsZjpmdW5jdGlvbiBNZChlKXtyZXR1cm5bZS5yZWFkX3NoaWZ0KDEpPj4+NSYzLGUucmVhZF9zaGlmdCgyKV19fSw1Nzp7bjoiUHRnTmFtZVgi''@;'; put 'put ''LGY6ZnVuY3Rpb24gZGQoZSx0LHIpe3JldHVybiA1PT1yLmJpZmY/ZnVuY3Rpb24gdmQoZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDEpPj4+NSYzLHI9ZS5yZWFkX3NoaWZ0KDIsImkiKTtlLmwrPTg7dmFyIGE9ZS5yZWFkX3NoaWZ0KDIpO3JldHVybiBlLmwrPTEyLFt0LHIsYV19KGUpOltlLnJl''@;'; put 'put ''YWRfc2hpZnQoMSk+Pj41JjMsZS5yZWFkX3NoaWZ0KDIpLGUucmVhZF9zaGlmdCg0KV19fSw1ODp7bjoiUHRnUmVmM2QiLGY6ZnVuY3Rpb24gUXgoZSx0LHIpe3ZhciBhPSg5NiZlW2UubF0pPj41O2UubCs9MTt2YXIgbj1lLnJlYWRfc2hpZnQoMik7cmV0dXJuIHImJjU9PXIuYmlmZiYmKGUu''@;'; put 'put ''bCs9MTIpLFthLG4sRmYoZSwwLHIpXX19LDU5OntuOiJQdGdBcmVhM2QiLGY6ZnVuY3Rpb24gVXgoZSx0LHIpe3ZhciBhPSg5NiZlW2UubCsrXSk+PjUsbj1lLnJlYWRfc2hpZnQoMiwiaSIpO2lmKHImJjU9PT1yLmJpZmYpZS5sKz0xMjtyZXR1cm5bYSxuLFRmKGUsMCxyKV19fSw2MDp7bjoi''@;'; put 'put ''UHRnUmVmRXJyM2QiLGY6ZnVuY3Rpb24gX2QoZSx0LHIpe3ZhciBhPSg5NiZlW2UubCsrXSk+PjUsbj1lLnJlYWRfc2hpZnQoMiksaT00O2lmKHIpc3dpdGNoKHIuYmlmZil7Y2FzZSA1Omk9MTU7YnJlYWs7Y2FzZSAxMjppPTZ9cmV0dXJuIGUubCs9aSxbYSxuXX19LDYxOntuOiJQdGdBcmVh''@;'; put 'put ''RXJyM2QiLGY6ZnVuY3Rpb24gSHgoZSx0LHIpe3ZhciBhPSg5NiZlW2UubCsrXSk+PjUsbj1lLnJlYWRfc2hpZnQoMiksaT04O2lmKHIpc3dpdGNoKHIuYmlmZil7Y2FzZSA1OmUubCs9MTIsaT02O2JyZWFrO2Nhc2UgMTI6aT0xMn1yZXR1cm4gZS5sKz1pLFthLG5dfX0sMjU1Ont9fSxXZD17''@;'; put 'put ''NjQ6MzIsOTY6MzIsNjU6MzMsOTc6MzMsNjY6MzQsOTg6MzQsNjc6MzUsOTk6MzUsNjg6MzYsMTAwOjM2LDY5OjM3LDEwMTozNyw3MDozOCwxMDI6MzgsNzE6MzksMTAzOjM5LDcyOjQwLDEwNDo0MCw3Mzo0MSwxMDU6NDEsNzQ6NDIsMTA2OjQyLDc1OjQzLDEwNzo0Myw3Njo0NCwxMDg6NDQs''@;'; put 'put ''Nzc6NDUsMTA5OjQ1LDc4OjQ2LDExMDo0Niw3OTo0NywxMTE6NDcsODg6MzQsMTIwOjM0LDg5OjU3LDEyMTo1Nyw5MDo1OCwxMjI6NTgsOTE6NTksMTIzOjU5LDkyOjYwLDEyNDo2MCw5Mzo2MSwxMjU6NjF9LEhkPXsxOntuOiJQdGdFbGZMZWwiLGY6Q2Z9LDI6e246IlB0Z0VsZlJ3IixmOlVh''@;'; put 'put ''fSwzOntuOiJQdGdFbGZDb2wiLGY6VWF9LDY6e246IlB0Z0VsZlJ3ViIsZjpVYX0sNzp7bjoiUHRnRWxmQ29sViIsZjpVYX0sMTA6e246IlB0Z0VsZlJhZGljYWwiLGY6VWF9LDExOntuOiJQdGdFbGZSYWRpY2FsUyIsZjpSbn0sMTM6e246IlB0Z0VsZkNvbFMiLGY6Um59LDE1OntuOiJQdGdF''@;'; put 'put ''bGZDb2xTViIsZjpSbn0sMTY6e246IlB0Z0VsZlJhZGljYWxMZWwiLGY6Q2Z9LDI1OntuOiJQdGdMaXN0IixmOmZ1bmN0aW9uIE5kKGUpe2UubCs9Mjt2YXIgdD1lLnJlYWRfc2hpZnQoMikscj1lLnJlYWRfc2hpZnQoMiksYT1lLnJlYWRfc2hpZnQoNCksbj1lLnJlYWRfc2hpZnQoMiksaT1l''@;'; put 'put ''LnJlYWRfc2hpZnQoMik7cmV0dXJue2l4dGk6dCxjb2x0eXBlOjMmcixydDpSZFtyPj4yJjMxXSxpZHg6YSxjOm4sQzppfX19LDI5OntuOiJQdGdTeE5hbWUiLGY6ZnVuY3Rpb24gYmQoZSl7cmV0dXJuIGUubCs9MixbZS5yZWFkX3NoaWZ0KDQpXX19LDI1NTp7fX0sVmQ9ezA6e246IlB0Z0F0''@;'; put 'put ''dHJOb29wIixmOmZ1bmN0aW9uIFVkKGUpe3JldHVybiBlLmwrPTQsWzAsMF19fSwxOntuOiJQdGdBdHRyU2VtaSIsZjpmdW5jdGlvbiBLeChlLHQscil7dmFyIGE9MjU1JmVbZS5sKzFdPzE6MDtyZXR1cm4gZS5sKz1yJiYyPT1yLmJpZmY/Mzo0LFthXX19LDI6e246IlB0Z0F0dHJJZiIsZjpm''@;'; put 'put ''dW5jdGlvbiAkeChlLHQscil7dmFyIGE9MjU1JmVbZS5sKzFdPzE6MDtyZXR1cm4gZS5sKz0yLFthLGUucmVhZF9zaGlmdChyJiYyPT1yLmJpZmY/MToyKV19fSw0OntuOiJQdGdBdHRyQ2hvb3NlIixmOmZ1bmN0aW9uIEd4KGUsdCxyKXtlLmwrPTI7Zm9yKHZhciBhPWUucmVhZF9zaGlmdChy''@;'; put 'put ''JiYyPT1yLmJpZmY/MToyKSxuPVtdLGk9MDtpPD1hOysraSluLnB1c2goZS5yZWFkX3NoaWZ0KHImJjI9PXIuYmlmZj8xOjIpKTtyZXR1cm4gbn19LDg6e246IlB0Z0F0dHJHb3RvIixmOmZ1bmN0aW9uIHp4KGUsdCxyKXt2YXIgYT0yNTUmZVtlLmwrMV0/MTowO3JldHVybiBlLmwrPTIsW2Es''@;'; put 'put ''ZS5yZWFkX3NoaWZ0KHImJjI9PXIuYmlmZj8xOjIpXX19LDE2OntuOiJQdGdBdHRyU3VtIixmOmZ1bmN0aW9uIGFkKGUsdCxyKXtlLmwrPXImJjI9PXIuYmlmZj8zOjR9fSwzMjp7bjoiUHRnQXR0ckJheGNlbCIsZjp5Zn0sMzM6e246IlB0Z0F0dHJCYXhjZWwiLGY6eWZ9LDY0OntuOiJQdGdB''@;'; put 'put ''dHRyU3BhY2UiLGY6ZnVuY3Rpb24gWXgoZSl7cmV0dXJuIGUucmVhZF9zaGlmdCgyKSxBZihlKX19LDY1OntuOiJQdGdBdHRyU3BhY2VTZW1pIixmOmZ1bmN0aW9uIEp4KGUpe3JldHVybiBlLnJlYWRfc2hpZnQoMiksQWYoZSl9fSwxMjg6e246IlB0Z0F0dHJJZkVycm9yIixmOmZ1bmN0aW9u''@;'; put 'put ''IGp4KGUpe3ZhciB0PTI1NSZlW2UubCsxXT8xOjA7cmV0dXJuIGUubCs9MixbdCxlLnJlYWRfc2hpZnQoMildfX0sMjU1Ont9fTtmdW5jdGlvbiBXYShlLHQscixhKXtpZihhLmJpZmY8OClyZXR1cm4gcHIoZSx0KTtmb3IodmFyIG49ZS5sK3QsaT1bXSxzPTA7cyE9PXIubGVuZ3RoOysrcylz''@;'; put 'put ''d2l0Y2gocltzXVswXSl7Y2FzZSJQdGdBcnJheSI6cltzXVsxXT1oZChlLDAsYSksaS5wdXNoKHJbc11bMV0pO2JyZWFrO2Nhc2UiUHRnTWVtQXJlYSI6cltzXVsyXT11ZChlLDAsYSksaS5wdXNoKHJbc11bMl0pO2JyZWFrO2Nhc2UiUHRnRXhwIjphJiYxMj09YS5iaWZmJiYocltzXVsxXVsx''@;'; put 'put ''XT1lLnJlYWRfc2hpZnQoNCksaS5wdXNoKHJbc11bMV0pKTticmVhaztjYXNlIlB0Z0xpc3QiOmNhc2UiUHRnRWxmUmFkaWNhbFMiOmNhc2UiUHRnRWxmQ29sUyI6Y2FzZSJQdGdFbGZDb2xTViI6dGhyb3ciVW5zdXBwb3J0ZWQgIityW3NdWzBdfXJldHVybiAwIT0odD1uLWUubCkmJmkucHVz''@;'; put 'put ''aChwcihlLHQpKSxpfWZ1bmN0aW9uIEhhKGUsdCxyKXtmb3IodmFyIG4saSxhPWUubCt0LHM9W107YSE9ZS5sOyl0PWEtZS5sLG49RGZbaT1lW2UubF1dfHxEZltXZFtpXV0sKDI0PT09aXx8MjU9PT1pKSYmKG49KDI0PT09aT9IZDpWZClbZVtlLmwrMV1dKSxuJiZuLmY/cy5wdXNoKFtuLm4s''@;'; put 'put ''bi5mKGUsdCxyKV0pOnByKGUsdCk7cmV0dXJuIHN9ZnVuY3Rpb24gWGQoZSl7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoOysrcil7Zm9yKHZhciBhPWVbcl0sbj1bXSxpPTA7aTxhLmxlbmd0aDsrK2kpe3ZhciBzPWFbaV07bi5wdXNoKHM/Mj09PXNbMF0/JyInK3NbMV0ucmVwbGFjZSgv''@;'; put 'put ''Ii9nLCciIicpKyciJzpzWzFdOiIiKX10LnB1c2gobi5qb2luKCIsIikpfXJldHVybiB0LmpvaW4oIjsiKX12YXIgR2Q9e1B0Z0FkZDoiKyIsUHRnQ29uY2F0OiImIixQdGdEaXY6Ii8iLFB0Z0VxOiI9IixQdGdHZToiPj0iLFB0Z0d0OiI+IixQdGdMZToiPD0iLFB0Z0x0OiI8IixQdGdNdWw6''@;'; put 'put ''IioiLFB0Z05lOiI8PiIsUHRnUG93ZXI6Il4iLFB0Z1N1YjoiLSJ9O2Z1bmN0aW9uIE9mKGUsdCxyKXtpZighZSlyZXR1cm4iU0gzM1RKU0VSUjAiO2lmKHIuYmlmZj44JiYoIWUuWFRJfHwhZS5YVElbdF0pKXJldHVybiBlLlNoZWV0TmFtZXNbdF07aWYoIWUuWFRJKXJldHVybiJTSDMzVEpT''@;'; put 'put ''RVJSNiI7dmFyIGE9ZS5YVElbdF07aWYoci5iaWZmPDgpcmV0dXJuIHQ+MWU0JiYodC09NjU1MzYpLHQ8MCYmKHQ9LXQpLDA9PXQ/IiI6ZS5YVElbdC0xXTtpZighYSlyZXR1cm4iU0gzM1RKU0VSUjEiO3ZhciBuPSIiO2lmKHIuYmlmZj44KXN3aXRjaChlW2FbMF1dWzBdKXtjYXNlIDM1Nzpy''@;'; put 'put ''ZXR1cm4gbj0tMT09YVsxXT8iI1JFRiI6ZS5TaGVldE5hbWVzW2FbMV1dLGFbMV09PWFbMl0/bjpuKyI6IitlLlNoZWV0TmFtZXNbYVsyXV07Y2FzZSAzNTg6cmV0dXJuIG51bGwhPXIuU0lEP2UuU2hlZXROYW1lc1tyLlNJRF06IlNIMzNUSlNTQU1FIitlW2FbMF1dWzBdO2RlZmF1bHQ6cmV0''@;'; put 'put ''dXJuIlNIMzNUSlNTUkMiK2VbYVswXV1bMF19c3dpdGNoKGVbYVswXV1bMF1bMF0pe2Nhc2UgMTAyNTpyZXR1cm4gbj0tMT09YVsxXT8iI1JFRiI6ZS5TaGVldE5hbWVzW2FbMV1dfHwiU0gzM1RKU0VSUjMiLGFbMV09PWFbMl0/bjpuKyI6IitlLlNoZWV0TmFtZXNbYVsyXV07Y2FzZSAxNDg0''@;'; put 'put ''OTpyZXR1cm4gZVthWzBdXS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIGkuTmFtZX0pLmpvaW4oIjs7Iik7ZGVmYXVsdDpyZXR1cm4gZVthWzBdXVswXVszXT8obj0tMT09YVsxXT8iI1JFRiI6ZVthWzBdXVswXVszXVthWzFdXXx8IlNIMzNUSlNFUlI0IixhWzFdPT1hWzJdP246''@;'; put 'put ''bisiOiIrZVthWzBdXVswXVszXVthWzJdXSk6IlNIMzNUSlNFUlIyIn19ZnVuY3Rpb24gSWYoZSx0LHIpe3ZhciBhPU9mKGUsdCxyKTtyZXR1cm4iI1JFRiI9PWE/YTpmdW5jdGlvbiB6ZChlLHQpe2lmKCEoZXx8dCYmdC5iaWZmPD01JiZ0LmJpZmY+PTIpKXRocm93IG5ldyBFcnJvcigiZW1w''@;'; put 'put ''dHkgc2hlZXQgbmFtZSIpO3JldHVybi9bXlx3XHU0RTAwLVx1OUZGRlx1MzA0MC1cdTMwRkZdLy50ZXN0KGUpPyInIitlKyInIjplfShhLHIpfWZ1bmN0aW9uIGtyKGUsdCxyLGEsbil7dmFyIGMsbyxsLGQsaT1uJiZuLmJpZmZ8fDgscz17czp7YzowLHI6MH0sZTp7YzowLHI6MH19LGY9W10s''@;'; put 'put ''aD0wLHg9MCx2PSIiO2lmKCFlWzBdfHwhZVswXVswXSlyZXR1cm4iIjtmb3IodmFyIHU9LTEscD0iIixrPTAsVD1lWzBdLmxlbmd0aDtrPFQ7KytrKXt2YXIgZz1lWzBdW2tdO3N3aXRjaChnWzBdKXtjYXNlIlB0Z1VtaW51cyI6Zi5wdXNoKCItIitmLnBvcCgpKTticmVhaztjYXNlIlB0Z1Vw''@;'; put 'put ''bHVzIjpmLnB1c2goIisiK2YucG9wKCkpO2JyZWFrO2Nhc2UiUHRnUGVyY2VudCI6Zi5wdXNoKGYucG9wKCkrIiUiKTticmVhaztjYXNlIlB0Z0FkZCI6Y2FzZSJQdGdDb25jYXQiOmNhc2UiUHRnRGl2IjpjYXNlIlB0Z0VxIjpjYXNlIlB0Z0dlIjpjYXNlIlB0Z0d0IjpjYXNlIlB0Z0xlIjpj''@;'; put 'put ''YXNlIlB0Z0x0IjpjYXNlIlB0Z011bCI6Y2FzZSJQdGdOZSI6Y2FzZSJQdGdQb3dlciI6Y2FzZSJQdGdTdWIiOmlmKGM9Zi5wb3AoKSxvPWYucG9wKCksdT49MCl7c3dpdGNoKGVbMF1bdV1bMV1bMF0pe2Nhc2UgMDpwPWplKCIgIixlWzBdW3VdWzFdWzFdKTticmVhaztjYXNlIDE6cD1qZSgi''@;'; put 'put ''XHIiLGVbMF1bdV1bMV1bMV0pO2JyZWFrO2RlZmF1bHQ6aWYocD0iIixuLldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgUHRnQXR0clNwYWNlVHlwZSAiK2VbMF1bdV1bMV1bMF0pfW8rPXAsdT0tMX1mLnB1c2gobytHZFtnWzBdXStjKTticmVhaztjYXNlIlB0Z0lzZWN0IjpjPWYu''@;'; put 'put ''cG9wKCksbz1mLnBvcCgpLGYucHVzaChvKyIgIitjKTticmVhaztjYXNlIlB0Z1VuaW9uIjpjPWYucG9wKCksbz1mLnBvcCgpLGYucHVzaChvKyIsIitjKTticmVhaztjYXNlIlB0Z1JhbmdlIjpjPWYucG9wKCksbz1mLnBvcCgpLGYucHVzaChvKyI6IitjKTticmVhaztjYXNlIlB0Z0F0dHJD''@;'; put 'put ''aG9vc2UiOmNhc2UiUHRnQXR0ckdvdG8iOmNhc2UiUHRnQXR0cklmIjpjYXNlIlB0Z0F0dHJJZkVycm9yIjpjYXNlIlB0Z0F0dHJCYXhjZWwiOmNhc2UiUHRnQXR0clNlbWkiOmNhc2UiUHRnTWVtQXJlYSI6Y2FzZSJQdGdUYmwiOmNhc2UiUHRnTWVtRXJyIjpjYXNlIlB0Z01lbUFyZWFOIjpj''@;'; put 'put ''YXNlIlB0Z01lbU5vTWVtTiI6Y2FzZSJQdGdBdHRyTm9vcCI6Y2FzZSJQdGdTaGVldCI6Y2FzZSJQdGdFbmRTaGVldCI6Y2FzZSJQdGdNZW1GdW5jIjpjYXNlIlB0Z01lbU5vTWVtIjpicmVhaztjYXNlIlB0Z1JlZiI6bD1DYShnWzFdWzFdLHMsbiksZi5wdXNoKERhKGwsaSkpO2JyZWFrO2Nh''@;'; put 'put ''c2UiUHRnUmVmTiI6bD1yP0NhKGdbMV1bMV0scixuKTpnWzFdWzFdLGYucHVzaChEYShsLGkpKTticmVhaztjYXNlIlB0Z1JlZjNkIjpoPWdbMV1bMV0sbD1DYShnWzFdWzJdLHMsbiksdj1JZihhLGgsbiksZi5wdXNoKHYrIiEiK0RhKGwsaSkpO2JyZWFrO2Nhc2UiUHRnRnVuYyI6Y2FzZSJQ''@;'; put 'put ''dGdGdW5jVmFyIjp2YXIgTT1nWzFdWzBdLEk9Z1sxXVsxXTtNfHwoTT0wKTt2YXIgeT0wPT0oTSY9MTI3KT9bXTpmLnNsaWNlKC1NKTtmLmxlbmd0aC09TSwiVXNlciI9PT1JJiYoST15LnNoaWZ0KCkpLGYucHVzaChJKyIoIit5LmpvaW4oIiwiKSsiKSIpO2JyZWFrO2Nhc2UiUHRnQm9vbCI6''@;'; put 'put ''Zi5wdXNoKGdbMV0/IlRSVUUiOiJGQUxTRSIpO2JyZWFrO2Nhc2UiUHRnSW50IjpjYXNlIlB0Z0VyciI6Zi5wdXNoKGdbMV0pO2JyZWFrO2Nhc2UiUHRnTnVtIjpmLnB1c2goU3RyaW5nKGdbMV0pKTticmVhaztjYXNlIlB0Z1N0ciI6Zi5wdXNoKCciJytnWzFdLnJlcGxhY2UoLyIvZywnIiIn''@;'; put 'put ''KSsnIicpO2JyZWFrO2Nhc2UiUHRnQXJlYU4iOmQ9bnMoZ1sxXVsxXSxyP3tzOnJ9OnMsbiksZi5wdXNoKHRuKGQsbikpO2JyZWFrO2Nhc2UiUHRnQXJlYSI6ZD1ucyhnWzFdWzFdLHMsbiksZi5wdXNoKHRuKGQsbikpO2JyZWFrO2Nhc2UiUHRnQXJlYTNkIjpkPWdbMV1bMl0sdj1JZihhLGg9''@;'; put 'put ''Z1sxXVsxXSxuKSxmLnB1c2godisiISIrdG4oZCxuKSk7YnJlYWs7Y2FzZSJQdGdBdHRyU3VtIjpmLnB1c2goIlNVTSgiK2YucG9wKCkrIikiKTticmVhaztjYXNlIlB0Z05hbWUiOnZhciBQPShhLm5hbWVzfHxbXSlbKHg9Z1sxXVsyXSktMV18fChhWzBdfHxbXSlbeF0sUj1QP1AuTmFtZToi''@;'; put 'put ''U0gzM1RKU05BTUUiK1N0cmluZyh4KTtSJiYiX3hsZm4uIj09Ui5zbGljZSgwLDYpJiYhbi54bGZuJiYoUj1SLnNsaWNlKDYpKSxmLnB1c2goUik7YnJlYWs7Y2FzZSJQdGdOYW1lWCI6dmFyIFgsVj1nWzFdWzFdO2lmKHg9Z1sxXVsyXSwhKG4uYmlmZjw9NSkpe3ZhciBiPSIiO2lmKDE0ODQ5''@;'; put 'put ''PT0oKGFbVl18fFtdKVswXXx8W10pWzBdfHwoMTAyNT09KChhW1ZdfHxbXSlbMF18fFtdKVswXT9hW1ZdW3hdJiZhW1ZdW3hdLml0YWI+MCYmKGI9YS5TaGVldE5hbWVzW2FbVl1beF0uaXRhYi0xXSsiISIpOmI9YS5TaGVldE5hbWVzW3gtMV0rIiEiKSxhW1ZdJiZhW1ZdW3hdKWIrPWFbVl1b''@;'; put 'put ''eF0uTmFtZTtlbHNlIGlmKGFbMF0mJmFbMF1beF0pYis9YVswXVt4XS5OYW1lO2Vsc2V7dmFyIGVlPShPZihhLFYsbil8fCIiKS5zcGxpdCgiOzsiKTtlZVt4LTFdP2I9ZWVbeC0xXTpiKz0iU0gzM1RKU0VSUlgifWYucHVzaChiKTticmVha31WPDAmJihWPS1WKSxhW1ZdJiYoWD1hW1ZdW3hd''@;'; put 'put ''KSxYfHwoWD17TmFtZToiU0gzM1RKU0VSUlkifSksZi5wdXNoKFguTmFtZSk7YnJlYWs7Y2FzZSJQdGdQYXJlbiI6dmFyIGxlPSIoIixyZT0iKSI7aWYodT49MCl7c3dpdGNoKHA9IiIsZVswXVt1XVsxXVswXSl7Y2FzZSAyOmxlPWplKCIgIixlWzBdW3VdWzFdWzFdKStsZTticmVhaztjYXNl''@;'; put 'put ''IDM6bGU9amUoIlxyIixlWzBdW3VdWzFdWzFdKStsZTticmVhaztjYXNlIDQ6cmU9amUoIiAiLGVbMF1bdV1bMV1bMV0pK3JlO2JyZWFrO2Nhc2UgNTpyZT1qZSgiXHIiLGVbMF1bdV1bMV1bMV0pK3JlO2JyZWFrO2RlZmF1bHQ6aWYobi5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVk''@;'; put 'put ''IFB0Z0F0dHJTcGFjZVR5cGUgIitlWzBdW3VdWzFdWzBdKX11PS0xfWYucHVzaChsZStmLnBvcCgpK3JlKTticmVhaztjYXNlIlB0Z1JlZkVyciI6Y2FzZSJQdGdSZWZFcnIzZCI6Y2FzZSJQdGdBcmVhRXJyIjpjYXNlIlB0Z0FyZWFFcnIzZCI6Zi5wdXNoKCIjUkVGISIpO2JyZWFrO2Nhc2Ui''@;'; put 'put ''UHRnRXhwIjp2YXIgZGU9e2M6ci5jLHI6ci5yfTtpZihhLnNoYXJlZGZbZ2UobD17YzpnWzFdWzFdLHI6Z1sxXVswXX0pXSl7dmFyIHVlPWEuc2hhcmVkZltnZShsKV07Zi5wdXNoKGtyKHVlLDAsZGUsYSxuKSl9ZWxzZXt2YXIgRmU9ITE7Zm9yKGM9MDtjIT1hLmFycmF5Zi5sZW5ndGg7Kytj''@;'; put 'put ''KWlmKCEobC5jPChvPWEuYXJyYXlmW2NdKVswXS5zLmN8fGwuYz5vWzBdLmUuY3x8bC5yPG9bMF0ucy5yfHxsLnI+b1swXS5lLnIpKXtmLnB1c2goa3Iob1sxXSwwLGRlLGEsbikpLEZlPSEwO2JyZWFrfUZlfHxmLnB1c2goZ1sxXSl9YnJlYWs7Y2FzZSJQdGdBcnJheSI6Zi5wdXNoKCJ7IitY''@;'; put 'put ''ZChnWzFdKSsifSIpO2JyZWFrO2Nhc2UiUHRnQXR0clNwYWNlIjpjYXNlIlB0Z0F0dHJTcGFjZVNlbWkiOnU9azticmVhaztjYXNlIlB0Z01pc3NBcmciOmYucHVzaCgiIik7YnJlYWs7Y2FzZSJQdGdMaXN0IjpmLnB1c2goIlRhYmxlIitnWzFdLmlkeCsiWyMiK2dbMV0ucnQrIl0iKTticmVh''@;'; put 'put ''aztjYXNlIlB0Z0VsZkNvbCI6Y2FzZSJQdGdFbGZDb2xTIjpjYXNlIlB0Z0VsZkNvbFNWIjpjYXNlIlB0Z0VsZkNvbFYiOmNhc2UiUHRnRWxmTGVsIjpjYXNlIlB0Z0VsZlJhZGljYWwiOmNhc2UiUHRnRWxmUmFkaWNhbExlbCI6Y2FzZSJQdGdFbGZSYWRpY2FsUyI6Y2FzZSJQdGdFbGZSdyI6''@;'; put 'put ''Y2FzZSJQdGdFbGZSd1YiOnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgRUxGcyIpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgRm9ybXVsYSBUb2tlbjogIitTdHJpbmcoZykpfWlmKDMhPW4uYmlmZiYmdT49MCYmLTE9PVsiUHRnQXR0clNwYWNlIiwiUHRnQXR0''@;'; put 'put ''clNwYWNlU2VtaSIsIlB0Z0F0dHJHb3RvIl0uaW5kZXhPZihlWzBdW2tdWzBdKSl7dmFyIHhlPSEwO3N3aXRjaCgoZz1lWzBdW3VdKVsxXVswXSl7Y2FzZSA0OnhlPSExO2Nhc2UgMDpwPWplKCIgIixnWzFdWzFdKTticmVhaztjYXNlIDU6eGU9ITE7Y2FzZSAxOnA9amUoIlxyIixnWzFdWzFd''@;'; put 'put ''KTticmVhaztkZWZhdWx0OmlmKHA9IiIsbi5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIFB0Z0F0dHJTcGFjZVR5cGUgIitnWzFdWzBdKX1mLnB1c2goKHhlP3A6IiIpK2YucG9wKCkrKHhlPyIiOnApKSx1PS0xfX1pZihmLmxlbmd0aD4xJiZuLldURil0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''ImJhZCBmb3JtdWxhIHN0YWNrIik7cmV0dXJuIGZbMF19ZnVuY3Rpb24gJGQoZSx0LHIpe3ZhciBpLGE9ZS5sK3Qsbj0yPT1yLmJpZmY/MToyLHM9ZS5yZWFkX3NoaWZ0KG4pO2lmKDY1NTM1PT1zKXJldHVybltbXSxwcihlLHQtMildO3ZhciBmPUhhKGUscyxyKTtyZXR1cm4gdCE9PXMrbiYm''@;'; put 'put ''KGk9V2EoZSx0LXMtbixmLHIpKSxlLmw9YSxbZixpXX1mdW5jdGlvbiBZZChlLHQscil7dmFyIG4sYT1lLmwrdCxpPWUucmVhZF9zaGlmdCgyKSxzPUhhKGUsaSxyKTtyZXR1cm4gNjU1MzU9PWk/W1tdLHByKGUsdC0yKV06KHQhPT1pKzImJihuPVdhKGUsYS1pLTIscyxyKSksW3Msbl0pfWZ1''@;'; put 'put ''bmN0aW9uIE5uKGUsdCxyKXt2YXIgYT1lLmwrdCxuPW50KGUpOzI9PXIuYmlmZiYmKytlLmw7dmFyIGk9ZnVuY3Rpb24gSmQoZSl7dmFyIHQ7aWYoNjU1MzUhPT11dChlLGUubCs2KSlyZXR1cm5bZ3IoZSksIm4iXTtzd2l0Y2goZVtlLmxdKXtjYXNlIDA6cmV0dXJuIGUubCs9OCxbIlN0cmlu''@;'; put 'put ''ZyIsInMiXTtjYXNlIDE6cmV0dXJuIHQ9MT09PWVbZS5sKzJdLGUubCs9OCxbdCwiYiJdO2Nhc2UgMjpyZXR1cm4gdD1lW2UubCsyXSxlLmwrPTgsW3QsImUiXTtjYXNlIDM6cmV0dXJuIGUubCs9OCxbIiIsInMiXX1yZXR1cm5bXX0oZSkscz1lLnJlYWRfc2hpZnQoMSk7MiE9ci5iaWZmJiYo''@;'; put 'put ''ZS5yZWFkX3NoaWZ0KDEpLHIuYmlmZj49NSYmZS5yZWFkX3NoaWZ0KDQpKTt2YXIgZj1mdW5jdGlvbiBqZChlLHQscil7dmFyIGksYT1lLmwrdCxuPTI9PXIuYmlmZj8xOjIscz1lLnJlYWRfc2hpZnQobik7aWYoNjU1MzU9PXMpcmV0dXJuW1tdLHByKGUsdC0yKV07dmFyIGY9SGEoZSxzLHIp''@;'; put 'put ''O3JldHVybiB0IT09cytuJiYoaT1XYShlLHQtcy1uLGYscikpLGUubD1hLFtmLGldfShlLGEtZS5sLHIpO3JldHVybntjZWxsOm4sdmFsOmlbMF0sZm9ybXVsYTpmLHNoYXJlZDpzPj4zJjEsdHQ6aVsxXX19ZnVuY3Rpb24gQTAoZSx0LHIpe3ZhciBhPWUucmVhZF9zaGlmdCg0KSxuPUhhKGUs''@;'; put 'put ''YSxyKSxpPWUucmVhZF9zaGlmdCg0KTtyZXR1cm5bbixpPjA/V2EoZSxpLG4scik6bnVsbF19dmFyIFFkPUEwLEMwPUEwLGV2PUEwLHJ2PUEwLHR2PXswOiJCRUVQIiwxOiJPUEVOIiwyOiJPUEVOLkxJTktTIiwzOiJDTE9TRS5BTEwiLDQ6IlNBVkUiLDU6IlNBVkUuQVMiLDY6IkZJTEUuREVM''@;'; put 'put ''RVRFIiw3OiJQQUdFLlNFVFVQIiw4OiJQUklOVCIsOToiUFJJTlRFUi5TRVRVUCIsMTA6IlFVSVQiLDExOiJORVcuV0lORE9XIiwxMjoiQVJSQU5HRS5BTEwiLDEzOiJXSU5ET1cuU0laRSIsMTQ6IldJTkRPVy5NT1ZFIiwxNToiRlVMTCIsMTY6IkNMT1NFIiwxNzoiUlVOIiwyMjoiU0VULlBS''@;'; put 'put ''SU5ULkFSRUEiLDIzOiJTRVQuUFJJTlQuVElUTEVTIiwyNDoiU0VULlBBR0UuQlJFQUsiLDI1OiJSRU1PVkUuUEFHRS5CUkVBSyIsMjY6IkZPTlQiLDI3OiJESVNQTEFZIiwyODoiUFJPVEVDVC5ET0NVTUVOVCIsMjk6IlBSRUNJU0lPTiIsMzA6IkExLlIxQzEiLDMxOiJDQUxDVUxBVEUuTk9X''@;'; put 'put ''IiwzMjoiQ0FMQ1VMQVRJT04iLDM0OiJEQVRBLkZJTkQiLDM1OiJFWFRSQUNUIiwzNjoiREFUQS5ERUxFVEUiLDM3OiJTRVQuREFUQUJBU0UiLDM4OiJTRVQuQ1JJVEVSSUEiLDM5OiJTT1JUIiw0MDoiREFUQS5TRVJJRVMiLDQxOiJUQUJMRSIsNDI6IkZPUk1BVC5OVU1CRVIiLDQzOiJBTElH''@;'; put 'put ''Tk1FTlQiLDQ0OiJTVFlMRSIsNDU6IkJPUkRFUiIsNDY6IkNFTEwuUFJPVEVDVElPTiIsNDc6IkNPTFVNTi5XSURUSCIsNDg6IlVORE8iLDQ5OiJDVVQiLDUwOiJDT1BZIiw1MToiUEFTVEUiLDUyOiJDTEVBUiIsNTM6IlBBU1RFLlNQRUNJQUwiLDU0OiJFRElULkRFTEVURSIsNTU6IklOU0VS''@;'; put 'put ''VCIsNTY6IkZJTEwuUklHSFQiLDU3OiJGSUxMLkRPV04iLDYxOiJERUZJTkUuTkFNRSIsNjI6IkNSRUFURS5OQU1FUyIsNjM6IkZPUk1VTEEuR09UTyIsNjQ6IkZPUk1VTEEuRklORCIsNjU6IlNFTEVDVC5MQVNULkNFTEwiLDY2OiJTSE9XLkFDVElWRS5DRUxMIiw2NzoiR0FMTEVSWS5BUkVB''@;'; put 'put ''Iiw2ODoiR0FMTEVSWS5CQVIiLDY5OiJHQUxMRVJZLkNPTFVNTiIsNzA6IkdBTExFUlkuTElORSIsNzE6IkdBTExFUlkuUElFIiw3MjoiR0FMTEVSWS5TQ0FUVEVSIiw3MzoiQ09NQklOQVRJT04iLDc0OiJQUkVGRVJSRUQiLDc1OiJBREQuT1ZFUkxBWSIsNzY6IkdSSURMSU5FUyIsNzc6IlNF''@;'; put 'put ''VC5QUkVGRVJSRUQiLDc4OiJBWEVTIiw3OToiTEVHRU5EIiw4MDoiQVRUQUNILlRFWFQiLDgxOiJBREQuQVJST1ciLDgyOiJTRUxFQ1QuQ0hBUlQiLDgzOiJTRUxFQ1QuUExPVC5BUkVBIiw4NDoiUEFUVEVSTlMiLDg1OiJNQUlOLkNIQVJUIiw4NjoiT1ZFUkxBWSIsODc6IlNDQUxFIiw4ODoi''@;'; put 'put ''Rk9STUFULkxFR0VORCIsODk6IkZPUk1BVC5URVhUIiw5MDoiRURJVC5SRVBFQVQiLDkxOiJQQVJTRSIsOTI6IkpVU1RJRlkiLDkzOiJISURFIiw5NDoiVU5ISURFIiw5NToiV09SS1NQQUNFIiw5NjoiRk9STVVMQSIsOTc6IkZPUk1VTEEuRklMTCIsOTg6IkZPUk1VTEEuQVJSQVkiLDk5OiJE''@;'; put 'put ''QVRBLkZJTkQuTkVYVCIsMTAwOiJEQVRBLkZJTkQuUFJFViIsMTAxOiJGT1JNVUxBLkZJTkQuTkVYVCIsMTAyOiJGT1JNVUxBLkZJTkQuUFJFViIsMTAzOiJBQ1RJVkFURSIsMTA0OiJBQ1RJVkFURS5ORVhUIiwxMDU6IkFDVElWQVRFLlBSRVYiLDEwNjoiVU5MT0NLRUQuTkVYVCIsMTA3OiJV''@;'; put 'put ''TkxPQ0tFRC5QUkVWIiwxMDg6IkNPUFkuUElDVFVSRSIsMTA5OiJTRUxFQ1QiLDExMDoiREVMRVRFLk5BTUUiLDExMToiREVMRVRFLkZPUk1BVCIsMTEyOiJWTElORSIsMTEzOiJITElORSIsMTE0OiJWUEFHRSIsMTE1OiJIUEFHRSIsMTE2OiJWU0NST0xMIiwxMTc6IkhTQ1JPTEwiLDExODoi''@;'; put 'put ''QUxFUlQiLDExOToiTkVXIiwxMjA6IkNBTkNFTC5DT1BZIiwxMjE6IlNIT1cuQ0xJUEJPQVJEIiwxMjI6Ik1FU1NBR0UiLDEyNDoiUEFTVEUuTElOSyIsMTI1OiJBUFAuQUNUSVZBVEUiLDEyNjoiREVMRVRFLkFSUk9XIiwxMjc6IlJPVy5IRUlHSFQiLDEyODoiRk9STUFULk1PVkUiLDEyOToi''@;'; put 'put ''Rk9STUFULlNJWkUiLDEzMDoiRk9STVVMQS5SRVBMQUNFIiwxMzE6IlNFTkQuS0VZUyIsMTMyOiJTRUxFQ1QuU1BFQ0lBTCIsMTMzOiJBUFBMWS5OQU1FUyIsMTM0OiJSRVBMQUNFLkZPTlQiLDEzNToiRlJFRVpFLlBBTkVTIiwxMzY6IlNIT1cuSU5GTyIsMTM3OiJTUExJVCIsMTM4OiJPTi5X''@;'; put 'put ''SU5ET1ciLDEzOToiT04uREFUQSIsMTQwOiJESVNBQkxFLklOUFVUIiwxNDI6Ik9VVExJTkUiLDE0MzoiTElTVC5OQU1FUyIsMTQ0OiJGSUxFLkNMT1NFIiwxNDU6IlNBVkUuV09SS0JPT0siLDE0NjoiREFUQS5GT1JNIiwxNDc6IkNPUFkuQ0hBUlQiLDE0ODoiT04uVElNRSIsMTQ5OiJXQUlU''@;'; put 'put ''IiwxNTA6IkZPUk1BVC5GT05UIiwxNTE6IkZJTEwuVVAiLDE1MjoiRklMTC5MRUZUIiwxNTM6IkRFTEVURS5PVkVSTEFZIiwxNTU6IlNIT1JULk1FTlVTIiwxNTk6IlNFVC5VUERBVEUuU1RBVFVTIiwxNjE6IkNPTE9SLlBBTEVUVEUiLDE2MjoiREVMRVRFLlNUWUxFIiwxNjM6IldJTkRPVy5S''@;'; put 'put ''RVNUT1JFIiwxNjQ6IldJTkRPVy5NQVhJTUlaRSIsMTY2OiJDSEFOR0UuTElOSyIsMTY3OiJDQUxDVUxBVEUuRE9DVU1FTlQiLDE2ODoiT04uS0VZIiwxNjk6IkFQUC5SRVNUT1JFIiwxNzA6IkFQUC5NT1ZFIiwxNzE6IkFQUC5TSVpFIiwxNzI6IkFQUC5NSU5JTUlaRSIsMTczOiJBUFAuTUFY''@;'; put 'put ''SU1JWkUiLDE3NDoiQlJJTkcuVE8uRlJPTlQiLDE3NToiU0VORC5UTy5CQUNLIiwxODU6Ik1BSU4uQ0hBUlQuVFlQRSIsMTg2OiJPVkVSTEFZLkNIQVJULlRZUEUiLDE4NzoiU0VMRUNULkVORCIsMTg4OiJPUEVOLk1BSUwiLDE4OToiU0VORC5NQUlMIiwxOTA6IlNUQU5EQVJELkZPTlQiLDE5''@;'; put 'put ''MToiQ09OU09MSURBVEUiLDE5MjoiU09SVC5TUEVDSUFMIiwxOTM6IkdBTExFUlkuM0QuQVJFQSIsMTk0OiJHQUxMRVJZLjNELkNPTFVNTiIsMTk1OiJHQUxMRVJZLjNELkxJTkUiLDE5NjoiR0FMTEVSWS4zRC5QSUUiLDE5NzoiVklFVy4zRCIsMTk4OiJHT0FMLlNFRUsiLDE5OToiV09SS0dS''@;'; put 'put ''T1VQIiwyMDA6IkZJTEwuR1JPVVAiLDIwMToiVVBEQVRFLkxJTksiLDIwMjoiUFJPTU9URSIsMjAzOiJERU1PVEUiLDIwNDoiU0hPVy5ERVRBSUwiLDIwNjoiVU5HUk9VUCIsMjA3OiJPQkpFQ1QuUFJPUEVSVElFUyIsMjA4OiJTQVZFLk5FVy5PQkpFQ1QiLDIwOToiU0hBUkUiLDIxMDoiU0hB''@;'; put 'put ''UkUuTkFNRSIsMjExOiJEVVBMSUNBVEUiLDIxMjoiQVBQTFkuU1RZTEUiLDIxMzoiQVNTSUdOLlRPLk9CSkVDVCIsMjE0OiJPQkpFQ1QuUFJPVEVDVElPTiIsMjE1OiJISURFLk9CSkVDVCIsMjE2OiJTRVQuRVhUUkFDVCIsMjE3OiJDUkVBVEUuUFVCTElTSEVSIiwyMTg6IlNVQlNDUklCRS5U''@;'; put 'put ''TyIsMjE5OiJBVFRSSUJVVEVTIiwyMjA6IlNIT1cuVE9PTEJBUiIsMjIyOiJQUklOVC5QUkVWSUVXIiwyMjM6IkVESVQuQ09MT1IiLDIyNDoiU0hPVy5MRVZFTFMiLDIyNToiRk9STUFULk1BSU4iLDIyNjoiRk9STUFULk9WRVJMQVkiLDIyNzoiT04uUkVDQUxDIiwyMjg6IkVESVQuU0VSSUVT''@;'; put 'put ''IiwyMjk6IkRFRklORS5TVFlMRSIsMjQwOiJMSU5FLlBSSU5UIiwyNDM6IkVOVEVSLkRBVEEiLDI0OToiR0FMTEVSWS5SQURBUiIsMjUwOiJNRVJHRS5TVFlMRVMiLDI1MToiRURJVElPTi5PUFRJT05TIiwyNTI6IlBBU1RFLlBJQ1RVUkUiLDI1MzoiUEFTVEUuUElDVFVSRS5MSU5LIiwyNTQ6''@;'; put 'put ''IlNQRUxMSU5HIiwyNTY6IlpPT00iLDI1OToiSU5TRVJULk9CSkVDVCIsMjYwOiJXSU5ET1cuTUlOSU1JWkUiLDI2NToiU09VTkQuTk9URSIsMjY2OiJTT1VORC5QTEFZIiwyNjc6IkZPUk1BVC5TSEFQRSIsMjY4OiJFWFRFTkQuUE9MWUdPTiIsMjY5OiJGT1JNQVQuQVVUTyIsMjcyOiJHQUxM''@;'; put 'put ''RVJZLjNELkJBUiIsMjczOiJHQUxMRVJZLjNELlNVUkZBQ0UiLDI3NDoiRklMTC5BVVRPIiwyNzY6IkNVU1RPTUlaRS5UT09MQkFSIiwyNzc6IkFERC5UT09MIiwyNzg6IkVESVQuT0JKRUNUIiwyNzk6Ik9OLkRPVUJMRUNMSUNLIiwyODA6Ik9OLkVOVFJZIiwyODE6IldPUktCT09LLkFERCIs''@;'; put 'put ''MjgyOiJXT1JLQk9PSy5NT1ZFIiwyODM6IldPUktCT09LLkNPUFkiLDI4NDoiV09SS0JPT0suT1BUSU9OUyIsMjg1OiJTQVZFLldPUktTUEFDRSIsMjg4OiJDSEFSVC5XSVpBUkQiLDI4OToiREVMRVRFLlRPT0wiLDI5MDoiTU9WRS5UT09MIiwyOTE6IldPUktCT09LLlNFTEVDVCIsMjkyOiJX''@;'; put 'put ''T1JLQk9PSy5BQ1RJVkFURSIsMjkzOiJBU1NJR04uVE8uVE9PTCIsMjk1OiJDT1BZLlRPT0wiLDI5NjoiUkVTRVQuVE9PTCIsMjk3OiJDT05TVFJBSU4uTlVNRVJJQyIsMjk4OiJQQVNURS5UT09MIiwzMDI6IldPUktCT09LLk5FVyIsMzA1OiJTQ0VOQVJJTy5DRUxMUyIsMzA2OiJTQ0VOQVJJ''@;'; put 'put ''Ty5ERUxFVEUiLDMwNzoiU0NFTkFSSU8uQUREIiwzMDg6IlNDRU5BUklPLkVESVQiLDMwOToiU0NFTkFSSU8uU0hPVyIsMzEwOiJTQ0VOQVJJTy5TSE9XLk5FWFQiLDMxMToiU0NFTkFSSU8uU1VNTUFSWSIsMzEyOiJQSVZPVC5UQUJMRS5XSVpBUkQiLDMxMzoiUElWT1QuRklFTEQuUFJPUEVS''@;'; put 'put ''VElFUyIsMzE0OiJQSVZPVC5GSUVMRCIsMzE1OiJQSVZPVC5JVEVNIiwzMTY6IlBJVk9ULkFERC5GSUVMRFMiLDMxODoiT1BUSU9OUy5DQUxDVUxBVElPTiIsMzE5OiJPUFRJT05TLkVESVQiLDMyMDoiT1BUSU9OUy5WSUVXIiwzMjE6IkFERElOLk1BTkFHRVIiLDMyMjoiTUVOVS5FRElUT1Ii''@;'; put 'put ''LDMyMzoiQVRUQUNILlRPT0xCQVJTIiwzMjQ6IlZCQUFjdGl2YXRlIiwzMjU6Ik9QVElPTlMuQ0hBUlQiLDMyODoiVkJBLklOU0VSVC5GSUxFIiwzMzA6IlZCQS5QUk9DRURVUkUuREVGSU5JVElPTiIsMzM2OiJST1VUSU5HLlNMSVAiLDMzODoiUk9VVEUuRE9DVU1FTlQiLDMzOToiTUFJTC5M''@;'; put 'put ''T0dPTiIsMzQyOiJJTlNFUlQuUElDVFVSRSIsMzQzOiJFRElULlRPT0wiLDM0NDoiR0FMTEVSWS5ET1VHSE5VVCIsMzUwOiJDSEFSVC5UUkVORCIsMzUyOiJQSVZPVC5JVEVNLlBST1BFUlRJRVMiLDM1NDoiV09SS0JPT0suSU5TRVJUIiwzNTU6Ik9QVElPTlMuVFJBTlNJVElPTiIsMzU2OiJP''@;'; put 'put ''UFRJT05TLkdFTkVSQUwiLDM3MDoiRklMVEVSLkFEVkFOQ0VEIiwzNzM6Ik1BSUwuQURELk1BSUxFUiIsMzc0OiJNQUlMLkRFTEVURS5NQUlMRVIiLDM3NToiTUFJTC5SRVBMWSIsMzc2OiJNQUlMLlJFUExZLkFMTCIsMzc3OiJNQUlMLkZPUldBUkQiLDM3ODoiTUFJTC5ORVhULkxFVFRFUiIs''@;'; put 'put ''Mzc5OiJEQVRBLkxBQkVMIiwzODA6IklOU0VSVC5USVRMRSIsMzgxOiJGT05ULlBST1BFUlRJRVMiLDM4MjoiTUFDUk8uT1BUSU9OUyIsMzgzOiJXT1JLQk9PSy5ISURFIiwzODQ6IldPUktCT09LLlVOSElERSIsMzg1OiJXT1JLQk9PSy5ERUxFVEUiLDM4NjoiV09SS0JPT0suTkFNRSIsMzg4''@;'; put 'put ''OiJHQUxMRVJZLkNVU1RPTSIsMzkwOiJBREQuQ0hBUlQuQVVUT0ZPUk1BVCIsMzkxOiJERUxFVEUuQ0hBUlQuQVVUT0ZPUk1BVCIsMzkyOiJDSEFSVC5BREQuREFUQSIsMzkzOiJBVVRPLk9VVExJTkUiLDM5NDoiVEFCLk9SREVSIiwzOTU6IlNIT1cuRElBTE9HIiwzOTY6IlNFTEVDVC5BTEwi''@;'; put 'put ''LDM5NzoiVU5HUk9VUC5TSEVFVFMiLDM5ODoiU1VCVE9UQUwuQ1JFQVRFIiwzOTk6IlNVQlRPVEFMLlJFTU9WRSIsNDAwOiJSRU5BTUUuT0JKRUNUIiw0MTI6IldPUktCT09LLlNDUk9MTCIsNDEzOiJXT1JLQk9PSy5ORVhUIiw0MTQ6IldPUktCT09LLlBSRVYiLDQxNToiV09SS0JPT0suVEFC''@;'; put 'put ''LlNQTElUIiw0MTY6IkZVTEwuU0NSRUVOIiw0MTc6IldPUktCT09LLlBST1RFQ1QiLDQyMDoiU0NST0xMQkFSLlBST1BFUlRJRVMiLDQyMToiUElWT1QuU0hPVy5QQUdFUyIsNDIyOiJURVhULlRPLkNPTFVNTlMiLDQyMzoiRk9STUFULkNIQVJUVFlQRSIsNDI0OiJMSU5LLkZPUk1BVCIsNDI1''@;'; put 'put ''OiJUUkFDRVIuRElTUExBWSIsNDMwOiJUUkFDRVIuTkFWSUdBVEUiLDQzMToiVFJBQ0VSLkNMRUFSIiw0MzI6IlRSQUNFUi5FUlJPUiIsNDMzOiJQSVZPVC5GSUVMRC5HUk9VUCIsNDM0OiJQSVZPVC5GSUVMRC5VTkdST1VQIiw0MzU6IkNIRUNLQk9YLlBST1BFUlRJRVMiLDQzNjoiTEFCRUwu''@;'; put 'put ''UFJPUEVSVElFUyIsNDM3OiJMSVNUQk9YLlBST1BFUlRJRVMiLDQzODoiRURJVEJPWC5QUk9QRVJUSUVTIiw0Mzk6IlBJVk9ULlJFRlJFU0giLDQ0MDoiTElOSy5DT01CTyIsNDQxOiJPUEVOLlRFWFQiLDQ0MjoiSElERS5ESUFMT0ciLDQ0MzoiU0VULkRJQUxPRy5GT0NVUyIsNDQ0OiJFTkFC''@;'; put 'put ''TEUuT0JKRUNUIiw0NDU6IlBVU0hCVVRUT04uUFJPUEVSVElFUyIsNDQ2OiJTRVQuRElBTE9HLkRFRkFVTFQiLDQ0NzoiRklMVEVSIiw0NDg6IkZJTFRFUi5TSE9XLkFMTCIsNDQ5OiJDTEVBUi5PVVRMSU5FIiw0NTA6IkZVTkNUSU9OLldJWkFSRCIsNDUxOiJBREQuTElTVC5JVEVNIiw0NTI6''@;'; put 'put ''IlNFVC5MSVNULklURU0iLDQ1MzoiUkVNT1ZFLkxJU1QuSVRFTSIsNDU0OiJTRUxFQ1QuTElTVC5JVEVNIiw0NTU6IlNFVC5DT05UUk9MLlZBTFVFIiw0NTY6IlNBVkUuQ09QWS5BUyIsNDU4OiJPUFRJT05TLkxJU1RTLkFERCIsNDU5OiJPUFRJT05TLkxJU1RTLkRFTEVURSIsNDYwOiJTRVJJ''@;'; put 'put ''RVMuQVhFUyIsNDYxOiJTRVJJRVMuWCIsNDYyOiJTRVJJRVMuWSIsNDYzOiJFUlJPUkJBUi5YIiw0NjQ6IkVSUk9SQkFSLlkiLDQ2NToiRk9STUFULkNIQVJUIiw0NjY6IlNFUklFUy5PUkRFUiIsNDY3OiJNQUlMLkxPR09GRiIsNDY4OiJDTEVBUi5ST1VUSU5HLlNMSVAiLDQ2OToiQVBQLkFD''@;'; put 'put ''VElWQVRFLk1JQ1JPU09GVCIsNDcwOiJNQUlMLkVESVQuTUFJTEVSIiw0NzE6Ik9OLlNIRUVUIiw0NzI6IlNUQU5EQVJELldJRFRIIiw0NzM6IlNDRU5BUklPLk1FUkdFIiw0NzQ6IlNVTU1BUlkuSU5GTyIsNDc1OiJGSU5ELkZJTEUiLDQ3NjoiQUNUSVZFLkNFTEwuRk9OVCIsNDc3OiJFTkFC''@;'; put 'put ''TEUuVElQV0laQVJEIiw0Nzg6IlZCQS5NQUtFLkFERElOIiw0ODA6IklOU0VSVERBVEFUQUJMRSIsNDgxOiJXT1JLR1JPVVAuT1BUSU9OUyIsNDgyOiJNQUlMLlNFTkQuTUFJTEVSIiw0ODU6IkFVVE9DT1JSRUNUIiw0ODk6IlBPU1QuRE9DVU1FTlQiLDQ5MToiUElDS0xJU1QiLDQ5MzoiVklF''@;'; put 'put ''Vy5TSE9XIiw0OTQ6IlZJRVcuREVGSU5FIiw0OTU6IlZJRVcuREVMRVRFIiw1MDk6IlNIRUVULkJBQ0tHUk9VTkQiLDUxMDoiSU5TRVJULk1BUC5PQkpFQ1QiLDUxMToiT1BUSU9OUy5NRU5PTk8iLDUxNzoiTVNPQ0hFQ0tTIiw1MTg6Ik5PUk1BTCIsNTE5OiJMQVlPVVQiLDUyMDoiUk0uUFJJ''@;'; put 'put ''TlQuQVJFQSIsNTIxOiJDTEVBUi5QUklOVC5BUkVBIiw1MjI6IkFERC5QUklOVC5BUkVBIiw1MjM6Ik1PVkUuQlJLIiw1NDU6IkhJREVDVVJSLk5PVEUiLDU0NjoiSElERUFMTC5OT1RFUyIsNTQ3OiJERUxFVEUuTk9URSIsNTQ4OiJUUkFWRVJTRS5OT1RFUyIsNTQ5OiJBQ1RJVkFURS5OT1RF''@;'; put 'put ''UyIsNjIwOiJQUk9URUNULlJFVklTSU9OUyIsNjIxOiJVTlBST1RFQ1QuUkVWSVNJT05TIiw2NDc6Ik9QVElPTlMuTUUiLDY1MzoiV0VCLlBVQkxJU0giLDY2NzoiTkVXV0VCUVVFUlkiLDY3MzoiUElWT1QuVEFCTEUuQ0hBUlQiLDc1MzoiT1BUSU9OUy5TQVZFIiw3NTU6Ik9QVElPTlMuU1BF''@;'; put 'put ''TEwiLDgwODoiSElERUFMTC5JTktBTk5PVFMifSxSZj17MDoiQ09VTlQiLDE6IklGIiwyOiJJU05BIiwzOiJJU0VSUk9SIiw0OiJTVU0iLDU6IkFWRVJBR0UiLDY6Ik1JTiIsNzoiTUFYIiw4OiJST1ciLDk6IkNPTFVNTiIsMTA6Ik5BIiwxMToiTlBWIiwxMjoiU1RERVYiLDEzOiJET0xMQVIi''@;'; put 'put ''LDE0OiJGSVhFRCIsMTU6IlNJTiIsMTY6IkNPUyIsMTc6IlRBTiIsMTg6IkFUQU4iLDE5OiJQSSIsMjA6IlNRUlQiLDIxOiJFWFAiLDIyOiJMTiIsMjM6IkxPRzEwIiwyNDoiQUJTIiwyNToiSU5UIiwyNjoiU0lHTiIsMjc6IlJPVU5EIiwyODoiTE9PS1VQIiwyOToiSU5ERVgiLDMwOiJSRVBU''@;'; put 'put ''IiwzMToiTUlEIiwzMjoiTEVOIiwzMzoiVkFMVUUiLDM0OiJUUlVFIiwzNToiRkFMU0UiLDM2OiJBTkQiLDM3OiJPUiIsMzg6Ik5PVCIsMzk6Ik1PRCIsNDA6IkRDT1VOVCIsNDE6IkRTVU0iLDQyOiJEQVZFUkFHRSIsNDM6IkRNSU4iLDQ0OiJETUFYIiw0NToiRFNUREVWIiw0NjoiVkFSIiw0''@;'; put 'put ''NzoiRFZBUiIsNDg6IlRFWFQiLDQ5OiJMSU5FU1QiLDUwOiJUUkVORCIsNTE6IkxPR0VTVCIsNTI6IkdST1dUSCIsNTM6IkdPVE8iLDU0OiJIQUxUIiw1NToiUkVUVVJOIiw1NjoiUFYiLDU3OiJGViIsNTg6Ik5QRVIiLDU5OiJQTVQiLDYwOiJSQVRFIiw2MToiTUlSUiIsNjI6IklSUiIsNjM6''@;'; put 'put ''IlJBTkQiLDY0OiJNQVRDSCIsNjU6IkRBVEUiLDY2OiJUSU1FIiw2NzoiREFZIiw2ODoiTU9OVEgiLDY5OiJZRUFSIiw3MDoiV0VFS0RBWSIsNzE6IkhPVVIiLDcyOiJNSU5VVEUiLDczOiJTRUNPTkQiLDc0OiJOT1ciLDc1OiJBUkVBUyIsNzY6IlJPV1MiLDc3OiJDT0xVTU5TIiw3ODoiT0ZG''@;'; put 'put ''U0VUIiw3OToiQUJTUkVGIiw4MDoiUkVMUkVGIiw4MToiQVJHVU1FTlQiLDgyOiJTRUFSQ0giLDgzOiJUUkFOU1BPU0UiLDg0OiJFUlJPUiIsODU6IlNURVAiLDg2OiJUWVBFIiw4NzoiRUNITyIsODg6IlNFVC5OQU1FIiw4OToiQ0FMTEVSIiw5MDoiREVSRUYiLDkxOiJXSU5ET1dTIiw5Mjoi''@;'; put 'put ''U0VSSUVTIiw5MzoiRE9DVU1FTlRTIiw5NDoiQUNUSVZFLkNFTEwiLDk1OiJTRUxFQ1RJT04iLDk2OiJSRVNVTFQiLDk3OiJBVEFOMiIsOTg6IkFTSU4iLDk5OiJBQ09TIiwxMDA6IkNIT09TRSIsMTAxOiJITE9PS1VQIiwxMDI6IlZMT09LVVAiLDEwMzoiTElOS1MiLDEwNDoiSU5QVVQiLDEw''@;'; put 'put ''NToiSVNSRUYiLDEwNjoiR0VULkZPUk1VTEEiLDEwNzoiR0VULk5BTUUiLDEwODoiU0VULlZBTFVFIiwxMDk6IkxPRyIsMTEwOiJFWEVDIiwxMTE6IkNIQVIiLDExMjoiTE9XRVIiLDExMzoiVVBQRVIiLDExNDoiUFJPUEVSIiwxMTU6IkxFRlQiLDExNjoiUklHSFQiLDExNzoiRVhBQ1QiLDEx''@;'; put 'put ''ODoiVFJJTSIsMTE5OiJSRVBMQUNFIiwxMjA6IlNVQlNUSVRVVEUiLDEyMToiQ09ERSIsMTIyOiJOQU1FUyIsMTIzOiJESVJFQ1RPUlkiLDEyNDoiRklORCIsMTI1OiJDRUxMIiwxMjY6IklTRVJSIiwxMjc6IklTVEVYVCIsMTI4OiJJU05VTUJFUiIsMTI5OiJJU0JMQU5LIiwxMzA6IlQiLDEz''@;'; put 'put ''MToiTiIsMTMyOiJGT1BFTiIsMTMzOiJGQ0xPU0UiLDEzNDoiRlNJWkUiLDEzNToiRlJFQURMTiIsMTM2OiJGUkVBRCIsMTM3OiJGV1JJVEVMTiIsMTM4OiJGV1JJVEUiLDEzOToiRlBPUyIsMTQwOiJEQVRFVkFMVUUiLDE0MToiVElNRVZBTFVFIiwxNDI6IlNMTiIsMTQzOiJTWUQiLDE0NDoi''@;'; put 'put ''RERCIiwxNDU6IkdFVC5ERUYiLDE0NjoiUkVGVEVYVCIsMTQ3OiJURVhUUkVGIiwxNDg6IklORElSRUNUIiwxNDk6IlJFR0lTVEVSIiwxNTA6IkNBTEwiLDE1MToiQURELkJBUiIsMTUyOiJBREQuTUVOVSIsMTUzOiJBREQuQ09NTUFORCIsMTU0OiJFTkFCTEUuQ09NTUFORCIsMTU1OiJDSEVD''@;'; put 'put ''Sy5DT01NQU5EIiwxNTY6IlJFTkFNRS5DT01NQU5EIiwxNTc6IlNIT1cuQkFSIiwxNTg6IkRFTEVURS5NRU5VIiwxNTk6IkRFTEVURS5DT01NQU5EIiwxNjA6IkdFVC5DSEFSVC5JVEVNIiwxNjE6IkRJQUxPRy5CT1giLDE2MjoiQ0xFQU4iLDE2MzoiTURFVEVSTSIsMTY0OiJNSU5WRVJTRSIs''@;'; put 'put ''MTY1OiJNTVVMVCIsMTY2OiJGSUxFUyIsMTY3OiJJUE1UIiwxNjg6IlBQTVQiLDE2OToiQ09VTlRBIiwxNzA6IkNBTkNFTC5LRVkiLDE3MToiRk9SIiwxNzI6IldISUxFIiwxNzM6IkJSRUFLIiwxNzQ6Ik5FWFQiLDE3NToiSU5JVElBVEUiLDE3NjoiUkVRVUVTVCIsMTc3OiJQT0tFIiwxNzg6''@;'; put 'put ''IkVYRUNVVEUiLDE3OToiVEVSTUlOQVRFIiwxODA6IlJFU1RBUlQiLDE4MToiSEVMUCIsMTgyOiJHRVQuQkFSIiwxODM6IlBST0RVQ1QiLDE4NDoiRkFDVCIsMTg1OiJHRVQuQ0VMTCIsMTg2OiJHRVQuV09SS1NQQUNFIiwxODc6IkdFVC5XSU5ET1ciLDE4ODoiR0VULkRPQ1VNRU5UIiwxODk6''@;'; put 'put ''IkRQUk9EVUNUIiwxOTA6IklTTk9OVEVYVCIsMTkxOiJHRVQuTk9URSIsMTkyOiJOT1RFIiwxOTM6IlNUREVWUCIsMTk0OiJWQVJQIiwxOTU6IkRTVERFVlAiLDE5NjoiRFZBUlAiLDE5NzoiVFJVTkMiLDE5ODoiSVNMT0dJQ0FMIiwxOTk6IkRDT1VOVEEiLDIwMDoiREVMRVRFLkJBUiIsMjAx''@;'; put 'put ''OiJVTlJFR0lTVEVSIiwyMDQ6IlVTRE9MTEFSIiwyMDU6IkZJTkRCIiwyMDY6IlNFQVJDSEIiLDIwNzoiUkVQTEFDRUIiLDIwODoiTEVGVEIiLDIwOToiUklHSFRCIiwyMTA6Ik1JREIiLDIxMToiTEVOQiIsMjEyOiJST1VORFVQIiwyMTM6IlJPVU5ERE9XTiIsMjE0OiJBU0MiLDIxNToiREJD''@;'; put 'put ''UyIsMjE2OiJSQU5LIiwyMTk6IkFERFJFU1MiLDIyMDoiREFZUzM2MCIsMjIxOiJUT0RBWSIsMjIyOiJWREIiLDIyMzoiRUxTRSIsMjI0OiJFTFNFLklGIiwyMjU6IkVORC5JRiIsMjI2OiJGT1IuQ0VMTCIsMjI3OiJNRURJQU4iLDIyODoiU1VNUFJPRFVDVCIsMjI5OiJTSU5IIiwyMzA6IkNP''@;'; put 'put ''U0giLDIzMToiVEFOSCIsMjMyOiJBU0lOSCIsMjMzOiJBQ09TSCIsMjM0OiJBVEFOSCIsMjM1OiJER0VUIiwyMzY6IkNSRUFURS5PQkpFQ1QiLDIzNzoiVk9MQVRJTEUiLDIzODoiTEFTVC5FUlJPUiIsMjM5OiJDVVNUT00uVU5ETyIsMjQwOiJDVVNUT00uUkVQRUFUIiwyNDE6IkZPUk1VTEEu''@;'; put 'put ''Q09OVkVSVCIsMjQyOiJHRVQuTElOSy5JTkZPIiwyNDM6IlRFWFQuQk9YIiwyNDQ6IklORk8iLDI0NToiR1JPVVAiLDI0NjoiR0VULk9CSkVDVCIsMjQ3OiJEQiIsMjQ4OiJQQVVTRSIsMjUxOiJSRVNVTUUiLDI1MjoiRlJFUVVFTkNZIiwyNTM6IkFERC5UT09MQkFSIiwyNTQ6IkRFTEVURS5U''@;'; put 'put ''T09MQkFSIiwyNTU6IlVzZXIiLDI1NjoiUkVTRVQuVE9PTEJBUiIsMjU3OiJFVkFMVUFURSIsMjU4OiJHRVQuVE9PTEJBUiIsMjU5OiJHRVQuVE9PTCIsMjYwOiJTUEVMTElORy5DSEVDSyIsMjYxOiJFUlJPUi5UWVBFIiwyNjI6IkFQUC5USVRMRSIsMjYzOiJXSU5ET1cuVElUTEUiLDI2NDoi''@;'; put 'put ''U0FWRS5UT09MQkFSIiwyNjU6IkVOQUJMRS5UT09MIiwyNjY6IlBSRVNTLlRPT0wiLDI2NzoiUkVHSVNURVIuSUQiLDI2ODoiR0VULldPUktCT09LIiwyNjk6IkFWRURFViIsMjcwOiJCRVRBRElTVCIsMjcxOiJHQU1NQUxOIiwyNzI6IkJFVEFJTlYiLDI3MzoiQklOT01ESVNUIiwyNzQ6IkNI''@;'; put 'put ''SURJU1QiLDI3NToiQ0hJSU5WIiwyNzY6IkNPTUJJTiIsMjc3OiJDT05GSURFTkNFIiwyNzg6IkNSSVRCSU5PTSIsMjc5OiJFVkVOIiwyODA6IkVYUE9ORElTVCIsMjgxOiJGRElTVCIsMjgyOiJGSU5WIiwyODM6IkZJU0hFUiIsMjg0OiJGSVNIRVJJTlYiLDI4NToiRkxPT1IiLDI4NjoiR0FN''@;'; put 'put ''TUFESVNUIiwyODc6IkdBTU1BSU5WIiwyODg6IkNFSUxJTkciLDI4OToiSFlQR0VPTURJU1QiLDI5MDoiTE9HTk9STURJU1QiLDI5MToiTE9HSU5WIiwyOTI6Ik5FR0JJTk9NRElTVCIsMjkzOiJOT1JNRElTVCIsMjk0OiJOT1JNU0RJU1QiLDI5NToiTk9STUlOViIsMjk2OiJOT1JNU0lOViIs''@;'; put 'put ''Mjk3OiJTVEFOREFSRElaRSIsMjk4OiJPREQiLDI5OToiUEVSTVVUIiwzMDA6IlBPSVNTT04iLDMwMToiVERJU1QiLDMwMjoiV0VJQlVMTCIsMzAzOiJTVU1YTVkyIiwzMDQ6IlNVTVgyTVkyIiwzMDU6IlNVTVgyUFkyIiwzMDY6IkNISVRFU1QiLDMwNzoiQ09SUkVMIiwzMDg6IkNPVkFSIiwz''@;'; put 'put ''MDk6IkZPUkVDQVNUIiwzMTA6IkZURVNUIiwzMTE6IklOVEVSQ0VQVCIsMzEyOiJQRUFSU09OIiwzMTM6IlJTUSIsMzE0OiJTVEVZWCIsMzE1OiJTTE9QRSIsMzE2OiJUVEVTVCIsMzE3OiJQUk9CIiwzMTg6IkRFVlNRIiwzMTk6IkdFT01FQU4iLDMyMDoiSEFSTUVBTiIsMzIxOiJTVU1TUSIs''@;'; put 'put ''MzIyOiJLVVJUIiwzMjM6IlNLRVciLDMyNDoiWlRFU1QiLDMyNToiTEFSR0UiLDMyNjoiU01BTEwiLDMyNzoiUVVBUlRJTEUiLDMyODoiUEVSQ0VOVElMRSIsMzI5OiJQRVJDRU5UUkFOSyIsMzMwOiJNT0RFIiwzMzE6IlRSSU1NRUFOIiwzMzI6IlRJTlYiLDMzNDoiTU9WSUUuQ09NTUFORCIs''@;'; put 'put ''MzM1OiJHRVQuTU9WSUUiLDMzNjoiQ09OQ0FURU5BVEUiLDMzNzoiUE9XRVIiLDMzODoiUElWT1QuQURELkRBVEEiLDMzOToiR0VULlBJVk9ULlRBQkxFIiwzNDA6IkdFVC5QSVZPVC5GSUVMRCIsMzQxOiJHRVQuUElWT1QuSVRFTSIsMzQyOiJSQURJQU5TIiwzNDM6IkRFR1JFRVMiLDM0NDoi''@;'; put 'put ''U1VCVE9UQUwiLDM0NToiU1VNSUYiLDM0NjoiQ09VTlRJRiIsMzQ3OiJDT1VOVEJMQU5LIiwzNDg6IlNDRU5BUklPLkdFVCIsMzQ5OiJPUFRJT05TLkxJU1RTLkdFVCIsMzUwOiJJU1BNVCIsMzUxOiJEQVRFRElGIiwzNTI6IkRBVEVTVFJJTkciLDM1MzoiTlVNQkVSU1RSSU5HIiwzNTQ6IlJP''@;'; put 'put ''TUFOIiwzNTU6Ik9QRU4uRElBTE9HIiwzNTY6IlNBVkUuRElBTE9HIiwzNTc6IlZJRVcuR0VUIiwzNTg6IkdFVFBJVk9UREFUQSIsMzU5OiJIWVBFUkxJTksiLDM2MDoiUEhPTkVUSUMiLDM2MToiQVZFUkFHRUEiLDM2MjoiTUFYQSIsMzYzOiJNSU5BIiwzNjQ6IlNUREVWUEEiLDM2NToiVkFS''@;'; put 'put ''UEEiLDM2NjoiU1RERVZBIiwzNjc6IlZBUkEiLDM2ODoiQkFIVFRFWFQiLDM2OToiVEhBSURBWU9GV0VFSyIsMzcwOiJUSEFJRElHSVQiLDM3MToiVEhBSU1PTlRIT0ZZRUFSIiwzNzI6IlRIQUlOVU1TT1VORCIsMzczOiJUSEFJTlVNU1RSSU5HIiwzNzQ6IlRIQUlTVFJJTkdMRU5HVEgiLDM3''@;'; put 'put ''NToiSVNUSEFJRElHSVQiLDM3NjoiUk9VTkRCQUhURE9XTiIsMzc3OiJST1VOREJBSFRVUCIsMzc4OiJUSEFJWUVBUiIsMzc5OiJSVEQiLDM4MDoiQ1VCRVZBTFVFIiwzODE6IkNVQkVNRU1CRVIiLDM4MjoiQ1VCRU1FTUJFUlBST1BFUlRZIiwzODM6IkNVQkVSQU5LRURNRU1CRVIiLDM4NDoi''@;'; put 'put ''SEVYMkJJTiIsMzg1OiJIRVgyREVDIiwzODY6IkhFWDJPQ1QiLDM4NzoiREVDMkJJTiIsMzg4OiJERUMySEVYIiwzODk6IkRFQzJPQ1QiLDM5MDoiT0NUMkJJTiIsMzkxOiJPQ1QySEVYIiwzOTI6Ik9DVDJERUMiLDM5MzoiQklOMkRFQyIsMzk0OiJCSU4yT0NUIiwzOTU6IkJJTjJIRVgiLDM5''@;'; put 'put ''NjoiSU1TVUIiLDM5NzoiSU1ESVYiLDM5ODoiSU1QT1dFUiIsMzk5OiJJTUFCUyIsNDAwOiJJTVNRUlQiLDQwMToiSU1MTiIsNDAyOiJJTUxPRzIiLDQwMzoiSU1MT0cxMCIsNDA0OiJJTVNJTiIsNDA1OiJJTUNPUyIsNDA2OiJJTUVYUCIsNDA3OiJJTUFSR1VNRU5UIiw0MDg6IklNQ09OSlVH''@;'; put 'put ''QVRFIiw0MDk6IklNQUdJTkFSWSIsNDEwOiJJTVJFQUwiLDQxMToiQ09NUExFWCIsNDEyOiJJTVNVTSIsNDEzOiJJTVBST0RVQ1QiLDQxNDoiU0VSSUVTU1VNIiw0MTU6IkZBQ1RET1VCTEUiLDQxNjoiU1FSVFBJIiw0MTc6IlFVT1RJRU5UIiw0MTg6IkRFTFRBIiw0MTk6IkdFU1RFUCIsNDIw''@;'; put 'put ''OiJJU0VWRU4iLDQyMToiSVNPREQiLDQyMjoiTVJPVU5EIiw0MjM6IkVSRiIsNDI0OiJFUkZDIiw0MjU6IkJFU1NFTEoiLDQyNjoiQkVTU0VMSyIsNDI3OiJCRVNTRUxZIiw0Mjg6IkJFU1NFTEkiLDQyOToiWElSUiIsNDMwOiJYTlBWIiw0MzE6IlBSSUNFTUFUIiw0MzI6IllJRUxETUFUIiw0''@;'; put 'put ''MzM6IklOVFJBVEUiLDQzNDoiUkVDRUlWRUQiLDQzNToiRElTQyIsNDM2OiJQUklDRURJU0MiLDQzNzoiWUlFTERESVNDIiw0Mzg6IlRCSUxMRVEiLDQzOToiVEJJTExQUklDRSIsNDQwOiJUQklMTFlJRUxEIiw0NDE6IlBSSUNFIiw0NDI6IllJRUxEIiw0NDM6IkRPTExBUkRFIiw0NDQ6IkRP''@;'; put 'put ''TExBUkZSIiw0NDU6Ik5PTUlOQUwiLDQ0NjoiRUZGRUNUIiw0NDc6IkNVTVBSSU5DIiw0NDg6IkNVTUlQTVQiLDQ0OToiRURBVEUiLDQ1MDoiRU9NT05USCIsNDUxOiJZRUFSRlJBQyIsNDUyOiJDT1VQREFZQlMiLDQ1MzoiQ09VUERBWVMiLDQ1NDoiQ09VUERBWVNOQyIsNDU1OiJDT1VQTkNE''@;'; put 'put ''Iiw0NTY6IkNPVVBOVU0iLDQ1NzoiQ09VUFBDRCIsNDU4OiJEVVJBVElPTiIsNDU5OiJNRFVSQVRJT04iLDQ2MDoiT0RETFBSSUNFIiw0NjE6Ik9ERExZSUVMRCIsNDYyOiJPRERGUFJJQ0UiLDQ2MzoiT0RERllJRUxEIiw0NjQ6IlJBTkRCRVRXRUVOIiw0NjU6IldFRUtOVU0iLDQ2NjoiQU1P''@;'; put 'put ''UkRFR1JDIiw0Njc6IkFNT1JMSU5DIiw0Njg6IkNPTlZFUlQiLDcyNDoiU0hFRVRKUyIsNDY5OiJBQ0NSSU5UIiw0NzA6IkFDQ1JJTlRNIiw0NzE6IldPUktEQVkiLDQ3MjoiTkVUV09SS0RBWVMiLDQ3MzoiR0NEIiw0NzQ6Ik1VTFRJTk9NSUFMIiw0NzU6IkxDTSIsNDc2OiJGVlNDSEVEVUxF''@;'; put 'put ''Iiw0Nzc6IkNVQkVLUElNRU1CRVIiLDQ3ODoiQ1VCRVNFVCIsNDc5OiJDVUJFU0VUQ09VTlQiLDQ4MDoiSUZFUlJPUiIsNDgxOiJDT1VOVElGUyIsNDgyOiJTVU1JRlMiLDQ4MzoiQVZFUkFHRUlGIiw0ODQ6IkFWRVJBR0VJRlMifSxhdj17MjoxLDM6MSwxMDowLDE1OjEsMTY6MSwxNzoxLDE4''@;'; put 'put ''OjEsMTk6MCwyMDoxLDIxOjEsMjI6MSwyMzoxLDI0OjEsMjU6MSwyNjoxLDI3OjIsMzA6MiwzMTozLDMyOjEsMzM6MSwzNDowLDM1OjAsMzg6MSwzOToyLDQwOjMsNDE6Myw0MjozLDQzOjMsNDQ6Myw0NTozLDQ3OjMsNDg6Miw1MzoxLDYxOjMsNjM6MCw2NTozLDY2OjMsNjc6MSw2ODoxLDY5''@;'; put 'put ''OjEsNzA6MSw3MToxLDcyOjEsNzM6MSw3NDowLDc1OjEsNzY6MSw3NzoxLDc5OjIsODA6Miw4MzoxLDg1OjAsODY6MSw4OTowLDkwOjEsOTQ6MCw5NTowLDk3OjIsOTg6MSw5OToxLDEwMTozLDEwMjozLDEwNToxLDEwNjoxLDEwODoyLDExMToxLDExMjoxLDExMzoxLDExNDoxLDExNzoyLDEx''@;'; put 'put ''ODoxLDExOTo0LDEyMToxLDEyNjoxLDEyNzoxLDEyODoxLDEyOToxLDEzMDoxLDEzMToxLDEzMzoxLDEzNDoxLDEzNToxLDEzNjoyLDEzNzoyLDEzODoyLDE0MDoxLDE0MToxLDE0MjozLDE0Mzo0LDE0NDo0LDE2MToxLDE2MjoxLDE2MzoxLDE2NDoxLDE2NToyLDE3MjoxLDE3NToyLDE3Njoy''@;'; put 'put ''LDE3NzozLDE3ODoyLDE3OToxLDE4NDoxLDE4NjoxLDE4OTozLDE5MDoxLDE5NTozLDE5NjozLDE5NzoxLDE5ODoxLDE5OTozLDIwMToxLDIwNzo0LDIxMDozLDIxMToxLDIxMjoyLDIxMzoyLDIxNDoxLDIxNToxLDIyNTowLDIyOToxLDIzMDoxLDIzMToxLDIzMjoxLDIzMzoxLDIzNDoxLDIz''@;'; put 'put ''NTozLDI0NDoxLDI0Nzo0LDI1MjoyLDI1NzoxLDI2MToxLDI3MToxLDI3Mzo0LDI3NDoyLDI3NToyLDI3NjoyLDI3NzozLDI3ODozLDI3OToxLDI4MDozLDI4MTozLDI4MjozLDI4MzoxLDI4NDoxLDI4NToyLDI4Njo0LDI4NzozLDI4ODoyLDI4OTo0LDI5MDozLDI5MTozLDI5MjozLDI5Mzo0''@;'; put 'put ''LDI5NDoxLDI5NTozLDI5NjoxLDI5NzozLDI5ODoxLDI5OToyLDMwMDozLDMwMTozLDMwMjo0LDMwMzoyLDMwNDoyLDMwNToyLDMwNjoyLDMwNzoyLDMwODoyLDMwOTozLDMxMDoyLDMxMToyLDMxMjoyLDMxMzoyLDMxNDoyLDMxNToyLDMxNjo0LDMyNToyLDMyNjoyLDMyNzoyLDMyODoyLDMz''@;'; put 'put ''MToyLDMzMjoyLDMzNzoyLDM0MjoxLDM0MzoxLDM0NjoyLDM0NzoxLDM1MDo0LDM1MTozLDM1MjoxLDM1MzoyLDM2MDoxLDM2ODoxLDM2OToxLDM3MDoxLDM3MToxLDM3MjoxLDM3MzoxLDM3NDoxLDM3NToxLDM3NjoxLDM3NzoxLDM3ODoxLDM4MjozLDM4NToxLDM5MjoxLDM5MzoxLDM5Njoy''@;'; put 'put ''LDM5NzoyLDM5ODoyLDM5OToxLDQwMDoxLDQwMToxLDQwMjoxLDQwMzoxLDQwNDoxLDQwNToxLDQwNjoxLDQwNzoxLDQwODoxLDQwOToxLDQxMDoxLDQxNDo0LDQxNToxLDQxNjoxLDQxNzoyLDQyMDoxLDQyMToxLDQyMjoyLDQyNDoxLDQyNToyLDQyNjoyLDQyNzoyLDQyODoyLDQzMDozLDQz''@;'; put 'put ''ODozLDQzOTozLDQ0MDozLDQ0MzoyLDQ0NDoyLDQ0NToyLDQ0NjoyLDQ0Nzo2LDQ0ODo2LDQ0OToyLDQ1MDoyLDQ2NDoyLDQ2ODozLDQ3NjoyLDQ3OToxLDQ4MDoyLDY1NTM1OjB9O2Z1bmN0aW9uIE5mKGUpe3JldHVybiJvZjoiPT1lLnNsaWNlKDAsMykmJihlPWUuc2xpY2UoMykpLDYxPT1l''@;'; put 'put ''LmNoYXJDb2RlQXQoMCkmJjYxPT0oZT1lLnNsaWNlKDEpKS5jaGFyQ29kZUF0KDApJiYoZT1lLnNsaWNlKDEpKSwoZT0oZT0oZT1lLnJlcGxhY2UoL0NPTVwuTUlDUk9TT0ZUXC4vZywiIikpLnJlcGxhY2UoL1xbKCg/OlwuW0EtWl0rWzAtOV0rKSg/OjpcLltBLVpdK1swLTldKyk/KVxdL2cs''@;'; put 'put ''ZnVuY3Rpb24odCxyKXtyZXR1cm4gci5yZXBsYWNlKC9cLi9nLCIiKX0pKS5yZXBsYWNlKC9cWy4oI1tBLVpdKls/IV0pXF0vZywiJDEiKSkucmVwbGFjZSgvWzt+XS9nLCIsIikucmVwbGFjZSgvXHwvZywiOyIpfWZ1bmN0aW9uIGJuKGUpe3ZhciB0PWUuc3BsaXQoIjoiKTtyZXR1cm5bdFsw''@;'; put 'put ''XS5zcGxpdCgiLiIpWzBdLHRbMF0uc3BsaXQoIi4iKVsxXSsodC5sZW5ndGg+MT8iOiIrKHRbMV0uc3BsaXQoIi4iKVsxXXx8dFsxXS5zcGxpdCgiLiIpWzBdKToiIildfXZhciBWYT17fSxoYT17fTtmdW5jdGlvbiBZdChlLHQpe2lmKGUpe3ZhciByPVsuNywuNywuNzUsLjc1LC4zLC4zXTsi''@;'; put 'put ''eGxtbCI9PXQmJihyPVsxLDEsMSwxLC41LC41XSksbnVsbD09ZS5sZWZ0JiYoZS5sZWZ0PXJbMF0pLG51bGw9PWUucmlnaHQmJihlLnJpZ2h0PXJbMV0pLG51bGw9PWUudG9wJiYoZS50b3A9clsyXSksbnVsbD09ZS5ib3R0b20mJihlLmJvdHRvbT1yWzNdKSxudWxsPT1lLmhlYWRlciYmKGUu''@;'; put 'put ''aGVhZGVyPXJbNF0pLG51bGw9PWUuZm9vdGVyJiYoZS5mb290ZXI9cls1XSl9fWZ1bmN0aW9uIGJmKGUsdCxyLGEsbixpKXt0cnl7YS5jZWxsTkYmJihlLno9cGVbdF0pfWNhdGNoKGYpe2lmKGEuV1RGKXRocm93IGZ9aWYoInoiIT09ZS50fHxhLmNlbGxTdHlsZXMpe2lmKCJkIj09PWUudCYm''@;'; put 'put ''InN0cmluZyI9PXR5cGVvZiBlLnYmJihlLnY9WGUoZS52KSksKCFhfHwhMSE9PWEuY2VsbFRleHQpJiYieiIhPT1lLnQpdHJ5e2lmKG51bGw9PXBlW3RdJiZldChhb1t0XXx8IkdlbmVyYWwiLHQpLCJlIj09PWUudCllLnc9ZS53fHx4dFtlLnZdO2Vsc2UgaWYoMD09PXQpaWYoIm4iPT09ZS50''@;'; put 'put ''KWUudz0oMHxlLnYpPT09ZS52P2Uudi50b1N0cmluZygxMCk6a2EoZS52KTtlbHNlIGlmKCJkIj09PWUudCl7dmFyIHM9aXIoZS52KTtlLnc9KDB8cyk9PT1zP3MudG9TdHJpbmcoMTApOmthKHMpfWVsc2V7aWYodm9pZCAwPT09ZS52KXJldHVybiIiO2Uudz1OdChlLnYsaGEpfWVsc2UgZS53''@;'; put 'put ''PVJyKHQsImQiPT09ZS50P2lyKGUudik6ZS52LGhhKX1jYXRjaChmKXtpZihhLldURil0aHJvdyBmfWlmKGEuY2VsbFN0eWxlcyYmbnVsbCE9cil0cnl7ZS5zPWkuRmlsbHNbcl0sZS5zLmZnQ29sb3ImJmUucy5mZ0NvbG9yLnRoZW1lJiYhZS5zLmZnQ29sb3IucmdiJiYoZS5zLmZnQ29sb3Iu''@;'; put 'put ''cmdiPVQwKG4udGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbZS5zLmZnQ29sb3IudGhlbWVdLnJnYixlLnMuZmdDb2xvci50aW50fHwwKSxhLldURiYmKGUucy5mZ0NvbG9yLnJhd19yZ2I9bi50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtlLnMuZmdDb2xvci50aGVtZV0ucmdiKSksZS5zLmJnQ29s''@;'; put 'put ''b3ImJmUucy5iZ0NvbG9yLnRoZW1lJiYoZS5zLmJnQ29sb3IucmdiPVQwKG4udGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbZS5zLmJnQ29sb3IudGhlbWVdLnJnYixlLnMuYmdDb2xvci50aW50fHwwKSxhLldURiYmKGUucy5iZ0NvbG9yLnJhd19yZ2I9bi50aGVtZUVsZW1lbnRzLmNsclNjaGVt''@;'; put 'put ''ZVtlLnMuYmdDb2xvci50aGVtZV0ucmdiKSl9Y2F0Y2goZil7aWYoYS5XVEYmJmkuRmlsbHMpdGhyb3cgZn19fXZhciBzdj0vPCg/Olx3Oik/bWVyZ2VDZWxsIHJlZj0iW0EtWjAtOTpdKyJccypbXC9dPz4vZyxmdj0vPCg/Olx3KzopP3NoZWV0RGF0YVtePl0qPihbXHNcU10qKTxcLyg/Olx3''@;'; put 'put ''KzopP3NoZWV0RGF0YT4vLGN2PS88KD86XHc6KT9oeXBlcmxpbmsgW14+XSo+L2dtLG92PS8iKFx3KjpcdyopIi8sbHY9LzwoPzpcdzopP2NvbFxiW14+XSpbXC9dPz4vZyx1dj0vPCg/Olx3Oik/YXV0b0ZpbHRlcltePl0qKFtcL118PihbXHNcU10qKTxcLyg/Olx3Oik/YXV0b0ZpbHRlcik+''@;'; put 'put ''L2csaHY9LzwoPzpcdzopP3BhZ2VNYXJnaW5zW14+XSpcLz4vZyxQZj0vPCg/Olx3Oik/c2hlZXRQclxiKD86W14+YS16XVtePl0qKT9cLz4vLHh2PS88KD86XHc6KT9zaGVldFByW14+XSooPzpbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP3NoZWV0UHIpPi8sZHY9LzwoPzpcdzopP3NoZWV0''@;'; put 'put ''Vmlld3NbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/c2hlZXRWaWV3cyk+LztmdW5jdGlvbiBMbihlLHQscixhKXt2YXIgbj1tZShlKTtyLlNoZWV0c1thXXx8KHIuU2hlZXRzW2FdPXt9KSxuLmNvZGVOYW1lJiYoci5TaGVldHNbYV0uQ29kZU5hbWU9SWUoQmUobi5jb2RlTmFt''@;'; put 'put ''ZSkpKX12YXIgRHY9LzwoPzpcdzopP3NoZWV0Vmlldyg/OltePmEtel1bXj5dKik/XC8/Pi8sTnY9ZnVuY3Rpb24oKXt2YXIgZT0vPCg/Olx3KzopP2NbIFwvPl0vLHQ9LzxcLyg/Olx3KzopP3Jvdz4vLHI9L3I9WyInXShbXiInXSopWyInXS8sYT0vPCg/Olx3KzopP2lzPihbXFNcc10qPyk8''@;'; put 'put ''XC8oPzpcdys6KT9pcz4vLG49L3JlZj1bIiddKFteIiddKilbIiddLyxpPUZhKCJ2Iikscz1GYSgiZiIpO3JldHVybiBmdW5jdGlvbihjLG8sbCxoLHgsZCl7Zm9yKHZhciBJLHksVixYLHJlLHY9MCx1PSIiLHA9W10saz1bXSxUPTAsZz0wLE49MCxNPSIiLFA9MCxSPTAsYj0wLGVlPTAsbGU9''@;'; put 'put ''QXJyYXkuaXNBcnJheShkLkNlbGxYZiksZGU9W10sdWU9W10sRmU9QXJyYXkuaXNBcnJheShvKSxjZT1bXSx4ZT17fSxLPSExLEM9ISFsLnNoZWV0U3R1YnMsVT1jLnNwbGl0KHQpLE89MCxEPVUubGVuZ3RoO08hPUQ7KytPKXt2YXIgaj0odT1VW09dLnRyaW0oKSkubGVuZ3RoO2lmKDAhPT1q''@;'; put 'put ''KXt2YXIgc2U9MDtlOmZvcih2PTA7djxqOysrdilzd2l0Y2godVt2XSl7Y2FzZSI+IjppZigiLyIhPXVbdi0xXSl7Kyt2O2JyZWFrIGV9aWYobCYmbC5jZWxsU3R5bGVzKXtpZihQPW51bGwhPSh5PW1lKHUuc2xpY2Uoc2UsdiksITApKS5yP3BhcnNlSW50KHkuciwxMCk6UCsxLFI9LTEsbC5z''@;'; put 'put ''aGVldFJvd3MmJmwuc2hlZXRSb3dzPFApY29udGludWU7eGU9e30sSz0hMSx5Lmh0JiYoSz0hMCx4ZS5ocHQ9cGFyc2VGbG9hdCh5Lmh0KSx4ZS5ocHg9b2EoeGUuaHB0KSksIjEiPT15LmhpZGRlbiYmKEs9ITAseGUuaGlkZGVuPSEwKSxudWxsIT15Lm91dGxpbmVMZXZlbCYmKEs9ITAseGUu''@;'; put 'put ''bGV2ZWw9K3kub3V0bGluZUxldmVsKSxLJiYoY2VbUC0xXT14ZSl9YnJlYWs7Y2FzZSI8IjpzZT12fWlmKHNlPj12KWJyZWFrO2lmKFA9bnVsbCE9KHk9bWUodS5zbGljZShzZSx2KSwhMCkpLnI/cGFyc2VJbnQoeS5yLDEwKTpQKzEsUj0tMSwhKGwuc2hlZXRSb3dzJiZsLnNoZWV0Um93czxQ''@;'; put 'put ''KSl7aC5zLnI+UC0xJiYoaC5zLnI9UC0xKSxoLmUucjxQLTEmJihoLmUucj1QLTEpLGwmJmwuY2VsbFN0eWxlcyYmKHhlPXt9LEs9ITEseS5odCYmKEs9ITAseGUuaHB0PXBhcnNlRmxvYXQoeS5odCkseGUuaHB4PW9hKHhlLmhwdCkpLCIxIj09eS5oaWRkZW4mJihLPSEwLHhlLmhpZGRlbj0h''@;'; put 'put ''MCksbnVsbCE9eS5vdXRsaW5lTGV2ZWwmJihLPSEwLHhlLmxldmVsPSt5Lm91dGxpbmVMZXZlbCksSyYmKGNlW1AtMV09eGUpKSxwPXUuc2xpY2Uodikuc3BsaXQoZSk7Zm9yKHZhciBaPTA7WiE9cC5sZW5ndGgmJiI8Ij09cFtaXS50cmltKCkuY2hhckF0KDApOysrWik7Zm9yKHA9cC5zbGlj''@;'; put 'put ''ZShaKSx2PTA7diE9cC5sZW5ndGg7Kyt2KWlmKDAhPT0odT1wW3ZdLnRyaW0oKSkubGVuZ3RoKXtpZihrPXUubWF0Y2gociksVD12LGc9MCxOPTAsdT0iPGMgIisoIjwiPT11LnNsaWNlKDAsMSk/Ij4iOiIiKSt1LG51bGwhPWsmJjI9PT1rLmxlbmd0aCl7Zm9yKFQ9MCxNPWtbMV0sZz0wO2ch''@;'; put 'put ''PU0ubGVuZ3RoJiYhKChOPU0uY2hhckNvZGVBdChnKS02NCk8MXx8Tj4yNik7KytnKVQ9MjYqVCtOO1I9LS1UfWVsc2UrK1I7Zm9yKGc9MDtnIT11Lmxlbmd0aCYmNjIhPT11LmNoYXJDb2RlQXQoZyk7KytnKTtpZigrK2csKHk9bWUodS5zbGljZSgwLGcpLCEwKSkucnx8KHkucj1nZSh7cjpQ''@;'; put 'put ''LTEsYzpSfSkpLEk9e3Q6IiJ9LG51bGwhPShrPShNPXUuc2xpY2UoZykpLm1hdGNoKGkpKSYmIiIhPT1rWzFdJiYoSS52PUllKGtbMV0pKSxsLmNlbGxGb3JtdWxhKXtpZihudWxsIT0oaz1NLm1hdGNoKHMpKSYmIiIhPT1rWzFdKXtpZihJLmY9SWUoQmUoa1sxXSkpLnJlcGxhY2UoL1xyXG4v''@;'; put 'put ''ZywiXG4iKSxsLnhsZm58fChJLmY9RWYoSS5mKSksa1swXS5pbmRleE9mKCd0PSJhcnJheSInKT4tMSlJLkY9KE0ubWF0Y2gobil8fFtdKVsxXSxJLkYuaW5kZXhPZigiOiIpPi0xJiZkZS5wdXNoKFtEZShJLkYpLEkuRl0pO2Vsc2UgaWYoa1swXS5pbmRleE9mKCd0PSJzaGFyZWQiJyk+LTEp''@;'; put 'put ''e1g9bWUoa1swXSk7dmFyIFE9SWUoQmUoa1sxXSkpO2wueGxmbnx8KFE9RWYoUSkpLHVlW3BhcnNlSW50KFguc2ksMTApXT1bWCxRLHkucl19fWVsc2Uoaz1NLm1hdGNoKC88ZltePl0qXC8+LykpJiZ1ZVsoWD1tZShrWzBdKSkuc2ldJiYoSS5mPUl4KHVlW1guc2ldWzFdLHVlW1guc2ldWzJd''@;'; put 'put ''LHkucikpO3ZhciBZPUdlKHkucik7Zm9yKGc9MDtnPGRlLmxlbmd0aDsrK2cpWS5yPj1kZVtnXVswXS5zLnImJlkucjw9ZGVbZ11bMF0uZS5yJiZZLmM+PWRlW2ddWzBdLnMuYyYmWS5jPD1kZVtnXVswXS5lLmMmJihJLkY9ZGVbZ11bMV0pfWlmKG51bGw9PXkudCYmdm9pZCAwPT09SS52KWlm''@;'; put 'put ''KEkuZnx8SS5GKUkudj0wLEkudD0ibiI7ZWxzZXtpZighQyljb250aW51ZTtJLnQ9InoifWVsc2UgSS50PXkudHx8Im4iO3N3aXRjaChoLnMuYz5SJiYoaC5zLmM9UiksaC5lLmM8UiYmKGguZS5jPVIpLEkudCl7Y2FzZSJuIjppZigiIj09SS52fHxudWxsPT1JLnYpe2lmKCFDKWNvbnRpbnVl''@;'; put 'put ''O0kudD0ieiJ9ZWxzZSBJLnY9cGFyc2VGbG9hdChJLnYpO2JyZWFrO2Nhc2UicyI6aWYodHlwZW9mIEkudj4idSIpe2lmKCFDKWNvbnRpbnVlO0kudD0ieiJ9ZWxzZSBWPVZhW3BhcnNlSW50KEkudiwxMCldLEkudj1WLnQsSS5yPVYucixsLmNlbGxIVE1MJiYoSS5oPVYuaCk7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJzdHIiOkkudD0icyIsSS52PW51bGwhPUkudj9CZShJLnYpOiIiLGwuY2VsbEhUTUwmJihJLmg9JDAoSS52KSk7YnJlYWs7Y2FzZSJpbmxpbmVTdHIiOms9TS5tYXRjaChhKSxJLnQ9InMiLG51bGwhPWsmJihWPVNuKGtbMV0pKT8oSS52PVYudCxsLmNlbGxIVE1MJiYoSS5oPVYuaCkpOkku''@;'; put 'put ''dj0iIjticmVhaztjYXNlImIiOkkudj1XZShJLnYpO2JyZWFrO2Nhc2UiZCI6bC5jZWxsRGF0ZXM/SS52PVhlKEkudiwxKTooSS52PWlyKFhlKEkudiwxKSksSS50PSJuIik7YnJlYWs7Y2FzZSJlIjooIWx8fCExIT09bC5jZWxsVGV4dCkmJihJLnc9SS52KSxJLnY9ZHNbSS52XX1pZihiPWVl''@;'; put 'put ''PTAscmU9bnVsbCxsZSYmdm9pZCAwIT09eS5zJiZudWxsIT0ocmU9ZC5DZWxsWGZbeS5zXSkmJihudWxsIT1yZS5udW1GbXRJZCYmKGI9cmUubnVtRm10SWQpLGwuY2VsbFN0eWxlcyYmbnVsbCE9cmUuZmlsbElkJiYoZWU9cmUuZmlsbElkKSksYmYoSSxiLGVlLGwseCxkKSxsLmNlbGxEYXRl''@;'; put 'put ''cyYmbGUmJiJuIj09SS50JiZidChwZVtiXSkmJihJLnQ9ImQiLEkudj1vMChJLnYpKSx5LmNtJiZsLnhsbWV0YSl7dmFyIEVlPShsLnhsbWV0YS5DZWxsfHxbXSlbK3kuY20tMV07RWUmJiJYTERBUFIiPT1FZS50eXBlJiYoSS5EPSEwKX1pZihGZSl7dmFyIEE9R2UoeS5yKTtvW0Eucl18fChv''@;'; put 'put ''W0Eucl09W10pLG9bQS5yXVtBLmNdPUl9ZWxzZSBvW3kucl09SX19fX1jZS5sZW5ndGg+MCYmKG9bIiFyb3dzIl09Y2UpfX0oKSxNdj1XdDtmdW5jdGlvbiBCZihlKXtyZXR1cm5bTXQoZSksZ3IoZSksIm4iXX12YXIgazI9V3QsTWY9WyJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJib3R0b20iLCJo''@;'; put 'put ''ZWFkZXIiLCJmb290ZXIiXTt2YXIgQm49W1siYWxsb3dSZWZyZXNoUXVlcnkiLCExLCJib29sIl0sWyJhdXRvQ29tcHJlc3NQaWN0dXJlcyIsITAsImJvb2wiXSxbImJhY2t1cEZpbGUiLCExLCJib29sIl0sWyJjaGVja0NvbXBhdGliaWxpdHkiLCExLCJib29sIl0sWyJDb2RlTmFtZSIsIiJd''@;'; put 'put ''LFsiZGF0ZTE5MDQiLCExLCJib29sIl0sWyJkZWZhdWx0VGhlbWVWZXJzaW9uIiwwLCJpbnQiXSxbImZpbHRlclByaXZhY3kiLCExLCJib29sIl0sWyJoaWRlUGl2b3RGaWVsZExpc3QiLCExLCJib29sIl0sWyJwcm9tcHRlZFNvbHV0aW9ucyIsITEsImJvb2wiXSxbInB1Ymxpc2hJdGVtcyIs''@;'; put 'put ''ITEsImJvb2wiXSxbInJlZnJlc2hBbGxDb25uZWN0aW9ucyIsITEsImJvb2wiXSxbInNhdmVFeHRlcm5hbExpbmtWYWx1ZXMiLCEwLCJib29sIl0sWyJzaG93Qm9yZGVyVW5zZWxlY3RlZFRhYmxlcyIsITAsImJvb2wiXSxbInNob3dJbmtBbm5vdGF0aW9uIiwhMCwiYm9vbCJdLFsic2hvd09i''@;'; put 'put ''amVjdHMiLCJhbGwiXSxbInNob3dQaXZvdENoYXJ0RmlsdGVyIiwhMSwiYm9vbCJdLFsidXBkYXRlTGlua3MiLCJ1c2VyU2V0Il1dLGFwPVtbImFjdGl2ZVRhYiIsMCwiaW50Il0sWyJhdXRvRmlsdGVyRGF0ZUdyb3VwaW5nIiwhMCwiYm9vbCJdLFsiZmlyc3RTaGVldCIsMCwiaW50Il0sWyJt''@;'; put 'put ''aW5pbWl6ZWQiLCExLCJib29sIl0sWyJzaG93SG9yaXpvbnRhbFNjcm9sbCIsITAsImJvb2wiXSxbInNob3dTaGVldFRhYnMiLCEwLCJib29sIl0sWyJzaG93VmVydGljYWxTY3JvbGwiLCEwLCJib29sIl0sWyJ0YWJSYXRpbyIsNjAwLCJpbnQiXSxbInZpc2liaWxpdHkiLCJ2aXNpYmxlIl1d''@;'; put 'put ''LG5wPVtdLGlwPVtbImNhbGNDb21wbGV0ZWQiLCJ0cnVlIl0sWyJjYWxjTW9kZSIsImF1dG8iXSxbImNhbGNPblNhdmUiLCJ0cnVlIl0sWyJjb25jdXJyZW50Q2FsYyIsInRydWUiXSxbImZ1bGxDYWxjT25Mb2FkIiwiZmFsc2UiXSxbImZ1bGxQcmVjaXNpb24iLCJ0cnVlIl0sWyJpdGVyYXRl''@;'; put 'put ''IiwiZmFsc2UiXSxbIml0ZXJhdGVDb3VudCIsIjEwMCJdLFsiaXRlcmF0ZURlbHRhIiwiMC4wMDEiXSxbInJlZk1vZGUiLCJBMSJdXTtmdW5jdGlvbiBVZihlLHQpe2Zvcih2YXIgcj0wO3IhPWUubGVuZ3RoOysrcilmb3IodmFyIGE9ZVtyXSxuPTA7biE9dC5sZW5ndGg7KytuKXt2YXIgaT10''@;'; put 'put ''W25dO2lmKG51bGw9PWFbaVswXV0pYVtpWzBdXT1pWzFdO2Vsc2Ugc3dpdGNoKGlbMl0pe2Nhc2UiYm9vbCI6InN0cmluZyI9PXR5cGVvZiBhW2lbMF1dJiYoYVtpWzBdXT1XZShhW2lbMF1dKSk7YnJlYWs7Y2FzZSJpbnQiOiJzdHJpbmciPT10eXBlb2YgYVtpWzBdXSYmKGFbaVswXV09cGFy''@;'; put 'put ''c2VJbnQoYVtpWzBdXSwxMCkpfX19ZnVuY3Rpb24gV2YoZSx0KXtmb3IodmFyIHI9MDtyIT10Lmxlbmd0aDsrK3Ipe3ZhciBhPXRbcl07aWYobnVsbD09ZVthWzBdXSllW2FbMF1dPWFbMV07ZWxzZSBzd2l0Y2goYVsyXSl7Y2FzZSJib29sIjoic3RyaW5nIj09dHlwZW9mIGVbYVswXV0mJihl''@;'; put 'put ''W2FbMF1dPVdlKGVbYVswXV0pKTticmVhaztjYXNlImludCI6InN0cmluZyI9PXR5cGVvZiBlW2FbMF1dJiYoZVthWzBdXT1wYXJzZUludChlW2FbMF1dLDEwKSl9fX1mdW5jdGlvbiBIZihlKXtXZihlLldCUHJvcHMsQm4pLFdmKGUuQ2FsY1ByLGlwKSxVZihlLldCVmlldyxhcCksVWYoZS5T''@;'; put 'put ''aGVldHMsbnApLGhhLmRhdGUxOTA0PVdlKGUuV0JQcm9wcy5kYXRlMTkwNCl9dmFyIGZwPSJdWyo/L1xcIi5zcGxpdCgiIik7dmFyIG9wPS88XHcrOndvcmtib29rLztmdW5jdGlvbiB2cChlLHQpe3ZhciByPXt9O3JldHVybiBlLnJlYWRfc2hpZnQoNCksci5BcmNoSUQ9ZS5yZWFkX3NoaWZ0''@;'; put 'put ''KDQpLGUubCs9dC04LHJ9ZnVuY3Rpb24gU3AoZSx0LHIsYSxuLGkscyxmKXtyZXR1cm4iLmJpbiI9PT10LnNsaWNlKC00KT9mdW5jdGlvbiBNMihlLHQscixhLG4saSxzKXtpZighZSlyZXR1cm4gZTt2YXIgZj10fHx7fTthfHwoYT17IiFpZCI6e319KTt2YXIgbyx2LHUscCxrLFQsZyxOLE0s''@;'; put 'put ''SSxjPWYuZGVuc2U/W106e30sbD17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fSxoPVtdLHg9ITEsZD0hMSx5PVtdO2YuYmlmZj0xMixmWyIhcm93Il09MDt2YXIgUD0wLFI9ITEsVj1bXSxYPXt9LGI9Zi5zdXBib29rc3x8bi5zdXBib29rc3x8W1tdXTtpZihiLnNoYXJlZGY9WCxiLmFy''@;'; put 'put ''cmF5Zj1WLGIuU2hlZXROYW1lcz1uLlNoZWV0TmFtZXN8fG4uU2hlZXRzLm1hcChmdW5jdGlvbih4ZSl7cmV0dXJuIHhlLm5hbWV9KSwhZi5zdXBib29rcyYmKGYuc3VwYm9va3M9YixuLk5hbWVzKSlmb3IodmFyIGVlPTA7ZWU8bi5OYW1lcy5sZW5ndGg7KytlZSliWzBdW2VlKzFdPW4uTmFt''@;'; put 'put ''ZXNbZWVdO3ZhciB1ZSxGZSxsZT1bXSxyZT1bXSxkZT0hMTtpZigkYVsxNl09e246IkJydFNob3J0UmVhbCIsZjpCZn0saHQoZSxmdW5jdGlvbihLLEMsVSl7aWYoIWQpc3dpdGNoKFUpe2Nhc2UgMTQ4Om89SzticmVhaztjYXNlIDA6dj1LLGYuc2hlZXRSb3dzJiZmLnNoZWV0Um93czw9di5y''@;'; put 'put ''JiYoZD0hMCksTT1LZShrPXYuciksZlsiIXJvdyJdPXYuciwoSy5oaWRkZW58fEsuaHB0fHxudWxsIT1LLmxldmVsKSYmKEsuaHB0JiYoSy5ocHg9b2EoSy5ocHQpKSxyZVtLLnJdPUspO2JyZWFrO2Nhc2UgMjpjYXNlIDM6Y2FzZSA0OmNhc2UgNTpjYXNlIDY6Y2FzZSA3OmNhc2UgODpjYXNl''@;'; put 'put ''IDk6Y2FzZSAxMDpjYXNlIDExOmNhc2UgMTM6Y2FzZSAxNDpjYXNlIDE1OmNhc2UgMTY6Y2FzZSAxNzpjYXNlIDE4OmNhc2UgNjI6c3dpdGNoKHU9e3Q6S1syXX0sS1syXSl7Y2FzZSJuIjp1LnY9S1sxXTticmVhaztjYXNlInMiOnUudj0oTj1WYVtLWzFdXSkudCx1LnI9Ti5yO2JyZWFrO2Nh''@;'; put 'put ''c2UiYiI6dS52PSEhS1sxXTticmVhaztjYXNlImUiOnUudj1LWzFdLCExIT09Zi5jZWxsVGV4dCYmKHUudz14dFt1LnZdKTticmVhaztjYXNlInN0ciI6dS50PSJzIix1LnY9S1sxXTticmVhaztjYXNlImlzIjp1LnQ9InMiLHUudj1LWzFdLnR9aWYoKHA9cy5DZWxsWGZbS1swXS5pU3R5bGVS''@;'; put 'put ''ZWZdKSYmYmYodSxwLm51bUZtdElkLG51bGwsZixpLHMpLFQ9LTE9PUtbMF0uYz9UKzE6S1swXS5jLGYuZGVuc2U/KGNba118fChjW2tdPVtdKSxjW2tdW1RdPXUpOmNbSGUoVCkrTV09dSxmLmNlbGxGb3JtdWxhKXtmb3IoUj0hMSxQPTA7UDxWLmxlbmd0aDsrK1Ape3ZhciBPPVZbUF07di5y''@;'; put 'put ''Pj1PWzBdLnMuciYmdi5yPD1PWzBdLmUuciYmVD49T1swXS5zLmMmJlQ8PU9bMF0uZS5jJiYodS5GPXdlKE9bMF0pLFI9ITApfSFSJiZLLmxlbmd0aD4zJiYodS5mPUtbM10pfWlmKGwucy5yPnYuciYmKGwucy5yPXYuciksbC5zLmM+VCYmKGwucy5jPVQpLGwuZS5yPHYuciYmKGwuZS5yPXYu''@;'; put 'put ''ciksbC5lLmM8VCYmKGwuZS5jPVQpLGYuY2VsbERhdGVzJiZwJiYibiI9PXUudCYmYnQocGVbcC5udW1GbXRJZF0pKXt2YXIgRD1rdCh1LnYpO0QmJih1LnQ9ImQiLHUudj1uZXcgRGF0ZShELnksRC5tLTEsRC5kLEQuSCxELk0sRC5TLEQudSkpfXVlJiYoIlhMREFQUiI9PXVlLnR5cGUmJih1''@;'; put 'put ''LkQ9ITApLHVlPXZvaWQgMCksRmUmJihGZT12b2lkIDApO2JyZWFrO2Nhc2UgMTpjYXNlIDEyOmlmKCFmLnNoZWV0U3R1YnN8fHgpYnJlYWs7dT17dDoieiIsdjp2b2lkIDB9LFQ9LTE9PUtbMF0uYz9UKzE6S1swXS5jLGYuZGVuc2U/KGNba118fChjW2tdPVtdKSxjW2tdW1RdPXUpOmNbSGUo''@;'; put 'put ''VCkrTV09dSxsLnMucj52LnImJihsLnMucj12LnIpLGwucy5jPlQmJihsLnMuYz1UKSxsLmUucjx2LnImJihsLmUucj12LnIpLGwuZS5jPFQmJihsLmUuYz1UKSx1ZSYmKCJYTERBUFIiPT11ZS50eXBlJiYodS5EPSEwKSx1ZT12b2lkIDApLEZlJiYoRmU9dm9pZCAwKTticmVhaztjYXNlIDE3''@;'; put 'put ''Njp5LnB1c2goSyk7YnJlYWs7Y2FzZSA0OTp1ZT0oKGYueGxtZXRhfHx7fSkuQ2VsbHx8W10pW0stMV07YnJlYWs7Y2FzZSA0OTQ6dmFyIGo9YVsiIWlkIl1bSy5yZWxJZF07Zm9yKGo/KEsuVGFyZ2V0PWouVGFyZ2V0LEsubG9jJiYoSy5UYXJnZXQrPSIjIitLLmxvYyksSy5SZWw9aik6IiI9''@;'; put 'put ''PUsucmVsSWQmJihLLlRhcmdldD0iIyIrSy5sb2MpLGs9Sy5yZngucy5yO2s8PUsucmZ4LmUucjsrK2spZm9yKFQ9Sy5yZngucy5jO1Q8PUsucmZ4LmUuYzsrK1QpZi5kZW5zZT8oY1trXXx8KGNba109W10pLGNba11bVF18fChjW2tdW1RdPXt0OiJ6Iix2OnZvaWQgMH0pLGNba11bVF0ubD1L''@;'; put 'put ''KTooZz1nZSh7YzpULHI6a30pLGNbZ118fChjW2ddPXt0OiJ6Iix2OnZvaWQgMH0pLGNbZ10ubD1LKTticmVhaztjYXNlIDQyNjppZighZi5jZWxsRm9ybXVsYSlicmVhaztWLnB1c2goSyksKEk9Zi5kZW5zZT9jW2tdW1RdOmNbSGUoVCkrTV0pLmY9a3IoS1sxXSwwLHtyOnYucixjOlR9LGIs''@;'; put 'put ''ZiksSS5GPXdlKEtbMF0pO2JyZWFrO2Nhc2UgNDI3OmlmKCFmLmNlbGxGb3JtdWxhKWJyZWFrO1hbZ2UoS1swXS5zKV09S1sxXSwoST1mLmRlbnNlP2Nba11bVF06Y1tIZShUKStNXSkuZj1rcihLWzFdLDAse3I6di5yLGM6VH0sYixmKTticmVhaztjYXNlIDYwOmlmKCFmLmNlbGxTdHlsZXMp''@;'; put 'put ''YnJlYWs7Zm9yKDtLLmU+PUsuczspbGVbSy5lLS1dPXt3aWR0aDpLLncvMjU2LGhpZGRlbjohISgxJksuZmxhZ3MpLGxldmVsOksubGV2ZWx9LGRlfHwoZGU9ITAsQW4oSy53LzI1NikpLEt0KGxlW0suZSsxXSk7YnJlYWs7Y2FzZSAxNjE6Y1siIWF1dG9maWx0ZXIiXT17cmVmOndlKEspfTti''@;'; put 'put ''cmVhaztjYXNlIDQ3NjpjWyIhbWFyZ2lucyJdPUs7YnJlYWs7Y2FzZSAxNDc6bi5TaGVldHNbcl18fChuLlNoZWV0c1tyXT17fSksSy5uYW1lJiYobi5TaGVldHNbcl0uQ29kZU5hbWU9Sy5uYW1lKSwoSy5hYm92ZXx8Sy5sZWZ0KSYmKGNbIiFvdXRsaW5lIl09e2Fib3ZlOksuYWJvdmUsbGVm''@;'; put 'put ''dDpLLmxlZnR9KTticmVhaztjYXNlIDEzNzpuLlZpZXdzfHwobi5WaWV3cz1be31dKSxuLlZpZXdzWzBdfHwobi5WaWV3c1swXT17fSksSy5SVEwmJihuLlZpZXdzWzBdLlJUTD0hMCk7YnJlYWs7Y2FzZSA0ODU6Y2FzZSA2NDpjYXNlIDEwNTM6Y2FzZSAxNTE6Y2FzZSAxNTI6Y2FzZSAxNzU6''@;'; put 'put ''Y2FzZSA2NDQ6Y2FzZSA2MjU6Y2FzZSA1NjI6Y2FzZSAzOTY6Y2FzZSAxMTEyOmNhc2UgMTE0NjpjYXNlIDQ3MTpjYXNlIDEwNTA6Y2FzZSA2NDk6Y2FzZSAxMTA1OmNhc2UgNTg5OmNhc2UgNjA3OmNhc2UgNTY0OmNhc2UgMTA1NTpjYXNlIDE2ODpjYXNlIDE3NDpjYXNlIDExODA6Y2FzZSA0''@;'; put 'put ''OTk6Y2FzZSA1MDc6Y2FzZSA1NTA6Y2FzZSAxNzE6Y2FzZSAxNjc6Y2FzZSAxMTc3OmNhc2UgMTY5OmNhc2UgMTE4MTpjYXNlIDU1MTpjYXNlIDU1MjpjYXNlIDY2MTpjYXNlIDYzOTpjYXNlIDQ3ODpjYXNlIDUzNzpjYXNlIDQ3NzpjYXNlIDUzNjpjYXNlIDExMDM6Y2FzZSA2ODA6Y2FzZSAx''@;'; put 'put ''MTA0OmNhc2UgMTAyNDpjYXNlIDY2MzpjYXNlIDUzNTpjYXNlIDY3ODpjYXNlIDUwNDpjYXNlIDEwNDM6Y2FzZSA0Mjg6Y2FzZSAxNzA6Y2FzZSAzMDcyOmNhc2UgNTA6Y2FzZSAyMDcwOmNhc2UgMTA0NTpicmVhaztjYXNlIDM1Ong9ITA7YnJlYWs7Y2FzZSAzNjp4PSExO2JyZWFrO2Nhc2Ug''@;'; put 'put ''Mzc6aC5wdXNoKFUpLHg9ITA7YnJlYWs7Y2FzZSAzODpoLnBvcCgpLHg9ITE7YnJlYWs7ZGVmYXVsdDppZighQy5UJiYoIXh8fGYuV1RGKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkIDB4IitVLnRvU3RyaW5nKDE2KSl9fSxmKSxkZWxldGUgZi5zdXBib29rcyxkZWxldGUg''@;'; put 'put ''ZlsiIXJvdyJdLCFjWyIhcmVmIl0mJihsLnMucjwyZTZ8fG8mJihvLmUucj4wfHxvLmUuYz4wfHxvLnMucj4wfHxvLnMuYz4wKSkmJihjWyIhcmVmIl09d2Uob3x8bCkpLGYuc2hlZXRSb3dzJiZjWyIhcmVmIl0pe3ZhciBjZT1EZShjWyIhcmVmIl0pO2Yuc2hlZXRSb3dzPD0rY2UuZS5yJiYo''@;'; put 'put ''Y2UuZS5yPWYuc2hlZXRSb3dzLTEsY2UuZS5yPmwuZS5yJiYoY2UuZS5yPWwuZS5yKSxjZS5lLnI8Y2Uucy5yJiYoY2Uucy5yPWNlLmUuciksY2UuZS5jPmwuZS5jJiYoY2UuZS5jPWwuZS5jKSxjZS5lLmM8Y2Uucy5jJiYoY2Uucy5jPWNlLmUuYyksY1siIWZ1bGxyZWYiXT1jWyIhcmVmIl0s''@;'; put 'put ''Y1siIXJlZiJdPXdlKGNlKSl9cmV0dXJuIHkubGVuZ3RoPjAmJihjWyIhbWVyZ2VzIl09eSksbGUubGVuZ3RoPjAmJihjWyIhY29scyJdPWxlKSxyZS5sZW5ndGg+MCYmKGNbIiFyb3dzIl09cmUpLGN9KGUsYSxyLG4saSxzLGYpOmZ1bmN0aW9uIHZ2KGUsdCxyLGEsbixpLHMpe2lmKCFlKXJl''@;'; put 'put ''dHVybiBlO2F8fChhPXsiIWlkIjp7fX0pO3ZhciBmPXQuZGVuc2U/W106e30sYz17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fSxvPSIiLGw9IiIsaD1lLm1hdGNoKGZ2KTtoPyhvPWUuc2xpY2UoMCxoLmluZGV4KSxsPWUuc2xpY2UoaC5pbmRleCtoWzBdLmxlbmd0aCkpOm89bD1lO3Zh''@;'; put 'put ''ciB4PW8ubWF0Y2goUGYpO3g/TG4oeFswXSwwLG4scik6KHg9by5tYXRjaCh4dikpJiZmdW5jdGlvbiBtdihlLHQscixhLG4pe0xuKGUuc2xpY2UoMCxlLmluZGV4T2YoIj4iKSksMCxhLG4pfSh4WzBdLDAsMCxuLHIpO3ZhciBkPShvLm1hdGNoKC88KD86XHcqOik/ZGltZW5zaW9uLyl8fHtp''@;'; put 'put ''bmRleDotMX0pLmluZGV4O2lmKGQ+MCl7dmFyIHY9by5zbGljZShkLGQrNTApLm1hdGNoKG92KTt2JiZmdW5jdGlvbiBpdihlLHQpe3ZhciByPURlKHQpO3Iucy5yPD1yLmUuciYmci5zLmM8PXIuZS5jJiZyLnMucj49MCYmci5zLmM+PTAmJihlWyIhcmVmIl09d2UocikpfShmLHZbMV0pfXZh''@;'; put 'put ''ciB1PW8ubWF0Y2goZHYpO3UmJnVbMV0mJmZ1bmN0aW9uIE92KGUsdCl7dC5WaWV3c3x8KHQuVmlld3M9W3t9XSksKGUubWF0Y2goRHYpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihyLGEpe3ZhciBuPW1lKHIpO3QuVmlld3NbYV18fCh0LlZpZXdzW2FdPXt9KSwrbi56b29tU2NhbGUmJih0LlZp''@;'; put 'put ''ZXdzW2FdLnpvb209K24uem9vbVNjYWxlKSxXZShuLnJpZ2h0VG9MZWZ0KSYmKHQuVmlld3NbYV0uUlRMPSEwKX0pfSh1WzFdLG4pO3ZhciBwPVtdO2lmKHQuY2VsbFN0eWxlcyl7dmFyIGs9by5tYXRjaChsdik7ayYmZnVuY3Rpb24gRnYoZSx0KXtmb3IodmFyIHI9ITEsYT0wO2EhPXQubGVu''@;'; put 'put ''Z3RoOysrYSl7dmFyIG49bWUodFthXSwhMCk7bi5oaWRkZW4mJihuLmhpZGRlbj1XZShuLmhpZGRlbikpO3ZhciBpPXBhcnNlSW50KG4ubWluLDEwKS0xLHM9cGFyc2VJbnQobi5tYXgsMTApLTE7Zm9yKG4ub3V0bGluZUxldmVsJiYobi5sZXZlbD0rbi5vdXRsaW5lTGV2ZWx8fDApLGRlbGV0''@;'; put 'put ''ZSBuLm1pbixkZWxldGUgbi5tYXgsbi53aWR0aD0rbi53aWR0aCwhciYmbi53aWR0aCYmKHI9ITAsQW4obi53aWR0aCkpLEt0KG4pO2k8PXM7KWVbaSsrXT1NZShuKX19KHAsayl9aCYmTnYoaFsxXSxmLHQsYyxpLHMpO3ZhciBUPWwubWF0Y2godXYpO1QmJihmWyIhYXV0b2ZpbHRlciJdPWZ1''@;'; put 'put ''bmN0aW9uIEF2KGUpe3JldHVybntyZWY6KGUubWF0Y2goL3JlZj0iKFteIl0qKSIvKXx8W10pWzFdfX0oVFswXSkpO3ZhciBnPVtdLE49bC5tYXRjaChzdik7aWYoTilmb3IoZD0wO2QhPU4ubGVuZ3RoOysrZClnW2RdPURlKE5bZF0uc2xpY2UoTltkXS5pbmRleE9mKCciJykrMSkpO3ZhciBN''@;'; put 'put ''PWwubWF0Y2goY3YpO00mJmZ1bmN0aW9uIEV2KGUsdCxyKXtmb3IodmFyIGE9QXJyYXkuaXNBcnJheShlKSxuPTA7biE9dC5sZW5ndGg7KytuKXt2YXIgaT1tZShCZSh0W25dKSwhMCk7aWYoIWkucmVmKXJldHVybjt2YXIgcz0oKHJ8fHt9KVsiIWlkIl18fFtdKVtpLmlkXTtzPyhpLlRhcmdl''@;'; put 'put ''dD1zLlRhcmdldCxpLmxvY2F0aW9uJiYoaS5UYXJnZXQrPSIjIitJZShpLmxvY2F0aW9uKSkpOihpLlRhcmdldD0iIyIrSWUoaS5sb2NhdGlvbikscz17VGFyZ2V0OmkuVGFyZ2V0LFRhcmdldE1vZGU6IkludGVybmFsIn0pLGkuUmVsPXMsaS50b29sdGlwJiYoaS5Ub29sdGlwPWkudG9vbHRp''@;'; put 'put ''cCxkZWxldGUgaS50b29sdGlwKTtmb3IodmFyIGY9RGUoaS5yZWYpLGM9Zi5zLnI7Yzw9Zi5lLnI7KytjKWZvcih2YXIgbz1mLnMuYztvPD1mLmUuYzsrK28pe3ZhciBsPWdlKHtjOm8scjpjfSk7YT8oZVtjXXx8KGVbY109W10pLGVbY11bb118fChlW2NdW29dPXt0OiJ6Iix2OnZvaWQgMH0p''@;'; put 'put ''LGVbY11bb10ubD1pKTooZVtsXXx8KGVbbF09e3Q6InoiLHY6dm9pZCAwfSksZVtsXS5sPWkpfX19KGYsTSxhKTt2YXIgST1sLm1hdGNoKGh2KTtpZihJJiYoZlsiIW1hcmdpbnMiXT1mdW5jdGlvbiBUdihlKXt2YXIgdD17fTtyZXR1cm5bImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSIs''@;'; put 'put ''ImhlYWRlciIsImZvb3RlciJdLmZvckVhY2goZnVuY3Rpb24ocil7ZVtyXSYmKHRbcl09cGFyc2VGbG9hdChlW3JdKSl9KSx0fShtZShJWzBdKSkpLCFmWyIhcmVmIl0mJmMuZS5jPj1jLnMuYyYmYy5lLnI+PWMucy5yJiYoZlsiIXJlZiJdPXdlKGMpKSx0LnNoZWV0Um93cz4wJiZmWyIhcmVm''@;'; put 'put ''Il0pe3ZhciB5PURlKGZbIiFyZWYiXSk7dC5zaGVldFJvd3M8PSt5LmUuciYmKHkuZS5yPXQuc2hlZXRSb3dzLTEseS5lLnI+Yy5lLnImJih5LmUucj1jLmUucikseS5lLnI8eS5zLnImJih5LnMucj15LmUucikseS5lLmM+Yy5lLmMmJih5LmUuYz1jLmUuYykseS5lLmM8eS5zLmMmJih5LnMu''@;'; put 'put ''Yz15LmUuYyksZlsiIWZ1bGxyZWYiXT1mWyIhcmVmIl0sZlsiIXJlZiJdPXdlKHkpKX1yZXR1cm4gcC5sZW5ndGg+MCYmKGZbIiFjb2xzIl09cCksZy5sZW5ndGg+MCYmKGZbIiFtZXJnZXMiXT1nKSxmfShlLGEscixuLGkscyxmKX12YXIgR2EsemY9LyhbXHc6XSspPSgoPzoiKShbXiJdKiko''@;'; put 'put ''PzoiKXwoPzonKShbXiddKikoPzonKSkvZywkZj0vKFtcdzpdKyk9KCg/OiIpKD86W14iXSopKD86Iil8KD86JykoPzpbXiddKikoPzonKSkvO2Z1bmN0aW9uIFpyKGUsdCl7dmFyIHI9ZS5zcGxpdCgvXHMrLyksYT1bXTtpZih0fHwoYVswXT1yWzBdKSwxPT09ci5sZW5ndGgpcmV0dXJuIGE7''@;'; put 'put ''dmFyIGkscyxjLG49ZS5tYXRjaCh6Zik7aWYobilmb3IoYz0wO2MhPW4ubGVuZ3RoOysrYyktMT09PShzPShpPW5bY10ubWF0Y2goJGYpKVsxXS5pbmRleE9mKCI6IikpP2FbaVsxXV09aVsyXS5zbGljZSgxLGlbMl0ubGVuZ3RoLTEpOmFbInhtbG5zOiI9PT1pWzFdLnNsaWNlKDAsNik/Inht''@;'; put 'put ''bG5zIitpWzFdLnNsaWNlKDYpOmlbMV0uc2xpY2UocysxKV09aVsyXS5zbGljZSgxLGlbMl0ubGVuZ3RoLTEpO3JldHVybiBhfWZ1bmN0aW9uIEhwKGUpe3ZhciByPXt9O2lmKDE9PT1lLnNwbGl0KC9ccysvKS5sZW5ndGgpcmV0dXJuIHI7dmFyIG4saSxmLGE9ZS5tYXRjaCh6Zik7aWYoYSlm''@;'; put 'put ''b3IoZj0wO2YhPWEubGVuZ3RoOysrZiktMT09PShpPShuPWFbZl0ubWF0Y2goJGYpKVsxXS5pbmRleE9mKCI6IikpP3JbblsxXV09blsyXS5zbGljZSgxLG5bMl0ubGVuZ3RoLTEpOnJbInhtbG5zOiI9PT1uWzFdLnNsaWNlKDAsNik/InhtbG5zIituWzFdLnNsaWNlKDYpOm5bMV0uc2xpY2Uo''@;'; put 'put ''aSsxKV09blsyXS5zbGljZSgxLG5bMl0ubGVuZ3RoLTEpO3JldHVybiByfWZ1bmN0aW9uIFhwKGUsdCxyLGEpe3ZhciBuPWE7c3dpdGNoKChyWzBdLm1hdGNoKC9kdDpkdD0iKFtcdy5dKykiLyl8fFsiIiwiIl0pWzFdKXtjYXNlImJvb2xlYW4iOm49V2UoYSk7YnJlYWs7Y2FzZSJpMiI6Y2Fz''@;'; put 'put ''ZSJpbnQiOm49cGFyc2VJbnQoYSwxMCk7YnJlYWs7Y2FzZSJyNCI6Y2FzZSJmbG9hdCI6bj1wYXJzZUZsb2F0KGEpO2JyZWFrO2Nhc2UiZGF0ZSI6Y2FzZSJkYXRlVGltZS50eiI6bj1YZShhKTticmVhaztjYXNlImk4IjpjYXNlInN0cmluZyI6Y2FzZSJmaXhlZCI6Y2FzZSJ1dWlkIjpjYXNl''@;'; put 'put ''ImJpbi5iYXNlNjQiOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJiYWQgY3VzdHByb3A6IityWzBdKX1lW0llKHQpXT1ufWZ1bmN0aW9uIHpwKGUsdCxyKXtpZihyLmNlbGxTdHlsZXMmJnQuSW50ZXJpb3Ipe3ZhciBhPXQuSW50ZXJpb3I7YS5QYXR0ZXJuJiYoYS5wYXR0ZXJuVHlw''@;'; put 'put ''ZT1uMVthLlBhdHRlcm5dfHxhLlBhdHRlcm4pfWVbdC5JRF09dH1mdW5jdGlvbiAkcChlLHQscixhLG4saSxzLGYsYyxvKXt2YXIgbD0iR2VuZXJhbCIsaD1hLlN0eWxlSUQseD17fTtvPW98fHt9O3ZhciBkPVtdLHY9MDtmb3Iodm9pZCAwPT09aCYmZiYmKGg9Zi5TdHlsZUlEKSx2b2lkIDA9''@;'; put 'put ''PT1oJiZzJiYoaD1zLlN0eWxlSUQpO3ZvaWQgMCE9PWlbaF0mJihpW2hdLm5mJiYobD1pW2hdLm5mKSxpW2hdLkludGVyaW9yJiZkLnB1c2goaVtoXS5JbnRlcmlvciksaVtoXS5QYXJlbnQpOyloPWlbaF0uUGFyZW50O3N3aXRjaChyLlR5cGUpe2Nhc2UiQm9vbGVhbiI6YS50PSJiIixhLnY9''@;'; put 'put ''V2UoZSk7YnJlYWs7Y2FzZSJTdHJpbmciOmEudD0icyIsYS5yPUJpKEllKGUpKSxhLnY9ZS5pbmRleE9mKCI8Iik+LTE/SWUodHx8ZSkucmVwbGFjZSgvPC4qPz4vZywiIik6YS5yO2JyZWFrO2Nhc2UiRGF0ZVRpbWUiOiJaIiE9ZS5zbGljZSgtMSkmJihlKz0iWiIpLGEudj0oWGUoZSktbmV3''@;'; put 'put ''IERhdGUoRGF0ZS5VVEMoMTg5OSwxMSwzMCkpKS84NjRlNSxhLnYhPWEudj9hLnY9SWUoZSk6YS52PDYwJiYoYS52PWEudi0xKSwoIWx8fCJHZW5lcmFsIj09bCkmJihsPSJ5eXl5LW1tLWRkIik7Y2FzZSJOdW1iZXIiOnZvaWQgMD09PWEudiYmKGEudj0rZSksYS50fHwoYS50PSJuIik7YnJl''@;'; put 'put ''YWs7Y2FzZSJFcnJvciI6YS50PSJlIixhLnY9ZHNbZV0sITEhPT1vLmNlbGxUZXh0JiYoYS53PWUpO2JyZWFrO2RlZmF1bHQ6IiI9PWUmJiIiPT10P2EudD0ieiI6KGEudD0icyIsYS52PUJpKHR8fGUpKX1pZihmdW5jdGlvbiBHcChlLHQscil7aWYoInoiIT09ZS50KXtpZighcnx8ITEhPT1y''@;'; put 'put ''LmNlbGxUZXh0KXRyeXtlLnc9ImUiPT09ZS50P2Uud3x8eHRbZS52XToiR2VuZXJhbCI9PT10PyJuIj09PWUudD8oMHxlLnYpPT09ZS52P2Uudi50b1N0cmluZygxMCk6a2EoZS52KTpOdChlLnYpOmZ1bmN0aW9uIFZwKGUsdCl7dmFyIHI9R2FbZV18fEllKGUpO3JldHVybiJHZW5lcmFsIj09''@;'; put 'put ''PXI/TnQodCk6UnIocix0KX0odHx8IkdlbmVyYWwiLGUudil9Y2F0Y2goaSl7aWYoci5XVEYpdGhyb3cgaX10cnl7dmFyIGE9R2FbdF18fHR8fCJHZW5lcmFsIjtpZihyLmNlbGxORiYmKGUuej1hKSxyLmNlbGxEYXRlcyYmIm4iPT1lLnQmJmJ0KGEpKXt2YXIgbj1rdChlLnYpO24mJihlLnQ9''@;'; put 'put ''ImQiLGUudj1uZXcgRGF0ZShuLnksbi5tLTEsbi5kLG4uSCxuLk0sbi5TLG4udSkpfX1jYXRjaChpKXtpZihyLldURil0aHJvdyBpfX19KGEsbCxvKSwhMSE9PW8uY2VsbEZvcm11bGEpaWYoYS5Gb3JtdWxhKXt2YXIgdT1JZShhLkZvcm11bGEpOzYxPT11LmNoYXJDb2RlQXQoMCkmJih1PXUu''@;'; put 'put ''c2xpY2UoMSkpLGEuZj11YSh1LG4pLGRlbGV0ZSBhLkZvcm11bGEsIlJDIj09YS5BcnJheVJhbmdlP2EuRj11YSgiUkM6UkMiLG4pOmEuQXJyYXlSYW5nZSYmKGEuRj11YShhLkFycmF5UmFuZ2UsbiksYy5wdXNoKFtEZShhLkYpLGEuRl0pKX1lbHNlIGZvcih2PTA7djxjLmxlbmd0aDsrK3Yp''@;'; put 'put ''bi5yPj1jW3ZdWzBdLnMuciYmbi5yPD1jW3ZdWzBdLmUuciYmbi5jPj1jW3ZdWzBdLnMuYyYmbi5jPD1jW3ZdWzBdLmUuYyYmKGEuRj1jW3ZdWzFdKTtvLmNlbGxTdHlsZXMmJihkLmZvckVhY2goZnVuY3Rpb24ocCl7IXgucGF0dGVyblR5cGUmJnAucGF0dGVyblR5cGUmJih4LnBhdHRlcm5U''@;'; put 'put ''eXBlPXAucGF0dGVyblR5cGUpfSksYS5zPXgpLHZvaWQgMCE9PWEuU3R5bGVJRCYmKGEuaXhmZT1hLlN0eWxlSUQpfWZ1bmN0aW9uIGpwKGUpe2UudD1lLnZ8fCIiLGUudD1lLnQucmVwbGFjZSgvXHJcbi9nLCJcbiIpLnJlcGxhY2UoL1xyL2csIlxuIiksZS52PWUudz1lLml4ZmU9dm9pZCAw''@;'; put 'put ''fWZ1bmN0aW9uIE1uKGUsdCl7dmFyIHI9dHx8e307dGEoKTt2YXIgYT1RdChZMChlKSk7KCJiaW5hcnkiPT1yLnR5cGV8fCJhcnJheSI9PXIudHlwZXx8ImJhc2U2NCI9PXIudHlwZSkmJihhPUJlKGEpKTt2YXIgbj1hLnNsaWNlKDAsMTAyNCkudG9Mb3dlckNhc2UoKSxpPSExO2lmKCgxMDIz''@;'; put 'put ''JihuPW4ucmVwbGFjZSgvIi4qPyIvZywiIikpLmluZGV4T2YoIj4iKSk+TWF0aC5taW4oMTAyMyZuLmluZGV4T2YoIiwiKSwxMDIzJm4uaW5kZXhPZigiOyIpKSl7dmFyIHM9TWUocik7cmV0dXJuIHMudHlwZT0ic3RyaW5nIixjYS50b193b3JrYm9vayhhLHMpfWlmKC0xPT1uLmluZGV4T2Yo''@;'; put 'put ''Ijw/eG1sIikmJlsiaHRtbCIsInRhYmxlIiwiaGVhZCIsIm1ldGEiLCJzY3JpcHQiLCJzdHlsZSIsImRpdiJdLmZvckVhY2goZnVuY3Rpb24ocWUpe24uaW5kZXhPZigiPCIrcWUpPj0wJiYoaT0hMCl9KSxpKXJldHVybiBmdW5jdGlvbiBEbShlLHQpe3ZhciByPWUubWF0Y2goLzx0YWJsZVtc''@;'; put 'put ''c1xTXSo/Pltcc1xTXSo/PFwvdGFibGU+L2dpKTtpZighcnx8MD09ci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIEhUTUw6IGNvdWxkIG5vdCBmaW5kIDx0YWJsZT4iKTtpZigxPT1yLmxlbmd0aClyZXR1cm4gRnQoSmYoclswXSx0KSx0KTt2YXIgYT17U2hlZXROYW1lczpbXSxT''@;'; put 'put ''aGVldHM6e319O3JldHVybiByLmZvckVhY2goZnVuY3Rpb24obixpKXtlaShhLEpmKG4sdCksIlNoZWV0IisoaSsxKSl9KSxhfShhLHIpO0dhPXsiR2VuZXJhbCBOdW1iZXIiOiJHZW5lcmFsIiwiR2VuZXJhbCBEYXRlIjpwZVsyMl0sIkxvbmcgRGF0ZSI6ImRkZGQsIG1tbW0gZGQsIHl5eXki''@;'; put 'put ''LCJNZWRpdW0gRGF0ZSI6cGVbMTVdLCJTaG9ydCBEYXRlIjpwZVsxNF0sIkxvbmcgVGltZSI6cGVbMTldLCJNZWRpdW0gVGltZSI6cGVbMThdLCJTaG9ydCBUaW1lIjpwZVsyMF0sQ3VycmVuY3k6JyIkIiMsIyMwLjAwXyk7W1JlZF1cXCgiJCIjLCMjMC4wMFxcKScsRml4ZWQ6cGVbMl0sU3Rh''@;'; put 'put ''bmRhcmQ6cGVbNF0sUGVyY2VudDpwZVsxMF0sU2NpZW50aWZpYzpwZVsxMV0sIlllcy9ObyI6JyJZZXMiOyJZZXMiOyJObyI7QCcsIlRydWUvRmFsc2UiOiciVHJ1ZSI7IlRydWUiOyJGYWxzZSI7QCcsIk9uL09mZiI6JyJZZXMiOyJZZXMiOyJObyI7QCd9O3ZhciBmLG8sdWUsYz1bXSxsPXt9''@;'; put 'put ''LGg9W10seD1yLmRlbnNlP1tdOnt9LGQ9IiIsdj17fSx1PXt9LHA9WnIoJzxEYXRhIHNzOlR5cGU9IlN0cmluZyI+Jyksaz0wLFQ9MCxnPTAsTj17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fSxNPXt9LEk9e30seT0iIixQPTAsUj1bXSxWPXt9LFg9e30sYj0wLGVlPVtdLGxlPVtdLHJl''@;'; put 'put ''PXt9LGRlPVtdLEZlPSExLGNlPVtdLHhlPVtdLEs9e30sQz0wLFU9MCxPPXtTaGVldHM6W10sV0JQcm9wczp7ZGF0ZTE5MDQ6ITF9fSxEPXt9O3lhLmxhc3RJbmRleD0wLGE9YS5yZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0tPi9nbSwiIik7Zm9yKHZhciBqPSIiO2Y9eWEuZXhlYyhhKTspc3dp''@;'; put 'put ''dGNoKGZbM109KGo9ZlszXSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJkYXRhIjppZigiZGF0YSI9PWope2lmKCIvIj09PWZbMV0pe2lmKChvPWMucG9wKCkpWzBdIT09ZlszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitvLmpvaW4oInwiKSl9ZWxzZSIvIiE9PWZbMF0uY2hhckF0KGZb''@;'; put 'put ''MF0ubGVuZ3RoLTIpJiZjLnB1c2goW2ZbM10sITBdKTticmVha31pZihjW2MubGVuZ3RoLTFdWzFdKWJyZWFrOyIvIj09PWZbMV0/JHAoYS5zbGljZShrLGYuaW5kZXgpLHkscCwiY29tbWVudCI9PWNbYy5sZW5ndGgtMV1bMF0/cmU6dix7YzpULHI6Z30sTSxkZVtUXSx1LGNlLHIpOih5PSIi''@;'; put 'put ''LHA9WnIoZlswXSksaz1mLmluZGV4K2ZbMF0ubGVuZ3RoKTticmVhaztjYXNlImNlbGwiOmlmKCIvIj09PWZbMV0paWYobGUubGVuZ3RoPjAmJih2LmM9bGUpLCghci5zaGVldFJvd3N8fHIuc2hlZXRSb3dzPmcpJiZ2b2lkIDAhPT12LnYmJihyLmRlbnNlPyh4W2ddfHwoeFtnXT1bXSkseFtn''@;'; put 'put ''XVtUXT12KTp4W0hlKFQpK0tlKGcpXT12KSx2LkhSZWYmJih2Lmw9e1RhcmdldDpJZSh2LkhSZWYpfSx2LkhSZWZTY3JlZW5UaXAmJih2LmwuVG9vbHRpcD12LkhSZWZTY3JlZW5UaXApLGRlbGV0ZSB2LkhSZWYsZGVsZXRlIHYuSFJlZlNjcmVlblRpcCksKHYuTWVyZ2VBY3Jvc3N8fHYuTWVy''@;'; put 'put ''Z2VEb3duKSYmKEM9VCsoMHxwYXJzZUludCh2Lk1lcmdlQWNyb3NzLDEwKSksVT1nKygwfHBhcnNlSW50KHYuTWVyZ2VEb3duLDEwKSksUi5wdXNoKHtzOntjOlQscjpnfSxlOntjOkMscjpVfX0pKSxyLnNoZWV0U3R1YnMpaWYodi5NZXJnZUFjcm9zc3x8di5NZXJnZURvd24pe2Zvcih2YXIg''@;'; put 'put ''c2U9VDtzZTw9QzsrK3NlKWZvcih2YXIgWj1nO1o8PVU7KytaKShzZT5UfHxaPmcpJiYoci5kZW5zZT8oeFtaXXx8KHhbWl09W10pLHhbWl1bc2VdPXt0OiJ6In0pOnhbSGUoc2UpK0tlKFopXT17dDoieiJ9KTtUPUMrMX1lbHNlKytUO2Vsc2Ugdi5NZXJnZUFjcm9zcz9UPUMrMTorK1Q7ZWxz''@;'; put 'put ''ZSh2PUhwKGZbMF0pKS5JbmRleCYmKFQ9K3YuSW5kZXgtMSksVDxOLnMuYyYmKE4ucy5jPVQpLFQ+Ti5lLmMmJihOLmUuYz1UKSwiLz4iPT09ZlswXS5zbGljZSgtMikmJisrVCxsZT1bXTticmVhaztjYXNlInJvdyI6Ii8iPT09ZlsxXXx8Ii8+Ij09PWZbMF0uc2xpY2UoLTIpPyhnPE4ucy5y''@;'; put 'put ''JiYoTi5zLnI9ZyksZz5OLmUuciYmKE4uZS5yPWcpLCIvPiI9PT1mWzBdLnNsaWNlKC0yKSYmKHU9WnIoZlswXSkpLkluZGV4JiYoZz0rdS5JbmRleC0xKSxUPTAsKytnKTooKHU9WnIoZlswXSkpLkluZGV4JiYoZz0rdS5JbmRleC0xKSxLPXt9LCgiMCI9PXUuQXV0b0ZpdEhlaWdodHx8dS5I''@;'; put 'put ''ZWlnaHQpJiYoSy5ocHg9cGFyc2VJbnQodS5IZWlnaHQsMTApLEsuaHB0PUJhKEsuaHB4KSx4ZVtnXT1LKSwiMSI9PXUuSGlkZGVuJiYoSy5oaWRkZW49ITAseGVbZ109SykpO2JyZWFrO2Nhc2Uid29ya3NoZWV0IjppZigiLyI9PT1mWzFdKXtpZigobz1jLnBvcCgpKVswXSE9PWZbM10pdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrby5qb2luKCJ8IikpO2gucHVzaChkKSxOLnMucjw9Ti5lLnImJk4ucy5jPD1OLmUuYyYmKHhbIiFyZWYiXT13ZShOKSxyLnNoZWV0Um93cyYmci5zaGVldFJvd3M8PU4uZS5yJiYoeFsiIWZ1bGxyZWYiXT14WyIhcmVmIl0sTi5lLnI9ci5zaGVl''@;'; put 'put ''dFJvd3MtMSx4WyIhcmVmIl09d2UoTikpKSxSLmxlbmd0aCYmKHhbIiFtZXJnZXMiXT1SKSxkZS5sZW5ndGg+MCYmKHhbIiFjb2xzIl09ZGUpLHhlLmxlbmd0aD4wJiYoeFsiIXJvd3MiXT14ZSksbFtkXT14fWVsc2UgTj17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fSxnPVQ9MCxjLnB1''@;'; put 'put ''c2goW2ZbM10sITFdKSxvPVpyKGZbMF0pLGQ9SWUoby5OYW1lKSx4PXIuZGVuc2U/W106e30sUj1bXSxjZT1bXSx4ZT1bXSxPLlNoZWV0cy5wdXNoKEQ9e25hbWU6ZCxIaWRkZW46MH0pO2JyZWFrO2Nhc2UidGFibGUiOmlmKCIvIj09PWZbMV0pe2lmKChvPWMucG9wKCkpWzBdIT09ZlszXSl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitvLmpvaW4oInwiKSl9ZWxzZXtpZigiLz4iPT1mWzBdLnNsaWNlKC0yKSlicmVhaztjLnB1c2goW2ZbM10sITFdKSxkZT1bXSxGZT0hMX1icmVhaztjYXNlInN0eWxlIjoiLyI9PT1mWzFdP3pwKE0sSSxyKTpJPVpyKGZbMF0pO2JyZWFrO2Nh''@;'; put 'put ''c2UibnVtYmVyZm9ybWF0IjpJLm5mPUllKFpyKGZbMF0pLkZvcm1hdHx8IkdlbmVyYWwiKSxHYVtJLm5mXSYmKEkubmY9R2FbSS5uZl0pO2Zvcih2YXIgUT0wOzM5MiE9USYmcGVbUV0hPUkubmY7KytRKTtpZigzOTI9PVEpZm9yKFE9NTc7MzkyIT1ROysrUSlpZihudWxsPT1wZVtRXSl7ZXQo''@;'; put 'put ''SS5uZixRKTticmVha31icmVhaztjYXNlImNvbHVtbiI6aWYoInRhYmxlIiE9PWNbYy5sZW5ndGgtMV1bMF0pYnJlYWs7aWYoKHVlPVpyKGZbMF0pKS5IaWRkZW4mJih1ZS5oaWRkZW49ITAsZGVsZXRlIHVlLkhpZGRlbiksdWUuV2lkdGgmJih1ZS53cHg9cGFyc2VJbnQodWUuV2lkdGgsMTAp''@;'; put 'put ''KSwhRmUmJnVlLndweD4xMCl7RmU9ITAsd3I9Njtmb3IodmFyIFk9MDtZPGRlLmxlbmd0aDsrK1kpZGVbWV0mJkt0KGRlW1ldKX1GZSYmS3QodWUpLGRlW3VlLkluZGV4LTF8fGRlLmxlbmd0aF09dWU7Zm9yKHZhciBFZT0wO0VlPCt1ZS5TcGFuOysrRWUpZGVbZGUubGVuZ3RoXT1NZSh1ZSk7''@;'; put 'put ''YnJlYWs7Y2FzZSJuYW1lZHJhbmdlIjppZigiLyI9PT1mWzFdKWJyZWFrO08uTmFtZXN8fChPLk5hbWVzPVtdKTt2YXIgQT1tZShmWzBdKSxQZT17TmFtZTpBLk5hbWUsUmVmOnVhKEEuUmVmZXJzVG8uc2xpY2UoMSkse3I6MCxjOjB9KX07Ty5TaGVldHMubGVuZ3RoPjAmJihQZS5TaGVldD1P''@;'; put 'put ''LlNoZWV0cy5sZW5ndGgtMSksTy5OYW1lcy5wdXNoKFBlKTticmVhaztjYXNlIm5hbWVkY2VsbCI6Y2FzZSJiIjpjYXNlImkiOmNhc2UidSI6Y2FzZSJzIjpjYXNlImVtIjpjYXNlImgyIjpjYXNlImgzIjpjYXNlInN1YiI6Y2FzZSJzdXAiOmNhc2Uic3BhbiI6Y2FzZSJhbGlnbm1lbnQiOmNh''@;'; put 'put ''c2UiYm9yZGVycyI6Y2FzZSJib3JkZXIiOmNhc2UicHJvdGVjdGlvbiI6Y2FzZSJwYXJhZ3JhcGhzIjpjYXNlIm5hbWUiOmNhc2UicGl4ZWxzcGVyaW5jaCI6Y2FzZSJudWxsIjpicmVhaztjYXNlImZvbnQiOmlmKCIvPiI9PT1mWzBdLnNsaWNlKC0yKSlicmVhazsiLyI9PT1mWzFdP3krPWEu''@;'; put 'put ''c2xpY2UoUCxmLmluZGV4KTpQPWYuaW5kZXgrZlswXS5sZW5ndGg7YnJlYWs7Y2FzZSJpbnRlcmlvciI6aWYoIXIuY2VsbFN0eWxlcylicmVhaztJLkludGVyaW9yPVpyKGZbMF0pO2JyZWFrO2Nhc2UiYXV0aG9yIjpjYXNlInRpdGxlIjpjYXNlImRlc2NyaXB0aW9uIjpjYXNlImNyZWF0ZWQi''@;'; put 'put ''OmNhc2Uia2V5d29yZHMiOmNhc2Uic3ViamVjdCI6Y2FzZSJjYXRlZ29yeSI6Y2FzZSJjb21wYW55IjpjYXNlImxhc3RhdXRob3IiOmNhc2UibGFzdHNhdmVkIjpjYXNlImxhc3RwcmludGVkIjpjYXNlInZlcnNpb24iOmNhc2UicmV2aXNpb24iOmNhc2UidG90YWx0aW1lIjpjYXNlImh5cGVy''@;'; put 'put ''bGlua2Jhc2UiOmNhc2UibWFuYWdlciI6Y2FzZSJjb250ZW50c3RhdHVzIjpjYXNlImlkZW50aWZpZXIiOmNhc2UibGFuZ3VhZ2UiOmNhc2UiYXBwbmFtZSI6aWYoIi8+Ij09PWZbMF0uc2xpY2UoLTIpKWJyZWFrOyIvIj09PWZbMV0/Z2woVixqLGEuc2xpY2UoYixmLmluZGV4KSk6Yj1mLmlu''@;'; put 'put ''ZGV4K2ZbMF0ubGVuZ3RoO2JyZWFrO2Nhc2Uic3R5bGVzIjpjYXNlIndvcmtib29rIjppZigiLyI9PT1mWzFdKXtpZigobz1jLnBvcCgpKVswXSE9PWZbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrby5qb2luKCJ8IikpfWVsc2UgYy5wdXNoKFtmWzNdLCExXSk7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJjb21tZW50IjppZigiLyI9PT1mWzFdKXtpZigobz1jLnBvcCgpKVswXSE9PWZbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrby5qb2luKCJ8IikpO2pwKHJlKSxsZS5wdXNoKHJlKX1lbHNlIGMucHVzaChbZlszXSwhMV0pLHJlPXthOihvPVpyKGZbMF0pKS5BdXRob3J9O2Jy''@;'; put 'put ''ZWFrO2Nhc2UiYXV0b2ZpbHRlciI6aWYoIi8iPT09ZlsxXSl7aWYoKG89Yy5wb3AoKSlbMF0hPT1mWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK28uam9pbigifCIpKX1lbHNlIGlmKCIvIiE9PWZbMF0uY2hhckF0KGZbMF0ubGVuZ3RoLTIpKXt2YXIgQWU9WnIoZlswXSk7eFsi''@;'; put 'put ''IWF1dG9maWx0ZXIiXT17cmVmOnVhKEFlLlJhbmdlKS5yZXBsYWNlKC9cJC9nLCIiKX0sYy5wdXNoKFtmWzNdLCEwXSl9YnJlYWs7Y2FzZSJkYXRhdmFsaWRhdGlvbiI6aWYoIi8iPT09ZlsxXSl7aWYoKG89Yy5wb3AoKSlbMF0hPT1mWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAi''@;'; put 'put ''K28uam9pbigifCIpKX1lbHNlIi8iIT09ZlswXS5jaGFyQXQoZlswXS5sZW5ndGgtMikmJmMucHVzaChbZlszXSwhMF0pO2JyZWFrO2Nhc2UiY29tcG9uZW50b3B0aW9ucyI6Y2FzZSJkb2N1bWVudHByb3BlcnRpZXMiOmNhc2UiY3VzdG9tZG9jdW1lbnRwcm9wZXJ0aWVzIjpjYXNlIm9mZmlj''@;'; put 'put ''ZWRvY3VtZW50c2V0dGluZ3MiOmNhc2UicGl2b3R0YWJsZSI6Y2FzZSJwaXZvdGNhY2hlIjpjYXNlIm5hbWVzIjpjYXNlIm1hcGluZm8iOmNhc2UicGFnZWJyZWFrcyI6Y2FzZSJxdWVyeXRhYmxlIjpjYXNlInNvcnRpbmciOmNhc2Uic2NoZW1hIjpjYXNlImNvbmRpdGlvbmFsZm9ybWF0dGlu''@;'; put 'put ''ZyI6Y2FzZSJzbWFydHRhZ3R5cGUiOmNhc2Uic21hcnR0YWdzIjpjYXNlImV4Y2Vsd29ya2Jvb2siOmNhc2Uid29ya2Jvb2tvcHRpb25zIjpjYXNlIndvcmtzaGVldG9wdGlvbnMiOmlmKCIvIj09PWZbMV0pe2lmKChvPWMucG9wKCkpWzBdIT09ZlszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBz''@;'; put 'put ''dGF0ZTogIitvLmpvaW4oInwiKSl9ZWxzZSIvIiE9PWZbMF0uY2hhckF0KGZbMF0ubGVuZ3RoLTIpJiZjLnB1c2goW2ZbM10sITBdKTticmVhaztkZWZhdWx0OmlmKDA9PWMubGVuZ3RoJiYiZG9jdW1lbnQiPT1mWzNdfHwwPT1jLmxlbmd0aCYmInVvZiI9PWZbM10pcmV0dXJuIGNjKGEscik7''@;'; put 'put ''dmFyIExlPSEwO3N3aXRjaChjW2MubGVuZ3RoLTFdWzBdKXtjYXNlIm9mZmljZWRvY3VtZW50c2V0dGluZ3MiOnN3aXRjaChmWzNdKXtjYXNlImFsbG93cG5nIjpjYXNlInJlbW92ZXBlcnNvbmFsaW5mb3JtYXRpb24iOmNhc2UiZG93bmxvYWRjb21wb25lbnRzIjpjYXNlImxvY2F0aW9ub2Zj''@;'; put 'put ''b21wb25lbnRzIjpjYXNlImNvbG9ycyI6Y2FzZSJjb2xvciI6Y2FzZSJpbmRleCI6Y2FzZSJyZ2IiOmNhc2UidGFyZ2V0c2NyZWVuc2l6ZSI6Y2FzZSJyZWFkb25seXJlY29tbWVuZGVkIjpicmVhaztkZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2UiY29tcG9uZW50b3B0aW9ucyI6c3dpdGNoKGZb''@;'; put 'put ''M10pe2Nhc2UidG9vbGJhciI6Y2FzZSJoaWRlb2ZmaWNlbG9nbyI6Y2FzZSJzcHJlYWRzaGVldGF1dG9maXQiOmNhc2UibGFiZWwiOmNhc2UiY2FwdGlvbiI6Y2FzZSJtYXhoZWlnaHQiOmNhc2UibWF4d2lkdGgiOmNhc2UibmV4dHNoZWV0bnVtYmVyIjpicmVhaztkZWZhdWx0OkxlPSExfWJy''@;'; put 'put ''ZWFrO2Nhc2UiZXhjZWx3b3JrYm9vayI6c3dpdGNoKGZbM10pe2Nhc2UiZGF0ZTE5MDQiOk8uV0JQcm9wcy5kYXRlMTkwND0hMDticmVhaztjYXNlIndpbmRvd2hlaWdodCI6Y2FzZSJ3aW5kb3d3aWR0aCI6Y2FzZSJ3aW5kb3d0b3B4IjpjYXNlIndpbmRvd3RvcHkiOmNhc2UidGFicmF0aW8i''@;'; put 'put ''OmNhc2UicHJvdGVjdHN0cnVjdHVyZSI6Y2FzZSJwcm90ZWN0d2luZG93IjpjYXNlInByb3RlY3R3aW5kb3dzIjpjYXNlImFjdGl2ZXNoZWV0IjpjYXNlImRpc3BsYXlpbmtub3RlcyI6Y2FzZSJmaXJzdHZpc2libGVzaGVldCI6Y2FzZSJzdXBib29rIjpjYXNlInNoZWV0bmFtZSI6Y2FzZSJz''@;'; put 'put ''aGVldGluZGV4IjpjYXNlInNoZWV0aW5kZXhmaXJzdCI6Y2FzZSJzaGVldGluZGV4bGFzdCI6Y2FzZSJkbGwiOmNhc2UiYWNjZXB0bGFiZWxzaW5mb3JtdWxhcyI6Y2FzZSJkb25vdHNhdmVsaW5rdmFsdWVzIjpjYXNlIml0ZXJhdGlvbiI6Y2FzZSJtYXhpdGVyYXRpb25zIjpjYXNlIm1heGNo''@;'; put 'put ''YW5nZSI6Y2FzZSJwYXRoIjpjYXNlInhjdCI6Y2FzZSJjb3VudCI6Y2FzZSJzZWxlY3RlZHNoZWV0cyI6Y2FzZSJjYWxjdWxhdGlvbiI6Y2FzZSJ1bmNhbGNlZCI6Y2FzZSJzdGFydHVwcHJvbXB0IjpjYXNlImNybiI6Y2FzZSJleHRlcm5uYW1lIjpjYXNlImZvcm11bGEiOmNhc2UiY29sZmly''@;'; put 'put ''c3QiOmNhc2UiY29sbGFzdCI6Y2FzZSJ3YW50YWR2aXNlIjpjYXNlImJvb2xlYW4iOmNhc2UiZXJyb3IiOmNhc2UidGV4dCI6Y2FzZSJvbGUiOmNhc2Uibm9hdXRvcmVjb3ZlciI6Y2FzZSJwdWJsaXNob2JqZWN0cyI6Y2FzZSJkb25vdGNhbGN1bGF0ZWJlZm9yZXNhdmUiOmNhc2UibnVtYmVy''@;'; put 'put ''IjpjYXNlInJlZm1vZGVyMWMxIjpjYXNlImVtYmVkc2F2ZXNtYXJ0dGFncyI6YnJlYWs7ZGVmYXVsdDpMZT0hMX1icmVhaztjYXNlIndvcmtib29rb3B0aW9ucyI6c3dpdGNoKGZbM10pe2Nhc2Uib3djdmVyc2lvbiI6Y2FzZSJoZWlnaHQiOmNhc2Uid2lkdGgiOmJyZWFrO2RlZmF1bHQ6TGU9''@;'; put 'put ''ITF9YnJlYWs7Y2FzZSJ3b3Jrc2hlZXRvcHRpb25zIjpzd2l0Y2goZlszXSl7Y2FzZSJ2aXNpYmxlIjppZigiLz4iIT09ZlswXS5zbGljZSgtMikpaWYoIi8iPT09ZlsxXSlzd2l0Y2goYS5zbGljZShiLGYuaW5kZXgpKXtjYXNlIlNoZWV0SGlkZGVuIjpELkhpZGRlbj0xO2JyZWFrO2Nhc2Ui''@;'; put 'put ''U2hlZXRWZXJ5SGlkZGVuIjpELkhpZGRlbj0yfWVsc2UgYj1mLmluZGV4K2ZbMF0ubGVuZ3RoO2JyZWFrO2Nhc2UiaGVhZGVyIjp4WyIhbWFyZ2lucyJdfHxZdCh4WyIhbWFyZ2lucyJdPXt9LCJ4bG1sIiksaXNOYU4oK21lKGZbMF0pLk1hcmdpbil8fCh4WyIhbWFyZ2lucyJdLmhlYWRlcj0r''@;'; put 'put ''bWUoZlswXSkuTWFyZ2luKTticmVhaztjYXNlImZvb3RlciI6eFsiIW1hcmdpbnMiXXx8WXQoeFsiIW1hcmdpbnMiXT17fSwieGxtbCIpLGlzTmFOKCttZShmWzBdKS5NYXJnaW4pfHwoeFsiIW1hcmdpbnMiXS5mb290ZXI9K21lKGZbMF0pLk1hcmdpbik7YnJlYWs7Y2FzZSJwYWdlbWFyZ2lu''@;'; put 'put ''cyI6dmFyIENlPW1lKGZbMF0pO3hbIiFtYXJnaW5zIl18fFl0KHhbIiFtYXJnaW5zIl09e30sInhsbWwiKSxpc05hTigrQ2UuVG9wKXx8KHhbIiFtYXJnaW5zIl0udG9wPStDZS5Ub3ApLGlzTmFOKCtDZS5MZWZ0KXx8KHhbIiFtYXJnaW5zIl0ubGVmdD0rQ2UuTGVmdCksaXNOYU4oK0NlLlJp''@;'; put 'put ''Z2h0KXx8KHhbIiFtYXJnaW5zIl0ucmlnaHQ9K0NlLlJpZ2h0KSxpc05hTigrQ2UuQm90dG9tKXx8KHhbIiFtYXJnaW5zIl0uYm90dG9tPStDZS5Cb3R0b20pO2JyZWFrO2Nhc2UiZGlzcGxheXJpZ2h0dG9sZWZ0IjpPLlZpZXdzfHwoTy5WaWV3cz1bXSksTy5WaWV3c1swXXx8KE8uVmlld3Nb''@;'; put 'put ''MF09e30pLE8uVmlld3NbMF0uUlRMPSEwO2JyZWFrO2Nhc2UiZnJlZXplcGFuZXMiOmNhc2UiZnJvemVubm9zcGxpdCI6Y2FzZSJzcGxpdGhvcml6b250YWwiOmNhc2Uic3BsaXR2ZXJ0aWNhbCI6Y2FzZSJkb25vdGRpc3BsYXlncmlkbGluZXMiOmNhc2UiYWN0aXZlcm93IjpjYXNlImFjdGl2''@;'; put 'put ''ZWNvbCI6Y2FzZSJ0b3Byb3dib3R0b21wYW5lIjpjYXNlImxlZnRjb2x1bW5yaWdodHBhbmUiOmNhc2UidW5zeW5jZWQiOmNhc2UicHJpbnQiOmNhc2UicHJpbnRlcnJvcnMiOmNhc2UicGFuZXMiOmNhc2Uic2NhbGUiOmNhc2UicGFuZSI6Y2FzZSJudW1iZXIiOmNhc2UibGF5b3V0IjpjYXNl''@;'; put 'put ''InBhZ2VzZXR1cCI6Y2FzZSJzZWxlY3RlZCI6Y2FzZSJwcm90ZWN0b2JqZWN0cyI6Y2FzZSJlbmFibGVzZWxlY3Rpb24iOmNhc2UicHJvdGVjdHNjZW5hcmlvcyI6Y2FzZSJ2YWxpZHByaW50ZXJpbmZvIjpjYXNlImhvcml6b250YWxyZXNvbHV0aW9uIjpjYXNlInZlcnRpY2FscmVzb2x1dGlv''@;'; put 'put ''biI6Y2FzZSJudW1iZXJvZmNvcGllcyI6Y2FzZSJhY3RpdmVwYW5lIjpjYXNlInRvcHJvd3Zpc2libGUiOmNhc2UibGVmdGNvbHVtbnZpc2libGUiOmNhc2UiZml0dG9wYWdlIjpjYXNlInJhbmdlc2VsZWN0aW9uIjpjYXNlInBhcGVyc2l6ZWluZGV4IjpjYXNlInBhZ2VsYXlvdXR6b29tIjpj''@;'; put 'put ''YXNlInBhZ2VicmVha3pvb20iOmNhc2UiZmlsdGVyb24iOmNhc2UiZml0d2lkdGgiOmNhc2UiZml0aGVpZ2h0IjpjYXNlImNvbW1lbnRzbGF5b3V0IjpjYXNlInpvb20iOmNhc2UibGVmdHRvcmlnaHQiOmNhc2UiZ3JpZGxpbmVzIjpjYXNlImFsbG93c29ydCI6Y2FzZSJhbGxvd2ZpbHRlciI6''@;'; put 'put ''Y2FzZSJhbGxvd2luc2VydHJvd3MiOmNhc2UiYWxsb3dkZWxldGVyb3dzIjpjYXNlImFsbG93aW5zZXJ0Y29scyI6Y2FzZSJhbGxvd2RlbGV0ZWNvbHMiOmNhc2UiYWxsb3dpbnNlcnRoeXBlcmxpbmtzIjpjYXNlImFsbG93Zm9ybWF0Y2VsbHMiOmNhc2UiYWxsb3dzaXplY29scyI6Y2FzZSJh''@;'; put 'put ''bGxvd3NpemVyb3dzIjpjYXNlInRhYmNvbG9yaW5kZXgiOmNhc2UiZG9ub3RkaXNwbGF5aGVhZGluZ3MiOmNhc2Uic2hvd3BhZ2VsYXlvdXR6b29tIjpjYXNlImJsYWNrYW5kd2hpdGUiOmNhc2UiZG9ub3RkaXNwbGF5emVyb3MiOmNhc2UiZGlzcGxheXBhZ2VicmVhayI6Y2FzZSJyb3djb2xo''@;'; put 'put ''ZWFkaW5ncyI6Y2FzZSJkb25vdGRpc3BsYXlvdXRsaW5lIjpjYXNlIm5vb3JpZW50YXRpb24iOmNhc2UiYWxsb3d1c2VwaXZvdHRhYmxlcyI6Y2FzZSJ6ZXJvaGVpZ2h0IjpjYXNlInZpZXdhYmxlcmFuZ2UiOmNhc2Uic2VsZWN0aW9uIjpjYXNlInByb3RlY3Rjb250ZW50cyI6YnJlYWs7Y2Fz''@;'; put 'put ''ZSJub3N1bW1hcnlyb3dzYmVsb3dkZXRhaWwiOnhbIiFvdXRsaW5lIl18fCh4WyIhb3V0bGluZSJdPXt9KSx4WyIhb3V0bGluZSJdLmFib3ZlPSEwO2JyZWFrO2Nhc2Uibm9zdW1tYXJ5Y29sdW1uc3JpZ2h0ZGV0YWlsIjp4WyIhb3V0bGluZSJdfHwoeFsiIW91dGxpbmUiXT17fSkseFsiIW91''@;'; put 'put ''dGxpbmUiXS5sZWZ0PSEwO2JyZWFrO2RlZmF1bHQ6TGU9ITF9YnJlYWs7Y2FzZSJwaXZvdHRhYmxlIjpjYXNlInBpdm90Y2FjaGUiOnN3aXRjaChmWzNdKXtjYXNlImltbWVkaWF0ZWl0ZW1zb25kcm9wIjpjYXNlInNob3dwYWdlbXVsdGlwbGVpdGVtbGFiZWwiOmNhc2UiY29tcGFjdHJvd2lu''@;'; put 'put ''ZGVudCI6Y2FzZSJsb2NhdGlvbiI6Y2FzZSJwaXZvdGZpZWxkIjpjYXNlIm9yaWVudGF0aW9uIjpjYXNlImxheW91dGZvcm0iOmNhc2UibGF5b3V0c3VidG90YWxsb2NhdGlvbiI6Y2FzZSJsYXlvdXRjb21wYWN0cm93IjpjYXNlInBvc2l0aW9uIjpjYXNlInBpdm90aXRlbSI6Y2FzZSJkYXRh''@;'; put 'put ''dHlwZSI6Y2FzZSJkYXRhZmllbGQiOmNhc2Uic291cmNlbmFtZSI6Y2FzZSJwYXJlbnRmaWVsZCI6Y2FzZSJwdGxpbmVpdGVtcyI6Y2FzZSJwdGxpbmVpdGVtIjpjYXNlImNvdW50b2ZzYW1laXRlbXMiOmNhc2UiaXRlbSI6Y2FzZSJpdGVtdHlwZSI6Y2FzZSJwdHNvdXJjZSI6Y2FzZSJjYWNo''@;'; put 'put ''ZWluZGV4IjpjYXNlImNvbnNvbGlkYXRpb25yZWZlcmVuY2UiOmNhc2UiZmlsZW5hbWUiOmNhc2UicmVmZXJlbmNlIjpjYXNlIm5vY29sdW1uZ3JhbmQiOmNhc2Uibm9yb3dncmFuZCI6Y2FzZSJibGFua2xpbmVhZnRlcml0ZW1zIjpjYXNlImhpZGRlbiI6Y2FzZSJzdWJ0b3RhbCI6Y2FzZSJi''@;'; put 'put ''YXNlZmllbGQiOmNhc2UibWFwY2hpbGRpdGVtcyI6Y2FzZSJmdW5jdGlvbiI6Y2FzZSJyZWZyZXNob25maWxlb3BlbiI6Y2FzZSJwcmludHNldHRpdGxlcyI6Y2FzZSJtZXJnZWxhYmVscyI6Y2FzZSJkZWZhdWx0dmVyc2lvbiI6Y2FzZSJyZWZyZXNobmFtZSI6Y2FzZSJyZWZyZXNoZGF0ZSI6''@;'; put 'put ''Y2FzZSJyZWZyZXNoZGF0ZWNvcHkiOmNhc2UidmVyc2lvbmxhc3RyZWZyZXNoIjpjYXNlInZlcnNpb25sYXN0dXBkYXRlIjpjYXNlInZlcnNpb251cGRhdGVhYmxlbWluIjpjYXNlInZlcnNpb25yZWZyZXNoYWJsZW1pbiI6Y2FzZSJjYWxjdWxhdGlvbiI6YnJlYWs7ZGVmYXVsdDpMZT0hMX1i''@;'; put 'put ''cmVhaztjYXNlInBhZ2VicmVha3MiOnN3aXRjaChmWzNdKXtjYXNlImNvbGJyZWFrcyI6Y2FzZSJjb2xicmVhayI6Y2FzZSJyb3dicmVha3MiOmNhc2Uicm93YnJlYWsiOmNhc2UiY29sc3RhcnQiOmNhc2UiY29sZW5kIjpjYXNlInJvd2VuZCI6YnJlYWs7ZGVmYXVsdDpMZT0hMX1icmVhaztj''@;'; put 'put ''YXNlImF1dG9maWx0ZXIiOnN3aXRjaChmWzNdKXtjYXNlImF1dG9maWx0ZXJjb2x1bW4iOmNhc2UiYXV0b2ZpbHRlcmNvbmRpdGlvbiI6Y2FzZSJhdXRvZmlsdGVyYW5kIjpjYXNlImF1dG9maWx0ZXJvciI6YnJlYWs7ZGVmYXVsdDpMZT0hMX1icmVhaztjYXNlInF1ZXJ5dGFibGUiOnN3aXRj''@;'; put 'put ''aChmWzNdKXtjYXNlImlkIjpjYXNlImF1dG9mb3JtYXRmb250IjpjYXNlImF1dG9mb3JtYXRwYXR0ZXJuIjpjYXNlInF1ZXJ5c291cmNlIjpjYXNlInF1ZXJ5dHlwZSI6Y2FzZSJlbmFibGVyZWRpcmVjdGlvbnMiOmNhc2UicmVmcmVzaGVkaW54bDkiOmNhc2UidXJsc3RyaW5nIjpjYXNlImh0''@;'; put 'put ''bWx0YWJsZXMiOmNhc2UiY29ubmVjdGlvbiI6Y2FzZSJjb21tYW5kdGV4dCI6Y2FzZSJyZWZyZXNoaW5mbyI6Y2FzZSJub3RpdGxlcyI6Y2FzZSJuZXh0aWQiOmNhc2UiY29sdW1uaW5mbyI6Y2FzZSJvdmVyd3JpdGVjZWxscyI6Y2FzZSJkb25vdHByb21wdGZvcmZpbGUiOmNhc2UidGV4dHdp''@;'; put 'put ''emFyZHNldHRpbmdzIjpjYXNlInNvdXJjZSI6Y2FzZSJudW1iZXIiOmNhc2UiZGVjaW1hbCI6Y2FzZSJ0aG91c2FuZHNlcGFyYXRvciI6Y2FzZSJ0cmFpbGluZ21pbnVzbnVtYmVycyI6Y2FzZSJmb3JtYXRzZXR0aW5ncyI6Y2FzZSJmaWVsZHR5cGUiOmNhc2UiZGVsaW1pdGVycyI6Y2FzZSJ0''@;'; put 'put ''YWIiOmNhc2UiY29tbWEiOmNhc2UiYXV0b2Zvcm1hdG5hbWUiOmNhc2UidmVyc2lvbmxhc3RlZGl0IjpjYXNlInZlcnNpb25sYXN0cmVmcmVzaCI6YnJlYWs7ZGVmYXVsdDpMZT0hMX1icmVhaztjYXNlImRhdGF2YWxpZGF0aW9uIjpzd2l0Y2goZlszXSl7Y2FzZSJyYW5nZSI6Y2FzZSJ0eXBl''@;'; put 'put ''IjpjYXNlIm1pbiI6Y2FzZSJtYXgiOmNhc2Uic29ydCI6Y2FzZSJkZXNjZW5kaW5nIjpjYXNlIm9yZGVyIjpjYXNlImNhc2VzZW5zaXRpdmUiOmNhc2UidmFsdWUiOmNhc2UiZXJyb3JzdHlsZSI6Y2FzZSJlcnJvcm1lc3NhZ2UiOmNhc2UiZXJyb3J0aXRsZSI6Y2FzZSJpbnB1dG1lc3NhZ2Ui''@;'; put 'put ''OmNhc2UiaW5wdXR0aXRsZSI6Y2FzZSJjb21ib2hpZGUiOmNhc2UiaW5wdXRoaWRlIjpjYXNlImNvbmRpdGlvbiI6Y2FzZSJxdWFsaWZpZXIiOmNhc2UidXNlYmxhbmsiOmNhc2UidmFsdWUxIjpjYXNlInZhbHVlMiI6Y2FzZSJmb3JtYXQiOmNhc2UiY2VsbHJhbmdlbGlzdCI6YnJlYWs7ZGVm''@;'; put 'put ''YXVsdDpMZT0hMX1icmVhaztjYXNlInNvcnRpbmciOmNhc2UiY29uZGl0aW9uYWxmb3JtYXR0aW5nIjpzd2l0Y2goZlszXSl7Y2FzZSJyYW5nZSI6Y2FzZSJ0eXBlIjpjYXNlIm1pbiI6Y2FzZSJtYXgiOmNhc2Uic29ydCI6Y2FzZSJkZXNjZW5kaW5nIjpjYXNlIm9yZGVyIjpjYXNlImNhc2Vz''@;'; put 'put ''ZW5zaXRpdmUiOmNhc2UidmFsdWUiOmNhc2UiZXJyb3JzdHlsZSI6Y2FzZSJlcnJvcm1lc3NhZ2UiOmNhc2UiZXJyb3J0aXRsZSI6Y2FzZSJjZWxscmFuZ2VsaXN0IjpjYXNlImlucHV0bWVzc2FnZSI6Y2FzZSJpbnB1dHRpdGxlIjpjYXNlImNvbWJvaGlkZSI6Y2FzZSJpbnB1dGhpZGUiOmNh''@;'; put 'put ''c2UiY29uZGl0aW9uIjpjYXNlInF1YWxpZmllciI6Y2FzZSJ1c2VibGFuayI6Y2FzZSJ2YWx1ZTEiOmNhc2UidmFsdWUyIjpjYXNlImZvcm1hdCI6YnJlYWs7ZGVmYXVsdDpMZT0hMX1icmVhaztjYXNlIm1hcGluZm8iOmNhc2Uic2NoZW1hIjpjYXNlImRhdGEiOnN3aXRjaChmWzNdKXtjYXNl''@;'; put 'put ''Im1hcCI6Y2FzZSJlbnRyeSI6Y2FzZSJyYW5nZSI6Y2FzZSJ4cGF0aCI6Y2FzZSJmaWVsZCI6Y2FzZSJ4c2R0eXBlIjpjYXNlImZpbHRlcm9uIjpjYXNlImFnZ3JlZ2F0ZSI6Y2FzZSJlbGVtZW50dHlwZSI6Y2FzZSJhdHRyaWJ1dGV0eXBlIjpjYXNlInNjaGVtYSI6Y2FzZSJlbGVtZW50Ijpj''@;'; put 'put ''YXNlImNvbXBsZXh0eXBlIjpjYXNlImRhdGF0eXBlIjpjYXNlImFsbCI6Y2FzZSJhdHRyaWJ1dGUiOmNhc2UiZXh0ZW5kcyI6Y2FzZSJyb3ciOmJyZWFrO2RlZmF1bHQ6TGU9ITF9YnJlYWs7Y2FzZSJzbWFydHRhZ3MiOmJyZWFrO2RlZmF1bHQ6TGU9ITF9aWYoTGV8fGZbM10ubWF0Y2goLyFc''@;'; put 'put ''W0NEQVRBLykpYnJlYWs7aWYoIWNbYy5sZW5ndGgtMV1bMV0pdGhyb3ciVW5yZWNvZ25pemVkIHRhZzogIitmWzNdKyJ8IitjLmpvaW4oInwiKTtpZigiY3VzdG9tZG9jdW1lbnRwcm9wZXJ0aWVzIj09PWNbYy5sZW5ndGgtMV1bMF0pe2lmKCIvPiI9PT1mWzBdLnNsaWNlKC0yKSlicmVhazsi''@;'; put 'put ''LyI9PT1mWzFdP1hwKFgsaixlZSxhLnNsaWNlKGIsZi5pbmRleCkpOihlZT1mLGI9Zi5pbmRleCtmWzBdLmxlbmd0aCk7YnJlYWt9aWYoci5XVEYpdGhyb3ciVW5yZWNvZ25pemVkIHRhZzogIitmWzNdKyJ8IitjLmpvaW4oInwiKX12YXIgb2U9e307cmV0dXJuIXIuYm9va1NoZWV0cyYmIXIu''@;'; put 'put ''Ym9va1Byb3BzJiYob2UuU2hlZXRzPWwpLG9lLlNoZWV0TmFtZXM9aCxvZS5Xb3JrYm9vaz1PLG9lLlNTRj1NZShwZSksb2UuUHJvcHM9VixvZS5DdXN0cHJvcHM9WCxvZX1mdW5jdGlvbiBVbihlLHQpe3N3aXRjaCgkbih0PXR8fHt9KSx0LnR5cGV8fCJiYXNlNjQiKXtjYXNlImJhc2U2NCI6''@;'; put 'put ''cmV0dXJuIE1uKE9yKGUpLHQpO2Nhc2UiYmluYXJ5IjpjYXNlImJ1ZmZlciI6Y2FzZSJmaWxlIjpyZXR1cm4gTW4oZSx0KTtjYXNlImFycmF5IjpyZXR1cm4gTW4od3QoZSksdCl9fXZhciBmbT1bNjAsMTA4NCwyMDY2LDIxNjUsMjE3NV07ZnVuY3Rpb24gY20oZSx0LHIsYSxuKXt2YXIgaT1h''@;'; put 'put ''LHM9W10sZj1yLnNsaWNlKHIubCxyLmwraSk7aWYobiYmbi5lbmMmJm4uZW5jLmluc2l0dSYmZi5sZW5ndGg+MClzd2l0Y2goZSl7Y2FzZSA5OmNhc2UgNTIxOmNhc2UgMTAzMzpjYXNlIDIwNTc6Y2FzZSA0NzpjYXNlIDQwNTpjYXNlIDIyNTpjYXNlIDQwNjpjYXNlIDMxMjpjYXNlIDQwNDpj''@;'; put 'put ''YXNlIDEwOmNhc2UgMTMzOmJyZWFrO2RlZmF1bHQ6bi5lbmMuaW5zaXR1KGYpfXMucHVzaChmKSxyLmwrPWk7Zm9yKHZhciBjPXV0KHIsci5sKSxvPVduW2NdLGw9MDtudWxsIT1vJiZmbS5pbmRleE9mKGMpPi0xOylpPXV0KHIsci5sKzIpLGw9ci5sKzQsMjA2Nj09Yz9sKz00OigyMTY1PT1j''@;'; put 'put ''fHwyMTc1PT1jKSYmKGwrPTEyKSxmPXIuc2xpY2UobCxyLmwrNCtpKSxzLnB1c2goZiksci5sKz00K2ksbz1XbltjPXV0KHIsci5sKV07dmFyIGg9ZnIocyk7aHIoaCwwKTt2YXIgeD0wO2gubGVucz1bXTtmb3IodmFyIGQ9MDtkPHMubGVuZ3RoOysrZCloLmxlbnMucHVzaCh4KSx4Kz1zW2Rd''@;'; put 'put ''Lmxlbmd0aDtpZihoLmxlbmd0aDxhKXRocm93IlhMUyBSZWNvcmQgMHgiK2UudG9TdHJpbmcoMTYpKyIgVHJ1bmNhdGVkOiAiK2gubGVuZ3RoKyIgPCAiK2E7cmV0dXJuIHQuZihoLGgubGVuZ3RoLG4pfWZ1bmN0aW9uIGl0KGUsdCxyKXtpZigieiIhPT1lLnQmJmUuWEYpe3ZhciBhPTA7dHJ5''@;'; put 'put ''e2E9ZS56fHxlLlhGLm51bUZtdElkfHwwLHQuY2VsbE5GJiYoZS56PXBlW2FdKX1jYXRjaChpKXtpZih0LldURil0aHJvdyBpfWlmKCF0fHwhMSE9PXQuY2VsbFRleHQpdHJ5e2Uudz0iZSI9PT1lLnQ/ZS53fHx4dFtlLnZdOjA9PT1hfHwiR2VuZXJhbCI9PWE/Im4iPT09ZS50PygwfGUudik9''@;'; put 'put ''PT1lLnY/ZS52LnRvU3RyaW5nKDEwKTprYShlLnYpOk50KGUudik6UnIoYSxlLnYse2RhdGUxOTA0OiEhcixkYXRlTkY6dCYmdC5kYXRlTkZ9KX1jYXRjaChpKXtpZih0LldURil0aHJvdyBpfWlmKHQuY2VsbERhdGVzJiZhJiYibiI9PWUudCYmYnQocGVbYV18fFN0cmluZyhhKSkpe3ZhciBu''@;'; put 'put ''PWt0KGUudik7biYmKGUudD0iZCIsZS52PW5ldyBEYXRlKG4ueSxuLm0tMSxuLmQsbi5ILG4uTSxuLlMsbi51KSl9fX1mdW5jdGlvbiBPMChlLHQscil7cmV0dXJue3Y6ZSxpeGZlOnQsdDpyfX1mdW5jdGlvbiBLZihlLHQpe3ZhciByLGEsbixpO2lmKHR8fCh0PXt9KSwkbih0KSxyMCgpLHQu''@;'; put 'put ''Y29kZXBhZ2UmJmUwKHQuY29kZXBhZ2UpLGUuRnVsbFBhdGhzKXtpZih2ZS5maW5kKGUsIi9lbmNyeXB0aW9uIikpdGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZCIpO3I9dmUuZmluZChlLCIhQ29tcE9iaiIpLGE9dmUuZmluZChlLCIvV29ya2Jvb2siKXx8dmUu''@;'; put 'put ''ZmluZChlLCIvQm9vayIpfWVsc2V7c3dpdGNoKHQudHlwZSl7Y2FzZSJiYXNlNjQiOmU9SXIoT3IoZSkpO2JyZWFrO2Nhc2UiYmluYXJ5IjplPUlyKGUpO2JyZWFrO2Nhc2UiYnVmZmVyIjpicmVhaztjYXNlImFycmF5IjpBcnJheS5pc0FycmF5KGUpfHwoZT1BcnJheS5wcm90b3R5cGUuc2xp''@;'; put 'put ''Y2UuY2FsbChlKSl9aHIoZSwwKSxhPXtjb250ZW50OmV9fWlmKHImJmZ1bmN0aW9uIHNtKGUpe3ZhciB0PXt9LHI9ZS5jb250ZW50O2lmKHIubD0yOCx0LkFuc2lVc2VyVHlwZT1yLnJlYWRfc2hpZnQoMCwibHBzdHItYW5zaSIpLHQuQW5zaUNsaXBib2FyZEZvcm1hdD1mdW5jdGlvbiBxbyhl''@;'; put 'put ''KXtyZXR1cm4gbHMoZSwxKX0ociksci5sZW5ndGgtci5sPD00KXJldHVybiB0O3ZhciBhPXIucmVhZF9zaGlmdCg0KTtpZigwPT1hfHxhPjQwfHwoci5sLT00LHQuUmVzZXJ2ZWQxPXIucmVhZF9zaGlmdCgwLCJscHN0ci1hbnNpIiksci5sZW5ndGgtci5sPD00KXx8MTkwNzUwNTY1MiE9PShh''@;'; put 'put ''PXIucmVhZF9zaGlmdCg0KSl8fCh0LlVuaWNvZGVDbGlwYm9hcmRGb3JtYXQ9ZnVuY3Rpb24gWm8oZSl7cmV0dXJuIGxzKGUsMil9KHIpLDA9PShhPXIucmVhZF9zaGlmdCg0KSl8fGE+NDApKXJldHVybiB0O3IubC09NCx0LlJlc2VydmVkMj1yLnJlYWRfc2hpZnQoMCwibHB3c3RyIil9KHIp''@;'; put 'put ''LHQuYm9va1Byb3BzJiYhdC5ib29rU2hlZXRzKW49e307ZWxzZXt2YXIgcz1TZT8iYnVmZmVyIjoiYXJyYXkiO2lmKGEmJmEuY29udGVudCluPWZ1bmN0aW9uIG9tKGUsdCl7dmFyIGgsZCx1LHAsZyxOLHI9e29wdHM6e319LGE9e30sbj10LmRlbnNlP1tdOnt9LGk9e30scz17fSxmPW51bGws''@;'; put 'put ''Yz1bXSxvPSIiLGw9e30seD0iIixrPXt9LFQ9W10sTT1bXSxJPVtdLHk9e1NoZWV0czpbXSxXQlByb3BzOntkYXRlMTkwNDohMX0sVmlld3M6W3t9XX0sUD17fSxSPWZ1bmN0aW9uKHllKXtyZXR1cm4geWU8OD9WdFt5ZV06eWU8NjQmJklbeWUtOF18fFZ0W3llXX0sWD1mdW5jdGlvbih5ZSxa''@;'; put 'put ''ZSxLcil7aWYoIShLPjF8fEtyLnNoZWV0Um93cyYmeWUucj49S3Iuc2hlZXRSb3dzKSl7aWYoS3IuY2VsbFN0eWxlcyYmWmUuWEYmJlplLlhGLmRhdGEmJmZ1bmN0aW9uKHllLFplLEtyKXt2YXIgcXQsc3I9WmUuWEYuZGF0YTtzciYmc3IucGF0dGVyblR5cGUmJktyJiZLci5jZWxsU3R5bGVz''@;'; put 'put ''JiYoWmUucz17fSxaZS5zLnBhdHRlcm5UeXBlPXNyLnBhdHRlcm5UeXBlLChxdD1iYShSKHNyLmljdkZvcmUpKSkmJihaZS5zLmZnQ29sb3I9e3JnYjpxdH0pLChxdD1iYShSKHNyLmljdkJhY2spKSkmJihaZS5zLmJnQ29sb3I9e3JnYjpxdH0pKX0oMCxaZSxLciksZGVsZXRlIFplLml4ZmUs''@;'; put 'put ''ZGVsZXRlIFplLlhGLGg9eWUseD1nZSh5ZSksKCFzfHwhcy5zfHwhcy5lKSYmKHM9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fSkseWUucjxzLnMuciYmKHMucy5yPXllLnIpLHllLmM8cy5zLmMmJihzLnMuYz15ZS5jKSx5ZS5yKzE+cy5lLnImJihzLmUucj15ZS5yKzEpLHllLmMrMT5zLmUu''@;'; put 'put ''YyYmKHMuZS5jPXllLmMrMSksS3IuY2VsbEZvcm11bGEmJlplLmYpZm9yKHZhciBzcj0wO3NyPFQubGVuZ3RoOysrc3IpaWYoIShUW3NyXVswXS5zLmM+eWUuY3x8VFtzcl1bMF0ucy5yPnllLnJ8fFRbc3JdWzBdLmUuYzx5ZS5jfHxUW3NyXVswXS5lLnI8eWUucikpe1plLkY9d2UoVFtzcl1b''@;'; put 'put ''MF0pLChUW3NyXVswXS5zLmMhPXllLmN8fFRbc3JdWzBdLnMuciE9eWUucikmJmRlbGV0ZSBaZS5mLFplLmYmJihaZS5mPSIiK2tyKFRbc3JdWzFdLDAseWUsY2UsYikpO2JyZWFrfUtyLmRlbnNlPyhuW3llLnJdfHwoblt5ZS5yXT1bXSksblt5ZS5yXVt5ZS5jXT1aZSk6blt4XT1aZX19LGI9''@;'; put 'put ''e2VuYzohMSxzYmNjaDowLHNuYW1lczpbXSxzaGFyZWRmOmssYXJyYXlmOlQscnJ0YWJpZDpbXSxsYXN0dXNlcjoiIixiaWZmOjgsY29kZXBhZ2U6MCx3aW5sb2NrZWQ6MCxjZWxsU3R5bGVzOiEhdCYmISF0LmNlbGxTdHlsZXMsV1RGOiEhdCYmISF0Lnd0Zn07dC5wYXNzd29yZCYmKGIucGFz''@;'; put 'put ''c3dvcmQ9dC5wYXNzd29yZCk7dmFyIGVlLGxlPVtdLHJlPVtdLGRlPVtdLHVlPVtdLEZlPSExLGNlPVtdO2NlLlNoZWV0TmFtZXM9Yi5zbmFtZXMsY2Uuc2hhcmVkZj1iLnNoYXJlZGYsY2UuYXJyYXlmPWIuYXJyYXlmLGNlLm5hbWVzPVtdLGNlLlhUST1bXTt2YXIgRCx4ZT0wLEs9MCxDPTAs''@;'; put 'put ''VT1bXSxPPVtdO2IuY29kZXBhZ2U9MTIwMCxNcigxMjAwKTtmb3IodmFyIGo9ITE7ZS5sPGUubGVuZ3RoLTE7KXt2YXIgc2U9ZS5sLFo9ZS5yZWFkX3NoaWZ0KDIpO2lmKDA9PT1aJiYxMD09PXhlKWJyZWFrO3ZhciBRPWUubD09PWUubGVuZ3RoPzA6ZS5yZWFkX3NoaWZ0KDIpLFk9V25bWl07''@;'; put 'put ''aWYoWSYmWS5mKXtpZih0LmJvb2tTaGVldHMmJjEzMz09PXhlJiYxMzMhPT1aKWJyZWFrO2lmKHhlPVosMj09PVkucnx8MTI9PVkucil7dmFyIEVlPWUucmVhZF9zaGlmdCgyKTtpZihRLT0yLCFiLmVuYyYmRWUhPT1aJiYoKDI1NSZFZSk8PDh8RWU+PjgpIT09Wil0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''InJ0IG1pc21hdGNoOiAiK0VlKyIhPSIrWik7MTI9PVkuciYmKGUubCs9MTAsUS09MTApfXZhciBBPXt9O2lmKEE9MTA9PT1aP1kuZihlLFEsYik6Y20oWixZLGUsUSxiKSwwPT1LJiYtMT09PVs5LDUyMSwxMDMzLDIwNTddLmluZGV4T2YoeGUpKWNvbnRpbnVlO3N3aXRjaChaKXtjYXNlIDM0''@;'; put 'put ''OnIub3B0cy5EYXRlMTkwND15LldCUHJvcHMuZGF0ZTE5MDQ9QTticmVhaztjYXNlIDEzNDpyLm9wdHMuV3JpdGVQcm90ZWN0PSEwO2JyZWFrO2Nhc2UgNDc6aWYoYi5lbmN8fChlLmw9MCksYi5lbmM9QSwhdC5wYXNzd29yZCl0aHJvdyBuZXcgRXJyb3IoIkZpbGUgaXMgcGFzc3dvcmQtcHJv''@;'; put 'put ''dGVjdGVkIik7aWYobnVsbD09QS52YWxpZCl0aHJvdyBuZXcgRXJyb3IoIkVuY3J5cHRpb24gc2NoZW1lIHVuc3VwcG9ydGVkIik7aWYoIUEudmFsaWQpdGhyb3cgbmV3IEVycm9yKCJQYXNzd29yZCBpcyBpbmNvcnJlY3QiKTticmVhaztjYXNlIDkyOmIubGFzdHVzZXI9QTticmVhaztjYXNl''@;'; put 'put ''IDY2OnZhciBQZT1OdW1iZXIoQSk7c3dpdGNoKFBlKXtjYXNlIDIxMDEwOlBlPTEyMDA7YnJlYWs7Y2FzZSAzMjc2ODpQZT0xZTQ7YnJlYWs7Y2FzZSAzMjc2OTpQZT0xMjUyfU1yKGIuY29kZXBhZ2U9UGUpLGo9ITA7YnJlYWs7Y2FzZSAzMTc6Yi5ycnRhYmlkPUE7YnJlYWs7Y2FzZSAyNTpi''@;'; put 'put ''LndpbmxvY2tlZD1BO2JyZWFrO2Nhc2UgNDM5OnIub3B0cy5SZWZyZXNoQWxsPUE7YnJlYWs7Y2FzZSAxMjpyLm9wdHMuQ2FsY0NvdW50PUE7YnJlYWs7Y2FzZSAxNjpyLm9wdHMuQ2FsY0RlbHRhPUE7YnJlYWs7Y2FzZSAxNzpyLm9wdHMuQ2FsY0l0ZXI9QTticmVhaztjYXNlIDEzOnIub3B0''@;'; put 'put ''cy5DYWxjTW9kZT1BO2JyZWFrO2Nhc2UgMTQ6ci5vcHRzLkNhbGNQcmVjaXNpb249QTticmVhaztjYXNlIDk1OnIub3B0cy5DYWxjU2F2ZVJlY2FsYz1BO2JyZWFrO2Nhc2UgMTU6Yi5DYWxjUmVmTW9kZT1BO2JyZWFrO2Nhc2UgMjIxMTpyLm9wdHMuRnVsbENhbGM9QTticmVhaztjYXNlIDEy''@;'; put 'put ''OTpBLmZEaWFsb2cmJihuWyIhdHlwZSJdPSJkaWFsb2ciKSxBLmZCZWxvd3x8KChuWyIhb3V0bGluZSJdfHwoblsiIW91dGxpbmUiXT17fSkpLmFib3ZlPSEwKSxBLmZSaWdodHx8KChuWyIhb3V0bGluZSJdfHwoblsiIW91dGxpbmUiXT17fSkpLmxlZnQ9ITApO2JyZWFrO2Nhc2UgMjI0Ok0u''@;'; put 'put ''cHVzaChBKTticmVhaztjYXNlIDQzMDpjZS5wdXNoKFtBXSksY2VbY2UubGVuZ3RoLTFdLlhUST1bXTticmVhaztjYXNlIDM1OmNhc2UgNTQ3OmNlW2NlLmxlbmd0aC0xXS5wdXNoKEEpO2JyZWFrO2Nhc2UgMjQ6Y2FzZSA1MzY6RD17TmFtZTpBLk5hbWUsUmVmOmtyKEEucmdjZSwwLG51bGws''@;'; put 'put ''Y2UsYil9LEEuaXRhYj4wJiYoRC5TaGVldD1BLml0YWItMSksY2UubmFtZXMucHVzaChEKSxjZVswXXx8KGNlWzBdPVtdLGNlWzBdLlhUST1bXSksY2VbY2UubGVuZ3RoLTFdLnB1c2goQSksIl94bG5tLl9GaWx0ZXJEYXRhYmFzZSI9PUEuTmFtZSYmQS5pdGFiPjAmJkEucmdjZSYmQS5yZ2Nl''@;'; put 'put ''WzBdJiZBLnJnY2VbMF1bMF0mJiJQdGdBcmVhM2QiPT1BLnJnY2VbMF1bMF1bMF0mJihPW0EuaXRhYi0xXT17cmVmOndlKEEucmdjZVswXVswXVsxXVsyXSl9KTticmVhaztjYXNlIDIyOmIuRXh0ZXJuQ291bnQ9QTticmVhaztjYXNlIDIzOjA9PWNlLmxlbmd0aCYmKGNlWzBdPVtdLGNlWzBd''@;'; put 'put ''LlhUST1bXSksY2VbY2UubGVuZ3RoLTFdLlhUST1jZVtjZS5sZW5ndGgtMV0uWFRJLmNvbmNhdChBKSxjZS5YVEk9Y2UuWFRJLmNvbmNhdChBKTticmVhaztjYXNlIDIxOTY6aWYoYi5iaWZmPDgpYnJlYWs7bnVsbCE9RCYmKEQuQ29tbWVudD1BWzFdKTticmVhaztjYXNlIDE4Om5bIiFwcm90''@;'; put 'put ''ZWN0Il09QTticmVhaztjYXNlIDE5OjAhPT1BJiZiLldURiYmY29uc29sZS5lcnJvcigiUGFzc3dvcmQgdmVyaWZpZXI6ICIrQSk7YnJlYWs7Y2FzZSAxMzM6aVtBLnBvc109QSxiLnNuYW1lcy5wdXNoKEEubmFtZSk7YnJlYWs7Y2FzZSAxMDppZigtLUspYnJlYWs7aWYocy5lKXtpZihzLmUu''@;'; put 'put ''cj4wJiZzLmUuYz4wKXtpZihzLmUuci0tLHMuZS5jLS0sblsiIXJlZiJdPXdlKHMpLHQuc2hlZXRSb3dzJiZ0LnNoZWV0Um93czw9cy5lLnIpe3ZhciBBZT1zLmUucjtzLmUucj10LnNoZWV0Um93cy0xLG5bIiFmdWxscmVmIl09blsiIXJlZiJdLG5bIiFyZWYiXT13ZShzKSxzLmUucj1BZX1z''@;'; put 'put ''LmUucisrLHMuZS5jKyt9bGUubGVuZ3RoPjAmJihuWyIhbWVyZ2VzIl09bGUpLHJlLmxlbmd0aD4wJiYoblsiIW9iamVjdHMiXT1yZSksZGUubGVuZ3RoPjAmJihuWyIhY29scyJdPWRlKSx1ZS5sZW5ndGg+MCYmKG5bIiFyb3dzIl09dWUpLHkuU2hlZXRzLnB1c2goUCl9IiI9PT1vP2w9bjph''@;'; put 'put ''W29dPW4sbj10LmRlbnNlP1tdOnt9O2JyZWFrO2Nhc2UgOTpjYXNlIDUyMTpjYXNlIDEwMzM6Y2FzZSAyMDU3OmlmKDg9PT1iLmJpZmYmJihiLmJpZmY9ezk6Miw1MjE6MywxMDMzOjR9W1pdfHx7NTEyOjIsNzY4OjMsMTAyNDo0LDEyODA6NSwxNTM2OjgsMjoyLDc6Mn1bQS5CSUZGVmVyXXx8''@;'; put 'put ''OCksYi5iaWZmZ3Vlc3M9MD09QS5CSUZGVmVyLDA9PUEuQklGRlZlciYmNDA5Nj09QS5kdCYmKGIuYmlmZj01LGo9ITAsTXIoYi5jb2RlcGFnZT0yODU5MSkpLDg9PWIuYmlmZiYmMD09QS5CSUZGVmVyJiYxNj09QS5kdCYmKGIuYmlmZj0yKSxLKyspYnJlYWs7aWYobj10LmRlbnNlP1tdOnt9''@;'; put 'put ''LGIuYmlmZjw4JiYhaiYmKGo9ITAsTXIoYi5jb2RlcGFnZT10LmNvZGVwYWdlfHwxMjUyKSksYi5iaWZmPDV8fDA9PUEuQklGRlZlciYmNDA5Nj09QS5kdCl7IiI9PT1vJiYobz0iU2hlZXQxIikscz17czp7cjowLGM6MH0sZTp7cjowLGM6MH19O3ZhciBMZT17cG9zOmUubC1RLG5hbWU6b307''@;'; put 'put ''aVtMZS5wb3NdPUxlLGIuc25hbWVzLnB1c2gobyl9ZWxzZSBvPShpW3NlXXx8e25hbWU6IiJ9KS5uYW1lOzMyPT1BLmR0JiYoblsiIXR5cGUiXT0iY2hhcnQiKSw2ND09QS5kdCYmKG5bIiF0eXBlIl09Im1hY3JvIiksbGU9W10scmU9W10sYi5hcnJheWY9VD1bXSxkZT1bXSx1ZT1bXSxGZT0h''@;'; put 'put ''MSxQPXtIaWRkZW46KGlbc2VdfHx7aHM6MH0pLmhzLG5hbWU6b307YnJlYWs7Y2FzZSA1MTU6Y2FzZSAzOmNhc2UgMjoiY2hhcnQiPT1uWyIhdHlwZSJdJiYodC5kZW5zZT8obltBLnJdfHxbXSlbQS5jXTpuW2dlKHtjOkEuYyxyOkEucn0pXSkmJisrQS5jLGc9e2l4ZmU6QS5peGZlLFhGOk1b''@;'; put 'put ''QS5peGZlXXx8e30sdjpBLnZhbCx0OiJuIn0sQz4wJiYoZy56PVVbZy5peGZlPj44JjYzXSksaXQoZyx0LHIub3B0cy5EYXRlMTkwNCksWCh7YzpBLmMscjpBLnJ9LGcsdCk7YnJlYWs7Y2FzZSA1OmNhc2UgNTE3Omc9e2l4ZmU6QS5peGZlLFhGOk1bQS5peGZlXSx2OkEudmFsLHQ6QS50fSxD''@;'; put 'put ''PjAmJihnLno9VVtnLml4ZmU+PjgmNjNdKSxpdChnLHQsci5vcHRzLkRhdGUxOTA0KSxYKHtjOkEuYyxyOkEucn0sZyx0KTticmVhaztjYXNlIDYzODpnPXtpeGZlOkEuaXhmZSxYRjpNW0EuaXhmZV0sdjpBLnJrbnVtLHQ6Im4ifSxDPjAmJihnLno9VVtnLml4ZmU+PjgmNjNdKSxpdChnLHQs''@;'; put 'put ''ci5vcHRzLkRhdGUxOTA0KSxYKHtjOkEuYyxyOkEucn0sZyx0KTticmVhaztjYXNlIDE4OTpmb3IodmFyIENlPUEuYztDZTw9QS5DOysrQ2Upe3ZhciBvZT1BLnJrcmVjW0NlLUEuY11bMF07Zz17aXhmZTpvZSxYRjpNW29lXSx2OkEucmtyZWNbQ2UtQS5jXVsxXSx0OiJuIn0sQz4wJiYoZy56''@;'; put 'put ''PVVbZy5peGZlPj44JjYzXSksaXQoZyx0LHIub3B0cy5EYXRlMTkwNCksWCh7YzpDZSxyOkEucn0sZyx0KX1icmVhaztjYXNlIDY6Y2FzZSA1MTg6Y2FzZSAxMDMwOmlmKCJTdHJpbmciPT1BLnZhbCl7Zj1BO2JyZWFrfWlmKChnPU8wKEEudmFsLEEuY2VsbC5peGZlLEEudHQpKS5YRj1NW2cu''@;'; put 'put ''aXhmZV0sdC5jZWxsRm9ybXVsYSl7dmFyIHFlPUEuZm9ybXVsYTtpZihxZSYmcWVbMF0mJnFlWzBdWzBdJiYiUHRnRXhwIj09cWVbMF1bMF1bMF0pe3ZhciBqcj1xZVswXVswXVsxXVswXSxmdD1xZVswXVswXVsxXVsxXSx2dD1nZSh7cjpqcixjOmZ0fSk7a1t2dF0/Zy5mPSIiK2tyKEEuZm9y''@;'; put 'put ''bXVsYSwwLEEuY2VsbCxjZSxiKTpnLkY9KCh0LmRlbnNlPyhuW2pyXXx8W10pW2Z0XTpuW3Z0XSl8fHt9KS5GfWVsc2UgZy5mPSIiK2tyKEEuZm9ybXVsYSwwLEEuY2VsbCxjZSxiKX1DPjAmJihnLno9VVtnLml4ZmU+PjgmNjNdKSxpdChnLHQsci5vcHRzLkRhdGUxOTA0KSxYKEEuY2VsbCxn''@;'; put 'put ''LHQpLGY9QTticmVhaztjYXNlIDc6Y2FzZSA1MTk6aWYoIWYpdGhyb3cgbmV3IEVycm9yKCJTdHJpbmcgcmVjb3JkIGV4cGVjdHMgRm9ybXVsYSIpO2YudmFsPUEsKGc9TzAoQSxmLmNlbGwuaXhmZSwicyIpKS5YRj1NW2cuaXhmZV0sdC5jZWxsRm9ybXVsYSYmKGcuZj0iIitrcihmLmZvcm11''@;'; put 'put ''bGEsMCxmLmNlbGwsY2UsYikpLEM+MCYmKGcuej1VW2cuaXhmZT4+OCY2M10pLGl0KGcsdCxyLm9wdHMuRGF0ZTE5MDQpLFgoZi5jZWxsLGcsdCksZj1udWxsO2JyZWFrO2Nhc2UgMzM6Y2FzZSA1NDU6VC5wdXNoKEEpO3ZhciBKYT1nZShBWzBdLnMpO2lmKGQ9dC5kZW5zZT8obltBWzBdLnMu''@;'; put 'put ''cl18fFtdKVtBWzBdLnMuY106bltKYV0sdC5jZWxsRm9ybXVsYSYmZCl7aWYoIWZ8fCFKYXx8IWQpYnJlYWs7ZC5mPSIiK2tyKEFbMV0sMCxBWzBdLGNlLGIpLGQuRj13ZShBWzBdKX1icmVhaztjYXNlIDEyMTI6aWYoIXQuY2VsbEZvcm11bGEpYnJlYWs7aWYoeCl7aWYoIWYpYnJlYWs7a1tn''@;'; put 'put ''ZShmLmNlbGwpXT1BWzBdLCgoZD10LmRlbnNlPyhuW2YuY2VsbC5yXXx8W10pW2YuY2VsbC5jXTpuW2dlKGYuY2VsbCldKXx8e30pLmY9IiIra3IoQVswXSwwLGgsY2UsYil9YnJlYWs7Y2FzZSAyNTM6Zz1PMChjW0EuaXNzdF0udCxBLml4ZmUsInMiKSxjW0EuaXNzdF0uaCYmKGcuaD1jW0Eu''@;'; put 'put ''aXNzdF0uaCksZy5YRj1NW2cuaXhmZV0sQz4wJiYoZy56PVVbZy5peGZlPj44JjYzXSksaXQoZyx0LHIub3B0cy5EYXRlMTkwNCksWCh7YzpBLmMscjpBLnJ9LGcsdCk7YnJlYWs7Y2FzZSA1MTM6dC5zaGVldFN0dWJzJiYoZz17aXhmZTpBLml4ZmUsWEY6TVtBLml4ZmVdLHQ6InoifSxDPjAm''@;'; put 'put ''JihnLno9VVtnLml4ZmU+PjgmNjNdKSxpdChnLHQsci5vcHRzLkRhdGUxOTA0KSxYKHtjOkEuYyxyOkEucn0sZyx0KSk7YnJlYWs7Y2FzZSAxOTA6aWYodC5zaGVldFN0dWJzKWZvcih2YXIgT3Q9QS5jO090PD1BLkM7KytPdCl7dmFyIExyPUEuaXhmZVtPdC1BLmNdO2c9e2l4ZmU6THIsWEY6''@;'; put 'put ''TVtMcl0sdDoieiJ9LEM+MCYmKGcuej1VW2cuaXhmZT4+OCY2M10pLGl0KGcsdCxyLm9wdHMuRGF0ZTE5MDQpLFgoe2M6T3QscjpBLnJ9LGcsdCl9YnJlYWs7Y2FzZSAyMTQ6Y2FzZSA1MTY6Y2FzZSA0OihnPU8wKEEudmFsLEEuaXhmZSwicyIpKS5YRj1NW2cuaXhmZV0sQz4wJiYoZy56PVVb''@;'; put 'put ''Zy5peGZlPj44JjYzXSksaXQoZyx0LHIub3B0cy5EYXRlMTkwNCksWCh7YzpBLmMscjpBLnJ9LGcsdCk7YnJlYWs7Y2FzZSAwOmNhc2UgNTEyOjE9PT1LJiYocz1BKTticmVhaztjYXNlIDI1MjpjPUE7YnJlYWs7Y2FzZSAxMDU0OmlmKDQ9PWIuYmlmZil7VVtDKytdPUFbMV07Zm9yKHZhciBw''@;'; put 'put ''dD0wO3B0PEMrMTYzJiZwZVtwdF0hPUFbMV07KytwdCk7cHQ+PTE2MyYmZXQoQVsxXSxDKzE2Myl9ZWxzZSBldChBWzFdLEFbMF0pO2JyZWFrO2Nhc2UgMzA6VVtDKytdPUE7Zm9yKHZhciBJdD0wO0l0PEMrMTYzJiZwZVtJdF0hPUE7KytJdCk7SXQ+PTE2MyYmZXQoQSxDKzE2Myk7YnJlYWs7''@;'; put 'put ''Y2FzZSAyMjk6bGU9bGUuY29uY2F0KEEpO2JyZWFrO2Nhc2UgOTM6cmVbQS5jbW9bMF1dPWIubGFzdG9iaj1BO2JyZWFrO2Nhc2UgNDM4OmIubGFzdG9iai5UeE89QTticmVhaztjYXNlIDEyNzpiLmxhc3RvYmouSW1EYXRhPUE7YnJlYWs7Y2FzZSA0NDA6Zm9yKHA9QVswXS5zLnI7cDw9QVsw''@;'; put 'put ''XS5lLnI7KytwKWZvcih1PUFbMF0ucy5jO3U8PUFbMF0uZS5jOysrdSkoZD10LmRlbnNlPyhuW3BdfHxbXSlbdV06bltnZSh7Yzp1LHI6cH0pXSkmJihkLmw9QVsxXSk7YnJlYWs7Y2FzZSAyMDQ4OmZvcihwPUFbMF0ucy5yO3A8PUFbMF0uZS5yOysrcClmb3IodT1BWzBdLnMuYzt1PD1BWzBd''@;'; put 'put ''LmUuYzsrK3UpKGQ9dC5kZW5zZT8obltwXXx8W10pW3VdOm5bZ2Uoe2M6dSxyOnB9KV0pJiZkLmwmJihkLmwuVG9vbHRpcD1BWzFdKTticmVhaztjYXNlIDI4OmlmKGIuYmlmZjw9NSYmYi5iaWZmPj0yKWJyZWFrO2Q9dC5kZW5zZT8obltBWzBdLnJdfHxbXSlbQVswXS5jXTpuW2dlKEFbMF0p''@;'; put 'put ''XTt2YXIgcWE9cmVbQVsyXV07ZHx8KHQuZGVuc2U/KG5bQVswXS5yXXx8KG5bQVswXS5yXT1bXSksZD1uW0FbMF0ucl1bQVswXS5jXT17dDoieiJ9KTpkPW5bZ2UoQVswXSldPXt0OiJ6In0scy5lLnI9TWF0aC5tYXgocy5lLnIsQVswXS5yKSxzLnMucj1NYXRoLm1pbihzLnMucixBWzBdLnIp''@;'; put 'put ''LHMuZS5jPU1hdGgubWF4KHMuZS5jLEFbMF0uYykscy5zLmM9TWF0aC5taW4ocy5zLmMsQVswXS5jKSksZC5jfHwoZC5jPVtdKSxkLmMucHVzaCh7YTpBWzFdLHQ6cWEuVHhPLnR9KTticmVhaztjYXNlIDIxNzM6cTEoMCxBLmV4dCk7YnJlYWs7Y2FzZSAxMjU6aWYoIWIuY2VsbFN0eWxlcyli''@;'; put 'put ''cmVhaztmb3IoO0EuZT49QS5zOylkZVtBLmUtLV09e3dpZHRoOkEudy8yNTYsbGV2ZWw6QS5sZXZlbHx8MCxoaWRkZW46ISEoMSZBLmZsYWdzKX0sRmV8fChGZT0hMCxBbihBLncvMjU2KSksS3QoZGVbQS5lKzFdKTticmVhaztjYXNlIDUyMDp2YXIgeXI9e307bnVsbCE9QS5sZXZlbCYmKHVl''@;'; put 'put ''W0Eucl09eXIseXIubGV2ZWw9QS5sZXZlbCksQS5oaWRkZW4mJih1ZVtBLnJdPXlyLHlyLmhpZGRlbj0hMCksQS5ocHQmJih1ZVtBLnJdPXlyLHlyLmhwdD1BLmhwdCx5ci5ocHg9b2EoQS5ocHQpKTticmVhaztjYXNlIDM4OmNhc2UgMzk6Y2FzZSA0MDpjYXNlIDQxOm5bIiFtYXJnaW5zIl18''@;'; put 'put ''fFl0KG5bIiFtYXJnaW5zIl09e30pLG5bIiFtYXJnaW5zIl1bezM4OiJsZWZ0IiwzOToicmlnaHQiLDQwOiJ0b3AiLDQxOiJib3R0b20ifVtaXV09QTticmVhaztjYXNlIDE2MTpuWyIhbWFyZ2lucyJdfHxZdChuWyIhbWFyZ2lucyJdPXt9KSxuWyIhbWFyZ2lucyJdLmhlYWRlcj1BLmhlYWRl''@;'; put 'put ''cixuWyIhbWFyZ2lucyJdLmZvb3Rlcj1BLmZvb3RlcjticmVhaztjYXNlIDU3NDpBLlJUTCYmKHkuVmlld3NbMF0uUlRMPSEwKTticmVhaztjYXNlIDE0NjpJPUE7YnJlYWs7Y2FzZSAyMTk4OmVlPUE7YnJlYWs7Y2FzZSAxNDA6Tj1BO2JyZWFrO2Nhc2UgNDQyOm8/UC5Db2RlTmFtZT1BfHxQ''@;'; put 'put ''Lm5hbWU6eS5XQlByb3BzLkNvZGVOYW1lPUF8fCJUaGlzV29ya2Jvb2sifX1lbHNlIFl8fGNvbnNvbGUuZXJyb3IoIk1pc3NpbmcgSW5mbyBmb3IgWExTIFJlY29yZCAweCIrWi50b1N0cmluZygxNikpLGUubCs9UX1yZXR1cm4gci5TaGVldE5hbWVzPSRlKGkpLnNvcnQoZnVuY3Rpb24oY3Qs''@;'; put 'put ''eWUpe3JldHVybiBOdW1iZXIoY3QpLU51bWJlcih5ZSl9KS5tYXAoZnVuY3Rpb24oY3Qpe3JldHVybiBpW2N0XS5uYW1lfSksdC5ib29rU2hlZXRzfHwoci5TaGVldHM9YSksIXIuU2hlZXROYW1lcy5sZW5ndGgmJmxbIiFyZWYiXT8oci5TaGVldE5hbWVzLnB1c2goIlNoZWV0MSIpLHIuU2hl''@;'; put 'put ''ZXRzJiYoci5TaGVldHMuU2hlZXQxPWwpKTpyLlByZWFtYmxlPWwsci5TaGVldHMmJk8uZm9yRWFjaChmdW5jdGlvbihjdCx5ZSl7ci5TaGVldHNbci5TaGVldE5hbWVzW3llXV1bIiFhdXRvZmlsdGVyIl09Y3R9KSxyLlN0cmluZ3M9YyxyLlNTRj1NZShwZSksYi5lbmMmJihyLkVuY3J5cHRp''@;'; put 'put ''b249Yi5lbmMpLGVlJiYoci5UaGVtZXM9ZWUpLHIuTWV0YWRhdGE9e30sdm9pZCAwIT09TiYmKHIuTWV0YWRhdGEuQ291bnRyeT1OKSxjZS5uYW1lcy5sZW5ndGg+MCYmKHkuTmFtZXM9Y2UubmFtZXMpLHIuV29ya2Jvb2s9eSxyfShhLmNvbnRlbnQsdCk7ZWxzZSBpZigoaT12ZS5maW5kKGUs''@;'; put 'put ''IlBlcmZlY3RPZmZpY2VfTUFJTiIpKSYmaS5jb250ZW50KW49anQudG9fd29ya2Jvb2soaS5jb250ZW50LCh0LnR5cGU9cyx0KSk7ZWxzZXtpZighKGk9dmUuZmluZChlLCJOYXRpdmVDb250ZW50X01BSU4iKSl8fCFpLmNvbnRlbnQpdGhyb3coaT12ZS5maW5kKGUsIk1OMCIpKSYmaS5jb250''@;'; put 'put ''ZW50P25ldyBFcnJvcigiVW5zdXBwb3J0ZWQgV29ya3MgNCBmb3IgTWFjIGZpbGUiKTpuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIFdvcmtib29rIHN0cmVhbSIpO249anQudG9fd29ya2Jvb2soaS5jb250ZW50LCh0LnR5cGU9cyx0KSl9dC5ib29rVkJBJiZlLkZ1bGxQYXRocyYmdmUuZmluZChl''@;'; put 'put ''LCIvX1ZCQV9QUk9KRUNUX0NVUi9WQkEvZGlyIikmJihuLnZiYXJhdz1mdW5jdGlvbiBGeChlKXt2YXIgdD12ZS51dGlscy5jZmJfbmV3KHtyb290OiJSIn0pO3JldHVybiBlLkZ1bGxQYXRocy5mb3JFYWNoKGZ1bmN0aW9uKHIsYSl7aWYoIi8iIT09ci5zbGljZSgtMSkmJnIubWF0Y2goL19W''@;'; put 'put ''QkFfUFJPSkVDVF9DVVIvKSl7dmFyIG49ci5yZXBsYWNlKC9eW15cL10qLywiUiIpLnJlcGxhY2UoL1wvX1ZCQV9QUk9KRUNUX0NVUlx1MDAwMCovLCIiKTt2ZS51dGlscy5jZmJfYWRkKHQsbixlLkZpbGVJbmRleFthXS5jb250ZW50KX19KSx2ZS53cml0ZSh0KX0oZSkpfXZhciBmPXt9O3Jl''@;'; put 'put ''dHVybiBlLkZ1bGxQYXRocyYmZnVuY3Rpb24gbG0oZSx0LHIpe3ZhciBhPXZlLmZpbmQoZSwiLyFEb2N1bWVudFN1bW1hcnlJbmZvcm1hdGlvbiIpO2lmKGEmJmEuc2l6ZT4wKXRyeXt2YXIgbj1ScyhhLHhuLCIwMmQ1Y2RkNTljMmUxYjEwOTM5NzA4MDAyYjJjZjlhZSIpO2Zvcih2YXIgaSBp''@;'; put 'put ''biBuKXRbaV09bltpXX1jYXRjaChvKXtpZihyLldURil0aHJvdyBvfXZhciBzPXZlLmZpbmQoZSwiLyFTdW1tYXJ5SW5mb3JtYXRpb24iKTtpZihzJiZzLnNpemU+MCl0cnl7dmFyIGY9UnMocyxkbiwiZTA4NTlmZjJmOTRmNjgxMGFiOTEwODAwMmIyN2IzZDkiKTtmb3IodmFyIGMgaW4gZilu''@;'; put 'put ''dWxsPT10W2NdJiYodFtjXT1mW2NdKX1jYXRjaChvKXtpZihyLldURil0aHJvdyBvfXQuSGVhZGluZ1BhaXJzJiZ0LlRpdGxlc09mUGFydHMmJih3cyh0LkhlYWRpbmdQYWlycyx0LlRpdGxlc09mUGFydHMsdCxyKSxkZWxldGUgdC5IZWFkaW5nUGFpcnMsZGVsZXRlIHQuVGl0bGVzT2ZQYXJ0''@;'; put 'put ''cyl9KGUsZix0KSxuLlByb3BzPW4uQ3VzdHByb3BzPWYsdC5ib29rRmlsZXMmJihuLmNmYj1lKSxufXZhciAkYT17MDp7ZjpmdW5jdGlvbiBQdihlLHQpe3ZhciByPXt9LGE9ZS5sK3Q7ci5yPWUucmVhZF9zaGlmdCg0KSxlLmwrPTQ7dmFyIG49ZS5yZWFkX3NoaWZ0KDIpO2UubCs9MTt2YXIg''@;'; put 'put ''aT1lLnJlYWRfc2hpZnQoMSk7cmV0dXJuIGUubD1hLDcmaSYmKHIubGV2ZWw9NyZpKSwxNiZpJiYoci5oaWRkZW49ITApLDMyJmkmJihyLmhwdD1uLzIwKSxyfX0sMTp7ZjpmdW5jdGlvbiBYdihlKXtyZXR1cm5bSHIoZSldfX0sMjp7ZjpmdW5jdGlvbiBjMihlKXtyZXR1cm5bSHIoZSksdW4o''@;'; put 'put ''ZSksIm4iXX19LDM6e2Y6ZnVuY3Rpb24gcXYoZSl7cmV0dXJuW0hyKGUpLGUucmVhZF9zaGlmdCgxKSwiZSJdfX0sNDp7ZjpmdW5jdGlvbiBqdihlKXtyZXR1cm5bSHIoZSksZS5yZWFkX3NoaWZ0KDEpLCJiIl19fSw1OntmOmZ1bmN0aW9uIGkyKGUpe3JldHVybltIcihlKSxncihlKSwibiJd''@;'; put 'put ''fX0sNjp7ZjpmdW5jdGlvbiB4MihlKXtyZXR1cm5bSHIoZSksbXIoZSksInN0ciJdfX0sNzp7ZjpmdW5jdGlvbiByMihlKXtyZXR1cm5bSHIoZSksZS5yZWFkX3NoaWZ0KDQpLCJzIl19fSw4OntmOmZ1bmN0aW9uIHcyKGUsdCxyKXt2YXIgYT1lLmwrdCxuPUhyKGUpO24ucj1yWyIhcm93Il07''@;'; put 'put ''dmFyIHM9W24sbXIoZSksInN0ciJdO2lmKHIuY2VsbEZvcm11bGEpe2UubCs9Mjt2YXIgZj1DMChlLGEtZS5sLHIpO3NbM109a3IoZiwwLG4sci5zdXBib29rcyxyKX1lbHNlIGUubD1hO3JldHVybiBzfX0sOTp7ZjpmdW5jdGlvbiBfMihlLHQscil7dmFyIGE9ZS5sK3Qsbj1IcihlKTtuLnI9''@;'; put 'put ''clsiIXJvdyJdO3ZhciBzPVtuLGdyKGUpLCJuIl07aWYoci5jZWxsRm9ybXVsYSl7ZS5sKz0yO3ZhciBmPUMwKGUsYS1lLmwscik7c1szXT1rcihmLDAsbixyLnN1cGJvb2tzLHIpfWVsc2UgZS5sPWE7cmV0dXJuIHN9fSwxMDp7ZjpmdW5jdGlvbiBtMihlLHQscil7dmFyIGE9ZS5sK3Qsbj1I''@;'; put 'put ''cihlKTtuLnI9clsiIXJvdyJdO3ZhciBzPVtuLGUucmVhZF9zaGlmdCgxKSwiYiJdO2lmKHIuY2VsbEZvcm11bGEpe2UubCs9Mjt2YXIgZj1DMChlLGEtZS5sLHIpO3NbM109a3IoZiwwLG4sci5zdXBib29rcyxyKX1lbHNlIGUubD1hO3JldHVybiBzfX0sMTE6e2Y6ZnVuY3Rpb24gZzIoZSx0''@;'; put 'put ''LHIpe3ZhciBhPWUubCt0LG49SHIoZSk7bi5yPXJbIiFyb3ciXTt2YXIgcz1bbixlLnJlYWRfc2hpZnQoMSksImUiXTtpZihyLmNlbGxGb3JtdWxhKXtlLmwrPTI7dmFyIGY9QzAoZSxhLWUubCxyKTtzWzNdPWtyKGYsMCxuLHIuc3VwYm9va3Mscil9ZWxzZSBlLmw9YTtyZXR1cm4gc319LDEy''@;'; put 'put ''OntmOmZ1bmN0aW9uIHp2KGUpe3JldHVybltNdChlKV19fSwxMzp7ZjpmdW5jdGlvbiBsMihlKXtyZXR1cm5bTXQoZSksdW4oZSksIm4iXX19LDE0OntmOmZ1bmN0aW9uIFF2KGUpe3JldHVybltNdChlKSxlLnJlYWRfc2hpZnQoMSksImUiXX19LDE1OntmOmZ1bmN0aW9uIFl2KGUpe3JldHVy''@;'; put 'put ''bltNdChlKSxlLnJlYWRfc2hpZnQoMSksImIiXX19LDE2OntmOkJmfSwxNzp7ZjpmdW5jdGlvbiB2MihlKXtyZXR1cm5bTXQoZSksbXIoZSksInN0ciJdfX0sMTg6e2Y6ZnVuY3Rpb24gYTIoZSl7cmV0dXJuW010KGUpLGUucmVhZF9zaGlmdCg0KSwicyJdfX0sMTk6e2Y6c259LDIwOnt9LDIx''@;'; put 'put ''Ont9LDIyOnt9LDIzOnt9LDI0Ont9LDI1Ont9LDI2Ont9LDI3Ont9LDI4Ont9LDI5Ont9LDMwOnt9LDMxOnt9LDMyOnt9LDMzOnt9LDM0Ont9LDM1OntUOjF9LDM2OntUOi0xfSwzNzp7VDoxfSwzODp7VDotMX0sMzk6e2Y6ZnVuY3Rpb24gcHAoZSx0LHIpe3ZhciBhPWUubCt0O2UubCs9NCxl''@;'; put 'put ''LmwrPTE7dmFyIG49ZS5yZWFkX3NoaWZ0KDQpLGk9am8oZSkscz1ldihlLDAsciksZj1mbihlKTtlLmw9YTt2YXIgYz17TmFtZTppLFB0ZzpzfTtyZXR1cm4gbjwyNjg0MzU0NTUmJihjLlNoZWV0PW4pLGYmJihjLkNvbW1lbnQ9ZiksY319LDQwOnt9LDQyOnt9LDQzOntmOmZ1bmN0aW9uIHYx''@;'; put 'put ''KGUsdCxyKXt2YXIgYT17fTthLnN6PWUucmVhZF9zaGlmdCgyKS8yMDt2YXIgbj1mdW5jdGlvbiBZbyhlKXt2YXIgdD1lLnJlYWRfc2hpZnQoMSk7cmV0dXJuIGUubCsrLHtmQm9sZDoxJnQsZkl0YWxpYzoyJnQsZlVuZGVybGluZTo0JnQsZlN0cmlrZW91dDo4JnQsZk91dGxpbmU6MTYmdCxm''@;'; put 'put ''U2hhZG93OjMyJnQsZkNvbmRlbnNlOjY0JnQsZkV4dGVuZDoxMjgmdH19KGUpO3N3aXRjaChuLmZJdGFsaWMmJihhLml0YWxpYz0xKSxuLmZDb25kZW5zZSYmKGEuY29uZGVuc2U9MSksbi5mRXh0ZW5kJiYoYS5leHRlbmQ9MSksbi5mU2hhZG93JiYoYS5zaGFkb3c9MSksbi5mT3V0bGluZSYm''@;'; put 'put ''KGEub3V0bGluZT0xKSxuLmZTdHJpa2VvdXQmJihhLnN0cmlrZT0xKSw3MDA9PT1lLnJlYWRfc2hpZnQoMikmJihhLmJvbGQ9MSksZS5yZWFkX3NoaWZ0KDIpKXtjYXNlIDE6YS52ZXJ0QWxpZ249InN1cGVyc2NyaXB0IjticmVhaztjYXNlIDI6YS52ZXJ0QWxpZ249InN1YnNjcmlwdCJ9dmFy''@;'; put 'put ''IHM9ZS5yZWFkX3NoaWZ0KDEpOzAhPXMmJihhLnVuZGVybGluZT1zKTt2YXIgZj1lLnJlYWRfc2hpZnQoMSk7Zj4wJiYoYS5mYW1pbHk9Zik7dmFyIGM9ZS5yZWFkX3NoaWZ0KDEpO3N3aXRjaChjPjAmJihhLmNoYXJzZXQ9YyksZS5sKyssYS5jb2xvcj1mdW5jdGlvbiBLbyhlKXt2YXIgdD17''@;'; put 'put ''fSxhPWUucmVhZF9zaGlmdCgxKT4+PjEsbj1lLnJlYWRfc2hpZnQoMSksaT1lLnJlYWRfc2hpZnQoMiwiaSIpLHM9ZS5yZWFkX3NoaWZ0KDEpLGY9ZS5yZWFkX3NoaWZ0KDEpLGM9ZS5yZWFkX3NoaWZ0KDEpO3N3aXRjaChlLmwrKyxhKXtjYXNlIDA6dC5hdXRvPTE7YnJlYWs7Y2FzZSAxOnQu''@;'; put 'put ''aW5kZXg9bjt2YXIgbz1WdFtuXTtvJiYodC5yZ2I9YmEobykpO2JyZWFrO2Nhc2UgMjp0LnJnYj1iYShbcyxmLGNdKTticmVhaztjYXNlIDM6dC50aGVtZT1ufXJldHVybiAwIT1pJiYodC50aW50PWk+MD9pLzMyNzY3OmkvMzI3NjgpLHR9KGUpLGUucmVhZF9zaGlmdCgxKSl7Y2FzZSAxOmEu''@;'; put 'put ''c2NoZW1lPSJtYWpvciI7YnJlYWs7Y2FzZSAyOmEuc2NoZW1lPSJtaW5vciJ9cmV0dXJuIGEubmFtZT1tcihlKSxhfX0sNDQ6e2Y6ZnVuY3Rpb24geDEoZSx0KXtyZXR1cm5bZS5yZWFkX3NoaWZ0KDIpLG1yKGUpXX19LDQ1OntmOmcxfSw0Njp7Zjp3MX0sNDc6e2Y6ZnVuY3Rpb24gXzEoZSx0''@;'; put 'put ''KXt2YXIgcj1lLmwrdCxhPWUucmVhZF9zaGlmdCgyKSxuPWUucmVhZF9zaGlmdCgyKTtyZXR1cm4gZS5sPXIse2l4ZmU6YSxudW1GbXRJZDpufX19LDQ4Ont9LDQ5OntmOmZ1bmN0aW9uIEhvKGUpe3JldHVybiBlLnJlYWRfc2hpZnQoNCwiaSIpfX0sNTA6e30sNTE6e2Y6ZnVuY3Rpb24gZXgo''@;'; put 'put ''ZSl7Zm9yKHZhciB0PVtdLHI9ZS5yZWFkX3NoaWZ0KDQpO3ItLSA+MDspdC5wdXNoKFtlLnJlYWRfc2hpZnQoNCksZS5yZWFkX3NoaWZ0KDQpXSk7cmV0dXJuIHR9fSw1Mjp7VDoxfSw1Mzp7VDotMX0sNTQ6e1Q6MX0sNTU6e1Q6LTF9LDU2OntUOjF9LDU3OntUOi0xfSw1ODp7fSw1OTp7fSw2''@;'; put 'put ''MDp7ZjpRc30sNjI6e2Y6ZnVuY3Rpb24gaDIoZSl7cmV0dXJuW0hyKGUpLHNuKGUpLCJpcyJdfX0sNjM6e2Y6ZnVuY3Rpb24gb3goZSl7dmFyIHQ9e307dC5pPWUucmVhZF9zaGlmdCg0KTt2YXIgcj17fTtyLnI9ZS5yZWFkX3NoaWZ0KDQpLHIuYz1lLnJlYWRfc2hpZnQoNCksdC5yPWdlKHIp''@;'; put 'put ''O3ZhciBhPWUucmVhZF9zaGlmdCgxKTtyZXR1cm4gMiZhJiYodC5sPSIxIiksOCZhJiYodC5hPSIxIiksdH19LDY0OntmOmZ1bmN0aW9uIEwyKCl7fX0sNjU6e30sNjY6e30sNjc6e30sNjg6e30sNjk6e30sNzA6e30sMTI4Ont9LDEyOTp7VDoxfSwxMzA6e1Q6LTF9LDEzMTp7VDoxLGY6cHIs''@;'; put 'put ''cDowfSwxMzI6e1Q6LTF9LDEzMzp7VDoxfSwxMzQ6e1Q6LTF9LDEzNTp7VDoxfSwxMzY6e1Q6LTF9LDEzNzp7VDoxLGY6ZnVuY3Rpb24gUjIoZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpO3JldHVybiBlLmwrPTI4LHtSVEw6MzImdH19fSwxMzg6e1Q6LTF9LDEzOTp7VDoxfSwxNDA6e1Q6LTF9''@;'; put 'put ''LDE0MTp7VDoxfSwxNDI6e1Q6LTF9LDE0Mzp7VDoxfSwxNDQ6e1Q6LTF9LDE0NTp7VDoxfSwxNDY6e1Q6LTF9LDE0Nzp7ZjpmdW5jdGlvbiBIdihlLHQpe3ZhciByPXt9LGE9ZVtlLmxdO3JldHVybisrZS5sLHIuYWJvdmU9ISg2NCZhKSxyLmxlZnQ9ISgxMjgmYSksZS5sKz0xOCxyLm5hbWU9''@;'; put 'put ''JG8oZSx0LTE5KSxyfX0sMTQ4OntmOk12LHA6MTZ9LDE1MTp7ZjpmdW5jdGlvbiB5Migpe319LDE1Mjp7fSwxNTM6e2Y6ZnVuY3Rpb24geHAoZSx0KXt2YXIgcj17fSxhPWUucmVhZF9zaGlmdCg0KTtyLmRlZmF1bHRUaGVtZVZlcnNpb249ZS5yZWFkX3NoaWZ0KDQpO3ZhciBuPXQ+OD9tcihl''@;'; put 'put ''KToiIjtyZXR1cm4gbi5sZW5ndGg+MCYmKHIuQ29kZU5hbWU9biksci5hdXRvQ29tcHJlc3NQaWN0dXJlcz0hISg2NTUzNiZhKSxyLmJhY2t1cEZpbGU9ISEoNjQmYSksci5jaGVja0NvbXBhdGliaWxpdHk9ISEoNDA5NiZhKSxyLmRhdGUxOTA0PSEhKDEmYSksci5maWx0ZXJQcml2YWN5PSEh''@;'; put 'put ''KDgmYSksci5oaWRlUGl2b3RGaWVsZExpc3Q9ISEoMTAyNCZhKSxyLnByb21wdGVkU29sdXRpb25zPSEhKDE2JmEpLHIucHVibGlzaEl0ZW1zPSEhKDIwNDgmYSksci5yZWZyZXNoQWxsQ29ubmVjdGlvbnM9ISEoMjYyMTQ0JmEpLHIuc2F2ZUV4dGVybmFsTGlua1ZhbHVlcz0hISgxMjgmYSks''@;'; put 'put ''ci5zaG93Qm9yZGVyVW5zZWxlY3RlZFRhYmxlcz0hISg0JmEpLHIuc2hvd0lua0Fubm90YXRpb249ISEoMzImYSksci5zaG93T2JqZWN0cz1bImFsbCIsInBsYWNlaG9sZGVycyIsIm5vbmUiXVthPj4xMyYzXSxyLnNob3dQaXZvdENoYXJ0RmlsdGVyPSEhKDMyNzY4JmEpLHIudXBkYXRlTGlu''@;'; put 'put ''a3M9WyJ1c2VyU2V0IiwibmV2ZXIiLCJhbHdheXMiXVthPj44JjNdLHJ9fSwxNTQ6e30sMTU1Ont9LDE1Njp7ZjpmdW5jdGlvbiB1cChlLHQpe3ZhciByPXt9O3JldHVybiByLkhpZGRlbj1lLnJlYWRfc2hpZnQoNCksci5pVGFiSUQ9ZS5yZWFkX3NoaWZ0KDQpLHIuc3RyUmVsSUQ9b24oZSx0''@;'; put 'put ''LTgpLHIubmFtZT1tcihlKSxyfX0sMTU3Ont9LDE1ODp7fSwxNTk6e1Q6MSxmOmZ1bmN0aW9uIE9oKGUpe3JldHVybltlLnJlYWRfc2hpZnQoNCksZS5yZWFkX3NoaWZ0KDQpXX19LDE2MDp7VDotMX0sMTYxOntUOjEsZjpXdH0sMTYyOntUOi0xfSwxNjM6e1Q6MX0sMTY0OntUOi0xfSwxNjU6''@;'; put 'put ''e1Q6MX0sMTY2OntUOi0xfSwxNjc6e30sMTY4Ont9LDE2OTp7fSwxNzA6e30sMTcxOnt9LDE3Mjp7VDoxfSwxNzM6e1Q6LTF9LDE3NDp7fSwxNzU6e30sMTc2OntmOmsyfSwxNzc6e1Q6MX0sMTc4OntUOi0xfSwxNzk6e1Q6MX0sMTgwOntUOi0xfSwxODE6e1Q6MX0sMTgyOntUOi0xfSwxODM6''@;'; put 'put ''e1Q6MX0sMTg0OntUOi0xfSwxODU6e1Q6MX0sMTg2OntUOi0xfSwxODc6e1Q6MX0sMTg4OntUOi0xfSwxODk6e1Q6MX0sMTkwOntUOi0xfSwxOTE6e1Q6MX0sMTkyOntUOi0xfSwxOTM6e1Q6MX0sMTk0OntUOi0xfSwxOTU6e1Q6MX0sMTk2OntUOi0xfSwxOTc6e1Q6MX0sMTk4OntUOi0xfSwx''@;'; put 'put ''OTk6e1Q6MX0sMjAwOntUOi0xfSwyMDE6e1Q6MX0sMjAyOntUOi0xfSwyMDM6e1Q6MX0sMjA0OntUOi0xfSwyMDU6e1Q6MX0sMjA2OntUOi0xfSwyMDc6e1Q6MX0sMjA4OntUOi0xfSwyMDk6e1Q6MX0sMjEwOntUOi0xfSwyMTE6e1Q6MX0sMjEyOntUOi0xfSwyMTM6e1Q6MX0sMjE0OntUOi0x''@;'; put 'put ''fSwyMTU6e1Q6MX0sMjE2OntUOi0xfSwyMTc6e1Q6MX0sMjE4OntUOi0xfSwyMTk6e1Q6MX0sMjIwOntUOi0xfSwyMjE6e1Q6MX0sMjIyOntUOi0xfSwyMjM6e1Q6MX0sMjI0OntUOi0xfSwyMjU6e1Q6MX0sMjI2OntUOi0xfSwyMjc6e1Q6MX0sMjI4OntUOi0xfSwyMjk6e1Q6MX0sMjMwOntU''@;'; put 'put ''Oi0xfSwyMzE6e1Q6MX0sMjMyOntUOi0xfSwyMzM6e1Q6MX0sMjM0OntUOi0xfSwyMzU6e1Q6MX0sMjM2OntUOi0xfSwyMzc6e1Q6MX0sMjM4OntUOi0xfSwyMzk6e1Q6MX0sMjQwOntUOi0xfSwyNDE6e1Q6MX0sMjQyOntUOi0xfSwyNDM6e1Q6MX0sMjQ0OntUOi0xfSwyNDU6e1Q6MX0sMjQ2''@;'; put 'put ''OntUOi0xfSwyNDc6e1Q6MX0sMjQ4OntUOi0xfSwyNDk6e1Q6MX0sMjUwOntUOi0xfSwyNTE6e1Q6MX0sMjUyOntUOi0xfSwyNTM6e1Q6MX0sMjU0OntUOi0xfSwyNTU6e1Q6MX0sMjU2OntUOi0xfSwyNTc6e1Q6MX0sMjU4OntUOi0xfSwyNTk6e1Q6MX0sMjYwOntUOi0xfSwyNjE6e1Q6MX0s''@;'; put 'put ''MjYyOntUOi0xfSwyNjM6e1Q6MX0sMjY0OntUOi0xfSwyNjU6e1Q6MX0sMjY2OntUOi0xfSwyNjc6e1Q6MX0sMjY4OntUOi0xfSwyNjk6e1Q6MX0sMjcwOntUOi0xfSwyNzE6e1Q6MX0sMjcyOntUOi0xfSwyNzM6e1Q6MX0sMjc0OntUOi0xfSwyNzU6e1Q6MX0sMjc2OntUOi0xfSwyNzc6e30s''@;'; put 'put ''Mjc4OntUOjF9LDI3OTp7VDotMX0sMjgwOntUOjF9LDI4MTp7VDotMX0sMjgyOntUOjF9LDI4Mzp7VDoxfSwyODQ6e1Q6LTF9LDI4NTp7VDoxfSwyODY6e1Q6LTF9LDI4Nzp7VDoxfSwyODg6e1Q6LTF9LDI4OTp7VDoxfSwyOTA6e1Q6LTF9LDI5MTp7VDoxfSwyOTI6e1Q6LTF9LDI5Mzp7VDox''@;'; put 'put ''fSwyOTQ6e1Q6LTF9LDI5NTp7VDoxfSwyOTY6e1Q6LTF9LDI5Nzp7VDoxfSwyOTg6e1Q6LTF9LDI5OTp7VDoxfSwzMDA6e1Q6LTF9LDMwMTp7VDoxfSwzMDI6e1Q6LTF9LDMwMzp7VDoxfSwzMDQ6e1Q6LTF9LDMwNTp7VDoxfSwzMDY6e1Q6LTF9LDMwNzp7VDoxfSwzMDg6e1Q6LTF9LDMwOTp7''@;'; put 'put ''VDoxfSwzMTA6e1Q6LTF9LDMxMTp7VDoxfSwzMTI6e1Q6LTF9LDMxMzp7VDotMX0sMzE0OntUOjF9LDMxNTp7VDotMX0sMzE2OntUOjF9LDMxNzp7VDotMX0sMzE4OntUOjF9LDMxOTp7VDotMX0sMzIwOntUOjF9LDMyMTp7VDotMX0sMzIyOntUOjF9LDMyMzp7VDotMX0sMzI0OntUOjF9LDMy''@;'; put 'put ''NTp7VDotMX0sMzI2OntUOjF9LDMyNzp7VDotMX0sMzI4OntUOjF9LDMyOTp7VDotMX0sMzMwOntUOjF9LDMzMTp7VDotMX0sMzMyOntUOjF9LDMzMzp7VDotMX0sMzM0OntUOjF9LDMzNTp7ZjpmdW5jdGlvbiBaMShlLHQpe3JldHVybntmbGFnczplLnJlYWRfc2hpZnQoNCksdmVyc2lvbjpl''@;'; put 'put ''LnJlYWRfc2hpZnQoNCksbmFtZTptcihlKX19fSwzMzY6e1Q6LTF9LDMzNzp7ZjpmdW5jdGlvbiBheChlKXtyZXR1cm4gZS5sKz00LDAhPWUucmVhZF9zaGlmdCg0KX0sVDoxfSwzMzg6e1Q6LTF9LDMzOTp7VDoxfSwzNDA6e1Q6LTF9LDM0MTp7VDoxfSwzNDI6e1Q6LTF9LDM0Mzp7VDoxfSwz''@;'; put 'put ''NDQ6e1Q6LTF9LDM0NTp7VDoxfSwzNDY6e1Q6LTF9LDM0Nzp7VDoxfSwzNDg6e1Q6LTF9LDM0OTp7VDoxfSwzNTA6e1Q6LTF9LDM1MTp7fSwzNTI6e30sMzUzOntUOjF9LDM1NDp7VDotMX0sMzU1OntmOm9ufSwzNTc6e30sMzU4Ont9LDM1OTp7fSwzNjA6e1Q6MX0sMzYxOnt9LDM2Mjp7Zjpx''@;'; put 'put ''c30sMzYzOnt9LDM2NDp7fSwzNjY6e30sMzY3Ont9LDM2ODp7fSwzNjk6e30sMzcwOnt9LDM3MTp7fSwzNzI6e1Q6MX0sMzczOntUOi0xfSwzNzQ6e1Q6MX0sMzc1OntUOi0xfSwzNzY6e1Q6MX0sMzc3OntUOi0xfSwzNzg6e1Q6MX0sMzc5OntUOi0xfSwzODA6e1Q6MX0sMzgxOntUOi0xfSwz''@;'; put 'put ''ODI6e1Q6MX0sMzgzOntUOi0xfSwzODQ6e1Q6MX0sMzg1OntUOi0xfSwzODY6e1Q6MX0sMzg3OntUOi0xfSwzODg6e1Q6MX0sMzg5OntUOi0xfSwzOTA6e1Q6MX0sMzkxOntUOi0xfSwzOTI6e1Q6MX0sMzkzOntUOi0xfSwzOTQ6e1Q6MX0sMzk1OntUOi0xfSwzOTY6e30sMzk3Ont9LDM5ODp7''@;'; put 'put ''fSwzOTk6e30sNDAwOnt9LDQwMTp7VDoxfSw0MDM6e30sNDA0Ont9LDQwNTp7fSw0MDY6e30sNDA3Ont9LDQwODp7fSw0MDk6e30sNDEwOnt9LDQxMTp7fSw0MTI6e30sNDEzOnt9LDQxNDp7fSw0MTU6e30sNDE2Ont9LDQxNzp7fSw0MTg6e30sNDE5Ont9LDQyMDp7fSw0MjE6e30sNDIyOntU''@;'; put 'put ''OjF9LDQyMzp7VDoxfSw0MjQ6e1Q6LTF9LDQyNTp7VDotMX0sNDI2OntmOmZ1bmN0aW9uIEEyKGUsdCxyKXt2YXIgYT1lLmwrdCxuPW9zKGUpLGk9ZS5yZWFkX3NoaWZ0KDEpLHM9W25dO2lmKHNbMl09aSxyLmNlbGxGb3JtdWxhKXt2YXIgZj1RZChlLGEtZS5sLHIpO3NbMV09Zn1lbHNlIGUu''@;'; put 'put ''bD1hO3JldHVybiBzfX0sNDI3OntmOmZ1bmN0aW9uIEMyKGUsdCxyKXt2YXIgYT1lLmwrdCxpPVtXdChlLDE2KV07aWYoci5jZWxsRm9ybXVsYSl7dmFyIHM9cnYoZSxhLWUubCxyKTtpWzFdPXMsZS5sPWF9ZWxzZSBlLmw9YTtyZXR1cm4gaX19LDQyODp7fSw0Mjk6e1Q6MX0sNDMwOntUOi0x''@;'; put 'put ''fSw0MzE6e1Q6MX0sNDMyOntUOi0xfSw0MzM6e1Q6MX0sNDM0OntUOi0xfSw0MzU6e1Q6MX0sNDM2OntUOi0xfSw0Mzc6e1Q6MX0sNDM4OntUOi0xfSw0Mzk6e1Q6MX0sNDQwOntUOi0xfSw0NDE6e1Q6MX0sNDQyOntUOi0xfSw0NDM6e1Q6MX0sNDQ0OntUOi0xfSw0NDU6e1Q6MX0sNDQ2OntU''@;'; put 'put ''Oi0xfSw0NDc6e1Q6MX0sNDQ4OntUOi0xfSw0NDk6e1Q6MX0sNDUwOntUOi0xfSw0NTE6e1Q6MX0sNDUyOntUOi0xfSw0NTM6e1Q6MX0sNDU0OntUOi0xfSw0NTU6e1Q6MX0sNDU2OntUOi0xfSw0NTc6e1Q6MX0sNDU4OntUOi0xfSw0NTk6e1Q6MX0sNDYwOntUOi0xfSw0NjE6e1Q6MX0sNDYy''@;'; put 'put ''OntUOi0xfSw0NjM6e1Q6MX0sNDY0OntUOi0xfSw0NjU6e1Q6MX0sNDY2OntUOi0xfSw0Njc6e1Q6MX0sNDY4OntUOi0xfSw0Njk6e1Q6MX0sNDcwOntUOi0xfSw0NzE6e30sNDcyOnt9LDQ3Mzp7VDoxfSw0NzQ6e1Q6LTF9LDQ3NTp7fSw0NzY6e2Y6ZnVuY3Rpb24gTzIoZSl7dmFyIHQ9e307''@;'; put 'put ''cmV0dXJuIE1mLmZvckVhY2goZnVuY3Rpb24ocil7dFtyXT1ncihlKX0pLHR9fSw0Nzc6e30sNDc4Ont9LDQ3OTp7VDoxfSw0ODA6e1Q6LTF9LDQ4MTp7VDoxfSw0ODI6e1Q6LTF9LDQ4Mzp7VDoxfSw0ODQ6e1Q6LTF9LDQ4NTp7ZjpmdW5jdGlvbiBXdigpe319LDQ4Njp7VDoxfSw0ODc6e1Q6''@;'; put 'put ''LTF9LDQ4ODp7VDoxfSw0ODk6e1Q6LTF9LDQ5MDp7VDoxfSw0OTE6e1Q6LTF9LDQ5Mjp7VDoxfSw0OTM6e1Q6LTF9LDQ5NDp7ZjpmdW5jdGlvbiBTMihlLHQpe3ZhciByPWUubCt0LGE9V3QoZSwxNiksbj1mbihlKSxpPW1yKGUpLHM9bXIoZSksZj1tcihlKTtlLmw9cjt2YXIgYz17cmZ4OmEs''@;'; put 'put ''cmVsSWQ6bixsb2M6aSxkaXNwbGF5OmZ9O3JldHVybiBzJiYoYy5Ub29sdGlwPXMpLGN9fSw0OTU6e1Q6MX0sNDk2OntUOi0xfSw0OTc6e1Q6MX0sNDk4OntUOi0xfSw0OTk6e30sNTAwOntUOjF9LDUwMTp7VDotMX0sNTAyOntUOjF9LDUwMzp7VDotMX0sNTA0Ont9LDUwNTp7VDoxfSw1MDY6''@;'; put 'put ''e1Q6LTF9LDUwNzp7fSw1MDg6e1Q6MX0sNTA5OntUOi0xfSw1MTA6e1Q6MX0sNTExOntUOi0xfSw1MTI6e30sNTEzOnt9LDUxNDp7VDoxfSw1MTU6e1Q6LTF9LDUxNjp7VDoxfSw1MTc6e1Q6LTF9LDUxODp7VDoxfSw1MTk6e1Q6LTF9LDUyMDp7VDoxfSw1MjE6e1Q6LTF9LDUyMjp7fSw1MjM6''@;'; put 'put ''e30sNTI0Ont9LDUyNTp7fSw1MjY6e30sNTI3Ont9LDUyODp7VDoxfSw1Mjk6e1Q6LTF9LDUzMDp7VDoxfSw1MzE6e1Q6LTF9LDUzMjp7VDoxfSw1MzM6e1Q6LTF9LDUzNDp7fSw1MzU6e30sNTM2Ont9LDUzNzp7fSw1Mzg6e1Q6MX0sNTM5OntUOi0xfSw1NDA6e1Q6MX0sNTQxOntUOi0xfSw1''@;'; put 'put ''NDI6e1Q6MX0sNTQ4Ont9LDU0OTp7fSw1NTA6e2Y6b259LDU1MTp7fSw1NTI6e30sNTUzOnt9LDU1NDp7VDoxfSw1NTU6e1Q6LTF9LDU1Njp7VDoxfSw1NTc6e1Q6LTF9LDU1ODp7VDoxfSw1NTk6e1Q6LTF9LDU2MDp7VDoxfSw1NjE6e1Q6LTF9LDU2Mjp7fSw1NjQ6e30sNTY1OntUOjF9LDU2''@;'; put 'put ''Njp7VDotMX0sNTY5OntUOjF9LDU3MDp7VDotMX0sNTcyOnt9LDU3Mzp7VDoxfSw1NzQ6e1Q6LTF9LDU3Nzp7fSw1Nzg6e30sNTc5Ont9LDU4MDp7fSw1ODE6e30sNTgyOnt9LDU4Mzp7fSw1ODQ6e30sNTg1Ont9LDU4Njp7fSw1ODc6e30sNTg4OntUOi0xfSw1ODk6e30sNTkwOntUOjF9LDU5''@;'; put 'put ''MTp7VDotMX0sNTkyOntUOjF9LDU5Mzp7VDotMX0sNTk0OntUOjF9LDU5NTp7VDotMX0sNTk2Ont9LDU5Nzp7VDoxfSw1OTg6e1Q6LTF9LDU5OTp7VDoxfSw2MDA6e1Q6LTF9LDYwMTp7VDoxfSw2MDI6e1Q6LTF9LDYwMzp7VDoxfSw2MDQ6e1Q6LTF9LDYwNTp7VDoxfSw2MDY6e1Q6LTF9LDYw''@;'; put 'put ''Nzp7fSw2MDg6e1Q6MX0sNjA5OntUOi0xfSw2MTA6e30sNjExOntUOjF9LDYxMjp7VDotMX0sNjEzOntUOjF9LDYxNDp7VDotMX0sNjE1OntUOjF9LDYxNjp7VDotMX0sNjE3OntUOjF9LDYxODp7VDotMX0sNjE5OntUOjF9LDYyMDp7VDotMX0sNjI1Ont9LDYyNjp7VDoxfSw2Mjc6e1Q6LTF9''@;'; put 'put ''LDYyODp7VDoxfSw2Mjk6e1Q6LTF9LDYzMDp7VDoxfSw2MzE6e1Q6LTF9LDYzMjp7Zjp3eH0sNjMzOntUOjF9LDYzNDp7VDotMX0sNjM1OntUOjEsZjpmdW5jdGlvbiBneChlKXt2YXIgdD17fTt0LmlhdXRob3I9ZS5yZWFkX3NoaWZ0KDQpO3ZhciByPVd0KGUsMTYpO3JldHVybiB0LnJmeD1y''@;'; put 'put ''LnMsdC5yZWY9Z2Uoci5zKSxlLmwrPTE2LHR9fSw2MzY6e1Q6LTF9LDYzNzp7ZjpHb30sNjM4OntUOjF9LDYzOTp7fSw2NDA6e1Q6LTF9LDY0MTp7VDoxfSw2NDI6e1Q6LTF9LDY0Mzp7VDoxfSw2NDQ6e30sNjQ1OntUOi0xfSw2NDY6e1Q6MX0sNjQ4OntUOjF9LDY0OTp7fSw2NTA6e1Q6LTF9''@;'; put 'put ''LDY1MTp7ZjpmdW5jdGlvbiBlcChlLHQpe3JldHVybiBlLmwrPTEwLHtuYW1lOm1yKGUpfX19LDY1Mjp7fSw2NTM6e1Q6MX0sNjU0OntUOi0xfSw2NTU6e1Q6MX0sNjU2OntUOi0xfSw2NTc6e1Q6MX0sNjU4OntUOi0xfSw2NTk6e30sNjYwOntUOjF9LDY2MTp7fSw2NjI6e1Q6LTF9LDY2Mzp7''@;'; put 'put ''fSw2NjQ6e1Q6MX0sNjY1Ont9LDY2Njp7VDotMX0sNjY3Ont9LDY2ODp7fSw2Njk6e30sNjcxOntUOjF9LDY3Mjp7VDotMX0sNjczOntUOjF9LDY3NDp7VDotMX0sNjc1Ont9LDY3Njp7fSw2Nzc6e30sNjc4Ont9LDY3OTp7fSw2ODA6e30sNjgxOnt9LDEwMjQ6e30sMTAyNTp7fSwxMDI2OntU''@;'; put 'put ''OjF9LDEwMjc6e1Q6LTF9LDEwMjg6e1Q6MX0sMTAyOTp7VDotMX0sMTAzMDp7fSwxMDMxOntUOjF9LDEwMzI6e1Q6LTF9LDEwMzM6e1Q6MX0sMTAzNDp7VDotMX0sMTAzNTp7fSwxMDM2Ont9LDEwMzc6e30sMTAzODp7VDoxfSwxMDM5OntUOi0xfSwxMDQwOnt9LDEwNDE6e1Q6MX0sMTA0Mjp7''@;'; put 'put ''VDotMX0sMTA0Mzp7fSwxMDQ0Ont9LDEwNDU6e30sMTA0Njp7VDoxfSwxMDQ3OntUOi0xfSwxMDQ4OntUOjF9LDEwNDk6e1Q6LTF9LDEwNTA6e30sMTA1MTp7VDoxfSwxMDUyOntUOjF9LDEwNTM6e2Y6ZnVuY3Rpb24gQjIoKXt9fSwxMDU0OntUOjF9LDEwNTU6e30sMTA1Njp7VDoxfSwxMDU3''@;'; put 'put ''OntUOi0xfSwxMDU4OntUOjF9LDEwNTk6e1Q6LTF9LDEwNjE6e30sMTA2Mjp7VDoxfSwxMDYzOntUOi0xfSwxMDY0OntUOjF9LDEwNjU6e1Q6LTF9LDEwNjY6e1Q6MX0sMTA2Nzp7VDotMX0sMTA2ODp7VDoxfSwxMDY5OntUOi0xfSwxMDcwOntUOjF9LDEwNzE6e1Q6LTF9LDEwNzI6e1Q6MX0s''@;'; put 'put ''MTA3Mzp7VDotMX0sMTA3NTp7VDoxfSwxMDc2OntUOi0xfSwxMDc3OntUOjF9LDEwNzg6e1Q6LTF9LDEwNzk6e1Q6MX0sMTA4MDp7VDotMX0sMTA4MTp7VDoxfSwxMDgyOntUOi0xfSwxMDgzOntUOjF9LDEwODQ6e1Q6LTF9LDEwODU6e30sMTA4Njp7VDoxfSwxMDg3OntUOi0xfSwxMDg4OntU''@;'; put 'put ''OjF9LDEwODk6e1Q6LTF9LDEwOTA6e1Q6MX0sMTA5MTp7VDotMX0sMTA5Mjp7VDoxfSwxMDkzOntUOi0xfSwxMDk0OntUOjF9LDEwOTU6e1Q6LTF9LDEwOTY6e30sMTA5Nzp7VDoxfSwxMDk4Ont9LDEwOTk6e1Q6LTF9LDExMDA6e1Q6MX0sMTEwMTp7VDotMX0sMTEwMjp7fSwxMTAzOnt9LDEx''@;'; put 'put ''MDQ6e30sMTEwNTp7fSwxMTExOnt9LDExMTI6e30sMTExMzp7VDoxfSwxMTE0OntUOi0xfSwxMTE1OntUOjF9LDExMTY6e1Q6LTF9LDExMTc6e30sMTExODp7VDoxfSwxMTE5OntUOi0xfSwxMTIwOntUOjF9LDExMjE6e1Q6LTF9LDExMjI6e1Q6MX0sMTEyMzp7VDotMX0sMTEyNDp7VDoxfSwx''@;'; put 'put ''MTI1OntUOi0xfSwxMTI2Ont9LDExMjg6e1Q6MX0sMTEyOTp7VDotMX0sMTEzMDp7fSwxMTMxOntUOjF9LDExMzI6e1Q6LTF9LDExMzM6e1Q6MX0sMTEzNDp7VDotMX0sMTEzNTp7VDoxfSwxMTM2OntUOi0xfSwxMTM3OntUOjF9LDExMzg6e1Q6LTF9LDExMzk6e1Q6MX0sMTE0MDp7VDotMX0s''@;'; put 'put ''MTE0MTp7fSwxMTQyOntUOjF9LDExNDM6e1Q6LTF9LDExNDQ6e1Q6MX0sMTE0NTp7VDotMX0sMTE0Njp7fSwxMTQ3OntUOjF9LDExNDg6e1Q6LTF9LDExNDk6e1Q6MX0sMTE1MDp7VDotMX0sMTE1Mjp7VDoxfSwxMTUzOntUOi0xfSwxMTU0OntUOi0xfSwxMTU1OntUOi0xfSwxMTU2OntUOi0x''@;'; put 'put ''fSwxMTU3OntUOjF9LDExNTg6e1Q6LTF9LDExNTk6e1Q6MX0sMTE2MDp7VDotMX0sMTE2MTp7VDoxfSwxMTYyOntUOi0xfSwxMTYzOntUOjF9LDExNjQ6e1Q6LTF9LDExNjU6e1Q6MX0sMTE2Njp7VDotMX0sMTE2Nzp7VDoxfSwxMTY4OntUOi0xfSwxMTY5OntUOjF9LDExNzA6e1Q6LTF9LDEx''@;'; put 'put ''NzE6e30sMTE3Mjp7VDoxfSwxMTczOntUOi0xfSwxMTc3Ont9LDExNzg6e1Q6MX0sMTE4MDp7fSwxMTgxOnt9LDExODI6e30sMjA0ODp7VDoxfSwyMDQ5OntUOi0xfSwyMDUwOnt9LDIwNTE6e1Q6MX0sMjA1Mjp7VDotMX0sMjA1Mzp7fSwyMDU0Ont9LDIwNTU6e1Q6MX0sMjA1Njp7VDotMX0s''@;'; put 'put ''MjA1Nzp7VDoxfSwyMDU4OntUOi0xfSwyMDYwOnt9LDIwNjc6e30sMjA2ODp7VDoxfSwyMDY5OntUOi0xfSwyMDcwOnt9LDIwNzE6e30sMjA3Mjp7VDoxfSwyMDczOntUOi0xfSwyMDc1Ont9LDIwNzY6e30sMjA3Nzp7VDoxfSwyMDc4OntUOi0xfSwyMDc5Ont9LDIwODA6e1Q6MX0sMjA4MTp7''@;'; put 'put ''VDotMX0sMjA4Mjp7fSwyMDgzOntUOjF9LDIwODQ6e1Q6LTF9LDIwODU6e1Q6MX0sMjA4Njp7VDotMX0sMjA4Nzp7VDoxfSwyMDg4OntUOi0xfSwyMDg5OntUOjF9LDIwOTA6e1Q6LTF9LDIwOTE6e30sMjA5Mjp7fSwyMDkzOntUOjF9LDIwOTQ6e1Q6LTF9LDIwOTU6e30sMjA5Njp7VDoxfSwy''@;'; put 'put ''MDk3OntUOi0xfSwyMDk4OntUOjF9LDIwOTk6e1Q6LTF9LDIxMDA6e1Q6MX0sMjEwMTp7VDotMX0sMjEwMjp7fSwyMTAzOntUOjF9LDIxMDQ6e1Q6LTF9LDIxMDU6e30sMjEwNjp7VDoxfSwyMTA3OntUOi0xfSwyMTA4Ont9LDIxMDk6e1Q6MX0sMjExMDp7VDotMX0sMjExMTp7VDoxfSwyMTEy''@;'; put 'put ''OntUOi0xfSwyMTEzOntUOjF9LDIxMTQ6e1Q6LTF9LDIxMTU6e30sMjExNjp7fSwyMTE3Ont9LDIxMTg6e1Q6MX0sMjExOTp7VDotMX0sMjEyMDp7fSwyMTIxOntUOjF9LDIxMjI6e1Q6LTF9LDIxMjM6e1Q6MX0sMjEyNDp7VDotMX0sMjEyNTp7fSwyMTI2OntUOjF9LDIxMjc6e1Q6LTF9LDIx''@;'; put 'put ''Mjg6e30sMjEyOTp7VDoxfSwyMTMwOntUOi0xfSwyMTMxOntUOjF9LDIxMzI6e1Q6LTF9LDIxMzM6e1Q6MX0sMjEzNDp7fSwyMTM1Ont9LDIxMzY6e30sMjEzNzp7VDoxfSwyMTM4OntUOi0xfSwyMTM5OntUOjF9LDIxNDA6e1Q6LTF9LDIxNDE6e30sMzA3Mjp7fSwzMDczOnt9LDQwOTY6e1Q6''@;'; put 'put ''MX0sNDA5Nzp7VDotMX0sNTAwMjp7VDoxfSw1MDAzOntUOi0xfSw1MDgxOntUOjF9LDUwODI6e1Q6LTF9LDUwODM6e30sNTA4NDp7VDoxfSw1MDg1OntUOi0xfSw1MDg2OntUOjF9LDUwODc6e1Q6LTF9LDUwODg6e30sNTA4OTp7fSw1MDkwOnt9LDUwOTI6e1Q6MX0sNTA5Mzp7VDotMX0sNTA5''@;'; put 'put ''NDp7fSw1MDk1OntUOjF9LDUwOTY6e1Q6LTF9LDUwOTc6e30sNTA5OTp7fSw2NTUzNTp7bjoiIn19LFduPXs2OntmOk5ufSwxMDp7Zjp5dH0sMTI6e2Y6dHJ9LDEzOntmOnRyfSwxNDp7ZjpKZX0sMTU6e2Y6SmV9LDE2OntmOmdyfSwxNzp7ZjpKZX0sMTg6e2Y6SmV9LDE5OntmOnRyfSwyMDp7''@;'; put 'put ''ZjpLc30sMjE6e2Y6S3N9LDIzOntmOnFzfSwyNDp7ZjpKc30sMjU6e2Y6SmV9LDI2Ont9LDI3Ont9LDI4OntmOmZ1bmN0aW9uIFV1KGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24gTXUoZSx0LHIpe2lmKCEoci5iaWZmPDgpKXt2YXIgYT1lLnJlYWRfc2hpZnQoMiksbj1lLnJlYWRfc2hpZnQoMiks''@;'; put 'put ''aT1lLnJlYWRfc2hpZnQoMikscz1lLnJlYWRfc2hpZnQoMiksZj16dChlLDAscik7cmV0dXJuIHIuYmlmZjw4JiZlLnJlYWRfc2hpZnQoMSksW3tyOmEsYzpufSxmLHMsaV19fShlLDAscil9fSwyOTp7fSwzNDp7ZjpKZX0sMzU6e2Y6WXN9LDM4OntmOmdyfSwzOTp7Zjpncn0sNDA6e2Y6Z3J9''@;'; put 'put ''LDQxOntmOmdyfSw0Mjp7ZjpKZX0sNDM6e2Y6SmV9LDQ3OntmOmZ1bmN0aW9uIHFoKGUsdCxyKXt2YXIgYT17VHlwZTpyLmJpZmY+PTg/ZS5yZWFkX3NoaWZ0KDIpOjB9O3JldHVybiBhLlR5cGU/ZnVuY3Rpb24gSmgoZSx0LHIpe3ZhciBhPXJ8fHt9O3JldHVybiBhLkluZm89ZS5yZWFkX3No''@;'; put 'put ''aWZ0KDIpLGUubC09MixhLkRhdGE9MT09PWEuSW5mbz9mdW5jdGlvbiAkaChlKXt2YXIgdD17fSxyPXQuRW5jcnlwdGlvblZlcnNpb25JbmZvPWR0KGUsNCk7aWYoMSE9ci5NYWpvcnx8MSE9ci5NaW5vcil0aHJvdyJ1bnJlY29nbml6ZWQgdmVyc2lvbiBjb2RlICIrci5NYWpvcisiIDogIity''@;'; put 'put ''Lk1pbm9yO3JldHVybiB0LlNhbHQ9ZS5yZWFkX3NoaWZ0KDE2KSx0LkVuY3J5cHRlZFZlcmlmaWVyPWUucmVhZF9zaGlmdCgxNiksdC5FbmNyeXB0ZWRWZXJpZmllckhhc2g9ZS5yZWFkX3NoaWZ0KDE2KSx0fShlKTpmdW5jdGlvbiB6aChlLHQpe3ZhciByPXt9LGE9ci5FbmNyeXB0aW9uVmVy''@;'; put 'put ''c2lvbkluZm89ZHQoZSw0KTtpZih0LT00LDIhPWEuTWlub3IpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgbWlub3IgdmVyc2lvbiBjb2RlOiAiK2EuTWlub3IpO2lmKGEuTWFqb3I+NHx8YS5NYWpvcjwyKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIG1ham9yIHZlcnNpb24g''@;'; put 'put ''Y29kZTogIithLk1ham9yKTtyLkZsYWdzPWUucmVhZF9zaGlmdCg0KSx0LT00O3ZhciBuPWUucmVhZF9zaGlmdCg0KTtyZXR1cm4gdC09NCxyLkVuY3J5cHRpb25IZWFkZXI9c2YoZSxuKSxyLkVuY3J5cHRpb25WZXJpZmllcj1mZihlLHQtPW4pLHJ9KGUsdCksYX0oZSx0LTIsYSk6ZnVuY3Rp''@;'; put 'put ''b24gWWgoZSx0LHIsYSl7dmFyIG49e2tleTp0cihlKSx2ZXJpZmljYXRpb25CeXRlczp0cihlKX07ci5wYXNzd29yZCYmKG4udmVyaWZpZXI9ZnVuY3Rpb24gRm4oZSl7dmFyIHIsaSx0PTAsYT1uZihlKSxuPWEubGVuZ3RoKzE7Zm9yKChyPV90KG4pKVswXT1hLmxlbmd0aCxpPTE7aSE9bjsr''@;'; put 'put ''K2kpcltpXT1hW2ktMV07Zm9yKGk9bi0xO2k+PTA7LS1pKXQ9KCgxNjM4NCZ0PzE6MCl8dDw8MSYzMjc2NylecltpXTtyZXR1cm4gNTI4MTFedH0oci5wYXNzd29yZCkpLGEudmFsaWQ9bi52ZXJpZmljYXRpb25CeXRlcz09PW4udmVyaWZpZXIsYS52YWxpZCYmKGEuaW5zaXR1PWZ1bmN0aW9u''@;'; put 'put ''KGUpe3ZhciB0PTAscj1jZihlKTtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIG49ZnVuY3Rpb24oZSx0LHIsYSxuKXt2YXIgaSxzO2ZvcihufHwobj10KSxhfHwoYT1jZigiIikpLGk9MDtpIT10Lmxlbmd0aDsrK2kpcz10W2ldLG5baV09cz0yNTUmKChzXj1hW3JdKT4+NXxzPDwzKSwrK3I7cmV0''@;'; put 'put ''dXJuW24scixhXX0oMCxhLHQscik7cmV0dXJuIHQ9blsxXSxuWzBdfX0oci5wYXNzd29yZCkpfShlLDAscixhKSxhfX0sNDk6e2Y6ZnVuY3Rpb24gaHUoZSx0LHIpe3ZhciBhPXtkeUhlaWdodDplLnJlYWRfc2hpZnQoMiksZmw6ZS5yZWFkX3NoaWZ0KDIpfTtzd2l0Y2gociYmci5iaWZmfHw4''@;'; put 'put ''KXtjYXNlIDI6YnJlYWs7Y2FzZSAzOmNhc2UgNDplLmwrPTI7YnJlYWs7ZGVmYXVsdDplLmwrPTEwfXJldHVybiBhLm5hbWU9UmEoZSwwLHIpLGF9fSw1MTp7Zjp0cn0sNjA6e30sNjE6e2Y6ZnVuY3Rpb24gZnUoZSl7cmV0dXJue1BvczpbZS5yZWFkX3NoaWZ0KDIpLGUucmVhZF9zaGlmdCgy''@;'; put 'put ''KV0sRGltOltlLnJlYWRfc2hpZnQoMiksZS5yZWFkX3NoaWZ0KDIpXSxGbGFnczplLnJlYWRfc2hpZnQoMiksQ3VyVGFiOmUucmVhZF9zaGlmdCgyKSxGaXJzdFRhYjplLnJlYWRfc2hpZnQoMiksU2VsZWN0ZWQ6ZS5yZWFkX3NoaWZ0KDIpLFRhYlJhdGlvOmUucmVhZF9zaGlmdCgyKX19fSw2''@;'; put 'put ''NDp7ZjpKZX0sNjU6e2Y6ZnVuY3Rpb24gdXUoKXt9fSw2Njp7Zjp0cn0sNzc6e30sODA6e30sODE6e30sODI6e30sODU6e2Y6dHJ9LDg5Ont9LDkwOnt9LDkxOnt9LDkyOntmOmZ1bmN0aW9uIEpsKGUsdCxyKXtpZihyLmVuYylyZXR1cm4gZS5sKz10LCIiO3ZhciBhPWUubCxuPXp0KGUsMCxy''@;'; put 'put ''KTtyZXR1cm4gZS5yZWFkX3NoaWZ0KHQrYS1lLmwpLG59fSw5Mzp7ZjpmdW5jdGlvbiBWdShlLHQscil7aWYociYmci5iaWZmPDgpcmV0dXJuIGZ1bmN0aW9uIEd1KGUsdCxyKXtlLmwrPTQ7dmFyIGE9ZS5yZWFkX3NoaWZ0KDIpLG49ZS5yZWFkX3NoaWZ0KDIpLGk9ZS5yZWFkX3NoaWZ0KDIp''@;'; put 'put ''O2UubCs9MixlLmwrPTIsZS5sKz0yLGUubCs9MixlLmwrPTIsZS5sKz0yLGUubCs9MixlLmwrPTIsZS5sKz0yLGUubCs9Njt2YXIgcz1bXTtyZXR1cm4gcy5wdXNoKChYdVthXXx8cHIpKGUsdC09MzYscikpLHtjbW86W24sYSxpXSxmdDpzfX0oZSx0LHIpO3ZhciBhPVhzKGUpLG49ZnVuY3Rp''@;'; put 'put ''b24gS2woZSx0KXtmb3IodmFyIHI9ZS5sK3QsYT1bXTtlLmw8cjspe3ZhciBuPWUucmVhZF9zaGlmdCgyKTtlLmwtPTI7dHJ5e2EucHVzaChqbFtuXShlLHItZS5sKSl9Y2F0Y2h7cmV0dXJuIGUubD1yLGF9fXJldHVybiBlLmwhPXImJihlLmw9ciksYX0oZSx0LTIyKTtyZXR1cm57Y21vOmEs''@;'; put 'put ''ZnQ6bn19fSw5NDp7fSw5NTp7ZjpKZX0sOTY6e30sOTc6e30sOTk6e2Y6SmV9LDEyNTp7ZjpRc30sMTI4OntmOmZ1bmN0aW9uIEF1KGUpe2UubCs9NDt2YXIgdD1bZS5yZWFkX3NoaWZ0KDIpLGUucmVhZF9zaGlmdCgyKV07aWYoMCE9PXRbMF0mJnRbMF0tLSwwIT09dFsxXSYmdFsxXS0tLHRb''@;'; put 'put ''MF0+N3x8dFsxXT43KXRocm93IG5ldyBFcnJvcigiQmFkIEd1dHRlcnM6ICIrdC5qb2luKCJ8IikpO3JldHVybiB0fX0sMTI5OntmOmZ1bmN0aW9uIFpsKGUsdCxyKXt2YXIgYT1yJiY4PT1yLmJpZmZ8fDI9PXQ/ZS5yZWFkX3NoaWZ0KDIpOihlLmwrPXQsMCk7cmV0dXJue2ZEaWFsb2c6MTYm''@;'; put 'put ''YSxmQmVsb3c6NjQmYSxmUmlnaHQ6MTI4JmF9fX0sMTMwOntmOnRyfSwxMzE6e2Y6SmV9LDEzMjp7ZjpKZX0sMTMzOntmOmZ1bmN0aW9uIFFsKGUsdCxyKXt2YXIgYT1lLnJlYWRfc2hpZnQoNCksbj0zJmUucmVhZF9zaGlmdCgxKSxpPWUucmVhZF9zaGlmdCgxKTtzd2l0Y2goaSl7Y2FzZSAw''@;'; put 'put ''Omk9IldvcmtzaGVldCI7YnJlYWs7Y2FzZSAxOmk9Ik1hY3Jvc2hlZXQiO2JyZWFrO2Nhc2UgMjppPSJDaGFydHNoZWV0IjticmVhaztjYXNlIDY6aT0iVkJBTW9kdWxlIn12YXIgcz1SYShlLDAscik7cmV0dXJuIDA9PT1zLmxlbmd0aCYmKHM9IlNoZWV0MSIpLHtwb3M6YSxoczpuLGR0Omks''@;'; put 'put ''bmFtZTpzfX19LDEzNDp7fSwxNDA6e2Y6ZnVuY3Rpb24gSnUoZSl7dmFyIHIsdD1bMCwwXTtyZXR1cm4gcj1lLnJlYWRfc2hpZnQoMiksdFswXT14c1tyXXx8cixyPWUucmVhZF9zaGlmdCgyKSx0WzFdPXhzW3JdfHxyLHR9fSwxNDE6e2Y6dHJ9LDE0NDp7fSwxNDY6e2Y6ZnVuY3Rpb24gUXUo''@;'; put 'put ''ZSl7Zm9yKHZhciB0PWUucmVhZF9zaGlmdCgyKSxyPVtdO3QtLSA+MDspci5wdXNoKFVzKGUpKTtyZXR1cm4gcn19LDE1MTp7fSwxNTI6e30sMTUzOnt9LDE1NDp7fSwxNTU6e30sMTU2OntmOnRyfSwxNTc6e30sMTU4Ont9LDE2MDp7ZjpzaH0sMTYxOntmOmZ1bmN0aW9uIHRoKGUsdCl7dmFy''@;'; put 'put ''IHI9e307cmV0dXJuIHQ8MzJ8fChlLmwrPTE2LHIuaGVhZGVyPWdyKGUpLHIuZm9vdGVyPWdyKGUpLGUubCs9Mikscn19LDE3NDp7fSwxNzU6e30sMTc2Ont9LDE3Nzp7fSwxNzg6e30sMTgwOnt9LDE4MTp7fSwxODI6e30sMTg0Ont9LDE4NTp7fSwxODk6e2Y6ZnVuY3Rpb24gVHUoZSx0KXtm''@;'; put 'put ''b3IodmFyIHI9ZS5sK3QtMixhPWUucmVhZF9zaGlmdCgyKSxuPWUucmVhZF9zaGlmdCgyKSxpPVtdO2UubDxyOylpLnB1c2goV3MoZSkpO2lmKGUubCE9PXIpdGhyb3cgbmV3IEVycm9yKCJNdWxSSyByZWFkIGVycm9yIik7dmFyIHM9ZS5yZWFkX3NoaWZ0KDIpO2lmKGkubGVuZ3RoIT1zLW4r''@;'; put 'put ''MSl0aHJvdyBuZXcgRXJyb3IoIk11bFJLIGxlbmd0aCBtaXNtYXRjaCIpO3JldHVybntyOmEsYzpuLEM6cyxya3JlYzppfX19LDE5MDp7ZjpmdW5jdGlvbiBTdShlLHQpe2Zvcih2YXIgcj1lLmwrdC0yLGE9ZS5yZWFkX3NoaWZ0KDIpLG49ZS5yZWFkX3NoaWZ0KDIpLGk9W107ZS5sPHI7KWku''@;'; put 'put ''cHVzaChlLnJlYWRfc2hpZnQoMikpO2lmKGUubCE9PXIpdGhyb3cgbmV3IEVycm9yKCJNdWxCbGFuayByZWFkIGVycm9yIik7dmFyIHM9ZS5yZWFkX3NoaWZ0KDIpO2lmKGkubGVuZ3RoIT1zLW4rMSl0aHJvdyBuZXcgRXJyb3IoIk11bEJsYW5rIGxlbmd0aCBtaXNtYXRjaCIpO3JldHVybnty''@;'; put 'put ''OmEsYzpuLEM6cyxpeGZlOml9fX0sMTkzOntmOnl0fSwxOTc6e30sMTk4Ont9LDE5OTp7fSwyMDA6e30sMjAxOnt9LDIwMjp7ZjpKZX0sMjAzOnt9LDIwNDp7fSwyMDU6e30sMjA2Ont9LDIwNzp7fSwyMDg6e30sMjA5Ont9LDIxMDp7fSwyMTE6e30sMjEzOnt9LDIxNTp7fSwyMTY6e30sMjE3''@;'; put 'put ''Ont9LDIxODp7Zjp0cn0sMjIwOnt9LDIyMTp7ZjpKZX0sMjIyOnt9LDIyNDp7ZjpmdW5jdGlvbiB5dShlLHQscil7dmFyIGE9e307cmV0dXJuIGEuaWZudD1lLnJlYWRfc2hpZnQoMiksYS5udW1GbXRJZD1lLnJlYWRfc2hpZnQoMiksYS5mbGFncz1lLnJlYWRfc2hpZnQoMiksYS5mU3R5bGU9''@;'; put 'put ''YS5mbGFncz4+MiYxLGEuZGF0YT1mdW5jdGlvbiBGdShlLHQscixhKXt2YXIgbj17fSxpPWUucmVhZF9zaGlmdCg0KSxzPWUucmVhZF9zaGlmdCg0KSxmPWUucmVhZF9zaGlmdCg0KSxjPWUucmVhZF9zaGlmdCgyKTtyZXR1cm4gbi5wYXR0ZXJuVHlwZT1ubFtmPj4yNl0sYS5jZWxsU3R5bGVz''@;'; put 'put ''JiYobi5hbGM9NyZpLG4uZldyYXA9aT4+MyYxLG4uYWxjVj1pPj40Jjcsbi5mSnVzdExhc3Q9aT4+NyYxLG4udHJvdD1pPj44JjI1NSxuLmNJbmRlbnQ9aT4+MTYmMTUsbi5mU2hyaW5rVG9GaXQ9aT4+MjAmMSxuLmlSZWFkT3JkZXI9aT4+MjImMixuLmZBdHJOdW09aT4+MjYmMSxuLmZBdHJG''@;'; put 'put ''bnQ9aT4+MjcmMSxuLmZBdHJBbGM9aT4+MjgmMSxuLmZBdHJCZHI9aT4+MjkmMSxuLmZBdHJQYXQ9aT4+MzAmMSxuLmZBdHJQcm90PWk+PjMxJjEsbi5kZ0xlZnQ9MTUmcyxuLmRnUmlnaHQ9cz4+NCYxNSxuLmRnVG9wPXM+PjgmMTUsbi5kZ0JvdHRvbT1zPj4xMiYxNSxuLmljdkxlZnQ9cz4+''@;'; put 'put ''MTYmMTI3LG4uaWN2UmlnaHQ9cz4+MjMmMTI3LG4uZ3JiaXREaWFnPXM+PjMwJjMsbi5pY3ZUb3A9MTI3JmYsbi5pY3ZCb3R0b209Zj4+NyYxMjcsbi5pY3ZEaWFnPWY+PjE0JjEyNyxuLmRnRGlhZz1mPj4yMSYxNSxuLmljdkZvcmU9MTI3JmMsbi5pY3ZCYWNrPWM+PjcmMTI3LG4uZnN4QnV0''@;'; put 'put ''dG9uPWM+PjE0JjEpLG59KGUsMCwwLHIpLGF9fSwyMjU6e2Y6ZnVuY3Rpb24gWWwoZSx0KXtyZXR1cm4gMD09PXR8fGUucmVhZF9zaGlmdCgyKSwxMjAwfX0sMjI2OntmOnl0fSwyMjc6e30sMjI5OntmOmZ1bmN0aW9uIFd1KGUsdCl7Zm9yKHZhciByPVtdLGE9ZS5yZWFkX3NoaWZ0KDIpO2Et''@;'; put 'put ''LTspci5wdXNoKGswKGUpKTtyZXR1cm4gcn19LDIzMzp7fSwyMzU6e30sMjM2Ont9LDIzNzp7fSwyMzk6e30sMjQwOnt9LDI0MTp7fSwyNDI6e30sMjQ0Ont9LDI0NTp7fSwyNDY6e30sMjQ3Ont9LDI0ODp7fSwyNDk6e30sMjUxOnt9LDI1Mjp7ZjpmdW5jdGlvbiBydShlLHQpe2Zvcih2YXIg''@;'; put 'put ''cj1lLmwrdCxhPWUucmVhZF9zaGlmdCg0KSxuPWUucmVhZF9zaGlmdCg0KSxpPVtdLHM9MDtzIT1uJiZlLmw8cjsrK3MpaS5wdXNoKFJsKGUpKTtyZXR1cm4gaS5Db3VudD1hLGkuVW5pcXVlPW4saX19LDI1Mzp7ZjpmdW5jdGlvbiBkdShlKXt2YXIgdD1udChlKTtyZXR1cm4gdC5pc3N0PWUu''@;'; put 'put ''cmVhZF9zaGlmdCg0KSx0fX0sMjU1OntmOmZ1bmN0aW9uIGF1KGUsdCl7dmFyIHI9e307cmV0dXJuIHIuZHNzdD1lLnJlYWRfc2hpZnQoMiksZS5sKz10LTIscn19LDI1Njp7fSwyNTk6e30sMjkwOnt9LDMxMTp7fSwzMTI6e30sMzE1Ont9LDMxNzp7Zjpic30sMzE4Ont9LDMxOTp7fSwzMjA6''@;'; put 'put ''e30sMzMwOnt9LDMzMTp7fSwzMzM6e30sMzM0Ont9LDMzNTp7fSwzMzY6e30sMzM3Ont9LDMzODp7fSwzMzk6e30sMzQwOnt9LDM1MTp7fSwzNTI6e2Y6SmV9LDM1Mzp7Zjp5dH0sNDAxOnt9LDQwMjp7fSw0MDM6e30sNDA0Ont9LDQwNTp7fSw0MDY6e30sNDA3Ont9LDQwODp7fSw0MjU6e30s''@;'; put 'put ''NDI2Ont9LDQyNzp7fSw0Mjg6e30sNDI5Ont9LDQzMDp7ZjpmdW5jdGlvbiBSdShlLHQscil7dmFyIGE9ZS5sK3Qsbj1lLnJlYWRfc2hpZnQoMiksaT1lLnJlYWRfc2hpZnQoMik7aWYoci5zYmNjaD1pLDEwMjU9PWl8fDE0ODQ5PT1pKXJldHVybltpLG5dO2lmKGk8MXx8aT4yNTUpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJVbmV4cGVjdGVkIFN1cEJvb2sgdHlwZTogIitpKTtmb3IodmFyIHM9R3QoZSxpKSxmPVtdO2E+ZS5sOylmLnB1c2goTmEoZSkpO3JldHVybltpLG4scyxmXX19LDQzMTp7ZjpKZX0sNDMyOnt9LDQzMzp7fSw0MzQ6e30sNDM3Ont9LDQzODp7ZjpmdW5jdGlvbiB6dShlLHQs''@;'; put 'put ''cil7dmFyIGE9ZS5sLG49IiI7dHJ5e2UubCs9NCwtMT09WzAsNSw3LDExLDEyLDE0XS5pbmRleE9mKChyLmxhc3RvYmp8fHtjbW86WzAsMF19KS5jbW9bMV0pP2UubCs9NjpmdW5jdGlvbiBibChlKXt2YXIgdD1lLnJlYWRfc2hpZnQoMSk7ZS5sKys7dmFyIHI9ZS5yZWFkX3NoaWZ0KDIpO2Uu''@;'; put 'put ''bCs9Mn0oZSk7dmFyIGY9ZS5yZWFkX3NoaWZ0KDIpO2UucmVhZF9zaGlmdCgyKSx0cihlKTt2YXIgYz1lLnJlYWRfc2hpZnQoMik7ZS5sKz1jO2Zvcih2YXIgbz0xO288ZS5sZW5zLmxlbmd0aC0xOysrbyl7aWYoZS5sLWEhPWUubGVuc1tvXSl0aHJvdyBuZXcgRXJyb3IoIlR4TzogYmFkIGNv''@;'; put 'put ''bnRpbnVlIHJlY29yZCIpO3ZhciBsPWVbZS5sXTtpZigobis9R3QoZSxlLmxlbnNbbysxXS1lLmxlbnNbb10tMSkpLmxlbmd0aD49KGw/ZjoyKmYpKWJyZWFrfWlmKG4ubGVuZ3RoIT09ZiYmbi5sZW5ndGghPT0yKmYpdGhyb3cgbmV3IEVycm9yKCJjY2hUZXh0OiAiK2YrIiAhPSAiK24ubGVu''@;'; put 'put ''Z3RoKTtyZXR1cm4gZS5sPWErdCx7dDpufX1jYXRjaHtyZXR1cm4gZS5sPWErdCx7dDpufX19fSw0Mzk6e2Y6SmV9LDQ0MDp7ZjpmdW5jdGlvbiAkdShlLHQpe3ZhciByPWswKGUpO2UubCs9MTY7dmFyIGE9ZnVuY3Rpb24gTWwoZSx0KXt2YXIgcj1lLmwrdCxhPWUucmVhZF9zaGlmdCg0KTtp''@;'; put 'put ''ZigyIT09YSl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBzdHJlYW1WZXJzaW9uOiAiK2EpO3ZhciBuPWUucmVhZF9zaGlmdCgyKTtlLmwrPTI7dmFyIGkscyxmLGMsbCxoLG89IiI7MTYmbiYmKGk9dzAoZSkpLDEyOCZuJiYocz13MChlKSksISgyNTcmfm4pJiYoZj13MChlKSksMT09''@;'; put 'put ''KDI1NyZuKSYmKGM9ZnVuY3Rpb24gQmwoZSx0KXt2YXIgcj1lLnJlYWRfc2hpZnQoMTYpO3N3aXRjaChyKXtjYXNlImUwYzllYTc5ZjliYWNlMTE4YzgyMDBhYTAwNGJhOTBiIjpyZXR1cm4gZnVuY3Rpb24gUGwoZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDQpLHI9ZS5sLGE9ITE7dD4yNCYmKGUu''@;'; put 'put ''bCs9dC0yNCwiNzk1ODgxZjQzYjFkN2Y0OGFmMmM4MjVkYzQ4NTI3NjMiPT09ZS5yZWFkX3NoaWZ0KDE2KSYmKGE9ITApLGUubD1yKTt2YXIgbj1lLnJlYWRfc2hpZnQoKGE/dC0yNDp0KT4+MSwidXRmMTZsZSIpLnJlcGxhY2UoZHIsIiIpO3JldHVybiBhJiYoZS5sKz0yNCksbn0oZSk7Y2Fz''@;'; put 'put ''ZSIwMzAzMDAwMDAwMDAwMDAwYzAwMDAwMDAwMDAwMDA0NiI6cmV0dXJuIGZ1bmN0aW9uIExsKGUpe2Zvcih2YXIgdD1lLnJlYWRfc2hpZnQoMikscj0iIjt0LS0gPjA7KXIrPSIuLi8iO3ZhciBhPWUucmVhZF9zaGlmdCgwLCJscHN0ci1hbnNpIik7aWYoZS5sKz0yLDU3MDA1IT1lLnJlYWRf''@;'; put 'put ''c2hpZnQoMikpdGhyb3cgbmV3IEVycm9yKCJCYWQgRmlsZU1vbmlrZXIiKTtpZigwPT09ZS5yZWFkX3NoaWZ0KDQpKXJldHVybiByK2EucmVwbGFjZSgvXFwvZywiLyIpO3ZhciBpPWUucmVhZF9zaGlmdCg0KTtpZigzIT1lLnJlYWRfc2hpZnQoMikpdGhyb3cgbmV3IEVycm9yKCJCYWQgRmls''@;'; put 'put ''ZU1vbmlrZXIiKTtyZXR1cm4gcitlLnJlYWRfc2hpZnQoaT4+MSwidXRmMTZsZSIpLnJlcGxhY2UoZHIsIiIpfShlKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgTW9uaWtlciAiK3IpfX0oZSkpLDgmbiYmKG89dzAoZSkpLDMyJm4mJihsPWUucmVhZF9zaGlmdCgxNikp''@;'; put 'put ''LDY0Jm4mJihoPXduKGUpKSxlLmw9cjt2YXIgeD1zfHxmfHxjfHwiIjt4JiZvJiYoeCs9IiMiK28pLHh8fCh4PSIjIitvKSwyJm4mJiIvIj09eC5jaGFyQXQoMCkmJiIvIiE9eC5jaGFyQXQoMSkmJih4PSJmaWxlOi8vIit4KTt2YXIgZD17VGFyZ2V0Onh9O3JldHVybiBsJiYoZC5ndWlkPWwp''@;'; put 'put ''LGgmJihkLnRpbWU9aCksaSYmKGQuVG9vbHRpcD1pKSxkfShlLHQtMjQpO3JldHVybltyLGFdfX0sNDQxOnt9LDQ0Mjp7ZjpOYX0sNDQzOnt9LDQ0NDp7Zjp0cn0sNDQ1Ont9LDQ0Njp7fSw0NDg6e2Y6eXR9LDQ0OTp7ZjpmdW5jdGlvbiBzdShlKXtyZXR1cm4gZS5yZWFkX3NoaWZ0KDIpLGUu''@;'; put 'put ''cmVhZF9zaGlmdCg0KX0scjoyfSw0NTA6e2Y6eXR9LDUxMjp7Zjp6c30sNTEzOntmOmlofSw1MTU6e2Y6ZnVuY3Rpb24gT3UoZSx0LHIpe3IuYmlmZmd1ZXNzJiYyPT1yLmJpZmYmJihyLmJpZmY9NSk7dmFyIGE9bnQoZSksbj1ncihlKTtyZXR1cm4gYS52YWw9bixhfX0sNTE2OntmOmZ1bmN0''@;'; put 'put ''aW9uIHB1KGUsdCxyKXtyLmJpZmZndWVzcyYmMj09ci5iaWZmJiYoci5iaWZmPTUpO3ZhciBuPW50KGUpOzI9PXIuYmlmZiYmZS5sKys7dmFyIGk9TmEoZSwwLHIpO3JldHVybiBuLnZhbD1pLG59fSw1MTc6e2Y6anN9LDUxOTp7ZjpmaH0sNTIwOntmOmZ1bmN0aW9uIG51KGUpe3ZhciB0PXt9''@;'; put 'put ''O3Qucj1lLnJlYWRfc2hpZnQoMiksdC5jPWUucmVhZF9zaGlmdCgyKSx0LmNudD1lLnJlYWRfc2hpZnQoMiktdC5jO3ZhciByPWUucmVhZF9zaGlmdCgyKTtlLmwrPTQ7dmFyIGE9ZS5yZWFkX3NoaWZ0KDEpO3JldHVybiBlLmwrPTMsNyZhJiYodC5sZXZlbD03JmEpLDMyJmEmJih0LmhpZGRl''@;'; put 'put ''bj0hMCksNjQmYSYmKHQuaHB0PXIvMjApLHR9fSw1MjM6e30sNTQ1OntmOlpzfSw1NDk6e2Y6R3N9LDU2Njp7fSw1NzQ6e2Y6ZnVuY3Rpb24gb3UoZSx0LHIpe3JldHVybiByJiZyLmJpZmY+PTImJnIuYmlmZjw1P3t9OntSVEw6NjQmZS5yZWFkX3NoaWZ0KDIpfX19LDYzODp7ZjpmdW5jdGlv''@;'; put 'put ''biBFdShlKXt2YXIgdD1lLnJlYWRfc2hpZnQoMikscj1lLnJlYWRfc2hpZnQoMiksYT1XcyhlKTtyZXR1cm57cjp0LGM6cixpeGZlOmFbMF0scmtudW06YVsxXX19fSw2NTk6e30sMTA0ODp7fSwxMDU0OntmOmZ1bmN0aW9uIGd1KGUsdCxyKXtyZXR1cm5bZS5yZWFkX3NoaWZ0KDIpLHp0KGUs''@;'; put 'put ''MCxyKV19fSwxMDg0Ont9LDEyMTI6e2Y6ZnVuY3Rpb24gTHUoZSx0LHIpe3ZhciBhPVZzKGUpO2UubCsrO3ZhciBuPWUucmVhZF9zaGlmdCgxKTtyZXR1cm5bWWQoZSx0LT04LHIpLG4sYV19fSwyMDQ4OntmOmZ1bmN0aW9uIEt1KGUsdCl7ZS5yZWFkX3NoaWZ0KDIpO3ZhciByPWswKGUpLGE9''@;'; put 'put ''ZS5yZWFkX3NoaWZ0KCh0LTEwKS8yLCJkYmNzLWNvbnQiKTtyZXR1cm5bcixhPWEucmVwbGFjZShkciwiIildfX0sMjA0OTp7fSwyMDUwOnt9LDIwNTE6e30sMjA1Mjp7fSwyMDUzOnt9LDIwNTQ6e30sMjA1NTp7fSwyMDU2Ont9LDIwNTc6e2Y6RTB9LDIwNTg6e30sMjA1OTp7fSwyMDYwOnt9''@;'; put 'put ''LDIwNjE6e30sMjA2Mjp7fSwyMDYzOnt9LDIwNjQ6e30sMjA2Njp7fSwyMDY3Ont9LDIxMjg6e30sMjEyOTp7fSwyMTMwOnt9LDIxMzE6e30sMjEzMjp7fSwyMTMzOnt9LDIxMzQ6e30sMjEzNTp7fSwyMTM2Ont9LDIxMzc6e30sMjEzODp7fSwyMTQ2Ont9LDIxNDc6e3I6MTJ9LDIxNDg6e30s''@;'; put 'put ''MjE0OTp7fSwyMTUwOnt9LDIxNTE6e2Y6eXR9LDIxNTI6e30sMjE1NDp7fSwyMTU1Ont9LDIxNTY6e30sMjE2MTp7fSwyMTYyOnt9LDIxNjQ6e30sMjE2NTp7fSwyMTY2Ont9LDIxNjc6e30sMjE2ODp7fSwyMTY5Ont9LDIxNzA6e30sMjE3MTp7fSwyMTcyOntmOmZ1bmN0aW9uIGVoKGUpe2Uu''@;'; put 'put ''bCs9Mjt2YXIgdD17Y3hmczowLGNyYzowfTtyZXR1cm4gdC5jeGZzPWUucmVhZF9zaGlmdCgyKSx0LmNyYz1lLnJlYWRfc2hpZnQoNCksdH0scjoxMn0sMjE3Mzp7ZjpmdW5jdGlvbiBKMShlLHQpe2UubCs9Mjt2YXIgYT1lLnJlYWRfc2hpZnQoMik7ZS5sKz0yO2Zvcih2YXIgbj1lLnJlYWRf''@;'; put 'put ''c2hpZnQoMiksaT1bXTtuLS0gPjA7KWkucHVzaChZMShlKSk7cmV0dXJue2l4ZmU6YSxleHQ6aX19LHI6MTJ9LDIxNzQ6e30sMjE3NTp7fSwyMTgwOnt9LDIxODE6e30sMjE4Mjp7fSwyMTgzOnt9LDIxODQ6e30sMjE4NTp7fSwyMTg2Ont9LDIxODc6e30sMjE4ODp7ZjpKZSxyOjEyfSwyMTg5''@;'; put 'put ''Ont9LDIxOTA6e3I6MTJ9LDIxOTE6e30sMjE5Mjp7fSwyMTk0Ont9LDIxOTU6e30sMjE5Njp7ZjpmdW5jdGlvbiBQdShlLHQscil7aWYoIShyLmJpZmY8OCkpe3ZhciBhPWUucmVhZF9zaGlmdCgyKSxuPWUucmVhZF9zaGlmdCgyKTtyZXR1cm5bR3QoZSxhLHIpLEd0KGUsbixyKV19ZS5sKz10''@;'; put 'put ''fSxyOjEyfSwyMTk3Ont9LDIxOTg6e2Y6ZnVuY3Rpb24gRzEoZSx0LHIpe3ZhciBhPWUubCt0O2lmKDEyNDIyNiE9PWUucmVhZF9zaGlmdCg0KSl7aWYoIXIuY2VsbFN0eWxlcylyZXR1cm4gdm9pZChlLmw9YSk7dmFyIHMsaT1lLnNsaWNlKGUubCk7ZS5sPWE7dHJ5e3M9UmkoaSx7dHlwZToi''@;'; put 'put ''YXJyYXkifSl9Y2F0Y2h7cmV0dXJufXZhciBmPU5yKHMsInRoZW1lL3RoZW1lL3RoZW1lMS54bWwiLCEwKTtpZihmKXJldHVybiB2ZihmLHIpfX0scjoxMn0sMjE5OTp7fSwyMjAwOnt9LDIyMDE6e30sMjIwMjp7ZjpmdW5jdGlvbiBCdShlKXtyZXR1cm5bMCE9PWUucmVhZF9zaGlmdCg0KSww''@;'; put 'put ''IT09ZS5yZWFkX3NoaWZ0KDQpLGUucmVhZF9zaGlmdCg0KV19LHI6MTJ9LDIyMDM6e2Y6eXR9LDIyMDQ6e30sMjIwNTp7fSwyMjA2Ont9LDIyMDc6e30sMjIxMTp7ZjpmdW5jdGlvbiBpdShlKXt2YXIgdD1mdW5jdGlvbiBXbChlKXt2YXIgdD1lLnJlYWRfc2hpZnQoMikscj1lLnJlYWRfc2hp''@;'; put 'put ''ZnQoMik7cmV0dXJuIGUubCs9OCx7dHlwZTp0LGZsYWdzOnJ9fShlKTtpZigyMjExIT10LnR5cGUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIEZ1dHVyZSBSZWNvcmQgIit0LnR5cGUpO3JldHVybiAwIT09ZS5yZWFkX3NoaWZ0KDQpfX0sMjIxMjp7fSwyMjEzOnt9LDIyMTQ6e30sMjIxNTp7''@;'; put 'put ''fSw0MDk3Ont9LDQwOTg6e30sNDA5OTp7fSw0MTAyOnt9LDQxMDM6e30sNDEwNTp7fSw0MTA2Ont9LDQxMDc6e30sNDEwODp7fSw0MTA5Ont9LDQxMTY6e30sNDExNzp7fSw0MTE4Ont9LDQxMTk6e30sNDEyMDp7fSw0MTIxOnt9LDQxMjI6e30sNDEyMzp7fSw0MTI0Ont9LDQxMjU6e30sNDEy''@;'; put 'put ''Njp7fSw0MTI3Ont9LDQxMjg6e30sNDEyOTp7fSw0MTMwOnt9LDQxMzI6e30sNDEzMzp7fSw0MTM0OntmOnRyfSw0MTM1Ont9LDQxNDY6e30sNDE0Nzp7fSw0MTQ4Ont9LDQxNDk6e30sNDE1NDp7fSw0MTU2Ont9LDQxNTc6e30sNDE1ODp7fSw0MTU5Ont9LDQxNjA6e30sNDE2MTp7fSw0MTYz''@;'; put 'put ''Ont9LDQxNjQ6e2Y6ZnVuY3Rpb24gYWgoZSx0LHIpe3ZhciBhPXthcmVhOiExfTtpZig1IT1yLmJpZmYpcmV0dXJuIGUubCs9dCxhO3ZhciBuPWUucmVhZF9zaGlmdCgxKTtyZXR1cm4gZS5sKz0zLDE2Jm4mJihhLmFyZWE9ITApLGF9fSw0MTY1Ont9LDQxNjY6e30sNDE2ODp7fSw0MTcwOnt9''@;'; put 'put ''LDQxNzE6e30sNDE3NDp7fSw0MTc1Ont9LDQxNzY6e30sNDE3Nzp7fSw0MTg3Ont9LDQxODg6e2Y6ZnVuY3Rpb24gWnUoZSl7Zm9yKHZhciB0PWUucmVhZF9zaGlmdCgyKSxyPVtdO3QtLSA+MDspci5wdXNoKFVzKGUpKTtyZXR1cm4gcn19LDQxODk6e30sNDE5MTp7fSw0MTkyOnt9LDQxOTM6''@;'; put 'put ''e30sNDE5NDp7fSw0MTk1Ont9LDQxOTY6e30sNDE5Nzp7fSw0MTk4Ont9LDQxOTk6e30sNDIwMDp7fSwwOntmOnpzfSwxOnt9LDI6e2Y6ZnVuY3Rpb24gaGgoZSl7dmFyIHQ9bnQoZSk7KytlLmw7dmFyIHI9ZS5yZWFkX3NoaWZ0KDIpO3JldHVybiB0LnQ9Im4iLHQudmFsPXIsdH19LDM6e2Y6''@;'; put 'put ''ZnVuY3Rpb24gbGgoZSl7dmFyIHQ9bnQoZSk7KytlLmw7dmFyIHI9Z3IoZSk7cmV0dXJuIHQudD0ibiIsdC52YWw9cix0fX0sNDp7ZjpmdW5jdGlvbiBvaChlLHQscil7ci5iaWZmZ3Vlc3MmJjU9PXIuYmlmZiYmKHIuYmlmZj0yKTt2YXIgYT1udChlKTsrK2UubDt2YXIgbj16dChlLDAscik7''@;'; put 'put ''cmV0dXJuIGEudD0ic3RyIixhLnZhbD1uLGF9fSw1OntmOmpzfSw3OntmOmZ1bmN0aW9uIGRoKGUpe3ZhciB0PWUucmVhZF9zaGlmdCgxKTtyZXR1cm4gMD09PXQ/KGUubCsrLCIiKTplLnJlYWRfc2hpZnQodCwic2Jjcy1jb250Iil9fSw4Ont9LDk6e2Y6RTB9LDExOnt9LDIyOntmOnRyfSwz''@;'; put 'put ''MDp7Zjp3dX0sMzE6e30sMzI6e30sMzM6e2Y6WnN9LDM2Ont9LDM3OntmOkdzfSw1MDp7ZjpmdW5jdGlvbiB2aChlLHQpe2UubCs9NixlLmwrPTIsZS5sKz0xLGUubCs9MyxlLmwrPTEsZS5sKz10LTEzfX0sNjI6e30sNTI6e30sNjc6e30sNjg6e2Y6dHJ9LDY5Ont9LDg2Ont9LDEyNjp7fSwx''@;'; put 'put ''Mjc6e2Y6ZnVuY3Rpb24gY2goZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpLHI9ZS5yZWFkX3NoaWZ0KDIpLGE9ZS5yZWFkX3NoaWZ0KDQpLG49e2ZtdDp0LGVudjpyLGxlbjphLGRhdGE6ZS5zbGljZShlLmwsZS5sK2EpfTtyZXR1cm4gZS5sKz1hLG59fSwxMzU6e30sMTM2Ont9LDEzNzp7fSwx''@;'; put 'put ''NDU6e30sMTQ4Ont9LDE0OTp7fSwxNTA6e30sMTY5Ont9LDE3MTp7fSwxODg6e30sMTkxOnt9LDE5Mjp7fSwxOTQ6e30sMTk1Ont9LDIxNDp7ZjpmdW5jdGlvbiBwaChlLHQscil7dmFyIGE9ZS5sK3Qsbj1udChlKSxpPWUucmVhZF9zaGlmdCgyKSxzPUd0KGUsaSxyKTtyZXR1cm4gZS5sPWEs''@;'; put 'put ''bi50PSJzdHIiLG4udmFsPXMsbn19LDIyMzp7fSwyMzQ6e30sMzU0Ont9LDQyMTp7fSw1MTg6e2Y6Tm59LDUyMTp7ZjpFMH0sNTM2OntmOkpzfSw1NDc6e2Y6WXN9LDU2MTp7fSw1Nzk6e30sMTAzMDp7ZjpObn0sMTAzMzp7ZjpFMH0sMTA5MTp7fSwyMTU3Ont9LDIxNjM6e30sMjE3Nzp7fSwy''@;'; put 'put ''MjQwOnt9LDIyNDE6e30sMjI0Mjp7fSwyMjQzOnt9LDIyNDQ6e30sMjI0NTp7fSwyMjQ2Ont9LDIyNDc6e30sMjI0ODp7fSwyMjQ5Ont9LDIyNTA6e30sMjI1MTp7fSwyMjYyOntyOjEyfSwyOTI4Mjp7fX07ZnVuY3Rpb24gYWUoZSx0LHIsYSl7dmFyIG49dDtpZighaXNOYU4obikpe3ZhciBp''@;'; put 'put ''PWF8fChyfHxbXSkubGVuZ3RofHwwLHM9ZS5uZXh0KDQpO3Mud3JpdGVfc2hpZnQoMixuKSxzLndyaXRlX3NoaWZ0KDIsaSksaT4wJiZybihyKSYmZS5wdXNoKHIpfX1mdW5jdGlvbiBKZihlLHQpe3ZhciByPXR8fHt9LGE9ci5kZW5zZT9bXTp7fSxuPShlPWUucmVwbGFjZSgvPCEtLS4qPy0t''@;'; put 'put ''Pi9nLCIiKSkubWF0Y2goLzx0YWJsZS9pKTtpZighbil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgSFRNTDogY291bGQgbm90IGZpbmQgPHRhYmxlPiIpO3ZhciBpPWUubWF0Y2goLzxcL3RhYmxlL2kpLHM9bi5pbmRleCxmPWkmJmkuaW5kZXh8fGUubGVuZ3RoLGM9dm8oZS5zbGljZShzLGYp''@;'; put 'put ''LC8oOj88dHJbXj5dKj4pL2ksIjx0cj4iKSxvPS0xLGw9MCxoPTAseD0wLGQ9e3M6e3I6MWU3LGM6MWU3fSxlOntyOjAsYzowfX0sdj1bXTtmb3Iocz0wO3M8Yy5sZW5ndGg7KytzKXt2YXIgdT1jW3NdLnRyaW0oKSxwPXUuc2xpY2UoMCwzKS50b0xvd2VyQ2FzZSgpO2lmKCI8dHIiIT1wKXtp''@;'; put 'put ''ZigiPHRkIj09cHx8Ijx0aCI9PXApe3ZhciBrPXUuc3BsaXQoLzxcL3RbZGhdPi9pKTtmb3IoZj0wO2Y8ay5sZW5ndGg7KytmKXt2YXIgVD1rW2ZdLnRyaW0oKTtpZihULm1hdGNoKC88dFtkaF0vaSkpe2Zvcih2YXIgZz1ULE49MDsiPCI9PWcuY2hhckF0KDApJiYoTj1nLmluZGV4T2YoIj4i''@;'; put 'put ''KSk+LTE7KWc9Zy5zbGljZShOKzEpO2Zvcih2YXIgTT0wO008di5sZW5ndGg7KytNKXt2YXIgST12W01dO0kucy5jPT1sJiZJLnMucjxvJiZvPD1JLmUuciYmKGw9SS5lLmMrMSxNPS0xKX12YXIgeT1tZShULnNsaWNlKDAsVC5pbmRleE9mKCI+IikpKTt4PXkuY29sc3Bhbj8reS5jb2xzcGFu''@;'; put 'put ''OjEsKChoPSt5LnJvd3NwYW4pPjF8fHg+MSkmJnYucHVzaCh7czp7cjpvLGM6bH0sZTp7cjpvKyhofHwxKS0xLGM6bCt4LTF9fSk7dmFyIFA9eS50fHx5WyJkYXRhLXQiXXx8IiI7aWYoIWcubGVuZ3RoKXtsKz14O2NvbnRpbnVlfWlmKGc9V2koZyksZC5zLnI+byYmKGQucy5yPW8pLGQuZS5y''@;'; put 'put ''PG8mJihkLmUucj1vKSxkLnMuYz5sJiYoZC5zLmM9bCksZC5lLmM8bCYmKGQuZS5jPWwpLCFnLmxlbmd0aCl7bCs9eDtjb250aW51ZX12YXIgUj17dDoicyIsdjpnfTtyLnJhd3x8IWcudHJpbSgpLmxlbmd0aHx8InMiPT1QfHwoIlRSVUUiPT09Zz9SPXt0OiJiIix2OiEwfToiRkFMU0UiPT09''@;'; put 'put ''Zz9SPXt0OiJiIix2OiExfTppc05hTihKcihnKSk/aXNOYU4oYWEoZykuZ2V0RGF0ZSgpKXx8KFI9e3Q6ImQiLHY6WGUoZyl9LHIuY2VsbERhdGVzfHwoUj17dDoibiIsdjppcihSLnYpfSksUi56PXIuZGF0ZU5GfHxwZVsxNF0pOlI9e3Q6Im4iLHY6SnIoZyl9KSxyLmRlbnNlPyhhW29dfHwo''@;'; put 'put ''YVtvXT1bXSksYVtvXVtsXT1SKTphW2dlKHtyOm8sYzpsfSldPVIsbCs9eH19fX1lbHNle2lmKCsrbyxyLnNoZWV0Um93cyYmci5zaGVldFJvd3M8PW8pey0tbzticmVha31sPTB9fXJldHVybiBhWyIhcmVmIl09d2UoZCksdi5sZW5ndGgmJihhWyIhbWVyZ2VzIl09diksYX1mdW5jdGlvbiBS''@;'; put 'put ''bShlKXt2YXIgdD1lLnJlcGxhY2UoL1tcdFxyXG5dL2csIiAiKS50cmltKCkucmVwbGFjZSgvICsvZywiICIpLnJlcGxhY2UoLzx0ZXh0OnNcLz4vZywiICIpLnJlcGxhY2UoLzx0ZXh0OnMgdGV4dDpjPSIoXGQrKSJcLz4vZyxmdW5jdGlvbihhLG4pe3JldHVybiBBcnJheShwYXJzZUludChu''@;'; put 'put ''LDEwKSsxKS5qb2luKCIgIil9KS5yZXBsYWNlKC88dGV4dDp0YWJbXj5dKlwvPi9nLCJcdCIpLnJlcGxhY2UoLzx0ZXh0OmxpbmUtYnJlYWtcLz4vZywiXG4iKTtyZXR1cm5bSWUodC5yZXBsYWNlKC88W14+XSo+L2csIiIpKV19dmFyIGljPXtkYXk6WyJkIiwiZGQiXSxtb250aDpbIm0iLCJt''@;'; put 'put ''bSJdLHllYXI6WyJ5IiwieXkiXSxob3VyczpbImgiLCJoaCJdLG1pbnV0ZXM6WyJtIiwibW0iXSxzZWNvbmRzOlsicyIsInNzIl0sImFtLXBtIjpbIkEvUCIsIkFNL1BNIl0sImRheS1vZi13ZWVrIjpbImRkZCIsImRkZGQiXSxlcmE6WyJlIiwiZWUiXSxxdWFydGVyOlsiXFxRbSIsJ21cXCJ0''@;'; put 'put ''aCBxdWFydGVyIiddfTtmdW5jdGlvbiBzYyhlLHQpe3ZhciBpLHMsbCxoLHUscCxyPXR8fHt9LGE9WTAoZSksbj1bXSxmPXtuYW1lOiIifSxjPSIiLG89MCx4PXt9LGQ9W10sdj1yLmRlbnNlP1tdOnt9LGs9e3ZhbHVlOiIifSxUPSIiLGc9MCxNPVtdLEk9LTEseT0tMSxQPXtzOntyOjFlNixj''@;'; put 'put ''OjFlN30sZTp7cjowLGM6MH19LFI9MCxWPXt9LFg9W10sYj17fSxlZT0wLGxlPTAscmU9W10sZGU9MSx1ZT0xLEZlPVtdLGNlPXtOYW1lczpbXX0seGU9e30sSz1bIiIsIiJdLEM9W10sVT17fSxPPSIiLEQ9MCxqPSExLHNlPSExLFo9MDtmb3IoeWEubGFzdEluZGV4PTAsYT1hLnJlcGxhY2Uo''@;'; put 'put ''LzwhLS0oW1xzXFNdKj8pLS0+L2dtLCIiKS5yZXBsYWNlKC88IURPQ1RZUEVbXlxbXSpcW1teXF1dKlxdPi9nbSwiIik7dT15YS5leGVjKGEpOylzd2l0Y2godVszXT11WzNdLnJlcGxhY2UoL18uKiQvLCIiKSl7Y2FzZSJ0YWJsZSI6Y2FzZSJcdTVkZTVcdTRmNWNcdTg4NjgiOiIvIj09PXVb''@;'; put 'put ''MV0/KHZbIiFyZWYiXT1QLmUuYz49UC5zLmMmJlAuZS5yPj1QLnMucj93ZShQKToiQTE6QTEiLHIuc2hlZXRSb3dzPjAmJnIuc2hlZXRSb3dzPD1QLmUuciYmKHZbIiFmdWxscmVmIl09dlsiIXJlZiJdLFAuZS5yPXIuc2hlZXRSb3dzLTEsdlsiIXJlZiJdPXdlKFApKSxYLmxlbmd0aCYmKHZb''@;'; put 'put ''IiFtZXJnZXMiXT1YKSxyZS5sZW5ndGgmJih2WyIhcm93cyJdPXJlKSxsLm5hbWU9bC5cdTU0MGRcdTc5ZjB8fGwubmFtZSx0eXBlb2YgSlNPTjwidSImJkpTT04uc3RyaW5naWZ5KGwpLGQucHVzaChsLm5hbWUpLHhbbC5uYW1lXT12LHNlPSExKToiLyIhPT11WzBdLmNoYXJBdCh1WzBdLmxl''@;'; put 'put ''bmd0aC0yKSYmKGw9bWUodVswXSwhMSksST15PS0xLFAucy5yPVAucy5jPTFlNyxQLmUucj1QLmUuYz0wLHY9ci5kZW5zZT9bXTp7fSxYPVtdLHJlPVtdLHNlPSEwKTticmVhaztjYXNlInRhYmxlLXJvdy1ncm91cCI6Ii8iPT09dVsxXT8tLVI6KytSO2JyZWFrO2Nhc2UidGFibGUtcm93Ijpj''@;'; put 'put ''YXNlIlx1ODg0YyI6aWYoIi8iPT09dVsxXSl7SSs9ZGUsZGU9MTticmVha31pZigoaD1tZSh1WzBdLCExKSkuXHU4ODRjXHU1M2Y3P0k9aC5cdTg4NGNcdTUzZjctMTotMT09SSYmKEk9MCksKGRlPStoWyJudW1iZXItcm93cy1yZXBlYXRlZCJdfHwxKTwxMClmb3IoWj0wO1o8ZGU7KytaKVI+''@;'; put 'put ''MCYmKHJlW0krWl09e2xldmVsOlJ9KTt5PS0xO2JyZWFrO2Nhc2UiY292ZXJlZC10YWJsZS1jZWxsIjoiLyIhPT11WzFdJiYrK3ksci5zaGVldFN0dWJzJiYoci5kZW5zZT8odltJXXx8KHZbSV09W10pLHZbSV1beV09e3Q6InoifSk6dltnZSh7cjpJLGM6eX0pXT17dDoieiJ9KSxUPSIiLE09''@;'; put 'put ''W107YnJlYWs7Y2FzZSJ0YWJsZS1jZWxsIjpjYXNlIlx1NjU3MFx1NjM2ZSI6aWYoIi8iPT09dVswXS5jaGFyQXQodVswXS5sZW5ndGgtMikpKyt5LGs9bWUodVswXSwhMSksdWU9cGFyc2VJbnQoa1sibnVtYmVyLWNvbHVtbnMtcmVwZWF0ZWQiXXx8IjEiLDEwKSxwPXt0OiJ6Iix2Om51bGx9''@;'; put 'put ''LGsuZm9ybXVsYSYmMCE9ci5jZWxsRm9ybXVsYSYmKHAuZj1OZihJZShrLmZvcm11bGEpKSksInN0cmluZyI9PShrLlx1NjU3MFx1NjM2ZVx1N2M3Ylx1NTc4Ynx8a1sidmFsdWUtdHlwZSJdKSYmKHAudD0icyIscC52PUllKGtbInN0cmluZy12YWx1ZSJdfHwiIiksci5kZW5zZT8odltJXXx8''@;'; put 'put ''KHZbSV09W10pLHZbSV1beV09cCk6dltnZSh7cjpJLGM6eX0pXT1wKSx5Kz11ZS0xO2Vsc2UgaWYoIi8iIT09dVsxXSl7VD0iIixnPTAsTT1bXSx1ZT0xO3ZhciBRPWRlP0krZGUtMTpJO2lmKCsreT5QLmUuYyYmKFAuZS5jPXkpLHk8UC5zLmMmJihQLnMuYz15KSxJPFAucy5yJiYoUC5zLnI9''@;'; put 'put ''SSksUT5QLmUuciYmKFAuZS5yPVEpLEM9W10sVT17fSxwPXt0OihrPW1lKHVbMF0sITEpKS5cdTY1NzBcdTYzNmVcdTdjN2JcdTU3OGJ8fGtbInZhbHVlLXR5cGUiXSx2Om51bGx9LHIuY2VsbEZvcm11bGEpaWYoay5mb3JtdWxhJiYoay5mb3JtdWxhPUllKGsuZm9ybXVsYSkpLGtbIm51bWJl''@;'; put 'put ''ci1tYXRyaXgtY29sdW1ucy1zcGFubmVkIl0mJmtbIm51bWJlci1tYXRyaXgtcm93cy1zcGFubmVkIl0mJihlZT1wYXJzZUludChrWyJudW1iZXItbWF0cml4LXJvd3Mtc3Bhbm5lZCJdLDEwKXx8MCxsZT1wYXJzZUludChrWyJudW1iZXItbWF0cml4LWNvbHVtbnMtc3Bhbm5lZCJdLDEwKXx8''@;'; put 'put ''MCxwLkY9d2UoYj17czp7cjpJLGM6eX0sZTp7cjpJK2VlLTEsYzp5K2xlLTF9fSksRmUucHVzaChbYixwLkZdKSksay5mb3JtdWxhKXAuZj1OZihrLmZvcm11bGEpO2Vsc2UgZm9yKFo9MDtaPEZlLmxlbmd0aDsrK1opST49RmVbWl1bMF0ucy5yJiZJPD1GZVtaXVswXS5lLnImJnk+PUZlW1pd''@;'; put 'put ''WzBdLnMuYyYmeTw9RmVbWl1bMF0uZS5jJiYocC5GPUZlW1pdWzFdKTtzd2l0Y2goKGtbIm51bWJlci1jb2x1bW5zLXNwYW5uZWQiXXx8a1sibnVtYmVyLXJvd3Mtc3Bhbm5lZCJdKSYmKGVlPXBhcnNlSW50KGtbIm51bWJlci1yb3dzLXNwYW5uZWQiXSwxMCl8fDAsbGU9cGFyc2VJbnQoa1si''@;'; put 'put ''bnVtYmVyLWNvbHVtbnMtc3Bhbm5lZCJdLDEwKXx8MCxYLnB1c2goYj17czp7cjpJLGM6eX0sZTp7cjpJK2VlLTEsYzp5K2xlLTF9fSkpLGtbIm51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl0mJih1ZT1wYXJzZUludChrWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdLDEwKSkscC50KXtjYXNl''@;'; put 'put ''ImJvb2xlYW4iOnAudD0iYiIscC52PVdlKGtbImJvb2xlYW4tdmFsdWUiXSk7YnJlYWs7Y2FzZSJmbG9hdCI6Y2FzZSJwZXJjZW50YWdlIjpjYXNlImN1cnJlbmN5IjpwLnQ9Im4iLHAudj1wYXJzZUZsb2F0KGsudmFsdWUpO2JyZWFrO2Nhc2UiZGF0ZSI6cC50PSJkIixwLnY9WGUoa1siZGF0''@;'; put 'put ''ZS12YWx1ZSJdKSxyLmNlbGxEYXRlc3x8KHAudD0ibiIscC52PWlyKHAudikpLHAuej0ibS9kL3l5IjticmVhaztjYXNlInRpbWUiOnAudD0ibiIscC52PXVvKGtbInRpbWUtdmFsdWUiXSkvODY0MDAsci5jZWxsRGF0ZXMmJihwLnQ9ImQiLHAudj1vMChwLnYpKSxwLno9IkhIOk1NOlNTIjti''@;'; put 'put ''cmVhaztjYXNlIm51bWJlciI6cC50PSJuIixwLnY9cGFyc2VGbG9hdChrLlx1NjU3MFx1NjM2ZVx1NjU3MFx1NTAzYyk7YnJlYWs7ZGVmYXVsdDppZigic3RyaW5nIiE9PXAudCYmInRleHQiIT09cC50JiZwLnQpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCB2YWx1ZSB0eXBlICIrcC50''@;'; put 'put ''KTtwLnQ9InMiLG51bGwhPWtbInN0cmluZy12YWx1ZSJdJiYoVD1JZShrWyJzdHJpbmctdmFsdWUiXSksTT1bXSl9fWVsc2V7aWYoaj0hMSwicyI9PT1wLnQmJihwLnY9VHx8IiIsTS5sZW5ndGgmJihwLlI9TSksaj0wPT1nKSx4ZS5UYXJnZXQmJihwLmw9eGUpLEMubGVuZ3RoPjAmJihwLmM9''@;'; put 'put ''QyxDPVtdKSxUJiYhMSE9PXIuY2VsbFRleHQmJihwLnc9VCksaiYmKHAudD0ieiIsZGVsZXRlIHAudiksKCFqfHxyLnNoZWV0U3R1YnMpJiYhKHIuc2hlZXRSb3dzJiZyLnNoZWV0Um93czw9SSkpZm9yKHZhciBZPTA7WTxkZTsrK1kpe2lmKHVlPXBhcnNlSW50KGtbIm51bWJlci1jb2x1bW5z''@;'; put 'put ''LXJlcGVhdGVkIl18fCIxIiwxMCksci5kZW5zZSlmb3IodltJK1ldfHwodltJK1ldPVtdKSx2W0krWV1beV09MD09WT9wOk1lKHApOy0tdWU+MDspdltJK1ldW3krdWVdPU1lKHApO2Vsc2UgZm9yKHZbZ2Uoe3I6SStZLGM6eX0pXT1wOy0tdWU+MDspdltnZSh7cjpJK1ksYzp5K3VlfSldPU1l''@;'; put 'put ''KHApO1AuZS5jPD15JiYoUC5lLmM9eSl9eSs9KHVlPXBhcnNlSW50KGtbIm51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl18fCIxIiwxMCkpLTEsdWU9MCxwPXt9LFQ9IiIsTT1bXX14ZT17fTticmVhaztjYXNlImRvY3VtZW50IjpjYXNlImRvY3VtZW50LWNvbnRlbnQiOmNhc2UiXHU3NTM1XHU1''@;'; put 'put ''YjUwXHU4ODY4XHU2ODNjXHU2NTg3XHU2ODYzIjpjYXNlInNwcmVhZHNoZWV0IjpjYXNlIlx1NGUzYlx1NGY1MyI6Y2FzZSJzY3JpcHRzIjpjYXNlInN0eWxlcyI6Y2FzZSJmb250LWZhY2UtZGVjbHMiOmNhc2UibWFzdGVyLXN0eWxlcyI6aWYoIi8iPT09dVsxXSl7aWYoKGk9bi5wb3AoKSlb''@;'; put 'put ''MF0hPT11WzNdKXRocm93IkJhZCBzdGF0ZTogIitpfWVsc2UiLyIhPT11WzBdLmNoYXJBdCh1WzBdLmxlbmd0aC0yKSYmbi5wdXNoKFt1WzNdLCEwXSk7YnJlYWs7Y2FzZSJhbm5vdGF0aW9uIjppZigiLyI9PT11WzFdKXtpZigoaT1uLnBvcCgpKVswXSE9PXVbM10pdGhyb3ciQmFkIHN0YXRl''@;'; put 'put ''OiAiK2k7VS50PVQsTS5sZW5ndGgmJihVLlI9TSksVS5hPU8sQy5wdXNoKFUpfWVsc2UiLyIhPT11WzBdLmNoYXJBdCh1WzBdLmxlbmd0aC0yKSYmbi5wdXNoKFt1WzNdLCExXSk7Tz0iIixEPTAsVD0iIixnPTAsTT1bXTticmVhaztjYXNlImNyZWF0b3IiOiIvIj09PXVbMV0/Tz1hLnNsaWNl''@;'; put 'put ''KEQsdS5pbmRleCk6RD11LmluZGV4K3VbMF0ubGVuZ3RoO2JyZWFrO2Nhc2UibWV0YSI6Y2FzZSJcdTUxNDNcdTY1NzBcdTYzNmUiOmNhc2Uic2V0dGluZ3MiOmNhc2UiY29uZmlnLWl0ZW0tc2V0IjpjYXNlImNvbmZpZy1pdGVtLW1hcC1pbmRleGVkIjpjYXNlImNvbmZpZy1pdGVtLW1hcC1l''@;'; put 'put ''bnRyeSI6Y2FzZSJjb25maWctaXRlbS1tYXAtbmFtZWQiOmNhc2Uic2hhcGVzIjpjYXNlImZyYW1lIjpjYXNlInRleHQtYm94IjpjYXNlImltYWdlIjpjYXNlImRhdGEtcGlsb3QtdGFibGVzIjpjYXNlImxpc3Qtc3R5bGUiOmNhc2UiZm9ybSI6Y2FzZSJkZGUtbGlua3MiOmNhc2UiZXZlbnQt''@;'; put 'put ''bGlzdGVuZXJzIjpjYXNlImNoYXJ0IjppZigiLyI9PT11WzFdKXtpZigoaT1uLnBvcCgpKVswXSE9PXVbM10pdGhyb3ciQmFkIHN0YXRlOiAiK2l9ZWxzZSIvIiE9PXVbMF0uY2hhckF0KHVbMF0ubGVuZ3RoLTIpJiZuLnB1c2goW3VbM10sITFdKTtUPSIiLGc9MCxNPVtdO2JyZWFrO2Nhc2Ui''@;'; put 'put ''c2NpZW50aWZpYy1udW1iZXIiOmNhc2UiY3VycmVuY3ktc3ltYm9sIjpjYXNlImN1cnJlbmN5LXN0eWxlIjpjYXNlInNjcmlwdCI6Y2FzZSJsaWJyYXJpZXMiOmNhc2UiYXV0b21hdGljLXN0eWxlcyI6Y2FzZSJkZWZhdWx0LXN0eWxlIjpjYXNlInBhZ2UtbGF5b3V0IjpjYXNlInN0eWxlIjpj''@;'; put 'put ''YXNlIm1hcCI6Y2FzZSJmb250LWZhY2UiOmNhc2UicGFyYWdyYXBoLXByb3BlcnRpZXMiOmNhc2UidGFibGUtcHJvcGVydGllcyI6Y2FzZSJ0YWJsZS1jb2x1bW4tcHJvcGVydGllcyI6Y2FzZSJ0YWJsZS1yb3ctcHJvcGVydGllcyI6Y2FzZSJ0YWJsZS1jZWxsLXByb3BlcnRpZXMiOmNhc2Ui''@;'; put 'put ''ZnJhY3Rpb24iOmNhc2UiYm9vbGVhbi1zdHlsZSI6Y2FzZSJib29sZWFuIjpjYXNlInRleHQtc3R5bGUiOmNhc2UidGV4dC1jb250ZW50IjpjYXNlInRleHQtcHJvcGVydGllcyI6Y2FzZSJlbWJlZGRlZC10ZXh0IjpjYXNlImJvZHkiOmNhc2UiXHU3NTM1XHU1YjUwXHU4ODY4XHU2ODNjIjpj''@;'; put 'put ''YXNlImZvcm1zIjpjYXNlInRhYmxlLWNvbHVtbiI6Y2FzZSJ0YWJsZS1oZWFkZXItcm93cyI6Y2FzZSJ0YWJsZS1yb3dzIjpjYXNlInRhYmxlLWNvbHVtbi1ncm91cCI6Y2FzZSJ0YWJsZS1oZWFkZXItY29sdW1ucyI6Y2FzZSJ0YWJsZS1jb2x1bW5zIjpjYXNlIm51bGwtZGF0ZSI6Y2FzZSJn''@;'; put 'put ''cmFwaGljLXByb3BlcnRpZXMiOmNhc2UiY2FsY3VsYXRpb24tc2V0dGluZ3MiOmNhc2UibmFtZWQtZXhwcmVzc2lvbnMiOmNhc2UibGFiZWwtcmFuZ2UiOmNhc2UibGFiZWwtcmFuZ2VzIjpjYXNlIm5hbWVkLWV4cHJlc3Npb24iOmNhc2Uic29ydCI6Y2FzZSJzb3J0LWJ5IjpjYXNlInNvcnQt''@;'; put 'put ''Z3JvdXBzIjpjYXNlInRhYiI6Y2FzZSJsaW5lLWJyZWFrIjpjYXNlInNwYW4iOmNhc2UicyI6Y2FzZSJkYXRlIjpjYXNlIm9iamVjdCI6Y2FzZSJ0aXRsZSI6Y2FzZSJcdTY4MDdcdTk4OTgiOmNhc2UiZGVzYyI6Y2FzZSJiaW5hcnktZGF0YSI6Y2FzZSJ0YWJsZS1zb3VyY2UiOmNhc2Uic2Nl''@;'; put 'put ''bmFyaW8iOmNhc2UiaXRlcmF0aW9uIjpjYXNlImNvbnRlbnQtdmFsaWRhdGlvbnMiOmNhc2UiY29udGVudC12YWxpZGF0aW9uIjpjYXNlImhlbHAtbWVzc2FnZSI6Y2FzZSJlcnJvci1tZXNzYWdlIjpjYXNlImRhdGFiYXNlLXJhbmdlcyI6Y2FzZSJmaWx0ZXIiOmNhc2UiZmlsdGVyLWFuZCI6''@;'; put 'put ''Y2FzZSJmaWx0ZXItb3IiOmNhc2UiZmlsdGVyLWNvbmRpdGlvbiI6Y2FzZSJsaXN0LWxldmVsLXN0eWxlLWJ1bGxldCI6Y2FzZSJsaXN0LWxldmVsLXN0eWxlLW51bWJlciI6Y2FzZSJsaXN0LWxldmVsLXByb3BlcnRpZXMiOmNhc2Uic2VuZGVyLWZpcnN0bmFtZSI6Y2FzZSJzZW5kZXItbGFz''@;'; put 'put ''dG5hbWUiOmNhc2Uic2VuZGVyLWluaXRpYWxzIjpjYXNlInNlbmRlci10aXRsZSI6Y2FzZSJzZW5kZXItcG9zaXRpb24iOmNhc2Uic2VuZGVyLWVtYWlsIjpjYXNlInNlbmRlci1waG9uZS1wcml2YXRlIjpjYXNlInNlbmRlci1mYXgiOmNhc2Uic2VuZGVyLWNvbXBhbnkiOmNhc2Uic2VuZGVy''@;'; put 'put ''LXBob25lLXdvcmsiOmNhc2Uic2VuZGVyLXN0cmVldCI6Y2FzZSJzZW5kZXItY2l0eSI6Y2FzZSJzZW5kZXItcG9zdGFsLWNvZGUiOmNhc2Uic2VuZGVyLWNvdW50cnkiOmNhc2Uic2VuZGVyLXN0YXRlLW9yLXByb3ZpbmNlIjpjYXNlImF1dGhvci1uYW1lIjpjYXNlImF1dGhvci1pbml0aWFs''@;'; put 'put ''cyI6Y2FzZSJjaGFwdGVyIjpjYXNlImZpbGUtbmFtZSI6Y2FzZSJ0ZW1wbGF0ZS1uYW1lIjpjYXNlInNoZWV0LW5hbWUiOmNhc2UiZXZlbnQtbGlzdGVuZXIiOmNhc2UiaW5pdGlhbC1jcmVhdG9yIjpjYXNlImNyZWF0aW9uLWRhdGUiOmNhc2UicHJpbnQtZGF0ZSI6Y2FzZSJnZW5lcmF0b3Ii''@;'; put 'put ''OmNhc2UiZG9jdW1lbnQtc3RhdGlzdGljIjpjYXNlInVzZXItZGVmaW5lZCI6Y2FzZSJlZGl0aW5nLWR1cmF0aW9uIjpjYXNlImVkaXRpbmctY3ljbGVzIjpjYXNlImNvbmZpZy1pdGVtIjpjYXNlInBhZ2UtbnVtYmVyIjpjYXNlInBhZ2UtY291bnQiOmNhc2UidGltZSI6Y2FzZSJjZWxsLXJh''@;'; put 'put ''bmdlLXNvdXJjZSI6Y2FzZSJkZXRlY3RpdmUiOmNhc2Uib3BlcmF0aW9uIjpjYXNlImhpZ2hsaWdodGVkLXJhbmdlIjpjYXNlImRhdGEtcGlsb3QtdGFibGUiOmNhc2Uic291cmNlLWNlbGwtcmFuZ2UiOmNhc2Uic291cmNlLXNlcnZpY2UiOmNhc2UiZGF0YS1waWxvdC1maWVsZCI6Y2FzZSJk''@;'; put 'put ''YXRhLXBpbG90LWxldmVsIjpjYXNlImRhdGEtcGlsb3Qtc3VidG90YWxzIjpjYXNlImRhdGEtcGlsb3Qtc3VidG90YWwiOmNhc2UiZGF0YS1waWxvdC1tZW1iZXJzIjpjYXNlImRhdGEtcGlsb3QtbWVtYmVyIjpjYXNlImRhdGEtcGlsb3QtZGlzcGxheS1pbmZvIjpjYXNlImRhdGEtcGlsb3Qt''@;'; put 'put ''c29ydC1pbmZvIjpjYXNlImRhdGEtcGlsb3QtbGF5b3V0LWluZm8iOmNhc2UiZGF0YS1waWxvdC1maWVsZC1yZWZlcmVuY2UiOmNhc2UiZGF0YS1waWxvdC1ncm91cHMiOmNhc2UiZGF0YS1waWxvdC1ncm91cCI6Y2FzZSJkYXRhLXBpbG90LWdyb3VwLW1lbWJlciI6Y2FzZSJyZWN0IjpjYXNl''@;'; put 'put ''ImRkZS1jb25uZWN0aW9uLWRlY2xzIjpjYXNlImRkZS1jb25uZWN0aW9uLWRlY2wiOmNhc2UiZGRlLWxpbmsiOmNhc2UiZGRlLXNvdXJjZSI6Y2FzZSJwcm9wZXJ0aWVzIjpjYXNlInByb3BlcnR5IjpjYXNlInRhYmxlLXByb3RlY3Rpb24iOmNhc2UiZGF0YS1waWxvdC1ncmFuZC10b3RhbCI6''@;'; put 'put ''Y2FzZSJvZmZpY2UtZG9jdW1lbnQtY29tbW9uLWF0dHJzIjpicmVhaztjYXNlIm51bWJlci1zdHlsZSI6Y2FzZSJwZXJjZW50YWdlLXN0eWxlIjpjYXNlImRhdGUtc3R5bGUiOmNhc2UidGltZS1zdHlsZSI6aWYoIi8iPT09dVsxXSl7aWYoVltmLm5hbWVdPWMsKGk9bi5wb3AoKSlbMF0hPT11''@;'; put 'put ''WzNdKXRocm93IkJhZCBzdGF0ZTogIitpfWVsc2UiLyIhPT11WzBdLmNoYXJBdCh1WzBdLmxlbmd0aC0yKSYmKGM9IiIsZj1tZSh1WzBdLCExKSxuLnB1c2goW3VbM10sITBdKSk7YnJlYWs7Y2FzZSJudW1iZXIiOmNhc2UiZGF5IjpjYXNlIm1vbnRoIjpjYXNlInllYXIiOmNhc2UiZXJhIjpj''@;'; put 'put ''YXNlImRheS1vZi13ZWVrIjpjYXNlIndlZWstb2YteWVhciI6Y2FzZSJxdWFydGVyIjpjYXNlImhvdXJzIjpjYXNlIm1pbnV0ZXMiOmNhc2Uic2Vjb25kcyI6Y2FzZSJhbS1wbSI6c3dpdGNoKG5bbi5sZW5ndGgtMV1bMF0pe2Nhc2UidGltZS1zdHlsZSI6Y2FzZSJkYXRlLXN0eWxlIjpzPW1l''@;'; put 'put ''KHVbMF0sITEpLGMrPWljW3VbM11dWyJsb25nIj09PXMuc3R5bGU/MTowXX1icmVhaztjYXNlInRleHQiOmlmKCIvPiI9PT11WzBdLnNsaWNlKC0yKSlicmVhaztpZigiLyI9PT11WzFdKXN3aXRjaChuW24ubGVuZ3RoLTFdWzBdKXtjYXNlIm51bWJlci1zdHlsZSI6Y2FzZSJkYXRlLXN0eWxl''@;'; put 'put ''IjpjYXNlInRpbWUtc3R5bGUiOmMrPWEuc2xpY2Uobyx1LmluZGV4KX1lbHNlIG89dS5pbmRleCt1WzBdLmxlbmd0aDticmVhaztjYXNlIm5hbWVkLXJhbmdlIjpLPWJuKChzPW1lKHVbMF0sITEpKVsiY2VsbC1yYW5nZS1hZGRyZXNzIl0pO3ZhciBFZT17TmFtZTpzLm5hbWUsUmVmOktbMF0r''@;'; put 'put ''IiEiK0tbMV19O3NlJiYoRWUuU2hlZXQ9ZC5sZW5ndGgpLGNlLk5hbWVzLnB1c2goRWUpO2JyZWFrO2Nhc2UicCI6Y2FzZSJcdTY1ODdcdTY3MmNcdTRlMzIiOmlmKFsibWFzdGVyLXN0eWxlcyJdLmluZGV4T2YobltuLmxlbmd0aC0xXVswXSk+LTEpYnJlYWs7aWYoIi8iIT09dVsxXXx8ayYm''@;'; put 'put ''a1sic3RyaW5nLXZhbHVlIl0pbWUodVswXSwhMSksZz11LmluZGV4K3VbMF0ubGVuZ3RoO2Vsc2V7dmFyIEE9Um0oYS5zbGljZShnLHUuaW5kZXgpKTtUPShULmxlbmd0aD4wP1QrIlxuIjoiIikrQVswXX1icmVhaztjYXNlImRhdGFiYXNlLXJhbmdlIjppZigiLyI9PT11WzFdKWJyZWFrO3Ry''@;'; put 'put ''eXt4WyhLPWJuKG1lKHVbMF0pWyJ0YXJnZXQtcmFuZ2UtYWRkcmVzcyJdKSlbMF1dWyIhYXV0b2ZpbHRlciJdPXtyZWY6S1sxXX19Y2F0Y2h7fWJyZWFrO2Nhc2UiYSI6aWYoIi8iIT09dVsxXSl7aWYoISh4ZT1tZSh1WzBdLCExKSkuaHJlZilicmVhazt4ZS5UYXJnZXQ9SWUoeGUuaHJlZiks''@;'; put 'put ''ZGVsZXRlIHhlLmhyZWYsIiMiPT14ZS5UYXJnZXQuY2hhckF0KDApJiZ4ZS5UYXJnZXQuaW5kZXhPZigiLiIpPi0xPyhLPWJuKHhlLlRhcmdldC5zbGljZSgxKSkseGUuVGFyZ2V0PSIjIitLWzBdKyIhIitLWzFdKTp4ZS5UYXJnZXQubWF0Y2goL15cLlwuW1xcXC9dLykmJih4ZS5UYXJnZXQ9''@;'; put 'put ''eGUuVGFyZ2V0LnNsaWNlKDMpKX1icmVhaztkZWZhdWx0OnN3aXRjaCh1WzJdKXtjYXNlImRjOiI6Y2FzZSJjYWxjZXh0OiI6Y2FzZSJsb2V4dDoiOmNhc2Uib29vOiI6Y2FzZSJjaGFydG9vbzoiOmNhc2UiZHJhdzoiOmNhc2Uic3R5bGU6IjpjYXNlImNoYXJ0OiI6Y2FzZSJmb3JtOiI6Y2Fz''@;'; put 'put ''ZSJ1b2Y6IjpjYXNlIlx1ODg2ODoiOmNhc2UiXHU1YjU3OiI6YnJlYWs7ZGVmYXVsdDppZihyLldURil0aHJvdyBuZXcgRXJyb3IodSl9fXZhciBQZT17U2hlZXRzOngsU2hlZXROYW1lczpkLFdvcmtib29rOmNlfTtyZXR1cm4gci5ib29rU2hlZXRzJiZkZWxldGUgUGUuU2hlZXRzLFBlfWZ1''@;'; put 'put ''bmN0aW9uIGNjKGUsdCl7cmV0dXJuIHNjKGUsdCl9ZnVuY3Rpb24gSnQoZSl7cmV0dXJuIG5ldyBEYXRhVmlldyhlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQsZS5ieXRlTGVuZ3RoKX1mdW5jdGlvbiBIbihlKXtyZXR1cm4gdHlwZW9mIFRleHREZWNvZGVyPCJ1Ij8obmV3IFRleHREZWNvZGVyKS5k''@;'; put 'put ''ZWNvZGUoZSk6QmUod3QoZSkpfWZ1bmN0aW9uIER0KGUpe3ZhciB0PWUucmVkdWNlKGZ1bmN0aW9uKG4saSl7cmV0dXJuIG4raS5sZW5ndGh9LDApLHI9bmV3IFVpbnQ4QXJyYXkodCksYT0wO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24obil7ci5zZXQobixhKSxhKz1uLmxlbmd0aH0pLHJ9''@;'; put 'put ''ZnVuY3Rpb24gdWMoZSl7cmV0dXJuIDE2ODQzMDA5KigoZT0oODU4OTkzNDU5JihlLT1lPj4xJjE0MzE2NTU3NjUpKSsoZT4+MiY4NTg5OTM0NTkpKSsoZT4+NCkmMjUyNjQ1MTM1KT4+PjI0fWZ1bmN0aW9uIEthKGUsdCl7dmFyIHI9dD90WzBdOjAsYT0xMjcmZVtyXTtlOmlmKGVbcisrXT49''@;'; put 'put ''MTI4JiYoYXw9KDEyNyZlW3JdKTw8NyxlW3IrK108MTI4fHwoYXw9KDEyNyZlW3JdKTw8MTQsZVtyKytdPDEyOCl8fChhfD0oMTI3JmVbcl0pPDwyMSxlW3IrK108MTI4KXx8KGErPSgxMjcmZVtyXSkqTWF0aC5wb3coMiwyOCksKytyLGVbcisrXTwxMjgpfHwoYSs9KDEyNyZlW3JdKSpNYXRo''@;'; put 'put ''LnBvdygyLDM1KSwrK3IsZVtyKytdPDEyOCl8fChhKz0oMTI3JmVbcl0pKk1hdGgucG93KDIsNDIpLCsrcixlW3IrK108MTI4KSkpYnJlYWsgZTtyZXR1cm4gdCYmKHRbMF09ciksYX1mdW5jdGlvbiBZZShlKXt2YXIgdD0wLHI9MTI3JmVbdF07ZTppZihlW3QrK10+PTEyOCl7aWYocnw9KDEy''@;'; put 'put ''NyZlW3RdKTw8NyxlW3QrK108MTI4fHwocnw9KDEyNyZlW3RdKTw8MTQsZVt0KytdPDEyOCl8fChyfD0oMTI3JmVbdF0pPDwyMSxlW3QrK108MTI4KSlicmVhayBlO3J8PSgxMjcmZVt0XSk8PDI4fXJldHVybiByfWZ1bmN0aW9uIFJlKGUpe2Zvcih2YXIgdD1bXSxyPVswXTtyWzBdPGUubGVu''@;'; put 'put ''Z3RoOyl7dmFyIGYsYT1yWzBdLG49S2EoZSxyKSxpPTcmbixzPTA7aWYoMD09KG49TWF0aC5mbG9vcihuLzgpKSlicmVhaztzd2l0Y2goaSl7Y2FzZSAwOmZvcih2YXIgYz1yWzBdO2VbclswXSsrXT49MTI4Oyk7Zj1lLnNsaWNlKGMsclswXSk7YnJlYWs7Y2FzZSA1OmY9ZS5zbGljZShyWzBd''@;'; put 'put ''LHJbMF0rKHM9NCkpLHJbMF0rPXM7YnJlYWs7Y2FzZSAxOmY9ZS5zbGljZShyWzBdLHJbMF0rKHM9OCkpLHJbMF0rPXM7YnJlYWs7Y2FzZSAyOnM9S2EoZSxyKSxmPWUuc2xpY2UoclswXSxyWzBdK3MpLHJbMF0rPXM7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlBCIFR5cGUgIi5j''@;'; put 'put ''b25jYXQoaSwiIGZvciBGaWVsZCAiKS5jb25jYXQobiwiIGF0IG9mZnNldCAiKS5jb25jYXQoYSkpfXZhciBvPXtkYXRhOmYsdHlwZTppfTtudWxsPT10W25dP3Rbbl09W29dOnRbbl0ucHVzaChvKX1yZXR1cm4gdH1mdW5jdGlvbiBWbihlLHQpe3JldHVybiBlPy5tYXAoZnVuY3Rpb24ocil7''@;'; put 'put ''cmV0dXJuIHQoci5kYXRhKX0pfHxbXX1mdW5jdGlvbiBNbShlLHQpe2lmKDAhPWUpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIFNuYXBweSBjaHVuayB0eXBlICIuY29uY2F0KGUpKTtmb3IodmFyIHI9WzBdLGE9S2EodCxyKSxuPVtdO3JbMF08dC5sZW5ndGg7KXt2YXIgaT0zJnRbclsw''@;'; put 'put ''XV07aWYoMCE9aSl7dmFyIGM9MCxvPTA7aWYoMT09aT8obz00Kyh0W3JbMF1dPj4yJjcpLGM9KDIyNCZ0W3JbMF0rK10pPDwzLGN8PXRbclswXSsrXSk6KG89MSsodFtyWzBdKytdPj4yKSwyPT1pPyhjPXRbclswXV18dFtyWzBdKzFdPDw4LHJbMF0rPTIpOihjPSh0W3JbMF1dfHRbclswXSsx''@;'; put 'put ''XTw8OHx0W3JbMF0rMl08PDE2fHRbclswXSszXTw8MjQpPj4+MCxyWzBdKz00KSksbj1bRHQobildLDA9PWMpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG9mZnNldCAwIik7aWYoYz5uWzBdLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgb2Zmc2V0IGJleW9uZCBsZW5ndGgiKTtp''@;'; put 'put ''ZihvPj1jKWZvcihuLnB1c2goblswXS5zbGljZSgtYykpLG8tPWM7bz49bltuLmxlbmd0aC0xXS5sZW5ndGg7KW4ucHVzaChuW24ubGVuZ3RoLTFdKSxvLT1uW24ubGVuZ3RoLTFdLmxlbmd0aDtuLnB1c2goblswXS5zbGljZSgtYywtYytvKSl9ZWxzZXt2YXIgcz10W3JbMF0rK10+PjI7aWYo''@;'; put 'put ''czw2MCkrK3M7ZWxzZXt2YXIgZj1zLTU5O3M9dFtyWzBdXSxmPjEmJihzfD10W3JbMF0rMV08PDgpLGY+MiYmKHN8PXRbclswXSsyXTw8MTYpLGY+MyYmKHN8PXRbclswXSszXTw8MjQpLHM+Pj49MCxzKyssclswXSs9Zn1uLnB1c2godC5zbGljZShyWzBdLHJbMF0rcykpLHJbMF0rPXN9fXZh''@;'; put 'put ''ciBsPUR0KG4pO2lmKGwubGVuZ3RoIT1hKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBsZW5ndGg6ICIuY29uY2F0KGwubGVuZ3RoLCIgIT0gIikuY29uY2F0KGEpKTtyZXR1cm4gbH1mdW5jdGlvbiBIbShlLHQscil7c3dpdGNoKGVbMF0pe2Nhc2UgMDpjYXNlIDE6Y2FzZSAyOmNhc2Ug''@;'; put 'put ''MzpyZXR1cm4gZnVuY3Rpb24gVW0oZSx0LHIsYSl7dmFyIGgsbj1KdChlKSxpPW4uZ2V0VWludDMyKDQsITApLHM9KGE+MT8xMjo4KSs0KnVjKGkmKGE+MT8zNDcwOjM5OCkpLGY9LTEsYz0tMSxvPU5hTixsPW5ldyBEYXRlKDIwMDEsMCwxKTtzd2l0Y2goNTEyJmkmJihmPW4uZ2V0VWludDMy''@;'; put 'put ''KHMsITApLHMrPTQpLHMrPTQqdWMoaSYoYT4xPzEyMjg4OjQwOTYpKSwxNiZpJiYoYz1uLmdldFVpbnQzMihzLCEwKSxzKz00KSwzMiZpJiYobz1uLmdldEZsb2F0NjQocywhMCkscys9OCksNjQmaSYmKGwuc2V0VGltZShsLmdldFRpbWUoKSsxZTMqbi5nZXRGbG9hdDY0KHMsITApKSxzKz04''@;'; put 'put ''KSxlWzJdKXtjYXNlIDA6YnJlYWs7Y2FzZSAyOmg9e3Q6Im4iLHY6b307YnJlYWs7Y2FzZSAzOmg9e3Q6InMiLHY6dFtjXX07YnJlYWs7Y2FzZSA1Omg9e3Q6ImQiLHY6bH07YnJlYWs7Y2FzZSA2Omg9e3Q6ImIiLHY6bz4wfTticmVhaztjYXNlIDc6aD17dDoibiIsdjpvLzg2NDAwfTticmVh''@;'; put 'put ''aztjYXNlIDg6aD17dDoiZSIsdjowfTticmVhaztjYXNlIDk6aWYoZj4tMSloPXt0OiJzIix2OnJbZl19O2Vsc2UgaWYoYz4tMSloPXt0OiJzIix2OnRbY119O2Vsc2V7aWYoaXNOYU4obykpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBjZWxsIHR5cGUgIi5jb25jYXQoZS5zbGljZSgw''@;'; put 'put ''LDQpKSk7aD17dDoibiIsdjpvfX1icmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY2VsbCB0eXBlICIuY29uY2F0KGUuc2xpY2UoMCw0KSkpfXJldHVybiBofShlLHQscixlWzBdKTtjYXNlIDU6cmV0dXJuIGZ1bmN0aW9uIFdtKGUsdCxyKXt2YXIgaCxhPUp0KGUp''@;'; put 'put ''LG49YS5nZXRVaW50MzIoOCwhMCksaT0xMixzPS0xLGY9LTEsYz1OYU4sbz1OYU4sbD1uZXcgRGF0ZSgyMDAxLDAsMSk7c3dpdGNoKDEmbiYmKGM9ZnVuY3Rpb24gTG0oZSx0KXtmb3IodmFyIHI9KDEyNyZlW3QrMTVdKTw8N3xlW3QrMTRdPj4xLGE9MSZlW3QrMTRdLG49dCsxMztuPj10Oy0t''@;'; put 'put ''bilhPTI1NiphK2Vbbl07cmV0dXJuKDEyOCZlW3QrMTVdPy1hOmEpKk1hdGgucG93KDEwLHItNjE3Nil9KGUsaSksaSs9MTYpLDImbiYmKG89YS5nZXRGbG9hdDY0KGksITApLGkrPTgpLDQmbiYmKGwuc2V0VGltZShsLmdldFRpbWUoKSsxZTMqYS5nZXRGbG9hdDY0KGksITApKSxpKz04KSw4''@;'; put 'put ''Jm4mJihmPWEuZ2V0VWludDMyKGksITApLGkrPTQpLDE2Jm4mJihzPWEuZ2V0VWludDMyKGksITApLGkrPTQpLGVbMV0pe2Nhc2UgMDpicmVhaztjYXNlIDI6Y2FzZSAxMDpoPXt0OiJuIix2OmN9O2JyZWFrO2Nhc2UgMzpoPXt0OiJzIix2OnRbZl19O2JyZWFrO2Nhc2UgNTpoPXt0OiJkIix2''@;'; put 'put ''Omx9O2JyZWFrO2Nhc2UgNjpoPXt0OiJiIix2Om8+MH07YnJlYWs7Y2FzZSA3Omg9e3Q6Im4iLHY6by84NjQwMH07YnJlYWs7Y2FzZSA4Omg9e3Q6ImUiLHY6MH07YnJlYWs7Y2FzZSA5OmlmKCEocz4tMSkpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBjZWxsIHR5cGUgIi5jb25jYXQo''@;'; put 'put ''ZVsxXSwiIDogIikuY29uY2F0KDMxJm4sIiA6ICIpLmNvbmNhdChlLnNsaWNlKDAsNCkpKTtoPXt0OiJzIix2OnJbc119O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBjZWxsIHR5cGUgIi5jb25jYXQoZVsxXSwiIDogIikuY29uY2F0KDMxJm4sIiA6ICIpLmNv''@;'; put 'put ''bmNhdChlLnNsaWNlKDAsNCkpKX1yZXR1cm4gaH0oZSx0LHIpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBwYXlsb2FkIHZlcnNpb24gIi5jb25jYXQoZVswXSkpfX1mdW5jdGlvbiBFcihlKXtyZXR1cm4gS2EoUmUoZSlbMV1bMF0uZGF0YSl9ZnVuY3Rpb24gaGMoZSx0''@;'; put 'put ''KXt2YXIgcj1SZSh0LmRhdGEpLGE9WWUoclsxXVswXS5kYXRhKSxpPVtdO3JldHVybihyWzNdfHxbXSkuZm9yRWFjaChmdW5jdGlvbihzKXt2YXIgZj1SZShzLmRhdGEpLGM9WWUoZlsxXVswXS5kYXRhKT4+PjA7c3dpdGNoKGEpe2Nhc2UgMTppW2NdPUhuKGZbM11bMF0uZGF0YSk7YnJlYWs7''@;'; put 'put ''Y2FzZSA4OnZhciBsPVJlKGVbRXIoZls5XVswXS5kYXRhKV1bMF0uZGF0YSksaD1lW0VyKGxbMV1bMF0uZGF0YSldWzBdLHg9WWUoaC5tZXRhWzFdWzBdLmRhdGEpO2lmKDIwMDEhPXgpdGhyb3cgbmV3IEVycm9yKCIyMDAwIHVuZXhwZWN0ZWQgcmVmZXJlbmNlIHRvICIuY29uY2F0KHgpKTt2''@;'; put 'put ''YXIgZD1SZShoLmRhdGEpO2lbY109ZFszXS5tYXAoZnVuY3Rpb24odil7cmV0dXJuIEhuKHYuZGF0YSl9KS5qb2luKCIiKX19KSxpfWZ1bmN0aW9uIHptKGUsdCl7dmFyIGE9eyIhcmVmIjoiQTEifSxuPWVbRXIoUmUodC5kYXRhKVsyXVswXS5kYXRhKV0saT1ZZShuWzBdLm1ldGFbMV1bMF0u''@;'; put 'put ''ZGF0YSk7aWYoNjAwMSE9aSl0aHJvdyBuZXcgRXJyb3IoIjYwMDAgdW5leHBlY3RlZCByZWZlcmVuY2UgdG8gIi5jb25jYXQoaSkpO3JldHVybiBmdW5jdGlvbiBHbShlLHQscil7dmFyIGEsbj1SZSh0LmRhdGEpLGk9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fTtpZihpLmUucj0oWWUobls2''@;'; put 'put ''XVswXS5kYXRhKT4+PjApLTEsaS5lLnI8MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcm93IHZhcmludCAiLmNvbmNhdChuWzZdWzBdLmRhdGEpKTtpZihpLmUuYz0oWWUobls3XVswXS5kYXRhKT4+PjApLTEsaS5lLmM8MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29sIHZhcmludCAi''@;'; put 'put ''LmNvbmNhdChuWzddWzBdLmRhdGEpKTtyWyIhcmVmIl09d2UoaSk7dmFyIHM9UmUobls0XVswXS5kYXRhKSxmPWhjKGUsZVtFcihzWzRdWzBdLmRhdGEpXVswXSksYz1udWxsIT0oYT1zWzE3XSkmJmFbMF0/aGMoZSxlW0VyKHNbMTddWzBdLmRhdGEpXVswXSk6W10sbz1SZShzWzNdWzBdLmRh''@;'; put 'put ''dGEpLGw9MDtvWzFdLmZvckVhY2goZnVuY3Rpb24oaCl7dmFyIHg9UmUoaC5kYXRhKSxkPWVbRXIoeFsyXVswXS5kYXRhKV1bMF0sdj1ZZShkLm1ldGFbMV1bMF0uZGF0YSk7aWYoNjAwMiE9dil0aHJvdyBuZXcgRXJyb3IoIjYwMDEgdW5leHBlY3RlZCByZWZlcmVuY2UgdG8gIi5jb25jYXQo''@;'; put 'put ''dikpO3ZhciB1PWZ1bmN0aW9uIFhtKGUsdCl7dmFyIHIsYT1SZSh0LmRhdGEpLG49bnVsbCE9KHI9YT8uWzddKSYmclswXT9ZZShhWzddWzBdLmRhdGEpPj4+MD4wPzE6MDotMSxpPVZuKGFbNV0sZnVuY3Rpb24ocyl7cmV0dXJuIGZ1bmN0aW9uIFZtKGUsdCl7dmFyIHIsYSxuLGkscyxmLGMs''@;'; put 'put ''byxsLGgseCxkLHYsdSxOLE0scD1SZShlKSxrPVllKHBbMV1bMF0uZGF0YSk+Pj4wLFQ9WWUocFsyXVswXS5kYXRhKT4+PjAsZz0obnVsbD09KGE9bnVsbD09KHI9cFs4XSk/dm9pZCAwOnJbMF0pP3ZvaWQgMDphLmRhdGEpJiZZZShwWzhdWzBdLmRhdGEpPjB8fCExO2lmKG51bGwhPShpPW51''@;'; put 'put ''bGw9PShuPXBbN10pP3ZvaWQgMDpuWzBdKSYmaS5kYXRhJiYwIT10KU49bnVsbD09KGY9bnVsbD09KHM9cFs3XSk/dm9pZCAwOnNbMF0pP3ZvaWQgMDpmLmRhdGEsTT1udWxsPT0obz1udWxsPT0oYz1wWzZdKT92b2lkIDA6Y1swXSk/dm9pZCAwOm8uZGF0YTtlbHNle2lmKG51bGw9PShoPW51''@;'; put 'put ''bGw9PShsPXBbNF0pP3ZvaWQgMDpsWzBdKXx8IWguZGF0YXx8MT09dCl0aHJvdyJOVU1CRVJTIFRpbGUgbWlzc2luZyAiLmNvbmNhdCh0LCIgY2VsbCBzdG9yYWdlIik7Tj1udWxsPT0oZD1udWxsPT0oeD1wWzRdKT92b2lkIDA6eFswXSk/dm9pZCAwOmQuZGF0YSxNPW51bGw9PSh1PW51bGw9''@;'; put 'put ''PSh2PXBbM10pP3ZvaWQgMDp2WzBdKT92b2lkIDA6dS5kYXRhfWZvcih2YXIgST1nPzQ6MSx5PUp0KE4pLFA9W10sUj0wO1I8Ti5sZW5ndGgvMjsrK1Ipe3ZhciBWPXkuZ2V0VWludDE2KDIqUiwhMCk7Vjw2NTUzNSYmUC5wdXNoKFtSLFZdKX1pZihQLmxlbmd0aCE9VCl0aHJvdyJFeHBlY3Rl''@;'; put 'put ''ZCAiLmNvbmNhdChULCIgY2VsbHMsIGZvdW5kICIpLmNvbmNhdChQLmxlbmd0aCk7dmFyIFg9W107Zm9yKFI9MDtSPFAubGVuZ3RoLTE7KytSKVhbUFtSXVswXV09TS5zdWJhcnJheShQW1JdWzFdKkksUFtSKzFdWzFdKkkpO3JldHVybiBQLmxlbmd0aD49MSYmKFhbUFtQLmxlbmd0aC0xXVsw''@;'; put 'put ''XV09TS5zdWJhcnJheShQW1AubGVuZ3RoLTFdWzFdKkkpKSx7UjprLGNlbGxzOlh9fShzLG4pfSk7cmV0dXJue25yb3dzOlllKGFbNF1bMF0uZGF0YSk+Pj4wLGRhdGE6aS5yZWR1Y2UoZnVuY3Rpb24ocyxmKXtyZXR1cm4gc1tmLlJdfHwoc1tmLlJdPVtdKSxmLmNlbGxzLmZvckVhY2goZnVu''@;'; put 'put ''Y3Rpb24oYyxvKXtpZihzW2YuUl1bb10pdGhyb3cgbmV3IEVycm9yKCJEdXBsaWNhdGUgY2VsbCByPSIuY29uY2F0KGYuUiwiIGM9IikuY29uY2F0KG8pKTtzW2YuUl1bb109Y30pLHN9LFtdKX19KDAsZCk7dS5kYXRhLmZvckVhY2goZnVuY3Rpb24ocCxrKXtwLmZvckVhY2goZnVuY3Rpb24o''@;'; put 'put ''VCxnKXt2YXIgTj1nZSh7cjpsK2ssYzpnfSksTT1IbShULGYsYyk7TSYmKHJbTl09TSl9KX0pLGwrPXUubnJvd3N9KX0oZSxuWzBdLGEpLGF9ZnVuY3Rpb24gem4oZSl7dmFyIHQscixhLG4saT17fSxzPVtdO2lmKGUuRnVsbFBhdGhzLmZvckVhY2goZnVuY3Rpb24oYyl7aWYoYy5tYXRjaCgv''@;'; put 'put ''XC5pd3B2Mi8pKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgcGFzc3dvcmQgcHJvdGVjdGlvbiIpfSksZS5GaWxlSW5kZXguZm9yRWFjaChmdW5jdGlvbihjKXtpZihjLm5hbWUubWF0Y2goL1wuaXdhJC8pKXt2YXIgbyxsO3RyeXtvPWZ1bmN0aW9uIHpyKGUpe2Zvcih2YXIgdD1bXSxy''@;'; put 'put ''PTA7cjxlLmxlbmd0aDspe3ZhciBhPWVbcisrXSxuPWVbcl18ZVtyKzFdPDw4fGVbcisyXTw8MTY7dC5wdXNoKE1tKGEsZS5zbGljZShyKz0zLHIrbikpKSxyKz1ufWlmKHIhPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImRhdGEgaXMgbm90IGEgdmFsaWQgZnJhbWVkIHN0cmVhbSEiKTty''@;'; put 'put ''ZXR1cm4gRHQodCl9KGMuY29udGVudCl9Y2F0Y2goaCl7cmV0dXJuIGNvbnNvbGUubG9nKCI/PyAiK2MuY29udGVudC5sZW5ndGgrIiAiKyhoLm1lc3NhZ2V8fGgpKX10cnl7bD1mdW5jdGlvbiBHcihlKXtmb3IodmFyIHQscj1bXSxhPVswXTthWzBdPGUubGVuZ3RoOyl7dmFyIG49S2EoZSxh''@;'; put 'put ''KSxpPVJlKGUuc2xpY2UoYVswXSxhWzBdK24pKTthWzBdKz1uO3ZhciBzPXtpZDpZZShpWzFdWzBdLmRhdGEpLG1lc3NhZ2VzOltdfTtpWzJdLmZvckVhY2goZnVuY3Rpb24oZil7dmFyIGM9UmUoZi5kYXRhKSxvPVllKGNbM11bMF0uZGF0YSk7cy5tZXNzYWdlcy5wdXNoKHttZXRhOmMsZGF0''@;'; put 'put ''YTplLnNsaWNlKGFbMF0sYVswXStvKX0pLGFbMF0rPW99KSxudWxsIT0odD1pWzNdKSYmdFswXSYmKHMubWVyZ2U9WWUoaVszXVswXS5kYXRhKT4+PjA+MCksci5wdXNoKHMpfXJldHVybiByfShvKX1jYXRjaChoKXtyZXR1cm4gY29uc29sZS5sb2coIiMjICIrKGgubWVzc2FnZXx8aCkpfWwu''@;'; put 'put ''Zm9yRWFjaChmdW5jdGlvbihoKXtpW2guaWRdPWgubWVzc2FnZXMscy5wdXNoKGguaWQpfSl9fSksIXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiRmlsZSBoYXMgbm8gbWVzc2FnZXMiKTt2YXIgZj0obnVsbD09KG49bnVsbD09KGE9bnVsbD09KHI9bnVsbD09KHQ9aT8uWzFdKT92b2lkIDA6''@;'; put 'put ''dFswXSk/dm9pZCAwOnIubWV0YSk/dm9pZCAwOmFbMV0pP3ZvaWQgMDpuWzBdLmRhdGEpJiYxPT1ZZShpWzFdWzBdLm1ldGFbMV1bMF0uZGF0YSkmJmlbMV1bMF07aWYoZnx8cy5mb3JFYWNoKGZ1bmN0aW9uKGMpe2lbY10uZm9yRWFjaChmdW5jdGlvbihvKXtpZigxPT1ZZShvLm1ldGFbMV1b''@;'; put 'put ''MF0uZGF0YSk+Pj4wKXtpZihmKXRocm93IG5ldyBFcnJvcigiRG9jdW1lbnQgaGFzIG11bHRpcGxlIHJvb3RzIik7Zj1vfX0pfSksIWYpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBEb2N1bWVudCByb290Iik7cmV0dXJuIGZ1bmN0aW9uIGptKGUsdCl7dmFyIHI9e1NoZWV0TmFtZXM6''@;'; put 'put ''W10sU2hlZXRzOnt9fTtpZihWbihSZSh0LmRhdGEpWzFdLEVyKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe2VbaV0uZm9yRWFjaChmdW5jdGlvbihzKXtpZigyPT1ZZShzLm1ldGFbMV1bMF0uZGF0YSkpe3ZhciBjPWZ1bmN0aW9uICRtKGUsdCl7dmFyIHIsYT1SZSh0LmRhdGEpLG49e25hbWU6bnVs''@;'; put 'put ''bCE9KHI9YVsxXSkmJnJbMF0/SG4oYVsxXVswXS5kYXRhKToiIixzaGVldHM6W119O3JldHVybiBWbihhWzJdLEVyKS5mb3JFYWNoKGZ1bmN0aW9uKHMpe2Vbc10uZm9yRWFjaChmdW5jdGlvbihmKXs2ZTM9PVllKGYubWV0YVsxXVswXS5kYXRhKSYmbi5zaGVldHMucHVzaCh6bShlLGYpKX0p''@;'; put 'put ''fSksbn0oZSxzKTtjLnNoZWV0cy5mb3JFYWNoKGZ1bmN0aW9uKG8sbCl7ZWkocixvLDA9PWw/Yy5uYW1lOmMubmFtZSsiXyIrbCwhMCl9KX19KX0pLDA9PXIuU2hlZXROYW1lcy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJFbXB0eSBOVU1CRVJTIGZpbGUiKTtyZXR1cm4gcn0oaSxmKX1mdW5j''@;'; put 'put ''dGlvbiAkbihlKXshZnVuY3Rpb24geGMoZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe2Zvcih2YXIgYT0wO2EhPWUubGVuZ3RoOysrYSl7dmFyIG49ZVthXTt2b2lkIDA9PT1yW25bMF1dJiYocltuWzBdXT1uWzFdKSwibiI9PT1uWzJdJiYocltuWzBdXT1OdW1iZXIocltuWzBdXSkpfX19KFtbImNl''@;'; put 'put ''bGxORiIsITFdLFsiY2VsbEhUTUwiLCEwXSxbImNlbGxGb3JtdWxhIiwhMF0sWyJjZWxsU3R5bGVzIiwhMV0sWyJjZWxsVGV4dCIsITBdLFsiY2VsbERhdGVzIiwhMV0sWyJzaGVldFN0dWJzIiwhMV0sWyJzaGVldFJvd3MiLDAsIm4iXSxbImJvb2tEZXBzIiwhMV0sWyJib29rU2hlZXRzIiwh''@;'; put 'put ''MV0sWyJib29rUHJvcHMiLCExXSxbImJvb2tGaWxlcyIsITFdLFsiYm9va1ZCQSIsITFdLFsicGFzc3dvcmQiLCIiXSxbIldURiIsITFdXSkoZSl9ZnVuY3Rpb24gSm0oZSl7cmV0dXJuIGtlLldTLmluZGV4T2YoZSk+LTE/InNoZWV0IjprZS5DUyYmZT09a2UuQ1M/ImNoYXJ0IjprZS5EUyYm''@;'; put 'put ''ZT09a2UuRFM/ImRpYWxvZyI6a2UuTVMmJmU9PWtlLk1TPyJtYWNybyI6ZSYmZS5sZW5ndGg/ZToic2hlZXQifWZ1bmN0aW9uIFptKGUsdCxyLGEsbixpLHMsZixjLG8sbCxoKXt0cnl7aVthXT1JYShOcihlLHIsITApLHQpO3ZhciBkLHg9UWUoZSx0KTtzd2l0Y2goZil7Y2FzZSJzaGVldCI6''@;'; put 'put ''ZD1TcCh4LHQsbixjLGlbYV0sbyxsLGgpO2JyZWFrO2Nhc2UiY2hhcnQiOmlmKCEoZD1mdW5jdGlvbiBGcChlLHQscixhLG4saSxzLGYpe3JldHVybiIuYmluIj09PXQuc2xpY2UoLTQpP2Z1bmN0aW9uIHJwKGUsdCxyLGEsbil7aWYoIWUpcmV0dXJuIGU7YXx8KGE9eyIhaWQiOnt9fSk7dmFy''@;'; put 'put ''IGk9eyIhdHlwZSI6ImNoYXJ0IiwiIWRyYXdlbCI6bnVsbCwiIXJlbCI6IiJ9LHM9W10sZj0hMTtyZXR1cm4gaHQoZSxmdW5jdGlvbihvLGwsaCl7c3dpdGNoKGgpe2Nhc2UgNTUwOmlbIiFyZWwiXT1vO2JyZWFrO2Nhc2UgNjUxOm4uU2hlZXRzW3JdfHwobi5TaGVldHNbcl09e30pLG8ubmFt''@;'; put 'put ''ZSYmKG4uU2hlZXRzW3JdLkNvZGVOYW1lPW8ubmFtZSk7YnJlYWs7Y2FzZSA1NjI6Y2FzZSA2NTI6Y2FzZSA2Njk6Y2FzZSA2Nzk6Y2FzZSA1NTE6Y2FzZSA1NTI6Y2FzZSA0NzY6Y2FzZSAzMDcyOmJyZWFrO2Nhc2UgMzU6Zj0hMDticmVhaztjYXNlIDM2OmY9ITE7YnJlYWs7Y2FzZSAzNzpz''@;'; put 'put ''LnB1c2goaCk7YnJlYWs7Y2FzZSAzODpzLnBvcCgpO2JyZWFrO2RlZmF1bHQ6aWYobC5UPjApcy5wdXNoKGgpO2Vsc2UgaWYobC5UPDApcy5wb3AoKTtlbHNlIGlmKCFmfHx0LldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkIDB4IitoLnRvU3RyaW5nKDE2KSl9fSx0KSxh''@;'; put 'put ''WyIhaWQiXVtpWyIhcmVsIl1dJiYoaVsiIWRyYXdlbCJdPWFbIiFpZCJdW2lbIiFyZWwiXV0pLGl9KGUsYSxyLG4saSk6ZnVuY3Rpb24gWjIoZSx0LHIsYSxuKXtpZighZSlyZXR1cm4gZTthfHwoYT17IiFpZCI6e319KTt2YXIgcyxpPXsiIXR5cGUiOiJjaGFydCIsIiFkcmF3ZWwiOm51bGws''@;'; put 'put ''IiFyZWwiOiIifSxmPWUubWF0Y2goUGYpO3JldHVybiBmJiZMbihmWzBdLDAsbixyKSwocz1lLm1hdGNoKC9kcmF3aW5nIHI6aWQ9IiguKj8pIi8pKSYmKGlbIiFyZWwiXT1zWzFdKSxhWyIhaWQiXVtpWyIhcmVsIl1dJiYoaVsiIWRyYXdlbCJdPWFbIiFpZCJdW2lbIiFyZWwiXV0pLGl9KGUs''@;'; put 'put ''MCxyLG4saSl9KHgsdCxuLGMsaVthXSxvKSl8fCFkWyIhZHJhd2VsIl0pYnJlYWs7dmFyIHY9U2EoZFsiIWRyYXdlbCJdLlRhcmdldCx0KSx1PU9hKHYpLHA9ZnVuY3Rpb24gaHgoZSx0KXtpZighZSlyZXR1cm4iPz8iO3ZhciByPShlLm1hdGNoKC88YzpjaGFydCBbXj5dKnI6aWQ9IihbXiJd''@;'; put 'put ''KikiLyl8fFsiIiwiIl0pWzFdO3JldHVybiB0WyIhaWQiXVtyXS5UYXJnZXR9KE5yKGUsdiwhMCksSWEoTnIoZSx1LCEwKSx2KSksaz1TYShwLHYpLFQ9T2Eoayk7ZD1mdW5jdGlvbiBxMihlLHQscixhLG4saSl7dmFyIHM9aXx8eyIhdHlwZSI6ImNoYXJ0In07aWYoIWUpcmV0dXJuIGk7dmFy''@;'; put 'put ''IGY9MCxjPTAsbz0iQSIsbD17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fTtyZXR1cm4oZS5tYXRjaCgvPGM6bnVtQ2FjaGU+W1xzXFNdKj88XC9jOm51bUNhY2hlPi9nbSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGgpe3ZhciB4PWZ1bmN0aW9uIEoyKGUpe3ZhciBhLHQ9W10scj1lLm1h''@;'; put 'put ''dGNoKC9ePGM6bnVtQ2FjaGU+Lyk7KGUubWF0Y2goLzxjOnB0IGlkeD0iKFxkKikiPiguKj8pPFwvYzpwdD4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgcz1pLm1hdGNoKC88YzpwdCBpZHg9IihcZCo/KSI+PGM6dj4oLiopPFwvYzp2PjxcL2M6cHQ+Lyk7cyYmKHRbK3NbMV1d''@;'; put 'put ''PXI/K3NbMl06c1syXSl9KTt2YXIgbj1JZSgoZS5tYXRjaCgvPGM6Zm9ybWF0Q29kZT4oW1xzXFNdKj8pPFwvYzpmb3JtYXRDb2RlPi8pfHxbIiIsIkdlbmVyYWwiXSlbMV0pO3JldHVybihlLm1hdGNoKC88YzpmPiguKj8pPFwvYzpmPi9nbSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe2E9''@;'; put 'put ''aS5yZXBsYWNlKC88Lio/Pi9nLCIiKX0pLFt0LG4sYV19KGgpO2wucy5yPWwucy5jPTAsbC5lLmM9ZixvPUhlKGYpLHhbMF0uZm9yRWFjaChmdW5jdGlvbihkLHYpe3NbbytLZSh2KV09e3Q6Im4iLHY6ZCx6OnhbMV19LGM9dn0pLGwuZS5yPGMmJihsLmUucj1jKSwrK2Z9KSxmPjAmJihzWyIh''@;'; put 'put ''cmVmIl09d2UobCkpLHN9KE5yKGUsaywhMCksMCwwLElhKE5yKGUsVCwhMCksayksMCxkKTticmVhaztjYXNlIm1hY3JvIjpkPWZ1bmN0aW9uIHlwKGUsdCl7cmV0dXJuIHQuc2xpY2UoLTQpLHsiIXR5cGUiOiJtYWNybyJ9fSgwLHQpO2JyZWFrO2Nhc2UiZGlhbG9nIjpkPWZ1bmN0aW9uIEFw''@;'; put 'put ''KGUsdCl7cmV0dXJuIHQuc2xpY2UoLTQpLHsiIXR5cGUiOiJkaWFsb2cifX0oMCx0KTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHNoZWV0IHR5cGUgIitmKX1zW2FdPWQ7dmFyIGc9W107aSYmaVthXSYmJGUoaVthXSkuZm9yRWFjaChmdW5jdGlvbihOKXt2''@;'; put 'put ''YXIgTT0iIjtpZihpW2FdW05dLlR5cGU9PWtlLkNNTlQpe009U2EoaVthXVtOXS5UYXJnZXQsdCk7dmFyIEk9ZnVuY3Rpb24gSXAoZSx0LHIpe3JldHVybiIuYmluIj09PXQuc2xpY2UoLTQpP2Z1bmN0aW9uIEV4KGUsdCl7dmFyIHI9W10sYT1bXSxuPXt9LGk9ITE7cmV0dXJuIGh0KGUsZnVu''@;'; put 'put ''Y3Rpb24oZixjLG8pe3N3aXRjaChvKXtjYXNlIDYzMjphLnB1c2goZik7YnJlYWs7Y2FzZSA2MzU6bj1mO2JyZWFrO2Nhc2UgNjM3Om4udD1mLnQsbi5oPWYuaCxuLnI9Zi5yO2JyZWFrO2Nhc2UgNjM2OmlmKG4uYXV0aG9yPWFbbi5pYXV0aG9yXSxkZWxldGUgbi5pYXV0aG9yLHQuc2hlZXRS''@;'; put 'put ''b3dzJiZuLnJmeCYmdC5zaGVldFJvd3M8PW4ucmZ4LnIpYnJlYWs7bi50fHwobi50PSIiKSxkZWxldGUgbi5yZngsci5wdXNoKG4pO2JyZWFrO2Nhc2UgMzA3MjpjYXNlIDM3OmNhc2UgMzg6YnJlYWs7Y2FzZSAzNTppPSEwO2JyZWFrO2Nhc2UgMzY6aT0hMTticmVhaztkZWZhdWx0OmlmKCFj''@;'; put 'put ''LlQmJighaXx8dC5XVEYpKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgMHgiK28udG9TdHJpbmcoMTYpKX19KSxyfShlLHIpOmZ1bmN0aW9uIHh4KGUsdCl7aWYoZS5tYXRjaCgvPCg/Olx3KzopP2NvbW1lbnRzICpcLz4vKSlyZXR1cm5bXTt2YXIgcj1bXSxhPVtdLG49ZS5t''@;'; put 'put ''YXRjaCgvPCg/Olx3KzopP2F1dGhvcnM+KFtcc1xTXSopPFwvKD86XHcrOik/YXV0aG9ycz4vKTtuJiZuWzFdJiZuWzFdLnNwbGl0KC88XC9cdyo6P2F1dGhvcj4vKS5mb3JFYWNoKGZ1bmN0aW9uKHMpe2lmKCIiIT09cyYmIiIhPT1zLnRyaW0oKSl7dmFyIGY9cy5tYXRjaCgvPCg/Olx3Kzop''@;'; put 'put ''P2F1dGhvcltePl0qPiguKikvKTtmJiZyLnB1c2goZlsxXSl9fSk7dmFyIGk9ZS5tYXRjaCgvPCg/Olx3KzopP2NvbW1lbnRMaXN0PihbXHNcU10qKTxcLyg/Olx3KzopP2NvbW1lbnRMaXN0Pi8pO3JldHVybiBpJiZpWzFdJiZpWzFdLnNwbGl0KC88XC9cdyo6P2NvbW1lbnQ+LykuZm9yRWFj''@;'; put 'put ''aChmdW5jdGlvbihzKXtpZigiIiE9PXMmJiIiIT09cy50cmltKCkpe3ZhciBmPXMubWF0Y2goLzwoPzpcdys6KT9jb21tZW50W14+XSo+Lyk7aWYoZil7dmFyIGM9bWUoZlswXSksbz17YXV0aG9yOmMuYXV0aG9ySWQmJnJbYy5hdXRob3JJZF18fCJzaGVldGpzZ2hvc3QiLHJlZjpjLnJlZixn''@;'; put 'put ''dWlkOmMuZ3VpZH0sbD1HZShjLnJlZik7aWYoISh0LnNoZWV0Um93cyYmdC5zaGVldFJvd3M8PWwucikpe3ZhciBoPXMubWF0Y2goLzwoPzpcdys6KT90ZXh0PihbXHNcU10qKTxcLyg/Olx3KzopP3RleHQ+LykseD0hIWgmJiEhaFsxXSYmU24oaFsxXSl8fHtyOiIiLHQ6IiIsaDoiIn07by5y''@;'; put 'put ''PXguciwiPHQ+PC90PiI9PXguciYmKHgudD14Lmg9IiIpLG8udD0oeC50fHwiIikucmVwbGFjZSgvXHJcbi9nLCJcbiIpLnJlcGxhY2UoL1xyL2csIlxuIiksdC5jZWxsSFRNTCYmKG8uaD14LmgpLGEucHVzaChvKX19fX0pLGF9KGUscil9KFFlKGUsTSwhMCksTSxjKTtpZighSXx8IUkubGVu''@;'; put 'put ''Z3RoKXJldHVybjtnZihkLEksITEpfWlbYV1bTl0uVHlwZT09a2UuVENNTlQmJihNPVNhKGlbYV1bTl0uVGFyZ2V0LHQpLGc9Zy5jb25jYXQoZnVuY3Rpb24gZHgoZSx0KXt2YXIgcj1bXSxhPSExLG49e30saT0wO3JldHVybiBlLnJlcGxhY2UodnIsZnVuY3Rpb24oZixjKXt2YXIgbz1tZShm''@;'; put 'put ''KTtzd2l0Y2gocnQob1swXSkpe2Nhc2UiPD94bWwiOmNhc2UiPFRocmVhZGVkQ29tbWVudHMiOmNhc2UiPC9UaHJlYWRlZENvbW1lbnRzPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6Y2FzZSI8ZXh0THN0Lz4iOmJyZWFrO2Nhc2UiPHRocmVhZGVkQ29t''@;'; put 'put ''bWVudCI6bj17YXV0aG9yOm8ucGVyc29uSWQsZ3VpZDpvLmlkLHJlZjpvLnJlZixUOjF9O2JyZWFrO2Nhc2UiPC90aHJlYWRlZENvbW1lbnQ+IjpudWxsIT1uLnQmJnIucHVzaChuKTticmVhaztjYXNlIjx0ZXh0PiI6Y2FzZSI8dGV4dCI6aT1jK2YubGVuZ3RoO2JyZWFrO2Nhc2UiPC90ZXh0''@;'; put 'put ''PiI6bi50PWUuc2xpY2UoaSxjKS5yZXBsYWNlKC9cclxuL2csIlxuIikucmVwbGFjZSgvXHIvZywiXG4iKTticmVhaztjYXNlIjxtZW50aW9ucyI6Y2FzZSI8bWVudGlvbnM+IjpjYXNlIjxleHQiOmE9ITA7YnJlYWs7Y2FzZSI8L21lbnRpb25zPiI6Y2FzZSI8L2V4dD4iOmE9ITE7YnJlYWs7''@;'; put 'put ''ZGVmYXVsdDppZighYSYmdC5XVEYpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitvWzBdKyIgaW4gdGhyZWFkZWQgY29tbWVudHMiKX1yZXR1cm4gZn0pLHJ9KFFlKGUsTSwhMCksYykpKX0pLGcmJmcubGVuZ3RoJiZnZihkLGcsITAsYy5wZW9wbGV8fFtdKX1jYXRjaChOKXtpZihj''@;'; put 'put ''LldURil0aHJvdyBOfX1mdW5jdGlvbiAkcihlKXtyZXR1cm4iLyI9PWUuY2hhckF0KDApP2Uuc2xpY2UoMSk6ZX1mdW5jdGlvbiBRbShlLHQpe2lmKHRhKCksJG4odD10fHx7fSksV3IoZSwiTUVUQS1JTkYvbWFuaWZlc3QueG1sIil8fFdyKGUsIm9iamVjdGRhdGEueG1sIikpcmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uIGZjKGUsdCl7dD10fHx7fSxXcihlLCJNRVRBLUlORi9tYW5pZmVzdC54bWwiKSYmZnVuY3Rpb24gb2woZSx0KXtmb3IodmFyIGEsbixyPVkwKGUpO2E9eWEuZXhlYyhyKTspc3dpdGNoKGFbM10pe2Nhc2UibWFuaWZlc3QiOmJyZWFrO2Nhc2UiZmlsZS1lbnRyeSI6aWYoIi8iPT0o''@;'; put 'put ''bj1tZShhWzBdLCExKSkucGF0aCYmImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQiIT09bi50eXBlKXRocm93IG5ldyBFcnJvcigiVGhpcyBPcGVuRG9jdW1lbnQgaXMgbm90IGEgc3ByZWFkc2hlZXQiKTticmVhaztjYXNlImVuY3J5cHRpb24tZGF0YSI6''@;'; put 'put ''Y2FzZSJhbGdvcml0aG0iOmNhc2Uic3RhcnQta2V5LWdlbmVyYXRpb24iOmNhc2Uia2V5LWRlcml2YXRpb24iOnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgT0RTIEVuY3J5cHRpb24iKTtkZWZhdWx0OmlmKHQmJnQuV1RGKXRocm93IGF9fShRZShlLCJNRVRBLUlORi9tYW5pZmVzdC54''@;'; put 'put ''bWwiKSx0KTt2YXIgcj1OcihlLCJjb250ZW50LnhtbCIpO2lmKCFyKXRocm93IG5ldyBFcnJvcigiTWlzc2luZyBjb250ZW50LnhtbCBpbiBPRFMgLyBVT0YgZmlsZSIpO3ZhciBhPXNjKEJlKHIpLHQpO3JldHVybiBXcihlLCJtZXRhLnhtbCIpJiYoYS5Qcm9wcz1tcyhRZShlLCJtZXRhLnht''@;'; put 'put ''bCIpKSksYX0oZSx0KTtpZihXcihlLCJJbmRleC9Eb2N1bWVudC5pd2EiKSl7aWYodHlwZW9mIFVpbnQ4QXJyYXk+InUiKXRocm93IG5ldyBFcnJvcigiTlVNQkVSUyBmaWxlIHBhcnNpbmcgcmVxdWlyZXMgVWludDhBcnJheSBzdXBwb3J0Iik7aWYoZS5GaWxlSW5kZXgpcmV0dXJuIHpuKGUp''@;'; put 'put ''O3ZhciByPXZlLnV0aWxzLmNmYl9uZXcoKTtyZXR1cm4gSWkoZSkuZm9yRWFjaChmdW5jdGlvbihsZSl7IWZ1bmN0aW9uIFRlKGUsdCxyKXtpZihlLkZ1bGxQYXRocyl7dmFyIGE7aWYoInN0cmluZyI9PXR5cGVvZiByKXJldHVybiBhPVNlP290KHIpOmZ1bmN0aW9uIE5jKGUpe2Zvcih2YXIg''@;'; put 'put ''dD1bXSxyPTAsYT1lLmxlbmd0aCsyNTAsbj1fdChlLmxlbmd0aCsyNTUpLGk9MDtpPGUubGVuZ3RoOysraSl7dmFyIHM9ZS5jaGFyQ29kZUF0KGkpO2lmKHM8MTI4KW5bcisrXT1zO2Vsc2UgaWYoczwyMDQ4KW5bcisrXT0xOTJ8cz4+NiYzMSxuW3IrK109MTI4fDYzJnM7ZWxzZSBpZihzPj01''@;'; put 'put ''NTI5NiYmczw1NzM0NCl7cz02NCsoMTAyMyZzKTt2YXIgZj0xMDIzJmUuY2hhckNvZGVBdCgrK2kpO25bcisrXT0yNDB8cz4+OCY3LG5bcisrXT0xMjh8cz4+MiY2MyxuW3IrK109MTI4fGY+PjYmMTV8KDMmcyk8PDQsbltyKytdPTEyOHw2MyZmfWVsc2UgbltyKytdPTIyNHxzPj4xMiYxNSxu''@;'; put 'put ''W3IrK109MTI4fHM+PjYmNjMsbltyKytdPTEyOHw2MyZzO3I+YSYmKHQucHVzaChuLnNsaWNlKDAscikpLHI9MCxuPV90KDY1NTM1KSxhPTY1NTMwKX1yZXR1cm4gdC5wdXNoKG4uc2xpY2UoMCxyKSksZnIodCl9KHIpLHZlLnV0aWxzLmNmYl9hZGQoZSx0LGEpO3ZlLnV0aWxzLmNmYl9hZGQo''@;'; put 'put ''ZSx0LHIpfWVsc2UgZS5maWxlKHQscil9KHIsbGUsT2koZSxsZSkpfSksem4ocil9aWYoIVdyKGUsIltDb250ZW50X1R5cGVzXS54bWwiKSl0aHJvdyBXcihlLCJpbmRleC54bWwuZ3oiKT9uZXcgRXJyb3IoIlVuc3VwcG9ydGVkIE5VTUJFUlMgMDggZmlsZSIpOldyKGUsImluZGV4LnhtbCIp''@;'; put 'put ''P25ldyBFcnJvcigiVW5zdXBwb3J0ZWQgTlVNQkVSUyAwOSBmaWxlIik6bmV3IEVycm9yKCJVbnN1cHBvcnRlZCBaSVAgZmlsZSIpO3ZhciBzLGYsYT1JaShlKSxuPWZ1bmN0aW9uIGZsKGUpe3ZhciB0PXt3b3JrYm9va3M6W10sc2hlZXRzOltdLGNoYXJ0czpbXSxkaWFsb2dzOltdLG1hY3Jv''@;'; put 'put ''czpbXSxyZWxzOltdLHN0cnM6W10sY29tbWVudHM6W10sdGhyZWFkZWRjb21tZW50czpbXSxsaW5rczpbXSxjb3JlcHJvcHM6W10sZXh0cHJvcHM6W10sY3VzdHByb3BzOltdLHRoZW1lczpbXSxzdHlsZXM6W10sY2FsY2NoYWluczpbXSx2YmE6W10sZHJhd2luZ3M6W10sbWV0YWRhdGE6W10s''@;'; put 'put ''cGVvcGxlOltdLFRPRE86W10seG1sbnM6IiJ9O2lmKCFlfHwhZS5tYXRjaClyZXR1cm4gdDt2YXIgcj17fTtpZigoZS5tYXRjaCh2cil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBuPW1lKGEpO3N3aXRjaChuWzBdLnJlcGxhY2UoX28sIjwiKSl7Y2FzZSI8P3htbCI6YnJlYWs7Y2Fz''@;'; put 'put ''ZSI8VHlwZXMiOnQueG1sbnM9blsieG1sbnMiKyhuWzBdLm1hdGNoKC88KFx3Kyk6Lyl8fFsiIiwiIl0pWzFdXTticmVhaztjYXNlIjxEZWZhdWx0IjpyW24uRXh0ZW5zaW9uXT1uLkNvbnRlbnRUeXBlO2JyZWFrO2Nhc2UiPE92ZXJyaWRlIjp2b2lkIDAhPT10W3ZuW24uQ29udGVudFR5cGVd''@;'; put 'put ''XSYmdFt2bltuLkNvbnRlbnRUeXBlXV0ucHVzaChuLlBhcnROYW1lKX19KSwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9jb250ZW50LXR5cGVzIiE9PXQueG1sbnMpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIE5hbWVzcGFjZTogIit0LnhtbG5zKTty''@;'; put 'put ''ZXR1cm4gdC5jYWxjY2hhaW49dC5jYWxjY2hhaW5zLmxlbmd0aD4wP3QuY2FsY2NoYWluc1swXToiIix0LnNzdD10LnN0cnMubGVuZ3RoPjA/dC5zdHJzWzBdOiIiLHQuc3R5bGU9dC5zdHlsZXMubGVuZ3RoPjA/dC5zdHlsZXNbMF06IiIsdC5kZWZhdWx0cz1yLGRlbGV0ZSB0LmNhbGNjaGFp''@;'; put 'put ''bnMsdH0oTnIoZSwiW0NvbnRlbnRfVHlwZXNdLnhtbCIpKSxpPSExO2lmKDA9PT1uLndvcmtib29rcy5sZW5ndGgmJlFlKGUsZj0ieGwvd29ya2Jvb2sueG1sIiwhMCkmJm4ud29ya2Jvb2tzLnB1c2goZiksMD09PW4ud29ya2Jvb2tzLmxlbmd0aCl7aWYoIVFlKGUsZj0ieGwvd29ya2Jvb2su''@;'; put 'put ''YmluIiwhMCkpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCB3b3JrYm9vayIpO24ud29ya2Jvb2tzLnB1c2goZiksaT0hMH0iYmluIj09bi53b3JrYm9va3NbMF0uc2xpY2UoLTMpJiYoaT0hMCk7dmFyIGM9e30sbz17fTtpZighdC5ib29rU2hlZXRzJiYhdC5ib29rUHJvcHMpe2lm''@;'; put 'put ''KFZhPVtdLG4uc3N0KXRyeXtWYT1mdW5jdGlvbiBPcChlLHQscil7cmV0dXJuIi5iaW4iPT09dC5zbGljZSgtNCk/ZnVuY3Rpb24gSWgoZSx0KXt2YXIgcj1bXSxhPSExO3JldHVybiBodChlLGZ1bmN0aW9uKGkscyxmKXtzd2l0Y2goZil7Y2FzZSAxNTk6ci5Db3VudD1pWzBdLHIuVW5pcXVl''@;'; put 'put ''PWlbMV07YnJlYWs7Y2FzZSAxOTpyLnB1c2goaSk7YnJlYWs7Y2FzZSAxNjA6cmV0dXJuITA7Y2FzZSAzNTphPSEwO2JyZWFrO2Nhc2UgMzY6YT0hMTticmVhaztkZWZhdWx0OmlmKCFhfHx0LldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkIDB4IitmLnRvU3RyaW5nKDE2''@;'; put 'put ''KSl9fSkscn0oZSxyKTpmdW5jdGlvbiBDaChlLHQpe3ZhciByPVtdLGE9IiI7aWYoIWUpcmV0dXJuIHI7dmFyIG49ZS5tYXRjaChGaCk7aWYobil7YT1uWzJdLnJlcGxhY2UoeWgsIiIpLnNwbGl0KEFoKTtmb3IodmFyIGk9MDtpIT1hLmxlbmd0aDsrK2kpe3ZhciBzPVNuKGFbaV0udHJpbSgp''@;'; put 'put ''LHQpO251bGwhPXMmJihyW3IubGVuZ3RoXT1zKX1uPW1lKG5bMV0pLHIuQ291bnQ9bi5jb3VudCxyLlVuaXF1ZT1uLnVuaXF1ZUNvdW50fXJldHVybiByfShlLHIpfShRZShlLCRyKG4uc3N0KSksbi5zc3QsdCl9Y2F0Y2gobGUpe2lmKHQuV1RGKXRocm93IGxlfXQuY2VsbFN0eWxlcyYmbi50''@;'; put 'put ''aGVtZXMubGVuZ3RoJiYoYz1mdW5jdGlvbiBEcChlLHQscil7cmV0dXJuIHZmKGUscil9KE5yKGUsbi50aGVtZXNbMF0ucmVwbGFjZSgvXlwvLywiIiksITApfHwiIiwwLHQpKSxuLnN0eWxlJiYobz1mdW5jdGlvbiBDcChlLHQscixhKXtyZXR1cm4iLmJpbiI9PT10LnNsaWNlKC00KT9mdW5j''@;'; put 'put ''dGlvbiBTMShlLHQscil7dmFyIGE9e051bWJlckZtdDpbXX07Zm9yKHZhciBuIGluIHBlKWEuTnVtYmVyRm10W25dPXBlW25dO2EuQ2VsbFhmPVtdLGEuRm9udHM9W107dmFyIGk9W10scz0hMTtyZXR1cm4gaHQoZSxmdW5jdGlvbihjLG8sbCl7c3dpdGNoKGwpe2Nhc2UgNDQ6YS5OdW1iZXJG''@;'; put 'put ''bXRbY1swXV09Y1sxXSxldChjWzFdLGNbMF0pO2JyZWFrO2Nhc2UgNDM6YS5Gb250cy5wdXNoKGMpLG51bGwhPWMuY29sb3IudGhlbWUmJnQmJnQudGhlbWVFbGVtZW50cyYmdC50aGVtZUVsZW1lbnRzLmNsclNjaGVtZSYmKGMuY29sb3IucmdiPVQwKHQudGhlbWVFbGVtZW50cy5jbHJTY2hl''@;'; put 'put ''bWVbYy5jb2xvci50aGVtZV0ucmdiLGMuY29sb3IudGludHx8MCkpO2JyZWFrO2Nhc2UgMTAyNTpjYXNlIDQ1OmNhc2UgNDY6Y2FzZSA0ODpjYXNlIDUwNzpjYXNlIDU3MjpjYXNlIDQ3NTpjYXNlIDExNzE6Y2FzZSAyMTAyOmNhc2UgMTEzMDpjYXNlIDUxMjpjYXNlIDIwOTU6Y2FzZSAzMDcy''@;'; put 'put ''OmJyZWFrO2Nhc2UgNDc6NjE3PT1pW2kubGVuZ3RoLTFdJiZhLkNlbGxYZi5wdXNoKGMpO2JyZWFrO2Nhc2UgMzU6cz0hMDticmVhaztjYXNlIDM2OnM9ITE7YnJlYWs7Y2FzZSAzNzppLnB1c2gobCkscz0hMDticmVhaztjYXNlIDM4OmkucG9wKCkscz0hMTticmVhaztkZWZhdWx0OmlmKG8u''@;'; put 'put ''VD4wKWkucHVzaChsKTtlbHNlIGlmKG8uVDwwKWkucG9wKCk7ZWxzZSBpZighc3x8ci5XVEYmJjM3IT1pW2kubGVuZ3RoLTFdKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgMHgiK2wudG9TdHJpbmcoMTYpKX19KSxhfShlLHIsYSk6aDEoZSxyLGEpfShRZShlLCRyKG4uc3R5''@;'; put 'put ''bGUpKSxuLnN0eWxlLGMsdCkpfW4ubGlua3MubWFwKGZ1bmN0aW9uKGxlKXt0cnl7cmV0dXJuIElhKE5yKGUsT2EoJHIobGUpKSksbGUpLGZ1bmN0aW9uIE5wKGUsdCxyLGEpe3JldHVybiIuYmluIj09PXIuc2xpY2UoLTQpP2Z1bmN0aW9uIHV4KGUsdCxyLGEpe2lmKCFlKXJldHVybiBlO3Zh''@;'; put 'put ''ciBuPWF8fHt9LGk9ITE7aHQoZSxmdW5jdGlvbihjLG8sbCl7c3dpdGNoKGwpe2Nhc2UgMzU5OmNhc2UgMzYzOmNhc2UgMzY0OmNhc2UgMzY2OmNhc2UgMzY3OmNhc2UgMzY4OmNhc2UgMzY5OmNhc2UgMzcwOmNhc2UgMzcxOmNhc2UgNDcyOmNhc2UgNTc3OmNhc2UgNTc4OmNhc2UgNTc5OmNh''@;'; put 'put ''c2UgNTgwOmNhc2UgNTgxOmNhc2UgNTgyOmNhc2UgNTgzOmNhc2UgNTg0OmNhc2UgNTg1OmNhc2UgNTg2OmNhc2UgNTg3OmJyZWFrO2Nhc2UgMzU6aT0hMDticmVhaztjYXNlIDM2Omk9ITE7YnJlYWs7ZGVmYXVsdDppZighby5UJiYoIWl8fG4uV1RGKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhw''@;'; put 'put ''ZWN0ZWQgcmVjb3JkIDB4IitsLnRvU3RyaW5nKDE2KSl9fSxuKX0oZSwwLDAsYSk6dm9pZCAwfShRZShlLCRyKGxlKSksMCxsZSx0KX1jYXRjaHt9fSk7dmFyIGw9ZnVuY3Rpb24gVHAoZSx0LHIpe3JldHVybiIuYmluIj09PXQuc2xpY2UoLTQpP2Z1bmN0aW9uIG1wKGUsdCl7dmFyIHI9e0Fw''@;'; put 'put ''cFZlcnNpb246e30sV0JQcm9wczp7fSxXQlZpZXc6W10sU2hlZXRzOltdLENhbGNQcjp7fSx4bWxuczoiIn0sYT1bXSxuPSExO3R8fCh0PXt9KSx0LmJpZmY9MTI7dmFyIGk9W10scz1bW11dO3JldHVybiBzLlNoZWV0TmFtZXM9W10scy5YVEk9W10sJGFbMTZdPXtuOiJCcnRGUlRBcmNoSUQk''@;'; put 'put ''IixmOnZwfSxodChlLGZ1bmN0aW9uKGMsbyxsKXtzd2l0Y2gobCl7Y2FzZSAxNTY6cy5TaGVldE5hbWVzLnB1c2goYy5uYW1lKSxyLlNoZWV0cy5wdXNoKGMpO2JyZWFrO2Nhc2UgMTUzOnIuV0JQcm9wcz1jO2JyZWFrO2Nhc2UgMzk6bnVsbCE9Yy5TaGVldCYmKHQuU0lEPWMuU2hlZXQpLGMu''@;'; put 'put ''UmVmPWtyKGMuUHRnLDAsbnVsbCxzLHQpLGRlbGV0ZSB0LlNJRCxkZWxldGUgYy5QdGcsaS5wdXNoKGMpO2JyZWFrO2Nhc2UgMTAzNjpjYXNlIDM2MTpjYXNlIDIwNzE6Y2FzZSAxNTg6Y2FzZSAxNDM6Y2FzZSA2NjQ6Y2FzZSAzNTM6Y2FzZSAzMDcyOmNhc2UgMzA3MzpjYXNlIDUzNDpjYXNl''@;'; put 'put ''IDY3NzpjYXNlIDE1NzpjYXNlIDYxMDpjYXNlIDIwNTA6Y2FzZSAxNTU6Y2FzZSA1NDg6Y2FzZSA2NzY6Y2FzZSAxMjg6Y2FzZSA2NjU6Y2FzZSAyMTI4OmNhc2UgMjEyNTpjYXNlIDU0OTpjYXNlIDIwNTM6Y2FzZSA1OTY6Y2FzZSAyMDc2OmNhc2UgMjA3NTpjYXNlIDIwODI6Y2FzZSAzOTc6''@;'; put 'put ''Y2FzZSAxNTQ6Y2FzZSAxMTE3OmNhc2UgNTUzOmNhc2UgMjA5MTpjYXNlIDE2OmJyZWFrO2Nhc2UgMzU3OmNhc2UgMzU4OmNhc2UgMzU1OmNhc2UgNjY3OnNbMF0ubGVuZ3RoP3MucHVzaChbbCxjXSk6c1swXT1bbCxjXSxzW3MubGVuZ3RoLTFdLlhUST1bXTticmVhaztjYXNlIDM2MjowPT09''@;'; put 'put ''cy5sZW5ndGgmJihzWzBdPVtdLHNbMF0uWFRJPVtdKSxzW3MubGVuZ3RoLTFdLlhUST1zW3MubGVuZ3RoLTFdLlhUSS5jb25jYXQoYykscy5YVEk9cy5YVEkuY29uY2F0KGMpO2JyZWFrO2Nhc2UgMzU6Y2FzZSAzNzphLnB1c2gobCksbj0hMDticmVhaztjYXNlIDM2OmNhc2UgMzg6YS5wb3Ao''@;'; put 'put ''KSxuPSExO2JyZWFrO2RlZmF1bHQ6aWYoIW8uVCYmKCFufHx0LldURiYmMzchPWFbYS5sZW5ndGgtMV0mJjM1IT1hW2EubGVuZ3RoLTFdKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkIDB4IitsLnRvU3RyaW5nKDE2KSl9fSx0KSxIZihyKSxyLk5hbWVzPWksci5zdXBib29r''@;'; put 'put ''cz1zLHJ9KGUscik6ZnVuY3Rpb24gbHAoZSx0KXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIGZpbGUiKTt2YXIgcj17QXBwVmVyc2lvbjp7fSxXQlByb3BzOnt9LFdCVmlldzpbXSxTaGVldHM6W10sQ2FsY1ByOnt9LE5hbWVzOltdLHhtbG5zOiIifSxhPSExLG49Inht''@;'; put 'put ''bG5zIixpPXt9LHM9MDtpZihlLnJlcGxhY2UodnIsZnVuY3Rpb24oYyxvKXt2YXIgbD1tZShjKTtzd2l0Y2gocnQobFswXSkpe2Nhc2UiPD94bWwiOmNhc2UiPC93b3JrYm9vaz4iOmNhc2UiPGZpbGVWZXJzaW9uLz4iOmNhc2UiPC9maWxlVmVyc2lvbj4iOmNhc2UiPGZpbGVTaGFyaW5nIjpj''@;'; put 'put ''YXNlIjxmaWxlU2hhcmluZy8+IjpjYXNlIjwvd29ya2Jvb2tQcj4iOmNhc2UiPHdvcmtib29rUHJvdGVjdGlvbiI6Y2FzZSI8d29ya2Jvb2tQcm90ZWN0aW9uLz4iOmNhc2UiPGJvb2tWaWV3cyI6Y2FzZSI8Ym9va1ZpZXdzPiI6Y2FzZSI8L2Jvb2tWaWV3cz4iOmNhc2UiPC93b3JrYm9va1Zp''@;'; put 'put ''ZXc+IjpjYXNlIjxzaGVldHMiOmNhc2UiPHNoZWV0cz4iOmNhc2UiPC9zaGVldHM+IjpjYXNlIjwvc2hlZXQ+IjpjYXNlIjxmdW5jdGlvbkdyb3VwcyI6Y2FzZSI8ZnVuY3Rpb25Hcm91cHMvPiI6Y2FzZSI8ZnVuY3Rpb25Hcm91cCI6Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2VzIjpjYXNlIjwv''@;'; put 'put ''ZXh0ZXJuYWxSZWZlcmVuY2VzPiI6Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2VzPiI6Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2UiOmNhc2UiPGRlZmluZWROYW1lcy8+IjpjYXNlIjxkZWZpbmVkTmFtZS8+IjpjYXNlIjwvY2FsY1ByPiI6Y2FzZSI8b2xlU2l6ZSI6Y2FzZSI8Y3VzdG9tV29ya2Jv''@;'; put 'put ''b2tWaWV3cz4iOmNhc2UiPC9jdXN0b21Xb3JrYm9va1ZpZXdzPiI6Y2FzZSI8Y3VzdG9tV29ya2Jvb2tWaWV3cyI6Y2FzZSI8Y3VzdG9tV29ya2Jvb2tWaWV3IjpjYXNlIjwvY3VzdG9tV29ya2Jvb2tWaWV3PiI6Y2FzZSI8cGl2b3RDYWNoZXM+IjpjYXNlIjwvcGl2b3RDYWNoZXM+IjpjYXNl''@;'; put 'put ''IjxwaXZvdENhY2hlcyI6Y2FzZSI8cGl2b3RDYWNoZSI6Y2FzZSI8c21hcnRUYWdQciI6Y2FzZSI8c21hcnRUYWdQci8+IjpjYXNlIjxzbWFydFRhZ1R5cGVzIjpjYXNlIjxzbWFydFRhZ1R5cGVzPiI6Y2FzZSI8L3NtYXJ0VGFnVHlwZXM+IjpjYXNlIjxzbWFydFRhZ1R5cGUiOmNhc2UiPHdl''@;'; put 'put ''YlB1Ymxpc2hpbmciOmNhc2UiPHdlYlB1Ymxpc2hpbmcvPiI6Y2FzZSI8ZmlsZVJlY292ZXJ5UHIiOmNhc2UiPGZpbGVSZWNvdmVyeVByLz4iOmNhc2UiPHdlYlB1Ymxpc2hPYmplY3RzPiI6Y2FzZSI8d2ViUHVibGlzaE9iamVjdHMiOmNhc2UiPC93ZWJQdWJsaXNoT2JqZWN0cz4iOmNhc2Ui''@;'; put 'put ''PHdlYlB1Ymxpc2hPYmplY3QiOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmNhc2UiPGV4dExzdC8+IjpjYXNlIjxBcmNoSUQiOmNhc2UiPHJldmlzaW9uUHRyIjpicmVhaztjYXNlIjx3b3JrYm9vayI6Yy5tYXRjaChvcCkmJihuPSJ4bWxucyIrYy5tYXRj''@;'; put 'put ''aCgvPChcdyspOi8pWzFdKSxyLnhtbG5zPWxbbl07YnJlYWs7Y2FzZSI8ZmlsZVZlcnNpb24iOmRlbGV0ZSBsWzBdLHIuQXBwVmVyc2lvbj1sO2JyZWFrO2Nhc2UiPHdvcmtib29rUHIiOmNhc2UiPHdvcmtib29rUHIvPiI6Qm4uZm9yRWFjaChmdW5jdGlvbihoKXtpZihudWxsIT1sW2hbMF1d''@;'; put 'put ''KXN3aXRjaChoWzJdKXtjYXNlImJvb2wiOnIuV0JQcm9wc1toWzBdXT1XZShsW2hbMF1dKTticmVhaztjYXNlImludCI6ci5XQlByb3BzW2hbMF1dPXBhcnNlSW50KGxbaFswXV0sMTApO2JyZWFrO2RlZmF1bHQ6ci5XQlByb3BzW2hbMF1dPWxbaFswXV19fSksbC5jb2RlTmFtZSYmKHIuV0JQ''@;'; put 'put ''cm9wcy5Db2RlTmFtZT1CZShsLmNvZGVOYW1lKSk7YnJlYWs7Y2FzZSI8d29ya2Jvb2tWaWV3IjpjYXNlIjx3b3JrYm9va1ZpZXcvPiI6ZGVsZXRlIGxbMF0sci5XQlZpZXcucHVzaChsKTticmVhaztjYXNlIjxzaGVldCI6c3dpdGNoKGwuc3RhdGUpe2Nhc2UiaGlkZGVuIjpsLkhpZGRlbj0x''@;'; put 'put ''O2JyZWFrO2Nhc2UidmVyeUhpZGRlbiI6bC5IaWRkZW49MjticmVhaztkZWZhdWx0OmwuSGlkZGVuPTB9ZGVsZXRlIGwuc3RhdGUsbC5uYW1lPUllKEJlKGwubmFtZSkpLGRlbGV0ZSBsWzBdLHIuU2hlZXRzLnB1c2gobCk7YnJlYWs7Y2FzZSI8ZGVmaW5lZE5hbWVzPiI6Y2FzZSI8ZGVmaW5l''@;'; put 'put ''ZE5hbWVzIjpjYXNlIjxleHQiOmNhc2UiPEFsdGVybmF0ZUNvbnRlbnQiOmNhc2UiPEFsdGVybmF0ZUNvbnRlbnQ+IjphPSEwO2JyZWFrO2Nhc2UiPC9kZWZpbmVkTmFtZXM+IjpjYXNlIjwvZXh0PiI6Y2FzZSI8L0FsdGVybmF0ZUNvbnRlbnQ+IjphPSExO2JyZWFrO2Nhc2UiPGRlZmluZWRO''@;'; put 'put ''YW1lIjooaT17fSkuTmFtZT1CZShsLm5hbWUpLGwuY29tbWVudCYmKGkuQ29tbWVudD1sLmNvbW1lbnQpLGwubG9jYWxTaGVldElkJiYoaS5TaGVldD0rbC5sb2NhbFNoZWV0SWQpLFdlKGwuaGlkZGVufHwiMCIpJiYoaS5IaWRkZW49ITApLHM9bytjLmxlbmd0aDticmVhaztjYXNlIjwvZGVm''@;'; put 'put ''aW5lZE5hbWU+IjppLlJlZj1JZShCZShlLnNsaWNlKHMsbykpKSxyLk5hbWVzLnB1c2goaSk7YnJlYWs7Y2FzZSI8Y2FsY1ByIjpjYXNlIjxjYWxjUHIvPiI6ZGVsZXRlIGxbMF0sci5DYWxjUHI9bDticmVhaztkZWZhdWx0OmlmKCFhJiZ0LldURil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2du''@;'; put 'put ''aXplZCAiK2xbMF0rIiBpbiB3b3JrYm9vayIpfXJldHVybiBjfSksLTE9PT1TdC5pbmRleE9mKHIueG1sbnMpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBOYW1lc3BhY2U6ICIrci54bWxucyk7cmV0dXJuIEhmKHIpLHJ9KGUscil9KFFlKGUsJHIobi53b3JrYm9va3NbMF0pKSxuLndvcmti''@;'; put 'put ''b29rc1swXSx0KSxoPXt9LHg9IiI7bi5jb3JlcHJvcHMubGVuZ3RoJiYoKHg9UWUoZSwkcihuLmNvcmVwcm9wc1swXSksITApKSYmKGg9bXMoeCkpLDAhPT1uLmV4dHByb3BzLmxlbmd0aCYmKHg9UWUoZSwkcihuLmV4dHByb3BzWzBdKSwhMCkpJiZmdW5jdGlvbiB2bChlLHQscil7dmFyIGE9''@;'; put 'put ''e307dHx8KHQ9e30pLGU9QmUoZSksWHQuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgaT0oZS5tYXRjaChGYShuWzBdKSl8fFtdKVsxXTtzd2l0Y2goblsyXSl7Y2FzZSJzdHJpbmciOmkmJih0W25bMV1dPUllKGkpKTticmVhaztjYXNlImJvb2wiOnRbblsxXV09InRydWUiPT09aTticmVhaztj''@;'; put 'put ''YXNlInJhdyI6dmFyIHM9ZS5tYXRjaChuZXcgUmVnRXhwKCI8IituWzBdKyJbXj5dKj4oW1xcc1xcU10qPyk8LyIrblswXSsiPiIpKTtzJiZzLmxlbmd0aD4wJiYoYVtuWzFdXT1zWzFdKX19KSxhLkhlYWRpbmdQYWlycyYmYS5UaXRsZXNPZlBhcnRzJiZ3cyhhLkhlYWRpbmdQYWlycyxhLlRp''@;'; put 'put ''dGxlc09mUGFydHMsdCxyKX0oeCxoLHQpKTt2YXIgZD17fTsoIXQuYm9va1NoZWV0c3x8dC5ib29rUHJvcHMpJiYwIT09bi5jdXN0cHJvcHMubGVuZ3RoJiYoeD1OcihlLCRyKG4uY3VzdHByb3BzWzBdKSwhMCkpJiYoZD1mdW5jdGlvbiBtbChlLHQpe3ZhciByPXt9LGE9IiIsbj1lLm1hdGNo''@;'; put 'put ''KHBsKTtpZihuKWZvcih2YXIgaT0wO2khPW4ubGVuZ3RoOysraSl7dmFyIHM9bltpXSxmPW1lKHMpO3N3aXRjaChmWzBdKXtjYXNlIjw/eG1sIjpjYXNlIjxQcm9wZXJ0aWVzIjpicmVhaztjYXNlIjxwcm9wZXJ0eSI6YT1JZShmLm5hbWUpO2JyZWFrO2Nhc2UiPC9wcm9wZXJ0eT4iOmE9bnVs''@;'; put 'put ''bDticmVhaztkZWZhdWx0OmlmKDA9PT1zLmluZGV4T2YoIjx2dDoiKSl7dmFyIGM9cy5zcGxpdCgiPiIpLG89Y1swXS5zbGljZSg0KSxsPWNbMV07c3dpdGNoKG8pe2Nhc2UibHBzdHIiOmNhc2UiYnN0ciI6Y2FzZSJscHdzdHIiOmNhc2UiY3kiOmNhc2UiZXJyb3IiOnJbYV09SWUobCk7YnJl''@;'; put 'put ''YWs7Y2FzZSJib29sIjpyW2FdPVdlKGwpO2JyZWFrO2Nhc2UiaTEiOmNhc2UiaTIiOmNhc2UiaTQiOmNhc2UiaTgiOmNhc2UiaW50IjpjYXNlInVpbnQiOnJbYV09cGFyc2VJbnQobCwxMCk7YnJlYWs7Y2FzZSJyNCI6Y2FzZSJyOCI6Y2FzZSJkZWNpbWFsIjpyW2FdPXBhcnNlRmxvYXQobCk7''@;'; put 'put ''YnJlYWs7Y2FzZSJmaWxldGltZSI6Y2FzZSJkYXRlIjpyW2FdPVhlKGwpO2JyZWFrO2RlZmF1bHQ6aWYoIi8iPT1vLnNsaWNlKC0xKSlicmVhazt0LldURiYmdHlwZW9mIGNvbnNvbGU8InUiJiZjb25zb2xlLndhcm4oIlVuZXhwZWN0ZWQiLHMsbyxjKX19ZWxzZSBpZigiPC8iIT09cy5zbGlj''@;'; put 'put ''ZSgwLDIpJiZ0LldURil0aHJvdyBuZXcgRXJyb3Iocyl9fXJldHVybiByfSh4LHQpKTt2YXIgdj17fTtpZigodC5ib29rU2hlZXRzfHx0LmJvb2tQcm9wcykmJihsLlNoZWV0cz9zPWwuU2hlZXRzLm1hcChmdW5jdGlvbihyZSl7cmV0dXJuIHJlLm5hbWV9KTpoLldvcmtzaGVldHMmJmguU2hl''@;'; put 'put ''ZXROYW1lcy5sZW5ndGg+MCYmKHM9aC5TaGVldE5hbWVzKSx0LmJvb2tQcm9wcyYmKHYuUHJvcHM9aCx2LkN1c3Rwcm9wcz1kKSx0LmJvb2tTaGVldHMmJnR5cGVvZiBzPCJ1IiYmKHYuU2hlZXROYW1lcz1zKSx0LmJvb2tTaGVldHM/di5TaGVldE5hbWVzOnQuYm9va1Byb3BzKSlyZXR1cm4g''@;'; put 'put ''djtzPXt9O3ZhciB1PXt9O3QuYm9va0RlcHMmJm4uY2FsY2NoYWluJiYodT1mdW5jdGlvbiBScChlLHQscil7cmV0dXJuIi5iaW4iPT09dC5zbGljZSgtNCk/ZnVuY3Rpb24gbHgoZSl7dmFyIGE9W107cmV0dXJuIGh0KGUsZnVuY3Rpb24ocyxmLGMpe2lmKDYzPT09YylhLnB1c2gocyk7ZWxz''@;'; put 'put ''ZSBpZighZi5UKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgMHgiK2MudG9TdHJpbmcoMTYpKX0pLGF9KGUpOmZ1bmN0aW9uIGN4KGUpe3ZhciB0PVtdO2lmKCFlKXJldHVybiB0O3ZhciByPTE7cmV0dXJuKGUubWF0Y2godnIpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihhKXt2''@;'; put 'put ''YXIgbj1tZShhKTtzd2l0Y2goblswXSl7Y2FzZSI8P3htbCI6Y2FzZSI8Y2FsY0NoYWluIjpjYXNlIjxjYWxjQ2hhaW4+IjpjYXNlIjwvY2FsY0NoYWluPiI6YnJlYWs7Y2FzZSI8YyI6ZGVsZXRlIG5bMF0sbi5pP3I9bi5pOm4uaT1yLHQucHVzaChuKX19KSx0fShlKX0oUWUoZSwkcihuLmNh''@;'; put 'put ''bGNjaGFpbikpLG4uY2FsY2NoYWluKSk7dmFyIFQsZyxwPTAsaz17fSxOPWwuU2hlZXRzO2guV29ya3NoZWV0cz1OLmxlbmd0aCxoLlNoZWV0TmFtZXM9W107Zm9yKHZhciBNPTA7TSE9Ti5sZW5ndGg7KytNKWguU2hlZXROYW1lc1tNXT1OW01dLm5hbWU7dmFyIEk9aT8iYmluIjoieG1sIix5''@;'; put 'put ''PW4ud29ya2Jvb2tzWzBdLmxhc3RJbmRleE9mKCIvIiksUD0obi53b3JrYm9va3NbMF0uc2xpY2UoMCx5KzEpKyJfcmVscy8iK24ud29ya2Jvb2tzWzBdLnNsaWNlKHkrMSkrIi5yZWxzIikucmVwbGFjZSgvXlwvLywiIik7V3IoZSxQKXx8KFA9InhsL19yZWxzL3dvcmtib29rLiIrSSsiLnJl''@;'; put 'put ''bHMiKTt2YXIgUj1JYShOcihlLFAsITApLFAucmVwbGFjZSgvX3JlbHMuKi8sInM1cyIpKTsobi5tZXRhZGF0YXx8W10pLmxlbmd0aD49MSYmKHQueGxtZXRhPWZ1bmN0aW9uIGJwKGUsdCxyKXtyZXR1cm4iLmJpbiI9PT10LnNsaWNlKC00KT9mdW5jdGlvbiBpeChlLHQscil7dmFyIGE9e1R5''@;'; put 'put ''cGVzOltdLENlbGw6W10sVmFsdWU6W119LG49cnx8e30saT1bXSxzPSExLGY9MjtyZXR1cm4gaHQoZSxmdW5jdGlvbihjLG8sbCl7c3dpdGNoKGwpe2Nhc2UgMzM1OmEuVHlwZXMucHVzaCh7bmFtZTpjLm5hbWV9KTticmVhaztjYXNlIDUxOmMuZm9yRWFjaChmdW5jdGlvbihoKXsxPT1mP2Eu''@;'; put 'put ''Q2VsbC5wdXNoKHt0eXBlOmEuVHlwZXNbaFswXS0xXS5uYW1lLGluZGV4OmhbMV19KTowPT1mJiZhLlZhbHVlLnB1c2goe3R5cGU6YS5UeXBlc1toWzBdLTFdLm5hbWUsaW5kZXg6aFsxXX0pfSk7YnJlYWs7Y2FzZSAzMzc6Zj1jPzE6MDticmVhaztjYXNlIDMzODpmPTI7YnJlYWs7Y2FzZSAz''@;'; put 'put ''NTppLnB1c2gobCkscz0hMDticmVhaztjYXNlIDM2OmkucG9wKCkscz0hMTticmVhaztkZWZhdWx0OmlmKCFvLlQmJighc3x8bi5XVEYmJjM1IT1pW2kubGVuZ3RoLTFdKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkIDB4IitsLnRvU3RyaW5nKDE2KSl9fSksYX0oZSwwLHIp''@;'; put 'put ''OmZ1bmN0aW9uIGZ4KGUsdCxyKXt2YXIgYT17VHlwZXM6W10sQ2VsbDpbXSxWYWx1ZTpbXX07aWYoIWUpcmV0dXJuIGE7dmFyIHMsbj0hMSxpPTI7cmV0dXJuIGUucmVwbGFjZSh2cixmdW5jdGlvbihmKXt2YXIgYz1tZShmKTtzd2l0Y2gocnQoY1swXSkpe2Nhc2UiPD94bWwiOmNhc2UiPG1l''@;'; put 'put ''dGFkYXRhIjpjYXNlIjwvbWV0YWRhdGE+IjpjYXNlIjxtZXRhZGF0YVR5cGVzIjpjYXNlIjwvbWV0YWRhdGFUeXBlcz4iOmNhc2UiPC9tZXRhZGF0YVR5cGU+IjpjYXNlIjwvZnV0dXJlTWV0YWRhdGE+IjpjYXNlIjxiaz4iOmNhc2UiPC9iaz4iOmNhc2UiPC9yYz4iOmNhc2UiPGV4dExzdCI6''@;'; put 'put ''Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmNhc2UiPGV4dExzdC8+IjpicmVhaztjYXNlIjxtZXRhZGF0YVR5cGUiOmEuVHlwZXMucHVzaCh7bmFtZTpjLm5hbWV9KTticmVhaztjYXNlIjxmdXR1cmVNZXRhZGF0YSI6Zm9yKHZhciBvPTA7bzxhLlR5cGVzLmxlbmd0aDsrK28pYS5U''@;'; put 'put ''eXBlc1tvXS5uYW1lPT1jLm5hbWUmJihzPWEuVHlwZXNbb10pO2JyZWFrO2Nhc2UiPHJjIjoxPT1pP2EuQ2VsbC5wdXNoKHt0eXBlOmEuVHlwZXNbYy50LTFdLm5hbWUsaW5kZXg6K2Mudn0pOjA9PWkmJmEuVmFsdWUucHVzaCh7dHlwZTphLlR5cGVzW2MudC0xXS5uYW1lLGluZGV4OitjLnZ9''@;'; put 'put ''KTticmVhaztjYXNlIjxjZWxsTWV0YWRhdGEiOmk9MTticmVhaztjYXNlIjwvY2VsbE1ldGFkYXRhPiI6Y2FzZSI8L3ZhbHVlTWV0YWRhdGE+IjppPTI7YnJlYWs7Y2FzZSI8dmFsdWVNZXRhZGF0YSI6aT0wO2JyZWFrO2Nhc2UiPGV4dCI6bj0hMDticmVhaztjYXNlIjwvZXh0PiI6bj0hMTti''@;'; put 'put ''cmVhaztjYXNlIjxydmIiOmlmKCFzKWJyZWFrO3Mub2Zmc2V0c3x8KHMub2Zmc2V0cz1bXSkscy5vZmZzZXRzLnB1c2goK2MuaSk7YnJlYWs7ZGVmYXVsdDppZighbiYmci5XVEYpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitjWzBdKyIgaW4gbWV0YWRhdGEiKX1yZXR1cm4gZn0p''@;'; put 'put ''LGF9KGUsMCxyKX0oUWUoZSwkcihuLm1ldGFkYXRhWzBdKSksbi5tZXRhZGF0YVswXSx0KSksKG4ucGVvcGxlfHxbXSkubGVuZ3RoPj0xJiYodC5wZW9wbGU9ZnVuY3Rpb24gcHgoZSx0KXt2YXIgcj1bXSxhPSExO3JldHVybiBlLnJlcGxhY2UodnIsZnVuY3Rpb24oaSl7dmFyIHM9bWUoaSk7''@;'; put 'put ''c3dpdGNoKHJ0KHNbMF0pKXtjYXNlIjw/eG1sIjpjYXNlIjxwZXJzb25MaXN0IjpjYXNlIjwvcGVyc29uTGlzdD4iOmNhc2UiPC9wZXJzb24+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpjYXNlIjxleHRMc3QvPiI6YnJlYWs7Y2FzZSI8cGVyc29uIjpy''@;'; put 'put ''LnB1c2goe25hbWU6cy5kaXNwbGF5bmFtZSxpZDpzLmlkfSk7YnJlYWs7Y2FzZSI8ZXh0IjphPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjphPSExO2JyZWFrO2RlZmF1bHQ6aWYoIWEmJnQuV1RGKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrc1swXSsiIGluIHRocmVhZGVkIGNvbW1l''@;'; put 'put ''bnRzIil9cmV0dXJuIGl9KSxyfShRZShlLCRyKG4ucGVvcGxlWzBdKSksdCkpLFImJihSPWZ1bmN0aW9uIHFtKGUsdCl7aWYoIWUpcmV0dXJuIDA7dHJ5e2U9dC5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEuaWR8fChhLmlkPWEuc3RyUmVsSUQpLFthLm5hbWUsZVsiIWlkIl1bYS5pZF0uVGFy''@;'; put 'put ''Z2V0LEptKGVbIiFpZCJdW2EuaWRdLlR5cGUpXX0pfWNhdGNoe3JldHVybiBudWxsfXJldHVybiBlJiYwIT09ZS5sZW5ndGg/ZTpudWxsfShSLGwuU2hlZXRzKSk7dmFyIFY9UWUoZSwieGwvd29ya3NoZWV0cy9zaGVldC54bWwiLCEwKT8xOjA7ZTpmb3IocD0wO3AhPWguV29ya3NoZWV0czsr''@;'; put 'put ''K3Ape3ZhciBYPSJzaGVldCI7aWYoUiYmUltwXT8oVD0ieGwvIitSW3BdWzFdLnJlcGxhY2UoL1tcL10/eGxcLy8sIiIpLFdyKGUsVCl8fChUPVJbcF1bMV0pLFdyKGUsVCl8fChUPVAucmVwbGFjZSgvX3JlbHNcLy4qJC8sIiIpK1JbcF1bMV0pLFg9UltwXVsyXSk6VD0oVD0ieGwvd29ya3No''@;'; put 'put ''ZWV0cy9zaGVldCIrKHArMS1WKSsiLiIrSSkucmVwbGFjZSgvc2hlZXQwXC4vLCJzaGVldC4iKSxnPVQucmVwbGFjZSgvXiguKikoXC8pKFteXC9dKikkLywiJDEvX3JlbHMvJDMucmVscyIpLHQmJm51bGwhPXQuc2hlZXRzKXN3aXRjaCh0eXBlb2YgdC5zaGVldHMpe2Nhc2UibnVtYmVyIjpp''@;'; put 'put ''ZihwIT10LnNoZWV0cyljb250aW51ZSBlO2JyZWFrO2Nhc2Uic3RyaW5nIjppZihoLlNoZWV0TmFtZXNbcF0udG9Mb3dlckNhc2UoKSE9dC5zaGVldHMudG9Mb3dlckNhc2UoKSljb250aW51ZSBlO2JyZWFrO2RlZmF1bHQ6aWYoQXJyYXkuaXNBcnJheSYmQXJyYXkuaXNBcnJheSh0LnNoZWV0''@;'; put 'put ''cykpe2Zvcih2YXIgYj0hMSxlZT0wO2VlIT10LnNoZWV0cy5sZW5ndGg7KytlZSkibnVtYmVyIj09dHlwZW9mIHQuc2hlZXRzW2VlXSYmdC5zaGVldHNbZWVdPT1wJiYoYj0xKSwic3RyaW5nIj09dHlwZW9mIHQuc2hlZXRzW2VlXSYmdC5zaGVldHNbZWVdLnRvTG93ZXJDYXNlKCk9PWguU2hl''@;'; put 'put ''ZXROYW1lc1twXS50b0xvd2VyQ2FzZSgpJiYoYj0xKTtpZighYiljb250aW51ZSBlfX1abShlLFQsZyxoLlNoZWV0TmFtZXNbcF0scCxrLHMsWCx0LGwsYyxvKX1yZXR1cm4gdj17RGlyZWN0b3J5Om4sV29ya2Jvb2s6bCxQcm9wczpoLEN1c3Rwcm9wczpkLERlcHM6dSxTaGVldHM6cyxTaGVl''@;'; put 'put ''dE5hbWVzOmguU2hlZXROYW1lcyxTdHJpbmdzOlZhLFN0eWxlczpvLFRoZW1lczpjLFNTRjpNZShwZSl9LHQmJnQuYm9va0ZpbGVzJiYoZS5maWxlcz8odi5rZXlzPWEsdi5maWxlcz1lLmZpbGVzKToodi5rZXlzPVtdLHYuZmlsZXM9e30sZS5GdWxsUGF0aHMuZm9yRWFjaChmdW5jdGlvbihs''@;'; put 'put ''ZSxyZSl7bGU9bGUucmVwbGFjZSgvXlJvb3QgRW50cnlbXC9dLywiIiksdi5rZXlzLnB1c2gobGUpLHYuZmlsZXNbbGVdPWUuRmlsZUluZGV4W3JlXX0pKSksdCYmdC5ib29rVkJBJiYobi52YmEubGVuZ3RoPjA/di52YmFyYXc9UWUoZSwkcihuLnZiYVswXSksITApOm4uZGVmYXVsdHMmJiJh''@;'; put 'put ''cHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLnZiYVByb2plY3QiPT09bi5kZWZhdWx0cy5iaW4mJih2LnZiYXJhdz1RZShlLCJ4bC92YmFQcm9qZWN0LmJpbiIsITApKSksdn1mdW5jdGlvbiBlZyhlLHQpe3ZhciByPXR8fHt9LGE9Ildvcmtib29rIixuPXZlLmZpbmQoZSxhKTt0cnl7aWYoIShu''@;'; put 'put ''PXZlLmZpbmQoZSxhPSIvIURhdGFTcGFjZXMvVmVyc2lvbiIpKXx8IW4uY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIG1pc3NpbmcgIithKTtpZihmdW5jdGlvbiBQaChlKXt2YXIgdD17fTt0LmlkPWUucmVhZF9zaGlmdCgwLCJscHA0IiksdC5SPWR0''@;'; put 'put ''KGUsNCksdC5VPWR0KGUsNCksdC5XPWR0KGUsNCl9KG4uY29udGVudCksIShuPXZlLmZpbmQoZSxhPSIvIURhdGFTcGFjZXMvRGF0YVNwYWNlTWFwIikpfHwhbi5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK2EpO3ZhciBpPWZ1bmN0''@;'; put 'put ''aW9uIEJoKGUpe3ZhciB0PVtdO2UubCs9NDtmb3IodmFyIHI9ZS5yZWFkX3NoaWZ0KDQpO3ItLSA+MDspdC5wdXNoKExoKGUpKTtyZXR1cm4gdH0obi5jb250ZW50KTtpZigxIT09aS5sZW5ndGh8fDEhPT1pWzBdLmNvbXBzLmxlbmd0aHx8MCE9PWlbMF0uY29tcHNbMF0udHx8IlN0cm9uZ0Vu''@;'; put 'put ''Y3J5cHRpb25EYXRhU3BhY2UiIT09aVswXS5uYW1lfHwiRW5jcnlwdGVkUGFja2FnZSIhPT1pWzBdLmNvbXBzWzBdLnYpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBiYWQgIithKTtpZighKG49dmUuZmluZChlLGE9Ii8hRGF0YVNwYWNlcy9EYXRhU3BhY2VJbmZv''@;'; put 'put ''L1N0cm9uZ0VuY3J5cHRpb25EYXRhU3BhY2UiKSl8fCFuLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrYSk7dmFyIHM9ZnVuY3Rpb24gTWgoZSl7dmFyIHQ9W107ZS5sKz00O2Zvcih2YXIgcj1lLnJlYWRfc2hpZnQoNCk7ci0tID4w''@;'; put 'put ''Oyl0LnB1c2goZS5yZWFkX3NoaWZ0KDAsImxwcDQiKSk7cmV0dXJuIHR9KG4uY29udGVudCk7aWYoMSE9cy5sZW5ndGh8fCJTdHJvbmdFbmNyeXB0aW9uVHJhbnNmb3JtIiE9c1swXSl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIGJhZCAiK2EpO2lmKCEobj12ZS5m''@;'; put 'put ''aW5kKGUsYT0iLyFEYXRhU3BhY2VzL1RyYW5zZm9ybUluZm8vU3Ryb25nRW5jcnlwdGlvblRyYW5zZm9ybS8hUHJpbWFyeSIpKXx8IW4uY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIG1pc3NpbmcgIithKTshZnVuY3Rpb24gV2goZSl7dmFyIHQ9ZnVu''@;'; put 'put ''Y3Rpb24gVWgoZSl7dmFyIHQ9e307cmV0dXJuIGUucmVhZF9zaGlmdCg0KSxlLmwrPTQsdC5pZD1lLnJlYWRfc2hpZnQoMCwibHBwNCIpLHQubmFtZT1lLnJlYWRfc2hpZnQoMCwibHBwNCIpLHQuUj1kdChlLDQpLHQuVT1kdChlLDQpLHQuVz1kdChlLDQpLHR9KGUpO2lmKHQuZW5hbWU9ZS5y''@;'; put 'put ''ZWFkX3NoaWZ0KDAsIjhscHA0IiksdC5ibGtzej1lLnJlYWRfc2hpZnQoNCksdC5jbW9kZT1lLnJlYWRfc2hpZnQoNCksNCE9ZS5yZWFkX3NoaWZ0KDQpKXRocm93IG5ldyBFcnJvcigiQmFkICFQcmltYXJ5IHJlY29yZCIpO3JldHVybiB0fShuLmNvbnRlbnQpfWNhdGNoe31pZighKG49dmUu''@;'; put 'put ''ZmluZChlLGE9Ii9FbmNyeXB0aW9uSW5mbyIpKXx8IW4uY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIG1pc3NpbmcgIithKTt2YXIgZj1mdW5jdGlvbiBIaChlKXt2YXIgdD1kdChlKTtzd2l0Y2godC5NaW5vcil7Y2FzZSAyOnJldHVyblt0Lk1pbm9y''@;'; put 'put ''LFZoKGUpXTtjYXNlIDM6cmV0dXJuW3QuTWlub3IsWGgoKV07Y2FzZSA0OnJldHVyblt0Lk1pbm9yLEdoKGUpXX10aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIHVucmVjb2duaXplZCBWZXJzaW9uOiAiK3QuTWlub3IpfShuLmNvbnRlbnQpO2lmKCEobj12ZS5maW5k''@;'; put 'put ''KGUsYT0iL0VuY3J5cHRlZFBhY2thZ2UiKSl8fCFuLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrYSk7aWYoND09ZlswXSYmdHlwZW9mIGRlY3J5cHRfYWdpbGU8InUiKXJldHVybiBkZWNyeXB0X2FnaWxlKGZbMV0sbi5jb250ZW50''@;'; put 'put ''LHIucGFzc3dvcmR8fCIiLHIpO2lmKDI9PWZbMF0mJnR5cGVvZiBkZWNyeXB0X3N0ZDc2PCJ1IilyZXR1cm4gZGVjcnlwdF9zdGQ3NihmWzFdLG4uY29udGVudCxyLnBhc3N3b3JkfHwiIixyKTt0aHJvdyBuZXcgRXJyb3IoIkZpbGUgaXMgcGFzc3dvcmQtcHJvdGVjdGVkIil9ZnVuY3Rpb24g''@;'; put 'put ''S24oZSx0KXt2YXIgcj0iIjtzd2l0Y2goKHR8fHt9KS50eXBlfHwiYmFzZTY0Iil7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOnJldHVybltlWzBdLGVbMV0sZVsyXSxlWzNdLGVbNF0sZVs1XSxlWzZdLGVbN11dO2Nhc2UiYmFzZTY0IjpyPU9yKGUuc2xpY2UoMCwxMikpO2JyZWFrO2Nhc2Ui''@;'; put 'put ''YmluYXJ5IjpyPWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrKHQmJnQudHlwZXx8InVuZGVmaW5lZCIpKX1yZXR1cm5bci5jaGFyQ29kZUF0KDApLHIuY2hhckNvZGVBdCgxKSxyLmNoYXJDb2RlQXQoMiksci5jaGFyQ29kZUF0KDMpLHIuY2hh''@;'; put 'put ''ckNvZGVBdCg0KSxyLmNoYXJDb2RlQXQoNSksci5jaGFyQ29kZUF0KDYpLHIuY2hhckNvZGVBdCg3KV19ZnVuY3Rpb24gdmMoZSx0KXt2YXIgcj0wO2U6Zm9yKDtyPGUubGVuZ3RoOylzd2l0Y2goZS5jaGFyQ29kZUF0KHIpKXtjYXNlIDEwOmNhc2UgMTM6Y2FzZSAzMjorK3I7YnJlYWs7Y2Fz''@;'; put 'put ''ZSA2MDpyZXR1cm4gVW4oZS5zbGljZShyKSx0KTtkZWZhdWx0OmJyZWFrIGV9cmV0dXJuIGNhLnRvX3dvcmtib29rKGUsdCl9ZnVuY3Rpb24gWW4oZSx0LHIsYSl7cmV0dXJuIGE/KHIudHlwZT0ic3RyaW5nIixjYS50b193b3JrYm9vayhlLHIpKTpjYS50b193b3JrYm9vayh0LHIpfWZ1bmN0''@;'; put 'put ''aW9uIEkwKGUsdCl7cjAoKTt2YXIgcj10fHx7fTtpZih0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIEkwKG5ldyBVaW50OEFycmF5KGUpLCgocj1NZShyKSkudHlwZT0iYXJyYXkiLHIpKTt0eXBlb2YgVWludDhBcnJheTwidSImJmUgaW5z''@;'; put 'put ''dGFuY2VvZiBVaW50OEFycmF5JiYhci50eXBlJiYoci50eXBlPXR5cGVvZiBEZW5vPCJ1Ij8iYnVmZmVyIjoiYXJyYXkiKTt2YXIgbixhPWUsaT0hMTtpZihyLmNlbGxTdHlsZXMmJihyLmNlbGxORj0hMCxyLnNoZWV0U3R1YnM9ITApLGhhPXt9LHIuZGF0ZU5GJiYoaGEuZGF0ZU5GPXIuZGF0''@;'; put 'put ''ZU5GKSxyLnR5cGV8fChyLnR5cGU9U2UmJkJ1ZmZlci5pc0J1ZmZlcihlKT8iYnVmZmVyIjoiYmFzZTY0IiksImZpbGUiPT1yLnR5cGUmJihyLnR5cGU9U2U/ImJ1ZmZlciI6ImJpbmFyeSIsYT1mdW5jdGlvbiBjbyhlKXtpZih0eXBlb2YgRGVubzwidSIpcmV0dXJuIERlbm8ucmVhZEZpbGVT''@;'; put 'put ''eW5jKGUpO2lmKHR5cGVvZiAkPCJ1IiYmdHlwZW9mIEZpbGU8InUiJiZ0eXBlb2YgRm9sZGVyPCJ1Iil0cnl7dmFyIHQ9RmlsZShlKTt0Lm9wZW4oInIiKSx0LmVuY29kaW5nPSJiaW5hcnkiO3ZhciByPXQucmVhZCgpO3JldHVybiB0LmNsb3NlKCkscn1jYXRjaChhKXtpZighYS5tZXNzYWdl''@;'; put 'put ''fHwhYS5tZXNzYWdlLm1hdGNoKC9vbnN0cnVjdC8pKXRocm93IGF9dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgYWNjZXNzIGZpbGUgIitlKX0oZSksdHlwZW9mIFVpbnQ4QXJyYXk8InUiJiYhU2UmJihyLnR5cGU9ImFycmF5IikpLCJzdHJpbmciPT1yLnR5cGUmJihpPSEwLHIudHlwZT0iYmlu''@;'; put 'put ''YXJ5IixyLmNvZGVwYWdlPTY1MDAxLGE9ZnVuY3Rpb24gZmcoZSl7cmV0dXJuIGUubWF0Y2goL1teXHgwMC1ceDdGXS8pP3R0KGUpOmV9KGUpKSwiYXJyYXkiPT1yLnR5cGUmJnR5cGVvZiBVaW50OEFycmF5PCJ1IiYmZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJnR5cGVvZiBBcnJheUJ1ZmZl''@;'; put 'put ''cjwidSIpe3ZhciBzPW5ldyBBcnJheUJ1ZmZlcigzKSxmPW5ldyBVaW50OEFycmF5KHMpO2lmKGYuZm9vPSJiYXIiLCFmLmZvbylyZXR1cm4ocj1NZShyKSkudHlwZT0iYXJyYXkiLEkwKE0wKGEpLHIpfXN3aXRjaCgobj1LbihhLHIpKVswXSl7Y2FzZSAyMDg6aWYoMjA3PT09blsxXSYmMTc9''@;'; put 'put ''PT1uWzJdJiYyMjQ9PT1uWzNdJiYxNjE9PT1uWzRdJiYxNzc9PT1uWzVdJiYyNj09PW5bNl0mJjIyNT09PW5bN10pcmV0dXJuIGZ1bmN0aW9uIGFnKGUsdCl7cmV0dXJuIHZlLmZpbmQoZSwiRW5jcnlwdGVkUGFja2FnZSIpP2VnKGUsdCk6S2YoZSx0KX0odmUucmVhZChhLHIpLHIpO2JyZWFr''@;'; put 'put ''O2Nhc2UgOTppZihuWzFdPD04KXJldHVybiBLZihhLHIpO2JyZWFrO2Nhc2UgNjA6cmV0dXJuIFVuKGEscik7Y2FzZSA3MzppZig3Mz09PW5bMV0mJjQyPT09blsyXSYmMD09PW5bM10pdGhyb3cgbmV3IEVycm9yKCJUSUZGIEltYWdlIEZpbGUgaXMgbm90IGEgc3ByZWFkc2hlZXQiKTtpZig2''@;'; put 'put ''OD09PW5bMV0pcmV0dXJuIGZ1bmN0aW9uIGdoKGUsdCl7dmFyIHI9dHx8e30sYT0hIXIuV1RGO3IuV1RGPSEwO3RyeXt2YXIgbj1lZi50b193b3JrYm9vayhlLHIpO3JldHVybiByLldURj1hLG59Y2F0Y2goaSl7aWYoci5XVEY9YSwhaS5tZXNzYWdlLm1hdGNoKC9TWUxLIGJhZCByZWNvcmQg''@;'; put 'put ''SUQvKSYmYSl0aHJvdyBpO3JldHVybiBjYS50b193b3JrYm9vayhlLHQpfX0oYSxyKTticmVhaztjYXNlIDg0OmlmKDY1PT09blsxXSYmNjY9PT1uWzJdJiY3Nj09PW5bM10pcmV0dXJuIHJmLnRvX3dvcmtib29rKGEscik7YnJlYWs7Y2FzZSA4MDpyZXR1cm4gNzU9PT1uWzFdJiZuWzJdPDkm''@;'; put 'put ''Jm5bM108OT9mdW5jdGlvbiBuZyhlLHQpe3ZhciBhPWUsbj10fHx7fTtyZXR1cm4gbi50eXBlfHwobi50eXBlPVNlJiZCdWZmZXIuaXNCdWZmZXIoZSk/ImJ1ZmZlciI6ImJhc2U2NCIpLFFtKFJpKGEsbiksbil9KGEscik6WW4oZSxhLHIsaSk7Y2FzZSAyMzk6cmV0dXJuIDYwPT09blszXT9V''@;'; put 'put ''bihhLHIpOlluKGUsYSxyLGkpO2Nhc2UgMjU1OmlmKDI1ND09PW5bMV0pcmV0dXJuIGZ1bmN0aW9uIHNnKGUsdCl7dmFyIHI9ZTtyZXR1cm4iYmFzZTY0Ij09dC50eXBlJiYocj1PcihyKSkscj1PZS51dGlscy5kZWNvZGUoMTIwMCxyLnNsaWNlKDIpLCJzdHIiKSx0LnR5cGU9ImJpbmFyeSIs''@;'; put 'put ''dmMocix0KX0oYSxyKTtpZigwPT09blsxXSYmMj09PW5bMl0mJjA9PT1uWzNdKXJldHVybiBqdC50b193b3JrYm9vayhhLHIpO2JyZWFrO2Nhc2UgMDppZigwPT09blsxXSYmKG5bMl0+PTImJjA9PT1uWzNdfHwwPT09blsyXSYmKDg9PT1uWzNdfHw5PT09blszXSkpKXJldHVybiBqdC50b193''@;'; put 'put ''b3JrYm9vayhhLHIpO2JyZWFrO2Nhc2UgMzpjYXNlIDEzMTpjYXNlIDEzOTpjYXNlIDE0MDpyZXR1cm4gVG4udG9fd29ya2Jvb2soYSxyKTtjYXNlIDEyMzppZig5Mj09PW5bMV0mJjExND09PW5bMl0mJjExNj09PW5bM10pcmV0dXJuIG9mLnRvX3dvcmtib29rKGEscik7YnJlYWs7Y2FzZSAx''@;'; put 'put ''MDpjYXNlIDEzOmNhc2UgMzI6cmV0dXJuIGZ1bmN0aW9uIGlnKGUsdCl7dmFyIHI9IiIsYT1LbihlLHQpO3N3aXRjaCh0LnR5cGUpe2Nhc2UiYmFzZTY0IjpyPU9yKGUpO2JyZWFrO2Nhc2UiYmluYXJ5IjpyPWU7YnJlYWs7Y2FzZSJidWZmZXIiOnI9ZS50b1N0cmluZygiYmluYXJ5Iik7YnJl''@;'; put 'put ''YWs7Y2FzZSJhcnJheSI6cj1QdChlKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIit0LnR5cGUpfXJldHVybiAyMzk9PWFbMF0mJjE4Nz09YVsxXSYmMTkxPT1hWzJdJiYocj1CZShyKSksdC50eXBlPSJiaW5hcnkiLHZjKHIsdCl9KGEscik7Y2Fz''@;'; put 'put ''ZSAxMzc6aWYoODA9PT1uWzFdJiY3OD09PW5bMl0mJjcxPT09blszXSl0aHJvdyBuZXcgRXJyb3IoIlBORyBJbWFnZSBGaWxlIGlzIG5vdCBhIHNwcmVhZHNoZWV0Iil9cmV0dXJuIG1oLmluZGV4T2YoblswXSk+LTEmJm5bMl08PTEyJiZuWzNdPD0zMT9Ubi50b193b3JrYm9vayhhLHIpOllu''@;'; put 'put ''KGUsYSxyLGkpfWZ1bmN0aW9uIF9jKGUsdCxyLGEsbixpLHMsZil7dmFyIGM9S2Uociksbz1mLmRlZnZhbCxsPWYucmF3fHwhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGYsInJhdyIpLGg9ITAseD0xPT09bj9bXTp7fTtpZigxIT09bilpZihPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkpdHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh4LCJfX3Jvd051bV9fIix7dmFsdWU6cixlbnVtZXJhYmxlOiExfSl9Y2F0Y2h7eC5fX3Jvd051bV9fPXJ9ZWxzZSB4Ll9fcm93TnVtX189cjtpZighc3x8ZVtyXSlmb3IodmFyIGQ9dC5zLmM7ZDw9dC5lLmM7KytkKXt2YXIgdj1zP2Vb''@;'; put 'put ''cl1bZF06ZVthW2RdK2NdO2lmKHZvaWQgMCE9PXYmJnZvaWQgMCE9PXYudCl7dmFyIHU9di52O3N3aXRjaCh2LnQpe2Nhc2UieiI6aWYobnVsbD09dSlicmVhaztjb250aW51ZTtjYXNlImUiOnU9MD09dT9udWxsOnZvaWQgMDticmVhaztjYXNlInMiOmNhc2UiZCI6Y2FzZSJiIjpjYXNlIm4i''@;'; put 'put ''OmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgdHlwZSAiK3YudCl9aWYobnVsbCE9aVtkXSl7aWYobnVsbD09dSlpZigiZSI9PXYudCYmbnVsbD09PXUpeFtpW2RdXT1udWxsO2Vsc2UgaWYodm9pZCAwIT09byl4W2lbZF1dPW87ZWxzZXtpZighbHx8bnVsbCE9''@;'; put 'put ''PXUpY29udGludWU7eFtpW2RdXT1udWxsfWVsc2UgeFtpW2RdXT1sJiYoIm4iIT09di50fHwibiI9PT12LnQmJiExIT09Zi5yYXdOdW1iZXJzKT91OmF0KHYsdSxmKTtudWxsIT11JiYoaD0hMSl9fWVsc2V7aWYodm9pZCAwPT09byljb250aW51ZTtudWxsIT1pW2RdJiYoeFtpW2RdXT1vKX19''@;'; put 'put ''cmV0dXJue3Jvdzp4LGlzZW1wdHk6aH19ZnVuY3Rpb24gZWkoZSx0LHIsYSl7dmFyIG49MTtpZighcilmb3IoO248PTY1NTM1JiYtMSE9ZS5TaGVldE5hbWVzLmluZGV4T2Yocj0iU2hlZXQiK24pOysrbixyPXZvaWQgMCk7aWYoIXJ8fGUuU2hlZXROYW1lcy5sZW5ndGg+PTY1NTM1KXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigiVG9vIG1hbnkgd29ya3NoZWV0cyIpO2lmKGEmJmUuU2hlZXROYW1lcy5pbmRleE9mKHIpPj0wKXt2YXIgaT1yLm1hdGNoKC8oXi4qPykoXGQrKSQvKTtuPWkmJitpWzJdfHwwO3ZhciBzPWkmJmlbMV18fHI7Zm9yKCsrbjtuPD02NTUzNSYmLTEhPWUuU2hlZXROYW1lcy5p''@;'; put 'put ''bmRleE9mKHI9cytuKTsrK24pO31pZihmdW5jdGlvbiBWZihlLHQpe2lmKGUubGVuZ3RoPjMxKXtpZih0KXJldHVybiExO3Rocm93IG5ldyBFcnJvcigiU2hlZXQgbmFtZXMgY2Fubm90IGV4Y2VlZCAzMSBjaGFycyIpfXZhciByPSEwO3JldHVybiBmcC5mb3JFYWNoKGZ1bmN0aW9uKGEpe2lm''@;'; put 'put ''KC0xIT1lLmluZGV4T2YoYSkpe2lmKCF0KXRocm93IG5ldyBFcnJvcigiU2hlZXQgbmFtZSBjYW5ub3QgY29udGFpbiA6IFxcIC8gPyAqIFsgXSIpO3I9ITF9fSkscn0ociksZS5TaGVldE5hbWVzLmluZGV4T2Yocik+PTApdGhyb3cgbmV3IEVycm9yKCJXb3Jrc2hlZXQgd2l0aCBuYW1lIHwi''@;'; put 'put ''K3IrInwgYWxyZWFkeSBleGlzdHMhIik7cmV0dXJuIGUuU2hlZXROYW1lcy5wdXNoKHIpLGUuU2hlZXRzW3JdPXQscn1hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwoe2RhdGE6ZX0pPT57Y29uc3R7ZGF0YTp0LG9wdHM6cn09ZTt0cnl7Y29uc3QgYT1JMCh0LHIpO3Bvc3RNZXNzYWdlKHtl''@;'; put 'put ''dmVudDoicmVhZGluZ19lbmQiLHdvcmtib29rOmF9KX1jYXRjaChhKXthLm1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygicGFzc3dvcmQiKSYmcG9zdE1lc3NhZ2Uoe2Vycm9yOmF9KX19KX0pKCk7'';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=caret.65f1fc0acbe4c7ff-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMiAxMiI+CiAgICA8ZGVmcz4KICAgICAgICA8c3R5bGU+LmNscy0xe2ZpbGw6I2IzYjNiMzt9PC9zdHlsZT4KICAgIDwvZGVmcz4KICAgIDx0aXRsZT5DYXJldDwvdGl0bGU+CiAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xzLTEiIGQ9Ik02LDlMMS4yLDQuMmEwLjY4LDAuNjgsMCwwLDEsMS0xTDYsNy4wOCw5Ljg0LDMuMjRhMC42OCwwLjY4LDAsMSwxLDEsMVoiLz4KPC9zdmc+Cg=='';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=index-html; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+CiAgICA8dGl0bGU+RGF0YSBDb250cm9sbGVyPC90aXRsZT4KICAgIDwhLS0gPGJhc2UgaHJlZj0iLyI+IC0tPgoKICAgIDwhLS0gbWV0YSB0YWdzIC0tPgogICAgPG1l''@;'; put 'put ''dGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkNhcHR1cmUsIFJldmlldywgYW5kIEFwcHJvdmUiLz4KICAgIDxtZXRhIGl0ZW1wcm9wPSJuYW1lIiBjb250ZW50PSJEYXRhIENvbnRyb2xsZXIgZm9yIFNBU8KuIi8+CiAgICA8bWV0YSBpdGVtcHJvcD0iZGVzY3JpcHRpb24iIGNvbnRl''@;'; put 'put ''bnQ9IkNhcHR1cmUsIFJldmlldywgYW5kIEFwcHJvdmUiLz4KICAgIDxtZXRhIGl0ZW1wcm9wPSJpbWFnZSIgY29udGVudD0iaHR0cHM6Ly9kb2NzLmRhdGFjb250cm9sbGVyLmlvL2ltZy9kY19iZ19Bc3NldC01QDJ4LnBuZyIvPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOnVybCIgY29udGVu''@;'; put 'put ''dD0iaHR0cDovL2RlbW8uZGF0YWNvbnRyb2xsZXIuaW8iLz4KICAgIDxtZXRhIHByb3BlcnR5PSJvZzp0eXBlIiBjb250ZW50PSJ3ZWJzaXRlIi8+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dGl0bGUiIGNvbnRlbnQ9IkRhdGEgQ29udHJvbGxlciBmb3IgU0FTwq4iLz4KICAgIDxtZXRhIHBy''@;'; put 'put ''b3BlcnR5PSJvZzpkZXNjcmlwdGlvbiIgY29udGVudD0iQ2FwdHVyZSwgUmV2aWV3LCBhbmQgQXBwcm92ZSIvPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOmltYWdlIiBjb250ZW50PSJodHRwczovL2RvY3MuZGF0YWNvbnRyb2xsZXIuaW8vaW1nL2RjX2JnX0Fzc2V0LTVAMngucG5nIi8+Cgog''@;'; put 'put ''ICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIi8+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiLz4KICAgIDxsaW5rIHJlbD0iaWNvbiIgdHlwZT0iaW1hZ2Uv''@;'; put 'put ''eC1pY29uIiBocmVmPSJpbWFnZXMvZmF2aWNvbi5pY28iLz4KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlcy5iYTAwMmUyNWQxMDM2NDRhLmNzcyI+PC9oZWFkPgoKICA8IS0tCiAgICAjIyBTQVNKUyBBZGFwdGVyIGNvbmZpZyBkZXRhaWxzICMjCgogICAgKiBhcHBMb2M6''@;'; put 'put ''IFRoZSBsb2NhdGlvbiBpbiBtZXRhZGF0YSBvciBTQVMgZHJpdmUgd2hlcmUgREMgd2lsbCBiZSBkZXBsb3llZAogICAgKiBzZXJ2ZXJUeXBlOiBlaXRoZXIgU0FTOSwgU0FTVklZQSBvciBTQVNKUwogICAgKiBsb2dpbk1lY2hhbmlzbTogVXNlICdEZWZhdWx0JyBmb3IgcmVndWxhciAodXNl''@;'; put 'put ''ci9wYXNzKSBsb2dpbnMsIG9yICdSZWRpcmVjdGVkJyBmb3IgMkZBL1NTTwogICAgKiBkZWJ1ZzogV2hldGhlciB0byBlbmFibGUgZGVidWcgb24gc3RhcnR1cAoKICAgICMjIFZpeWEgb25seSBzZXR0aW5ncyAjIwogICAgKiBhZG1pbkdyb3VwOiBUaGlzIGdyb3VwIHdpbGwgaGF2ZSB1bnJl''@;'; put 'put ''c3RyaWN0ZWQgYWNjZXNzIChWaXlhIE9ubHkpCiAgICAqIGRjUGF0aDogVGhlIHBoeXNpY2FsIGxvY2F0aW9uIGluIHdoaWNoIHRvIGRlcGxveSB0aGUgc3RhZ2luZyBhcmVhIChWaXlhIG9ubHkpCiAgICAqIHVzZUNvbXB1dGVBcGk6IENvbm5lY3Rpb24gbWV0aG9kIChWaXlhIG9ubHkpCiAg''@;'; put 'put ''ICAqIGNvbnRleHROYW1lOiBDb21wdXRlIENvbnRleHQgKFZpeWEgb25seSkKCiAgLS0+CgogIDxzYXNqcyBzZXJ2ZXJ1cmw9IiIgYXBwbG9jPSIvUHVibGljL2FwcC9kZXZ0ZXN0IiBzZXJ2ZXJ0eXBlPSJTQVNKUyIgbG9naW5tZWNoYW5pc209IlJlZGlyZWN0ZWQiIGRlYnVnPSJmYWxzZSIg''@;'; put 'put ''dXNlY29tcHV0ZWFwaT0idHJ1ZSIgY29udGV4dG5hbWU9IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCIgYWRtaW5ncm91cD0iU0FTQWRtaW5pc3RyYXRvcnMiIGRjcGF0aD0iL3RtcC9kYyIgaG90bGljZW5jZWtleT0ibm9uLWNvbW1lcmNpYWwtYW5kLWV2YWx1YXRpb24iPgog''@;'; put 'put ''IDwvc2FzanM+CgogIDxib2R5IGNkcy10aGVtZT0ibGlnaHQiIGNsYXNzPSJtLTAiPgogICAgPG15LWFwcD48L215LWFwcD4KICA8c2NyaXB0IHNyYz0icnVudGltZS40NWU1YzNjZTI2Nzc3NzJkLmpzIiB0eXBlPSJtb2R1bGUiPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSJwb2x5ZmlsbHMuMjE2''@;'; put 'put ''NzM4NDNiNzJjNTViMC5qcyIgdHlwZT0ibW9kdWxlIj48L3NjcmlwdD48c2NyaXB0IHNyYz0ic2NyaXB0cy4wMjFmNGE2OGE3ZTAwMDkzLmpzIiBkZWZlcj48L3NjcmlwdD48c2NyaXB0IHNyYz0ibWFpbi5hMzcxOTE0OGM0NWMzNTI3LmpzIiB0eXBlPSJtb2R1bGUiPjwvc2NyaXB0PjwvYm9k''@;'; put 'put ''eT4KPC9odG1sPgo='';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=main.a3719148c45c3527-js; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''KHNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXI9c2VsZi53ZWJwYWNrQ2h1bmtkYXRhY29udHJvbGxlcnx8W10pLnB1c2goW1s3OTJdLHszNTA6KGNlLFgsYik9Pnt2YXIgST1iKDYwNTAzKSxfPWIoMTkzMDcpLHA9YigyNzA1NCkuQnVmZmVyLFY9Yig5MTgyMSksdz1iKDMyNDcpLFA9''@;'; put 'put ''YigxMjM3NSksRj1iKDE4MjExKTtmdW5jdGlvbiB6KFksVyxxKXt3LmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IE8sdGhpcy5fY2lwaGVyPW5ldyBQLkFFUyhXKSx0aGlzLl9wcmV2PXAuZnJvbShxKSx0aGlzLl9tb2RlPVksdGhpcy5fYXV0b3BhZGRpbmc9ITB9Yig3MTk5Mykoeix3KSx6''@;'; put 'put ''LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFkpe3RoaXMuX2NhY2hlLmFkZChZKTtmb3IodmFyIFcscSxlZT1bXTtXPXRoaXMuX2NhY2hlLmdldCgpOylxPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLFcpLGVlLnB1c2gocSk7cmV0dXJuIHAuY29uY2F0KGVlKX07dmFyIE49cC5hbGxvYygx''@;'; put 'put ''NiwxNik7ZnVuY3Rpb24gTygpe3RoaXMuY2FjaGU9cC5hbGxvY1Vuc2FmZSgwKX1mdW5jdGlvbiBLKFksVyxxKXt2YXIgZWU9SVtZLnRvTG93ZXJDYXNlKCldO2lmKCFlZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtpZigic3RyaW5nIj09dHlwZW9mIFcmJihX''@;'; put 'put ''PXAuZnJvbShXKSksVy5sZW5ndGghPT1lZS5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGtleSBsZW5ndGggIitXLmxlbmd0aCk7aWYoInN0cmluZyI9PXR5cGVvZiBxJiYocT1wLmZyb20ocSkpLCJHQ00iIT09ZWUubW9kZSYmcS5sZW5ndGghPT1lZS5pdil0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJpbnZhbGlkIGl2IGxlbmd0aCAiK3EubGVuZ3RoKTtyZXR1cm4ic3RyZWFtIj09PWVlLnR5cGU/bmV3IFYoZWUubW9kdWxlLFcscSk6ImF1dGgiPT09ZWUudHlwZT9uZXcgXyhlZS5tb2R1bGUsVyxxKTpuZXcgeihlZS5tb2R1bGUsVyxxKX16LnByb3RvdHlwZS5fZmluYWw9''@;'; put 'put ''ZnVuY3Rpb24oKXt2YXIgWT10aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9wYWRkaW5nKXJldHVybiBZPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLFkpLHRoaXMuX2NpcGhlci5zY3J1YigpLFk7aWYoIVkuZXF1YWxzKE4pKXRocm93IHRoaXMuX2NpcGhlci5zY3J1YigpLG5ldyBF''@;'; put 'put ''cnJvcigiZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoIil9LHoucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKFkpe3JldHVybiB0aGlzLl9hdXRvcGFkZGluZz0hIVksdGhpc30sTy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKFkpe3RoaXMuY2FjaGU9cC5jb25jYXQo''@;'; put 'put ''W3RoaXMuY2FjaGUsWV0pfSxPLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlLmxlbmd0aD4xNSl7dmFyIFk9dGhpcy5jYWNoZS5zbGljZSgwLDE2KTtyZXR1cm4gdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxZfXJldHVybiBudWxsfSxPLnByb3RvdHlwZS5m''@;'; put 'put ''bHVzaD1mdW5jdGlvbigpe2Zvcih2YXIgWT0xNi10aGlzLmNhY2hlLmxlbmd0aCxXPXAuYWxsb2NVbnNhZmUoWSkscT0tMTsrK3E8WTspVy53cml0ZVVJbnQ4KFkscSk7cmV0dXJuIHAuY29uY2F0KFt0aGlzLmNhY2hlLFddKX0sWC5jcmVhdGVDaXBoZXJpdj1LLFguY3JlYXRlQ2lwaGVyPWZ1''@;'; put 'put ''bmN0aW9uIFooWSxXKXt2YXIgcT1JW1kudG9Mb3dlckNhc2UoKV07aWYoIXEpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7dmFyIGVlPUYoVywhMSxxLmtleSxxLml2KTtyZXR1cm4gSyhZLGVlLmtleSxlZS5pdil9fSw0Njg6KGNlLFgsYik9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIEk9Yig1ODYwNyk7Y2UuZXhwb3J0cz1JKHt9LmlzUHJvdG90eXBlT2YpfSw1NTg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig1ODYwNyksXz1iKDU1NTkyKSxwPWIoODY2NzUpLFY9T2JqZWN0LHc9SSgiIi5zcGxpdCk7Y2UuZXhwb3J0cz1fKGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIVYoInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKX0pP2Z1bmN0aW9uKFApe3JldHVybiJTdHJpbmciPT09cChQKT93KFAsIiIpOlYoUCl9OlZ9LDU3MzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQ2NzU4KSxwPWIoMTI3NzMpKCJUeXBlZEFycmF5LnByb3RvdHlwZS5i''@;'; put 'put ''dWZmZXIiLCEwKSxWPWIoNDcyOSk7Y2UuZXhwb3J0cz1wfHxmdW5jdGlvbihQKXtpZighVihQKSl0aHJvdyBuZXcgSSgiTm90IGEgVHlwZWQgQXJyYXkiKTtyZXR1cm4gUC5idWZmZXJ9fSw1NzU6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9j''@;'; put 'put ''YWxlKCJ6aC1jbiIse21vbnRoczoiXHU0ZTAwXHU2NzA4X1x1NGU4Y1x1NjcwOF9cdTRlMDlcdTY3MDhfXHU1NmRiXHU2NzA4X1x1NGU5NFx1NjcwOF9cdTUxNmRcdTY3MDhfXHU0ZTAzXHU2NzA4X1x1NTE2Ylx1NjcwOF9cdTRlNWRcdTY3MDhfXHU1MzQxXHU2NzA4X1x1NTM0MVx1NGUwMFx1''@;'; put 'put ''NjcwOF9cdTUzNDFcdTRlOGNcdTY3MDgiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IjFcdTY3MDhfMlx1NjcwOF8zXHU2NzA4XzRcdTY3MDhfNVx1NjcwOF82XHU2NzA4XzdcdTY3MDhfOFx1NjcwOF85XHU2NzA4XzEwXHU2NzA4XzExXHU2NzA4XzEyXHU2NzA4Ii5zcGxpdCgiXyIpLHdlZWtk''@;'; put 'put ''YXlzOiJcdTY2MWZcdTY3MWZcdTY1ZTVfXHU2NjFmXHU2NzFmXHU0ZTAwX1x1NjYxZlx1NjcxZlx1NGU4Y19cdTY2MWZcdTY3MWZcdTRlMDlfXHU2NjFmXHU2NzFmXHU1NmRiX1x1NjYxZlx1NjcxZlx1NGU5NF9cdTY2MWZcdTY3MWZcdTUxNmQiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi''@;'; put 'put ''XHU1NDY4XHU2NWU1X1x1NTQ2OFx1NGUwMF9cdTU0NjhcdTRlOGNfXHU1NDY4XHU0ZTA5X1x1NTQ2OFx1NTZkYl9cdTU0NjhcdTRlOTRfXHU1NDY4XHU1MTZkIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTY1ZTVfXHU0ZTAwX1x1NGU4Y19cdTRlMDlfXHU1NmRiX1x1NGU5NF9cdTUxNmQi''@;'; put 'put ''LnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS9NTS9ERCIsTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVBaFx1NzBiOW1tXHU1MjA2IixMTExMOiJZWVlZXHU1ZTc0TVx1''@;'; put 'put ''NjcwOERcdTY1ZTVkZGRkQWhcdTcwYjltbVx1NTIwNiIsbDoiWVlZWS9NL0QiLGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLGxsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVkZGRkIEhIOm1tIn0sbWVyaWRpZW1Q''@;'; put 'put ''YXJzZTovXHU1MWNjXHU2NjY4fFx1NjVlOVx1NGUwYXxcdTRlMGFcdTUzNDh8XHU0ZTJkXHU1MzQ4fFx1NGUwYlx1NTM0OHxcdTY2NWFcdTRlMGEvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihwLFYpe3JldHVybiAxMj09PXAmJihwPTApLCJcdTUxY2NcdTY2NjgiPT09Vnx8Ilx1NjVlOVx1NGUw''@;'; put 'put ''YSI9PT1WfHwiXHU0ZTBhXHU1MzQ4Ij09PVY/cDoiXHU0ZTBiXHU1MzQ4Ij09PVZ8fCJcdTY2NWFcdTRlMGEiPT09Vj9wKzEyOnA+PTExP3A6cCsxMn0sbWVyaWRpZW06ZnVuY3Rpb24ocCxWLHcpe3ZhciBQPTEwMCpwK1Y7cmV0dXJuIFA8NjAwPyJcdTUxY2NcdTY2NjgiOlA8OTAwPyJcdTY1''@;'; put 'put ''ZTlcdTRlMGEiOlA8MTEzMD8iXHU0ZTBhXHU1MzQ4IjpQPDEyMzA/Ilx1NGUyZFx1NTM0OCI6UDwxODAwPyJcdTRlMGJcdTUzNDgiOiJcdTY2NWFcdTRlMGEifSxjYWxlbmRhcjp7c2FtZURheToiW1x1NGVjYVx1NTkyOV1MVCIsbmV4dERheToiW1x1NjYwZVx1NTkyOV1MVCIsbmV4dFdlZWs6''@;'; put 'put ''ZnVuY3Rpb24ocCl7cmV0dXJuIHAud2VlaygpIT09dGhpcy53ZWVrKCk/IltcdTRlMGJdZGRkTFQiOiJbXHU2NzJjXWRkZExUIn0sbGFzdERheToiW1x1NjYyOFx1NTkyOV1MVCIsbGFzdFdlZWs6ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMud2VlaygpIT09cC53ZWVrKCk/IltcdTRlMGFdZGRk''@;'; put 'put ''TFQiOiJbXHU2NzJjXWRkZExUIn0sc2FtZUVsc2U6IkwifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KFx1NjVlNXxcdTY3MDh8XHU1NDY4KS8sb3JkaW5hbDpmdW5jdGlvbihwLFYpe3N3aXRjaChWKXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBwKyJcdTY1ZTUi''@;'; put 'put ''O2Nhc2UiTSI6cmV0dXJuIHArIlx1NjcwOCI7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBwKyJcdTU0NjgiO2RlZmF1bHQ6cmV0dXJuIHB9fSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTU0MGUiLHBhc3Q6IiVzXHU1MjRkIixzOiJcdTUxZTBcdTc5ZDIiLHNzOiIlZCBcdTc5ZDIiLG06IjEg''@;'; put 'put ''XHU1MjA2XHU5NDlmIixtbToiJWQgXHU1MjA2XHU5NDlmIixoOiIxIFx1NWMwZlx1NjVmNiIsaGg6IiVkIFx1NWMwZlx1NjVmNiIsZDoiMSBcdTU5MjkiLGRkOiIlZCBcdTU5MjkiLHc6IjEgXHU1NDY4Iix3dzoiJWQgXHU1NDY4IixNOiIxIFx1NGUyYVx1NjcwOCIsTU06IiVkIFx1NGUyYVx1''@;'; put 'put ''NjcwOCIseToiMSBcdTVlNzQiLHl5OiIlZCBcdTVlNzQifSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw1ODY6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJpZCIse21vbnRoczoiSmFudWFyaV9GZWJydWFyaV9NYXJl''@;'; put 'put ''dF9BcHJpbF9NZWlfSnVuaV9KdWxpX0FndXN0dXNfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NZWlfSnVuX0p1bF9BZ3RfU2VwX09rdF9Ob3ZfRGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJNaW5n''@;'; put 'put ''Z3VfU2VuaW5fU2VsYXNhX1JhYnVfS2FtaXNfSnVtYXRfU2FidHUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiTWluX1Nlbl9TZWxfUmFiX0thbV9KdW1fU2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJNZ19Tbl9TbF9SYl9LbV9KbV9TYiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1h''@;'; put 'put ''dDp7TFQ6IkhILm1tIixMVFM6IkhILm1tLnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbSJ9LG1lcmlkaWVtUGFyc2U6L3BhZ2l8c2lhbmd8c29yZXxt''@;'; put 'put ''YWxhbS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHAsVil7cmV0dXJuIDEyPT09cCYmKHA9MCksInBhZ2kiPT09Vj9wOiJzaWFuZyI9PT1WP3A+PTExP3A6cCsxMjoic29yZSI9PT1WfHwibWFsYW0iPT09Vj9wKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24ocCxWLHcpe3JldHVybiBwPDEx''@;'; put 'put ''PyJwYWdpIjpwPDE1PyJzaWFuZyI6cDwxOT8ic29yZSI6Im1hbGFtIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIYXJpIGluaSBwdWt1bF0gTFQiLG5leHREYXk6IltCZXNvayBwdWt1bF0gTFQiLG5leHRXZWVrOiJkZGRkIFtwdWt1bF0gTFQiLGxhc3REYXk6IltLZW1hcmluIHB1a3VsXSBMVCIs''@;'; put 'put ''bGFzdFdlZWs6ImRkZGQgW2xhbHUgcHVrdWxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkYWxhbSAlcyIscGFzdDoiJXMgeWFuZyBsYWx1IixzOiJiZWJlcmFwYSBkZXRpayIsc3M6IiVkIGRldGlrIixtOiJzZW1lbml0IixtbToiJWQgbWVuaXQiLGg6InNlamFt''@;'; put 'put ''IixoaDoiJWQgamFtIixkOiJzZWhhcmkiLGRkOiIlZCBoYXJpIixNOiJzZWJ1bGFuIixNTToiJWQgYnVsYW4iLHk6InNldGFodW4iLHl5OiIlZCB0YWh1biJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShiKDk3NTg2KSl9LDgwNzpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0''@;'; put 'put ''cmljdCI7SS5kZWZpbmVMb2NhbGUoImVuLWllIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJf''@;'; put 'put ''TWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0''@;'; put 'put ''Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRk''@;'; put 'put ''ZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExU''@;'; put 'put ''IixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQg''@;'; put 'put ''ZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihwKXt2YXIgVj1wJTEwO3JldHVybiBwKygxPT1+fihwJTEwMC8xMCk/InRo''@;'; put 'put ''IjoxPT09Vj8ic3QiOjI9PT1WPyJuZCI6Mz09PVY/InJkIjoidGgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sOTE3OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEksXyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHAoeCxDKXtpZigheCl0aHJvdyBuZXcgRXJyb3IoQ3x8''@;'; put 'put ''IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBWKHgsQyl7eC5zdXBlcl89Qzt2YXIgVD1mdW5jdGlvbigpe307VC5wcm90b3R5cGU9Qy5wcm90b3R5cGUseC5wcm90b3R5cGU9bmV3IFQseC5wcm90b3R5cGUuY29uc3RydWN0b3I9eH1mdW5jdGlvbiB3KHgsQyxUKXtpZih3LmlzQk4oeCkp''@;'; put 'put ''cmV0dXJuIHg7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PXgmJigoImxlIj09PUN8fCJiZSI9PT1DKSYmKFQ9QyxDPTEwKSx0aGlzLl9pbml0KHh8fDAsQ3x8MTAsVHx8ImJlIikpfXZhciBQOyJvYmplY3QiPT10eXBl''@;'; put 'put ''b2YgST9JLmV4cG9ydHM9dzpfLkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e1A9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOmIoNDc3OTApLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gRih4LEMpe3ZhciBUPXguY2hhckNvZGVB''@;'; put 'put ''dChDKTtyZXR1cm4gVD49NDgmJlQ8PTU3P1QtNDg6VD49NjUmJlQ8PTcwP1QtNTU6VD49OTcmJlQ8PTEwMj9ULTg3OnZvaWQgcCghMSwiSW52YWxpZCBjaGFyYWN0ZXIgaW4gIit4KX1mdW5jdGlvbiBSKHgsQyxUKXt2YXIgSD1GKHgsVCk7cmV0dXJuIFQtMT49QyYmKEh8PUYoeCxULTEpPDw0''@;'; put 'put ''KSxIfWZ1bmN0aW9uIHooeCxDLFQsSCl7Zm9yKHZhciBqPTAsRT0wLG09TWF0aC5taW4oeC5sZW5ndGgsVCksQT1DO0E8bTtBKyspe3ZhciBhZT14LmNoYXJDb2RlQXQoQSktNDg7aio9SCxFPWFlPj00OT9hZS00OSsxMDphZT49MTc/YWUtMTcrMTA6YWUscChhZT49MCYmRTxILCJJbnZhbGlk''@;'; put 'put ''IGNoYXJhY3RlciIpLGorPUV9cmV0dXJuIGp9ZnVuY3Rpb24gTih4LEMpe3gud29yZHM9Qy53b3Jkcyx4Lmxlbmd0aD1DLmxlbmd0aCx4Lm5lZ2F0aXZlPUMubmVnYXRpdmUseC5yZWQ9Qy5yZWR9aWYody5pc0JOPWZ1bmN0aW9uKEMpe3JldHVybiBDIGluc3RhbmNlb2Ygd3x8bnVsbCE9PUMm''@;'; put 'put ''JiJvYmplY3QiPT10eXBlb2YgQyYmQy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkoQy53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKEMsVCl7cmV0dXJuIEMuY21wKFQpPjA/QzpUfSx3Lm1pbj1mdW5jdGlvbihDLFQpe3JldHVybiBDLmNtcChUKTwwP0M6''@;'; put 'put ''VH0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oQyxULEgpe2lmKCJudW1iZXIiPT10eXBlb2YgQylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihDLFQsSCk7aWYoIm9iamVjdCI9PXR5cGVvZiBDKXJldHVybiB0aGlzLl9pbml0QXJyYXkoQyxULEgpOyJoZXgiPT09VCYmKFQ9MTYpLHAoVD09''@;'; put 'put ''PSgwfFQpJiZUPj0yJiZUPD0zNik7dmFyIGo9MDsiLSI9PT0oQz1DLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKGorKyx0aGlzLm5lZ2F0aXZlPTEpLGo8Qy5sZW5ndGgmJigxNj09PVQ/dGhpcy5fcGFyc2VIZXgoQyxqLEgpOih0aGlzLl9wYXJzZUJhc2UoQyxULGopLCJs''@;'; put 'put ''ZSI9PT1IJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksVCxIKSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihDLFQsSCl7QzwwJiYodGhpcy5uZWdhdGl2ZT0xLEM9LUMpLEM8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJkNdLHRoaXMubGVuZ3RoPTEp''@;'; put 'put ''OkM8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmQyxDLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToocChDPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJkMsQy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwi''@;'; put 'put ''bGUiPT09SCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLFQsSCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oQyxULEgpe2lmKHAoIm51bWJlciI9PXR5cGVvZiBDLmxlbmd0aCksQy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEs''@;'; put 'put ''dGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoQy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgaj0wO2o8dGhpcy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09MDt2YXIgRSxtLEE9MDtpZigiYmUiPT09SClmb3Ioaj1DLmxlbmd0aC0xLEU9MDtq''@;'; put 'put ''Pj0wO2otPTMpdGhpcy53b3Jkc1tFXXw9KG09Q1tqXXxDW2otMV08PDh8Q1tqLTJdPDwxNik8PEEmNjcxMDg4NjMsdGhpcy53b3Jkc1tFKzFdPW0+Pj4yNi1BJjY3MTA4ODYzLChBKz0yNCk+PTI2JiYoQS09MjYsRSsrKTtlbHNlIGlmKCJsZSI9PT1IKWZvcihqPTAsRT0wO2o8Qy5sZW5ndGg7''@;'; put 'put ''ais9Myl0aGlzLndvcmRzW0VdfD0obT1DW2pdfENbaisxXTw8OHxDW2orMl08PDE2KTw8QSY2NzEwODg2Myx0aGlzLndvcmRzW0UrMV09bT4+PjI2LUEmNjcxMDg4NjMsKEErPTI0KT49MjYmJihBLT0yNixFKyspO3JldHVybiB0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9''@;'; put 'put ''ZnVuY3Rpb24oQyxULEgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoQy5sZW5ndGgtVCkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgaj0wO2o8dGhpcy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09MDt2YXIgQSxFPTAsbT0wO2lmKCJiZSI9PT1IKWZvcihq''@;'; put 'put ''PUMubGVuZ3RoLTE7aj49VDtqLT0yKUE9UihDLFQsaik8PEUsdGhpcy53b3Jkc1ttXXw9NjcxMDg4NjMmQSxFPj0xOD8oRS09MTgsdGhpcy53b3Jkc1ttKz0xXXw9QT4+PjI2KTpFKz04O2Vsc2UgZm9yKGo9KEMubGVuZ3RoLVQpJTI9PTA/VCsxOlQ7ajxDLmxlbmd0aDtqKz0yKUE9UihDLFQs''@;'; put 'put ''aik8PEUsdGhpcy53b3Jkc1ttXXw9NjcxMDg4NjMmQSxFPj0xOD8oRS09MTgsdGhpcy53b3Jkc1ttKz0xXXw9QT4+PjI2KTpFKz04O3RoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oQyxULEgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZh''@;'; put 'put ''ciBqPTAsRT0xO0U8PTY3MTA4ODYzO0UqPVQpaisrO2otLSxFPUUvVHwwO2Zvcih2YXIgbT1DLmxlbmd0aC1ILEE9bSVqLGFlPU1hdGgubWluKG0sbS1BKStILG5lPTAsc2U9SDtzZTxhZTtzZSs9ailuZT16KEMsc2Usc2UraixUKSx0aGlzLmltdWxuKEUpLHRoaXMud29yZHNbMF0rbmU8Njcx''@;'; put 'put ''MDg4NjQ/dGhpcy53b3Jkc1swXSs9bmU6dGhpcy5faWFkZG4obmUpO2lmKDAhPT1BKXt2YXIgQ2U9MTtmb3IobmU9eihDLHNlLEMubGVuZ3RoLFQpLHNlPTA7c2U8QTtzZSsrKUNlKj1UO3RoaXMuaW11bG4oQ2UpLHRoaXMud29yZHNbMF0rbmU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bmU6''@;'; put 'put ''dGhpcy5faWFkZG4obmUpfXRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oQyl7Qy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKUMud29yZHNbVF09dGhpcy53b3Jkc1tUXTtDLmxlbmd0aD10aGlzLmxlbmd0''@;'; put 'put ''aCxDLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsQy5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLl9tb3ZlPWZ1bmN0aW9uKEMpe04oQyx0aGlzKX0sdy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgQz1uZXcgdyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KEMpLEN9LHcucHJvdG90eXBl''@;'; put 'put ''Ll9leHBhbmQ9ZnVuY3Rpb24oQyl7Zm9yKDt0aGlzLmxlbmd0aDxDOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLl9zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRo''@;'; put 'put ''aXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx0eXBlb2YgU3ltYm9sPCJ1IiYmImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIFN5bWJvbC5mb3IpdHJ5e3cucHJvdG90eXBlW1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIildPU99Y2F0Y2h7dy5wcm90b3R5cGUuaW5zcGVjdD1PfWVsc2Ugdy5wcm90b3R5cGUuaW5zcGVjdD1PO2Z1bmN0aW9uIE8oKXtyZXR1cm4odGhpcy5yZWQ/''@;'; put 'put ''IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In12YXIgSz1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIs''@;'; put 'put ''IjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxaPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2''@;'; put 'put ''LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLFk9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYy''@;'; put 'put ''NSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUy''@;'; put 'put ''MTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gZWUoeCxDLFQpe1QubmVnYXRpdmU9Qy5uZWdhdGl2ZV54Lm5lZ2F0aXZlO3ZhciBIPXgubGVuZ3RoK0MubGVuZ3RofDA7VC5sZW5ndGg9SCxIPUgtMXwwO3ZhciBqPTB8eC53b3Jkc1swXSxFPTB8Qy53b3Jkc1swXSxtPWoqRSxhZT1tLzY3MTA4ODY0''@;'; put 'put ''fDA7VC53b3Jkc1swXT02NzEwODg2MyZtO2Zvcih2YXIgbmU9MTtuZTxIO25lKyspe2Zvcih2YXIgc2U9YWU+Pj4yNixDZT02NzEwODg2MyZhZSxVZT1NYXRoLm1pbihuZSxDLmxlbmd0aC0xKSxKZT1NYXRoLm1heCgwLG5lLXgubGVuZ3RoKzEpO0plPD1VZTtKZSsrKXNlKz0obT0oaj0wfHgu''@;'; put 'put ''d29yZHNbbmUtSmV8MF0pKihFPTB8Qy53b3Jkc1tKZV0pK0NlKS82NzEwODg2NHwwLENlPTY3MTA4ODYzJm07VC53b3Jkc1tuZV09MHxDZSxhZT0wfHNlfXJldHVybiAwIT09YWU/VC53b3Jkc1tuZV09MHxhZTpULmxlbmd0aC0tLFQuX3N0cmlwKCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVu''@;'; put 'put ''Y3Rpb24oQyxUKXt2YXIgSDtpZihUPTB8VHx8MSwxNj09PShDPUN8fDEwKXx8ImhleCI9PT1DKXtIPSIiO2Zvcih2YXIgaj0wLEU9MCxtPTA7bTx0aGlzLmxlbmd0aDttKyspe3ZhciBBPXRoaXMud29yZHNbbV0sYWU9KDE2Nzc3MjE1JihBPDxqfEUpKS50b1N0cmluZygxNik7RT1BPj4+MjQt''@;'; put 'put ''aiYxNjc3NzIxNSwoais9Mik+PTI2JiYoai09MjYsbS0tKSxIPTAhPT1FfHxtIT09dGhpcy5sZW5ndGgtMT9LWzYtYWUubGVuZ3RoXSthZStIOmFlK0h9Zm9yKDAhPT1FJiYoSD1FLnRvU3RyaW5nKDE2KStIKTtILmxlbmd0aCVUIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2''@;'; put 'put ''ZSYmKEg9Ii0iK0gpLEh9aWYoQz09PSgwfEMpJiZDPj0yJiZDPD0zNil7dmFyIG5lPVpbQ10sc2U9WVtDXTtIPSIiO3ZhciBDZT10aGlzLmNsb25lKCk7Zm9yKENlLm5lZ2F0aXZlPTA7IUNlLmlzWmVybygpOyl7dmFyIFVlPUNlLm1vZHJuKHNlKS50b1N0cmluZyhDKTtIPShDZT1DZS5pZGl2''@;'; put 'put ''bihzZSkpLmlzWmVybygpP1VlK0g6S1tuZS1VZS5sZW5ndGhdK1VlK0h9Zm9yKHRoaXMuaXNaZXJvKCkmJihIPSIwIitIKTtILmxlbmd0aCVUIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9cCghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFu''@;'; put 'put ''ZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBDPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9DKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Qys9NDUwMzU5OTYyNzM3MDQ5Nis2''@;'; put 'put ''NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJnAoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1DOkN9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2''@;'; put 'put ''LDIpfSxQJiYody5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShQLEMsVCl9KSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKEMsVCl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksQyxUKX0sdy5wcm90b3R5cGUudG9BcnJh''@;'; put 'put ''eUxpa2U9ZnVuY3Rpb24oQyxULEgpe3RoaXMuX3N0cmlwKCk7dmFyIGo9dGhpcy5ieXRlTGVuZ3RoKCksRT1IfHxNYXRoLm1heCgxLGopO3Aoajw9RSwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLHAoRT4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKTt2''@;'; put 'put ''YXIgbT1mdW5jdGlvbihDLFQpe3JldHVybiBDLmFsbG9jVW5zYWZlP0MuYWxsb2NVbnNhZmUoVCk6bmV3IEMoVCl9KEMsRSk7cmV0dXJuIHRoaXNbIl90b0FycmF5TGlrZSIrKCJsZSI9PT1UPyJMRSI6IkJFIildKG0saiksbX0sdy5wcm90b3R5cGUuX3RvQXJyYXlMaWtlTEU9ZnVuY3Rpb24o''@;'; put 'put ''QyxUKXtmb3IodmFyIEg9MCxqPTAsRT0wLG09MDtFPHRoaXMubGVuZ3RoO0UrKyl7dmFyIEE9dGhpcy53b3Jkc1tFXTw8bXxqO0NbSCsrXT0yNTUmQSxIPEMubGVuZ3RoJiYoQ1tIKytdPUE+PjgmMjU1KSxIPEMubGVuZ3RoJiYoQ1tIKytdPUE+PjE2JjI1NSksNj09PW0/KEg8Qy5sZW5ndGgm''@;'; put 'put ''JihDW0grK109QT4+MjQmMjU1KSxqPTAsbT0wKTooaj1BPj4+MjQsbSs9Mil9aWYoSDxDLmxlbmd0aClmb3IoQ1tIKytdPWo7SDxDLmxlbmd0aDspQ1tIKytdPTB9LHcucHJvdG90eXBlLl90b0FycmF5TGlrZUJFPWZ1bmN0aW9uKEMsVCl7Zm9yKHZhciBIPUMubGVuZ3RoLTEsaj0wLEU9MCxt''@;'; put 'put ''PTA7RTx0aGlzLmxlbmd0aDtFKyspe3ZhciBBPXRoaXMud29yZHNbRV08PG18ajtDW0gtLV09MjU1JkEsSD49MCYmKENbSC0tXT1BPj44JjI1NSksSD49MCYmKENbSC0tXT1BPj4xNiYyNTUpLDY9PT1tPyhIPj0wJiYoQ1tILS1dPUE+PjI0JjI1NSksaj0wLG09MCk6KGo9QT4+PjI0LG0rPTIp''@;'; put 'put ''fWlmKEg+PTApZm9yKENbSC0tXT1qO0g+PTA7KUNbSC0tXT0wfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oQyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoQyl9OmZ1bmN0aW9uKEMpe3ZhciBUPUMsSD0wO3JldHVybiBUPj00MDk2JiYoSCs9MTMsVD4+Pj0xMyks''@;'; put 'put ''VD49NjQmJihIKz03LFQ+Pj49NyksVD49OCYmKEgrPTQsVD4+Pj00KSxUPj0yJiYoSCs9MixUPj4+PTIpLEgrVH0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKEMpe2lmKDA9PT1DKXJldHVybiAyNjt2YXIgVD1DLEg9MDtyZXR1cm4hKDgxOTEmVCkmJihIKz0xMyxUPj4+PTEzKSwh''@;'; put 'put ''KDEyNyZUKSYmKEgrPTcsVD4+Pj03KSwhKDE1JlQpJiYoSCs9NCxUPj4+PTQpLCEoMyZUKSYmKEgrPTIsVD4+Pj0yKSwhKDEmVCkmJkgrKyxIfSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgVD10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7''@;'; put 'put ''cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStUfSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBDPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgSD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW1RdKTtpZihDKz1I''@;'; put 'put ''LDI2IT09SClicmVha31yZXR1cm4gQ30sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKEMpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlu''@;'; put 'put ''b3RuKEMpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMudGVzdG4oQy0xKT90aGlzLm5vdG4oQykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''MCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9y''@;'; put 'put ''PWZ1bmN0aW9uKEMpe2Zvcig7dGhpcy5sZW5ndGg8Qy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIFQ9MDtUPEMubGVuZ3RoO1QrKyl0aGlzLndvcmRzW1RdPXRoaXMud29yZHNbVF18Qy53b3Jkc1tUXTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5''@;'; put 'put ''cGUuaW9yPWZ1bmN0aW9uKEMpe3JldHVybiBwKCEodGhpcy5uZWdhdGl2ZXxDLm5lZ2F0aXZlKSksdGhpcy5pdW9yKEMpfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihDKTpDLmNsb25lKCkuaW9yKHRoaXMp''@;'; put 'put ''fSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKEMpOkMuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihDKXt2YXIgVDtUPXRoaXMubGVuZ3RoPkMubGVuZ3RoP0M6dGhp''@;'; put 'put ''cztmb3IodmFyIEg9MDtIPFQubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXRoaXMud29yZHNbSF0mQy53b3Jkc1tIXTtyZXR1cm4gdGhpcy5sZW5ndGg9VC5sZW5ndGgsdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihDKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8''@;'; put 'put ''Qy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoQyl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoQyk6Qy5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHRo''@;'; put 'put ''aXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChDKTpDLmNsb25lKCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKEMpe3ZhciBULEg7dGhpcy5sZW5ndGg+Qy5sZW5ndGg/KFQ9dGhpcyxIPUMpOihUPUMsSD10aGlzKTtmb3IodmFyIGo9MDtqPEgu''@;'; put 'put ''bGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPVQud29yZHNbal1eSC53b3Jkc1tqXTtpZih0aGlzIT09VClmb3IoO2o8VC5sZW5ndGg7aisrKXRoaXMud29yZHNbal09VC53b3Jkc1tqXTtyZXR1cm4gdGhpcy5sZW5ndGg9VC5sZW5ndGgsdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1m''@;'; put 'put ''dW5jdGlvbihDKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Qy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoQyl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoQyk6Qy5jbG9uZSgpLml4b3IodGhpcyl9LHcu''@;'; put 'put ''cHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihDKTpDLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKEMpe3AoIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKTt2YXIgVD0w''@;'; put 'put ''fE1hdGguY2VpbChDLzI2KSxIPUMlMjY7dGhpcy5fZXhwYW5kKFQpLEg+MCYmVC0tO2Zvcih2YXIgaj0wO2o8VDtqKyspdGhpcy53b3Jkc1tqXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tqXTtyZXR1cm4gSD4wJiYodGhpcy53b3Jkc1tqXT1+dGhpcy53b3Jkc1tqXSY2NzEwODg2Mz4+MjYtSCks''@;'; put 'put ''dGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKEMpfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKEMsVCl7cCgibnVtYmVyIj09dHlwZW9mIEMmJkM+PTApO3ZhciBIPUMvMjZ8MCxqPUMlMjY7cmV0dXJuIHRoaXMu''@;'; put 'put ''X2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF09VD90aGlzLndvcmRzW0hdfDE8PGo6dGhpcy53b3Jkc1tIXSZ+KDE8PGopLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oQyl7dmFyIFQsSCxqO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Qy5uZWdhdGl2ZSlyZXR1''@;'; put 'put ''cm4gdGhpcy5uZWdhdGl2ZT0wLFQ9dGhpcy5pc3ViKEMpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PUMubmVnYXRpdmUpcmV0dXJuIEMubmVnYXRpdmU9MCxUPXRoaXMuaXN1YihDKSxDLm5lZ2F0aXZlPTEsVC5fbm9ybVNpZ24o''@;'; put 'put ''KTt0aGlzLmxlbmd0aD5DLmxlbmd0aD8oSD10aGlzLGo9Qyk6KEg9QyxqPXRoaXMpO2Zvcih2YXIgRT0wLG09MDttPGoubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPTY3MTA4ODYzJihUPSgwfEgud29yZHNbbV0pKygwfGoud29yZHNbbV0pK0UpLEU9VD4+PjI2O2Zvcig7MCE9PUUmJm08SC5s''@;'; put 'put ''ZW5ndGg7bSsrKXRoaXMud29yZHNbbV09NjcxMDg4NjMmKFQ9KDB8SC53b3Jkc1ttXSkrRSksRT1UPj4+MjY7aWYodGhpcy5sZW5ndGg9SC5sZW5ndGgsMCE9PUUpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09RSx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoSCE9PXRoaXMpZm9yKDttPEgubGVuZ3Ro''@;'; put 'put ''O20rKyl0aGlzLndvcmRzW21dPUgud29yZHNbbV07cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihDKXt2YXIgVDtyZXR1cm4gMCE9PUMubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhDLm5lZ2F0aXZlPTAsVD10aGlzLnN1YihDKSxDLm5lZ2F0aXZlXj0xLFQpOjA9''@;'; put 'put ''PT1DLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLFQ9Qy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLFQpOnRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKEMpOkMuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1''@;'; put 'put ''bmN0aW9uKEMpe2lmKDAhPT1DLm5lZ2F0aXZlKXtDLm5lZ2F0aXZlPTA7dmFyIFQ9dGhpcy5pYWRkKEMpO3JldHVybiBDLm5lZ2F0aXZlPTEsVC5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChDKSx0aGlzLm5lZ2F0aXZl''@;'; put 'put ''PTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgaixFLEg9dGhpcy5jbXAoQyk7aWYoMD09PUgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO0g+MD8oaj10aGlzLEU9Qyk6KGo9QyxFPXRoaXMpO2Zvcih2YXIgbT0wLEE9MDtBPEUubGVuZ3Ro''@;'; put 'put ''O0ErKyltPShUPSgwfGoud29yZHNbQV0pLSgwfEUud29yZHNbQV0pK20pPj4yNix0aGlzLndvcmRzW0FdPTY3MTA4ODYzJlQ7Zm9yKDswIT09bSYmQTxqLmxlbmd0aDtBKyspbT0oVD0oMHxqLndvcmRzW0FdKSttKT4+MjYsdGhpcy53b3Jkc1tBXT02NzEwODg2MyZUO2lmKDA9PT1tJiZBPGou''@;'; put 'put ''bGVuZ3RoJiZqIT09dGhpcylmb3IoO0E8ai5sZW5ndGg7QSsrKXRoaXMud29yZHNbQV09ai53b3Jkc1tBXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsQSksaiE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1m''@;'; put 'put ''dW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoQyl9O3ZhciBKPWZ1bmN0aW9uKEMsVCxIKXt2YXIgYWUsbmUsc2Usaj1DLndvcmRzLEU9VC53b3JkcyxtPUgud29yZHMsQT0wLENlPTB8alswXSxVZT04MTkxJkNlLEplPUNlPj4+MTMsaXQ9MHxqWzFdLHhlPTgxOTEmaXQseWU9''@;'; put 'put ''aXQ+Pj4xMyxLZT0wfGpbMl0samU9ODE5MSZLZSxrZT1LZT4+PjEzLEhlPTB8alszXSxMZT04MTkxJkhlLFJlPUhlPj4+MTMsVmU9MHxqWzRdLEFlPTgxOTEmVmUsRGU9VmU+Pj4xMyxfdD0wfGpbNV0scnQ9ODE5MSZfdCxRZT1fdD4+PjEzLHNuPTB8als2XSx2dD04MTkxJnNuLFN0PXNuPj4+''@;'; put 'put ''MTMsZW49MHxqWzddLHV0PTgxOTEmZW4sWGU9ZW4+Pj4xMyx0dD0wfGpbOF0sSWU9ODE5MSZ0dCxhdD10dD4+PjEzLHVuPTB8als5XSxJdD04MTkxJnVuLFJ0PXVuPj4+MTMscmk9MHxFWzBdLGFuPTgxOTEmcmksbG49cmk+Pj4xMyxuaT0wfEVbMV0saG49ODE5MSZuaSxodD1uaT4+PjEzLFJy''@;'; put 'put ''PTB8RVsyXSxCdD04MTkxJlJyLEF0PVJyPj4+MTMsRm49MHxFWzNdLHN0PTgxOTEmRm4sWnQ9Rm4+Pj4xMyxRcj0wfEVbNF0sWWU9ODE5MSZRcixUdD1Rcj4+PjEzLHJyPTB8RVs1XSxmdD04MTkxJnJyLE10PXJyPj4+MTMsWm49MHxFWzZdLG5uPTgxOTEmWm4sV3Q9Wm4+Pj4xMyxkaT0wfEVb''@;'; put 'put ''N10sZG49ODE5MSZkaSxtbj1kaT4+PjEzLHBpPTB8RVs4XSxmbj04MTkxJnBpLHRuPXBpPj4+MTMsY2E9MHxFWzldLF9pPTgxOTEmY2EsdnI9Y2E+Pj4xMztILm5lZ2F0aXZlPUMubmVnYXRpdmVeVC5uZWdhdGl2ZSxILmxlbmd0aD0xOTt2YXIgWGk9KEErKGFlPU1hdGguaW11bChVZSxhbikp''@;'; put 'put ''fDApKygoODE5MSYobmU9KG5lPU1hdGguaW11bChVZSxsbikpK01hdGguaW11bChKZSxhbil8MCkpPDwxMyl8MDtBPSgoc2U9TWF0aC5pbXVsKEplLGxuKSkrKG5lPj4+MTMpfDApKyhYaT4+PjI2KXwwLFhpJj02NzEwODg2MyxhZT1NYXRoLmltdWwoeGUsYW4pLG5lPShuZT1NYXRoLmltdWwo''@;'; put 'put ''eGUsbG4pKStNYXRoLmltdWwoeWUsYW4pfDAsc2U9TWF0aC5pbXVsKHllLGxuKTt2YXIgUWk9KEErKGFlPWFlK01hdGguaW11bChVZSxobil8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVlLGh0KXwwKStNYXRoLmltdWwoSmUsaG4pfDApKTw8MTMpfDA7QT0oKHNlPXNlK01h''@;'; put 'put ''dGguaW11bChKZSxodCl8MCkrKG5lPj4+MTMpfDApKyhRaT4+PjI2KXwwLFFpJj02NzEwODg2MyxhZT1NYXRoLmltdWwoamUsYW4pLG5lPShuZT1NYXRoLmltdWwoamUsbG4pKStNYXRoLmltdWwoa2UsYW4pfDAsc2U9TWF0aC5pbXVsKGtlLGxuKSxhZT1hZStNYXRoLmltdWwoeGUsaG4pfDAs''@;'; put 'put ''bmU9KG5lPW5lK01hdGguaW11bCh4ZSxodCl8MCkrTWF0aC5pbXVsKHllLGhuKXwwLHNlPXNlK01hdGguaW11bCh5ZSxodCl8MDt2YXIgVmk9KEErKGFlPWFlK01hdGguaW11bChVZSxCdCl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUs''@;'; put 'put ''QnQpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxBdCl8MCkrKG5lPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2MyxhZT1NYXRoLmltdWwoTGUsYW4pLG5lPShuZT1NYXRoLmltdWwoTGUsbG4pKStNYXRoLmltdWwoUmUsYW4pfDAsc2U9TWF0aC5pbXVsKFJlLGxu''@;'; put 'put ''KSxhZT1hZStNYXRoLmltdWwoamUsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChqZSxodCl8MCkrTWF0aC5pbXVsKGtlLGhuKXwwLHNlPXNlK01hdGguaW11bChrZSxodCl8MCxhZT1hZStNYXRoLmltdWwoeGUsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11bCh4ZSxBdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KHllLEJ0KXwwLHNlPXNlK01hdGguaW11bCh5ZSxBdCl8MDt2YXIgZWk9KEErKGFlPWFlK01hdGguaW11bChVZSxzdCl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVlLFp0KXwwKStNYXRoLmltdWwoSmUsc3QpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxa''@;'; put 'put ''dCl8MCkrKG5lPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxhZT1NYXRoLmltdWwoQWUsYW4pLG5lPShuZT1NYXRoLmltdWwoQWUsbG4pKStNYXRoLmltdWwoRGUsYW4pfDAsc2U9TWF0aC5pbXVsKERlLGxuKSxhZT1hZStNYXRoLmltdWwoTGUsaG4pfDAsbmU9KG5lPW5lK01h''@;'; put 'put ''dGguaW11bChMZSxodCl8MCkrTWF0aC5pbXVsKFJlLGhuKXwwLHNlPXNlK01hdGguaW11bChSZSxodCl8MCxhZT1hZStNYXRoLmltdWwoamUsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChqZSxBdCl8MCkrTWF0aC5pbXVsKGtlLEJ0KXwwLHNlPXNlK01hdGguaW11bChrZSxBdCl8MCxhZT1h''@;'; put 'put ''ZStNYXRoLmltdWwoeGUsc3QpfDAsbmU9KG5lPW5lK01hdGguaW11bCh4ZSxadCl8MCkrTWF0aC5pbXVsKHllLHN0KXwwLHNlPXNlK01hdGguaW11bCh5ZSxadCl8MDt2YXIgdWE9KEErKGFlPWFlK01hdGguaW11bChVZSxZZSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVl''@;'; put 'put ''LFR0KXwwKStNYXRoLmltdWwoSmUsWWUpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxUdCl8MCkrKG5lPj4+MTMpfDApKyh1YT4+PjI2KXwwLHVhJj02NzEwODg2MyxhZT1NYXRoLmltdWwocnQsYW4pLG5lPShuZT1NYXRoLmltdWwocnQsbG4pKStNYXRoLmltdWwoUWUsYW4p''@;'; put 'put ''fDAsc2U9TWF0aC5pbXVsKFFlLGxuKSxhZT1hZStNYXRoLmltdWwoQWUsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxodCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLHNlPXNlK01hdGguaW11bChEZSxodCl8MCxhZT1hZStNYXRoLmltdWwoTGUsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11''@;'; put 'put ''bChMZSxBdCl8MCkrTWF0aC5pbXVsKFJlLEJ0KXwwLHNlPXNlK01hdGguaW11bChSZSxBdCl8MCxhZT1hZStNYXRoLmltdWwoamUsc3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChqZSxadCl8MCkrTWF0aC5pbXVsKGtlLHN0KXwwLHNlPXNlK01hdGguaW11bChrZSxadCl8MCxhZT1hZStNYXRo''@;'; put 'put ''LmltdWwoeGUsWWUpfDAsbmU9KG5lPW5lK01hdGguaW11bCh4ZSxUdCl8MCkrTWF0aC5pbXVsKHllLFllKXwwLHNlPXNlK01hdGguaW11bCh5ZSxUdCl8MDt2YXIgUmk9KEErKGFlPWFlK01hdGguaW11bChVZSxmdCl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVlLE10KXww''@;'; put 'put ''KStNYXRoLmltdWwoSmUsZnQpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxNdCl8MCkrKG5lPj4+MTMpfDApKyhSaT4+PjI2KXwwLFJpJj02NzEwODg2MyxhZT1NYXRoLmltdWwodnQsYW4pLG5lPShuZT1NYXRoLmltdWwodnQsbG4pKStNYXRoLmltdWwoU3QsYW4pfDAsc2U9''@;'; put 'put ''TWF0aC5pbXVsKFN0LGxuKSxhZT1hZStNYXRoLmltdWwocnQsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChydCxodCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLHNlPXNlK01hdGguaW11bChRZSxodCl8MCxhZT1hZStNYXRoLmltdWwoQWUsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxB''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKERlLEJ0KXwwLHNlPXNlK01hdGguaW11bChEZSxBdCl8MCxhZT1hZStNYXRoLmltdWwoTGUsc3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChMZSxadCl8MCkrTWF0aC5pbXVsKFJlLHN0KXwwLHNlPXNlK01hdGguaW11bChSZSxadCl8MCxhZT1hZStNYXRoLmltdWwo''@;'; put 'put ''amUsWWUpfDAsbmU9KG5lPW5lK01hdGguaW11bChqZSxUdCl8MCkrTWF0aC5pbXVsKGtlLFllKXwwLHNlPXNlK01hdGguaW11bChrZSxUdCl8MCxhZT1hZStNYXRoLmltdWwoeGUsZnQpfDAsbmU9KG5lPW5lK01hdGguaW11bCh4ZSxNdCl8MCkrTWF0aC5pbXVsKHllLGZ0KXwwLHNlPXNlK01h''@;'; put 'put ''dGguaW11bCh5ZSxNdCl8MDt2YXIgRGE9KEErKGFlPWFlK01hdGguaW11bChVZSxubil8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVlLFd0KXwwKStNYXRoLmltdWwoSmUsbm4pfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxXdCl8MCkrKG5lPj4+MTMpfDAp''@;'; put 'put ''KyhEYT4+PjI2KXwwLERhJj02NzEwODg2MyxhZT1NYXRoLmltdWwodXQsYW4pLG5lPShuZT1NYXRoLmltdWwodXQsbG4pKStNYXRoLmltdWwoWGUsYW4pfDAsc2U9TWF0aC5pbXVsKFhlLGxuKSxhZT1hZStNYXRoLmltdWwodnQsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh2dCxodCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKFN0LGhuKXwwLHNlPXNlK01hdGguaW11bChTdCxodCl8MCxhZT1hZStNYXRoLmltdWwocnQsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChydCxBdCl8MCkrTWF0aC5pbXVsKFFlLEJ0KXwwLHNlPXNlK01hdGguaW11bChRZSxBdCl8MCxhZT1hZStNYXRoLmltdWwoQWUsc3Qp''@;'; put 'put ''fDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxadCl8MCkrTWF0aC5pbXVsKERlLHN0KXwwLHNlPXNlK01hdGguaW11bChEZSxadCl8MCxhZT1hZStNYXRoLmltdWwoTGUsWWUpfDAsbmU9KG5lPW5lK01hdGguaW11bChMZSxUdCl8MCkrTWF0aC5pbXVsKFJlLFllKXwwLHNlPXNlK01hdGguaW11''@;'; put 'put ''bChSZSxUdCl8MCxhZT1hZStNYXRoLmltdWwoamUsZnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChqZSxNdCl8MCkrTWF0aC5pbXVsKGtlLGZ0KXwwLHNlPXNlK01hdGguaW11bChrZSxNdCl8MCxhZT1hZStNYXRoLmltdWwoeGUsbm4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh4ZSxXdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKHllLG5uKXwwLHNlPXNlK01hdGguaW11bCh5ZSxXdCl8MDt2YXIgaGk9KEErKGFlPWFlK01hdGguaW11bChVZSxkbil8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVlLG1uKXwwKStNYXRoLmltdWwoSmUsZG4pfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGgu''@;'; put 'put ''aW11bChKZSxtbil8MCkrKG5lPj4+MTMpfDApKyhoaT4+PjI2KXwwLGhpJj02NzEwODg2MyxhZT1NYXRoLmltdWwoSWUsYW4pLG5lPShuZT1NYXRoLmltdWwoSWUsbG4pKStNYXRoLmltdWwoYXQsYW4pfDAsc2U9TWF0aC5pbXVsKGF0LGxuKSxhZT1hZStNYXRoLmltdWwodXQsaG4pfDAsbmU9''@;'; put 'put ''KG5lPW5lK01hdGguaW11bCh1dCxodCl8MCkrTWF0aC5pbXVsKFhlLGhuKXwwLHNlPXNlK01hdGguaW11bChYZSxodCl8MCxhZT1hZStNYXRoLmltdWwodnQsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11bCh2dCxBdCl8MCkrTWF0aC5pbXVsKFN0LEJ0KXwwLHNlPXNlK01hdGguaW11bChTdCxB''@;'; put 'put ''dCl8MCxhZT1hZStNYXRoLmltdWwocnQsc3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChydCxadCl8MCkrTWF0aC5pbXVsKFFlLHN0KXwwLHNlPXNlK01hdGguaW11bChRZSxadCl8MCxhZT1hZStNYXRoLmltdWwoQWUsWWUpfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxUdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKERlLFllKXwwLHNlPXNlK01hdGguaW11bChEZSxUdCl8MCxhZT1hZStNYXRoLmltdWwoTGUsZnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChMZSxNdCl8MCkrTWF0aC5pbXVsKFJlLGZ0KXwwLHNlPXNlK01hdGguaW11bChSZSxNdCl8MCxhZT1hZStNYXRoLmltdWwoamUsbm4pfDAsbmU9''@;'; put 'put ''KG5lPW5lK01hdGguaW11bChqZSxXdCl8MCkrTWF0aC5pbXVsKGtlLG5uKXwwLHNlPXNlK01hdGguaW11bChrZSxXdCl8MCxhZT1hZStNYXRoLmltdWwoeGUsZG4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh4ZSxtbil8MCkrTWF0aC5pbXVsKHllLGRuKXwwLHNlPXNlK01hdGguaW11bCh5ZSxt''@;'; put 'put ''bil8MDt2YXIgcWk9KEErKGFlPWFlK01hdGguaW11bChVZSxmbil8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVlLHRuKXwwKStNYXRoLmltdWwoSmUsZm4pfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSx0bil8MCkrKG5lPj4+MTMpfDApKyhxaT4+PjI2KXww''@;'; put 'put ''LHFpJj02NzEwODg2MyxhZT1NYXRoLmltdWwoSXQsYW4pLG5lPShuZT1NYXRoLmltdWwoSXQsbG4pKStNYXRoLmltdWwoUnQsYW4pfDAsc2U9TWF0aC5pbXVsKFJ0LGxuKSxhZT1hZStNYXRoLmltdWwoSWUsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChJZSxodCl8MCkrTWF0aC5pbXVsKGF0''@;'; put 'put ''LGhuKXwwLHNlPXNlK01hdGguaW11bChhdCxodCl8MCxhZT1hZStNYXRoLmltdWwodXQsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11bCh1dCxBdCl8MCkrTWF0aC5pbXVsKFhlLEJ0KXwwLHNlPXNlK01hdGguaW11bChYZSxBdCl8MCxhZT1hZStNYXRoLmltdWwodnQsc3QpfDAsbmU9KG5lPW5l''@;'; put 'put ''K01hdGguaW11bCh2dCxadCl8MCkrTWF0aC5pbXVsKFN0LHN0KXwwLHNlPXNlK01hdGguaW11bChTdCxadCl8MCxhZT1hZStNYXRoLmltdWwocnQsWWUpfDAsbmU9KG5lPW5lK01hdGguaW11bChydCxUdCl8MCkrTWF0aC5pbXVsKFFlLFllKXwwLHNlPXNlK01hdGguaW11bChRZSxUdCl8MCxh''@;'; put 'put ''ZT1hZStNYXRoLmltdWwoQWUsZnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxNdCl8MCkrTWF0aC5pbXVsKERlLGZ0KXwwLHNlPXNlK01hdGguaW11bChEZSxNdCl8MCxhZT1hZStNYXRoLmltdWwoTGUsbm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChMZSxXdCl8MCkrTWF0aC5pbXVsKFJl''@;'; put 'put ''LG5uKXwwLHNlPXNlK01hdGguaW11bChSZSxXdCl8MCxhZT1hZStNYXRoLmltdWwoamUsZG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChqZSxtbil8MCkrTWF0aC5pbXVsKGtlLGRuKXwwLHNlPXNlK01hdGguaW11bChrZSxtbil8MCxhZT1hZStNYXRoLmltdWwoeGUsZm4pfDAsbmU9KG5lPW5l''@;'; put 'put ''K01hdGguaW11bCh4ZSx0bil8MCkrTWF0aC5pbXVsKHllLGZuKXwwLHNlPXNlK01hdGguaW11bCh5ZSx0bil8MDt2YXIgUGE9KEErKGFlPWFlK01hdGguaW11bChVZSxfaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVlLHZyKXwwKStNYXRoLmltdWwoSmUsX2kpfDApKTw8''@;'; put 'put ''MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSx2cil8MCkrKG5lPj4+MTMpfDApKyhQYT4+PjI2KXwwLFBhJj02NzEwODg2MyxhZT1NYXRoLmltdWwoSXQsaG4pLG5lPShuZT1NYXRoLmltdWwoSXQsaHQpKStNYXRoLmltdWwoUnQsaG4pfDAsc2U9TWF0aC5pbXVsKFJ0LGh0KSxhZT1hZStN''@;'; put 'put ''YXRoLmltdWwoSWUsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChJZSxBdCl8MCkrTWF0aC5pbXVsKGF0LEJ0KXwwLHNlPXNlK01hdGguaW11bChhdCxBdCl8MCxhZT1hZStNYXRoLmltdWwodXQsc3QpfDAsbmU9KG5lPW5lK01hdGguaW11bCh1dCxadCl8MCkrTWF0aC5pbXVsKFhlLHN0KXww''@;'; put 'put ''LHNlPXNlK01hdGguaW11bChYZSxadCl8MCxhZT1hZStNYXRoLmltdWwodnQsWWUpfDAsbmU9KG5lPW5lK01hdGguaW11bCh2dCxUdCl8MCkrTWF0aC5pbXVsKFN0LFllKXwwLHNlPXNlK01hdGguaW11bChTdCxUdCl8MCxhZT1hZStNYXRoLmltdWwocnQsZnQpfDAsbmU9KG5lPW5lK01hdGgu''@;'; put 'put ''aW11bChydCxNdCl8MCkrTWF0aC5pbXVsKFFlLGZ0KXwwLHNlPXNlK01hdGguaW11bChRZSxNdCl8MCxhZT1hZStNYXRoLmltdWwoQWUsbm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxXdCl8MCkrTWF0aC5pbXVsKERlLG5uKXwwLHNlPXNlK01hdGguaW11bChEZSxXdCl8MCxhZT1hZStN''@;'; put 'put ''YXRoLmltdWwoTGUsZG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChMZSxtbil8MCkrTWF0aC5pbXVsKFJlLGRuKXwwLHNlPXNlK01hdGguaW11bChSZSxtbil8MCxhZT1hZStNYXRoLmltdWwoamUsZm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChqZSx0bil8MCkrTWF0aC5pbXVsKGtlLGZuKXww''@;'; put 'put ''LHNlPXNlK01hdGguaW11bChrZSx0bil8MDt2YXIgdXI9KEErKGFlPWFlK01hdGguaW11bCh4ZSxfaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKHhlLHZyKXwwKStNYXRoLmltdWwoeWUsX2kpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bCh5ZSx2cil8MCkrKG5l''@;'; put 'put ''Pj4+MTMpfDApKyh1cj4+PjI2KXwwLHVyJj02NzEwODg2MyxhZT1NYXRoLmltdWwoSXQsQnQpLG5lPShuZT1NYXRoLmltdWwoSXQsQXQpKStNYXRoLmltdWwoUnQsQnQpfDAsc2U9TWF0aC5pbXVsKFJ0LEF0KSxhZT1hZStNYXRoLmltdWwoSWUsc3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChJ''@;'; put 'put ''ZSxadCl8MCkrTWF0aC5pbXVsKGF0LHN0KXwwLHNlPXNlK01hdGguaW11bChhdCxadCl8MCxhZT1hZStNYXRoLmltdWwodXQsWWUpfDAsbmU9KG5lPW5lK01hdGguaW11bCh1dCxUdCl8MCkrTWF0aC5pbXVsKFhlLFllKXwwLHNlPXNlK01hdGguaW11bChYZSxUdCl8MCxhZT1hZStNYXRoLmlt''@;'; put 'put ''dWwodnQsZnQpfDAsbmU9KG5lPW5lK01hdGguaW11bCh2dCxNdCl8MCkrTWF0aC5pbXVsKFN0LGZ0KXwwLHNlPXNlK01hdGguaW11bChTdCxNdCl8MCxhZT1hZStNYXRoLmltdWwocnQsbm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChydCxXdCl8MCkrTWF0aC5pbXVsKFFlLG5uKXwwLHNlPXNl''@;'; put 'put ''K01hdGguaW11bChRZSxXdCl8MCxhZT1hZStNYXRoLmltdWwoQWUsZG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxtbil8MCkrTWF0aC5pbXVsKERlLGRuKXwwLHNlPXNlK01hdGguaW11bChEZSxtbil8MCxhZT1hZStNYXRoLmltdWwoTGUsZm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChM''@;'; put 'put ''ZSx0bil8MCkrTWF0aC5pbXVsKFJlLGZuKXwwLHNlPXNlK01hdGguaW11bChSZSx0bil8MDt2YXIgYmE9KEErKGFlPWFlK01hdGguaW11bChqZSxfaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKGplLHZyKXwwKStNYXRoLmltdWwoa2UsX2kpfDApKTw8MTMpfDA7QT0oKHNl''@;'; put 'put ''PXNlK01hdGguaW11bChrZSx2cil8MCkrKG5lPj4+MTMpfDApKyhiYT4+PjI2KXwwLGJhJj02NzEwODg2MyxhZT1NYXRoLmltdWwoSXQsc3QpLG5lPShuZT1NYXRoLmltdWwoSXQsWnQpKStNYXRoLmltdWwoUnQsc3QpfDAsc2U9TWF0aC5pbXVsKFJ0LFp0KSxhZT1hZStNYXRoLmltdWwoSWUs''@;'; put 'put ''WWUpfDAsbmU9KG5lPW5lK01hdGguaW11bChJZSxUdCl8MCkrTWF0aC5pbXVsKGF0LFllKXwwLHNlPXNlK01hdGguaW11bChhdCxUdCl8MCxhZT1hZStNYXRoLmltdWwodXQsZnQpfDAsbmU9KG5lPW5lK01hdGguaW11bCh1dCxNdCl8MCkrTWF0aC5pbXVsKFhlLGZ0KXwwLHNlPXNlK01hdGgu''@;'; put 'put ''aW11bChYZSxNdCl8MCxhZT1hZStNYXRoLmltdWwodnQsbm4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh2dCxXdCl8MCkrTWF0aC5pbXVsKFN0LG5uKXwwLHNlPXNlK01hdGguaW11bChTdCxXdCl8MCxhZT1hZStNYXRoLmltdWwocnQsZG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChydCxtbil8''@;'; put 'put ''MCkrTWF0aC5pbXVsKFFlLGRuKXwwLHNlPXNlK01hdGguaW11bChRZSxtbil8MCxhZT1hZStNYXRoLmltdWwoQWUsZm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSx0bil8MCkrTWF0aC5pbXVsKERlLGZuKXwwLHNlPXNlK01hdGguaW11bChEZSx0bil8MDt2YXIgTWk9KEErKGFlPWFlK01h''@;'; put 'put ''dGguaW11bChMZSxfaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKExlLHZyKXwwKStNYXRoLmltdWwoUmUsX2kpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChSZSx2cil8MCkrKG5lPj4+MTMpfDApKyhNaT4+PjI2KXwwLE1pJj02NzEwODg2MyxhZT1NYXRoLmlt''@;'; put 'put ''dWwoSXQsWWUpLG5lPShuZT1NYXRoLmltdWwoSXQsVHQpKStNYXRoLmltdWwoUnQsWWUpfDAsc2U9TWF0aC5pbXVsKFJ0LFR0KSxhZT1hZStNYXRoLmltdWwoSWUsZnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChJZSxNdCl8MCkrTWF0aC5pbXVsKGF0LGZ0KXwwLHNlPXNlK01hdGguaW11bChh''@;'; put 'put ''dCxNdCl8MCxhZT1hZStNYXRoLmltdWwodXQsbm4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh1dCxXdCl8MCkrTWF0aC5pbXVsKFhlLG5uKXwwLHNlPXNlK01hdGguaW11bChYZSxXdCl8MCxhZT1hZStNYXRoLmltdWwodnQsZG4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh2dCxtbil8MCkrTWF0''@;'; put 'put ''aC5pbXVsKFN0LGRuKXwwLHNlPXNlK01hdGguaW11bChTdCxtbil8MCxhZT1hZStNYXRoLmltdWwocnQsZm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChydCx0bil8MCkrTWF0aC5pbXVsKFFlLGZuKXwwLHNlPXNlK01hdGguaW11bChRZSx0bil8MDt2YXIgd2E9KEErKGFlPWFlK01hdGguaW11''@;'; put 'put ''bChBZSxfaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKEFlLHZyKXwwKStNYXRoLmltdWwoRGUsX2kpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChEZSx2cil8MCkrKG5lPj4+MTMpfDApKyh3YT4+PjI2KXwwLHdhJj02NzEwODg2MyxhZT1NYXRoLmltdWwoSXQs''@;'; put 'put ''ZnQpLG5lPShuZT1NYXRoLmltdWwoSXQsTXQpKStNYXRoLmltdWwoUnQsZnQpfDAsc2U9TWF0aC5pbXVsKFJ0LE10KSxhZT1hZStNYXRoLmltdWwoSWUsbm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChJZSxXdCl8MCkrTWF0aC5pbXVsKGF0LG5uKXwwLHNlPXNlK01hdGguaW11bChhdCxXdCl8''@;'; put 'put ''MCxhZT1hZStNYXRoLmltdWwodXQsZG4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh1dCxtbil8MCkrTWF0aC5pbXVsKFhlLGRuKXwwLHNlPXNlK01hdGguaW11bChYZSxtbil8MCxhZT1hZStNYXRoLmltdWwodnQsZm4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh2dCx0bil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KFN0LGZuKXwwLHNlPXNlK01hdGguaW11bChTdCx0bil8MDt2YXIgZWE9KEErKGFlPWFlK01hdGguaW11bChydCxfaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKHJ0LHZyKXwwKStNYXRoLmltdWwoUWUsX2kpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChRZSx2''@;'; put 'put ''cil8MCkrKG5lPj4+MTMpfDApKyhlYT4+PjI2KXwwLGVhJj02NzEwODg2MyxhZT1NYXRoLmltdWwoSXQsbm4pLG5lPShuZT1NYXRoLmltdWwoSXQsV3QpKStNYXRoLmltdWwoUnQsbm4pfDAsc2U9TWF0aC5pbXVsKFJ0LFd0KSxhZT1hZStNYXRoLmltdWwoSWUsZG4pfDAsbmU9KG5lPW5lK01h''@;'; put 'put ''dGguaW11bChJZSxtbil8MCkrTWF0aC5pbXVsKGF0LGRuKXwwLHNlPXNlK01hdGguaW11bChhdCxtbil8MCxhZT1hZStNYXRoLmltdWwodXQsZm4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh1dCx0bil8MCkrTWF0aC5pbXVsKFhlLGZuKXwwLHNlPXNlK01hdGguaW11bChYZSx0bil8MDt2YXIg''@;'; put 'put ''RnI9KEErKGFlPWFlK01hdGguaW11bCh2dCxfaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKHZ0LHZyKXwwKStNYXRoLmltdWwoU3QsX2kpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChTdCx2cil8MCkrKG5lPj4+MTMpfDApKyhGcj4+PjI2KXwwLEZyJj02NzEw''@;'; put 'put ''ODg2MyxhZT1NYXRoLmltdWwoSXQsZG4pLG5lPShuZT1NYXRoLmltdWwoSXQsbW4pKStNYXRoLmltdWwoUnQsZG4pfDAsc2U9TWF0aC5pbXVsKFJ0LG1uKSxhZT1hZStNYXRoLmltdWwoSWUsZm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChJZSx0bil8MCkrTWF0aC5pbXVsKGF0LGZuKXwwLHNl''@;'; put 'put ''PXNlK01hdGguaW11bChhdCx0bil8MDt2YXIgY289KEErKGFlPWFlK01hdGguaW11bCh1dCxfaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKHV0LHZyKXwwKStNYXRoLmltdWwoWGUsX2kpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChYZSx2cil8MCkrKG5lPj4+''@;'; put 'put ''MTMpfDApKyhjbz4+PjI2KXwwLGNvJj02NzEwODg2MyxhZT1NYXRoLmltdWwoSXQsZm4pLG5lPShuZT1NYXRoLmltdWwoSXQsdG4pKStNYXRoLmltdWwoUnQsZm4pfDAsc2U9TWF0aC5pbXVsKFJ0LHRuKTt2YXIgWWE9KEErKGFlPWFlK01hdGguaW11bChJZSxfaSl8MCl8MCkrKCg4MTkxJihu''@;'; put 'put ''ZT0obmU9bmUrTWF0aC5pbXVsKEllLHZyKXwwKStNYXRoLmltdWwoYXQsX2kpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChhdCx2cil8MCkrKG5lPj4+MTMpfDApKyhZYT4+PjI2KXwwLFlhJj02NzEwODg2Mzt2YXIgJGM9KEErKGFlPU1hdGguaW11bChJdCxfaSkpfDApKygoODE5''@;'; put 'put ''MSYobmU9KG5lPU1hdGguaW11bChJdCx2cikpK01hdGguaW11bChSdCxfaSl8MCkpPDwxMyl8MDtyZXR1cm4gQT0oKHNlPU1hdGguaW11bChSdCx2cikpKyhuZT4+PjEzKXwwKSsoJGM+Pj4yNil8MCwkYyY9NjcxMDg4NjMsbVswXT1YaSxtWzFdPVFpLG1bMl09VmksbVszXT1laSxtWzRdPXVh''@;'; put 'put ''LG1bNV09UmksbVs2XT1EYSxtWzddPWhpLG1bOF09cWksbVs5XT1QYSxtWzEwXT11cixtWzExXT1iYSxtWzEyXT1NaSxtWzEzXT13YSxtWzE0XT1lYSxtWzE1XT1GcixtWzE2XT1jbyxtWzE3XT1ZYSxtWzE4XT0kYywwIT09QSYmKG1bMTldPUEsSC5sZW5ndGgrKyksSH07ZnVuY3Rpb24gcmUo''@;'; put 'put ''eCxDLFQpe1QubmVnYXRpdmU9Qy5uZWdhdGl2ZV54Lm5lZ2F0aXZlLFQubGVuZ3RoPXgubGVuZ3RoK0MubGVuZ3RoO2Zvcih2YXIgSD0wLGo9MCxFPTA7RTxULmxlbmd0aC0xO0UrKyl7dmFyIG09ajtqPTA7Zm9yKHZhciBBPTY3MTA4ODYzJkgsYWU9TWF0aC5taW4oRSxDLmxlbmd0aC0xKSxu''@;'; put 'put ''ZT1NYXRoLm1heCgwLEUteC5sZW5ndGgrMSk7bmU8PWFlO25lKyspe3ZhciBKZT0oMHx4LndvcmRzW0UtbmVdKSooMHxDLndvcmRzW25lXSksaXQ9NjcxMDg4NjMmSmU7QT02NzEwODg2MyYoaXQ9aXQrQXwwKSxqKz0obT0obT1tKyhKZS82NzEwODg2NHwwKXwwKSsoaXQ+Pj4yNil8MCk+Pj4y''@;'; put 'put ''NixtJj02NzEwODg2M31ULndvcmRzW0VdPUEsSD1tLG09an1yZXR1cm4gMCE9PUg/VC53b3Jkc1tFXT1IOlQubGVuZ3RoLS0sVC5fc3RyaXAoKX1mdW5jdGlvbiBpZSh4LEMsVCl7cmV0dXJuIHJlKHgsQyxUKX1mdW5jdGlvbiB1ZSh4LEMpe3RoaXMueD14LHRoaXMueT1DfU1hdGguaW11bHx8''@;'; put 'put ''KEo9ZWUpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKEMsVCl7dmFyIGo9dGhpcy5sZW5ndGgrQy5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09Qy5sZW5ndGg/Sih0aGlzLEMsVCk6ajw2Mz9lZSh0aGlzLEMsVCk6ajwxMDI0P3JlKHRoaXMsQyxUKTppZSh0aGlzLEMs''@;'; put 'put ''VCl9LHVlLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKEMpe2Zvcih2YXIgVD1uZXcgQXJyYXkoQyksSD13LnByb3RvdHlwZS5fY291bnRCaXRzKEMpLTEsaj0wO2o8QztqKyspVFtqXT10aGlzLnJldkJpbihqLEgsQyk7cmV0dXJuIFR9LHVlLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24o''@;'; put 'put ''QyxULEgpe2lmKDA9PT1DfHxDPT09SC0xKXJldHVybiBDO2Zvcih2YXIgaj0wLEU9MDtFPFQ7RSsrKWp8PSgxJkMpPDxULUUtMSxDPj49MTtyZXR1cm4gan0sdWUucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oQyxULEgsaixFLG0pe2Zvcih2YXIgQT0wO0E8bTtBKyspaltBXT1UW0NbQV1d''@;'; put 'put ''LEVbQV09SFtDW0FdXX0sdWUucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihDLFQsSCxqLEUsbSl7dGhpcy5wZXJtdXRlKG0sQyxULEgsaixFKTtmb3IodmFyIEE9MTtBPEU7QTw8PTEpZm9yKHZhciBhZT1BPDwxLG5lPU1hdGguY29zKDIqTWF0aC5QSS9hZSksc2U9TWF0aC5zaW4oMipN''@;'; put 'put ''YXRoLlBJL2FlKSxDZT0wO0NlPEU7Q2UrPWFlKWZvcih2YXIgVWU9bmUsSmU9c2UsaXQ9MDtpdDxBO2l0Kyspe3ZhciB4ZT1IW0NlK2l0XSx5ZT1qW0NlK2l0XSxLZT1IW0NlK2l0K0FdLGplPWpbQ2UraXQrQV0sa2U9VWUqS2UtSmUqamU7amU9VWUqamUrSmUqS2UsSFtDZStpdF09eGUrKEtl''@;'; put 'put ''PWtlKSxqW0NlK2l0XT15ZStqZSxIW0NlK2l0K0FdPXhlLUtlLGpbQ2UraXQrQV09eWUtamUsaXQhPT1hZSYmKGtlPW5lKlVlLXNlKkplLEplPW5lKkplK3NlKlVlLFVlPWtlKX19LHVlLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihDLFQpe3ZhciBIPTF8TWF0aC5tYXgoVCxDKSxq''@;'; put 'put ''PTEmSCxFPTA7Zm9yKEg9SC8yfDA7SDtIPj4+PTEpRSsrO3JldHVybiAxPDxFKzEran0sdWUucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihDLFQsSCl7aWYoIShIPD0xKSlmb3IodmFyIGo9MDtqPEgvMjtqKyspe3ZhciBFPUNbal07Q1tqXT1DW0gtai0xXSxDW0gtai0xXT1FLEU9VFtq''@;'; put 'put ''XSxUW2pdPS1UW0gtai0xXSxUW0gtai0xXT0tRX19LHVlLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oQyxUKXtmb3IodmFyIEg9MCxqPTA7ajxULzI7aisrKXt2YXIgRT04MTkyKk1hdGgucm91bmQoQ1syKmorMV0vVCkrTWF0aC5yb3VuZChDWzIqal0vVCkrSDtDW2pdPTY3MTA4''@;'; put 'put ''ODYzJkUsSD1FPDY3MTA4ODY0PzA6RS82NzEwODg2NHwwfXJldHVybiBDfSx1ZS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihDLFQsSCxqKXtmb3IodmFyIEU9MCxtPTA7bTxUO20rKylIWzIqbV09ODE5MSYoRSs9MHxDW21dKSxIWzIqbSsxXT04MTkxJihFPj4+PTEzKSxFPj4+PTEz''@;'; put 'put ''O2ZvcihtPTIqVDttPGo7KyttKUhbbV09MDtwKDA9PT1FKSxwKCEoLTgxOTImRSkpfSx1ZS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihDKXtmb3IodmFyIFQ9bmV3IEFycmF5KEMpLEg9MDtIPEM7SCsrKVRbSF09MDtyZXR1cm4gVH0sdWUucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oQyxULEgp''@;'; put 'put ''e3ZhciBqPTIqdGhpcy5ndWVzc0xlbjEzYihDLmxlbmd0aCxULmxlbmd0aCksRT10aGlzLm1ha2VSQlQoaiksbT10aGlzLnN0dWIoaiksQT1uZXcgQXJyYXkoaiksYWU9bmV3IEFycmF5KGopLG5lPW5ldyBBcnJheShqKSxzZT1uZXcgQXJyYXkoaiksQ2U9bmV3IEFycmF5KGopLFVlPW5ldyBB''@;'; put 'put ''cnJheShqKSxKZT1ILndvcmRzO0plLmxlbmd0aD1qLHRoaXMuY29udmVydDEzYihDLndvcmRzLEMubGVuZ3RoLEEsaiksdGhpcy5jb252ZXJ0MTNiKFQud29yZHMsVC5sZW5ndGgsc2UsaiksdGhpcy50cmFuc2Zvcm0oQSxtLGFlLG5lLGosRSksdGhpcy50cmFuc2Zvcm0oc2UsbSxDZSxVZSxq''@;'; put 'put ''LEUpO2Zvcih2YXIgaXQ9MDtpdDxqO2l0Kyspe3ZhciB4ZT1hZVtpdF0qQ2VbaXRdLW5lW2l0XSpVZVtpdF07bmVbaXRdPWFlW2l0XSpVZVtpdF0rbmVbaXRdKkNlW2l0XSxhZVtpdF09eGV9cmV0dXJuIHRoaXMuY29uanVnYXRlKGFlLG5lLGopLHRoaXMudHJhbnNmb3JtKGFlLG5lLEplLG0s''@;'; put 'put ''aixFKSx0aGlzLmNvbmp1Z2F0ZShKZSxtLGopLHRoaXMubm9ybWFsaXplMTNiKEplLGopLEgubmVnYXRpdmU9Qy5uZWdhdGl2ZV5ULm5lZ2F0aXZlLEgubGVuZ3RoPUMubGVuZ3RoK1QubGVuZ3RoLEguX3N0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihDKXt2YXIgVD1uZXcgdyhu''@;'; put 'put ''dWxsKTtyZXR1cm4gVC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrQy5sZW5ndGgpLHRoaXMubXVsVG8oQyxUKX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihDKXt2YXIgVD1uZXcgdyhudWxsKTtyZXR1cm4gVC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrQy5sZW5ndGgpLGll''@;'; put 'put ''KHRoaXMsQyxUKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKEMsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKEMpe3ZhciBUPUM8MDtUJiYoQz0tQykscCgibnVtYmVyIj09dHlwZW9mIEMpLHAoQzw2NzEwODg2NCk7Zm9y''@;'; put 'put ''KHZhciBIPTAsaj0wO2o8dGhpcy5sZW5ndGg7aisrKXt2YXIgRT0oMHx0aGlzLndvcmRzW2pdKSpDLG09KDY3MTA4ODYzJkUpKyg2NzEwODg2MyZIKTtIPj49MjYsSCs9RS82NzEwODg2NHwwLEgrPW0+Pj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJm19cmV0dXJuIDAhPT1IJiYodGhpcy53''@;'; put 'put ''b3Jkc1tqXT1ILHRoaXMubGVuZ3RoKyspLHRoaXMubGVuZ3RoPTA9PT1DPzE6dGhpcy5sZW5ndGgsVD90aGlzLmluZWcoKTp0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oQyl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKEMpe3ZhciBUPWZ1bmN0aW9uIHEoeCl7Zm9yKHZhciBDPW5ldyBBcnJheSh4LmJpdExlbmd0aCgpKSxU''@;'; put 'put ''PTA7VDxDLmxlbmd0aDtUKyspQ1tUXT14LndvcmRzW1QvMjZ8MF0+Pj5UJTI2JjE7cmV0dXJuIEN9KEMpO2lmKDA9PT1ULmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciBIPXRoaXMsaj0wO2o8VC5sZW5ndGgmJjA9PT1UW2pdO2orKyxIPUguc3FyKCkpO2lmKCsrajxULmxlbmd0aClm''@;'; put 'put ''b3IodmFyIEU9SC5zcXIoKTtqPFQubGVuZ3RoO2orKyxFPUUuc3FyKCkpMCE9PVRbal0mJihIPUgubXVsKEUpKTtyZXR1cm4gSH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKEMpe3AoIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKTt2YXIgRSxUPUMlMjYsSD0oQy1UKS8yNixqPTY3MTA4''@;'; put 'put ''ODYzPj4+MjYtVDw8MjYtVDtpZigwIT09VCl7dmFyIG09MDtmb3IoRT0wO0U8dGhpcy5sZW5ndGg7RSsrKXt2YXIgQT10aGlzLndvcmRzW0VdJmo7dGhpcy53b3Jkc1tFXT0oMHx0aGlzLndvcmRzW0VdKS1BPDxUfG0sbT1BPj4+MjYtVH1tJiYodGhpcy53b3Jkc1tFXT1tLHRoaXMubGVuZ3Ro''@;'; put 'put ''KyspfWlmKDAhPT1IKXtmb3IoRT10aGlzLmxlbmd0aC0xO0U+PTA7RS0tKXRoaXMud29yZHNbRStIXT10aGlzLndvcmRzW0VdO2ZvcihFPTA7RTxIO0UrKyl0aGlzLndvcmRzW0VdPTA7dGhpcy5sZW5ndGgrPUh9cmV0dXJuIHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmlzaGxuPWZ1bmN0''@;'; put 'put ''aW9uKEMpe3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihDKX0sdy5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKEMsVCxIKXt2YXIgajtwKCJudW1iZXIiPT10eXBlb2YgQyYmQz49MCksaj1UPyhULVQlMjYpLzI2OjA7dmFyIEU9QyUyNixtPU1hdGgubWluKChDLUUp''@;'; put 'put ''LzI2LHRoaXMubGVuZ3RoKSxBPTY3MTA4ODYzXjY3MTA4ODYzPj4+RTw8RSxhZT1IO2lmKGotPW0saj1NYXRoLm1heCgwLGopLGFlKXtmb3IodmFyIG5lPTA7bmU8bTtuZSsrKWFlLndvcmRzW25lXT10aGlzLndvcmRzW25lXTthZS5sZW5ndGg9bX1pZigwIT09bSlpZih0aGlzLmxlbmd0aD5t''@;'; put 'put ''KWZvcih0aGlzLmxlbmd0aC09bSxuZT0wO25lPHRoaXMubGVuZ3RoO25lKyspdGhpcy53b3Jkc1tuZV09dGhpcy53b3Jkc1tuZSttXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBzZT0wO2ZvcihuZT10aGlzLmxlbmd0aC0xO25lPj0wJiYoMCE9PXNlfHxuZT49aik7''@;'; put 'put ''bmUtLSl7dmFyIENlPTB8dGhpcy53b3Jkc1tuZV07dGhpcy53b3Jkc1tuZV09c2U8PDI2LUV8Q2U+Pj5FLHNlPUNlJkF9cmV0dXJuIGFlJiYwIT09c2UmJihhZS53b3Jkc1thZS5sZW5ndGgrK109c2UpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0''@;'; put 'put ''aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihDLFQsSCl7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKEMsVCxIKX0sdy5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKEMpfSx3LnByb3RvdHlw''@;'; put 'put ''ZS51c2hsbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihDKX0sdy5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKEMpfSx3LnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hy''@;'; put 'put ''bihDKX0sdy5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oQyl7cCgibnVtYmVyIj09dHlwZW9mIEMmJkM+PTApO3ZhciBUPUMlMjYsSD0oQy1UKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD1IfHwhKHRoaXMud29yZHNbSF0mMTw8VCkpfSx3LnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oQyl7''@;'; put 'put ''cCgibnVtYmVyIj09dHlwZW9mIEMmJkM+PTApO3ZhciBUPUMlMjYsSD0oQy1UKS8yNjtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PUg/dGhpczooMCE9PVQmJkgrKyx0aGlzLmxlbmd0aD1N''@;'; put 'put ''YXRoLm1pbihILHRoaXMubGVuZ3RoKSwwIT09VCYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+VDw8VCksdGhpcy5fc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKEMpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5pYWRkbj1mdW5jdGlvbihDKXtyZXR1cm4gcCgibnVtYmVyIj09dHlwZW9mIEMpLHAoQzw2NzEwODg2NCksQzwwP3RoaXMuaXN1Ym4oLUMpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8PUM/KHRoaXMud29yZHNbMF09Qy0oMHx0''@;'; put 'put ''aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKEMpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihDKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKEMpe3RoaXMud29yZHNbMF0rPUM7Zm9yKHZhciBUPTA7''@;'; put 'put ''VDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tUXT49NjcxMDg4NjQ7VCsrKXRoaXMud29yZHNbVF0tPTY3MTA4ODY0LFQ9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbVCsxXT0xOnRoaXMud29yZHNbVCsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxUKzEp''@;'; put 'put ''LHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKEMpe2lmKHAoIm51bWJlciI9PXR5cGVvZiBDKSxwKEM8NjcxMDg4NjQpLEM8MClyZXR1cm4gdGhpcy5pYWRkbigtQyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKEMpLHRoaXMu''@;'; put 'put ''bmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPUMsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIFQ9MDtUPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW1RdPDA7VCsr''@;'; put 'put ''KXRoaXMud29yZHNbVF0rPTY3MTA4ODY0LHRoaXMud29yZHNbVCsxXS09MTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKEMpfSx3LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlz''@;'; put 'put ''LmNsb25lKCkuaXN1Ym4oQyl9LHcucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHcucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx3LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24o''@;'; put 'put ''QyxULEgpe3ZhciBFO3RoaXMuX2V4cGFuZChDLmxlbmd0aCtIKTt2YXIgbSxBPTA7Zm9yKEU9MDtFPEMubGVuZ3RoO0UrKyl7bT0oMHx0aGlzLndvcmRzW0UrSF0pK0E7dmFyIGFlPSgwfEMud29yZHNbRV0pKlQ7QT0oKG0tPTY3MTA4ODYzJmFlKT4+MjYpLShhZS82NzEwODg2NHwwKSx0aGlz''@;'; put 'put ''LndvcmRzW0UrSF09NjcxMDg4NjMmbX1mb3IoO0U8dGhpcy5sZW5ndGgtSDtFKyspQT0obT0oMHx0aGlzLndvcmRzW0UrSF0pK0EpPj4yNix0aGlzLndvcmRzW0UrSF09NjcxMDg4NjMmbTtpZigwPT09QSlyZXR1cm4gdGhpcy5fc3RyaXAoKTtmb3IocCgtMT09PUEpLEE9MCxFPTA7RTx0aGlz''@;'; put 'put ''Lmxlbmd0aDtFKyspQT0obT0tKDB8dGhpcy53b3Jkc1tFXSkrQSk+PjI2LHRoaXMud29yZHNbRV09NjcxMDg4NjMmbTtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKEMsVCl7dmFyIEgsaj10aGlzLmNsb25lKCksRT1D''@;'; put 'put ''LG09MHxFLndvcmRzW0UubGVuZ3RoLTFdOzAhPShIPTI2LXRoaXMuX2NvdW50Qml0cyhtKSkmJihFPUUudXNobG4oSCksai5pdXNobG4oSCksbT0wfEUud29yZHNbRS5sZW5ndGgtMV0pO3ZhciBuZSxhZT1qLmxlbmd0aC1FLmxlbmd0aDtpZigibW9kIiE9PVQpeyhuZT1uZXcgdyhudWxsKSku''@;'; put 'put ''bGVuZ3RoPWFlKzEsbmUud29yZHM9bmV3IEFycmF5KG5lLmxlbmd0aCk7Zm9yKHZhciBzZT0wO3NlPG5lLmxlbmd0aDtzZSsrKW5lLndvcmRzW3NlXT0wfXZhciBDZT1qLmNsb25lKCkuX2lzaGxuc3VibXVsKEUsMSxhZSk7MD09PUNlLm5lZ2F0aXZlJiYoaj1DZSxuZSYmKG5lLndvcmRzW2Fl''@;'; put 'put ''XT0xKSk7Zm9yKHZhciBVZT1hZS0xO1VlPj0wO1VlLS0pe3ZhciBKZT02NzEwODg2NCooMHxqLndvcmRzW0UubGVuZ3RoK1VlXSkrKDB8ai53b3Jkc1tFLmxlbmd0aCtVZS0xXSk7Zm9yKEplPU1hdGgubWluKEplL218MCw2NzEwODg2Myksai5faXNobG5zdWJtdWwoRSxKZSxVZSk7MCE9PWou''@;'; put 'put ''bmVnYXRpdmU7KUplLS0sai5uZWdhdGl2ZT0wLGouX2lzaGxuc3VibXVsKEUsMSxVZSksai5pc1plcm8oKXx8KGoubmVnYXRpdmVePTEpO25lJiYobmUud29yZHNbVWVdPUplKX1yZXR1cm4gbmUmJm5lLl9zdHJpcCgpLGouX3N0cmlwKCksImRpdiIhPT1UJiYwIT09SCYmai5pdXNocm4oSCks''@;'; put 'put ''e2RpdjpuZXx8bnVsbCxtb2Q6an19LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihDLFQsSCl7cmV0dXJuIHAoIUMuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Qy5uZWdhdGl2ZT8obT10aGlzLm5l''@;'; put 'put ''ZygpLmRpdm1vZChDLFQpLCJtb2QiIT09VCYmKGo9bS5kaXYubmVnKCkpLCJkaXYiIT09VCYmKEU9bS5tb2QubmVnKCksSCYmMCE9PUUubmVnYXRpdmUmJkUuaWFkZChDKSkse2RpdjpqLG1vZDpFfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1DLm5lZ2F0aXZlPyhtPXRoaXMuZGl2bW9kKEMu''@;'; put 'put ''bmVnKCksVCksIm1vZCIhPT1UJiYoaj1tLmRpdi5uZWcoKSkse2RpdjpqLG1vZDptLm1vZH0pOnRoaXMubmVnYXRpdmUmQy5uZWdhdGl2ZT8obT10aGlzLm5lZygpLmRpdm1vZChDLm5lZygpLFQpLCJkaXYiIT09VCYmKEU9bS5tb2QubmVnKCksSCYmMCE9PUUubmVnYXRpdmUmJkUuaXN1YihD''@;'; put 'put ''KSkse2RpdjptLmRpdixtb2Q6RX0pOkMubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChDKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1DLmxlbmd0aD8iZGl2Ij09PVQ/e2Rpdjp0aGlzLmRpdm4oQy53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09VD97ZGl2Om51bGwsbW9k''@;'; put 'put ''Om5ldyB3KHRoaXMubW9kcm4oQy53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihDLndvcmRzWzBdKSxtb2Q6bmV3IHcodGhpcy5tb2RybihDLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoQyxUKTt2YXIgaixFLG19LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5k''@;'; put 'put ''aXZtb2QoQywiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuZGl2bW9kKEMsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5kaXZtb2QoQywibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5k''@;'; put 'put ''aXZSb3VuZD1mdW5jdGlvbihDKXt2YXIgVD10aGlzLmRpdm1vZChDKTtpZihULm1vZC5pc1plcm8oKSlyZXR1cm4gVC5kaXY7dmFyIEg9MCE9PVQuZGl2Lm5lZ2F0aXZlP1QubW9kLmlzdWIoQyk6VC5tb2Qsaj1DLnVzaHJuKDEpLEU9Qy5hbmRsbigxKSxtPUguY21wKGopO3JldHVybiBtPDB8''@;'; put 'put ''fDE9PT1FJiYwPT09bT9ULmRpdjowIT09VC5kaXYubmVnYXRpdmU/VC5kaXYuaXN1Ym4oMSk6VC5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZHJuPWZ1bmN0aW9uKEMpe3ZhciBUPUM8MDtUJiYoQz0tQykscChDPD02NzEwODg2Myk7Zm9yKHZhciBIPSgxPDwyNiklQyxqPTAsRT10aGlz''@;'; put 'put ''Lmxlbmd0aC0xO0U+PTA7RS0tKWo9KEgqaisoMHx0aGlzLndvcmRzW0VdKSklQztyZXR1cm4gVD8tajpqfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLm1vZHJuKEMpfSx3LnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihDKXt2YXIgVD1DPDA7VCYmKEM9LUMpLHAo''@;'; put 'put ''Qzw9NjcxMDg4NjMpO2Zvcih2YXIgSD0wLGo9dGhpcy5sZW5ndGgtMTtqPj0wO2otLSl7dmFyIEU9KDB8dGhpcy53b3Jkc1tqXSkrNjcxMDg4NjQqSDt0aGlzLndvcmRzW2pdPUUvQ3wwLEg9RSVDfXJldHVybiB0aGlzLl9zdHJpcCgpLFQ/dGhpcy5pbmVnKCk6dGhpc30sdy5wcm90b3R5cGUu''@;'; put 'put ''ZGl2bj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKEMpfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKEMpe3AoMD09PUMubmVnYXRpdmUpLHAoIUMuaXNaZXJvKCkpO3ZhciBUPXRoaXMsSD1DLmNsb25lKCk7VD0wIT09VC5uZWdhdGl2ZT9ULnVtb2QoQyk6VC5jbG9u''@;'; put 'put ''ZSgpO2Zvcih2YXIgaj1uZXcgdygxKSxFPW5ldyB3KDApLG09bmV3IHcoMCksQT1uZXcgdygxKSxhZT0wO1QuaXNFdmVuKCkmJkguaXNFdmVuKCk7KVQuaXVzaHJuKDEpLEguaXVzaHJuKDEpLCsrYWU7Zm9yKHZhciBuZT1ILmNsb25lKCksc2U9VC5jbG9uZSgpOyFULmlzWmVybygpOyl7Zm9y''@;'; put 'put ''KHZhciBDZT0wLFVlPTE7IShULndvcmRzWzBdJlVlKSYmQ2U8MjY7KytDZSxVZTw8PTEpO2lmKENlPjApZm9yKFQuaXVzaHJuKENlKTtDZS0tID4wOykoai5pc09kZCgpfHxFLmlzT2RkKCkpJiYoai5pYWRkKG5lKSxFLmlzdWIoc2UpKSxqLml1c2hybigxKSxFLml1c2hybigxKTtmb3IodmFy''@;'; put 'put ''IEplPTAsaXQ9MTshKEgud29yZHNbMF0maXQpJiZKZTwyNjsrK0plLGl0PDw9MSk7aWYoSmU+MClmb3IoSC5pdXNocm4oSmUpO0plLS0gPjA7KShtLmlzT2RkKCl8fEEuaXNPZGQoKSkmJihtLmlhZGQobmUpLEEuaXN1YihzZSkpLG0uaXVzaHJuKDEpLEEuaXVzaHJuKDEpO1QuY21wKEgpPj0w''@;'; put 'put ''PyhULmlzdWIoSCksai5pc3ViKG0pLEUuaXN1YihBKSk6KEguaXN1YihUKSxtLmlzdWIoaiksQS5pc3ViKEUpKX1yZXR1cm57YTptLGI6QSxnY2Q6SC5pdXNobG4oYWUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKEMpe3AoMD09PUMubmVnYXRpdmUpLHAoIUMuaXNaZXJvKCkpO3Zh''@;'; put 'put ''ciBDZSxUPXRoaXMsSD1DLmNsb25lKCk7VD0wIT09VC5uZWdhdGl2ZT9ULnVtb2QoQyk6VC5jbG9uZSgpO2Zvcih2YXIgaj1uZXcgdygxKSxFPW5ldyB3KDApLG09SC5jbG9uZSgpO1QuY21wbigxKT4wJiZILmNtcG4oMSk+MDspe2Zvcih2YXIgQT0wLGFlPTE7IShULndvcmRzWzBdJmFlKSYm''@;'; put 'put ''QTwyNjsrK0EsYWU8PD0xKTtpZihBPjApZm9yKFQuaXVzaHJuKEEpO0EtLSA+MDspai5pc09kZCgpJiZqLmlhZGQobSksai5pdXNocm4oMSk7Zm9yKHZhciBuZT0wLHNlPTE7IShILndvcmRzWzBdJnNlKSYmbmU8MjY7KytuZSxzZTw8PTEpO2lmKG5lPjApZm9yKEguaXVzaHJuKG5lKTtuZS0t''@;'; put 'put ''ID4wOylFLmlzT2RkKCkmJkUuaWFkZChtKSxFLml1c2hybigxKTtULmNtcChIKT49MD8oVC5pc3ViKEgpLGouaXN1YihFKSk6KEguaXN1YihUKSxFLmlzdWIoaikpfXJldHVybihDZT0wPT09VC5jbXBuKDEpP2o6RSkuY21wbigwKTwwJiZDZS5pYWRkKEMpLENlfSx3LnByb3RvdHlwZS5nY2Q9''@;'; put 'put ''ZnVuY3Rpb24oQyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gQy5hYnMoKTtpZihDLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBUPXRoaXMuY2xvbmUoKSxIPUMuY2xvbmUoKTtULm5lZ2F0aXZlPTAsSC5uZWdhdGl2ZT0wO2Zvcih2YXIgaj0wO1QuaXNFdmVuKCkmJkguaXNFdmVu''@;'; put 'put ''KCk7aisrKVQuaXVzaHJuKDEpLEguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtULmlzRXZlbigpOylULml1c2hybigxKTtmb3IoO0guaXNFdmVuKCk7KUguaXVzaHJuKDEpO3ZhciBFPVQuY21wKEgpO2lmKEU8MCl7dmFyIG09VDtUPUgsSD1tfWVsc2UgaWYoMD09PUV8fDA9PT1ILmNtcG4oMSkp''@;'; put 'put ''YnJlYWs7VC5pc3ViKEgpfXJldHVybiBILml1c2hsbihqKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5lZ2NkKEMpLmEudW1vZChDKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5p''@;'; put 'put ''c09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLndvcmRzWzBdJkN9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKEMpe3AoIm51bWJlciI9PXR5cGVvZiBDKTt2YXIgVD1DJTI2LEg9KEMt''@;'; put 'put ''VCkvMjYsaj0xPDxUO2lmKHRoaXMubGVuZ3RoPD1IKXJldHVybiB0aGlzLl9leHBhbmQoSCsxKSx0aGlzLndvcmRzW0hdfD1qLHRoaXM7Zm9yKHZhciBFPWosbT1IOzAhPT1FJiZtPHRoaXMubGVuZ3RoO20rKyl7dmFyIEE9MHx0aGlzLndvcmRzW21dO0U9KEErPUUpPj4+MjYsdGhpcy53b3Jk''@;'; put 'put ''c1ttXT1BJj02NzEwODg2M31yZXR1cm4gMCE9PUUmJih0aGlzLndvcmRzW21dPUUsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rp''@;'; put 'put ''b24oQyl7dmFyIEgsVD1DPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFUKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZUKXJldHVybiAxO2lmKHRoaXMuX3N0cmlwKCksdGhpcy5sZW5ndGg+MSlIPTE7ZWxzZXtUJiYoQz0tQykscChDPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBi''@;'; put 'put ''aWciKTt2YXIgaj0wfHRoaXMud29yZHNbMF07SD1qPT09Qz8wOmo8Qz8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1IOkh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihDKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PUMubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMu''@;'; put 'put ''bmVnYXRpdmUmJjAhPT1DLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBUPXRoaXMudWNtcChDKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtVDpUfSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKEMpe2lmKHRoaXMubGVuZ3RoPkMubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPEMu''@;'; put 'put ''bGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgVD0wLEg9dGhpcy5sZW5ndGgtMTtIPj0wO0gtLSl7dmFyIGo9MHx0aGlzLndvcmRzW0hdLEU9MHxDLndvcmRzW0hdO2lmKGohPT1FKXtqPEU/VD0tMTpqPkUmJihUPTEpO2JyZWFrfX1yZXR1cm4gVH0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKEMp''@;'; put 'put ''e3JldHVybiAxPT09dGhpcy5jbXBuKEMpfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihDKXtyZXR1cm4gMT09PXRoaXMuY21wKEMpfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNtcG4oQyk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihDKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5jbXAoQyk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihDKXtyZXR1cm4tMT09PXRoaXMuY21wbihDKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oQyl7cmV0dXJuLTE9PT10aGlzLmNtcChDKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbXBu''@;'; put 'put ''KEMpPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY21wKEMpPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oQyl7cmV0dXJuIDA9PT10aGlzLmNtcG4oQyl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKEMpe3JldHVybiAwPT09dGhpcy5jbXAoQyl9LHcu''@;'; put 'put ''cmVkPWZ1bmN0aW9uKEMpe3JldHVybiBuZXcgZyhDKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IikscCgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBw''@;'; put 'put ''b3NpdGl2ZXMiKSxDLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoQyl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRG''@;'; put 'put ''cm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMucmVkPUMsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhp''@;'; put 'put ''cy5fZm9yY2VSZWQoQyl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihDKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKEMpe3JldHVybiBw''@;'; put 'put ''KHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKEMpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5y''@;'; put 'put ''ZWQuc3ViKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oQyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oQyl7cmV0dXJu''@;'; put 'put ''IHAodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKEMpe3JldHVybiBwKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5y''@;'; put 'put ''ZWQuX3ZlcmlmeTIodGhpcyxDKSx0aGlzLnJlZC5tdWwodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihDKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsQyksdGhpcy5yZWQu''@;'; put 'put ''aW11bCh0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVk''@;'; put 'put ''U3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJz''@;'; put 'put ''IiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJl''@;'; put 'put ''ZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihDKXtyZXR1cm4gcCh0aGlzLnJlZCYmIUMucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLEMpfTt2YXIgZ2U9e2syNTY6bnVsbCxwMjI0Om51bGws''@;'; put 'put ''cDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBfZSh4LEMpe3RoaXMubmFtZT14LHRoaXMucD1uZXcgdyhDLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVu''@;'; put 'put ''Y3Rpb24gVGUoKXtfZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIE1lKCl7X2UuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBaZSgpe19lLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gQigpe19lLmNhbGwodGhpcywiMjU1MTki''@;'; put 'put ''LCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gZyh4KXtpZigic3RyaW5nIj09dHlwZW9mIHgpe3ZhciBDPXcuX3ByaW1lKHgpO3RoaXMubT1DLnAsdGhpcy5wcmltZT1DfWVsc2UgcCh4Lmd0bigx''@;'; put 'put ''KSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPXgsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIHkoeCl7Zy5jYWxsKHRoaXMseCksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQl''@;'; put 'put ''MjYpLHRoaXMucj1uZXcgdygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52''@;'; put 'put ''PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1fZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBDPW5ldyB3KG51bGwpO3JldHVybiBDLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksQ30sX2UucHJvdG90eXBl''@;'; put 'put ''LmlyZWR1Y2U9ZnVuY3Rpb24oQyl7dmFyIEgsVD1DO2Rve3RoaXMuc3BsaXQoVCx0aGlzLnRtcCksSD0oVD0oVD10aGlzLmltdWxLKFQpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoSD50aGlzLm4pO3ZhciBqPUg8dGhpcy5uPy0xOlQudWNtcCh0aGlzLnApO3JldHVybiAw''@;'; put 'put ''PT09aj8oVC53b3Jkc1swXT0wLFQubGVuZ3RoPTEpOmo+MD9ULmlzdWIodGhpcy5wKTp2b2lkIDAhPT1ULnN0cmlwP1Quc3RyaXAoKTpULl9zdHJpcCgpLFR9LF9lLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihDLFQpe0MuaXVzaHJuKHRoaXMubiwwLFQpfSxfZS5wcm90b3R5cGUuaW11bEs9''@;'; put 'put ''ZnVuY3Rpb24oQyl7cmV0dXJuIEMuaW11bCh0aGlzLmspfSxWKFRlLF9lKSxUZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oQyxUKXtmb3IodmFyIEg9NDE5NDMwMyxqPU1hdGgubWluKEMubGVuZ3RoLDkpLEU9MDtFPGo7RSsrKVQud29yZHNbRV09Qy53b3Jkc1tFXTtpZihULmxlbmd0aD1q''@;'; put 'put ''LEMubGVuZ3RoPD05KXJldHVybiBDLndvcmRzWzBdPTAsdm9pZChDLmxlbmd0aD0xKTt2YXIgbT1DLndvcmRzWzldO2ZvcihULndvcmRzW1QubGVuZ3RoKytdPW0mSCxFPTEwO0U8Qy5sZW5ndGg7RSsrKXt2YXIgQT0wfEMud29yZHNbRV07Qy53b3Jkc1tFLTEwXT0oQSZIKTw8NHxtPj4+MjIs''@;'; put 'put ''bT1BfUMud29yZHNbRS0xMF09bT4+Pj0yMixDLmxlbmd0aC09MD09PW0mJkMubGVuZ3RoPjEwPzEwOjl9LFRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihDKXtDLndvcmRzW0MubGVuZ3RoXT0wLEMud29yZHNbQy5sZW5ndGgrMV09MCxDLmxlbmd0aCs9Mjtmb3IodmFyIFQ9MCxIPTA7SDxD''@;'; put 'put ''Lmxlbmd0aDtIKyspe3ZhciBqPTB8Qy53b3Jkc1tIXTtDLndvcmRzW0hdPTY3MTA4ODYzJihUKz05NzcqaiksVD02NCpqKyhULzY3MTA4ODY0fDApfXJldHVybiAwPT09Qy53b3Jkc1tDLmxlbmd0aC0xXSYmKEMubGVuZ3RoLS0sMD09PUMud29yZHNbQy5sZW5ndGgtMV0mJkMubGVuZ3RoLS0p''@;'; put 'put ''LEN9LFYoTWUsX2UpLFYoWmUsX2UpLFYoQixfZSksQi5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oQyl7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXt2YXIgaj0xOSooMHxDLndvcmRzW0hdKStULEU9NjcxMDg4NjMmajtqPj4+PTI2LEMud29yZHNbSF09RSxUPWp9cmV0dXJuIDAh''@;'; put 'put ''PT1UJiYoQy53b3Jkc1tDLmxlbmd0aCsrXT1UKSxDfSx3Ll9wcmltZT1mdW5jdGlvbihDKXtpZihnZVtDXSlyZXR1cm4gZ2VbQ107dmFyIFQ7aWYoImsyNTYiPT09QylUPW5ldyBUZTtlbHNlIGlmKCJwMjI0Ij09PUMpVD1uZXcgTWU7ZWxzZSBpZigicDE5MiI9PT1DKVQ9bmV3IFplO2Vsc2V7''@;'; put 'put ''aWYoInAyNTUxOSIhPT1DKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK0MpO1Q9bmV3IEJ9cmV0dXJuIGdlW0NdPVQsVH0sZy5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oQyl7cCgwPT09Qy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwKEMu''@;'; put 'put ''cmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LGcucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKEMsVCl7cCghKEMubmVnYXRpdmV8VC5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscChDLnJlZCYmQy5yZWQ9PT1ULnJlZCwicmVkIHdv''@;'; put 'put ''cmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxnLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShDKS5fZm9yY2VSZWQodGhpcyk6KE4oQyxDLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcykpLEMpfSxnLnByb3RvdHlw''@;'; put 'put ''ZS5uZWc9ZnVuY3Rpb24oQyl7cmV0dXJuIEMuaXNaZXJvKCk/Qy5jbG9uZSgpOnRoaXMubS5zdWIoQykuX2ZvcmNlUmVkKHRoaXMpfSxnLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oQyxUKXt0aGlzLl92ZXJpZnkyKEMsVCk7dmFyIEg9Qy5hZGQoVCk7cmV0dXJuIEguY21wKHRoaXMubSk+PTAm''@;'; put 'put ''JkguaXN1Yih0aGlzLm0pLEguX2ZvcmNlUmVkKHRoaXMpfSxnLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKEMsVCl7dGhpcy5fdmVyaWZ5MihDLFQpO3ZhciBIPUMuaWFkZChUKTtyZXR1cm4gSC5jbXAodGhpcy5tKT49MCYmSC5pc3ViKHRoaXMubSksSH0sZy5wcm90b3R5cGUuc3ViPWZ1bmN0''@;'; put 'put ''aW9uKEMsVCl7dGhpcy5fdmVyaWZ5MihDLFQpO3ZhciBIPUMuc3ViKFQpO3JldHVybiBILmNtcG4oMCk8MCYmSC5pYWRkKHRoaXMubSksSC5fZm9yY2VSZWQodGhpcyl9LGcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oQyxUKXt0aGlzLl92ZXJpZnkyKEMsVCk7dmFyIEg9Qy5pc3ViKFQpO3Jl''@;'; put 'put ''dHVybiBILmNtcG4oMCk8MCYmSC5pYWRkKHRoaXMubSksSH0sZy5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKEMsVCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoQyksdGhpcy5pbW9kKEMudXNobG4oVCkpfSxnLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKEMsVCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIo''@;'; put 'put ''QyxUKSx0aGlzLmltb2QoQy5pbXVsKFQpKX0sZy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKEMsVCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoQyxUKSx0aGlzLmltb2QoQy5tdWwoVCkpfSxnLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmltdWwoQyxDLmNsb25lKCkpfSxn''@;'; put 'put ''LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubXVsKEMsQyl9LGcucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oQyl7aWYoQy5pc1plcm8oKSlyZXR1cm4gQy5jbG9uZSgpO3ZhciBUPXRoaXMubS5hbmRsbigzKTtpZihwKFQlMj09MSksMz09PVQpe3ZhciBIPXRoaXMubS5h''@;'; put 'put ''ZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coQyxIKX1mb3IodmFyIGo9dGhpcy5tLnN1Ym4oMSksRT0wOyFqLmlzWmVybygpJiYwPT09ai5hbmRsbigxKTspRSsrLGouaXVzaHJuKDEpO3AoIWouaXNaZXJvKCkpO3ZhciBtPW5ldyB3KDEpLnRvUmVkKHRoaXMpLEE9bS5y''@;'; put 'put ''ZWROZWcoKSxhZT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbmU9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihuZT1uZXcgdygyKm5lKm5lKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobmUsYWUpLmNtcChBKTspbmUucmVkSUFkZChBKTtmb3IodmFyIHNlPXRoaXMucG93KG5lLGopLENlPXRo''@;'; put 'put ''aXMucG93KEMsai5hZGRuKDEpLml1c2hybigxKSksVWU9dGhpcy5wb3coQyxqKSxKZT1FOzAhPT1VZS5jbXAobSk7KXtmb3IodmFyIGl0PVVlLHhlPTA7MCE9PWl0LmNtcChtKTt4ZSsrKWl0PWl0LnJlZFNxcigpO3AoeGU8SmUpO3ZhciB5ZT10aGlzLnBvdyhzZSxuZXcgdygxKS5pdXNobG4o''@;'; put 'put ''SmUteGUtMSkpO0NlPUNlLnJlZE11bCh5ZSksc2U9eWUucmVkU3FyKCksVWU9VWUucmVkTXVsKHNlKSxKZT14ZX1yZXR1cm4gQ2V9LGcucHJvdG90eXBlLmludm09ZnVuY3Rpb24oQyl7dmFyIFQ9Qy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PVQubmVnYXRpdmU/KFQubmVnYXRpdmU9MCx0''@;'; put 'put ''aGlzLmltb2QoVCkucmVkTmVnKCkpOnRoaXMuaW1vZChUKX0sZy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKEMsVCl7aWYoVC5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PVQuY21wbigxKSlyZXR1cm4gQy5jbG9uZSgpO3ZhciBqPW5ldyBBcnJheSgxNik7alsw''@;'; put 'put ''XT1uZXcgdygxKS50b1JlZCh0aGlzKSxqWzFdPUM7Zm9yKHZhciBFPTI7RTxqLmxlbmd0aDtFKyspaltFXT10aGlzLm11bChqW0UtMV0sQyk7dmFyIG09alswXSxBPTAsYWU9MCxuZT1ULmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bmUmJihuZT0yNiksRT1ULmxlbmd0aC0xO0U+PTA7RS0tKXtm''@;'; put 'put ''b3IodmFyIHNlPVQud29yZHNbRV0sQ2U9bmUtMTtDZT49MDtDZS0tKXt2YXIgVWU9c2U+PkNlJjE7bSE9PWpbMF0mJihtPXRoaXMuc3FyKG0pKSwwIT09VWV8fDAhPT1BPyhBPDw9MSxBfD1VZSwoND09KythZXx8MD09PUUmJjA9PT1DZSkmJihtPXRoaXMubXVsKG0saltBXSksYWU9MCxBPTAp''@;'; put 'put ''KTphZT0wfW5lPTI2fXJldHVybiBtfSxnLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oQyl7dmFyIFQ9Qy51bW9kKHRoaXMubSk7cmV0dXJuIFQ9PT1DP1QuY2xvbmUoKTpUfSxnLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihDKXt2YXIgVD1DLmNsb25lKCk7cmV0dXJuIFQu''@;'; put 'put ''cmVkPW51bGwsVH0sdy5tb250PWZ1bmN0aW9uKEMpe3JldHVybiBuZXcgeShDKX0sVih5LGcpLHkucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5pbW9kKEMudXNobG4odGhpcy5zaGlmdCkpfSx5LnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihDKXt2''@;'; put 'put ''YXIgVD10aGlzLmltb2QoQy5tdWwodGhpcy5yaW52KSk7cmV0dXJuIFQucmVkPW51bGwsVH0seS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihDLFQpe2lmKEMuaXNaZXJvKCl8fFQuaXNaZXJvKCkpcmV0dXJuIEMud29yZHNbMF09MCxDLmxlbmd0aD0xLEM7dmFyIEg9Qy5pbXVsKFQpLGo9SC5t''@;'; put 'put ''YXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksRT1ILmlzdWIoaikuaXVzaHJuKHRoaXMuc2hpZnQpLG09RTtyZXR1cm4gRS5jbXAodGhpcy5tKT49MD9tPUUuaXN1Yih0aGlzLm0pOkUuY21wbigwKTwwJiYobT1FLmlhZGQodGhp''@;'; put 'put ''cy5tKSksbS5fZm9yY2VSZWQodGhpcyl9LHkucHJvdG90eXBlLm11bD1mdW5jdGlvbihDLFQpe2lmKEMuaXNaZXJvKCl8fFQuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgSD1DLm11bChUKSxqPUgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludiku''@;'; put 'put ''aW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLEU9SC5pc3ViKGopLml1c2hybih0aGlzLnNoaWZ0KSxtPUU7cmV0dXJuIEUuY21wKHRoaXMubSk+PTA/bT1FLmlzdWIodGhpcy5tKTpFLmNtcG4oMCk8MCYmKG09RS5pYWRkKHRoaXMubSkpLG0uX2ZvcmNlUmVkKHRoaXMpfSx5LnByb3Rv''@;'; put 'put ''dHlwZS5pbnZtPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmltb2QoQy5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KGNlPWIubm1kKGNlKSx0aGlzKX0sMTAzMDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1PYmplY3Qua2V5c3x8ZnVuY3Rpb24o''@;'; put 'put ''Til7dmFyIE89W107Zm9yKHZhciBLIGluIE4pTy5wdXNoKEspO3JldHVybiBPfTtjZS5leHBvcnRzPUY7dmFyIF89Yig2MTA5MikscD1iKDE1NDkyKTtiKDcxOTkzKShGLF8pO2Zvcih2YXIgVj1JKHAucHJvdG90eXBlKSx3PTA7dzxWLmxlbmd0aDt3Kyspe3ZhciBQPVZbd107Ri5wcm90b3R5''@;'; put 'put ''cGVbUF18fChGLnByb3RvdHlwZVtQXT1wLnByb3RvdHlwZVtQXSl9ZnVuY3Rpb24gRihOKXtpZighKHRoaXMgaW5zdGFuY2VvZiBGKSlyZXR1cm4gbmV3IEYoTik7Xy5jYWxsKHRoaXMsTikscC5jYWxsKHRoaXMsTiksdGhpcy5hbGxvd0hhbGZPcGVuPSEwLE4mJighMT09PU4ucmVhZGFibGUm''@;'; put 'put ''Jih0aGlzLnJlYWRhYmxlPSExKSwhMT09PU4ud3JpdGFibGUmJih0aGlzLndyaXRhYmxlPSExKSwhMT09PU4uYWxsb3dIYWxmT3BlbiYmKHRoaXMuYWxsb3dIYWxmT3Blbj0hMSx0aGlzLm9uY2UoImVuZCIsUikpKX1mdW5jdGlvbiBSKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8cHJv''@;'; put 'put ''Y2Vzcy5uZXh0VGljayh6LHRoaXMpfWZ1bmN0aW9uIHooTil7Ti5lbmQoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoRi5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdh''@;'; put 'put ''dGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5wcm90b3R5cGUsIndyaXRhYmxlQnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKX19KSxPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoRi5wcm90b3R5cGUsIndyaXRhYmxlTGVuZ3RoIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxl''@;'; put 'put ''OiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihPKXt2''@;'; put 'put ''b2lkIDA9PT10aGlzLl9yZWFkYWJsZVN0YXRlfHx2b2lkIDA9PT10aGlzLl93cml0YWJsZVN0YXRlfHwodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9Tyx0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1PKX19KX0sMTEwODooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1i''@;'; put 'put ''KDMyNjMzKSxfPVN0cmluZyxwPVR5cGVFcnJvcjtjZS5leHBvcnRzPWZ1bmN0aW9uKFYpe2lmKEkoVikpcmV0dXJuIFY7dGhyb3cgbmV3IHAoXyhWKSsiIGlzIG5vdCBhbiBvYmplY3QiKX19LDExMzg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0NjkyNik7Y2UuZXhwb3J0cz1m''@;'; put 'put ''dW5jdGlvbihfLHAsVil7Zm9yKHZhciBGLFIsdz1WP186Xy5pdGVyYXRvcixQPV8ubmV4dDshKEY9SShQLHcpKS5kb25lOylpZih2b2lkIDAhPT0oUj1wKEYudmFsdWUpKSlyZXR1cm4gUn19LDEyMzE6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5l''@;'; put 'put ''TG9jYWxlKCJ0aCIse21vbnRoczoiXHUwZTIxXHUwZTAxXHUwZTIzXHUwZTMyXHUwZTA0XHUwZTIxX1x1MGUwMVx1MGUzOFx1MGUyMVx1MGUyMFx1MGUzMlx1MGUxZVx1MGUzMVx1MGUxOVx1MGUxOFx1MGU0Y19cdTBlMjFcdTBlMzVcdTBlMTlcdTBlMzJcdTBlMDRcdTBlMjFfXHUwZTQwXHUw''@;'; put 'put ''ZTIxXHUwZTI5XHUwZTMyXHUwZTIyXHUwZTE5X1x1MGUxZVx1MGUyNFx1MGUyOVx1MGUyMFx1MGUzMlx1MGUwNFx1MGUyMV9cdTBlMjFcdTBlMzRcdTBlMTZcdTBlMzhcdTBlMTlcdTBlMzJcdTBlMjJcdTBlMTlfXHUwZTAxXHUwZTIzXHUwZTAxXHUwZTBlXHUwZTMyXHUwZTA0XHUwZTIxX1x1''@;'; put 'put ''MGUyYVx1MGUzNFx1MGUwN1x1MGUyYlx1MGUzMlx1MGUwNFx1MGUyMV9cdTBlMDFcdTBlMzFcdTBlMTlcdTBlMjJcdTBlMzJcdTBlMjJcdTBlMTlfXHUwZTE1XHUwZTM4XHUwZTI1XHUwZTMyXHUwZTA0XHUwZTIxX1x1MGUxZVx1MGUyNFx1MGUyOFx1MGUwOFx1MGUzNFx1MGUwMVx1MGUzMlx1''@;'; put 'put ''MGUyMlx1MGUxOV9cdTBlMThcdTBlMzFcdTBlMTlcdTBlMjdcdTBlMzJcdTBlMDRcdTBlMjEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGUyMS5cdTBlMDQuX1x1MGUwMS5cdTBlMWUuX1x1MGUyMVx1MGUzNS5cdTBlMDQuX1x1MGU0MFx1MGUyMS5cdTBlMjIuX1x1MGUxZS5cdTBlMDQu''@;'; put 'put ''X1x1MGUyMVx1MGUzNC5cdTBlMjIuX1x1MGUwMS5cdTBlMDQuX1x1MGUyYS5cdTBlMDQuX1x1MGUwMS5cdTBlMjIuX1x1MGUxNS5cdTBlMDQuX1x1MGUxZS5cdTBlMjIuX1x1MGUxOC5cdTBlMDQuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MGUyZFx1MGUz''@;'; put 'put ''Mlx1MGUxN1x1MGUzNFx1MGUxNVx1MGUyMlx1MGU0Y19cdTBlMDhcdTBlMzFcdTBlMTlcdTBlMTdcdTBlMjNcdTBlNGNfXHUwZTJkXHUwZTMxXHUwZTA3XHUwZTA0XHUwZTMyXHUwZTIzX1x1MGUxZVx1MGUzOFx1MGUxOF9cdTBlMWVcdTBlMjRcdTBlMmJcdTBlMzFcdTBlMmFcdTBlMWFcdTBl''@;'; put 'put ''MTRcdTBlMzVfXHUwZTI4XHUwZTM4XHUwZTAxXHUwZTIzXHUwZTRjX1x1MGU0MFx1MGUyYVx1MGUzMlx1MGUyM1x1MGU0YyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBlMmRcdTBlMzJcdTBlMTdcdTBlMzRcdTBlMTVcdTBlMjJcdTBlNGNfXHUwZTA4XHUwZTMxXHUwZTE5XHUwZTE3''@;'; put 'put ''XHUwZTIzXHUwZTRjX1x1MGUyZFx1MGUzMVx1MGUwN1x1MGUwNFx1MGUzMlx1MGUyM19cdTBlMWVcdTBlMzhcdTBlMThfXHUwZTFlXHUwZTI0XHUwZTJiXHUwZTMxXHUwZTJhX1x1MGUyOFx1MGUzOFx1MGUwMVx1MGUyM1x1MGU0Y19cdTBlNDBcdTBlMmFcdTBlMzJcdTBlMjNcdTBlNGMiLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGUyZFx1MGUzMi5fXHUwZTA4Ll9cdTBlMmQuX1x1MGUxZS5fXHUwZTFlXHUwZTI0Ll9cdTBlMjguX1x1MGUyYS4iLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixM''@;'; put 'put ''OiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgXHUwZTQwXHUwZTI3XHUwZTI1XHUwZTMyIEg6bW0iLExMTEw6Ilx1MGUyN1x1MGUzMVx1MGUxOWRkZGRcdTBlMTdcdTBlMzVcdTBlNDggRCBNTU1NIFlZWVkgXHUwZTQwXHUwZTI3XHUwZTI1XHUwZTMyIEg6''@;'; put 'put ''bW0ifSxtZXJpZGllbVBhcnNlOi9cdTBlMDFcdTBlNDhcdTBlMmRcdTBlMTlcdTBlNDBcdTBlMTdcdTBlMzVcdTBlNDhcdTBlMjJcdTBlMDd8XHUwZTJiXHUwZTI1XHUwZTMxXHUwZTA3XHUwZTQwXHUwZTE3XHUwZTM1XHUwZTQ4XHUwZTIyXHUwZTA3Lyxpc1BNOmZ1bmN0aW9uKHApe3JldHVy''@;'; put 'put ''biJcdTBlMmJcdTBlMjVcdTBlMzFcdTBlMDdcdTBlNDBcdTBlMTdcdTBlMzVcdTBlNDhcdTBlMjJcdTBlMDciPT09cH0sbWVyaWRpZW06ZnVuY3Rpb24ocCxWLHcpe3JldHVybiBwPDEyPyJcdTBlMDFcdTBlNDhcdTBlMmRcdTBlMTlcdTBlNDBcdTBlMTdcdTBlMzVcdTBlNDhcdTBlMjJcdTBl''@;'; put 'put ''MDciOiJcdTBlMmJcdTBlMjVcdTBlMzFcdTBlMDdcdTBlNDBcdTBlMTdcdTBlMzVcdTBlNDhcdTBlMjJcdTBlMDcifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGUyN1x1MGUzMVx1MGUxOVx1MGUxOVx1MGUzNVx1MGU0OSBcdTBlNDBcdTBlMjdcdTBlMjVcdTBlMzJdIExUIixuZXh0RGF5OiJb''@;'; put 'put ''XHUwZTFlXHUwZTIzXHUwZTM4XHUwZTQ4XHUwZTA3XHUwZTE5XHUwZTM1XHUwZTQ5IFx1MGU0MFx1MGUyN1x1MGUyNVx1MGUzMl0gTFQiLG5leHRXZWVrOiJkZGRkW1x1MGUyYlx1MGUxOVx1MGU0OVx1MGUzMiBcdTBlNDBcdTBlMjdcdTBlMjVcdTBlMzJdIExUIixsYXN0RGF5OiJbXHUwZTQw''@;'; put 'put ''XHUwZTIxXHUwZTM3XHUwZTQ4XHUwZTJkXHUwZTI3XHUwZTMyXHUwZTE5XHUwZTE5XHUwZTM1XHUwZTQ5IFx1MGU0MFx1MGUyN1x1MGUyNVx1MGUzMl0gTFQiLGxhc3RXZWVrOiJbXHUwZTI3XHUwZTMxXHUwZTE5XWRkZGRbXHUwZTE3XHUwZTM1XHUwZTQ4XHUwZTQxXHUwZTI1XHUwZTQ5XHUw''@;'; put 'put ''ZTI3IFx1MGU0MFx1MGUyN1x1MGUyNVx1MGUzMl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MGUyZFx1MGUzNVx1MGUwMSAlcyIscGFzdDoiJXNcdTBlMTdcdTBlMzVcdTBlNDhcdTBlNDFcdTBlMjVcdTBlNDlcdTBlMjciLHM6Ilx1MGU0NFx1MGUyMVx1MGU0''@;'; put 'put ''OFx1MGUwMVx1MGUzNVx1MGU0OFx1MGUyN1x1MGUzNFx1MGUxOVx1MGUzMlx1MGUxN1x1MGUzNSIsc3M6IiVkIFx1MGUyN1x1MGUzNFx1MGUxOVx1MGUzMlx1MGUxN1x1MGUzNSIsbToiMSBcdTBlMTlcdTBlMzJcdTBlMTdcdTBlMzUiLG1tOiIlZCBcdTBlMTlcdTBlMzJcdTBlMTdcdTBlMzUi''@;'; put 'put ''LGg6IjEgXHUwZTBhXHUwZTMxXHUwZTQ4XHUwZTI3XHUwZTQyXHUwZTIxXHUwZTA3IixoaDoiJWQgXHUwZTBhXHUwZTMxXHUwZTQ4XHUwZTI3XHUwZTQyXHUwZTIxXHUwZTA3IixkOiIxIFx1MGUyN1x1MGUzMVx1MGUxOSIsZGQ6IiVkIFx1MGUyN1x1MGUzMVx1MGUxOSIsdzoiMSBcdTBlMmFc''@;'; put 'put ''dTBlMzFcdTBlMWJcdTBlMTRcdTBlMzJcdTBlMmJcdTBlNGMiLHd3OiIlZCBcdTBlMmFcdTBlMzFcdTBlMWJcdTBlMTRcdTBlMzJcdTBlMmJcdTBlNGMiLE06IjEgXHUwZTQwXHUwZTE0XHUwZTM3XHUwZTJkXHUwZTE5IixNTToiJWQgXHUwZTQwXHUwZTE0XHUwZTM3XHUwZTJkXHUwZTE5Iix5''@;'; put 'put ''OiIxIFx1MGUxYlx1MGUzNSIseXk6IiVkIFx1MGUxYlx1MGUzNSJ9fSl9KGIoOTc1ODYpKX0sMTQ0NTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDk3NTQxKSxfPWIoMjE5MTApLHA9SS5TZXQsVj1JLmFkZDtjZS5leHBvcnRzPWZ1bmN0aW9uKHcpe3ZhciBQPW5ldyBwO3JldHVy''@;'; put 'put ''biBfKHcsZnVuY3Rpb24oRil7VihQLEYpfSksUH19LDE2MzY6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz17ckU6IjYuNi4xIn19LDE3NTY6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1FdmFsRXJyb3J9LDIzNTg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIF89YigzMzk2''@;'; put 'put ''MykubmF2aWdhdG9yLHA9XyYmXy51c2VyQWdlbnQ7Y2UuZXhwb3J0cz1wP1N0cmluZyhwKToiIn0sMjY1NTooY2UsWCxiKT0+e3ZhciBJPWIoODM4MzgpLF89SS5CdWZmZXI7ZnVuY3Rpb24gcCh3LFApe2Zvcih2YXIgRiBpbiB3KVBbRl09d1tGXX1mdW5jdGlvbiBWKHcsUCxGKXtyZXR1cm4g''@;'; put 'put ''Xyh3LFAsRil9Xy5mcm9tJiZfLmFsbG9jJiZfLmFsbG9jVW5zYWZlJiZfLmFsbG9jVW5zYWZlU2xvdz9jZS5leHBvcnRzPUk6KHAoSSxYKSxYLkJ1ZmZlcj1WKSxwKF8sViksVi5mcm9tPWZ1bmN0aW9uKHcsUCxGKXtpZigibnVtYmVyIj09dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigi''@;'; put 'put ''QXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gXyh3LFAsRil9LFYuYWxsb2M9ZnVuY3Rpb24odyxQLEYpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIFI9Xyh3KTtyZXR1cm4gdm9p''@;'; put 'put ''ZCAwIT09UD8ic3RyaW5nIj09dHlwZW9mIEY/Ui5maWxsKFAsRik6Ui5maWxsKFApOlIuZmlsbCgwKSxSfSxWLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHcpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJu''@;'; put 'put ''IF8odyl9LFYuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHcpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIEkuU2xvd0J1ZmZlcih3KX19LDI3Njc6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFy''@;'; put 'put ''IEk9Yig0MzQwNiksXz1TdHJpbmcscD1UeXBlRXJyb3I7Y2UuZXhwb3J0cz1mdW5jdGlvbihWKXtpZihJKFYpKXJldHVybiBWO3Rocm93IG5ldyBwKCJDYW4ndCBzZXQgIitfKFYpKyIgYXMgYSBwcm90b3R5cGUiKX19LDI5MDk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1W''@;'; put 'put ''O3ZhciBJPWIoNzQwNzUpLF89T2JqZWN0LmNyZWF0ZShiKDI3NjM3KSk7ZnVuY3Rpb24gcChGLFIpe3ZhciB6PXRoaXMuX3RyYW5zZm9ybVN0YXRlO3oudHJhbnNmb3JtaW5nPSExO3ZhciBOPXoud3JpdGVjYjtpZighTilyZXR1cm4gdGhpcy5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJ3cml0''@;'; put 'put ''ZSBjYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMiKSk7ei53cml0ZWNodW5rPW51bGwsei53cml0ZWNiPW51bGwsbnVsbCE9UiYmdGhpcy5wdXNoKFIpLE4oRik7dmFyIE89dGhpcy5fcmVhZGFibGVTdGF0ZTtPLnJlYWRpbmc9ITEsKE8ubmVlZFJlYWRhYmxlfHxPLmxlbmd0aDxPLmhp''@;'; put 'put ''Z2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKE8uaGlnaFdhdGVyTWFyayl9ZnVuY3Rpb24gVihGKXtpZighKHRoaXMgaW5zdGFuY2VvZiBWKSlyZXR1cm4gbmV3IFYoRik7SS5jYWxsKHRoaXMsRiksdGhpcy5fdHJhbnNmb3JtU3RhdGU9e2FmdGVyVHJhbnNmb3JtOnAuYmluZCh0aGlzKSxuZWVk''@;'; put 'put ''VHJhbnNmb3JtOiExLHRyYW5zZm9ybWluZzohMSx3cml0ZWNiOm51bGwsd3JpdGVjaHVuazpudWxsLHdyaXRlZW5jb2Rpbmc6bnVsbH0sdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGU9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLEYmJigiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''Ri50cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09Ri50cmFuc2Zvcm0pLCJmdW5jdGlvbiI9PXR5cGVvZiBGLmZsdXNoJiYodGhpcy5fZmx1c2g9Ri5mbHVzaCkpLHRoaXMub24oInByZWZpbmlzaCIsdyl9ZnVuY3Rpb24gdygpe3ZhciBGPXRoaXM7ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMu''@;'; put 'put ''X2ZsdXNoP3RoaXMuX2ZsdXNoKGZ1bmN0aW9uKFIseil7UChGLFIseil9KTpQKHRoaXMsbnVsbCxudWxsKX1mdW5jdGlvbiBQKEYsUix6KXtpZihSKXJldHVybiBGLmVtaXQoImVycm9yIixSKTtpZihudWxsIT16JiZGLnB1c2goeiksRi5fd3JpdGFibGVTdGF0ZS5sZW5ndGgpdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gd3MubGVuZ3RoICE9IDAiKTtpZihGLl90cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1pbmcpdGhyb3cgbmV3IEVycm9yKCJDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gc3RpbGwgdHJhbnNmb3JtaW5nIik7cmV0dXJuIEYucHVz''@;'; put 'put ''aChudWxsKX1fLmluaGVyaXRzPWIoNzE5OTMpLF8uaW5oZXJpdHMoVixJKSxWLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKEYsUil7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRUcmFuc2Zvcm09ITEsSS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsRixSKX0sVi5wcm90b3R5cGUu''@;'; put 'put ''X3RyYW5zZm9ybT1mdW5jdGlvbihGLFIseil7dGhyb3cgbmV3IEVycm9yKCJfdHJhbnNmb3JtKCkgaXMgbm90IGltcGxlbWVudGVkIil9LFYucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihGLFIseil7dmFyIE49dGhpcy5fdHJhbnNmb3JtU3RhdGU7aWYoTi53cml0ZWNiPXosTi53cml0ZWNo''@;'; put 'put ''dW5rPUYsTi53cml0ZWVuY29kaW5nPVIsIU4udHJhbnNmb3JtaW5nKXt2YXIgTz10aGlzLl9yZWFkYWJsZVN0YXRlOyhOLm5lZWRUcmFuc2Zvcm18fE8ubmVlZFJlYWRhYmxlfHxPLmxlbmd0aDxPLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKE8uaGlnaFdhdGVyTWFyayl9fSxWLnByb3Rv''@;'; put 'put ''dHlwZS5fcmVhZD1mdW5jdGlvbihGKXt2YXIgUj10aGlzLl90cmFuc2Zvcm1TdGF0ZTtudWxsIT09Ui53cml0ZWNodW5rJiZSLndyaXRlY2ImJiFSLnRyYW5zZm9ybWluZz8oUi50cmFuc2Zvcm1pbmc9ITAsdGhpcy5fdHJhbnNmb3JtKFIud3JpdGVjaHVuayxSLndyaXRlZW5jb2RpbmcsUi5h''@;'; put 'put ''ZnRlclRyYW5zZm9ybSkpOlIubmVlZFRyYW5zZm9ybT0hMH0sVi5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oRixSKXt2YXIgej10aGlzO0kucHJvdG90eXBlLl9kZXN0cm95LmNhbGwodGhpcyxGLGZ1bmN0aW9uKE4pe1IoTiksei5lbWl0KCJjbG9zZSIpfSl9fSwzMTIxOihjZSxYLGIp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNzE5OTMpLF89Yig3MDQ2MykscD1iKDI3MDU0KS5CdWZmZXIsVj1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2''@;'; put 'put ''Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4''@;'; put 'put ''Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3''@;'; put 'put ''NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIw''@;'; put 'put ''MzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIy''@;'; put 'put ''OTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1''@;'; put 'put ''NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUw''@;'; put 'put ''Njg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzcz''@;'; put 'put ''MDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcx''@;'; put 'put ''MSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5''@;'; put 'put ''Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEyNDYxODk1OTFdLHc9bmV3IEFycmF5KDE2MCk7ZnVuY3Rpb24gUCgp''@;'; put 'put ''e3RoaXMuaW5pdCgpLHRoaXMuX3c9dyxfLmNhbGwodGhpcywxMjgsMTEyKX1mdW5jdGlvbiBGKHEsZWUsSil7cmV0dXJuIEpecSYoZWVeSil9ZnVuY3Rpb24gUihxLGVlLEope3JldHVybiBxJmVlfEomKHF8ZWUpfWZ1bmN0aW9uIHoocSxlZSl7cmV0dXJuKHE+Pj4yOHxlZTw8NCleKGVlPj4+''@;'; put 'put ''MnxxPDwzMCleKGVlPj4+N3xxPDwyNSl9ZnVuY3Rpb24gTihxLGVlKXtyZXR1cm4ocT4+PjE0fGVlPDwxOCleKHE+Pj4xOHxlZTw8MTQpXihlZT4+Pjl8cTw8MjMpfWZ1bmN0aW9uIE8ocSxlZSl7cmV0dXJuKHE+Pj4xfGVlPDwzMSleKHE+Pj44fGVlPDwyNClecT4+Pjd9ZnVuY3Rpb24gSyhx''@;'; put 'put ''LGVlKXtyZXR1cm4ocT4+PjF8ZWU8PDMxKV4ocT4+Pjh8ZWU8PDI0KV4ocT4+Pjd8ZWU8PDI1KX1mdW5jdGlvbiBaKHEsZWUpe3JldHVybihxPj4+MTl8ZWU8PDEzKV4oZWU+Pj4yOXxxPDwzKV5xPj4+Nn1mdW5jdGlvbiBZKHEsZWUpe3JldHVybihxPj4+MTl8ZWU8PDEzKV4oZWU+Pj4yOXxx''@;'; put 'put ''PDwzKV4ocT4+PjZ8ZWU8PDI2KX1mdW5jdGlvbiBXKHEsZWUpe3JldHVybiBxPj4+MDxlZT4+PjA/MTowfUkoUCxfKSxQLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FoPTE3NzkwMzM3MDMsdGhpcy5fYmg9MzE0NDEzNDI3Nyx0aGlzLl9jaD0xMDEzOTA0MjQyLHRo''@;'; put 'put ''aXMuX2RoPTI3NzM0ODA3NjIsdGhpcy5fZWg9MTM1OTg5MzExOSx0aGlzLl9maD0yNjAwODIyOTI0LHRoaXMuX2doPTUyODczNDYzNSx0aGlzLl9oaD0xNTQxNDU5MjI1LHRoaXMuX2FsPTQwODkyMzU3MjAsdGhpcy5fYmw9MjIyNzg3MzU5NSx0aGlzLl9jbD00MjcxMTc1NzIzLHRoaXMuX2Rs''@;'; put 'put ''PTE1OTU3NTAxMjksdGhpcy5fZWw9MjkxNzU2NTEzNyx0aGlzLl9mbD03MjU1MTExOTksdGhpcy5fZ2w9NDIxNTM4OTU0Nyx0aGlzLl9obD0zMjcwMzMyMDksdGhpc30sUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihxKXtmb3IodmFyIGVlPXRoaXMuX3csSj0wfHRoaXMuX2FoLHJlPTB8''@;'; put 'put ''dGhpcy5fYmgsaWU9MHx0aGlzLl9jaCx1ZT0wfHRoaXMuX2RoLGdlPTB8dGhpcy5fZWgsX2U9MHx0aGlzLl9maCxUZT0wfHRoaXMuX2doLE1lPTB8dGhpcy5faGgsWmU9MHx0aGlzLl9hbCxCPTB8dGhpcy5fYmwsZz0wfHRoaXMuX2NsLHk9MHx0aGlzLl9kbCx4PTB8dGhpcy5fZWwsQz0wfHRo''@;'; put 'put ''aXMuX2ZsLFQ9MHx0aGlzLl9nbCxIPTB8dGhpcy5faGwsaj0wO2o8MzI7ais9MillZVtqXT1xLnJlYWRJbnQzMkJFKDQqaiksZWVbaisxXT1xLnJlYWRJbnQzMkJFKDQqais0KTtmb3IoO2o8MTYwO2orPTIpe3ZhciBFPWVlW2otMzBdLG09ZWVbai0zMCsxXSxBPU8oRSxtKSxhZT1LKG0sRSks''@;'; put 'put ''bmU9WihFPWVlW2otNF0sbT1lZVtqLTQrMV0pLHNlPVkobSxFKSxKZT1lZVtqLTMyXSxpdD1lZVtqLTMyKzFdLHhlPWFlK2VlW2otMTQrMV18MCx5ZT1BK2VlW2otMTRdK1coeGUsYWUpfDA7eWU9KHllPXllK25lK1coeGU9eGUrc2V8MCxzZSl8MCkrSmUrVyh4ZT14ZStpdHwwLGl0KXwwLGVl''@;'; put 'put ''W2pdPXllLGVlW2orMV09eGV9Zm9yKHZhciBLZT0wO0tlPDE2MDtLZSs9Mil7eWU9ZWVbS2VdLHhlPWVlW0tlKzFdO3ZhciBqZT1SKEoscmUsaWUpLGtlPVIoWmUsQixnKSxIZT16KEosWmUpLExlPXooWmUsSiksUmU9TihnZSx4KSxWZT1OKHgsZ2UpLEFlPVZbS2VdLERlPVZbS2UrMV0sX3Q9''@;'; put 'put ''RihnZSxfZSxUZSkscnQ9Rih4LEMsVCksUWU9SCtWZXwwLHNuPU1lK1JlK1coUWUsSCl8MDtzbj0oc249KHNuPXNuK190K1coUWU9UWUrcnR8MCxydCl8MCkrQWUrVyhRZT1RZStEZXwwLERlKXwwKSt5ZStXKFFlPVFlK3hlfDAseGUpfDA7dmFyIHZ0PUxlK2tlfDAsU3Q9SGUramUrVyh2dCxM''@;'; put 'put ''ZSl8MDtNZT1UZSxIPVQsVGU9X2UsVD1DLF9lPWdlLEM9eCxnZT11ZStzbitXKHg9eStRZXwwLHkpfDAsdWU9aWUseT1nLGllPXJlLGc9QixyZT1KLEI9WmUsSj1zbitTdCtXKFplPVFlK3Z0fDAsUWUpfDB9dGhpcy5fYWw9dGhpcy5fYWwrWmV8MCx0aGlzLl9ibD10aGlzLl9ibCtCfDAsdGhp''@;'; put 'put ''cy5fY2w9dGhpcy5fY2wrZ3wwLHRoaXMuX2RsPXRoaXMuX2RsK3l8MCx0aGlzLl9lbD10aGlzLl9lbCt4fDAsdGhpcy5fZmw9dGhpcy5fZmwrQ3wwLHRoaXMuX2dsPXRoaXMuX2dsK1R8MCx0aGlzLl9obD10aGlzLl9obCtIfDAsdGhpcy5fYWg9dGhpcy5fYWgrSitXKHRoaXMuX2FsLFplKXww''@;'; put 'put ''LHRoaXMuX2JoPXRoaXMuX2JoK3JlK1codGhpcy5fYmwsQil8MCx0aGlzLl9jaD10aGlzLl9jaCtpZStXKHRoaXMuX2NsLGcpfDAsdGhpcy5fZGg9dGhpcy5fZGgrdWUrVyh0aGlzLl9kbCx5KXwwLHRoaXMuX2VoPXRoaXMuX2VoK2dlK1codGhpcy5fZWwseCl8MCx0aGlzLl9maD10aGlzLl9m''@;'; put 'put ''aCtfZStXKHRoaXMuX2ZsLEMpfDAsdGhpcy5fZ2g9dGhpcy5fZ2grVGUrVyh0aGlzLl9nbCxUKXwwLHRoaXMuX2hoPXRoaXMuX2hoK01lK1codGhpcy5faGwsSCl8MH0sUC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgcT1wLmFsbG9jVW5zYWZlKDY0KTtmdW5jdGlvbiBlZShKLHJl''@;'; put 'put ''LGllKXtxLndyaXRlSW50MzJCRShKLGllKSxxLndyaXRlSW50MzJCRShyZSxpZSs0KX1yZXR1cm4gZWUodGhpcy5fYWgsdGhpcy5fYWwsMCksZWUodGhpcy5fYmgsdGhpcy5fYmwsOCksZWUodGhpcy5fY2gsdGhpcy5fY2wsMTYpLGVlKHRoaXMuX2RoLHRoaXMuX2RsLDI0KSxlZSh0aGlzLl9l''@;'; put 'put ''aCx0aGlzLl9lbCwzMiksZWUodGhpcy5fZmgsdGhpcy5fZmwsNDApLGVlKHRoaXMuX2doLHRoaXMuX2dsLDQ4KSxlZSh0aGlzLl9oaCx0aGlzLl9obCw1NikscX0sY2UuZXhwb3J0cz1QfSwzMTM2OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPVgsXz1iKDg4NzIzKSxwPWIoMzkyMTAp''@;'; put 'put ''LFY9YigyMTgzMik7SS5hc3NlcnQ9cCxJLnRvQXJyYXk9Vi50b0FycmF5LEkuemVybzI9Vi56ZXJvMixJLnRvSGV4PVYudG9IZXgsSS5lbmNvZGU9Vi5lbmNvZGUsSS5nZXROQUY9ZnVuY3Rpb24gdyhOLE8sSyl7dmFyIFksWj1uZXcgQXJyYXkoTWF0aC5tYXgoTi5iaXRMZW5ndGgoKSxLKSsx''@;'; put 'put ''KTtmb3IoWT0wO1k8Wi5sZW5ndGg7WSs9MSlaW1ldPTA7dmFyIFc9MTw8TysxLHE9Ti5jbG9uZSgpO2ZvcihZPTA7WTxaLmxlbmd0aDtZKyspe3ZhciBlZSxKPXEuYW5kbG4oVy0xKTtxLmlzT2RkKCk/cS5pc3VibihlZT1KPihXPj4xKS0xPyhXPj4xKS1KOkopOmVlPTAsWltZXT1lZSxxLml1''@;'; put 'put ''c2hybigxKX1yZXR1cm4gWn0sSS5nZXRKU0Y9ZnVuY3Rpb24gUChOLE8pe3ZhciBLPVtbXSxbXV07Tj1OLmNsb25lKCksTz1PLmNsb25lKCk7Zm9yKHZhciBXLFo9MCxZPTA7Ti5jbXBuKC1aKT4wfHxPLmNtcG4oLVkpPjA7KXt2YXIgSixyZSxxPU4uYW5kbG4oMykrWiYzLGVlPU8uYW5kbG4o''@;'; put 'put ''MykrWSYzOzM9PT1xJiYocT0tMSksMz09PWVlJiYoZWU9LTEpLEo9MSZxPzMhPShXPU4uYW5kbG4oNykrWiY3KSYmNSE9PVd8fDIhPT1lZT9xOi1xOjAsS1swXS5wdXNoKEopLHJlPTEmZWU/MyE9KFc9Ty5hbmRsbig3KStZJjcpJiY1IT09V3x8MiE9PXE/ZWU6LWVlOjAsS1sxXS5wdXNoKHJl''@;'; put 'put ''KSwyKlo9PT1KKzEmJihaPTEtWiksMipZPT09cmUrMSYmKFk9MS1ZKSxOLml1c2hybigxKSxPLml1c2hybigxKX1yZXR1cm4gS30sSS5jYWNoZWRQcm9wZXJ0eT1mdW5jdGlvbiBGKE4sTyxLKXt2YXIgWj0iXyIrTztOLnByb3RvdHlwZVtPXT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10''@;'; put 'put ''aGlzW1pdP3RoaXNbWl06dGhpc1taXT1LLmNhbGwodGhpcyl9fSxJLnBhcnNlQnl0ZXM9ZnVuY3Rpb24gUihOKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIE4/SS50b0FycmF5KE4sImhleCIpOk59LEkuaW50RnJvbUxFPWZ1bmN0aW9uIHooTil7cmV0dXJuIG5ldyBfKE4sImhleCIsImxlIil9''@;'; put 'put ''fSwzMTc5OihjZSxYKT0+e3ZhciBiLEksXzshZnVuY3Rpb24ocCl7aWYodHlwZW9mIERPX05PVF9FWFBPUlRfSlNaSVA+InUiKWNlLmV4cG9ydHM9cCgpO2Vsc2UgaWYodHlwZW9mIERPX05PVF9FWFBPUlRfSlNaSVA+InUiKUpTWmlwU3luYz1wKCksST1bXSx2b2lkIDAhPT0oXz0iZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YoYj1wKT9iLmFwcGx5KFgsSSk6YikmJihjZS5leHBvcnRzPV8pO2Vsc2V7dmFyIFY7dHlwZW9mIGdsb2JhbFRoaXM8InUiP1Y9Z2xvYmFsVGhpczp0eXBlb2Ygd2luZG93PCJ1Ij9WPXdpbmRvdzp0eXBlb2YgZ2xvYmFsPCJ1Ij9WPWdsb2JhbDp0eXBlb2YgJDwidSImJiQu''@;'; put 'put ''Z2xvYmFsP1Y9JC5nbG9iYWw6dHlwZW9mIHNlbGY8InUiJiYoVj1zZWxmKSxWLkpTWmlwU3luYz1wKCl9fShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBQKEYsUix6KXtmdW5jdGlvbiBOKFosWSl7aWYoIVJbWl0pe2lmKCFGW1pdKXtpZihPKXJldHVybiBPKFosITApO3Rocm93IG5ldyBF''@;'; put 'put ''cnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK1orIiciKX12YXIgcT1SW1pdPXtleHBvcnRzOnt9fTtGW1pdWzBdLmNhbGwocS5leHBvcnRzLGZ1bmN0aW9uKGVlKXtyZXR1cm4gTihGW1pdWzFdW2VlXXx8ZWUpfSxxLHEuZXhwb3J0cyxQLEYsUix6KX1yZXR1cm4gUltaXS5leHBvcnRzfWZv''@;'; put 'put ''cih2YXIgTz12b2lkIDAsSz0wO0s8ei5sZW5ndGg7SysrKU4oeltLXSk7cmV0dXJuIE59KHsxOltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO3ZhciB6PSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSI7Ui5lbmNv''@;'; put 'put ''ZGU9ZnVuY3Rpb24oTixPKXtmb3IodmFyIFosWSxXLHEsZWUsSixyZSxLPSIiLGllPTA7aWU8Ti5sZW5ndGg7KXE9KFo9Ti5jaGFyQ29kZUF0KGllKyspKT4+MixlZT0oMyZaKTw8NHwoWT1OLmNoYXJDb2RlQXQoaWUrKykpPj40LEo9KDE1JlkpPDwyfChXPU4uY2hhckNvZGVBdChpZSsrKSk+''@;'; put 'put ''PjYscmU9NjMmVyxpc05hTihZKT9KPXJlPTY0OmlzTmFOKFcpJiYocmU9NjQpLEs9Syt6LmNoYXJBdChxKSt6LmNoYXJBdChlZSkrei5jaGFyQXQoSikrei5jaGFyQXQocmUpO3JldHVybiBLfSxSLmRlY29kZT1mdW5jdGlvbihOLE8pe3ZhciBZLFcscSxlZSxKLHJlLEs9IiIsaWU9MDtmb3Io''@;'; put 'put ''Tj1OLnJlcGxhY2UoL1teQS1aYS16MC05XCtcL1w9XS9nLCIiKTtpZTxOLmxlbmd0aDspcT16LmluZGV4T2YoTi5jaGFyQXQoaWUrKykpLFk9KDE1JihlZT16LmluZGV4T2YoTi5jaGFyQXQoaWUrKykpKSk8PDR8KEo9ei5pbmRleE9mKE4uY2hhckF0KGllKyspKSk+PjIsVz0oMyZKKTw8Nnwo''@;'; put 'put ''cmU9ei5pbmRleE9mKE4uY2hhckF0KGllKyspKSksSys9U3RyaW5nLmZyb21DaGFyQ29kZShxPDwyfGVlPj40KSw2NCE9SiYmKEsrPVN0cmluZy5mcm9tQ2hhckNvZGUoWSkpLDY0IT1yZSYmKEsrPVN0cmluZy5mcm9tQ2hhckNvZGUoVykpO3JldHVybiBLfX0se31dLDI6W2Z1bmN0aW9uKFAs''@;'; put 'put ''RixSKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24geigpe3RoaXMuY29tcHJlc3NlZFNpemU9MCx0aGlzLnVuY29tcHJlc3NlZFNpemU9MCx0aGlzLmNyYzMyPTAsdGhpcy5jb21wcmVzc2lvbk1ldGhvZD1udWxsLHRoaXMuY29tcHJlc3NlZENvbnRlbnQ9bnVsbH16LnByb3RvdHlwZT17Z2V0Q29u''@;'; put 'put ''dGVudDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxnZXRDb21wcmVzc2VkQ29udGVudDpmdW5jdGlvbigpe3JldHVybiBudWxsfX0sRi5leHBvcnRzPXp9LHt9XSwzOltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO1IuU1RPUkU9e21hZ2ljOiJcMFwwIixjb21wcmVzczpmdW5jdGlvbih6''@;'; put 'put ''KXtyZXR1cm4gen0sdW5jb21wcmVzczpmdW5jdGlvbih6KXtyZXR1cm4gen0sY29tcHJlc3NJbnB1dFR5cGU6bnVsbCx1bmNvbXByZXNzSW5wdXRUeXBlOm51bGx9LFIuREVGTEFURT1QKCIuL2ZsYXRlIil9LHsiLi9mbGF0ZSI6OH1dLDQ6W2Z1bmN0aW9uKFAsRixSKXsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIHo9UCgiLi91dGlscyIpLE49WzAsMTk5Njk1OTg5NCwzOTkzOTE5Nzg4LDI1Njc1MjQ3OTQsMTI0NjM0MTM3LDE4ODYwNTc2MTUsMzkxNTYyMTY4NSwyNjU3MzkyMDM1LDI0OTI2ODI3NCwyMDQ0NTA4MzI0LDM3NzIxMTUyMzAsMjU0NzE3Nzg2NCwxNjI5NDE5OTUsMjEyNTU2MTAyMSwz''@;'; put 'put ''ODg3NjA3MDQ3LDI0Mjg0NDQwNDksNDk4NTM2NTQ4LDE3ODk5Mjc2NjYsNDA4OTAxNjY0OCwyMjI3MDYxMjE0LDQ1MDU0ODg2MSwxODQzMjU4NjAzLDQxMDc1ODA3NTMsMjIxMTY3NzYzOSwzMjU4ODM5OTAsMTY4NDc3NzE1Miw0MjUxMTIyMDQyLDIzMjE5MjY2MzYsMzM1NjMzNDg3LDE2NjEz''@;'; put 'put ''NjU0NjUsNDE5NTMwMjc1NSwyMzY2MTE1MzE3LDk5NzA3MzA5NiwxMjgxOTUzODg2LDM1Nzk4NTUzMzIsMjcyNDY4ODI0MiwxMDA2ODg4MTQ1LDEyNTg2MDc2ODcsMzUyNDEwMTYyOSwyNzY4OTQyNDQzLDkwMTA5NzcyMiwxMTE5MDAwNjg0LDM2ODY1MTcyMDYsMjg5ODA2NTcyOCw4NTMwNDQ0''@;'; put 'put ''NTEsMTE3MjI2NjEwMSwzNzA1MDE1NzU5LDI4ODI2MTY2NjUsNjUxNzY3OTgwLDEzNzM1MDM1NDYsMzM2OTU1NDMwNCwzMjE4MTA0NTk4LDU2NTUwNzI1MywxNDU0NjIxNzMxLDM0ODUxMTE3MDUsMzA5OTQzNjMwMyw2NzEyNjY5NzQsMTU5NDE5ODAyNCwzMzIyNzMwOTMwLDI5NzAzNDc4MTIs''@;'; put 'put ''Nzk1ODM1NTI3LDE0ODMyMzAyMjUsMzI0NDM2NzI3NSwzMDYwMTQ5NTY1LDE5OTQxNDYxOTIsMzExNTg1MzQsMjU2MzkwNzc3Miw0MDIzNzE3OTMwLDE5MDc0NTk0NjUsMTEyNjM3MjE1LDI2ODAxNTMyNTMsMzkwNDQyNzA1OSwyMDEzNzc2MjkwLDI1MTcyMjAzNiwyNTE3MjE1Mzc0LDM3NzU4''@;'; put 'put ''MzAwNDAsMjEzNzY1Njc2MywxNDEzNzY4MTMsMjQzOTI3NzcxOSwzODY1MjcxMjk3LDE4MDIxOTU0NDQsNDc2ODY0ODY2LDIyMzgwMDEzNjgsNDA2NjUwODg3OCwxODEyMzcwOTI1LDQ1MzA5MjczMSwyMTgxNjI1MDI1LDQxMTE0NTEyMjMsMTcwNjA4ODkwMiwzMTQwNDI3MDQsMjM0NDUzMjIw''@;'; put 'put ''Miw0MjQwMDE3NTMyLDE2NTg2NTgyNzEsMzY2NjE5OTc3LDIzNjI2NzAzMjMsNDIyNDk5NDQwNSwxMzAzNTM1OTYwLDk4NDk2MTQ4NiwyNzQ3MDA3MDkyLDM1NjkwMzc1MzgsMTI1NjE3MDgxNywxMDM3NjA0MzExLDI3NjUyMTA3MzMsMzU1NDA3OTk5NSwxMTMxMDE0NTA2LDg3OTY3OTk5Niwy''@;'; put 'put ''OTA5MjQzNDYyLDM2NjM3NzE4NTYsMTE0MTEyNDQ2Nyw4NTU4NDIyNzcsMjg1MjgwMTYzMSwzNzA4NjQ4NjQ5LDEzNDI1MzM5NDgsNjU0NDU5MzA2LDMxODgzOTYwNDgsMzM3MzAxNTE3NCwxNDY2NDc5OTA5LDU0NDE3OTYzNSwzMTEwNTIzOTEzLDM0NjI1MjIwMTUsMTU5MTY3MTA1NCw3MDIx''@;'; put 'put ''Mzg3NzYsMjk2NjQ2MDQ1MCwzMzUyNzk5NDEyLDE1MDQ5MTg4MDcsNzgzNTUxODczLDMwODI2NDA0NDMsMzIzMzQ0Mjk4OSwzOTg4MjkyMzg0LDI1OTYyNTQ2NDYsNjIzMTcwNjgsMTk1NzgxMDg0MiwzOTM5ODQ1OTQ1LDI2NDc4MTYxMTEsODE0NzA5OTcsMTk0MzgwMzUyMywzODE0OTE4OTMw''@;'; put 'put ''LDI0ODk1OTY4MDQsMjI1Mjc0NDMwLDIwNTM3OTAzNzYsMzgyNjE3NTc1NSwyNDY2OTA2MDEzLDE2NzgxNjc0MywyMDk3NjUxMzc3LDQwMjc1NTI1ODAsMjI2NTQ5MDM4Niw1MDM0NDQwNzIsMTc2MjA1MDgxNCw0MTUwNDE3MjQ1LDIxNTQxMjkzNTUsNDI2NTIyMjI1LDE4NTI1MDc4NzksNDI3''@;'; put 'put ''NTMxMzUyNiwyMzEyMzE3OTIwLDI4Mjc1MzYyNiwxNzQyNTU1ODUyLDQxODk3MDgxNDMsMjM5NDg3Nzk0NSwzOTc5MTc3NjMsMTYyMjE4MzYzNywzNjA0MzkwODg4LDI3MTQ4NjY1NTgsOTUzNzI5NzMyLDEzNDAwNzY2MjYsMzUxODcxOTk4NSwyNzk3MzYwOTk5LDEwNjg4MjgzODEsMTIxOTYz''@;'; put 'put ''ODg1OSwzNjI0NzQxODUwLDI5MzY2NzUxNDgsOTA2MTg1NDYyLDEwOTA4MTI1MTIsMzc0NzY3MjAwMywyODI1Mzc5NjY5LDgyOTMyOTEzNSwxMTgxMzM1MTYxLDM0MTIxNzc4MDQsMzE2MDgzNDg0Miw2MjgwODU0MDgsMTM4MjYwNTM2NiwzNDIzMzY5MTA5LDMxMzgwNzg0NjcsNTcwNTYyMjMz''@;'; put 'put ''LDE0MjY0MDA4MTUsMzMxNzMxNjU0MiwyOTk4NzMzNjA4LDczMzIzOTk1NCwxNTU1MjYxOTU2LDMyNjg5MzU1OTEsMzA1MDM2MDYyNSw3NTI0NTk0MDMsMTU0MTMyMDIyMSwyNjA3MDcxOTIwLDM5NjU5NzMwMzAsMTk2OTkyMjk3Miw0MDczNTQ5OCwyNjE3ODM3MjI1LDM5NDM1NzcxNTEsMTkx''@;'; put 'put ''MzA4Nzg3Nyw4MzkwODM3MSwyNTEyMzQxNjM0LDM4MDM3NDA2OTIsMjA3NTIwODYyMiwyMTMyNjExMTIsMjQ2MzI3MjYwMywzODU1OTkwMjg1LDIwOTQ4NTQwNzEsMTk4OTU4ODgxLDIyNjIwMjkwMTIsNDA1NzI2MDYxMCwxNzU5MzU5OTkyLDUzNDQxNDE5MCwyMTc2NzE4NTQxLDQxMzkzMjkx''@;'; put 'put ''MTUsMTg3MzgzNjAwMSw0MTQ2NjQ1NjcsMjI4MjI0ODkzNCw0Mjc5MjAwMzY4LDE3MTE2ODQ1NTQsMjg1MjgxMTE2LDI0MDU4MDE3MjcsNDE2NzIxNjc0NSwxNjM0NDY3Nzk1LDM3NjIyOTcwMSwyNjg1MDY3ODk2LDM2MDgwMDc0MDYsMTMwODkxODYxMiw5NTY1NDM5MzgsMjgwODU1NTEwNSwz''@;'; put 'put ''NDk1OTU4MjYzLDEyMzE2MzYzMDEsMTA0NzQyNzAzNSwyOTMyOTU5ODE4LDM2NTQ3MDM4MzYsMTA4ODM1OTI3MCw5MzY5MThlMywyODQ3NzE0ODk5LDM3MzY4Mzc4MjksMTIwMjkwMDg2Myw4MTcyMzM4OTcsMzE4MzM0MjEwOCwzNDAxMjM3MTMwLDE0MDQyNzc1NTIsNjE1ODE4MTUwLDMxMzQy''@;'; put 'put ''MDc0OTMsMzQ1MzQyMTIwMywxNDIzODU3NDQ5LDYwMTQ1MDQzMSwzMDA5ODM3NjE0LDMyOTQ3MTA0NTYsMTU2NzEwMzc0Niw3MTE5Mjg3MjQsMzAyMDY2ODQ3MSwzMjcyMzgwMDY1LDE1MTAzMzQyMzUsNzU1MTY3MTE3XTtGLmV4cG9ydHM9ZnVuY3Rpb24oSyxaKXtpZih0eXBlb2YgSz4idSJ8''@;'; put 'put ''fCFLLmxlbmd0aClyZXR1cm4gMDt2YXIgWT0ic3RyaW5nIiE9PXouZ2V0VHlwZU9mKEspO3R5cGVvZiBaPiJ1IiYmKFo9MCk7dmFyIGVlPTA7Wj1+Wjtmb3IodmFyIEo9MCxyZT1LLmxlbmd0aDtKPHJlO0orKyllZT1ZP0tbSl06Sy5jaGFyQ29kZUF0KEopLFo9Wj4+PjheTlsyNTUmKFpeZWUp''@;'; put 'put ''XTtyZXR1cm5+Wn19LHsiLi91dGlscyI6MjF9XSw1OltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vdXRpbHMiKTtmdW5jdGlvbiBOKE8pe3RoaXMuZGF0YT1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5pbmRleD0wfU4ucHJvdG90eXBlPXtjaGVja09mZnNldDpmdW5j''@;'; put 'put ''dGlvbihPKXt0aGlzLmNoZWNrSW5kZXgodGhpcy5pbmRleCtPKX0sY2hlY2tJbmRleDpmdW5jdGlvbihPKXtpZih0aGlzLmxlbmd0aDxPfHxPPDApdGhyb3cgbmV3IEVycm9yKCJFbmQgb2YgZGF0YSByZWFjaGVkIChkYXRhIGxlbmd0aCA9ICIrdGhpcy5sZW5ndGgrIiwgYXNrZWQgaW5kZXgg''@;'; put 'put ''PSAiK08rIikuIENvcnJ1cHRlZCB6aXAgPyIpfSxzZXRJbmRleDpmdW5jdGlvbihPKXt0aGlzLmNoZWNrSW5kZXgoTyksdGhpcy5pbmRleD1PfSxza2lwOmZ1bmN0aW9uKE8pe3RoaXMuc2V0SW5kZXgodGhpcy5pbmRleCtPKX0sYnl0ZUF0OmZ1bmN0aW9uKE8pe30scmVhZEludDpmdW5jdGlv''@;'; put 'put ''bihPKXt2YXIgWixLPTA7Zm9yKHRoaXMuY2hlY2tPZmZzZXQoTyksWj10aGlzLmluZGV4K08tMTtaPj10aGlzLmluZGV4O1otLSlLPShLPDw4KSt0aGlzLmJ5dGVBdChaKTtyZXR1cm4gdGhpcy5pbmRleCs9TyxLfSxyZWFkU3RyaW5nOmZ1bmN0aW9uKE8pe3JldHVybiB6LnRyYW5zZm9ybVRv''@;'; put 'put ''KCJzdHJpbmciLHRoaXMucmVhZERhdGEoTykpfSxyZWFkRGF0YTpmdW5jdGlvbihPKXt9LGxhc3RJbmRleE9mU2lnbmF0dXJlOmZ1bmN0aW9uKE8pe30scmVhZERhdGU6ZnVuY3Rpb24oKXt2YXIgTz10aGlzLnJlYWRJbnQoNCk7cmV0dXJuIG5ldyBEYXRlKDE5ODArKE8+PjI1JjEyNyksKE8+''@;'; put 'put ''PjIxJjE1KS0xLE8+PjE2JjMxLE8+PjExJjMxLE8+PjUmNjMsKDMxJk8pPDwxKX19LEYuZXhwb3J0cz1OfSx7Ii4vdXRpbHMiOjIxfV0sNjpbZnVuY3Rpb24oUCxGLFIpeyJ1c2Ugc3RyaWN0IjtSLmJhc2U2ND0hMSxSLmJpbmFyeT0hMSxSLmRpcj0hMSxSLmNyZWF0ZUZvbGRlcnM9ITEsUi5k''@;'; put 'put ''YXRlPW51bGwsUi5jb21wcmVzc2lvbj1udWxsLFIuY29tbWVudD1udWxsfSx7fV0sNzpbZnVuY3Rpb24oUCxGLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL3V0aWxzIik7Ui5zdHJpbmcyYmluYXJ5PWZ1bmN0aW9uKE4pe3JldHVybiB6LnN0cmluZzJiaW5hcnkoTil9LFIuc3RyaW5nMlVp''@;'; put 'put ''bnQ4QXJyYXk9ZnVuY3Rpb24oTil7cmV0dXJuIHoudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLE4pfSxSLnVpbnQ4QXJyYXkyU3RyaW5nPWZ1bmN0aW9uKE4pe3JldHVybiB6LnRyYW5zZm9ybVRvKCJzdHJpbmciLE4pfSxSLnN0cmluZzJCbG9iPWZ1bmN0aW9uKE4pe3ZhciBPPXoudHJhbnNm''@;'; put 'put ''b3JtVG8oImFycmF5YnVmZmVyIixOKTtyZXR1cm4gei5hcnJheUJ1ZmZlcjJCbG9iKE8pfSxSLmFycmF5QnVmZmVyMkJsb2I9ZnVuY3Rpb24oTil7cmV0dXJuIHouYXJyYXlCdWZmZXIyQmxvYihOKX0sUi50cmFuc2Zvcm1Ubz1mdW5jdGlvbihOLE8pe3JldHVybiB6LnRyYW5zZm9ybVRvKE4s''@;'; put 'put ''Tyl9LFIuZ2V0VHlwZU9mPWZ1bmN0aW9uKE4pe3JldHVybiB6LmdldFR5cGVPZihOKX0sUi5jaGVja1N1cHBvcnQ9ZnVuY3Rpb24oTil7cmV0dXJuIHouY2hlY2tTdXBwb3J0KE4pfSxSLk1BWF9WQUxVRV8xNkJJVFM9ei5NQVhfVkFMVUVfMTZCSVRTLFIuTUFYX1ZBTFVFXzMyQklUUz16Lk1B''@;'; put 'put ''WF9WQUxVRV8zMkJJVFMsUi5wcmV0dHk9ZnVuY3Rpb24oTil7cmV0dXJuIHoucHJldHR5KE4pfSxSLmZpbmRDb21wcmVzc2lvbj1mdW5jdGlvbihOKXtyZXR1cm4gei5maW5kQ29tcHJlc3Npb24oTil9LFIuaXNSZWdFeHA9ZnVuY3Rpb24oTil7cmV0dXJuIHouaXNSZWdFeHAoTil9fSx7Ii4v''@;'; put 'put ''dXRpbHMiOjIxfV0sODpbZnVuY3Rpb24oUCxGLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10eXBlb2YgVWludDhBcnJheTwidSImJnR5cGVvZiBVaW50MTZBcnJheTwidSImJnR5cGVvZiBVaW50MzJBcnJheTwidSIsTj1QKCJwYWtvIik7Ui51bmNvbXByZXNzSW5wdXRUeXBlPXo/InVpbnQ4YXJy''@;'; put 'put ''YXkiOiJhcnJheSIsUi5jb21wcmVzc0lucHV0VHlwZT16PyJ1aW50OGFycmF5IjoiYXJyYXkiLFIubWFnaWM9IlxiXDAiLFIuY29tcHJlc3M9ZnVuY3Rpb24oTyl7cmV0dXJuIE4uZGVmbGF0ZVJhdyhPKX0sUi51bmNvbXByZXNzPWZ1bmN0aW9uKE8pe3JldHVybiBOLmluZmxhdGVSYXcoTyl9''@;'; put 'put ''fSx7cGFrbzoyNH1dLDk6W2Z1bmN0aW9uKFAsRixSKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi9iYXNlNjQiKTtmdW5jdGlvbiBOKE8sSyl7aWYoISh0aGlzIGluc3RhbmNlb2YgTikpcmV0dXJuIG5ldyBOKE8sSyk7dGhpcy5maWxlcz17fSx0aGlzLmNvbW1lbnQ9bnVsbCx0aGlzLnJvb3Q9''@;'; put 'put ''IiIsTyYmdGhpcy5sb2FkKE8sSyksdGhpcy5jbG9uZT1mdW5jdGlvbigpe3ZhciBaPW5ldyBOO2Zvcih2YXIgWSBpbiB0aGlzKSJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzW1ldJiYoWltZXT10aGlzW1ldKTtyZXR1cm4gWn19KE4ucHJvdG90eXBlPVAoIi4vb2JqZWN0IikpLmxvYWQ9UCgiLi9s''@;'; put 'put ''b2FkIiksTi5zdXBwb3J0PVAoIi4vc3VwcG9ydCIpLE4uZGVmYXVsdHM9UCgiLi9kZWZhdWx0cyIpLE4udXRpbHM9UCgiLi9kZXByZWNhdGVkUHVibGljVXRpbHMiKSxOLmJhc2U2ND17ZW5jb2RlOmZ1bmN0aW9uKE8pe3JldHVybiB6LmVuY29kZShPKX0sZGVjb2RlOmZ1bmN0aW9uKE8pe3Jl''@;'; put 'put ''dHVybiB6LmRlY29kZShPKX19LE4uY29tcHJlc3Npb25zPVAoIi4vY29tcHJlc3Npb25zIiksRi5leHBvcnRzPU59LHsiLi9iYXNlNjQiOjEsIi4vY29tcHJlc3Npb25zIjozLCIuL2RlZmF1bHRzIjo2LCIuL2RlcHJlY2F0ZWRQdWJsaWNVdGlscyI6NywiLi9sb2FkIjoxMCwiLi9vYmplY3Qi''@;'; put 'put ''OjEzLCIuL3N1cHBvcnQiOjE3fV0sMTA6W2Z1bmN0aW9uKFAsRixSKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi9iYXNlNjQiKSxOPVAoIi4vemlwRW50cmllcyIpO0YuZXhwb3J0cz1mdW5jdGlvbihPLEspe3ZhciBaLFksVyxxO2ZvcigoSz1LfHx7fSkuYmFzZTY0JiYoTz16LmRlY29kZShP''@;'; put 'put ''KSksWj0oWT1uZXcgTihPLEspKS5maWxlcyxXPTA7VzxaLmxlbmd0aDtXKyspdGhpcy5maWxlKChxPVpbV10pLmZpbGVOYW1lLHEuZGVjb21wcmVzc2VkLHtiaW5hcnk6ITAsb3B0aW1pemVkQmluYXJ5U3RyaW5nOiEwLGRhdGU6cS5kYXRlLGRpcjpxLmRpcixjb21tZW50OnEuZmlsZUNvbW1l''@;'; put 'put ''bnQubGVuZ3RoP3EuZmlsZUNvbW1lbnQ6bnVsbCxjcmVhdGVGb2xkZXJzOksuY3JlYXRlRm9sZGVyc30pO3JldHVybiBZLnppcENvbW1lbnQubGVuZ3RoJiYodGhpcy5jb21tZW50PVkuemlwQ29tbWVudCksdGhpc319LHsiLi9iYXNlNjQiOjEsIi4vemlwRW50cmllcyI6MjJ9XSwxMTpbZnVu''@;'; put 'put ''Y3Rpb24oUCxGLFIpeyhmdW5jdGlvbih6KXsidXNlIHN0cmljdCI7dmFyIE49ZnVuY3Rpb24oKXt9O2lmKHR5cGVvZiB6PCJ1Iil7dmFyIE89IXouZnJvbTtpZighTyl0cnl7ei5mcm9tKCJmb28iLCJ1dGY4Iil9Y2F0Y2h7Tz0hMH1OPU8/ZnVuY3Rpb24oSyxaKXtyZXR1cm4gWj9uZXcgeihL''@;'; put 'put ''LFopOm5ldyB6KEspfTp6LmZyb20uYmluZCh6KSx6LmFsbG9jfHwoei5hbGxvYz1mdW5jdGlvbihLKXtyZXR1cm4gbmV3IHooSyl9KX1GLmV4cG9ydHM9ZnVuY3Rpb24oSyxaKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIEs/ei5hbGxvYyhLKTpOKEssWil9LEYuZXhwb3J0cy50ZXN0PWZ1bmN0''@;'; put 'put ''aW9uKEspe3JldHVybiB6LmlzQnVmZmVyKEspfX0pLmNhbGwodGhpcyx0eXBlb2YgQnVmZmVyPCJ1Ij9CdWZmZXI6dm9pZCAwKX0se31dLDEyOltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vdWludDhBcnJheVJlYWRlciIpO2Z1bmN0aW9uIE4oTyl7dGhpcy5kYXRh''@;'; put 'put ''PU8sdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aCx0aGlzLmluZGV4PTB9KE4ucHJvdG90eXBlPW5ldyB6KS5yZWFkRGF0YT1mdW5jdGlvbihPKXt0aGlzLmNoZWNrT2Zmc2V0KE8pO3ZhciBLPXRoaXMuZGF0YS5zbGljZSh0aGlzLmluZGV4LHRoaXMuaW5kZXgrTyk7cmV0dXJuIHRoaXMu''@;'; put 'put ''aW5kZXgrPU8sS30sRi5leHBvcnRzPU59LHsiLi91aW50OEFycmF5UmVhZGVyIjoxOH1dLDEzOltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vc3VwcG9ydCIpLE49UCgiLi91dGlscyIpLE89UCgiLi9jcmMzMiIpLEs9UCgiLi9zaWduYXR1cmUiKSxaPVAoIi4vZGVm''@;'; put 'put ''YXVsdHMiKSxZPVAoIi4vYmFzZTY0IiksVz1QKCIuL2NvbXByZXNzaW9ucyIpLHE9UCgiLi9jb21wcmVzc2VkT2JqZWN0IiksZWU9UCgiLi9ub2RlQnVmZmVyIiksSj1QKCIuL3V0ZjgiKSxyZT1QKCIuL3N0cmluZ1dyaXRlciIpLGllPVAoIi4vdWludDhBcnJheVdyaXRlciIpLHVlPWZ1bmN0''@;'; put 'put ''aW9uKGope2lmKGouX2RhdGEgaW5zdGFuY2VvZiBxJiYoai5fZGF0YT1qLl9kYXRhLmdldENvbnRlbnQoKSxqLm9wdGlvbnMuYmluYXJ5PSEwLGoub3B0aW9ucy5iYXNlNjQ9ITEsInVpbnQ4YXJyYXkiPT09Ti5nZXRUeXBlT2Yoai5fZGF0YSkpKXt2YXIgRT1qLl9kYXRhO2ouX2RhdGE9bmV3''@;'; put 'put ''IFVpbnQ4QXJyYXkoRS5sZW5ndGgpLDAhPT1FLmxlbmd0aCYmai5fZGF0YS5zZXQoRSwwKX1yZXR1cm4gai5fZGF0YX0sZ2U9ZnVuY3Rpb24oail7dmFyIEU9dWUoaik7cmV0dXJuInN0cmluZyI9PT1OLmdldFR5cGVPZihFKT8hai5vcHRpb25zLmJpbmFyeSYmei5ub2RlYnVmZmVyP2VlKEUs''@;'; put 'put ''InV0Zi04Iik6ai5hc0JpbmFyeSgpOkV9LF9lPWZ1bmN0aW9uKGope3ZhciBFPXVlKHRoaXMpO3JldHVybiBudWxsPT09RXx8dHlwZW9mIEU+InUiPyIiOih0aGlzLm9wdGlvbnMuYmFzZTY0JiYoRT1ZLmRlY29kZShFKSksRT1qJiZ0aGlzLm9wdGlvbnMuYmluYXJ5P0gudXRmOGRlY29kZShF''@;'; put 'put ''KTpOLnRyYW5zZm9ybVRvKCJzdHJpbmciLEUpLCFqJiYhdGhpcy5vcHRpb25zLmJpbmFyeSYmKEU9Ti50cmFuc2Zvcm1Ubygic3RyaW5nIixILnV0ZjhlbmNvZGUoRSkpKSxFKX0sVGU9ZnVuY3Rpb24oaixFLG0pe3RoaXMubmFtZT1qLHRoaXMuZGlyPW0uZGlyLHRoaXMuZGF0ZT1tLmRhdGUs''@;'; put 'put ''dGhpcy5jb21tZW50PW0uY29tbWVudCx0aGlzLl9kYXRhPUUsdGhpcy5vcHRpb25zPW0sdGhpcy5faW5pdGlhbE1ldGFkYXRhPXtkaXI6bS5kaXIsZGF0ZTptLmRhdGV9fTtUZS5wcm90b3R5cGU9e2FzVGV4dDpmdW5jdGlvbigpe3JldHVybiBfZS5jYWxsKHRoaXMsITApfSxhc0JpbmFyeTpm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBfZS5jYWxsKHRoaXMsITEpfSxhc05vZGVCdWZmZXI6ZnVuY3Rpb24oKXt2YXIgaj1nZSh0aGlzKTtyZXR1cm4gTi50cmFuc2Zvcm1Ubygibm9kZWJ1ZmZlciIsail9LGFzVWludDhBcnJheTpmdW5jdGlvbigpe3ZhciBqPWdlKHRoaXMpO3JldHVybiBOLnRyYW5z''@;'; put 'put ''Zm9ybVRvKCJ1aW50OGFycmF5IixqKX0sYXNBcnJheUJ1ZmZlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFzVWludDhBcnJheSgpLmJ1ZmZlcn19O3ZhciBNZT1mdW5jdGlvbihqLEUpe3ZhciBBLG09IiI7Zm9yKEE9MDtBPEU7QSsrKW0rPVN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JmopLGo+''@;'; put 'put ''Pj49ODtyZXR1cm4gbX0sWmU9ZnVuY3Rpb24oKXt2YXIgRSxtLGo9e307Zm9yKEU9MDtFPGFyZ3VtZW50cy5sZW5ndGg7RSsrKWZvcihtIGluIGFyZ3VtZW50c1tFXSlhcmd1bWVudHNbRV0uaGFzT3duUHJvcGVydHkobSkmJnR5cGVvZiBqW21dPiJ1IiYmKGpbbV09YXJndW1lbnRzW0VdW21d''@;'; put 'put ''KTtyZXR1cm4gan0sZz1mdW5jdGlvbihqLEUsbSl7dmFyIGFlLEE9Ti5nZXRUeXBlT2YoRSk7aWYobT1mdW5jdGlvbihqKXtyZXR1cm4hMD09PShqPWp8fHt9KS5iYXNlNjQmJm51bGw9PWouYmluYXJ5JiYoai5iaW5hcnk9ITApLChqPVplKGosWikpLmRhdGU9ai5kYXRlfHxuZXcgRGF0ZSxu''@;'; put 'put ''dWxsIT09ai5jb21wcmVzc2lvbiYmKGouY29tcHJlc3Npb249ai5jb21wcmVzc2lvbi50b1VwcGVyQ2FzZSgpKSxqfShtKSxtLmNyZWF0ZUZvbGRlcnMmJihhZT15KGopKSYmeC5jYWxsKHRoaXMsYWUsITApLG0uZGlyfHxudWxsPT09RXx8dHlwZW9mIEU+InUiKW0uYmFzZTY0PSExLG0uYmlu''@;'; put 'put ''YXJ5PSExLEU9bnVsbDtlbHNlIGlmKCJzdHJpbmciPT09QSltLmJpbmFyeSYmIW0uYmFzZTY0JiYhMCE9PW0ub3B0aW1pemVkQmluYXJ5U3RyaW5nJiYoRT1OLnN0cmluZzJiaW5hcnkoRSkpO2Vsc2V7aWYobS5iYXNlNjQ9ITEsbS5iaW5hcnk9ITAsIShBfHxFIGluc3RhbmNlb2YgcSkpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJUaGUgZGF0YSBvZiAnIitqKyInIGlzIGluIGFuIHVuc3VwcG9ydGVkIGZvcm1hdCAhIik7ImFycmF5YnVmZmVyIj09PUEmJihFPU4udHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLEUpKX12YXIgbmU9bmV3IFRlKGosRSxtKTtyZXR1cm4gdGhpcy5maWxlc1tqXT1uZSxu''@;'; put 'put ''ZX0seT1mdW5jdGlvbihqKXsiLyI9PWouc2xpY2UoLTEpJiYoaj1qLnN1YnN0cmluZygwLGoubGVuZ3RoLTEpKTt2YXIgRT1qLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuIEU+MD9qLnN1YnN0cmluZygwLEUpOiIifSx4PWZ1bmN0aW9uKGosRSl7cmV0dXJuIi8iIT1qLnNsaWNlKC0xKSYmKGor''@;'; put 'put ''PSIvIiksRT10eXBlb2YgRTwidSImJkUsdGhpcy5maWxlc1tqXXx8Zy5jYWxsKHRoaXMsaixudWxsLHtkaXI6ITAsY3JlYXRlRm9sZGVyczpFfSksdGhpcy5maWxlc1tqXX0sQz1mdW5jdGlvbihqLEUpe3ZhciBBLG09bmV3IHE7cmV0dXJuIGouX2RhdGEgaW5zdGFuY2VvZiBxPyhtLnVuY29t''@;'; put 'put ''cHJlc3NlZFNpemU9ai5fZGF0YS51bmNvbXByZXNzZWRTaXplLG0uY3JjMzI9ai5fZGF0YS5jcmMzMiwwPT09bS51bmNvbXByZXNzZWRTaXplfHxqLmRpcj8oRT1XLlNUT1JFLG0uY29tcHJlc3NlZENvbnRlbnQ9IiIsbS5jcmMzMj0wKTpqLl9kYXRhLmNvbXByZXNzaW9uTWV0aG9kPT09RS5t''@;'; put 'put ''YWdpYz9tLmNvbXByZXNzZWRDb250ZW50PWouX2RhdGEuZ2V0Q29tcHJlc3NlZENvbnRlbnQoKTooQT1qLl9kYXRhLmdldENvbnRlbnQoKSxtLmNvbXByZXNzZWRDb250ZW50PUUuY29tcHJlc3MoTi50cmFuc2Zvcm1UbyhFLmNvbXByZXNzSW5wdXRUeXBlLEEpKSkpOigoIShBPWdlKGopKXx8''@;'; put 'put ''MD09PUEubGVuZ3RofHxqLmRpcikmJihFPVcuU1RPUkUsQT0iIiksbS51bmNvbXByZXNzZWRTaXplPUEubGVuZ3RoLG0uY3JjMzI9TyhBKSxtLmNvbXByZXNzZWRDb250ZW50PUUuY29tcHJlc3MoTi50cmFuc2Zvcm1UbyhFLmNvbXByZXNzSW5wdXRUeXBlLEEpKSksbS5jb21wcmVzc2VkU2l6''@;'; put 'put ''ZT1tLmNvbXByZXNzZWRDb250ZW50Lmxlbmd0aCxtLmNvbXByZXNzaW9uTWV0aG9kPUUubWFnaWMsbX0sVD1mdW5jdGlvbihqLEUsbSxBKXt2YXIgeGUseWUsSGUsTGUsbmU9Ti50cmFuc2Zvcm1Ubygic3RyaW5nIixKLnV0ZjhlbmNvZGUoRS5uYW1lKSksc2U9RS5jb21tZW50fHwiIixDZT1O''@;'; put 'put ''LnRyYW5zZm9ybVRvKCJzdHJpbmciLEoudXRmOGVuY29kZShzZSkpLFVlPW5lLmxlbmd0aCE9PUUubmFtZS5sZW5ndGgsSmU9Q2UubGVuZ3RoIT09c2UubGVuZ3RoLGl0PUUub3B0aW9ucyxLZT0iIixqZT0iIixrZT0iIjtIZT1FLl9pbml0aWFsTWV0YWRhdGEuZGlyIT09RS5kaXI/RS5kaXI6''@;'; put 'put ''aXQuZGlyLHhlPShMZT1FLl9pbml0aWFsTWV0YWRhdGEuZGF0ZSE9PUUuZGF0ZT9FLmRhdGU6aXQuZGF0ZSkuZ2V0SG91cnMoKSx4ZTw8PTYseGV8PUxlLmdldE1pbnV0ZXMoKSx4ZTw8PTUseGV8PUxlLmdldFNlY29uZHMoKS8yLHllPUxlLmdldEZ1bGxZZWFyKCktMTk4MCx5ZTw8PTQseWV8''@;'; put 'put ''PUxlLmdldE1vbnRoKCkrMSx5ZTw8PTUseWV8PUxlLmdldERhdGUoKSxVZSYmKGplPU1lKDEsMSkrTWUoTyhuZSksNCkrbmUsS2UrPSJ1cCIrTWUoamUubGVuZ3RoLDIpK2plKSxKZSYmKGtlPU1lKDEsMSkrTWUodGhpcy5jcmMzMihDZSksNCkrQ2UsS2UrPSJ1YyIrTWUoa2UubGVuZ3RoLDIp''@;'; put 'put ''K2tlKTt2YXIgUmU9IiI7cmV0dXJuIFJlKz0iXG5cMCIsUmUrPVVlfHxKZT8iXDBcYiI6IlwwXDAiLFJlKz1tLmNvbXByZXNzaW9uTWV0aG9kLFJlKz1NZSh4ZSwyKSxSZSs9TWUoeWUsMiksUmUrPU1lKG0uY3JjMzIsNCksUmUrPU1lKG0uY29tcHJlc3NlZFNpemUsNCksUmUrPU1lKG0udW5j''@;'; put 'put ''b21wcmVzc2VkU2l6ZSw0KSxSZSs9TWUobmUubGVuZ3RoLDIpLFJlKz1NZShLZS5sZW5ndGgsMikse2ZpbGVSZWNvcmQ6Sy5MT0NBTF9GSUxFX0hFQURFUitSZStuZStLZSxkaXJSZWNvcmQ6Sy5DRU5UUkFMX0ZJTEVfSEVBREVSKyJceDE0XDAiK1JlK01lKENlLmxlbmd0aCwyKSsiXDBcMFww''@;'; put 'put ''XDAiKyghMD09PUhlPyJceDEwXDBcMFwwIjoiXDBcMFwwXDAiKStNZShBLDQpK25lK0tlK0NlLGNvbXByZXNzZWRPYmplY3Q6bX19LEg9e2xvYWQ6ZnVuY3Rpb24oaixFKXt0aHJvdyBuZXcgRXJyb3IoIkxvYWQgbWV0aG9kIGlzIG5vdCBkZWZpbmVkLiBJcyB0aGUgZmlsZSBqc3ppcC1sb2Fk''@;'; put 'put ''LmpzIGluY2x1ZGVkID8iKX0sZmlsdGVyOmZ1bmN0aW9uKGope3ZhciBtLEEsYWUsbmUsRT1bXTtmb3IobSBpbiB0aGlzLmZpbGVzKXRoaXMuZmlsZXMuaGFzT3duUHJvcGVydHkobSkmJihuZT1uZXcgVGUoKGFlPXRoaXMuZmlsZXNbbV0pLm5hbWUsYWUuX2RhdGEsWmUoYWUub3B0aW9ucykp''@;'; put 'put ''LEE9bS5zbGljZSh0aGlzLnJvb3QubGVuZ3RoLG0ubGVuZ3RoKSxtLnNsaWNlKDAsdGhpcy5yb290Lmxlbmd0aCk9PT10aGlzLnJvb3QmJmooQSxuZSkmJkUucHVzaChuZSkpO3JldHVybiBFfSxmaWxlOmZ1bmN0aW9uKGosRSxtKXtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7aWYoTi5pc1Jl''@;'; put 'put ''Z0V4cChqKSl7dmFyIEE9ajtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oYWUsbmUpe3JldHVybiFuZS5kaXImJkEudGVzdChhZSl9KX1yZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oYWUsbmUpe3JldHVybiFuZS5kaXImJmFlPT09an0pWzBdfHxudWxsfXJldHVybiBnLmNhbGwodGhp''@;'; put 'put ''cyxqPXRoaXMucm9vdCtqLEUsbSksdGhpc30sZm9sZGVyOmZ1bmN0aW9uKGope2lmKCFqKXJldHVybiB0aGlzO2lmKE4uaXNSZWdFeHAoaikpcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKGFlLG5lKXtyZXR1cm4gbmUuZGlyJiZqLnRlc3QoYWUpfSk7dmFyIG09eC5jYWxsKHRoaXMsdGhp''@;'; put 'put ''cy5yb290K2opLEE9dGhpcy5jbG9uZSgpO3JldHVybiBBLnJvb3Q9bS5uYW1lLEF9LHJlbW92ZTpmdW5jdGlvbihqKXt2YXIgRT10aGlzLmZpbGVzW2o9dGhpcy5yb290K2pdO2lmKEV8fCgiLyIhPWouc2xpY2UoLTEpJiYoais9Ii8iKSxFPXRoaXMuZmlsZXNbal0pLEUmJiFFLmRpcilkZWxl''@;'; put 'put ''dGUgdGhpcy5maWxlc1tqXTtlbHNlIGZvcih2YXIgbT10aGlzLmZpbHRlcihmdW5jdGlvbihhZSxuZSl7cmV0dXJuIG5lLm5hbWUuc2xpY2UoMCxqLmxlbmd0aCk9PT1qfSksQT0wO0E8bS5sZW5ndGg7QSsrKWRlbGV0ZSB0aGlzLmZpbGVzW21bQV0ubmFtZV07cmV0dXJuIHRoaXN9LGdlbmVy''@;'; put 'put ''YXRlOmZ1bmN0aW9uKGope2o9WmUoanx8e30se2Jhc2U2NDohMCxjb21wcmVzc2lvbjoiU1RPUkUiLHR5cGU6ImJhc2U2NCIsY29tbWVudDpudWxsfSksTi5jaGVja1N1cHBvcnQoai50eXBlKTt2YXIgYWUsbmUsS2UsRT1bXSxtPTAsQT0wLHNlPU4udHJhbnNmb3JtVG8oInN0cmluZyIsdGhp''@;'; put 'put ''cy51dGY4ZW5jb2RlKGouY29tbWVudHx8dGhpcy5jb21tZW50fHwiIikpO2Zvcih2YXIgQ2UgaW4gdGhpcy5maWxlcylpZih0aGlzLmZpbGVzLmhhc093blByb3BlcnR5KENlKSl7dmFyIFVlPXRoaXMuZmlsZXNbQ2VdLEplPVVlLm9wdGlvbnMuY29tcHJlc3Npb258fGouY29tcHJlc3Npb24u''@;'; put 'put ''dG9VcHBlckNhc2UoKSxpdD1XW0plXTtpZighaXQpdGhyb3cgbmV3IEVycm9yKEplKyIgaXMgbm90IGEgdmFsaWQgY29tcHJlc3Npb24gbWV0aG9kICEiKTt2YXIgeGU9Qy5jYWxsKHRoaXMsVWUsaXQpLHllPVQuY2FsbCh0aGlzLENlLFVlLHhlLG0pO20rPXllLmZpbGVSZWNvcmQubGVuZ3Ro''@;'; put 'put ''K3hlLmNvbXByZXNzZWRTaXplLEErPXllLmRpclJlY29yZC5sZW5ndGgsRS5wdXNoKHllKX1LZT1LLkNFTlRSQUxfRElSRUNUT1JZX0VORCsiXDBcMFwwXDAiK01lKEUubGVuZ3RoLDIpK01lKEUubGVuZ3RoLDIpK01lKEEsNCkrTWUobSw0KStNZShzZS5sZW5ndGgsMikrc2U7dmFyIGplPWou''@;'; put 'put ''dHlwZS50b0xvd2VyQ2FzZSgpO2ZvcihhZT0idWludDhhcnJheSI9PT1qZXx8ImFycmF5YnVmZmVyIj09PWplfHwiYmxvYiI9PT1qZXx8Im5vZGVidWZmZXIiPT09amU/bmV3IGllKG0rQStLZS5sZW5ndGgpOm5ldyByZShtK0ErS2UubGVuZ3RoKSxuZT0wO25lPEUubGVuZ3RoO25lKyspYWUu''@;'; put 'put ''YXBwZW5kKEVbbmVdLmZpbGVSZWNvcmQpLGFlLmFwcGVuZChFW25lXS5jb21wcmVzc2VkT2JqZWN0LmNvbXByZXNzZWRDb250ZW50KTtmb3IobmU9MDtuZTxFLmxlbmd0aDtuZSsrKWFlLmFwcGVuZChFW25lXS5kaXJSZWNvcmQpO2FlLmFwcGVuZChLZSk7dmFyIGtlPWFlLmZpbmFsaXplKCk7''@;'; put 'put ''c3dpdGNoKGoudHlwZS50b0xvd2VyQ2FzZSgpKXtjYXNlInVpbnQ4YXJyYXkiOmNhc2UiYXJyYXlidWZmZXIiOmNhc2Uibm9kZWJ1ZmZlciI6cmV0dXJuIE4udHJhbnNmb3JtVG8oai50eXBlLnRvTG93ZXJDYXNlKCksa2UpO2Nhc2UiYmxvYiI6cmV0dXJuIE4uYXJyYXlCdWZmZXIyQmxvYihO''@;'; put 'put ''LnRyYW5zZm9ybVRvKCJhcnJheWJ1ZmZlciIsa2UpKTtjYXNlImJhc2U2NCI6cmV0dXJuIGouYmFzZTY0P1kuZW5jb2RlKGtlKTprZTtkZWZhdWx0OnJldHVybiBrZX19LGNyYzMyOmZ1bmN0aW9uKGosRSl7cmV0dXJuIE8oaixFKX0sdXRmOGVuY29kZTpmdW5jdGlvbihqKXtyZXR1cm4gTi50''@;'; put 'put ''cmFuc2Zvcm1Ubygic3RyaW5nIixKLnV0ZjhlbmNvZGUoaikpfSx1dGY4ZGVjb2RlOmZ1bmN0aW9uKGope3JldHVybiBKLnV0ZjhkZWNvZGUoail9fTtGLmV4cG9ydHM9SH0seyIuL2Jhc2U2NCI6MSwiLi9jb21wcmVzc2VkT2JqZWN0IjoyLCIuL2NvbXByZXNzaW9ucyI6MywiLi9jcmMzMiI6''@;'; put 'put ''NCwiLi9kZWZhdWx0cyI6NiwiLi9ub2RlQnVmZmVyIjoxMSwiLi9zaWduYXR1cmUiOjE0LCIuL3N0cmluZ1dyaXRlciI6MTYsIi4vc3VwcG9ydCI6MTcsIi4vdWludDhBcnJheVdyaXRlciI6MTksIi4vdXRmOCI6MjAsIi4vdXRpbHMiOjIxfV0sMTQ6W2Z1bmN0aW9uKFAsRixSKXsidXNlIHN0''@;'; put 'put ''cmljdCI7Ui5MT0NBTF9GSUxFX0hFQURFUj0iUEtceDAzXHgwNCIsUi5DRU5UUkFMX0ZJTEVfSEVBREVSPSJQS1x4MDFceDAyIixSLkNFTlRSQUxfRElSRUNUT1JZX0VORD0iUEtceDA1XHgwNiIsUi5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SPSJQS1x4MDZceDA3IixSLlpJUDY0''@;'; put 'put ''X0NFTlRSQUxfRElSRUNUT1JZX0VORD0iUEtceDA2XHgwNiIsUi5EQVRBX0RFU0NSSVBUT1I9IlBLXHgwN1xiIn0se31dLDE1OltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vZGF0YVJlYWRlciIpLE49UCgiLi91dGlscyIpO2Z1bmN0aW9uIE8oSyxaKXt0aGlzLmRh''@;'; put 'put ''dGE9SyxafHwodGhpcy5kYXRhPU4uc3RyaW5nMmJpbmFyeSh0aGlzLmRhdGEpKSx0aGlzLmxlbmd0aD10aGlzLmRhdGEubGVuZ3RoLHRoaXMuaW5kZXg9MH0oTy5wcm90b3R5cGU9bmV3IHopLmJ5dGVBdD1mdW5jdGlvbihLKXtyZXR1cm4gdGhpcy5kYXRhLmNoYXJDb2RlQXQoSyl9LE8ucHJv''@;'; put 'put ''dG90eXBlLmxhc3RJbmRleE9mU2lnbmF0dXJlPWZ1bmN0aW9uKEspe3JldHVybiB0aGlzLmRhdGEubGFzdEluZGV4T2YoSyl9LE8ucHJvdG90eXBlLnJlYWREYXRhPWZ1bmN0aW9uKEspe3RoaXMuY2hlY2tPZmZzZXQoSyk7dmFyIFo9dGhpcy5kYXRhLnNsaWNlKHRoaXMuaW5kZXgsdGhpcy5p''@;'; put 'put ''bmRleCtLKTtyZXR1cm4gdGhpcy5pbmRleCs9SyxafSxGLmV4cG9ydHM9T30seyIuL2RhdGFSZWFkZXIiOjUsIi4vdXRpbHMiOjIxfV0sMTY6W2Z1bmN0aW9uKFAsRixSKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi91dGlscyIpLE49ZnVuY3Rpb24oKXt0aGlzLmRhdGE9W119O04ucHJvdG90''@;'; put 'put ''eXBlPXthcHBlbmQ6ZnVuY3Rpb24oTyl7Tz16LnRyYW5zZm9ybVRvKCJzdHJpbmciLE8pLHRoaXMuZGF0YS5wdXNoKE8pfSxmaW5hbGl6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEuam9pbigiIil9fSxGLmV4cG9ydHM9Tn0seyIuL3V0aWxzIjoyMX1dLDE3OltmdW5jdGlvbihQLEYs''@;'; put 'put ''Uil7KGZ1bmN0aW9uKHopeyJ1c2Ugc3RyaWN0IjtpZihSLmJhc2U2ND0hMCxSLmFycmF5PSEwLFIuc3RyaW5nPSEwLFIuYXJyYXlidWZmZXI9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmdHlwZW9mIFVpbnQ4QXJyYXk8InUiLFIubm9kZWJ1ZmZlcj10eXBlb2YgejwidSIsUi51aW50OGFycmF5''@;'; put 'put ''PXR5cGVvZiBVaW50OEFycmF5PCJ1Iix0eXBlb2YgQXJyYXlCdWZmZXI+InUiKVIuYmxvYj0hMTtlbHNle3ZhciBOPW5ldyBBcnJheUJ1ZmZlcigwKTt0cnl7Ui5ibG9iPTA9PT1uZXcgQmxvYihbTl0se3R5cGU6ImFwcGxpY2F0aW9uL3ppcCJ9KS5zaXplfWNhdGNoe3RyeXt2YXIgSz1uZXco''@;'; put 'put ''d2luZG93LkJsb2JCdWlsZGVyfHx3aW5kb3cuV2ViS2l0QmxvYkJ1aWxkZXJ8fHdpbmRvdy5Nb3pCbG9iQnVpbGRlcnx8d2luZG93Lk1TQmxvYkJ1aWxkZXIpO0suYXBwZW5kKE4pLFIuYmxvYj0wPT09Sy5nZXRCbG9iKCJhcHBsaWNhdGlvbi96aXAiKS5zaXplfWNhdGNoe1IuYmxvYj0hMX19''@;'; put 'put ''fX0pLmNhbGwodGhpcyx0eXBlb2YgQnVmZmVyPCJ1Ij9CdWZmZXI6dm9pZCAwKX0se31dLDE4OltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vZGF0YVJlYWRlciIpO2Z1bmN0aW9uIE4oTyl7TyYmKHRoaXMuZGF0YT1PLHRoaXMubGVuZ3RoPXRoaXMuZGF0YS5sZW5n''@;'; put 'put ''dGgsdGhpcy5pbmRleD0wKX0oTi5wcm90b3R5cGU9bmV3IHopLmJ5dGVBdD1mdW5jdGlvbihPKXtyZXR1cm4gdGhpcy5kYXRhW09dfSxOLnByb3RvdHlwZS5sYXN0SW5kZXhPZlNpZ25hdHVyZT1mdW5jdGlvbihPKXtmb3IodmFyIEs9Ty5jaGFyQ29kZUF0KDApLFo9Ty5jaGFyQ29kZUF0KDEp''@;'; put 'put ''LFk9Ty5jaGFyQ29kZUF0KDIpLFc9Ty5jaGFyQ29kZUF0KDMpLHE9dGhpcy5sZW5ndGgtNDtxPj0wOy0tcSlpZih0aGlzLmRhdGFbcV09PT1LJiZ0aGlzLmRhdGFbcSsxXT09PVomJnRoaXMuZGF0YVtxKzJdPT09WSYmdGhpcy5kYXRhW3ErM109PT1XKXJldHVybiBxO3JldHVybi0xfSxOLnBy''@;'; put 'put ''b3RvdHlwZS5yZWFkRGF0YT1mdW5jdGlvbihPKXtpZih0aGlzLmNoZWNrT2Zmc2V0KE8pLDA9PT1PKXJldHVybiBuZXcgVWludDhBcnJheSgwKTt2YXIgSz10aGlzLmRhdGEuc3ViYXJyYXkodGhpcy5pbmRleCx0aGlzLmluZGV4K08pO3JldHVybiB0aGlzLmluZGV4Kz1PLEt9LEYuZXhwb3J0''@;'; put 'put ''cz1OfSx7Ii4vZGF0YVJlYWRlciI6NX1dLDE5OltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vdXRpbHMiKSxOPWZ1bmN0aW9uKE8pe3RoaXMuZGF0YT1uZXcgVWludDhBcnJheShPKSx0aGlzLmluZGV4PTB9O04ucHJvdG90eXBlPXthcHBlbmQ6ZnVuY3Rpb24oTyl7''@;'; put 'put ''MCE9PU8ubGVuZ3RoJiYoTz16LnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5IixPKSx0aGlzLmRhdGEuc2V0KE8sdGhpcy5pbmRleCksdGhpcy5pbmRleCs9Ty5sZW5ndGgpfSxmaW5hbGl6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGF9fSxGLmV4cG9ydHM9Tn0seyIuL3V0aWxzIjoyMX1d''@;'; put 'put ''LDIwOltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO2Zvcih2YXIgej1QKCIuL3V0aWxzIiksTj1QKCIuL3N1cHBvcnQiKSxPPVAoIi4vbm9kZUJ1ZmZlciIpLEs9bmV3IEFycmF5KDI1NiksWj0wO1o8MjU2O1orKylLW1pdPVo+PTI1Mj82Olo+PTI0OD81Olo+PTI0MD80Olo+PTIyND8z''@;'; put 'put ''Olo+PTE5Mj8yOjE7S1syNTRdPUtbMjU0XT0xO3ZhciBXPWZ1bmN0aW9uKGVlLEope3ZhciByZTtmb3IoKEo9Snx8ZWUubGVuZ3RoKT5lZS5sZW5ndGgmJihKPWVlLmxlbmd0aCkscmU9Si0xO3JlPj0wJiYxMjg9PSgxOTImZWVbcmVdKTspcmUtLTtyZXR1cm4gcmU8MHx8MD09PXJlP0o6cmUr''@;'; put 'put ''S1tlZVtyZV1dPko/cmU6Sn0scT1mdW5jdGlvbihlZSl7dmFyIHJlLGllLHVlLGdlLF9lPWVlLmxlbmd0aCxUZT1uZXcgQXJyYXkoMipfZSk7Zm9yKGllPTAscmU9MDtyZTxfZTspaWYoKHVlPWVlW3JlKytdKTwxMjgpVGVbaWUrK109dWU7ZWxzZSBpZigoZ2U9S1t1ZV0pPjQpVGVbaWUrK109''@;'; put 'put ''NjU1MzMscmUrPWdlLTE7ZWxzZXtmb3IodWUmPTI9PT1nZT8zMTozPT09Z2U/MTU6NztnZT4xJiZyZTxfZTspdWU9dWU8PDZ8NjMmZWVbcmUrK10sZ2UtLTtnZT4xP1RlW2llKytdPTY1NTMzOnVlPDY1NTM2P1RlW2llKytdPXVlOihUZVtpZSsrXT01NTI5NnwodWUtPTY1NTM2KT4+MTAmMTAy''@;'; put 'put ''MyxUZVtpZSsrXT01NjMyMHwxMDIzJnVlKX1yZXR1cm4gVGUubGVuZ3RoIT09aWUmJihUZS5zdWJhcnJheT9UZT1UZS5zdWJhcnJheSgwLGllKTpUZS5sZW5ndGg9aWUpLHouYXBwbHlGcm9tQ2hhckNvZGUoVGUpfTtSLnV0ZjhlbmNvZGU9ZnVuY3Rpb24oSil7cmV0dXJuIE4ubm9kZWJ1ZmZl''@;'; put 'put ''cj9PKEosInV0Zi04Iik6ZnVuY3Rpb24oZWUpe3ZhciBKLHJlLGllLHVlLGdlLF9lPWVlLmxlbmd0aCxUZT0wO2Zvcih1ZT0wO3VlPF9lO3VlKyspNTUyOTY9PSg2NDUxMiYocmU9ZWUuY2hhckNvZGVBdCh1ZSkpKSYmdWUrMTxfZSYmNTYzMjA9PSg2NDUxMiYoaWU9ZWUuY2hhckNvZGVBdCh1''@;'; put 'put ''ZSsxKSkpJiYocmU9NjU1MzYrKHJlLTU1Mjk2PDwxMCkrKGllLTU2MzIwKSx1ZSsrKSxUZSs9cmU8MTI4PzE6cmU8MjA0OD8yOnJlPDY1NTM2PzM6NDtmb3IoSj1OLnVpbnQ4YXJyYXk/bmV3IFVpbnQ4QXJyYXkoVGUpOm5ldyBBcnJheShUZSksZ2U9MCx1ZT0wO2dlPFRlO3VlKyspNTUyOTY9''@;'; put 'put ''PSg2NDUxMiYocmU9ZWUuY2hhckNvZGVBdCh1ZSkpKSYmdWUrMTxfZSYmNTYzMjA9PSg2NDUxMiYoaWU9ZWUuY2hhckNvZGVBdCh1ZSsxKSkpJiYocmU9NjU1MzYrKHJlLTU1Mjk2PDwxMCkrKGllLTU2MzIwKSx1ZSsrKSxyZTwxMjg/SltnZSsrXT1yZTpyZTwyMDQ4PyhKW2dlKytdPTE5Mnxy''@;'; put 'put ''ZT4+PjYsSltnZSsrXT0xMjh8NjMmcmUpOnJlPDY1NTM2PyhKW2dlKytdPTIyNHxyZT4+PjEyLEpbZ2UrK109MTI4fHJlPj4+NiY2MyxKW2dlKytdPTEyOHw2MyZyZSk6KEpbZ2UrK109MjQwfHJlPj4+MTgsSltnZSsrXT0xMjh8cmU+Pj4xMiY2MyxKW2dlKytdPTEyOHxyZT4+PjYmNjMsSltn''@;'; put 'put ''ZSsrXT0xMjh8NjMmcmUpO3JldHVybiBKfShKKX0sUi51dGY4ZGVjb2RlPWZ1bmN0aW9uKEope2lmKE4ubm9kZWJ1ZmZlcilyZXR1cm4gei50cmFuc2Zvcm1Ubygibm9kZWJ1ZmZlciIsSikudG9TdHJpbmcoInV0Zi04Iik7Zm9yKHZhciByZT1bXSxpZT0wLHVlPShKPXoudHJhbnNmb3JtVG8o''@;'; put 'put ''Ti51aW50OGFycmF5PyJ1aW50OGFycmF5IjoiYXJyYXkiLEopKS5sZW5ndGg7aWU8dWU7KXt2YXIgX2U9VyhKLE1hdGgubWluKGllKzY1NTM2LHVlKSk7cmUucHVzaChxKE4udWludDhhcnJheT9KLnN1YmFycmF5KGllLF9lKTpKLnNsaWNlKGllLF9lKSkpLGllPV9lfXJldHVybiByZS5qb2lu''@;'; put 'put ''KCIiKX19LHsiLi9ub2RlQnVmZmVyIjoxMSwiLi9zdXBwb3J0IjoxNywiLi91dGlscyI6MjF9XSwyMTpbZnVuY3Rpb24oUCxGLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL3N1cHBvcnQiKSxOPVAoIi4vY29tcHJlc3Npb25zIiksTz1QKCIuL25vZGVCdWZmZXIiKTtmdW5jdGlvbiBLKGVl''@;'; put 'put ''KXtyZXR1cm4gZWV9ZnVuY3Rpb24gWihlZSxKKXtmb3IodmFyIHJlPTA7cmU8ZWUubGVuZ3RoOysrcmUpSltyZV09MjU1JmVlLmNoYXJDb2RlQXQocmUpO3JldHVybiBKfWZ1bmN0aW9uIFkoZWUpe3ZhciBKPTY1NTM2LHJlPVtdLGllPWVlLmxlbmd0aCx1ZT1SLmdldFR5cGVPZihlZSksZ2U9''@;'; put 'put ''MCxfZT0hMDt0cnl7c3dpdGNoKHVlKXtjYXNlInVpbnQ4YXJyYXkiOlN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxuZXcgVWludDhBcnJheSgwKSk7YnJlYWs7Y2FzZSJub2RlYnVmZmVyIjpTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsTygwKSl9fWNhdGNoe19lPSExfWlm''@;'; put 'put ''KCFfZSl7Zm9yKHZhciBUZT0iIixNZT0wO01lPGVlLmxlbmd0aDtNZSsrKVRlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVlW01lXSk7cmV0dXJuIFRlfWZvcig7Z2U8aWUmJko+MTspdHJ5e3JlLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCJhcnJheSI9PT11ZXx8Im5vZGVi''@;'; put 'put ''dWZmZXIiPT09dWU/ZWUuc2xpY2UoZ2UsTWF0aC5taW4oZ2UrSixpZSkpOmVlLnN1YmFycmF5KGdlLE1hdGgubWluKGdlK0osaWUpKSkpLGdlKz1KfWNhdGNoe0o9TWF0aC5mbG9vcihKLzIpfXJldHVybiByZS5qb2luKCIiKX1mdW5jdGlvbiBXKGVlLEope2Zvcih2YXIgcmU9MDtyZTxlZS5s''@;'; put 'put ''ZW5ndGg7cmUrKylKW3JlXT1lZVtyZV07cmV0dXJuIEp9Ui5zdHJpbmcyYmluYXJ5PWZ1bmN0aW9uKGVlKXtmb3IodmFyIEo9IiIscmU9MDtyZTxlZS5sZW5ndGg7cmUrKylKKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSZlZS5jaGFyQ29kZUF0KHJlKSk7cmV0dXJuIEp9LFIuYXJyYXlCdWZm''@;'; put 'put ''ZXIyQmxvYj1mdW5jdGlvbihlZSl7Ui5jaGVja1N1cHBvcnQoImJsb2IiKTt0cnl7cmV0dXJuIG5ldyBCbG9iKFtlZV0se3R5cGU6ImFwcGxpY2F0aW9uL3ppcCJ9KX1jYXRjaHt0cnl7dmFyIHJlPW5ldyh3aW5kb3cuQmxvYkJ1aWxkZXJ8fHdpbmRvdy5XZWJLaXRCbG9iQnVpbGRlcnx8d2lu''@;'; put 'put ''ZG93Lk1vekJsb2JCdWlsZGVyfHx3aW5kb3cuTVNCbG9iQnVpbGRlcik7cmV0dXJuIHJlLmFwcGVuZChlZSkscmUuZ2V0QmxvYigiYXBwbGljYXRpb24vemlwIil9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJCdWcgOiBjYW4ndCBjb25zdHJ1Y3QgdGhlIEJsb2IuIil9fX0sUi5hcHBseUZyb21D''@;'; put 'put ''aGFyQ29kZT1ZO3ZhciBxPXt9O3Euc3RyaW5nPXtzdHJpbmc6SyxhcnJheTpmdW5jdGlvbihlZSl7cmV0dXJuIFooZWUsbmV3IEFycmF5KGVlLmxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpmdW5jdGlvbihlZSl7cmV0dXJuIHEuc3RyaW5nLnVpbnQ4YXJyYXkoZWUpLmJ1ZmZlcn0sdWludDhhcnJh''@;'; put 'put ''eTpmdW5jdGlvbihlZSl7cmV0dXJuIFooZWUsbmV3IFVpbnQ4QXJyYXkoZWUubGVuZ3RoKSl9LG5vZGVidWZmZXI6ZnVuY3Rpb24oZWUpe3JldHVybiBaKGVlLE8oZWUubGVuZ3RoKSl9fSxxLmFycmF5PXtzdHJpbmc6WSxhcnJheTpLLGFycmF5YnVmZmVyOmZ1bmN0aW9uKGVlKXtyZXR1cm4g''@;'; put 'put ''bmV3IFVpbnQ4QXJyYXkoZWUpLmJ1ZmZlcn0sdWludDhhcnJheTpmdW5jdGlvbihlZSl7cmV0dXJuIG5ldyBVaW50OEFycmF5KGVlKX0sbm9kZWJ1ZmZlcjpmdW5jdGlvbihlZSl7cmV0dXJuIE8oZWUpfX0scS5hcnJheWJ1ZmZlcj17c3RyaW5nOmZ1bmN0aW9uKGVlKXtyZXR1cm4gWShuZXcg''@;'; put 'put ''VWludDhBcnJheShlZSkpfSxhcnJheTpmdW5jdGlvbihlZSl7cmV0dXJuIFcobmV3IFVpbnQ4QXJyYXkoZWUpLG5ldyBBcnJheShlZS5ieXRlTGVuZ3RoKSl9LGFycmF5YnVmZmVyOkssdWludDhhcnJheTpmdW5jdGlvbihlZSl7cmV0dXJuIG5ldyBVaW50OEFycmF5KGVlKX0sbm9kZWJ1ZmZl''@;'; put 'put ''cjpmdW5jdGlvbihlZSl7cmV0dXJuIE8obmV3IFVpbnQ4QXJyYXkoZWUpKX19LHEudWludDhhcnJheT17c3RyaW5nOlksYXJyYXk6ZnVuY3Rpb24oZWUpe3JldHVybiBXKGVlLG5ldyBBcnJheShlZS5sZW5ndGgpKX0sYXJyYXlidWZmZXI6ZnVuY3Rpb24oZWUpe3JldHVybiBlZS5idWZmZXJ9''@;'; put 'put ''LHVpbnQ4YXJyYXk6Syxub2RlYnVmZmVyOmZ1bmN0aW9uKGVlKXtyZXR1cm4gTyhlZSl9fSxxLm5vZGVidWZmZXI9e3N0cmluZzpZLGFycmF5OmZ1bmN0aW9uKGVlKXtyZXR1cm4gVyhlZSxuZXcgQXJyYXkoZWUubGVuZ3RoKSl9LGFycmF5YnVmZmVyOmZ1bmN0aW9uKGVlKXtyZXR1cm4gcS5u''@;'; put 'put ''b2RlYnVmZmVyLnVpbnQ4YXJyYXkoZWUpLmJ1ZmZlcn0sdWludDhhcnJheTpmdW5jdGlvbihlZSl7cmV0dXJuIFcoZWUsbmV3IFVpbnQ4QXJyYXkoZWUubGVuZ3RoKSl9LG5vZGVidWZmZXI6S30sUi50cmFuc2Zvcm1Ubz1mdW5jdGlvbihlZSxKKXtpZihKfHwoSj0iIiksIWVlKXJldHVybiBK''@;'; put 'put ''O1IuY2hlY2tTdXBwb3J0KGVlKTt2YXIgcmU9Ui5nZXRUeXBlT2YoSik7cmV0dXJuIHFbcmVdW2VlXShKKX0sUi5nZXRUeXBlT2Y9ZnVuY3Rpb24oZWUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZWU/InN0cmluZyI6IltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJp''@;'; put 'put ''bmcuY2FsbChlZSk/ImFycmF5Ijp6Lm5vZGVidWZmZXImJk8udGVzdChlZSk/Im5vZGVidWZmZXIiOnoudWludDhhcnJheSYmZWUgaW5zdGFuY2VvZiBVaW50OEFycmF5PyJ1aW50OGFycmF5Ijp6LmFycmF5YnVmZmVyJiZlZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyPyJhcnJheWJ1ZmZlciI6''@;'; put 'put ''dm9pZCAwfSxSLmNoZWNrU3VwcG9ydD1mdW5jdGlvbihlZSl7aWYoIXpbZWUudG9Mb3dlckNhc2UoKV0pdGhyb3cgbmV3IEVycm9yKGVlKyIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIiKX0sUi5NQVhfVkFMVUVfMTZCSVRTPTY1NTM1LFIuTUFYX1ZBTFVFXzMyQklUUz0tMSxS''@;'; put 'put ''LnByZXR0eT1mdW5jdGlvbihlZSl7dmFyIHJlLGllLEo9IiI7Zm9yKGllPTA7aWU8KGVlfHwiIikubGVuZ3RoO2llKyspSis9IlxceCIrKChyZT1lZS5jaGFyQ29kZUF0KGllKSk8MTY/IjAiOiIiKStyZS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtyZXR1cm4gSn0sUi5maW5kQ29tcHJl''@;'; put 'put ''c3Npb249ZnVuY3Rpb24oZWUpe2Zvcih2YXIgSiBpbiBOKWlmKE4uaGFzT3duUHJvcGVydHkoSikmJk5bSl0ubWFnaWM9PT1lZSlyZXR1cm4gTltKXTtyZXR1cm4gbnVsbH0sUi5pc1JlZ0V4cD1mdW5jdGlvbihlZSl7cmV0dXJuIltvYmplY3QgUmVnRXhwXSI9PT1PYmplY3QucHJvdG90eXBl''@;'; put 'put ''LnRvU3RyaW5nLmNhbGwoZWUpfX0seyIuL2NvbXByZXNzaW9ucyI6MywiLi9ub2RlQnVmZmVyIjoxMSwiLi9zdXBwb3J0IjoxN31dLDIyOltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vc3RyaW5nUmVhZGVyIiksTj1QKCIuL25vZGVCdWZmZXJSZWFkZXIiKSxPPVAo''@;'; put 'put ''Ii4vdWludDhBcnJheVJlYWRlciIpLEs9UCgiLi91dGlscyIpLFo9UCgiLi9zaWduYXR1cmUiKSxZPVAoIi4vemlwRW50cnkiKSxXPVAoIi4vc3VwcG9ydCIpLHE9UCgiLi9vYmplY3QiKTtmdW5jdGlvbiBlZShKLHJlKXt0aGlzLmZpbGVzPVtdLHRoaXMubG9hZE9wdGlvbnM9cmUsSiYmdGhp''@;'; put 'put ''cy5sb2FkKEopfWVlLnByb3RvdHlwZT17Y2hlY2tTaWduYXR1cmU6ZnVuY3Rpb24oSil7dmFyIHJlPXRoaXMucmVhZGVyLnJlYWRTdHJpbmcoNCk7aWYocmUhPT1KKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCBvciBidWcgOiB1bmV4cGVjdGVkIHNpZ25hdHVyZSAoIitLLnByZXR0''@;'; put 'put ''eShyZSkrIiwgZXhwZWN0ZWQgIitLLnByZXR0eShKKSsiKSIpfSxyZWFkQmxvY2tFbmRPZkNlbnRyYWw6ZnVuY3Rpb24oKXt0aGlzLmRpc2tOdW1iZXI9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhp''@;'; put 'put ''cy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2s9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5jZW50cmFsRGlyU2l6ZT10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuY2VudHJhbERpck9mZnNldD10''@;'; put 'put ''aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuemlwQ29tbWVudExlbmd0aD10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuemlwQ29tbWVudD10aGlzLnJlYWRlci5yZWFkU3RyaW5nKHRoaXMuemlwQ29tbWVudExlbmd0aCksdGhpcy56aXBDb21tZW50PXEudXRmOGRlY29kZSh0aGlzLnpp''@;'; put 'put ''cENvbW1lbnQpfSxyZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbDpmdW5jdGlvbigpe3RoaXMuemlwNjRFbmRPZkNlbnRyYWxTaXplPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy52ZXJzaW9uTWFkZUJ5PXRoaXMucmVhZGVyLnJlYWRTdHJpbmcoMiksdGhpcy52ZXJzaW9uTmVlZGVkPXRo''@;'; put 'put ''aXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5kaXNrTnVtYmVyPXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuY2VudHJhbERpclJlY29yZHNPblRoaXNEaXNrPXRoaXMucmVhZGVyLnJlYWRJbnQo''@;'; put 'put ''OCksdGhpcy5jZW50cmFsRGlyUmVjb3Jkcz10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuY2VudHJhbERpclNpemU9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmNlbnRyYWxEaXJPZmZzZXQ9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLnppcDY0RXh0ZW5zaWJsZURhdGE9e307''@;'; put 'put ''Zm9yKHZhciBpZSx1ZSxnZSxKPXRoaXMuemlwNjRFbmRPZkNlbnRyYWxTaXplLTQ0OzA8SjspaWU9dGhpcy5yZWFkZXIucmVhZEludCgyKSx1ZT10aGlzLnJlYWRlci5yZWFkSW50KDQpLGdlPXRoaXMucmVhZGVyLnJlYWRTdHJpbmcodWUpLHRoaXMuemlwNjRFeHRlbnNpYmxlRGF0YVtpZV09''@;'; put 'put ''e2lkOmllLGxlbmd0aDp1ZSx2YWx1ZTpnZX19LHJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsTG9jYXRvcjpmdW5jdGlvbigpe2lmKHRoaXMuZGlza1dpdGhaaXA2NENlbnRyYWxEaXJTdGFydD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMucmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2Vu''@;'; put 'put ''dHJhbERpcj10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuZGlza3NDb3VudD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuZGlza3NDb3VudD4xKXRocm93IG5ldyBFcnJvcigiTXVsdGktdm9sdW1lcyB6aXAgYXJlIG5vdCBzdXBwb3J0ZWQiKX0scmVhZExvY2FsRmlsZXM6ZnVuY3Rp''@;'; put 'put ''b24oKXt2YXIgSixyZTtmb3IoSj0wO0o8dGhpcy5maWxlcy5sZW5ndGg7SisrKXRoaXMucmVhZGVyLnNldEluZGV4KChyZT10aGlzLmZpbGVzW0pdKS5sb2NhbEhlYWRlck9mZnNldCksdGhpcy5jaGVja1NpZ25hdHVyZShaLkxPQ0FMX0ZJTEVfSEVBREVSKSxyZS5yZWFkTG9jYWxQYXJ0KHRo''@;'; put 'put ''aXMucmVhZGVyKSxyZS5oYW5kbGVVVEY4KCl9LHJlYWRDZW50cmFsRGlyOmZ1bmN0aW9uKCl7dmFyIEo7Zm9yKHRoaXMucmVhZGVyLnNldEluZGV4KHRoaXMuY2VudHJhbERpck9mZnNldCk7dGhpcy5yZWFkZXIucmVhZFN0cmluZyg0KT09PVouQ0VOVFJBTF9GSUxFX0hFQURFUjspKEo9bmV3''@;'; put 'put ''IFkoe3ppcDY0OnRoaXMuemlwNjR9LHRoaXMubG9hZE9wdGlvbnMpKS5yZWFkQ2VudHJhbFBhcnQodGhpcy5yZWFkZXIpLHRoaXMuZmlsZXMucHVzaChKKX0scmVhZEVuZE9mQ2VudHJhbDpmdW5jdGlvbigpe3ZhciBKPXRoaXMucmVhZGVyLmxhc3RJbmRleE9mU2lnbmF0dXJlKFouQ0VOVFJB''@;'; put 'put ''TF9ESVJFQ1RPUllfRU5EKTtpZigtMT09PUopdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIDogY2FuJ3QgZmluZCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnkiKTtpZih0aGlzLnJlYWRlci5zZXRJbmRleChKKSx0aGlzLmNoZWNrU2lnbmF0dXJlKFouQ0VOVFJBTF9ESVJFQ1RPUllf''@;'; put 'put ''RU5EKSx0aGlzLnJlYWRCbG9ja0VuZE9mQ2VudHJhbCgpLHRoaXMuZGlza051bWJlcj09PUsuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydD09PUsuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2s9PT1LLk1BWF9W''@;'; put 'put ''QUxVRV8xNkJJVFN8fHRoaXMuY2VudHJhbERpclJlY29yZHM9PT1LLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuY2VudHJhbERpclNpemU9PT1LLk1BWF9WQUxVRV8zMkJJVFN8fHRoaXMuY2VudHJhbERpck9mZnNldD09PUsuTUFYX1ZBTFVFXzMyQklUUyl7aWYodGhpcy56aXA2ND0hMCwtMT09''@;'; put 'put ''PShKPXRoaXMucmVhZGVyLmxhc3RJbmRleE9mU2lnbmF0dXJlKFouWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUikpKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCA6IGNhbid0IGZpbmQgdGhlIFpJUDY0IGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSBsb2NhdG9yIik7dGhp''@;'; put 'put ''cy5yZWFkZXIuc2V0SW5kZXgoSiksdGhpcy5jaGVja1NpZ25hdHVyZShaLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1IpLHRoaXMucmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWxMb2NhdG9yKCksdGhpcy5yZWFkZXIuc2V0SW5kZXgodGhpcy5yZWxhdGl2ZU9mZnNldEVuZE9mWmlw''@;'; put 'put ''NjRDZW50cmFsRGlyKSx0aGlzLmNoZWNrU2lnbmF0dXJlKFouWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKSx0aGlzLnJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsKCl9fSxwcmVwYXJlUmVhZGVyOmZ1bmN0aW9uKEope3ZhciByZT1LLmdldFR5cGVPZihKKTt0aGlzLnJlYWRlcj0ic3Ry''@;'; put 'put ''aW5nIiE9PXJlfHxXLnVpbnQ4YXJyYXk/Im5vZGVidWZmZXIiPT09cmU/bmV3IE4oSik6bmV3IE8oSy50cmFuc2Zvcm1UbygidWludDhhcnJheSIsSikpOm5ldyB6KEosdGhpcy5sb2FkT3B0aW9ucy5vcHRpbWl6ZWRCaW5hcnlTdHJpbmcpfSxsb2FkOmZ1bmN0aW9uKEope3RoaXMucHJlcGFy''@;'; put 'put ''ZVJlYWRlcihKKSx0aGlzLnJlYWRFbmRPZkNlbnRyYWwoKSx0aGlzLnJlYWRDZW50cmFsRGlyKCksdGhpcy5yZWFkTG9jYWxGaWxlcygpfX0sRi5leHBvcnRzPWVlfSx7Ii4vbm9kZUJ1ZmZlclJlYWRlciI6MTIsIi4vb2JqZWN0IjoxMywiLi9zaWduYXR1cmUiOjE0LCIuL3N0cmluZ1JlYWRl''@;'; put 'put ''ciI6MTUsIi4vc3VwcG9ydCI6MTcsIi4vdWludDhBcnJheVJlYWRlciI6MTgsIi4vdXRpbHMiOjIxLCIuL3ppcEVudHJ5IjoyM31dLDIzOltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vc3RyaW5nUmVhZGVyIiksTj1QKCIuL3V0aWxzIiksTz1QKCIuL2NvbXByZXNz''@;'; put 'put ''ZWRPYmplY3QiKSxLPVAoIi4vb2JqZWN0Iik7ZnVuY3Rpb24gWihZLFcpe3RoaXMub3B0aW9ucz1ZLHRoaXMubG9hZE9wdGlvbnM9V31aLnByb3RvdHlwZT17aXNFbmNyeXB0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMuYml0RmxhZyl9LHVzZVVURjg6ZnVuY3Rpb24oKXtyZXR1cm4h''@;'; put 'put ''KDIwNDgmfnRoaXMuYml0RmxhZyl9LHByZXBhcmVDb21wcmVzc2VkQ29udGVudDpmdW5jdGlvbihZLFcscSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGVlPVkuaW5kZXg7WS5zZXRJbmRleChXKTt2YXIgSj1ZLnJlYWREYXRhKHEpO3JldHVybiBZLnNldEluZGV4KGVlKSxKfX0scHJlcGFyZUNv''@;'; put 'put ''bnRlbnQ6ZnVuY3Rpb24oWSxXLHEsZWUsSil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHJlPU4udHJhbnNmb3JtVG8oZWUudW5jb21wcmVzc0lucHV0VHlwZSx0aGlzLmdldENvbXByZXNzZWRDb250ZW50KCkpLGllPWVlLnVuY29tcHJlc3MocmUpO2lmKGllLmxlbmd0aCE9PUopdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJCdWcgOiB1bmNvbXByZXNzZWQgZGF0YSBzaXplIG1pc21hdGNoIik7cmV0dXJuIGllfX0scmVhZExvY2FsUGFydDpmdW5jdGlvbihZKXt2YXIgVyxxO2lmKFkuc2tpcCgyMiksdGhpcy5maWxlTmFtZUxlbmd0aD1ZLnJlYWRJbnQoMikscT1ZLnJlYWRJbnQoMiksdGhpcy5maWxl''@;'; put 'put ''TmFtZT1ZLnJlYWRTdHJpbmcodGhpcy5maWxlTmFtZUxlbmd0aCksWS5za2lwKHEpLC0xPT10aGlzLmNvbXByZXNzZWRTaXplfHwtMT09dGhpcy51bmNvbXByZXNzZWRTaXplKXRocm93IG5ldyBFcnJvcigiQnVnIG9yIGNvcnJ1cHRlZCB6aXAgOiBkaWRuJ3QgZ2V0IGVub3VnaCBpbmZvcm1h''@;'; put 'put ''dGlvbnMgZnJvbSB0aGUgY2VudHJhbCBkaXJlY3RvcnkgKGNvbXByZXNzZWRTaXplID09IC0xIHx8IHVuY29tcHJlc3NlZFNpemUgPT0gLTEpIik7aWYobnVsbD09PShXPU4uZmluZENvbXByZXNzaW9uKHRoaXMuY29tcHJlc3Npb25NZXRob2QpKSl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRl''@;'; put 'put ''ZCB6aXAgOiBjb21wcmVzc2lvbiAiK04ucHJldHR5KHRoaXMuY29tcHJlc3Npb25NZXRob2QpKyIgdW5rbm93biAoaW5uZXIgZmlsZSA6ICIrdGhpcy5maWxlTmFtZSsiKSIpO2lmKHRoaXMuZGVjb21wcmVzc2VkPW5ldyBPLHRoaXMuZGVjb21wcmVzc2VkLmNvbXByZXNzZWRTaXplPXRoaXMu''@;'; put 'put ''Y29tcHJlc3NlZFNpemUsdGhpcy5kZWNvbXByZXNzZWQudW5jb21wcmVzc2VkU2l6ZT10aGlzLnVuY29tcHJlc3NlZFNpemUsdGhpcy5kZWNvbXByZXNzZWQuY3JjMzI9dGhpcy5jcmMzMix0aGlzLmRlY29tcHJlc3NlZC5jb21wcmVzc2lvbk1ldGhvZD10aGlzLmNvbXByZXNzaW9uTWV0aG9k''@;'; put 'put ''LHRoaXMuZGVjb21wcmVzc2VkLmdldENvbXByZXNzZWRDb250ZW50PXRoaXMucHJlcGFyZUNvbXByZXNzZWRDb250ZW50KFksWS5pbmRleCx0aGlzLmNvbXByZXNzZWRTaXplLFcpLHRoaXMuZGVjb21wcmVzc2VkLmdldENvbnRlbnQ9dGhpcy5wcmVwYXJlQ29udGVudChZLFkuaW5kZXgsdGhp''@;'; put 'put ''cy5jb21wcmVzc2VkU2l6ZSxXLHRoaXMudW5jb21wcmVzc2VkU2l6ZSksdGhpcy5sb2FkT3B0aW9ucy5jaGVja0NSQzMyJiYodGhpcy5kZWNvbXByZXNzZWQ9Ti50cmFuc2Zvcm1Ubygic3RyaW5nIix0aGlzLmRlY29tcHJlc3NlZC5nZXRDb250ZW50KCkpLEsuY3JjMzIodGhpcy5kZWNvbXBy''@;'; put 'put ''ZXNzZWQpIT09dGhpcy5jcmMzMikpdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIDogQ1JDMzIgbWlzbWF0Y2giKX0scmVhZENlbnRyYWxQYXJ0OmZ1bmN0aW9uKFkpe2lmKHRoaXMudmVyc2lvbk1hZGVCeT1ZLnJlYWRTdHJpbmcoMiksdGhpcy52ZXJzaW9uTmVlZGVkPVkucmVhZElu''@;'; put 'put ''dCgyKSx0aGlzLmJpdEZsYWc9WS5yZWFkSW50KDIpLHRoaXMuY29tcHJlc3Npb25NZXRob2Q9WS5yZWFkU3RyaW5nKDIpLHRoaXMuZGF0ZT1ZLnJlYWREYXRlKCksdGhpcy5jcmMzMj1ZLnJlYWRJbnQoNCksdGhpcy5jb21wcmVzc2VkU2l6ZT1ZLnJlYWRJbnQoNCksdGhpcy51bmNvbXByZXNz''@;'; put 'put ''ZWRTaXplPVkucmVhZEludCg0KSx0aGlzLmZpbGVOYW1lTGVuZ3RoPVkucmVhZEludCgyKSx0aGlzLmV4dHJhRmllbGRzTGVuZ3RoPVkucmVhZEludCgyKSx0aGlzLmZpbGVDb21tZW50TGVuZ3RoPVkucmVhZEludCgyKSx0aGlzLmRpc2tOdW1iZXJTdGFydD1ZLnJlYWRJbnQoMiksdGhpcy5p''@;'; put 'put ''bnRlcm5hbEZpbGVBdHRyaWJ1dGVzPVkucmVhZEludCgyKSx0aGlzLmV4dGVybmFsRmlsZUF0dHJpYnV0ZXM9WS5yZWFkSW50KDQpLHRoaXMubG9jYWxIZWFkZXJPZmZzZXQ9WS5yZWFkSW50KDQpLHRoaXMuaXNFbmNyeXB0ZWQoKSl0aHJvdyBuZXcgRXJyb3IoIkVuY3J5cHRlZCB6aXAgYXJl''@;'; put 'put ''IG5vdCBzdXBwb3J0ZWQiKTt0aGlzLmZpbGVOYW1lPVkucmVhZFN0cmluZyh0aGlzLmZpbGVOYW1lTGVuZ3RoKSx0aGlzLnJlYWRFeHRyYUZpZWxkcyhZKSx0aGlzLnBhcnNlWklQNjRFeHRyYUZpZWxkKFkpLHRoaXMuZmlsZUNvbW1lbnQ9WS5yZWFkU3RyaW5nKHRoaXMuZmlsZUNvbW1lbnRM''@;'; put 'put ''ZW5ndGgpLHRoaXMuZGlyPSEhKDE2JnRoaXMuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyl9LHBhcnNlWklQNjRFeHRyYUZpZWxkOmZ1bmN0aW9uKFkpe2lmKHRoaXMuZXh0cmFGaWVsZHNbMV0pe3ZhciBXPW5ldyB6KHRoaXMuZXh0cmFGaWVsZHNbMV0udmFsdWUpO3RoaXMudW5jb21wcmVzc2Vk''@;'; put 'put ''U2l6ZT09PU4uTUFYX1ZBTFVFXzMyQklUUyYmKHRoaXMudW5jb21wcmVzc2VkU2l6ZT1XLnJlYWRJbnQoOCkpLHRoaXMuY29tcHJlc3NlZFNpemU9PT1OLk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLmNvbXByZXNzZWRTaXplPVcucmVhZEludCg4KSksdGhpcy5sb2NhbEhlYWRlck9mZnNldD09''@;'; put 'put ''PU4uTUFYX1ZBTFVFXzMyQklUUyYmKHRoaXMubG9jYWxIZWFkZXJPZmZzZXQ9Vy5yZWFkSW50KDgpKSx0aGlzLmRpc2tOdW1iZXJTdGFydD09PU4uTUFYX1ZBTFVFXzMyQklUUyYmKHRoaXMuZGlza051bWJlclN0YXJ0PVcucmVhZEludCg0KSl9fSxyZWFkRXh0cmFGaWVsZHM6ZnVuY3Rpb24o''@;'; put 'put ''WSl7dmFyIHEsZWUsSixXPVkuaW5kZXg7Zm9yKHRoaXMuZXh0cmFGaWVsZHM9dGhpcy5leHRyYUZpZWxkc3x8e307WS5pbmRleDxXK3RoaXMuZXh0cmFGaWVsZHNMZW5ndGg7KXE9WS5yZWFkSW50KDIpLGVlPVkucmVhZEludCgyKSxKPVkucmVhZFN0cmluZyhlZSksdGhpcy5leHRyYUZpZWxk''@;'; put 'put ''c1txXT17aWQ6cSxsZW5ndGg6ZWUsdmFsdWU6Sn19LGhhbmRsZVVURjg6ZnVuY3Rpb24oKXtpZih0aGlzLnVzZVVURjgoKSl0aGlzLmZpbGVOYW1lPUsudXRmOGRlY29kZSh0aGlzLmZpbGVOYW1lKSx0aGlzLmZpbGVDb21tZW50PUsudXRmOGRlY29kZSh0aGlzLmZpbGVDb21tZW50KTtlbHNl''@;'; put 'put ''e3ZhciBZPXRoaXMuZmluZEV4dHJhRmllbGRVbmljb2RlUGF0aCgpO251bGwhPT1ZJiYodGhpcy5maWxlTmFtZT1ZKTt2YXIgVz10aGlzLmZpbmRFeHRyYUZpZWxkVW5pY29kZUNvbW1lbnQoKTtudWxsIT09VyYmKHRoaXMuZmlsZUNvbW1lbnQ9Vyl9fSxmaW5kRXh0cmFGaWVsZFVuaWNvZGVQ''@;'; put 'put ''YXRoOmZ1bmN0aW9uKCl7dmFyIFk9dGhpcy5leHRyYUZpZWxkc1syODc4OV07aWYoWSl7dmFyIFc9bmV3IHooWS52YWx1ZSk7cmV0dXJuIDEhPT1XLnJlYWRJbnQoMSl8fEsuY3JjMzIodGhpcy5maWxlTmFtZSkhPT1XLnJlYWRJbnQoNCk/bnVsbDpLLnV0ZjhkZWNvZGUoVy5yZWFkU3RyaW5n''@;'; put 'put ''KFkubGVuZ3RoLTUpKX1yZXR1cm4gbnVsbH0sZmluZEV4dHJhRmllbGRVbmljb2RlQ29tbWVudDpmdW5jdGlvbigpe3ZhciBZPXRoaXMuZXh0cmFGaWVsZHNbMjU0NjFdO2lmKFkpe3ZhciBXPW5ldyB6KFkudmFsdWUpO3JldHVybiAxIT09Vy5yZWFkSW50KDEpfHxLLmNyYzMyKHRoaXMuZmls''@;'; put 'put ''ZUNvbW1lbnQpIT09Vy5yZWFkSW50KDQpP251bGw6Sy51dGY4ZGVjb2RlKFcucmVhZFN0cmluZyhZLmxlbmd0aC01KSl9cmV0dXJuIG51bGx9fSxGLmV4cG9ydHM9Wn0seyIuL2NvbXByZXNzZWRPYmplY3QiOjIsIi4vb2JqZWN0IjoxMywiLi9zdHJpbmdSZWFkZXIiOjE1LCIuL3V0aWxzIjoy''@;'; put 'put ''MX1dLDI0OltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO3ZhciBaPXt9OygwLFAoIi4vbGliL3V0aWxzL2NvbW1vbiIpLmFzc2lnbikoWixQKCIuL2xpYi9kZWZsYXRlIiksUCgiLi9saWIvaW5mbGF0ZSIpLFAoIi4vbGliL3psaWIvY29uc3RhbnRzIikpLEYuZXhwb3J0cz1afSx7Ii4v''@;'; put 'put ''bGliL2RlZmxhdGUiOjI1LCIuL2xpYi9pbmZsYXRlIjoyNiwiLi9saWIvdXRpbHMvY29tbW9uIjoyNywiLi9saWIvemxpYi9jb25zdGFudHMiOjMwfV0sMjU6W2Z1bmN0aW9uKFAsRixSKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi96bGliL2RlZmxhdGUuanMiKSxOPVAoIi4vdXRpbHMvY29t''@;'; put 'put ''bW9uIiksTz1QKCIuL3V0aWxzL3N0cmluZ3MiKSxLPVAoIi4vemxpYi9tZXNzYWdlcyIpLFo9UCgiLi96bGliL3pzdHJlYW0iKSx1ZT1mdW5jdGlvbihNZSl7dGhpcy5vcHRpb25zPU4uYXNzaWduKHtsZXZlbDotMSxtZXRob2Q6OCxjaHVua1NpemU6MTYzODQsd2luZG93Qml0czoxNSxtZW1M''@;'; put 'put ''ZXZlbDo4LHN0cmF0ZWd5OjAsdG86IiJ9LE1lfHx7fSk7dmFyIFplPXRoaXMub3B0aW9ucztaZS5yYXcmJlplLndpbmRvd0JpdHM+MD9aZS53aW5kb3dCaXRzPS1aZS53aW5kb3dCaXRzOlplLmd6aXAmJlplLndpbmRvd0JpdHM+MCYmWmUud2luZG93Qml0czwxNiYmKFplLndpbmRvd0JpdHMr''@;'; put 'put ''PTE2KSx0aGlzLmVycj0wLHRoaXMubXNnPSIiLHRoaXMuZW5kZWQ9ITEsdGhpcy5jaHVua3M9W10sdGhpcy5zdHJtPW5ldyBaLHRoaXMuc3RybS5hdmFpbF9vdXQ9MDt2YXIgQj16LmRlZmxhdGVJbml0Mih0aGlzLnN0cm0sWmUubGV2ZWwsWmUubWV0aG9kLFplLndpbmRvd0JpdHMsWmUubWVt''@;'; put 'put ''TGV2ZWwsWmUuc3RyYXRlZ3kpO2lmKDAhPT1CKXRocm93IG5ldyBFcnJvcihLW0JdKTtaZS5oZWFkZXImJnouZGVmbGF0ZVNldEhlYWRlcih0aGlzLnN0cm0sWmUuaGVhZGVyKX07ZnVuY3Rpb24gZ2UoTWUsWmUpe3ZhciBCPW5ldyB1ZShaZSk7aWYoQi5wdXNoKE1lLCEwKSxCLmVycil0aHJv''@;'; put 'put ''dyBCLm1zZztyZXR1cm4gQi5yZXN1bHR9dWUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oTWUsWmUpe3ZhciB5LHgsQj10aGlzLnN0cm0sZz10aGlzLm9wdGlvbnMuY2h1bmtTaXplO2lmKHRoaXMuZW5kZWQpcmV0dXJuITE7eD1aZT09PX5+WmU/WmU6ITA9PT1aZT80OjAsQi5pbnB1dD0ic3Ry''@;'; put 'put ''aW5nIj09dHlwZW9mIE1lP08uc3RyaW5nMmJ1ZihNZSk6TWUsQi5uZXh0X2luPTAsQi5hdmFpbF9pbj1CLmlucHV0Lmxlbmd0aDtkb3tpZigwPT09Qi5hdmFpbF9vdXQmJihCLm91dHB1dD1uZXcgTi5CdWY4KGcpLEIubmV4dF9vdXQ9MCxCLmF2YWlsX291dD1nKSwxIT09KHk9ei5kZWZsYXRl''@;'; put 'put ''KEIseCkpJiYwIT09eSlyZXR1cm4gdGhpcy5vbkVuZCh5KSx0aGlzLmVuZGVkPSEwLCExOygwPT09Qi5hdmFpbF9vdXR8fDA9PT1CLmF2YWlsX2luJiY0PT09eCkmJnRoaXMub25EYXRhKCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvP08uYnVmMmJpbnN0cmluZyhOLnNocmlua0J1ZihCLm91''@;'; put 'put ''dHB1dCxCLm5leHRfb3V0KSk6Ti5zaHJpbmtCdWYoQi5vdXRwdXQsQi5uZXh0X291dCkpfXdoaWxlKChCLmF2YWlsX2luPjB8fDA9PT1CLmF2YWlsX291dCkmJjEhPT15KTtyZXR1cm4gNCE9PXh8fCh5PXouZGVmbGF0ZUVuZCh0aGlzLnN0cm0pLHRoaXMub25FbmQoeSksdGhpcy5lbmRlZD0h''@;'; put 'put ''MCwwPT09eSl9LHVlLnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rpb24oTWUpe3RoaXMuY2h1bmtzLnB1c2goTWUpfSx1ZS5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24oTWUpezA9PT1NZSYmKHRoaXMucmVzdWx0PSJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvP3RoaXMuY2h1bmtzLmpvaW4oIiIp''@;'; put 'put ''Ok4uZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPU1lLHRoaXMubXNnPXRoaXMuc3RybS5tc2d9LFIuRGVmbGF0ZT11ZSxSLmRlZmxhdGU9Z2UsUi5kZWZsYXRlUmF3PWZ1bmN0aW9uIF9lKE1lLFplKXtyZXR1cm4oWmU9WmV8fHt9KS5yYXc9ITAs''@;'; put 'put ''Z2UoTWUsWmUpfSxSLmd6aXA9ZnVuY3Rpb24gVGUoTWUsWmUpe3JldHVybihaZT1aZXx8e30pLmd6aXA9ITAsZ2UoTWUsWmUpfX0seyIuL3V0aWxzL2NvbW1vbiI6MjcsIi4vdXRpbHMvc3RyaW5ncyI6MjgsIi4vemxpYi9kZWZsYXRlLmpzIjozMiwiLi96bGliL21lc3NhZ2VzIjozNywiLi96''@;'; put 'put ''bGliL3pzdHJlYW0iOjM5fV0sMjY6W2Z1bmN0aW9uKFAsRixSKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi96bGliL2luZmxhdGUuanMiKSxOPVAoIi4vdXRpbHMvY29tbW9uIiksTz1QKCIuL3V0aWxzL3N0cmluZ3MiKSxLPVAoIi4vemxpYi9jb25zdGFudHMiKSxaPVAoIi4vemxpYi9tZXNz''@;'; put 'put ''YWdlcyIpLFk9UCgiLi96bGliL3pzdHJlYW0iKSxXPVAoIi4vemxpYi9nemhlYWRlciIpLHE9ZnVuY3Rpb24ocmUpe3RoaXMub3B0aW9ucz1OLmFzc2lnbih7Y2h1bmtTaXplOjE2Mzg0LHdpbmRvd0JpdHM6MCx0bzoiIn0scmV8fHt9KTt2YXIgaWU9dGhpcy5vcHRpb25zO2llLnJhdyYmaWUu''@;'; put 'put ''d2luZG93Qml0cz49MCYmaWUud2luZG93Qml0czwxNiYmKGllLndpbmRvd0JpdHM9LWllLndpbmRvd0JpdHMsMD09PWllLndpbmRvd0JpdHMmJihpZS53aW5kb3dCaXRzPS0xNSkpLGllLndpbmRvd0JpdHM+PTAmJmllLndpbmRvd0JpdHM8MTYmJiEocmUmJnJlLndpbmRvd0JpdHMpJiYoaWUu''@;'; put 'put ''d2luZG93Qml0cys9MzIpLGllLndpbmRvd0JpdHM+MTUmJmllLndpbmRvd0JpdHM8NDgmJiEoMTUmaWUud2luZG93Qml0cykmJihpZS53aW5kb3dCaXRzfD0xNSksdGhpcy5lcnI9MCx0aGlzLm1zZz0iIix0aGlzLmVuZGVkPSExLHRoaXMuY2h1bmtzPVtdLHRoaXMuc3RybT1uZXcgWSx0aGlz''@;'; put 'put ''LnN0cm0uYXZhaWxfb3V0PTA7dmFyIHVlPXouaW5mbGF0ZUluaXQyKHRoaXMuc3RybSxpZS53aW5kb3dCaXRzKTtpZih1ZSE9PUsuWl9PSyl0aHJvdyBuZXcgRXJyb3IoWlt1ZV0pO3RoaXMuaGVhZGVyPW5ldyBXLHouaW5mbGF0ZUdldEhlYWRlcih0aGlzLnN0cm0sdGhpcy5oZWFkZXIpfTtm''@;'; put 'put ''dW5jdGlvbiBlZShyZSxpZSl7dmFyIHVlPW5ldyBxKGllKTtpZih1ZS5wdXNoKHJlLCEwKSx1ZS5lcnIpdGhyb3cgdWUubXNnO3JldHVybiB1ZS5yZXN1bHR9cS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihyZSxpZSl7dmFyIF9lLFRlLE1lLFplLEIsdWU9dGhpcy5zdHJtLGdlPXRoaXMub3B0''@;'; put 'put ''aW9ucy5jaHVua1NpemU7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtUZT1pZT09PX5+aWU/aWU6ITA9PT1pZT9LLlpfRklOSVNIOksuWl9OT19GTFVTSCx1ZS5pbnB1dD0ic3RyaW5nIj09dHlwZW9mIHJlP08uYmluc3RyaW5nMmJ1ZihyZSk6cmUsdWUubmV4dF9pbj0wLHVlLmF2YWlsX2luPXVl''@;'; put 'put ''LmlucHV0Lmxlbmd0aDtkb3tpZigwPT09dWUuYXZhaWxfb3V0JiYodWUub3V0cHV0PW5ldyBOLkJ1ZjgoZ2UpLHVlLm5leHRfb3V0PTAsdWUuYXZhaWxfb3V0PWdlKSwoX2U9ei5pbmZsYXRlKHVlLEsuWl9OT19GTFVTSCkpIT09Sy5aX1NUUkVBTV9FTkQmJl9lIT09Sy5aX09LKXJldHVybiB0''@;'; put 'put ''aGlzLm9uRW5kKF9lKSx0aGlzLmVuZGVkPSEwLCExO3VlLm5leHRfb3V0JiYoMD09PXVlLmF2YWlsX291dHx8X2U9PT1LLlpfU1RSRUFNX0VORHx8MD09PXVlLmF2YWlsX2luJiZUZT09PUsuWl9GSU5JU0gpJiYoInN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/KE1lPU8udXRmOGJvcmRlcih1''@;'; put 'put ''ZS5vdXRwdXQsdWUubmV4dF9vdXQpLFplPXVlLm5leHRfb3V0LU1lLEI9Ty5idWYyc3RyaW5nKHVlLm91dHB1dCxNZSksdWUubmV4dF9vdXQ9WmUsdWUuYXZhaWxfb3V0PWdlLVplLFplJiZOLmFycmF5U2V0KHVlLm91dHB1dCx1ZS5vdXRwdXQsTWUsWmUsMCksdGhpcy5vbkRhdGEoQikpOnRo''@;'; put 'put ''aXMub25EYXRhKE4uc2hyaW5rQnVmKHVlLm91dHB1dCx1ZS5uZXh0X291dCkpKX13aGlsZSh1ZS5hdmFpbF9pbj4wJiZfZSE9PUsuWl9TVFJFQU1fRU5EKTtyZXR1cm4gX2U9PT1LLlpfU1RSRUFNX0VORCYmKFRlPUsuWl9GSU5JU0gpLFRlIT09Sy5aX0ZJTklTSHx8KF9lPXouaW5mbGF0ZUVu''@;'; put 'put ''ZCh0aGlzLnN0cm0pLHRoaXMub25FbmQoX2UpLHRoaXMuZW5kZWQ9ITAsX2U9PT1LLlpfT0spfSxxLnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rpb24ocmUpe3RoaXMuY2h1bmtzLnB1c2gocmUpfSxxLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbihyZSl7cmU9PT1LLlpfT0smJih0aGlzLnJlc3Vs''@;'; put 'put ''dD0ic3RyaW5nIj09PXRoaXMub3B0aW9ucy50bz90aGlzLmNodW5rcy5qb2luKCIiKTpOLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj1yZSx0aGlzLm1zZz10aGlzLnN0cm0ubXNnfSxSLkluZmxhdGU9cSxSLmluZmxhdGU9ZWUsUi5pbmZsYXRl''@;'; put 'put ''UmF3PWZ1bmN0aW9uIEoocmUsaWUpe3JldHVybihpZT1pZXx8e30pLnJhdz0hMCxlZShyZSxpZSl9LFIudW5nemlwPWVlfSx7Ii4vdXRpbHMvY29tbW9uIjoyNywiLi91dGlscy9zdHJpbmdzIjoyOCwiLi96bGliL2NvbnN0YW50cyI6MzAsIi4vemxpYi9nemhlYWRlciI6MzMsIi4vemxpYi9p''@;'; put 'put ''bmZsYXRlLmpzIjozNSwiLi96bGliL21lc3NhZ2VzIjozNywiLi96bGliL3pzdHJlYW0iOjM5fV0sMjc6W2Z1bmN0aW9uKFAsRixSKXsidXNlIHN0cmljdCI7dmFyIHo9dHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZ0eXBlb2YgVWludDE2QXJyYXk8InUiJiZ0eXBlb2YgSW50MzJBcnJheTwidSI7''@;'; put 'put ''Ui5hc3NpZ249ZnVuY3Rpb24oSyl7Zm9yKHZhciBaPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtaLmxlbmd0aDspe3ZhciBZPVouc2hpZnQoKTtpZihZKXtpZigib2JqZWN0IiE9dHlwZW9mIFkpdGhyb3cgbmV3IFR5cGVFcnJvcihZKyJtdXN0IGJlIG5vbi1vYmpl''@;'; put 'put ''Y3QiKTtmb3IodmFyIFcgaW4gWSlZLmhhc093blByb3BlcnR5KFcpJiYoS1tXXT1ZW1ddKX19cmV0dXJuIEt9LFIuc2hyaW5rQnVmPWZ1bmN0aW9uKEssWil7cmV0dXJuIEsubGVuZ3RoPT09Wj9LOksuc3ViYXJyYXk/Sy5zdWJhcnJheSgwLFopOihLLmxlbmd0aD1aLEspfTt2YXIgTj17YXJy''@;'; put 'put ''YXlTZXQ6ZnVuY3Rpb24oSyxaLFksVyxxKXtpZihaLnN1YmFycmF5JiZLLnN1YmFycmF5KUsuc2V0KFouc3ViYXJyYXkoWSxZK1cpLHEpO2Vsc2UgZm9yKHZhciBlZT0wO2VlPFc7ZWUrKylLW3ErZWVdPVpbWStlZV19LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24oSyl7dmFyIFosWSxXLHEsZWUs''@;'; put 'put ''Sjtmb3IoVz0wLFo9MCxZPUsubGVuZ3RoO1o8WTtaKyspVys9S1taXS5sZW5ndGg7Zm9yKEo9bmV3IFVpbnQ4QXJyYXkoVykscT0wLFo9MCxZPUsubGVuZ3RoO1o8WTtaKyspSi5zZXQoZWU9S1taXSxxKSxxKz1lZS5sZW5ndGg7cmV0dXJuIEp9fSxPPXthcnJheVNldDpmdW5jdGlvbihLLFos''@;'; put 'put ''WSxXLHEpe2Zvcih2YXIgZWU9MDtlZTxXO2VlKyspS1txK2VlXT1aW1krZWVdfSxmbGF0dGVuQ2h1bmtzOmZ1bmN0aW9uKEspe3JldHVybltdLmNvbmNhdC5hcHBseShbXSxLKX19O1Iuc2V0VHlwZWQ9ZnVuY3Rpb24oSyl7Sz8oUi5CdWY4PVVpbnQ4QXJyYXksUi5CdWYxNj1VaW50MTZBcnJh''@;'; put 'put ''eSxSLkJ1ZjMyPUludDMyQXJyYXksUi5hc3NpZ24oUixOKSk6KFIuQnVmOD1BcnJheSxSLkJ1ZjE2PUFycmF5LFIuQnVmMzI9QXJyYXksUi5hc3NpZ24oUixPKSl9LFIuc2V0VHlwZWQoeil9LHt9XSwyODpbZnVuY3Rpb24oUCxGLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL2NvbW1vbiIp''@;'; put 'put ''LE49ITAsTz0hMDt0cnl7U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLFswXSl9Y2F0Y2h7Tj0hMX10cnl7U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG5ldyBVaW50OEFycmF5KDEpKX1jYXRjaHtPPSExfWZvcih2YXIgSz1uZXcgei5CdWY4KDI1NiksWj0wO1o8MjU2O1or''@;'; put 'put ''KylLW1pdPVo+PTI1Mj82Olo+PTI0OD81Olo+PTI0MD80Olo+PTIyND8zOlo+PTE5Mj8yOjE7ZnVuY3Rpb24gWShXLHEpe2lmKHE8NjU1MzcmJihXLnN1YmFycmF5JiZPfHwhVy5zdWJhcnJheSYmTikpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCx6LnNocmlua0J1ZihX''@;'; put 'put ''LHEpKTtmb3IodmFyIGVlPSIiLEo9MDtKPHE7SisrKWVlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFdbSl0pO3JldHVybiBlZX1LWzI1NF09S1syNTRdPTEsUi5zdHJpbmcyYnVmPWZ1bmN0aW9uKFcpe3ZhciBxLGVlLEoscmUsaWUsdWU9Vy5sZW5ndGgsZ2U9MDtmb3IocmU9MDtyZTx1ZTtyZSsr''@;'; put 'put ''KTU1Mjk2PT0oNjQ1MTImKGVlPVcuY2hhckNvZGVBdChyZSkpKSYmcmUrMTx1ZSYmNTYzMjA9PSg2NDUxMiYoSj1XLmNoYXJDb2RlQXQocmUrMSkpKSYmKGVlPTY1NTM2KyhlZS01NTI5Njw8MTApKyhKLTU2MzIwKSxyZSsrKSxnZSs9ZWU8MTI4PzE6ZWU8MjA0OD8yOmVlPDY1NTM2PzM6NDtm''@;'; put 'put ''b3IocT1uZXcgei5CdWY4KGdlKSxpZT0wLHJlPTA7aWU8Z2U7cmUrKyk1NTI5Nj09KDY0NTEyJihlZT1XLmNoYXJDb2RlQXQocmUpKSkmJnJlKzE8dWUmJjU2MzIwPT0oNjQ1MTImKEo9Vy5jaGFyQ29kZUF0KHJlKzEpKSkmJihlZT02NTUzNisoZWUtNTUyOTY8PDEwKSsoSi01NjMyMCkscmUr''@;'; put 'put ''KyksZWU8MTI4P3FbaWUrK109ZWU6ZWU8MjA0OD8ocVtpZSsrXT0xOTJ8ZWU+Pj42LHFbaWUrK109MTI4fDYzJmVlKTplZTw2NTUzNj8ocVtpZSsrXT0yMjR8ZWU+Pj4xMixxW2llKytdPTEyOHxlZT4+PjYmNjMscVtpZSsrXT0xMjh8NjMmZWUpOihxW2llKytdPTI0MHxlZT4+PjE4LHFbaWUr''@;'; put 'put ''K109MTI4fGVlPj4+MTImNjMscVtpZSsrXT0xMjh8ZWU+Pj42JjYzLHFbaWUrK109MTI4fDYzJmVlKTtyZXR1cm4gcX0sUi5idWYyYmluc3RyaW5nPWZ1bmN0aW9uKFcpe3JldHVybiBZKFcsVy5sZW5ndGgpfSxSLmJpbnN0cmluZzJidWY9ZnVuY3Rpb24oVyl7Zm9yKHZhciBxPW5ldyB6LkJ1''@;'; put 'put ''ZjgoVy5sZW5ndGgpLGVlPTAsSj1xLmxlbmd0aDtlZTxKO2VlKyspcVtlZV09Vy5jaGFyQ29kZUF0KGVlKTtyZXR1cm4gcX0sUi5idWYyc3RyaW5nPWZ1bmN0aW9uKFcscSl7dmFyIGVlLEoscmUsaWUsdWU9cXx8Vy5sZW5ndGgsZ2U9bmV3IEFycmF5KDIqdWUpO2ZvcihKPTAsZWU9MDtlZTx1''@;'; put 'put ''ZTspaWYoKHJlPVdbZWUrK10pPDEyOClnZVtKKytdPXJlO2Vsc2UgaWYoKGllPUtbcmVdKT40KWdlW0orK109NjU1MzMsZWUrPWllLTE7ZWxzZXtmb3IocmUmPTI9PT1pZT8zMTozPT09aWU/MTU6NztpZT4xJiZlZTx1ZTspcmU9cmU8PDZ8NjMmV1tlZSsrXSxpZS0tO2llPjE/Z2VbSisrXT02''@;'; put 'put ''NTUzMzpyZTw2NTUzNj9nZVtKKytdPXJlOihnZVtKKytdPTU1Mjk2fChyZS09NjU1MzYpPj4xMCYxMDIzLGdlW0orK109NTYzMjB8MTAyMyZyZSl9cmV0dXJuIFkoZ2UsSil9LFIudXRmOGJvcmRlcj1mdW5jdGlvbihXLHEpe3ZhciBlZTtmb3IoKHE9cXx8Vy5sZW5ndGgpPlcubGVuZ3RoJiYo''@;'; put 'put ''cT1XLmxlbmd0aCksZWU9cS0xO2VlPj0wJiYxMjg9PSgxOTImV1tlZV0pOyllZS0tO3JldHVybiBlZTwwfHwwPT09ZWU/cTplZStLW1dbZWVdXT5xP2VlOnF9fSx7Ii4vY29tbW9uIjoyN31dLDI5OltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO0YuZXhwb3J0cz1mdW5jdGlvbiB6KE4s''@;'; put 'put ''TyxLLFope2Zvcih2YXIgWT02NTUzNSZOLFc9Tj4+PjE2JjY1NTM1LHE9MDswIT09Szspe0stPXE9Sz4yZTM/MmUzOks7ZG97Vz1XKyhZPVkrT1taKytdfDApfDB9d2hpbGUoLS1xKTtZJT02NTUyMSxXJT02NTUyMX1yZXR1cm4gWXxXPDwxNn19LHt9XSwzMDpbZnVuY3Rpb24oUCxGLFIpe0Yu''@;'; put 'put ''ZXhwb3J0cz17Wl9OT19GTFVTSDowLFpfUEFSVElBTF9GTFVTSDoxLFpfU1lOQ19GTFVTSDoyLFpfRlVMTF9GTFVTSDozLFpfRklOSVNIOjQsWl9CTE9DSzo1LFpfVFJFRVM6NixaX09LOjAsWl9TVFJFQU1fRU5EOjEsWl9ORUVEX0RJQ1Q6MixaX0VSUk5POi0xLFpfU1RSRUFNX0VSUk9SOi0y''@;'; put 'put ''LFpfREFUQV9FUlJPUjotMyxaX0JVRl9FUlJPUjotNSxaX05PX0NPTVBSRVNTSU9OOjAsWl9CRVNUX1NQRUVEOjEsWl9CRVNUX0NPTVBSRVNTSU9OOjksWl9ERUZBVUxUX0NPTVBSRVNTSU9OOi0xLFpfRklMVEVSRUQ6MSxaX0hVRkZNQU5fT05MWToyLFpfUkxFOjMsWl9GSVhFRDo0LFpfREVG''@;'; put 'put ''QVVMVF9TVFJBVEVHWTowLFpfQklOQVJZOjAsWl9URVhUOjEsWl9VTktOT1dOOjIsWl9ERUZMQVRFRDo4fX0se31dLDMxOltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO3ZhciBOPWZ1bmN0aW9uIHooKXtmb3IodmFyIEssWj1bXSxZPTA7WTwyNTY7WSsrKXtLPVk7Zm9yKHZhciBXPTA7''@;'; put 'put ''Vzw4O1crKylLPTEmSz8zOTg4MjkyMzg0Xks+Pj4xOks+Pj4xO1pbWV09S31yZXR1cm4gWn0oKTtGLmV4cG9ydHM9ZnVuY3Rpb24gTyhLLFosWSxXKXt2YXIgcT1OLGVlPVcrWTtLPX5LO2Zvcih2YXIgSj1XO0o8ZWU7SisrKUs9Sz4+PjhecVsyNTUmKEteWltKXSldO3JldHVybn5LfX0se31d''@;'; put 'put ''LDMyOltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4uL3V0aWxzL2NvbW1vbiIpLE49UCgiLi90cmVlcyIpLE89UCgiLi9hZGxlcjMyIiksSz1QKCIuL2NyYzMyIiksWj1QKCIuL21lc3NhZ2VzIiksaXQ9MjYyO2Z1bmN0aW9uIFFlKFllLFR0KXtyZXR1cm4gWWUubXNn''@;'; put 'put ''PVpbVHRdLFR0fWZ1bmN0aW9uIHNuKFllKXtyZXR1cm4oWWU8PDEpLShZZT40Pzk6MCl9ZnVuY3Rpb24gdnQoWWUpe2Zvcih2YXIgVHQ9WWUubGVuZ3RoOy0tVHQ+PTA7KVllW1R0XT0wfWZ1bmN0aW9uIFN0KFllKXt2YXIgVHQ9WWUuc3RhdGUscnI9VHQucGVuZGluZztycj5ZZS5hdmFpbF9v''@;'; put 'put ''dXQmJihycj1ZZS5hdmFpbF9vdXQpLDAhPT1yciYmKHouYXJyYXlTZXQoWWUub3V0cHV0LFR0LnBlbmRpbmdfYnVmLFR0LnBlbmRpbmdfb3V0LHJyLFllLm5leHRfb3V0KSxZZS5uZXh0X291dCs9cnIsVHQucGVuZGluZ19vdXQrPXJyLFllLnRvdGFsX291dCs9cnIsWWUuYXZhaWxfb3V0LT1y''@;'; put 'put ''cixUdC5wZW5kaW5nLT1yciwwPT09VHQucGVuZGluZyYmKFR0LnBlbmRpbmdfb3V0PTApKX1mdW5jdGlvbiBlbihZZSxUdCl7Ti5fdHJfZmx1c2hfYmxvY2soWWUsWWUuYmxvY2tfc3RhcnQ+PTA/WWUuYmxvY2tfc3RhcnQ6LTEsWWUuc3Ryc3RhcnQtWWUuYmxvY2tfc3RhcnQsVHQpLFllLmJs''@;'; put 'put ''b2NrX3N0YXJ0PVllLnN0cnN0YXJ0LFN0KFllLnN0cm0pfWZ1bmN0aW9uIHV0KFllLFR0KXtZZS5wZW5kaW5nX2J1ZltZZS5wZW5kaW5nKytdPVR0fWZ1bmN0aW9uIFhlKFllLFR0KXtZZS5wZW5kaW5nX2J1ZltZZS5wZW5kaW5nKytdPVR0Pj4+OCYyNTUsWWUucGVuZGluZ19idWZbWWUucGVu''@;'; put 'put ''ZGluZysrXT0yNTUmVHR9ZnVuY3Rpb24gdHQoWWUsVHQscnIsZnQpe3ZhciBNdD1ZZS5hdmFpbF9pbjtyZXR1cm4gTXQ+ZnQmJihNdD1mdCksMD09PU10PzA6KFllLmF2YWlsX2luLT1NdCx6LmFycmF5U2V0KFR0LFllLmlucHV0LFllLm5leHRfaW4sTXQscnIpLDE9PT1ZZS5zdGF0ZS53cmFw''@;'; put 'put ''P1llLmFkbGVyPU8oWWUuYWRsZXIsVHQsTXQscnIpOjI9PT1ZZS5zdGF0ZS53cmFwJiYoWWUuYWRsZXI9SyhZZS5hZGxlcixUdCxNdCxycikpLFllLm5leHRfaW4rPU10LFllLnRvdGFsX2luKz1NdCxNdCl9ZnVuY3Rpb24gSWUoWWUsVHQpe3ZhciBNdCxabixycj1ZZS5tYXhfY2hhaW5fbGVu''@;'; put 'put ''Z3RoLGZ0PVllLnN0cnN0YXJ0LG5uPVllLnByZXZfbGVuZ3RoLFd0PVllLm5pY2VfbWF0Y2gsZGk9WWUuc3Ryc3RhcnQ+WWUud19zaXplLWl0P1llLnN0cnN0YXJ0LShZZS53X3NpemUtaXQpOjAsZG49WWUud2luZG93LG1uPVllLndfbWFzayxwaT1ZZS5wcmV2LGZuPVllLnN0cnN0YXJ0KzI1''@;'; put 'put ''OCx0bj1kbltmdCtubi0xXSxjYT1kbltmdCtubl07WWUucHJldl9sZW5ndGg+PVllLmdvb2RfbWF0Y2gmJihycj4+PTIpLFd0PlllLmxvb2thaGVhZCYmKFd0PVllLmxvb2thaGVhZCk7ZG97aWYoZG5bKE10PVR0KStubl09PT1jYSYmZG5bTXQrbm4tMV09PT10biYmZG5bTXRdPT09ZG5bZnRd''@;'; put 'put ''JiZkblsrK010XT09PWRuW2Z0KzFdKXtmdCs9MixNdCsrO2Rve313aGlsZShkblsrK2Z0XT09PWRuWysrTXRdJiZkblsrK2Z0XT09PWRuWysrTXRdJiZkblsrK2Z0XT09PWRuWysrTXRdJiZkblsrK2Z0XT09PWRuWysrTXRdJiZkblsrK2Z0XT09PWRuWysrTXRdJiZkblsrK2Z0XT09PWRuWysr''@;'; put 'put ''TXRdJiZkblsrK2Z0XT09PWRuWysrTXRdJiZkblsrK2Z0XT09PWRuWysrTXRdJiZmdDxmbik7aWYoWm49MjU4LShmbi1mdCksZnQ9Zm4tMjU4LFpuPm5uKXtpZihZZS5tYXRjaF9zdGFydD1UdCxubj1abixabj49V3QpYnJlYWs7dG49ZG5bZnQrbm4tMV0sY2E9ZG5bZnQrbm5dfX19d2hpbGUo''@;'; put 'put ''KFR0PXBpW1R0Jm1uXSk+ZGkmJjAhPS0tcnIpO3JldHVybiBubjw9WWUubG9va2FoZWFkP25uOlllLmxvb2thaGVhZH1mdW5jdGlvbiBhdChZZSl7dmFyIHJyLGZ0LE10LFpuLG5uLFR0PVllLndfc2l6ZTtkb3tpZihabj1ZZS53aW5kb3dfc2l6ZS1ZZS5sb29rYWhlYWQtWWUuc3Ryc3RhcnQs''@;'; put 'put ''WWUuc3Ryc3RhcnQ+PVR0KyhUdC1pdCkpe3ouYXJyYXlTZXQoWWUud2luZG93LFllLndpbmRvdyxUdCxUdCwwKSxZZS5tYXRjaF9zdGFydC09VHQsWWUuc3Ryc3RhcnQtPVR0LFllLmJsb2NrX3N0YXJ0LT1UdCxycj1mdD1ZZS5oYXNoX3NpemU7ZG97TXQ9WWUuaGVhZFstLXJyXSxZZS5oZWFk''@;'; put 'put ''W3JyXT1NdD49VHQ/TXQtVHQ6MH13aGlsZSgtLWZ0KTtycj1mdD1UdDtkb3tNdD1ZZS5wcmV2Wy0tcnJdLFllLnByZXZbcnJdPU10Pj1UdD9NdC1UdDowfXdoaWxlKC0tZnQpO1puKz1UdH1pZigwPT09WWUuc3RybS5hdmFpbF9pbilicmVhaztpZihmdD10dChZZS5zdHJtLFllLndpbmRvdyxZ''@;'; put 'put ''ZS5zdHJzdGFydCtZZS5sb29rYWhlYWQsWm4pLFllLmxvb2thaGVhZCs9ZnQsWWUubG9va2FoZWFkK1llLmluc2VydD49Mylmb3IoWWUuaW5zX2g9WWUud2luZG93W25uPVllLnN0cnN0YXJ0LVllLmluc2VydF0sWWUuaW5zX2g9KFllLmluc19oPDxZZS5oYXNoX3NoaWZ0XlllLndpbmRvd1tu''@;'; put 'put ''bisxXSkmWWUuaGFzaF9tYXNrO1llLmluc2VydCYmKFllLmluc19oPShZZS5pbnNfaDw8WWUuaGFzaF9zaGlmdF5ZZS53aW5kb3dbbm4rMy0xXSkmWWUuaGFzaF9tYXNrLFllLnByZXZbbm4mWWUud19tYXNrXT1ZZS5oZWFkW1llLmluc19oXSxZZS5oZWFkW1llLmluc19oXT1ubixubisrLFll''@;'; put 'put ''Lmluc2VydC0tLCEoWWUubG9va2FoZWFkK1llLmluc2VydDwzKSk7KTt9d2hpbGUoWWUubG9va2FoZWFkPGl0JiYwIT09WWUuc3RybS5hdmFpbF9pbil9ZnVuY3Rpb24gSXQoWWUsVHQpe2Zvcih2YXIgcnIsZnQ7Oyl7aWYoWWUubG9va2FoZWFkPGl0KXtpZihhdChZZSksWWUubG9va2FoZWFk''@;'; put 'put ''PGl0JiYwPT09VHQpcmV0dXJuIDE7aWYoMD09PVllLmxvb2thaGVhZClicmVha31pZihycj0wLFllLmxvb2thaGVhZD49MyYmKFllLmluc19oPShZZS5pbnNfaDw8WWUuaGFzaF9zaGlmdF5ZZS53aW5kb3dbWWUuc3Ryc3RhcnQrMy0xXSkmWWUuaGFzaF9tYXNrLHJyPVllLnByZXZbWWUuc3Ry''@;'; put 'put ''c3RhcnQmWWUud19tYXNrXT1ZZS5oZWFkW1llLmluc19oXSxZZS5oZWFkW1llLmluc19oXT1ZZS5zdHJzdGFydCksMCE9PXJyJiZZZS5zdHJzdGFydC1ycjw9WWUud19zaXplLWl0JiYoWWUubWF0Y2hfbGVuZ3RoPUllKFllLHJyKSksWWUubWF0Y2hfbGVuZ3RoPj0zKWlmKGZ0PU4uX3RyX3Rh''@;'; put 'put ''bGx5KFllLFllLnN0cnN0YXJ0LVllLm1hdGNoX3N0YXJ0LFllLm1hdGNoX2xlbmd0aC0zKSxZZS5sb29rYWhlYWQtPVllLm1hdGNoX2xlbmd0aCxZZS5tYXRjaF9sZW5ndGg8PVllLm1heF9sYXp5X21hdGNoJiZZZS5sb29rYWhlYWQ+PTMpe1llLm1hdGNoX2xlbmd0aC0tO2Rve1llLnN0cnN0''@;'; put 'put ''YXJ0KyssWWUuaW5zX2g9KFllLmluc19oPDxZZS5oYXNoX3NoaWZ0XlllLndpbmRvd1tZZS5zdHJzdGFydCszLTFdKSZZZS5oYXNoX21hc2sscnI9WWUucHJldltZZS5zdHJzdGFydCZZZS53X21hc2tdPVllLmhlYWRbWWUuaW5zX2hdLFllLmhlYWRbWWUuaW5zX2hdPVllLnN0cnN0YXJ0fXdo''@;'; put 'put ''aWxlKDAhPS0tWWUubWF0Y2hfbGVuZ3RoKTtZZS5zdHJzdGFydCsrfWVsc2UgWWUuc3Ryc3RhcnQrPVllLm1hdGNoX2xlbmd0aCxZZS5tYXRjaF9sZW5ndGg9MCxZZS5pbnNfaD1ZZS53aW5kb3dbWWUuc3Ryc3RhcnRdLFllLmluc19oPShZZS5pbnNfaDw8WWUuaGFzaF9zaGlmdF5ZZS53aW5k''@;'; put 'put ''b3dbWWUuc3Ryc3RhcnQrMV0pJlllLmhhc2hfbWFzaztlbHNlIGZ0PU4uX3RyX3RhbGx5KFllLDAsWWUud2luZG93W1llLnN0cnN0YXJ0XSksWWUubG9va2FoZWFkLS0sWWUuc3Ryc3RhcnQrKztpZihmdCYmKGVuKFllLCExKSwwPT09WWUuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVy''@;'; put 'put ''biBZZS5pbnNlcnQ9WWUuc3Ryc3RhcnQ8Mj9ZZS5zdHJzdGFydDoyLDQ9PT1UdD8oZW4oWWUsITApLDA9PT1ZZS5zdHJtLmF2YWlsX291dD8zOjQpOlllLmxhc3RfbGl0JiYoZW4oWWUsITEpLDA9PT1ZZS5zdHJtLmF2YWlsX291dCk/MToyfWZ1bmN0aW9uIFJ0KFllLFR0KXtmb3IodmFyIHJy''@;'; put 'put ''LGZ0LE10Ozspe2lmKFllLmxvb2thaGVhZDxpdCl7aWYoYXQoWWUpLFllLmxvb2thaGVhZDxpdCYmMD09PVR0KXJldHVybiAxO2lmKDA9PT1ZZS5sb29rYWhlYWQpYnJlYWt9aWYocnI9MCxZZS5sb29rYWhlYWQ+PTMmJihZZS5pbnNfaD0oWWUuaW5zX2g8PFllLmhhc2hfc2hpZnReWWUud2lu''@;'; put 'put ''ZG93W1llLnN0cnN0YXJ0KzMtMV0pJlllLmhhc2hfbWFzayxycj1ZZS5wcmV2W1llLnN0cnN0YXJ0JlllLndfbWFza109WWUuaGVhZFtZZS5pbnNfaF0sWWUuaGVhZFtZZS5pbnNfaF09WWUuc3Ryc3RhcnQpLFllLnByZXZfbGVuZ3RoPVllLm1hdGNoX2xlbmd0aCxZZS5wcmV2X21hdGNoPVll''@;'; put 'put ''Lm1hdGNoX3N0YXJ0LFllLm1hdGNoX2xlbmd0aD0yLDAhPT1yciYmWWUucHJldl9sZW5ndGg8WWUubWF4X2xhenlfbWF0Y2gmJlllLnN0cnN0YXJ0LXJyPD1ZZS53X3NpemUtaXQmJihZZS5tYXRjaF9sZW5ndGg9SWUoWWUscnIpLFllLm1hdGNoX2xlbmd0aDw9NSYmKDE9PT1ZZS5zdHJhdGVn''@;'; put 'put ''eXx8Mz09PVllLm1hdGNoX2xlbmd0aCYmWWUuc3Ryc3RhcnQtWWUubWF0Y2hfc3RhcnQ+NDA5NikmJihZZS5tYXRjaF9sZW5ndGg9MikpLFllLnByZXZfbGVuZ3RoPj0zJiZZZS5tYXRjaF9sZW5ndGg8PVllLnByZXZfbGVuZ3RoKXtNdD1ZZS5zdHJzdGFydCtZZS5sb29rYWhlYWQtMyxmdD1O''@;'; put 'put ''Ll90cl90YWxseShZZSxZZS5zdHJzdGFydC0xLVllLnByZXZfbWF0Y2gsWWUucHJldl9sZW5ndGgtMyksWWUubG9va2FoZWFkLT1ZZS5wcmV2X2xlbmd0aC0xLFllLnByZXZfbGVuZ3RoLT0yO2RveysrWWUuc3Ryc3RhcnQ8PU10JiYoWWUuaW5zX2g9KFllLmluc19oPDxZZS5oYXNoX3NoaWZ0''@;'; put 'put ''XlllLndpbmRvd1tZZS5zdHJzdGFydCszLTFdKSZZZS5oYXNoX21hc2sscnI9WWUucHJldltZZS5zdHJzdGFydCZZZS53X21hc2tdPVllLmhlYWRbWWUuaW5zX2hdLFllLmhlYWRbWWUuaW5zX2hdPVllLnN0cnN0YXJ0KX13aGlsZSgwIT0tLVllLnByZXZfbGVuZ3RoKTtpZihZZS5tYXRjaF9h''@;'; put 'put ''dmFpbGFibGU9MCxZZS5tYXRjaF9sZW5ndGg9MixZZS5zdHJzdGFydCsrLGZ0JiYoZW4oWWUsITEpLDA9PT1ZZS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9ZWxzZSBpZihZZS5tYXRjaF9hdmFpbGFibGUpe2lmKChmdD1OLl90cl90YWxseShZZSwwLFllLndpbmRvd1tZZS5zdHJzdGFydC0x''@;'; put 'put ''XSkpJiZlbihZZSwhMSksWWUuc3Ryc3RhcnQrKyxZZS5sb29rYWhlYWQtLSwwPT09WWUuc3RybS5hdmFpbF9vdXQpcmV0dXJuIDF9ZWxzZSBZZS5tYXRjaF9hdmFpbGFibGU9MSxZZS5zdHJzdGFydCsrLFllLmxvb2thaGVhZC0tfXJldHVybiBZZS5tYXRjaF9hdmFpbGFibGUmJihmdD1OLl90''@;'; put 'put ''cl90YWxseShZZSwwLFllLndpbmRvd1tZZS5zdHJzdGFydC0xXSksWWUubWF0Y2hfYXZhaWxhYmxlPTApLFllLmluc2VydD1ZZS5zdHJzdGFydDwyP1llLnN0cnN0YXJ0OjIsND09PVR0PyhlbihZZSwhMCksMD09PVllLnN0cm0uYXZhaWxfb3V0PzM6NCk6WWUubGFzdF9saXQmJihlbihZZSwh''@;'; put 'put ''MSksMD09PVllLnN0cm0uYXZhaWxfb3V0KT8xOjJ9dmFyIG5pLGxuPWZ1bmN0aW9uKFllLFR0LHJyLGZ0LE10KXt0aGlzLmdvb2RfbGVuZ3RoPVllLHRoaXMubWF4X2xhenk9VHQsdGhpcy5uaWNlX2xlbmd0aD1ycix0aGlzLm1heF9jaGFpbj1mdCx0aGlzLmZ1bmM9TXR9O2Z1bmN0aW9uIGh0''@;'; put 'put ''KCl7dGhpcy5zdHJtPW51bGwsdGhpcy5zdGF0dXM9MCx0aGlzLnBlbmRpbmdfYnVmPW51bGwsdGhpcy5wZW5kaW5nX2J1Zl9zaXplPTAsdGhpcy5wZW5kaW5nX291dD0wLHRoaXMucGVuZGluZz0wLHRoaXMud3JhcD0wLHRoaXMuZ3poZWFkPW51bGwsdGhpcy5nemluZGV4PTAsdGhpcy5tZXRo''@;'; put 'put ''b2Q9OCx0aGlzLmxhc3RfZmx1c2g9LTEsdGhpcy53X3NpemU9MCx0aGlzLndfYml0cz0wLHRoaXMud19tYXNrPTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLndpbmRvd19zaXplPTAsdGhpcy5wcmV2PW51bGwsdGhpcy5oZWFkPW51bGwsdGhpcy5pbnNfaD0wLHRoaXMuaGFzaF9zaXplPTAsdGhp''@;'; put 'put ''cy5oYXNoX2JpdHM9MCx0aGlzLmhhc2hfbWFzaz0wLHRoaXMuaGFzaF9zaGlmdD0wLHRoaXMuYmxvY2tfc3RhcnQ9MCx0aGlzLm1hdGNoX2xlbmd0aD0wLHRoaXMucHJldl9tYXRjaD0wLHRoaXMubWF0Y2hfYXZhaWxhYmxlPTAsdGhpcy5zdHJzdGFydD0wLHRoaXMubWF0Y2hfc3RhcnQ9MCx0''@;'; put 'put ''aGlzLmxvb2thaGVhZD0wLHRoaXMucHJldl9sZW5ndGg9MCx0aGlzLm1heF9jaGFpbl9sZW5ndGg9MCx0aGlzLm1heF9sYXp5X21hdGNoPTAsdGhpcy5sZXZlbD0wLHRoaXMuc3RyYXRlZ3k9MCx0aGlzLmdvb2RfbWF0Y2g9MCx0aGlzLm5pY2VfbWF0Y2g9MCx0aGlzLmR5bl9sdHJlZT1uZXcg''@;'; put 'put ''ei5CdWYxNigxMTQ2KSx0aGlzLmR5bl9kdHJlZT1uZXcgei5CdWYxNigxMjIpLHRoaXMuYmxfdHJlZT1uZXcgei5CdWYxNig3OCksdnQodGhpcy5keW5fbHRyZWUpLHZ0KHRoaXMuZHluX2R0cmVlKSx2dCh0aGlzLmJsX3RyZWUpLHRoaXMubF9kZXNjPW51bGwsdGhpcy5kX2Rlc2M9bnVsbCx0''@;'; put 'put ''aGlzLmJsX2Rlc2M9bnVsbCx0aGlzLmJsX2NvdW50PW5ldyB6LkJ1ZjE2KDE2KSx0aGlzLmhlYXA9bmV3IHouQnVmMTYoNTczKSx2dCh0aGlzLmhlYXApLHRoaXMuaGVhcF9sZW49MCx0aGlzLmhlYXBfbWF4PTAsdGhpcy5kZXB0aD1uZXcgei5CdWYxNig1NzMpLHZ0KHRoaXMuZGVwdGgpLHRo''@;'; put 'put ''aXMubF9idWY9MCx0aGlzLmxpdF9idWZzaXplPTAsdGhpcy5sYXN0X2xpdD0wLHRoaXMuZF9idWY9MCx0aGlzLm9wdF9sZW49MCx0aGlzLnN0YXRpY19sZW49MCx0aGlzLm1hdGNoZXM9MCx0aGlzLmluc2VydD0wLHRoaXMuYmlfYnVmPTAsdGhpcy5iaV92YWxpZD0wfWZ1bmN0aW9uIFJyKFll''@;'; put 'put ''KXt2YXIgVHQ7cmV0dXJuIFllJiZZZS5zdGF0ZT8oWWUudG90YWxfaW49WWUudG90YWxfb3V0PTAsWWUuZGF0YV90eXBlPTIsKFR0PVllLnN0YXRlKS5wZW5kaW5nPTAsVHQucGVuZGluZ19vdXQ9MCxUdC53cmFwPDAmJihUdC53cmFwPS1UdC53cmFwKSxUdC5zdGF0dXM9VHQud3JhcD80Mjox''@;'; put 'put ''MTMsWWUuYWRsZXI9Mj09PVR0LndyYXA/MDoxLFR0Lmxhc3RfZmx1c2g9MCxOLl90cl9pbml0KFR0KSwwKTpRZShZZSwtMil9ZnVuY3Rpb24gQnQoWWUpe3ZhciBUdD1ScihZZSk7cmV0dXJuIDA9PT1UdCYmZnVuY3Rpb24gaG4oWWUpe1llLndpbmRvd19zaXplPTIqWWUud19zaXplLHZ0KFll''@;'; put 'put ''LmhlYWQpLFllLm1heF9sYXp5X21hdGNoPW5pW1llLmxldmVsXS5tYXhfbGF6eSxZZS5nb29kX21hdGNoPW5pW1llLmxldmVsXS5nb29kX2xlbmd0aCxZZS5uaWNlX21hdGNoPW5pW1llLmxldmVsXS5uaWNlX2xlbmd0aCxZZS5tYXhfY2hhaW5fbGVuZ3RoPW5pW1llLmxldmVsXS5tYXhfY2hh''@;'; put 'put ''aW4sWWUuc3Ryc3RhcnQ9MCxZZS5ibG9ja19zdGFydD0wLFllLmxvb2thaGVhZD0wLFllLmluc2VydD0wLFllLm1hdGNoX2xlbmd0aD1ZZS5wcmV2X2xlbmd0aD0yLFllLm1hdGNoX2F2YWlsYWJsZT0wLFllLmluc19oPTB9KFllLnN0YXRlKSxUdH1mdW5jdGlvbiBGbihZZSxUdCxycixmdCxN''@;'; put 'put ''dCxabil7aWYoIVllKXJldHVybi0yO3ZhciBubj0xO2lmKC0xPT09VHQmJihUdD02KSxmdDwwPyhubj0wLGZ0PS1mdCk6ZnQ+MTUmJihubj0yLGZ0LT0xNiksTXQ8MXx8TXQ+OXx8OCE9PXJyfHxmdDw4fHxmdD4xNXx8VHQ8MHx8VHQ+OXx8Wm48MHx8Wm4+NClyZXR1cm4gUWUoWWUsLTIpOzg9''@;'; put 'put ''PT1mdCYmKGZ0PTkpO3ZhciBXdD1uZXcgaHQ7cmV0dXJuIFllLnN0YXRlPVd0LFd0LnN0cm09WWUsV3Qud3JhcD1ubixXdC5nemhlYWQ9bnVsbCxXdC53X2JpdHM9ZnQsV3Qud19zaXplPTE8PFd0LndfYml0cyxXdC53X21hc2s9V3Qud19zaXplLTEsV3QuaGFzaF9iaXRzPU10KzcsV3QuaGFz''@;'; put 'put ''aF9zaXplPTE8PFd0Lmhhc2hfYml0cyxXdC5oYXNoX21hc2s9V3QuaGFzaF9zaXplLTEsV3QuaGFzaF9zaGlmdD1+figoV3QuaGFzaF9iaXRzKzMtMSkvMyksV3Qud2luZG93PW5ldyB6LkJ1ZjgoMipXdC53X3NpemUpLFd0LmhlYWQ9bmV3IHouQnVmMTYoV3QuaGFzaF9zaXplKSxXdC5wcmV2''@;'; put 'put ''PW5ldyB6LkJ1ZjE2KFd0Lndfc2l6ZSksV3QubGl0X2J1ZnNpemU9MTw8TXQrNixXdC5wZW5kaW5nX2J1Zl9zaXplPTQqV3QubGl0X2J1ZnNpemUsV3QucGVuZGluZ19idWY9bmV3IHouQnVmOChXdC5wZW5kaW5nX2J1Zl9zaXplKSxXdC5kX2J1Zj1XdC5saXRfYnVmc2l6ZT4+MSxXdC5sX2J1''@;'; put 'put ''Zj0zKld0LmxpdF9idWZzaXplLFd0LmxldmVsPVR0LFd0LnN0cmF0ZWd5PVpuLFd0Lm1ldGhvZD1ycixCdChZZSl9bmk9W25ldyBsbigwLDAsMCwwLGZ1bmN0aW9uIHVuKFllLFR0KXt2YXIgcnI9NjU1MzU7Zm9yKHJyPlllLnBlbmRpbmdfYnVmX3NpemUtNSYmKHJyPVllLnBlbmRpbmdfYnVm''@;'; put 'put ''X3NpemUtNSk7Oyl7aWYoWWUubG9va2FoZWFkPD0xKXtpZihhdChZZSksMD09PVllLmxvb2thaGVhZCYmMD09PVR0KXJldHVybiAxO2lmKDA9PT1ZZS5sb29rYWhlYWQpYnJlYWt9WWUuc3Ryc3RhcnQrPVllLmxvb2thaGVhZCxZZS5sb29rYWhlYWQ9MDt2YXIgZnQ9WWUuYmxvY2tfc3RhcnQr''@;'; put 'put ''cnI7aWYoKDA9PT1ZZS5zdHJzdGFydHx8WWUuc3Ryc3RhcnQ+PWZ0KSYmKFllLmxvb2thaGVhZD1ZZS5zdHJzdGFydC1mdCxZZS5zdHJzdGFydD1mdCxlbihZZSwhMSksMD09PVllLnN0cm0uYXZhaWxfb3V0KXx8WWUuc3Ryc3RhcnQtWWUuYmxvY2tfc3RhcnQ+PVllLndfc2l6ZS1pdCYmKGVu''@;'; put 'put ''KFllLCExKSwwPT09WWUuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBZZS5pbnNlcnQ9MCw0PT09VHQ/KGVuKFllLCEwKSwwPT09WWUuc3RybS5hdmFpbF9vdXQ/Mzo0KTooWWUuc3Ryc3RhcnQ+WWUuYmxvY2tfc3RhcnQmJmVuKFllLCExKSwxKX0pLG5ldyBsbig0LDQsOCw0LEl0''@;'; put 'put ''KSxuZXcgbG4oNCw1LDE2LDgsSXQpLG5ldyBsbig0LDYsMzIsMzIsSXQpLG5ldyBsbig0LDQsMTYsMTYsUnQpLG5ldyBsbig4LDE2LDMyLDMyLFJ0KSxuZXcgbG4oOCwxNiwxMjgsMTI4LFJ0KSxuZXcgbG4oOCwzMiwxMjgsMjU2LFJ0KSxuZXcgbG4oMzIsMTI4LDI1OCwxMDI0LFJ0KSxuZXcg''@;'; put 'put ''bG4oMzIsMjU4LDI1OCw0MDk2LFJ0KV0sUi5kZWZsYXRlSW5pdD1mdW5jdGlvbiBzdChZZSxUdCl7cmV0dXJuIEZuKFllLFR0LDgsMTUsOCwwKX0sUi5kZWZsYXRlSW5pdDI9Rm4sUi5kZWZsYXRlUmVzZXQ9QnQsUi5kZWZsYXRlUmVzZXRLZWVwPVJyLFIuZGVmbGF0ZVNldEhlYWRlcj1mdW5j''@;'; put 'put ''dGlvbiBBdChZZSxUdCl7cmV0dXJuIFllJiZZZS5zdGF0ZSYmMj09PVllLnN0YXRlLndyYXA/KFllLnN0YXRlLmd6aGVhZD1UdCwwKTotMn0sUi5kZWZsYXRlPWZ1bmN0aW9uIFp0KFllLFR0KXt2YXIgcnIsZnQsTXQsWm47aWYoIVllfHwhWWUuc3RhdGV8fFR0PjV8fFR0PDApcmV0dXJuIFll''@;'; put 'put ''P1FlKFllLC0yKTotMjtpZihmdD1ZZS5zdGF0ZSwhWWUub3V0cHV0fHwhWWUuaW5wdXQmJjAhPT1ZZS5hdmFpbF9pbnx8NjY2PT09ZnQuc3RhdHVzJiY0IT09VHQpcmV0dXJuIFFlKFllLDA9PT1ZZS5hdmFpbF9vdXQ/LTU6LTIpO2lmKGZ0LnN0cm09WWUscnI9ZnQubGFzdF9mbHVzaCxmdC5s''@;'; put 'put ''YXN0X2ZsdXNoPVR0LDQyPT09ZnQuc3RhdHVzKWlmKDI9PT1mdC53cmFwKVllLmFkbGVyPTAsdXQoZnQsMzEpLHV0KGZ0LDEzOSksdXQoZnQsOCksZnQuZ3poZWFkPyh1dChmdCwoZnQuZ3poZWFkLnRleHQ/MTowKSsoZnQuZ3poZWFkLmhjcmM/MjowKSsoZnQuZ3poZWFkLmV4dHJhPzQ6MCkr''@;'; put 'put ''KGZ0Lmd6aGVhZC5uYW1lPzg6MCkrKGZ0Lmd6aGVhZC5jb21tZW50PzE2OjApKSx1dChmdCwyNTUmZnQuZ3poZWFkLnRpbWUpLHV0KGZ0LGZ0Lmd6aGVhZC50aW1lPj44JjI1NSksdXQoZnQsZnQuZ3poZWFkLnRpbWU+PjE2JjI1NSksdXQoZnQsZnQuZ3poZWFkLnRpbWU+PjI0JjI1NSksdXQo''@;'; put 'put ''ZnQsOT09PWZ0LmxldmVsPzI6ZnQuc3RyYXRlZ3k+PTJ8fGZ0LmxldmVsPDI/NDowKSx1dChmdCwyNTUmZnQuZ3poZWFkLm9zKSxmdC5nemhlYWQuZXh0cmEmJmZ0Lmd6aGVhZC5leHRyYS5sZW5ndGgmJih1dChmdCwyNTUmZnQuZ3poZWFkLmV4dHJhLmxlbmd0aCksdXQoZnQsZnQuZ3poZWFk''@;'; put 'put ''LmV4dHJhLmxlbmd0aD4+OCYyNTUpKSxmdC5nemhlYWQuaGNyYyYmKFllLmFkbGVyPUsoWWUuYWRsZXIsZnQucGVuZGluZ19idWYsZnQucGVuZGluZywwKSksZnQuZ3ppbmRleD0wLGZ0LnN0YXR1cz02OSk6KHV0KGZ0LDApLHV0KGZ0LDApLHV0KGZ0LDApLHV0KGZ0LDApLHV0KGZ0LDApLHV0''@;'; put 'put ''KGZ0LDk9PT1mdC5sZXZlbD8yOmZ0LnN0cmF0ZWd5Pj0yfHxmdC5sZXZlbDwyPzQ6MCksdXQoZnQsMyksZnQuc3RhdHVzPTExMyk7ZWxzZXt2YXIgbm49OCsoZnQud19iaXRzLTg8PDQpPDw4O25ufD0oZnQuc3RyYXRlZ3k+PTJ8fGZ0LmxldmVsPDI/MDpmdC5sZXZlbDw2PzE6Nj09PWZ0Lmxl''@;'; put 'put ''dmVsPzI6Myk8PDYsMCE9PWZ0LnN0cnN0YXJ0JiYobm58PTMyKSxubis9MzEtbm4lMzEsZnQuc3RhdHVzPTExMyxYZShmdCxubiksMCE9PWZ0LnN0cnN0YXJ0JiYoWGUoZnQsWWUuYWRsZXI+Pj4xNiksWGUoZnQsNjU1MzUmWWUuYWRsZXIpKSxZZS5hZGxlcj0xfWlmKDY5PT09ZnQuc3RhdHVz''@;'; put 'put ''KWlmKGZ0Lmd6aGVhZC5leHRyYSl7Zm9yKE10PWZ0LnBlbmRpbmc7ZnQuZ3ppbmRleDwoNjU1MzUmZnQuZ3poZWFkLmV4dHJhLmxlbmd0aCkmJihmdC5wZW5kaW5nIT09ZnQucGVuZGluZ19idWZfc2l6ZXx8KGZ0Lmd6aGVhZC5oY3JjJiZmdC5wZW5kaW5nPk10JiYoWWUuYWRsZXI9SyhZZS5h''@;'; put 'put ''ZGxlcixmdC5wZW5kaW5nX2J1ZixmdC5wZW5kaW5nLU10LE10KSksU3QoWWUpLE10PWZ0LnBlbmRpbmcsZnQucGVuZGluZyE9PWZ0LnBlbmRpbmdfYnVmX3NpemUpKTspdXQoZnQsMjU1JmZ0Lmd6aGVhZC5leHRyYVtmdC5nemluZGV4XSksZnQuZ3ppbmRleCsrO2Z0Lmd6aGVhZC5oY3JjJiZm''@;'; put 'put ''dC5wZW5kaW5nPk10JiYoWWUuYWRsZXI9SyhZZS5hZGxlcixmdC5wZW5kaW5nX2J1ZixmdC5wZW5kaW5nLU10LE10KSksZnQuZ3ppbmRleD09PWZ0Lmd6aGVhZC5leHRyYS5sZW5ndGgmJihmdC5nemluZGV4PTAsZnQuc3RhdHVzPTczKX1lbHNlIGZ0LnN0YXR1cz03MztpZig3Mz09PWZ0LnN0''@;'; put 'put ''YXR1cylpZihmdC5nemhlYWQubmFtZSl7TXQ9ZnQucGVuZGluZztkb3tpZihmdC5wZW5kaW5nPT09ZnQucGVuZGluZ19idWZfc2l6ZSYmKGZ0Lmd6aGVhZC5oY3JjJiZmdC5wZW5kaW5nPk10JiYoWWUuYWRsZXI9SyhZZS5hZGxlcixmdC5wZW5kaW5nX2J1ZixmdC5wZW5kaW5nLU10LE10KSks''@;'; put 'put ''U3QoWWUpLE10PWZ0LnBlbmRpbmcsZnQucGVuZGluZz09PWZ0LnBlbmRpbmdfYnVmX3NpemUpKXtabj0xO2JyZWFrfVpuPWZ0Lmd6aW5kZXg8ZnQuZ3poZWFkLm5hbWUubGVuZ3RoPzI1NSZmdC5nemhlYWQubmFtZS5jaGFyQ29kZUF0KGZ0Lmd6aW5kZXgrKyk6MCx1dChmdCxabil9d2hpbGUo''@;'; put 'put ''MCE9PVpuKTtmdC5nemhlYWQuaGNyYyYmZnQucGVuZGluZz5NdCYmKFllLmFkbGVyPUsoWWUuYWRsZXIsZnQucGVuZGluZ19idWYsZnQucGVuZGluZy1NdCxNdCkpLDA9PT1abiYmKGZ0Lmd6aW5kZXg9MCxmdC5zdGF0dXM9OTEpfWVsc2UgZnQuc3RhdHVzPTkxO2lmKDkxPT09ZnQuc3RhdHVz''@;'; put 'put ''KWlmKGZ0Lmd6aGVhZC5jb21tZW50KXtNdD1mdC5wZW5kaW5nO2Rve2lmKGZ0LnBlbmRpbmc9PT1mdC5wZW5kaW5nX2J1Zl9zaXplJiYoZnQuZ3poZWFkLmhjcmMmJmZ0LnBlbmRpbmc+TXQmJihZZS5hZGxlcj1LKFllLmFkbGVyLGZ0LnBlbmRpbmdfYnVmLGZ0LnBlbmRpbmctTXQsTXQpKSxT''@;'; put 'put ''dChZZSksTXQ9ZnQucGVuZGluZyxmdC5wZW5kaW5nPT09ZnQucGVuZGluZ19idWZfc2l6ZSkpe1puPTE7YnJlYWt9Wm49ZnQuZ3ppbmRleDxmdC5nemhlYWQuY29tbWVudC5sZW5ndGg/MjU1JmZ0Lmd6aGVhZC5jb21tZW50LmNoYXJDb2RlQXQoZnQuZ3ppbmRleCsrKTowLHV0KGZ0LFpuKX13''@;'; put 'put ''aGlsZSgwIT09Wm4pO2Z0Lmd6aGVhZC5oY3JjJiZmdC5wZW5kaW5nPk10JiYoWWUuYWRsZXI9SyhZZS5hZGxlcixmdC5wZW5kaW5nX2J1ZixmdC5wZW5kaW5nLU10LE10KSksMD09PVpuJiYoZnQuc3RhdHVzPTEwMyl9ZWxzZSBmdC5zdGF0dXM9MTAzO2lmKDEwMz09PWZ0LnN0YXR1cyYmKGZ0''@;'; put 'put ''Lmd6aGVhZC5oY3JjPyhmdC5wZW5kaW5nKzI+ZnQucGVuZGluZ19idWZfc2l6ZSYmU3QoWWUpLGZ0LnBlbmRpbmcrMjw9ZnQucGVuZGluZ19idWZfc2l6ZSYmKHV0KGZ0LDI1NSZZZS5hZGxlciksdXQoZnQsWWUuYWRsZXI+PjgmMjU1KSxZZS5hZGxlcj0wLGZ0LnN0YXR1cz0xMTMpKTpmdC5z''@;'; put 'put ''dGF0dXM9MTEzKSwwIT09ZnQucGVuZGluZyl7aWYoU3QoWWUpLDA9PT1ZZS5hdmFpbF9vdXQpcmV0dXJuIGZ0Lmxhc3RfZmx1c2g9LTEsMH1lbHNlIGlmKDA9PT1ZZS5hdmFpbF9pbiYmc24oVHQpPD1zbihycikmJjQhPT1UdClyZXR1cm4gUWUoWWUsLTUpO2lmKDY2Nj09PWZ0LnN0YXR1cyYm''@;'; put 'put ''MCE9PVllLmF2YWlsX2luKXJldHVybiBRZShZZSwtNSk7aWYoMCE9PVllLmF2YWlsX2lufHwwIT09ZnQubG9va2FoZWFkfHwwIT09VHQmJjY2NiE9PWZ0LnN0YXR1cyl7dmFyIGRpPTI9PT1mdC5zdHJhdGVneT9mdW5jdGlvbiBhbihZZSxUdCl7Zm9yKHZhciBycjs7KXtpZigwPT09WWUubG9v''@;'; put 'put ''a2FoZWFkJiYoYXQoWWUpLDA9PT1ZZS5sb29rYWhlYWQpKXtpZigwPT09VHQpcmV0dXJuIDE7YnJlYWt9aWYoWWUubWF0Y2hfbGVuZ3RoPTAscnI9Ti5fdHJfdGFsbHkoWWUsMCxZZS53aW5kb3dbWWUuc3Ryc3RhcnRdKSxZZS5sb29rYWhlYWQtLSxZZS5zdHJzdGFydCsrLHJyJiYoZW4oWWUs''@;'; put 'put ''ITEpLDA9PT1ZZS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9cmV0dXJuIFllLmluc2VydD0wLDQ9PT1UdD8oZW4oWWUsITApLDA9PT1ZZS5zdHJtLmF2YWlsX291dD8zOjQpOlllLmxhc3RfbGl0JiYoZW4oWWUsITEpLDA9PT1ZZS5zdHJtLmF2YWlsX291dCk/MToyfShmdCxUdCk6Mz09PWZ0''@;'; put 'put ''LnN0cmF0ZWd5P2Z1bmN0aW9uIHJpKFllLFR0KXtmb3IodmFyIHJyLGZ0LE10LFpuLG5uPVllLndpbmRvdzs7KXtpZihZZS5sb29rYWhlYWQ8PTI1OCl7aWYoYXQoWWUpLFllLmxvb2thaGVhZDw9MjU4JiYwPT09VHQpcmV0dXJuIDE7aWYoMD09PVllLmxvb2thaGVhZClicmVha31pZihZZS5t''@;'; put 'put ''YXRjaF9sZW5ndGg9MCxZZS5sb29rYWhlYWQ+PTMmJlllLnN0cnN0YXJ0PjAmJihmdD1ubltNdD1ZZS5zdHJzdGFydC0xXSk9PT1ublsrK010XSYmZnQ9PT1ublsrK010XSYmZnQ9PT1ublsrK010XSl7Wm49WWUuc3Ryc3RhcnQrMjU4O2Rve313aGlsZShmdD09PW5uWysrTXRdJiZmdD09PW5u''@;'; put 'put ''WysrTXRdJiZmdD09PW5uWysrTXRdJiZmdD09PW5uWysrTXRdJiZmdD09PW5uWysrTXRdJiZmdD09PW5uWysrTXRdJiZmdD09PW5uWysrTXRdJiZmdD09PW5uWysrTXRdJiZNdDxabik7WWUubWF0Y2hfbGVuZ3RoPTI1OC0oWm4tTXQpLFllLm1hdGNoX2xlbmd0aD5ZZS5sb29rYWhlYWQmJihZ''@;'; put 'put ''ZS5tYXRjaF9sZW5ndGg9WWUubG9va2FoZWFkKX1pZihZZS5tYXRjaF9sZW5ndGg+PTM/KHJyPU4uX3RyX3RhbGx5KFllLDEsWWUubWF0Y2hfbGVuZ3RoLTMpLFllLmxvb2thaGVhZC09WWUubWF0Y2hfbGVuZ3RoLFllLnN0cnN0YXJ0Kz1ZZS5tYXRjaF9sZW5ndGgsWWUubWF0Y2hfbGVuZ3Ro''@;'; put 'put ''PTApOihycj1OLl90cl90YWxseShZZSwwLFllLndpbmRvd1tZZS5zdHJzdGFydF0pLFllLmxvb2thaGVhZC0tLFllLnN0cnN0YXJ0KyspLHJyJiYoZW4oWWUsITEpLDA9PT1ZZS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9cmV0dXJuIFllLmluc2VydD0wLDQ9PT1UdD8oZW4oWWUsITApLDA9''@;'; put 'put ''PT1ZZS5zdHJtLmF2YWlsX291dD8zOjQpOlllLmxhc3RfbGl0JiYoZW4oWWUsITEpLDA9PT1ZZS5zdHJtLmF2YWlsX291dCk/MToyfShmdCxUdCk6bmlbZnQubGV2ZWxdLmZ1bmMoZnQsVHQpO2lmKCgzPT09ZGl8fDQ9PT1kaSkmJihmdC5zdGF0dXM9NjY2KSwxPT09ZGl8fDM9PT1kaSlyZXR1''@;'; put 'put ''cm4gMD09PVllLmF2YWlsX291dCYmKGZ0Lmxhc3RfZmx1c2g9LTEpLDA7aWYoMj09PWRpJiYoMT09PVR0P04uX3RyX2FsaWduKGZ0KTo1IT09VHQmJihOLl90cl9zdG9yZWRfYmxvY2soZnQsMCwwLCExKSwzPT09VHQmJih2dChmdC5oZWFkKSwwPT09ZnQubG9va2FoZWFkJiYoZnQuc3Ryc3Rh''@;'; put 'put ''cnQ9MCxmdC5ibG9ja19zdGFydD0wLGZ0Lmluc2VydD0wKSkpLFN0KFllKSwwPT09WWUuYXZhaWxfb3V0KSlyZXR1cm4gZnQubGFzdF9mbHVzaD0tMSwwfXJldHVybiA0IT09VHQ/MDpmdC53cmFwPD0wPzE6KDI9PT1mdC53cmFwPyh1dChmdCwyNTUmWWUuYWRsZXIpLHV0KGZ0LFllLmFkbGVy''@;'; put 'put ''Pj44JjI1NSksdXQoZnQsWWUuYWRsZXI+PjE2JjI1NSksdXQoZnQsWWUuYWRsZXI+PjI0JjI1NSksdXQoZnQsMjU1JlllLnRvdGFsX2luKSx1dChmdCxZZS50b3RhbF9pbj4+OCYyNTUpLHV0KGZ0LFllLnRvdGFsX2luPj4xNiYyNTUpLHV0KGZ0LFllLnRvdGFsX2luPj4yNCYyNTUpKTooWGUo''@;'; put 'put ''ZnQsWWUuYWRsZXI+Pj4xNiksWGUoZnQsNjU1MzUmWWUuYWRsZXIpKSxTdChZZSksZnQud3JhcD4wJiYoZnQud3JhcD0tZnQud3JhcCksMCE9PWZ0LnBlbmRpbmc/MDoxKX0sUi5kZWZsYXRlRW5kPWZ1bmN0aW9uIFFyKFllKXt2YXIgVHQ7cmV0dXJuIFllJiZZZS5zdGF0ZT80MiE9PShUdD1Z''@;'; put 'put ''ZS5zdGF0ZS5zdGF0dXMpJiY2OSE9PVR0JiY3MyE9PVR0JiY5MSE9PVR0JiYxMDMhPT1UdCYmMTEzIT09VHQmJjY2NiE9PVR0P1FlKFllLC0yKTooWWUuc3RhdGU9bnVsbCwxMTM9PT1UdD9RZShZZSwtMyk6MCk6LTJ9LFIuZGVmbGF0ZUluZm89InBha28gZGVmbGF0ZSAoZnJvbSBOb2RlY2Eg''@;'; put 'put ''cHJvamVjdCkifSx7Ii4uL3V0aWxzL2NvbW1vbiI6MjcsIi4vYWRsZXIzMiI6MjksIi4vY3JjMzIiOjMxLCIuL21lc3NhZ2VzIjozNywiLi90cmVlcyI6Mzh9XSwzMzpbZnVuY3Rpb24oUCxGLFIpeyJ1c2Ugc3RyaWN0IjtGLmV4cG9ydHM9ZnVuY3Rpb24geigpe3RoaXMudGV4dD0wLHRoaXMu''@;'; put 'put ''dGltZT0wLHRoaXMueGZsYWdzPTAsdGhpcy5vcz0wLHRoaXMuZXh0cmE9bnVsbCx0aGlzLmV4dHJhX2xlbj0wLHRoaXMubmFtZT0iIix0aGlzLmNvbW1lbnQ9IiIsdGhpcy5oY3JjPTAsdGhpcy5kb25lPSExfX0se31dLDM0OltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO0YuZXhwb3J0''@;'; put 'put ''cz1mdW5jdGlvbihLLFope3ZhciBZLFcscSxlZSxKLHJlLGllLHVlLGdlLF9lLFRlLE1lLFplLEIsZyx5LHgsQyxULEgsaixFLG0sQSxhZTtBPUsuaW5wdXQscT0oVz1LLm5leHRfaW4pKyhLLmF2YWlsX2luLTUpLGFlPUsub3V0cHV0LEo9KGVlPUsubmV4dF9vdXQpLShaLUsuYXZhaWxfb3V0''@;'; put 'put ''KSxyZT1lZSsoSy5hdmFpbF9vdXQtMjU3KSxpZT0oWT1LLnN0YXRlKS5kbWF4LHVlPVkud3NpemUsZ2U9WS53aGF2ZSxfZT1ZLnduZXh0LFRlPVkud2luZG93LE1lPVkuaG9sZCxaZT1ZLmJpdHMsQj1ZLmxlbmNvZGUsZz1ZLmRpc3Rjb2RlLHk9KDE8PFkubGVuYml0cyktMSx4PSgxPDxZLmRp''@;'; put 'put ''c3RiaXRzKS0xO2U6ZG97WmU8MTUmJihNZSs9QVtXKytdPDxaZSxNZSs9QVtXKytdPDwoWmUrPTgpLFplKz04KSxDPUJbTWUmeV07dDpmb3IoOzspe2lmKE1lPj4+PVQ9Qz4+PjI0LFplLT1ULDA9PShUPUM+Pj4xNiYyNTUpKWFlW2VlKytdPTY1NTM1JkM7ZWxzZXtpZighKDE2JlQpKXtpZig2''@;'; put 'put ''NCZUKXtpZigzMiZUKXtZLm1vZGU9MTI7YnJlYWsgZX1LLm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixZLm1vZGU9MzA7YnJlYWsgZX1DPUJbKDY1NTM1JkMpKyhNZSYoMTw8VCktMSldO2NvbnRpbnVlIHR9Zm9yKEg9NjU1MzUmQywoVCY9MTUpJiYoWmU8VCYmKE1lKz1BW1cr''@;'; put 'put ''K108PFplLFplKz04KSxIKz1NZSYoMTw8VCktMSxNZT4+Pj1ULFplLT1UKSxaZTwxNSYmKE1lKz1BW1crK108PFplLE1lKz1BW1crK108PChaZSs9OCksWmUrPTgpLEM9Z1tNZSZ4XTs7KXtpZihNZT4+Pj1UPUM+Pj4yNCxaZS09VCwxNiYoVD1DPj4+MTYmMjU1KSl7aWYoaj02NTUzNSZDLFpl''@;'; put 'put ''PChUJj0xNSkmJihNZSs9QVtXKytdPDxaZSwoWmUrPTgpPFQmJihNZSs9QVtXKytdPDxaZSxaZSs9OCkpLChqKz1NZSYoMTw8VCktMSk+aWUpe0subXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsWS5tb2RlPTMwO2JyZWFrIGV9aWYoTWU+Pj49VCxaZS09VCxqPihUPWVlLUop''@;'; put 'put ''KXtpZigoVD1qLVQpPmdlJiZZLnNhbmUpe0subXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsWS5tb2RlPTMwO2JyZWFrIGV9aWYoRT0wLG09VGUsMD09PV9lKXtpZihFKz11ZS1ULFQ8SCl7SC09VDtkb3thZVtlZSsrXT1UZVtFKytdfXdoaWxlKC0tVCk7RT1lZS1qLG09YWV9''@;'; put 'put ''fWVsc2UgaWYoX2U8VCl7aWYoRSs9dWUrX2UtVCwoVC09X2UpPEgpe0gtPVQ7ZG97YWVbZWUrK109VGVbRSsrXX13aGlsZSgtLVQpO2lmKEU9MCxfZTxIKXtILT1UPV9lO2Rve2FlW2VlKytdPVRlW0UrK119d2hpbGUoLS1UKTtFPWVlLWosbT1hZX19fWVsc2UgaWYoRSs9X2UtVCxUPEgpe0gt''@;'; put 'put ''PVQ7ZG97YWVbZWUrK109VGVbRSsrXX13aGlsZSgtLVQpO0U9ZWUtaixtPWFlfWZvcig7SD4yOylhZVtlZSsrXT1tW0UrK10sYWVbZWUrK109bVtFKytdLGFlW2VlKytdPW1bRSsrXSxILT0zO0gmJihhZVtlZSsrXT1tW0UrK10sSD4xJiYoYWVbZWUrK109bVtFKytdKSl9ZWxzZXtFPWVlLWo7''@;'; put 'put ''ZG97YWVbZWUrK109YWVbRSsrXSxhZVtlZSsrXT1hZVtFKytdLGFlW2VlKytdPWFlW0UrK10sSC09M313aGlsZShIPjIpO0gmJihhZVtlZSsrXT1hZVtFKytdLEg+MSYmKGFlW2VlKytdPWFlW0UrK10pKX1icmVha31pZig2NCZUKXtLLm1zZz0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIixZLm1v''@;'; put 'put ''ZGU9MzA7YnJlYWsgZX1DPWdbKDY1NTM1JkMpKyhNZSYoMTw8VCktMSldfX1icmVha319d2hpbGUoVzxxJiZlZTxyZSk7TWUmPSgxPDwoWmUtPShIPVplPj4zKTw8MykpLTEsSy5uZXh0X2luPVctPUgsSy5uZXh0X291dD1lZSxLLmF2YWlsX2luPVc8cT9xLVcrNTo1LShXLXEpLEsuYXZhaWxf''@;'; put 'put ''b3V0PWVlPHJlP3JlLWVlKzI1NzoyNTctKGVlLXJlKSxZLmhvbGQ9TWUsWS5iaXRzPVplfX0se31dLDM1OltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4uL3V0aWxzL2NvbW1vbiIpLE49UCgiLi9hZGxlcjMyIiksTz1QKCIuL2NyYzMyIiksSz1QKCIuL2luZmZhc3Qi''@;'; put 'put ''KSxaPVAoIi4vaW5mdHJlZXMiKTtmdW5jdGlvbiBYZShBdCl7cmV0dXJuKEF0Pj4+MjQmMjU1KSsoQXQ+Pj44JjY1MjgwKSsoKDY1MjgwJkF0KTw8OCkrKCgyNTUmQXQpPDwyNCl9ZnVuY3Rpb24gdHQoKXt0aGlzLm1vZGU9MCx0aGlzLmxhc3Q9ITEsdGhpcy53cmFwPTAsdGhpcy5oYXZlZGlj''@;'; put 'put ''dD0hMSx0aGlzLmZsYWdzPTAsdGhpcy5kbWF4PTAsdGhpcy5jaGVjaz0wLHRoaXMudG90YWw9MCx0aGlzLmhlYWQ9bnVsbCx0aGlzLndiaXRzPTAsdGhpcy53c2l6ZT0wLHRoaXMud2hhdmU9MCx0aGlzLnduZXh0PTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLmhvbGQ9MCx0aGlzLmJpdHM9MCx0''@;'; put 'put ''aGlzLmxlbmd0aD0wLHRoaXMub2Zmc2V0PTAsdGhpcy5leHRyYT0wLHRoaXMubGVuY29kZT1udWxsLHRoaXMuZGlzdGNvZGU9bnVsbCx0aGlzLmxlbmJpdHM9MCx0aGlzLmRpc3RiaXRzPTAsdGhpcy5uY29kZT0wLHRoaXMubmxlbj0wLHRoaXMubmRpc3Q9MCx0aGlzLmhhdmU9MCx0aGlzLm5l''@;'; put 'put ''eHQ9bnVsbCx0aGlzLmxlbnM9bmV3IHouQnVmMTYoMzIwKSx0aGlzLndvcms9bmV3IHouQnVmMTYoMjg4KSx0aGlzLmxlbmR5bj1udWxsLHRoaXMuZGlzdGR5bj1udWxsLHRoaXMuc2FuZT0wLHRoaXMuYmFjaz0wLHRoaXMud2FzPTB9ZnVuY3Rpb24gSWUoQXQpe3ZhciBGbjtyZXR1cm4gQXQm''@;'; put 'put ''JkF0LnN0YXRlPyhBdC50b3RhbF9pbj1BdC50b3RhbF9vdXQ9KEZuPUF0LnN0YXRlKS50b3RhbD0wLEF0Lm1zZz0iIixGbi53cmFwJiYoQXQuYWRsZXI9MSZGbi53cmFwKSxGbi5tb2RlPTEsRm4ubGFzdD0wLEZuLmhhdmVkaWN0PTAsRm4uZG1heD0zMjc2OCxGbi5oZWFkPW51bGwsRm4uaG9s''@;'; put 'put ''ZD0wLEZuLmJpdHM9MCxGbi5sZW5jb2RlPUZuLmxlbmR5bj1uZXcgei5CdWYzMig4NTIpLEZuLmRpc3Rjb2RlPUZuLmRpc3RkeW49bmV3IHouQnVmMzIoNTkyKSxGbi5zYW5lPTEsRm4uYmFjaz0tMSwwKTotMn1mdW5jdGlvbiBhdChBdCl7dmFyIEZuO3JldHVybiBBdCYmQXQuc3RhdGU/KChG''@;'; put 'put ''bj1BdC5zdGF0ZSkud3NpemU9MCxGbi53aGF2ZT0wLEZuLnduZXh0PTAsSWUoQXQpKTotMn1mdW5jdGlvbiB1bihBdCxGbil7dmFyIHN0LFp0O3JldHVybiFBdHx8IUF0LnN0YXRlfHwoWnQ9QXQuc3RhdGUsRm48MD8oc3Q9MCxGbj0tRm4pOihzdD0xKyhGbj4+NCksRm48NDgmJihGbiY9MTUp''@;'; put 'put ''KSxGbiYmKEZuPDh8fEZuPjE1KSk/LTI6KG51bGwhPT1adC53aW5kb3cmJlp0LndiaXRzIT09Rm4mJihadC53aW5kb3c9bnVsbCksWnQud3JhcD1zdCxadC53Yml0cz1GbixhdChBdCkpfWZ1bmN0aW9uIEl0KEF0LEZuKXt2YXIgc3QsWnQ7cmV0dXJuIEF0PyhadD1uZXcgdHQsQXQuc3RhdGU9''@;'; put 'put ''WnQsWnQud2luZG93PW51bGwsMCE9PShzdD11bihBdCxGbikpJiYoQXQuc3RhdGU9bnVsbCksc3QpOi0yfXZhciBhbixsbixyaT0hMDtmdW5jdGlvbiBuaShBdCl7aWYocmkpe3ZhciBGbjtmb3IoYW49bmV3IHouQnVmMzIoNTEyKSxsbj1uZXcgei5CdWYzMigzMiksRm49MDtGbjwxNDQ7KUF0''@;'; put 'put ''LmxlbnNbRm4rK109ODtmb3IoO0ZuPDI1NjspQXQubGVuc1tGbisrXT05O2Zvcig7Rm48MjgwOylBdC5sZW5zW0ZuKytdPTc7Zm9yKDtGbjwyODg7KUF0LmxlbnNbRm4rK109ODtmb3IoWigxLEF0LmxlbnMsMCwyODgsYW4sMCxBdC53b3JrLHtiaXRzOjl9KSxGbj0wO0ZuPDMyOylBdC5sZW5z''@;'; put 'put ''W0ZuKytdPTU7WigyLEF0LmxlbnMsMCwzMixsbiwwLEF0Lndvcmsse2JpdHM6NX0pLHJpPSExfUF0LmxlbmNvZGU9YW4sQXQubGVuYml0cz05LEF0LmRpc3Rjb2RlPWxuLEF0LmRpc3RiaXRzPTV9Ui5pbmZsYXRlUmVzZXQ9YXQsUi5pbmZsYXRlUmVzZXQyPXVuLFIuaW5mbGF0ZVJlc2V0S2Vl''@;'; put 'put ''cD1JZSxSLmluZmxhdGVJbml0PWZ1bmN0aW9uIFJ0KEF0KXtyZXR1cm4gSXQoQXQsMTUpfSxSLmluZmxhdGVJbml0Mj1JdCxSLmluZmxhdGU9ZnVuY3Rpb24gaHQoQXQsRm4pe3ZhciBzdCxadCxRcixZZSxUdCxycixmdCxNdCxabixubixXdCxkaSxkbixtbixmbix0bixjYSxfaSx2cixYaSxR''@;'; put 'put ''aSxWaSx1YSxSaSxwaT0wLGVpPW5ldyB6LkJ1ZjgoNCksRGE9WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdO2lmKCFBdHx8IUF0LnN0YXRlfHwhQXQub3V0cHV0fHwhQXQuaW5wdXQmJjAhPT1BdC5hdmFpbF9pbilyZXR1cm4tMjsxMj09PShzdD1BdC5z''@;'; put 'put ''dGF0ZSkubW9kZSYmKHN0Lm1vZGU9MTMpLFR0PUF0Lm5leHRfb3V0LFFyPUF0Lm91dHB1dCxZZT1BdC5uZXh0X2luLFp0PUF0LmlucHV0LE10PXN0LmhvbGQsWm49c3QuYml0cyxubj1ycj1BdC5hdmFpbF9pbixXdD1mdD1BdC5hdmFpbF9vdXQsVmk9MDtlOmZvcig7Oylzd2l0Y2goc3QubW9k''@;'; put 'put ''ZSl7Y2FzZSAxOmlmKDA9PT1zdC53cmFwKXtzdC5tb2RlPTEzO2JyZWFrfWZvcig7Wm48MTY7KXtpZigwPT09cnIpYnJlYWsgZTtyci0tLE10Kz1adFtZZSsrXTw8Wm4sWm4rPTh9aWYoMiZzdC53cmFwJiYzNTYxNT09PU10KXtzdC5jaGVjaz0wLGVpWzBdPTI1NSZNdCxlaVsxXT1NdD4+Pjgm''@;'; put 'put ''MjU1LHN0LmNoZWNrPU8oc3QuY2hlY2ssZWksMiwwKSxNdD0wLFpuPTAsc3QubW9kZT0yO2JyZWFrfWlmKHN0LmZsYWdzPTAsc3QuaGVhZCYmKHN0LmhlYWQuZG9uZT0hMSksISgxJnN0LndyYXApfHwoKCgyNTUmTXQpPDw4KSsoTXQ+PjgpKSUzMSl7QXQubXNnPSJpbmNvcnJlY3QgaGVhZGVy''@;'; put 'put ''IGNoZWNrIixzdC5tb2RlPTMwO2JyZWFrfWlmKDghPSgxNSZNdCkpe0F0Lm1zZz0idW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiLHN0Lm1vZGU9MzA7YnJlYWt9aWYoWm4tPTQsUWk9OCsoMTUmKE10Pj4+PTQpKSwwPT09c3Qud2JpdHMpc3Qud2JpdHM9UWk7ZWxzZSBpZihRaT5zdC53Yml0''@;'; put 'put ''cyl7QXQubXNnPSJpbnZhbGlkIHdpbmRvdyBzaXplIixzdC5tb2RlPTMwO2JyZWFrfXN0LmRtYXg9MTw8UWksQXQuYWRsZXI9c3QuY2hlY2s9MSxzdC5tb2RlPTUxMiZNdD8xMDoxMixNdD0wLFpuPTA7YnJlYWs7Y2FzZSAyOmZvcig7Wm48MTY7KXtpZigwPT09cnIpYnJlYWsgZTtyci0tLE10''@;'; put 'put ''Kz1adFtZZSsrXTw8Wm4sWm4rPTh9aWYoc3QuZmxhZ3M9TXQsOCE9KDI1NSZzdC5mbGFncykpe0F0Lm1zZz0idW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiLHN0Lm1vZGU9MzA7YnJlYWt9aWYoNTczNDQmc3QuZmxhZ3Mpe0F0Lm1zZz0idW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0IixzdC5t''@;'; put 'put ''b2RlPTMwO2JyZWFrfXN0LmhlYWQmJihzdC5oZWFkLnRleHQ9TXQ+PjgmMSksNTEyJnN0LmZsYWdzJiYoZWlbMF09MjU1Jk10LGVpWzFdPU10Pj4+OCYyNTUsc3QuY2hlY2s9TyhzdC5jaGVjayxlaSwyLDApKSxNdD0wLFpuPTAsc3QubW9kZT0zO2Nhc2UgMzpmb3IoO1puPDMyOyl7aWYoMD09''@;'; put 'put ''PXJyKWJyZWFrIGU7cnItLSxNdCs9WnRbWWUrK108PFpuLFpuKz04fXN0LmhlYWQmJihzdC5oZWFkLnRpbWU9TXQpLDUxMiZzdC5mbGFncyYmKGVpWzBdPTI1NSZNdCxlaVsxXT1NdD4+PjgmMjU1LGVpWzJdPU10Pj4+MTYmMjU1LGVpWzNdPU10Pj4+MjQmMjU1LHN0LmNoZWNrPU8oc3QuY2hl''@;'; put 'put ''Y2ssZWksNCwwKSksTXQ9MCxabj0wLHN0Lm1vZGU9NDtjYXNlIDQ6Zm9yKDtabjwxNjspe2lmKDA9PT1ycilicmVhayBlO3JyLS0sTXQrPVp0W1llKytdPDxabixabis9OH1zdC5oZWFkJiYoc3QuaGVhZC54ZmxhZ3M9MjU1Jk10LHN0LmhlYWQub3M9TXQ+PjgpLDUxMiZzdC5mbGFncyYmKGVp''@;'; put 'put ''WzBdPTI1NSZNdCxlaVsxXT1NdD4+PjgmMjU1LHN0LmNoZWNrPU8oc3QuY2hlY2ssZWksMiwwKSksTXQ9MCxabj0wLHN0Lm1vZGU9NTtjYXNlIDU6aWYoMTAyNCZzdC5mbGFncyl7Zm9yKDtabjwxNjspe2lmKDA9PT1ycilicmVhayBlO3JyLS0sTXQrPVp0W1llKytdPDxabixabis9OH1zdC5s''@;'; put 'put ''ZW5ndGg9TXQsc3QuaGVhZCYmKHN0LmhlYWQuZXh0cmFfbGVuPU10KSw1MTImc3QuZmxhZ3MmJihlaVswXT0yNTUmTXQsZWlbMV09TXQ+Pj44JjI1NSxzdC5jaGVjaz1PKHN0LmNoZWNrLGVpLDIsMCkpLE10PTAsWm49MH1lbHNlIHN0LmhlYWQmJihzdC5oZWFkLmV4dHJhPW51bGwpO3N0Lm1v''@;'; put 'put ''ZGU9NjtjYXNlIDY6aWYoMTAyNCZzdC5mbGFncyYmKChkaT1zdC5sZW5ndGgpPnJyJiYoZGk9cnIpLGRpJiYoc3QuaGVhZCYmKFFpPXN0LmhlYWQuZXh0cmFfbGVuLXN0Lmxlbmd0aCxzdC5oZWFkLmV4dHJhfHwoc3QuaGVhZC5leHRyYT1uZXcgQXJyYXkoc3QuaGVhZC5leHRyYV9sZW4pKSx6''@;'; put 'put ''LmFycmF5U2V0KHN0LmhlYWQuZXh0cmEsWnQsWWUsZGksUWkpKSw1MTImc3QuZmxhZ3MmJihzdC5jaGVjaz1PKHN0LmNoZWNrLFp0LGRpLFllKSkscnItPWRpLFllKz1kaSxzdC5sZW5ndGgtPWRpKSxzdC5sZW5ndGgpKWJyZWFrIGU7c3QubGVuZ3RoPTAsc3QubW9kZT03O2Nhc2UgNzppZigy''@;'; put 'put ''MDQ4JnN0LmZsYWdzKXtpZigwPT09cnIpYnJlYWsgZTtkaT0wO2Rve1FpPVp0W1llK2RpKytdLHN0LmhlYWQmJlFpJiZzdC5sZW5ndGg8NjU1MzYmJihzdC5oZWFkLm5hbWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoUWkpKX13aGlsZShRaSYmZGk8cnIpO2lmKDUxMiZzdC5mbGFncyYmKHN0LmNo''@;'; put 'put ''ZWNrPU8oc3QuY2hlY2ssWnQsZGksWWUpKSxyci09ZGksWWUrPWRpLFFpKWJyZWFrIGV9ZWxzZSBzdC5oZWFkJiYoc3QuaGVhZC5uYW1lPW51bGwpO3N0Lmxlbmd0aD0wLHN0Lm1vZGU9ODtjYXNlIDg6aWYoNDA5NiZzdC5mbGFncyl7aWYoMD09PXJyKWJyZWFrIGU7ZGk9MDtkb3tRaT1adFtZ''@;'; put 'put ''ZStkaSsrXSxzdC5oZWFkJiZRaSYmc3QubGVuZ3RoPDY1NTM2JiYoc3QuaGVhZC5jb21tZW50Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKFFpKSl9d2hpbGUoUWkmJmRpPHJyKTtpZig1MTImc3QuZmxhZ3MmJihzdC5jaGVjaz1PKHN0LmNoZWNrLFp0LGRpLFllKSkscnItPWRpLFllKz1kaSxRaSli''@;'; put 'put ''cmVhayBlfWVsc2Ugc3QuaGVhZCYmKHN0LmhlYWQuY29tbWVudD1udWxsKTtzdC5tb2RlPTk7Y2FzZSA5OmlmKDUxMiZzdC5mbGFncyl7Zm9yKDtabjwxNjspe2lmKDA9PT1ycilicmVhayBlO3JyLS0sTXQrPVp0W1llKytdPDxabixabis9OH1pZihNdCE9PSg2NTUzNSZzdC5jaGVjaykpe0F0''@;'; put 'put ''Lm1zZz0iaGVhZGVyIGNyYyBtaXNtYXRjaCIsc3QubW9kZT0zMDticmVha31NdD0wLFpuPTB9c3QuaGVhZCYmKHN0LmhlYWQuaGNyYz1zdC5mbGFncz4+OSYxLHN0LmhlYWQuZG9uZT0hMCksQXQuYWRsZXI9c3QuY2hlY2s9MCxzdC5tb2RlPTEyO2JyZWFrO2Nhc2UgMTA6Zm9yKDtabjwzMjsp''@;'; put 'put ''e2lmKDA9PT1ycilicmVhayBlO3JyLS0sTXQrPVp0W1llKytdPDxabixabis9OH1BdC5hZGxlcj1zdC5jaGVjaz1YZShNdCksTXQ9MCxabj0wLHN0Lm1vZGU9MTE7Y2FzZSAxMTppZigwPT09c3QuaGF2ZWRpY3QpcmV0dXJuIEF0Lm5leHRfb3V0PVR0LEF0LmF2YWlsX291dD1mdCxBdC5uZXh0''@;'; put 'put ''X2luPVllLEF0LmF2YWlsX2luPXJyLHN0LmhvbGQ9TXQsc3QuYml0cz1abiwyO0F0LmFkbGVyPXN0LmNoZWNrPTEsc3QubW9kZT0xMjtjYXNlIDEyOmlmKDU9PT1Gbnx8Nj09PUZuKWJyZWFrIGU7Y2FzZSAxMzppZihzdC5sYXN0KXtNdD4+Pj03JlpuLFpuLT03JlpuLHN0Lm1vZGU9Mjc7YnJl''@;'; put 'put ''YWt9Zm9yKDtabjwzOyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSxNdCs9WnRbWWUrK108PFpuLFpuKz04fXN3aXRjaChzdC5sYXN0PTEmTXQsWm4tPTEsMyYoTXQ+Pj49MSkpe2Nhc2UgMDpzdC5tb2RlPTE0O2JyZWFrO2Nhc2UgMTppZihuaShzdCksc3QubW9kZT0yMCw2PT09Rm4pe010Pj4+''@;'; put 'put ''PTIsWm4tPTI7YnJlYWsgZX1icmVhaztjYXNlIDI6c3QubW9kZT0xNzticmVhaztjYXNlIDM6QXQubXNnPSJpbnZhbGlkIGJsb2NrIHR5cGUiLHN0Lm1vZGU9MzB9TXQ+Pj49Mixabi09MjticmVhaztjYXNlIDE0OmZvcihNdD4+Pj03JlpuLFpuLT03JlpuO1puPDMyOyl7aWYoMD09PXJyKWJy''@;'; put 'put ''ZWFrIGU7cnItLSxNdCs9WnRbWWUrK108PFpuLFpuKz04fWlmKCg2NTUzNSZNdCkhPShNdD4+PjE2XjY1NTM1KSl7QXQubXNnPSJpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzIixzdC5tb2RlPTMwO2JyZWFrfWlmKHN0Lmxlbmd0aD02NTUzNSZNdCxNdD0wLFpuPTAsc3QubW9kZT0xNSw2''@;'; put 'put ''PT09Rm4pYnJlYWsgZTtjYXNlIDE1OnN0Lm1vZGU9MTY7Y2FzZSAxNjppZihkaT1zdC5sZW5ndGgpe2lmKGRpPnJyJiYoZGk9cnIpLGRpPmZ0JiYoZGk9ZnQpLDA9PT1kaSlicmVhayBlO3ouYXJyYXlTZXQoUXIsWnQsWWUsZGksVHQpLHJyLT1kaSxZZSs9ZGksZnQtPWRpLFR0Kz1kaSxzdC5s''@;'; put 'put ''ZW5ndGgtPWRpO2JyZWFrfXN0Lm1vZGU9MTI7YnJlYWs7Y2FzZSAxNzpmb3IoO1puPDE0Oyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSxNdCs9WnRbWWUrK108PFpuLFpuKz04fWlmKHN0Lm5sZW49MjU3KygzMSZNdCksWm4tPTUsc3QubmRpc3Q9MSsoMzEmKE10Pj4+PTUpKSxabi09NSxzdC5u''@;'; put 'put ''Y29kZT00KygxNSYoTXQ+Pj49NSkpLE10Pj4+PTQsWm4tPTQsc3Qubmxlbj4yODZ8fHN0Lm5kaXN0PjMwKXtBdC5tc2c9InRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzIixzdC5tb2RlPTMwO2JyZWFrfXN0LmhhdmU9MCxzdC5tb2RlPTE4O2Nhc2UgMTg6Zm9yKDtzdC5oYXZl''@;'; put 'put ''PHN0Lm5jb2RlOyl7Zm9yKDtabjwzOyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSxNdCs9WnRbWWUrK108PFpuLFpuKz04fXN0LmxlbnNbRGFbc3QuaGF2ZSsrXV09NyZNdCxNdD4+Pj0zLFpuLT0zfWZvcig7c3QuaGF2ZTwxOTspc3QubGVuc1tEYVtzdC5oYXZlKytdXT0wO2lmKHN0LmxlbmNv''@;'; put 'put ''ZGU9c3QubGVuZHluLHN0LmxlbmJpdHM9NyxWaT1aKDAsc3QubGVucywwLDE5LHN0LmxlbmNvZGUsMCxzdC53b3JrLHVhPXtiaXRzOnN0LmxlbmJpdHN9KSxzdC5sZW5iaXRzPXVhLmJpdHMsVmkpe0F0Lm1zZz0iaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0IixzdC5tb2RlPTMwO2JyZWFrfXN0''@;'; put 'put ''LmhhdmU9MCxzdC5tb2RlPTE5O2Nhc2UgMTk6Zm9yKDtzdC5oYXZlPHN0Lm5sZW4rc3QubmRpc3Q7KXtmb3IoO3RuPShwaT1zdC5sZW5jb2RlW010JigxPDxzdC5sZW5iaXRzKS0xXSk+Pj4xNiYyNTUsY2E9NjU1MzUmcGksISgoZm49cGk+Pj4yNCk8PVpuKTspe2lmKDA9PT1ycilicmVhayBl''@;'; put 'put ''O3JyLS0sTXQrPVp0W1llKytdPDxabixabis9OH1pZihjYTwxNilNdD4+Pj1mbixabi09Zm4sc3QubGVuc1tzdC5oYXZlKytdPWNhO2Vsc2V7aWYoMTY9PT1jYSl7Zm9yKFJpPWZuKzI7Wm48Umk7KXtpZigwPT09cnIpYnJlYWsgZTtyci0tLE10Kz1adFtZZSsrXTw8Wm4sWm4rPTh9aWYoTXQ+''@;'; put 'put ''Pj49Zm4sWm4tPWZuLDA9PT1zdC5oYXZlKXtBdC5tc2c9ImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLHN0Lm1vZGU9MzA7YnJlYWt9UWk9c3QubGVuc1tzdC5oYXZlLTFdLGRpPTMrKDMmTXQpLE10Pj4+PTIsWm4tPTJ9ZWxzZSBpZigxNz09PWNhKXtmb3IoUmk9Zm4rMztabjxSaTspe2lm''@;'; put 'put ''KDA9PT1ycilicmVhayBlO3JyLS0sTXQrPVp0W1llKytdPDxabixabis9OH1abi09Zm4sUWk9MCxkaT0zKyg3JihNdD4+Pj1mbikpLE10Pj4+PTMsWm4tPTN9ZWxzZXtmb3IoUmk9Zm4rNztabjxSaTspe2lmKDA9PT1ycilicmVhayBlO3JyLS0sTXQrPVp0W1llKytdPDxabixabis9OH1abi09''@;'; put 'put ''Zm4sUWk9MCxkaT0xMSsoMTI3JihNdD4+Pj1mbikpLE10Pj4+PTcsWm4tPTd9aWYoc3QuaGF2ZStkaT5zdC5ubGVuK3N0Lm5kaXN0KXtBdC5tc2c9ImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLHN0Lm1vZGU9MzA7YnJlYWt9Zm9yKDtkaS0tOylzdC5sZW5zW3N0LmhhdmUrK109UWl9fWlm''@;'; put 'put ''KDMwPT09c3QubW9kZSlicmVhaztpZigwPT09c3QubGVuc1syNTZdKXtBdC5tc2c9ImludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9jayIsc3QubW9kZT0zMDticmVha31pZihzdC5sZW5iaXRzPTksVmk9WigxLHN0LmxlbnMsMCxzdC5ubGVuLHN0LmxlbmNvZGUsMCxzdC53b3Jr''@;'; put 'put ''LHVhPXtiaXRzOnN0LmxlbmJpdHN9KSxzdC5sZW5iaXRzPXVhLmJpdHMsVmkpe0F0Lm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aHMgc2V0IixzdC5tb2RlPTMwO2JyZWFrfWlmKHN0LmRpc3RiaXRzPTYsc3QuZGlzdGNvZGU9c3QuZGlzdGR5bixWaT1aKDIsc3QubGVucyxzdC5ubGVuLHN0''@;'; put 'put ''Lm5kaXN0LHN0LmRpc3Rjb2RlLDAsc3Qud29yayx1YT17Yml0czpzdC5kaXN0Yml0c30pLHN0LmRpc3RiaXRzPXVhLmJpdHMsVmkpe0F0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZXMgc2V0IixzdC5tb2RlPTMwO2JyZWFrfWlmKHN0Lm1vZGU9MjAsNj09PUZuKWJyZWFrIGU7Y2FzZSAyMDpzdC5t''@;'; put 'put ''b2RlPTIxO2Nhc2UgMjE6aWYocnI+PTYmJmZ0Pj0yNTgpe0F0Lm5leHRfb3V0PVR0LEF0LmF2YWlsX291dD1mdCxBdC5uZXh0X2luPVllLEF0LmF2YWlsX2luPXJyLHN0LmhvbGQ9TXQsc3QuYml0cz1abixLKEF0LFd0KSxUdD1BdC5uZXh0X291dCxRcj1BdC5vdXRwdXQsZnQ9QXQuYXZhaWxf''@;'; put 'put ''b3V0LFllPUF0Lm5leHRfaW4sWnQ9QXQuaW5wdXQscnI9QXQuYXZhaWxfaW4sTXQ9c3QuaG9sZCxabj1zdC5iaXRzLDEyPT09c3QubW9kZSYmKHN0LmJhY2s9LTEpO2JyZWFrfWZvcihzdC5iYWNrPTA7dG49KHBpPXN0LmxlbmNvZGVbTXQmKDE8PHN0LmxlbmJpdHMpLTFdKT4+PjE2JjI1NSxj''@;'; put 'put ''YT02NTUzNSZwaSwhKChmbj1waT4+PjI0KTw9Wm4pOyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSxNdCs9WnRbWWUrK108PFpuLFpuKz04fWlmKHRuJiYhKDI0MCZ0bikpe2ZvcihfaT1mbix2cj10bixYaT1jYTt0bj0ocGk9c3QubGVuY29kZVtYaSsoKE10JigxPDxfaSt2ciktMSk+Pl9pKV0p''@;'; put 'put ''Pj4+MTYmMjU1LGNhPTY1NTM1JnBpLCEoX2krKGZuPXBpPj4+MjQpPD1abik7KXtpZigwPT09cnIpYnJlYWsgZTtyci0tLE10Kz1adFtZZSsrXTw8Wm4sWm4rPTh9TXQ+Pj49X2ksWm4tPV9pLHN0LmJhY2srPV9pfWlmKE10Pj4+PWZuLFpuLT1mbixzdC5iYWNrKz1mbixzdC5sZW5ndGg9Y2Es''@;'; put 'put ''MD09PXRuKXtzdC5tb2RlPTI2O2JyZWFrfWlmKDMyJnRuKXtzdC5iYWNrPS0xLHN0Lm1vZGU9MTI7YnJlYWt9aWYoNjQmdG4pe0F0Lm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixzdC5tb2RlPTMwO2JyZWFrfXN0LmV4dHJhPTE1JnRuLHN0Lm1vZGU9MjI7Y2FzZSAyMjppZihz''@;'; put 'put ''dC5leHRyYSl7Zm9yKFJpPXN0LmV4dHJhO1puPFJpOyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSxNdCs9WnRbWWUrK108PFpuLFpuKz04fXN0Lmxlbmd0aCs9TXQmKDE8PHN0LmV4dHJhKS0xLE10Pj4+PXN0LmV4dHJhLFpuLT1zdC5leHRyYSxzdC5iYWNrKz1zdC5leHRyYX1zdC53YXM9c3Qu''@;'; put 'put ''bGVuZ3RoLHN0Lm1vZGU9MjM7Y2FzZSAyMzpmb3IoO3RuPShwaT1zdC5kaXN0Y29kZVtNdCYoMTw8c3QuZGlzdGJpdHMpLTFdKT4+PjE2JjI1NSxjYT02NTUzNSZwaSwhKChmbj1waT4+PjI0KTw9Wm4pOyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSxNdCs9WnRbWWUrK108PFpuLFpuKz04fWlm''@;'; put 'put ''KCEoMjQwJnRuKSl7Zm9yKF9pPWZuLHZyPXRuLFhpPWNhO3RuPShwaT1zdC5kaXN0Y29kZVtYaSsoKE10JigxPDxfaSt2ciktMSk+Pl9pKV0pPj4+MTYmMjU1LGNhPTY1NTM1JnBpLCEoX2krKGZuPXBpPj4+MjQpPD1abik7KXtpZigwPT09cnIpYnJlYWsgZTtyci0tLE10Kz1adFtZZSsrXTw8''@;'; put 'put ''Wm4sWm4rPTh9TXQ+Pj49X2ksWm4tPV9pLHN0LmJhY2srPV9pfWlmKE10Pj4+PWZuLFpuLT1mbixzdC5iYWNrKz1mbiw2NCZ0bil7QXQubXNnPSJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiLHN0Lm1vZGU9MzA7YnJlYWt9c3Qub2Zmc2V0PWNhLHN0LmV4dHJhPTE1JnRuLHN0Lm1vZGU9MjQ7Y2Fz''@;'; put 'put ''ZSAyNDppZihzdC5leHRyYSl7Zm9yKFJpPXN0LmV4dHJhO1puPFJpOyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSxNdCs9WnRbWWUrK108PFpuLFpuKz04fXN0Lm9mZnNldCs9TXQmKDE8PHN0LmV4dHJhKS0xLE10Pj4+PXN0LmV4dHJhLFpuLT1zdC5leHRyYSxzdC5iYWNrKz1zdC5leHRyYX1p''@;'; put 'put ''ZihzdC5vZmZzZXQ+c3QuZG1heCl7QXQubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsc3QubW9kZT0zMDticmVha31zdC5tb2RlPTI1O2Nhc2UgMjU6aWYoMD09PWZ0KWJyZWFrIGU7aWYoc3Qub2Zmc2V0PihkaT1XdC1mdCkpe2lmKChkaT1zdC5vZmZzZXQtZGkpPnN0Lndo''@;'; put 'put ''YXZlJiZzdC5zYW5lKXtBdC5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixzdC5tb2RlPTMwO2JyZWFrfWRuPWRpPnN0LnduZXh0P3N0LndzaXplLShkaS09c3Qud25leHQpOnN0LnduZXh0LWRpLGRpPnN0Lmxlbmd0aCYmKGRpPXN0Lmxlbmd0aCksbW49c3Qud2luZG93fWVs''@;'; put 'put ''c2UgbW49UXIsZG49VHQtc3Qub2Zmc2V0LGRpPXN0Lmxlbmd0aDtkaT5mdCYmKGRpPWZ0KSxmdC09ZGksc3QubGVuZ3RoLT1kaTtkb3tRcltUdCsrXT1tbltkbisrXX13aGlsZSgtLWRpKTswPT09c3QubGVuZ3RoJiYoc3QubW9kZT0yMSk7YnJlYWs7Y2FzZSAyNjppZigwPT09ZnQpYnJlYWsg''@;'; put 'put ''ZTtRcltUdCsrXT1zdC5sZW5ndGgsZnQtLSxzdC5tb2RlPTIxO2JyZWFrO2Nhc2UgMjc6aWYoc3Qud3JhcCl7Zm9yKDtabjwzMjspe2lmKDA9PT1ycilicmVhayBlO3JyLS0sTXR8PVp0W1llKytdPDxabixabis9OH1pZihBdC50b3RhbF9vdXQrPVd0LT1mdCxzdC50b3RhbCs9V3QsV3QmJihB''@;'; put 'put ''dC5hZGxlcj1zdC5jaGVjaz1zdC5mbGFncz9PKHN0LmNoZWNrLFFyLFd0LFR0LVd0KTpOKHN0LmNoZWNrLFFyLFd0LFR0LVd0KSksV3Q9ZnQsKHN0LmZsYWdzP010OlhlKE10KSkhPT1zdC5jaGVjayl7QXQubXNnPSJpbmNvcnJlY3QgZGF0YSBjaGVjayIsc3QubW9kZT0zMDticmVha31NdD0w''@;'; put 'put ''LFpuPTB9c3QubW9kZT0yODtjYXNlIDI4OmlmKHN0LndyYXAmJnN0LmZsYWdzKXtmb3IoO1puPDMyOyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSxNdCs9WnRbWWUrK108PFpuLFpuKz04fWlmKE10IT09KDQyOTQ5NjcyOTUmc3QudG90YWwpKXtBdC5tc2c9ImluY29ycmVjdCBsZW5ndGggY2hl''@;'; put 'put ''Y2siLHN0Lm1vZGU9MzA7YnJlYWt9TXQ9MCxabj0wfXN0Lm1vZGU9Mjk7Y2FzZSAyOTpWaT0xO2JyZWFrIGU7Y2FzZSAzMDpWaT0tMzticmVhayBlO2Nhc2UgMzE6cmV0dXJuLTQ7ZGVmYXVsdDpyZXR1cm4tMn1yZXR1cm4gQXQubmV4dF9vdXQ9VHQsQXQuYXZhaWxfb3V0PWZ0LEF0Lm5leHRf''@;'; put 'put ''aW49WWUsQXQuYXZhaWxfaW49cnIsc3QuaG9sZD1NdCxzdC5iaXRzPVpuLChzdC53c2l6ZXx8V3QhPT1BdC5hdmFpbF9vdXQmJnN0Lm1vZGU8MzAmJihzdC5tb2RlPDI3fHw0IT09Rm4pKSYmZnVuY3Rpb24gaG4oQXQsRm4sc3QsWnQpe3ZhciBRcixZZT1BdC5zdGF0ZTtyZXR1cm4gbnVsbD09''@;'; put 'put ''PVllLndpbmRvdyYmKFllLndzaXplPTE8PFllLndiaXRzLFllLnduZXh0PTAsWWUud2hhdmU9MCxZZS53aW5kb3c9bmV3IHouQnVmOChZZS53c2l6ZSkpLFp0Pj1ZZS53c2l6ZT8oei5hcnJheVNldChZZS53aW5kb3csRm4sc3QtWWUud3NpemUsWWUud3NpemUsMCksWWUud25leHQ9MCxZZS53''@;'; put 'put ''aGF2ZT1ZZS53c2l6ZSk6KChRcj1ZZS53c2l6ZS1ZZS53bmV4dCk+WnQmJihRcj1adCksei5hcnJheVNldChZZS53aW5kb3csRm4sc3QtWnQsUXIsWWUud25leHQpLChadC09UXIpPyh6LmFycmF5U2V0KFllLndpbmRvdyxGbixzdC1adCxadCwwKSxZZS53bmV4dD1adCxZZS53aGF2ZT1ZZS53''@;'; put 'put ''c2l6ZSk6KFllLnduZXh0Kz1RcixZZS53bmV4dD09PVllLndzaXplJiYoWWUud25leHQ9MCksWWUud2hhdmU8WWUud3NpemUmJihZZS53aGF2ZSs9UXIpKSksMH0oQXQsQXQub3V0cHV0LEF0Lm5leHRfb3V0LFd0LUF0LmF2YWlsX291dCk/KHN0Lm1vZGU9MzEsLTQpOihXdC09QXQuYXZhaWxf''@;'; put 'put ''b3V0LEF0LnRvdGFsX2luKz1ubi09QXQuYXZhaWxfaW4sQXQudG90YWxfb3V0Kz1XdCxzdC50b3RhbCs9V3Qsc3Qud3JhcCYmV3QmJihBdC5hZGxlcj1zdC5jaGVjaz1zdC5mbGFncz9PKHN0LmNoZWNrLFFyLFd0LEF0Lm5leHRfb3V0LVd0KTpOKHN0LmNoZWNrLFFyLFd0LEF0Lm5leHRfb3V0''@;'; put 'put ''LVd0KSksQXQuZGF0YV90eXBlPXN0LmJpdHMrKHN0Lmxhc3Q/NjQ6MCkrKDEyPT09c3QubW9kZT8xMjg6MCkrKDIwPT09c3QubW9kZXx8MTU9PT1zdC5tb2RlPzI1NjowKSwoMD09PW5uJiYwPT09V3R8fDQ9PT1GbikmJjA9PT1WaSYmKFZpPS01KSxWaSl9LFIuaW5mbGF0ZUVuZD1mdW5jdGlv''@;'; put 'put ''biBScihBdCl7aWYoIUF0fHwhQXQuc3RhdGUpcmV0dXJuLTI7dmFyIEZuPUF0LnN0YXRlO3JldHVybiBGbi53aW5kb3cmJihGbi53aW5kb3c9bnVsbCksQXQuc3RhdGU9bnVsbCwwfSxSLmluZmxhdGVHZXRIZWFkZXI9ZnVuY3Rpb24gQnQoQXQsRm4pe3ZhciBzdDtyZXR1cm4gQXQmJkF0LnN0''@;'; put 'put ''YXRlJiYyJihzdD1BdC5zdGF0ZSkud3JhcD8oc3QuaGVhZD1GbixGbi5kb25lPSExLDApOi0yfSxSLmluZmxhdGVJbmZvPSJwYWtvIGluZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpIn0seyIuLi91dGlscy9jb21tb24iOjI3LCIuL2FkbGVyMzIiOjI5LCIuL2NyYzMyIjozMSwiLi9pbmZm''@;'; put 'put ''YXN0IjozNCwiLi9pbmZ0cmVlcyI6MzZ9XSwzNjpbZnVuY3Rpb24oUCxGLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuLi91dGlscy9jb21tb24iKSxxPVszLDQsNSw2LDcsOCw5LDEwLDExLDEzLDE1LDE3LDE5LDIzLDI3LDMxLDM1LDQzLDUxLDU5LDY3LDgzLDk5LDExNSwxMzEsMTYzLDE5''@;'; put 'put ''NSwyMjcsMjU4LDAsMF0sZWU9WzE2LDE2LDE2LDE2LDE2LDE2LDE2LDE2LDE3LDE3LDE3LDE3LDE4LDE4LDE4LDE4LDE5LDE5LDE5LDE5LDIwLDIwLDIwLDIwLDIxLDIxLDIxLDIxLDE2LDcyLDc4XSxKPVsxLDIsMyw0LDUsNyw5LDEzLDE3LDI1LDMzLDQ5LDY1LDk3LDEyOSwxOTMsMjU3LDM4''@;'; put 'put ''NSw1MTMsNzY5LDEwMjUsMTUzNywyMDQ5LDMwNzMsNDA5Nyw2MTQ1LDgxOTMsMTIyODksMTYzODUsMjQ1NzcsMCwwXSxyZT1bMTYsMTYsMTYsMTYsMTcsMTcsMTgsMTgsMTksMTksMjAsMjAsMjEsMjEsMjIsMjIsMjMsMjMsMjQsMjQsMjUsMjUsMjYsMjYsMjcsMjcsMjgsMjgsMjksMjksNjQs''@;'; put 'put ''NjRdO0YuZXhwb3J0cz1mdW5jdGlvbih1ZSxnZSxfZSxUZSxNZSxaZSxCLGcpe3ZhciBzZSxDZSxVZSxKZSxpdCxLZSxSZSxWZSxBZSx5PWcuYml0cyx4PTAsQz0wLFQ9MCxIPTAsaj0wLEU9MCxtPTAsQT0wLGFlPTAsbmU9MCx4ZT1udWxsLHllPTAsamU9bmV3IHouQnVmMTYoMTYpLGtlPW5l''@;'; put 'put ''dyB6LkJ1ZjE2KDE2KSxIZT1udWxsLExlPTA7Zm9yKHg9MDt4PD0xNTt4KyspamVbeF09MDtmb3IoQz0wO0M8VGU7QysrKWplW2dlW19lK0NdXSsrO2ZvcihqPXksSD0xNTtIPj0xJiYwPT09amVbSF07SC0tKTtpZihqPkgmJihqPUgpLDA9PT1IKXJldHVybiBNZVtaZSsrXT0yMDk3MTUyMCxN''@;'; put 'put ''ZVtaZSsrXT0yMDk3MTUyMCxnLmJpdHM9MSwwO2ZvcihUPTE7VDxIJiYwPT09amVbVF07VCsrKTtmb3IoajxUJiYoaj1UKSxBPTEseD0xO3g8PTE1O3grKylpZihBPDw9MSwoQS09amVbeF0pPDApcmV0dXJuLTE7aWYoQT4wJiYoMD09PXVlfHwxIT09SCkpcmV0dXJuLTE7Zm9yKGtlWzFdPTAs''@;'; put 'put ''eD0xO3g8MTU7eCsrKWtlW3grMV09a2VbeF0ramVbeF07Zm9yKEM9MDtDPFRlO0MrKykwIT09Z2VbX2UrQ10mJihCW2tlW2dlW19lK0NdXSsrXT1DKTtpZigwPT09dWU/KHhlPUhlPUIsS2U9MTkpOjE9PT11ZT8oeGU9cSx5ZS09MjU3LEhlPWVlLExlLT0yNTcsS2U9MjU2KTooeGU9SixIZT1y''@;'; put 'put ''ZSxLZT0tMSksbmU9MCxDPTAseD1ULGl0PVplLEU9aixtPTAsVWU9LTEsSmU9KGFlPTE8PGopLTEsMT09PXVlJiZhZT44NTJ8fDI9PT11ZSYmYWU+NTkyKXJldHVybiAxO2Zvcig7Oyl7UmU9eC1tLEJbQ108S2U/KFZlPTAsQWU9QltDXSk6QltDXT5LZT8oVmU9SGVbTGUrQltDXV0sQWU9eGVb''@;'; put 'put ''eWUrQltDXV0pOihWZT05NixBZT0wKSxzZT0xPDx4LW0sVD1DZT0xPDxFO2Rve01lW2l0KyhuZT4+bSkrKENlLT1zZSldPVJlPDwyNHxWZTw8MTZ8QWV9d2hpbGUoMCE9PUNlKTtmb3Ioc2U9MTw8eC0xO25lJnNlOylzZT4+PTE7aWYoMCE9PXNlPyhuZSY9c2UtMSxuZSs9c2UpOm5lPTAsQysr''@;'; put 'put ''LDA9PS0tamVbeF0pe2lmKHg9PT1IKWJyZWFrO3g9Z2VbX2UrQltDXV19aWYoeD5qJiYobmUmSmUpIT09VWUpe2ZvcigwPT09bSYmKG09aiksaXQrPVQsQT0xPDwoRT14LW0pO0UrbTxIJiYhKChBLT1qZVtFK21dKTw9MCk7KUUrKyxBPDw9MTtpZihhZSs9MTw8RSwxPT09dWUmJmFlPjg1Mnx8''@;'; put 'put ''Mj09PXVlJiZhZT41OTIpcmV0dXJuIDE7TWVbVWU9bmUmSmVdPWo8PDI0fEU8PDE2fGl0LVplfX1yZXR1cm4gMCE9PW5lJiYoTWVbaXQrbmVdPXgtbTw8MjR8NjQ8PDE2KSxnLmJpdHM9aiwwfX0seyIuLi91dGlscy9jb21tb24iOjI3fV0sMzc6W2Z1bmN0aW9uKFAsRixSKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7Ri5leHBvcnRzPXsyOiJuZWVkIGRpY3Rpb25hcnkiLDE6InN0cmVhbSBlbmQiLDA6IiIsIi0xIjoiZmlsZSBlcnJvciIsIi0yIjoic3RyZWFtIGVycm9yIiwiLTMiOiJkYXRhIGVycm9yIiwiLTQiOiJpbnN1ZmZpY2llbnQgbWVtb3J5IiwiLTUiOiJidWZmZXIgZXJyb3IiLCItNiI6Imlu''@;'; put 'put ''Y29tcGF0aWJsZSB2ZXJzaW9uIn19LHt9XSwzODpbZnVuY3Rpb24oUCxGLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuLi91dGlscy9jb21tb24iKTtmdW5jdGlvbiBZKGh0KXtmb3IodmFyIFJyPWh0Lmxlbmd0aDstLVJyPj0wOylodFtScl09MH12YXIgSD1bMCwwLDAsMCwwLDAsMCwwLDEs''@;'; put 'put ''MSwxLDEsMiwyLDIsMiwzLDMsMywzLDQsNCw0LDQsNSw1LDUsNSwwXSxqPVswLDAsMCwwLDEsMSwyLDIsMywzLDQsNCw1LDUsNiw2LDcsNyw4LDgsOSw5LDEwLDEwLDExLDExLDEyLDEyLDEzLDEzXSxFPVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMyw3XSxtPVsxNiwxNywx''@;'; put 'put ''OCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSxhZT1uZXcgQXJyYXkoNTc2KTtZKGFlKTt2YXIgbmU9bmV3IEFycmF5KDYwKTtZKG5lKTt2YXIgc2U9bmV3IEFycmF5KDUxMik7WShzZSk7dmFyIENlPW5ldyBBcnJheSgyNTYpO1koQ2UpO3ZhciBVZT1uZXcgQXJyYXko''@;'; put 'put ''MjkpO1koVWUpO3ZhciBKZT1uZXcgQXJyYXkoMzApO1koSmUpO3ZhciB4ZSx5ZSxLZSxpdD1mdW5jdGlvbihodCxScixCdCxBdCxGbil7dGhpcy5zdGF0aWNfdHJlZT1odCx0aGlzLmV4dHJhX2JpdHM9UnIsdGhpcy5leHRyYV9iYXNlPUJ0LHRoaXMuZWxlbXM9QXQsdGhpcy5tYXhfbGVuZ3Ro''@;'; put 'put ''PUZuLHRoaXMuaGFzX3N0cmVlPWh0JiZodC5sZW5ndGh9LGplPWZ1bmN0aW9uKGh0LFJyKXt0aGlzLmR5bl90cmVlPWh0LHRoaXMubWF4X2NvZGU9MCx0aGlzLnN0YXRfZGVzYz1Scn07ZnVuY3Rpb24ga2UoaHQpe3JldHVybiBodDwyNTY/c2VbaHRdOnNlWzI1NisoaHQ+Pj43KV19ZnVuY3Rp''@;'; put 'put ''b24gSGUoaHQsUnIpe2h0LnBlbmRpbmdfYnVmW2h0LnBlbmRpbmcrK109MjU1JlJyLGh0LnBlbmRpbmdfYnVmW2h0LnBlbmRpbmcrK109UnI+Pj44JjI1NX1mdW5jdGlvbiBMZShodCxScixCdCl7aHQuYmlfdmFsaWQ+MTYtQnQ/KGh0LmJpX2J1Znw9UnI8PGh0LmJpX3ZhbGlkJjY1NTM1LEhl''@;'; put 'put ''KGh0LGh0LmJpX2J1ZiksaHQuYmlfYnVmPVJyPj4xNi1odC5iaV92YWxpZCxodC5iaV92YWxpZCs9QnQtMTYpOihodC5iaV9idWZ8PVJyPDxodC5iaV92YWxpZCY2NTUzNSxodC5iaV92YWxpZCs9QnQpfWZ1bmN0aW9uIFJlKGh0LFJyLEJ0KXtMZShodCxCdFsyKlJyXSxCdFsyKlJyKzFdKX1m''@;'; put 'put ''dW5jdGlvbiBWZShodCxScil7dmFyIEJ0PTA7ZG97QnR8PTEmaHQsaHQ+Pj49MSxCdDw8PTF9d2hpbGUoLS1Scj4wKTtyZXR1cm4gQnQ+Pj4xfWZ1bmN0aW9uIF90KGh0LFJyLEJ0KXt2YXIgc3QsWnQsQXQ9bmV3IEFycmF5KDE2KSxGbj0wO2ZvcihzdD0xO3N0PD0xNTtzdCsrKUF0W3N0XT1G''@;'; put 'put ''bj1GbitCdFtzdC0xXTw8MTtmb3IoWnQ9MDtadDw9UnI7WnQrKyl7dmFyIFFyPWh0WzIqWnQrMV07MCE9PVFyJiYoaHRbMipadF09VmUoQXRbUXJdKyssUXIpKX19ZnVuY3Rpb24gUWUoaHQpe3ZhciBScjtmb3IoUnI9MDtScjwyODY7UnIrKylodC5keW5fbHRyZWVbMipScl09MDtmb3IoUnI9''@;'; put 'put ''MDtScjwzMDtScisrKWh0LmR5bl9kdHJlZVsyKlJyXT0wO2ZvcihScj0wO1JyPDE5O1JyKyspaHQuYmxfdHJlZVsyKlJyXT0wO2h0LmR5bl9sdHJlZVs1MTJdPTEsaHQub3B0X2xlbj1odC5zdGF0aWNfbGVuPTAsaHQubGFzdF9saXQ9aHQubWF0Y2hlcz0wfWZ1bmN0aW9uIHNuKGh0KXtodC5i''@;'; put 'put ''aV92YWxpZD44P0hlKGh0LGh0LmJpX2J1Zik6aHQuYmlfdmFsaWQ+MCYmKGh0LnBlbmRpbmdfYnVmW2h0LnBlbmRpbmcrK109aHQuYmlfYnVmKSxodC5iaV9idWY9MCxodC5iaV92YWxpZD0wfWZ1bmN0aW9uIFN0KGh0LFJyLEJ0LEF0KXt2YXIgRm49MipScixzdD0yKkJ0O3JldHVybiBodFtG''@;'; put 'put ''bl08aHRbc3RdfHxodFtGbl09PT1odFtzdF0mJkF0W1JyXTw9QXRbQnRdfWZ1bmN0aW9uIGVuKGh0LFJyLEJ0KXtmb3IodmFyIEF0PWh0LmhlYXBbQnRdLEZuPUJ0PDwxO0ZuPD1odC5oZWFwX2xlbiYmKEZuPGh0LmhlYXBfbGVuJiZTdChScixodC5oZWFwW0ZuKzFdLGh0LmhlYXBbRm5dLGh0''@;'; put 'put ''LmRlcHRoKSYmRm4rKywhU3QoUnIsQXQsaHQuaGVhcFtGbl0saHQuZGVwdGgpKTspaHQuaGVhcFtCdF09aHQuaGVhcFtGbl0sQnQ9Rm4sRm48PD0xO2h0LmhlYXBbQnRdPUF0fWZ1bmN0aW9uIHV0KGh0LFJyLEJ0KXt2YXIgQXQsRm4sWnQsUXIsc3Q9MDtpZigwIT09aHQubGFzdF9saXQpZG97''@;'; put 'put ''QXQ9aHQucGVuZGluZ19idWZbaHQuZF9idWYrMipzdF08PDh8aHQucGVuZGluZ19idWZbaHQuZF9idWYrMipzdCsxXSxGbj1odC5wZW5kaW5nX2J1ZltodC5sX2J1ZitzdF0sc3QrKywwPT09QXQ/UmUoaHQsRm4sUnIpOihSZShodCwoWnQ9Q2VbRm5dKSsyNTYrMSxSciksMCE9PShRcj1IW1p0''@;'; put 'put ''XSkmJkxlKGh0LEZuLT1VZVtadF0sUXIpLFJlKGh0LFp0PWtlKC0tQXQpLEJ0KSwwIT09KFFyPWpbWnRdKSYmTGUoaHQsQXQtPUplW1p0XSxRcikpfXdoaWxlKHN0PGh0Lmxhc3RfbGl0KTtSZShodCwyNTYsUnIpfWZ1bmN0aW9uIFhlKGh0LFJyKXt2YXIgWnQsUXIsVHQsQnQ9UnIuZHluX3Ry''@;'; put 'put ''ZWUsQXQ9UnIuc3RhdF9kZXNjLnN0YXRpY190cmVlLEZuPVJyLnN0YXRfZGVzYy5oYXNfc3RyZWUsc3Q9UnIuc3RhdF9kZXNjLmVsZW1zLFllPS0xO2ZvcihodC5oZWFwX2xlbj0wLGh0LmhlYXBfbWF4PTU3MyxadD0wO1p0PHN0O1p0KyspMCE9PUJ0WzIqWnRdPyhodC5oZWFwWysraHQuaGVh''@;'; put 'put ''cF9sZW5dPVllPVp0LGh0LmRlcHRoW1p0XT0wKTpCdFsyKlp0KzFdPTA7Zm9yKDtodC5oZWFwX2xlbjwyOylCdFsyKihUdD1odC5oZWFwWysraHQuaGVhcF9sZW5dPVllPDI/KytZZTowKV09MSxodC5kZXB0aFtUdF09MCxodC5vcHRfbGVuLS0sRm4mJihodC5zdGF0aWNfbGVuLT1BdFsyKlR0''@;'; put 'put ''KzFdKTtmb3IoUnIubWF4X2NvZGU9WWUsWnQ9aHQuaGVhcF9sZW4+PjE7WnQ+PTE7WnQtLSllbihodCxCdCxadCk7VHQ9c3Q7ZG97WnQ9aHQuaGVhcFsxXSxodC5oZWFwWzFdPWh0LmhlYXBbaHQuaGVhcF9sZW4tLV0sZW4oaHQsQnQsMSksUXI9aHQuaGVhcFsxXSxodC5oZWFwWy0taHQuaGVh''@;'; put 'put ''cF9tYXhdPVp0LGh0LmhlYXBbLS1odC5oZWFwX21heF09UXIsQnRbMipUdF09QnRbMipadF0rQnRbMipRcl0saHQuZGVwdGhbVHRdPShodC5kZXB0aFtadF0+PWh0LmRlcHRoW1FyXT9odC5kZXB0aFtadF06aHQuZGVwdGhbUXJdKSsxLEJ0WzIqWnQrMV09QnRbMipRcisxXT1UdCxodC5oZWFw''@;'; put 'put ''WzFdPVR0KyssZW4oaHQsQnQsMSl9d2hpbGUoaHQuaGVhcF9sZW4+PTIpO2h0LmhlYXBbLS1odC5oZWFwX21heF09aHQuaGVhcFsxXSxmdW5jdGlvbiBEZShodCxScil7dmFyIFR0LHJyLGZ0LE10LFpuLG5uLEJ0PVJyLmR5bl90cmVlLEF0PVJyLm1heF9jb2RlLEZuPVJyLnN0YXRfZGVzYy5z''@;'; put 'put ''dGF0aWNfdHJlZSxzdD1Sci5zdGF0X2Rlc2MuaGFzX3N0cmVlLFp0PVJyLnN0YXRfZGVzYy5leHRyYV9iaXRzLFFyPVJyLnN0YXRfZGVzYy5leHRyYV9iYXNlLFllPVJyLnN0YXRfZGVzYy5tYXhfbGVuZ3RoLFd0PTA7Zm9yKE10PTA7TXQ8PTE1O010KyspaHQuYmxfY291bnRbTXRdPTA7Zm9y''@;'; put 'put ''KEJ0WzIqaHQuaGVhcFtodC5oZWFwX21heF0rMV09MCxUdD1odC5oZWFwX21heCsxO1R0PDU3MztUdCsrKShNdD1CdFsyKkJ0WzIqKHJyPWh0LmhlYXBbVHRdKSsxXSsxXSsxKT5ZZSYmKE10PVllLFd0KyspLEJ0WzIqcnIrMV09TXQsIShycj5BdCkmJihodC5ibF9jb3VudFtNdF0rKyxabj0w''@;'; put 'put ''LHJyPj1RciYmKFpuPVp0W3JyLVFyXSksaHQub3B0X2xlbis9KG5uPUJ0WzIqcnJdKSooTXQrWm4pLHN0JiYoaHQuc3RhdGljX2xlbis9bm4qKEZuWzIqcnIrMV0rWm4pKSk7aWYoMCE9PVd0KXtkb3tmb3IoTXQ9WWUtMTswPT09aHQuYmxfY291bnRbTXRdOylNdC0tO2h0LmJsX2NvdW50W010''@;'; put 'put ''XS0tLGh0LmJsX2NvdW50W010KzFdKz0yLGh0LmJsX2NvdW50W1llXS0tLFd0LT0yfXdoaWxlKFd0PjApO2ZvcihNdD1ZZTswIT09TXQ7TXQtLSlmb3IocnI9aHQuYmxfY291bnRbTXRdOzAhPT1ycjspISgoZnQ9aHQuaGVhcFstLVR0XSk+QXQpJiYoQnRbMipmdCsxXSE9PU10JiYoaHQub3B0''@;'; put 'put ''X2xlbis9KE10LUJ0WzIqZnQrMV0pKkJ0WzIqZnRdLEJ0WzIqZnQrMV09TXQpLHJyLS0pfX0oaHQsUnIpLF90KEJ0LFllLGh0LmJsX2NvdW50KX1mdW5jdGlvbiB0dChodCxScixCdCl7dmFyIEF0LHN0LEZuPS0xLFp0PVJyWzFdLFFyPTAsWWU9NyxUdD00O2ZvcigwPT09WnQmJihZZT0xMzgs''@;'; put 'put ''VHQ9MyksUnJbMiooQnQrMSkrMV09NjU1MzUsQXQ9MDtBdDw9QnQ7QXQrKylzdD1adCxadD1SclsyKihBdCsxKSsxXSwhKCsrUXI8WWUmJnN0PT09WnQpJiYoUXI8VHQ/aHQuYmxfdHJlZVsyKnN0XSs9UXI6MCE9PXN0PyhzdCE9PUZuJiZodC5ibF90cmVlWzIqc3RdKyssaHQuYmxfdHJlZVsz''@;'; put 'put ''Ml0rKyk6UXI8PTEwP2h0LmJsX3RyZWVbMzRdKys6aHQuYmxfdHJlZVszNl0rKyxRcj0wLEZuPXN0LDA9PT1adD8oWWU9MTM4LFR0PTMpOnN0PT09WnQ/KFllPTYsVHQ9Myk6KFllPTcsVHQ9NCkpfWZ1bmN0aW9uIEllKGh0LFJyLEJ0KXt2YXIgQXQsc3QsRm49LTEsWnQ9UnJbMV0sUXI9MCxZ''@;'; put 'put ''ZT03LFR0PTQ7Zm9yKDA9PT1adCYmKFllPTEzOCxUdD0zKSxBdD0wO0F0PD1CdDtBdCsrKWlmKHN0PVp0LFp0PVJyWzIqKEF0KzEpKzFdLCEoKytRcjxZZSYmc3Q9PT1adCkpe2lmKFFyPFR0KWRve1JlKGh0LHN0LGh0LmJsX3RyZWUpfXdoaWxlKDAhPS0tUXIpO2Vsc2UgMCE9PXN0PyhzdCE9''@;'; put 'put ''PUZuJiYoUmUoaHQsc3QsaHQuYmxfdHJlZSksUXItLSksUmUoaHQsMTYsaHQuYmxfdHJlZSksTGUoaHQsUXItMywyKSk6UXI8PTEwPyhSZShodCwxNyxodC5ibF90cmVlKSxMZShodCxRci0zLDMpKTooUmUoaHQsMTgsaHQuYmxfdHJlZSksTGUoaHQsUXItMTEsNykpO1FyPTAsRm49c3QsMD09''@;'; put 'put ''PVp0PyhZZT0xMzgsVHQ9Myk6c3Q9PT1adD8oWWU9NixUdD0zKTooWWU9NyxUdD00KX19dmFyIFJ0PSExO2Z1bmN0aW9uIGFuKGh0LFJyLEJ0LEF0KXtMZShodCwwKyhBdD8xOjApLDMpLGZ1bmN0aW9uIHZ0KGh0LFJyLEJ0LEF0KXtzbihodCksQXQmJihIZShodCxCdCksSGUoaHQsfkJ0KSks''@;'; put 'put ''ei5hcnJheVNldChodC5wZW5kaW5nX2J1ZixodC53aW5kb3csUnIsQnQsaHQucGVuZGluZyksaHQucGVuZGluZys9QnR9KGh0LFJyLEJ0LCEwKX1SLl90cl9pbml0PWZ1bmN0aW9uIHJpKGh0KXtSdHx8KGZ1bmN0aW9uIHJ0KCl7dmFyIGh0LFJyLEJ0LEF0LEZuLHN0PW5ldyBBcnJheSgxNik7''@;'; put 'put ''Zm9yKEJ0PTAsQXQ9MDtBdDwyODtBdCsrKWZvcihVZVtBdF09QnQsaHQ9MDtodDwxPDxIW0F0XTtodCsrKUNlW0J0KytdPUF0O2ZvcihDZVtCdC0xXT1BdCxGbj0wLEF0PTA7QXQ8MTY7QXQrKylmb3IoSmVbQXRdPUZuLGh0PTA7aHQ8MTw8altBdF07aHQrKylzZVtGbisrXT1BdDtmb3IoRm4+''@;'; put 'put ''Pj03O0F0PDMwO0F0KyspZm9yKEplW0F0XT1Gbjw8NyxodD0wO2h0PDE8PGpbQXRdLTc7aHQrKylzZVsyNTYrRm4rK109QXQ7Zm9yKFJyPTA7UnI8PTE1O1JyKyspc3RbUnJdPTA7Zm9yKGh0PTA7aHQ8PTE0MzspYWVbMipodCsxXT04LGh0Kyssc3RbOF0rKztmb3IoO2h0PD0yNTU7KWFlWzIq''@;'; put 'put ''aHQrMV09OSxodCsrLHN0WzldKys7Zm9yKDtodDw9Mjc5OylhZVsyKmh0KzFdPTcsaHQrKyxzdFs3XSsrO2Zvcig7aHQ8PTI4NzspYWVbMipodCsxXT04LGh0Kyssc3RbOF0rKztmb3IoX3QoYWUsMjg3LHN0KSxodD0wO2h0PDMwO2h0KyspbmVbMipodCsxXT01LG5lWzIqaHRdPVZlKGh0LDUp''@;'; put 'put ''O3hlPW5ldyBpdChhZSxILDI1NywyODYsMTUpLHllPW5ldyBpdChuZSxqLDAsMzAsMTUpLEtlPW5ldyBpdChuZXcgQXJyYXkoMCksRSwwLDE5LDcpfSgpLFJ0PSEwKSxodC5sX2Rlc2M9bmV3IGplKGh0LmR5bl9sdHJlZSx4ZSksaHQuZF9kZXNjPW5ldyBqZShodC5keW5fZHRyZWUseWUpLGh0''@;'; put 'put ''LmJsX2Rlc2M9bmV3IGplKGh0LmJsX3RyZWUsS2UpLGh0LmJpX2J1Zj0wLGh0LmJpX3ZhbGlkPTAsUWUoaHQpfSxSLl90cl9zdG9yZWRfYmxvY2s9YW4sUi5fdHJfZmx1c2hfYmxvY2s9ZnVuY3Rpb24gbmkoaHQsUnIsQnQsQXQpe3ZhciBGbixzdCxadD0wO2h0LmxldmVsPjA/KDI9PT1odC5z''@;'; put 'put ''dHJtLmRhdGFfdHlwZSYmKGh0LnN0cm0uZGF0YV90eXBlPWZ1bmN0aW9uIEl0KGh0KXt2YXIgQnQsUnI9NDA5MzYyNDQ0Nztmb3IoQnQ9MDtCdDw9MzE7QnQrKyxScj4+Pj0xKWlmKDEmUnImJjAhPT1odC5keW5fbHRyZWVbMipCdF0pcmV0dXJuIDA7aWYoMCE9PWh0LmR5bl9sdHJlZVsxOF18''@;'; put 'put ''fDAhPT1odC5keW5fbHRyZWVbMjBdfHwwIT09aHQuZHluX2x0cmVlWzI2XSlyZXR1cm4gMTtmb3IoQnQ9MzI7QnQ8MjU2O0J0KyspaWYoMCE9PWh0LmR5bl9sdHJlZVsyKkJ0XSlyZXR1cm4gMTtyZXR1cm4gMH0oaHQpKSxYZShodCxodC5sX2Rlc2MpLFhlKGh0LGh0LmRfZGVzYyksWnQ9ZnVu''@;'; put 'put ''Y3Rpb24gYXQoaHQpe3ZhciBScjtmb3IodHQoaHQsaHQuZHluX2x0cmVlLGh0LmxfZGVzYy5tYXhfY29kZSksdHQoaHQsaHQuZHluX2R0cmVlLGh0LmRfZGVzYy5tYXhfY29kZSksWGUoaHQsaHQuYmxfZGVzYyksUnI9MTg7UnI+PTMmJjA9PT1odC5ibF90cmVlWzIqbVtScl0rMV07UnItLSk7''@;'; put 'put ''cmV0dXJuIGh0Lm9wdF9sZW4rPTMqKFJyKzEpKzUrNSs0LFJyfShodCksKHN0PWh0LnN0YXRpY19sZW4rMys3Pj4+Myk8PShGbj1odC5vcHRfbGVuKzMrNz4+PjMpJiYoRm49c3QpKTpGbj1zdD1CdCs1LEJ0KzQ8PUZuJiYtMSE9PVJyP2FuKGh0LFJyLEJ0LEF0KTo0PT09aHQuc3RyYXRlZ3l8''@;'; put 'put ''fHN0PT09Rm4/KExlKGh0LDIrKEF0PzE6MCksMyksdXQoaHQsYWUsbmUpKTooTGUoaHQsNCsoQXQ/MTowKSwzKSxmdW5jdGlvbiB1bihodCxScixCdCxBdCl7dmFyIEZuO2ZvcihMZShodCxSci0yNTcsNSksTGUoaHQsQnQtMSw1KSxMZShodCxBdC00LDQpLEZuPTA7Rm48QXQ7Rm4rKylMZSho''@;'; put 'put ''dCxodC5ibF90cmVlWzIqbVtGbl0rMV0sMyk7SWUoaHQsaHQuZHluX2x0cmVlLFJyLTEpLEllKGh0LGh0LmR5bl9kdHJlZSxCdC0xKX0oaHQsaHQubF9kZXNjLm1heF9jb2RlKzEsaHQuZF9kZXNjLm1heF9jb2RlKzEsWnQrMSksdXQoaHQsaHQuZHluX2x0cmVlLGh0LmR5bl9kdHJlZSkpLFFl''@;'; put 'put ''KGh0KSxBdCYmc24oaHQpfSxSLl90cl90YWxseT1mdW5jdGlvbiBobihodCxScixCdCl7cmV0dXJuIGh0LnBlbmRpbmdfYnVmW2h0LmRfYnVmKzIqaHQubGFzdF9saXRdPVJyPj4+OCYyNTUsaHQucGVuZGluZ19idWZbaHQuZF9idWYrMipodC5sYXN0X2xpdCsxXT0yNTUmUnIsaHQucGVuZGlu''@;'; put 'put ''Z19idWZbaHQubF9idWYraHQubGFzdF9saXRdPTI1NSZCdCxodC5sYXN0X2xpdCsrLDA9PT1Scj9odC5keW5fbHRyZWVbMipCdF0rKzooaHQubWF0Y2hlcysrLFJyLS0saHQuZHluX2x0cmVlWzIqKENlW0J0XSsyNTYrMSldKyssaHQuZHluX2R0cmVlWzIqa2UoUnIpXSsrKSxodC5sYXN0X2xp''@;'; put 'put ''dD09PWh0LmxpdF9idWZzaXplLTF9LFIuX3RyX2FsaWduPWZ1bmN0aW9uIGxuKGh0KXtMZShodCwyLDMpLFJlKGh0LDI1NixhZSksZnVuY3Rpb24gQWUoaHQpezE2PT09aHQuYmlfdmFsaWQ/KEhlKGh0LGh0LmJpX2J1ZiksaHQuYmlfYnVmPTAsaHQuYmlfdmFsaWQ9MCk6aHQuYmlfdmFsaWQ+''@;'; put 'put ''PTgmJihodC5wZW5kaW5nX2J1ZltodC5wZW5kaW5nKytdPTI1NSZodC5iaV9idWYsaHQuYmlfYnVmPj49OCxodC5iaV92YWxpZC09OCl9KGh0KX19LHsiLi4vdXRpbHMvY29tbW9uIjoyN31dLDM5OltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO0YuZXhwb3J0cz1mdW5jdGlvbiB6KCl7''@;'; put 'put ''dGhpcy5pbnB1dD1udWxsLHRoaXMubmV4dF9pbj0wLHRoaXMuYXZhaWxfaW49MCx0aGlzLnRvdGFsX2luPTAsdGhpcy5vdXRwdXQ9bnVsbCx0aGlzLm5leHRfb3V0PTAsdGhpcy5hdmFpbF9vdXQ9MCx0aGlzLnRvdGFsX291dD0wLHRoaXMubXNnPSIiLHRoaXMuc3RhdGU9bnVsbCx0aGlzLmRh''@;'; put 'put ''dGFfdHlwZT0yLHRoaXMuYWRsZXI9MH19LHt9XX0se30sWzldKSg5KX0pfSwzMjE5OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJhZXMtMTI4LWVjYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjAsIm1vZGUiOiJFQ0IiLCJ0eXBlIjoiYmxvY2si''@;'; put 'put ''fSwiYWVzLTE5Mi1lY2IiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjowLCJtb2RlIjoiRUNCIiwidHlwZSI6ImJsb2NrIn0sImFlcy0yNTYtZWNiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MCwibW9kZSI6IkVDQiIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTI4LWNi''@;'; put 'put ''YyI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xOTItY2JjIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTI1Ni1jYmMiOnsiY2lwaGVy''@;'; put 'put ''IjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMxMjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMxOTIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2''@;'; put 'put ''IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMyNTYiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTI4LWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0ZC''@;'; put 'put ''IiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0ZCIiwidHlwZSI6''@;'; put 'put ''InN0cmVhbSJ9LCJhZXMtMTI4LWNmYjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNGQjgiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY2ZiOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCOCIsInR5cGUiOiJzdHJl''@;'; put 'put ''YW0ifSwiYWVzLTI1Ni1jZmI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkI4IiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWNmYjEiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNGQjEiLCJ0eXBlIjoic3RyZWFtIn0s''@;'; put 'put ''ImFlcy0xOTItY2ZiMSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCMSIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jZmIxIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkIxIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMt''@;'; put 'put ''MTI4LW9mYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLW9mYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LW9mYiI6''@;'; put 'put ''eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWN0ciI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWN0ciI6eyJjaXBoZXIi''@;'; put 'put ''OiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWN0ciI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWdjbSI6eyJjaXBoZXIiOiJBRVMiLCJr''@;'; put 'put ''ZXkiOjEyOCwiaXYiOjEyLCJtb2RlIjoiR0NNIiwidHlwZSI6ImF1dGgifSwiYWVzLTE5Mi1nY20iOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxMiwibW9kZSI6IkdDTSIsInR5cGUiOiJhdXRoIn0sImFlcy0yNTYtZ2NtIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6''@;'; put 'put ''MTIsIm1vZGUiOiJHQ00iLCJ0eXBlIjoiYXV0aCJ9fScpfSwzMjQ3OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMjcwNTQpLkJ1ZmZlcixfPWIoNzA0NSkuVHJhbnNmb3JtLHA9Yig3ODQ1NCkuSSxWPWIoNzE5OTMpLHc9Yig0MTA5MCk7ZnVuY3Rpb24gUChGKXtfLmNhbGwodGhp''@;'; put 'put ''cyksdGhpcy5oYXNoTW9kZT0ic3RyaW5nIj09dHlwZW9mIEYsdGhpcy5oYXNoTW9kZT90aGlzW0ZdPXRoaXMuX2ZpbmFsT3JEaWdlc3Q6dGhpcy5maW5hbD10aGlzLl9maW5hbE9yRGlnZXN0LHRoaXMuX2ZpbmFsJiYodGhpcy5fX2ZpbmFsPXRoaXMuX2ZpbmFsLHRoaXMuX2ZpbmFsPW51bGwp''@;'; put 'put ''LHRoaXMuX2RlY29kZXI9bnVsbCx0aGlzLl9lbmNvZGluZz1udWxsfVYoUCxfKSxQLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oRixSLHope3ZhciBOPXcoRixSKSxPPXRoaXMuX3VwZGF0ZShOKTtyZXR1cm4gdGhpcy5oYXNoTW9kZT90aGlzOih6JiYoTz10aGlzLl90b1N0cmluZyhPLHop''@;'; put 'put ''KSxPKX0sUC5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oKXt9LFAucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0sUC5wcm90b3R5cGUuc2V0QXV0aFRh''@;'; put 'put ''Zz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpfSxQLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBzZXQgYWFkIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9''@;'; put 'put ''LFAucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oRixSLHope3ZhciBOO3RyeXt0aGlzLmhhc2hNb2RlP3RoaXMuX3VwZGF0ZShGKTp0aGlzLnB1c2godGhpcy5fdXBkYXRlKEYpKX1jYXRjaChPKXtOPU99ZmluYWxseXt6KE4pfX0sUC5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKEYp''@;'; put 'put ''e3ZhciBSO3RyeXt0aGlzLnB1c2godGhpcy5fX2ZpbmFsKCkpfWNhdGNoKHope1I9en1GKFIpfSxQLnByb3RvdHlwZS5fZmluYWxPckRpZ2VzdD1mdW5jdGlvbihGKXt2YXIgUj10aGlzLl9fZmluYWwoKXx8SS5hbGxvYygwKTtyZXR1cm4gRiYmKFI9dGhpcy5fdG9TdHJpbmcoUixGLCEwKSks''@;'; put 'put ''Un0sUC5wcm90b3R5cGUuX3RvU3RyaW5nPWZ1bmN0aW9uKEYsUix6KXtpZih0aGlzLl9kZWNvZGVyfHwodGhpcy5fZGVjb2Rlcj1uZXcgcChSKSx0aGlzLl9lbmNvZGluZz1SKSx0aGlzLl9lbmNvZGluZyE9PVIpdGhyb3cgbmV3IEVycm9yKCJjYW5cdTIwMTl0IHN3aXRjaCBlbmNvZGluZ3Mi''@;'; put 'put ''KTt2YXIgTj10aGlzLl9kZWNvZGVyLndyaXRlKEYpO3JldHVybiB6JiYoTis9dGhpcy5fZGVjb2Rlci5lbmQoKSksTn0sY2UuZXhwb3J0cz1QfSwzMzE2OmNlPT57InVzZSBzdHJpY3QiO3ZhciBYPVR5cGVFcnJvcjtjZS5leHBvcnRzPWZ1bmN0aW9uKEkpe2lmKEk+OTAwNzE5OTI1NDc0MDk5''@;'; put 'put ''MSl0aHJvdyBYKCJNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQiKTtyZXR1cm4gSX19LDMzNDI6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9NjU1MzYsVj1iKDI3MDU0KS5CdWZmZXIsdz1nbG9iYWwuY3J5cHRvfHxnbG9iYWwubXNDcnlwdG87Y2UuZXhwb3J0cz13JiZ3Lmdl''@;'; put 'put ''dFJhbmRvbVZhbHVlcz9mdW5jdGlvbiBQKEYsUil7aWYoRj40Mjk0OTY3Mjk1KXRocm93IG5ldyBSYW5nZUVycm9yKCJyZXF1ZXN0ZWQgdG9vIG1hbnkgcmFuZG9tIGJ5dGVzIik7dmFyIHo9Vi5hbGxvY1Vuc2FmZShGKTtpZihGPjApaWYoRj5JKWZvcih2YXIgTj0wO048RjtOKz1JKXcuZ2V0''@;'; put 'put ''UmFuZG9tVmFsdWVzKHouc2xpY2UoTixOK0kpKTtlbHNlIHcuZ2V0UmFuZG9tVmFsdWVzKHopO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBSP3Byb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKXtSKG51bGwseil9KTp6fTpmdW5jdGlvbiBwKCl7dGhyb3cgbmV3IEVycm9yKCJTZWN1cmUgcmFu''@;'; put 'put ''ZG9tIG51bWJlciBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyLlxuVXNlIENocm9tZSwgRmlyZWZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMSIpfX0sMzM4MzpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPU1hdGguZmxvb3J9LDMzOTg6Y2U9PntmdW5j''@;'; put 'put ''dGlvbiBiKEkpe3RyeXtpZighZ2xvYmFsLmxvY2FsU3RvcmFnZSlyZXR1cm4hMX1jYXRjaHtyZXR1cm4hMX12YXIgXz1nbG9iYWwubG9jYWxTdG9yYWdlW0ldO3JldHVybiBudWxsIT1fJiYidHJ1ZSI9PT1TdHJpbmcoXykudG9Mb3dlckNhc2UoKX1jZS5leHBvcnRzPWZ1bmN0aW9uIFgoSSxf''@;'; put 'put ''KXtpZihiKCJub0RlcHJlY2F0aW9uIikpcmV0dXJuIEk7dmFyIHA9ITE7cmV0dXJuIGZ1bmN0aW9uIFYoKXtpZighcCl7aWYoYigidGhyb3dEZXByZWNhdGlvbiIpKXRocm93IG5ldyBFcnJvcihfKTtiKCJ0cmFjZURlcHJlY2F0aW9uIik/Y29uc29sZS50cmFjZShfKTpjb25zb2xlLndhcm4o''@;'; put 'put ''XykscD0hMH1yZXR1cm4gSS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX0sMzYyOTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDg2Njc1KSxfPWIoNTg2MDcpO2NlLmV4cG9ydHM9ZnVuY3Rpb24ocCl7aWYoIkZ1bmN0aW9uIj09PUkocCkpcmV0dXJuIF8ocCl9fSwzNzM0Oihtb2R1''@;'; put 'put ''bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57dmFyIF9hc3luY1RvR2VuZXJhdG9yPV9fd2VicGFja19yZXF1aXJlX18oMjkyOTMpLmRlZmF1bHQsX3dyYXBBc3luY0dlbmVyYXRvcj1fX3dlYnBhY2tfcmVxdWlyZV9fKDQyOTU4KS5kZWZhdWx0LF9h''@;'; put 'put ''d2FpdEFzeW5jR2VuZXJhdG9yPV9fd2VicGFja19yZXF1aXJlX18oNTMzNDQpLmRlZmF1bHQsX2FzeW5jR2VuZXJhdG9yRGVsZWdhdGU9X193ZWJwYWNrX3JlcXVpcmVfXyg5MzUxMykuZGVmYXVsdCxfYXN5bmNJdGVyYXRvcj1fX3dlYnBhY2tfcmVxdWlyZV9fKDgyODgxKS5kZWZhdWx0LGI7''@;'; put 'put ''c2VsZixiPSgpPT4oKCk9Pnt2YXIgX193ZWJwYWNrX21vZHVsZXNfXz17MzA2MjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDg3NjQpLkJ1ZmZlcjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5Dc3ZGb3JtYXR0ZXJTdHJlYW09dm9p''@;'; put 'put ''ZCAwO2NvbnN0IF89YigyODMwKSxwPWIoOTk0Nyk7WC5Dc3ZGb3JtYXR0ZXJTdHJlYW09Y2xhc3MgViBleHRlbmRzIF8uVHJhbnNmb3Jte2NvbnN0cnVjdG9yKFApe3N1cGVyKHt3cml0YWJsZU9iamVjdE1vZGU6UC5vYmplY3RNb2RlfSksdGhpcy5oYXNXcml0dGVuQk9NPSExLHRoaXMuZm9y''@;'; put 'put ''bWF0dGVyT3B0aW9ucz1QLHRoaXMucm93Rm9ybWF0dGVyPW5ldyBwLlJvd0Zvcm1hdHRlcihQKSx0aGlzLmhhc1dyaXR0ZW5CT009IVAud3JpdGVCT019dHJhbnNmb3JtKFApe3JldHVybiB0aGlzLnJvd0Zvcm1hdHRlci5yb3dUcmFuc2Zvcm09UCx0aGlzfV90cmFuc2Zvcm0oUCxGLFIpe2xl''@;'; put 'put ''dCB6PSExO3RyeXt0aGlzLmhhc1dyaXR0ZW5CT018fCh0aGlzLnB1c2godGhpcy5mb3JtYXR0ZXJPcHRpb25zLkJPTSksdGhpcy5oYXNXcml0dGVuQk9NPSEwKSx0aGlzLnJvd0Zvcm1hdHRlci5mb3JtYXQoUCwoTixPKT0+Tj8oej0hMCxSKE4pKTooTyYmTy5mb3JFYWNoKEs9Pnt0aGlzLnB1''@;'; put 'put ''c2goSS5mcm9tKEssInV0ZjgiKSl9KSx6PSEwLFIoKSkpfWNhdGNoKE4pe2lmKHopdGhyb3cgTjtSKE4pfX1fZmx1c2goUCl7dGhpcy5yb3dGb3JtYXR0ZXIuZmluaXNoKChGLFIpPT5GP1AoRik6KFImJlIuZm9yRWFjaCh6PT57dGhpcy5wdXNoKEkuZnJvbSh6LCJ1dGY4IikpfSksUCgpKSl9''@;'; put 'put ''fX0sNjc2MzooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguRm9ybWF0dGVyT3B0aW9ucz12b2lkIDAsWC5Gb3JtYXR0ZXJPcHRpb25zPWNsYXNzIGJ7Y29uc3RydWN0b3IoXz17fSl7dmFyIHA7dGhpcy5vYmpl''@;'; put 'put ''Y3RNb2RlPSEwLHRoaXMuZGVsaW1pdGVyPSIsIix0aGlzLnJvd0RlbGltaXRlcj0iXG4iLHRoaXMucXVvdGU9JyInLHRoaXMuZXNjYXBlPXRoaXMucXVvdGUsdGhpcy5xdW90ZUNvbHVtbnM9ITEsdGhpcy5xdW90ZUhlYWRlcnM9dGhpcy5xdW90ZUNvbHVtbnMsdGhpcy5oZWFkZXJzPW51bGws''@;'; put 'put ''dGhpcy5pbmNsdWRlRW5kUm93RGVsaW1pdGVyPSExLHRoaXMud3JpdGVCT009ITEsdGhpcy5CT009Ilx1ZmVmZiIsdGhpcy5hbHdheXNXcml0ZUhlYWRlcnM9ITEsT2JqZWN0LmFzc2lnbih0aGlzLF98fHt9KSx0eXBlb2YgXz8ucXVvdGVIZWFkZXJzPiJ1IiYmKHRoaXMucXVvdGVIZWFkZXJz''@;'; put 'put ''PXRoaXMucXVvdGVDb2x1bW5zKSwhMD09PV8/LnF1b3RlP3RoaXMucXVvdGU9JyInOiExPT09Xz8ucXVvdGUmJih0aGlzLnF1b3RlPSIiKSwic3RyaW5nIiE9dHlwZW9mIF8/LmVzY2FwZSYmKHRoaXMuZXNjYXBlPXRoaXMucXVvdGUpLHRoaXMuc2hvdWxkV3JpdGVIZWFkZXJzPSEhdGhpcy5o''@;'; put 'put ''ZWFkZXJzJiYobnVsbD09PShwPV8ud3JpdGVIZWFkZXJzKXx8dm9pZCAwPT09cHx8cCksdGhpcy5oZWFkZXJzPUFycmF5LmlzQXJyYXkodGhpcy5oZWFkZXJzKT90aGlzLmhlYWRlcnM6bnVsbCx0aGlzLmVzY2FwZWRRdW90ZT1gJHt0aGlzLmVzY2FwZX0ke3RoaXMucXVvdGV9YH19fSw1MTg2''@;'; put 'put ''OmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihQKXtyZXR1cm4gUCYmUC5fX2VzTW9kdWxlP1A6e2RlZmF1bHQ6UH19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxY''@;'; put 'put ''LkZpZWxkRm9ybWF0dGVyPXZvaWQgMDtjb25zdCBfPUkoYig4MDk0KSkscD1JKGIoOTcyMikpLFY9SShiKDE2NTgpKTtYLkZpZWxkRm9ybWF0dGVyPWNsYXNzIHd7Y29uc3RydWN0b3IoRil7dGhpcy5faGVhZGVycz1udWxsLHRoaXMuZm9ybWF0dGVyT3B0aW9ucz1GLG51bGwhPT1GLmhlYWRl''@;'; put 'put ''cnMmJih0aGlzLmhlYWRlcnM9Ri5oZWFkZXJzKSx0aGlzLlJFUExBQ0VfUkVHRVhQPW5ldyBSZWdFeHAoRi5xdW90ZSwiZyIpO2NvbnN0IFI9YFske0YuZGVsaW1pdGVyfSR7Vi5kZWZhdWx0KEYucm93RGVsaW1pdGVyKX18XHJ8XG5dYDt0aGlzLkVTQ0FQRV9SRUdFWFA9bmV3IFJlZ0V4cChS''@;'; put 'put ''KX1zZXQgaGVhZGVycyhGKXt0aGlzLl9oZWFkZXJzPUZ9c2hvdWxkUXVvdGUoRixSKXtjb25zdCB6PVI/dGhpcy5mb3JtYXR0ZXJPcHRpb25zLnF1b3RlSGVhZGVyczp0aGlzLmZvcm1hdHRlck9wdGlvbnMucXVvdGVDb2x1bW5zO3JldHVybiBfLmRlZmF1bHQoeik/ejpBcnJheS5pc0FycmF5''@;'; put 'put ''KHopP3pbRl06bnVsbCE9PXRoaXMuX2hlYWRlcnMmJnpbdGhpcy5faGVhZGVyc1tGXV19Zm9ybWF0KEYsUix6KXtjb25zdCBOPWAke3AuZGVmYXVsdChGKT8iIjpGfWAucmVwbGFjZSgvXDAvZywiIikse2Zvcm1hdHRlck9wdGlvbnM6T309dGhpcztyZXR1cm4iIiE9PU8ucXVvdGUmJi0xIT09''@;'; put 'put ''Ti5pbmRleE9mKE8ucXVvdGUpP3RoaXMucXVvdGVGaWVsZChOLnJlcGxhY2UodGhpcy5SRVBMQUNFX1JFR0VYUCxPLmVzY2FwZWRRdW90ZSkpOi0xIT09Ti5zZWFyY2godGhpcy5FU0NBUEVfUkVHRVhQKXx8dGhpcy5zaG91bGRRdW90ZShSLHopP3RoaXMucXVvdGVGaWVsZChOKTpOfXF1b3Rl''@;'; put 'put ''RmllbGQoRil7Y29uc3R7cXVvdGU6Un09dGhpcy5mb3JtYXR0ZXJPcHRpb25zO3JldHVybmAke1J9JHtGfSR7Un1gfX19LDcxODE6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEYpe3JldHVybiBGJiZGLl9f''@;'; put 'put ''ZXNNb2R1bGU/Rjp7ZGVmYXVsdDpGfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguUm93Rm9ybWF0dGVyPXZvaWQgMDtjb25zdCBfPUkoYig4NDIzKSkscD1JKGIoMjMwNykpLFY9Yig1MTg2KSx3PWIoNDY5Mik7Y2xhc3MgUHtjb25zdHJ1Y3Rv''@;'; put 'put ''cihSKXt0aGlzLnJvd0NvdW50PTAsdGhpcy5mb3JtYXR0ZXJPcHRpb25zPVIsdGhpcy5maWVsZEZvcm1hdHRlcj1uZXcgVi5GaWVsZEZvcm1hdHRlcihSKSx0aGlzLmhlYWRlcnM9Ui5oZWFkZXJzLHRoaXMuc2hvdWxkV3JpdGVIZWFkZXJzPVIuc2hvdWxkV3JpdGVIZWFkZXJzLHRoaXMuaGFz''@;'; put 'put ''V3JpdHRlbkhlYWRlcnM9ITEsbnVsbCE9PXRoaXMuaGVhZGVycyYmKHRoaXMuZmllbGRGb3JtYXR0ZXIuaGVhZGVycz10aGlzLmhlYWRlcnMpLFIudHJhbnNmb3JtJiYodGhpcy5yb3dUcmFuc2Zvcm09Ui50cmFuc2Zvcm0pfXN0YXRpYyBpc1Jvd0hhc2hBcnJheShSKXtyZXR1cm4hIUFycmF5''@;'; put 'put ''LmlzQXJyYXkoUikmJkFycmF5LmlzQXJyYXkoUlswXSkmJjI9PT1SWzBdLmxlbmd0aH1zdGF0aWMgaXNSb3dBcnJheShSKXtyZXR1cm4gQXJyYXkuaXNBcnJheShSKSYmIXRoaXMuaXNSb3dIYXNoQXJyYXkoUil9c3RhdGljIGdhdGhlckhlYWRlcnMoUil7cmV0dXJuIFAuaXNSb3dIYXNoQXJy''@;'; put 'put ''YXkoUik/Ui5tYXAoej0+elswXSk6QXJyYXkuaXNBcnJheShSKT9SOk9iamVjdC5rZXlzKFIpfXN0YXRpYyBjcmVhdGVUcmFuc2Zvcm0oUil7cmV0dXJuIHcuaXNTeW5jVHJhbnNmb3JtKFIpPyh6LE4pPT57bGV0IE89bnVsbDt0cnl7Tz1SKHopfWNhdGNoKEspe3JldHVybiBOKEspfXJldHVy''@;'; put 'put ''biBOKG51bGwsTyl9Oih6LE4pPT57Uih6LE4pfX1zZXQgcm93VHJhbnNmb3JtKFIpe2lmKCFfLmRlZmF1bHQoUikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHRyYW5zZm9ybSBzaG91bGQgYmUgYSBmdW5jdGlvbiIpO3RoaXMuX3Jvd1RyYW5zZm9ybT1QLmNyZWF0ZVRyYW5zZm9ybShSKX1m''@;'; put 'put ''b3JtYXQoUix6KXt0aGlzLmNhbGxUcmFuc2Zvcm1lcihSLChOLE8pPT57aWYoTilyZXR1cm4geihOKTtpZighUilyZXR1cm4geihudWxsKTtjb25zdCBLPVtdO2lmKE8pe2NvbnN0e3Nob3VsZEZvcm1hdENvbHVtbnM6WixoZWFkZXJzOll9PXRoaXMuY2hlY2tIZWFkZXJzKE8pO2lmKHRoaXMu''@;'; put 'put ''c2hvdWxkV3JpdGVIZWFkZXJzJiZZJiYhdGhpcy5oYXNXcml0dGVuSGVhZGVycyYmKEsucHVzaCh0aGlzLmZvcm1hdENvbHVtbnMoWSwhMCkpLHRoaXMuaGFzV3JpdHRlbkhlYWRlcnM9ITApLFope2NvbnN0IFc9dGhpcy5nYXRoZXJDb2x1bW5zKE8pO0sucHVzaCh0aGlzLmZvcm1hdENvbHVt''@;'; put 'put ''bnMoVywhMSkpfX1yZXR1cm4geihudWxsLEspfSl9ZmluaXNoKFIpe2NvbnN0IHo9W107aWYodGhpcy5mb3JtYXR0ZXJPcHRpb25zLmFsd2F5c1dyaXRlSGVhZGVycyYmMD09PXRoaXMucm93Q291bnQpe2lmKCF0aGlzLmhlYWRlcnMpcmV0dXJuIFIobmV3IEVycm9yKCJgYWx3YXlzV3JpdGVI''@;'; put 'put ''ZWFkZXJzYCBvcHRpb24gaXMgc2V0IHRvIHRydWUgYnV0IGBoZWFkZXJzYCBvcHRpb24gbm90IHByb3ZpZGVkLiIpKTt6LnB1c2godGhpcy5mb3JtYXRDb2x1bW5zKHRoaXMuaGVhZGVycywhMCkpfXJldHVybiB0aGlzLmZvcm1hdHRlck9wdGlvbnMuaW5jbHVkZUVuZFJvd0RlbGltaXRlciYm''@;'; put 'put ''ei5wdXNoKHRoaXMuZm9ybWF0dGVyT3B0aW9ucy5yb3dEZWxpbWl0ZXIpLFIobnVsbCx6KX1jaGVja0hlYWRlcnMoUil7aWYodGhpcy5oZWFkZXJzKXJldHVybntzaG91bGRGb3JtYXRDb2x1bW5zOiEwLGhlYWRlcnM6dGhpcy5oZWFkZXJzfTtjb25zdCB6PVAuZ2F0aGVySGVhZGVycyhSKTty''@;'; put 'put ''ZXR1cm4gdGhpcy5oZWFkZXJzPXosdGhpcy5maWVsZEZvcm1hdHRlci5oZWFkZXJzPXosdGhpcy5zaG91bGRXcml0ZUhlYWRlcnM/e3Nob3VsZEZvcm1hdENvbHVtbnM6IXAuZGVmYXVsdCh6LFIpLGhlYWRlcnM6en06e3Nob3VsZEZvcm1hdENvbHVtbnM6ITAsaGVhZGVyczpudWxsfX1nYXRo''@;'; put 'put ''ZXJDb2x1bW5zKFIpe2lmKG51bGw9PT10aGlzLmhlYWRlcnMpdGhyb3cgbmV3IEVycm9yKCJIZWFkZXJzIGlzIGN1cnJlbnRseSBudWxsIik7cmV0dXJuIEFycmF5LmlzQXJyYXkoUik/UC5pc1Jvd0hhc2hBcnJheShSKT90aGlzLmhlYWRlcnMubWFwKCh6LE4pPT57Y29uc3QgTz1SW05dO3Jl''@;'; put 'put ''dHVybiBPP09bMV06IiJ9KTpQLmlzUm93QXJyYXkoUikmJiF0aGlzLnNob3VsZFdyaXRlSGVhZGVycz9SOnRoaXMuaGVhZGVycy5tYXAoKHosTik9PlJbTl0pOnRoaXMuaGVhZGVycy5tYXAoej0+Ult6XSl9Y2FsbFRyYW5zZm9ybWVyKFIseil7cmV0dXJuIHRoaXMuX3Jvd1RyYW5zZm9ybT90''@;'; put 'put ''aGlzLl9yb3dUcmFuc2Zvcm0oUix6KTp6KG51bGwsUil9Zm9ybWF0Q29sdW1ucyhSLHope2NvbnN0IE49Ui5tYXAoKEssWik9PnRoaXMuZmllbGRGb3JtYXR0ZXIuZm9ybWF0KEssWix6KSkuam9pbih0aGlzLmZvcm1hdHRlck9wdGlvbnMuZGVsaW1pdGVyKSx7cm93Q291bnQ6T309dGhpczty''@;'; put 'put ''ZXR1cm4gdGhpcy5yb3dDb3VudCs9MSxPP1t0aGlzLmZvcm1hdHRlck9wdGlvbnMucm93RGVsaW1pdGVyLE5dLmpvaW4oIiIpOk59fVguUm93Rm9ybWF0dGVyPVB9LDk5NDc6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1''@;'; put 'put ''ZTohMH0pLFguRmllbGRGb3JtYXR0ZXI9WC5Sb3dGb3JtYXR0ZXI9dm9pZCAwO3ZhciBJPWIoNzE4MSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIlJvd0Zvcm1hdHRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuUm93Rm9ybWF0dGVyfX0pO3ZhciBfPWIoNTE4''@;'; put 'put ''Nik7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIkZpZWxkRm9ybWF0dGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gXy5GaWVsZEZvcm1hdHRlcn19KX0sNzIwMTpmdW5jdGlvbihjZSxYLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDg3NjQpLkJ1ZmZlcixfPXRoaXMm''@;'; put 'put ''JnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihaLFksVyxxKXt2b2lkIDA9PT1xJiYocT1XKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWixxLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBZW1ddfX0pfTpmdW5jdGlvbihaLFksVyxxKXt2''@;'; put 'put ''b2lkIDA9PT1xJiYocT1XKSxaW3FdPVlbV119KSxwPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihaLFkpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShaLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTpZfSl9OmZ1bmN0aW9uKFosWSl7''@;'; put 'put ''Wi5kZWZhdWx0PVl9KSxWPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihaKXtpZihaJiZaLl9fZXNNb2R1bGUpcmV0dXJuIFo7dmFyIFk9e307aWYobnVsbCE9Wilmb3IodmFyIFcgaW4gWikiZGVmYXVsdCIhPT1XJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNh''@;'; put 'put ''bGwoWixXKSYmXyhZLFosVyk7cmV0dXJuIHAoWSxaKSxZfSx3PXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihaLFkpe2Zvcih2YXIgVyBpbiBaKSJkZWZhdWx0IiE9PVcmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoWSxXKSYmXyhZLFosVyl9O09iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLndyaXRlVG9QYXRoPVgud3JpdGVUb1N0cmluZz1YLndyaXRlVG9CdWZmZXI9WC53cml0ZVRvU3RyZWFtPVgud3JpdGU9WC5mb3JtYXQ9WC5Gb3JtYXR0ZXJPcHRpb25zPVguQ3N2Rm9ybWF0dGVyU3RyZWFtPXZv''@;'; put 'put ''aWQgMDtjb25zdCBQPWIoOTUzOSksRj1iKDI4MzApLFI9VihiKDg2NDYpKSx6PWIoNjc2MyksTj1iKDMwNjIpO3coYig0NjkyKSxYKTt2YXIgTz1iKDMwNjIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJDc3ZGb3JtYXR0ZXJTdHJlYW0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBPLkNzdkZvcm1hdHRlclN0cmVhbX19KTt2YXIgSz1iKDY3NjMpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJGb3JtYXR0ZXJPcHRpb25zIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSy5Gb3JtYXR0ZXJPcHRpb25zfX0pLFguZm9ybWF0PVo9Pm5ldyBO''@;'; put 'put ''LkNzdkZvcm1hdHRlclN0cmVhbShuZXcgei5Gb3JtYXR0ZXJPcHRpb25zKFopKSxYLndyaXRlPShaLFkpPT57Y29uc3QgVz1YLmZvcm1hdChZKSxxPVAucHJvbWlzaWZ5KChlZSxKKT0+e1cud3JpdGUoZWUsdm9pZCAwLEopfSk7cmV0dXJuIFoucmVkdWNlKChlZSxKKT0+ZWUudGhlbigoKT0+''@;'; put 'put ''cShKKSksUHJvbWlzZS5yZXNvbHZlKCkpLnRoZW4oKCk9PlcuZW5kKCkpLmNhdGNoKGVlPT57Vy5lbWl0KCJlcnJvciIsZWUpfSksV30sWC53cml0ZVRvU3RyZWFtPShaLFksVyk9Plgud3JpdGUoWSxXKS5waXBlKFopLFgud3JpdGVUb0J1ZmZlcj0oWixZPXt9KT0+e2NvbnN0IFc9W10scT1u''@;'; put 'put ''ZXcgRi5Xcml0YWJsZSh7d3JpdGUoZWUsSixyZSl7Vy5wdXNoKGVlKSxyZSgpfX0pO3JldHVybiBuZXcgUHJvbWlzZSgoZWUsSik9PntxLm9uKCJlcnJvciIsSikub24oImZpbmlzaCIsKCk9PmVlKEkuY29uY2F0KFcpKSksWC53cml0ZShaLFkpLnBpcGUocSl9KX0sWC53cml0ZVRvU3RyaW5n''@;'; put 'put ''PShaLFkpPT5YLndyaXRlVG9CdWZmZXIoWixZKS50aGVuKFc9PlcudG9TdHJpbmcoKSksWC53cml0ZVRvUGF0aD0oWixZLFcpPT57Y29uc3QgcT1SLmNyZWF0ZVdyaXRlU3RyZWFtKFose2VuY29kaW5nOiJ1dGY4In0pO3JldHVybiBYLndyaXRlKFksVykucGlwZShxKX19LDQ2OTI6KGNlLFgp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmlzU3luY1RyYW5zZm9ybT12b2lkIDAsWC5pc1N5bmNUcmFuc2Zvcm09Yj0+MT09PWIubGVuZ3RofSwyNjU2OmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3QiO3ZhciBJ''@;'; put 'put ''PXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihSKXtyZXR1cm4gUiYmUi5fX2VzTW9kdWxlP1I6e2RlZmF1bHQ6Un19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmRlY29kZVRva2VuPVguaGFzVG9rZW5FeHBpcmVkPVguaXNS''@;'; put 'put ''ZWZyZXNoVG9rZW5FeHBpcmluZz1YLmlzQWNjZXNzVG9rZW5FeHBpcmluZz12b2lkIDA7Y29uc3QgXz1JKGIoNjI0NSkpO2Z1bmN0aW9uIFAoUix6KXtyZXR1cm4oMCxfLmRlZmF1bHQpKFIpLmV4cC0obmV3IERhdGUpLnZhbHVlT2YoKS8xZTM8PXp9WC5pc0FjY2Vzc1Rva2VuRXhwaXJpbmc9''@;'; put 'put ''ZnVuY3Rpb24gcChSLHo9MzYwMCl7cmV0dXJuIVJ8fFAoUix6KX0sWC5pc1JlZnJlc2hUb2tlbkV4cGlyaW5nPWZ1bmN0aW9uIFYoUix6PTMwKXtyZXR1cm4hUnx8UChSLHopfSxYLmhhc1Rva2VuRXhwaXJlZD1mdW5jdGlvbiB3KFIpe3JldHVybiFSfHxQKFIsMCl9LFguZGVjb2RlVG9rZW49''@;'; put 'put ''ZnVuY3Rpb24gRihSKXtsZXQgejt0cnl7ej0oMCxfLmRlZmF1bHQpKFIpfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiSW52YWxpZCB0b2tlbiBzdXBwbGllZC4iKX1yZXR1cm4gen19LDY3OTk6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJp''@;'; put 'put ''bmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHAsVix3LFApe3ZvaWQgMD09PVAmJihQPXcpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLFAse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFZbd119fSl9OmZ1bmN0aW9uKHAsVix3LFApe3ZvaWQgMD09PVAmJihQPXcp''@;'; put 'put ''LHBbUF09Vlt3XX0pLF89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKHAsVil7Zm9yKHZhciB3IGluIHApImRlZmF1bHQiIT09dyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWLHcpJiZJKFYscCx3KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9f''@;'; put 'put ''ZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8oYigyNjU2KSxYKX0sMzI1OTooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgucHJlZml4TWVzc2FnZT12b2lkIDAsWC5wcmVmaXhNZXNzYWdlPShJLF8pPT57aWYoIm9i''@;'; put 'put ''amVjdCI9PXR5cGVvZiBJKWlmKEkuaGFzT3duUHJvcGVydHkoIm1lc3NhZ2UiKSlJLm1lc3NhZ2U9XytJLm1lc3NhZ2U7ZWxzZXtpZighSS5oYXNPd25Qcm9wZXJ0eSgiYm9keSIpKXJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sSSkse21lc3NhZ2U6X30pO2lmKCJvYmpl''@;'; put 'put ''Y3QiPT10eXBlb2YgSS5ib2R5JiYoSS5tZXNzYWdlPUkuYm9keS5tZXNzYWdlP18rSS5ib2R5Lm1lc3NhZ2U6XyksInN0cmluZyI9PXR5cGVvZiBJLmJvZHkpe2xldCBwO3RyeXtwPUpTT04ucGFyc2UoSS5ib2R5KX1jYXRjaHtyZXR1cm4gSS5tZXNzYWdlPV8sSX1yZXR1cm4gcC5tZXNzYWdl''@;'; put 'put ''PXAubWVzc2FnZT9fK3AubWVzc2FnZTpfLEkuYm9keT1wLEl9fXJldHVybiJzdHJpbmciPT10eXBlb2YgSSYmKEk9XytJKSxJfX0sOTc3ODpmdW5jdGlvbihjZSxYLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rp''@;'; put 'put ''b24ocCxWLHcsUCl7dm9pZCAwPT09UCYmKFA9dyksT2JqZWN0LmRlZmluZVByb3BlcnR5KHAsUCx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVlt3XX19KX06ZnVuY3Rpb24ocCxWLHcsUCl7dm9pZCAwPT09UCYmKFA9dykscFtQXT1WW3ddfSksXz10aGlzJiZ0aGlzLl9f''@;'; put 'put ''ZXhwb3J0U3Rhcnx8ZnVuY3Rpb24ocCxWKXtmb3IodmFyIHcgaW4gcCkiZGVmYXVsdCIhPT13JiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFYsdykmJkkoVixwLHcpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksXyhiKDMy''@;'; put 'put ''NTkpLFgpLF8oYigxMDY0KSxYKX0sMTA2NDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5TZXJ2ZXJUeXBlRXJyb3I9dm9pZCAwO2NvbnN0IEk9YigzOTAwKTtjbGFzcyBfIGV4dGVuZHMgRXJyb3J7Y29u''@;'; put 'put ''c3RydWN0b3IoVj1bXSl7bGV0IHc9KFY9Wy4uLm5ldyBTZXQoVildKS5sZW5ndGg/Vi5qb2luKCIsICIpLnRyaW0oKTpbSS5TZXJ2ZXJUeXBlLlNhc1ZpeWEsSS5TZXJ2ZXJUeXBlLlNhczksSS5TZXJ2ZXJUeXBlLlNhc2pzXS5qb2luKCIsICIpLnRyaW0oKTt3PXcucmVwbGFjZSgvLFxzKFte''@;'; put 'put ''LF0qKSQvLCIgYW5kICQxIiksc3VwZXIoYEludmFsaWQgc2VydmVyIHR5cGU6IHZhbGlkIG9wdGlvbiR7MSE9PVYubGVuZ3RoPyJzIjoiIn0gJHsxIT09Vi5sZW5ndGg/ImFyZSI6ImlzIn0gJHt3fWApLHRoaXMubmFtZT0iU2VydmVyVHlwZUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2Yo''@;'; put 'put ''dGhpcyxfLnByb3RvdHlwZSl9fVguU2VydmVyVHlwZUVycm9yPV99LDM5MDY6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFIseixOLE8pe3JldHVybiBuZXcoTnx8KE49UHJvbWlzZSkpKGZ1bmN0aW9uKFosWSl7ZnVu''@;'; put 'put ''Y3Rpb24gVyhKKXt0cnl7ZWUoTy5uZXh0KEopKX1jYXRjaChyZSl7WShyZSl9fWZ1bmN0aW9uIHEoSil7dHJ5e2VlKE8udGhyb3coSikpfWNhdGNoKHJlKXtZKHJlKX19ZnVuY3Rpb24gZWUoSil7Si5kb25lP1ooSi52YWx1ZSk6ZnVuY3Rpb24gSyhaKXtyZXR1cm4gWiBpbnN0YW5jZW9mIE4/''@;'; put 'put ''WjpuZXcgTihmdW5jdGlvbihZKXtZKFopfSl9KEoudmFsdWUpLnRoZW4oVyxxKX1lZSgoTz1PLmFwcGx5KFIsenx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnVwZGF0ZUNzdj1YLmNyZWF0ZUNzdj1YLnJlYWRDc3Y9''@;'; put 'put ''dm9pZCAwO2NvbnN0IF89YigxNTU5KSxwPWIoNzIwMSk7WC5yZWFkQ3N2PVI9Pkkodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkKDAsXy5yZWFkRmlsZSkoUikpLnNwbGl0KCJcbiIpLmZpbHRlcihOPT5OLmxlbmd0aCkubWFwKE49Pk4uc3BsaXQoIiwiKSl9''@;'; put 'put ''KSxYLmNyZWF0ZUNzdj0oUix6LE4pPT5JKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IE89eWllbGQoMCxwLndyaXRlVG9TdHJpbmcpKHose2hlYWRlcnM6Tn0pO3lpZWxkKDAsXy5jcmVhdGVGaWxlKShSLE8pfSksWC51cGRhdGVDc3Y9KFIseixOLE8pPT5JKHZvaWQg''@;'; put 'put ''MCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEs9eWllbGQgRihSLHosTixPKTtpZihPKXtjb25zdCBaPTA9PT1LLmxlbmd0aD8xOksubGVuZ3RoLFk9Ti5maW5kSW5kZXgoVz0+Vz09PU8pO1k+LTE/ei5zcGxpY2UoWSwwLFopOihOLnNwbGljZSgwLDAsTyksei5zcGxpY2UoMCww''@;'; put 'put ''LFopKX1LLnB1c2goeikseWllbGQoMCxYLmNyZWF0ZUNzdikoUixLLE4pfSk7Y29uc3QgRj0oUix6LE4sTyk9Pkkodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoei5sZW5ndGghPT1OLmxlbmd0aCl7aWYoei5sZW5ndGg+Ti5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhIHJl''@;'; put 'put ''Y29yZCBjYW4gbm90IGhhdmUgbW9yZSBmaWVsZHMgdGhhbiBwcm92aWRlZCBjb2x1bW5zIik7aWYoIU98fHoubGVuZ3RoKzEhPT1OLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImEgcmVjb3JkIGNhbiBub3QgaGF2ZSBsZXNzIGZpZWxkcyB0aGFuIHByb3ZpZGVkIGNvbHVtbnMiKX1lbHNlIGlm''@;'; put 'put ''KE8mJk4uaW5jbHVkZXMoTykpdGhyb3cgbmV3IEVycm9yKCJhIHJlY29yZCBjYW4gbm90IGhhdmUgbW9yZSBmaWVsZHMgdGhhbiBwcm92aWRlZCBjb2x1bW5zIik7Y29uc3QgSz15aWVsZCgwLFgucmVhZENzdikoUikuY2F0Y2goWT0+W10pLFo9S1swXTtpZihaKXtpZihOLmxlbmd0aD5aLmxl''@;'; put 'put ''bmd0aCl0aHJvdyBuZXcgRXJyb3IoIm51bWJlciBvZiBwcm92aWRlZCBjb2x1bW5zIGFyZSBncmVhdGVyIHRoYW4gbnVtYmVyIG9mIGV4aXN0aW5nIGNvbHVtbnMiKTtpZihOLmxlbmd0aDxaLmxlbmd0aCl7aWYoIU98fE4ubGVuZ3RoKzEhPT1aLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIm51''@;'; put 'put ''bWJlciBvZiBwcm92aWRlZCBjb2x1bW5zIGFyZSBsZXNzIHRoYW4gbnVtYmVyIG9mIGV4aXN0aW5nIGNvbHVtbnMiKTtjb25zdCBZPVouZmluZEluZGV4KHE9PnE9PT1PKSxXPVsuLi5OXTtpZighKFk+LTEpKXRocm93IG5ldyBFcnJvcigicHJvdmlkZWQgY29sdW1ucyBkb2VzIG5vdCBtYXRj''@;'; put 'put ''aCBleGlzdGluZyBjb2x1bW5zIik7aWYoVy5zcGxpY2UoWSwwLE8pLEpTT04uc3RyaW5naWZ5KE4pIT09SlNPTi5zdHJpbmdpZnkoVykpdGhyb3cgbmV3IEVycm9yKCJwcm92aWRlZCBjb2x1bW5zIGRvZXMgbm90IG1hdGNoIGV4aXN0aW5nIGNvbHVtbnMiKX1lbHNle2lmKEpTT04uc3RyaW5n''@;'; put 'put ''aWZ5KE4pIT09SlNPTi5zdHJpbmdpZnkoWikpdGhyb3cgbmV3IEVycm9yKCJwcm92aWRlZCBjb2x1bW5zIGRvZXMgbm90IG1hdGNoIGV4aXN0aW5nIGNvbHVtbnMiKTtpZihPJiYhTi5pbmNsdWRlcyhPKSl0aHJvdyBuZXcgRXJyb3IoImNhbiBub3QgYWRkIG5ldyBpZCB0byBleGlzdGluZyBk''@;'; put 'put ''YXRhIil9fXJldHVybiBLfSl9LDE1NTk6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKG0sQSxhZSxuZSl7dm9pZCAwPT09bmUmJihuZT1hZSksT2JqZWN0LmRlZmluZVByb3BlcnR5''@;'; put 'put ''KG0sbmUse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEFbYWVdfX0pfTpmdW5jdGlvbihtLEEsYWUsbmUpe3ZvaWQgMD09PW5lJiYobmU9YWUpLG1bbmVdPUFbYWVdfSksXz10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24o''@;'; put 'put ''bSxBKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobSwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6QX0pfTpmdW5jdGlvbihtLEEpe20uZGVmYXVsdD1BfSkscD10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24obSl7aWYobSYmbS5fX2VzTW9kdWxlKXJldHVybiBtO3ZhciBB''@;'; put 'put ''PXt9O2lmKG51bGwhPW0pZm9yKHZhciBhZSBpbiBtKSJkZWZhdWx0IiE9PWFlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobSxhZSkmJkkoQSxtLGFlKTtyZXR1cm4gXyhBLG0pLEF9LFY9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKG0sQSxhZSxuZSl7cmV0''@;'; put 'put ''dXJuIG5ldyhhZXx8KGFlPVByb21pc2UpKShmdW5jdGlvbihDZSxVZSl7ZnVuY3Rpb24gSmUoeWUpe3RyeXt4ZShuZS5uZXh0KHllKSl9Y2F0Y2goS2Upe1VlKEtlKX19ZnVuY3Rpb24gaXQoeWUpe3RyeXt4ZShuZS50aHJvdyh5ZSkpfWNhdGNoKEtlKXtVZShLZSl9fWZ1bmN0aW9uIHhlKHll''@;'; put 'put ''KXt5ZS5kb25lP0NlKHllLnZhbHVlKTpmdW5jdGlvbiBzZShDZSl7cmV0dXJuIENlIGluc3RhbmNlb2YgYWU/Q2U6bmV3IGFlKGZ1bmN0aW9uKFVlKXtVZShDZSl9KX0oeWUudmFsdWUpLnRoZW4oSmUsaXQpfXhlKChuZT1uZS5hcHBseShtLEF8fFtdKSkubmV4dCgpKX0pfSx3PXRoaXMmJnRo''@;'; put 'put ''aXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihtKXtyZXR1cm4gbSYmbS5fX2VzTW9kdWxlP206e2RlZmF1bHQ6bX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmdldExpbmVFbmRpbmc9WC5pc1Rlc3RGaWxlPVgudGVzdEZpbGVSZWdFeHA9''@;'; put 'put ''WC5jcmVhdGVSZWFkU3RyZWFtPVguY3JlYXRlV3JpdGVTdHJlYW09WC5nZXRSZWFsUGF0aD1YLmJhc2U2NEVuY29kZUZpbGU9WC5iYXNlNjRFbmNvZGVJbWFnZUZpbGU9WC5wYXRoU2VwRXNjYXBlZD1YLmNvcHk9WC5tb3ZlRmlsZT1YLmdldFJlbGF0aXZlUGF0aD1YLnVuaWZ5RmlsZVBhdGg9''@;'; put 'put ''WC5kZWxldGVGb2xkZXI9WC5kZWxldGVGaWxlPVguY3JlYXRlRmlsZT1YLmNyZWF0ZUZvbGRlcj1YLmxpc3RGaWxlc0FuZFN1YkZvbGRlcnNJbkZvbGRlcj1YLmxpc3RTdWJGb2xkZXJzSW5Gb2xkZXI9WC5saXN0U2FzRmlsZXNJbkZvbGRlcj1YLmxpc3RJbmlGaWxlc0luRm9sZGVyPVgubGlz''@;'; put 'put ''dEZpbGVzSW5Gb2xkZXI9WC5yZWFkRmlsZUJpbmFyeT1YLnJlYWRGaWxlPVguaXNGb2xkZXI9WC5mb2xkZXJFeGlzdHM9WC5maWxlRXhpc3RzPXZvaWQgMDtjb25zdCBQPXcoYig1Njc0KSksRj13KGIoMjUyMCkpLFI9Yig2MjY2KSx6PXAoYigyOTc1KSksTj1iKDM5MDApO2Z1bmN0aW9uIEso''@;'; put 'put ''bSl7cmV0dXJuIFYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucHJvbWlzZXMuYWNjZXNzKG0sUC5kZWZhdWx0LmNvbnN0YW50cy5GX09LKS50aGVuKCgpPT4hMCkuY2F0Y2goKCk9PiExKX0pfWZ1bmN0aW9uIFcobSl7cmV0dXJuIFYodGhpcyx2b2lk''@;'; put 'put ''IDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucHJvbWlzZXMucmVhZEZpbGUobSl9KX1mdW5jdGlvbiBxKG0pe3JldHVybiBWKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnByb21pc2VzLnJlYWRkaXIobSx7d2l0aEZpbGVUeXBl''@;'; put 'put ''czohMH0pLnRoZW4oQT0+QS5maWx0ZXIoYWU9PiFhZS5pc0RpcmVjdG9yeSgpKS5tYXAoYWU9PmFlLm5hbWUpKX0pfWZ1bmN0aW9uIGllKG0sQT0hMCxhZT1bXSl7cmV0dXJuIFYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucHJvbWlzZXMucmVhZGRp''@;'; put 'put ''cihtLHt3aXRoRmlsZVR5cGVzOiEwfSkudGhlbihuZT0+Vih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoQSYmbmUuZmlsdGVyKENlPT5DZS5pc0RpcmVjdG9yeSgpKS5sZW5ndGgpe2xldCBDZT1bXTtyZXR1cm4geWllbGQoMCxSLmFzeW5jRm9yRWFjaCkobmUuZmlsdGVyKFVl''@;'; put 'put ''PT5VZS5pc0RpcmVjdG9yeSgpKSxVZT0+Vih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgSmU9VWUubmFtZTtpZighYWUuaW5jbHVkZXMoSmUpKXtjb25zdCBpdD1GLmRlZmF1bHQuam9pbihtLEplKTtDZT1bLi4uQ2UsLi4uKHlpZWxkIGllKGl0LEEsYWUpKS5tYXAoeGU9''@;'; put 'put ''PkYuZGVmYXVsdC5qb2luKEplLHhlKSldfX0pKSxbLi4ubmUuZmlsdGVyKFVlPT4hVWUuaXNEaXJlY3RvcnkoKSkubWFwKFVlPT5VZS5uYW1lKSwuLi5DZV19cmV0dXJuIG5lLm1hcChzZT0+c2UubmFtZSl9KSl9KX1mdW5jdGlvbiB1ZShtKXtyZXR1cm4gVih0aGlzLHZvaWQgMCx2b2lkIDAs''@;'; put 'put ''ZnVuY3Rpb24qKCl7cmV0dXJuIFAuZGVmYXVsdC5wcm9taXNlcy5ta2RpcihtLHtyZWN1cnNpdmU6ITB9KX0pfWZ1bmN0aW9uIE1lKG0sQT1GLmRlZmF1bHQuc2VwLGFlPSIvIil7Y29uc3QgbmU9e3VuaXg6Ii8iLHdpbjoiXFwifTtsZXQgc2U9T2JqZWN0LmtleXMobmUpLmZpbmQoQ2U9Pm5l''@;'; put 'put ''W0NlXT09PUEpO2lmKHNlKXtjb25zdCBDZT1uZVtPYmplY3Qua2V5cyhuZSkuZmluZChVZT0+VWUhPT1zZSldO3JldHVybiBzZT1uZVtzZV0sbS5zcGxpdChDZSkuam9pbihzZSl9cmV0dXJuIG0uc3BsaXQoYWUpLmpvaW4oQSl9WC5maWxlRXhpc3RzPWZ1bmN0aW9uIE8obSl7cmV0dXJuIFYo''@;'; put 'put ''dGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucHJvbWlzZXMuYWNjZXNzKG0sUC5kZWZhdWx0LmNvbnN0YW50cy5GX09LKS50aGVuKCgpPT4hMCkuY2F0Y2goKCk9PiExKX0pfSxYLmZvbGRlckV4aXN0cz1LLFguaXNGb2xkZXI9ZnVuY3Rpb24gWihtKXty''@;'; put 'put ''ZXR1cm4gVih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFAuZGVmYXVsdC5wcm9taXNlcy5sc3RhdChtKS50aGVuKEE9PkEuaXNEaXJlY3RvcnkoKSkuY2F0Y2goKCk9PiExKX0pfSxYLnJlYWRGaWxlPWZ1bmN0aW9uIFkobSxBPSJ1dGY4Iil7cmV0dXJuIFYodGhpcyx2''@;'; put 'put ''b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucHJvbWlzZXMucmVhZEZpbGUobSxBKX0pfSxYLnJlYWRGaWxlQmluYXJ5PVcsWC5saXN0RmlsZXNJbkZvbGRlcj1xLFgubGlzdEluaUZpbGVzSW5Gb2xkZXI9ZnVuY3Rpb24gZWUobSl7cmV0dXJuIFYodGhpcyx2b2lk''@;'; put 'put ''IDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCBxKG0pKS5maWx0ZXIoQT0+QS5lbmRzV2l0aCgiLmluaSIpKX0pfSxYLmxpc3RTYXNGaWxlc0luRm9sZGVyPWZ1bmN0aW9uIEoobSxBPSExLGFlPVtdKXtyZXR1cm4gVih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0''@;'; put 'put ''dXJuKHlpZWxkIGllKG0sQSxhZSkpLmZpbHRlcihDZT0+Q2UuZW5kc1dpdGgoIi5zYXMiKSl9KX0sWC5saXN0U3ViRm9sZGVyc0luRm9sZGVyPWZ1bmN0aW9uIHJlKG0pe3JldHVybiBWKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnByb21pc2VzLnJl''@;'; put 'put ''YWRkaXIobSx7d2l0aEZpbGVUeXBlczohMH0pLnRoZW4oQT0+QS5maWx0ZXIoYWU9PmFlLmlzRGlyZWN0b3J5KCkpLm1hcChhZT0+YWUubmFtZSkpfSl9LFgubGlzdEZpbGVzQW5kU3ViRm9sZGVyc0luRm9sZGVyPWllLFguY3JlYXRlRm9sZGVyPXVlLFguY3JlYXRlRmlsZT1mdW5jdGlvbiBn''@;'; put 'put ''ZShtLEEsYWUpe3JldHVybiBWKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZigobT1NZShtKSkuc3BsaXQoRi5kZWZhdWx0LnNlcCkubGVuZ3RoPjEpe2xldCBuZT1tLnNwbGl0KEYuZGVmYXVsdC5zZXApO25lLnBvcCgpO2NvbnN0IHNlPW5lLmpvaW4oRi5kZWZhdWx0LnNlcCk7''@;'; put 'put ''KHlpZWxkIEsoc2UpKXx8KHlpZWxkIHVlKHNlKSl9cmV0dXJuIFAuZGVmYXVsdC5wcm9taXNlcy53cml0ZUZpbGUobSxBLGFlKX0pfSxYLmRlbGV0ZUZpbGU9ZnVuY3Rpb24gX2UobSl7cmV0dXJuIFYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucmVt''@;'; put 'put ''b3ZlKG0pfSl9LFguZGVsZXRlRm9sZGVyPWZ1bmN0aW9uIFRlKG0pe3JldHVybiBWKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnJtKG0se3JlY3Vyc2l2ZTohMCxmb3JjZTohMH0pfSl9LFgudW5pZnlGaWxlUGF0aD1NZSxYLmdldFJlbGF0aXZlUGF0''@;'; put 'put ''aD1mdW5jdGlvbiBaZShtLEEpe2NvbnN0IGFlPW0uc3BsaXQoRi5kZWZhdWx0LnNlcCksbmU9QS5zcGxpdChGLmRlZmF1bHQuc2VwKTtsZXQgc2U9W10sQ2U9W107YWUuZm9yRWFjaCgoeWUsS2UpPT57dm9pZCAwIT09bmVbS2VdJiZhZVtLZV09PT1uZVtLZV0/c2UucHVzaCh5ZSk6eWUmJkNl''@;'; put 'put ''LnB1c2goeWUpfSk7Y29uc3QgVWU9c2Uuam9pbihGLmRlZmF1bHQuc2VwKSxKZT1uZXcgUmVnRXhwKGBeJHtGLmRlZmF1bHQuc2VwLnJlcGxhY2UoL1xcL2csIlxcXFwiKX1gKSxpdD1uZXcgUmVnRXhwKGAke0YuZGVmYXVsdC5zZXAucmVwbGFjZSgvXFwvZywiXFxcXCIpfSRgKTtyZXR1cm4o''@;'; put 'put ''Q2UubGVuZ3RoP2AuLiR7Ri5kZWZhdWx0LnNlcH1gLnJlcGVhdChDZS5sZW5ndGgpOmAuJHtGLmRlZmF1bHQuc2VwfWApK0EucmVwbGFjZShVZSwiIikucmVwbGFjZShKZSwiIikucmVwbGFjZShpdCwiIil9LFgubW92ZUZpbGU9ZnVuY3Rpb24gQihtLEEpe3JldHVybiBWKHRoaXMsdm9pZCAw''@;'; put 'put ''LHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnByb21pc2VzLnJlbmFtZShtLEEpfSl9LFguY29weT1mdW5jdGlvbiBnKG0sQSl7cmV0dXJuIFYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQuY29weShtLEEpfSl9LFgucGF0aFNlcEVz''@;'; put 'put ''Y2FwZWQ9Ri5kZWZhdWx0LnNlcC5yZXBsYWNlKC9cXC9nLCJcXFxcIiksWC5iYXNlNjRFbmNvZGVJbWFnZUZpbGU9ZnVuY3Rpb24geShtKXtyZXR1cm4gVih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFcobSkudGhlbihBPT57bGV0IGFlPUYuZGVmYXVsdC5leHRuYW1l''@;'; put 'put ''KG0pLnN1YnN0cigxKXx8InBuZyI7cmV0dXJuInN2ZyI9PT1hZSYmKGFlPSJzdmcreG1sIiksImRhdGE6aW1hZ2UvIithZSsiO2Jhc2U2NCwiK0EudG9TdHJpbmcoImJhc2U2NCIpfSl9KX0sWC5iYXNlNjRFbmNvZGVGaWxlPWZ1bmN0aW9uIHgobSl7cmV0dXJuIFYodGhpcyx2b2lkIDAsdm9p''@;'; put 'put ''ZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucHJvbWlzZXMucmVhZEZpbGUobSx7ZW5jb2Rpbmc6ImJhc2U2NCJ9KX0pfSxYLmdldFJlYWxQYXRoPWZ1bmN0aW9uIEMobSl7cmV0dXJuIFAuZGVmYXVsdC5yZWFscGF0aFN5bmMobSl9LFguY3JlYXRlV3JpdGVTdHJlYW09ZnVuY3Rp''@;'; put 'put ''b24gVChtKXtyZXR1cm4gVih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHouZmlsZUV4aXN0cyhtKSl8fCh5aWVsZCB6LmNyZWF0ZUZpbGUobSwiIikpLFAuZGVmYXVsdC5jcmVhdGVXcml0ZVN0cmVhbShtLHtmbGFnczoiYSJ9KX0pfSxYLmNyZWF0ZVJlYWRT''@;'; put 'put ''dHJlYW09bT0+Vih2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LmNyZWF0ZVJlYWRTdHJlYW0obSl9KSxYLnRlc3RGaWxlUmVnRXhwPS9cLnRlc3RcLihcZCtcLik/c2FzJC9pLFguaXNUZXN0RmlsZT1tPT5YLnRlc3RGaWxlUmVnRXhwLnRlc3QobSks''@;'; put 'put ''WC5nZXRMaW5lRW5kaW5nPW09Pm5ldyBSZWdFeHAoTi5MaW5lRW5kaW5ncy5DUkxGKS50ZXN0KG0pP04uTGluZUVuZGluZ3MuQ1JMRjpOLkxpbmVFbmRpbmdzLkxGfSw1NjI2OmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxm''@;'; put 'put ''dW5jdGlvbih3KXtyZXR1cm4gdyYmdy5fX2VzTW9kdWxlP3c6e2RlZmF1bHQ6d319O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmdldEFic29sdXRlUGF0aD12b2lkIDA7Y29uc3QgXz1JKGIoMjUyMCkpLHA9SShiKDc0MzUpKTtYLmdldEFic29s''@;'; put 'put ''dXRlUGF0aD0odyxQKT0+Xy5kZWZhdWx0LmlzQWJzb2x1dGUodyl8fC9efi8uZXhlYyh3KT9fLmRlZmF1bHQubm9ybWFsaXplKHcucmVwbGFjZSgvXn4vLHAuZGVmYXVsdC5ob21lZGlyKCkpKTpfLmRlZmF1bHQuam9pbihQLHcpfSwyOTc1OmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBJPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbih3LFAsRixSKXt2b2lkIDA9PT1SJiYoUj1GKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodyxSLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBQW0ZdfX0pfTpmdW5jdGlv''@;'; put 'put ''bih3LFAsRixSKXt2b2lkIDA9PT1SJiYoUj1GKSx3W1JdPVBbRl19KSxfPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbih3LFApe2Zvcih2YXIgRiBpbiB3KSJkZWZhdWx0IiE9PUYmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUCxGKSYmSShQLHcsRil9''@;'; put 'put ''O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnJlYWRDc3Y9WC5jcmVhdGVDc3Y9WC51cGRhdGVDc3Y9WC5nZXRMaW5lRW5kaW5nPVgudGVzdEZpbGVSZWdFeHA9WC5pc1Rlc3RGaWxlPVguZ2V0UmVhbFBhdGg9WC5iYXNlNjRFbmNvZGVGaWxlPVgu''@;'; put 'put ''YmFzZTY0RW5jb2RlSW1hZ2VGaWxlPVguY29weT1YLnBhdGhTZXBFc2NhcGVkPVgubW92ZUZpbGU9WC51bmlmeUZpbGVQYXRoPVguZ2V0UmVsYXRpdmVQYXRoPVguZGVsZXRlRm9sZGVyPVguZGVsZXRlRmlsZT1YLmNyZWF0ZVdyaXRlU3RyZWFtPVguY3JlYXRlUmVhZFN0cmVhbT1YLmNyZWF0''@;'; put 'put ''ZUZvbGRlcj1YLmNyZWF0ZUZpbGU9WC5saXN0RmlsZXNBbmRTdWJGb2xkZXJzSW5Gb2xkZXI9WC5saXN0U3ViRm9sZGVyc0luRm9sZGVyPVgubGlzdFNhc0ZpbGVzSW5Gb2xkZXI9WC5saXN0SW5pRmlsZXNJbkZvbGRlcj1YLmxpc3RGaWxlc0luRm9sZGVyPVgucmVhZEZpbGVCaW5hcnk9WC5y''@;'; put 'put ''ZWFkRmlsZT1YLmlzRm9sZGVyPVguZm9sZGVyRXhpc3RzPVguZmlsZUV4aXN0cz12b2lkIDA7dmFyIHA9YigxNTU5KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiZmlsZUV4aXN0cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuZmlsZUV4aXN0c319KSxPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkoWCwiZm9sZGVyRXhpc3RzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5mb2xkZXJFeGlzdHN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImlzRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5pc0Zv''@;'; put 'put ''bGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwicmVhZEZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLnJlYWRGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJyZWFkRmlsZUJpbmFyeSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHAucmVhZEZpbGVCaW5hcnl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImxpc3RGaWxlc0luRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5saXN0RmlsZXNJbkZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwibGlzdEluaUZp''@;'; put 'put ''bGVzSW5Gb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmxpc3RJbmlGaWxlc0luRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJsaXN0U2FzRmlsZXNJbkZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAubGlz''@;'; put 'put ''dFNhc0ZpbGVzSW5Gb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImxpc3RTdWJGb2xkZXJzSW5Gb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmxpc3RTdWJGb2xkZXJzSW5Gb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImxpc3RG''@;'; put 'put ''aWxlc0FuZFN1YkZvbGRlcnNJbkZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAubGlzdEZpbGVzQW5kU3ViRm9sZGVyc0luRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJjcmVhdGVGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gcC5jcmVhdGVGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJjcmVhdGVGb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmNyZWF0ZUZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiY3JlYXRlUmVhZFN0cmVhbSIse2Vu''@;'; put 'put ''dW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuY3JlYXRlUmVhZFN0cmVhbX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiY3JlYXRlV3JpdGVTdHJlYW0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmNyZWF0ZVdyaXRlU3RyZWFtfX0pLE9iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShYLCJkZWxldGVGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5kZWxldGVGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJkZWxldGVGb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmRl''@;'; put 'put ''bGV0ZUZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiZ2V0UmVsYXRpdmVQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5nZXRSZWxhdGl2ZVBhdGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsInVuaWZ5RmlsZVBhdGgiLHtlbnVtZXJhYmxl''@;'; put 'put ''OiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLnVuaWZ5RmlsZVBhdGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIm1vdmVGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5tb3ZlRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwicGF0aFNlcEVz''@;'; put 'put ''Y2FwZWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLnBhdGhTZXBFc2NhcGVkfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJjb3B5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5jb3B5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShY''@;'; put 'put ''LCJiYXNlNjRFbmNvZGVJbWFnZUZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmJhc2U2NEVuY29kZUltYWdlRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiYmFzZTY0RW5jb2RlRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIHAuYmFzZTY0RW5jb2RlRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiZ2V0UmVhbFBhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmdldFJlYWxQYXRofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJpc1Rlc3RGaWxlIix7ZW51bWVyYWJs''@;'; put 'put ''ZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5pc1Rlc3RGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJ0ZXN0RmlsZVJlZ0V4cCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAudGVzdEZpbGVSZWdFeHB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgs''@;'; put 'put ''ImdldExpbmVFbmRpbmciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmdldExpbmVFbmRpbmd9fSk7dmFyIFY9YigzOTA2KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwidXBkYXRlQ3N2Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVi51cGRh''@;'; put 'put ''dGVDc3Z9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImNyZWF0ZUNzdiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFYuY3JlYXRlQ3N2fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJyZWFkQ3N2Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gVi5yZWFkQ3N2fX0pLF8oYig1NjI2KSxYKX0sMjc3NzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5uZXdMaW5lPVguY2FwaXRhbGl6ZUZpcnN0Q2hhcj1YLnNhbml0aXplU3BlY2lhbENoYXJzPVgu''@;'; put 'put ''cGFkV2l0aE51bWJlcj12b2lkIDA7dmFyIEk9Yig1MzA2KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwicGFkV2l0aE51bWJlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkucGFkV2l0aE51bWJlcn19KTt2YXIgXz1iKDkyNzUpO09iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShYLCJzYW5pdGl6ZVNwZWNpYWxDaGFycyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF8uc2FuaXRpemVTcGVjaWFsQ2hhcnN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImNhcGl0YWxpemVGaXJzdENoYXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBfLmNhcGl0YWxpemVGaXJzdENoYXJ9fSk7dmFyIHA9YigxNjI4KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwibmV3TGluZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAubmV3TGluZX19KX0sNTMwNjooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgucGFkV2l0aE51bWJlcj12b2lkIDAsWC5wYWRXaXRoTnVtYmVyPShJLF89MCk9Pkk+OT9JOmAke199JHtJfWB9LDE2Mjg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0MTU1KTtPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5uZXdMaW5lPXZvaWQgMCxYLm5ld0xpbmU9KCk9PiJ3aW4zMiI9PT1JLnBsYXRmb3JtPyJcXHJcXG4iOiJcXG4ifSw5Mjc1OihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVs''@;'; put 'put ''ZSIse3ZhbHVlOiEwfSksWC5jYXBpdGFsaXplRmlyc3RDaGFyPVguc2FuaXRpemVTcGVjaWFsQ2hhcnM9dm9pZCAwLFguc2FuaXRpemVTcGVjaWFsQ2hhcnM9Xz0+Xy5yZXBsYWNlKC9bXHUwMDFiXHUwMDliXVtbKCkjOz9dKig/OlswLTldezEsNH0oPzo7WzAtOV17MCw0fSkqKT9bMC05QS1P''@;'; put 'put ''UlpjZi1ucXJ5PT48XS9nLCIiKSxYLmNhcGl0YWxpemVGaXJzdENoYXI9Xz0+Xy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStfLnNsaWNlKDEpfSw2NDY3OmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihGKXty''@;'; put 'put ''ZXR1cm4gRiYmRi5fX2VzTW9kdWxlP0Y6e2RlZmF1bHQ6Rn19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmlzU3BlY2lhbE1pc3Npbmc9WC5jaG9pY2VWYWxpZGF0b3I9WC5jb25maXJtYXRpb25WYWxpZGF0b3I9WC51cmxWYWxpZGF0b3I9dm9p''@;'; put 'put ''ZCAwO2NvbnN0IF89SShiKDQ4MSkpO1gudXJsVmFsaWRhdG9yPShGLFIpPT4hIV8uZGVmYXVsdC5pc0h0dHBVcmkoRil8fCEhXy5kZWZhdWx0LmlzSHR0cHNVcmkoRil8fCIiPT09Rnx8UixYLmNvbmZpcm1hdGlvblZhbGlkYXRvcj1GPT4hMD09PUZ8fCExPT09RixYLmNob2ljZVZhbGlkYXRv''@;'; put 'put ''cj0oRixSLHopPT5GPjAmJkY8PVJ8fHosWC5pc1NwZWNpYWxNaXNzaW5nPUY9Pigic3RyaW5nIiE9dHlwZW9mIEZ8fCFGLmluY2x1ZGVzKCIuLiIpKSYmbmV3IFJlZ0V4cCgiXihcXC4pP1thLXpfLl17MX0kIiwiaSIpLnRlc3QoRil9LDc3NTc6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7T2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2VuZXJhdGVUaW1lc3RhbXA9WC50aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTPVguY29udmVydFNlY29uZHNUb0htcz12b2lkIDA7dmFyIEk9YigxMzAyKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiY29u''@;'; put 'put ''dmVydFNlY29uZHNUb0htcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuY29udmVydFNlY29uZHNUb0htc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwidGltZXN0YW1wVG9ZWVlZTU1EREhITU1TUyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIEkudGltZXN0YW1wVG9ZWVlZTU1EREhITU1TU319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiZ2VuZXJhdGVUaW1lc3RhbXAiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmdlbmVyYXRlVGltZXN0YW1wfX0pfSwxMzAyOihjZSxYLGIpPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmNvbnZlcnRTZWNvbmRzVG9IbXM9WC5nZW5lcmF0ZVRpbWVzdGFtcD1YLnRpbWVzdGFtcFRvWVlZWU1NRERISE1NU1M9dm9pZCAwO2NvbnN0IEk9YigyNzc3KTtYLnRpbWVzdGFtcFRvWVlZWU1N''@;'; put 'put ''RERISE1NU1M9KHc9RGF0ZS5ub3coKSk9Pntjb25zdCBQPW5ldyBEYXRlKHcpO3JldHVybltQLmdldEZ1bGxZZWFyKCksKDAsSS5wYWRXaXRoTnVtYmVyKShQLmdldE1vbnRoKCkrMSksKDAsSS5wYWRXaXRoTnVtYmVyKShQLmdldERhdGUoKSldLmpvaW4oIi8iKSsiICIrWygwLEkucGFkV2l0''@;'; put 'put ''aE51bWJlcikoUC5nZXRIb3VycygpKSwoMCxJLnBhZFdpdGhOdW1iZXIpKFAuZ2V0TWludXRlcygpKSwoMCxJLnBhZFdpdGhOdW1iZXIpKFAuZ2V0U2Vjb25kcygpKV0uam9pbigiOiIpfSxYLmdlbmVyYXRlVGltZXN0YW1wPSh3PSIiLFApPT57Y29uc3QgRj1uZXcgRGF0ZTtsZXQgUj1bRi5n''@;'; put 'put ''ZXRVVENGdWxsWWVhcigpLEYuZ2V0VVRDTW9udGgoKSsxLEYuZ2V0VVRDRGF0ZSgpLEYuZ2V0VVRDSG91cnMoKSxGLmdldFVUQ01pbnV0ZXMoKSxGLmdldFVUQ1NlY29uZHMoKV07cmV0dXJuIFI9Ui5tYXAoej0+KDAsSS5wYWRXaXRoTnVtYmVyKSh6KSksUCYmdyYmUDxSLmxlbmd0aCYmUD49''@;'; put 'put ''MCYmUi5zcGxpY2UoUCwwLHcpLFI9Ui5qb2luKFA/IiI6dyksUn0sWC5jb252ZXJ0U2Vjb25kc1RvSG1zPXc9PntpZighdylyZXR1cm4iMCBzZWNvbmQiO2NvbnN0IFA9TWF0aC5mbG9vcih3LzYwKSxGPU1hdGguZmxvb3IoUC82MCksUj1QJTYwLHo9dyU2MDtsZXQgTj0iIjtyZXR1cm4gRj4w''@;'; put 'put ''JiYoTj1GKyIgaG91ciIrKEY+MT8icyI6IiIpKSxSPjAmJihOKz1gJHtOPyIsICI6IiJ9JHtSfSBtaW51dGUke1I+MT8icyI6IiJ9YCksej4wJiYoTis9YCR7Tj8iLCAiOiIifSR7en0gc2Vjb25kJHt6PjE/InMiOiIifWApLE59fSw4MjM5OihjZSxYKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSTtP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5Db25maWdUeXBlcz12b2lkIDAsKEk9WC5Db25maWdUeXBlc3x8KFguQ29uZmlnVHlwZXM9e30pKS5CdWlsZD0iYnVpbGRDb25maWciLEkuU2VydmljZT0ic2VydmljZUNvbmZpZyIsSS5Kb2I9ImpvYkNv''@;'; put 'put ''bmZpZyIsSS5UZXN0PSJ0ZXN0Q29uZmlnIixJLkRvYz0iZG9jQ29uZmlnIixJLkRlcGxveT0iZGVwbG95Q29uZmlnIixJLlN0cmVhbT0ic3RyZWFtQ29uZmlnIixJLkF1dGg9ImF1dGhDb25maWcifSwyNDI3OihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwi''@;'; put 'put ''X19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDE4OTooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwzNjkyOihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIs''@;'; put 'put ''e3ZhbHVlOiEwfSl9LDQ3Mjk6KGNlLFgpPT57InVzZSBzdHJpY3QiO3ZhciBJO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkxpbmVFbmRpbmdzPXZvaWQgMCwoST1YLkxpbmVFbmRpbmdzfHwoWC5MaW5lRW5kaW5ncz17fSkpLkNSTEY9IlxyXG4i''@;'; put 'put ''LEkuTEY9IlxuIn0sNjkzOTooY2UsWCk9PnsidXNlIHN0cmljdCI7dmFyIEk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguTWVtYmVyVHlwZT12b2lkIDAsKEk9WC5NZW1iZXJUeXBlfHwoWC5NZW1iZXJUeXBlPXt9KSkuc2VydmljZT0ic2Vydmlj''@;'; put 'put ''ZSIsSS5maWxlPSJmaWxlIixJLmZvbGRlcj0iZm9sZGVyIn0sMzMyNzooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw1MTY1OihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwi''@;'; put 'put ''X19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDM5MDA6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHAsVix3LFApe3ZvaWQgMD09PVAmJihQPXcpLE9iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShwLFAse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFZbd119fSl9OmZ1bmN0aW9uKHAsVix3LFApe3ZvaWQgMD09PVAmJihQPXcpLHBbUF09Vlt3XX0pLF89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKHAsVil7Zm9yKHZhciB3IGluIHApImRlZmF1bHQi''@;'; put 'put ''IT09dyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWLHcpJiZJKFYscCx3KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8oYig4MjM5KSxYKSxfKGIoMjQyNyksWCksXyhiKDE4OSksWCksXyhiKDM2OTIpLFgpLF8oYig2''@;'; put 'put ''OTM5KSxYKSxfKGIoMzMyNyksWCksXyhiKDUxNjUpLFgpLF8oYig0MDY5KSxYKSxfKGIoODkzMiksWCksXyhiKDQpLFgpLF8oYigyMDE1KSxYKSxfKGIoODUxNSksWCksXyhiKDUzMTMpLFgpLF8oYig4OTc5KSxYKSxfKGIoNDcyOSksWCl9LDQwNjk6KGNlLFgpPT57InVzZSBzdHJpY3QiO09i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmlzTWFjcm9WYXJzPXZvaWQgMCxYLmlzTWFjcm9WYXJzPUk9PkkmJiJvYmplY3QiPT10eXBlb2YgSS5tYWNyb1ZhcnMmJiFBcnJheS5pc0FycmF5KEkubWFjcm9WYXJzKX0sODkzMjooY2UsWCk9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw0OihjZSxYKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5TQVNKc0ZpbGVUeXBlPXZvaWQgMCwoST1Y''@;'; put 'put ''LlNBU0pzRmlsZVR5cGV8fChYLlNBU0pzRmlsZVR5cGU9e30pKS5zZXJ2aWNlPSJTZXJ2aWNlIixJLmpvYj0iSm9iIixJLnRlc3Q9IlRlc3QiLEkuZmlsZT0iRmlsZSJ9LDIwMTU6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFs''@;'; put 'put ''dWU6ITB9KX0sODUxNTooY2UsWCk9PnsidXNlIHN0cmljdCI7dmFyIEk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguU2VydmVyVHlwZT12b2lkIDAsKEk9WC5TZXJ2ZXJUeXBlfHwoWC5TZXJ2ZXJUeXBlPXt9KSkuU2FzVml5YT0iU0FTVklZQSIs''@;'; put 'put ''SS5TYXM5PSJTQVM5IixJLlNhc2pzPSJTQVNKUyJ9LDUzMTM6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sODk3OTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19l''@;'; put 'put ''c01vZHVsZSIse3ZhbHVlOiEwfSksWC5UYXJnZXQ9dm9pZCAwO2NvbnN0IEk9Yig4MjM5KSxfPWIoODUxNSkscD1iKDY3ODEpO1guVGFyZ2V0PWNsYXNzIFZ7Y29uc3RydWN0b3IoUCxGPXt9KXt0aGlzLl9zZXJ2ZXJUeXBlPV8uU2VydmVyVHlwZS5TYXNWaXlhLHRoaXMuZ2V0Q29uZmlnPShS''@;'; put 'put ''LHopPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5fY29uZmlnW1JdfHx7fSkseltSXSk7dHJ5e2lmKCFQKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0YXJnZXQ6IElucHV0IEpTT04gaXMgbnVsbCBvciB1bmRlZmluZWQuIik7dGhpcy5fY29uZmlnPUYsdGhpcy5fbmFt''@;'; put 'put ''ZT0oMCxwLnZhbGlkYXRlVGFyZ2V0TmFtZSkoUC5uYW1lKSx0aGlzLl9zZXJ2ZXJVcmw9KDAscC52YWxpZGF0ZVNlcnZlclVybCkoUC5zZXJ2ZXJVcmwpLHRoaXMuX3NlcnZlclR5cGU9KDAscC52YWxpZGF0ZVNlcnZlclR5cGUpKFAuc2VydmVyVHlwZSksdGhpcy5faHR0cHNBZ2VudE9wdGlv''@;'; put 'put ''bnM9KDAscC52YWxpZGF0ZUh0dHBzQWdlbnRPcHRpb25zKShQLmh0dHBzQWdlbnRPcHRpb25zKSx0aGlzLl9hcHBMb2M9KDAscC52YWxpZGF0ZUFwcExvYykoUC5hcHBMb2MpLHRoaXMuX2NvbnRleHROYW1lPSgwLHAudmFsaWRhdGVDb250ZXh0TmFtZSkoUC5jb250ZXh0TmFtZSx0aGlzLl9z''@;'; put 'put ''ZXJ2ZXJUeXBlKSx0aGlzLl9zZXJ2ZXJOYW1lPSgwLHAudmFsaWRhdGVTZXJ2ZXJOYW1lKShQLnNlcnZlck5hbWUsdGhpcy5fc2VydmVyVHlwZSksdGhpcy5fc3luY0ZvbGRlcj0oMCxwLnZhbGlkYXRlU3luY0ZvbGRlcikoUC5zeW5jRm9sZGVyKSx0aGlzLl9yZXBvc2l0b3J5TmFtZT0oMCxw''@;'; put 'put ''LnZhbGlkYXRlUmVwb3NpdG9yeU5hbWUpKFAucmVwb3NpdG9yeU5hbWUsdGhpcy5fc2VydmVyVHlwZSksUC5kb2NDb25maWcmJih0aGlzLl9kb2NDb25maWc9KDAscC52YWxpZGF0ZURvY0NvbmZpZykodGhpcy5nZXRDb25maWcoSS5Db25maWdUeXBlcy5Eb2MsUCkpKSxQLmF1dGhDb25maWcm''@;'; put 'put ''Jih0aGlzLl9hdXRoQ29uZmlnPSgwLHAudmFsaWRhdGVBdXRoQ29uZmlnKSh0aGlzLmdldENvbmZpZyhJLkNvbmZpZ1R5cGVzLkF1dGgsUCkpKSxQLmF1dGhDb25maWdTYXM5JiYodGhpcy5fYXV0aENvbmZpZ1Nhczk9KDAscC52YWxpZGF0ZUF1dGhDb25maWdTYXM5KShQLmF1dGhDb25maWdT''@;'; put 'put ''YXM5KSksUC5idWlsZENvbmZpZyYmKHRoaXMuX2J1aWxkQ29uZmlnPSgwLHAudmFsaWRhdGVCdWlsZENvbmZpZykodGhpcy5nZXRDb25maWcoSS5Db25maWdUeXBlcy5CdWlsZCxQKSx0aGlzLl9uYW1lKSksdGhpcy5fZGVwbG95Q29uZmlnPSgwLHAudmFsaWRhdGVEZXBsb3lDb25maWcpKFAu''@;'; put 'put ''ZGVwbG95Q29uZmlnP3RoaXMuZ2V0Q29uZmlnKEkuQ29uZmlnVHlwZXMuRGVwbG95LFApOntkZXBsb3lTZXJ2aWNlUGFjazohMCxkZXBsb3lTY3JpcHRzOltdfSksUC5zZXJ2aWNlQ29uZmlnJiYodGhpcy5fc2VydmljZUNvbmZpZz0oMCxwLnZhbGlkYXRlU2VydmljZUNvbmZpZykodGhpcy5n''@;'; put 'put ''ZXRDb25maWcoSS5Db25maWdUeXBlcy5TZXJ2aWNlLFApKSksUC5qb2JDb25maWcmJih0aGlzLl9qb2JDb25maWc9KDAscC52YWxpZGF0ZUpvYkNvbmZpZykodGhpcy5nZXRDb25maWcoSS5Db25maWdUeXBlcy5Kb2IsUCkpKSxQLnN0cmVhbUNvbmZpZyYmKHRoaXMuX3N0cmVhbUNvbmZpZz0o''@;'; put 'put ''MCxwLnZhbGlkYXRlU3RyZWFtQ29uZmlnKSh0aGlzLmdldENvbmZpZyhJLkNvbmZpZ1R5cGVzLlN0cmVhbSxQKSkpLFAudGVzdENvbmZpZyYmKHRoaXMuX3Rlc3RDb25maWc9KDAscC52YWxpZGF0ZVRlc3RDb25maWcpKHRoaXMuZ2V0Q29uZmlnKEkuQ29uZmlnVHlwZXMuVGVzdCxQKSkpLFAu''@;'; put 'put ''bWFjcm9Gb2xkZXJzJiZQLm1hY3JvRm9sZGVycy5sZW5ndGgmJih0aGlzLl9tYWNyb0ZvbGRlcnM9UC5tYWNyb0ZvbGRlcnMpLFAucHJvZ3JhbUZvbGRlcnMmJlAucHJvZ3JhbUZvbGRlcnMubGVuZ3RoJiYodGhpcy5fcHJvZ3JhbUZvbGRlcnM9UC5wcm9ncmFtRm9sZGVycyksUC5iaW5hcnlG''@;'; put 'put ''b2xkZXJzJiZQLmJpbmFyeUZvbGRlcnMubGVuZ3RoJiYodGhpcy5fYmluYXJ5Rm9sZGVycz1QLmJpbmFyeUZvbGRlcnMpLFAuc3luY0RpcmVjdG9yaWVzJiZQLnN5bmNEaXJlY3Rvcmllcy5sZW5ndGgmJih0aGlzLl9zeW5jRGlyZWN0b3JpZXM9KDAscC52YWxpZGF0ZVN5bmNEaXJlY3Rvcmll''@;'; put 'put ''cykoUC5zeW5jRGlyZWN0b3JpZXMpKSxQLnNhc2pzQnVpbGRGb2xkZXImJih0aGlzLl9zYXNqc0J1aWxkRm9sZGVyPSgwLHAudmFsaWRhdGVTYXNqc0J1aWxkRm9sZGVyKShQLnNhc2pzQnVpbGRGb2xkZXIpKSxQLnNhc2pzUmVzdWx0c0ZvbGRlciYmKHRoaXMuX3Nhc2pzUmVzdWx0c0ZvbGRl''@;'; put 'put ''cj0oMCxwLnZhbGlkYXRlU2FzanNSZXN1bHRzRm9sZGVyKShQLnNhc2pzUmVzdWx0c0ZvbGRlcikpfWNhdGNoKFIpe3Rocm93IG5ldyBFcnJvcihgRXJyb3IgcGFyc2luZyB0YXJnZXQ6ICR7Ui5tZXNzYWdlfWApfX1nZXQgbmFtZSgpe3JldHVybiB0aGlzLl9uYW1lfWdldCBzZXJ2ZXJVcmwo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fc2VydmVyVXJsfWdldCBzZXJ2ZXJUeXBlKCl7cmV0dXJuIHRoaXMuX3NlcnZlclR5cGV9Z2V0IGh0dHBzQWdlbnRPcHRpb25zKCl7cmV0dXJuIHRoaXMuX2h0dHBzQWdlbnRPcHRpb25zfWdldCBhcHBMb2MoKXtyZXR1cm4gdGhpcy5fYXBwTG9jfWdldCBkb2NDb25m''@;'; put 'put ''aWcoKXtyZXR1cm4gdGhpcy5fZG9jQ29uZmlnfWdldCBhdXRoQ29uZmlnKCl7cmV0dXJuIHRoaXMuX2F1dGhDb25maWd9Z2V0IGF1dGhDb25maWdTYXM5KCl7cmV0dXJuIHRoaXMuX2F1dGhDb25maWdTYXM5fWdldCBidWlsZENvbmZpZygpe3JldHVybiB0aGlzLl9idWlsZENvbmZpZ31nZXQg''@;'; put 'put ''ZGVwbG95Q29uZmlnKCl7cmV0dXJuIHRoaXMuX2RlcGxveUNvbmZpZ31nZXQgc2VydmljZUNvbmZpZygpe3JldHVybiB0aGlzLl9zZXJ2aWNlQ29uZmlnfWdldCBqb2JDb25maWcoKXtyZXR1cm4gdGhpcy5fam9iQ29uZmlnfWdldCBzdHJlYW1Db25maWcoKXtyZXR1cm4gdGhpcy5fc3RyZWFt''@;'; put 'put ''Q29uZmlnfWdldCBtYWNyb0ZvbGRlcnMoKXtyZXR1cm4gdGhpcy5fbWFjcm9Gb2xkZXJzfWdldCBwcm9ncmFtRm9sZGVycygpe3JldHVybiB0aGlzLl9wcm9ncmFtRm9sZGVyc31nZXQgYmluYXJ5Rm9sZGVycygpe3JldHVybiB0aGlzLl9iaW5hcnlGb2xkZXJzfWdldCBjb250ZXh0TmFtZSgp''@;'; put 'put ''e3JldHVybiB0aGlzLl9jb250ZXh0TmFtZX1nZXQgc2VydmVyTmFtZSgpe3JldHVybiB0aGlzLl9zZXJ2ZXJOYW1lfWdldCByZXBvc2l0b3J5TmFtZSgpe3JldHVybiB0aGlzLl9yZXBvc2l0b3J5TmFtZX1nZXQgdGVzdENvbmZpZygpe3JldHVybiB0aGlzLl90ZXN0Q29uZmlnfWdldCBzeW5j''@;'; put 'put ''Rm9sZGVyKCl7cmV0dXJuIHRoaXMuX3N5bmNGb2xkZXJ9Z2V0IHN5bmNEaXJlY3Rvcmllcygpe3JldHVybiB0aGlzLl9zeW5jRGlyZWN0b3JpZXN9Z2V0IHNhc2pzQnVpbGRGb2xkZXIoKXtyZXR1cm4gdGhpcy5fc2FzanNCdWlsZEZvbGRlcn1nZXQgc2FzanNSZXN1bHRzRm9sZGVyKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuX3Nhc2pzUmVzdWx0c0ZvbGRlcn10b0pzb24oUD0hMCl7dmFyIEYsUix6O2NvbnN0IE49e25hbWU6dGhpcy5uYW1lLHNlcnZlclVybDp0aGlzLnNlcnZlclVybCxzZXJ2ZXJUeXBlOnRoaXMuc2VydmVyVHlwZSxodHRwc0FnZW50T3B0aW9uczp0aGlzLmh0dHBzQWdlbnRPcHRp''@;'; put 'put ''b25zLGFwcExvYzp0aGlzLmFwcExvYyxkb2NDb25maWc6dGhpcy5kb2NDb25maWcsZGVwbG95Q29uZmlnOnRoaXMuZGVwbG95Q29uZmlnfTtyZXR1cm4hKG51bGw9PT0oRj10aGlzLm1hY3JvRm9sZGVycyl8fHZvaWQgMD09PUYpJiZGLmxlbmd0aCYmKE4ubWFjcm9Gb2xkZXJzPXRoaXMubWFj''@;'; put 'put ''cm9Gb2xkZXJzKSwhKG51bGw9PT0oUj10aGlzLnByb2dyYW1Gb2xkZXJzKXx8dm9pZCAwPT09UikmJlIubGVuZ3RoJiYoTi5wcm9ncmFtRm9sZGVycz10aGlzLnByb2dyYW1Gb2xkZXJzKSwhKG51bGw9PT0oej10aGlzLmJpbmFyeUZvbGRlcnMpfHx2b2lkIDA9PT16KSYmei5sZW5ndGgmJihO''@;'; put 'put ''LmJpbmFyeUZvbGRlcnM9dGhpcy5iaW5hcnlGb2xkZXJzKSx0aGlzLmF1dGhDb25maWcmJihOLmF1dGhDb25maWc9dGhpcy5hdXRoQ29uZmlnKSx0aGlzLmF1dGhDb25maWdTYXM5JiYoTi5hdXRoQ29uZmlnU2FzOT10aGlzLmF1dGhDb25maWdTYXM5KSx0aGlzLnNhc2pzQnVpbGRGb2xkZXI/''@;'; put 'put ''Ti5zYXNqc0J1aWxkRm9sZGVyPXRoaXMuc2FzanNCdWlsZEZvbGRlcjpQJiYoTi5zYXNqc0J1aWxkRm9sZGVyPXAuREVGQVVMVF9TQVNKU19CVUlMRF9GT0xERVIpLHRoaXMuc2FzanNSZXN1bHRzRm9sZGVyP04uc2FzanNSZXN1bHRzRm9sZGVyPXRoaXMuc2FzanNSZXN1bHRzRm9sZGVyOlAm''@;'; put 'put ''JihOLnNhc2pzUmVzdWx0c0ZvbGRlcj1wLkRFRkFVTFRfU0FTSlNfUkVTVUxUU19GT0xERVIpLHRoaXMuc3luY0RpcmVjdG9yaWVzP04uc3luY0RpcmVjdG9yaWVzPXRoaXMuc3luY0RpcmVjdG9yaWVzOlAmJihOLnN5bmNEaXJlY3Rvcmllcz1bXSksdGhpcy5idWlsZENvbmZpZz9OLmJ1aWxk''@;'; put 'put ''Q29uZmlnPXRoaXMuYnVpbGRDb25maWc6UCYmKE4uYnVpbGRDb25maWc9e2luaXRQcm9ncmFtOiIiLHRlcm1Qcm9ncmFtOiIiLGJ1aWxkT3V0cHV0RmlsZU5hbWU6YCR7dGhpcy5uYW1lfS5zYXNgLG1hY3JvVmFyczp7fX0pLHRoaXMuam9iQ29uZmlnP04uam9iQ29uZmlnPXRoaXMuam9iQ29u''@;'; put 'put ''ZmlnOlAmJihOLmpvYkNvbmZpZz17am9iRm9sZGVyczpbXSxpbml0UHJvZ3JhbToiIix0ZXJtUHJvZ3JhbToiIixtYWNyb1ZhcnM6e319KSx0aGlzLnNlcnZpY2VDb25maWc/Ti5zZXJ2aWNlQ29uZmlnPXRoaXMuc2VydmljZUNvbmZpZzpQJiYoTi5zZXJ2aWNlQ29uZmlnPXtzZXJ2aWNlRm9s''@;'; put 'put ''ZGVyczpbXSxpbml0UHJvZ3JhbToiIix0ZXJtUHJvZ3JhbToiIixtYWNyb1ZhcnM6e319KSx0aGlzLnN0cmVhbUNvbmZpZz9OLnN0cmVhbUNvbmZpZz10aGlzLnN0cmVhbUNvbmZpZzpQJiYoTi5zdHJlYW1Db25maWc9e3N0cmVhbVdlYkZvbGRlcjoiIixzdHJlYW1XZWI6ITEsd2ViU291cmNl''@;'; put 'put ''UGF0aDoiIixzdHJlYW1TZXJ2aWNlTmFtZToiIixhc3NldFBhdGhzOltdfSksdGhpcy50ZXN0Q29uZmlnP04udGVzdENvbmZpZz10aGlzLnRlc3RDb25maWc6UCYmKE4udGVzdENvbmZpZz17aW5pdFByb2dyYW06IiIsdGVybVByb2dyYW06IiIsbWFjcm9WYXJzOnt9LHRlc3RTZXRVcDoiIix0''@;'; put 'put ''ZXN0VGVhckRvd246IiJ9KSx0aGlzLnNlcnZlclR5cGU9PT1fLlNlcnZlclR5cGUuU2FzVml5YT9OLmNvbnRleHROYW1lPXRoaXMuY29udGV4dE5hbWU6dGhpcy5zZXJ2ZXJUeXBlPT09Xy5TZXJ2ZXJUeXBlLlNhczkmJihOLnNlcnZlck5hbWU9dGhpcy5zZXJ2ZXJOYW1lLE4ucmVwb3NpdG9y''@;'; put 'put ''eU5hbWU9dGhpcy5yZXBvc2l0b3J5TmFtZSksTn19fSw2NzgxOmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihnKXtyZXR1cm4gZyYmZy5fX2VzTW9kdWxlP2c6e2RlZmF1bHQ6Z319O09iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnZhbGlkYXRlU2FzanNSZXN1bHRzRm9sZGVyPVgudmFsaWRhdGVTYXNqc0J1aWxkRm9sZGVyPVgudmFsaWRhdGVTeW5jRGlyZWN0b3JpZXM9WC52YWxpZGF0ZVJlcG9zaXRvcnlOYW1lPVgudmFsaWRhdGVTeW5jRm9sZGVyPVgu''@;'; put 'put ''dmFsaWRhdGVTZXJ2ZXJOYW1lPVgudmFsaWRhdGVDb250ZXh0TmFtZT1YLnZhbGlkYXRlU3RyZWFtQ29uZmlnPVgudmFsaWRhdGVEZXBsb3lDb25maWc9WC52YWxpZGF0ZUpvYkNvbmZpZz1YLnZhbGlkYXRlVGVzdENvbmZpZz1YLnZhbGlkYXRlU2VydmljZUNvbmZpZz1YLnZhbGlkYXRlQnVp''@;'; put 'put ''bGRDb25maWc9WC52YWxpZGF0ZUF1dGhDb25maWdTYXM5PVgudmFsaWRhdGVBdXRoQ29uZmlnPVgudmFsaWRhdGVEb2NDb25maWc9WC52YWxpZGF0ZUFwcExvYz1YLnZhbGlkYXRlSHR0cHNBZ2VudE9wdGlvbnM9WC52YWxpZGF0ZVNlcnZlclVybD1YLnZhbGlkYXRlVGFyZ2V0TmFtZT1YLnZh''@;'; put 'put ''bGlkYXRlU2VydmVyVHlwZT1YLkRFRkFVTFRfU0FTSlNfUkVTVUxUU19GT0xERVI9WC5ERUZBVUxUX1NBU0pTX0JVSUxEX0ZPTERFUj12b2lkIDA7Y29uc3QgXz1JKGIoNDgxKSkscD1iKDM5MDApO1guREVGQVVMVF9TQVNKU19CVUlMRF9GT0xERVI9InNhc2pzYnVpbGQiLFguREVGQVVMVF9T''@;'; put 'put ''QVNKU19SRVNVTFRTX0ZPTERFUj0ic2FzanNyZXN1bHRzIixYLnZhbGlkYXRlU2VydmVyVHlwZT1nPT57aWYoIWcpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNlcnZlciB0eXBlOiBgc2VydmVyVHlwZWAgY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO2lmKGchPT1wLlNlcnZlclR5''@;'; put 'put ''cGUuU2FzOSYmZyE9PXAuU2VydmVyVHlwZS5TYXNWaXlhJiZnIT09cC5TZXJ2ZXJUeXBlLlNhc2pzKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzZXJ2ZXIgdHlwZTogU3VwcG9ydGVkIHZhbHVlcyBmb3IgIFxgc2VydmVyVHlwZVxgIGFyZSAke3AuU2VydmVyVHlwZS5TYXNWaXlhfSwgJHtw''@;'; put 'put ''LlNlcnZlclR5cGUuU2FzOX0gYW5kICR7cC5TZXJ2ZXJUeXBlLlNhc2pzfS5gKTtyZXR1cm4gZ30sWC52YWxpZGF0ZVRhcmdldE5hbWU9Zz0+e2lmKCFnKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0YXJnZXQgbmFtZTogYG5hbWVgIGNhbm5vdCBiZSBlbXB0eSwgbnVsbCBvciB1bmRlZmlu''@;'; put 'put ''ZWQuIik7aWYoZy50cmltKCkuaW5jbHVkZXMoIiAiKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdGFyZ2V0IG5hbWU6IGBuYW1lYCBjYW5ub3QgaW5jbHVkZSBzcGFjZXMuIik7aWYoIS9eW2EtekEtWjAtOVwtXSskL2kudGVzdChnKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdGFyZ2V0''@;'; put 'put ''IG5hbWU6IGBuYW1lYCBjYW4gb25seSBjb250YWluIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCBkYXNoZXMuIik7cmV0dXJuIGd9LFgudmFsaWRhdGVTZXJ2ZXJVcmw9Zz0+e2lmKG51bGw9PWcmJihnPSIiKSwiIiE9PWcmJiFfLmRlZmF1bHQuaXNIdHRwVXJpKGcpJiYhXy5kZWZhdWx0''@;'; put 'put ''LmlzSHR0cHNVcmkoZykpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNlcnZlciBVUkw6IGBzZXJ2ZXJVcmxgIHNob3VsZCBlaXRoZXIgYmUgYW4gZW1wdHkgc3RyaW5nIG9yIGEgdmFsaWQgVVJMIG9mIHRoZSBmb3JtIGh0dHAocyk6Ly95b3VyLXNlcnZlci5jb20oOnBvcnQpLiIpO3JldHVy''@;'; put 'put ''biBnfSxYLnZhbGlkYXRlSHR0cHNBZ2VudE9wdGlvbnM9Zz0+e2lmKGcpe2lmKCJvYmplY3QiIT10eXBlb2YgZyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdmFsdWU6IGBodHRwc0FnZW50T3B0aW9uc2Agc2hvdWxkIGVpdGhlciBiZSBhbiBlbXB0eSBvciBhbiBvYmplY3Qgb2YgYEh0dHBz''@;'; put 'put ''QWdlbnRPcHRpb25zYCIpO2lmKG51bGw9PWcuYWxsb3dJbnNlY3VyZVJlcXVlc3RzKWcuYWxsb3dJbnNlY3VyZVJlcXVlc3RzPSExO2Vsc2UgaWYoImJvb2xlYW4iIT10eXBlb2YgZy5hbGxvd0luc2VjdXJlUmVxdWVzdHMpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZhbHVlOiBgaHR0cHNB''@;'; put 'put ''Z2VudE9wdGlvbnMuYWxsb3dJbnNlY3VyZVJlcXVlc3RzYCBzaG91bGQgZWl0aGVyIGJlIGFuIGVtcHR5IG9yIGEgYm9vbGVhbiIpO3JldHVybiJzdHJpbmciIT10eXBlb2YgZy5jYVBhdGgmJihnLmNhUGF0aD12b2lkIDApLCJzdHJpbmciIT10eXBlb2YgZy5rZXlQYXRoJiYoZy5rZXlQYXRo''@;'; put 'put ''PXZvaWQgMCksInN0cmluZyIhPXR5cGVvZiBnLmNlcnRQYXRoJiYoZy5jZXJ0UGF0aD12b2lkIDApLGd9fSxYLnZhbGlkYXRlQXBwTG9jPWc9PntpZighZyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYXBwIGxvY2F0aW9uOiBgYXBwTG9jYCBjYW5ub3QgYmUgZW1wdHksIG51bGwgb3IgdW5k''@;'; put 'put ''ZWZpbmVkLiIpO2lmKCFnLnN0YXJ0c1dpdGgoIi8iKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYXBwIGxvY2F0aW9uOiBgYXBwTG9jYCBtdXN0IHN0YXJ0IHdpdGggYSBgL2AuIik7cmV0dXJuIGd9LFgudmFsaWRhdGVEb2NDb25maWc9Zz0+e2lmKGd8fChnPXt9KSwiYm9vbGVhbiIhPXR5''@;'; put 'put ''cGVvZiBnLmRpc3BsYXlNYWNyb0NvcmUmJihnLmRpc3BsYXlNYWNyb0NvcmU9dm9pZCAwKSwiYm9vbGVhbiIhPXR5cGVvZiBnLmVuYWJsZUxpbmVhZ2UmJihnLmVuYWJsZUxpbmVhZ2U9dm9pZCAwKSwic3RyaW5nIiE9dHlwZW9mIGcub3V0RGlyZWN0b3J5JiYoZy5vdXREaXJlY3Rvcnk9dm9p''@;'; put 'put ''ZCAwKSwic3RyaW5nIj09dHlwZW9mIGcuZGF0YUNvbnRyb2xsZXJVcmwpe2lmKCIiIT09Zy5kYXRhQ29udHJvbGxlclVybCYmIV8uZGVmYXVsdC5pc0h0dHBVcmkoZy5kYXRhQ29udHJvbGxlclVybCkmJiFfLmRlZmF1bHQuaXNIdHRwc1VyaShnLmRhdGFDb250cm9sbGVyVXJsKSl0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIkludmFsaWQgRGF0YSBDb250cm9sbGVyIFVybDogYGRhdGFDb250cm9sbGVyVXJsYCBzaG91bGQgZWl0aGVyIGJlIGFuIGVtcHR5IHN0cmluZyBvciBhIHZhbGlkIFVSTCBvZiB0aGUgZm9ybSBodHRwKHMpOi8veW91ci1zZXJ2ZXIuY29tKDpwb3J0KS4iKX1lbHNlIGcuZGF0''@;'; put 'put ''YUNvbnRyb2xsZXJVcmw9dm9pZCAwO3JldHVybiBnfSxYLnZhbGlkYXRlQXV0aENvbmZpZz1nPT57aWYoIWcpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGF1dGggY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gZ30sWC52YWxpZGF0ZUF1dGhDb25m''@;'; put 'put ''aWdTYXM5PWc9PntpZighZyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYXV0aCBjb25maWcgZm9yIHNhczk6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO2lmKCFnLnVzZXJOYW1lfHwhZy5wYXNzd29yZCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYXV0aCBjb25maWcg''@;'; put 'put ''Zm9yIHNhczk6IHVzZXJOYW1lIGFuZCBwYXNzd29yZCBjYW4gbm90IGJlIGVtcHR5Iik7cmV0dXJuIGd9LFgudmFsaWRhdGVCdWlsZENvbmZpZz0oZyx5KT0+e2lmKCFnKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBidWlsZCBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZp''@;'; put 'put ''bmVkLiIpO3JldHVybiBnLmJ1aWxkT3V0cHV0RmlsZU5hbWV8fChnLmJ1aWxkT3V0cHV0RmlsZU5hbWU9YCR7eX0uc2FzYCksZy5pbml0UHJvZ3JhbXx8KGcuaW5pdFByb2dyYW09IiIpLGcudGVybVByb2dyYW18fChnLnRlcm1Qcm9ncmFtPSIiKSxnLm1hY3JvVmFyc3x8KGcubWFjcm9WYXJz''@;'; put 'put ''PXt9KSxnfSxYLnZhbGlkYXRlU2VydmljZUNvbmZpZz1nPT57aWYoIWcpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNlcnZpY2UgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gZy5pbml0UHJvZ3JhbXx8KGcuaW5pdFByb2dyYW09IiIpLGcudGVy''@;'; put 'put ''bVByb2dyYW18fChnLnRlcm1Qcm9ncmFtPSIiKSxnLnNlcnZpY2VGb2xkZXJzfHwoZy5zZXJ2aWNlRm9sZGVycz1bXSksZy5tYWNyb1ZhcnN8fChnLm1hY3JvVmFycz17fSksZ30sWC52YWxpZGF0ZVRlc3RDb25maWc9Zz0+e2lmKCFnKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0ZXN0IGNv''@;'; put 'put ''bmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIGcuaW5pdFByb2dyYW18fChnLmluaXRQcm9ncmFtPSIiKSxnLnRlcm1Qcm9ncmFtfHwoZy50ZXJtUHJvZ3JhbT0iIiksZy5tYWNyb1ZhcnN8fChnLm1hY3JvVmFycz17fSksZy50ZXN0U2V0VXB8fChnLnRl''@;'; put 'put ''c3RTZXRVcD0iIiksZy50ZXN0VGVhckRvd258fChnLnRlc3RUZWFyRG93bj0iIiksZ30sWC52YWxpZGF0ZUpvYkNvbmZpZz1nPT57aWYoIWcpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGpvYiBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBnLmlu''@;'; put 'put ''aXRQcm9ncmFtfHwoZy5pbml0UHJvZ3JhbT0iIiksZy50ZXJtUHJvZ3JhbXx8KGcudGVybVByb2dyYW09IiIpLGcuam9iRm9sZGVyc3x8KGcuam9iRm9sZGVycz1bXSksZy5tYWNyb1ZhcnN8fChnLm1hY3JvVmFycz17fSksZ30sWC52YWxpZGF0ZURlcGxveUNvbmZpZz1nPT57aWYoIWcpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJJbnZhbGlkIGRlcGxveSBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBnLmRlcGxveVNlcnZpY2VQYWNrPSEhZy5kZXBsb3lTZXJ2aWNlUGFjayxnLmRlcGxveVNjcmlwdHN8fChnLmRlcGxveVNjcmlwdHM9W10pLGd9LFgu''@;'; put 'put ''dmFsaWRhdGVTdHJlYW1Db25maWc9Zz0+e2lmKCFnKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJlYW0gY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtpZighMCE9PWcuc3RyZWFtV2ViJiYhMSE9PWcuc3RyZWFtV2ViKXRocm93IG5ldyBFcnJvcigiSW52''@;'; put 'put ''YWxpZCBzdHJlYW0gY29uZmlnOiBgc3RyZWFtV2ViYCBjYW5ub3QgYmUgYSBub24tYm9vbGVhbiB2YWx1ZS4iKTtpZihnLnN0cmVhbVdlYiYmIWcuc3RyZWFtV2ViRm9sZGVyKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJlYW0gY29uZmlnOiBgc3RyZWFtV2ViRm9sZGVyYCBjYW5ub3Qg''@;'; put 'put ''YmUgZW1wdHksIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gYHN0cmVhbVdlYmAgaXMgdHJ1ZS4iKTtpZihnLnN0cmVhbVdlYiYmIWcud2ViU291cmNlUGF0aCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyZWFtIGNvbmZpZzogYHdlYlNvdXJjZVBhdGhgIHNob3VsZCBjb250YWluIHRoZSBw''@;'; put 'put ''YXRoIHRvIHlvdXIgZnJvbnRlbmQgYXBwbGljYXRpb24gZWcgYnVpbGQsIGRpc3QsIG9yIHNyYy4iKTtyZXR1cm4gZy5zdHJlYW1Mb2dvJiYic3RyaW5nIiE9dHlwZW9mIGcuc3RyZWFtTG9nbyYmKGcuc3RyZWFtTG9nbz12b2lkIDApLGcuYXNzZXRQYXRoc3x8KGcuYXNzZXRQYXRocz1bXSks''@;'; put 'put ''Zy5zdHJlYW1TZXJ2aWNlTmFtZXx8KGcuc3RyZWFtU2VydmljZU5hbWU9ImNsaWNrbWUiKSxnfSxYLnZhbGlkYXRlQ29udGV4dE5hbWU9KGcseSk9PnkhPT1wLlNlcnZlclR5cGUuU2FzVml5YXx8Zz9nOiJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQiLFgudmFsaWRhdGVTZXJ2''@;'; put 'put ''ZXJOYW1lPShnLHkpPT55IT09cC5TZXJ2ZXJUeXBlLlNhczl8fGc/ZzoiU0FTQXBwIixYLnZhbGlkYXRlU3luY0ZvbGRlcj1nPT57aWYoInN0cmluZyI9PXR5cGVvZiBnJiZnKXJldHVybiBnfSxYLnZhbGlkYXRlUmVwb3NpdG9yeU5hbWU9KGcseSk9PnkhPT1wLlNlcnZlclR5cGUuU2FzOXx8''@;'; put 'put ''Zz9nOiJGb3VuZGF0aW9uIixYLnZhbGlkYXRlU3luY0RpcmVjdG9yaWVzPWc9PntpZighZyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3luY0RpcmVjdG9yaWVzIGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIGcuZm9yRWFjaCh5PT57aWYoIXku''@;'; put 'put ''bG9jYWx8fCF5LnJlbW90ZSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3luY0RpcmVjdG9yeSBjb25maWc6IHZhbHVlcyBvZiBwcm9wZXJ0eSAnbG9jYWwnIGFuZCAncmVtb3RlIGNhbiBub3QgYmUgZW1wdHkgb3IgdW5kZWZpbmVkIil9KSxnfSxYLnZhbGlkYXRlU2FzanNCdWlsZEZvbGRl''@;'; put 'put ''cj1nPT57aWYoInN0cmluZyIhPXR5cGVvZiBnKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0eXBlIG9mIHZhbHVlICgke3R5cGVvZiBnfSkgaXMgcHJvdmlkZWQgZm9yIHByb3BlcnR5ICdzYXNqc0J1aWxkRm9sZGVyJyBpbiBjb25maWcuIFJlcXVpcmVkIGlzIHN0cmluZy5gKTtyZXR1cm4g''@;'; put 'put ''Z3x8WC5ERUZBVUxUX1NBU0pTX0JVSUxEX0ZPTERFUn0sWC52YWxpZGF0ZVNhc2pzUmVzdWx0c0ZvbGRlcj1nPT57aWYoInN0cmluZyIhPXR5cGVvZiBnKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0eXBlIG9mIHZhbHVlICgke3R5cGVvZiBnfSkgaXMgcHJvdmlkZWQgZm9yIHByb3BlcnR5''@;'; put 'put ''ICdzYXNqc1Jlc3VsdHNGb2xkZXInIGluIGNvbmZpZy4gUmVxdWlyZWQgaXMgc3RyaW5nLmApO3JldHVybiBnfHxYLkRFRkFVTFRfU0FTSlNfUkVTVUxUU19GT0xERVJ9fSwyOTI3OmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3QiO3ZhciBJPWIoODc2NCkuQnVmZmVyLF89dGhpcyYmdGhp''@;'; put 'put ''cy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEYpe3JldHVybiBGJiZGLl9fZXNNb2R1bGU/Rjp7ZGVmYXVsdDpGfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZGVjb2RlRnJvbUJhc2U2ND1YLmVuY29kZVRvQmFzZTY0PXZvaWQgMDtjb25z''@;'; put 'put ''dCBwPV8oYig1ODM1KSksVj0ie3Nhc2pzX2VuY29kZWR9IjtYLmVuY29kZVRvQmFzZTY0PUY9Pntjb25zdCBSPXAuZGVmYXVsdC5yYW5kb21CeXRlcygxMDApLnRvU3RyaW5nKCJoZXgiKSx6PUkuZnJvbShSK0YpLnRvU3RyaW5nKCJiYXNlNjQiKTtyZXR1cm4gVit6fSxYLmRlY29kZUZyb21C''@;'; put 'put ''YXNlNjQ9Rj0+Ri5zdGFydHNXaXRoKFYpPyhGPUYucmVwbGFjZSgvXntzYXNqc19lbmNvZGVkfS8sIiIpLEkuZnJvbShGLCJiYXNlNjQiKS50b1N0cmluZygpLnN1YnN0cmluZygyMDApKTpGfSw1ODE6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2Vz''@;'; put 'put ''TW9kdWxlIix7dmFsdWU6ITB9KSxYLmJ5dGVzVG9TaXplPXZvaWQgMCxYLmJ5dGVzVG9TaXplPShJLF89MSxwPTEwOTk1MTE2Mjc3NzYpPT57aWYoMD09PUkpcmV0dXJuIjAgQiI7ST1JPnA/cDpJO2NvbnN0IFA9XzwwPzA6XyxGPU1hdGguZmxvb3IoTWF0aC5sb2coSSkvTWF0aC5sb2coMTAy''@;'; put 'put ''NCkpO3JldHVybihJL01hdGgucG93KDEwMjQsRikpLnRvRml4ZWQoUCkrIiAiK1siQiIsIktCIiwiTUIiLCJHQiIsIlRCIl1bRl19fSw4NjUzOihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5jaHVuaz12b2lk''@;'; put 'put ''IDAsWC5jaHVuaz1mdW5jdGlvbiBiKEksXz0yMjApe3JldHVybiBJLmxlbmd0aDw9Xz9bSV06KEkubWF0Y2gobmV3IFJlZ0V4cCgiLnsxLCIrXysifSIsImciKSl8fFtdKS5maWx0ZXIocD0+ISFwKX19LDY0NTc6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShY''@;'; put 'put ''LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmRpZmY9dm9pZCAwLFguZGlmZj1mdW5jdGlvbiBiKEksXyl7cmV0dXJuWy4uLkkuZmlsdGVyKHc9PiJvYmplY3QiPT10eXBlb2Ygdz8hSlNPTi5zdHJpbmdpZnkoXykuaW5jbHVkZXMoSlNPTi5zdHJpbmdpZnkodykpOiFfLmluY2x1ZGVzKHcp''@;'; put 'put ''KSwuLi5fLmZpbHRlcih3PT4ib2JqZWN0Ij09dHlwZW9mIHc/IUpTT04uc3RyaW5naWZ5KEkpLmluY2x1ZGVzKEpTT04uc3RyaW5naWZ5KHcpKTohSS5pbmNsdWRlcyh3KSldfX0sMTUyOTooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUi''@;'; put 'put ''LHt2YWx1ZTohMH0pLFguZ2V0RXhlY3V0b3JQYXRoPXZvaWQgMDtjb25zdCBiPXtTQVNWSVlBOiIvU0FTSm9iRXhlY3V0aW9uIixTQVM5OiIvU0FTU3RvcmVkUHJvY2Vzcy9kbyJ9O1guZ2V0RXhlY3V0b3JQYXRoPV89Pl8/KF89Xy50b1VwcGVyQ2FzZSgpLGJbX118fCIiKToiIn0sMzMxNjoo''@;'; put 'put ''Y2UsWCxiKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5nZXRUcmVlRXhhbXBsZT1YLmlzRmlsZVRyZWU9dm9pZCAwO2NvbnN0IEk9YigzOTAwKTtYLmlzRmlsZVRyZWU9Rj0+RiYmRi5tZW1iZXJzJiZBcnJheS5pc0Fy''@;'; put 'put ''cmF5KEYubWVtYmVycykmJjA9PT1GLm1lbWJlcnMuZmlsdGVyKFI9PiFwKFIpJiYhVihSKSYmIXcoUikpLmxlbmd0aDtjb25zdCBwPUY9PkYmJiJzdHJpbmciPT10eXBlb2YgRi5uYW1lJiZGLnR5cGU9PT1JLk1lbWJlclR5cGUuc2VydmljZSYmInN0cmluZyI9PXR5cGVvZiBGLmNvZGUsVj1G''@;'; put 'put ''PT5GJiYic3RyaW5nIj09dHlwZW9mIEYubmFtZSYmRi50eXBlPT09SS5NZW1iZXJUeXBlLmZpbGUmJiJzdHJpbmciPT10eXBlb2YgRi5jb2RlLHc9Rj0+RiYmInN0cmluZyI9PXR5cGVvZiBGLm5hbWUmJkYudHlwZT09PUkuTWVtYmVyVHlwZS5mb2xkZXImJkYubWVtYmVycyYmQXJyYXkuaXNB''@;'; put 'put ''cnJheShGLm1lbWJlcnMpJiYwPT09Ri5tZW1iZXJzLmZpbHRlcihSPT4hcChSKSYmIVYoUikmJiF3KFIpKS5sZW5ndGg7WC5nZXRUcmVlRXhhbXBsZT0oKT0+KHttZW1iZXJzOlt7bmFtZToiam9icyIsdHlwZTpJLk1lbWJlclR5cGUuZm9sZGVyLG1lbWJlcnM6W3tuYW1lOiJleHRyYWN0Iix0''@;'; put 'put ''eXBlOkkuTWVtYmVyVHlwZS5mb2xkZXIsbWVtYmVyczpbe25hbWU6Im1ha2VkYXRhMSIsdHlwZTpJLk1lbWJlclR5cGUuc2VydmljZSxjb2RlOiIlcHV0IEhlbGxvIFdvcmxkITsifV19XX1dfSl9LDYyNjY6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5f''@;'; put 'put ''X2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKE4sTyxLLFope3ZvaWQgMD09PVomJihaPUspLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOLFose2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE9bS119fSl9OmZ1bmN0aW9uKE4sTyxLLFope3ZvaWQgMD09''@;'; put 'put ''PVomJihaPUspLE5bWl09T1tLXX0pLF89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKE4sTyl7Zm9yKHZhciBLIGluIE4pImRlZmF1bHQiIT09SyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChPLEspJiZJKE8sTixLKX07T2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguY2h1bms9WC5kaWZmPVguYnl0ZXNUb1NpemU9WC5nZXRFeGVjdXRvclBhdGg9WC5kZWNvZGVGcm9tQmFzZTY0PVguZW5jb2RlVG9CYXNlNjQ9WC51cmxPcmlnaW49WC5nZW5lcmF0ZVBhdGhGb3JTYXM9WC5nZXRNYWNyb3NQYXRoPVgu''@;'; put 'put ''ZXNjYXBlV2luU2xhc2hlcz1YLmlzTGludXg9WC5pc1dpbmRvd3M9WC51bmlxQXJyYXk9WC5hc3luY0ZvckVhY2g9WC51dWlkdjQ9dm9pZCAwO3ZhciBwPWIoMTEzMSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsInV1aWR2NCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHAudXVpZHY0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJhc3luY0ZvckVhY2giLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmFzeW5jRm9yRWFjaH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwidW5pcUFycmF5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gcC51bmlxQXJyYXl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImlzV2luZG93cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuaXNXaW5kb3dzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJpc0xpbnV4Iix7ZW51bWVyYWJsZToh''@;'; put 'put ''MCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5pc0xpbnV4fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJlc2NhcGVXaW5TbGFzaGVzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5lc2NhcGVXaW5TbGFzaGVzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJn''@;'; put 'put ''ZXRNYWNyb3NQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5nZXRNYWNyb3NQYXRofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJnZW5lcmF0ZVBhdGhGb3JTYXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmdlbmVyYXRlUGF0''@;'; put 'put ''aEZvclNhc319KSxfKGIoMzMxNiksWCk7dmFyIFY9Yig5NjUyKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwidXJsT3JpZ2luIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVi51cmxPcmlnaW59fSk7dmFyIHc9YigyOTI3KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwi''@;'; put 'put ''ZW5jb2RlVG9CYXNlNjQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB3LmVuY29kZVRvQmFzZTY0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJkZWNvZGVGcm9tQmFzZTY0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdy5kZWNvZGVGcm9t''@;'; put 'put ''QmFzZTY0fX0pO3ZhciBQPWIoMTUyOSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImdldEV4ZWN1dG9yUGF0aCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFAuZ2V0RXhlY3V0b3JQYXRofX0pO3ZhciBGPWIoNTgxKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiYnl0''@;'; put 'put ''ZXNUb1NpemUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBGLmJ5dGVzVG9TaXplfX0pO3ZhciBSPWIoNjQ1Nyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImRpZmYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBSLmRpZmZ9fSk7dmFyIHo9Yig4''@;'; put 'put ''NjUzKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiY2h1bmsiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB6LmNodW5rfX0pfSw5NjUyOihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC51''@;'; put 'put ''cmxPcmlnaW49dm9pZCAwLFgudXJsT3JpZ2luPUk9PntpZigiIj09PUkpcmV0dXJuIEk7bGV0IF87dHJ5e189bmV3IFVSTChJKS5vcmlnaW59Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFVSTC4iKX1yZXR1cm4gX319LDExMzE6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIF89Yig0MTU1KSxwPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihZLFcscSxlZSl7cmV0dXJuIG5ldyhxfHwocT1Qcm9taXNlKSkoZnVuY3Rpb24ocmUsaWUpe2Z1bmN0aW9uIHVlKFRlKXt0cnl7X2UoZWUubmV4dChUZSkpfWNhdGNoKE1lKXtpZShNZSl9fWZ1bmN0aW9uIGdl''@;'; put 'put ''KFRlKXt0cnl7X2UoZWUudGhyb3coVGUpKX1jYXRjaChNZSl7aWUoTWUpfX1mdW5jdGlvbiBfZShUZSl7VGUuZG9uZT9yZShUZS52YWx1ZSk6ZnVuY3Rpb24gSihyZSl7cmV0dXJuIHJlIGluc3RhbmNlb2YgcT9yZTpuZXcgcShmdW5jdGlvbihpZSl7aWUocmUpfSl9KFRlLnZhbHVlKS50aGVu''@;'; put 'put ''KHVlLGdlKX1fZSgoZWU9ZWUuYXBwbHkoWSxXfHxbXSkpLm5leHQoKSl9KX0sVj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oWSl7cmV0dXJuIFkmJlkuX19lc01vZHVsZT9ZOntkZWZhdWx0Oll9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3Zh''@;'; put 'put ''bHVlOiEwfSksWC5nZW5lcmF0ZVBhdGhGb3JTYXM9WC5nZXRNYWNyb3NQYXRoPVguZXNjYXBlV2luU2xhc2hlcz1YLmlzTGludXg9WC5pc1dpbmRvd3M9WC51bmlxQXJyYXk9WC51dWlkdjQ9WC5hc3luY0ZvckVhY2g9dm9pZCAwO2NvbnN0IHc9VihiKDI1MjApKTtYLmFzeW5jRm9yRWFjaD1m''@;'; put 'put ''dW5jdGlvbiBQKFksVyl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2ZvcihsZXQgcT0wO3E8WS5sZW5ndGg7cSsrKXlpZWxkIFcoWVtxXSxxLFkpfSl9LFgudXVpZHY0PSgpPT4ieHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Ii5yZXBsYWNlKC9b''@;'; put 'put ''eHldL2csWT0+e2NvbnN0IFc9MTYqTWF0aC5yYW5kb20oKXwwO3JldHVybigieCI9PVk/VzozJld8OCkudG9TdHJpbmcoMTYpfSksWC51bmlxQXJyYXk9WT0+QXJyYXkuZnJvbShuZXcgU2V0KFkpKSxYLmlzV2luZG93cz0oKT0+IndpbjMyIj09PV8ucGxhdGZvcm0sWC5pc0xpbnV4PSgpPT4i''@;'; put 'put ''bGludXgiPT09Xy5wbGF0Zm9ybSxYLmVzY2FwZVdpblNsYXNoZXM9WT0+KDAsWC5pc1dpbmRvd3MpKCk/WS5yZXBsYWNlKC9cXC9nLCJcXFxcIik6WSxYLmdldE1hY3Jvc1BhdGg9KCk9PncuZGVmYXVsdC5qb2luKCIvIiwiLi4iLCJtYWNyb3MiKSxYLmdlbmVyYXRlUGF0aEZvclNhcz1ZPT5Z''@;'; put 'put ''LnJlcGxhY2UoL1xcL2csIi8iKX0sOTgwOTooY2UsWCxiKT0+e3ZhciBJPVg7SS5iaWdudW09Yig0NTkwKSxJLmRlZmluZT1iKDI1MDApLmRlZmluZSxJLmJhc2U9YigxOTc5KSxJLmNvbnN0YW50cz1iKDY4MjYpLEkuZGVjb2RlcnM9Yig4MzA3KSxJLmVuY29kZXJzPWIoNjU3OSl9LDI1MDA6''@;'; put 'put ''KGNlLFgsYik9Pnt2YXIgST1iKDk4MDkpLF89Yig1NzE3KTtmdW5jdGlvbiBWKHcsUCl7dGhpcy5uYW1lPXcsdGhpcy5ib2R5PVAsdGhpcy5kZWNvZGVycz17fSx0aGlzLmVuY29kZXJzPXt9fVguZGVmaW5lPWZ1bmN0aW9uKFAsRil7cmV0dXJuIG5ldyBWKFAsRil9LFYucHJvdG90eXBlLl9j''@;'; put 'put ''cmVhdGVOYW1lZD1mdW5jdGlvbihQKXt2YXIgRjt0cnl7Rj1iKDUxNDApLnJ1bkluVGhpc0NvbnRleHQoIihmdW5jdGlvbiAiK3RoaXMubmFtZSsiKGVudGl0eSkge1xuICB0aGlzLl9pbml0TmFtZWQoZW50aXR5KTtcbn0pIil9Y2F0Y2h7Rj1mdW5jdGlvbih6KXt0aGlzLl9pbml0TmFtZWQo''@;'; put 'put ''eil9fXJldHVybiBfKEYsUCksRi5wcm90b3R5cGUuX2luaXROYW1lZD1mdW5jdGlvbih6KXtQLmNhbGwodGhpcyx6KX0sbmV3IEYodGhpcyl9LFYucHJvdG90eXBlLl9nZXREZWNvZGVyPWZ1bmN0aW9uKFApe3JldHVybiB0aGlzLmRlY29kZXJzLmhhc093blByb3BlcnR5KFA9UHx8ImRlciIp''@;'; put 'put ''fHwodGhpcy5kZWNvZGVyc1tQXT10aGlzLl9jcmVhdGVOYW1lZChJLmRlY29kZXJzW1BdKSksdGhpcy5kZWNvZGVyc1tQXX0sVi5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKFAsRixSKXtyZXR1cm4gdGhpcy5fZ2V0RGVjb2RlcihGKS5kZWNvZGUoUCxSKX0sVi5wcm90b3R5cGUuX2dldEVu''@;'; put 'put ''Y29kZXI9ZnVuY3Rpb24oUCl7cmV0dXJuIHRoaXMuZW5jb2RlcnMuaGFzT3duUHJvcGVydHkoUD1QfHwiZGVyIil8fCh0aGlzLmVuY29kZXJzW1BdPXRoaXMuX2NyZWF0ZU5hbWVkKEkuZW5jb2RlcnNbUF0pKSx0aGlzLmVuY29kZXJzW1BdfSxWLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24o''@;'; put 'put ''UCxGLFIpe3JldHVybiB0aGlzLl9nZXRFbmNvZGVyKEYpLmVuY29kZShQLFIpfX0sNjYyNTooY2UsWCxiKT0+e3ZhciBJPWIoNTcxNyksXz1iKDE5NzkpLlJlcG9ydGVyLHA9Yig4NzY0KS5CdWZmZXI7ZnVuY3Rpb24gVihQLEYpe18uY2FsbCh0aGlzLEYpLHAuaXNCdWZmZXIoUCk/KHRoaXMu''@;'; put 'put ''YmFzZT1QLHRoaXMub2Zmc2V0PTAsdGhpcy5sZW5ndGg9UC5sZW5ndGgpOnRoaXMuZXJyb3IoIklucHV0IG5vdCBCdWZmZXIiKX1mdW5jdGlvbiB3KFAsRil7aWYoQXJyYXkuaXNBcnJheShQKSl0aGlzLmxlbmd0aD0wLHRoaXMudmFsdWU9UC5tYXAoZnVuY3Rpb24oUil7cmV0dXJuIFIgaW5z''@;'; put 'put ''dGFuY2VvZiB3fHwoUj1uZXcgdyhSLEYpKSx0aGlzLmxlbmd0aCs9Ui5sZW5ndGgsUn0sdGhpcyk7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIFApe2lmKCEoMDw9UCYmUDw9MjU1KSlyZXR1cm4gRi5lcnJvcigibm9uLWJ5dGUgRW5jb2RlckJ1ZmZlciB2YWx1ZSIpO3RoaXMudmFsdWU9UCx0''@;'; put 'put ''aGlzLmxlbmd0aD0xfWVsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBQKXRoaXMudmFsdWU9UCx0aGlzLmxlbmd0aD1wLmJ5dGVMZW5ndGgoUCk7ZWxzZXtpZighcC5pc0J1ZmZlcihQKSlyZXR1cm4gRi5lcnJvcigiVW5zdXBwb3J0ZWQgdHlwZTogIit0eXBlb2YgUCk7dGhpcy52YWx1ZT1QLHRo''@;'; put 'put ''aXMubGVuZ3RoPVAubGVuZ3RofX1JKFYsXyksWC5DPVYsVi5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe3JldHVybntvZmZzZXQ6dGhpcy5vZmZzZXQscmVwb3J0ZXI6Xy5wcm90b3R5cGUuc2F2ZS5jYWxsKHRoaXMpfX0sVi5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbihGKXt2YXIgUj1u''@;'; put 'put ''ZXcgVih0aGlzLmJhc2UpO3JldHVybiBSLm9mZnNldD1GLm9mZnNldCxSLmxlbmd0aD10aGlzLm9mZnNldCx0aGlzLm9mZnNldD1GLm9mZnNldCxfLnByb3RvdHlwZS5yZXN0b3JlLmNhbGwodGhpcyxGLnJlcG9ydGVyKSxSfSxWLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMub2Zmc2V0PT09dGhpcy5sZW5ndGh9LFYucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihGKXtyZXR1cm4gdGhpcy5vZmZzZXQrMTw9dGhpcy5sZW5ndGg/dGhpcy5iYXNlLnJlYWRVSW50OCh0aGlzLm9mZnNldCsrLCEwKTp0aGlzLmVycm9yKEZ8fCJEZWNvZGVyQnVmZmVyIG92''@;'; put 'put ''ZXJydW4iKX0sVi5wcm90b3R5cGUuc2tpcD1mdW5jdGlvbihGLFIpe2lmKCEodGhpcy5vZmZzZXQrRjw9dGhpcy5sZW5ndGgpKXJldHVybiB0aGlzLmVycm9yKFJ8fCJEZWNvZGVyQnVmZmVyIG92ZXJydW4iKTt2YXIgej1uZXcgVih0aGlzLmJhc2UpO3JldHVybiB6Ll9yZXBvcnRlclN0YXRl''@;'; put 'put ''PXRoaXMuX3JlcG9ydGVyU3RhdGUsei5vZmZzZXQ9dGhpcy5vZmZzZXQsei5sZW5ndGg9dGhpcy5vZmZzZXQrRix0aGlzLm9mZnNldCs9Rix6fSxWLnByb3RvdHlwZS5yYXc9ZnVuY3Rpb24oRil7cmV0dXJuIHRoaXMuYmFzZS5zbGljZShGP0Yub2Zmc2V0OnRoaXMub2Zmc2V0LHRoaXMubGVu''@;'; put 'put ''Z3RoKX0sWC5SPXcsdy5wcm90b3R5cGUuam9pbj1mdW5jdGlvbihGLFIpe3JldHVybiBGfHwoRj1uZXcgcCh0aGlzLmxlbmd0aCkpLFJ8fChSPTApLDA9PT10aGlzLmxlbmd0aHx8KEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSk/dGhpcy52YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHope3ouam9p''@;'; put 'put ''bihGLFIpLFIrPXoubGVuZ3RofSk6KCJudW1iZXIiPT10eXBlb2YgdGhpcy52YWx1ZT9GW1JdPXRoaXMudmFsdWU6InN0cmluZyI9PXR5cGVvZiB0aGlzLnZhbHVlP0Yud3JpdGUodGhpcy52YWx1ZSxSKTpwLmlzQnVmZmVyKHRoaXMudmFsdWUpJiZ0aGlzLnZhbHVlLmNvcHkoRixSKSxSKz10''@;'; put 'put ''aGlzLmxlbmd0aCkpLEZ9fSwxOTc5OihjZSxYLGIpPT57dmFyIEk9WDtJLlJlcG9ydGVyPWIoODQ2NSkuYixJLkRlY29kZXJCdWZmZXI9Yig2NjI1KS5DLEkuRW5jb2RlckJ1ZmZlcj1iKDY2MjUpLlIsSS5Ob2RlPWIoMTk0OSl9LDE5NDk6KGNlLFgsYik9Pnt2YXIgST1iKDE5NzkpLlJlcG9y''@;'; put 'put ''dGVyLF89YigxOTc5KS5FbmNvZGVyQnVmZmVyLHA9YigxOTc5KS5EZWNvZGVyQnVmZmVyLFY9Yig5NzQ2KSx3PVsic2VxIiwic2Vxb2YiLCJzZXQiLCJzZXRvZiIsIm9iamlkIiwiYm9vbCIsImdlbnRpbWUiLCJ1dGN0aW1lIiwibnVsbF8iLCJlbnVtIiwiaW50Iiwib2JqRGVzYyIsImJpdHN0''@;'; put 'put ''ciIsImJtcHN0ciIsImNoYXJzdHIiLCJnZW5zdHIiLCJncmFwaHN0ciIsImlhNXN0ciIsImlzbzY0NnN0ciIsIm51bXN0ciIsIm9jdHN0ciIsInByaW50c3RyIiwidDYxc3RyIiwidW5pc3RyIiwidXRmOHN0ciIsInZpZGVvc3RyIl0sUD1bImtleSIsIm9iaiIsInVzZSIsIm9wdGlvbmFsIiwi''@;'; put 'put ''ZXhwbGljaXQiLCJpbXBsaWNpdCIsImRlZiIsImNob2ljZSIsImFueSIsImNvbnRhaW5zIl0uY29uY2F0KHcpO2Z1bmN0aW9uIFIoTixPKXt2YXIgSz17fTt0aGlzLl9iYXNlU3RhdGU9SyxLLmVuYz1OLEsucGFyZW50PU98fG51bGwsSy5jaGlsZHJlbj1udWxsLEsudGFnPW51bGwsSy5hcmdz''@;'; put 'put ''PW51bGwsSy5yZXZlcnNlQXJncz1udWxsLEsuY2hvaWNlPW51bGwsSy5vcHRpb25hbD0hMSxLLmFueT0hMSxLLm9iaj0hMSxLLnVzZT1udWxsLEsudXNlRGVjb2Rlcj1udWxsLEsua2V5PW51bGwsSy5kZWZhdWx0PW51bGwsSy5leHBsaWNpdD1udWxsLEsuaW1wbGljaXQ9bnVsbCxLLmNvbnRh''@;'; put 'put ''aW5zPW51bGwsSy5wYXJlbnR8fChLLmNoaWxkcmVuPVtdLHRoaXMuX3dyYXAoKSl9Y2UuZXhwb3J0cz1SO3ZhciB6PVsiZW5jIiwicGFyZW50IiwiY2hpbGRyZW4iLCJ0YWciLCJhcmdzIiwicmV2ZXJzZUFyZ3MiLCJjaG9pY2UiLCJvcHRpb25hbCIsImFueSIsIm9iaiIsInVzZSIsImFsdGVy''@;'; put 'put ''ZWRVc2UiLCJrZXkiLCJkZWZhdWx0IiwiZXhwbGljaXQiLCJpbXBsaWNpdCIsImNvbnRhaW5zIl07Ui5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgTz10aGlzLl9iYXNlU3RhdGUsSz17fTt6LmZvckVhY2goZnVuY3Rpb24oWSl7S1tZXT1PW1ldfSk7dmFyIFo9bmV3IHRoaXMuY29u''@;'; put 'put ''c3RydWN0b3IoSy5wYXJlbnQpO3JldHVybiBaLl9iYXNlU3RhdGU9SyxafSxSLnByb3RvdHlwZS5fd3JhcD1mdW5jdGlvbigpe3ZhciBPPXRoaXMuX2Jhc2VTdGF0ZTtQLmZvckVhY2goZnVuY3Rpb24oSyl7dGhpc1tLXT1mdW5jdGlvbigpe3ZhciBZPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHRo''@;'; put 'put ''aXMpO3JldHVybiBPLmNoaWxkcmVuLnB1c2goWSksWVtLXS5hcHBseShZLGFyZ3VtZW50cyl9fSx0aGlzKX0sUi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oTyl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO1YobnVsbD09PUsucGFyZW50KSxPLmNhbGwodGhpcyksSy5jaGlsZHJlbj1LLmNoaWxk''@;'; put 'put ''cmVuLmZpbHRlcihmdW5jdGlvbihaKXtyZXR1cm4gWi5fYmFzZVN0YXRlLnBhcmVudD09PXRoaXN9LHRoaXMpLFYuZXF1YWwoSy5jaGlsZHJlbi5sZW5ndGgsMSwiUm9vdCBub2RlIGNhbiBoYXZlIG9ubHkgb25lIGNoaWxkIil9LFIucHJvdG90eXBlLl91c2VBcmdzPWZ1bmN0aW9uKE8pe3Zh''@;'; put 'put ''ciBLPXRoaXMuX2Jhc2VTdGF0ZSxaPU8uZmlsdGVyKGZ1bmN0aW9uKFkpe3JldHVybiBZIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcn0sdGhpcyk7Tz1PLmZpbHRlcihmdW5jdGlvbihZKXtyZXR1cm4hKFkgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKX0sdGhpcyksMCE9PVoubGVu''@;'; put 'put ''Z3RoJiYoVihudWxsPT09Sy5jaGlsZHJlbiksSy5jaGlsZHJlbj1aLFouZm9yRWFjaChmdW5jdGlvbihZKXtZLl9iYXNlU3RhdGUucGFyZW50PXRoaXN9LHRoaXMpKSwwIT09Ty5sZW5ndGgmJihWKG51bGw9PT1LLmFyZ3MpLEsuYXJncz1PLEsucmV2ZXJzZUFyZ3M9Ty5tYXAoZnVuY3Rpb24o''@;'; put 'put ''WSl7aWYoIm9iamVjdCIhPXR5cGVvZiBZfHxZLmNvbnN0cnVjdG9yIT09T2JqZWN0KXJldHVybiBZO3ZhciBXPXt9O3JldHVybiBPYmplY3Qua2V5cyhZKS5mb3JFYWNoKGZ1bmN0aW9uKHEpe3E9PSgwfHEpJiYocXw9MCksV1tZW3FdXT1xfSksV30pKX0sWyJfcGVla1RhZyIsIl9kZWNvZGVU''@;'; put 'put ''YWciLCJfdXNlIiwiX2RlY29kZVN0ciIsIl9kZWNvZGVPYmppZCIsIl9kZWNvZGVUaW1lIiwiX2RlY29kZU51bGwiLCJfZGVjb2RlSW50IiwiX2RlY29kZUJvb2wiLCJfZGVjb2RlTGlzdCIsIl9lbmNvZGVDb21wb3NpdGUiLCJfZW5jb2RlU3RyIiwiX2VuY29kZU9iamlkIiwiX2VuY29kZVRp''@;'; put 'put ''bWUiLCJfZW5jb2RlTnVsbCIsIl9lbmNvZGVJbnQiLCJfZW5jb2RlQm9vbCJdLmZvckVhY2goZnVuY3Rpb24oTil7Ui5wcm90b3R5cGVbTl09ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoTisiIG5vdCBpbXBsZW1lbnRlZCBmb3IgZW5jb2Rpbmc6ICIrdGhpcy5fYmFzZVN0YXRlLmVuYyl9''@;'; put 'put ''fSksdy5mb3JFYWNoKGZ1bmN0aW9uKE4pe1IucHJvdG90eXBlW05dPWZ1bmN0aW9uKCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlLFo9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gVihudWxsPT09Sy50YWcpLEsudGFnPU4sdGhpcy5fdXNlQXJncyhaKSx0aGlz''@;'; put 'put ''fX0pLFIucHJvdG90eXBlLnVzZT1mdW5jdGlvbihPKXtWKE8pO3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gVihudWxsPT09Sy51c2UpLEsudXNlPU8sdGhpc30sUi5wcm90b3R5cGUub3B0aW9uYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLm9wdGlvbmFsPSEwLHRo''@;'; put 'put ''aXN9LFIucHJvdG90eXBlLmRlZj1mdW5jdGlvbihPKXt2YXIgSz10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIFYobnVsbD09PUsuZGVmYXVsdCksSy5kZWZhdWx0PU8sSy5vcHRpb25hbD0hMCx0aGlzfSxSLnByb3RvdHlwZS5leHBsaWNpdD1mdW5jdGlvbihPKXt2YXIgSz10aGlzLl9iYXNlU3Rh''@;'; put 'put ''dGU7cmV0dXJuIFYobnVsbD09PUsuZXhwbGljaXQmJm51bGw9PT1LLmltcGxpY2l0KSxLLmV4cGxpY2l0PU8sdGhpc30sUi5wcm90b3R5cGUuaW1wbGljaXQ9ZnVuY3Rpb24oTyl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBWKG51bGw9PT1LLmV4cGxpY2l0JiZudWxsPT09Sy5pbXBs''@;'; put 'put ''aWNpdCksSy5pbXBsaWNpdD1PLHRoaXN9LFIucHJvdG90eXBlLm9iaj1mdW5jdGlvbigpe3ZhciBPPXRoaXMuX2Jhc2VTdGF0ZSxLPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIE8ub2JqPSEwLDAhPT1LLmxlbmd0aCYmdGhpcy5fdXNlQXJncyhLKSx0aGlz''@;'; put 'put ''fSxSLnByb3RvdHlwZS5rZXk9ZnVuY3Rpb24oTyl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBWKG51bGw9PT1LLmtleSksSy5rZXk9Tyx0aGlzfSxSLnByb3RvdHlwZS5hbnk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLmFueT0hMCx0aGlzfSxSLnByb3RvdHlwZS5j''@;'; put 'put ''aG9pY2U9ZnVuY3Rpb24oTyl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBWKG51bGw9PT1LLmNob2ljZSksSy5jaG9pY2U9Tyx0aGlzLl91c2VBcmdzKE9iamVjdC5rZXlzKE8pLm1hcChmdW5jdGlvbihaKXtyZXR1cm4gT1taXX0pKSx0aGlzfSxSLnByb3RvdHlwZS5jb250YWlucz1m''@;'; put 'put ''dW5jdGlvbihPKXt2YXIgSz10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIFYobnVsbD09PUsudXNlKSxLLmNvbnRhaW5zPU8sdGhpc30sUi5wcm90b3R5cGUuX2RlY29kZT1mdW5jdGlvbihPLEspe3ZhciBaPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09Wi5wYXJlbnQpcmV0dXJuIE8ud3JhcFJl''@;'; put 'put ''c3VsdChaLmNoaWxkcmVuWzBdLl9kZWNvZGUoTyxLKSk7dmFyIHJlLFk9Wi5kZWZhdWx0LFc9ITAscT1udWxsO2lmKG51bGwhPT1aLmtleSYmKHE9Ty5lbnRlcktleShaLmtleSkpLFoub3B0aW9uYWwpe3ZhciBlZT1udWxsO2lmKG51bGwhPT1aLmV4cGxpY2l0P2VlPVouZXhwbGljaXQ6bnVs''@;'; put 'put ''bCE9PVouaW1wbGljaXQ/ZWU9Wi5pbXBsaWNpdDpudWxsIT09Wi50YWcmJihlZT1aLnRhZyksbnVsbCE9PWVlfHxaLmFueSl7aWYoVz10aGlzLl9wZWVrVGFnKE8sZWUsWi5hbnkpLE8uaXNFcnJvcihXKSlyZXR1cm4gV31lbHNle3ZhciBKPU8uc2F2ZSgpO3RyeXtudWxsPT09Wi5jaG9pY2U/''@;'; put 'put ''dGhpcy5fZGVjb2RlR2VuZXJpYyhaLnRhZyxPLEspOnRoaXMuX2RlY29kZUNob2ljZShPLEspLFc9ITB9Y2F0Y2h7Vz0hMX1PLnJlc3RvcmUoSil9fWlmKFoub2JqJiZXJiYocmU9Ty5lbnRlck9iamVjdCgpKSxXKXtpZihudWxsIT09Wi5leHBsaWNpdCl7dmFyIGllPXRoaXMuX2RlY29kZVRh''@;'; put 'put ''ZyhPLFouZXhwbGljaXQpO2lmKE8uaXNFcnJvcihpZSkpcmV0dXJuIGllO089aWV9dmFyIHVlPU8ub2Zmc2V0O2lmKG51bGw9PT1aLnVzZSYmbnVsbD09PVouY2hvaWNlKXtaLmFueSYmKEo9Ty5zYXZlKCkpO3ZhciBnZT10aGlzLl9kZWNvZGVUYWcoTyxudWxsIT09Wi5pbXBsaWNpdD9aLmlt''@;'; put 'put ''cGxpY2l0OloudGFnLFouYW55KTtpZihPLmlzRXJyb3IoZ2UpKXJldHVybiBnZTtaLmFueT9ZPU8ucmF3KEopOk89Z2V9aWYoSyYmSy50cmFjayYmbnVsbCE9PVoudGFnJiZLLnRyYWNrKE8ucGF0aCgpLHVlLE8ubGVuZ3RoLCJ0YWdnZWQiKSxLJiZLLnRyYWNrJiZudWxsIT09Wi50YWcmJksu''@;'; put 'put ''dHJhY2soTy5wYXRoKCksTy5vZmZzZXQsTy5sZW5ndGgsImNvbnRlbnQiKSxaLmFueXx8KFk9bnVsbD09PVouY2hvaWNlP3RoaXMuX2RlY29kZUdlbmVyaWMoWi50YWcsTyxLKTp0aGlzLl9kZWNvZGVDaG9pY2UoTyxLKSksTy5pc0Vycm9yKFkpKXJldHVybiBZO2lmKCFaLmFueSYmbnVsbD09''@;'; put 'put ''PVouY2hvaWNlJiZudWxsIT09Wi5jaGlsZHJlbiYmWi5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKE1lKXtNZS5fZGVjb2RlKE8sSyl9KSxaLmNvbnRhaW5zJiYoIm9jdHN0ciI9PT1aLnRhZ3x8ImJpdHN0ciI9PT1aLnRhZykpe3ZhciBfZT1uZXcgcChZKTtZPXRoaXMuX2dldFVzZShaLmNv''@;'; put 'put ''bnRhaW5zLE8uX3JlcG9ydGVyU3RhdGUub2JqKS5fZGVjb2RlKF9lLEspfX1yZXR1cm4gWi5vYmomJlcmJihZPU8ubGVhdmVPYmplY3QocmUpKSxudWxsPT09Wi5rZXl8fG51bGw9PT1ZJiYhMCE9PVc/bnVsbCE9PXEmJk8uZXhpdEtleShxKTpPLmxlYXZlS2V5KHEsWi5rZXksWSksWX0sUi5w''@;'; put 'put ''cm90b3R5cGUuX2RlY29kZUdlbmVyaWM9ZnVuY3Rpb24oTyxLLFope3ZhciBZPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4ic2VxIj09PU98fCJzZXQiPT09Tz9udWxsOiJzZXFvZiI9PT1PfHwic2V0b2YiPT09Tz90aGlzLl9kZWNvZGVMaXN0KEssTyxZLmFyZ3NbMF0sWik6L3N0ciQvLnRlc3Qo''@;'; put 'put ''Tyk/dGhpcy5fZGVjb2RlU3RyKEssTyxaKToib2JqaWQiPT09TyYmWS5hcmdzP3RoaXMuX2RlY29kZU9iamlkKEssWS5hcmdzWzBdLFkuYXJnc1sxXSxaKToib2JqaWQiPT09Tz90aGlzLl9kZWNvZGVPYmppZChLLG51bGwsbnVsbCxaKToiZ2VudGltZSI9PT1PfHwidXRjdGltZSI9PT1PP3Ro''@;'; put 'put ''aXMuX2RlY29kZVRpbWUoSyxPLFopOiJudWxsXyI9PT1PP3RoaXMuX2RlY29kZU51bGwoSyxaKToiYm9vbCI9PT1PP3RoaXMuX2RlY29kZUJvb2woSyxaKToib2JqRGVzYyI9PT1PP3RoaXMuX2RlY29kZVN0cihLLE8sWik6ImludCI9PT1PfHwiZW51bSI9PT1PP3RoaXMuX2RlY29kZUludChL''@;'; put 'put ''LFkuYXJncyYmWS5hcmdzWzBdLFopOm51bGwhPT1ZLnVzZT90aGlzLl9nZXRVc2UoWS51c2UsSy5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNvZGUoSyxaKTpLLmVycm9yKCJ1bmtub3duIHRhZzogIitPKX0sUi5wcm90b3R5cGUuX2dldFVzZT1mdW5jdGlvbihPLEspe3ZhciBaPXRoaXMuX2Jh''@;'; put 'put ''c2VTdGF0ZTtyZXR1cm4gWi51c2VEZWNvZGVyPXRoaXMuX3VzZShPLEspLFYobnVsbD09PVoudXNlRGVjb2Rlci5fYmFzZVN0YXRlLnBhcmVudCksWi51c2VEZWNvZGVyPVoudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmNoaWxkcmVuWzBdLFouaW1wbGljaXQhPT1aLnVzZURlY29kZXIuX2Jhc2VT''@;'; put 'put ''dGF0ZS5pbXBsaWNpdCYmKFoudXNlRGVjb2Rlcj1aLnVzZURlY29kZXIuY2xvbmUoKSxaLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdD1aLmltcGxpY2l0KSxaLnVzZURlY29kZXJ9LFIucHJvdG90eXBlLl9kZWNvZGVDaG9pY2U9ZnVuY3Rpb24oTyxLKXt2YXIgWj10aGlzLl9iYXNl''@;'; put 'put ''U3RhdGUsWT1udWxsLFc9ITE7cmV0dXJuIE9iamVjdC5rZXlzKFouY2hvaWNlKS5zb21lKGZ1bmN0aW9uKHEpe3ZhciBlZT1PLnNhdmUoKSxKPVouY2hvaWNlW3FdO3RyeXt2YXIgcmU9Si5fZGVjb2RlKE8sSyk7aWYoTy5pc0Vycm9yKHJlKSlyZXR1cm4hMTtZPXt0eXBlOnEsdmFsdWU6cmV9''@;'; put 'put ''LFc9ITB9Y2F0Y2h7cmV0dXJuIE8ucmVzdG9yZShlZSksITF9cmV0dXJuITB9LHRoaXMpLFc/WTpPLmVycm9yKCJDaG9pY2Ugbm90IG1hdGNoZWQiKX0sUi5wcm90b3R5cGUuX2NyZWF0ZUVuY29kZXJCdWZmZXI9ZnVuY3Rpb24oTyl7cmV0dXJuIG5ldyBfKE8sdGhpcy5yZXBvcnRlcil9LFIu''@;'; put 'put ''cHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oTyxLLFope3ZhciBZPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09WS5kZWZhdWx0fHxZLmRlZmF1bHQhPT1PKXt2YXIgVz10aGlzLl9lbmNvZGVWYWx1ZShPLEssWik7aWYodm9pZCAwIT09VyYmIXRoaXMuX3NraXBEZWZhdWx0KFcsSyxaKSly''@;'; put 'put ''ZXR1cm4gV319LFIucHJvdG90eXBlLl9lbmNvZGVWYWx1ZT1mdW5jdGlvbihPLEssWil7dmFyIFk9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1ZLnBhcmVudClyZXR1cm4gWS5jaGlsZHJlblswXS5fZW5jb2RlKE8sS3x8bmV3IEkpO3ZhciBKPW51bGw7aWYodGhpcy5yZXBvcnRlcj1LLFku''@;'; put 'put ''b3B0aW9uYWwmJnZvaWQgMD09PU8pe2lmKG51bGw9PT1ZLmRlZmF1bHQpcmV0dXJuO089WS5kZWZhdWx0fXZhciBXPW51bGwscT0hMTtpZihZLmFueSlKPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTyk7ZWxzZSBpZihZLmNob2ljZSlKPXRoaXMuX2VuY29kZUNob2ljZShPLEspO2Vsc2Ug''@;'; put 'put ''aWYoWS5jb250YWlucylXPXRoaXMuX2dldFVzZShZLmNvbnRhaW5zLFopLl9lbmNvZGUoTyxLKSxxPSEwO2Vsc2UgaWYoWS5jaGlsZHJlbilXPVkuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKHVlKXtpZigibnVsbF8iPT09dWUuX2Jhc2VTdGF0ZS50YWcpcmV0dXJuIHVlLl9lbmNvZGUobnVsbCxL''@;'; put 'put ''LE8pO2lmKG51bGw9PT11ZS5fYmFzZVN0YXRlLmtleSlyZXR1cm4gSy5lcnJvcigiQ2hpbGQgc2hvdWxkIGhhdmUgYSBrZXkiKTt2YXIgZ2U9Sy5lbnRlcktleSh1ZS5fYmFzZVN0YXRlLmtleSk7aWYoIm9iamVjdCIhPXR5cGVvZiBPKXJldHVybiBLLmVycm9yKCJDaGlsZCBleHBlY3RlZCwg''@;'; put 'put ''YnV0IGlucHV0IGlzIG5vdCBvYmplY3QiKTt2YXIgX2U9dWUuX2VuY29kZShPW3VlLl9iYXNlU3RhdGUua2V5XSxLLE8pO3JldHVybiBLLmxlYXZlS2V5KGdlKSxfZX0sdGhpcykuZmlsdGVyKGZ1bmN0aW9uKHVlKXtyZXR1cm4gdWV9KSxXPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoVyk7''@;'; put 'put ''ZWxzZSBpZigic2Vxb2YiPT09WS50YWd8fCJzZXRvZiI9PT1ZLnRhZyl7aWYoIVkuYXJnc3x8MSE9PVkuYXJncy5sZW5ndGgpcmV0dXJuIEsuZXJyb3IoIlRvbyBtYW55IGFyZ3MgZm9yIDogIitZLnRhZyk7aWYoIUFycmF5LmlzQXJyYXkoTykpcmV0dXJuIEsuZXJyb3IoInNlcW9mL3NldG9m''@;'; put 'put ''LCBidXQgZGF0YSBpcyBub3QgQXJyYXkiKTt2YXIgZWU9dGhpcy5jbG9uZSgpO2VlLl9iYXNlU3RhdGUuaW1wbGljaXQ9bnVsbCxXPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTy5tYXAoZnVuY3Rpb24odWUpe3JldHVybiB0aGlzLl9nZXRVc2UodGhpcy5fYmFzZVN0YXRlLmFyZ3NbMF0s''@;'; put 'put ''TykuX2VuY29kZSh1ZSxLKX0sZWUpKX1lbHNlIG51bGwhPT1ZLnVzZT9KPXRoaXMuX2dldFVzZShZLnVzZSxaKS5fZW5jb2RlKE8sSyk6KFc9dGhpcy5fZW5jb2RlUHJpbWl0aXZlKFkudGFnLE8pLHE9ITApO2lmKCFZLmFueSYmbnVsbD09PVkuY2hvaWNlKXt2YXIgcmU9bnVsbCE9PVkuaW1w''@;'; put 'put ''bGljaXQ/WS5pbXBsaWNpdDpZLnRhZyxpZT1udWxsPT09WS5pbXBsaWNpdD8idW5pdmVyc2FsIjoiY29udGV4dCI7bnVsbD09PXJlP251bGw9PT1ZLnVzZSYmSy5lcnJvcigiVGFnIGNvdWxkIGJlIG9taXR0ZWQgb25seSBmb3IgLnVzZSgpIik6bnVsbD09PVkudXNlJiYoSj10aGlzLl9lbmNv''@;'; put 'put ''ZGVDb21wb3NpdGUocmUscSxpZSxXKSl9cmV0dXJuIG51bGwhPT1ZLmV4cGxpY2l0JiYoSj10aGlzLl9lbmNvZGVDb21wb3NpdGUoWS5leHBsaWNpdCwhMSwiY29udGV4dCIsSikpLEp9LFIucHJvdG90eXBlLl9lbmNvZGVDaG9pY2U9ZnVuY3Rpb24oTyxLKXt2YXIgWj10aGlzLl9iYXNlU3Rh''@;'; put 'put ''dGUsWT1aLmNob2ljZVtPLnR5cGVdO3JldHVybiBZfHxWKCExLE8udHlwZSsiIG5vdCBmb3VuZCBpbiAiK0pTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKFouY2hvaWNlKSkpLFkuX2VuY29kZShPLnZhbHVlLEspfSxSLnByb3RvdHlwZS5fZW5jb2RlUHJpbWl0aXZlPWZ1bmN0aW9uKE8sSyl7''@;'; put 'put ''dmFyIFo9dGhpcy5fYmFzZVN0YXRlO2lmKC9zdHIkLy50ZXN0KE8pKXJldHVybiB0aGlzLl9lbmNvZGVTdHIoSyxPKTtpZigib2JqaWQiPT09TyYmWi5hcmdzKXJldHVybiB0aGlzLl9lbmNvZGVPYmppZChLLFoucmV2ZXJzZUFyZ3NbMF0sWi5hcmdzWzFdKTtpZigib2JqaWQiPT09TylyZXR1''@;'; put 'put ''cm4gdGhpcy5fZW5jb2RlT2JqaWQoSyxudWxsLG51bGwpO2lmKCJnZW50aW1lIj09PU98fCJ1dGN0aW1lIj09PU8pcmV0dXJuIHRoaXMuX2VuY29kZVRpbWUoSyxPKTtpZigibnVsbF8iPT09TylyZXR1cm4gdGhpcy5fZW5jb2RlTnVsbCgpO2lmKCJpbnQiPT09T3x8ImVudW0iPT09TylyZXR1''@;'; put 'put ''cm4gdGhpcy5fZW5jb2RlSW50KEssWi5hcmdzJiZaLnJldmVyc2VBcmdzWzBdKTtpZigiYm9vbCI9PT1PKXJldHVybiB0aGlzLl9lbmNvZGVCb29sKEspO2lmKCJvYmpEZXNjIj09PU8pcmV0dXJuIHRoaXMuX2VuY29kZVN0cihLLE8pO3Rocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdGFn''@;'; put 'put ''OiAiK08pfSxSLnByb3RvdHlwZS5faXNOdW1zdHI9ZnVuY3Rpb24oTyl7cmV0dXJuL15bMC05IF0qJC8udGVzdChPKX0sUi5wcm90b3R5cGUuX2lzUHJpbnRzdHI9ZnVuY3Rpb24oTyl7cmV0dXJuL15bQS1aYS16MC05ICdcKFwpXCssXC1cLlwvOj1cP10qJC8udGVzdChPKX19LDg0NjU6KGNl''@;'; put 'put ''LFgsYik9Pnt2YXIgST1iKDU3MTcpO2Z1bmN0aW9uIF8oVil7dGhpcy5fcmVwb3J0ZXJTdGF0ZT17b2JqOm51bGwscGF0aDpbXSxvcHRpb25zOlZ8fHt9LGVycm9yczpbXX19ZnVuY3Rpb24gcChWLHcpe3RoaXMucGF0aD1WLHRoaXMucmV0aHJvdyh3KX1YLmI9XyxfLnByb3RvdHlwZS5pc0Vy''@;'; put 'put ''cm9yPWZ1bmN0aW9uKHcpe3JldHVybiB3IGluc3RhbmNlb2YgcH0sXy5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe3ZhciB3PXRoaXMuX3JlcG9ydGVyU3RhdGU7cmV0dXJue29iajp3Lm9iaixwYXRoTGVuOncucGF0aC5sZW5ndGh9fSxfLnByb3RvdHlwZS5yZXN0b3JlPWZ1bmN0aW9uKHcp''@;'; put 'put ''e3ZhciBQPXRoaXMuX3JlcG9ydGVyU3RhdGU7UC5vYmo9dy5vYmosUC5wYXRoPVAucGF0aC5zbGljZSgwLHcucGF0aExlbil9LF8ucHJvdG90eXBlLmVudGVyS2V5PWZ1bmN0aW9uKHcpe3JldHVybiB0aGlzLl9yZXBvcnRlclN0YXRlLnBhdGgucHVzaCh3KX0sXy5wcm90b3R5cGUuZXhpdEtl''@;'; put 'put ''eT1mdW5jdGlvbih3KXt2YXIgUD10aGlzLl9yZXBvcnRlclN0YXRlO1AucGF0aD1QLnBhdGguc2xpY2UoMCx3LTEpfSxfLnByb3RvdHlwZS5sZWF2ZUtleT1mdW5jdGlvbih3LFAsRil7dmFyIFI9dGhpcy5fcmVwb3J0ZXJTdGF0ZTt0aGlzLmV4aXRLZXkodyksbnVsbCE9PVIub2JqJiYoUi5v''@;'; put 'put ''YmpbUF09Ril9LF8ucHJvdG90eXBlLnBhdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLmpvaW4oIi8iKX0sXy5wcm90b3R5cGUuZW50ZXJPYmplY3Q9ZnVuY3Rpb24oKXt2YXIgdz10aGlzLl9yZXBvcnRlclN0YXRlLFA9dy5vYmo7cmV0dXJuIHcub2JqPXt9''@;'; put 'put ''LFB9LF8ucHJvdG90eXBlLmxlYXZlT2JqZWN0PWZ1bmN0aW9uKHcpe3ZhciBQPXRoaXMuX3JlcG9ydGVyU3RhdGUsRj1QLm9iajtyZXR1cm4gUC5vYmo9dyxGfSxfLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbih3KXt2YXIgUCxGPXRoaXMuX3JlcG9ydGVyU3RhdGUsUj13IGluc3RhbmNlb2Yg''@;'; put 'put ''cDtpZihQPVI/dzpuZXcgcChGLnBhdGgubWFwKGZ1bmN0aW9uKHope3JldHVybiJbIitKU09OLnN0cmluZ2lmeSh6KSsiXSJ9KS5qb2luKCIiKSx3Lm1lc3NhZ2V8fHcsdy5zdGFjayksIUYub3B0aW9ucy5wYXJ0aWFsKXRocm93IFA7cmV0dXJuIFJ8fEYuZXJyb3JzLnB1c2goUCksUH0sXy5w''@;'; put 'put ''cm90b3R5cGUud3JhcFJlc3VsdD1mdW5jdGlvbih3KXt2YXIgUD10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybiBQLm9wdGlvbnMucGFydGlhbD97cmVzdWx0OnRoaXMuaXNFcnJvcih3KT9udWxsOncsZXJyb3JzOlAuZXJyb3JzfTp3fSxJKHAsRXJyb3IpLHAucHJvdG90eXBlLnJldGhyb3c9''@;'; put 'put ''ZnVuY3Rpb24odyl7aWYodGhpcy5tZXNzYWdlPXcrIiBhdDogIisodGhpcy5wYXRofHwiKHNoYWxsb3cpIiksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMscCksIXRoaXMuc3RhY2spdHJ5e3Rocm93IG5ldyBFcnJvcih0aGlzLm1lc3NhZ2Up''@;'; put 'put ''fWNhdGNoKFApe3RoaXMuc3RhY2s9UC5zdGFja31yZXR1cm4gdGhpc319LDE2MDooY2UsWCxiKT0+e3ZhciBJPWIoNjgyNik7WC50YWdDbGFzcz17MDoidW5pdmVyc2FsIiwxOiJhcHBsaWNhdGlvbiIsMjoiY29udGV4dCIsMzoicHJpdmF0ZSJ9LFgudGFnQ2xhc3NCeU5hbWU9SS5fcmV2ZXJz''@;'; put 'put ''ZShYLnRhZ0NsYXNzKSxYLnRhZz17MDoiZW5kIiwxOiJib29sIiwyOiJpbnQiLDM6ImJpdHN0ciIsNDoib2N0c3RyIiw1OiJudWxsXyIsNjoib2JqaWQiLDc6Im9iakRlc2MiLDg6ImV4dGVybmFsIiw5OiJyZWFsIiwxMDoiZW51bSIsMTE6ImVtYmVkIiwxMjoidXRmOHN0ciIsMTM6InJlbGF0''@;'; put 'put ''aXZlT2lkIiwxNjoic2VxIiwxNzoic2V0IiwxODoibnVtc3RyIiwxOToicHJpbnRzdHIiLDIwOiJ0NjFzdHIiLDIxOiJ2aWRlb3N0ciIsMjI6ImlhNXN0ciIsMjM6InV0Y3RpbWUiLDI0OiJnZW50aW1lIiwyNToiZ3JhcGhzdHIiLDI2OiJpc282NDZzdHIiLDI3OiJnZW5zdHIiLDI4OiJ1bmlz''@;'; put 'put ''dHIiLDI5OiJjaGFyc3RyIiwzMDoiYm1wc3RyIn0sWC50YWdCeU5hbWU9SS5fcmV2ZXJzZShYLnRhZyl9LDY4MjY6KGNlLFgsYik9Pnt2YXIgST1YO0kuX3JldmVyc2U9ZnVuY3Rpb24ocCl7dmFyIFY9e307cmV0dXJuIE9iamVjdC5rZXlzKHApLmZvckVhY2goZnVuY3Rpb24odyl7KDB8dyk9''@;'; put 'put ''PXcmJih3fD0wKSxWW3Bbd11dPXd9KSxWfSxJLmRlcj1iKDE2MCl9LDE2NzE6KGNlLFgsYik9Pnt2YXIgST1iKDU3MTcpLF89Yig5ODA5KSxwPV8uYmFzZSxWPV8uYmlnbnVtLHc9Xy5jb25zdGFudHMuZGVyO2Z1bmN0aW9uIFAoTil7dGhpcy5lbmM9ImRlciIsdGhpcy5uYW1lPU4ubmFtZSx0''@;'; put 'put ''aGlzLmVudGl0eT1OLHRoaXMudHJlZT1uZXcgRix0aGlzLnRyZWUuX2luaXQoTi5ib2R5KX1mdW5jdGlvbiBGKE4pe3AuTm9kZS5jYWxsKHRoaXMsImRlciIsTil9ZnVuY3Rpb24gUihOLE8pe3ZhciBLPU4ucmVhZFVJbnQ4KE8pO2lmKE4uaXNFcnJvcihLKSlyZXR1cm4gSzt2YXIgWj13LnRh''@;'; put 'put ''Z0NsYXNzW0s+PjZdLFk9ISgzMiZLKTtpZigzMSZ+SylLJj0zMTtlbHNle3ZhciBXPUs7Zm9yKEs9MDshKDEyOCZ+Vyk7KXtpZihXPU4ucmVhZFVJbnQ4KE8pLE4uaXNFcnJvcihXKSlyZXR1cm4gVztLPDw9NyxLfD0xMjcmV319cmV0dXJue2NsczpaLHByaW1pdGl2ZTpZLHRhZzpLLHRhZ1N0''@;'; put 'put ''cjp3LnRhZ1tLXX19ZnVuY3Rpb24geihOLE8sSyl7dmFyIFo9Ti5yZWFkVUludDgoSyk7aWYoTi5pc0Vycm9yKFopKXJldHVybiBaO2lmKCFPJiYxMjg9PT1aKXJldHVybiBudWxsO2lmKCEoMTI4JlopKXJldHVybiBaO3ZhciBZPTEyNyZaO2lmKFk+NClyZXR1cm4gTi5lcnJvcigibGVuZ3Ro''@;'; put 'put ''IG9jdGVjdCBpcyB0b28gbG9uZyIpO1o9MDtmb3IodmFyIFc9MDtXPFk7VysrKXtaPDw9ODt2YXIgcT1OLnJlYWRVSW50OChLKTtpZihOLmlzRXJyb3IocSkpcmV0dXJuIHE7Wnw9cX1yZXR1cm4gWn1jZS5leHBvcnRzPVAsUC5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKE8sSyl7cmV0dXJu''@;'; put 'put ''IE8gaW5zdGFuY2VvZiBwLkRlY29kZXJCdWZmZXJ8fChPPW5ldyBwLkRlY29kZXJCdWZmZXIoTyxLKSksdGhpcy50cmVlLl9kZWNvZGUoTyxLKX0sSShGLHAuTm9kZSksRi5wcm90b3R5cGUuX3BlZWtUYWc9ZnVuY3Rpb24oTyxLLFope2lmKE8uaXNFbXB0eSgpKXJldHVybiExO3ZhciBZPU8u''@;'; put 'put ''c2F2ZSgpLFc9UihPLCdGYWlsZWQgdG8gcGVlayB0YWc6ICInK0srJyInKTtyZXR1cm4gTy5pc0Vycm9yKFcpP1c6KE8ucmVzdG9yZShZKSxXLnRhZz09PUt8fFcudGFnU3RyPT09S3x8Vy50YWdTdHIrIm9mIj09PUt8fFopfSxGLnByb3RvdHlwZS5fZGVjb2RlVGFnPWZ1bmN0aW9uKE8sSyxa''@;'; put 'put ''KXt2YXIgWT1SKE8sJ0ZhaWxlZCB0byBkZWNvZGUgdGFnIG9mICInK0srJyInKTtpZihPLmlzRXJyb3IoWSkpcmV0dXJuIFk7dmFyIFc9eihPLFkucHJpbWl0aXZlLCdGYWlsZWQgdG8gZ2V0IGxlbmd0aCBvZiAiJytLKyciJyk7aWYoTy5pc0Vycm9yKFcpKXJldHVybiBXO2lmKCFaJiZZLnRh''@;'; put 'put ''ZyE9PUsmJlkudGFnU3RyIT09SyYmWS50YWdTdHIrIm9mIiE9PUspcmV0dXJuIE8uZXJyb3IoJ0ZhaWxlZCB0byBtYXRjaCB0YWc6ICInK0srJyInKTtpZihZLnByaW1pdGl2ZXx8bnVsbCE9PVcpcmV0dXJuIE8uc2tpcChXLCdGYWlsZWQgdG8gbWF0Y2ggYm9keSBvZjogIicrSysnIicpO3Zh''@;'; put 'put ''ciBxPU8uc2F2ZSgpLGVlPXRoaXMuX3NraXBVbnRpbEVuZChPLCdGYWlsZWQgdG8gc2tpcCBpbmRlZmluaXRlIGxlbmd0aCBib2R5OiAiJyt0aGlzLnRhZysnIicpO3JldHVybiBPLmlzRXJyb3IoZWUpP2VlOihXPU8ub2Zmc2V0LXEub2Zmc2V0LE8ucmVzdG9yZShxKSxPLnNraXAoVywnRmFp''@;'; put 'put ''bGVkIHRvIG1hdGNoIGJvZHkgb2Y6ICInK0srJyInKSl9LEYucHJvdG90eXBlLl9za2lwVW50aWxFbmQ9ZnVuY3Rpb24oTyxLKXtmb3IoOzspe3ZhciBaPVIoTyxLKTtpZihPLmlzRXJyb3IoWikpcmV0dXJuIFo7dmFyIFcsWT16KE8sWi5wcmltaXRpdmUsSyk7aWYoTy5pc0Vycm9yKFkpKXJl''@;'; put 'put ''dHVybiBZO2lmKFc9Wi5wcmltaXRpdmV8fG51bGwhPT1ZP08uc2tpcChZKTp0aGlzLl9za2lwVW50aWxFbmQoTyxLKSxPLmlzRXJyb3IoVykpcmV0dXJuIFc7aWYoImVuZCI9PT1aLnRhZ1N0cilicmVha319LEYucHJvdG90eXBlLl9kZWNvZGVMaXN0PWZ1bmN0aW9uKE8sSyxaLFkpe2Zvcih2''@;'; put 'put ''YXIgVz1bXTshTy5pc0VtcHR5KCk7KXt2YXIgcT10aGlzLl9wZWVrVGFnKE8sImVuZCIpO2lmKE8uaXNFcnJvcihxKSlyZXR1cm4gcTt2YXIgZWU9Wi5kZWNvZGUoTywiZGVyIixZKTtpZihPLmlzRXJyb3IoZWUpJiZxKWJyZWFrO1cucHVzaChlZSl9cmV0dXJuIFd9LEYucHJvdG90eXBlLl9k''@;'; put 'put ''ZWNvZGVTdHI9ZnVuY3Rpb24oTyxLKXtpZigiYml0c3RyIj09PUspe3ZhciBaPU8ucmVhZFVJbnQ4KCk7cmV0dXJuIE8uaXNFcnJvcihaKT9aOnt1bnVzZWQ6WixkYXRhOk8ucmF3KCl9fWlmKCJibXBzdHIiPT09Syl7dmFyIFk9Ty5yYXcoKTtpZihZLmxlbmd0aCUyPT0xKXJldHVybiBPLmVy''@;'; put 'put ''cm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogYm1wc3RyIGxlbmd0aCBtaXNtYXRjaCIpO2Zvcih2YXIgVz0iIixxPTA7cTxZLmxlbmd0aC8yO3ErKylXKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFkucmVhZFVJbnQxNkJFKDIqcSkpO3JldHVybiBXfWlmKCJudW1zdHIiPT09Syl7dmFyIGVl''@;'; put 'put ''PU8ucmF3KCkudG9TdHJpbmcoImFzY2lpIik7cmV0dXJuIHRoaXMuX2lzTnVtc3RyKGVlKT9lZTpPLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogbnVtc3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMiKX1pZigib2N0c3RyIj09PUspcmV0dXJuIE8ucmF3KCk7aWYoIm9iakRlc2Mi''@;'; put 'put ''PT09SylyZXR1cm4gTy5yYXcoKTtpZigicHJpbnRzdHIiPT09Syl7dmFyIEo9Ty5yYXcoKS50b1N0cmluZygiYXNjaWkiKTtyZXR1cm4gdGhpcy5faXNQcmludHN0cihKKT9KOk8uZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBwcmludHN0ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJz''@;'; put 'put ''Iil9cmV0dXJuL3N0ciQvLnRlc3QoSyk/Ty5yYXcoKS50b1N0cmluZygpOk8uZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiAiK0srIiB1bnN1cHBvcnRlZCIpfSxGLnByb3RvdHlwZS5fZGVjb2RlT2JqaWQ9ZnVuY3Rpb24oTyxLLFope2Zvcih2YXIgWSxXPVtdLHE9MDshTy5pc0Vt''@;'; put 'put ''cHR5KCk7KXt2YXIgZWU9Ty5yZWFkVUludDgoKTtxPDw9NyxxfD0xMjcmZWUsISgxMjgmZWUpJiYoVy5wdXNoKHEpLHE9MCl9aWYoMTI4JmVlJiZXLnB1c2gocSksWT1aP1c6W1dbMF0vNDB8MCxXWzBdJTQwXS5jb25jYXQoVy5zbGljZSgxKSksSyl7dmFyIGllPUtbWS5qb2luKCIgIildO3Zv''@;'; put 'put ''aWQgMD09PWllJiYoaWU9S1tZLmpvaW4oIi4iKV0pLHZvaWQgMCE9PWllJiYoWT1pZSl9cmV0dXJuIFl9LEYucHJvdG90eXBlLl9kZWNvZGVUaW1lPWZ1bmN0aW9uKE8sSyl7dmFyIFo9Ty5yYXcoKS50b1N0cmluZygpO2lmKCJnZW50aW1lIj09PUspdmFyIFk9MHxaLnNsaWNlKDAsNCksVz0w''@;'; put 'put ''fFouc2xpY2UoNCw2KSxxPTB8Wi5zbGljZSg2LDgpLGVlPTB8Wi5zbGljZSg4LDEwKSxKPTB8Wi5zbGljZSgxMCwxMikscmU9MHxaLnNsaWNlKDEyLDE0KTtlbHNle2lmKCJ1dGN0aW1lIiE9PUspcmV0dXJuIE8uZXJyb3IoIkRlY29kaW5nICIrSysiIHRpbWUgaXMgbm90IHN1cHBvcnRlZCB5''@;'; put 'put ''ZXQiKTtZPTB8Wi5zbGljZSgwLDIpLFc9MHxaLnNsaWNlKDIsNCkscT0wfFouc2xpY2UoNCw2KSxlZT0wfFouc2xpY2UoNiw4KSxKPTB8Wi5zbGljZSg4LDEwKSxyZT0wfFouc2xpY2UoMTAsMTIpLFk9WTw3MD8yZTMrWToxOTAwK1l9cmV0dXJuIERhdGUuVVRDKFksVy0xLHEsZWUsSixyZSww''@;'; put 'put ''KX0sRi5wcm90b3R5cGUuX2RlY29kZU51bGw9ZnVuY3Rpb24oTyl7cmV0dXJuIG51bGx9LEYucHJvdG90eXBlLl9kZWNvZGVCb29sPWZ1bmN0aW9uKE8pe3ZhciBLPU8ucmVhZFVJbnQ4KCk7cmV0dXJuIE8uaXNFcnJvcihLKT9LOjAhPT1LfSxGLnByb3RvdHlwZS5fZGVjb2RlSW50PWZ1bmN0''@;'; put 'put ''aW9uKE8sSyl7dmFyIFo9Ty5yYXcoKSxZPW5ldyBWKFopO3JldHVybiBLJiYoWT1LW1kudG9TdHJpbmcoMTApXXx8WSksWX0sRi5wcm90b3R5cGUuX3VzZT1mdW5jdGlvbihPLEspe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBPJiYoTz1PKEspKSxPLl9nZXREZWNvZGVyKCJkZXIiKS50cmVl''@;'; put 'put ''fX0sODMwNzooY2UsWCxiKT0+e3ZhciBJPVg7SS5kZXI9YigxNjcxKSxJLnBlbT1iKDk2MzEpfSw5NjMxOihjZSxYLGIpPT57dmFyIEk9Yig1NzE3KSxfPWIoODc2NCkuQnVmZmVyLHA9YigxNjcxKTtmdW5jdGlvbiBWKHcpe3AuY2FsbCh0aGlzLHcpLHRoaXMuZW5jPSJwZW0ifUkoVixwKSxj''@;'; put 'put ''ZS5leHBvcnRzPVYsVi5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKFAsRil7Zm9yKHZhciBSPVAudG9TdHJpbmcoKS5zcGxpdCgvW1xyXG5dKy9nKSx6PUYubGFiZWwudG9VcHBlckNhc2UoKSxOPS9eLS0tLS0oQkVHSU58RU5EKSAoW14tXSspLS0tLS0kLyxPPS0xLEs9LTEsWj0wO1o8Ui5s''@;'; put 'put ''ZW5ndGg7WisrKXt2YXIgWT1SW1pdLm1hdGNoKE4pO2lmKG51bGwhPT1ZJiZZWzJdPT09eil7aWYoLTEhPT1PKXtpZigiRU5EIiE9PVlbMV0pYnJlYWs7Sz1aO2JyZWFrfWlmKCJCRUdJTiIhPT1ZWzFdKWJyZWFrO089Wn19aWYoLTE9PT1PfHwtMT09PUspdGhyb3cgbmV3IEVycm9yKCJQRU0g''@;'; put 'put ''c2VjdGlvbiBub3QgZm91bmQgZm9yOiAiK3opO3ZhciBXPVIuc2xpY2UoTysxLEspLmpvaW4oIiIpO1cucmVwbGFjZSgvW15hLXowLTlcK1wvPV0rL2dpLCIiKTt2YXIgcT1uZXcgXyhXLCJiYXNlNjQiKTtyZXR1cm4gcC5wcm90b3R5cGUuZGVjb2RlLmNhbGwodGhpcyxxLEYpfX0sNjk4NDoo''@;'; put 'put ''Y2UsWCxiKT0+e3ZhciBJPWIoNTcxNyksXz1iKDg3NjQpLkJ1ZmZlcixwPWIoOTgwOSksVj1wLmJhc2Usdz1wLmNvbnN0YW50cy5kZXI7ZnVuY3Rpb24gUChOKXt0aGlzLmVuYz0iZGVyIix0aGlzLm5hbWU9Ti5uYW1lLHRoaXMuZW50aXR5PU4sdGhpcy50cmVlPW5ldyBGLHRoaXMudHJlZS5f''@;'; put 'put ''aW5pdChOLmJvZHkpfWZ1bmN0aW9uIEYoTil7Vi5Ob2RlLmNhbGwodGhpcywiZGVyIixOKX1mdW5jdGlvbiBSKE4pe3JldHVybiBOPDEwPyIwIitOOk59Y2UuZXhwb3J0cz1QLFAucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihPLEspe3JldHVybiB0aGlzLnRyZWUuX2VuY29kZShPLEspLmpv''@;'; put 'put ''aW4oKX0sSShGLFYuTm9kZSksRi5wcm90b3R5cGUuX2VuY29kZUNvbXBvc2l0ZT1mdW5jdGlvbihPLEssWixZKXt2YXIgSixXPWZ1bmN0aW9uIHooTixPLEssWil7dmFyIFk7aWYoInNlcW9mIj09PU4/Tj0ic2VxIjoic2V0b2YiPT09TiYmKE49InNldCIpLHcudGFnQnlOYW1lLmhhc093blBy''@;'; put 'put ''b3BlcnR5KE4pKVk9dy50YWdCeU5hbWVbTl07ZWxzZXtpZigibnVtYmVyIiE9dHlwZW9mIE58fCgwfE4pIT09TilyZXR1cm4gWi5lcnJvcigiVW5rbm93biB0YWc6ICIrTik7WT1OfXJldHVybiBZPj0zMT9aLmVycm9yKCJNdWx0aS1vY3RldCB0YWcgZW5jb2RpbmcgdW5zdXBwb3J0ZWQiKToo''@;'; put 'put ''T3x8KFl8PTMyKSxZfD13LnRhZ0NsYXNzQnlOYW1lW0t8fCJ1bml2ZXJzYWwiXTw8Nil9KE8sSyxaLHRoaXMucmVwb3J0ZXIpO2lmKFkubGVuZ3RoPDEyOClyZXR1cm4oSj1uZXcgXygyKSlbMF09VyxKWzFdPVkubGVuZ3RoLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW0osWV0pO2Zvcih2''@;'; put 'put ''YXIgcT0xLGVlPVkubGVuZ3RoO2VlPj0yNTY7ZWU+Pj04KXErKzsoSj1uZXcgXygyK3EpKVswXT1XLEpbMV09MTI4fHEsZWU9MStxO2Zvcih2YXIgcmU9WS5sZW5ndGg7cmU+MDtlZS0tLHJlPj49OClKW2VlXT0yNTUmcmU7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW0osWV0p''@;'; put 'put ''fSxGLnByb3RvdHlwZS5fZW5jb2RlU3RyPWZ1bmN0aW9uKE8sSyl7aWYoImJpdHN0ciI9PT1LKXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFswfE8udW51c2VkLE8uZGF0YV0pO2lmKCJibXBzdHIiPT09Syl7Zm9yKHZhciBaPW5ldyBfKDIqTy5sZW5ndGgpLFk9MDtZPE8ubGVu''@;'; put 'put ''Z3RoO1krKylaLndyaXRlVUludDE2QkUoTy5jaGFyQ29kZUF0KFkpLDIqWSk7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWil9cmV0dXJuIm51bXN0ciI9PT1LP3RoaXMuX2lzTnVtc3RyKE8pP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTyk6dGhpcy5yZXBvcnRlci5lcnJv''@;'; put 'put ''cigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciBzdXBwb3J0cyBvbmx5IGRpZ2l0cyBhbmQgc3BhY2UiKToicHJpbnRzdHIiPT09Sz90aGlzLl9pc1ByaW50c3RyKE8pP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTyk6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Yg''@;'; put 'put ''c3RyaW5nIHR5cGU6IHByaW50c3RyIHN1cHBvcnRzIG9ubHkgbGF0aW4gdXBwZXIgYW5kIGxvd2VyIGNhc2UgbGV0dGVycywgZGlnaXRzLCBzcGFjZSwgYXBvc3Ryb3BoZSwgbGVmdCBhbmQgcmlndGggcGFyZW50aGVzaXMsIHBsdXMgc2lnbiwgY29tbWEsIGh5cGhlbiwgZG90LCBzbGFzaCwg''@;'; put 'put ''Y29sb24sIGVxdWFsIHNpZ24sIHF1ZXN0aW9uIG1hcmsiKTovc3RyJC8udGVzdChLKXx8Im9iakRlc2MiPT09Sz90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKE8pOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiAiK0srIiB1bnN1cHBvcnRlZCIpfSxGLnBy''@;'; put 'put ''b3RvdHlwZS5fZW5jb2RlT2JqaWQ9ZnVuY3Rpb24oTyxLLFope2lmKCJzdHJpbmciPT10eXBlb2YgTyl7aWYoIUspcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoInN0cmluZyBvYmppZCBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAgZm91bmQiKTtpZighSy5oYXNPd25Qcm9wZXJ0eShPKSly''@;'; put 'put ''ZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigib2JqaWQgbm90IGZvdW5kIGluIHZhbHVlcyBtYXAiKTtPPUtbT10uc3BsaXQoL1tcc1wuXSsvZyk7Zm9yKHZhciBZPTA7WTxPLmxlbmd0aDtZKyspT1tZXXw9MH1lbHNlIGlmKEFycmF5LmlzQXJyYXkoTykpZm9yKE89Ty5zbGljZSgpLFk9MDtZ''@;'; put 'put ''PE8ubGVuZ3RoO1krKylPW1ldfD0wO2lmKCFBcnJheS5pc0FycmF5KE8pKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJvYmppZCgpIHNob3VsZCBiZSBlaXRoZXIgYXJyYXkgb3Igc3RyaW5nLCBnb3Q6ICIrSlNPTi5zdHJpbmdpZnkoTykpO2lmKCFaKXtpZihPWzFdPj00MClyZXR1cm4g''@;'; put 'put ''dGhpcy5yZXBvcnRlci5lcnJvcigiU2Vjb25kIG9iamlkIGlkZW50aWZpZXIgT09CIik7Ty5zcGxpY2UoMCwyLDQwKk9bMF0rT1sxXSl9dmFyIFc9MDtmb3IoWT0wO1k8Ty5sZW5ndGg7WSsrKXt2YXIgcT1PW1ldO2ZvcihXKys7cT49MTI4O3E+Pj03KVcrK312YXIgZWU9bmV3IF8oVyksSj1l''@;'; put 'put ''ZS5sZW5ndGgtMTtmb3IoWT1PLmxlbmd0aC0xO1k+PTA7WS0tKWZvcihlZVtKLS1dPTEyNyYocT1PW1ldKTsocT4+PTcpPjA7KWVlW0otLV09MTI4fDEyNyZxO3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGVlKX0sRi5wcm90b3R5cGUuX2VuY29kZVRpbWU9ZnVuY3Rpb24oTyxL''@;'; put 'put ''KXt2YXIgWixZPW5ldyBEYXRlKE8pO3JldHVybiJnZW50aW1lIj09PUs/Wj1bUihZLmdldEZ1bGxZZWFyKCkpLFIoWS5nZXRVVENNb250aCgpKzEpLFIoWS5nZXRVVENEYXRlKCkpLFIoWS5nZXRVVENIb3VycygpKSxSKFkuZ2V0VVRDTWludXRlcygpKSxSKFkuZ2V0VVRDU2Vjb25kcygpKSwi''@;'; put 'put ''WiJdLmpvaW4oIiIpOiJ1dGN0aW1lIj09PUs/Wj1bUihZLmdldEZ1bGxZZWFyKCklMTAwKSxSKFkuZ2V0VVRDTW9udGgoKSsxKSxSKFkuZ2V0VVRDRGF0ZSgpKSxSKFkuZ2V0VVRDSG91cnMoKSksUihZLmdldFVUQ01pbnV0ZXMoKSksUihZLmdldFVUQ1NlY29uZHMoKSksIloiXS5qb2luKCIi''@;'; put 'put ''KTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyAiK0srIiB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0IiksdGhpcy5fZW5jb2RlU3RyKFosIm9jdHN0ciIpfSxGLnByb3RvdHlwZS5fZW5jb2RlTnVsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKCIi''@;'; put 'put ''KX0sRi5wcm90b3R5cGUuX2VuY29kZUludD1mdW5jdGlvbihPLEspe2lmKCJzdHJpbmciPT10eXBlb2YgTyl7aWYoIUspcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlN0cmluZyBpbnQgb3IgZW51bSBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAiKTtpZighSy5oYXNPd25Qcm9wZXJ0eShP''@;'; put 'put ''KSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiVmFsdWVzIG1hcCBkb2Vzbid0IGNvbnRhaW46ICIrSlNPTi5zdHJpbmdpZnkoTykpO089S1tPXX1pZigibnVtYmVyIiE9dHlwZW9mIE8mJiFfLmlzQnVmZmVyKE8pKXt2YXIgWj1PLnRvQXJyYXkoKTshTy5zaWduJiYxMjgmWlswXSYmWi51''@;'; put 'put ''bnNoaWZ0KDApLE89bmV3IF8oWil9aWYoXy5pc0J1ZmZlcihPKSl7dmFyIFk9Ty5sZW5ndGg7MD09PU8ubGVuZ3RoJiZZKys7dmFyIHE9bmV3IF8oWSk7cmV0dXJuIE8uY29weShxKSwwPT09Ty5sZW5ndGgmJihxWzBdPTApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIocSl9aWYoTzwxMjgp''@;'; put 'put ''cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTyk7aWYoTzwyNTYpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzAsT10pO1k9MTtmb3IodmFyIFc9TztXPj0yNTY7Vz4+PTgpWSsrO2ZvcihXPShxPW5ldyBBcnJheShZKSkubGVuZ3RoLTE7Vz49MDtXLS0pcVtXXT0y''@;'; put 'put ''NTUmTyxPPj49ODtyZXR1cm4gMTI4JnFbMF0mJnEudW5zaGlmdCgwKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKG5ldyBfKHEpKX0sRi5wcm90b3R5cGUuX2VuY29kZUJvb2w9ZnVuY3Rpb24oTyl7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTz8yNTU6MCl9LEYucHJvdG90''@;'; put 'put ''eXBlLl91c2U9ZnVuY3Rpb24oTyxLKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTyYmKE89TyhLKSksTy5fZ2V0RW5jb2RlcigiZGVyIikudHJlZX0sRi5wcm90b3R5cGUuX3NraXBEZWZhdWx0PWZ1bmN0aW9uKE8sSyxaKXt2YXIgVyxZPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09WS5k''@;'; put 'put ''ZWZhdWx0KXJldHVybiExO3ZhciBxPU8uam9pbigpO2lmKHZvaWQgMD09PVkuZGVmYXVsdEJ1ZmZlciYmKFkuZGVmYXVsdEJ1ZmZlcj10aGlzLl9lbmNvZGVWYWx1ZShZLmRlZmF1bHQsSyxaKS5qb2luKCkpLHEubGVuZ3RoIT09WS5kZWZhdWx0QnVmZmVyLmxlbmd0aClyZXR1cm4hMTtmb3Io''@;'; put 'put ''Vz0wO1c8cS5sZW5ndGg7VysrKWlmKHFbV10hPT1ZLmRlZmF1bHRCdWZmZXJbV10pcmV0dXJuITE7cmV0dXJuITB9fSw2NTc5OihjZSxYLGIpPT57dmFyIEk9WDtJLmRlcj1iKDY5ODQpLEkucGVtPWIoMjg4Myl9LDI4ODM6KGNlLFgsYik9Pnt2YXIgST1iKDU3MTcpLF89Yig2OTg0KTtmdW5j''@;'; put 'put ''dGlvbiBwKFYpe18uY2FsbCh0aGlzLFYpLHRoaXMuZW5jPSJwZW0ifUkocCxfKSxjZS5leHBvcnRzPXAscC5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHcsUCl7Zm9yKHZhciBSPV8ucHJvdG90eXBlLmVuY29kZS5jYWxsKHRoaXMsdykudG9TdHJpbmcoImJhc2U2NCIpLHo9WyItLS0tLUJF''@;'; put 'put ''R0lOICIrUC5sYWJlbCsiLS0tLS0iXSxOPTA7TjxSLmxlbmd0aDtOKz02NCl6LnB1c2goUi5zbGljZShOLE4rNjQpKTtyZXR1cm4gei5wdXNoKCItLS0tLUVORCAiK1AubGFiZWwrIi0tLS0tIiksei5qb2luKCJcbiIpfX0sNDU5MDpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJLF8peyJ1''@;'; put 'put ''c2Ugc3RyaWN0IjtmdW5jdGlvbiBwKEIsZyl7aWYoIUIpdGhyb3cgbmV3IEVycm9yKGd8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gVihCLGcpe0Iuc3VwZXJfPWc7dmFyIHk9ZnVuY3Rpb24oKXt9O3kucHJvdG90eXBlPWcucHJvdG90eXBlLEIucHJvdG90eXBlPW5ldyB5LEIucHJv''@;'; put 'put ''dG90eXBlLmNvbnN0cnVjdG9yPUJ9ZnVuY3Rpb24gdyhCLGcseSl7aWYody5pc0JOKEIpKXJldHVybiBCO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1CJiYoKCJsZSI9PT1nfHwiYmUiPT09ZykmJih5PWcsZz0xMCks''@;'; put 'put ''dGhpcy5faW5pdChCfHwwLGd8fDEwLHl8fCJiZSIpKX12YXIgUDsib2JqZWN0Ij09dHlwZW9mIEk/SS5leHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3RyeXtQPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpiKDk1''@;'; put 'put ''MCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKEIsZyl7dmFyIHk9Qi5jaGFyQ29kZUF0KGcpO3JldHVybiB5Pj02NSYmeTw9NzA/eS01NTp5Pj05NyYmeTw9MTAyP3ktODc6eS00OCYxNX1mdW5jdGlvbiBSKEIsZyx5KXt2YXIgeD1GKEIseSk7cmV0dXJuIHktMT49ZyYmKHh8PUYoQix5LTEp''@;'; put 'put ''PDw0KSx4fWZ1bmN0aW9uIHooQixnLHkseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbihCLmxlbmd0aCx5KSxIPWc7SDxUO0grKyl7dmFyIGo9Qi5jaGFyQ29kZUF0KEgpLTQ4O0MqPXgsQys9aj49NDk/ai00OSsxMDpqPj0xNz9qLTE3KzEwOmp9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKGcp''@;'; put 'put ''e3JldHVybiBnIGluc3RhbmNlb2Ygd3x8bnVsbCE9PWcmJiJvYmplY3QiPT10eXBlb2YgZyYmZy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkoZy53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKGcseSl7cmV0dXJuIGcuY21wKHkpPjA/Zzp5fSx3Lm1pbj1m''@;'; put 'put ''dW5jdGlvbihnLHkpe3JldHVybiBnLmNtcCh5KTwwP2c6eX0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oZyx5LHgpe2lmKCJudW1iZXIiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihnLHkseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0QXJy''@;'; put 'put ''YXkoZyx5LHgpOyJoZXgiPT09eSYmKHk9MTYpLHAoeT09PSgwfHkpJiZ5Pj0yJiZ5PD0zNik7dmFyIEM9MDsiLSI9PT0oZz1nLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8Zy5sZW5ndGgmJigxNj09PXk/dGhpcy5fcGFyc2VIZXgo''@;'; put 'put ''ZyxDLHgpOih0aGlzLl9wYXJzZUJhc2UoZyx5LEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCkseSx4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihnLHkseCl7ZzwwJiYodGhpcy5uZWdhdGl2ZT0xLGc9LWcpLGc8NjcxMDg4NjQ/KHRoaXMu''@;'; put 'put ''d29yZHM9WzY3MTA4ODYzJmddLHRoaXMubGVuZ3RoPTEpOmc8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToocChnPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEw''@;'; put 'put ''ODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLHkseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oZyx5LHgpe2lmKHAoIm51bWJlciI9PXR5cGVvZiBnLmxlbmd0aCksZy5sZW5ndGg8PTApcmV0''@;'; put 'put ''dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoZy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxILGo9MDtp''@;'; put 'put ''ZigiYmUiPT09eClmb3IoQz1nLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KEg9Z1tDXXxnW0MtMV08PDh8Z1tDLTJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtlbHNlIGlm''@;'; put 'put ''KCJsZSI9PT14KWZvcihDPTAsVD0wO0M8Zy5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oSD1nW0NdfGdbQysxXTw8OHxnW0MrMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO3JldHVybiB0aGlz''@;'; put 'put ''LnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihnLHkseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChnLmxlbmd0aC15KS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0w''@;'; put 'put ''O3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9Zy5sZW5ndGgtMTtDPj15O0MtPTIpaj1SKGcseSxDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0oZy5sZW5ndGgteSklMj09''@;'; put 'put ''MD95KzE6eTtDPGcubGVuZ3RoO0MrPTIpaj1SKGcseSxDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGcseSx4KXt0aGlz''@;'; put 'put ''LndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj15KUMrKztDLS0sVD1UL3l8MDtmb3IodmFyIEg9Zy5sZW5ndGgteCxqPUglQyxFPU1hdGgubWluKEgsSC1qKSt4LG09MCxBPXg7QTxFO0ErPUMpbT16KGcsQSxBK0MseSksdGhpcy5pbXVsbihU''@;'; put 'put ''KSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09ail7dmFyIGFlPTE7Zm9yKG09eihnLEEsZy5sZW5ndGgseSksQT0wO0E8ajtBKyspYWUqPXk7dGhpcy5pbXVsbihhZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMu''@;'; put 'put ''d29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGcpe2cud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoO3krKylnLndvcmRzW3ldPXRoaXMud29yZHNbeV07Zy5sZW5ndGg9''@;'; put 'put ''dGhpcy5sZW5ndGgsZy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGcucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBnPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkoZyksZ30sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihnKXtmb3IoO3RoaXMu''@;'; put 'put ''bGVuZ3RoPGc7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2ln''@;'; put 'put ''bigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxC''@;'; put 'put ''TjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAw''@;'; put 'put ''MDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxPPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1''@;'; put 'put ''LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwy''@;'; put 'put ''NDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3''@;'; put 'put ''Nl07ZnVuY3Rpb24gWShCLGcseSl7eS5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkIubmVnYXRpdmU7dmFyIHg9Qi5sZW5ndGgrZy5sZW5ndGh8MDt5Lmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHxCLndvcmRzWzBdLFQ9MHxnLndvcmRzWzBdLEg9QypULEU9SC82NzEwODg2NHwwO3kud29yZHNbMF09''@;'; put 'put ''NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LGFlPTY3MTA4ODYzJkUsbmU9TWF0aC5taW4obSxnLmxlbmd0aC0xKSxzZT1NYXRoLm1heCgwLG0tQi5sZW5ndGgrMSk7c2U8PW5lO3NlKyspQSs9KEg9KEM9MHxCLndvcmRzW20tc2V8MF0pKihUPTB8Zy53''@;'; put 'put ''b3Jkc1tzZV0pK2FlKS82NzEwODg2NHwwLGFlPTY3MTA4ODYzJkg7eS53b3Jkc1ttXT0wfGFlLEU9MHxBfXJldHVybiAwIT09RT95LndvcmRzW21dPTB8RTp5Lmxlbmd0aC0tLHkuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihnLHkpe3ZhciB4O2lmKHk9MHx5fHwxLDE2''@;'; put 'put ''PT09KGc9Z3x8MTApfHwiaGV4Ij09PWcpe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9dGhpcy53b3Jkc1tIXSxFPSgxNjc3NzIxNSYoajw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9aj4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LEgt''@;'; put 'put ''LSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGgleSE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKGc9PT0oMHxnKSYmZz49MiYm''@;'; put 'put ''Zzw9MzYpe3ZhciBtPU9bZ10sQT1LW2ddO3g9IiI7dmFyIGFlPXRoaXMuY2xvbmUoKTtmb3IoYWUubmVnYXRpdmU9MDshYWUuaXNaZXJvKCk7KXt2YXIgbmU9YWUubW9kbihBKS50b1N0cmluZyhnKTt4PShhZT1hZS5pZGl2bihBKSkuaXNaZXJvKCk/bmUreDpOW20tbmUubGVuZ3RoXStuZSt4''@;'; put 'put ''fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGgleSE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fXAoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2''@;'; put 'put ''YXIgZz10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Zys9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2crPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZwKCEx''@;'; put 'put ''LCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tZzpnfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGcseSl7cmV0''@;'; put 'put ''dXJuIHAodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAsZyx5KX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGcseSl9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGcseSx4KXt2YXIgQz10aGlz''@;'; put 'put ''LmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7cChDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIikscChUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxtLEg9ImxlIj09PXksaj1uZXcgZyhUKSxBPXRo''@;'; put 'put ''aXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW21dPUU7Zm9yKDttPFQ7bSsrKWpbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKWpbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxB''@;'; put 'put ''Lml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oZyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoZyl9OmZ1bmN0aW9uKGcpe3ZhciB5PWcseD0wO3JldHVybiB5Pj00MDk2JiYoeCs9MTMseT4+Pj0xMykseT49NjQm''@;'; put 'put ''Jih4Kz03LHk+Pj49NykseT49OCYmKHgrPTQseT4+Pj00KSx5Pj0yJiYoeCs9Mix5Pj4+PTIpLHgreX0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGcpe2lmKDA9PT1nKXJldHVybiAyNjt2YXIgeT1nLHg9MDtyZXR1cm4hKDgxOTEmeSkmJih4Kz0xMyx5Pj4+PTEzKSwhKDEyNyZ5''@;'; put 'put ''KSYmKHgrPTcseT4+Pj03KSwhKDE1JnkpJiYoeCs9NCx5Pj4+PTQpLCEoMyZ5KSYmKHgrPTIseT4+Pj0yKSwhKDEmeSkmJngrKyx4fSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJu''@;'; put 'put ''IDI2Kih0aGlzLmxlbmd0aC0xKSt5fSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBnPTAseT0wO3k8dGhpcy5sZW5ndGg7eSsrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW3ldKTtpZihnKz14LDI2IT09''@;'; put 'put ''eClicmVha31yZXR1cm4gZ30sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGcp''@;'; put 'put ''LmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMudGVzdG4oZy0xKT90aGlzLm5vdG4oZykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRo''@;'; put 'put ''aXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0''@;'; put 'put ''aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8Zy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIHk9MDt5PGcubGVuZ3RoO3krKyl0aGlzLndvcmRzW3ldPXRoaXMud29yZHNbeV18Zy53b3Jkc1t5XTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9''@;'; put 'put ''ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1b3IoZyl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGcpOmcuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJv''@;'; put 'put ''dG90eXBlLnVvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoZyk6Zy5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGcpe3ZhciB5O3k9dGhpcy5sZW5ndGg+Zy5sZW5ndGg/Zzp0aGlzO2Zvcih2''@;'; put 'put ''YXIgeD0wO3g8eS5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZnLndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0aD15Lmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRp''@;'; put 'put ''dmUpKSx0aGlzLml1YW5kKGcpfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGcpOmcuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0''@;'; put 'put ''aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoZyk6Zy5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihnKXt2YXIgeSx4O3RoaXMubGVuZ3RoPmcubGVuZ3RoPyh5PXRoaXMseD1nKTooeT1nLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtD''@;'; put 'put ''KyspdGhpcy53b3Jkc1tDXT15LndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9PXkpZm9yKDtDPHkubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXkud29yZHNbQ107cmV0dXJuIHRoaXMubGVuZ3RoPXkubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihn''@;'; put 'put ''KXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoZyl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZyk6Zy5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBl''@;'; put 'put ''LnV4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihnKTpnLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT0wfE1hdGguY2Vp''@;'; put 'put ''bChnLzI2KSx4PWclMjY7dGhpcy5fZXhwYW5kKHkpLHg+MCYmeS0tO2Zvcih2YXIgQz0wO0M8eTtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tDXTtyZXR1cm4geD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJp''@;'; put 'put ''cCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oZyl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZyx5KXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHg9Zy8yNnwwLEM9ZyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgr''@;'; put 'put ''MSksdGhpcy53b3Jkc1t4XT15P3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRzW3hdJn4oMTw8QyksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcpe3ZhciB5LHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVn''@;'; put 'put ''YXRpdmU9MCx5PXRoaXMuaXN1YihnKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiBnLm5lZ2F0aXZlPTAseT10aGlzLmlzdWIoZyksZy5uZWdhdGl2ZT0xLHkuX25vcm1TaWduKCk7dGhpcy5sZW5n''@;'; put 'put ''dGg+Zy5sZW5ndGg/KHg9dGhpcyxDPWcpOih4PWcsQz10aGlzKTtmb3IodmFyIFQ9MCxIPTA7SDxDLmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoeT0oMHx4LndvcmRzW0hdKSsoMHxDLndvcmRzW0hdKStUKSxUPXk+Pj4yNjtmb3IoOzAhPT1UJiZIPHgubGVuZ3RoO0grKyl0''@;'; put 'put ''aGlzLndvcmRzW0hdPTY3MTA4ODYzJih5PSgwfHgud29yZHNbSF0pK1QpLFQ9eT4+PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1UKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7SDx4Lmxlbmd0aDtIKyspdGhpcy53''@;'; put 'put ''b3Jkc1tIXT14LndvcmRzW0hdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyl7dmFyIHk7cmV0dXJuIDAhPT1nLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZy5uZWdhdGl2ZT0wLHk9dGhpcy5zdWIoZyksZy5uZWdhdGl2ZV49MSx5KTowPT09Zy5uZWdhdGl2''@;'; put 'put ''ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCx5PWcuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSx5KTp0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChnKTpnLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnKXtp''@;'; put 'put ''ZigwIT09Zy5uZWdhdGl2ZSl7Zy5uZWdhdGl2ZT0wO3ZhciB5PXRoaXMuaWFkZChnKTtyZXR1cm4gZy5uZWdhdGl2ZT0xLHkuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25v''@;'; put 'put ''cm1TaWduKCk7dmFyIEMsVCx4PXRoaXMuY21wKGcpO2lmKDA9PT14KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt4PjA/KEM9dGhpcyxUPWcpOihDPWcsVD10aGlzKTtmb3IodmFyIEg9MCxqPTA7ajxULmxlbmd0aDtqKyspSD0oeT0o''@;'; put 'put ''MHxDLndvcmRzW2pdKS0oMHxULndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZ5O2Zvcig7MCE9PUgmJmo8Qy5sZW5ndGg7aisrKUg9KHk9KDB8Qy53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmeTtpZigwPT09SCYmajxDLmxlbmd0aCYmQyE9''@;'; put 'put ''PXRoaXMpZm9yKDtqPEMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPUMud29yZHNbal07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGopLEMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoZyl9O3ZhciBXPWZ1bmN0aW9uKGcseSx4KXt2YXIgRSxtLEEsQz1nLndvcmRzLFQ9eS53b3JkcyxIPXgud29yZHMsaj0wLGFlPTB8Q1swXSxuZT04MTkxJmFlLHNlPWFlPj4+MTMsQ2U9MHxDWzFdLFVlPTgxOTEmQ2UsSmU9Q2U+Pj4xMyxpdD0wfENb''@;'; put 'put ''Ml0seGU9ODE5MSZpdCx5ZT1pdD4+PjEzLEtlPTB8Q1szXSxqZT04MTkxJktlLGtlPUtlPj4+MTMsSGU9MHxDWzRdLExlPTgxOTEmSGUsUmU9SGU+Pj4xMyxWZT0wfENbNV0sQWU9ODE5MSZWZSxEZT1WZT4+PjEzLF90PTB8Q1s2XSxydD04MTkxJl90LFFlPV90Pj4+MTMsc249MHxDWzddLHZ0''@;'; put 'put ''PTgxOTEmc24sU3Q9c24+Pj4xMyxlbj0wfENbOF0sdXQ9ODE5MSZlbixYZT1lbj4+PjEzLHR0PTB8Q1s5XSxJZT04MTkxJnR0LGF0PXR0Pj4+MTMsdW49MHxUWzBdLEl0PTgxOTEmdW4sUnQ9dW4+Pj4xMyxyaT0wfFRbMV0sYW49ODE5MSZyaSxsbj1yaT4+PjEzLG5pPTB8VFsyXSxobj04MTkx''@;'; put 'put ''Jm5pLGh0PW5pPj4+MTMsUnI9MHxUWzNdLEJ0PTgxOTEmUnIsQXQ9UnI+Pj4xMyxGbj0wfFRbNF0sc3Q9ODE5MSZGbixadD1Gbj4+PjEzLFFyPTB8VFs1XSxZZT04MTkxJlFyLFR0PVFyPj4+MTMscnI9MHxUWzZdLGZ0PTgxOTEmcnIsTXQ9cnI+Pj4xMyxabj0wfFRbN10sbm49ODE5MSZabixX''@;'; put 'put ''dD1abj4+PjEzLGRpPTB8VFs4XSxkbj04MTkxJmRpLG1uPWRpPj4+MTMscGk9MHxUWzldLGZuPTgxOTEmcGksdG49cGk+Pj4xMzt4Lm5lZ2F0aXZlPWcubmVnYXRpdmVeeS5uZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2YXIgY2E9KGorKEU9TWF0aC5pbXVsKG5lLEl0KSl8MCkrKCg4MTkxJihtPSht''@;'; put 'put ''PU1hdGguaW11bChuZSxSdCkpK01hdGguaW11bChzZSxJdCl8MCkpPDwxMyl8MDtqPSgoQT1NYXRoLmltdWwoc2UsUnQpKSsobT4+PjEzKXwwKSsoY2E+Pj4yNil8MCxjYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoVWUsSXQpLG09KG09TWF0aC5pbXVsKFVlLFJ0KSkrTWF0aC5pbXVsKEplLEl0''@;'; put 'put ''KXwwLEE9TWF0aC5pbXVsKEplLFJ0KTt2YXIgX2k9KGorKEU9RStNYXRoLmltdWwobmUsYW4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxsbil8MCkrTWF0aC5pbXVsKHNlLGFuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGxuKXwwKSsobT4+PjEzKXwwKSso''@;'; put 'put ''X2k+Pj4yNil8MCxfaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeGUsSXQpLG09KG09TWF0aC5pbXVsKHhlLFJ0KSkrTWF0aC5pbXVsKHllLEl0KXwwLEE9TWF0aC5pbXVsKHllLFJ0KSxFPUUrTWF0aC5pbXVsKFVlLGFuKXwwLG09KG09bStNYXRoLmltdWwoVWUsbG4pfDApK01hdGguaW11bChK''@;'; put 'put ''ZSxhbil8MCxBPUErTWF0aC5pbXVsKEplLGxuKXwwO3ZhciB2cj0oaisoRT1FK01hdGguaW11bChuZSxobil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGh0KXwwKStNYXRoLmltdWwoc2UsaG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsaHQpfDApKyhtPj4+''@;'; put 'put ''MTMpfDApKyh2cj4+PjI2KXwwLHZyJj02NzEwODg2MyxFPU1hdGguaW11bChqZSxJdCksbT0obT1NYXRoLmltdWwoamUsUnQpKStNYXRoLmltdWwoa2UsSXQpfDAsQT1NYXRoLmltdWwoa2UsUnQpLEU9RStNYXRoLmltdWwoeGUsYW4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxsbil8MCkrTWF0''@;'; put 'put ''aC5pbXVsKHllLGFuKXwwLEE9QStNYXRoLmltdWwoeWUsbG4pfDAsRT1FK01hdGguaW11bChVZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGh0KXwwKStNYXRoLmltdWwoSmUsaG4pfDAsQT1BK01hdGguaW11bChKZSxodCl8MDt2YXIgWGk9KGorKEU9RStNYXRoLmltdWwobmUsQnQpfDAp''@;'; put 'put ''fDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxBdCl8MCkrTWF0aC5pbXVsKHNlLEJ0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLEF0KXwwKSsobT4+PjEzKXwwKSsoWGk+Pj4yNil8MCxYaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTGUsSXQpLG09KG09TWF0aC5pbXVs''@;'; put 'put ''KExlLFJ0KSkrTWF0aC5pbXVsKFJlLEl0KXwwLEE9TWF0aC5pbXVsKFJlLFJ0KSxFPUUrTWF0aC5pbXVsKGplLGFuKXwwLG09KG09bStNYXRoLmltdWwoamUsbG4pfDApK01hdGguaW11bChrZSxhbil8MCxBPUErTWF0aC5pbXVsKGtlLGxuKXwwLEU9RStNYXRoLmltdWwoeGUsaG4pfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bCh4ZSxodCl8MCkrTWF0aC5pbXVsKHllLGhuKXwwLEE9QStNYXRoLmltdWwoeWUsaHQpfDAsRT1FK01hdGguaW11bChVZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUsQnQpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MDt2YXIgUWk9''@;'; put 'put ''KGorKEU9RStNYXRoLmltdWwobmUsc3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxadCl8MCkrTWF0aC5pbXVsKHNlLHN0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFp0KXwwKSsobT4+PjEzKXwwKSsoUWk+Pj4yNil8MCxRaSY9NjcxMDg4NjMsRT1NYXRo''@;'; put 'put ''LmltdWwoQWUsSXQpLG09KG09TWF0aC5pbXVsKEFlLFJ0KSkrTWF0aC5pbXVsKERlLEl0KXwwLEE9TWF0aC5pbXVsKERlLFJ0KSxFPUUrTWF0aC5pbXVsKExlLGFuKXwwLG09KG09bStNYXRoLmltdWwoTGUsbG4pfDApK01hdGguaW11bChSZSxhbil8MCxBPUErTWF0aC5pbXVsKFJlLGxuKXww''@;'; put 'put ''LEU9RStNYXRoLmltdWwoamUsaG4pfDAsbT0obT1tK01hdGguaW11bChqZSxodCl8MCkrTWF0aC5pbXVsKGtlLGhuKXwwLEE9QStNYXRoLmltdWwoa2UsaHQpfDAsRT1FK01hdGguaW11bCh4ZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLEF0KXwwKStNYXRoLmltdWwoeWUsQnQpfDAsQT1B''@;'; put 'put ''K01hdGguaW11bCh5ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHN0KXwwLG09KG09bStNYXRoLmltdWwoVWUsWnQpfDApK01hdGguaW11bChKZSxzdCl8MCxBPUErTWF0aC5pbXVsKEplLFp0KXwwO3ZhciBWaT0oaisoRT1FK01hdGguaW11bChuZSxZZSl8MCl8MCkrKCg4MTkxJihtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKG5lLFR0KXwwKStNYXRoLmltdWwoc2UsWWUpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVHQpfDApKyhtPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2MyxFPU1hdGguaW11bChydCxJdCksbT0obT1NYXRoLmltdWwocnQsUnQpKStNYXRoLmltdWwo''@;'; put 'put ''UWUsSXQpfDAsQT1NYXRoLmltdWwoUWUsUnQpLEU9RStNYXRoLmltdWwoQWUsYW4pfDAsbT0obT1tK01hdGguaW11bChBZSxsbil8MCkrTWF0aC5pbXVsKERlLGFuKXwwLEE9QStNYXRoLmltdWwoRGUsbG4pfDAsRT1FK01hdGguaW11bChMZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKExlLGh0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoUmUsaG4pfDAsQT1BK01hdGguaW11bChSZSxodCl8MCxFPUUrTWF0aC5pbXVsKGplLEJ0KXwwLG09KG09bStNYXRoLmltdWwoamUsQXQpfDApK01hdGguaW11bChrZSxCdCl8MCxBPUErTWF0aC5pbXVsKGtlLEF0KXwwLEU9RStNYXRoLmltdWwoeGUsc3QpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bCh4ZSxadCl8MCkrTWF0aC5pbXVsKHllLHN0KXwwLEE9QStNYXRoLmltdWwoeWUsWnQpfDAsRT1FK01hdGguaW11bChVZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoSmUsWWUpfDAsQT1BK01hdGguaW11bChKZSxUdCl8MDt2YXIgZWk9''@;'; put 'put ''KGorKEU9RStNYXRoLmltdWwobmUsZnQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxNdCl8MCkrTWF0aC5pbXVsKHNlLGZ0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLE10KXwwKSsobT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMsRT1NYXRo''@;'; put 'put ''LmltdWwodnQsSXQpLG09KG09TWF0aC5pbXVsKHZ0LFJ0KSkrTWF0aC5pbXVsKFN0LEl0KXwwLEE9TWF0aC5pbXVsKFN0LFJ0KSxFPUUrTWF0aC5pbXVsKHJ0LGFuKXwwLG09KG09bStNYXRoLmltdWwocnQsbG4pfDApK01hdGguaW11bChRZSxhbil8MCxBPUErTWF0aC5pbXVsKFFlLGxuKXww''@;'; put 'put ''LEU9RStNYXRoLmltdWwoQWUsaG4pfDAsbT0obT1tK01hdGguaW11bChBZSxodCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLEE9QStNYXRoLmltdWwoRGUsaHQpfDAsRT1FK01hdGguaW11bChMZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKExlLEF0KXwwKStNYXRoLmltdWwoUmUsQnQpfDAsQT1B''@;'; put 'put ''K01hdGguaW11bChSZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGplLHN0KXwwLG09KG09bStNYXRoLmltdWwoamUsWnQpfDApK01hdGguaW11bChrZSxzdCl8MCxBPUErTWF0aC5pbXVsKGtlLFp0KXwwLEU9RStNYXRoLmltdWwoeGUsWWUpfDAsbT0obT1tK01hdGguaW11bCh4ZSxUdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKHllLFllKXwwLEE9QStNYXRoLmltdWwoeWUsVHQpfDAsRT1FK01hdGguaW11bChVZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLE10KXwwKStNYXRoLmltdWwoSmUsZnQpfDAsQT1BK01hdGguaW11bChKZSxNdCl8MDt2YXIgdWE9KGorKEU9RStNYXRoLmltdWwobmUsbm4pfDAp''@;'; put 'put ''fDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxXdCl8MCkrTWF0aC5pbXVsKHNlLG5uKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFd0KXwwKSsobT4+PjEzKXwwKSsodWE+Pj4yNil8MCx1YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwodXQsSXQpLG09KG09TWF0aC5pbXVs''@;'; put 'put ''KHV0LFJ0KSkrTWF0aC5pbXVsKFhlLEl0KXwwLEE9TWF0aC5pbXVsKFhlLFJ0KSxFPUUrTWF0aC5pbXVsKHZ0LGFuKXwwLG09KG09bStNYXRoLmltdWwodnQsbG4pfDApK01hdGguaW11bChTdCxhbil8MCxBPUErTWF0aC5pbXVsKFN0LGxuKXwwLEU9RStNYXRoLmltdWwocnQsaG4pfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChydCxodCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLEE9QStNYXRoLmltdWwoUWUsaHQpfDAsRT1FK01hdGguaW11bChBZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKEFlLEF0KXwwKStNYXRoLmltdWwoRGUsQnQpfDAsQT1BK01hdGguaW11bChEZSxBdCl8MCxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKExlLHN0KXwwLG09KG09bStNYXRoLmltdWwoTGUsWnQpfDApK01hdGguaW11bChSZSxzdCl8MCxBPUErTWF0aC5pbXVsKFJlLFp0KXwwLEU9RStNYXRoLmltdWwoamUsWWUpfDAsbT0obT1tK01hdGguaW11bChqZSxUdCl8MCkrTWF0aC5pbXVsKGtlLFllKXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoa2UsVHQpfDAsRT1FK01hdGguaW11bCh4ZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLE10KXwwKStNYXRoLmltdWwoeWUsZnQpfDAsQT1BK01hdGguaW11bCh5ZSxNdCl8MCxFPUUrTWF0aC5pbXVsKFVlLG5uKXwwLG09KG09bStNYXRoLmltdWwoVWUsV3QpfDApK01hdGguaW11bChK''@;'; put 'put ''ZSxubil8MCxBPUErTWF0aC5pbXVsKEplLFd0KXwwO3ZhciBSaT0oaisoRT1FK01hdGguaW11bChuZSxkbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLG1uKXwwKStNYXRoLmltdWwoc2UsZG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsbW4pfDApKyhtPj4+''@;'; put 'put ''MTMpfDApKyhSaT4+PjI2KXwwLFJpJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxJdCksbT0obT1NYXRoLmltdWwoSWUsUnQpKStNYXRoLmltdWwoYXQsSXQpfDAsQT1NYXRoLmltdWwoYXQsUnQpLEU9RStNYXRoLmltdWwodXQsYW4pfDAsbT0obT1tK01hdGguaW11bCh1dCxsbil8MCkrTWF0''@;'; put 'put ''aC5pbXVsKFhlLGFuKXwwLEE9QStNYXRoLmltdWwoWGUsbG4pfDAsRT1FK01hdGguaW11bCh2dCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LGh0KXwwKStNYXRoLmltdWwoU3QsaG4pfDAsQT1BK01hdGguaW11bChTdCxodCl8MCxFPUUrTWF0aC5pbXVsKHJ0LEJ0KXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwocnQsQXQpfDApK01hdGguaW11bChRZSxCdCl8MCxBPUErTWF0aC5pbXVsKFFlLEF0KXwwLEU9RStNYXRoLmltdWwoQWUsc3QpfDAsbT0obT1tK01hdGguaW11bChBZSxadCl8MCkrTWF0aC5pbXVsKERlLHN0KXwwLEE9QStNYXRoLmltdWwoRGUsWnQpfDAsRT1FK01hdGguaW11bChM''@;'; put 'put ''ZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKExlLFR0KXwwKStNYXRoLmltdWwoUmUsWWUpfDAsQT1BK01hdGguaW11bChSZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGplLGZ0KXwwLG09KG09bStNYXRoLmltdWwoamUsTXQpfDApK01hdGguaW11bChrZSxmdCl8MCxBPUErTWF0aC5pbXVsKGtlLE10''@;'; put 'put ''KXwwLEU9RStNYXRoLmltdWwoeGUsbm4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxXdCl8MCkrTWF0aC5pbXVsKHllLG5uKXwwLEE9QStNYXRoLmltdWwoeWUsV3QpfDAsRT1FK01hdGguaW11bChVZSxkbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLG1uKXwwKStNYXRoLmltdWwoSmUsZG4pfDAs''@;'; put 'put ''QT1BK01hdGguaW11bChKZSxtbil8MDt2YXIgRGE9KGorKEU9RStNYXRoLmltdWwobmUsZm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSx0bil8MCkrTWF0aC5pbXVsKHNlLGZuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHRuKXwwKSsobT4+PjEzKXwwKSso''@;'; put 'put ''RGE+Pj4yNil8MCxEYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsYW4pLG09KG09TWF0aC5pbXVsKEllLGxuKSkrTWF0aC5pbXVsKGF0LGFuKXwwLEE9TWF0aC5pbXVsKGF0LGxuKSxFPUUrTWF0aC5pbXVsKHV0LGhuKXwwLG09KG09bStNYXRoLmltdWwodXQsaHQpfDApK01hdGguaW11bChY''@;'; put 'put ''ZSxobil8MCxBPUErTWF0aC5pbXVsKFhlLGh0KXwwLEU9RStNYXRoLmltdWwodnQsQnQpfDAsbT0obT1tK01hdGguaW11bCh2dCxBdCl8MCkrTWF0aC5pbXVsKFN0LEJ0KXwwLEE9QStNYXRoLmltdWwoU3QsQXQpfDAsRT1FK01hdGguaW11bChydCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0''@;'; put 'put ''LFp0KXwwKStNYXRoLmltdWwoUWUsc3QpfDAsQT1BK01hdGguaW11bChRZSxadCl8MCxFPUUrTWF0aC5pbXVsKEFlLFllKXwwLG09KG09bStNYXRoLmltdWwoQWUsVHQpfDApK01hdGguaW11bChEZSxZZSl8MCxBPUErTWF0aC5pbXVsKERlLFR0KXwwLEU9RStNYXRoLmltdWwoTGUsZnQpfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bChMZSxNdCl8MCkrTWF0aC5pbXVsKFJlLGZ0KXwwLEE9QStNYXRoLmltdWwoUmUsTXQpfDAsRT1FK01hdGguaW11bChqZSxubil8MCxtPShtPW0rTWF0aC5pbXVsKGplLFd0KXwwKStNYXRoLmltdWwoa2Usbm4pfDAsQT1BK01hdGguaW11bChrZSxXdCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKHhlLGRuKXwwLG09KG09bStNYXRoLmltdWwoeGUsbW4pfDApK01hdGguaW11bCh5ZSxkbil8MCxBPUErTWF0aC5pbXVsKHllLG1uKXwwO3ZhciBoaT0oaisoRT1FK01hdGguaW11bChVZSxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLHRuKXwwKStNYXRo''@;'; put 'put ''LmltdWwoSmUsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSmUsdG4pfDApKyhtPj4+MTMpfDApKyhoaT4+PjI2KXwwLGhpJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxobiksbT0obT1NYXRoLmltdWwoSWUsaHQpKStNYXRoLmltdWwoYXQsaG4pfDAsQT1NYXRoLmltdWwoYXQs''@;'; put 'put ''aHQpLEU9RStNYXRoLmltdWwodXQsQnQpfDAsbT0obT1tK01hdGguaW11bCh1dCxBdCl8MCkrTWF0aC5pbXVsKFhlLEJ0KXwwLEE9QStNYXRoLmltdWwoWGUsQXQpfDAsRT1FK01hdGguaW11bCh2dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LFp0KXwwKStNYXRoLmltdWwoU3Qsc3QpfDAs''@;'; put 'put ''QT1BK01hdGguaW11bChTdCxadCl8MCxFPUUrTWF0aC5pbXVsKHJ0LFllKXwwLG09KG09bStNYXRoLmltdWwocnQsVHQpfDApK01hdGguaW11bChRZSxZZSl8MCxBPUErTWF0aC5pbXVsKFFlLFR0KXwwLEU9RStNYXRoLmltdWwoQWUsZnQpfDAsbT0obT1tK01hdGguaW11bChBZSxNdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKERlLGZ0KXwwLEE9QStNYXRoLmltdWwoRGUsTXQpfDAsRT1FK01hdGguaW11bChMZSxubil8MCxtPShtPW0rTWF0aC5pbXVsKExlLFd0KXwwKStNYXRoLmltdWwoUmUsbm4pfDAsQT1BK01hdGguaW11bChSZSxXdCl8MCxFPUUrTWF0aC5pbXVsKGplLGRuKXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoamUsbW4pfDApK01hdGguaW11bChrZSxkbil8MCxBPUErTWF0aC5pbXVsKGtlLG1uKXwwO3ZhciBxaT0oaisoRT1FK01hdGguaW11bCh4ZSxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHhlLHRuKXwwKStNYXRoLmltdWwoeWUsZm4pfDApKTw8MTMpfDA7aj0o''@;'; put 'put ''KEE9QStNYXRoLmltdWwoeWUsdG4pfDApKyhtPj4+MTMpfDApKyhxaT4+PjI2KXwwLHFpJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxCdCksbT0obT1NYXRoLmltdWwoSWUsQXQpKStNYXRoLmltdWwoYXQsQnQpfDAsQT1NYXRoLmltdWwoYXQsQXQpLEU9RStNYXRoLmltdWwodXQsc3QpfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bCh1dCxadCl8MCkrTWF0aC5pbXVsKFhlLHN0KXwwLEE9QStNYXRoLmltdWwoWGUsWnQpfDAsRT1FK01hdGguaW11bCh2dCxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LFR0KXwwKStNYXRoLmltdWwoU3QsWWUpfDAsQT1BK01hdGguaW11bChTdCxUdCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKHJ0LGZ0KXwwLG09KG09bStNYXRoLmltdWwocnQsTXQpfDApK01hdGguaW11bChRZSxmdCl8MCxBPUErTWF0aC5pbXVsKFFlLE10KXwwLEU9RStNYXRoLmltdWwoQWUsbm4pfDAsbT0obT1tK01hdGguaW11bChBZSxXdCl8MCkrTWF0aC5pbXVsKERlLG5uKXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoRGUsV3QpfDAsRT1FK01hdGguaW11bChMZSxkbil8MCxtPShtPW0rTWF0aC5pbXVsKExlLG1uKXwwKStNYXRoLmltdWwoUmUsZG4pfDAsQT1BK01hdGguaW11bChSZSxtbil8MDt2YXIgUGE9KGorKEU9RStNYXRoLmltdWwoamUsZm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGgu''@;'; put 'put ''aW11bChqZSx0bil8MCkrTWF0aC5pbXVsKGtlLGZuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKGtlLHRuKXwwKSsobT4+PjEzKXwwKSsoUGE+Pj4yNil8MCxQYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsc3QpLG09KG09TWF0aC5pbXVsKEllLFp0KSkrTWF0aC5pbXVsKGF0LHN0''@;'; put 'put ''KXwwLEE9TWF0aC5pbXVsKGF0LFp0KSxFPUUrTWF0aC5pbXVsKHV0LFllKXwwLG09KG09bStNYXRoLmltdWwodXQsVHQpfDApK01hdGguaW11bChYZSxZZSl8MCxBPUErTWF0aC5pbXVsKFhlLFR0KXwwLEU9RStNYXRoLmltdWwodnQsZnQpfDAsbT0obT1tK01hdGguaW11bCh2dCxNdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKFN0LGZ0KXwwLEE9QStNYXRoLmltdWwoU3QsTXQpfDAsRT1FK01hdGguaW11bChydCxubil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LFd0KXwwKStNYXRoLmltdWwoUWUsbm4pfDAsQT1BK01hdGguaW11bChRZSxXdCl8MCxFPUUrTWF0aC5pbXVsKEFlLGRuKXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoQWUsbW4pfDApK01hdGguaW11bChEZSxkbil8MCxBPUErTWF0aC5pbXVsKERlLG1uKXwwO3ZhciB1cj0oaisoRT1FK01hdGguaW11bChMZSxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKExlLHRuKXwwKStNYXRoLmltdWwoUmUsZm4pfDApKTw8MTMpfDA7aj0o''@;'; put 'put ''KEE9QStNYXRoLmltdWwoUmUsdG4pfDApKyhtPj4+MTMpfDApKyh1cj4+PjI2KXwwLHVyJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxZZSksbT0obT1NYXRoLmltdWwoSWUsVHQpKStNYXRoLmltdWwoYXQsWWUpfDAsQT1NYXRoLmltdWwoYXQsVHQpLEU9RStNYXRoLmltdWwodXQsZnQpfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bCh1dCxNdCl8MCkrTWF0aC5pbXVsKFhlLGZ0KXwwLEE9QStNYXRoLmltdWwoWGUsTXQpfDAsRT1FK01hdGguaW11bCh2dCxubil8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LFd0KXwwKStNYXRoLmltdWwoU3Qsbm4pfDAsQT1BK01hdGguaW11bChTdCxXdCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKHJ0LGRuKXwwLG09KG09bStNYXRoLmltdWwocnQsbW4pfDApK01hdGguaW11bChRZSxkbil8MCxBPUErTWF0aC5pbXVsKFFlLG1uKXwwO3ZhciBiYT0oaisoRT1FK01hdGguaW11bChBZSxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKEFlLHRuKXwwKStNYXRo''@;'; put 'put ''LmltdWwoRGUsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoRGUsdG4pfDApKyhtPj4+MTMpfDApKyhiYT4+PjI2KXwwLGJhJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxmdCksbT0obT1NYXRoLmltdWwoSWUsTXQpKStNYXRoLmltdWwoYXQsZnQpfDAsQT1NYXRoLmltdWwoYXQs''@;'; put 'put ''TXQpLEU9RStNYXRoLmltdWwodXQsbm4pfDAsbT0obT1tK01hdGguaW11bCh1dCxXdCl8MCkrTWF0aC5pbXVsKFhlLG5uKXwwLEE9QStNYXRoLmltdWwoWGUsV3QpfDAsRT1FK01hdGguaW11bCh2dCxkbil8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LG1uKXwwKStNYXRoLmltdWwoU3QsZG4pfDAs''@;'; put 'put ''QT1BK01hdGguaW11bChTdCxtbil8MDt2YXIgTWk9KGorKEU9RStNYXRoLmltdWwocnQsZm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChydCx0bil8MCkrTWF0aC5pbXVsKFFlLGZuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFFlLHRuKXwwKSsobT4+PjEzKXwwKSso''@;'; put 'put ''TWk+Pj4yNil8MCxNaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsbm4pLG09KG09TWF0aC5pbXVsKEllLFd0KSkrTWF0aC5pbXVsKGF0LG5uKXwwLEE9TWF0aC5pbXVsKGF0LFd0KSxFPUUrTWF0aC5pbXVsKHV0LGRuKXwwLG09KG09bStNYXRoLmltdWwodXQsbW4pfDApK01hdGguaW11bChY''@;'; put 'put ''ZSxkbil8MCxBPUErTWF0aC5pbXVsKFhlLG1uKXwwO3ZhciB3YT0oaisoRT1FK01hdGguaW11bCh2dCxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHZ0LHRuKXwwKStNYXRoLmltdWwoU3QsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoU3QsdG4pfDApKyhtPj4+''@;'; put 'put ''MTMpfDApKyh3YT4+PjI2KXwwLHdhJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxkbiksbT0obT1NYXRoLmltdWwoSWUsbW4pKStNYXRoLmltdWwoYXQsZG4pfDAsQT1NYXRoLmltdWwoYXQsbW4pO3ZhciBlYT0oaisoRT1FK01hdGguaW11bCh1dCxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKHV0LHRuKXwwKStNYXRoLmltdWwoWGUsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoWGUsdG4pfDApKyhtPj4+MTMpfDApKyhlYT4+PjI2KXwwLGVhJj02NzEwODg2Mzt2YXIgRnI9KGorKEU9TWF0aC5pbXVsKEllLGZuKSl8MCkrKCg4MTkxJihtPShtPU1hdGgu''@;'; put 'put ''aW11bChJZSx0bikpK01hdGguaW11bChhdCxmbil8MCkpPDwxMyl8MDtyZXR1cm4gaj0oKEE9TWF0aC5pbXVsKGF0LHRuKSkrKG0+Pj4xMyl8MCkrKEZyPj4+MjYpfDAsRnImPTY3MTA4ODYzLEhbMF09Y2EsSFsxXT1faSxIWzJdPXZyLEhbM109WGksSFs0XT1RaSxIWzVdPVZpLEhbNl09ZWks''@;'; put 'put ''SFs3XT11YSxIWzhdPVJpLEhbOV09RGEsSFsxMF09aGksSFsxMV09cWksSFsxMl09UGEsSFsxM109dXIsSFsxNF09YmEsSFsxNV09TWksSFsxNl09d2EsSFsxN109ZWEsSFsxOF09RnIsMCE9PWomJihIWzE5XT1qLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIGVlKEIsZyx5KXtyZXR1cm4obmV3''@;'; put 'put ''IEopLm11bHAoQixnLHkpfWZ1bmN0aW9uIEooQixnKXt0aGlzLng9Qix0aGlzLnk9Z31NYXRoLmltdWx8fChXPVkpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGcseSl7dmFyIHgsQz10aGlzLmxlbmd0aCtnLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PWcubGVu''@;'; put 'put ''Z3RoP1codGhpcyxnLHkpOkM8NjM/WSh0aGlzLGcseSk6QzwxMDI0P2Z1bmN0aW9uIHEoQixnLHkpe3kubmVnYXRpdmU9Zy5uZWdhdGl2ZV5CLm5lZ2F0aXZlLHkubGVuZ3RoPUIubGVuZ3RoK2cubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDx5Lmxlbmd0aC0xO1QrKyl7dmFyIEg9QztD''@;'; put 'put ''PTA7Zm9yKHZhciBqPTY3MTA4ODYzJngsRT1NYXRoLm1pbihULGcubGVuZ3RoLTEpLG09TWF0aC5tYXgoMCxULUIubGVuZ3RoKzEpO208PUU7bSsrKXt2YXIgc2U9KDB8Qi53b3Jkc1tULW1dKSooMHxnLndvcmRzW21dKSxDZT02NzEwODg2MyZzZTtqPTY3MTA4ODYzJihDZT1DZStqfDApLEMr''@;'; put 'put ''PShIPShIPUgrKHNlLzY3MTA4ODY0fDApfDApKyhDZT4+PjI2KXwwKT4+PjI2LEgmPTY3MTA4ODYzfXkud29yZHNbVF09aix4PUgsSD1DfXJldHVybiAwIT09eD95LndvcmRzW1RdPXg6eS5sZW5ndGgtLSx5LnN0cmlwKCl9KHRoaXMsZyx5KTplZSh0aGlzLGcseSkseH0sSi5wcm90b3R5cGUu''@;'; put 'put ''bWFrZVJCVD1mdW5jdGlvbihnKXtmb3IodmFyIHk9bmV3IEFycmF5KGcpLHg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhnKS0xLEM9MDtDPGc7QysrKXlbQ109dGhpcy5yZXZCaW4oQyx4LGcpO3JldHVybiB5fSxKLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oZyx5LHgpe2lmKDA9PT1nfHxn''@;'; put 'put ''PT09eC0xKXJldHVybiBnO2Zvcih2YXIgQz0wLFQ9MDtUPHk7VCsrKUN8PSgxJmcpPDx5LVQtMSxnPj49MTtyZXR1cm4gQ30sSi5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihnLHkseCxDLFQsSCl7Zm9yKHZhciBqPTA7ajxIO2orKylDW2pdPXlbZ1tqXV0sVFtqXT14W2dbal1dfSxKLnBy''@;'; put 'put ''b3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZyx5LHgsQyxULEgpe3RoaXMucGVybXV0ZShILGcseSx4LEMsVCk7Zm9yKHZhciBqPTE7ajxUO2o8PD0xKWZvcih2YXIgRT1qPDwxLG09TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLGFlPTA7YWU8VDthZSs9''@;'; put 'put ''RSlmb3IodmFyIG5lPW0sc2U9QSxDZT0wO0NlPGo7Q2UrKyl7dmFyIFVlPXhbYWUrQ2VdLEplPUNbYWUrQ2VdLGl0PXhbYWUrQ2Ural0seGU9Q1thZStDZStqXSx5ZT1uZSppdC1zZSp4ZTt4ZT1uZSp4ZStzZSppdCx4W2FlK0NlXT1VZSsoaXQ9eWUpLENbYWUrQ2VdPUplK3hlLHhbYWUrQ2Ur''@;'; put 'put ''al09VWUtaXQsQ1thZStDZStqXT1KZS14ZSxDZSE9PUUmJih5ZT1tKm5lLUEqc2Usc2U9bSpzZStBKm5lLG5lPXllKX19LEoucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGcseSl7dmFyIHg9MXxNYXRoLm1heCh5LGcpLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7''@;'; put 'put ''cmV0dXJuIDE8PFQrMStDfSxKLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oZyx5LHgpe2lmKCEoeDw9MSkpZm9yKHZhciBDPTA7Qzx4LzI7QysrKXt2YXIgVD1nW0NdO2dbQ109Z1t4LUMtMV0sZ1t4LUMtMV09VCxUPXlbQ10seVtDXT0teVt4LUMtMV0seVt4LUMtMV09LVR9fSxKLnBy''@;'; put 'put ''b3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oZyx5KXtmb3IodmFyIHg9MCxDPTA7Qzx5LzI7QysrKXt2YXIgVD04MTkyKk1hdGgucm91bmQoZ1syKkMrMV0veSkrTWF0aC5yb3VuZChnWzIqQ10veSkreDtnW0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJl''@;'; put 'put ''dHVybiBnfSxKLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGcseSx4LEMpe2Zvcih2YXIgVD0wLEg9MDtIPHk7SCsrKXhbMipIXT04MTkxJihUKz0wfGdbSF0pLHhbMipIKzFdPTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9yKEg9Mip5O0g8QzsrK0gpeFtIXT0wO3AoMD09PVQpLHAo''@;'; put 'put ''ISgtODE5MiZUKSl9LEoucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PW5ldyBBcnJheShnKSx4PTA7eDxnO3grKyl5W3hdPTA7cmV0dXJuIHl9LEoucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oZyx5LHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihnLmxlbmd0aCx5Lmxl''@;'; put 'put ''bmd0aCksVD10aGlzLm1ha2VSQlQoQyksSD10aGlzLnN0dWIoQyksaj1uZXcgQXJyYXkoQyksRT1uZXcgQXJyYXkoQyksbT1uZXcgQXJyYXkoQyksQT1uZXcgQXJyYXkoQyksYWU9bmV3IEFycmF5KEMpLG5lPW5ldyBBcnJheShDKSxzZT14LndvcmRzO3NlLmxlbmd0aD1DLHRoaXMuY29udmVy''@;'; put 'put ''dDEzYihnLndvcmRzLGcubGVuZ3RoLGosQyksdGhpcy5jb252ZXJ0MTNiKHkud29yZHMseS5sZW5ndGgsQSxDKSx0aGlzLnRyYW5zZm9ybShqLEgsRSxtLEMsVCksdGhpcy50cmFuc2Zvcm0oQSxILGFlLG5lLEMsVCk7Zm9yKHZhciBDZT0wO0NlPEM7Q2UrKyl7dmFyIFVlPUVbQ2VdKmFlW0Nl''@;'; put 'put ''XS1tW0NlXSpuZVtDZV07bVtDZV09RVtDZV0qbmVbQ2VdK21bQ2VdKmFlW0NlXSxFW0NlXT1VZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoRSxtLEMpLHRoaXMudHJhbnNmb3JtKEUsbSxzZSxILEMsVCksdGhpcy5jb25qdWdhdGUoc2UsSCxDKSx0aGlzLm5vcm1hbGl6ZTEzYihzZSxDKSx4Lm5l''@;'; put 'put ''Z2F0aXZlPWcubmVnYXRpdmVeeS5uZWdhdGl2ZSx4Lmxlbmd0aD1nLmxlbmd0aCt5Lmxlbmd0aCx4LnN0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihnKXt2YXIgeT1uZXcgdyhudWxsKTtyZXR1cm4geS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRoaXMu''@;'; put 'put ''bXVsVG8oZyx5KX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihnKXt2YXIgeT1uZXcgdyhudWxsKTtyZXR1cm4geS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLGVlKHRoaXMsZyx5KX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9u''@;'; put 'put ''ZSgpLm11bFRvKGcsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpO2Zvcih2YXIgeT0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqZyxUPSg2NzEwODg2MyZDKSsoNjcx''@;'; put 'put ''MDg4NjMmeSk7eT4+PTI2LHkrPUMvNjcxMDg4NjR8MCx5Kz1UPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZUfXJldHVybiAwIT09eSYmKHRoaXMud29yZHNbeF09eSx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25l''@;'; put 'put ''KCkuaW11bG4oZyl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcpe3ZhciB5PWZ1bmN0aW9u''@;'; put 'put ''IFooQil7Zm9yKHZhciBnPW5ldyBBcnJheShCLmJpdExlbmd0aCgpKSx5PTA7eTxnLmxlbmd0aDt5Kyspe3ZhciBDPXklMjY7Z1t5XT0oQi53b3Jkc1t5LzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gZ30oZyk7aWYoMD09PXkubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxD''@;'; put 'put ''PTA7Qzx5Lmxlbmd0aCYmMD09PXlbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPHkubGVuZ3RoKWZvcih2YXIgVD14LnNxcigpO0M8eS5sZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09eVtDXSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oZyl7cCgi''@;'; put 'put ''bnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBULHk9ZyUyNix4PShnLXkpLzI2LEM9NjcxMDg4NjM+Pj4yNi15PDwyNi15O2lmKDAhPT15KXt2YXIgSD0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBqPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29y''@;'; put 'put ''ZHNbVF0pLWo8PHl8SCxIPWo+Pj4yNi15fUgmJih0aGlzLndvcmRzW1RdPUgsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXgpe2ZvcihUPXRoaXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlz''@;'; put 'put ''Lmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oZyl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihnLHkseCl7dmFyIEM7cCgibnVtYmVyIj09dHlwZW9m''@;'; put 'put ''IGcmJmc+PTApLEM9eT8oeS15JTI2KS8yNjowO3ZhciBUPWclMjYsSD1NYXRoLm1pbigoZy1UKS8yNix0aGlzLmxlbmd0aCksaj02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPUgsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208SDttKyspRS53b3Jkc1ttXT10aGlz''@;'; put 'put ''LndvcmRzW21dO0UubGVuZ3RoPUh9aWYoMCE9PUgpaWYodGhpcy5sZW5ndGg+SClmb3IodGhpcy5sZW5ndGgtPUgsbT0wO208dGhpcy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttK0hdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3Io''@;'; put 'put ''bT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgYWU9MHx0aGlzLndvcmRzW21dO3RoaXMud29yZHNbbV09QTw8MjYtVHxhZT4+PlQsQT1hZSZqfXJldHVybiBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53''@;'; put 'put ''b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oZyx5LHgpe3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihnLHkseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xv''@;'; put 'put ''bmUoKS5pc2hsbihnKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oZyl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihnKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oZyl7''@;'; put 'put ''cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oZyl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT1nJTI2LHg9KGcteSkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PHkpKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT1nJTI2LHg9KGcteSkvMjY7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6''@;'; put 'put ''KDAhPT15JiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PXkmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+Pnk8PHkpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlz''@;'; put 'put ''LmNsb25lKCkuaW1hc2tuKGcpfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gcCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCksZzwwP3RoaXMuaXN1Ym4oLWcpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8''@;'; put 'put ''Zz8odGhpcy53b3Jkc1swXT1nLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGcpfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oZyl7dGhpcy53''@;'; put 'put ''b3Jkc1swXSs9Zztmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3ldPj02NzEwODg2NDt5KyspdGhpcy53b3Jkc1t5XS09NjcxMDg4NjQseT09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1t5KzFdPTE6dGhpcy53b3Jkc1t5KzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1h''@;'; put 'put ''dGgubWF4KHRoaXMubGVuZ3RoLHkrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZyl7aWYocCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCksZzwwKXJldHVybiB0aGlzLmlhZGRuKC1nKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2''@;'; put 'put ''ZT0wLHRoaXMuaWFkZG4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09ZywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgeT0wO3k8dGhpcy5sZW5n''@;'; put 'put ''dGgmJnRoaXMud29yZHNbeV08MDt5KyspdGhpcy53b3Jkc1t5XSs9NjcxMDg4NjQsdGhpcy53b3Jkc1t5KzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihnKX0sdy5wcm90b3R5cGUuc3Vibj1m''@;'; put 'put ''dW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGcpfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''X2lzaGxuc3VibXVsPWZ1bmN0aW9uKGcseSx4KXt2YXIgVDt0aGlzLl9leHBhbmQoZy5sZW5ndGgreCk7dmFyIEgsaj0wO2ZvcihUPTA7VDxnLmxlbmd0aDtUKyspe0g9KDB8dGhpcy53b3Jkc1tUK3hdKStqO3ZhciBFPSgwfGcud29yZHNbVF0pKnk7aj0oKEgtPTY3MTA4ODYzJkUpPj4yNikt''@;'; put 'put ''KEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkh9Zm9yKDtUPHRoaXMubGVuZ3RoLXg7VCsrKWo9KEg9KDB8dGhpcy53b3Jkc1tUK3hdKStqKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkg7aWYoMD09PWopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IocCgtMT09''@;'; put 'put ''PWopLGo9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspaj0oSD0tKDB8dGhpcy53b3Jkc1tUXSkraik+PjI2LHRoaXMud29yZHNbVF09NjcxMDg4NjMmSDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oZyx5KXt2YXIgeCxD''@;'; put 'put ''PXRoaXMuY2xvbmUoKSxUPWcsSD0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRCaXRzKEgpKSYmKFQ9VC51c2hsbih4KSxDLml1c2hsbih4KSxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PXkpeyht''@;'; put 'put ''PW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3RoKTtmb3IodmFyIEE9MDtBPG0ubGVuZ3RoO0ErKyltLndvcmRzW0FdPTB9dmFyIGFlPUMuY2xvbmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1hZS5uZWdhdGl2ZSYmKEM9YWUsbSYmKG0ud29yZHNb''@;'; put 'put ''RV09MSkpO2Zvcih2YXIgbmU9RS0xO25lPj0wO25lLS0pe3ZhciBzZT02NzEwODg2NCooMHxDLndvcmRzW1QubGVuZ3RoK25lXSkrKDB8Qy53b3Jkc1tULmxlbmd0aCtuZS0xXSk7Zm9yKHNlPU1hdGgubWluKHNlL0h8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxzZSxuZSk7MCE9PUMu''@;'; put 'put ''bmVnYXRpdmU7KXNlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSxuZSksQy5pc1plcm8oKXx8KEMubmVnYXRpdmVePTEpO20mJihtLndvcmRzW25lXT1zZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT15JiYwIT09eCYmQy5pdXNocm4oeCkse2Rpdjpt''@;'; put 'put ''fHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcseSx4KXtyZXR1cm4gcCghZy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2''@;'; put 'put ''bW9kKGcseSksIm1vZCIhPT15JiYoQz1ILmRpdi5uZWcoKSksImRpdiIhPT15JiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pYWRkKGcpKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmU/KEg9dGhpcy5kaXZtb2QoZy5uZWcoKSx5''@;'; put 'put ''KSwibW9kIiE9PXkmJihDPUguZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOkgubW9kfSk6dGhpcy5uZWdhdGl2ZSZnLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKGcubmVnKCkseSksImRpdiIhPT15JiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKGcpKSx7ZGl2''@;'; put 'put ''OkguZGl2LG1vZDpUfSk6Zy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcpPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PWcubGVuZ3RoPyJkaXYiPT09eT97ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT15P3tkaXY6bnVsbCxtb2Q6bmV3IHco''@;'; put 'put ''dGhpcy5tb2RuKGcud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kbihnLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoZyx5KTt2YXIgQyxULEh9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywi''@;'; put 'put ''ZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1m''@;'; put 'put ''dW5jdGlvbihnKXt2YXIgeT10aGlzLmRpdm1vZChnKTtpZih5Lm1vZC5pc1plcm8oKSlyZXR1cm4geS5kaXY7dmFyIHg9MCE9PXkuZGl2Lm5lZ2F0aXZlP3kubW9kLmlzdWIoZyk6eS5tb2QsQz1nLnVzaHJuKDEpLFQ9Zy5hbmRsbigxKSxIPXguY21wKEMpO3JldHVybiBIPDB8fDE9PT1UJiYw''@;'; put 'put ''PT09SD95LmRpdjowIT09eS5kaXYubmVnYXRpdmU/eS5kaXYuaXN1Ym4oMSk6eS5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oZyl7cChnPD02NzEwODg2Myk7Zm9yKHZhciB5PSgxPDwyNiklZyx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KHkqeCsoMHx0''@;'; put 'put ''aGlzLndvcmRzW0NdKSklZztyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oZyl7cChnPD02NzEwODg2Myk7Zm9yKHZhciB5PTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCp5O3RoaXMud29yZHNbeF09Qy9nfDAs''@;'; put 'put ''eT1DJWd9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGcpfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUpLHAoIWcuaXNaZXJvKCkpO3ZhciB5PXRoaXMseD1nLmNs''@;'; put 'put ''b25lKCk7eT0wIT09eS5uZWdhdGl2ZT95LnVtb2QoZyk6eS5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9bmV3IHcoMCksaj1uZXcgdygxKSxFPTA7eS5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspeS5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNs''@;'; put 'put ''b25lKCksQT15LmNsb25lKCk7IXkuaXNaZXJvKCk7KXtmb3IodmFyIGFlPTAsbmU9MTshKHkud29yZHNbMF0mbmUpJiZhZTwyNjsrK2FlLG5lPDw9MSk7aWYoYWU+MClmb3IoeS5pdXNocm4oYWUpO2FlLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEp''@;'; put 'put ''KSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIHNlPTAsQ2U9MTshKHgud29yZHNbMF0mQ2UpJiZzZTwyNjsrK3NlLENlPDw9MSk7aWYoc2U+MClmb3IoeC5pdXNocm4oc2UpO3NlLS0gPjA7KShILmlzT2RkKCl8fGouaXNPZGQoKSkmJihILmlhZGQobSksai5pc3ViKEEpKSxILml1''@;'; put 'put ''c2hybigxKSxqLml1c2hybigxKTt5LmNtcCh4KT49MD8oeS5pc3ViKHgpLEMuaXN1YihIKSxULmlzdWIoaikpOih4LmlzdWIoeSksSC5pc3ViKEMpLGouaXN1YihUKSl9cmV0dXJue2E6SCxiOmosZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGcpe3AoMD09''@;'; put 'put ''PWcubmVnYXRpdmUpLHAoIWcuaXNaZXJvKCkpO3ZhciBhZSx5PXRoaXMseD1nLmNsb25lKCk7eT0wIT09eS5uZWdhdGl2ZT95LnVtb2QoZyk6eS5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9eC5jbG9uZSgpO3kuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2''@;'; put 'put ''YXIgaj0wLEU9MTshKHkud29yZHNbMF0mRSkmJmo8MjY7KytqLEU8PD0xKTtpZihqPjApZm9yKHkuaXVzaHJuKGopO2otLSA+MDspQy5pc09kZCgpJiZDLmlhZGQoSCksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClm''@;'; put 'put ''b3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChIKSxULml1c2hybigxKTt5LmNtcCh4KT49MD8oeS5pc3ViKHgpLEMuaXN1YihUKSk6KHguaXN1Yih5KSxULmlzdWIoQykpfXJldHVybihhZT0wPT09eS5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZhZS5pYWRkKGcpLGFl''@;'; put 'put ''fSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oZyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gZy5hYnMoKTtpZihnLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciB5PXRoaXMuY2xvbmUoKSx4PWcuY2xvbmUoKTt5Lm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO3ku''@;'; put 'put ''aXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKXkuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDt5LmlzRXZlbigpOyl5Lml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBUPXkuY21wKHgpO2lmKFQ8MCl7dmFyIEg9eTt5PXgseD1IfWVsc2UgaWYoMD09''@;'; put 'put ''PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7eS5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihDKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5lZ2NkKGcpLmEudW1vZChnKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNb''@;'; put 'put ''MF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLndvcmRzWzBdJmd9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBn''@;'; put 'put ''KTt2YXIgeT1nJTI2LHg9KGcteSkvMjYsQz0xPDx5O2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsSD14OzAhPT1UJiZIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9MHx0aGlzLndvcmRzW0hdO1Q9KGor''@;'; put 'put ''PVQpPj4+MjYsdGhpcy53b3Jkc1tIXT1qJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0aGlzLndvcmRzW0hdPVQsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJv''@;'; put 'put ''dG90eXBlLmNtcG49ZnVuY3Rpb24oZyl7dmFyIHgseT1nPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiF5KXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZ5KXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle3kmJihnPS1nKSxwKGc8PTY3MTA4ODYz''@;'; put 'put ''LCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1nPzA6QzxnPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGcpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1''@;'; put 'put ''cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIDE7dmFyIHk9dGhpcy51Y21wKGcpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC15Onl9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oZyl7aWYodGhpcy5sZW5ndGg+Zy5sZW5ndGgpcmV0dXJuIDE7''@;'; put 'put ''aWYodGhpcy5sZW5ndGg8Zy5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciB5PTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0wfHRoaXMud29yZHNbeF0sVD0wfGcud29yZHNbeF07aWYoQyE9PVQpe0M8VD95PS0xOkM+VCYmKHk9MSk7YnJlYWt9fXJldHVybiB5fSx3LnByb3RvdHlw''@;'; put 'put ''ZS5ndG49ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXAoZyl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1''@;'; put 'put ''bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wKGcpfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGcp''@;'; put 'put ''e3JldHVybiB0aGlzLmNtcG4oZyk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oZyl7cmV0dXJuIDA9''@;'; put 'put ''PT10aGlzLmNtcChnKX0sdy5yZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBNZShnKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IikscCgwPT09dGhpcy5uZWdhdGl2ZSwicmVk''@;'; put 'put ''IHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoZyl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIp''@;'; put 'put ''LHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucmVkPWcsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVj''@;'; put 'put ''dGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoZyl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1''@;'; put 'put ''bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJl''@;'; put 'put ''ZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTaGw9''@;'; put 'put ''ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJl''@;'; put 'put ''ZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5tdWwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnky''@;'; put 'put ''KHRoaXMsZyksdGhpcy5yZWQuaW11bCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5w''@;'; put 'put ''cm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gcCh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25s''@;'; put 'put ''eSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVy''@;'; put 'put ''aWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCYmIWcucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGcpfTt2YXIgcmU9e2sy''@;'; put 'put ''NTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBpZShCLGcpe3RoaXMubmFtZT1CLHRoaXMucD1uZXcgdyhnLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50''@;'; put 'put ''bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gdWUoKXtpZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIGdlKCl7aWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBfZSgpe2llLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtp''@;'; put 'put ''ZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIE1lKEIpe2lmKCJzdHJpbmciPT10eXBlb2YgQil7dmFyIGc9dy5fcHJpbWUoQik7dGhpcy5tPWcucCx0aGlzLnBy''@;'; put 'put ''aW1lPWd9ZWxzZSBwKEIuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Qix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gWmUoQil7TWUuY2FsbCh0aGlzLEIpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlz''@;'; put 'put ''LnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEp''@;'; put 'put ''LmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9aWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgdyhudWxsKTtyZXR1cm4gZy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMu''@;'; put 'put ''bi8xMykpLGd9LGllLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGcpe3ZhciB4LHk9Zztkb3t0aGlzLnNwbGl0KHksdGhpcy50bXApLHg9KHk9KHk9dGhpcy5pbXVsSyh5KSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTp5''@;'; put 'put ''LnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KHkud29yZHNbMF09MCx5Lmxlbmd0aD0xKTpDPjA/eS5pc3ViKHRoaXMucCk6dm9pZCAwIT09eS5zdHJpcD95LnN0cmlwKCk6eS5fc3RyaXAoKSx5fSxpZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyx5KXtnLml1c2hybih0aGlzLm4sMCx5''@;'; put 'put ''KX0saWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe3JldHVybiBnLmltdWwodGhpcy5rKX0sVih1ZSxpZSksdWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcseSl7Zm9yKHZhciB4PTQxOTQzMDMsQz1NYXRoLm1pbihnLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyl5LndvcmRzW1RdPWcu''@;'; put 'put ''d29yZHNbVF07aWYoeS5sZW5ndGg9QyxnLmxlbmd0aDw9OSlyZXR1cm4gZy53b3Jkc1swXT0wLHZvaWQoZy5sZW5ndGg9MSk7dmFyIEg9Zy53b3Jkc1s5XTtmb3IoeS53b3Jkc1t5Lmxlbmd0aCsrXT1IJngsVD0xMDtUPGcubGVuZ3RoO1QrKyl7dmFyIGo9MHxnLndvcmRzW1RdO2cud29yZHNb''@;'; put 'put ''VC0xMF09KGomeCk8PDR8SD4+PjIyLEg9an1nLndvcmRzW1QtMTBdPUg+Pj49MjIsZy5sZW5ndGgtPTA9PT1IJiZnLmxlbmd0aD4xMD8xMDo5fSx1ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zy53b3Jkc1tnLmxlbmd0aF09MCxnLndvcmRzW2cubGVuZ3RoKzFdPTAsZy5sZW5ndGgr''@;'; put 'put ''PTI7Zm9yKHZhciB5PTAseD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgQz0wfGcud29yZHNbeF07Zy53b3Jkc1t4XT02NzEwODg2MyYoeSs9OTc3KkMpLHk9NjQqQysoeS82NzEwODg2NHwwKX1yZXR1cm4gMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJihnLmxlbmd0aC0tLDA9PT1nLndvcmRzW2cu''@;'; put 'put ''bGVuZ3RoLTFdJiZnLmxlbmd0aC0tKSxnfSxWKGdlLGllKSxWKF9lLGllKSxWKFRlLGllKSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PTAseD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxnLndvcmRzW3hdKSt5LFQ9NjcxMDg4NjMmQztDPj4+PTI2LGcu''@;'; put 'put ''d29yZHNbeF09VCx5PUN9cmV0dXJuIDAhPT15JiYoZy53b3Jkc1tnLmxlbmd0aCsrXT15KSxnfSx3Ll9wcmltZT1mdW5jdGlvbihnKXtpZihyZVtnXSlyZXR1cm4gcmVbZ107dmFyIHk7aWYoImsyNTYiPT09Zyl5PW5ldyB1ZTtlbHNlIGlmKCJwMjI0Ij09PWcpeT1uZXcgZ2U7ZWxzZSBpZigi''@;'; put 'put ''cDE5MiI9PT1nKXk9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1nKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK2cpO3k9bmV3IFRlfXJldHVybiByZVtnXT15LHl9LE1lLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlLCJyZWQgd29ya3Mg''@;'; put 'put ''b25seSB3aXRoIHBvc2l0aXZlcyIpLHAoZy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sTWUucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGcseSl7cCghKGcubmVnYXRpdmV8eS5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscChn''@;'; put 'put ''LnJlZCYmZy5yZWQ9PT15LnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxNZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoZykuX2ZvcmNlUmVkKHRoaXMpOmcudW1vZCh0aGlzLm0pLl9mb3JjZVJl''@;'; put 'put ''ZCh0aGlzKX0sTWUucHJvdG90eXBlLm5lZz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pc1plcm8oKT9nLmNsb25lKCk6dGhpcy5tLnN1YihnKS5fZm9yY2VSZWQodGhpcyl9LE1lLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5hZGQoeSk7cmV0''@;'; put 'put ''dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxNZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmlhZGQoeSk7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9''@;'; put 'put ''LE1lLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5zdWIoeSk7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sTWUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnky''@;'; put 'put ''KGcseSk7dmFyIHg9Zy5pc3ViKHkpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseH0sTWUucHJvdG90eXBlLnNobD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkxKGcpLHRoaXMuaW1vZChnLnVzaGxuKHkpKX0sTWUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24o''@;'; put 'put ''Zyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLHkpLHRoaXMuaW1vZChnLmltdWwoeSkpfSxNZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyx5KSx0aGlzLmltb2QoZy5tdWwoeSkpfSxNZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihnKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5pbXVsKGcsZy5jbG9uZSgpKX0sTWUucHJvdG90eXBlLnNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5tdWwoZyxnKX0sTWUucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oZyl7aWYoZy5pc1plcm8oKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciB5PXRoaXMubS5hbmRsbigzKTtpZihw''@;'; put 'put ''KHklMj09MSksMz09PXkpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coZyx4KX1mb3IodmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO3AoIUMuaXNaZXJvKCkpO3Zh''@;'; put 'put ''ciBIPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGo9SC5yZWROZWcoKSxFPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxtPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKGopOyltLnJlZElBZGQoaik7Zm9yKHZhciBB''@;'; put 'put ''PXRoaXMucG93KG0sQyksYWU9dGhpcy5wb3coZyxDLmFkZG4oMSkuaXVzaHJuKDEpKSxuZT10aGlzLnBvdyhnLEMpLHNlPVQ7MCE9PW5lLmNtcChIKTspe2Zvcih2YXIgQ2U9bmUsVWU9MDswIT09Q2UuY21wKEgpO1VlKyspQ2U9Q2UucmVkU3FyKCk7cChVZTxzZSk7dmFyIEplPXRoaXMucG93''@;'; put 'put ''KEEsbmV3IHcoMSkuaXVzaGxuKHNlLVVlLTEpKTthZT1hZS5yZWRNdWwoSmUpLEE9SmUucmVkU3FyKCksbmU9bmUucmVkTXVsKEEpLHNlPVVlfXJldHVybiBhZX0sTWUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7dmFyIHk9Zy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PXkubmVnYXRp''@;'; put 'put ''dmU/KHkubmVnYXRpdmU9MCx0aGlzLmltb2QoeSkucmVkTmVnKCkpOnRoaXMuaW1vZCh5KX0sTWUucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnLHkpe2lmKHkuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT15LmNtcG4oMSkpcmV0dXJuIGcuY2xvbmUoKTt2YXIg''@;'; put 'put ''Qz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1nO2Zvcih2YXIgVD0yO1Q8Qy5sZW5ndGg7VCsrKUNbVF09dGhpcy5tdWwoQ1tULTFdLGcpO3ZhciBIPUNbMF0saj0wLEU9MCxtPXkuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD15Lmxlbmd0''@;'; put 'put ''aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9eS53b3Jkc1tUXSxhZT1tLTE7YWU+PTA7YWUtLSl7dmFyIG5lPUE+PmFlJjE7SCE9PUNbMF0mJihIPXRoaXMuc3FyKEgpKSwwIT09bmV8fDAhPT1qPyhqPDw9MSxqfD1uZSwoND09KytFfHwwPT09VCYmMD09PWFlKSYmKEg9dGhpcy5tdWwoSCxDW2pd''@;'; put 'put ''KSxFPTAsaj0wKSk6RT0wfW09MjZ9cmV0dXJuIEh9LE1lLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7dmFyIHk9Zy51bW9kKHRoaXMubSk7cmV0dXJuIHk9PT1nP3kuY2xvbmUoKTp5fSxNZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIHk9Zy5jbG9uZSgp''@;'; put 'put ''O3JldHVybiB5LnJlZD1udWxsLHl9LHcubW9udD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IFplKGcpfSxWKFplLE1lKSxaZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy51c2hsbih0aGlzLnNoaWZ0KSl9LFplLnByb3RvdHlwZS5jb252ZXJ0RnJv''@;'; put 'put ''bT1mdW5jdGlvbihnKXt2YXIgeT10aGlzLmltb2QoZy5tdWwodGhpcy5yaW52KSk7cmV0dXJuIHkucmVkPW51bGwseX0sWmUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyx5KXtpZihnLmlzWmVybygpfHx5LmlzWmVybygpKXJldHVybiBnLndvcmRzWzBdPTAsZy5sZW5ndGg9MSxnO3ZhciB4''@;'; put 'put ''PWcuaW11bCh5KSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8''@;'; put 'put ''MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxaZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcseSl7aWYoZy5pc1plcm8oKXx8eS5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PWcubXVsKHkpLEM9eC5tYXNrbih0aGlzLnNoaWZ0''@;'; put 'put ''KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VS''@;'; put 'put ''ZWQodGhpcyl9LFplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KGNlPWIubm1kKGNlKSx0aGlzKX0sOTI4MjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQx''@;'; put 'put ''NTUpLF89Yig1MTA4KTtmdW5jdGlvbiBwKFZlKXtyZXR1cm4ocD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihBZSl7cmV0dXJuIHR5cGVvZiBBZX06ZnVuY3Rpb24oQWUpe3JldHVybiBBZSYmImZ1bmN0aW9uIj09''@;'; put 'put ''dHlwZW9mIFN5bWJvbCYmQWUuY29uc3RydWN0b3I9PT1TeW1ib2wmJkFlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgQWV9KShWZSl9ZnVuY3Rpb24gVihWZSxBZSl7Zm9yKHZhciBEZT0wO0RlPEFlLmxlbmd0aDtEZSsrKXt2YXIgX3Q9QWVbRGVdO190LmVudW1lcmFibGU9''@;'; put 'put ''X3QuZW51bWVyYWJsZXx8ITEsX3QuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBfdCYmKF90LndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVmUsUChfdC5rZXkpLF90KX19ZnVuY3Rpb24gdyhWZSxBZSxEZSl7cmV0dXJuIEFlJiZWKFZlLnByb3RvdHlwZSxBZSksRGUmJlYo''@;'; put 'put ''VmUsRGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxWZX1mdW5jdGlvbiBQKFZlKXt2YXIgQWU9ZnVuY3Rpb24gRihWZSxBZSl7aWYoIm9iamVjdCIhPT1wKFZlKXx8bnVsbD09PVZlKXJldHVybiBWZTt2YXIgRGU9VmVbU3ltYm9sLnRvUHJp''@;'; put 'put ''bWl0aXZlXTtpZih2b2lkIDAhPT1EZSl7dmFyIF90PURlLmNhbGwoVmUsQWV8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1wKF90KSlyZXR1cm4gX3Q7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0''@;'; put 'put ''cmluZyI9PT1BZT9TdHJpbmc6TnVtYmVyKShWZSl9KFZlLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PXAoQWUpP0FlOlN0cmluZyhBZSl9dmFyIFplLEIsTj1iKDIxMzYpLmNvZGVzLE89Ti5FUlJfQU1CSUdVT1VTX0FSR1VNRU5ULEs9Ti5FUlJfSU5WQUxJRF9BUkdfVFlQRSxaPU4uRVJS''@;'; put 'put ''X0lOVkFMSURfQVJHX1ZBTFVFLFk9Ti5FUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUsVz1OLkVSUl9NSVNTSU5HX0FSR1MscT1iKDU5NjEpLEo9Yig5NTM5KS5pbnNwZWN0LHJlPWIoOTUzOSkudHlwZXMsaWU9cmUuaXNQcm9taXNlLHVlPXJlLmlzUmVnRXhwLGdlPWIoODE2MikoKSxfZT1iKDU2''@;'; put 'put ''MjQpKCksVGU9YigxOTI0KSgiUmVnRXhwLnByb3RvdHlwZS50ZXN0Iik7ZnVuY3Rpb24gQygpe3ZhciBWZT1iKDkxNTgpO1plPVZlLmlzRGVlcEVxdWFsLEI9VmUuaXNEZWVwU3RyaWN0RXF1YWx9dmFyIEU9ITEsbT1jZS5leHBvcnRzPUNlLEE9e307ZnVuY3Rpb24gYWUoVmUpe3Rocm93IFZl''@;'; put 'put ''Lm1lc3NhZ2UgaW5zdGFuY2VvZiBFcnJvcj9WZS5tZXNzYWdlOm5ldyBxKFZlKX1mdW5jdGlvbiBzZShWZSxBZSxEZSxfdCl7aWYoIURlKXt2YXIgcnQ9ITE7aWYoMD09PUFlKXJ0PSEwLF90PSJObyB2YWx1ZSBhcmd1bWVudCBwYXNzZWQgdG8gYGFzc2VydC5vaygpYCI7ZWxzZSBpZihfdCBp''@;'; put 'put ''bnN0YW5jZW9mIEVycm9yKXRocm93IF90O3ZhciBRZT1uZXcgcSh7YWN0dWFsOkRlLGV4cGVjdGVkOiEwLG1lc3NhZ2U6X3Qsb3BlcmF0b3I6Ij09IixzdGFja1N0YXJ0Rm46VmV9KTt0aHJvdyBRZS5nZW5lcmF0ZWRNZXNzYWdlPXJ0LFFlfX1mdW5jdGlvbiBDZSgpe2Zvcih2YXIgVmU9YXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aCxBZT1uZXcgQXJyYXkoVmUpLERlPTA7RGU8VmU7RGUrKylBZVtEZV09YXJndW1lbnRzW0RlXTtzZS5hcHBseSh2b2lkIDAsW0NlLEFlLmxlbmd0aF0uY29uY2F0KEFlKSl9bS5mYWlsPWZ1bmN0aW9uIG5lKFZlLEFlLERlLF90LHJ0KXt2YXIgc24sUWU9YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aDtpZigwPT09UWU/c249IkZhaWxlZCI6MT09PVFlPyhEZT1WZSxWZT12b2lkIDApOighMT09PUUmJihFPSEwLChJLmVtaXRXYXJuaW5nP0kuZW1pdFdhcm5pbmc6Xy53YXJuLmJpbmQoXykpKCJhc3NlcnQuZmFpbCgpIHdpdGggbW9yZSB0aGFuIG9uZSBhcmd1bWVudCBpcyBkZXBy''@;'; put 'put ''ZWNhdGVkLiBQbGVhc2UgdXNlIGFzc2VydC5zdHJpY3RFcXVhbCgpIGluc3RlYWQgb3Igb25seSBwYXNzIGEgbWVzc2FnZS4iLCJEZXByZWNhdGlvbldhcm5pbmciLCJERVAwMDk0IikpLDI9PT1RZSYmKF90PSIhPSIpKSxEZSBpbnN0YW5jZW9mIEVycm9yKXRocm93IERlO3ZhciBTdD17YWN0''@;'; put 'put ''dWFsOlZlLGV4cGVjdGVkOkFlLG9wZXJhdG9yOnZvaWQgMD09PV90PyJmYWlsIjpfdCxzdGFja1N0YXJ0Rm46cnR8fG5lfTt2b2lkIDAhPT1EZSYmKFN0Lm1lc3NhZ2U9RGUpO3ZhciBlbj1uZXcgcShTdCk7dGhyb3cgc24mJihlbi5tZXNzYWdlPXNuLGVuLmdlbmVyYXRlZE1lc3NhZ2U9ITAp''@;'; put 'put ''LGVufSxtLkFzc2VydGlvbkVycm9yPXEsbS5vaz1DZSxtLmVxdWFsPWZ1bmN0aW9uIFZlKEFlLERlLF90KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFcoImFjdHVhbCIsImV4cGVjdGVkIik7QWUhPURlJiZhZSh7YWN0dWFsOkFlLGV4cGVjdGVkOkRlLG1lc3NhZ2U6X3Qsb3Bl''@;'; put 'put ''cmF0b3I6Ij09IixzdGFja1N0YXJ0Rm46VmV9KX0sbS5ub3RFcXVhbD1mdW5jdGlvbiBWZShBZSxEZSxfdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBXKCJhY3R1YWwiLCJleHBlY3RlZCIpO0FlPT1EZSYmYWUoe2FjdHVhbDpBZSxleHBlY3RlZDpEZSxtZXNzYWdlOl90LG9w''@;'; put 'put ''ZXJhdG9yOiIhPSIsc3RhY2tTdGFydEZuOlZlfSl9LG0uZGVlcEVxdWFsPWZ1bmN0aW9uIFZlKEFlLERlLF90KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFcoImFjdHVhbCIsImV4cGVjdGVkIik7dm9pZCAwPT09WmUmJkMoKSxaZShBZSxEZSl8fGFlKHthY3R1YWw6QWUsZXhw''@;'; put 'put ''ZWN0ZWQ6RGUsbWVzc2FnZTpfdCxvcGVyYXRvcjoiZGVlcEVxdWFsIixzdGFja1N0YXJ0Rm46VmV9KX0sbS5ub3REZWVwRXF1YWw9ZnVuY3Rpb24gVmUoQWUsRGUsX3Qpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgVygiYWN0dWFsIiwiZXhwZWN0ZWQiKTt2b2lkIDA9PT1aZSYm''@;'; put 'put ''QygpLFplKEFlLERlKSYmYWUoe2FjdHVhbDpBZSxleHBlY3RlZDpEZSxtZXNzYWdlOl90LG9wZXJhdG9yOiJub3REZWVwRXF1YWwiLHN0YWNrU3RhcnRGbjpWZX0pfSxtLmRlZXBTdHJpY3RFcXVhbD1mdW5jdGlvbiBWZShBZSxEZSxfdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5l''@;'; put 'put ''dyBXKCJhY3R1YWwiLCJleHBlY3RlZCIpO3ZvaWQgMD09PVplJiZDKCksQihBZSxEZSl8fGFlKHthY3R1YWw6QWUsZXhwZWN0ZWQ6RGUsbWVzc2FnZTpfdCxvcGVyYXRvcjoiZGVlcFN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46VmV9KX0sbS5ub3REZWVwU3RyaWN0RXF1YWw9ZnVuY3Rpb24g''@;'; put 'put ''VWUoVmUsQWUsRGUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgVygiYWN0dWFsIiwiZXhwZWN0ZWQiKTt2b2lkIDA9PT1aZSYmQygpLEIoVmUsQWUpJiZhZSh7YWN0dWFsOlZlLGV4cGVjdGVkOkFlLG1lc3NhZ2U6RGUsb3BlcmF0b3I6Im5vdERlZXBTdHJpY3RFcXVhbCIsc3Rh''@;'; put 'put ''Y2tTdGFydEZuOlVlfSl9LG0uc3RyaWN0RXF1YWw9ZnVuY3Rpb24gVmUoQWUsRGUsX3Qpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgVygiYWN0dWFsIiwiZXhwZWN0ZWQiKTtfZShBZSxEZSl8fGFlKHthY3R1YWw6QWUsZXhwZWN0ZWQ6RGUsbWVzc2FnZTpfdCxvcGVyYXRvcjoi''@;'; put 'put ''c3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpWZX0pfSxtLm5vdFN0cmljdEVxdWFsPWZ1bmN0aW9uIFZlKEFlLERlLF90KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFcoImFjdHVhbCIsImV4cGVjdGVkIik7X2UoQWUsRGUpJiZhZSh7YWN0dWFsOkFlLGV4cGVjdGVkOkRlLG1l''@;'; put 'put ''c3NhZ2U6X3Qsb3BlcmF0b3I6Im5vdFN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46VmV9KX07dmFyIEplPXcoZnVuY3Rpb24gVmUoQWUsRGUsX3Qpe3ZhciBydD10aGlzOyhmdW5jdGlvbiBSKFZlLEFlKXtpZighKFZlIGluc3RhbmNlb2YgQWUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5v''@;'; put 'put ''dCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxWZSksRGUuZm9yRWFjaChmdW5jdGlvbihRZSl7UWUgaW4gQWUmJihydFtRZV09dm9pZCAwIT09X3QmJiJzdHJpbmciPT10eXBlb2YgX3RbUWVdJiZ1ZShBZVtRZV0pJiZUZShBZVtRZV0sX3RbUWVdKT9fdFtRZV06QWVbUWVd''@;'; put 'put ''KX0pfSk7ZnVuY3Rpb24geGUoVmUsQWUsRGUsX3Qpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBBZSl7aWYodWUoQWUpKXJldHVybiBUZShBZSxWZSk7aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IEsoImV4cGVjdGVkIixbIkZ1bmN0aW9uIiwiUmVnRXhwIl0sQWUpO2lmKCJvYmpl''@;'; put 'put ''Y3QiIT09cChWZSl8fG51bGw9PT1WZSl7dmFyIHJ0PW5ldyBxKHthY3R1YWw6VmUsZXhwZWN0ZWQ6QWUsbWVzc2FnZTpEZSxvcGVyYXRvcjoiZGVlcFN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46X3R9KTt0aHJvdyBydC5vcGVyYXRvcj1fdC5uYW1lLHJ0fXZhciBRZT1PYmplY3Qua2V5cyhB''@;'; put 'put ''ZSk7aWYoQWUgaW5zdGFuY2VvZiBFcnJvcilRZS5wdXNoKCJuYW1lIiwibWVzc2FnZSIpO2Vsc2UgaWYoMD09PVFlLmxlbmd0aCl0aHJvdyBuZXcgWigiZXJyb3IiLEFlLCJtYXkgbm90IGJlIGFuIGVtcHR5IG9iamVjdCIpO3JldHVybiB2b2lkIDA9PT1aZSYmQygpLFFlLmZvckVhY2goZnVu''@;'; put 'put ''Y3Rpb24oc24peyJzdHJpbmciPT10eXBlb2YgVmVbc25dJiZ1ZShBZVtzbl0pJiZUZShBZVtzbl0sVmVbc25dKXx8ZnVuY3Rpb24gaXQoVmUsQWUsRGUsX3QscnQsUWUpe2lmKCEoRGUgaW4gVmUpfHwhQihWZVtEZV0sQWVbRGVdKSl7aWYoIV90KXt2YXIgc249bmV3IEplKFZlLHJ0KSx2dD1u''@;'; put 'put ''ZXcgSmUoQWUscnQsVmUpLFN0PW5ldyBxKHthY3R1YWw6c24sZXhwZWN0ZWQ6dnQsb3BlcmF0b3I6ImRlZXBTdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOlFlfSk7dGhyb3cgU3QuYWN0dWFsPVZlLFN0LmV4cGVjdGVkPUFlLFN0Lm9wZXJhdG9yPVFlLm5hbWUsU3R9YWUoe2FjdHVhbDpWZSxl''@;'; put 'put ''eHBlY3RlZDpBZSxtZXNzYWdlOl90LG9wZXJhdG9yOlFlLm5hbWUsc3RhY2tTdGFydEZuOlFlfSl9fShWZSxBZSxzbixEZSxRZSxfdCl9KSwhMH1yZXR1cm4gdm9pZCAwIT09QWUucHJvdG90eXBlJiZWZSBpbnN0YW5jZW9mIEFlfHwhRXJyb3IuaXNQcm90b3R5cGVPZihBZSkmJiEwPT09QWUu''@;'; put 'put ''Y2FsbCh7fSxWZSl9ZnVuY3Rpb24geWUoVmUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBWZSl0aHJvdyBuZXcgSygiZm4iLCJGdW5jdGlvbiIsVmUpO3RyeXtWZSgpfWNhdGNoKEFlKXtyZXR1cm4gQWV9cmV0dXJuIEF9ZnVuY3Rpb24gS2UoVmUpe3JldHVybiBpZShWZSl8fG51bGwhPT1WZSYm''@;'; put 'put ''Im9iamVjdCI9PT1wKFZlKSYmImZ1bmN0aW9uIj09dHlwZW9mIFZlLnRoZW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBWZS5jYXRjaH1mdW5jdGlvbiBqZShWZSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXt2YXIgQWU7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFZlKXtp''@;'; put 'put ''ZighS2UoQWU9VmUoKSkpdGhyb3cgbmV3IFkoImluc3RhbmNlIG9mIFByb21pc2UiLCJwcm9taXNlRm4iLEFlKX1lbHNle2lmKCFLZShWZSkpdGhyb3cgbmV3IEsoInByb21pc2VGbiIsWyJGdW5jdGlvbiIsIlByb21pc2UiXSxWZSk7QWU9VmV9cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRo''@;'; put 'put ''ZW4oZnVuY3Rpb24oKXtyZXR1cm4gQWV9KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIEF9KS5jYXRjaChmdW5jdGlvbihEZSl7cmV0dXJuIERlfSl9KX1mdW5jdGlvbiBrZShWZSxBZSxEZSxfdCl7aWYoInN0cmluZyI9PXR5cGVvZiBEZSl7aWYoND09PWFyZ3VtZW50cy5sZW5ndGgpdGhyb3cg''@;'; put 'put ''bmV3IEsoImVycm9yIixbIk9iamVjdCIsIkVycm9yIiwiRnVuY3Rpb24iLCJSZWdFeHAiXSxEZSk7aWYoIm9iamVjdCI9PT1wKEFlKSYmbnVsbCE9PUFlKXtpZihBZS5tZXNzYWdlPT09RGUpdGhyb3cgbmV3IE8oImVycm9yL21lc3NhZ2UiLCdUaGUgZXJyb3IgbWVzc2FnZSAiJy5jb25jYXQo''@;'; put 'put ''QWUubWVzc2FnZSwnIiBpcyBpZGVudGljYWwgdG8gdGhlIG1lc3NhZ2UuJykpfWVsc2UgaWYoQWU9PT1EZSl0aHJvdyBuZXcgTygiZXJyb3IvbWVzc2FnZSIsJ1RoZSBlcnJvciAiJy5jb25jYXQoQWUsJyIgaXMgaWRlbnRpY2FsIHRvIHRoZSBtZXNzYWdlLicpKTtfdD1EZSxEZT12b2lkIDB9''@;'; put 'put ''ZWxzZSBpZihudWxsIT1EZSYmIm9iamVjdCIhPT1wKERlKSYmImZ1bmN0aW9uIiE9dHlwZW9mIERlKXRocm93IG5ldyBLKCJlcnJvciIsWyJPYmplY3QiLCJFcnJvciIsIkZ1bmN0aW9uIiwiUmVnRXhwIl0sRGUpO2lmKEFlPT09QSl7dmFyIHJ0PSIiO0RlJiZEZS5uYW1lJiYocnQrPSIgKCIu''@;'; put 'put ''Y29uY2F0KERlLm5hbWUsIikiKSkscnQrPV90PyI6ICIuY29uY2F0KF90KToiLiIsYWUoe2FjdHVhbDp2b2lkIDAsZXhwZWN0ZWQ6RGUsb3BlcmF0b3I6VmUubmFtZSxtZXNzYWdlOiJNaXNzaW5nIGV4cGVjdGVkICIuY29uY2F0KCJyZWplY3RzIj09PVZlLm5hbWU/InJlamVjdGlvbiI6ImV4''@;'; put 'put ''Y2VwdGlvbiIpLmNvbmNhdChydCksc3RhY2tTdGFydEZuOlZlfSl9aWYoRGUmJiF4ZShBZSxEZSxfdCxWZSkpdGhyb3cgQWV9ZnVuY3Rpb24gSGUoVmUsQWUsRGUsX3Qpe2lmKEFlIT09QSl7aWYoInN0cmluZyI9PXR5cGVvZiBEZSYmKF90PURlLERlPXZvaWQgMCksIURlfHx4ZShBZSxEZSkp''@;'; put 'put ''e3ZhciBydD1fdD8iOiAiLmNvbmNhdChfdCk6Ii4iO2FlKHthY3R1YWw6QWUsZXhwZWN0ZWQ6RGUsb3BlcmF0b3I6VmUubmFtZSxtZXNzYWdlOiJHb3QgdW53YW50ZWQgIi5jb25jYXQoImRvZXNOb3RSZWplY3QiPT09VmUubmFtZT8icmVqZWN0aW9uIjoiZXhjZXB0aW9uIikuY29uY2F0KHJ0''@;'; put 'put ''LCJcbiIpKydBY3R1YWwgbWVzc2FnZTogIicuY29uY2F0KEFlJiZBZS5tZXNzYWdlLCciJyksc3RhY2tTdGFydEZuOlZlfSl9dGhyb3cgQWV9fWZ1bmN0aW9uIExlKFZlLEFlLERlLF90LHJ0KXtpZighdWUoQWUpKXRocm93IG5ldyBLKCJyZWdleHAiLCJSZWdFeHAiLEFlKTt2YXIgUWU9Im1h''@;'; put 'put ''dGNoIj09PXJ0O2lmKCJzdHJpbmciIT10eXBlb2YgVmV8fFRlKEFlLFZlKSE9PVFlKXtpZihEZSBpbnN0YW5jZW9mIEVycm9yKXRocm93IERlO3ZhciBzbj0hRGU7RGU9RGV8fCgic3RyaW5nIiE9dHlwZW9mIFZlPydUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmlu''@;'; put 'put ''Zy4gUmVjZWl2ZWQgdHlwZSAnKyIiLmNvbmNhdChwKFZlKSwiICgiKS5jb25jYXQoSihWZSksIikiKTooUWU/IlRoZSBpbnB1dCBkaWQgbm90IG1hdGNoIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gIjoiVGhlIGlucHV0IHdhcyBleHBlY3RlZCB0byBub3QgbWF0Y2ggdGhlIHJlZ3VsYXIgZXhw''@;'; put 'put ''cmVzc2lvbiAiKSsiIi5jb25jYXQoSihBZSksIi4gSW5wdXQ6XG5cbiIpLmNvbmNhdChKKFZlKSwiXG4iKSk7dmFyIHZ0PW5ldyBxKHthY3R1YWw6VmUsZXhwZWN0ZWQ6QWUsbWVzc2FnZTpEZSxvcGVyYXRvcjpydCxzdGFja1N0YXJ0Rm46X3R9KTt0aHJvdyB2dC5nZW5lcmF0ZWRNZXNzYWdl''@;'; put 'put ''PXNuLHZ0fX1mdW5jdGlvbiBSZSgpe2Zvcih2YXIgVmU9YXJndW1lbnRzLmxlbmd0aCxBZT1uZXcgQXJyYXkoVmUpLERlPTA7RGU8VmU7RGUrKylBZVtEZV09YXJndW1lbnRzW0RlXTtzZS5hcHBseSh2b2lkIDAsW1JlLEFlLmxlbmd0aF0uY29uY2F0KEFlKSl9bS50aHJvd3M9ZnVuY3Rpb24g''@;'; put 'put ''VmUoQWUpe2Zvcih2YXIgRGU9YXJndW1lbnRzLmxlbmd0aCxfdD1uZXcgQXJyYXkoRGU+MT9EZS0xOjApLHJ0PTE7cnQ8RGU7cnQrKylfdFtydC0xXT1hcmd1bWVudHNbcnRdO2tlLmFwcGx5KHZvaWQgMCxbVmUseWUoQWUpXS5jb25jYXQoX3QpKX0sbS5yZWplY3RzPWZ1bmN0aW9uIFZlKEFl''@;'; put 'put ''KXtmb3IodmFyIERlPWFyZ3VtZW50cy5sZW5ndGgsX3Q9bmV3IEFycmF5KERlPjE/RGUtMTowKSxydD0xO3J0PERlO3J0KyspX3RbcnQtMV09YXJndW1lbnRzW3J0XTtyZXR1cm4gamUoQWUpLnRoZW4oZnVuY3Rpb24oUWUpe3JldHVybiBrZS5hcHBseSh2b2lkIDAsW1ZlLFFlXS5jb25jYXQo''@;'; put 'put ''X3QpKX0pfSxtLmRvZXNOb3RUaHJvdz1mdW5jdGlvbiBWZShBZSl7Zm9yKHZhciBEZT1hcmd1bWVudHMubGVuZ3RoLF90PW5ldyBBcnJheShEZT4xP0RlLTE6MCkscnQ9MTtydDxEZTtydCsrKV90W3J0LTFdPWFyZ3VtZW50c1tydF07SGUuYXBwbHkodm9pZCAwLFtWZSx5ZShBZSldLmNvbmNh''@;'; put 'put ''dChfdCkpfSxtLmRvZXNOb3RSZWplY3Q9ZnVuY3Rpb24gVmUoQWUpe2Zvcih2YXIgRGU9YXJndW1lbnRzLmxlbmd0aCxfdD1uZXcgQXJyYXkoRGU+MT9EZS0xOjApLHJ0PTE7cnQ8RGU7cnQrKylfdFtydC0xXT1hcmd1bWVudHNbcnRdO3JldHVybiBqZShBZSkudGhlbihmdW5jdGlvbihRZSl7''@;'; put 'put ''cmV0dXJuIEhlLmFwcGx5KHZvaWQgMCxbVmUsUWVdLmNvbmNhdChfdCkpfSl9LG0uaWZFcnJvcj1mdW5jdGlvbiBWZShBZSl7aWYobnVsbCE9QWUpe3ZhciBEZT0iaWZFcnJvciBnb3QgdW53YW50ZWQgZXhjZXB0aW9uOiAiOyJvYmplY3QiPT09cChBZSkmJiJzdHJpbmciPT10eXBlb2YgQWUu''@;'; put 'put ''bWVzc2FnZT9EZSs9MD09PUFlLm1lc3NhZ2UubGVuZ3RoJiZBZS5jb25zdHJ1Y3Rvcj9BZS5jb25zdHJ1Y3Rvci5uYW1lOkFlLm1lc3NhZ2U6RGUrPUooQWUpO3ZhciBfdD1uZXcgcSh7YWN0dWFsOkFlLGV4cGVjdGVkOm51bGwsb3BlcmF0b3I6ImlmRXJyb3IiLG1lc3NhZ2U6RGUsc3RhY2tT''@;'; put 'put ''dGFydEZuOlZlfSkscnQ9QWUuc3RhY2s7aWYoInN0cmluZyI9PXR5cGVvZiBydCl7dmFyIFFlPXJ0LnNwbGl0KCJcbiIpO1FlLnNoaWZ0KCk7Zm9yKHZhciBzbj1fdC5zdGFjay5zcGxpdCgiXG4iKSx2dD0wO3Z0PFFlLmxlbmd0aDt2dCsrKXt2YXIgU3Q9c24uaW5kZXhPZihRZVt2dF0pO2lm''@;'; put 'put ''KC0xIT09U3Qpe3NuPXNuLnNsaWNlKDAsU3QpO2JyZWFrfX1fdC5zdGFjaz0iIi5jb25jYXQoc24uam9pbigiXG4iKSwiXG4iKS5jb25jYXQoUWUuam9pbigiXG4iKSl9dGhyb3cgX3R9fSxtLm1hdGNoPWZ1bmN0aW9uIFZlKEFlLERlLF90KXtMZShBZSxEZSxfdCxWZSwibWF0Y2giKX0sbS5k''@;'; put 'put ''b2VzTm90TWF0Y2g9ZnVuY3Rpb24gVmUoQWUsRGUsX3Qpe0xlKEFlLERlLF90LFZlLCJkb2VzTm90TWF0Y2giKX0sbS5zdHJpY3Q9Z2UoUmUsbSx7ZXF1YWw6bS5zdHJpY3RFcXVhbCxkZWVwRXF1YWw6bS5kZWVwU3RyaWN0RXF1YWwsbm90RXF1YWw6bS5ub3RTdHJpY3RFcXVhbCxub3REZWVw''@;'; put 'put ''RXF1YWw6bS5ub3REZWVwU3RyaWN0RXF1YWx9KSxtLnN0cmljdC5zdHJpY3Q9bS5zdHJpY3R9LDU5NjE6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0MTU1KTtmdW5jdGlvbiBfKEEsYWUpe3ZhciBuZT1PYmplY3Qua2V5cyhBKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1i''@;'; put 'put ''b2xzKXt2YXIgc2U9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhBKTthZSYmKHNlPXNlLmZpbHRlcihmdW5jdGlvbihDZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoQSxDZSkuZW51bWVyYWJsZX0pKSxuZS5wdXNoLmFwcGx5KG5lLHNlKX1yZXR1cm4gbmV9''@;'; put 'put ''ZnVuY3Rpb24gcChBKXtmb3IodmFyIGFlPTE7YWU8YXJndW1lbnRzLmxlbmd0aDthZSsrKXt2YXIgbmU9bnVsbCE9YXJndW1lbnRzW2FlXT9hcmd1bWVudHNbYWVdOnt9O2FlJTI/XyhPYmplY3QobmUpLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHNlKXtWKEEsc2UsbmVbc2VdKX0pOk9iamVjdC5n''@;'; put 'put ''ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEEsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobmUpKTpfKE9iamVjdChuZSkpLmZvckVhY2goZnVuY3Rpb24oc2Upe09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLHNlLE9iamVjdC5nZXRPd25Q''@;'; put 'put ''cm9wZXJ0eURlc2NyaXB0b3IobmUsc2UpKX0pfXJldHVybiBBfWZ1bmN0aW9uIFYoQSxhZSxuZSl7cmV0dXJuKGFlPVIoYWUpKWluIEE/T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsYWUse3ZhbHVlOm5lLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6QVthZV09''@;'; put 'put ''bmUsQX1mdW5jdGlvbiBQKEEsYWUpe2Zvcih2YXIgbmU9MDtuZTxhZS5sZW5ndGg7bmUrKyl7dmFyIHNlPWFlW25lXTtzZS5lbnVtZXJhYmxlPXNlLmVudW1lcmFibGV8fCExLHNlLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gc2UmJihzZS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KEEsUihzZS5rZXkpLHNlKX19ZnVuY3Rpb24gUihBKXt2YXIgYWU9ZnVuY3Rpb24geihBLGFlKXtpZigib2JqZWN0IiE9PWllKEEpfHxudWxsPT09QSlyZXR1cm4gQTt2YXIgbmU9QVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PW5lKXt2YXIgc2U9bmUuY2FsbChBLGFl''@;'; put 'put ''fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09aWUoc2UpKXJldHVybiBzZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWFlP1N0cmluZzpOdW1iZXIpKEEpfShBLCJzdHJpbmciKTty''@;'; put 'put ''ZXR1cm4ic3ltYm9sIj09PWllKGFlKT9hZTpTdHJpbmcoYWUpfWZ1bmN0aW9uIEsoQSxhZSl7aWYoYWUmJigib2JqZWN0Ij09PWllKGFlKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGFlKSlyZXR1cm4gYWU7aWYodm9pZCAwIT09YWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1''@;'; put 'put ''Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gWihBKX1mdW5jdGlvbiBaKEEpe2lmKHZvaWQgMD09PUEpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxs''@;'; put 'put ''ZWQiKTtyZXR1cm4gQX1mdW5jdGlvbiBZKEEpe3ZhciBhZT0iZnVuY3Rpb24iPT10eXBlb2YgTWFwP25ldyBNYXA6dm9pZCAwO3JldHVybiBZPWZ1bmN0aW9uKHNlKXtpZihudWxsPT09c2V8fCFmdW5jdGlvbiBlZShBKXtyZXR1cm4tMSE9PUZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwoQSkuaW5k''@;'; put 'put ''ZXhPZigiW25hdGl2ZSBjb2RlXSIpfShzZSkpcmV0dXJuIHNlO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBzZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2lmKHR5cGVvZiBhZTwidSIpe2lmKGFlLmhhcyhz''@;'; put 'put ''ZSkpcmV0dXJuIGFlLmdldChzZSk7YWUuc2V0KHNlLENlKX1mdW5jdGlvbiBDZSgpe3JldHVybiBXKHNlLGFyZ3VtZW50cyxyZSh0aGlzKS5jb25zdHJ1Y3Rvcil9cmV0dXJuIENlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHNlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOkNlLGVu''@;'; put 'put ''dW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLEooQ2Usc2UpfSxZKEEpfWZ1bmN0aW9uIFcoQSxhZSxuZSl7cmV0dXJuKFc9cSgpP1JlZmxlY3QuY29uc3RydWN0LmJpbmQoKTpmdW5jdGlvbihDZSxVZSxKZSl7dmFyIGl0PVtudWxsXTtpdC5wdXNoLmFwcGx5KGl0''@;'; put 'put ''LFVlKTt2YXIgeWU9bmV3KEZ1bmN0aW9uLmJpbmQuYXBwbHkoQ2UsaXQpKTtyZXR1cm4gSmUmJkooeWUsSmUucHJvdG90eXBlKSx5ZX0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX1mdW5jdGlvbiBxKCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3Qu''@;'; put 'put ''Y29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9''@;'; put 'put ''fWZ1bmN0aW9uIEooQSxhZSl7cmV0dXJuKEo9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oc2UsQ2Upe3JldHVybiBzZS5fX3Byb3RvX189Q2Usc2V9KShBLGFlKX1mdW5jdGlvbiByZShBKXtyZXR1cm4ocmU9T2JqZWN0LnNldFBy''@;'; put 'put ''b3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24obmUpe3JldHVybiBuZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihuZSl9KShBKX1mdW5jdGlvbiBpZShBKXtyZXR1cm4oaWU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9''@;'; put 'put ''PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYWUpe3JldHVybiB0eXBlb2YgYWV9OmZ1bmN0aW9uKGFlKXtyZXR1cm4gYWUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmFlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZhZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlw''@;'; put 'put ''ZW9mIGFlfSkoQSl9dmFyIGdlPWIoOTUzOSkuaW5zcGVjdCxUZT1iKDIxMzYpLmNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFO2Z1bmN0aW9uIE1lKEEsYWUsbmUpe3JldHVybih2b2lkIDA9PT1uZXx8bmU+QS5sZW5ndGgpJiYobmU9QS5sZW5ndGgpLEEuc3Vic3RyaW5nKG5lLWFlLmxlbmd0''@;'; put 'put ''aCxuZSk9PT1hZX12YXIgQj0iIixnPSIiLHk9IiIseD0iIixDPXtkZWVwU3RyaWN0RXF1YWw6IkV4cGVjdGVkIHZhbHVlcyB0byBiZSBzdHJpY3RseSBkZWVwLWVxdWFsOiIsc3RyaWN0RXF1YWw6IkV4cGVjdGVkIHZhbHVlcyB0byBiZSBzdHJpY3RseSBlcXVhbDoiLHN0cmljdEVxdWFsT2Jq''@;'; put 'put ''ZWN0OidFeHBlY3RlZCAiYWN0dWFsIiB0byBiZSByZWZlcmVuY2UtZXF1YWwgdG8gImV4cGVjdGVkIjonLGRlZXBFcXVhbDoiRXhwZWN0ZWQgdmFsdWVzIHRvIGJlIGxvb3NlbHkgZGVlcC1lcXVhbDoiLGVxdWFsOiJFeHBlY3RlZCB2YWx1ZXMgdG8gYmUgbG9vc2VseSBlcXVhbDoiLG5vdERl''@;'; put 'put ''ZXBTdHJpY3RFcXVhbDonRXhwZWN0ZWQgImFjdHVhbCIgbm90IHRvIGJlIHN0cmljdGx5IGRlZXAtZXF1YWwgdG86Jyxub3RTdHJpY3RFcXVhbDonRXhwZWN0ZWQgImFjdHVhbCIgdG8gYmUgc3RyaWN0bHkgdW5lcXVhbCB0bzonLG5vdFN0cmljdEVxdWFsT2JqZWN0OidFeHBlY3RlZCAiYWN0''@;'; put 'put ''dWFsIiBub3QgdG8gYmUgcmVmZXJlbmNlLWVxdWFsIHRvICJleHBlY3RlZCI6Jyxub3REZWVwRXF1YWw6J0V4cGVjdGVkICJhY3R1YWwiIG5vdCB0byBiZSBsb29zZWx5IGRlZXAtZXF1YWwgdG86Jyxub3RFcXVhbDonRXhwZWN0ZWQgImFjdHVhbCIgdG8gYmUgbG9vc2VseSB1bmVxdWFsIHRv''@;'; put 'put ''Oicsbm90SWRlbnRpY2FsOiJWYWx1ZXMgaWRlbnRpY2FsIGJ1dCBub3QgcmVmZXJlbmNlLWVxdWFsOiJ9O2Z1bmN0aW9uIEgoQSl7dmFyIGFlPU9iamVjdC5rZXlzKEEpLG5lPU9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKEEpKTtyZXR1cm4gYWUuZm9yRWFjaChmdW5jdGlv''@;'; put 'put ''bihzZSl7bmVbc2VdPUFbc2VdfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG5lLCJtZXNzYWdlIix7dmFsdWU6QS5tZXNzYWdlfSksbmV9ZnVuY3Rpb24gaihBKXtyZXR1cm4gZ2UoQSx7Y29tcGFjdDohMSxjdXN0b21JbnNwZWN0OiExLGRlcHRoOjFlMyxtYXhBcnJheUxlbmd0aDoxLzAsc2hv''@;'; put 'put ''d0hpZGRlbjohMSxicmVha0xlbmd0aDoxLzAsc2hvd1Byb3h5OiExLHNvcnRlZDohMCxnZXR0ZXJzOiEwfSl9dmFyIG09ZnVuY3Rpb24oQSxhZSl7IWZ1bmN0aW9uIE4oQSxhZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGFlJiZudWxsIT09YWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIg''@;'; put 'put ''ZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGFlJiZhZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpBLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''QSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxhZSYmSihBLGFlKX0oc2UsQSk7dmFyIG5lPWZ1bmN0aW9uIE8oQSl7dmFyIGFlPXEoKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgQ2Usc2U9cmUoQSk7aWYoYWUpe3ZhciBVZT1yZSh0aGlzKS5jb25zdHJ1Y3RvcjtDZT1SZWZsZWN0LmNvbnN0''@;'; put 'put ''cnVjdChzZSxhcmd1bWVudHMsVWUpfWVsc2UgQ2U9c2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBLKHRoaXMsQ2UpfX0oc2UpO2Z1bmN0aW9uIHNlKENlKXt2YXIgVWU7aWYoZnVuY3Rpb24gdyhBLGFlKXtpZighKEEgaW5zdGFuY2VvZiBhZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigi''@;'; put 'put ''Q2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsc2UpLCJvYmplY3QiIT09aWUoQ2UpfHxudWxsPT09Q2UpdGhyb3cgbmV3IFRlKCJvcHRpb25zIiwiT2JqZWN0IixDZSk7dmFyIEplPUNlLm1lc3NhZ2UsaXQ9Q2Uub3BlcmF0b3IseGU9Q2Uuc3RhY2tTdGFydEZuLHll''@;'; put 'put ''PUNlLmFjdHVhbCxLZT1DZS5leHBlY3RlZCxqZT1FcnJvci5zdGFja1RyYWNlTGltaXQ7aWYoRXJyb3Iuc3RhY2tUcmFjZUxpbWl0PTAsbnVsbCE9SmUpVWU9bmUuY2FsbCh0aGlzLFN0cmluZyhKZSkpO2Vsc2UgaWYoSS5zdGRlcnImJkkuc3RkZXJyLmlzVFRZJiYoSS5zdGRlcnImJkkuc3Rk''@;'; put 'put ''ZXJyLmdldENvbG9yRGVwdGgmJjEhPT1JLnN0ZGVyci5nZXRDb2xvckRlcHRoKCk/KEI9Ilx4MWJbMzRtIixnPSJceDFiWzMybSIseD0iXHgxYlszOW0iLHk9Ilx4MWJbMzFtIik6KEI9IiIsZz0iIix4PSIiLHk9IiIpKSwib2JqZWN0Ij09PWllKHllKSYmbnVsbCE9PXllJiYib2JqZWN0Ij09''@;'; put 'put ''PWllKEtlKSYmbnVsbCE9PUtlJiYic3RhY2siaW4geWUmJnllIGluc3RhbmNlb2YgRXJyb3ImJiJzdGFjayJpbiBLZSYmS2UgaW5zdGFuY2VvZiBFcnJvciYmKHllPUgoeWUpLEtlPUgoS2UpKSwiZGVlcFN0cmljdEVxdWFsIj09PWl0fHwic3RyaWN0RXF1YWwiPT09aXQpVWU9bmUuY2FsbCh0''@;'; put 'put ''aGlzLGZ1bmN0aW9uIEUoQSxhZSxuZSl7dmFyIHNlPSIiLENlPSIiLFVlPTAsSmU9IiIsaXQ9ITEseGU9aihBKSx5ZT14ZS5zcGxpdCgiXG4iKSxLZT1qKGFlKS5zcGxpdCgiXG4iKSxqZT0wLGtlPSIiO2lmKCJzdHJpY3RFcXVhbCI9PT1uZSYmIm9iamVjdCI9PT1pZShBKSYmIm9iamVjdCI9''@;'; put 'put ''PT1pZShhZSkmJm51bGwhPT1BJiZudWxsIT09YWUmJihuZT0ic3RyaWN0RXF1YWxPYmplY3QiKSwxPT09eWUubGVuZ3RoJiYxPT09S2UubGVuZ3RoJiZ5ZVswXSE9PUtlWzBdKXt2YXIgSGU9eWVbMF0ubGVuZ3RoK0tlWzBdLmxlbmd0aDtpZihIZTw9MTApe2lmKCEoIm9iamVjdCI9PT1pZShB''@;'; put 'put ''KSYmbnVsbCE9PUF8fCJvYmplY3QiPT09aWUoYWUpJiZudWxsIT09YWV8fDA9PT1BJiYwPT09YWUpKXJldHVybiIiLmNvbmNhdChDW25lXSwiXG5cbiIpKyIiLmNvbmNhdCh5ZVswXSwiICE9PSAiKS5jb25jYXQoS2VbMF0sIlxuIil9ZWxzZSBpZigic3RyaWN0RXF1YWxPYmplY3QiIT09bmUm''@;'; put 'put ''JkhlPChJLnN0ZGVyciYmSS5zdGRlcnIuaXNUVFk/SS5zdGRlcnIuY29sdW1uczo4MCkpe2Zvcig7eWVbMF1bamVdPT09S2VbMF1bamVdOylqZSsrO2plPjImJihrZT0iXG4gICIuY29uY2F0KGZ1bmN0aW9uIFplKEEsYWUpe2lmKGFlPU1hdGguZmxvb3IoYWUpLDA9PUEubGVuZ3RofHwwPT1h''@;'; put 'put ''ZSlyZXR1cm4iIjt2YXIgbmU9QS5sZW5ndGgqYWU7Zm9yKGFlPU1hdGguZmxvb3IoTWF0aC5sb2coYWUpL01hdGgubG9nKDIpKTthZTspQSs9QSxhZS0tO3JldHVybiBBK0Euc3Vic3RyaW5nKDAsbmUtQS5sZW5ndGgpfSgiICIsamUpLCJeIiksamU9MCl9fWZvcih2YXIgUmU9eWVbeWUubGVu''@;'; put 'put ''Z3RoLTFdLFZlPUtlW0tlLmxlbmd0aC0xXTtSZT09PVZlJiYoamUrKzwyP0plPSJcbiAgIi5jb25jYXQoUmUpLmNvbmNhdChKZSk6c2U9UmUseWUucG9wKCksS2UucG9wKCksMCE9PXllLmxlbmd0aCYmMCE9PUtlLmxlbmd0aCk7KVJlPXllW3llLmxlbmd0aC0xXSxWZT1LZVtLZS5sZW5ndGgt''@;'; put 'put ''MV07dmFyIEFlPU1hdGgubWF4KHllLmxlbmd0aCxLZS5sZW5ndGgpO2lmKDA9PT1BZSl7dmFyIERlPXhlLnNwbGl0KCJcbiIpO2lmKERlLmxlbmd0aD4zMClmb3IoRGVbMjZdPSIiLmNvbmNhdChCLCIuLi4iKS5jb25jYXQoeCk7RGUubGVuZ3RoPjI3OylEZS5wb3AoKTtyZXR1cm4iIi5jb25j''@;'; put 'put ''YXQoQy5ub3RJZGVudGljYWwsIlxuXG4iKS5jb25jYXQoRGUuam9pbigiXG4iKSwiXG4iKX1qZT4zJiYoSmU9IlxuIi5jb25jYXQoQiwiLi4uIikuY29uY2F0KHgpLmNvbmNhdChKZSksaXQ9ITApLCIiIT09c2UmJihKZT0iXG4gICIuY29uY2F0KHNlKS5jb25jYXQoSmUpLHNlPSIiKTt2YXIg''@;'; put 'put ''X3Q9MCxydD1DW25lXSsiXG4iLmNvbmNhdChnLCIrIGFjdHVhbCIpLmNvbmNhdCh4LCIgIikuY29uY2F0KHksIi0gZXhwZWN0ZWQiKS5jb25jYXQoeCksUWU9IiAiLmNvbmNhdChCLCIuLi4iKS5jb25jYXQoeCwiIExpbmVzIHNraXBwZWQiKTtmb3IoamU9MDtqZTxBZTtqZSsrKXt2YXIgc249''@;'; put 'put ''amUtVWU7aWYoeWUubGVuZ3RoPGplKzEpc24+MSYmamU+MiYmKHNuPjQ/KENlKz0iXG4iLmNvbmNhdChCLCIuLi4iKS5jb25jYXQoeCksaXQ9ITApOnNuPjMmJihDZSs9IlxuICAiLmNvbmNhdChLZVtqZS0yXSksX3QrKyksQ2UrPSJcbiAgIi5jb25jYXQoS2VbamUtMV0pLF90KyspLFVlPWpl''@;'; put 'put ''LHNlKz0iXG4iLmNvbmNhdCh5LCItIikuY29uY2F0KHgsIiAiKS5jb25jYXQoS2VbamVdKSxfdCsrO2Vsc2UgaWYoS2UubGVuZ3RoPGplKzEpc24+MSYmamU+MiYmKHNuPjQ/KENlKz0iXG4iLmNvbmNhdChCLCIuLi4iKS5jb25jYXQoeCksaXQ9ITApOnNuPjMmJihDZSs9IlxuICAiLmNvbmNh''@;'; put 'put ''dCh5ZVtqZS0yXSksX3QrKyksQ2UrPSJcbiAgIi5jb25jYXQoeWVbamUtMV0pLF90KyspLFVlPWplLENlKz0iXG4iLmNvbmNhdChnLCIrIikuY29uY2F0KHgsIiAiKS5jb25jYXQoeWVbamVdKSxfdCsrO2Vsc2V7dmFyIHZ0PUtlW2plXSxTdD15ZVtqZV0sZW49U3QhPT12dCYmKCFNZShTdCwi''@;'; put 'put ''LCIpfHxTdC5zbGljZSgwLC0xKSE9PXZ0KTtlbiYmTWUodnQsIiwiKSYmdnQuc2xpY2UoMCwtMSk9PT1TdCYmKGVuPSExLFN0Kz0iLCIpLGVuPyhzbj4xJiZqZT4yJiYoc24+ND8oQ2UrPSJcbiIuY29uY2F0KEIsIi4uLiIpLmNvbmNhdCh4KSxpdD0hMCk6c24+MyYmKENlKz0iXG4gICIuY29u''@;'; put 'put ''Y2F0KHllW2plLTJdKSxfdCsrKSxDZSs9IlxuICAiLmNvbmNhdCh5ZVtqZS0xXSksX3QrKyksVWU9amUsQ2UrPSJcbiIuY29uY2F0KGcsIisiKS5jb25jYXQoeCwiICIpLmNvbmNhdChTdCksc2UrPSJcbiIuY29uY2F0KHksIi0iKS5jb25jYXQoeCwiICIpLmNvbmNhdCh2dCksX3QrPTIpOihD''@;'; put 'put ''ZSs9c2Usc2U9IiIsKDE9PT1zbnx8MD09PWplKSYmKENlKz0iXG4gICIuY29uY2F0KFN0KSxfdCsrKSl9aWYoX3Q+MjAmJmplPEFlLTIpcmV0dXJuIiIuY29uY2F0KHJ0KS5jb25jYXQoUWUsIlxuIikuY29uY2F0KENlLCJcbiIpLmNvbmNhdChCLCIuLi4iKS5jb25jYXQoeCkuY29uY2F0KHNl''@;'; put 'put ''LCJcbiIpKyIiLmNvbmNhdChCLCIuLi4iKS5jb25jYXQoeCl9cmV0dXJuIiIuY29uY2F0KHJ0KS5jb25jYXQoaXQ/UWU6IiIsIlxuIikuY29uY2F0KENlKS5jb25jYXQoc2UpLmNvbmNhdChKZSkuY29uY2F0KGtlKX0oeWUsS2UsaXQpKTtlbHNlIGlmKCJub3REZWVwU3RyaWN0RXF1YWwiPT09''@;'; put 'put ''aXR8fCJub3RTdHJpY3RFcXVhbCI9PT1pdCl7dmFyIGtlPUNbaXRdLEhlPWooeWUpLnNwbGl0KCJcbiIpO2lmKCJub3RTdHJpY3RFcXVhbCI9PT1pdCYmIm9iamVjdCI9PT1pZSh5ZSkmJm51bGwhPT15ZSYmKGtlPUMubm90U3RyaWN0RXF1YWxPYmplY3QpLEhlLmxlbmd0aD4zMClmb3IoSGVb''@;'; put 'put ''MjZdPSIiLmNvbmNhdChCLCIuLi4iKS5jb25jYXQoeCk7SGUubGVuZ3RoPjI3OylIZS5wb3AoKTtVZT1uZS5jYWxsKHRoaXMsMT09PUhlLmxlbmd0aD8iIi5jb25jYXQoa2UsIiAiKS5jb25jYXQoSGVbMF0pOiIiLmNvbmNhdChrZSwiXG5cbiIpLmNvbmNhdChIZS5qb2luKCJcbiIpLCJcbiIp''@;'; put 'put ''KX1lbHNle3ZhciBMZT1qKHllKSxSZT0iIixWZT1DW2l0XTsibm90RGVlcEVxdWFsIj09PWl0fHwibm90RXF1YWwiPT09aXQ/KExlPSIiLmNvbmNhdChDW2l0XSwiXG5cbiIpLmNvbmNhdChMZSkpLmxlbmd0aD4xMDI0JiYoTGU9IiIuY29uY2F0KExlLnNsaWNlKDAsMTAyMSksIi4uLiIpKToo''@;'; put 'put ''UmU9IiIuY29uY2F0KGooS2UpKSxMZS5sZW5ndGg+NTEyJiYoTGU9IiIuY29uY2F0KExlLnNsaWNlKDAsNTA5KSwiLi4uIikpLFJlLmxlbmd0aD41MTImJihSZT0iIi5jb25jYXQoUmUuc2xpY2UoMCw1MDkpLCIuLi4iKSksImRlZXBFcXVhbCI9PT1pdHx8ImVxdWFsIj09PWl0P0xlPSIiLmNv''@;'; put 'put ''bmNhdChWZSwiXG5cbiIpLmNvbmNhdChMZSwiXG5cbnNob3VsZCBlcXVhbFxuXG4iKTpSZT0iICIuY29uY2F0KGl0LCIgIikuY29uY2F0KFJlKSksVWU9bmUuY2FsbCh0aGlzLCIiLmNvbmNhdChMZSkuY29uY2F0KFJlKSl9cmV0dXJuIEVycm9yLnN0YWNrVHJhY2VMaW1pdD1qZSxVZS5nZW5l''@;'; put 'put ''cmF0ZWRNZXNzYWdlPSFKZSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWihVZSksIm5hbWUiLHt2YWx1ZToiQXNzZXJ0aW9uRXJyb3IgW0VSUl9BU1NFUlRJT05dIixlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLFVlLmNvZGU9IkVSUl9BU1NFUlRJT04iLFVlLmFj''@;'; put 'put ''dHVhbD15ZSxVZS5leHBlY3RlZD1LZSxVZS5vcGVyYXRvcj1pdCxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoWihVZSkseGUpLFVlLm5hbWU9IkFzc2VydGlvbkVycm9yIixLKFVlKX1yZXR1cm4gZnVuY3Rpb24gRihBLGFlLG5lKXthZSYmUChBLnBy''@;'; put 'put ''b3RvdHlwZSxhZSksbmUmJlAoQSxuZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KHNlLFt7a2V5OiJ0b1N0cmluZyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4iIi5jb25jYXQodGhpcy5uYW1lLCIgWyIpLmNvbmNhdCh0aGlzLmNvZGUsIl06''@;'; put 'put ''ICIpLmNvbmNhdCh0aGlzLm1lc3NhZ2UpfX0se2tleTphZSx2YWx1ZTpmdW5jdGlvbihVZSxKZSl7cmV0dXJuIGdlKHRoaXMscChwKHt9LEplKSx7fSx7Y3VzdG9tSW5zcGVjdDohMSxkZXB0aDowfSkpfX1dKSxzZX0oWShFcnJvciksZ2UuY3VzdG9tKTtjZS5leHBvcnRzPW19LDIxMzY6KGNl''@;'; put 'put ''LFgsYik9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSShnZSl7cmV0dXJuKEk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oX2Upe3JldHVybiB0eXBlb2YgX2V9OmZ1bmN0aW9uKF9lKXtyZXR1cm4gX2UmJiJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBTeW1ib2wmJl9lLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZfZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIF9lfSkoZ2UpfWZ1bmN0aW9uIF8oZ2UsX2Upe2Zvcih2YXIgVGU9MDtUZTxfZS5sZW5ndGg7VGUrKyl7dmFyIE1lPV9lW1RlXTtNZS5lbnVt''@;'; put 'put ''ZXJhYmxlPU1lLmVudW1lcmFibGV8fCExLE1lLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gTWUmJihNZS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGdlLFYoTWUua2V5KSxNZSl9fWZ1bmN0aW9uIFYoZ2Upe3ZhciBfZT1mdW5jdGlvbiB3KGdlLF9lKXtpZigib2JqZWN0''@;'; put 'put ''IiE9PUkoZ2UpfHxudWxsPT09Z2UpcmV0dXJuIGdlO3ZhciBUZT1nZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PVRlKXt2YXIgTWU9VGUuY2FsbChnZSxfZXx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PUkoTWUpKXJldHVybiBNZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRv''@;'; put 'put ''UHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PV9lP1N0cmluZzpOdW1iZXIpKGdlKX0oZ2UsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09SShfZSk/X2U6U3RyaW5nKF9lKX1mdW5jdGlvbiBSKGdlLF9lKXtyZXR1cm4oUj1PYmpl''@;'; put 'put ''Y3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihNZSxaZSl7cmV0dXJuIE1lLl9fcHJvdG9fXz1aZSxNZX0pKGdlLF9lKX1mdW5jdGlvbiBaKGdlKXtyZXR1cm4oWj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9m''@;'; put 'put ''LmJpbmQoKTpmdW5jdGlvbihUZSl7cmV0dXJuIFRlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKFRlKX0pKGdlKX12YXIgVyxxLFk9e307ZnVuY3Rpb24gZWUoZ2UsX2UsVGUpe1RlfHwoVGU9RXJyb3IpO3ZhciBaZT1mdW5jdGlvbihCKXshZnVuY3Rpb24gRihnZSxfZSl7aWYo''@;'; put 'put ''ImZ1bmN0aW9uIiE9dHlwZW9mIF9lJiZudWxsIT09X2UpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtnZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShfZSYmX2UucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7''@;'; put 'put ''dmFsdWU6Z2Usd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxfZSYmUihnZSxfZSl9KHksQik7dmFyIGc9ZnVuY3Rpb24geihnZSl7dmFyIF9lPWZ1bmN0aW9uIEsoKXtpZih0eXBlb2YgUmVm''@;'; put 'put ''bGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVh''@;'; put 'put ''bixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIFplLE1lPVooZ2UpO2lmKF9lKXt2YXIgQj1aKHRoaXMpLmNvbnN0cnVjdG9yO1plPVJlZmxlY3QuY29uc3RydWN0KE1lLGFyZ3VtZW50cyxCKX1lbHNlIFplPU1lLmFwcGx5KHRo''@;'; put 'put ''aXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24gTihnZSxfZSl7aWYoX2UmJigib2JqZWN0Ij09PUkoX2UpfHwiZnVuY3Rpb24iPT10eXBlb2YgX2UpKXJldHVybiBfZTtpZih2b2lkIDAhPT1fZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSBy''@;'; put 'put ''ZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbiBPKGdlKXtpZih2b2lkIDA9PT1nZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBnZX0oZ2Up''@;'; put 'put ''fSh0aGlzLFplKX19KHkpO2Z1bmN0aW9uIHkoeCxDLFQpe3ZhciBIO3JldHVybiBmdW5jdGlvbiBQKGdlLF9lKXtpZighKGdlIGluc3RhbmNlb2YgX2UpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHkpLEg9Zy5jYWxsKHRo''@;'; put 'put ''aXMsZnVuY3Rpb24gTWUoQixnLHkpe3JldHVybiJzdHJpbmciPT10eXBlb2YgX2U/X2U6X2UoQixnLHkpfSh4LEMsVCkpLEguY29kZT1nZSxIfXJldHVybiBmdW5jdGlvbiBwKGdlLF9lLFRlKXtyZXR1cm4gX2UmJl8oZ2UucHJvdG90eXBlLF9lKSxUZSYmXyhnZSxUZSksT2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KGdlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGdlfSh5KX0oVGUpO1lbZ2VdPVplfWZ1bmN0aW9uIEooZ2UsX2Upe2lmKEFycmF5LmlzQXJyYXkoZ2UpKXt2YXIgVGU9Z2UubGVuZ3RoO3JldHVybiBnZT1nZS5tYXAoZnVuY3Rpb24oTWUpe3JldHVybiBTdHJpbmcoTWUp''@;'; put 'put ''fSksVGU+Mj8ib25lIG9mICIuY29uY2F0KF9lLCIgIikuY29uY2F0KGdlLnNsaWNlKDAsVGUtMSkuam9pbigiLCAiKSwiLCBvciAiKStnZVtUZS0xXToyPT09VGU/Im9uZSBvZiAiLmNvbmNhdChfZSwiICIpLmNvbmNhdChnZVswXSwiIG9yICIpLmNvbmNhdChnZVsxXSk6Im9mICIuY29uY2F0''@;'; put 'put ''KF9lLCIgIikuY29uY2F0KGdlWzBdKX1yZXR1cm4ib2YgIi5jb25jYXQoX2UsIiAiKS5jb25jYXQoU3RyaW5nKGdlKSl9ZWUoIkVSUl9BTUJJR1VPVVNfQVJHVU1FTlQiLCdUaGUgIiVzIiBhcmd1bWVudCBpcyBhbWJpZ3VvdXMuICVzJyxUeXBlRXJyb3IpLGVlKCJFUlJfSU5WQUxJRF9BUkdf''@;'; put 'put ''VFlQRSIsZnVuY3Rpb24oZ2UsX2UsVGUpe3ZhciBNZSxaZTtpZih2b2lkIDA9PT1XJiYoVz1iKDkyODIpKSxXKCJzdHJpbmciPT10eXBlb2YgZ2UsIiduYW1lJyBtdXN0IGJlIGEgc3RyaW5nIiksInN0cmluZyI9PXR5cGVvZiBfZSYmZnVuY3Rpb24gcmUoZ2UsX2UsVGUpe3JldHVybiBnZS5z''@;'; put 'put ''dWJzdHIoIVRlfHxUZTwwPzA6K1RlLF9lLmxlbmd0aCk9PT1fZX0oX2UsIm5vdCAiKT8oTWU9Im11c3Qgbm90IGJlIixfZT1fZS5yZXBsYWNlKC9ebm90IC8sIiIpKTpNZT0ibXVzdCBiZSIsZnVuY3Rpb24gaWUoZ2UsX2UsVGUpe3JldHVybih2b2lkIDA9PT1UZXx8VGU+Z2UubGVuZ3RoKSYm''@;'; put 'put ''KFRlPWdlLmxlbmd0aCksZ2Uuc3Vic3RyaW5nKFRlLV9lLmxlbmd0aCxUZSk9PT1fZX0oZ2UsIiBhcmd1bWVudCIpKVplPSJUaGUgIi5jb25jYXQoZ2UsIiAiKS5jb25jYXQoTWUsIiAiKS5jb25jYXQoSihfZSwidHlwZSIpKTtlbHNle3ZhciBCPWZ1bmN0aW9uIHVlKGdlLF9lLFRlKXtyZXR1''@;'; put 'put ''cm4ibnVtYmVyIiE9dHlwZW9mIFRlJiYoVGU9MCksIShUZStfZS5sZW5ndGg+Z2UubGVuZ3RoKSYmLTEhPT1nZS5pbmRleE9mKF9lLFRlKX0oZ2UsIi4iKT8icHJvcGVydHkiOiJhcmd1bWVudCI7WmU9J1RoZSAiJy5jb25jYXQoZ2UsJyIgJykuY29uY2F0KEIsIiAiKS5jb25jYXQoTWUsIiAi''@;'; put 'put ''KS5jb25jYXQoSihfZSwidHlwZSIpKX1yZXR1cm4gWmUrIi4gUmVjZWl2ZWQgdHlwZSAiLmNvbmNhdChJKFRlKSl9LFR5cGVFcnJvciksZWUoIkVSUl9JTlZBTElEX0FSR19WQUxVRSIsZnVuY3Rpb24oZ2UsX2Upe3ZhciBUZT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50''@;'; put 'put ''c1syXT9hcmd1bWVudHNbMl06ImlzIGludmFsaWQiO3ZvaWQgMD09PXEmJihxPWIoOTUzOSkpO3ZhciBNZT1xLmluc3BlY3QoX2UpO3JldHVybiBNZS5sZW5ndGg+MTI4JiYoTWU9IiIuY29uY2F0KE1lLnNsaWNlKDAsMTI4KSwiLi4uIikpLCJUaGUgYXJndW1lbnQgJyIuY29uY2F0KGdlLCIn''@;'; put 'put ''ICIpLmNvbmNhdChUZSwiLiBSZWNlaXZlZCAiKS5jb25jYXQoTWUpfSxUeXBlRXJyb3IsUmFuZ2VFcnJvciksZWUoIkVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSIsZnVuY3Rpb24oZ2UsX2UsVGUpe3ZhciBNZTtyZXR1cm4gTWU9VGUmJlRlLmNvbnN0cnVjdG9yJiZUZS5jb25zdHJ1Y3Rvci5u''@;'; put 'put ''YW1lPyJpbnN0YW5jZSBvZiAiLmNvbmNhdChUZS5jb25zdHJ1Y3Rvci5uYW1lKToidHlwZSAiLmNvbmNhdChJKFRlKSksIkV4cGVjdGVkICIuY29uY2F0KGdlLCcgdG8gYmUgcmV0dXJuZWQgZnJvbSB0aGUgIicpLmNvbmNhdChfZSwnIicpKyIgZnVuY3Rpb24gYnV0IGdvdCAiLmNvbmNhdChN''@;'; put 'put ''ZSwiLiIpfSxUeXBlRXJyb3IpLGVlKCJFUlJfTUlTU0lOR19BUkdTIixmdW5jdGlvbigpe2Zvcih2YXIgZ2U9YXJndW1lbnRzLmxlbmd0aCxfZT1uZXcgQXJyYXkoZ2UpLFRlPTA7VGU8Z2U7VGUrKylfZVtUZV09YXJndW1lbnRzW1RlXTt2b2lkIDA9PT1XJiYoVz1iKDkyODIpKSxXKF9lLmxl''@;'; put 'put ''bmd0aD4wLCJBdCBsZWFzdCBvbmUgYXJnIG5lZWRzIHRvIGJlIHNwZWNpZmllZCIpO3ZhciBNZT0iVGhlICIsWmU9X2UubGVuZ3RoO3N3aXRjaChfZT1fZS5tYXAoZnVuY3Rpb24oQil7cmV0dXJuJyInLmNvbmNhdChCLCciJyl9KSxaZSl7Y2FzZSAxOk1lKz0iIi5jb25jYXQoX2VbMF0sIiBh''@;'; put 'put ''cmd1bWVudCIpO2JyZWFrO2Nhc2UgMjpNZSs9IiIuY29uY2F0KF9lWzBdLCIgYW5kICIpLmNvbmNhdChfZVsxXSwiIGFyZ3VtZW50cyIpO2JyZWFrO2RlZmF1bHQ6TWUrPV9lLnNsaWNlKDAsWmUtMSkuam9pbigiLCAiKSxNZSs9IiwgYW5kICIuY29uY2F0KF9lW1plLTFdLCIgYXJndW1lbnRz''@;'; put 'put ''Iil9cmV0dXJuIiIuY29uY2F0KE1lLCIgbXVzdCBiZSBzcGVjaWZpZWQiKX0sVHlwZUVycm9yKSxjZS5leHBvcnRzLmNvZGVzPVl9LDkxNTg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSShlbix1dCl7cmV0dXJuIGZ1bmN0aW9uIFAoZW4pe2lmKEFycmF5LmlzQXJyYXkoZW4p''@;'; put 'put ''KXJldHVybiBlbn0oZW4pfHxmdW5jdGlvbiB3KGVuLHV0KXt2YXIgWGU9bnVsbD09ZW4/bnVsbDp0eXBlb2YgU3ltYm9sPCJ1IiYmZW5bU3ltYm9sLml0ZXJhdG9yXXx8ZW5bIkBAaXRlcmF0b3IiXTtpZihudWxsIT1YZSl7dmFyIHR0LEllLGF0LHVuLEl0PVtdLFJ0PSEwLHJpPSExO3RyeXtp''@;'; put 'put ''ZihhdD0oWGU9WGUuY2FsbChlbikpLm5leHQsMD09PXV0KXtpZihPYmplY3QoWGUpIT09WGUpcmV0dXJuO1J0PSExfWVsc2UgZm9yKDshKFJ0PSh0dD1hdC5jYWxsKFhlKSkuZG9uZSkmJihJdC5wdXNoKHR0LnZhbHVlKSxJdC5sZW5ndGghPT11dCk7UnQ9ITApO31jYXRjaChhbil7cmk9ITAs''@;'; put 'put ''SWU9YW59ZmluYWxseXt0cnl7aWYoIVJ0JiZudWxsIT1YZS5yZXR1cm4mJih1bj1YZS5yZXR1cm4oKSxPYmplY3QodW4pIT09dW4pKXJldHVybn1maW5hbGx5e2lmKHJpKXRocm93IEllfX1yZXR1cm4gSXR9fShlbix1dCl8fGZ1bmN0aW9uIHAoZW4sdXQpe2lmKGVuKXtpZigic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIGVuKXJldHVybiBWKGVuLHV0KTt2YXIgWGU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGVuKS5zbGljZSg4LC0xKTtpZigiT2JqZWN0Ij09PVhlJiZlbi5jb25zdHJ1Y3RvciYmKFhlPWVuLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09WGV8fCJTZXQiPT09WGUpcmV0''@;'; put 'put ''dXJuIEFycmF5LmZyb20oZW4pO2lmKCJBcmd1bWVudHMiPT09WGV8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KFhlKSlyZXR1cm4gVihlbix1dCl9fShlbix1dCl8fGZ1bmN0aW9uIF8oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVt''@;'; put 'put ''cHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIFYoZW4sdXQpeyhudWxsPT11dHx8dXQ+ZW4u''@;'; put 'put ''bGVuZ3RoKSYmKHV0PWVuLmxlbmd0aCk7Zm9yKHZhciBYZT0wLHR0PW5ldyBBcnJheSh1dCk7WGU8dXQ7WGUrKyl0dFtYZV09ZW5bWGVdO3JldHVybiB0dH1mdW5jdGlvbiBGKGVuKXtyZXR1cm4oRj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5p''@;'; put 'put ''dGVyYXRvcj9mdW5jdGlvbih1dCl7cmV0dXJuIHR5cGVvZiB1dH06ZnVuY3Rpb24odXQpe3JldHVybiB1dCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdXQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnV0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdXR9KShlbil9dmFy''@;'; put 'put ''IFI9dm9pZCAwIT09L2EvZy5mbGFncyx6PWZ1bmN0aW9uKHV0KXt2YXIgWGU9W107cmV0dXJuIHV0LmZvckVhY2goZnVuY3Rpb24odHQpe3JldHVybiBYZS5wdXNoKHR0KX0pLFhlfSxOPWZ1bmN0aW9uKHV0KXt2YXIgWGU9W107cmV0dXJuIHV0LmZvckVhY2goZnVuY3Rpb24odHQsSWUpe3Jl''@;'; put 'put ''dHVybiBYZS5wdXNoKFtJZSx0dF0pfSksWGV9LE89T2JqZWN0LmlzP09iamVjdC5pczpiKDYwOSksSz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP09iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sWj1OdW1iZXIuaXNOYU4/TnVtYmVyLmlzTmFO''@;'; put 'put ''OmIoMzYwKTtmdW5jdGlvbiBZKGVuKXtyZXR1cm4gZW4uY2FsbC5iaW5kKGVuKX12YXIgVz1ZKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpLHE9WShPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlKSxlZT1ZKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcpLEo9''@;'; put 'put ''Yig5NTM5KS50eXBlcyxyZT1KLmlzQW55QXJyYXlCdWZmZXIsaWU9Si5pc0FycmF5QnVmZmVyVmlldyx1ZT1KLmlzRGF0ZSxnZT1KLmlzTWFwLF9lPUouaXNSZWdFeHAsVGU9Si5pc1NldCxNZT1KLmlzTmF0aXZlRXJyb3IsWmU9Si5pc0JveGVkUHJpbWl0aXZlLEI9Si5pc051bWJlck9iamVj''@;'; put 'put ''dCxnPUouaXNTdHJpbmdPYmplY3QseT1KLmlzQm9vbGVhbk9iamVjdCx4PUouaXNCaWdJbnRPYmplY3QsQz1KLmlzU3ltYm9sT2JqZWN0LFQ9Si5pc0Zsb2F0MzJBcnJheSxIPUouaXNGbG9hdDY0QXJyYXk7ZnVuY3Rpb24gaihlbil7aWYoMD09PWVuLmxlbmd0aHx8ZW4ubGVuZ3RoPjEwKXJl''@;'; put 'put ''dHVybiEwO2Zvcih2YXIgdXQ9MDt1dDxlbi5sZW5ndGg7dXQrKyl7dmFyIFhlPWVuLmNoYXJDb2RlQXQodXQpO2lmKFhlPDQ4fHxYZT41NylyZXR1cm4hMH1yZXR1cm4gMTA9PT1lbi5sZW5ndGgmJmVuPj1NYXRoLnBvdygyLDMyKX1mdW5jdGlvbiBFKGVuKXtyZXR1cm4gT2JqZWN0LmtleXMo''@;'; put 'put ''ZW4pLmZpbHRlcihqKS5jb25jYXQoSyhlbikuZmlsdGVyKE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuYmluZChlbikpKX1mdW5jdGlvbiBtKGVuLHV0KXtpZihlbj09PXV0KXJldHVybiAwO2Zvcih2YXIgWGU9ZW4ubGVuZ3RoLHR0PXV0Lmxlbmd0aCxJZT0wLGF0PU1h''@;'; put 'put ''dGgubWluKFhlLHR0KTtJZTxhdDsrK0llKWlmKGVuW0llXSE9PXV0W0llXSl7WGU9ZW5bSWVdLHR0PXV0W0llXTticmVha31yZXR1cm4gWGU8dHQ/LTE6dHQ8WGU/MTowfWZ1bmN0aW9uIGtlKGVuLHV0LFhlLHR0KXtpZihlbj09PXV0KXJldHVybiAwIT09ZW58fCFYZXx8Tyhlbix1dCk7aWYo''@;'; put 'put ''WGUpe2lmKCJvYmplY3QiIT09RihlbikpcmV0dXJuIm51bWJlciI9PXR5cGVvZiBlbiYmWihlbikmJloodXQpO2lmKCJvYmplY3QiIT09Rih1dCl8fG51bGw9PT1lbnx8bnVsbD09PXV0fHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZW4pIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHV0KSlyZXR1''@;'; put 'put ''cm4hMX1lbHNle2lmKG51bGw9PT1lbnx8Im9iamVjdCIhPT1GKGVuKSlyZXR1cm4obnVsbD09PXV0fHwib2JqZWN0IiE9PUYodXQpKSYmZW49PXV0O2lmKG51bGw9PT11dHx8Im9iamVjdCIhPT1GKHV0KSlyZXR1cm4hMX12YXIgSWU9ZWUoZW4pO2lmKEllIT09ZWUodXQpKXJldHVybiExO2lm''@;'; put 'put ''KEFycmF5LmlzQXJyYXkoZW4pKXtpZihlbi5sZW5ndGghPT11dC5sZW5ndGgpcmV0dXJuITE7dmFyIHVuPUUoZW4pLEl0PUUodXQpO3JldHVybiB1bi5sZW5ndGg9PT1JdC5sZW5ndGgmJkxlKGVuLHV0LFhlLHR0LDEsdW4pfWlmKCJbb2JqZWN0IE9iamVjdF0iPT09SWUmJighZ2UoZW4pJiZn''@;'; put 'put ''ZSh1dCl8fCFUZShlbikmJlRlKHV0KSkpcmV0dXJuITE7aWYodWUoZW4pKXtpZighdWUodXQpfHxEYXRlLnByb3RvdHlwZS5nZXRUaW1lLmNhbGwoZW4pIT09RGF0ZS5wcm90b3R5cGUuZ2V0VGltZS5jYWxsKHV0KSlyZXR1cm4hMX1lbHNlIGlmKF9lKGVuKSl7aWYoIV9lKHV0KXx8IWZ1bmN0''@;'; put 'put ''aW9uIGl0KGVuLHV0KXtyZXR1cm4gUj9lbi5zb3VyY2U9PT11dC5zb3VyY2UmJmVuLmZsYWdzPT09dXQuZmxhZ3M6UmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGVuKT09PVJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh1dCl9KGVuLHV0KSlyZXR1cm4hMX1lbHNlIGlmKE1l''@;'; put 'put ''KGVuKXx8ZW4gaW5zdGFuY2VvZiBFcnJvcil7aWYoZW4ubWVzc2FnZSE9PXV0Lm1lc3NhZ2V8fGVuLm5hbWUhPT11dC5uYW1lKXJldHVybiExfWVsc2V7aWYoaWUoZW4pKXtpZihYZXx8IVQoZW4pJiYhSChlbikpe2lmKCFmdW5jdGlvbiB5ZShlbix1dCl7cmV0dXJuIGVuLmJ5dGVMZW5ndGg9''@;'; put 'put ''PT11dC5ieXRlTGVuZ3RoJiYwPT09bShuZXcgVWludDhBcnJheShlbi5idWZmZXIsZW4uYnl0ZU9mZnNldCxlbi5ieXRlTGVuZ3RoKSxuZXcgVWludDhBcnJheSh1dC5idWZmZXIsdXQuYnl0ZU9mZnNldCx1dC5ieXRlTGVuZ3RoKSl9KGVuLHV0KSlyZXR1cm4hMX1lbHNlIGlmKCFmdW5jdGlv''@;'; put 'put ''biB4ZShlbix1dCl7aWYoZW4uYnl0ZUxlbmd0aCE9PXV0LmJ5dGVMZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBYZT0wO1hlPGVuLmJ5dGVMZW5ndGg7WGUrKylpZihlbltYZV0hPT11dFtYZV0pcmV0dXJuITE7cmV0dXJuITB9KGVuLHV0KSlyZXR1cm4hMTt2YXIgUnQ9RShlbikscmk9RSh1dCk7''@;'; put 'put ''cmV0dXJuIFJ0Lmxlbmd0aD09PXJpLmxlbmd0aCYmTGUoZW4sdXQsWGUsdHQsMCxSdCl9aWYoVGUoZW4pKXJldHVybiEoIVRlKHV0KXx8ZW4uc2l6ZSE9PXV0LnNpemUpJiZMZShlbix1dCxYZSx0dCwyKTtpZihnZShlbikpcmV0dXJuISghZ2UodXQpfHxlbi5zaXplIT09dXQuc2l6ZSkmJkxl''@;'; put 'put ''KGVuLHV0LFhlLHR0LDMpO2lmKHJlKGVuKSl7aWYoIWZ1bmN0aW9uIEtlKGVuLHV0KXtyZXR1cm4gZW4uYnl0ZUxlbmd0aD09PXV0LmJ5dGVMZW5ndGgmJjA9PT1tKG5ldyBVaW50OEFycmF5KGVuKSxuZXcgVWludDhBcnJheSh1dCkpfShlbix1dCkpcmV0dXJuITF9ZWxzZSBpZihaZShlbikm''@;'; put 'put ''JiFmdW5jdGlvbiBqZShlbix1dCl7cmV0dXJuIEIoZW4pP0IodXQpJiZPKE51bWJlci5wcm90b3R5cGUudmFsdWVPZi5jYWxsKGVuKSxOdW1iZXIucHJvdG90eXBlLnZhbHVlT2YuY2FsbCh1dCkpOmcoZW4pP2codXQpJiZTdHJpbmcucHJvdG90eXBlLnZhbHVlT2YuY2FsbChlbik9PT1TdHJp''@;'; put 'put ''bmcucHJvdG90eXBlLnZhbHVlT2YuY2FsbCh1dCk6eShlbik/eSh1dCkmJkJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChlbik9PT1Cb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwodXQpOngoZW4pP3godXQpJiZCaWdJbnQucHJvdG90eXBlLnZhbHVlT2YuY2FsbChlbik9PT1C''@;'; put 'put ''aWdJbnQucHJvdG90eXBlLnZhbHVlT2YuY2FsbCh1dCk6Qyh1dCkmJlN5bWJvbC5wcm90b3R5cGUudmFsdWVPZi5jYWxsKGVuKT09PVN5bWJvbC5wcm90b3R5cGUudmFsdWVPZi5jYWxsKHV0KX0oZW4sdXQpKXJldHVybiExfXJldHVybiBMZShlbix1dCxYZSx0dCwwKX1mdW5jdGlvbiBIZShl''@;'; put 'put ''bix1dCl7cmV0dXJuIHV0LmZpbHRlcihmdW5jdGlvbihYZSl7cmV0dXJuIHEoZW4sWGUpfSl9ZnVuY3Rpb24gTGUoZW4sdXQsWGUsdHQsSWUsYXQpe2lmKDU9PT1hcmd1bWVudHMubGVuZ3RoKXthdD1PYmplY3Qua2V5cyhlbik7dmFyIHVuPU9iamVjdC5rZXlzKHV0KTtpZihhdC5sZW5ndGgh''@;'; put 'put ''PT11bi5sZW5ndGgpcmV0dXJuITF9Zm9yKHZhciBJdD0wO0l0PGF0Lmxlbmd0aDtJdCsrKWlmKCFXKHV0LGF0W0l0XSkpcmV0dXJuITE7aWYoWGUmJjU9PT1hcmd1bWVudHMubGVuZ3RoKXt2YXIgUnQ9Syhlbik7aWYoMCE9PVJ0Lmxlbmd0aCl7dmFyIHJpPTA7Zm9yKEl0PTA7SXQ8UnQubGVu''@;'; put 'put ''Z3RoO0l0Kyspe3ZhciBhbj1SdFtJdF07aWYocShlbixhbikpe2lmKCFxKHV0LGFuKSlyZXR1cm4hMTthdC5wdXNoKGFuKSxyaSsrfWVsc2UgaWYocSh1dCxhbikpcmV0dXJuITF9dmFyIGxuPUsodXQpO2lmKFJ0Lmxlbmd0aCE9PWxuLmxlbmd0aCYmSGUodXQsbG4pLmxlbmd0aCE9PXJpKXJl''@;'; put 'put ''dHVybiExfWVsc2V7dmFyIG5pPUsodXQpO2lmKDAhPT1uaS5sZW5ndGgmJjAhPT1IZSh1dCxuaSkubGVuZ3RoKXJldHVybiExfX1pZigwPT09YXQubGVuZ3RoJiYoMD09PUllfHwxPT09SWUmJjA9PT1lbi5sZW5ndGh8fDA9PT1lbi5zaXplKSlyZXR1cm4hMDtpZih2b2lkIDA9PT10dCl0dD17''@;'; put 'put ''dmFsMTpuZXcgTWFwLHZhbDI6bmV3IE1hcCxwb3NpdGlvbjowfTtlbHNle3ZhciBobj10dC52YWwxLmdldChlbik7aWYodm9pZCAwIT09aG4pe3ZhciBodD10dC52YWwyLmdldCh1dCk7aWYodm9pZCAwIT09aHQpcmV0dXJuIGhuPT09aHR9dHQucG9zaXRpb24rK310dC52YWwxLnNldChlbix0''@;'; put 'put ''dC5wb3NpdGlvbiksdHQudmFsMi5zZXQodXQsdHQucG9zaXRpb24pO3ZhciBScj1mdW5jdGlvbiBzbihlbix1dCxYZSx0dCxJZSxhdCl7dmFyIHVuPTA7aWYoMj09PWF0KXtpZighZnVuY3Rpb24gX3QoZW4sdXQsWGUsdHQpe2Zvcih2YXIgSWU9bnVsbCxhdD16KGVuKSx1bj0wO3VuPGF0Lmxl''@;'; put 'put ''bmd0aDt1bisrKXt2YXIgSXQ9YXRbdW5dO2lmKCJvYmplY3QiPT09RihJdCkmJm51bGwhPT1JdCludWxsPT09SWUmJihJZT1uZXcgU2V0KSxJZS5hZGQoSXQpO2Vsc2UgaWYoIXV0LmhhcyhJdCkpe2lmKFhlfHwhQWUoZW4sdXQsSXQpKXJldHVybiExO251bGw9PT1JZSYmKEllPW5ldyBTZXQp''@;'; put 'put ''LEllLmFkZChJdCl9fWlmKG51bGwhPT1JZSl7Zm9yKHZhciBSdD16KHV0KSxyaT0wO3JpPFJ0Lmxlbmd0aDtyaSsrKXt2YXIgYW49UnRbcmldO2lmKCJvYmplY3QiPT09RihhbikmJm51bGwhPT1hbil7aWYoIVJlKEllLGFuLFhlLHR0KSlyZXR1cm4hMX1lbHNlIGlmKCFYZSYmIWVuLmhhcyhh''@;'; put 'put ''bikmJiFSZShJZSxhbixYZSx0dCkpcmV0dXJuITF9cmV0dXJuIDA9PT1JZS5zaXplfXJldHVybiEwfShlbix1dCxYZSxJZSkpcmV0dXJuITF9ZWxzZSBpZigzPT09YXQpe2lmKCFmdW5jdGlvbiBRZShlbix1dCxYZSx0dCl7Zm9yKHZhciBJZT1udWxsLGF0PU4oZW4pLHVuPTA7dW48YXQubGVu''@;'; put 'put ''Z3RoO3VuKyspe3ZhciBJdD1JKGF0W3VuXSwyKSxSdD1JdFswXSxyaT1JdFsxXTtpZigib2JqZWN0Ij09PUYoUnQpJiZudWxsIT09UnQpbnVsbD09PUllJiYoSWU9bmV3IFNldCksSWUuYWRkKFJ0KTtlbHNle3ZhciBhbj11dC5nZXQoUnQpO2lmKHZvaWQgMD09PWFuJiYhdXQuaGFzKFJ0KXx8''@;'; put 'put ''IWtlKHJpLGFuLFhlLHR0KSl7aWYoWGV8fCFEZShlbix1dCxSdCxyaSx0dCkpcmV0dXJuITE7bnVsbD09PUllJiYoSWU9bmV3IFNldCksSWUuYWRkKFJ0KX19fWlmKG51bGwhPT1JZSl7Zm9yKHZhciBsbj1OKHV0KSxuaT0wO25pPGxuLmxlbmd0aDtuaSsrKXt2YXIgaG49SShsbltuaV0sMiks''@;'; put 'put ''aHQ9aG5bMF0sUnI9aG5bMV07aWYoIm9iamVjdCI9PT1GKGh0KSYmbnVsbCE9PWh0KXtpZighcnQoSWUsZW4saHQsUnIsWGUsdHQpKXJldHVybiExfWVsc2UgaWYoIShYZXx8ZW4uaGFzKGh0KSYma2UoZW4uZ2V0KGh0KSxSciwhMSx0dCl8fHJ0KEllLGVuLGh0LFJyLCExLHR0KSkpcmV0dXJu''@;'; put 'put ''ITF9cmV0dXJuIDA9PT1JZS5zaXplfXJldHVybiEwfShlbix1dCxYZSxJZSkpcmV0dXJuITF9ZWxzZSBpZigxPT09YXQpZm9yKDt1bjxlbi5sZW5ndGg7dW4rKyl7aWYoIVcoZW4sdW4pKXtpZihXKHV0LHVuKSlyZXR1cm4hMTtmb3IodmFyIEl0PU9iamVjdC5rZXlzKGVuKTt1bjxJdC5sZW5n''@;'; put 'put ''dGg7dW4rKyl7dmFyIFJ0PUl0W3VuXTtpZighVyh1dCxSdCl8fCFrZShlbltSdF0sdXRbUnRdLFhlLEllKSlyZXR1cm4hMX1yZXR1cm4gSXQubGVuZ3RoPT09T2JqZWN0LmtleXModXQpLmxlbmd0aH1pZighVyh1dCx1bil8fCFrZShlblt1bl0sdXRbdW5dLFhlLEllKSlyZXR1cm4hMX1mb3Io''@;'; put 'put ''dW49MDt1bjx0dC5sZW5ndGg7dW4rKyl7dmFyIHJpPXR0W3VuXTtpZigha2UoZW5bcmldLHV0W3JpXSxYZSxJZSkpcmV0dXJuITF9cmV0dXJuITB9KGVuLHV0LFhlLGF0LHR0LEllKTtyZXR1cm4gdHQudmFsMS5kZWxldGUoZW4pLHR0LnZhbDIuZGVsZXRlKHV0KSxScn1mdW5jdGlvbiBSZShl''@;'; put 'put ''bix1dCxYZSx0dCl7Zm9yKHZhciBJZT16KGVuKSxhdD0wO2F0PEllLmxlbmd0aDthdCsrKXt2YXIgdW49SWVbYXRdO2lmKGtlKHV0LHVuLFhlLHR0KSlyZXR1cm4gZW4uZGVsZXRlKHVuKSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBWZShlbil7c3dpdGNoKEYoZW4pKXtjYXNlInVuZGVmaW5lZCI6''@;'; put 'put ''cmV0dXJuIG51bGw7Y2FzZSJvYmplY3QiOnJldHVybjtjYXNlInN5bWJvbCI6cmV0dXJuITE7Y2FzZSJzdHJpbmciOmVuPStlbjtjYXNlIm51bWJlciI6aWYoWihlbikpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gQWUoZW4sdXQsWGUpe3ZhciB0dD1WZShYZSk7cmV0dXJuIHR0Pz8odXQu''@;'; put 'put ''aGFzKHR0KSYmIWVuLmhhcyh0dCkpfWZ1bmN0aW9uIERlKGVuLHV0LFhlLHR0LEllKXt2YXIgYXQ9VmUoWGUpO2lmKG51bGwhPWF0KXJldHVybiBhdDt2YXIgdW49dXQuZ2V0KGF0KTtyZXR1cm4hKHZvaWQgMD09PXVuJiYhdXQuaGFzKGF0KXx8IWtlKHR0LHVuLCExLEllKSkmJiFlbi5oYXMo''@;'; put 'put ''YXQpJiZrZSh0dCx1biwhMSxJZSl9ZnVuY3Rpb24gcnQoZW4sdXQsWGUsdHQsSWUsYXQpe2Zvcih2YXIgdW49eihlbiksSXQ9MDtJdDx1bi5sZW5ndGg7SXQrKyl7dmFyIFJ0PXVuW0l0XTtpZihrZShYZSxSdCxJZSxhdCkmJmtlKHR0LHV0LmdldChSdCksSWUsYXQpKXJldHVybiBlbi5kZWxl''@;'; put 'put ''dGUoUnQpLCEwfXJldHVybiExfWNlLmV4cG9ydHM9e2lzRGVlcEVxdWFsOmZ1bmN0aW9uIHZ0KGVuLHV0KXtyZXR1cm4ga2UoZW4sdXQsITEpfSxpc0RlZXBTdHJpY3RFcXVhbDpmdW5jdGlvbiBTdChlbix1dCl7cmV0dXJuIGtlKGVuLHV0LCEwKX19fSw4MjI0OihjZSxYKT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC53cmFwcGVyPWZ1bmN0aW9uIGIoSSl7cmV0dXJuIEl9fSw5NzQyOihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtYLmJ5dGVMZW5ndGg9ZnVuY3Rpb24gRihaKXt2YXIgWT1QKFopLHE9WVsxXTtyZXR1''@;'; put 'put ''cm4gMyooWVswXStxKS80LXF9LFgudG9CeXRlQXJyYXk9ZnVuY3Rpb24geihaKXt2YXIgWSx1ZSxXPVAoWikscT1XWzBdLGVlPVdbMV0sSj1uZXcgXyhmdW5jdGlvbiBSKFosWSxXKXtyZXR1cm4gMyooWStXKS80LVd9KDAscSxlZSkpLHJlPTAsaWU9ZWU+MD9xLTQ6cTtmb3IodWU9MDt1ZTxp''@;'; put 'put ''ZTt1ZSs9NClZPUlbWi5jaGFyQ29kZUF0KHVlKV08PDE4fElbWi5jaGFyQ29kZUF0KHVlKzEpXTw8MTJ8SVtaLmNoYXJDb2RlQXQodWUrMildPDw2fElbWi5jaGFyQ29kZUF0KHVlKzMpXSxKW3JlKytdPVk+PjE2JjI1NSxKW3JlKytdPVk+PjgmMjU1LEpbcmUrK109MjU1Jlk7cmV0dXJuIDI9''@;'; put 'put ''PT1lZSYmKFk9SVtaLmNoYXJDb2RlQXQodWUpXTw8MnxJW1ouY2hhckNvZGVBdCh1ZSsxKV0+PjQsSltyZSsrXT0yNTUmWSksMT09PWVlJiYoWT1JW1ouY2hhckNvZGVBdCh1ZSldPDwxMHxJW1ouY2hhckNvZGVBdCh1ZSsxKV08PDR8SVtaLmNoYXJDb2RlQXQodWUrMildPj4yLEpbcmUrK109''@;'; put 'put ''WT4+OCYyNTUsSltyZSsrXT0yNTUmWSksSn0sWC5mcm9tQnl0ZUFycmF5PWZ1bmN0aW9uIEsoWil7Zm9yKHZhciBZLFc9Wi5sZW5ndGgscT1XJTMsZWU9W10sSj0xNjM4MyxyZT0wLGllPVctcTtyZTxpZTtyZSs9SillZS5wdXNoKE8oWixyZSxyZStKPmllP2llOnJlK0opKTtyZXR1cm4gMT09''@;'; put 'put ''PXE/ZWUucHVzaChiWyhZPVpbVy0xXSk+PjJdK2JbWTw8NCY2M10rIj09Iik6Mj09PXEmJmVlLnB1c2goYlsoWT0oWltXLTJdPDw4KStaW1ctMV0pPj4xMF0rYltZPj40JjYzXStiW1k8PDImNjNdKyI9IiksZWUuam9pbigiIil9O2Zvcih2YXIgYj1bXSxJPVtdLF89dHlwZW9mIFVpbnQ4QXJy''@;'; put 'put ''YXk8InUiP1VpbnQ4QXJyYXk6QXJyYXkscD0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsVj0wO1Y8NjQ7KytWKWJbVl09cFtWXSxJW3AuY2hhckNvZGVBdChWKV09VjtmdW5jdGlvbiBQKFope3ZhciBZPVoubGVuZ3Ro''@;'; put 'put ''O2lmKFklND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO3ZhciBXPVouaW5kZXhPZigiPSIpO3JldHVybi0xPT09VyYmKFc9WSksW1csVz09PVk/MDo0LVclNF19ZnVuY3Rpb24gTihaKXtyZXR1cm4gYltaPj4xOCY2''@;'; put 'put ''M10rYltaPj4xMiY2M10rYltaPj42JjYzXStiWzYzJlpdfWZ1bmN0aW9uIE8oWixZLFcpe2Zvcih2YXIgZWU9W10sSj1ZO0o8VztKKz0zKWVlLnB1c2goTigoWltKXTw8MTYmMTY3MTE2ODApKyhaW0orMV08PDgmNjUyODApKygyNTUmWltKKzJdKSkpO3JldHVybiBlZS5qb2luKCIiKX1JWzQ1''@;'; put 'put ''XT02MixJWzk1XT02M30sMzU1MDpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJLF8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBwKHgsQyl7aWYoIXgpdGhyb3cgbmV3IEVycm9yKEN8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gVih4LEMpe3guc3VwZXJfPUM7dmFyIFQ9ZnVuY3Rp''@;'; put 'put ''b24oKXt9O1QucHJvdG90eXBlPUMucHJvdG90eXBlLHgucHJvdG90eXBlPW5ldyBULHgucHJvdG90eXBlLmNvbnN0cnVjdG9yPXh9ZnVuY3Rpb24gdyh4LEMsVCl7aWYody5pc0JOKHgpKXJldHVybiB4O3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlz''@;'; put 'put ''LnJlZD1udWxsLG51bGwhPT14JiYoKCJsZSI9PT1DfHwiYmUiPT09QykmJihUPUMsQz0xMCksdGhpcy5faW5pdCh4fHwwLEN8fDEwLFR8fCJiZSIpKX12YXIgUDsib2JqZWN0Ij09dHlwZW9mIEk/SS5leHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3RyeXtQPXR5cGVvZiB3''@;'; put 'put ''aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpiKDY2MDEpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gRih4LEMpe3ZhciBUPXguY2hhckNvZGVBdChDKTtyZXR1cm4gVD49NDgmJlQ8PTU3P1QtNDg6VD49NjUmJlQ8PTcwP1QtNTU6VD49OTcmJlQ8PTEw''@;'; put 'put ''Mj9ULTg3OnZvaWQgcCghMSwiSW52YWxpZCBjaGFyYWN0ZXIgaW4gIit4KX1mdW5jdGlvbiBSKHgsQyxUKXt2YXIgSD1GKHgsVCk7cmV0dXJuIFQtMT49QyYmKEh8PUYoeCxULTEpPDw0KSxIfWZ1bmN0aW9uIHooeCxDLFQsSCl7Zm9yKHZhciBqPTAsRT0wLG09TWF0aC5taW4oeC5sZW5ndGgs''@;'; put 'put ''VCksQT1DO0E8bTtBKyspe3ZhciBhZT14LmNoYXJDb2RlQXQoQSktNDg7aio9SCxFPWFlPj00OT9hZS00OSsxMDphZT49MTc/YWUtMTcrMTA6YWUscChhZT49MCYmRTxILCJJbnZhbGlkIGNoYXJhY3RlciIpLGorPUV9cmV0dXJuIGp9ZnVuY3Rpb24gTih4LEMpe3gud29yZHM9Qy53b3Jkcyx4''@;'; put 'put ''Lmxlbmd0aD1DLmxlbmd0aCx4Lm5lZ2F0aXZlPUMubmVnYXRpdmUseC5yZWQ9Qy5yZWR9aWYody5pc0JOPWZ1bmN0aW9uKEMpe3JldHVybiBDIGluc3RhbmNlb2Ygd3x8bnVsbCE9PUMmJiJvYmplY3QiPT10eXBlb2YgQyYmQy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFy''@;'; put 'put ''cmF5LmlzQXJyYXkoQy53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKEMsVCl7cmV0dXJuIEMuY21wKFQpPjA/QzpUfSx3Lm1pbj1mdW5jdGlvbihDLFQpe3JldHVybiBDLmNtcChUKTwwP0M6VH0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oQyxULEgpe2lmKCJudW1iZXIiPT10eXBlb2YgQyly''@;'; put 'put ''ZXR1cm4gdGhpcy5faW5pdE51bWJlcihDLFQsSCk7aWYoIm9iamVjdCI9PXR5cGVvZiBDKXJldHVybiB0aGlzLl9pbml0QXJyYXkoQyxULEgpOyJoZXgiPT09VCYmKFQ9MTYpLHAoVD09PSgwfFQpJiZUPj0yJiZUPD0zNik7dmFyIGo9MDsiLSI9PT0oQz1DLnRvU3RyaW5nKCkucmVwbGFjZSgv''@;'; put 'put ''XHMrL2csIiIpKVswXSYmKGorKyx0aGlzLm5lZ2F0aXZlPTEpLGo8Qy5sZW5ndGgmJigxNj09PVQ/dGhpcy5fcGFyc2VIZXgoQyxqLEgpOih0aGlzLl9wYXJzZUJhc2UoQyxULGopLCJsZSI9PT1IJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksVCxIKSkpfSx3LnByb3RvdHlwZS5f''@;'; put 'put ''aW5pdE51bWJlcj1mdW5jdGlvbihDLFQsSCl7QzwwJiYodGhpcy5uZWdhdGl2ZT0xLEM9LUMpLEM8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJkNdLHRoaXMubGVuZ3RoPTEpOkM8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmQyxDLzY3MTA4ODY0JjY3MTA4''@;'; put 'put ''ODYzXSx0aGlzLmxlbmd0aD0yKToocChDPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJkMsQy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09SCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLFQsSCl9LHcucHJvdG90eXBlLl9p''@;'; put 'put ''bml0QXJyYXk9ZnVuY3Rpb24oQyxULEgpe2lmKHAoIm51bWJlciI9PXR5cGVvZiBDLmxlbmd0aCksQy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoQy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXko''@;'; put 'put ''dGhpcy5sZW5ndGgpO2Zvcih2YXIgaj0wO2o8dGhpcy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09MDt2YXIgRSxtLEE9MDtpZigiYmUiPT09SClmb3Ioaj1DLmxlbmd0aC0xLEU9MDtqPj0wO2otPTMpdGhpcy53b3Jkc1tFXXw9KG09Q1tqXXxDW2otMV08PDh8Q1tqLTJdPDwxNik8PEEmNjcx''@;'; put 'put ''MDg4NjMsdGhpcy53b3Jkc1tFKzFdPW0+Pj4yNi1BJjY3MTA4ODYzLChBKz0yNCk+PTI2JiYoQS09MjYsRSsrKTtlbHNlIGlmKCJsZSI9PT1IKWZvcihqPTAsRT0wO2o8Qy5sZW5ndGg7ais9Myl0aGlzLndvcmRzW0VdfD0obT1DW2pdfENbaisxXTw8OHxDW2orMl08PDE2KTw8QSY2NzEwODg2''@;'; put 'put ''Myx0aGlzLndvcmRzW0UrMV09bT4+PjI2LUEmNjcxMDg4NjMsKEErPTI0KT49MjYmJihBLT0yNixFKyspO3JldHVybiB0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oQyxULEgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoQy5sZW5ndGgtVCkvNiksdGhpcy53''@;'; put 'put ''b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgaj0wO2o8dGhpcy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09MDt2YXIgQSxFPTAsbT0wO2lmKCJiZSI9PT1IKWZvcihqPUMubGVuZ3RoLTE7aj49VDtqLT0yKUE9UihDLFQsaik8PEUsdGhpcy53b3Jkc1ttXXw9NjcxMDg4NjMm''@;'; put 'put ''QSxFPj0xOD8oRS09MTgsdGhpcy53b3Jkc1ttKz0xXXw9QT4+PjI2KTpFKz04O2Vsc2UgZm9yKGo9KEMubGVuZ3RoLVQpJTI9PTA/VCsxOlQ7ajxDLmxlbmd0aDtqKz0yKUE9UihDLFQsaik8PEUsdGhpcy53b3Jkc1ttXXw9NjcxMDg4NjMmQSxFPj0xOD8oRS09MTgsdGhpcy53b3Jkc1ttKz0x''@;'; put 'put ''XXw9QT4+PjI2KTpFKz04O3RoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oQyxULEgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBqPTAsRT0xO0U8PTY3MTA4ODYzO0UqPVQpaisrO2otLSxFPUUvVHwwO2Zvcih2YXIgbT1DLmxlbmd0''@;'; put 'put ''aC1ILEE9bSVqLGFlPU1hdGgubWluKG0sbS1BKStILG5lPTAsc2U9SDtzZTxhZTtzZSs9ailuZT16KEMsc2Usc2UraixUKSx0aGlzLmltdWxuKEUpLHRoaXMud29yZHNbMF0rbmU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bmU6dGhpcy5faWFkZG4obmUpO2lmKDAhPT1BKXt2YXIgQ2U9MTtm''@;'; put 'put ''b3IobmU9eihDLHNlLEMubGVuZ3RoLFQpLHNlPTA7c2U8QTtzZSsrKUNlKj1UO3RoaXMuaW11bG4oQ2UpLHRoaXMud29yZHNbMF0rbmU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bmU6dGhpcy5faWFkZG4obmUpfXRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oQyl7''@;'; put 'put ''Qy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKUMud29yZHNbVF09dGhpcy53b3Jkc1tUXTtDLmxlbmd0aD10aGlzLmxlbmd0aCxDLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsQy5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLl9tb3Zl''@;'; put 'put ''PWZ1bmN0aW9uKEMpe04oQyx0aGlzKX0sdy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgQz1uZXcgdyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KEMpLEN9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oQyl7Zm9yKDt0aGlzLmxlbmd0aDxDOyl0aGlzLndvcmRzW3RoaXMubGVu''@;'; put 'put ''Z3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLl9zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx0eXBlb2YgU3ltYm9sPCJ1IiYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3IpdHJ5e3cucHJvdG90eXBlW1N5bWJvbC5mb3IoIm5vZGVqcy51dGls''@;'; put 'put ''Lmluc3BlY3QuY3VzdG9tIildPU99Y2F0Y2h7dy5wcm90b3R5cGUuaW5zcGVjdD1PfWVsc2Ugdy5wcm90b3R5cGUuaW5zcGVjdD1PO2Z1bmN0aW9uIE8oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In12YXIgSz1bIiIsIjAiLCIwMCIs''@;'; put 'put ''IjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxaPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLFk9WzAsMCwzMzU1NDQzMiw0MzA0''@;'; put 'put ''NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2''@;'; put 'put ''NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gZWUoeCxDLFQpe1QubmVnYXRpdmU9Qy5uZWdhdGl2ZV54Lm5l''@;'; put 'put ''Z2F0aXZlO3ZhciBIPXgubGVuZ3RoK0MubGVuZ3RofDA7VC5sZW5ndGg9SCxIPUgtMXwwO3ZhciBqPTB8eC53b3Jkc1swXSxFPTB8Qy53b3Jkc1swXSxtPWoqRSxhZT1tLzY3MTA4ODY0fDA7VC53b3Jkc1swXT02NzEwODg2MyZtO2Zvcih2YXIgbmU9MTtuZTxIO25lKyspe2Zvcih2YXIgc2U9''@;'; put 'put ''YWU+Pj4yNixDZT02NzEwODg2MyZhZSxVZT1NYXRoLm1pbihuZSxDLmxlbmd0aC0xKSxKZT1NYXRoLm1heCgwLG5lLXgubGVuZ3RoKzEpO0plPD1VZTtKZSsrKXNlKz0obT0oaj0wfHgud29yZHNbbmUtSmV8MF0pKihFPTB8Qy53b3Jkc1tKZV0pK0NlKS82NzEwODg2NHwwLENlPTY3MTA4ODYz''@;'; put 'put ''Jm07VC53b3Jkc1tuZV09MHxDZSxhZT0wfHNlfXJldHVybiAwIT09YWU/VC53b3Jkc1tuZV09MHxhZTpULmxlbmd0aC0tLFQuX3N0cmlwKCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oQyxUKXt2YXIgSDtpZihUPTB8VHx8MSwxNj09PShDPUN8fDEwKXx8ImhleCI9PT1DKXtIPSIi''@;'; put 'put ''O2Zvcih2YXIgaj0wLEU9MCxtPTA7bTx0aGlzLmxlbmd0aDttKyspe3ZhciBBPXRoaXMud29yZHNbbV0sYWU9KDE2Nzc3MjE1JihBPDxqfEUpKS50b1N0cmluZygxNik7RT1BPj4+MjQtaiYxNjc3NzIxNSwoais9Mik+PTI2JiYoai09MjYsbS0tKSxIPTAhPT1FfHxtIT09dGhpcy5sZW5ndGgt''@;'; put 'put ''MT9LWzYtYWUubGVuZ3RoXSthZStIOmFlK0h9Zm9yKDAhPT1FJiYoSD1FLnRvU3RyaW5nKDE2KStIKTtILmxlbmd0aCVUIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9aWYoQz09PSgwfEMpJiZDPj0yJiZDPD0zNil7dmFyIG5lPVpbQ10sc2U9WVtD''@;'; put 'put ''XTtIPSIiO3ZhciBDZT10aGlzLmNsb25lKCk7Zm9yKENlLm5lZ2F0aXZlPTA7IUNlLmlzWmVybygpOyl7dmFyIFVlPUNlLm1vZHJuKHNlKS50b1N0cmluZyhDKTtIPShDZT1DZS5pZGl2bihzZSkpLmlzWmVybygpP1VlK0g6S1tuZS1VZS5sZW5ndGhdK1VlK0h9Zm9yKHRoaXMuaXNaZXJvKCkm''@;'; put 'put ''JihIPSIwIitIKTtILmxlbmd0aCVUIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9cCghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBDPXRoaXMud29yZHNbMF07''@;'; put 'put ''cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9DKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Qys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJnAoITEsIk51bWJlciBjYW4gb25seSBz''@;'; put 'put ''YWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1DOkN9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2LDIpfSxQJiYody5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gdGhpcy50b0Fy''@;'; put 'put ''cmF5TGlrZShQLEMsVCl9KSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKEMsVCl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksQyxUKX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oQyxULEgpe3RoaXMuX3N0cmlwKCk7dmFyIGo9dGhpcy5ieXRlTGVuZ3RoKCks''@;'; put 'put ''RT1IfHxNYXRoLm1heCgxLGopO3Aoajw9RSwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLHAoRT4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKTt2YXIgbT1mdW5jdGlvbihDLFQpe3JldHVybiBDLmFsbG9jVW5zYWZlP0MuYWxsb2NVbnNhZmUoVCk6bmV3''@;'; put 'put ''IEMoVCl9KEMsRSk7cmV0dXJuIHRoaXNbIl90b0FycmF5TGlrZSIrKCJsZSI9PT1UPyJMRSI6IkJFIildKG0saiksbX0sdy5wcm90b3R5cGUuX3RvQXJyYXlMaWtlTEU9ZnVuY3Rpb24oQyxUKXtmb3IodmFyIEg9MCxqPTAsRT0wLG09MDtFPHRoaXMubGVuZ3RoO0UrKyl7dmFyIEE9dGhpcy53''@;'; put 'put ''b3Jkc1tFXTw8bXxqO0NbSCsrXT0yNTUmQSxIPEMubGVuZ3RoJiYoQ1tIKytdPUE+PjgmMjU1KSxIPEMubGVuZ3RoJiYoQ1tIKytdPUE+PjE2JjI1NSksNj09PW0/KEg8Qy5sZW5ndGgmJihDW0grK109QT4+MjQmMjU1KSxqPTAsbT0wKTooaj1BPj4+MjQsbSs9Mil9aWYoSDxDLmxlbmd0aClm''@;'; put 'put ''b3IoQ1tIKytdPWo7SDxDLmxlbmd0aDspQ1tIKytdPTB9LHcucHJvdG90eXBlLl90b0FycmF5TGlrZUJFPWZ1bmN0aW9uKEMsVCl7Zm9yKHZhciBIPUMubGVuZ3RoLTEsaj0wLEU9MCxtPTA7RTx0aGlzLmxlbmd0aDtFKyspe3ZhciBBPXRoaXMud29yZHNbRV08PG18ajtDW0gtLV09MjU1JkEs''@;'; put 'put ''SD49MCYmKENbSC0tXT1BPj44JjI1NSksSD49MCYmKENbSC0tXT1BPj4xNiYyNTUpLDY9PT1tPyhIPj0wJiYoQ1tILS1dPUE+PjI0JjI1NSksaj0wLG09MCk6KGo9QT4+PjI0LG0rPTIpfWlmKEg+PTApZm9yKENbSC0tXT1qO0g+PTA7KUNbSC0tXT0wfSx3LnByb3RvdHlwZS5fY291bnRCaXRz''@;'; put 'put ''PU1hdGguY2x6MzI/ZnVuY3Rpb24oQyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoQyl9OmZ1bmN0aW9uKEMpe3ZhciBUPUMsSD0wO3JldHVybiBUPj00MDk2JiYoSCs9MTMsVD4+Pj0xMyksVD49NjQmJihIKz03LFQ+Pj49NyksVD49OCYmKEgrPTQsVD4+Pj00KSxUPj0yJiYoSCs9MixUPj4+PTIp''@;'; put 'put ''LEgrVH0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKEMpe2lmKDA9PT1DKXJldHVybiAyNjt2YXIgVD1DLEg9MDtyZXR1cm4hKDgxOTEmVCkmJihIKz0xMyxUPj4+PTEzKSwhKDEyNyZUKSYmKEgrPTcsVD4+Pj03KSwhKDE1JlQpJiYoSCs9NCxUPj4+PTQpLCEoMyZUKSYmKEgrPTIs''@;'; put 'put ''VD4+Pj0yKSwhKDEmVCkmJkgrKyxIfSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgVD10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStUfSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigp''@;'; put 'put ''e2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBDPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgSD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW1RdKTtpZihDKz1ILDI2IT09SClicmVha31yZXR1cm4gQ30sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKEMpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKEMpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24o''@;'; put 'put ''Qyl7cmV0dXJuIHRoaXMudGVzdG4oQy0xKT90aGlzLm5vdG4oQykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNs''@;'; put 'put ''b25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKEMpe2Zvcig7dGhpcy5sZW5ndGg8Qy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5n''@;'; put 'put ''dGgrK109MDtmb3IodmFyIFQ9MDtUPEMubGVuZ3RoO1QrKyl0aGlzLndvcmRzW1RdPXRoaXMud29yZHNbVF18Qy53b3Jkc1tUXTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKEMpe3JldHVybiBwKCEodGhpcy5uZWdhdGl2ZXxDLm5lZ2F0aXZlKSksdGhp''@;'; put 'put ''cy5pdW9yKEMpfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihDKTpDLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3Ro''@;'; put 'put ''aXMuY2xvbmUoKS5pdW9yKEMpOkMuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihDKXt2YXIgVDtUPXRoaXMubGVuZ3RoPkMubGVuZ3RoP0M6dGhpcztmb3IodmFyIEg9MDtIPFQubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXRoaXMud29yZHNbSF0mQy53''@;'; put 'put ''b3Jkc1tIXTtyZXR1cm4gdGhpcy5sZW5ndGg9VC5sZW5ndGgsdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihDKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Qy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoQyl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihDKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoQyk6Qy5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChDKTpDLmNsb25lKCkuaXVhbmQodGhp''@;'; put 'put ''cyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKEMpe3ZhciBULEg7dGhpcy5sZW5ndGg+Qy5sZW5ndGg/KFQ9dGhpcyxIPUMpOihUPUMsSD10aGlzKTtmb3IodmFyIGo9MDtqPEgubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPVQud29yZHNbal1eSC53b3Jkc1tqXTtpZih0aGlzIT09VClm''@;'; put 'put ''b3IoO2o8VC5sZW5ndGg7aisrKXRoaXMud29yZHNbal09VC53b3Jkc1tqXTtyZXR1cm4gdGhpcy5sZW5ndGg9VC5sZW5ndGgsdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihDKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Qy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3Io''@;'; put 'put ''Qyl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoQyk6Qy5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMu''@;'; put 'put ''Y2xvbmUoKS5pdXhvcihDKTpDLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKEMpe3AoIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKTt2YXIgVD0wfE1hdGguY2VpbChDLzI2KSxIPUMlMjY7dGhpcy5fZXhwYW5kKFQpLEg+MCYmVC0tO2Zvcih2YXIgaj0w''@;'; put 'put ''O2o8VDtqKyspdGhpcy53b3Jkc1tqXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tqXTtyZXR1cm4gSD4wJiYodGhpcy53b3Jkc1tqXT1+dGhpcy53b3Jkc1tqXSY2NzEwODg2Mz4+MjYtSCksdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9u''@;'; put 'put ''ZSgpLmlub3RuKEMpfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKEMsVCl7cCgibnVtYmVyIj09dHlwZW9mIEMmJkM+PTApO3ZhciBIPUMvMjZ8MCxqPUMlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF09VD90aGlzLndvcmRzW0hdfDE8PGo6dGhpcy53b3Jkc1tI''@;'; put 'put ''XSZ+KDE8PGopLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oQyl7dmFyIFQsSCxqO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Qy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLFQ9dGhpcy5pc3ViKEMpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9y''@;'; put 'put ''bVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PUMubmVnYXRpdmUpcmV0dXJuIEMubmVnYXRpdmU9MCxUPXRoaXMuaXN1YihDKSxDLm5lZ2F0aXZlPTEsVC5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5DLmxlbmd0aD8oSD10aGlzLGo9Qyk6KEg9QyxqPXRoaXMpO2Zvcih2YXIgRT0w''@;'; put 'put ''LG09MDttPGoubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPTY3MTA4ODYzJihUPSgwfEgud29yZHNbbV0pKygwfGoud29yZHNbbV0pK0UpLEU9VD4+PjI2O2Zvcig7MCE9PUUmJm08SC5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09NjcxMDg4NjMmKFQ9KDB8SC53b3Jkc1ttXSkrRSksRT1UPj4+''@;'; put 'put ''MjY7aWYodGhpcy5sZW5ndGg9SC5sZW5ndGgsMCE9PUUpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09RSx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoSCE9PXRoaXMpZm9yKDttPEgubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPUgud29yZHNbbV07cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1m''@;'; put 'put ''dW5jdGlvbihDKXt2YXIgVDtyZXR1cm4gMCE9PUMubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhDLm5lZ2F0aXZlPTAsVD10aGlzLnN1YihDKSxDLm5lZ2F0aXZlXj0xLFQpOjA9PT1DLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLFQ9Qy5zdWIodGhp''@;'; put 'put ''cyksdGhpcy5uZWdhdGl2ZT0xLFQpOnRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKEMpOkMuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKEMpe2lmKDAhPT1DLm5lZ2F0aXZlKXtDLm5lZ2F0aXZlPTA7dmFyIFQ9dGhpcy5pYWRkKEMp''@;'; put 'put ''O3JldHVybiBDLm5lZ2F0aXZlPTEsVC5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChDKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgaixFLEg9dGhpcy5jbXAoQyk7aWYoMD09PUgpcmV0dXJuIHRo''@;'; put 'put ''aXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO0g+MD8oaj10aGlzLEU9Qyk6KGo9QyxFPXRoaXMpO2Zvcih2YXIgbT0wLEE9MDtBPEUubGVuZ3RoO0ErKyltPShUPSgwfGoud29yZHNbQV0pLSgwfEUud29yZHNbQV0pK20pPj4yNix0aGlzLndvcmRzW0Fd''@;'; put 'put ''PTY3MTA4ODYzJlQ7Zm9yKDswIT09bSYmQTxqLmxlbmd0aDtBKyspbT0oVD0oMHxqLndvcmRzW0FdKSttKT4+MjYsdGhpcy53b3Jkc1tBXT02NzEwODg2MyZUO2lmKDA9PT1tJiZBPGoubGVuZ3RoJiZqIT09dGhpcylmb3IoO0E8ai5sZW5ndGg7QSsrKXRoaXMud29yZHNbQV09ai53b3Jkc1tB''@;'; put 'put ''XTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsQSksaiE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoQyl9O3ZhciBKPWZ1bmN0aW9uKEMsVCxI''@;'; put 'put ''KXt2YXIgYWUsbmUsc2Usaj1DLndvcmRzLEU9VC53b3JkcyxtPUgud29yZHMsQT0wLENlPTB8alswXSxVZT04MTkxJkNlLEplPUNlPj4+MTMsaXQ9MHxqWzFdLHhlPTgxOTEmaXQseWU9aXQ+Pj4xMyxLZT0wfGpbMl0samU9ODE5MSZLZSxrZT1LZT4+PjEzLEhlPTB8alszXSxMZT04MTkxJkhl''@;'; put 'put ''LFJlPUhlPj4+MTMsVmU9MHxqWzRdLEFlPTgxOTEmVmUsRGU9VmU+Pj4xMyxfdD0wfGpbNV0scnQ9ODE5MSZfdCxRZT1fdD4+PjEzLHNuPTB8als2XSx2dD04MTkxJnNuLFN0PXNuPj4+MTMsZW49MHxqWzddLHV0PTgxOTEmZW4sWGU9ZW4+Pj4xMyx0dD0wfGpbOF0sSWU9ODE5MSZ0dCxhdD10''@;'; put 'put ''dD4+PjEzLHVuPTB8als5XSxJdD04MTkxJnVuLFJ0PXVuPj4+MTMscmk9MHxFWzBdLGFuPTgxOTEmcmksbG49cmk+Pj4xMyxuaT0wfEVbMV0saG49ODE5MSZuaSxodD1uaT4+PjEzLFJyPTB8RVsyXSxCdD04MTkxJlJyLEF0PVJyPj4+MTMsRm49MHxFWzNdLHN0PTgxOTEmRm4sWnQ9Rm4+Pj4x''@;'; put 'put ''MyxRcj0wfEVbNF0sWWU9ODE5MSZRcixUdD1Rcj4+PjEzLHJyPTB8RVs1XSxmdD04MTkxJnJyLE10PXJyPj4+MTMsWm49MHxFWzZdLG5uPTgxOTEmWm4sV3Q9Wm4+Pj4xMyxkaT0wfEVbN10sZG49ODE5MSZkaSxtbj1kaT4+PjEzLHBpPTB8RVs4XSxmbj04MTkxJnBpLHRuPXBpPj4+MTMsY2E9''@;'; put 'put ''MHxFWzldLF9pPTgxOTEmY2EsdnI9Y2E+Pj4xMztILm5lZ2F0aXZlPUMubmVnYXRpdmVeVC5uZWdhdGl2ZSxILmxlbmd0aD0xOTt2YXIgWGk9KEErKGFlPU1hdGguaW11bChVZSxhbikpfDApKygoODE5MSYobmU9KG5lPU1hdGguaW11bChVZSxsbikpK01hdGguaW11bChKZSxhbil8MCkpPDwx''@;'; put 'put ''Myl8MDtBPSgoc2U9TWF0aC5pbXVsKEplLGxuKSkrKG5lPj4+MTMpfDApKyhYaT4+PjI2KXwwLFhpJj02NzEwODg2MyxhZT1NYXRoLmltdWwoeGUsYW4pLG5lPShuZT1NYXRoLmltdWwoeGUsbG4pKStNYXRoLmltdWwoeWUsYW4pfDAsc2U9TWF0aC5pbXVsKHllLGxuKTt2YXIgUWk9KEErKGFl''@;'; put 'put ''PWFlK01hdGguaW11bChVZSxobil8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVlLGh0KXwwKStNYXRoLmltdWwoSmUsaG4pfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxodCl8MCkrKG5lPj4+MTMpfDApKyhRaT4+PjI2KXwwLFFpJj02NzEwODg2MyxhZT1N''@;'; put 'put ''YXRoLmltdWwoamUsYW4pLG5lPShuZT1NYXRoLmltdWwoamUsbG4pKStNYXRoLmltdWwoa2UsYW4pfDAsc2U9TWF0aC5pbXVsKGtlLGxuKSxhZT1hZStNYXRoLmltdWwoeGUsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh4ZSxodCl8MCkrTWF0aC5pbXVsKHllLGhuKXwwLHNlPXNlK01hdGgu''@;'; put 'put ''aW11bCh5ZSxodCl8MDt2YXIgVmk9KEErKGFlPWFlK01hdGguaW11bChVZSxCdCl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUsQnQpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxBdCl8MCkrKG5lPj4+MTMpfDApKyhW''@;'; put 'put ''aT4+PjI2KXwwLFZpJj02NzEwODg2MyxhZT1NYXRoLmltdWwoTGUsYW4pLG5lPShuZT1NYXRoLmltdWwoTGUsbG4pKStNYXRoLmltdWwoUmUsYW4pfDAsc2U9TWF0aC5pbXVsKFJlLGxuKSxhZT1hZStNYXRoLmltdWwoamUsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChqZSxodCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKGtlLGhuKXwwLHNlPXNlK01hdGguaW11bChrZSxodCl8MCxhZT1hZStNYXRoLmltdWwoeGUsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11bCh4ZSxBdCl8MCkrTWF0aC5pbXVsKHllLEJ0KXwwLHNlPXNlK01hdGguaW11bCh5ZSxBdCl8MDt2YXIgZWk9KEErKGFlPWFlK01hdGguaW11''@;'; put 'put ''bChVZSxzdCl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVlLFp0KXwwKStNYXRoLmltdWwoSmUsc3QpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxadCl8MCkrKG5lPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxhZT1NYXRoLmltdWwoQWUs''@;'; put 'put ''YW4pLG5lPShuZT1NYXRoLmltdWwoQWUsbG4pKStNYXRoLmltdWwoRGUsYW4pfDAsc2U9TWF0aC5pbXVsKERlLGxuKSxhZT1hZStNYXRoLmltdWwoTGUsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChMZSxodCl8MCkrTWF0aC5pbXVsKFJlLGhuKXwwLHNlPXNlK01hdGguaW11bChSZSxodCl8''@;'; put 'put ''MCxhZT1hZStNYXRoLmltdWwoamUsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChqZSxBdCl8MCkrTWF0aC5pbXVsKGtlLEJ0KXwwLHNlPXNlK01hdGguaW11bChrZSxBdCl8MCxhZT1hZStNYXRoLmltdWwoeGUsc3QpfDAsbmU9KG5lPW5lK01hdGguaW11bCh4ZSxadCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KHllLHN0KXwwLHNlPXNlK01hdGguaW11bCh5ZSxadCl8MDt2YXIgdWE9KEErKGFlPWFlK01hdGguaW11bChVZSxZZSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoSmUsWWUpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxU''@;'; put 'put ''dCl8MCkrKG5lPj4+MTMpfDApKyh1YT4+PjI2KXwwLHVhJj02NzEwODg2MyxhZT1NYXRoLmltdWwocnQsYW4pLG5lPShuZT1NYXRoLmltdWwocnQsbG4pKStNYXRoLmltdWwoUWUsYW4pfDAsc2U9TWF0aC5pbXVsKFFlLGxuKSxhZT1hZStNYXRoLmltdWwoQWUsaG4pfDAsbmU9KG5lPW5lK01h''@;'; put 'put ''dGguaW11bChBZSxodCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLHNlPXNlK01hdGguaW11bChEZSxodCl8MCxhZT1hZStNYXRoLmltdWwoTGUsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChMZSxBdCl8MCkrTWF0aC5pbXVsKFJlLEJ0KXwwLHNlPXNlK01hdGguaW11bChSZSxBdCl8MCxhZT1h''@;'; put 'put ''ZStNYXRoLmltdWwoamUsc3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChqZSxadCl8MCkrTWF0aC5pbXVsKGtlLHN0KXwwLHNlPXNlK01hdGguaW11bChrZSxadCl8MCxhZT1hZStNYXRoLmltdWwoeGUsWWUpfDAsbmU9KG5lPW5lK01hdGguaW11bCh4ZSxUdCl8MCkrTWF0aC5pbXVsKHllLFll''@;'; put 'put ''KXwwLHNlPXNlK01hdGguaW11bCh5ZSxUdCl8MDt2YXIgUmk9KEErKGFlPWFlK01hdGguaW11bChVZSxmdCl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVlLE10KXwwKStNYXRoLmltdWwoSmUsZnQpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxNdCl8MCkr''@;'; put 'put ''KG5lPj4+MTMpfDApKyhSaT4+PjI2KXwwLFJpJj02NzEwODg2MyxhZT1NYXRoLmltdWwodnQsYW4pLG5lPShuZT1NYXRoLmltdWwodnQsbG4pKStNYXRoLmltdWwoU3QsYW4pfDAsc2U9TWF0aC5pbXVsKFN0LGxuKSxhZT1hZStNYXRoLmltdWwocnQsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11''@;'; put 'put ''bChydCxodCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLHNlPXNlK01hdGguaW11bChRZSxodCl8MCxhZT1hZStNYXRoLmltdWwoQWUsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxBdCl8MCkrTWF0aC5pbXVsKERlLEJ0KXwwLHNlPXNlK01hdGguaW11bChEZSxBdCl8MCxhZT1hZStNYXRo''@;'; put 'put ''LmltdWwoTGUsc3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChMZSxadCl8MCkrTWF0aC5pbXVsKFJlLHN0KXwwLHNlPXNlK01hdGguaW11bChSZSxadCl8MCxhZT1hZStNYXRoLmltdWwoamUsWWUpfDAsbmU9KG5lPW5lK01hdGguaW11bChqZSxUdCl8MCkrTWF0aC5pbXVsKGtlLFllKXwwLHNl''@;'; put 'put ''PXNlK01hdGguaW11bChrZSxUdCl8MCxhZT1hZStNYXRoLmltdWwoeGUsZnQpfDAsbmU9KG5lPW5lK01hdGguaW11bCh4ZSxNdCl8MCkrTWF0aC5pbXVsKHllLGZ0KXwwLHNlPXNlK01hdGguaW11bCh5ZSxNdCl8MDt2YXIgRGE9KEErKGFlPWFlK01hdGguaW11bChVZSxubil8MCl8MCkrKCg4''@;'; put 'put ''MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVlLFd0KXwwKStNYXRoLmltdWwoSmUsbm4pfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxXdCl8MCkrKG5lPj4+MTMpfDApKyhEYT4+PjI2KXwwLERhJj02NzEwODg2MyxhZT1NYXRoLmltdWwodXQsYW4pLG5lPShuZT1NYXRoLmlt''@;'; put 'put ''dWwodXQsbG4pKStNYXRoLmltdWwoWGUsYW4pfDAsc2U9TWF0aC5pbXVsKFhlLGxuKSxhZT1hZStNYXRoLmltdWwodnQsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh2dCxodCl8MCkrTWF0aC5pbXVsKFN0LGhuKXwwLHNlPXNlK01hdGguaW11bChTdCxodCl8MCxhZT1hZStNYXRoLmltdWwo''@;'; put 'put ''cnQsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChydCxBdCl8MCkrTWF0aC5pbXVsKFFlLEJ0KXwwLHNlPXNlK01hdGguaW11bChRZSxBdCl8MCxhZT1hZStNYXRoLmltdWwoQWUsc3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxadCl8MCkrTWF0aC5pbXVsKERlLHN0KXwwLHNlPXNlK01h''@;'; put 'put ''dGguaW11bChEZSxadCl8MCxhZT1hZStNYXRoLmltdWwoTGUsWWUpfDAsbmU9KG5lPW5lK01hdGguaW11bChMZSxUdCl8MCkrTWF0aC5pbXVsKFJlLFllKXwwLHNlPXNlK01hdGguaW11bChSZSxUdCl8MCxhZT1hZStNYXRoLmltdWwoamUsZnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChqZSxN''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKGtlLGZ0KXwwLHNlPXNlK01hdGguaW11bChrZSxNdCl8MCxhZT1hZStNYXRoLmltdWwoeGUsbm4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh4ZSxXdCl8MCkrTWF0aC5pbXVsKHllLG5uKXwwLHNlPXNlK01hdGguaW11bCh5ZSxXdCl8MDt2YXIgaGk9KEErKGFlPWFl''@;'; put 'put ''K01hdGguaW11bChVZSxkbil8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVlLG1uKXwwKStNYXRoLmltdWwoSmUsZG4pfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxtbil8MCkrKG5lPj4+MTMpfDApKyhoaT4+PjI2KXwwLGhpJj02NzEwODg2MyxhZT1NYXRo''@;'; put 'put ''LmltdWwoSWUsYW4pLG5lPShuZT1NYXRoLmltdWwoSWUsbG4pKStNYXRoLmltdWwoYXQsYW4pfDAsc2U9TWF0aC5pbXVsKGF0LGxuKSxhZT1hZStNYXRoLmltdWwodXQsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh1dCxodCl8MCkrTWF0aC5pbXVsKFhlLGhuKXwwLHNlPXNlK01hdGguaW11''@;'; put 'put ''bChYZSxodCl8MCxhZT1hZStNYXRoLmltdWwodnQsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11bCh2dCxBdCl8MCkrTWF0aC5pbXVsKFN0LEJ0KXwwLHNlPXNlK01hdGguaW11bChTdCxBdCl8MCxhZT1hZStNYXRoLmltdWwocnQsc3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChydCxadCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKFFlLHN0KXwwLHNlPXNlK01hdGguaW11bChRZSxadCl8MCxhZT1hZStNYXRoLmltdWwoQWUsWWUpfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxUdCl8MCkrTWF0aC5pbXVsKERlLFllKXwwLHNlPXNlK01hdGguaW11bChEZSxUdCl8MCxhZT1hZStNYXRoLmltdWwoTGUsZnQp''@;'; put 'put ''fDAsbmU9KG5lPW5lK01hdGguaW11bChMZSxNdCl8MCkrTWF0aC5pbXVsKFJlLGZ0KXwwLHNlPXNlK01hdGguaW11bChSZSxNdCl8MCxhZT1hZStNYXRoLmltdWwoamUsbm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChqZSxXdCl8MCkrTWF0aC5pbXVsKGtlLG5uKXwwLHNlPXNlK01hdGguaW11''@;'; put 'put ''bChrZSxXdCl8MCxhZT1hZStNYXRoLmltdWwoeGUsZG4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh4ZSxtbil8MCkrTWF0aC5pbXVsKHllLGRuKXwwLHNlPXNlK01hdGguaW11bCh5ZSxtbil8MDt2YXIgcWk9KEErKGFlPWFlK01hdGguaW11bChVZSxmbil8MCl8MCkrKCg4MTkxJihuZT0obmU9''@;'; put 'put ''bmUrTWF0aC5pbXVsKFVlLHRuKXwwKStNYXRoLmltdWwoSmUsZm4pfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSx0bil8MCkrKG5lPj4+MTMpfDApKyhxaT4+PjI2KXwwLHFpJj02NzEwODg2MyxhZT1NYXRoLmltdWwoSXQsYW4pLG5lPShuZT1NYXRoLmltdWwoSXQsbG4pKStN''@;'; put 'put ''YXRoLmltdWwoUnQsYW4pfDAsc2U9TWF0aC5pbXVsKFJ0LGxuKSxhZT1hZStNYXRoLmltdWwoSWUsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChJZSxodCl8MCkrTWF0aC5pbXVsKGF0LGhuKXwwLHNlPXNlK01hdGguaW11bChhdCxodCl8MCxhZT1hZStNYXRoLmltdWwodXQsQnQpfDAsbmU9''@;'; put 'put ''KG5lPW5lK01hdGguaW11bCh1dCxBdCl8MCkrTWF0aC5pbXVsKFhlLEJ0KXwwLHNlPXNlK01hdGguaW11bChYZSxBdCl8MCxhZT1hZStNYXRoLmltdWwodnQsc3QpfDAsbmU9KG5lPW5lK01hdGguaW11bCh2dCxadCl8MCkrTWF0aC5pbXVsKFN0LHN0KXwwLHNlPXNlK01hdGguaW11bChTdCxa''@;'; put 'put ''dCl8MCxhZT1hZStNYXRoLmltdWwocnQsWWUpfDAsbmU9KG5lPW5lK01hdGguaW11bChydCxUdCl8MCkrTWF0aC5pbXVsKFFlLFllKXwwLHNlPXNlK01hdGguaW11bChRZSxUdCl8MCxhZT1hZStNYXRoLmltdWwoQWUsZnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxNdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKERlLGZ0KXwwLHNlPXNlK01hdGguaW11bChEZSxNdCl8MCxhZT1hZStNYXRoLmltdWwoTGUsbm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChMZSxXdCl8MCkrTWF0aC5pbXVsKFJlLG5uKXwwLHNlPXNlK01hdGguaW11bChSZSxXdCl8MCxhZT1hZStNYXRoLmltdWwoamUsZG4pfDAsbmU9''@;'; put 'put ''KG5lPW5lK01hdGguaW11bChqZSxtbil8MCkrTWF0aC5pbXVsKGtlLGRuKXwwLHNlPXNlK01hdGguaW11bChrZSxtbil8MCxhZT1hZStNYXRoLmltdWwoeGUsZm4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh4ZSx0bil8MCkrTWF0aC5pbXVsKHllLGZuKXwwLHNlPXNlK01hdGguaW11bCh5ZSx0''@;'; put 'put ''bil8MDt2YXIgUGE9KEErKGFlPWFlK01hdGguaW11bChVZSxfaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVlLHZyKXwwKStNYXRoLmltdWwoSmUsX2kpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSx2cil8MCkrKG5lPj4+MTMpfDApKyhQYT4+PjI2KXww''@;'; put 'put ''LFBhJj02NzEwODg2MyxhZT1NYXRoLmltdWwoSXQsaG4pLG5lPShuZT1NYXRoLmltdWwoSXQsaHQpKStNYXRoLmltdWwoUnQsaG4pfDAsc2U9TWF0aC5pbXVsKFJ0LGh0KSxhZT1hZStNYXRoLmltdWwoSWUsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChJZSxBdCl8MCkrTWF0aC5pbXVsKGF0''@;'; put 'put ''LEJ0KXwwLHNlPXNlK01hdGguaW11bChhdCxBdCl8MCxhZT1hZStNYXRoLmltdWwodXQsc3QpfDAsbmU9KG5lPW5lK01hdGguaW11bCh1dCxadCl8MCkrTWF0aC5pbXVsKFhlLHN0KXwwLHNlPXNlK01hdGguaW11bChYZSxadCl8MCxhZT1hZStNYXRoLmltdWwodnQsWWUpfDAsbmU9KG5lPW5l''@;'; put 'put ''K01hdGguaW11bCh2dCxUdCl8MCkrTWF0aC5pbXVsKFN0LFllKXwwLHNlPXNlK01hdGguaW11bChTdCxUdCl8MCxhZT1hZStNYXRoLmltdWwocnQsZnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChydCxNdCl8MCkrTWF0aC5pbXVsKFFlLGZ0KXwwLHNlPXNlK01hdGguaW11bChRZSxNdCl8MCxh''@;'; put 'put ''ZT1hZStNYXRoLmltdWwoQWUsbm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxXdCl8MCkrTWF0aC5pbXVsKERlLG5uKXwwLHNlPXNlK01hdGguaW11bChEZSxXdCl8MCxhZT1hZStNYXRoLmltdWwoTGUsZG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChMZSxtbil8MCkrTWF0aC5pbXVsKFJl''@;'; put 'put ''LGRuKXwwLHNlPXNlK01hdGguaW11bChSZSxtbil8MCxhZT1hZStNYXRoLmltdWwoamUsZm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChqZSx0bil8MCkrTWF0aC5pbXVsKGtlLGZuKXwwLHNlPXNlK01hdGguaW11bChrZSx0bil8MDt2YXIgdXI9KEErKGFlPWFlK01hdGguaW11bCh4ZSxfaSl8''@;'; put 'put ''MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKHhlLHZyKXwwKStNYXRoLmltdWwoeWUsX2kpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bCh5ZSx2cil8MCkrKG5lPj4+MTMpfDApKyh1cj4+PjI2KXwwLHVyJj02NzEwODg2MyxhZT1NYXRoLmltdWwoSXQsQnQpLG5lPShu''@;'; put 'put ''ZT1NYXRoLmltdWwoSXQsQXQpKStNYXRoLmltdWwoUnQsQnQpfDAsc2U9TWF0aC5pbXVsKFJ0LEF0KSxhZT1hZStNYXRoLmltdWwoSWUsc3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChJZSxadCl8MCkrTWF0aC5pbXVsKGF0LHN0KXwwLHNlPXNlK01hdGguaW11bChhdCxadCl8MCxhZT1hZStN''@;'; put 'put ''YXRoLmltdWwodXQsWWUpfDAsbmU9KG5lPW5lK01hdGguaW11bCh1dCxUdCl8MCkrTWF0aC5pbXVsKFhlLFllKXwwLHNlPXNlK01hdGguaW11bChYZSxUdCl8MCxhZT1hZStNYXRoLmltdWwodnQsZnQpfDAsbmU9KG5lPW5lK01hdGguaW11bCh2dCxNdCl8MCkrTWF0aC5pbXVsKFN0LGZ0KXww''@;'; put 'put ''LHNlPXNlK01hdGguaW11bChTdCxNdCl8MCxhZT1hZStNYXRoLmltdWwocnQsbm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChydCxXdCl8MCkrTWF0aC5pbXVsKFFlLG5uKXwwLHNlPXNlK01hdGguaW11bChRZSxXdCl8MCxhZT1hZStNYXRoLmltdWwoQWUsZG4pfDAsbmU9KG5lPW5lK01hdGgu''@;'; put 'put ''aW11bChBZSxtbil8MCkrTWF0aC5pbXVsKERlLGRuKXwwLHNlPXNlK01hdGguaW11bChEZSxtbil8MCxhZT1hZStNYXRoLmltdWwoTGUsZm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChMZSx0bil8MCkrTWF0aC5pbXVsKFJlLGZuKXwwLHNlPXNlK01hdGguaW11bChSZSx0bil8MDt2YXIgYmE9''@;'; put 'put ''KEErKGFlPWFlK01hdGguaW11bChqZSxfaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKGplLHZyKXwwKStNYXRoLmltdWwoa2UsX2kpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChrZSx2cil8MCkrKG5lPj4+MTMpfDApKyhiYT4+PjI2KXwwLGJhJj02NzEwODg2''@;'; put 'put ''MyxhZT1NYXRoLmltdWwoSXQsc3QpLG5lPShuZT1NYXRoLmltdWwoSXQsWnQpKStNYXRoLmltdWwoUnQsc3QpfDAsc2U9TWF0aC5pbXVsKFJ0LFp0KSxhZT1hZStNYXRoLmltdWwoSWUsWWUpfDAsbmU9KG5lPW5lK01hdGguaW11bChJZSxUdCl8MCkrTWF0aC5pbXVsKGF0LFllKXwwLHNlPXNl''@;'; put 'put ''K01hdGguaW11bChhdCxUdCl8MCxhZT1hZStNYXRoLmltdWwodXQsZnQpfDAsbmU9KG5lPW5lK01hdGguaW11bCh1dCxNdCl8MCkrTWF0aC5pbXVsKFhlLGZ0KXwwLHNlPXNlK01hdGguaW11bChYZSxNdCl8MCxhZT1hZStNYXRoLmltdWwodnQsbm4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh2''@;'; put 'put ''dCxXdCl8MCkrTWF0aC5pbXVsKFN0LG5uKXwwLHNlPXNlK01hdGguaW11bChTdCxXdCl8MCxhZT1hZStNYXRoLmltdWwocnQsZG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChydCxtbil8MCkrTWF0aC5pbXVsKFFlLGRuKXwwLHNlPXNlK01hdGguaW11bChRZSxtbil8MCxhZT1hZStNYXRoLmlt''@;'; put 'put ''dWwoQWUsZm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSx0bil8MCkrTWF0aC5pbXVsKERlLGZuKXwwLHNlPXNlK01hdGguaW11bChEZSx0bil8MDt2YXIgTWk9KEErKGFlPWFlK01hdGguaW11bChMZSxfaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKExlLHZyKXwwKStN''@;'; put 'put ''YXRoLmltdWwoUmUsX2kpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChSZSx2cil8MCkrKG5lPj4+MTMpfDApKyhNaT4+PjI2KXwwLE1pJj02NzEwODg2MyxhZT1NYXRoLmltdWwoSXQsWWUpLG5lPShuZT1NYXRoLmltdWwoSXQsVHQpKStNYXRoLmltdWwoUnQsWWUpfDAsc2U9TWF0''@;'; put 'put ''aC5pbXVsKFJ0LFR0KSxhZT1hZStNYXRoLmltdWwoSWUsZnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChJZSxNdCl8MCkrTWF0aC5pbXVsKGF0LGZ0KXwwLHNlPXNlK01hdGguaW11bChhdCxNdCl8MCxhZT1hZStNYXRoLmltdWwodXQsbm4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh1dCxXdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKFhlLG5uKXwwLHNlPXNlK01hdGguaW11bChYZSxXdCl8MCxhZT1hZStNYXRoLmltdWwodnQsZG4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh2dCxtbil8MCkrTWF0aC5pbXVsKFN0LGRuKXwwLHNlPXNlK01hdGguaW11bChTdCxtbil8MCxhZT1hZStNYXRoLmltdWwocnQs''@;'; put 'put ''Zm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChydCx0bil8MCkrTWF0aC5pbXVsKFFlLGZuKXwwLHNlPXNlK01hdGguaW11bChRZSx0bil8MDt2YXIgd2E9KEErKGFlPWFlK01hdGguaW11bChBZSxfaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKEFlLHZyKXwwKStNYXRoLmlt''@;'; put 'put ''dWwoRGUsX2kpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChEZSx2cil8MCkrKG5lPj4+MTMpfDApKyh3YT4+PjI2KXwwLHdhJj02NzEwODg2MyxhZT1NYXRoLmltdWwoSXQsZnQpLG5lPShuZT1NYXRoLmltdWwoSXQsTXQpKStNYXRoLmltdWwoUnQsZnQpfDAsc2U9TWF0aC5pbXVs''@;'; put 'put ''KFJ0LE10KSxhZT1hZStNYXRoLmltdWwoSWUsbm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChJZSxXdCl8MCkrTWF0aC5pbXVsKGF0LG5uKXwwLHNlPXNlK01hdGguaW11bChhdCxXdCl8MCxhZT1hZStNYXRoLmltdWwodXQsZG4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh1dCxtbil8MCkrTWF0''@;'; put 'put ''aC5pbXVsKFhlLGRuKXwwLHNlPXNlK01hdGguaW11bChYZSxtbil8MCxhZT1hZStNYXRoLmltdWwodnQsZm4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh2dCx0bil8MCkrTWF0aC5pbXVsKFN0LGZuKXwwLHNlPXNlK01hdGguaW11bChTdCx0bil8MDt2YXIgZWE9KEErKGFlPWFlK01hdGguaW11''@;'; put 'put ''bChydCxfaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKHJ0LHZyKXwwKStNYXRoLmltdWwoUWUsX2kpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChRZSx2cil8MCkrKG5lPj4+MTMpfDApKyhlYT4+PjI2KXwwLGVhJj02NzEwODg2MyxhZT1NYXRoLmltdWwoSXQs''@;'; put 'put ''bm4pLG5lPShuZT1NYXRoLmltdWwoSXQsV3QpKStNYXRoLmltdWwoUnQsbm4pfDAsc2U9TWF0aC5pbXVsKFJ0LFd0KSxhZT1hZStNYXRoLmltdWwoSWUsZG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChJZSxtbil8MCkrTWF0aC5pbXVsKGF0LGRuKXwwLHNlPXNlK01hdGguaW11bChhdCxtbil8''@;'; put 'put ''MCxhZT1hZStNYXRoLmltdWwodXQsZm4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh1dCx0bil8MCkrTWF0aC5pbXVsKFhlLGZuKXwwLHNlPXNlK01hdGguaW11bChYZSx0bil8MDt2YXIgRnI9KEErKGFlPWFlK01hdGguaW11bCh2dCxfaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5p''@;'; put 'put ''bXVsKHZ0LHZyKXwwKStNYXRoLmltdWwoU3QsX2kpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChTdCx2cil8MCkrKG5lPj4+MTMpfDApKyhGcj4+PjI2KXwwLEZyJj02NzEwODg2MyxhZT1NYXRoLmltdWwoSXQsZG4pLG5lPShuZT1NYXRoLmltdWwoSXQsbW4pKStNYXRoLmltdWwo''@;'; put 'put ''UnQsZG4pfDAsc2U9TWF0aC5pbXVsKFJ0LG1uKSxhZT1hZStNYXRoLmltdWwoSWUsZm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChJZSx0bil8MCkrTWF0aC5pbXVsKGF0LGZuKXwwLHNlPXNlK01hdGguaW11bChhdCx0bil8MDt2YXIgY289KEErKGFlPWFlK01hdGguaW11bCh1dCxfaSl8MCl8''@;'; put 'put ''MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKHV0LHZyKXwwKStNYXRoLmltdWwoWGUsX2kpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChYZSx2cil8MCkrKG5lPj4+MTMpfDApKyhjbz4+PjI2KXwwLGNvJj02NzEwODg2MyxhZT1NYXRoLmltdWwoSXQsZm4pLG5lPShuZT1N''@;'; put 'put ''YXRoLmltdWwoSXQsdG4pKStNYXRoLmltdWwoUnQsZm4pfDAsc2U9TWF0aC5pbXVsKFJ0LHRuKTt2YXIgWWE9KEErKGFlPWFlK01hdGguaW11bChJZSxfaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKEllLHZyKXwwKStNYXRoLmltdWwoYXQsX2kpfDApKTw8MTMpfDA7QT0o''@;'; put 'put ''KHNlPXNlK01hdGguaW11bChhdCx2cil8MCkrKG5lPj4+MTMpfDApKyhZYT4+PjI2KXwwLFlhJj02NzEwODg2Mzt2YXIgJGM9KEErKGFlPU1hdGguaW11bChJdCxfaSkpfDApKygoODE5MSYobmU9KG5lPU1hdGguaW11bChJdCx2cikpK01hdGguaW11bChSdCxfaSl8MCkpPDwxMyl8MDtyZXR1''@;'; put 'put ''cm4gQT0oKHNlPU1hdGguaW11bChSdCx2cikpKyhuZT4+PjEzKXwwKSsoJGM+Pj4yNil8MCwkYyY9NjcxMDg4NjMsbVswXT1YaSxtWzFdPVFpLG1bMl09VmksbVszXT1laSxtWzRdPXVhLG1bNV09UmksbVs2XT1EYSxtWzddPWhpLG1bOF09cWksbVs5XT1QYSxtWzEwXT11cixtWzExXT1iYSxt''@;'; put 'put ''WzEyXT1NaSxtWzEzXT13YSxtWzE0XT1lYSxtWzE1XT1GcixtWzE2XT1jbyxtWzE3XT1ZYSxtWzE4XT0kYywwIT09QSYmKG1bMTldPUEsSC5sZW5ndGgrKyksSH07ZnVuY3Rpb24gcmUoeCxDLFQpe1QubmVnYXRpdmU9Qy5uZWdhdGl2ZV54Lm5lZ2F0aXZlLFQubGVuZ3RoPXgubGVuZ3RoK0Mu''@;'; put 'put ''bGVuZ3RoO2Zvcih2YXIgSD0wLGo9MCxFPTA7RTxULmxlbmd0aC0xO0UrKyl7dmFyIG09ajtqPTA7Zm9yKHZhciBBPTY3MTA4ODYzJkgsYWU9TWF0aC5taW4oRSxDLmxlbmd0aC0xKSxuZT1NYXRoLm1heCgwLEUteC5sZW5ndGgrMSk7bmU8PWFlO25lKyspe3ZhciBKZT0oMHx4LndvcmRzW0Ut''@;'; put 'put ''bmVdKSooMHxDLndvcmRzW25lXSksaXQ9NjcxMDg4NjMmSmU7QT02NzEwODg2MyYoaXQ9aXQrQXwwKSxqKz0obT0obT1tKyhKZS82NzEwODg2NHwwKXwwKSsoaXQ+Pj4yNil8MCk+Pj4yNixtJj02NzEwODg2M31ULndvcmRzW0VdPUEsSD1tLG09an1yZXR1cm4gMCE9PUg/VC53b3Jkc1tFXT1I''@;'; put 'put ''OlQubGVuZ3RoLS0sVC5fc3RyaXAoKX1mdW5jdGlvbiBpZSh4LEMsVCl7cmV0dXJuIHJlKHgsQyxUKX1mdW5jdGlvbiB1ZSh4LEMpe3RoaXMueD14LHRoaXMueT1DfU1hdGguaW11bHx8KEo9ZWUpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKEMsVCl7dmFyIGo9dGhpcy5sZW5ndGgrQy5s''@;'; put 'put ''ZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09Qy5sZW5ndGg/Sih0aGlzLEMsVCk6ajw2Mz9lZSh0aGlzLEMsVCk6ajwxMDI0P3JlKHRoaXMsQyxUKTppZSh0aGlzLEMsVCl9LHVlLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKEMpe2Zvcih2YXIgVD1uZXcgQXJyYXkoQyks''@;'; put 'put ''SD13LnByb3RvdHlwZS5fY291bnRCaXRzKEMpLTEsaj0wO2o8QztqKyspVFtqXT10aGlzLnJldkJpbihqLEgsQyk7cmV0dXJuIFR9LHVlLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oQyxULEgpe2lmKDA9PT1DfHxDPT09SC0xKXJldHVybiBDO2Zvcih2YXIgaj0wLEU9MDtFPFQ7RSsrKWp8''@;'; put 'put ''PSgxJkMpPDxULUUtMSxDPj49MTtyZXR1cm4gan0sdWUucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oQyxULEgsaixFLG0pe2Zvcih2YXIgQT0wO0E8bTtBKyspaltBXT1UW0NbQV1dLEVbQV09SFtDW0FdXX0sdWUucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihDLFQsSCxqLEUsbSl7''@;'; put 'put ''dGhpcy5wZXJtdXRlKG0sQyxULEgsaixFKTtmb3IodmFyIEE9MTtBPEU7QTw8PTEpZm9yKHZhciBhZT1BPDwxLG5lPU1hdGguY29zKDIqTWF0aC5QSS9hZSksc2U9TWF0aC5zaW4oMipNYXRoLlBJL2FlKSxDZT0wO0NlPEU7Q2UrPWFlKWZvcih2YXIgVWU9bmUsSmU9c2UsaXQ9MDtpdDxBO2l0''@;'; put 'put ''Kyspe3ZhciB4ZT1IW0NlK2l0XSx5ZT1qW0NlK2l0XSxLZT1IW0NlK2l0K0FdLGplPWpbQ2UraXQrQV0sa2U9VWUqS2UtSmUqamU7amU9VWUqamUrSmUqS2UsSFtDZStpdF09eGUrKEtlPWtlKSxqW0NlK2l0XT15ZStqZSxIW0NlK2l0K0FdPXhlLUtlLGpbQ2UraXQrQV09eWUtamUsaXQhPT1h''@;'; put 'put ''ZSYmKGtlPW5lKlVlLXNlKkplLEplPW5lKkplK3NlKlVlLFVlPWtlKX19LHVlLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihDLFQpe3ZhciBIPTF8TWF0aC5tYXgoVCxDKSxqPTEmSCxFPTA7Zm9yKEg9SC8yfDA7SDtIPj4+PTEpRSsrO3JldHVybiAxPDxFKzEran0sdWUucHJvdG90''@;'; put 'put ''eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihDLFQsSCl7aWYoIShIPD0xKSlmb3IodmFyIGo9MDtqPEgvMjtqKyspe3ZhciBFPUNbal07Q1tqXT1DW0gtai0xXSxDW0gtai0xXT1FLEU9VFtqXSxUW2pdPS1UW0gtai0xXSxUW0gtai0xXT0tRX19LHVlLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVu''@;'; put 'put ''Y3Rpb24oQyxUKXtmb3IodmFyIEg9MCxqPTA7ajxULzI7aisrKXt2YXIgRT04MTkyKk1hdGgucm91bmQoQ1syKmorMV0vVCkrTWF0aC5yb3VuZChDWzIqal0vVCkrSDtDW2pdPTY3MTA4ODYzJkUsSD1FPDY3MTA4ODY0PzA6RS82NzEwODg2NHwwfXJldHVybiBDfSx1ZS5wcm90b3R5cGUuY29u''@;'; put 'put ''dmVydDEzYj1mdW5jdGlvbihDLFQsSCxqKXtmb3IodmFyIEU9MCxtPTA7bTxUO20rKylIWzIqbV09ODE5MSYoRSs9MHxDW21dKSxIWzIqbSsxXT04MTkxJihFPj4+PTEzKSxFPj4+PTEzO2ZvcihtPTIqVDttPGo7KyttKUhbbV09MDtwKDA9PT1FKSxwKCEoLTgxOTImRSkpfSx1ZS5wcm90b3R5''@;'; put 'put ''cGUuc3R1Yj1mdW5jdGlvbihDKXtmb3IodmFyIFQ9bmV3IEFycmF5KEMpLEg9MDtIPEM7SCsrKVRbSF09MDtyZXR1cm4gVH0sdWUucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oQyxULEgpe3ZhciBqPTIqdGhpcy5ndWVzc0xlbjEzYihDLmxlbmd0aCxULmxlbmd0aCksRT10aGlzLm1ha2VSQlQo''@;'; put 'put ''aiksbT10aGlzLnN0dWIoaiksQT1uZXcgQXJyYXkoaiksYWU9bmV3IEFycmF5KGopLG5lPW5ldyBBcnJheShqKSxzZT1uZXcgQXJyYXkoaiksQ2U9bmV3IEFycmF5KGopLFVlPW5ldyBBcnJheShqKSxKZT1ILndvcmRzO0plLmxlbmd0aD1qLHRoaXMuY29udmVydDEzYihDLndvcmRzLEMubGVu''@;'; put 'put ''Z3RoLEEsaiksdGhpcy5jb252ZXJ0MTNiKFQud29yZHMsVC5sZW5ndGgsc2UsaiksdGhpcy50cmFuc2Zvcm0oQSxtLGFlLG5lLGosRSksdGhpcy50cmFuc2Zvcm0oc2UsbSxDZSxVZSxqLEUpO2Zvcih2YXIgaXQ9MDtpdDxqO2l0Kyspe3ZhciB4ZT1hZVtpdF0qQ2VbaXRdLW5lW2l0XSpVZVtp''@;'; put 'put ''dF07bmVbaXRdPWFlW2l0XSpVZVtpdF0rbmVbaXRdKkNlW2l0XSxhZVtpdF09eGV9cmV0dXJuIHRoaXMuY29uanVnYXRlKGFlLG5lLGopLHRoaXMudHJhbnNmb3JtKGFlLG5lLEplLG0saixFKSx0aGlzLmNvbmp1Z2F0ZShKZSxtLGopLHRoaXMubm9ybWFsaXplMTNiKEplLGopLEgubmVnYXRp''@;'; put 'put ''dmU9Qy5uZWdhdGl2ZV5ULm5lZ2F0aXZlLEgubGVuZ3RoPUMubGVuZ3RoK1QubGVuZ3RoLEguX3N0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihDKXt2YXIgVD1uZXcgdyhudWxsKTtyZXR1cm4gVC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrQy5sZW5ndGgpLHRoaXMubXVs''@;'; put 'put ''VG8oQyxUKX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihDKXt2YXIgVD1uZXcgdyhudWxsKTtyZXR1cm4gVC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrQy5sZW5ndGgpLGllKHRoaXMsQyxUKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgp''@;'; put 'put ''Lm11bFRvKEMsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKEMpe3ZhciBUPUM8MDtUJiYoQz0tQykscCgibnVtYmVyIj09dHlwZW9mIEMpLHAoQzw2NzEwODg2NCk7Zm9yKHZhciBIPTAsaj0wO2o8dGhpcy5sZW5ndGg7aisrKXt2YXIgRT0oMHx0aGlzLndvcmRzW2pdKSpDLG09''@;'; put 'put ''KDY3MTA4ODYzJkUpKyg2NzEwODg2MyZIKTtIPj49MjYsSCs9RS82NzEwODg2NHwwLEgrPW0+Pj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJm19cmV0dXJuIDAhPT1IJiYodGhpcy53b3Jkc1tqXT1ILHRoaXMubGVuZ3RoKyspLFQ/dGhpcy5pbmVnKCk6dGhpc30sdy5wcm90b3R5cGUubXVs''@;'; put 'put ''bj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKEMpfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBl''@;'; put 'put ''LnBvdz1mdW5jdGlvbihDKXt2YXIgVD1mdW5jdGlvbiBxKHgpe2Zvcih2YXIgQz1uZXcgQXJyYXkoeC5iaXRMZW5ndGgoKSksVD0wO1Q8Qy5sZW5ndGg7VCsrKUNbVF09eC53b3Jkc1tULzI2fDBdPj4+VCUyNiYxO3JldHVybiBDfShDKTtpZigwPT09VC5sZW5ndGgpcmV0dXJuIG5ldyB3KDEp''@;'; put 'put ''O2Zvcih2YXIgSD10aGlzLGo9MDtqPFQubGVuZ3RoJiYwPT09VFtqXTtqKyssSD1ILnNxcigpKTtpZigrK2o8VC5sZW5ndGgpZm9yKHZhciBFPUguc3FyKCk7ajxULmxlbmd0aDtqKyssRT1FLnNxcigpKTAhPT1UW2pdJiYoSD1ILm11bChFKSk7cmV0dXJuIEh9LHcucHJvdG90eXBlLml1c2hs''@;'; put 'put ''bj1mdW5jdGlvbihDKXtwKCJudW1iZXIiPT10eXBlb2YgQyYmQz49MCk7dmFyIEUsVD1DJTI2LEg9KEMtVCkvMjYsaj02NzEwODg2Mz4+PjI2LVQ8PDI2LVQ7aWYoMCE9PVQpe3ZhciBtPTA7Zm9yKEU9MDtFPHRoaXMubGVuZ3RoO0UrKyl7dmFyIEE9dGhpcy53b3Jkc1tFXSZqO3RoaXMud29y''@;'; put 'put ''ZHNbRV09KDB8dGhpcy53b3Jkc1tFXSktQTw8VHxtLG09QT4+PjI2LVR9bSYmKHRoaXMud29yZHNbRV09bSx0aGlzLmxlbmd0aCsrKX1pZigwIT09SCl7Zm9yKEU9dGhpcy5sZW5ndGgtMTtFPj0wO0UtLSl0aGlzLndvcmRzW0UrSF09dGhpcy53b3Jkc1tFXTtmb3IoRT0wO0U8SDtFKyspdGhp''@;'; put 'put ''cy53b3Jkc1tFXT0wO3RoaXMubGVuZ3RoKz1IfXJldHVybiB0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihDKXtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oQyl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihDLFQsSCl7dmFyIGo7''@;'; put 'put ''cCgibnVtYmVyIj09dHlwZW9mIEMmJkM+PTApLGo9VD8oVC1UJTI2KS8yNjowO3ZhciBFPUMlMjYsbT1NYXRoLm1pbigoQy1FKS8yNix0aGlzLmxlbmd0aCksQT02NzEwODg2M142NzEwODg2Mz4+PkU8PEUsYWU9SDtpZihqLT1tLGo9TWF0aC5tYXgoMCxqKSxhZSl7Zm9yKHZhciBuZT0wO25l''@;'; put 'put ''PG07bmUrKylhZS53b3Jkc1tuZV09dGhpcy53b3Jkc1tuZV07YWUubGVuZ3RoPW19aWYoMCE9PW0paWYodGhpcy5sZW5ndGg+bSlmb3IodGhpcy5sZW5ndGgtPW0sbmU9MDtuZTx0aGlzLmxlbmd0aDtuZSsrKXRoaXMud29yZHNbbmVdPXRoaXMud29yZHNbbmUrbV07ZWxzZSB0aGlzLndvcmRz''@;'; put 'put ''WzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgc2U9MDtmb3IobmU9dGhpcy5sZW5ndGgtMTtuZT49MCYmKDAhPT1zZXx8bmU+PWopO25lLS0pe3ZhciBDZT0wfHRoaXMud29yZHNbbmVdO3RoaXMud29yZHNbbmVdPXNlPDwyNi1FfENlPj4+RSxzZT1DZSZBfXJldHVybiBhZSYmMCE9PXNlJiYoYWUu''@;'; put 'put ''d29yZHNbYWUubGVuZ3RoKytdPXNlKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oQyxULEgpe3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihDLFQs''@;'; put 'put ''SCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihDKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oQyl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMu''@;'; put 'put ''Y2xvbmUoKS5pc2hybihDKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oQyl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKEMpe3AoIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKTt2YXIgVD1DJTI2LEg9KEMtVCkvMjY7cmV0dXJu''@;'; put 'put ''ISh0aGlzLmxlbmd0aDw9SHx8ISh0aGlzLndvcmRzW0hdJjE8PFQpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKEMpe3AoIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKTt2YXIgVD1DJTI2LEg9KEMtVCkvMjY7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBv''@;'; put 'put ''bmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1IP3RoaXM6KDAhPT1UJiZIKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oSCx0aGlzLmxlbmd0aCksMCE9PVQmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQpLHRoaXMuX3N0''@;'; put 'put ''cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihDKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oQyl7cmV0dXJuIHAoIm51bWJlciI9PXR5cGVvZiBDKSxwKEM8NjcxMDg4NjQpLEM8MD90aGlzLmlzdWJuKC1DKTowIT09''@;'; put 'put ''dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPD1DPyh0aGlzLndvcmRzWzBdPUMtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihDKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhp''@;'; put 'put ''cy5faWFkZG4oQyl9LHcucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihDKXt0aGlzLndvcmRzWzBdKz1DO2Zvcih2YXIgVD0wO1Q8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbVF0+PTY3MTA4ODY0O1QrKyl0aGlzLndvcmRzW1RdLT02NzEwODg2NCxUPT09dGhpcy5sZW5ndGgtMT90aGlzLndv''@;'; put 'put ''cmRzW1QrMV09MTp0aGlzLndvcmRzW1QrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsVCsxKSx0aGlzfSx3LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihDKXtpZihwKCJudW1iZXIiPT10eXBlb2YgQykscChDPDY3MTA4ODY0KSxDPDApcmV0dXJuIHRoaXMu''@;'; put 'put ''aWFkZG4oLUMpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihDKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1DLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29y''@;'; put 'put ''ZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBUPTA7VDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tUXTwwO1QrKyl0aGlzLndvcmRzW1RdKz02NzEwODg2NCx0aGlzLndvcmRzW1QrMV0tPTE7cmV0dXJuIHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24o''@;'; put 'put ''Qyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihDKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKEMpfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKEMsVCxIKXt2YXIgRTt0aGlzLl9leHBhbmQoQy5sZW5ndGgrSCk7dmFyIG0sQT0wO2ZvcihFPTA7RTxDLmxlbmd0aDtFKyspe209KDB8dGhpcy53b3Jkc1tFK0hd''@;'; put 'put ''KStBO3ZhciBhZT0oMHxDLndvcmRzW0VdKSpUO0E9KChtLT02NzEwODg2MyZhZSk+PjI2KS0oYWUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tFK0hdPTY3MTA4ODYzJm19Zm9yKDtFPHRoaXMubGVuZ3RoLUg7RSsrKUE9KG09KDB8dGhpcy53b3Jkc1tFK0hdKStBKT4+MjYsdGhpcy53b3Jkc1tF''@;'; put 'put ''K0hdPTY3MTA4ODYzJm07aWYoMD09PUEpcmV0dXJuIHRoaXMuX3N0cmlwKCk7Zm9yKHAoLTE9PT1BKSxBPTAsRT0wO0U8dGhpcy5sZW5ndGg7RSsrKUE9KG09LSgwfHRoaXMud29yZHNbRV0pK0EpPj4yNix0aGlzLndvcmRzW0VdPTY3MTA4ODYzJm07cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0''@;'; put 'put ''aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihDLFQpe3ZhciBILGo9dGhpcy5jbG9uZSgpLEU9QyxtPTB8RS53b3Jkc1tFLmxlbmd0aC0xXTswIT0oSD0yNi10aGlzLl9jb3VudEJpdHMobSkpJiYoRT1FLnVzaGxuKEgpLGouaXVzaGxuKEgpLG09MHxFLndvcmRz''@;'; put 'put ''W0UubGVuZ3RoLTFdKTt2YXIgbmUsYWU9ai5sZW5ndGgtRS5sZW5ndGg7aWYoIm1vZCIhPT1UKXsobmU9bmV3IHcobnVsbCkpLmxlbmd0aD1hZSsxLG5lLndvcmRzPW5ldyBBcnJheShuZS5sZW5ndGgpO2Zvcih2YXIgc2U9MDtzZTxuZS5sZW5ndGg7c2UrKyluZS53b3Jkc1tzZV09MH12YXIg''@;'; put 'put ''Q2U9ai5jbG9uZSgpLl9pc2hsbnN1Ym11bChFLDEsYWUpOzA9PT1DZS5uZWdhdGl2ZSYmKGo9Q2UsbmUmJihuZS53b3Jkc1thZV09MSkpO2Zvcih2YXIgVWU9YWUtMTtVZT49MDtVZS0tKXt2YXIgSmU9NjcxMDg4NjQqKDB8ai53b3Jkc1tFLmxlbmd0aCtVZV0pKygwfGoud29yZHNbRS5sZW5n''@;'; put 'put ''dGgrVWUtMV0pO2ZvcihKZT1NYXRoLm1pbihKZS9tfDAsNjcxMDg4NjMpLGouX2lzaGxuc3VibXVsKEUsSmUsVWUpOzAhPT1qLm5lZ2F0aXZlOylKZS0tLGoubmVnYXRpdmU9MCxqLl9pc2hsbnN1Ym11bChFLDEsVWUpLGouaXNaZXJvKCl8fChqLm5lZ2F0aXZlXj0xKTtuZSYmKG5lLndvcmRz''@;'; put 'put ''W1VlXT1KZSl9cmV0dXJuIG5lJiZuZS5fc3RyaXAoKSxqLl9zdHJpcCgpLCJkaXYiIT09VCYmMCE9PUgmJmouaXVzaHJuKEgpLHtkaXY6bmV8fG51bGwsbW9kOmp9fSx3LnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oQyxULEgpe3JldHVybiBwKCFDLmlzWmVybygpKSx0aGlzLmlzWmVybygp''@;'; put 'put ''P3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PUMubmVnYXRpdmU/KG09dGhpcy5uZWcoKS5kaXZtb2QoQyxUKSwibW9kIiE9PVQmJihqPW0uZGl2Lm5lZygpKSwiZGl2IiE9PVQmJihFPW0ubW9kLm5lZygpLEgmJjAhPT1FLm5lZ2F0aXZlJiZFLmlh''@;'; put 'put ''ZGQoQykpLHtkaXY6aixtb2Q6RX0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Qy5uZWdhdGl2ZT8obT10aGlzLmRpdm1vZChDLm5lZygpLFQpLCJtb2QiIT09VCYmKGo9bS5kaXYubmVnKCkpLHtkaXY6aixtb2Q6bS5tb2R9KTp0aGlzLm5lZ2F0aXZlJkMubmVnYXRpdmU/KG09dGhpcy5uZWco''@;'; put 'put ''KS5kaXZtb2QoQy5uZWcoKSxUKSwiZGl2IiE9PVQmJihFPW0ubW9kLm5lZygpLEgmJjAhPT1FLm5lZ2F0aXZlJiZFLmlzdWIoQykpLHtkaXY6bS5kaXYsbW9kOkV9KTpDLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoQyk8MD97ZGl2Om5ldyB3KDApLG1vZDp0aGlzfToxPT09Qy5sZW5n''@;'; put 'put ''dGg/ImRpdiI9PT1UP3tkaXY6dGhpcy5kaXZuKEMud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PVQ/e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZHJuKEMud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oQy53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kcm4oQy53b3Jkc1swXSkp''@;'; put 'put ''fTp0aGlzLl93b3JkRGl2KEMsVCk7dmFyIGosRSxtfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuZGl2bW9kKEMsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmRpdm1vZChDLCJtb2QiLCExKS5tb2R9LHcucHJv''@;'; put 'put ''dG90eXBlLnVtb2Q9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuZGl2bW9kKEMsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oQyl7dmFyIFQ9dGhpcy5kaXZtb2QoQyk7aWYoVC5tb2QuaXNaZXJvKCkpcmV0dXJuIFQuZGl2O3ZhciBIPTAhPT1ULmRpdi5uZWdh''@;'; put 'put ''dGl2ZT9ULm1vZC5pc3ViKEMpOlQubW9kLGo9Qy51c2hybigxKSxFPUMuYW5kbG4oMSksbT1ILmNtcChqKTtyZXR1cm4gbTwwfHwxPT09RSYmMD09PW0/VC5kaXY6MCE9PVQuZGl2Lm5lZ2F0aXZlP1QuZGl2LmlzdWJuKDEpOlQuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2Rybj1mdW5j''@;'; put 'put ''dGlvbihDKXt2YXIgVD1DPDA7VCYmKEM9LUMpLHAoQzw9NjcxMDg4NjMpO2Zvcih2YXIgSD0oMTw8MjYpJUMsaj0wLEU9dGhpcy5sZW5ndGgtMTtFPj0wO0UtLSlqPShIKmorKDB8dGhpcy53b3Jkc1tFXSkpJUM7cmV0dXJuIFQ/LWo6an0sdy5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihDKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5tb2RybihDKX0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oQyl7dmFyIFQ9QzwwO1QmJihDPS1DKSxwKEM8PTY3MTA4ODYzKTtmb3IodmFyIEg9MCxqPXRoaXMubGVuZ3RoLTE7aj49MDtqLS0pe3ZhciBFPSgwfHRoaXMud29yZHNbal0pKzY3MTA4ODY0Kkg7dGhpcy53''@;'; put 'put ''b3Jkc1tqXT1FL0N8MCxIPUUlQ31yZXR1cm4gdGhpcy5fc3RyaXAoKSxUP3RoaXMuaW5lZygpOnRoaXN9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihDKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihDKXtwKDA9PT1DLm5lZ2F0aXZl''@;'; put 'put ''KSxwKCFDLmlzWmVybygpKTt2YXIgVD10aGlzLEg9Qy5jbG9uZSgpO1Q9MCE9PVQubmVnYXRpdmU/VC51bW9kKEMpOlQuY2xvbmUoKTtmb3IodmFyIGo9bmV3IHcoMSksRT1uZXcgdygwKSxtPW5ldyB3KDApLEE9bmV3IHcoMSksYWU9MDtULmlzRXZlbigpJiZILmlzRXZlbigpOylULml1c2hy''@;'; put 'put ''bigxKSxILml1c2hybigxKSwrK2FlO2Zvcih2YXIgbmU9SC5jbG9uZSgpLHNlPVQuY2xvbmUoKTshVC5pc1plcm8oKTspe2Zvcih2YXIgQ2U9MCxVZT0xOyEoVC53b3Jkc1swXSZVZSkmJkNlPDI2OysrQ2UsVWU8PD0xKTtpZihDZT4wKWZvcihULml1c2hybihDZSk7Q2UtLSA+MDspKGouaXNP''@;'; put 'put ''ZGQoKXx8RS5pc09kZCgpKSYmKGouaWFkZChuZSksRS5pc3ViKHNlKSksai5pdXNocm4oMSksRS5pdXNocm4oMSk7Zm9yKHZhciBKZT0wLGl0PTE7IShILndvcmRzWzBdJml0KSYmSmU8MjY7KytKZSxpdDw8PTEpO2lmKEplPjApZm9yKEguaXVzaHJuKEplKTtKZS0tID4wOykobS5pc09kZCgp''@;'; put 'put ''fHxBLmlzT2RkKCkpJiYobS5pYWRkKG5lKSxBLmlzdWIoc2UpKSxtLml1c2hybigxKSxBLml1c2hybigxKTtULmNtcChIKT49MD8oVC5pc3ViKEgpLGouaXN1YihtKSxFLmlzdWIoQSkpOihILmlzdWIoVCksbS5pc3ViKGopLEEuaXN1YihFKSl9cmV0dXJue2E6bSxiOkEsZ2NkOkguaXVzaGxu''@;'; put 'put ''KGFlKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihDKXtwKDA9PT1DLm5lZ2F0aXZlKSxwKCFDLmlzWmVybygpKTt2YXIgQ2UsVD10aGlzLEg9Qy5jbG9uZSgpO1Q9MCE9PVQubmVnYXRpdmU/VC51bW9kKEMpOlQuY2xvbmUoKTtmb3IodmFyIGo9bmV3IHcoMSksRT1uZXcgdygwKSxt''@;'; put 'put ''PUguY2xvbmUoKTtULmNtcG4oMSk+MCYmSC5jbXBuKDEpPjA7KXtmb3IodmFyIEE9MCxhZT0xOyEoVC53b3Jkc1swXSZhZSkmJkE8MjY7KytBLGFlPDw9MSk7aWYoQT4wKWZvcihULml1c2hybihBKTtBLS0gPjA7KWouaXNPZGQoKSYmai5pYWRkKG0pLGouaXVzaHJuKDEpO2Zvcih2YXIgbmU9''@;'; put 'put ''MCxzZT0xOyEoSC53b3Jkc1swXSZzZSkmJm5lPDI2OysrbmUsc2U8PD0xKTtpZihuZT4wKWZvcihILml1c2hybihuZSk7bmUtLSA+MDspRS5pc09kZCgpJiZFLmlhZGQobSksRS5pdXNocm4oMSk7VC5jbXAoSCk+PTA/KFQuaXN1YihIKSxqLmlzdWIoRSkpOihILmlzdWIoVCksRS5pc3ViKGop''@;'; put 'put ''KX1yZXR1cm4oQ2U9MD09PVQuY21wbigxKT9qOkUpLmNtcG4oMCk8MCYmQ2UuaWFkZChDKSxDZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKEMpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIEMuYWJzKCk7aWYoQy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgVD10aGlzLmNsb25l''@;'; put 'put ''KCksSD1DLmNsb25lKCk7VC5uZWdhdGl2ZT0wLEgubmVnYXRpdmU9MDtmb3IodmFyIGo9MDtULmlzRXZlbigpJiZILmlzRXZlbigpO2orKylULml1c2hybigxKSxILml1c2hybigxKTtmb3IoOzspe2Zvcig7VC5pc0V2ZW4oKTspVC5pdXNocm4oMSk7Zm9yKDtILmlzRXZlbigpOylILml1c2hy''@;'; put 'put ''bigxKTt2YXIgRT1ULmNtcChIKTtpZihFPDApe3ZhciBtPVQ7VD1ILEg9bX1lbHNlIGlmKDA9PT1FfHwwPT09SC5jbXBuKDEpKWJyZWFrO1QuaXN1YihIKX1yZXR1cm4gSC5pdXNobG4oail9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuZWdjZChDKS5hLnVtb2Qo''@;'; put 'put ''Qyl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy53b3Jkc1sw''@;'; put 'put ''XSZDfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihDKXtwKCJudW1iZXIiPT10eXBlb2YgQyk7dmFyIFQ9QyUyNixIPShDLVQpLzI2LGo9MTw8VDtpZih0aGlzLmxlbmd0aDw9SClyZXR1cm4gdGhpcy5fZXhwYW5kKEgrMSksdGhpcy53b3Jkc1tIXXw9aix0aGlzO2Zvcih2YXIgRT1qLG09''@;'; put 'put ''SDswIT09RSYmbTx0aGlzLmxlbmd0aDttKyspe3ZhciBBPTB8dGhpcy53b3Jkc1ttXTtFPShBKz1FKT4+PjI2LHRoaXMud29yZHNbbV09QSY9NjcxMDg4NjN9cmV0dXJuIDAhPT1FJiYodGhpcy53b3Jkc1ttXT1FLHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKEMpe3ZhciBILFQ9QzwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhVClyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmVClyZXR1cm4gMTtpZih0aGlz''@;'; put 'put ''Ll9zdHJpcCgpLHRoaXMubGVuZ3RoPjEpSD0xO2Vsc2V7VCYmKEM9LUMpLHAoQzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIGo9MHx0aGlzLndvcmRzWzBdO0g9aj09PUM/MDpqPEM/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtSDpIfSx3LnByb3RvdHlwZS5j''@;'; put 'put ''bXA9ZnVuY3Rpb24oQyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1DLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Qy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgVD10aGlzLnVjbXAoQyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LVQ6VH0sdy5wcm90''@;'; put 'put ''b3R5cGUudWNtcD1mdW5jdGlvbihDKXtpZih0aGlzLmxlbmd0aD5DLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxDLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIFQ9MCxIPXRoaXMubGVuZ3RoLTE7SD49MDtILS0pe3ZhciBqPTB8dGhpcy53b3Jkc1tIXSxFPTB8Qy53b3Jkc1tIXTtp''@;'; put 'put ''ZihqIT09RSl7ajxFP1Q9LTE6aj5FJiYoVD0xKTticmVha319cmV0dXJuIFR9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbihDKXtyZXR1cm4gMT09PXRoaXMuY21wbihDKX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oQyl7cmV0dXJuIDE9PT10aGlzLmNtcChDKX0sdy5wcm90b3R5cGUuZ3Rl''@;'; put 'put ''bj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbXBuKEMpPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY21wKEMpPj0wfSx3LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oQyl7cmV0dXJuLTE9PT10aGlzLmNtcG4oQyl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9u''@;'; put 'put ''KEMpe3JldHVybi0xPT09dGhpcy5jbXAoQyl9LHcucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY21wbihDKTw9MH0sdy5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNtcChDKTw9MH0sdy5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKEMpe3JldHVy''@;'; put 'put ''biAwPT09dGhpcy5jbXBuKEMpfSx3LnByb3RvdHlwZS5lcT1mdW5jdGlvbihDKXtyZXR1cm4gMD09PXRoaXMuY21wKEMpfSx3LnJlZD1mdW5jdGlvbihDKXtyZXR1cm4gbmV3IGcoQyl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKEMpe3JldHVybiBwKCF0aGlzLnJlZCwiQWxyZWFkeSBh''@;'; put 'put ''IG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHAoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksQy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKEMpfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQs''@;'; put 'put ''ImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLnJlZD1DLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1''@;'; put 'put ''bmN0aW9uKEMpe3JldHVybiBwKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKEMpfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVk''@;'; put 'put ''IG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihDKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZFN1Yj1m''@;'; put 'put ''dW5jdGlvbihDKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKEMpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCBy''@;'; put 'put ''ZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKEMpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZE11bD1m''@;'; put 'put ''dW5jdGlvbihDKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsQyksdGhpcy5yZWQubXVsKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oQyl7cmV0dXJuIHAodGhpcy5yZWQs''@;'; put 'put ''InJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLEMpLHRoaXMucmVkLmltdWwodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51''@;'; put 'put ''bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0''@;'; put 'put ''aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''cmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMu''@;'; put 'put ''cmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oQyl7cmV0dXJuIHAodGhpcy5yZWQmJiFDLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0''@;'; put 'put ''aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxDKX07dmFyIGdlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gX2UoeCxDKXt0aGlzLm5hbWU9eCx0aGlzLnA9bmV3IHcoQywxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5n''@;'; put 'put ''dGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIFRlKCl7X2UuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBNZSgpe19lLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gWmUoKXtfZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZm''@;'; put 'put ''ZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIEIoKXtfZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIGcoeCl7aWYoInN0''@;'; put 'put ''cmluZyI9PXR5cGVvZiB4KXt2YXIgQz13Ll9wcmltZSh4KTt0aGlzLm09Qy5wLHRoaXMucHJpbWU9Q31lbHNlIHAoeC5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT14LHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiB5KHgpe2cuY2FsbCh0aGlzLHgpLHRo''@;'; put 'put ''aXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52''@;'; put 'put ''bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9X2UucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgQz1u''@;'; put 'put ''ZXcgdyhudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLEN9LF9lLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKEMpe3ZhciBILFQ9Qztkb3t0aGlzLnNwbGl0KFQsdGhpcy50bXApLEg9KFQ9KFQ9dGhpcy5pbXVsSyhUKSkuaWFkZCh0aGlzLnRt''@;'; put 'put ''cCkpLmJpdExlbmd0aCgpfXdoaWxlKEg+dGhpcy5uKTt2YXIgaj1IPHRoaXMubj8tMTpULnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PWo/KFQud29yZHNbMF09MCxULmxlbmd0aD0xKTpqPjA/VC5pc3ViKHRoaXMucCk6dm9pZCAwIT09VC5zdHJpcD9ULnN0cmlwKCk6VC5fc3RyaXAoKSxUfSxf''@;'; put 'put ''ZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oQyxUKXtDLml1c2hybih0aGlzLm4sMCxUKX0sX2UucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKEMpe3JldHVybiBDLmltdWwodGhpcy5rKX0sVihUZSxfZSksVGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKEMsVCl7Zm9yKHZhciBIPTQxOTQz''@;'; put 'put ''MDMsaj1NYXRoLm1pbihDLmxlbmd0aCw5KSxFPTA7RTxqO0UrKylULndvcmRzW0VdPUMud29yZHNbRV07aWYoVC5sZW5ndGg9aixDLmxlbmd0aDw9OSlyZXR1cm4gQy53b3Jkc1swXT0wLHZvaWQoQy5sZW5ndGg9MSk7dmFyIG09Qy53b3Jkc1s5XTtmb3IoVC53b3Jkc1tULmxlbmd0aCsrXT1t''@;'; put 'put ''JkgsRT0xMDtFPEMubGVuZ3RoO0UrKyl7dmFyIEE9MHxDLndvcmRzW0VdO0Mud29yZHNbRS0xMF09KEEmSCk8PDR8bT4+PjIyLG09QX1DLndvcmRzW0UtMTBdPW0+Pj49MjIsQy5sZW5ndGgtPTA9PT1tJiZDLmxlbmd0aD4xMD8xMDo5fSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oQyl7''@;'; put 'put ''Qy53b3Jkc1tDLmxlbmd0aF09MCxDLndvcmRzW0MubGVuZ3RoKzFdPTAsQy5sZW5ndGgrPTI7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXt2YXIgaj0wfEMud29yZHNbSF07Qy53b3Jkc1tIXT02NzEwODg2MyYoVCs9OTc3KmopLFQ9NjQqaisoVC82NzEwODg2NHwwKX1yZXR1cm4g''@;'; put 'put ''MD09PUMud29yZHNbQy5sZW5ndGgtMV0mJihDLmxlbmd0aC0tLDA9PT1DLndvcmRzW0MubGVuZ3RoLTFdJiZDLmxlbmd0aC0tKSxDfSxWKE1lLF9lKSxWKFplLF9lKSxWKEIsX2UpLEIucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKEMpe2Zvcih2YXIgVD0wLEg9MDtIPEMubGVuZ3RoO0grKyl7''@;'; put 'put ''dmFyIGo9MTkqKDB8Qy53b3Jkc1tIXSkrVCxFPTY3MTA4ODYzJmo7aj4+Pj0yNixDLndvcmRzW0hdPUUsVD1qfXJldHVybiAwIT09VCYmKEMud29yZHNbQy5sZW5ndGgrK109VCksQ30sdy5fcHJpbWU9ZnVuY3Rpb24oQyl7aWYoZ2VbQ10pcmV0dXJuIGdlW0NdO3ZhciBUO2lmKCJrMjU2Ij09''@;'; put 'put ''PUMpVD1uZXcgVGU7ZWxzZSBpZigicDIyNCI9PT1DKVQ9bmV3IE1lO2Vsc2UgaWYoInAxOTIiPT09QylUPW5ldyBaZTtlbHNle2lmKCJwMjU1MTkiIT09Qyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitDKTtUPW5ldyBCfXJldHVybiBnZVtDXT1ULFR9LGcucHJvdG90eXBlLl92''@;'; put 'put ''ZXJpZnkxPWZ1bmN0aW9uKEMpe3AoMD09PUMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscChDLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxnLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihDLFQpe3AoIShDLm5lZ2F0aXZlfFQu''@;'; put 'put ''bmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAoQy5yZWQmJkMucmVkPT09VC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sZy5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1''@;'; put 'put ''Y2UoQykuX2ZvcmNlUmVkKHRoaXMpOihOKEMsQy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpKSxDKX0sZy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKEMpe3JldHVybiBDLmlzWmVybygpP0MuY2xvbmUoKTp0aGlzLm0uc3ViKEMpLl9mb3JjZVJlZCh0aGlzKX0sZy5wcm90b3R5cGUuYWRk''@;'; put 'put ''PWZ1bmN0aW9uKEMsVCl7dGhpcy5fdmVyaWZ5MihDLFQpO3ZhciBIPUMuYWRkKFQpO3JldHVybiBILmNtcCh0aGlzLm0pPj0wJiZILmlzdWIodGhpcy5tKSxILl9mb3JjZVJlZCh0aGlzKX0sZy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihDLFQpe3RoaXMuX3ZlcmlmeTIoQyxUKTt2YXIgSD1D''@;'; put 'put ''LmlhZGQoVCk7cmV0dXJuIEguY21wKHRoaXMubSk+PTAmJkguaXN1Yih0aGlzLm0pLEh9LGcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihDLFQpe3RoaXMuX3ZlcmlmeTIoQyxUKTt2YXIgSD1DLnN1YihUKTtyZXR1cm4gSC5jbXBuKDApPDAmJkguaWFkZCh0aGlzLm0pLEguX2ZvcmNlUmVkKHRo''@;'; put 'put ''aXMpfSxnLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKEMsVCl7dGhpcy5fdmVyaWZ5MihDLFQpO3ZhciBIPUMuaXN1YihUKTtyZXR1cm4gSC5jbXBuKDApPDAmJkguaWFkZCh0aGlzLm0pLEh9LGcucHJvdG90eXBlLnNobD1mdW5jdGlvbihDLFQpe3JldHVybiB0aGlzLl92ZXJpZnkxKEMpLHRo''@;'; put 'put ''aXMuaW1vZChDLnVzaGxuKFQpKX0sZy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihDLFQpe3JldHVybiB0aGlzLl92ZXJpZnkyKEMsVCksdGhpcy5pbW9kKEMuaW11bChUKSl9LGcucHJvdG90eXBlLm11bD1mdW5jdGlvbihDLFQpe3JldHVybiB0aGlzLl92ZXJpZnkyKEMsVCksdGhpcy5pbW9k''@;'; put 'put ''KEMubXVsKFQpKX0sZy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5pbXVsKEMsQy5jbG9uZSgpKX0sZy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLm11bChDLEMpfSxnLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKEMpe2lmKEMuaXNaZXJvKCkp''@;'; put 'put ''cmV0dXJuIEMuY2xvbmUoKTt2YXIgVD10aGlzLm0uYW5kbG4oMyk7aWYocChUJTI9PTEpLDM9PT1UKXt2YXIgSD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KEMsSCl9Zm9yKHZhciBqPXRoaXMubS5zdWJuKDEpLEU9MDshai5pc1plcm8oKSYmMD09PWou''@;'; put 'put ''YW5kbG4oMSk7KUUrKyxqLml1c2hybigxKTtwKCFqLmlzWmVybygpKTt2YXIgbT1uZXcgdygxKS50b1JlZCh0aGlzKSxBPW0ucmVkTmVnKCksYWU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLG5lPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobmU9bmV3IHcoMipuZSpuZSkudG9SZWQodGhpcyk7''@;'; put 'put ''MCE9PXRoaXMucG93KG5lLGFlKS5jbXAoQSk7KW5lLnJlZElBZGQoQSk7Zm9yKHZhciBzZT10aGlzLnBvdyhuZSxqKSxDZT10aGlzLnBvdyhDLGouYWRkbigxKS5pdXNocm4oMSkpLFVlPXRoaXMucG93KEMsaiksSmU9RTswIT09VWUuY21wKG0pOyl7Zm9yKHZhciBpdD1VZSx4ZT0wOzAhPT1p''@;'; put 'put ''dC5jbXAobSk7eGUrKylpdD1pdC5yZWRTcXIoKTtwKHhlPEplKTt2YXIgeWU9dGhpcy5wb3coc2UsbmV3IHcoMSkuaXVzaGxuKEplLXhlLTEpKTtDZT1DZS5yZWRNdWwoeWUpLHNlPXllLnJlZFNxcigpLFVlPVVlLnJlZE11bChzZSksSmU9eGV9cmV0dXJuIENlfSxnLnByb3RvdHlwZS5pbnZt''@;'; put 'put ''PWZ1bmN0aW9uKEMpe3ZhciBUPUMuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1ULm5lZ2F0aXZlPyhULm5lZ2F0aXZlPTAsdGhpcy5pbW9kKFQpLnJlZE5lZygpKTp0aGlzLmltb2QoVCl9LGcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihDLFQpe2lmKFQuaXNaZXJvKCkpcmV0dXJuIG5ldyB3''@;'; put 'put ''KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1ULmNtcG4oMSkpcmV0dXJuIEMuY2xvbmUoKTt2YXIgaj1uZXcgQXJyYXkoMTYpO2pbMF09bmV3IHcoMSkudG9SZWQodGhpcyksalsxXT1DO2Zvcih2YXIgRT0yO0U8ai5sZW5ndGg7RSsrKWpbRV09dGhpcy5tdWwoaltFLTFdLEMpO3ZhciBtPWpbMF0s''@;'; put 'put ''QT0wLGFlPTAsbmU9VC5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW5lJiYobmU9MjYpLEU9VC5sZW5ndGgtMTtFPj0wO0UtLSl7Zm9yKHZhciBzZT1ULndvcmRzW0VdLENlPW5lLTE7Q2U+PTA7Q2UtLSl7dmFyIFVlPXNlPj5DZSYxO20hPT1qWzBdJiYobT10aGlzLnNxcihtKSksMCE9PVVlfHww''@;'; put 'put ''IT09QT8oQTw8PTEsQXw9VWUsKDQ9PSsrYWV8fDA9PT1FJiYwPT09Q2UpJiYobT10aGlzLm11bChtLGpbQV0pLGFlPTAsQT0wKSk6YWU9MH1uZT0yNn1yZXR1cm4gbX0sZy5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKEMpe3ZhciBUPUMudW1vZCh0aGlzLm0pO3JldHVybiBUPT09Qz9U''@;'; put 'put ''LmNsb25lKCk6VH0sZy5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oQyl7dmFyIFQ9Qy5jbG9uZSgpO3JldHVybiBULnJlZD1udWxsLFR9LHcubW9udD1mdW5jdGlvbihDKXtyZXR1cm4gbmV3IHkoQyl9LFYoeSxnKSx5LnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oQyl7cmV0''@;'; put 'put ''dXJuIHRoaXMuaW1vZChDLnVzaGxuKHRoaXMuc2hpZnQpKX0seS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oQyl7dmFyIFQ9dGhpcy5pbW9kKEMubXVsKHRoaXMucmludikpO3JldHVybiBULnJlZD1udWxsLFR9LHkucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oQyxUKXtpZihDLmlz''@;'; put 'put ''WmVybygpfHxULmlzWmVybygpKXJldHVybiBDLndvcmRzWzBdPTAsQy5sZW5ndGg9MSxDO3ZhciBIPUMuaW11bChUKSxqPUgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLEU9SC5pc3ViKGopLml1c2hybih0aGlzLnNoaWZ0''@;'; put 'put ''KSxtPUU7cmV0dXJuIEUuY21wKHRoaXMubSk+PTA/bT1FLmlzdWIodGhpcy5tKTpFLmNtcG4oMCk8MCYmKG09RS5pYWRkKHRoaXMubSkpLG0uX2ZvcmNlUmVkKHRoaXMpfSx5LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oQyxUKXtpZihDLmlzWmVybygpfHxULmlzWmVybygpKXJldHVybiBuZXcg''@;'; put 'put ''dygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIEg9Qy5tdWwoVCksaj1ILm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxFPUguaXN1YihqKS5pdXNocm4odGhpcy5zaGlmdCksbT1FO3JldHVybiBFLmNtcCh0aGlzLm0pPj0wP209''@;'; put 'put ''RS5pc3ViKHRoaXMubSk6RS5jbXBuKDApPDAmJihtPUUuaWFkZCh0aGlzLm0pKSxtLl9mb3JjZVJlZCh0aGlzKX0seS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5pbW9kKEMuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShjZT1i''@;'; put 'put ''Lm5tZChjZSksdGhpcyl9LDk5MzE6KGNlLFgsYik9Pnt2YXIgSTtmdW5jdGlvbiBfKFYpe3RoaXMucmFuZD1WfWlmKGNlLmV4cG9ydHM9ZnVuY3Rpb24odyl7cmV0dXJuIEl8fChJPW5ldyBfKG51bGwpKSxJLmdlbmVyYXRlKHcpfSxjZS5leHBvcnRzLlJhbmQ9XyxfLnByb3RvdHlwZS5nZW5l''@;'; put 'put ''cmF0ZT1mdW5jdGlvbih3KXtyZXR1cm4gdGhpcy5fcmFuZCh3KX0sXy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odyl7aWYodGhpcy5yYW5kLmdldEJ5dGVzKXJldHVybiB0aGlzLnJhbmQuZ2V0Qnl0ZXModyk7Zm9yKHZhciBQPW5ldyBVaW50OEFycmF5KHcpLEY9MDtGPFAubGVuZ3RoO0Yr''@;'; put 'put ''KylQW0ZdPXRoaXMucmFuZC5nZXRCeXRlKCk7cmV0dXJuIFB9LCJvYmplY3QiPT10eXBlb2Ygc2VsZilzZWxmLmNyeXB0byYmc2VsZi5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzP18ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHcpe3ZhciBQPW5ldyBVaW50OEFycmF5KHcpO3JldHVybiBzZWxm''@;'; put 'put ''LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoUCksUH06c2VsZi5tc0NyeXB0byYmc2VsZi5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXM/Xy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odyl7dmFyIFA9bmV3IFVpbnQ4QXJyYXkodyk7cmV0dXJuIHNlbGYubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVz''@;'; put 'put ''KFApLFB9OiJvYmplY3QiPT10eXBlb2Ygd2luZG93JiYoXy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCB5ZXQiKX0pO2Vsc2UgdHJ5e3ZhciBwPWIoOTIxNCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHAucmFuZG9tQnl0ZXMpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIik7Xy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odyl7cmV0dXJuIHAucmFuZG9tQnl0ZXModyl9fWNhdGNoe319LDQ0OTc6KGNlLFgsYik9Pnt2YXIgST1iKDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBfKFIpe0kuaXNCdWZmZXIoUil8fChSPUku''@;'; put 'put ''ZnJvbShSKSk7Zm9yKHZhciB6PVIubGVuZ3RoLzR8MCxOPW5ldyBBcnJheSh6KSxPPTA7Tzx6O08rKylOW09dPVIucmVhZFVJbnQzMkJFKDQqTyk7cmV0dXJuIE59ZnVuY3Rpb24gcChSKXtmb3IoOzA8Ui5sZW5ndGg7UisrKVJbMF09MH1mdW5jdGlvbiBWKFIseixOLE8sSyl7Zm9yKHZhciB1''@;'; put 'put ''ZSxnZSxfZSxUZSxaPU5bMF0sWT1OWzFdLFc9TlsyXSxxPU5bM10sZWU9UlswXV56WzBdLEo9UlsxXV56WzFdLHJlPVJbMl1eelsyXSxpZT1SWzNdXnpbM10sTWU9NCxaZT0xO1plPEs7WmUrKyl1ZT1aW2VlPj4+MjRdXllbSj4+PjE2JjI1NV1eV1tyZT4+PjgmMjU1XV5xWzI1NSZpZV1eeltN''@;'; put 'put ''ZSsrXSxnZT1aW0o+Pj4yNF1eWVtyZT4+PjE2JjI1NV1eV1tpZT4+PjgmMjU1XV5xWzI1NSZlZV1eeltNZSsrXSxfZT1aW3JlPj4+MjRdXllbaWU+Pj4xNiYyNTVdXldbZWU+Pj44JjI1NV1ecVsyNTUmSl1eeltNZSsrXSxUZT1aW2llPj4+MjRdXllbZWU+Pj4xNiYyNTVdXldbSj4+PjgmMjU1''@;'; put 'put ''XV5xWzI1NSZyZV1eeltNZSsrXSxlZT11ZSxKPWdlLHJlPV9lLGllPVRlO3JldHVybiB1ZT0oT1tlZT4+PjI0XTw8MjR8T1tKPj4+MTYmMjU1XTw8MTZ8T1tyZT4+PjgmMjU1XTw8OHxPWzI1NSZpZV0pXnpbTWUrK10sZ2U9KE9bSj4+PjI0XTw8MjR8T1tyZT4+PjE2JjI1NV08PDE2fE9baWU+''@;'; put 'put ''Pj44JjI1NV08PDh8T1syNTUmZWVdKV56W01lKytdLF9lPShPW3JlPj4+MjRdPDwyNHxPW2llPj4+MTYmMjU1XTw8MTZ8T1tlZT4+PjgmMjU1XTw8OHxPWzI1NSZKXSleeltNZSsrXSxUZT0oT1tpZT4+PjI0XTw8MjR8T1tlZT4+PjE2JjI1NV08PDE2fE9bSj4+PjgmMjU1XTw8OHxPWzI1NSZy''@;'; put 'put ''ZV0pXnpbTWUrK10sW3VlPj4+PTAsZ2U+Pj49MCxfZT4+Pj0wLFRlPj4+PTBdfXZhciB3PVswLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0XSxQPWZ1bmN0aW9uKCl7Zm9yKHZhciBSPW5ldyBBcnJheSgyNTYpLHo9MDt6PDI1Njt6KyspUlt6XT16PDEyOD96PDwxOno8PDFeMjgzO2Zvcih2''@;'; put 'put ''YXIgTj1bXSxPPVtdLEs9W1tdLFtdLFtdLFtdXSxaPVtbXSxbXSxbXSxbXV0sWT0wLFc9MCxxPTA7cTwyNTY7KytxKXt2YXIgZWU9V15XPDwxXlc8PDJeVzw8M15XPDw0O05bWV09ZWU9ZWU+Pj44XjI1NSZlZV45OSxPW2VlXT1ZO3ZhciBKPVJbWV0scmU9UltKXSxpZT1SW3JlXSx1ZT0yNTcq''@;'; put 'put ''UltlZV1eMTY4NDMwMDgqZWU7S1swXVtZXT11ZTw8MjR8dWU+Pj44LEtbMV1bWV09dWU8PDE2fHVlPj4+MTYsS1syXVtZXT11ZTw8OHx1ZT4+PjI0LEtbM11bWV09dWUsWlswXVtlZV09KHVlPTE2ODQzMDA5KmllXjY1NTM3KnJlXjI1NypKXjE2ODQzMDA4KlkpPDwyNHx1ZT4+PjgsWlsxXVtl''@;'; put 'put ''ZV09dWU8PDE2fHVlPj4+MTYsWlsyXVtlZV09dWU8PDh8dWU+Pj4yNCxaWzNdW2VlXT11ZSwwPT09WT9ZPVc9MTooWT1KXlJbUltSW2llXkpdXV0sV149UltSW1ddXSl9cmV0dXJue1NCT1g6TixJTlZfU0JPWDpPLFNVQl9NSVg6SyxJTlZfU1VCX01JWDpafX0oKTtmdW5jdGlvbiBGKFIpe3Ro''@;'; put 'put ''aXMuX2tleT1fKFIpLHRoaXMuX3Jlc2V0KCl9Ri5ibG9ja1NpemU9MTYsRi5rZXlTaXplPTMyLEYucHJvdG90eXBlLmJsb2NrU2l6ZT1GLmJsb2NrU2l6ZSxGLnByb3RvdHlwZS5rZXlTaXplPUYua2V5U2l6ZSxGLnByb3RvdHlwZS5fcmVzZXQ9ZnVuY3Rpb24oKXtmb3IodmFyIFI9dGhpcy5f''@;'; put 'put ''a2V5LHo9Ui5sZW5ndGgsTj16KzYsTz00KihOKzEpLEs9W10sWj0wO1o8ejtaKyspS1taXT1SW1pdO2ZvcihaPXo7WjxPO1orKyl7dmFyIFk9S1taLTFdO1olej09MD8oWT1QLlNCT1hbKFk9WTw8OHxZPj4+MjQpPj4+MjRdPDwyNHxQLlNCT1hbWT4+PjE2JjI1NV08PDE2fFAuU0JPWFtZPj4+''@;'; put 'put ''OCYyNTVdPDw4fFAuU0JPWFsyNTUmWV0sWV49d1taL3p8MF08PDI0KTp6PjYmJlolej09NCYmKFk9UC5TQk9YW1k+Pj4yNF08PDI0fFAuU0JPWFtZPj4+MTYmMjU1XTw8MTZ8UC5TQk9YW1k+Pj44JjI1NV08PDh8UC5TQk9YWzI1NSZZXSksS1taXT1LW1otel1eWX1mb3IodmFyIFc9W10scT0w''@;'; put 'put ''O3E8TztxKyspe3ZhciBlZT1PLXEsSj1LW2VlLShxJTQ/MDo0KV07V1txXT1xPDR8fGVlPD00P0o6UC5JTlZfU1VCX01JWFswXVtQLlNCT1hbSj4+PjI0XV1eUC5JTlZfU1VCX01JWFsxXVtQLlNCT1hbSj4+PjE2JjI1NV1dXlAuSU5WX1NVQl9NSVhbMl1bUC5TQk9YW0o+Pj44JjI1NV1dXlAu''@;'; put 'put ''SU5WX1NVQl9NSVhbM11bUC5TQk9YWzI1NSZKXV19dGhpcy5fblJvdW5kcz1OLHRoaXMuX2tleVNjaGVkdWxlPUssdGhpcy5faW52S2V5U2NoZWR1bGU9V30sRi5wcm90b3R5cGUuZW5jcnlwdEJsb2NrUmF3PWZ1bmN0aW9uKFIpe3JldHVybiBWKFI9XyhSKSx0aGlzLl9rZXlTY2hlZHVsZSxQ''@;'; put 'put ''LlNVQl9NSVgsUC5TQk9YLHRoaXMuX25Sb3VuZHMpfSxGLnByb3RvdHlwZS5lbmNyeXB0QmxvY2s9ZnVuY3Rpb24oUil7dmFyIHo9dGhpcy5lbmNyeXB0QmxvY2tSYXcoUiksTj1JLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gTi53cml0ZVVJbnQzMkJFKHpbMF0sMCksTi53cml0ZVVJbnQzMkJF''@;'; put 'put ''KHpbMV0sNCksTi53cml0ZVVJbnQzMkJFKHpbMl0sOCksTi53cml0ZVVJbnQzMkJFKHpbM10sMTIpLE59LEYucHJvdG90eXBlLmRlY3J5cHRCbG9jaz1mdW5jdGlvbihSKXt2YXIgej0oUj1fKFIpKVsxXTtSWzFdPVJbM10sUlszXT16O3ZhciBOPVYoUix0aGlzLl9pbnZLZXlTY2hlZHVsZSxQ''@;'; put 'put ''LklOVl9TVUJfTUlYLFAuSU5WX1NCT1gsdGhpcy5fblJvdW5kcyksTz1JLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gTy53cml0ZVVJbnQzMkJFKE5bMF0sMCksTy53cml0ZVVJbnQzMkJFKE5bM10sNCksTy53cml0ZVVJbnQzMkJFKE5bMl0sOCksTy53cml0ZVVJbnQzMkJFKE5bMV0sMTIpLE99''@;'; put 'put ''LEYucHJvdG90eXBlLnNjcnViPWZ1bmN0aW9uKCl7cCh0aGlzLl9rZXlTY2hlZHVsZSkscCh0aGlzLl9pbnZLZXlTY2hlZHVsZSkscCh0aGlzLl9rZXkpfSxjZS5leHBvcnRzLkFFUz1GfSw0ODQ4OihjZSxYLGIpPT57dmFyIEk9Yig0NDk3KSxfPWIoOTUwOSkuQnVmZmVyLHA9YigxMDI3KSxW''@;'; put 'put ''PWIoNTcxNyksdz1iKDMyODgpLFA9Yig3Mjk1KSxGPWIoNjg1KTtmdW5jdGlvbiBOKE8sSyxaLFkpe3AuY2FsbCh0aGlzKTt2YXIgVz1fLmFsbG9jKDQsMCk7dGhpcy5fY2lwaGVyPW5ldyBJLkFFUyhLKTt2YXIgcT10aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKFcpO3RoaXMuX2doYXNoPW5l''@;'; put 'put ''dyB3KHEpLFo9ZnVuY3Rpb24geihPLEssWil7aWYoMTI9PT1LLmxlbmd0aClyZXR1cm4gTy5fZmluSUQ9Xy5jb25jYXQoW0ssXy5mcm9tKFswLDAsMCwxXSldKSxfLmNvbmNhdChbSyxfLmZyb20oWzAsMCwwLDJdKV0pO3ZhciBZPW5ldyB3KFopLFc9Sy5sZW5ndGgscT1XJTE2O1kudXBkYXRl''@;'; put 'put ''KEspLHEmJlkudXBkYXRlKF8uYWxsb2MocT0xNi1xLDApKSxZLnVwZGF0ZShfLmFsbG9jKDgsMCkpO3ZhciBlZT04KlcsSj1fLmFsbG9jKDgpO0oud3JpdGVVSW50QkUoZWUsMCw4KSxZLnVwZGF0ZShKKSxPLl9maW5JRD1ZLnN0YXRlO3ZhciByZT1fLmZyb20oTy5fZmluSUQpO3JldHVybiBG''@;'; put 'put ''KHJlKSxyZX0odGhpcyxaLHEpLHRoaXMuX3ByZXY9Xy5mcm9tKFopLHRoaXMuX2NhY2hlPV8uYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2FjaGU9Xy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9kZWNyeXB0PVksdGhpcy5fYWxlbj0wLHRoaXMuX2xlbj0wLHRoaXMuX21vZGU9Tyx0aGlzLl9hdXRo''@;'; put 'put ''VGFnPW51bGwsdGhpcy5fY2FsbGVkPSExfVYoTixwKSxOLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKE8pe2lmKCF0aGlzLl9jYWxsZWQmJnRoaXMuX2FsZW4pe3ZhciBLPTE2LXRoaXMuX2FsZW4lMTY7SzwxNiYmKEs9Xy5hbGxvYyhLLDApLHRoaXMuX2doYXNoLnVwZGF0ZShLKSl9dGhp''@;'; put 'put ''cy5fY2FsbGVkPSEwO3ZhciBaPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLE8pO3JldHVybiB0aGlzLl9naGFzaC51cGRhdGUodGhpcy5fZGVjcnlwdD9POlopLHRoaXMuX2xlbis9Ty5sZW5ndGgsWn0sTi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7aWYodGhpcy5fZGVjcnlwdCYmIXRo''@;'; put 'put ''aXMuX2F1dGhUYWcpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGEiKTt2YXIgTz1QKHRoaXMuX2doYXNoLmZpbmFsKDgqdGhpcy5fYWxlbiw4KnRoaXMuX2xlbiksdGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayh0aGlzLl9m''@;'; put 'put ''aW5JRCkpO2lmKHRoaXMuX2RlY3J5cHQmJmZ1bmN0aW9uIFIoTyxLKXt2YXIgWj0wO08ubGVuZ3RoIT09Sy5sZW5ndGgmJlorKztmb3IodmFyIFk9TWF0aC5taW4oTy5sZW5ndGgsSy5sZW5ndGgpLFc9MDtXPFk7KytXKVorPU9bV11eS1tXXTtyZXR1cm4gWn0oTyx0aGlzLl9hdXRoVGFnKSl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YSIpO3RoaXMuX2F1dGhUYWc9Tyx0aGlzLl9jaXBoZXIuc2NydWIoKX0sTi5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe2lmKHRoaXMuX2RlY3J5cHR8fCFfLmlzQnVm''@;'; put 'put ''ZmVyKHRoaXMuX2F1dGhUYWcpKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTtyZXR1cm4gdGhpcy5fYXV0aFRhZ30sTi5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbihLKXtpZighdGhpcy5fZGVjcnlwdCl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fYXV0aFRhZz1LfSxOLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oSyl7aWYodGhpcy5fY2FsbGVkKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBzZXQgQUFE''@;'; put 'put ''IGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fZ2hhc2gudXBkYXRlKEspLHRoaXMuX2FsZW4rPUsubGVuZ3RofSxjZS5leHBvcnRzPU59LDQ2OTY6KGNlLFgsYik9Pnt2YXIgST1iKDE0OTQpLF89Yig2MTkzKSxwPWIoNDk0Nik7WC5jcmVhdGVDaXBoZXI9WC5DaXBoZXI9SS5jcmVhdGVD''@;'; put 'put ''aXBoZXIsWC5jcmVhdGVDaXBoZXJpdj1YLkNpcGhlcml2PUkuY3JlYXRlQ2lwaGVyaXYsWC5jcmVhdGVEZWNpcGhlcj1YLkRlY2lwaGVyPV8uY3JlYXRlRGVjaXBoZXIsWC5jcmVhdGVEZWNpcGhlcml2PVguRGVjaXBoZXJpdj1fLmNyZWF0ZURlY2lwaGVyaXYsWC5saXN0Q2lwaGVycz1YLmdl''@;'; put 'put ''dENpcGhlcnM9ZnVuY3Rpb24gVigpe3JldHVybiBPYmplY3Qua2V5cyhwKX19LDYxOTM6KGNlLFgsYik9Pnt2YXIgST1iKDQ4NDgpLF89Yig5NTA5KS5CdWZmZXIscD1iKDQ1KSxWPWIoNTk2OSksdz1iKDEwMjcpLFA9Yig0NDk3KSxGPWIoMzA0OCk7ZnVuY3Rpb24geihZLFcscSl7dy5jYWxs''@;'; put 'put ''KHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBOLHRoaXMuX2xhc3Q9dm9pZCAwLHRoaXMuX2NpcGhlcj1uZXcgUC5BRVMoVyksdGhpcy5fcHJldj1fLmZyb20ocSksdGhpcy5fbW9kZT1ZLHRoaXMuX2F1dG9wYWRkaW5nPSEwfWZ1bmN0aW9uIE4oKXt0aGlzLmNhY2hlPV8uYWxsb2NVbnNhZmUoMCl9''@;'; put 'put ''ZnVuY3Rpb24gSyhZLFcscSl7dmFyIGVlPXBbWS50b0xvd2VyQ2FzZSgpXTtpZighZWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7aWYoInN0cmluZyI9PXR5cGVvZiBxJiYocT1fLmZyb20ocSkpLCJHQ00iIT09ZWUubW9kZSYmcS5sZW5ndGghPT1lZS5pdil0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGl2IGxlbmd0aCAiK3EubGVuZ3RoKTtpZigic3RyaW5nIj09dHlwZW9mIFcmJihXPV8uZnJvbShXKSksVy5sZW5ndGghPT1lZS5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGtleSBsZW5ndGggIitXLmxlbmd0aCk7cmV0dXJu''@;'; put 'put ''InN0cmVhbSI9PT1lZS50eXBlP25ldyBWKGVlLm1vZHVsZSxXLHEsITApOiJhdXRoIj09PWVlLnR5cGU/bmV3IEkoZWUubW9kdWxlLFcscSwhMCk6bmV3IHooZWUubW9kdWxlLFcscSl9Yig1NzE3KSh6LHcpLHoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oWSl7dGhpcy5fY2FjaGUuYWRk''@;'; put 'put ''KFkpO2Zvcih2YXIgVyxxLGVlPVtdO1c9dGhpcy5fY2FjaGUuZ2V0KHRoaXMuX2F1dG9wYWRkaW5nKTspcT10aGlzLl9tb2RlLmRlY3J5cHQodGhpcyxXKSxlZS5wdXNoKHEpO3JldHVybiBfLmNvbmNhdChlZSl9LHoucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBZPXRoaXMuX2Nh''@;'; put 'put ''Y2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIGZ1bmN0aW9uIE8oWSl7dmFyIFc9WVsxNV07aWYoVzwxfHxXPjE2KXRocm93IG5ldyBFcnJvcigidW5hYmxlIHRvIGRlY3J5cHQgZGF0YSIpO2Zvcih2YXIgcT0tMTsrK3E8VzspaWYoWVtxKygxNi1XKV0hPT1XKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigidW5hYmxlIHRvIGRlY3J5cHQgZGF0YSIpO2lmKDE2IT09VylyZXR1cm4gWS5zbGljZSgwLDE2LVcpfSh0aGlzLl9tb2RlLmRlY3J5cHQodGhpcyxZKSk7aWYoWSl0aHJvdyBuZXcgRXJyb3IoImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aCIpfSx6LnByb3Rv''@;'; put 'put ''dHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbihZKXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISFZLHRoaXN9LE4ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihZKXt0aGlzLmNhY2hlPV8uY29uY2F0KFt0aGlzLmNhY2hlLFldKX0sTi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKFkpe3ZhciBX''@;'; put 'put ''O2lmKFkpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE2KXJldHVybiBXPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxXfWVsc2UgaWYodGhpcy5jYWNoZS5sZW5ndGg+PTE2KXJldHVybiBXPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5j''@;'; put 'put ''YWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxXO3JldHVybiBudWxsfSxOLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoKXJldHVybiB0aGlzLmNhY2hlfSxYLmNyZWF0ZURlY2lwaGVyPWZ1bmN0aW9uIFooWSxXKXt2YXIgcT1wW1kudG9Mb3dlckNhc2Uo''@;'; put 'put ''KV07aWYoIXEpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7dmFyIGVlPUYoVywhMSxxLmtleSxxLml2KTtyZXR1cm4gSyhZLGVlLmtleSxlZS5pdil9LFguY3JlYXRlRGVjaXBoZXJpdj1LfSwxNDk0OihjZSxYLGIpPT57dmFyIEk9Yig0NSksXz1iKDQ4NDgpLHA9''@;'; put 'put ''Yig5NTA5KS5CdWZmZXIsVj1iKDU5NjkpLHc9YigxMDI3KSxQPWIoNDQ5NyksRj1iKDMwNDgpO2Z1bmN0aW9uIHooWSxXLHEpe3cuY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgTyx0aGlzLl9jaXBoZXI9bmV3IFAuQUVTKFcpLHRoaXMuX3ByZXY9cC5mcm9tKHEpLHRoaXMuX21vZGU9WSx0''@;'; put 'put ''aGlzLl9hdXRvcGFkZGluZz0hMH1iKDU3MTcpKHosdyksei5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihZKXt0aGlzLl9jYWNoZS5hZGQoWSk7Zm9yKHZhciBXLHEsZWU9W107Vz10aGlzLl9jYWNoZS5nZXQoKTspcT10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxXKSxlZS5wdXNoKHEpO3Jl''@;'; put 'put ''dHVybiBwLmNvbmNhdChlZSl9O3ZhciBOPXAuYWxsb2MoMTYsMTYpO2Z1bmN0aW9uIE8oKXt0aGlzLmNhY2hlPXAuYWxsb2NVbnNhZmUoMCl9ZnVuY3Rpb24gSyhZLFcscSl7dmFyIGVlPUlbWS50b0xvd2VyQ2FzZSgpXTtpZighZWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0''@;'; put 'put ''ZSB0eXBlIik7aWYoInN0cmluZyI9PXR5cGVvZiBXJiYoVz1wLmZyb20oVykpLFcubGVuZ3RoIT09ZWUua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBrZXkgbGVuZ3RoICIrVy5sZW5ndGgpO2lmKCJzdHJpbmciPT10eXBlb2YgcSYmKHE9cC5mcm9tKHEpKSwiR0NNIiE9PWVl''@;'; put 'put ''Lm1vZGUmJnEubGVuZ3RoIT09ZWUuaXYpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBpdiBsZW5ndGggIitxLmxlbmd0aCk7cmV0dXJuInN0cmVhbSI9PT1lZS50eXBlP25ldyBWKGVlLm1vZHVsZSxXLHEpOiJhdXRoIj09PWVlLnR5cGU/bmV3IF8oZWUubW9kdWxlLFcscSk6bmV3IHoo''@;'; put 'put ''ZWUubW9kdWxlLFcscSl9ei5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIFk9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gWT10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxZKSx0aGlzLl9jaXBoZXIuc2NydWIoKSxZO2lmKCFZLmVxdWFscyhO''@;'; put 'put ''KSl0aHJvdyB0aGlzLl9jaXBoZXIuc2NydWIoKSxuZXcgRXJyb3IoImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aCIpfSx6LnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbihZKXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISFZLHRoaXN9LE8ucHJvdG90eXBlLmFk''@;'; put 'put ''ZD1mdW5jdGlvbihZKXt0aGlzLmNhY2hlPXAuY29uY2F0KFt0aGlzLmNhY2hlLFldKX0sTy5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTUpe3ZhciBZPXRoaXMuY2FjaGUuc2xpY2UoMCwxNik7cmV0dXJuIHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGlj''@;'; put 'put ''ZSgxNiksWX1yZXR1cm4gbnVsbH0sTy5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtmb3IodmFyIFk9MTYtdGhpcy5jYWNoZS5sZW5ndGgsVz1wLmFsbG9jVW5zYWZlKFkpLHE9LTE7KytxPFk7KVcud3JpdGVVSW50OChZLHEpO3JldHVybiBwLmNvbmNhdChbdGhpcy5jYWNoZSxXXSl9LFgu''@;'; put 'put ''Y3JlYXRlQ2lwaGVyaXY9SyxYLmNyZWF0ZUNpcGhlcj1mdW5jdGlvbiBaKFksVyl7dmFyIHE9SVtZLnRvTG93ZXJDYXNlKCldO2lmKCFxKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO3ZhciBlZT1GKFcsITEscS5rZXkscS5pdik7cmV0dXJuIEsoWSxlZS5rZXks''@;'; put 'put ''ZWUuaXYpfX0sMzI4ODooY2UsWCxiKT0+e3ZhciBJPWIoOTUwOSkuQnVmZmVyLF89SS5hbGxvYygxNiwwKTtmdW5jdGlvbiBWKFApe3ZhciBGPUkuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBGLndyaXRlVUludDMyQkUoUFswXT4+PjAsMCksRi53cml0ZVVJbnQzMkJFKFBbMV0+Pj4wLDQpLEYu''@;'; put 'put ''d3JpdGVVSW50MzJCRShQWzJdPj4+MCw4KSxGLndyaXRlVUludDMyQkUoUFszXT4+PjAsMTIpLEZ9ZnVuY3Rpb24gdyhQKXt0aGlzLmg9UCx0aGlzLnN0YXRlPUkuYWxsb2MoMTYsMCksdGhpcy5jYWNoZT1JLmFsbG9jVW5zYWZlKDApfXcucHJvdG90eXBlLmdoYXNoPWZ1bmN0aW9uKFApe2Zv''@;'; put 'put ''cih2YXIgRj0tMTsrK0Y8UC5sZW5ndGg7KXRoaXMuc3RhdGVbRl1ePVBbRl07dGhpcy5fbXVsdGlwbHkoKX0sdy5wcm90b3R5cGUuX211bHRpcGx5PWZ1bmN0aW9uKCl7Zm9yKHZhciBSLE4sUD1mdW5jdGlvbiBwKFApe3JldHVybltQLnJlYWRVSW50MzJCRSgwKSxQLnJlYWRVSW50MzJCRSg0''@;'; put 'put ''KSxQLnJlYWRVSW50MzJCRSg4KSxQLnJlYWRVSW50MzJCRSgxMildfSh0aGlzLmgpLEY9WzAsMCwwLDBdLE89LTE7KytPPDEyODspe2ZvcighISh0aGlzLnN0YXRlW35+KE8vOCldJjE8PDctTyU4KSYmKEZbMF1ePVBbMF0sRlsxXV49UFsxXSxGWzJdXj1QWzJdLEZbM11ePVBbM10pLE49ISEo''@;'; put 'put ''MSZQWzNdKSxSPTM7Uj4wO1ItLSlQW1JdPVBbUl0+Pj4xfCgxJlBbUi0xXSk8PDMxO1BbMF09UFswXT4+PjEsTiYmKFBbMF09LTUyMDA5MzY5Nl5QWzBdKX10aGlzLnN0YXRlPVYoRil9LHcucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihQKXt0aGlzLmNhY2hlPUkuY29uY2F0KFt0aGlzLmNh''@;'; put 'put ''Y2hlLFBdKTtmb3IodmFyIEY7dGhpcy5jYWNoZS5sZW5ndGg+PTE2OylGPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSx0aGlzLmdoYXNoKEYpfSx3LnByb3RvdHlwZS5maW5hbD1mdW5jdGlvbihQLEYpe3JldHVybiB0aGlzLmNhY2hlLmxl''@;'; put 'put ''bmd0aCYmdGhpcy5naGFzaChJLmNvbmNhdChbdGhpcy5jYWNoZSxfXSwxNikpLHRoaXMuZ2hhc2goVihbMCxQLDAsRl0pKSx0aGlzLnN0YXRlfSxjZS5leHBvcnRzPXd9LDY4NTpjZT0+e2NlLmV4cG9ydHM9ZnVuY3Rpb24gWChiKXtmb3IodmFyIF8sST1iLmxlbmd0aDtJLS07KXtpZigyNTUh''@;'; put 'put ''PT0oXz1iLnJlYWRVSW50OChJKSkpe18rKyxiLndyaXRlVUludDgoXyxJKTticmVha31iLndyaXRlVUludDgoMCxJKX19fSw1MjkyOihjZSxYLGIpPT57dmFyIEk9Yig3Mjk1KTtYLmVuY3J5cHQ9ZnVuY3Rpb24oXyxwKXt2YXIgVj1JKHAsXy5fcHJldik7cmV0dXJuIF8uX3ByZXY9Xy5fY2lw''@;'; put 'put ''aGVyLmVuY3J5cHRCbG9jayhWKSxfLl9wcmV2fSxYLmRlY3J5cHQ9ZnVuY3Rpb24oXyxwKXt2YXIgVj1fLl9wcmV2O18uX3ByZXY9cDt2YXIgdz1fLl9jaXBoZXIuZGVjcnlwdEJsb2NrKHApO3JldHVybiBJKHcsVil9fSw2MzExOihjZSxYLGIpPT57dmFyIEk9Yig5NTA5KS5CdWZmZXIsXz1i''@;'; put 'put ''KDcyOTUpO2Z1bmN0aW9uIHAoVix3LFApe3ZhciBGPXcubGVuZ3RoLFI9Xyh3LFYuX2NhY2hlKTtyZXR1cm4gVi5fY2FjaGU9Vi5fY2FjaGUuc2xpY2UoRiksVi5fcHJldj1JLmNvbmNhdChbVi5fcHJldixQP3c6Ul0pLFJ9WC5lbmNyeXB0PWZ1bmN0aW9uKFYsdyxQKXtmb3IodmFyIFIsRj1J''@;'; put 'put ''LmFsbG9jVW5zYWZlKDApO3cubGVuZ3RoOyl7aWYoMD09PVYuX2NhY2hlLmxlbmd0aCYmKFYuX2NhY2hlPVYuX2NpcGhlci5lbmNyeXB0QmxvY2soVi5fcHJldiksVi5fcHJldj1JLmFsbG9jVW5zYWZlKDApKSwhKFYuX2NhY2hlLmxlbmd0aDw9dy5sZW5ndGgpKXtGPUkuY29uY2F0KFtGLHAo''@;'; put 'put ''Vix3LFApXSk7YnJlYWt9Rj1JLmNvbmNhdChbRixwKFYsdy5zbGljZSgwLFI9Vi5fY2FjaGUubGVuZ3RoKSxQKV0pLHc9dy5zbGljZShSKX1yZXR1cm4gRn19LDE1MTA6KGNlLFgsYik9Pnt2YXIgST1iKDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBfKFYsdyxQKXtmb3IodmFyIE8sSyxSPS0xLE49''@;'; put 'put ''MDsrK1I8ODspTis9KDEyOCYoSz1WLl9jaXBoZXIuZW5jcnlwdEJsb2NrKFYuX3ByZXYpWzBdXihPPXcmMTw8Ny1SPzEyODowKSkpPj5SJTgsVi5fcHJldj1wKFYuX3ByZXYsUD9POkspO3JldHVybiBOfWZ1bmN0aW9uIHAoVix3KXt2YXIgUD1WLmxlbmd0aCxGPS0xLFI9SS5hbGxvY1Vuc2Fm''@;'; put 'put ''ZShWLmxlbmd0aCk7Zm9yKFY9SS5jb25jYXQoW1YsSS5mcm9tKFt3XSldKTsrK0Y8UDspUltGXT1WW0ZdPDwxfFZbRisxXT4+NztyZXR1cm4gUn1YLmVuY3J5cHQ9ZnVuY3Rpb24oVix3LFApe2Zvcih2YXIgRj13Lmxlbmd0aCxSPUkuYWxsb2NVbnNhZmUoRiksej0tMTsrK3o8RjspUlt6XT1f''@;'; put 'put ''KFYsd1t6XSxQKTtyZXR1cm4gUn19LDE5NjQ6KGNlLFgsYik9Pnt2YXIgST1iKDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBfKHAsVix3KXt2YXIgRj1wLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHAuX3ByZXYpWzBdXlY7cmV0dXJuIHAuX3ByZXY9SS5jb25jYXQoW3AuX3ByZXYuc2xpY2UoMSksSS5m''@;'; put 'put ''cm9tKFt3P1Y6Rl0pXSksRn1YLmVuY3J5cHQ9ZnVuY3Rpb24ocCxWLHcpe2Zvcih2YXIgUD1WLmxlbmd0aCxGPUkuYWxsb2NVbnNhZmUoUCksUj0tMTsrK1I8UDspRltSXT1fKHAsVltSXSx3KTtyZXR1cm4gRn19LDYwMDk6KGNlLFgsYik9Pnt2YXIgST1iKDcyOTUpLF89Yig5NTA5KS5CdWZm''@;'; put 'put ''ZXIscD1iKDY4NSk7ZnVuY3Rpb24gVihQKXt2YXIgRj1QLl9jaXBoZXIuZW5jcnlwdEJsb2NrUmF3KFAuX3ByZXYpO3JldHVybiBwKFAuX3ByZXYpLEZ9WC5lbmNyeXB0PWZ1bmN0aW9uKFAsRil7dmFyIFI9TWF0aC5jZWlsKEYubGVuZ3RoLzE2KSx6PVAuX2NhY2hlLmxlbmd0aDtQLl9jYWNo''@;'; put 'put ''ZT1fLmNvbmNhdChbUC5fY2FjaGUsXy5hbGxvY1Vuc2FmZSgxNipSKV0pO2Zvcih2YXIgTj0wO048UjtOKyspe3ZhciBPPVYoUCksSz16KzE2Kk47UC5fY2FjaGUud3JpdGVVSW50MzJCRShPWzBdLEsrMCksUC5fY2FjaGUud3JpdGVVSW50MzJCRShPWzFdLEsrNCksUC5fY2FjaGUud3JpdGVV''@;'; put 'put ''SW50MzJCRShPWzJdLEsrOCksUC5fY2FjaGUud3JpdGVVSW50MzJCRShPWzNdLEsrMTIpfXZhciBaPVAuX2NhY2hlLnNsaWNlKDAsRi5sZW5ndGgpO3JldHVybiBQLl9jYWNoZT1QLl9jYWNoZS5zbGljZShGLmxlbmd0aCksSShGLFopfX0sMTA4NDooY2UsWCk9PntYLmVuY3J5cHQ9ZnVuY3Rp''@;'; put 'put ''b24oYixJKXtyZXR1cm4gYi5fY2lwaGVyLmVuY3J5cHRCbG9jayhJKX0sWC5kZWNyeXB0PWZ1bmN0aW9uKGIsSSl7cmV0dXJuIGIuX2NpcGhlci5kZWNyeXB0QmxvY2soSSl9fSw0NTooY2UsWCxiKT0+e3ZhciBJPXtFQ0I6YigxMDg0KSxDQkM6Yig1MjkyKSxDRkI6Yig2MzExKSxDRkI4OmIo''@;'; put 'put ''MTk2NCksQ0ZCMTpiKDE1MTApLE9GQjpiKDg4NjEpLENUUjpiKDYwMDkpLEdDTTpiKDYwMDkpfSxfPWIoNDk0Nik7Zm9yKHZhciBwIGluIF8pX1twXS5tb2R1bGU9SVtfW3BdLm1vZGVdO2NlLmV4cG9ydHM9X30sODg2MTooY2UsWCxiKT0+e3ZhciBJPWIoODc2NCkuQnVmZmVyLF89Yig3Mjk1''@;'; put 'put ''KTtmdW5jdGlvbiBwKFYpe3JldHVybiBWLl9wcmV2PVYuX2NpcGhlci5lbmNyeXB0QmxvY2soVi5fcHJldiksVi5fcHJldn1YLmVuY3J5cHQ9ZnVuY3Rpb24oVix3KXtmb3IoO1YuX2NhY2hlLmxlbmd0aDx3Lmxlbmd0aDspVi5fY2FjaGU9SS5jb25jYXQoW1YuX2NhY2hlLHAoVildKTt2YXIg''@;'; put 'put ''UD1WLl9jYWNoZS5zbGljZSgwLHcubGVuZ3RoKTtyZXR1cm4gVi5fY2FjaGU9Vi5fY2FjaGUuc2xpY2Uody5sZW5ndGgpLF8odyxQKX19LDU5Njk6KGNlLFgsYik9Pnt2YXIgST1iKDQ0OTcpLF89Yig5NTA5KS5CdWZmZXIscD1iKDEwMjcpO2Z1bmN0aW9uIHcoUCxGLFIseil7cC5jYWxsKHRo''@;'; put 'put ''aXMpLHRoaXMuX2NpcGhlcj1uZXcgSS5BRVMoRiksdGhpcy5fcHJldj1fLmZyb20oUiksdGhpcy5fY2FjaGU9Xy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9zZWNDYWNoZT1fLmFsbG9jVW5zYWZlKDApLHRoaXMuX2RlY3J5cHQ9eix0aGlzLl9tb2RlPVB9Yig1NzE3KSh3LHApLHcucHJvdG90eXBl''@;'; put 'put ''Ll91cGRhdGU9ZnVuY3Rpb24oUCl7cmV0dXJuIHRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLFAsdGhpcy5fZGVjcnlwdCl9LHcucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3RoaXMuX2NpcGhlci5zY3J1YigpfSxjZS5leHBvcnRzPXd9LDM2MTQ6KGNlLFgsYik9Pnt2YXIgST1iKDc2Njcp''@;'; put 'put ''LF89Yig0Njk2KSxwPWIoNDUpLFY9Yig5NzE1KSx3PWIoMzA0OCk7ZnVuY3Rpb24gUihPLEssWil7aWYoTz1PLnRvTG93ZXJDYXNlKCkscFtPXSlyZXR1cm4gXy5jcmVhdGVDaXBoZXJpdihPLEssWik7aWYoVltPXSlyZXR1cm4gbmV3IEkoe2tleTpLLGl2OlosbW9kZTpPfSk7dGhyb3cgbmV3''@;'; put 'put ''IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIil9ZnVuY3Rpb24geihPLEssWil7aWYoTz1PLnRvTG93ZXJDYXNlKCkscFtPXSlyZXR1cm4gXy5jcmVhdGVEZWNpcGhlcml2KE8sSyxaKTtpZihWW09dKXJldHVybiBuZXcgSSh7a2V5OkssaXY6Wixtb2RlOk8sZGVjcnlwdDohMH0pO3Ro''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpfVguY3JlYXRlQ2lwaGVyPVguQ2lwaGVyPWZ1bmN0aW9uIFAoTyxLKXt2YXIgWixZO2lmKE89Ty50b0xvd2VyQ2FzZSgpLHBbT10pWj1wW09dLmtleSxZPXBbT10uaXY7ZWxzZXtpZighVltPXSl0aHJvdyBuZXcgVHlwZUVy''@;'; put 'put ''cm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtaPTgqVltPXS5rZXksWT1WW09dLml2fXZhciBXPXcoSywhMSxaLFkpO3JldHVybiBSKE8sVy5rZXksVy5pdil9LFguY3JlYXRlQ2lwaGVyaXY9WC5DaXBoZXJpdj1SLFguY3JlYXRlRGVjaXBoZXI9WC5EZWNpcGhlcj1mdW5jdGlvbiBGKE8sSyl7''@;'; put 'put ''dmFyIFosWTtpZihPPU8udG9Mb3dlckNhc2UoKSxwW09dKVo9cFtPXS5rZXksWT1wW09dLml2O2Vsc2V7aWYoIVZbT10pdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7Wj04KlZbT10ua2V5LFk9VltPXS5pdn12YXIgVz13KEssITEsWixZKTtyZXR1cm4geihPLFcu''@;'; put 'put ''a2V5LFcuaXYpfSxYLmNyZWF0ZURlY2lwaGVyaXY9WC5EZWNpcGhlcml2PXosWC5saXN0Q2lwaGVycz1YLmdldENpcGhlcnM9ZnVuY3Rpb24gTigpe3JldHVybiBPYmplY3Qua2V5cyhWKS5jb25jYXQoXy5nZXRDaXBoZXJzKCkpfX0sNzY2NzooY2UsWCxiKT0+e3ZhciBJPWIoMTAyNyksXz1i''@;'; put 'put ''KDUyNTEpLHA9Yig1NzE3KSxWPWIoOTUwOSkuQnVmZmVyLHc9eyJkZXMtZWRlMy1jYmMiOl8uQ0JDLmluc3RhbnRpYXRlKF8uRURFKSwiZGVzLWVkZTMiOl8uRURFLCJkZXMtZWRlLWNiYyI6Xy5DQkMuaW5zdGFudGlhdGUoXy5FREUpLCJkZXMtZWRlIjpfLkVERSwiZGVzLWNiYyI6Xy5DQkMu''@;'; put 'put ''aW5zdGFudGlhdGUoXy5ERVMpLCJkZXMtZWNiIjpfLkRFU307ZnVuY3Rpb24gUChGKXtJLmNhbGwodGhpcyk7dmFyIE4sUj1GLm1vZGUudG9Mb3dlckNhc2UoKSx6PXdbUl07Tj1GLmRlY3J5cHQ/ImRlY3J5cHQiOiJlbmNyeXB0Ijt2YXIgTz1GLmtleTtWLmlzQnVmZmVyKE8pfHwoTz1WLmZy''@;'; put 'put ''b20oTykpLCgiZGVzLWVkZSI9PT1SfHwiZGVzLWVkZS1jYmMiPT09UikmJihPPVYuY29uY2F0KFtPLE8uc2xpY2UoMCw4KV0pKTt2YXIgSz1GLml2O1YuaXNCdWZmZXIoSyl8fChLPVYuZnJvbShLKSksdGhpcy5fZGVzPXouY3JlYXRlKHtrZXk6TyxpdjpLLHR5cGU6Tn0pfXcuZGVzPXdbImRl''@;'; put 'put ''cy1jYmMiXSx3LmRlczM9d1siZGVzLWVkZTMtY2JjIl0sY2UuZXhwb3J0cz1QLHAoUCxJKSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEYpe3JldHVybiBWLmZyb20odGhpcy5fZGVzLnVwZGF0ZShGKSl9LFAucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3JldHVybiBWLmZyb20o''@;'; put 'put ''dGhpcy5fZGVzLmZpbmFsKCkpfX0sOTcxNTooY2UsWCk9PntYWyJkZXMtZWNiIl09e2tleTo4LGl2OjB9LFhbImRlcy1jYmMiXT1YLmRlcz17a2V5OjgsaXY6OH0sWFsiZGVzLWVkZTMtY2JjIl09WC5kZXMzPXtrZXk6MjQsaXY6OH0sWFsiZGVzLWVkZTMiXT17a2V5OjI0LGl2OjB9LFhbImRl''@;'; put 'put ''cy1lZGUtY2JjIl09e2tleToxNixpdjo4fSxYWyJkZXMtZWRlIl09e2tleToxNixpdjowfX0sMzY2MzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDM1NTApLF89YigxNzk4KSxwPWIoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIFYoRil7dmFyIHosUj1GLm1vZHVsdXMuYnl0ZUxlbmd0''@;'; put 'put ''aCgpO2Rve3o9bmV3IEkoXyhSKSl9d2hpbGUoei5jbXAoRi5tb2R1bHVzKT49MHx8IXoudW1vZChGLnByaW1lMSl8fCF6LnVtb2QoRi5wcmltZTIpKTtyZXR1cm4gen1mdW5jdGlvbiBQKEYsUil7dmFyIHo9ZnVuY3Rpb24gdyhGKXt2YXIgUj1WKEYpO3JldHVybntibGluZGVyOlIudG9SZWQo''@;'; put 'put ''SS5tb250KEYubW9kdWx1cykpLnJlZFBvdyhuZXcgSShGLnB1YmxpY0V4cG9uZW50KSkuZnJvbVJlZCgpLHVuYmxpbmRlcjpSLmludm0oRi5tb2R1bHVzKX19KFIpLE49Ui5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxPPW5ldyBJKEYpLm11bCh6LmJsaW5kZXIpLnVtb2QoUi5tb2R1bHVzKSxLPU8u''@;'; put 'put ''dG9SZWQoSS5tb250KFIucHJpbWUxKSksWj1PLnRvUmVkKEkubW9udChSLnByaW1lMikpLFk9Ui5jb2VmZmljaWVudCxXPVIucHJpbWUxLHE9Ui5wcmltZTIsZWU9Sy5yZWRQb3coUi5leHBvbmVudDEpLmZyb21SZWQoKSxKPVoucmVkUG93KFIuZXhwb25lbnQyKS5mcm9tUmVkKCkscmU9ZWUu''@;'; put 'put ''aXN1YihKKS5pbXVsKFkpLnVtb2QoVykuaW11bChxKTtyZXR1cm4gSi5pYWRkKHJlKS5pbXVsKHoudW5ibGluZGVyKS51bW9kKFIubW9kdWx1cykudG9BcnJheUxpa2UocCwiYmUiLE4pfVAuZ2V0cj1WLGNlLmV4cG9ydHM9UH0sNjA0MjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBv''@;'; put 'put ''cnRzPWIoNTIwNyl9LDQ3NDM6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig5NTA5KS5CdWZmZXIsXz1iKDM0ODIpLHA9YigzODcyKSxWPWIoNTcxNyksdz1iKDI5NTcpLFA9Yig3NzUzKSxGPWIoNTIwNyk7ZnVuY3Rpb24gUihLKXtwLldyaXRhYmxlLmNhbGwodGhpcyk7dmFyIFo9''@;'; put 'put ''RltLXTtpZighWil0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbWVzc2FnZSBkaWdlc3QiKTt0aGlzLl9oYXNoVHlwZT1aLmhhc2gsdGhpcy5faGFzaD1fKFouaGFzaCksdGhpcy5fdGFnPVouaWQsdGhpcy5fc2lnblR5cGU9Wi5zaWdufWZ1bmN0aW9uIHooSyl7cC5Xcml0YWJsZS5jYWxsKHRo''@;'; put 'put ''aXMpO3ZhciBaPUZbS107aWYoIVopdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG1lc3NhZ2UgZGlnZXN0Iik7dGhpcy5faGFzaD1fKFouaGFzaCksdGhpcy5fdGFnPVouaWQsdGhpcy5fc2lnblR5cGU9Wi5zaWdufWZ1bmN0aW9uIE4oSyl7cmV0dXJuIG5ldyBSKEspfWZ1bmN0aW9uIE8oSyl7''@;'; put 'put ''cmV0dXJuIG5ldyB6KEspfU9iamVjdC5rZXlzKEYpLmZvckVhY2goZnVuY3Rpb24oSyl7RltLXS5pZD1JLmZyb20oRltLXS5pZCwiaGV4IiksRltLLnRvTG93ZXJDYXNlKCldPUZbS119KSxWKFIscC5Xcml0YWJsZSksUi5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKFosWSxXKXt0aGlzLl9o''@;'; put 'put ''YXNoLnVwZGF0ZShaKSxXKCl9LFIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihaLFkpe3JldHVybiB0aGlzLl9oYXNoLnVwZGF0ZSgic3RyaW5nIj09dHlwZW9mIFo/SS5mcm9tKFosWSk6WiksdGhpc30sUi5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihaLFkpe3RoaXMuZW5kKCk7dmFyIFc9''@;'; put 'put ''dGhpcy5faGFzaC5kaWdlc3QoKSxxPXcoVyxaLHRoaXMuX2hhc2hUeXBlLHRoaXMuX3NpZ25UeXBlLHRoaXMuX3RhZyk7cmV0dXJuIFk/cS50b1N0cmluZyhZKTpxfSxWKHoscC5Xcml0YWJsZSksei5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKFosWSxXKXt0aGlzLl9oYXNoLnVwZGF0ZSha''@;'; put 'put ''KSxXKCl9LHoucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihaLFkpe3JldHVybiB0aGlzLl9oYXNoLnVwZGF0ZSgic3RyaW5nIj09dHlwZW9mIFo/SS5mcm9tKFosWSk6WiksdGhpc30sei5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKFosWSxXKXt2YXIgcT0ic3RyaW5nIj09dHlwZW9mIFk/''@;'; put 'put ''SS5mcm9tKFksVyk6WTt0aGlzLmVuZCgpO3ZhciBlZT10aGlzLl9oYXNoLmRpZ2VzdCgpO3JldHVybiBQKHEsZWUsWix0aGlzLl9zaWduVHlwZSx0aGlzLl90YWcpfSxjZS5leHBvcnRzPXtTaWduOk4sVmVyaWZ5Ok8sY3JlYXRlU2lnbjpOLGNyZWF0ZVZlcmlmeTpPfX0sMjk1NzooY2UsWCxi''@;'; put 'put ''KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDk1MDkpLkJ1ZmZlcixfPWIoODM1NSkscD1iKDM2NjMpLFY9Yig2OTQ4KS5lYyx3PWIoMzU1MCksUD1iKDk4MCksRj1iKDEzMDgpO2Z1bmN0aW9uIFooSixyZSxpZSx1ZSl7aWYoKEo9SS5mcm9tKEoudG9BcnJheSgpKSkubGVuZ3RoPHJlLmJ5dGVM''@;'; put 'put ''ZW5ndGgoKSl7dmFyIGdlPUkuYWxsb2MocmUuYnl0ZUxlbmd0aCgpLUoubGVuZ3RoKTtKPUkuY29uY2F0KFtnZSxKXSl9dmFyIF9lPWllLmxlbmd0aCxUZT1mdW5jdGlvbiBXKEoscmUpe0o9KEo9WShKLHJlKSkubW9kKHJlKTt2YXIgaWU9SS5mcm9tKEoudG9BcnJheSgpKTtpZihpZS5sZW5n''@;'; put 'put ''dGg8cmUuYnl0ZUxlbmd0aCgpKXt2YXIgdWU9SS5hbGxvYyhyZS5ieXRlTGVuZ3RoKCktaWUubGVuZ3RoKTtpZT1JLmNvbmNhdChbdWUsaWVdKX1yZXR1cm4gaWV9KGllLHJlKSxNZT1JLmFsbG9jKF9lKTtNZS5maWxsKDEpO3ZhciBaZT1JLmFsbG9jKF9lKTtyZXR1cm4gWmU9Xyh1ZSxaZSku''@;'; put 'put ''dXBkYXRlKE1lKS51cGRhdGUoSS5mcm9tKFswXSkpLnVwZGF0ZShKKS51cGRhdGUoVGUpLmRpZ2VzdCgpLE1lPV8odWUsWmUpLnVwZGF0ZShNZSkuZGlnZXN0KCkse2s6WmU9Xyh1ZSxaZSkudXBkYXRlKE1lKS51cGRhdGUoSS5mcm9tKFsxXSkpLnVwZGF0ZShKKS51cGRhdGUoVGUpLmRpZ2Vz''@;'; put 'put ''dCgpLHY6TWU9Xyh1ZSxaZSkudXBkYXRlKE1lKS5kaWdlc3QoKX19ZnVuY3Rpb24gWShKLHJlKXt2YXIgaWU9bmV3IHcoSiksdWU9KEoubGVuZ3RoPDwzKS1yZS5iaXRMZW5ndGgoKTtyZXR1cm4gdWU+MCYmaWUuaXNocm4odWUpLGllfWZ1bmN0aW9uIHEoSixyZSxpZSl7dmFyIHVlLGdlO2Rv''@;'; put 'put ''e2Zvcih1ZT1JLmFsbG9jKDApOzgqdWUubGVuZ3RoPEouYml0TGVuZ3RoKCk7KXJlLnY9XyhpZSxyZS5rKS51cGRhdGUocmUudikuZGlnZXN0KCksdWU9SS5jb25jYXQoW3VlLHJlLnZdKTtnZT1ZKHVlLEopLHJlLms9XyhpZSxyZS5rKS51cGRhdGUocmUudikudXBkYXRlKEkuZnJvbShbMF0p''@;'; put 'put ''KS5kaWdlc3QoKSxyZS52PV8oaWUscmUuaykudXBkYXRlKHJlLnYpLmRpZ2VzdCgpfXdoaWxlKC0xIT09Z2UuY21wKEopKTtyZXR1cm4gZ2V9ZnVuY3Rpb24gZWUoSixyZSxpZSx1ZSl7cmV0dXJuIEoudG9SZWQody5tb250KGllKSkucmVkUG93KHJlKS5mcm9tUmVkKCkubW9kKHVlKX1jZS5l''@;'; put 'put ''eHBvcnRzPWZ1bmN0aW9uIHooSixyZSxpZSx1ZSxnZSl7dmFyIF9lPVAocmUpO2lmKF9lLmN1cnZlKXtpZigiZWNkc2EiIT09dWUmJiJlY2RzYS9yc2EiIT09dWUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uIE4oSixyZSl7dmFyIGll''@;'; put 'put ''PUZbcmUuY3VydmUuam9pbigiLiIpXTtpZighaWUpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGN1cnZlICIrcmUuY3VydmUuam9pbigiLiIpKTt2YXIgX2U9bmV3IFYoaWUpLmtleUZyb21Qcml2YXRlKHJlLnByaXZhdGVLZXkpLnNpZ24oSik7cmV0dXJuIEkuZnJvbShfZS50b0RFUigpKX0o''@;'; put 'put ''SixfZSl9aWYoImRzYSI9PT1fZS50eXBlKXtpZigiZHNhIiE9PXVlKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBPKEoscmUsaWUpe2Zvcih2YXIgWmUsdWU9cmUucGFyYW1zLnByaXZfa2V5LGdlPXJlLnBhcmFtcy5wLF9lPXJlLnBh''@;'; put 'put ''cmFtcy5xLFRlPXJlLnBhcmFtcy5nLE1lPW5ldyB3KDApLEI9WShKLF9lKS5tb2QoX2UpLGc9ITEseT1aKHVlLF9lLEosaWUpOyExPT09ZzspTWU9ZWUoVGUsWmU9cShfZSx5LGllKSxnZSxfZSksMD09PShnPVplLmludm0oX2UpLmltdWwoQi5hZGQodWUubXVsKE1lKSkpLm1vZChfZSkpLmNt''@;'; put 'put ''cG4oMCkmJihnPSExLE1lPW5ldyB3KDApKTtyZXR1cm4gZnVuY3Rpb24gSyhKLHJlKXtKPUoudG9BcnJheSgpLHJlPXJlLnRvQXJyYXkoKSwxMjgmSlswXSYmKEo9WzBdLmNvbmNhdChKKSksMTI4JnJlWzBdJiYocmU9WzBdLmNvbmNhdChyZSkpO3ZhciB1ZT1bNDgsSi5sZW5ndGgrcmUubGVu''@;'; put 'put ''Z3RoKzQsMixKLmxlbmd0aF07cmV0dXJuIHVlPXVlLmNvbmNhdChKLFsyLHJlLmxlbmd0aF0scmUpLEkuZnJvbSh1ZSl9KE1lLGcpfShKLF9lLGllKX1pZigicnNhIiE9PXVlJiYiZWNkc2EvcnNhIiE9PXVlKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO2lmKHZv''@;'; put 'put ''aWQgMCE9PXJlLnBhZGRpbmcmJjEhPT1yZS5wYWRkaW5nKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBvciB1bnN1cHBvcnRlZCBwYWRkaW5nIG1vZGUiKTtKPUkuY29uY2F0KFtnZSxKXSk7Zm9yKHZhciBUZT1fZS5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxNZT1bMCwxXTtKLmxlbmd0aCtNZS5s''@;'; put 'put ''ZW5ndGgrMTxUZTspTWUucHVzaCgyNTUpO01lLnB1c2goMCk7Zm9yKHZhciBaZT0tMTsrK1plPEoubGVuZ3RoOylNZS5wdXNoKEpbWmVdKTtyZXR1cm4gcChNZSxfZSl9LGNlLmV4cG9ydHMuZ2V0S2V5PVosY2UuZXhwb3J0cy5tYWtlS2V5PXF9LDc3NTM6KGNlLFgsYik9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIEk9Yig5NTA5KS5CdWZmZXIsXz1iKDM1NTApLHA9Yig2OTQ4KS5lYyxWPWIoOTgwKSx3PWIoMTMwOCk7ZnVuY3Rpb24geihOLE8pe2lmKE4uY21wbigwKTw9MCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2lnIik7aWYoTi5jbXAoTyk+PTApdGhyb3cgbmV3IEVycm9yKCJpbnZh''@;'; put 'put ''bGlkIHNpZyIpfWNlLmV4cG9ydHM9ZnVuY3Rpb24gUChOLE8sSyxaLFkpe3ZhciBXPVYoSyk7aWYoImVjIj09PVcudHlwZSl7aWYoImVjZHNhIiE9PVomJiJlY2RzYS9yc2EiIT09Wil0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBGKE4s''@;'; put 'put ''TyxLKXt2YXIgWj13W0suZGF0YS5hbGdvcml0aG0uY3VydmUuam9pbigiLiIpXTtpZighWil0aHJvdyBuZXcgRXJyb3IoInVua25vd24gY3VydmUgIitLLmRhdGEuYWxnb3JpdGhtLmN1cnZlLmpvaW4oIi4iKSk7cmV0dXJuIG5ldyBwKFopLnZlcmlmeShPLE4sSy5kYXRhLnN1YmplY3RQcml2''@;'; put 'put ''YXRlS2V5LmRhdGEpfShOLE8sVyl9aWYoImRzYSI9PT1XLnR5cGUpe2lmKCJkc2EiIT09Wil0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBSKE4sTyxLKXt2YXIgWj1LLmRhdGEucCxZPUsuZGF0YS5xLFc9Sy5kYXRhLmcscT1LLmRhdGEu''@;'; put 'put ''cHViX2tleSxlZT1WLnNpZ25hdHVyZS5kZWNvZGUoTiwiZGVyIiksSj1lZS5zLHJlPWVlLnI7eihKLFkpLHoocmUsWSk7dmFyIGllPV8ubW9udChaKSx1ZT1KLmludm0oWSk7cmV0dXJuIDA9PT1XLnRvUmVkKGllKS5yZWRQb3cobmV3IF8oTykubXVsKHVlKS5tb2QoWSkpLmZyb21SZWQoKS5t''@;'; put 'put ''dWwocS50b1JlZChpZSkucmVkUG93KHJlLm11bCh1ZSkubW9kKFkpKS5mcm9tUmVkKCkpLm1vZChaKS5tb2QoWSkuY21wKHJlKX0oTixPLFcpfWlmKCJyc2EiIT09WiYmImVjZHNhL3JzYSIhPT1aKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHVibGljIGtleSB0eXBlIik7Tz1JLmNvbmNhdChb''@;'; put 'put ''WSxPXSk7Zm9yKHZhciBxPVcubW9kdWx1cy5ieXRlTGVuZ3RoKCksZWU9WzFdLEo9MDtPLmxlbmd0aCtlZS5sZW5ndGgrMjxxOyllZS5wdXNoKDI1NSksSis9MTtlZS5wdXNoKDApO2Zvcih2YXIgcmU9LTE7KytyZTxPLmxlbmd0aDspZWUucHVzaChPW3JlXSk7ZWU9SS5mcm9tKGVlKTt2YXIg''@;'; put 'put ''aWU9Xy5tb250KFcubW9kdWx1cyk7Tj0oTj1uZXcgXyhOKS50b1JlZChpZSkpLnJlZFBvdyhuZXcgXyhXLnB1YmxpY0V4cG9uZW50KSksTj1JLmZyb20oTi5mcm9tUmVkKCkudG9BcnJheSgpKTt2YXIgdWU9Sjw4PzE6MDtmb3IocT1NYXRoLm1pbihOLmxlbmd0aCxlZS5sZW5ndGgpLE4ubGVu''@;'; put 'put ''Z3RoIT09ZWUubGVuZ3RoJiYodWU9MSkscmU9LTE7KytyZTxxOyl1ZXw9TltyZV1eZWVbcmVdO3JldHVybiAwPT09dWV9fSw0MzkwOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoODIxMiksXz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oSyl7dmFyIFo9W107Zm9yKHZhciBZIGluIEsp''@;'; put 'put ''Wi5wdXNoKFkpO3JldHVybiBafTtjZS5leHBvcnRzPXo7dmFyIHA9T2JqZWN0LmNyZWF0ZShiKDY0OTcpKTtwLmluaGVyaXRzPWIoNTcxNyk7dmFyIFY9Yig0OTYwKSx3PWIoMjAxMCk7cC5pbmhlcml0cyh6LFYpO2Zvcih2YXIgUD1fKHcucHJvdG90eXBlKSxGPTA7RjxQLmxlbmd0aDtGKysp''@;'; put 'put ''e3ZhciBSPVBbRl07ei5wcm90b3R5cGVbUl18fCh6LnByb3RvdHlwZVtSXT13LnByb3RvdHlwZVtSXSl9ZnVuY3Rpb24geihLKXtpZighKHRoaXMgaW5zdGFuY2VvZiB6KSlyZXR1cm4gbmV3IHooSyk7Vi5jYWxsKHRoaXMsSyksdy5jYWxsKHRoaXMsSyksSyYmITE9PT1LLnJlYWRhYmxlJiYo''@;'; put 'put ''dGhpcy5yZWFkYWJsZT0hMSksSyYmITE9PT1LLndyaXRhYmxlJiYodGhpcy53cml0YWJsZT0hMSksdGhpcy5hbGxvd0hhbGZPcGVuPSEwLEsmJiExPT09Sy5hbGxvd0hhbGZPcGVuJiYodGhpcy5hbGxvd0hhbGZPcGVuPSExKSx0aGlzLm9uY2UoImVuZCIsTil9ZnVuY3Rpb24gTigpe3RoaXMu''@;'; put 'put ''YWxsb3dIYWxmT3Blbnx8dGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8SS5uZXh0VGljayhPLHRoaXMpfWZ1bmN0aW9uIE8oSyl7Sy5lbmQoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoei5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoei5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAhPT10aGlzLl93''@;'; put 'put ''cml0YWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihLKXt2b2lkIDA9PT10aGlzLl9yZWFkYWJsZVN0YXRlfHx2b2lkIDA9PT10aGlzLl93cml0YWJsZVN0YXRlfHwodGhpcy5fcmVhZGFi''@;'; put 'put ''bGVTdGF0ZS5kZXN0cm95ZWQ9Syx0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1LKX19KSx6LnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihLLFope3RoaXMucHVzaChudWxsKSx0aGlzLmVuZCgpLEkubmV4dFRpY2soWixLKX19LDEyOTQ6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''Y2UuZXhwb3J0cz1wO3ZhciBJPWIoMzkxMiksXz1PYmplY3QuY3JlYXRlKGIoNjQ5NykpO2Z1bmN0aW9uIHAoVil7aWYoISh0aGlzIGluc3RhbmNlb2YgcCkpcmV0dXJuIG5ldyBwKFYpO0kuY2FsbCh0aGlzLFYpfV8uaW5oZXJpdHM9Yig1NzE3KSxfLmluaGVyaXRzKHAsSSkscC5wcm90b3R5''@;'; put 'put ''cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihWLHcsUCl7UChudWxsLFYpfX0sNDk2MDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQxNTUpLF89Yig4MjEyKTtjZS5leHBvcnRzPXVlO3ZhciBWLHA9Yig1ODI2KTt1ZS5SZWFkYWJsZVN0YXRlPWllLGIoNzE4Nyk7dmFyIFA9ZnVuY3Rp''@;'; put 'put ''b24oeWUsS2Upe3JldHVybiB5ZS5saXN0ZW5lcnMoS2UpLmxlbmd0aH0sRj1iKDk4MTkpLFI9YigxNTcyKS5CdWZmZXIsej0odHlwZW9mIGIuZzwidSI/Yi5nOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9''@;'; put 'put ''LEs9T2JqZWN0LmNyZWF0ZShiKDY0OTcpKTtLLmluaGVyaXRzPWIoNTcxNyk7dmFyIFo9Yig2MzUzKSxZPXZvaWQgMDtZPVomJlouZGVidWdsb2c/Wi5kZWJ1Z2xvZygic3RyZWFtIik6ZnVuY3Rpb24oKXt9O3ZhciBlZSxXPWIoMjI2NykscT1iKDU5OTcpO0suaW5oZXJpdHModWUsRik7dmFy''@;'; put 'put ''IEo9WyJlcnJvciIsImNsb3NlIiwiZGVzdHJveSIsInBhdXNlIiwicmVzdW1lIl07ZnVuY3Rpb24gaWUoeWUsS2Upe3ZhciBqZT1LZSBpbnN0YW5jZW9mKFY9Vnx8Yig0MzkwKSk7dGhpcy5vYmplY3RNb2RlPSEhKHllPXllfHx7fSkub2JqZWN0TW9kZSxqZSYmKHRoaXMub2JqZWN0TW9kZT10''@;'; put 'put ''aGlzLm9iamVjdE1vZGV8fCEheWUucmVhZGFibGVPYmplY3RNb2RlKTt2YXIga2U9eWUuaGlnaFdhdGVyTWFyayxIZT15ZS5yZWFkYWJsZUhpZ2hXYXRlck1hcms7dGhpcy5oaWdoV2F0ZXJNYXJrPWtlfHwwPT09a2U/a2U6amUmJihIZXx8MD09PUhlKT9IZTp0aGlzLm9iamVjdE1vZGU/MTY6''@;'; put 'put ''MTYzODQsdGhpcy5oaWdoV2F0ZXJNYXJrPU1hdGguZmxvb3IodGhpcy5oaWdoV2F0ZXJNYXJrKSx0aGlzLmJ1ZmZlcj1uZXcgVyx0aGlzLmxlbmd0aD0wLHRoaXMucGlwZXM9bnVsbCx0aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1p''@;'; put 'put ''dHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5zeW5jPSEwLHRoaXMubmVlZFJlYWRhYmxlPSExLHRoaXMuZW1pdHRlZFJlYWRhYmxlPSExLHRoaXMucmVhZGFibGVMaXN0ZW5pbmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWZhdWx0RW5j''@;'; put 'put ''b2Rpbmc9eWUuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5hd2FpdERyYWluPTAsdGhpcy5yZWFkaW5nTW9yZT0hMSx0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmVuY29kaW5nPW51bGwseWUuZW5jb2RpbmcmJihlZXx8KGVlPWIoMjIyMSkucyksdGhpcy5kZWNvZGVyPW5ldyBlZSh5ZS5l''@;'; put 'put ''bmNvZGluZyksdGhpcy5lbmNvZGluZz15ZS5lbmNvZGluZyl9ZnVuY3Rpb24gdWUoeWUpe2lmKFY9Vnx8Yig0MzkwKSwhKHRoaXMgaW5zdGFuY2VvZiB1ZSkpcmV0dXJuIG5ldyB1ZSh5ZSk7dGhpcy5fcmVhZGFibGVTdGF0ZT1uZXcgaWUoeWUsdGhpcyksdGhpcy5yZWFkYWJsZT0hMCx5ZSYm''@;'; put 'put ''KCJmdW5jdGlvbiI9PXR5cGVvZiB5ZS5yZWFkJiYodGhpcy5fcmVhZD15ZS5yZWFkKSwiZnVuY3Rpb24iPT10eXBlb2YgeWUuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9eWUuZGVzdHJveSkpLEYuY2FsbCh0aGlzKX1mdW5jdGlvbiBnZSh5ZSxLZSxqZSxrZSxIZSl7dmFyIFJlLExlPXllLl9y''@;'; put 'put ''ZWFkYWJsZVN0YXRlO3JldHVybiBudWxsPT09S2U/KExlLnJlYWRpbmc9ITEsZnVuY3Rpb24geSh5ZSxLZSl7aWYoIUtlLmVuZGVkKXtpZihLZS5kZWNvZGVyKXt2YXIgamU9S2UuZGVjb2Rlci5lbmQoKTtqZSYmamUubGVuZ3RoJiYoS2UuYnVmZmVyLnB1c2goamUpLEtlLmxlbmd0aCs9S2Uu''@;'; put 'put ''b2JqZWN0TW9kZT8xOmplLmxlbmd0aCl9S2UuZW5kZWQ9ITAseCh5ZSl9fSh5ZSxMZSkpOihIZXx8KFJlPWZ1bmN0aW9uIFRlKHllLEtlKXt2YXIgamU7cmV0dXJuIWZ1bmN0aW9uIE8oeWUpe3JldHVybiBSLmlzQnVmZmVyKHllKXx8eWUgaW5zdGFuY2VvZiB6fShLZSkmJiJzdHJpbmciIT10''@;'; put 'put ''eXBlb2YgS2UmJnZvaWQgMCE9PUtlJiYheWUub2JqZWN0TW9kZSYmKGplPW5ldyBUeXBlRXJyb3IoIkludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsiKSksamV9KExlLEtlKSksUmU/eWUuZW1pdCgiZXJyb3IiLFJlKTpMZS5vYmplY3RNb2RlfHxLZSYmS2UubGVuZ3RoPjA/KCJzdHJp''@;'; put 'put ''bmciIT10eXBlb2YgS2UmJiFMZS5vYmplY3RNb2RlJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoS2UpIT09Ui5wcm90b3R5cGUmJihLZT1mdW5jdGlvbiBOKHllKXtyZXR1cm4gUi5mcm9tKHllKX0oS2UpKSxrZT9MZS5lbmRFbWl0dGVkP3llLmVtaXQoImVycm9yIixuZXcgRXJyb3IoInN0cmVh''@;'; put 'put ''bS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50IikpOl9lKHllLExlLEtlLCEwKTpMZS5lbmRlZD95ZS5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRiIpKTooTGUucmVhZGluZz0hMSxMZS5kZWNvZGVyJiYhamU/KEtlPUxlLmRlY29kZXIud3JpdGUoS2Up''@;'; put 'put ''LExlLm9iamVjdE1vZGV8fDAhPT1LZS5sZW5ndGg/X2UoeWUsTGUsS2UsITEpOlQoeWUsTGUpKTpfZSh5ZSxMZSxLZSwhMSkpKTprZXx8KExlLnJlYWRpbmc9ITEpKSxmdW5jdGlvbiBNZSh5ZSl7cmV0dXJuIXllLmVuZGVkJiYoeWUubmVlZFJlYWRhYmxlfHx5ZS5sZW5ndGg8eWUuaGlnaFdh''@;'; put 'put ''dGVyTWFya3x8MD09PXllLmxlbmd0aCl9KExlKX1mdW5jdGlvbiBfZSh5ZSxLZSxqZSxrZSl7S2UuZmxvd2luZyYmMD09PUtlLmxlbmd0aCYmIUtlLnN5bmM/KHllLmVtaXQoImRhdGEiLGplKSx5ZS5yZWFkKDApKTooS2UubGVuZ3RoKz1LZS5vYmplY3RNb2RlPzE6amUubGVuZ3RoLGtlP0tl''@;'; put 'put ''LmJ1ZmZlci51bnNoaWZ0KGplKTpLZS5idWZmZXIucHVzaChqZSksS2UubmVlZFJlYWRhYmxlJiZ4KHllKSksVCh5ZSxLZSl9ZnVuY3Rpb24gZyh5ZSxLZSl7cmV0dXJuIHllPD0wfHwwPT09S2UubGVuZ3RoJiZLZS5lbmRlZD8wOktlLm9iamVjdE1vZGU/MTp5ZSE9eWU/S2UuZmxvd2luZyYm''@;'; put 'put ''S2UubGVuZ3RoP0tlLmJ1ZmZlci5oZWFkLmRhdGEubGVuZ3RoOktlLmxlbmd0aDooeWU+S2UuaGlnaFdhdGVyTWFyayYmKEtlLmhpZ2hXYXRlck1hcms9ZnVuY3Rpb24gQih5ZSl7cmV0dXJuIHllPj04Mzg4NjA4P3llPTgzODg2MDg6KHllLS0seWV8PXllPj4+MSx5ZXw9eWU+Pj4yLHllfD15''@;'; put 'put ''ZT4+PjQseWV8PXllPj4+OCx5ZXw9eWU+Pj4xNix5ZSsrKSx5ZX0oeWUpKSx5ZTw9S2UubGVuZ3RoP3llOktlLmVuZGVkP0tlLmxlbmd0aDooS2UubmVlZFJlYWRhYmxlPSEwLDApKX1mdW5jdGlvbiB4KHllKXt2YXIgS2U9eWUuX3JlYWRhYmxlU3RhdGU7S2UubmVlZFJlYWRhYmxlPSExLEtl''@;'; put 'put ''LmVtaXR0ZWRSZWFkYWJsZXx8KFkoImVtaXRSZWFkYWJsZSIsS2UuZmxvd2luZyksS2UuZW1pdHRlZFJlYWRhYmxlPSEwLEtlLnN5bmM/Xy5uZXh0VGljayhDLHllKTpDKHllKSl9ZnVuY3Rpb24gQyh5ZSl7WSgiZW1pdCByZWFkYWJsZSIpLHllLmVtaXQoInJlYWRhYmxlIiksYWUoeWUpfWZ1''@;'; put 'put ''bmN0aW9uIFQoeWUsS2Upe0tlLnJlYWRpbmdNb3JlfHwoS2UucmVhZGluZ01vcmU9ITAsXy5uZXh0VGljayhILHllLEtlKSl9ZnVuY3Rpb24gSCh5ZSxLZSl7Zm9yKHZhciBqZT1LZS5sZW5ndGg7IUtlLnJlYWRpbmcmJiFLZS5mbG93aW5nJiYhS2UuZW5kZWQmJktlLmxlbmd0aDxLZS5oaWdo''@;'; put 'put ''V2F0ZXJNYXJrJiYoWSgibWF5YmVSZWFkTW9yZSByZWFkIDAiKSx5ZS5yZWFkKDApLGplIT09S2UubGVuZ3RoKTspamU9S2UubGVuZ3RoO0tlLnJlYWRpbmdNb3JlPSExfWZ1bmN0aW9uIEUoeWUpe1koInJlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCIpLHllLnJlYWQoMCl9ZnVuY3Rpb24gQSh5''@;'; put 'put ''ZSxLZSl7S2UucmVhZGluZ3x8KFkoInJlc3VtZSByZWFkIDAiKSx5ZS5yZWFkKDApKSxLZS5yZXN1bWVTY2hlZHVsZWQ9ITEsS2UuYXdhaXREcmFpbj0wLHllLmVtaXQoInJlc3VtZSIpLGFlKHllKSxLZS5mbG93aW5nJiYhS2UucmVhZGluZyYmeWUucmVhZCgwKX1mdW5jdGlvbiBhZSh5ZSl7''@;'; put 'put ''dmFyIEtlPXllLl9yZWFkYWJsZVN0YXRlO2ZvcihZKCJmbG93IixLZS5mbG93aW5nKTtLZS5mbG93aW5nJiZudWxsIT09eWUucmVhZCgpOyk7fWZ1bmN0aW9uIG5lKHllLEtlKXtyZXR1cm4gMD09PUtlLmxlbmd0aD9udWxsOihLZS5vYmplY3RNb2RlP2plPUtlLmJ1ZmZlci5zaGlmdCgpOiF5''@;'; put 'put ''ZXx8eWU+PUtlLmxlbmd0aD8oamU9S2UuZGVjb2Rlcj9LZS5idWZmZXIuam9pbigiIik6MT09PUtlLmJ1ZmZlci5sZW5ndGg/S2UuYnVmZmVyLmhlYWQuZGF0YTpLZS5idWZmZXIuY29uY2F0KEtlLmxlbmd0aCksS2UuYnVmZmVyLmNsZWFyKCkpOmplPWZ1bmN0aW9uIHNlKHllLEtlLGplKXt2''@;'; put 'put ''YXIga2U7cmV0dXJuIHllPEtlLmhlYWQuZGF0YS5sZW5ndGg/KGtlPUtlLmhlYWQuZGF0YS5zbGljZSgwLHllKSxLZS5oZWFkLmRhdGE9S2UuaGVhZC5kYXRhLnNsaWNlKHllKSk6a2U9eWU9PT1LZS5oZWFkLmRhdGEubGVuZ3RoP0tlLnNoaWZ0KCk6amU/ZnVuY3Rpb24gQ2UoeWUsS2Upe3Zh''@;'; put 'put ''ciBqZT1LZS5oZWFkLGtlPTEsSGU9amUuZGF0YTtmb3IoeWUtPUhlLmxlbmd0aDtqZT1qZS5uZXh0Oyl7dmFyIExlPWplLmRhdGEsUmU9eWU+TGUubGVuZ3RoP0xlLmxlbmd0aDp5ZTtpZihIZSs9UmU9PT1MZS5sZW5ndGg/TGU6TGUuc2xpY2UoMCx5ZSksMD09KHllLT1SZSkpe1JlPT09TGUu''@;'; put 'put ''bGVuZ3RoPygrK2tlLEtlLmhlYWQ9amUubmV4dD9qZS5uZXh0OktlLnRhaWw9bnVsbCk6KEtlLmhlYWQ9amUsamUuZGF0YT1MZS5zbGljZShSZSkpO2JyZWFrfSsra2V9cmV0dXJuIEtlLmxlbmd0aC09a2UsSGV9KHllLEtlKTpmdW5jdGlvbiBVZSh5ZSxLZSl7dmFyIGplPVIuYWxsb2NVbnNh''@;'; put 'put ''ZmUoeWUpLGtlPUtlLmhlYWQsSGU9MTtmb3Ioa2UuZGF0YS5jb3B5KGplKSx5ZS09a2UuZGF0YS5sZW5ndGg7a2U9a2UubmV4dDspe3ZhciBMZT1rZS5kYXRhLFJlPXllPkxlLmxlbmd0aD9MZS5sZW5ndGg6eWU7aWYoTGUuY29weShqZSxqZS5sZW5ndGgteWUsMCxSZSksMD09KHllLT1SZSkp''@;'; put 'put ''e1JlPT09TGUubGVuZ3RoPygrK0hlLEtlLmhlYWQ9a2UubmV4dD9rZS5uZXh0OktlLnRhaWw9bnVsbCk6KEtlLmhlYWQ9a2Usa2UuZGF0YT1MZS5zbGljZShSZSkpO2JyZWFrfSsrSGV9cmV0dXJuIEtlLmxlbmd0aC09SGUsamV9KHllLEtlKSxrZX0oeWUsS2UuYnVmZmVyLEtlLmRlY29kZXIp''@;'; put 'put ''LGplKTt2YXIgamV9ZnVuY3Rpb24gSmUoeWUpe3ZhciBLZT15ZS5fcmVhZGFibGVTdGF0ZTtpZihLZS5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoJyJlbmRSZWFkYWJsZSgpIiBjYWxsZWQgb24gbm9uLWVtcHR5IHN0cmVhbScpO0tlLmVuZEVtaXR0ZWR8fChLZS5lbmRlZD0hMCxfLm5leHRU''@;'; put 'put ''aWNrKGl0LEtlLHllKSl9ZnVuY3Rpb24gaXQoeWUsS2UpeyF5ZS5lbmRFbWl0dGVkJiYwPT09eWUubGVuZ3RoJiYoeWUuZW5kRW1pdHRlZD0hMCxLZS5yZWFkYWJsZT0hMSxLZS5lbWl0KCJlbmQiKSl9ZnVuY3Rpb24geGUoeWUsS2Upe2Zvcih2YXIgamU9MCxrZT15ZS5sZW5ndGg7amU8a2U7''@;'; put 'put ''amUrKylpZih5ZVtqZV09PT1LZSlyZXR1cm4gamU7cmV0dXJuLTF9T2JqZWN0LmRlZmluZVByb3BlcnR5KHVlLnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJv''@;'; put 'put ''eWVkfSxzZXQ6ZnVuY3Rpb24oeWUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD15ZSl9fSksdWUucHJvdG90eXBlLmRlc3Ryb3k9cS5kZXN0cm95LHVlLnByb3RvdHlwZS5fdW5kZXN0cm95PXEudW5kZXN0cm95LHVlLnByb3RvdHlwZS5fZGVz''@;'; put 'put ''dHJveT1mdW5jdGlvbih5ZSxLZSl7dGhpcy5wdXNoKG51bGwpLEtlKHllKX0sdWUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oeWUsS2Upe3ZhciBrZSxqZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBqZS5vYmplY3RNb2RlP2tlPSEwOiJzdHJpbmciPT10eXBlb2YgeWUmJigoS2U9S2V8''@;'; put 'put ''fGplLmRlZmF1bHRFbmNvZGluZykhPT1qZS5lbmNvZGluZyYmKHllPVIuZnJvbSh5ZSxLZSksS2U9IiIpLGtlPSEwKSxnZSh0aGlzLHllLEtlLCExLGtlKX0sdWUucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24oeWUpe3JldHVybiBnZSh0aGlzLHllLG51bGwsITAsITEpfSx1ZS5wcm90b3R5''@;'; put 'put ''cGUuaXNQYXVzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMT09PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZ30sdWUucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0aW9uKHllKXtyZXR1cm4gZWV8fChlZT1iKDIyMjEpLnMpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlcj1uZXcgZWUoeWUp''@;'; put 'put ''LHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9eWUsdGhpc30sdWUucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24oeWUpe1koInJlYWQiLHllKSx5ZT1wYXJzZUludCh5ZSwxMCk7dmFyIEtlPXRoaXMuX3JlYWRhYmxlU3RhdGUsamU9eWU7aWYoMCE9PXllJiYoS2UuZW1pdHRlZFJlYWRhYmxl''@;'; put 'put ''PSExKSwwPT09eWUmJktlLm5lZWRSZWFkYWJsZSYmKEtlLmxlbmd0aD49S2UuaGlnaFdhdGVyTWFya3x8S2UuZW5kZWQpKXJldHVybiBZKCJyZWFkOiBlbWl0UmVhZGFibGUiLEtlLmxlbmd0aCxLZS5lbmRlZCksMD09PUtlLmxlbmd0aCYmS2UuZW5kZWQ/SmUodGhpcyk6eCh0aGlzKSxudWxs''@;'; put 'put ''O2lmKDA9PT0oeWU9Zyh5ZSxLZSkpJiZLZS5lbmRlZClyZXR1cm4gMD09PUtlLmxlbmd0aCYmSmUodGhpcyksbnVsbDt2YXIgSGUsa2U9S2UubmVlZFJlYWRhYmxlO3JldHVybiBZKCJuZWVkIHJlYWRhYmxlIixrZSksKDA9PT1LZS5sZW5ndGh8fEtlLmxlbmd0aC15ZTxLZS5oaWdoV2F0ZXJN''@;'; put 'put ''YXJrKSYmWSgibGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsiLGtlPSEwKSxLZS5lbmRlZHx8S2UucmVhZGluZz9ZKCJyZWFkaW5nIG9yIGVuZGVkIixrZT0hMSk6a2UmJihZKCJkbyByZWFkIiksS2UucmVhZGluZz0hMCxLZS5zeW5jPSEwLDA9PT1LZS5sZW5ndGgmJihLZS5uZWVkUmVhZGFi''@;'; put 'put ''bGU9ITApLHRoaXMuX3JlYWQoS2UuaGlnaFdhdGVyTWFyayksS2Uuc3luYz0hMSxLZS5yZWFkaW5nfHwoeWU9ZyhqZSxLZSkpKSxudWxsPT09KEhlPXllPjA/bmUoeWUsS2UpOm51bGwpPyhLZS5uZWVkUmVhZGFibGU9ITAseWU9MCk6S2UubGVuZ3RoLT15ZSwwPT09S2UubGVuZ3RoJiYoS2Uu''@;'; put 'put ''ZW5kZWR8fChLZS5uZWVkUmVhZGFibGU9ITApLGplIT09eWUmJktlLmVuZGVkJiZKZSh0aGlzKSksbnVsbCE9PUhlJiZ0aGlzLmVtaXQoImRhdGEiLEhlKSxIZX0sdWUucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKHllKXt0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIl9yZWFkKCkgaXMg''@;'; put 'put ''bm90IGltcGxlbWVudGVkIikpfSx1ZS5wcm90b3R5cGUucGlwZT1mdW5jdGlvbih5ZSxLZSl7dmFyIGplPXRoaXMsa2U9dGhpcy5fcmVhZGFibGVTdGF0ZTtzd2l0Y2goa2UucGlwZXNDb3VudCl7Y2FzZSAwOmtlLnBpcGVzPXllO2JyZWFrO2Nhc2UgMTprZS5waXBlcz1ba2UucGlwZXMseWVd''@;'; put 'put ''O2JyZWFrO2RlZmF1bHQ6a2UucGlwZXMucHVzaCh5ZSl9a2UucGlwZXNDb3VudCs9MSxZKCJwaXBlIGNvdW50PSVkIG9wdHM9JWoiLGtlLnBpcGVzQ291bnQsS2UpO3ZhciBMZT1LZSYmITE9PT1LZS5lbmR8fHllPT09SS5zdGRvdXR8fHllPT09SS5zdGRlcnI/ZW46VmU7ZnVuY3Rpb24gVmUo''@;'; put 'put ''KXtZKCJvbmVuZCIpLHllLmVuZCgpfWtlLmVuZEVtaXR0ZWQ/Xy5uZXh0VGljayhMZSk6amUub25jZSgiZW5kIixMZSkseWUub24oInVucGlwZSIsZnVuY3Rpb24gUmUodXQsWGUpe1koIm9udW5waXBlIiksdXQ9PT1qZSYmWGUmJiExPT09WGUuaGFzVW5waXBlZCYmKFhlLmhhc1VucGlwZWQ9''@;'; put 'put ''ITAsZnVuY3Rpb24gX3QoKXtZKCJjbGVhbnVwIikseWUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIix2dCkseWUucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsU3QpLHllLnJlbW92ZUxpc3RlbmVyKCJkcmFpbiIsQWUpLHllLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsc24pLHllLnJlbW92ZUxpc3Rl''@;'; put 'put ''bmVyKCJ1bnBpcGUiLFJlKSxqZS5yZW1vdmVMaXN0ZW5lcigiZW5kIixWZSksamUucmVtb3ZlTGlzdGVuZXIoImVuZCIsZW4pLGplLnJlbW92ZUxpc3RlbmVyKCJkYXRhIixRZSksRGU9ITAsa2UuYXdhaXREcmFpbiYmKCF5ZS5fd3JpdGFibGVTdGF0ZXx8eWUuX3dyaXRhYmxlU3RhdGUubmVl''@;'; put 'put ''ZERyYWluKSYmQWUoKX0oKSl9KTt2YXIgQWU9ZnVuY3Rpb24gaih5ZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIEtlPXllLl9yZWFkYWJsZVN0YXRlO1koInBpcGVPbkRyYWluIixLZS5hd2FpdERyYWluKSxLZS5hd2FpdERyYWluJiZLZS5hd2FpdERyYWluLS0sMD09PUtlLmF3YWl0RHJhaW4m''@;'; put 'put ''JlAoeWUsImRhdGEiKSYmKEtlLmZsb3dpbmc9ITAsYWUoeWUpKX19KGplKTt5ZS5vbigiZHJhaW4iLEFlKTt2YXIgRGU9ITEscnQ9ITE7ZnVuY3Rpb24gUWUodXQpe1koIm9uZGF0YSIpLHJ0PSExLCExPT09eWUud3JpdGUodXQpJiYhcnQmJigoMT09PWtlLnBpcGVzQ291bnQmJmtlLnBpcGVz''@;'; put 'put ''PT09eWV8fGtlLnBpcGVzQ291bnQ+MSYmLTEhPT14ZShrZS5waXBlcyx5ZSkpJiYhRGUmJihZKCJmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UiLGtlLmF3YWl0RHJhaW4pLGtlLmF3YWl0RHJhaW4rKyxydD0hMCksamUucGF1c2UoKSl9ZnVuY3Rpb24gc24odXQpe1koIm9uZXJyb3IiLHV0''@;'; put 'put ''KSxlbigpLHllLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsc24pLDA9PT1QKHllLCJlcnJvciIpJiZ5ZS5lbWl0KCJlcnJvciIsdXQpfWZ1bmN0aW9uIHZ0KCl7eWUucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsU3QpLGVuKCl9ZnVuY3Rpb24gU3QoKXtZKCJvbmZpbmlzaCIpLHllLnJlbW92ZUxp''@;'; put 'put ''c3RlbmVyKCJjbG9zZSIsdnQpLGVuKCl9ZnVuY3Rpb24gZW4oKXtZKCJ1bnBpcGUiKSxqZS51bnBpcGUoeWUpfXJldHVybiBqZS5vbigiZGF0YSIsUWUpLGZ1bmN0aW9uIHJlKHllLEtlLGplKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgeWUucHJlcGVuZExpc3RlbmVyKXJldHVybiB5ZS5wcmVw''@;'; put 'put ''ZW5kTGlzdGVuZXIoS2UsamUpO3llLl9ldmVudHMmJnllLl9ldmVudHNbS2VdP3AoeWUuX2V2ZW50c1tLZV0pP3llLl9ldmVudHNbS2VdLnVuc2hpZnQoamUpOnllLl9ldmVudHNbS2VdPVtqZSx5ZS5fZXZlbnRzW0tlXV06eWUub24oS2UsamUpfSh5ZSwiZXJyb3IiLHNuKSx5ZS5vbmNlKCJj''@;'; put 'put ''bG9zZSIsdnQpLHllLm9uY2UoImZpbmlzaCIsU3QpLHllLmVtaXQoInBpcGUiLGplKSxrZS5mbG93aW5nfHwoWSgicGlwZSByZXN1bWUiKSxqZS5yZXN1bWUoKSkseWV9LHVlLnByb3RvdHlwZS51bnBpcGU9ZnVuY3Rpb24oeWUpe3ZhciBLZT10aGlzLl9yZWFkYWJsZVN0YXRlLGplPXtoYXNV''@;'; put 'put ''bnBpcGVkOiExfTtpZigwPT09S2UucGlwZXNDb3VudClyZXR1cm4gdGhpcztpZigxPT09S2UucGlwZXNDb3VudClyZXR1cm4geWUmJnllIT09S2UucGlwZXN8fCh5ZXx8KHllPUtlLnBpcGVzKSxLZS5waXBlcz1udWxsLEtlLnBpcGVzQ291bnQ9MCxLZS5mbG93aW5nPSExLHllJiZ5ZS5lbWl0''@;'; put 'put ''KCJ1bnBpcGUiLHRoaXMsamUpKSx0aGlzO2lmKCF5ZSl7dmFyIGtlPUtlLnBpcGVzLEhlPUtlLnBpcGVzQ291bnQ7S2UucGlwZXM9bnVsbCxLZS5waXBlc0NvdW50PTAsS2UuZmxvd2luZz0hMTtmb3IodmFyIExlPTA7TGU8SGU7TGUrKylrZVtMZV0uZW1pdCgidW5waXBlIix0aGlzLHtoYXNV''@;'; put 'put ''bnBpcGVkOiExfSk7cmV0dXJuIHRoaXN9dmFyIFJlPXhlKEtlLnBpcGVzLHllKTtyZXR1cm4tMT09PVJlfHwoS2UucGlwZXMuc3BsaWNlKFJlLDEpLEtlLnBpcGVzQ291bnQtPTEsMT09PUtlLnBpcGVzQ291bnQmJihLZS5waXBlcz1LZS5waXBlc1swXSkseWUuZW1pdCgidW5waXBlIix0aGlz''@;'; put 'put ''LGplKSksdGhpc30sdWUucHJvdG90eXBlLmFkZExpc3RlbmVyPXVlLnByb3RvdHlwZS5vbj1mdW5jdGlvbih5ZSxLZSl7dmFyIGplPUYucHJvdG90eXBlLm9uLmNhbGwodGhpcyx5ZSxLZSk7aWYoImRhdGEiPT09eWUpITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJnRoaXMucmVz''@;'; put 'put ''dW1lKCk7ZWxzZSBpZigicmVhZGFibGUiPT09eWUpe3ZhciBrZT10aGlzLl9yZWFkYWJsZVN0YXRlOyFrZS5lbmRFbWl0dGVkJiYha2UucmVhZGFibGVMaXN0ZW5pbmcmJihrZS5yZWFkYWJsZUxpc3RlbmluZz1rZS5uZWVkUmVhZGFibGU9ITAsa2UuZW1pdHRlZFJlYWRhYmxlPSExLGtlLnJl''@;'; put 'put ''YWRpbmc/a2UubGVuZ3RoJiZ4KHRoaXMpOl8ubmV4dFRpY2soRSx0aGlzKSl9cmV0dXJuIGplfSx1ZS5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7dmFyIHllPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIHllLmZsb3dpbmd8fChZKCJyZXN1bWUiKSx5ZS5mbG93aW5nPSEwLGZ1bmN0''@;'; put 'put ''aW9uIG0oeWUsS2Upe0tlLnJlc3VtZVNjaGVkdWxlZHx8KEtlLnJlc3VtZVNjaGVkdWxlZD0hMCxfLm5leHRUaWNrKEEseWUsS2UpKX0odGhpcyx5ZSkpLHRoaXN9LHVlLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3JldHVybiBZKCJjYWxsIHBhdXNlIGZsb3dpbmc9JWoiLHRoaXMuX3Jl''@;'; put 'put ''YWRhYmxlU3RhdGUuZmxvd2luZyksITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJihZKCJwYXVzZSIpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz0hMSx0aGlzLmVtaXQoInBhdXNlIikpLHRoaXN9LHVlLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHllKXt2YXIgS2U9dGhp''@;'; put 'put ''cyxqZT10aGlzLl9yZWFkYWJsZVN0YXRlLGtlPSExO2Zvcih2YXIgSGUgaW4geWUub24oImVuZCIsZnVuY3Rpb24oKXtpZihZKCJ3cmFwcGVkIGVuZCIpLGplLmRlY29kZXImJiFqZS5lbmRlZCl7dmFyIFJlPWplLmRlY29kZXIuZW5kKCk7UmUmJlJlLmxlbmd0aCYmS2UucHVzaChSZSl9S2Uu''@;'; put 'put ''cHVzaChudWxsKX0pLHllLm9uKCJkYXRhIixmdW5jdGlvbihSZSl7WSgid3JhcHBlZCBkYXRhIiksamUuZGVjb2RlciYmKFJlPWplLmRlY29kZXIud3JpdGUoUmUpKSxqZS5vYmplY3RNb2RlJiZudWxsPT1SZXx8IShqZS5vYmplY3RNb2RlfHxSZSYmUmUubGVuZ3RoKXx8S2UucHVzaChSZSl8''@;'; put 'put ''fChrZT0hMCx5ZS5wYXVzZSgpKX0pLHllKXZvaWQgMD09PXRoaXNbSGVdJiYiZnVuY3Rpb24iPT10eXBlb2YgeWVbSGVdJiYodGhpc1tIZV09ZnVuY3Rpb24oUmUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB5ZVtSZV0uYXBwbHkoeWUsYXJndW1lbnRzKX19KEhlKSk7Zm9yKHZhciBMZT0w''@;'; put 'put ''O0xlPEoubGVuZ3RoO0xlKyspeWUub24oSltMZV0sdGhpcy5lbWl0LmJpbmQodGhpcyxKW0xlXSkpO3JldHVybiB0aGlzLl9yZWFkPWZ1bmN0aW9uKFJlKXtZKCJ3cmFwcGVkIF9yZWFkIixSZSksa2UmJihrZT0hMSx5ZS5yZXN1bWUoKSl9LHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1''@;'; put 'put ''ZS5wcm90b3R5cGUsInJlYWRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSx1ZS5fZnJvbUxpc3Q9bmV9LDM5MTI6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0''@;'; put 'put ''cz1WO3ZhciBJPWIoNDM5MCksXz1PYmplY3QuY3JlYXRlKGIoNjQ5NykpO2Z1bmN0aW9uIHAoRixSKXt2YXIgej10aGlzLl90cmFuc2Zvcm1TdGF0ZTt6LnRyYW5zZm9ybWluZz0hMTt2YXIgTj16LndyaXRlY2I7aWYoIU4pcmV0dXJuIHRoaXMuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigid3Jp''@;'; put 'put ''dGUgY2FsbGJhY2sgY2FsbGVkIG11bHRpcGxlIHRpbWVzIikpO3oud3JpdGVjaHVuaz1udWxsLHoud3JpdGVjYj1udWxsLG51bGwhPVImJnRoaXMucHVzaChSKSxOKEYpO3ZhciBPPXRoaXMuX3JlYWRhYmxlU3RhdGU7Ty5yZWFkaW5nPSExLChPLm5lZWRSZWFkYWJsZXx8Ty5sZW5ndGg8Ty5o''@;'; put 'put ''aWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChPLmhpZ2hXYXRlck1hcmspfWZ1bmN0aW9uIFYoRil7aWYoISh0aGlzIGluc3RhbmNlb2YgVikpcmV0dXJuIG5ldyBWKEYpO0kuY2FsbCh0aGlzLEYpLHRoaXMuX3RyYW5zZm9ybVN0YXRlPXthZnRlclRyYW5zZm9ybTpwLmJpbmQodGhpcyksbmVl''@;'; put 'put ''ZFRyYW5zZm9ybTohMSx0cmFuc2Zvcm1pbmc6ITEsd3JpdGVjYjpudWxsLHdyaXRlY2h1bms6bnVsbCx3cml0ZWVuY29kaW5nOm51bGx9LHRoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlPSEwLHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYz0hMSxGJiYoImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IEYudHJhbnNmb3JtJiYodGhpcy5fdHJhbnNmb3JtPUYudHJhbnNmb3JtKSwiZnVuY3Rpb24iPT10eXBlb2YgRi5mbHVzaCYmKHRoaXMuX2ZsdXNoPUYuZmx1c2gpKSx0aGlzLm9uKCJwcmVmaW5pc2giLHcpfWZ1bmN0aW9uIHcoKXt2YXIgRj10aGlzOyJmdW5jdGlvbiI9PXR5cGVvZiB0aGlz''@;'; put 'put ''Ll9mbHVzaD90aGlzLl9mbHVzaChmdW5jdGlvbihSLHope1AoRixSLHopfSk6UCh0aGlzLG51bGwsbnVsbCl9ZnVuY3Rpb24gUChGLFIseil7aWYoUilyZXR1cm4gRi5lbWl0KCJlcnJvciIsUik7aWYobnVsbCE9eiYmRi5wdXNoKHopLEYuX3dyaXRhYmxlU3RhdGUubGVuZ3RoKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiQ2FsbGluZyB0cmFuc2Zvcm0gZG9uZSB3aGVuIHdzLmxlbmd0aCAhPSAwIik7aWYoRi5fdHJhbnNmb3JtU3RhdGUudHJhbnNmb3JtaW5nKXRocm93IG5ldyBFcnJvcigiQ2FsbGluZyB0cmFuc2Zvcm0gZG9uZSB3aGVuIHN0aWxsIHRyYW5zZm9ybWluZyIpO3JldHVybiBGLnB1''@;'; put 'put ''c2gobnVsbCl9Xy5pbmhlcml0cz1iKDU3MTcpLF8uaW5oZXJpdHMoVixJKSxWLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKEYsUil7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRUcmFuc2Zvcm09ITEsSS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsRixSKX0sVi5wcm90b3R5cGUu''@;'; put 'put ''X3RyYW5zZm9ybT1mdW5jdGlvbihGLFIseil7dGhyb3cgbmV3IEVycm9yKCJfdHJhbnNmb3JtKCkgaXMgbm90IGltcGxlbWVudGVkIil9LFYucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihGLFIseil7dmFyIE49dGhpcy5fdHJhbnNmb3JtU3RhdGU7aWYoTi53cml0ZWNiPXosTi53cml0ZWNo''@;'; put 'put ''dW5rPUYsTi53cml0ZWVuY29kaW5nPVIsIU4udHJhbnNmb3JtaW5nKXt2YXIgTz10aGlzLl9yZWFkYWJsZVN0YXRlOyhOLm5lZWRUcmFuc2Zvcm18fE8ubmVlZFJlYWRhYmxlfHxPLmxlbmd0aDxPLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKE8uaGlnaFdhdGVyTWFyayl9fSxWLnByb3Rv''@;'; put 'put ''dHlwZS5fcmVhZD1mdW5jdGlvbihGKXt2YXIgUj10aGlzLl90cmFuc2Zvcm1TdGF0ZTtudWxsIT09Ui53cml0ZWNodW5rJiZSLndyaXRlY2ImJiFSLnRyYW5zZm9ybWluZz8oUi50cmFuc2Zvcm1pbmc9ITAsdGhpcy5fdHJhbnNmb3JtKFIud3JpdGVjaHVuayxSLndyaXRlZW5jb2RpbmcsUi5h''@;'; put 'put ''ZnRlclRyYW5zZm9ybSkpOlIubmVlZFRyYW5zZm9ybT0hMH0sVi5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oRixSKXt2YXIgej10aGlzO0kucHJvdG90eXBlLl9kZXN0cm95LmNhbGwodGhpcyxGLGZ1bmN0aW9uKE4pe1IoTiksei5lbWl0KCJjbG9zZSIpfSl9fSwyMDEwOihjZSxYLGIp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNDE1NSksXz1iKDgyMTIpO2Z1bmN0aW9uIFYobSl7dmFyIEE9dGhpczt0aGlzLm5leHQ9bnVsbCx0aGlzLmVudHJ5PW51bGwsdGhpcy5maW5pc2g9ZnVuY3Rpb24oKXshZnVuY3Rpb24gRShtLEEsYWUpe3ZhciBuZT1tLmVudHJ5O2ZvcihtLmVudHJ5''@;'; put 'put ''PW51bGw7bmU7KXt2YXIgc2U9bmUuY2FsbGJhY2s7QS5wZW5kaW5nY2ItLSxzZShhZSksbmU9bmUubmV4dH1BLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0PW19KEEsbSl9fWNlLmV4cG9ydHM9Sjt2YXIgUCx3PSFJLmJyb3dzZXImJlsidjAuMTAiLCJ2MC45LiJdLmluZGV4T2YoSS52ZXJzaW9u''@;'; put 'put ''LnNsaWNlKDAsNSkpPi0xP3NldEltbWVkaWF0ZTpfLm5leHRUaWNrO0ouV3JpdGFibGVTdGF0ZT1xO3ZhciBGPU9iamVjdC5jcmVhdGUoYig2NDk3KSk7Ri5pbmhlcml0cz1iKDU3MTcpO3ZhciBlZSxSPXtkZXByZWNhdGU6Yig0OTI3KX0sej1iKDk4MTkpLE49YigxNTcyKS5CdWZmZXIsTz0o''@;'; put 'put ''dHlwZW9mIGIuZzwidSI/Yi5nOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LFk9Yig1OTk3KTtmdW5jdGlvbiBXKCl7fWZ1bmN0aW9uIHEobSxBKXtQPVB8fGIoNDM5MCk7dmFyIGFlPUEgaW5zdGFuY2Vv''@;'; put 'put ''ZiBQO3RoaXMub2JqZWN0TW9kZT0hIShtPW18fHt9KS5vYmplY3RNb2RlLGFlJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFtLndyaXRhYmxlT2JqZWN0TW9kZSk7dmFyIG5lPW0uaGlnaFdhdGVyTWFyayxzZT1tLndyaXRhYmxlSGlnaFdhdGVyTWFyazt0aGlzLmhpZ2hX''@;'; put 'put ''YXRlck1hcms9bmV8fDA9PT1uZT9uZTphZSYmKHNlfHwwPT09c2UpP3NlOnRoaXMub2JqZWN0TW9kZT8xNjoxNjM4NCx0aGlzLmhpZ2hXYXRlck1hcms9TWF0aC5mbG9vcih0aGlzLmhpZ2hXYXRlck1hcmspLHRoaXMuZmluYWxDYWxsZWQ9ITEsdGhpcy5uZWVkRHJhaW49ITEsdGhpcy5lbmRp''@;'; put 'put ''bmc9ITEsdGhpcy5lbmRlZD0hMSx0aGlzLmZpbmlzaGVkPSExLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVjb2RlU3RyaW5ncz0hKCExPT09bS5kZWNvZGVTdHJpbmdzKSx0aGlzLmRlZmF1bHRFbmNvZGluZz1tLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMubGVuZ3RoPTAsdGhpcy53''@;'; put 'put ''cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9ZnVuY3Rpb24oSmUpeyFmdW5jdGlvbiBaZShtLEEpe3ZhciBhZT1tLl93cml0YWJsZVN0YXRlLG5lPWFlLnN5bmMsc2U9YWUud3JpdGVjYjtpZihmdW5jdGlv''@;'; put 'put ''biBNZShtKXttLndyaXRpbmc9ITEsbS53cml0ZWNiPW51bGwsbS5sZW5ndGgtPW0ud3JpdGVsZW4sbS53cml0ZWxlbj0wfShhZSksQSkhZnVuY3Rpb24gVGUobSxBLGFlLG5lLHNlKXstLUEucGVuZGluZ2NiLGFlPyhfLm5leHRUaWNrKHNlLG5lKSxfLm5leHRUaWNrKEgsbSxBKSxtLl93cml0''@;'; put 'put ''YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxtLmVtaXQoImVycm9yIixuZSkpOihzZShuZSksbS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsbS5lbWl0KCJlcnJvciIsbmUpLEgobSxBKSl9KG0sYWUsbmUsQSxzZSk7ZWxzZXt2YXIgQ2U9eChhZSk7IUNlJiYhYWUuY29ya2VkJiYh''@;'; put 'put ''YWUuYnVmZmVyUHJvY2Vzc2luZyYmYWUuYnVmZmVyZWRSZXF1ZXN0JiZ5KG0sYWUpLG5lP3coQixtLGFlLENlLHNlKTpCKG0sYWUsQ2Usc2UpfX0oQSxKZSl9LHRoaXMud3JpdGVjYj1udWxsLHRoaXMud3JpdGVsZW49MCx0aGlzLmJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMubGFzdEJ1ZmZl''@;'; put 'put ''cmVkUmVxdWVzdD1udWxsLHRoaXMucGVuZGluZ2NiPTAsdGhpcy5wcmVmaW5pc2hlZD0hMSx0aGlzLmVycm9yRW1pdHRlZD0hMSx0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTAsdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IFYodGhpcyl9ZnVuY3Rpb24gSihtKXtpZihQPVB8fGIoNDM5''@;'; put 'put ''MCksIShlZS5jYWxsKEosdGhpcyl8fHRoaXMgaW5zdGFuY2VvZiBQKSlyZXR1cm4gbmV3IEoobSk7dGhpcy5fd3JpdGFibGVTdGF0ZT1uZXcgcShtLHRoaXMpLHRoaXMud3JpdGFibGU9ITAsbSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBtLndyaXRlJiYodGhpcy5fd3JpdGU9bS53cml0ZSksImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIG0ud3JpdGV2JiYodGhpcy5fd3JpdGV2PW0ud3JpdGV2KSwiZnVuY3Rpb24iPT10eXBlb2YgbS5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1tLmRlc3Ryb3kpLCJmdW5jdGlvbiI9PXR5cGVvZiBtLmZpbmFsJiYodGhpcy5fZmluYWw9bS5maW5hbCkpLHouY2FsbCh0''@;'; put 'put ''aGlzKX1mdW5jdGlvbiBfZShtLEEsYWUsbmUsc2UsQ2UsVWUpe0Eud3JpdGVsZW49bmUsQS53cml0ZWNiPVVlLEEud3JpdGluZz0hMCxBLnN5bmM9ITAsYWU/bS5fd3JpdGV2KHNlLEEub253cml0ZSk6bS5fd3JpdGUoc2UsQ2UsQS5vbndyaXRlKSxBLnN5bmM9ITF9ZnVuY3Rpb24gQihtLEEs''@;'; put 'put ''YWUsbmUpe2FlfHxmdW5jdGlvbiBnKG0sQSl7MD09PUEubGVuZ3RoJiZBLm5lZWREcmFpbiYmKEEubmVlZERyYWluPSExLG0uZW1pdCgiZHJhaW4iKSl9KG0sQSksQS5wZW5kaW5nY2ItLSxuZSgpLEgobSxBKX1mdW5jdGlvbiB5KG0sQSl7QS5idWZmZXJQcm9jZXNzaW5nPSEwO3ZhciBhZT1B''@;'; put 'put ''LmJ1ZmZlcmVkUmVxdWVzdDtpZihtLl93cml0ZXYmJmFlJiZhZS5uZXh0KXt2YXIgc2U9bmV3IEFycmF5KEEuYnVmZmVyZWRSZXF1ZXN0Q291bnQpLENlPUEuY29ya2VkUmVxdWVzdHNGcmVlO0NlLmVudHJ5PWFlO2Zvcih2YXIgVWU9MCxKZT0hMDthZTspc2VbVWVdPWFlLGFlLmlzQnVmfHwo''@;'; put 'put ''SmU9ITEpLGFlPWFlLm5leHQsVWUrPTE7c2UuYWxsQnVmZmVycz1KZSxfZShtLEEsITAsQS5sZW5ndGgsc2UsIiIsQ2UuZmluaXNoKSxBLnBlbmRpbmdjYisrLEEubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLENlLm5leHQ/KEEuY29ya2VkUmVxdWVzdHNGcmVlPUNlLm5leHQsQ2UubmV4dD1u''@;'; put 'put ''dWxsKTpBLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgVihBKSxBLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTB9ZWxzZXtmb3IoO2FlOyl7dmFyIGl0PWFlLmNodW5rO2lmKF9lKG0sQSwhMSxBLm9iamVjdE1vZGU/MTppdC5sZW5ndGgsaXQsYWUuZW5jb2RpbmcsYWUuY2FsbGJhY2spLGFlPWFlLm5l''@;'; put 'put ''eHQsQS5idWZmZXJlZFJlcXVlc3RDb3VudC0tLEEud3JpdGluZylicmVha31udWxsPT09YWUmJihBLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCl9QS5idWZmZXJlZFJlcXVlc3Q9YWUsQS5idWZmZXJQcm9jZXNzaW5nPSExfWZ1bmN0aW9uIHgobSl7cmV0dXJuIG0uZW5kaW5nJiYwPT09bS5s''@;'; put 'put ''ZW5ndGgmJm51bGw9PT1tLmJ1ZmZlcmVkUmVxdWVzdCYmIW0uZmluaXNoZWQmJiFtLndyaXRpbmd9ZnVuY3Rpb24gQyhtLEEpe20uX2ZpbmFsKGZ1bmN0aW9uKGFlKXtBLnBlbmRpbmdjYi0tLGFlJiZtLmVtaXQoImVycm9yIixhZSksQS5wcmVmaW5pc2hlZD0hMCxtLmVtaXQoInByZWZpbmlz''@;'; put 'put ''aCIpLEgobSxBKX0pfWZ1bmN0aW9uIEgobSxBKXt2YXIgYWU9eChBKTtyZXR1cm4gYWUmJihmdW5jdGlvbiBUKG0sQSl7IUEucHJlZmluaXNoZWQmJiFBLmZpbmFsQ2FsbGVkJiYoImZ1bmN0aW9uIj09dHlwZW9mIG0uX2ZpbmFsPyhBLnBlbmRpbmdjYisrLEEuZmluYWxDYWxsZWQ9ITAsXy5u''@;'; put 'put ''ZXh0VGljayhDLG0sQSkpOihBLnByZWZpbmlzaGVkPSEwLG0uZW1pdCgicHJlZmluaXNoIikpKX0obSxBKSwwPT09QS5wZW5kaW5nY2ImJihBLmZpbmlzaGVkPSEwLG0uZW1pdCgiZmluaXNoIikpKSxhZX1GLmluaGVyaXRzKEoseikscS5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7''@;'; put 'put ''Zm9yKHZhciBBPXRoaXMuYnVmZmVyZWRSZXF1ZXN0LGFlPVtdO0E7KWFlLnB1c2goQSksQT1BLm5leHQ7cmV0dXJuIGFlfSxmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkocS5wcm90b3R5cGUsImJ1ZmZlciIse2dldDpSLmRlcHJlY2F0ZShmdW5jdGlvbigpe3JldHVybiB0''@;'; put 'put ''aGlzLmdldEJ1ZmZlcigpfSwiX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBfd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIgaW5zdGVhZC4iLCJERVAwMDAzIil9KX1jYXRjaHt9fSgpLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5oYXNJbnN0YW5jZSYm''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdPyhlZT1GdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSixTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmZ1bmN0aW9uKG0pe3Jl''@;'; put 'put ''dHVybiEhZWUuY2FsbCh0aGlzLG0pfHx0aGlzPT09SiYmbSYmbS5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIHF9fSkpOmVlPWZ1bmN0aW9uKG0pe3JldHVybiBtIGluc3RhbmNlb2YgdGhpc30sSi5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigpe3RoaXMuZW1pdCgiZXJyb3IiLG5ldyBFcnJv''@;'; put 'put ''cigiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZSIpKX0sSi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24obSxBLGFlKXt2YXIgbmU9dGhpcy5fd3JpdGFibGVTdGF0ZSxzZT0hMSxDZT0hbmUub2JqZWN0TW9kZSYmZnVuY3Rpb24gWihtKXtyZXR1cm4gTi5pc0J1ZmZlcihtKXx8bSBpbnN0YW5j''@;'; put 'put ''ZW9mIE99KG0pO3JldHVybiBDZSYmIU4uaXNCdWZmZXIobSkmJihtPWZ1bmN0aW9uIEsobSl7cmV0dXJuIE4uZnJvbShtKX0obSkpLCJmdW5jdGlvbiI9PXR5cGVvZiBBJiYoYWU9QSxBPW51bGwpLENlP0E9ImJ1ZmZlciI6QXx8KEE9bmUuZGVmYXVsdEVuY29kaW5nKSwiZnVuY3Rpb24iIT10''@;'; put 'put ''eXBlb2YgYWUmJihhZT1XKSxuZS5lbmRlZD9mdW5jdGlvbiByZShtLEEpe3ZhciBhZT1uZXcgRXJyb3IoIndyaXRlIGFmdGVyIGVuZCIpO20uZW1pdCgiZXJyb3IiLGFlKSxfLm5leHRUaWNrKEEsYWUpfSh0aGlzLGFlKTooQ2V8fGZ1bmN0aW9uIGllKG0sQSxhZSxuZSl7dmFyIHNlPSEwLENl''@;'; put 'put ''PSExO3JldHVybiBudWxsPT09YWU/Q2U9bmV3IFR5cGVFcnJvcigiTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW0iKToic3RyaW5nIiE9dHlwZW9mIGFlJiZ2b2lkIDAhPT1hZSYmIUEub2JqZWN0TW9kZSYmKENlPW5ldyBUeXBlRXJyb3IoIkludmFsaWQgbm9uLXN0cmluZy9i''@;'; put 'put ''dWZmZXIgY2h1bmsiKSksQ2UmJihtLmVtaXQoImVycm9yIixDZSksXy5uZXh0VGljayhuZSxDZSksc2U9ITEpLHNlfSh0aGlzLG5lLG0sYWUpKSYmKG5lLnBlbmRpbmdjYisrLHNlPWZ1bmN0aW9uIGdlKG0sQSxhZSxuZSxzZSxDZSl7aWYoIWFlKXt2YXIgVWU9ZnVuY3Rpb24gdWUobSxBLGFl''@;'; put 'put ''KXtyZXR1cm4hbS5vYmplY3RNb2RlJiYhMSE9PW0uZGVjb2RlU3RyaW5ncyYmInN0cmluZyI9PXR5cGVvZiBBJiYoQT1OLmZyb20oQSxhZSkpLEF9KEEsbmUsc2UpO25lIT09VWUmJihhZT0hMCxzZT0iYnVmZmVyIixuZT1VZSl9dmFyIEplPUEub2JqZWN0TW9kZT8xOm5lLmxlbmd0aDtBLmxl''@;'; put 'put ''bmd0aCs9SmU7dmFyIGl0PUEubGVuZ3RoPEEuaGlnaFdhdGVyTWFyaztpZihpdHx8KEEubmVlZERyYWluPSEwKSxBLndyaXRpbmd8fEEuY29ya2VkKXt2YXIgeGU9QS5sYXN0QnVmZmVyZWRSZXF1ZXN0O0EubGFzdEJ1ZmZlcmVkUmVxdWVzdD17Y2h1bms6bmUsZW5jb2Rpbmc6c2UsaXNCdWY6''@;'; put 'put ''YWUsY2FsbGJhY2s6Q2UsbmV4dDpudWxsfSx4ZT94ZS5uZXh0PUEubGFzdEJ1ZmZlcmVkUmVxdWVzdDpBLmJ1ZmZlcmVkUmVxdWVzdD1BLmxhc3RCdWZmZXJlZFJlcXVlc3QsQS5idWZmZXJlZFJlcXVlc3RDb3VudCs9MX1lbHNlIF9lKG0sQSwhMSxKZSxuZSxzZSxDZSk7cmV0dXJuIGl0fSh0''@;'; put 'put ''aGlzLG5lLENlLG0sQSxhZSkpLHNlfSxKLnByb3RvdHlwZS5jb3JrPWZ1bmN0aW9uKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrK30sSi5wcm90b3R5cGUudW5jb3JrPWZ1bmN0aW9uKCl7dmFyIG09dGhpcy5fd3JpdGFibGVTdGF0ZTttLmNvcmtlZCYmKG0uY29ya2VkLS0sIW0ud3Jp''@;'; put 'put ''dGluZyYmIW0uY29ya2VkJiYhbS5idWZmZXJQcm9jZXNzaW5nJiZtLmJ1ZmZlcmVkUmVxdWVzdCYmeSh0aGlzLG0pKX0sSi5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nPWZ1bmN0aW9uKEEpe2lmKCJzdHJpbmciPT10eXBlb2YgQSYmKEE9QS50b0xvd2VyQ2FzZSgpKSwhKFsiaGV4Iiwi''@;'; put 'put ''dXRmOCIsInV0Zi04IiwiYXNjaWkiLCJiaW5hcnkiLCJiYXNlNjQiLCJ1Y3MyIiwidWNzLTIiLCJ1dGYxNmxlIiwidXRmLTE2bGUiLCJyYXciXS5pbmRleE9mKChBKyIiKS50b0xvd2VyQ2FzZSgpKT4tMSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitBKTtyZXR1''@;'; put 'put ''cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2Rpbmc9QSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSi5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGln''@;'; put 'put ''aFdhdGVyTWFya319KSxKLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24obSxBLGFlKXthZShuZXcgRXJyb3IoIl93cml0ZSgpIGlzIG5vdCBpbXBsZW1lbnRlZCIpKX0sSi5wcm90b3R5cGUuX3dyaXRldj1udWxsLEoucHJvdG90eXBlLmVuZD1mdW5jdGlvbihtLEEsYWUpe3ZhciBuZT10aGlz''@;'; put 'put ''Ll93cml0YWJsZVN0YXRlOyJmdW5jdGlvbiI9PXR5cGVvZiBtPyhhZT1tLG09bnVsbCxBPW51bGwpOiJmdW5jdGlvbiI9PXR5cGVvZiBBJiYoYWU9QSxBPW51bGwpLG51bGwhPW0mJnRoaXMud3JpdGUobSxBKSxuZS5jb3JrZWQmJihuZS5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKSxuZS5lbmRp''@;'; put 'put ''bmd8fGZ1bmN0aW9uIGoobSxBLGFlKXtBLmVuZGluZz0hMCxIKG0sQSksYWUmJihBLmZpbmlzaGVkP18ubmV4dFRpY2soYWUpOm0ub25jZSgiZmluaXNoIixhZSkpLEEuZW5kZWQ9ITAsbS53cml0YWJsZT0hMX0odGhpcyxuZSxhZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKLnByb3RvdHlw''@;'; put 'put ''ZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24obSl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVk''@;'; put 'put ''PW0pfX0pLEoucHJvdG90eXBlLmRlc3Ryb3k9WS5kZXN0cm95LEoucHJvdG90eXBlLl91bmRlc3Ryb3k9WS51bmRlc3Ryb3ksSi5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24obSxBKXt0aGlzLmVuZCgpLEEobSl9fSwyMjY3OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBfPWIoMTU3''@;'; put 'put ''MikuQnVmZmVyLHA9Yig2NDE5KTtmdW5jdGlvbiBWKHcsUCxGKXt3LmNvcHkoUCxGKX1jZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdygpeyhmdW5jdGlvbiBJKHcsUCl7aWYoISh3IGluc3RhbmNlb2YgUCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBh''@;'; put 'put ''cyBhIGZ1bmN0aW9uIil9KSh0aGlzLHcpLHRoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9cmV0dXJuIHcucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oRil7dmFyIFI9e2RhdGE6RixuZXh0Om51bGx9O3RoaXMubGVuZ3RoPjA/dGhpcy50YWlsLm5leHQ9Ujp0aGlz''@;'; put 'put ''LmhlYWQ9Uix0aGlzLnRhaWw9UiwrK3RoaXMubGVuZ3RofSx3LnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKEYpe3ZhciBSPXtkYXRhOkYsbmV4dDp0aGlzLmhlYWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMudGFpbD1SKSx0aGlzLmhlYWQ9UiwrK3RoaXMubGVuZ3RofSx3LnByb3RvdHlw''@;'; put 'put ''ZS5zaGlmdD1mdW5jdGlvbigpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIEY9dGhpcy5oZWFkLmRhdGE7cmV0dXJuIHRoaXMuaGVhZD0xPT09dGhpcy5sZW5ndGg/dGhpcy50YWlsPW51bGw6dGhpcy5oZWFkLm5leHQsLS10aGlzLmxlbmd0aCxGfX0sdy5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rp''@;'; put 'put ''b24oKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH0sdy5wcm90b3R5cGUuam9pbj1mdW5jdGlvbihGKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBSPXRoaXMuaGVhZCx6PSIiK1IuZGF0YTtSPVIubmV4dDspeis9RitSLmRhdGE7cmV0dXJuIHp9''@;'; put 'put ''LHcucHJvdG90eXBlLmNvbmNhdD1mdW5jdGlvbihGKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIF8uYWxsb2MoMCk7Zm9yKHZhciBSPV8uYWxsb2NVbnNhZmUoRj4+PjApLHo9dGhpcy5oZWFkLE49MDt6OylWKHouZGF0YSxSLE4pLE4rPXouZGF0YS5sZW5ndGgsej16Lm5leHQ7cmV0dXJu''@;'; put 'put ''IFJ9LHd9KCkscCYmcC5pbnNwZWN0JiZwLmluc3BlY3QuY3VzdG9tJiYoY2UuZXhwb3J0cy5wcm90b3R5cGVbcC5pbnNwZWN0LmN1c3RvbV09ZnVuY3Rpb24oKXt2YXIgdz1wLmluc3BlY3Qoe2xlbmd0aDp0aGlzLmxlbmd0aH0pO3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUrIiAiK3d9''@;'; put 'put ''KX0sNTk5NzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDgyMTIpO2Z1bmN0aW9uIFYodyxQKXt3LmVtaXQoImVycm9yIixQKX1jZS5leHBvcnRzPXtkZXN0cm95OmZ1bmN0aW9uIF8odyxQKXt2YXIgRj10aGlzO3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFk''@;'; put 'put ''YWJsZVN0YXRlLmRlc3Ryb3llZHx8dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ/KFA/UCh3KTp3JiYodGhpcy5fd3JpdGFibGVTdGF0ZT90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZHx8KHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JF''@;'; put 'put ''bWl0dGVkPSEwLEkubmV4dFRpY2soVix0aGlzLHcpKTpJLm5leHRUaWNrKFYsdGhpcyx3KSksdGhpcyk6KHRoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJv''@;'; put 'put ''eWVkPSEwKSx0aGlzLl9kZXN0cm95KHd8fG51bGwsZnVuY3Rpb24oTil7IVAmJk4/Ri5fd3JpdGFibGVTdGF0ZT9GLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZHx8KEYuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEkubmV4dFRpY2soVixGLE4pKTpJLm5leHRUaWNrKFYsRixO''@;'; put 'put ''KTpQJiZQKE4pfSksdGhpcyl9LHVuZGVzdHJveTpmdW5jdGlvbiBwKCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZz0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3Jl''@;'; put 'put ''YWRhYmxlU3RhdGUuZW5kRW1pdHRlZD0hMSksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5h''@;'; put 'put ''bENhbGxlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITEpfX19LDk4MTk6KGNlLFgsYik9PntjZS5leHBvcnRzPWIoNzE4NykuRXZlbnRFbWl0dGVy''@;'; put 'put ''fSwxNTcyOihjZSxYLGIpPT57dmFyIEk9Yig4NzY0KSxfPUkuQnVmZmVyO2Z1bmN0aW9uIHAodyxQKXtmb3IodmFyIEYgaW4gdylQW0ZdPXdbRl19ZnVuY3Rpb24gVih3LFAsRil7cmV0dXJuIF8odyxQLEYpfV8uZnJvbSYmXy5hbGxvYyYmXy5hbGxvY1Vuc2FmZSYmXy5hbGxvY1Vuc2FmZVNs''@;'; put 'put ''b3c/Y2UuZXhwb3J0cz1JOihwKEksWCksWC5CdWZmZXI9VikscChfLFYpLFYuZnJvbT1mdW5jdGlvbih3LFAsRil7aWYoIm51bWJlciI9PXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIF8odyxQLEYpfSxWLmFsbG9j''@;'; put 'put ''PWZ1bmN0aW9uKHcsUCxGKXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBSPV8odyk7cmV0dXJuIHZvaWQgMCE9PVA/InN0cmluZyI9PXR5cGVvZiBGP1IuZmlsbChQLEYpOlIuZmlsbChQKTpSLmZpbGwo''@;'; put 'put ''MCksUn0sVi5hbGxvY1Vuc2FmZT1mdW5jdGlvbih3KXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBfKHcpfSxWLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih3KXtpZigibnVtYmVyIiE9dHlwZW9m''@;'; put 'put ''IHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBJLlNsb3dCdWZmZXIodyl9fSwzODcyOihjZSxYLGIpPT57KFg9Y2UuZXhwb3J0cz1iKDQ5NjApKS5TdHJlYW09WCxYLlJlYWRhYmxlPVgsWC5Xcml0YWJsZT1iKDIwMTApLFguRHVwbGV4''@;'; put 'put ''PWIoNDM5MCksWC5UcmFuc2Zvcm09YigzOTEyKSxYLlBhc3NUaHJvdWdoPWIoMTI5NCl9LDIyMjE6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigzMzY0KS5CdWZmZXIsXz1JLmlzRW5jb2Rpbmd8fGZ1bmN0aW9uKEope3N3aXRjaCgoSj0iIitKKSYmSi50b0xvd2VyQ2FzZSgpKXtj''@;'; put 'put ''YXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpjYXNlInJhdyI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19O2Z1bmN0''@;'; put 'put ''aW9uIHcoSil7dmFyIHJlO3N3aXRjaCh0aGlzLmVuY29kaW5nPWZ1bmN0aW9uIFYoSil7dmFyIHJlPWZ1bmN0aW9uIHAoSil7aWYoIUopcmV0dXJuInV0ZjgiO2Zvcih2YXIgcmU7Oylzd2l0Y2goSil7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4idXRmOCI7Y2FzZSJ1Y3MyIjpjYXNl''@;'; put 'put ''InVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiJ1dGYxNmxlIjtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiJsYXRpbjEiO2Nhc2UiYmFzZTY0IjpjYXNlImFzY2lpIjpjYXNlImhleCI6cmV0dXJuIEo7ZGVmYXVsdDppZihyZSlyZXR1cm47Sj0oIiIr''@;'; put 'put ''SikudG9Mb3dlckNhc2UoKSxyZT0hMH19KEopO2lmKCJzdHJpbmciIT10eXBlb2YgcmUmJihJLmlzRW5jb2Rpbmc9PT1ffHwhXyhKKSkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK0opO3JldHVybiByZXx8Sn0oSiksdGhpcy5lbmNvZGluZyl7Y2FzZSJ1dGYxNmxlIjp0''@;'; put 'put ''aGlzLnRleHQ9Syx0aGlzLmVuZD1aLHJlPTQ7YnJlYWs7Y2FzZSJ1dGY4Ijp0aGlzLmZpbGxMYXN0PXoscmU9NDticmVhaztjYXNlImJhc2U2NCI6dGhpcy50ZXh0PVksdGhpcy5lbmQ9VyxyZT0zO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHRoaXMud3JpdGU9cSx2b2lkKHRoaXMuZW5kPWVlKX10''@;'; put 'put ''aGlzLmxhc3ROZWVkPTAsdGhpcy5sYXN0VG90YWw9MCx0aGlzLmxhc3RDaGFyPUkuYWxsb2NVbnNhZmUocmUpfWZ1bmN0aW9uIFAoSil7cmV0dXJuIEo8PTEyNz8wOko+PjU9PTY/MjpKPj40PT0xND8zOko+PjM9PTMwPzQ6Sj4+Nj09Mj8tMTotMn1mdW5jdGlvbiB6KEope3ZhciByZT10aGlz''@;'; put 'put ''Lmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLGllPWZ1bmN0aW9uIFIoSixyZSl7aWYoMTI4IT0oMTkyJnJlWzBdKSlyZXR1cm4gSi5sYXN0TmVlZD0wLCJcdWZmZmQiO2lmKEoubGFzdE5lZWQ+MSYmcmUubGVuZ3RoPjEpe2lmKDEyOCE9KDE5MiZyZVsxXSkpcmV0dXJuIEoubGFzdE5lZWQ9MSwi''@;'; put 'put ''XHVmZmZkIjtpZihKLmxhc3ROZWVkPjImJnJlLmxlbmd0aD4yJiYxMjghPSgxOTImcmVbMl0pKXJldHVybiBKLmxhc3ROZWVkPTIsIlx1ZmZmZCJ9fSh0aGlzLEopO3JldHVybiB2b2lkIDAhPT1pZT9pZTp0aGlzLmxhc3ROZWVkPD1KLmxlbmd0aD8oSi5jb3B5KHRoaXMubGFzdENoYXIscmUs''@;'; put 'put ''MCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCkpOihKLmNvcHkodGhpcy5sYXN0Q2hhcixyZSwwLEoubGVuZ3RoKSx2b2lkKHRoaXMubGFzdE5lZWQtPUoubGVuZ3RoKSl9ZnVuY3Rpb24gSyhKLHJlKXtpZigoSi5s''@;'; put 'put ''ZW5ndGgtcmUpJTI9PTApe3ZhciBpZT1KLnRvU3RyaW5nKCJ1dGYxNmxlIixyZSk7aWYoaWUpe3ZhciB1ZT1pZS5jaGFyQ29kZUF0KGllLmxlbmd0aC0xKTtpZih1ZT49NTUyOTYmJnVlPD01NjMxOSlyZXR1cm4gdGhpcy5sYXN0TmVlZD0yLHRoaXMubGFzdFRvdGFsPTQsdGhpcy5sYXN0Q2hh''@;'; put 'put ''clswXT1KW0oubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09SltKLmxlbmd0aC0xXSxpZS5zbGljZSgwLC0xKX1yZXR1cm4gaWV9cmV0dXJuIHRoaXMubGFzdE5lZWQ9MSx0aGlzLmxhc3RUb3RhbD0yLHRoaXMubGFzdENoYXJbMF09SltKLmxlbmd0aC0xXSxKLnRvU3RyaW5nKCJ1dGYxNmxl''@;'; put 'put ''IixyZSxKLmxlbmd0aC0xKX1mdW5jdGlvbiBaKEope3ZhciByZT1KJiZKLmxlbmd0aD90aGlzLndyaXRlKEopOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP3JlK3RoaXMubGFzdENoYXIudG9TdHJpbmcoInV0ZjE2bGUiLDAsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCk6cmV9ZnVuY3Rp''@;'; put 'put ''b24gWShKLHJlKXt2YXIgaWU9KEoubGVuZ3RoLXJlKSUzO3JldHVybiAwPT09aWU/Si50b1N0cmluZygiYmFzZTY0IixyZSk6KHRoaXMubGFzdE5lZWQ9My1pZSx0aGlzLmxhc3RUb3RhbD0zLDE9PT1pZT90aGlzLmxhc3RDaGFyWzBdPUpbSi5sZW5ndGgtMV06KHRoaXMubGFzdENoYXJbMF09''@;'; put 'put ''SltKLmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFyWzFdPUpbSi5sZW5ndGgtMV0pLEoudG9TdHJpbmcoImJhc2U2NCIscmUsSi5sZW5ndGgtaWUpKX1mdW5jdGlvbiBXKEope3ZhciByZT1KJiZKLmxlbmd0aD90aGlzLndyaXRlKEopOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP3JlK3RoaXMubGFz''@;'; put 'put ''dENoYXIudG9TdHJpbmcoImJhc2U2NCIsMCwzLXRoaXMubGFzdE5lZWQpOnJlfWZ1bmN0aW9uIHEoSil7cmV0dXJuIEoudG9TdHJpbmcodGhpcy5lbmNvZGluZyl9ZnVuY3Rpb24gZWUoSil7cmV0dXJuIEomJkoubGVuZ3RoP3RoaXMud3JpdGUoSik6IiJ9WC5zPXcsdy5wcm90b3R5cGUud3Jp''@;'; put 'put ''dGU9ZnVuY3Rpb24oSil7aWYoMD09PUoubGVuZ3RoKXJldHVybiIiO3ZhciByZSxpZTtpZih0aGlzLmxhc3ROZWVkKXtpZih2b2lkIDA9PT0ocmU9dGhpcy5maWxsTGFzdChKKSkpcmV0dXJuIiI7aWU9dGhpcy5sYXN0TmVlZCx0aGlzLmxhc3ROZWVkPTB9ZWxzZSBpZT0wO3JldHVybiBpZTxK''@;'; put 'put ''Lmxlbmd0aD9yZT9yZSt0aGlzLnRleHQoSixpZSk6dGhpcy50ZXh0KEosaWUpOnJlfHwiIn0sdy5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uIE8oSil7dmFyIHJlPUomJkoubGVuZ3RoP3RoaXMud3JpdGUoSik6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/cmUrIlx1ZmZmZCI6cmV9LHcucHJvdG90''@;'; put 'put ''eXBlLnRleHQ9ZnVuY3Rpb24gTihKLHJlKXt2YXIgaWU9ZnVuY3Rpb24gRihKLHJlLGllKXt2YXIgdWU9cmUubGVuZ3RoLTE7aWYodWU8aWUpcmV0dXJuIDA7dmFyIGdlPVAocmVbdWVdKTtyZXR1cm4gZ2U+PTA/KGdlPjAmJihKLmxhc3ROZWVkPWdlLTEpLGdlKTotLXVlPGllfHwtMj09PWdl''@;'; put 'put ''PzA6KGdlPVAocmVbdWVdKSk+PTA/KGdlPjAmJihKLmxhc3ROZWVkPWdlLTIpLGdlKTotLXVlPGllfHwtMj09PWdlPzA6KGdlPVAocmVbdWVdKSk+PTA/KGdlPjAmJigyPT09Z2U/Z2U9MDpKLmxhc3ROZWVkPWdlLTMpLGdlKTowfSh0aGlzLEoscmUpO2lmKCF0aGlzLmxhc3ROZWVkKXJldHVy''@;'; put 'put ''biBKLnRvU3RyaW5nKCJ1dGY4IixyZSk7dGhpcy5sYXN0VG90YWw9aWU7dmFyIHVlPUoubGVuZ3RoLShpZS10aGlzLmxhc3ROZWVkKTtyZXR1cm4gSi5jb3B5KHRoaXMubGFzdENoYXIsMCx1ZSksSi50b1N0cmluZygidXRmOCIscmUsdWUpfSx3LnByb3RvdHlwZS5maWxsTGFzdD1mdW5jdGlv''@;'; put 'put ''bihKKXtpZih0aGlzLmxhc3ROZWVkPD1KLmxlbmd0aClyZXR1cm4gSi5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKTtKLmNv''@;'; put 'put ''cHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsSi5sZW5ndGgpLHRoaXMubGFzdE5lZWQtPUoubGVuZ3RofX0sMzM2NDooY2UsWCxiKT0+e3ZhciBJPWIoODc2NCksXz1JLkJ1ZmZlcjtmdW5jdGlvbiBwKHcsUCl7Zm9yKHZhciBGIGluIHcpUFtGXT13W0Zd''@;'; put 'put ''fWZ1bmN0aW9uIFYodyxQLEYpe3JldHVybiBfKHcsUCxGKX1fLmZyb20mJl8uYWxsb2MmJl8uYWxsb2NVbnNhZmUmJl8uYWxsb2NVbnNhZmVTbG93P2NlLmV4cG9ydHM9SToocChJLFgpLFguQnVmZmVyPVYpLHAoXyxWKSxWLmZyb209ZnVuY3Rpb24odyxQLEYpe2lmKCJudW1iZXIiPT10eXBl''@;'; put 'put ''b2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiBfKHcsUCxGKX0sVi5hbGxvYz1mdW5jdGlvbih3LFAsRil7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1i''@;'; put 'put ''ZXIiKTt2YXIgUj1fKHcpO3JldHVybiB2b2lkIDAhPT1QPyJzdHJpbmciPT10eXBlb2YgRj9SLmZpbGwoUCxGKTpSLmZpbGwoUCk6Ui5maWxsKDApLFJ9LFYuYWxsb2NVbnNhZmU9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50''@;'; put 'put ''IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gXyh3KX0sVi5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gSS5TbG93QnVmZmVyKHcpfX0sNzI5NToo''@;'; put 'put ''Y2UsWCxiKT0+e3ZhciBJPWIoODc2NCkuQnVmZmVyO2NlLmV4cG9ydHM9ZnVuY3Rpb24ocCxWKXtmb3IodmFyIHc9TWF0aC5taW4ocC5sZW5ndGgsVi5sZW5ndGgpLFA9bmV3IEkodyksRj0wO0Y8dzsrK0YpUFtGXT1wW0ZdXlZbRl07cmV0dXJuIFB9fSw4NzY0OihjZSxYLGIpPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBJPWIoNTEwOCk7Y29uc3QgXz1iKDk3NDIpLHA9Yig2NDUpLFY9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3I/U3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKTpudWxsO1guQnVmZmVyPVIsWC5T''@;'; put 'put ''bG93QnVmZmVyPWZ1bmN0aW9uIHJlKFhlKXtyZXR1cm4rWGUhPVhlJiYoWGU9MCksUi5hbGxvYygrWGUpfSxYLklOU1BFQ1RfTUFYX0JZVEVTPTUwO2NvbnN0IHc9MjE0NzQ4MzY0NztmdW5jdGlvbiBGKFhlKXtpZihYZT53KXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrWGUr''@;'; put 'put ''JyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpO2NvbnN0IHR0PW5ldyBVaW50OEFycmF5KFhlKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHR0LFIucHJvdG90eXBlKSx0dH1mdW5jdGlvbiBSKFhlLHR0LEllKXtpZigibnVtYmVyIj09dHlwZW9mIFhlKXtpZigic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mIHR0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO3JldHVybiBLKFhlKX1yZXR1cm4geihYZSx0dCxJZSl9ZnVuY3Rpb24geihYZSx0dCxJZSl7aWYoInN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZiBYZSlyZXR1cm4gZnVuY3Rpb24gWihYZSx0dCl7aWYoKCJzdHJpbmciIT10eXBlb2YgdHR8fCIiPT09dHQpJiYodHQ9InV0ZjgiKSwhUi5pc0VuY29kaW5nKHR0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3R0KTtjb25zdCBJZT0wfGllKFhl''@;'; put 'put ''LHR0KTtsZXQgYXQ9RihJZSk7Y29uc3QgdW49YXQud3JpdGUoWGUsdHQpO3JldHVybiB1biE9PUllJiYoYXQ9YXQuc2xpY2UoMCx1bikpLGF0fShYZSx0dCk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KFhlKSlyZXR1cm4gZnVuY3Rpb24gVyhYZSl7aWYoc24oWGUsVWludDhBcnJheSkpe2NvbnN0''@;'; put 'put ''IHR0PW5ldyBVaW50OEFycmF5KFhlKTtyZXR1cm4gcSh0dC5idWZmZXIsdHQuYnl0ZU9mZnNldCx0dC5ieXRlTGVuZ3RoKX1yZXR1cm4gWShYZSl9KFhlKTtpZihudWxsPT1YZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJp''@;'; put 'put ''bmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBYZSk7aWYoc24oWGUsQXJyYXlCdWZmZXIpfHxYZSYmc24oWGUuYnVmZmVyLEFycmF5QnVmZmVyKXx8dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPCJ1IiYm''@;'; put 'put ''KHNuKFhlLFNoYXJlZEFycmF5QnVmZmVyKXx8WGUmJnNuKFhlLmJ1ZmZlcixTaGFyZWRBcnJheUJ1ZmZlcikpKXJldHVybiBxKFhlLHR0LEllKTtpZigibnVtYmVyIj09dHlwZW9mIFhlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5''@;'; put 'put ''cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO2NvbnN0IGF0PVhlLnZhbHVlT2YmJlhlLnZhbHVlT2YoKTtpZihudWxsIT1hdCYmYXQhPT1YZSlyZXR1cm4gUi5mcm9tKGF0LHR0LEllKTtjb25zdCB1bj1mdW5jdGlvbiBlZShYZSl7aWYoUi5pc0J1ZmZlcihYZSkpe2NvbnN0IHR0''@;'; put 'put ''PTB8SihYZS5sZW5ndGgpLEllPUYodHQpO3JldHVybiAwPT09SWUubGVuZ3RofHxYZS5jb3B5KEllLDAsMCx0dCksSWV9cmV0dXJuIHZvaWQgMCE9PVhlLmxlbmd0aD8ibnVtYmVyIiE9dHlwZW9mIFhlLmxlbmd0aHx8dnQoWGUubGVuZ3RoKT9GKDApOlkoWGUpOiJCdWZmZXIiPT09WGUudHlw''@;'; put 'put ''ZSYmQXJyYXkuaXNBcnJheShYZS5kYXRhKT9ZKFhlLmRhdGEpOnZvaWQgMH0oWGUpO2lmKHVuKXJldHVybiB1bjtpZih0eXBlb2YgU3ltYm9sPCJ1IiYmbnVsbCE9U3ltYm9sLnRvUHJpbWl0aXZlJiYiZnVuY3Rpb24iPT10eXBlb2YgWGVbU3ltYm9sLnRvUHJpbWl0aXZlXSlyZXR1cm4gUi5m''@;'; put 'put ''cm9tKFhlW1N5bWJvbC50b1ByaW1pdGl2ZV0oInN0cmluZyIpLHR0LEllKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVj''@;'; put 'put ''ZWl2ZWQgdHlwZSAiK3R5cGVvZiBYZSl9ZnVuY3Rpb24gTihYZSl7aWYoIm51bWJlciIhPXR5cGVvZiBYZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlcicpO2lmKFhlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAi''@;'; put 'put ''JytYZSsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyl9ZnVuY3Rpb24gSyhYZSl7cmV0dXJuIE4oWGUpLEYoWGU8MD8wOjB8SihYZSkpfWZ1bmN0aW9uIFkoWGUpe2NvbnN0IHR0PVhlLmxlbmd0aDwwPzA6MHxKKFhlLmxlbmd0aCksSWU9Rih0dCk7Zm9yKGxldCBhdD0wO2F0PHR0''@;'; put 'put ''O2F0Kz0xKUllW2F0XT0yNTUmWGVbYXRdO3JldHVybiBJZX1mdW5jdGlvbiBxKFhlLHR0LEllKXtpZih0dDwwfHxYZS5ieXRlTGVuZ3RoPHR0KXRocm93IG5ldyBSYW5nZUVycm9yKCcib2Zmc2V0IiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtpZihYZS5ieXRlTGVuZ3RoPHR0KyhJ''@;'; put 'put ''ZXx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJsZW5ndGgiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO2xldCBhdDtyZXR1cm4gYXQ9dm9pZCAwPT09dHQmJnZvaWQgMD09PUllP25ldyBVaW50OEFycmF5KFhlKTp2b2lkIDA9PT1JZT9uZXcgVWludDhBcnJheShYZSx0dCk6bmV3''@;'; put 'put ''IFVpbnQ4QXJyYXkoWGUsdHQsSWUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihhdCxSLnByb3RvdHlwZSksYXR9ZnVuY3Rpb24gSihYZSl7aWYoWGU+PXcpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgi''@;'; put 'put ''K3cudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHxYZX1mdW5jdGlvbiBpZShYZSx0dCl7aWYoUi5pc0J1ZmZlcihYZSkpcmV0dXJuIFhlLmxlbmd0aDtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoWGUpfHxzbihYZSxBcnJheUJ1ZmZlcikpcmV0dXJuIFhlLmJ5dGVMZW5ndGg7aWYoInN0''@;'; put 'put ''cmluZyIhPXR5cGVvZiBYZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgWGUpO2NvbnN0IEllPVhlLmxlbmd0aCxhdD1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCFhdCYmMD09PUllKXJldHVybiAwO2xldCB1bj0hMTtmb3IoOzspc3dpdGNoKHR0KXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBJZTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBB''@;'; put 'put ''ZShYZSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipJZTtjYXNlImhleCI6cmV0dXJuIEllPj4+MTtjYXNlImJhc2U2NCI6cmV0dXJuIHJ0KFhlKS5sZW5ndGg7ZGVmYXVsdDppZih1bilyZXR1cm4gYXQ/LTE6QWUo''@;'; put 'put ''WGUpLmxlbmd0aDt0dD0oIiIrdHQpLnRvTG93ZXJDYXNlKCksdW49ITB9fWZ1bmN0aW9uIHVlKFhlLHR0LEllKXtsZXQgYXQ9ITE7aWYoKHZvaWQgMD09PXR0fHx0dDwwKSYmKHR0PTApLHR0PnRoaXMubGVuZ3RofHwoKHZvaWQgMD09PUllfHxJZT50aGlzLmxlbmd0aCkmJihJZT10aGlzLmxl''@;'; put 'put ''bmd0aCksSWU8PTApfHwoSWU+Pj49MCk8PSh0dD4+Pj0wKSlyZXR1cm4iIjtmb3IoWGV8fChYZT0idXRmOCIpOzspc3dpdGNoKFhlKXtjYXNlImhleCI6cmV0dXJuIG0odGhpcyx0dCxJZSk7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gQyh0aGlzLHR0LEllKTtjYXNlImFzY2lpIjpy''@;'; put 'put ''ZXR1cm4gaih0aGlzLHR0LEllKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBFKHRoaXMsdHQsSWUpO2Nhc2UiYmFzZTY0IjpyZXR1cm4geCh0aGlzLHR0LEllKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIEEodGhp''@;'; put 'put ''cyx0dCxJZSk7ZGVmYXVsdDppZihhdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK1hlKTtYZT0oWGUrIiIpLnRvTG93ZXJDYXNlKCksYXQ9ITB9fWZ1bmN0aW9uIGdlKFhlLHR0LEllKXtjb25zdCBhdD1YZVt0dF07WGVbdHRdPVhlW0llXSxYZVtJZV09YXR9ZnVu''@;'; put 'put ''Y3Rpb24gX2UoWGUsdHQsSWUsYXQsdW4pe2lmKDA9PT1YZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiBJZT8oYXQ9SWUsSWU9MCk6SWU+MjE0NzQ4MzY0Nz9JZT0yMTQ3NDgzNjQ3OkllPC0yMTQ3NDgzNjQ4JiYoSWU9LTIxNDc0ODM2NDgpLHZ0KEllPStJZSkmJihJZT11''@;'; put 'put ''bj8wOlhlLmxlbmd0aC0xKSxJZTwwJiYoSWU9WGUubGVuZ3RoK0llKSxJZT49WGUubGVuZ3RoKXtpZih1bilyZXR1cm4tMTtJZT1YZS5sZW5ndGgtMX1lbHNlIGlmKEllPDApe2lmKCF1bilyZXR1cm4tMTtJZT0wfWlmKCJzdHJpbmciPT10eXBlb2YgdHQmJih0dD1SLmZyb20odHQsYXQpKSxS''@;'; put 'put ''LmlzQnVmZmVyKHR0KSlyZXR1cm4gMD09PXR0Lmxlbmd0aD8tMTpUZShYZSx0dCxJZSxhdCx1bik7aWYoIm51bWJlciI9PXR5cGVvZiB0dClyZXR1cm4gdHQmPTI1NSwiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj91bj9VaW50OEFycmF5LnByb3RvdHlw''@;'; put 'put ''ZS5pbmRleE9mLmNhbGwoWGUsdHQsSWUpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoWGUsdHQsSWUpOlRlKFhlLFt0dF0sSWUsYXQsdW4pO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIFRl''@;'; put 'put ''KFhlLHR0LEllLGF0LHVuKXtsZXQgbG4sSXQ9MSxSdD1YZS5sZW5ndGgscmk9dHQubGVuZ3RoO2lmKHZvaWQgMCE9PWF0JiYoInVjczIiPT09KGF0PVN0cmluZyhhdCkudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1hdHx8InV0ZjE2bGUiPT09YXR8fCJ1dGYtMTZsZSI9PT1hdCkpe2lmKFhl''@;'; put 'put ''Lmxlbmd0aDwyfHx0dC5sZW5ndGg8MilyZXR1cm4tMTtJdD0yLFJ0Lz0yLHJpLz0yLEllLz0yfWZ1bmN0aW9uIGFuKG5pLGhuKXtyZXR1cm4gMT09PUl0P25pW2huXTpuaS5yZWFkVUludDE2QkUoaG4qSXQpfWlmKHVuKXtsZXQgbmk9LTE7Zm9yKGxuPUllO2xuPFJ0O2xuKyspaWYoYW4oWGUs''@;'; put 'put ''bG4pPT09YW4odHQsLTE9PT1uaT8wOmxuLW5pKSl7aWYoLTE9PT1uaSYmKG5pPWxuKSxsbi1uaSsxPT09cmkpcmV0dXJuIG5pKkl0fWVsc2UtMSE9PW5pJiYobG4tPWxuLW5pKSxuaT0tMX1lbHNlIGZvcihJZStyaT5SdCYmKEllPVJ0LXJpKSxsbj1JZTtsbj49MDtsbi0tKXtsZXQgbmk9ITA7''@;'; put 'put ''Zm9yKGxldCBobj0wO2huPHJpO2huKyspaWYoYW4oWGUsbG4raG4pIT09YW4odHQsaG4pKXtuaT0hMTticmVha31pZihuaSlyZXR1cm4gbG59cmV0dXJuLTF9ZnVuY3Rpb24gTWUoWGUsdHQsSWUsYXQpe0llPU51bWJlcihJZSl8fDA7Y29uc3QgdW49WGUubGVuZ3RoLUllO2F0PyhhdD1OdW1i''@;'; put 'put ''ZXIoYXQpKT51biYmKGF0PXVuKTphdD11bjtjb25zdCBJdD10dC5sZW5ndGg7bGV0IFJ0O2ZvcihhdD5JdC8yJiYoYXQ9SXQvMiksUnQ9MDtSdDxhdDsrK1J0KXtjb25zdCByaT1wYXJzZUludCh0dC5zdWJzdHIoMipSdCwyKSwxNik7aWYodnQocmkpKXJldHVybiBSdDtYZVtJZStSdF09cml9''@;'; put 'put ''cmV0dXJuIFJ0fWZ1bmN0aW9uIFplKFhlLHR0LEllLGF0KXtyZXR1cm4gUWUoQWUodHQsWGUubGVuZ3RoLUllKSxYZSxJZSxhdCl9ZnVuY3Rpb24gQihYZSx0dCxJZSxhdCl7cmV0dXJuIFFlKGZ1bmN0aW9uIERlKFhlKXtjb25zdCB0dD1bXTtmb3IobGV0IEllPTA7SWU8WGUubGVuZ3RoOysr''@;'; put 'put ''SWUpdHQucHVzaCgyNTUmWGUuY2hhckNvZGVBdChJZSkpO3JldHVybiB0dH0odHQpLFhlLEllLGF0KX1mdW5jdGlvbiBnKFhlLHR0LEllLGF0KXtyZXR1cm4gUWUocnQodHQpLFhlLEllLGF0KX1mdW5jdGlvbiB5KFhlLHR0LEllLGF0KXtyZXR1cm4gUWUoZnVuY3Rpb24gX3QoWGUsdHQpe2xl''@;'; put 'put ''dCBJZSxhdCx1bjtjb25zdCBJdD1bXTtmb3IobGV0IFJ0PTA7UnQ8WGUubGVuZ3RoJiYhKCh0dC09Mik8MCk7KytSdClJZT1YZS5jaGFyQ29kZUF0KFJ0KSxhdD1JZT4+OCx1bj1JZSUyNTYsSXQucHVzaCh1biksSXQucHVzaChhdCk7cmV0dXJuIEl0fSh0dCxYZS5sZW5ndGgtSWUpLFhlLEll''@;'; put 'put ''LGF0KX1mdW5jdGlvbiB4KFhlLHR0LEllKXtyZXR1cm4gXy5mcm9tQnl0ZUFycmF5KDA9PT10dCYmSWU9PT1YZS5sZW5ndGg/WGU6WGUuc2xpY2UodHQsSWUpKX1mdW5jdGlvbiBDKFhlLHR0LEllKXtJZT1NYXRoLm1pbihYZS5sZW5ndGgsSWUpO2NvbnN0IGF0PVtdO2xldCB1bj10dDtmb3Io''@;'; put 'put ''O3VuPEllOyl7Y29uc3QgSXQ9WGVbdW5dO2xldCBSdD1udWxsLHJpPUl0PjIzOT80Okl0PjIyMz8zOkl0PjE5MT8yOjE7aWYodW4rcmk8PUllKXtsZXQgYW4sbG4sbmksaG47c3dpdGNoKHJpKXtjYXNlIDE6SXQ8MTI4JiYoUnQ9SXQpO2JyZWFrO2Nhc2UgMjphbj1YZVt1bisxXSwxMjg9PSgx''@;'; put 'put ''OTImYW4pJiYoaG49KDMxJkl0KTw8Nnw2MyZhbixobj4xMjcmJihSdD1obikpO2JyZWFrO2Nhc2UgMzphbj1YZVt1bisxXSxsbj1YZVt1bisyXSwxMjg9PSgxOTImYW4pJiYxMjg9PSgxOTImbG4pJiYoaG49KDE1Jkl0KTw8MTJ8KDYzJmFuKTw8Nnw2MyZsbixobj4yMDQ3JiYoaG48NTUyOTZ8''@;'; put 'put ''fGhuPjU3MzQzKSYmKFJ0PWhuKSk7YnJlYWs7Y2FzZSA0OmFuPVhlW3VuKzFdLGxuPVhlW3VuKzJdLG5pPVhlW3VuKzNdLDEyOD09KDE5MiZhbikmJjEyOD09KDE5MiZsbikmJjEyOD09KDE5MiZuaSkmJihobj0oMTUmSXQpPDwxOHwoNjMmYW4pPDwxMnwoNjMmbG4pPDw2fDYzJm5pLGhuPjY1''@;'; put 'put ''NTM1JiZobjwxMTE0MTEyJiYoUnQ9aG4pKX19bnVsbD09PVJ0PyhSdD02NTUzMyxyaT0xKTpSdD42NTUzNSYmKFJ0LT02NTUzNixhdC5wdXNoKFJ0Pj4+MTAmMTAyM3w1NTI5NiksUnQ9NTYzMjB8MTAyMyZSdCksYXQucHVzaChSdCksdW4rPXJpfXJldHVybiBmdW5jdGlvbiBIKFhlKXtjb25z''@;'; put 'put ''dCB0dD1YZS5sZW5ndGg7aWYodHQ8PVQpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLFhlKTtsZXQgSWU9IiIsYXQ9MDtmb3IoO2F0PHR0OylJZSs9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsWGUuc2xpY2UoYXQsYXQrPVQpKTtyZXR1cm4gSWV9KGF0''@;'; put 'put ''KX1YLmtNYXhMZW5ndGg9dywhKFIuVFlQRURfQVJSQVlfU1VQUE9SVD1mdW5jdGlvbiBQKCl7dHJ5e2NvbnN0IFhlPW5ldyBVaW50OEFycmF5KDEpLHR0PXtmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHR0LFVpbnQ4QXJyYXkucHJvdG90''@;'; put 'put ''eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoWGUsdHQpLDQyPT09WGUuZm9vKCl9Y2F0Y2h7cmV0dXJuITF9fSgpKSYmdHlwZW9mIEk8InUiJiYiZnVuY3Rpb24iPT10eXBlb2YgSS5lcnJvciYmSS5lcnJvcigiVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBz''@;'; put 'put ''dXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGBidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KFIucHJvdG90eXBlLCJwYXJlbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5j''@;'; put 'put ''dGlvbigpe2lmKFIuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLnByb3RvdHlwZSwib2Zmc2V0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihSLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ5dGVPZmZzZXR9''@;'; put 'put ''fSksUi5wb29sU2l6ZT04MTkyLFIuZnJvbT1mdW5jdGlvbihYZSx0dCxJZSl7cmV0dXJuIHooWGUsdHQsSWUpfSxPYmplY3Quc2V0UHJvdG90eXBlT2YoUi5wcm90b3R5cGUsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihSLFVpbnQ4QXJyYXkpLFIuYWxsb2M9''@;'; put 'put ''ZnVuY3Rpb24oWGUsdHQsSWUpe3JldHVybiBmdW5jdGlvbiBPKFhlLHR0LEllKXtyZXR1cm4gTihYZSksWGU8PTA/RihYZSk6dm9pZCAwIT09dHQ/InN0cmluZyI9PXR5cGVvZiBJZT9GKFhlKS5maWxsKHR0LEllKTpGKFhlKS5maWxsKHR0KTpGKFhlKX0oWGUsdHQsSWUpfSxSLmFsbG9jVW5z''@;'; put 'put ''YWZlPWZ1bmN0aW9uKFhlKXtyZXR1cm4gSyhYZSl9LFIuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKFhlKXtyZXR1cm4gSyhYZSl9LFIuaXNCdWZmZXI9ZnVuY3Rpb24odHQpe3JldHVybiBudWxsIT10dCYmITA9PT10dC5faXNCdWZmZXImJnR0IT09Ui5wcm90b3R5cGV9LFIuY29tcGFyZT1m''@;'; put 'put ''dW5jdGlvbih0dCxJZSl7aWYoc24odHQsVWludDhBcnJheSkmJih0dD1SLmZyb20odHQsdHQub2Zmc2V0LHR0LmJ5dGVMZW5ndGgpKSxzbihJZSxVaW50OEFycmF5KSYmKEllPVIuZnJvbShJZSxJZS5vZmZzZXQsSWUuYnl0ZUxlbmd0aCkpLCFSLmlzQnVmZmVyKHR0KXx8IVIuaXNCdWZmZXIo''@;'; put 'put ''SWUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiYnVmMSIsICJidWYyIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKHR0PT09SWUpcmV0dXJuIDA7bGV0IGF0PXR0Lmxlbmd0aCx1bj1JZS5sZW5ndGg7Zm9yKGxldCBJdD0wLFJ0PU1h''@;'; put 'put ''dGgubWluKGF0LHVuKTtJdDxSdDsrK0l0KWlmKHR0W0l0XSE9PUllW0l0XSl7YXQ9dHRbSXRdLHVuPUllW0l0XTticmVha31yZXR1cm4gYXQ8dW4/LTE6dW48YXQ/MTowfSxSLmlzRW5jb2Rpbmc9ZnVuY3Rpb24odHQpe3N3aXRjaChTdHJpbmcodHQpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4''@;'; put 'put ''IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sUi5jb25jYXQ9''@;'; put 'put ''ZnVuY3Rpb24odHQsSWUpe2lmKCFBcnJheS5pc0FycmF5KHR0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PXR0Lmxlbmd0aClyZXR1cm4gUi5hbGxvYygwKTtsZXQgYXQ7aWYodm9pZCAwPT09SWUpZm9y''@;'; put 'put ''KEllPTAsYXQ9MDthdDx0dC5sZW5ndGg7KythdClJZSs9dHRbYXRdLmxlbmd0aDtjb25zdCB1bj1SLmFsbG9jVW5zYWZlKEllKTtsZXQgSXQ9MDtmb3IoYXQ9MDthdDx0dC5sZW5ndGg7KythdCl7bGV0IFJ0PXR0W2F0XTtpZihzbihSdCxVaW50OEFycmF5KSlJdCtSdC5sZW5ndGg+dW4ubGVu''@;'; put 'put ''Z3RoPyhSLmlzQnVmZmVyKFJ0KXx8KFJ0PVIuZnJvbShSdCkpLFJ0LmNvcHkodW4sSXQpKTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbCh1bixSdCxJdCk7ZWxzZXtpZighUi5pc0J1ZmZlcihSdCkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4g''@;'; put 'put ''QXJyYXkgb2YgQnVmZmVycycpO1J0LmNvcHkodW4sSXQpfUl0Kz1SdC5sZW5ndGh9cmV0dXJuIHVufSxSLmJ5dGVMZW5ndGg9aWUsUi5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLFIucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe2NvbnN0IHR0PXRoaXMubGVuZ3RoO2lmKHR0JTIhPTApdGhy''@;'; put 'put ''b3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzIik7Zm9yKGxldCBJZT0wO0llPHR0O0llKz0yKWdlKHRoaXMsSWUsSWUrMSk7cmV0dXJuIHRoaXN9LFIucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe2NvbnN0IHR0PXRoaXMubGVu''@;'; put 'put ''Z3RoO2lmKHR0JTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKGxldCBJZT0wO0llPHR0O0llKz00KWdlKHRoaXMsSWUsSWUrMyksZ2UodGhpcyxJZSsxLEllKzIpO3JldHVybiB0aGlzfSxSLnByb3RvdHlw''@;'; put 'put ''ZS5zd2FwNjQ9ZnVuY3Rpb24oKXtjb25zdCB0dD10aGlzLmxlbmd0aDtpZih0dCU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2ZvcihsZXQgSWU9MDtJZTx0dDtJZSs9OClnZSh0aGlzLEllLEllKzcpLGdlKHRo''@;'; put 'put ''aXMsSWUrMSxJZSs2KSxnZSh0aGlzLEllKzIsSWUrNSksZ2UodGhpcyxJZSszLEllKzQpO3JldHVybiB0aGlzfSxSLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZz1SLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe2NvbnN0IHR0PXRoaXMubGVuZ3RoO3JldHVybiAwPT09dHQ/IiI6MD09''@;'; put 'put ''PWFyZ3VtZW50cy5sZW5ndGg/Qyh0aGlzLDAsdHQpOnVlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sUi5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHR0KXtpZighUi5pc0J1ZmZlcih0dCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0''@;'; put 'put ''aGlzPT09dHR8fDA9PT1SLmNvbXBhcmUodGhpcyx0dCl9LFIucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtsZXQgdHQ9IiI7Y29uc3QgSWU9WC5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gdHQ9dGhpcy50b1N0cmluZygiaGV4IiwwLEllKS5yZXBsYWNlKC8oLnsyfSkvZywiJDEgIiku''@;'; put 'put ''dHJpbSgpLHRoaXMubGVuZ3RoPkllJiYodHQrPSIgLi4uICIpLCI8QnVmZmVyICIrdHQrIj4ifSxWJiYoUi5wcm90b3R5cGVbVl09Ui5wcm90b3R5cGUuaW5zcGVjdCksUi5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbih0dCxJZSxhdCx1bixJdCl7aWYoc24odHQsVWludDhBcnJheSkmJih0''@;'; put 'put ''dD1SLmZyb20odHQsdHQub2Zmc2V0LHR0LmJ5dGVMZW5ndGgpKSwhUi5pc0J1ZmZlcih0dCkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ0YXJnZXQiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgdHQp''@;'; put 'put ''O2lmKHZvaWQgMD09PUllJiYoSWU9MCksdm9pZCAwPT09YXQmJihhdD10dD90dC5sZW5ndGg6MCksdm9pZCAwPT09dW4mJih1bj0wKSx2b2lkIDA9PT1JdCYmKEl0PXRoaXMubGVuZ3RoKSxJZTwwfHxhdD50dC5sZW5ndGh8fHVuPDB8fEl0PnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVy''@;'; put 'put ''cm9yKCJvdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZih1bj49SXQmJkllPj1hdClyZXR1cm4gMDtpZih1bj49SXQpcmV0dXJuLTE7aWYoSWU+PWF0KXJldHVybiAxO2lmKHRoaXM9PT10dClyZXR1cm4gMDtsZXQgUnQ9KEl0Pj4+PTApLSh1bj4+Pj0wKSxyaT0oYXQ+Pj49MCktKEllPj4+PTApO2Nv''@;'; put 'put ''bnN0IGFuPU1hdGgubWluKFJ0LHJpKSxsbj10aGlzLnNsaWNlKHVuLEl0KSxuaT10dC5zbGljZShJZSxhdCk7Zm9yKGxldCBobj0wO2huPGFuOysraG4paWYobG5baG5dIT09bmlbaG5dKXtSdD1sbltobl0scmk9bmlbaG5dO2JyZWFrfXJldHVybiBSdDxyaT8tMTpyaTxSdD8xOjB9LFIucHJv''@;'; put 'put ''dG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKHR0LEllLGF0KXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZih0dCxJZSxhdCl9LFIucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24odHQsSWUsYXQpe3JldHVybiBfZSh0aGlzLHR0LEllLGF0LCEwKX0sUi5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVu''@;'; put 'put ''Y3Rpb24odHQsSWUsYXQpe3JldHVybiBfZSh0aGlzLHR0LEllLGF0LCExKX0sUi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odHQsSWUsYXQsdW4pe2lmKHZvaWQgMD09PUllKXVuPSJ1dGY4IixhdD10aGlzLmxlbmd0aCxJZT0wO2Vsc2UgaWYodm9pZCAwPT09YXQmJiJzdHJpbmciPT10eXBl''@;'; put 'put ''b2YgSWUpdW49SWUsYXQ9dGhpcy5sZW5ndGgsSWU9MDtlbHNle2lmKCFpc0Zpbml0ZShJZSkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO0llPj4+PTAsaXNGaW5pdGUoYXQp''@;'; put 'put ''PyhhdD4+Pj0wLHZvaWQgMD09PXVuJiYodW49InV0ZjgiKSk6KHVuPWF0LGF0PXZvaWQgMCl9Y29uc3QgSXQ9dGhpcy5sZW5ndGgtSWU7aWYoKHZvaWQgMD09PWF0fHxhdD5JdCkmJihhdD1JdCksdHQubGVuZ3RoPjAmJihhdDwwfHxJZTwwKXx8SWU+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJh''@;'; put 'put ''bmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7dW58fCh1bj0idXRmOCIpO2xldCBSdD0hMTtmb3IoOzspc3dpdGNoKHVuKXtjYXNlImhleCI6cmV0dXJuIE1lKHRoaXMsdHQsSWUsYXQpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIFplKHRo''@;'; put 'put ''aXMsdHQsSWUsYXQpO2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIEIodGhpcyx0dCxJZSxhdCk7Y2FzZSJiYXNlNjQiOnJldHVybiBnKHRoaXMsdHQsSWUsYXQpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpy''@;'; put 'put ''ZXR1cm4geSh0aGlzLHR0LEllLGF0KTtkZWZhdWx0OmlmKFJ0KXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrdW4pO3VuPSgiIit1bikudG9Mb3dlckNhc2UoKSxSdD0hMH19LFIucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIi''@;'; put 'put ''LGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07Y29uc3QgVD00MDk2O2Z1bmN0aW9uIGooWGUsdHQsSWUpe2xldCBhdD0iIjtJZT1NYXRoLm1pbihYZS5sZW5ndGgsSWUpO2ZvcihsZXQgdW49dHQ7dW48SWU7Kyt1bilhdCs9U3RyaW5nLmZyb21D''@;'; put 'put ''aGFyQ29kZSgxMjcmWGVbdW5dKTtyZXR1cm4gYXR9ZnVuY3Rpb24gRShYZSx0dCxJZSl7bGV0IGF0PSIiO0llPU1hdGgubWluKFhlLmxlbmd0aCxJZSk7Zm9yKGxldCB1bj10dDt1bjxJZTsrK3VuKWF0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKFhlW3VuXSk7cmV0dXJuIGF0fWZ1bmN0aW9uIG0o''@;'; put 'put ''WGUsdHQsSWUpe2NvbnN0IGF0PVhlLmxlbmd0aDsoIXR0fHx0dDwwKSYmKHR0PTApLCghSWV8fEllPDB8fEllPmF0KSYmKEllPWF0KTtsZXQgdW49IiI7Zm9yKGxldCBJdD10dDtJdDxJZTsrK0l0KXVuKz1TdFtYZVtJdF1dO3JldHVybiB1bn1mdW5jdGlvbiBBKFhlLHR0LEllKXtjb25zdCBh''@;'; put 'put ''dD1YZS5zbGljZSh0dCxJZSk7bGV0IHVuPSIiO2ZvcihsZXQgSXQ9MDtJdDxhdC5sZW5ndGgtMTtJdCs9Mil1bis9U3RyaW5nLmZyb21DaGFyQ29kZShhdFtJdF0rMjU2KmF0W0l0KzFdKTtyZXR1cm4gdW59ZnVuY3Rpb24gYWUoWGUsdHQsSWUpe2lmKFhlJTEhPTB8fFhlPDApdGhyb3cgbmV3''@;'; put 'put ''IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKFhlK3R0PkllKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gbmUoWGUsdHQsSWUsYXQsdW4sSXQpe2lmKCFSLmlzQnVmZmVyKFhlKSl0aHJvdyBu''@;'; put 'put ''ZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYodHQ+dW58fHR0PEl0KXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihJZSthdD5YZS5sZW5ndGgpdGhyb3cgbmV3IFJh''@;'; put 'put ''bmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIHNlKFhlLHR0LEllLGF0LHVuKXtrZSh0dCxhdCx1bixYZSxJZSw3KTtsZXQgSXQ9TnVtYmVyKHR0JkJpZ0ludCg0Mjk0OTY3Mjk1KSk7WGVbSWUrK109SXQsSXQ+Pj04LFhlW0llKytdPUl0LEl0Pj49OCxYZVtJZSsrXT1J''@;'; put 'put ''dCxJdD4+PTgsWGVbSWUrK109SXQ7bGV0IFJ0PU51bWJlcih0dD4+QmlnSW50KDMyKSZCaWdJbnQoNDI5NDk2NzI5NSkpO3JldHVybiBYZVtJZSsrXT1SdCxSdD4+PTgsWGVbSWUrK109UnQsUnQ+Pj04LFhlW0llKytdPVJ0LFJ0Pj49OCxYZVtJZSsrXT1SdCxJZX1mdW5jdGlvbiBDZShYZSx0''@;'; put 'put ''dCxJZSxhdCx1bil7a2UodHQsYXQsdW4sWGUsSWUsNyk7bGV0IEl0PU51bWJlcih0dCZCaWdJbnQoNDI5NDk2NzI5NSkpO1hlW0llKzddPUl0LEl0Pj49OCxYZVtJZSs2XT1JdCxJdD4+PTgsWGVbSWUrNV09SXQsSXQ+Pj04LFhlW0llKzRdPUl0O2xldCBSdD1OdW1iZXIodHQ+PkJpZ0ludCgz''@;'; put 'put ''MikmQmlnSW50KDQyOTQ5NjcyOTUpKTtyZXR1cm4gWGVbSWUrM109UnQsUnQ+Pj04LFhlW0llKzJdPVJ0LFJ0Pj49OCxYZVtJZSsxXT1SdCxSdD4+PTgsWGVbSWVdPVJ0LEllKzh9ZnVuY3Rpb24gVWUoWGUsdHQsSWUsYXQsdW4sSXQpe2lmKEllK2F0PlhlLmxlbmd0aCl0aHJvdyBuZXcgUmFu''@;'; put 'put ''Z2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYoSWU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gSmUoWGUsdHQsSWUsYXQsdW4pe3JldHVybiB0dD0rdHQsSWU+Pj49MCx1bnx8VWUoWGUsMCxJZSw0KSxwLndyaXRlKFhlLHR0LEll''@;'; put 'put ''LGF0LDIzLDQpLEllKzR9ZnVuY3Rpb24gaXQoWGUsdHQsSWUsYXQsdW4pe3JldHVybiB0dD0rdHQsSWU+Pj49MCx1bnx8VWUoWGUsMCxJZSw4KSxwLndyaXRlKFhlLHR0LEllLGF0LDUyLDgpLEllKzh9Ui5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24odHQsSWUpe2NvbnN0IGF0PXRoaXMubGVu''@;'; put 'put ''Z3RoOyh0dD1+fnR0KTwwPyh0dCs9YXQpPDAmJih0dD0wKTp0dD5hdCYmKHR0PWF0KSwoSWU9dm9pZCAwPT09SWU/YXQ6fn5JZSk8MD8oSWUrPWF0KTwwJiYoSWU9MCk6SWU+YXQmJihJZT1hdCksSWU8dHQmJihJZT10dCk7Y29uc3QgdW49dGhpcy5zdWJhcnJheSh0dCxJZSk7cmV0dXJuIE9i''@;'; put 'put ''amVjdC5zZXRQcm90b3R5cGVPZih1bixSLnByb3RvdHlwZSksdW59LFIucHJvdG90eXBlLnJlYWRVaW50TEU9Ui5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbih0dCxJZSxhdCl7dHQ+Pj49MCxJZT4+Pj0wLGF0fHxhZSh0dCxJZSx0aGlzLmxlbmd0aCk7bGV0IHVuPXRoaXNbdHRdLEl0''@;'; put 'put ''PTEsUnQ9MDtmb3IoOysrUnQ8SWUmJihJdCo9MjU2KTspdW4rPXRoaXNbdHQrUnRdKkl0O3JldHVybiB1bn0sUi5wcm90b3R5cGUucmVhZFVpbnRCRT1SLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKHR0LEllLGF0KXt0dD4+Pj0wLEllPj4+PTAsYXR8fGFlKHR0LEllLHRoaXMubGVu''@;'; put 'put ''Z3RoKTtsZXQgdW49dGhpc1t0dCstLUllXSxJdD0xO2Zvcig7SWU+MCYmKEl0Kj0yNTYpOyl1bis9dGhpc1t0dCstLUllXSpJdDtyZXR1cm4gdW59LFIucHJvdG90eXBlLnJlYWRVaW50OD1SLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24odHQsSWUpe3JldHVybiB0dD4+Pj0wLEllfHxh''@;'; put 'put ''ZSh0dCwxLHRoaXMubGVuZ3RoKSx0aGlzW3R0XX0sUi5wcm90b3R5cGUucmVhZFVpbnQxNkxFPVIucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbih0dCxJZSl7cmV0dXJuIHR0Pj4+PTAsSWV8fGFlKHR0LDIsdGhpcy5sZW5ndGgpLHRoaXNbdHRdfHRoaXNbdHQrMV08PDh9LFIucHJv''@;'; put 'put ''dG90eXBlLnJlYWRVaW50MTZCRT1SLnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24odHQsSWUpe3JldHVybiB0dD4+Pj0wLEllfHxhZSh0dCwyLHRoaXMubGVuZ3RoKSx0aGlzW3R0XTw8OHx0aGlzW3R0KzFdfSxSLnByb3RvdHlwZS5yZWFkVWludDMyTEU9Ui5wcm90b3R5cGUucmVh''@;'; put 'put ''ZFVJbnQzMkxFPWZ1bmN0aW9uKHR0LEllKXtyZXR1cm4gdHQ+Pj49MCxJZXx8YWUodHQsNCx0aGlzLmxlbmd0aCksKHRoaXNbdHRdfHRoaXNbdHQrMV08PDh8dGhpc1t0dCsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbdHQrM119LFIucHJvdG90eXBlLnJlYWRVaW50MzJCRT1SLnByb3RvdHlwZS5y''@;'; put 'put ''ZWFkVUludDMyQkU9ZnVuY3Rpb24odHQsSWUpe3JldHVybiB0dD4+Pj0wLEllfHxhZSh0dCw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW3R0XSsodGhpc1t0dCsxXTw8MTZ8dGhpc1t0dCsyXTw8OHx0aGlzW3R0KzNdKX0sUi5wcm90b3R5cGUucmVhZEJpZ1VJbnQ2NExFPWVuKGZ1bmN0''@;'; put 'put ''aW9uKHR0KXtIZSh0dD4+Pj0wLCJvZmZzZXQiKTtjb25zdCBJZT10aGlzW3R0XSxhdD10aGlzW3R0KzddOyh2b2lkIDA9PT1JZXx8dm9pZCAwPT09YXQpJiZMZSh0dCx0aGlzLmxlbmd0aC04KTtjb25zdCB1bj1JZSsyNTYqdGhpc1srK3R0XSs2NTUzNip0aGlzWysrdHRdK3RoaXNbKyt0dF0q''@;'; put 'put ''MioqMjQsSXQ9dGhpc1srK3R0XSsyNTYqdGhpc1srK3R0XSs2NTUzNip0aGlzWysrdHRdK2F0KjIqKjI0O3JldHVybiBCaWdJbnQodW4pKyhCaWdJbnQoSXQpPDxCaWdJbnQoMzIpKX0pLFIucHJvdG90eXBlLnJlYWRCaWdVSW50NjRCRT1lbihmdW5jdGlvbih0dCl7SGUodHQ+Pj49MCwib2Zm''@;'; put 'put ''c2V0Iik7Y29uc3QgSWU9dGhpc1t0dF0sYXQ9dGhpc1t0dCs3XTsodm9pZCAwPT09SWV8fHZvaWQgMD09PWF0KSYmTGUodHQsdGhpcy5sZW5ndGgtOCk7Y29uc3QgdW49SWUqMioqMjQrNjU1MzYqdGhpc1srK3R0XSsyNTYqdGhpc1srK3R0XSt0aGlzWysrdHRdLEl0PXRoaXNbKyt0dF0qMioq''@;'; put 'put ''MjQrNjU1MzYqdGhpc1srK3R0XSsyNTYqdGhpc1srK3R0XSthdDtyZXR1cm4oQmlnSW50KHVuKTw8QmlnSW50KDMyKSkrQmlnSW50KEl0KX0pLFIucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbih0dCxJZSxhdCl7dHQ+Pj49MCxJZT4+Pj0wLGF0fHxhZSh0dCxJZSx0aGlzLmxlbmd0aCk7''@;'; put 'put ''bGV0IHVuPXRoaXNbdHRdLEl0PTEsUnQ9MDtmb3IoOysrUnQ8SWUmJihJdCo9MjU2KTspdW4rPXRoaXNbdHQrUnRdKkl0O3JldHVybiBJdCo9MTI4LHVuPj1JdCYmKHVuLT1NYXRoLnBvdygyLDgqSWUpKSx1bn0sUi5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKHR0LEllLGF0KXt0dD4+''@;'; put 'put ''Pj0wLEllPj4+PTAsYXR8fGFlKHR0LEllLHRoaXMubGVuZ3RoKTtsZXQgdW49SWUsSXQ9MSxSdD10aGlzW3R0Ky0tdW5dO2Zvcig7dW4+MCYmKEl0Kj0yNTYpOylSdCs9dGhpc1t0dCstLXVuXSpJdDtyZXR1cm4gSXQqPTEyOCxSdD49SXQmJihSdC09TWF0aC5wb3coMiw4KkllKSksUnR9LFIu''@;'; put 'put ''cHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKHR0LEllKXtyZXR1cm4gdHQ+Pj49MCxJZXx8YWUodHQsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbdHRdPy0xKigyNTUtdGhpc1t0dF0rMSk6dGhpc1t0dF19LFIucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKHR0LEllKXt0dD4+Pj0w''@;'; put 'put ''LEllfHxhZSh0dCwyLHRoaXMubGVuZ3RoKTtjb25zdCBhdD10aGlzW3R0XXx0aGlzW3R0KzFdPDw4O3JldHVybiAzMjc2OCZhdD80Mjk0OTAxNzYwfGF0OmF0fSxSLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbih0dCxJZSl7dHQ+Pj49MCxJZXx8YWUodHQsMix0aGlzLmxlbmd0aCk7''@;'; put 'put ''Y29uc3QgYXQ9dGhpc1t0dCsxXXx0aGlzW3R0XTw8ODtyZXR1cm4gMzI3NjgmYXQ/NDI5NDkwMTc2MHxhdDphdH0sUi5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24odHQsSWUpe3JldHVybiB0dD4+Pj0wLEllfHxhZSh0dCw0LHRoaXMubGVuZ3RoKSx0aGlzW3R0XXx0aGlzW3R0KzFd''@;'; put 'put ''PDw4fHRoaXNbdHQrMl08PDE2fHRoaXNbdHQrM108PDI0fSxSLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbih0dCxJZSl7cmV0dXJuIHR0Pj4+PTAsSWV8fGFlKHR0LDQsdGhpcy5sZW5ndGgpLHRoaXNbdHRdPDwyNHx0aGlzW3R0KzFdPDwxNnx0aGlzW3R0KzJdPDw4fHRoaXNbdHQr''@;'; put 'put ''M119LFIucHJvdG90eXBlLnJlYWRCaWdJbnQ2NExFPWVuKGZ1bmN0aW9uKHR0KXtIZSh0dD4+Pj0wLCJvZmZzZXQiKTtjb25zdCBJZT10aGlzW3R0XSxhdD10aGlzW3R0KzddO3JldHVybih2b2lkIDA9PT1JZXx8dm9pZCAwPT09YXQpJiZMZSh0dCx0aGlzLmxlbmd0aC04KSwoQmlnSW50KHRo''@;'; put 'put ''aXNbdHQrNF0rMjU2KnRoaXNbdHQrNV0rNjU1MzYqdGhpc1t0dCs2XSsoYXQ8PDI0KSk8PEJpZ0ludCgzMikpK0JpZ0ludChJZSsyNTYqdGhpc1srK3R0XSs2NTUzNip0aGlzWysrdHRdKzE2Nzc3MjE2KnRoaXNbKyt0dF0pfSksUi5wcm90b3R5cGUucmVhZEJpZ0ludDY0QkU9ZW4oZnVuY3Rp''@;'; put 'put ''b24odHQpe0hlKHR0Pj4+PTAsIm9mZnNldCIpO2NvbnN0IEllPXRoaXNbdHRdLGF0PXRoaXNbdHQrN107KHZvaWQgMD09PUllfHx2b2lkIDA9PT1hdCkmJkxlKHR0LHRoaXMubGVuZ3RoLTgpO2NvbnN0IHVuPShJZTw8MjQpKzY1NTM2KnRoaXNbKyt0dF0rMjU2KnRoaXNbKyt0dF0rdGhpc1sr''@;'; put 'put ''K3R0XTtyZXR1cm4oQmlnSW50KHVuKTw8QmlnSW50KDMyKSkrQmlnSW50KDE2Nzc3MjE2KnRoaXNbKyt0dF0rNjU1MzYqdGhpc1srK3R0XSsyNTYqdGhpc1srK3R0XSthdCl9KSxSLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbih0dCxJZSl7cmV0dXJuIHR0Pj4+PTAsSWV8fGFlKHR0''@;'; put 'put ''LDQsdGhpcy5sZW5ndGgpLHAucmVhZCh0aGlzLHR0LCEwLDIzLDQpfSxSLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbih0dCxJZSl7cmV0dXJuIHR0Pj4+PTAsSWV8fGFlKHR0LDQsdGhpcy5sZW5ndGgpLHAucmVhZCh0aGlzLHR0LCExLDIzLDQpfSxSLnByb3RvdHlwZS5yZWFkRG91''@;'; put 'put ''YmxlTEU9ZnVuY3Rpb24odHQsSWUpe3JldHVybiB0dD4+Pj0wLEllfHxhZSh0dCw4LHRoaXMubGVuZ3RoKSxwLnJlYWQodGhpcyx0dCwhMCw1Miw4KX0sUi5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKHR0LEllKXtyZXR1cm4gdHQ+Pj49MCxJZXx8YWUodHQsOCx0aGlzLmxlbmd0''@;'; put 'put ''aCkscC5yZWFkKHRoaXMsdHQsITEsNTIsOCl9LFIucHJvdG90eXBlLndyaXRlVWludExFPVIucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKHR0LEllLGF0LHVuKXt0dD0rdHQsSWU+Pj49MCxhdD4+Pj0wLHVufHxuZSh0aGlzLHR0LEllLGF0LE1hdGgucG93KDIsOCphdCktMSwwKTts''@;'; put 'put ''ZXQgSXQ9MSxSdD0wO2Zvcih0aGlzW0llXT0yNTUmdHQ7KytSdDxhdCYmKEl0Kj0yNTYpOyl0aGlzW0llK1J0XT10dC9JdCYyNTU7cmV0dXJuIEllK2F0fSxSLnByb3RvdHlwZS53cml0ZVVpbnRCRT1SLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbih0dCxJZSxhdCx1bil7dHQ9K3R0''@;'; put 'put ''LEllPj4+PTAsYXQ+Pj49MCx1bnx8bmUodGhpcyx0dCxJZSxhdCxNYXRoLnBvdygyLDgqYXQpLTEsMCk7bGV0IEl0PWF0LTEsUnQ9MTtmb3IodGhpc1tJZStJdF09MjU1JnR0Oy0tSXQ+PTAmJihSdCo9MjU2KTspdGhpc1tJZStJdF09dHQvUnQmMjU1O3JldHVybiBJZSthdH0sUi5wcm90b3R5''@;'; put 'put ''cGUud3JpdGVVaW50OD1SLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKHR0LEllLGF0KXtyZXR1cm4gdHQ9K3R0LEllPj4+PTAsYXR8fG5lKHRoaXMsdHQsSWUsMSwyNTUsMCksdGhpc1tJZV09MjU1JnR0LEllKzF9LFIucHJvdG90eXBlLndyaXRlVWludDE2TEU9Ui5wcm90b3R5cGUu''@;'; put 'put ''d3JpdGVVSW50MTZMRT1mdW5jdGlvbih0dCxJZSxhdCl7cmV0dXJuIHR0PSt0dCxJZT4+Pj0wLGF0fHxuZSh0aGlzLHR0LEllLDIsNjU1MzUsMCksdGhpc1tJZV09MjU1JnR0LHRoaXNbSWUrMV09dHQ+Pj44LEllKzJ9LFIucHJvdG90eXBlLndyaXRlVWludDE2QkU9Ui5wcm90b3R5cGUud3Jp''@;'; put 'put ''dGVVSW50MTZCRT1mdW5jdGlvbih0dCxJZSxhdCl7cmV0dXJuIHR0PSt0dCxJZT4+Pj0wLGF0fHxuZSh0aGlzLHR0LEllLDIsNjU1MzUsMCksdGhpc1tJZV09dHQ+Pj44LHRoaXNbSWUrMV09MjU1JnR0LEllKzJ9LFIucHJvdG90eXBlLndyaXRlVWludDMyTEU9Ui5wcm90b3R5cGUud3JpdGVV''@;'; put 'put ''SW50MzJMRT1mdW5jdGlvbih0dCxJZSxhdCl7cmV0dXJuIHR0PSt0dCxJZT4+Pj0wLGF0fHxuZSh0aGlzLHR0LEllLDQsNDI5NDk2NzI5NSwwKSx0aGlzW0llKzNdPXR0Pj4+MjQsdGhpc1tJZSsyXT10dD4+PjE2LHRoaXNbSWUrMV09dHQ+Pj44LHRoaXNbSWVdPTI1NSZ0dCxJZSs0fSxSLnBy''@;'; put 'put ''b3RvdHlwZS53cml0ZVVpbnQzMkJFPVIucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24odHQsSWUsYXQpe3JldHVybiB0dD0rdHQsSWU+Pj49MCxhdHx8bmUodGhpcyx0dCxJZSw0LDQyOTQ5NjcyOTUsMCksdGhpc1tJZV09dHQ+Pj4yNCx0aGlzW0llKzFdPXR0Pj4+MTYsdGhpc1tJ''@;'; put 'put ''ZSsyXT10dD4+PjgsdGhpc1tJZSszXT0yNTUmdHQsSWUrNH0sUi5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRMRT1lbihmdW5jdGlvbih0dCxJZT0wKXtyZXR1cm4gc2UodGhpcyx0dCxJZSxCaWdJbnQoMCksQmlnSW50KCIweGZmZmZmZmZmZmZmZmZmZmYiKSl9KSxSLnByb3RvdHlwZS53cml0''@;'; put 'put ''ZUJpZ1VJbnQ2NEJFPWVuKGZ1bmN0aW9uKHR0LEllPTApe3JldHVybiBDZSh0aGlzLHR0LEllLEJpZ0ludCgwKSxCaWdJbnQoIjB4ZmZmZmZmZmZmZmZmZmZmZiIpKX0pLFIucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24odHQsSWUsYXQsdW4pe2lmKHR0PSt0dCxJZT4+Pj0wLCF1bil7''@;'; put 'put ''Y29uc3QgYW49TWF0aC5wb3coMiw4KmF0LTEpO25lKHRoaXMsdHQsSWUsYXQsYW4tMSwtYW4pfWxldCBJdD0wLFJ0PTEscmk9MDtmb3IodGhpc1tJZV09MjU1JnR0OysrSXQ8YXQmJihSdCo9MjU2KTspdHQ8MCYmMD09PXJpJiYwIT09dGhpc1tJZStJdC0xXSYmKHJpPTEpLHRoaXNbSWUrSXRd''@;'; put 'put ''PSh0dC9SdHwwKS1yaSYyNTU7cmV0dXJuIEllK2F0fSxSLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKHR0LEllLGF0LHVuKXtpZih0dD0rdHQsSWU+Pj49MCwhdW4pe2NvbnN0IGFuPU1hdGgucG93KDIsOCphdC0xKTtuZSh0aGlzLHR0LEllLGF0LGFuLTEsLWFuKX1sZXQgSXQ9YXQt''@;'; put 'put ''MSxSdD0xLHJpPTA7Zm9yKHRoaXNbSWUrSXRdPTI1NSZ0dDstLUl0Pj0wJiYoUnQqPTI1Nik7KXR0PDAmJjA9PT1yaSYmMCE9PXRoaXNbSWUrSXQrMV0mJihyaT0xKSx0aGlzW0llK0l0XT0odHQvUnR8MCktcmkmMjU1O3JldHVybiBJZSthdH0sUi5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0''@;'; put 'put ''aW9uKHR0LEllLGF0KXtyZXR1cm4gdHQ9K3R0LEllPj4+PTAsYXR8fG5lKHRoaXMsdHQsSWUsMSwxMjcsLTEyOCksdHQ8MCYmKHR0PTI1NSt0dCsxKSx0aGlzW0llXT0yNTUmdHQsSWUrMX0sUi5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKHR0LEllLGF0KXtyZXR1cm4gdHQ9K3R0''@;'; put 'put ''LEllPj4+PTAsYXR8fG5lKHRoaXMsdHQsSWUsMiwzMjc2NywtMzI3NjgpLHRoaXNbSWVdPTI1NSZ0dCx0aGlzW0llKzFdPXR0Pj4+OCxJZSsyfSxSLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24odHQsSWUsYXQpe3JldHVybiB0dD0rdHQsSWU+Pj49MCxhdHx8bmUodGhpcyx0dCxJ''@;'; put 'put ''ZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tJZV09dHQ+Pj44LHRoaXNbSWUrMV09MjU1JnR0LEllKzJ9LFIucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbih0dCxJZSxhdCl7cmV0dXJuIHR0PSt0dCxJZT4+Pj0wLGF0fHxuZSh0aGlzLHR0LEllLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0''@;'; put 'put ''OCksdGhpc1tJZV09MjU1JnR0LHRoaXNbSWUrMV09dHQ+Pj44LHRoaXNbSWUrMl09dHQ+Pj4xNix0aGlzW0llKzNdPXR0Pj4+MjQsSWUrNH0sUi5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKHR0LEllLGF0KXtyZXR1cm4gdHQ9K3R0LEllPj4+PTAsYXR8fG5lKHRoaXMsdHQsSWUs''@;'; put 'put ''NCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0dDwwJiYodHQ9NDI5NDk2NzI5NSt0dCsxKSx0aGlzW0llXT10dD4+PjI0LHRoaXNbSWUrMV09dHQ+Pj4xNix0aGlzW0llKzJdPXR0Pj4+OCx0aGlzW0llKzNdPTI1NSZ0dCxJZSs0fSxSLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0TEU9ZW4oZnVu''@;'; put 'put ''Y3Rpb24odHQsSWU9MCl7cmV0dXJuIHNlKHRoaXMsdHQsSWUsLUJpZ0ludCgiMHg4MDAwMDAwMDAwMDAwMDAwIiksQmlnSW50KCIweDdmZmZmZmZmZmZmZmZmZmYiKSl9KSxSLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0QkU9ZW4oZnVuY3Rpb24odHQsSWU9MCl7cmV0dXJuIENlKHRoaXMsdHQs''@;'; put 'put ''SWUsLUJpZ0ludCgiMHg4MDAwMDAwMDAwMDAwMDAwIiksQmlnSW50KCIweDdmZmZmZmZmZmZmZmZmZmYiKSl9KSxSLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24odHQsSWUsYXQpe3JldHVybiBKZSh0aGlzLHR0LEllLCEwLGF0KX0sUi5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1''@;'; put 'put ''bmN0aW9uKHR0LEllLGF0KXtyZXR1cm4gSmUodGhpcyx0dCxJZSwhMSxhdCl9LFIucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24odHQsSWUsYXQpe3JldHVybiBpdCh0aGlzLHR0LEllLCEwLGF0KX0sUi5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbih0dCxJZSxhdCl7''@;'; put 'put ''cmV0dXJuIGl0KHRoaXMsdHQsSWUsITEsYXQpfSxSLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHR0LEllLGF0LHVuKXtpZighUi5pc0J1ZmZlcih0dCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyIik7aWYoYXR8fChhdD0wKSwhdW4mJjAhPT11biYm''@;'; put 'put ''KHVuPXRoaXMubGVuZ3RoKSxJZT49dHQubGVuZ3RoJiYoSWU9dHQubGVuZ3RoKSxJZXx8KEllPTApLHVuPjAmJnVuPGF0JiYodW49YXQpLHVuPT09YXR8fDA9PT10dC5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZihJZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRT''@;'; put 'put ''dGFydCBvdXQgb2YgYm91bmRzIik7aWYoYXQ8MHx8YXQ+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZih1bjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO3VuPnRoaXMubGVuZ3RoJiYodW49''@;'; put 'put ''dGhpcy5sZW5ndGgpLHR0Lmxlbmd0aC1JZTx1bi1hdCYmKHVuPXR0Lmxlbmd0aC1JZSthdCk7Y29uc3QgSXQ9dW4tYXQ7cmV0dXJuIHRoaXM9PT10dCYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4/dGhpcy5jb3B5V2l0aGluKEllLGF0LHVuKTpV''@;'; put 'put ''aW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbCh0dCx0aGlzLnN1YmFycmF5KGF0LHVuKSxJZSksSXR9LFIucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24odHQsSWUsYXQsdW4pe2lmKCJzdHJpbmciPT10eXBlb2YgdHQpe2lmKCJzdHJpbmciPT10eXBlb2YgSWU/KHVuPUllLEllPTAsYXQ9dGhp''@;'; put 'put ''cy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgYXQmJih1bj1hdCxhdD10aGlzLmxlbmd0aCksdm9pZCAwIT09dW4mJiJzdHJpbmciIT10eXBlb2YgdW4pdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgdW4mJiFSLmlz''@;'; put 'put ''RW5jb2RpbmcodW4pKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrdW4pO2lmKDE9PT10dC5sZW5ndGgpe2NvbnN0IFJ0PXR0LmNoYXJDb2RlQXQoMCk7KCJ1dGY4Ij09PXVuJiZSdDwxMjh8fCJsYXRpbjEiPT09dW4pJiYodHQ9UnQpfX1lbHNlIm51bWJlciI9PXR5''@;'; put 'put ''cGVvZiB0dD90dCY9MjU1OiJib29sZWFuIj09dHlwZW9mIHR0JiYodHQ9TnVtYmVyKHR0KSk7aWYoSWU8MHx8dGhpcy5sZW5ndGg8SWV8fHRoaXMubGVuZ3RoPGF0KXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihhdDw9SWUpcmV0dXJuIHRoaXM7bGV0IEl0''@;'; put 'put ''O2lmKEllPj4+PTAsYXQ9dm9pZCAwPT09YXQ/dGhpcy5sZW5ndGg6YXQ+Pj4wLHR0fHwodHQ9MCksIm51bWJlciI9PXR5cGVvZiB0dClmb3IoSXQ9SWU7SXQ8YXQ7KytJdCl0aGlzW0l0XT10dDtlbHNle2NvbnN0IFJ0PVIuaXNCdWZmZXIodHQpP3R0OlIuZnJvbSh0dCx1bikscmk9UnQubGVu''@;'; put 'put ''Z3RoO2lmKDA9PT1yaSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgIicrdHQrJyIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgInZhbHVlIicpO2ZvcihJdD0wO0l0PGF0LUllOysrSXQpdGhpc1tJdCtJZV09UnRbSXQlcmldfXJldHVybiB0aGlzfTtjb25zdCB4ZT17fTtmdW5jdGlv''@;'; put 'put ''biB5ZShYZSx0dCxJZSl7eGVbWGVdPWNsYXNzIGV4dGVuZHMgSWV7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJtZXNzYWdlIix7dmFsdWU6dHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHRoaXMu''@;'; put 'put ''bmFtZT1gJHt0aGlzLm5hbWV9IFske1hlfV1gLGRlbGV0ZSB0aGlzLm5hbWV9Z2V0IGNvZGUoKXtyZXR1cm4gWGV9c2V0IGNvZGUodW4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJjb2RlIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6dW4sd3JpdGFibGU6ITB9''@;'; put 'put ''KX10b1N0cmluZygpe3JldHVybmAke3RoaXMubmFtZX0gWyR7WGV9XTogJHt0aGlzLm1lc3NhZ2V9YH19fWZ1bmN0aW9uIEtlKFhlKXtsZXQgdHQ9IiIsSWU9WGUubGVuZ3RoO2NvbnN0IGF0PSItIj09PVhlWzBdPzE6MDtmb3IoO0llPj1hdCs0O0llLT0zKXR0PWBfJHtYZS5zbGljZShJZS0z''@;'; put 'put ''LEllKX0ke3R0fWA7cmV0dXJuYCR7WGUuc2xpY2UoMCxJZSl9JHt0dH1gfWZ1bmN0aW9uIGtlKFhlLHR0LEllLGF0LHVuLEl0KXtpZihYZT5JZXx8WGU8dHQpe2NvbnN0IFJ0PSJiaWdpbnQiPT10eXBlb2YgdHQ/Im4iOiIiO2xldCByaTt0aHJvdyByaT1JdD4zPzA9PT10dHx8dHQ9PT1CaWdJ''@;'; put 'put ''bnQoMCk/YD49IDAke1J0fSBhbmQgPCAyJHtSdH0gKiogJHs4KihJdCsxKX0ke1J0fWA6YD49IC0oMiR7UnR9ICoqICR7OCooSXQrMSktMX0ke1J0fSkgYW5kIDwgMiAqKiAkezgqKEl0KzEpLTF9JHtSdH1gOmA+PSAke3R0fSR7UnR9IGFuZCA8PSAke0llfSR7UnR9YCxuZXcgeGUuRVJSX09V''@;'; put 'put ''VF9PRl9SQU5HRSgidmFsdWUiLHJpLFhlKX0hZnVuY3Rpb24gamUoWGUsdHQsSWUpe0hlKHR0LCJvZmZzZXQiKSwodm9pZCAwPT09WGVbdHRdfHx2b2lkIDA9PT1YZVt0dCtJZV0pJiZMZSh0dCxYZS5sZW5ndGgtKEllKzEpKX0oYXQsdW4sSXQpfWZ1bmN0aW9uIEhlKFhlLHR0KXtpZigibnVt''@;'; put 'put ''YmVyIiE9dHlwZW9mIFhlKXRocm93IG5ldyB4ZS5FUlJfSU5WQUxJRF9BUkdfVFlQRSh0dCwibnVtYmVyIixYZSl9ZnVuY3Rpb24gTGUoWGUsdHQsSWUpe3Rocm93IE1hdGguZmxvb3IoWGUpIT09WGU/KEhlKFhlLEllKSxuZXcgeGUuRVJSX09VVF9PRl9SQU5HRShJZXx8Im9mZnNldCIsImFu''@;'; put 'put ''IGludGVnZXIiLFhlKSk6dHQ8MD9uZXcgeGUuRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTOm5ldyB4ZS5FUlJfT1VUX09GX1JBTkdFKEllfHwib2Zmc2V0IixgPj0gJHtJZT8xOjB9IGFuZCA8PSAke3R0fWAsWGUpfXllKCJFUlJfQlVGRkVSX09VVF9PRl9CT1VORFMiLGZ1bmN0aW9uKFhlKXty''@;'; put 'put ''ZXR1cm4gWGU/YCR7WGV9IGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kc2A6IkF0dGVtcHQgdG8gYWNjZXNzIG1lbW9yeSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMifSxSYW5nZUVycm9yKSx5ZSgiRVJSX0lOVkFMSURfQVJHX1RZUEUiLGZ1bmN0aW9uKFhlLHR0KXtyZXR1cm5gVGhlICIke1hl''@;'; put 'put ''fSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiB0dH1gfSxUeXBlRXJyb3IpLHllKCJFUlJfT1VUX09GX1JBTkdFIixmdW5jdGlvbihYZSx0dCxJZSl7bGV0IGF0PWBUaGUgdmFsdWUgb2YgIiR7WGV9IiBpcyBvdXQgb2YgcmFuZ2UuYCx1''@;'; put 'put ''bj1JZTtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihJZSkmJk1hdGguYWJzKEllKT40Mjk0OTY3Mjk2P3VuPUtlKFN0cmluZyhJZSkpOiJiaWdpbnQiPT10eXBlb2YgSWUmJih1bj1TdHJpbmcoSWUpLChJZT5CaWdJbnQoMikqKkJpZ0ludCgzMil8fEllPC0oQmlnSW50KDIpKipCaWdJbnQoMzIp''@;'; put 'put ''KSkmJih1bj1LZSh1bikpLHVuKz0ibiIpLGF0Kz1gIEl0IG11c3QgYmUgJHt0dH0uIFJlY2VpdmVkICR7dW59YCxhdH0sUmFuZ2VFcnJvcik7Y29uc3QgUmU9L1teKy8wLTlBLVphLXotX10vZztmdW5jdGlvbiBBZShYZSx0dCl7bGV0IEllO3R0PXR0fHwxLzA7Y29uc3QgYXQ9WGUubGVuZ3Ro''@;'; put 'put ''O2xldCB1bj1udWxsO2NvbnN0IEl0PVtdO2ZvcihsZXQgUnQ9MDtSdDxhdDsrK1J0KXtpZihJZT1YZS5jaGFyQ29kZUF0KFJ0KSxJZT41NTI5NSYmSWU8NTczNDQpe2lmKCF1bil7aWYoSWU+NTYzMTkpeyh0dC09Myk+LTEmJkl0LnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKFJ0KzE9''@;'; put 'put ''PT1hdCl7KHR0LT0zKT4tMSYmSXQucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9dW49SWU7Y29udGludWV9aWYoSWU8NTYzMjApeyh0dC09Myk+LTEmJkl0LnB1c2goMjM5LDE5MSwxODkpLHVuPUllO2NvbnRpbnVlfUllPTY1NTM2Kyh1bi01NTI5Njw8MTB8SWUtNTYzMjApfWVsc2UgdW4m''@;'; put 'put ''Jih0dC09Myk+LTEmJkl0LnB1c2goMjM5LDE5MSwxODkpO2lmKHVuPW51bGwsSWU8MTI4KXtpZigodHQtPTEpPDApYnJlYWs7SXQucHVzaChJZSl9ZWxzZSBpZihJZTwyMDQ4KXtpZigodHQtPTIpPDApYnJlYWs7SXQucHVzaChJZT4+NnwxOTIsNjMmSWV8MTI4KX1lbHNlIGlmKEllPDY1NTM2''@;'; put 'put ''KXtpZigodHQtPTMpPDApYnJlYWs7SXQucHVzaChJZT4+MTJ8MjI0LEllPj42JjYzfDEyOCw2MyZJZXwxMjgpfWVsc2V7aWYoIShJZTwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKCh0dC09NCk8MClicmVhaztJdC5wdXNoKEllPj4xOHwyNDAsSWU+''@;'; put 'put ''PjEyJjYzfDEyOCxJZT4+NiY2M3wxMjgsNjMmSWV8MTI4KX19cmV0dXJuIEl0fWZ1bmN0aW9uIHJ0KFhlKXtyZXR1cm4gXy50b0J5dGVBcnJheShmdW5jdGlvbiBWZShYZSl7aWYoKFhlPShYZT1YZS5zcGxpdCgiPSIpWzBdKS50cmltKCkucmVwbGFjZShSZSwiIikpLmxlbmd0aDwyKXJldHVy''@;'; put 'put ''biIiO2Zvcig7WGUubGVuZ3RoJTQhPTA7KVhlKz0iPSI7cmV0dXJuIFhlfShYZSkpfWZ1bmN0aW9uIFFlKFhlLHR0LEllLGF0KXtsZXQgdW47Zm9yKHVuPTA7dW48YXQmJiEodW4rSWU+PXR0Lmxlbmd0aHx8dW4+PVhlLmxlbmd0aCk7Kyt1bil0dFt1bitJZV09WGVbdW5dO3JldHVybiB1bn1m''@;'; put 'put ''dW5jdGlvbiBzbihYZSx0dCl7cmV0dXJuIFhlIGluc3RhbmNlb2YgdHR8fG51bGwhPVhlJiZudWxsIT1YZS5jb25zdHJ1Y3RvciYmbnVsbCE9WGUuY29uc3RydWN0b3IubmFtZSYmWGUuY29uc3RydWN0b3IubmFtZT09PXR0Lm5hbWV9ZnVuY3Rpb24gdnQoWGUpe3JldHVybiBYZSE9WGV9Y29u''@;'; put 'put ''c3QgU3Q9ZnVuY3Rpb24oKXtjb25zdCBYZT0iMDEyMzQ1Njc4OWFiY2RlZiIsdHQ9bmV3IEFycmF5KDI1Nik7Zm9yKGxldCBJZT0wO0llPDE2OysrSWUpe2NvbnN0IGF0PTE2KkllO2ZvcihsZXQgdW49MDt1bjwxNjsrK3VuKXR0W2F0K3VuXT1YZVtJZV0rWGVbdW5dfXJldHVybiB0dH0oKTtm''@;'; put 'put ''dW5jdGlvbiBlbihYZSl7cmV0dXJuIHR5cGVvZiBCaWdJbnQ+InUiP3V0OlhlfWZ1bmN0aW9uIHV0KCl7dGhyb3cgbmV3IEVycm9yKCJCaWdJbnQgbm90IHN1cHBvcnRlZCIpfX0sNTExNjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDg2MTIpLF89YigxNzY4KSxwPWIoODkyOCks''@;'; put 'put ''Vj1iKDk3NzApO2NlLmV4cG9ydHM9Vnx8SS5jYWxsKHAsXyl9LDMxOTI6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig4NjEyKSxfPWIoMTc2OCkscD1iKDUxMTYpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gcChJLF8sYXJndW1lbnRzKX19LDE3Njg6Y2U9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7Y2UuZXhwb3J0cz1GdW5jdGlvbi5wcm90b3R5cGUuYXBwbHl9LDg5Mjg6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbH0sMzE5OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoODYxMiksXz1iKDQ0NTMpLHA9Yig4OTI4KSxW''@;'; put 'put ''PWIoNTExNik7Y2UuZXhwb3J0cz1mdW5jdGlvbihQKXtpZihQLmxlbmd0aDwxfHwiZnVuY3Rpb24iIT10eXBlb2YgUFswXSl0aHJvdyBuZXcgXygiYSBmdW5jdGlvbiBpcyByZXF1aXJlZCIpO3JldHVybiBWKEkscCxQKX19LDk3NzA6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz10eXBl''@;'; put 'put ''b2YgUmVmbGVjdDwidSImJlJlZmxlY3QmJlJlZmxlY3QuYXBwbHl9LDE5MjQ6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigyMTApLF89Yig1NTU5KSxwPV8oSSgiU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mIikpO2NlLmV4cG9ydHM9ZnVuY3Rpb24odyxQKXt2YXIgRj1JKHcsISFQ''@;'; put 'put ''KTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRiYmcCh3LCIucHJvdG90eXBlLiIpPi0xP18oRik6Rn19LDU1NTk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig3NzcxKSxfPWIoNDQyOSkscD1iKDMxOSksVj1iKDMxOTIpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oUCl7dmFyIEY9cChh''@;'; put 'put ''cmd1bWVudHMpLFI9UC5sZW5ndGgtKGFyZ3VtZW50cy5sZW5ndGgtMSk7cmV0dXJuIEkoRiwxKyhSPjA/UjowKSwhMCl9LF8/XyhjZS5leHBvcnRzLCJhcHBseSIse3ZhbHVlOlZ9KTpjZS5leHBvcnRzLmFwcGx5PVZ9LDczNzk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigyMTAp''@;'; put 'put ''LF89YigzMTkpLHA9XyhbSSgiJVN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiUiKV0pO2NlLmV4cG9ydHM9ZnVuY3Rpb24odyxQKXt2YXIgRj1JKHcsISFQKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRiYmcCh3LCIucHJvdG90eXBlLiIpPi0xP18oW0ZdKTpGfX0sMTAyNzooY2UsWCxiKT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDk1MDkpLkJ1ZmZlcixfPWIoMjgzMCkuVHJhbnNmb3JtLHA9YigyNTUzKS5zO2Z1bmN0aW9uIHcoeil7Xy5jYWxsKHRoaXMpLHRoaXMuaGFzaE1vZGU9InN0cmluZyI9PXR5cGVvZiB6LHRoaXMuaGFzaE1vZGU/dGhpc1t6XT10aGlzLl9maW5hbE9yRGln''@;'; put 'put ''ZXN0OnRoaXMuZmluYWw9dGhpcy5fZmluYWxPckRpZ2VzdCx0aGlzLl9maW5hbCYmKHRoaXMuX19maW5hbD10aGlzLl9maW5hbCx0aGlzLl9maW5hbD1udWxsKSx0aGlzLl9kZWNvZGVyPW51bGwsdGhpcy5fZW5jb2Rpbmc9bnVsbH1iKDU3MTcpKHcsXyk7dmFyIFA9dHlwZW9mIFVpbnQ4QXJy''@;'; put 'put ''YXk8InUiLEY9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmdHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXcmJihJLnByb3RvdHlwZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fEkuVFlQRURfQVJSQVlfU1VQUE9SVCk7dy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHos''@;'; put 'put ''TixPKXt2YXIgSz1mdW5jdGlvbiBSKHosTil7aWYoeiBpbnN0YW5jZW9mIEkpcmV0dXJuIHo7aWYoInN0cmluZyI9PXR5cGVvZiB6KXJldHVybiBJLmZyb20oeixOKTtpZihGJiZBcnJheUJ1ZmZlci5pc1ZpZXcoeikpe2lmKDA9PT16LmJ5dGVMZW5ndGgpcmV0dXJuIEkuYWxsb2MoMCk7dmFy''@;'; put 'put ''IE89SS5mcm9tKHouYnVmZmVyLHouYnl0ZU9mZnNldCx6LmJ5dGVMZW5ndGgpO2lmKE8uYnl0ZUxlbmd0aD09PXouYnl0ZUxlbmd0aClyZXR1cm4gT31pZihQJiZ6IGluc3RhbmNlb2YgVWludDhBcnJheXx8SS5pc0J1ZmZlcih6KSYmei5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IHouY29uc3RydWN0b3IuaXNCdWZmZXImJnouY29uc3RydWN0b3IuaXNCdWZmZXIoeikpcmV0dXJuIEkuZnJvbSh6KTt0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImRhdGEiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcgb3IgYW4gaW5zdGFuY2Ugb2YgQnVmZmVyLCBUeXBlZEFy''@;'; put 'put ''cmF5LCBvciBEYXRhVmlldy4nKX0oeixOKSxaPXRoaXMuX3VwZGF0ZShLKTtyZXR1cm4gdGhpcy5oYXNoTW9kZT90aGlzOihPJiYoWj10aGlzLl90b1N0cmluZyhaLE8pKSxaKX0sdy5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oKXt9LHcucHJvdG90eXBlLmdldEF1dGhUYWc9''@;'; put 'put ''ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0sdy5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBz''@;'; put 'put ''dGF0ZSIpfSx3LnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBzZXQgYWFkIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9LHcucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oeixOLE8pe3ZhciBLO3RyeXt0aGlzLmhhc2hNb2RlP3RoaXMu''@;'; put 'put ''X3VwZGF0ZSh6KTp0aGlzLnB1c2godGhpcy5fdXBkYXRlKHopKX1jYXRjaChaKXtLPVp9ZmluYWxseXtPKEspfX0sdy5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKHope3ZhciBOO3RyeXt0aGlzLnB1c2godGhpcy5fX2ZpbmFsKCkpfWNhdGNoKE8pe049T316KE4pfSx3LnByb3RvdHlwZS5f''@;'; put 'put ''ZmluYWxPckRpZ2VzdD1mdW5jdGlvbih6KXt2YXIgTj10aGlzLl9fZmluYWwoKXx8SS5hbGxvYygwKTtyZXR1cm4geiYmKE49dGhpcy5fdG9TdHJpbmcoTix6LCEwKSksTn0sdy5wcm90b3R5cGUuX3RvU3RyaW5nPWZ1bmN0aW9uKHosTixPKXtpZih0aGlzLl9kZWNvZGVyfHwodGhpcy5fZGVj''@;'; put 'put ''b2Rlcj1uZXcgcChOKSx0aGlzLl9lbmNvZGluZz1OKSx0aGlzLl9lbmNvZGluZyE9PU4pdGhyb3cgbmV3IEVycm9yKCJjYW5cdTIwMTl0IHN3aXRjaCBlbmNvZGluZ3MiKTt2YXIgSz10aGlzLl9kZWNvZGVyLndyaXRlKHopO3JldHVybiBPJiYoSys9dGhpcy5fZGVjb2Rlci5lbmQoKSksS30s''@;'; put 'put ''Y2UuZXhwb3J0cz13fSw1MTA4OihjZSxYLGIpPT57dmFyIEk9Yig5NTM5KSxfPWIoOTI4Mik7ZnVuY3Rpb24gcCgpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfXZhciB3LFY9QXJyYXkucHJvdG90eXBlLnNsaWNlLFA9e307dz10eXBlb2YgYi5nPCJ1IiYmYi5nLmNvbnNvbGU/Yi5nLmNv''@;'; put 'put ''bnNvbGU6dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5jb25zb2xlP3dpbmRvdy5jb25zb2xlOnt9O2Zvcih2YXIgRj1bW2Z1bmN0aW9uIEsoKXt9LCJsb2ciXSxbZnVuY3Rpb24gWigpe3cubG9nLmFwcGx5KHcsYXJndW1lbnRzKX0sImluZm8iXSxbZnVuY3Rpb24gWSgpe3cubG9nLmFwcGx5''@;'; put 'put ''KHcsYXJndW1lbnRzKX0sIndhcm4iXSxbZnVuY3Rpb24gVygpe3cud2Fybi5hcHBseSh3LGFyZ3VtZW50cyl9LCJlcnJvciJdLFtmdW5jdGlvbiBxKHVlKXtQW3VlXT1wKCl9LCJ0aW1lIl0sW2Z1bmN0aW9uIGVlKHVlKXt2YXIgZ2U9UFt1ZV07aWYoIWdlKXRocm93IG5ldyBFcnJvcigiTm8g''@;'; put 'put ''c3VjaCBsYWJlbDogIit1ZSk7ZGVsZXRlIFBbdWVdO3ZhciBfZT1wKCktZ2U7dy5sb2codWUrIjogIitfZSsibXMiKX0sInRpbWVFbmQiXSxbZnVuY3Rpb24gSigpe3ZhciB1ZT1uZXcgRXJyb3I7dWUubmFtZT0iVHJhY2UiLHVlLm1lc3NhZ2U9SS5mb3JtYXQuYXBwbHkobnVsbCxhcmd1bWVu''@;'; put 'put ''dHMpLHcuZXJyb3IodWUuc3RhY2spfSwidHJhY2UiXSxbZnVuY3Rpb24gcmUodWUpe3cubG9nKEkuaW5zcGVjdCh1ZSkrIlxuIil9LCJkaXIiXSxbZnVuY3Rpb24gaWUodWUpe2lmKCF1ZSl7dmFyIGdlPVYuY2FsbChhcmd1bWVudHMsMSk7Xy5vayghMSxJLmZvcm1hdC5hcHBseShudWxsLGdl''@;'; put 'put ''KSl9fSwiYXNzZXJ0Il1dLFI9MDtSPEYubGVuZ3RoO1IrKyl7dmFyIHo9RltSXSxPPXpbMV07d1tPXXx8KHdbT109elswXSl9Y2UuZXhwb3J0cz13fSw2NDk3OihjZSxYLGIpPT57dmFyIEk9Yig4NzY0KS5CdWZmZXI7ZnVuY3Rpb24gcShlZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9T''@;'; put 'put ''dHJpbmcuY2FsbChlZSl9WC5pc0FycmF5PWZ1bmN0aW9uIF8oZWUpe3JldHVybiBBcnJheS5pc0FycmF5P0FycmF5LmlzQXJyYXkoZWUpOiJbb2JqZWN0IEFycmF5XSI9PT1xKGVlKX0sWC5pc0Jvb2xlYW49ZnVuY3Rpb24gcChlZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZWV9LFguaXNO''@;'; put 'put ''dWxsPWZ1bmN0aW9uIFYoZWUpe3JldHVybiBudWxsPT09ZWV9LFguaXNOdWxsT3JVbmRlZmluZWQ9ZnVuY3Rpb24gdyhlZSl7cmV0dXJuIG51bGw9PWVlfSxYLmlzTnVtYmVyPWZ1bmN0aW9uIFAoZWUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZWV9LFguaXNTdHJpbmc9ZnVuY3Rpb24gRihl''@;'; put 'put ''ZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlZX0sWC5pc1N5bWJvbD1mdW5jdGlvbiBSKGVlKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGVlfSxYLmlzVW5kZWZpbmVkPWZ1bmN0aW9uIHooZWUpe3JldHVybiB2b2lkIDA9PT1lZX0sWC5pc1JlZ0V4cD1mdW5jdGlvbiBOKGVlKXtyZXR1cm4i''@;'; put 'put ''W29iamVjdCBSZWdFeHBdIj09PXEoZWUpfSxYLmlzT2JqZWN0PWZ1bmN0aW9uIE8oZWUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZWUmJm51bGwhPT1lZX0sWC5pc0RhdGU9ZnVuY3Rpb24gSyhlZSl7cmV0dXJuIltvYmplY3QgRGF0ZV0iPT09cShlZSl9LFguaXNFcnJvcj1mdW5jdGlvbiBa''@;'; put 'put ''KGVlKXtyZXR1cm4iW29iamVjdCBFcnJvcl0iPT09cShlZSl8fGVlIGluc3RhbmNlb2YgRXJyb3J9LFguaXNGdW5jdGlvbj1mdW5jdGlvbiBZKGVlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZWV9LFguaXNQcmltaXRpdmU9ZnVuY3Rpb24gVyhlZSl7cmV0dXJuIG51bGw9PT1lZXx8ImJv''@;'; put 'put ''b2xlYW4iPT10eXBlb2YgZWV8fCJudW1iZXIiPT10eXBlb2YgZWV8fCJzdHJpbmciPT10eXBlb2YgZWV8fCJzeW1ib2wiPT10eXBlb2YgZWV8fHR5cGVvZiBlZT4idSJ9LFguaXNCdWZmZXI9SS5pc0J1ZmZlcn0sNjM5MzooY2UsWCxiKT0+e3ZhciBJPWIoODc2NCkuQnVmZmVyLF89Yig2OTQ4''@;'; put 'put ''KSxwPWIoNjQyNik7Y2UuZXhwb3J0cz1mdW5jdGlvbihSKXtyZXR1cm4gbmV3IHcoUil9O3ZhciBWPXtzZWNwMjU2azE6e25hbWU6InNlY3AyNTZrMSIsYnl0ZUxlbmd0aDozMn0sc2VjcDIyNHIxOntuYW1lOiJwMjI0IixieXRlTGVuZ3RoOjI4fSxwcmltZTI1NnYxOntuYW1lOiJwMjU2Iixi''@;'; put 'put ''eXRlTGVuZ3RoOjMyfSxwcmltZTE5MnYxOntuYW1lOiJwMTkyIixieXRlTGVuZ3RoOjI0fSxlZDI1NTE5OntuYW1lOiJlZDI1NTE5IixieXRlTGVuZ3RoOjMyfSxzZWNwMzg0cjE6e25hbWU6InAzODQiLGJ5dGVMZW5ndGg6NDh9LHNlY3A1MjFyMTp7bmFtZToicDUyMSIsYnl0ZUxlbmd0aDo2''@;'; put 'put ''Nn19O2Z1bmN0aW9uIHcoRil7dGhpcy5jdXJ2ZVR5cGU9VltGXSx0aGlzLmN1cnZlVHlwZXx8KHRoaXMuY3VydmVUeXBlPXtuYW1lOkZ9KSx0aGlzLmN1cnZlPW5ldyBfLmVjKHRoaXMuY3VydmVUeXBlLm5hbWUpLHRoaXMua2V5cz12b2lkIDB9ZnVuY3Rpb24gUChGLFIseil7QXJyYXkuaXNB''@;'; put 'put ''cnJheShGKXx8KEY9Ri50b0FycmF5KCkpO3ZhciBOPW5ldyBJKEYpO2lmKHomJk4ubGVuZ3RoPHope3ZhciBPPW5ldyBJKHotTi5sZW5ndGgpO08uZmlsbCgwKSxOPUkuY29uY2F0KFtPLE5dKX1yZXR1cm4gUj9OLnRvU3RyaW5nKFIpOk59Vi5wMjI0PVYuc2VjcDIyNHIxLFYucDI1Nj1WLnNl''@;'; put 'put ''Y3AyNTZyMT1WLnByaW1lMjU2djEsVi5wMTkyPVYuc2VjcDE5MnIxPVYucHJpbWUxOTJ2MSxWLnAzODQ9Vi5zZWNwMzg0cjEsVi5wNTIxPVYuc2VjcDUyMXIxLHcucHJvdG90eXBlLmdlbmVyYXRlS2V5cz1mdW5jdGlvbihGLFIpe3JldHVybiB0aGlzLmtleXM9dGhpcy5jdXJ2ZS5nZW5LZXlQ''@;'; put 'put ''YWlyKCksdGhpcy5nZXRQdWJsaWNLZXkoRixSKX0sdy5wcm90b3R5cGUuY29tcHV0ZVNlY3JldD1mdW5jdGlvbihGLFIseil7cmV0dXJuIFI9Unx8InV0ZjgiLEkuaXNCdWZmZXIoRil8fChGPW5ldyBJKEYsUikpLFAodGhpcy5jdXJ2ZS5rZXlGcm9tUHVibGljKEYpLmdldFB1YmxpYygpLm11''@;'; put 'put ''bCh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpKS5nZXRYKCkseix0aGlzLmN1cnZlVHlwZS5ieXRlTGVuZ3RoKX0sdy5wcm90b3R5cGUuZ2V0UHVibGljS2V5PWZ1bmN0aW9uKEYsUil7dmFyIHo9dGhpcy5rZXlzLmdldFB1YmxpYygiY29tcHJlc3NlZCI9PT1SLCEwKTtyZXR1cm4iaHlicmlkIj09''@;'; put 'put ''PVImJih6WzBdPXpbei5sZW5ndGgtMV0lMj83OjYpLFAoeixGKX0sdy5wcm90b3R5cGUuZ2V0UHJpdmF0ZUtleT1mdW5jdGlvbihGKXtyZXR1cm4gUCh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpLEYpfSx3LnByb3RvdHlwZS5zZXRQdWJsaWNLZXk9ZnVuY3Rpb24oRixSKXtyZXR1cm4gUj1SfHwi''@;'; put 'put ''dXRmOCIsSS5pc0J1ZmZlcihGKXx8KEY9bmV3IEkoRixSKSksdGhpcy5rZXlzLl9pbXBvcnRQdWJsaWMoRiksdGhpc30sdy5wcm90b3R5cGUuc2V0UHJpdmF0ZUtleT1mdW5jdGlvbihGLFIpe1I9Unx8InV0ZjgiLEkuaXNCdWZmZXIoRil8fChGPW5ldyBJKEYsUikpO3ZhciB6PW5ldyBwKEYp''@;'; put 'put ''O3JldHVybiB6PXoudG9TdHJpbmcoMTYpLHRoaXMua2V5cz10aGlzLmN1cnZlLmdlbktleVBhaXIoKSx0aGlzLmtleXMuX2ltcG9ydFByaXZhdGUoeiksdGhpc319LDY0MjY6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSxfKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcChCLGcpe2lmKCFC''@;'; put 'put ''KXRocm93IG5ldyBFcnJvcihnfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIFYoQixnKXtCLnN1cGVyXz1nO3ZhciB5PWZ1bmN0aW9uKCl7fTt5LnByb3RvdHlwZT1nLnByb3RvdHlwZSxCLnByb3RvdHlwZT1uZXcgeSxCLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1CfWZ1bmN0aW9uIHco''@;'; put 'put ''QixnLHkpe2lmKHcuaXNCTihCKSlyZXR1cm4gQjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09QiYmKCgibGUiPT09Z3x8ImJlIj09PWcpJiYoeT1nLGc9MTApLHRoaXMuX2luaXQoQnx8MCxnfHwxMCx5fHwiYmUiKSl9''@;'; put 'put ''dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0kuZXhwb3J0cz13Ol8uQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7UD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Yig4NjIzKS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEYoQixn''@;'; put 'put ''KXt2YXIgeT1CLmNoYXJDb2RlQXQoZyk7cmV0dXJuIHk+PTY1JiZ5PD03MD95LTU1Onk+PTk3JiZ5PD0xMDI/eS04Nzp5LTQ4JjE1fWZ1bmN0aW9uIFIoQixnLHkpe3ZhciB4PUYoQix5KTtyZXR1cm4geS0xPj1nJiYoeHw9RihCLHktMSk8PDQpLHh9ZnVuY3Rpb24geihCLGcseSx4KXtmb3Io''@;'; put 'put ''dmFyIEM9MCxUPU1hdGgubWluKEIubGVuZ3RoLHkpLEg9ZztIPFQ7SCsrKXt2YXIgaj1CLmNoYXJDb2RlQXQoSCktNDg7Qyo9eCxDKz1qPj00OT9qLTQ5KzEwOmo+PTE3P2otMTcrMTA6an1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24oZyl7cmV0dXJuIGcgaW5zdGFuY2VvZiB3fHxudWxsIT09''@;'; put 'put ''ZyYmIm9iamVjdCI9PXR5cGVvZiBnJiZnLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShnLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gZy5jbXAoeSk+MD9nOnl9LHcubWluPWZ1bmN0aW9uKGcseSl7cmV0dXJuIGcuY21wKHkpPDA/''@;'; put 'put ''Zzp5fSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihnLHkseCl7aWYoIm51bWJlciI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGcseSx4KTtpZigib2JqZWN0Ij09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXRBcnJheShnLHkseCk7ImhleCI9PT15JiYoeT0xNikscCh5''@;'; put 'put ''PT09KDB8eSkmJnk+PTImJnk8PTM2KTt2YXIgQz0wOyItIj09PShnPWcudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxnLmxlbmd0aCYmKDE2PT09eT90aGlzLl9wYXJzZUhleChnLEMseCk6KHRoaXMuX3BhcnNlQmFzZShnLHksQyks''@;'; put 'put ''ImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx5LHgpKSl9LHcucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGcseSx4KXtnPDAmJih0aGlzLm5lZ2F0aXZlPTEsZz0tZyksZzw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZ10sdGhpcy5sZW5ndGg9''@;'; put 'put ''MSk6Zzw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihwKGc8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMp''@;'; put 'put ''LCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCkseSx4KX0sdy5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihnLHkseCl7aWYocCgibnVtYmVyIj09dHlwZW9mIGcubGVuZ3RoKSxnLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9''@;'; put 'put ''MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChnLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULEgsaj0wO2lmKCJiZSI9PT14KWZvcihDPWcubGVuZ3RoLTEsVD0w''@;'; put 'put ''O0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oSD1nW0NdfGdbQy0xXTw8OHxnW0MtMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxnLmxlbmd0''@;'; put 'put ''aDtDKz0zKXRoaXMud29yZHNbVF18PShIPWdbQ118Z1tDKzFdPDw4fGdbQysyXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4''@;'; put 'put ''PWZ1bmN0aW9uKGcseSx4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGcubGVuZ3RoLXkpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIGosVD0wLEg9MDtpZigiYmUiPT09eClmb3Io''@;'; put 'put ''Qz1nLmxlbmd0aC0xO0M+PXk7Qy09MilqPVIoZyx5LEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShnLmxlbmd0aC15KSUyPT0wP3krMTp5O0M8Zy5sZW5ndGg7Qys9MilqPVIoZyx5''@;'; put 'put ''LEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oZyx5LHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZh''@;'; put 'put ''ciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPXkpQysrO0MtLSxUPVQveXwwO2Zvcih2YXIgSD1nLmxlbmd0aC14LGo9SCVDLEU9TWF0aC5taW4oSCxILWopK3gsbT0wLEE9eDtBPEU7QSs9QyltPXooZyxBLEErQyx5KSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlz''@;'; put 'put ''LndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lmKDAhPT1qKXt2YXIgYWU9MTtmb3IobT16KGcsQSxnLmxlbmd0aCx5KSxBPTA7QTxqO0ErKylhZSo9eTt0aGlzLmltdWxuKGFlKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlz''@;'; put 'put ''LnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZyl7Zy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGg7eSsrKWcud29yZHNbeV09dGhpcy53b3Jkc1t5XTtnLmxlbmd0aD10aGlzLmxlbmd0aCxnLm5lZ2F0aXZlPXRoaXMubmVn''@;'; put 'put ''YXRpdmUsZy5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShnKSxnfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8ZzspdGhpcy53b3Jkc1t0aGlzLmxlbmd0''@;'; put 'put ''aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3Zh''@;'; put 'put ''ciBOPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLE89WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sSz1b''@;'; put 'put ''MCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYs''@;'; put 'put ''NDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBZKEIsZyx5KXt5Lm5lZ2F0aXZl''@;'; put 'put ''PWcubmVnYXRpdmVeQi5uZWdhdGl2ZTt2YXIgeD1CLmxlbmd0aCtnLmxlbmd0aHwwO3kubGVuZ3RoPXgseD14LTF8MDt2YXIgQz0wfEIud29yZHNbMF0sVD0wfGcud29yZHNbMF0sSD1DKlQsRT1ILzY3MTA4ODY0fDA7eS53b3Jkc1swXT02NzEwODg2MyZIO2Zvcih2YXIgbT0xO208eDttKysp''@;'; put 'put ''e2Zvcih2YXIgQT1FPj4+MjYsYWU9NjcxMDg4NjMmRSxuZT1NYXRoLm1pbihtLGcubGVuZ3RoLTEpLHNlPU1hdGgubWF4KDAsbS1CLmxlbmd0aCsxKTtzZTw9bmU7c2UrKylBKz0oSD0oQz0wfEIud29yZHNbbS1zZXwwXSkqKFQ9MHxnLndvcmRzW3NlXSkrYWUpLzY3MTA4ODY0fDAsYWU9Njcx''@;'; put 'put ''MDg4NjMmSDt5LndvcmRzW21dPTB8YWUsRT0wfEF9cmV0dXJuIDAhPT1FP3kud29yZHNbbV09MHxFOnkubGVuZ3RoLS0seS5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGcseSl7dmFyIHg7aWYoeT0wfHl8fDEsMTY9PT0oZz1nfHwxMCl8fCJoZXgiPT09Zyl7eD0iIjtm''@;'; put 'put ''b3IodmFyIEM9MCxUPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj10aGlzLndvcmRzW0hdLEU9KDE2Nzc3MjE1JihqPDxDfFQpKS50b1N0cmluZygxNik7VD1qPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsSC0tKSx4PTAhPT1UfHxIIT09dGhpcy5sZW5ndGgtMT9O''@;'; put 'put ''WzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4KTt4Lmxlbmd0aCV5IT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYoZz09PSgwfGcpJiZnPj0yJiZnPD0zNil7dmFyIG09T1tnXSxBPUtbZ107eD0iIjt2''@;'; put 'put ''YXIgYWU9dGhpcy5jbG9uZSgpO2ZvcihhZS5uZWdhdGl2ZT0wOyFhZS5pc1plcm8oKTspe3ZhciBuZT1hZS5tb2RuKEEpLnRvU3RyaW5nKGcpO3g9KGFlPWFlLmlkaXZuKEEpKS5pc1plcm8oKT9uZSt4Ok5bbS1uZS5sZW5ndGhdK25lK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4''@;'; put 'put ''Lmxlbmd0aCV5IT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9cCghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBnPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10''@;'; put 'put ''aGlzLmxlbmd0aD9nKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Zys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJnAoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUg''@;'; put 'put ''dXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1nOmd9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gcCh0eXBlb2YgUDwidSIpLHRoaXMudG9BcnJh''@;'; put 'put ''eUxpa2UoUCxnLHkpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksZyx5KX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oZyx5LHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxD''@;'; put 'put ''KTtwKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxwKFQ+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sSD0ibGUiPT09eSxqPW5ldyBnKFQpLEE9dGhpcy5jbG9uZSgpO2lmKEgpe2ZvcihtPTA7IUEuaXNa''@;'; put 'put ''ZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbbV09RTtmb3IoO208VDttKyspalttXT0wfWVsc2V7Zm9yKG09MDttPFQtQzttKyspalttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbVC1tLTFdPUV9cmV0dXJuIGp9''@;'; put 'put ''LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihnKXtyZXR1cm4gMzItTWF0aC5jbHozMihnKX06ZnVuY3Rpb24oZyl7dmFyIHk9Zyx4PTA7cmV0dXJuIHk+PTQwOTYmJih4Kz0xMyx5Pj4+PTEzKSx5Pj02NCYmKHgrPTcseT4+Pj03KSx5Pj04JiYoeCs9NCx5Pj4+''@;'; put 'put ''PTQpLHk+PTImJih4Kz0yLHk+Pj49MikseCt5fSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oZyl7aWYoMD09PWcpcmV0dXJuIDI2O3ZhciB5PWcseD0wO3JldHVybiEoODE5MSZ5KSYmKHgrPTEzLHk+Pj49MTMpLCEoMTI3JnkpJiYoeCs9Nyx5Pj4+PTcpLCEoMTUmeSkmJih4Kz00''@;'; put 'put ''LHk+Pj49NCksISgzJnkpJiYoeCs9Mix5Pj4+PTIpLCEoMSZ5KSYmeCsrLHh9LHcucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciB5PXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK3l9LHcucHJvdG90''@;'; put 'put ''eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGc9MCx5PTA7eTx0aGlzLmxlbmd0aDt5Kyspe3ZhciB4PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbeV0pO2lmKGcrPXgsMjYhPT14KWJyZWFrfXJldHVybiBnfSx3LnByb3RvdHlwZS5i''@;'; put 'put ''eXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSx3LnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oZykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5mcm9tVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy50ZXN0bihnLTEpP3RoaXMubm90bihnKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sdy5wcm90b3R5cGUubmVnPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHcucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnLmxlbmd0''@;'; put 'put ''aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgeT0wO3k8Zy5sZW5ndGg7eSsrKXRoaXMud29yZHNbeV09dGhpcy53b3Jkc1t5XXxnLndvcmRzW3ldO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVn''@;'; put 'put ''YXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihnKX0sdy5wcm90b3R5cGUub3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoZyk6Zy5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGcpe3JldHVybiB0''@;'; put 'put ''aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihnKTpnLmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oZyl7dmFyIHk7eT10aGlzLmxlbmd0aD5nLmxlbmd0aD9nOnRoaXM7Zm9yKHZhciB4PTA7eDx5Lmxlbmd0aDt4KyspdGhpcy53b3Jk''@;'; put 'put ''c1t4XT10aGlzLndvcmRzW3hdJmcud29yZHNbeF07cmV0dXJuIHRoaXMubGVuZ3RoPXkubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoZyl9LHcucHJvdG90eXBl''@;'; put 'put ''LmFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoZyk6Zy5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChn''@;'; put 'put ''KTpnLmNsb25lKCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGcpe3ZhciB5LHg7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KHk9dGhpcyx4PWcpOih5PWcseD10aGlzKTtmb3IodmFyIEM9MDtDPHgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXkud29yZHNbQ11eeC53''@;'; put 'put ''b3Jkc1tDXTtpZih0aGlzIT09eSlmb3IoO0M8eS5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109eS53b3Jkc1tDXTtyZXR1cm4gdGhpcy5sZW5ndGg9eS5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKGcpe3JldHVybiBwKCEodGhpcy5uZWdhdGl2ZXxnLm5l''@;'; put 'put ''Z2F0aXZlKSksdGhpcy5pdXhvcihnKX0sdy5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihnKTpnLmNsb25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5s''@;'; put 'put ''ZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGcpOmcuY2xvbmUoKS5pdXhvcih0aGlzKX0sdy5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PTB8TWF0aC5jZWlsKGcvMjYpLHg9ZyUyNjt0aGlzLl9leHBhbmQoeSks''@;'; put 'put ''eD4wJiZ5LS07Zm9yKHZhciBDPTA7Qzx5O0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJn50aGlzLndvcmRzW0NdO3JldHVybiB4PjAmJih0aGlzLndvcmRzW0NdPX50aGlzLndvcmRzW0NdJjY3MTA4ODYzPj4yNi14KSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24o''@;'; put 'put ''Zyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihnKX0sdy5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihnLHkpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeD1nLzI2fDAsQz1nJTI2O3JldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdPXk/dGhpcy53b3Jkc1t4''@;'; put 'put ''XXwxPDxDOnRoaXMud29yZHNbeF0mfigxPDxDKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyl7dmFyIHkseCxDO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHk9dGhpcy5pc3ViKGcpLHRoaXMubmVn''@;'; put 'put ''YXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIGcubmVnYXRpdmU9MCx5PXRoaXMuaXN1YihnKSxnLm5lZ2F0aXZlPTEseS5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oeD10aGlzLEM9Zyk6KHg9ZyxD''@;'; put 'put ''PXRoaXMpO2Zvcih2YXIgVD0wLEg9MDtIPEMubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJih5PSgwfHgud29yZHNbSF0pKygwfEMud29yZHNbSF0pK1QpLFQ9eT4+PjI2O2Zvcig7MCE9PVQmJkg8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKHk9KDB8eC53''@;'; put 'put ''b3Jkc1tIXSkrVCksVD15Pj4+MjY7aWYodGhpcy5sZW5ndGg9eC5sZW5ndGgsMCE9PVQpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09VCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoeCE9PXRoaXMpZm9yKDtIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXgud29yZHNbSF07cmV0dXJuIHRoaXN9''@;'; put 'put ''LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnKXt2YXIgeTtyZXR1cm4gMCE9PWcubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhnLm5lZ2F0aXZlPTAseT10aGlzLnN1YihnKSxnLm5lZ2F0aXZlXj0xLHkpOjA9PT1nLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdh''@;'; put 'put ''dGl2ZT0wLHk9Zy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLHkpOnRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKGcpOmcuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcpe2lmKDAhPT1nLm5lZ2F0aXZlKXtnLm5lZ2F0aXZlPTA7''@;'; put 'put ''dmFyIHk9dGhpcy5pYWRkKGcpO3JldHVybiBnLm5lZ2F0aXZlPTEseS5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgQyxULHg9dGhpcy5jbXAoZyk7''@;'; put 'put ''aWYoMD09PXgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3g+MD8oQz10aGlzLFQ9Zyk6KEM9ZyxUPXRoaXMpO2Zvcih2YXIgSD0wLGo9MDtqPFQubGVuZ3RoO2orKylIPSh5PSgwfEMud29yZHNbal0pLSgwfFQud29yZHNbal0pK0gp''@;'; put 'put ''Pj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJnk7Zm9yKDswIT09SCYmajxDLmxlbmd0aDtqKyspSD0oeT0oMHxDLndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZ5O2lmKDA9PT1IJiZqPEMubGVuZ3RoJiZDIT09dGhpcylmb3IoO2o8Qy5sZW5ndGg7aisrKXRoaXMu''@;'; put 'put ''d29yZHNbal09Qy53b3Jkc1tqXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsaiksQyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihnKX07dmFy''@;'; put 'put ''IFc9ZnVuY3Rpb24oZyx5LHgpe3ZhciBFLG0sQSxDPWcud29yZHMsVD15LndvcmRzLEg9eC53b3JkcyxqPTAsYWU9MHxDWzBdLG5lPTgxOTEmYWUsc2U9YWU+Pj4xMyxDZT0wfENbMV0sVWU9ODE5MSZDZSxKZT1DZT4+PjEzLGl0PTB8Q1syXSx4ZT04MTkxJml0LHllPWl0Pj4+MTMsS2U9MHxD''@;'; put 'put ''WzNdLGplPTgxOTEmS2Usa2U9S2U+Pj4xMyxIZT0wfENbNF0sTGU9ODE5MSZIZSxSZT1IZT4+PjEzLFZlPTB8Q1s1XSxBZT04MTkxJlZlLERlPVZlPj4+MTMsX3Q9MHxDWzZdLHJ0PTgxOTEmX3QsUWU9X3Q+Pj4xMyxzbj0wfENbN10sdnQ9ODE5MSZzbixTdD1zbj4+PjEzLGVuPTB8Q1s4XSx1''@;'; put 'put ''dD04MTkxJmVuLFhlPWVuPj4+MTMsdHQ9MHxDWzldLEllPTgxOTEmdHQsYXQ9dHQ+Pj4xMyx1bj0wfFRbMF0sSXQ9ODE5MSZ1bixSdD11bj4+PjEzLHJpPTB8VFsxXSxhbj04MTkxJnJpLGxuPXJpPj4+MTMsbmk9MHxUWzJdLGhuPTgxOTEmbmksaHQ9bmk+Pj4xMyxScj0wfFRbM10sQnQ9ODE5''@;'; put 'put ''MSZScixBdD1Scj4+PjEzLEZuPTB8VFs0XSxzdD04MTkxJkZuLFp0PUZuPj4+MTMsUXI9MHxUWzVdLFllPTgxOTEmUXIsVHQ9UXI+Pj4xMyxycj0wfFRbNl0sZnQ9ODE5MSZycixNdD1ycj4+PjEzLFpuPTB8VFs3XSxubj04MTkxJlpuLFd0PVpuPj4+MTMsZGk9MHxUWzhdLGRuPTgxOTEmZGks''@;'; put 'put ''bW49ZGk+Pj4xMyxwaT0wfFRbOV0sZm49ODE5MSZwaSx0bj1waT4+PjEzO3gubmVnYXRpdmU9Zy5uZWdhdGl2ZV55Lm5lZ2F0aXZlLHgubGVuZ3RoPTE5O3ZhciBjYT0oaisoRT1NYXRoLmltdWwobmUsSXQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKG5lLFJ0KSkrTWF0aC5pbXVsKHNl''@;'; put 'put ''LEl0KXwwKSk8PDEzKXwwO2o9KChBPU1hdGguaW11bChzZSxSdCkpKyhtPj4+MTMpfDApKyhjYT4+PjI2KXwwLGNhJj02NzEwODg2MyxFPU1hdGguaW11bChVZSxJdCksbT0obT1NYXRoLmltdWwoVWUsUnQpKStNYXRoLmltdWwoSmUsSXQpfDAsQT1NYXRoLmltdWwoSmUsUnQpO3ZhciBfaT0o''@;'; put 'put ''aisoRT1FK01hdGguaW11bChuZSxhbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGxuKXwwKStNYXRoLmltdWwoc2UsYW4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsbG4pfDApKyhtPj4+MTMpfDApKyhfaT4+PjI2KXwwLF9pJj02NzEwODg2MyxFPU1hdGgu''@;'; put 'put ''aW11bCh4ZSxJdCksbT0obT1NYXRoLmltdWwoeGUsUnQpKStNYXRoLmltdWwoeWUsSXQpfDAsQT1NYXRoLmltdWwoeWUsUnQpLEU9RStNYXRoLmltdWwoVWUsYW4pfDAsbT0obT1tK01hdGguaW11bChVZSxsbil8MCkrTWF0aC5pbXVsKEplLGFuKXwwLEE9QStNYXRoLmltdWwoSmUsbG4pfDA7''@;'; put 'put ''dmFyIHZyPShqKyhFPUUrTWF0aC5pbXVsKG5lLGhuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsaHQpfDApK01hdGguaW11bChzZSxobil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxodCl8MCkrKG0+Pj4xMyl8MCkrKHZyPj4+MjYpfDAsdnImPTY3MTA4ODYz''@;'; put 'put ''LEU9TWF0aC5pbXVsKGplLEl0KSxtPShtPU1hdGguaW11bChqZSxSdCkpK01hdGguaW11bChrZSxJdCl8MCxBPU1hdGguaW11bChrZSxSdCksRT1FK01hdGguaW11bCh4ZSxhbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGxuKXwwKStNYXRoLmltdWwoeWUsYW4pfDAsQT1BK01hdGguaW11bCh5''@;'; put 'put ''ZSxsbil8MCxFPUUrTWF0aC5pbXVsKFVlLGhuKXwwLG09KG09bStNYXRoLmltdWwoVWUsaHQpfDApK01hdGguaW11bChKZSxobil8MCxBPUErTWF0aC5pbXVsKEplLGh0KXwwO3ZhciBYaT0oaisoRT1FK01hdGguaW11bChuZSxCdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5l''@;'; put 'put ''LEF0KXwwKStNYXRoLmltdWwoc2UsQnQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsQXQpfDApKyhtPj4+MTMpfDApKyhYaT4+PjI2KXwwLFhpJj02NzEwODg2MyxFPU1hdGguaW11bChMZSxJdCksbT0obT1NYXRoLmltdWwoTGUsUnQpKStNYXRoLmltdWwoUmUsSXQpfDAsQT1N''@;'; put 'put ''YXRoLmltdWwoUmUsUnQpLEU9RStNYXRoLmltdWwoamUsYW4pfDAsbT0obT1tK01hdGguaW11bChqZSxsbil8MCkrTWF0aC5pbXVsKGtlLGFuKXwwLEE9QStNYXRoLmltdWwoa2UsbG4pfDAsRT1FK01hdGguaW11bCh4ZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGh0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoeWUsaG4pfDAsQT1BK01hdGguaW11bCh5ZSxodCl8MCxFPUUrTWF0aC5pbXVsKFVlLEJ0KXwwLG09KG09bStNYXRoLmltdWwoVWUsQXQpfDApK01hdGguaW11bChKZSxCdCl8MCxBPUErTWF0aC5pbXVsKEplLEF0KXwwO3ZhciBRaT0oaisoRT1FK01hdGguaW11bChuZSxzdCl8MCl8MCkr''@;'; put 'put ''KCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLFp0KXwwKStNYXRoLmltdWwoc2Usc3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsWnQpfDApKyhtPj4+MTMpfDApKyhRaT4+PjI2KXwwLFFpJj02NzEwODg2MyxFPU1hdGguaW11bChBZSxJdCksbT0obT1NYXRoLmltdWwoQWUs''@;'; put 'put ''UnQpKStNYXRoLmltdWwoRGUsSXQpfDAsQT1NYXRoLmltdWwoRGUsUnQpLEU9RStNYXRoLmltdWwoTGUsYW4pfDAsbT0obT1tK01hdGguaW11bChMZSxsbil8MCkrTWF0aC5pbXVsKFJlLGFuKXwwLEE9QStNYXRoLmltdWwoUmUsbG4pfDAsRT1FK01hdGguaW11bChqZSxobil8MCxtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKGplLGh0KXwwKStNYXRoLmltdWwoa2UsaG4pfDAsQT1BK01hdGguaW11bChrZSxodCl8MCxFPUUrTWF0aC5pbXVsKHhlLEJ0KXwwLG09KG09bStNYXRoLmltdWwoeGUsQXQpfDApK01hdGguaW11bCh5ZSxCdCl8MCxBPUErTWF0aC5pbXVsKHllLEF0KXwwLEU9RStNYXRoLmlt''@;'; put 'put ''dWwoVWUsc3QpfDAsbT0obT1tK01hdGguaW11bChVZSxadCl8MCkrTWF0aC5pbXVsKEplLHN0KXwwLEE9QStNYXRoLmltdWwoSmUsWnQpfDA7dmFyIFZpPShqKyhFPUUrTWF0aC5pbXVsKG5lLFllKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsVHQpfDApK01hdGguaW11bChz''@;'; put 'put ''ZSxZZSl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxUdCl8MCkrKG0+Pj4xMyl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHJ0LEl0KSxtPShtPU1hdGguaW11bChydCxSdCkpK01hdGguaW11bChRZSxJdCl8MCxBPU1hdGguaW11bChRZSxSdCksRT1F''@;'; put 'put ''K01hdGguaW11bChBZSxhbil8MCxtPShtPW0rTWF0aC5pbXVsKEFlLGxuKXwwKStNYXRoLmltdWwoRGUsYW4pfDAsQT1BK01hdGguaW11bChEZSxsbil8MCxFPUUrTWF0aC5pbXVsKExlLGhuKXwwLG09KG09bStNYXRoLmltdWwoTGUsaHQpfDApK01hdGguaW11bChSZSxobil8MCxBPUErTWF0''@;'; put 'put ''aC5pbXVsKFJlLGh0KXwwLEU9RStNYXRoLmltdWwoamUsQnQpfDAsbT0obT1tK01hdGguaW11bChqZSxBdCl8MCkrTWF0aC5pbXVsKGtlLEJ0KXwwLEE9QStNYXRoLmltdWwoa2UsQXQpfDAsRT1FK01hdGguaW11bCh4ZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFp0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoeWUsc3QpfDAsQT1BK01hdGguaW11bCh5ZSxadCl8MCxFPUUrTWF0aC5pbXVsKFVlLFllKXwwLG09KG09bStNYXRoLmltdWwoVWUsVHQpfDApK01hdGguaW11bChKZSxZZSl8MCxBPUErTWF0aC5pbXVsKEplLFR0KXwwO3ZhciBlaT0oaisoRT1FK01hdGguaW11bChuZSxmdCl8MCl8MCkr''@;'; put 'put ''KCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLE10KXwwKStNYXRoLmltdWwoc2UsZnQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsTXQpfDApKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxFPU1hdGguaW11bCh2dCxJdCksbT0obT1NYXRoLmltdWwodnQs''@;'; put 'put ''UnQpKStNYXRoLmltdWwoU3QsSXQpfDAsQT1NYXRoLmltdWwoU3QsUnQpLEU9RStNYXRoLmltdWwocnQsYW4pfDAsbT0obT1tK01hdGguaW11bChydCxsbil8MCkrTWF0aC5pbXVsKFFlLGFuKXwwLEE9QStNYXRoLmltdWwoUWUsbG4pfDAsRT1FK01hdGguaW11bChBZSxobil8MCxtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKEFlLGh0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsQT1BK01hdGguaW11bChEZSxodCl8MCxFPUUrTWF0aC5pbXVsKExlLEJ0KXwwLG09KG09bStNYXRoLmltdWwoTGUsQXQpfDApK01hdGguaW11bChSZSxCdCl8MCxBPUErTWF0aC5pbXVsKFJlLEF0KXwwLEU9RStNYXRoLmlt''@;'; put 'put ''dWwoamUsc3QpfDAsbT0obT1tK01hdGguaW11bChqZSxadCl8MCkrTWF0aC5pbXVsKGtlLHN0KXwwLEE9QStNYXRoLmltdWwoa2UsWnQpfDAsRT1FK01hdGguaW11bCh4ZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFR0KXwwKStNYXRoLmltdWwoeWUsWWUpfDAsQT1BK01hdGguaW11bCh5''@;'; put 'put ''ZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFVlLGZ0KXwwLG09KG09bStNYXRoLmltdWwoVWUsTXQpfDApK01hdGguaW11bChKZSxmdCl8MCxBPUErTWF0aC5pbXVsKEplLE10KXwwO3ZhciB1YT0oaisoRT1FK01hdGguaW11bChuZSxubil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5l''@;'; put 'put ''LFd0KXwwKStNYXRoLmltdWwoc2Usbm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsV3QpfDApKyhtPj4+MTMpfDApKyh1YT4+PjI2KXwwLHVhJj02NzEwODg2MyxFPU1hdGguaW11bCh1dCxJdCksbT0obT1NYXRoLmltdWwodXQsUnQpKStNYXRoLmltdWwoWGUsSXQpfDAsQT1N''@;'; put 'put ''YXRoLmltdWwoWGUsUnQpLEU9RStNYXRoLmltdWwodnQsYW4pfDAsbT0obT1tK01hdGguaW11bCh2dCxsbil8MCkrTWF0aC5pbXVsKFN0LGFuKXwwLEE9QStNYXRoLmltdWwoU3QsbG4pfDAsRT1FK01hdGguaW11bChydCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LGh0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoUWUsaG4pfDAsQT1BK01hdGguaW11bChRZSxodCl8MCxFPUUrTWF0aC5pbXVsKEFlLEJ0KXwwLG09KG09bStNYXRoLmltdWwoQWUsQXQpfDApK01hdGguaW11bChEZSxCdCl8MCxBPUErTWF0aC5pbXVsKERlLEF0KXwwLEU9RStNYXRoLmltdWwoTGUsc3QpfDAsbT0obT1tK01hdGguaW11''@;'; put 'put ''bChMZSxadCl8MCkrTWF0aC5pbXVsKFJlLHN0KXwwLEE9QStNYXRoLmltdWwoUmUsWnQpfDAsRT1FK01hdGguaW11bChqZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKGplLFR0KXwwKStNYXRoLmltdWwoa2UsWWUpfDAsQT1BK01hdGguaW11bChrZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHhlLGZ0''@;'; put 'put ''KXwwLG09KG09bStNYXRoLmltdWwoeGUsTXQpfDApK01hdGguaW11bCh5ZSxmdCl8MCxBPUErTWF0aC5pbXVsKHllLE10KXwwLEU9RStNYXRoLmltdWwoVWUsbm4pfDAsbT0obT1tK01hdGguaW11bChVZSxXdCl8MCkrTWF0aC5pbXVsKEplLG5uKXwwLEE9QStNYXRoLmltdWwoSmUsV3QpfDA7''@;'; put 'put ''dmFyIFJpPShqKyhFPUUrTWF0aC5pbXVsKG5lLGRuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsbW4pfDApK01hdGguaW11bChzZSxkbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxtbil8MCkrKG0+Pj4xMyl8MCkrKFJpPj4+MjYpfDAsUmkmPTY3MTA4ODYz''@;'; put 'put ''LEU9TWF0aC5pbXVsKEllLEl0KSxtPShtPU1hdGguaW11bChJZSxSdCkpK01hdGguaW11bChhdCxJdCl8MCxBPU1hdGguaW11bChhdCxSdCksRT1FK01hdGguaW11bCh1dCxhbil8MCxtPShtPW0rTWF0aC5pbXVsKHV0LGxuKXwwKStNYXRoLmltdWwoWGUsYW4pfDAsQT1BK01hdGguaW11bChY''@;'; put 'put ''ZSxsbil8MCxFPUUrTWF0aC5pbXVsKHZ0LGhuKXwwLG09KG09bStNYXRoLmltdWwodnQsaHQpfDApK01hdGguaW11bChTdCxobil8MCxBPUErTWF0aC5pbXVsKFN0LGh0KXwwLEU9RStNYXRoLmltdWwocnQsQnQpfDAsbT0obT1tK01hdGguaW11bChydCxBdCl8MCkrTWF0aC5pbXVsKFFlLEJ0''@;'; put 'put ''KXwwLEE9QStNYXRoLmltdWwoUWUsQXQpfDAsRT1FK01hdGguaW11bChBZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKEFlLFp0KXwwKStNYXRoLmltdWwoRGUsc3QpfDAsQT1BK01hdGguaW11bChEZSxadCl8MCxFPUUrTWF0aC5pbXVsKExlLFllKXwwLG09KG09bStNYXRoLmltdWwoTGUsVHQp''@;'; put 'put ''fDApK01hdGguaW11bChSZSxZZSl8MCxBPUErTWF0aC5pbXVsKFJlLFR0KXwwLEU9RStNYXRoLmltdWwoamUsZnQpfDAsbT0obT1tK01hdGguaW11bChqZSxNdCl8MCkrTWF0aC5pbXVsKGtlLGZ0KXwwLEE9QStNYXRoLmltdWwoa2UsTXQpfDAsRT1FK01hdGguaW11bCh4ZSxubil8MCxtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKHhlLFd0KXwwKStNYXRoLmltdWwoeWUsbm4pfDAsQT1BK01hdGguaW11bCh5ZSxXdCl8MCxFPUUrTWF0aC5pbXVsKFVlLGRuKXwwLG09KG09bStNYXRoLmltdWwoVWUsbW4pfDApK01hdGguaW11bChKZSxkbil8MCxBPUErTWF0aC5pbXVsKEplLG1uKXwwO3ZhciBEYT0o''@;'; put 'put ''aisoRT1FK01hdGguaW11bChuZSxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLHRuKXwwKStNYXRoLmltdWwoc2UsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsdG4pfDApKyhtPj4+MTMpfDApKyhEYT4+PjI2KXwwLERhJj02NzEwODg2MyxFPU1hdGgu''@;'; put 'put ''aW11bChJZSxhbiksbT0obT1NYXRoLmltdWwoSWUsbG4pKStNYXRoLmltdWwoYXQsYW4pfDAsQT1NYXRoLmltdWwoYXQsbG4pLEU9RStNYXRoLmltdWwodXQsaG4pfDAsbT0obT1tK01hdGguaW11bCh1dCxodCl8MCkrTWF0aC5pbXVsKFhlLGhuKXwwLEE9QStNYXRoLmltdWwoWGUsaHQpfDAs''@;'; put 'put ''RT1FK01hdGguaW11bCh2dCxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LEF0KXwwKStNYXRoLmltdWwoU3QsQnQpfDAsQT1BK01hdGguaW11bChTdCxBdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LHN0KXwwLG09KG09bStNYXRoLmltdWwocnQsWnQpfDApK01hdGguaW11bChRZSxzdCl8MCxBPUEr''@;'; put 'put ''TWF0aC5pbXVsKFFlLFp0KXwwLEU9RStNYXRoLmltdWwoQWUsWWUpfDAsbT0obT1tK01hdGguaW11bChBZSxUdCl8MCkrTWF0aC5pbXVsKERlLFllKXwwLEE9QStNYXRoLmltdWwoRGUsVHQpfDAsRT1FK01hdGguaW11bChMZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKExlLE10KXwwKStNYXRo''@;'; put 'put ''LmltdWwoUmUsZnQpfDAsQT1BK01hdGguaW11bChSZSxNdCl8MCxFPUUrTWF0aC5pbXVsKGplLG5uKXwwLG09KG09bStNYXRoLmltdWwoamUsV3QpfDApK01hdGguaW11bChrZSxubil8MCxBPUErTWF0aC5pbXVsKGtlLFd0KXwwLEU9RStNYXRoLmltdWwoeGUsZG4pfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bCh4ZSxtbil8MCkrTWF0aC5pbXVsKHllLGRuKXwwLEE9QStNYXRoLmltdWwoeWUsbW4pfDA7dmFyIGhpPShqKyhFPUUrTWF0aC5pbXVsKFVlLGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoVWUsdG4pfDApK01hdGguaW11bChKZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1B''@;'; put 'put ''K01hdGguaW11bChKZSx0bil8MCkrKG0+Pj4xMyl8MCkrKGhpPj4+MjYpfDAsaGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLGhuKSxtPShtPU1hdGguaW11bChJZSxodCkpK01hdGguaW11bChhdCxobil8MCxBPU1hdGguaW11bChhdCxodCksRT1FK01hdGguaW11bCh1dCxCdCl8MCxtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKHV0LEF0KXwwKStNYXRoLmltdWwoWGUsQnQpfDAsQT1BK01hdGguaW11bChYZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHZ0LHN0KXwwLG09KG09bStNYXRoLmltdWwodnQsWnQpfDApK01hdGguaW11bChTdCxzdCl8MCxBPUErTWF0aC5pbXVsKFN0LFp0KXwwLEU9RStNYXRo''@;'; put 'put ''LmltdWwocnQsWWUpfDAsbT0obT1tK01hdGguaW11bChydCxUdCl8MCkrTWF0aC5pbXVsKFFlLFllKXwwLEE9QStNYXRoLmltdWwoUWUsVHQpfDAsRT1FK01hdGguaW11bChBZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKEFlLE10KXwwKStNYXRoLmltdWwoRGUsZnQpfDAsQT1BK01hdGguaW11''@;'; put 'put ''bChEZSxNdCl8MCxFPUUrTWF0aC5pbXVsKExlLG5uKXwwLG09KG09bStNYXRoLmltdWwoTGUsV3QpfDApK01hdGguaW11bChSZSxubil8MCxBPUErTWF0aC5pbXVsKFJlLFd0KXwwLEU9RStNYXRoLmltdWwoamUsZG4pfDAsbT0obT1tK01hdGguaW11bChqZSxtbil8MCkrTWF0aC5pbXVsKGtl''@;'; put 'put ''LGRuKXwwLEE9QStNYXRoLmltdWwoa2UsbW4pfDA7dmFyIHFpPShqKyhFPUUrTWF0aC5pbXVsKHhlLGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoeGUsdG4pfDApK01hdGguaW11bCh5ZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCh5ZSx0bil8MCkrKG0+Pj4x''@;'; put 'put ''Myl8MCkrKHFpPj4+MjYpfDAscWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLEJ0KSxtPShtPU1hdGguaW11bChJZSxBdCkpK01hdGguaW11bChhdCxCdCl8MCxBPU1hdGguaW11bChhdCxBdCksRT1FK01hdGguaW11bCh1dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHV0LFp0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoWGUsc3QpfDAsQT1BK01hdGguaW11bChYZSxadCl8MCxFPUUrTWF0aC5pbXVsKHZ0LFllKXwwLG09KG09bStNYXRoLmltdWwodnQsVHQpfDApK01hdGguaW11bChTdCxZZSl8MCxBPUErTWF0aC5pbXVsKFN0LFR0KXwwLEU9RStNYXRoLmltdWwocnQsZnQpfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bChydCxNdCl8MCkrTWF0aC5pbXVsKFFlLGZ0KXwwLEE9QStNYXRoLmltdWwoUWUsTXQpfDAsRT1FK01hdGguaW11bChBZSxubil8MCxtPShtPW0rTWF0aC5pbXVsKEFlLFd0KXwwKStNYXRoLmltdWwoRGUsbm4pfDAsQT1BK01hdGguaW11bChEZSxXdCl8MCxFPUUrTWF0aC5pbXVsKExl''@;'; put 'put ''LGRuKXwwLG09KG09bStNYXRoLmltdWwoTGUsbW4pfDApK01hdGguaW11bChSZSxkbil8MCxBPUErTWF0aC5pbXVsKFJlLG1uKXwwO3ZhciBQYT0oaisoRT1FK01hdGguaW11bChqZSxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGplLHRuKXwwKStNYXRoLmltdWwoa2UsZm4p''@;'; put 'put ''fDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoa2UsdG4pfDApKyhtPj4+MTMpfDApKyhQYT4+PjI2KXwwLFBhJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxzdCksbT0obT1NYXRoLmltdWwoSWUsWnQpKStNYXRoLmltdWwoYXQsc3QpfDAsQT1NYXRoLmltdWwoYXQsWnQpLEU9RStNYXRo''@;'; put 'put ''LmltdWwodXQsWWUpfDAsbT0obT1tK01hdGguaW11bCh1dCxUdCl8MCkrTWF0aC5pbXVsKFhlLFllKXwwLEE9QStNYXRoLmltdWwoWGUsVHQpfDAsRT1FK01hdGguaW11bCh2dCxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LE10KXwwKStNYXRoLmltdWwoU3QsZnQpfDAsQT1BK01hdGguaW11''@;'; put 'put ''bChTdCxNdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LG5uKXwwLG09KG09bStNYXRoLmltdWwocnQsV3QpfDApK01hdGguaW11bChRZSxubil8MCxBPUErTWF0aC5pbXVsKFFlLFd0KXwwLEU9RStNYXRoLmltdWwoQWUsZG4pfDAsbT0obT1tK01hdGguaW11bChBZSxtbil8MCkrTWF0aC5pbXVsKERl''@;'; put 'put ''LGRuKXwwLEE9QStNYXRoLmltdWwoRGUsbW4pfDA7dmFyIHVyPShqKyhFPUUrTWF0aC5pbXVsKExlLGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoTGUsdG4pfDApK01hdGguaW11bChSZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChSZSx0bil8MCkrKG0+Pj4x''@;'; put 'put ''Myl8MCkrKHVyPj4+MjYpfDAsdXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLFllKSxtPShtPU1hdGguaW11bChJZSxUdCkpK01hdGguaW11bChhdCxZZSl8MCxBPU1hdGguaW11bChhdCxUdCksRT1FK01hdGguaW11bCh1dCxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKHV0LE10KXwwKStNYXRo''@;'; put 'put ''LmltdWwoWGUsZnQpfDAsQT1BK01hdGguaW11bChYZSxNdCl8MCxFPUUrTWF0aC5pbXVsKHZ0LG5uKXwwLG09KG09bStNYXRoLmltdWwodnQsV3QpfDApK01hdGguaW11bChTdCxubil8MCxBPUErTWF0aC5pbXVsKFN0LFd0KXwwLEU9RStNYXRoLmltdWwocnQsZG4pfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bChydCxtbil8MCkrTWF0aC5pbXVsKFFlLGRuKXwwLEE9QStNYXRoLmltdWwoUWUsbW4pfDA7dmFyIGJhPShqKyhFPUUrTWF0aC5pbXVsKEFlLGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoQWUsdG4pfDApK01hdGguaW11bChEZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1B''@;'; put 'put ''K01hdGguaW11bChEZSx0bil8MCkrKG0+Pj4xMyl8MCkrKGJhPj4+MjYpfDAsYmEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLGZ0KSxtPShtPU1hdGguaW11bChJZSxNdCkpK01hdGguaW11bChhdCxmdCl8MCxBPU1hdGguaW11bChhdCxNdCksRT1FK01hdGguaW11bCh1dCxubil8MCxtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKHV0LFd0KXwwKStNYXRoLmltdWwoWGUsbm4pfDAsQT1BK01hdGguaW11bChYZSxXdCl8MCxFPUUrTWF0aC5pbXVsKHZ0LGRuKXwwLG09KG09bStNYXRoLmltdWwodnQsbW4pfDApK01hdGguaW11bChTdCxkbil8MCxBPUErTWF0aC5pbXVsKFN0LG1uKXwwO3ZhciBNaT0o''@;'; put 'put ''aisoRT1FK01hdGguaW11bChydCxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHJ0LHRuKXwwKStNYXRoLmltdWwoUWUsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoUWUsdG4pfDApKyhtPj4+MTMpfDApKyhNaT4+PjI2KXwwLE1pJj02NzEwODg2MyxFPU1hdGgu''@;'; put 'put ''aW11bChJZSxubiksbT0obT1NYXRoLmltdWwoSWUsV3QpKStNYXRoLmltdWwoYXQsbm4pfDAsQT1NYXRoLmltdWwoYXQsV3QpLEU9RStNYXRoLmltdWwodXQsZG4pfDAsbT0obT1tK01hdGguaW11bCh1dCxtbil8MCkrTWF0aC5pbXVsKFhlLGRuKXwwLEE9QStNYXRoLmltdWwoWGUsbW4pfDA7''@;'; put 'put ''dmFyIHdhPShqKyhFPUUrTWF0aC5pbXVsKHZ0LGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodnQsdG4pfDApK01hdGguaW11bChTdCxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChTdCx0bil8MCkrKG0+Pj4xMyl8MCkrKHdhPj4+MjYpfDAsd2EmPTY3MTA4ODYz''@;'; put 'put ''LEU9TWF0aC5pbXVsKEllLGRuKSxtPShtPU1hdGguaW11bChJZSxtbikpK01hdGguaW11bChhdCxkbil8MCxBPU1hdGguaW11bChhdCxtbik7dmFyIGVhPShqKyhFPUUrTWF0aC5pbXVsKHV0LGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodXQsdG4pfDApK01hdGguaW11bChY''@;'; put 'put ''ZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChYZSx0bil8MCkrKG0+Pj4xMyl8MCkrKGVhPj4+MjYpfDAsZWEmPTY3MTA4ODYzO3ZhciBGcj0oaisoRT1NYXRoLmltdWwoSWUsZm4pKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKEllLHRuKSkrTWF0aC5pbXVsKGF0LGZuKXww''@;'; put 'put ''KSk8PDEzKXwwO3JldHVybiBqPSgoQT1NYXRoLmltdWwoYXQsdG4pKSsobT4+PjEzKXwwKSsoRnI+Pj4yNil8MCxGciY9NjcxMDg4NjMsSFswXT1jYSxIWzFdPV9pLEhbMl09dnIsSFszXT1YaSxIWzRdPVFpLEhbNV09VmksSFs2XT1laSxIWzddPXVhLEhbOF09UmksSFs5XT1EYSxIWzEwXT1o''@;'; put 'put ''aSxIWzExXT1xaSxIWzEyXT1QYSxIWzEzXT11cixIWzE0XT1iYSxIWzE1XT1NaSxIWzE2XT13YSxIWzE3XT1lYSxIWzE4XT1GciwwIT09aiYmKEhbMTldPWoseC5sZW5ndGgrKykseH07ZnVuY3Rpb24gZWUoQixnLHkpe3JldHVybihuZXcgSikubXVscChCLGcseSl9ZnVuY3Rpb24gSihCLGcp''@;'; put 'put ''e3RoaXMueD1CLHRoaXMueT1nfU1hdGguaW11bHx8KFc9WSksdy5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oZyx5KXt2YXIgeCxDPXRoaXMubGVuZ3RoK2cubGVuZ3RoO3JldHVybiB4PTEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/Vyh0aGlzLGcseSk6Qzw2Mz9ZKHRoaXMsZyx5''@;'; put 'put ''KTpDPDEwMjQ/ZnVuY3Rpb24gcShCLGcseSl7eS5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkIubmVnYXRpdmUseS5sZW5ndGg9Qi5sZW5ndGgrZy5sZW5ndGg7Zm9yKHZhciB4PTAsQz0wLFQ9MDtUPHkubGVuZ3RoLTE7VCsrKXt2YXIgSD1DO0M9MDtmb3IodmFyIGo9NjcxMDg4NjMmeCxFPU1hdGgu''@;'; put 'put ''bWluKFQsZy5sZW5ndGgtMSksbT1NYXRoLm1heCgwLFQtQi5sZW5ndGgrMSk7bTw9RTttKyspe3ZhciBzZT0oMHxCLndvcmRzW1QtbV0pKigwfGcud29yZHNbbV0pLENlPTY3MTA4ODYzJnNlO2o9NjcxMDg4NjMmKENlPUNlK2p8MCksQys9KEg9KEg9SCsoc2UvNjcxMDg4NjR8MCl8MCkrKENl''@;'; put 'put ''Pj4+MjYpfDApPj4+MjYsSCY9NjcxMDg4NjN9eS53b3Jkc1tUXT1qLHg9SCxIPUN9cmV0dXJuIDAhPT14P3kud29yZHNbVF09eDp5Lmxlbmd0aC0tLHkuc3RyaXAoKX0odGhpcyxnLHkpOmVlKHRoaXMsZyx5KSx4fSxKLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT1u''@;'; put 'put ''ZXcgQXJyYXkoZykseD13LnByb3RvdHlwZS5fY291bnRCaXRzKGcpLTEsQz0wO0M8ZztDKyspeVtDXT10aGlzLnJldkJpbihDLHgsZyk7cmV0dXJuIHl9LEoucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihnLHkseCl7aWYoMD09PWd8fGc9PT14LTEpcmV0dXJuIGc7Zm9yKHZhciBDPTAsVD0w''@;'; put 'put ''O1Q8eTtUKyspQ3w9KDEmZyk8PHktVC0xLGc+Pj0xO3JldHVybiBDfSxKLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGcseSx4LEMsVCxIKXtmb3IodmFyIGo9MDtqPEg7aisrKUNbal09eVtnW2pdXSxUW2pdPXhbZ1tqXV19LEoucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihnLHks''@;'; put 'put ''eCxDLFQsSCl7dGhpcy5wZXJtdXRlKEgsZyx5LHgsQyxUKTtmb3IodmFyIGo9MTtqPFQ7ajw8PTEpZm9yKHZhciBFPWo8PDEsbT1NYXRoLmNvcygyKk1hdGguUEkvRSksQT1NYXRoLnNpbigyKk1hdGguUEkvRSksYWU9MDthZTxUO2FlKz1FKWZvcih2YXIgbmU9bSxzZT1BLENlPTA7Q2U8ajtD''@;'; put 'put ''ZSsrKXt2YXIgVWU9eFthZStDZV0sSmU9Q1thZStDZV0saXQ9eFthZStDZStqXSx4ZT1DW2FlK0NlK2pdLHllPW5lKml0LXNlKnhlO3hlPW5lKnhlK3NlKml0LHhbYWUrQ2VdPVVlKyhpdD15ZSksQ1thZStDZV09SmUreGUseFthZStDZStqXT1VZS1pdCxDW2FlK0NlK2pdPUplLXhlLENlIT09''@;'; put 'put ''RSYmKHllPW0qbmUtQSpzZSxzZT1tKnNlK0EqbmUsbmU9eWUpfX0sSi5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oZyx5KXt2YXIgeD0xfE1hdGgubWF4KHksZyksQz0xJngsVD0wO2Zvcih4PXgvMnwwO3g7eD4+Pj0xKVQrKztyZXR1cm4gMTw8VCsxK0N9LEoucHJvdG90eXBlLmNv''@;'; put 'put ''bmp1Z2F0ZT1mdW5jdGlvbihnLHkseCl7aWYoISh4PD0xKSlmb3IodmFyIEM9MDtDPHgvMjtDKyspe3ZhciBUPWdbQ107Z1tDXT1nW3gtQy0xXSxnW3gtQy0xXT1ULFQ9eVtDXSx5W0NdPS15W3gtQy0xXSx5W3gtQy0xXT0tVH19LEoucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihn''@;'; put 'put ''LHkpe2Zvcih2YXIgeD0wLEM9MDtDPHkvMjtDKyspe3ZhciBUPTgxOTIqTWF0aC5yb3VuZChnWzIqQysxXS95KStNYXRoLnJvdW5kKGdbMipDXS95KSt4O2dbQ109NjcxMDg4NjMmVCx4PVQ8NjcxMDg4NjQ/MDpULzY3MTA4ODY0fDB9cmV0dXJuIGd9LEoucHJvdG90eXBlLmNvbnZlcnQxM2I9''@;'; put 'put ''ZnVuY3Rpb24oZyx5LHgsQyl7Zm9yKHZhciBUPTAsSD0wO0g8eTtIKyspeFsyKkhdPTgxOTEmKFQrPTB8Z1tIXSkseFsyKkgrMV09ODE5MSYoVD4+Pj0xMyksVD4+Pj0xMztmb3IoSD0yKnk7SDxDOysrSCl4W0hdPTA7cCgwPT09VCkscCghKC04MTkyJlQpKX0sSi5wcm90b3R5cGUuc3R1Yj1m''@;'; put 'put ''dW5jdGlvbihnKXtmb3IodmFyIHk9bmV3IEFycmF5KGcpLHg9MDt4PGc7eCsrKXlbeF09MDtyZXR1cm4geX0sSi5wcm90b3R5cGUubXVscD1mdW5jdGlvbihnLHkseCl7dmFyIEM9Mip0aGlzLmd1ZXNzTGVuMTNiKGcubGVuZ3RoLHkubGVuZ3RoKSxUPXRoaXMubWFrZVJCVChDKSxIPXRoaXMu''@;'; put 'put ''c3R1YihDKSxqPW5ldyBBcnJheShDKSxFPW5ldyBBcnJheShDKSxtPW5ldyBBcnJheShDKSxBPW5ldyBBcnJheShDKSxhZT1uZXcgQXJyYXkoQyksbmU9bmV3IEFycmF5KEMpLHNlPXgud29yZHM7c2UubGVuZ3RoPUMsdGhpcy5jb252ZXJ0MTNiKGcud29yZHMsZy5sZW5ndGgsaixDKSx0aGlz''@;'; put 'put ''LmNvbnZlcnQxM2IoeS53b3Jkcyx5Lmxlbmd0aCxBLEMpLHRoaXMudHJhbnNmb3JtKGosSCxFLG0sQyxUKSx0aGlzLnRyYW5zZm9ybShBLEgsYWUsbmUsQyxUKTtmb3IodmFyIENlPTA7Q2U8QztDZSsrKXt2YXIgVWU9RVtDZV0qYWVbQ2VdLW1bQ2VdKm5lW0NlXTttW0NlXT1FW0NlXSpuZVtD''@;'; put 'put ''ZV0rbVtDZV0qYWVbQ2VdLEVbQ2VdPVVlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShFLG0sQyksdGhpcy50cmFuc2Zvcm0oRSxtLHNlLEgsQyxUKSx0aGlzLmNvbmp1Z2F0ZShzZSxILEMpLHRoaXMubm9ybWFsaXplMTNiKHNlLEMpLHgubmVnYXRpdmU9Zy5uZWdhdGl2ZV55Lm5lZ2F0aXZlLHgu''@;'; put 'put ''bGVuZ3RoPWcubGVuZ3RoK3kubGVuZ3RoLHguc3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcpe3ZhciB5PW5ldyB3KG51bGwpO3JldHVybiB5LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksdGhpcy5tdWxUbyhnLHkpfSx3LnByb3RvdHlwZS5tdWxmPWZ1''@;'; put 'put ''bmN0aW9uKGcpe3ZhciB5PW5ldyB3KG51bGwpO3JldHVybiB5LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksZWUodGhpcyxnLHkpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oZyx0aGlzKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''aW11bG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCk7Zm9yKHZhciB5PTAseD0wO3g8dGhpcy5sZW5ndGg7eCsrKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSpnLFQ9KDY3MTA4ODYzJkMpKyg2NzEwODg2MyZ5KTt5Pj49MjYseSs9Qy82NzEwODg2NHww''@;'; put 'put ''LHkrPVQ+Pj4yNix0aGlzLndvcmRzW3hdPTY3MTA4ODYzJlR9cmV0dXJuIDAhPT15JiYodGhpcy53b3Jkc1t4XT15LHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihnKX0sdy5wcm90b3R5cGUuc3FyPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSx3LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyl7dmFyIHk9ZnVuY3Rpb24gWihCKXtmb3IodmFyIGc9bmV3IEFycmF5KEIuYml0''@;'; put 'put ''TGVuZ3RoKCkpLHk9MDt5PGcubGVuZ3RoO3krKyl7dmFyIEM9eSUyNjtnW3ldPShCLndvcmRzW3kvMjZ8MF0mMTw8Qyk+Pj5DfXJldHVybiBnfShnKTtpZigwPT09eS5sZW5ndGgpcmV0dXJuIG5ldyB3KDEpO2Zvcih2YXIgeD10aGlzLEM9MDtDPHkubGVuZ3RoJiYwPT09eVtDXTtDKysseD14''@;'; put 'put ''LnNxcigpKTtpZigrK0M8eS5sZW5ndGgpZm9yKHZhciBUPXguc3FyKCk7Qzx5Lmxlbmd0aDtDKyssVD1ULnNxcigpKTAhPT15W0NdJiYoeD14Lm11bChUKSk7cmV0dXJuIHh9LHcucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIFQs''@;'; put 'put ''eT1nJTI2LHg9KGcteSkvMjYsQz02NzEwODg2Mz4+PjI2LXk8PDI2LXk7aWYoMCE9PXkpe3ZhciBIPTA7Zm9yKFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIGo9dGhpcy53b3Jkc1tUXSZDO3RoaXMud29yZHNbVF09KDB8dGhpcy53b3Jkc1tUXSktajw8eXxILEg9aj4+PjI2LXl9SCYmKHRo''@;'; put 'put ''aXMud29yZHNbVF09SCx0aGlzLmxlbmd0aCsrKX1pZigwIT09eCl7Zm9yKFQ9dGhpcy5sZW5ndGgtMTtUPj0wO1QtLSl0aGlzLndvcmRzW1QreF09dGhpcy53b3Jkc1tUXTtmb3IoVD0wO1Q8eDtUKyspdGhpcy53b3Jkc1tUXT0wO3RoaXMubGVuZ3RoKz14fXJldHVybiB0aGlzLnN0cmlwKCl9''@;'; put 'put ''LHcucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihnKX0sdy5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKGcseSx4KXt2YXIgQztwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCksQz15Pyh5LXklMjYpLzI2OjA7dmFy''@;'; put 'put ''IFQ9ZyUyNixIPU1hdGgubWluKChnLVQpLzI2LHRoaXMubGVuZ3RoKSxqPTY3MTA4ODYzXjY3MTA4ODYzPj4+VDw8VCxFPXg7aWYoQy09SCxDPU1hdGgubWF4KDAsQyksRSl7Zm9yKHZhciBtPTA7bTxIO20rKylFLndvcmRzW21dPXRoaXMud29yZHNbbV07RS5sZW5ndGg9SH1pZigwIT09SClp''@;'; put 'put ''Zih0aGlzLmxlbmd0aD5IKWZvcih0aGlzLmxlbmd0aC09SCxtPTA7bTx0aGlzLmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT10aGlzLndvcmRzW20rSF07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgQT0wO2ZvcihtPXRoaXMubGVuZ3RoLTE7bT49MCYmKDAhPT1BfHxt''@;'; put 'put ''Pj1DKTttLS0pe3ZhciBhZT0wfHRoaXMud29yZHNbbV07dGhpcy53b3Jkc1ttXT1BPDwyNi1UfGFlPj4+VCxBPWFlJmp9cmV0dXJuIEUmJjAhPT1BJiYoRS53b3Jkc1tFLmxlbmd0aCsrXT1BKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5z''@;'; put 'put ''dHJpcCgpfSx3LnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihnLHkseCl7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGcseSx4KX0sdy5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGcpfSx3LnByb3RvdHlwZS51c2hs''@;'; put 'put ''bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihnKX0sdy5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGcpfSx3LnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihnKX0s''@;'; put 'put ''dy5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PWclMjYseD0oZy15KS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD14fHwhKHRoaXMud29yZHNbeF0mMTw8eSkpfSx3LnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oZyl7cCgibnVt''@;'; put 'put ''YmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PWclMjYseD0oZy15KS8yNjtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXg/dGhpczooMCE9PXkmJngrKyx0aGlzLmxlbmd0aD1NYXRoLm1p''@;'; put 'put ''bih4LHRoaXMubGVuZ3RoKSwwIT09eSYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+eTw8eSksdGhpcy5zdHJpcCgpKX0sdy5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oZyl9LHcucHJvdG90eXBl''@;'; put 'put ''LmlhZGRuPWZ1bmN0aW9uKGcpe3JldHVybiBwKCJudW1iZXIiPT10eXBlb2YgZykscChnPDY3MTA4ODY0KSxnPDA/dGhpcy5pc3VibigtZyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxnPyh0aGlzLndvcmRzWzBdPWctKDB8dGhpcy53b3Jk''@;'; put 'put ''c1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oZyl9LHcucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihnKXt0aGlzLndvcmRzWzBdKz1nO2Zvcih2YXIgeT0wO3k8dGhpcy5s''@;'; put 'put ''ZW5ndGgmJnRoaXMud29yZHNbeV0+PTY3MTA4ODY0O3krKyl0aGlzLndvcmRzW3ldLT02NzEwODg2NCx5PT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW3krMV09MTp0aGlzLndvcmRzW3krMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgseSsxKSx0aGlzfSx3''@;'; put 'put ''LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihnKXtpZihwKCJudW1iZXIiPT10eXBlb2YgZykscChnPDY3MTA4ODY0KSxnPDApcmV0dXJuIHRoaXMuaWFkZG4oLWcpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihnKSx0aGlzLm5lZ2F0aXZl''@;'; put 'put ''PTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1nLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t5XTwwO3krKyl0aGlzLndv''@;'; put 'put ''cmRzW3ldKz02NzEwODg2NCx0aGlzLndvcmRzW3krMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGcpfSx3LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCku''@;'; put 'put ''aXN1Ym4oZyl9LHcucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHcucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx3LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oZyx5LHgpe3Zh''@;'; put 'put ''ciBUO3RoaXMuX2V4cGFuZChnLmxlbmd0aCt4KTt2YXIgSCxqPTA7Zm9yKFQ9MDtUPGcubGVuZ3RoO1QrKyl7SD0oMHx0aGlzLndvcmRzW1QreF0pK2o7dmFyIEU9KDB8Zy53b3Jkc1tUXSkqeTtqPSgoSC09NjcxMDg4NjMmRSk+PjI2KS0oRS82NzEwODg2NHwwKSx0aGlzLndvcmRzW1QreF09''@;'; put 'put ''NjcxMDg4NjMmSH1mb3IoO1Q8dGhpcy5sZW5ndGgteDtUKyspaj0oSD0oMHx0aGlzLndvcmRzW1QreF0pK2opPj4yNix0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmSDtpZigwPT09ailyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihwKC0xPT09aiksaj0wLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKylq''@;'; put 'put ''PShIPS0oMHx0aGlzLndvcmRzW1RdKStqKT4+MjYsdGhpcy53b3Jkc1tUXT02NzEwODg2MyZIO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihnLHkpe3ZhciB4LEM9dGhpcy5jbG9uZSgpLFQ9ZyxIPTB8VC53b3Jkc1tU''@;'; put 'put ''Lmxlbmd0aC0xXTswIT0oeD0yNi10aGlzLl9jb3VudEJpdHMoSCkpJiYoVD1ULnVzaGxuKHgpLEMuaXVzaGxuKHgpLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdKTt2YXIgbSxFPUMubGVuZ3RoLVQubGVuZ3RoO2lmKCJtb2QiIT09eSl7KG09bmV3IHcobnVsbCkpLmxlbmd0aD1FKzEsbS53b3Jk''@;'; put 'put ''cz1uZXcgQXJyYXkobS5sZW5ndGgpO2Zvcih2YXIgQT0wO0E8bS5sZW5ndGg7QSsrKW0ud29yZHNbQV09MH12YXIgYWU9Qy5jbG9uZSgpLl9pc2hsbnN1Ym11bChULDEsRSk7MD09PWFlLm5lZ2F0aXZlJiYoQz1hZSxtJiYobS53b3Jkc1tFXT0xKSk7Zm9yKHZhciBuZT1FLTE7bmU+PTA7bmUt''@;'; put 'put ''LSl7dmFyIHNlPTY3MTA4ODY0KigwfEMud29yZHNbVC5sZW5ndGgrbmVdKSsoMHxDLndvcmRzW1QubGVuZ3RoK25lLTFdKTtmb3Ioc2U9TWF0aC5taW4oc2UvSHwwLDY3MTA4ODYzKSxDLl9pc2hsbnN1Ym11bChULHNlLG5lKTswIT09Qy5uZWdhdGl2ZTspc2UtLSxDLm5lZ2F0aXZlPTAsQy5f''@;'; put 'put ''aXNobG5zdWJtdWwoVCwxLG5lKSxDLmlzWmVybygpfHwoQy5uZWdhdGl2ZV49MSk7bSYmKG0ud29yZHNbbmVdPXNlKX1yZXR1cm4gbSYmbS5zdHJpcCgpLEMuc3RyaXAoKSwiZGl2IiE9PXkmJjAhPT14JiZDLml1c2hybih4KSx7ZGl2Om18fG51bGwsbW9kOkN9fSx3LnByb3RvdHlwZS5kaXZt''@;'; put 'put ''b2Q9ZnVuY3Rpb24oZyx5LHgpe3JldHVybiBwKCFnLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QoZyx5KSwibW9kIiE9PXkmJihDPUguZGl2Lm5l''@;'; put 'put ''ZygpKSwiZGl2IiE9PXkmJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlhZGQoZykpLHtkaXY6Qyxtb2Q6VH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZT8oSD10aGlzLmRpdm1vZChnLm5lZygpLHkpLCJtb2QiIT09eSYmKEM9SC5kaXYubmVnKCkpLHtk''@;'; put 'put ''aXY6Qyxtb2Q6SC5tb2R9KTp0aGlzLm5lZ2F0aXZlJmcubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QoZy5uZWcoKSx5KSwiZGl2IiE9PXkmJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlzdWIoZykpLHtkaXY6SC5kaXYsbW9kOlR9KTpnLmxlbmd0aD50aGlzLmxl''@;'; put 'put ''bmd0aHx8dGhpcy5jbXAoZyk8MD97ZGl2Om5ldyB3KDApLG1vZDp0aGlzfToxPT09Zy5sZW5ndGg/ImRpdiI9PT15P3tkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PXk/e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp7ZGl2OnRo''@;'; put 'put ''aXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bmV3IHcodGhpcy5tb2RuKGcud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihnLHkpO3ZhciBDLFQsSH0sdy5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJkaXYiLCExKS5kaXZ9LHcucHJvdG90eXBlLm1vZD1m''@;'; put 'put ''dW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMSkubW9kfSx3LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCEwKS5tb2R9LHcucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGcpe3ZhciB5PXRoaXMuZGl2bW9kKGcp''@;'; put 'put ''O2lmKHkubW9kLmlzWmVybygpKXJldHVybiB5LmRpdjt2YXIgeD0wIT09eS5kaXYubmVnYXRpdmU/eS5tb2QuaXN1YihnKTp5Lm1vZCxDPWcudXNocm4oMSksVD1nLmFuZGxuKDEpLEg9eC5jbXAoQyk7cmV0dXJuIEg8MHx8MT09PVQmJjA9PT1IP3kuZGl2OjAhPT15LmRpdi5uZWdhdGl2ZT95''@;'; put 'put ''LmRpdi5pc3VibigxKTp5LmRpdi5pYWRkbigxKX0sdy5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihnKXtwKGc8PTY3MTA4ODYzKTtmb3IodmFyIHk9KDE8PDI2KSVnLHg9MCxDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0peD0oeSp4KygwfHRoaXMud29yZHNbQ10pKSVnO3JldHVybiB4fSx3LnBy''@;'; put 'put ''b3RvdHlwZS5pZGl2bj1mdW5jdGlvbihnKXtwKGc8PTY3MTA4ODYzKTtmb3IodmFyIHk9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKzY3MTA4ODY0Knk7dGhpcy53b3Jkc1t4XT1DL2d8MCx5PUMlZ31yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5kaXZuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oZyl9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSkscCghZy5pc1plcm8oKSk7dmFyIHk9dGhpcyx4PWcuY2xvbmUoKTt5PTAhPT15Lm5lZ2F0aXZlP3kudW1vZChn''@;'; put 'put ''KTp5LmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD1uZXcgdygwKSxqPW5ldyB3KDEpLEU9MDt5LmlzRXZlbigpJiZ4LmlzRXZlbigpOyl5Lml1c2hybigxKSx4Lml1c2hybigxKSwrK0U7Zm9yKHZhciBtPXguY2xvbmUoKSxBPXkuY2xvbmUoKTsheS5pc1plcm8oKTsp''@;'; put 'put ''e2Zvcih2YXIgYWU9MCxuZT0xOyEoeS53b3Jkc1swXSZuZSkmJmFlPDI2OysrYWUsbmU8PD0xKTtpZihhZT4wKWZvcih5Lml1c2hybihhZSk7YWUtLSA+MDspKEMuaXNPZGQoKXx8VC5pc09kZCgpKSYmKEMuaWFkZChtKSxULmlzdWIoQSkpLEMuaXVzaHJuKDEpLFQuaXVzaHJuKDEpO2Zvcih2''@;'; put 'put ''YXIgc2U9MCxDZT0xOyEoeC53b3Jkc1swXSZDZSkmJnNlPDI2Oysrc2UsQ2U8PD0xKTtpZihzZT4wKWZvcih4Lml1c2hybihzZSk7c2UtLSA+MDspKEguaXNPZGQoKXx8ai5pc09kZCgpKSYmKEguaWFkZChtKSxqLmlzdWIoQSkpLEguaXVzaHJuKDEpLGouaXVzaHJuKDEpO3kuY21wKHgpPj0w''@;'; put 'put ''Pyh5LmlzdWIoeCksQy5pc3ViKEgpLFQuaXN1YihqKSk6KHguaXN1Yih5KSxILmlzdWIoQyksai5pc3ViKFQpKX1yZXR1cm57YTpILGI6aixnY2Q6eC5pdXNobG4oRSl9fSx3LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSkscCghZy5pc1plcm8oKSk7dmFy''@;'; put 'put ''IGFlLHk9dGhpcyx4PWcuY2xvbmUoKTt5PTAhPT15Lm5lZ2F0aXZlP3kudW1vZChnKTp5LmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD14LmNsb25lKCk7eS5jbXBuKDEpPjAmJnguY21wbigxKT4wOyl7Zm9yKHZhciBqPTAsRT0xOyEoeS53b3Jkc1swXSZFKSYmajwy''@;'; put 'put ''NjsrK2osRTw8PTEpO2lmKGo+MClmb3IoeS5pdXNocm4oaik7ai0tID4wOylDLmlzT2RkKCkmJkMuaWFkZChIKSxDLml1c2hybigxKTtmb3IodmFyIG09MCxBPTE7ISh4LndvcmRzWzBdJkEpJiZtPDI2OysrbSxBPDw9MSk7aWYobT4wKWZvcih4Lml1c2hybihtKTttLS0gPjA7KVQuaXNPZGQo''@;'; put 'put ''KSYmVC5pYWRkKEgpLFQuaXVzaHJuKDEpO3kuY21wKHgpPj0wPyh5LmlzdWIoeCksQy5pc3ViKFQpKTooeC5pc3ViKHkpLFQuaXN1YihDKSl9cmV0dXJuKGFlPTA9PT15LmNtcG4oMSk/QzpUKS5jbXBuKDApPDAmJmFlLmlhZGQoZyksYWV9LHcucHJvdG90eXBlLmdjZD1mdW5jdGlvbihnKXtp''@;'; put 'put ''Zih0aGlzLmlzWmVybygpKXJldHVybiBnLmFicygpO2lmKGcuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIHk9dGhpcy5jbG9uZSgpLHg9Zy5jbG9uZSgpO3kubmVnYXRpdmU9MCx4Lm5lZ2F0aXZlPTA7Zm9yKHZhciBDPTA7eS5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTtDKyspeS5pdXNo''@;'; put 'put ''cm4oMSkseC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO3kuaXNFdmVuKCk7KXkuaXVzaHJuKDEpO2Zvcig7eC5pc0V2ZW4oKTspeC5pdXNocm4oMSk7dmFyIFQ9eS5jbXAoeCk7aWYoVDwwKXt2YXIgSD15O3k9eCx4PUh9ZWxzZSBpZigwPT09VHx8MD09PXguY21wbigxKSlicmVhazt5LmlzdWIo''@;'; put 'put ''eCl9cmV0dXJuIHguaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmVnY2QoZykuYS51bW9kKGcpfSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMud29yZHNbMF0mZ30sdy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcpO3ZhciB5PWclMjYseD0oZy15KS8yNixDPTE8PHk7''@;'; put 'put ''aWYodGhpcy5sZW5ndGg8PXgpcmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF18PUMsdGhpcztmb3IodmFyIFQ9QyxIPXg7MCE9PVQmJkg8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj0wfHRoaXMud29yZHNbSF07VD0oais9VCk+Pj4yNix0aGlzLndvcmRzW0hdPWomPTY3MTA4''@;'; put 'put ''ODYzfXJldHVybiAwIT09VCYmKHRoaXMud29yZHNbSF09VCx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdy5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihnKXt2YXIgeCx5''@;'; put 'put ''PWc8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIXkpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJnkpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpeD0xO2Vsc2V7eSYmKGc9LWcpLHAoZzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIEM9MHx0''@;'; put 'put ''aGlzLndvcmRzWzBdO3g9Qz09PWc/MDpDPGc/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteDp4fSx3LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oZyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09''@;'; put 'put ''Zy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgeT10aGlzLnVjbXAoZyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXk6eX0sdy5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihnKXtpZih0aGlzLmxlbmd0aD5nLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxnLmxlbmd0aClyZXR1cm4t''@;'; put 'put ''MTtmb3IodmFyIHk9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPTB8dGhpcy53b3Jkc1t4XSxUPTB8Zy53b3Jkc1t4XTtpZihDIT09VCl7QzxUP3k9LTE6Qz5UJiYoeT0xKTticmVha319cmV0dXJuIHl9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRo''@;'; put 'put ''aXMuY21wbihnKX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcChnKX0sdy5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPj0w''@;'; put 'put ''fSx3LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXAoZyl9LHcucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKTw9MH0sdy5wcm90''@;'; put 'put ''b3R5cGUubHRlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKTw9MH0sdy5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5lcT1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wKGcpfSx3LnJlZD1mdW5jdGlvbihn''@;'; put 'put ''KXtyZXR1cm4gbmV3IE1lKGcpfSx3LnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxwKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcu''@;'; put 'put ''Y29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChnKX0sdy5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LHcu''@;'; put 'put ''cHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5yZWQ9Zyx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChn''@;'; put 'put ''KX0sdy5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJl''@;'; put 'put ''ZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxn''@;'; put 'put ''KX0sdy5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwi''@;'; put 'put ''cmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0''@;'; put 'put ''aGlzLGcpLHRoaXMucmVkLm11bCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5pbXVsKHRoaXMsZyl9''@;'; put 'put ''LHcucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIHAodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9u''@;'; put 'put ''bHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5f''@;'; put 'put ''dmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3LnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0s''@;'; put 'put ''dy5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkJiYhZy5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsZyl9O3ZhciByZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1''@;'; put 'put ''NTE5Om51bGx9O2Z1bmN0aW9uIGllKEIsZyl7dGhpcy5uYW1lPUIsdGhpcy5wPW5ldyB3KGcsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB3KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiB1ZSgpe2ll''@;'; put 'put ''LmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gZ2UoKXtpZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAw''@;'; put 'put ''MDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIF9lKCl7aWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBUZSgpe2llLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZm''@;'; put 'put ''ZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gTWUoQil7aWYoInN0cmluZyI9PXR5cGVvZiBCKXt2YXIgZz13Ll9wcmltZShCKTt0aGlzLm09Zy5wLHRoaXMucHJpbWU9Z31lbHNlIHAoQi5ndG4oMSksIm1vZHVsdXMg''@;'; put 'put ''bXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1CLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBaZShCKXtNZS5jYWxsKHRoaXMsQiksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMu''@;'; put 'put ''cj1uZXcgdygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWlu''@;'; put 'put ''di51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1pZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBnPW5ldyB3KG51bGwpO3JldHVybiBnLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksZ30saWUucHJvdG90eXBlLmlyZWR1Y2U9''@;'; put 'put ''ZnVuY3Rpb24oZyl7dmFyIHgseT1nO2Rve3RoaXMuc3BsaXQoeSx0aGlzLnRtcCkseD0oeT0oeT10aGlzLmltdWxLKHkpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoeD50aGlzLm4pO3ZhciBDPXg8dGhpcy5uPy0xOnkudWNtcCh0aGlzLnApO3JldHVybiAwPT09Qz8oeS53''@;'; put 'put ''b3Jkc1swXT0wLHkubGVuZ3RoPTEpOkM+MD95LmlzdWIodGhpcy5wKTp2b2lkIDAhPT15LnN0cmlwP3kuc3RyaXAoKTp5Ll9zdHJpcCgpLHl9LGllLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLHkpe2cuaXVzaHJuKHRoaXMubiwwLHkpfSxpZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24o''@;'; put 'put ''Zyl7cmV0dXJuIGcuaW11bCh0aGlzLmspfSxWKHVlLGllKSx1ZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyx5KXtmb3IodmFyIHg9NDE5NDMwMyxDPU1hdGgubWluKGcubGVuZ3RoLDkpLFQ9MDtUPEM7VCsrKXkud29yZHNbVF09Zy53b3Jkc1tUXTtpZih5Lmxlbmd0aD1DLGcubGVuZ3Ro''@;'; put 'put ''PD05KXJldHVybiBnLndvcmRzWzBdPTAsdm9pZChnLmxlbmd0aD0xKTt2YXIgSD1nLndvcmRzWzldO2Zvcih5LndvcmRzW3kubGVuZ3RoKytdPUgmeCxUPTEwO1Q8Zy5sZW5ndGg7VCsrKXt2YXIgaj0wfGcud29yZHNbVF07Zy53b3Jkc1tULTEwXT0oaiZ4KTw8NHxIPj4+MjIsSD1qfWcud29y''@;'; put 'put ''ZHNbVC0xMF09SD4+Pj0yMixnLmxlbmd0aC09MD09PUgmJmcubGVuZ3RoPjEwPzEwOjl9LHVlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtnLndvcmRzW2cubGVuZ3RoXT0wLGcud29yZHNbZy5sZW5ndGgrMV09MCxnLmxlbmd0aCs9Mjtmb3IodmFyIHk9MCx4PTA7eDxnLmxlbmd0aDt4''@;'; put 'put ''Kyspe3ZhciBDPTB8Zy53b3Jkc1t4XTtnLndvcmRzW3hdPTY3MTA4ODYzJih5Kz05NzcqQykseT02NCpDKyh5LzY3MTA4ODY0fDApfXJldHVybiAwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmKGcubGVuZ3RoLS0sMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJmcubGVuZ3RoLS0pLGd9LFYoZ2Us''@;'; put 'put ''aWUpLFYoX2UsaWUpLFYoVGUsaWUpLFRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtmb3IodmFyIHk9MCx4PTA7eDxnLmxlbmd0aDt4Kyspe3ZhciBDPTE5KigwfGcud29yZHNbeF0pK3ksVD02NzEwODg2MyZDO0M+Pj49MjYsZy53b3Jkc1t4XT1ULHk9Q31yZXR1cm4gMCE9PXkmJihn''@;'; put 'put ''LndvcmRzW2cubGVuZ3RoKytdPXkpLGd9LHcuX3ByaW1lPWZ1bmN0aW9uKGcpe2lmKHJlW2ddKXJldHVybiByZVtnXTt2YXIgeTtpZigiazI1NiI9PT1nKXk9bmV3IHVlO2Vsc2UgaWYoInAyMjQiPT09Zyl5PW5ldyBnZTtlbHNlIGlmKCJwMTkyIj09PWcpeT1uZXcgX2U7ZWxzZXtpZigicDI1''@;'; put 'put ''NTE5IiE9PWcpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrZyk7eT1uZXcgVGV9cmV0dXJuIHJlW2ddPXkseX0sTWUucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscChnLnJlZCwi''@;'; put 'put ''cmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxNZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oZyx5KXtwKCEoZy5uZWdhdGl2ZXx5Lm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwKGcucmVkJiZnLnJlZD09PXkucmVkLCJyZWQgd29ya3Mg''@;'; put 'put ''b25seSB3aXRoIHJlZCBudW1iZXJzIil9LE1lLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShnKS5fZm9yY2VSZWQodGhpcyk6Zy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxNZS5wcm90b3R5cGUubmVnPWZ1bmN0''@;'; put 'put ''aW9uKGcpe3JldHVybiBnLmlzWmVybygpP2cuY2xvbmUoKTp0aGlzLm0uc3ViKGcpLl9mb3JjZVJlZCh0aGlzKX0sTWUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmFkZCh5KTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRo''@;'; put 'put ''aXMubSkseC5fZm9yY2VSZWQodGhpcyl9LE1lLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuaWFkZCh5KTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseH0sTWUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnLHkp''@;'; put 'put ''e3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLnN1Yih5KTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxNZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmlzdWIoeSk7cmV0dXJuIHgu''@;'; put 'put ''Y21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4fSxNZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoZyksdGhpcy5pbW9kKGcudXNobG4oeSkpfSxNZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcseSks''@;'; put 'put ''dGhpcy5pbW9kKGcuaW11bCh5KSl9LE1lLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLHkpLHRoaXMuaW1vZChnLm11bCh5KSl9LE1lLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltdWwoZyxnLmNsb25lKCkpfSxNZS5w''@;'; put 'put ''cm90b3R5cGUuc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm11bChnLGcpfSxNZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihnKXtpZihnLmlzWmVybygpKXJldHVybiBnLmNsb25lKCk7dmFyIHk9dGhpcy5tLmFuZGxuKDMpO2lmKHAoeSUyPT0xKSwzPT09eSl7dmFyIHg9dGhpcy5tLmFk''@;'; put 'put ''ZChuZXcgdygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhnLHgpfWZvcih2YXIgQz10aGlzLm0uc3VibigxKSxUPTA7IUMuaXNaZXJvKCkmJjA9PT1DLmFuZGxuKDEpOylUKyssQy5pdXNocm4oMSk7cCghQy5pc1plcm8oKSk7dmFyIEg9bmV3IHcoMSkudG9SZWQodGhpcyksaj1ILnJl''@;'; put 'put ''ZE5lZygpLEU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLG09dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihtPW5ldyB3KDIqbSptKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobSxFKS5jbXAoaik7KW0ucmVkSUFkZChqKTtmb3IodmFyIEE9dGhpcy5wb3cobSxDKSxhZT10aGlzLnBvdyhnLEMu''@;'; put 'put ''YWRkbigxKS5pdXNocm4oMSkpLG5lPXRoaXMucG93KGcsQyksc2U9VDswIT09bmUuY21wKEgpOyl7Zm9yKHZhciBDZT1uZSxVZT0wOzAhPT1DZS5jbXAoSCk7VWUrKylDZT1DZS5yZWRTcXIoKTtwKFVlPHNlKTt2YXIgSmU9dGhpcy5wb3coQSxuZXcgdygxKS5pdXNobG4oc2UtVWUtMSkpO2Fl''@;'; put 'put ''PWFlLnJlZE11bChKZSksQT1KZS5yZWRTcXIoKSxuZT1uZS5yZWRNdWwoQSksc2U9VWV9cmV0dXJuIGFlfSxNZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXt2YXIgeT1nLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09eS5uZWdhdGl2ZT8oeS5uZWdhdGl2ZT0wLHRoaXMuaW1vZCh5KS5y''@;'; put 'put ''ZWROZWcoKSk6dGhpcy5pbW9kKHkpfSxNZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcseSl7aWYoeS5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PXkuY21wbigxKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBDPW5ldyBBcnJheSgxNik7Q1swXT1uZXcgdygxKS50''@;'; put 'put ''b1JlZCh0aGlzKSxDWzFdPWc7Zm9yKHZhciBUPTI7VDxDLmxlbmd0aDtUKyspQ1tUXT10aGlzLm11bChDW1QtMV0sZyk7dmFyIEg9Q1swXSxqPTAsRT0wLG09eS5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW0mJihtPTI2KSxUPXkubGVuZ3RoLTE7VD49MDtULS0pe2Zvcih2YXIgQT15LndvcmRz''@;'; put 'put ''W1RdLGFlPW0tMTthZT49MDthZS0tKXt2YXIgbmU9QT4+YWUmMTtIIT09Q1swXSYmKEg9dGhpcy5zcXIoSCkpLDAhPT1uZXx8MCE9PWo/KGo8PD0xLGp8PW5lLCg0PT0rK0V8fDA9PT1UJiYwPT09YWUpJiYoSD10aGlzLm11bChILENbal0pLEU9MCxqPTApKTpFPTB9bT0yNn1yZXR1cm4gSH0s''@;'; put 'put ''TWUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXt2YXIgeT1nLnVtb2QodGhpcy5tKTtyZXR1cm4geT09PWc/eS5jbG9uZSgpOnl9LE1lLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgeT1nLmNsb25lKCk7cmV0dXJuIHkucmVkPW51bGwseX0sdy5tb250PWZ1''@;'; put 'put ''bmN0aW9uKGcpe3JldHVybiBuZXcgWmUoZyl9LFYoWmUsTWUpLFplLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLnVzaGxuKHRoaXMuc2hpZnQpKX0sWmUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciB5PXRoaXMuaW1vZChn''@;'; put 'put ''Lm11bCh0aGlzLnJpbnYpKTtyZXR1cm4geS5yZWQ9bnVsbCx5fSxaZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLHkpe2lmKGcuaXNaZXJvKCl8fHkuaXNaZXJvKCkpcmV0dXJuIGcud29yZHNbMF09MCxnLmxlbmd0aD0xLGc7dmFyIHg9Zy5pbXVsKHkpLEM9eC5tYXNrbih0aGlzLnNoaWZ0''@;'; put 'put ''KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VS''@;'; put 'put ''ZWQodGhpcyl9LFplLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyx5KXtpZihnLmlzWmVybygpfHx5LmlzWmVybygpKXJldHVybiBuZXcgdygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHg9Zy5tdWwoeSksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNo''@;'; put 'put ''aWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0sWmUucHJvdG90eXBlLmludm09ZnVu''@;'; put 'put ''Y3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oY2U9Yi5ubWQoY2UpLHRoaXMpfSwzNDgyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNTcxNyksXz1iKDIzMTgpLHA9Yig5Nzg1KSxWPWIoOTA3''@;'; put 'put ''Miksdz1iKDEwMjcpO2Z1bmN0aW9uIFAoRil7dy5jYWxsKHRoaXMsImRpZ2VzdCIpLHRoaXMuX2hhc2g9Rn1JKFAsdyksUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihGKXt0aGlzLl9oYXNoLnVwZGF0ZShGKX0sUC5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''X2hhc2guZGlnZXN0KCl9LGNlLmV4cG9ydHM9ZnVuY3Rpb24oUil7cmV0dXJuIm1kNSI9PT0oUj1SLnRvTG93ZXJDYXNlKCkpP25ldyBfOiJybWQxNjAiPT09Unx8InJpcGVtZDE2MCI9PT1SP25ldyBwOm5ldyBQKFYoUikpfX0sODAyODooY2UsWCxiKT0+e3ZhciBJPWIoMjMxOCk7Y2UuZXhw''@;'; put 'put ''b3J0cz1mdW5jdGlvbihfKXtyZXR1cm4obmV3IEkpLnVwZGF0ZShfKS5kaWdlc3QoKX19LDgzNTU6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig1NzE3KSxfPWIoMTAzMSkscD1iKDEwMjcpLFY9Yig5NTA5KS5CdWZmZXIsdz1iKDgwMjgpLFA9Yig5Nzg1KSxGPWIoOTA3MiksUj1W''@;'; put 'put ''LmFsbG9jKDEyOCk7ZnVuY3Rpb24geihOLE8pe3AuY2FsbCh0aGlzLCJkaWdlc3QiKSwic3RyaW5nIj09dHlwZW9mIE8mJihPPVYuZnJvbShPKSk7dmFyIEs9InNoYTUxMiI9PT1OfHwic2hhMzg0Ij09PU4/MTI4OjY0O3RoaXMuX2FsZz1OLHRoaXMuX2tleT1PLE8ubGVuZ3RoPks/Tz0oInJt''@;'; put 'put ''ZDE2MCI9PT1OP25ldyBQOkYoTikpLnVwZGF0ZShPKS5kaWdlc3QoKTpPLmxlbmd0aDxLJiYoTz1WLmNvbmNhdChbTyxSXSxLKSk7Zm9yKHZhciBZPXRoaXMuX2lwYWQ9Vi5hbGxvY1Vuc2FmZShLKSxXPXRoaXMuX29wYWQ9Vi5hbGxvY1Vuc2FmZShLKSxxPTA7cTxLO3ErKylZW3FdPTU0Xk9b''@;'; put 'put ''cV0sV1txXT05Ml5PW3FdO3RoaXMuX2hhc2g9InJtZDE2MCI9PT1OP25ldyBQOkYoTiksdGhpcy5faGFzaC51cGRhdGUoWSl9SSh6LHApLHoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oTil7dGhpcy5faGFzaC51cGRhdGUoTil9LHoucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3Zh''@;'; put 'put ''ciBOPXRoaXMuX2hhc2guZGlnZXN0KCk7cmV0dXJuKCJybWQxNjAiPT09dGhpcy5fYWxnP25ldyBQOkYodGhpcy5fYWxnKSkudXBkYXRlKHRoaXMuX29wYWQpLnVwZGF0ZShOKS5kaWdlc3QoKX0sY2UuZXhwb3J0cz1mdW5jdGlvbihPLEspe3JldHVybiJybWQxNjAiPT09KE89Ty50b0xvd2Vy''@;'; put 'put ''Q2FzZSgpKXx8InJpcGVtZDE2MCI9PT1PP25ldyB6KCJybWQxNjAiLEspOiJtZDUiPT09Tz9uZXcgXyh3LEspOm5ldyB6KE8sSyl9fSwxMDMxOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNTcxNyksXz1iKDk1MDkpLkJ1ZmZlcixwPWIoMTAyNyksVj1fLmFsbG9jKDEyOCksdz02''@;'; put 'put ''NDtmdW5jdGlvbiBQKEYsUil7cC5jYWxsKHRoaXMsImRpZ2VzdCIpLCJzdHJpbmciPT10eXBlb2YgUiYmKFI9Xy5mcm9tKFIpKSx0aGlzLl9hbGc9Rix0aGlzLl9rZXk9UixSLmxlbmd0aD53P1I9RihSKTpSLmxlbmd0aDx3JiYoUj1fLmNvbmNhdChbUixWXSx3KSk7Zm9yKHZhciB6PXRoaXMu''@;'; put 'put ''X2lwYWQ9Xy5hbGxvY1Vuc2FmZSh3KSxOPXRoaXMuX29wYWQ9Xy5hbGxvY1Vuc2FmZSh3KSxPPTA7Tzx3O08rKyl6W09dPTU0XlJbT10sTltPXT05Ml5SW09dO3RoaXMuX2hhc2g9W3pdfUkoUCxwKSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEYpe3RoaXMuX2hhc2gucHVzaChGKX0s''@;'; put 'put ''UC5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIEY9dGhpcy5fYWxnKF8uY29uY2F0KHRoaXMuX2hhc2gpKTtyZXR1cm4gdGhpcy5fYWxnKF8uY29uY2F0KFt0aGlzLl9vcGFkLEZdKSl9LGNlLmV4cG9ydHM9UH0sNTgzNTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0IjtYLnJhbmRvbUJ5''@;'; put 'put ''dGVzPVgucm5nPVgucHNldWRvUmFuZG9tQnl0ZXM9WC5wcm5nPWIoMTc5OCksWC5jcmVhdGVIYXNoPVguSGFzaD1iKDM0ODIpLFguY3JlYXRlSG1hYz1YLkhtYWM9Yig4MzU1KTt2YXIgST1iKDYwNDIpLF89T2JqZWN0LmtleXMoSSkscD1bInNoYTEiLCJzaGEyMjQiLCJzaGEyNTYiLCJzaGEz''@;'; put 'put ''ODQiLCJzaGE1MTIiLCJtZDUiLCJybWQxNjAiXS5jb25jYXQoXyk7WC5nZXRIYXNoZXM9ZnVuY3Rpb24oKXtyZXR1cm4gcH07dmFyIFY9Yig1NjMyKTtYLnBia2RmMj1WLnBia2RmMixYLnBia2RmMlN5bmM9Vi5wYmtkZjJTeW5jO3ZhciB3PWIoMzYxNCk7WC5DaXBoZXI9dy5DaXBoZXIsWC5j''@;'; put 'put ''cmVhdGVDaXBoZXI9dy5jcmVhdGVDaXBoZXIsWC5DaXBoZXJpdj13LkNpcGhlcml2LFguY3JlYXRlQ2lwaGVyaXY9dy5jcmVhdGVDaXBoZXJpdixYLkRlY2lwaGVyPXcuRGVjaXBoZXIsWC5jcmVhdGVEZWNpcGhlcj13LmNyZWF0ZURlY2lwaGVyLFguRGVjaXBoZXJpdj13LkRlY2lwaGVyaXYs''@;'; put 'put ''WC5jcmVhdGVEZWNpcGhlcml2PXcuY3JlYXRlRGVjaXBoZXJpdixYLmdldENpcGhlcnM9dy5nZXRDaXBoZXJzLFgubGlzdENpcGhlcnM9dy5saXN0Q2lwaGVyczt2YXIgUD1iKDI2MDcpO1guRGlmZmllSGVsbG1hbkdyb3VwPVAuRGlmZmllSGVsbG1hbkdyb3VwLFguY3JlYXRlRGlmZmllSGVs''@;'; put 'put ''bG1hbkdyb3VwPVAuY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwLFguZ2V0RGlmZmllSGVsbG1hbj1QLmdldERpZmZpZUhlbGxtYW4sWC5jcmVhdGVEaWZmaWVIZWxsbWFuPVAuY3JlYXRlRGlmZmllSGVsbG1hbixYLkRpZmZpZUhlbGxtYW49UC5EaWZmaWVIZWxsbWFuO3ZhciBGPWIoNDc0Myk7''@;'; put 'put ''WC5jcmVhdGVTaWduPUYuY3JlYXRlU2lnbixYLlNpZ249Ri5TaWduLFguY3JlYXRlVmVyaWZ5PUYuY3JlYXRlVmVyaWZ5LFguVmVyaWZ5PUYuVmVyaWZ5LFguY3JlYXRlRUNESD1iKDYzOTMpO3ZhciBSPWIoNzkwMCk7WC5wdWJsaWNFbmNyeXB0PVIucHVibGljRW5jcnlwdCxYLnByaXZhdGVF''@;'; put 'put ''bmNyeXB0PVIucHJpdmF0ZUVuY3J5cHQsWC5wdWJsaWNEZWNyeXB0PVIucHVibGljRGVjcnlwdCxYLnByaXZhdGVEZWNyeXB0PVIucHJpdmF0ZURlY3J5cHQ7dmFyIHo9Yig3OTYzKTtYLnJhbmRvbUZpbGw9ei5yYW5kb21GaWxsLFgucmFuZG9tRmlsbFN5bmM9ei5yYW5kb21GaWxsU3luYyxY''@;'; put 'put ''LmNyZWF0ZUNyZWRlbnRpYWxzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJzb3JyeSwgY3JlYXRlQ3JlZGVudGlhbHMgaXMgbm90IGltcGxlbWVudGVkIHlldFxud2UgYWNjZXB0IHB1bGwgcmVxdWVzdHNcbmh0dHBzOi8vZ2l0aHViLmNvbS9icm93c2VyaWZ5L2NyeXB0by1icm93c2Vy''@;'; put 'put ''aWZ5Iil9LFguY29uc3RhbnRzPXtESF9DSEVDS19QX05PVF9TQUZFX1BSSU1FOjIsREhfQ0hFQ0tfUF9OT1RfUFJJTUU6MSxESF9VTkFCTEVfVE9fQ0hFQ0tfR0VORVJBVE9SOjQsREhfTk9UX1NVSVRBQkxFX0dFTkVSQVRPUjo4LE5QTl9FTkFCTEVEOjEsQUxQTl9FTkFCTEVEOjEsUlNBX1BL''@;'; put 'put ''Q1MxX1BBRERJTkc6MSxSU0FfU1NMVjIzX1BBRERJTkc6MixSU0FfTk9fUEFERElORzozLFJTQV9QS0NTMV9PQUVQX1BBRERJTkc6NCxSU0FfWDkzMV9QQURESU5HOjUsUlNBX1BLQ1MxX1BTU19QQURESU5HOjYsUE9JTlRfQ09OVkVSU0lPTl9DT01QUkVTU0VEOjIsUE9JTlRfQ09OVkVSU0lP''@;'; put 'put ''Tl9VTkNPTVBSRVNTRUQ6NCxQT0lOVF9DT05WRVJTSU9OX0hZQlJJRDo2fX0sMjI5NjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQ0MjkpLF89YigzNDY0KSxwPWIoNDQ1MyksVj1iKDcyOTYpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oUCxGLFIpe2lmKCFQfHwib2JqZWN0IiE9dHlw''@;'; put 'put ''ZW9mIFAmJiJmdW5jdGlvbiIhPXR5cGVvZiBQKXRocm93IG5ldyBwKCJgb2JqYCBtdXN0IGJlIGFuIG9iamVjdCBvciBhIGZ1bmN0aW9uYCIpO2lmKCJzdHJpbmciIT10eXBlb2YgRiYmInN5bWJvbCIhPXR5cGVvZiBGKXRocm93IG5ldyBwKCJgcHJvcGVydHlgIG11c3QgYmUgYSBzdHJpbmcg''@;'; put 'put ''b3IgYSBzeW1ib2xgIik7aWYoYXJndW1lbnRzLmxlbmd0aD4zJiYiYm9vbGVhbiIhPXR5cGVvZiBhcmd1bWVudHNbM10mJm51bGwhPT1hcmd1bWVudHNbM10pdGhyb3cgbmV3IHAoImBub25FbnVtZXJhYmxlYCwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYSBib29sZWFuIG9yIG51bGwiKTtpZihh''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoPjQmJiJib29sZWFuIiE9dHlwZW9mIGFyZ3VtZW50c1s0XSYmbnVsbCE9PWFyZ3VtZW50c1s0XSl0aHJvdyBuZXcgcCgiYG5vbldyaXRhYmxlYCwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYSBib29sZWFuIG9yIG51bGwiKTtpZihhcmd1bWVudHMubGVuZ3RoPjUmJiJi''@;'; put 'put ''b29sZWFuIiE9dHlwZW9mIGFyZ3VtZW50c1s1XSYmbnVsbCE9PWFyZ3VtZW50c1s1XSl0aHJvdyBuZXcgcCgiYG5vbkNvbmZpZ3VyYWJsZWAsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgYm9vbGVhbiBvciBudWxsIik7aWYoYXJndW1lbnRzLmxlbmd0aD42JiYiYm9vbGVhbiIhPXR5cGVvZiBh''@;'; put 'put ''cmd1bWVudHNbNl0pdGhyb3cgbmV3IHAoImBsb29zZWAsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgYm9vbGVhbiIpO3ZhciB6PWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106bnVsbCxOPWFyZ3VtZW50cy5sZW5ndGg+ND9hcmd1bWVudHNbNF06bnVsbCxPPWFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGg+NT9hcmd1bWVudHNbNV06bnVsbCxLPWFyZ3VtZW50cy5sZW5ndGg+NiYmYXJndW1lbnRzWzZdLFo9ISFWJiZWKFAsRik7aWYoSSlJKFAsRix7Y29uZmlndXJhYmxlOm51bGw9PT1PJiZaP1ouY29uZmlndXJhYmxlOiFPLGVudW1lcmFibGU6bnVsbD09PXomJlo/Wi5lbnVtZXJhYmxlOiF6''@;'; put 'put ''LHZhbHVlOlIsd3JpdGFibGU6bnVsbD09PU4mJlo/Wi53cml0YWJsZTohTn0pO2Vsc2V7aWYoIUsmJih6fHxOfHxPKSl0aHJvdyBuZXcgXygiVGhpcyBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IGRlZmluaW5nIGEgcHJvcGVydHkgYXMgbm9uLWNvbmZpZ3VyYWJsZSwgbm9uLXdyaXRh''@;'; put 'put ''YmxlLCBvciBub24tZW51bWVyYWJsZS4iKTtQW0ZdPVJ9fX0sNDI4OTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDIyMTUpLF89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2woImZvbyIpLHA9T2JqZWN0LnByb3RvdHlwZS50b1N0cmlu''@;'; put 'put ''ZyxWPUFycmF5LnByb3RvdHlwZS5jb25jYXQsdz1iKDIyOTYpLEY9YigxMDQ0KSgpLFI9ZnVuY3Rpb24oTixPLEssWil7aWYoTyBpbiBOKWlmKCEwPT09Wil7aWYoTltPXT09PUspcmV0dXJufWVsc2UgaWYoIWZ1bmN0aW9uKE4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBOJiYiW29iamVj''@;'; put 'put ''dCBGdW5jdGlvbl0iPT09cC5jYWxsKE4pfShaKXx8IVooKSlyZXR1cm47Rj93KE4sTyxLLCEwKTp3KE4sTyxLKX0sej1mdW5jdGlvbihOLE8pe3ZhciBLPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06e30sWj1JKE8pO18mJihaPVYuY2FsbChaLE9iamVjdC5nZXRPd25Qcm9wZXJ0''@;'; put 'put ''eVN5bWJvbHMoTykpKTtmb3IodmFyIFk9MDtZPFoubGVuZ3RoO1krPTEpUihOLFpbWV0sT1taW1ldXSxLW1pbWV1dKX07ei5zdXBwb3J0c0Rlc2NyaXB0b3JzPSEhRixjZS5leHBvcnRzPXp9LDUyNTE6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7WC51dGlscz1iKDEyNzgpLFguQ2lwaGVyPWIo''@;'; put 'put ''NTc1NiksWC5ERVM9Yig3NzgpLFguQ0JDPWIoOTA1MSksWC5FREU9Yig2NTEpfSw5MDUxOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoOTc0NiksXz1iKDU3MTcpLHA9e307ZnVuY3Rpb24gVihQKXtJLmVxdWFsKFAubGVuZ3RoLDgsIkludmFsaWQgSVYgbGVuZ3RoIiksdGhpcy5p''@;'; put 'put ''dj1uZXcgQXJyYXkoOCk7Zm9yKHZhciBGPTA7Rjx0aGlzLml2Lmxlbmd0aDtGKyspdGhpcy5pdltGXT1QW0ZdfVguaW5zdGFudGlhdGU9ZnVuY3Rpb24gdyhQKXtmdW5jdGlvbiBGKE8pe1AuY2FsbCh0aGlzLE8pLHRoaXMuX2NiY0luaXQoKX1fKEYsUCk7Zm9yKHZhciBSPU9iamVjdC5rZXlz''@;'; put 'put ''KHApLHo9MDt6PFIubGVuZ3RoO3orKyl7dmFyIE49Ult6XTtGLnByb3RvdHlwZVtOXT1wW05dfXJldHVybiBGLmNyZWF0ZT1mdW5jdGlvbihLKXtyZXR1cm4gbmV3IEYoSyl9LEZ9LHAuX2NiY0luaXQ9ZnVuY3Rpb24oKXt2YXIgRj1uZXcgVih0aGlzLm9wdGlvbnMuaXYpO3RoaXMuX2NiY1N0''@;'; put 'put ''YXRlPUZ9LHAuX3VwZGF0ZT1mdW5jdGlvbihGLFIseixOKXt2YXIgSz10aGlzLmNvbnN0cnVjdG9yLnN1cGVyXy5wcm90b3R5cGUsWj10aGlzLl9jYmNTdGF0ZS5pdjtpZigiZW5jcnlwdCI9PT10aGlzLnR5cGUpe2Zvcih2YXIgWT0wO1k8dGhpcy5ibG9ja1NpemU7WSsrKVpbWV1ePUZbUitZ''@;'; put 'put ''XTtmb3IoSy5fdXBkYXRlLmNhbGwodGhpcyxaLDAseixOKSxZPTA7WTx0aGlzLmJsb2NrU2l6ZTtZKyspWltZXT16W04rWV19ZWxzZXtmb3IoSy5fdXBkYXRlLmNhbGwodGhpcyxGLFIseixOKSxZPTA7WTx0aGlzLmJsb2NrU2l6ZTtZKyspeltOK1ldXj1aW1ldO2ZvcihZPTA7WTx0aGlzLmJs''@;'; put 'put ''b2NrU2l6ZTtZKyspWltZXT1GW1IrWV19fX0sNTc1NjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDk3NDYpO2Z1bmN0aW9uIF8ocCl7dGhpcy5vcHRpb25zPXAsdGhpcy50eXBlPXRoaXMub3B0aW9ucy50eXBlLHRoaXMuYmxvY2tTaXplPTgsdGhpcy5faW5pdCgpLHRoaXMuYnVm''@;'; put 'put ''ZmVyPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSksdGhpcy5idWZmZXJPZmY9MCx0aGlzLnBhZGRpbmc9ITEhPT1wLnBhZGRpbmd9Y2UuZXhwb3J0cz1fLF8ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKCl7fSxfLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oVil7cmV0dXJuIDA9PT1WLmxl''@;'; put 'put ''bmd0aD9bXToiZGVjcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fdXBkYXRlRGVjcnlwdChWKTp0aGlzLl91cGRhdGVFbmNyeXB0KFYpfSxfLnByb3RvdHlwZS5fYnVmZmVyPWZ1bmN0aW9uKFYsdyl7Zm9yKHZhciBQPU1hdGgubWluKHRoaXMuYnVmZmVyLmxlbmd0aC10aGlzLmJ1ZmZlck9mZixW''@;'; put 'put ''Lmxlbmd0aC13KSxGPTA7RjxQO0YrKyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZitGXT1WW3crRl07cmV0dXJuIHRoaXMuYnVmZmVyT2ZmKz1QLFB9LF8ucHJvdG90eXBlLl9mbHVzaEJ1ZmZlcj1mdW5jdGlvbihWLHcpe3JldHVybiB0aGlzLl91cGRhdGUodGhpcy5idWZmZXIsMCxWLHcp''@;'; put 'put ''LHRoaXMuYnVmZmVyT2ZmPTAsdGhpcy5ibG9ja1NpemV9LF8ucHJvdG90eXBlLl91cGRhdGVFbmNyeXB0PWZ1bmN0aW9uKFYpe3ZhciB3PTAsUD0wLFI9bmV3IEFycmF5KCgodGhpcy5idWZmZXJPZmYrVi5sZW5ndGgpL3RoaXMuYmxvY2tTaXplfDApKnRoaXMuYmxvY2tTaXplKTswIT09dGhp''@;'; put 'put ''cy5idWZmZXJPZmYmJih3Kz10aGlzLl9idWZmZXIoVix3KSx0aGlzLmJ1ZmZlck9mZj09PXRoaXMuYnVmZmVyLmxlbmd0aCYmKFArPXRoaXMuX2ZsdXNoQnVmZmVyKFIsUCkpKTtmb3IodmFyIHo9Vi5sZW5ndGgtKFYubGVuZ3RoLXcpJXRoaXMuYmxvY2tTaXplO3c8ejt3Kz10aGlzLmJsb2Nr''@;'; put 'put ''U2l6ZSl0aGlzLl91cGRhdGUoVix3LFIsUCksUCs9dGhpcy5ibG9ja1NpemU7Zm9yKDt3PFYubGVuZ3RoO3crKyx0aGlzLmJ1ZmZlck9mZisrKXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyT2ZmXT1WW3ddO3JldHVybiBSfSxfLnByb3RvdHlwZS5fdXBkYXRlRGVjcnlwdD1mdW5jdGlvbihWKXtm''@;'; put 'put ''b3IodmFyIHc9MCxQPTAsRj1NYXRoLmNlaWwoKHRoaXMuYnVmZmVyT2ZmK1YubGVuZ3RoKS90aGlzLmJsb2NrU2l6ZSktMSxSPW5ldyBBcnJheShGKnRoaXMuYmxvY2tTaXplKTtGPjA7Ri0tKXcrPXRoaXMuX2J1ZmZlcihWLHcpLFArPXRoaXMuX2ZsdXNoQnVmZmVyKFIsUCk7cmV0dXJuIHcr''@;'; put 'put ''PXRoaXMuX2J1ZmZlcihWLHcpLFJ9LF8ucHJvdG90eXBlLmZpbmFsPWZ1bmN0aW9uKFYpe3ZhciB3LFA7cmV0dXJuIFYmJih3PXRoaXMudXBkYXRlKFYpKSxQPSJlbmNyeXB0Ij09PXRoaXMudHlwZT90aGlzLl9maW5hbEVuY3J5cHQoKTp0aGlzLl9maW5hbERlY3J5cHQoKSx3P3cuY29uY2F0''@;'; put 'put ''KFApOlB9LF8ucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24oVix3KXtpZigwPT09dylyZXR1cm4hMTtmb3IoO3c8Vi5sZW5ndGg7KVZbdysrXT0wO3JldHVybiEwfSxfLnByb3RvdHlwZS5fZmluYWxFbmNyeXB0PWZ1bmN0aW9uKCl7aWYoIXRoaXMuX3BhZCh0aGlzLmJ1ZmZlcix0aGlzLmJ1ZmZl''@;'; put 'put ''ck9mZikpcmV0dXJuW107dmFyIFY9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKTtyZXR1cm4gdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLDAsViwwKSxWfSxfLnByb3RvdHlwZS5fdW5wYWQ9ZnVuY3Rpb24oVil7cmV0dXJuIFZ9LF8ucHJvdG90eXBlLl9maW5hbERlY3J5cHQ9ZnVuY3Rpb24o''@;'; put 'put ''KXtJLmVxdWFsKHRoaXMuYnVmZmVyT2ZmLHRoaXMuYmxvY2tTaXplLCJOb3QgZW5vdWdoIGRhdGEgdG8gZGVjcnlwdCIpO3ZhciBWPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSk7cmV0dXJuIHRoaXMuX2ZsdXNoQnVmZmVyKFYsMCksdGhpcy5fdW5wYWQoVil9fSw3Nzg6KGNlLFgsYik9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIEk9Yig5NzQ2KSxfPWIoNTcxNykscD1iKDEyNzgpLFY9Yig1NzU2KTtmdW5jdGlvbiB3KCl7dGhpcy50bXA9bmV3IEFycmF5KDIpLHRoaXMua2V5cz1udWxsfWZ1bmN0aW9uIFAoUil7Vi5jYWxsKHRoaXMsUik7dmFyIHo9bmV3IHc7dGhpcy5fZGVzU3RhdGU9eix0''@;'; put 'put ''aGlzLmRlcml2ZUtleXMoeixSLmtleSl9XyhQLFYpLGNlLmV4cG9ydHM9UCxQLmNyZWF0ZT1mdW5jdGlvbih6KXtyZXR1cm4gbmV3IFAoeil9O3ZhciBGPVsxLDEsMiwyLDIsMiwyLDIsMSwyLDIsMiwyLDIsMiwxXTtQLnByb3RvdHlwZS5kZXJpdmVLZXlzPWZ1bmN0aW9uKHosTil7ei5rZXlz''@;'; put 'put ''PW5ldyBBcnJheSgzMiksSS5lcXVhbChOLmxlbmd0aCx0aGlzLmJsb2NrU2l6ZSwiSW52YWxpZCBrZXkgbGVuZ3RoIik7dmFyIE89cC5yZWFkVUludDMyQkUoTiwwKSxLPXAucmVhZFVJbnQzMkJFKE4sNCk7cC5wYzEoTyxLLHoudG1wLDApLE89ei50bXBbMF0sSz16LnRtcFsxXTtmb3IodmFy''@;'; put 'put ''IFo9MDtaPHoua2V5cy5sZW5ndGg7Wis9Mil7dmFyIFk9RltaPj4+MV07Tz1wLnIyOHNobChPLFkpLEs9cC5yMjhzaGwoSyxZKSxwLnBjMihPLEssei5rZXlzLFopfX0sUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih6LE4sTyxLKXt2YXIgWj10aGlzLl9kZXNTdGF0ZSxZPXAucmVhZFVJ''@;'; put 'put ''bnQzMkJFKHosTiksVz1wLnJlYWRVSW50MzJCRSh6LE4rNCk7cC5pcChZLFcsWi50bXAsMCksWT1aLnRtcFswXSxXPVoudG1wWzFdLCJlbmNyeXB0Ij09PXRoaXMudHlwZT90aGlzLl9lbmNyeXB0KFosWSxXLFoudG1wLDApOnRoaXMuX2RlY3J5cHQoWixZLFcsWi50bXAsMCksVz1aLnRtcFsx''@;'; put 'put ''XSxwLndyaXRlVUludDMyQkUoTyxZPVoudG1wWzBdLEspLHAud3JpdGVVSW50MzJCRShPLFcsSys0KX0sUC5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbih6LE4pe2lmKCExPT09dGhpcy5wYWRkaW5nKXJldHVybiExO2Zvcih2YXIgTz16Lmxlbmd0aC1OLEs9TjtLPHoubGVuZ3RoO0srKyl6W0td''@;'; put 'put ''PU87cmV0dXJuITB9LFAucHJvdG90eXBlLl91bnBhZD1mdW5jdGlvbih6KXtpZighMT09PXRoaXMucGFkZGluZylyZXR1cm4gejtmb3IodmFyIE49elt6Lmxlbmd0aC0xXSxPPXoubGVuZ3RoLU47Tzx6Lmxlbmd0aDtPKyspSS5lcXVhbCh6W09dLE4pO3JldHVybiB6LnNsaWNlKDAsei5sZW5n''@;'; put 'put ''dGgtTil9LFAucHJvdG90eXBlLl9lbmNyeXB0PWZ1bmN0aW9uKHosTixPLEssWil7Zm9yKHZhciBZPU4sVz1PLHE9MDtxPHoua2V5cy5sZW5ndGg7cSs9Mil7dmFyIGVlPXoua2V5c1txXSxKPXoua2V5c1txKzFdO3AuZXhwYW5kKFcsei50bXAsMCk7dmFyIHJlPXAuc3Vic3RpdHV0ZShlZV49''@;'; put 'put ''ei50bXBbMF0sSl49ei50bXBbMV0pLHVlPVc7Vz0oWV5wLnBlcm11dGUocmUpKT4+PjAsWT11ZX1wLnJpcChXLFksSyxaKX0sUC5wcm90b3R5cGUuX2RlY3J5cHQ9ZnVuY3Rpb24oeixOLE8sSyxaKXtmb3IodmFyIFk9TyxXPU4scT16LmtleXMubGVuZ3RoLTI7cT49MDtxLT0yKXt2YXIgZWU9''@;'; put 'put ''ei5rZXlzW3FdLEo9ei5rZXlzW3ErMV07cC5leHBhbmQoWSx6LnRtcCwwKTt2YXIgcmU9cC5zdWJzdGl0dXRlKGVlXj16LnRtcFswXSxKXj16LnRtcFsxXSksdWU9WTtZPShXXnAucGVybXV0ZShyZSkpPj4+MCxXPXVlfXAucmlwKFksVyxLLFopfX0sNjUxOihjZSxYLGIpPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBJPWIoOTc0NiksXz1iKDU3MTcpLHA9Yig1NzU2KSxWPWIoNzc4KTtmdW5jdGlvbiB3KEYsUil7SS5lcXVhbChSLmxlbmd0aCwyNCwiSW52YWxpZCBrZXkgbGVuZ3RoIik7dmFyIHo9Ui5zbGljZSgwLDgpLE49Ui5zbGljZSg4LDE2KSxPPVIuc2xpY2UoMTYsMjQpO3RoaXMuY2lw''@;'; put 'put ''aGVycz0iZW5jcnlwdCI9PT1GP1tWLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Onp9KSxWLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5Ok59KSxWLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Ok99KV06W1YuY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6T30pLFYuY3JlYXRlKHt0''@;'; put 'put ''eXBlOiJlbmNyeXB0IixrZXk6Tn0pLFYuY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6en0pXX1mdW5jdGlvbiBQKEYpe3AuY2FsbCh0aGlzLEYpO3ZhciBSPW5ldyB3KHRoaXMudHlwZSx0aGlzLm9wdGlvbnMua2V5KTt0aGlzLl9lZGVTdGF0ZT1SfV8oUCxwKSxjZS5leHBvcnRzPVAsUC5j''@;'; put 'put ''cmVhdGU9ZnVuY3Rpb24oUil7cmV0dXJuIG5ldyBQKFIpfSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFIseixOLE8pe3ZhciBLPXRoaXMuX2VkZVN0YXRlO0suY2lwaGVyc1swXS5fdXBkYXRlKFIseixOLE8pLEsuY2lwaGVyc1sxXS5fdXBkYXRlKE4sTyxOLE8pLEsuY2lwaGVyc1sy''@;'; put 'put ''XS5fdXBkYXRlKE4sTyxOLE8pfSxQLnByb3RvdHlwZS5fcGFkPVYucHJvdG90eXBlLl9wYWQsUC5wcm90b3R5cGUuX3VucGFkPVYucHJvdG90eXBlLl91bnBhZH0sMTI3ODooY2UsWCk9PnsidXNlIHN0cmljdCI7WC5yZWFkVUludDMyQkU9ZnVuY3Rpb24oVix3KXtyZXR1cm4oVlswK3ddPDwy''@;'; put 'put ''NHxWWzErd108PDE2fFZbMit3XTw8OHxWWzMrd10pPj4+MH0sWC53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKFYsdyxQKXtWWzArUF09dz4+PjI0LFZbMStQXT13Pj4+MTYmMjU1LFZbMitQXT13Pj4+OCYyNTUsVlszK1BdPTI1NSZ3fSxYLmlwPWZ1bmN0aW9uKFYsdyxQLEYpe2Zvcih2YXIgUj0w''@;'; put 'put ''LHo9MCxOPTY7Tj49MDtOLT0yKXtmb3IodmFyIE89MDtPPD0yNDtPKz04KVI8PD0xLFJ8PXc+Pj5PK04mMTtmb3IoTz0wO088PTI0O08rPTgpUjw8PTEsUnw9Vj4+Pk8rTiYxfWZvcihOPTY7Tj49MDtOLT0yKXtmb3IoTz0xO088PTI1O08rPTgpejw8PTEsenw9dz4+Pk8rTiYxO2ZvcihPPTE7''@;'; put 'put ''Tzw9MjU7Tys9OCl6PDw9MSx6fD1WPj4+TytOJjF9UFtGKzBdPVI+Pj4wLFBbRisxXT16Pj4+MH0sWC5yaXA9ZnVuY3Rpb24oVix3LFAsRil7Zm9yKHZhciBSPTAsej0wLE49MDtOPDQ7TisrKWZvcih2YXIgTz0yNDtPPj0wO08tPTgpUjw8PTEsUnw9dz4+Pk8rTiYxLFI8PD0xLFJ8PVY+Pj5P''@;'; put 'put ''K04mMTtmb3IoTj00O048ODtOKyspZm9yKE89MjQ7Tz49MDtPLT04KXo8PD0xLHp8PXc+Pj5PK04mMSx6PDw9MSx6fD1WPj4+TytOJjE7UFtGKzBdPVI+Pj4wLFBbRisxXT16Pj4+MH0sWC5wYzE9ZnVuY3Rpb24oVix3LFAsRil7Zm9yKHZhciBSPTAsej0wLE49NztOPj01O04tLSl7Zm9yKHZh''@;'; put 'put ''ciBPPTA7Tzw9MjQ7Tys9OClSPDw9MSxSfD13Pj5PK04mMTtmb3IoTz0wO088PTI0O08rPTgpUjw8PTEsUnw9Vj4+TytOJjF9Zm9yKE89MDtPPD0yNDtPKz04KVI8PD0xLFJ8PXc+Pk8rTiYxO2ZvcihOPTE7Tjw9MztOKyspe2ZvcihPPTA7Tzw9MjQ7Tys9OCl6PDw9MSx6fD13Pj5PK04mMTtm''@;'; put 'put ''b3IoTz0wO088PTI0O08rPTgpejw8PTEsenw9Vj4+TytOJjF9Zm9yKE89MDtPPD0yNDtPKz04KXo8PD0xLHp8PVY+Pk8rTiYxO1BbRiswXT1SPj4+MCxQW0YrMV09ej4+PjB9LFgucjI4c2hsPWZ1bmN0aW9uKFYsdyl7cmV0dXJuIFY8PHcmMjY4NDM1NDU1fFY+Pj4yOC13fTt2YXIgYj1bMTQs''@;'; put 'put ''MTEsMTcsNCwyNywyMywyNSwwLDEzLDIyLDcsMTgsNSw5LDE2LDI0LDIsMjAsMTIsMjEsMSw4LDE1LDI2LDE1LDQsMjUsMTksOSwxLDI2LDE2LDUsMTEsMjMsOCwxMiw3LDE3LDAsMjIsMywxMCwxNCw2LDIwLDI3LDI0XTtYLnBjMj1mdW5jdGlvbihWLHcsUCxGKXtmb3IodmFyIFI9MCx6PTAs''@;'; put 'put ''Tj1iLmxlbmd0aD4+PjEsTz0wO088TjtPKyspUjw8PTEsUnw9Vj4+PmJbT10mMTtmb3IoTz1OO088Yi5sZW5ndGg7TysrKXo8PD0xLHp8PXc+Pj5iW09dJjE7UFtGKzBdPVI+Pj4wLFBbRisxXT16Pj4+MH0sWC5leHBhbmQ9ZnVuY3Rpb24oVix3LFApe3ZhciBGPTAsUj0wO0Y9KDEmVik8PDV8''@;'; put 'put ''Vj4+PjI3O2Zvcih2YXIgej0yMzt6Pj0xNTt6LT00KUY8PD02LEZ8PVY+Pj56JjYzO2Zvcih6PTExO3o+PTM7ei09NClSfD1WPj4+eiY2MyxSPDw9NjtSfD0oMzEmVik8PDF8Vj4+PjMxLHdbUCswXT1GPj4+MCx3W1ArMV09Uj4+PjB9O3ZhciBJPVsxNCwwLDQsMTUsMTMsNywxLDQsMiwxNCwx''@;'; put 'put ''NSwyLDExLDEzLDgsMSwzLDEwLDEwLDYsNiwxMiwxMiwxMSw1LDksOSw1LDAsMyw3LDgsNCwxNSwxLDEyLDE0LDgsOCwyLDEzLDQsNiw5LDIsMSwxMSw3LDE1LDUsMTIsMTEsOSwzLDcsMTQsMywxMCwxMCwwLDUsNiwwLDEzLDE1LDMsMSwxMyw4LDQsMTQsNyw2LDE1LDExLDIsMyw4LDQsMTQs''@;'; put 'put ''OSwxMiw3LDAsMiwxLDEzLDEwLDEyLDYsMCw5LDUsMTEsMTAsNSwwLDEzLDE0LDgsNywxMCwxMSwxLDEwLDMsNCwxNSwxMyw0LDEsMiw1LDExLDgsNiwxMiw3LDYsMTIsOSwwLDMsNSwyLDE0LDE1LDksMTAsMTMsMCw3LDksMCwxNCw5LDYsMywzLDQsMTUsNiw1LDEwLDEsMiwxMyw4LDEyLDUs''@;'; put 'put ''NywxNCwxMSwxMiw0LDExLDIsMTUsOCwxLDEzLDEsNiwxMCw0LDEzLDksMCw4LDYsMTUsOSwzLDgsMCw3LDExLDQsMSwxNSwyLDE0LDEyLDMsNSwxMSwxMCw1LDE0LDIsNywxMiw3LDEzLDEzLDgsMTQsMTEsMyw1LDAsNiw2LDE1LDksMCwxMCwzLDEsNCwyLDcsOCwyLDUsMTIsMTEsMSwxMiwx''@;'; put 'put ''MCw0LDE0LDE1LDksMTAsMyw2LDE1LDksMCwwLDYsMTIsMTAsMTEsMSw3LDEzLDEzLDgsMTUsOSwxLDQsMyw1LDE0LDExLDUsMTIsMiw3LDgsMiw0LDE0LDIsMTQsMTIsMTEsNCwyLDEsMTIsNyw0LDEwLDcsMTEsMTMsNiwxLDgsNSw1LDAsMywxNSwxNSwxMCwxMywzLDAsOSwxNCw4LDksNiw0''@;'; put 'put ''LDExLDIsOCwxLDEyLDExLDcsMTAsMSwxMywxNCw3LDIsOCwxMywxNSw2LDksMTUsMTIsMCw1LDksNiwxMCwzLDQsMCw1LDE0LDMsMTIsMTAsMSwxNSwxMCw0LDE1LDIsOSw3LDIsMTIsNiw5LDgsNSwwLDYsMTMsMSwzLDEzLDQsMTQsMTQsMCw3LDExLDUsMywxMSw4LDksNCwxNCwzLDE1LDIs''@;'; put 'put ''NSwxMiwyLDksOCw1LDEyLDE1LDMsMTAsNywxMSwwLDE0LDQsMSwxMCw3LDEsNiwxMywwLDExLDgsNiwxMyw0LDEzLDExLDAsMiwxMSwxNCw3LDE1LDQsMCw5LDgsMSwxMywxMCwzLDE0LDEyLDMsOSw1LDcsMTIsNSwyLDEwLDE1LDYsOCwxLDYsMSw2LDQsMTEsMTEsMTMsMTMsOCwxMiwxLDMs''@;'; put 'put ''NCw3LDEwLDE0LDcsMTAsOSwxNSw1LDYsMCw4LDE1LDAsMTQsNSwyLDksMywyLDEyLDEzLDEsMiwxNSw4LDEzLDQsOCw2LDEwLDE1LDMsMTEsNywxLDQsMTAsMTIsOSw1LDMsNiwxNCwxMSw1LDAsMCwxNCwxMiw5LDcsMiw3LDIsMTEsMSw0LDE0LDEsNyw5LDQsMTIsMTAsMTQsOCwyLDEzLDAs''@;'; put 'put ''MTUsNiwxMiwxMCw5LDEzLDAsMTUsMywzLDUsNSw2LDgsMTFdO1guc3Vic3RpdHV0ZT1mdW5jdGlvbihWLHcpe2Zvcih2YXIgUD0wLEY9MDtGPDQ7RisrKVA8PD00LFB8PUlbNjQqRisoVj4+PjE4LTYqRiY2MyldO2ZvcihGPTA7Rjw0O0YrKylQPDw9NCxQfD1JWzI1Nis2NCpGKyh3Pj4+MTgt''@;'; put 'put ''NipGJjYzKV07cmV0dXJuIFA+Pj4wfTt2YXIgXz1bMTYsMjUsMTIsMTEsMywyMCw0LDE1LDMxLDE3LDksNiwyNywxNCwxLDIyLDMwLDI0LDgsMTgsMCw1LDI5LDIzLDEzLDE5LDIsMjYsMTAsMjEsMjgsN107WC5wZXJtdXRlPWZ1bmN0aW9uKFYpe2Zvcih2YXIgdz0wLFA9MDtQPF8ubGVuZ3Ro''@;'; put 'put ''O1ArKyl3PDw9MSx3fD1WPj4+X1tQXSYxO3JldHVybiB3Pj4+MH0sWC5wYWRTcGxpdD1mdW5jdGlvbihWLHcsUCl7Zm9yKHZhciBGPVYudG9TdHJpbmcoMik7Ri5sZW5ndGg8dzspRj0iMCIrRjtmb3IodmFyIFI9W10sej0wO3o8dzt6Kz1QKVIucHVzaChGLnNsaWNlKHoseitQKSk7cmV0dXJu''@;'; put 'put ''IFIuam9pbigiICIpfX0sMjYwNzooY2UsWCxiKT0+e3ZhciBJPWIoODc2NCkuQnVmZmVyLF89YigzNTkwKSxwPWIoOTc5OSksVj1iKDc0MjYpLFA9e2JpbmFyeTohMCxoZXg6ITAsYmFzZTY0OiEwfTtYLkRpZmZpZUhlbGxtYW5Hcm91cD1YLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cD1YLmdl''@;'; put 'put ''dERpZmZpZUhlbGxtYW49ZnVuY3Rpb24gdyhSKXt2YXIgej1uZXcgSShwW1JdLnByaW1lLCJoZXgiKSxOPW5ldyBJKHBbUl0uZ2VuLCJoZXgiKTtyZXR1cm4gbmV3IFYoeixOKX0sWC5jcmVhdGVEaWZmaWVIZWxsbWFuPVguRGlmZmllSGVsbG1hbj1mdW5jdGlvbiBGKFIseixOLE8pe3JldHVy''@;'; put 'put ''biBJLmlzQnVmZmVyKHopfHx2b2lkIDA9PT1QW3pdP0YoUiwiYmluYXJ5Iix6LE4pOih6PXp8fCJiaW5hcnkiLE89T3x8ImJpbmFyeSIsTj1OfHxuZXcgSShbMl0pLEkuaXNCdWZmZXIoTil8fChOPW5ldyBJKE4sTykpLCJudW1iZXIiPT10eXBlb2YgUj9uZXcgVihfKFIsTiksTiwhMCk6KEku''@;'; put 'put ''aXNCdWZmZXIoUil8fChSPW5ldyBJKFIseikpLG5ldyBWKFIsTiwhMCkpKX19LDc0MjY6KGNlLFgsYik9Pnt2YXIgST1iKDg3NjQpLkJ1ZmZlcixfPWIoMzYyMCksVj1uZXcoYigzMDQ3KSksdz1uZXcgXygyNCksUD1uZXcgXygxMSksRj1uZXcgXygxMCksUj1uZXcgXygzKSx6PW5ldyBfKDcp''@;'; put 'put ''LE49YigzNTkwKSxPPWIoMTc5OCk7ZnVuY3Rpb24gSyhKLHJlKXtyZXR1cm4gcmU9cmV8fCJ1dGY4IixJLmlzQnVmZmVyKEopfHwoSj1uZXcgSShKLHJlKSksdGhpcy5fcHViPW5ldyBfKEopLHRoaXN9ZnVuY3Rpb24gWihKLHJlKXtyZXR1cm4gcmU9cmV8fCJ1dGY4IixJLmlzQnVmZmVyKEop''@;'; put 'put ''fHwoSj1uZXcgSShKLHJlKSksdGhpcy5fcHJpdj1uZXcgXyhKKSx0aGlzfWNlLmV4cG9ydHM9cTt2YXIgWT17fTtmdW5jdGlvbiBxKEoscmUsaWUpe3RoaXMuc2V0R2VuZXJhdG9yKHJlKSx0aGlzLl9fcHJpbWU9bmV3IF8oSiksdGhpcy5fcHJpbWU9Xy5tb250KHRoaXMuX19wcmltZSksdGhp''@;'; put 'put ''cy5fcHJpbWVMZW49Si5sZW5ndGgsdGhpcy5fcHViPXZvaWQgMCx0aGlzLl9wcml2PXZvaWQgMCx0aGlzLl9wcmltZUNvZGU9dm9pZCAwLGllPyh0aGlzLnNldFB1YmxpY0tleT1LLHRoaXMuc2V0UHJpdmF0ZUtleT1aKTp0aGlzLl9wcmltZUNvZGU9OH1mdW5jdGlvbiBlZShKLHJlKXt2YXIg''@;'; put 'put ''aWU9bmV3IEkoSi50b0FycmF5KCkpO3JldHVybiByZT9pZS50b1N0cmluZyhyZSk6aWV9T2JqZWN0LmRlZmluZVByb3BlcnR5KHEucHJvdG90eXBlLCJ2ZXJpZnlFcnJvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiB0aGlzLl9wcmltZUNv''@;'; put 'put ''ZGUmJih0aGlzLl9wcmltZUNvZGU9ZnVuY3Rpb24gVyhKLHJlKXt2YXIgaWU9cmUudG9TdHJpbmcoImhleCIpLHVlPVtpZSxKLnRvU3RyaW5nKDE2KV0uam9pbigiXyIpO2lmKHVlIGluIFkpcmV0dXJuIFlbdWVdO3ZhciBfZSxnZT0wO2lmKEouaXNFdmVuKCl8fCFOLnNpbXBsZVNpZXZlfHwh''@;'; put 'put ''Ti5mZXJtYXRUZXN0KEopfHwhVi50ZXN0KEopKXJldHVybiBnZSs9MSxZW3VlXT1nZSs9IjAyIj09PWllfHwiMDUiPT09aWU/ODo0LGdlO3N3aXRjaChWLnRlc3QoSi5zaHJuKDEpKXx8KGdlKz0yKSxpZSl7Y2FzZSIwMiI6Si5tb2QodykuY21wKFApJiYoZ2UrPTgpO2JyZWFrO2Nhc2UiMDUi''@;'; put 'put ''OihfZT1KLm1vZChGKSkuY21wKFIpJiZfZS5jbXAoeikmJihnZSs9OCk7YnJlYWs7ZGVmYXVsdDpnZSs9NH1yZXR1cm4gWVt1ZV09Z2UsZ2V9KHRoaXMuX19wcmltZSx0aGlzLl9fZ2VuKSksdGhpcy5fcHJpbWVDb2RlfX0pLHEucHJvdG90eXBlLmdlbmVyYXRlS2V5cz1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9wcml2fHwodGhpcy5fcHJpdj1uZXcgXyhPKHRoaXMuX3ByaW1lTGVuKSkpLHRoaXMuX3B1Yj10aGlzLl9nZW4udG9SZWQodGhpcy5fcHJpbWUpLnJlZFBvdyh0aGlzLl9wcml2KS5mcm9tUmVkKCksdGhpcy5nZXRQdWJsaWNLZXkoKX0scS5wcm90b3R5cGUuY29tcHV0ZVNl''@;'; put 'put ''Y3JldD1mdW5jdGlvbihKKXt2YXIgcmU9KEo9KEo9bmV3IF8oSikpLnRvUmVkKHRoaXMuX3ByaW1lKSkucmVkUG93KHRoaXMuX3ByaXYpLmZyb21SZWQoKSxpZT1uZXcgSShyZS50b0FycmF5KCkpLHVlPXRoaXMuZ2V0UHJpbWUoKTtpZihpZS5sZW5ndGg8dWUubGVuZ3RoKXt2YXIgZ2U9bmV3''@;'; put 'put ''IEkodWUubGVuZ3RoLWllLmxlbmd0aCk7Z2UuZmlsbCgwKSxpZT1JLmNvbmNhdChbZ2UsaWVdKX1yZXR1cm4gaWV9LHEucHJvdG90eXBlLmdldFB1YmxpY0tleT1mdW5jdGlvbihyZSl7cmV0dXJuIGVlKHRoaXMuX3B1YixyZSl9LHEucHJvdG90eXBlLmdldFByaXZhdGVLZXk9ZnVuY3Rpb24o''@;'; put 'put ''cmUpe3JldHVybiBlZSh0aGlzLl9wcml2LHJlKX0scS5wcm90b3R5cGUuZ2V0UHJpbWU9ZnVuY3Rpb24oSil7cmV0dXJuIGVlKHRoaXMuX19wcmltZSxKKX0scS5wcm90b3R5cGUuZ2V0R2VuZXJhdG9yPWZ1bmN0aW9uKEope3JldHVybiBlZSh0aGlzLl9nZW4sSil9LHEucHJvdG90eXBlLnNl''@;'; put 'put ''dEdlbmVyYXRvcj1mdW5jdGlvbihKLHJlKXtyZXR1cm4gcmU9cmV8fCJ1dGY4IixJLmlzQnVmZmVyKEopfHwoSj1uZXcgSShKLHJlKSksdGhpcy5fX2dlbj1KLHRoaXMuX2dlbj1uZXcgXyhKKSx0aGlzfX0sMzU5MDooY2UsWCxiKT0+e3ZhciBJPWIoMTc5OCk7Y2UuZXhwb3J0cz11ZSx1ZS5z''@;'; put 'put ''aW1wbGVTaWV2ZT1yZSx1ZS5mZXJtYXRUZXN0PWllO3ZhciBfPWIoMzYyMCkscD1uZXcgXygyNCksdz1uZXcoYigzMDQ3KSksUD1uZXcgXygxKSxGPW5ldyBfKDIpLFI9bmV3IF8oNSksTz0obmV3IF8oMTYpLG5ldyBfKDgpLG5ldyBfKDEwKSksSz1uZXcgXygzKSxZPShuZXcgXyg3KSxuZXcg''@;'; put 'put ''XygxMSkpLFc9bmV3IF8oNCksZWU9KG5ldyBfKDEyKSxudWxsKTtmdW5jdGlvbiByZShnZSl7Zm9yKHZhciBfZT1mdW5jdGlvbiBKKCl7aWYobnVsbCE9PWVlKXJldHVybiBlZTt2YXIgX2U9W107X2VbMF09Mjtmb3IodmFyIFRlPTEsTWU9MztNZTwxMDQ4NTc2O01lKz0yKXtmb3IodmFyIFpl''@;'; put 'put ''PU1hdGguY2VpbChNYXRoLnNxcnQoTWUpKSxCPTA7QjxUZSYmX2VbQl08PVplJiZNZSVfZVtCXSE9MDtCKyspO1RlIT09QiYmX2VbQl08PVplfHwoX2VbVGUrK109TWUpfXJldHVybiBlZT1fZSxfZX0oKSxUZT0wO1RlPF9lLmxlbmd0aDtUZSsrKWlmKDA9PT1nZS5tb2RuKF9lW1RlXSkpcmV0''@;'; put 'put ''dXJuIDA9PT1nZS5jbXBuKF9lW1RlXSk7cmV0dXJuITB9ZnVuY3Rpb24gaWUoZ2Upe3ZhciBfZT1fLm1vbnQoZ2UpO3JldHVybiAwPT09Ri50b1JlZChfZSkucmVkUG93KGdlLnN1Ym4oMSkpLmZyb21SZWQoKS5jbXBuKDEpfWZ1bmN0aW9uIHVlKGdlLF9lKXtpZihnZTwxNilyZXR1cm4gbmV3''@;'; put 'put ''IF8oMj09PV9lfHw1PT09X2U/WzE0MCwxMjNdOlsxNDAsMzldKTtfZT1uZXcgXyhfZSk7Zm9yKHZhciBUZSxNZTs7KXtmb3IoVGU9bmV3IF8oSShNYXRoLmNlaWwoZ2UvOCkpKTtUZS5iaXRMZW5ndGgoKT5nZTspVGUuaXNocm4oMSk7aWYoVGUuaXNFdmVuKCkmJlRlLmlhZGQoUCksVGUudGVz''@;'; put 'put ''dG4oMSl8fFRlLmlhZGQoRiksX2UuY21wKEYpKXtpZighX2UuY21wKFIpKWZvcig7VGUubW9kKE8pLmNtcChLKTspVGUuaWFkZChXKX1lbHNlIGZvcig7VGUubW9kKHApLmNtcChZKTspVGUuaWFkZChXKTtpZihyZShNZT1UZS5zaHJuKDEpKSYmcmUoVGUpJiZpZShNZSkmJmllKFRlKSYmdy50''@;'; put 'put ''ZXN0KE1lKSYmdy50ZXN0KFRlKSlyZXR1cm4gVGV9fX0sMzYyMDpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJLF8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBwKEIsZyl7aWYoIUIpdGhyb3cgbmV3IEVycm9yKGd8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gVihCLGcpe0Iuc3Vw''@;'; put 'put ''ZXJfPWc7dmFyIHk9ZnVuY3Rpb24oKXt9O3kucHJvdG90eXBlPWcucHJvdG90eXBlLEIucHJvdG90eXBlPW5ldyB5LEIucHJvdG90eXBlLmNvbnN0cnVjdG9yPUJ9ZnVuY3Rpb24gdyhCLGcseSl7aWYody5pc0JOKEIpKXJldHVybiBCO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGws''@;'; put 'put ''dGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1CJiYoKCJsZSI9PT1nfHwiYmUiPT09ZykmJih5PWcsZz0xMCksdGhpcy5faW5pdChCfHwwLGd8fDEwLHl8fCJiZSIpKX12YXIgUDsib2JqZWN0Ij09dHlwZW9mIEk/SS5leHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3LndvcmRTaXpl''@;'; put 'put ''PTI2O3RyeXtQPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpiKDc3NDgpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gRihCLGcpe3ZhciB5PUIuY2hhckNvZGVBdChnKTtyZXR1cm4geT49NjUmJnk8PTcwP3ktNTU6eT49OTcmJnk8PTEw''@;'; put 'put ''Mj95LTg3OnktNDgmMTV9ZnVuY3Rpb24gUihCLGcseSl7dmFyIHg9RihCLHkpO3JldHVybiB5LTE+PWcmJih4fD1GKEIseS0xKTw8NCkseH1mdW5jdGlvbiB6KEIsZyx5LHgpe2Zvcih2YXIgQz0wLFQ9TWF0aC5taW4oQi5sZW5ndGgseSksSD1nO0g8VDtIKyspe3ZhciBqPUIuY2hhckNvZGVB''@;'; put 'put ''dChIKS00ODtDKj14LEMrPWo+PTQ5P2otNDkrMTA6aj49MTc/ai0xNysxMDpqfXJldHVybiBDfXcuaXNCTj1mdW5jdGlvbihnKXtyZXR1cm4gZyBpbnN0YW5jZW9mIHd8fG51bGwhPT1nJiYib2JqZWN0Ij09dHlwZW9mIGcmJmcuY29uc3RydWN0b3Iud29yZFNpemU9PT13LndvcmRTaXplJiZB''@;'; put 'put ''cnJheS5pc0FycmF5KGcud29yZHMpfSx3Lm1heD1mdW5jdGlvbihnLHkpe3JldHVybiBnLmNtcCh5KT4wP2c6eX0sdy5taW49ZnVuY3Rpb24oZyx5KXtyZXR1cm4gZy5jbXAoeSk8MD9nOnl9LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGcseSx4KXtpZigibnVtYmVyIj09dHlwZW9mIGcp''@;'; put 'put ''cmV0dXJuIHRoaXMuX2luaXROdW1iZXIoZyx5LHgpO2lmKCJvYmplY3QiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdEFycmF5KGcseSx4KTsiaGV4Ij09PXkmJih5PTE2KSxwKHk9PT0oMHx5KSYmeT49MiYmeTw9MzYpO3ZhciBDPTA7Ii0iPT09KGc9Zy50b1N0cmluZygpLnJlcGxhY2Uo''@;'; put 'put ''L1xzKy9nLCIiKSlbMF0mJihDKyssdGhpcy5uZWdhdGl2ZT0xKSxDPGcubGVuZ3RoJiYoMTY9PT15P3RoaXMuX3BhcnNlSGV4KGcsQyx4KToodGhpcy5fcGFyc2VCYXNlKGcseSxDKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLHkseCkpKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''X2luaXROdW1iZXI9ZnVuY3Rpb24oZyx5LHgpe2c8MCYmKHRoaXMubmVnYXRpdmU9MSxnPS1nKSxnPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnXSx0aGlzLmxlbmd0aD0xKTpnPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEw''@;'; put 'put ''ODg2M10sdGhpcy5sZW5ndGg9Mik6KHAoZzw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx5LHgpfSx3LnByb3RvdHlwZS5f''@;'; put 'put ''aW5pdEFycmF5PWZ1bmN0aW9uKGcseSx4KXtpZihwKCJudW1iZXIiPT10eXBlb2YgZy5sZW5ndGgpLGcubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGcubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5''@;'; put 'put ''KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIFQsSCxqPTA7aWYoImJlIj09PXgpZm9yKEM9Zy5sZW5ndGgtMSxUPTA7Qz49MDtDLT0zKXRoaXMud29yZHNbVF18PShIPWdbQ118Z1tDLTFdPDw4fGdbQy0yXTw8MTYpPDxqJjY3''@;'; put 'put ''MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7ZWxzZSBpZigibGUiPT09eClmb3IoQz0wLFQ9MDtDPGcubGVuZ3RoO0MrPTMpdGhpcy53b3Jkc1tUXXw9KEg9Z1tDXXxnW0MrMV08PDh8Z1tDKzJdPDwxNik8PGomNjcxMDg4''@;'; put 'put ''NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oZyx5LHgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoZy5sZW5ndGgteSkvNiksdGhpcy53''@;'; put 'put ''b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgaixUPTAsSD0wO2lmKCJiZSI9PT14KWZvcihDPWcubGVuZ3RoLTE7Qz49eTtDLT0yKWo9UihnLHksQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMm''@;'; put 'put ''aixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O2Vsc2UgZm9yKEM9KGcubGVuZ3RoLXkpJTI9PTA/eSsxOnk7QzxnLmxlbmd0aDtDKz0yKWo9UihnLHksQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0x''@;'; put 'put ''XXw9aj4+PjI2KTpUKz04O3RoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihnLHkseCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIEM9MCxUPTE7VDw9NjcxMDg4NjM7VCo9eSlDKys7Qy0tLFQ9VC95fDA7Zm9yKHZhciBIPWcubGVuZ3Ro''@;'; put 'put ''LXgsaj1IJUMsRT1NYXRoLm1pbihILEgtaikreCxtPTAsQT14O0E8RTtBKz1DKW09eihnLEEsQStDLHkpLHRoaXMuaW11bG4oVCksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSk7aWYoMCE9PWope3ZhciBhZT0xO2ZvcihtPXooZyxBLGcu''@;'; put 'put ''bGVuZ3RoLHkpLEE9MDtBPGo7QSsrKWFlKj15O3RoaXMuaW11bG4oYWUpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pfXRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuY29weT1mdW5jdGlvbihnKXtnLndvcmRzPW5ldyBBcnJheSh0aGlz''@;'; put 'put ''Lmxlbmd0aCk7Zm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aDt5KyspZy53b3Jkc1t5XT10aGlzLndvcmRzW3ldO2cubGVuZ3RoPXRoaXMubGVuZ3RoLGcubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxnLnJlZD10aGlzLnJlZH0sdy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZz1uZXcg''@;'; put 'put ''dyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGcpLGd9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxl''@;'; put 'put ''bmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdy5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0''@;'; put 'put ''aXZlPTApLHRoaXN9LHcucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIE49WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAw''@;'; put 'put ''MDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwIl0sTz1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxLPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3''@;'; put 'put ''NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcy''@;'; put 'put ''MTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFkoQixnLHkpe3kubmVnYXRpdmU9Zy5uZWdhdGl2ZV5CLm5lZ2F0aXZlO3ZhciB4PUIubGVuZ3RoK2cubGVuZ3RofDA7eS5sZW5ndGg9eCx4''@;'; put 'put ''PXgtMXwwO3ZhciBDPTB8Qi53b3Jkc1swXSxUPTB8Zy53b3Jkc1swXSxIPUMqVCxFPUgvNjcxMDg4NjR8MDt5LndvcmRzWzBdPTY3MTA4ODYzJkg7Zm9yKHZhciBtPTE7bTx4O20rKyl7Zm9yKHZhciBBPUU+Pj4yNixhZT02NzEwODg2MyZFLG5lPU1hdGgubWluKG0sZy5sZW5ndGgtMSksc2U9''@;'; put 'put ''TWF0aC5tYXgoMCxtLUIubGVuZ3RoKzEpO3NlPD1uZTtzZSsrKUErPShIPShDPTB8Qi53b3Jkc1ttLXNlfDBdKSooVD0wfGcud29yZHNbc2VdKSthZSkvNjcxMDg4NjR8MCxhZT02NzEwODg2MyZIO3kud29yZHNbbV09MHxhZSxFPTB8QX1yZXR1cm4gMCE9PUU/eS53b3Jkc1ttXT0wfEU6eS5s''@;'; put 'put ''ZW5ndGgtLSx5LnN0cmlwKCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZyx5KXt2YXIgeDtpZih5PTB8eXx8MSwxNj09PShnPWd8fDEwKXx8ImhleCI9PT1nKXt4PSIiO2Zvcih2YXIgQz0wLFQ9MCxIPTA7SDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPXRoaXMud29yZHNbSF0sRT0o''@;'; put 'put ''MTY3NzcyMTUmKGo8PEN8VCkpLnRvU3RyaW5nKDE2KTtUPWo+Pj4yNC1DJjE2Nzc3MjE1LChDKz0yKT49MjYmJihDLT0yNixILS0pLHg9MCE9PVR8fEghPT10aGlzLmxlbmd0aC0xP05bNi1FLmxlbmd0aF0rRSt4OkUreH1mb3IoMCE9PVQmJih4PVQudG9TdHJpbmcoMTYpK3gpO3gubGVuZ3Ro''@;'; put 'put ''JXkhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1pZihnPT09KDB8ZykmJmc+PTImJmc8PTM2KXt2YXIgbT1PW2ddLEE9S1tnXTt4PSIiO3ZhciBhZT10aGlzLmNsb25lKCk7Zm9yKGFlLm5lZ2F0aXZlPTA7IWFlLmlzWmVybygpOyl7dmFyIG5lPWFl''@;'; put 'put ''Lm1vZG4oQSkudG9TdHJpbmcoZyk7eD0oYWU9YWUuaWRpdm4oQSkpLmlzWmVybygpP25lK3g6TlttLW5lLmxlbmd0aF0rbmUreH1mb3IodGhpcy5pc1plcm8oKSYmKHg9IjAiK3gpO3gubGVuZ3RoJXkhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1w''@;'; put 'put ''KCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LHcucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIGc9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP2crPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhp''@;'; put 'put ''cy53b3Jkc1syXT9nKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmcCghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LWc6Z30sdy5wcm90b3R5cGUudG9KU09OPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSx3LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihnLHkpe3JldHVybiBwKHR5cGVvZiBQPCJ1IiksdGhpcy50b0FycmF5TGlrZShQLGcseSl9LHcucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy50''@;'; put 'put ''b0FycmF5TGlrZShBcnJheSxnLHkpfSx3LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihnLHkseCl7dmFyIEM9dGhpcy5ieXRlTGVuZ3RoKCksVD14fHxNYXRoLm1heCgxLEMpO3AoQzw9VCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLHAoVD4wLCJSZXF1''@;'; put 'put ''ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIEUsbSxIPSJsZSI9PT15LGo9bmV3IGcoVCksQT10aGlzLmNsb25lKCk7aWYoSCl7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksalttXT1FO2Zvcig7bTxUO20rKylqW21d''@;'; put 'put ''PTB9ZWxzZXtmb3IobT0wO208VC1DO20rKylqW21dPTA7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksaltULW0tMV09RX1yZXR1cm4gan0sdy5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKGcpe3JldHVybiAzMi1NYXRo''@;'; put 'put ''LmNsejMyKGcpfTpmdW5jdGlvbihnKXt2YXIgeT1nLHg9MDtyZXR1cm4geT49NDA5NiYmKHgrPTEzLHk+Pj49MTMpLHk+PTY0JiYoeCs9Nyx5Pj4+PTcpLHk+PTgmJih4Kz00LHk+Pj49NCkseT49MiYmKHgrPTIseT4+Pj0yKSx4K3l9LHcucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihn''@;'; put 'put ''KXtpZigwPT09ZylyZXR1cm4gMjY7dmFyIHk9Zyx4PTA7cmV0dXJuISg4MTkxJnkpJiYoeCs9MTMseT4+Pj0xMyksISgxMjcmeSkmJih4Kz03LHk+Pj49NyksISgxNSZ5KSYmKHgrPTQseT4+Pj00KSwhKDMmeSkmJih4Kz0yLHk+Pj49MiksISgxJnkpJiZ4KysseH0sdy5wcm90b3R5cGUuYml0''@;'; put 'put ''TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkreX0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgZz0w''@;'; put 'put ''LHk9MDt5PHRoaXMubGVuZ3RoO3krKyl7dmFyIHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1t5XSk7aWYoZys9eCwyNiE9PXgpYnJlYWt9cmV0dXJuIGd9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcu''@;'; put 'put ''cHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihnKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnRlc3RuKGctMSk/dGhpcy5ub3RuKGcp''@;'; put 'put ''LmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGcubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciB5PTA7eTxnLmxlbmd0aDt5KyspdGhp''@;'; put 'put ''cy53b3Jkc1t5XT10aGlzLndvcmRzW3ldfGcud29yZHNbeV07cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKGcpe3JldHVybiBwKCEodGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGcpfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihnKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihnKTpnLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGcpOmcuY2xvbmUoKS5pdW9yKHRoaXMp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihnKXt2YXIgeTt5PXRoaXMubGVuZ3RoPmcubGVuZ3RoP2c6dGhpcztmb3IodmFyIHg9MDt4PHkubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mZy53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9eS5sZW5ndGgsdGhp''@;'; put 'put ''cy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKGcpe3JldHVybiBwKCEodGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChnKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFu''@;'; put 'put ''ZChnKTpnLmNsb25lKCkuaWFuZCh0aGlzKX0sdy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKGcpOmcuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oZyl7dmFyIHks''@;'; put 'put ''eDt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oeT10aGlzLHg9Zyk6KHk9Zyx4PXRoaXMpO2Zvcih2YXIgQz0wO0M8eC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109eS53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT15KWZvcig7Qzx5Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT15LndvcmRz''@;'; put 'put ''W0NdO3JldHVybiB0aGlzLmxlbmd0aD15Lmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1eG9yKGcpfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRo''@;'; put 'put ''aXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKGcpOmcuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoZyk6Zy5jbG9uZSgpLml1eG9yKHRoaXMpfSx3''@;'; put 'put ''LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHk9MHxNYXRoLmNlaWwoZy8yNikseD1nJTI2O3RoaXMuX2V4cGFuZCh5KSx4PjAmJnktLTtmb3IodmFyIEM9MDtDPHk7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRoaXMud29y''@;'; put 'put ''ZHNbQ107cmV0dXJuIHg+MCYmKHRoaXMud29yZHNbQ109fnRoaXMud29yZHNbQ10mNjcxMDg4NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGcpfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGcs''@;'; put 'put ''eSl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB4PWcvMjZ8MCxDPWclMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF09eT90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1m''@;'; put 'put ''dW5jdGlvbihnKXt2YXIgeSx4LEM7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAseT10aGlzLmlzdWIoZyksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2''@;'; put 'put ''ZSlyZXR1cm4gZy5uZWdhdGl2ZT0wLHk9dGhpcy5pc3ViKGcpLGcubmVnYXRpdmU9MSx5Ll9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyh4PXRoaXMsQz1nKTooeD1nLEM9dGhpcyk7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMm''@;'; put 'put ''KHk9KDB8eC53b3Jkc1tIXSkrKDB8Qy53b3Jkc1tIXSkrVCksVD15Pj4+MjY7Zm9yKDswIT09VCYmSDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoeT0oMHx4LndvcmRzW0hdKStUKSxUPXk+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRz''@;'; put 'put ''W3RoaXMubGVuZ3RoXT1ULHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO0g8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09eC53b3Jkc1tIXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcpe3ZhciB5O3JldHVybiAwIT09Zy5uZWdhdGl2ZSYmMD09''@;'; put 'put ''PXRoaXMubmVnYXRpdmU/KGcubmVnYXRpdmU9MCx5PXRoaXMuc3ViKGcpLGcubmVnYXRpdmVePTEseSk6MD09PWcubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAseT1nLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEseSk6dGhpcy5sZW5ndGg+Zy5sZW5ndGg/''@;'; put 'put ''dGhpcy5jbG9uZSgpLmlhZGQoZyk6Zy5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyl7aWYoMCE9PWcubmVnYXRpdmUpe2cubmVnYXRpdmU9MDt2YXIgeT10aGlzLmlhZGQoZyk7cmV0dXJuIGcubmVnYXRpdmU9MSx5Ll9ub3JtU2lnbigpfWlmKDAhPT10''@;'; put 'put ''aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBDLFQseD10aGlzLmNtcChnKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0w''@;'; put 'put ''LHRoaXM7eD4wPyhDPXRoaXMsVD1nKTooQz1nLFQ9dGhpcyk7Zm9yKHZhciBIPTAsaj0wO2o8VC5sZW5ndGg7aisrKUg9KHk9KDB8Qy53b3Jkc1tqXSktKDB8VC53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmeTtmb3IoOzAhPT1IJiZqPEMubGVuZ3RoO2orKylIPSh5''@;'; put 'put ''PSgwfEMud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJnk7aWYoMD09PUgmJmo8Qy5sZW5ndGgmJkMhPT10aGlzKWZvcig7ajxDLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1DLndvcmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxq''@;'; put 'put ''KSxDIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGcpfTt2YXIgVz1mdW5jdGlvbihnLHkseCl7dmFyIEUsbSxBLEM9Zy53b3JkcyxUPXkud29yZHMsSD14LndvcmRzLGo9''@;'; put 'put ''MCxhZT0wfENbMF0sbmU9ODE5MSZhZSxzZT1hZT4+PjEzLENlPTB8Q1sxXSxVZT04MTkxJkNlLEplPUNlPj4+MTMsaXQ9MHxDWzJdLHhlPTgxOTEmaXQseWU9aXQ+Pj4xMyxLZT0wfENbM10samU9ODE5MSZLZSxrZT1LZT4+PjEzLEhlPTB8Q1s0XSxMZT04MTkxJkhlLFJlPUhlPj4+MTMsVmU9''@;'; put 'put ''MHxDWzVdLEFlPTgxOTEmVmUsRGU9VmU+Pj4xMyxfdD0wfENbNl0scnQ9ODE5MSZfdCxRZT1fdD4+PjEzLHNuPTB8Q1s3XSx2dD04MTkxJnNuLFN0PXNuPj4+MTMsZW49MHxDWzhdLHV0PTgxOTEmZW4sWGU9ZW4+Pj4xMyx0dD0wfENbOV0sSWU9ODE5MSZ0dCxhdD10dD4+PjEzLHVuPTB8VFsw''@;'; put 'put ''XSxJdD04MTkxJnVuLFJ0PXVuPj4+MTMscmk9MHxUWzFdLGFuPTgxOTEmcmksbG49cmk+Pj4xMyxuaT0wfFRbMl0saG49ODE5MSZuaSxodD1uaT4+PjEzLFJyPTB8VFszXSxCdD04MTkxJlJyLEF0PVJyPj4+MTMsRm49MHxUWzRdLHN0PTgxOTEmRm4sWnQ9Rm4+Pj4xMyxRcj0wfFRbNV0sWWU9''@;'; put 'put ''ODE5MSZRcixUdD1Rcj4+PjEzLHJyPTB8VFs2XSxmdD04MTkxJnJyLE10PXJyPj4+MTMsWm49MHxUWzddLG5uPTgxOTEmWm4sV3Q9Wm4+Pj4xMyxkaT0wfFRbOF0sZG49ODE5MSZkaSxtbj1kaT4+PjEzLHBpPTB8VFs5XSxmbj04MTkxJnBpLHRuPXBpPj4+MTM7eC5uZWdhdGl2ZT1nLm5lZ2F0''@;'; put 'put ''aXZlXnkubmVnYXRpdmUseC5sZW5ndGg9MTk7dmFyIGNhPShqKyhFPU1hdGguaW11bChuZSxJdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwobmUsUnQpKStNYXRoLmltdWwoc2UsSXQpfDApKTw8MTMpfDA7aj0oKEE9TWF0aC5pbXVsKHNlLFJ0KSkrKG0+Pj4xMyl8MCkrKGNhPj4+MjYp''@;'; put 'put ''fDAsY2EmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFVlLEl0KSxtPShtPU1hdGguaW11bChVZSxSdCkpK01hdGguaW11bChKZSxJdCl8MCxBPU1hdGguaW11bChKZSxSdCk7dmFyIF9pPShqKyhFPUUrTWF0aC5pbXVsKG5lLGFuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsbG4p''@;'; put 'put ''fDApK01hdGguaW11bChzZSxhbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxsbil8MCkrKG0+Pj4xMyl8MCkrKF9pPj4+MjYpfDAsX2kmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHhlLEl0KSxtPShtPU1hdGguaW11bCh4ZSxSdCkpK01hdGguaW11bCh5ZSxJdCl8MCxBPU1hdGgu''@;'; put 'put ''aW11bCh5ZSxSdCksRT1FK01hdGguaW11bChVZSxhbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGxuKXwwKStNYXRoLmltdWwoSmUsYW4pfDAsQT1BK01hdGguaW11bChKZSxsbil8MDt2YXIgdnI9KGorKEU9RStNYXRoLmltdWwobmUsaG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11''@;'; put 'put ''bChuZSxodCl8MCkrTWF0aC5pbXVsKHNlLGhuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGh0KXwwKSsobT4+PjEzKXwwKSsodnI+Pj4yNil8MCx2ciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoamUsSXQpLG09KG09TWF0aC5pbXVsKGplLFJ0KSkrTWF0aC5pbXVsKGtlLEl0KXww''@;'; put 'put ''LEE9TWF0aC5pbXVsKGtlLFJ0KSxFPUUrTWF0aC5pbXVsKHhlLGFuKXwwLG09KG09bStNYXRoLmltdWwoeGUsbG4pfDApK01hdGguaW11bCh5ZSxhbil8MCxBPUErTWF0aC5pbXVsKHllLGxuKXwwLEU9RStNYXRoLmltdWwoVWUsaG4pfDAsbT0obT1tK01hdGguaW11bChVZSxodCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKEplLGhuKXwwLEE9QStNYXRoLmltdWwoSmUsaHQpfDA7dmFyIFhpPShqKyhFPUUrTWF0aC5pbXVsKG5lLEJ0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsQXQpfDApK01hdGguaW11bChzZSxCdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxBdCl8''@;'; put 'put ''MCkrKG0+Pj4xMyl8MCkrKFhpPj4+MjYpfDAsWGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKExlLEl0KSxtPShtPU1hdGguaW11bChMZSxSdCkpK01hdGguaW11bChSZSxJdCl8MCxBPU1hdGguaW11bChSZSxSdCksRT1FK01hdGguaW11bChqZSxhbil8MCxtPShtPW0rTWF0aC5pbXVsKGplLGxu''@;'; put 'put ''KXwwKStNYXRoLmltdWwoa2UsYW4pfDAsQT1BK01hdGguaW11bChrZSxsbil8MCxFPUUrTWF0aC5pbXVsKHhlLGhuKXwwLG09KG09bStNYXRoLmltdWwoeGUsaHQpfDApK01hdGguaW11bCh5ZSxobil8MCxBPUErTWF0aC5pbXVsKHllLGh0KXwwLEU9RStNYXRoLmltdWwoVWUsQnQpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChVZSxBdCl8MCkrTWF0aC5pbXVsKEplLEJ0KXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDA7dmFyIFFpPShqKyhFPUUrTWF0aC5pbXVsKG5lLHN0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsWnQpfDApK01hdGguaW11bChzZSxzdCl8MCkpPDwxMyl8''@;'; put 'put ''MDtqPSgoQT1BK01hdGguaW11bChzZSxadCl8MCkrKG0+Pj4xMyl8MCkrKFFpPj4+MjYpfDAsUWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEFlLEl0KSxtPShtPU1hdGguaW11bChBZSxSdCkpK01hdGguaW11bChEZSxJdCl8MCxBPU1hdGguaW11bChEZSxSdCksRT1FK01hdGguaW11bChMZSxh''@;'; put 'put ''bil8MCxtPShtPW0rTWF0aC5pbXVsKExlLGxuKXwwKStNYXRoLmltdWwoUmUsYW4pfDAsQT1BK01hdGguaW11bChSZSxsbil8MCxFPUUrTWF0aC5pbXVsKGplLGhuKXwwLG09KG09bStNYXRoLmltdWwoamUsaHQpfDApK01hdGguaW11bChrZSxobil8MCxBPUErTWF0aC5pbXVsKGtlLGh0KXww''@;'; put 'put ''LEU9RStNYXRoLmltdWwoeGUsQnQpfDAsbT0obT1tK01hdGguaW11bCh4ZSxBdCl8MCkrTWF0aC5pbXVsKHllLEJ0KXwwLEE9QStNYXRoLmltdWwoeWUsQXQpfDAsRT1FK01hdGguaW11bChVZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFp0KXwwKStNYXRoLmltdWwoSmUsc3QpfDAsQT1B''@;'; put 'put ''K01hdGguaW11bChKZSxadCl8MDt2YXIgVmk9KGorKEU9RStNYXRoLmltdWwobmUsWWUpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxUdCl8MCkrTWF0aC5pbXVsKHNlLFllKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFR0KXwwKSsobT4+PjEzKXwwKSsoVmk+''@;'; put 'put ''Pj4yNil8MCxWaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwocnQsSXQpLG09KG09TWF0aC5pbXVsKHJ0LFJ0KSkrTWF0aC5pbXVsKFFlLEl0KXwwLEE9TWF0aC5pbXVsKFFlLFJ0KSxFPUUrTWF0aC5pbXVsKEFlLGFuKXwwLG09KG09bStNYXRoLmltdWwoQWUsbG4pfDApK01hdGguaW11bChEZSxh''@;'; put 'put ''bil8MCxBPUErTWF0aC5pbXVsKERlLGxuKXwwLEU9RStNYXRoLmltdWwoTGUsaG4pfDAsbT0obT1tK01hdGguaW11bChMZSxodCl8MCkrTWF0aC5pbXVsKFJlLGhuKXwwLEE9QStNYXRoLmltdWwoUmUsaHQpfDAsRT1FK01hdGguaW11bChqZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLEF0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoa2UsQnQpfDAsQT1BK01hdGguaW11bChrZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHhlLHN0KXwwLG09KG09bStNYXRoLmltdWwoeGUsWnQpfDApK01hdGguaW11bCh5ZSxzdCl8MCxBPUErTWF0aC5pbXVsKHllLFp0KXwwLEU9RStNYXRoLmltdWwoVWUsWWUpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChVZSxUdCl8MCkrTWF0aC5pbXVsKEplLFllKXwwLEE9QStNYXRoLmltdWwoSmUsVHQpfDA7dmFyIGVpPShqKyhFPUUrTWF0aC5pbXVsKG5lLGZ0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsTXQpfDApK01hdGguaW11bChzZSxmdCl8MCkpPDwxMyl8''@;'; put 'put ''MDtqPSgoQT1BK01hdGguaW11bChzZSxNdCl8MCkrKG0+Pj4xMyl8MCkrKGVpPj4+MjYpfDAsZWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHZ0LEl0KSxtPShtPU1hdGguaW11bCh2dCxSdCkpK01hdGguaW11bChTdCxJdCl8MCxBPU1hdGguaW11bChTdCxSdCksRT1FK01hdGguaW11bChydCxh''@;'; put 'put ''bil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LGxuKXwwKStNYXRoLmltdWwoUWUsYW4pfDAsQT1BK01hdGguaW11bChRZSxsbil8MCxFPUUrTWF0aC5pbXVsKEFlLGhuKXwwLG09KG09bStNYXRoLmltdWwoQWUsaHQpfDApK01hdGguaW11bChEZSxobil8MCxBPUErTWF0aC5pbXVsKERlLGh0KXww''@;'; put 'put ''LEU9RStNYXRoLmltdWwoTGUsQnQpfDAsbT0obT1tK01hdGguaW11bChMZSxBdCl8MCkrTWF0aC5pbXVsKFJlLEJ0KXwwLEE9QStNYXRoLmltdWwoUmUsQXQpfDAsRT1FK01hdGguaW11bChqZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLFp0KXwwKStNYXRoLmltdWwoa2Usc3QpfDAsQT1B''@;'; put 'put ''K01hdGguaW11bChrZSxadCl8MCxFPUUrTWF0aC5pbXVsKHhlLFllKXwwLG09KG09bStNYXRoLmltdWwoeGUsVHQpfDApK01hdGguaW11bCh5ZSxZZSl8MCxBPUErTWF0aC5pbXVsKHllLFR0KXwwLEU9RStNYXRoLmltdWwoVWUsZnQpfDAsbT0obT1tK01hdGguaW11bChVZSxNdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKEplLGZ0KXwwLEE9QStNYXRoLmltdWwoSmUsTXQpfDA7dmFyIHVhPShqKyhFPUUrTWF0aC5pbXVsKG5lLG5uKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsV3QpfDApK01hdGguaW11bChzZSxubil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxXdCl8''@;'; put 'put ''MCkrKG0+Pj4xMyl8MCkrKHVhPj4+MjYpfDAsdWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHV0LEl0KSxtPShtPU1hdGguaW11bCh1dCxSdCkpK01hdGguaW11bChYZSxJdCl8MCxBPU1hdGguaW11bChYZSxSdCksRT1FK01hdGguaW11bCh2dCxhbil8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LGxu''@;'; put 'put ''KXwwKStNYXRoLmltdWwoU3QsYW4pfDAsQT1BK01hdGguaW11bChTdCxsbil8MCxFPUUrTWF0aC5pbXVsKHJ0LGhuKXwwLG09KG09bStNYXRoLmltdWwocnQsaHQpfDApK01hdGguaW11bChRZSxobil8MCxBPUErTWF0aC5pbXVsKFFlLGh0KXwwLEU9RStNYXRoLmltdWwoQWUsQnQpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChBZSxBdCl8MCkrTWF0aC5pbXVsKERlLEJ0KXwwLEE9QStNYXRoLmltdWwoRGUsQXQpfDAsRT1FK01hdGguaW11bChMZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKExlLFp0KXwwKStNYXRoLmltdWwoUmUsc3QpfDAsQT1BK01hdGguaW11bChSZSxadCl8MCxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKGplLFllKXwwLG09KG09bStNYXRoLmltdWwoamUsVHQpfDApK01hdGguaW11bChrZSxZZSl8MCxBPUErTWF0aC5pbXVsKGtlLFR0KXwwLEU9RStNYXRoLmltdWwoeGUsZnQpfDAsbT0obT1tK01hdGguaW11bCh4ZSxNdCl8MCkrTWF0aC5pbXVsKHllLGZ0KXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoeWUsTXQpfDAsRT1FK01hdGguaW11bChVZSxubil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFd0KXwwKStNYXRoLmltdWwoSmUsbm4pfDAsQT1BK01hdGguaW11bChKZSxXdCl8MDt2YXIgUmk9KGorKEU9RStNYXRoLmltdWwobmUsZG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11''@;'; put 'put ''bChuZSxtbil8MCkrTWF0aC5pbXVsKHNlLGRuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLG1uKXwwKSsobT4+PjEzKXwwKSsoUmk+Pj4yNil8MCxSaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsSXQpLG09KG09TWF0aC5pbXVsKEllLFJ0KSkrTWF0aC5pbXVsKGF0LEl0KXww''@;'; put 'put ''LEE9TWF0aC5pbXVsKGF0LFJ0KSxFPUUrTWF0aC5pbXVsKHV0LGFuKXwwLG09KG09bStNYXRoLmltdWwodXQsbG4pfDApK01hdGguaW11bChYZSxhbil8MCxBPUErTWF0aC5pbXVsKFhlLGxuKXwwLEU9RStNYXRoLmltdWwodnQsaG4pfDAsbT0obT1tK01hdGguaW11bCh2dCxodCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKFN0LGhuKXwwLEE9QStNYXRoLmltdWwoU3QsaHQpfDAsRT1FK01hdGguaW11bChydCxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LEF0KXwwKStNYXRoLmltdWwoUWUsQnQpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MCxFPUUrTWF0aC5pbXVsKEFlLHN0KXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwoQWUsWnQpfDApK01hdGguaW11bChEZSxzdCl8MCxBPUErTWF0aC5pbXVsKERlLFp0KXwwLEU9RStNYXRoLmltdWwoTGUsWWUpfDAsbT0obT1tK01hdGguaW11bChMZSxUdCl8MCkrTWF0aC5pbXVsKFJlLFllKXwwLEE9QStNYXRoLmltdWwoUmUsVHQpfDAsRT1FK01hdGguaW11bChq''@;'; put 'put ''ZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLE10KXwwKStNYXRoLmltdWwoa2UsZnQpfDAsQT1BK01hdGguaW11bChrZSxNdCl8MCxFPUUrTWF0aC5pbXVsKHhlLG5uKXwwLG09KG09bStNYXRoLmltdWwoeGUsV3QpfDApK01hdGguaW11bCh5ZSxubil8MCxBPUErTWF0aC5pbXVsKHllLFd0''@;'; put 'put ''KXwwLEU9RStNYXRoLmltdWwoVWUsZG4pfDAsbT0obT1tK01hdGguaW11bChVZSxtbil8MCkrTWF0aC5pbXVsKEplLGRuKXwwLEE9QStNYXRoLmltdWwoSmUsbW4pfDA7dmFyIERhPShqKyhFPUUrTWF0aC5pbXVsKG5lLGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsdG4p''@;'; put 'put ''fDApK01hdGguaW11bChzZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx0bil8MCkrKG0+Pj4xMyl8MCkrKERhPj4+MjYpfDAsRGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLGFuKSxtPShtPU1hdGguaW11bChJZSxsbikpK01hdGguaW11bChhdCxhbil8MCxBPU1hdGgu''@;'; put 'put ''aW11bChhdCxsbiksRT1FK01hdGguaW11bCh1dCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHV0LGh0KXwwKStNYXRoLmltdWwoWGUsaG4pfDAsQT1BK01hdGguaW11bChYZSxodCl8MCxFPUUrTWF0aC5pbXVsKHZ0LEJ0KXwwLG09KG09bStNYXRoLmltdWwodnQsQXQpfDApK01hdGguaW11bChT''@;'; put 'put ''dCxCdCl8MCxBPUErTWF0aC5pbXVsKFN0LEF0KXwwLEU9RStNYXRoLmltdWwocnQsc3QpfDAsbT0obT1tK01hdGguaW11bChydCxadCl8MCkrTWF0aC5pbXVsKFFlLHN0KXwwLEE9QStNYXRoLmltdWwoUWUsWnQpfDAsRT1FK01hdGguaW11bChBZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKEFl''@;'; put 'put ''LFR0KXwwKStNYXRoLmltdWwoRGUsWWUpfDAsQT1BK01hdGguaW11bChEZSxUdCl8MCxFPUUrTWF0aC5pbXVsKExlLGZ0KXwwLG09KG09bStNYXRoLmltdWwoTGUsTXQpfDApK01hdGguaW11bChSZSxmdCl8MCxBPUErTWF0aC5pbXVsKFJlLE10KXwwLEU9RStNYXRoLmltdWwoamUsbm4pfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bChqZSxXdCl8MCkrTWF0aC5pbXVsKGtlLG5uKXwwLEE9QStNYXRoLmltdWwoa2UsV3QpfDAsRT1FK01hdGguaW11bCh4ZSxkbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLG1uKXwwKStNYXRoLmltdWwoeWUsZG4pfDAsQT1BK01hdGguaW11bCh5ZSxtbil8MDt2YXIg''@;'; put 'put ''aGk9KGorKEU9RStNYXRoLmltdWwoVWUsZm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChVZSx0bil8MCkrTWF0aC5pbXVsKEplLGZuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEplLHRuKXwwKSsobT4+PjEzKXwwKSsoaGk+Pj4yNil8MCxoaSY9NjcxMDg4NjMsRT1N''@;'; put 'put ''YXRoLmltdWwoSWUsaG4pLG09KG09TWF0aC5pbXVsKEllLGh0KSkrTWF0aC5pbXVsKGF0LGhuKXwwLEE9TWF0aC5pbXVsKGF0LGh0KSxFPUUrTWF0aC5pbXVsKHV0LEJ0KXwwLG09KG09bStNYXRoLmltdWwodXQsQXQpfDApK01hdGguaW11bChYZSxCdCl8MCxBPUErTWF0aC5pbXVsKFhlLEF0''@;'; put 'put ''KXwwLEU9RStNYXRoLmltdWwodnQsc3QpfDAsbT0obT1tK01hdGguaW11bCh2dCxadCl8MCkrTWF0aC5pbXVsKFN0LHN0KXwwLEE9QStNYXRoLmltdWwoU3QsWnQpfDAsRT1FK01hdGguaW11bChydCxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LFR0KXwwKStNYXRoLmltdWwoUWUsWWUpfDAs''@;'; put 'put ''QT1BK01hdGguaW11bChRZSxUdCl8MCxFPUUrTWF0aC5pbXVsKEFlLGZ0KXwwLG09KG09bStNYXRoLmltdWwoQWUsTXQpfDApK01hdGguaW11bChEZSxmdCl8MCxBPUErTWF0aC5pbXVsKERlLE10KXwwLEU9RStNYXRoLmltdWwoTGUsbm4pfDAsbT0obT1tK01hdGguaW11bChMZSxXdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKFJlLG5uKXwwLEE9QStNYXRoLmltdWwoUmUsV3QpfDAsRT1FK01hdGguaW11bChqZSxkbil8MCxtPShtPW0rTWF0aC5pbXVsKGplLG1uKXwwKStNYXRoLmltdWwoa2UsZG4pfDAsQT1BK01hdGguaW11bChrZSxtbil8MDt2YXIgcWk9KGorKEU9RStNYXRoLmltdWwoeGUsZm4p''@;'; put 'put ''fDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh4ZSx0bil8MCkrTWF0aC5pbXVsKHllLGZuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHllLHRuKXwwKSsobT4+PjEzKXwwKSsocWk+Pj4yNil8MCxxaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsQnQpLG09KG09TWF0aC5p''@;'; put 'put ''bXVsKEllLEF0KSkrTWF0aC5pbXVsKGF0LEJ0KXwwLEE9TWF0aC5pbXVsKGF0LEF0KSxFPUUrTWF0aC5pbXVsKHV0LHN0KXwwLG09KG09bStNYXRoLmltdWwodXQsWnQpfDApK01hdGguaW11bChYZSxzdCl8MCxBPUErTWF0aC5pbXVsKFhlLFp0KXwwLEU9RStNYXRoLmltdWwodnQsWWUpfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bCh2dCxUdCl8MCkrTWF0aC5pbXVsKFN0LFllKXwwLEE9QStNYXRoLmltdWwoU3QsVHQpfDAsRT1FK01hdGguaW11bChydCxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LE10KXwwKStNYXRoLmltdWwoUWUsZnQpfDAsQT1BK01hdGguaW11bChRZSxNdCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKEFlLG5uKXwwLG09KG09bStNYXRoLmltdWwoQWUsV3QpfDApK01hdGguaW11bChEZSxubil8MCxBPUErTWF0aC5pbXVsKERlLFd0KXwwLEU9RStNYXRoLmltdWwoTGUsZG4pfDAsbT0obT1tK01hdGguaW11bChMZSxtbil8MCkrTWF0aC5pbXVsKFJlLGRuKXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoUmUsbW4pfDA7dmFyIFBhPShqKyhFPUUrTWF0aC5pbXVsKGplLGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoamUsdG4pfDApK01hdGguaW11bChrZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChrZSx0bil8MCkrKG0+Pj4xMyl8MCkrKFBhPj4+MjYp''@;'; put 'put ''fDAsUGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLHN0KSxtPShtPU1hdGguaW11bChJZSxadCkpK01hdGguaW11bChhdCxzdCl8MCxBPU1hdGguaW11bChhdCxadCksRT1FK01hdGguaW11bCh1dCxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKHV0LFR0KXwwKStNYXRoLmltdWwoWGUsWWUpfDAs''@;'; put 'put ''QT1BK01hdGguaW11bChYZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHZ0LGZ0KXwwLG09KG09bStNYXRoLmltdWwodnQsTXQpfDApK01hdGguaW11bChTdCxmdCl8MCxBPUErTWF0aC5pbXVsKFN0LE10KXwwLEU9RStNYXRoLmltdWwocnQsbm4pfDAsbT0obT1tK01hdGguaW11bChydCxXdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKFFlLG5uKXwwLEE9QStNYXRoLmltdWwoUWUsV3QpfDAsRT1FK01hdGguaW11bChBZSxkbil8MCxtPShtPW0rTWF0aC5pbXVsKEFlLG1uKXwwKStNYXRoLmltdWwoRGUsZG4pfDAsQT1BK01hdGguaW11bChEZSxtbil8MDt2YXIgdXI9KGorKEU9RStNYXRoLmltdWwoTGUsZm4p''@;'; put 'put ''fDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChMZSx0bil8MCkrTWF0aC5pbXVsKFJlLGZuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFJlLHRuKXwwKSsobT4+PjEzKXwwKSsodXI+Pj4yNil8MCx1ciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsWWUpLG09KG09TWF0aC5p''@;'; put 'put ''bXVsKEllLFR0KSkrTWF0aC5pbXVsKGF0LFllKXwwLEE9TWF0aC5pbXVsKGF0LFR0KSxFPUUrTWF0aC5pbXVsKHV0LGZ0KXwwLG09KG09bStNYXRoLmltdWwodXQsTXQpfDApK01hdGguaW11bChYZSxmdCl8MCxBPUErTWF0aC5pbXVsKFhlLE10KXwwLEU9RStNYXRoLmltdWwodnQsbm4pfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bCh2dCxXdCl8MCkrTWF0aC5pbXVsKFN0LG5uKXwwLEE9QStNYXRoLmltdWwoU3QsV3QpfDAsRT1FK01hdGguaW11bChydCxkbil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LG1uKXwwKStNYXRoLmltdWwoUWUsZG4pfDAsQT1BK01hdGguaW11bChRZSxtbil8MDt2YXIg''@;'; put 'put ''YmE9KGorKEU9RStNYXRoLmltdWwoQWUsZm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChBZSx0bil8MCkrTWF0aC5pbXVsKERlLGZuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKERlLHRuKXwwKSsobT4+PjEzKXwwKSsoYmE+Pj4yNil8MCxiYSY9NjcxMDg4NjMsRT1N''@;'; put 'put ''YXRoLmltdWwoSWUsZnQpLG09KG09TWF0aC5pbXVsKEllLE10KSkrTWF0aC5pbXVsKGF0LGZ0KXwwLEE9TWF0aC5pbXVsKGF0LE10KSxFPUUrTWF0aC5pbXVsKHV0LG5uKXwwLG09KG09bStNYXRoLmltdWwodXQsV3QpfDApK01hdGguaW11bChYZSxubil8MCxBPUErTWF0aC5pbXVsKFhlLFd0''@;'; put 'put ''KXwwLEU9RStNYXRoLmltdWwodnQsZG4pfDAsbT0obT1tK01hdGguaW11bCh2dCxtbil8MCkrTWF0aC5pbXVsKFN0LGRuKXwwLEE9QStNYXRoLmltdWwoU3QsbW4pfDA7dmFyIE1pPShqKyhFPUUrTWF0aC5pbXVsKHJ0LGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwocnQsdG4p''@;'; put 'put ''fDApK01hdGguaW11bChRZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChRZSx0bil8MCkrKG0+Pj4xMyl8MCkrKE1pPj4+MjYpfDAsTWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLG5uKSxtPShtPU1hdGguaW11bChJZSxXdCkpK01hdGguaW11bChhdCxubil8MCxBPU1hdGgu''@;'; put 'put ''aW11bChhdCxXdCksRT1FK01hdGguaW11bCh1dCxkbil8MCxtPShtPW0rTWF0aC5pbXVsKHV0LG1uKXwwKStNYXRoLmltdWwoWGUsZG4pfDAsQT1BK01hdGguaW11bChYZSxtbil8MDt2YXIgd2E9KGorKEU9RStNYXRoLmltdWwodnQsZm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11''@;'; put 'put ''bCh2dCx0bil8MCkrTWF0aC5pbXVsKFN0LGZuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFN0LHRuKXwwKSsobT4+PjEzKXwwKSsod2E+Pj4yNil8MCx3YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsZG4pLG09KG09TWF0aC5pbXVsKEllLG1uKSkrTWF0aC5pbXVsKGF0LGRuKXww''@;'; put 'put ''LEE9TWF0aC5pbXVsKGF0LG1uKTt2YXIgZWE9KGorKEU9RStNYXRoLmltdWwodXQsZm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh1dCx0bil8MCkrTWF0aC5pbXVsKFhlLGZuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFhlLHRuKXwwKSsobT4+PjEzKXwwKSsoZWE+''@;'; put 'put ''Pj4yNil8MCxlYSY9NjcxMDg4NjM7dmFyIEZyPShqKyhFPU1hdGguaW11bChJZSxmbikpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwoSWUsdG4pKStNYXRoLmltdWwoYXQsZm4pfDApKTw8MTMpfDA7cmV0dXJuIGo9KChBPU1hdGguaW11bChhdCx0bikpKyhtPj4+MTMpfDApKyhGcj4+PjI2''@;'; put 'put ''KXwwLEZyJj02NzEwODg2MyxIWzBdPWNhLEhbMV09X2ksSFsyXT12cixIWzNdPVhpLEhbNF09UWksSFs1XT1WaSxIWzZdPWVpLEhbN109dWEsSFs4XT1SaSxIWzldPURhLEhbMTBdPWhpLEhbMTFdPXFpLEhbMTJdPVBhLEhbMTNdPXVyLEhbMTRdPWJhLEhbMTVdPU1pLEhbMTZdPXdhLEhbMTdd''@;'; put 'put ''PWVhLEhbMThdPUZyLDAhPT1qJiYoSFsxOV09aix4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBlZShCLGcseSl7cmV0dXJuKG5ldyBKKS5tdWxwKEIsZyx5KX1mdW5jdGlvbiBKKEIsZyl7dGhpcy54PUIsdGhpcy55PWd9TWF0aC5pbXVsfHwoVz1ZKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlv''@;'; put 'put ''bihnLHkpe3ZhciB4LEM9dGhpcy5sZW5ndGgrZy5sZW5ndGg7cmV0dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1nLmxlbmd0aD9XKHRoaXMsZyx5KTpDPDYzP1kodGhpcyxnLHkpOkM8MTAyND9mdW5jdGlvbiBxKEIsZyx5KXt5Lm5lZ2F0aXZlPWcubmVnYXRpdmVeQi5uZWdhdGl2ZSx5''@;'; put 'put ''Lmxlbmd0aD1CLmxlbmd0aCtnLmxlbmd0aDtmb3IodmFyIHg9MCxDPTAsVD0wO1Q8eS5sZW5ndGgtMTtUKyspe3ZhciBIPUM7Qz0wO2Zvcih2YXIgaj02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxnLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC1CLmxlbmd0aCsxKTttPD1FO20rKyl7dmFyIHNl''@;'; put 'put ''PSgwfEIud29yZHNbVC1tXSkqKDB8Zy53b3Jkc1ttXSksQ2U9NjcxMDg4NjMmc2U7aj02NzEwODg2MyYoQ2U9Q2UranwwKSxDKz0oSD0oSD1IKyhzZS82NzEwODg2NHwwKXwwKSsoQ2U+Pj4yNil8MCk+Pj4yNixIJj02NzEwODg2M315LndvcmRzW1RdPWoseD1ILEg9Q31yZXR1cm4gMCE9PXg/''@;'; put 'put ''eS53b3Jkc1tUXT14OnkubGVuZ3RoLS0seS5zdHJpcCgpfSh0aGlzLGcseSk6ZWUodGhpcyxnLHkpLHh9LEoucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PW5ldyBBcnJheShnKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMoZyktMSxDPTA7QzxnO0MrKyl5W0NdPXRo''@;'; put 'put ''aXMucmV2QmluKEMseCxnKTtyZXR1cm4geX0sSi5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGcseSx4KXtpZigwPT09Z3x8Zz09PXgtMSlyZXR1cm4gZztmb3IodmFyIEM9MCxUPTA7VDx5O1QrKylDfD0oMSZnKTw8eS1ULTEsZz4+PTE7cmV0dXJuIEN9LEoucHJvdG90eXBlLnBlcm11dGU9''@;'; put 'put ''ZnVuY3Rpb24oZyx5LHgsQyxULEgpe2Zvcih2YXIgaj0wO2o8SDtqKyspQ1tqXT15W2dbal1dLFRbal09eFtnW2pdXX0sSi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGcseSx4LEMsVCxIKXt0aGlzLnBlcm11dGUoSCxnLHkseCxDLFQpO2Zvcih2YXIgaj0xO2o8VDtqPDw9MSlmb3Io''@;'; put 'put ''dmFyIEU9ajw8MSxtPU1hdGguY29zKDIqTWF0aC5QSS9FKSxBPU1hdGguc2luKDIqTWF0aC5QSS9FKSxhZT0wO2FlPFQ7YWUrPUUpZm9yKHZhciBuZT1tLHNlPUEsQ2U9MDtDZTxqO0NlKyspe3ZhciBVZT14W2FlK0NlXSxKZT1DW2FlK0NlXSxpdD14W2FlK0NlK2pdLHhlPUNbYWUrQ2Ural0s''@;'; put 'put ''eWU9bmUqaXQtc2UqeGU7eGU9bmUqeGUrc2UqaXQseFthZStDZV09VWUrKGl0PXllKSxDW2FlK0NlXT1KZSt4ZSx4W2FlK0NlK2pdPVVlLWl0LENbYWUrQ2Ural09SmUteGUsQ2UhPT1FJiYoeWU9bSpuZS1BKnNlLHNlPW0qc2UrQSpuZSxuZT15ZSl9fSxKLnByb3RvdHlwZS5ndWVzc0xlbjEz''@;'; put 'put ''Yj1mdW5jdGlvbihnLHkpe3ZhciB4PTF8TWF0aC5tYXgoeSxnKSxDPTEmeCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVybiAxPDxUKzErQ30sSi5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGcseSx4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFy''@;'; put 'put ''IFQ9Z1tDXTtnW0NdPWdbeC1DLTFdLGdbeC1DLTFdPVQsVD15W0NdLHlbQ109LXlbeC1DLTFdLHlbeC1DLTFdPS1UfX0sSi5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGcseSl7Zm9yKHZhciB4PTAsQz0wO0M8eS8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKGdbMipDKzFd''@;'; put 'put ''L3kpK01hdGgucm91bmQoZ1syKkNdL3kpK3g7Z1tDXT02NzEwODg2MyZULHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4gZ30sSi5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihnLHkseCxDKXtmb3IodmFyIFQ9MCxIPTA7SDx5O0grKyl4WzIqSF09ODE5MSYoVCs9MHxn''@;'; put 'put ''W0hdKSx4WzIqSCsxXT04MTkxJihUPj4+PTEzKSxUPj4+PTEzO2ZvcihIPTIqeTtIPEM7KytIKXhbSF09MDtwKDA9PT1UKSxwKCEoLTgxOTImVCkpfSxKLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT1uZXcgQXJyYXkoZykseD0wO3g8Zzt4KyspeVt4XT0wO3JldHVybiB5''@;'; put 'put ''fSxKLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGcseSx4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NMZW4xM2IoZy5sZW5ndGgseS5sZW5ndGgpLFQ9dGhpcy5tYWtlUkJUKEMpLEg9dGhpcy5zdHViKEMpLGo9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFy''@;'; put 'put ''cmF5KEMpLGFlPW5ldyBBcnJheShDKSxuZT1uZXcgQXJyYXkoQyksc2U9eC53b3JkcztzZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2IoZy53b3JkcyxnLmxlbmd0aCxqLEMpLHRoaXMuY29udmVydDEzYih5LndvcmRzLHkubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oaixILEUsbSxDLFQp''@;'; put 'put ''LHRoaXMudHJhbnNmb3JtKEEsSCxhZSxuZSxDLFQpO2Zvcih2YXIgQ2U9MDtDZTxDO0NlKyspe3ZhciBVZT1FW0NlXSphZVtDZV0tbVtDZV0qbmVbQ2VdO21bQ2VdPUVbQ2VdKm5lW0NlXSttW0NlXSphZVtDZV0sRVtDZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRy''@;'; put 'put ''YW5zZm9ybShFLG0sc2UsSCxDLFQpLHRoaXMuY29uanVnYXRlKHNlLEgsQyksdGhpcy5ub3JtYWxpemUxM2Ioc2UsQykseC5uZWdhdGl2ZT1nLm5lZ2F0aXZlXnkubmVnYXRpdmUseC5sZW5ndGg9Zy5sZW5ndGgreS5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24o''@;'; put 'put ''Zyl7dmFyIHk9bmV3IHcobnVsbCk7cmV0dXJuIHkud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSx0aGlzLm11bFRvKGcseSl9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oZyl7dmFyIHk9bmV3IHcobnVsbCk7cmV0dXJuIHkud29yZHM9bmV3IEFycmF5KHRoaXMubGVu''@;'; put 'put ''Z3RoK2cubGVuZ3RoKSxlZSh0aGlzLGcseSl9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhnLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZykscChnPDY3MTA4ODY0KTtmb3IodmFy''@;'; put 'put ''IHk9MCx4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKmcsVD0oNjcxMDg4NjMmQykrKDY3MTA4ODYzJnkpO3k+Pj0yNix5Kz1DLzY3MTA4ODY0fDAseSs9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PXkmJih0aGlzLndvcmRz''@;'; put 'put ''W3hdPXksdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGcpfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnKXt2YXIgeT1mdW5jdGlvbiBaKEIpe2Zvcih2YXIgZz1uZXcgQXJyYXkoQi5iaXRMZW5ndGgoKSkseT0wO3k8Zy5sZW5ndGg7eSsrKXt2YXIgQz15JTI2O2dbeV09KEIud29yZHNbeS8yNnww''@;'; put 'put ''XSYxPDxDKT4+PkN9cmV0dXJuIGd9KGcpO2lmKDA9PT15Lmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8eS5sZW5ndGgmJjA9PT15W0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzx5Lmxlbmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPHkubGVuZ3RoO0MrKyxUPVQu''@;'; put 'put ''c3FyKCkpMCE9PXlbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgVCx5PWclMjYseD0oZy15KS8yNixDPTY3MTA4ODYzPj4+MjYteTw8MjYteTtpZigwIT09eSl7dmFyIEg9MDtm''@;'; put 'put ''b3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgaj10aGlzLndvcmRzW1RdJkM7dGhpcy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1qPDx5fEgsSD1qPj4+MjYteX1IJiYodGhpcy53b3Jkc1tUXT1ILHRoaXMubGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+''@;'; put 'put ''PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1QrKyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUpLHRo''@;'; put 'put ''aXMuaXVzaGxuKGcpfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZyx5LHgpe3ZhciBDO3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKSxDPXk/KHkteSUyNikvMjY6MDt2YXIgVD1nJTI2LEg9TWF0aC5taW4oKGctVCkvMjYsdGhpcy5sZW5ndGgpLGo9NjcxMDg4NjNeNjcxMDg4NjM+''@;'; put 'put ''Pj5UPDxULEU9eDtpZihDLT1ILEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDttPEg7bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0aD1IfWlmKDAhPT1IKWlmKHRoaXMubGVuZ3RoPkgpZm9yKHRoaXMubGVuZ3RoLT1ILG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlz''@;'; put 'put ''LndvcmRzW21dPXRoaXMud29yZHNbbStIXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIGFlPTB8dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8YWU+Pj5U''@;'; put 'put ''LEE9YWUman1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGcseSx4KXtyZXR1cm4gcCgwPT09dGhpcy5u''@;'; put 'put ''ZWdhdGl2ZSksdGhpcy5pdXNocm4oZyx5LHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oZyl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGcpfSx3LnByb3RvdHlwZS5zaHJu''@;'; put 'put ''PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oZyl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGcpfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFy''@;'; put 'put ''IHk9ZyUyNix4PShnLXkpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jkc1t4XSYxPDx5KSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHk9ZyUyNix4PShnLXkpLzI2O3JldHVybiBwKDA9PT10aGlz''@;'; put 'put ''Lm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09eSYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT15JiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNe''@;'; put 'put ''NjcxMDg4NjM+Pj55PDx5KSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihnKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIm51bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQp''@;'; put 'put ''LGc8MD90aGlzLmlzdWJuKC1nKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPGc/KHRoaXMud29yZHNbMF09Zy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKGcpLHRo''@;'; put 'put ''aXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihnKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKGcpe3RoaXMud29yZHNbMF0rPWc7Zm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t5XT49NjcxMDg4NjQ7eSsrKXRoaXMud29yZHNbeV0tPTY3MTA4ODY0LHk9''@;'; put 'put ''PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbeSsxXT0xOnRoaXMud29yZHNbeSsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCx5KzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGcpe2lmKHAoIm51bWJlciI9PXR5cGVvZiBnKSxwKGc8Njcx''@;'; put 'put ''MDg4NjQpLGc8MClyZXR1cm4gdGhpcy5pYWRkbigtZyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWcsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDAp''@;'; put 'put ''dGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3ldPDA7eSsrKXRoaXMud29yZHNbeV0rPTY3MTA4ODY0LHRoaXMud29yZHNbeSsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oZyl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihnKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAs''@;'; put 'put ''dGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihnLHkseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKGcubGVuZ3RoK3gpO3ZhciBILGo9MDtmb3IoVD0wO1Q8Zy5sZW5ndGg7VCsr''@;'; put 'put ''KXtIPSgwfHRoaXMud29yZHNbVCt4XSkrajt2YXIgRT0oMHxnLndvcmRzW1RdKSp5O2o9KChILT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIfWZvcig7VDx0aGlzLmxlbmd0aC14O1QrKylqPShIPSgwfHRoaXMud29yZHNbVCt4XSkr''@;'; put 'put ''aik+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIO2lmKDA9PT1qKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKHAoLTE9PT1qKSxqPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKWo9KEg9LSgwfHRoaXMud29yZHNbVF0pK2opPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJkg7cmV0dXJu''@;'; put 'put ''IHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKGcseSl7dmFyIHgsQz10aGlzLmNsb25lKCksVD1nLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0cyhIKSkmJihUPVQudXNobG4oeCksQy5pdXNo''@;'; put 'put ''bG4oeCksSD0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5sZW5ndGg7aWYoIm1vZCIhPT15KXsobT1uZXcgdyhudWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0w''@;'; put 'put ''fXZhciBhZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09YWUubmVnYXRpdmUmJihDPWFlLG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFyIG5lPUUtMTtuZT49MDtuZS0tKXt2YXIgc2U9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0aCtuZV0pKygwfEMud29yZHNbVC5sZW5n''@;'; put 'put ''dGgrbmUtMV0pO2ZvcihzZT1NYXRoLm1pbihzZS9IfDAsNjcxMDg4NjMpLEMuX2lzaGxuc3VibXVsKFQsc2UsbmUpOzAhPT1DLm5lZ2F0aXZlOylzZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsbmUpLEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1tu''@;'; put 'put ''ZV09c2UpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09eSYmMCE9PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihnLHkseCl7cmV0dXJuIHAoIWcuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2Rpdjpu''@;'; put 'put ''ZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChnLHkpLCJtb2QiIT09eSYmKEM9SC5kaXYubmVnKCkpLCJkaXYiIT09eSYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChnKSks''@;'; put 'put ''e2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlPyhIPXRoaXMuZGl2bW9kKGcubmVnKCkseSksIm1vZCIhPT15JiYoQz1ILmRpdi5uZWcoKSkse2RpdjpDLG1vZDpILm1vZH0pOnRoaXMubmVnYXRpdmUmZy5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1v''@;'; put 'put ''ZChnLm5lZygpLHkpLCJkaXYiIT09eSYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaXN1YihnKSkse2RpdjpILmRpdixtb2Q6VH0pOmcubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChnKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1nLmxlbmd0aD8iZGl2''@;'; put 'put ''Ij09PXk/e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09eT97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kbihnLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp0aGlzLl93''@;'; put 'put ''b3JkRGl2KGcseSk7dmFyIEMsVCxIfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVt''@;'; put 'put ''b2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oZyl7dmFyIHk9dGhpcy5kaXZtb2QoZyk7aWYoeS5tb2QuaXNaZXJvKCkpcmV0dXJuIHkuZGl2O3ZhciB4PTAhPT15LmRpdi5uZWdhdGl2ZT95Lm1v''@;'; put 'put ''ZC5pc3ViKGcpOnkubW9kLEM9Zy51c2hybigxKSxUPWcuYW5kbG4oMSksSD14LmNtcChDKTtyZXR1cm4gSDwwfHwxPT09VCYmMD09PUg/eS5kaXY6MCE9PXkuZGl2Lm5lZ2F0aXZlP3kuZGl2LmlzdWJuKDEpOnkuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGcpe3Ao''@;'; put 'put ''Zzw9NjcxMDg4NjMpO2Zvcih2YXIgeT0oMTw8MjYpJWcseD0wLEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl4PSh5KngrKDB8dGhpcy53b3Jkc1tDXSkpJWc7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGcpe3AoZzw9NjcxMDg4NjMpO2Zvcih2YXIgeT0wLHg9dGhpcy5s''@;'; put 'put ''ZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqeTt0aGlzLndvcmRzW3hdPUMvZ3wwLHk9QyVnfXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihnKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuZWdjZD1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlKSxwKCFnLmlzWmVybygpKTt2YXIgeT10aGlzLHg9Zy5jbG9uZSgpO3k9MCE9PXkubmVnYXRpdmU/eS51bW9kKGcpOnkuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPW5ldyB3KDApLGo9bmV3IHco''@;'; put 'put ''MSksRT0wO3kuaXNFdmVuKCkmJnguaXNFdmVuKCk7KXkuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9eS5jbG9uZSgpOyF5LmlzWmVybygpOyl7Zm9yKHZhciBhZT0wLG5lPTE7ISh5LndvcmRzWzBdJm5lKSYmYWU8MjY7KythZSxuZTw8PTEpO2lmKGFl''@;'; put 'put ''PjApZm9yKHkuaXVzaHJuKGFlKTthZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkpJiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBzZT0wLENlPTE7ISh4LndvcmRzWzBdJkNlKSYmc2U8MjY7KytzZSxDZTw8PTEpO2lmKHNlPjApZm9y''@;'; put 'put ''KHguaXVzaHJuKHNlKTtzZS0tID4wOykoSC5pc09kZCgpfHxqLmlzT2RkKCkpJiYoSC5pYWRkKG0pLGouaXN1YihBKSksSC5pdXNocm4oMSksai5pdXNocm4oMSk7eS5jbXAoeCk+PTA/KHkuaXN1Yih4KSxDLmlzdWIoSCksVC5pc3ViKGopKTooeC5pc3ViKHkpLEguaXN1YihDKSxqLmlzdWIo''@;'; put 'put ''VCkpfXJldHVybnthOkgsYjpqLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlKSxwKCFnLmlzWmVybygpKTt2YXIgYWUseT10aGlzLHg9Zy5jbG9uZSgpO3k9MCE9PXkubmVnYXRpdmU/eS51bW9kKGcpOnkuY2xvbmUoKTtm''@;'; put 'put ''b3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPXguY2xvbmUoKTt5LmNtcG4oMSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIGo9MCxFPTE7ISh5LndvcmRzWzBdJkUpJiZqPDI2OysraixFPDw9MSk7aWYoaj4wKWZvcih5Lml1c2hybihqKTtqLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRk''@;'; put 'put ''KEgpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoSCksVC5pdXNocm4oMSk7eS5jbXAoeCk+PTA/KHkuaXN1Yih4KSxDLmlzdWIoVCkpOih4''@;'; put 'put ''LmlzdWIoeSksVC5pc3ViKEMpKX1yZXR1cm4oYWU9MD09PXkuY21wbigxKT9DOlQpLmNtcG4oMCk8MCYmYWUuaWFkZChnKSxhZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGcpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGcuYWJzKCk7aWYoZy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMo''@;'; put 'put ''KTt2YXIgeT10aGlzLmNsb25lKCkseD1nLmNsb25lKCk7eS5uZWdhdGl2ZT0wLHgubmVnYXRpdmU9MDtmb3IodmFyIEM9MDt5LmlzRXZlbigpJiZ4LmlzRXZlbigpO0MrKyl5Lml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7eS5pc0V2ZW4oKTspeS5pdXNocm4oMSk7Zm9yKDt4''@;'; put 'put ''LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD15LmNtcCh4KTtpZihUPDApe3ZhciBIPXk7eT14LHg9SH1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBuKDEpKWJyZWFrO3kuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRo''@;'; put 'put ''aXMuZWdjZChnKS5hLnVtb2QoZyl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihnKXty''@;'; put 'put ''ZXR1cm4gdGhpcy53b3Jkc1swXSZnfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyk7dmFyIHk9ZyUyNix4PShnLXkpLzI2LEM9MTw8eTtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0''@;'; put 'put ''aGlzO2Zvcih2YXIgVD1DLEg9eDswIT09VCYmSDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPTB8dGhpcy53b3Jkc1tIXTtUPShqKz1UKT4+PjI2LHRoaXMud29yZHNbSF09aiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tIXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJv''@;'; put 'put ''dG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGcpe3ZhciB4LHk9ZzwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYheSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYm''@;'; put 'put ''eSlyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXt5JiYoZz0tZykscChnPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09Zz8wOkM8Zz8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14''@;'; put 'put ''Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihnKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiAxO3ZhciB5PXRoaXMudWNtcChnKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRp''@;'; put 'put ''dmU/MHwteTp5fSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGcpe2lmKHRoaXMubGVuZ3RoPmcubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGcubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgeT0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hd''@;'; put 'put ''LFQ9MHxnLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/eT0tMTpDPlQmJih5PTEpO2JyZWFrfX1yZXR1cm4geX0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wKGcp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wbihnKX0sdy5wcm90''@;'; put 'put ''b3R5cGUubHQ9ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcChnKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPD0wfSx3LnByb3RvdHlwZS5lcW49''@;'; put 'put ''ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXAoZyl9LHcucmVkPWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgTWUoZyl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBwKCF0''@;'; put 'put ''aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHAoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGcpfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHAodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnJlZD1nLHRoaXN9LHcucHJv''@;'; put 'put ''dG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBwKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGcpfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZEFkZCB3''@;'; put 'put ''b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsZyl9LHcu''@;'; put 'put ''cHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJU3Vi''@;'; put 'put ''IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsZyl9LHcu''@;'; put 'put ''cHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQubXVsKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oZyl7''@;'; put 'put ''cmV0dXJuIHAodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLmltdWwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNxciB3b3Jr''@;'; put 'put ''cyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJl''@;'; put 'put ''ZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0''@;'; put 'put ''aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBwKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQmJiFnLnJlZCwicmVk''@;'; put 'put ''UG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxnKX07dmFyIHJlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoQixnKXt0aGlzLm5hbWU9Qix0aGlzLnA9bmV3IHcoZywxNiksdGhp''@;'; put 'put ''cy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHVlKCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBnZSgpe2llLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIi''@;'; put 'put ''LCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFRlKCl7aWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1m''@;'; put 'put ''dW5jdGlvbiBNZShCKXtpZigic3RyaW5nIj09dHlwZW9mIEIpe3ZhciBnPXcuX3ByaW1lKEIpO3RoaXMubT1nLnAsdGhpcy5wcmltZT1nfWVsc2UgcChCLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPUIsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIFpl''@;'; put 'put ''KEIpe01lLmNhbGwodGhpcyxCKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkp''@;'; put 'put ''LHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5f''@;'; put 'put ''dG1wPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IHcobnVsbCk7cmV0dXJuIGcud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxnfSxpZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihnKXt2YXIgeCx5PWc7ZG97dGhpcy5zcGxpdCh5LHRoaXMudG1wKSx4PSh5PSh5PXRoaXMu''@;'; put 'put ''aW11bEsoeSkpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMubik7dmFyIEM9eDx0aGlzLm4/LTE6eS51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1DPyh5LndvcmRzWzBdPTAseS5sZW5ndGg9MSk6Qz4wP3kuaXN1Yih0aGlzLnApOnZvaWQgMCE9PXkuc3RyaXA/eS5z''@;'; put 'put ''dHJpcCgpOnkuX3N0cmlwKCkseX0saWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcseSl7Zy5pdXNocm4odGhpcy5uLDAseSl9LGllLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pbXVsKHRoaXMuayl9LFYodWUsaWUpLHVlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlv''@;'; put 'put ''bihnLHkpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4oZy5sZW5ndGgsOSksVD0wO1Q8QztUKyspeS53b3Jkc1tUXT1nLndvcmRzW1RdO2lmKHkubGVuZ3RoPUMsZy5sZW5ndGg8PTkpcmV0dXJuIGcud29yZHNbMF09MCx2b2lkKGcubGVuZ3RoPTEpO3ZhciBIPWcud29yZHNbOV07Zm9y''@;'; put 'put ''KHkud29yZHNbeS5sZW5ndGgrK109SCZ4LFQ9MTA7VDxnLmxlbmd0aDtUKyspe3ZhciBqPTB8Zy53b3Jkc1tUXTtnLndvcmRzW1QtMTBdPShqJngpPDw0fEg+Pj4yMixIPWp9Zy53b3Jkc1tULTEwXT1IPj4+PTIyLGcubGVuZ3RoLT0wPT09SCYmZy5sZW5ndGg+MTA/MTA6OX0sdWUucHJvdG90''@;'; put 'put ''eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2cud29yZHNbZy5sZW5ndGhdPTAsZy53b3Jkc1tnLmxlbmd0aCsxXT0wLGcubGVuZ3RoKz0yO2Zvcih2YXIgeT0wLHg9MDt4PGcubGVuZ3RoO3grKyl7dmFyIEM9MHxnLndvcmRzW3hdO2cud29yZHNbeF09NjcxMDg4NjMmKHkrPTk3NypDKSx5PTY0KkMr''@;'; put 'put ''KHkvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiYoZy5sZW5ndGgtLSwwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmZy5sZW5ndGgtLSksZ30sVihnZSxpZSksVihfZSxpZSksVihUZSxpZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2Zvcih2YXIg''@;'; put 'put ''eT0wLHg9MDt4PGcubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8Zy53b3Jkc1t4XSkreSxUPTY3MTA4ODYzJkM7Qz4+Pj0yNixnLndvcmRzW3hdPVQseT1DfXJldHVybiAwIT09eSYmKGcud29yZHNbZy5sZW5ndGgrK109eSksZ30sdy5fcHJpbWU9ZnVuY3Rpb24oZyl7aWYocmVbZ10pcmV0dXJu''@;'; put 'put ''IHJlW2ddO3ZhciB5O2lmKCJrMjU2Ij09PWcpeT1uZXcgdWU7ZWxzZSBpZigicDIyNCI9PT1nKXk9bmV3IGdlO2Vsc2UgaWYoInAxOTIiPT09Zyl5PW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09Zyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitnKTt5PW5ldyBUZX1yZXR1cm4g''@;'; put 'put ''cmVbZ109eSx5fSxNZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwKGcucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LE1lLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5j''@;'; put 'put ''dGlvbihnLHkpe3AoIShnLm5lZ2F0aXZlfHkubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAoZy5yZWQmJmcucmVkPT09eS5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sTWUucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oZyl7cmV0dXJu''@;'; put 'put ''IHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGcpLl9mb3JjZVJlZCh0aGlzKTpnLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LE1lLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNaZXJvKCk/Zy5jbG9uZSgpOnRoaXMubS5zdWIoZykuX2ZvcmNlUmVkKHRo''@;'; put 'put ''aXMpfSxNZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuYWRkKHkpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sTWUucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyx5KXt0aGlz''@;'; put 'put ''Ll92ZXJpZnkyKGcseSk7dmFyIHg9Zy5pYWRkKHkpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxNZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuc3ViKHkpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRk''@;'; put 'put ''KHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LE1lLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuaXN1Yih5KTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LE1lLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oZyx5KXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fdmVyaWZ5MShnKSx0aGlzLmltb2QoZy51c2hsbih5KSl9LE1lLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyx5KSx0aGlzLmltb2QoZy5pbXVsKHkpKX0sTWUucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLHkpe3JldHVybiB0''@;'; put 'put ''aGlzLl92ZXJpZnkyKGcseSksdGhpcy5pbW9kKGcubXVsKHkpKX0sTWUucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW11bChnLGcuY2xvbmUoKSl9LE1lLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubXVsKGcsZyl9LE1lLnByb3RvdHlwZS5z''@;'; put 'put ''cXJ0PWZ1bmN0aW9uKGcpe2lmKGcuaXNaZXJvKCkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgeT10aGlzLm0uYW5kbG4oMyk7aWYocCh5JTI9PTEpLDM9PT15KXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGcseCl9Zm9yKHZhciBDPXRoaXMubS5z''@;'; put 'put ''dWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hybigxKTtwKCFDLmlzWmVybygpKTt2YXIgSD1uZXcgdygxKS50b1JlZCh0aGlzKSxqPUgucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09''@;'; put 'put ''bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChqKTspbS5yZWRJQWRkKGopO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMpLGFlPXRoaXMucG93KGcsQy5hZGRuKDEpLml1c2hybigxKSksbmU9dGhpcy5wb3coZyxDKSxzZT1UOzAhPT1uZS5jbXAoSCk7KXtmb3Io''@;'; put 'put ''dmFyIENlPW5lLFVlPTA7MCE9PUNlLmNtcChIKTtVZSsrKUNlPUNlLnJlZFNxcigpO3AoVWU8c2UpO3ZhciBKZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hsbihzZS1VZS0xKSk7YWU9YWUucmVkTXVsKEplKSxBPUplLnJlZFNxcigpLG5lPW5lLnJlZE11bChBKSxzZT1VZX1yZXR1cm4gYWV9''@;'; put 'put ''LE1lLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3ZhciB5PWcuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT15Lm5lZ2F0aXZlPyh5Lm5lZ2F0aXZlPTAsdGhpcy5pbW9kKHkpLnJlZE5lZygpKTp0aGlzLmltb2QoeSl9LE1lLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyx5KXtpZih5Lmlz''@;'; put 'put ''WmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09eS5jbXBuKDEpKXJldHVybiBnLmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09Zztmb3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENb''@;'; put 'put ''VC0xXSxnKTt2YXIgSD1DWzBdLGo9MCxFPTAsbT15LmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bSYmKG09MjYpLFQ9eS5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9yKHZhciBBPXkud29yZHNbVF0sYWU9bS0xO2FlPj0wO2FlLS0pe3ZhciBuZT1BPj5hZSYxO0ghPT1DWzBdJiYoSD10aGlzLnNxcihI''@;'; put 'put ''KSksMCE9PW5lfHwwIT09aj8oajw8PTEsanw9bmUsKDQ9PSsrRXx8MD09PVQmJjA9PT1hZSkmJihIPXRoaXMubXVsKEgsQ1tqXSksRT0wLGo9MCkpOkU9MH1tPTI2fXJldHVybiBIfSxNZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3ZhciB5PWcudW1vZCh0aGlzLm0pO3JldHVy''@;'; put 'put ''biB5PT09Zz95LmNsb25lKCk6eX0sTWUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciB5PWcuY2xvbmUoKTtyZXR1cm4geS5yZWQ9bnVsbCx5fSx3Lm1vbnQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBaZShnKX0sVihaZSxNZSksWmUucHJvdG90eXBlLmNvbnZlcnRUbz1m''@;'; put 'put ''dW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcudXNobG4odGhpcy5zaGlmdCkpfSxaZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIHk9dGhpcy5pbW9kKGcubXVsKHRoaXMucmludikpO3JldHVybiB5LnJlZD1udWxsLHl9LFplLnByb3RvdHlwZS5pbXVsPWZ1bmN0''@;'; put 'put ''aW9uKGcseSl7aWYoZy5pc1plcm8oKXx8eS5pc1plcm8oKSlyZXR1cm4gZy53b3Jkc1swXT0wLGcubGVuZ3RoPTEsZzt2YXIgeD1nLmltdWwoeSksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5p''@;'; put 'put ''dXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0sWmUucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLHkpe2lmKGcuaXNaZXJvKCl8fHkuaXNa''@;'; put 'put ''ZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1nLm11bCh5KSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQu''@;'; put 'put ''Y21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxaZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9y''@;'; put 'put ''Y2VSZWQodGhpcyl9fShjZT1iLm5tZChjZSksdGhpcyl9LDY1MDQ6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIHAsST1iKDMxOSksXz1iKDcyOTYpO3RyeXtwPVtdLl9fcHJvdG9fXz09PUFycmF5LnByb3RvdHlwZX1jYXRjaChGKXtpZighRnx8Im9iamVjdCIhPXR5cGVvZiBGfHwhKCJj''@;'; put 'put ''b2RlImluIEYpfHwiRVJSX1BST1RPX0FDQ0VTUyIhPT1GLmNvZGUpdGhyb3cgRn12YXIgVj0hIXAmJl8mJl8oT2JqZWN0LnByb3RvdHlwZSwiX19wcm90b19fIiksdz1PYmplY3QsUD13LmdldFByb3RvdHlwZU9mO2NlLmV4cG9ydHM9ViYmImZ1bmN0aW9uIj09dHlwZW9mIFYuZ2V0P0koW1Yu''@;'; put 'put ''Z2V0XSk6ImZ1bmN0aW9uIj09dHlwZW9mIFAmJmZ1bmN0aW9uKFIpe3JldHVybiBQKG51bGw9PVI/Ujp3KFIpKX19LDY5NDg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9WDtJLnZlcnNpb249Yig4NTk3KS5pOCxJLnV0aWxzPWIoOTUzKSxJLnJhbmQ9Yig5OTMxKSxJLmN1cnZlPWIo''@;'; put 'put ''ODI1NCksSS5jdXJ2ZXM9Yig1NDI3KSxJLmVjPWIoNzk1NCksSS5lZGRzYT1iKDU5ODApfSw0OTE4OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMzc4NSksXz1iKDk1MykscD1fLmdldE5BRixWPV8uZ2V0SlNGLHc9Xy5hc3NlcnQ7ZnVuY3Rpb24gUChSLHope3RoaXMudHlwZT1S''@;'; put 'put ''LHRoaXMucD1uZXcgSSh6LnAsMTYpLHRoaXMucmVkPXoucHJpbWU/SS5yZWQoei5wcmltZSk6SS5tb250KHRoaXMucCksdGhpcy56ZXJvPW5ldyBJKDApLnRvUmVkKHRoaXMucmVkKSx0aGlzLm9uZT1uZXcgSSgxKS50b1JlZCh0aGlzLnJlZCksdGhpcy50d289bmV3IEkoMikudG9SZWQodGhp''@;'; put 'put ''cy5yZWQpLHRoaXMubj16Lm4mJm5ldyBJKHoubiwxNiksdGhpcy5nPXouZyYmdGhpcy5wb2ludEZyb21KU09OKHouZyx6LmdSZWQpLHRoaXMuX3duYWZUMT1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQyPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDM9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZU''@;'; put 'put ''ND1uZXcgQXJyYXkoNCksdGhpcy5fYml0TGVuZ3RoPXRoaXMubj90aGlzLm4uYml0TGVuZ3RoKCk6MDt2YXIgTj10aGlzLm4mJnRoaXMucC5kaXYodGhpcy5uKTshTnx8Ti5jbXBuKDEwMCk+MD90aGlzLnJlZE49bnVsbDoodGhpcy5fbWF4d2VsbFRyaWNrPSEwLHRoaXMucmVkTj10aGlzLm4u''@;'; put 'put ''dG9SZWQodGhpcy5yZWQpKX1mdW5jdGlvbiBGKFIseil7dGhpcy5jdXJ2ZT1SLHRoaXMudHlwZT16LHRoaXMucHJlY29tcHV0ZWQ9bnVsbH1jZS5leHBvcnRzPVAsUC5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxQLnByb3Rv''@;'; put 'put ''dHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LFAucHJvdG90eXBlLl9maXhlZE5hZk11bD1mdW5jdGlvbih6LE4pe3coei5wcmVjb21wdXRlZCk7dmFyIE89ei5fZ2V0RG91YmxlcygpLEs9cChOLDEsdGhpcy5fYml0TGVuZ3RoKSxa''@;'; put 'put ''PSgxPDxPLnN0ZXArMSktKE8uc3RlcCUyPT0wPzI6MSk7Wi89Mzt2YXIgVyxxLFk9W107Zm9yKFc9MDtXPEsubGVuZ3RoO1crPU8uc3RlcCl7cT0wO2Zvcih2YXIgZWU9VytPLnN0ZXAtMTtlZT49VztlZS0tKXE9KHE8PDEpK0tbZWVdO1kucHVzaChxKX1mb3IodmFyIEo9dGhpcy5qcG9pbnQo''@;'; put 'put ''bnVsbCxudWxsLG51bGwpLHJlPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxpZT1aO2llPjA7aWUtLSl7Zm9yKFc9MDtXPFkubGVuZ3RoO1crKykocT1ZW1ddKT09PWllP3JlPXJlLm1peGVkQWRkKE8ucG9pbnRzW1ddKTpxPT09LWllJiYocmU9cmUubWl4ZWRBZGQoTy5wb2ludHNbV10u''@;'; put 'put ''bmVnKCkpKTtKPUouYWRkKHJlKX1yZXR1cm4gSi50b1AoKX0sUC5wcm90b3R5cGUuX3duYWZNdWw9ZnVuY3Rpb24oeixOKXtmb3IodmFyIE89NCxLPXouX2dldE5BRlBvaW50cyhPKSxaPUsucG9pbnRzLFk9cChOLE89Sy53bmQsdGhpcy5fYml0TGVuZ3RoKSxXPXRoaXMuanBvaW50KG51bGws''@;'; put 'put ''bnVsbCxudWxsKSxxPVkubGVuZ3RoLTE7cT49MDtxLS0pe2Zvcih2YXIgZWU9MDtxPj0wJiYwPT09WVtxXTtxLS0pZWUrKztpZihxPj0wJiZlZSsrLFc9Vy5kYmxwKGVlKSxxPDApYnJlYWs7dmFyIEo9WVtxXTt3KDAhPT1KKSxXPSJhZmZpbmUiPT09ei50eXBlP1cubWl4ZWRBZGQoSj4wP1pb''@;'; put 'put ''Si0xPj4xXTpaWy1KLTE+PjFdLm5lZygpKTpXLmFkZChKPjA/WltKLTE+PjFdOlpbLUotMT4+MV0ubmVnKCkpfXJldHVybiJhZmZpbmUiPT09ei50eXBlP1cudG9QKCk6V30sUC5wcm90b3R5cGUuX3duYWZNdWxBZGQ9ZnVuY3Rpb24oeixOLE8sSyxaKXt2YXIgSixyZSxpZSxZPXRoaXMuX3du''@;'; put 'put ''YWZUMSxXPXRoaXMuX3duYWZUMixxPXRoaXMuX3duYWZUMyxlZT0wO2ZvcihKPTA7SjxLO0orKyl7dmFyIHVlPShpZT1OW0pdKS5fZ2V0TkFGUG9pbnRzKHopO1lbSl09dWUud25kLFdbSl09dWUucG9pbnRzfWZvcihKPUstMTtKPj0xO0otPTIpe3ZhciBnZT1KLTEsX2U9SjtpZigxPT09WVtn''@;'; put 'put ''ZV0mJjE9PT1ZW19lXSl7dmFyIFRlPVtOW2dlXSxudWxsLG51bGwsTltfZV1dOzA9PT1OW2dlXS55LmNtcChOW19lXS55KT8oVGVbMV09TltnZV0uYWRkKE5bX2VdKSxUZVsyXT1OW2dlXS50b0ooKS5taXhlZEFkZChOW19lXS5uZWcoKSkpOjA9PT1OW2dlXS55LmNtcChOW19lXS55LnJlZE5l''@;'; put 'put ''ZygpKT8oVGVbMV09TltnZV0udG9KKCkubWl4ZWRBZGQoTltfZV0pLFRlWzJdPU5bZ2VdLmFkZChOW19lXS5uZWcoKSkpOihUZVsxXT1OW2dlXS50b0ooKS5taXhlZEFkZChOW19lXSksVGVbMl09TltnZV0udG9KKCkubWl4ZWRBZGQoTltfZV0ubmVnKCkpKTt2YXIgTWU9Wy0zLC0xLC01LC03''@;'; put 'put ''LDAsNyw1LDEsM10sWmU9VihPW2dlXSxPW19lXSk7Zm9yKGVlPU1hdGgubWF4KFplWzBdLmxlbmd0aCxlZSkscVtnZV09bmV3IEFycmF5KGVlKSxxW19lXT1uZXcgQXJyYXkoZWUpLHJlPTA7cmU8ZWU7cmUrKylxW2dlXVtyZV09TWVbMyooMSsoMHxaZVswXVtyZV0pKSsoMSsoMHxaZVsxXVty''@;'; put 'put ''ZV0pKV0scVtfZV1bcmVdPTAsV1tnZV09VGV9ZWxzZSBxW2dlXT1wKE9bZ2VdLFlbZ2VdLHRoaXMuX2JpdExlbmd0aCkscVtfZV09cChPW19lXSxZW19lXSx0aGlzLl9iaXRMZW5ndGgpLGVlPU1hdGgubWF4KHFbZ2VdLmxlbmd0aCxlZSksZWU9TWF0aC5tYXgocVtfZV0ubGVuZ3RoLGVlKX12''@;'; put 'put ''YXIgeT10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCkseD10aGlzLl93bmFmVDQ7Zm9yKEo9ZWU7Sj49MDtKLS0pe2Zvcih2YXIgQz0wO0o+PTA7KXt2YXIgVD0hMDtmb3IocmU9MDtyZTxLO3JlKyspeFtyZV09MHxxW3JlXVtKXSwwIT09eFtyZV0mJihUPSExKTtpZighVClicmVhaztDKyss''@;'; put 'put ''Si0tfWlmKEo+PTAmJkMrKyx5PXkuZGJscChDKSxKPDApYnJlYWs7Zm9yKHJlPTA7cmU8SztyZSsrKXt2YXIgSD14W3JlXTswIT09SCYmKEg+MD9pZT1XW3JlXVtILTE+PjFdOkg8MCYmKGllPVdbcmVdWy1ILTE+PjFdLm5lZygpKSx5PSJhZmZpbmUiPT09aWUudHlwZT95Lm1peGVkQWRkKGll''@;'; put 'put ''KTp5LmFkZChpZSkpfX1mb3IoSj0wO0o8SztKKyspV1tKXT1udWxsO3JldHVybiBaP3k6eS50b1AoKX0sUC5CYXNlUG9pbnQ9RixGLnByb3RvdHlwZS5lcT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LEYucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuY3VydmUudmFsaWRhdGUodGhpcyl9LFAucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKHosTil7ej1fLnRvQXJyYXkoeixOKTt2YXIgTz10aGlzLnAuYnl0ZUxlbmd0aCgpO2lmKCg0PT09elswXXx8Nj09PXpbMF18fDc9PT16WzBdKSYmei5sZW5ndGgtMT09''@;'; put 'put ''MipPKXJldHVybiA2PT09elswXT93KHpbei5sZW5ndGgtMV0lMj09MCk6Nz09PXpbMF0mJncoelt6Lmxlbmd0aC0xXSUyPT0xKSx0aGlzLnBvaW50KHouc2xpY2UoMSwxK08pLHouc2xpY2UoMStPLDErMipPKSk7aWYoKDI9PT16WzBdfHwzPT09elswXSkmJnoubGVuZ3RoLTE9PT1PKXJldHVy''@;'; put 'put ''biB0aGlzLnBvaW50RnJvbVgoei5zbGljZSgxLDErTyksMz09PXpbMF0pO3Rocm93IG5ldyBFcnJvcigiVW5rbm93biBwb2ludCBmb3JtYXQiKX0sRi5wcm90b3R5cGUuZW5jb2RlQ29tcHJlc3NlZD1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5lbmNvZGUoeiwhMCl9LEYucHJvdG90eXBlLl9l''@;'; put 'put ''bmNvZGU9ZnVuY3Rpb24oeil7dmFyIE49dGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSxPPXRoaXMuZ2V0WCgpLnRvQXJyYXkoImJlIixOKTtyZXR1cm4gej9bdGhpcy5nZXRZKCkuaXNFdmVuKCk/MjozXS5jb25jYXQoTyk6WzRdLmNvbmNhdChPLHRoaXMuZ2V0WSgpLnRvQXJyYXkoImJlIixO''@;'; put 'put ''KSl9LEYucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbih6LE4pe3JldHVybiBfLmVuY29kZSh0aGlzLl9lbmNvZGUoTikseil9LEYucHJvdG90eXBlLnByZWNvbXB1dGU9ZnVuY3Rpb24oeil7aWYodGhpcy5wcmVjb21wdXRlZClyZXR1cm4gdGhpczt2YXIgTj17ZG91YmxlczpudWxsLG5hZjpu''@;'; put 'put ''dWxsLGJldGE6bnVsbH07cmV0dXJuIE4ubmFmPXRoaXMuX2dldE5BRlBvaW50cyg4KSxOLmRvdWJsZXM9dGhpcy5fZ2V0RG91Ymxlcyg0LHopLE4uYmV0YT10aGlzLl9nZXRCZXRhKCksdGhpcy5wcmVjb21wdXRlZD1OLHRoaXN9LEYucHJvdG90eXBlLl9oYXNEb3VibGVzPWZ1bmN0aW9uKHop''@;'; put 'put ''e2lmKCF0aGlzLnByZWNvbXB1dGVkKXJldHVybiExO3ZhciBOPXRoaXMucHJlY29tcHV0ZWQuZG91YmxlcztyZXR1cm4hIU4mJk4ucG9pbnRzLmxlbmd0aD49TWF0aC5jZWlsKCh6LmJpdExlbmd0aCgpKzEpL04uc3RlcCl9LEYucHJvdG90eXBlLl9nZXREb3VibGVzPWZ1bmN0aW9uKHosTil7''@;'; put 'put ''aWYodGhpcy5wcmVjb21wdXRlZCYmdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzKXJldHVybiB0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXM7Zm9yKHZhciBPPVt0aGlzXSxLPXRoaXMsWj0wO1o8TjtaKz16KXtmb3IodmFyIFk9MDtZPHo7WSsrKUs9Sy5kYmwoKTtPLnB1c2goSyl9cmV0dXJue3N0''@;'; put 'put ''ZXA6eixwb2ludHM6T319LEYucHJvdG90eXBlLl9nZXROQUZQb2ludHM9ZnVuY3Rpb24oeil7aWYodGhpcy5wcmVjb21wdXRlZCYmdGhpcy5wcmVjb21wdXRlZC5uYWYpcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQubmFmO2Zvcih2YXIgTj1bdGhpc10sTz0oMTw8eiktMSxLPTE9PT1PP251bGw6''@;'; put 'put ''dGhpcy5kYmwoKSxaPTE7WjxPO1orKylOW1pdPU5bWi0xXS5hZGQoSyk7cmV0dXJue3duZDp6LHBvaW50czpOfX0sRi5wcm90b3R5cGUuX2dldEJldGE9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sRi5wcm90b3R5cGUuZGJscD1mdW5jdGlvbih6KXtmb3IodmFyIE49dGhpcyxPPTA7Tzx6O08r''@;'; put 'put ''KylOPU4uZGJsKCk7cmV0dXJuIE59fSwxMTM4OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoOTUzKSxfPWIoMzc4NSkscD1iKDU3MTcpLFY9Yig0OTE4KSx3PUkuYXNzZXJ0O2Z1bmN0aW9uIFAoUil7dGhpcy50d2lzdGVkPTEhPSgwfFIuYSksdGhpcy5tT25lQT10aGlzLnR3aXN0''@;'; put 'put ''ZWQmJi0xPT0oMHxSLmEpLHRoaXMuZXh0ZW5kZWQ9dGhpcy5tT25lQSxWLmNhbGwodGhpcywiZWR3YXJkcyIsUiksdGhpcy5hPW5ldyBfKFIuYSwxNikudW1vZCh0aGlzLnJlZC5tKSx0aGlzLmE9dGhpcy5hLnRvUmVkKHRoaXMucmVkKSx0aGlzLmM9bmV3IF8oUi5jLDE2KS50b1JlZCh0aGlz''@;'; put 'put ''LnJlZCksdGhpcy5jMj10aGlzLmMucmVkU3FyKCksdGhpcy5kPW5ldyBfKFIuZCwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuZGQ9dGhpcy5kLnJlZEFkZCh0aGlzLmQpLHcoIXRoaXMudHdpc3RlZHx8MD09PXRoaXMuYy5mcm9tUmVkKCkuY21wbigxKSksdGhpcy5vbmVDPTE9PSgwfFIuYyl9''@;'; put 'put ''ZnVuY3Rpb24gRihSLHosTixPLEspe1YuQmFzZVBvaW50LmNhbGwodGhpcyxSLCJwcm9qZWN0aXZlIiksbnVsbD09PXomJm51bGw9PT1OJiZudWxsPT09Tz8odGhpcy54PXRoaXMuY3VydmUuemVybyx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXMudD10''@;'; put 'put ''aGlzLmN1cnZlLnplcm8sdGhpcy56T25lPSEwKToodGhpcy54PW5ldyBfKHosMTYpLHRoaXMueT1uZXcgXyhOLDE2KSx0aGlzLno9Tz9uZXcgXyhPLDE2KTp0aGlzLmN1cnZlLm9uZSx0aGlzLnQ9SyYmbmV3IF8oSywxNiksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5j''@;'; put 'put ''dXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy50JiYhdGhpcy50LnJlZCYmKHRoaXMudD10aGlzLnQudG9SZWQodGhpcy5jdXJ2ZS5y''@;'; put 'put ''ZWQpKSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmUsdGhpcy5jdXJ2ZS5leHRlbmRlZCYmIXRoaXMudCYmKHRoaXMudD10aGlzLngucmVkTXVsKHRoaXMueSksdGhpcy56T25lfHwodGhpcy50PXRoaXMudC5yZWRNdWwodGhpcy56LnJlZEludm0oKSkpKSl9cChQLFYpLGNlLmV4''@;'; put 'put ''cG9ydHM9UCxQLnByb3RvdHlwZS5fbXVsQT1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5tT25lQT96LnJlZE5lZygpOnRoaXMuYS5yZWRNdWwoeil9LFAucHJvdG90eXBlLl9tdWxDPWZ1bmN0aW9uKHope3JldHVybiB0aGlzLm9uZUM/ejp0aGlzLmMucmVkTXVsKHopfSxQLnByb3RvdHlwZS5q''@;'; put 'put ''cG9pbnQ9ZnVuY3Rpb24oeixOLE8sSyl7cmV0dXJuIHRoaXMucG9pbnQoeixOLE8sSyl9LFAucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24oeixOKXsoej1uZXcgXyh6LDE2KSkucmVkfHwoej16LnRvUmVkKHRoaXMucmVkKSk7dmFyIE89ei5yZWRTcXIoKSxLPXRoaXMuYzIucmVkU3Vi''@;'; put 'put ''KHRoaXMuYS5yZWRNdWwoTykpLFo9dGhpcy5vbmUucmVkU3ViKHRoaXMuYzIucmVkTXVsKHRoaXMuZCkucmVkTXVsKE8pKSxZPUsucmVkTXVsKFoucmVkSW52bSgpKSxXPVkucmVkU3FydCgpO2lmKDAhPT1XLnJlZFNxcigpLnJlZFN1YihZKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoImludmFsaWQgcG9pbnQiKTt2YXIgcT1XLmZyb21SZWQoKS5pc09kZCgpO3JldHVybihOJiYhcXx8IU4mJnEpJiYoVz1XLnJlZE5lZygpKSx0aGlzLnBvaW50KHosVyl9LFAucHJvdG90eXBlLnBvaW50RnJvbVk9ZnVuY3Rpb24oeixOKXsoej1uZXcgXyh6LDE2KSkucmVkfHwoej16LnRv''@;'; put 'put ''UmVkKHRoaXMucmVkKSk7dmFyIE89ei5yZWRTcXIoKSxLPU8ucmVkU3ViKHRoaXMuYzIpLFo9Ty5yZWRNdWwodGhpcy5kKS5yZWRNdWwodGhpcy5jMikucmVkU3ViKHRoaXMuYSksWT1LLnJlZE11bChaLnJlZEludm0oKSk7aWYoMD09PVkuY21wKHRoaXMuemVybykpe2lmKE4pdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7cmV0dXJuIHRoaXMucG9pbnQodGhpcy56ZXJvLHopfXZhciBXPVkucmVkU3FydCgpO2lmKDAhPT1XLnJlZFNxcigpLnJlZFN1YihZKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTtyZXR1cm4gVy5mcm9tUmVk''@;'; put 'put ''KCkuaXNPZGQoKSE9PU4mJihXPVcucmVkTmVnKCkpLHRoaXMucG9pbnQoVyx6KX0sUC5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oeil7aWYoei5pc0luZmluaXR5KCkpcmV0dXJuITA7ei5ub3JtYWxpemUoKTt2YXIgTj16LngucmVkU3FyKCksTz16LnkucmVkU3FyKCksSz1OLnJlZE11''@;'; put 'put ''bCh0aGlzLmEpLnJlZEFkZChPKSxaPXRoaXMuYzIucmVkTXVsKHRoaXMub25lLnJlZEFkZCh0aGlzLmQucmVkTXVsKE4pLnJlZE11bChPKSkpO3JldHVybiAwPT09Sy5jbXAoWil9LHAoRixWLkJhc2VQb2ludCksUC5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbih6KXtyZXR1cm4g''@;'; put 'put ''Ri5mcm9tSlNPTih0aGlzLHopfSxQLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbih6LE4sTyxLKXtyZXR1cm4gbmV3IEYodGhpcyx6LE4sTyxLKX0sRi5mcm9tSlNPTj1mdW5jdGlvbih6LE4pe3JldHVybiBuZXcgRih6LE5bMF0sTlsxXSxOWzJdKX0sRi5wcm90b3R5cGUuaW5zcGVjdD1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei5mcm9tUmVkKCku''@;'; put 'put ''dG9TdHJpbmcoMTYsMikrIj4ifSxGLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnguY21wbigwKSYmKDA9PT10aGlzLnkuY21wKHRoaXMueil8fHRoaXMuek9uZSYmMD09PXRoaXMueS5jbXAodGhpcy5jdXJ2ZS5jKSl9LEYucHJvdG90eXBlLl9leHRE''@;'; put 'put ''Ymw9ZnVuY3Rpb24oKXt2YXIgej10aGlzLngucmVkU3FyKCksTj10aGlzLnkucmVkU3FyKCksTz10aGlzLnoucmVkU3FyKCk7Tz1PLnJlZElBZGQoTyk7dmFyIEs9dGhpcy5jdXJ2ZS5fbXVsQSh6KSxaPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKS5yZWRJU3ViKHopLnJlZElTdWIo''@;'; put 'put ''TiksWT1LLnJlZEFkZChOKSxXPVkucmVkU3ViKE8pLHE9Sy5yZWRTdWIoTiksZWU9Wi5yZWRNdWwoVyksSj1ZLnJlZE11bChxKSxyZT1aLnJlZE11bChxKSxpZT1XLnJlZE11bChZKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChlZSxKLGllLHJlKX0sRi5wcm90b3R5cGUuX3Byb2pEYmw9ZnVu''@;'; put 'put ''Y3Rpb24oKXt2YXIgSyxaLFksVyxxLGVlLHo9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpLE49dGhpcy54LnJlZFNxcigpLE89dGhpcy55LnJlZFNxcigpO2lmKHRoaXMuY3VydmUudHdpc3RlZCl7dmFyIEo9KFc9dGhpcy5jdXJ2ZS5fbXVsQShOKSkucmVkQWRkKE8pO3RoaXMuek9u''@;'; put 'put ''ZT8oSz16LnJlZFN1YihOKS5yZWRTdWIoTykucmVkTXVsKEoucmVkU3ViKHRoaXMuY3VydmUudHdvKSksWj1KLnJlZE11bChXLnJlZFN1YihPKSksWT1KLnJlZFNxcigpLnJlZFN1YihKKS5yZWRTdWIoSikpOihxPXRoaXMuei5yZWRTcXIoKSxlZT1KLnJlZFN1YihxKS5yZWRJU3ViKHEpLEs9''@;'; put 'put ''ei5yZWRTdWIoTikucmVkSVN1YihPKS5yZWRNdWwoZWUpLFo9Si5yZWRNdWwoVy5yZWRTdWIoTykpLFk9Si5yZWRNdWwoZWUpKX1lbHNlIFc9Ti5yZWRBZGQoTykscT10aGlzLmN1cnZlLl9tdWxDKHRoaXMueikucmVkU3FyKCksZWU9Vy5yZWRTdWIocSkucmVkU3ViKHEpLEs9dGhpcy5jdXJ2''@;'; put 'put ''ZS5fbXVsQyh6LnJlZElTdWIoVykpLnJlZE11bChlZSksWj10aGlzLmN1cnZlLl9tdWxDKFcpLnJlZE11bChOLnJlZElTdWIoTykpLFk9Vy5yZWRNdWwoZWUpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEssWixZKX0sRi5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJ''@;'; put 'put ''bmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS5leHRlbmRlZD90aGlzLl9leHREYmwoKTp0aGlzLl9wcm9qRGJsKCl9LEYucHJvdG90eXBlLl9leHRBZGQ9ZnVuY3Rpb24oeil7dmFyIE49dGhpcy55LnJlZFN1Yih0aGlzLngpLnJlZE11bCh6LnkucmVkU3ViKHoueCkpLE89dGhpcy55LnJlZEFk''@;'; put 'put ''ZCh0aGlzLngpLnJlZE11bCh6LnkucmVkQWRkKHoueCkpLEs9dGhpcy50LnJlZE11bCh0aGlzLmN1cnZlLmRkKS5yZWRNdWwoei50KSxaPXRoaXMuei5yZWRNdWwoei56LnJlZEFkZCh6LnopKSxZPU8ucmVkU3ViKE4pLFc9Wi5yZWRTdWIoSykscT1aLnJlZEFkZChLKSxlZT1PLnJlZEFkZChO''@;'; put 'put ''KSxKPVkucmVkTXVsKFcpLHJlPXEucmVkTXVsKGVlKSxpZT1ZLnJlZE11bChlZSksdWU9Vy5yZWRNdWwocSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoSixyZSx1ZSxpZSl9LEYucHJvdG90eXBlLl9wcm9qQWRkPWZ1bmN0aW9uKHope3ZhciByZSxpZSxOPXRoaXMuei5yZWRNdWwoei56KSxP''@;'; put 'put ''PU4ucmVkU3FyKCksSz10aGlzLngucmVkTXVsKHoueCksWj10aGlzLnkucmVkTXVsKHoueSksWT10aGlzLmN1cnZlLmQucmVkTXVsKEspLnJlZE11bChaKSxXPU8ucmVkU3ViKFkpLHE9Ty5yZWRBZGQoWSksZWU9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZE11bCh6LngucmVkQWRkKHoueSkp''@;'; put 'put ''LnJlZElTdWIoSykucmVkSVN1YihaKSxKPU4ucmVkTXVsKFcpLnJlZE11bChlZSk7cmV0dXJuIHRoaXMuY3VydmUudHdpc3RlZD8ocmU9Ti5yZWRNdWwocSkucmVkTXVsKFoucmVkU3ViKHRoaXMuY3VydmUuX211bEEoSykpKSxpZT1XLnJlZE11bChxKSk6KHJlPU4ucmVkTXVsKHEpLnJlZE11''@;'; put 'put ''bChaLnJlZFN1YihLKSksaWU9dGhpcy5jdXJ2ZS5fbXVsQyhXKS5yZWRNdWwocSkpLHRoaXMuY3VydmUucG9pbnQoSixyZSxpZSl9LEYucHJvdG90eXBlLmFkZD1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/ejp6LmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuZXh0''@;'; put 'put ''ZW5kZWQ/dGhpcy5fZXh0QWRkKHopOnRoaXMuX3Byb2pBZGQoeil9LEYucHJvdG90eXBlLm11bD1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5faGFzRG91Ymxlcyh6KT90aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLHopOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyx6KX0sRi5wcm90b3R5''@;'; put 'put ''cGUubXVsQWRkPWZ1bmN0aW9uKHosTixPKXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLE5dLFt6LE9dLDIsITEpfSxGLnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKHosTixPKXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLE5dLFt6LE9dLDIs''@;'; put 'put ''ITApfSxGLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtpZih0aGlzLnpPbmUpcmV0dXJuIHRoaXM7dmFyIHo9dGhpcy56LnJlZEludm0oKTtyZXR1cm4gdGhpcy54PXRoaXMueC5yZWRNdWwoeiksdGhpcy55PXRoaXMueS5yZWRNdWwoeiksdGhpcy50JiYodGhpcy50PXRoaXMudC5y''@;'; put 'put ''ZWRNdWwoeikpLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnpPbmU9ITAsdGhpc30sRi5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE5lZygpLHRoaXMueSx0aGlzLnosdGhpcy50JiZ0aGlzLnQucmVkTmVnKCkpfSxGLnByb3Rv''@;'; put 'put ''dHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy54LmZyb21SZWQoKX0sRi5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueS5mcm9tUmVkKCl9LEYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHope3JldHVy''@;'; put 'put ''biB0aGlzPT09enx8MD09PXRoaXMuZ2V0WCgpLmNtcCh6LmdldFgoKSkmJjA9PT10aGlzLmdldFkoKS5jbXAoei5nZXRZKCkpfSxGLnByb3RvdHlwZS5lcVhUb1A9ZnVuY3Rpb24oeil7dmFyIE49ei50b1JlZCh0aGlzLmN1cnZlLnJlZCkucmVkTXVsKHRoaXMueik7aWYoMD09PXRoaXMueC5j''@;'; put 'put ''bXAoTikpcmV0dXJuITA7Zm9yKHZhciBPPXouY2xvbmUoKSxLPXRoaXMuY3VydmUucmVkTi5yZWRNdWwodGhpcy56KTs7KXtpZihPLmlhZGQodGhpcy5jdXJ2ZS5uKSxPLmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKE4ucmVkSUFkZChLKSwwPT09dGhpcy54LmNtcChOKSlyZXR1''@;'; put 'put ''cm4hMH19LEYucHJvdG90eXBlLnRvUD1GLnByb3RvdHlwZS5ub3JtYWxpemUsRi5wcm90b3R5cGUubWl4ZWRBZGQ9Ri5wcm90b3R5cGUuYWRkfSw4MjU0OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPVg7SS5iYXNlPWIoNDkxOCksSS5zaG9ydD1iKDY2NzMpLEkubW9udD1iKDI4ODEp''@;'; put 'put ''LEkuZWR3YXJkcz1iKDExMzgpfSwyODgxOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMzc4NSksXz1iKDU3MTcpLHA9Yig0OTE4KSxWPWIoOTUzKTtmdW5jdGlvbiB3KEYpe3AuY2FsbCh0aGlzLCJtb250IixGKSx0aGlzLmE9bmV3IEkoRi5hLDE2KS50b1JlZCh0aGlzLnJlZCks''@;'; put 'put ''dGhpcy5iPW5ldyBJKEYuYiwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuaTQ9bmV3IEkoNCkudG9SZWQodGhpcy5yZWQpLnJlZEludm0oKSx0aGlzLnR3bz1uZXcgSSgyKS50b1JlZCh0aGlzLnJlZCksdGhpcy5hMjQ9dGhpcy5pNC5yZWRNdWwodGhpcy5hLnJlZEFkZCh0aGlzLnR3bykpfWZ1''@;'; put 'put ''bmN0aW9uIFAoRixSLHope3AuQmFzZVBvaW50LmNhbGwodGhpcyxGLCJwcm9qZWN0aXZlIiksbnVsbD09PVImJm51bGw9PT16Pyh0aGlzLng9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUuemVybyk6KHRoaXMueD1uZXcgSShSLDE2KSx0aGlzLno9bmV3IEkoeiwxNiksdGhpcy54''@;'; put 'put ''LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpKX1fKHcscCksY2UuZXhwb3J0cz13LHcucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKFIpe3ZhciB6PVIubm9ybWFsaXpl''@;'; put 'put ''KCkueCxOPXoucmVkU3FyKCksTz1OLnJlZE11bCh6KS5yZWRBZGQoTi5yZWRNdWwodGhpcy5hKSkucmVkQWRkKHopO3JldHVybiAwPT09Ty5yZWRTcXJ0KCkucmVkU3FyKCkuY21wKE8pfSxfKFAscC5CYXNlUG9pbnQpLHcucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKFIseil7cmV0''@;'; put 'put ''dXJuIHRoaXMucG9pbnQoVi50b0FycmF5KFIseiksMSl9LHcucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKFIseil7cmV0dXJuIG5ldyBQKHRoaXMsUix6KX0sdy5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihSKXtyZXR1cm4gUC5mcm9tSlNPTih0aGlzLFIpfSxQLnByb3RvdHlw''@;'; put 'put ''ZS5wcmVjb21wdXRlPWZ1bmN0aW9uKCl7fSxQLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WCgpLnRvQXJyYXkoImJlIix0aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpKX0sUC5mcm9tSlNPTj1mdW5jdGlvbihSLHope3JldHVybiBuZXcgUChSLHpbMF0selsx''@;'; put 'put ''XXx8Ui5vbmUpfSxQLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+IjoiPEVDIFBvaW50IHg6ICIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LmZyb21SZWQoKS50b1N0''@;'; put 'put ''cmluZygxNiwyKSsiPiJ9LFAucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuei5jbXBuKDApfSxQLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXt2YXIgej10aGlzLngucmVkQWRkKHRoaXMueikucmVkU3FyKCksTz10aGlzLngucmVkU3ViKHRoaXMueiku''@;'; put 'put ''cmVkU3FyKCksSz16LnJlZFN1YihPKSxaPXoucmVkTXVsKE8pLFk9Sy5yZWRNdWwoTy5yZWRBZGQodGhpcy5jdXJ2ZS5hMjQucmVkTXVsKEspKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoWixZKX0sUC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3Vw''@;'; put 'put ''cG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sUC5wcm90b3R5cGUuZGlmZkFkZD1mdW5jdGlvbihSLHope3ZhciBOPXRoaXMueC5yZWRBZGQodGhpcy56KSxPPXRoaXMueC5yZWRTdWIodGhpcy56KSxLPVIueC5yZWRBZGQoUi56KSxZPVIueC5yZWRTdWIoUi56KS5yZWRNdWwoTiksVz1L''@;'; put 'put ''LnJlZE11bChPKSxxPXouei5yZWRNdWwoWS5yZWRBZGQoVykucmVkU3FyKCkpLGVlPXoueC5yZWRNdWwoWS5yZWRJU3ViKFcpLnJlZFNxcigpKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChxLGVlKX0sUC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKFIpe2Zvcih2YXIgej1SLmNsb25lKCksTj10''@;'; put 'put ''aGlzLE89dGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpLFo9W107MCE9PXouY21wbigwKTt6Lml1c2hybigxKSlaLnB1c2goei5hbmRsbigxKSk7Zm9yKHZhciBZPVoubGVuZ3RoLTE7WT49MDtZLS0pMD09PVpbWV0/KE49Ti5kaWZmQWRkKE8sdGhpcyksTz1PLmRibCgpKTooTz1OLmRpZmZB''@;'; put 'put ''ZGQoTyx0aGlzKSxOPU4uZGJsKCkpO3JldHVybiBPfSxQLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxQLnByb3RvdHlwZS5qdW1sQWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJO''@;'; put 'put ''b3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sUC5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oUil7cmV0dXJuIDA9PT10aGlzLmdldFgoKS5jbXAoUi5nZXRYKCkpfSxQLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PXRoaXMueC5yZWRNdWwodGhp''@;'; put 'put ''cy56LnJlZEludm0oKSksdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXN9LFAucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnguZnJvbVJlZCgpfX0sNjY3MzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDk1MyksXz1iKDM3ODUp''@;'; put 'put ''LHA9Yig1NzE3KSxWPWIoNDkxOCksdz1JLmFzc2VydDtmdW5jdGlvbiBQKHope1YuY2FsbCh0aGlzLCJzaG9ydCIseiksdGhpcy5hPW5ldyBfKHouYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgXyh6LmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLnRpbnY9dGhpcy50d28ucmVk''@;'; put 'put ''SW52bSgpLHRoaXMuemVyb0E9MD09PXRoaXMuYS5mcm9tUmVkKCkuY21wbigwKSx0aGlzLnRocmVlQT0wPT09dGhpcy5hLmZyb21SZWQoKS5zdWIodGhpcy5wKS5jbXBuKC0zKSx0aGlzLmVuZG89dGhpcy5fZ2V0RW5kb21vcnBoaXNtKHopLHRoaXMuX2VuZG9XbmFmVDE9bmV3IEFycmF5KDQp''@;'; put 'put ''LHRoaXMuX2VuZG9XbmFmVDI9bmV3IEFycmF5KDQpfWZ1bmN0aW9uIEYoeixOLE8sSyl7Vi5CYXNlUG9pbnQuY2FsbCh0aGlzLHosImFmZmluZSIpLG51bGw9PT1OJiZudWxsPT09Tz8odGhpcy54PW51bGwsdGhpcy55PW51bGwsdGhpcy5pbmY9ITApOih0aGlzLng9bmV3IF8oTiwxNiksdGhp''@;'; put 'put ''cy55PW5ldyBfKE8sMTYpLEsmJih0aGlzLnguZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpLHRoaXMueS5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9S''@;'; put 'put ''ZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLmluZj0hMSl9ZnVuY3Rpb24gUih6LE4sTyxLKXtWLkJhc2VQb2ludC5jYWxsKHRoaXMseiwiamFjb2JpYW4iKSxudWxsPT09TiYmbnVsbD09PU8mJm51bGw9PT1LPyh0aGlzLng9dGhpcy5jdXJ2ZS5vbmUsdGhpcy55PXRoaXMuY3VydmUub25lLHRo''@;'; put 'put ''aXMuej1uZXcgXygwKSk6KHRoaXMueD1uZXcgXyhOLDE2KSx0aGlzLnk9bmV3IF8oTywxNiksdGhpcy56PW5ldyBfKEssMTYpKSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3Vy''@;'; put 'put ''dmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmV9cChQLFYpLGNlLmV4cG9ydHM9UCxQLnByb3RvdHlwZS5fZ2V0RW5kb21vcnBoaXNtPWZ1bmN0aW9uKE4pe2lmKHRoaXMuemVy''@;'; put 'put ''b0EmJnRoaXMuZyYmdGhpcy5uJiYxPT09dGhpcy5wLm1vZG4oMykpe3ZhciBPLEs7aWYoTi5iZXRhKU89bmV3IF8oTi5iZXRhLDE2KS50b1JlZCh0aGlzLnJlZCk7ZWxzZXt2YXIgWj10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5wKTtPPShPPVpbMF0uY21wKFpbMV0pPDA/WlswXTpaWzFdKS50''@;'; put 'put ''b1JlZCh0aGlzLnJlZCl9aWYoTi5sYW1iZGEpSz1uZXcgXyhOLmxhbWJkYSwxNik7ZWxzZXt2YXIgWT10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5uKTswPT09dGhpcy5nLm11bChZWzBdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoTykpP0s9WVswXTp3KDA9PT10aGlzLmcubXVsKEs9WVsxXSku''@;'; put 'put ''eC5jbXAodGhpcy5nLngucmVkTXVsKE8pKSl9cmV0dXJue2JldGE6TyxsYW1iZGE6SyxiYXNpczpOLmJhc2lzP04uYmFzaXMubWFwKGZ1bmN0aW9uKHEpe3JldHVybnthOm5ldyBfKHEuYSwxNiksYjpuZXcgXyhxLmIsMTYpfX0pOnRoaXMuX2dldEVuZG9CYXNpcyhLKX19fSxQLnByb3RvdHlw''@;'; put 'put ''ZS5fZ2V0RW5kb1Jvb3RzPWZ1bmN0aW9uKE4pe3ZhciBPPU49PT10aGlzLnA/dGhpcy5yZWQ6Xy5tb250KE4pLEs9bmV3IF8oMikudG9SZWQoTykucmVkSW52bSgpLFo9Sy5yZWROZWcoKSxZPW5ldyBfKDMpLnRvUmVkKE8pLnJlZE5lZygpLnJlZFNxcnQoKS5yZWRNdWwoSyk7cmV0dXJuW1ou''@;'; put 'put ''cmVkQWRkKFkpLmZyb21SZWQoKSxaLnJlZFN1YihZKS5mcm9tUmVkKCldfSxQLnByb3RvdHlwZS5fZ2V0RW5kb0Jhc2lzPWZ1bmN0aW9uKE4pe2Zvcih2YXIgSixyZSxpZSx1ZSxnZSxfZSxUZSxaZSxCLE89dGhpcy5uLnVzaHJuKE1hdGguZmxvb3IodGhpcy5uLmJpdExlbmd0aCgpLzIpKSxL''@;'; put 'put ''PU4sWj10aGlzLm4uY2xvbmUoKSxZPW5ldyBfKDEpLFc9bmV3IF8oMCkscT1uZXcgXygwKSxlZT1uZXcgXygxKSxNZT0wOzAhPT1LLmNtcG4oMCk7KXt2YXIgZz1aLmRpdihLKTtaZT1aLnN1YihnLm11bChLKSksQj1xLnN1YihnLm11bChZKSk7dmFyIHk9ZWUuc3ViKGcubXVsKFcpKTtpZigh''@;'; put 'put ''aWUmJlplLmNtcChPKTwwKUo9VGUubmVnKCkscmU9WSxpZT1aZS5uZWcoKSx1ZT1CO2Vsc2UgaWYoaWUmJjI9PSsrTWUpYnJlYWs7VGU9WmUsWj1LLEs9WmUscT1ZLFk9QixlZT1XLFc9eX1nZT1aZS5uZWcoKSxfZT1CO3ZhciB4PWllLnNxcigpLmFkZCh1ZS5zcXIoKSk7cmV0dXJuIGdlLnNx''@;'; put 'put ''cigpLmFkZChfZS5zcXIoKSkuY21wKHgpPj0wJiYoZ2U9SixfZT1yZSksaWUubmVnYXRpdmUmJihpZT1pZS5uZWcoKSx1ZT11ZS5uZWcoKSksZ2UubmVnYXRpdmUmJihnZT1nZS5uZWcoKSxfZT1fZS5uZWcoKSksW3thOmllLGI6dWV9LHthOmdlLGI6X2V9XX0sUC5wcm90b3R5cGUuX2VuZG9T''@;'; put 'put ''cGxpdD1mdW5jdGlvbihOKXt2YXIgTz10aGlzLmVuZG8uYmFzaXMsSz1PWzBdLFo9T1sxXSxZPVouYi5tdWwoTikuZGl2Um91bmQodGhpcy5uKSxXPUsuYi5uZWcoKS5tdWwoTikuZGl2Um91bmQodGhpcy5uKSxxPVkubXVsKEsuYSksZWU9Vy5tdWwoWi5hKSxKPVkubXVsKEsuYikscmU9Vy5t''@;'; put 'put ''dWwoWi5iKTtyZXR1cm57azE6Ti5zdWIocSkuc3ViKGVlKSxrMjpKLmFkZChyZSkubmVnKCl9fSxQLnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKE4sTyl7KE49bmV3IF8oTiwxNikpLnJlZHx8KE49Ti50b1JlZCh0aGlzLnJlZCkpO3ZhciBLPU4ucmVkU3FyKCkucmVkTXVsKE4pLnJl''@;'; put 'put ''ZElBZGQoTi5yZWRNdWwodGhpcy5hKSkucmVkSUFkZCh0aGlzLmIpLFo9Sy5yZWRTcXJ0KCk7aWYoMCE9PVoucmVkU3FyKCkucmVkU3ViKEspLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3ZhciBZPVouZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKE8m''@;'; put 'put ''JiFZfHwhTyYmWSkmJihaPVoucmVkTmVnKCkpLHRoaXMucG9pbnQoTixaKX0sUC5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oTil7aWYoTi5pbmYpcmV0dXJuITA7dmFyIE89Ti54LEs9Ti55LFo9dGhpcy5hLnJlZE11bChPKSxZPU8ucmVkU3FyKCkucmVkTXVsKE8pLnJlZElBZGQoWiku''@;'; put 'put ''cmVkSUFkZCh0aGlzLmIpO3JldHVybiAwPT09Sy5yZWRTcXIoKS5yZWRJU3ViKFkpLmNtcG4oMCl9LFAucHJvdG90eXBlLl9lbmRvV25hZk11bEFkZD1mdW5jdGlvbihOLE8sSyl7Zm9yKHZhciBaPXRoaXMuX2VuZG9XbmFmVDEsWT10aGlzLl9lbmRvV25hZlQyLFc9MDtXPE4ubGVuZ3RoO1cr''@;'; put 'put ''Kyl7dmFyIHE9dGhpcy5fZW5kb1NwbGl0KE9bV10pLGVlPU5bV10sSj1lZS5fZ2V0QmV0YSgpO3EuazEubmVnYXRpdmUmJihxLmsxLmluZWcoKSxlZT1lZS5uZWcoITApKSxxLmsyLm5lZ2F0aXZlJiYocS5rMi5pbmVnKCksSj1KLm5lZyghMCkpLFpbMipXXT1lZSxaWzIqVysxXT1KLFlbMipX''@;'; put 'put ''XT1xLmsxLFlbMipXKzFdPXEuazJ9Zm9yKHZhciByZT10aGlzLl93bmFmTXVsQWRkKDEsWixZLDIqVyxLKSxpZT0wO2llPDIqVztpZSsrKVpbaWVdPW51bGwsWVtpZV09bnVsbDtyZXR1cm4gcmV9LHAoRixWLkJhc2VQb2ludCksUC5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oTixPLEspe3Jl''@;'; put 'put ''dHVybiBuZXcgRih0aGlzLE4sTyxLKX0sUC5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihOLE8pe3JldHVybiBGLmZyb21KU09OKHRoaXMsTixPKX0sRi5wcm90b3R5cGUuX2dldEJldGE9ZnVuY3Rpb24oKXtpZih0aGlzLmN1cnZlLmVuZG8pe3ZhciBOPXRoaXMucHJlY29tcHV0''@;'; put 'put ''ZWQ7aWYoTiYmTi5iZXRhKXJldHVybiBOLmJldGE7dmFyIE89dGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngucmVkTXVsKHRoaXMuY3VydmUuZW5kby5iZXRhKSx0aGlzLnkpO2lmKE4pe3ZhciBLPXRoaXMuY3VydmUsWj1mdW5jdGlvbihZKXtyZXR1cm4gSy5wb2ludChZLngucmVkTXVsKEsuZW5k''@;'; put 'put ''by5iZXRhKSxZLnkpfTtOLmJldGE9TyxPLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsbmFmOk4ubmFmJiZ7d25kOk4ubmFmLnduZCxwb2ludHM6Ti5uYWYucG9pbnRzLm1hcChaKX0sZG91YmxlczpOLmRvdWJsZXMmJntzdGVwOk4uZG91Ymxlcy5zdGVwLHBvaW50czpOLmRvdWJsZXMucG9pbnRz''@;'; put 'put ''Lm1hcChaKX19fXJldHVybiBPfX0sRi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJlY29tcHV0ZWQ/W3RoaXMueCx0aGlzLnksdGhpcy5wcmVjb21wdXRlZCYme2RvdWJsZXM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzJiZ7c3RlcDp0aGlzLnByZWNvbXB1dGVk''@;'; put 'put ''LmRvdWJsZXMuc3RlcCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnBvaW50cy5zbGljZSgxKX0sbmFmOnRoaXMucHJlY29tcHV0ZWQubmFmJiZ7d25kOnRoaXMucHJlY29tcHV0ZWQubmFmLnduZCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5uYWYucG9pbnRzLnNsaWNlKDEpfX1d''@;'; put 'put ''Olt0aGlzLngsdGhpcy55XX0sRi5mcm9tSlNPTj1mdW5jdGlvbihOLE8sSyl7InN0cmluZyI9PXR5cGVvZiBPJiYoTz1KU09OLnBhcnNlKE8pKTt2YXIgWj1OLnBvaW50KE9bMF0sT1sxXSxLKTtpZighT1syXSlyZXR1cm4gWjtmdW5jdGlvbiBZKHEpe3JldHVybiBOLnBvaW50KHFbMF0scVsx''@;'; put 'put ''XSxLKX12YXIgVz1PWzJdO3JldHVybiBaLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsZG91YmxlczpXLmRvdWJsZXMmJntzdGVwOlcuZG91Ymxlcy5zdGVwLHBvaW50czpbWl0uY29uY2F0KFcuZG91Ymxlcy5wb2ludHMubWFwKFkpKX0sbmFmOlcubmFmJiZ7d25kOlcubmFmLnduZCxwb2ludHM6''@;'; put 'put ''W1pdLmNvbmNhdChXLm5hZi5wb2ludHMubWFwKFkpKX19LFp9LEYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIg''@;'; put 'put ''eTogIit0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sRi5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmluZn0sRi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKE4pe2lmKHRoaXMuaW5mKXJldHVybiBOO2lmKE4uaW5mKXJldHVybiB0aGlzO2lm''@;'; put 'put ''KHRoaXMuZXEoTikpcmV0dXJuIHRoaXMuZGJsKCk7aWYodGhpcy5uZWcoKS5lcShOKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO2lmKDA9PT10aGlzLnguY21wKE4ueCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgTz10aGlzLnkucmVkU3ViKE4u''@;'; put 'put ''eSk7MCE9PU8uY21wbigwKSYmKE89Ty5yZWRNdWwodGhpcy54LnJlZFN1YihOLngpLnJlZEludm0oKSkpO3ZhciBLPU8ucmVkU3FyKCkucmVkSVN1Yih0aGlzLngpLnJlZElTdWIoTi54KSxaPU8ucmVkTXVsKHRoaXMueC5yZWRTdWIoSykpLnJlZElTdWIodGhpcy55KTtyZXR1cm4gdGhpcy5j''@;'; put 'put ''dXJ2ZS5wb2ludChLLFopfSxGLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgTj10aGlzLnkucmVkQWRkKHRoaXMueSk7aWYoMD09PU4uY21wbigwKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBPPXRoaXMuY3VydmUu''@;'; put 'put ''YSxLPXRoaXMueC5yZWRTcXIoKSxaPU4ucmVkSW52bSgpLFk9Sy5yZWRBZGQoSykucmVkSUFkZChLKS5yZWRJQWRkKE8pLnJlZE11bChaKSxXPVkucmVkU3FyKCkucmVkSVN1Yih0aGlzLngucmVkQWRkKHRoaXMueCkpLHE9WS5yZWRNdWwodGhpcy54LnJlZFN1YihXKSkucmVkSVN1Yih0aGlz''@;'; put 'put ''LnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFcscSl9LEYucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54LmZyb21SZWQoKX0sRi5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkuZnJvbVJlZCgpfSxGLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24o''@;'; put 'put ''Til7cmV0dXJuIE49bmV3IF8oTiwxNiksdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLl9oYXNEb3VibGVzKE4pP3RoaXMuY3VydmUuX2ZpeGVkTmFmTXVsKHRoaXMsTik6dGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKFt0aGlzXSxbTl0pOnRoaXMuY3VydmUu''@;'; put 'put ''X3duYWZNdWwodGhpcyxOKX0sRi5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKE4sTyxLKXt2YXIgWj1bdGhpcyxPXSxZPVtOLEtdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoWixZKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsWixZLDIpfSxG''@;'; put 'put ''LnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKE4sTyxLKXt2YXIgWj1bdGhpcyxPXSxZPVtOLEtdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoWixZLCEwKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsWixZLDIsITApfSxGLnByb3RvdHlwZS5l''@;'; put 'put ''cT1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcz09PU58fHRoaXMuaW5mPT09Ti5pbmYmJih0aGlzLmluZnx8MD09PXRoaXMueC5jbXAoTi54KSYmMD09PXRoaXMueS5jbXAoTi55KSl9LEYucHJvdG90eXBlLm5lZz1mdW5jdGlvbihOKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgTz10aGlz''@;'; put 'put ''LmN1cnZlLnBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCkpO2lmKE4mJnRoaXMucHJlY29tcHV0ZWQpe3ZhciBLPXRoaXMucHJlY29tcHV0ZWQsWj1mdW5jdGlvbihZKXtyZXR1cm4gWS5uZWcoKX07Ty5wcmVjb21wdXRlZD17bmFmOksubmFmJiZ7d25kOksubmFmLnduZCxwb2ludHM6Sy5u''@;'; put 'put ''YWYucG9pbnRzLm1hcChaKX0sZG91YmxlczpLLmRvdWJsZXMmJntzdGVwOksuZG91Ymxlcy5zdGVwLHBvaW50czpLLmRvdWJsZXMucG9pbnRzLm1hcChaKX19fXJldHVybiBPfSxGLnByb3RvdHlwZS50b0o9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmY/dGhpcy5jdXJ2ZS5qcG9pbnQobnVs''@;'; put 'put ''bCxudWxsLG51bGwpOnRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnksdGhpcy5jdXJ2ZS5vbmUpfSxwKFIsVi5CYXNlUG9pbnQpLFAucHJvdG90eXBlLmpwb2ludD1mdW5jdGlvbihOLE8sSyl7cmV0dXJuIG5ldyBSKHRoaXMsTixPLEspfSxSLnByb3RvdHlwZS50b1A9ZnVuY3Rpb24o''@;'; put 'put ''KXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBOPXRoaXMuei5yZWRJbnZtKCksTz1OLnJlZFNxcigpLEs9dGhpcy54LnJlZE11bChPKSxaPXRoaXMueS5yZWRNdWwoTykucmVkTXVsKE4pO3JldHVybiB0aGlzLmN1cnZlLnBvaW50''@;'; put 'put ''KEssWil9LFIucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpLHRoaXMueil9LFIucHJvdG90eXBlLmFkZD1mdW5jdGlvbihOKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gTjtpZihOLmlzSW5maW5pdHko''@;'; put 'put ''KSlyZXR1cm4gdGhpczt2YXIgTz1OLnoucmVkU3FyKCksSz10aGlzLnoucmVkU3FyKCksWj10aGlzLngucmVkTXVsKE8pLFk9Ti54LnJlZE11bChLKSxXPXRoaXMueS5yZWRNdWwoTy5yZWRNdWwoTi56KSkscT1OLnkucmVkTXVsKEsucmVkTXVsKHRoaXMueikpLGVlPVoucmVkU3ViKFkpLEo9''@;'; put 'put ''Vy5yZWRTdWIocSk7aWYoMD09PWVlLmNtcG4oMCkpcmV0dXJuIDAhPT1KLmNtcG4oMCk/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuZGJsKCk7dmFyIHJlPWVlLnJlZFNxcigpLGllPXJlLnJlZE11bChlZSksdWU9Wi5yZWRNdWwocmUpLGdlPUoucmVkU3FyKCkucmVk''@;'; put 'put ''SUFkZChpZSkucmVkSVN1Yih1ZSkucmVkSVN1Yih1ZSksX2U9Si5yZWRNdWwodWUucmVkSVN1YihnZSkpLnJlZElTdWIoVy5yZWRNdWwoaWUpKSxUZT10aGlzLnoucmVkTXVsKE4ueikucmVkTXVsKGVlKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoZ2UsX2UsVGUpfSxSLnByb3RvdHlwZS5t''@;'; put 'put ''aXhlZEFkZD1mdW5jdGlvbihOKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gTi50b0ooKTtpZihOLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2YXIgTz10aGlzLnoucmVkU3FyKCksSz10aGlzLngsWj1OLngucmVkTXVsKE8pLFk9dGhpcy55LFc9Ti55LnJlZE11bChPKS5yZWRNdWwo''@;'; put 'put ''dGhpcy56KSxxPUsucmVkU3ViKFopLGVlPVkucmVkU3ViKFcpO2lmKDA9PT1xLmNtcG4oMCkpcmV0dXJuIDAhPT1lZS5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciBKPXEucmVkU3FyKCkscmU9Si5yZWRNdWwocSksaWU9Sy5yZWRNdWwo''@;'; put 'put ''SiksdWU9ZWUucmVkU3FyKCkucmVkSUFkZChyZSkucmVkSVN1YihpZSkucmVkSVN1YihpZSksZ2U9ZWUucmVkTXVsKGllLnJlZElTdWIodWUpKS5yZWRJU3ViKFkucmVkTXVsKHJlKSksX2U9dGhpcy56LnJlZE11bChxKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodWUsZ2UsX2UpfSxSLnBy''@;'; put 'put ''b3RvdHlwZS5kYmxwPWZ1bmN0aW9uKE4pe2lmKDA9PT1OKXJldHVybiB0aGlzO2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO2lmKCFOKXJldHVybiB0aGlzLmRibCgpO3ZhciBPO2lmKHRoaXMuY3VydmUuemVyb0F8fHRoaXMuY3VydmUudGhyZWVBKXt2YXIgSz10aGlzO2ZvcihP''@;'; put 'put ''PTA7TzxOO08rKylLPUsuZGJsKCk7cmV0dXJuIEt9dmFyIFo9dGhpcy5jdXJ2ZS5hLFk9dGhpcy5jdXJ2ZS50aW52LFc9dGhpcy54LHE9dGhpcy55LGVlPXRoaXMueixKPWVlLnJlZFNxcigpLnJlZFNxcigpLHJlPXEucmVkQWRkKHEpO2ZvcihPPTA7TzxOO08rKyl7dmFyIGllPVcucmVkU3Fy''@;'; put 'put ''KCksdWU9cmUucmVkU3FyKCksZ2U9dWUucmVkU3FyKCksX2U9aWUucmVkQWRkKGllKS5yZWRJQWRkKGllKS5yZWRJQWRkKFoucmVkTXVsKEopKSxUZT1XLnJlZE11bCh1ZSksTWU9X2UucmVkU3FyKCkucmVkSVN1YihUZS5yZWRBZGQoVGUpKSxaZT1UZS5yZWRJU3ViKE1lKSxCPV9lLnJlZE11''@;'; put 'put ''bChaZSk7Qj1CLnJlZElBZGQoQikucmVkSVN1YihnZSk7dmFyIGc9cmUucmVkTXVsKGVlKTtPKzE8TiYmKEo9Si5yZWRNdWwoZ2UpKSxXPU1lLGVlPWcscmU9Qn1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoVyxyZS5yZWRNdWwoWSksZWUpfSxSLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLnplcm9BP3RoaXMuX3plcm9EYmwoKTp0aGlzLmN1cnZlLnRocmVlQT90aGlzLl90aHJlZURibCgpOnRoaXMuX2RibCgpfSxSLnByb3RvdHlwZS5femVyb0RibD1mdW5jdGlvbigpe3ZhciBOLE8sSztpZih0aGlzLnpPbmUp''@;'; put 'put ''e3ZhciBaPXRoaXMueC5yZWRTcXIoKSxZPXRoaXMueS5yZWRTcXIoKSxXPVkucmVkU3FyKCkscT10aGlzLngucmVkQWRkKFkpLnJlZFNxcigpLnJlZElTdWIoWikucmVkSVN1YihXKTtxPXEucmVkSUFkZChxKTt2YXIgZWU9Wi5yZWRBZGQoWikucmVkSUFkZChaKSxKPWVlLnJlZFNxcigpLnJl''@;'; put 'put ''ZElTdWIocSkucmVkSVN1YihxKSxyZT1XLnJlZElBZGQoVyk7cmU9KHJlPXJlLnJlZElBZGQocmUpKS5yZWRJQWRkKHJlKSxOPUosTz1lZS5yZWRNdWwocS5yZWRJU3ViKEopKS5yZWRJU3ViKHJlKSxLPXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBpZT10aGlzLngucmVkU3FyKCks''@;'; put 'put ''dWU9dGhpcy55LnJlZFNxcigpLGdlPXVlLnJlZFNxcigpLF9lPXRoaXMueC5yZWRBZGQodWUpLnJlZFNxcigpLnJlZElTdWIoaWUpLnJlZElTdWIoZ2UpO19lPV9lLnJlZElBZGQoX2UpO3ZhciBUZT1pZS5yZWRBZGQoaWUpLnJlZElBZGQoaWUpLE1lPVRlLnJlZFNxcigpLFplPWdlLnJlZElB''@;'; put 'put ''ZGQoZ2UpO1plPShaZT1aZS5yZWRJQWRkKFplKSkucmVkSUFkZChaZSksTj1NZS5yZWRJU3ViKF9lKS5yZWRJU3ViKF9lKSxPPVRlLnJlZE11bChfZS5yZWRJU3ViKE4pKS5yZWRJU3ViKFplKSxLPShLPXRoaXMueS5yZWRNdWwodGhpcy56KSkucmVkSUFkZChLKX1yZXR1cm4gdGhpcy5jdXJ2''@;'; put 'put ''ZS5qcG9pbnQoTixPLEspfSxSLnByb3RvdHlwZS5fdGhyZWVEYmw9ZnVuY3Rpb24oKXt2YXIgTixPLEs7aWYodGhpcy56T25lKXt2YXIgWj10aGlzLngucmVkU3FyKCksWT10aGlzLnkucmVkU3FyKCksVz1ZLnJlZFNxcigpLHE9dGhpcy54LnJlZEFkZChZKS5yZWRTcXIoKS5yZWRJU3ViKFop''@;'; put 'put ''LnJlZElTdWIoVyk7cT1xLnJlZElBZGQocSk7dmFyIGVlPVoucmVkQWRkKFopLnJlZElBZGQoWikucmVkSUFkZCh0aGlzLmN1cnZlLmEpLEo9ZWUucmVkU3FyKCkucmVkSVN1YihxKS5yZWRJU3ViKHEpO049Sjt2YXIgcmU9Vy5yZWRJQWRkKFcpO3JlPShyZT1yZS5yZWRJQWRkKHJlKSkucmVk''@;'; put 'put ''SUFkZChyZSksTz1lZS5yZWRNdWwocS5yZWRJU3ViKEopKS5yZWRJU3ViKHJlKSxLPXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBpZT10aGlzLnoucmVkU3FyKCksdWU9dGhpcy55LnJlZFNxcigpLGdlPXRoaXMueC5yZWRNdWwodWUpLF9lPXRoaXMueC5yZWRTdWIoaWUpLnJlZE11''@;'; put 'put ''bCh0aGlzLngucmVkQWRkKGllKSk7X2U9X2UucmVkQWRkKF9lKS5yZWRJQWRkKF9lKTt2YXIgVGU9Z2UucmVkSUFkZChnZSksTWU9KFRlPVRlLnJlZElBZGQoVGUpKS5yZWRBZGQoVGUpO049X2UucmVkU3FyKCkucmVkSVN1YihNZSksSz10aGlzLnkucmVkQWRkKHRoaXMueikucmVkU3FyKCku''@;'; put 'put ''cmVkSVN1Yih1ZSkucmVkSVN1YihpZSk7dmFyIFplPXVlLnJlZFNxcigpO1plPShaZT0oWmU9WmUucmVkSUFkZChaZSkpLnJlZElBZGQoWmUpKS5yZWRJQWRkKFplKSxPPV9lLnJlZE11bChUZS5yZWRJU3ViKE4pKS5yZWRJU3ViKFplKX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoTixPLEsp''@;'; put 'put ''fSxSLnByb3RvdHlwZS5fZGJsPWZ1bmN0aW9uKCl7dmFyIE49dGhpcy5jdXJ2ZS5hLE89dGhpcy54LEs9dGhpcy55LFo9dGhpcy56LFk9Wi5yZWRTcXIoKS5yZWRTcXIoKSxXPU8ucmVkU3FyKCkscT1LLnJlZFNxcigpLGVlPVcucmVkQWRkKFcpLnJlZElBZGQoVykucmVkSUFkZChOLnJlZE11''@;'; put 'put ''bChZKSksSj1PLnJlZEFkZChPKSxyZT0oSj1KLnJlZElBZGQoSikpLnJlZE11bChxKSxpZT1lZS5yZWRTcXIoKS5yZWRJU3ViKHJlLnJlZEFkZChyZSkpLHVlPXJlLnJlZElTdWIoaWUpLGdlPXEucmVkU3FyKCk7Z2U9KGdlPShnZT1nZS5yZWRJQWRkKGdlKSkucmVkSUFkZChnZSkpLnJlZElB''@;'; put 'put ''ZGQoZ2UpO3ZhciBfZT1lZS5yZWRNdWwodWUpLnJlZElTdWIoZ2UpLFRlPUsucmVkQWRkKEspLnJlZE11bChaKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoaWUsX2UsVGUpfSxSLnByb3RvdHlwZS50cnBsPWZ1bmN0aW9uKCl7aWYoIXRoaXMuY3VydmUuemVyb0EpcmV0dXJuIHRoaXMuZGJs''@;'; put 'put ''KCkuYWRkKHRoaXMpO3ZhciBOPXRoaXMueC5yZWRTcXIoKSxPPXRoaXMueS5yZWRTcXIoKSxLPXRoaXMuei5yZWRTcXIoKSxaPU8ucmVkU3FyKCksWT1OLnJlZEFkZChOKS5yZWRJQWRkKE4pLFc9WS5yZWRTcXIoKSxxPXRoaXMueC5yZWRBZGQoTykucmVkU3FyKCkucmVkSVN1YihOKS5yZWRJ''@;'; put 'put ''U3ViKFopLGVlPShxPShxPShxPXEucmVkSUFkZChxKSkucmVkQWRkKHEpLnJlZElBZGQocSkpLnJlZElTdWIoVykpLnJlZFNxcigpLEo9Wi5yZWRJQWRkKFopO0o9KEo9KEo9Si5yZWRJQWRkKEopKS5yZWRJQWRkKEopKS5yZWRJQWRkKEopO3ZhciByZT1ZLnJlZElBZGQocSkucmVkU3FyKCku''@;'; put 'put ''cmVkSVN1YihXKS5yZWRJU3ViKGVlKS5yZWRJU3ViKEopLGllPU8ucmVkTXVsKHJlKTtpZT0oaWU9aWUucmVkSUFkZChpZSkpLnJlZElBZGQoaWUpO3ZhciB1ZT10aGlzLngucmVkTXVsKGVlKS5yZWRJU3ViKGllKTt1ZT0odWU9dWUucmVkSUFkZCh1ZSkpLnJlZElBZGQodWUpO3ZhciBnZT10''@;'; put 'put ''aGlzLnkucmVkTXVsKHJlLnJlZE11bChKLnJlZElTdWIocmUpKS5yZWRJU3ViKHEucmVkTXVsKGVlKSkpO2dlPShnZT0oZ2U9Z2UucmVkSUFkZChnZSkpLnJlZElBZGQoZ2UpKS5yZWRJQWRkKGdlKTt2YXIgX2U9dGhpcy56LnJlZEFkZChxKS5yZWRTcXIoKS5yZWRJU3ViKEspLnJlZElTdWIo''@;'; put 'put ''ZWUpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludCh1ZSxnZSxfZSl9LFIucHJvdG90eXBlLm11bD1mdW5jdGlvbihOLE8pe3JldHVybiBOPW5ldyBfKE4sTyksdGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLE4pfSxSLnByb3RvdHlwZS5lcT1mdW5jdGlvbihOKXtpZigiYWZmaW5lIj09PU4udHlw''@;'; put 'put ''ZSlyZXR1cm4gdGhpcy5lcShOLnRvSigpKTtpZih0aGlzPT09TilyZXR1cm4hMDt2YXIgTz10aGlzLnoucmVkU3FyKCksSz1OLnoucmVkU3FyKCk7aWYoMCE9PXRoaXMueC5yZWRNdWwoSykucmVkSVN1YihOLngucmVkTXVsKE8pKS5jbXBuKDApKXJldHVybiExO3ZhciBaPU8ucmVkTXVsKHRo''@;'; put 'put ''aXMueiksWT1LLnJlZE11bChOLnopO3JldHVybiAwPT09dGhpcy55LnJlZE11bChZKS5yZWRJU3ViKE4ueS5yZWRNdWwoWikpLmNtcG4oMCl9LFIucHJvdG90eXBlLmVxWFRvUD1mdW5jdGlvbihOKXt2YXIgTz10aGlzLnoucmVkU3FyKCksSz1OLnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRN''@;'; put 'put ''dWwoTyk7aWYoMD09PXRoaXMueC5jbXAoSykpcmV0dXJuITA7Zm9yKHZhciBaPU4uY2xvbmUoKSxZPXRoaXMuY3VydmUucmVkTi5yZWRNdWwoTyk7Oyl7aWYoWi5pYWRkKHRoaXMuY3VydmUubiksWi5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihLLnJlZElBZGQoWSksMD09PXRo''@;'; put 'put ''aXMueC5jbXAoSykpcmV0dXJuITB9fSxSLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgSlBvaW50IEluZmluaXR5PiI6IjxFQyBKUG9pbnQgeDogIit0aGlzLngudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS50b1N0cmluZygx''@;'; put 'put ''NiwyKSsiIHo6ICIrdGhpcy56LnRvU3RyaW5nKDE2LDIpKyI+In0sUi5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy56LmNtcG4oMCl9fSw1NDI3OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBSLEk9WCxfPWIoMzcxNSkscD1iKDgyNTQpLHc9Yig5''@;'; put 'put ''NTMpLmFzc2VydDtmdW5jdGlvbiBQKHope3RoaXMuY3VydmU9InNob3J0Ij09PXoudHlwZT9uZXcgcC5zaG9ydCh6KToiZWR3YXJkcyI9PT16LnR5cGU/bmV3IHAuZWR3YXJkcyh6KTpuZXcgcC5tb250KHopLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5uPXRoaXMuY3VydmUubix0aGlzLmhh''@;'; put 'put ''c2g9ei5oYXNoLHcodGhpcy5nLnZhbGlkYXRlKCksIkludmFsaWQgY3VydmUiKSx3KHRoaXMuZy5tdWwodGhpcy5uKS5pc0luZmluaXR5KCksIkludmFsaWQgY3VydmUsIEcqTiAhPSBPIil9ZnVuY3Rpb24gRih6LE4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShJLHose2NvbmZpZ3VyYWJsZToh''@;'; put 'put ''MCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciBPPW5ldyBQKE4pO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoSSx6LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpPfSksT319KX1JLlByZXNldEN1cnZlPVAsRigicDE5MiIse3R5cGU6InNob3J0Iixw''@;'; put 'put ''cmltZToicDE5MiIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZjIixiOiI2NDIxMDUxOSBlNTljODBlNyAwZmE3ZTlhYiA3MjI0MzA0''@;'; put 'put ''OSBmZWI4ZGVlYyBjMTQ2YjliMSIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgOTlkZWY4MzYgMTQ2YmM5YjEgYjRkMjI4MzEiLGhhc2g6Xy5zaGEyNTYsZ1JlZDohMSxnOlsiMTg4ZGE4MGUgYjAzMDkwZjYgN2NiZjIwZWIgNDNhMTg4MDAgZjRmZjBhZmQgODJmZjEwMTIiLCIwNzE5''@;'; put 'put ''MmI5NSBmZmM4ZGE3OCA2MzEwMTFlZCA2YjI0Y2RkNSA3M2Y5NzdhMSAxZTc5NDgxMSJdfSksRigicDIyNCIse3R5cGU6InNob3J0IixwcmltZToicDIyNCIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiLGE6ImZmZmZm''@;'; put 'put ''ZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIixiOiJiNDA1MGE4NSAwYzA0YjNhYiBmNTQxMzI1NiA1MDQ0YjBiNyBkN2JmZDhiYSAyNzBiMzk0MyAyMzU1ZmZiNCIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZjE2YTIg''@;'; put 'put ''ZTBiOGYwM2UgMTNkZDI5NDUgNWM1YzJhM2QiLGhhc2g6Xy5zaGEyNTYsZ1JlZDohMSxnOlsiYjcwZTBjYmQgNmJiNGJmN2YgMzIxMzkwYjkgNGEwM2MxZDMgNTZjMjExMjIgMzQzMjgwZDYgMTE1YzFkMjEiLCJiZDM3NjM4OCBiNWY3MjNmYiA0YzIyZGZlNiBjZDQzNzVhMCA1YTA3NDc2NCA0''@;'; put 'put ''NGQ1ODE5OSA4NTAwN2UzNCJdfSksRigicDI1NiIse3R5cGU6InNob3J0IixwcmltZTpudWxsLHA6ImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIixhOiJmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAw''@;'; put 'put ''MDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYyIsYjoiNWFjNjM1ZDggYWEzYTkzZTcgYjNlYmJkNTUgNzY5ODg2YmMgNjUxZDA2YjAgY2M1M2IwZjYgM2JjZTNjM2UgMjdkMjYwNGIiLG46ImZmZmZmZmZmIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGJjZTZmYWFk''@;'; put 'put ''IGE3MTc5ZTg0IGYzYjljYWMyIGZjNjMyNTUxIixoYXNoOl8uc2hhMjU2LGdSZWQ6ITEsZzpbIjZiMTdkMWYyIGUxMmM0MjQ3IGY4YmNlNmU1IDYzYTQ0MGYyIDc3MDM3ZDgxIDJkZWIzM2EwIGY0YTEzOTQ1IGQ4OThjMjk2IiwiNGZlMzQyZTIgZmUxYTdmOWIgOGVlN2ViNGEgN2MwZjllMTYg''@;'; put 'put ''MmJjZTMzNTcgNmIzMTVlY2UgY2JiNjQwNjggMzdiZjUxZjUiXX0pLEYoInAzODQiLHt0eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAw''@;'; put 'put ''MCAwMDAwMDAwMCBmZmZmZmZmZiIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmMiLGI6ImIzMzEyZmE3IGUyM2VlN2U0IDk4OGUwNTZiIGUz''@;'; put 'put ''ZjgyZDE5IDE4MWQ5YzZlIGZlODE0MTEyIDAzMTQwODhmIDUwMTM4NzVhIGM2NTYzOThkIDhhMmVkMTlkIDJhODVjOGVkIGQzZWMyYWVmIixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBjNzYzNGQ4MSBmNDM3MmRkZiA1ODFhMGRiMiA0''@;'; put 'put ''OGIwYTc3YSBlY2VjMTk2YSBjY2M1Mjk3MyIsaGFzaDpfLnNoYTM4NCxnUmVkOiExLGc6WyJhYTg3Y2EyMiBiZThiMDUzNyA4ZWIxYzcxZSBmMzIwYWQ3NCA2ZTFkM2I2MiA4YmE3OWI5OCA1OWY3NDFlMCA4MjU0MmEzOCA1NTAyZjI1ZCBiZjU1Mjk2YyAzYTU0NWUzOCA3Mjc2MGFiNyIsIjM2''@;'; put 'put ''MTdkZTRhIDk2MjYyYzZmIDVkOWU5OGJmIDkyOTJkYzI5IGY4ZjQxZGJkIDI4OWExNDdjIGU5ZGEzMTEzIGI1ZjBiOGMwIDBhNjBiMWNlIDFkN2U4MTlkIDdhNDMxZDdjIDkwZWEwZTVmIl19KSxGKCJwNTIxIix7dHlwZToic2hvcnQiLHByaW1lOm51bGwscDoiMDAwMDAxZmYgZmZmZmZmZmYg''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYiLGE6IjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZm''@;'; put 'put ''IGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjIixiOiIwMDAwMDA1MSA5NTNlYjk2MSA4ZTFjOWExZiA5MjlhMjFh''@;'; put 'put ''MCBiNjg1NDBlZSBhMmRhNzI1YiA5OWIzMTVmMyBiOGI0ODk5MSA4ZWYxMDllMSA1NjE5Mzk1MSBlYzdlOTM3YiAxNjUyYzBiZCAzYmIxYmYwNyAzNTczZGY4OCAzZDJjMzRmMSBlZjQ1MWZkNCA2YjUwM2YwMCIsbjoiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmEgNTE4Njg3ODMgYmYyZjk2NmIgN2ZjYzAxNDggZjcwOWE1ZDAgM2JiNWM5YjggODk5YzQ3YWUgYmI2ZmI3MWUgOTEzODY0MDkiLGhhc2g6Xy5zaGE1MTIsZ1JlZDohMSxnOlsiMDAwMDAwYzYgODU4ZTA2YjcgMDQwNGU5Y2Qg''@;'; put 'put ''OWUzZWNiNjYgMjM5NWI0NDIgOWM2NDgxMzkgMDUzZmI1MjEgZjgyOGFmNjAgNmI0ZDNkYmEgYTE0YjVlNzcgZWZlNzU5MjggZmUxZGMxMjcgYTJmZmE4ZGUgMzM0OGIzYzEgODU2YTQyOWIgZjk3ZTdlMzEgYzJlNWJkNjYiLCIwMDAwMDExOCAzOTI5NmE3OCA5YTNiYzAwNCA1YzhhNWZiNCAy''@;'; put 'put ''YzdkMWJkOSA5OGY1NDQ0OSA1NzliNDQ2OCAxN2FmYmQxNyAyNzNlNjYyYyA5N2VlNzI5OSA1ZWY0MjY0MCBjNTUwYjkwMSAzZmFkMDc2MSAzNTNjNzA4NiBhMjcyYzI0MCA4OGJlOTQ3NiA5ZmQxNjY1MCJdfSksRigiY3VydmUyNTUxOSIse3R5cGU6Im1vbnQiLHByaW1lOiJwMjU1MTkiLHA6''@;'; put 'put ''IjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiLGE6Ijc2ZDA2IixiOiIxIixuOiIxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkIixoYXNoOl8u''@;'; put 'put ''c2hhMjU2LGdSZWQ6ITEsZzpbIjkiXX0pLEYoImVkMjU1MTkiLHt0eXBlOiJlZHdhcmRzIixwcmltZToicDI1NTE5IixwOiI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIixhOiItMSIsYzoiMSIsZDoiNTIwMzZjZWUy''@;'; put 'put ''YjZmZmU3MyA4Y2M3NDA3OTc3NzllODk4IDAwNzAwYTRkNDE0MWQ4YWIgNzVlYjRkY2ExMzU5NzhhMyIsbjoiMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRlYTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZCIsaGFzaDpfLnNoYTI1NixnUmVkOiExLGc6WyIyMTY5MzZk''@;'; put 'put ''M2NkNmU1M2ZlYzBhNGUyMzFmZGQ2ZGM1YzY5MmNjNzYwOTUyNWE3YjJjOTU2MmQ2MDhmMjVkNTFhIiwiNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY1OCJdfSk7dHJ5e1I9YigxMDM3KX1jYXRjaHtSPXZvaWQgMH1GKCJzZWNw''@;'; put 'put ''MjU2azEiLHt0eXBlOiJzaG9ydCIscHJpbWU6ImsyNTYiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIixhOiIwIixiOiI3IixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBiYWFl''@;'; put 'put ''ZGNlNiBhZjQ4YTAzYiBiZmQyNWU4YyBkMDM2NDE0MSIsaDoiMSIsaGFzaDpfLnNoYTI1NixiZXRhOiI3YWU5NmEyYjY1N2MwNzEwNmU2NDQ3OWVhYzM0MzRlOTljZjA0OTc1MTJmNTg5OTVjMTM5NmMyODcxOTUwMWVlIixsYW1iZGE6IjUzNjNhZDRjYzA1YzMwZTBhNTI2MWMwMjg4MTI2NDVh''@;'; put 'put ''MTIyZTIyZWEyMDgxNjY3OGRmMDI5NjdjMWIyM2JkNzIiLGJhc2lzOlt7YToiMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTUiLGI6Ii1lNDQzN2VkNjAxMGU4ODI4NmY1NDdmYTkwYWJmZTRjMyJ9LHthOiIxMTRjYTUwZjdhOGUyZjNmNjU3YzExMDhkOWQ0NGNmZDgiLGI6IjMwODZk''@;'; put 'put ''MjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1In1dLGdSZWQ6ITEsZzpbIjc5YmU2NjdlZjlkY2JiYWM1NWEwNjI5NWNlODcwYjA3MDI5YmZjZGIyZGNlMjhkOTU5ZjI4MTViMTZmODE3OTgiLCI0ODNhZGE3NzI2YTNjNDY1NWRhNGZiZmMwZTExMDhhOGZkMTdiNDQ4YTY4NTU0MTk5YzQ3ZDA4''@;'; put 'put ''ZmZiMTBkNGI4IixSXX0pfSw3OTU0OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMzc4NSksXz1iKDIxNTYpLHA9Yig5NTMpLFY9Yig1NDI3KSx3PWIoOTkzMSksUD1wLmFzc2VydCxGPWIoMTI1MSksUj1iKDYxMSk7ZnVuY3Rpb24geihOKXtpZighKHRoaXMgaW5zdGFuY2VvZiB6''@;'; put 'put ''KSlyZXR1cm4gbmV3IHooTik7InN0cmluZyI9PXR5cGVvZiBOJiYoUChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVixOKSwiVW5rbm93biBjdXJ2ZSAiK04pLE49VltOXSksTiBpbnN0YW5jZW9mIFYuUHJlc2V0Q3VydmUmJihOPXtjdXJ2ZTpOfSksdGhpcy5jdXJ2ZT1O''@;'; put 'put ''LmN1cnZlLmN1cnZlLHRoaXMubj10aGlzLmN1cnZlLm4sdGhpcy5uaD10aGlzLm4udXNocm4oMSksdGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLmc9Ti5jdXJ2ZS5nLHRoaXMuZy5wcmVjb21wdXRlKE4uY3VydmUubi5iaXRMZW5ndGgoKSsxKSx0aGlzLmhhc2g9Ti5oYXNofHxOLmN1cnZlLmhh''@;'; put 'put ''c2h9Y2UuZXhwb3J0cz16LHoucHJvdG90eXBlLmtleVBhaXI9ZnVuY3Rpb24oTyl7cmV0dXJuIG5ldyBGKHRoaXMsTyl9LHoucHJvdG90eXBlLmtleUZyb21Qcml2YXRlPWZ1bmN0aW9uKE8sSyl7cmV0dXJuIEYuZnJvbVByaXZhdGUodGhpcyxPLEspfSx6LnByb3RvdHlwZS5rZXlGcm9tUHVi''@;'; put 'put ''bGljPWZ1bmN0aW9uKE8sSyl7cmV0dXJuIEYuZnJvbVB1YmxpYyh0aGlzLE8sSyl9LHoucHJvdG90eXBlLmdlbktleVBhaXI9ZnVuY3Rpb24oTyl7T3x8KE89e30pO2Zvcih2YXIgSz1uZXcgXyh7aGFzaDp0aGlzLmhhc2gscGVyczpPLnBlcnMscGVyc0VuYzpPLnBlcnNFbmN8fCJ1dGY4Iixl''@;'; put 'put ''bnRyb3B5Ok8uZW50cm9weXx8dyh0aGlzLmhhc2guaG1hY1N0cmVuZ3RoKSxlbnRyb3B5RW5jOk8uZW50cm9weSYmTy5lbnRyb3B5RW5jfHwidXRmOCIsbm9uY2U6dGhpcy5uLnRvQXJyYXkoKX0pLFo9dGhpcy5uLmJ5dGVMZW5ndGgoKSxZPXRoaXMubi5zdWIobmV3IEkoMikpOzspe3ZhciBX''@;'; put 'put ''PW5ldyBJKEsuZ2VuZXJhdGUoWikpO2lmKCEoVy5jbXAoWSk+MCkpcmV0dXJuIFcuaWFkZG4oMSksdGhpcy5rZXlGcm9tUHJpdmF0ZShXKX19LHoucHJvdG90eXBlLl90cnVuY2F0ZVRvTj1mdW5jdGlvbihPLEssWil7dmFyIFk7aWYoSS5pc0JOKE8pfHwibnVtYmVyIj09dHlwZW9mIE8pWT0o''@;'; put 'put ''Tz1uZXcgSShPLDE2KSkuYnl0ZUxlbmd0aCgpO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBPKVk9Ty5sZW5ndGgsTz1uZXcgSShPLDE2KTtlbHNle3ZhciBXPU8udG9TdHJpbmcoKTtZPVcubGVuZ3RoKzE+Pj4xLE89bmV3IEkoVywxNil9Im51bWJlciIhPXR5cGVvZiBaJiYoWj04KlkpO3Zh''@;'; put 'put ''ciBxPVotdGhpcy5uLmJpdExlbmd0aCgpO3JldHVybiBxPjAmJihPPU8udXNocm4ocSkpLCFLJiZPLmNtcCh0aGlzLm4pPj0wP08uc3ViKHRoaXMubik6T30sei5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihPLEssWixZKXtpZigib2JqZWN0Ij09dHlwZW9mIFomJihZPVosWj1udWxsKSxZfHwo''@;'; put 'put ''WT17fSksInN0cmluZyIhPXR5cGVvZiBPJiYibnVtYmVyIiE9dHlwZW9mIE8mJiFJLmlzQk4oTykpe1AoIm9iamVjdCI9PXR5cGVvZiBPJiZPJiYibnVtYmVyIj09dHlwZW9mIE8ubGVuZ3RoLCJFeHBlY3RlZCBtZXNzYWdlIHRvIGJlIGFuIGFycmF5LWxpa2UsIGEgaGV4IHN0cmluZywgb3Ig''@;'; put 'put ''YSBCTiBpbnN0YW5jZSIpLFAoTy5sZW5ndGg+Pj4wPT09Ty5sZW5ndGgpO2Zvcih2YXIgVz0wO1c8Ty5sZW5ndGg7VysrKVAoKDI1NSZPW1ddKT09PU9bV10pfUs9dGhpcy5rZXlGcm9tUHJpdmF0ZShLLFopLE89dGhpcy5fdHJ1bmNhdGVUb04oTywhMSxZLm1zZ0JpdExlbmd0aCksUCghTy5p''@;'; put 'put ''c05lZygpLCJDYW4gbm90IHNpZ24gYSBuZWdhdGl2ZSBtZXNzYWdlIik7dmFyIHE9dGhpcy5uLmJ5dGVMZW5ndGgoKSxlZT1LLmdldFByaXZhdGUoKS50b0FycmF5KCJiZSIscSksSj1PLnRvQXJyYXkoImJlIixxKTtQKG5ldyBJKEopLmVxKE8pLCJDYW4gbm90IHNpZ24gbWVzc2FnZSIpO2Zv''@;'; put 'put ''cih2YXIgcmU9bmV3IF8oe2hhc2g6dGhpcy5oYXNoLGVudHJvcHk6ZWUsbm9uY2U6SixwZXJzOlkucGVycyxwZXJzRW5jOlkucGVyc0VuY3x8InV0ZjgifSksaWU9dGhpcy5uLnN1YihuZXcgSSgxKSksdWU9MDs7dWUrKyl7dmFyIGdlPVkuaz9ZLmsodWUpOm5ldyBJKHJlLmdlbmVyYXRlKHRo''@;'; put 'put ''aXMubi5ieXRlTGVuZ3RoKCkpKTtpZighKChnZT10aGlzLl90cnVuY2F0ZVRvTihnZSwhMCkpLmNtcG4oMSk8PTB8fGdlLmNtcChpZSk+PTApKXt2YXIgX2U9dGhpcy5nLm11bChnZSk7aWYoIV9lLmlzSW5maW5pdHkoKSl7dmFyIFRlPV9lLmdldFgoKSxNZT1UZS51bW9kKHRoaXMubik7aWYo''@;'; put 'put ''MCE9PU1lLmNtcG4oMCkpe3ZhciBaZT1nZS5pbnZtKHRoaXMubikubXVsKE1lLm11bChLLmdldFByaXZhdGUoKSkuaWFkZChPKSk7aWYoMCE9PShaZT1aZS51bW9kKHRoaXMubikpLmNtcG4oMCkpe3ZhciBCPShfZS5nZXRZKCkuaXNPZGQoKT8xOjApfCgwIT09VGUuY21wKE1lKT8yOjApO3Jl''@;'; put 'put ''dHVybiBZLmNhbm9uaWNhbCYmWmUuY21wKHRoaXMubmgpPjAmJihaZT10aGlzLm4uc3ViKFplKSxCXj0xKSxuZXcgUih7cjpNZSxzOlplLHJlY292ZXJ5UGFyYW06Qn0pfX19fX19LHoucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihPLEssWixZLFcpe1d8fChXPXt9KSxPPXRoaXMuX3RydW5j''@;'; put 'put ''YXRlVG9OKE8sITEsVy5tc2dCaXRMZW5ndGgpLFo9dGhpcy5rZXlGcm9tUHVibGljKFosWSk7dmFyIHE9KEs9bmV3IFIoSywiaGV4IikpLnIsZWU9Sy5zO2lmKHEuY21wbigxKTwwfHxxLmNtcCh0aGlzLm4pPj0wfHxlZS5jbXBuKDEpPDB8fGVlLmNtcCh0aGlzLm4pPj0wKXJldHVybiExO3Zh''@;'; put 'put ''ciB1ZSxKPWVlLmludm0odGhpcy5uKSxyZT1KLm11bChPKS51bW9kKHRoaXMubiksaWU9Si5tdWwocSkudW1vZCh0aGlzLm4pO3JldHVybiB0aGlzLmN1cnZlLl9tYXh3ZWxsVHJpY2s/ISh1ZT10aGlzLmcuam11bEFkZChyZSxaLmdldFB1YmxpYygpLGllKSkuaXNJbmZpbml0eSgpJiZ1ZS5l''@;'; put 'put ''cVhUb1AocSk6ISh1ZT10aGlzLmcubXVsQWRkKHJlLFouZ2V0UHVibGljKCksaWUpKS5pc0luZmluaXR5KCkmJjA9PT11ZS5nZXRYKCkudW1vZCh0aGlzLm4pLmNtcChxKX0sei5wcm90b3R5cGUucmVjb3ZlclB1YktleT1mdW5jdGlvbihOLE8sSyxaKXtQKCgzJkspPT09SywiVGhlIHJlY292''@;'; put 'put ''ZXJ5IHBhcmFtIGlzIG1vcmUgdGhhbiB0d28gYml0cyIpLE89bmV3IFIoTyxaKTt2YXIgWT10aGlzLm4sVz1uZXcgSShOKSxxPU8ucixlZT1PLnMsSj0xJksscmU9Sz4+MTtpZihxLmNtcCh0aGlzLmN1cnZlLnAudW1vZCh0aGlzLmN1cnZlLm4pKT49MCYmcmUpdGhyb3cgbmV3IEVycm9yKCJV''@;'; put 'put ''bmFibGUgdG8gZmluZCBzZW5jb25kIGtleSBjYW5kaW5hdGUiKTtxPXRoaXMuY3VydmUucG9pbnRGcm9tWChyZT9xLmFkZCh0aGlzLmN1cnZlLm4pOnEsSik7dmFyIGllPU8uci5pbnZtKFkpLHVlPVkuc3ViKFcpLm11bChpZSkudW1vZChZKSxnZT1lZS5tdWwoaWUpLnVtb2QoWSk7cmV0dXJu''@;'; put 'put ''IHRoaXMuZy5tdWxBZGQodWUscSxnZSl9LHoucHJvdG90eXBlLmdldEtleVJlY292ZXJ5UGFyYW09ZnVuY3Rpb24oTixPLEssWil7aWYobnVsbCE9PShPPW5ldyBSKE8sWikpLnJlY292ZXJ5UGFyYW0pcmV0dXJuIE8ucmVjb3ZlcnlQYXJhbTtmb3IodmFyIFk9MDtZPDQ7WSsrKXt2YXIgVzt0''@;'; put 'put ''cnl7Vz10aGlzLnJlY292ZXJQdWJLZXkoTixPLFkpfWNhdGNoe2NvbnRpbnVlfWlmKFcuZXEoSykpcmV0dXJuIFl9dGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCB2YWxpZCByZWNvdmVyeSBmYWN0b3IiKX19LDEyNTE6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigzNzg1''@;'; put 'put ''KSxwPWIoOTUzKS5hc3NlcnQ7ZnVuY3Rpb24gVih3LFApe3RoaXMuZWM9dyx0aGlzLnByaXY9bnVsbCx0aGlzLnB1Yj1udWxsLFAucHJpdiYmdGhpcy5faW1wb3J0UHJpdmF0ZShQLnByaXYsUC5wcml2RW5jKSxQLnB1YiYmdGhpcy5faW1wb3J0UHVibGljKFAucHViLFAucHViRW5jKX1jZS5l''@;'; put 'put ''eHBvcnRzPVYsVi5mcm9tUHVibGljPWZ1bmN0aW9uKFAsRixSKXtyZXR1cm4gRiBpbnN0YW5jZW9mIFY/RjpuZXcgVihQLHtwdWI6RixwdWJFbmM6Un0pfSxWLmZyb21Qcml2YXRlPWZ1bmN0aW9uKFAsRixSKXtyZXR1cm4gRiBpbnN0YW5jZW9mIFY/RjpuZXcgVihQLHtwcml2OkYscHJpdkVu''@;'; put 'put ''YzpSfSl9LFYucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dmFyIFA9dGhpcy5nZXRQdWJsaWMoKTtyZXR1cm4gUC5pc0luZmluaXR5KCk/e3Jlc3VsdDohMSxyZWFzb246IkludmFsaWQgcHVibGljIGtleSJ9OlAudmFsaWRhdGUoKT9QLm11bCh0aGlzLmVjLmN1cnZlLm4pLmlzSW5m''@;'; put 'put ''aW5pdHkoKT97cmVzdWx0OiEwLHJlYXNvbjpudWxsfTp7cmVzdWx0OiExLHJlYXNvbjoiUHVibGljIGtleSAqIE4gIT0gTyJ9OntyZXN1bHQ6ITEscmVhc29uOiJQdWJsaWMga2V5IGlzIG5vdCBhIHBvaW50In19LFYucHJvdG90eXBlLmdldFB1YmxpYz1mdW5jdGlvbihQLEYpe3JldHVybiJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgUCYmKEY9UCxQPW51bGwpLHRoaXMucHVifHwodGhpcy5wdWI9dGhpcy5lYy5nLm11bCh0aGlzLnByaXYpKSxGP3RoaXMucHViLmVuY29kZShGLFApOnRoaXMucHVifSxWLnByb3RvdHlwZS5nZXRQcml2YXRlPWZ1bmN0aW9uKFApe3JldHVybiJoZXgiPT09UD90aGlz''@;'; put 'put ''LnByaXYudG9TdHJpbmcoMTYsMik6dGhpcy5wcml2fSxWLnByb3RvdHlwZS5faW1wb3J0UHJpdmF0ZT1mdW5jdGlvbihQLEYpe3RoaXMucHJpdj1uZXcgSShQLEZ8fDE2KSx0aGlzLnByaXY9dGhpcy5wcml2LnVtb2QodGhpcy5lYy5jdXJ2ZS5uKX0sVi5wcm90b3R5cGUuX2ltcG9ydFB1Ymxp''@;'; put 'put ''Yz1mdW5jdGlvbihQLEYpe2lmKFAueHx8UC55KXJldHVybiJtb250Ij09PXRoaXMuZWMuY3VydmUudHlwZT9wKFAueCwiTmVlZCB4IGNvb3JkaW5hdGUiKTooInNob3J0Ij09PXRoaXMuZWMuY3VydmUudHlwZXx8ImVkd2FyZHMiPT09dGhpcy5lYy5jdXJ2ZS50eXBlKSYmcChQLngmJlAueSwi''@;'; put 'put ''TmVlZCBib3RoIHggYW5kIHkgY29vcmRpbmF0ZSIpLHZvaWQodGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5wb2ludChQLngsUC55KSk7dGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5kZWNvZGVQb2ludChQLEYpfSxWLnByb3RvdHlwZS5kZXJpdmU9ZnVuY3Rpb24oUCl7cmV0dXJuIFAudmFsaWRhdGUo''@;'; put 'put ''KXx8cChQLnZhbGlkYXRlKCksInB1YmxpYyBwb2ludCBub3QgdmFsaWRhdGVkIiksUC5tdWwodGhpcy5wcml2KS5nZXRYKCl9LFYucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oUCxGLFIpe3JldHVybiB0aGlzLmVjLnNpZ24oUCx0aGlzLEYsUil9LFYucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlv''@;'; put 'put ''bihQLEYsUil7cmV0dXJuIHRoaXMuZWMudmVyaWZ5KFAsRix0aGlzLHZvaWQgMCxSKX0sVi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiI8S2V5IHByaXY6ICIrKHRoaXMucHJpdiYmdGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpKSsiIHB1YjogIisodGhpcy5wdWImJnRoaXMu''@;'; put 'put ''cHViLmluc3BlY3QoKSkrIiA+In19LDYxMTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDM3ODUpLF89Yig5NTMpLHA9Xy5hc3NlcnQ7ZnVuY3Rpb24gVih6LE4pe2lmKHogaW5zdGFuY2VvZiBWKXJldHVybiB6O3RoaXMuX2ltcG9ydERFUih6LE4pfHwocCh6LnImJnoucywiU2ln''@;'; put 'put ''bmF0dXJlIHdpdGhvdXQgciBvciBzIiksdGhpcy5yPW5ldyBJKHouciwxNiksdGhpcy5zPW5ldyBJKHoucywxNiksdGhpcy5yZWNvdmVyeVBhcmFtPXZvaWQgMD09PXoucmVjb3ZlcnlQYXJhbT9udWxsOnoucmVjb3ZlcnlQYXJhbSl9ZnVuY3Rpb24gdygpe3RoaXMucGxhY2U9MH1mdW5jdGlv''@;'; put 'put ''biBQKHosTil7dmFyIE89eltOLnBsYWNlKytdO2lmKCEoMTI4Jk8pKXJldHVybiBPO3ZhciBLPTE1Jk87aWYoMD09PUt8fEs+NHx8MD09PXpbTi5wbGFjZV0pcmV0dXJuITE7Zm9yKHZhciBaPTAsWT0wLFc9Ti5wbGFjZTtZPEs7WSsrLFcrKylaPDw9OCxafD16W1ddLFo+Pj49MDtyZXR1cm4h''@;'; put 'put ''KFo8PTEyNykmJihOLnBsYWNlPVcsWil9ZnVuY3Rpb24gRih6KXtmb3IodmFyIE49MCxPPXoubGVuZ3RoLTE7IXpbTl0mJiEoMTI4JnpbTisxXSkmJk48TzspTisrO3JldHVybiAwPT09Tj96Onouc2xpY2UoTil9ZnVuY3Rpb24gUih6LE4pe2lmKE48MTI4KXoucHVzaChOKTtlbHNle3ZhciBP''@;'; put 'put ''PTErKE1hdGgubG9nKE4pL01hdGguTE4yPj4+Myk7Zm9yKHoucHVzaCgxMjh8Tyk7LS1POyl6LnB1c2goTj4+PihPPDwzKSYyNTUpO3oucHVzaChOKX19Y2UuZXhwb3J0cz1WLFYucHJvdG90eXBlLl9pbXBvcnRERVI9ZnVuY3Rpb24oTixPKXtOPV8udG9BcnJheShOLE8pO3ZhciBLPW5ldyB3''@;'; put 'put ''O2lmKDQ4IT09TltLLnBsYWNlKytdKXJldHVybiExO3ZhciBaPVAoTixLKTtpZighMT09PVp8fForSy5wbGFjZSE9PU4ubGVuZ3RofHwyIT09TltLLnBsYWNlKytdKXJldHVybiExO3ZhciBZPVAoTixLKTtpZighMT09PVl8fDEyOCZOW0sucGxhY2VdKXJldHVybiExO3ZhciBXPU4uc2xpY2Uo''@;'; put 'put ''Sy5wbGFjZSxZK0sucGxhY2UpO2lmKEsucGxhY2UrPVksMiE9PU5bSy5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgcT1QKE4sSyk7aWYoITE9PT1xfHxOLmxlbmd0aCE9PXErSy5wbGFjZXx8MTI4Jk5bSy5wbGFjZV0pcmV0dXJuITE7dmFyIGVlPU4uc2xpY2UoSy5wbGFjZSxxK0sucGxhY2UpO2lm''@;'; put 'put ''KDA9PT1XWzBdKXtpZighKDEyOCZXWzFdKSlyZXR1cm4hMTtXPVcuc2xpY2UoMSl9aWYoMD09PWVlWzBdKXtpZighKDEyOCZlZVsxXSkpcmV0dXJuITE7ZWU9ZWUuc2xpY2UoMSl9cmV0dXJuIHRoaXMucj1uZXcgSShXKSx0aGlzLnM9bmV3IEkoZWUpLHRoaXMucmVjb3ZlcnlQYXJhbT1udWxs''@;'; put 'put ''LCEwfSxWLnByb3RvdHlwZS50b0RFUj1mdW5jdGlvbihOKXt2YXIgTz10aGlzLnIudG9BcnJheSgpLEs9dGhpcy5zLnRvQXJyYXkoKTtmb3IoMTI4Jk9bMF0mJihPPVswXS5jb25jYXQoTykpLDEyOCZLWzBdJiYoSz1bMF0uY29uY2F0KEspKSxPPUYoTyksSz1GKEspOyEoS1swXXx8MTI4Jktb''@;'; put 'put ''MV0pOylLPUsuc2xpY2UoMSk7dmFyIFo9WzJdO1IoWixPLmxlbmd0aCksKFo9Wi5jb25jYXQoTykpLnB1c2goMiksUihaLEsubGVuZ3RoKTt2YXIgWT1aLmNvbmNhdChLKSxXPVs0OF07cmV0dXJuIFIoVyxZLmxlbmd0aCksVz1XLmNvbmNhdChZKSxfLmVuY29kZShXLE4pfX0sNTk4MDooY2Us''@;'; put 'put ''WCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDM3MTUpLF89Yig1NDI3KSxwPWIoOTUzKSxWPXAuYXNzZXJ0LHc9cC5wYXJzZUJ5dGVzLFA9Yig5MDg3KSxGPWIoMzYyMik7ZnVuY3Rpb24gUih6KXtpZihWKCJlZDI1NTE5Ij09PXosIm9ubHkgdGVzdGVkIHdpdGggZWQyNTUxOSBzbyBmYXIi''@;'; put 'put ''KSwhKHRoaXMgaW5zdGFuY2VvZiBSKSlyZXR1cm4gbmV3IFIoeik7dGhpcy5jdXJ2ZT16PV9bel0uY3VydmUsdGhpcy5nPXouZyx0aGlzLmcucHJlY29tcHV0ZSh6Lm4uYml0TGVuZ3RoKCkrMSksdGhpcy5wb2ludENsYXNzPXoucG9pbnQoKS5jb25zdHJ1Y3Rvcix0aGlzLmVuY29kaW5nTGVu''@;'; put 'put ''Z3RoPU1hdGguY2VpbCh6Lm4uYml0TGVuZ3RoKCkvOCksdGhpcy5oYXNoPUkuc2hhNTEyfWNlLmV4cG9ydHM9UixSLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKE4sTyl7Tj13KE4pO3ZhciBLPXRoaXMua2V5RnJvbVNlY3JldChPKSxaPXRoaXMuaGFzaEludChLLm1lc3NhZ2VQcmVmaXgoKSxO''@;'; put 'put ''KSxZPXRoaXMuZy5tdWwoWiksVz10aGlzLmVuY29kZVBvaW50KFkpLHE9dGhpcy5oYXNoSW50KFcsSy5wdWJCeXRlcygpLE4pLm11bChLLnByaXYoKSksZWU9Wi5hZGQocSkudW1vZCh0aGlzLmN1cnZlLm4pO3JldHVybiB0aGlzLm1ha2VTaWduYXR1cmUoe1I6WSxTOmVlLFJlbmNvZGVkOld9''@;'; put 'put ''KX0sUi5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKE4sTyxLKXtpZihOPXcoTiksKE89dGhpcy5tYWtlU2lnbmF0dXJlKE8pKS5TKCkuZ3RlKE8uZWRkc2EuY3VydmUubil8fE8uUygpLmlzTmVnKCkpcmV0dXJuITE7dmFyIFo9dGhpcy5rZXlGcm9tUHVibGljKEspLFk9dGhpcy5oYXNoSW50''@;'; put 'put ''KE8uUmVuY29kZWQoKSxaLnB1YkJ5dGVzKCksTiksVz10aGlzLmcubXVsKE8uUygpKTtyZXR1cm4gTy5SKCkuYWRkKFoucHViKCkubXVsKFkpKS5lcShXKX0sUi5wcm90b3R5cGUuaGFzaEludD1mdW5jdGlvbigpe2Zvcih2YXIgTj10aGlzLmhhc2goKSxPPTA7Tzxhcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''O08rKylOLnVwZGF0ZShhcmd1bWVudHNbT10pO3JldHVybiBwLmludEZyb21MRShOLmRpZ2VzdCgpKS51bW9kKHRoaXMuY3VydmUubil9LFIucHJvdG90eXBlLmtleUZyb21QdWJsaWM9ZnVuY3Rpb24oTil7cmV0dXJuIFAuZnJvbVB1YmxpYyh0aGlzLE4pfSxSLnByb3RvdHlwZS5rZXlGcm9t''@;'; put 'put ''U2VjcmV0PWZ1bmN0aW9uKE4pe3JldHVybiBQLmZyb21TZWNyZXQodGhpcyxOKX0sUi5wcm90b3R5cGUubWFrZVNpZ25hdHVyZT1mdW5jdGlvbihOKXtyZXR1cm4gTiBpbnN0YW5jZW9mIEY/TjpuZXcgRih0aGlzLE4pfSxSLnByb3RvdHlwZS5lbmNvZGVQb2ludD1mdW5jdGlvbihOKXt2YXIg''@;'; put 'put ''Tz1OLmdldFkoKS50b0FycmF5KCJsZSIsdGhpcy5lbmNvZGluZ0xlbmd0aCk7cmV0dXJuIE9bdGhpcy5lbmNvZGluZ0xlbmd0aC0xXXw9Ti5nZXRYKCkuaXNPZGQoKT8xMjg6MCxPfSxSLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbihOKXt2YXIgTz0oTj1wLnBhcnNlQnl0ZXMoTikp''@;'; put 'put ''Lmxlbmd0aC0xLEs9Ti5zbGljZSgwLE8pLmNvbmNhdCgtMTI5Jk5bT10pLFo9ISEoMTI4Jk5bT10pLFk9cC5pbnRGcm9tTEUoSyk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnRGcm9tWShZLFopfSxSLnByb3RvdHlwZS5lbmNvZGVJbnQ9ZnVuY3Rpb24oTil7cmV0dXJuIE4udG9BcnJheSgibGUi''@;'; put 'put ''LHRoaXMuZW5jb2RpbmdMZW5ndGgpfSxSLnByb3RvdHlwZS5kZWNvZGVJbnQ9ZnVuY3Rpb24oTil7cmV0dXJuIHAuaW50RnJvbUxFKE4pfSxSLnByb3RvdHlwZS5pc1BvaW50PWZ1bmN0aW9uKE4pe3JldHVybiBOIGluc3RhbmNlb2YgdGhpcy5wb2ludENsYXNzfX0sOTA4NzooY2UsWCxiKT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDk1MyksXz1JLmFzc2VydCxwPUkucGFyc2VCeXRlcyxWPUkuY2FjaGVkUHJvcGVydHk7ZnVuY3Rpb24gdyhQLEYpe3RoaXMuZWRkc2E9UCx0aGlzLl9zZWNyZXQ9cChGLnNlY3JldCksUC5pc1BvaW50KEYucHViKT90aGlzLl9wdWI9Ri5wdWI6dGhpcy5f''@;'; put 'put ''cHViQnl0ZXM9cChGLnB1Yil9dy5mcm9tUHVibGljPWZ1bmN0aW9uKEYsUil7cmV0dXJuIFIgaW5zdGFuY2VvZiB3P1I6bmV3IHcoRix7cHViOlJ9KX0sdy5mcm9tU2VjcmV0PWZ1bmN0aW9uKEYsUil7cmV0dXJuIFIgaW5zdGFuY2VvZiB3P1I6bmV3IHcoRix7c2VjcmV0OlJ9KX0sdy5wcm90''@;'; put 'put ''b3R5cGUuc2VjcmV0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlY3JldH0sVih3LCJwdWJCeXRlcyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLnB1YigpKX0pLFYodywicHViIixmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wdWJCeXRlcz90aGlzLmVk''@;'; put 'put ''ZHNhLmRlY29kZVBvaW50KHRoaXMuX3B1YkJ5dGVzKTp0aGlzLmVkZHNhLmcubXVsKHRoaXMucHJpdigpKX0pLFYodywicHJpdkJ5dGVzIixmdW5jdGlvbigpe3ZhciBGPXRoaXMuZWRkc2EsUj10aGlzLmhhc2goKSx6PUYuZW5jb2RpbmdMZW5ndGgtMSxOPVIuc2xpY2UoMCxGLmVuY29kaW5n''@;'; put 'put ''TGVuZ3RoKTtyZXR1cm4gTlswXSY9MjQ4LE5bel0mPTEyNyxOW3pdfD02NCxOfSksVih3LCJwcml2IixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLnByaXZCeXRlcygpKX0pLFYodywiaGFzaCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5oYXNoKCku''@;'; put 'put ''dXBkYXRlKHRoaXMuc2VjcmV0KCkpLmRpZ2VzdCgpfSksVih3LCJtZXNzYWdlUHJlZml4IixmdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc2goKS5zbGljZSh0aGlzLmVkZHNhLmVuY29kaW5nTGVuZ3RoKX0pLHcucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oRil7cmV0dXJuIF8odGhpcy5fc2Vj''@;'; put 'put ''cmV0LCJLZXlQYWlyIGNhbiBvbmx5IHZlcmlmeSIpLHRoaXMuZWRkc2Euc2lnbihGLHRoaXMpfSx3LnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oRixSKXtyZXR1cm4gdGhpcy5lZGRzYS52ZXJpZnkoRixSLHRoaXMpfSx3LnByb3RvdHlwZS5nZXRTZWNyZXQ9ZnVuY3Rpb24oRil7cmV0dXJu''@;'; put 'put ''IF8odGhpcy5fc2VjcmV0LCJLZXlQYWlyIGlzIHB1YmxpYyBvbmx5IiksSS5lbmNvZGUodGhpcy5zZWNyZXQoKSxGKX0sdy5wcm90b3R5cGUuZ2V0UHVibGljPWZ1bmN0aW9uKEYpe3JldHVybiBJLmVuY29kZSh0aGlzLnB1YkJ5dGVzKCksRil9LGNlLmV4cG9ydHM9d30sMzYyMjooY2UsWCxi''@;'; put 'put ''KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDM3ODUpLF89Yig5NTMpLHA9Xy5hc3NlcnQsVj1fLmNhY2hlZFByb3BlcnR5LHc9Xy5wYXJzZUJ5dGVzO2Z1bmN0aW9uIFAoRixSKXt0aGlzLmVkZHNhPUYsIm9iamVjdCIhPXR5cGVvZiBSJiYoUj13KFIpKSxBcnJheS5pc0FycmF5KFIpJiYocChS''@;'; put 'put ''Lmxlbmd0aD09PTIqRi5lbmNvZGluZ0xlbmd0aCwiU2lnbmF0dXJlIGhhcyBpbnZhbGlkIHNpemUiKSxSPXtSOlIuc2xpY2UoMCxGLmVuY29kaW5nTGVuZ3RoKSxTOlIuc2xpY2UoRi5lbmNvZGluZ0xlbmd0aCl9KSxwKFIuUiYmUi5TLCJTaWduYXR1cmUgd2l0aG91dCBSIG9yIFMiKSxGLmlz''@;'; put 'put ''UG9pbnQoUi5SKSYmKHRoaXMuX1I9Ui5SKSxSLlMgaW5zdGFuY2VvZiBJJiYodGhpcy5fUz1SLlMpLHRoaXMuX1JlbmNvZGVkPUFycmF5LmlzQXJyYXkoUi5SKT9SLlI6Ui5SZW5jb2RlZCx0aGlzLl9TZW5jb2RlZD1BcnJheS5pc0FycmF5KFIuUyk/Ui5TOlIuU2VuY29kZWR9VihQLCJTIixm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLlNlbmNvZGVkKCkpfSksVihQLCJSIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuUmVuY29kZWQoKSl9KSxWKFAsIlJlbmNvZGVkIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVk''@;'; put 'put ''ZHNhLmVuY29kZVBvaW50KHRoaXMuUigpKX0pLFYoUCwiU2VuY29kZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlSW50KHRoaXMuUygpKX0pLFAucHJvdG90eXBlLnRvQnl0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5SZW5jb2RlZCgpLmNvbmNhdCh0aGlzLlNlbmNv''@;'; put 'put ''ZGVkKCkpfSxQLnByb3RvdHlwZS50b0hleD1mdW5jdGlvbigpe3JldHVybiBfLmVuY29kZSh0aGlzLnRvQnl0ZXMoKSwiaGV4IikudG9VcHBlckNhc2UoKX0sY2UuZXhwb3J0cz1QfSwxMDM3OmNlPT57Y2UuZXhwb3J0cz17ZG91Ymxlczp7c3RlcDo0LHBvaW50czpbWyJlNjBmY2U5M2I1OWU5''@;'; put 'put ''ZWM1MzAxMWFhYmMyMWMyM2U5N2IyYTMxMzY5Yjg3YTVhZTljNDRlZTg5ZTJhNmRlYzBhIiwiZjdlMzUwNzM5OWU1OTU5MjlkYjk5ZjM0ZjU3OTM3MTAxMjk2ODkxZTQ0ZDIzZjBiZTFmMzJjY2U2OTYxNjgyMSJdLFsiODI4MjI2MzIxMmM2MDlkOWVhMmE2ZTNlMTcyZGUyMzhkOGMzOWNhYmQ1''@;'; put 'put ''YWMxY2ExMDY0NmUyM2ZkNWY1MTUwOCIsIjExZjhhODA5ODU1N2RmZTQ1ZTgyNTZlODMwYjYwYWNlNjJkNjEzYWMyZjdiMTdiZWQzMWI2ZWFmZjZlMjZjYWYiXSxbIjE3NWUxNTlmNzI4Yjg2NWE3MmY5OWNjNmM2ZmM4NDZkZTBiOTM4MzNmZDIyMjJlZDczZmNlNWI1NTFlNWI3MzkiLCJkMzUw''@;'; put 'put ''NmUwZDllM2M3OWViYTRlZjk3YTUxZmY3MWY1ZWFjYjU5NTVhZGQyNDM0NWM2ZWZhNmZmZWU5ZmVkNjk1Il0sWyIzNjNkOTBkNDQ3YjAwYzljOTljZWFjMDViNjI2MmVlMDUzNDQxYzdlNTU1NTJmZmU1MjZiYWQ4ZjgzZmY0NjQwIiwiNGUyNzNhZGZjNzMyMjIxOTUzYjQ0NTM5N2YzMzYzMTQ1''@;'; put 'put ''YjlhODkwMDgxOTllY2I2MjAwM2M3ZjNiZWU5ZGU5Il0sWyI4YjRiNWYxNjVkZjNjMmJlOGM2MjQ0YjViNzQ1NjM4ODQzZTRhNzgxYTE1YmNkMWI2OWY3OWE1NWRmZmRmODBjIiwiNGFhZDBhNmY2OGQzMDhiNGIzZmJkNzgxM2FiMGRhMDRmOWUzMzY1NDYxNjJlZTU2YjNlZmYwYzY1ZmQ0ZmQz''@;'; put 'put ''NiJdLFsiNzIzY2JhYTZlNWRiOTk2ZDZiZjc3MWMwMGJkNTQ4YzdiNzAwZGJmZmE2YzBlNzdiY2I2MTE1OTI1MjMyZmNkYSIsIjk2ZTg2N2I1NTk1Y2M0OThhOTIxMTM3NDg4ODI0ZDZlMjY2MGEwNjUzNzc5NDk0ODAxZGMwNjlkOWViMzlmNWYiXSxbImVlYmZhNGQ0OTNiZWJmOThiYTVmZWVj''@;'; put 'put ''ODEyYzJkM2I1MDk0Nzk2MTIzN2E5MTk4MzlhNTMzZWNhMGU3ZGQ3ZmEiLCI1ZDlhOGNhMzk3MGVmMGYyNjllZTdlZGFmMTc4MDg5ZDlhZTRjZGMzYTcxMWY3MTJkZGZkNGZkYWUxZGU4OTk5Il0sWyIxMDBmNDRkYTY5NmU3MTY3Mjc5MWQwYTA5YjdiZGU0NTlmMTIxNWEyOWIzYzAzYmZlZmQ3''@;'; put 'put ''ODM1YjM5YTQ4ZGIwIiwiY2RkOWUxMzE5MmEwMGI3NzJlYzhmMzMwMGMwOTA2NjZiN2ZmNGExOGZmNTE5NWFjMGZiZDVjZDYyYmM2NWEwOSJdLFsiZTEwMzFiZTI2MmM3ZWQxYjFkYzkyMjdhNGEwNGMwMTdhNzdmOGQ0NDY0ZjNiMzg1MmM4YWNkZTZlNTM0ZmQyZCIsIjlkNzA2MTkyODk0MDQw''@;'; put 'put ''NWU2YmI2YTQxNzY1OTc1MzVhZjI5MmRkNDE5ZTFjZWQ3OWE0NGYxOGYyOTQ1NmEwMGQiXSxbImZlZWE2Y2FlNDZkNTViNTMwYWMyODM5ZjE0M2JkN2VjNWNmOGIyNjZhNDFkNmFmNTJkNWU2ODhkOTA5NDY5NmQiLCJlNTdjNmI2Yzk3ZGNlMWJhYjA2ZTRlMTJiZjNlY2Q1Yzk4MWM4OTU3Y2M0''@;'; put 'put ''MTQ0MmQzMTU1ZGViZjE4MDkwMDg4Il0sWyJkYTY3YTkxZDkxMDQ5Y2RjYjM2N2JlNGJlNmZmY2EzY2ZlZWQ2NTdkODA4NTgzZGUzM2ZhOTc4YmMxZWM2Y2IxIiwiOWJhY2FhMzU0ODE2NDJiYzQxZjQ2M2Y3ZWM5NzgwZTVkZWM3YWRjNTA4Zjc0MGExN2U5ZWE4ZTI3YTY4YmUxZCJdLFsiNTM5''@;'; put 'put ''MDRmYWEwYjMzNGNkZGE2ZTAwMDkzNWVmMjIxNTFlYzA4ZDBmN2JiMTEwNjlmNTc1NDVjY2MxYTM3YjdjMCIsIjViYzA4N2QwYmM4MDEwNmQ4OGM5ZWNjYWMyMGQzYzFjMTM5OTk5ODFlMTQ0MzQ2OTlkY2IwOTZiMDIyNzcxYzgiXSxbIjhlN2JjZDBiZDM1OTgzYTc3MTljY2E3NzY0Y2E5MDY3''@;'; put 'put ''NzliNTNhMDQzYTliOGJjYWVmZjk1OWY0M2FkODYwNDciLCIxMGI3NzcwYjJhM2RhNGIzOTQwMzEwNDIwY2E5NTE0NTc5ZTg4ZTJlNDdmZDY4YjNlYTEwMDQ3ZTg0NjAzNzJhIl0sWyIzODVlZWQzNGMxY2RmZjIxZTZkMDgxODY4OWI4MWJkZTcxYTdmNGYxODM5N2U2NjkwYTg0MWUxNTk5YzQz''@;'; put 'put ''ODYyIiwiMjgzYmViYzNlOGVhMjNmNTY3MDFkZTE5ZTllYmY0NTc2YjMwNGVlYzIwODZkYzhjYzA0NThmZTU1NDJlNTQ1MyJdLFsiNmY5ZDliODAzZWNmMTkxNjM3YzczYTQ0MTNkZmExODBmZGRmODRhNTk0N2ZiYzljNjA2ZWQ4NmMzZmFjM2E3IiwiN2M4MGM2OGU2MDMwNTliYTY5YjhlMmEz''@;'; put 'put ''MGU0NWM0ZDQ3ZWE0ZGQyZjVjMjgxMDAyZDg2ODkwNjAzYTg0MjE2MCJdLFsiMzMyMmQ0MDEyNDNjNGUyNTgyYTIxNDdjMTA0ZDZlY2JmNzc0ZDE2M2RiMGY1ZTUzMTNiN2UwZTc0MmQwZTZiZCIsIjU2ZTcwNzk3ZTk2NjRlZjViZmIwMTliYzRkZGFmOWI3MjgwNWY2M2VhMjg3M2FmNjI0ZjNh''@;'; put 'put ''MmU5NmMyOGIyYTAiXSxbIjg1NjcyYzdkMmRlMGI3ZGEyYmQxNzcwZDg5NjY1ODY4NzQxYjNmOWFmNzY0MzM5NzcyMWQ3NGQyODEzNGFiODMiLCI3YzQ4MWI5YjViNDNiMmViNjM3NDA0OWJmYTYyYzJlNWU3N2YxN2ZjYzUyOThmNDRjOGUzMDk0Zjc5MDMxM2E2Il0sWyI5NDhiZjgwOWIxOTg4''@;'; put 'put ''YTQ2YjA2YzlmMTkxOTQxM2IxMGY5MjI2YzYwZjY2ODgzMmZmZDk1OWFmNjBjODJhMGEiLCI1M2E1NjI4NTZkY2I2NjQ2ZGM2Yjc0YzVkMWMzNDE4YzZkNGRmZjA4Yzk3Y2QyYmVkNGNiN2Y4OGQ4YzhlNTg5Il0sWyI2MjYwY2U3ZjQ2MTgwMWMzNGYwNjdjZTBmMDI4NzNhOGYxYjBlNDRkZmM2''@;'; put 'put ''OTc1MmFjY2VjZDgxOWYzOGZkOGU4IiwiYmMyZGE4MmI2ZmE1YjU3MWE3ZjA5MDQ5Nzc2YTFlZjdlY2QyOTIyMzgwNTFjMTk4YzFhODRlOTViMmI0YWUxNyJdLFsiZTUwMzdkZTBhZmMxZDhkNDNkODM0ODQxNGJiZjQxMDMwNDNlYzhmNTc1YmZkYzQzMjk1M2NjOGQyMDM3ZmEyZCIsIjQ1NzE1''@;'; put 'put ''MzRiYWE5NGQzYjVmOWY5OGQwOWZiOTkwYmRkYmQ1ZjViMDNlYzQ4MWYxMGUwZTVkYzg0MWQ3NTViZGEiXSxbImUwNjM3MmIwZjRhMjA3YWRmNWVhOTA1ZThmMTc3MWI0ZTdlOGRiZDFjNmE2YzViNzI1ODY2YTBhZTRmY2U3MjUiLCI3YTkwODk3NGJjZTE4Y2ZlMTJhMjdiYjJhZDVhNDg4Y2Q3''@;'; put 'put ''NDg0YTc3ODcxMDQ4NzBiMjcwMzRmOTRlZWUzMWRkIl0sWyIyMTNjN2E3MTVjZDVkNDUzNThkMGJiZjlkYzBjZTAyMjA0YjEwYmRkZTJhM2Y1ODU0MGFkNjkwOGQwNTU5NzU0IiwiNGI2ZGFkMGI1YWU0NjI1MDcwMTNhZDA2MjQ1YmExOTBiYjQ4NTBmNWYzNmE3ZWVkZGZmMmMyNzUzNGI0NThm''@;'; put 'put ''MiJdLFsiNGU3YzI3MmE3YWY0YjM0ZThkYmI5MzUyYTU0MTlhODdlMjgzOGM3MGFkYzYyY2RkZjBjYzNhM2IwOGZiZDUzYyIsIjE3NzQ5Yzc2NmM5ZDBiMThlMTZmZDA5ZjZkZWY2ODFiNTMwYjk2MTRiZmY3ZGQzM2UwYjM5NDE4MTdkY2FhZTYiXSxbImZlYTc0ZTNkYmU3NzhiMWIxMGYyMzhh''@;'; put 'put ''ZDYxNjg2YWE1Yzc2ZTNkYjJiZTQzMDU3NjMyNDI3ZTI4NDBmYjI3YjYiLCI2ZTA1NjhkYjliMGIxMzI5N2NmNjc0ZGVjY2I2YWY5MzEyNmI1OTZiOTczZjdiNzc3MDFkM2RiN2YyM2NiOTZmIl0sWyI3NmU2NDExM2Y2NzdjZjBlMTBhMjU3MGQ1OTk5NjhkMzE1NDRlMTc5Yjc2MDQzMjk1MmMw''@;'; put 'put ''MmE0NDE3YmRkZTM5IiwiYzkwZGRmOGRlZTRlOTVjZjU3NzA2NmQ3MDY4MWYwZDM1ZTJhMzNkMmI1NmQyMDMyYjRiMTc1MmQxOTAxYWMwMSJdLFsiYzczOGM1NmIwM2IyYWJlMWU4MjgxYmFhNzQzZjhmOWE4ZjdjYzY0M2RmMjZjYmVlM2FiMTUwMjQyYmNiYjg5MSIsIjg5M2ZiNTc4OTUxYWQy''@;'; put 'put ''NTM3ZjcxOGYyZWFjYmZiYmJiODIzMTRlZWY3ODgwY2ZlOTE3ZTczNWQ5Njk5YTg0YzMiXSxbImQ4OTU2MjY1NDhiNjViODFlMjY0Yzc2MzdjOTcyODc3ZDFkNzJlNWYzYTkyNTAxNDM3MmU5ZjY1ODhmNmMxNGIiLCJmZWJmYWEzOGYyYmM3ZWFlNzI4ZWM2MDgxOGMzNDBlYjAzNDI4ZDYzMmJi''@;'; put 'put ''MDY3ZTE3OTM2M2VkNzVkN2Q5OTFmIl0sWyJiOGRhOTQwMzJhOTU3NTE4ZWIwZjY0MzM1NzFlODc2MWNlZmZjNzM2OTNlODRlZGQ0OTE1MGE1NjRmNjc2ZTAzIiwiMjgwNGRmYTQ0ODA1YTFlNGQ3Yzk5Y2M5NzYyODA4YjA5MmNjNTg0ZDk1ZmYzYjUxMTQ4OGU0ZTc0ZWZkZjZlNyJdLFsiZTgw''@;'; put 'put ''ZmVhMTQ0NDFmYjMzYTdkOGFkYWI5NDc1ZDdmYWIyMDE5ZWZmYjUxNTZhNzkyZjFhMTE3NzhlM2MwZGY1ZCIsImVlZDFkZTdmNjM4ZTAwNzcxZTg5NzY4Y2EzY2E5NDQ3MmQxNTVlODBhZjMyMmVhOWZjYjQyOTFiNmFjOWVjNzgiXSxbImEzMDE2OTdiZGZjZDcwNDMxM2JhNDhlNTFkNTY3NTQz''@;'; put 'put ''ZjJhMTgyMDMxZWZkNjkxNWRkYzA3YmJjYzRlMTYwNzAiLCI3MzcwZjkxY2ZiNjdlNGY1MDgxODA5ZmEyNWQ0MGY5YjE3MzVkYmY3YzBhMTFhMTMwYzBkMWEwNDFlMTc3ZWExIl0sWyI5MGFkODViMzg5ZDZiOTM2NDYzZjlkMDUxMjY3OGRlMjA4Y2MzMzBiMTEzMDdmZmZhYjdhYzYzZTNmYjA0''@;'; put 'put ''ZWQ0IiwiZTUwN2EzNjIwYTM4MjYxYWZmZGNiZDk0MjcyMjJiODM5YWVmYWJlMTU4Mjg5NGQ5OTFkNGQ0OGNiNmVmMTUwIl0sWyI4ZjY4YjlkMmY2M2I1ZjMzOTIzOWMxYWQ5ODFmMTYyZWU4OGM1Njc4NzIzZWEzMzUxYjdiNDQ0YzllYzRjMGRhIiwiNjYyYTlmMmRiYTA2Mzk4NmRlMWQ5MGMy''@;'; put 'put ''YjZiZTIxNWRiYmVhMmNmZTk1NTEwYmZkZjIzY2JmNzk1MDFmZmY4MiJdLFsiZTRmM2ZiMDE3NmFmODVkNjVmZjk5ZmY5MTk4YzM2MDkxZjQ4ZTg2NTAzNjgxZTNlNjY4NmZkNTA1MzIzMWUxMSIsIjFlNjM2MzNhZDBlZjRmMWMxNjYxYTZkMGVhMDJiNzI4NmNjN2U3NGVjOTUxZDFjOTgyMmMz''@;'; put 'put ''ODU3NmZlYjczYmMiXSxbIjhjMDBmYTliMThlYmYzMzFlYjk2MTUzN2E0NWE0MjY2YzcwMzRmMmYwZDRlMWQwNzE2ZmI2ZWFlMjBlYWUyOWUiLCJlZmE0NzI2N2ZlYTUyMWExYTlkYzM0M2EzNzM2Yzk3NGMyZmFkYWZhODFlMzZjNTRlN2QyYTRjNjY3MDI0MTRiIl0sWyJlN2EyNmNlNjlkZDQ4''@;'; put 'put ''MjlmM2UxMGNlYzBhOWU5OGVkMzE0M2QwODRmMzA4YjkyYzA5OTdmZGRmYzYwY2IzZTQxIiwiMmE3NThlMzAwZmE3OTg0YjQ3MWIwMDZhMWFhZmJiMThkMGE2YjJjMDQyMGU4M2UyMGU4YTk0MjFjZjJjZmQ1MSJdLFsiYjY0NTllMGVlMzY2MmVjOGQyMzU0MGMyMjNiY2JkYzU3MWNiY2I5Njdk''@;'; put 'put ''Nzk0MjRmM2NmMjllYjNkZTZiODBlZiIsIjY3Yzg3NmQwNmYzZTA2ZGUxZGFkZjE2ZTU2NjFkYjNjNGIzYWU2ZDQ4ZTM1YjJmZjMwYmYwYjYxYTcxYmE0NSJdLFsiZDY4YTgwYzgyODBiYjg0MDc5MzIzNGFhMTE4ZjA2MjMxZDZmMWZjNjdlNzNjNWE1ZGVkYTBmNWI0OTY5NDNlOCIsImRiOGJh''@;'; put 'put ''OWZmZjRiNTg2ZDAwYzRiMWY5MTc3YjBlMjhiNWIwZTdiOGY3ODQ1Mjk1YTI5NGM4NDI2NmIxMzMxMjAiXSxbIjMyNGFlZDdkZjY1YzgwNDI1MmRjMDI3MDkwN2EzMGIwOTYxMmFlYjk3MzQ0OWNlYTQwOTU5ODBmYzI4ZDNkNWQiLCI2NDhhMzY1Nzc0YjYxZjJmZjEzMGMwYzM1YWVjMWY0ZjE5''@;'; put 'put ''MjEzYjBjN2UzMzI4NDM5NjcyMjRhZjk2YWI3Yzg0Il0sWyI0ZGY5YzE0OTE5Y2RlNjFmNmQ1MWRmZGJlNWZlZTVkY2VlYzQxNDNiYThkMWNhODg4ZThiZDM3M2ZkMDU0Yzk2IiwiMzVlYzUxMDkyZDg3MjgwNTA5NzRjMjNhMWQ4NWQ0YjVkNTA2Y2RjMjg4NDkwMTkyZWJhYzA2Y2FkMTBkNWQi''@;'; put 'put ''XSxbIjljMzkxOWE4NGE0NzQ4NzBmYWVkOGE5YzFjYzY2MDIxNTIzNDg5MDU0ZDdmMDMwOGNiZmM5OWM4YWMxZjk4Y2QiLCJkZGI4NGYwZjRhNGRkZDU3NTg0ZjA0NGJmMjYwZTY0MTkwNTMyNmY3NmM2NGM4ZTZiZTdlNWUwM2Q0ZmM1OTlkIl0sWyI2MDU3MTcwYjFkZDEyZmRmOGRlMDVmMjgx''@;'; put 'put ''ZDhlMDZiYjkxZTE0OTNhOGI5MWQ0Y2M1YTIxMzgyMTIwYTk1OWU1IiwiOWExYWYwYjI2YTZhNDgwN2FkZDlhMmRhZjcxZGYyNjI0NjUxNTJiYzNlZTI0YzY1ZTg5OWJlOTMyMzg1YTJhOCJdLFsiYTU3NmRmOGUyM2EwODQxMTQyMTQzOWE0NTE4ZGEzMTg4MGNlZjBmYmE3ZDRkZjEyYjFhNjk3''@;'; put 'put ''M2VlY2I5NDI2NiIsIjQwYTZiZjIwZTc2NjQwYjJjOTJiOTdhZmU1OGNkODJjNDMyZTEwYTdmNTE0ZDlmM2VlOGJlMTFhZTFiMjhlYzgiXSxbIjc3NzhhNzhjMjhkZWMzZTMwYTA1ZmU5NjI5ZGU4YzM4YmIzMGQxZjVjZjlhM2EyMDhmNzYzODg5YmU1OGFkNzEiLCIzNDYyNmQ5YWI1YTViMjJm''@;'; put 'put ''ZjcwOThlMTJmMmZmNTgwMDg3YjM4NDExZmYyNGFjNTYzYjUxM2ZjMWZkOWY0M2FjIl0sWyI5Mjg5NTVlZTYzN2E4NDQ2MzcyOWZkMzBlN2FmZDJlZDVmOTYyNzRlNWFkN2U1Y2IwOWVkYTljMDZkOTAzYWMiLCJjMjU2MjEwMDNkM2Y0MmE4MjdiNzhhMTMwOTNhOTVlZWFjM2QyNmVmYThhOGQ4''@;'; put 'put ''M2ZjNTE4MGU5MzViY2QwOTFmIl0sWyI4NWQwZmVmM2VjNmRiMTA5Mzk5MDY0ZjNhMGUzYjI4NTU2NDViNGE5MDdhZDM1NDUyN2FhZTc1MTYzZDgyNzUxIiwiMWYwMzY0ODQxM2EzOGMwYmUyOWQ0OTZlNTgyY2Y1NjYzZTg3NTFlOTY4NzczMzE1ODJjMjM3YTI0ZWIxZjk2MiJdLFsiZmYyYjBk''@;'; put 'put ''Y2U5N2VlY2U5N2MxYzliNjA0MTc5OGI4NWRmZGZiNmQ4ODgyZGEyMDMwOGY1NDA0ODI0NTI2MDg3ZSIsIjQ5M2QxM2ZlZjUyNGJhMTg4YWY0YzRkYzU0ZDA3OTM2YzdiN2VkNmZiOTBlMmNlYjJjOTUxZTAxZjBjMjk5MDciXSxbIjgyN2ZiYmU0YjFlODgwZWE5ZWQyYjJlNjMwMWIyMTJiNTdm''@;'; put 'put ''MWVlMTQ4Y2Q2ZGQyODc4MGU1ZTJjZjg1NmUyNDEiLCJjNjBmOWM5MjNjNzI3YjBiNzFiZWYyYzY3ZDFkMTI2ODdmZjdhNjMxODY5MDMxNjZkNjA1YjY4YmFlYzI5M2VjIl0sWyJlYWE2NDlmMjFmNTFiZGJhZTdiZTRhZTM0Y2U2ZTUyMTdhNThmZGNlN2Y0N2Y5YWE3ZjNiNThmYTIxMjBlMmIz''@;'; put 'put ''IiwiYmUzMjc5ZWQ1YmJiYjAzYWM2OWE4MGY4OTg3OWFhNWEwMWE2Yjk2NWYxM2Y3ZTU5ZDQ3YTUzMDViYTVhZDkzZCJdLFsiZTRhNDJkNDNjNWNmMTY5ZDkzOTFkZjZkZWNmNDJlZTU0MWI2ZDhmMGM5YTEzNzQwMWUyMzYzMmRkYTM0ZDI0ZiIsIjRkOWY5MmU3MTZkMWM3MzUyNmZjOTljY2Zi''@;'; put 'put ''OGFkMzRjZTg4NmVlZGZhOGQ4ZTRmMTNhN2Y3MTMxZGViYTk0MTQiXSxbIjFlYzgwZmVmMzYwY2JkZDk1NDE2MGZhZGFiMzUyYjZiOTJiNTM1NzZhODhmZWE0OTQ3MTczYjlkNDMwMGJmMTkiLCJhZWVmZTkzNzU2YjUzNDBkMmYzYTQ5NThhN2FiYmY1ZTAxNDZlNzdmNjI5NWEwN2I2NzFjZGMx''@;'; put 'put ''Y2MxMDdjZWZkIl0sWyIxNDZhNzc4YzA0NjcwYzJmOTFiMDBhZjQ2ODBkZmE4YmNlMzQ5MDcxN2Q1OGJhODg5ZGRiNTkyODM2NjY0MmJlIiwiYjMxOGUwZWMzMzU0MDI4YWRkNjY5ODI3ZjlkNGIyODcwYWFhOTcxZDJmN2U1ZWQxZDBiMjk3NDgzZDgzZWZkMCJdLFsiZmE1MGMwZjYxZDIyZTVm''@;'; put 'put ''MDdlM2FjZWJiMWFhMDdiMTI4ZDAwMTIyMDlhMjhiOTc3NmQ3NmE4NzkzMTgwZWVmOSIsIjZiODRjNjkyMjM5N2ViYTliNzJjZDI4NzIyODFhNjhhNWU2ODMyOTNhNTdhMjEzYjM4Y2Q4ZDdkM2Y0ZjI4MTEiXSxbImRhMWQ2MWQwY2E3MjFhMTFiMWE1YmY2YjdkODhlODQyMWEyODhhYjVkNWJi''@;'; put 'put ''YTUyMjBlNTNkMzJiNWYwNjdlYzIiLCI4MTU3ZjU1YTdjOTkzMDZjNzljMDc2NjE2MWM5MWUyOTY2YTczODk5ZDI3OWI0OGE2NTVmYmEwZjFhZDgzNmYxIl0sWyJhOGUyODJmZjBjOTcwNjkwNzIxNWZmOThlOGZkNDE2NjE1MzExZGUwNDQ2ZjFlMDYyYTczYjA2MTBkMDY0ZTEzIiwiN2Y5NzM1''@;'; put 'put ''NWI4ZGI4MWMwOWFiZmI3ZjNjNWIyNTE1ODg4YjY3OWEzZTUwZGQ2YmQ2Y2VmN2M3MzExMWY0Y2MwYyJdLFsiMTc0YTUzYjljOWEyODU4NzJkMzllNTZlNjkxM2NhYjE1ZDU5YjFmYTUxMjUwOGMwMjJmMzgyZGU4MzE5NDk3YyIsImNjYzlkYzM3YWJmYzljMTY1N2I0MTU1ZjJjNDdmOWU2NjQ2''@;'; put 'put ''YjNhMWQ4Y2I5ODU0MzgzZGExM2FjMDc5YWZhNzMiXSxbIjk1OTM5Njk4MTk0Mzc4NWMzZDNlNTdlZGY1MDE4Y2RiZTAzOWU3MzBlNDkxOGIzZDg4NGZkZmYwOTQ3NWI3YmEiLCIyZTdlNTUyODg4YzMzMWRkOGJhMDM4NmE0YjljZDY4NDljNjUzZjY0Yzg3MDkzODVlOWI4YWJmODc1MjRmMmZk''@;'; put 'put ''Il0sWyJkMmE2M2E1MGFlNDAxZTU2ZDY0NWExMTUzYjEwOWE4ZmNjYTBhNDNkNTYxZmJhMmRiYjUxMzQwYzlkODJiMTUxIiwiZTgyZDg2ZmI2NDQzZmNiNzU2NWFlZTU4YjI5NDgyMjBhNzBmNzUwYWY0ODRjYTUyZDQxNDIxNzRkY2Y4OTQwNSJdLFsiNjQ1ODdlMjMzNTQ3MWViODkwZWU3ODk2''@;'; put 'put ''ZDdjZmRjODY2YmFjYmRiZDM4MzkzMTdiMzQzNmY5YjQ1NjE3ZTA3MyIsImQ5OWZjZGQ1YmY2OTAyZTJhZTk2ZGQ2NDQ3YzI5OWExODViOTBhMzkxMzNhZWFiMzU4Mjk5ZTVlOWZhZjY1ODkiXSxbIjg0ODFiZGUwZTRlNGQ4ODViM2E1NDZkM2U1NDlkZTA0MmYwYWE2Y2VhMjUwZTdmZDM1OGQ2''@;'; put 'put ''Yzg2ZGQ0NWU0NTgiLCIzOGVlN2I4Y2JhNTQwNGRkODRhMjViZjM5Y2VjYjJjYTkwMGE3OWM0MmIyNjJlNTU2ZDY0YjFiNTk3NzkwNTdlIl0sWyIxMzQ2NGE1N2E3ODEwMmFhNjJiNjk3OWFlODE3ZjQ2MzdmZmNmZWQzYzRiMWNlMzBiY2Q2MzAzZjZjYWY2NjZiIiwiNjliZTE1OTAwNDYxNDU4''@;'; put 'put ''MGVmN2U0MzM0NTNjY2IwY2E0OGYzMDBhODFkMDk0MmUxM2Y0OTVhOTA3ZjZlY2MyNyJdLFsiYmM0YTlkZjViNzEzZmUyZTlhZWY0MzBiY2MxZGM5N2EwY2Q5Y2NlZGUyZjI4NTg4Y2FkYTNhMGQyZDgzZjM2NiIsImQzYTgxY2E2ZTc4NWMwNjM4MzkzN2FkZjRiNzk4Y2FhNmU4YTlmYmZhNTQ3''@;'; put 'put ''YjE2ZDc1OGQ2NjY1ODFmMzNjMSJdLFsiOGMyOGE5N2JmODI5OGJjMGQyM2Q4Yzc0OTQ1MmEzMmU2OTRiNjVlMzBhOTQ3MmEzOTU0YWIzMGZlNTMyNGNhYSIsIjQwYTMwNDYzYTMzMDUxOTMzNzhmZWRmMzFmN2NjMGViN2FlNzg0ZjA0NTFjYjk0NTllNzFkYzczY2JlZjk0ODIiXSxbIjhlYTk2''@;'; put 'put ''NjYxMzk1MjdhOGMxZGQ5NGNlNGYwNzFmZDIzYzhiMzUwYzVhNGJiMzM3NDhjNGJhMTExZmFjY2FlMCIsIjYyMGVmYWJiYzhlZTI3ODJlMjRlN2MwY2ZiOTVjNWQ3MzViNzgzYmU5Y2YwZjhlOTU1YWYzNGEzMGU2MmI5NDUiXSxbImRkMzYyNWZhZWY1YmEwNjA3NDY2OTcxNmJiZDM3ODhkODli''@;'; put 'put ''ZGRlODE1OTU5OTY4MDkyZjc2Y2M0ZWI5YTk3ODciLCI3YTE4OGZhMzUyMGUzMGQ0NjFkYTI1MDEwNDU3MzFjYTk0MTQ2MTk4Mjg4MzM5NTkzN2Y2OGQwMGM2NDRhNTczIl0sWyJmNzEwZDc5ZDllYjk2MjI5N2U0ZjYyMzJiNDBlOGY3ZmViMmJjNjM4MTQ2MTRkNjkyYzEyZGU3NTI0MDgyMjFl''@;'; put 'put ''IiwiZWE5OGU2NzIzMmQzYjMyOTVkM2I1MzU1MzIxMTVjY2FjODYxMmM3MjE4NTE2MTc1MjZhZTQ3YTljNzdiZmM4MiJdXX0sbmFmOnt3bmQ6Nyxwb2ludHM6W1siZjkzMDhhMDE5MjU4YzMxMDQ5MzQ0Zjg1Zjg5ZDUyMjliNTMxYzg0NTgzNmY5OWIwODYwMWYxMTNiY2UwMzZmOSIsIjM4OGY3''@;'; put 'put ''YjBmNjMyZGU4MTQwZmUzMzdlNjJhMzdmMzU2NjUwMGE5OTkzNGMyMjMxYjZjYjlmZDc1ODRiOGU2NzIiXSxbIjJmOGJkZTRkMWEwNzIwOTM1NWI0YTcyNTBhNWM1MTI4ZTg4Yjg0YmRkYzYxOWFiN2NiYThkNTY5YjI0MGVmZTQiLCJkOGFjMjIyNjM2ZTVlM2Q2ZDRkYmE5ZGRhNmM5YzQyNmY3''@;'; put 'put ''ODgyNzFiYWIwZDY4NDBkY2E4N2QzYWE2YWM2MmQ2Il0sWyI1Y2JkZjA2NDZlNWRiNGVhYTM5OGYzNjVmMmVhN2EwZTNkNDE5YjdlMDMzMGUzOWNlOTJiZGRlZGNhYzRmOWJjIiwiNmFlYmNhNDBiYTI1NTk2MGEzMTc4ZDZkODYxYTU0ZGJhODEzZDBiODEzZmRlN2I1YTUwODI2MjgwODcyNjRk''@;'; put 'put ''YSJdLFsiYWNkNDg0ZTJmMGM3ZjY1MzA5YWQxNzhhOWY1NTlhYmRlMDk3OTY5NzRjNTdlNzE0YzM1ZjExMGRmYzI3Y2NiZSIsImNjMzM4OTIxYjBhN2Q5ZmQ2NDM4MDk3MTc2M2I2MWU5YWRkODg4YTQzNzVmOGUwZjA1Y2MyNjJhYzY0ZjljMzciXSxbIjc3NGFlN2Y4NThhOTQxMWU1ZWY0MjQ2''@;'; put 'put ''YjcwYzY1YWFjNTY0OTk4MGJlNWMxNzg5MWJiZWMxNzg5NWRhMDA4Y2IiLCJkOTg0YTAzMmViNmI1ZTE5MDI0M2RkNTZkN2I3YjM2NTM3MmRiMWUyZGZmOWQ2YTgzMDFkNzRjOWM5NTNjNjFiIl0sWyJmMjg3NzNjMmQ5NzUyODhiYzdkMWQyMDVjMzc0ODY1MWIwNzVmYmM2NjEwZTU4Y2RkZWVk''@;'; put 'put ''ZGY4ZjE5NDA1YWE4IiwiYWIwOTAyZThkODgwYTg5NzU4MjEyZWI2NWNkYWY0NzNhMWEwNmRhNTIxZmE5MWYyOWI1Y2I1MmRiMDNlZDgxIl0sWyJkNzkyNGQ0ZjdkNDNlYTk2NWE0NjVhZTMwOTVmZjQxMTMxZTU5NDZmM2M4NWY3OWU0NGFkYmNmOGUyN2UwODBlIiwiNTgxZTI4NzJhODZjNzJh''@;'; put 'put ''NjgzODQyZWMyMjhjYzZkZWZlYTQwYWYyYmQ4OTZkM2E1YzUwNGRjOWZmNmEyNmI1OCJdLFsiZGVmZGVhNGNkYjY3Nzc1MGE0MjBmZWU4MDdlYWNmMjFlYjk4OThhZTc5Yjk3Njg3NjZlNGZhYTA0YTJkNGEzNCIsIjQyMTFhYjA2OTQ2MzUxNjhlOTk3YjBlYWQyYTkzZGFlY2VkMWY0YTA0YTk1''@;'; put 'put ''YzBmNmNmYjE5OWY2OWU1NmViNzciXSxbIjJiNGVhMGE3OTdhNDQzZDI5M2VmNWNmZjQ0NGY0OTc5ZjA2YWNmZWJkN2U4NmQyNzc0NzU2NTYxMzgzODViNmMiLCI4NWU4OWJjMDM3OTQ1ZDkzYjM0MzA4M2I1YTFjODYxMzFhMDFmNjBjNTAyNjk3NjNiNTcwYzg1NGU1YzA5YjdhIl0sWyIzNTJi''@;'; put 'put ''YmY0YTRjZGQxMjU2NGY5M2ZhMzMyY2UzMzMzMDFkOWFkNDAyNzFmODEwNzE4MTM0MGFlZjI1YmU1OWQ1IiwiMzIxZWI0MDc1MzQ4ZjUzNGQ1OWMxODI1OWRkYTNlMWY0YTFiM2IyZTcxYjEwMzljNjdiZDNkOGJjZjgxOTk4YyJdLFsiMmZhMjEwNGQ2YjM4ZDExYjAyMzAwMTA1NTk4NzkxMjRl''@;'; put 'put ''NDJhYjhkZmVmZjVmZjI5ZGM5Y2RhZGQ0ZWNhY2MzZiIsIjJkZTEwNjgyOTVkZDg2NWI2NDU2OTMzNWJkNWRkODAxODFkNzBlY2ZjODgyNjQ4NDIzYmE3NmI1MzJiN2Q2NyJdLFsiOTI0ODI3OWIwOWI0ZDY4ZGFiMjFhOWIwNjZlZGRhODMyNjNjM2Q4NGUwOTU3MmUyNjljYTBjZDdmNTQ1Mzcx''@;'; put 'put ''NCIsIjczMDE2ZjdiZjIzNGFhZGU1ZDFhYTcxYmRlYTJiMWZmM2ZjMGRlMmE4ODc5MTJmZmU1NGEzMmNlOTdjYjM0MDIiXSxbImRhZWQ0ZjJiZTNhOGJmMjc4ZTcwMTMyZmIwYmViNzUyMmY1NzBlMTQ0YmY2MTVjMDdlOTk2ZDQ0M2RlZTg3MjkiLCJhNjlkY2U0YTdkNmM5OGU4ZDRhMWFjYTg3''@;'; put 'put ''ZWY4ZDcwMDNmODNjMjMwZjNhZmE3MjZhYjQwZTUyMjkwYmUxYzU1Il0sWyJjNDRkMTJjNzA2NWQ4MTJlOGFjZjI4ZDdjYmIxOWY5MDExZWNkOWU5ZmRmMjgxYjBlNmEzYjVlODdkMjJlN2RiIiwiMjExOWE0NjBjZTMyNmNkYzc2YzQ1OTI2Yzk4MmZkYWMwZTEwNmU4NjFlZGY2MWM1YTAzOTA2''@;'; put 'put ''M2YwZTBlNjQ4MiJdLFsiNmEyNDViZjZkYzY5ODUwNGM4OWEyMGNmZGVkNjA4NTMxNTJiNjk1MzM2YzI4MDYzYjYxYzY1Y2JkMjY5ZTZiNCIsImUwMjJjZjQyYzJiZDRhNzA4YjNmNTEyNmYxNmEyNGFkOGIzM2JhNDhkMDQyM2I2ZWZkNWU2MzQ4MTAwZDhhODIiXSxbIjE2OTdmZmE2ZmQ5ZGU2''@;'; put 'put ''MjdjMDc3ZTNkMmZlNTQxMDg0Y2UxMzMwMGIwYmVjMTE0NmY5NWFlNTdmMGQwYmQ2YTUiLCJiOWMzOThmMTg2ODA2ZjVkMjc1NjE1MDZlNDU1NzQzM2EyY2YxNTAwOWU0OThhZTdhZGVlOWQ2M2QwMWIyMzk2Il0sWyI2MDViZGIwMTk5ODE3MThiOTg2ZDBmMDdlODM0Y2IwZDlkZWI4MzYwZmZi''@;'; put 'put ''N2Y2MWRmOTgyMzQ1ZWYyN2E3NDc5IiwiMjk3MmQyZGU0ZjhkMjA2ODFhNzhkOTNlYzk2ZmUyM2MyNmJmYWU4NGZiMTRkYjQzYjAxZTFlOTA1NmI4YzQ5Il0sWyI2MmQxNGRhYjQxNTBiZjQ5NzQwMmZkYzQ1YTIxNWUxMGRjYjAxYzM1NDk1OWIxMGNmZTMxYzdlOWQ4N2ZmMzNkIiwiODBmYzA2''@;'; put 'put ''YmQ4Y2M1YjAxMDk4MDg4YTE5NTBlZWQwZGIwMWFhMTMyOTY3YWI0NzIyMzVmNTY0MjQ4M2IyNWVhZiJdLFsiODBjNjBhZDAwNDBmMjdkYWRlNWI0YjA2YzQwOGU1NmIyYzUwZTlmNTZiOWI4YjQyNWU1NTVjMmY4NjMwOGI2ZiIsIjFjMzgzMDNmMWNjNWMzMGYyNmU2NmJhZDdmZTcyZjcwYTY1''@;'; put 'put ''ZWVkNGNiZTcwMjRlYjFhYTAxZjU2NDMwYmQ1N2EiXSxbIjdhOTM3NWFkNjE2N2FkNTRhYTc0YzYzNDhjYzU0ZDM0NGNjNWRjOTQ4N2Q4NDcwNDlkNWVhYmIwZmEwM2M4ZmIiLCJkMGUzZmE5ZWNhODcyNjkwOTU1OWUwZDc5MjY5MDQ2YmRjNTllYTEwYzcwY2UyYjAyZDQ5OWVjMjI0ZGM3Zjci''@;'; put 'put ''XSxbImQ1MjhlY2Q5YjY5NmI1NGM5MDdhOWVkMDQ1NDQ3YTc5YmI0MDhlYzM5YjY4ZGY1MDRiYjUxZjQ1OWJjM2ZmYzkiLCJlZWNmNDEyNTMxMzZlNWY5OTk2NmYyMTg4MWZkNjU2ZWJjNDM0NTQwNWM1MjBkYmMwNjM0NjViNTIxNDA5OTMzIl0sWyI0OTM3MGE0YjVmNDM0MTJlYTI1ZjUxNGU4''@;'; put 'put ''ZWNkYWQwNTI2NjExNWU0YTdlY2IxMzg3MjMxODA4ZjhiNDU5NjMiLCI3NThmM2Y0MWFmZDZlZDQyOGIzMDgxYjA1MTJmZDYyYTU0YzNmM2FmYmI1YjY3NjRiNjUzMDUyYTEyOTQ5YzlhIl0sWyI3N2YyMzA5MzZlZTg4Y2JiZDczZGY5MzBkNjQ3MDJlZjg4MWQ4MTFlMGUxNDk4ZTJmMWMxM2Vi''@;'; put 'put ''MWZjMzQ1ZDc0IiwiOTU4ZWY0MmE3ODg2YjY0MDBhMDgyNjZlOWJhMWIzNzg5NmM5NTMzMGQ5NzA3N2NiYmU4ZWIzYzc2NzFjNjBkNiJdLFsiZjJkYWM5OTFjYzRjZTRiOWVhNDQ4ODdlNWM3YzBiY2U1OGM4MDA3NGFiOWQ0ZGJhZWIyODUzMWI3NzM5ZjUzMCIsImUwZGVkYzliM2IyZjhkYWQ0''@;'; put 'put ''ZGExZjMyZGVjMjUzMWRmOWViNWZiZWIwNTk4ZTRmZDFhMTE3ZGJhNzAzYTNjMzciXSxbIjQ2M2IzZDlmNjYyNjIxZmIxYjRiZThmYmJlMjUyMDEyNWEyMTZjZGZjOWRhZTNkZWJjYmE0ODUwYzY5MGQ0NWIiLCI1ZWQ0MzBkNzhjMjk2YzM1NDMxMTQzMDZkZDg2MjJkN2M2MjJlMjdjOTcwYTFk''@;'; put 'put ''ZTMxY2IzNzdiMDFhZjczMDdlIl0sWyJmMTZmODA0MjQ0ZTQ2ZTJhMDkyMzJkNGFmZjNiNTk5NzZiOThmYWMxNDMyOGEyZDFhMzI0OTZiNDk5OThmMjQ3IiwiY2VkYWJkOWI4MjIwM2Y3ZTEzZDIwNmZjZGY0ZTMzZDkyYTZjNTNjMjZlNWNjZTI2ZDY1Nzk5NjJjNGUzMWRmNiJdLFsiY2FmNzU0''@;'; put 'put ''MjcyZGM4NDU2M2IwMzUyYjdhMTQzMTFhZjU1ZDI0NTMxNWFjZTI3YzY1MzY5ZTE1ZjcxNTFkNDFkMSIsImNiNDc0NjYwZWYzNWY1ZjJhNDFiNjQzZmE1ZTQ2MDU3NWY0ZmE5Yjc5NjIyMzJhNWMzMmY5MDgzMThhMDQ0NzYiXSxbIjI2MDBjYTRiMjgyY2I5ODZmODVkMGYxNzA5OTc5ZDhiNDRh''@;'; put 'put ''MDljMDdjYjg2ZDdjMTI0NDk3YmM4NmYwODIxMjAiLCI0MTE5Yjg4NzUzYzE1YmQ2YTY5M2IwM2ZjZGRiYjQ1ZDVhYzZiZTc0YWI1ZjBlZjQ0YjBiZTk0NzVhN2U0YjQwIl0sWyI3NjM1Y2E3MmQ3ZTg0MzJjMzM4ZWM1M2NkMTIyMjBiYzAxYzQ4Njg1ZTI0ZjdkYzhjNjAyYTc3NDY5OThlNDM1''@;'; put 'put ''IiwiOTFiNjQ5NjA5NDg5ZDYxM2QxZDVlNTkwZjc4ZTZkNzRlY2ZjMDYxZDU3MDQ4YmFkOWU3NmYzMDJjNWI5YzYxIl0sWyI3NTRlMzIzOWYzMjU1NzBjZGJiZjRhODdkZWVlOGE2NmI3ZjJiMzM0NzlkNDY4ZmJjMWE1MDc0M2JmNTZjYzE4IiwiNjczZmI4NmU1YmRhMzBmYjNjZDBlZDMwNGVh''@;'; put 'put ''NDlhMDIzZWUzM2QwMTk3YTY5NWQwYzVkOTgwOTNjNTM2NjgzIl0sWyJlM2U2YmQxMDcxYTFlOTZhZmY1Nzg1OWM4MmQ1NzBmMDMzMDgwMDY2MWQxYzk1MmY5ZmUyNjk0NjkxZDliOWU4IiwiNTljOWUwYmJhMzk0ZTc2ZjQwYzBhYTU4Mzc5YTNjYjZhNWEyMjgzOTkzZTkwYzQxNjcwMDJhZjQ5''@;'; put 'put ''MjBlMzdmNSJdLFsiMTg2YjQ4M2QwNTZhMDMzODI2YWU3M2Q4OGY3MzI5ODVjNGNjYjFmMzJiYTM1ZjRiNGNjNDdmZGNmMDRhYTZlYiIsIjNiOTUyZDMyYzY3Y2Y3N2UyZTE3NDQ2ZTIwNDE4MGFiMjFmYjgwOTA4OTUxMzhiNGE0YTc5N2Y4NmU4MDg4OGIiXSxbImRmOWQ3MGE2Yjk4NzZjZTU0''@;'; put 'put ''NGM5ODU2MWY0YmU0ZjcyNTQ0MmU2ZDJiNzM3ZDljOTFhODMyMTcyNGNlMDk2M2YiLCI1NWViMmRhZmQ4NGQ2Y2NkNWY4NjJiNzg1ZGMzOWQ0YWIxNTcyMjI3MjBlZjlkYTIxN2I4YzQ1Y2YyYmEyNDE3Il0sWyI1ZWRkNWNjMjNjNTFlODdhNDk3Y2E4MTVkNWRjZTBmOGFiNTI1NTRmODQ5ZWQ4''@;'; put 'put ''OTk1ZGU2NGM1ZjM0Y2U3MTQzIiwiZWZhZTljOGRiYzE0MTMwNjYxZThjZWMwMzBjODlhZDBjMTNjNjZjMGQxN2EyOTA1Y2RjNzA2YWI3Mzk5YTg2OCJdLFsiMjkwNzk4YzJiNjQ3NjgzMGRhMTJmZTAyMjg3ZTllNzc3YWEzZmJhMWMzNTViMTdhNzIyZDM2MmY4NDYxNGZiYSIsImUzOGRhNzZk''@;'; put 'put ''Y2Q0NDA2MjE5ODhkMDBiY2Y3OWFmMjVkNWIyOWMwOTRkYjJhMjMxNDZkMDAzYWZkNDE5NDNlN2EiXSxbImFmM2M0MjNhOTVkOWY1YjMwNTQ3NTRlZmExNTBhYzM5Y2QyOTU1MmZlMzYwMjU3MzYyZGZkZWNlZjQwNTNiNDUiLCJmOThhM2ZkODMxZWIyYjc0OWE5M2IwZTZmMzVjZmI0MGM4Y2Q1''@;'; put 'put ''YWE2NjdhMTU1ODFiYzJmZWRlZDQ5OGZkOWM2Il0sWyI3NjZkYmIyNGQxMzRlNzQ1Y2NjYWEyOGM5OWJmMjc0OTA2YmI2NmIyNmRjZjk4ZGY4ZDJmZWQ1MGQ4ODQyNDlhIiwiNzQ0YjExNTJlYWNiZTVlMzhkY2M4ODc5ODBkYTM4Yjg5NzU4NGE2NWZhMDZjZWRkMmM5MjRmOTdjYmFjNTk5NiJd''@;'; put 'put ''LFsiNTlkYmY0NmY4Yzk0NzU5YmEyMTI3N2MzMzc4NGY0MTY0NWY3YjQ0ZjZjNTk2YTU4Y2U5MmU2NjYxOTFhYmUzZSIsImM1MzRhZDQ0MTc1ZmJjMzAwZjRlYTZjZTY0ODMwOWEwNDJjZTczOWE3OTE5Nzk4Y2Q4NWUyMTZjNGEzMDdmNmUiXSxbImYxM2FkYTk1MTAzYzQ1MzczMDVlNjkxZTc0''@;'; put 'put ''ZTlhNGE4ZGQ2NDdlNzExYTk1ZTczY2I2MmRjNjAxOGNmZDg3YjgiLCJlMTM4MTdiNDRlZTE0ZGU2NjNiZjRiYzgwODM0MWYzMjY5NDllMjFhNmE3NWMyNTcwNzc4NDE5YmRhZjU3MzNkIl0sWyI3NzU0YjRmYTBlOGFjZWQwNmQ0MTY3YTJjNTljY2E0Y2RhMTg2OWMwNmViYWRmYjY0ODg1NTAw''@;'; put 'put ''MTVhODg1MjJjIiwiMzBlOTNlODY0ZTY2OWQ4MjIyNGI5NjdjMzAyMGI4ZmE4ZDFlNGUzNTBiNmNiY2M1MzdhNDhiNTc4NDExNjNhMiJdLFsiOTQ4ZGNhZGY1OTkwZTA0OGFhMzg3NGQ0NmFiZWY5ZDcwMTg1OGY5NWRlODA0MWQyYTY4MjhjOTllMjI2MjUxOSIsImU0OTFhNDI1MzdmNmU1OTdk''@;'; put 'put ''NWQyOGEzMjI0YjFiYzI1ZGY5MTU0ZWZiZDJlZjFkMmNiYmEyY2FlNTM0N2Q1N2UiXSxbIjc5NjI0MTQ0NTBjNzZjMTY4OWM3YjQ4ZjgyMDJlYzM3ZmIyMjRjZjVhYzBiZmExNTcwMzI4YThhM2Q3Yzc3YWIiLCIxMDBiNjEwZWM0ZmZiNDc2MGQ1YzFmYzEzM2VmNmY2YjEyNTA3YTA1MWYwNGFj''@;'; put 'put ''NTc2MGFmYTViMjlkYjgzNDM3Il0sWyIzNTE0MDg3ODM0OTY0YjU0YjE1YjE2MDY0NGQ5MTU0ODVhMTY5NzcyMjViODg0N2JiMGRkMDg1MTM3ZWM0N2NhIiwiZWYwYWZiYjIwNTYyMDU0NDhlMTY1MmM0OGU4MTI3ZmM2MDM5ZTc3YzE1YzIzNzhiN2U3ZDE1YTBkZTI5MzMxMSJdLFsiZDNjYzMw''@;'; put 'put ''YWQ2YjQ4M2U0YmM3OWNlMmM5ZGQ4YmM1NDk5M2U5NDdlYjhkZjc4N2I0NDI5NDNkM2Y3YjUyN2VhZiIsIjhiMzc4YTIyZDgyNzI3OGQ4OWM1ZTliZThmOTUwOGFlM2MyYWQ0NjI5MDM1ODYzMGFmYjM0ZGIwNGVlZGUwYTQiXSxbIjE2MjRkODQ3ODA3MzI4NjBjZTFjNzhmY2JmZWZlMDhiMmIy''@;'; put 'put ''OTgyM2RiOTEzZjY0OTM5NzViYTBmZjQ4NDc2MTAiLCI2ODY1MWNmOWI2ZGE5MDNlMDkxNDQ0OGM2Y2Q5ZDRjYTg5Njg3OGY1MjgyYmU0YzhjYzA2ZTJhNDA0MDc4NTc1Il0sWyI3MzNjZTgwZGE5NTVhOGEyNjkwMmM5NTYzM2U2MmE5ODUxOTI0NzRiNWFmMjA3ZGE2ZGY3YjRmZDVmYzYxY2Q0''@;'; put 'put ''IiwiZjU0MzVhMmJkMmJhZGY3ZDQ4NWE0ZDhiOGRiOWZjY2UzZTFlZjhlMDIwMWU0NTc4YzU0NjczYmMxZGM1ZWExZCJdLFsiMTVkOTQ0MTI1NDk0NTA2NGNmMWExYzMzYmJkM2I0OWY4OTY2YzUwOTIxNzFlNjk5ZWYyNThkZmFiODFjMDQ1YyIsImQ1NmViMzBiNjk0NjNlNzIzNGY1MTM3Yjcz''@;'; put 'put ''Yjg0MTc3NDM0ODAwYmFjZWJmYzY4NWZjMzdiYmU5ZWZlNDA3MGQiXSxbImExZDBmY2YyZWM5ZGU2NzViNjEyMTM2ZTVjZTcwZDI3MWMyMTQxN2M5ZDJiOGFhYWFjMTM4NTk5ZDA3MTc5NDAiLCJlZGQ3N2Y1MGJjYjVhM2NhYjJlOTA3MzczMDk2NjdmMjY0MTQ2MmE1NDA3MGYzZDUxOTIxMmQz''@;'; put 'put ''OWMxOTdhNjI5Il0sWyJlMjJmYmUxNWMwYWY4Y2NjNTc4MGMwNzM1Zjg0ZGJlOWE3OTBiYWRlZTgyNDVjMDZjN2NhMzczMzFjYjM2OTgwIiwiYTg1NWJhYmFkNWNkNjBjODhiNDMwYTY5ZjUzYTFhN2EzODI4OTE1NDk2NDc5OWJlNDNkMDZkNzdkMzFkYTA2Il0sWyIzMTEwOTFkZDk4NjBlOGUy''@;'; put 'put ''MGVlMTM0NzNjMTE1NWY1ZjY5NjM1ZTM5NDcwNGVhYTc0MDA5NDUyMjQ2Y2ZhOWIzIiwiNjZkYjY1NmY4N2QxZjA0ZmZmZDFmMDQ3ODhjMDY4MzA4NzFlYzVhNjRmZWVlNjg1YmQ4MGYwYjEyODZkODM3NCJdLFsiMzRjMWZkMDRkMzAxYmU4OWIzMWMwNDQyZDNlNmFjMjQ4ODM5MjhiNDVhOTM0''@;'; put 'put ''MDc4MTg2N2Q0MjMyZWMyZGJkZiIsIjk0MTQ2ODVlOTdiMWI1OTU0YmQ0NmY3MzAxNzQxMzZkNTdmMWNlZWI0ODc0NDNkYzUzMjE4NTdiYTczYWJlZSJdLFsiZjIxOWVhNWQ2YjU0NzAxYzFjMTRkZTViNTU3ZWI0MmE4ZDEzZjNhYmJjZDA4YWZmY2MyYTVlNmIwNDliOGQ2MyIsIjRjYjk1OTU3''@;'; put 'put ''ZTgzZDQwYjBmNzNhZjQ1NDRjY2NmNmIxZjRiMDhkM2MwN2IyN2ZiOGQ4YzI5NjJhNDAwNzY2ZDEiXSxbImQ3Yjg3NDBmNzRhOGZiYWFiMWY2ODNkYjhmNDVkZTI2NTQzYTU0OTBiY2E2MjcwODcyMzY5MTI0NjlhMGI0NDgiLCJmYTc3OTY4MTI4ZDljOTJlZTEwMTBmMzM3YWQ0NzE3ZWZmMTVk''@;'; put 'put ''YjVlZDNjMDQ5YjM0MTFlMDMxNWVhYTQ1OTNiIl0sWyIzMmQzMWMyMjJmOGY2ZjBlZjg2ZjdjOThkM2EzMzM1ZWFkNWJjZDMyYWJkZDk0Mjg5ZmU0ZDMwOTFhYTgyNGJmIiwiNWYzMDMyZjU4OTIxNTZlMzljY2QzZDc5MTViOWUxZGEyZTZkYWM5ZTZmMjZlOTYxMTE4ZDE0Yjg0NjJlMTY2MSJd''@;'; put 'put ''LFsiNzQ2MWYzNzE5MTRhYjMyNjcxMDQ1YTE1NWQ5ODMxZWE4NzkzZDc3Y2Q1OTU5MmM0MzQwZjg2Y2JjMTgzNDdiNSIsIjhlYzBiYTIzOGI5NmJlYzBjYmRkZGNhZTBhYTQ0MjU0MmVlZTFmZjUwYzk4NmVhNmIzOTg0N2IzY2MwOTJmZjYiXSxbImVlMDc5YWRiMWRmMTg2MDA3NDM1NmEyNWFh''@;'; put 'put ''MzgyMDZhNmQ3MTZiMmMzZTY3NDUzZDI4NzY5OGJhZDdiMmIyZDYiLCI4ZGMyNDEyYWFmZTNiZTVjNGM1ZjM3ZTBlY2M1ZjlmNmE0NDY5ODlhZjA0YzRlMjVlYmFhYzQ3OWVjMWM4YzFlIl0sWyIxNmVjOTNlNDQ3ZWM4M2YwNDY3YjE4MzAyZWU2MjBmN2U2NWRlMzMxODc0YzlkYzcyYmZkODYx''@;'; put 'put ''NmJhOWRhNmI1IiwiNWU0NjMxMTUwZTYyZmI0MGQwZThjMmE3Y2E1ODA0YTM5ZDU4MTg2YTUwZTQ5NzEzOTYyNjc3OGUyNWIwNjc0ZCJdLFsiZWFhNWY5ODBjMjQ1ZjZmMDM4OTc4MjkwYWZhNzBiNmJkODg1NTg5N2Y5OGI2YWE0ODViOTYwNjVkNTM3YmQ5OSIsImY2NWY1ZDNlMjkyYzJlMDgx''@;'; put 'put ''OWE1MjgzOTFjOTk0NjI0ZDc4NDg2OWQ3ZTZlYTY3ZmIxODA0MTAyNGVkYzA3ZGMiXSxbIjc4Yzk0MDc1NDRhYzEzMjY5MmVlMTkxMGEwMjQzOTk1OGFlMDQ4NzcxNTEzNDJlYTk2YzRiNmIzNWE0OWY1MSIsImYzZTAzMTkxNjllYjliODVkNTQwNDc5NTUzOWE1ZTY4ZmExZmJkNTgzYzA2NGQy''@;'; put 'put ''NDYyYjY3NWYxOTRhM2RkYjQiXSxbIjQ5NGY0YmUyMTlhMWE3NzAxNmRjZDgzODQzMWFlYTAwMDFjZGM4YWU3YTZmYzY4ODcyNjU3OGQ5NzAyODU3YTUiLCI0MjI0MmE5NjkyODNhNWYzMzliYTdmMDc1ZTM2YmEyYWY5MjVjZTMwZDc2N2VkNmU1NWY0YjAzMTg4MGQ1NjJjIl0sWyJhNTk4YTgw''@;'; put 'put ''MzBkYTZkODZjNmJjN2YyZjUxNDRlYTU0OWQyODIxMWVhNThmYWE3MGViZjRjMWU2NjVjMWZlOWI1IiwiMjA0YjVkNmY4NDgyMmMzMDdlNGI0YTcxNDA3MzdhZWMyM2ZjNjNiNjViMzVmODZhMTAwMjZkYmQyZDg2NGU2YiJdLFsiYzQxOTE2MzY1YWJiMmI1ZDA5MTkyZjVmMmRiZWFmZWMyMDhm''@;'; put 'put ''MDIwZjEyNTcwYTE4NGRiYWRjM2U1ODU5NTk5NyIsIjRmMTQzNTFkMDA4N2VmYTQ5ZDI0NWIzMjg5ODQ5ODlkNWNhZjk0NTBmMzRiZmMwZWQxNmU5NmI1OGZhOTkxMyJdLFsiODQxZDYwNjNhNTg2ZmE0NzVhNzI0NjA0ZGEwM2JjNWI5MmEyZTBkMmUwYTM2YWNmZTRjNzNhNTUxNDc0Mjg4MSIs''@;'; put 'put ''IjczODY3ZjU5YzA2NTllODE5MDRmOWExYzc1NDM2OThlNjI1NjJkNjc0NGMxNjljZTdhMzZkZTAxYThkNjE1NCJdLFsiNWU5NWJiMzk5YTY5NzFkMzc2MDI2OTQ3Zjg5YmRlMmYyODJiMzM4MTA5MjhiZTRkZWQxMTJhYzRkNzBlMjBkNSIsIjM5ZjIzZjM2NjgwOTA4NWJlZWJmYzcxMTgxMzEz''@;'; put 'put ''Nzc1YTk5YzlhZWQ3ZDhiYTM4YjE2MTM4NGM3NDYwMTI4NjUiXSxbIjM2ZTQ2NDFhNTM5NDhmZDQ3NmMzOWY4YTk5ZmQ5NzRlNWVjMDc1NjRiNTMxNWQ4YmY5OTQ3MWJjYTBlZjJmNjYiLCJkMjQyNGIxYjFhYmU0ZWI4MTY0MjI3YjA4NWM5YWE5NDU2ZWExMzQ5M2ZkNTYzZTA2ZmQ1MWNmNTY5''@;'; put 'put ''NGM3OGZjIl0sWyIzMzY1ODFlYTdiZmJiYjI5MGMxOTFhMmY1MDdhNDFjZjU2NDM4NDIxNzBlOTE0ZmFlYWIyN2MyYzU3OWY3MjYiLCJlYWQxMjE2ODU5NWZlMWJlOTkyNTIxMjliNmU1NmIzMzkxZjdhYjE0MTBjZDFlMGVmM2RjZGNhYmQyZmRhMjI0Il0sWyI4YWI4OTgxNmRhZGZkNmI2YTFm''@;'; put 'put ''MjYzNGZjZjAwZWM4NDAzNzgxMDI1ZWQ2ODkwYzQ4NDk3NDI3MDZiZDQzZWRlIiwiNmZkY2VmMDlmMmY2ZDBhMDQ0ZTY1NGFlZjYyNDEzNmY1MDNkNDU5YzNlODk4NDU4NThhNDdhOTEyOWNkZDI0ZSJdLFsiMWUzM2YxYTc0NmM5YzU3NzgxMzMzNDRkOTI5OWZjYWEyMGIwOTM4ZThhY2ZmMjU0''@;'; put 'put ''NGJiNDAyODRiOGM1ZmI5NCIsIjYwNjYwMjU3ZGQxMWIzYWE5YzhlZDYxOGQyNGVkZmYyMzA2ZDMyMGYxZDAzMDEwZTMzYTdkMjA1N2YzYjNiNiJdLFsiODViN2MxZGNiM2NlYzFiN2VlN2YzMGRlZDc5ZGQyMGEwZWQxZjRjYzE4Y2JjZmNmYTQxMDM2MWZkOGYwOGYzMSIsIjNkOThhOWNkZDAy''@;'; put 'put ''NmRkNDNmMzkwNDhmMjVhODg0N2Y0ZmNhZmFkMTg5NWQ3YTYzM2M2ZmVkM2MzNWU5OTk1MTEiXSxbIjI5ZGY5ZmJkOGQ5ZTQ2NTA5Mjc1ZjRiMTI1ZDZkNDVkN2ZiZTlhM2I4NzhhN2FmODcyYTI4MDA2NjFhYzVmNTEiLCJiNGM0ZmU5OWM3NzVhNjA2ZTJkODg2MjE3OTEzOWZmZGE2MWRjODYx''@;'; put 'put ''YzAxOWU1NWNkMjg3NmViMmEyN2Q4NGIiXSxbImEwYjFjYWUwNmIwYTg0N2EzZmVhNmU2NzFhYWY4YWRmZGZlNThjYTJmNzY4MTA1YzgwODJiMmU0NDlmY2UyNTIiLCJhZTQzNDEwMmVkZGUwOTU4ZWM0YjE5ZDkxN2E2YTI4ZTZiNzJkYTE4MzRhZmYwZTY1MGYwNDk1MDNhMjk2Y2YyIl0sWyI0''@;'; put 'put ''ZThjZWFmYjliM2U5YTEzNmRjN2ZmNjdlODQwMjk1YjQ5OWRmYjNiMjEzM2U0YmExMTNmMmU0YzBlMTIxZTUiLCJjZjIxNzQxMThjOGI2ZDdhNGI0OGY2ZDUzNGNlNWM3OTQyMmMwODZhNjM0NjA1MDJiODI3Y2U2MmEzMjY2ODNjIl0sWyJkMjRhNDRlMDQ3ZTE5YjZmNWFmYjgxYzdjYTJmNjkw''@;'; put 'put ''ODBhNTA3NjY4OWEwMTA5MTlmNDI3MjVjMmI3ODlhMzNiIiwiNmZiOGQ1NTkxYjQ2NmY4ZmM2M2RiNTBmMWMwZjFjNjkwMTNmOTk2ODg3YjgyNDRkMmNkZWM0MTdhZmVhOGZhMyJdLFsiZWEwMTYwNmE3YTZjOWNkZDI0OWZkZmNmYWNiOTk1ODQwMDFlZGQyOGFiYmFiNzdiNTEwNGU5OGU4ZTNi''@;'; put 'put ''MzVkNCIsIjMyMmFmNDkwOGM3MzEyYjBjZmJmZTM2OWY3YTdiM2NkYjdkNDQ5NGJjMjgyMzcwMGNmZDY1MjE4OGEzZWE5OGQiXSxbImFmOGFkZGJmMmI2NjFjOGE2YzYzMjg2NTVlYjk2NjUxMjUyMDA3ZDhjNWVhMzFiZTRhZDE5NmRlOGNlMjEzMWYiLCI2NzQ5ZTY3YzAyOWI4NWY1MmEwMzRl''@;'; put 'put ''YWZkMDk2ODM2YjI1MjA4MTg2ODBlMjZhYzhmM2RmYmNkYjcxNzQ5NzAwIl0sWyJlM2FlMTk3NDU2NmNhMDZjYzUxNmQ0N2UwZmIxNjVhNjc0YTNkYWJjZmNhMTVlNzIyZjBlMzQ1MGY0NTg4OSIsIjJhZWFiZTdlNDUzMTUxMDExNjIxN2YwN2JmNGQwNzMwMGRlOTdlNDg3NGY4MWY1MzM0MjBh''@;'; put 'put ''NzJlZWIwYmQ2YTQiXSxbIjU5MWVlMzU1MzEzZDk5NzIxY2Y2OTkzZmZlZDFlM2UzMDE5OTNmZjNlZDI1ODgwMjA3NWVhOGNlZDM5N2UyNDYiLCJiMGVhNTU4YTExM2MzMGJlYTYwZmM0Nzc1NDYwYzc5MDFmZjBiMDUzZDI1Y2EyYmRlZWU5OGYxYTRiZTVkMTk2Il0sWyIxMTM5NmQ1NWZkYTU0''@;'; put 'put ''YzQ5ZjE5YWE5NzMxOGQ4ZGE2MWZhODU4NGU0N2IwODQ5NDUwNzdjZjAzMjU1YjUyOTg0IiwiOTk4Yzc0YThjZDQ1YWMwMTI4OWQ1ODMzYTdiZWI0NzQ0ZmY1MzZiMDFiMjU3YmU0YzU3NjdiZWE5M2VhNTdhNCJdLFsiM2M1ZDJhMWJhMzljNWExNzkwMDAwNzM4YzllMGM0MGI4ZGNkZmQ1NDY4''@;'; put 'put ''NzU0YjY0MDU1NDAxNTdlMDE3YWE3YSIsImIyMjg0Mjc5OTk1YTM0ZTJmOWQ0ZGU3Mzk2ZmMxOGI4MGY5YjhiOWZkZDI3MGY2NjYxZjc5Y2E0YzgxYmQyNTciXSxbImNjODcwNGI4YTYwYTBkZWZhM2E5OWE3Mjk5ZjJlOWMzZmJjMzk1YWZiMDRhYzA3ODQyNWVmOGExNzkzY2MwMzAiLCJiZGQ0''@;'; put 'put ''NjAzOWZlZWQxNzg4MWQxZTA4NjJkYjM0N2Y4Y2YzOTViNzRmYzRiY2RjNGU5NDBiNzRlM2FjMWYxYjEzIl0sWyJjNTMzZTRmN2VhODU1NWFhY2Q5Nzc3YWM1Y2FkMjliOTdkZDRkZWZjY2M1M2VlN2VhMjA0MTE5YjI4ODliMTk3IiwiNmYwYTI1NmJjNWVmZGY0MjlhMmZiNjI0MmYxYTQzYTJk''@;'; put 'put ''OWI5MjViYjRhNGIzYTI2YmI4ZTBmNDVlYjU5NjA5NiJdLFsiYzE0ZjhmMmNjYjI3ZDZmMTA5ZjZkMDhkMDNjYzk2YTY5YmE4YzM0ZWVjMDdiYmNmNTY2ZDQ4ZTMzZGE2NTkzIiwiYzM1OWQ2OTIzYmIzOThmN2ZkNDQ3M2UxNmZlMWMyODQ3NWI3NDBkZDA5ODA3NWU2YzBlODY0OTExM2RjM2Ez''@;'; put 'put ''OCJdLFsiYTZjYmMzMDQ2YmM2YTQ1MGJhYzI0Nzg5ZmExNzExNWE0Yzk3MzllZDc1ZjhmMjFjZTQ0MWY3MmUwYjkwZTZlZiIsIjIxYWU3ZjQ2ODBlODg5YmIxMzA2MTllMmMwZjk1YTM2MGNlYjU3M2M3MDYwMzEzOTg2MmFmZDYxN2ZhOWI5ZiJdLFsiMzQ3ZDZkOWEwMmM0ODkyN2ViZmI4NmMx''@;'; put 'put ''MzU5YjFjYWYxMzBhM2MwMjY3ZDExY2U2MzQ0YjM5Zjk5ZDQzY2MzOCIsIjYwZWE3ZjYxYTM1MzUyNGQxYzk4N2Y2ZWNlYzkyZjA4NmQ1NjVhYjY4Nzg3MGNiMTI2ODlmZjFlMzFjNzQ0NDgiXSxbImRhNjU0NWQyMTgxZGI4ZDk4M2Y3ZGNiMzc1ZWY1ODY2ZDQ3YzY3YjFiZjMxYzhjZjg1NWVm''@;'; put 'put ''NzQzN2I3MjY1NmEiLCI0OWI5NjcxNWFiNjg3OGE3OWU3OGYwN2NlNTY4MGM1ZDY2NzMwNTFiNDkzNWJkODk3ZmVhODI0Yjc3ZGMyMDhhIl0sWyJjNDA3NDdjYzlkMDEyY2IxYTEzYjgxNDgzMDljNmRlN2VjMjVkNjk0NWQ2NTcxNDZiOWQ1OTk0YjhmZWIxMTExIiwiNWNhNTYwNzUzYmUyYTEy''@;'; put 'put ''ZmM2ZGU2Y2FmMmNiNDg5NTY1ZGI5MzYxNTZiOTUxNGUxYmI1ZTgzMDM3ZTBmYTJkNCJdLFsiNGU0MmM4ZWM4MmM5OTc5OGNjZjNhNjEwYmU4NzBlNzgzMzhjN2Y3MTMzNDhiZDM0YzgyMDNlZjQwMzdmMzUwMiIsIjc1NzFkNzRlZTVlMGZiOTJhN2E4YjMzYTA3NzgzMzQxYTU0OTIxNDRjYzU0''@;'; put 'put ''YmNjNDBhOTQ0NzM2OTM2MDY0MzciXSxbIjM3NzVhYjcwODliYzZhZjgyM2FiYTJlMWFmNzBiMjM2ZDI1MWNhZGIwYzg2NzQzMjg3NTIyYTFiM2IwZGVkZWEiLCJiZTUyZDEwN2JjZmEwOWQ4YmNiOTczNmE4MjhjZmE3ZmFjOGRiMTdiZjdhNzZhMmM0MmFkOTYxNDA5MDE4Y2Y3Il0sWyJjZWUz''@;'; put 'put ''MWNiZjdlMzRlYzM3OWQ5NGZiODE0ZDNkNzc1YWQ5NTQ1OTVkMTMxNGJhODg0Njk1OWUzZTgyZjc0ZTI2IiwiOGZkNjRhMTRjMDZiNTg5YzI2Yjk0N2FlMmJjZjZiZmEwMTQ5ZWYwYmUxNGVkNGQ4MGY0NDhhMDFjNDNiMWM2ZCJdLFsiYjRmOWVhZWEwOWI2OTE3NjE5ZjZlYTZhNGViNTQ2NGVm''@;'; put 'put ''ZGRiNThmZDQ1YjFlYmVmY2RjMWEwMWQwOGI0Nzk4NiIsIjM5ZTVjOTkyNWI1YTU0YjA3NDMzYTRmMThjNjE3MjZmOGJiMTMxYzAxMmNhNTQyZWIyNGE4YWMwNzIwMDY4MmEiXSxbImQ0MjYzZGZjM2QyZGY5MjNhMDE3OWE0ODk2NmQzMGNlODRlMjUxNWFmYzNkY2NjMWI3NzkwNzc5MmViY2M2''@;'; put 'put ''MGUiLCI2MmRmYWYwN2EwZjc4ZmViMzBlMzBkNjI5NTg1M2NlMTg5ZTEyNzc2MGFkNmNmN2ZhZTE2NGUxMjJhMjA4ZDU0Il0sWyI0ODQ1NzUyNDgyMGZhNjVhNGY4ZDM1ZWI2OTMwODU3YzAwMzJhY2MwYTRhMmRlNDIyMjMzZWVkYTg5NzYxMmM0IiwiMjVhNzQ4YWIzNjc5NzlkOTg3MzNjMzhh''@;'; put 'put ''MWZhMWMyZTdkYzZjYzA3ZGIyZDYwYTlhZTdhNzZhYWE0OWJkMGY3NyJdLFsiZGZlZWVmMTg4MTEwMWYyY2IxMTY0NGYzYTJhZmRmYzIwNDVlMTk5MTkxNTI5MjNmMzY3YTE3NjdjMTFjY2VkYSIsImVjZmI3MDU2Y2YxZGUwNDJmOTQyMGJhYjM5Njc5M2MwYzM5MGJkZTc0YjRiYmRmZjE2YTgz''@;'; put 'put ''YWUwOWE5YTc1MTciXSxbIjZkN2VmNmIxNzU0M2Y4MzczYzU3M2Y0NGUxZjM4OTgzNWQ4OWJjYmM2MDYyY2VkMzZjODJkZjgzYjhmYWU4NTkiLCJjZDQ1MGVjMzM1NDM4OTg2ZGZlZmExMGM1N2ZlYTliY2M1MjFhMDk1OWIyZDgwYmJmNzRiMTkwZGNhNzEyZDEwIl0sWyJlNzU2MDVkNTkxMDJh''@;'; put 'put ''NWEyNjg0NTAwZDNiOTkxZjJlM2YzYzg4YjkzMjI1NTQ3MDM1YWYyNWFmNjZlMDQ1NDFmIiwiZjVjNTQ3NTRhOGY3MWVlNTQwYjliNDg3Mjg0NzNlMzE0ZjcyOWFjNTMwOGIwNjkzODM2MDk5MGUyYmZhZDEyNSJdLFsiZWI5ODY2MGY0YzRkZmFhMDZhMmJlNDUzZDUwMjBiYzk5YTBjMmU2MGFi''@;'; put 'put ''ZTM4ODQ1N2RkNDNmZWZiMWVkNjIwYyIsIjZjYjlhODg3NmQ5Y2I4NTIwNjA5YWYzYWRkMjZjZDIwYTBhN2NkOGE5NDExMTMxY2U4NWY0NDEwMDA5OTIyM2UiXSxbIjEzZTg3YjAyN2Q4NTE0ZDM1OTM5ZjJlNjg5MmIxOTkyMjE1NDU5Njk0MTg4ODMzNmRjMzU2M2UzYjhkYmE5NDIiLCJmZWY1''@;'; put 'put ''YTNjNjgwNTlhNmRlYzVkNjI0MTE0YmYxZTkxYWFjMmI5ZGE1NjhkNmFiZWIyNTcwZDU1NjQ2YjhhZGYxIl0sWyJlZTE2MzAyNmU5ZmQ2ZmUwMTdjMzhmMDZhNWJlNmZjMTI1NDI0YjM3MWNlMjcwOGU3YmY0NDkxNjkxZTU3NjRhIiwiMWFjYjI1MGYyNTVkZDYxYzQzZDk0Y2NjNjcwZDBmNThm''@;'; put 'put ''NDlhZTNmYTE1Yjk2NjIzZTU0MzBkYTBhZDZjNjJiMiJdLFsiYjI2OGY1ZWY5YWQ1MWU0ZDc4ZGUzYTc1MGMyZGM4OWIxZTYyNmQ0MzUwNTg2Nzk5OTkzMmU1ZGIzM2FmM2Q4MCIsIjVmMzEwZDRiM2M5OWI5ZWJiMTlmNzdkNDFjMWRlZTAxOGNmMGQzNGZkNDE5MTYxNDAwM2U5NDVhMTIxNmU0''@;'; put 'put ''MjMiXSxbImZmMDdmMzExOGE5ZGYwMzVlOWZhZDg1ZWI2YzdiZmU0MmIwMmYwMWNhOTljZWVhM2JmN2ZmZGJhOTNjNDc1MGQiLCI0MzgxMzZkNjAzZTg1OGEzYTVjNDQwYzM4ZWNjYmFkZGMxZDI5NDIxMTRlMmVkZGQ0NzQwZDA5OGNlZDFmMGQ4Il0sWyI4ZDhiOTg1NWM3YzA1MmEzNDE0NmZk''@;'; put 'put ''MjBmZmI2NThiZWE0YjlmNjllMGQ4MjVlYmVjMTZlOGMzY2UyYjUyNmExIiwiY2RiNTU5ZWVkYzJkNzlmOTI2YmFmNDRmYjg0ZWE0ZDQ0YmNmNTBmZWU1MWQ3Y2ViMzBlMmU3ZjQ2MzAzNjc1OCJdLFsiNTJkYjBiNTM4NGRmYmYwNWJmYTlkNDcyZDdhZTI2ZGZlNGI4NTFjZWNhOTFiMWViYTU0''@;'; put 'put ''MjYzMTgwZGEzMmI2MyIsImMzYjk5N2QwNTBlZTVkNDIzZWJhZjY2YTZkYjlmNTdiMzE4MGM5MDI4NzU2NzlkZTkyNGI2OWQ4NGE3YjM3NSJdLFsiZTYyZjk0OTBkM2Q1MWRhNjM5NWVmZDI0ZTgwOTE5Y2M3ZDBmMjljM2YzZmE0OGM2ZmZmNTQzYmVjYmQ0MzM1MiIsIjZkODlhZDdiYTQ4NzZi''@;'; put 'put ''MGIyMmMyY2EyODBjNjgyODYyZjM0MmM4NTkxZjFkYWY1MTcwZTA3YmZkOWNjYWZhN2QiXSxbIjdmMzBlYTI0NzZiMzk5YjQ5NTc1MDljODhmNzdkMDE5MWFmYTJmZjVjYjdiMTRmZDZkOGU3ZDY1YWFhYjExOTMiLCJjYTVlZjdkNGIyMzFjOTRjM2IxNTM4OWE1ZjYzMTFlOWRhZmY3YmI2N2Ix''@;'; put 'put ''MDNlOTg4MGVmNGJmZjYzN2FjYWVjIl0sWyI1MDk4ZmYxZTFkOWYxNGZiNDZhMjEwZmFkYTZjOTAzZmVmMGZiN2I0YTFkZDFkOWFjNjBhMDM2MTgwMGI3YTAwIiwiOTczMTE0MWQ4MWZjOGY4MDg0ZDM3YzZlNzU0MjAwNmIzZWUxYjQwZDYwZGZlNTM2MmE1YjEzMmZkMTdkZGMwIl0sWyIzMmI3''@;'; put 'put ''OGM3ZGU5ZWU1MTJhNzI4OTViZTZiOWNiZWZhNmUyZjNjNGNjY2U0NDVjOTZiOWYyYzgxZTI3NzhhZDU4IiwiZWUxODQ5ZjUxM2RmNzFlMzJlZmMzODk2ZWUyODI2MGM3M2JiODA1NDdhZTIyNzViYTQ5NzIzNzc5NGM4NzUzYyJdLFsiZTJjYjc0ZmRkYzhlOWZiY2QwNzZlZWYyYTdjNzJiMGNl''@;'; put 'put ''MzdkNTBmMDgyNjlkZmMwNzRiNTgxNTUwNTQ3YTRmNyIsImQzYWEyZWQ3MWM5ZGQyMjQ3YTYyZGYwNjI3MzZlYjBiYWRkZWE5ZTM2MTIyZDJiZTg2NDFhYmNiMDA1Y2M0YTQiXSxbIjg0Mzg0NDc1NjZkNGQ3YmVkYWRjMjk5NDk2YWIzNTc0MjYwMDlhMzVmMjM1Y2IxNDFiZTBkOTljZDEwYWUz''@;'; put 'put ''YTgiLCJjNGUxMDIwOTE2OTgwYTRkYTVkMDFhYzVlNmFkMzMwNzM0ZWYwZDc5MDY2MzFjNGYyMzkwNDI2YjJlZGQ3OTFmIl0sWyI0MTYyZDQ4OGI4OTQwMjAzOWI1ODRjNmZjNmMzMDg4NzA1ODdkOWM0NmY2NjBiODc4YWI2NWM4MmM3MTFkNjdlIiwiNjcxNjNlOTAzMjM2Mjg5Zjc3NmYyMmMy''@;'; put 'put ''NWZiOGEzYWZjMTczMmYyYjg0YjRlOTVkYmRhNDdhZTVhMDg1MjY0OSJdLFsiM2ZhZDNmYTg0Y2FmMGYzNGYwZjg5YmZkMmRjZjU0ZmMxNzVkNzY3YWVjM2U1MDY4NGYzYmE0YTRiZjVmNjgzZCIsImNkMWJjN2NiNmNjNDA3YmIyZjBjYTY0N2M3MThhNzMwY2Y3MTg3MmU3ZDBkMmE1M2ZhMjBl''@;'; put 'put ''ZmNkZmU2MTgyNiJdLFsiNjc0ZjI2MDBhMzAwN2EwMDU2OGMxYTdjZTA1ZDA4MTZjMWZiODRiZjEzNzA3OThmMWM2OTUzMmZhZWIxYTg2YiIsIjI5OWQyMWY5NDEzZjMzYjNlZGY0M2IyNTcwMDQ1ODBiNzBkYjU3ZGEwYjE4MjI1OWUwOWVlY2M2OWUwZDM4YTUiXSxbImQzMmY0ZGE1NGFkZTc0''@;'; put 'put ''YWJiODFiODE1YWQxZmIzYjI2M2Q4MmQ2YzY5MjcxNGJjZmY4N2QyOWJkNWVlOWYwOGYiLCJmOTQyOWU3MzhiOGU1M2I5NjhlOTkwMTZjMDU5NzA3NzgyZTE0ZjQ1MzUzNTlkNTgyZmM0MTY5MTBiM2VlYTg3Il0sWyIzMGU0ZTY3MDQzNTM4NTU1NmU1OTM2NTcxMzU4NDVkMzZmYmI2OTMxZjcy''@;'; put 'put ''YjA4Y2IxZWQ5NTRmMWUzY2UzZmY2IiwiNDYyZjliY2U2MTk4OTg2Mzg0OTkzNTAxMTNiYmM5YjEwYTg3OGQzNWRhNzA3NDBkYzY5NWE1NTllYjg4ZGI3YiJdLFsiYmUyMDYyMDAzYzUxY2MzMDA0NjgyOTA0MzMwZTRkZWU3ZjNkY2QxMGIwMWU1ODBiZjE5NzFiMDRkNGNhZDI5NyIsIjYyMTg4''@;'; put 'put ''YmM0OWQ2MWU1NDI4NTczZDQ4YTc0ZTFjNjU1YjFjNjEwOTA5MDU2ODJhMGQ1NTU4ZWQ3MmRjY2I5YmMiXSxbIjkzMTQ0NDIzYWNlMzQ1MWVkMjllMGZiOWFjMmFmMjExY2I2ZTg0YTYwMWRmNTk5M2M0MTk4NTlmZmY1ZGYwNGEiLCI3YzEwZGZiMTY0YzM0MjVmNWM3MWEzZjlkNzk5MjAzOGYx''@;'; put 'put ''MDY1MjI0ZjcyYmI5ZDFkOTAyYTZkMTMwMzdiNDdjIl0sWyJiMDE1ZjgwNDRmNWZjYmRjZjIxY2EyNmQ2YzM0ZmI4MTk3ODI5MjA1YzdiN2QyYTdjYjY2NDE4YzE1N2IxMTJjIiwiYWI4YzFlMDg2ZDA0ZTgxMzc0NGE2NTViMmRmOGQ1ZjgzYjNjZGM2ZmFhMzA4OGMxZDNhZWExNDU0ZTNhMWQ1''@;'; put 'put ''ZiJdLFsiZDVlOWUxZGE2NDlkOTdkODllNDg2ODExN2E0NjVhM2E0ZjhhMThkZTU3YTE0MGQzNmIzZjJhZjM0MWEyMWI1MiIsIjRjYjA0NDM3ZjM5MWVkNzMxMTFhMTNjYzFkNGRkMGRiMTY5MzQ2NWMyMjQwNDgwZDg5NTVlODU5MmYyNzQ0N2EiXSxbImQzYWU0MTA0N2RkN2NhMDY1ZGJmOGVk''@;'; put 'put ''NzdiOTkyNDM5OTgzMDA1Y2Q3MmUxNmQ2Zjk5NmE1MzE2ZDM2OTY2YmIiLCJiZDFhZWIyMWFkMjJlYmIyMmExMGYwMzAzNDE3YzZkOTY0ZjhjZGQ3ZGYwYWNhNjE0YjEwZGMxNGQxMjVhYzQ2Il0sWyI0NjNlMjc2M2Q4ODVmOTU4ZmM2NmNkZDIyODAwZjBhNDg3MTk3ZDBhODJlMzc3YjQ5Zjgw''@;'; put 'put ''YWY4N2M4OTdiMDY1IiwiYmZlZmFjZGIwZTVkMGZkN2RmM2EzMTFhOTRkZTA2MmIyNmI4MGM2MWZiYzk3NTA4Yjc5OTkyNjcxZWY3Y2E3ZiJdLFsiNzk4NWZkZmQxMjdjMDU2N2M2ZjUzZWMxYmI2M2VjMzE1OGU1OTdjNDBiZmU3NDdjODNjZGRmYzkxMDY0MTkxNyIsIjYwM2MxMmRhZjNkOTg2''@;'; put 'put ''MmVmMmIyNWZlMWRlMjg5YWVkMjRlZDI5MWUwZWM2NzA4NzAzYTViZDU2N2YzMmVkMDMiXSxbIjc0YTFhZDZiNWY3NmUzOWRiMmRkMjQ5NDEwZWFjN2Y5OWU3NGM1OWNiODNkMmQwZWQ1ZmYxNTQzZGE3NzAzZTkiLCJjYzYxNTdlZjE4YzljNjNjZDYxOTNkODM2MzFiYmVhMDA5M2UwOTY4OTQy''@;'; put 'put ''ZThjMzNkNTczN2ZkNzkwZTBkYjA4Il0sWyIzMDY4MmE1MDcwMzM3NWY2MDJkNDE2NjY0YmExOWI3ZmM5YmFiNDJjNzI3NDc0NjNhNzFkMDg5NmIyMmY2ZGEzIiwiNTUzZTA0ZjZiMDE4YjRmYTZjOGYzOWU3ZjMxMWQzMTc2MjkwZDBlMGYxOWNhNzNmMTc3MTRkOTk3N2EyMmZmOCJdLFsiOWUy''@;'; put 'put ''MTU4ZjBkN2MwZDVmMjZjMzc5MWVmZWZhNzk1OTc2NTRlN2EyYjI0NjRmNTJiMWVlNmMxMzQ3NzY5ZWY1NyIsIjcxMmZjZGQxYjkwNTNmMDkwMDNhMzQ4MWZhNzc2MmU5ZmZkN2M4ZWYzNWEzODUwOWUyZmJmMjYyOTAwODM3MyJdLFsiMTc2ZTI2OTg5YTQzYzljZmViYTQwMjljMjAyNTM4YzI4''@;'; put 'put ''MTcyZTU2NmUzYzRmY2U3MzIyODU3ZjNiZTMyN2Q2NiIsImVkOGNjOWQwNGIyOWViODc3ZDI3MGI0ODc4ZGM0M2MxOWFlZmQzMWY0ZWVlMDllZTdiNDc4MzRjMWZhNGIxYzMiXSxbIjc1ZDQ2ZWZlYTM3NzFlNmU2OGFiYjg5YTEzYWQ3NDdlY2YxODkyMzkzZGZjNGYxYjcwMDQ3ODhjNTAzNzRk''@;'; put 'put ''YTgiLCI5ODUyMzkwYTk5NTA3Njc5ZmQwYjg2ZmQyYjM5YTg2OGQ3ZWZjMjIxNTEzNDZlMWEzY2E0NzI2NTg2YTZiZWQ4Il0sWyI4MDlhMjBjNjdkNjQ5MDBmZmI2OThjNGM4MjVmNmQ1ZjIzMTBmYjA0NTFjODY5MzQ1YjczMTlmNjQ1NjA1NzIxIiwiOWU5OTQ5ODBkOTkxN2UyMmI3NmIwNjE5''@;'; put 'put ''MjdmYTA0MTQzZDA5NmNjYzU0OTYzZTZhNWViZmE1ZjNmOGUyODZjMSJdLFsiMWIzODkwM2E0M2Y3ZjExNGVkNDUwMGI0ZWFjNzA4M2ZkZWZlY2UxY2YyOWM2MzUyOGQ1NjM0NDZmOTcyYzE4MCIsIjQwMzZlZGM5MzFhNjBhZTg4OTM1M2Y3N2ZkNTNkZTRhMjcwOGIyNmI2ZjVkYTcyYWQzMzk0''@;'; put 'put ''MTE5ZGFmNDA4ZjkiXV19fX0sOTUzOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPVgsXz1iKDM3ODUpLHA9Yig5NzQ2KSxWPWIoNDUwNCk7SS5hc3NlcnQ9cCxJLnRvQXJyYXk9Vi50b0FycmF5LEkuemVybzI9Vi56ZXJvMixJLnRvSGV4PVYudG9IZXgsSS5lbmNvZGU9Vi5lbmNvZGUs''@;'; put 'put ''SS5nZXROQUY9ZnVuY3Rpb24gdyhOLE8sSyl7dmFyIFksWj1uZXcgQXJyYXkoTWF0aC5tYXgoTi5iaXRMZW5ndGgoKSxLKSsxKTtmb3IoWT0wO1k8Wi5sZW5ndGg7WSs9MSlaW1ldPTA7dmFyIFc9MTw8TysxLHE9Ti5jbG9uZSgpO2ZvcihZPTA7WTxaLmxlbmd0aDtZKyspe3ZhciBlZSxKPXEu''@;'; put 'put ''YW5kbG4oVy0xKTtxLmlzT2RkKCk/cS5pc3VibihlZT1KPihXPj4xKS0xPyhXPj4xKS1KOkopOmVlPTAsWltZXT1lZSxxLml1c2hybigxKX1yZXR1cm4gWn0sSS5nZXRKU0Y9ZnVuY3Rpb24gUChOLE8pe3ZhciBLPVtbXSxbXV07Tj1OLmNsb25lKCksTz1PLmNsb25lKCk7Zm9yKHZhciBXLFo9''@;'; put 'put ''MCxZPTA7Ti5jbXBuKC1aKT4wfHxPLmNtcG4oLVkpPjA7KXt2YXIgSixyZSxxPU4uYW5kbG4oMykrWiYzLGVlPU8uYW5kbG4oMykrWSYzOzM9PT1xJiYocT0tMSksMz09PWVlJiYoZWU9LTEpLEo9MSZxPzMhPShXPU4uYW5kbG4oNykrWiY3KSYmNSE9PVd8fDIhPT1lZT9xOi1xOjAsS1swXS5w''@;'; put 'put ''dXNoKEopLHJlPTEmZWU/MyE9KFc9Ty5hbmRsbig3KStZJjcpJiY1IT09V3x8MiE9PXE/ZWU6LWVlOjAsS1sxXS5wdXNoKHJlKSwyKlo9PT1KKzEmJihaPTEtWiksMipZPT09cmUrMSYmKFk9MS1ZKSxOLml1c2hybigxKSxPLml1c2hybigxKX1yZXR1cm4gS30sSS5jYWNoZWRQcm9wZXJ0eT1m''@;'; put 'put ''dW5jdGlvbiBGKE4sTyxLKXt2YXIgWj0iXyIrTztOLnByb3RvdHlwZVtPXT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzW1pdP3RoaXNbWl06dGhpc1taXT1LLmNhbGwodGhpcyl9fSxJLnBhcnNlQnl0ZXM9ZnVuY3Rpb24gUihOKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIE4/SS50''@;'; put 'put ''b0FycmF5KE4sImhleCIpOk59LEkuaW50RnJvbUxFPWZ1bmN0aW9uIHooTil7cmV0dXJuIG5ldyBfKE4sImhleCIsImxlIil9fSwzNzg1OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEksXyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHAoQixnKXtpZighQil0aHJvdyBuZXcgRXJyb3IoZ3x8''@;'; put 'put ''IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBWKEIsZyl7Qi5zdXBlcl89Zzt2YXIgeT1mdW5jdGlvbigpe307eS5wcm90b3R5cGU9Zy5wcm90b3R5cGUsQi5wcm90b3R5cGU9bmV3IHksQi5wcm90b3R5cGUuY29uc3RydWN0b3I9Qn1mdW5jdGlvbiB3KEIsZyx5KXtpZih3LmlzQk4oQikp''@;'; put 'put ''cmV0dXJuIEI7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PUImJigoImxlIj09PWd8fCJiZSI9PT1nKSYmKHk9ZyxnPTEwKSx0aGlzLl9pbml0KEJ8fDAsZ3x8MTAseXx8ImJlIikpfXZhciBQOyJvYmplY3QiPT10eXBl''@;'; put 'put ''b2YgST9JLmV4cG9ydHM9dzpfLkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e1A9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOmIoNTU2OCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKEIsZyl7dmFyIHk9Qi5jaGFyQ29kZUF0''@;'; put 'put ''KGcpO3JldHVybiB5Pj02NSYmeTw9NzA/eS01NTp5Pj05NyYmeTw9MTAyP3ktODc6eS00OCYxNX1mdW5jdGlvbiBSKEIsZyx5KXt2YXIgeD1GKEIseSk7cmV0dXJuIHktMT49ZyYmKHh8PUYoQix5LTEpPDw0KSx4fWZ1bmN0aW9uIHooQixnLHkseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbihC''@;'; put 'put ''Lmxlbmd0aCx5KSxIPWc7SDxUO0grKyl7dmFyIGo9Qi5jaGFyQ29kZUF0KEgpLTQ4O0MqPXgsQys9aj49NDk/ai00OSsxMDpqPj0xNz9qLTE3KzEwOmp9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKGcpe3JldHVybiBnIGluc3RhbmNlb2Ygd3x8bnVsbCE9PWcmJiJvYmplY3QiPT10eXBlb2Yg''@;'; put 'put ''ZyYmZy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkoZy53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKGcseSl7cmV0dXJuIGcuY21wKHkpPjA/Zzp5fSx3Lm1pbj1mdW5jdGlvbihnLHkpe3JldHVybiBnLmNtcCh5KTwwP2c6eX0sdy5wcm90b3R5cGUuX2lu''@;'; put 'put ''aXQ9ZnVuY3Rpb24oZyx5LHgpe2lmKCJudW1iZXIiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihnLHkseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0QXJyYXkoZyx5LHgpOyJoZXgiPT09eSYmKHk9MTYpLHAoeT09PSgwfHkpJiZ5Pj0yJiZ5PD0z''@;'; put 'put ''Nik7dmFyIEM9MDsiLSI9PT0oZz1nLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8Zy5sZW5ndGgmJigxNj09PXk/dGhpcy5fcGFyc2VIZXgoZyxDLHgpOih0aGlzLl9wYXJzZUJhc2UoZyx5LEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0''@;'; put 'put ''QXJyYXkodGhpcy50b0FycmF5KCkseSx4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihnLHkseCl7ZzwwJiYodGhpcy5uZWdhdGl2ZT0xLGc9LWcpLGc8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmddLHRoaXMubGVuZ3RoPTEpOmc8NDUwMzU5OTYyNzM3MDQ5''@;'; put 'put ''Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToocChnPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5p''@;'; put 'put ''dEFycmF5KHRoaXMudG9BcnJheSgpLHkseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oZyx5LHgpe2lmKHAoIm51bWJlciI9PXR5cGVvZiBnLmxlbmd0aCksZy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1N''@;'; put 'put ''YXRoLmNlaWwoZy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxILGo9MDtpZigiYmUiPT09eClmb3IoQz1nLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jk''@;'; put 'put ''c1tUXXw9KEg9Z1tDXXxnW0MtMV08PDh8Z1tDLTJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8Zy5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1Rd''@;'; put 'put ''fD0oSD1nW0NdfGdbQysxXTw8OHxnW0MrMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihnLHkseCl7dGhp''@;'; put 'put ''cy5sZW5ndGg9TWF0aC5jZWlsKChnLmxlbmd0aC15KS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9Zy5sZW5ndGgtMTtDPj15O0Mt''@;'; put 'put ''PTIpaj1SKGcseSxDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0oZy5sZW5ndGgteSklMj09MD95KzE6eTtDPGcubGVuZ3RoO0MrPTIpaj1SKGcseSxDKTw8VCx0aGlzLndvcmRzW0hd''@;'; put 'put ''fD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGcseSx4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2''@;'; put 'put ''MztUKj15KUMrKztDLS0sVD1UL3l8MDtmb3IodmFyIEg9Zy5sZW5ndGgteCxqPUglQyxFPU1hdGgubWluKEgsSC1qKSt4LG09MCxBPXg7QTxFO0ErPUMpbT16KGcsQSxBK0MseSksdGhpcy5pbXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9p''@;'; put 'put ''YWRkbihtKTtpZigwIT09ail7dmFyIGFlPTE7Zm9yKG09eihnLEEsZy5sZW5ndGgseSksQT0wO0E8ajtBKyspYWUqPXk7dGhpcy5pbXVsbihhZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5jb3B5PWZ1bmN0aW9uKGcpe2cud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoO3krKylnLndvcmRzW3ldPXRoaXMud29yZHNbeV07Zy5sZW5ndGg9dGhpcy5sZW5ndGgsZy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGcucmVkPXRoaXMucmVk''@;'; put 'put ''fSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBnPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkoZyksZ30sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGc7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30s''@;'; put 'put ''dy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRo''@;'; put 'put ''aXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIsIjAw''@;'; put 'put ''MCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxPPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0Njcy''@;'; put 'put ''MSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2''@;'; put 'put ''MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gWShCLGcseSl7eS5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkIubmVnYXRp''@;'; put 'put ''dmU7dmFyIHg9Qi5sZW5ndGgrZy5sZW5ndGh8MDt5Lmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHxCLndvcmRzWzBdLFQ9MHxnLndvcmRzWzBdLEg9QypULEU9SC82NzEwODg2NHwwO3kud29yZHNbMF09NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LGFl''@;'; put 'put ''PTY3MTA4ODYzJkUsbmU9TWF0aC5taW4obSxnLmxlbmd0aC0xKSxzZT1NYXRoLm1heCgwLG0tQi5sZW5ndGgrMSk7c2U8PW5lO3NlKyspQSs9KEg9KEM9MHxCLndvcmRzW20tc2V8MF0pKihUPTB8Zy53b3Jkc1tzZV0pK2FlKS82NzEwODg2NHwwLGFlPTY3MTA4ODYzJkg7eS53b3Jkc1ttXT0w''@;'; put 'put ''fGFlLEU9MHxBfXJldHVybiAwIT09RT95LndvcmRzW21dPTB8RTp5Lmxlbmd0aC0tLHkuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihnLHkpe3ZhciB4O2lmKHk9MHx5fHwxLDE2PT09KGc9Z3x8MTApfHwiaGV4Ij09PWcpe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9MDtI''@;'; put 'put ''PHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9dGhpcy53b3Jkc1tIXSxFPSgxNjc3NzIxNSYoajw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9aj4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LEgtLSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6RSt4''@;'; put 'put ''fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGgleSE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKGc9PT0oMHxnKSYmZz49MiYmZzw9MzYpe3ZhciBtPU9bZ10sQT1LW2ddO3g9IiI7dmFyIGFlPXRoaXMuY2xvbmUoKTtm''@;'; put 'put ''b3IoYWUubmVnYXRpdmU9MDshYWUuaXNaZXJvKCk7KXt2YXIgbmU9YWUubW9kbihBKS50b1N0cmluZyhnKTt4PShhZT1hZS5pZGl2bihBKSkuaXNaZXJvKCk/bmUreDpOW20tbmUubGVuZ3RoXStuZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGgleSE9MDspeD0iMCIr''@;'; put 'put ''eDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fXAoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgZz10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Zys9NjcxMDg4''@;'; put 'put ''NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2crPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZwKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09''@;'; put 'put ''dGhpcy5uZWdhdGl2ZT8tZzpnfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHAodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAsZyx5KX0sdy5wcm90''@;'; put 'put ''b3R5cGUudG9BcnJheT1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGcseSl9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGcseSx4KXt2YXIgQz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7cChDPD1ULCJieXRlIGFycmF5''@;'; put 'put ''IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIikscChUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxtLEg9ImxlIj09PXksaj1uZXcgZyhUKSxBPXRoaXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4o''@;'; put 'put ''MjU1KSxBLml1c2hybig4KSxqW21dPUU7Zm9yKDttPFQ7bSsrKWpbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKWpbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291bnRC''@;'; put 'put ''aXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oZyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoZyl9OmZ1bmN0aW9uKGcpe3ZhciB5PWcseD0wO3JldHVybiB5Pj00MDk2JiYoeCs9MTMseT4+Pj0xMykseT49NjQmJih4Kz03LHk+Pj49NykseT49OCYmKHgrPTQseT4+Pj00KSx5Pj0yJiYoeCs9Mix5Pj4+''@;'; put 'put ''PTIpLHgreX0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGcpe2lmKDA9PT1nKXJldHVybiAyNjt2YXIgeT1nLHg9MDtyZXR1cm4hKDgxOTEmeSkmJih4Kz0xMyx5Pj4+PTEzKSwhKDEyNyZ5KSYmKHgrPTcseT4+Pj03KSwhKDE1JnkpJiYoeCs9NCx5Pj4+PTQpLCEoMyZ5KSYmKHgr''@;'; put 'put ''PTIseT4+Pj0yKSwhKDEmeSkmJngrKyx4fSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKSt5fSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlv''@;'; put 'put ''bigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBnPTAseT0wO3k8dGhpcy5sZW5ndGg7eSsrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW3ldKTtpZihnKz14LDI2IT09eClicmVha31yZXR1cm4gZ30sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGcpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rp''@;'; put 'put ''b24oZyl7cmV0dXJuIHRoaXMudGVzdG4oZy0xKT90aGlzLm5vdG4oZykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''LmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8Zy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5s''@;'; put 'put ''ZW5ndGgrK109MDtmb3IodmFyIHk9MDt5PGcubGVuZ3RoO3krKyl0aGlzLndvcmRzW3ldPXRoaXMud29yZHNbeV18Zy53b3Jkc1t5XTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0''@;'; put 'put ''aGlzLml1b3IoZyl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGcpOmcuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/''@;'; put 'put ''dGhpcy5jbG9uZSgpLml1b3IoZyk6Zy5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGcpe3ZhciB5O3k9dGhpcy5sZW5ndGg+Zy5sZW5ndGg/Zzp0aGlzO2Zvcih2YXIgeD0wO3g8eS5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZn''@;'; put 'put ''LndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0aD15Lmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1YW5kKGcpfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oZyl7cmV0''@;'; put 'put ''dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGcpOmcuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoZyk6Zy5jbG9uZSgpLml1YW5kKHRo''@;'; put 'put ''aXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihnKXt2YXIgeSx4O3RoaXMubGVuZ3RoPmcubGVuZ3RoPyh5PXRoaXMseD1nKTooeT1nLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT15LndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9PXkp''@;'; put 'put ''Zm9yKDtDPHkubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXkud29yZHNbQ107cmV0dXJuIHRoaXMubGVuZ3RoPXkubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3Io''@;'; put 'put ''Zyl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZyk6Zy5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMu''@;'; put 'put ''Y2xvbmUoKS5pdXhvcihnKTpnLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT0wfE1hdGguY2VpbChnLzI2KSx4PWclMjY7dGhpcy5fZXhwYW5kKHkpLHg+MCYmeS0tO2Zvcih2YXIgQz0w''@;'; put 'put ''O0M8eTtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tDXTtyZXR1cm4geD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25l''@;'; put 'put ''KCkuaW5vdG4oZyl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZyx5KXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHg9Zy8yNnwwLEM9ZyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT15P3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRzW3hd''@;'; put 'put ''Jn4oMTw8QyksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcpe3ZhciB5LHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx5PXRoaXMuaXN1YihnKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1T''@;'; put 'put ''aWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiBnLm5lZ2F0aXZlPTAseT10aGlzLmlzdWIoZyksZy5uZWdhdGl2ZT0xLHkuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KHg9dGhpcyxDPWcpOih4PWcsQz10aGlzKTtmb3IodmFyIFQ9MCxI''@;'; put 'put ''PTA7SDxDLmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoeT0oMHx4LndvcmRzW0hdKSsoMHxDLndvcmRzW0hdKStUKSxUPXk+Pj4yNjtmb3IoOzAhPT1UJiZIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJih5PSgwfHgud29yZHNbSF0pK1QpLFQ9eT4+PjI2''@;'; put 'put ''O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1UKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7SDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT14LndvcmRzW0hdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVu''@;'; put 'put ''Y3Rpb24oZyl7dmFyIHk7cmV0dXJuIDAhPT1nLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZy5uZWdhdGl2ZT0wLHk9dGhpcy5zdWIoZyksZy5uZWdhdGl2ZV49MSx5KTowPT09Zy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCx5PWcuc3ViKHRoaXMp''@;'; put 'put ''LHRoaXMubmVnYXRpdmU9MSx5KTp0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChnKTpnLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnKXtpZigwIT09Zy5uZWdhdGl2ZSl7Zy5uZWdhdGl2ZT0wO3ZhciB5PXRoaXMuaWFkZChnKTty''@;'; put 'put ''ZXR1cm4gZy5uZWdhdGl2ZT0xLHkuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIEMsVCx4PXRoaXMuY21wKGcpO2lmKDA9PT14KXJldHVybiB0aGlz''@;'; put 'put ''Lm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt4PjA/KEM9dGhpcyxUPWcpOihDPWcsVD10aGlzKTtmb3IodmFyIEg9MCxqPTA7ajxULmxlbmd0aDtqKyspSD0oeT0oMHxDLndvcmRzW2pdKS0oMHxULndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02''@;'; put 'put ''NzEwODg2MyZ5O2Zvcig7MCE9PUgmJmo8Qy5sZW5ndGg7aisrKUg9KHk9KDB8Qy53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmeTtpZigwPT09SCYmajxDLmxlbmd0aCYmQyE9PXRoaXMpZm9yKDtqPEMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPUMud29yZHNbal07''@;'; put 'put ''cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGopLEMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoZyl9O3ZhciBXPWZ1bmN0aW9uKGcseSx4KXt2''@;'; put 'put ''YXIgRSxtLEEsQz1nLndvcmRzLFQ9eS53b3JkcyxIPXgud29yZHMsaj0wLGFlPTB8Q1swXSxuZT04MTkxJmFlLHNlPWFlPj4+MTMsQ2U9MHxDWzFdLFVlPTgxOTEmQ2UsSmU9Q2U+Pj4xMyxpdD0wfENbMl0seGU9ODE5MSZpdCx5ZT1pdD4+PjEzLEtlPTB8Q1szXSxqZT04MTkxJktlLGtlPUtl''@;'; put 'put ''Pj4+MTMsSGU9MHxDWzRdLExlPTgxOTEmSGUsUmU9SGU+Pj4xMyxWZT0wfENbNV0sQWU9ODE5MSZWZSxEZT1WZT4+PjEzLF90PTB8Q1s2XSxydD04MTkxJl90LFFlPV90Pj4+MTMsc249MHxDWzddLHZ0PTgxOTEmc24sU3Q9c24+Pj4xMyxlbj0wfENbOF0sdXQ9ODE5MSZlbixYZT1lbj4+PjEz''@;'; put 'put ''LHR0PTB8Q1s5XSxJZT04MTkxJnR0LGF0PXR0Pj4+MTMsdW49MHxUWzBdLEl0PTgxOTEmdW4sUnQ9dW4+Pj4xMyxyaT0wfFRbMV0sYW49ODE5MSZyaSxsbj1yaT4+PjEzLG5pPTB8VFsyXSxobj04MTkxJm5pLGh0PW5pPj4+MTMsUnI9MHxUWzNdLEJ0PTgxOTEmUnIsQXQ9UnI+Pj4xMyxGbj0w''@;'; put 'put ''fFRbNF0sc3Q9ODE5MSZGbixadD1Gbj4+PjEzLFFyPTB8VFs1XSxZZT04MTkxJlFyLFR0PVFyPj4+MTMscnI9MHxUWzZdLGZ0PTgxOTEmcnIsTXQ9cnI+Pj4xMyxabj0wfFRbN10sbm49ODE5MSZabixXdD1abj4+PjEzLGRpPTB8VFs4XSxkbj04MTkxJmRpLG1uPWRpPj4+MTMscGk9MHxUWzld''@;'; put 'put ''LGZuPTgxOTEmcGksdG49cGk+Pj4xMzt4Lm5lZ2F0aXZlPWcubmVnYXRpdmVeeS5uZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2YXIgY2E9KGorKEU9TWF0aC5pbXVsKG5lLEl0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChuZSxSdCkpK01hdGguaW11bChzZSxJdCl8MCkpPDwxMyl8MDtqPSgo''@;'; put 'put ''QT1NYXRoLmltdWwoc2UsUnQpKSsobT4+PjEzKXwwKSsoY2E+Pj4yNil8MCxjYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoVWUsSXQpLG09KG09TWF0aC5pbXVsKFVlLFJ0KSkrTWF0aC5pbXVsKEplLEl0KXwwLEE9TWF0aC5pbXVsKEplLFJ0KTt2YXIgX2k9KGorKEU9RStNYXRoLmltdWwobmUs''@;'; put 'put ''YW4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxsbil8MCkrTWF0aC5pbXVsKHNlLGFuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGxuKXwwKSsobT4+PjEzKXwwKSsoX2k+Pj4yNil8MCxfaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeGUsSXQpLG09KG09TWF0''@;'; put 'put ''aC5pbXVsKHhlLFJ0KSkrTWF0aC5pbXVsKHllLEl0KXwwLEE9TWF0aC5pbXVsKHllLFJ0KSxFPUUrTWF0aC5pbXVsKFVlLGFuKXwwLG09KG09bStNYXRoLmltdWwoVWUsbG4pfDApK01hdGguaW11bChKZSxhbil8MCxBPUErTWF0aC5pbXVsKEplLGxuKXwwO3ZhciB2cj0oaisoRT1FK01hdGgu''@;'; put 'put ''aW11bChuZSxobil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGh0KXwwKStNYXRoLmltdWwoc2UsaG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsaHQpfDApKyhtPj4+MTMpfDApKyh2cj4+PjI2KXwwLHZyJj02NzEwODg2MyxFPU1hdGguaW11bChqZSxJdCks''@;'; put 'put ''bT0obT1NYXRoLmltdWwoamUsUnQpKStNYXRoLmltdWwoa2UsSXQpfDAsQT1NYXRoLmltdWwoa2UsUnQpLEU9RStNYXRoLmltdWwoeGUsYW4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxsbil8MCkrTWF0aC5pbXVsKHllLGFuKXwwLEE9QStNYXRoLmltdWwoeWUsbG4pfDAsRT1FK01hdGguaW11''@;'; put 'put ''bChVZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGh0KXwwKStNYXRoLmltdWwoSmUsaG4pfDAsQT1BK01hdGguaW11bChKZSxodCl8MDt2YXIgWGk9KGorKEU9RStNYXRoLmltdWwobmUsQnQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxBdCl8MCkrTWF0aC5pbXVsKHNl''@;'; put 'put ''LEJ0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLEF0KXwwKSsobT4+PjEzKXwwKSsoWGk+Pj4yNil8MCxYaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTGUsSXQpLG09KG09TWF0aC5pbXVsKExlLFJ0KSkrTWF0aC5pbXVsKFJlLEl0KXwwLEE9TWF0aC5pbXVsKFJlLFJ0KSxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKGplLGFuKXwwLG09KG09bStNYXRoLmltdWwoamUsbG4pfDApK01hdGguaW11bChrZSxhbil8MCxBPUErTWF0aC5pbXVsKGtlLGxuKXwwLEU9RStNYXRoLmltdWwoeGUsaG4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxodCl8MCkrTWF0aC5pbXVsKHllLGhuKXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoeWUsaHQpfDAsRT1FK01hdGguaW11bChVZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUsQnQpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MDt2YXIgUWk9KGorKEU9RStNYXRoLmltdWwobmUsc3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGgu''@;'; put 'put ''aW11bChuZSxadCl8MCkrTWF0aC5pbXVsKHNlLHN0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFp0KXwwKSsobT4+PjEzKXwwKSsoUWk+Pj4yNil8MCxRaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoQWUsSXQpLG09KG09TWF0aC5pbXVsKEFlLFJ0KSkrTWF0aC5pbXVsKERlLEl0''@;'; put 'put ''KXwwLEE9TWF0aC5pbXVsKERlLFJ0KSxFPUUrTWF0aC5pbXVsKExlLGFuKXwwLG09KG09bStNYXRoLmltdWwoTGUsbG4pfDApK01hdGguaW11bChSZSxhbil8MCxBPUErTWF0aC5pbXVsKFJlLGxuKXwwLEU9RStNYXRoLmltdWwoamUsaG4pfDAsbT0obT1tK01hdGguaW11bChqZSxodCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKGtlLGhuKXwwLEE9QStNYXRoLmltdWwoa2UsaHQpfDAsRT1FK01hdGguaW11bCh4ZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLEF0KXwwKStNYXRoLmltdWwoeWUsQnQpfDAsQT1BK01hdGguaW11bCh5ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHN0KXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoVWUsWnQpfDApK01hdGguaW11bChKZSxzdCl8MCxBPUErTWF0aC5pbXVsKEplLFp0KXwwO3ZhciBWaT0oaisoRT1FK01hdGguaW11bChuZSxZZSl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLFR0KXwwKStNYXRoLmltdWwoc2UsWWUpfDApKTw8MTMpfDA7aj0o''@;'; put 'put ''KEE9QStNYXRoLmltdWwoc2UsVHQpfDApKyhtPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2MyxFPU1hdGguaW11bChydCxJdCksbT0obT1NYXRoLmltdWwocnQsUnQpKStNYXRoLmltdWwoUWUsSXQpfDAsQT1NYXRoLmltdWwoUWUsUnQpLEU9RStNYXRoLmltdWwoQWUsYW4pfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bChBZSxsbil8MCkrTWF0aC5pbXVsKERlLGFuKXwwLEE9QStNYXRoLmltdWwoRGUsbG4pfDAsRT1FK01hdGguaW11bChMZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKExlLGh0KXwwKStNYXRoLmltdWwoUmUsaG4pfDAsQT1BK01hdGguaW11bChSZSxodCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKGplLEJ0KXwwLG09KG09bStNYXRoLmltdWwoamUsQXQpfDApK01hdGguaW11bChrZSxCdCl8MCxBPUErTWF0aC5pbXVsKGtlLEF0KXwwLEU9RStNYXRoLmltdWwoeGUsc3QpfDAsbT0obT1tK01hdGguaW11bCh4ZSxadCl8MCkrTWF0aC5pbXVsKHllLHN0KXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoeWUsWnQpfDAsRT1FK01hdGguaW11bChVZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoSmUsWWUpfDAsQT1BK01hdGguaW11bChKZSxUdCl8MDt2YXIgZWk9KGorKEU9RStNYXRoLmltdWwobmUsZnQpfDApfDApKygoODE5MSYobT0obT1tK01hdGgu''@;'; put 'put ''aW11bChuZSxNdCl8MCkrTWF0aC5pbXVsKHNlLGZ0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLE10KXwwKSsobT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwodnQsSXQpLG09KG09TWF0aC5pbXVsKHZ0LFJ0KSkrTWF0aC5pbXVsKFN0LEl0''@;'; put 'put ''KXwwLEE9TWF0aC5pbXVsKFN0LFJ0KSxFPUUrTWF0aC5pbXVsKHJ0LGFuKXwwLG09KG09bStNYXRoLmltdWwocnQsbG4pfDApK01hdGguaW11bChRZSxhbil8MCxBPUErTWF0aC5pbXVsKFFlLGxuKXwwLEU9RStNYXRoLmltdWwoQWUsaG4pfDAsbT0obT1tK01hdGguaW11bChBZSxodCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKERlLGhuKXwwLEE9QStNYXRoLmltdWwoRGUsaHQpfDAsRT1FK01hdGguaW11bChMZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKExlLEF0KXwwKStNYXRoLmltdWwoUmUsQnQpfDAsQT1BK01hdGguaW11bChSZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGplLHN0KXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoamUsWnQpfDApK01hdGguaW11bChrZSxzdCl8MCxBPUErTWF0aC5pbXVsKGtlLFp0KXwwLEU9RStNYXRoLmltdWwoeGUsWWUpfDAsbT0obT1tK01hdGguaW11bCh4ZSxUdCl8MCkrTWF0aC5pbXVsKHllLFllKXwwLEE9QStNYXRoLmltdWwoeWUsVHQpfDAsRT1FK01hdGguaW11''@;'; put 'put ''bChVZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLE10KXwwKStNYXRoLmltdWwoSmUsZnQpfDAsQT1BK01hdGguaW11bChKZSxNdCl8MDt2YXIgdWE9KGorKEU9RStNYXRoLmltdWwobmUsbm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxXdCl8MCkrTWF0aC5pbXVsKHNl''@;'; put 'put ''LG5uKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFd0KXwwKSsobT4+PjEzKXwwKSsodWE+Pj4yNil8MCx1YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwodXQsSXQpLG09KG09TWF0aC5pbXVsKHV0LFJ0KSkrTWF0aC5pbXVsKFhlLEl0KXwwLEE9TWF0aC5pbXVsKFhlLFJ0KSxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKHZ0LGFuKXwwLG09KG09bStNYXRoLmltdWwodnQsbG4pfDApK01hdGguaW11bChTdCxhbil8MCxBPUErTWF0aC5pbXVsKFN0LGxuKXwwLEU9RStNYXRoLmltdWwocnQsaG4pfDAsbT0obT1tK01hdGguaW11bChydCxodCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoUWUsaHQpfDAsRT1FK01hdGguaW11bChBZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKEFlLEF0KXwwKStNYXRoLmltdWwoRGUsQnQpfDAsQT1BK01hdGguaW11bChEZSxBdCl8MCxFPUUrTWF0aC5pbXVsKExlLHN0KXwwLG09KG09bStNYXRoLmltdWwoTGUsWnQpfDApK01hdGguaW11''@;'; put 'put ''bChSZSxzdCl8MCxBPUErTWF0aC5pbXVsKFJlLFp0KXwwLEU9RStNYXRoLmltdWwoamUsWWUpfDAsbT0obT1tK01hdGguaW11bChqZSxUdCl8MCkrTWF0aC5pbXVsKGtlLFllKXwwLEE9QStNYXRoLmltdWwoa2UsVHQpfDAsRT1FK01hdGguaW11bCh4ZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KHhlLE10KXwwKStNYXRoLmltdWwoeWUsZnQpfDAsQT1BK01hdGguaW11bCh5ZSxNdCl8MCxFPUUrTWF0aC5pbXVsKFVlLG5uKXwwLG09KG09bStNYXRoLmltdWwoVWUsV3QpfDApK01hdGguaW11bChKZSxubil8MCxBPUErTWF0aC5pbXVsKEplLFd0KXwwO3ZhciBSaT0oaisoRT1FK01hdGgu''@;'; put 'put ''aW11bChuZSxkbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLG1uKXwwKStNYXRoLmltdWwoc2UsZG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsbW4pfDApKyhtPj4+MTMpfDApKyhSaT4+PjI2KXwwLFJpJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxJdCks''@;'; put 'put ''bT0obT1NYXRoLmltdWwoSWUsUnQpKStNYXRoLmltdWwoYXQsSXQpfDAsQT1NYXRoLmltdWwoYXQsUnQpLEU9RStNYXRoLmltdWwodXQsYW4pfDAsbT0obT1tK01hdGguaW11bCh1dCxsbil8MCkrTWF0aC5pbXVsKFhlLGFuKXwwLEE9QStNYXRoLmltdWwoWGUsbG4pfDAsRT1FK01hdGguaW11''@;'; put 'put ''bCh2dCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LGh0KXwwKStNYXRoLmltdWwoU3QsaG4pfDAsQT1BK01hdGguaW11bChTdCxodCl8MCxFPUUrTWF0aC5pbXVsKHJ0LEJ0KXwwLG09KG09bStNYXRoLmltdWwocnQsQXQpfDApK01hdGguaW11bChRZSxCdCl8MCxBPUErTWF0aC5pbXVsKFFl''@;'; put 'put ''LEF0KXwwLEU9RStNYXRoLmltdWwoQWUsc3QpfDAsbT0obT1tK01hdGguaW11bChBZSxadCl8MCkrTWF0aC5pbXVsKERlLHN0KXwwLEE9QStNYXRoLmltdWwoRGUsWnQpfDAsRT1FK01hdGguaW11bChMZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKExlLFR0KXwwKStNYXRoLmltdWwoUmUsWWUp''@;'; put 'put ''fDAsQT1BK01hdGguaW11bChSZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGplLGZ0KXwwLG09KG09bStNYXRoLmltdWwoamUsTXQpfDApK01hdGguaW11bChrZSxmdCl8MCxBPUErTWF0aC5pbXVsKGtlLE10KXwwLEU9RStNYXRoLmltdWwoeGUsbm4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxXdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKHllLG5uKXwwLEE9QStNYXRoLmltdWwoeWUsV3QpfDAsRT1FK01hdGguaW11bChVZSxkbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLG1uKXwwKStNYXRoLmltdWwoSmUsZG4pfDAsQT1BK01hdGguaW11bChKZSxtbil8MDt2YXIgRGE9KGorKEU9RStNYXRoLmltdWwobmUs''@;'; put 'put ''Zm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSx0bil8MCkrTWF0aC5pbXVsKHNlLGZuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHRuKXwwKSsobT4+PjEzKXwwKSsoRGE+Pj4yNil8MCxEYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsYW4pLG09KG09TWF0''@;'; put 'put ''aC5pbXVsKEllLGxuKSkrTWF0aC5pbXVsKGF0LGFuKXwwLEE9TWF0aC5pbXVsKGF0LGxuKSxFPUUrTWF0aC5pbXVsKHV0LGhuKXwwLG09KG09bStNYXRoLmltdWwodXQsaHQpfDApK01hdGguaW11bChYZSxobil8MCxBPUErTWF0aC5pbXVsKFhlLGh0KXwwLEU9RStNYXRoLmltdWwodnQsQnQp''@;'; put 'put ''fDAsbT0obT1tK01hdGguaW11bCh2dCxBdCl8MCkrTWF0aC5pbXVsKFN0LEJ0KXwwLEE9QStNYXRoLmltdWwoU3QsQXQpfDAsRT1FK01hdGguaW11bChydCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LFp0KXwwKStNYXRoLmltdWwoUWUsc3QpfDAsQT1BK01hdGguaW11bChRZSxadCl8MCxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKEFlLFllKXwwLG09KG09bStNYXRoLmltdWwoQWUsVHQpfDApK01hdGguaW11bChEZSxZZSl8MCxBPUErTWF0aC5pbXVsKERlLFR0KXwwLEU9RStNYXRoLmltdWwoTGUsZnQpfDAsbT0obT1tK01hdGguaW11bChMZSxNdCl8MCkrTWF0aC5pbXVsKFJlLGZ0KXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoUmUsTXQpfDAsRT1FK01hdGguaW11bChqZSxubil8MCxtPShtPW0rTWF0aC5pbXVsKGplLFd0KXwwKStNYXRoLmltdWwoa2Usbm4pfDAsQT1BK01hdGguaW11bChrZSxXdCl8MCxFPUUrTWF0aC5pbXVsKHhlLGRuKXwwLG09KG09bStNYXRoLmltdWwoeGUsbW4pfDApK01hdGgu''@;'; put 'put ''aW11bCh5ZSxkbil8MCxBPUErTWF0aC5pbXVsKHllLG1uKXwwO3ZhciBoaT0oaisoRT1FK01hdGguaW11bChVZSxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLHRuKXwwKStNYXRoLmltdWwoSmUsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSmUsdG4pfDAp''@;'; put 'put ''KyhtPj4+MTMpfDApKyhoaT4+PjI2KXwwLGhpJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxobiksbT0obT1NYXRoLmltdWwoSWUsaHQpKStNYXRoLmltdWwoYXQsaG4pfDAsQT1NYXRoLmltdWwoYXQsaHQpLEU9RStNYXRoLmltdWwodXQsQnQpfDAsbT0obT1tK01hdGguaW11bCh1dCxBdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKFhlLEJ0KXwwLEE9QStNYXRoLmltdWwoWGUsQXQpfDAsRT1FK01hdGguaW11bCh2dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LFp0KXwwKStNYXRoLmltdWwoU3Qsc3QpfDAsQT1BK01hdGguaW11bChTdCxadCl8MCxFPUUrTWF0aC5pbXVsKHJ0LFllKXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwocnQsVHQpfDApK01hdGguaW11bChRZSxZZSl8MCxBPUErTWF0aC5pbXVsKFFlLFR0KXwwLEU9RStNYXRoLmltdWwoQWUsZnQpfDAsbT0obT1tK01hdGguaW11bChBZSxNdCl8MCkrTWF0aC5pbXVsKERlLGZ0KXwwLEE9QStNYXRoLmltdWwoRGUsTXQpfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bChMZSxubil8MCxtPShtPW0rTWF0aC5pbXVsKExlLFd0KXwwKStNYXRoLmltdWwoUmUsbm4pfDAsQT1BK01hdGguaW11bChSZSxXdCl8MCxFPUUrTWF0aC5pbXVsKGplLGRuKXwwLG09KG09bStNYXRoLmltdWwoamUsbW4pfDApK01hdGguaW11bChrZSxkbil8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KGtlLG1uKXwwO3ZhciBxaT0oaisoRT1FK01hdGguaW11bCh4ZSxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHhlLHRuKXwwKStNYXRoLmltdWwoeWUsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoeWUsdG4pfDApKyhtPj4+MTMpfDApKyhxaT4+PjI2KXwwLHFp''@;'; put 'put ''Jj02NzEwODg2MyxFPU1hdGguaW11bChJZSxCdCksbT0obT1NYXRoLmltdWwoSWUsQXQpKStNYXRoLmltdWwoYXQsQnQpfDAsQT1NYXRoLmltdWwoYXQsQXQpLEU9RStNYXRoLmltdWwodXQsc3QpfDAsbT0obT1tK01hdGguaW11bCh1dCxadCl8MCkrTWF0aC5pbXVsKFhlLHN0KXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoWGUsWnQpfDAsRT1FK01hdGguaW11bCh2dCxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LFR0KXwwKStNYXRoLmltdWwoU3QsWWUpfDAsQT1BK01hdGguaW11bChTdCxUdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LGZ0KXwwLG09KG09bStNYXRoLmltdWwocnQsTXQpfDApK01hdGgu''@;'; put 'put ''aW11bChRZSxmdCl8MCxBPUErTWF0aC5pbXVsKFFlLE10KXwwLEU9RStNYXRoLmltdWwoQWUsbm4pfDAsbT0obT1tK01hdGguaW11bChBZSxXdCl8MCkrTWF0aC5pbXVsKERlLG5uKXwwLEE9QStNYXRoLmltdWwoRGUsV3QpfDAsRT1FK01hdGguaW11bChMZSxkbil8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKExlLG1uKXwwKStNYXRoLmltdWwoUmUsZG4pfDAsQT1BK01hdGguaW11bChSZSxtbil8MDt2YXIgUGE9KGorKEU9RStNYXRoLmltdWwoamUsZm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChqZSx0bil8MCkrTWF0aC5pbXVsKGtlLGZuKXwwKSk8PDEzKXwwO2o9KChBPUEr''@;'; put 'put ''TWF0aC5pbXVsKGtlLHRuKXwwKSsobT4+PjEzKXwwKSsoUGE+Pj4yNil8MCxQYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsc3QpLG09KG09TWF0aC5pbXVsKEllLFp0KSkrTWF0aC5pbXVsKGF0LHN0KXwwLEE9TWF0aC5pbXVsKGF0LFp0KSxFPUUrTWF0aC5pbXVsKHV0LFllKXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwodXQsVHQpfDApK01hdGguaW11bChYZSxZZSl8MCxBPUErTWF0aC5pbXVsKFhlLFR0KXwwLEU9RStNYXRoLmltdWwodnQsZnQpfDAsbT0obT1tK01hdGguaW11bCh2dCxNdCl8MCkrTWF0aC5pbXVsKFN0LGZ0KXwwLEE9QStNYXRoLmltdWwoU3QsTXQpfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bChydCxubil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LFd0KXwwKStNYXRoLmltdWwoUWUsbm4pfDAsQT1BK01hdGguaW11bChRZSxXdCl8MCxFPUUrTWF0aC5pbXVsKEFlLGRuKXwwLG09KG09bStNYXRoLmltdWwoQWUsbW4pfDApK01hdGguaW11bChEZSxkbil8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KERlLG1uKXwwO3ZhciB1cj0oaisoRT1FK01hdGguaW11bChMZSxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKExlLHRuKXwwKStNYXRoLmltdWwoUmUsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoUmUsdG4pfDApKyhtPj4+MTMpfDApKyh1cj4+PjI2KXwwLHVy''@;'; put 'put ''Jj02NzEwODg2MyxFPU1hdGguaW11bChJZSxZZSksbT0obT1NYXRoLmltdWwoSWUsVHQpKStNYXRoLmltdWwoYXQsWWUpfDAsQT1NYXRoLmltdWwoYXQsVHQpLEU9RStNYXRoLmltdWwodXQsZnQpfDAsbT0obT1tK01hdGguaW11bCh1dCxNdCl8MCkrTWF0aC5pbXVsKFhlLGZ0KXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoWGUsTXQpfDAsRT1FK01hdGguaW11bCh2dCxubil8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LFd0KXwwKStNYXRoLmltdWwoU3Qsbm4pfDAsQT1BK01hdGguaW11bChTdCxXdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LGRuKXwwLG09KG09bStNYXRoLmltdWwocnQsbW4pfDApK01hdGgu''@;'; put 'put ''aW11bChRZSxkbil8MCxBPUErTWF0aC5pbXVsKFFlLG1uKXwwO3ZhciBiYT0oaisoRT1FK01hdGguaW11bChBZSxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKEFlLHRuKXwwKStNYXRoLmltdWwoRGUsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoRGUsdG4pfDAp''@;'; put 'put ''KyhtPj4+MTMpfDApKyhiYT4+PjI2KXwwLGJhJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxmdCksbT0obT1NYXRoLmltdWwoSWUsTXQpKStNYXRoLmltdWwoYXQsZnQpfDAsQT1NYXRoLmltdWwoYXQsTXQpLEU9RStNYXRoLmltdWwodXQsbm4pfDAsbT0obT1tK01hdGguaW11bCh1dCxXdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKFhlLG5uKXwwLEE9QStNYXRoLmltdWwoWGUsV3QpfDAsRT1FK01hdGguaW11bCh2dCxkbil8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LG1uKXwwKStNYXRoLmltdWwoU3QsZG4pfDAsQT1BK01hdGguaW11bChTdCxtbil8MDt2YXIgTWk9KGorKEU9RStNYXRoLmltdWwocnQs''@;'; put 'put ''Zm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChydCx0bil8MCkrTWF0aC5pbXVsKFFlLGZuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFFlLHRuKXwwKSsobT4+PjEzKXwwKSsoTWk+Pj4yNil8MCxNaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsbm4pLG09KG09TWF0''@;'; put 'put ''aC5pbXVsKEllLFd0KSkrTWF0aC5pbXVsKGF0LG5uKXwwLEE9TWF0aC5pbXVsKGF0LFd0KSxFPUUrTWF0aC5pbXVsKHV0LGRuKXwwLG09KG09bStNYXRoLmltdWwodXQsbW4pfDApK01hdGguaW11bChYZSxkbil8MCxBPUErTWF0aC5pbXVsKFhlLG1uKXwwO3ZhciB3YT0oaisoRT1FK01hdGgu''@;'; put 'put ''aW11bCh2dCxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHZ0LHRuKXwwKStNYXRoLmltdWwoU3QsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoU3QsdG4pfDApKyhtPj4+MTMpfDApKyh3YT4+PjI2KXwwLHdhJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxkbiks''@;'; put 'put ''bT0obT1NYXRoLmltdWwoSWUsbW4pKStNYXRoLmltdWwoYXQsZG4pfDAsQT1NYXRoLmltdWwoYXQsbW4pO3ZhciBlYT0oaisoRT1FK01hdGguaW11bCh1dCxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHV0LHRuKXwwKStNYXRoLmltdWwoWGUsZm4pfDApKTw8MTMpfDA7aj0o''@;'; put 'put ''KEE9QStNYXRoLmltdWwoWGUsdG4pfDApKyhtPj4+MTMpfDApKyhlYT4+PjI2KXwwLGVhJj02NzEwODg2Mzt2YXIgRnI9KGorKEU9TWF0aC5pbXVsKEllLGZuKSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChJZSx0bikpK01hdGguaW11bChhdCxmbil8MCkpPDwxMyl8MDtyZXR1cm4gaj0o''@;'; put 'put ''KEE9TWF0aC5pbXVsKGF0LHRuKSkrKG0+Pj4xMyl8MCkrKEZyPj4+MjYpfDAsRnImPTY3MTA4ODYzLEhbMF09Y2EsSFsxXT1faSxIWzJdPXZyLEhbM109WGksSFs0XT1RaSxIWzVdPVZpLEhbNl09ZWksSFs3XT11YSxIWzhdPVJpLEhbOV09RGEsSFsxMF09aGksSFsxMV09cWksSFsxMl09UGEs''@;'; put 'put ''SFsxM109dXIsSFsxNF09YmEsSFsxNV09TWksSFsxNl09d2EsSFsxN109ZWEsSFsxOF09RnIsMCE9PWomJihIWzE5XT1qLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIGVlKEIsZyx5KXtyZXR1cm4obmV3IEopLm11bHAoQixnLHkpfWZ1bmN0aW9uIEooQixnKXt0aGlzLng9Qix0aGlzLnk9Z31N''@;'; put 'put ''YXRoLmltdWx8fChXPVkpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGcseSl7dmFyIHgsQz10aGlzLmxlbmd0aCtnLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PWcubGVuZ3RoP1codGhpcyxnLHkpOkM8NjM/WSh0aGlzLGcseSk6QzwxMDI0P2Z1bmN0aW9uIHEo''@;'; put 'put ''QixnLHkpe3kubmVnYXRpdmU9Zy5uZWdhdGl2ZV5CLm5lZ2F0aXZlLHkubGVuZ3RoPUIubGVuZ3RoK2cubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDx5Lmxlbmd0aC0xO1QrKyl7dmFyIEg9QztDPTA7Zm9yKHZhciBqPTY3MTA4ODYzJngsRT1NYXRoLm1pbihULGcubGVuZ3RoLTEpLG09''@;'; put 'put ''TWF0aC5tYXgoMCxULUIubGVuZ3RoKzEpO208PUU7bSsrKXt2YXIgc2U9KDB8Qi53b3Jkc1tULW1dKSooMHxnLndvcmRzW21dKSxDZT02NzEwODg2MyZzZTtqPTY3MTA4ODYzJihDZT1DZStqfDApLEMrPShIPShIPUgrKHNlLzY3MTA4ODY0fDApfDApKyhDZT4+PjI2KXwwKT4+PjI2LEgmPTY3''@;'; put 'put ''MTA4ODYzfXkud29yZHNbVF09aix4PUgsSD1DfXJldHVybiAwIT09eD95LndvcmRzW1RdPXg6eS5sZW5ndGgtLSx5LnN0cmlwKCl9KHRoaXMsZyx5KTplZSh0aGlzLGcseSkseH0sSi5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihnKXtmb3IodmFyIHk9bmV3IEFycmF5KGcpLHg9dy5wcm90''@;'; put 'put ''b3R5cGUuX2NvdW50Qml0cyhnKS0xLEM9MDtDPGc7QysrKXlbQ109dGhpcy5yZXZCaW4oQyx4LGcpO3JldHVybiB5fSxKLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oZyx5LHgpe2lmKDA9PT1nfHxnPT09eC0xKXJldHVybiBnO2Zvcih2YXIgQz0wLFQ9MDtUPHk7VCsrKUN8PSgxJmcpPDx5''@;'; put 'put ''LVQtMSxnPj49MTtyZXR1cm4gQ30sSi5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihnLHkseCxDLFQsSCl7Zm9yKHZhciBqPTA7ajxIO2orKylDW2pdPXlbZ1tqXV0sVFtqXT14W2dbal1dfSxKLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZyx5LHgsQyxULEgpe3RoaXMucGVybXV0''@;'; put 'put ''ZShILGcseSx4LEMsVCk7Zm9yKHZhciBqPTE7ajxUO2o8PD0xKWZvcih2YXIgRT1qPDwxLG09TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLGFlPTA7YWU8VDthZSs9RSlmb3IodmFyIG5lPW0sc2U9QSxDZT0wO0NlPGo7Q2UrKyl7dmFyIFVlPXhbYWUrQ2Vd''@;'; put 'put ''LEplPUNbYWUrQ2VdLGl0PXhbYWUrQ2Ural0seGU9Q1thZStDZStqXSx5ZT1uZSppdC1zZSp4ZTt4ZT1uZSp4ZStzZSppdCx4W2FlK0NlXT1VZSsoaXQ9eWUpLENbYWUrQ2VdPUplK3hlLHhbYWUrQ2Ural09VWUtaXQsQ1thZStDZStqXT1KZS14ZSxDZSE9PUUmJih5ZT1tKm5lLUEqc2Usc2U9''@;'; put 'put ''bSpzZStBKm5lLG5lPXllKX19LEoucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGcseSl7dmFyIHg9MXxNYXRoLm1heCh5LGcpLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8PFQrMStDfSxKLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oZyx5''@;'; put 'put ''LHgpe2lmKCEoeDw9MSkpZm9yKHZhciBDPTA7Qzx4LzI7QysrKXt2YXIgVD1nW0NdO2dbQ109Z1t4LUMtMV0sZ1t4LUMtMV09VCxUPXlbQ10seVtDXT0teVt4LUMtMV0seVt4LUMtMV09LVR9fSxKLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oZyx5KXtmb3IodmFyIHg9MCxDPTA7''@;'; put 'put ''Qzx5LzI7QysrKXt2YXIgVD04MTkyKk1hdGgucm91bmQoZ1syKkMrMV0veSkrTWF0aC5yb3VuZChnWzIqQ10veSkreDtnW0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJldHVybiBnfSxKLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGcseSx4LEMpe2Zv''@;'; put 'put ''cih2YXIgVD0wLEg9MDtIPHk7SCsrKXhbMipIXT04MTkxJihUKz0wfGdbSF0pLHhbMipIKzFdPTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9yKEg9Mip5O0g8QzsrK0gpeFtIXT0wO3AoMD09PVQpLHAoISgtODE5MiZUKSl9LEoucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5''@;'; put 'put ''PW5ldyBBcnJheShnKSx4PTA7eDxnO3grKyl5W3hdPTA7cmV0dXJuIHl9LEoucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oZyx5LHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihnLmxlbmd0aCx5Lmxlbmd0aCksVD10aGlzLm1ha2VSQlQoQyksSD10aGlzLnN0dWIoQyksaj1uZXcgQXJyYXko''@;'; put 'put ''QyksRT1uZXcgQXJyYXkoQyksbT1uZXcgQXJyYXkoQyksQT1uZXcgQXJyYXkoQyksYWU9bmV3IEFycmF5KEMpLG5lPW5ldyBBcnJheShDKSxzZT14LndvcmRzO3NlLmxlbmd0aD1DLHRoaXMuY29udmVydDEzYihnLndvcmRzLGcubGVuZ3RoLGosQyksdGhpcy5jb252ZXJ0MTNiKHkud29yZHMs''@;'; put 'put ''eS5sZW5ndGgsQSxDKSx0aGlzLnRyYW5zZm9ybShqLEgsRSxtLEMsVCksdGhpcy50cmFuc2Zvcm0oQSxILGFlLG5lLEMsVCk7Zm9yKHZhciBDZT0wO0NlPEM7Q2UrKyl7dmFyIFVlPUVbQ2VdKmFlW0NlXS1tW0NlXSpuZVtDZV07bVtDZV09RVtDZV0qbmVbQ2VdK21bQ2VdKmFlW0NlXSxFW0Nl''@;'; put 'put ''XT1VZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoRSxtLEMpLHRoaXMudHJhbnNmb3JtKEUsbSxzZSxILEMsVCksdGhpcy5jb25qdWdhdGUoc2UsSCxDKSx0aGlzLm5vcm1hbGl6ZTEzYihzZSxDKSx4Lm5lZ2F0aXZlPWcubmVnYXRpdmVeeS5uZWdhdGl2ZSx4Lmxlbmd0aD1nLmxlbmd0aCt5Lmxl''@;'; put 'put ''bmd0aCx4LnN0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihnKXt2YXIgeT1uZXcgdyhudWxsKTtyZXR1cm4geS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRoaXMubXVsVG8oZyx5KX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihnKXt2YXIgeT1uZXcg''@;'; put 'put ''dyhudWxsKTtyZXR1cm4geS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLGVlKHRoaXMsZyx5KX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGcsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGcpe3Ao''@;'; put 'put ''Im51bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpO2Zvcih2YXIgeT0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqZyxUPSg2NzEwODg2MyZDKSsoNjcxMDg4NjMmeSk7eT4+PTI2LHkrPUMvNjcxMDg4NjR8MCx5Kz1UPj4+MjYsdGhpcy53b3Jk''@;'; put 'put ''c1t4XT02NzEwODg2MyZUfXJldHVybiAwIT09eSYmKHRoaXMud29yZHNbeF09eSx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oZyl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''Lm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcpe3ZhciB5PWZ1bmN0aW9uIFooQil7Zm9yKHZhciBnPW5ldyBBcnJheShCLmJpdExlbmd0aCgpKSx5PTA7eTxnLmxl''@;'; put 'put ''bmd0aDt5Kyspe3ZhciBDPXklMjY7Z1t5XT0oQi53b3Jkc1t5LzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gZ30oZyk7aWYoMD09PXkubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxDPTA7Qzx5Lmxlbmd0aCYmMD09PXlbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPHkubGVu''@;'; put 'put ''Z3RoKWZvcih2YXIgVD14LnNxcigpO0M8eS5sZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09eVtDXSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBULHk9ZyUyNix4PShnLXkpLzI2LEM9''@;'; put 'put ''NjcxMDg4NjM+Pj4yNi15PDwyNi15O2lmKDAhPT15KXt2YXIgSD0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBqPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLWo8PHl8SCxIPWo+Pj4yNi15fUgmJih0aGlzLndvcmRzW1RdPUgsdGhpcy5s''@;'; put 'put ''ZW5ndGgrKyl9aWYoMCE9PXgpe2ZvcihUPXRoaXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1m''@;'; put 'put ''dW5jdGlvbihnKXtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oZyl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihnLHkseCl7dmFyIEM7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApLEM9eT8oeS15JTI2KS8yNjowO3ZhciBUPWclMjYsSD1NYXRoLm1pbigo''@;'; put 'put ''Zy1UKS8yNix0aGlzLmxlbmd0aCksaj02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPUgsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208SDttKyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3RoPUh9aWYoMCE9PUgpaWYodGhpcy5sZW5ndGg+SClmb3Io''@;'; put 'put ''dGhpcy5sZW5ndGgtPUgsbT0wO208dGhpcy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttK0hdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgYWU9MHx0''@;'; put 'put ''aGlzLndvcmRzW21dO3RoaXMud29yZHNbbV09QTw8MjYtVHxhZT4+PlQsQT1hZSZqfXJldHVybiBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''aXNocm49ZnVuY3Rpb24oZyx5LHgpe3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihnLHkseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihnKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oZyl7cmV0dXJu''@;'; put 'put ''IHRoaXMuY2xvbmUoKS5pdXNobG4oZyl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihnKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oZyl9LHcucHJvdG90eXBlLnRlc3RuPWZ1''@;'; put 'put ''bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT1nJTI2LHg9KGcteSkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PHkpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0w''@;'; put 'put ''KTt2YXIgeT1nJTI2LHg9KGcteSkvMjY7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT15JiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9''@;'; put 'put ''PXkmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+Pnk8PHkpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGcpfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihnKXty''@;'; put 'put ''ZXR1cm4gcCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCksZzwwP3RoaXMuaXN1Ym4oLWcpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Zz8odGhpcy53b3Jkc1swXT1nLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9''@;'; put 'put ''MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGcpfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oZyl7dGhpcy53b3Jkc1swXSs9Zztmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3ld''@;'; put 'put ''Pj02NzEwODg2NDt5KyspdGhpcy53b3Jkc1t5XS09NjcxMDg4NjQseT09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1t5KzFdPTE6dGhpcy53b3Jkc1t5KzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLHkrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVu''@;'; put 'put ''Y3Rpb24oZyl7aWYocCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCksZzwwKXJldHVybiB0aGlzLmlhZGRuKC1nKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jk''@;'; put 'put ''c1swXS09ZywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbeV08MDt5KyspdGhpcy53b3Jkc1t5XSs9NjcxMDg4NjQsdGhp''@;'; put 'put ''cy53b3Jkc1t5KzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihnKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGcpfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGcseSx4KXt2YXIgVDt0aGlzLl9leHBhbmQoZy5s''@;'; put 'put ''ZW5ndGgreCk7dmFyIEgsaj0wO2ZvcihUPTA7VDxnLmxlbmd0aDtUKyspe0g9KDB8dGhpcy53b3Jkc1tUK3hdKStqO3ZhciBFPSgwfGcud29yZHNbVF0pKnk7aj0oKEgtPTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkh9Zm9yKDtUPHRo''@;'; put 'put ''aXMubGVuZ3RoLXg7VCsrKWo9KEg9KDB8dGhpcy53b3Jkc1tUK3hdKStqKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkg7aWYoMD09PWopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IocCgtMT09PWopLGo9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspaj0oSD0tKDB8dGhpcy53b3Jkc1tU''@;'; put 'put ''XSkraik+PjI2LHRoaXMud29yZHNbVF09NjcxMDg4NjMmSDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oZyx5KXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPWcsSD0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYt''@;'; put 'put ''dGhpcy5fY291bnRCaXRzKEgpKSYmKFQ9VC51c2hsbih4KSxDLml1c2hsbih4KSxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PXkpeyhtPW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3Ro''@;'; put 'put ''KTtmb3IodmFyIEE9MDtBPG0ubGVuZ3RoO0ErKyltLndvcmRzW0FdPTB9dmFyIGFlPUMuY2xvbmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1hZS5uZWdhdGl2ZSYmKEM9YWUsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgbmU9RS0xO25lPj0wO25lLS0pe3ZhciBzZT02NzEwODg2NCoo''@;'; put 'put ''MHxDLndvcmRzW1QubGVuZ3RoK25lXSkrKDB8Qy53b3Jkc1tULmxlbmd0aCtuZS0xXSk7Zm9yKHNlPU1hdGgubWluKHNlL0h8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxzZSxuZSk7MCE9PUMubmVnYXRpdmU7KXNlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSxuZSks''@;'; put 'put ''Qy5pc1plcm8oKXx8KEMubmVnYXRpdmVePTEpO20mJihtLndvcmRzW25lXT1zZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT15JiYwIT09eCYmQy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcseSx4KXty''@;'; put 'put ''ZXR1cm4gcCghZy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKGcseSksIm1vZCIhPT15JiYoQz1ILmRpdi5uZWcoKSksImRpdiIhPT15JiYoVD1I''@;'; put 'put ''Lm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pYWRkKGcpKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmU/KEg9dGhpcy5kaXZtb2QoZy5uZWcoKSx5KSwibW9kIiE9PXkmJihDPUguZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOkgubW9kfSk6dGhp''@;'; put 'put ''cy5uZWdhdGl2ZSZnLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKGcubmVnKCkseSksImRpdiIhPT15JiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKGcpKSx7ZGl2OkguZGl2LG1vZDpUfSk6Zy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcpPDA/''@;'; put 'put ''e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PWcubGVuZ3RoPyJkaXYiPT09eT97ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT15P3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKGcud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSks''@;'; put 'put ''bW9kOm5ldyB3KHRoaXMubW9kbihnLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoZyx5KTt2YXIgQyxULEh9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRo''@;'; put 'put ''aXMuZGl2bW9kKGcsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihnKXt2YXIgeT10aGlzLmRpdm1vZChnKTtpZih5Lm1vZC5pc1plcm8oKSly''@;'; put 'put ''ZXR1cm4geS5kaXY7dmFyIHg9MCE9PXkuZGl2Lm5lZ2F0aXZlP3kubW9kLmlzdWIoZyk6eS5tb2QsQz1nLnVzaHJuKDEpLFQ9Zy5hbmRsbigxKSxIPXguY21wKEMpO3JldHVybiBIPDB8fDE9PT1UJiYwPT09SD95LmRpdjowIT09eS5kaXYubmVnYXRpdmU/eS5kaXYuaXN1Ym4oMSk6eS5kaXYu''@;'; put 'put ''aWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oZyl7cChnPD02NzEwODg2Myk7Zm9yKHZhciB5PSgxPDwyNiklZyx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KHkqeCsoMHx0aGlzLndvcmRzW0NdKSklZztyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rp''@;'; put 'put ''b24oZyl7cChnPD02NzEwODg2Myk7Zm9yKHZhciB5PTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCp5O3RoaXMud29yZHNbeF09Qy9nfDAseT1DJWd9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlv''@;'; put 'put ''bihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGcpfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUpLHAoIWcuaXNaZXJvKCkpO3ZhciB5PXRoaXMseD1nLmNsb25lKCk7eT0wIT09eS5uZWdhdGl2ZT95LnVtb2QoZyk6eS5jbG9uZSgpO2Zvcih2YXIg''@;'; put 'put ''Qz1uZXcgdygxKSxUPW5ldyB3KDApLEg9bmV3IHcoMCksaj1uZXcgdygxKSxFPTA7eS5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspeS5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNsb25lKCksQT15LmNsb25lKCk7IXkuaXNaZXJvKCk7KXtmb3IodmFyIGFlPTAsbmU9MTsh''@;'; put 'put ''KHkud29yZHNbMF0mbmUpJiZhZTwyNjsrK2FlLG5lPDw9MSk7aWYoYWU+MClmb3IoeS5pdXNocm4oYWUpO2FlLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIHNlPTAsQ2U9MTshKHgud29y''@;'; put 'put ''ZHNbMF0mQ2UpJiZzZTwyNjsrK3NlLENlPDw9MSk7aWYoc2U+MClmb3IoeC5pdXNocm4oc2UpO3NlLS0gPjA7KShILmlzT2RkKCl8fGouaXNPZGQoKSkmJihILmlhZGQobSksai5pc3ViKEEpKSxILml1c2hybigxKSxqLml1c2hybigxKTt5LmNtcCh4KT49MD8oeS5pc3ViKHgpLEMuaXN1YihI''@;'; put 'put ''KSxULmlzdWIoaikpOih4LmlzdWIoeSksSC5pc3ViKEMpLGouaXN1YihUKSl9cmV0dXJue2E6SCxiOmosZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUpLHAoIWcuaXNaZXJvKCkpO3ZhciBhZSx5PXRoaXMseD1nLmNsb25l''@;'; put 'put ''KCk7eT0wIT09eS5uZWdhdGl2ZT95LnVtb2QoZyk6eS5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9eC5jbG9uZSgpO3kuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgaj0wLEU9MTshKHkud29yZHNbMF0mRSkmJmo8MjY7KytqLEU8PD0xKTtpZihqPjAp''@;'; put 'put ''Zm9yKHkuaXVzaHJuKGopO2otLSA+MDspQy5pc09kZCgpJiZDLmlhZGQoSCksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChIKSxULml1c2hy''@;'; put 'put ''bigxKTt5LmNtcCh4KT49MD8oeS5pc3ViKHgpLEMuaXN1YihUKSk6KHguaXN1Yih5KSxULmlzdWIoQykpfXJldHVybihhZT0wPT09eS5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZhZS5pYWRkKGcpLGFlfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oZyl7aWYodGhpcy5pc1plcm8oKSlyZXR1''@;'; put 'put ''cm4gZy5hYnMoKTtpZihnLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciB5PXRoaXMuY2xvbmUoKSx4PWcuY2xvbmUoKTt5Lm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO3kuaXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKXkuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zv''@;'; put 'put ''cig7Oyl7Zm9yKDt5LmlzRXZlbigpOyl5Lml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBUPXkuY21wKHgpO2lmKFQ8MCl7dmFyIEg9eTt5PXgseD1IfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7eS5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihD''@;'; put 'put ''KX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5lZ2NkKGcpLmEudW1vZChnKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53''@;'; put 'put ''b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLndvcmRzWzBdJmd9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnKTt2YXIgeT1nJTI2LHg9KGcteSkvMjYsQz0xPDx5O2lmKHRoaXMubGVuZ3RoPD14KXJl''@;'; put 'put ''dHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsSD14OzAhPT1UJiZIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9MHx0aGlzLndvcmRzW0hdO1Q9KGorPVQpPj4+MjYsdGhpcy53b3Jkc1tIXT1qJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0''@;'; put 'put ''aGlzLndvcmRzW0hdPVQsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oZyl7dmFyIHgseT1nPDA7aWYoMCE9PXRoaXMubmVn''@;'; put 'put ''YXRpdmUmJiF5KXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZ5KXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle3kmJihnPS1nKSxwKGc8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1n''@;'; put 'put ''PzA6QzxnPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGcpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIDE7''@;'; put 'put ''dmFyIHk9dGhpcy51Y21wKGcpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC15Onl9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oZyl7aWYodGhpcy5sZW5ndGg+Zy5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Zy5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciB5PTAseD10aGlz''@;'; put 'put ''Lmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0wfHRoaXMud29yZHNbeF0sVD0wfGcud29yZHNbeF07aWYoQyE9PVQpe0M8VD95PS0xOkM+VCYmKHk9MSk7YnJlYWt9fXJldHVybiB5fSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90''@;'; put 'put ''eXBlLmd0PWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXAoZyl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1''@;'; put 'put ''bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wKGcpfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihn''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5jbXAoZyk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcChnKX0sdy5yZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBNZShnKX0s''@;'; put 'put ''dy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IikscCgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnLmNvbnZlcnRUbyh0aGlzKS5fZm9y''@;'; put 'put ''Y2VSZWQoZyl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9''@;'; put 'put ''ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucmVkPWcsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoZyl9LHcucHJvdG90eXBlLnJlZEFk''@;'; put 'put ''ZD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0''@;'; put 'put ''aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElT''@;'; put 'put ''dWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdp''@;'; put 'put ''dGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5tdWwo''@;'; put 'put ''dGhpcyxnKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQuaW11bCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTcXI9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJ''@;'; put 'put ''U3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMi''@;'; put 'put ''KSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5y''@;'; put 'put ''ZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1m''@;'; put 'put ''dW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCYmIWcucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGcpfTt2YXIgcmU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBp''@;'; put 'put ''ZShCLGcpe3RoaXMubmFtZT1CLHRoaXMucD1uZXcgdyhnLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gdWUoKXtpZS5jYWxsKHRoaXMsImsyNTYiLCJm''@;'; put 'put ''ZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIGdlKCl7aWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAw''@;'; put 'put ''MDAwMDEiKX1mdW5jdGlvbiBfZSgpe2llLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtpZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZm''@;'; put 'put ''ZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIE1lKEIpe2lmKCJzdHJpbmciPT10eXBlb2YgQil7dmFyIGc9dy5fcHJpbWUoQik7dGhpcy5tPWcucCx0aGlzLnByaW1lPWd9ZWxzZSBwKEIuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFu''@;'; put 'put ''IDEiKSx0aGlzLm09Qix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gWmUoQil7TWUuY2FsbCh0aGlzLEIpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRo''@;'; put 'put ''aXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMu''@;'; put 'put ''bWludj10aGlzLnIuc3ViKHRoaXMubWludil9aWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgdyhudWxsKTtyZXR1cm4gZy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGd9LGllLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGcpe3ZhciB4LHk9''@;'; put 'put ''Zztkb3t0aGlzLnNwbGl0KHksdGhpcy50bXApLHg9KHk9KHk9dGhpcy5pbXVsSyh5KSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTp5LnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KHkud29yZHNbMF09MCx5Lmxlbmd0aD0x''@;'; put 'put ''KTpDPjA/eS5pc3ViKHRoaXMucCk6dm9pZCAwIT09eS5zdHJpcD95LnN0cmlwKCk6eS5fc3RyaXAoKSx5fSxpZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyx5KXtnLml1c2hybih0aGlzLm4sMCx5KX0saWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe3JldHVybiBnLmltdWwodGhp''@;'; put 'put ''cy5rKX0sVih1ZSxpZSksdWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcseSl7Zm9yKHZhciB4PTQxOTQzMDMsQz1NYXRoLm1pbihnLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyl5LndvcmRzW1RdPWcud29yZHNbVF07aWYoeS5sZW5ndGg9QyxnLmxlbmd0aDw9OSlyZXR1cm4gZy53b3Jkc1sw''@;'; put 'put ''XT0wLHZvaWQoZy5sZW5ndGg9MSk7dmFyIEg9Zy53b3Jkc1s5XTtmb3IoeS53b3Jkc1t5Lmxlbmd0aCsrXT1IJngsVD0xMDtUPGcubGVuZ3RoO1QrKyl7dmFyIGo9MHxnLndvcmRzW1RdO2cud29yZHNbVC0xMF09KGomeCk8PDR8SD4+PjIyLEg9an1nLndvcmRzW1QtMTBdPUg+Pj49MjIsZy5s''@;'; put 'put ''ZW5ndGgtPTA9PT1IJiZnLmxlbmd0aD4xMD8xMDo5fSx1ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zy53b3Jkc1tnLmxlbmd0aF09MCxnLndvcmRzW2cubGVuZ3RoKzFdPTAsZy5sZW5ndGgrPTI7Zm9yKHZhciB5PTAseD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgQz0wfGcud29yZHNb''@;'; put 'put ''eF07Zy53b3Jkc1t4XT02NzEwODg2MyYoeSs9OTc3KkMpLHk9NjQqQysoeS82NzEwODg2NHwwKX1yZXR1cm4gMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJihnLmxlbmd0aC0tLDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiZnLmxlbmd0aC0tKSxnfSxWKGdlLGllKSxWKF9lLGllKSxWKFRlLGll''@;'; put 'put ''KSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PTAseD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxnLndvcmRzW3hdKSt5LFQ9NjcxMDg4NjMmQztDPj4+PTI2LGcud29yZHNbeF09VCx5PUN9cmV0dXJuIDAhPT15JiYoZy53b3Jkc1tnLmxlbmd0aCsrXT15''@;'; put 'put ''KSxnfSx3Ll9wcmltZT1mdW5jdGlvbihnKXtpZihyZVtnXSlyZXR1cm4gcmVbZ107dmFyIHk7aWYoImsyNTYiPT09Zyl5PW5ldyB1ZTtlbHNlIGlmKCJwMjI0Ij09PWcpeT1uZXcgZ2U7ZWxzZSBpZigicDE5MiI9PT1nKXk9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1nKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcigiVW5rbm93biBwcmltZSAiK2cpO3k9bmV3IFRlfXJldHVybiByZVtnXT15LHl9LE1lLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAoZy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGgg''@;'; put 'put ''cmVkIG51bWJlcnMiKX0sTWUucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGcseSl7cCghKGcubmVnYXRpdmV8eS5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscChnLnJlZCYmZy5yZWQ9PT15LnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVy''@;'; put 'put ''cyIpfSxNZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoZykuX2ZvcmNlUmVkKHRoaXMpOmcudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sTWUucHJvdG90eXBlLm5lZz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pc1pl''@;'; put 'put ''cm8oKT9nLmNsb25lKCk6dGhpcy5tLnN1YihnKS5fZm9yY2VSZWQodGhpcyl9LE1lLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5hZGQoeSk7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRo''@;'; put 'put ''aXMpfSxNZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmlhZGQoeSk7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LE1lLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7''@;'; put 'put ''dmFyIHg9Zy5zdWIoeSk7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sTWUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5pc3ViKHkpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRo''@;'; put 'put ''aXMubSkseH0sTWUucHJvdG90eXBlLnNobD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkxKGcpLHRoaXMuaW1vZChnLnVzaGxuKHkpKX0sTWUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLHkpLHRoaXMuaW1vZChnLmltdWwoeSkp''@;'; put 'put ''fSxNZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyx5KSx0aGlzLmltb2QoZy5tdWwoeSkpfSxNZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbXVsKGcsZy5jbG9uZSgpKX0sTWUucHJvdG90eXBlLnNxcj1mdW5jdGlv''@;'; put 'put ''bihnKXtyZXR1cm4gdGhpcy5tdWwoZyxnKX0sTWUucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oZyl7aWYoZy5pc1plcm8oKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciB5PXRoaXMubS5hbmRsbigzKTtpZihwKHklMj09MSksMz09PXkpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigy''@;'; put 'put ''KTtyZXR1cm4gdGhpcy5wb3coZyx4KX1mb3IodmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO3AoIUMuaXNaZXJvKCkpO3ZhciBIPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGo9SC5yZWROZWcoKSxFPXRoaXMubS5zdWJu''@;'; put 'put ''KDEpLml1c2hybigxKSxtPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKGopOyltLnJlZElBZGQoaik7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksYWU9dGhpcy5wb3coZyxDLmFkZG4oMSkuaXVzaHJuKDEpKSxu''@;'; put 'put ''ZT10aGlzLnBvdyhnLEMpLHNlPVQ7MCE9PW5lLmNtcChIKTspe2Zvcih2YXIgQ2U9bmUsVWU9MDswIT09Q2UuY21wKEgpO1VlKyspQ2U9Q2UucmVkU3FyKCk7cChVZTxzZSk7dmFyIEplPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxuKHNlLVVlLTEpKTthZT1hZS5yZWRNdWwoSmUpLEE9SmUu''@;'; put 'put ''cmVkU3FyKCksbmU9bmUucmVkTXVsKEEpLHNlPVVlfXJldHVybiBhZX0sTWUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7dmFyIHk9Zy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PXkubmVnYXRpdmU/KHkubmVnYXRpdmU9MCx0aGlzLmltb2QoeSkucmVkTmVnKCkpOnRoaXMuaW1vZCh5''@;'; put 'put ''KX0sTWUucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnLHkpe2lmKHkuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT15LmNtcG4oMSkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1nO2Zv''@;'; put 'put ''cih2YXIgVD0yO1Q8Qy5sZW5ndGg7VCsrKUNbVF09dGhpcy5tdWwoQ1tULTFdLGcpO3ZhciBIPUNbMF0saj0wLEU9MCxtPXkuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD15Lmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9eS53b3Jkc1tUXSxhZT1tLTE7YWU+PTA7YWUt''@;'; put 'put ''LSl7dmFyIG5lPUE+PmFlJjE7SCE9PUNbMF0mJihIPXRoaXMuc3FyKEgpKSwwIT09bmV8fDAhPT1qPyhqPDw9MSxqfD1uZSwoND09KytFfHwwPT09VCYmMD09PWFlKSYmKEg9dGhpcy5tdWwoSCxDW2pdKSxFPTAsaj0wKSk6RT0wfW09MjZ9cmV0dXJuIEh9LE1lLnByb3RvdHlwZS5jb252ZXJ0''@;'; put 'put ''VG89ZnVuY3Rpb24oZyl7dmFyIHk9Zy51bW9kKHRoaXMubSk7cmV0dXJuIHk9PT1nP3kuY2xvbmUoKTp5fSxNZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIHk9Zy5jbG9uZSgpO3JldHVybiB5LnJlZD1udWxsLHl9LHcubW9udD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3''@;'; put 'put ''IFplKGcpfSxWKFplLE1lKSxaZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy51c2hsbih0aGlzLnNoaWZ0KSl9LFplLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgeT10aGlzLmltb2QoZy5tdWwodGhpcy5yaW52KSk7cmV0''@;'; put 'put ''dXJuIHkucmVkPW51bGwseX0sWmUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyx5KXtpZihnLmlzWmVybygpfHx5LmlzWmVybygpKXJldHVybiBnLndvcmRzWzBdPTAsZy5sZW5ndGg9MSxnO3ZhciB4PWcuaW11bCh5KSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1h''@;'; put 'put ''c2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxaZS5wcm90b3R5''@;'; put 'put ''cGUubXVsPWZ1bmN0aW9uKGcseSl7aWYoZy5pc1plcm8oKXx8eS5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PWcubXVsKHkpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14''@;'; put 'put ''LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LFplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlz''@;'; put 'put ''Lmltb2QoZy5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KGNlPWIubm1kKGNlKSx0aGlzKX0sNDQyOTpjZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgWD1PYmplY3QuZGVmaW5lUHJvcGVydHl8fCExO2lmKFgpdHJ5e1goe30sImEiLHt2YWx1ZToxfSl9Y2F0Y2h7''@;'; put 'put ''WD0hMX1jZS5leHBvcnRzPVh9LDM5ODE6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1FdmFsRXJyb3J9LDE2NDg6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1FcnJvcn0sNDcyNjpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPVJhbmdlRXJyb3J9LDY3MTI6Y2U9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7Y2UuZXhwb3J0cz1SZWZlcmVuY2VFcnJvcn0sMzQ2NDpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPVN5bnRheEVycm9yfSw0NDUzOmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9VHlwZUVycm9yfSwzOTE1OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9VVJJ''@;'; put 'put ''RXJyb3J9LDg4OTI6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1PYmplY3R9LDcxODc6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIFYsST1iKDUxMDgpLF89Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0P1JlZmxlY3Q6bnVsbCxwPV8mJiJmdW5jdGlvbiI9PXR5cGVvZiBfLmFwcGx5''@;'; put 'put ''P18uYXBwbHk6ZnVuY3Rpb24oX2UsVGUsTWUpe3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChfZSxUZSxNZSl9O1Y9XyYmImZ1bmN0aW9uIj09dHlwZW9mIF8ub3duS2V5cz9fLm93bktleXM6T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9mdW5jdGlvbihfZSl7cmV0''@;'; put 'put ''dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKF9lKS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhfZSkpfTpmdW5jdGlvbihfZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKF9lKX07dmFyIFA9TnVtYmVyLmlzTmFOfHxmdW5jdGlvbihfZSl7cmV0''@;'; put 'put ''dXJuIF9lIT1fZX07ZnVuY3Rpb24gRigpe0YuaW5pdC5jYWxsKHRoaXMpfWNlLmV4cG9ydHM9RixjZS5leHBvcnRzLm9uY2U9ZnVuY3Rpb24gcmUoZ2UsX2Upe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihUZSxNZSl7ZnVuY3Rpb24gWmUoZyl7Z2UucmVtb3ZlTGlzdGVuZXIoX2UsQiks''@;'; put 'put ''TWUoZyl9ZnVuY3Rpb24gQigpeyJmdW5jdGlvbiI9PXR5cGVvZiBnZS5yZW1vdmVMaXN0ZW5lciYmZ2UucmVtb3ZlTGlzdGVuZXIoImVycm9yIixaZSksVGUoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKX11ZShnZSxfZSxCLHtvbmNlOiEwfSksImVycm9yIiE9PV9lJiZmdW5jdGlvbiBpZShn''@;'; put 'put ''ZSxfZSxUZSl7ImZ1bmN0aW9uIj09dHlwZW9mIGdlLm9uJiZ1ZShnZSwiZXJyb3IiLF9lLFRlKX0oZ2UsWmUse29uY2U6ITB9KX0pfSxGLkV2ZW50RW1pdHRlcj1GLEYucHJvdG90eXBlLl9ldmVudHM9dm9pZCAwLEYucHJvdG90eXBlLl9ldmVudHNDb3VudD0wLEYucHJvdG90eXBlLl9tYXhM''@;'; put 'put ''aXN0ZW5lcnM9dm9pZCAwO3ZhciBSPTEwO2Z1bmN0aW9uIHooZ2Upe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBnZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImxpc3RlbmVyIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgZ2UpfWZ1''@;'; put 'put ''bmN0aW9uIE4oZ2Upe3JldHVybiB2b2lkIDA9PT1nZS5fbWF4TGlzdGVuZXJzP0YuZGVmYXVsdE1heExpc3RlbmVyczpnZS5fbWF4TGlzdGVuZXJzfWZ1bmN0aW9uIE8oZ2UsX2UsVGUsTWUpe3ZhciBaZSxCLGc7aWYoeihUZSksdm9pZCAwPT09KEI9Z2UuX2V2ZW50cyk/KEI9Z2UuX2V2ZW50''@;'; put 'put ''cz1PYmplY3QuY3JlYXRlKG51bGwpLGdlLl9ldmVudHNDb3VudD0wKToodm9pZCAwIT09Qi5uZXdMaXN0ZW5lciYmKGdlLmVtaXQoIm5ld0xpc3RlbmVyIixfZSxUZS5saXN0ZW5lcj9UZS5saXN0ZW5lcjpUZSksQj1nZS5fZXZlbnRzKSxnPUJbX2VdKSx2b2lkIDA9PT1nKWc9QltfZV09VGUs''@;'; put 'put ''KytnZS5fZXZlbnRzQ291bnQ7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZz9nPUJbX2VdPU1lP1tUZSxnXTpbZyxUZV06TWU/Zy51bnNoaWZ0KFRlKTpnLnB1c2goVGUpLChaZT1OKGdlKSk+MCYmZy5sZW5ndGg+WmUmJiFnLndhcm5lZCl7Zy53YXJuZWQ9ITA7dmFyIHk9bmV3IEVycm9y''@;'; put 'put ''KCJQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICIrZy5sZW5ndGgrIiAiK1N0cmluZyhfZSkrIiBsaXN0ZW5lcnMgYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0Iik7eS5uYW1lPSJNYXhMaXN0ZW5lcnNFeGNl''@;'; put 'put ''ZWRlZFdhcm5pbmciLHkuZW1pdHRlcj1nZSx5LnR5cGU9X2UseS5jb3VudD1nLmxlbmd0aCxmdW5jdGlvbiB3KGdlKXtJJiZJLndhcm4mJkkud2FybihnZSl9KHkpfXJldHVybiBnZX1mdW5jdGlvbiBLKCl7aWYoIXRoaXMuZmlyZWQpcmV0dXJuIHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVy''@;'; put 'put ''KHRoaXMudHlwZSx0aGlzLndyYXBGbiksdGhpcy5maXJlZD0hMCwwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpOnRoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsYXJndW1lbnRzKX1mdW5jdGlvbiBaKGdlLF9lLFRlKXt2YXIgTWU9e2Zp''@;'; put 'put ''cmVkOiExLHdyYXBGbjp2b2lkIDAsdGFyZ2V0OmdlLHR5cGU6X2UsbGlzdGVuZXI6VGV9LFplPUsuYmluZChNZSk7cmV0dXJuIFplLmxpc3RlbmVyPVRlLE1lLndyYXBGbj1aZSxaZX1mdW5jdGlvbiBZKGdlLF9lLFRlKXt2YXIgTWU9Z2UuX2V2ZW50cztpZih2b2lkIDA9PT1NZSlyZXR1cm5b''@;'; put 'put ''XTt2YXIgWmU9TWVbX2VdO3JldHVybiB2b2lkIDA9PT1aZT9bXToiZnVuY3Rpb24iPT10eXBlb2YgWmU/VGU/W1plLmxpc3RlbmVyfHxaZV06W1plXTpUZT9mdW5jdGlvbiBKKGdlKXtmb3IodmFyIF9lPW5ldyBBcnJheShnZS5sZW5ndGgpLFRlPTA7VGU8X2UubGVuZ3RoOysrVGUpX2VbVGVd''@;'; put 'put ''PWdlW1RlXS5saXN0ZW5lcnx8Z2VbVGVdO3JldHVybiBfZX0oWmUpOnEoWmUsWmUubGVuZ3RoKX1mdW5jdGlvbiBXKGdlKXt2YXIgX2U9dGhpcy5fZXZlbnRzO2lmKHZvaWQgMCE9PV9lKXt2YXIgVGU9X2VbZ2VdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBUZSlyZXR1cm4gMTtpZih2b2lkIDAh''@;'; put 'put ''PT1UZSlyZXR1cm4gVGUubGVuZ3RofXJldHVybiAwfWZ1bmN0aW9uIHEoZ2UsX2Upe2Zvcih2YXIgVGU9bmV3IEFycmF5KF9lKSxNZT0wO01lPF9lOysrTWUpVGVbTWVdPWdlW01lXTtyZXR1cm4gVGV9ZnVuY3Rpb24gdWUoZ2UsX2UsVGUsTWUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBnZS5v''@;'; put 'put ''bilNZS5vbmNlP2dlLm9uY2UoX2UsVGUpOmdlLm9uKF9lLFRlKTtlbHNle2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBnZS5hZGRFdmVudExpc3RlbmVyKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiZW1pdHRlciIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEV2ZW50RW1pdHRlci4gUmVjZWl2''@;'; put 'put ''ZWQgdHlwZSAnK3R5cGVvZiBnZSk7Z2UuYWRkRXZlbnRMaXN0ZW5lcihfZSxmdW5jdGlvbiBaZShCKXtNZS5vbmNlJiZnZS5yZW1vdmVFdmVudExpc3RlbmVyKF9lLFplKSxUZShCKX0pfX1PYmplY3QuZGVmaW5lUHJvcGVydHkoRiwiZGVmYXVsdE1heExpc3RlbmVycyIse2VudW1lcmFibGU6''@;'; put 'put ''ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFJ9LHNldDpmdW5jdGlvbihnZSl7aWYoIm51bWJlciIhPXR5cGVvZiBnZXx8Z2U8MHx8UChnZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiAiZGVmYXVsdE1heExpc3RlbmVycyIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJl''@;'; put 'put ''IGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJytnZSsiLiIpO1I9Z2V9fSksRi5pbml0PWZ1bmN0aW9uKCl7KHZvaWQgMD09PXRoaXMuX2V2ZW50c3x8dGhpcy5fZXZlbnRzPT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpJiYodGhpcy5fZXZlbnRzPU9iamVj''@;'; put 'put ''dC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCksdGhpcy5fbWF4TGlzdGVuZXJzPXRoaXMuX21heExpc3RlbmVyc3x8dm9pZCAwfSxGLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oX2Upe2lmKCJudW1iZXIiIT10eXBlb2YgX2V8fF9lPDB8fFAoX2UpKXRocm93''@;'; put 'put ''IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgIm4iIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrX2UrIi4iKTtyZXR1cm4gdGhpcy5fbWF4TGlzdGVuZXJzPV9lLHRoaXN9LEYucHJvdG90eXBlLmdldE1heExpc3RlbmVy''@;'; put 'put ''cz1mdW5jdGlvbigpe3JldHVybiBOKHRoaXMpfSxGLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKF9lKXtmb3IodmFyIFRlPVtdLE1lPTE7TWU8YXJndW1lbnRzLmxlbmd0aDtNZSsrKVRlLnB1c2goYXJndW1lbnRzW01lXSk7dmFyIFplPSJlcnJvciI9PT1fZSxCPXRoaXMuX2V2ZW50cztpZih2''@;'; put 'put ''b2lkIDAhPT1CKVplPVplJiZ2b2lkIDA9PT1CLmVycm9yO2Vsc2UgaWYoIVplKXJldHVybiExO2lmKFplKXt2YXIgZztpZihUZS5sZW5ndGg+MCYmKGc9VGVbMF0pLGcgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBnO3ZhciB5PW5ldyBFcnJvcigiVW5oYW5kbGVkIGVycm9yLiIrKGc/IiAoIitn''@;'; put 'put ''Lm1lc3NhZ2UrIikiOiIiKSk7dGhyb3cgeS5jb250ZXh0PWcseX12YXIgeD1CW19lXTtpZih2b2lkIDA9PT14KXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB4KXAoeCx0aGlzLFRlKTtlbHNle3ZhciBDPXgubGVuZ3RoLFQ9cSh4LEMpO2ZvcihNZT0wO01lPEM7KytNZSlwKFRbTWVd''@;'; put 'put ''LHRoaXMsVGUpfXJldHVybiEwfSxGLnByb3RvdHlwZS5vbj1GLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1mdW5jdGlvbihfZSxUZSl7cmV0dXJuIE8odGhpcyxfZSxUZSwhMSl9LEYucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lcj1mdW5jdGlvbihfZSxUZSl7cmV0dXJuIE8odGhpcyxfZSxUZSwh''@;'; put 'put ''MCl9LEYucHJvdG90eXBlLm9uY2U9ZnVuY3Rpb24oX2UsVGUpe3JldHVybiB6KFRlKSx0aGlzLm9uKF9lLFoodGhpcyxfZSxUZSkpLHRoaXN9LEYucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXI9ZnVuY3Rpb24oX2UsVGUpe3JldHVybiB6KFRlKSx0aGlzLnByZXBlbmRMaXN0ZW5lcihf''@;'; put 'put ''ZSxaKHRoaXMsX2UsVGUpKSx0aGlzfSxGLnByb3RvdHlwZS5vZmY9Ri5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oX2UsVGUpe3ZhciBNZSxaZSxCLGcseTtpZih6KFRlKSx2b2lkIDA9PT0oWmU9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT0oTWU9WmVb''@;'; put 'put ''X2VdKSlyZXR1cm4gdGhpcztpZihNZT09PVRlfHxNZS5saXN0ZW5lcj09PVRlKTA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6KGRlbGV0ZSBaZVtfZV0sWmUucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLF9l''@;'; put 'put ''LE1lLmxpc3RlbmVyfHxUZSkpO2Vsc2UgaWYoImZ1bmN0aW9uIiE9dHlwZW9mIE1lKXtmb3IoQj0tMSxnPU1lLmxlbmd0aC0xO2c+PTA7Zy0tKWlmKE1lW2ddPT09VGV8fE1lW2ddLmxpc3RlbmVyPT09VGUpe3k9TWVbZ10ubGlzdGVuZXIsQj1nO2JyZWFrfWlmKEI8MClyZXR1cm4gdGhpczsw''@;'; put 'put ''PT09Qj9NZS5zaGlmdCgpOmZ1bmN0aW9uIGVlKGdlLF9lKXtmb3IoO19lKzE8Z2UubGVuZ3RoO19lKyspZ2VbX2VdPWdlW19lKzFdO2dlLnBvcCgpfShNZSxCKSwxPT09TWUubGVuZ3RoJiYoWmVbX2VdPU1lWzBdKSx2b2lkIDAhPT1aZS5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1v''@;'; put 'put ''dmVMaXN0ZW5lciIsX2UseXx8VGUpfXJldHVybiB0aGlzfSxGLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oX2Upe3ZhciBUZSxNZSxaZTtpZih2b2lkIDA9PT0oTWU9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT1NZS5yZW1vdmVMaXN0ZW5lcily''@;'; put 'put ''ZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApOnZvaWQgMCE9PU1lW19lXSYmKDA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6ZGVsZXRlIE1l''@;'; put 'put ''W19lXSksdGhpcztpZigwPT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIGcsQj1PYmplY3Qua2V5cyhNZSk7Zm9yKFplPTA7WmU8Qi5sZW5ndGg7KytaZSkicmVtb3ZlTGlzdGVuZXIiIT09KGc9QltaZV0pJiZ0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhnKTtyZXR1cm4gdGhpcy5yZW1vdmVBbGxM''@;'; put 'put ''aXN0ZW5lcnMoInJlbW92ZUxpc3RlbmVyIiksdGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCx0aGlzfWlmKCJmdW5jdGlvbiI9PXR5cGVvZihUZT1NZVtfZV0pKXRoaXMucmVtb3ZlTGlzdGVuZXIoX2UsVGUpO2Vsc2UgaWYodm9pZCAwIT09VGUp''@;'; put 'put ''Zm9yKFplPVRlLmxlbmd0aC0xO1plPj0wO1plLS0pdGhpcy5yZW1vdmVMaXN0ZW5lcihfZSxUZVtaZV0pO3JldHVybiB0aGlzfSxGLnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24oX2Upe3JldHVybiBZKHRoaXMsX2UsITApfSxGLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnM9ZnVuY3Rpb24o''@;'; put 'put ''X2Upe3JldHVybiBZKHRoaXMsX2UsITEpfSxGLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24oZ2UsX2Upe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBnZS5saXN0ZW5lckNvdW50P2dlLmxpc3RlbmVyQ291bnQoX2UpOlcuY2FsbChnZSxfZSl9LEYucHJvdG90eXBlLmxpc3RlbmVyQ291bnQ9VyxG''@;'; put 'put ''LnByb3RvdHlwZS5ldmVudE5hbWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50PjA/Vih0aGlzLl9ldmVudHMpOltdfX0sMzA0ODooY2UsWCxiKT0+e3ZhciBJPWIoOTUwOSkuQnVmZmVyLF89YigyMzE4KTtjZS5leHBvcnRzPWZ1bmN0aW9uIHAoVix3LFAsRil7aWYoSS5p''@;'; put 'put ''c0J1ZmZlcihWKXx8KFY9SS5mcm9tKFYsImJpbmFyeSIpKSx3JiYoSS5pc0J1ZmZlcih3KXx8KHc9SS5mcm9tKHcsImJpbmFyeSIpKSw4IT09dy5sZW5ndGgpKXRocm93IG5ldyBSYW5nZUVycm9yKCJzYWx0IHNob3VsZCBiZSBCdWZmZXIgd2l0aCA4IGJ5dGUgbGVuZ3RoIik7Zm9yKHZhciBS''@;'; put 'put ''PVAvOCx6PUkuYWxsb2MoUiksTj1JLmFsbG9jKEZ8fDApLE89SS5hbGxvYygwKTtSPjB8fEY+MDspe3ZhciBLPW5ldyBfO0sudXBkYXRlKE8pLEsudXBkYXRlKFYpLHcmJksudXBkYXRlKHcpLE89Sy5kaWdlc3QoKTt2YXIgWj0wO2lmKFI+MCl7dmFyIFk9ei5sZW5ndGgtUjtaPU1hdGgubWlu''@;'; put 'put ''KFIsTy5sZW5ndGgpLE8uY29weSh6LFksMCxaKSxSLT1afWlmKFo8Ty5sZW5ndGgmJkY+MCl7dmFyIFc9Ti5sZW5ndGgtRixxPU1hdGgubWluKEYsTy5sZW5ndGgtWik7Ty5jb3B5KE4sVyxaLForcSksRi09cX19cmV0dXJuIE8uZmlsbCgwKSx7a2V5OnosaXY6Tn19fSw0MDI5OihjZSxYLGIp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNTMyMCksXz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLHA9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtjZS5leHBvcnRzPWZ1bmN0aW9uKHosTixPKXtpZighSShOKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpdGVyYXRvciBtdXN0IGJl''@;'; put 'put ''IGEgZnVuY3Rpb24iKTt2YXIgSzthcmd1bWVudHMubGVuZ3RoPj0zJiYoSz1PKSxmdW5jdGlvbiBGKFIpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1fLmNhbGwoUil9KHopP2Z1bmN0aW9uKHosTixPKXtmb3IodmFyIEs9MCxaPXoubGVuZ3RoO0s8WjtLKyspcC5jYWxsKHosSykmJihudWxs''@;'; put 'put ''PT1PP04oeltLXSxLLHopOk4uY2FsbChPLHpbS10sSyx6KSl9KHosTixLKToic3RyaW5nIj09dHlwZW9mIHo/ZnVuY3Rpb24oeixOLE8pe2Zvcih2YXIgSz0wLFo9ei5sZW5ndGg7SzxaO0srKyludWxsPT1PP04oei5jaGFyQXQoSyksSyx6KTpOLmNhbGwoTyx6LmNoYXJBdChLKSxLLHopfSh6''@;'; put 'put ''LE4sSyk6ZnVuY3Rpb24oeixOLE8pe2Zvcih2YXIgSyBpbiB6KXAuY2FsbCh6LEspJiYobnVsbD09Tz9OKHpbS10sSyx6KTpOLmNhbGwoTyx6W0tdLEsseikpfSh6LE4sSyl9fSw2MjMwOmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9Im9iamVjdCI9PXR5cGVvZiBzZWxmP3NlbGYuRm9y''@;'; put 'put ''bURhdGE6d2luZG93LkZvcm1EYXRhfSwzODczOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNDE1NSk7Y29uc3QgXz1iKDc3KSxwPWIoMjUyMCksVj1iKDEzODEpLm1rZGlyc1N5bmMsdz1iKDMxOCkudXRpbWVzTWlsbGlzU3luYyxQPWIoMjczMyk7ZnVuY3Rpb24gUihfZSxUZSxN''@;'; put 'put ''ZSxaZSl7Y29uc3QgZz0oWmUuZGVyZWZlcmVuY2U/Xy5zdGF0U3luYzpfLmxzdGF0U3luYykoVGUpO2lmKGcuaXNEaXJlY3RvcnkoKSlyZXR1cm4gZnVuY3Rpb24gZWUoX2UsVGUsTWUsWmUsQil7cmV0dXJuIFRlP3JlKE1lLFplLEIpOmZ1bmN0aW9uIEooX2UsVGUsTWUsWmUpe3JldHVybiBf''@;'; put 'put ''Lm1rZGlyU3luYyhNZSkscmUoVGUsTWUsWmUpLFcoTWUsX2UpfShfZS5tb2RlLE1lLFplLEIpfShnLF9lLFRlLE1lLFplKTtpZihnLmlzRmlsZSgpfHxnLmlzQ2hhcmFjdGVyRGV2aWNlKCl8fGcuaXNCbG9ja0RldmljZSgpKXJldHVybiBmdW5jdGlvbiB6KF9lLFRlLE1lLFplLEIpe3JldHVy''@;'; put 'put ''biBUZT9mdW5jdGlvbiBOKF9lLFRlLE1lLFplKXtpZihaZS5vdmVyd3JpdGUpcmV0dXJuIF8udW5saW5rU3luYyhNZSksTyhfZSxUZSxNZSxaZSk7aWYoWmUuZXJyb3JPbkV4aXN0KXRocm93IG5ldyBFcnJvcihgJyR7TWV9JyBhbHJlYWR5IGV4aXN0c2ApfShfZSxNZSxaZSxCKTpPKF9lLE1l''@;'; put 'put ''LFplLEIpfShnLF9lLFRlLE1lLFplKTtpZihnLmlzU3ltYm9saWNMaW5rKCkpcmV0dXJuIGZ1bmN0aW9uIHVlKF9lLFRlLE1lLFplKXtsZXQgQj1fLnJlYWRsaW5rU3luYyhUZSk7aWYoWmUuZGVyZWZlcmVuY2UmJihCPXAucmVzb2x2ZShJLmN3ZCgpLEIpKSxfZSl7bGV0IGc7dHJ5e2c9Xy5y''@;'; put 'put ''ZWFkbGlua1N5bmMoTWUpfWNhdGNoKHkpe2lmKCJFSU5WQUwiPT09eS5jb2RlfHwiVU5LTk9XTiI9PT15LmNvZGUpcmV0dXJuIF8uc3ltbGlua1N5bmMoQixNZSk7dGhyb3cgeX1pZihaZS5kZXJlZmVyZW5jZSYmKGc9cC5yZXNvbHZlKEkuY3dkKCksZykpLFAuaXNTcmNTdWJkaXIoQixnKSl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb3B5ICcke0J9JyB0byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNlbGYsICcke2d9Jy5gKTtpZihQLmlzU3JjU3ViZGlyKGcsQikpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlICcke2d9JyB3aXRoICcke0J9Jy5gKTtyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24gZ2UoX2UsVGUpe3JldHVybiBfLnVubGlua1N5bmMoVGUpLF8uc3ltbGlua1N5bmMoX2UsVGUpfShCLE1lKX1yZXR1cm4gXy5zeW1saW5rU3luYyhCLE1lKX0oX2UsVGUsTWUsWmUpO3Rocm93IGcuaXNTb2NrZXQoKT9uZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEgc29ja2V0IGZpbGU6ICR7''@;'; put 'put ''VGV9YCk6Zy5pc0ZJRk8oKT9uZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEgRklGTyBwaXBlOiAke1RlfWApOm5ldyBFcnJvcihgVW5rbm93biBmaWxlOiAke1RlfWApfWZ1bmN0aW9uIE8oX2UsVGUsTWUsWmUpe3JldHVybiBfLmNvcHlGaWxlU3luYyhUZSxNZSksWmUucHJlc2VydmVUaW1lc3Rh''@;'; put 'put ''bXBzJiZmdW5jdGlvbiBLKF9lLFRlLE1lKXsoZnVuY3Rpb24gWihfZSl7cmV0dXJuISgxMjgmX2UpfSkoX2UpJiZmdW5jdGlvbiBZKF9lLFRlKXtXKF9lLDEyOHxUZSl9KE1lLF9lKSxmdW5jdGlvbiBxKF9lLFRlKXtjb25zdCBNZT1fLnN0YXRTeW5jKF9lKTt3KFRlLE1lLmF0aW1lLE1lLm10''@;'; put 'put ''aW1lKX0oVGUsTWUpfShfZS5tb2RlLFRlLE1lKSxXKE1lLF9lLm1vZGUpfWZ1bmN0aW9uIFcoX2UsVGUpe3JldHVybiBfLmNobW9kU3luYyhfZSxUZSl9ZnVuY3Rpb24gcmUoX2UsVGUsTWUpe2NvbnN0IFplPV8ub3BlbmRpclN5bmMoX2UpO3RyeXtsZXQgQjtmb3IoO251bGwhPT0oQj1aZS5y''@;'; put 'put ''ZWFkU3luYygpKTspaWUoQi5uYW1lLF9lLFRlLE1lKX1maW5hbGx5e1plLmNsb3NlU3luYygpfX1mdW5jdGlvbiBpZShfZSxUZSxNZSxaZSl7Y29uc3QgQj1wLmpvaW4oVGUsX2UpLGc9cC5qb2luKE1lLF9lKTtpZihaZS5maWx0ZXImJiFaZS5maWx0ZXIoQixnKSlyZXR1cm47Y29uc3R7ZGVz''@;'; put 'put ''dFN0YXQ6eX09UC5jaGVja1BhdGhzU3luYyhCLGcsImNvcHkiLFplKTtyZXR1cm4gUih5LEIsZyxaZSl9Y2UuZXhwb3J0cz1mdW5jdGlvbiBGKF9lLFRlLE1lKXsiZnVuY3Rpb24iPT10eXBlb2YgTWUmJihNZT17ZmlsdGVyOk1lfSksKE1lPU1lfHx7fSkuY2xvYmJlcj0hKCJjbG9iYmVyImlu''@;'; put 'put ''IE1lKXx8ISFNZS5jbG9iYmVyLE1lLm92ZXJ3cml0ZT0ib3ZlcndyaXRlImluIE1lPyEhTWUub3ZlcndyaXRlOk1lLmNsb2JiZXIsTWUucHJlc2VydmVUaW1lc3RhbXBzJiYiaWEzMiI9PT1JLmFyY2gmJkkuZW1pdFdhcm5pbmcoIlVzaW5nIHRoZSBwcmVzZXJ2ZVRpbWVzdGFtcHMgb3B0aW9u''@;'; put 'put ''IGluIDMyLWJpdCBub2RlIGlzIG5vdCByZWNvbW1lbmRlZDtcblxuXHRzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pwcmljaGFyZHNvbi9ub2RlLWZzLWV4dHJhL2lzc3Vlcy8yNjkiLCJXYXJuaW5nIiwiZnMtZXh0cmEtV0FSTjAwMDIiKTtjb25zdHtzcmNTdGF0OlplLGRlc3RTdGF0OkJ9PVAu''@;'; put 'put ''Y2hlY2tQYXRoc1N5bmMoX2UsVGUsImNvcHkiLE1lKTtpZihQLmNoZWNrUGFyZW50UGF0aHNTeW5jKF9lLFplLFRlLCJjb3B5IiksTWUuZmlsdGVyJiYhTWUuZmlsdGVyKF9lLFRlKSlyZXR1cm47Y29uc3QgZz1wLmRpcm5hbWUoVGUpO3JldHVybiBfLmV4aXN0c1N5bmMoZyl8fFYoZyksUihC''@;'; put 'put ''LF9lLFRlLE1lKX19LDcxODk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0MTU1KTtjb25zdCBfPWIoNzc0OSkscD1iKDI1MjApLHtta2RpcnM6Vn09YigxMzgxKSx7cGF0aEV4aXN0czp3fT1iKDkyNTcpLHt1dGltZXNNaWxsaXM6UH09YigzMTgpLEY9YigyNzMzKTtmdW5jdGlv''@;'; put 'put ''biB6KCl7cmV0dXJuKHo9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFRlLE1lLFplPXt9KXsiZnVuY3Rpb24iPT10eXBlb2YgWmUmJihaZT17ZmlsdGVyOlplfSksWmUuY2xvYmJlcj0hKCJjbG9iYmVyImluIFplKXx8ISFaZS5jbG9iYmVyLFplLm92ZXJ3cml0ZT0ib3ZlcndyaXRlImlu''@;'; put 'put ''IFplPyEhWmUub3ZlcndyaXRlOlplLmNsb2JiZXIsWmUucHJlc2VydmVUaW1lc3RhbXBzJiYiaWEzMiI9PT1JLmFyY2gmJkkuZW1pdFdhcm5pbmcoIlVzaW5nIHRoZSBwcmVzZXJ2ZVRpbWVzdGFtcHMgb3B0aW9uIGluIDMyLWJpdCBub2RlIGlzIG5vdCByZWNvbW1lbmRlZDtcblxuXHRzZWUg''@;'; put 'put ''aHR0cHM6Ly9naXRodWIuY29tL2pwcmljaGFyZHNvbi9ub2RlLWZzLWV4dHJhL2lzc3Vlcy8yNjkiLCJXYXJuaW5nIiwiZnMtZXh0cmEtV0FSTjAwMDEiKTtjb25zdHtzcmNTdGF0OkIsZGVzdFN0YXQ6Z309eWllbGQgRi5jaGVja1BhdGhzKFRlLE1lLCJjb3B5IixaZSk7aWYoeWllbGQgRi5j''@;'; put 'put ''aGVja1BhcmVudFBhdGhzKFRlLEIsTWUsImNvcHkiKSwhKHlpZWxkIE4oVGUsTWUsWmUpKSlyZXR1cm47Y29uc3QgeD1wLmRpcm5hbWUoTWUpOyh5aWVsZCB3KHgpKXx8KHlpZWxkIFYoeCkpLHlpZWxkIEsoZyxUZSxNZSxaZSl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIE4o''@;'; put 'put ''VGUsTWUsWmUpe3JldHVybiBPLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBPKCl7cmV0dXJuKE89X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFRlLE1lLFplKXtyZXR1cm4hWmUuZmlsdGVyfHxaZS5maWx0ZXIoVGUsTWUpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5j''@;'; put 'put ''dGlvbiBLKFRlLE1lLFplLEIpe3JldHVybiBaLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBaKCl7cmV0dXJuIFo9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFRlLE1lLFplLEIpe2NvbnN0IHk9eWllbGQoQi5kZXJlZmVyZW5jZT9fLnN0YXQ6Xy5sc3RhdCkoTWUpO2lmKHku''@;'; put 'put ''aXNEaXJlY3RvcnkoKSlyZXR1cm4gZnVuY3Rpb24gaWUoVGUsTWUsWmUsQixnKXtyZXR1cm4gdWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSh5LFRlLE1lLFplLEIpO2lmKHkuaXNGaWxlKCl8fHkuaXNDaGFyYWN0ZXJEZXZpY2UoKXx8eS5pc0Jsb2NrRGV2aWNlKCkpcmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''IFkoVGUsTWUsWmUsQixnKXtyZXR1cm4gVy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KHksVGUsTWUsWmUsQik7aWYoeS5pc1N5bWJvbGljTGluaygpKXJldHVybiBmdW5jdGlvbiBnZShUZSxNZSxaZSxCKXtyZXR1cm4gX2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfShUZSxNZSxaZSxCKTt0aHJv''@;'; put 'put ''dyB5LmlzU29ja2V0KCk/bmV3IEVycm9yKGBDYW5ub3QgY29weSBhIHNvY2tldCBmaWxlOiAke01lfWApOnkuaXNGSUZPKCk/bmV3IEVycm9yKGBDYW5ub3QgY29weSBhIEZJRk8gcGlwZTogJHtNZX1gKTpuZXcgRXJyb3IoYFVua25vd24gZmlsZTogJHtNZX1gKX0pLFouYXBwbHkodGhpcyxh''@;'; put 'put ''cmd1bWVudHMpfWZ1bmN0aW9uIFcoKXtyZXR1cm4oVz1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVGUsTWUsWmUsQixnKXtpZighTWUpcmV0dXJuIHEoVGUsWmUsQixnKTtpZihnLm92ZXJ3cml0ZSlyZXR1cm4geWllbGQgXy51bmxpbmsoQikscShUZSxaZSxCLGcpO2lmKGcuZXJyb3JP''@;'; put 'put ''bkV4aXN0KXRocm93IG5ldyBFcnJvcihgJyR7Qn0nIGFscmVhZHkgZXhpc3RzYCl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHEoVGUsTWUsWmUsQil7cmV0dXJuIGVlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBlZSgpe3JldHVybihlZT1fYXN5bmNUb0dlbmVy''@;'; put 'put ''YXRvcihmdW5jdGlvbiooVGUsTWUsWmUsQil7aWYoeWllbGQgXy5jb3B5RmlsZShNZSxaZSksQi5wcmVzZXJ2ZVRpbWVzdGFtcHMpeyhmdW5jdGlvbiBKKFRlKXtyZXR1cm4hKDEyOCZUZSl9KShUZS5tb2RlKSYmKHlpZWxkIGZ1bmN0aW9uIHJlKFRlLE1lKXtyZXR1cm4gXy5jaG1vZChUZSwx''@;'; put 'put ''Mjh8TWUpfShaZSxUZS5tb2RlKSk7Y29uc3QgZz15aWVsZCBfLnN0YXQoTWUpO3lpZWxkIFAoWmUsZy5hdGltZSxnLm10aW1lKX1yZXR1cm4gXy5jaG1vZChaZSxUZS5tb2RlKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gdWUoKXtyZXR1cm4odWU9X2FzeW5jVG9HZW5lcmF0''@;'; put 'put ''b3IoZnVuY3Rpb24qKFRlLE1lLFplLEIsZyl7TWV8fCh5aWVsZCBfLm1rZGlyKEIpKTtjb25zdCB5PVtdO3ZhciBULHg9ITEsQz0hMTt0cnl7Zm9yKHZhciBqLEg9X2FzeW5jSXRlcmF0b3IoeWllbGQgXy5vcGVuZGlyKFplKSk7eD0hKGo9eWllbGQgSC5uZXh0KCkpLmRvbmU7eD0hMSl7Y29u''@;'; put 'put ''c3QgRT1qLnZhbHVlO3tjb25zdCBtPXAuam9pbihaZSxFLm5hbWUpLEE9cC5qb2luKEIsRS5uYW1lKTt5LnB1c2goTihtLEEsZykudGhlbihhZT0+e2lmKGFlKXJldHVybiBGLmNoZWNrUGF0aHMobSxBLCJjb3B5IixnKS50aGVuKCh7ZGVzdFN0YXQ6bmV9KT0+SyhuZSxtLEEsZykpfSkpfX19''@;'; put 'put ''Y2F0Y2goRSl7Qz0hMCxUPUV9ZmluYWxseXt0cnl7eCYmbnVsbCE9SC5yZXR1cm4mJih5aWVsZCBILnJldHVybigpKX1maW5hbGx5e2lmKEMpdGhyb3cgVH19eWllbGQgUHJvbWlzZS5hbGwoeSksTWV8fCh5aWVsZCBfLmNobW9kKEIsVGUubW9kZSkpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRz''@;'; put 'put ''KX1mdW5jdGlvbiBfZSgpe3JldHVybihfZT1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVGUsTWUsWmUsQil7bGV0IGc9eWllbGQgXy5yZWFkbGluayhNZSk7aWYoQi5kZXJlZmVyZW5jZSYmKGc9cC5yZXNvbHZlKEkuY3dkKCksZykpLCFUZSlyZXR1cm4gXy5zeW1saW5rKGcsWmUpO2xl''@;'; put 'put ''dCB5PW51bGw7dHJ5e3k9eWllbGQgXy5yZWFkbGluayhaZSl9Y2F0Y2goeCl7aWYoIkVJTlZBTCI9PT14LmNvZGV8fCJVTktOT1dOIj09PXguY29kZSlyZXR1cm4gXy5zeW1saW5rKGcsWmUpO3Rocm93IHh9aWYoQi5kZXJlZmVyZW5jZSYmKHk9cC5yZXNvbHZlKEkuY3dkKCkseSkpLEYuaXNT''@;'; put 'put ''cmNTdWJkaXIoZyx5KSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb3B5ICcke2d9JyB0byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNlbGYsICcke3l9Jy5gKTtpZihGLmlzU3JjU3ViZGlyKHksZykpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlICcke3l9JyB3aXRoICcke2d9Jy5g''@;'; put 'put ''KTtyZXR1cm4geWllbGQgXy51bmxpbmsoWmUpLF8uc3ltbGluayhnLFplKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y2UuZXhwb3J0cz1mdW5jdGlvbiBSKFRlLE1lKXtyZXR1cm4gei5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSw2NDY0OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2NvbnN0''@;'; put 'put ''IEk9Yig4OTgxKS5mcm9tUHJvbWlzZTtjZS5leHBvcnRzPXtjb3B5OkkoYig3MTg5KSksY29weVN5bmM6YigzODczKX19LDU1OTA6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7Y29uc3QgST1iKDg5ODEpLmZyb21Qcm9taXNlLF89Yig3NzQ5KSxwPWIoMjUyMCksVj1iKDEzODEpLHc9Yig0NTQy''@;'; put 'put ''KSxQPUkoZnVuY3Rpb24oKXt2YXIgUj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooTil7bGV0IE87dHJ5e089eWllbGQgXy5yZWFkZGlyKE4pfWNhdGNoe3JldHVybiBWLm1rZGlycyhOKX1yZXR1cm4gUHJvbWlzZS5hbGwoTy5tYXAoSz0+dy5yZW1vdmUocC5qb2luKE4sSykpKSl9KTty''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24geihOKXtyZXR1cm4gUi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKTtmdW5jdGlvbiBGKFIpe2xldCB6O3RyeXt6PV8ucmVhZGRpclN5bmMoUil9Y2F0Y2h7cmV0dXJuIFYubWtkaXJzU3luYyhSKX16LmZvckVhY2goTj0+e049cC5qb2luKFIsTiksdy5yZW1vdmVT''@;'; put 'put ''eW5jKE4pfSl9Y2UuZXhwb3J0cz17ZW1wdHlEaXJTeW5jOkYsZW1wdHlkaXJTeW5jOkYsZW1wdHlEaXI6UCxlbXB0eWRpcjpQfX0sNjUzMDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPWIoODk4MSkuZnJvbVByb21pc2UsXz1iKDI1MjApLHA9Yig3NzQ5KSxWPWIoMTM4MSk7ZnVu''@;'; put 'put ''Y3Rpb24gUCgpe3JldHVybihQPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihSKXtsZXQgejt0cnl7ej15aWVsZCBwLnN0YXQoUil9Y2F0Y2h7fWlmKHomJnouaXNGaWxlKCkpcmV0dXJuO2NvbnN0IE49Xy5kaXJuYW1lKFIpO2xldCBPPW51bGw7dHJ5e089eWllbGQgcC5zdGF0KE4pfWNh''@;'; put 'put ''dGNoKEspe2lmKCJFTk9FTlQiPT09Sy5jb2RlKXJldHVybiB5aWVsZCBWLm1rZGlycyhOKSx2b2lkKHlpZWxkIHAud3JpdGVGaWxlKFIsIiIpKTt0aHJvdyBLfU8uaXNEaXJlY3RvcnkoKT95aWVsZCBwLndyaXRlRmlsZShSLCIiKTp5aWVsZCBwLnJlYWRkaXIoTil9KSkuYXBwbHkodGhpcyxh''@;'; put 'put ''cmd1bWVudHMpfWNlLmV4cG9ydHM9e2NyZWF0ZUZpbGU6SShmdW5jdGlvbiB3KFIpe3JldHVybiBQLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGNyZWF0ZUZpbGVTeW5jOmZ1bmN0aW9uIEYoUil7bGV0IHo7dHJ5e3o9cC5zdGF0U3luYyhSKX1jYXRjaHt9aWYoeiYmei5pc0ZpbGUoKSlyZXR1''@;'; put 'put ''cm47Y29uc3QgTj1fLmRpcm5hbWUoUik7dHJ5e3Auc3RhdFN5bmMoTikuaXNEaXJlY3RvcnkoKXx8cC5yZWFkZGlyU3luYyhOKX1jYXRjaChPKXtpZighT3x8IkVOT0VOVCIhPT1PLmNvZGUpdGhyb3cgTztWLm1rZGlyc1N5bmMoTil9cC53cml0ZUZpbGVTeW5jKFIsIiIpfX19LDE3MjA6KGNl''@;'; put 'put ''LFgsYik9PnsidXNlIHN0cmljdCI7Y29uc3R7Y3JlYXRlRmlsZTpJLGNyZWF0ZUZpbGVTeW5jOl99PWIoNjUzMCkse2NyZWF0ZUxpbms6cCxjcmVhdGVMaW5rU3luYzpWfT1iKDQxNDcpLHtjcmVhdGVTeW1saW5rOncsY3JlYXRlU3ltbGlua1N5bmM6UH09YigzNjM1KTtjZS5leHBvcnRzPXtj''@;'; put 'put ''cmVhdGVGaWxlOkksY3JlYXRlRmlsZVN5bmM6XyxlbnN1cmVGaWxlOkksZW5zdXJlRmlsZVN5bmM6XyxjcmVhdGVMaW5rOnAsY3JlYXRlTGlua1N5bmM6VixlbnN1cmVMaW5rOnAsZW5zdXJlTGlua1N5bmM6VixjcmVhdGVTeW1saW5rOncsY3JlYXRlU3ltbGlua1N5bmM6UCxlbnN1cmVTeW1s''@;'; put 'put ''aW5rOncsZW5zdXJlU3ltbGlua1N5bmM6UH19LDQxNDc6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7Y29uc3QgST1iKDg5ODEpLmZyb21Qcm9taXNlLF89YigyNTIwKSxwPWIoNzc0OSksVj1iKDEzODEpLHtwYXRoRXhpc3RzOnd9PWIoOTI1Nykse2FyZUlkZW50aWNhbDpQfT1iKDI3MzMpO2Z1''@;'; put 'put ''bmN0aW9uIFIoKXtyZXR1cm4oUj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooTixPKXtsZXQgSyxaO3RyeXtLPXlpZWxkIHAubHN0YXQoTyl9Y2F0Y2h7fXRyeXtaPXlpZWxkIHAubHN0YXQoTil9Y2F0Y2gocSl7dGhyb3cgcS5tZXNzYWdlPXEubWVzc2FnZS5yZXBsYWNlKCJsc3RhdCIs''@;'; put 'put ''ImVuc3VyZUxpbmsiKSxxfWlmKEsmJlAoWixLKSlyZXR1cm47Y29uc3QgWT1fLmRpcm5hbWUoTyk7KHlpZWxkIHcoWSkpfHwoeWllbGQgVi5ta2RpcnMoWSkpLHlpZWxkIHAubGluayhOLE8pfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jZS5leHBvcnRzPXtjcmVhdGVMaW5rOkkoZnVuY3Rp''@;'; put 'put ''b24gRihOLE8pe3JldHVybiBSLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGNyZWF0ZUxpbmtTeW5jOmZ1bmN0aW9uIHooTixPKXtsZXQgSzt0cnl7Sz1wLmxzdGF0U3luYyhPKX1jYXRjaHt9dHJ5e2NvbnN0IFc9cC5sc3RhdFN5bmMoTik7aWYoSyYmUChXLEspKXJldHVybn1jYXRjaChXKXt0''@;'; put 'put ''aHJvdyBXLm1lc3NhZ2U9Vy5tZXNzYWdlLnJlcGxhY2UoImxzdGF0IiwiZW5zdXJlTGluayIpLFd9Y29uc3QgWj1fLmRpcm5hbWUoTyk7cmV0dXJuIHAuZXhpc3RzU3luYyhaKXx8Vi5ta2RpcnNTeW5jKFopLHAubGlua1N5bmMoTixPKX19fSw2MDcyOihjZSxYLGIpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O2NvbnN0IEk9YigyNTIwKSxfPWIoNzc0OSkse3BhdGhFeGlzdHM6cH09Yig5MjU3KSxWPWIoODk4MSkuZnJvbVByb21pc2U7ZnVuY3Rpb24gUCgpe3JldHVybihQPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihSLHope2lmKEkuaXNBYnNvbHV0ZShSKSl7dHJ5e3lpZWxkIF8ubHN0YXQo''@;'; put 'put ''Uil9Y2F0Y2goWil7dGhyb3cgWi5tZXNzYWdlPVoubWVzc2FnZS5yZXBsYWNlKCJsc3RhdCIsImVuc3VyZVN5bWxpbmsiKSxafXJldHVybnt0b0N3ZDpSLHRvRHN0OlJ9fWNvbnN0IE49SS5kaXJuYW1lKHopLE89SS5qb2luKE4sUik7aWYoeWllbGQgcChPKSlyZXR1cm57dG9Dd2Q6Tyx0b0Rz''@;'; put 'put ''dDpSfTt0cnl7eWllbGQgXy5sc3RhdChSKX1jYXRjaChaKXt0aHJvdyBaLm1lc3NhZ2U9Wi5tZXNzYWdlLnJlcGxhY2UoImxzdGF0IiwiZW5zdXJlU3ltbGluayIpLFp9cmV0dXJue3RvQ3dkOlIsdG9Ec3Q6SS5yZWxhdGl2ZShOLFIpfX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y2UuZXhw''@;'; put 'put ''b3J0cz17c3ltbGlua1BhdGhzOlYoZnVuY3Rpb24gdyhSLHope3JldHVybiBQLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLHN5bWxpbmtQYXRoc1N5bmM6ZnVuY3Rpb24gRihSLHope2lmKEkuaXNBYnNvbHV0ZShSKSl7aWYoIV8uZXhpc3RzU3luYyhSKSl0aHJvdyBuZXcgRXJyb3IoImFic29s''@;'; put 'put ''dXRlIHNyY3BhdGggZG9lcyBub3QgZXhpc3QiKTtyZXR1cm57dG9Dd2Q6Uix0b0RzdDpSfX1jb25zdCBOPUkuZGlybmFtZSh6KSxPPUkuam9pbihOLFIpO2lmKF8uZXhpc3RzU3luYyhPKSlyZXR1cm57dG9Dd2Q6Tyx0b0RzdDpSfTtpZighXy5leGlzdHNTeW5jKFIpKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigicmVsYXRpdmUgc3JjcGF0aCBkb2VzIG5vdCBleGlzdCIpO3JldHVybnt0b0N3ZDpSLHRvRHN0OkkucmVsYXRpdmUoTixSKX19fX0sOTI1OTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPWIoNzc0OSksXz1iKDg5ODEpLmZyb21Qcm9taXNlO2Z1bmN0aW9uIFYoKXtyZXR1cm4o''@;'; put 'put ''Vj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooUCxGKXtpZihGKXJldHVybiBGO2xldCBSO3RyeXtSPXlpZWxkIEkubHN0YXQoUCl9Y2F0Y2h7cmV0dXJuImZpbGUifXJldHVybiBSJiZSLmlzRGlyZWN0b3J5KCk/ImRpciI6ImZpbGUifSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jZS5l''@;'; put 'put ''eHBvcnRzPXtzeW1saW5rVHlwZTpfKGZ1bmN0aW9uIHAoUCxGKXtyZXR1cm4gVi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxzeW1saW5rVHlwZVN5bmM6ZnVuY3Rpb24gdyhQLEYpe2lmKEYpcmV0dXJuIEY7bGV0IFI7dHJ5e1I9SS5sc3RhdFN5bmMoUCl9Y2F0Y2h7cmV0dXJuImZpbGUifXJl''@;'; put 'put ''dHVybiBSJiZSLmlzRGlyZWN0b3J5KCk/ImRpciI6ImZpbGUifX19LDM2MzU6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7Y29uc3QgST1iKDg5ODEpLmZyb21Qcm9taXNlLF89YigyNTIwKSxwPWIoNzc0OSkse21rZGlyczpWLG1rZGlyc1N5bmM6d309YigxMzgxKSx7c3ltbGlua1BhdGhzOlAs''@;'; put 'put ''c3ltbGlua1BhdGhzU3luYzpGfT1iKDYwNzIpLHtzeW1saW5rVHlwZTpSLHN5bWxpbmtUeXBlU3luYzp6fT1iKDkyNTkpLHtwYXRoRXhpc3RzOk59PWIoOTI1Nykse2FyZUlkZW50aWNhbDpPfT1iKDI3MzMpO2Z1bmN0aW9uIFooKXtyZXR1cm4oWj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlv''@;'; put 'put ''biooVyxxLGVlKXtsZXQgSjt0cnl7Sj15aWVsZCBwLmxzdGF0KHEpfWNhdGNoe31pZihKJiZKLmlzU3ltYm9saWNMaW5rKCkpe2NvbnN0W2dlLF9lXT15aWVsZCBQcm9taXNlLmFsbChbcC5zdGF0KFcpLHAuc3RhdChxKV0pO2lmKE8oZ2UsX2UpKXJldHVybn1jb25zdCByZT15aWVsZCBQKFcs''@;'; put 'put ''cSk7Vz1yZS50b0RzdDtjb25zdCBpZT15aWVsZCBSKHJlLnRvQ3dkLGVlKSx1ZT1fLmRpcm5hbWUocSk7cmV0dXJuKHlpZWxkIE4odWUpKXx8KHlpZWxkIFYodWUpKSxwLnN5bWxpbmsoVyxxLGllKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y2UuZXhwb3J0cz17Y3JlYXRlU3ltbGluazpJ''@;'; put 'put ''KGZ1bmN0aW9uIEsoVyxxLGVlKXtyZXR1cm4gWi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxjcmVhdGVTeW1saW5rU3luYzpmdW5jdGlvbiBZKFcscSxlZSl7bGV0IEo7dHJ5e0o9cC5sc3RhdFN5bmMocSl9Y2F0Y2h7fWlmKEomJkouaXNTeW1ib2xpY0xpbmsoKSl7Y29uc3QgZ2U9cC5zdGF0''@;'; put 'put ''U3luYyhXKSxfZT1wLnN0YXRTeW5jKHEpO2lmKE8oZ2UsX2UpKXJldHVybn1jb25zdCByZT1GKFcscSk7Vz1yZS50b0RzdCxlZT16KHJlLnRvQ3dkLGVlKTtjb25zdCBpZT1fLmRpcm5hbWUocSk7cmV0dXJuIHAuZXhpc3RzU3luYyhpZSl8fHcoaWUpLHAuc3ltbGlua1N5bmMoVyxxLGVlKX19''@;'; put 'put ''fSw3NzQ5OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNDE1NSk7Y29uc3QgXz1iKDg5ODEpLmZyb21DYWxsYmFjayxwPWIoNzcpLFY9WyJhY2Nlc3MiLCJhcHBlbmRGaWxlIiwiY2htb2QiLCJjaG93biIsImNsb3NlIiwiY29weUZpbGUiLCJjcCIsImZjaG1vZCIsImZjaG93biIs''@;'; put 'put ''ImZkYXRhc3luYyIsImZzdGF0IiwiZnN5bmMiLCJmdHJ1bmNhdGUiLCJmdXRpbWVzIiwiZ2xvYiIsImxjaG1vZCIsImxjaG93biIsImx1dGltZXMiLCJsaW5rIiwibHN0YXQiLCJta2RpciIsIm1rZHRlbXAiLCJvcGVuIiwib3BlbmRpciIsInJlYWRkaXIiLCJyZWFkRmlsZSIsInJlYWRsaW5r''@;'; put 'put ''IiwicmVhbHBhdGgiLCJyZW5hbWUiLCJybSIsInJtZGlyIiwic3RhdCIsInN0YXRmcyIsInN5bWxpbmsiLCJ0cnVuY2F0ZSIsInVubGluayIsInV0aW1lcyIsIndyaXRlRmlsZSJdLmZpbHRlcih3PT4iZnVuY3Rpb24iPT10eXBlb2YgcFt3XSk7T2JqZWN0LmFzc2lnbihYLHApLFYuZm9yRWFj''@;'; put 'put ''aCh3PT57WFt3XT1fKHBbd10pfSksWC5leGlzdHM9ZnVuY3Rpb24odyxQKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgUD9wLmV4aXN0cyh3LFApOm5ldyBQcm9taXNlKEY9PnAuZXhpc3RzKHcsRikpfSxYLnJlYWQ9ZnVuY3Rpb24odyxQLEYsUix6LE4pe3JldHVybiJmdW5jdGlvbiI9PXR5''@;'; put 'put ''cGVvZiBOP3AucmVhZCh3LFAsRixSLHosTik6bmV3IFByb21pc2UoKE8sSyk9PntwLnJlYWQodyxQLEYsUix6LChaLFksVyk9PntpZihaKXJldHVybiBLKFopO08oe2J5dGVzUmVhZDpZLGJ1ZmZlcjpXfSl9KX0pfSxYLndyaXRlPWZ1bmN0aW9uKHcsUCwuLi5GKXtyZXR1cm4iZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgRltGLmxlbmd0aC0xXT9wLndyaXRlKHcsUCwuLi5GKTpuZXcgUHJvbWlzZSgoUix6KT0+e3Aud3JpdGUodyxQLC4uLkYsKE4sTyxLKT0+e2lmKE4pcmV0dXJuIHooTik7Uih7Ynl0ZXNXcml0dGVuOk8sYnVmZmVyOkt9KX0pfSl9LFgucmVhZHY9ZnVuY3Rpb24odyxQLC4uLkYp''@;'; put 'put ''e3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBGW0YubGVuZ3RoLTFdP3AucmVhZHYodyxQLC4uLkYpOm5ldyBQcm9taXNlKChSLHopPT57cC5yZWFkdih3LFAsLi4uRiwoTixPLEspPT57aWYoTilyZXR1cm4geihOKTtSKHtieXRlc1JlYWQ6TyxidWZmZXJzOkt9KX0pfSl9LFgud3JpdGV2PWZ1''@;'; put 'put ''bmN0aW9uKHcsUCwuLi5GKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRltGLmxlbmd0aC0xXT9wLndyaXRldih3LFAsLi4uRik6bmV3IFByb21pc2UoKFIseik9PntwLndyaXRldih3LFAsLi4uRiwoTixPLEspPT57aWYoTilyZXR1cm4geihOKTtSKHtieXRlc1dyaXR0ZW46TyxidWZmZXJz''@;'; put 'put ''Okt9KX0pfSl9LCJmdW5jdGlvbiI9PXR5cGVvZiBwLnJlYWxwYXRoLm5hdGl2ZT9YLnJlYWxwYXRoLm5hdGl2ZT1fKHAucmVhbHBhdGgubmF0aXZlKTpJLmVtaXRXYXJuaW5nKCJmcy5yZWFscGF0aC5uYXRpdmUgaXMgbm90IGEgZnVuY3Rpb24uIElzIGZzIGJlaW5nIG1vbmtleS1wYXRjaGVk''@;'; put 'put ''PyIsIldhcm5pbmciLCJmcy1leHRyYS1XQVJOMDAwMyIpfSw1Njc0OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9ey4uLmIoNzc0OSksLi4uYig2NDY0KSwuLi5iKDU1OTApLC4uLmIoMTcyMCksLi4uYig2NTczKSwuLi5iKDEzODEpLC4uLmIoNTMwKSwuLi5iKDQ2NzApLC4u''@;'; put 'put ''LmIoOTI1NyksLi4uYig0NTQyKX19LDY1NzM6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7Y29uc3QgST1iKDg5ODEpLmZyb21Qcm9taXNlLF89Yig3MTgzKTtfLm91dHB1dEpzb249SShiKDM1MDgpKSxfLm91dHB1dEpzb25TeW5jPWIoOTU3OCksXy5vdXRwdXRKU09OPV8ub3V0cHV0SnNvbixf''@;'; put 'put ''Lm91dHB1dEpTT05TeW5jPV8ub3V0cHV0SnNvblN5bmMsXy53cml0ZUpTT049Xy53cml0ZUpzb24sXy53cml0ZUpTT05TeW5jPV8ud3JpdGVKc29uU3luYyxfLnJlYWRKU09OPV8ucmVhZEpzb24sXy5yZWFkSlNPTlN5bmM9Xy5yZWFkSnNvblN5bmMsY2UuZXhwb3J0cz1ffSw3MTgzOihjZSxY''@;'; put 'put ''LGIpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9Yig2ODEzKTtjZS5leHBvcnRzPXtyZWFkSnNvbjpJLnJlYWRGaWxlLHJlYWRKc29uU3luYzpJLnJlYWRGaWxlU3luYyx3cml0ZUpzb246SS53cml0ZUZpbGUsd3JpdGVKc29uU3luYzpJLndyaXRlRmlsZVN5bmN9fSw5NTc4OihjZSxYLGIpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO2NvbnN0e3N0cmluZ2lmeTpJfT1iKDY3ODApLHtvdXRwdXRGaWxlU3luYzpffT1iKDQ2NzApO2NlLmV4cG9ydHM9ZnVuY3Rpb24gcChWLHcsUCl7Y29uc3QgRj1JKHcsUCk7XyhWLEYsUCl9fSwzNTA4OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2NvbnN0e3N0cmluZ2lm''@;'; put 'put ''eTpJfT1iKDY3ODApLHtvdXRwdXRGaWxlOl99PWIoNDY3MCk7ZnVuY3Rpb24gVigpe3JldHVybihWPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKih3LFAsRj17fSl7Y29uc3QgUj1JKFAsRik7eWllbGQgXyh3LFIsRil9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNlLmV4cG9ydHM9ZnVu''@;'; put 'put ''Y3Rpb24gcCh3LFApe3JldHVybiBWLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LDEzODE6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7Y29uc3QgST1iKDg5ODEpLmZyb21Qcm9taXNlLHttYWtlRGlyOl8sbWFrZURpclN5bmM6cH09Yig4MjMzKSxWPUkoXyk7Y2UuZXhwb3J0cz17bWtkaXJzOlYs''@;'; put 'put ''bWtkaXJzU3luYzpwLG1rZGlycDpWLG1rZGlycFN5bmM6cCxlbnN1cmVEaXI6VixlbnN1cmVEaXJTeW5jOnB9fSw4MjMzOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9Yig3NzQ5KSx7Y2hlY2tQYXRoOl99PWIoMzQ2OCkscD1WPT4ibnVtYmVyIj09dHlwZW9mIFY/Vjp7bW9kZTo1''@;'; put 'put ''MTEsLi4uVn0ubW9kZTtjZS5leHBvcnRzLm1ha2VEaXI9ZnVuY3Rpb24oKXt2YXIgVj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbioodyxQKXtyZXR1cm4gXyh3KSxJLm1rZGlyKHcse21vZGU6cChQKSxyZWN1cnNpdmU6ITB9KX0pO3JldHVybiBmdW5jdGlvbih3LFApe3JldHVybiBWLmFw''@;'; put 'put ''cGx5KHRoaXMsYXJndW1lbnRzKX19KCksY2UuZXhwb3J0cy5tYWtlRGlyU3luYz0oVix3KT0+KF8oViksSS5ta2RpclN5bmMoVix7bW9kZTpwKHcpLHJlY3Vyc2l2ZTohMH0pKX0sMzQ2ODooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQxNTUpO2NvbnN0IF89YigyNTIwKTtjZS5l''@;'; put 'put ''eHBvcnRzLmNoZWNrUGF0aD1mdW5jdGlvbihWKXtpZigid2luMzIiPT09SS5wbGF0Zm9ybSYmL1s8PjoifD8qXS8udGVzdChWLnJlcGxhY2UoXy5wYXJzZShWKS5yb290LCIiKSkpe2NvbnN0IFA9bmV3IEVycm9yKGBQYXRoIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyczogJHtWfWApO3Ro''@;'; put 'put ''cm93IFAuY29kZT0iRUlOVkFMIixQfX19LDUzMDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPWIoODk4MSkuZnJvbVByb21pc2U7Y2UuZXhwb3J0cz17bW92ZTpJKGIoNDM2KSksbW92ZVN5bmM6YigzNzM2KX19LDM3MzY6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7Y29uc3QgST1i''@;'; put 'put ''KDc3KSxfPWIoMjUyMCkscD1iKDY0NjQpLmNvcHlTeW5jLFY9Yig0NTQyKS5yZW1vdmVTeW5jLHc9YigxMzgxKS5ta2RpcnBTeW5jLFA9YigyNzMzKTtmdW5jdGlvbiBOKEssWixZKXt0cnl7SS5yZW5hbWVTeW5jKEssWil9Y2F0Y2goVyl7aWYoIkVYREVWIiE9PVcuY29kZSl0aHJvdyBXO3Jl''@;'; put 'put ''dHVybiBmdW5jdGlvbiBPKEssWixZKXtyZXR1cm4gcChLLFose292ZXJ3cml0ZTpZLGVycm9yT25FeGlzdDohMCxwcmVzZXJ2ZVRpbWVzdGFtcHM6ITB9KSxWKEspfShLLFosWSl9fWNlLmV4cG9ydHM9ZnVuY3Rpb24gRihLLFosWSl7Y29uc3QgVz0oWT1ZfHx7fSkub3ZlcndyaXRlfHxZLmNs''@;'; put 'put ''b2JiZXJ8fCExLHtzcmNTdGF0OnEsaXNDaGFuZ2luZ0Nhc2U6ZWU9ITF9PVAuY2hlY2tQYXRoc1N5bmMoSyxaLCJtb3ZlIixZKTtyZXR1cm4gUC5jaGVja1BhcmVudFBhdGhzU3luYyhLLHEsWiwibW92ZSIpLGZ1bmN0aW9uIFIoSyl7Y29uc3QgWj1fLmRpcm5hbWUoSyk7cmV0dXJuIF8ucGFy''@;'; put 'put ''c2UoWikucm9vdD09PVp9KFopfHx3KF8uZGlybmFtZShaKSksZnVuY3Rpb24geihLLFosWSxXKXtpZihXKXJldHVybiBOKEssWixZKTtpZihZKXJldHVybiBWKFopLE4oSyxaLFkpO2lmKEkuZXhpc3RzU3luYyhaKSl0aHJvdyBuZXcgRXJyb3IoImRlc3QgYWxyZWFkeSBleGlzdHMuIik7cmV0''@;'; put 'put ''dXJuIE4oSyxaLFkpfShLLFosVyxlZSl9fSw0MzY6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7Y29uc3QgST1iKDc3NDkpLF89YigyNTIwKSx7Y29weTpwfT1iKDY0NjQpLHtyZW1vdmU6Vn09Yig0NTQyKSx7bWtkaXJwOnd9PWIoMTM4MSkse3BhdGhFeGlzdHM6UH09Yig5MjU3KSxGPWIoMjcz''@;'; put 'put ''Myk7ZnVuY3Rpb24geigpe3JldHVybiB6PV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihZLFcscT17fSl7Y29uc3QgZWU9cS5vdmVyd3JpdGV8fHEuY2xvYmJlcnx8ITEse3NyY1N0YXQ6Sixpc0NoYW5naW5nQ2FzZTpyZT0hMX09eWllbGQgRi5jaGVja1BhdGhzKFksVywibW92ZSIscSk7''@;'; put 'put ''eWllbGQgRi5jaGVja1BhcmVudFBhdGhzKFksSixXLCJtb3ZlIik7Y29uc3QgaWU9Xy5kaXJuYW1lKFcpO3JldHVybiBfLnBhcnNlKGllKS5yb290IT09aWUmJih5aWVsZCB3KGllKSksZnVuY3Rpb24gTihZLFcscSxlZSl7cmV0dXJuIE8uYXBwbHkodGhpcyxhcmd1bWVudHMpfShZLFcsZWUs''@;'; put 'put ''cmUpfSksei5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTygpe3JldHVybiBPPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihZLFcscSxlZSl7aWYoIWVlKWlmKHEpeWllbGQgVihXKTtlbHNlIGlmKHlpZWxkIFAoVykpdGhyb3cgbmV3IEVycm9yKCJkZXN0IGFscmVhZHkgZXhp''@;'; put 'put ''c3RzLiIpO3RyeXt5aWVsZCBJLnJlbmFtZShZLFcpfWNhdGNoKEope2lmKCJFWERFViIhPT1KLmNvZGUpdGhyb3cgSjt5aWVsZCBmdW5jdGlvbiBLKFksVyxxKXtyZXR1cm4gWi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KFksVyxxKX19KSxPLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlv''@;'; put 'put ''biBaKCl7cmV0dXJuKFo9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFksVyxxKXtyZXR1cm4geWllbGQgcChZLFcse292ZXJ3cml0ZTpxLGVycm9yT25FeGlzdDohMCxwcmVzZXJ2ZVRpbWVzdGFtcHM6ITB9KSxWKFkpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jZS5leHBvcnRzPWZ1''@;'; put 'put ''bmN0aW9uIFIoWSxXKXtyZXR1cm4gei5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSw0NjcwOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9Yig4OTgxKS5mcm9tUHJvbWlzZSxfPWIoNzc0OSkscD1iKDI1MjApLFY9YigxMzgxKSx3PWIoOTI1NykucGF0aEV4aXN0cztmdW5jdGlvbiBG''@;'; put 'put ''KCl7cmV0dXJuKEY9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKHosTixPPSJ1dGYtOCIpe2NvbnN0IEs9cC5kaXJuYW1lKHopO3JldHVybih5aWVsZCB3KEspKXx8KHlpZWxkIFYubWtkaXJzKEspKSxfLndyaXRlRmlsZSh6LE4sTyl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNlLmV4''@;'; put 'put ''cG9ydHM9e291dHB1dEZpbGU6SShmdW5jdGlvbiBQKHosTil7cmV0dXJuIEYuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksb3V0cHV0RmlsZVN5bmM6ZnVuY3Rpb24gUih6LC4uLk4pe2NvbnN0IE89cC5kaXJuYW1lKHopO18uZXhpc3RzU3luYyhPKXx8Vi5ta2RpcnNTeW5jKE8pLF8ud3JpdGVG''@;'; put 'put ''aWxlU3luYyh6LC4uLk4pfX19LDkyNTc6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7Y29uc3QgST1iKDg5ODEpLmZyb21Qcm9taXNlLF89Yig3NzQ5KTtjZS5leHBvcnRzPXtwYXRoRXhpc3RzOkkoZnVuY3Rpb24gcChWKXtyZXR1cm4gXy5hY2Nlc3MoVikudGhlbigoKT0+ITApLmNhdGNoKCgp''@;'; put 'put ''PT4hMSl9KSxwYXRoRXhpc3RzU3luYzpfLmV4aXN0c1N5bmN9fSw0NTQyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9Yig3NyksXz1iKDg5ODEpLmZyb21DYWxsYmFjaztjZS5leHBvcnRzPXtyZW1vdmU6XyhmdW5jdGlvbiBwKHcsUCl7SS5ybSh3LHtyZWN1cnNpdmU6ITAsZm9y''@;'; put 'put ''Y2U6ITB9LFApfSkscmVtb3ZlU3luYzpmdW5jdGlvbiBWKHcpe0kucm1TeW5jKHcse3JlY3Vyc2l2ZTohMCxmb3JjZTohMH0pfX19LDI3MzM6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7Y29uc3QgST1iKDc3NDkpLF89YigyNTIwKSxwPWIoODk4MSkuZnJvbVByb21pc2U7ZnVuY3Rpb24gRigp''@;'; put 'put ''e3JldHVybihGPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihXLHEsZWUsSil7Y29uc3R7c3JjU3RhdDpyZSxkZXN0U3RhdDppZX09eWllbGQgZnVuY3Rpb24gVihXLHEsZWUpe2NvbnN0IEo9ZWUuZGVyZWZlcmVuY2U/cmU9Pkkuc3RhdChyZSx7YmlnaW50OiEwfSk6cmU9PkkubHN0YXQo''@;'; put 'put ''cmUse2JpZ2ludDohMH0pO3JldHVybiBQcm9taXNlLmFsbChbSihXKSxKKHEpLmNhdGNoKHJlPT57aWYoIkVOT0VOVCI9PT1yZS5jb2RlKXJldHVybiBudWxsO3Rocm93IHJlfSldKS50aGVuKChbcmUsaWVdKT0+KHtzcmNTdGF0OnJlLGRlc3RTdGF0OmllfSkpfShXLHEsSik7aWYoaWUpe2lm''@;'; put 'put ''KEsocmUsaWUpKXtjb25zdCB1ZT1fLmJhc2VuYW1lKFcpLGdlPV8uYmFzZW5hbWUocSk7aWYoIm1vdmUiPT09ZWUmJnVlIT09Z2UmJnVlLnRvTG93ZXJDYXNlKCk9PT1nZS50b0xvd2VyQ2FzZSgpKXJldHVybntzcmNTdGF0OnJlLGRlc3RTdGF0OmllLGlzQ2hhbmdpbmdDYXNlOiEwfTt0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIlNvdXJjZSBhbmQgZGVzdGluYXRpb24gbXVzdCBub3QgYmUgdGhlIHNhbWUuIil9aWYocmUuaXNEaXJlY3RvcnkoKSYmIWllLmlzRGlyZWN0b3J5KCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlIG5vbi1kaXJlY3RvcnkgJyR7cX0nIHdpdGggZGlyZWN0''@;'; put 'put ''b3J5ICcke1d9Jy5gKTtpZighcmUuaXNEaXJlY3RvcnkoKSYmaWUuaXNEaXJlY3RvcnkoKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgZGlyZWN0b3J5ICcke3F9JyB3aXRoIG5vbi1kaXJlY3RvcnkgJyR7V30nLmApfWlmKHJlLmlzRGlyZWN0b3J5KCkmJlooVyxxKSl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoWShXLHEsZWUpKTtyZXR1cm57c3JjU3RhdDpyZSxkZXN0U3RhdDppZX19KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHooVyxxLGVlLEope3JldHVybiBOLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBOKCl7cmV0dXJuKE49X2FzeW5jVG9HZW5l''@;'; put 'put ''cmF0b3IoZnVuY3Rpb24qKFcscSxlZSxKKXtjb25zdCByZT1fLnJlc29sdmUoXy5kaXJuYW1lKFcpKSxpZT1fLnJlc29sdmUoXy5kaXJuYW1lKGVlKSk7aWYoaWU9PT1yZXx8aWU9PT1fLnBhcnNlKGllKS5yb290KXJldHVybjtsZXQgdWU7dHJ5e3VlPXlpZWxkIEkuc3RhdChpZSx7YmlnaW50''@;'; put 'put ''OiEwfSl9Y2F0Y2goZ2Upe2lmKCJFTk9FTlQiPT09Z2UuY29kZSlyZXR1cm47dGhyb3cgZ2V9aWYoSyhxLHVlKSl0aHJvdyBuZXcgRXJyb3IoWShXLGVlLEopKTtyZXR1cm4geihXLHEsaWUsSil9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEsoVyxxKXtyZXR1cm4gcS5pbm8m''@;'; put 'put ''JnEuZGV2JiZxLmlubz09PVcuaW5vJiZxLmRldj09PVcuZGV2fWZ1bmN0aW9uIFooVyxxKXtjb25zdCBlZT1fLnJlc29sdmUoVykuc3BsaXQoXy5zZXApLmZpbHRlcihyZT0+cmUpLEo9Xy5yZXNvbHZlKHEpLnNwbGl0KF8uc2VwKS5maWx0ZXIocmU9PnJlKTtyZXR1cm4gZWUuZXZlcnkoKHJl''@;'; put 'put ''LGllKT0+SltpZV09PT1yZSl9ZnVuY3Rpb24gWShXLHEsZWUpe3JldHVybmBDYW5ub3QgJHtlZX0gJyR7V30nIHRvIGEgc3ViZGlyZWN0b3J5IG9mIGl0c2VsZiwgJyR7cX0nLmB9Y2UuZXhwb3J0cz17Y2hlY2tQYXRoczpwKGZ1bmN0aW9uIFAoVyxxLGVlLEope3JldHVybiBGLmFwcGx5KHRo''@;'; put 'put ''aXMsYXJndW1lbnRzKX0pLGNoZWNrUGF0aHNTeW5jOmZ1bmN0aW9uIFIoVyxxLGVlLEope2NvbnN0e3NyY1N0YXQ6cmUsZGVzdFN0YXQ6aWV9PWZ1bmN0aW9uIHcoVyxxLGVlKXtsZXQgSjtjb25zdCByZT1lZS5kZXJlZmVyZW5jZT91ZT0+SS5zdGF0U3luYyh1ZSx7YmlnaW50OiEwfSk6dWU9''@;'; put 'put ''PkkubHN0YXRTeW5jKHVlLHtiaWdpbnQ6ITB9KSxpZT1yZShXKTt0cnl7Sj1yZShxKX1jYXRjaCh1ZSl7aWYoIkVOT0VOVCI9PT11ZS5jb2RlKXJldHVybntzcmNTdGF0OmllLGRlc3RTdGF0Om51bGx9O3Rocm93IHVlfXJldHVybntzcmNTdGF0OmllLGRlc3RTdGF0Okp9fShXLHEsSik7aWYo''@;'; put 'put ''aWUpe2lmKEsocmUsaWUpKXtjb25zdCB1ZT1fLmJhc2VuYW1lKFcpLGdlPV8uYmFzZW5hbWUocSk7aWYoIm1vdmUiPT09ZWUmJnVlIT09Z2UmJnVlLnRvTG93ZXJDYXNlKCk9PT1nZS50b0xvd2VyQ2FzZSgpKXJldHVybntzcmNTdGF0OnJlLGRlc3RTdGF0OmllLGlzQ2hhbmdpbmdDYXNlOiEw''@;'; put 'put ''fTt0aHJvdyBuZXcgRXJyb3IoIlNvdXJjZSBhbmQgZGVzdGluYXRpb24gbXVzdCBub3QgYmUgdGhlIHNhbWUuIil9aWYocmUuaXNEaXJlY3RvcnkoKSYmIWllLmlzRGlyZWN0b3J5KCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlIG5vbi1kaXJlY3RvcnkgJyR7cX0nIHdpdGgg''@;'; put 'put ''ZGlyZWN0b3J5ICcke1d9Jy5gKTtpZighcmUuaXNEaXJlY3RvcnkoKSYmaWUuaXNEaXJlY3RvcnkoKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgZGlyZWN0b3J5ICcke3F9JyB3aXRoIG5vbi1kaXJlY3RvcnkgJyR7V30nLmApfWlmKHJlLmlzRGlyZWN0b3J5KCkmJlooVyxx''@;'; put 'put ''KSl0aHJvdyBuZXcgRXJyb3IoWShXLHEsZWUpKTtyZXR1cm57c3JjU3RhdDpyZSxkZXN0U3RhdDppZX19LGNoZWNrUGFyZW50UGF0aHM6cCh6KSxjaGVja1BhcmVudFBhdGhzU3luYzpmdW5jdGlvbiBPKFcscSxlZSxKKXtjb25zdCByZT1fLnJlc29sdmUoXy5kaXJuYW1lKFcpKSxpZT1fLnJl''@;'; put 'put ''c29sdmUoXy5kaXJuYW1lKGVlKSk7aWYoaWU9PT1yZXx8aWU9PT1fLnBhcnNlKGllKS5yb290KXJldHVybjtsZXQgdWU7dHJ5e3VlPUkuc3RhdFN5bmMoaWUse2JpZ2ludDohMH0pfWNhdGNoKGdlKXtpZigiRU5PRU5UIj09PWdlLmNvZGUpcmV0dXJuO3Rocm93IGdlfWlmKEsocSx1ZSkpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKFkoVyxlZSxKKSk7cmV0dXJuIE8oVyxxLGllLEopfSxpc1NyY1N1YmRpcjpaLGFyZUlkZW50aWNhbDpLfX0sMzE4OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9Yig3NzQ5KSxfPWIoODk4MSkuZnJvbVByb21pc2U7ZnVuY3Rpb24gVigpe3JldHVybihWPV9h''@;'; put 'put ''c3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihQLEYsUil7Y29uc3Qgej15aWVsZCBJLm9wZW4oUCwicisiKTtsZXQgTj1udWxsO3RyeXt5aWVsZCBJLmZ1dGltZXMoeixGLFIpfWZpbmFsbHl7dHJ5e3lpZWxkIEkuY2xvc2Uoeil9Y2F0Y2goTyl7Tj1PfX1pZihOKXRocm93IE59KSkuYXBwbHko''@;'; put 'put ''dGhpcyxhcmd1bWVudHMpfWNlLmV4cG9ydHM9e3V0aW1lc01pbGxpczpfKGZ1bmN0aW9uIHAoUCxGLFIpe3JldHVybiBWLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLHV0aW1lc01pbGxpc1N5bmM6ZnVuY3Rpb24gdyhQLEYsUil7Y29uc3Qgej1JLm9wZW5TeW5jKFAsInIrIik7cmV0dXJuIEku''@;'; put 'put ''ZnV0aW1lc1N5bmMoeixGLFIpLEkuY2xvc2VTeW5jKHopfX19LDc2NDg6Y2U9PnsidXNlIHN0cmljdCI7dmFyIGI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxJPU1hdGgubWF4LHA9ZnVuY3Rpb24oRixSKXtmb3IodmFyIHo9W10sTj0wO048Ri5sZW5ndGg7Tis9MSl6W05dPUZbTl07Zm9y''@;'; put 'put ''KHZhciBPPTA7TzxSLmxlbmd0aDtPKz0xKXpbTytGLmxlbmd0aF09UltPXTtyZXR1cm4gen07Y2UuZXhwb3J0cz1mdW5jdGlvbihGKXt2YXIgUj10aGlzO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBSfHwiW29iamVjdCBGdW5jdGlvbl0iIT09Yi5hcHBseShSKSl0aHJvdyBuZXcgVHlwZUVycm9y''@;'; put 'put ''KCJGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICIrUik7Zm9yKHZhciBOLHo9ZnVuY3Rpb24oRil7Zm9yKHZhciB6PVtdLE49MSxPPTA7TjxGLmxlbmd0aDtOKz0xLE8rPTEpeltPXT1GW05dO3JldHVybiB6fShhcmd1bWVudHMpLEs9SSgwLFIubGVuZ3Ro''@;'; put 'put ''LXoubGVuZ3RoKSxaPVtdLFk9MDtZPEs7WSsrKVpbWV09IiQiK1k7aWYoTj1GdW5jdGlvbigiYmluZGVyIiwicmV0dXJuIGZ1bmN0aW9uICgiK2Z1bmN0aW9uKFApe2Zvcih2YXIgUj0iIix6PTA7ejxQLmxlbmd0aDt6Kz0xKVIrPVBbel0seisxPFAubGVuZ3RoJiYoUis9IiwiKTtyZXR1cm4g''@;'; put 'put ''Un0oWikrIil7IHJldHVybiBiaW5kZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOyB9IikoZnVuY3Rpb24oKXtpZih0aGlzIGluc3RhbmNlb2YgTil7dmFyIHE9Ui5hcHBseSh0aGlzLHAoeixhcmd1bWVudHMpKTtyZXR1cm4gT2JqZWN0KHEpPT09cT9xOnRoaXN9cmV0dXJuIFIuYXBwbHkoRixw''@;'; put 'put ''KHosYXJndW1lbnRzKSl9KSxSLnByb3RvdHlwZSl7dmFyIFc9ZnVuY3Rpb24oKXt9O1cucHJvdG90eXBlPVIucHJvdG90eXBlLE4ucHJvdG90eXBlPW5ldyBXLFcucHJvdG90eXBlPW51bGx9cmV0dXJuIE59fSw4NjEyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNzY0OCk7Y2Uu''@;'; put 'put ''ZXhwb3J0cz1GdW5jdGlvbi5wcm90b3R5cGUuYmluZHx8SX0sMjEwOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJLF89Yig4ODkyKSxwPWIoMTY0OCksVj1iKDM5ODEpLHc9Yig0NzI2KSxQPWIoNjcxMiksRj1iKDM0NjQpLFI9Yig0NDUzKSx6PWIoMzkxNSksTj1iKDk3MzgpLE89Yig2''@;'; put 'put ''MzI5KSxLPWIoMjI2NCksWj1iKDU3MzApLFk9Yig3MDcpLFc9YigzODYyKSxxPWIoOTU1MCksZWU9RnVuY3Rpb24sSj1mdW5jdGlvbih5ZSl7dHJ5e3JldHVybiBlZSgnInVzZSBzdHJpY3QiOyByZXR1cm4gKCcreWUrIikuY29uc3RydWN0b3I7IikoKX1jYXRjaHt9fSxyZT1iKDcyOTYpLGll''@;'; put 'put ''PWIoNDQyOSksdWU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgUn0sZ2U9cmU/ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIHVlfWNhdGNoe3RyeXtyZXR1cm4gcmUoYXJndW1lbnRzLCJjYWxsZWUiKS5nZXR9Y2F0Y2h7cmV0dXJuIHVlfX19KCk6dWUsX2U9YigxNDA1KSgpLFRlPWIoMTYxOCksTWU9Yig4''@;'; put 'put ''ODk5KSxaZT1iKDQ0MyksQj1iKDE3NjgpLGc9Yig4OTI4KSx5PXt9LHg9dHlwZW9mIFVpbnQ4QXJyYXk+InUifHwhVGU/STpUZShVaW50OEFycmF5KSxDPXtfX3Byb3RvX186bnVsbCwiJUFnZ3JlZ2F0ZUVycm9yJSI6dHlwZW9mIEFnZ3JlZ2F0ZUVycm9yPiJ1Ij9JOkFnZ3JlZ2F0ZUVycm9y''@;'; put 'put ''LCIlQXJyYXklIjpBcnJheSwiJUFycmF5QnVmZmVyJSI6dHlwZW9mIEFycmF5QnVmZmVyPiJ1Ij9JOkFycmF5QnVmZmVyLCIlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUiOl9lJiZUZT9UZShbXVtTeW1ib2wuaXRlcmF0b3JdKCkpOkksIiVBc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGUl''@;'; put 'put ''IjpJLCIlQXN5bmNGdW5jdGlvbiUiOnksIiVBc3luY0dlbmVyYXRvciUiOnksIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSI6eSwiJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlIjp5LCIlQXRvbWljcyUiOnR5cGVvZiBBdG9taWNzPiJ1Ij9JOkF0b21pY3MsIiVCaWdJbnQlIjp0eXBlb2YgQmln''@;'; put 'put ''SW50PiJ1Ij9JOkJpZ0ludCwiJUJpZ0ludDY0QXJyYXklIjp0eXBlb2YgQmlnSW50NjRBcnJheT4idSI/STpCaWdJbnQ2NEFycmF5LCIlQmlnVWludDY0QXJyYXklIjp0eXBlb2YgQmlnVWludDY0QXJyYXk+InUiP0k6QmlnVWludDY0QXJyYXksIiVCb29sZWFuJSI6Qm9vbGVhbiwiJURhdGFW''@;'; put 'put ''aWV3JSI6dHlwZW9mIERhdGFWaWV3PiJ1Ij9JOkRhdGFWaWV3LCIlRGF0ZSUiOkRhdGUsIiVkZWNvZGVVUkklIjpkZWNvZGVVUkksIiVkZWNvZGVVUklDb21wb25lbnQlIjpkZWNvZGVVUklDb21wb25lbnQsIiVlbmNvZGVVUkklIjplbmNvZGVVUkksIiVlbmNvZGVVUklDb21wb25lbnQlIjpl''@;'; put 'put ''bmNvZGVVUklDb21wb25lbnQsIiVFcnJvciUiOnAsIiVldmFsJSI6ZXZhbCwiJUV2YWxFcnJvciUiOlYsIiVGbG9hdDE2QXJyYXklIjp0eXBlb2YgRmxvYXQxNkFycmF5PiJ1Ij9JOkZsb2F0MTZBcnJheSwiJUZsb2F0MzJBcnJheSUiOnR5cGVvZiBGbG9hdDMyQXJyYXk+InUiP0k6RmxvYXQz''@;'; put 'put ''MkFycmF5LCIlRmxvYXQ2NEFycmF5JSI6dHlwZW9mIEZsb2F0NjRBcnJheT4idSI/STpGbG9hdDY0QXJyYXksIiVGaW5hbGl6YXRpb25SZWdpc3RyeSUiOnR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT4idSI/STpGaW5hbGl6YXRpb25SZWdpc3RyeSwiJUZ1bmN0aW9uJSI6ZWUsIiVHZW5l''@;'; put 'put ''cmF0b3JGdW5jdGlvbiUiOnksIiVJbnQ4QXJyYXklIjp0eXBlb2YgSW50OEFycmF5PiJ1Ij9JOkludDhBcnJheSwiJUludDE2QXJyYXklIjp0eXBlb2YgSW50MTZBcnJheT4idSI/STpJbnQxNkFycmF5LCIlSW50MzJBcnJheSUiOnR5cGVvZiBJbnQzMkFycmF5PiJ1Ij9JOkludDMyQXJyYXks''@;'; put 'put ''IiVpc0Zpbml0ZSUiOmlzRmluaXRlLCIlaXNOYU4lIjppc05hTiwiJUl0ZXJhdG9yUHJvdG90eXBlJSI6X2UmJlRlP1RlKFRlKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkpOkksIiVKU09OJSI6Im9iamVjdCI9PXR5cGVvZiBKU09OP0pTT046SSwiJU1hcCUiOnR5cGVvZiBNYXA+InUiP0k6TWFw''@;'; put 'put ''LCIlTWFwSXRlcmF0b3JQcm90b3R5cGUlIjp0eXBlb2YgTWFwPiJ1Inx8IV9lfHwhVGU/STpUZSgobmV3IE1hcClbU3ltYm9sLml0ZXJhdG9yXSgpKSwiJU1hdGglIjpNYXRoLCIlTnVtYmVyJSI6TnVtYmVyLCIlT2JqZWN0JSI6XywiJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Il''@;'; put 'put ''IjpyZSwiJXBhcnNlRmxvYXQlIjpwYXJzZUZsb2F0LCIlcGFyc2VJbnQlIjpwYXJzZUludCwiJVByb21pc2UlIjp0eXBlb2YgUHJvbWlzZT4idSI/STpQcm9taXNlLCIlUHJveHklIjp0eXBlb2YgUHJveHk+InUiP0k6UHJveHksIiVSYW5nZUVycm9yJSI6dywiJVJlZmVyZW5jZUVycm9yJSI6''@;'; put 'put ''UCwiJVJlZmxlY3QlIjp0eXBlb2YgUmVmbGVjdD4idSI/STpSZWZsZWN0LCIlUmVnRXhwJSI6UmVnRXhwLCIlU2V0JSI6dHlwZW9mIFNldD4idSI/STpTZXQsIiVTZXRJdGVyYXRvclByb3RvdHlwZSUiOnR5cGVvZiBTZXQ+InUifHwhX2V8fCFUZT9JOlRlKChuZXcgU2V0KVtTeW1ib2wuaXRl''@;'; put 'put ''cmF0b3JdKCkpLCIlU2hhcmVkQXJyYXlCdWZmZXIlIjp0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI+InUiP0k6U2hhcmVkQXJyYXlCdWZmZXIsIiVTdHJpbmclIjpTdHJpbmcsIiVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUiOl9lJiZUZT9UZSgiIltTeW1ib2wuaXRlcmF0b3JdKCkpOkksIiVT''@;'; put 'put ''eW1ib2wlIjpfZT9TeW1ib2w6SSwiJVN5bnRheEVycm9yJSI6RiwiJVRocm93VHlwZUVycm9yJSI6Z2UsIiVUeXBlZEFycmF5JSI6eCwiJVR5cGVFcnJvciUiOlIsIiVVaW50OEFycmF5JSI6dHlwZW9mIFVpbnQ4QXJyYXk+InUiP0k6VWludDhBcnJheSwiJVVpbnQ4Q2xhbXBlZEFycmF5JSI6''@;'; put 'put ''dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5PiJ1Ij9JOlVpbnQ4Q2xhbXBlZEFycmF5LCIlVWludDE2QXJyYXklIjp0eXBlb2YgVWludDE2QXJyYXk+InUiP0k6VWludDE2QXJyYXksIiVVaW50MzJBcnJheSUiOnR5cGVvZiBVaW50MzJBcnJheT4idSI/STpVaW50MzJBcnJheSwiJVVSSUVycm9y''@;'; put 'put ''JSI6eiwiJVdlYWtNYXAlIjp0eXBlb2YgV2Vha01hcD4idSI/STpXZWFrTWFwLCIlV2Vha1JlZiUiOnR5cGVvZiBXZWFrUmVmPiJ1Ij9JOldlYWtSZWYsIiVXZWFrU2V0JSI6dHlwZW9mIFdlYWtTZXQ+InUiP0k6V2Vha1NldCwiJUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsJSI6ZywiJUZ1bmN0''@;'; put 'put ''aW9uLnByb3RvdHlwZS5hcHBseSUiOkIsIiVPYmplY3QuZGVmaW5lUHJvcGVydHklIjppZSwiJU9iamVjdC5nZXRQcm90b3R5cGVPZiUiOk1lLCIlTWF0aC5hYnMlIjpOLCIlTWF0aC5mbG9vciUiOk8sIiVNYXRoLm1heCUiOkssIiVNYXRoLm1pbiUiOlosIiVNYXRoLnBvdyUiOlksIiVNYXRo''@;'; put 'put ''LnJvdW5kJSI6VywiJU1hdGguc2lnbiUiOnEsIiVSZWZsZWN0LmdldFByb3RvdHlwZU9mJSI6WmV9O2lmKFRlKXRyeXtudWxsLmVycm9yfWNhdGNoKHllKXt2YXIgVD1UZShUZSh5ZSkpO0NbIiVFcnJvci5wcm90b3R5cGUlIl09VH12YXIgSD1mdW5jdGlvbiB5ZShLZSl7dmFyIGplO2lmKCIl''@;'; put 'put ''QXN5bmNGdW5jdGlvbiUiPT09S2UpamU9SigiYXN5bmMgZnVuY3Rpb24gKCkge30iKTtlbHNlIGlmKCIlR2VuZXJhdG9yRnVuY3Rpb24lIj09PUtlKWplPUooImZ1bmN0aW9uKiAoKSB7fSIpO2Vsc2UgaWYoIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSI9PT1LZSlqZT1KKCJhc3luYyBmdW5j''@;'; put 'put ''dGlvbiogKCkge30iKTtlbHNlIGlmKCIlQXN5bmNHZW5lcmF0b3IlIj09PUtlKXt2YXIga2U9eWUoIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSIpO2tlJiYoamU9a2UucHJvdG90eXBlKX1lbHNlIGlmKCIlQXN5bmNJdGVyYXRvclByb3RvdHlwZSUiPT09S2Upe3ZhciBIZT15ZSgiJUFzeW5j''@;'; put 'put ''R2VuZXJhdG9yJSIpO0hlJiZUZSYmKGplPVRlKEhlLnByb3RvdHlwZSkpfXJldHVybiBDW0tlXT1qZSxqZX0saj17X19wcm90b19fOm51bGwsIiVBcnJheUJ1ZmZlclByb3RvdHlwZSUiOlsiQXJyYXlCdWZmZXIiLCJwcm90b3R5cGUiXSwiJUFycmF5UHJvdG90eXBlJSI6WyJBcnJheSIsInBy''@;'; put 'put ''b3RvdHlwZSJdLCIlQXJyYXlQcm90b19lbnRyaWVzJSI6WyJBcnJheSIsInByb3RvdHlwZSIsImVudHJpZXMiXSwiJUFycmF5UHJvdG9fZm9yRWFjaCUiOlsiQXJyYXkiLCJwcm90b3R5cGUiLCJmb3JFYWNoIl0sIiVBcnJheVByb3RvX2tleXMlIjpbIkFycmF5IiwicHJvdG90eXBlIiwia2V5''@;'; put 'put ''cyJdLCIlQXJyYXlQcm90b192YWx1ZXMlIjpbIkFycmF5IiwicHJvdG90eXBlIiwidmFsdWVzIl0sIiVBc3luY0Z1bmN0aW9uUHJvdG90eXBlJSI6WyJBc3luY0Z1bmN0aW9uIiwicHJvdG90eXBlIl0sIiVBc3luY0dlbmVyYXRvciUiOlsiQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiIsInByb3Rv''@;'; put 'put ''dHlwZSJdLCIlQXN5bmNHZW5lcmF0b3JQcm90b3R5cGUlIjpbIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJwcm90b3R5cGUiXSwiJUJvb2xlYW5Qcm90b3R5cGUlIjpbIkJvb2xlYW4iLCJwcm90b3R5cGUiXSwiJURhdGFWaWV3UHJvdG90eXBlJSI6WyJEYXRhVmlldyIs''@;'; put 'put ''InByb3RvdHlwZSJdLCIlRGF0ZVByb3RvdHlwZSUiOlsiRGF0ZSIsInByb3RvdHlwZSJdLCIlRXJyb3JQcm90b3R5cGUlIjpbIkVycm9yIiwicHJvdG90eXBlIl0sIiVFdmFsRXJyb3JQcm90b3R5cGUlIjpbIkV2YWxFcnJvciIsInByb3RvdHlwZSJdLCIlRmxvYXQzMkFycmF5UHJvdG90eXBl''@;'; put 'put ''JSI6WyJGbG9hdDMyQXJyYXkiLCJwcm90b3R5cGUiXSwiJUZsb2F0NjRBcnJheVByb3RvdHlwZSUiOlsiRmxvYXQ2NEFycmF5IiwicHJvdG90eXBlIl0sIiVGdW5jdGlvblByb3RvdHlwZSUiOlsiRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUdlbmVyYXRvciUiOlsiR2VuZXJhdG9yRnVuY3Rp''@;'; put 'put ''b24iLCJwcm90b3R5cGUiXSwiJUdlbmVyYXRvclByb3RvdHlwZSUiOlsiR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJwcm90b3R5cGUiXSwiJUludDhBcnJheVByb3RvdHlwZSUiOlsiSW50OEFycmF5IiwicHJvdG90eXBlIl0sIiVJbnQxNkFycmF5UHJvdG90eXBlJSI6WyJJbnQx''@;'; put 'put ''NkFycmF5IiwicHJvdG90eXBlIl0sIiVJbnQzMkFycmF5UHJvdG90eXBlJSI6WyJJbnQzMkFycmF5IiwicHJvdG90eXBlIl0sIiVKU09OUGFyc2UlIjpbIkpTT04iLCJwYXJzZSJdLCIlSlNPTlN0cmluZ2lmeSUiOlsiSlNPTiIsInN0cmluZ2lmeSJdLCIlTWFwUHJvdG90eXBlJSI6WyJNYXAi''@;'; put 'put ''LCJwcm90b3R5cGUiXSwiJU51bWJlclByb3RvdHlwZSUiOlsiTnVtYmVyIiwicHJvdG90eXBlIl0sIiVPYmplY3RQcm90b3R5cGUlIjpbIk9iamVjdCIsInByb3RvdHlwZSJdLCIlT2JqUHJvdG9fdG9TdHJpbmclIjpbIk9iamVjdCIsInByb3RvdHlwZSIsInRvU3RyaW5nIl0sIiVPYmpQcm90''@;'; put 'put ''b192YWx1ZU9mJSI6WyJPYmplY3QiLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIl0sIiVQcm9taXNlUHJvdG90eXBlJSI6WyJQcm9taXNlIiwicHJvdG90eXBlIl0sIiVQcm9taXNlUHJvdG9fdGhlbiUiOlsiUHJvbWlzZSIsInByb3RvdHlwZSIsInRoZW4iXSwiJVByb21pc2VfYWxsJSI6WyJQcm9t''@;'; put 'put ''aXNlIiwiYWxsIl0sIiVQcm9taXNlX3JlamVjdCUiOlsiUHJvbWlzZSIsInJlamVjdCJdLCIlUHJvbWlzZV9yZXNvbHZlJSI6WyJQcm9taXNlIiwicmVzb2x2ZSJdLCIlUmFuZ2VFcnJvclByb3RvdHlwZSUiOlsiUmFuZ2VFcnJvciIsInByb3RvdHlwZSJdLCIlUmVmZXJlbmNlRXJyb3JQcm90''@;'; put 'put ''b3R5cGUlIjpbIlJlZmVyZW5jZUVycm9yIiwicHJvdG90eXBlIl0sIiVSZWdFeHBQcm90b3R5cGUlIjpbIlJlZ0V4cCIsInByb3RvdHlwZSJdLCIlU2V0UHJvdG90eXBlJSI6WyJTZXQiLCJwcm90b3R5cGUiXSwiJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSI6WyJTaGFyZWRBcnJheUJ1''@;'; put 'put ''ZmZlciIsInByb3RvdHlwZSJdLCIlU3RyaW5nUHJvdG90eXBlJSI6WyJTdHJpbmciLCJwcm90b3R5cGUiXSwiJVN5bWJvbFByb3RvdHlwZSUiOlsiU3ltYm9sIiwicHJvdG90eXBlIl0sIiVTeW50YXhFcnJvclByb3RvdHlwZSUiOlsiU3ludGF4RXJyb3IiLCJwcm90b3R5cGUiXSwiJVR5cGVk''@;'; put 'put ''QXJyYXlQcm90b3R5cGUlIjpbIlR5cGVkQXJyYXkiLCJwcm90b3R5cGUiXSwiJVR5cGVFcnJvclByb3RvdHlwZSUiOlsiVHlwZUVycm9yIiwicHJvdG90eXBlIl0sIiVVaW50OEFycmF5UHJvdG90eXBlJSI6WyJVaW50OEFycmF5IiwicHJvdG90eXBlIl0sIiVVaW50OENsYW1wZWRBcnJheVBy''@;'; put 'put ''b3RvdHlwZSUiOlsiVWludDhDbGFtcGVkQXJyYXkiLCJwcm90b3R5cGUiXSwiJVVpbnQxNkFycmF5UHJvdG90eXBlJSI6WyJVaW50MTZBcnJheSIsInByb3RvdHlwZSJdLCIlVWludDMyQXJyYXlQcm90b3R5cGUlIjpbIlVpbnQzMkFycmF5IiwicHJvdG90eXBlIl0sIiVVUklFcnJvclByb3Rv''@;'; put 'put ''dHlwZSUiOlsiVVJJRXJyb3IiLCJwcm90b3R5cGUiXSwiJVdlYWtNYXBQcm90b3R5cGUlIjpbIldlYWtNYXAiLCJwcm90b3R5cGUiXSwiJVdlYWtTZXRQcm90b3R5cGUlIjpbIldlYWtTZXQiLCJwcm90b3R5cGUiXX0sRT1iKDg2MTIpLG09Yig4ODI0KSxBPUUuY2FsbChnLEFycmF5LnByb3Rv''@;'; put 'put ''dHlwZS5jb25jYXQpLGFlPUUuY2FsbChCLEFycmF5LnByb3RvdHlwZS5zcGxpY2UpLG5lPUUuY2FsbChnLFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSksc2U9RS5jYWxsKGcsU3RyaW5nLnByb3RvdHlwZS5zbGljZSksQ2U9RS5jYWxsKGcsUmVnRXhwLnByb3RvdHlwZS5leGVjKSxVZT0vW14l''@;'; put 'put ''LltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JSQpKS9nLEplPS9cXChcXCk/L2cseGU9ZnVuY3Rpb24oS2UsamUpe3ZhciBIZSxrZT1LZTtpZihtKGosa2UpJiYoa2U9IiUiKyhI''@;'; put 'put ''ZT1qW2tlXSlbMF0rIiUiKSxtKEMsa2UpKXt2YXIgTGU9Q1trZV07aWYoTGU9PT15JiYoTGU9SChrZSkpLHR5cGVvZiBMZT4idSImJiFqZSl0aHJvdyBuZXcgUigiaW50cmluc2ljICIrS2UrIiBleGlzdHMsIGJ1dCBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZSEiKTty''@;'; put 'put ''ZXR1cm57YWxpYXM6SGUsbmFtZTprZSx2YWx1ZTpMZX19dGhyb3cgbmV3IEYoImludHJpbnNpYyAiK0tlKyIgZG9lcyBub3QgZXhpc3QhIil9O2NlLmV4cG9ydHM9ZnVuY3Rpb24oS2UsamUpe2lmKCJzdHJpbmciIT10eXBlb2YgS2V8fDA9PT1LZS5sZW5ndGgpdGhyb3cgbmV3IFIoImludHJp''@;'; put 'put ''bnNpYyBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7aWYoYXJndW1lbnRzLmxlbmd0aD4xJiYiYm9vbGVhbiIhPXR5cGVvZiBqZSl0aHJvdyBuZXcgUignImFsbG93TWlzc2luZyIgYXJndW1lbnQgbXVzdCBiZSBhIGJvb2xlYW4nKTtpZihudWxsPT09Q2UoL14lP1teJV0qJT8k''@;'; put 'put ''LyxLZSkpdGhyb3cgbmV3IEYoImAlYCBtYXkgbm90IGJlIHByZXNlbnQgYW55d2hlcmUgYnV0IGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgaW50cmluc2ljIG5hbWUiKTt2YXIga2U9ZnVuY3Rpb24oS2Upe3ZhciBqZT1zZShLZSwwLDEpLGtlPXNlKEtlLC0xKTtpZigiJSI9PT1q''@;'; put 'put ''ZSYmIiUiIT09a2UpdGhyb3cgbmV3IEYoImludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgY2xvc2luZyBgJWAiKTtpZigiJSI9PT1rZSYmIiUiIT09amUpdGhyb3cgbmV3IEYoImludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgb3BlbmluZyBgJWAiKTt2YXIgSGU9''@;'; put 'put ''W107cmV0dXJuIG5lKEtlLFVlLGZ1bmN0aW9uKExlLFJlLFZlLEFlKXtIZVtIZS5sZW5ndGhdPVZlP25lKEFlLEplLCIkMSIpOlJlfHxMZX0pLEhlfShLZSksSGU9a2UubGVuZ3RoPjA/a2VbMF06IiIsTGU9eGUoIiUiK0hlKyIlIixqZSksUmU9TGUubmFtZSxWZT1MZS52YWx1ZSxBZT0hMSxE''@;'; put 'put ''ZT1MZS5hbGlhcztEZSYmKEhlPURlWzBdLGFlKGtlLEEoWzAsMV0sRGUpKSk7Zm9yKHZhciBfdD0xLHJ0PSEwO190PGtlLmxlbmd0aDtfdCs9MSl7dmFyIFFlPWtlW190XSxzbj1zZShRZSwwLDEpLHZ0PXNlKFFlLC0xKTtpZigoJyInPT09c258fCInIj09PXNufHwiYCI9PT1zbnx8JyInPT09''@;'; put 'put ''dnR8fCInIj09PXZ0fHwiYCI9PT12dCkmJnNuIT09dnQpdGhyb3cgbmV3IEYoInByb3BlcnR5IG5hbWVzIHdpdGggcXVvdGVzIG11c3QgaGF2ZSBtYXRjaGluZyBxdW90ZXMiKTtpZigoImNvbnN0cnVjdG9yIj09PVFlfHwhcnQpJiYoQWU9ITApLG0oQyxSZT0iJSIrKEhlKz0iLiIrUWUpKyIl''@;'; put 'put ''IikpVmU9Q1tSZV07ZWxzZSBpZihudWxsIT1WZSl7aWYoIShRZSBpbiBWZSkpe2lmKCFqZSl0aHJvdyBuZXcgUigiYmFzZSBpbnRyaW5zaWMgZm9yICIrS2UrIiBleGlzdHMsIGJ1dCB0aGUgcHJvcGVydHkgaXMgbm90IGF2YWlsYWJsZS4iKTtyZXR1cm59aWYocmUmJl90KzE+PWtlLmxlbmd0''@;'; put 'put ''aCl7dmFyIFN0PXJlKFZlLFFlKTtWZT0ocnQ9ISFTdCkmJiJnZXQiaW4gU3QmJiEoIm9yaWdpbmFsVmFsdWUiaW4gU3QuZ2V0KT9TdC5nZXQ6VmVbUWVdfWVsc2UgcnQ9bShWZSxRZSksVmU9VmVbUWVdO3J0JiYhQWUmJihDW1JlXT1WZSl9fXJldHVybiBWZX19LDg4OTk6KGNlLFgsYik9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIEk9Yig4ODkyKTtjZS5leHBvcnRzPUkuZ2V0UHJvdG90eXBlT2Z8fG51bGx9LDQ0MzpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdC5nZXRQcm90b3R5cGVPZnx8bnVsbH0sMTYxODooY2UsWCxiKT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgST1iKDQ0MyksXz1iKDg4OTkpLHA9Yig2NTA0KTtjZS5leHBvcnRzPUk/ZnVuY3Rpb24odyl7cmV0dXJuIEkodyl9Ol8/ZnVuY3Rpb24odyl7aWYoIXd8fCJvYmplY3QiIT10eXBlb2YgdyYmImZ1bmN0aW9uIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiZ2V0''@;'; put 'put ''UHJvdG86IG5vdCBhbiBvYmplY3QiKTtyZXR1cm4gXyh3KX06cD9mdW5jdGlvbih3KXtyZXR1cm4gcCh3KX06bnVsbH0sNjkwOmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcn0sNzI5NjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgST1iKDY5MCk7aWYoSSl0cnl7SShbXSwibGVuZ3RoIil9Y2F0Y2h7ST1udWxsfWNlLmV4cG9ydHM9SX0sNjQ1ODpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPWZ1bmN0aW9uIGIoSSl7aWYobnVsbD09PUl8fCJvYmplY3QiIT10eXBlb2YgSSlyZXR1cm4gSTtpZihJIGluc3RhbmNl''@;'; put 'put ''b2YgT2JqZWN0KXZhciBfPXtfX3Byb3RvX186WChJKX07ZWxzZSBfPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEkpLmZvckVhY2goZnVuY3Rpb24ocCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KF8scCxPYmplY3QuZ2V0T3duUHJvcGVydHlE''@;'; put 'put ''ZXNjcmlwdG9yKEkscCkpfSksX307dmFyIFg9T2JqZWN0LmdldFByb3RvdHlwZU9mfHxmdW5jdGlvbihJKXtyZXR1cm4gSS5fX3Byb3RvX199fSw3NzooY2UsWCxiKT0+e3ZhciBSLHosST1iKDQxNTUpLF89Yig1MTA4KSxwPWIoNTQ0MyksVj1iKDIxNjEpLHc9Yig4NTIwKSxQPWIoNjQ1OCks''@;'; put 'put ''Rj1iKDk1MzkpO2Z1bmN0aW9uIE8ocmUsaWUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShyZSxSLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaWV9fSl9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3I/KFI9U3ltYm9sLmZvcigiZ3JhY2VmdWwt''@;'; put 'put ''ZnMucXVldWUiKSx6PVN5bWJvbC5mb3IoImdyYWNlZnVsLWZzLnByZXZpb3VzIikpOihSPSJfX19ncmFjZWZ1bC1mcy5xdWV1ZSIsej0iX19fZ3JhY2VmdWwtZnMucHJldmlvdXMiKTt2YXIgcSxLPWZ1bmN0aW9uIE4oKXt9O2Z1bmN0aW9uIFkocmUpe1YocmUpLHJlLmdyYWNlZnVsaWZ5PVks''@;'; put 'put ''cmUuY3JlYXRlUmVhZFN0cmVhbT1mdW5jdGlvbiBzZShpdCx4ZSl7cmV0dXJuIG5ldyByZS5SZWFkU3RyZWFtKGl0LHhlKX0scmUuY3JlYXRlV3JpdGVTdHJlYW09ZnVuY3Rpb24gQ2UoaXQseGUpe3JldHVybiBuZXcgcmUuV3JpdGVTdHJlYW0oaXQseGUpfTt2YXIgaWU9cmUucmVhZEZpbGU7''@;'; put 'put ''cmUucmVhZEZpbGU9ZnVuY3Rpb24gdWUoaXQseGUseWUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB4ZSYmKHllPXhlLHhlPW51bGwpLGZ1bmN0aW9uIEtlKGplLGtlLEhlLExlKXtyZXR1cm4gaWUoamUsa2UsZnVuY3Rpb24oUmUpeyFSZXx8IkVNRklMRSIhPT1SZS5jb2RlJiYiRU5GSUxF''@;'; put 'put ''IiE9PVJlLmNvZGU/ImZ1bmN0aW9uIj09dHlwZW9mIEhlJiZIZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6VyhbS2UsW2plLGtlLEhlXSxSZSxMZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9KX0oaXQseGUseWUpfTt2YXIgZ2U9cmUud3JpdGVGaWxlO3JlLndyaXRlRmlsZT1mdW5jdGlvbiBf''@;'; put 'put ''ZShpdCx4ZSx5ZSxLZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHllJiYoS2U9eWUseWU9bnVsbCksZnVuY3Rpb24gamUoa2UsSGUsTGUsUmUsVmUpe3JldHVybiBnZShrZSxIZSxMZSxmdW5jdGlvbihBZSl7IUFlfHwiRU1GSUxFIiE9PUFlLmNvZGUmJiJFTkZJTEUiIT09QWUuY29kZT8i''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgUmUmJlJlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpXKFtqZSxba2UsSGUsTGUsUmVdLEFlLFZlfHxEYXRlLm5vdygpLERhdGUubm93KCldKX0pfShpdCx4ZSx5ZSxLZSl9O3ZhciBUZT1yZS5hcHBlbmRGaWxlO1RlJiYocmUuYXBwZW5kRmlsZT1mdW5jdGlvbiBN''@;'; put 'put ''ZShpdCx4ZSx5ZSxLZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHllJiYoS2U9eWUseWU9bnVsbCksZnVuY3Rpb24gamUoa2UsSGUsTGUsUmUsVmUpe3JldHVybiBUZShrZSxIZSxMZSxmdW5jdGlvbihBZSl7IUFlfHwiRU1GSUxFIiE9PUFlLmNvZGUmJiJFTkZJTEUiIT09QWUuY29kZT8i''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgUmUmJlJlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpXKFtqZSxba2UsSGUsTGUsUmVdLEFlLFZlfHxEYXRlLm5vdygpLERhdGUubm93KCldKX0pfShpdCx4ZSx5ZSxLZSl9KTt2YXIgWmU9cmUuY29weUZpbGU7WmUmJihyZS5jb3B5RmlsZT1mdW5jdGlvbiBCKGl0''@;'; put 'put ''LHhlLHllLEtlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgeWUmJihLZT15ZSx5ZT0wKSxmdW5jdGlvbiBqZShrZSxIZSxMZSxSZSxWZSl7cmV0dXJuIFplKGtlLEhlLExlLGZ1bmN0aW9uKEFlKXshQWV8fCJFTUZJTEUiIT09QWUuY29kZSYmIkVORklMRSIhPT1BZS5jb2RlPyJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiBSZSYmUmUuYXBwbHkodGhpcyxhcmd1bWVudHMpOlcoW2plLFtrZSxIZSxMZSxSZV0sQWUsVmV8fERhdGUubm93KCksRGF0ZS5ub3coKV0pfSl9KGl0LHhlLHllLEtlKX0pO3ZhciBnPXJlLnJlYWRkaXI7cmUucmVhZGRpcj1mdW5jdGlvbiB4KGl0LHhlLHllKXsiZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgeGUmJih5ZT14ZSx4ZT1udWxsKTt2YXIgS2U9eS50ZXN0KEkudmVyc2lvbik/ZnVuY3Rpb24oSGUsTGUsUmUsVmUpe3JldHVybiBnKEhlLGplKEhlLExlLFJlLFZlKSl9OmZ1bmN0aW9uKEhlLExlLFJlLFZlKXtyZXR1cm4gZyhIZSxMZSxqZShIZSxMZSxSZSxWZSkpfTty''@;'; put 'put ''ZXR1cm4gS2UoaXQseGUseWUpO2Z1bmN0aW9uIGplKGtlLEhlLExlLFJlKXtyZXR1cm4gZnVuY3Rpb24oVmUsQWUpeyFWZXx8IkVNRklMRSIhPT1WZS5jb2RlJiYiRU5GSUxFIiE9PVZlLmNvZGU/KEFlJiZBZS5zb3J0JiZBZS5zb3J0KCksImZ1bmN0aW9uIj09dHlwZW9mIExlJiZMZS5jYWxs''@;'; put 'put ''KHRoaXMsVmUsQWUpKTpXKFtLZSxba2UsSGUsTGVdLFZlLFJlfHxEYXRlLm5vdygpLERhdGUubm93KCldKX19fTt2YXIgeT0vXnZbMC01XVwuLztpZigidjAuOCI9PT1JLnZlcnNpb24uc3Vic3RyKDAsNCkpe3ZhciBDPXcocmUpO209Qy5SZWFkU3RyZWFtLGFlPUMuV3JpdGVTdHJlYW19dmFy''@;'; put 'put ''IFQ9cmUuUmVhZFN0cmVhbTtUJiYobS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShULnByb3RvdHlwZSksbS5wcm90b3R5cGUub3Blbj1mdW5jdGlvbiBBKCl7dmFyIGl0PXRoaXM7SmUoaXQucGF0aCxpdC5mbGFncyxpdC5tb2RlLGZ1bmN0aW9uKHhlLHllKXt4ZT8oaXQuYXV0b0Nsb3NlJiZp''@;'; put 'put ''dC5kZXN0cm95KCksaXQuZW1pdCgiZXJyb3IiLHhlKSk6KGl0LmZkPXllLGl0LmVtaXQoIm9wZW4iLHllKSxpdC5yZWFkKCkpfSl9KTt2YXIgSD1yZS5Xcml0ZVN0cmVhbTtIJiYoYWUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSC5wcm90b3R5cGUpLGFlLnByb3RvdHlwZS5vcGVuPWZ1bmN0''@;'; put 'put ''aW9uIG5lKCl7dmFyIGl0PXRoaXM7SmUoaXQucGF0aCxpdC5mbGFncyxpdC5tb2RlLGZ1bmN0aW9uKHhlLHllKXt4ZT8oaXQuZGVzdHJveSgpLGl0LmVtaXQoImVycm9yIix4ZSkpOihpdC5mZD15ZSxpdC5lbWl0KCJvcGVuIix5ZSkpfSl9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocmUsIlJl''@;'; put 'put ''YWRTdHJlYW0iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbX0sc2V0OmZ1bmN0aW9uKGl0KXttPWl0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZSwiV3JpdGVTdHJlYW0iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYWV9LHNldDpmdW5j''@;'; put 'put ''dGlvbihpdCl7YWU9aXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk7dmFyIGo9bTtPYmplY3QuZGVmaW5lUHJvcGVydHkocmUsIkZpbGVSZWFkU3RyZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGp9LHNldDpmdW5jdGlvbihpdCl7aj1pdH0sZW51bWVyYWJsZTohMCxjb25m''@;'; put 'put ''aWd1cmFibGU6ITB9KTt2YXIgRT1hZTtmdW5jdGlvbiBtKGl0LHhlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG0/KFQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMpOm0uYXBwbHkoT2JqZWN0LmNyZWF0ZShtLnByb3RvdHlwZSksYXJndW1lbnRzKX1mdW5jdGlvbiBhZShpdCx4ZSl7cmV0''@;'; put 'put ''dXJuIHRoaXMgaW5zdGFuY2VvZiBhZT8oSC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcyk6YWUuYXBwbHkoT2JqZWN0LmNyZWF0ZShhZS5wcm90b3R5cGUpLGFyZ3VtZW50cyl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHJlLCJGaWxlV3JpdGVTdHJlYW0iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gRX0sc2V0OmZ1bmN0aW9uKGl0KXtFPWl0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pO3ZhciBVZT1yZS5vcGVuO2Z1bmN0aW9uIEplKGl0LHhlLHllLEtlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgeWUmJihLZT15ZSx5ZT1udWxsKSxmdW5jdGlvbiBqZShrZSxIZSxM''@;'; put 'put ''ZSxSZSxWZSl7cmV0dXJuIFVlKGtlLEhlLExlLGZ1bmN0aW9uKEFlLERlKXshQWV8fCJFTUZJTEUiIT09QWUuY29kZSYmIkVORklMRSIhPT1BZS5jb2RlPyJmdW5jdGlvbiI9PXR5cGVvZiBSZSYmUmUuYXBwbHkodGhpcyxhcmd1bWVudHMpOlcoW2plLFtrZSxIZSxMZSxSZV0sQWUsVmV8fERh''@;'; put 'put ''dGUubm93KCksRGF0ZS5ub3coKV0pfSl9KGl0LHhlLHllLEtlKX1yZXR1cm4gcmUub3Blbj1KZSxyZX1mdW5jdGlvbiBXKHJlKXtLKCJFTlFVRVVFIixyZVswXS5uYW1lLHJlWzFdKSxwW1JdLnB1c2gocmUpLEooKX1mdW5jdGlvbiBlZSgpe2Zvcih2YXIgcmU9RGF0ZS5ub3coKSxpZT0wO2ll''@;'; put 'put ''PHBbUl0ubGVuZ3RoOysraWUpcFtSXVtpZV0ubGVuZ3RoPjImJihwW1JdW2llXVszXT1yZSxwW1JdW2llXVs0XT1yZSk7SigpfWZ1bmN0aW9uIEooKXtpZihjbGVhclRpbWVvdXQocSkscT12b2lkIDAsMCE9PXBbUl0ubGVuZ3RoKXt2YXIgcmU9cFtSXS5zaGlmdCgpLGllPXJlWzBdLHVlPXJl''@;'; put 'put ''WzFdLGdlPXJlWzJdLF9lPXJlWzNdLFRlPXJlWzRdO2lmKHZvaWQgMD09PV9lKUsoIlJFVFJZIixpZS5uYW1lLHVlKSxpZS5hcHBseShudWxsLHVlKTtlbHNlIGlmKERhdGUubm93KCktX2U+PTZlNCl7SygiVElNRU9VVCIsaWUubmFtZSx1ZSk7dmFyIE1lPXVlLnBvcCgpOyJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBNZSYmTWUuY2FsbChudWxsLGdlKX1lbHNle3ZhciBaZT1EYXRlLm5vdygpLVRlLEI9TWF0aC5tYXgoVGUtX2UsMSk7WmU+PU1hdGgubWluKDEuMipCLDEwMCk/KEsoIlJFVFJZIixpZS5uYW1lLHVlKSxpZS5hcHBseShudWxsLHVlLmNvbmNhdChbX2VdKSkpOnBbUl0ucHVzaChy''@;'; put 'put ''ZSl9dm9pZCAwPT09cSYmKHE9c2V0VGltZW91dChKLDApKX19Ri5kZWJ1Z2xvZz9LPUYuZGVidWdsb2coImdmczQiKTovXGJnZnM0XGIvaS50ZXN0KEkuZW52Lk5PREVfREVCVUd8fCIiKSYmKEs9ZnVuY3Rpb24oKXt2YXIgcmU9Ri5mb3JtYXQuYXBwbHkoRixhcmd1bWVudHMpO3JlPSJHRlM0''@;'; put 'put ''OiAiK3JlLnNwbGl0KC9cbi8pLmpvaW4oIlxuR0ZTNDogIiksXy5lcnJvcihyZSl9KSxwW1JdfHwoTyhwLGIuZ1tSXXx8W10pLHAuY2xvc2U9ZnVuY3Rpb24ocmUpe2Z1bmN0aW9uIGllKHVlLGdlKXtyZXR1cm4gcmUuY2FsbChwLHVlLGZ1bmN0aW9uKF9lKXtfZXx8ZWUoKSwiZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgZ2UmJmdlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaWUseix7dmFsdWU6cmV9KSxpZX0ocC5jbG9zZSkscC5jbG9zZVN5bmM9ZnVuY3Rpb24ocmUpe2Z1bmN0aW9uIGllKHVlKXtyZS5hcHBseShwLGFyZ3VtZW50cyksZWUo''@;'; put 'put ''KX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGllLHose3ZhbHVlOnJlfSksaWV9KHAuY2xvc2VTeW5jKSwvXGJnZnM0XGIvaS50ZXN0KEkuZW52Lk5PREVfREVCVUd8fCIiKSYmSS5vbigiZXhpdCIsZnVuY3Rpb24oKXtLKHBbUl0pLGIoOTI4MikuZXF1YWwocFtSXS5sZW5ndGgsMCl9''@;'; put 'put ''KSksYi5nW1JdfHxPKGIuZyxwW1JdKSxjZS5leHBvcnRzPVkoUChwKSksSS5lbnYuVEVTVF9HUkFDRUZVTF9GU19HTE9CQUxfUEFUQ0gmJiFwLl9fcGF0Y2hlZCYmKGNlLmV4cG9ydHM9WShwKSxwLl9fcGF0Y2hlZD0hMCl9LDg1MjA6KGNlLFgsYik9Pnt2YXIgST1iKDQxNTUpLF89YigyODMw''@;'; put 'put ''KS5TdHJlYW07Y2UuZXhwb3J0cz1mdW5jdGlvbiBwKFYpe3JldHVybntSZWFkU3RyZWFtOmZ1bmN0aW9uIHcoRixSKXtpZighKHRoaXMgaW5zdGFuY2VvZiB3KSlyZXR1cm4gbmV3IHcoRixSKTtfLmNhbGwodGhpcyk7dmFyIHo9dGhpczt0aGlzLnBhdGg9Rix0aGlzLmZkPW51bGwsdGhpcy5y''@;'; put 'put ''ZWFkYWJsZT0hMCx0aGlzLnBhdXNlZD0hMSx0aGlzLmZsYWdzPSJyIix0aGlzLm1vZGU9NDM4LHRoaXMuYnVmZmVyU2l6ZT02NTUzNixSPVJ8fHt9O2Zvcih2YXIgTj1PYmplY3Qua2V5cyhSKSxPPTAsSz1OLmxlbmd0aDtPPEs7TysrKXt2YXIgWj1OW09dO3RoaXNbWl09UltaXX1pZih0aGlz''@;'; put 'put ''LmVuY29kaW5nJiZ0aGlzLnNldEVuY29kaW5nKHRoaXMuZW5jb2RpbmcpLHZvaWQgMCE9PXRoaXMuc3RhcnQpe2lmKCJudW1iZXIiIT10eXBlb2YgdGhpcy5zdGFydCl0aHJvdyBUeXBlRXJyb3IoInN0YXJ0IG11c3QgYmUgYSBOdW1iZXIiKTtpZih2b2lkIDA9PT10aGlzLmVuZCl0aGlzLmVu''@;'; put 'put ''ZD0xLzA7ZWxzZSBpZigibnVtYmVyIiE9dHlwZW9mIHRoaXMuZW5kKXRocm93IFR5cGVFcnJvcigiZW5kIG11c3QgYmUgYSBOdW1iZXIiKTtpZih0aGlzLnN0YXJ0PnRoaXMuZW5kKXRocm93IG5ldyBFcnJvcigic3RhcnQgbXVzdCBiZSA8PSBlbmQiKTt0aGlzLnBvcz10aGlzLnN0YXJ0fW51''@;'; put 'put ''bGw9PT10aGlzLmZkP1Yub3Blbih0aGlzLnBhdGgsdGhpcy5mbGFncyx0aGlzLm1vZGUsZnVuY3Rpb24oWSxXKXtpZihZKXJldHVybiB6LmVtaXQoImVycm9yIixZKSx2b2lkKHoucmVhZGFibGU9ITEpO3ouZmQ9Vyx6LmVtaXQoIm9wZW4iLFcpLHouX3JlYWQoKX0pOkkubmV4dFRpY2soZnVu''@;'; put 'put ''Y3Rpb24oKXt6Ll9yZWFkKCl9KX0sV3JpdGVTdHJlYW06ZnVuY3Rpb24gUChGLFIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFApKXJldHVybiBuZXcgUChGLFIpO18uY2FsbCh0aGlzKSx0aGlzLnBhdGg9Rix0aGlzLmZkPW51bGwsdGhpcy53cml0YWJsZT0hMCx0aGlzLmZsYWdzPSJ3Iix0aGlz''@;'; put 'put ''LmVuY29kaW5nPSJiaW5hcnkiLHRoaXMubW9kZT00MzgsdGhpcy5ieXRlc1dyaXR0ZW49MCxSPVJ8fHt9O2Zvcih2YXIgej1PYmplY3Qua2V5cyhSKSxOPTAsTz16Lmxlbmd0aDtOPE87TisrKXt2YXIgSz16W05dO3RoaXNbS109UltLXX1pZih2b2lkIDAhPT10aGlzLnN0YXJ0KXtpZigibnVt''@;'; put 'put ''YmVyIiE9dHlwZW9mIHRoaXMuc3RhcnQpdGhyb3cgVHlwZUVycm9yKCJzdGFydCBtdXN0IGJlIGEgTnVtYmVyIik7aWYodGhpcy5zdGFydDwwKXRocm93IG5ldyBFcnJvcigic3RhcnQgbXVzdCBiZSA+PSB6ZXJvIik7dGhpcy5wb3M9dGhpcy5zdGFydH10aGlzLmJ1c3k9ITEsdGhpcy5fcXVl''@;'; put 'put ''dWU9W10sbnVsbD09PXRoaXMuZmQmJih0aGlzLl9vcGVuPVYub3Blbix0aGlzLl9xdWV1ZS5wdXNoKFt0aGlzLl9vcGVuLHRoaXMucGF0aCx0aGlzLmZsYWdzLHRoaXMubW9kZSx2b2lkIDBdKSx0aGlzLmZsdXNoKCkpfX19fSwyMTYxOihjZSxYLGIpPT57dmFyIEk9Yig0MTU1KSxfPWIoMzIw''@;'; put 'put ''OCkscD1JLmN3ZCxWPW51bGwsdz1JLmVudi5HUkFDRUZVTF9GU19QTEFURk9STXx8SS5wbGF0Zm9ybTtJLmN3ZD1mdW5jdGlvbigpe3JldHVybiBWfHwoVj1wLmNhbGwoSSkpLFZ9O3RyeXtJLmN3ZCgpfWNhdGNoe31pZigiZnVuY3Rpb24iPT10eXBlb2YgSS5jaGRpcil7dmFyIFA9SS5jaGRp''@;'; put 'put ''cjtJLmNoZGlyPWZ1bmN0aW9uKFIpe1Y9bnVsbCxQLmNhbGwoSSxSKX0sT2JqZWN0LnNldFByb3RvdHlwZU9mJiZPYmplY3Quc2V0UHJvdG90eXBlT2YoSS5jaGRpcixQKX1jZS5leHBvcnRzPWZ1bmN0aW9uIEYoUil7ZnVuY3Rpb24gTyhKKXtyZXR1cm4gSiYmZnVuY3Rpb24ocmUsaWUsdWUp''@;'; put 'put ''e3JldHVybiBKLmNhbGwoUixyZSxpZSxmdW5jdGlvbihnZSl7ZWUoZ2UpJiYoZ2U9bnVsbCksdWUmJnVlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfX1mdW5jdGlvbiBLKEope3JldHVybiBKJiZmdW5jdGlvbihyZSxpZSl7dHJ5e3JldHVybiBKLmNhbGwoUixyZSxpZSl9Y2F0Y2godWUpe2lm''@;'; put 'put ''KCFlZSh1ZSkpdGhyb3cgdWV9fX1mdW5jdGlvbiBaKEope3JldHVybiBKJiZmdW5jdGlvbihyZSxpZSx1ZSxnZSl7cmV0dXJuIEouY2FsbChSLHJlLGllLHVlLGZ1bmN0aW9uKF9lKXtlZShfZSkmJihfZT1udWxsKSxnZSYmZ2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fWZ1bmN0aW9uIFko''@;'; put 'put ''Sil7cmV0dXJuIEomJmZ1bmN0aW9uKHJlLGllLHVlKXt0cnl7cmV0dXJuIEouY2FsbChSLHJlLGllLHVlKX1jYXRjaChnZSl7aWYoIWVlKGdlKSl0aHJvdyBnZX19fWZ1bmN0aW9uIFcoSil7cmV0dXJuIEomJmZ1bmN0aW9uKHJlLGllLHVlKXtmdW5jdGlvbiBnZShfZSxUZSl7VGUmJihUZS51''@;'; put 'put ''aWQ8MCYmKFRlLnVpZCs9NDI5NDk2NzI5NiksVGUuZ2lkPDAmJihUZS5naWQrPTQyOTQ5NjcyOTYpKSx1ZSYmdWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBpZSYmKHVlPWllLGllPW51bGwpLGllP0ouY2FsbChSLHJlLGllLGdlKTpKLmNhbGwoUixy''@;'; put 'put ''ZSxnZSl9fWZ1bmN0aW9uIHEoSil7cmV0dXJuIEomJmZ1bmN0aW9uKHJlLGllKXt2YXIgdWU9aWU/Si5jYWxsKFIscmUsaWUpOkouY2FsbChSLHJlKTtyZXR1cm4gdWUmJih1ZS51aWQ8MCYmKHVlLnVpZCs9NDI5NDk2NzI5NiksdWUuZ2lkPDAmJih1ZS5naWQrPTQyOTQ5NjcyOTYpKSx1ZX19''@;'; put 'put ''ZnVuY3Rpb24gZWUoSil7cmV0dXJuIUp8fCJFTk9TWVMiPT09Si5jb2RlfHwhKEkuZ2V0dWlkJiYwPT09SS5nZXR1aWQoKXx8IkVJTlZBTCIhPT1KLmNvZGUmJiJFUEVSTSIhPT1KLmNvZGUpfV8uaGFzT3duUHJvcGVydHkoIk9fU1lNTElOSyIpJiZJLnZlcnNpb24ubWF0Y2goL152MFwuNlwu''@;'; put 'put ''WzAtMl18XnYwXC41XC4vKSYmZnVuY3Rpb24geihKKXtKLmxjaG1vZD1mdW5jdGlvbihyZSxpZSx1ZSl7Si5vcGVuKHJlLF8uT19XUk9OTFl8Xy5PX1NZTUxJTkssaWUsZnVuY3Rpb24oZ2UsX2Upe2dlP3VlJiZ1ZShnZSk6Si5mY2htb2QoX2UsaWUsZnVuY3Rpb24oVGUpe0ouY2xvc2UoX2Us''@;'; put 'put ''ZnVuY3Rpb24oTWUpe3VlJiZ1ZShUZXx8TWUpfSl9KX0pfSxKLmxjaG1vZFN5bmM9ZnVuY3Rpb24ocmUsaWUpe3ZhciBfZSx1ZT1KLm9wZW5TeW5jKHJlLF8uT19XUk9OTFl8Xy5PX1NZTUxJTkssaWUpLGdlPSEwO3RyeXtfZT1KLmZjaG1vZFN5bmModWUsaWUpLGdlPSExfWZpbmFsbHl7aWYo''@;'; put 'put ''Z2UpdHJ5e0ouY2xvc2VTeW5jKHVlKX1jYXRjaHt9ZWxzZSBKLmNsb3NlU3luYyh1ZSl9cmV0dXJuIF9lfX0oUiksUi5sdXRpbWVzfHxmdW5jdGlvbiBOKEope18uaGFzT3duUHJvcGVydHkoIk9fU1lNTElOSyIpJiZKLmZ1dGltZXM/KEoubHV0aW1lcz1mdW5jdGlvbihyZSxpZSx1ZSxnZSl7''@;'; put 'put ''Si5vcGVuKHJlLF8uT19TWU1MSU5LLGZ1bmN0aW9uKF9lLFRlKXtfZT9nZSYmZ2UoX2UpOkouZnV0aW1lcyhUZSxpZSx1ZSxmdW5jdGlvbihNZSl7Si5jbG9zZShUZSxmdW5jdGlvbihaZSl7Z2UmJmdlKE1lfHxaZSl9KX0pfSl9LEoubHV0aW1lc1N5bmM9ZnVuY3Rpb24ocmUsaWUsdWUpe3Zh''@;'; put 'put ''ciBfZSxnZT1KLm9wZW5TeW5jKHJlLF8uT19TWU1MSU5LKSxUZT0hMDt0cnl7X2U9Si5mdXRpbWVzU3luYyhnZSxpZSx1ZSksVGU9ITF9ZmluYWxseXtpZihUZSl0cnl7Si5jbG9zZVN5bmMoZ2UpfWNhdGNoe31lbHNlIEouY2xvc2VTeW5jKGdlKX1yZXR1cm4gX2V9KTpKLmZ1dGltZXMmJihK''@;'; put 'put ''Lmx1dGltZXM9ZnVuY3Rpb24ocmUsaWUsdWUsZ2Upe2dlJiZJLm5leHRUaWNrKGdlKX0sSi5sdXRpbWVzU3luYz1mdW5jdGlvbigpe30pfShSKSxSLmNob3duPVooUi5jaG93biksUi5mY2hvd249WihSLmZjaG93biksUi5sY2hvd249WihSLmxjaG93biksUi5jaG1vZD1PKFIuY2htb2QpLFIu''@;'; put 'put ''ZmNobW9kPU8oUi5mY2htb2QpLFIubGNobW9kPU8oUi5sY2htb2QpLFIuY2hvd25TeW5jPVkoUi5jaG93blN5bmMpLFIuZmNob3duU3luYz1ZKFIuZmNob3duU3luYyksUi5sY2hvd25TeW5jPVkoUi5sY2hvd25TeW5jKSxSLmNobW9kU3luYz1LKFIuY2htb2RTeW5jKSxSLmZjaG1vZFN5bmM9''@;'; put 'put ''SyhSLmZjaG1vZFN5bmMpLFIubGNobW9kU3luYz1LKFIubGNobW9kU3luYyksUi5zdGF0PVcoUi5zdGF0KSxSLmZzdGF0PVcoUi5mc3RhdCksUi5sc3RhdD1XKFIubHN0YXQpLFIuc3RhdFN5bmM9cShSLnN0YXRTeW5jKSxSLmZzdGF0U3luYz1xKFIuZnN0YXRTeW5jKSxSLmxzdGF0U3luYz1x''@;'; put 'put ''KFIubHN0YXRTeW5jKSxSLmNobW9kJiYhUi5sY2htb2QmJihSLmxjaG1vZD1mdW5jdGlvbihKLHJlLGllKXtpZSYmSS5uZXh0VGljayhpZSl9LFIubGNobW9kU3luYz1mdW5jdGlvbigpe30pLFIuY2hvd24mJiFSLmxjaG93biYmKFIubGNob3duPWZ1bmN0aW9uKEoscmUsaWUsdWUpe3VlJiZJ''@;'; put 'put ''Lm5leHRUaWNrKHVlKX0sUi5sY2hvd25TeW5jPWZ1bmN0aW9uKCl7fSksIndpbjMyIj09PXcmJihSLnJlbmFtZT0iZnVuY3Rpb24iIT10eXBlb2YgUi5yZW5hbWU/Ui5yZW5hbWU6ZnVuY3Rpb24oSil7ZnVuY3Rpb24gcmUoaWUsdWUsZ2Upe3ZhciBfZT1EYXRlLm5vdygpLFRlPTA7SihpZSx1''@;'; put 'put ''ZSxmdW5jdGlvbiBNZShaZSl7aWYoWmUmJigiRUFDQ0VTIj09PVplLmNvZGV8fCJFUEVSTSI9PT1aZS5jb2RlfHwiRUJVU1kiPT09WmUuY29kZSkmJkRhdGUubm93KCktX2U8NmU0KXJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Ui5zdGF0KHVlLGZ1bmN0aW9uKEIsZyl7QiYmIkVOT0VO''@;'; put 'put ''VCI9PT1CLmNvZGU/SihpZSx1ZSxNZSk6Z2UoWmUpfSl9LFRlKSx2b2lkKFRlPDEwMCYmKFRlKz0xMCkpO2dlJiZnZShaZSl9KX1yZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mJiZPYmplY3Quc2V0UHJvdG90eXBlT2YocmUsSikscmV9KFIucmVuYW1lKSksUi5yZWFkPSJmdW5jdGlvbiIh''@;'; put 'put ''PXR5cGVvZiBSLnJlYWQ/Ui5yZWFkOmZ1bmN0aW9uKEope2Z1bmN0aW9uIHJlKGllLHVlLGdlLF9lLFRlLE1lKXt2YXIgWmU7aWYoTWUmJiJmdW5jdGlvbiI9PXR5cGVvZiBNZSl7dmFyIEI9MDtaZT1mdW5jdGlvbihnLHkseCl7aWYoZyYmIkVBR0FJTiI9PT1nLmNvZGUmJkI8MTApcmV0dXJu''@;'; put 'put ''IEIrKyxKLmNhbGwoUixpZSx1ZSxnZSxfZSxUZSxaZSk7TWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1yZXR1cm4gSi5jYWxsKFIsaWUsdWUsZ2UsX2UsVGUsWmUpfXJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YmJk9iamVjdC5zZXRQcm90b3R5cGVPZihyZSxKKSxyZX0oUi5yZWFkKSxS''@;'; put 'put ''LnJlYWRTeW5jPSJmdW5jdGlvbiIhPXR5cGVvZiBSLnJlYWRTeW5jP1IucmVhZFN5bmM6ZnVuY3Rpb24oSil7cmV0dXJuIGZ1bmN0aW9uKHJlLGllLHVlLGdlLF9lKXtmb3IodmFyIFRlPTA7Oyl0cnl7cmV0dXJuIEouY2FsbChSLHJlLGllLHVlLGdlLF9lKX1jYXRjaChNZSl7aWYoIkVBR0FJ''@;'; put 'put ''TiI9PT1NZS5jb2RlJiZUZTwxMCl7VGUrKztjb250aW51ZX10aHJvdyBNZX19fShSLnJlYWRTeW5jKX19LDEwNDQ6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0NDI5KSxfPWZ1bmN0aW9uKCl7cmV0dXJuISFJfTtfLmhhc0FycmF5TGVuZ3RoRGVmaW5lQnVnPWZ1bmN0aW9uKCl7''@;'; put 'put ''aWYoIUkpcmV0dXJuIG51bGw7dHJ5e3JldHVybiAxIT09SShbXSwibGVuZ3RoIix7dmFsdWU6MX0pLmxlbmd0aH1jYXRjaHtyZXR1cm4hMH19LGNlLmV4cG9ydHM9X30sMTQwNTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLF89Yig1NDE5''@;'; put 'put ''KTtjZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEkmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgSSgiZm9vIikmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sKCJiYXIiKSYmXygpfX0sNTQxOTpjZT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''IjtjZS5leHBvcnRzPWZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFN5bWJvbHx8ImZ1bmN0aW9uIiE9dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpcmV0dXJuITE7aWYoInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3IpcmV0dXJuITA7dmFyIGI9e30s''@;'; put 'put ''ST1TeW1ib2woInRlc3QiKSxfPU9iamVjdChJKTtpZigic3RyaW5nIj09dHlwZW9mIEl8fCJbb2JqZWN0IFN5bWJvbF0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKEkpfHwiW29iamVjdCBTeW1ib2xdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChfKSlyZXR1''@;'; put 'put ''cm4hMTtmb3IodmFyIFYgaW4gYltJXT00MixiKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3Qua2V5cyYmMCE9PU9iamVjdC5rZXlzKGIpLmxlbmd0aHx8ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzJiYwIT09T2JqZWN0LmdldE93blBy''@;'; put 'put ''b3BlcnR5TmFtZXMoYikubGVuZ3RoKXJldHVybiExO3ZhciB3PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoYik7aWYoMSE9PXcubGVuZ3RofHx3WzBdIT09SXx8IU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChiLEkpKXJldHVybiExO2lmKCJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKXt2YXIgUD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGIsSSk7aWYoNDIhPT1QLnZhbHVlfHwhMCE9PVAuZW51bWVyYWJsZSlyZXR1cm4hMX1yZXR1cm4hMH19LDY0MTA6KGNlLFgsYik9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIEk9Yig1NDE5KTtjZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIEkoKSYmISFTeW1ib2wudG9TdHJpbmdUYWd9fSwzMzQ5OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoOTUwOSkuQnVmZmVyLF89YigyODMwKS5UcmFuc2Zvcm07ZnVuY3Rpb24gVihSKXtfLmNh''@;'; put 'put ''bGwodGhpcyksdGhpcy5fYmxvY2s9SS5hbGxvY1Vuc2FmZShSKSx0aGlzLl9ibG9ja1NpemU9Uix0aGlzLl9ibG9ja09mZnNldD0wLHRoaXMuX2xlbmd0aD1bMCwwLDAsMF0sdGhpcy5fZmluYWxpemVkPSExfWIoNTcxNykoVixfKSxWLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKFIs''@;'; put 'put ''eixOKXt2YXIgTz1udWxsO3RyeXt0aGlzLnVwZGF0ZShSLHopfWNhdGNoKEspe089S31OKE8pfSxWLnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24oUil7dmFyIHo9bnVsbDt0cnl7dGhpcy5wdXNoKHRoaXMuZGlnZXN0KCkpfWNhdGNoKE4pe3o9Tn1SKHopfTt2YXIgdz10eXBlb2YgVWludDhB''@;'; put 'put ''cnJheTwidSIsUD10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZ0eXBlb2YgVWludDhBcnJheTwidSImJkFycmF5QnVmZmVyLmlzVmlldyYmKEkucHJvdG90eXBlIGluc3RhbmNlb2YgVWludDhBcnJheXx8SS5UWVBFRF9BUlJBWV9TVVBQT1JUKTtWLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24o''@;'; put 'put ''Uix6KXtpZih0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKCJEaWdlc3QgYWxyZWFkeSBjYWxsZWQiKTtSPWZ1bmN0aW9uIEYoUix6KXtpZihSIGluc3RhbmNlb2YgSSlyZXR1cm4gUjtpZigic3RyaW5nIj09dHlwZW9mIFIpcmV0dXJuIEkuZnJvbShSLHopO2lmKFAmJkFycmF5QnVm''@;'; put 'put ''ZmVyLmlzVmlldyhSKSl7aWYoMD09PVIuYnl0ZUxlbmd0aClyZXR1cm4gSS5hbGxvYygwKTt2YXIgTj1JLmZyb20oUi5idWZmZXIsUi5ieXRlT2Zmc2V0LFIuYnl0ZUxlbmd0aCk7aWYoTi5ieXRlTGVuZ3RoPT09Ui5ieXRlTGVuZ3RoKXJldHVybiBOfWlmKHcmJlIgaW5zdGFuY2VvZiBVaW50''@;'; put 'put ''OEFycmF5fHxJLmlzQnVmZmVyKFIpJiZSLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgUi5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmUi5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihSKSlyZXR1cm4gSS5mcm9tKFIpO3Rocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiZGF0YSIgYXJndW1lbnQg''@;'; put 'put ''bXVzdCBiZSBvZiB0eXBlIHN0cmluZyBvciBhbiBpbnN0YW5jZSBvZiBCdWZmZXIsIFR5cGVkQXJyYXksIG9yIERhdGFWaWV3LicpfShSLHopO2Zvcih2YXIgTj10aGlzLl9ibG9jayxPPTA7dGhpcy5fYmxvY2tPZmZzZXQrUi5sZW5ndGgtTz49dGhpcy5fYmxvY2tTaXplOyl7Zm9yKHZhciBL''@;'; put 'put ''PXRoaXMuX2Jsb2NrT2Zmc2V0O0s8dGhpcy5fYmxvY2tTaXplOylOW0srK109UltPKytdO3RoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTB9Zm9yKDtPPFIubGVuZ3RoOylOW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPVJbTysrXTtmb3IodmFyIFo9MCxZPTgqUi5sZW5ndGg7WT4wOysr''@;'; put 'put ''Wil0aGlzLl9sZW5ndGhbWl0rPVksKFk9dGhpcy5fbGVuZ3RoW1pdLzQyOTQ5NjcyOTZ8MCk+MCYmKHRoaXMuX2xlbmd0aFtaXS09NDI5NDk2NzI5NipZKTtyZXR1cm4gdGhpc30sVi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX3VwZGF0ZSBpcyBub3Qg''@;'; put 'put ''aW1wbGVtZW50ZWQiKX0sVi5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKFIpe2lmKHRoaXMuX2ZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZCIpO3RoaXMuX2ZpbmFsaXplZD0hMDt2YXIgej10aGlzLl9kaWdlc3QoKTt2b2lkIDAhPT1SJiYoej16LnRv''@;'; put 'put ''U3RyaW5nKFIpKSx0aGlzLl9ibG9jay5maWxsKDApLHRoaXMuX2Jsb2NrT2Zmc2V0PTA7Zm9yKHZhciBOPTA7Tjw0OysrTil0aGlzLl9sZW5ndGhbTl09MDtyZXR1cm4gen0sVi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX2RpZ2VzdCBpcyBub3QgaW1w''@;'; put 'put ''bGVtZW50ZWQiKX0sY2UuZXhwb3J0cz1WfSwzNzE1OihjZSxYLGIpPT57dmFyIEk9WDtJLnV0aWxzPWIoNjQzNiksSS5jb21tb249Yig1NzcyKSxJLnNoYT1iKDkwNDEpLEkucmlwZW1kPWIoMjk0OSksSS5obWFjPWIoMjM0NCksSS5zaGExPUkuc2hhLnNoYTEsSS5zaGEyNTY9SS5zaGEuc2hh''@;'; put 'put ''MjU2LEkuc2hhMjI0PUkuc2hhLnNoYTIyNCxJLnNoYTM4ND1JLnNoYS5zaGEzODQsSS5zaGE1MTI9SS5zaGEuc2hhNTEyLEkucmlwZW1kMTYwPUkucmlwZW1kLnJpcGVtZDE2MH0sNTc3MjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDY0MzYpLF89Yig5NzQ2KTtmdW5jdGlvbiBw''@;'; put 'put ''KCl7dGhpcy5wZW5kaW5nPW51bGwsdGhpcy5wZW5kaW5nVG90YWw9MCx0aGlzLmJsb2NrU2l6ZT10aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZSx0aGlzLm91dFNpemU9dGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplLHRoaXMuaG1hY1N0cmVuZ3RoPXRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVu''@;'; put 'put ''Z3RoLHRoaXMucGFkTGVuZ3RoPXRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoLzgsdGhpcy5lbmRpYW49ImJpZyIsdGhpcy5fZGVsdGE4PXRoaXMuYmxvY2tTaXplLzgsdGhpcy5fZGVsdGEzMj10aGlzLmJsb2NrU2l6ZS8zMn1YLkJsb2NrSGFzaD1wLHAucHJvdG90eXBlLnVwZGF0ZT1mdW5j''@;'; put 'put ''dGlvbih3LFApe2lmKHc9SS50b0FycmF5KHcsUCksdGhpcy5wZW5kaW5nPXRoaXMucGVuZGluZz90aGlzLnBlbmRpbmcuY29uY2F0KHcpOncsdGhpcy5wZW5kaW5nVG90YWwrPXcubGVuZ3RoLHRoaXMucGVuZGluZy5sZW5ndGg+PXRoaXMuX2RlbHRhOCl7dmFyIEY9KHc9dGhpcy5wZW5kaW5n''@;'; put 'put ''KS5sZW5ndGgldGhpcy5fZGVsdGE4O3RoaXMucGVuZGluZz13LnNsaWNlKHcubGVuZ3RoLUYsdy5sZW5ndGgpLDA9PT10aGlzLnBlbmRpbmcubGVuZ3RoJiYodGhpcy5wZW5kaW5nPW51bGwpLHc9SS5qb2luMzIodywwLHcubGVuZ3RoLUYsdGhpcy5lbmRpYW4pO2Zvcih2YXIgUj0wO1I8dy5s''@;'; put 'put ''ZW5ndGg7Uis9dGhpcy5fZGVsdGEzMil0aGlzLl91cGRhdGUodyxSLFIrdGhpcy5fZGVsdGEzMil9cmV0dXJuIHRoaXN9LHAucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbih3KXtyZXR1cm4gdGhpcy51cGRhdGUodGhpcy5fcGFkKCkpLF8obnVsbD09PXRoaXMucGVuZGluZyksdGhpcy5fZGln''@;'; put 'put ''ZXN0KHcpfSxwLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5wZW5kaW5nVG90YWwsUD10aGlzLl9kZWx0YTgsRj1QLSh3K3RoaXMucGFkTGVuZ3RoKSVQLFI9bmV3IEFycmF5KEYrdGhpcy5wYWRMZW5ndGgpO1JbMF09MTI4O2Zvcih2YXIgej0xO3o8Rjt6KyspUlt6XT0w''@;'; put 'put ''O2lmKHc8PD0zLCJiaWciPT09dGhpcy5lbmRpYW4pe2Zvcih2YXIgTj04O048dGhpcy5wYWRMZW5ndGg7TisrKVJbeisrXT0wO1JbeisrXT0wLFJbeisrXT0wLFJbeisrXT0wLFJbeisrXT0wLFJbeisrXT13Pj4+MjQmMjU1LFJbeisrXT13Pj4+MTYmMjU1LFJbeisrXT13Pj4+OCYyNTUsUlt6''@;'; put 'put ''KytdPTI1NSZ3fWVsc2UgZm9yKFJbeisrXT0yNTUmdyxSW3orK109dz4+PjgmMjU1LFJbeisrXT13Pj4+MTYmMjU1LFJbeisrXT13Pj4+MjQmMjU1LFJbeisrXT0wLFJbeisrXT0wLFJbeisrXT0wLFJbeisrXT0wLE49ODtOPHRoaXMucGFkTGVuZ3RoO04rKylSW3orK109MDtyZXR1cm4gUn19''@;'; put 'put ''LDIzNDQ6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig2NDM2KSxfPWIoOTc0Nik7ZnVuY3Rpb24gcChWLHcsUCl7aWYoISh0aGlzIGluc3RhbmNlb2YgcCkpcmV0dXJuIG5ldyBwKFYsdyxQKTt0aGlzLkhhc2g9Vix0aGlzLmJsb2NrU2l6ZT1WLmJsb2NrU2l6ZS84LHRoaXMub3V0''@;'; put 'put ''U2l6ZT1WLm91dFNpemUvOCx0aGlzLmlubmVyPW51bGwsdGhpcy5vdXRlcj1udWxsLHRoaXMuX2luaXQoSS50b0FycmF5KHcsUCkpfWNlLmV4cG9ydHM9cCxwLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih3KXt3Lmxlbmd0aD50aGlzLmJsb2NrU2l6ZSYmKHc9KG5ldyB0aGlzLkhhc2gpLnVw''@;'; put 'put ''ZGF0ZSh3KS5kaWdlc3QoKSksXyh3Lmxlbmd0aDw9dGhpcy5ibG9ja1NpemUpO2Zvcih2YXIgUD13Lmxlbmd0aDtQPHRoaXMuYmxvY2tTaXplO1ArKyl3LnB1c2goMCk7Zm9yKFA9MDtQPHcubGVuZ3RoO1ArKyl3W1BdXj01NDtmb3IodGhpcy5pbm5lcj0obmV3IHRoaXMuSGFzaCkudXBkYXRl''@;'; put 'put ''KHcpLFA9MDtQPHcubGVuZ3RoO1ArKyl3W1BdXj0xMDY7dGhpcy5vdXRlcj0obmV3IHRoaXMuSGFzaCkudXBkYXRlKHcpfSxwLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odyxQKXtyZXR1cm4gdGhpcy5pbm5lci51cGRhdGUodyxQKSx0aGlzfSxwLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rp''@;'; put 'put ''b24odyl7cmV0dXJuIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpLHRoaXMub3V0ZXIuZGlnZXN0KHcpfX0sMjk0OTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDY0MzYpLF89Yig1NzcyKSxwPUkucm90bDMyLFY9SS5zdW0zMix3PUkuc3VtMzJfMyxQPUku''@;'; put 'put ''c3VtMzJfNCxGPV8uQmxvY2tIYXNoO2Z1bmN0aW9uIFIoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBSKSlyZXR1cm4gbmV3IFI7Ri5jYWxsKHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdLHRoaXMuZW5kaWFuPSJsaXR0''@;'; put 'put ''bGUifWZ1bmN0aW9uIHoocSxlZSxKLHJlKXtyZXR1cm4gcTw9MTU/ZWVeSl5yZTpxPD0zMT9lZSZKfH5lZSZyZTpxPD00Nz8oZWV8fkopXnJlOnE8PTYzP2VlJnJlfEomfnJlOmVlXihKfH5yZSl9ZnVuY3Rpb24gTyhxKXtyZXR1cm4gcTw9MTU/MTM1MjgyOTkyNjpxPD0zMT8xNTQ4NjAzNjg0''@;'; put 'put ''OnE8PTQ3PzE4MzYwNzI2OTE6cTw9NjM/MjA1Mzk5NDIxNzowfUkuaW5oZXJpdHMoUixGKSxYLnJpcGVtZDE2MD1SLFIuYmxvY2tTaXplPTUxMixSLm91dFNpemU9MTYwLFIuaG1hY1N0cmVuZ3RoPTE5MixSLnBhZExlbmd0aD02NCxSLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGVlLEop''@;'; put 'put ''e2Zvcih2YXIgcmU9dGhpcy5oWzBdLGllPXRoaXMuaFsxXSx1ZT10aGlzLmhbMl0sZ2U9dGhpcy5oWzNdLF9lPXRoaXMuaFs0XSxUZT1yZSxNZT1pZSxaZT11ZSxCPWdlLGc9X2UseT0wO3k8ODA7eSsrKXt2YXIgeD1WKHAoUChyZSx6KHksaWUsdWUsZ2UpLGVlW0tbeV0rSl0sKHE9eSk8PTE1''@;'; put 'put ''PzA6cTw9MzE/MTUxODUwMDI0OTpxPD00Nz8xODU5Nzc1MzkzOnE8PTYzPzI0MDA5NTk3MDg6Mjg0MDg1MzgzOCksWVt5XSksX2UpO3JlPV9lLF9lPWdlLGdlPXAodWUsMTApLHVlPWllLGllPXgseD1WKHAoUChUZSx6KDc5LXksTWUsWmUsQiksZWVbWlt5XStKXSxPKHkpKSxXW3ldKSxnKSxU''@;'; put 'put ''ZT1nLGc9QixCPXAoWmUsMTApLFplPU1lLE1lPXh9dmFyIHE7eD13KHRoaXMuaFsxXSx1ZSxCKSx0aGlzLmhbMV09dyh0aGlzLmhbMl0sZ2UsZyksdGhpcy5oWzJdPXcodGhpcy5oWzNdLF9lLFRlKSx0aGlzLmhbM109dyh0aGlzLmhbNF0scmUsTWUpLHRoaXMuaFs0XT13KHRoaXMuaFswXSxp''@;'; put 'put ''ZSxaZSksdGhpcy5oWzBdPXh9LFIucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oZWUpe3JldHVybiJoZXgiPT09ZWU/SS50b0hleDMyKHRoaXMuaCwibGl0dGxlIik6SS5zcGxpdDMyKHRoaXMuaCwibGl0dGxlIil9O3ZhciBLPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0''@;'; put 'put ''LDE1LDcsNCwxMywxLDEwLDYsMTUsMywxMiwwLDksNSwyLDE0LDExLDgsMywxMCwxNCw0LDksMTUsOCwxLDIsNywwLDYsMTMsMTEsNSwxMiwxLDksMTEsMTAsMCw4LDEyLDQsMTMsMyw3LDE1LDE0LDUsNiwyLDQsMCw1LDksNywxMiwyLDEwLDE0LDEsMyw4LDExLDYsMTUsMTNdLFo9WzUsMTQs''@;'; put 'put ''NywwLDksMiwxMSw0LDEzLDYsMTUsOCwxLDEwLDMsMTIsNiwxMSwzLDcsMCwxMyw1LDEwLDE0LDE1LDgsMTIsNCw5LDEsMiwxNSw1LDEsMyw3LDE0LDYsOSwxMSw4LDEyLDIsMTAsMCw0LDEzLDgsNiw0LDEsMywxMSwxNSwwLDUsMTIsMiwxMyw5LDcsMTAsMTQsMTIsMTUsMTAsNCwxLDUsOCw3''@;'; put 'put ''LDYsMiwxMywxNCwwLDMsOSwxMV0sWT1bMTEsMTQsMTUsMTIsNSw4LDcsOSwxMSwxMywxNCwxNSw2LDcsOSw4LDcsNiw4LDEzLDExLDksNywxNSw3LDEyLDE1LDksMTEsNywxMywxMiwxMSwxMyw2LDcsMTQsOSwxMywxNSwxNCw4LDEzLDYsNSwxMiw3LDUsMTEsMTIsMTQsMTUsMTQsMTUsOSw4''@;'; put 'put ''LDksMTQsNSw2LDgsNiw1LDEyLDksMTUsNSwxMSw2LDgsMTMsMTIsNSwxMiwxMywxNCwxMSw4LDUsNl0sVz1bOCw5LDksMTEsMTMsMTUsMTUsNSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMsMTUsNywxMiw4LDksMTEsNyw3LDEyLDcsNiwxNSwxMywxMSw5LDcsMTUsMTEsOCw2LDYsMTQsMTIs''@;'; put 'put ''MTMsNSwxNCwxMywxMyw3LDUsMTUsNSw4LDExLDE0LDE0LDYsMTQsNiw5LDEyLDksMTIsNSwxNSw4LDgsNSwxMiw5LDEyLDUsMTQsNiw4LDEzLDYsNSwxNSwxMywxMSwxMV19LDkwNDE6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7WC5zaGExPWIoNDc2MSksWC5zaGEyMjQ9Yig3OTkpLFguc2hh''@;'; put 'put ''MjU2PWIoOTM0NCksWC5zaGEzODQ9Yig3NzIpLFguc2hhNTEyPWIoNTkwMCl9LDQ3NjE6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig2NDM2KSxfPWIoNTc3MikscD1iKDcwMzgpLFY9SS5yb3RsMzIsdz1JLnN1bTMyLFA9SS5zdW0zMl81LEY9cC5mdF8xLFI9Xy5CbG9ja0hhc2gs''@;'; put 'put ''ej1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgsMzM5NTQ2OTc4Ml07ZnVuY3Rpb24gTigpe2lmKCEodGhpcyBpbnN0YW5jZW9mIE4pKXJldHVybiBuZXcgTjtSLmNhbGwodGhpcyksdGhpcy5oPVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzgsMzI4''@;'; put 'put ''NTM3NzUyMF0sdGhpcy5XPW5ldyBBcnJheSg4MCl9SS5pbmhlcml0cyhOLFIpLGNlLmV4cG9ydHM9TixOLmJsb2NrU2l6ZT01MTIsTi5vdXRTaXplPTE2MCxOLmhtYWNTdHJlbmd0aD04MCxOLnBhZExlbmd0aD02NCxOLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEssWil7Zm9yKHZhciBZ''@;'; put 'put ''PXRoaXMuVyxXPTA7VzwxNjtXKyspWVtXXT1LW1orV107Zm9yKDtXPFkubGVuZ3RoO1crKylZW1ddPVYoWVtXLTNdXllbVy04XV5ZW1ctMTRdXllbVy0xNl0sMSk7dmFyIHE9dGhpcy5oWzBdLGVlPXRoaXMuaFsxXSxKPXRoaXMuaFsyXSxyZT10aGlzLmhbM10saWU9dGhpcy5oWzRdO2ZvcihX''@;'; put 'put ''PTA7VzxZLmxlbmd0aDtXKyspe3ZhciB1ZT1+fihXLzIwKSxnZT1QKFYocSw1KSxGKHVlLGVlLEoscmUpLGllLFlbV10selt1ZV0pO2llPXJlLHJlPUosSj1WKGVlLDMwKSxlZT1xLHE9Z2V9dGhpcy5oWzBdPXcodGhpcy5oWzBdLHEpLHRoaXMuaFsxXT13KHRoaXMuaFsxXSxlZSksdGhpcy5o''@;'; put 'put ''WzJdPXcodGhpcy5oWzJdLEopLHRoaXMuaFszXT13KHRoaXMuaFszXSxyZSksdGhpcy5oWzRdPXcodGhpcy5oWzRdLGllKX0sTi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihLKXtyZXR1cm4iaGV4Ij09PUs/SS50b0hleDMyKHRoaXMuaCwiYmlnIik6SS5zcGxpdDMyKHRoaXMuaCwiYmln''@;'; put 'put ''Iil9fSw3OTk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig2NDM2KSxfPWIoOTM0NCk7ZnVuY3Rpb24gcCgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHApKXJldHVybiBuZXcgcDtfLmNhbGwodGhpcyksdGhpcy5oPVszMjM4MzcxMDMyLDkxNDE1MDY2Myw4MTI3MDI5OTksNDE0NDkx''@;'; put 'put ''MjY5Nyw0MjkwNzc1ODU3LDE3NTA2MDMwMjUsMTY5NDA3NjgzOSwzMjA0MDc1NDI4XX1JLmluaGVyaXRzKHAsXyksY2UuZXhwb3J0cz1wLHAuYmxvY2tTaXplPTUxMixwLm91dFNpemU9MjI0LHAuaG1hY1N0cmVuZ3RoPTE5MixwLnBhZExlbmd0aD02NCxwLnByb3RvdHlwZS5fZGlnZXN0PWZ1''@;'; put 'put ''bmN0aW9uKHcpe3JldHVybiJoZXgiPT09dz9JLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsNyksImJpZyIpOkkuc3BsaXQzMih0aGlzLmguc2xpY2UoMCw3KSwiYmlnIil9fSw5MzQ0OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNjQzNiksXz1iKDU3NzIpLHA9Yig3MDM4KSxWPWIo''@;'; put 'put ''OTc0Niksdz1JLnN1bTMyLFA9SS5zdW0zMl80LEY9SS5zdW0zMl81LFI9cC5jaDMyLHo9cC5tYWozMixOPXAuczBfMjU2LE89cC5zMV8yNTYsSz1wLmcwXzI1NixaPXAuZzFfMjU2LFk9Xy5CbG9ja0hhc2gsVz1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5''@;'; put 'put ''NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgw''@;'; put 'put ''NzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIs''@;'; put 'put ''MTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5''@;'; put 'put ''MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XTtmdW5jdGlvbiBxKCl7aWYo''@;'; put 'put ''ISh0aGlzIGluc3RhbmNlb2YgcSkpcmV0dXJuIG5ldyBxO1kuY2FsbCh0aGlzKSx0aGlzLmg9WzE3NzkwMzM3MDMsMzE0NDEzNDI3NywxMDEzOTA0MjQyLDI3NzM0ODA3NjIsMTM1OTg5MzExOSwyNjAwODIyOTI0LDUyODczNDYzNSwxNTQxNDU5MjI1XSx0aGlzLms9Vyx0aGlzLlc9bmV3IEFy''@;'; put 'put ''cmF5KDY0KX1JLmluaGVyaXRzKHEsWSksY2UuZXhwb3J0cz1xLHEuYmxvY2tTaXplPTUxMixxLm91dFNpemU9MjU2LHEuaG1hY1N0cmVuZ3RoPTE5MixxLnBhZExlbmd0aD02NCxxLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEoscmUpe2Zvcih2YXIgaWU9dGhpcy5XLHVlPTA7dWU8MTY7''@;'; put 'put ''dWUrKylpZVt1ZV09SltyZSt1ZV07Zm9yKDt1ZTxpZS5sZW5ndGg7dWUrKylpZVt1ZV09UChaKGllW3VlLTJdKSxpZVt1ZS03XSxLKGllW3VlLTE1XSksaWVbdWUtMTZdKTt2YXIgZ2U9dGhpcy5oWzBdLF9lPXRoaXMuaFsxXSxUZT10aGlzLmhbMl0sTWU9dGhpcy5oWzNdLFplPXRoaXMuaFs0''@;'; put 'put ''XSxCPXRoaXMuaFs1XSxnPXRoaXMuaFs2XSx5PXRoaXMuaFs3XTtmb3IoVih0aGlzLmsubGVuZ3RoPT09aWUubGVuZ3RoKSx1ZT0wO3VlPGllLmxlbmd0aDt1ZSsrKXt2YXIgeD1GKHksTyhaZSksUihaZSxCLGcpLHRoaXMua1t1ZV0saWVbdWVdKSxDPXcoTihnZSkseihnZSxfZSxUZSkpO3k9''@;'; put 'put ''ZyxnPUIsQj1aZSxaZT13KE1lLHgpLE1lPVRlLFRlPV9lLF9lPWdlLGdlPXcoeCxDKX10aGlzLmhbMF09dyh0aGlzLmhbMF0sZ2UpLHRoaXMuaFsxXT13KHRoaXMuaFsxXSxfZSksdGhpcy5oWzJdPXcodGhpcy5oWzJdLFRlKSx0aGlzLmhbM109dyh0aGlzLmhbM10sTWUpLHRoaXMuaFs0XT13''@;'; put 'put ''KHRoaXMuaFs0XSxaZSksdGhpcy5oWzVdPXcodGhpcy5oWzVdLEIpLHRoaXMuaFs2XT13KHRoaXMuaFs2XSxnKSx0aGlzLmhbN109dyh0aGlzLmhbN10seSl9LHEucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oSil7cmV0dXJuImhleCI9PT1KP0kudG9IZXgzMih0aGlzLmgsImJpZyIpOkku''@;'; put 'put ''c3BsaXQzMih0aGlzLmgsImJpZyIpfX0sNzcyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNjQzNiksXz1iKDU5MDApO2Z1bmN0aW9uIHAoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBwKSlyZXR1cm4gbmV3IHA7Xy5jYWxsKHRoaXMpLHRoaXMuaD1bMzQxODA3MDM2NSwzMjM4Mzcx''@;'; put 'put ''MDMyLDE2NTQyNzAyNTAsOTE0MTUwNjYzLDI0Mzg1MjkzNzAsODEyNzAyOTk5LDM1NTQ2MjM2MCw0MTQ0OTEyNjk3LDE3MzE0MDU0MTUsNDI5MDc3NTg1NywyMzk0MTgwMjMxLDE3NTA2MDMwMjUsMzY3NTAwODUyNSwxNjk0MDc2ODM5LDEyMDMwNjI4MTMsMzIwNDA3NTQyOF19SS5pbmhlcml0''@;'; put 'put ''cyhwLF8pLGNlLmV4cG9ydHM9cCxwLmJsb2NrU2l6ZT0xMDI0LHAub3V0U2l6ZT0zODQscC5obWFjU3RyZW5ndGg9MTkyLHAucGFkTGVuZ3RoPTEyOCxwLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHcpe3JldHVybiJoZXgiPT09dz9JLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsMTIpLCJi''@;'; put 'put ''aWciKTpJLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsMTIpLCJiaWciKX19LDU5MDA6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig2NDM2KSxfPWIoNTc3MikscD1iKDk3NDYpLFY9SS5yb3RyNjRfaGksdz1JLnJvdHI2NF9sbyxQPUkuc2hyNjRfaGksRj1JLnNocjY0X2xvLFI9SS5z''@;'; put 'put ''dW02NCx6PUkuc3VtNjRfaGksTj1JLnN1bTY0X2xvLE89SS5zdW02NF80X2hpLEs9SS5zdW02NF80X2xvLFo9SS5zdW02NF81X2hpLFk9SS5zdW02NF81X2xvLFc9Xy5CbG9ja0hhc2gscT1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2''@;'; put 'put ''NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIy''@;'; put 'put ''NTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEz''@;'; put 'put ''OSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3''@;'; put 'put ''NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5''@;'; put 'put ''OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0''@;'; put 'put ''NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwz''@;'; put 'put ''MTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1''@;'; put 'put ''NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIw''@;'; put 'put ''NDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwz''@;'; put 'put ''MjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAy''@;'; put 'put ''MzE2LDEyNDYxODk1OTFdO2Z1bmN0aW9uIGVlKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgZWUpKXJldHVybiBuZXcgZWU7Vy5jYWxsKHRoaXMpLHRoaXMuaD1bMTc3OTAzMzcwMyw0MDg5MjM1NzIwLDMxNDQxMzQyNzcsMjIyNzg3MzU5NSwxMDEzOTA0MjQyLDQyNzExNzU3MjMsMjc3MzQ4MDc2''@;'; put 'put ''MiwxNTk1NzUwMTI5LDEzNTk4OTMxMTksMjkxNzU2NTEzNywyNjAwODIyOTI0LDcyNTUxMTE5OSw1Mjg3MzQ2MzUsNDIxNTM4OTU0NywxNTQxNDU5MjI1LDMyNzAzMzIwOV0sdGhpcy5rPXEsdGhpcy5XPW5ldyBBcnJheSgxNjApfWZ1bmN0aW9uIEooeCxDLFQsSCxqKXt2YXIgRT14JlRefngm''@;'; put 'put ''ajtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiByZSh4LEMsVCxILGosRSl7dmFyIG09QyZIXn5DJkU7cmV0dXJuIG08MCYmKG0rPTQyOTQ5NjcyOTYpLG19ZnVuY3Rpb24gaWUoeCxDLFQsSCxqKXt2YXIgRT14JlReeCZqXlQmajtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2''@;'; put 'put ''NzI5NiksRX1mdW5jdGlvbiB1ZSh4LEMsVCxILGosRSl7dmFyIG09QyZIXkMmRV5IJkU7cmV0dXJuIG08MCYmKG0rPTQyOTQ5NjcyOTYpLG19ZnVuY3Rpb24gZ2UoeCxDKXt2YXIgRT1WKHgsQywyOCleVihDLHgsMileVihDLHgsNyk7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVu''@;'; put 'put ''Y3Rpb24gX2UoeCxDKXt2YXIgRT13KHgsQywyOCledyhDLHgsMiledyhDLHgsNyk7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gVGUoeCxDKXt2YXIgRT1WKHgsQywxNCleVih4LEMsMTgpXlYoQyx4LDkpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0''@;'; put 'put ''aW9uIE1lKHgsQyl7dmFyIEU9dyh4LEMsMTQpXncoeCxDLDE4KV53KEMseCw5KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBaZSh4LEMpe3ZhciBFPVYoeCxDLDEpXlYoeCxDLDgpXlAoeCxDLDcpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9u''@;'; put 'put ''IEIoeCxDKXt2YXIgRT13KHgsQywxKV53KHgsQyw4KV5GKHgsQyw3KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBnKHgsQyl7dmFyIEU9Vih4LEMsMTkpXlYoQyx4LDI5KV5QKHgsQyw2KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiB5KHgs''@;'; put 'put ''Qyl7dmFyIEU9dyh4LEMsMTkpXncoQyx4LDI5KV5GKHgsQyw2KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1JLmluaGVyaXRzKGVlLFcpLGNlLmV4cG9ydHM9ZWUsZWUuYmxvY2tTaXplPTEwMjQsZWUub3V0U2l6ZT01MTIsZWUuaG1hY1N0cmVuZ3RoPTE5MixlZS5wYWRMZW5ndGg9''@;'; put 'put ''MTI4LGVlLnByb3RvdHlwZS5fcHJlcGFyZUJsb2NrPWZ1bmN0aW9uKEMsVCl7Zm9yKHZhciBIPXRoaXMuVyxqPTA7ajwzMjtqKyspSFtqXT1DW1Qral07Zm9yKDtqPEgubGVuZ3RoO2orPTIpe3ZhciBFPWcoSFtqLTRdLEhbai0zXSksbT15KEhbai00XSxIW2otM10pLEE9SFtqLTE0XSxhZT1I''@;'; put 'put ''W2otMTNdLG5lPVplKEhbai0zMF0sSFtqLTI5XSksc2U9QihIW2otMzBdLEhbai0yOV0pLENlPUhbai0zMl0sVWU9SFtqLTMxXTtIW2pdPU8oRSxtLEEsYWUsbmUsc2UsQ2UsVWUpLEhbaisxXT1LKEUsbSxBLGFlLG5lLHNlLENlLFVlKX19LGVlLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9u''@;'; put 'put ''KEMsVCl7dGhpcy5fcHJlcGFyZUJsb2NrKEMsVCk7dmFyIEg9dGhpcy5XLGo9dGhpcy5oWzBdLEU9dGhpcy5oWzFdLG09dGhpcy5oWzJdLEE9dGhpcy5oWzNdLGFlPXRoaXMuaFs0XSxuZT10aGlzLmhbNV0sc2U9dGhpcy5oWzZdLENlPXRoaXMuaFs3XSxVZT10aGlzLmhbOF0sSmU9dGhpcy5o''@;'; put 'put ''WzldLGl0PXRoaXMuaFsxMF0seGU9dGhpcy5oWzExXSx5ZT10aGlzLmhbMTJdLEtlPXRoaXMuaFsxM10samU9dGhpcy5oWzE0XSxrZT10aGlzLmhbMTVdO3AodGhpcy5rLmxlbmd0aD09PUgubGVuZ3RoKTtmb3IodmFyIEhlPTA7SGU8SC5sZW5ndGg7SGUrPTIpe3ZhciBMZT1qZSxSZT1rZSxW''@;'; put 'put ''ZT1UZShVZSxKZSksQWU9TWUoVWUsSmUpLERlPUooVWUsMCxpdCwwLHllKSxfdD1yZSgwLEplLDAseGUsMCxLZSkscnQ9dGhpcy5rW0hlXSxRZT10aGlzLmtbSGUrMV0sc249SFtIZV0sdnQ9SFtIZSsxXSxTdD1aKExlLFJlLFZlLEFlLERlLF90LHJ0LFFlLHNuLHZ0KSxlbj1ZKExlLFJlLFZl''@;'; put 'put ''LEFlLERlLF90LHJ0LFFlLHNuLHZ0KTtMZT1nZShqLEUpLFJlPV9lKGosRSksVmU9aWUoaiwwLG0sMCxhZSksQWU9dWUoMCxFLDAsQSwwLG5lKTt2YXIgdXQ9eihMZSxSZSxWZSxBZSksWGU9TihMZSxSZSxWZSxBZSk7amU9eWUsa2U9S2UseWU9aXQsS2U9eGUsaXQ9VWUseGU9SmUsVWU9eihz''@;'; put 'put ''ZSxDZSxTdCxlbiksSmU9TihDZSxDZSxTdCxlbiksc2U9YWUsQ2U9bmUsYWU9bSxuZT1BLG09aixBPUUsaj16KFN0LGVuLHV0LFhlKSxFPU4oU3QsZW4sdXQsWGUpfVIodGhpcy5oLDAsaixFKSxSKHRoaXMuaCwyLG0sQSksUih0aGlzLmgsNCxhZSxuZSksUih0aGlzLmgsNixzZSxDZSksUih0''@;'; put 'put ''aGlzLmgsOCxVZSxKZSksUih0aGlzLmgsMTAsaXQseGUpLFIodGhpcy5oLDEyLHllLEtlKSxSKHRoaXMuaCwxNCxqZSxrZSl9LGVlLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKEMpe3JldHVybiJoZXgiPT09Qz9JLnRvSGV4MzIodGhpcy5oLCJiaWciKTpJLnNwbGl0MzIodGhpcy5oLCJi''@;'; put 'put ''aWciKX19LDcwMzg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIF89Yig2NDM2KS5yb3RyMzI7ZnVuY3Rpb24gVihPLEssWil7cmV0dXJuIE8mS15+TyZafWZ1bmN0aW9uIHcoTyxLLFope3JldHVybiBPJkteTyZaXksmWn1mdW5jdGlvbiBQKE8sSyxaKXtyZXR1cm4gT15LXlp9WC5mdF8x''@;'; put 'put ''PWZ1bmN0aW9uIHAoTyxLLFosWSl7cmV0dXJuIDA9PT1PP1YoSyxaLFkpOjE9PT1PfHwzPT09Tz9QKEssWixZKToyPT09Tz93KEssWixZKTp2b2lkIDB9LFguY2gzMj1WLFgubWFqMzI9dyxYLnAzMj1QLFguczBfMjU2PWZ1bmN0aW9uIEYoTyl7cmV0dXJuIF8oTywyKV5fKE8sMTMpXl8oTywy''@;'; put 'put ''Mil9LFguczFfMjU2PWZ1bmN0aW9uIFIoTyl7cmV0dXJuIF8oTyw2KV5fKE8sMTEpXl8oTywyNSl9LFguZzBfMjU2PWZ1bmN0aW9uIHooTyl7cmV0dXJuIF8oTyw3KV5fKE8sMTgpXk8+Pj4zfSxYLmcxXzI1Nj1mdW5jdGlvbiBOKE8pe3JldHVybiBfKE8sMTcpXl8oTywxOSleTz4+PjEwfX0s''@;'; put 'put ''NjQzNjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDk3NDYpLF89Yig1NzE3KTtmdW5jdGlvbiBwKHkseCl7cmV0dXJuISg1NTI5NiE9KDY0NTEyJnkuY2hhckNvZGVBdCh4KSl8fHg8MHx8eCsxPj15Lmxlbmd0aCkmJjU2MzIwPT0oNjQ1MTImeS5jaGFyQ29kZUF0KHgrMSkpfWZ1''@;'; put 'put ''bmN0aW9uIFAoeSl7cmV0dXJuKHk+Pj4yNHx5Pj4+OCY2NTI4MHx5PDw4JjE2NzExNjgwfCgyNTUmeSk8PDI0KT4+PjB9ZnVuY3Rpb24gUih5KXtyZXR1cm4gMT09PXkubGVuZ3RoPyIwIit5Onl9ZnVuY3Rpb24geih5KXtyZXR1cm4gNz09PXkubGVuZ3RoPyIwIit5OjY9PT15Lmxlbmd0aD8i''@;'; put 'put ''MDAiK3k6NT09PXkubGVuZ3RoPyIwMDAiK3k6ND09PXkubGVuZ3RoPyIwMDAwIit5OjM9PT15Lmxlbmd0aD8iMDAwMDAiK3k6Mj09PXkubGVuZ3RoPyIwMDAwMDAiK3k6MT09PXkubGVuZ3RoPyIwMDAwMDAwIit5Onl9WC5pbmhlcml0cz1fLFgudG9BcnJheT1mdW5jdGlvbiBWKHkseCl7aWYo''@;'; put 'put ''QXJyYXkuaXNBcnJheSh5KSlyZXR1cm4geS5zbGljZSgpO2lmKCF5KXJldHVybltdO3ZhciBDPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgeSlpZih4KXtpZigiaGV4Ij09PXgpZm9yKCh5PXkucmVwbGFjZSgvW15hLXowLTldKy9naSwiIikpLmxlbmd0aCUyIT0wJiYoeT0iMCIreSksSD0wO0g8''@;'; put 'put ''eS5sZW5ndGg7SCs9MilDLnB1c2gocGFyc2VJbnQoeVtIXSt5W0grMV0sMTYpKX1lbHNlIGZvcih2YXIgVD0wLEg9MDtIPHkubGVuZ3RoO0grKyl7dmFyIGo9eS5jaGFyQ29kZUF0KEgpO2o8MTI4P0NbVCsrXT1qOmo8MjA0OD8oQ1tUKytdPWo+PjZ8MTkyLENbVCsrXT02MyZqfDEyOCk6cCh5''@;'; put 'put ''LEgpPyhqPTY1NTM2KygoMTAyMyZqKTw8MTApKygxMDIzJnkuY2hhckNvZGVBdCgrK0gpKSxDW1QrK109aj4+MTh8MjQwLENbVCsrXT1qPj4xMiY2M3wxMjgsQ1tUKytdPWo+PjYmNjN8MTI4LENbVCsrXT02MyZqfDEyOCk6KENbVCsrXT1qPj4xMnwyMjQsQ1tUKytdPWo+PjYmNjN8MTI4LENb''@;'; put 'put ''VCsrXT02MyZqfDEyOCl9ZWxzZSBmb3IoSD0wO0g8eS5sZW5ndGg7SCsrKUNbSF09MHx5W0hdO3JldHVybiBDfSxYLnRvSGV4PWZ1bmN0aW9uIHcoeSl7Zm9yKHZhciB4PSIiLEM9MDtDPHkubGVuZ3RoO0MrKyl4Kz1SKHlbQ10udG9TdHJpbmcoMTYpKTtyZXR1cm4geH0sWC5odG9ubD1QLFgu''@;'; put 'put ''dG9IZXgzMj1mdW5jdGlvbiBGKHkseCl7Zm9yKHZhciBDPSIiLFQ9MDtUPHkubGVuZ3RoO1QrKyl7dmFyIEg9eVtUXTsibGl0dGxlIj09PXgmJihIPVAoSCkpLEMrPXooSC50b1N0cmluZygxNikpfXJldHVybiBDfSxYLnplcm8yPVIsWC56ZXJvOD16LFguam9pbjMyPWZ1bmN0aW9uIE4oeSx4''@;'; put 'put ''LEMsVCl7dmFyIEg9Qy14O0koSCU0PT0wKTtmb3IodmFyIGo9bmV3IEFycmF5KEgvNCksRT0wLG09eDtFPGoubGVuZ3RoO0UrKyxtKz00KWpbRV09KCJiaWciPT09VD95W21dPDwyNHx5W20rMV08PDE2fHlbbSsyXTw8OHx5W20rM106eVttKzNdPDwyNHx5W20rMl08PDE2fHlbbSsxXTw8OHx5''@;'; put 'put ''W21dKT4+PjA7cmV0dXJuIGp9LFguc3BsaXQzMj1mdW5jdGlvbiBPKHkseCl7Zm9yKHZhciBDPW5ldyBBcnJheSg0KnkubGVuZ3RoKSxUPTAsSD0wO1Q8eS5sZW5ndGg7VCsrLEgrPTQpe3ZhciBqPXlbVF07ImJpZyI9PT14PyhDW0hdPWo+Pj4yNCxDW0grMV09aj4+PjE2JjI1NSxDW0grMl09''@;'; put 'put ''aj4+PjgmMjU1LENbSCszXT0yNTUmaik6KENbSCszXT1qPj4+MjQsQ1tIKzJdPWo+Pj4xNiYyNTUsQ1tIKzFdPWo+Pj44JjI1NSxDW0hdPTI1NSZqKX1yZXR1cm4gQ30sWC5yb3RyMzI9ZnVuY3Rpb24gSyh5LHgpe3JldHVybiB5Pj4+eHx5PDwzMi14fSxYLnJvdGwzMj1mdW5jdGlvbiBaKHks''@;'; put 'put ''eCl7cmV0dXJuIHk8PHh8eT4+PjMyLXh9LFguc3VtMzI9ZnVuY3Rpb24gWSh5LHgpe3JldHVybiB5K3g+Pj4wfSxYLnN1bTMyXzM9ZnVuY3Rpb24gVyh5LHgsQyl7cmV0dXJuIHkreCtDPj4+MH0sWC5zdW0zMl80PWZ1bmN0aW9uIHEoeSx4LEMsVCl7cmV0dXJuIHkreCtDK1Q+Pj4wfSxYLnN1''@;'; put 'put ''bTMyXzU9ZnVuY3Rpb24gZWUoeSx4LEMsVCxIKXtyZXR1cm4geSt4K0MrVCtIPj4+MH0sWC5zdW02ND1mdW5jdGlvbiBKKHkseCxDLFQpe3ZhciBFPVQreVt4KzFdPj4+MDt5W3hdPShFPFQ/MTowKStDK3lbeF0+Pj4wLHlbeCsxXT1FfSxYLnN1bTY0X2hpPWZ1bmN0aW9uIHJlKHkseCxDLFQp''@;'; put 'put ''e3JldHVybih4K1Q+Pj4wPHg/MTowKSt5K0M+Pj4wfSxYLnN1bTY0X2xvPWZ1bmN0aW9uIGllKHkseCxDLFQpe3JldHVybiB4K1Q+Pj4wfSxYLnN1bTY0XzRfaGk9ZnVuY3Rpb24gdWUoeSx4LEMsVCxILGosRSxtKXt2YXIgQT0wLGFlPXg7cmV0dXJuIEErPShhZT1hZStUPj4+MCk8eD8xOjAs''@;'; put 'put ''QSs9KGFlPWFlK2o+Pj4wKTxqPzE6MCx5K0MrSCtFKyhBKz0oYWU9YWUrbT4+PjApPG0/MTowKT4+PjB9LFguc3VtNjRfNF9sbz1mdW5jdGlvbiBnZSh5LHgsQyxULEgsaixFLG0pe3JldHVybiB4K1QraittPj4+MH0sWC5zdW02NF81X2hpPWZ1bmN0aW9uIF9lKHkseCxDLFQsSCxqLEUsbSxB''@;'; put 'put ''LGFlKXt2YXIgbmU9MCxzZT14O3JldHVybiBuZSs9KHNlPXNlK1Q+Pj4wKTx4PzE6MCxuZSs9KHNlPXNlK2o+Pj4wKTxqPzE6MCxuZSs9KHNlPXNlK20+Pj4wKTxtPzE6MCx5K0MrSCtFK0ErKG5lKz0oc2U9c2UrYWU+Pj4wKTxhZT8xOjApPj4+MH0sWC5zdW02NF81X2xvPWZ1bmN0aW9uIFRl''@;'; put 'put ''KHkseCxDLFQsSCxqLEUsbSxBLGFlKXtyZXR1cm4geCtUK2orbSthZT4+PjB9LFgucm90cjY0X2hpPWZ1bmN0aW9uIE1lKHkseCxDKXtyZXR1cm4oeDw8MzItQ3x5Pj4+Qyk+Pj4wfSxYLnJvdHI2NF9sbz1mdW5jdGlvbiBaZSh5LHgsQyl7cmV0dXJuKHk8PDMyLUN8eD4+PkMpPj4+MH0sWC5z''@;'; put 'put ''aHI2NF9oaT1mdW5jdGlvbiBCKHkseCxDKXtyZXR1cm4geT4+PkN9LFguc2hyNjRfbG89ZnVuY3Rpb24gZyh5LHgsQyl7cmV0dXJuKHk8PDMyLUN8eD4+PkMpPj4+MH19LDg4MjQ6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwsXz1PYmplY3Qu''@;'; put 'put ''cHJvdG90eXBlLmhhc093blByb3BlcnR5LHA9Yig4NjEyKTtjZS5leHBvcnRzPXAuY2FsbChJLF8pfSwyMTU2OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMzcxNSksXz1iKDQ1MDQpLHA9Yig5NzQ2KTtmdW5jdGlvbiBWKHcpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFYpKXJldHVy''@;'; put 'put ''biBuZXcgVih3KTt0aGlzLmhhc2g9dy5oYXNoLHRoaXMucHJlZFJlc2lzdD0hIXcucHJlZFJlc2lzdCx0aGlzLm91dExlbj10aGlzLmhhc2gub3V0U2l6ZSx0aGlzLm1pbkVudHJvcHk9dy5taW5FbnRyb3B5fHx0aGlzLmhhc2guaG1hY1N0cmVuZ3RoLHRoaXMuX3Jlc2VlZD1udWxsLHRoaXMu''@;'; put 'put ''cmVzZWVkSW50ZXJ2YWw9bnVsbCx0aGlzLks9bnVsbCx0aGlzLlY9bnVsbDt2YXIgUD1fLnRvQXJyYXkody5lbnRyb3B5LHcuZW50cm9weUVuY3x8ImhleCIpLEY9Xy50b0FycmF5KHcubm9uY2Usdy5ub25jZUVuY3x8ImhleCIpLFI9Xy50b0FycmF5KHcucGVycyx3LnBlcnNFbmN8fCJoZXgi''@;'; put 'put ''KTtwKFAubGVuZ3RoPj10aGlzLm1pbkVudHJvcHkvOCwiTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiAiK3RoaXMubWluRW50cm9weSsiIGJpdHMiKSx0aGlzLl9pbml0KFAsRixSKX1jZS5leHBvcnRzPVYsVi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oUCxGLFIpe3ZhciB6PVAu''@;'; put 'put ''Y29uY2F0KEYpLmNvbmNhdChSKTt0aGlzLks9bmV3IEFycmF5KHRoaXMub3V0TGVuLzgpLHRoaXMuVj1uZXcgQXJyYXkodGhpcy5vdXRMZW4vOCk7Zm9yKHZhciBOPTA7Tjx0aGlzLlYubGVuZ3RoO04rKyl0aGlzLktbTl09MCx0aGlzLlZbTl09MTt0aGlzLl91cGRhdGUoeiksdGhpcy5fcmVz''@;'; put 'put ''ZWVkPTEsdGhpcy5yZXNlZWRJbnRlcnZhbD0yODE0NzQ5NzY3MTA2NTZ9LFYucHJvdG90eXBlLl9obWFjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBJLmhtYWModGhpcy5oYXNoLHRoaXMuSyl9LFYucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oUCl7dmFyIEY9dGhpcy5faG1hYygpLnVwZGF0''@;'; put 'put ''ZSh0aGlzLlYpLnVwZGF0ZShbMF0pO1AmJihGPUYudXBkYXRlKFApKSx0aGlzLks9Ri5kaWdlc3QoKSx0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpLFAmJih0aGlzLks9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLnVwZGF0ZShbMV0pLnVwZGF0ZShQKS5k''@;'; put 'put ''aWdlc3QoKSx0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpKX0sVi5wcm90b3R5cGUucmVzZWVkPWZ1bmN0aW9uKFAsRixSLHopeyJzdHJpbmciIT10eXBlb2YgRiYmKHo9UixSPUYsRj1udWxsKSxQPV8udG9BcnJheShQLEYpLFI9Xy50b0FycmF5KFIseikscChQ''@;'; put 'put ''Lmxlbmd0aD49dGhpcy5taW5FbnRyb3B5LzgsIk5vdCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczogIit0aGlzLm1pbkVudHJvcHkrIiBiaXRzIiksdGhpcy5fdXBkYXRlKFAuY29uY2F0KFJ8fFtdKSksdGhpcy5fcmVzZWVkPTF9LFYucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKFAs''@;'; put 'put ''RixSLHope2lmKHRoaXMuX3Jlc2VlZD50aGlzLnJlc2VlZEludGVydmFsKXRocm93IG5ldyBFcnJvcigiUmVzZWVkIGlzIHJlcXVpcmVkIik7InN0cmluZyIhPXR5cGVvZiBGJiYoej1SLFI9RixGPW51bGwpLFImJihSPV8udG9BcnJheShSLHp8fCJoZXgiKSx0aGlzLl91cGRhdGUoUikpO2Zv''@;'; put 'put ''cih2YXIgTj1bXTtOLmxlbmd0aDxQOyl0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpLE49Ti5jb25jYXQodGhpcy5WKTt2YXIgTz1OLnNsaWNlKDAsUCk7cmV0dXJuIHRoaXMuX3VwZGF0ZShSKSx0aGlzLl9yZXNlZWQrKyxfLmVuY29kZShPLEYpfX0sNjQ1Oihj''@;'; put 'put ''ZSxYKT0+e1gucmVhZD1mdW5jdGlvbihiLEksXyxwLFYpe3ZhciB3LFAsRj04KlYtcC0xLFI9KDE8PEYpLTEsej1SPj4xLE49LTcsTz1fP1YtMTowLEs9Xz8tMToxLFo9YltJK09dO2ZvcihPKz1LLHc9WiYoMTw8LU4pLTEsWj4+PS1OLE4rPUY7Tj4wO3c9MjU2KncrYltJK09dLE8rPUssTi09''@;'; put 'put ''OCk7Zm9yKFA9dyYoMTw8LU4pLTEsdz4+PS1OLE4rPXA7Tj4wO1A9MjU2KlArYltJK09dLE8rPUssTi09OCk7aWYoMD09PXcpdz0xLXo7ZWxzZXtpZih3PT09UilyZXR1cm4gUD9OYU46MS8wKihaPy0xOjEpO1ArPU1hdGgucG93KDIscCksdy09en1yZXR1cm4oWj8tMToxKSpQKk1hdGgucG93''@;'; put 'put ''KDIsdy1wKX0sWC53cml0ZT1mdW5jdGlvbihiLEksXyxwLFYsdyl7dmFyIFAsRixSLHo9OCp3LVYtMSxOPSgxPDx6KS0xLE89Tj4+MSxLPTIzPT09Vj9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsWj1wPzA6dy0xLFk9cD8xOi0xLFc9STwwfHwwPT09SSYmMS9JPDA/MTowO2Zv''@;'; put 'put ''cihJPU1hdGguYWJzKEkpLGlzTmFOKEkpfHxJPT09MS8wPyhGPWlzTmFOKEkpPzE6MCxQPU4pOihQPU1hdGguZmxvb3IoTWF0aC5sb2coSSkvTWF0aC5MTjIpLEkqKFI9TWF0aC5wb3coMiwtUCkpPDEmJihQLS0sUio9MiksKEkrPVArTz49MT9LL1I6SypNYXRoLnBvdygyLDEtTykpKlI+PTIm''@;'; put 'put ''JihQKyssUi89MiksUCtPPj1OPyhGPTAsUD1OKTpQK08+PTE/KEY9KEkqUi0xKSpNYXRoLnBvdygyLFYpLFArPU8pOihGPUkqTWF0aC5wb3coMixPLTEpKk1hdGgucG93KDIsViksUD0wKSk7Vj49ODtiW18rWl09MjU1JkYsWis9WSxGLz0yNTYsVi09OCk7Zm9yKFA9UDw8VnxGLHorPVY7ej4w''@;'; put 'put ''O2JbXytaXT0yNTUmUCxaKz1ZLFAvPTI1Nix6LT04KTtiW18rWi1ZXXw9MTI4Kld9fSw1NzE3OmNlPT57Y2UuZXhwb3J0cz0iZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihiLEkpe0kmJihiLnN1cGVyXz1JLGIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90''@;'; put 'put ''b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpiLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pKX06ZnVuY3Rpb24oYixJKXtpZihJKXtiLnN1cGVyXz1JO3ZhciBfPWZ1bmN0aW9uKCl7fTtfLnByb3RvdHlwZT1JLnByb3RvdHlwZSxiLnByb3RvdHlwZT1uZXcg''@;'; put 'put ''XyxiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1ifX19LDI1ODQ6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig2NDEwKSgpLHA9Yig3Mzc5KSgiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyIpLFY9ZnVuY3Rpb24oUil7cmV0dXJuIShJJiZSJiYib2JqZWN0Ij09dHlwZW9mIFImJlN5''@;'; put 'put ''bWJvbC50b1N0cmluZ1RhZyBpbiBSKSYmIltvYmplY3QgQXJndW1lbnRzXSI9PT1wKFIpfSx3PWZ1bmN0aW9uKFIpe3JldHVybiEhVihSKXx8bnVsbCE9PVImJiJvYmplY3QiPT10eXBlb2YgUiYmImxlbmd0aCJpbiBSJiYibnVtYmVyIj09dHlwZW9mIFIubGVuZ3RoJiZSLmxlbmd0aD49MCYm''@;'; put 'put ''IltvYmplY3QgQXJyYXldIiE9PXAoUikmJiJjYWxsZWUiaW4gUiYmIltvYmplY3QgRnVuY3Rpb25dIj09PXAoUi5jYWxsZWUpfSxQPWZ1bmN0aW9uKCl7cmV0dXJuIFYoYXJndW1lbnRzKX0oKTtWLmlzTGVnYWN5QXJndW1lbnRzPXcsY2UuZXhwb3J0cz1QP1Y6d30sNTMyMDpjZT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgSSxfLFg9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLGI9Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiZudWxsIT09UmVmbGVjdCYmUmVmbGVjdC5hcHBseTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYiYmImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eSl0cnl7ST1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sImxlbmd0aCIse2dldDpmdW5jdGlvbigpe3Rocm93IF99fSksXz17fSxiKGZ1bmN0aW9uKCl7dGhyb3cgNDJ9LG51bGwsSSl9Y2F0Y2goZWUpe2VlIT09XyYmKGI9bnVsbCl9ZWxzZSBiPW51bGw7dmFyIHA9L15ccypjbGFzc1xi''@;'; put 'put ''LyxWPWZ1bmN0aW9uKEope3RyeXt2YXIgcmU9WC5jYWxsKEopO3JldHVybiBwLnRlc3QocmUpfWNhdGNoe3JldHVybiExfX0sdz1mdW5jdGlvbihKKXt0cnl7cmV0dXJuIVYoSikmJihYLmNhbGwoSiksITApfWNhdGNoe3JldHVybiExfX0sUD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLFo9''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmISFTeW1ib2wudG9TdHJpbmdUYWcsWT0hKDAgaW5bLF0pLFc9ZnVuY3Rpb24oKXtyZXR1cm4hMX07aWYoIm9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCl7dmFyIHE9ZG9jdW1lbnQuYWxsO1AuY2FsbChxKT09PVAuY2FsbChkb2N1bWVudC5hbGwp''@;'; put 'put ''JiYoVz1mdW5jdGlvbihKKXtpZigoWXx8IUopJiYodHlwZW9mIEo+InUifHwib2JqZWN0Ij09dHlwZW9mIEopKXRyeXt2YXIgcmU9UC5jYWxsKEopO3JldHVybigiW29iamVjdCBIVE1MQWxsQ29sbGVjdGlvbl0iPT09cmV8fCJbb2JqZWN0IEhUTUwgZG9jdW1lbnQuYWxsIGNsYXNzXSI9PT1y''@;'; put 'put ''ZXx8IltvYmplY3QgSFRNTENvbGxlY3Rpb25dIj09PXJlfHwiW29iamVjdCBPYmplY3RdIj09PXJlKSYmbnVsbD09SigiIil9Y2F0Y2h7fXJldHVybiExfSl9Y2UuZXhwb3J0cz1iP2Z1bmN0aW9uKEope2lmKFcoSikpcmV0dXJuITA7aWYoIUp8fCJmdW5jdGlvbiIhPXR5cGVvZiBKJiYib2Jq''@;'; put 'put ''ZWN0IiE9dHlwZW9mIEopcmV0dXJuITE7dHJ5e2IoSixudWxsLEkpfWNhdGNoKHJlKXtpZihyZSE9PV8pcmV0dXJuITF9cmV0dXJuIVYoSikmJncoSil9OmZ1bmN0aW9uKEope2lmKFcoSikpcmV0dXJuITA7aWYoIUp8fCJmdW5jdGlvbiIhPXR5cGVvZiBKJiYib2JqZWN0IiE9dHlwZW9mIEop''@;'; put 'put ''cmV0dXJuITE7aWYoWilyZXR1cm4gdyhKKTtpZihWKEopKXJldHVybiExO3ZhciByZT1QLmNhbGwoSik7cmV0dXJuISgiW29iamVjdCBGdW5jdGlvbl0iIT09cmUmJiJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIhPT1yZSYmIS9eXFtvYmplY3QgSFRNTC8udGVzdChyZSkpJiZ3KEopfX0s''@;'; put 'put ''ODY2MjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeixJPWIoNzM3OSkscD1iKDkyNDYpKC9eXHMqKD86ZnVuY3Rpb24pP1wqLyksVj1iKDY0MTApKCksdz1iKDE2MTgpLFA9SSgiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyIpLEY9SSgiRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5n''@;'; put 'put ''Iik7Y2UuZXhwb3J0cz1mdW5jdGlvbihPKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgTylyZXR1cm4hMTtpZihwKEYoTykpKXJldHVybiEwO2lmKCFWKXJldHVybiJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PT1QKE8pO2lmKCF3KXJldHVybiExO2lmKHR5cGVvZiB6PiJ1Iil7dmFyIFo9''@;'; put 'put ''ZnVuY3Rpb24oKXtpZighVilyZXR1cm4hMTt0cnl7cmV0dXJuIEZ1bmN0aW9uKCJyZXR1cm4gZnVuY3Rpb24qKCkge30iKSgpfWNhdGNoe319KCk7ej0hIVomJncoWil9cmV0dXJuIHcoTyk9PT16fX0sODYxMTpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPWZ1bmN0aW9uKGIpe3JldHVy''@;'; put 'put ''biBiIT1ifX0sMzYwOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNTU1OSksXz1iKDQyODkpLHA9Yig4NjExKSxWPWIoOTQxNSksdz1iKDMxOTQpLFA9SShWKCksTnVtYmVyKTtfKFAse2dldFBvbHlmaWxsOlYsaW1wbGVtZW50YXRpb246cCxzaGltOnd9KSxjZS5leHBvcnRzPVB9''@;'; put 'put ''LDk0MTU6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig4NjExKTtjZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIE51bWJlci5pc05hTiYmTnVtYmVyLmlzTmFOKE5hTikmJiFOdW1iZXIuaXNOYU4oImEiKT9OdW1iZXIuaXNOYU46SX19LDMxOTQ6KGNlLFgsYik9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIEk9Yig0Mjg5KSxfPWIoOTQxNSk7Y2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciBWPV8oKTtyZXR1cm4gSShOdW1iZXIse2lzTmFOOlZ9LHtpc05hTjpmdW5jdGlvbigpe3JldHVybiBOdW1iZXIuaXNOYU4hPT1WfX0pLFZ9fSw4NDIwOihjZSxYLGIpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciB3LEk9Yig3Mzc5KSxfPWIoNjQxMCkoKSxwPWIoODgyNCksVj1iKDcyOTYpO2lmKF8pe3ZhciBQPUkoIlJlZ0V4cC5wcm90b3R5cGUuZXhlYyIpLEY9e30sUj1mdW5jdGlvbigpe3Rocm93IEZ9LHo9e3RvU3RyaW5nOlIsdmFsdWVPZjpSfTsic3ltYm9sIj09dHlwZW9mIFN5bWJvbC50''@;'; put 'put ''b1ByaW1pdGl2ZSYmKHpbU3ltYm9sLnRvUHJpbWl0aXZlXT1SKSx3PWZ1bmN0aW9uKFope2lmKCFafHwib2JqZWN0IiE9dHlwZW9mIFopcmV0dXJuITE7dmFyIFk9VihaLCJsYXN0SW5kZXgiKTtpZighWXx8IXAoWSwidmFsdWUiKSlyZXR1cm4hMTt0cnl7UChaLHopfWNhdGNoKHEpe3JldHVy''@;'; put 'put ''biBxPT09Rn19fWVsc2V7dmFyIE49SSgiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyIpO3c9ZnVuY3Rpb24oWil7cmV0dXJuISghWnx8Im9iamVjdCIhPXR5cGVvZiBaJiYiZnVuY3Rpb24iIT10eXBlb2YgWikmJiJbb2JqZWN0IFJlZ0V4cF0iPT09TihaKX19Y2UuZXhwb3J0cz13fSw1Njky''@;'; put 'put ''OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNjQzMCk7Y2UuZXhwb3J0cz1mdW5jdGlvbihwKXtyZXR1cm4hIUkocCl9fSw1ODI2OmNlPT57dmFyIFg9e30udG9TdHJpbmc7Y2UuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihiKXtyZXR1cm4iW29iamVjdCBBcnJheV0i''@;'; put 'put ''PT1YLmNhbGwoYil9fSw2ODEzOihjZSxYLGIpPT57bGV0IEk7dHJ5e0k9Yig3Nyl9Y2F0Y2h7ST1iKDQxMjkpfWNvbnN0IF89Yig4OTgxKSx7c3RyaW5naWZ5OnAsc3RyaXBCb206Vn09Yig2NzgwKTtmdW5jdGlvbiBQKCl7cmV0dXJuKFA9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFks''@;'; put 'put ''Vz17fSl7InN0cmluZyI9PXR5cGVvZiBXJiYoVz17ZW5jb2Rpbmc6V30pO2NvbnN0IHE9Vy5mc3x8SSxlZT0hKCJ0aHJvd3MiaW4gVyl8fFcudGhyb3dzO2xldCByZSxKPXlpZWxkIF8uZnJvbUNhbGxiYWNrKHEucmVhZEZpbGUpKFksVyk7Sj1WKEopO3RyeXtyZT1KU09OLnBhcnNlKEosVz9X''@;'; put 'put ''LnJldml2ZXI6bnVsbCl9Y2F0Y2goaWUpe2lmKGVlKXRocm93IGllLm1lc3NhZ2U9YCR7WX06ICR7aWUubWVzc2FnZX1gLGllO3JldHVybiBudWxsfXJldHVybiByZX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y29uc3QgRj1fLmZyb21Qcm9taXNlKGZ1bmN0aW9uIHcoWSl7cmV0dXJuIFAu''@;'; put 'put ''YXBwbHkodGhpcyxhcmd1bWVudHMpfSk7ZnVuY3Rpb24gTigpe3JldHVybihOPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihZLFcscT17fSl7Y29uc3QgZWU9cS5mc3x8SSxKPXAoVyxxKTt5aWVsZCBfLmZyb21DYWxsYmFjayhlZS53cml0ZUZpbGUpKFksSixxKX0pKS5hcHBseSh0aGlz''@;'; put 'put ''LGFyZ3VtZW50cyl9Y29uc3QgTz1fLmZyb21Qcm9taXNlKGZ1bmN0aW9uIHooWSxXKXtyZXR1cm4gTi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KTtjZS5leHBvcnRzPXtyZWFkRmlsZTpGLHJlYWRGaWxlU3luYzpmdW5jdGlvbiBSKFksVz17fSl7InN0cmluZyI9PXR5cGVvZiBXJiYoVz17ZW5j''@;'; put 'put ''b2Rpbmc6V30pO2NvbnN0IHE9Vy5mc3x8SSxlZT0hKCJ0aHJvd3MiaW4gVyl8fFcudGhyb3dzO3RyeXtsZXQgSj1xLnJlYWRGaWxlU3luYyhZLFcpO3JldHVybiBKPVYoSiksSlNPTi5wYXJzZShKLFcucmV2aXZlcil9Y2F0Y2goSil7aWYoZWUpdGhyb3cgSi5tZXNzYWdlPWAke1l9OiAke0ou''@;'; put 'put ''bWVzc2FnZX1gLEo7cmV0dXJuIG51bGx9fSx3cml0ZUZpbGU6Tyx3cml0ZUZpbGVTeW5jOmZ1bmN0aW9uIEsoWSxXLHE9e30pe2NvbnN0IGVlPXEuZnN8fEksSj1wKFcscSk7cmV0dXJuIGVlLndyaXRlRmlsZVN5bmMoWSxKLHEpfX19LDY3ODA6KGNlLFgsYik9Pnt2YXIgST1iKDg3NjQpLkJ1''@;'; put 'put ''ZmZlcjtjZS5leHBvcnRzPXtzdHJpbmdpZnk6ZnVuY3Rpb24gXyhWLHtFT0w6dz0iXG4iLGZpbmFsRU9MOlA9ITAscmVwbGFjZXI6Rj1udWxsLHNwYWNlczpSfT17fSl7Y29uc3Qgej1QP3c6IiI7cmV0dXJuIEpTT04uc3RyaW5naWZ5KFYsRixSKS5yZXBsYWNlKC9cbi9nLHcpK3p9LHN0cmlw''@;'; put 'put ''Qm9tOmZ1bmN0aW9uIHAoVil7cmV0dXJuIEkuaXNCdWZmZXIoVikmJihWPVYudG9TdHJpbmcoInV0ZjgiKSksVi5yZXBsYWNlKC9eXHVGRUZGLywiIil9fX0sNjI0NTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJKEYpe3RoaXMubWVzc2FnZT1GfWIucihYKSxiLmQoWCx7SW52''@;'; put 'put ''YWxpZFRva2VuRXJyb3I6KCk9PlYsZGVmYXVsdDooKT0+UH0pLChJLnByb3RvdHlwZT1uZXcgRXJyb3IpLm5hbWU9IkludmFsaWRDaGFyYWN0ZXJFcnJvciI7dmFyIF89dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5hdG9iJiZ3aW5kb3cuYXRvYi5iaW5kKHdpbmRvdyl8fGZ1bmN0aW9uKEYp''@;'; put 'put ''e3ZhciBSPVN0cmluZyhGKS5yZXBsYWNlKC89KyQvLCIiKTtpZihSLmxlbmd0aCU0PT0xKXRocm93IG5ldyBJKCInYXRvYicgZmFpbGVkOiBUaGUgc3RyaW5nIHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLiIpO2Zvcih2YXIgeixOLE89MCxLPTAsWj0iIjtOPVIuY2hh''@;'; put 'put ''ckF0KEsrKyk7fk4mJih6PU8lND82NCp6K046TixPKyslNCk/Wis9U3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmej4+KC0yKk8mNikpOjApTj0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iLmluZGV4T2YoTik7cmV0dXJu''@;'; put 'put ''IFp9O2Z1bmN0aW9uIFYoRil7dGhpcy5tZXNzYWdlPUZ9KFYucHJvdG90eXBlPW5ldyBFcnJvcikubmFtZT0iSW52YWxpZFRva2VuRXJyb3IiO2NvbnN0IFA9ZnVuY3Rpb24gdyhGLFIpe2lmKCJzdHJpbmciIT10eXBlb2YgRil0aHJvdyBuZXcgVigiSW52YWxpZCB0b2tlbiBzcGVjaWZpZWQi''@;'; put 'put ''KTt2YXIgej0hMD09PShSPVJ8fHt9KS5oZWFkZXI/MDoxO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShmdW5jdGlvbiBwKEYpe3ZhciBSPUYucmVwbGFjZSgvLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIik7c3dpdGNoKFIubGVuZ3RoJTQpe2Nhc2UgMDpicmVhaztjYXNlIDI6Uis9Ij09IjticmVh''@;'; put 'put ''aztjYXNlIDM6Uis9Ij0iO2JyZWFrO2RlZmF1bHQ6dGhyb3ciSWxsZWdhbCBiYXNlNjR1cmwgc3RyaW5nISJ9dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoXyhSKS5yZXBsYWNlKC8oLikvZyxmdW5jdGlvbihOLE8pe3ZhciBLPU8uY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9V''@;'; put 'put ''cHBlckNhc2UoKTtyZXR1cm4gSy5sZW5ndGg8MiYmKEs9IjAiK0spLCIlIitLfSkpfWNhdGNoe3JldHVybiBfKFIpfX0oRi5zcGxpdCgiLiIpW3pdKSl9Y2F0Y2goTil7dGhyb3cgbmV3IFYoIkludmFsaWQgdG9rZW4gc3BlY2lmaWVkOiAiK04ubWVzc2FnZSl9fX0sMTY1ODooY2UsWCxiKT0+''@;'; put 'put ''e3ZhciBJPTEvMCxwPS9bXFxeJC4qKz8oKVtcXXt9fF0vZyxWPVJlZ0V4cChwLnNvdXJjZSksUD0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLEY9Im9iamVjdCI9PXR5cGVvZiBiLmcmJmIuZyYmYi5nLk9iamVjdD09PU9iamVjdCYmYi5n''@;'; put 'put ''fHxQfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLHo9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxOPUYuU3ltYm9sLE89Tj9OLnByb3RvdHlwZTp2b2lkIDAsSz1PP08udG9TdHJpbmc6dm9pZCAwO2NlLmV4cG9ydHM9ZnVuY3Rpb24gZWUoSil7cmV0dXJuKEo9ZnVuY3Rpb24gcShKKXty''@;'; put 'put ''ZXR1cm4gbnVsbD09Sj8iIjpmdW5jdGlvbiBaKEope2lmKCJzdHJpbmciPT10eXBlb2YgSilyZXR1cm4gSjtpZihmdW5jdGlvbiBXKEope3JldHVybiJzeW1ib2wiPT10eXBlb2YgSnx8ZnVuY3Rpb24gWShKKXtyZXR1cm4hIUomJiJvYmplY3QiPT10eXBlb2YgSn0oSikmJiJbb2JqZWN0IFN5''@;'; put 'put ''bWJvbF0iPT16LmNhbGwoSil9KEopKXJldHVybiBLP0suY2FsbChKKToiIjt2YXIgcmU9SisiIjtyZXR1cm4iMCI9PXJlJiYxL0o9PS1JPyItMCI6cmV9KEopfShKKSkmJlYudGVzdChKKT9KLnJlcGxhY2UocCwiXFwkJiIpOkp9fSw4MDk0OmNlPT57dmFyIEk9T2JqZWN0LnByb3RvdHlwZS50''@;'; put 'put ''b1N0cmluZztjZS5leHBvcnRzPWZ1bmN0aW9uIF8oVil7cmV0dXJuITA9PT1WfHwhMT09PVZ8fGZ1bmN0aW9uIHAoVil7cmV0dXJuISFWJiYib2JqZWN0Ij09dHlwZW9mIFZ9KFYpJiYiW29iamVjdCBCb29sZWFuXSI9PUkuY2FsbChWKX19LDIzMDc6KGNlLFgsYik9PntjZT1iLm5tZChjZSk7''@;'; put 'put ''dmFyIF89Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLHc9OTAwNzE5OTI1NDc0MDk5MSxQPSJbb2JqZWN0IEFyZ3VtZW50c10iLEY9IltvYmplY3QgQXJyYXldIix6PSJbb2JqZWN0IEJvb2xlYW5dIixOPSJbb2JqZWN0IERhdGVdIixPPSJbb2JqZWN0IEVycm9yXSIsSz0iW29iamVjdCBG''@;'; put 'put ''dW5jdGlvbl0iLFk9IltvYmplY3QgTWFwXSIsVz0iW29iamVjdCBOdW1iZXJdIixlZT0iW29iamVjdCBPYmplY3RdIixKPSJbb2JqZWN0IFByb21pc2VdIixpZT0iW29iamVjdCBSZWdFeHBdIix1ZT0iW29iamVjdCBTZXRdIixnZT0iW29iamVjdCBTdHJpbmddIixNZT0iW29iamVjdCBXZWFr''@;'; put 'put ''TWFwXSIsWmU9IltvYmplY3QgQXJyYXlCdWZmZXJdIixCPSJbb2JqZWN0IERhdGFWaWV3XSIsYWU9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sbmU9L14oPzowfFsxLTldXGQqKSQvLHNlPXt9O3NlWyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1zZVsiW29iamVjdCBGbG9hdDY0QXJy''@;'; put 'put ''YXldIl09c2VbIltvYmplY3QgSW50OEFycmF5XSJdPXNlWyJbb2JqZWN0IEludDE2QXJyYXldIl09c2VbIltvYmplY3QgSW50MzJBcnJheV0iXT1zZVsiW29iamVjdCBVaW50OEFycmF5XSJdPXNlWyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPXNlWyJbb2JqZWN0IFVpbnQxNkFycmF5''@;'; put 'put ''XSJdPXNlWyJbb2JqZWN0IFVpbnQzMkFycmF5XSJdPSEwLHNlW1BdPXNlW0ZdPXNlW1plXT1zZVt6XT1zZVtCXT1zZVtOXT1zZVtPXT1zZVtLXT1zZVtZXT1zZVtXXT1zZVtlZV09c2VbaWVdPXNlW3VlXT1zZVtnZV09c2VbTWVdPSExO3ZhciBDZT0ib2JqZWN0Ij09dHlwZW9mIGIuZyYmYi5n''@;'; put 'put ''JiZiLmcuT2JqZWN0PT09T2JqZWN0JiZiLmcsVWU9Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixKZT1DZXx8VWV8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksaXQ9WCYmIVgubm9kZVR5cGUmJlgseGU9aXQmJmNlJiYhY2Uubm9kZVR5''@;'; put 'put ''cGUmJmNlLHllPXhlJiZ4ZS5leHBvcnRzPT09aXQsS2U9eWUmJkNlLnByb2Nlc3MsamU9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIEtlJiZLZS5iaW5kaW5nJiZLZS5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2h7fX0oKSxrZT1qZSYmamUuaXNUeXBlZEFycmF5O2Z1bmN0aW9uIFJlKHhuLGdyKXtmb3Io''@;'; put 'put ''dmFyIFNpPS0xLHRhPW51bGw9PXhuPzA6eG4ubGVuZ3RoOysrU2k8dGE7KWlmKGdyKHhuW1NpXSxTaSx4bikpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gRGUoeG4sZ3Ipe3JldHVybiB4bi5oYXMoZ3IpfWZ1bmN0aW9uIHJ0KHhuKXt2YXIgZ3I9LTEsU2k9QXJyYXkoeG4uc2l6ZSk7cmV0''@;'; put 'put ''dXJuIHhuLmZvckVhY2goZnVuY3Rpb24odGEsemkpe1NpWysrZ3JdPVt6aSx0YV19KSxTaX1mdW5jdGlvbiBzbih4bil7dmFyIGdyPS0xLFNpPUFycmF5KHhuLnNpemUpO3JldHVybiB4bi5mb3JFYWNoKGZ1bmN0aW9uKHRhKXtTaVsrK2dyXT10YX0pLFNpfXZhciB4bix2dD1BcnJheS5wcm90''@;'; put 'put ''b3R5cGUsZW49T2JqZWN0LnByb3RvdHlwZSx1dD1KZVsiX19jb3JlLWpzX3NoYXJlZF9fIl0sWGU9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLHR0PWVuLmhhc093blByb3BlcnR5LEllPSh4bj0vW14uXSskLy5leGVjKHV0JiZ1dC5rZXlzJiZ1dC5rZXlzLklFX1BST1RPfHwiIikpPyJT''@;'; put 'put ''eW1ib2woc3JjKV8xLiIreG46IiIsYXQ9ZW4udG9TdHJpbmcsdW49UmVnRXhwKCJeIitYZS5jYWxsKHR0KS5yZXBsYWNlKC9bXFxeJC4qKz8oKVtcXXt9fF0vZywiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2cs''@;'; put 'put ''IiQxLio/IikrIiQiKSxJdD15ZT9KZS5CdWZmZXI6dm9pZCAwLFJ0PUplLlN5bWJvbCxyaT1KZS5VaW50OEFycmF5LGFuPWVuLnByb3BlcnR5SXNFbnVtZXJhYmxlLGxuPXZ0LnNwbGljZSxuaT1SdD9SdC50b1N0cmluZ1RhZzp2b2lkIDAsaG49T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9s''@;'; put 'put ''cyxodD1JdD9JdC5pc0J1ZmZlcjp2b2lkIDAsUnI9ZnVuY3Rpb24gUWUoeG4sZ3Ipe3JldHVybiBmdW5jdGlvbihTaSl7cmV0dXJuIHhuKGdyKFNpKSl9fShPYmplY3Qua2V5cyxPYmplY3QpLEJ0PVpkKEplLCJEYXRhVmlldyIpLEF0PVpkKEplLCJNYXAiKSxGbj1aZChKZSwiUHJvbWlzZSIp''@;'; put 'put ''LHN0PVpkKEplLCJTZXQiKSxadD1aZChKZSwiV2Vha01hcCIpLFFyPVpkKE9iamVjdCwiY3JlYXRlIiksWWU9aGMoQnQpLFR0PWhjKEF0KSxycj1oYyhGbiksZnQ9aGMoc3QpLE10PWhjKFp0KSxabj1SdD9SdC5wcm90b3R5cGU6dm9pZCAwLG5uPVpuP1puLnZhbHVlT2Y6dm9pZCAwO2Z1bmN0''@;'; put 'put ''aW9uIFd0KHhuKXt2YXIgZ3I9LTEsU2k9bnVsbD09eG4/MDp4bi5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2dyPFNpOyl7dmFyIHRhPXhuW2dyXTt0aGlzLnNldCh0YVswXSx0YVsxXSl9fWZ1bmN0aW9uIHRuKHhuKXt2YXIgZ3I9LTEsU2k9bnVsbD09eG4/MDp4bi5sZW5ndGg7Zm9yKHRo''@;'; put 'put ''aXMuY2xlYXIoKTsrK2dyPFNpOyl7dmFyIHRhPXhuW2dyXTt0aGlzLnNldCh0YVswXSx0YVsxXSl9fWZ1bmN0aW9uIFZpKHhuKXt2YXIgZ3I9LTEsU2k9bnVsbD09eG4/MDp4bi5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2dyPFNpOyl7dmFyIHRhPXhuW2dyXTt0aGlzLnNldCh0YVswXSx0''@;'; put 'put ''YVsxXSl9fWZ1bmN0aW9uIHFpKHhuKXt2YXIgZ3I9LTEsU2k9bnVsbD09eG4/MDp4bi5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IFZpOysrZ3I8U2k7KXRoaXMuYWRkKHhuW2dyXSl9ZnVuY3Rpb24gYmEoeG4pe3ZhciBncj10aGlzLl9fZGF0YV9fPW5ldyB0bih4bik7dGhpcy5zaXpl''@;'; put 'put ''PWdyLnNpemV9ZnVuY3Rpb24gJGMoeG4sZ3Ipe2Zvcih2YXIgU2k9eG4ubGVuZ3RoO1NpLS07KWlmKHZnKHhuW1NpXVswXSxncikpcmV0dXJuIFNpO3JldHVybi0xfWZ1bmN0aW9uIFByKHhuKXtyZXR1cm4gbnVsbD09eG4/dm9pZCAwPT09eG4/IltvYmplY3QgVW5kZWZpbmVkXSI6IltvYmpl''@;'; put 'put ''Y3QgTnVsbF0iOm5pJiZuaSBpbiBPYmplY3QoeG4pP2Z1bmN0aW9uIHkxKHhuKXt2YXIgZ3I9dHQuY2FsbCh4bixuaSksU2k9eG5bbmldO3RyeXt4bltuaV09dm9pZCAwO3ZhciB0YT0hMH1jYXRjaHt9dmFyIHppPWF0LmNhbGwoeG4pO3JldHVybiB0YSYmKGdyP3huW25pXT1TaTpkZWxldGUg''@;'; put 'put ''eG5bbmldKSx6aX0oeG4pOmZ1bmN0aW9uICRsKHhuKXtyZXR1cm4gYXQuY2FsbCh4bil9KHhuKX1mdW5jdGlvbiBkMCh4bil7cmV0dXJuIGh1KHhuKSYmUHIoeG4pPT1QfWZ1bmN0aW9uIG5yKHhuLGdyLFNpLHRhLHppKXtyZXR1cm4geG49PT1ncnx8KG51bGw9PXhufHxudWxsPT1ncnx8IWh1''@;'; put 'put ''KHhuKSYmIWh1KGdyKT94biE9eG4mJmdyIT1ncjpmdW5jdGlvbiBSYSh4bixncixTaSx0YSx6aSxhbyl7dmFyIG9sPXVzKHhuKSwkbz11cyhnciksVGw9b2w/RjpCYSh4biksQWw9JG8/RjpCYShnciksZnI9KFRsPVRsPT1QP2VlOlRsKT09ZWUsSm89KEFsPUFsPT1QP2VlOkFsKT09ZWUseWk9''@;'; put 'put ''VGw9PUFsO2lmKHlpJiZXZCh4bikpe2lmKCFXZChncikpcmV0dXJuITE7b2w9ITAsZnI9ITF9aWYoeWkmJiFmcilyZXR1cm4gYW98fChhbz1uZXcgYmEpLG9sfHxTcCh4bik/dWMoeG4sZ3IsU2ksdGEsemksYW8pOmZ1bmN0aW9uIFpvKHhuLGdyLFNpLHRhLHppLGFvLG9sKXtzd2l0Y2goU2kp''@;'; put 'put ''e2Nhc2UgQjppZih4bi5ieXRlTGVuZ3RoIT1nci5ieXRlTGVuZ3RofHx4bi5ieXRlT2Zmc2V0IT1nci5ieXRlT2Zmc2V0KXJldHVybiExO3huPXhuLmJ1ZmZlcixncj1nci5idWZmZXI7Y2FzZSBaZTpyZXR1cm4hKHhuLmJ5dGVMZW5ndGghPWdyLmJ5dGVMZW5ndGh8fCFhbyhuZXcgcmkoeG4p''@;'; put 'put ''LG5ldyByaShncikpKTtjYXNlIHo6Y2FzZSBOOmNhc2UgVzpyZXR1cm4gdmcoK3huLCtncik7Y2FzZSBPOnJldHVybiB4bi5uYW1lPT1nci5uYW1lJiZ4bi5tZXNzYWdlPT1nci5tZXNzYWdlO2Nhc2UgaWU6Y2FzZSBnZTpyZXR1cm4geG49PWdyKyIiO2Nhc2UgWTp2YXIgJG89cnQ7Y2FzZSB1''@;'; put 'put ''ZTppZigkb3x8KCRvPXNuKSx4bi5zaXplIT1nci5zaXplJiYhKDEmdGEpKXJldHVybiExO3ZhciBBbD1vbC5nZXQoeG4pO2lmKEFsKXJldHVybiBBbD09Z3I7dGF8PTIsb2wuc2V0KHhuLGdyKTt2YXIgZnI9dWMoJG8oeG4pLCRvKGdyKSx0YSx6aSxhbyxvbCk7cmV0dXJuIG9sLmRlbGV0ZSh4''@;'; put 'put ''biksZnI7Y2FzZSJbb2JqZWN0IFN5bWJvbF0iOmlmKG5uKXJldHVybiBubi5jYWxsKHhuKT09bm4uY2FsbChncil9cmV0dXJuITF9KHhuLGdyLFRsLFNpLHRhLHppLGFvKTtpZighKDEmU2kpKXt2YXIgS2w9ZnImJnR0LmNhbGwoeG4sIl9fd3JhcHBlZF9fIiksX3M9Sm8mJnR0LmNhbGwoZ3Is''@;'; put 'put ''Il9fd3JhcHBlZF9fIik7aWYoS2x8fF9zKXt2YXIgSHQ9S2w/eG4udmFsdWUoKTp4bixqdD1fcz9nci52YWx1ZSgpOmdyO3JldHVybiBhb3x8KGFvPW5ldyBiYSksemkoSHQsanQsU2ksdGEsYW8pfX1yZXR1cm4hIXlpJiYoYW98fChhbz1uZXcgYmEpLGZ1bmN0aW9uIGRjKHhuLGdyLFNpLHRh''@;'; put 'put ''LHppLGFvKXt2YXIgb2w9MSZTaSwkbz1qcih4biksVGw9JG8ubGVuZ3RoO2lmKFRsIT1qcihncikubGVuZ3RoJiYhb2wpcmV0dXJuITE7Zm9yKHZhciBKbz1UbDtKby0tOyl7dmFyIHlpPSRvW0pvXTtpZighKG9sP3lpIGluIGdyOnR0LmNhbGwoZ3IseWkpKSlyZXR1cm4hMX12YXIgS2w9YW8u''@;'; put 'put ''Z2V0KHhuKTtpZihLbCYmYW8uZ2V0KGdyKSlyZXR1cm4gS2w9PWdyO3ZhciBfcz0hMDthby5zZXQoeG4sZ3IpLGFvLnNldChncix4bik7Zm9yKHZhciBIdD1vbDsrK0pvPFRsOyl7dmFyIGp0PXhuW3lpPSRvW0pvXV0scG49Z3JbeWldO2lmKHRhKXZhciBWdD1vbD90YShwbixqdCx5aSxncix4''@;'; put 'put ''bixhbyk6dGEoanQscG4seWkseG4sZ3IsYW8pO2lmKCEodm9pZCAwPT09VnQ/anQ9PT1wbnx8emkoanQscG4sU2ksdGEsYW8pOlZ0KSl7X3M9ITE7YnJlYWt9SHR8fChIdD0iY29uc3RydWN0b3IiPT15aSl9aWYoX3MmJiFIdCl7dmFyIERuPXhuLmNvbnN0cnVjdG9yLG1yPWdyLmNvbnN0cnVj''@;'; put 'put ''dG9yO0RuIT1tciYmImNvbnN0cnVjdG9yImluIHhuJiYiY29uc3RydWN0b3IiaW4gZ3ImJiEoImZ1bmN0aW9uIj09dHlwZW9mIERuJiZEbiBpbnN0YW5jZW9mIERuJiYiZnVuY3Rpb24iPT10eXBlb2YgbXImJm1yIGluc3RhbmNlb2YgbXIpJiYoX3M9ITEpfXJldHVybiBhby5kZWxldGUoeG4p''@;'; put 'put ''LGFvLmRlbGV0ZShnciksX3N9KHhuLGdyLFNpLHRhLHppLGFvKSl9KHhuLGdyLFNpLHRhLG5yLHppKSl9ZnVuY3Rpb24gdWMoeG4sZ3IsU2ksdGEsemksYW8pe3ZhciBvbD0xJlNpLCRvPXhuLmxlbmd0aCxUbD1nci5sZW5ndGg7aWYoJG8hPVRsJiYhKG9sJiZUbD4kbykpcmV0dXJuITE7dmFy''@;'; put 'put ''IEFsPWFvLmdldCh4bik7aWYoQWwmJmFvLmdldChncikpcmV0dXJuIEFsPT1ncjt2YXIgZnI9LTEsSm89ITAseWk9MiZTaT9uZXcgcWk6dm9pZCAwO2Zvcihhby5zZXQoeG4sZ3IpLGFvLnNldChncix4bik7Kytmcjwkbzspe3ZhciBLbD14bltmcl0sX3M9Z3JbZnJdO2lmKHRhKXZhciBIdD1v''@;'; put 'put ''bD90YShfcyxLbCxmcixncix4bixhbyk6dGEoS2wsX3MsZnIseG4sZ3IsYW8pO2lmKHZvaWQgMCE9PUh0KXtpZihIdCljb250aW51ZTtKbz0hMTticmVha31pZih5aSl7aWYoIVJlKGdyLGZ1bmN0aW9uKGp0LHBuKXtpZighRGUoeWkscG4pJiYoS2w9PT1qdHx8emkoS2wsanQsU2ksdGEsYW8p''@;'; put 'put ''KSlyZXR1cm4geWkucHVzaChwbil9KSl7Sm89ITE7YnJlYWt9fWVsc2UgaWYoS2whPT1fcyYmIXppKEtsLF9zLFNpLHRhLGFvKSl7Sm89ITE7YnJlYWt9fXJldHVybiBhby5kZWxldGUoeG4pLGFvLmRlbGV0ZShnciksSm99ZnVuY3Rpb24ganIoeG4pe3JldHVybiBmdW5jdGlvbiB2MSh4bixn''@;'; put 'put ''cixTaSl7dmFyIHRhPWdyKHhuKTtyZXR1cm4gdXMoeG4pP3RhOmZ1bmN0aW9uIExlKHhuLGdyKXtmb3IodmFyIFNpPS0xLHRhPWdyLmxlbmd0aCx6aT14bi5sZW5ndGg7KytTaTx0YTspeG5bemkrU2ldPWdyW1NpXTtyZXR1cm4geG59KHRhLFNpKHhuKSl9KHhuLE5oLEE4KX1mdW5jdGlvbiBV''@;'; put 'put ''ZCh4bixncil7dmFyIFNpPXhuLl9fZGF0YV9fO3JldHVybiBmdW5jdGlvbiBRNSh4bil7dmFyIGdyPXR5cGVvZiB4bjtyZXR1cm4ic3RyaW5nIj09Z3J8fCJudW1iZXIiPT1ncnx8InN5bWJvbCI9PWdyfHwiYm9vbGVhbiI9PWdyPyJfX3Byb3RvX18iIT09eG46bnVsbD09PXhufShncik/U2lb''@;'; put 'put ''InN0cmluZyI9PXR5cGVvZiBncj8ic3RyaW5nIjoiaGFzaCJdOlNpLm1hcH1mdW5jdGlvbiBaZCh4bixncil7dmFyIFNpPWZ1bmN0aW9uIF90KHhuLGdyKXtyZXR1cm4geG4/Lltncl19KHhuLGdyKTtyZXR1cm4gZnVuY3Rpb24gYWkoeG4pe3JldHVybiEoIUNwKHhuKXx8ZnVuY3Rpb24gSXMo''@;'; put 'put ''eG4pe3JldHVybiEhSWUmJkllIGluIHhufSh4bikpJiYod3AoeG4pP3VuOmFlKS50ZXN0KGhjKHhuKSl9KFNpKT9TaTp2b2lkIDB9V3QucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIGRpKCl7dGhpcy5fX2RhdGFfXz1Rcj9RcihudWxsKTp7fSx0aGlzLnNpemU9MH0sV3QucHJvdG90eXBlLmRl''@;'; put 'put ''bGV0ZT1mdW5jdGlvbiBkbih4bil7dmFyIGdyPXRoaXMuaGFzKHhuKSYmZGVsZXRlIHRoaXMuX19kYXRhX19beG5dO3JldHVybiB0aGlzLnNpemUtPWdyPzE6MCxncn0sV3QucHJvdG90eXBlLmdldD1mdW5jdGlvbiBtbih4bil7dmFyIGdyPXRoaXMuX19kYXRhX187aWYoUXIpe3ZhciBTaT1n''@;'; put 'put ''clt4bl07cmV0dXJuIFNpPT09Xz92b2lkIDA6U2l9cmV0dXJuIHR0LmNhbGwoZ3IseG4pP2dyW3huXTp2b2lkIDB9LFd0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gcGkoeG4pe3ZhciBncj10aGlzLl9fZGF0YV9fO3JldHVybiBRcj92b2lkIDAhPT1nclt4bl06dHQuY2FsbChncix4bil9LFd0''@;'; put 'put ''LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gZm4oeG4sZ3Ipe3ZhciBTaT10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKHhuKT8wOjEsU2lbeG5dPVFyJiZ2b2lkIDA9PT1ncj9fOmdyLHRoaXN9LHRuLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBjYSgpe3RoaXMuX19k''@;'; put 'put ''YXRhX189W10sdGhpcy5zaXplPTB9LHRuLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gX2koeG4pe3ZhciBncj10aGlzLl9fZGF0YV9fLFNpPSRjKGdyLHhuKTtyZXR1cm4hKFNpPDB8fChTaT09Z3IubGVuZ3RoLTE/Z3IucG9wKCk6bG4uY2FsbChncixTaSwxKSwtLXRoaXMuc2l6ZSwwKSl9''@;'; put 'put ''LHRuLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gdnIoeG4pe3ZhciBncj10aGlzLl9fZGF0YV9fLFNpPSRjKGdyLHhuKTtyZXR1cm4gU2k8MD92b2lkIDA6Z3JbU2ldWzFdfSx0bi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIFhpKHhuKXtyZXR1cm4gJGModGhpcy5fX2RhdGFfXyx4bik+LTF9LHRu''@;'; put 'put ''LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gUWkoeG4sZ3Ipe3ZhciBTaT10aGlzLl9fZGF0YV9fLHRhPSRjKFNpLHhuKTtyZXR1cm4gdGE8MD8oKyt0aGlzLnNpemUsU2kucHVzaChbeG4sZ3JdKSk6U2lbdGFdWzFdPWdyLHRoaXN9LFZpLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBlaSgpe3Ro''@;'; put 'put ''aXMuc2l6ZT0wLHRoaXMuX19kYXRhX189e2hhc2g6bmV3IFd0LG1hcDpuZXcoQXR8fHRuKSxzdHJpbmc6bmV3IFd0fX0sVmkucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiB1YSh4bil7dmFyIGdyPVVkKHRoaXMseG4pLmRlbGV0ZSh4bik7cmV0dXJuIHRoaXMuc2l6ZS09Z3I/MTowLGdyfSxW''@;'; put 'put ''aS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uIFJpKHhuKXtyZXR1cm4gVWQodGhpcyx4bikuZ2V0KHhuKX0sVmkucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBEYSh4bil7cmV0dXJuIFVkKHRoaXMseG4pLmhhcyh4bil9LFZpLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gaGkoeG4sZ3Ipe3ZhciBTaT1V''@;'; put 'put ''ZCh0aGlzLHhuKSx0YT1TaS5zaXplO3JldHVybiBTaS5zZXQoeG4sZ3IpLHRoaXMuc2l6ZSs9U2kuc2l6ZT09dGE/MDoxLHRoaXN9LHFpLnByb3RvdHlwZS5hZGQ9cWkucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24gUGEoeG4pe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldCh4bixfKSx0aGlzfSxx''@;'; put 'put ''aS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIHVyKHhuKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoeG4pfSxiYS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gTWkoKXt0aGlzLl9fZGF0YV9fPW5ldyB0bix0aGlzLnNpemU9MH0sYmEucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiB3YSh4bil7''@;'; put 'put ''dmFyIGdyPXRoaXMuX19kYXRhX18sU2k9Z3IuZGVsZXRlKHhuKTtyZXR1cm4gdGhpcy5zaXplPWdyLnNpemUsU2l9LGJhLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gZWEoeG4pe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldCh4bil9LGJhLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gRnIoeG4pe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9fZGF0YV9fLmhhcyh4bil9LGJhLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gY28oeG4sZ3Ipe3ZhciBTaT10aGlzLl9fZGF0YV9fO2lmKFNpIGluc3RhbmNlb2YgdG4pe3ZhciB0YT1TaS5fX2RhdGFfXztpZighQXR8fHRhLmxlbmd0aDwxOTkpcmV0dXJuIHRhLnB1c2goW3hu''@;'; put 'put ''LGdyXSksdGhpcy5zaXplPSsrU2kuc2l6ZSx0aGlzO1NpPXRoaXMuX19kYXRhX189bmV3IFZpKHRhKX1yZXR1cm4gU2kuc2V0KHhuLGdyKSx0aGlzLnNpemU9U2kuc2l6ZSx0aGlzfTt2YXIgQTg9aG4/ZnVuY3Rpb24oeG4pe3JldHVybiBudWxsPT14bj9bXTooeG49T2JqZWN0KHhuKSxmdW5j''@;'; put 'put ''dGlvbiBIZSh4bixncil7Zm9yKHZhciBTaT0tMSx0YT1udWxsPT14bj8wOnhuLmxlbmd0aCx6aT0wLGFvPVtdOysrU2k8dGE7KXt2YXIgb2w9eG5bU2ldO2dyKG9sLFNpLHhuKSYmKGFvW3ppKytdPW9sKX1yZXR1cm4gYW99KGhuKHhuKSxmdW5jdGlvbihncil7cmV0dXJuIGFuLmNhbGwoeG4s''@;'; put 'put ''Z3IpfSkpfTpmdW5jdGlvbiBNcCgpe3JldHVybltdfSxCYT1QcjtmdW5jdGlvbiBLYyh4bixncil7cmV0dXJuISEoZ3I9Z3I/P3cpJiYoIm51bWJlciI9PXR5cGVvZiB4bnx8bmUudGVzdCh4bikpJiZ4bj4tMSYmeG4lMT09MCYmeG48Z3J9ZnVuY3Rpb24gaGMoeG4pe2lmKG51bGwhPXhuKXt0''@;'; put 'put ''cnl7cmV0dXJuIFhlLmNhbGwoeG4pfWNhdGNoe310cnl7cmV0dXJuIHhuKyIifWNhdGNoe319cmV0dXJuIiJ9ZnVuY3Rpb24gdmcoeG4sZ3Ipe3JldHVybiB4bj09PWdyfHx4biE9eG4mJmdyIT1ncn0oQnQmJkJhKG5ldyBCdChuZXcgQXJyYXlCdWZmZXIoMSkpKSE9Qnx8QXQmJkJhKG5ldyBB''@;'; put 'put ''dCkhPVl8fEZuJiZCYShGbi5yZXNvbHZlKCkpIT1KfHxzdCYmQmEobmV3IHN0KSE9dWV8fFp0JiZCYShuZXcgWnQpIT1NZSkmJihCYT1mdW5jdGlvbih4bil7dmFyIGdyPVByKHhuKSxTaT1ncj09ZWU/eG4uY29uc3RydWN0b3I6dm9pZCAwLHRhPVNpP2hjKFNpKToiIjtpZih0YSlzd2l0Y2go''@;'; put 'put ''dGEpe2Nhc2UgWWU6cmV0dXJuIEI7Y2FzZSBUdDpyZXR1cm4gWTtjYXNlIHJyOnJldHVybiBKO2Nhc2UgZnQ6cmV0dXJuIHVlO2Nhc2UgTXQ6cmV0dXJuIE1lfXJldHVybiBncn0pO3ZhciBIaD1kMChmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP2QwOmZ1bmN0aW9uKHhuKXtyZXR1''@;'; put 'put ''cm4gaHUoeG4pJiZ0dC5jYWxsKHhuLCJjYWxsZWUiKSYmIWFuLmNhbGwoeG4sImNhbGxlZSIpfSx1cz1BcnJheS5pc0FycmF5LFdkPWh0fHxmdW5jdGlvbiAkMigpe3JldHVybiExfTtmdW5jdGlvbiB3cCh4bil7aWYoIUNwKHhuKSlyZXR1cm4hMTt2YXIgZ3I9UHIoeG4pO3JldHVybiBncj09''@;'; put 'put ''S3x8IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIj09Z3J8fCJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIj09Z3J8fCJbb2JqZWN0IFByb3h5XSI9PWdyfWZ1bmN0aW9uIHRkKHhuKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHhuJiZ4bj4tMSYmeG4lMT09MCYmeG48PXd9ZnVuY3Rpb24gQ3Ao''@;'; put 'put ''eG4pe3ZhciBncj10eXBlb2YgeG47cmV0dXJuIG51bGwhPXhuJiYoIm9iamVjdCI9PWdyfHwiZnVuY3Rpb24iPT1ncil9ZnVuY3Rpb24gaHUoeG4pe3JldHVybiBudWxsIT14biYmIm9iamVjdCI9PXR5cGVvZiB4bn12YXIgU3A9a2U/ZnVuY3Rpb24gQWUoeG4pe3JldHVybiBmdW5jdGlvbihn''@;'; put 'put ''cil7cmV0dXJuIHhuKGdyKX19KGtlKTpmdW5jdGlvbiBVdCh4bil7cmV0dXJuIGh1KHhuKSYmdGQoeG4ubGVuZ3RoKSYmISFzZVtQcih4bildfTtmdW5jdGlvbiBOaCh4bil7cmV0dXJuIGZ1bmN0aW9uIHFhKHhuKXtyZXR1cm4gbnVsbCE9eG4mJnRkKHhuLmxlbmd0aCkmJiF3cCh4bil9KHhu''@;'; put 'put ''KT9mdW5jdGlvbiBZYSh4bixncil7dmFyIFNpPXVzKHhuKSx0YT0hU2kmJkhoKHhuKSx6aT0hU2kmJiF0YSYmV2QoeG4pLGFvPSFTaSYmIXRhJiYhemkmJlNwKHhuKSxvbD1TaXx8dGF8fHppfHxhbywkbz1vbD9mdW5jdGlvbiBWZSh4bixncil7Zm9yKHZhciBTaT0tMSx0YT1BcnJheSh4bik7''@;'; put 'put ''KytTaTx4bjspdGFbU2ldPWdyKFNpKTtyZXR1cm4gdGF9KHhuLmxlbmd0aCxTdHJpbmcpOltdLFRsPSRvLmxlbmd0aDtmb3IodmFyIEFsIGluIHhuKShncnx8dHQuY2FsbCh4bixBbCkpJiYoIW9sfHwhKCJsZW5ndGgiPT1BbHx8emkmJigib2Zmc2V0Ij09QWx8fCJwYXJlbnQiPT1BbCl8fGFv''@;'; put 'put ''JiYoImJ1ZmZlciI9PUFsfHwiYnl0ZUxlbmd0aCI9PUFsfHwiYnl0ZU9mZnNldCI9PUFsKXx8S2MoQWwsVGwpKSkmJiRvLnB1c2goQWwpO3JldHVybiAkb30oeG4pOmZ1bmN0aW9uIHRpKHhuKXtpZighZnVuY3Rpb24gTzAoeG4pe3ZhciBncj14biYmeG4uY29uc3RydWN0b3I7cmV0dXJuIHhu''@;'; put 'put ''PT09KCJmdW5jdGlvbiI9PXR5cGVvZiBnciYmZ3IucHJvdG90eXBlfHxlbil9KHhuKSlyZXR1cm4gUnIoeG4pO3ZhciBncj1bXTtmb3IodmFyIFNpIGluIE9iamVjdCh4bikpdHQuY2FsbCh4bixTaSkmJiJjb25zdHJ1Y3RvciIhPVNpJiZnci5wdXNoKFNpKTtyZXR1cm4gZ3J9KHhuKX1jZS5l''@;'; put 'put ''eHBvcnRzPWZ1bmN0aW9uIExjKHhuLGdyKXtyZXR1cm4gbnIoeG4sZ3IpfX0sODQyMzooY2UsWCxiKT0+e3ZhciBSPSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsej0ib2JqZWN0Ij09dHlwZW9mIGIuZyYmYi5nJiZiLmcuT2JqZWN0PT09''@;'; put 'put ''T2JqZWN0JiZiLmd8fFJ8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksTj1PYmplY3QucHJvdG90eXBlLE89Ti5oYXNPd25Qcm9wZXJ0eSxLPU4udG9TdHJpbmcsWj16LlN5bWJvbCxZPVo/Wi50b1N0cmluZ1RhZzp2b2lkIDA7Y2UuZXhwb3J0cz1mdW5jdGlvbiBKKGllKXtpZighZnVuY3Rp''@;'; put 'put ''b24gcmUoaWUpe3ZhciB1ZT10eXBlb2YgaWU7cmV0dXJuIG51bGwhPWllJiYoIm9iamVjdCI9PXVlfHwiZnVuY3Rpb24iPT11ZSl9KGllKSlyZXR1cm4hMTt2YXIgdWU9ZnVuY3Rpb24gVyhpZSl7cmV0dXJuIG51bGw9PWllP3ZvaWQgMD09PWllPyJbb2JqZWN0IFVuZGVmaW5lZF0iOiJbb2Jq''@;'; put 'put ''ZWN0IE51bGxdIjpZJiZZIGluIE9iamVjdChpZSk/ZnVuY3Rpb24gcShpZSl7dmFyIHVlPU8uY2FsbChpZSxZKSxnZT1pZVtZXTt0cnl7aWVbWV09dm9pZCAwO3ZhciBfZT0hMH1jYXRjaHt9dmFyIFRlPUsuY2FsbChpZSk7cmV0dXJuIF9lJiYodWU/aWVbWV09Z2U6ZGVsZXRlIGllW1ldKSxU''@;'; put 'put ''ZX0oaWUpOmZ1bmN0aW9uIGVlKGllKXtyZXR1cm4gSy5jYWxsKGllKX0oaWUpfShpZSk7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09dWV8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PXVlfHwiW29iamVjdCBBc3luY0Z1bmN0aW9uXSI9PXVlfHwiW29iamVjdCBQcm94eV0iPT11''@;'; put 'put ''ZX19LDk3MjI6Y2U9PntjZS5leHBvcnRzPWZ1bmN0aW9uIFgoYil7cmV0dXJuIG51bGw9PWJ9fSw5NzM4OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9TWF0aC5hYnN9LDYzMjk6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1NYXRoLmZsb29yfSwzNjc4OmNlPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO2NlLmV4cG9ydHM9TnVtYmVyLmlzTmFOfHxmdW5jdGlvbihiKXtyZXR1cm4gYiE9Yn19LDIyNjQ6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1NYXRoLm1heH0sNTczMDpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPU1hdGgubWlufSw3MDc6Y2U9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''Y2UuZXhwb3J0cz1NYXRoLnBvd30sMzg2MjpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPU1hdGgucm91bmR9LDk1NTA6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigzNjc4KTtjZS5leHBvcnRzPWZ1bmN0aW9uKHApe3JldHVybiBJKHApfHwwPT09cD9wOnA8MD8tMToxfX0s''@;'; put 'put ''MjMxODooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDU3MTcpLF89YigzMzQ5KSxwPWIoOTUwOSkuQnVmZmVyLFY9bmV3IEFycmF5KDE2KTtmdW5jdGlvbiB3KCl7Xy5jYWxsKHRoaXMsNjQpLHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYy''@;'; put 'put ''MzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4fWZ1bmN0aW9uIFAoTyxLKXtyZXR1cm4gTzw8S3xPPj4+MzItS31mdW5jdGlvbiBGKE8sSyxaLFksVyxxLGVlKXtyZXR1cm4gUChPKyhLJlp8fksmWSkrVytxfDAsZWUpK0t8MH1mdW5jdGlvbiBSKE8sSyxaLFksVyxxLGVlKXtyZXR1cm4gUChPKyhL''@;'; put 'put ''Jll8WiZ+WSkrVytxfDAsZWUpK0t8MH1mdW5jdGlvbiB6KE8sSyxaLFksVyxxLGVlKXtyZXR1cm4gUChPKyhLXlpeWSkrVytxfDAsZWUpK0t8MH1mdW5jdGlvbiBOKE8sSyxaLFksVyxxLGVlKXtyZXR1cm4gUChPKyhaXihLfH5ZKSkrVytxfDAsZWUpK0t8MH1JKHcsXyksdy5wcm90b3R5cGUu''@;'; put 'put ''X3VwZGF0ZT1mdW5jdGlvbigpe2Zvcih2YXIgTz1WLEs9MDtLPDE2OysrSylPW0tdPXRoaXMuX2Jsb2NrLnJlYWRJbnQzMkxFKDQqSyk7dmFyIFo9dGhpcy5fYSxZPXRoaXMuX2IsVz10aGlzLl9jLHE9dGhpcy5fZDtaPUYoWixZLFcscSxPWzBdLDM2MTQwOTAzNjAsNykscT1GKHEsWixZLFcs''@;'; put 'put ''T1sxXSwzOTA1NDAyNzEwLDEyKSxXPUYoVyxxLFosWSxPWzJdLDYwNjEwNTgxOSwxNyksWT1GKFksVyxxLFosT1szXSwzMjUwNDQxOTY2LDIyKSxaPUYoWixZLFcscSxPWzRdLDQxMTg1NDgzOTksNykscT1GKHEsWixZLFcsT1s1XSwxMjAwMDgwNDI2LDEyKSxXPUYoVyxxLFosWSxPWzZdLDI4''@;'; put 'put ''MjE3MzU5NTUsMTcpLFk9RihZLFcscSxaLE9bN10sNDI0OTI2MTMxMywyMiksWj1GKFosWSxXLHEsT1s4XSwxNzcwMDM1NDE2LDcpLHE9RihxLFosWSxXLE9bOV0sMjMzNjU1Mjg3OSwxMiksVz1GKFcscSxaLFksT1sxMF0sNDI5NDkyNTIzMywxNyksWT1GKFksVyxxLFosT1sxMV0sMjMwNDU2''@;'; put 'put ''MzEzNCwyMiksWj1GKFosWSxXLHEsT1sxMl0sMTgwNDYwMzY4Miw3KSxxPUYocSxaLFksVyxPWzEzXSw0MjU0NjI2MTk1LDEyKSxXPUYoVyxxLFosWSxPWzE0XSwyNzkyOTY1MDA2LDE3KSxaPVIoWixZPUYoWSxXLHEsWixPWzE1XSwxMjM2NTM1MzI5LDIyKSxXLHEsT1sxXSw0MTI5MTcwNzg2''@;'; put 'put ''LDUpLHE9UihxLFosWSxXLE9bNl0sMzIyNTQ2NTY2NCw5KSxXPVIoVyxxLFosWSxPWzExXSw2NDM3MTc3MTMsMTQpLFk9UihZLFcscSxaLE9bMF0sMzkyMTA2OTk5NCwyMCksWj1SKFosWSxXLHEsT1s1XSwzNTkzNDA4NjA1LDUpLHE9UihxLFosWSxXLE9bMTBdLDM4MDE2MDgzLDkpLFc9UihX''@;'; put 'put ''LHEsWixZLE9bMTVdLDM2MzQ0ODg5NjEsMTQpLFk9UihZLFcscSxaLE9bNF0sMzg4OTQyOTQ0OCwyMCksWj1SKFosWSxXLHEsT1s5XSw1Njg0NDY0MzgsNSkscT1SKHEsWixZLFcsT1sxNF0sMzI3NTE2MzYwNiw5KSxXPVIoVyxxLFosWSxPWzNdLDQxMDc2MDMzMzUsMTQpLFk9UihZLFcscSxa''@;'; put 'put ''LE9bOF0sMTE2MzUzMTUwMSwyMCksWj1SKFosWSxXLHEsT1sxM10sMjg1MDI4NTgyOSw1KSxxPVIocSxaLFksVyxPWzJdLDQyNDM1NjM1MTIsOSksVz1SKFcscSxaLFksT1s3XSwxNzM1MzI4NDczLDE0KSxaPXooWixZPVIoWSxXLHEsWixPWzEyXSwyMzY4MzU5NTYyLDIwKSxXLHEsT1s1XSw0''@;'; put 'put ''Mjk0NTg4NzM4LDQpLHE9eihxLFosWSxXLE9bOF0sMjI3MjM5MjgzMywxMSksVz16KFcscSxaLFksT1sxMV0sMTgzOTAzMDU2MiwxNiksWT16KFksVyxxLFosT1sxNF0sNDI1OTY1Nzc0MCwyMyksWj16KFosWSxXLHEsT1sxXSwyNzYzOTc1MjM2LDQpLHE9eihxLFosWSxXLE9bNF0sMTI3Mjg5''@;'; put 'put ''MzM1MywxMSksVz16KFcscSxaLFksT1s3XSw0MTM5NDY5NjY0LDE2KSxZPXooWSxXLHEsWixPWzEwXSwzMjAwMjM2NjU2LDIzKSxaPXooWixZLFcscSxPWzEzXSw2ODEyNzkxNzQsNCkscT16KHEsWixZLFcsT1swXSwzOTM2NDMwMDc0LDExKSxXPXooVyxxLFosWSxPWzNdLDM1NzI0NDUzMTcs''@;'; put 'put ''MTYpLFk9eihZLFcscSxaLE9bNl0sNzYwMjkxODksMjMpLFo9eihaLFksVyxxLE9bOV0sMzY1NDYwMjgwOSw0KSxxPXoocSxaLFksVyxPWzEyXSwzODczMTUxNDYxLDExKSxXPXooVyxxLFosWSxPWzE1XSw1MzA3NDI1MjAsMTYpLFo9TihaLFk9eihZLFcscSxaLE9bMl0sMzI5OTYyODY0NSwy''@;'; put 'put ''MyksVyxxLE9bMF0sNDA5NjMzNjQ1Miw2KSxxPU4ocSxaLFksVyxPWzddLDExMjY4OTE0MTUsMTApLFc9TihXLHEsWixZLE9bMTRdLDI4Nzg2MTIzOTEsMTUpLFk9TihZLFcscSxaLE9bNV0sNDIzNzUzMzI0MSwyMSksWj1OKFosWSxXLHEsT1sxMl0sMTcwMDQ4NTU3MSw2KSxxPU4ocSxaLFks''@;'; put 'put ''VyxPWzNdLDIzOTk5ODA2OTAsMTApLFc9TihXLHEsWixZLE9bMTBdLDQyOTM5MTU3NzMsMTUpLFk9TihZLFcscSxaLE9bMV0sMjI0MDA0NDQ5NywyMSksWj1OKFosWSxXLHEsT1s4XSwxODczMzEzMzU5LDYpLHE9TihxLFosWSxXLE9bMTVdLDQyNjQzNTU1NTIsMTApLFc9TihXLHEsWixZLE9b''@;'; put 'put ''Nl0sMjczNDc2ODkxNiwxNSksWT1OKFksVyxxLFosT1sxM10sMTMwOTE1MTY0OSwyMSksWj1OKFosWSxXLHEsT1s0XSw0MTQ5NDQ0MjI2LDYpLHE9TihxLFosWSxXLE9bMTFdLDMxNzQ3NTY5MTcsMTApLFc9TihXLHEsWixZLE9bMl0sNzE4Nzg3MjU5LDE1KSxZPU4oWSxXLHEsWixPWzldLDM5''@;'; put 'put ''NTE0ODE3NDUsMjEpLHRoaXMuX2E9dGhpcy5fYStafDAsdGhpcy5fYj10aGlzLl9iK1l8MCx0aGlzLl9jPXRoaXMuX2MrV3wwLHRoaXMuX2Q9dGhpcy5fZCtxfDB9LHcucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oKXt0aGlzLl9ibG9ja1t0aGlzLl9ibG9ja09mZnNldCsrXT0xMjgsdGhp''@;'; put 'put ''cy5fYmxvY2tPZmZzZXQ+NTYmJih0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNjQpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTApLHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0''@;'; put 'put ''aGlzLl9sZW5ndGhbMF0sNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzFdLDYwKSx0aGlzLl91cGRhdGUoKTt2YXIgTz1wLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gTy53cml0ZUludDMyTEUodGhpcy5fYSwwKSxPLndyaXRlSW50MzJMRSh0aGlzLl9iLDQpLE8u''@;'; put 'put ''d3JpdGVJbnQzMkxFKHRoaXMuX2MsOCksTy53cml0ZUludDMyTEUodGhpcy5fZCwxMiksT30sY2UuZXhwb3J0cz13fSwzMDQ3OihjZSxYLGIpPT57dmFyIEk9Yig2MjQwKSxfPWIoOTkzMSk7ZnVuY3Rpb24gcChWKXt0aGlzLnJhbmQ9Vnx8bmV3IF8uUmFuZH1jZS5leHBvcnRzPXAscC5jcmVh''@;'; put 'put ''dGU9ZnVuY3Rpb24odyl7cmV0dXJuIG5ldyBwKHcpfSxwLnByb3RvdHlwZS5fcmFuZGJlbG93PWZ1bmN0aW9uKHcpe3ZhciBQPXcuYml0TGVuZ3RoKCksRj1NYXRoLmNlaWwoUC84KTtkb3t2YXIgUj1uZXcgSSh0aGlzLnJhbmQuZ2VuZXJhdGUoRikpfXdoaWxlKFIuY21wKHcpPj0wKTtyZXR1''@;'; put 'put ''cm4gUn0scC5wcm90b3R5cGUuX3JhbmRyYW5nZT1mdW5jdGlvbih3LFApe3ZhciBGPVAuc3ViKHcpO3JldHVybiB3LmFkZCh0aGlzLl9yYW5kYmVsb3coRikpfSxwLnByb3RvdHlwZS50ZXN0PWZ1bmN0aW9uKHcsUCxGKXt2YXIgUj13LmJpdExlbmd0aCgpLHo9SS5tb250KHcpLE49bmV3IEko''@;'; put 'put ''MSkudG9SZWQoeik7UHx8KFA9TWF0aC5tYXgoMSxSLzQ4fDApKTtmb3IodmFyIE89dy5zdWJuKDEpLEs9MDshTy50ZXN0bihLKTtLKyspO2Zvcih2YXIgWj13LnNocm4oSyksWT1PLnRvUmVkKHopO1A+MDtQLS0pe3ZhciBxPXRoaXMuX3JhbmRyYW5nZShuZXcgSSgyKSxPKTtGJiZGKHEpO3Zh''@;'; put 'put ''ciBlZT1xLnRvUmVkKHopLnJlZFBvdyhaKTtpZigwIT09ZWUuY21wKE4pJiYwIT09ZWUuY21wKFkpKXtmb3IodmFyIEo9MTtKPEs7SisrKXtpZigwPT09KGVlPWVlLnJlZFNxcigpKS5jbXAoTikpcmV0dXJuITE7aWYoMD09PWVlLmNtcChZKSlicmVha31pZihKPT09SylyZXR1cm4hMX19cmV0''@;'; put 'put ''dXJuITB9LHAucHJvdG90eXBlLmdldERpdmlzb3I9ZnVuY3Rpb24odyxQKXt2YXIgRj13LmJpdExlbmd0aCgpLFI9SS5tb250KHcpLHo9bmV3IEkoMSkudG9SZWQoUik7UHx8KFA9TWF0aC5tYXgoMSxGLzQ4fDApKTtmb3IodmFyIE49dy5zdWJuKDEpLE89MDshTi50ZXN0bihPKTtPKyspO2Zv''@;'; put 'put ''cih2YXIgSz13LnNocm4oTyksWj1OLnRvUmVkKFIpO1A+MDtQLS0pe3ZhciBZPXRoaXMuX3JhbmRyYW5nZShuZXcgSSgyKSxOKSxXPXcuZ2NkKFkpO2lmKDAhPT1XLmNtcG4oMSkpcmV0dXJuIFc7dmFyIHE9WS50b1JlZChSKS5yZWRQb3coSyk7aWYoMCE9PXEuY21wKHopJiYwIT09cS5jbXAo''@;'; put 'put ''Wikpe2Zvcih2YXIgZWU9MTtlZTxPO2VlKyspe2lmKDA9PT0ocT1xLnJlZFNxcigpKS5jbXAoeikpcmV0dXJuIHEuZnJvbVJlZCgpLnN1Ym4oMSkuZ2NkKHcpO2lmKDA9PT1xLmNtcChaKSlicmVha31pZihlZT09PU8pcmV0dXJuKHE9cS5yZWRTcXIoKSkuZnJvbVJlZCgpLnN1Ym4oMSkuZ2Nk''@;'; put 'put ''KHcpfX1yZXR1cm4hMX19LDYyNDA6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSxfKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcChCLGcpe2lmKCFCKXRocm93IG5ldyBFcnJvcihnfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIFYoQixnKXtCLnN1cGVyXz1nO3ZhciB5PWZ1bmN0''@;'; put 'put ''aW9uKCl7fTt5LnByb3RvdHlwZT1nLnByb3RvdHlwZSxCLnByb3RvdHlwZT1uZXcgeSxCLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1CfWZ1bmN0aW9uIHcoQixnLHkpe2lmKHcuaXNCTihCKSlyZXR1cm4gQjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhp''@;'; put 'put ''cy5yZWQ9bnVsbCxudWxsIT09QiYmKCgibGUiPT09Z3x8ImJlIj09PWcpJiYoeT1nLGc9MTApLHRoaXMuX2luaXQoQnx8MCxnfHwxMCx5fHwiYmUiKSl9dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0kuZXhwb3J0cz13Ol8uQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7UD10eXBlb2Yg''@;'; put 'put ''d2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Yig2NjE5KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEYoQixnKXt2YXIgeT1CLmNoYXJDb2RlQXQoZyk7cmV0dXJuIHk+PTY1JiZ5PD03MD95LTU1Onk+PTk3JiZ5PD0xMDI/eS04Nzp5LTQ4JjE1fWZ1''@;'; put 'put ''bmN0aW9uIFIoQixnLHkpe3ZhciB4PUYoQix5KTtyZXR1cm4geS0xPj1nJiYoeHw9RihCLHktMSk8PDQpLHh9ZnVuY3Rpb24geihCLGcseSx4KXtmb3IodmFyIEM9MCxUPU1hdGgubWluKEIubGVuZ3RoLHkpLEg9ZztIPFQ7SCsrKXt2YXIgaj1CLmNoYXJDb2RlQXQoSCktNDg7Qyo9eCxDKz1q''@;'; put 'put ''Pj00OT9qLTQ5KzEwOmo+PTE3P2otMTcrMTA6an1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24oZyl7cmV0dXJuIGcgaW5zdGFuY2VvZiB3fHxudWxsIT09ZyYmIm9iamVjdCI9PXR5cGVvZiBnJiZnLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShnLndv''@;'; put 'put ''cmRzKX0sdy5tYXg9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gZy5jbXAoeSk+MD9nOnl9LHcubWluPWZ1bmN0aW9uKGcseSl7cmV0dXJuIGcuY21wKHkpPDA/Zzp5fSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihnLHkseCl7aWYoIm51bWJlciI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0''@;'; put 'put ''TnVtYmVyKGcseSx4KTtpZigib2JqZWN0Ij09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXRBcnJheShnLHkseCk7ImhleCI9PT15JiYoeT0xNikscCh5PT09KDB8eSkmJnk+PTImJnk8PTM2KTt2YXIgQz0wOyItIj09PShnPWcudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYo''@;'; put 'put ''QysrLHRoaXMubmVnYXRpdmU9MSksQzxnLmxlbmd0aCYmKDE2PT09eT90aGlzLl9wYXJzZUhleChnLEMseCk6KHRoaXMuX3BhcnNlQmFzZShnLHksQyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx5LHgpKSl9LHcucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0''@;'; put 'put ''aW9uKGcseSx4KXtnPDAmJih0aGlzLm5lZ2F0aXZlPTEsZz0tZyksZzw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZ10sdGhpcy5sZW5ndGg9MSk6Zzw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3Ro''@;'; put 'put ''PTIpOihwKGc8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCkseSx4KX0sdy5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlv''@;'; put 'put ''bihnLHkseCl7aWYocCgibnVtYmVyIj09dHlwZW9mIGcubGVuZ3RoKSxnLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChnLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9y''@;'; put 'put ''KHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULEgsaj0wO2lmKCJiZSI9PT14KWZvcihDPWcubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oSD1nW0NdfGdbQy0xXTw8OHxnW0MtMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRz''@;'; put 'put ''W1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxnLmxlbmd0aDtDKz0zKXRoaXMud29yZHNbVF18PShIPWdbQ118Z1tDKzFdPDw4fGdbQysyXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsx''@;'; put 'put ''XT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGcseSx4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGcubGVuZ3RoLXkpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRo''@;'; put 'put ''aXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIGosVD0wLEg9MDtpZigiYmUiPT09eClmb3IoQz1nLmxlbmd0aC0xO0M+PXk7Qy09MilqPVIoZyx5LEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRo''@;'; put 'put ''aXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShnLmxlbmd0aC15KSUyPT0wP3krMTp5O0M8Zy5sZW5ndGg7Qys9MilqPVIoZyx5LEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODt0''@;'; put 'put ''aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oZyx5LHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPXkpQysrO0MtLSxUPVQveXwwO2Zvcih2YXIgSD1nLmxlbmd0aC14LGo9SCVDLEU9TWF0aC5t''@;'; put 'put ''aW4oSCxILWopK3gsbT0wLEE9eDtBPEU7QSs9QyltPXooZyxBLEErQyx5KSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lmKDAhPT1qKXt2YXIgYWU9MTtmb3IobT16KGcsQSxnLmxlbmd0aCx5KSxBPTA7QTxq''@;'; put 'put ''O0ErKylhZSo9eTt0aGlzLmltdWxuKGFlKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZyl7Zy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIg''@;'; put 'put ''eT0wO3k8dGhpcy5sZW5ndGg7eSsrKWcud29yZHNbeV09dGhpcy53b3Jkc1t5XTtnLmxlbmd0aD10aGlzLmxlbmd0aCxnLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsZy5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IHcobnVsbCk7cmV0dXJuIHRo''@;'; put 'put ''aXMuY29weShnKSxnfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8ZzspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMu''@;'; put 'put ''d29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBOPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAw''@;'; put 'put ''IiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJd''@;'; put 'put ''LE89WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sSz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFl''@;'; put 'put ''NywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0''@;'; put 'put ''M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBZKEIsZyx5KXt5Lm5lZ2F0aXZlPWcubmVnYXRpdmVeQi5uZWdhdGl2ZTt2YXIgeD1CLmxlbmd0aCtnLmxlbmd0aHwwO3kubGVuZ3RoPXgseD14LTF8MDt2YXIgQz0wfEIu''@;'; put 'put ''d29yZHNbMF0sVD0wfGcud29yZHNbMF0sSD1DKlQsRT1ILzY3MTA4ODY0fDA7eS53b3Jkc1swXT02NzEwODg2MyZIO2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYsYWU9NjcxMDg4NjMmRSxuZT1NYXRoLm1pbihtLGcubGVuZ3RoLTEpLHNlPU1hdGgubWF4KDAsbS1CLmxl''@;'; put 'put ''bmd0aCsxKTtzZTw9bmU7c2UrKylBKz0oSD0oQz0wfEIud29yZHNbbS1zZXwwXSkqKFQ9MHxnLndvcmRzW3NlXSkrYWUpLzY3MTA4ODY0fDAsYWU9NjcxMDg4NjMmSDt5LndvcmRzW21dPTB8YWUsRT0wfEF9cmV0dXJuIDAhPT1FP3kud29yZHNbbV09MHxFOnkubGVuZ3RoLS0seS5zdHJpcCgp''@;'; put 'put ''fXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGcseSl7dmFyIHg7aWYoeT0wfHl8fDEsMTY9PT0oZz1nfHwxMCl8fCJoZXgiPT09Zyl7eD0iIjtmb3IodmFyIEM9MCxUPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj10aGlzLndvcmRzW0hdLEU9KDE2Nzc3MjE1JihqPDxDfFQp''@;'; put 'put ''KS50b1N0cmluZygxNik7VD1qPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsSC0tKSx4PTAhPT1UfHxIIT09dGhpcy5sZW5ndGgtMT9OWzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4KTt4Lmxlbmd0aCV5IT0wOyl4PSIwIit4O3Jl''@;'; put 'put ''dHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYoZz09PSgwfGcpJiZnPj0yJiZnPD0zNil7dmFyIG09T1tnXSxBPUtbZ107eD0iIjt2YXIgYWU9dGhpcy5jbG9uZSgpO2ZvcihhZS5uZWdhdGl2ZT0wOyFhZS5pc1plcm8oKTspe3ZhciBuZT1hZS5tb2RuKEEpLnRvU3RyaW5n''@;'; put 'put ''KGcpO3g9KGFlPWFlLmlkaXZuKEEpKS5pc1plcm8oKT9uZSt4Ok5bbS1uZS5sZW5ndGhdK25lK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCV5IT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9cCghMSwiQmFzZSBzaG91bGQg''@;'; put 'put ''YmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBnPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9nKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Zys9NDUw''@;'; put 'put ''MzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJnAoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1nOmd9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0''@;'; put 'put ''aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gcCh0eXBlb2YgUDwidSIpLHRoaXMudG9BcnJheUxpa2UoUCxnLHkpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXks''@;'; put 'put ''Zyx5KX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oZyx5LHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtwKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxwKFQ+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0''@;'; put 'put ''aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sSD0ibGUiPT09eSxqPW5ldyBnKFQpLEE9dGhpcy5jbG9uZSgpO2lmKEgpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbbV09RTtmb3IoO208VDttKyspalttXT0wfWVsc2V7Zm9yKG09MDtt''@;'; put 'put ''PFQtQzttKyspalttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbVC1tLTFdPUV9cmV0dXJuIGp9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihnKXtyZXR1cm4gMzItTWF0aC5jbHozMihnKX06ZnVuY3Rp''@;'; put 'put ''b24oZyl7dmFyIHk9Zyx4PTA7cmV0dXJuIHk+PTQwOTYmJih4Kz0xMyx5Pj4+PTEzKSx5Pj02NCYmKHgrPTcseT4+Pj03KSx5Pj04JiYoeCs9NCx5Pj4+PTQpLHk+PTImJih4Kz0yLHk+Pj49MikseCt5fSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oZyl7aWYoMD09PWcpcmV0dXJu''@;'; put 'put ''IDI2O3ZhciB5PWcseD0wO3JldHVybiEoODE5MSZ5KSYmKHgrPTEzLHk+Pj49MTMpLCEoMTI3JnkpJiYoeCs9Nyx5Pj4+PTcpLCEoMTUmeSkmJih4Kz00LHk+Pj49NCksISgzJnkpJiYoeCs9Mix5Pj4+PTIpLCEoMSZ5KSYmeCsrLHh9LHcucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigp''@;'; put 'put ''e3ZhciB5PXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK3l9LHcucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGc9MCx5PTA7eTx0aGlzLmxlbmd0''@;'; put 'put ''aDt5Kyspe3ZhciB4PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbeV0pO2lmKGcrPXgsMjYhPT14KWJyZWFrfXJldHVybiBnfSx3LnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSx3LnByb3RvdHlwZS50b1R3b3M9''@;'; put 'put ''ZnVuY3Rpb24oZyl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oZykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy50ZXN0bihnLTEpP3RoaXMubm90bihnKS5pYWRkbigxKS5pbmVnKCk6''@;'; put 'put ''dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHcucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5p''@;'; put 'put ''c1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgeT0wO3k8Zy5sZW5ndGg7eSsrKXRoaXMud29yZHNbeV09dGhpcy53''@;'; put 'put ''b3Jkc1t5XXxnLndvcmRzW3ldO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihnKX0sdy5wcm90b3R5cGUub3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3Ro''@;'; put 'put ''PmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoZyk6Zy5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihnKTpnLmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVh''@;'; put 'put ''bmQ9ZnVuY3Rpb24oZyl7dmFyIHk7eT10aGlzLmxlbmd0aD5nLmxlbmd0aD9nOnRoaXM7Zm9yKHZhciB4PTA7eDx5Lmxlbmd0aDt4KyspdGhpcy53b3Jkc1t4XT10aGlzLndvcmRzW3hdJmcud29yZHNbeF07cmV0dXJuIHRoaXMubGVuZ3RoPXkubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuaWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoZyl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoZyk6Zy5jbG9uZSgpLmlh''@;'; put 'put ''bmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChnKTpnLmNsb25lKCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGcpe3ZhciB5LHg7dGhpcy5sZW5ndGg+Zy5s''@;'; put 'put ''ZW5ndGg/KHk9dGhpcyx4PWcpOih5PWcseD10aGlzKTtmb3IodmFyIEM9MDtDPHgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXkud29yZHNbQ11eeC53b3Jkc1tDXTtpZih0aGlzIT09eSlmb3IoO0M8eS5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109eS53b3Jkc1tDXTtyZXR1cm4gdGhpcy5s''@;'; put 'put ''ZW5ndGg9eS5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKGcpe3JldHVybiBwKCEodGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihnKX0sdy5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0''@;'; put 'put ''aD90aGlzLmNsb25lKCkuaXhvcihnKTpnLmNsb25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGcpOmcuY2xvbmUoKS5pdXhvcih0aGlzKX0sdy5wcm90b3R5cGUuaW5vdG49''@;'; put 'put ''ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PTB8TWF0aC5jZWlsKGcvMjYpLHg9ZyUyNjt0aGlzLl9leHBhbmQoeSkseD4wJiZ5LS07Zm9yKHZhciBDPTA7Qzx5O0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJn50aGlzLndvcmRzW0NdO3JldHVybiB4PjAm''@;'; put 'put ''Jih0aGlzLndvcmRzW0NdPX50aGlzLndvcmRzW0NdJjY3MTA4ODYzPj4yNi14KSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihnKX0sdy5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihnLHkpe3AoIm51bWJlciI9PXR5''@;'; put 'put ''cGVvZiBnJiZnPj0wKTt2YXIgeD1nLzI2fDAsQz1nJTI2O3JldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdPXk/dGhpcy53b3Jkc1t4XXwxPDxDOnRoaXMud29yZHNbeF0mfigxPDxDKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyl7dmFyIHks''@;'; put 'put ''eCxDO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHk9dGhpcy5pc3ViKGcpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIGcubmVnYXRp''@;'; put 'put ''dmU9MCx5PXRoaXMuaXN1YihnKSxnLm5lZ2F0aXZlPTEseS5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oeD10aGlzLEM9Zyk6KHg9ZyxDPXRoaXMpO2Zvcih2YXIgVD0wLEg9MDtIPEMubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJih5PSgwfHgud29yZHNbSF0p''@;'; put 'put ''KygwfEMud29yZHNbSF0pK1QpLFQ9eT4+PjI2O2Zvcig7MCE9PVQmJkg8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKHk9KDB8eC53b3Jkc1tIXSkrVCksVD15Pj4+MjY7aWYodGhpcy5sZW5ndGg9eC5sZW5ndGgsMCE9PVQpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09VCx0''@;'; put 'put ''aGlzLmxlbmd0aCsrO2Vsc2UgaWYoeCE9PXRoaXMpZm9yKDtIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXgud29yZHNbSF07cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnKXt2YXIgeTtyZXR1cm4gMCE9PWcubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhn''@;'; put 'put ''Lm5lZ2F0aXZlPTAseT10aGlzLnN1YihnKSxnLm5lZ2F0aXZlXj0xLHkpOjA9PT1nLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLHk9Zy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLHkpOnRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRk''@;'; put 'put ''KGcpOmcuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcpe2lmKDAhPT1nLm5lZ2F0aXZlKXtnLm5lZ2F0aXZlPTA7dmFyIHk9dGhpcy5pYWRkKGcpO3JldHVybiBnLm5lZ2F0aXZlPTEseS5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1''@;'; put 'put ''cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgQyxULHg9dGhpcy5jbXAoZyk7aWYoMD09PXgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3g+MD8oQz10aGlz''@;'; put 'put ''LFQ9Zyk6KEM9ZyxUPXRoaXMpO2Zvcih2YXIgSD0wLGo9MDtqPFQubGVuZ3RoO2orKylIPSh5PSgwfEMud29yZHNbal0pLSgwfFQud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJnk7Zm9yKDswIT09SCYmajxDLmxlbmd0aDtqKyspSD0oeT0oMHxDLndvcmRzW2pdKStI''@;'; put 'put ''KT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZ5O2lmKDA9PT1IJiZqPEMubGVuZ3RoJiZDIT09dGhpcylmb3IoO2o8Qy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09Qy53b3Jkc1tqXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsaiksQyE9PXRoaXMmJih0aGlz''@;'; put 'put ''Lm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihnKX07dmFyIFc9ZnVuY3Rpb24oZyx5LHgpe3ZhciBFLG0sQSxDPWcud29yZHMsVD15LndvcmRzLEg9eC53b3JkcyxqPTAsYWU9MHxDWzBdLG5lPTgx''@;'; put 'put ''OTEmYWUsc2U9YWU+Pj4xMyxDZT0wfENbMV0sVWU9ODE5MSZDZSxKZT1DZT4+PjEzLGl0PTB8Q1syXSx4ZT04MTkxJml0LHllPWl0Pj4+MTMsS2U9MHxDWzNdLGplPTgxOTEmS2Usa2U9S2U+Pj4xMyxIZT0wfENbNF0sTGU9ODE5MSZIZSxSZT1IZT4+PjEzLFZlPTB8Q1s1XSxBZT04MTkxJlZl''@;'; put 'put ''LERlPVZlPj4+MTMsX3Q9MHxDWzZdLHJ0PTgxOTEmX3QsUWU9X3Q+Pj4xMyxzbj0wfENbN10sdnQ9ODE5MSZzbixTdD1zbj4+PjEzLGVuPTB8Q1s4XSx1dD04MTkxJmVuLFhlPWVuPj4+MTMsdHQ9MHxDWzldLEllPTgxOTEmdHQsYXQ9dHQ+Pj4xMyx1bj0wfFRbMF0sSXQ9ODE5MSZ1bixSdD11''@;'; put 'put ''bj4+PjEzLHJpPTB8VFsxXSxhbj04MTkxJnJpLGxuPXJpPj4+MTMsbmk9MHxUWzJdLGhuPTgxOTEmbmksaHQ9bmk+Pj4xMyxScj0wfFRbM10sQnQ9ODE5MSZScixBdD1Scj4+PjEzLEZuPTB8VFs0XSxzdD04MTkxJkZuLFp0PUZuPj4+MTMsUXI9MHxUWzVdLFllPTgxOTEmUXIsVHQ9UXI+Pj4x''@;'; put 'put ''Myxycj0wfFRbNl0sZnQ9ODE5MSZycixNdD1ycj4+PjEzLFpuPTB8VFs3XSxubj04MTkxJlpuLFd0PVpuPj4+MTMsZGk9MHxUWzhdLGRuPTgxOTEmZGksbW49ZGk+Pj4xMyxwaT0wfFRbOV0sZm49ODE5MSZwaSx0bj1waT4+PjEzO3gubmVnYXRpdmU9Zy5uZWdhdGl2ZV55Lm5lZ2F0aXZlLHgu''@;'; put 'put ''bGVuZ3RoPTE5O3ZhciBjYT0oaisoRT1NYXRoLmltdWwobmUsSXQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKG5lLFJ0KSkrTWF0aC5pbXVsKHNlLEl0KXwwKSk8PDEzKXwwO2o9KChBPU1hdGguaW11bChzZSxSdCkpKyhtPj4+MTMpfDApKyhjYT4+PjI2KXwwLGNhJj02NzEwODg2MyxF''@;'; put 'put ''PU1hdGguaW11bChVZSxJdCksbT0obT1NYXRoLmltdWwoVWUsUnQpKStNYXRoLmltdWwoSmUsSXQpfDAsQT1NYXRoLmltdWwoSmUsUnQpO3ZhciBfaT0oaisoRT1FK01hdGguaW11bChuZSxhbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGxuKXwwKStNYXRoLmltdWwoc2Us''@;'; put 'put ''YW4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsbG4pfDApKyhtPj4+MTMpfDApKyhfaT4+PjI2KXwwLF9pJj02NzEwODg2MyxFPU1hdGguaW11bCh4ZSxJdCksbT0obT1NYXRoLmltdWwoeGUsUnQpKStNYXRoLmltdWwoeWUsSXQpfDAsQT1NYXRoLmltdWwoeWUsUnQpLEU9RStN''@;'; put 'put ''YXRoLmltdWwoVWUsYW4pfDAsbT0obT1tK01hdGguaW11bChVZSxsbil8MCkrTWF0aC5pbXVsKEplLGFuKXwwLEE9QStNYXRoLmltdWwoSmUsbG4pfDA7dmFyIHZyPShqKyhFPUUrTWF0aC5pbXVsKG5lLGhuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsaHQpfDApK01hdGgu''@;'; put 'put ''aW11bChzZSxobil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxodCl8MCkrKG0+Pj4xMyl8MCkrKHZyPj4+MjYpfDAsdnImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGplLEl0KSxtPShtPU1hdGguaW11bChqZSxSdCkpK01hdGguaW11bChrZSxJdCl8MCxBPU1hdGguaW11bChrZSxS''@;'; put 'put ''dCksRT1FK01hdGguaW11bCh4ZSxhbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGxuKXwwKStNYXRoLmltdWwoeWUsYW4pfDAsQT1BK01hdGguaW11bCh5ZSxsbil8MCxFPUUrTWF0aC5pbXVsKFVlLGhuKXwwLG09KG09bStNYXRoLmltdWwoVWUsaHQpfDApK01hdGguaW11bChKZSxobil8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKEplLGh0KXwwO3ZhciBYaT0oaisoRT1FK01hdGguaW11bChuZSxCdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLEF0KXwwKStNYXRoLmltdWwoc2UsQnQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsQXQpfDApKyhtPj4+MTMpfDApKyhY''@;'; put 'put ''aT4+PjI2KXwwLFhpJj02NzEwODg2MyxFPU1hdGguaW11bChMZSxJdCksbT0obT1NYXRoLmltdWwoTGUsUnQpKStNYXRoLmltdWwoUmUsSXQpfDAsQT1NYXRoLmltdWwoUmUsUnQpLEU9RStNYXRoLmltdWwoamUsYW4pfDAsbT0obT1tK01hdGguaW11bChqZSxsbil8MCkrTWF0aC5pbXVsKGtl''@;'; put 'put ''LGFuKXwwLEE9QStNYXRoLmltdWwoa2UsbG4pfDAsRT1FK01hdGguaW11bCh4ZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGh0KXwwKStNYXRoLmltdWwoeWUsaG4pfDAsQT1BK01hdGguaW11bCh5ZSxodCl8MCxFPUUrTWF0aC5pbXVsKFVlLEJ0KXwwLG09KG09bStNYXRoLmltdWwoVWUs''@;'; put 'put ''QXQpfDApK01hdGguaW11bChKZSxCdCl8MCxBPUErTWF0aC5pbXVsKEplLEF0KXwwO3ZhciBRaT0oaisoRT1FK01hdGguaW11bChuZSxzdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLFp0KXwwKStNYXRoLmltdWwoc2Usc3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmlt''@;'; put 'put ''dWwoc2UsWnQpfDApKyhtPj4+MTMpfDApKyhRaT4+PjI2KXwwLFFpJj02NzEwODg2MyxFPU1hdGguaW11bChBZSxJdCksbT0obT1NYXRoLmltdWwoQWUsUnQpKStNYXRoLmltdWwoRGUsSXQpfDAsQT1NYXRoLmltdWwoRGUsUnQpLEU9RStNYXRoLmltdWwoTGUsYW4pfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bChMZSxsbil8MCkrTWF0aC5pbXVsKFJlLGFuKXwwLEE9QStNYXRoLmltdWwoUmUsbG4pfDAsRT1FK01hdGguaW11bChqZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKGplLGh0KXwwKStNYXRoLmltdWwoa2UsaG4pfDAsQT1BK01hdGguaW11bChrZSxodCl8MCxFPUUrTWF0aC5pbXVsKHhl''@;'; put 'put ''LEJ0KXwwLG09KG09bStNYXRoLmltdWwoeGUsQXQpfDApK01hdGguaW11bCh5ZSxCdCl8MCxBPUErTWF0aC5pbXVsKHllLEF0KXwwLEU9RStNYXRoLmltdWwoVWUsc3QpfDAsbT0obT1tK01hdGguaW11bChVZSxadCl8MCkrTWF0aC5pbXVsKEplLHN0KXwwLEE9QStNYXRoLmltdWwoSmUsWnQp''@;'; put 'put ''fDA7dmFyIFZpPShqKyhFPUUrTWF0aC5pbXVsKG5lLFllKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsVHQpfDApK01hdGguaW11bChzZSxZZSl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxUdCl8MCkrKG0+Pj4xMyl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4''@;'; put 'put ''ODYzLEU9TWF0aC5pbXVsKHJ0LEl0KSxtPShtPU1hdGguaW11bChydCxSdCkpK01hdGguaW11bChRZSxJdCl8MCxBPU1hdGguaW11bChRZSxSdCksRT1FK01hdGguaW11bChBZSxhbil8MCxtPShtPW0rTWF0aC5pbXVsKEFlLGxuKXwwKStNYXRoLmltdWwoRGUsYW4pfDAsQT1BK01hdGguaW11''@;'; put 'put ''bChEZSxsbil8MCxFPUUrTWF0aC5pbXVsKExlLGhuKXwwLG09KG09bStNYXRoLmltdWwoTGUsaHQpfDApK01hdGguaW11bChSZSxobil8MCxBPUErTWF0aC5pbXVsKFJlLGh0KXwwLEU9RStNYXRoLmltdWwoamUsQnQpfDAsbT0obT1tK01hdGguaW11bChqZSxBdCl8MCkrTWF0aC5pbXVsKGtl''@;'; put 'put ''LEJ0KXwwLEE9QStNYXRoLmltdWwoa2UsQXQpfDAsRT1FK01hdGguaW11bCh4ZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFp0KXwwKStNYXRoLmltdWwoeWUsc3QpfDAsQT1BK01hdGguaW11bCh5ZSxadCl8MCxFPUUrTWF0aC5pbXVsKFVlLFllKXwwLG09KG09bStNYXRoLmltdWwoVWUs''@;'; put 'put ''VHQpfDApK01hdGguaW11bChKZSxZZSl8MCxBPUErTWF0aC5pbXVsKEplLFR0KXwwO3ZhciBlaT0oaisoRT1FK01hdGguaW11bChuZSxmdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLE10KXwwKStNYXRoLmltdWwoc2UsZnQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmlt''@;'; put 'put ''dWwoc2UsTXQpfDApKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxFPU1hdGguaW11bCh2dCxJdCksbT0obT1NYXRoLmltdWwodnQsUnQpKStNYXRoLmltdWwoU3QsSXQpfDAsQT1NYXRoLmltdWwoU3QsUnQpLEU9RStNYXRoLmltdWwocnQsYW4pfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bChydCxsbil8MCkrTWF0aC5pbXVsKFFlLGFuKXwwLEE9QStNYXRoLmltdWwoUWUsbG4pfDAsRT1FK01hdGguaW11bChBZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKEFlLGh0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsQT1BK01hdGguaW11bChEZSxodCl8MCxFPUUrTWF0aC5pbXVsKExl''@;'; put 'put ''LEJ0KXwwLG09KG09bStNYXRoLmltdWwoTGUsQXQpfDApK01hdGguaW11bChSZSxCdCl8MCxBPUErTWF0aC5pbXVsKFJlLEF0KXwwLEU9RStNYXRoLmltdWwoamUsc3QpfDAsbT0obT1tK01hdGguaW11bChqZSxadCl8MCkrTWF0aC5pbXVsKGtlLHN0KXwwLEE9QStNYXRoLmltdWwoa2UsWnQp''@;'; put 'put ''fDAsRT1FK01hdGguaW11bCh4ZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFR0KXwwKStNYXRoLmltdWwoeWUsWWUpfDAsQT1BK01hdGguaW11bCh5ZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFVlLGZ0KXwwLG09KG09bStNYXRoLmltdWwoVWUsTXQpfDApK01hdGguaW11bChKZSxmdCl8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKEplLE10KXwwO3ZhciB1YT0oaisoRT1FK01hdGguaW11bChuZSxubil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLFd0KXwwKStNYXRoLmltdWwoc2Usbm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsV3QpfDApKyhtPj4+MTMpfDApKyh1''@;'; put 'put ''YT4+PjI2KXwwLHVhJj02NzEwODg2MyxFPU1hdGguaW11bCh1dCxJdCksbT0obT1NYXRoLmltdWwodXQsUnQpKStNYXRoLmltdWwoWGUsSXQpfDAsQT1NYXRoLmltdWwoWGUsUnQpLEU9RStNYXRoLmltdWwodnQsYW4pfDAsbT0obT1tK01hdGguaW11bCh2dCxsbil8MCkrTWF0aC5pbXVsKFN0''@;'; put 'put ''LGFuKXwwLEE9QStNYXRoLmltdWwoU3QsbG4pfDAsRT1FK01hdGguaW11bChydCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LGh0KXwwKStNYXRoLmltdWwoUWUsaG4pfDAsQT1BK01hdGguaW11bChRZSxodCl8MCxFPUUrTWF0aC5pbXVsKEFlLEJ0KXwwLG09KG09bStNYXRoLmltdWwoQWUs''@;'; put 'put ''QXQpfDApK01hdGguaW11bChEZSxCdCl8MCxBPUErTWF0aC5pbXVsKERlLEF0KXwwLEU9RStNYXRoLmltdWwoTGUsc3QpfDAsbT0obT1tK01hdGguaW11bChMZSxadCl8MCkrTWF0aC5pbXVsKFJlLHN0KXwwLEE9QStNYXRoLmltdWwoUmUsWnQpfDAsRT1FK01hdGguaW11bChqZSxZZSl8MCxt''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKGplLFR0KXwwKStNYXRoLmltdWwoa2UsWWUpfDAsQT1BK01hdGguaW11bChrZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHhlLGZ0KXwwLG09KG09bStNYXRoLmltdWwoeGUsTXQpfDApK01hdGguaW11bCh5ZSxmdCl8MCxBPUErTWF0aC5pbXVsKHllLE10KXwwLEU9RStN''@;'; put 'put ''YXRoLmltdWwoVWUsbm4pfDAsbT0obT1tK01hdGguaW11bChVZSxXdCl8MCkrTWF0aC5pbXVsKEplLG5uKXwwLEE9QStNYXRoLmltdWwoSmUsV3QpfDA7dmFyIFJpPShqKyhFPUUrTWF0aC5pbXVsKG5lLGRuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsbW4pfDApK01hdGgu''@;'; put 'put ''aW11bChzZSxkbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxtbil8MCkrKG0+Pj4xMyl8MCkrKFJpPj4+MjYpfDAsUmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLEl0KSxtPShtPU1hdGguaW11bChJZSxSdCkpK01hdGguaW11bChhdCxJdCl8MCxBPU1hdGguaW11bChhdCxS''@;'; put 'put ''dCksRT1FK01hdGguaW11bCh1dCxhbil8MCxtPShtPW0rTWF0aC5pbXVsKHV0LGxuKXwwKStNYXRoLmltdWwoWGUsYW4pfDAsQT1BK01hdGguaW11bChYZSxsbil8MCxFPUUrTWF0aC5pbXVsKHZ0LGhuKXwwLG09KG09bStNYXRoLmltdWwodnQsaHQpfDApK01hdGguaW11bChTdCxobil8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKFN0LGh0KXwwLEU9RStNYXRoLmltdWwocnQsQnQpfDAsbT0obT1tK01hdGguaW11bChydCxBdCl8MCkrTWF0aC5pbXVsKFFlLEJ0KXwwLEE9QStNYXRoLmltdWwoUWUsQXQpfDAsRT1FK01hdGguaW11bChBZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKEFlLFp0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoRGUsc3QpfDAsQT1BK01hdGguaW11bChEZSxadCl8MCxFPUUrTWF0aC5pbXVsKExlLFllKXwwLG09KG09bStNYXRoLmltdWwoTGUsVHQpfDApK01hdGguaW11bChSZSxZZSl8MCxBPUErTWF0aC5pbXVsKFJlLFR0KXwwLEU9RStNYXRoLmltdWwoamUsZnQpfDAsbT0obT1tK01h''@;'; put 'put ''dGguaW11bChqZSxNdCl8MCkrTWF0aC5pbXVsKGtlLGZ0KXwwLEE9QStNYXRoLmltdWwoa2UsTXQpfDAsRT1FK01hdGguaW11bCh4ZSxubil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFd0KXwwKStNYXRoLmltdWwoeWUsbm4pfDAsQT1BK01hdGguaW11bCh5ZSxXdCl8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KFVlLGRuKXwwLG09KG09bStNYXRoLmltdWwoVWUsbW4pfDApK01hdGguaW11bChKZSxkbil8MCxBPUErTWF0aC5pbXVsKEplLG1uKXwwO3ZhciBEYT0oaisoRT1FK01hdGguaW11bChuZSxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLHRuKXwwKStNYXRoLmltdWwoc2Us''@;'; put 'put ''Zm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsdG4pfDApKyhtPj4+MTMpfDApKyhEYT4+PjI2KXwwLERhJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxhbiksbT0obT1NYXRoLmltdWwoSWUsbG4pKStNYXRoLmltdWwoYXQsYW4pfDAsQT1NYXRoLmltdWwoYXQsbG4pLEU9RStN''@;'; put 'put ''YXRoLmltdWwodXQsaG4pfDAsbT0obT1tK01hdGguaW11bCh1dCxodCl8MCkrTWF0aC5pbXVsKFhlLGhuKXwwLEE9QStNYXRoLmltdWwoWGUsaHQpfDAsRT1FK01hdGguaW11bCh2dCxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LEF0KXwwKStNYXRoLmltdWwoU3QsQnQpfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bChTdCxBdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LHN0KXwwLG09KG09bStNYXRoLmltdWwocnQsWnQpfDApK01hdGguaW11bChRZSxzdCl8MCxBPUErTWF0aC5pbXVsKFFlLFp0KXwwLEU9RStNYXRoLmltdWwoQWUsWWUpfDAsbT0obT1tK01hdGguaW11bChBZSxUdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KERlLFllKXwwLEE9QStNYXRoLmltdWwoRGUsVHQpfDAsRT1FK01hdGguaW11bChMZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKExlLE10KXwwKStNYXRoLmltdWwoUmUsZnQpfDAsQT1BK01hdGguaW11bChSZSxNdCl8MCxFPUUrTWF0aC5pbXVsKGplLG5uKXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''amUsV3QpfDApK01hdGguaW11bChrZSxubil8MCxBPUErTWF0aC5pbXVsKGtlLFd0KXwwLEU9RStNYXRoLmltdWwoeGUsZG4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxtbil8MCkrTWF0aC5pbXVsKHllLGRuKXwwLEE9QStNYXRoLmltdWwoeWUsbW4pfDA7dmFyIGhpPShqKyhFPUUrTWF0aC5p''@;'; put 'put ''bXVsKFVlLGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoVWUsdG4pfDApK01hdGguaW11bChKZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChKZSx0bil8MCkrKG0+Pj4xMyl8MCkrKGhpPj4+MjYpfDAsaGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLGhuKSxt''@;'; put 'put ''PShtPU1hdGguaW11bChJZSxodCkpK01hdGguaW11bChhdCxobil8MCxBPU1hdGguaW11bChhdCxodCksRT1FK01hdGguaW11bCh1dCxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKHV0LEF0KXwwKStNYXRoLmltdWwoWGUsQnQpfDAsQT1BK01hdGguaW11bChYZSxBdCl8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KHZ0LHN0KXwwLG09KG09bStNYXRoLmltdWwodnQsWnQpfDApK01hdGguaW11bChTdCxzdCl8MCxBPUErTWF0aC5pbXVsKFN0LFp0KXwwLEU9RStNYXRoLmltdWwocnQsWWUpfDAsbT0obT1tK01hdGguaW11bChydCxUdCl8MCkrTWF0aC5pbXVsKFFlLFllKXwwLEE9QStNYXRoLmltdWwoUWUs''@;'; put 'put ''VHQpfDAsRT1FK01hdGguaW11bChBZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKEFlLE10KXwwKStNYXRoLmltdWwoRGUsZnQpfDAsQT1BK01hdGguaW11bChEZSxNdCl8MCxFPUUrTWF0aC5pbXVsKExlLG5uKXwwLG09KG09bStNYXRoLmltdWwoTGUsV3QpfDApK01hdGguaW11bChSZSxubil8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKFJlLFd0KXwwLEU9RStNYXRoLmltdWwoamUsZG4pfDAsbT0obT1tK01hdGguaW11bChqZSxtbil8MCkrTWF0aC5pbXVsKGtlLGRuKXwwLEE9QStNYXRoLmltdWwoa2UsbW4pfDA7dmFyIHFpPShqKyhFPUUrTWF0aC5pbXVsKHhlLGZuKXwwKXwwKSsoKDgxOTEmKG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoeGUsdG4pfDApK01hdGguaW11bCh5ZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCh5ZSx0bil8MCkrKG0+Pj4xMyl8MCkrKHFpPj4+MjYpfDAscWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLEJ0KSxtPShtPU1hdGguaW11bChJZSxBdCkpK01hdGgu''@;'; put 'put ''aW11bChhdCxCdCl8MCxBPU1hdGguaW11bChhdCxBdCksRT1FK01hdGguaW11bCh1dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHV0LFp0KXwwKStNYXRoLmltdWwoWGUsc3QpfDAsQT1BK01hdGguaW11bChYZSxadCl8MCxFPUUrTWF0aC5pbXVsKHZ0LFllKXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''dnQsVHQpfDApK01hdGguaW11bChTdCxZZSl8MCxBPUErTWF0aC5pbXVsKFN0LFR0KXwwLEU9RStNYXRoLmltdWwocnQsZnQpfDAsbT0obT1tK01hdGguaW11bChydCxNdCl8MCkrTWF0aC5pbXVsKFFlLGZ0KXwwLEE9QStNYXRoLmltdWwoUWUsTXQpfDAsRT1FK01hdGguaW11bChBZSxubil8''@;'; put 'put ''MCxtPShtPW0rTWF0aC5pbXVsKEFlLFd0KXwwKStNYXRoLmltdWwoRGUsbm4pfDAsQT1BK01hdGguaW11bChEZSxXdCl8MCxFPUUrTWF0aC5pbXVsKExlLGRuKXwwLG09KG09bStNYXRoLmltdWwoTGUsbW4pfDApK01hdGguaW11bChSZSxkbil8MCxBPUErTWF0aC5pbXVsKFJlLG1uKXwwO3Zh''@;'; put 'put ''ciBQYT0oaisoRT1FK01hdGguaW11bChqZSxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGplLHRuKXwwKStNYXRoLmltdWwoa2UsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoa2UsdG4pfDApKyhtPj4+MTMpfDApKyhQYT4+PjI2KXwwLFBhJj02NzEwODg2MyxF''@;'; put 'put ''PU1hdGguaW11bChJZSxzdCksbT0obT1NYXRoLmltdWwoSWUsWnQpKStNYXRoLmltdWwoYXQsc3QpfDAsQT1NYXRoLmltdWwoYXQsWnQpLEU9RStNYXRoLmltdWwodXQsWWUpfDAsbT0obT1tK01hdGguaW11bCh1dCxUdCl8MCkrTWF0aC5pbXVsKFhlLFllKXwwLEE9QStNYXRoLmltdWwoWGUs''@;'; put 'put ''VHQpfDAsRT1FK01hdGguaW11bCh2dCxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LE10KXwwKStNYXRoLmltdWwoU3QsZnQpfDAsQT1BK01hdGguaW11bChTdCxNdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LG5uKXwwLG09KG09bStNYXRoLmltdWwocnQsV3QpfDApK01hdGguaW11bChRZSxubil8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKFFlLFd0KXwwLEU9RStNYXRoLmltdWwoQWUsZG4pfDAsbT0obT1tK01hdGguaW11bChBZSxtbil8MCkrTWF0aC5pbXVsKERlLGRuKXwwLEE9QStNYXRoLmltdWwoRGUsbW4pfDA7dmFyIHVyPShqKyhFPUUrTWF0aC5pbXVsKExlLGZuKXwwKXwwKSsoKDgxOTEmKG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoTGUsdG4pfDApK01hdGguaW11bChSZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChSZSx0bil8MCkrKG0+Pj4xMyl8MCkrKHVyPj4+MjYpfDAsdXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLFllKSxtPShtPU1hdGguaW11bChJZSxUdCkpK01hdGgu''@;'; put 'put ''aW11bChhdCxZZSl8MCxBPU1hdGguaW11bChhdCxUdCksRT1FK01hdGguaW11bCh1dCxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKHV0LE10KXwwKStNYXRoLmltdWwoWGUsZnQpfDAsQT1BK01hdGguaW11bChYZSxNdCl8MCxFPUUrTWF0aC5pbXVsKHZ0LG5uKXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''dnQsV3QpfDApK01hdGguaW11bChTdCxubil8MCxBPUErTWF0aC5pbXVsKFN0LFd0KXwwLEU9RStNYXRoLmltdWwocnQsZG4pfDAsbT0obT1tK01hdGguaW11bChydCxtbil8MCkrTWF0aC5pbXVsKFFlLGRuKXwwLEE9QStNYXRoLmltdWwoUWUsbW4pfDA7dmFyIGJhPShqKyhFPUUrTWF0aC5p''@;'; put 'put ''bXVsKEFlLGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoQWUsdG4pfDApK01hdGguaW11bChEZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChEZSx0bil8MCkrKG0+Pj4xMyl8MCkrKGJhPj4+MjYpfDAsYmEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLGZ0KSxt''@;'; put 'put ''PShtPU1hdGguaW11bChJZSxNdCkpK01hdGguaW11bChhdCxmdCl8MCxBPU1hdGguaW11bChhdCxNdCksRT1FK01hdGguaW11bCh1dCxubil8MCxtPShtPW0rTWF0aC5pbXVsKHV0LFd0KXwwKStNYXRoLmltdWwoWGUsbm4pfDAsQT1BK01hdGguaW11bChYZSxXdCl8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KHZ0LGRuKXwwLG09KG09bStNYXRoLmltdWwodnQsbW4pfDApK01hdGguaW11bChTdCxkbil8MCxBPUErTWF0aC5pbXVsKFN0LG1uKXwwO3ZhciBNaT0oaisoRT1FK01hdGguaW11bChydCxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHJ0LHRuKXwwKStNYXRoLmltdWwoUWUs''@;'; put 'put ''Zm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoUWUsdG4pfDApKyhtPj4+MTMpfDApKyhNaT4+PjI2KXwwLE1pJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxubiksbT0obT1NYXRoLmltdWwoSWUsV3QpKStNYXRoLmltdWwoYXQsbm4pfDAsQT1NYXRoLmltdWwoYXQsV3QpLEU9RStN''@;'; put 'put ''YXRoLmltdWwodXQsZG4pfDAsbT0obT1tK01hdGguaW11bCh1dCxtbil8MCkrTWF0aC5pbXVsKFhlLGRuKXwwLEE9QStNYXRoLmltdWwoWGUsbW4pfDA7dmFyIHdhPShqKyhFPUUrTWF0aC5pbXVsKHZ0LGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodnQsdG4pfDApK01hdGgu''@;'; put 'put ''aW11bChTdCxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChTdCx0bil8MCkrKG0+Pj4xMyl8MCkrKHdhPj4+MjYpfDAsd2EmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLGRuKSxtPShtPU1hdGguaW11bChJZSxtbikpK01hdGguaW11bChhdCxkbil8MCxBPU1hdGguaW11bChhdCxt''@;'; put 'put ''bik7dmFyIGVhPShqKyhFPUUrTWF0aC5pbXVsKHV0LGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodXQsdG4pfDApK01hdGguaW11bChYZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChYZSx0bil8MCkrKG0+Pj4xMyl8MCkrKGVhPj4+MjYpfDAsZWEmPTY3MTA4''@;'; put 'put ''ODYzO3ZhciBGcj0oaisoRT1NYXRoLmltdWwoSWUsZm4pKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKEllLHRuKSkrTWF0aC5pbXVsKGF0LGZuKXwwKSk8PDEzKXwwO3JldHVybiBqPSgoQT1NYXRoLmltdWwoYXQsdG4pKSsobT4+PjEzKXwwKSsoRnI+Pj4yNil8MCxGciY9NjcxMDg4NjMs''@;'; put 'put ''SFswXT1jYSxIWzFdPV9pLEhbMl09dnIsSFszXT1YaSxIWzRdPVFpLEhbNV09VmksSFs2XT1laSxIWzddPXVhLEhbOF09UmksSFs5XT1EYSxIWzEwXT1oaSxIWzExXT1xaSxIWzEyXT1QYSxIWzEzXT11cixIWzE0XT1iYSxIWzE1XT1NaSxIWzE2XT13YSxIWzE3XT1lYSxIWzE4XT1GciwwIT09''@;'; put 'put ''aiYmKEhbMTldPWoseC5sZW5ndGgrKykseH07ZnVuY3Rpb24gZWUoQixnLHkpe3JldHVybihuZXcgSikubXVscChCLGcseSl9ZnVuY3Rpb24gSihCLGcpe3RoaXMueD1CLHRoaXMueT1nfU1hdGguaW11bHx8KFc9WSksdy5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oZyx5KXt2YXIgeCxDPXRo''@;'; put 'put ''aXMubGVuZ3RoK2cubGVuZ3RoO3JldHVybiB4PTEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/Vyh0aGlzLGcseSk6Qzw2Mz9ZKHRoaXMsZyx5KTpDPDEwMjQ/ZnVuY3Rpb24gcShCLGcseSl7eS5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkIubmVnYXRpdmUseS5sZW5ndGg9Qi5sZW5ndGgr''@;'; put 'put ''Zy5sZW5ndGg7Zm9yKHZhciB4PTAsQz0wLFQ9MDtUPHkubGVuZ3RoLTE7VCsrKXt2YXIgSD1DO0M9MDtmb3IodmFyIGo9NjcxMDg4NjMmeCxFPU1hdGgubWluKFQsZy5sZW5ndGgtMSksbT1NYXRoLm1heCgwLFQtQi5sZW5ndGgrMSk7bTw9RTttKyspe3ZhciBzZT0oMHxCLndvcmRzW1QtbV0p''@;'; put 'put ''KigwfGcud29yZHNbbV0pLENlPTY3MTA4ODYzJnNlO2o9NjcxMDg4NjMmKENlPUNlK2p8MCksQys9KEg9KEg9SCsoc2UvNjcxMDg4NjR8MCl8MCkrKENlPj4+MjYpfDApPj4+MjYsSCY9NjcxMDg4NjN9eS53b3Jkc1tUXT1qLHg9SCxIPUN9cmV0dXJuIDAhPT14P3kud29yZHNbVF09eDp5Lmxl''@;'; put 'put ''bmd0aC0tLHkuc3RyaXAoKX0odGhpcyxnLHkpOmVlKHRoaXMsZyx5KSx4fSxKLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT1uZXcgQXJyYXkoZykseD13LnByb3RvdHlwZS5fY291bnRCaXRzKGcpLTEsQz0wO0M8ZztDKyspeVtDXT10aGlzLnJldkJpbihDLHgsZyk7''@;'; put 'put ''cmV0dXJuIHl9LEoucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihnLHkseCl7aWYoMD09PWd8fGc9PT14LTEpcmV0dXJuIGc7Zm9yKHZhciBDPTAsVD0wO1Q8eTtUKyspQ3w9KDEmZyk8PHktVC0xLGc+Pj0xO3JldHVybiBDfSxKLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGcseSx4LEMs''@;'; put 'put ''VCxIKXtmb3IodmFyIGo9MDtqPEg7aisrKUNbal09eVtnW2pdXSxUW2pdPXhbZ1tqXV19LEoucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihnLHkseCxDLFQsSCl7dGhpcy5wZXJtdXRlKEgsZyx5LHgsQyxUKTtmb3IodmFyIGo9MTtqPFQ7ajw8PTEpZm9yKHZhciBFPWo8PDEsbT1NYXRo''@;'; put 'put ''LmNvcygyKk1hdGguUEkvRSksQT1NYXRoLnNpbigyKk1hdGguUEkvRSksYWU9MDthZTxUO2FlKz1FKWZvcih2YXIgbmU9bSxzZT1BLENlPTA7Q2U8ajtDZSsrKXt2YXIgVWU9eFthZStDZV0sSmU9Q1thZStDZV0saXQ9eFthZStDZStqXSx4ZT1DW2FlK0NlK2pdLHllPW5lKml0LXNlKnhlO3hl''@;'; put 'put ''PW5lKnhlK3NlKml0LHhbYWUrQ2VdPVVlKyhpdD15ZSksQ1thZStDZV09SmUreGUseFthZStDZStqXT1VZS1pdCxDW2FlK0NlK2pdPUplLXhlLENlIT09RSYmKHllPW0qbmUtQSpzZSxzZT1tKnNlK0EqbmUsbmU9eWUpfX0sSi5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oZyx5KXt2''@;'; put 'put ''YXIgeD0xfE1hdGgubWF4KHksZyksQz0xJngsVD0wO2Zvcih4PXgvMnwwO3g7eD4+Pj0xKVQrKztyZXR1cm4gMTw8VCsxK0N9LEoucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihnLHkseCl7aWYoISh4PD0xKSlmb3IodmFyIEM9MDtDPHgvMjtDKyspe3ZhciBUPWdbQ107Z1tDXT1nW3gt''@;'; put 'put ''Qy0xXSxnW3gtQy0xXT1ULFQ9eVtDXSx5W0NdPS15W3gtQy0xXSx5W3gtQy0xXT0tVH19LEoucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihnLHkpe2Zvcih2YXIgeD0wLEM9MDtDPHkvMjtDKyspe3ZhciBUPTgxOTIqTWF0aC5yb3VuZChnWzIqQysxXS95KStNYXRoLnJvdW5kKGdb''@;'; put 'put ''MipDXS95KSt4O2dbQ109NjcxMDg4NjMmVCx4PVQ8NjcxMDg4NjQ/MDpULzY3MTA4ODY0fDB9cmV0dXJuIGd9LEoucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oZyx5LHgsQyl7Zm9yKHZhciBUPTAsSD0wO0g8eTtIKyspeFsyKkhdPTgxOTEmKFQrPTB8Z1tIXSkseFsyKkgrMV09ODE5''@;'; put 'put ''MSYoVD4+Pj0xMyksVD4+Pj0xMztmb3IoSD0yKnk7SDxDOysrSCl4W0hdPTA7cCgwPT09VCkscCghKC04MTkyJlQpKX0sSi5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihnKXtmb3IodmFyIHk9bmV3IEFycmF5KGcpLHg9MDt4PGc7eCsrKXlbeF09MDtyZXR1cm4geX0sSi5wcm90b3R5cGUubXVs''@;'; put 'put ''cD1mdW5jdGlvbihnLHkseCl7dmFyIEM9Mip0aGlzLmd1ZXNzTGVuMTNiKGcubGVuZ3RoLHkubGVuZ3RoKSxUPXRoaXMubWFrZVJCVChDKSxIPXRoaXMuc3R1YihDKSxqPW5ldyBBcnJheShDKSxFPW5ldyBBcnJheShDKSxtPW5ldyBBcnJheShDKSxBPW5ldyBBcnJheShDKSxhZT1uZXcgQXJy''@;'; put 'put ''YXkoQyksbmU9bmV3IEFycmF5KEMpLHNlPXgud29yZHM7c2UubGVuZ3RoPUMsdGhpcy5jb252ZXJ0MTNiKGcud29yZHMsZy5sZW5ndGgsaixDKSx0aGlzLmNvbnZlcnQxM2IoeS53b3Jkcyx5Lmxlbmd0aCxBLEMpLHRoaXMudHJhbnNmb3JtKGosSCxFLG0sQyxUKSx0aGlzLnRyYW5zZm9ybShB''@;'; put 'put ''LEgsYWUsbmUsQyxUKTtmb3IodmFyIENlPTA7Q2U8QztDZSsrKXt2YXIgVWU9RVtDZV0qYWVbQ2VdLW1bQ2VdKm5lW0NlXTttW0NlXT1FW0NlXSpuZVtDZV0rbVtDZV0qYWVbQ2VdLEVbQ2VdPVVlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShFLG0sQyksdGhpcy50cmFuc2Zvcm0oRSxtLHNlLEgs''@;'; put 'put ''QyxUKSx0aGlzLmNvbmp1Z2F0ZShzZSxILEMpLHRoaXMubm9ybWFsaXplMTNiKHNlLEMpLHgubmVnYXRpdmU9Zy5uZWdhdGl2ZV55Lm5lZ2F0aXZlLHgubGVuZ3RoPWcubGVuZ3RoK3kubGVuZ3RoLHguc3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcpe3ZhciB5PW5ldyB3KG51''@;'; put 'put ''bGwpO3JldHVybiB5LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksdGhpcy5tdWxUbyhnLHkpfSx3LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGcpe3ZhciB5PW5ldyB3KG51bGwpO3JldHVybiB5LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksZWUo''@;'; put 'put ''dGhpcyxnLHkpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oZyx0aGlzKX0sdy5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCk7Zm9yKHZhciB5PTAseD0wO3g8dGhpcy5s''@;'; put 'put ''ZW5ndGg7eCsrKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSpnLFQ9KDY3MTA4ODYzJkMpKyg2NzEwODg2MyZ5KTt5Pj49MjYseSs9Qy82NzEwODg2NHwwLHkrPVQ+Pj4yNix0aGlzLndvcmRzW3hdPTY3MTA4ODYzJlR9cmV0dXJuIDAhPT15JiYodGhpcy53b3Jkc1t4XT15LHRoaXMubGVuZ3Ro''@;'; put 'put ''KyspLHRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihnKX0sdy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSx3LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0''@;'; put 'put ''aGlzLmNsb25lKCkpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyl7dmFyIHk9ZnVuY3Rpb24gWihCKXtmb3IodmFyIGc9bmV3IEFycmF5KEIuYml0TGVuZ3RoKCkpLHk9MDt5PGcubGVuZ3RoO3krKyl7dmFyIEM9eSUyNjtnW3ldPShCLndvcmRzW3kvMjZ8MF0mMTw8Qyk+Pj5DfXJldHVy''@;'; put 'put ''biBnfShnKTtpZigwPT09eS5sZW5ndGgpcmV0dXJuIG5ldyB3KDEpO2Zvcih2YXIgeD10aGlzLEM9MDtDPHkubGVuZ3RoJiYwPT09eVtDXTtDKysseD14LnNxcigpKTtpZigrK0M8eS5sZW5ndGgpZm9yKHZhciBUPXguc3FyKCk7Qzx5Lmxlbmd0aDtDKyssVD1ULnNxcigpKTAhPT15W0NdJiYo''@;'; put 'put ''eD14Lm11bChUKSk7cmV0dXJuIHh9LHcucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIFQseT1nJTI2LHg9KGcteSkvMjYsQz02NzEwODg2Mz4+PjI2LXk8PDI2LXk7aWYoMCE9PXkpe3ZhciBIPTA7Zm9yKFQ9MDtUPHRoaXMubGVu''@;'; put 'put ''Z3RoO1QrKyl7dmFyIGo9dGhpcy53b3Jkc1tUXSZDO3RoaXMud29yZHNbVF09KDB8dGhpcy53b3Jkc1tUXSktajw8eXxILEg9aj4+PjI2LXl9SCYmKHRoaXMud29yZHNbVF09SCx0aGlzLmxlbmd0aCsrKX1pZigwIT09eCl7Zm9yKFQ9dGhpcy5sZW5ndGgtMTtUPj0wO1QtLSl0aGlzLndvcmRz''@;'; put 'put ''W1QreF09dGhpcy53b3Jkc1tUXTtmb3IoVD0wO1Q8eDtUKyspdGhpcy53b3Jkc1tUXT0wO3RoaXMubGVuZ3RoKz14fXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihnKX0sdy5w''@;'; put 'put ''cm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKGcseSx4KXt2YXIgQztwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCksQz15Pyh5LXklMjYpLzI2OjA7dmFyIFQ9ZyUyNixIPU1hdGgubWluKChnLVQpLzI2LHRoaXMubGVuZ3RoKSxqPTY3MTA4ODYzXjY3MTA4ODYzPj4+VDw8VCxFPXg7aWYoQy09''@;'; put 'put ''SCxDPU1hdGgubWF4KDAsQyksRSl7Zm9yKHZhciBtPTA7bTxIO20rKylFLndvcmRzW21dPXRoaXMud29yZHNbbV07RS5sZW5ndGg9SH1pZigwIT09SClpZih0aGlzLmxlbmd0aD5IKWZvcih0aGlzLmxlbmd0aC09SCxtPTA7bTx0aGlzLmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT10aGlzLndv''@;'; put 'put ''cmRzW20rSF07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgQT0wO2ZvcihtPXRoaXMubGVuZ3RoLTE7bT49MCYmKDAhPT1BfHxtPj1DKTttLS0pe3ZhciBhZT0wfHRoaXMud29yZHNbbV07dGhpcy53b3Jkc1ttXT1BPDwyNi1UfGFlPj4+VCxBPWFlJmp9cmV0dXJuIEUm''@;'; put 'put ''JjAhPT1BJiYoRS53b3Jkc1tFLmxlbmd0aCsrXT1BKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihnLHkseCl7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVz''@;'; put 'put ''aHJuKGcseSx4KX0sdy5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGcpfSx3LnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihnKX0sdy5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihnKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGcpfSx3LnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihnKX0sdy5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PWclMjYseD0oZy15KS8y''@;'; put 'put ''NjtyZXR1cm4hKHRoaXMubGVuZ3RoPD14fHwhKHRoaXMud29yZHNbeF0mMTw8eSkpfSx3LnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PWclMjYseD0oZy15KS8yNjtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tu''@;'; put 'put ''IHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXg/dGhpczooMCE9PXkmJngrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbih4LHRoaXMubGVuZ3RoKSwwIT09eSYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+eTw8eSks''@;'; put 'put ''dGhpcy5zdHJpcCgpKX0sdy5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oZyl9LHcucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGcpe3JldHVybiBwKCJudW1iZXIiPT10eXBlb2YgZykscChnPDY3MTA4ODY0KSxnPDA/dGhpcy5pc3Vibigt''@;'; put 'put ''Zyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxnPyh0aGlzLndvcmRzWzBdPWctKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhp''@;'; put 'put ''cyk6dGhpcy5faWFkZG4oZyl9LHcucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihnKXt0aGlzLndvcmRzWzBdKz1nO2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbeV0+PTY3MTA4ODY0O3krKyl0aGlzLndvcmRzW3ldLT02NzEwODg2NCx5PT09dGhpcy5sZW5ndGgtMT90''@;'; put 'put ''aGlzLndvcmRzW3krMV09MTp0aGlzLndvcmRzW3krMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgseSsxKSx0aGlzfSx3LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihnKXtpZihwKCJudW1iZXIiPT10eXBlb2YgZykscChnPDY3MTA4ODY0KSxnPDApcmV0dXJu''@;'; put 'put ''IHRoaXMuaWFkZG4oLWcpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1nLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRo''@;'; put 'put ''aXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t5XTwwO3krKyl0aGlzLndvcmRzW3ldKz02NzEwODg2NCx0aGlzLndvcmRzW3krMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuYWRkbj1mdW5j''@;'; put 'put ''dGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGcpfSx3LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oZyl9LHcucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHcucHJvdG90eXBl''@;'; put 'put ''LmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx3LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oZyx5LHgpe3ZhciBUO3RoaXMuX2V4cGFuZChnLmxlbmd0aCt4KTt2YXIgSCxqPTA7Zm9yKFQ9MDtUPGcubGVuZ3RoO1QrKyl7SD0oMHx0aGlzLndvcmRz''@;'; put 'put ''W1QreF0pK2o7dmFyIEU9KDB8Zy53b3Jkc1tUXSkqeTtqPSgoSC09NjcxMDg4NjMmRSk+PjI2KS0oRS82NzEwODg2NHwwKSx0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmSH1mb3IoO1Q8dGhpcy5sZW5ndGgteDtUKyspaj0oSD0oMHx0aGlzLndvcmRzW1QreF0pK2opPj4yNix0aGlzLndvcmRz''@;'; put 'put ''W1QreF09NjcxMDg4NjMmSDtpZigwPT09ailyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihwKC0xPT09aiksaj0wLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKylqPShIPS0oMHx0aGlzLndvcmRzW1RdKStqKT4+MjYsdGhpcy53b3Jkc1tUXT02NzEwODg2MyZIO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEs''@;'; put 'put ''dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihnLHkpe3ZhciB4LEM9dGhpcy5jbG9uZSgpLFQ9ZyxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXTswIT0oeD0yNi10aGlzLl9jb3VudEJpdHMoSCkpJiYoVD1ULnVzaGxuKHgpLEMuaXVzaGxuKHgpLEg9MHxULndvcmRz''@;'; put 'put ''W1QubGVuZ3RoLTFdKTt2YXIgbSxFPUMubGVuZ3RoLVQubGVuZ3RoO2lmKCJtb2QiIT09eSl7KG09bmV3IHcobnVsbCkpLmxlbmd0aD1FKzEsbS53b3Jkcz1uZXcgQXJyYXkobS5sZW5ndGgpO2Zvcih2YXIgQT0wO0E8bS5sZW5ndGg7QSsrKW0ud29yZHNbQV09MH12YXIgYWU9Qy5jbG9uZSgp''@;'; put 'put ''Ll9pc2hsbnN1Ym11bChULDEsRSk7MD09PWFlLm5lZ2F0aXZlJiYoQz1hZSxtJiYobS53b3Jkc1tFXT0xKSk7Zm9yKHZhciBuZT1FLTE7bmU+PTA7bmUtLSl7dmFyIHNlPTY3MTA4ODY0KigwfEMud29yZHNbVC5sZW5ndGgrbmVdKSsoMHxDLndvcmRzW1QubGVuZ3RoK25lLTFdKTtmb3Ioc2U9''@;'; put 'put ''TWF0aC5taW4oc2UvSHwwLDY3MTA4ODYzKSxDLl9pc2hsbnN1Ym11bChULHNlLG5lKTswIT09Qy5uZWdhdGl2ZTspc2UtLSxDLm5lZ2F0aXZlPTAsQy5faXNobG5zdWJtdWwoVCwxLG5lKSxDLmlzWmVybygpfHwoQy5uZWdhdGl2ZV49MSk7bSYmKG0ud29yZHNbbmVdPXNlKX1yZXR1cm4gbSYm''@;'; put 'put ''bS5zdHJpcCgpLEMuc3RyaXAoKSwiZGl2IiE9PXkmJjAhPT14JiZDLml1c2hybih4KSx7ZGl2Om18fG51bGwsbW9kOkN9fSx3LnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oZyx5LHgpe3JldHVybiBwKCFnLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3''@;'; put 'put ''KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QoZyx5KSwibW9kIiE9PXkmJihDPUguZGl2Lm5lZygpKSwiZGl2IiE9PXkmJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlhZGQoZykpLHtkaXY6Qyxtb2Q6VH0pOjA9''@;'; put 'put ''PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZT8oSD10aGlzLmRpdm1vZChnLm5lZygpLHkpLCJtb2QiIT09eSYmKEM9SC5kaXYubmVnKCkpLHtkaXY6Qyxtb2Q6SC5tb2R9KTp0aGlzLm5lZ2F0aXZlJmcubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QoZy5uZWcoKSx5KSwiZGl2''@;'; put 'put ''IiE9PXkmJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlzdWIoZykpLHtkaXY6SC5kaXYsbW9kOlR9KTpnLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoZyk8MD97ZGl2Om5ldyB3KDApLG1vZDp0aGlzfToxPT09Zy5sZW5ndGg/ImRpdiI9PT15P3tkaXY6dGhpcy5k''@;'; put 'put ''aXZuKGcud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PXk/e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bmV3IHcodGhpcy5tb2RuKGcud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihnLHkpO3ZhciBD''@;'; put 'put ''LFQsSH0sdy5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJkaXYiLCExKS5kaXZ9LHcucHJvdG90eXBlLm1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMSkubW9kfSx3LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGcpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCEwKS5tb2R9LHcucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGcpe3ZhciB5PXRoaXMuZGl2bW9kKGcpO2lmKHkubW9kLmlzWmVybygpKXJldHVybiB5LmRpdjt2YXIgeD0wIT09eS5kaXYubmVnYXRpdmU/eS5tb2QuaXN1YihnKTp5Lm1vZCxD''@;'; put 'put ''PWcudXNocm4oMSksVD1nLmFuZGxuKDEpLEg9eC5jbXAoQyk7cmV0dXJuIEg8MHx8MT09PVQmJjA9PT1IP3kuZGl2OjAhPT15LmRpdi5uZWdhdGl2ZT95LmRpdi5pc3VibigxKTp5LmRpdi5pYWRkbigxKX0sdy5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihnKXtwKGc8PTY3MTA4ODYzKTtmb3Io''@;'; put 'put ''dmFyIHk9KDE8PDI2KSVnLHg9MCxDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0peD0oeSp4KygwfHRoaXMud29yZHNbQ10pKSVnO3JldHVybiB4fSx3LnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihnKXtwKGc8PTY3MTA4ODYzKTtmb3IodmFyIHk9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0p''@;'; put 'put ''e3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKzY3MTA4ODY0Knk7dGhpcy53b3Jkc1t4XT1DL2d8MCx5PUMlZ31yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oZyl9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rp''@;'; put 'put ''b24oZyl7cCgwPT09Zy5uZWdhdGl2ZSkscCghZy5pc1plcm8oKSk7dmFyIHk9dGhpcyx4PWcuY2xvbmUoKTt5PTAhPT15Lm5lZ2F0aXZlP3kudW1vZChnKTp5LmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD1uZXcgdygwKSxqPW5ldyB3KDEpLEU9MDt5LmlzRXZlbigp''@;'; put 'put ''JiZ4LmlzRXZlbigpOyl5Lml1c2hybigxKSx4Lml1c2hybigxKSwrK0U7Zm9yKHZhciBtPXguY2xvbmUoKSxBPXkuY2xvbmUoKTsheS5pc1plcm8oKTspe2Zvcih2YXIgYWU9MCxuZT0xOyEoeS53b3Jkc1swXSZuZSkmJmFlPDI2OysrYWUsbmU8PD0xKTtpZihhZT4wKWZvcih5Lml1c2hybihh''@;'; put 'put ''ZSk7YWUtLSA+MDspKEMuaXNPZGQoKXx8VC5pc09kZCgpKSYmKEMuaWFkZChtKSxULmlzdWIoQSkpLEMuaXVzaHJuKDEpLFQuaXVzaHJuKDEpO2Zvcih2YXIgc2U9MCxDZT0xOyEoeC53b3Jkc1swXSZDZSkmJnNlPDI2Oysrc2UsQ2U8PD0xKTtpZihzZT4wKWZvcih4Lml1c2hybihzZSk7c2Ut''@;'; put 'put ''LSA+MDspKEguaXNPZGQoKXx8ai5pc09kZCgpKSYmKEguaWFkZChtKSxqLmlzdWIoQSkpLEguaXVzaHJuKDEpLGouaXVzaHJuKDEpO3kuY21wKHgpPj0wPyh5LmlzdWIoeCksQy5pc3ViKEgpLFQuaXN1YihqKSk6KHguaXN1Yih5KSxILmlzdWIoQyksai5pc3ViKFQpKX1yZXR1cm57YTpILGI6''@;'; put 'put ''aixnY2Q6eC5pdXNobG4oRSl9fSx3LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSkscCghZy5pc1plcm8oKSk7dmFyIGFlLHk9dGhpcyx4PWcuY2xvbmUoKTt5PTAhPT15Lm5lZ2F0aXZlP3kudW1vZChnKTp5LmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEp''@;'; put 'put ''LFQ9bmV3IHcoMCksSD14LmNsb25lKCk7eS5jbXBuKDEpPjAmJnguY21wbigxKT4wOyl7Zm9yKHZhciBqPTAsRT0xOyEoeS53b3Jkc1swXSZFKSYmajwyNjsrK2osRTw8PTEpO2lmKGo+MClmb3IoeS5pdXNocm4oaik7ai0tID4wOylDLmlzT2RkKCkmJkMuaWFkZChIKSxDLml1c2hybigxKTtm''@;'; put 'put ''b3IodmFyIG09MCxBPTE7ISh4LndvcmRzWzBdJkEpJiZtPDI2OysrbSxBPDw9MSk7aWYobT4wKWZvcih4Lml1c2hybihtKTttLS0gPjA7KVQuaXNPZGQoKSYmVC5pYWRkKEgpLFQuaXVzaHJuKDEpO3kuY21wKHgpPj0wPyh5LmlzdWIoeCksQy5pc3ViKFQpKTooeC5pc3ViKHkpLFQuaXN1YihD''@;'; put 'put ''KSl9cmV0dXJuKGFlPTA9PT15LmNtcG4oMSk/QzpUKS5jbXBuKDApPDAmJmFlLmlhZGQoZyksYWV9LHcucHJvdG90eXBlLmdjZD1mdW5jdGlvbihnKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBnLmFicygpO2lmKGcuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIHk9dGhpcy5jbG9u''@;'; put 'put ''ZSgpLHg9Zy5jbG9uZSgpO3kubmVnYXRpdmU9MCx4Lm5lZ2F0aXZlPTA7Zm9yKHZhciBDPTA7eS5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTtDKyspeS5pdXNocm4oMSkseC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO3kuaXNFdmVuKCk7KXkuaXVzaHJuKDEpO2Zvcig7eC5pc0V2ZW4oKTspeC5pdXNo''@;'; put 'put ''cm4oMSk7dmFyIFQ9eS5jbXAoeCk7aWYoVDwwKXt2YXIgSD15O3k9eCx4PUh9ZWxzZSBpZigwPT09VHx8MD09PXguY21wbigxKSlicmVhazt5LmlzdWIoeCl9cmV0dXJuIHguaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmVnY2QoZykuYS51bW9k''@;'; put 'put ''KGcpfSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMud29yZHNb''@;'; put 'put ''MF0mZ30sdy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcpO3ZhciB5PWclMjYseD0oZy15KS8yNixDPTE8PHk7aWYodGhpcy5sZW5ndGg8PXgpcmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF18PUMsdGhpcztmb3IodmFyIFQ9QyxI''@;'; put 'put ''PXg7MCE9PVQmJkg8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj0wfHRoaXMud29yZHNbSF07VD0oais9VCk+Pj4yNix0aGlzLndvcmRzW0hdPWomPTY3MTA4ODYzfXJldHVybiAwIT09VCYmKHRoaXMud29yZHNbSF09VCx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdy5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihnKXt2YXIgeCx5PWc8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIXkpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJnkpcmV0dXJuIDE7aWYodGhp''@;'; put 'put ''cy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpeD0xO2Vsc2V7eSYmKGc9LWcpLHAoZzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIEM9MHx0aGlzLndvcmRzWzBdO3g9Qz09PWc/MDpDPGc/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteDp4fSx3LnByb3RvdHlwZS5j''@;'; put 'put ''bXA9ZnVuY3Rpb24oZyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgeT10aGlzLnVjbXAoZyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXk6eX0sdy5wcm90''@;'; put 'put ''b3R5cGUudWNtcD1mdW5jdGlvbihnKXtpZih0aGlzLmxlbmd0aD5nLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxnLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIHk9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPTB8dGhpcy53b3Jkc1t4XSxUPTB8Zy53b3Jkc1t4XTtp''@;'; put 'put ''ZihDIT09VCl7QzxUP3k9LTE6Qz5UJiYoeT0xKTticmVha319cmV0dXJuIHl9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcChnKX0sdy5wcm90b3R5cGUuZ3Rl''@;'; put 'put ''bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPj0wfSx3LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9u''@;'; put 'put ''KGcpe3JldHVybi0xPT09dGhpcy5jbXAoZyl9LHcucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKTw9MH0sdy5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKTw9MH0sdy5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGcpe3JldHVy''@;'; put 'put ''biAwPT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5lcT1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wKGcpfSx3LnJlZD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IE1lKGcpfSx3LnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghdGhpcy5yZWQsIkFscmVhZHkg''@;'; put 'put ''YSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxwKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChnKX0sdy5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVk''@;'; put 'put ''LCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LHcucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5yZWQ9Zyx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1m''@;'; put 'put ''dW5jdGlvbihnKXtyZXR1cm4gcCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChnKX0sdy5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJl''@;'; put 'put ''ZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTdWI9''@;'; put 'put ''ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGgg''@;'; put 'put ''cmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRNdWw9''@;'; put 'put ''ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLm11bCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVk''@;'; put 'put ''LCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5pbXVsKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBu''@;'; put 'put ''dW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyks''@;'; put 'put ''dGhpcy5yZWQuaXNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBl''@;'; put 'put ''LnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3LnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlz''@;'; put 'put ''LnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sdy5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkJiYhZy5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiks''@;'; put 'put ''dGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsZyl9O3ZhciByZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIGllKEIsZyl7dGhpcy5uYW1lPUIsdGhpcy5wPW5ldyB3KGcsMTYpLHRoaXMubj10aGlzLnAuYml0TGVu''@;'; put 'put ''Z3RoKCksdGhpcy5rPW5ldyB3KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiB1ZSgpe2llLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm''@;'; put 'put ''ZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gZ2UoKXtpZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIF9lKCl7aWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBUZSgpe2llLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gTWUoQil7aWYo''@;'; put 'put ''InN0cmluZyI9PXR5cGVvZiBCKXt2YXIgZz13Ll9wcmltZShCKTt0aGlzLm09Zy5wLHRoaXMucHJpbWU9Z31lbHNlIHAoQi5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1CLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBaZShCKXtNZS5jYWxsKHRoaXMs''@;'; put 'put ''QiksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgdygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5y''@;'; put 'put ''Ll9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1pZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3Zh''@;'; put 'put ''ciBnPW5ldyB3KG51bGwpO3JldHVybiBnLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksZ30saWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oZyl7dmFyIHgseT1nO2Rve3RoaXMuc3BsaXQoeSx0aGlzLnRtcCkseD0oeT0oeT10aGlzLmltdWxLKHkpKS5pYWRkKHRo''@;'; put 'put ''aXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoeD50aGlzLm4pO3ZhciBDPXg8dGhpcy5uPy0xOnkudWNtcCh0aGlzLnApO3JldHVybiAwPT09Qz8oeS53b3Jkc1swXT0wLHkubGVuZ3RoPTEpOkM+MD95LmlzdWIodGhpcy5wKTp2b2lkIDAhPT15LnN0cmlwP3kuc3RyaXAoKTp5Ll9zdHJpcCgp''@;'; put 'put ''LHl9LGllLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLHkpe2cuaXVzaHJuKHRoaXMubiwwLHkpfSxpZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaW11bCh0aGlzLmspfSxWKHVlLGllKSx1ZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyx5KXtmb3IodmFyIHg9''@;'; put 'put ''NDE5NDMwMyxDPU1hdGgubWluKGcubGVuZ3RoLDkpLFQ9MDtUPEM7VCsrKXkud29yZHNbVF09Zy53b3Jkc1tUXTtpZih5Lmxlbmd0aD1DLGcubGVuZ3RoPD05KXJldHVybiBnLndvcmRzWzBdPTAsdm9pZChnLmxlbmd0aD0xKTt2YXIgSD1nLndvcmRzWzldO2Zvcih5LndvcmRzW3kubGVuZ3Ro''@;'; put 'put ''KytdPUgmeCxUPTEwO1Q8Zy5sZW5ndGg7VCsrKXt2YXIgaj0wfGcud29yZHNbVF07Zy53b3Jkc1tULTEwXT0oaiZ4KTw8NHxIPj4+MjIsSD1qfWcud29yZHNbVC0xMF09SD4+Pj0yMixnLmxlbmd0aC09MD09PUgmJmcubGVuZ3RoPjEwPzEwOjl9LHVlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlv''@;'; put 'put ''bihnKXtnLndvcmRzW2cubGVuZ3RoXT0wLGcud29yZHNbZy5sZW5ndGgrMV09MCxnLmxlbmd0aCs9Mjtmb3IodmFyIHk9MCx4PTA7eDxnLmxlbmd0aDt4Kyspe3ZhciBDPTB8Zy53b3Jkc1t4XTtnLndvcmRzW3hdPTY3MTA4ODYzJih5Kz05NzcqQykseT02NCpDKyh5LzY3MTA4ODY0fDApfXJl''@;'; put 'put ''dHVybiAwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmKGcubGVuZ3RoLS0sMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJmcubGVuZ3RoLS0pLGd9LFYoZ2UsaWUpLFYoX2UsaWUpLFYoVGUsaWUpLFRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtmb3IodmFyIHk9MCx4PTA7eDxnLmxlbmd0''@;'; put 'put ''aDt4Kyspe3ZhciBDPTE5KigwfGcud29yZHNbeF0pK3ksVD02NzEwODg2MyZDO0M+Pj49MjYsZy53b3Jkc1t4XT1ULHk9Q31yZXR1cm4gMCE9PXkmJihnLndvcmRzW2cubGVuZ3RoKytdPXkpLGd9LHcuX3ByaW1lPWZ1bmN0aW9uKGcpe2lmKHJlW2ddKXJldHVybiByZVtnXTt2YXIgeTtpZigi''@;'; put 'put ''azI1NiI9PT1nKXk9bmV3IHVlO2Vsc2UgaWYoInAyMjQiPT09Zyl5PW5ldyBnZTtlbHNlIGlmKCJwMTkyIj09PWcpeT1uZXcgX2U7ZWxzZXtpZigicDI1NTE5IiE9PWcpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrZyk7eT1uZXcgVGV9cmV0dXJuIHJlW2ddPXkseX0sTWUucHJv''@;'; put 'put ''dG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscChnLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxNZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oZyx5KXtwKCEoZy5u''@;'; put 'put ''ZWdhdGl2ZXx5Lm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwKGcucmVkJiZnLnJlZD09PXkucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LE1lLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnByaW1lP3RoaXMu''@;'; put 'put ''cHJpbWUuaXJlZHVjZShnKS5fZm9yY2VSZWQodGhpcyk6Zy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxNZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKGcpe3JldHVybiBnLmlzWmVybygpP2cuY2xvbmUoKTp0aGlzLm0uc3ViKGcpLl9mb3JjZVJlZCh0aGlzKX0sTWUucHJvdG90eXBl''@;'; put 'put ''LmFkZD1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmFkZCh5KTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LE1lLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3Zh''@;'; put 'put ''ciB4PWcuaWFkZCh5KTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseH0sTWUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLnN1Yih5KTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHguX2ZvcmNl''@;'; put 'put ''UmVkKHRoaXMpfSxNZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmlzdWIoeSk7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4fSxNZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3Zlcmlm''@;'; put 'put ''eTEoZyksdGhpcy5pbW9kKGcudXNobG4oeSkpfSxNZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcseSksdGhpcy5pbW9kKGcuaW11bCh5KSl9LE1lLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLHkp''@;'; put 'put ''LHRoaXMuaW1vZChnLm11bCh5KSl9LE1lLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltdWwoZyxnLmNsb25lKCkpfSxNZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm11bChnLGcpfSxNZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihnKXtp''@;'; put 'put ''ZihnLmlzWmVybygpKXJldHVybiBnLmNsb25lKCk7dmFyIHk9dGhpcy5tLmFuZGxuKDMpO2lmKHAoeSUyPT0xKSwzPT09eSl7dmFyIHg9dGhpcy5tLmFkZChuZXcgdygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhnLHgpfWZvcih2YXIgQz10aGlzLm0uc3VibigxKSxUPTA7IUMuaXNa''@;'; put 'put ''ZXJvKCkmJjA9PT1DLmFuZGxuKDEpOylUKyssQy5pdXNocm4oMSk7cCghQy5pc1plcm8oKSk7dmFyIEg9bmV3IHcoMSkudG9SZWQodGhpcyksaj1ILnJlZE5lZygpLEU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLG09dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihtPW5ldyB3KDIqbSptKS50b1Jl''@;'; put 'put ''ZCh0aGlzKTswIT09dGhpcy5wb3cobSxFKS5jbXAoaik7KW0ucmVkSUFkZChqKTtmb3IodmFyIEE9dGhpcy5wb3cobSxDKSxhZT10aGlzLnBvdyhnLEMuYWRkbigxKS5pdXNocm4oMSkpLG5lPXRoaXMucG93KGcsQyksc2U9VDswIT09bmUuY21wKEgpOyl7Zm9yKHZhciBDZT1uZSxVZT0wOzAh''@;'; put 'put ''PT1DZS5jbXAoSCk7VWUrKylDZT1DZS5yZWRTcXIoKTtwKFVlPHNlKTt2YXIgSmU9dGhpcy5wb3coQSxuZXcgdygxKS5pdXNobG4oc2UtVWUtMSkpO2FlPWFlLnJlZE11bChKZSksQT1KZS5yZWRTcXIoKSxuZT1uZS5yZWRNdWwoQSksc2U9VWV9cmV0dXJuIGFlfSxNZS5wcm90b3R5cGUuaW52''@;'; put 'put ''bT1mdW5jdGlvbihnKXt2YXIgeT1nLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09eS5uZWdhdGl2ZT8oeS5uZWdhdGl2ZT0wLHRoaXMuaW1vZCh5KS5yZWROZWcoKSk6dGhpcy5pbW9kKHkpfSxNZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcseSl7aWYoeS5pc1plcm8oKSlyZXR1cm4gbmV3''@;'; put 'put ''IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PXkuY21wbigxKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBDPW5ldyBBcnJheSgxNik7Q1swXT1uZXcgdygxKS50b1JlZCh0aGlzKSxDWzFdPWc7Zm9yKHZhciBUPTI7VDxDLmxlbmd0aDtUKyspQ1tUXT10aGlzLm11bChDW1QtMV0sZyk7dmFyIEg9Q1sw''@;'; put 'put ''XSxqPTAsRT0wLG09eS5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW0mJihtPTI2KSxUPXkubGVuZ3RoLTE7VD49MDtULS0pe2Zvcih2YXIgQT15LndvcmRzW1RdLGFlPW0tMTthZT49MDthZS0tKXt2YXIgbmU9QT4+YWUmMTtIIT09Q1swXSYmKEg9dGhpcy5zcXIoSCkpLDAhPT1uZXx8MCE9PWo/''@;'; put 'put ''KGo8PD0xLGp8PW5lLCg0PT0rK0V8fDA9PT1UJiYwPT09YWUpJiYoSD10aGlzLm11bChILENbal0pLEU9MCxqPTApKTpFPTB9bT0yNn1yZXR1cm4gSH0sTWUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXt2YXIgeT1nLnVtb2QodGhpcy5tKTtyZXR1cm4geT09PWc/eS5jbG9uZSgp''@;'; put 'put ''Onl9LE1lLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgeT1nLmNsb25lKCk7cmV0dXJuIHkucmVkPW51bGwseX0sdy5tb250PWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgWmUoZyl9LFYoWmUsTWUpLFplLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7cmV0dXJu''@;'; put 'put ''IHRoaXMuaW1vZChnLnVzaGxuKHRoaXMuc2hpZnQpKX0sWmUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciB5PXRoaXMuaW1vZChnLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4geS5yZWQ9bnVsbCx5fSxaZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLHkpe2lmKGcuaXNa''@;'; put 'put ''ZXJvKCl8fHkuaXNaZXJvKCkpcmV0dXJuIGcud29yZHNbMF09MCxnLmxlbmd0aD0xLGc7dmFyIHg9Zy5pbXVsKHkpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQp''@;'; put 'put ''LEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LFplLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyx5KXtpZihnLmlzWmVybygpfHx5LmlzWmVybygpKXJldHVybiBuZXcg''@;'; put 'put ''dygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHg9Zy5tdWwoeSksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9''@;'; put 'put ''VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0sWmUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oY2U9''@;'; put 'put ''Yi5ubWQoY2UpLHRoaXMpfSw5NzQ2OmNlPT57ZnVuY3Rpb24gWChiLEkpe2lmKCFiKXRocm93IG5ldyBFcnJvcihJfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWNlLmV4cG9ydHM9WCxYLmVxdWFsPWZ1bmN0aW9uKEksXyxwKXtpZihJIT1fKXRocm93IG5ldyBFcnJvcihwfHwiQXNzZXJ0aW9uIGZh''@;'; put 'put ''aWxlZDogIitJKyIgIT0gIitfKX19LDQ1MDQ6KGNlLFgpPT57InVzZSBzdHJpY3QiO3ZhciBiPVg7ZnVuY3Rpb24gXyhWKXtyZXR1cm4gMT09PVYubGVuZ3RoPyIwIitWOlZ9ZnVuY3Rpb24gcChWKXtmb3IodmFyIHc9IiIsUD0wO1A8Vi5sZW5ndGg7UCsrKXcrPV8oVltQXS50b1N0cmluZygx''@;'; put 'put ''NikpO3JldHVybiB3fWIudG9BcnJheT1mdW5jdGlvbiBJKFYsdyl7aWYoQXJyYXkuaXNBcnJheShWKSlyZXR1cm4gVi5zbGljZSgpO2lmKCFWKXJldHVybltdO3ZhciBQPVtdO2lmKCJzdHJpbmciIT10eXBlb2YgVil7Zm9yKHZhciBGPTA7RjxWLmxlbmd0aDtGKyspUFtGXT0wfFZbRl07cmV0''@;'; put 'put ''dXJuIFB9aWYoImhleCI9PT13KWZvcigoVj1WLnJlcGxhY2UoL1teYS16MC05XSsvZ2ksIiIpKS5sZW5ndGglMiE9MCYmKFY9IjAiK1YpLEY9MDtGPFYubGVuZ3RoO0YrPTIpUC5wdXNoKHBhcnNlSW50KFZbRl0rVltGKzFdLDE2KSk7ZWxzZSBmb3IoRj0wO0Y8Vi5sZW5ndGg7RisrKXt2YXIg''@;'; put 'put ''Uj1WLmNoYXJDb2RlQXQoRiksej1SPj44LE49MjU1JlI7ej9QLnB1c2goeixOKTpQLnB1c2goTil9cmV0dXJuIFB9LGIuemVybzI9XyxiLnRvSGV4PXAsYi5lbmNvZGU9ZnVuY3Rpb24odyxQKXtyZXR1cm4iaGV4Ij09PVA/cCh3KTp3fX0sNDI0NDpjZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgWD1m''@;'; put 'put ''dW5jdGlvbihiKXtyZXR1cm4gYiE9Yn07Y2UuZXhwb3J0cz1mdW5jdGlvbihJLF8pe3JldHVybiAwPT09SSYmMD09PV8/MS9JPT0xL186ISEoST09PV98fFgoSSkmJlgoXykpfX0sNjA5OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNDI4OSksXz1iKDU1NTkpLHA9Yig0MjQ0KSxW''@;'; put 'put ''PWIoNTYyNCksdz1iKDIyODEpLFA9XyhWKCksT2JqZWN0KTtJKFAse2dldFBvbHlmaWxsOlYsaW1wbGVtZW50YXRpb246cCxzaGltOnd9KSxjZS5leHBvcnRzPVB9LDU2MjQ6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0MjQ0KTtjZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6SX19LDIyODE6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig1NjI0KSxfPWIoNDI4OSk7Y2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciBWPUkoKTtyZXR1cm4gXyhPYmplY3Qse2lzOlZ9LHtpczpmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBPYmplY3QuaXMhPT1WfX0pLFZ9fSw4OTg3OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJO2lmKCFPYmplY3Qua2V5cyl7dmFyIF89T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxwPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsVj1iKDE0MTQpLHc9T2JqZWN0''@;'; put 'put ''LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxQPSF3LmNhbGwoe3RvU3RyaW5nOm51bGx9LCJ0b1N0cmluZyIpLEY9dy5jYWxsKGZ1bmN0aW9uKCl7fSwicHJvdG90eXBlIiksUj1bInRvU3RyaW5nIiwidG9Mb2NhbGVTdHJpbmciLCJ2YWx1ZU9mIiwiaGFzT3duUHJvcGVydHkiLCJp''@;'; put 'put ''c1Byb3RvdHlwZU9mIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJjb25zdHJ1Y3RvciJdLHo9ZnVuY3Rpb24oWil7dmFyIFk9Wi5jb25zdHJ1Y3RvcjtyZXR1cm4gWSYmWS5wcm90b3R5cGU9PT1afSxOPXskYXBwbGljYXRpb25DYWNoZTohMCwkY29uc29sZTohMCwkZXh0ZXJuYWw6ITAsJGZy''@;'; put 'put ''YW1lOiEwLCRmcmFtZUVsZW1lbnQ6ITAsJGZyYW1lczohMCwkaW5uZXJIZWlnaHQ6ITAsJGlubmVyV2lkdGg6ITAsJG9ubW96ZnVsbHNjcmVlbmNoYW5nZTohMCwkb25tb3pmdWxsc2NyZWVuZXJyb3I6ITAsJG91dGVySGVpZ2h0OiEwLCRvdXRlcldpZHRoOiEwLCRwYWdlWE9mZnNldDohMCwk''@;'; put 'put ''cGFnZVlPZmZzZXQ6ITAsJHBhcmVudDohMCwkc2Nyb2xsTGVmdDohMCwkc2Nyb2xsVG9wOiEwLCRzY3JvbGxYOiEwLCRzY3JvbGxZOiEwLCRzZWxmOiEwLCR3ZWJraXRJbmRleGVkREI6ITAsJHdlYmtpdFN0b3JhZ2VJbmZvOiEwLCR3aW5kb3c6ITB9LE89ZnVuY3Rpb24oKXtpZih0eXBlb2Yg''@;'; put 'put ''d2luZG93PiJ1IilyZXR1cm4hMTtmb3IodmFyIFogaW4gd2luZG93KXRyeXtpZighTlsiJCIrWl0mJl8uY2FsbCh3aW5kb3csWikmJm51bGwhPT13aW5kb3dbWl0mJiJvYmplY3QiPT10eXBlb2Ygd2luZG93W1pdKXRyeXt6KHdpbmRvd1taXSl9Y2F0Y2h7cmV0dXJuITB9fWNhdGNoe3JldHVy''@;'; put 'put ''biEwfXJldHVybiExfSgpO0k9ZnVuY3Rpb24oWSl7dmFyIFc9bnVsbCE9PVkmJiJvYmplY3QiPT10eXBlb2YgWSxxPSJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1wLmNhbGwoWSksZWU9VihZKSxKPVcmJiJbb2JqZWN0IFN0cmluZ10iPT09cC5jYWxsKFkpLHJlPVtdO2lmKCFXJiYhcSYmIWVlKXRo''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdC5rZXlzIGNhbGxlZCBvbiBhIG5vbi1vYmplY3QiKTt2YXIgaWU9RiYmcTtpZihKJiZZLmxlbmd0aD4wJiYhXy5jYWxsKFksMCkpZm9yKHZhciB1ZT0wO3VlPFkubGVuZ3RoOysrdWUpcmUucHVzaChTdHJpbmcodWUpKTtpZihlZSYmWS5sZW5ndGg+''@;'; put 'put ''MClmb3IodmFyIGdlPTA7Z2U8WS5sZW5ndGg7KytnZSlyZS5wdXNoKFN0cmluZyhnZSkpO2Vsc2UgZm9yKHZhciBfZSBpbiBZKSghaWV8fCJwcm90b3R5cGUiIT09X2UpJiZfLmNhbGwoWSxfZSkmJnJlLnB1c2goU3RyaW5nKF9lKSk7aWYoUClmb3IodmFyIFRlPWZ1bmN0aW9uKFope2lmKHR5''@;'; put 'put ''cGVvZiB3aW5kb3c+InUifHwhTylyZXR1cm4geihaKTt0cnl7cmV0dXJuIHooWil9Y2F0Y2h7cmV0dXJuITF9fShZKSxNZT0wO01lPFIubGVuZ3RoOysrTWUpKCFUZXx8ImNvbnN0cnVjdG9yIiE9PVJbTWVdKSYmXy5jYWxsKFksUltNZV0pJiZyZS5wdXNoKFJbTWVdKTtyZXR1cm4gcmV9fWNl''@;'; put 'put ''LmV4cG9ydHM9SX0sMjIxNTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1BcnJheS5wcm90b3R5cGUuc2xpY2UsXz1iKDE0MTQpLHA9T2JqZWN0LmtleXMsVj1wP2Z1bmN0aW9uKEYpe3JldHVybiBwKEYpfTpiKDg5ODcpLHc9T2JqZWN0LmtleXM7Vi5zaGltPWZ1bmN0aW9uKCl7aWYo''@;'; put 'put ''T2JqZWN0LmtleXMpe3ZhciBGPWZ1bmN0aW9uKCl7dmFyIFI9T2JqZWN0LmtleXMoYXJndW1lbnRzKTtyZXR1cm4gUiYmUi5sZW5ndGg9PT1hcmd1bWVudHMubGVuZ3RofSgxLDIpO0Z8fChPYmplY3Qua2V5cz1mdW5jdGlvbih6KXtyZXR1cm4gXyh6KT93KEkuY2FsbCh6KSk6dyh6KX0pfWVs''@;'; put 'put ''c2UgT2JqZWN0LmtleXM9VjtyZXR1cm4gT2JqZWN0LmtleXN8fFZ9LGNlLmV4cG9ydHM9Vn0sMTQxNDpjZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgWD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2NlLmV4cG9ydHM9ZnVuY3Rpb24oSSl7dmFyIF89WC5jYWxsKEkpLHA9IltvYmplY3QgQXJndW1l''@;'; put 'put ''bnRzXSI9PT1fO3JldHVybiBwfHwocD0iW29iamVjdCBBcnJheV0iIT09XyYmbnVsbCE9PUkmJiJvYmplY3QiPT10eXBlb2YgSSYmIm51bWJlciI9PXR5cGVvZiBJLmxlbmd0aCYmSS5sZW5ndGg+PTAmJiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1YLmNhbGwoSS5jYWxsZWUpKSxwfX0sMjgzNzoo''@;'; put 'put ''Y2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDIyMTUpLF89Yig1NDE5KSgpLHA9Yig3Mzc5KSxWPWIoODg5Miksdz1wKCJBcnJheS5wcm90b3R5cGUucHVzaCIpLFA9cCgiT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSIpLEY9Xz9WLmdldE93blByb3BlcnR5U3lt''@;'; put 'put ''Ym9sczpudWxsO2NlLmV4cG9ydHM9ZnVuY3Rpb24oeixOKXtpZihudWxsPT16KXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO3ZhciBPPVYoeik7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIE87Zm9yKHZhciBLPTE7Szxhcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoOysrSyl7dmFyIFo9Vihhcmd1bWVudHNbS10pLFk9SShaKSxXPV8mJihWLmdldE93blByb3BlcnR5U3ltYm9sc3x8Rik7aWYoVylmb3IodmFyIHE9VyhaKSxlZT0wO2VlPHEubGVuZ3RoOysrZWUpe3ZhciBKPXFbZWVdO1AoWixKKSYmdyhZLEopfWZvcih2YXIgcmU9MDtyZTxZLmxlbmd0''@;'; put 'put ''aDsrK3JlKXt2YXIgaWU9WVtyZV07UChaLGllKSYmKE9baWVdPVpbaWVdKX19cmV0dXJuIE99fSw4MTYyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMjgzNyk7Y2UuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiFPYmplY3QuYXNzaWdufHxmdW5jdGlvbigpe2lmKCFPYmplY3Qu''@;'; put 'put ''YXNzaWduKXJldHVybiExO2Zvcih2YXIgVj0iYWJjZGVmZ2hpamtsbW5vcHFyc3QiLHc9Vi5zcGxpdCgiIiksUD17fSxGPTA7Rjx3Lmxlbmd0aDsrK0YpUFt3W0ZdXT13W0ZdO3ZhciBSPU9iamVjdC5hc3NpZ24oe30sUCksej0iIjtmb3IodmFyIE4gaW4gUil6Kz1OO3JldHVybiBWIT09en0o''@;'; put 'put ''KXx8ZnVuY3Rpb24oKXtpZighT2JqZWN0LmFzc2lnbnx8IU9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucylyZXR1cm4hMTt2YXIgVj1PYmplY3QucHJldmVudEV4dGVuc2lvbnMoezE6Mn0pO3RyeXtPYmplY3QuYXNzaWduKFYsInh5Iil9Y2F0Y2h7cmV0dXJuInkiPT09VlsxXX1yZXR1cm4hMX0o''@;'; put 'put ''KT9JOk9iamVjdC5hc3NpZ259fSw3NDM1OihjZSxYKT0+e1guZW5kaWFubmVzcz1mdW5jdGlvbigpe3JldHVybiJMRSJ9LFguaG9zdG5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIGxvY2F0aW9uPCJ1Ij9sb2NhdGlvbi5ob3N0bmFtZToiIn0sWC5sb2FkYXZnPWZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuW119LFgudXB0aW1lPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LFguZnJlZW1lbT1mdW5jdGlvbigpe3JldHVybiBOdW1iZXIuTUFYX1ZBTFVFfSxYLnRvdGFsbWVtPWZ1bmN0aW9uKCl7cmV0dXJuIE51bWJlci5NQVhfVkFMVUV9LFguY3B1cz1mdW5jdGlvbigpe3JldHVybltdfSxYLnR5cGU9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4iQnJvd3NlciJ9LFgucmVsZWFzZT1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgbmF2aWdhdG9yPCJ1Ij9uYXZpZ2F0b3IuYXBwVmVyc2lvbjoiIn0sWC5uZXR3b3JrSW50ZXJmYWNlcz1YLmdldE5ldHdvcmtJbnRlcmZhY2VzPWZ1bmN0aW9uKCl7cmV0dXJue319''@;'; put 'put ''LFguYXJjaD1mdW5jdGlvbigpe3JldHVybiJqYXZhc2NyaXB0In0sWC5wbGF0Zm9ybT1mdW5jdGlvbigpe3JldHVybiJicm93c2VyIn0sWC50bXBkaXI9WC50bXBEaXI9ZnVuY3Rpb24oKXtyZXR1cm4iL3RtcCJ9LFguRU9MPSJcbiIsWC5ob21lZGlyPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifX0s''@;'; put 'put ''MjgxODooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDk4MDkpO1guY2VydGlmaWNhdGU9YigxOTM0KTt2YXIgXz1JLmRlZmluZSgiUlNBUHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJtb2R1bHVz''@;'; put 'put ''IikuaW50KCksdGhpcy5rZXkoInB1YmxpY0V4cG9uZW50IikuaW50KCksdGhpcy5rZXkoInByaXZhdGVFeHBvbmVudCIpLmludCgpLHRoaXMua2V5KCJwcmltZTEiKS5pbnQoKSx0aGlzLmtleSgicHJpbWUyIikuaW50KCksdGhpcy5rZXkoImV4cG9uZW50MSIpLmludCgpLHRoaXMua2V5KCJl''@;'; put 'put ''eHBvbmVudDIiKS5pbnQoKSx0aGlzLmtleSgiY29lZmZpY2llbnQiKS5pbnQoKSl9KTtYLlJTQVByaXZhdGVLZXk9Xzt2YXIgcD1JLmRlZmluZSgiUlNBUHVibGljS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJtb2R1bHVzIikuaW50KCksdGhpcy5rZXkoInB1Ymxp''@;'; put 'put ''Y0V4cG9uZW50IikuaW50KCkpfSk7WC5SU0FQdWJsaWNLZXk9cDt2YXIgVj1JLmRlZmluZSgiQWxnb3JpdGhtSWRlbnRpZmllciIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikub2JqaWQoKSx0aGlzLmtleSgibm9uZSIpLm51bGxfKCkub3B0aW9uYWwo''@;'; put 'put ''KSx0aGlzLmtleSgiY3VydmUiKS5vYmppZCgpLm9wdGlvbmFsKCksdGhpcy5rZXkoInBhcmFtcyIpLnNlcSgpLm9iaih0aGlzLmtleSgicCIpLmludCgpLHRoaXMua2V5KCJxIikuaW50KCksdGhpcy5rZXkoImciKS5pbnQoKSkub3B0aW9uYWwoKSl9KSx3PUkuZGVmaW5lKCJTdWJqZWN0UHVi''@;'; put 'put ''bGljS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikudXNlKFYpLHRoaXMua2V5KCJzdWJqZWN0UHVibGljS2V5IikuYml0c3RyKCkpfSk7WC5QdWJsaWNLZXk9dzt2YXIgUD1JLmRlZmluZSgiUHJpdmF0ZUtleUluZm8iLGZ1bmN0aW9uKCl7''@;'; put 'put ''dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgiYWxnb3JpdGhtIikudXNlKFYpLHRoaXMua2V5KCJzdWJqZWN0UHJpdmF0ZUtleSIpLm9jdHN0cigpKX0pO1guUHJpdmF0ZUtleT1QO3ZhciBGPUkuZGVmaW5lKCJFbmNyeXB0ZWRQcml2YXRlS2V5SW5m''@;'; put 'put ''byIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikuc2VxKCkub2JqKHRoaXMua2V5KCJpZCIpLm9iamlkKCksdGhpcy5rZXkoImRlY3J5cHQiKS5zZXEoKS5vYmoodGhpcy5rZXkoImtkZSIpLnNlcSgpLm9iaih0aGlzLmtleSgiaWQiKS5vYmppZCgpLHRo''@;'; put 'put ''aXMua2V5KCJrZGVwYXJhbXMiKS5zZXEoKS5vYmoodGhpcy5rZXkoInNhbHQiKS5vY3RzdHIoKSx0aGlzLmtleSgiaXRlcnMiKS5pbnQoKSkpLHRoaXMua2V5KCJjaXBoZXIiKS5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ28iKS5vYmppZCgpLHRoaXMua2V5KCJpdiIpLm9jdHN0cigpKSkpLHRo''@;'; put 'put ''aXMua2V5KCJzdWJqZWN0UHJpdmF0ZUtleSIpLm9jdHN0cigpKX0pO1guRW5jcnlwdGVkUHJpdmF0ZUtleT1GO3ZhciBSPUkuZGVmaW5lKCJEU0FQcml2YXRlS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoInAiKS5pbnQo''@;'; put 'put ''KSx0aGlzLmtleSgicSIpLmludCgpLHRoaXMua2V5KCJnIikuaW50KCksdGhpcy5rZXkoInB1Yl9rZXkiKS5pbnQoKSx0aGlzLmtleSgicHJpdl9rZXkiKS5pbnQoKSl9KTtYLkRTQVByaXZhdGVLZXk9UixYLkRTQXBhcmFtPUkuZGVmaW5lKCJEU0FwYXJhbSIsZnVuY3Rpb24oKXt0aGlzLmlu''@;'; put 'put ''dCgpfSk7dmFyIHo9SS5kZWZpbmUoIkVDUGFyYW1ldGVycyIsZnVuY3Rpb24oKXt0aGlzLmNob2ljZSh7bmFtZWRDdXJ2ZTp0aGlzLm9iamlkKCl9KX0pLE49SS5kZWZpbmUoIkVDUHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgp''@;'; put 'put ''LHRoaXMua2V5KCJwcml2YXRlS2V5Iikub2N0c3RyKCksdGhpcy5rZXkoInBhcmFtZXRlcnMiKS5vcHRpb25hbCgpLmV4cGxpY2l0KDApLnVzZSh6KSx0aGlzLmtleSgicHVibGljS2V5Iikub3B0aW9uYWwoKS5leHBsaWNpdCgxKS5iaXRzdHIoKSl9KTtYLkVDUHJpdmF0ZUtleT1OLFguc2ln''@;'; put 'put ''bmF0dXJlPUkuZGVmaW5lKCJzaWduYXR1cmUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInIiKS5pbnQoKSx0aGlzLmtleSgicyIpLmludCgpKX0pfSwxOTM0OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoOTgwOSksXz1JLmRlZmluZSgiVGltZSIsZnVuY3Rp''@;'; put 'put ''b24oKXt0aGlzLmNob2ljZSh7dXRjVGltZTp0aGlzLnV0Y3RpbWUoKSxnZW5lcmFsVGltZTp0aGlzLmdlbnRpbWUoKX0pfSkscD1JLmRlZmluZSgiQXR0cmlidXRlVHlwZVZhbHVlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ0eXBlIikub2JqaWQoKSx0aGlzLmtleSgi''@;'; put 'put ''dmFsdWUiKS5hbnkoKSl9KSxWPUkuZGVmaW5lKCJBbGdvcml0aG1JZGVudGlmaWVyIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS5vYmppZCgpLHRoaXMua2V5KCJwYXJhbWV0ZXJzIikub3B0aW9uYWwoKSx0aGlzLmtleSgiY3VydmUiKS5vYmppZCgp''@;'; put 'put ''Lm9wdGlvbmFsKCkpfSksdz1JLmRlZmluZSgiU3ViamVjdFB1YmxpY0tleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLnVzZShWKSx0aGlzLmtleSgic3ViamVjdFB1YmxpY0tleSIpLmJpdHN0cigpKX0pLFA9SS5kZWZpbmUoIlJlbGF0aXZl''@;'; put 'put ''RGlzdGluZ3Vpc2hlZE5hbWUiLGZ1bmN0aW9uKCl7dGhpcy5zZXRvZihwKX0pLEY9SS5kZWZpbmUoIlJETlNlcXVlbmNlIixmdW5jdGlvbigpe3RoaXMuc2Vxb2YoUCl9KSxSPUkuZGVmaW5lKCJOYW1lIixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHtyZG5TZXF1ZW5jZTp0aGlzLnVzZShGKX0p''@;'; put 'put ''fSksej1JLmRlZmluZSgiVmFsaWRpdHkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoIm5vdEJlZm9yZSIpLnVzZShfKSx0aGlzLmtleSgibm90QWZ0ZXIiKS51c2UoXykpfSksTj1JLmRlZmluZSgiRXh0ZW5zaW9uIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMu''@;'; put 'put ''a2V5KCJleHRuSUQiKS5vYmppZCgpLHRoaXMua2V5KCJjcml0aWNhbCIpLmJvb2woKS5kZWYoITEpLHRoaXMua2V5KCJleHRuVmFsdWUiKS5vY3RzdHIoKSl9KSxPPUkuZGVmaW5lKCJUQlNDZXJ0aWZpY2F0ZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIp''@;'; put 'put ''LmV4cGxpY2l0KDApLmludCgpLm9wdGlvbmFsKCksdGhpcy5rZXkoInNlcmlhbE51bWJlciIpLmludCgpLHRoaXMua2V5KCJzaWduYXR1cmUiKS51c2UoViksdGhpcy5rZXkoImlzc3VlciIpLnVzZShSKSx0aGlzLmtleSgidmFsaWRpdHkiKS51c2UoeiksdGhpcy5rZXkoInN1YmplY3QiKS51''@;'; put 'put ''c2UoUiksdGhpcy5rZXkoInN1YmplY3RQdWJsaWNLZXlJbmZvIikudXNlKHcpLHRoaXMua2V5KCJpc3N1ZXJVbmlxdWVJRCIpLmltcGxpY2l0KDEpLmJpdHN0cigpLm9wdGlvbmFsKCksdGhpcy5rZXkoInN1YmplY3RVbmlxdWVJRCIpLmltcGxpY2l0KDIpLmJpdHN0cigpLm9wdGlvbmFsKCks''@;'; put 'put ''dGhpcy5rZXkoImV4dGVuc2lvbnMiKS5leHBsaWNpdCgzKS5zZXFvZihOKS5vcHRpb25hbCgpKX0pLEs9SS5kZWZpbmUoIlg1MDlDZXJ0aWZpY2F0ZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidGJzQ2VydGlmaWNhdGUiKS51c2UoTyksdGhpcy5rZXkoInNpZ25hdHVy''@;'; put 'put ''ZUFsZ29yaXRobSIpLnVzZShWKSx0aGlzLmtleSgic2lnbmF0dXJlVmFsdWUiKS5iaXRzdHIoKSl9KTtjZS5leHBvcnRzPUt9LDc2MzE6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9L1Byb2MtVHlwZTogNCxFTkNSWVBURURbXG5ccl0rREVLLUluZm86IEFFUy0oKD86MTI4KXwoPzox''@;'; put 'put ''OTIpfCg/OjI1NikpLUNCQywoWzAtOUEtSF0rKVtcblxyXSsoWzAtOUEtelxuXHIrLz1dKylbXG5ccl0rL20sXz0vXi0tLS0tQkVHSU4gKCg/Oi4qPyBLRVkpfENFUlRJRklDQVRFKS0tLS0tL20scD0vXi0tLS0tQkVHSU4gKCg/Oi4qPyBLRVkpfENFUlRJRklDQVRFKS0tLS0tKFswLTlBLXpc''@;'; put 'put ''blxyKy89XSspLS0tLS1FTkQgXDEtLS0tLSQvbSxWPWIoMzA0OCksdz1iKDQ2OTYpLFA9Yig5NTA5KS5CdWZmZXI7Y2UuZXhwb3J0cz1mdW5jdGlvbihGLFIpe3ZhciBPLHo9Ri50b1N0cmluZygpLE49ei5tYXRjaChJKTtpZihOKXt2YXIgWj0iYWVzIitOWzFdLFk9UC5mcm9tKE5bMl0sImhl''@;'; put 'put ''eCIpLFc9UC5mcm9tKE5bM10ucmVwbGFjZSgvW1xyXG5dL2csIiIpLCJiYXNlNjQiKSxxPVYoUixZLnNsaWNlKDAsOCkscGFyc2VJbnQoTlsxXSwxMCkpLmtleSxlZT1bXSxKPXcuY3JlYXRlRGVjaXBoZXJpdihaLHEsWSk7ZWUucHVzaChKLnVwZGF0ZShXKSksZWUucHVzaChKLmZpbmFsKCkp''@;'; put 'put ''LE89UC5jb25jYXQoZWUpfWVsc2V7dmFyIEs9ei5tYXRjaChwKTtPPVAuZnJvbShLWzJdLnJlcGxhY2UoL1tcclxuXS9nLCIiKSwiYmFzZTY0Iil9cmV0dXJue3RhZzp6Lm1hdGNoKF8pWzFdLGRhdGE6T319fSw5ODA6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigyODE4KSxfPWIo''@;'; put 'put ''MjU2MikscD1iKDc2MzEpLFY9Yig0Njk2KSx3PWIoNTYzMiksUD1iKDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBSKHope3ZhciBOOyJvYmplY3QiPT10eXBlb2YgeiYmIVAuaXNCdWZmZXIoeikmJihOPXoucGFzc3BocmFzZSx6PXoua2V5KSwic3RyaW5nIj09dHlwZW9mIHomJih6PVAuZnJvbSh6''@;'; put 'put ''KSk7dmFyIFksVyxPPXAoeixOKSxLPU8udGFnLFo9Ty5kYXRhO3N3aXRjaChLKXtjYXNlIkNFUlRJRklDQVRFIjpXPUkuY2VydGlmaWNhdGUuZGVjb2RlKFosImRlciIpLnRic0NlcnRpZmljYXRlLnN1YmplY3RQdWJsaWNLZXlJbmZvO2Nhc2UiUFVCTElDIEtFWSI6c3dpdGNoKFd8fChXPUku''@;'; put 'put ''UHVibGljS2V5LmRlY29kZShaLCJkZXIiKSksWT1XLmFsZ29yaXRobS5hbGdvcml0aG0uam9pbigiLiIpKXtjYXNlIjEuMi44NDAuMTEzNTQ5LjEuMS4xIjpyZXR1cm4gSS5SU0FQdWJsaWNLZXkuZGVjb2RlKFcuc3ViamVjdFB1YmxpY0tleS5kYXRhLCJkZXIiKTtjYXNlIjEuMi44NDAuMTAw''@;'; put 'put ''NDUuMi4xIjpyZXR1cm4gVy5zdWJqZWN0UHJpdmF0ZUtleT1XLnN1YmplY3RQdWJsaWNLZXkse3R5cGU6ImVjIixkYXRhOld9O2Nhc2UiMS4yLjg0MC4xMDA0MC40LjEiOnJldHVybiBXLmFsZ29yaXRobS5wYXJhbXMucHViX2tleT1JLkRTQXBhcmFtLmRlY29kZShXLnN1YmplY3RQdWJsaWNL''@;'; put 'put ''ZXkuZGF0YSwiZGVyIikse3R5cGU6ImRzYSIsZGF0YTpXLmFsZ29yaXRobS5wYXJhbXN9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGtleSBpZCAiK1kpfWNhc2UiRU5DUllQVEVEIFBSSVZBVEUgS0VZIjpaPWZ1bmN0aW9uIEYoeixOKXt2YXIgTz16LmFsZ29yaXRobS5kZWNy''@;'; put 'put ''eXB0LmtkZS5rZGVwYXJhbXMuc2FsdCxLPXBhcnNlSW50KHouYWxnb3JpdGhtLmRlY3J5cHQua2RlLmtkZXBhcmFtcy5pdGVycy50b1N0cmluZygpLDEwKSxaPV9bei5hbGdvcml0aG0uZGVjcnlwdC5jaXBoZXIuYWxnby5qb2luKCIuIildLFk9ei5hbGdvcml0aG0uZGVjcnlwdC5jaXBoZXIu''@;'; put 'put ''aXYsVz16LnN1YmplY3RQcml2YXRlS2V5LHE9cGFyc2VJbnQoWi5zcGxpdCgiLSIpWzFdLDEwKS84LGVlPXcucGJrZGYyU3luYyhOLE8sSyxxLCJzaGExIiksSj1WLmNyZWF0ZURlY2lwaGVyaXYoWixlZSxZKSxyZT1bXTtyZXR1cm4gcmUucHVzaChKLnVwZGF0ZShXKSkscmUucHVzaChKLmZp''@;'; put 'put ''bmFsKCkpLFAuY29uY2F0KHJlKX0oWj1JLkVuY3J5cHRlZFByaXZhdGVLZXkuZGVjb2RlKFosImRlciIpLE4pO2Nhc2UiUFJJVkFURSBLRVkiOnN3aXRjaChZPShXPUkuUHJpdmF0ZUtleS5kZWNvZGUoWiwiZGVyIikpLmFsZ29yaXRobS5hbGdvcml0aG0uam9pbigiLiIpKXtjYXNlIjEuMi44''@;'; put 'put ''NDAuMTEzNTQ5LjEuMS4xIjpyZXR1cm4gSS5SU0FQcml2YXRlS2V5LmRlY29kZShXLnN1YmplY3RQcml2YXRlS2V5LCJkZXIiKTtjYXNlIjEuMi44NDAuMTAwNDUuMi4xIjpyZXR1cm57Y3VydmU6Vy5hbGdvcml0aG0uY3VydmUscHJpdmF0ZUtleTpJLkVDUHJpdmF0ZUtleS5kZWNvZGUoVy5z''@;'; put 'put ''dWJqZWN0UHJpdmF0ZUtleSwiZGVyIikucHJpdmF0ZUtleX07Y2FzZSIxLjIuODQwLjEwMDQwLjQuMSI6cmV0dXJuIFcuYWxnb3JpdGhtLnBhcmFtcy5wcml2X2tleT1JLkRTQXBhcmFtLmRlY29kZShXLnN1YmplY3RQcml2YXRlS2V5LCJkZXIiKSx7dHlwZToiZHNhIixwYXJhbXM6Vy5hbGdv''@;'; put 'put ''cml0aG0ucGFyYW1zfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5rbm93biBrZXkgaWQgIitZKX1jYXNlIlJTQSBQVUJMSUMgS0VZIjpyZXR1cm4gSS5SU0FQdWJsaWNLZXkuZGVjb2RlKFosImRlciIpO2Nhc2UiUlNBIFBSSVZBVEUgS0VZIjpyZXR1cm4gSS5SU0FQcml2YXRlS2V5LmRl''@;'; put 'put ''Y29kZShaLCJkZXIiKTtjYXNlIkRTQSBQUklWQVRFIEtFWSI6cmV0dXJue3R5cGU6ImRzYSIscGFyYW1zOkkuRFNBUHJpdmF0ZUtleS5kZWNvZGUoWiwiZGVyIil9O2Nhc2UiRUMgUFJJVkFURSBLRVkiOnJldHVybntjdXJ2ZTooWj1JLkVDUHJpdmF0ZUtleS5kZWNvZGUoWiwiZGVyIikpLnBh''@;'; put 'put ''cmFtZXRlcnMudmFsdWUscHJpdmF0ZUtleTpaLnByaXZhdGVLZXl9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGtleSB0eXBlICIrSyl9fVIuc2lnbmF0dXJlPUkuc2lnbmF0dXJlLGNlLmV4cG9ydHM9Un0sMTcyNTpjZT0+e2NlLmV4cG9ydHM9ImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oYixJKXtiLnN1cGVyXz1JLGIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpiLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pfTpmdW5jdGlvbihiLEkpe2Iuc3Vw''@;'; put 'put ''ZXJfPUk7dmFyIF89ZnVuY3Rpb24oKXt9O18ucHJvdG90eXBlPUkucHJvdG90eXBlLGIucHJvdG90eXBlPW5ldyBfLGIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWJ9fSwyOTc0OmNlPT57Y2UuZXhwb3J0cz1mdW5jdGlvbihiKXtyZXR1cm4gYiYmIm9iamVjdCI9PXR5cGVvZiBiJiYiZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgYi5jb3B5JiYiZnVuY3Rpb24iPT10eXBlb2YgYi5maWxsJiYiZnVuY3Rpb24iPT10eXBlb2YgYi5yZWFkVUludDh9fSw4MDU5OihjZSxYLGIpPT57dmFyIEk9Yig0MTU1KSxfPWIoNTEwOCkscD0vJVtzZGolXS9nO1guZm9ybWF0PWZ1bmN0aW9uKEUpe2lmKCF1ZShFKSl7''@;'; put 'put ''Zm9yKHZhciBtPVtdLEE9MDtBPGFyZ3VtZW50cy5sZW5ndGg7QSsrKW0ucHVzaChQKGFyZ3VtZW50c1tBXSkpO3JldHVybiBtLmpvaW4oIiAiKX1BPTE7Zm9yKHZhciBhZT1hcmd1bWVudHMsbmU9YWUubGVuZ3RoLHNlPVN0cmluZyhFKS5yZXBsYWNlKHAsZnVuY3Rpb24oVWUpe2lmKCIlJSI9''@;'; put 'put ''PT1VZSlyZXR1cm4iJSI7aWYoQT49bmUpcmV0dXJuIFVlO3N3aXRjaChVZSl7Y2FzZSIlcyI6cmV0dXJuIFN0cmluZyhhZVtBKytdKTtjYXNlIiVkIjpyZXR1cm4gTnVtYmVyKGFlW0ErK10pO2Nhc2UiJWoiOnRyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYWVbQSsrXSl9Y2F0Y2h7cmV0dXJu''@;'; put 'put ''IltDaXJjdWxhcl0ifWRlZmF1bHQ6cmV0dXJuIFVlfX0pLENlPWFlW0FdO0E8bmU7Q2U9YWVbKytBXSlKKENlKXx8IU1lKENlKT9zZSs9IiAiK0NlOnNlKz0iICIrUChDZSk7cmV0dXJuIHNlfSxYLmRlcHJlY2F0ZT1mdW5jdGlvbihFLG0pe2lmKF9lKGIuZy5wcm9jZXNzKSlyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gWC5kZXByZWNhdGUoRSxtKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2lmKCEwPT09SS5ub0RlcHJlY2F0aW9uKXJldHVybiBFO3ZhciBBPSExO3JldHVybiBmdW5jdGlvbiBhZSgpe2lmKCFBKXtpZihJLnRocm93RGVwcmVjYXRpb24pdGhyb3cgbmV3IEVycm9yKG0p''@;'; put 'put ''O0kudHJhY2VEZXByZWNhdGlvbj9fLnRyYWNlKG0pOl8uZXJyb3IobSksQT0hMH1yZXR1cm4gRS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTt2YXIgdyxWPXt9O2Z1bmN0aW9uIFAoRSxtKXt2YXIgQT17c2VlbjpbXSxzdHlsaXplOlJ9O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0zJiYoQS5k''@;'; put 'put ''ZXB0aD1hcmd1bWVudHNbMl0pLGFyZ3VtZW50cy5sZW5ndGg+PTQmJihBLmNvbG9ycz1hcmd1bWVudHNbM10pLGVlKG0pP0Euc2hvd0hpZGRlbj1tOm0mJlguX2V4dGVuZChBLG0pLF9lKEEuc2hvd0hpZGRlbikmJihBLnNob3dIaWRkZW49ITEpLF9lKEEuZGVwdGgpJiYoQS5kZXB0aD0yKSxf''@;'; put 'put ''ZShBLmNvbG9ycykmJihBLmNvbG9ycz0hMSksX2UoQS5jdXN0b21JbnNwZWN0KSYmKEEuY3VzdG9tSW5zcGVjdD0hMCksQS5jb2xvcnMmJihBLnN0eWxpemU9RiksTihBLEUsQS5kZXB0aCl9ZnVuY3Rpb24gRihFLG0pe3ZhciBBPVAuc3R5bGVzW21dO3JldHVybiBBPyJceDFiWyIrUC5jb2xv''@;'; put 'put ''cnNbQV1bMF0rIm0iK0UrIlx4MWJbIitQLmNvbG9yc1tBXVsxXSsibSI6RX1mdW5jdGlvbiBSKEUsbSl7cmV0dXJuIEV9ZnVuY3Rpb24gTihFLG0sQSl7aWYoRS5jdXN0b21JbnNwZWN0JiZtJiZnKG0uaW5zcGVjdCkmJm0uaW5zcGVjdCE9PVguaW5zcGVjdCYmKCFtLmNvbnN0cnVjdG9yfHxt''@;'; put 'put ''LmNvbnN0cnVjdG9yLnByb3RvdHlwZSE9PW0pKXt2YXIgYWU9bS5pbnNwZWN0KEEsRSk7cmV0dXJuIHVlKGFlKXx8KGFlPU4oRSxhZSxBKSksYWV9dmFyIG5lPWZ1bmN0aW9uIE8oRSxtKXtpZihfZShtKSlyZXR1cm4gRS5zdHlsaXplKCJ1bmRlZmluZWQiLCJ1bmRlZmluZWQiKTtpZih1ZSht''@;'; put 'put ''KSl7dmFyIEE9IiciK0pTT04uc3RyaW5naWZ5KG0pLnJlcGxhY2UoL14ifCIkL2csIiIpLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKSsiJyI7cmV0dXJuIEUuc3R5bGl6ZShBLCJzdHJpbmciKX1yZXR1cm4gaWUobSk/RS5zdHlsaXplKCIiK20sIm51bWJlciIpOmVl''@;'; put 'put ''KG0pP0Uuc3R5bGl6ZSgiIittLCJib29sZWFuIik6SihtKT9FLnN0eWxpemUoIm51bGwiLCJudWxsIik6dm9pZCAwfShFLG0pO2lmKG5lKXJldHVybiBuZTt2YXIgc2U9T2JqZWN0LmtleXMobSksQ2U9ZnVuY3Rpb24geihFKXt2YXIgbT17fTtyZXR1cm4gRS5mb3JFYWNoKGZ1bmN0aW9uKEEs''@;'; put 'put ''YWUpe21bQV09ITB9KSxtfShzZSk7aWYoRS5zaG93SGlkZGVuJiYoc2U9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobSkpLEIobSkmJihzZS5pbmRleE9mKCJtZXNzYWdlIik+PTB8fHNlLmluZGV4T2YoImRlc2NyaXB0aW9uIik+PTApKXJldHVybiBLKG0pO2lmKDA9PT1zZS5sZW5ndGgp''@;'; put 'put ''e2lmKGcobSkpcmV0dXJuIEUuc3R5bGl6ZSgiW0Z1bmN0aW9uIisobS5uYW1lPyI6ICIrbS5uYW1lOiIiKSsiXSIsInNwZWNpYWwiKTtpZihUZShtKSlyZXR1cm4gRS5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtKSwicmVnZXhwIik7aWYoWmUobSkpcmV0dXJuIEUu''@;'; put 'put ''c3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG0pLCJkYXRlIik7aWYoQihtKSlyZXR1cm4gSyhtKX12YXIgS2UsSmU9IiIsaXQ9ITEseGU9WyJ7IiwifSJdO3JldHVybiBxKG0pJiYoaXQ9ITAseGU9WyJbIiwiXSJdKSxnKG0pJiYoSmU9IiBbRnVuY3Rpb24iKyhtLm5hbWU/''@;'; put 'put ''IjogIittLm5hbWU6IiIpKyJdIiksVGUobSkmJihKZT0iICIrUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG0pKSxaZShtKSYmKEplPSIgIitEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKG0pKSxCKG0pJiYoSmU9IiAiK0sobSkpLDAhPT1zZS5sZW5ndGh8fGl0JiYwIT1t''@;'; put 'put ''Lmxlbmd0aD9BPDA/VGUobSk/RS5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtKSwicmVnZXhwIik6RS5zdHlsaXplKCJbT2JqZWN0XSIsInNwZWNpYWwiKTooRS5zZWVuLnB1c2gobSksS2U9aXQ/ZnVuY3Rpb24gWihFLG0sQSxhZSxuZSl7Zm9yKHZhciBzZT1bXSxD''@;'; put 'put ''ZT0wLFVlPW0ubGVuZ3RoO0NlPFVlOysrQ2UpaihtLFN0cmluZyhDZSkpP3NlLnB1c2goWShFLG0sQSxhZSxTdHJpbmcoQ2UpLCEwKSk6c2UucHVzaCgiIik7cmV0dXJuIG5lLmZvckVhY2goZnVuY3Rpb24oSmUpe0plLm1hdGNoKC9eXGQrJC8pfHxzZS5wdXNoKFkoRSxtLEEsYWUsSmUsITAp''@;'; put 'put ''KX0pLHNlfShFLG0sQSxDZSxzZSk6c2UubWFwKGZ1bmN0aW9uKGplKXtyZXR1cm4gWShFLG0sQSxDZSxqZSxpdCl9KSxFLnNlZW4ucG9wKCksZnVuY3Rpb24gVyhFLG0sQSl7dmFyIG5lPUUucmVkdWNlKGZ1bmN0aW9uKHNlLENlKXtyZXR1cm4gQ2UuaW5kZXhPZigiXG4iKSxzZStDZS5yZXBs''@;'; put 'put ''YWNlKC9cdTAwMWJcW1xkXGQ/bS9nLCIiKS5sZW5ndGgrMX0sMCk7cmV0dXJuIG5lPjYwP0FbMF0rKCIiPT09bT8iIjptKyJcbiAiKSsiICIrRS5qb2luKCIsXG4gICIpKyIgIitBWzFdOkFbMF0rbSsiICIrRS5qb2luKCIsICIpKyIgIitBWzFdfShLZSxKZSx4ZSkpOnhlWzBdK0plK3hlWzFd''@;'; put 'put ''fWZ1bmN0aW9uIEsoRSl7cmV0dXJuIlsiK0Vycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKEUpKyJdIn1mdW5jdGlvbiBZKEUsbSxBLGFlLG5lLHNlKXt2YXIgQ2UsVWUsSmU7aWYoKEplPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSxuZSl8fHt2YWx1ZTptW25lXX0pLmdl''@;'; put 'put ''dD9VZT1FLnN0eWxpemUoSmUuc2V0PyJbR2V0dGVyL1NldHRlcl0iOiJbR2V0dGVyXSIsInNwZWNpYWwiKTpKZS5zZXQmJihVZT1FLnN0eWxpemUoIltTZXR0ZXJdIiwic3BlY2lhbCIpKSxqKGFlLG5lKXx8KENlPSJbIituZSsiXSIpLFVlfHwoRS5zZWVuLmluZGV4T2YoSmUudmFsdWUpPDA/''@;'; put 'put ''KFVlPUooQSk/TihFLEplLnZhbHVlLG51bGwpOk4oRSxKZS52YWx1ZSxBLTEpKS5pbmRleE9mKCJcbiIpPi0xJiYoVWU9c2U/VWUuc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKGl0KXtyZXR1cm4iICAiK2l0fSkuam9pbigiXG4iKS5zdWJzdHIoMik6IlxuIitVZS5zcGxpdCgiXG4iKS5tYXAo''@;'; put 'put ''ZnVuY3Rpb24oaXQpe3JldHVybiIgICAiK2l0fSkuam9pbigiXG4iKSk6VWU9RS5zdHlsaXplKCJbQ2lyY3VsYXJdIiwic3BlY2lhbCIpKSxfZShDZSkpe2lmKHNlJiZuZS5tYXRjaCgvXlxkKyQvKSlyZXR1cm4gVWU7KENlPUpTT04uc3RyaW5naWZ5KCIiK25lKSkubWF0Y2goL14iKFthLXpB''@;'; put 'put ''LVpfXVthLXpBLVpfMC05XSopIiQvKT8oQ2U9Q2Uuc3Vic3RyKDEsQ2UubGVuZ3RoLTIpLENlPUUuc3R5bGl6ZShDZSwibmFtZSIpKTooQ2U9Q2UucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpLnJlcGxhY2UoLyheInwiJCkvZywiJyIpLENlPUUuc3R5bGl6ZShDZSwi''@;'; put 'put ''c3RyaW5nIikpfXJldHVybiBDZSsiOiAiK1VlfWZ1bmN0aW9uIHEoRSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoRSl9ZnVuY3Rpb24gZWUoRSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgRX1mdW5jdGlvbiBKKEUpe3JldHVybiBudWxsPT09RX1mdW5jdGlvbiBpZShFKXtyZXR1cm4ibnVtYmVy''@;'; put 'put ''Ij09dHlwZW9mIEV9ZnVuY3Rpb24gdWUoRSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBFfWZ1bmN0aW9uIF9lKEUpe3JldHVybiB2b2lkIDA9PT1FfWZ1bmN0aW9uIFRlKEUpe3JldHVybiBNZShFKSYmIltvYmplY3QgUmVnRXhwXSI9PT14KEUpfWZ1bmN0aW9uIE1lKEUpe3JldHVybiJvYmpl''@;'; put 'put ''Y3QiPT10eXBlb2YgRSYmbnVsbCE9PUV9ZnVuY3Rpb24gWmUoRSl7cmV0dXJuIE1lKEUpJiYiW29iamVjdCBEYXRlXSI9PT14KEUpfWZ1bmN0aW9uIEIoRSl7cmV0dXJuIE1lKEUpJiYoIltvYmplY3QgRXJyb3JdIj09PXgoRSl8fEUgaW5zdGFuY2VvZiBFcnJvcil9ZnVuY3Rpb24gZyhFKXty''@;'; put 'put ''ZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRX1mdW5jdGlvbiB4KEUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoRSl9ZnVuY3Rpb24gQyhFKXtyZXR1cm4gRTwxMD8iMCIrRS50b1N0cmluZygxMCk6RS50b1N0cmluZygxMCl9WC5kZWJ1Z2xvZz1mdW5jdGlvbihFKXtp''@;'; put 'put ''ZihfZSh3KSYmKHc9SS5lbnYuTk9ERV9ERUJVR3x8IiIpLEU9RS50b1VwcGVyQ2FzZSgpLCFWW0VdKWlmKG5ldyBSZWdFeHAoIlxcYiIrRSsiXFxiIiwiaSIpLnRlc3Qodykpe3ZhciBtPUkucGlkO1ZbRV09ZnVuY3Rpb24oKXt2YXIgQT1YLmZvcm1hdC5hcHBseShYLGFyZ3VtZW50cyk7Xy5l''@;'; put 'put ''cnJvcigiJXMgJWQ6ICVzIixFLG0sQSl9fWVsc2UgVltFXT1mdW5jdGlvbigpe307cmV0dXJuIFZbRV19LFguaW5zcGVjdD1QLFAuY29sb3JzPXtib2xkOlsxLDIyXSxpdGFsaWM6WzMsMjNdLHVuZGVybGluZTpbNCwyNF0saW52ZXJzZTpbNywyN10sd2hpdGU6WzM3LDM5XSxncmV5Ols5MCwz''@;'; put 'put ''OV0sYmxhY2s6WzMwLDM5XSxibHVlOlszNCwzOV0sY3lhbjpbMzYsMzldLGdyZWVuOlszMiwzOV0sbWFnZW50YTpbMzUsMzldLHJlZDpbMzEsMzldLHllbGxvdzpbMzMsMzldfSxQLnN0eWxlcz17c3BlY2lhbDoiY3lhbiIsbnVtYmVyOiJ5ZWxsb3ciLGJvb2xlYW46InllbGxvdyIsdW5kZWZp''@;'; put 'put ''bmVkOiJncmV5IixudWxsOiJib2xkIixzdHJpbmc6ImdyZWVuIixkYXRlOiJtYWdlbnRhIixyZWdleHA6InJlZCJ9LFguaXNBcnJheT1xLFguaXNCb29sZWFuPWVlLFguaXNOdWxsPUosWC5pc051bGxPclVuZGVmaW5lZD1mdW5jdGlvbiByZShFKXtyZXR1cm4gbnVsbD09RX0sWC5pc051bWJl''@;'; put 'put ''cj1pZSxYLmlzU3RyaW5nPXVlLFguaXNTeW1ib2w9ZnVuY3Rpb24gZ2UoRSl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBFfSxYLmlzVW5kZWZpbmVkPV9lLFguaXNSZWdFeHA9VGUsWC5pc09iamVjdD1NZSxYLmlzRGF0ZT1aZSxYLmlzRXJyb3I9QixYLmlzRnVuY3Rpb249ZyxYLmlzUHJpbWl0''@;'; put 'put ''aXZlPWZ1bmN0aW9uIHkoRSl7cmV0dXJuIG51bGw9PT1FfHwiYm9vbGVhbiI9PXR5cGVvZiBFfHwibnVtYmVyIj09dHlwZW9mIEV8fCJzdHJpbmciPT10eXBlb2YgRXx8InN5bWJvbCI9PXR5cGVvZiBFfHx0eXBlb2YgRT4idSJ9LFguaXNCdWZmZXI9YigyOTc0KTt2YXIgVD1bIkphbiIsIkZl''@;'; put 'put ''YiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdO2Z1bmN0aW9uIGooRSxtKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEUsbSl9WC5sb2c9ZnVuY3Rpb24oKXtfLmxvZygiJXMgLSAlcyIsZnVu''@;'; put 'put ''Y3Rpb24gSCgpe3ZhciBFPW5ldyBEYXRlLG09W0MoRS5nZXRIb3VycygpKSxDKEUuZ2V0TWludXRlcygpKSxDKEUuZ2V0U2Vjb25kcygpKV0uam9pbigiOiIpO3JldHVybltFLmdldERhdGUoKSxUW0UuZ2V0TW9udGgoKV0sbV0uam9pbigiICIpfSgpLFguZm9ybWF0LmFwcGx5KFgsYXJndW1l''@;'; put 'put ''bnRzKSl9LFguaW5oZXJpdHM9YigxNzI1KSxYLl9leHRlbmQ9ZnVuY3Rpb24oRSxtKXtpZighbXx8IU1lKG0pKXJldHVybiBFO2Zvcih2YXIgQT1PYmplY3Qua2V5cyhtKSxhZT1BLmxlbmd0aDthZS0tOylFW0FbYWVdXT1tW0FbYWVdXTtyZXR1cm4gRX19LDI1MjA6KGNlLFgsYik9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIEk9Yig0MTU1KSxfPSJ3aW4zMiI9PT1JLnBsYXRmb3JtLHA9Yig4MDU5KTtmdW5jdGlvbiBWKFcscSl7Zm9yKHZhciBlZT1bXSxKPTA7SjxXLmxlbmd0aDtKKyspe3ZhciByZT1XW0pdOyFyZXx8Ii4iPT09cmV8fCgiLi4iPT09cmU/ZWUubGVuZ3RoJiYiLi4iIT09ZWVb''@;'; put 'put ''ZWUubGVuZ3RoLTFdP2VlLnBvcCgpOnEmJmVlLnB1c2goIi4uIik6ZWUucHVzaChyZSkpfXJldHVybiBlZX1mdW5jdGlvbiB3KFcpe2Zvcih2YXIgcT1XLmxlbmd0aC0xLGVlPTA7ZWU8PXEmJiFXW2VlXTtlZSsrKTtmb3IodmFyIEo9cTtKPj0wJiYhV1tKXTtKLS0pO3JldHVybiAwPT09ZWUm''@;'; put 'put ''Jko9PT1xP1c6ZWU+Sj9bXTpXLnNsaWNlKGVlLEorMSl9dmFyIFA9L14oW2EtekEtWl06fFtcXFwvXXsyfVteXFxcL10rW1xcXC9dK1teXFxcL10rKT8oW1xcXC9dKT8oW1xzXFNdKj8pJC8sRj0vXihbXHNcU10qPykoKD86XC57MSwyfXxbXlxcXC9dKz98KShcLlteLlwvXFxdKnwpKSg/Oltc''@;'; put 'put ''XFwvXSopJC8sUj17fTtmdW5jdGlvbiB6KFcpe3ZhciBxPVAuZXhlYyhXKSxlZT0ocVsxXXx8IiIpKyhxWzJdfHwiIikscmU9Ri5leGVjKHFbM118fCIiKTtyZXR1cm5bZWUscmVbMV0scmVbMl0scmVbM11dfWZ1bmN0aW9uIE4oVyl7dmFyIHE9UC5leGVjKFcpLGVlPXFbMV18fCIiLEo9ISFl''@;'; put 'put ''ZSYmIjoiIT09ZWVbMV07cmV0dXJue2RldmljZTplZSxpc1VuYzpKLGlzQWJzb2x1dGU6Snx8ISFxWzJdLHRhaWw6cVszXX19ZnVuY3Rpb24gTyhXKXtyZXR1cm4iXFxcXCIrVy5yZXBsYWNlKC9eW1xcXC9dKy8sIiIpLnJlcGxhY2UoL1tcXFwvXSsvZywiXFwiKX1SLnJlc29sdmU9ZnVuY3Rp''@;'; put 'put ''b24oKXtmb3IodmFyIFc9IiIscT0iIixlZT0hMSxKPWFyZ3VtZW50cy5sZW5ndGgtMTtKPj0tMTtKLS0pe3ZhciByZTtpZihKPj0wP3JlPWFyZ3VtZW50c1tKXTpXPyghKHJlPUkuZW52WyI9IitXXSl8fHJlLnN1YnN0cigwLDMpLnRvTG93ZXJDYXNlKCkhPT1XLnRvTG93ZXJDYXNlKCkrIlxc''@;'; put 'put ''IikmJihyZT1XKyJcXCIpOnJlPUkuY3dkKCksIXAuaXNTdHJpbmcocmUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzIik7aWYocmUpe3ZhciBpZT1OKHJlKSx1ZT1pZS5kZXZpY2UsZ2U9aWUuaXNVbmMsX2U9aWUuaXNBYnNv''@;'; put 'put ''bHV0ZSxUZT1pZS50YWlsO2lmKCghdWV8fCFXfHx1ZS50b0xvd2VyQ2FzZSgpPT09Vy50b0xvd2VyQ2FzZSgpKSYmKFd8fChXPXVlKSxlZXx8KHE9VGUrIlxcIitxLGVlPV9lKSxXJiZlZSkpYnJlYWt9fXJldHVybiBnZSYmKFc9TyhXKSksVysoZWU/IlxcIjoiIikrKHE9VihxLnNwbGl0KC9b''@;'; put 'put ''XFxcL10rLyksIWVlKS5qb2luKCJcXCIpKXx8Ii4ifSxSLm5vcm1hbGl6ZT1mdW5jdGlvbihXKXt2YXIgcT1OKFcpLGVlPXEuZGV2aWNlLEo9cS5pc1VuYyxyZT1xLmlzQWJzb2x1dGUsaWU9cS50YWlsLHVlPS9bXFxcL10kLy50ZXN0KGllKTtyZXR1cm4hKGllPVYoaWUuc3BsaXQoL1tcXFwv''@;'; put 'put ''XSsvKSwhcmUpLmpvaW4oIlxcIikpJiYhcmUmJihpZT0iLiIpLGllJiZ1ZSYmKGllKz0iXFwiKSxKJiYoZWU9TyhlZSkpLGVlKyhyZT8iXFwiOiIiKStpZX0sUi5pc0Fic29sdXRlPWZ1bmN0aW9uKFcpe3JldHVybiBOKFcpLmlzQWJzb2x1dGV9LFIuam9pbj1mdW5jdGlvbigpe2Zvcih2YXIg''@;'; put 'put ''Vz1bXSxxPTA7cTxhcmd1bWVudHMubGVuZ3RoO3ErKyl7dmFyIGVlPWFyZ3VtZW50c1txXTtpZighcC5pc1N0cmluZyhlZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MiKTtlZSYmVy5wdXNoKGVlKX12YXIgSj1XLmpvaW4oIlxc''@;'; put 'put ''Iik7cmV0dXJuL15bXFxcL117Mn1bXlxcXC9dLy50ZXN0KFdbMF0pfHwoSj1KLnJlcGxhY2UoL15bXFxcL117Mix9LywiXFwiKSksUi5ub3JtYWxpemUoSil9LFIucmVsYXRpdmU9ZnVuY3Rpb24oVyxxKXtXPVIucmVzb2x2ZShXKSxxPVIucmVzb2x2ZShxKTtmb3IodmFyIGVlPVcudG9Mb3dl''@;'; put 'put ''ckNhc2UoKSxKPXEudG9Mb3dlckNhc2UoKSxyZT13KHEuc3BsaXQoIlxcIikpLGllPXcoZWUuc3BsaXQoIlxcIikpLHVlPXcoSi5zcGxpdCgiXFwiKSksZ2U9TWF0aC5taW4oaWUubGVuZ3RoLHVlLmxlbmd0aCksX2U9Z2UsVGU9MDtUZTxnZTtUZSsrKWlmKGllW1RlXSE9PXVlW1RlXSl7X2U9''@;'; put 'put ''VGU7YnJlYWt9aWYoMD09X2UpcmV0dXJuIHE7dmFyIE1lPVtdO2ZvcihUZT1fZTtUZTxpZS5sZW5ndGg7VGUrKylNZS5wdXNoKCIuLiIpO3JldHVybihNZT1NZS5jb25jYXQocmUuc2xpY2UoX2UpKSkuam9pbigiXFwiKX0sUi5fbWFrZUxvbmc9ZnVuY3Rpb24oVyl7aWYoIXAuaXNTdHJpbmco''@;'; put 'put ''VykpcmV0dXJuIFc7aWYoIVcpcmV0dXJuIiI7dmFyIHE9Ui5yZXNvbHZlKFcpO3JldHVybi9eW2EtekEtWl1cOlxcLy50ZXN0KHEpPyJcXFxcP1xcIitxOi9eXFxcXFtePy5dLy50ZXN0KHEpPyJcXFxcP1xcVU5DXFwiK3Euc3Vic3RyaW5nKDIpOld9LFIuZGlybmFtZT1mdW5jdGlvbihXKXt2''@;'; put 'put ''YXIgcT16KFcpLGVlPXFbMF0sSj1xWzFdO3JldHVybiBlZXx8Sj8oSiYmKEo9Si5zdWJzdHIoMCxKLmxlbmd0aC0xKSksZWUrSik6Ii4ifSxSLmJhc2VuYW1lPWZ1bmN0aW9uKFcscSl7dmFyIGVlPXooVylbMl07cmV0dXJuIHEmJmVlLnN1YnN0cigtMSpxLmxlbmd0aCk9PT1xJiYoZWU9ZWUu''@;'; put 'put ''c3Vic3RyKDAsZWUubGVuZ3RoLXEubGVuZ3RoKSksZWV9LFIuZXh0bmFtZT1mdW5jdGlvbihXKXtyZXR1cm4geihXKVszXX0sUi5mb3JtYXQ9ZnVuY3Rpb24oVyl7aWYoIXAuaXNPYmplY3QoVykpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGFyYW1ldGVyICdwYXRoT2JqZWN0JyBtdXN0IGJlIGFu''@;'; put 'put ''IG9iamVjdCwgbm90ICIrdHlwZW9mIFcpO2lmKCFwLmlzU3RyaW5nKFcucm9vdHx8IiIpKXRocm93IG5ldyBUeXBlRXJyb3IoIidwYXRoT2JqZWN0LnJvb3QnIG11c3QgYmUgYSBzdHJpbmcgb3IgdW5kZWZpbmVkLCBub3QgIit0eXBlb2YgVy5yb290KTt2YXIgZWU9Vy5kaXIsSj1XLmJhc2V8''@;'; put 'put ''fCIiO3JldHVybiBlZT9lZVtlZS5sZW5ndGgtMV09PT1SLnNlcD9lZStKOmVlK1Iuc2VwK0o6Sn0sUi5wYXJzZT1mdW5jdGlvbihXKXtpZighcC5pc1N0cmluZyhXKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXJhbWV0ZXIgJ3BhdGhTdHJpbmcnIG11c3QgYmUgYSBzdHJpbmcsIG5vdCAiK3R5''@;'; put 'put ''cGVvZiBXKTt2YXIgcT16KFcpO2lmKCFxfHw0IT09cS5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBwYXRoICciK1crIiciKTtyZXR1cm57cm9vdDpxWzBdLGRpcjpxWzBdK3FbMV0uc2xpY2UoMCwtMSksYmFzZTpxWzJdLGV4dDpxWzNdLG5hbWU6cVsyXS5zbGljZSgwLHFb''@;'; put 'put ''Ml0ubGVuZ3RoLXFbM10ubGVuZ3RoKX19LFIuc2VwPSJcXCIsUi5kZWxpbWl0ZXI9IjsiO3ZhciBLPS9eKFwvP3wpKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteXC9dKz98KShcLlteLlwvXSp8KSkoPzpbXC9dKikkLyxaPXt9O2Z1bmN0aW9uIFkoVyl7cmV0dXJuIEsuZXhlYyhXKS5zbGljZSgx''@;'; put 'put ''KX1aLnJlc29sdmU9ZnVuY3Rpb24oKXtmb3IodmFyIFc9IiIscT0hMSxlZT1hcmd1bWVudHMubGVuZ3RoLTE7ZWU+PS0xJiYhcTtlZS0tKXt2YXIgSj1lZT49MD9hcmd1bWVudHNbZWVdOkkuY3dkKCk7aWYoIXAuaXNTdHJpbmcoSikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRv''@;'; put 'put ''IHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MiKTtKJiYoVz1KKyIvIitXLHE9Ii8iPT09SlswXSl9cmV0dXJuKHE/Ii8iOiIiKSsoVz1WKFcuc3BsaXQoIi8iKSwhcSkuam9pbigiLyIpKXx8Ii4ifSxaLm5vcm1hbGl6ZT1mdW5jdGlvbihXKXt2YXIgcT1aLmlzQWJzb2x1dGUoVyksZWU9''@;'; put 'put ''VyYmIi8iPT09V1tXLmxlbmd0aC0xXTtyZXR1cm4hKFc9VihXLnNwbGl0KCIvIiksIXEpLmpvaW4oIi8iKSkmJiFxJiYoVz0iLiIpLFcmJmVlJiYoVys9Ii8iKSwocT8iLyI6IiIpK1d9LFouaXNBYnNvbHV0ZT1mdW5jdGlvbihXKXtyZXR1cm4iLyI9PT1XLmNoYXJBdCgwKX0sWi5qb2luPWZ1''@;'; put 'put ''bmN0aW9uKCl7Zm9yKHZhciBXPSIiLHE9MDtxPGFyZ3VtZW50cy5sZW5ndGg7cSsrKXt2YXIgZWU9YXJndW1lbnRzW3FdO2lmKCFwLmlzU3RyaW5nKGVlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncyIpO2VlJiYoVys9Vz8iLyIr''@;'; put 'put ''ZWU6ZWUpfXJldHVybiBaLm5vcm1hbGl6ZShXKX0sWi5yZWxhdGl2ZT1mdW5jdGlvbihXLHEpe1c9Wi5yZXNvbHZlKFcpLnN1YnN0cigxKSxxPVoucmVzb2x2ZShxKS5zdWJzdHIoMSk7Zm9yKHZhciBlZT13KFcuc3BsaXQoIi8iKSksSj13KHEuc3BsaXQoIi8iKSkscmU9TWF0aC5taW4oZWUu''@;'; put 'put ''bGVuZ3RoLEoubGVuZ3RoKSxpZT1yZSx1ZT0wO3VlPHJlO3VlKyspaWYoZWVbdWVdIT09Slt1ZV0pe2llPXVlO2JyZWFrfXZhciBnZT1bXTtmb3IodWU9aWU7dWU8ZWUubGVuZ3RoO3VlKyspZ2UucHVzaCgiLi4iKTtyZXR1cm4oZ2U9Z2UuY29uY2F0KEouc2xpY2UoaWUpKSkuam9pbigiLyIp''@;'; put 'put ''fSxaLl9tYWtlTG9uZz1mdW5jdGlvbihXKXtyZXR1cm4gV30sWi5kaXJuYW1lPWZ1bmN0aW9uKFcpe3ZhciBxPVkoVyksZWU9cVswXSxKPXFbMV07cmV0dXJuIGVlfHxKPyhKJiYoSj1KLnN1YnN0cigwLEoubGVuZ3RoLTEpKSxlZStKKToiLiJ9LFouYmFzZW5hbWU9ZnVuY3Rpb24oVyxxKXt2''@;'; put 'put ''YXIgZWU9WShXKVsyXTtyZXR1cm4gcSYmZWUuc3Vic3RyKC0xKnEubGVuZ3RoKT09PXEmJihlZT1lZS5zdWJzdHIoMCxlZS5sZW5ndGgtcS5sZW5ndGgpKSxlZX0sWi5leHRuYW1lPWZ1bmN0aW9uKFcpe3JldHVybiBZKFcpWzNdfSxaLmZvcm1hdD1mdW5jdGlvbihXKXtpZighcC5pc09iamVj''@;'; put 'put ''dChXKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXJhbWV0ZXIgJ3BhdGhPYmplY3QnIG11c3QgYmUgYW4gb2JqZWN0LCBub3QgIit0eXBlb2YgVyk7aWYoIXAuaXNTdHJpbmcoVy5yb290fHwiIikpdGhyb3cgbmV3IFR5cGVFcnJvcigiJ3BhdGhPYmplY3Qucm9vdCcgbXVzdCBiZSBhIHN0cmlu''@;'; put 'put ''ZyBvciB1bmRlZmluZWQsIG5vdCAiK3R5cGVvZiBXLnJvb3QpO3JldHVybihXLmRpcj9XLmRpcitaLnNlcDoiIikrKFcuYmFzZXx8IiIpfSxaLnBhcnNlPWZ1bmN0aW9uKFcpe2lmKCFwLmlzU3RyaW5nKFcpKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhcmFtZXRlciAncGF0aFN0cmluZycgbXVz''@;'; put 'put ''dCBiZSBhIHN0cmluZywgbm90ICIrdHlwZW9mIFcpO3ZhciBxPVkoVyk7aWYoIXF8fDQhPT1xLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIHBhdGggJyIrVysiJyIpO3JldHVybiBxWzFdPXFbMV18fCIiLHFbMl09cVsyXXx8IiIscVszXT1xWzNdfHwiIix7cm9vdDpxWzBd''@;'; put 'put ''LGRpcjpxWzBdK3FbMV0uc2xpY2UoMCwtMSksYmFzZTpxWzJdLGV4dDpxWzNdLG5hbWU6cVsyXS5zbGljZSgwLHFbMl0ubGVuZ3RoLXFbM10ubGVuZ3RoKX19LFouc2VwPSIvIixaLmRlbGltaXRlcj0iOiIsY2UuZXhwb3J0cz1fP1I6WixjZS5leHBvcnRzLnBvc2l4PVosY2UuZXhwb3J0cy53''@;'; put 'put ''aW4zMj1SfSw1NjMyOihjZSxYLGIpPT57WC5wYmtkZjI9Yig4NjM4KSxYLnBia2RmMlN5bmM9YigxMjU3KX0sODYzODooY2UsWCxiKT0+e3ZhciBQLE8sST1iKDk1MDkpLkJ1ZmZlcixfPWIoNzM1NykscD1iKDIzNjgpLFY9YigxMjU3KSx3PWIoNzc3NyksRj1iLmcuY3J5cHRvJiZiLmcuY3J5''@;'; put 'put ''cHRvLnN1YnRsZSxSPXtzaGE6IlNIQS0xIiwic2hhLTEiOiJTSEEtMSIsc2hhMToiU0hBLTEiLHNoYTI1NjoiU0hBLTI1NiIsInNoYS0yNTYiOiJTSEEtMjU2IixzaGEzODQ6IlNIQS0zODQiLCJzaGEtMzg0IjoiU0hBLTM4NCIsInNoYS01MTIiOiJTSEEtNTEyIixzaGE1MTI6IlNIQS01MTIi''@;'; put 'put ''fSx6PVtdO2Z1bmN0aW9uIEsoKXtyZXR1cm4gT3x8KE89Yi5nLnByb2Nlc3MmJmIuZy5wcm9jZXNzLm5leHRUaWNrP2IuZy5wcm9jZXNzLm5leHRUaWNrOmIuZy5xdWV1ZU1pY3JvdGFzaz9iLmcucXVldWVNaWNyb3Rhc2s6Yi5nLnNldEltbWVkaWF0ZT9iLmcuc2V0SW1tZWRpYXRlOmIuZy5z''@;'; put 'put ''ZXRUaW1lb3V0KX1mdW5jdGlvbiBaKFcscSxlZSxKLHJlKXtyZXR1cm4gRi5pbXBvcnRLZXkoInJhdyIsVyx7bmFtZToiUEJLREYyIn0sITEsWyJkZXJpdmVCaXRzIl0pLnRoZW4oZnVuY3Rpb24oaWUpe3JldHVybiBGLmRlcml2ZUJpdHMoe25hbWU6IlBCS0RGMiIsc2FsdDpxLGl0ZXJhdGlv''@;'; put 'put ''bnM6ZWUsaGFzaDp7bmFtZTpyZX19LGllLEo8PDMpfSkudGhlbihmdW5jdGlvbihpZSl7cmV0dXJuIEkuZnJvbShpZSl9KX1jZS5leHBvcnRzPWZ1bmN0aW9uKFcscSxlZSxKLHJlLGllKXsiZnVuY3Rpb24iPT10eXBlb2YgcmUmJihpZT1yZSxyZT12b2lkIDApO3ZhciB1ZT1SWyhyZT1yZXx8''@;'; put 'put ''InNoYTEiKS50b0xvd2VyQ2FzZSgpXTtpZih1ZSYmImZ1bmN0aW9uIj09dHlwZW9mIGIuZy5Qcm9taXNlKXtpZihfKGVlLEopLFc9dyhXLHAsIlBhc3N3b3JkIikscT13KHEscCwiU2FsdCIpLCJmdW5jdGlvbiIhPXR5cGVvZiBpZSl0aHJvdyBuZXcgRXJyb3IoIk5vIGNhbGxiYWNrIHByb3Zp''@;'; put 'put ''ZGVkIHRvIHBia2RmMiIpOyFmdW5jdGlvbiBZKFcscSl7Vy50aGVuKGZ1bmN0aW9uKGVlKXtLKCkoZnVuY3Rpb24oKXtxKG51bGwsZWUpfSl9LGZ1bmN0aW9uKGVlKXtLKCkoZnVuY3Rpb24oKXtxKGVlKX0pfSl9KGZ1bmN0aW9uIE4oVyl7aWYoYi5nLnByb2Nlc3MmJiFiLmcucHJvY2Vzcy5i''@;'; put 'put ''cm93c2VyfHwhRnx8IUYuaW1wb3J0S2V5fHwhRi5kZXJpdmVCaXRzKXJldHVybiBQcm9taXNlLnJlc29sdmUoITEpO2lmKHZvaWQgMCE9PXpbV10pcmV0dXJuIHpbV107dmFyIHE9WihQPVB8fEkuYWxsb2MoOCksUCwxMCwxMjgsVykudGhlbihmdW5jdGlvbigpe3JldHVybiEwfSkuY2F0Y2go''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4hMX0pO3JldHVybiB6W1ddPXEscX0odWUpLnRoZW4oZnVuY3Rpb24oZ2Upe3JldHVybiBnZT9aKFcscSxlZSxKLHVlKTpWKFcscSxlZSxKLHJlKX0pLGllKX1lbHNlIEsoKShmdW5jdGlvbigpe3ZhciBnZTt0cnl7Z2U9VihXLHEsZWUsSixyZSl9Y2F0Y2goX2Up''@;'; put 'put ''e3JldHVybiBpZShfZSl9aWUobnVsbCxnZSl9KX19LDIzNjg6KGNlLFgsYik9Pnt2YXIgXyxJPWIoNDE1NSk7Xz1iLmcucHJvY2VzcyYmYi5nLnByb2Nlc3MuYnJvd3Nlcj8idXRmLTgiOmIuZy5wcm9jZXNzJiZiLmcucHJvY2Vzcy52ZXJzaW9uP3BhcnNlSW50KEkudmVyc2lvbi5zcGxpdCgi''@;'; put 'put ''LiIpWzBdLnNsaWNlKDEpLDEwKT49Nj8idXRmLTgiOiJiaW5hcnkiOiJ1dGYtOCIsY2UuZXhwb3J0cz1ffSw3MzU3OmNlPT57dmFyIFg9TWF0aC5wb3coMiwzMCktMTtjZS5leHBvcnRzPWZ1bmN0aW9uKGIsSSl7aWYoIm51bWJlciIhPXR5cGVvZiBiKXRocm93IG5ldyBUeXBlRXJyb3IoIkl0''@;'; put 'put ''ZXJhdGlvbnMgbm90IGEgbnVtYmVyIik7aWYoYjwwKXRocm93IG5ldyBUeXBlRXJyb3IoIkJhZCBpdGVyYXRpb25zIik7aWYoIm51bWJlciIhPXR5cGVvZiBJKXRocm93IG5ldyBUeXBlRXJyb3IoIktleSBsZW5ndGggbm90IGEgbnVtYmVyIik7aWYoSTwwfHxJPlh8fEkhPUkpdGhyb3cgbmV3''@;'; put 'put ''IFR5cGVFcnJvcigiQmFkIGtleSBsZW5ndGgiKX19LDEyNTc6KGNlLFgsYik9Pnt2YXIgST1iKDgwMjgpLF89Yig5Nzg1KSxwPWIoOTA3MiksVj1iKDk1MDkpLkJ1ZmZlcix3PWIoNzM1NyksUD1iKDIzNjgpLEY9Yig3Nzc3KSxSPVYuYWxsb2MoMTI4KSx6PXttZDU6MTYsc2hhMToyMCxzaGEy''@;'; put 'put ''MjQ6Mjgsc2hhMjU2OjMyLHNoYTM4NDo0OCxzaGE1MTI6NjQscm1kMTYwOjIwLHJpcGVtZDE2MDoyMH07ZnVuY3Rpb24gTihaLFksVyl7dmFyIHE9ZnVuY3Rpb24gTyhaKXtyZXR1cm4icm1kMTYwIj09PVp8fCJyaXBlbWQxNjAiPT09Wj9mdW5jdGlvbiBXKHEpe3JldHVybihuZXcgXykudXBk''@;'; put 'put ''YXRlKHEpLmRpZ2VzdCgpfToibWQ1Ij09PVo/STpmdW5jdGlvbiBZKHEpe3JldHVybiBwKFopLnVwZGF0ZShxKS5kaWdlc3QoKX19KFopLGVlPSJzaGE1MTIiPT09Wnx8InNoYTM4NCI9PT1aPzEyODo2NDtZLmxlbmd0aD5lZT9ZPXEoWSk6WS5sZW5ndGg8ZWUmJihZPVYuY29uY2F0KFtZLFJd''@;'; put 'put ''LGVlKSk7Zm9yKHZhciBKPVYuYWxsb2NVbnNhZmUoZWUreltaXSkscmU9Vi5hbGxvY1Vuc2FmZShlZSt6W1pdKSxpZT0wO2llPGVlO2llKyspSltpZV09NTReWVtpZV0scmVbaWVdPTkyXllbaWVdO3ZhciB1ZT1WLmFsbG9jVW5zYWZlKGVlK1crNCk7Si5jb3B5KHVlLDAsMCxlZSksdGhpcy5p''@;'; put 'put ''cGFkMT11ZSx0aGlzLmlwYWQyPUosdGhpcy5vcGFkPXJlLHRoaXMuYWxnPVosdGhpcy5ibG9ja3NpemU9ZWUsdGhpcy5oYXNoPXEsdGhpcy5zaXplPXpbWl19Ti5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKFosWSl7cmV0dXJuIFouY29weShZLHRoaXMuYmxvY2tzaXplKSx0aGlzLmhhc2goWSku''@;'; put 'put ''Y29weSh0aGlzLm9wYWQsdGhpcy5ibG9ja3NpemUpLHRoaXMuaGFzaCh0aGlzLm9wYWQpfSxjZS5leHBvcnRzPWZ1bmN0aW9uIEsoWixZLFcscSxlZSl7dyhXLHEpO3ZhciBKPW5ldyBOKGVlPWVlfHwic2hhMSIsWj1GKFosUCwiUGFzc3dvcmQiKSwoWT1GKFksUCwiU2FsdCIpKS5sZW5ndGgp''@;'; put 'put ''LHJlPVYuYWxsb2NVbnNhZmUocSksaWU9Vi5hbGxvY1Vuc2FmZShZLmxlbmd0aCs0KTtZLmNvcHkoaWUsMCwwLFkubGVuZ3RoKTtmb3IodmFyIHVlPTAsZ2U9eltlZV0sX2U9TWF0aC5jZWlsKHEvZ2UpLFRlPTE7VGU8PV9lO1RlKyspe2llLndyaXRlVUludDMyQkUoVGUsWS5sZW5ndGgpO2Zv''@;'; put 'put ''cih2YXIgTWU9Si5ydW4oaWUsSi5pcGFkMSksWmU9TWUsQj0xO0I8VztCKyspe1plPUoucnVuKFplLEouaXBhZDIpO2Zvcih2YXIgZz0wO2c8Z2U7ZysrKU1lW2ddXj1aZVtnXX1NZS5jb3B5KHJlLHVlKSx1ZSs9Z2V9cmV0dXJuIHJlfX0sNzc3NzooY2UsWCxiKT0+e3ZhciBJPWIoOTUwOSku''@;'; put 'put ''QnVmZmVyO2NlLmV4cG9ydHM9ZnVuY3Rpb24oXyxwLFYpe2lmKEkuaXNCdWZmZXIoXykpcmV0dXJuIF87aWYoInN0cmluZyI9PXR5cGVvZiBfKXJldHVybiBJLmZyb20oXyxwKTtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoXykpcmV0dXJuIEkuZnJvbShfLmJ1ZmZlcik7dGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcihWKyIgbXVzdCBiZSBhIHN0cmluZywgYSBCdWZmZXIsIGEgdHlwZWQgYXJyYXkgb3IgYSBEYXRhVmlldyIpfX0sOTkwODpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPVsiRmxvYXQxNkFycmF5IiwiRmxvYXQzMkFycmF5IiwiRmxvYXQ2NEFycmF5IiwiSW50OEFycmF5IiwiSW50''@;'; put 'put ''MTZBcnJheSIsIkludDMyQXJyYXkiLCJVaW50OEFycmF5IiwiVWludDhDbGFtcGVkQXJyYXkiLCJVaW50MTZBcnJheSIsIlVpbnQzMkFycmF5IiwiQmlnSW50NjRBcnJheSIsIkJpZ1VpbnQ2NEFycmF5Il19LDgyMTI6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0MTU1KTtjZS5l''@;'; put 'put ''eHBvcnRzPXR5cGVvZiBJPiJ1Inx8IUkudmVyc2lvbnx8MD09PUkudmVyc2lvbi5pbmRleE9mKCJ2MC4iKXx8MD09PUkudmVyc2lvbi5pbmRleE9mKCJ2MS4iKSYmMCE9PUkudmVyc2lvbi5pbmRleE9mKCJ2MS44LiIpP3tuZXh0VGljazpmdW5jdGlvbiBfKHAsVix3LFApe2lmKCJmdW5jdGlv''@;'; put 'put ''biIhPXR5cGVvZiBwKXRocm93IG5ldyBUeXBlRXJyb3IoJyJjYWxsYmFjayIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7dmFyIFIseixGPWFyZ3VtZW50cy5sZW5ndGg7c3dpdGNoKEYpe2Nhc2UgMDpjYXNlIDE6cmV0dXJuIEkubmV4dFRpY2socCk7Y2FzZSAyOnJldHVybiBJLm5l''@;'; put 'put ''eHRUaWNrKGZ1bmN0aW9uKCl7cC5jYWxsKG51bGwsVil9KTtjYXNlIDM6cmV0dXJuIEkubmV4dFRpY2soZnVuY3Rpb24oKXtwLmNhbGwobnVsbCxWLHcpfSk7Y2FzZSA0OnJldHVybiBJLm5leHRUaWNrKGZ1bmN0aW9uKCl7cC5jYWxsKG51bGwsVix3LFApfSk7ZGVmYXVsdDpmb3IoUj1uZXcg''@;'; put 'put ''QXJyYXkoRi0xKSx6PTA7ejxSLmxlbmd0aDspUlt6KytdPWFyZ3VtZW50c1t6XTtyZXR1cm4gSS5uZXh0VGljayhmdW5jdGlvbigpe3AuYXBwbHkobnVsbCxSKX0pfX19Okl9LDQxNTU6Y2U9Pnt2YXIgYixJLFg9Y2UuZXhwb3J0cz17fTtmdW5jdGlvbiBfKCl7dGhyb3cgbmV3IEVycm9yKCJz''@;'; put 'put ''ZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gcCgpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gVihZKXtpZihiPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dChZLDApO2lmKChiPT09X3x8''@;'; put 'put ''IWIpJiZzZXRUaW1lb3V0KXJldHVybiBiPXNldFRpbWVvdXQsc2V0VGltZW91dChZLDApO3RyeXtyZXR1cm4gYihZLDApfWNhdGNoe3RyeXtyZXR1cm4gYi5jYWxsKG51bGwsWSwwKX1jYXRjaHtyZXR1cm4gYi5jYWxsKHRoaXMsWSwwKX19fSFmdW5jdGlvbigpe3RyeXtiPSJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6X31jYXRjaHtiPV99dHJ5e0k9ImZ1bmN0aW9uIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6cH1jYXRjaHtJPXB9fSgpO3ZhciBSLFA9W10sRj0hMSx6PS0xO2Z1bmN0aW9uIE4oKXshRnx8IVJ8fChGPSExLFIubGVuZ3Ro''@;'; put 'put ''P1A9Ui5jb25jYXQoUCk6ej0tMSxQLmxlbmd0aCYmTygpKX1mdW5jdGlvbiBPKCl7aWYoIUYpe3ZhciBZPVYoTik7Rj0hMDtmb3IodmFyIFc9UC5sZW5ndGg7Vzspe2ZvcihSPVAsUD1bXTsrK3o8VzspUiYmUlt6XS5ydW4oKTt6PS0xLFc9UC5sZW5ndGh9Uj1udWxsLEY9ITEsZnVuY3Rpb24g''@;'; put 'put ''dyhZKXtpZihJPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQoWSk7aWYoKEk9PT1wfHwhSSkmJmNsZWFyVGltZW91dClyZXR1cm4gST1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KFkpO3RyeXtyZXR1cm4gSShZKX1jYXRjaHt0cnl7cmV0dXJuIEkuY2FsbChudWxsLFkpfWNh''@;'; put 'put ''dGNoe3JldHVybiBJLmNhbGwodGhpcyxZKX19fShZKX19ZnVuY3Rpb24gSyhZLFcpe3RoaXMuZnVuPVksdGhpcy5hcnJheT1XfWZ1bmN0aW9uIFooKXt9WC5uZXh0VGljaz1mdW5jdGlvbihZKXt2YXIgVz1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PjEpZm9yKHZhciBxPTE7cTxhcmd1bWVudHMubGVuZ3RoO3ErKylXW3EtMV09YXJndW1lbnRzW3FdO1AucHVzaChuZXcgSyhZLFcpKSwxPT09UC5sZW5ndGgmJiFGJiZWKE8pfSxLLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSxYLnRp''@;'; put 'put ''dGxlPSJicm93c2VyIixYLmJyb3dzZXI9ITAsWC5lbnY9e30sWC5hcmd2PVtdLFgudmVyc2lvbj0iIixYLnZlcnNpb25zPXt9LFgub249WixYLmFkZExpc3RlbmVyPVosWC5vbmNlPVosWC5vZmY9WixYLnJlbW92ZUxpc3RlbmVyPVosWC5yZW1vdmVBbGxMaXN0ZW5lcnM9WixYLmVtaXQ9WixY''@;'; put 'put ''LnByZXBlbmRMaXN0ZW5lcj1aLFgucHJlcGVuZE9uY2VMaXN0ZW5lcj1aLFgubGlzdGVuZXJzPWZ1bmN0aW9uKFkpe3JldHVybltdfSxYLmJpbmRpbmc9ZnVuY3Rpb24oWSl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSxYLmN3ZD1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiIvIn0sWC5jaGRpcj1mdW5jdGlvbihZKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSxYLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fSw3OTAwOihjZSxYLGIpPT57WC5wdWJsaWNFbmNyeXB0PWIoNjU1OSksWC5wcml2YXRl''@;'; put 'put ''RGVjcnlwdD1iKDYxMzgpLFgucHJpdmF0ZUVuY3J5cHQ9ZnVuY3Rpb24oXyxwKXtyZXR1cm4gWC5wdWJsaWNFbmNyeXB0KF8scCwhMCl9LFgucHVibGljRGVjcnlwdD1mdW5jdGlvbihfLHApe3JldHVybiBYLnByaXZhdGVEZWNyeXB0KF8scCwhMCl9fSw5MTk5OihjZSxYLGIpPT57dmFyIEk9''@;'; put 'put ''YigzNDgyKSxfPWIoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIHAoVil7dmFyIHc9Xy5hbGxvY1Vuc2FmZSg0KTtyZXR1cm4gdy53cml0ZVVJbnQzMkJFKFYsMCksd31jZS5leHBvcnRzPWZ1bmN0aW9uKFYsdyl7Zm9yKHZhciBSLFA9Xy5hbGxvYygwKSxGPTA7UC5sZW5ndGg8dzspUj1wKEYrKyks''@;'; put 'put ''UD1fLmNvbmNhdChbUCxJKCJzaGExIikudXBkYXRlKFYpLnVwZGF0ZShSKS5kaWdlc3QoKV0pO3JldHVybiBQLnNsaWNlKDAsdyl9fSwyMTQ0OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEksXyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHAoQixnKXtpZighQil0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''Z3x8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBWKEIsZyl7Qi5zdXBlcl89Zzt2YXIgeT1mdW5jdGlvbigpe307eS5wcm90b3R5cGU9Zy5wcm90b3R5cGUsQi5wcm90b3R5cGU9bmV3IHksQi5wcm90b3R5cGUuY29uc3RydWN0b3I9Qn1mdW5jdGlvbiB3KEIsZyx5KXtpZih3LmlzQk4o''@;'; put 'put ''QikpcmV0dXJuIEI7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PUImJigoImxlIj09PWd8fCJiZSI9PT1nKSYmKHk9ZyxnPTEwKSx0aGlzLl9pbml0KEJ8fDAsZ3x8MTAseXx8ImJlIikpfXZhciBQOyJvYmplY3QiPT10''@;'; put 'put ''eXBlb2YgST9JLmV4cG9ydHM9dzpfLkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e1A9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOmIoNzEwOCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKEIsZyl7dmFyIHk9Qi5jaGFyQ29k''@;'; put 'put ''ZUF0KGcpO3JldHVybiB5Pj02NSYmeTw9NzA/eS01NTp5Pj05NyYmeTw9MTAyP3ktODc6eS00OCYxNX1mdW5jdGlvbiBSKEIsZyx5KXt2YXIgeD1GKEIseSk7cmV0dXJuIHktMT49ZyYmKHh8PUYoQix5LTEpPDw0KSx4fWZ1bmN0aW9uIHooQixnLHkseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1p''@;'; put 'put ''bihCLmxlbmd0aCx5KSxIPWc7SDxUO0grKyl7dmFyIGo9Qi5jaGFyQ29kZUF0KEgpLTQ4O0MqPXgsQys9aj49NDk/ai00OSsxMDpqPj0xNz9qLTE3KzEwOmp9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKGcpe3JldHVybiBnIGluc3RhbmNlb2Ygd3x8bnVsbCE9PWcmJiJvYmplY3QiPT10eXBl''@;'; put 'put ''b2YgZyYmZy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkoZy53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKGcseSl7cmV0dXJuIGcuY21wKHkpPjA/Zzp5fSx3Lm1pbj1mdW5jdGlvbihnLHkpe3JldHVybiBnLmNtcCh5KTwwP2c6eX0sdy5wcm90b3R5cGUu''@;'; put 'put ''X2luaXQ9ZnVuY3Rpb24oZyx5LHgpe2lmKCJudW1iZXIiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihnLHkseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0QXJyYXkoZyx5LHgpOyJoZXgiPT09eSYmKHk9MTYpLHAoeT09PSgwfHkpJiZ5Pj0yJiZ5''@;'; put 'put ''PD0zNik7dmFyIEM9MDsiLSI9PT0oZz1nLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8Zy5sZW5ndGgmJigxNj09PXk/dGhpcy5fcGFyc2VIZXgoZyxDLHgpOih0aGlzLl9wYXJzZUJhc2UoZyx5LEMpLCJsZSI9PT14JiZ0aGlzLl9p''@;'; put 'put ''bml0QXJyYXkodGhpcy50b0FycmF5KCkseSx4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihnLHkseCl7ZzwwJiYodGhpcy5uZWdhdGl2ZT0xLGc9LWcpLGc8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmddLHRoaXMubGVuZ3RoPTEpOmc8NDUwMzU5OTYyNzM3''@;'; put 'put ''MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToocChnPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5f''@;'; put 'put ''aW5pdEFycmF5KHRoaXMudG9BcnJheSgpLHkseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oZyx5LHgpe2lmKHAoIm51bWJlciI9PXR5cGVvZiBnLmxlbmd0aCksZy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0''@;'; put 'put ''aD1NYXRoLmNlaWwoZy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxILGo9MDtpZigiYmUiPT09eClmb3IoQz1nLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53''@;'; put 'put ''b3Jkc1tUXXw9KEg9Z1tDXXxnW0MtMV08PDh8Z1tDLTJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8Zy5sZW5ndGg7Qys9Myl0aGlzLndvcmRz''@;'; put 'put ''W1RdfD0oSD1nW0NdfGdbQysxXTw8OHxnW0MrMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihnLHkseCl7''@;'; put 'put ''dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChnLmxlbmd0aC15KS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9Zy5sZW5ndGgtMTtDPj15''@;'; put 'put ''O0MtPTIpaj1SKGcseSxDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0oZy5sZW5ndGgteSklMj09MD95KzE6eTtDPGcubGVuZ3RoO0MrPTIpaj1SKGcseSxDKTw8VCx0aGlzLndvcmRz''@;'; put 'put ''W0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGcseSx4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEw''@;'; put 'put ''ODg2MztUKj15KUMrKztDLS0sVD1UL3l8MDtmb3IodmFyIEg9Zy5sZW5ndGgteCxqPUglQyxFPU1hdGgubWluKEgsSC1qKSt4LG09MCxBPXg7QTxFO0ErPUMpbT16KGcsQSxBK0MseSksdGhpcy5pbXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlz''@;'; put 'put ''Ll9pYWRkbihtKTtpZigwIT09ail7dmFyIGFlPTE7Zm9yKG09eihnLEEsZy5sZW5ndGgseSksQT0wO0E8ajtBKyspYWUqPXk7dGhpcy5pbXVsbihhZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5jb3B5PWZ1bmN0aW9uKGcpe2cud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoO3krKylnLndvcmRzW3ldPXRoaXMud29yZHNbeV07Zy5sZW5ndGg9dGhpcy5sZW5ndGgsZy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGcucmVkPXRoaXMu''@;'; put 'put ''cmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBnPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkoZyksZ30sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGc7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhp''@;'; put 'put ''c30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09''@;'; put 'put ''PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIs''@;'; put 'put ''IjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxPPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0''@;'; put 'put ''NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2''@;'; put 'put ''NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gWShCLGcseSl7eS5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkIubmVn''@;'; put 'put ''YXRpdmU7dmFyIHg9Qi5sZW5ndGgrZy5sZW5ndGh8MDt5Lmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHxCLndvcmRzWzBdLFQ9MHxnLndvcmRzWzBdLEg9QypULEU9SC82NzEwODg2NHwwO3kud29yZHNbMF09NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2''@;'; put 'put ''LGFlPTY3MTA4ODYzJkUsbmU9TWF0aC5taW4obSxnLmxlbmd0aC0xKSxzZT1NYXRoLm1heCgwLG0tQi5sZW5ndGgrMSk7c2U8PW5lO3NlKyspQSs9KEg9KEM9MHxCLndvcmRzW20tc2V8MF0pKihUPTB8Zy53b3Jkc1tzZV0pK2FlKS82NzEwODg2NHwwLGFlPTY3MTA4ODYzJkg7eS53b3Jkc1tt''@;'; put 'put ''XT0wfGFlLEU9MHxBfXJldHVybiAwIT09RT95LndvcmRzW21dPTB8RTp5Lmxlbmd0aC0tLHkuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihnLHkpe3ZhciB4O2lmKHk9MHx5fHwxLDE2PT09KGc9Z3x8MTApfHwiaGV4Ij09PWcpe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9''@;'; put 'put ''MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9dGhpcy53b3Jkc1tIXSxFPSgxNjc3NzIxNSYoajw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9aj4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LEgtLSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6''@;'; put 'put ''RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGgleSE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKGc9PT0oMHxnKSYmZz49MiYmZzw9MzYpe3ZhciBtPU9bZ10sQT1LW2ddO3g9IiI7dmFyIGFlPXRoaXMuY2xvbmUo''@;'; put 'put ''KTtmb3IoYWUubmVnYXRpdmU9MDshYWUuaXNaZXJvKCk7KXt2YXIgbmU9YWUubW9kbihBKS50b1N0cmluZyhnKTt4PShhZT1hZS5pZGl2bihBKSkuaXNaZXJvKCk/bmUreDpOW20tbmUubGVuZ3RoXStuZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGgleSE9MDspeD0i''@;'; put 'put ''MCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fXAoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgZz10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Zys9Njcx''@;'; put 'put ''MDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2crPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZwKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSww''@;'; put 'put ''IT09dGhpcy5uZWdhdGl2ZT8tZzpnfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHAodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAsZyx5KX0sdy5w''@;'; put 'put ''cm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGcseSl9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGcseSx4KXt2YXIgQz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7cChDPD1ULCJieXRlIGFy''@;'; put 'put ''cmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIikscChUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxtLEg9ImxlIj09PXksaj1uZXcgZyhUKSxBPXRoaXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5k''@;'; put 'put ''bG4oMjU1KSxBLml1c2hybig4KSxqW21dPUU7Zm9yKDttPFQ7bSsrKWpbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKWpbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291''@;'; put 'put ''bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oZyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoZyl9OmZ1bmN0aW9uKGcpe3ZhciB5PWcseD0wO3JldHVybiB5Pj00MDk2JiYoeCs9MTMseT4+Pj0xMykseT49NjQmJih4Kz03LHk+Pj49NykseT49OCYmKHgrPTQseT4+Pj00KSx5Pj0yJiYoeCs9Mix5''@;'; put 'put ''Pj4+PTIpLHgreX0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGcpe2lmKDA9PT1nKXJldHVybiAyNjt2YXIgeT1nLHg9MDtyZXR1cm4hKDgxOTEmeSkmJih4Kz0xMyx5Pj4+PTEzKSwhKDEyNyZ5KSYmKHgrPTcseT4+Pj03KSwhKDE1JnkpJiYoeCs9NCx5Pj4+PTQpLCEoMyZ5KSYm''@;'; put 'put ''KHgrPTIseT4+Pj0yKSwhKDEmeSkmJngrKyx4fSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKSt5fSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5j''@;'; put 'put ''dGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBnPTAseT0wO3k8dGhpcy5sZW5ndGg7eSsrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW3ldKTtpZihnKz14LDI2IT09eClicmVha31yZXR1cm4gZ30sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGcpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVu''@;'; put 'put ''Y3Rpb24oZyl7cmV0dXJuIHRoaXMudGVzdG4oZy0xKT90aGlzLm5vdG4oZykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0''@;'; put 'put ''aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8Zy5sZW5ndGg7KXRoaXMud29yZHNbdGhp''@;'; put 'put ''cy5sZW5ndGgrK109MDtmb3IodmFyIHk9MDt5PGcubGVuZ3RoO3krKyl0aGlzLndvcmRzW3ldPXRoaXMud29yZHNbeV18Zy53b3Jkc1t5XTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUp''@;'; put 'put ''KSx0aGlzLml1b3IoZyl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGcpOmcuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5n''@;'; put 'put ''dGg/dGhpcy5jbG9uZSgpLml1b3IoZyk6Zy5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGcpe3ZhciB5O3k9dGhpcy5sZW5ndGg+Zy5sZW5ndGg/Zzp0aGlzO2Zvcih2YXIgeD0wO3g8eS5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4''@;'; put 'put ''XSZnLndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0aD15Lmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1YW5kKGcpfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oZyl7''@;'; put 'put ''cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGcpOmcuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoZyk6Zy5jbG9uZSgpLml1YW5k''@;'; put 'put ''KHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihnKXt2YXIgeSx4O3RoaXMubGVuZ3RoPmcubGVuZ3RoPyh5PXRoaXMseD1nKTooeT1nLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT15LndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9''@;'; put 'put ''PXkpZm9yKDtDPHkubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXkud29yZHNbQ107cmV0dXJuIHRoaXMubGVuZ3RoPXkubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXV4''@;'; put 'put ''b3IoZyl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZyk6Zy5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3Ro''@;'; put 'put ''aXMuY2xvbmUoKS5pdXhvcihnKTpnLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT0wfE1hdGguY2VpbChnLzI2KSx4PWclMjY7dGhpcy5fZXhwYW5kKHkpLHg+MCYmeS0tO2Zvcih2YXIg''@;'; put 'put ''Qz0wO0M8eTtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tDXTtyZXR1cm4geD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNs''@;'; put 'put ''b25lKCkuaW5vdG4oZyl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZyx5KXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHg9Zy8yNnwwLEM9ZyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT15P3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRz''@;'; put 'put ''W3hdJn4oMTw8QyksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcpe3ZhciB5LHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx5PXRoaXMuaXN1YihnKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25v''@;'; put 'put ''cm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiBnLm5lZ2F0aXZlPTAseT10aGlzLmlzdWIoZyksZy5uZWdhdGl2ZT0xLHkuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KHg9dGhpcyxDPWcpOih4PWcsQz10aGlzKTtmb3IodmFyIFQ9''@;'; put 'put ''MCxIPTA7SDxDLmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoeT0oMHx4LndvcmRzW0hdKSsoMHxDLndvcmRzW0hdKStUKSxUPXk+Pj4yNjtmb3IoOzAhPT1UJiZIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJih5PSgwfHgud29yZHNbSF0pK1QpLFQ9eT4+''@;'; put 'put ''PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1UKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7SDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT14LndvcmRzW0hdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9''@;'; put 'put ''ZnVuY3Rpb24oZyl7dmFyIHk7cmV0dXJuIDAhPT1nLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZy5uZWdhdGl2ZT0wLHk9dGhpcy5zdWIoZyksZy5uZWdhdGl2ZV49MSx5KTowPT09Zy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCx5PWcuc3ViKHRo''@;'; put 'put ''aXMpLHRoaXMubmVnYXRpdmU9MSx5KTp0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChnKTpnLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnKXtpZigwIT09Zy5uZWdhdGl2ZSl7Zy5uZWdhdGl2ZT0wO3ZhciB5PXRoaXMuaWFkZChn''@;'; put 'put ''KTtyZXR1cm4gZy5uZWdhdGl2ZT0xLHkuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIEMsVCx4PXRoaXMuY21wKGcpO2lmKDA9PT14KXJldHVybiB0''@;'; put 'put ''aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt4PjA/KEM9dGhpcyxUPWcpOihDPWcsVD10aGlzKTtmb3IodmFyIEg9MCxqPTA7ajxULmxlbmd0aDtqKyspSD0oeT0oMHxDLndvcmRzW2pdKS0oMHxULndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tq''@;'; put 'put ''XT02NzEwODg2MyZ5O2Zvcig7MCE9PUgmJmo8Qy5sZW5ndGg7aisrKUg9KHk9KDB8Qy53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmeTtpZigwPT09SCYmajxDLmxlbmd0aCYmQyE9PXRoaXMpZm9yKDtqPEMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPUMud29yZHNb''@;'; put 'put ''al07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGopLEMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoZyl9O3ZhciBXPWZ1bmN0aW9uKGcseSx4''@;'; put 'put ''KXt2YXIgRSxtLEEsQz1nLndvcmRzLFQ9eS53b3JkcyxIPXgud29yZHMsaj0wLGFlPTB8Q1swXSxuZT04MTkxJmFlLHNlPWFlPj4+MTMsQ2U9MHxDWzFdLFVlPTgxOTEmQ2UsSmU9Q2U+Pj4xMyxpdD0wfENbMl0seGU9ODE5MSZpdCx5ZT1pdD4+PjEzLEtlPTB8Q1szXSxqZT04MTkxJktlLGtl''@;'; put 'put ''PUtlPj4+MTMsSGU9MHxDWzRdLExlPTgxOTEmSGUsUmU9SGU+Pj4xMyxWZT0wfENbNV0sQWU9ODE5MSZWZSxEZT1WZT4+PjEzLF90PTB8Q1s2XSxydD04MTkxJl90LFFlPV90Pj4+MTMsc249MHxDWzddLHZ0PTgxOTEmc24sU3Q9c24+Pj4xMyxlbj0wfENbOF0sdXQ9ODE5MSZlbixYZT1lbj4+''@;'; put 'put ''PjEzLHR0PTB8Q1s5XSxJZT04MTkxJnR0LGF0PXR0Pj4+MTMsdW49MHxUWzBdLEl0PTgxOTEmdW4sUnQ9dW4+Pj4xMyxyaT0wfFRbMV0sYW49ODE5MSZyaSxsbj1yaT4+PjEzLG5pPTB8VFsyXSxobj04MTkxJm5pLGh0PW5pPj4+MTMsUnI9MHxUWzNdLEJ0PTgxOTEmUnIsQXQ9UnI+Pj4xMyxG''@;'; put 'put ''bj0wfFRbNF0sc3Q9ODE5MSZGbixadD1Gbj4+PjEzLFFyPTB8VFs1XSxZZT04MTkxJlFyLFR0PVFyPj4+MTMscnI9MHxUWzZdLGZ0PTgxOTEmcnIsTXQ9cnI+Pj4xMyxabj0wfFRbN10sbm49ODE5MSZabixXdD1abj4+PjEzLGRpPTB8VFs4XSxkbj04MTkxJmRpLG1uPWRpPj4+MTMscGk9MHxU''@;'; put 'put ''WzldLGZuPTgxOTEmcGksdG49cGk+Pj4xMzt4Lm5lZ2F0aXZlPWcubmVnYXRpdmVeeS5uZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2YXIgY2E9KGorKEU9TWF0aC5pbXVsKG5lLEl0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChuZSxSdCkpK01hdGguaW11bChzZSxJdCl8MCkpPDwxMyl8MDtq''@;'; put 'put ''PSgoQT1NYXRoLmltdWwoc2UsUnQpKSsobT4+PjEzKXwwKSsoY2E+Pj4yNil8MCxjYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoVWUsSXQpLG09KG09TWF0aC5pbXVsKFVlLFJ0KSkrTWF0aC5pbXVsKEplLEl0KXwwLEE9TWF0aC5pbXVsKEplLFJ0KTt2YXIgX2k9KGorKEU9RStNYXRoLmltdWwo''@;'; put 'put ''bmUsYW4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxsbil8MCkrTWF0aC5pbXVsKHNlLGFuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGxuKXwwKSsobT4+PjEzKXwwKSsoX2k+Pj4yNil8MCxfaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeGUsSXQpLG09KG09''@;'; put 'put ''TWF0aC5pbXVsKHhlLFJ0KSkrTWF0aC5pbXVsKHllLEl0KXwwLEE9TWF0aC5pbXVsKHllLFJ0KSxFPUUrTWF0aC5pbXVsKFVlLGFuKXwwLG09KG09bStNYXRoLmltdWwoVWUsbG4pfDApK01hdGguaW11bChKZSxhbil8MCxBPUErTWF0aC5pbXVsKEplLGxuKXwwO3ZhciB2cj0oaisoRT1FK01h''@;'; put 'put ''dGguaW11bChuZSxobil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGh0KXwwKStNYXRoLmltdWwoc2UsaG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsaHQpfDApKyhtPj4+MTMpfDApKyh2cj4+PjI2KXwwLHZyJj02NzEwODg2MyxFPU1hdGguaW11bChqZSxJ''@;'; put 'put ''dCksbT0obT1NYXRoLmltdWwoamUsUnQpKStNYXRoLmltdWwoa2UsSXQpfDAsQT1NYXRoLmltdWwoa2UsUnQpLEU9RStNYXRoLmltdWwoeGUsYW4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxsbil8MCkrTWF0aC5pbXVsKHllLGFuKXwwLEE9QStNYXRoLmltdWwoeWUsbG4pfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bChVZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGh0KXwwKStNYXRoLmltdWwoSmUsaG4pfDAsQT1BK01hdGguaW11bChKZSxodCl8MDt2YXIgWGk9KGorKEU9RStNYXRoLmltdWwobmUsQnQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxBdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KHNlLEJ0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLEF0KXwwKSsobT4+PjEzKXwwKSsoWGk+Pj4yNil8MCxYaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTGUsSXQpLG09KG09TWF0aC5pbXVsKExlLFJ0KSkrTWF0aC5pbXVsKFJlLEl0KXwwLEE9TWF0aC5pbXVsKFJlLFJ0KSxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKGplLGFuKXwwLG09KG09bStNYXRoLmltdWwoamUsbG4pfDApK01hdGguaW11bChrZSxhbil8MCxBPUErTWF0aC5pbXVsKGtlLGxuKXwwLEU9RStNYXRoLmltdWwoeGUsaG4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxodCl8MCkrTWF0aC5pbXVsKHllLGhuKXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoeWUsaHQpfDAsRT1FK01hdGguaW11bChVZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUsQnQpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MDt2YXIgUWk9KGorKEU9RStNYXRoLmltdWwobmUsc3QpfDApfDApKygoODE5MSYobT0obT1tK01h''@;'; put 'put ''dGguaW11bChuZSxadCl8MCkrTWF0aC5pbXVsKHNlLHN0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFp0KXwwKSsobT4+PjEzKXwwKSsoUWk+Pj4yNil8MCxRaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoQWUsSXQpLG09KG09TWF0aC5pbXVsKEFlLFJ0KSkrTWF0aC5pbXVsKERl''@;'; put 'put ''LEl0KXwwLEE9TWF0aC5pbXVsKERlLFJ0KSxFPUUrTWF0aC5pbXVsKExlLGFuKXwwLG09KG09bStNYXRoLmltdWwoTGUsbG4pfDApK01hdGguaW11bChSZSxhbil8MCxBPUErTWF0aC5pbXVsKFJlLGxuKXwwLEU9RStNYXRoLmltdWwoamUsaG4pfDAsbT0obT1tK01hdGguaW11bChqZSxodCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKGtlLGhuKXwwLEE9QStNYXRoLmltdWwoa2UsaHQpfDAsRT1FK01hdGguaW11bCh4ZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLEF0KXwwKStNYXRoLmltdWwoeWUsQnQpfDAsQT1BK01hdGguaW11bCh5ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHN0KXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwoVWUsWnQpfDApK01hdGguaW11bChKZSxzdCl8MCxBPUErTWF0aC5pbXVsKEplLFp0KXwwO3ZhciBWaT0oaisoRT1FK01hdGguaW11bChuZSxZZSl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLFR0KXwwKStNYXRoLmltdWwoc2UsWWUpfDApKTw8MTMpfDA7''@;'; put 'put ''aj0oKEE9QStNYXRoLmltdWwoc2UsVHQpfDApKyhtPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2MyxFPU1hdGguaW11bChydCxJdCksbT0obT1NYXRoLmltdWwocnQsUnQpKStNYXRoLmltdWwoUWUsSXQpfDAsQT1NYXRoLmltdWwoUWUsUnQpLEU9RStNYXRoLmltdWwoQWUsYW4p''@;'; put 'put ''fDAsbT0obT1tK01hdGguaW11bChBZSxsbil8MCkrTWF0aC5pbXVsKERlLGFuKXwwLEE9QStNYXRoLmltdWwoRGUsbG4pfDAsRT1FK01hdGguaW11bChMZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKExlLGh0KXwwKStNYXRoLmltdWwoUmUsaG4pfDAsQT1BK01hdGguaW11bChSZSxodCl8MCxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKGplLEJ0KXwwLG09KG09bStNYXRoLmltdWwoamUsQXQpfDApK01hdGguaW11bChrZSxCdCl8MCxBPUErTWF0aC5pbXVsKGtlLEF0KXwwLEU9RStNYXRoLmltdWwoeGUsc3QpfDAsbT0obT1tK01hdGguaW11bCh4ZSxadCl8MCkrTWF0aC5pbXVsKHllLHN0KXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoeWUsWnQpfDAsRT1FK01hdGguaW11bChVZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoSmUsWWUpfDAsQT1BK01hdGguaW11bChKZSxUdCl8MDt2YXIgZWk9KGorKEU9RStNYXRoLmltdWwobmUsZnQpfDApfDApKygoODE5MSYobT0obT1tK01h''@;'; put 'put ''dGguaW11bChuZSxNdCl8MCkrTWF0aC5pbXVsKHNlLGZ0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLE10KXwwKSsobT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwodnQsSXQpLG09KG09TWF0aC5pbXVsKHZ0LFJ0KSkrTWF0aC5pbXVsKFN0''@;'; put 'put ''LEl0KXwwLEE9TWF0aC5pbXVsKFN0LFJ0KSxFPUUrTWF0aC5pbXVsKHJ0LGFuKXwwLG09KG09bStNYXRoLmltdWwocnQsbG4pfDApK01hdGguaW11bChRZSxhbil8MCxBPUErTWF0aC5pbXVsKFFlLGxuKXwwLEU9RStNYXRoLmltdWwoQWUsaG4pfDAsbT0obT1tK01hdGguaW11bChBZSxodCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKERlLGhuKXwwLEE9QStNYXRoLmltdWwoRGUsaHQpfDAsRT1FK01hdGguaW11bChMZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKExlLEF0KXwwKStNYXRoLmltdWwoUmUsQnQpfDAsQT1BK01hdGguaW11bChSZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGplLHN0KXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwoamUsWnQpfDApK01hdGguaW11bChrZSxzdCl8MCxBPUErTWF0aC5pbXVsKGtlLFp0KXwwLEU9RStNYXRoLmltdWwoeGUsWWUpfDAsbT0obT1tK01hdGguaW11bCh4ZSxUdCl8MCkrTWF0aC5pbXVsKHllLFllKXwwLEE9QStNYXRoLmltdWwoeWUsVHQpfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bChVZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLE10KXwwKStNYXRoLmltdWwoSmUsZnQpfDAsQT1BK01hdGguaW11bChKZSxNdCl8MDt2YXIgdWE9KGorKEU9RStNYXRoLmltdWwobmUsbm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxXdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KHNlLG5uKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFd0KXwwKSsobT4+PjEzKXwwKSsodWE+Pj4yNil8MCx1YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwodXQsSXQpLG09KG09TWF0aC5pbXVsKHV0LFJ0KSkrTWF0aC5pbXVsKFhlLEl0KXwwLEE9TWF0aC5pbXVsKFhlLFJ0KSxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKHZ0LGFuKXwwLG09KG09bStNYXRoLmltdWwodnQsbG4pfDApK01hdGguaW11bChTdCxhbil8MCxBPUErTWF0aC5pbXVsKFN0LGxuKXwwLEU9RStNYXRoLmltdWwocnQsaG4pfDAsbT0obT1tK01hdGguaW11bChydCxodCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoUWUsaHQpfDAsRT1FK01hdGguaW11bChBZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKEFlLEF0KXwwKStNYXRoLmltdWwoRGUsQnQpfDAsQT1BK01hdGguaW11bChEZSxBdCl8MCxFPUUrTWF0aC5pbXVsKExlLHN0KXwwLG09KG09bStNYXRoLmltdWwoTGUsWnQpfDApK01hdGgu''@;'; put 'put ''aW11bChSZSxzdCl8MCxBPUErTWF0aC5pbXVsKFJlLFp0KXwwLEU9RStNYXRoLmltdWwoamUsWWUpfDAsbT0obT1tK01hdGguaW11bChqZSxUdCl8MCkrTWF0aC5pbXVsKGtlLFllKXwwLEE9QStNYXRoLmltdWwoa2UsVHQpfDAsRT1FK01hdGguaW11bCh4ZSxmdCl8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKHhlLE10KXwwKStNYXRoLmltdWwoeWUsZnQpfDAsQT1BK01hdGguaW11bCh5ZSxNdCl8MCxFPUUrTWF0aC5pbXVsKFVlLG5uKXwwLG09KG09bStNYXRoLmltdWwoVWUsV3QpfDApK01hdGguaW11bChKZSxubil8MCxBPUErTWF0aC5pbXVsKEplLFd0KXwwO3ZhciBSaT0oaisoRT1FK01h''@;'; put 'put ''dGguaW11bChuZSxkbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLG1uKXwwKStNYXRoLmltdWwoc2UsZG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsbW4pfDApKyhtPj4+MTMpfDApKyhSaT4+PjI2KXwwLFJpJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxJ''@;'; put 'put ''dCksbT0obT1NYXRoLmltdWwoSWUsUnQpKStNYXRoLmltdWwoYXQsSXQpfDAsQT1NYXRoLmltdWwoYXQsUnQpLEU9RStNYXRoLmltdWwodXQsYW4pfDAsbT0obT1tK01hdGguaW11bCh1dCxsbil8MCkrTWF0aC5pbXVsKFhlLGFuKXwwLEE9QStNYXRoLmltdWwoWGUsbG4pfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bCh2dCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LGh0KXwwKStNYXRoLmltdWwoU3QsaG4pfDAsQT1BK01hdGguaW11bChTdCxodCl8MCxFPUUrTWF0aC5pbXVsKHJ0LEJ0KXwwLG09KG09bStNYXRoLmltdWwocnQsQXQpfDApK01hdGguaW11bChRZSxCdCl8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KFFlLEF0KXwwLEU9RStNYXRoLmltdWwoQWUsc3QpfDAsbT0obT1tK01hdGguaW11bChBZSxadCl8MCkrTWF0aC5pbXVsKERlLHN0KXwwLEE9QStNYXRoLmltdWwoRGUsWnQpfDAsRT1FK01hdGguaW11bChMZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKExlLFR0KXwwKStNYXRoLmltdWwoUmUs''@;'; put 'put ''WWUpfDAsQT1BK01hdGguaW11bChSZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGplLGZ0KXwwLG09KG09bStNYXRoLmltdWwoamUsTXQpfDApK01hdGguaW11bChrZSxmdCl8MCxBPUErTWF0aC5pbXVsKGtlLE10KXwwLEU9RStNYXRoLmltdWwoeGUsbm4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxX''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKHllLG5uKXwwLEE9QStNYXRoLmltdWwoeWUsV3QpfDAsRT1FK01hdGguaW11bChVZSxkbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLG1uKXwwKStNYXRoLmltdWwoSmUsZG4pfDAsQT1BK01hdGguaW11bChKZSxtbil8MDt2YXIgRGE9KGorKEU9RStNYXRoLmltdWwo''@;'; put 'put ''bmUsZm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSx0bil8MCkrTWF0aC5pbXVsKHNlLGZuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHRuKXwwKSsobT4+PjEzKXwwKSsoRGE+Pj4yNil8MCxEYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsYW4pLG09KG09''@;'; put 'put ''TWF0aC5pbXVsKEllLGxuKSkrTWF0aC5pbXVsKGF0LGFuKXwwLEE9TWF0aC5pbXVsKGF0LGxuKSxFPUUrTWF0aC5pbXVsKHV0LGhuKXwwLG09KG09bStNYXRoLmltdWwodXQsaHQpfDApK01hdGguaW11bChYZSxobil8MCxBPUErTWF0aC5pbXVsKFhlLGh0KXwwLEU9RStNYXRoLmltdWwodnQs''@;'; put 'put ''QnQpfDAsbT0obT1tK01hdGguaW11bCh2dCxBdCl8MCkrTWF0aC5pbXVsKFN0LEJ0KXwwLEE9QStNYXRoLmltdWwoU3QsQXQpfDAsRT1FK01hdGguaW11bChydCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LFp0KXwwKStNYXRoLmltdWwoUWUsc3QpfDAsQT1BK01hdGguaW11bChRZSxadCl8''@;'; put 'put ''MCxFPUUrTWF0aC5pbXVsKEFlLFllKXwwLG09KG09bStNYXRoLmltdWwoQWUsVHQpfDApK01hdGguaW11bChEZSxZZSl8MCxBPUErTWF0aC5pbXVsKERlLFR0KXwwLEU9RStNYXRoLmltdWwoTGUsZnQpfDAsbT0obT1tK01hdGguaW11bChMZSxNdCl8MCkrTWF0aC5pbXVsKFJlLGZ0KXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoUmUsTXQpfDAsRT1FK01hdGguaW11bChqZSxubil8MCxtPShtPW0rTWF0aC5pbXVsKGplLFd0KXwwKStNYXRoLmltdWwoa2Usbm4pfDAsQT1BK01hdGguaW11bChrZSxXdCl8MCxFPUUrTWF0aC5pbXVsKHhlLGRuKXwwLG09KG09bStNYXRoLmltdWwoeGUsbW4pfDApK01h''@;'; put 'put ''dGguaW11bCh5ZSxkbil8MCxBPUErTWF0aC5pbXVsKHllLG1uKXwwO3ZhciBoaT0oaisoRT1FK01hdGguaW11bChVZSxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLHRuKXwwKStNYXRoLmltdWwoSmUsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSmUsdG4p''@;'; put 'put ''fDApKyhtPj4+MTMpfDApKyhoaT4+PjI2KXwwLGhpJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxobiksbT0obT1NYXRoLmltdWwoSWUsaHQpKStNYXRoLmltdWwoYXQsaG4pfDAsQT1NYXRoLmltdWwoYXQsaHQpLEU9RStNYXRoLmltdWwodXQsQnQpfDAsbT0obT1tK01hdGguaW11bCh1dCxB''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKFhlLEJ0KXwwLEE9QStNYXRoLmltdWwoWGUsQXQpfDAsRT1FK01hdGguaW11bCh2dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LFp0KXwwKStNYXRoLmltdWwoU3Qsc3QpfDAsQT1BK01hdGguaW11bChTdCxadCl8MCxFPUUrTWF0aC5pbXVsKHJ0LFllKXwwLG09''@;'; put 'put ''KG09bStNYXRoLmltdWwocnQsVHQpfDApK01hdGguaW11bChRZSxZZSl8MCxBPUErTWF0aC5pbXVsKFFlLFR0KXwwLEU9RStNYXRoLmltdWwoQWUsZnQpfDAsbT0obT1tK01hdGguaW11bChBZSxNdCl8MCkrTWF0aC5pbXVsKERlLGZ0KXwwLEE9QStNYXRoLmltdWwoRGUsTXQpfDAsRT1FK01h''@;'; put 'put ''dGguaW11bChMZSxubil8MCxtPShtPW0rTWF0aC5pbXVsKExlLFd0KXwwKStNYXRoLmltdWwoUmUsbm4pfDAsQT1BK01hdGguaW11bChSZSxXdCl8MCxFPUUrTWF0aC5pbXVsKGplLGRuKXwwLG09KG09bStNYXRoLmltdWwoamUsbW4pfDApK01hdGguaW11bChrZSxkbil8MCxBPUErTWF0aC5p''@;'; put 'put ''bXVsKGtlLG1uKXwwO3ZhciBxaT0oaisoRT1FK01hdGguaW11bCh4ZSxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHhlLHRuKXwwKStNYXRoLmltdWwoeWUsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoeWUsdG4pfDApKyhtPj4+MTMpfDApKyhxaT4+PjI2KXww''@;'; put 'put ''LHFpJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxCdCksbT0obT1NYXRoLmltdWwoSWUsQXQpKStNYXRoLmltdWwoYXQsQnQpfDAsQT1NYXRoLmltdWwoYXQsQXQpLEU9RStNYXRoLmltdWwodXQsc3QpfDAsbT0obT1tK01hdGguaW11bCh1dCxadCl8MCkrTWF0aC5pbXVsKFhlLHN0KXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoWGUsWnQpfDAsRT1FK01hdGguaW11bCh2dCxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LFR0KXwwKStNYXRoLmltdWwoU3QsWWUpfDAsQT1BK01hdGguaW11bChTdCxUdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LGZ0KXwwLG09KG09bStNYXRoLmltdWwocnQsTXQpfDApK01h''@;'; put 'put ''dGguaW11bChRZSxmdCl8MCxBPUErTWF0aC5pbXVsKFFlLE10KXwwLEU9RStNYXRoLmltdWwoQWUsbm4pfDAsbT0obT1tK01hdGguaW11bChBZSxXdCl8MCkrTWF0aC5pbXVsKERlLG5uKXwwLEE9QStNYXRoLmltdWwoRGUsV3QpfDAsRT1FK01hdGguaW11bChMZSxkbil8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKExlLG1uKXwwKStNYXRoLmltdWwoUmUsZG4pfDAsQT1BK01hdGguaW11bChSZSxtbil8MDt2YXIgUGE9KGorKEU9RStNYXRoLmltdWwoamUsZm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChqZSx0bil8MCkrTWF0aC5pbXVsKGtlLGZuKXwwKSk8PDEzKXwwO2o9KChB''@;'; put 'put ''PUErTWF0aC5pbXVsKGtlLHRuKXwwKSsobT4+PjEzKXwwKSsoUGE+Pj4yNil8MCxQYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsc3QpLG09KG09TWF0aC5pbXVsKEllLFp0KSkrTWF0aC5pbXVsKGF0LHN0KXwwLEE9TWF0aC5pbXVsKGF0LFp0KSxFPUUrTWF0aC5pbXVsKHV0LFllKXwwLG09''@;'; put 'put ''KG09bStNYXRoLmltdWwodXQsVHQpfDApK01hdGguaW11bChYZSxZZSl8MCxBPUErTWF0aC5pbXVsKFhlLFR0KXwwLEU9RStNYXRoLmltdWwodnQsZnQpfDAsbT0obT1tK01hdGguaW11bCh2dCxNdCl8MCkrTWF0aC5pbXVsKFN0LGZ0KXwwLEE9QStNYXRoLmltdWwoU3QsTXQpfDAsRT1FK01h''@;'; put 'put ''dGguaW11bChydCxubil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LFd0KXwwKStNYXRoLmltdWwoUWUsbm4pfDAsQT1BK01hdGguaW11bChRZSxXdCl8MCxFPUUrTWF0aC5pbXVsKEFlLGRuKXwwLG09KG09bStNYXRoLmltdWwoQWUsbW4pfDApK01hdGguaW11bChEZSxkbil8MCxBPUErTWF0aC5p''@;'; put 'put ''bXVsKERlLG1uKXwwO3ZhciB1cj0oaisoRT1FK01hdGguaW11bChMZSxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKExlLHRuKXwwKStNYXRoLmltdWwoUmUsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoUmUsdG4pfDApKyhtPj4+MTMpfDApKyh1cj4+PjI2KXww''@;'; put 'put ''LHVyJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxZZSksbT0obT1NYXRoLmltdWwoSWUsVHQpKStNYXRoLmltdWwoYXQsWWUpfDAsQT1NYXRoLmltdWwoYXQsVHQpLEU9RStNYXRoLmltdWwodXQsZnQpfDAsbT0obT1tK01hdGguaW11bCh1dCxNdCl8MCkrTWF0aC5pbXVsKFhlLGZ0KXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoWGUsTXQpfDAsRT1FK01hdGguaW11bCh2dCxubil8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LFd0KXwwKStNYXRoLmltdWwoU3Qsbm4pfDAsQT1BK01hdGguaW11bChTdCxXdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LGRuKXwwLG09KG09bStNYXRoLmltdWwocnQsbW4pfDApK01h''@;'; put 'put ''dGguaW11bChRZSxkbil8MCxBPUErTWF0aC5pbXVsKFFlLG1uKXwwO3ZhciBiYT0oaisoRT1FK01hdGguaW11bChBZSxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKEFlLHRuKXwwKStNYXRoLmltdWwoRGUsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoRGUsdG4p''@;'; put 'put ''fDApKyhtPj4+MTMpfDApKyhiYT4+PjI2KXwwLGJhJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxmdCksbT0obT1NYXRoLmltdWwoSWUsTXQpKStNYXRoLmltdWwoYXQsZnQpfDAsQT1NYXRoLmltdWwoYXQsTXQpLEU9RStNYXRoLmltdWwodXQsbm4pfDAsbT0obT1tK01hdGguaW11bCh1dCxX''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKFhlLG5uKXwwLEE9QStNYXRoLmltdWwoWGUsV3QpfDAsRT1FK01hdGguaW11bCh2dCxkbil8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LG1uKXwwKStNYXRoLmltdWwoU3QsZG4pfDAsQT1BK01hdGguaW11bChTdCxtbil8MDt2YXIgTWk9KGorKEU9RStNYXRoLmltdWwo''@;'; put 'put ''cnQsZm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChydCx0bil8MCkrTWF0aC5pbXVsKFFlLGZuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFFlLHRuKXwwKSsobT4+PjEzKXwwKSsoTWk+Pj4yNil8MCxNaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsbm4pLG09KG09''@;'; put 'put ''TWF0aC5pbXVsKEllLFd0KSkrTWF0aC5pbXVsKGF0LG5uKXwwLEE9TWF0aC5pbXVsKGF0LFd0KSxFPUUrTWF0aC5pbXVsKHV0LGRuKXwwLG09KG09bStNYXRoLmltdWwodXQsbW4pfDApK01hdGguaW11bChYZSxkbil8MCxBPUErTWF0aC5pbXVsKFhlLG1uKXwwO3ZhciB3YT0oaisoRT1FK01h''@;'; put 'put ''dGguaW11bCh2dCxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHZ0LHRuKXwwKStNYXRoLmltdWwoU3QsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoU3QsdG4pfDApKyhtPj4+MTMpfDApKyh3YT4+PjI2KXwwLHdhJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxk''@;'; put 'put ''biksbT0obT1NYXRoLmltdWwoSWUsbW4pKStNYXRoLmltdWwoYXQsZG4pfDAsQT1NYXRoLmltdWwoYXQsbW4pO3ZhciBlYT0oaisoRT1FK01hdGguaW11bCh1dCxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHV0LHRuKXwwKStNYXRoLmltdWwoWGUsZm4pfDApKTw8MTMpfDA7''@;'; put 'put ''aj0oKEE9QStNYXRoLmltdWwoWGUsdG4pfDApKyhtPj4+MTMpfDApKyhlYT4+PjI2KXwwLGVhJj02NzEwODg2Mzt2YXIgRnI9KGorKEU9TWF0aC5pbXVsKEllLGZuKSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChJZSx0bikpK01hdGguaW11bChhdCxmbil8MCkpPDwxMyl8MDtyZXR1cm4g''@;'; put 'put ''aj0oKEE9TWF0aC5pbXVsKGF0LHRuKSkrKG0+Pj4xMyl8MCkrKEZyPj4+MjYpfDAsRnImPTY3MTA4ODYzLEhbMF09Y2EsSFsxXT1faSxIWzJdPXZyLEhbM109WGksSFs0XT1RaSxIWzVdPVZpLEhbNl09ZWksSFs3XT11YSxIWzhdPVJpLEhbOV09RGEsSFsxMF09aGksSFsxMV09cWksSFsxMl09''@;'; put 'put ''UGEsSFsxM109dXIsSFsxNF09YmEsSFsxNV09TWksSFsxNl09d2EsSFsxN109ZWEsSFsxOF09RnIsMCE9PWomJihIWzE5XT1qLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIGVlKEIsZyx5KXtyZXR1cm4obmV3IEopLm11bHAoQixnLHkpfWZ1bmN0aW9uIEooQixnKXt0aGlzLng9Qix0aGlzLnk9''@;'; put 'put ''Z31NYXRoLmltdWx8fChXPVkpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGcseSl7dmFyIHgsQz10aGlzLmxlbmd0aCtnLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PWcubGVuZ3RoP1codGhpcyxnLHkpOkM8NjM/WSh0aGlzLGcseSk6QzwxMDI0P2Z1bmN0aW9u''@;'; put 'put ''IHEoQixnLHkpe3kubmVnYXRpdmU9Zy5uZWdhdGl2ZV5CLm5lZ2F0aXZlLHkubGVuZ3RoPUIubGVuZ3RoK2cubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDx5Lmxlbmd0aC0xO1QrKyl7dmFyIEg9QztDPTA7Zm9yKHZhciBqPTY3MTA4ODYzJngsRT1NYXRoLm1pbihULGcubGVuZ3RoLTEp''@;'; put 'put ''LG09TWF0aC5tYXgoMCxULUIubGVuZ3RoKzEpO208PUU7bSsrKXt2YXIgc2U9KDB8Qi53b3Jkc1tULW1dKSooMHxnLndvcmRzW21dKSxDZT02NzEwODg2MyZzZTtqPTY3MTA4ODYzJihDZT1DZStqfDApLEMrPShIPShIPUgrKHNlLzY3MTA4ODY0fDApfDApKyhDZT4+PjI2KXwwKT4+PjI2LEgm''@;'; put 'put ''PTY3MTA4ODYzfXkud29yZHNbVF09aix4PUgsSD1DfXJldHVybiAwIT09eD95LndvcmRzW1RdPXg6eS5sZW5ndGgtLSx5LnN0cmlwKCl9KHRoaXMsZyx5KTplZSh0aGlzLGcseSkseH0sSi5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihnKXtmb3IodmFyIHk9bmV3IEFycmF5KGcpLHg9dy5w''@;'; put 'put ''cm90b3R5cGUuX2NvdW50Qml0cyhnKS0xLEM9MDtDPGc7QysrKXlbQ109dGhpcy5yZXZCaW4oQyx4LGcpO3JldHVybiB5fSxKLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oZyx5LHgpe2lmKDA9PT1nfHxnPT09eC0xKXJldHVybiBnO2Zvcih2YXIgQz0wLFQ9MDtUPHk7VCsrKUN8PSgxJmcp''@;'; put 'put ''PDx5LVQtMSxnPj49MTtyZXR1cm4gQ30sSi5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihnLHkseCxDLFQsSCl7Zm9yKHZhciBqPTA7ajxIO2orKylDW2pdPXlbZ1tqXV0sVFtqXT14W2dbal1dfSxKLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZyx5LHgsQyxULEgpe3RoaXMucGVy''@;'; put 'put ''bXV0ZShILGcseSx4LEMsVCk7Zm9yKHZhciBqPTE7ajxUO2o8PD0xKWZvcih2YXIgRT1qPDwxLG09TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLGFlPTA7YWU8VDthZSs9RSlmb3IodmFyIG5lPW0sc2U9QSxDZT0wO0NlPGo7Q2UrKyl7dmFyIFVlPXhbYWUr''@;'; put 'put ''Q2VdLEplPUNbYWUrQ2VdLGl0PXhbYWUrQ2Ural0seGU9Q1thZStDZStqXSx5ZT1uZSppdC1zZSp4ZTt4ZT1uZSp4ZStzZSppdCx4W2FlK0NlXT1VZSsoaXQ9eWUpLENbYWUrQ2VdPUplK3hlLHhbYWUrQ2Ural09VWUtaXQsQ1thZStDZStqXT1KZS14ZSxDZSE9PUUmJih5ZT1tKm5lLUEqc2Us''@;'; put 'put ''c2U9bSpzZStBKm5lLG5lPXllKX19LEoucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGcseSl7dmFyIHg9MXxNYXRoLm1heCh5LGcpLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8PFQrMStDfSxKLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24o''@;'; put 'put ''Zyx5LHgpe2lmKCEoeDw9MSkpZm9yKHZhciBDPTA7Qzx4LzI7QysrKXt2YXIgVD1nW0NdO2dbQ109Z1t4LUMtMV0sZ1t4LUMtMV09VCxUPXlbQ10seVtDXT0teVt4LUMtMV0seVt4LUMtMV09LVR9fSxKLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oZyx5KXtmb3IodmFyIHg9MCxD''@;'; put 'put ''PTA7Qzx5LzI7QysrKXt2YXIgVD04MTkyKk1hdGgucm91bmQoZ1syKkMrMV0veSkrTWF0aC5yb3VuZChnWzIqQ10veSkreDtnW0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJldHVybiBnfSxKLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGcseSx4LEMp''@;'; put 'put ''e2Zvcih2YXIgVD0wLEg9MDtIPHk7SCsrKXhbMipIXT04MTkxJihUKz0wfGdbSF0pLHhbMipIKzFdPTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9yKEg9Mip5O0g8QzsrK0gpeFtIXT0wO3AoMD09PVQpLHAoISgtODE5MiZUKSl9LEoucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oZyl7Zm9yKHZh''@;'; put 'put ''ciB5PW5ldyBBcnJheShnKSx4PTA7eDxnO3grKyl5W3hdPTA7cmV0dXJuIHl9LEoucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oZyx5LHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihnLmxlbmd0aCx5Lmxlbmd0aCksVD10aGlzLm1ha2VSQlQoQyksSD10aGlzLnN0dWIoQyksaj1uZXcgQXJy''@;'; put 'put ''YXkoQyksRT1uZXcgQXJyYXkoQyksbT1uZXcgQXJyYXkoQyksQT1uZXcgQXJyYXkoQyksYWU9bmV3IEFycmF5KEMpLG5lPW5ldyBBcnJheShDKSxzZT14LndvcmRzO3NlLmxlbmd0aD1DLHRoaXMuY29udmVydDEzYihnLndvcmRzLGcubGVuZ3RoLGosQyksdGhpcy5jb252ZXJ0MTNiKHkud29y''@;'; put 'put ''ZHMseS5sZW5ndGgsQSxDKSx0aGlzLnRyYW5zZm9ybShqLEgsRSxtLEMsVCksdGhpcy50cmFuc2Zvcm0oQSxILGFlLG5lLEMsVCk7Zm9yKHZhciBDZT0wO0NlPEM7Q2UrKyl7dmFyIFVlPUVbQ2VdKmFlW0NlXS1tW0NlXSpuZVtDZV07bVtDZV09RVtDZV0qbmVbQ2VdK21bQ2VdKmFlW0NlXSxF''@;'; put 'put ''W0NlXT1VZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoRSxtLEMpLHRoaXMudHJhbnNmb3JtKEUsbSxzZSxILEMsVCksdGhpcy5jb25qdWdhdGUoc2UsSCxDKSx0aGlzLm5vcm1hbGl6ZTEzYihzZSxDKSx4Lm5lZ2F0aXZlPWcubmVnYXRpdmVeeS5uZWdhdGl2ZSx4Lmxlbmd0aD1nLmxlbmd0aCt5''@;'; put 'put ''Lmxlbmd0aCx4LnN0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihnKXt2YXIgeT1uZXcgdyhudWxsKTtyZXR1cm4geS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRoaXMubXVsVG8oZyx5KX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihnKXt2YXIgeT1u''@;'; put 'put ''ZXcgdyhudWxsKTtyZXR1cm4geS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLGVlKHRoaXMsZyx5KX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGcsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGcp''@;'; put 'put ''e3AoIm51bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpO2Zvcih2YXIgeT0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqZyxUPSg2NzEwODg2MyZDKSsoNjcxMDg4NjMmeSk7eT4+PTI2LHkrPUMvNjcxMDg4NjR8MCx5Kz1UPj4+MjYsdGhpcy53''@;'; put 'put ''b3Jkc1t4XT02NzEwODg2MyZUfXJldHVybiAwIT09eSYmKHRoaXMud29yZHNbeF09eSx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oZyl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0''@;'; put 'put ''aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcpe3ZhciB5PWZ1bmN0aW9uIFooQil7Zm9yKHZhciBnPW5ldyBBcnJheShCLmJpdExlbmd0aCgpKSx5PTA7eTxn''@;'; put 'put ''Lmxlbmd0aDt5Kyspe3ZhciBDPXklMjY7Z1t5XT0oQi53b3Jkc1t5LzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gZ30oZyk7aWYoMD09PXkubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxDPTA7Qzx5Lmxlbmd0aCYmMD09PXlbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPHku''@;'; put 'put ''bGVuZ3RoKWZvcih2YXIgVD14LnNxcigpO0M8eS5sZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09eVtDXSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBULHk9ZyUyNix4PShnLXkpLzI2''@;'; put 'put ''LEM9NjcxMDg4NjM+Pj4yNi15PDwyNi15O2lmKDAhPT15KXt2YXIgSD0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBqPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLWo8PHl8SCxIPWo+Pj4yNi15fUgmJih0aGlzLndvcmRzW1RdPUgsdGhp''@;'; put 'put ''cy5sZW5ndGgrKyl9aWYoMCE9PXgpe2ZvcihUPXRoaXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hs''@;'; put 'put ''bj1mdW5jdGlvbihnKXtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oZyl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihnLHkseCl7dmFyIEM7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApLEM9eT8oeS15JTI2KS8yNjowO3ZhciBUPWclMjYsSD1NYXRoLm1p''@;'; put 'put ''bigoZy1UKS8yNix0aGlzLmxlbmd0aCksaj02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPUgsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208SDttKyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3RoPUh9aWYoMCE9PUgpaWYodGhpcy5sZW5ndGg+SClm''@;'; put 'put ''b3IodGhpcy5sZW5ndGgtPUgsbT0wO208dGhpcy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttK0hdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgYWU9''@;'; put 'put ''MHx0aGlzLndvcmRzW21dO3RoaXMud29yZHNbbV09QTw8MjYtVHxhZT4+PlQsQT1hZSZqfXJldHVybiBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5''@;'; put 'put ''cGUuaXNocm49ZnVuY3Rpb24oZyx5LHgpe3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihnLHkseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihnKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oZyl7cmV0''@;'; put 'put ''dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oZyl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihnKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oZyl9LHcucHJvdG90eXBlLnRlc3Ru''@;'; put 'put ''PWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT1nJTI2LHg9KGcteSkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PHkpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZn''@;'; put 'put ''Pj0wKTt2YXIgeT1nJTI2LHg9KGcteSkvMjY7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT15JiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCks''@;'; put 'put ''MCE9PXkmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+Pnk8PHkpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGcpfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihn''@;'; put 'put ''KXtyZXR1cm4gcCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCksZzwwP3RoaXMuaXN1Ym4oLWcpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Zz8odGhpcy53b3Jkc1swXT1nLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRp''@;'; put 'put ''dmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGcpfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oZyl7dGhpcy53b3Jkc1swXSs9Zztmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRz''@;'; put 'put ''W3ldPj02NzEwODg2NDt5KyspdGhpcy53b3Jkc1t5XS09NjcxMDg4NjQseT09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1t5KzFdPTE6dGhpcy53b3Jkc1t5KzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLHkrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49''@;'; put 'put ''ZnVuY3Rpb24oZyl7aWYocCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCksZzwwKXJldHVybiB0aGlzLmlhZGRuKC1nKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53''@;'; put 'put ''b3Jkc1swXS09ZywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbeV08MDt5KyspdGhpcy53b3Jkc1t5XSs9NjcxMDg4NjQs''@;'; put 'put ''dGhpcy53b3Jkc1t5KzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihnKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGcpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGcseSx4KXt2YXIgVDt0aGlzLl9leHBhbmQo''@;'; put 'put ''Zy5sZW5ndGgreCk7dmFyIEgsaj0wO2ZvcihUPTA7VDxnLmxlbmd0aDtUKyspe0g9KDB8dGhpcy53b3Jkc1tUK3hdKStqO3ZhciBFPSgwfGcud29yZHNbVF0pKnk7aj0oKEgtPTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkh9Zm9yKDtU''@;'; put 'put ''PHRoaXMubGVuZ3RoLXg7VCsrKWo9KEg9KDB8dGhpcy53b3Jkc1tUK3hdKStqKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkg7aWYoMD09PWopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IocCgtMT09PWopLGo9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspaj0oSD0tKDB8dGhpcy53b3Jk''@;'; put 'put ''c1tUXSkraik+PjI2LHRoaXMud29yZHNbVF09NjcxMDg4NjMmSDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oZyx5KXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPWcsSD0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9''@;'; put 'put ''MjYtdGhpcy5fY291bnRCaXRzKEgpKSYmKFQ9VC51c2hsbih4KSxDLml1c2hsbih4KSxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PXkpeyhtPW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVu''@;'; put 'put ''Z3RoKTtmb3IodmFyIEE9MDtBPG0ubGVuZ3RoO0ErKyltLndvcmRzW0FdPTB9dmFyIGFlPUMuY2xvbmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1hZS5uZWdhdGl2ZSYmKEM9YWUsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgbmU9RS0xO25lPj0wO25lLS0pe3ZhciBzZT02NzEwODg2''@;'; put 'put ''NCooMHxDLndvcmRzW1QubGVuZ3RoK25lXSkrKDB8Qy53b3Jkc1tULmxlbmd0aCtuZS0xXSk7Zm9yKHNlPU1hdGgubWluKHNlL0h8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxzZSxuZSk7MCE9PUMubmVnYXRpdmU7KXNlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSxu''@;'; put 'put ''ZSksQy5pc1plcm8oKXx8KEMubmVnYXRpdmVePTEpO20mJihtLndvcmRzW25lXT1zZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT15JiYwIT09eCYmQy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcseSx4''@;'; put 'put ''KXtyZXR1cm4gcCghZy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKGcseSksIm1vZCIhPT15JiYoQz1ILmRpdi5uZWcoKSksImRpdiIhPT15JiYo''@;'; put 'put ''VD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pYWRkKGcpKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmU/KEg9dGhpcy5kaXZtb2QoZy5uZWcoKSx5KSwibW9kIiE9PXkmJihDPUguZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOkgubW9kfSk6''@;'; put 'put ''dGhpcy5uZWdhdGl2ZSZnLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKGcubmVnKCkseSksImRpdiIhPT15JiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKGcpKSx7ZGl2OkguZGl2LG1vZDpUfSk6Zy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcp''@;'; put 'put ''PDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PWcubGVuZ3RoPyJkaXYiPT09eT97ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT15P3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKGcud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1sw''@;'; put 'put ''XSksbW9kOm5ldyB3KHRoaXMubW9kbihnLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoZyx5KTt2YXIgQyxULEh9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJu''@;'; put 'put ''IHRoaXMuZGl2bW9kKGcsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihnKXt2YXIgeT10aGlzLmRpdm1vZChnKTtpZih5Lm1vZC5pc1plcm8o''@;'; put 'put ''KSlyZXR1cm4geS5kaXY7dmFyIHg9MCE9PXkuZGl2Lm5lZ2F0aXZlP3kubW9kLmlzdWIoZyk6eS5tb2QsQz1nLnVzaHJuKDEpLFQ9Zy5hbmRsbigxKSxIPXguY21wKEMpO3JldHVybiBIPDB8fDE9PT1UJiYwPT09SD95LmRpdjowIT09eS5kaXYubmVnYXRpdmU/eS5kaXYuaXN1Ym4oMSk6eS5k''@;'; put 'put ''aXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oZyl7cChnPD02NzEwODg2Myk7Zm9yKHZhciB5PSgxPDwyNiklZyx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KHkqeCsoMHx0aGlzLndvcmRzW0NdKSklZztyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVu''@;'; put 'put ''Y3Rpb24oZyl7cChnPD02NzEwODg2Myk7Zm9yKHZhciB5PTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCp5O3RoaXMud29yZHNbeF09Qy9nfDAseT1DJWd9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5j''@;'; put 'put ''dGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGcpfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUpLHAoIWcuaXNaZXJvKCkpO3ZhciB5PXRoaXMseD1nLmNsb25lKCk7eT0wIT09eS5uZWdhdGl2ZT95LnVtb2QoZyk6eS5jbG9uZSgpO2Zvcih2''@;'; put 'put ''YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9bmV3IHcoMCksaj1uZXcgdygxKSxFPTA7eS5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspeS5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNsb25lKCksQT15LmNsb25lKCk7IXkuaXNaZXJvKCk7KXtmb3IodmFyIGFlPTAsbmU9''@;'; put 'put ''MTshKHkud29yZHNbMF0mbmUpJiZhZTwyNjsrK2FlLG5lPDw9MSk7aWYoYWU+MClmb3IoeS5pdXNocm4oYWUpO2FlLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIHNlPTAsQ2U9MTshKHgu''@;'; put 'put ''d29yZHNbMF0mQ2UpJiZzZTwyNjsrK3NlLENlPDw9MSk7aWYoc2U+MClmb3IoeC5pdXNocm4oc2UpO3NlLS0gPjA7KShILmlzT2RkKCl8fGouaXNPZGQoKSkmJihILmlhZGQobSksai5pc3ViKEEpKSxILml1c2hybigxKSxqLml1c2hybigxKTt5LmNtcCh4KT49MD8oeS5pc3ViKHgpLEMuaXN1''@;'; put 'put ''YihIKSxULmlzdWIoaikpOih4LmlzdWIoeSksSC5pc3ViKEMpLGouaXN1YihUKSl9cmV0dXJue2E6SCxiOmosZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUpLHAoIWcuaXNaZXJvKCkpO3ZhciBhZSx5PXRoaXMseD1nLmNs''@;'; put 'put ''b25lKCk7eT0wIT09eS5uZWdhdGl2ZT95LnVtb2QoZyk6eS5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9eC5jbG9uZSgpO3kuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgaj0wLEU9MTshKHkud29yZHNbMF0mRSkmJmo8MjY7KytqLEU8PD0xKTtpZihq''@;'; put 'put ''PjApZm9yKHkuaXVzaHJuKGopO2otLSA+MDspQy5pc09kZCgpJiZDLmlhZGQoSCksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChIKSxULml1''@;'; put 'put ''c2hybigxKTt5LmNtcCh4KT49MD8oeS5pc3ViKHgpLEMuaXN1YihUKSk6KHguaXN1Yih5KSxULmlzdWIoQykpfXJldHVybihhZT0wPT09eS5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZhZS5pYWRkKGcpLGFlfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oZyl7aWYodGhpcy5pc1plcm8oKSly''@;'; put 'put ''ZXR1cm4gZy5hYnMoKTtpZihnLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciB5PXRoaXMuY2xvbmUoKSx4PWcuY2xvbmUoKTt5Lm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO3kuaXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKXkuaXVzaHJuKDEpLHguaXVzaHJuKDEp''@;'; put 'put ''O2Zvcig7Oyl7Zm9yKDt5LmlzRXZlbigpOyl5Lml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBUPXkuY21wKHgpO2lmKFQ8MCl7dmFyIEg9eTt5PXgseD1IfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7eS5pc3ViKHgpfXJldHVybiB4Lml1c2hs''@;'; put 'put ''bihDKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5lZ2NkKGcpLmEudW1vZChnKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhp''@;'; put 'put ''cy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLndvcmRzWzBdJmd9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnKTt2YXIgeT1nJTI2LHg9KGcteSkvMjYsQz0xPDx5O2lmKHRoaXMubGVuZ3RoPD14''@;'; put 'put ''KXJldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsSD14OzAhPT1UJiZIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9MHx0aGlzLndvcmRzW0hdO1Q9KGorPVQpPj4+MjYsdGhpcy53b3Jkc1tIXT1qJj02NzEwODg2M31yZXR1cm4gMCE9PVQm''@;'; put 'put ''Jih0aGlzLndvcmRzW0hdPVQsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oZyl7dmFyIHgseT1nPDA7aWYoMCE9PXRoaXMu''@;'; put 'put ''bmVnYXRpdmUmJiF5KXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZ5KXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle3kmJihnPS1nKSxwKGc8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9''@;'; put 'put ''PT1nPzA6QzxnPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGcpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJu''@;'; put 'put ''IDE7dmFyIHk9dGhpcy51Y21wKGcpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC15Onl9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oZyl7aWYodGhpcy5sZW5ndGg+Zy5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Zy5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciB5PTAseD10''@;'; put 'put ''aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0wfHRoaXMud29yZHNbeF0sVD0wfGcud29yZHNbeF07aWYoQyE9PVQpe0M8VD95PS0xOkM+VCYmKHk9MSk7YnJlYWt9fXJldHVybiB5fSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcG4oZyl9LHcucHJv''@;'; put 'put ''dG90eXBlLmd0PWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXAoZyl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKT49MH0sdy5wcm90b3R5cGUubHRu''@;'; put 'put ''PWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wKGcpfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlv''@;'; put 'put ''bihnKXtyZXR1cm4gdGhpcy5jbXAoZyk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcChnKX0sdy5yZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBNZShn''@;'; put 'put ''KX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IikscCgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnLmNvbnZlcnRUbyh0aGlzKS5f''@;'; put 'put ''Zm9yY2VSZWQoZyl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VS''@;'; put 'put ''ZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucmVkPWcsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoZyl9LHcucHJvdG90eXBlLnJl''@;'; put 'put ''ZEFkZD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkg''@;'; put 'put ''d2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsZyl9LHcucHJvdG90eXBlLnJl''@;'; put 'put ''ZElTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5''@;'; put 'put ''IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5t''@;'; put 'put ''dWwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQuaW11bCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRT''@;'; put 'put ''cXI9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJy''@;'; put 'put ''ZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJl''@;'; put 'put ''cnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhp''@;'; put 'put ''cy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBv''@;'; put 'put ''dz1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCYmIWcucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGcpfTt2YXIgcmU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlv''@;'; put 'put ''biBpZShCLGcpe3RoaXMubmFtZT1CLHRoaXMucD1uZXcgdyhnLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gdWUoKXtpZS5jYWxsKHRoaXMsImsyNTYi''@;'; put 'put ''LCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIGdlKCl7aWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAg''@;'; put 'put ''MDAwMDAwMDEiKX1mdW5jdGlvbiBfZSgpe2llLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtpZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZm''@;'; put 'put ''ZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIE1lKEIpe2lmKCJzdHJpbmciPT10eXBlb2YgQil7dmFyIGc9dy5fcHJpbWUoQik7dGhpcy5tPWcucCx0aGlzLnByaW1lPWd9ZWxzZSBwKEIuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0''@;'; put 'put ''aGFuIDEiKSx0aGlzLm09Qix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gWmUoQil7TWUuY2FsbCh0aGlzLEIpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxu''@;'; put 'put ''KHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRo''@;'; put 'put ''aXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9aWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgdyhudWxsKTtyZXR1cm4gZy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGd9LGllLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGcpe3ZhciB4''@;'; put 'put ''LHk9Zztkb3t0aGlzLnNwbGl0KHksdGhpcy50bXApLHg9KHk9KHk9dGhpcy5pbXVsSyh5KSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTp5LnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KHkud29yZHNbMF09MCx5Lmxlbmd0''@;'; put 'put ''aD0xKTpDPjA/eS5pc3ViKHRoaXMucCk6dm9pZCAwIT09eS5zdHJpcD95LnN0cmlwKCk6eS5fc3RyaXAoKSx5fSxpZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyx5KXtnLml1c2hybih0aGlzLm4sMCx5KX0saWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe3JldHVybiBnLmltdWwo''@;'; put 'put ''dGhpcy5rKX0sVih1ZSxpZSksdWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcseSl7Zm9yKHZhciB4PTQxOTQzMDMsQz1NYXRoLm1pbihnLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyl5LndvcmRzW1RdPWcud29yZHNbVF07aWYoeS5sZW5ndGg9QyxnLmxlbmd0aDw9OSlyZXR1cm4gZy53b3Jk''@;'; put 'put ''c1swXT0wLHZvaWQoZy5sZW5ndGg9MSk7dmFyIEg9Zy53b3Jkc1s5XTtmb3IoeS53b3Jkc1t5Lmxlbmd0aCsrXT1IJngsVD0xMDtUPGcubGVuZ3RoO1QrKyl7dmFyIGo9MHxnLndvcmRzW1RdO2cud29yZHNbVC0xMF09KGomeCk8PDR8SD4+PjIyLEg9an1nLndvcmRzW1QtMTBdPUg+Pj49MjIs''@;'; put 'put ''Zy5sZW5ndGgtPTA9PT1IJiZnLmxlbmd0aD4xMD8xMDo5fSx1ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zy53b3Jkc1tnLmxlbmd0aF09MCxnLndvcmRzW2cubGVuZ3RoKzFdPTAsZy5sZW5ndGgrPTI7Zm9yKHZhciB5PTAseD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgQz0wfGcud29y''@;'; put 'put ''ZHNbeF07Zy53b3Jkc1t4XT02NzEwODg2MyYoeSs9OTc3KkMpLHk9NjQqQysoeS82NzEwODg2NHwwKX1yZXR1cm4gMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJihnLmxlbmd0aC0tLDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiZnLmxlbmd0aC0tKSxnfSxWKGdlLGllKSxWKF9lLGllKSxWKFRl''@;'; put 'put ''LGllKSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PTAseD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxnLndvcmRzW3hdKSt5LFQ9NjcxMDg4NjMmQztDPj4+PTI2LGcud29yZHNbeF09VCx5PUN9cmV0dXJuIDAhPT15JiYoZy53b3Jkc1tnLmxlbmd0aCsr''@;'; put 'put ''XT15KSxnfSx3Ll9wcmltZT1mdW5jdGlvbihnKXtpZihyZVtnXSlyZXR1cm4gcmVbZ107dmFyIHk7aWYoImsyNTYiPT09Zyl5PW5ldyB1ZTtlbHNlIGlmKCJwMjI0Ij09PWcpeT1uZXcgZ2U7ZWxzZSBpZigicDE5MiI9PT1nKXk9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1nKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiVW5rbm93biBwcmltZSAiK2cpO3k9bmV3IFRlfXJldHVybiByZVtnXT15LHl9LE1lLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAoZy5yZWQsInJlZCB3b3JrcyBvbmx5IHdp''@;'; put 'put ''dGggcmVkIG51bWJlcnMiKX0sTWUucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGcseSl7cCghKGcubmVnYXRpdmV8eS5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscChnLnJlZCYmZy5yZWQ9PT15LnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVt''@;'; put 'put ''YmVycyIpfSxNZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoZykuX2ZvcmNlUmVkKHRoaXMpOmcudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sTWUucHJvdG90eXBlLm5lZz1mdW5jdGlvbihnKXtyZXR1cm4gZy5p''@;'; put 'put ''c1plcm8oKT9nLmNsb25lKCk6dGhpcy5tLnN1YihnKS5fZm9yY2VSZWQodGhpcyl9LE1lLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5hZGQoeSk7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVk''@;'; put 'put ''KHRoaXMpfSxNZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmlhZGQoeSk7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LE1lLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcs''@;'; put 'put ''eSk7dmFyIHg9Zy5zdWIoeSk7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sTWUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5pc3ViKHkpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRk''@;'; put 'put ''KHRoaXMubSkseH0sTWUucHJvdG90eXBlLnNobD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkxKGcpLHRoaXMuaW1vZChnLnVzaGxuKHkpKX0sTWUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLHkpLHRoaXMuaW1vZChnLmltdWwo''@;'; put 'put ''eSkpfSxNZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyx5KSx0aGlzLmltb2QoZy5tdWwoeSkpfSxNZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbXVsKGcsZy5jbG9uZSgpKX0sTWUucHJvdG90eXBlLnNxcj1mdW5j''@;'; put 'put ''dGlvbihnKXtyZXR1cm4gdGhpcy5tdWwoZyxnKX0sTWUucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oZyl7aWYoZy5pc1plcm8oKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciB5PXRoaXMubS5hbmRsbigzKTtpZihwKHklMj09MSksMz09PXkpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hy''@;'; put 'put ''bigyKTtyZXR1cm4gdGhpcy5wb3coZyx4KX1mb3IodmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO3AoIUMuaXNaZXJvKCkpO3ZhciBIPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGo9SC5yZWROZWcoKSxFPXRoaXMubS5z''@;'; put 'put ''dWJuKDEpLml1c2hybigxKSxtPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKGopOyltLnJlZElBZGQoaik7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksYWU9dGhpcy5wb3coZyxDLmFkZG4oMSkuaXVzaHJuKDEp''@;'; put 'put ''KSxuZT10aGlzLnBvdyhnLEMpLHNlPVQ7MCE9PW5lLmNtcChIKTspe2Zvcih2YXIgQ2U9bmUsVWU9MDswIT09Q2UuY21wKEgpO1VlKyspQ2U9Q2UucmVkU3FyKCk7cChVZTxzZSk7dmFyIEplPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxuKHNlLVVlLTEpKTthZT1hZS5yZWRNdWwoSmUpLEE9''@;'; put 'put ''SmUucmVkU3FyKCksbmU9bmUucmVkTXVsKEEpLHNlPVVlfXJldHVybiBhZX0sTWUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7dmFyIHk9Zy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PXkubmVnYXRpdmU/KHkubmVnYXRpdmU9MCx0aGlzLmltb2QoeSkucmVkTmVnKCkpOnRoaXMuaW1v''@;'; put 'put ''ZCh5KX0sTWUucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnLHkpe2lmKHkuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT15LmNtcG4oMSkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1n''@;'; put 'put ''O2Zvcih2YXIgVD0yO1Q8Qy5sZW5ndGg7VCsrKUNbVF09dGhpcy5tdWwoQ1tULTFdLGcpO3ZhciBIPUNbMF0saj0wLEU9MCxtPXkuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD15Lmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9eS53b3Jkc1tUXSxhZT1tLTE7YWU+PTA7''@;'; put 'put ''YWUtLSl7dmFyIG5lPUE+PmFlJjE7SCE9PUNbMF0mJihIPXRoaXMuc3FyKEgpKSwwIT09bmV8fDAhPT1qPyhqPDw9MSxqfD1uZSwoND09KytFfHwwPT09VCYmMD09PWFlKSYmKEg9dGhpcy5tdWwoSCxDW2pdKSxFPTAsaj0wKSk6RT0wfW09MjZ9cmV0dXJuIEh9LE1lLnByb3RvdHlwZS5jb252''@;'; put 'put ''ZXJ0VG89ZnVuY3Rpb24oZyl7dmFyIHk9Zy51bW9kKHRoaXMubSk7cmV0dXJuIHk9PT1nP3kuY2xvbmUoKTp5fSxNZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIHk9Zy5jbG9uZSgpO3JldHVybiB5LnJlZD1udWxsLHl9LHcubW9udD1mdW5jdGlvbihnKXtyZXR1cm4g''@;'; put 'put ''bmV3IFplKGcpfSxWKFplLE1lKSxaZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy51c2hsbih0aGlzLnNoaWZ0KSl9LFplLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgeT10aGlzLmltb2QoZy5tdWwodGhpcy5yaW52KSk7''@;'; put 'put ''cmV0dXJuIHkucmVkPW51bGwseX0sWmUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyx5KXtpZihnLmlzWmVybygpfHx5LmlzWmVybygpKXJldHVybiBnLndvcmRzWzBdPTAsZy5sZW5ndGg9MSxnO3ZhciB4PWcuaW11bCh5KSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludiku''@;'; put 'put ''aW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxaZS5wcm90''@;'; put 'put ''b3R5cGUubXVsPWZ1bmN0aW9uKGcseSl7aWYoZy5pc1plcm8oKXx8eS5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PWcubXVsKHkpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSks''@;'; put 'put ''VD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LFplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0''@;'; put 'put ''aGlzLmltb2QoZy5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KGNlPWIubm1kKGNlKSx0aGlzKX0sNjEzODooY2UsWCxiKT0+e3ZhciBJPWIoOTgwKSxfPWIoOTE5OSkscD1iKDc4NTkpLFY9YigyMTQ0KSx3PWIoMzY2MyksUD1iKDM0ODIpLEY9Yig0ODE4''@;'; put 'put ''KSxSPWIoOTUwOSkuQnVmZmVyO2NlLmV4cG9ydHM9ZnVuY3Rpb24oWixZLFcpe3ZhciBxO3E9Wi5wYWRkaW5nP1oucGFkZGluZzpXPzE6NDt2YXIgcmUsZWU9SShaKSxKPWVlLm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2lmKFkubGVuZ3RoPkp8fG5ldyBWKFkpLmNtcChlZS5tb2R1bHVzKT49MCl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtyZT1XP0YobmV3IFYoWSksZWUpOncoWSxlZSk7dmFyIGllPVIuYWxsb2MoSi1yZS5sZW5ndGgpO2lmKHJlPVIuY29uY2F0KFtpZSxyZV0sSiksND09PXEpcmV0dXJuIGZ1bmN0aW9uIHooSyxaKXt2YXIgWT1LLm1vZHVsdXMuYnl0''@;'; put 'put ''ZUxlbmd0aCgpLFc9UCgic2hhMSIpLnVwZGF0ZShSLmFsbG9jKDApKS5kaWdlc3QoKSxxPVcubGVuZ3RoO2lmKDAhPT1aWzBdKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO3ZhciBlZT1aLnNsaWNlKDEscSsxKSxKPVouc2xpY2UocSsxKSxyZT1wKGVlLF8oSixxKSksaWU9''@;'; put 'put ''cChKLF8ocmUsWS1xLTEpKTtpZihmdW5jdGlvbiBPKEssWil7Sz1SLmZyb20oSyksWj1SLmZyb20oWik7dmFyIFk9MCxXPUsubGVuZ3RoO0subGVuZ3RoIT09Wi5sZW5ndGgmJihZKyssVz1NYXRoLm1pbihLLmxlbmd0aCxaLmxlbmd0aCkpO2Zvcih2YXIgcT0tMTsrK3E8VzspWSs9S1txXV5a''@;'; put 'put ''W3FdO3JldHVybiBZfShXLGllLnNsaWNlKDAscSkpKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO2Zvcih2YXIgdWU9cTswPT09aWVbdWVdOyl1ZSsrO2lmKDEhPT1pZVt1ZSsrXSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtyZXR1cm4gaWUuc2xpY2Uo''@;'; put 'put ''dWUpfShlZSxyZSk7aWYoMT09PXEpcmV0dXJuIGZ1bmN0aW9uIE4oSyxaLFkpe2Zvcih2YXIgVz1aLnNsaWNlKDAsMikscT0yLGVlPTA7MCE9PVpbcSsrXTspaWYocT49Wi5sZW5ndGgpe2VlKys7YnJlYWt9dmFyIEo9Wi5zbGljZSgyLHEtMSk7aWYoKCIwMDAyIiE9PVcudG9TdHJpbmcoImhl''@;'; put 'put ''eCIpJiYhWXx8IjAwMDEiIT09Vy50b1N0cmluZygiaGV4IikmJlkpJiZlZSsrLEoubGVuZ3RoPDgmJmVlKyssZWUpdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7cmV0dXJuIFouc2xpY2UocSl9KDAscmUsVyk7aWYoMz09PXEpcmV0dXJuIHJlO3Rocm93IG5ldyBFcnJvcigi''@;'; put 'put ''dW5rbm93biBwYWRkaW5nIil9fSw2NTU5OihjZSxYLGIpPT57dmFyIEk9Yig5ODApLF89YigxNzk4KSxwPWIoMzQ4MiksVj1iKDkxOTkpLHc9Yig3ODU5KSxQPWIoMjE0NCksRj1iKDQ4MTgpLFI9YigzNjYzKSx6PWIoOTUwOSkuQnVmZmVyO2NlLmV4cG9ydHM9ZnVuY3Rpb24oWSxXLHEpe3Zh''@;'; put 'put ''ciBlZTtlZT1ZLnBhZGRpbmc/WS5wYWRkaW5nOnE/MTo0O3ZhciByZSxKPUkoWSk7aWYoND09PWVlKXJlPWZ1bmN0aW9uIE4oWixZKXt2YXIgVz1aLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLHE9WS5sZW5ndGgsZWU9cCgic2hhMSIpLnVwZGF0ZSh6LmFsbG9jKDApKS5kaWdlc3QoKSxKPWVlLmxl''@;'; put 'put ''bmd0aCxyZT0yKko7aWYocT5XLXJlLTIpdGhyb3cgbmV3IEVycm9yKCJtZXNzYWdlIHRvbyBsb25nIik7dmFyIGllPXouYWxsb2MoVy1xLXJlLTIpLHVlPVctSi0xLGdlPV8oSiksX2U9dyh6LmNvbmNhdChbZWUsaWUsei5hbGxvYygxLDEpLFldLHVlKSxWKGdlLHVlKSksVGU9dyhnZSxWKF9l''@;'; put 'put ''LEopKTtyZXR1cm4gbmV3IFAoei5jb25jYXQoW3ouYWxsb2MoMSksVGUsX2VdLFcpKX0oSixXKTtlbHNlIGlmKDE9PT1lZSlyZT1mdW5jdGlvbiBPKFosWSxXKXt2YXIgSixxPVkubGVuZ3RoLGVlPVoubW9kdWx1cy5ieXRlTGVuZ3RoKCk7aWYocT5lZS0xMSl0aHJvdyBuZXcgRXJyb3IoIm1l''@;'; put 'put ''c3NhZ2UgdG9vIGxvbmciKTtyZXR1cm4gSj1XP3ouYWxsb2MoZWUtcS0zLDI1NSk6ZnVuY3Rpb24gSyhaKXtmb3IodmFyIEosWT16LmFsbG9jVW5zYWZlKFopLFc9MCxxPV8oMipaKSxlZT0wO1c8WjspZWU9PT1xLmxlbmd0aCYmKHE9XygyKlopLGVlPTApLChKPXFbZWUrK10pJiYoWVtXKytd''@;'; put 'put ''PUopO3JldHVybiBZfShlZS1xLTMpLG5ldyBQKHouY29uY2F0KFt6LmZyb20oWzAsVz8xOjJdKSxKLHouYWxsb2MoMSksWV0sZWUpKX0oSixXLHEpO2Vsc2V7aWYoMyE9PWVlKXRocm93IG5ldyBFcnJvcigidW5rbm93biBwYWRkaW5nIik7aWYoKHJlPW5ldyBQKFcpKS5jbXAoSi5tb2R1bHVz''@;'; put 'put ''KT49MCl0aHJvdyBuZXcgRXJyb3IoImRhdGEgdG9vIGxvbmcgZm9yIG1vZHVsdXMiKX1yZXR1cm4gcT9SKHJlLEopOkYocmUsSil9fSw0ODE4OihjZSxYLGIpPT57dmFyIEk9YigyMTQ0KSxfPWIoOTUwOSkuQnVmZmVyO2NlLmV4cG9ydHM9ZnVuY3Rpb24gcChWLHcpe3JldHVybiBfLmZyb20o''@;'; put 'put ''Vi50b1JlZChJLm1vbnQody5tb2R1bHVzKSkucmVkUG93KG5ldyBJKHcucHVibGljRXhwb25lbnQpKS5mcm9tUmVkKCkudG9BcnJheSgpKX19LDc4NTk6Y2U9PntjZS5leHBvcnRzPWZ1bmN0aW9uKGIsSSl7Zm9yKHZhciBfPWIubGVuZ3RoLHA9LTE7KytwPF87KWJbcF1ePUlbcF07cmV0dXJu''@;'; put 'put ''IGJ9fSwzNjg5OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2IucihYKSxiLmQoWCx7ZGVjb2RlOigpPT5NZSxkZWZhdWx0OigpPT54LGVuY29kZTooKT0+WmUsdG9BU0NJSTooKT0+Zyx0b1VuaWNvZGU6KCk9PkIsdWNzMmRlY29kZTooKT0+aWUsdWNzMmVuY29kZTooKT0+dWV9KTtjb25zdCBJ''@;'; put 'put ''PTIxNDc0ODM2NDcsXz0zNixOPS9eeG4tLS8sTz0vW15cMC1ceDdGXS8sSz0vW1x4MkVcdTMwMDJcdUZGMEVcdUZGNjFdL2csWj17b3ZlcmZsb3c6Ik92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzIiwibm90LWJhc2ljIjoiSWxsZWdhbCBpbnB1dCA+PSAw''@;'; put 'put ''eDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KSIsImludmFsaWQtaW5wdXQiOiJJbnZhbGlkIGlucHV0In0sVz1NYXRoLmZsb29yLHE9U3RyaW5nLmZyb21DaGFyQ29kZTtmdW5jdGlvbiBlZShDKXt0aHJvdyBuZXcgUmFuZ2VFcnJvcihaW0NdKX1mdW5jdGlvbiByZShDLFQpe2NvbnN0IEg9''@;'; put 'put ''Qy5zcGxpdCgiQCIpO2xldCBqPSIiO0gubGVuZ3RoPjEmJihqPUhbMF0rIkAiLEM9SFsxXSk7Y29uc3QgbT1mdW5jdGlvbiBKKEMsVCl7Y29uc3QgSD1bXTtsZXQgaj1DLmxlbmd0aDtmb3IoO2otLTspSFtqXT1UKENbal0pO3JldHVybiBIfSgoQz1DLnJlcGxhY2UoSywiLiIpKS5zcGxpdCgi''@;'; put 'put ''LiIpLFQpLmpvaW4oIi4iKTtyZXR1cm4gaittfWZ1bmN0aW9uIGllKEMpe2NvbnN0IFQ9W107bGV0IEg9MDtjb25zdCBqPUMubGVuZ3RoO2Zvcig7SDxqOyl7Y29uc3QgRT1DLmNoYXJDb2RlQXQoSCsrKTtpZihFPj01NTI5NiYmRTw9NTYzMTkmJkg8ail7Y29uc3QgbT1DLmNoYXJDb2RlQXQo''@;'; put 'put ''SCsrKTs1NjMyMD09KDY0NTEyJm0pP1QucHVzaCgoKDEwMjMmRSk8PDEwKSsoMTAyMyZtKSs2NTUzNik6KFQucHVzaChFKSxILS0pfWVsc2UgVC5wdXNoKEUpfXJldHVybiBUfWNvbnN0IHVlPUM9PlN0cmluZy5mcm9tQ29kZVBvaW50KC4uLkMpLGdlPWZ1bmN0aW9uKEMpe3JldHVybiBDPj00''@;'; put 'put ''OCYmQzw1OD9DLTQ4KzI2OkM+PTY1JiZDPDkxP0MtNjU6Qz49OTcmJkM8MTIzP0MtOTc6X30sX2U9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gQysyMis3NSooQzwyNiktKCgwIT1UKTw8NSl9LFRlPWZ1bmN0aW9uKEMsVCxIKXtsZXQgaj0wO2ZvcihDPUg/VyhDLzcwMCk6Qz4+MSxDKz1XKEMvVCk7''@;'; put 'put ''Qz40NTU7ais9XylDPVcoQy8zNSk7cmV0dXJuIFcoaiszNipDLyhDKzM4KSl9LE1lPWZ1bmN0aW9uKEMpe2NvbnN0IFQ9W10sSD1DLmxlbmd0aDtsZXQgaj0wLEU9MTI4LG09NzIsQT1DLmxhc3RJbmRleE9mKCItIik7QTwwJiYoQT0wKTtmb3IobGV0IGFlPTA7YWU8QTsrK2FlKUMuY2hhckNv''@;'; put 'put ''ZGVBdChhZSk+PTEyOCYmZWUoIm5vdC1iYXNpYyIpLFQucHVzaChDLmNoYXJDb2RlQXQoYWUpKTtmb3IobGV0IGFlPUE+MD9BKzE6MDthZTxIOyl7Y29uc3QgbmU9ajtmb3IobGV0IENlPTEsVWU9Xzs7VWUrPV8pe2FlPj1IJiZlZSgiaW52YWxpZC1pbnB1dCIpO2NvbnN0IEplPWdlKEMuY2hh''@;'; put 'put ''ckNvZGVBdChhZSsrKSk7SmU+PV8mJmVlKCJpbnZhbGlkLWlucHV0IiksSmU+VygoSS1qKS9DZSkmJmVlKCJvdmVyZmxvdyIpLGorPUplKkNlO2NvbnN0IGl0PVVlPD1tPzE6VWU+PW0rMjY/MjY6VWUtbTtpZihKZTxpdClicmVhaztjb25zdCB4ZT1fLWl0O0NlPlcoSS94ZSkmJmVlKCJvdmVy''@;'; put 'put ''ZmxvdyIpLENlKj14ZX1jb25zdCBzZT1ULmxlbmd0aCsxO209VGUoai1uZSxzZSwwPT1uZSksVyhqL3NlKT5JLUUmJmVlKCJvdmVyZmxvdyIpLEUrPVcoai9zZSksaiU9c2UsVC5zcGxpY2UoaisrLDAsRSl9cmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KC4uLlQpfSxaZT1mdW5jdGlvbihD''@;'; put 'put ''KXtjb25zdCBUPVtdLEg9KEM9aWUoQykpLmxlbmd0aDtsZXQgaj0xMjgsRT0wLG09NzI7Zm9yKGNvbnN0IG5lIG9mIEMpbmU8MTI4JiZULnB1c2gocShuZSkpO2NvbnN0IEE9VC5sZW5ndGg7bGV0IGFlPUE7Zm9yKEEmJlQucHVzaCgiLSIpO2FlPEg7KXtsZXQgbmU9STtmb3IoY29uc3QgQ2Ug''@;'; put 'put ''b2YgQylDZT49aiYmQ2U8bmUmJihuZT1DZSk7Y29uc3Qgc2U9YWUrMTtuZS1qPlcoKEktRSkvc2UpJiZlZSgib3ZlcmZsb3ciKSxFKz0obmUtaikqc2Usaj1uZTtmb3IoY29uc3QgQ2Ugb2YgQylpZihDZTxqJiYrK0U+SSYmZWUoIm92ZXJmbG93IiksQ2U9PT1qKXtsZXQgVWU9RTtmb3IobGV0''@;'; put 'put ''IEplPV87O0plKz1fKXtjb25zdCBpdD1KZTw9bT8xOkplPj1tKzI2PzI2OkplLW07aWYoVWU8aXQpYnJlYWs7Y29uc3QgeGU9VWUtaXQseWU9Xy1pdDtULnB1c2gocShfZShpdCt4ZSV5ZSwwKSkpLFVlPVcoeGUveWUpfVQucHVzaChxKF9lKFVlLDApKSksbT1UZShFLHNlLGFlPT09QSksRT0w''@;'; put 'put ''LCsrYWV9KytFLCsran1yZXR1cm4gVC5qb2luKCIiKX0sQj1mdW5jdGlvbihDKXtyZXR1cm4gcmUoQyxmdW5jdGlvbihUKXtyZXR1cm4gTi50ZXN0KFQpP01lKFQuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSk6VH0pfSxnPWZ1bmN0aW9uKEMpe3JldHVybiByZShDLGZ1bmN0aW9uKFQpe3JldHVy''@;'; put 'put ''biBPLnRlc3QoVCk/InhuLS0iK1plKFQpOlR9KX0seD17dmVyc2lvbjoiMi4zLjEiLHVjczI6e2RlY29kZTppZSxlbmNvZGU6dWV9LGRlY29kZTpNZSxlbmNvZGU6WmUsdG9BU0NJSTpnLHRvVW5pY29kZTpCfX0sNzEyOTooY2UsWCk9PnsidXNlIHN0cmljdCI7dmFyIGI9T2JqZWN0LnByb3Rv''@;'; put 'put ''dHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBfKFApe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KFAucmVwbGFjZSgvXCsvZywiICIpKX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gcChQKXt0cnl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChQKX1jYXRjaHtyZXR1cm4g''@;'; put 'put ''bnVsbH19WC5zdHJpbmdpZnk9ZnVuY3Rpb24gdyhQLEYpe0Y9Rnx8IiI7dmFyIHosTixSPVtdO2ZvcihOIGluInN0cmluZyIhPXR5cGVvZiBGJiYoRj0iPyIpLFApaWYoYi5jYWxsKFAsTikpe2lmKCEoej1QW05dKSYmKG51bGw9PXp8fGlzTmFOKHopKSYmKHo9IiIpLE49cChOKSx6PXAoeiks''@;'; put 'put ''bnVsbD09PU58fG51bGw9PT16KWNvbnRpbnVlO1IucHVzaChOKyI9Iit6KX1yZXR1cm4gUi5sZW5ndGg/RitSLmpvaW4oIiYiKToiIn0sWC5wYXJzZT1mdW5jdGlvbiBWKFApe2Zvcih2YXIgeixGPS8oW149PyMmXSspPT8oW14mXSopL2csUj17fTt6PUYuZXhlYyhQKTspe3ZhciBOPV8oelsx''@;'; put 'put ''XSksTz1fKHpbMl0pO251bGw9PT1OfHxudWxsPT09T3x8TiBpbiBSfHwoUltOXT1PKX1yZXR1cm4gUn19LDE3OTg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0MTU1KSxfPTY1NTM2LHc9Yig5NTA5KS5CdWZmZXIsUD1iLmcuY3J5cHRvfHxiLmcubXNDcnlwdG87Y2UuZXhwb3J0''@;'; put 'put ''cz1QJiZQLmdldFJhbmRvbVZhbHVlcz9mdW5jdGlvbiBGKFIseil7aWYoUj40Mjk0OTY3Mjk1KXRocm93IG5ldyBSYW5nZUVycm9yKCJyZXF1ZXN0ZWQgdG9vIG1hbnkgcmFuZG9tIGJ5dGVzIik7dmFyIE49dy5hbGxvY1Vuc2FmZShSKTtpZihSPjApaWYoUj5fKWZvcih2YXIgTz0wO088UjtP''@;'; put 'put ''Kz1fKVAuZ2V0UmFuZG9tVmFsdWVzKE4uc2xpY2UoTyxPK18pKTtlbHNlIFAuZ2V0UmFuZG9tVmFsdWVzKE4pO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB6P0kubmV4dFRpY2soZnVuY3Rpb24oKXt6KG51bGwsTil9KTpOfTpmdW5jdGlvbiBWKCl7dGhyb3cgbmV3IEVycm9yKCJTZWN1cmUg''@;'; put 'put ''cmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyLlxuVXNlIENocm9tZSwgRmlyZWZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMSIpfX0sNzk2MzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQxNTUpO2Z1bmN0aW9uIF8oKXt0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoInNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXJcbnVzZSBjaHJvbWUsIEZpcmVGb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTEiKX12YXIgcD1iKDk1MDkpLFY9YigxNzk4KSx3PXAuQnVmZmVyLFA9cC5r''@;'; put 'put ''TWF4TGVuZ3RoLEY9Yi5nLmNyeXB0b3x8Yi5nLm1zQ3J5cHRvLFI9TWF0aC5wb3coMiwzMiktMTtmdW5jdGlvbiB6KFksVyl7aWYoIm51bWJlciIhPXR5cGVvZiBZfHxZIT1ZKXRocm93IG5ldyBUeXBlRXJyb3IoIm9mZnNldCBtdXN0IGJlIGEgbnVtYmVyIik7aWYoWT5SfHxZPDApdGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigib2Zmc2V0IG11c3QgYmUgYSB1aW50MzIiKTtpZihZPlB8fFk+Vyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIE4oWSxXLHEpe2lmKCJudW1iZXIiIT10eXBlb2YgWXx8WSE9WSl0aHJvdyBuZXcgVHlwZUVycm9yKCJz''@;'; put 'put ''aXplIG11c3QgYmUgYSBudW1iZXIiKTtpZihZPlJ8fFk8MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJzaXplIG11c3QgYmUgYSB1aW50MzIiKTtpZihZK1c+cXx8WT5QKXRocm93IG5ldyBSYW5nZUVycm9yKCJidWZmZXIgdG9vIHNtYWxsIil9ZnVuY3Rpb24gSyhZLFcscSxlZSl7aWYoSS5icm93''@;'; put 'put ''c2VyKXt2YXIgcmU9bmV3IFVpbnQ4QXJyYXkoWS5idWZmZXIsVyxxKTtyZXR1cm4gRi5nZXRSYW5kb21WYWx1ZXMocmUpLGVlP3ZvaWQgSS5uZXh0VGljayhmdW5jdGlvbigpe2VlKG51bGwsWSl9KTpZfWlmKCFlZSlyZXR1cm4gVihxKS5jb3B5KFksVyksWTtWKHEsZnVuY3Rpb24odWUsZ2Up''@;'; put 'put ''e2lmKHVlKXJldHVybiBlZSh1ZSk7Z2UuY29weShZLFcpLGVlKG51bGwsWSl9KX1GJiZGLmdldFJhbmRvbVZhbHVlc3x8IUkuYnJvd3Nlcj8oWC5yYW5kb21GaWxsPWZ1bmN0aW9uIE8oWSxXLHEsZWUpe2lmKCEody5pc0J1ZmZlcihZKXx8WSBpbnN0YW5jZW9mIGIuZy5VaW50OEFycmF5KSl0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgVyllZT1XLFc9MCxxPVkubGVuZ3RoO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIHEpZWU9cSxxPVkubGVuZ3RoLVc7ZWxzZSBp''@;'; put 'put ''ZigiZnVuY3Rpb24iIT10eXBlb2YgZWUpdGhyb3cgbmV3IFR5cGVFcnJvcignImNiIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtyZXR1cm4geihXLFkubGVuZ3RoKSxOKHEsVyxZLmxlbmd0aCksSyhZLFcscSxlZSl9LFgucmFuZG9tRmlsbFN5bmM9ZnVuY3Rpb24gWihZLFcscSl7''@;'; put 'put ''aWYodHlwZW9mIFc+InUiJiYoVz0wKSwhKHcuaXNCdWZmZXIoWSl8fFkgaW5zdGFuY2VvZiBiLmcuVWludDhBcnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZiIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7cmV0dXJuIHooVyxZLmxlbmd0aCksdm9pZCAw''@;'; put 'put ''PT09cSYmKHE9WS5sZW5ndGgtVyksTihxLFcsWS5sZW5ndGgpLEsoWSxXLHEpfSk6KFgucmFuZG9tRmlsbD1fLFgucmFuZG9tRmlsbFN5bmM9Xyl9LDQyODE6Y2U9PnsidXNlIHN0cmljdCI7dmFyIGI9e307ZnVuY3Rpb24gSShQLEYsUil7Unx8KFI9RXJyb3IpO3ZhciBOPWZ1bmN0aW9uKE8p''@;'; put 'put ''e2Z1bmN0aW9uIEsoWixZLFcpe3JldHVybiBPLmNhbGwodGhpcyxmdW5jdGlvbiB6KE8sSyxaKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIEY/RjpGKE8sSyxaKX0oWixZLFcpKXx8dGhpc31yZXR1cm4gZnVuY3Rpb24gWChQLEYpe1AucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRi5wcm90b3R5''@;'; put 'put ''cGUpLFAucHJvdG90eXBlLmNvbnN0cnVjdG9yPVAsUC5fX3Byb3RvX189Rn0oSyxPKSxLfShSKTtOLnByb3RvdHlwZS5uYW1lPVIubmFtZSxOLnByb3RvdHlwZS5jb2RlPVAsYltQXT1OfWZ1bmN0aW9uIF8oUCxGKXtpZihBcnJheS5pc0FycmF5KFApKXt2YXIgUj1QLmxlbmd0aDtyZXR1cm4g''@;'; put 'put ''UD1QLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gU3RyaW5nKHopfSksUj4yPyJvbmUgb2YgIi5jb25jYXQoRiwiICIpLmNvbmNhdChQLnNsaWNlKDAsUi0xKS5qb2luKCIsICIpLCIsIG9yICIpK1BbUi0xXToyPT09Uj8ib25lIG9mICIuY29uY2F0KEYsIiAiKS5jb25jYXQoUFswXSwiIG9yICIp''@;'; put 'put ''LmNvbmNhdChQWzFdKToib2YgIi5jb25jYXQoRiwiICIpLmNvbmNhdChQWzBdKX1yZXR1cm4ib2YgIi5jb25jYXQoRiwiICIpLmNvbmNhdChTdHJpbmcoUCkpfUkoIkVSUl9JTlZBTElEX09QVF9WQUxVRSIsZnVuY3Rpb24oUCxGKXtyZXR1cm4nVGhlIHZhbHVlICInK0YrJyIgaXMgaW52YWxp''@;'; put 'put ''ZCBmb3Igb3B0aW9uICInK1ArJyInfSxUeXBlRXJyb3IpLEkoIkVSUl9JTlZBTElEX0FSR19UWVBFIixmdW5jdGlvbihQLEYsUil7dmFyIHosTjtpZigic3RyaW5nIj09dHlwZW9mIEYmJmZ1bmN0aW9uIHAoUCxGLFIpe3JldHVybiBQLnN1YnN0cighUnx8UjwwPzA6K1IsRi5sZW5ndGgpPT09''@;'; put 'put ''Rn0oRiwibm90ICIpPyh6PSJtdXN0IG5vdCBiZSIsRj1GLnJlcGxhY2UoL15ub3QgLywiIikpOno9Im11c3QgYmUiLGZ1bmN0aW9uIFYoUCxGLFIpe3JldHVybih2b2lkIDA9PT1SfHxSPlAubGVuZ3RoKSYmKFI9UC5sZW5ndGgpLFAuc3Vic3RyaW5nKFItRi5sZW5ndGgsUik9PT1GfShQLCIg''@;'; put 'put ''YXJndW1lbnQiKSlOPSJUaGUgIi5jb25jYXQoUCwiICIpLmNvbmNhdCh6LCIgIikuY29uY2F0KF8oRiwidHlwZSIpKTtlbHNle3ZhciBPPWZ1bmN0aW9uIHcoUCxGLFIpe3JldHVybiJudW1iZXIiIT10eXBlb2YgUiYmKFI9MCksIShSK0YubGVuZ3RoPlAubGVuZ3RoKSYmLTEhPT1QLmluZGV4''@;'; put 'put ''T2YoRixSKX0oUCwiLiIpPyJwcm9wZXJ0eSI6ImFyZ3VtZW50IjtOPSdUaGUgIicuY29uY2F0KFAsJyIgJykuY29uY2F0KE8sIiAiKS5jb25jYXQoeiwiICIpLmNvbmNhdChfKEYsInR5cGUiKSl9cmV0dXJuIE4rIi4gUmVjZWl2ZWQgdHlwZSAiLmNvbmNhdCh0eXBlb2YgUil9LFR5cGVFcnJv''@;'; put 'put ''ciksSSgiRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRiIsInN0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GIiksSSgiRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQiLGZ1bmN0aW9uKFApe3JldHVybiJUaGUgIitQKyIgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCJ9KSxJKCJFUlJfU1RSRUFNX1BS''@;'; put 'put ''RU1BVFVSRV9DTE9TRSIsIlByZW1hdHVyZSBjbG9zZSIpLEkoIkVSUl9TVFJFQU1fREVTVFJPWUVEIixmdW5jdGlvbihQKXtyZXR1cm4iQ2Fubm90IGNhbGwgIitQKyIgYWZ0ZXIgYSBzdHJlYW0gd2FzIGRlc3Ryb3llZCJ9KSxJKCJFUlJfTVVMVElQTEVfQ0FMTEJBQ0siLCJDYWxsYmFjayBj''@;'; put 'put ''YWxsZWQgbXVsdGlwbGUgdGltZXMiKSxJKCJFUlJfU1RSRUFNX0NBTk5PVF9QSVBFIiwiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZSIpLEkoIkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EIiwid3JpdGUgYWZ0ZXIgZW5kIiksSSgiRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyIsIk1heSBub3Qg''@;'; put 'put ''d3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtIixUeXBlRXJyb3IpLEkoIkVSUl9VTktOT1dOX0VOQ09ESU5HIixmdW5jdGlvbihQKXtyZXR1cm4iVW5rbm93biBlbmNvZGluZzogIitQfSxUeXBlRXJyb3IpLEkoIkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQiLCJzdHJlYW0u''@;'; put 'put ''dW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCIpLGNlLmV4cG9ydHMucT1ifSw2NzUzOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNDE1NSksXz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oTyl7dmFyIEs9W107Zm9yKHZhciBaIGluIE8pSy5wdXNoKFopO3JldHVybiBLfTtjZS5leHBv''@;'; put 'put ''cnRzPVI7dmFyIHA9Yig5NDgxKSxWPWIoNDIyOSk7Yig1NzE3KShSLHApO2Zvcih2YXIgdz1fKFYucHJvdG90eXBlKSxQPTA7UDx3Lmxlbmd0aDtQKyspe3ZhciBGPXdbUF07Ui5wcm90b3R5cGVbRl18fChSLnByb3RvdHlwZVtGXT1WLnByb3RvdHlwZVtGXSl9ZnVuY3Rpb24gUihPKXtpZigh''@;'; put 'put ''KHRoaXMgaW5zdGFuY2VvZiBSKSlyZXR1cm4gbmV3IFIoTyk7cC5jYWxsKHRoaXMsTyksVi5jYWxsKHRoaXMsTyksdGhpcy5hbGxvd0hhbGZPcGVuPSEwLE8mJighMT09PU8ucmVhZGFibGUmJih0aGlzLnJlYWRhYmxlPSExKSwhMT09PU8ud3JpdGFibGUmJih0aGlzLndyaXRhYmxlPSExKSwh''@;'; put 'put ''MT09PU8uYWxsb3dIYWxmT3BlbiYmKHRoaXMuYWxsb3dIYWxmT3Blbj0hMSx0aGlzLm9uY2UoImVuZCIseikpKX1mdW5jdGlvbiB6KCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8SS5uZXh0VGljayhOLHRoaXMpfWZ1bmN0aW9uIE4oTyl7Ty5lbmQoKX1PYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoUi5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUi5wcm90b3R5cGUsIndyaXRhYmxlQnVmZmVyIix7''@;'; put 'put ''ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUi5wcm90b3R5cGUsIndyaXRhYmxlTGVuZ3RoIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFIucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAh''@;'; put 'put ''PT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihLKXt2b2lkIDA9PT10aGlzLl9yZWFkYWJsZVN0YXRlfHx2b2lkIDA9PT10aGlzLl93cml0YWJsZVN0YXRlfHwodGhp''@;'; put 'put ''cy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9Syx0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1LKX19KX0sMjcyNTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPV87dmFyIEk9Yig0NjA1KTtmdW5jdGlvbiBfKHApe2lmKCEodGhpcyBpbnN0YW5jZW9mIF8pKXJldHVy''@;'; put 'put ''biBuZXcgXyhwKTtJLmNhbGwodGhpcyxwKX1iKDU3MTcpKF8sSSksXy5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihwLFYsdyl7dyhudWxsLHApfX0sOTQ4MTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgXyxJPWIoNDE1NSk7Y2UuZXhwb3J0cz1nLGcuUmVhZGFibGVTdGF0ZT1C''@;'; put 'put ''LGIoNzE4Nyk7dmFyIE8sVj1mdW5jdGlvbihMZSxSZSl7cmV0dXJuIExlLmxpc3RlbmVycyhSZSkubGVuZ3RofSx3PWIoMjUwMyksUD1iKDg3NjQpLkJ1ZmZlcixGPSh0eXBlb2YgYi5nPCJ1Ij9iLmc6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5V''@;'; put 'put ''aW50OEFycmF5fHxmdW5jdGlvbigpe30sTj1iKDQ2MTYpO089TiYmTi5kZWJ1Z2xvZz9OLmRlYnVnbG9nKCJzdHJlYW0iKTpmdW5jdGlvbigpe307dmFyIHVlLGdlLF9lLEs9Yig3MzI3KSxaPWIoMTE5NSksVz1iKDI0NTcpLmdldEhpZ2hXYXRlck1hcmsscT1iKDQyODEpLnEsZWU9cS5FUlJf''@;'; put 'put ''SU5WQUxJRF9BUkdfVFlQRSxKPXEuRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRixyZT1xLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELGllPXEuRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVDtiKDU3MTcpKGcsdyk7dmFyIFRlPVouZXJyb3JPckRlc3Ryb3ksTWU9WyJlcnJv''@;'; put 'put ''ciIsImNsb3NlIiwiZGVzdHJveSIsInBhdXNlIiwicmVzdW1lIl07ZnVuY3Rpb24gQihIZSxMZSxSZSl7Xz1ffHxiKDY3NTMpLCJib29sZWFuIiE9dHlwZW9mIFJlJiYoUmU9TGUgaW5zdGFuY2VvZiBfKSx0aGlzLm9iamVjdE1vZGU9ISEoSGU9SGV8fHt9KS5vYmplY3RNb2RlLFJlJiYodGhp''@;'; put 'put ''cy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFIZS5yZWFkYWJsZU9iamVjdE1vZGUpLHRoaXMuaGlnaFdhdGVyTWFyaz1XKHRoaXMsSGUsInJlYWRhYmxlSGlnaFdhdGVyTWFyayIsUmUpLHRoaXMuYnVmZmVyPW5ldyBLLHRoaXMubGVuZ3RoPTAsdGhpcy5waXBlcz1udWxsLHRoaXMu''@;'; put 'put ''cGlwZXNDb3VudD0wLHRoaXMuZmxvd2luZz1udWxsLHRoaXMuZW5kZWQ9ITEsdGhpcy5lbmRFbWl0dGVkPSExLHRoaXMucmVhZGluZz0hMSx0aGlzLnN5bmM9ITAsdGhpcy5uZWVkUmVhZGFibGU9ITEsdGhpcy5lbWl0dGVkUmVhZGFibGU9ITEsdGhpcy5yZWFkYWJsZUxpc3RlbmluZz0hMSx0''@;'; put 'put ''aGlzLnJlc3VtZVNjaGVkdWxlZD0hMSx0aGlzLnBhdXNlZD0hMCx0aGlzLmVtaXRDbG9zZT0hMSE9PUhlLmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSEhSGUuYXV0b0Rlc3Ryb3ksdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWZhdWx0RW5jb2Rpbmc9SGUuZGVmYXVsdEVuY29kaW5nfHwi''@;'; put 'put ''dXRmOCIsdGhpcy5hd2FpdERyYWluPTAsdGhpcy5yZWFkaW5nTW9yZT0hMSx0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmVuY29kaW5nPW51bGwsSGUuZW5jb2RpbmcmJih1ZXx8KHVlPWIoMjU1MykucyksdGhpcy5kZWNvZGVyPW5ldyB1ZShIZS5lbmNvZGluZyksdGhpcy5lbmNvZGluZz1IZS5l''@;'; put 'put ''bmNvZGluZyl9ZnVuY3Rpb24gZyhIZSl7aWYoXz1ffHxiKDY3NTMpLCEodGhpcyBpbnN0YW5jZW9mIGcpKXJldHVybiBuZXcgZyhIZSk7dGhpcy5fcmVhZGFibGVTdGF0ZT1uZXcgQihIZSx0aGlzLHRoaXMgaW5zdGFuY2VvZiBfKSx0aGlzLnJlYWRhYmxlPSEwLEhlJiYoImZ1bmN0aW9uIj09''@;'; put 'put ''dHlwZW9mIEhlLnJlYWQmJih0aGlzLl9yZWFkPUhlLnJlYWQpLCJmdW5jdGlvbiI9PXR5cGVvZiBIZS5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1IZS5kZXN0cm95KSksdy5jYWxsKHRoaXMpfWZ1bmN0aW9uIHkoSGUsTGUsUmUsVmUsQWUpe08oInJlYWRhYmxlQWRkQ2h1bmsiLExlKTt2YXIg''@;'; put 'put ''X3QsRGU9SGUuX3JlYWRhYmxlU3RhdGU7aWYobnVsbD09PUxlKURlLnJlYWRpbmc9ITEsZnVuY3Rpb24gRShIZSxMZSl7aWYoTygib25Fb2ZDaHVuayIpLCFMZS5lbmRlZCl7aWYoTGUuZGVjb2Rlcil7dmFyIFJlPUxlLmRlY29kZXIuZW5kKCk7UmUmJlJlLmxlbmd0aCYmKExlLmJ1ZmZlci5w''@;'; put 'put ''dXNoKFJlKSxMZS5sZW5ndGgrPUxlLm9iamVjdE1vZGU/MTpSZS5sZW5ndGgpfUxlLmVuZGVkPSEwLExlLnN5bmM/bShIZSk6KExlLm5lZWRSZWFkYWJsZT0hMSxMZS5lbWl0dGVkUmVhZGFibGV8fChMZS5lbWl0dGVkUmVhZGFibGU9ITAsQShIZSkpKX19KEhlLERlKTtlbHNlIGlmKEFlfHwo''@;'; put 'put ''X3Q9ZnVuY3Rpb24gQyhIZSxMZSl7dmFyIFJlO3JldHVybiFmdW5jdGlvbiB6KEhlKXtyZXR1cm4gUC5pc0J1ZmZlcihIZSl8fEhlIGluc3RhbmNlb2YgRn0oTGUpJiYic3RyaW5nIiE9dHlwZW9mIExlJiZ2b2lkIDAhPT1MZSYmIUhlLm9iamVjdE1vZGUmJihSZT1uZXcgZWUoImNodW5rIixb''@;'; put 'put ''InN0cmluZyIsIkJ1ZmZlciIsIlVpbnQ4QXJyYXkiXSxMZSkpLFJlfShEZSxMZSkpLF90KVRlKEhlLF90KTtlbHNlIGlmKERlLm9iamVjdE1vZGV8fExlJiZMZS5sZW5ndGg+MClpZigic3RyaW5nIiE9dHlwZW9mIExlJiYhRGUub2JqZWN0TW9kZSYmT2JqZWN0LmdldFByb3RvdHlwZU9mKExl''@;'; put 'put ''KSE9PVAucHJvdG90eXBlJiYoTGU9ZnVuY3Rpb24gUihIZSl7cmV0dXJuIFAuZnJvbShIZSl9KExlKSksVmUpRGUuZW5kRW1pdHRlZD9UZShIZSxuZXcgaWUpOngoSGUsRGUsTGUsITApO2Vsc2UgaWYoRGUuZW5kZWQpVGUoSGUsbmV3IEopO2Vsc2V7aWYoRGUuZGVzdHJveWVkKXJldHVybiEx''@;'; put 'put ''O0RlLnJlYWRpbmc9ITEsRGUuZGVjb2RlciYmIVJlPyhMZT1EZS5kZWNvZGVyLndyaXRlKExlKSxEZS5vYmplY3RNb2RlfHwwIT09TGUubGVuZ3RoP3goSGUsRGUsTGUsITEpOmFlKEhlLERlKSk6eChIZSxEZSxMZSwhMSl9ZWxzZSBWZXx8KERlLnJlYWRpbmc9ITEsYWUoSGUsRGUpKTtyZXR1''@;'; put 'put ''cm4hRGUuZW5kZWQmJihEZS5sZW5ndGg8RGUuaGlnaFdhdGVyTWFya3x8MD09PURlLmxlbmd0aCl9ZnVuY3Rpb24geChIZSxMZSxSZSxWZSl7TGUuZmxvd2luZyYmMD09PUxlLmxlbmd0aCYmIUxlLnN5bmM/KExlLmF3YWl0RHJhaW49MCxIZS5lbWl0KCJkYXRhIixSZSkpOihMZS5sZW5ndGgr''@;'; put 'put ''PUxlLm9iamVjdE1vZGU/MTpSZS5sZW5ndGgsVmU/TGUuYnVmZmVyLnVuc2hpZnQoUmUpOkxlLmJ1ZmZlci5wdXNoKFJlKSxMZS5uZWVkUmVhZGFibGUmJm0oSGUpKSxhZShIZSxMZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGcucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiEx''@;'; put 'put ''LGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKExlKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9TGUpfX0pLGcucHJv''@;'; put 'put ''dG90eXBlLmRlc3Ryb3k9Wi5kZXN0cm95LGcucHJvdG90eXBlLl91bmRlc3Ryb3k9Wi51bmRlc3Ryb3ksZy5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oSGUsTGUpe0xlKEhlKX0sZy5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihIZSxMZSl7dmFyIFZlLFJlPXRoaXMuX3JlYWRhYmxlU3Rh''@;'; put 'put ''dGU7cmV0dXJuIFJlLm9iamVjdE1vZGU/VmU9ITA6InN0cmluZyI9PXR5cGVvZiBIZSYmKChMZT1MZXx8UmUuZGVmYXVsdEVuY29kaW5nKSE9PVJlLmVuY29kaW5nJiYoSGU9UC5mcm9tKEhlLExlKSxMZT0iIiksVmU9ITApLHkodGhpcyxIZSxMZSwhMSxWZSl9LGcucHJvdG90eXBlLnVuc2hp''@;'; put 'put ''ZnQ9ZnVuY3Rpb24oSGUpe3JldHVybiB5KHRoaXMsSGUsbnVsbCwhMCwhMSl9LGcucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7cmV0dXJuITE9PT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LGcucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0aW9uKEhlKXt1ZXx8KHVlPWIo''@;'; put 'put ''MjU1Mykucyk7dmFyIExlPW5ldyB1ZShIZSk7dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyPUxlLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyLmVuY29kaW5nO2Zvcih2YXIgUmU9dGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuaGVh''@;'; put 'put ''ZCxWZT0iIjtudWxsIT09UmU7KVZlKz1MZS53cml0ZShSZS5kYXRhKSxSZT1SZS5uZXh0O3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5jbGVhcigpLCIiIT09VmUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLnB1c2goVmUpLHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3Ro''@;'; put 'put ''PVZlLmxlbmd0aCx0aGlzfTt2YXIgVD0xMDczNzQxODI0O2Z1bmN0aW9uIGooSGUsTGUpe3JldHVybiBIZTw9MHx8MD09PUxlLmxlbmd0aCYmTGUuZW5kZWQ/MDpMZS5vYmplY3RNb2RlPzE6SGUhPUhlP0xlLmZsb3dpbmcmJkxlLmxlbmd0aD9MZS5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDpM''@;'; put 'put ''ZS5sZW5ndGg6KEhlPkxlLmhpZ2hXYXRlck1hcmsmJihMZS5oaWdoV2F0ZXJNYXJrPWZ1bmN0aW9uIEgoSGUpe3JldHVybiBIZT49VD9IZT1UOihIZS0tLEhlfD1IZT4+PjEsSGV8PUhlPj4+MixIZXw9SGU+Pj40LEhlfD1IZT4+PjgsSGV8PUhlPj4+MTYsSGUrKyksSGV9KEhlKSksSGU8PUxl''@;'; put 'put ''Lmxlbmd0aD9IZTpMZS5lbmRlZD9MZS5sZW5ndGg6KExlLm5lZWRSZWFkYWJsZT0hMCwwKSl9ZnVuY3Rpb24gbShIZSl7dmFyIExlPUhlLl9yZWFkYWJsZVN0YXRlO08oImVtaXRSZWFkYWJsZSIsTGUubmVlZFJlYWRhYmxlLExlLmVtaXR0ZWRSZWFkYWJsZSksTGUubmVlZFJlYWRhYmxlPSEx''@;'; put 'put ''LExlLmVtaXR0ZWRSZWFkYWJsZXx8KE8oImVtaXRSZWFkYWJsZSIsTGUuZmxvd2luZyksTGUuZW1pdHRlZFJlYWRhYmxlPSEwLEkubmV4dFRpY2soQSxIZSkpfWZ1bmN0aW9uIEEoSGUpe3ZhciBMZT1IZS5fcmVhZGFibGVTdGF0ZTtPKCJlbWl0UmVhZGFibGVfIixMZS5kZXN0cm95ZWQsTGUu''@;'; put 'put ''bGVuZ3RoLExlLmVuZGVkKSwhTGUuZGVzdHJveWVkJiYoTGUubGVuZ3RofHxMZS5lbmRlZCkmJihIZS5lbWl0KCJyZWFkYWJsZSIpLExlLmVtaXR0ZWRSZWFkYWJsZT0hMSksTGUubmVlZFJlYWRhYmxlPSFMZS5mbG93aW5nJiYhTGUuZW5kZWQmJkxlLmxlbmd0aDw9TGUuaGlnaFdhdGVyTWFy''@;'; put 'put ''ayx4ZShIZSl9ZnVuY3Rpb24gYWUoSGUsTGUpe0xlLnJlYWRpbmdNb3JlfHwoTGUucmVhZGluZ01vcmU9ITAsSS5uZXh0VGljayhuZSxIZSxMZSkpfWZ1bmN0aW9uIG5lKEhlLExlKXtmb3IoOyFMZS5yZWFkaW5nJiYhTGUuZW5kZWQmJihMZS5sZW5ndGg8TGUuaGlnaFdhdGVyTWFya3x8TGUu''@;'; put 'put ''Zmxvd2luZyYmMD09PUxlLmxlbmd0aCk7KXt2YXIgUmU9TGUubGVuZ3RoO2lmKE8oIm1heWJlUmVhZE1vcmUgcmVhZCAwIiksSGUucmVhZCgwKSxSZT09PUxlLmxlbmd0aClicmVha31MZS5yZWFkaW5nTW9yZT0hMX1mdW5jdGlvbiBDZShIZSl7dmFyIExlPUhlLl9yZWFkYWJsZVN0YXRlO0xl''@;'; put 'put ''LnJlYWRhYmxlTGlzdGVuaW5nPUhlLmxpc3RlbmVyQ291bnQoInJlYWRhYmxlIik+MCxMZS5yZXN1bWVTY2hlZHVsZWQmJiFMZS5wYXVzZWQ/TGUuZmxvd2luZz0hMDpIZS5saXN0ZW5lckNvdW50KCJkYXRhIik+MCYmSGUucmVzdW1lKCl9ZnVuY3Rpb24gVWUoSGUpe08oInJlYWRhYmxlIG5l''@;'; put 'put ''eHR0aWNrIHJlYWQgMCIpLEhlLnJlYWQoMCl9ZnVuY3Rpb24gaXQoSGUsTGUpe08oInJlc3VtZSIsTGUucmVhZGluZyksTGUucmVhZGluZ3x8SGUucmVhZCgwKSxMZS5yZXN1bWVTY2hlZHVsZWQ9ITEsSGUuZW1pdCgicmVzdW1lIikseGUoSGUpLExlLmZsb3dpbmcmJiFMZS5yZWFkaW5nJiZI''@;'; put 'put ''ZS5yZWFkKDApfWZ1bmN0aW9uIHhlKEhlKXt2YXIgTGU9SGUuX3JlYWRhYmxlU3RhdGU7Zm9yKE8oImZsb3ciLExlLmZsb3dpbmcpO0xlLmZsb3dpbmcmJm51bGwhPT1IZS5yZWFkKCk7KTt9ZnVuY3Rpb24geWUoSGUsTGUpe3JldHVybiAwPT09TGUubGVuZ3RoP251bGw6KExlLm9iamVjdE1v''@;'; put 'put ''ZGU/UmU9TGUuYnVmZmVyLnNoaWZ0KCk6IUhlfHxIZT49TGUubGVuZ3RoPyhSZT1MZS5kZWNvZGVyP0xlLmJ1ZmZlci5qb2luKCIiKToxPT09TGUuYnVmZmVyLmxlbmd0aD9MZS5idWZmZXIuZmlyc3QoKTpMZS5idWZmZXIuY29uY2F0KExlLmxlbmd0aCksTGUuYnVmZmVyLmNsZWFyKCkpOlJl''@;'; put 'put ''PUxlLmJ1ZmZlci5jb25zdW1lKEhlLExlLmRlY29kZXIpLFJlKTt2YXIgUmV9ZnVuY3Rpb24gS2UoSGUpe3ZhciBMZT1IZS5fcmVhZGFibGVTdGF0ZTtPKCJlbmRSZWFkYWJsZSIsTGUuZW5kRW1pdHRlZCksTGUuZW5kRW1pdHRlZHx8KExlLmVuZGVkPSEwLEkubmV4dFRpY2soamUsTGUsSGUp''@;'; put 'put ''KX1mdW5jdGlvbiBqZShIZSxMZSl7aWYoTygiZW5kUmVhZGFibGVOVCIsSGUuZW5kRW1pdHRlZCxIZS5sZW5ndGgpLCFIZS5lbmRFbWl0dGVkJiYwPT09SGUubGVuZ3RoJiYoSGUuZW5kRW1pdHRlZD0hMCxMZS5yZWFkYWJsZT0hMSxMZS5lbWl0KCJlbmQiKSxIZS5hdXRvRGVzdHJveSkpe3Zh''@;'; put 'put ''ciBSZT1MZS5fd3JpdGFibGVTdGF0ZTsoIVJlfHxSZS5hdXRvRGVzdHJveSYmUmUuZmluaXNoZWQpJiZMZS5kZXN0cm95KCl9fWZ1bmN0aW9uIGtlKEhlLExlKXtmb3IodmFyIFJlPTAsVmU9SGUubGVuZ3RoO1JlPFZlO1JlKyspaWYoSGVbUmVdPT09TGUpcmV0dXJuIFJlO3JldHVybi0xfWcu''@;'; put 'put ''cHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24oSGUpe08oInJlYWQiLEhlKSxIZT1wYXJzZUludChIZSwxMCk7dmFyIExlPXRoaXMuX3JlYWRhYmxlU3RhdGUsUmU9SGU7aWYoMCE9PUhlJiYoTGUuZW1pdHRlZFJlYWRhYmxlPSExKSwwPT09SGUmJkxlLm5lZWRSZWFkYWJsZSYmKCgwIT09TGUuaGln''@;'; put 'put ''aFdhdGVyTWFyaz9MZS5sZW5ndGg+PUxlLmhpZ2hXYXRlck1hcms6TGUubGVuZ3RoPjApfHxMZS5lbmRlZCkpcmV0dXJuIE8oInJlYWQ6IGVtaXRSZWFkYWJsZSIsTGUubGVuZ3RoLExlLmVuZGVkKSwwPT09TGUubGVuZ3RoJiZMZS5lbmRlZD9LZSh0aGlzKTptKHRoaXMpLG51bGw7aWYoMD09''@;'; put 'put ''PShIZT1qKEhlLExlKSkmJkxlLmVuZGVkKXJldHVybiAwPT09TGUubGVuZ3RoJiZLZSh0aGlzKSxudWxsO3ZhciBBZSxWZT1MZS5uZWVkUmVhZGFibGU7cmV0dXJuIE8oIm5lZWQgcmVhZGFibGUiLFZlKSwoMD09PUxlLmxlbmd0aHx8TGUubGVuZ3RoLUhlPExlLmhpZ2hXYXRlck1hcmspJiZP''@;'; put 'put ''KCJsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyayIsVmU9ITApLExlLmVuZGVkfHxMZS5yZWFkaW5nP08oInJlYWRpbmcgb3IgZW5kZWQiLFZlPSExKTpWZSYmKE8oImRvIHJlYWQiKSxMZS5yZWFkaW5nPSEwLExlLnN5bmM9ITAsMD09PUxlLmxlbmd0aCYmKExlLm5lZWRSZWFkYWJsZT0hMCks''@;'; put 'put ''dGhpcy5fcmVhZChMZS5oaWdoV2F0ZXJNYXJrKSxMZS5zeW5jPSExLExlLnJlYWRpbmd8fChIZT1qKFJlLExlKSkpLG51bGw9PT0oQWU9SGU+MD95ZShIZSxMZSk6bnVsbCk/KExlLm5lZWRSZWFkYWJsZT1MZS5sZW5ndGg8PUxlLmhpZ2hXYXRlck1hcmssSGU9MCk6KExlLmxlbmd0aC09SGUs''@;'; put 'put ''TGUuYXdhaXREcmFpbj0wKSwwPT09TGUubGVuZ3RoJiYoTGUuZW5kZWR8fChMZS5uZWVkUmVhZGFibGU9ITApLFJlIT09SGUmJkxlLmVuZGVkJiZLZSh0aGlzKSksbnVsbCE9PUFlJiZ0aGlzLmVtaXQoImRhdGEiLEFlKSxBZX0sZy5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oSGUpe1RlKHRo''@;'; put 'put ''aXMsbmV3IHJlKCJfcmVhZCgpIikpfSxnLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKEhlLExlKXt2YXIgUmU9dGhpcyxWZT10aGlzLl9yZWFkYWJsZVN0YXRlO3N3aXRjaChWZS5waXBlc0NvdW50KXtjYXNlIDA6VmUucGlwZXM9SGU7YnJlYWs7Y2FzZSAxOlZlLnBpcGVzPVtWZS5waXBlcyxI''@;'; put 'put ''ZV07YnJlYWs7ZGVmYXVsdDpWZS5waXBlcy5wdXNoKEhlKX1WZS5waXBlc0NvdW50Kz0xLE8oInBpcGUgY291bnQ9JWQgb3B0cz0laiIsVmUucGlwZXNDb3VudCxMZSk7dmFyIERlPUxlJiYhMT09PUxlLmVuZHx8SGU9PT1JLnN0ZG91dHx8SGU9PT1JLnN0ZGVycj90dDpydDtmdW5jdGlvbiBy''@;'; put 'put ''dCgpe08oIm9uZW5kIiksSGUuZW5kKCl9VmUuZW5kRW1pdHRlZD9JLm5leHRUaWNrKERlKTpSZS5vbmNlKCJlbmQiLERlKSxIZS5vbigidW5waXBlIixmdW5jdGlvbiBfdChJZSxhdCl7Tygib251bnBpcGUiKSxJZT09PVJlJiZhdCYmITE9PT1hdC5oYXNVbnBpcGVkJiYoYXQuaGFzVW5waXBl''@;'; put 'put ''ZD0hMCxmdW5jdGlvbiB2dCgpe08oImNsZWFudXAiKSxIZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLHV0KSxIZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixYZSksSGUucmVtb3ZlTGlzdGVuZXIoImRyYWluIixRZSksSGUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixlbiksSGUucmVtb3ZlTGlz''@;'; put 'put ''dGVuZXIoInVucGlwZSIsX3QpLFJlLnJlbW92ZUxpc3RlbmVyKCJlbmQiLHJ0KSxSZS5yZW1vdmVMaXN0ZW5lcigiZW5kIix0dCksUmUucmVtb3ZlTGlzdGVuZXIoImRhdGEiLFN0KSxzbj0hMCxWZS5hd2FpdERyYWluJiYoIUhlLl93cml0YWJsZVN0YXRlfHxIZS5fd3JpdGFibGVTdGF0ZS5u''@;'; put 'put ''ZWVkRHJhaW4pJiZRZSgpfSgpKX0pO3ZhciBRZT1mdW5jdGlvbiBzZShIZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIFJlPUhlLl9yZWFkYWJsZVN0YXRlO08oInBpcGVPbkRyYWluIixSZS5hd2FpdERyYWluKSxSZS5hd2FpdERyYWluJiZSZS5hd2FpdERyYWluLS0sMD09PVJlLmF3YWl0RHJh''@;'; put 'put ''aW4mJlYoSGUsImRhdGEiKSYmKFJlLmZsb3dpbmc9ITAseGUoSGUpKX19KFJlKTtIZS5vbigiZHJhaW4iLFFlKTt2YXIgc249ITE7ZnVuY3Rpb24gU3QoSWUpe08oIm9uZGF0YSIpO3ZhciBhdD1IZS53cml0ZShJZSk7TygiZGVzdC53cml0ZSIsYXQpLCExPT09YXQmJigoMT09PVZlLnBpcGVz''@;'; put 'put ''Q291bnQmJlZlLnBpcGVzPT09SGV8fFZlLnBpcGVzQ291bnQ+MSYmLTEhPT1rZShWZS5waXBlcyxIZSkpJiYhc24mJihPKCJmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UiLFZlLmF3YWl0RHJhaW4pLFZlLmF3YWl0RHJhaW4rKyksUmUucGF1c2UoKSl9ZnVuY3Rpb24gZW4oSWUpe08oIm9u''@;'; put 'put ''ZXJyb3IiLEllKSx0dCgpLEhlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsZW4pLDA9PT1WKEhlLCJlcnJvciIpJiZUZShIZSxJZSl9ZnVuY3Rpb24gdXQoKXtIZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixYZSksdHQoKX1mdW5jdGlvbiBYZSgpe08oIm9uZmluaXNoIiksSGUucmVtb3ZlTGlz''@;'; put 'put ''dGVuZXIoImNsb3NlIix1dCksdHQoKX1mdW5jdGlvbiB0dCgpe08oInVucGlwZSIpLFJlLnVucGlwZShIZSl9cmV0dXJuIFJlLm9uKCJkYXRhIixTdCksZnVuY3Rpb24gWmUoSGUsTGUsUmUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBIZS5wcmVwZW5kTGlzdGVuZXIpcmV0dXJuIEhlLnByZXBl''@;'; put 'put ''bmRMaXN0ZW5lcihMZSxSZSk7SGUuX2V2ZW50cyYmSGUuX2V2ZW50c1tMZV0/QXJyYXkuaXNBcnJheShIZS5fZXZlbnRzW0xlXSk/SGUuX2V2ZW50c1tMZV0udW5zaGlmdChSZSk6SGUuX2V2ZW50c1tMZV09W1JlLEhlLl9ldmVudHNbTGVdXTpIZS5vbihMZSxSZSl9KEhlLCJlcnJvciIsZW4p''@;'; put 'put ''LEhlLm9uY2UoImNsb3NlIix1dCksSGUub25jZSgiZmluaXNoIixYZSksSGUuZW1pdCgicGlwZSIsUmUpLFZlLmZsb3dpbmd8fChPKCJwaXBlIHJlc3VtZSIpLFJlLnJlc3VtZSgpKSxIZX0sZy5wcm90b3R5cGUudW5waXBlPWZ1bmN0aW9uKEhlKXt2YXIgTGU9dGhpcy5fcmVhZGFibGVTdGF0''@;'; put 'put ''ZSxSZT17aGFzVW5waXBlZDohMX07aWYoMD09PUxlLnBpcGVzQ291bnQpcmV0dXJuIHRoaXM7aWYoMT09PUxlLnBpcGVzQ291bnQpcmV0dXJuIEhlJiZIZSE9PUxlLnBpcGVzfHwoSGV8fChIZT1MZS5waXBlcyksTGUucGlwZXM9bnVsbCxMZS5waXBlc0NvdW50PTAsTGUuZmxvd2luZz0hMSxI''@;'; put 'put ''ZSYmSGUuZW1pdCgidW5waXBlIix0aGlzLFJlKSksdGhpcztpZighSGUpe3ZhciBWZT1MZS5waXBlcyxBZT1MZS5waXBlc0NvdW50O0xlLnBpcGVzPW51bGwsTGUucGlwZXNDb3VudD0wLExlLmZsb3dpbmc9ITE7Zm9yKHZhciBEZT0wO0RlPEFlO0RlKyspVmVbRGVdLmVtaXQoInVucGlwZSIs''@;'; put 'put ''dGhpcyx7aGFzVW5waXBlZDohMX0pO3JldHVybiB0aGlzfXZhciBfdD1rZShMZS5waXBlcyxIZSk7cmV0dXJuLTE9PT1fdHx8KExlLnBpcGVzLnNwbGljZShfdCwxKSxMZS5waXBlc0NvdW50LT0xLDE9PT1MZS5waXBlc0NvdW50JiYoTGUucGlwZXM9TGUucGlwZXNbMF0pLEhlLmVtaXQoInVu''@;'; put 'put ''cGlwZSIsdGhpcyxSZSkpLHRoaXN9LGcucHJvdG90eXBlLmFkZExpc3RlbmVyPWcucHJvdG90eXBlLm9uPWZ1bmN0aW9uKEhlLExlKXt2YXIgUmU9dy5wcm90b3R5cGUub24uY2FsbCh0aGlzLEhlLExlKSxWZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiJkYXRhIj09PUhlPyhWZS5yZWFk''@;'; put 'put ''YWJsZUxpc3RlbmluZz10aGlzLmxpc3RlbmVyQ291bnQoInJlYWRhYmxlIik+MCwhMSE9PVZlLmZsb3dpbmcmJnRoaXMucmVzdW1lKCkpOiJyZWFkYWJsZSI9PT1IZSYmIVZlLmVuZEVtaXR0ZWQmJiFWZS5yZWFkYWJsZUxpc3RlbmluZyYmKFZlLnJlYWRhYmxlTGlzdGVuaW5nPVZlLm5lZWRS''@;'; put 'put ''ZWFkYWJsZT0hMCxWZS5mbG93aW5nPSExLFZlLmVtaXR0ZWRSZWFkYWJsZT0hMSxPKCJvbiByZWFkYWJsZSIsVmUubGVuZ3RoLFZlLnJlYWRpbmcpLFZlLmxlbmd0aD9tKHRoaXMpOlZlLnJlYWRpbmd8fEkubmV4dFRpY2soVWUsdGhpcykpLFJlfSxnLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5l''@;'; put 'put ''cj1mdW5jdGlvbihIZSxMZSl7dmFyIFJlPXcucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLmNhbGwodGhpcyxIZSxMZSk7cmV0dXJuInJlYWRhYmxlIj09PUhlJiZJLm5leHRUaWNrKENlLHRoaXMpLFJlfSxnLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oSGUpe3ZhciBM''@;'; put 'put ''ZT13LnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybigicmVhZGFibGUiPT09SGV8fHZvaWQgMD09PUhlKSYmSS5uZXh0VGljayhDZSx0aGlzKSxMZX0sZy5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7dmFyIEhlPXRoaXMuX3JlYWRh''@;'; put 'put ''YmxlU3RhdGU7cmV0dXJuIEhlLmZsb3dpbmd8fChPKCJyZXN1bWUiKSxIZS5mbG93aW5nPSFIZS5yZWFkYWJsZUxpc3RlbmluZyxmdW5jdGlvbiBKZShIZSxMZSl7TGUucmVzdW1lU2NoZWR1bGVkfHwoTGUucmVzdW1lU2NoZWR1bGVkPSEwLEkubmV4dFRpY2soaXQsSGUsTGUpKX0odGhpcyxI''@;'; put 'put ''ZSkpLEhlLnBhdXNlZD0hMSx0aGlzfSxnLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3JldHVybiBPKCJjYWxsIHBhdXNlIGZsb3dpbmc9JWoiLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyksITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJihPKCJwYXVzZSIpLHRoaXMu''@;'; put 'put ''X3JlYWRhYmxlU3RhdGUuZmxvd2luZz0hMSx0aGlzLmVtaXQoInBhdXNlIikpLHRoaXMuX3JlYWRhYmxlU3RhdGUucGF1c2VkPSEwLHRoaXN9LGcucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24oSGUpe3ZhciBMZT10aGlzLFJlPXRoaXMuX3JlYWRhYmxlU3RhdGUsVmU9ITE7Zm9yKHZhciBBZSBp''@;'; put 'put ''biBIZS5vbigiZW5kIixmdW5jdGlvbigpe2lmKE8oIndyYXBwZWQgZW5kIiksUmUuZGVjb2RlciYmIVJlLmVuZGVkKXt2YXIgX3Q9UmUuZGVjb2Rlci5lbmQoKTtfdCYmX3QubGVuZ3RoJiZMZS5wdXNoKF90KX1MZS5wdXNoKG51bGwpfSksSGUub24oImRhdGEiLGZ1bmN0aW9uKF90KXtPKCJ3''@;'; put 'put ''cmFwcGVkIGRhdGEiKSxSZS5kZWNvZGVyJiYoX3Q9UmUuZGVjb2Rlci53cml0ZShfdCkpLFJlLm9iamVjdE1vZGUmJm51bGw9PV90fHwhKFJlLm9iamVjdE1vZGV8fF90JiZfdC5sZW5ndGgpfHxMZS5wdXNoKF90KXx8KFZlPSEwLEhlLnBhdXNlKCkpfSksSGUpdm9pZCAwPT09dGhpc1tBZV0m''@;'; put 'put ''JiJmdW5jdGlvbiI9PXR5cGVvZiBIZVtBZV0mJih0aGlzW0FlXT1mdW5jdGlvbihydCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEhlW3J0XS5hcHBseShIZSxhcmd1bWVudHMpfX0oQWUpKTtmb3IodmFyIERlPTA7RGU8TWUubGVuZ3RoO0RlKyspSGUub24oTWVbRGVdLHRoaXMuZW1pdC5i''@;'; put 'put ''aW5kKHRoaXMsTWVbRGVdKSk7cmV0dXJuIHRoaXMuX3JlYWQ9ZnVuY3Rpb24oX3Qpe08oIndyYXBwZWQgX3JlYWQiLF90KSxWZSYmKFZlPSExLEhlLnJlc3VtZSgpKX0sdGhpc30sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKGcucHJvdG90eXBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT1nZSYmKGdlPWIoNTg1MCkpLGdlKHRoaXMpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGcucHJvdG90eXBlLCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0''@;'; put 'put ''YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGcucHJvdG90eXBlLCJyZWFkYWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyfX0pLE9iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShnLnByb3RvdHlwZSwicmVhZGFibGVGbG93aW5nIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxzZXQ6ZnVuY3Rpb24oTGUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJs''@;'; put 'put ''ZVN0YXRlLmZsb3dpbmc9TGUpfX0pLGcuX2Zyb21MaXN0PXllLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnLnByb3RvdHlwZSwicmVhZGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aH19KSwiZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgU3ltYm9sJiYoZy5mcm9tPWZ1bmN0aW9uKEhlLExlKXtyZXR1cm4gdm9pZCAwPT09X2UmJihfZT1iKDUxNjcpKSxfZShnLEhlLExlKX0pfSw0NjA1OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9Ujt2YXIgST1iKDQyODEpLnEsXz1JLkVSUl9NRVRIT0RfTk9U''@;'; put 'put ''X0lNUExFTUVOVEVELHA9SS5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssVj1JLkVSUl9UUkFOU0ZPUk1fQUxSRUFEWV9UUkFOU0ZPUk1JTkcsdz1JLkVSUl9UUkFOU0ZPUk1fV0lUSF9MRU5HVEhfMCxQPWIoNjc1Myk7ZnVuY3Rpb24gRihPLEspe3ZhciBaPXRoaXMuX3RyYW5zZm9ybVN0YXRlO1ou''@;'; put 'put ''dHJhbnNmb3JtaW5nPSExO3ZhciBZPVoud3JpdGVjYjtpZihudWxsPT09WSlyZXR1cm4gdGhpcy5lbWl0KCJlcnJvciIsbmV3IHApO1oud3JpdGVjaHVuaz1udWxsLFoud3JpdGVjYj1udWxsLG51bGwhPUsmJnRoaXMucHVzaChLKSxZKE8pO3ZhciBXPXRoaXMuX3JlYWRhYmxlU3RhdGU7Vy5y''@;'; put 'put ''ZWFkaW5nPSExLChXLm5lZWRSZWFkYWJsZXx8Vy5sZW5ndGg8Vy5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChXLmhpZ2hXYXRlck1hcmspfWZ1bmN0aW9uIFIoTyl7aWYoISh0aGlzIGluc3RhbmNlb2YgUikpcmV0dXJuIG5ldyBSKE8pO1AuY2FsbCh0aGlzLE8pLHRoaXMuX3RyYW5zZm9y''@;'; put 'put ''bVN0YXRlPXthZnRlclRyYW5zZm9ybTpGLmJpbmQodGhpcyksbmVlZFRyYW5zZm9ybTohMSx0cmFuc2Zvcm1pbmc6ITEsd3JpdGVjYjpudWxsLHdyaXRlY2h1bms6bnVsbCx3cml0ZWVuY29kaW5nOm51bGx9LHRoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlPSEwLHRoaXMuX3JlYWRh''@;'; put 'put ''YmxlU3RhdGUuc3luYz0hMSxPJiYoImZ1bmN0aW9uIj09dHlwZW9mIE8udHJhbnNmb3JtJiYodGhpcy5fdHJhbnNmb3JtPU8udHJhbnNmb3JtKSwiZnVuY3Rpb24iPT10eXBlb2YgTy5mbHVzaCYmKHRoaXMuX2ZsdXNoPU8uZmx1c2gpKSx0aGlzLm9uKCJwcmVmaW5pc2giLHopfWZ1bmN0aW9u''@;'; put 'put ''IHooKXt2YXIgTz10aGlzOyJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLl9mbHVzaHx8dGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ/Tih0aGlzLG51bGwsbnVsbCk6dGhpcy5fZmx1c2goZnVuY3Rpb24oSyxaKXtOKE8sSyxaKX0pfWZ1bmN0aW9uIE4oTyxLLFope2lmKEspcmV0dXJuIE8u''@;'; put 'put ''ZW1pdCgiZXJyb3IiLEspO2lmKG51bGwhPVomJk8ucHVzaChaKSxPLl93cml0YWJsZVN0YXRlLmxlbmd0aCl0aHJvdyBuZXcgdztpZihPLl90cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1pbmcpdGhyb3cgbmV3IFY7cmV0dXJuIE8ucHVzaChudWxsKX1iKDU3MTcpKFIsUCksUi5wcm90b3R5cGUu''@;'; put 'put ''cHVzaD1mdW5jdGlvbihPLEspe3JldHVybiB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5uZWVkVHJhbnNmb3JtPSExLFAucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLE8sSyl9LFIucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oTyxLLFope1oobmV3IF8oIl90cmFuc2Zvcm0oKSIpKX0sUi5w''@;'; put 'put ''cm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKE8sSyxaKXt2YXIgWT10aGlzLl90cmFuc2Zvcm1TdGF0ZTtpZihZLndyaXRlY2I9WixZLndyaXRlY2h1bms9TyxZLndyaXRlZW5jb2Rpbmc9SywhWS50cmFuc2Zvcm1pbmcpe3ZhciBXPXRoaXMuX3JlYWRhYmxlU3RhdGU7KFkubmVlZFRyYW5zZm9y''@;'; put 'put ''bXx8Vy5uZWVkUmVhZGFibGV8fFcubGVuZ3RoPFcuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoVy5oaWdoV2F0ZXJNYXJrKX19LFIucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKE8pe3ZhciBLPXRoaXMuX3RyYW5zZm9ybVN0YXRlO251bGw9PT1LLndyaXRlY2h1bmt8fEsudHJhbnNmb3Jt''@;'; put 'put ''aW5nP0submVlZFRyYW5zZm9ybT0hMDooSy50cmFuc2Zvcm1pbmc9ITAsdGhpcy5fdHJhbnNmb3JtKEsud3JpdGVjaHVuayxLLndyaXRlZW5jb2RpbmcsSy5hZnRlclRyYW5zZm9ybSkpfSxSLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihPLEspe1AucHJvdG90eXBlLl9kZXN0cm95LmNh''@;'; put 'put ''bGwodGhpcyxPLGZ1bmN0aW9uKFope0soWil9KX19LDQyMjk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIFYsST1iKDQxNTUpO2Z1bmN0aW9uIHAoeGUpe3ZhciB5ZT10aGlzO3RoaXMubmV4dD1udWxsLHRoaXMuZW50cnk9bnVsbCx0aGlzLmZpbmlzaD1mdW5jdGlvbigpeyFmdW5jdGlv''@;'; put 'put ''biBpdCh4ZSx5ZSxLZSl7dmFyIGplPXhlLmVudHJ5O2Zvcih4ZS5lbnRyeT1udWxsO2plOyl7dmFyIGtlPWplLmNhbGxiYWNrO3llLnBlbmRpbmdjYi0tLGtlKEtlKSxqZT1qZS5uZXh0fXllLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0PXhlfSh5ZSx4ZSl9fWNlLmV4cG9ydHM9QixCLldyaXRh''@;'; put 'put ''YmxlU3RhdGU9TWU7dmFyIFplLHc9e2RlcHJlY2F0ZTpiKDQ5MjcpfSxQPWIoMjUwMyksRj1iKDg3NjQpLkJ1ZmZlcixSPSh0eXBlb2YgYi5nPCJ1Ij9iLmc6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5VaW50OEFycmF5fHxmdW5jdGlvbigpe30s''@;'; put 'put ''Tz1iKDExOTUpLFo9YigyNDU3KS5nZXRIaWdoV2F0ZXJNYXJrLFk9Yig0MjgxKS5xLFc9WS5FUlJfSU5WQUxJRF9BUkdfVFlQRSxxPVkuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsZWU9WS5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssSj1ZLkVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUscmU9WS5F''@;'; put 'put ''UlJfU1RSRUFNX0RFU1RST1lFRCxpZT1ZLkVSUl9TVFJFQU1fTlVMTF9WQUxVRVMsdWU9WS5FUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCxnZT1ZLkVSUl9VTktOT1dOX0VOQ09ESU5HLF9lPU8uZXJyb3JPckRlc3Ryb3k7ZnVuY3Rpb24gVGUoKXt9ZnVuY3Rpb24gTWUoeGUseWUsS2Upe1Y9''@;'; put 'put ''Vnx8Yig2NzUzKSwiYm9vbGVhbiIhPXR5cGVvZiBLZSYmKEtlPXllIGluc3RhbmNlb2YgViksdGhpcy5vYmplY3RNb2RlPSEhKHhlPXhlfHx7fSkub2JqZWN0TW9kZSxLZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEheGUud3JpdGFibGVPYmplY3RNb2RlKSx0aGlzLmhp''@;'; put 'put ''Z2hXYXRlck1hcms9Wih0aGlzLHhlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLEtlKSx0aGlzLmZpbmFsQ2FsbGVkPSExLHRoaXMubmVlZERyYWluPSExLHRoaXMuZW5kaW5nPSExLHRoaXMuZW5kZWQ9ITEsdGhpcy5maW5pc2hlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlY29kZVN0''@;'; put 'put ''cmluZ3M9ISghMT09PXhlLmRlY29kZVN0cmluZ3MpLHRoaXMuZGVmYXVsdEVuY29kaW5nPXhlLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMubGVuZ3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlz''@;'; put 'put ''Lm9ud3JpdGU9ZnVuY3Rpb24oa2UpeyFmdW5jdGlvbiBFKHhlLHllKXt2YXIgS2U9eGUuX3dyaXRhYmxlU3RhdGUsamU9S2Uuc3luYyxrZT1LZS53cml0ZWNiO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBrZSl0aHJvdyBuZXcgZWU7aWYoZnVuY3Rpb24gaih4ZSl7eGUud3JpdGluZz0hMSx4ZS53''@;'; put 'put ''cml0ZWNiPW51bGwseGUubGVuZ3RoLT14ZS53cml0ZWxlbix4ZS53cml0ZWxlbj0wfShLZSkseWUpIWZ1bmN0aW9uIEgoeGUseWUsS2UsamUsa2Upey0teWUucGVuZGluZ2NiLEtlPyhJLm5leHRUaWNrKGtlLGplKSxJLm5leHRUaWNrKFVlLHhlLHllKSx4ZS5fd3JpdGFibGVTdGF0ZS5lcnJv''@;'; put 'put ''ckVtaXR0ZWQ9ITAsX2UoeGUsamUpKTooa2UoamUpLHhlLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxfZSh4ZSxqZSksVWUoeGUseWUpKX0oeGUsS2UsamUseWUsa2UpO2Vsc2V7dmFyIEhlPW5lKEtlKXx8eGUuZGVzdHJveWVkOyFIZSYmIUtlLmNvcmtlZCYmIUtlLmJ1ZmZlclBy''@;'; put 'put ''b2Nlc3NpbmcmJktlLmJ1ZmZlcmVkUmVxdWVzdCYmYWUoeGUsS2UpLGplP0kubmV4dFRpY2sobSx4ZSxLZSxIZSxrZSk6bSh4ZSxLZSxIZSxrZSl9fSh5ZSxrZSl9LHRoaXMud3JpdGVjYj1udWxsLHRoaXMud3JpdGVsZW49MCx0aGlzLmJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMubGFzdEJ1''@;'; put 'put ''ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMucGVuZGluZ2NiPTAsdGhpcy5wcmVmaW5pc2hlZD0hMSx0aGlzLmVycm9yRW1pdHRlZD0hMSx0aGlzLmVtaXRDbG9zZT0hMSE9PXhlLmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSEheGUuYXV0b0Rlc3Ryb3ksdGhpcy5idWZmZXJlZFJlcXVlc3RD''@;'; put 'put ''b3VudD0wLHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBwKHRoaXMpfWZ1bmN0aW9uIEIoeGUpe3ZhciB5ZT10aGlzIGluc3RhbmNlb2YoVj1WfHxiKDY3NTMpKTtpZigheWUmJiFaZS5jYWxsKEIsdGhpcykpcmV0dXJuIG5ldyBCKHhlKTt0aGlzLl93cml0YWJsZVN0YXRlPW5ldyBNZSh4''@;'; put 'put ''ZSx0aGlzLHllKSx0aGlzLndyaXRhYmxlPSEwLHhlJiYoImZ1bmN0aW9uIj09dHlwZW9mIHhlLndyaXRlJiYodGhpcy5fd3JpdGU9eGUud3JpdGUpLCJmdW5jdGlvbiI9PXR5cGVvZiB4ZS53cml0ZXYmJih0aGlzLl93cml0ZXY9eGUud3JpdGV2KSwiZnVuY3Rpb24iPT10eXBlb2YgeGUuZGVz''@;'; put 'put ''dHJveSYmKHRoaXMuX2Rlc3Ryb3k9eGUuZGVzdHJveSksImZ1bmN0aW9uIj09dHlwZW9mIHhlLmZpbmFsJiYodGhpcy5fZmluYWw9eGUuZmluYWwpKSxQLmNhbGwodGhpcyl9ZnVuY3Rpb24gVCh4ZSx5ZSxLZSxqZSxrZSxIZSxMZSl7eWUud3JpdGVsZW49amUseWUud3JpdGVjYj1MZSx5ZS53''@;'; put 'put ''cml0aW5nPSEwLHllLnN5bmM9ITAseWUuZGVzdHJveWVkP3llLm9ud3JpdGUobmV3IHJlKCJ3cml0ZSIpKTpLZT94ZS5fd3JpdGV2KGtlLHllLm9ud3JpdGUpOnhlLl93cml0ZShrZSxIZSx5ZS5vbndyaXRlKSx5ZS5zeW5jPSExfWZ1bmN0aW9uIG0oeGUseWUsS2UsamUpe0tlfHxmdW5jdGlv''@;'; put 'put ''biBBKHhlLHllKXswPT09eWUubGVuZ3RoJiZ5ZS5uZWVkRHJhaW4mJih5ZS5uZWVkRHJhaW49ITEseGUuZW1pdCgiZHJhaW4iKSl9KHhlLHllKSx5ZS5wZW5kaW5nY2ItLSxqZSgpLFVlKHhlLHllKX1mdW5jdGlvbiBhZSh4ZSx5ZSl7eWUuYnVmZmVyUHJvY2Vzc2luZz0hMDt2YXIgS2U9eWUu''@;'; put 'put ''YnVmZmVyZWRSZXF1ZXN0O2lmKHhlLl93cml0ZXYmJktlJiZLZS5uZXh0KXt2YXIga2U9bmV3IEFycmF5KHllLmJ1ZmZlcmVkUmVxdWVzdENvdW50KSxIZT15ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU7SGUuZW50cnk9S2U7Zm9yKHZhciBMZT0wLFJlPSEwO0tlOylrZVtMZV09S2UsS2UuaXNCdWZ8''@;'; put 'put ''fChSZT0hMSksS2U9S2UubmV4dCxMZSs9MTtrZS5hbGxCdWZmZXJzPVJlLFQoeGUseWUsITAseWUubGVuZ3RoLGtlLCIiLEhlLmZpbmlzaCkseWUucGVuZGluZ2NiKysseWUubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLEhlLm5leHQ/KHllLmNvcmtlZFJlcXVlc3RzRnJlZT1IZS5uZXh0LEhl''@;'; put 'put ''Lm5leHQ9bnVsbCk6eWUuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBwKHllKSx5ZS5idWZmZXJlZFJlcXVlc3RDb3VudD0wfWVsc2V7Zm9yKDtLZTspe3ZhciBWZT1LZS5jaHVuaztpZihUKHhlLHllLCExLHllLm9iamVjdE1vZGU/MTpWZS5sZW5ndGgsVmUsS2UuZW5jb2RpbmcsS2UuY2FsbGJh''@;'; put 'put ''Y2spLEtlPUtlLm5leHQseWUuYnVmZmVyZWRSZXF1ZXN0Q291bnQtLSx5ZS53cml0aW5nKWJyZWFrfW51bGw9PT1LZSYmKHllLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCl9eWUuYnVmZmVyZWRSZXF1ZXN0PUtlLHllLmJ1ZmZlclByb2Nlc3Npbmc9ITF9ZnVuY3Rpb24gbmUoeGUpe3JldHVy''@;'; put 'put ''biB4ZS5lbmRpbmcmJjA9PT14ZS5sZW5ndGgmJm51bGw9PT14ZS5idWZmZXJlZFJlcXVlc3QmJiF4ZS5maW5pc2hlZCYmIXhlLndyaXRpbmd9ZnVuY3Rpb24gc2UoeGUseWUpe3hlLl9maW5hbChmdW5jdGlvbihLZSl7eWUucGVuZGluZ2NiLS0sS2UmJl9lKHhlLEtlKSx5ZS5wcmVmaW5pc2hl''@;'; put 'put ''ZD0hMCx4ZS5lbWl0KCJwcmVmaW5pc2giKSxVZSh4ZSx5ZSl9KX1mdW5jdGlvbiBVZSh4ZSx5ZSl7dmFyIEtlPW5lKHllKTtpZihLZSYmKGZ1bmN0aW9uIENlKHhlLHllKXsheWUucHJlZmluaXNoZWQmJiF5ZS5maW5hbENhbGxlZCYmKCJmdW5jdGlvbiIhPXR5cGVvZiB4ZS5fZmluYWx8fHll''@;'; put 'put ''LmRlc3Ryb3llZD8oeWUucHJlZmluaXNoZWQ9ITAseGUuZW1pdCgicHJlZmluaXNoIikpOih5ZS5wZW5kaW5nY2IrKyx5ZS5maW5hbENhbGxlZD0hMCxJLm5leHRUaWNrKHNlLHhlLHllKSkpfSh4ZSx5ZSksMD09PXllLnBlbmRpbmdjYiYmKHllLmZpbmlzaGVkPSEwLHhlLmVtaXQoImZpbmlz''@;'; put 'put ''aCIpLHllLmF1dG9EZXN0cm95KSkpe3ZhciBqZT14ZS5fcmVhZGFibGVTdGF0ZTsoIWplfHxqZS5hdXRvRGVzdHJveSYmamUuZW5kRW1pdHRlZCkmJnhlLmRlc3Ryb3koKX1yZXR1cm4gS2V9Yig1NzE3KShCLFApLE1lLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHll''@;'; put 'put ''PXRoaXMuYnVmZmVyZWRSZXF1ZXN0LEtlPVtdO3llOylLZS5wdXNoKHllKSx5ZT15ZS5uZXh0O3JldHVybiBLZX0sZnVuY3Rpb24oKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KE1lLnByb3RvdHlwZSwiYnVmZmVyIix7Z2V0OncuZGVwcmVjYXRlKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''Z2V0QnVmZmVyKCl9LCJfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciBpbnN0ZWFkLiIsIkRFUDAwMDMiKX0pfWNhdGNoe319KCksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmhhc0luc3RhbmNlJiYiZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0/KFplPUZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLFN5bWJvbC5oYXNJbnN0YW5jZSx7dmFsdWU6ZnVuY3Rpb24oeWUpe3JldHVy''@;'; put 'put ''biEhWmUuY2FsbCh0aGlzLHllKXx8dGhpcz09PUImJnllJiZ5ZS5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIE1lfX0pKTpaZT1mdW5jdGlvbih5ZSl7cmV0dXJuIHllIGluc3RhbmNlb2YgdGhpc30sQi5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigpe19lKHRoaXMsbmV3IEopfSxCLnByb3Rv''@;'; put 'put ''dHlwZS53cml0ZT1mdW5jdGlvbih4ZSx5ZSxLZSl7dmFyIGplPXRoaXMuX3dyaXRhYmxlU3RhdGUsa2U9ITEsSGU9IWplLm9iamVjdE1vZGUmJmZ1bmN0aW9uIE4oeGUpe3JldHVybiBGLmlzQnVmZmVyKHhlKXx8eGUgaW5zdGFuY2VvZiBSfSh4ZSk7cmV0dXJuIEhlJiYhRi5pc0J1ZmZlcih4''@;'; put 'put ''ZSkmJih4ZT1mdW5jdGlvbiB6KHhlKXtyZXR1cm4gRi5mcm9tKHhlKX0oeGUpKSwiZnVuY3Rpb24iPT10eXBlb2YgeWUmJihLZT15ZSx5ZT1udWxsKSxIZT95ZT0iYnVmZmVyIjp5ZXx8KHllPWplLmRlZmF1bHRFbmNvZGluZyksImZ1bmN0aW9uIiE9dHlwZW9mIEtlJiYoS2U9VGUpLGplLmVu''@;'; put 'put ''ZGluZz9mdW5jdGlvbiBnKHhlLHllKXt2YXIgS2U9bmV3IHVlO19lKHhlLEtlKSxJLm5leHRUaWNrKHllLEtlKX0odGhpcyxLZSk6KEhlfHxmdW5jdGlvbiB5KHhlLHllLEtlLGplKXt2YXIga2U7cmV0dXJuIG51bGw9PT1LZT9rZT1uZXcgaWU6InN0cmluZyIhPXR5cGVvZiBLZSYmIXllLm9i''@;'; put 'put ''amVjdE1vZGUmJihrZT1uZXcgVygiY2h1bmsiLFsic3RyaW5nIiwiQnVmZmVyIl0sS2UpKSwha2V8fChfZSh4ZSxrZSksSS5uZXh0VGljayhqZSxrZSksITEpfSh0aGlzLGplLHhlLEtlKSkmJihqZS5wZW5kaW5nY2IrKyxrZT1mdW5jdGlvbiBDKHhlLHllLEtlLGplLGtlLEhlKXtpZighS2Up''@;'; put 'put ''e3ZhciBMZT1mdW5jdGlvbiB4KHhlLHllLEtlKXtyZXR1cm4heGUub2JqZWN0TW9kZSYmITEhPT14ZS5kZWNvZGVTdHJpbmdzJiYic3RyaW5nIj09dHlwZW9mIHllJiYoeWU9Ri5mcm9tKHllLEtlKSkseWV9KHllLGplLGtlKTtqZSE9PUxlJiYoS2U9ITAsa2U9ImJ1ZmZlciIsamU9TGUpfXZh''@;'; put 'put ''ciBSZT15ZS5vYmplY3RNb2RlPzE6amUubGVuZ3RoO3llLmxlbmd0aCs9UmU7dmFyIFZlPXllLmxlbmd0aDx5ZS5oaWdoV2F0ZXJNYXJrO2lmKFZlfHwoeWUubmVlZERyYWluPSEwKSx5ZS53cml0aW5nfHx5ZS5jb3JrZWQpe3ZhciBBZT15ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O3llLmxhc3RC''@;'; put 'put ''dWZmZXJlZFJlcXVlc3Q9e2NodW5rOmplLGVuY29kaW5nOmtlLGlzQnVmOktlLGNhbGxiYWNrOkhlLG5leHQ6bnVsbH0sQWU/QWUubmV4dD15ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0OnllLmJ1ZmZlcmVkUmVxdWVzdD15ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0LHllLmJ1ZmZlcmVkUmVxdWVzdENv''@;'; put 'put ''dW50Kz0xfWVsc2UgVCh4ZSx5ZSwhMSxSZSxqZSxrZSxIZSk7cmV0dXJuIFZlfSh0aGlzLGplLEhlLHhlLHllLEtlKSksa2V9LEIucHJvdG90eXBlLmNvcms9ZnVuY3Rpb24oKXt0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsrfSxCLnByb3RvdHlwZS51bmNvcms9ZnVuY3Rpb24oKXt2YXIg''@;'; put 'put ''eGU9dGhpcy5fd3JpdGFibGVTdGF0ZTt4ZS5jb3JrZWQmJih4ZS5jb3JrZWQtLSwheGUud3JpdGluZyYmIXhlLmNvcmtlZCYmIXhlLmJ1ZmZlclByb2Nlc3NpbmcmJnhlLmJ1ZmZlcmVkUmVxdWVzdCYmYWUodGhpcyx4ZSkpfSxCLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2Rpbmc9ZnVuY3Rp''@;'; put 'put ''b24oeWUpe2lmKCJzdHJpbmciPT10eXBlb2YgeWUmJih5ZT15ZS50b0xvd2VyQ2FzZSgpKSwhKFsiaGV4IiwidXRmOCIsInV0Zi04IiwiYXNjaWkiLCJiaW5hcnkiLCJiYXNlNjQiLCJ1Y3MyIiwidWNzLTIiLCJ1dGYxNmxlIiwidXRmLTE2bGUiLCJyYXciXS5pbmRleE9mKCh5ZSsiIikudG9M''@;'; put 'put ''b3dlckNhc2UoKSk+LTEpKXRocm93IG5ldyBnZSh5ZSk7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nPXllLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLnByb3RvdHlwZSwid3JpdGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''d3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLEIucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbih4ZSx5ZSxLZSl7S2UobmV3IHEoIl93cml0ZSgpIikpfSxCLnByb3RvdHlwZS5fd3JpdGV2PW51bGwsQi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKHhlLHllLEtlKXt2YXIgamU9dGhpcy5f''@;'; put 'put ''d3JpdGFibGVTdGF0ZTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgeGU/KEtlPXhlLHhlPW51bGwseWU9bnVsbCk6ImZ1bmN0aW9uIj09dHlwZW9mIHllJiYoS2U9eWUseWU9bnVsbCksbnVsbCE9eGUmJnRoaXMud3JpdGUoeGUseWUpLGplLmNvcmtlZCYmKGplLmNvcmtlZD0xLHRoaXMudW5j''@;'; put 'put ''b3JrKCkpLGplLmVuZGluZ3x8ZnVuY3Rpb24gSmUoeGUseWUsS2Upe3llLmVuZGluZz0hMCxVZSh4ZSx5ZSksS2UmJih5ZS5maW5pc2hlZD9JLm5leHRUaWNrKEtlKTp4ZS5vbmNlKCJmaW5pc2giLEtlKSkseWUuZW5kZWQ9ITAseGUud3JpdGFibGU9ITF9KHRoaXMsamUsS2UpLHRoaXN9LE9i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShCLnByb3RvdHlwZSwid3JpdGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQi5wcm90b3R5cGUsImRlc3Ryb3llZCIse2Vu''@;'; put 'put ''dW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oeWUpe3RoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD15''@;'; put 'put ''ZSl9fSksQi5wcm90b3R5cGUuZGVzdHJveT1PLmRlc3Ryb3ksQi5wcm90b3R5cGUuX3VuZGVzdHJveT1PLnVuZGVzdHJveSxCLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbih4ZSx5ZSl7eWUoeGUpfX0sNTg1MDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgXyxJPWIoNDE1NSk7ZnVu''@;'; put 'put ''Y3Rpb24gcCh1ZSxnZSxfZSl7cmV0dXJuIGdlPWZ1bmN0aW9uIFYodWUpe3ZhciBnZT1mdW5jdGlvbiB3KHVlLGdlKXtpZigib2JqZWN0IiE9dHlwZW9mIHVlfHxudWxsPT09dWUpcmV0dXJuIHVlO3ZhciBfZT11ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PV9lKXt2YXIgVGU9''@;'; put 'put ''X2UuY2FsbCh1ZSxnZXx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIFRlKXJldHVybiBUZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWdlP1N0cmluZzpOdW1iZXIpKHVl''@;'; put 'put ''KX0odWUsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgZ2U/Z2U6U3RyaW5nKGdlKX0oZ2UpLGdlIGluIHVlP09iamVjdC5kZWZpbmVQcm9wZXJ0eSh1ZSxnZSx7dmFsdWU6X2UsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp1ZVtnZV09X2UsdWV9''@;'; put 'put ''dmFyIFA9Yig4NjEwKSxGPVN5bWJvbCgibGFzdFJlc29sdmUiKSxSPVN5bWJvbCgibGFzdFJlamVjdCIpLHo9U3ltYm9sKCJlcnJvciIpLE49U3ltYm9sKCJlbmRlZCIpLE89U3ltYm9sKCJsYXN0UHJvbWlzZSIpLEs9U3ltYm9sKCJoYW5kbGVQcm9taXNlIiksWj1TeW1ib2woInN0cmVhbSIp''@;'; put 'put ''O2Z1bmN0aW9uIFkodWUsZ2Upe3JldHVybnt2YWx1ZTp1ZSxkb25lOmdlfX1mdW5jdGlvbiBXKHVlKXt2YXIgZ2U9dWVbRl07aWYobnVsbCE9PWdlKXt2YXIgX2U9dWVbWl0ucmVhZCgpO251bGwhPT1fZSYmKHVlW09dPW51bGwsdWVbRl09bnVsbCx1ZVtSXT1udWxsLGdlKFkoX2UsITEpKSl9''@;'; put 'put ''fWZ1bmN0aW9uIHEodWUpe0kubmV4dFRpY2soVyx1ZSl9dmFyIEo9T2JqZWN0LmdldFByb3RvdHlwZU9mKGZ1bmN0aW9uKCl7fSkscmU9T2JqZWN0LnNldFByb3RvdHlwZU9mKChwKF89e2dldCBzdHJlYW0oKXtyZXR1cm4gdGhpc1taXX0sbmV4dDpmdW5jdGlvbigpe3ZhciBnZT10aGlzLF9l''@;'; put 'put ''PXRoaXNbel07aWYobnVsbCE9PV9lKXJldHVybiBQcm9taXNlLnJlamVjdChfZSk7aWYodGhpc1tOXSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFkodm9pZCAwLCEwKSk7aWYodGhpc1taXS5kZXN0cm95ZWQpcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKEIsZyl7SS5uZXh0VGljayhmdW5j''@;'; put 'put ''dGlvbigpe2dlW3pdP2coZ2Vbel0pOkIoWSh2b2lkIDAsITApKX0pfSk7dmFyIE1lLFRlPXRoaXNbT107aWYoVGUpTWU9bmV3IFByb21pc2UoZnVuY3Rpb24gZWUodWUsZ2Upe3JldHVybiBmdW5jdGlvbihfZSxUZSl7dWUudGhlbihmdW5jdGlvbigpe2dlW05dP19lKFkodm9pZCAwLCEwKSk6''@;'; put 'put ''Z2VbS10oX2UsVGUpfSxUZSl9fShUZSx0aGlzKSk7ZWxzZXt2YXIgWmU9dGhpc1taXS5yZWFkKCk7aWYobnVsbCE9PVplKXJldHVybiBQcm9taXNlLnJlc29sdmUoWShaZSwhMSkpO01lPW5ldyBQcm9taXNlKHRoaXNbS10pfXJldHVybiB0aGlzW09dPU1lLE1lfX0sU3ltYm9sLmFzeW5jSXRl''@;'; put 'put ''cmF0b3IsZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHAoXywicmV0dXJuIixmdW5jdGlvbigpe3ZhciBnZT10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihfZSxUZSl7Z2VbWl0uZGVzdHJveShudWxsLGZ1bmN0aW9uKE1lKXtNZT9UZShNZSk6X2UoWSh2b2lkIDAsITApKX0pfSl9''@;'; put 'put ''KSxfKSxKKTtjZS5leHBvcnRzPWZ1bmN0aW9uKGdlKXt2YXIgX2UsVGU9T2JqZWN0LmNyZWF0ZShyZSwocChfZT17fSxaLHt2YWx1ZTpnZSx3cml0YWJsZTohMH0pLHAoX2UsRix7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLHAoX2UsUix7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLHAoX2Us''@;'; put 'put ''eix7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLHAoX2UsTix7dmFsdWU6Z2UuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCx3cml0YWJsZTohMH0pLHAoX2UsSyx7dmFsdWU6ZnVuY3Rpb24oWmUsQil7dmFyIGc9VGVbWl0ucmVhZCgpO2c/KFRlW09dPW51bGwsVGVbRl09bnVsbCxUZVtSXT1u''@;'; put 'put ''dWxsLFplKFkoZywhMSkpKTooVGVbRl09WmUsVGVbUl09Qil9LHdyaXRhYmxlOiEwfSksX2UpKTtyZXR1cm4gVGVbT109bnVsbCxQKGdlLGZ1bmN0aW9uKE1lKXtpZihNZSYmIkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFIiE9PU1lLmNvZGUpe3ZhciBaZT1UZVtSXTtyZXR1cm4gbnVsbCE9''@;'; put 'put ''PVplJiYoVGVbT109bnVsbCxUZVtGXT1udWxsLFRlW1JdPW51bGwsWmUoTWUpKSx2b2lkKFRlW3pdPU1lKX12YXIgQj1UZVtGXTtudWxsIT09QiYmKFRlW09dPW51bGwsVGVbRl09bnVsbCxUZVtSXT1udWxsLEIoWSh2b2lkIDAsITApKSksVGVbTl09ITB9KSxnZS5vbigicmVhZGFibGUiLHEu''@;'; put 'put ''YmluZChudWxsLFRlKSksVGV9fSw3MzI3OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEkoVyxxKXt2YXIgZWU9T2JqZWN0LmtleXMoVyk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIEo9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhXKTtxJiYoSj1K''@;'; put 'put ''LmZpbHRlcihmdW5jdGlvbihyZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoVyxyZSkuZW51bWVyYWJsZX0pKSxlZS5wdXNoLmFwcGx5KGVlLEopfXJldHVybiBlZX1mdW5jdGlvbiBfKFcpe2Zvcih2YXIgcT0xO3E8YXJndW1lbnRzLmxlbmd0aDtxKyspe3ZhciBl''@;'; put 'put ''ZT1udWxsIT1hcmd1bWVudHNbcV0/YXJndW1lbnRzW3FdOnt9O3ElMj9JKE9iamVjdChlZSksITApLmZvckVhY2goZnVuY3Rpb24oSil7cChXLEosZWVbSl0pfSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVyxPYmplY3QuZ2V0T3du''@;'; put 'put ''UHJvcGVydHlEZXNjcmlwdG9ycyhlZSkpOkkoT2JqZWN0KGVlKSkuZm9yRWFjaChmdW5jdGlvbihKKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoVyxKLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZWUsSikpfSl9cmV0dXJuIFd9ZnVuY3Rpb24gcChXLHEsZWUpe3JldHVybihxPUYo''@;'; put 'put ''cSkpaW4gVz9PYmplY3QuZGVmaW5lUHJvcGVydHkoVyxxLHt2YWx1ZTplZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOldbcV09ZWUsV31mdW5jdGlvbiB3KFcscSl7Zm9yKHZhciBlZT0wO2VlPHEubGVuZ3RoO2VlKyspe3ZhciBKPXFbZWVdO0ouZW51bWVy''@;'; put 'put ''YWJsZT1KLmVudW1lcmFibGV8fCExLEouY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBKJiYoSi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KFcsRihKLmtleSksSil9fWZ1bmN0aW9uIEYoVyl7dmFyIHE9ZnVuY3Rpb24gUihXLHEpe2lmKCJvYmplY3QiIT10eXBlb2YgV3x8''@;'; put 'put ''bnVsbD09PVcpcmV0dXJuIFc7dmFyIGVlPVdbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lZSl7dmFyIEo9ZWUuY2FsbChXLHF8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBKKXJldHVybiBKO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCBy''@;'; put 'put ''ZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09cT9TdHJpbmc6TnVtYmVyKShXKX0oVywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBxP3E6U3RyaW5nKHEpfXZhciBOPWIoODc2NCkuQnVmZmVyLEs9YigyMzYxKS5pbnNwZWN0LFo9SyYmSy5jdXN0''@;'; put 'put ''b218fCJpbnNwZWN0IjtmdW5jdGlvbiBZKFcscSxlZSl7Ti5wcm90b3R5cGUuY29weS5jYWxsKFcscSxlZSl9Y2UuZXhwb3J0cz1mdW5jdGlvbigpe2Z1bmN0aW9uIFcoKXsoZnVuY3Rpb24gVihXLHEpe2lmKCEoVyBpbnN0YW5jZW9mIHEpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBj''@;'; put 'put ''YWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxXKSx0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfXJldHVybiBmdW5jdGlvbiBQKFcscSxlZSl7cSYmdyhXLnByb3RvdHlwZSxxKSxlZSYmdyhXLGVlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVywi''@;'; put 'put ''cHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0oVyxbe2tleToicHVzaCIsdmFsdWU6ZnVuY3Rpb24oZWUpe3ZhciBKPXtkYXRhOmVlLG5leHQ6bnVsbH07dGhpcy5sZW5ndGg+MD90aGlzLnRhaWwubmV4dD1KOnRoaXMuaGVhZD1KLHRoaXMudGFpbD1KLCsrdGhpcy5sZW5ndGh9fSx7a2V5OiJ1''@;'; put 'put ''bnNoaWZ0Iix2YWx1ZTpmdW5jdGlvbihlZSl7dmFyIEo9e2RhdGE6ZWUsbmV4dDp0aGlzLmhlYWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMudGFpbD1KKSx0aGlzLmhlYWQ9SiwrK3RoaXMubGVuZ3RofX0se2tleToic2hpZnQiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoMCE9PXRoaXMubGVuZ3Ro''@;'; put 'put ''KXt2YXIgZWU9dGhpcy5oZWFkLmRhdGE7cmV0dXJuIHRoaXMuaGVhZD0xPT09dGhpcy5sZW5ndGg/dGhpcy50YWlsPW51bGw6dGhpcy5oZWFkLm5leHQsLS10aGlzLmxlbmd0aCxlZX19fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwsdGhp''@;'; put 'put ''cy5sZW5ndGg9MH19LHtrZXk6ImpvaW4iLHZhbHVlOmZ1bmN0aW9uKGVlKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBKPXRoaXMuaGVhZCxyZT0iIitKLmRhdGE7Sj1KLm5leHQ7KXJlKz1lZStKLmRhdGE7cmV0dXJuIHJlfX0se2tleToiY29uY2F0Iix2YWx1ZTpmdW5j''@;'; put 'put ''dGlvbihlZSl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiBOLmFsbG9jKDApO2Zvcih2YXIgSj1OLmFsbG9jVW5zYWZlKGVlPj4+MCkscmU9dGhpcy5oZWFkLGllPTA7cmU7KVkocmUuZGF0YSxKLGllKSxpZSs9cmUuZGF0YS5sZW5ndGgscmU9cmUubmV4dDtyZXR1cm4gSn19LHtrZXk6ImNv''@;'; put 'put ''bnN1bWUiLHZhbHVlOmZ1bmN0aW9uKGVlLEope3ZhciByZTtyZXR1cm4gZWU8dGhpcy5oZWFkLmRhdGEubGVuZ3RoPyhyZT10aGlzLmhlYWQuZGF0YS5zbGljZSgwLGVlKSx0aGlzLmhlYWQuZGF0YT10aGlzLmhlYWQuZGF0YS5zbGljZShlZSkpOnJlPWVlPT09dGhpcy5oZWFkLmRhdGEubGVu''@;'; put 'put ''Z3RoP3RoaXMuc2hpZnQoKTpKP3RoaXMuX2dldFN0cmluZyhlZSk6dGhpcy5fZ2V0QnVmZmVyKGVlKSxyZX19LHtrZXk6ImZpcnN0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhlYWQuZGF0YX19LHtrZXk6Il9nZXRTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGVlKXt2YXIgSj10aGlz''@;'; put 'put ''LmhlYWQscmU9MSxpZT1KLmRhdGE7Zm9yKGVlLT1pZS5sZW5ndGg7Sj1KLm5leHQ7KXt2YXIgdWU9Si5kYXRhLGdlPWVlPnVlLmxlbmd0aD91ZS5sZW5ndGg6ZWU7aWYoaWUrPWdlPT09dWUubGVuZ3RoP3VlOnVlLnNsaWNlKDAsZWUpLDA9PShlZS09Z2UpKXtnZT09PXVlLmxlbmd0aD8oKyty''@;'; put 'put ''ZSx0aGlzLmhlYWQ9Si5uZXh0P0oubmV4dDp0aGlzLnRhaWw9bnVsbCk6KHRoaXMuaGVhZD1KLEouZGF0YT11ZS5zbGljZShnZSkpO2JyZWFrfSsrcmV9cmV0dXJuIHRoaXMubGVuZ3RoLT1yZSxpZX19LHtrZXk6Il9nZXRCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKGVlKXt2YXIgSj1OLmFsbG9j''@;'; put 'put ''VW5zYWZlKGVlKSxyZT10aGlzLmhlYWQsaWU9MTtmb3IocmUuZGF0YS5jb3B5KEopLGVlLT1yZS5kYXRhLmxlbmd0aDtyZT1yZS5uZXh0Oyl7dmFyIHVlPXJlLmRhdGEsZ2U9ZWU+dWUubGVuZ3RoP3VlLmxlbmd0aDplZTtpZih1ZS5jb3B5KEosSi5sZW5ndGgtZWUsMCxnZSksMD09KGVlLT1n''@;'; put 'put ''ZSkpe2dlPT09dWUubGVuZ3RoPygrK2llLHRoaXMuaGVhZD1yZS5uZXh0P3JlLm5leHQ6dGhpcy50YWlsPW51bGwpOih0aGlzLmhlYWQ9cmUscmUuZGF0YT11ZS5zbGljZShnZSkpO2JyZWFrfSsraWV9cmV0dXJuIHRoaXMubGVuZ3RoLT1pZSxKfX0se2tleTpaLHZhbHVlOmZ1bmN0aW9uKGVl''@;'; put 'put ''LEope3JldHVybiBLKHRoaXMsXyhfKHt9LEopLHt9LHtkZXB0aDowLGN1c3RvbUluc3BlY3Q6ITF9KSl9fV0pLFd9KCl9LDExOTU6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0MTU1KTtmdW5jdGlvbiBwKFIseil7UChSLHopLFYoUil9ZnVuY3Rpb24gVihSKXtSLl93cml0YWJs''@;'; put 'put ''ZVN0YXRlJiYhUi5fd3JpdGFibGVTdGF0ZS5lbWl0Q2xvc2V8fFIuX3JlYWRhYmxlU3RhdGUmJiFSLl9yZWFkYWJsZVN0YXRlLmVtaXRDbG9zZXx8Ui5lbWl0KCJjbG9zZSIpfWZ1bmN0aW9uIFAoUix6KXtSLmVtaXQoImVycm9yIix6KX1jZS5leHBvcnRzPXtkZXN0cm95OmZ1bmN0aW9uIF8o''@;'; put 'put ''Uix6KXt2YXIgTj10aGlzO3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZHx8dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ/KHo/eihSKTpSJiYodGhpcy5fd3JpdGFibGVTdGF0ZT90aGlzLl93''@;'; put 'put ''cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZHx8KHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEkubmV4dFRpY2soUCx0aGlzLFIpKTpJLm5leHRUaWNrKFAsdGhpcyxSKSksdGhpcyk6KHRoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3ll''@;'; put 'put ''ZD0hMCksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl9kZXN0cm95KFJ8fG51bGwsZnVuY3Rpb24oWil7IXomJlo/Ti5fd3JpdGFibGVTdGF0ZT9OLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD9JLm5leHRUaWNrKFYsTik6''@;'; put 'put ''KE4uX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEkubmV4dFRpY2socCxOLFopKTpJLm5leHRUaWNrKHAsTixaKTp6PyhJLm5leHRUaWNrKFYsTikseihaKSk6SS5uZXh0VGljayhWLE4pfSksdGhpcyl9LHVuZGVzdHJveTpmdW5jdGlvbiB3KCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYm''@;'; put 'put ''KHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZz0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZD0hMSksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxl''@;'; put 'put ''U3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5hbENhbGxlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3Rh''@;'; put 'put ''dGUuZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITEpfSxlcnJvck9yRGVzdHJveTpmdW5jdGlvbiBGKFIseil7dmFyIE49Ui5fcmVhZGFibGVTdGF0ZSxPPVIuX3dyaXRhYmxlU3RhdGU7TiYmTi5hdXRvRGVzdHJveXx8TyYmTy5hdXRvRGVzdHJveT9SLmRl''@;'; put 'put ''c3Ryb3koeik6Ui5lbWl0KCJlcnJvciIseil9fX0sODYxMDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQyODEpLnEuRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0U7ZnVuY3Rpb24gcCgpe31jZS5leHBvcnRzPWZ1bmN0aW9uIHcoUCxGLFIpe2lmKCJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBGKXJldHVybiB3KFAsbnVsbCxGKTtGfHwoRj17fSksUj1mdW5jdGlvbiBfKFApe3ZhciBGPSExO3JldHVybiBmdW5jdGlvbigpe2lmKCFGKXtGPSEwO2Zvcih2YXIgUj1hcmd1bWVudHMubGVuZ3RoLHo9bmV3IEFycmF5KFIpLE49MDtOPFI7TisrKXpbTl09YXJndW1lbnRzW05dO1AuYXBw''@;'; put 'put ''bHkodGhpcyx6KX19fShSfHxwKTt2YXIgej1GLnJlYWRhYmxlfHwhMSE9PUYucmVhZGFibGUmJlAucmVhZGFibGUsTj1GLndyaXRhYmxlfHwhMSE9PUYud3JpdGFibGUmJlAud3JpdGFibGUsTz1mdW5jdGlvbigpe1Aud3JpdGFibGV8fFooKX0sSz1QLl93cml0YWJsZVN0YXRlJiZQLl93cml0''@;'; put 'put ''YWJsZVN0YXRlLmZpbmlzaGVkLFo9ZnVuY3Rpb24oKXtOPSExLEs9ITAsenx8Ui5jYWxsKFApfSxZPVAuX3JlYWRhYmxlU3RhdGUmJlAuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCxXPWZ1bmN0aW9uKCl7ej0hMSxZPSEwLE58fFIuY2FsbChQKX0scT1mdW5jdGlvbihpZSl7Ui5jYWxsKFAs''@;'; put 'put ''aWUpfSxlZT1mdW5jdGlvbigpe3ZhciBpZTtyZXR1cm4geiYmIVk/KCghUC5fcmVhZGFibGVTdGF0ZXx8IVAuX3JlYWRhYmxlU3RhdGUuZW5kZWQpJiYoaWU9bmV3IEkpLFIuY2FsbChQLGllKSk6TiYmIUs/KCghUC5fd3JpdGFibGVTdGF0ZXx8IVAuX3dyaXRhYmxlU3RhdGUuZW5kZWQpJiYo''@;'; put 'put ''aWU9bmV3IEkpLFIuY2FsbChQLGllKSk6dm9pZCAwfSxKPWZ1bmN0aW9uKCl7UC5yZXEub24oImZpbmlzaCIsWil9O3JldHVybiBmdW5jdGlvbiBWKFApe3JldHVybiBQLnNldEhlYWRlciYmImZ1bmN0aW9uIj09dHlwZW9mIFAuYWJvcnR9KFApPyhQLm9uKCJjb21wbGV0ZSIsWiksUC5vbigi''@;'; put 'put ''YWJvcnQiLGVlKSxQLnJlcT9KKCk6UC5vbigicmVxdWVzdCIsSikpOk4mJiFQLl93cml0YWJsZVN0YXRlJiYoUC5vbigiZW5kIixPKSxQLm9uKCJjbG9zZSIsTykpLFAub24oImVuZCIsVyksUC5vbigiZmluaXNoIixaKSwhMSE9PUYuZXJyb3ImJlAub24oImVycm9yIixxKSxQLm9uKCJjbG9z''@;'; put 'put ''ZSIsZWUpLGZ1bmN0aW9uKCl7UC5yZW1vdmVMaXN0ZW5lcigiY29tcGxldGUiLFopLFAucmVtb3ZlTGlzdGVuZXIoImFib3J0IixlZSksUC5yZW1vdmVMaXN0ZW5lcigicmVxdWVzdCIsSiksUC5yZXEmJlAucmVxLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLFopLFAucmVtb3ZlTGlzdGVuZXIo''@;'; put 'put ''ImVuZCIsTyksUC5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLE8pLFAucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsWiksUC5yZW1vdmVMaXN0ZW5lcigiZW5kIixXKSxQLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIscSksUC5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGVlKX19fSw1MTY3OmNlPT57Y2Uu''@;'; put 'put ''ZXhwb3J0cz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiUmVhZGFibGUuZnJvbSBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBicm93c2VyIil9fSw5OTQ2OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJLHA9Yig0MjgxKS5xLFY9cC5FUlJfTUlTU0lOR19BUkdTLHc9cC5FUlJfU1RS''@;'; put 'put ''RUFNX0RFU1RST1lFRDtmdW5jdGlvbiBQKFope2lmKFopdGhyb3cgWn1mdW5jdGlvbiB6KFope1ooKX1mdW5jdGlvbiBOKFosWSl7cmV0dXJuIFoucGlwZShZKX1jZS5leHBvcnRzPWZ1bmN0aW9uIEsoKXtmb3IodmFyIFo9YXJndW1lbnRzLmxlbmd0aCxZPW5ldyBBcnJheShaKSxXPTA7Vzxa''@;'; put 'put ''O1crKylZW1ddPWFyZ3VtZW50c1tXXTt2YXIgcT1mdW5jdGlvbiBPKFope3JldHVybiBaLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIFpbWi5sZW5ndGgtMV0/Wi5wb3AoKTpQfShZKTtpZihBcnJheS5pc0FycmF5KFlbMF0pJiYoWT1ZWzBdKSxZLmxlbmd0aDwyKXRocm93IG5ldyBWKCJz''@;'; put 'put ''dHJlYW1zIik7dmFyIGVlLEo9WS5tYXAoZnVuY3Rpb24ocmUsaWUpe3ZhciB1ZT1pZTxZLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbiBSKFosWSxXLHEpe3E9ZnVuY3Rpb24gXyhaKXt2YXIgWT0hMTtyZXR1cm4gZnVuY3Rpb24oKXtZfHwoWT0hMCxaLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMp''@;'; put 'put ''KX19KHEpO3ZhciBlZT0hMTtaLm9uKCJjbG9zZSIsZnVuY3Rpb24oKXtlZT0hMH0pLHZvaWQgMD09PUkmJihJPWIoODYxMCkpLEkoWix7cmVhZGFibGU6WSx3cml0YWJsZTpXfSxmdW5jdGlvbihyZSl7aWYocmUpcmV0dXJuIHEocmUpO2VlPSEwLHEoKX0pO3ZhciBKPSExO3JldHVybiBmdW5j''@;'; put 'put ''dGlvbihyZSl7aWYoIWVlJiYhSil7aWYoSj0hMCxmdW5jdGlvbiBGKFope3JldHVybiBaLnNldEhlYWRlciYmImZ1bmN0aW9uIj09dHlwZW9mIFouYWJvcnR9KFopKXJldHVybiBaLmFib3J0KCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFouZGVzdHJveSlyZXR1cm4gWi5kZXN0cm95KCk7cShy''@;'; put 'put ''ZXx8bmV3IHcoInBpcGUiKSl9fX0ocmUsdWUsaWU+MCxmdW5jdGlvbihfZSl7ZWV8fChlZT1fZSksX2UmJkouZm9yRWFjaCh6KSwhdWUmJihKLmZvckVhY2goeikscShlZSkpfSl9KTtyZXR1cm4gWS5yZWR1Y2UoTil9fSwyNDU3OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNDI4''@;'; put 'put ''MSkucS5FUlJfSU5WQUxJRF9PUFRfVkFMVUU7Y2UuZXhwb3J0cz17Z2V0SGlnaFdhdGVyTWFyazpmdW5jdGlvbiBwKFYsdyxQLEYpe3ZhciBSPWZ1bmN0aW9uIF8oVix3LFApe3JldHVybiBudWxsIT1WLmhpZ2hXYXRlck1hcms/Vi5oaWdoV2F0ZXJNYXJrOnc/VltQXTpudWxsfSh3LEYsUCk7''@;'; put 'put ''aWYobnVsbCE9Uil7aWYoIWlzRmluaXRlKFIpfHxNYXRoLmZsb29yKFIpIT09Unx8UjwwKXRocm93IG5ldyBJKEY/UDoiaGlnaFdhdGVyTWFyayIsUik7cmV0dXJuIE1hdGguZmxvb3IoUil9cmV0dXJuIFYub2JqZWN0TW9kZT8xNjoxNjM4NH19fSwyNTAzOihjZSxYLGIpPT57Y2UuZXhwb3J0''@;'; put 'put ''cz1iKDcxODcpLkV2ZW50RW1pdHRlcn0sNzQxODpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPWZ1bmN0aW9uKGIsSSl7aWYoST1JLnNwbGl0KCI6IilbMF0sIShiPStiKSlyZXR1cm4hMTtzd2l0Y2goSSl7Y2FzZSJodHRwIjpjYXNlIndzIjpyZXR1cm4gODAhPT1iO2Nhc2UiaHR0cHMi''@;'; put 'put ''OmNhc2Uid3NzIjpyZXR1cm4gNDQzIT09YjtjYXNlImZ0cCI6cmV0dXJuIDIxIT09YjtjYXNlImdvcGhlciI6cmV0dXJuIDcwIT09YjtjYXNlImZpbGUiOnJldHVybiExfXJldHVybiAwIT09Yn19LDk3ODU6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig4NzY0KS5CdWZmZXIsXz1i''@;'; put 'put ''KDU3MTcpLHA9YigzMzQ5KSxWPW5ldyBBcnJheSgxNiksdz1bMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSw3LDQsMTMsMSwxMCw2LDE1LDMsMTIsMCw5LDUsMiwxNCwxMSw4LDMsMTAsMTQsNCw5LDE1LDgsMSwyLDcsMCw2LDEzLDExLDUsMTIsMSw5LDExLDEwLDAsOCwx''@;'; put 'put ''Miw0LDEzLDMsNywxNSwxNCw1LDYsMiw0LDAsNSw5LDcsMTIsMiwxMCwxNCwxLDMsOCwxMSw2LDE1LDEzXSxQPVs1LDE0LDcsMCw5LDIsMTEsNCwxMyw2LDE1LDgsMSwxMCwzLDEyLDYsMTEsMyw3LDAsMTMsNSwxMCwxNCwxNSw4LDEyLDQsOSwxLDIsMTUsNSwxLDMsNywxNCw2LDksMTEsOCwx''@;'; put 'put ''MiwyLDEwLDAsNCwxMyw4LDYsNCwxLDMsMTEsMTUsMCw1LDEyLDIsMTMsOSw3LDEwLDE0LDEyLDE1LDEwLDQsMSw1LDgsNyw2LDIsMTMsMTQsMCwzLDksMTFdLEY9WzExLDE0LDE1LDEyLDUsOCw3LDksMTEsMTMsMTQsMTUsNiw3LDksOCw3LDYsOCwxMywxMSw5LDcsMTUsNywxMiwxNSw5LDEx''@;'; put 'put ''LDcsMTMsMTIsMTEsMTMsNiw3LDE0LDksMTMsMTUsMTQsOCwxMyw2LDUsMTIsNyw1LDExLDEyLDE0LDE1LDE0LDE1LDksOCw5LDE0LDUsNiw4LDYsNSwxMiw5LDE1LDUsMTEsNiw4LDEzLDEyLDUsMTIsMTMsMTQsMTEsOCw1LDZdLFI9WzgsOSw5LDExLDEzLDE1LDE1LDUsNyw3LDgsMTEsMTQs''@;'; put 'put ''MTQsMTIsNiw5LDEzLDE1LDcsMTIsOCw5LDExLDcsNywxMiw3LDYsMTUsMTMsMTEsOSw3LDE1LDExLDgsNiw2LDE0LDEyLDEzLDUsMTQsMTMsMTMsNyw1LDE1LDUsOCwxMSwxNCwxNCw2LDE0LDYsOSwxMiw5LDEyLDUsMTUsOCw4LDUsMTIsOSwxMiw1LDE0LDYsOCwxMyw2LDUsMTUsMTMsMTEs''@;'; put 'put ''MTFdLHo9WzAsMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgsMjg0MDg1MzgzOF0sTj1bMTM1MjgyOTkyNiwxNTQ4NjAzNjg0LDE4MzYwNzI2OTEsMjA1Mzk5NDIxNywwXTtmdW5jdGlvbiBPKCl7cC5jYWxsKHRoaXMsNjQpLHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMy''@;'; put 'put ''MzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMH1mdW5jdGlvbiBLKEoscmUpe3JldHVybiBKPDxyZXxKPj4+MzItcmV9ZnVuY3Rpb24gWihKLHJlLGllLHVlLGdlLF9lLFRlLE1lKXtyZXR1cm4gSyhKKyhyZV5pZV51ZSkrX2UrVGV8''@;'; put 'put ''MCxNZSkrZ2V8MH1mdW5jdGlvbiBZKEoscmUsaWUsdWUsZ2UsX2UsVGUsTWUpe3JldHVybiBLKEorKHJlJmllfH5yZSZ1ZSkrX2UrVGV8MCxNZSkrZ2V8MH1mdW5jdGlvbiBXKEoscmUsaWUsdWUsZ2UsX2UsVGUsTWUpe3JldHVybiBLKEorKChyZXx+aWUpXnVlKStfZStUZXwwLE1lKStnZXww''@;'; put 'put ''fWZ1bmN0aW9uIHEoSixyZSxpZSx1ZSxnZSxfZSxUZSxNZSl7cmV0dXJuIEsoSisocmUmdWV8aWUmfnVlKStfZStUZXwwLE1lKStnZXwwfWZ1bmN0aW9uIGVlKEoscmUsaWUsdWUsZ2UsX2UsVGUsTWUpe3JldHVybiBLKEorKHJlXihpZXx+dWUpKStfZStUZXwwLE1lKStnZXwwfV8oTyxwKSxP''@;'; put 'put ''LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciBKPVYscmU9MDtyZTwxNjsrK3JlKUpbcmVdPXRoaXMuX2Jsb2NrLnJlYWRJbnQzMkxFKDQqcmUpO2Zvcih2YXIgaWU9MHx0aGlzLl9hLHVlPTB8dGhpcy5fYixnZT0wfHRoaXMuX2MsX2U9MHx0aGlzLl9kLFRlPTB8dGhpcy5f''@;'; put 'put ''ZSxNZT0wfHRoaXMuX2EsWmU9MHx0aGlzLl9iLEI9MHx0aGlzLl9jLGc9MHx0aGlzLl9kLHk9MHx0aGlzLl9lLHg9MDt4PDgwO3grPTEpe3ZhciBDLFQ7eDwxNj8oQz1aKGllLHVlLGdlLF9lLFRlLEpbd1t4XV0selswXSxGW3hdKSxUPWVlKE1lLFplLEIsZyx5LEpbUFt4XV0sTlswXSxSW3hd''@;'; put 'put ''KSk6eDwzMj8oQz1ZKGllLHVlLGdlLF9lLFRlLEpbd1t4XV0selsxXSxGW3hdKSxUPXEoTWUsWmUsQixnLHksSltQW3hdXSxOWzFdLFJbeF0pKTp4PDQ4PyhDPVcoaWUsdWUsZ2UsX2UsVGUsSlt3W3hdXSx6WzJdLEZbeF0pLFQ9VyhNZSxaZSxCLGcseSxKW1BbeF1dLE5bMl0sUlt4XSkpOng8''@;'; put 'put ''NjQ/KEM9cShpZSx1ZSxnZSxfZSxUZSxKW3dbeF1dLHpbM10sRlt4XSksVD1ZKE1lLFplLEIsZyx5LEpbUFt4XV0sTlszXSxSW3hdKSk6KEM9ZWUoaWUsdWUsZ2UsX2UsVGUsSlt3W3hdXSx6WzRdLEZbeF0pLFQ9WihNZSxaZSxCLGcseSxKW1BbeF1dLE5bNF0sUlt4XSkpLGllPVRlLFRlPV9l''@;'; put 'put ''LF9lPUsoZ2UsMTApLGdlPXVlLHVlPUMsTWU9eSx5PWcsZz1LKEIsMTApLEI9WmUsWmU9VH12YXIgSD10aGlzLl9iK2dlK2d8MDt0aGlzLl9iPXRoaXMuX2MrX2UreXwwLHRoaXMuX2M9dGhpcy5fZCtUZStNZXwwLHRoaXMuX2Q9dGhpcy5fZStpZStaZXwwLHRoaXMuX2U9dGhpcy5fYSt1ZStC''@;'; put 'put ''fDAsdGhpcy5fYT1IfSxPLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKCl7dGhpcy5fYmxvY2tbdGhpcy5fYmxvY2tPZmZzZXQrK109MTI4LHRoaXMuX2Jsb2NrT2Zmc2V0PjU2JiYodGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDY0KSx0aGlzLl91cGRhdGUoKSx0aGlz''@;'; put 'put ''Ll9ibG9ja09mZnNldD0wKSx0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzBdLDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFsxXSw2MCksdGhpcy5fdXBkYXRlKCk7''@;'; put 'put ''dmFyIEo9SS5hbGxvYz9JLmFsbG9jKDIwKTpuZXcgSSgyMCk7cmV0dXJuIEoud3JpdGVJbnQzMkxFKHRoaXMuX2EsMCksSi53cml0ZUludDMyTEUodGhpcy5fYiw0KSxKLndyaXRlSW50MzJMRSh0aGlzLl9jLDgpLEoud3JpdGVJbnQzMkxFKHRoaXMuX2QsMTIpLEoud3JpdGVJbnQzMkxFKHRo''@;'; put 'put ''aXMuX2UsMTYpLEp9LGNlLmV4cG9ydHM9T30sOTUwOTooY2UsWCxiKT0+e3ZhciBJPWIoODc2NCksXz1JLkJ1ZmZlcjtmdW5jdGlvbiBwKHcsUCl7Zm9yKHZhciBGIGluIHcpUFtGXT13W0ZdfWZ1bmN0aW9uIFYodyxQLEYpe3JldHVybiBfKHcsUCxGKX1fLmZyb20mJl8uYWxsb2MmJl8uYWxs''@;'; put 'put ''b2NVbnNhZmUmJl8uYWxsb2NVbnNhZmVTbG93P2NlLmV4cG9ydHM9SToocChJLFgpLFguQnVmZmVyPVYpLFYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoXy5wcm90b3R5cGUpLHAoXyxWKSxWLmZyb209ZnVuY3Rpb24odyxQLEYpe2lmKCJudW1iZXIiPT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlw''@;'; put 'put ''ZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiBfKHcsUCxGKX0sVi5hbGxvYz1mdW5jdGlvbih3LFAsRil7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgUj1fKHcpO3Jl''@;'; put 'put ''dHVybiB2b2lkIDAhPT1QPyJzdHJpbmciPT10eXBlb2YgRj9SLmZpbGwoUCxGKTpSLmZpbGwoUCk6Ui5maWxsKDApLFJ9LFYuYWxsb2NVbnNhZmU9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIi''@;'; put 'put ''KTtyZXR1cm4gXyh3KX0sVi5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gSS5TbG93QnVmZmVyKHcpfX0sOTI0NjooY2UsWCxiKT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgST1iKDczNzkpLF89Yig4NDIwKSxwPUkoIlJlZ0V4cC5wcm90b3R5cGUuZXhlYyIpLFY9Yig0NDUzKTtjZS5leHBvcnRzPWZ1bmN0aW9uKFApe2lmKCFfKFApKXRocm93IG5ldyBWKCJgcmVnZXhgIG11c3QgYmUgYSBSZWdFeHAiKTtyZXR1cm4gZnVuY3Rpb24oUil7cmV0dXJu''@;'; put 'put ''IG51bGwhPT1wKFAsUil9fX0sNzc3MTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDIxMCksXz1iKDIyOTYpLHA9YigxMDQ0KSgpLFY9Yig3Mjk2KSx3PWIoNDQ1MyksUD1JKCIlTWF0aC5mbG9vciUiKTtjZS5leHBvcnRzPWZ1bmN0aW9uKFIseil7aWYoImZ1bmN0aW9uIiE9dHlw''@;'; put 'put ''ZW9mIFIpdGhyb3cgbmV3IHcoImBmbmAgaXMgbm90IGEgZnVuY3Rpb24iKTtpZigibnVtYmVyIiE9dHlwZW9mIHp8fHo8MHx8ej40Mjk0OTY3Mjk1fHxQKHopIT09eil0aHJvdyBuZXcgdygiYGxlbmd0aGAgbXVzdCBiZSBhIHBvc2l0aXZlIDMyLWJpdCBpbnRlZ2VyIik7dmFyIE49YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aD4yJiYhIWFyZ3VtZW50c1syXSxPPSEwLEs9ITA7aWYoImxlbmd0aCJpbiBSJiZWKXt2YXIgWj1WKFIsImxlbmd0aCIpO1omJiFaLmNvbmZpZ3VyYWJsZSYmKE89ITEpLFomJiFaLndyaXRhYmxlJiYoSz0hMSl9cmV0dXJuKE98fEt8fCFOKSYmKHA/XyhSLCJsZW5ndGgiLHos''@;'; put 'put ''ITAsITApOl8oUiwibGVuZ3RoIix6KSksUn19LDQxODk6KGNlLFgsYik9Pnt2YXIgST1iKDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBfKHAsVil7dGhpcy5fYmxvY2s9SS5hbGxvYyhwKSx0aGlzLl9maW5hbFNpemU9Vix0aGlzLl9ibG9ja1NpemU9cCx0aGlzLl9sZW49MH1fLnByb3RvdHlwZS51''@;'; put 'put ''cGRhdGU9ZnVuY3Rpb24ocCxWKXsic3RyaW5nIj09dHlwZW9mIHAmJihwPUkuZnJvbShwLFY9Vnx8InV0ZjgiKSk7Zm9yKHZhciB3PXRoaXMuX2Jsb2NrLFA9dGhpcy5fYmxvY2tTaXplLEY9cC5sZW5ndGgsUj10aGlzLl9sZW4sej0wO3o8Rjspe2Zvcih2YXIgTj1SJVAsTz1NYXRoLm1pbihG''@;'; put 'put ''LXosUC1OKSxLPTA7SzxPO0srKyl3W04rS109cFt6K0tdO3orPU8sKFIrPU8pJVA9PTAmJnRoaXMuX3VwZGF0ZSh3KX1yZXR1cm4gdGhpcy5fbGVuKz1GLHRoaXN9LF8ucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihwKXt2YXIgVj10aGlzLl9sZW4ldGhpcy5fYmxvY2tTaXplO3RoaXMuX2Js''@;'; put 'put ''b2NrW1ZdPTEyOCx0aGlzLl9ibG9jay5maWxsKDAsVisxKSxWPj10aGlzLl9maW5hbFNpemUmJih0aGlzLl91cGRhdGUodGhpcy5fYmxvY2spLHRoaXMuX2Jsb2NrLmZpbGwoMCkpO3ZhciB3PTgqdGhpcy5fbGVuO2lmKHc8PTQyOTQ5NjcyOTUpdGhpcy5fYmxvY2sud3JpdGVVSW50MzJCRSh3''@;'; put 'put ''LHRoaXMuX2Jsb2NrU2l6ZS00KTtlbHNle3ZhciBQPSg0Mjk0OTY3Mjk1JncpPj4+MDt0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKCh3LVApLzQyOTQ5NjcyOTYsdGhpcy5fYmxvY2tTaXplLTgpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUoUCx0aGlzLl9ibG9ja1NpemUtNCl9dGhpcy5f''@;'; put 'put ''dXBkYXRlKHRoaXMuX2Jsb2NrKTt2YXIgUj10aGlzLl9oYXNoKCk7cmV0dXJuIHA/Ui50b1N0cmluZyhwKTpSfSxfLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfdXBkYXRlIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3MiKX0sY2UuZXhwb3J0''@;'; put 'put ''cz1ffSw5MDcyOihjZSxYLGIpPT57dmFyIEk9Y2UuZXhwb3J0cz1mdW5jdGlvbihwKXtwPXAudG9Mb3dlckNhc2UoKTt2YXIgVj1JW3BdO2lmKCFWKXRocm93IG5ldyBFcnJvcihwKyIgaXMgbm90IHN1cHBvcnRlZCAod2UgYWNjZXB0IHB1bGwgcmVxdWVzdHMpIik7cmV0dXJuIG5ldyBWfTtJ''@;'; put 'put ''LnNoYT1iKDQ0NDgpLEkuc2hhMT1iKDgzMzYpLEkuc2hhMjI0PWIoODQzMiksSS5zaGEyNTY9Yig3NDk5KSxJLnNoYTM4ND1iKDE2ODYpLEkuc2hhNTEyPWIoNzgxNil9LDQ0NDg6KGNlLFgsYik9Pnt2YXIgST1iKDU3MTcpLF89Yig0MTg5KSxwPWIoOTUwOSkuQnVmZmVyLFY9WzE1MTg1MDAy''@;'; put 'put ''NDksMTg1OTc3NTM5MywtMTg5NDAwNzU4OCwtODk5NDk3NTE0XSx3PW5ldyBBcnJheSg4MCk7ZnVuY3Rpb24gUCgpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dyxfLmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gRihOKXtyZXR1cm4gTjw8NXxOPj4+Mjd9ZnVuY3Rpb24gUihOKXtyZXR1cm4gTjw8''@;'; put 'put ''MzB8Tj4+PjJ9ZnVuY3Rpb24geihOLE8sSyxaKXtyZXR1cm4gMD09PU4/TyZLfH5PJlo6Mj09PU4/TyZLfE8mWnxLJlo6T15LXlp9SShQLF8pLFAucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1''@;'; put 'put ''NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4NzgsdGhpcy5fZT0zMjg1Mzc3NTIwLHRoaXN9LFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oTil7Zm9yKHZhciBPPXRoaXMuX3csSz0wfHRoaXMuX2EsWj0wfHRoaXMuX2IsWT0wfHRoaXMuX2MsVz0wfHRoaXMuX2QscT0wfHRoaXMuX2UsZWU9''@;'; put 'put ''MDtlZTwxNjsrK2VlKU9bZWVdPU4ucmVhZEludDMyQkUoNCplZSk7Zm9yKDtlZTw4MDsrK2VlKU9bZWVdPU9bZWUtM11eT1tlZS04XV5PW2VlLTE0XV5PW2VlLTE2XTtmb3IodmFyIEo9MDtKPDgwOysrSil7dmFyIHJlPX5+KEovMjApLGllPUYoSykreihyZSxaLFksVykrcStPW0pdK1ZbcmVd''@;'; put 'put ''fDA7cT1XLFc9WSxZPVIoWiksWj1LLEs9aWV9dGhpcy5fYT1LK3RoaXMuX2F8MCx0aGlzLl9iPVordGhpcy5fYnwwLHRoaXMuX2M9WSt0aGlzLl9jfDAsdGhpcy5fZD1XK3RoaXMuX2R8MCx0aGlzLl9lPXErdGhpcy5fZXwwfSxQLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBOPXAu''@;'; put 'put ''YWxsb2NVbnNhZmUoMjApO3JldHVybiBOLndyaXRlSW50MzJCRSgwfHRoaXMuX2EsMCksTi53cml0ZUludDMyQkUoMHx0aGlzLl9iLDQpLE4ud3JpdGVJbnQzMkJFKDB8dGhpcy5fYyw4KSxOLndyaXRlSW50MzJCRSgwfHRoaXMuX2QsMTIpLE4ud3JpdGVJbnQzMkJFKDB8dGhpcy5fZSwxNiks''@;'; put 'put ''Tn0sY2UuZXhwb3J0cz1QfSw4MzM2OihjZSxYLGIpPT57dmFyIEk9Yig1NzE3KSxfPWIoNDE4OSkscD1iKDk1MDkpLkJ1ZmZlcixWPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsLTE4OTQwMDc1ODgsLTg5OTQ5NzUxNF0sdz1uZXcgQXJyYXkoODApO2Z1bmN0aW9uIFAoKXt0aGlzLmluaXQoKSx0''@;'; put 'put ''aGlzLl93PXcsXy5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIEYoTyl7cmV0dXJuIE88PDF8Tz4+PjMxfWZ1bmN0aW9uIFIoTyl7cmV0dXJuIE88PDV8Tz4+PjI3fWZ1bmN0aW9uIHooTyl7cmV0dXJuIE88PDMwfE8+Pj4yfWZ1bmN0aW9uIE4oTyxLLFosWSl7cmV0dXJuIDA9PT1PP0smWnx+''@;'; put 'put ''SyZZOjI9PT1PP0smWnxLJll8WiZZOkteWl5ZfUkoUCxfKSxQLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0''@;'; put 'put ''aGlzfSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKE8pe2Zvcih2YXIgSz10aGlzLl93LFo9MHx0aGlzLl9hLFk9MHx0aGlzLl9iLFc9MHx0aGlzLl9jLHE9MHx0aGlzLl9kLGVlPTB8dGhpcy5fZSxKPTA7SjwxNjsrK0opS1tKXT1PLnJlYWRJbnQzMkJFKDQqSik7Zm9yKDtKPDgwOysr''@;'; put 'put ''SilLW0pdPUYoS1tKLTNdXktbSi04XV5LW0otMTRdXktbSi0xNl0pO2Zvcih2YXIgcmU9MDtyZTw4MDsrK3JlKXt2YXIgaWU9fn4ocmUvMjApLHVlPVIoWikrTihpZSxZLFcscSkrZWUrS1tyZV0rVltpZV18MDtlZT1xLHE9VyxXPXooWSksWT1aLFo9dWV9dGhpcy5fYT1aK3RoaXMuX2F8MCx0''@;'; put 'put ''aGlzLl9iPVkrdGhpcy5fYnwwLHRoaXMuX2M9Vyt0aGlzLl9jfDAsdGhpcy5fZD1xK3RoaXMuX2R8MCx0aGlzLl9lPWVlK3RoaXMuX2V8MH0sUC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgTz1wLmFsbG9jVW5zYWZlKDIwKTtyZXR1cm4gTy53cml0ZUludDMyQkUoMHx0aGlzLl9h''@;'; put 'put ''LDApLE8ud3JpdGVJbnQzMkJFKDB8dGhpcy5fYiw0KSxPLndyaXRlSW50MzJCRSgwfHRoaXMuX2MsOCksTy53cml0ZUludDMyQkUoMHx0aGlzLl9kLDEyKSxPLndyaXRlSW50MzJCRSgwfHRoaXMuX2UsMTYpLE99LGNlLmV4cG9ydHM9UH0sODQzMjooY2UsWCxiKT0+e3ZhciBJPWIoNTcxNyks''@;'; put 'put ''Xz1iKDc0OTkpLHA9Yig0MTg5KSxWPWIoOTUwOSkuQnVmZmVyLHc9bmV3IEFycmF5KDY0KTtmdW5jdGlvbiBQKCl7dGhpcy5pbml0KCksdGhpcy5fdz13LHAuY2FsbCh0aGlzLDY0LDU2KX1JKFAsXyksUC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTMyMzgzNzEw''@;'; put 'put ''MzIsdGhpcy5fYj05MTQxNTA2NjMsdGhpcy5fYz04MTI3MDI5OTksdGhpcy5fZD00MTQ0OTEyNjk3LHRoaXMuX2U9NDI5MDc3NTg1Nyx0aGlzLl9mPTE3NTA2MDMwMjUsdGhpcy5fZz0xNjk0MDc2ODM5LHRoaXMuX2g9MzIwNDA3NTQyOCx0aGlzfSxQLnByb3RvdHlwZS5faGFzaD1mdW5jdGlv''@;'; put 'put ''bigpe3ZhciBGPVYuYWxsb2NVbnNhZmUoMjgpO3JldHVybiBGLndyaXRlSW50MzJCRSh0aGlzLl9hLDApLEYud3JpdGVJbnQzMkJFKHRoaXMuX2IsNCksRi53cml0ZUludDMyQkUodGhpcy5fYyw4KSxGLndyaXRlSW50MzJCRSh0aGlzLl9kLDEyKSxGLndyaXRlSW50MzJCRSh0aGlzLl9lLDE2''@;'; put 'put ''KSxGLndyaXRlSW50MzJCRSh0aGlzLl9mLDIwKSxGLndyaXRlSW50MzJCRSh0aGlzLl9nLDI0KSxGfSxjZS5leHBvcnRzPVB9LDc0OTk6KGNlLFgsYik9Pnt2YXIgST1iKDU3MTcpLF89Yig0MTg5KSxwPWIoOTUwOSkuQnVmZmVyLFY9WzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcx''@;'; put 'put ''LDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2''@;'; put 'put ''NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkx''@;'; put 'put ''MiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQs''@;'; put 'put ''NTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF0sdz1u''@;'; put 'put ''ZXcgQXJyYXkoNjQpO2Z1bmN0aW9uIFAoKXt0aGlzLmluaXQoKSx0aGlzLl93PXcsXy5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIEYoWixZLFcpe3JldHVybiBXXlomKFleVyl9ZnVuY3Rpb24gUihaLFksVyl7cmV0dXJuIFomWXxXJihafFkpfWZ1bmN0aW9uIHooWil7cmV0dXJuKFo+Pj4y''@;'; put 'put ''fFo8PDMwKV4oWj4+PjEzfFo8PDE5KV4oWj4+PjIyfFo8PDEwKX1mdW5jdGlvbiBOKFope3JldHVybihaPj4+NnxaPDwyNileKFo+Pj4xMXxaPDwyMSleKFo+Pj4yNXxaPDw3KX1mdW5jdGlvbiBPKFope3JldHVybihaPj4+N3xaPDwyNSleKFo+Pj4xOHxaPDwxNCleWj4+PjN9ZnVuY3Rpb24g''@;'; put 'put ''SyhaKXtyZXR1cm4oWj4+PjE3fFo8PDE1KV4oWj4+PjE5fFo8PDEzKV5aPj4+MTB9SShQLF8pLFAucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0xNzc5MDMzNzAzLHRoaXMuX2I9MzE0NDEzNDI3Nyx0aGlzLl9jPTEwMTM5MDQyNDIsdGhpcy5fZD0yNzczNDgwNzYy''@;'; put 'put ''LHRoaXMuX2U9MTM1OTg5MzExOSx0aGlzLl9mPTI2MDA4MjI5MjQsdGhpcy5fZz01Mjg3MzQ2MzUsdGhpcy5faD0xNTQxNDU5MjI1LHRoaXN9LFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oWil7Zm9yKHZhciBZPXRoaXMuX3csVz0wfHRoaXMuX2EscT0wfHRoaXMuX2IsZWU9MHx0aGlz''@;'; put 'put ''Ll9jLEo9MHx0aGlzLl9kLHJlPTB8dGhpcy5fZSxpZT0wfHRoaXMuX2YsdWU9MHx0aGlzLl9nLGdlPTB8dGhpcy5faCxfZT0wO19lPDE2OysrX2UpWVtfZV09Wi5yZWFkSW50MzJCRSg0Kl9lKTtmb3IoO19lPDY0OysrX2UpWVtfZV09SyhZW19lLTJdKStZW19lLTddK08oWVtfZS0xNV0pK1lb''@;'; put 'put ''X2UtMTZdfDA7Zm9yKHZhciBUZT0wO1RlPDY0OysrVGUpe3ZhciBNZT1nZStOKHJlKStGKHJlLGllLHVlKStWW1RlXStZW1RlXXwwLFplPXooVykrUihXLHEsZWUpfDA7Z2U9dWUsdWU9aWUsaWU9cmUscmU9SitNZXwwLEo9ZWUsZWU9cSxxPVcsVz1NZStaZXwwfXRoaXMuX2E9Vyt0aGlzLl9h''@;'; put 'put ''fDAsdGhpcy5fYj1xK3RoaXMuX2J8MCx0aGlzLl9jPWVlK3RoaXMuX2N8MCx0aGlzLl9kPUordGhpcy5fZHwwLHRoaXMuX2U9cmUrdGhpcy5fZXwwLHRoaXMuX2Y9aWUrdGhpcy5fZnwwLHRoaXMuX2c9dWUrdGhpcy5fZ3wwLHRoaXMuX2g9Z2UrdGhpcy5faHwwfSxQLnByb3RvdHlwZS5faGFz''@;'; put 'put ''aD1mdW5jdGlvbigpe3ZhciBaPXAuYWxsb2NVbnNhZmUoMzIpO3JldHVybiBaLndyaXRlSW50MzJCRSh0aGlzLl9hLDApLFoud3JpdGVJbnQzMkJFKHRoaXMuX2IsNCksWi53cml0ZUludDMyQkUodGhpcy5fYyw4KSxaLndyaXRlSW50MzJCRSh0aGlzLl9kLDEyKSxaLndyaXRlSW50MzJCRSh0''@;'; put 'put ''aGlzLl9lLDE2KSxaLndyaXRlSW50MzJCRSh0aGlzLl9mLDIwKSxaLndyaXRlSW50MzJCRSh0aGlzLl9nLDI0KSxaLndyaXRlSW50MzJCRSh0aGlzLl9oLDI4KSxafSxjZS5leHBvcnRzPVB9LDE2ODY6KGNlLFgsYik9Pnt2YXIgST1iKDU3MTcpLF89Yig3ODE2KSxwPWIoNDE4OSksVj1iKDk1''@;'; put 'put ''MDkpLkJ1ZmZlcix3PW5ldyBBcnJheSgxNjApO2Z1bmN0aW9uIFAoKXt0aGlzLmluaXQoKSx0aGlzLl93PXcscC5jYWxsKHRoaXMsMTI4LDExMil9SShQLF8pLFAucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWg9MzQxODA3MDM2NSx0aGlzLl9iaD0xNjU0MjcwMjUw''@;'; put 'put ''LHRoaXMuX2NoPTI0Mzg1MjkzNzAsdGhpcy5fZGg9MzU1NDYyMzYwLHRoaXMuX2VoPTE3MzE0MDU0MTUsdGhpcy5fZmg9MjM5NDE4MDIzMSx0aGlzLl9naD0zNjc1MDA4NTI1LHRoaXMuX2hoPTEyMDMwNjI4MTMsdGhpcy5fYWw9MzIzODM3MTAzMix0aGlzLl9ibD05MTQxNTA2NjMsdGhpcy5f''@;'; put 'put ''Y2w9ODEyNzAyOTk5LHRoaXMuX2RsPTQxNDQ5MTI2OTcsdGhpcy5fZWw9NDI5MDc3NTg1Nyx0aGlzLl9mbD0xNzUwNjAzMDI1LHRoaXMuX2dsPTE2OTQwNzY4MzksdGhpcy5faGw9MzIwNDA3NTQyOCx0aGlzfSxQLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBGPVYuYWxsb2NVbnNh''@;'; put 'put ''ZmUoNDgpO2Z1bmN0aW9uIFIoeixOLE8pe0Yud3JpdGVJbnQzMkJFKHosTyksRi53cml0ZUludDMyQkUoTixPKzQpfXJldHVybiBSKHRoaXMuX2FoLHRoaXMuX2FsLDApLFIodGhpcy5fYmgsdGhpcy5fYmwsOCksUih0aGlzLl9jaCx0aGlzLl9jbCwxNiksUih0aGlzLl9kaCx0aGlzLl9kbCwy''@;'; put 'put ''NCksUih0aGlzLl9laCx0aGlzLl9lbCwzMiksUih0aGlzLl9maCx0aGlzLl9mbCw0MCksRn0sY2UuZXhwb3J0cz1QfSw3ODE2OihjZSxYLGIpPT57dmFyIEk9Yig1NzE3KSxfPWIoNDE4OSkscD1iKDk1MDkpLkJ1ZmZlcixWPVsxMTE2MzUyNDA4LDM2MDk3Njc0NTgsMTg5OTQ0NzQ0MSw2MDI4''@;'; put 'put ''OTE3MjUsMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5LDM5MjEwMDk1NzMsMjE3MzI5NTU0OCw5NjE5ODcxNjMsNDA4MTYyODQ3MiwxNTA4OTcwOTkzLDMwNTM4MzQyNjUsMjQ1MzYzNTc0OCwyOTM3NjcxNTc5LDI4NzA3NjMyMjEsMzY2NDYwOTU2MCwzNjI0MzgxMDgwLDI3MzQ4ODMzOTQsMzEwNTk4''@;'; put 'put ''NDAxLDExNjQ5OTY1NDIsNjA3MjI1Mjc4LDEzMjM2MTA3NjQsMTQyNjg4MTk4NywzNTkwMzA0OTk0LDE5MjUwNzgzODgsNDA2ODE4MjM4MywyMTYyMDc4MjA2LDk5MTMzNjExMywyNjE0ODg4MTAzLDYzMzgwMzMxNywzMjQ4MjIyNTgwLDM0Nzk3NzQ4NjgsMzgzNTM5MDQwMSwyNjY2NjEzNDU4''@;'; put 'put ''LDQwMjIyMjQ3NzQsOTQ0NzExMTM5LDI2NDM0NzA3OCwyMzQxMjYyNzczLDYwNDgwNzYyOCwyMDA3ODAwOTMzLDc3MDI1NTk4MywxNDk1OTkwOTAxLDEyNDkxNTAxMjIsMTg1NjQzMTIzNSwxNTU1MDgxNjkyLDMxNzUyMTgxMzIsMTk5NjA2NDk4NiwyMTk4OTUwODM3LDI1NTQyMjA4ODIsMzk5''@;'; put 'put ''OTcxOTMzOSwyODIxODM0MzQ5LDc2Njc4NDAxNiwyOTUyOTk2ODA4LDI1NjY1OTQ4NzksMzIxMDMxMzY3MSwzMjAzMzM3OTU2LDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiwzNTg0NTI4NzExLDI0NjY5NDg5MDEsMTEzOTI2OTkzLDM3NTgzMjYzODMsMzM4MjQxODk1LDE2ODcxNzkzNiw2NjYzMDcy''@;'; put 'put ''MDUsMTE4ODE3OTk2NCw3NzM1Mjk5MTIsMTU0NjA0NTczNCwxMjk0NzU3MzcyLDE1MjI4MDU0ODUsMTM5NjE4MjI5MSwyNjQzODMzODIzLDE2OTUxODM3MDAsMjM0MzUyNzM5MCwxOTg2NjYxMDUxLDEwMTQ0Nzc0ODAsMjE3NzAyNjM1MCwxMjA2NzU5MTQyLDI0NTY5NTYwMzcsMzQ0MDc3NjI3''@;'; put 'put ''LDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCwyODIwMzAyNDExLDMxNTg0NTQyNzMsMzI1OTczMDgwMCwzNTA1OTUyNjU3LDMzNDU3NjQ3NzEsMTA2MjE3MDA4LDM1MTYwNjU4MTcsMzYwNjAwODM0NCwzNjAwMzUyODA0LDE0MzI3MjU3NzYsNDA5NDU3MTkwOSwxNDY3MDMxNTk0LDI3NTQyMzM0NCw4''@;'; put 'put ''NTExNjk3MjAsNDMwMjI3NzM0LDMxMDA4MjM3NTIsNTA2OTQ4NjE2LDEzNjMyNTgxOTUsNjU5MDYwNTU2LDM3NTA2ODU1OTMsODgzOTk3ODc3LDM3ODUwNTAyODAsOTU4MTM5NTcxLDMzMTgzMDc0MjcsMTMyMjgyMjIxOCwzODEyNzIzNDAzLDE1MzcwMDIwNjMsMjAwMzAzNDk5NSwxNzQ3ODcz''@;'; put 'put ''Nzc5LDM2MDIwMzY4OTksMTk1NTU2MjIyMiwxNTc1OTkwMDEyLDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCwyMjI3NzMwNDUyLDI3MTY5MDQzMDYsMjM2MTg1MjQyNCw0NDI3NzYwNDQsMjQyODQzNjQ3NCw1OTM2OTgzNDQsMjc1NjczNDE4NywzNzMzMTEwMjQ5LDMyMDQwMzE0NzksMjk5OTM1MTU3''@;'; put 'put ''MywzMzI5MzI1Mjk4LDM4MTU5MjA0MjcsMzM5MTU2OTYxNCwzOTI4MzgzOTAwLDM1MTUyNjcyNzEsNTY2MjgwNzExLDM5NDAxODc2MDYsMzQ1NDA2OTUzNCw0MTE4NjMwMjcxLDQwMDAyMzk5OTIsMTE2NDE4NDc0LDE5MTQxMzg1NTQsMTc0MjkyNDIxLDI3MzEwNTUyNzAsMjg5MzgwMzU2LDMy''@;'; put 'put ''MDM5OTMwMDYsNDYwMzkzMjY5LDMyMDYyMDMxNSw2ODU0NzE3MzMsNTg3NDk2ODM2LDg1MjE0Mjk3MSwxMDg2NzkyODUxLDEwMTcwMzYyOTgsMzY1NTQzMTAwLDExMjYwMDA1ODAsMjYxODI5NzY3NiwxMjg4MDMzNDcwLDM0MDk4NTUxNTgsMTUwMTUwNTk0OCw0MjM0NTA5ODY2LDE2MDcxNjc5''@;'; put 'put ''MTUsOTg3MTY3NDY4LDE4MTY0MDIzMTYsMTI0NjE4OTU5MV0sdz1uZXcgQXJyYXkoMTYwKTtmdW5jdGlvbiBQKCl7dGhpcy5pbml0KCksdGhpcy5fdz13LF8uY2FsbCh0aGlzLDEyOCwxMTIpfWZ1bmN0aW9uIEYocSxlZSxKKXtyZXR1cm4gSl5xJihlZV5KKX1mdW5jdGlvbiBSKHEsZWUsSil7''@;'; put 'put ''cmV0dXJuIHEmZWV8SiYocXxlZSl9ZnVuY3Rpb24geihxLGVlKXtyZXR1cm4ocT4+PjI4fGVlPDw0KV4oZWU+Pj4yfHE8PDMwKV4oZWU+Pj43fHE8PDI1KX1mdW5jdGlvbiBOKHEsZWUpe3JldHVybihxPj4+MTR8ZWU8PDE4KV4ocT4+PjE4fGVlPDwxNCleKGVlPj4+OXxxPDwyMyl9ZnVuY3Rp''@;'; put 'put ''b24gTyhxLGVlKXtyZXR1cm4ocT4+PjF8ZWU8PDMxKV4ocT4+Pjh8ZWU8PDI0KV5xPj4+N31mdW5jdGlvbiBLKHEsZWUpe3JldHVybihxPj4+MXxlZTw8MzEpXihxPj4+OHxlZTw8MjQpXihxPj4+N3xlZTw8MjUpfWZ1bmN0aW9uIFoocSxlZSl7cmV0dXJuKHE+Pj4xOXxlZTw8MTMpXihlZT4+''@;'; put 'put ''PjI5fHE8PDMpXnE+Pj42fWZ1bmN0aW9uIFkocSxlZSl7cmV0dXJuKHE+Pj4xOXxlZTw8MTMpXihlZT4+PjI5fHE8PDMpXihxPj4+NnxlZTw8MjYpfWZ1bmN0aW9uIFcocSxlZSl7cmV0dXJuIHE+Pj4wPGVlPj4+MD8xOjB9SShQLF8pLFAucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fYWg9MTc3OTAzMzcwMyx0aGlzLl9iaD0zMTQ0MTM0Mjc3LHRoaXMuX2NoPTEwMTM5MDQyNDIsdGhpcy5fZGg9Mjc3MzQ4MDc2Mix0aGlzLl9laD0xMzU5ODkzMTE5LHRoaXMuX2ZoPTI2MDA4MjI5MjQsdGhpcy5fZ2g9NTI4NzM0NjM1LHRoaXMuX2hoPTE1NDE0NTkyMjUsdGhp''@;'; put 'put ''cy5fYWw9NDA4OTIzNTcyMCx0aGlzLl9ibD0yMjI3ODczNTk1LHRoaXMuX2NsPTQyNzExNzU3MjMsdGhpcy5fZGw9MTU5NTc1MDEyOSx0aGlzLl9lbD0yOTE3NTY1MTM3LHRoaXMuX2ZsPTcyNTUxMTE5OSx0aGlzLl9nbD00MjE1Mzg5NTQ3LHRoaXMuX2hsPTMyNzAzMzIwOSx0aGlzfSxQLnBy''@;'; put 'put ''b3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHEpe2Zvcih2YXIgZWU9dGhpcy5fdyxKPTB8dGhpcy5fYWgscmU9MHx0aGlzLl9iaCxpZT0wfHRoaXMuX2NoLHVlPTB8dGhpcy5fZGgsZ2U9MHx0aGlzLl9laCxfZT0wfHRoaXMuX2ZoLFRlPTB8dGhpcy5fZ2gsTWU9MHx0aGlzLl9oaCxaZT0wfHRo''@;'; put 'put ''aXMuX2FsLEI9MHx0aGlzLl9ibCxnPTB8dGhpcy5fY2wseT0wfHRoaXMuX2RsLHg9MHx0aGlzLl9lbCxDPTB8dGhpcy5fZmwsVD0wfHRoaXMuX2dsLEg9MHx0aGlzLl9obCxqPTA7ajwzMjtqKz0yKWVlW2pdPXEucmVhZEludDMyQkUoNCpqKSxlZVtqKzFdPXEucmVhZEludDMyQkUoNCpqKzQp''@;'; put 'put ''O2Zvcig7ajwxNjA7ais9Mil7dmFyIEU9ZWVbai0zMF0sbT1lZVtqLTMwKzFdLEE9TyhFLG0pLGFlPUsobSxFKSxuZT1aKEU9ZWVbai00XSxtPWVlW2otNCsxXSksc2U9WShtLEUpLEplPWVlW2otMzJdLGl0PWVlW2otMzIrMV0seGU9YWUrZWVbai0xNCsxXXwwLHllPUErZWVbai0xNF0rVyh4''@;'; put 'put ''ZSxhZSl8MDt5ZT0oeWU9eWUrbmUrVyh4ZT14ZStzZXwwLHNlKXwwKStKZStXKHhlPXhlK2l0fDAsaXQpfDAsZWVbal09eWUsZWVbaisxXT14ZX1mb3IodmFyIEtlPTA7S2U8MTYwO0tlKz0yKXt5ZT1lZVtLZV0seGU9ZWVbS2UrMV07dmFyIGplPVIoSixyZSxpZSksa2U9UihaZSxCLGcpLEhl''@;'; put 'put ''PXooSixaZSksTGU9eihaZSxKKSxSZT1OKGdlLHgpLFZlPU4oeCxnZSksQWU9VltLZV0sRGU9VltLZSsxXSxfdD1GKGdlLF9lLFRlKSxydD1GKHgsQyxUKSxRZT1IK1ZlfDAsc249TWUrUmUrVyhRZSxIKXwwO3NuPShzbj0oc249c24rX3QrVyhRZT1RZStydHwwLHJ0KXwwKStBZStXKFFlPVFl''@;'; put 'put ''K0RlfDAsRGUpfDApK3llK1coUWU9UWUreGV8MCx4ZSl8MDt2YXIgdnQ9TGUra2V8MCxTdD1IZStqZStXKHZ0LExlKXwwO01lPVRlLEg9VCxUZT1fZSxUPUMsX2U9Z2UsQz14LGdlPXVlK3NuK1coeD15K1FlfDAseSl8MCx1ZT1pZSx5PWcsaWU9cmUsZz1CLHJlPUosQj1aZSxKPXNuK1N0K1co''@;'; put 'put ''WmU9UWUrdnR8MCxRZSl8MH10aGlzLl9hbD10aGlzLl9hbCtaZXwwLHRoaXMuX2JsPXRoaXMuX2JsK0J8MCx0aGlzLl9jbD10aGlzLl9jbCtnfDAsdGhpcy5fZGw9dGhpcy5fZGwreXwwLHRoaXMuX2VsPXRoaXMuX2VsK3h8MCx0aGlzLl9mbD10aGlzLl9mbCtDfDAsdGhpcy5fZ2w9dGhpcy5f''@;'; put 'put ''Z2wrVHwwLHRoaXMuX2hsPXRoaXMuX2hsK0h8MCx0aGlzLl9haD10aGlzLl9haCtKK1codGhpcy5fYWwsWmUpfDAsdGhpcy5fYmg9dGhpcy5fYmgrcmUrVyh0aGlzLl9ibCxCKXwwLHRoaXMuX2NoPXRoaXMuX2NoK2llK1codGhpcy5fY2wsZyl8MCx0aGlzLl9kaD10aGlzLl9kaCt1ZStXKHRo''@;'; put 'put ''aXMuX2RsLHkpfDAsdGhpcy5fZWg9dGhpcy5fZWgrZ2UrVyh0aGlzLl9lbCx4KXwwLHRoaXMuX2ZoPXRoaXMuX2ZoK19lK1codGhpcy5fZmwsQyl8MCx0aGlzLl9naD10aGlzLl9naCtUZStXKHRoaXMuX2dsLFQpfDAsdGhpcy5faGg9dGhpcy5faGgrTWUrVyh0aGlzLl9obCxIKXwwfSxQLnBy''@;'; put 'put ''b3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBxPXAuYWxsb2NVbnNhZmUoNjQpO2Z1bmN0aW9uIGVlKEoscmUsaWUpe3Eud3JpdGVJbnQzMkJFKEosaWUpLHEud3JpdGVJbnQzMkJFKHJlLGllKzQpfXJldHVybiBlZSh0aGlzLl9haCx0aGlzLl9hbCwwKSxlZSh0aGlzLl9iaCx0aGlzLl9i''@;'; put 'put ''bCw4KSxlZSh0aGlzLl9jaCx0aGlzLl9jbCwxNiksZWUodGhpcy5fZGgsdGhpcy5fZGwsMjQpLGVlKHRoaXMuX2VoLHRoaXMuX2VsLDMyKSxlZSh0aGlzLl9maCx0aGlzLl9mbCw0MCksZWUodGhpcy5fZ2gsdGhpcy5fZ2wsNDgpLGVlKHRoaXMuX2hoLHRoaXMuX2hsLDU2KSxxfSxjZS5leHBv''@;'; put 'put ''cnRzPVB9LDI4MzA6KGNlLFgsYik9PntjZS5leHBvcnRzPXA7dmFyIEk9Yig3MTg3KS5FdmVudEVtaXR0ZXI7ZnVuY3Rpb24gcCgpe0kuY2FsbCh0aGlzKX1iKDU3MTcpKHAsSSkscC5SZWFkYWJsZT1iKDk0ODEpLHAuV3JpdGFibGU9Yig0MjI5KSxwLkR1cGxleD1iKDY3NTMpLHAuVHJhbnNm''@;'; put 'put ''b3JtPWIoNDYwNSkscC5QYXNzVGhyb3VnaD1iKDI3MjUpLHAuZmluaXNoZWQ9Yig4NjEwKSxwLnBpcGVsaW5lPWIoOTk0NikscC5TdHJlYW09cCxwLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKFYsdyl7dmFyIFA9dGhpcztmdW5jdGlvbiBGKFkpe1Yud3JpdGFibGUmJiExPT09Vi53cml0ZShZ''@;'; put 'put ''KSYmUC5wYXVzZSYmUC5wYXVzZSgpfWZ1bmN0aW9uIFIoKXtQLnJlYWRhYmxlJiZQLnJlc3VtZSYmUC5yZXN1bWUoKX1QLm9uKCJkYXRhIixGKSxWLm9uKCJkcmFpbiIsUiksIVYuX2lzU3RkaW8mJighd3x8ITEhPT13LmVuZCkmJihQLm9uKCJlbmQiLE4pLFAub24oImNsb3NlIixPKSk7dmFy''@;'; put 'put ''IHo9ITE7ZnVuY3Rpb24gTigpe3p8fCh6PSEwLFYuZW5kKCkpfWZ1bmN0aW9uIE8oKXt6fHwoej0hMCwiZnVuY3Rpb24iPT10eXBlb2YgVi5kZXN0cm95JiZWLmRlc3Ryb3koKSl9ZnVuY3Rpb24gSyhZKXtpZihaKCksMD09PUkubGlzdGVuZXJDb3VudCh0aGlzLCJlcnJvciIpKXRocm93IFl9''@;'; put 'put ''ZnVuY3Rpb24gWigpe1AucmVtb3ZlTGlzdGVuZXIoImRhdGEiLEYpLFYucmVtb3ZlTGlzdGVuZXIoImRyYWluIixSKSxQLnJlbW92ZUxpc3RlbmVyKCJlbmQiLE4pLFAucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixPKSxQLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsSyksVi5yZW1vdmVMaXN0ZW5l''@;'; put 'put ''cigiZXJyb3IiLEspLFAucmVtb3ZlTGlzdGVuZXIoImVuZCIsWiksUC5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLFopLFYucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixaKX1yZXR1cm4gUC5vbigiZXJyb3IiLEspLFYub24oImVycm9yIixLKSxQLm9uKCJlbmQiLFopLFAub24oImNsb3NlIixaKSxW''@;'; put 'put ''Lm9uKCJjbG9zZSIsWiksVi5lbWl0KCJwaXBlIixQKSxWfX0sMjU1MzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDk1MDkpLkJ1ZmZlcixfPUkuaXNFbmNvZGluZ3x8ZnVuY3Rpb24oSil7c3dpdGNoKChKPSIiK0opJiZKLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0''@;'; put 'put ''ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOmNhc2UicmF3IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX07ZnVuY3Rpb24gdyhKKXt2YXIgcmU7''@;'; put 'put ''c3dpdGNoKHRoaXMuZW5jb2Rpbmc9ZnVuY3Rpb24gVihKKXt2YXIgcmU9ZnVuY3Rpb24gcChKKXtpZighSilyZXR1cm4idXRmOCI7Zm9yKHZhciByZTs7KXN3aXRjaChKKXtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiJ1dGY4IjtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRm''@;'; put 'put ''MTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuInV0ZjE2bGUiO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuImxhdGluMSI7Y2FzZSJiYXNlNjQiOmNhc2UiYXNjaWkiOmNhc2UiaGV4IjpyZXR1cm4gSjtkZWZhdWx0OmlmKHJlKXJldHVybjtKPSgiIitKKS50b0xvd2VyQ2FzZSgp''@;'; put 'put ''LHJlPSEwfX0oSik7aWYoInN0cmluZyIhPXR5cGVvZiByZSYmKEkuaXNFbmNvZGluZz09PV98fCFfKEopKSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrSik7cmV0dXJuIHJlfHxKfShKKSx0aGlzLmVuY29kaW5nKXtjYXNlInV0ZjE2bGUiOnRoaXMudGV4dD1LLHRoaXMu''@;'; put 'put ''ZW5kPVoscmU9NDticmVhaztjYXNlInV0ZjgiOnRoaXMuZmlsbExhc3Q9eixyZT00O2JyZWFrO2Nhc2UiYmFzZTY0Ijp0aGlzLnRleHQ9WSx0aGlzLmVuZD1XLHJlPTM7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdGhpcy53cml0ZT1xLHZvaWQodGhpcy5lbmQ9ZWUpfXRoaXMubGFzdE5lZWQ9MCx0''@;'; put 'put ''aGlzLmxhc3RUb3RhbD0wLHRoaXMubGFzdENoYXI9SS5hbGxvY1Vuc2FmZShyZSl9ZnVuY3Rpb24gUChKKXtyZXR1cm4gSjw9MTI3PzA6Sj4+NT09Nj8yOko+PjQ9PTE0PzM6Sj4+Mz09MzA/NDpKPj42PT0yPy0xOi0yfWZ1bmN0aW9uIHooSil7dmFyIHJlPXRoaXMubGFzdFRvdGFsLXRoaXMu''@;'; put 'put ''bGFzdE5lZWQsaWU9ZnVuY3Rpb24gUihKLHJlKXtpZigxMjghPSgxOTImcmVbMF0pKXJldHVybiBKLmxhc3ROZWVkPTAsIlx1ZmZmZCI7aWYoSi5sYXN0TmVlZD4xJiZyZS5sZW5ndGg+MSl7aWYoMTI4IT0oMTkyJnJlWzFdKSlyZXR1cm4gSi5sYXN0TmVlZD0xLCJcdWZmZmQiO2lmKEoubGFz''@;'; put 'put ''dE5lZWQ+MiYmcmUubGVuZ3RoPjImJjEyOCE9KDE5MiZyZVsyXSkpcmV0dXJuIEoubGFzdE5lZWQ9MiwiXHVmZmZkIn19KHRoaXMsSik7cmV0dXJuIHZvaWQgMCE9PWllP2llOnRoaXMubGFzdE5lZWQ8PUoubGVuZ3RoPyhKLmNvcHkodGhpcy5sYXN0Q2hhcixyZSwwLHRoaXMubGFzdE5lZWQp''@;'; put 'put ''LHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKSk6KEouY29weSh0aGlzLmxhc3RDaGFyLHJlLDAsSi5sZW5ndGgpLHZvaWQodGhpcy5sYXN0TmVlZC09Si5sZW5ndGgpKX1mdW5jdGlvbiBLKEoscmUpe2lmKChKLmxlbmd0aC1yZSklMj09MCl7''@;'; put 'put ''dmFyIGllPUoudG9TdHJpbmcoInV0ZjE2bGUiLHJlKTtpZihpZSl7dmFyIHVlPWllLmNoYXJDb2RlQXQoaWUubGVuZ3RoLTEpO2lmKHVlPj01NTI5NiYmdWU8PTU2MzE5KXJldHVybiB0aGlzLmxhc3ROZWVkPTIsdGhpcy5sYXN0VG90YWw9NCx0aGlzLmxhc3RDaGFyWzBdPUpbSi5sZW5ndGgt''@;'; put 'put ''Ml0sdGhpcy5sYXN0Q2hhclsxXT1KW0oubGVuZ3RoLTFdLGllLnNsaWNlKDAsLTEpfXJldHVybiBpZX1yZXR1cm4gdGhpcy5sYXN0TmVlZD0xLHRoaXMubGFzdFRvdGFsPTIsdGhpcy5sYXN0Q2hhclswXT1KW0oubGVuZ3RoLTFdLEoudG9TdHJpbmcoInV0ZjE2bGUiLHJlLEoubGVuZ3RoLTEp''@;'; put 'put ''fWZ1bmN0aW9uIFooSil7dmFyIHJlPUomJkoubGVuZ3RoP3RoaXMud3JpdGUoSik6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/cmUrdGhpcy5sYXN0Q2hhci50b1N0cmluZygidXRmMTZsZSIsMCx0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkKTpyZX1mdW5jdGlvbiBZKEoscmUpe3ZhciBp''@;'; put 'put ''ZT0oSi5sZW5ndGgtcmUpJTM7cmV0dXJuIDA9PT1pZT9KLnRvU3RyaW5nKCJiYXNlNjQiLHJlKToodGhpcy5sYXN0TmVlZD0zLWllLHRoaXMubGFzdFRvdGFsPTMsMT09PWllP3RoaXMubGFzdENoYXJbMF09SltKLmxlbmd0aC0xXToodGhpcy5sYXN0Q2hhclswXT1KW0oubGVuZ3RoLTJdLHRo''@;'; put 'put ''aXMubGFzdENoYXJbMV09SltKLmxlbmd0aC0xXSksSi50b1N0cmluZygiYmFzZTY0IixyZSxKLmxlbmd0aC1pZSkpfWZ1bmN0aW9uIFcoSil7dmFyIHJlPUomJkoubGVuZ3RoP3RoaXMud3JpdGUoSik6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/cmUrdGhpcy5sYXN0Q2hhci50b1N0cmluZygi''@;'; put 'put ''YmFzZTY0IiwwLDMtdGhpcy5sYXN0TmVlZCk6cmV9ZnVuY3Rpb24gcShKKXtyZXR1cm4gSi50b1N0cmluZyh0aGlzLmVuY29kaW5nKX1mdW5jdGlvbiBlZShKKXtyZXR1cm4gSiYmSi5sZW5ndGg/dGhpcy53cml0ZShKKToiIn1YLnM9dyx3LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihKKXtp''@;'; put 'put ''ZigwPT09Si5sZW5ndGgpcmV0dXJuIiI7dmFyIHJlLGllO2lmKHRoaXMubGFzdE5lZWQpe2lmKHZvaWQgMD09PShyZT10aGlzLmZpbGxMYXN0KEopKSlyZXR1cm4iIjtpZT10aGlzLmxhc3ROZWVkLHRoaXMubGFzdE5lZWQ9MH1lbHNlIGllPTA7cmV0dXJuIGllPEoubGVuZ3RoP3JlP3JlK3Ro''@;'; put 'put ''aXMudGV4dChKLGllKTp0aGlzLnRleHQoSixpZSk6cmV8fCIifSx3LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24gTyhKKXt2YXIgcmU9SiYmSi5sZW5ndGg/dGhpcy53cml0ZShKKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9yZSsiXHVmZmZkIjpyZX0sdy5wcm90b3R5cGUudGV4dD1mdW5jdGlv''@;'; put 'put ''biBOKEoscmUpe3ZhciBpZT1mdW5jdGlvbiBGKEoscmUsaWUpe3ZhciB1ZT1yZS5sZW5ndGgtMTtpZih1ZTxpZSlyZXR1cm4gMDt2YXIgZ2U9UChyZVt1ZV0pO3JldHVybiBnZT49MD8oZ2U+MCYmKEoubGFzdE5lZWQ9Z2UtMSksZ2UpOi0tdWU8aWV8fC0yPT09Z2U/MDooZ2U9UChyZVt1ZV0p''@;'; put 'put ''KT49MD8oZ2U+MCYmKEoubGFzdE5lZWQ9Z2UtMiksZ2UpOi0tdWU8aWV8fC0yPT09Z2U/MDooZ2U9UChyZVt1ZV0pKT49MD8oZ2U+MCYmKDI9PT1nZT9nZT0wOkoubGFzdE5lZWQ9Z2UtMyksZ2UpOjB9KHRoaXMsSixyZSk7aWYoIXRoaXMubGFzdE5lZWQpcmV0dXJuIEoudG9TdHJpbmcoInV0''@;'; put 'put ''ZjgiLHJlKTt0aGlzLmxhc3RUb3RhbD1pZTt2YXIgdWU9Si5sZW5ndGgtKGllLXRoaXMubGFzdE5lZWQpO3JldHVybiBKLmNvcHkodGhpcy5sYXN0Q2hhciwwLHVlKSxKLnRvU3RyaW5nKCJ1dGY4IixyZSx1ZSl9LHcucHJvdG90eXBlLmZpbGxMYXN0PWZ1bmN0aW9uKEope2lmKHRoaXMubGFz''@;'; put 'put ''dE5lZWQ8PUoubGVuZ3RoKXJldHVybiBKLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpO0ouY29weSh0aGlzLmxhc3RDaGFy''@;'; put 'put ''LHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCxKLmxlbmd0aCksdGhpcy5sYXN0TmVlZC09Si5sZW5ndGh9fSw3ODU3OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9YigzNjg5KSxfPWIoNDU2NCkscD1iKDc1MiksVj1iKDIyMjQpLnksdz1iKDU3NjEpLm0sUD1iKDg5NzEp''@;'; put 'put ''LlUsRj1iKDc2NTIpLFI9Yig0NTYpLHtmcm9tQ2FsbGJhY2s6en09Yig3MDQxKSx7Z2V0Q3VzdG9tSW5zcGVjdFN5bWJvbDpOfT1iKDEyNjkpLE89L15bXHgyMVx4MjMtXHgyQlx4MkQtXHgzQVx4M0MtXHg1Qlx4NUQtXHg3RV0rJC8sSz0vW1x4MDAtXHgxRl0vLFo9WyJcbiIsIlxyIiwiXDAi''@;'; put 'put ''XSxZPS9bXHgyMC1ceDNBXHgzQy1ceDdFXSsvLFc9L1tceDA5XHgyMC1ceDJGXHgzQi1ceDQwXHg1Qi1ceDYwXHg3Qi1ceDdFXS8scT17amFuOjAsZmViOjEsbWFyOjIsYXByOjMsbWF5OjQsanVuOjUsanVsOjYsYXVnOjcsc2VwOjgsb2N0Ojksbm92OjEwLGRlYzoxMX0sZWU9MjE0NzQ4MzY0''@;'; put 'put ''N2UzLHJlPSdJbnZhbGlkIHNhbWVTaXRlQ29udGV4dCBvcHRpb24gZm9yIGdldENvb2tpZXMoKTsgZXhwZWN0ZWQgb25lIG9mICJzdHJpY3QiLCAibGF4Iiwgb3IgIm5vbmUiJztmdW5jdGlvbiBpZShqZSl7Ri52YWxpZGF0ZShGLmlzTm9uRW1wdHlTdHJpbmcoamUpLGplKTtjb25zdCBrZT1T''@;'; put 'put ''dHJpbmcoamUpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIm5vbmUiPT09a2V8fCJsYXgiPT09a2V8fCJzdHJpY3QiPT09a2U/a2U6bnVsbH1jb25zdCB1ZT1PYmplY3QuZnJlZXplKHtTSUxFTlQ6InNpbGVudCIsU1RSSUNUOiJzdHJpY3QiLERJU0FCTEVEOiJ1bnNhZmUtZGlzYWJsZWQifSksZ2U9''@;'; put 'put ''Lyg/Ol4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfSQpfCg/Ol4oPzooPzpbYS1mXGRdezEsNH06KXs3fSg/OlthLWZcZF17MSw0fXw6KXwoPzpbYS1mXGRdezEsNH06KXs2fSg/Oig/OjI1''@;'; put 'put ''WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fDpbYS1mXGRdezEsNH18Oil8KD86W2EtZlxkXXsxLDR9Oil7NX0oPzo6KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86''@;'; put 'put ''MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSwyfXw6KXwoPzpbYS1mXGRdezEsNH06KXs0fSg/Oig/OjpbYS1mXGRdezEsNH0pezAsMX06KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwy''@;'; put 'put ''WzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSwzfXw6KXwoPzpbYS1mXGRdezEsNH06KXszfSg/Oig/OjpbYS1mXGRdezEsNH0pezAsMn06KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwx''@;'; put 'put ''XGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSw0fXw6KXwoPzpbYS1mXGRdezEsNH06KXsyfSg/Oig/OjpbYS1mXGRdezEsNH0pezAsM306KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05''@;'; put 'put ''XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSw1fXw6KXwoPzpbYS1mXGRdezEsNH06KXsxfSg/Oig/OjpbYS1mXGRdezEsNH0pezAsNH06KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7''@;'; put 'put ''M318KD86OlthLWZcZF17MSw0fSl7MSw2fXw6KXwoPzo6KD86KD86OlthLWZcZF17MSw0fSl7MCw1fTooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXwoPzo6W2EtZlxkXXsxLDR9KXsxLDd9''@;'; put 'put ''fDopKSkkKS8sX2U9IlxuXFxbPyg/OlxuKD86W2EtZkEtRlxcZF17MSw0fTopezd9KD86W2EtZkEtRlxcZF17MSw0fXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXs2fSg/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRd''@;'; put 'put ''XFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318OlthLWZBLUZcXGRdezEsNH18Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7NX0oPzo6KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxc''@;'; put 'put ''ZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSwyfXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXs0fSg/Oig/OjpbYS1mQS1GXFxkXXsxLDR9KXswLDF9Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxk''@;'; put 'put ''fDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsM318Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7M30oPzooPzo6W2EtZkEtRlxcZF17MSw0fSl7MCwyfTooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoy''@;'; put 'put ''NVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDR9fDopfFxuKD86W2EtZkEtRlxcZF17MSw0fTopezJ9KD86KD86OlthLWZBLUZcXGRdezEsNH0pezAsM306KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxc''@;'; put 'put ''ZHxcXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSw1fXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXsxfSg/Oig/OjpbYS1mQS1GXFxkXXsxLDR9KXswLDR9Oig/OjI1WzAtNV18MlswLTRdXFxk''@;'; put 'put ''fDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsNn18Oil8XG4oPzo6KD86KD86OlthLWZBLUZcXGRdezEsNH0pezAsNX06KD86MjVbMC01XXwyWzAtNF1cXGR8MVxc''@;'; put 'put ''ZFxcZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSw3fXw6KSlcbikoPzolWzAtOWEtekEtWl17MSx9KT9cXF0/XG4iLnJlcGxhY2UoL1xzKlwvXC8uKiQvZ20sIiIpLnJlcGxh''@;'; put 'put ''Y2UoL1xuL2csIiIpLnRyaW0oKSxUZT1uZXcgUmVnRXhwKGBeJHtfZX0kYCk7ZnVuY3Rpb24gTWUoamUsa2UsSGUsTGUpe2xldCBSZT0wO2Zvcig7UmU8amUubGVuZ3RoOyl7Y29uc3QgVmU9amUuY2hhckNvZGVBdChSZSk7aWYoVmU8PTQ3fHxWZT49NTgpYnJlYWs7UmUrK31yZXR1cm4gUmU8''@;'; put 'put ''a2V8fFJlPkhlfHwhTGUmJlJlIT1qZS5sZW5ndGg/bnVsbDpwYXJzZUludChqZS5zdWJzdHIoMCxSZSksMTApfWZ1bmN0aW9uIFplKGplKXtjb25zdCBrZT1qZS5zcGxpdCgiOiIpLEhlPVswLDAsMF07aWYoMyE9PWtlLmxlbmd0aClyZXR1cm4gbnVsbDtmb3IobGV0IExlPTA7TGU8MztMZSsr''@;'; put 'put ''KXtjb25zdCBWZT1NZShrZVtMZV0sMSwyLDI9PUxlKTtpZihudWxsPT09VmUpcmV0dXJuIG51bGw7SGVbTGVdPVZlfXJldHVybiBIZX1mdW5jdGlvbiBCKGplKXtqZT1TdHJpbmcoamUpLnN1YnN0cigwLDMpLnRvTG93ZXJDYXNlKCk7Y29uc3Qga2U9cVtqZV07cmV0dXJuIGtlPj0wP2tlOm51''@;'; put 'put ''bGx9ZnVuY3Rpb24gZyhqZSl7aWYoIWplKXJldHVybjtjb25zdCBrZT1qZS5zcGxpdChXKTtpZigha2UpcmV0dXJuO2xldCBIZT1udWxsLExlPW51bGwsUmU9bnVsbCxWZT1udWxsLEFlPW51bGwsRGU9bnVsbDtmb3IobGV0IF90PTA7X3Q8a2UubGVuZ3RoO190Kyspe2NvbnN0IHJ0PWtlW190''@;'; put 'put ''XS50cmltKCk7aWYoIXJ0Lmxlbmd0aCljb250aW51ZTtsZXQgUWU7bnVsbD09PVJlJiYoUWU9WmUocnQpLFFlKT8oSGU9UWVbMF0sTGU9UWVbMV0sUmU9UWVbMl0pOm51bGwhPT1WZXx8KFFlPU1lKHJ0LDEsMiwhMCksbnVsbD09PVFlKT9udWxsIT09QWV8fChRZT1CKHJ0KSxudWxsPT09UWUp''@;'; put 'put ''P251bGw9PT1EZSYmKFFlPU1lKHJ0LDIsNCwhMCksbnVsbCE9PVFlJiYoRGU9UWUsRGU+PTcwJiZEZTw9OTk/RGUrPTE5MDA6RGU+PTAmJkRlPD02OSYmKERlKz0yZTMpKSk6QWU9UWU6VmU9UWV9cmV0dXJuIG51bGw9PT1WZXx8bnVsbD09PUFlfHxudWxsPT09RGV8fG51bGw9PT1SZXx8VmU8''@;'; put 'put ''MXx8VmU+MzF8fERlPDE2MDF8fEhlPjIzfHxMZT41OXx8UmU+NTk/dm9pZCAwOm5ldyBEYXRlKERhdGUuVVRDKERlLEFlLFZlLEhlLExlLFJlKSl9ZnVuY3Rpb24geShqZSl7cmV0dXJuIEYudmFsaWRhdGUoRi5pc0RhdGUoamUpLGplKSxqZS50b1VUQ1N0cmluZygpfWZ1bmN0aW9uIHgoamUp''@;'; put 'put ''e3JldHVybiBudWxsPT1qZT9udWxsOihqZT1qZS50cmltKCkucmVwbGFjZSgvXlwuLywiIiksVGUudGVzdChqZSkmJihqZT1qZS5yZXBsYWNlKCJbIiwiIikucmVwbGFjZSgiXSIsIiIpKSxJJiYvW15cdTAwMDEtXHUwMDdmXS8udGVzdChqZSkmJihqZT1JLnRvQVNDSUkoamUpKSxqZS50b0xv''@;'; put 'put ''d2VyQ2FzZSgpKX1mdW5jdGlvbiBDKGplLGtlLEhlKXtpZihudWxsPT1qZXx8bnVsbD09a2UpcmV0dXJuIG51bGw7aWYoITEhPT1IZSYmKGplPXgoamUpLGtlPXgoa2UpKSxqZT09a2UpcmV0dXJuITA7Y29uc3QgTGU9amUubGFzdEluZGV4T2Yoa2UpO3JldHVybiEoTGU8PTB8fGplLmxlbmd0''@;'; put 'put ''aCE9PWtlLmxlbmd0aCtMZXx8Ii4iIT09amUuc3Vic3RyKExlLTEsMSl8fGdlLnRlc3QoamUpKX1mdW5jdGlvbiBUKGplKXtpZighamV8fCIvIiE9PWplLnN1YnN0cigwLDEpKXJldHVybiIvIjtpZigiLyI9PT1qZSlyZXR1cm4gamU7Y29uc3Qga2U9amUubGFzdEluZGV4T2YoIi8iKTtyZXR1''@;'; put 'put ''cm4gMD09PWtlPyIvIjpqZS5zbGljZSgwLGtlKX1mdW5jdGlvbiBFKGplLGtlKXtpZigoIWtlfHwib2JqZWN0IiE9dHlwZW9mIGtlKSYmKGtlPXt9KSxGLmlzRW1wdHlTdHJpbmcoamUpfHwhRi5pc1N0cmluZyhqZSkpcmV0dXJuIG51bGw7Y29uc3QgSGU9KGplPWplLnRyaW0oKSkuaW5kZXhP''@;'; put 'put ''ZigiOyIpLFJlPWZ1bmN0aW9uIGooamUsa2Upe2plPWZ1bmN0aW9uIEgoamUpe2lmKEYuaXNFbXB0eVN0cmluZyhqZSkpcmV0dXJuIGplO2ZvcihsZXQga2U9MDtrZTxaLmxlbmd0aDtrZSsrKXtjb25zdCBIZT1qZS5pbmRleE9mKFpba2VdKTstMSE9PUhlJiYoamU9amUuc3Vic3RyKDAsSGUp''@;'; put 'put ''KX1yZXR1cm4gamV9KGplKSxGLnZhbGlkYXRlKEYuaXNTdHJpbmcoamUpLGplKTtsZXQgTGUsUmUsSGU9amUuaW5kZXhPZigiPSIpO2lmKGtlKTA9PT1IZSYmKEhlPShqZT1qZS5zdWJzdHIoMSkpLmluZGV4T2YoIj0iKSk7ZWxzZSBpZihIZTw9MClyZXR1cm47aWYoSGU8PTA/KExlPSIiLFJl''@;'; put 'put ''PWplLnRyaW0oKSk6KExlPWplLnN1YnN0cigwLEhlKS50cmltKCksUmU9amUuc3Vic3RyKEhlKzEpLnRyaW0oKSksSy50ZXN0KExlKXx8Sy50ZXN0KFJlKSlyZXR1cm47Y29uc3QgVmU9bmV3IGl0O3JldHVybiBWZS5rZXk9TGUsVmUudmFsdWU9UmUsVmV9KC0xPT09SGU/amU6amUuc3Vic3Ry''@;'; put 'put ''KDAsSGUpLCEha2UubG9vc2UpO2lmKCFSZSlyZXR1cm47aWYoLTE9PT1IZSlyZXR1cm4gUmU7Y29uc3QgVmU9amUuc2xpY2UoSGUrMSkudHJpbSgpO2lmKDA9PT1WZS5sZW5ndGgpcmV0dXJuIFJlO2NvbnN0IEFlPVZlLnNwbGl0KCI7Iik7Zm9yKDtBZS5sZW5ndGg7KXtjb25zdCBEZT1BZS5z''@;'; put 'put ''aGlmdCgpLnRyaW0oKTtpZigwPT09RGUubGVuZ3RoKWNvbnRpbnVlO2NvbnN0IF90PURlLmluZGV4T2YoIj0iKTtsZXQgcnQsUWU7c3dpdGNoKC0xPT09X3Q/KHJ0PURlLFFlPW51bGwpOihydD1EZS5zdWJzdHIoMCxfdCksUWU9RGUuc3Vic3RyKF90KzEpKSxydD1ydC50cmltKCkudG9Mb3dl''@;'; put 'put ''ckNhc2UoKSxRZSYmKFFlPVFlLnRyaW0oKSkscnQpe2Nhc2UiZXhwaXJlcyI6aWYoUWUpe2NvbnN0IHZ0PWcoUWUpO3Z0JiYoUmUuZXhwaXJlcz12dCl9YnJlYWs7Y2FzZSJtYXgtYWdlIjppZihRZSYmL14tP1swLTldKyQvLnRlc3QoUWUpKXtjb25zdCB2dD1wYXJzZUludChRZSwxMCk7UmUu''@;'; put 'put ''c2V0TWF4QWdlKHZ0KX1icmVhaztjYXNlImRvbWFpbiI6aWYoUWUpe2NvbnN0IHZ0PVFlLnRyaW0oKS5yZXBsYWNlKC9eXC4vLCIiKTt2dCYmKFJlLmRvbWFpbj12dC50b0xvd2VyQ2FzZSgpKX1icmVhaztjYXNlInBhdGgiOlJlLnBhdGg9UWUmJiIvIj09PVFlWzBdP1FlOm51bGw7YnJlYWs7''@;'; put 'put ''Y2FzZSJzZWN1cmUiOlJlLnNlY3VyZT0hMDticmVhaztjYXNlImh0dHBvbmx5IjpSZS5odHRwT25seT0hMDticmVhaztjYXNlInNhbWVzaXRlIjpzd2l0Y2goUWU/UWUudG9Mb3dlckNhc2UoKToiIil7Y2FzZSJzdHJpY3QiOlJlLnNhbWVTaXRlPSJzdHJpY3QiO2JyZWFrO2Nhc2UibGF4IjpS''@;'; put 'put ''ZS5zYW1lU2l0ZT0ibGF4IjticmVhaztjYXNlIm5vbmUiOlJlLnNhbWVTaXRlPSJub25lIjticmVhaztkZWZhdWx0OlJlLnNhbWVTaXRlPXZvaWQgMH1icmVhaztkZWZhdWx0OlJlLmV4dGVuc2lvbnM9UmUuZXh0ZW5zaW9uc3x8W10sUmUuZXh0ZW5zaW9ucy5wdXNoKERlKX19cmV0dXJuIFJl''@;'; put 'put ''fWZ1bmN0aW9uIGFlKGplKXtsZXQga2U7dHJ5e2tlPUpTT04ucGFyc2UoamUpfWNhdGNoKEhlKXtyZXR1cm4gSGV9cmV0dXJuIGtlfWZ1bmN0aW9uIG5lKGplKXtpZighamV8fEYuaXNFbXB0eVN0cmluZyhqZSkpcmV0dXJuIG51bGw7bGV0IGtlO2lmKCJzdHJpbmciPT10eXBlb2YgamUpe2lm''@;'; put 'put ''KGtlPWFlKGplKSxrZSBpbnN0YW5jZW9mIEVycm9yKXJldHVybiBudWxsfWVsc2Uga2U9amU7Y29uc3QgSGU9bmV3IGl0O2ZvcihsZXQgTGU9MDtMZTxpdC5zZXJpYWxpemFibGVQcm9wZXJ0aWVzLmxlbmd0aDtMZSsrKXtjb25zdCBSZT1pdC5zZXJpYWxpemFibGVQcm9wZXJ0aWVzW0xlXTt2''@;'; put 'put ''b2lkIDA9PT1rZVtSZV18fGtlW1JlXT09PUplW1JlXXx8KEhlW1JlXT0iZXhwaXJlcyI9PT1SZXx8ImNyZWF0aW9uIj09PVJlfHwibGFzdEFjY2Vzc2VkIj09PVJlP251bGw9PT1rZVtSZV0/bnVsbDoiSW5maW5pdHkiPT1rZVtSZV0/IkluZmluaXR5IjpuZXcgRGF0ZShrZVtSZV0pOmtlW1Jl''@;'; put 'put ''XSl9cmV0dXJuIEhlfWZ1bmN0aW9uIHNlKGplLGtlKXtGLnZhbGlkYXRlKEYuaXNPYmplY3QoamUpLGplKSxGLnZhbGlkYXRlKEYuaXNPYmplY3Qoa2UpLGtlKTtsZXQgSGU9MDtyZXR1cm4gSGU9KGtlLnBhdGg/a2UucGF0aC5sZW5ndGg6MCktKGplLnBhdGg/amUucGF0aC5sZW5ndGg6MCks''@;'; put 'put ''MCE9PUhlfHwoSGU9KGplLmNyZWF0aW9uP2plLmNyZWF0aW9uLmdldFRpbWUoKTplZSktKGtlLmNyZWF0aW9uP2tlLmNyZWF0aW9uLmdldFRpbWUoKTplZSksMCE9PUhlfHwoSGU9amUuY3JlYXRpb25JbmRleC1rZS5jcmVhdGlvbkluZGV4KSksSGV9ZnVuY3Rpb24gVWUoamUpe2lmKGplIGlu''@;'; put 'put ''c3RhbmNlb2YgT2JqZWN0KXJldHVybiBqZTt0cnl7amU9ZGVjb2RlVVJJKGplKX1jYXRjaHt9cmV0dXJuIF8oamUpfWNvbnN0IEplPXtrZXk6IiIsdmFsdWU6IiIsZXhwaXJlczoiSW5maW5pdHkiLG1heEFnZTpudWxsLGRvbWFpbjpudWxsLHBhdGg6bnVsbCxzZWN1cmU6ITEsaHR0cE9ubHk6''@;'; put 'put ''ITEsZXh0ZW5zaW9uczpudWxsLGhvc3RPbmx5Om51bGwscGF0aElzRGVmYXVsdDpudWxsLGNyZWF0aW9uOm51bGwsbGFzdEFjY2Vzc2VkOm51bGwsc2FtZVNpdGU6dm9pZCAwfTtjbGFzcyBpdHtjb25zdHJ1Y3RvcihrZT17fSl7Y29uc3QgSGU9TigpO0hlJiYodGhpc1tIZV09dGhpcy5pbnNw''@;'; put 'put ''ZWN0KSxPYmplY3QuYXNzaWduKHRoaXMsSmUsa2UpLHRoaXMuY3JlYXRpb249dGhpcy5jcmVhdGlvbnx8bmV3IERhdGUsT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImNyZWF0aW9uSW5kZXgiLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCx2YWx1ZTorK2l0''@;'; put 'put ''LmNvb2tpZXNDcmVhdGVkfSl9aW5zcGVjdCgpe2NvbnN0IGtlPURhdGUubm93KCksSGU9bnVsbCE9dGhpcy5ob3N0T25seT90aGlzLmhvc3RPbmx5OiI/IixMZT10aGlzLmNyZWF0aW9uP2tlLXRoaXMuY3JlYXRpb24uZ2V0VGltZSgpKyJtcyI6Ij8iLFJlPXRoaXMubGFzdEFjY2Vzc2VkP2tl''@;'; put 'put ''LXRoaXMubGFzdEFjY2Vzc2VkLmdldFRpbWUoKSsibXMiOiI/IjtyZXR1cm5gQ29va2llPSIke3RoaXMudG9TdHJpbmcoKX07IGhvc3RPbmx5PSR7SGV9OyBhQWdlPSR7UmV9OyBjQWdlPSR7TGV9ImB9dG9KU09OKCl7Y29uc3Qga2U9e307Zm9yKGNvbnN0IEhlIG9mIGl0LnNlcmlhbGl6YWJs''@;'; put 'put ''ZVByb3BlcnRpZXMpdGhpc1tIZV0hPT1KZVtIZV0mJigiZXhwaXJlcyI9PT1IZXx8ImNyZWF0aW9uIj09PUhlfHwibGFzdEFjY2Vzc2VkIj09PUhlP2tlW0hlXT1udWxsPT09dGhpc1tIZV0/bnVsbDoiSW5maW5pdHkiPT10aGlzW0hlXT8iSW5maW5pdHkiOnRoaXNbSGVdLnRvSVNPU3RyaW5n''@;'; put 'put ''KCk6Im1heEFnZSI9PT1IZT9udWxsIT09dGhpc1tIZV0mJihrZVtIZV09dGhpc1tIZV09PTEvMHx8dGhpc1tIZV09PS0xLzA/dGhpc1tIZV0udG9TdHJpbmcoKTp0aGlzW0hlXSk6dGhpc1tIZV0hPT1KZVtIZV0mJihrZVtIZV09dGhpc1tIZV0pKTtyZXR1cm4ga2V9Y2xvbmUoKXtyZXR1cm4g''@;'; put 'put ''bmUodGhpcy50b0pTT04oKSl9dmFsaWRhdGUoKXtpZighTy50ZXN0KHRoaXMudmFsdWUpfHx0aGlzLmV4cGlyZXMhPTEvMCYmISh0aGlzLmV4cGlyZXMgaW5zdGFuY2VvZiBEYXRlKSYmIWcodGhpcy5leHBpcmVzKXx8bnVsbCE9dGhpcy5tYXhBZ2UmJnRoaXMubWF4QWdlPD0wfHxudWxsIT10''@;'; put 'put ''aGlzLnBhdGgmJiFZLnRlc3QodGhpcy5wYXRoKSlyZXR1cm4hMTtjb25zdCBrZT10aGlzLmNkb21haW4oKTtyZXR1cm4hKGtlJiYoa2UubWF0Y2goL1wuJC8pfHxudWxsPT1wLmdldFB1YmxpY1N1ZmZpeChrZSkpKX1zZXRFeHBpcmVzKGtlKXt0aGlzLmV4cGlyZXM9a2UgaW5zdGFuY2VvZiBE''@;'; put 'put ''YXRlP2tlOmcoa2UpfHwiSW5maW5pdHkifXNldE1heEFnZShrZSl7dGhpcy5tYXhBZ2U9a2U9PT0xLzB8fGtlPT09LTEvMD9rZS50b1N0cmluZygpOmtlfWNvb2tpZVN0cmluZygpe2xldCBrZT10aGlzLnZhbHVlO3JldHVybiBudWxsPT1rZSYmKGtlPSIiKSwiIj09PXRoaXMua2V5P2tlOmAk''@;'; put 'put ''e3RoaXMua2V5fT0ke2tlfWB9dG9TdHJpbmcoKXtsZXQga2U9dGhpcy5jb29raWVTdHJpbmcoKTtpZih0aGlzLmV4cGlyZXMhPTEvMCYmKHRoaXMuZXhwaXJlcyBpbnN0YW5jZW9mIERhdGU/a2UrPWA7IEV4cGlyZXM9JHt5KHRoaXMuZXhwaXJlcyl9YDprZSs9YDsgRXhwaXJlcz0ke3RoaXMu''@;'; put 'put ''ZXhwaXJlc31gKSxudWxsIT10aGlzLm1heEFnZSYmdGhpcy5tYXhBZ2UhPTEvMCYmKGtlKz1gOyBNYXgtQWdlPSR7dGhpcy5tYXhBZ2V9YCksdGhpcy5kb21haW4mJiF0aGlzLmhvc3RPbmx5JiYoa2UrPWA7IERvbWFpbj0ke3RoaXMuZG9tYWlufWApLHRoaXMucGF0aCYmKGtlKz1gOyBQYXRo''@;'; put 'put ''PSR7dGhpcy5wYXRofWApLHRoaXMuc2VjdXJlJiYoa2UrPSI7IFNlY3VyZSIpLHRoaXMuaHR0cE9ubHkmJihrZSs9IjsgSHR0cE9ubHkiKSx0aGlzLnNhbWVTaXRlJiYibm9uZSIhPT10aGlzLnNhbWVTaXRlKXtjb25zdCBIZT1pdC5zYW1lU2l0ZUNhbm9uaWNhbFt0aGlzLnNhbWVTaXRlLnRv''@;'; put 'put ''TG93ZXJDYXNlKCldO2tlKz1gOyBTYW1lU2l0ZT0ke0hlfHx0aGlzLnNhbWVTaXRlfWB9cmV0dXJuIHRoaXMuZXh0ZW5zaW9ucyYmdGhpcy5leHRlbnNpb25zLmZvckVhY2goSGU9PntrZSs9YDsgJHtIZX1gfSksa2V9VFRMKGtlKXtpZihudWxsIT10aGlzLm1heEFnZSlyZXR1cm4gdGhpcy5t''@;'; put 'put ''YXhBZ2U8PTA/MDoxZTMqdGhpcy5tYXhBZ2U7bGV0IEhlPXRoaXMuZXhwaXJlcztyZXR1cm4gSGUhPTEvMD8oSGUgaW5zdGFuY2VvZiBEYXRlfHwoSGU9ZyhIZSl8fDEvMCksSGU9PTEvMD8xLzA6SGUuZ2V0VGltZSgpLShrZXx8RGF0ZS5ub3coKSkpOjEvMH1leHBpcnlUaW1lKGtlKXtpZihu''@;'; put 'put ''dWxsIT10aGlzLm1heEFnZSl7Y29uc3QgTGU9dGhpcy5tYXhBZ2U8PTA/LTEvMDoxZTMqdGhpcy5tYXhBZ2U7cmV0dXJuKGtlfHx0aGlzLmNyZWF0aW9ufHxuZXcgRGF0ZSkuZ2V0VGltZSgpK0xlfXJldHVybiB0aGlzLmV4cGlyZXM9PTEvMD8xLzA6dGhpcy5leHBpcmVzLmdldFRpbWUoKX1l''@;'; put 'put ''eHBpcnlEYXRlKGtlKXtjb25zdCBIZT10aGlzLmV4cGlyeVRpbWUoa2UpO3JldHVybiBIZT09MS8wP25ldyBEYXRlKGVlKTpIZT09LTEvMD9uZXcgRGF0ZSgwKTpuZXcgRGF0ZShIZSl9aXNQZXJzaXN0ZW50KCl7cmV0dXJuIG51bGwhPXRoaXMubWF4QWdlfHx0aGlzLmV4cGlyZXMhPTEvMH1j''@;'; put 'put ''YW5vbmljYWxpemVkRG9tYWluKCl7cmV0dXJuIG51bGw9PXRoaXMuZG9tYWluP251bGw6eCh0aGlzLmRvbWFpbil9Y2RvbWFpbigpe3JldHVybiB0aGlzLmNhbm9uaWNhbGl6ZWREb21haW4oKX19ZnVuY3Rpb24geGUoamUpe2lmKG51bGwhPWplKXtjb25zdCBrZT1qZS50b0xvd2VyQ2FzZSgp''@;'; put 'put ''O3N3aXRjaChrZSl7Y2FzZSB1ZS5TVFJJQ1Q6Y2FzZSB1ZS5TSUxFTlQ6Y2FzZSB1ZS5ESVNBQkxFRDpyZXR1cm4ga2V9fXJldHVybiB1ZS5TSUxFTlR9aXQuY29va2llc0NyZWF0ZWQ9MCxpdC5wYXJzZT1FLGl0LmZyb21KU09OPW5lLGl0LnNlcmlhbGl6YWJsZVByb3BlcnRpZXM9T2JqZWN0''@;'; put 'put ''LmtleXMoSmUpLGl0LnNhbWVTaXRlTGV2ZWw9e3N0cmljdDozLGxheDoyLG5vbmU6MX0saXQuc2FtZVNpdGVDYW5vbmljYWw9e3N0cmljdDoiU3RyaWN0IixsYXg6IkxheCJ9O2NsYXNzIHlle2NvbnN0cnVjdG9yKGtlLEhlPXtyZWplY3RQdWJsaWNTdWZmaXhlczohMH0peyJib29sZWFuIj09''@;'; put 'put ''dHlwZW9mIEhlJiYoSGU9e3JlamVjdFB1YmxpY1N1ZmZpeGVzOkhlfSksRi52YWxpZGF0ZShGLmlzT2JqZWN0KEhlKSxIZSksdGhpcy5yZWplY3RQdWJsaWNTdWZmaXhlcz1IZS5yZWplY3RQdWJsaWNTdWZmaXhlcyx0aGlzLmVuYWJsZUxvb3NlTW9kZT0hIUhlLmxvb3NlTW9kZSx0aGlzLmFs''@;'; put 'put ''bG93U3BlY2lhbFVzZURvbWFpbj0iYm9vbGVhbiIhPXR5cGVvZiBIZS5hbGxvd1NwZWNpYWxVc2VEb21haW58fEhlLmFsbG93U3BlY2lhbFVzZURvbWFpbix0aGlzLnN0b3JlPWtlfHxuZXcgdyx0aGlzLnByZWZpeFNlY3VyaXR5PXhlKEhlLnByZWZpeFNlY3VyaXR5KSx0aGlzLl9jbG9uZVN5''@;'; put 'put ''bmM9S2UoImNsb25lIiksdGhpcy5faW1wb3J0Q29va2llc1N5bmM9S2UoIl9pbXBvcnRDb29raWVzIiksdGhpcy5nZXRDb29raWVzU3luYz1LZSgiZ2V0Q29va2llcyIpLHRoaXMuZ2V0Q29va2llU3RyaW5nU3luYz1LZSgiZ2V0Q29va2llU3RyaW5nIiksdGhpcy5nZXRTZXRDb29raWVTdHJp''@;'; put 'put ''bmdzU3luYz1LZSgiZ2V0U2V0Q29va2llU3RyaW5ncyIpLHRoaXMucmVtb3ZlQWxsQ29va2llc1N5bmM9S2UoInJlbW92ZUFsbENvb2tpZXMiKSx0aGlzLnNldENvb2tpZVN5bmM9S2UoInNldENvb2tpZSIpLHRoaXMuc2VyaWFsaXplU3luYz1LZSgic2VyaWFsaXplIil9c2V0Q29va2llKGtl''@;'; put 'put ''LEhlLExlLFJlKXtsZXQgVmU7aWYoRi52YWxpZGF0ZShGLmlzTm9uRW1wdHlTdHJpbmcoSGUpLFJlLExlKSxGLmlzRnVuY3Rpb24oSGUpKXJldHVybihSZT1IZSkobmV3IEVycm9yKCJObyBVUkwgd2FzIHNwZWNpZmllZCIpKTtjb25zdCBBZT1VZShIZSk7aWYoRi5pc0Z1bmN0aW9uKExlKSYm''@;'; put 'put ''KFJlPUxlLExlPXt9KSxGLnZhbGlkYXRlKEYuaXNGdW5jdGlvbihSZSksUmUpLCFGLmlzTm9uRW1wdHlTdHJpbmcoa2UpJiYhRi5pc09iamVjdChrZSkmJmtlIGluc3RhbmNlb2YgU3RyaW5nJiYwPT1rZS5sZW5ndGgpcmV0dXJuIFJlKG51bGwpO2NvbnN0IERlPXgoQWUuaG9zdG5hbWUpLF90''@;'; put 'put ''PUxlLmxvb3NlfHx0aGlzLmVuYWJsZUxvb3NlTW9kZTtsZXQgcnQ9bnVsbDtpZihMZS5zYW1lU2l0ZUNvbnRleHQmJihydD1pZShMZS5zYW1lU2l0ZUNvbnRleHQpLCFydCkpcmV0dXJuIFJlKG5ldyBFcnJvcihyZSkpO2lmKCJzdHJpbmciPT10eXBlb2Yga2V8fGtlIGluc3RhbmNlb2YgU3Ry''@;'; put 'put ''aW5nKXtpZighKGtlPWl0LnBhcnNlKGtlLHtsb29zZTpfdH0pKSlyZXR1cm4gVmU9bmV3IEVycm9yKCJDb29raWUgZmFpbGVkIHRvIHBhcnNlIiksUmUoTGUuaWdub3JlRXJyb3I/bnVsbDpWZSl9ZWxzZSBpZighKGtlIGluc3RhbmNlb2YgaXQpKXJldHVybiBWZT1uZXcgRXJyb3IoIkZpcnN0''@;'; put 'put ''IGFyZ3VtZW50IHRvIHNldENvb2tpZSBtdXN0IGJlIGEgQ29va2llIG9iamVjdCBvciBzdHJpbmciKSxSZShMZS5pZ25vcmVFcnJvcj9udWxsOlZlKTtjb25zdCBRZT1MZS5ub3d8fG5ldyBEYXRlO2lmKHRoaXMucmVqZWN0UHVibGljU3VmZml4ZXMmJmtlLmRvbWFpbiYmbnVsbD09cC5nZXRQ''@;'; put 'put ''dWJsaWNTdWZmaXgoa2UuY2RvbWFpbigpLHthbGxvd1NwZWNpYWxVc2VEb21haW46dGhpcy5hbGxvd1NwZWNpYWxVc2VEb21haW4saWdub3JlRXJyb3I6TGUuaWdub3JlRXJyb3J9KSYmIVRlLnRlc3Qoa2UuZG9tYWluKSlyZXR1cm4gVmU9bmV3IEVycm9yKCJDb29raWUgaGFzIGRvbWFpbiBz''@;'; put 'put ''ZXQgdG8gYSBwdWJsaWMgc3VmZml4IiksUmUoTGUuaWdub3JlRXJyb3I/bnVsbDpWZSk7aWYoa2UuZG9tYWluKXtpZighQyhEZSxrZS5jZG9tYWluKCksITEpKXJldHVybiBWZT1uZXcgRXJyb3IoYENvb2tpZSBub3QgaW4gdGhpcyBob3N0J3MgZG9tYWluLiBDb29raWU6JHtrZS5jZG9tYWlu''@;'; put 'put ''KCl9IFJlcXVlc3Q6JHtEZX1gKSxSZShMZS5pZ25vcmVFcnJvcj9udWxsOlZlKTtudWxsPT1rZS5ob3N0T25seSYmKGtlLmhvc3RPbmx5PSExKX1lbHNlIGtlLmhvc3RPbmx5PSEwLGtlLmRvbWFpbj1EZTtpZigoIWtlLnBhdGh8fCIvIiE9PWtlLnBhdGhbMF0pJiYoa2UucGF0aD1UKEFlLnBh''@;'; put 'put ''dGhuYW1lKSxrZS5wYXRoSXNEZWZhdWx0PSEwKSwhMT09PUxlLmh0dHAmJmtlLmh0dHBPbmx5KXJldHVybiBWZT1uZXcgRXJyb3IoIkNvb2tpZSBpcyBIdHRwT25seSBhbmQgdGhpcyBpc24ndCBhbiBIVFRQIEFQSSIpLFJlKExlLmlnbm9yZUVycm9yP251bGw6VmUpO2lmKCJub25lIiE9PWtl''@;'; put 'put ''LnNhbWVTaXRlJiZ2b2lkIDAhPT1rZS5zYW1lU2l0ZSYmcnQmJiJub25lIj09PXJ0KXJldHVybiBWZT1uZXcgRXJyb3IoIkNvb2tpZSBpcyBTYW1lU2l0ZSBidXQgdGhpcyBpcyBhIGNyb3NzLW9yaWdpbiByZXF1ZXN0IiksUmUoTGUuaWdub3JlRXJyb3I/bnVsbDpWZSk7Y29uc3Qgc249dGhp''@;'; put 'put ''cy5wcmVmaXhTZWN1cml0eT09PXVlLlNJTEVOVDtpZih0aGlzLnByZWZpeFNlY3VyaXR5IT09dWUuRElTQUJMRUQpe2xldCBYZSx1dD0hMTtpZihmdW5jdGlvbiBtKGplKXtyZXR1cm4gRi52YWxpZGF0ZShGLmlzT2JqZWN0KGplKSxqZSksIWplLmtleS5zdGFydHNXaXRoKCJfX1NlY3VyZS0i''@;'; put 'put ''KXx8amUuc2VjdXJlfShrZSk/ZnVuY3Rpb24gQShqZSl7cmV0dXJuIEYudmFsaWRhdGUoRi5pc09iamVjdChqZSkpLCFqZS5rZXkuc3RhcnRzV2l0aCgiX19Ib3N0LSIpfHxqZS5zZWN1cmUmJmplLmhvc3RPbmx5JiZudWxsIT1qZS5wYXRoJiYiLyI9PT1qZS5wYXRofShrZSl8fCh1dD0hMCxY''@;'; put 'put ''ZT0iQ29va2llIGhhcyBfX0hvc3QgcHJlZml4IGJ1dCBlaXRoZXIgU2VjdXJlIG9yIEhvc3RPbmx5IGF0dHJpYnV0ZSBpcyBub3Qgc2V0IG9yIFBhdGggaXMgbm90ICcvJyIpOih1dD0hMCxYZT0iQ29va2llIGhhcyBfX1NlY3VyZSBwcmVmaXggYnV0IFNlY3VyZSBhdHRyaWJ1dGUgaXMgbm90''@;'; put 'put ''IHNldCIpLHV0KXJldHVybiBSZShMZS5pZ25vcmVFcnJvcnx8c24/bnVsbDpuZXcgRXJyb3IoWGUpKX1jb25zdCBTdD10aGlzLnN0b3JlO1N0LnVwZGF0ZUNvb2tpZXx8KFN0LnVwZGF0ZUNvb2tpZT1mdW5jdGlvbih1dCxYZSx0dCl7dGhpcy5wdXRDb29raWUoWGUsdHQpfSksU3QuZmluZENv''@;'; put 'put ''b2tpZShrZS5kb21haW4sa2UucGF0aCxrZS5rZXksZnVuY3Rpb24gZW4odXQsWGUpe2lmKHV0KXJldHVybiBSZSh1dCk7Y29uc3QgdHQ9ZnVuY3Rpb24oSWUpe2lmKEllKXJldHVybiBSZShJZSk7UmUobnVsbCxrZSl9O2lmKFhlKXtpZighMT09PUxlLmh0dHAmJlhlLmh0dHBPbmx5KXJldHVy''@;'; put 'put ''biB1dD1uZXcgRXJyb3IoIm9sZCBDb29raWUgaXMgSHR0cE9ubHkgYW5kIHRoaXMgaXNuJ3QgYW4gSFRUUCBBUEkiKSxSZShMZS5pZ25vcmVFcnJvcj9udWxsOnV0KTtrZS5jcmVhdGlvbj1YZS5jcmVhdGlvbixrZS5jcmVhdGlvbkluZGV4PVhlLmNyZWF0aW9uSW5kZXgsa2UubGFzdEFjY2Vz''@;'; put 'put ''c2VkPVFlLFN0LnVwZGF0ZUNvb2tpZShYZSxrZSx0dCl9ZWxzZSBrZS5jcmVhdGlvbj1rZS5sYXN0QWNjZXNzZWQ9UWUsU3QucHV0Q29va2llKGtlLHR0KX0pfWdldENvb2tpZXMoa2UsSGUsTGUpe0YudmFsaWRhdGUoRi5pc05vbkVtcHR5U3RyaW5nKGtlKSxMZSxrZSk7Y29uc3QgUmU9VWUo''@;'; put 'put ''a2UpO0YuaXNGdW5jdGlvbihIZSkmJihMZT1IZSxIZT17fSksRi52YWxpZGF0ZShGLmlzT2JqZWN0KEhlKSxMZSxIZSksRi52YWxpZGF0ZShGLmlzRnVuY3Rpb24oTGUpLExlKTtjb25zdCBWZT14KFJlLmhvc3RuYW1lKSxBZT1SZS5wYXRobmFtZXx8Ii8iO2xldCBEZT1IZS5zZWN1cmU7bnVs''@;'; put 'put ''bD09RGUmJlJlLnByb3RvY29sJiYoImh0dHBzOiI9PVJlLnByb3RvY29sfHwid3NzOiI9PVJlLnByb3RvY29sKSYmKERlPSEwKTtsZXQgX3Q9MDtpZihIZS5zYW1lU2l0ZUNvbnRleHQpe2NvbnN0IHV0PWllKEhlLnNhbWVTaXRlQ29udGV4dCk7aWYoX3Q9aXQuc2FtZVNpdGVMZXZlbFt1dF0s''@;'; put 'put ''IV90KXJldHVybiBMZShuZXcgRXJyb3IocmUpKX1sZXQgcnQ9SGUuaHR0cDtudWxsPT1ydCYmKHJ0PSEwKTtjb25zdCBRZT1IZS5ub3d8fERhdGUubm93KCksc249ITEhPT1IZS5leHBpcmUsdnQ9ISFIZS5hbGxQYXRocyxTdD10aGlzLnN0b3JlO2Z1bmN0aW9uIGVuKHV0KXtpZih1dC5ob3N0''@;'; put 'put ''T25seSl7aWYodXQuZG9tYWluIT1WZSlyZXR1cm4hMX1lbHNlIGlmKCFDKFZlLHV0LmRvbWFpbiwhMSkpcmV0dXJuITE7cmV0dXJuISghdnQmJiFQKEFlLHV0LnBhdGgpfHx1dC5zZWN1cmUmJiFEZXx8dXQuaHR0cE9ubHkmJiFydHx8X3QmJml0LnNhbWVTaXRlTGV2ZWxbdXQuc2FtZVNpdGV8''@;'; put 'put ''fCJub25lIl0+X3R8fHNuJiZ1dC5leHBpcnlUaW1lKCk8PVFlJiYoU3QucmVtb3ZlQ29va2llKHV0LmRvbWFpbix1dC5wYXRoLHV0LmtleSwoKT0+e30pLDEpKX1TdC5maW5kQ29va2llcyhWZSx2dD9udWxsOkFlLHRoaXMuYWxsb3dTcGVjaWFsVXNlRG9tYWluLCh1dCxYZSk9PntpZih1dCly''@;'; put 'put ''ZXR1cm4gTGUodXQpO1hlPVhlLmZpbHRlcihlbiksITEhPT1IZS5zb3J0JiYoWGU9WGUuc29ydChzZSkpO2NvbnN0IHR0PW5ldyBEYXRlO2Zvcihjb25zdCBJZSBvZiBYZSlJZS5sYXN0QWNjZXNzZWQ9dHQ7TGUobnVsbCxYZSl9KX1nZXRDb29raWVTdHJpbmcoLi4ua2Upe2NvbnN0IEhlPWtl''@;'; put 'put ''LnBvcCgpO0YudmFsaWRhdGUoRi5pc0Z1bmN0aW9uKEhlKSxIZSksa2UucHVzaChmdW5jdGlvbihSZSxWZSl7UmU/SGUoUmUpOkhlKG51bGwsVmUuc29ydChzZSkubWFwKEFlPT5BZS5jb29raWVTdHJpbmcoKSkuam9pbigiOyAiKSl9KSx0aGlzLmdldENvb2tpZXMuYXBwbHkodGhpcyxrZSl9''@;'; put 'put ''Z2V0U2V0Q29va2llU3RyaW5ncyguLi5rZSl7Y29uc3QgSGU9a2UucG9wKCk7Ri52YWxpZGF0ZShGLmlzRnVuY3Rpb24oSGUpLEhlKSxrZS5wdXNoKGZ1bmN0aW9uKFJlLFZlKXtSZT9IZShSZSk6SGUobnVsbCxWZS5tYXAoQWU9PkFlLnRvU3RyaW5nKCkpKX0pLHRoaXMuZ2V0Q29va2llcy5h''@;'; put 'put ''cHBseSh0aGlzLGtlKX1zZXJpYWxpemUoa2Upe0YudmFsaWRhdGUoRi5pc0Z1bmN0aW9uKGtlKSxrZSk7bGV0IEhlPXRoaXMuc3RvcmUuY29uc3RydWN0b3IubmFtZTtGLmlzT2JqZWN0KEhlKSYmKEhlPW51bGwpO2NvbnN0IExlPXt2ZXJzaW9uOmB0b3VnaC1jb29raWVAJHtSfWAsc3RvcmVU''@;'; put 'put ''eXBlOkhlLHJlamVjdFB1YmxpY1N1ZmZpeGVzOiEhdGhpcy5yZWplY3RQdWJsaWNTdWZmaXhlcyxlbmFibGVMb29zZU1vZGU6ISF0aGlzLmVuYWJsZUxvb3NlTW9kZSxhbGxvd1NwZWNpYWxVc2VEb21haW46ISF0aGlzLmFsbG93U3BlY2lhbFVzZURvbWFpbixwcmVmaXhTZWN1cml0eTp4ZSh0''@;'; put 'put ''aGlzLnByZWZpeFNlY3VyaXR5KSxjb29raWVzOltdfTtpZighdGhpcy5zdG9yZS5nZXRBbGxDb29raWVzfHwiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5zdG9yZS5nZXRBbGxDb29raWVzKXJldHVybiBrZShuZXcgRXJyb3IoInN0b3JlIGRvZXMgbm90IHN1cHBvcnQgZ2V0QWxsQ29va2llcyBh''@;'; put 'put ''bmQgY2Fubm90IGJlIHNlcmlhbGl6ZWQiKSk7dGhpcy5zdG9yZS5nZXRBbGxDb29raWVzKChSZSxWZSk9PlJlP2tlKFJlKTooTGUuY29va2llcz1WZS5tYXAoQWU9PihkZWxldGUoQWU9QWUgaW5zdGFuY2VvZiBpdD9BZS50b0pTT04oKTpBZSkuY3JlYXRpb25JbmRleCxBZSkpLGtlKG51bGws''@;'; put 'put ''TGUpKSl9dG9KU09OKCl7cmV0dXJuIHRoaXMuc2VyaWFsaXplU3luYygpfV9pbXBvcnRDb29raWVzKGtlLEhlKXtsZXQgTGU9a2UuY29va2llcztpZighTGV8fCFBcnJheS5pc0FycmF5KExlKSlyZXR1cm4gSGUobmV3IEVycm9yKCJzZXJpYWxpemVkIGphciBoYXMgbm8gY29va2llcyBhcnJh''@;'; put 'put ''eSIpKTtMZT1MZS5zbGljZSgpO2NvbnN0IFJlPVZlPT57aWYoVmUpcmV0dXJuIEhlKFZlKTtpZighTGUubGVuZ3RoKXJldHVybiBIZShWZSx0aGlzKTtsZXQgQWU7dHJ5e0FlPW5lKExlLnNoaWZ0KCkpfWNhdGNoKERlKXtyZXR1cm4gSGUoRGUpfWlmKG51bGw9PT1BZSlyZXR1cm4gUmUobnVs''@;'; put 'put ''bCk7dGhpcy5zdG9yZS5wdXRDb29raWUoQWUsUmUpfTtSZSgpfWNsb25lKGtlLEhlKXsxPT09YXJndW1lbnRzLmxlbmd0aCYmKEhlPWtlLGtlPW51bGwpLHRoaXMuc2VyaWFsaXplKChMZSxSZSk9PntpZihMZSlyZXR1cm4gSGUoTGUpO3llLmRlc2VyaWFsaXplKFJlLGtlLEhlKX0pfWNsb25l''@;'; put 'put ''U3luYyhrZSl7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuX2Nsb25lU3luYygpO2lmKCFrZS5zeW5jaHJvbm91cyl0aHJvdyBuZXcgRXJyb3IoIkNvb2tpZUphciBjbG9uZSBkZXN0aW5hdGlvbiBzdG9yZSBpcyBub3Qgc3luY2hyb25vdXM7IHVzZSBhc3luYyBBUEkgaW5z''@;'; put 'put ''dGVhZC4iKTtyZXR1cm4gdGhpcy5fY2xvbmVTeW5jKGtlKX1yZW1vdmVBbGxDb29raWVzKGtlKXtGLnZhbGlkYXRlKEYuaXNGdW5jdGlvbihrZSksa2UpO2NvbnN0IEhlPXRoaXMuc3RvcmU7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEhlLnJlbW92ZUFsbENvb2tpZXMmJkhlLnJlbW92ZUFsbENv''@;'; put 'put ''b2tpZXMhPT1WLnByb3RvdHlwZS5yZW1vdmVBbGxDb29raWVzKXJldHVybiBIZS5yZW1vdmVBbGxDb29raWVzKGtlKTtIZS5nZXRBbGxDb29raWVzKChMZSxSZSk9PntpZihMZSlyZXR1cm4ga2UoTGUpO2lmKDA9PT1SZS5sZW5ndGgpcmV0dXJuIGtlKG51bGwpO2xldCBWZT0wO2NvbnN0IEFl''@;'; put 'put ''PVtdO2Z1bmN0aW9uIERlKF90KXtpZihfdCYmQWUucHVzaChfdCksVmUrKyxWZT09PVJlLmxlbmd0aClyZXR1cm4ga2UoQWUubGVuZ3RoP0FlWzBdOm51bGwpfVJlLmZvckVhY2goX3Q9PntIZS5yZW1vdmVDb29raWUoX3QuZG9tYWluLF90LnBhdGgsX3Qua2V5LERlKX0pfSl9c3RhdGljIGRl''@;'; put 'put ''c2VyaWFsaXplKGtlLEhlLExlKXtsZXQgUmU7aWYoMyE9PWFyZ3VtZW50cy5sZW5ndGgmJihMZT1IZSxIZT1udWxsKSxGLnZhbGlkYXRlKEYuaXNGdW5jdGlvbihMZSksTGUpLCJzdHJpbmciPT10eXBlb2Yga2Upe2lmKFJlPWFlKGtlKSxSZSBpbnN0YW5jZW9mIEVycm9yKXJldHVybiBMZShS''@;'; put 'put ''ZSl9ZWxzZSBSZT1rZTtjb25zdCBWZT1uZXcgeWUoSGUse3JlamVjdFB1YmxpY1N1ZmZpeGVzOlJlLnJlamVjdFB1YmxpY1N1ZmZpeGVzLGxvb3NlTW9kZTpSZS5lbmFibGVMb29zZU1vZGUsYWxsb3dTcGVjaWFsVXNlRG9tYWluOlJlLmFsbG93U3BlY2lhbFVzZURvbWFpbixwcmVmaXhTZWN1''@;'; put 'put ''cml0eTpSZS5wcmVmaXhTZWN1cml0eX0pO1ZlLl9pbXBvcnRDb29raWVzKFJlLEFlPT57aWYoQWUpcmV0dXJuIExlKEFlKTtMZShudWxsLFZlKX0pfXN0YXRpYyBkZXNlcmlhbGl6ZVN5bmMoa2UsSGUpe2NvbnN0IExlPSJzdHJpbmciPT10eXBlb2Yga2U/SlNPTi5wYXJzZShrZSk6a2UsUmU9''@;'; put 'put ''bmV3IHllKEhlLHtyZWplY3RQdWJsaWNTdWZmaXhlczpMZS5yZWplY3RQdWJsaWNTdWZmaXhlcyxsb29zZU1vZGU6TGUuZW5hYmxlTG9vc2VNb2RlfSk7aWYoIVJlLnN0b3JlLnN5bmNocm9ub3VzKXRocm93IG5ldyBFcnJvcigiQ29va2llSmFyIHN0b3JlIGlzIG5vdCBzeW5jaHJvbm91czsg''@;'; put 'put ''dXNlIGFzeW5jIEFQSSBpbnN0ZWFkLiIpO3JldHVybiBSZS5faW1wb3J0Q29va2llc1N5bmMoTGUpLFJlfX1mdW5jdGlvbiBLZShqZSl7cmV0dXJuIGZ1bmN0aW9uKC4uLmtlKXtpZighdGhpcy5zdG9yZS5zeW5jaHJvbm91cyl0aHJvdyBuZXcgRXJyb3IoIkNvb2tpZUphciBzdG9yZSBpcyBu''@;'; put 'put ''b3Qgc3luY2hyb25vdXM7IHVzZSBhc3luYyBBUEkgaW5zdGVhZC4iKTtsZXQgSGUsTGU7aWYodGhpc1tqZV0oLi4ua2UsKFJlLFZlKT0+e0hlPVJlLExlPVZlfSksSGUpdGhyb3cgSGU7cmV0dXJuIExlfX15ZS5mcm9tSlNPTj15ZS5kZXNlcmlhbGl6ZVN5bmMsWyJfaW1wb3J0Q29va2llcyIs''@;'; put 'put ''ImNsb25lIiwiZ2V0Q29va2llcyIsImdldENvb2tpZVN0cmluZyIsImdldFNldENvb2tpZVN0cmluZ3MiLCJyZW1vdmVBbGxDb29raWVzIiwic2VyaWFsaXplIiwic2V0Q29va2llIl0uZm9yRWFjaChqZT0+e3llLnByb3RvdHlwZVtqZV09eih5ZS5wcm90b3R5cGVbamVdKX0pLHllLmRlc2Vy''@;'; put 'put ''aWFsaXplPXooeWUuZGVzZXJpYWxpemUpLFgudmVyc2lvbj1SLFguQ29va2llSmFyPXllLFguQ29va2llPWl0LFguU3RvcmU9VixYLk1lbW9yeUNvb2tpZVN0b3JlPXcsWC5wYXJzZURhdGU9ZyxYLmZvcm1hdERhdGU9eSxYLnBhcnNlPUUsWC5mcm9tSlNPTj1uZSxYLmRvbWFpbk1hdGNoPUMs''@;'; put 'put ''WC5kZWZhdWx0UGF0aD1ULFgucGF0aE1hdGNoPVAsWC5nZXRQdWJsaWNTdWZmaXg9cC5nZXRQdWJsaWNTdWZmaXgsWC5jb29raWVDb21wYXJlPXNlLFgucGVybXV0ZURvbWFpbj1iKDczMjQpLnBlcm11dGVEb21haW4sWC5wZXJtdXRlUGF0aD1mdW5jdGlvbiBDZShqZSl7aWYoRi52YWxpZGF0''@;'; put 'put ''ZShGLmlzU3RyaW5nKGplKSksIi8iPT09amUpcmV0dXJuWyIvIl07Y29uc3Qga2U9W2plXTtmb3IoO2plLmxlbmd0aD4xOyl7Y29uc3QgSGU9amUubGFzdEluZGV4T2YoIi8iKTtpZigwPT09SGUpYnJlYWs7amU9amUuc3Vic3RyKDAsSGUpLGtlLnB1c2goamUpfXJldHVybiBrZS5wdXNoKCIv''@;'; put 'put ''Iiksa2V9LFguY2Fub25pY2FsRG9tYWluPXgsWC5QcmVmaXhTZWN1cml0eUVudW09dWUsWC5QYXJhbWV0ZXJFcnJvcj1GLlBhcmFtZXRlckVycm9yfSw1NzYxOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2NvbnN0e2Zyb21DYWxsYmFjazpffT1iKDcwNDEpLHA9YigyMjI0KS55LFY9Yig3MzI0''@;'; put 'put ''KS5wZXJtdXRlRG9tYWluLHc9Yig4OTcxKS5VLHtnZXRDdXN0b21JbnNwZWN0U3ltYm9sOlAsZ2V0VXRpbEluc3BlY3Q6Rn09YigxMjY5KTtjbGFzcyBSIGV4dGVuZHMgcHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5zeW5jaHJvbm91cz0hMCx0aGlzLmlkeD1PYmplY3QuY3JlYXRlKG51''@;'; put 'put ''bGwpO2NvbnN0IFo9UCgpO1omJih0aGlzW1pdPXRoaXMuaW5zcGVjdCl9aW5zcGVjdCgpe3JldHVybmB7IGlkeDogJHtGKHopKHRoaXMuaWR4LCExLDIpfSB9YH1maW5kQ29va2llKFosWSxXLHEpe3JldHVybiBxKG51bGwsdGhpcy5pZHhbWl0mJnRoaXMuaWR4W1pdW1ldP3RoaXMuaWR4W1pd''@;'; put 'put ''W1ldW1ddfHxudWxsOnZvaWQgMCl9ZmluZENvb2tpZXMoWixZLFcscSl7Y29uc3QgZWU9W107aWYoImZ1bmN0aW9uIj09dHlwZW9mIFcmJihxPVcsVz0hMCksIVopcmV0dXJuIHEobnVsbCxbXSk7bGV0IEo7Sj1ZP2Z1bmN0aW9uKGdlKXtPYmplY3Qua2V5cyhnZSkuZm9yRWFjaChfZT0+e2lm''@;'; put 'put ''KHcoWSxfZSkpe2NvbnN0IFRlPWdlW19lXTtmb3IoY29uc3QgTWUgaW4gVGUpZWUucHVzaChUZVtNZV0pfX0pfTpmdW5jdGlvbihnZSl7Zm9yKGNvbnN0IF9lIGluIGdlKXtjb25zdCBUZT1nZVtfZV07Zm9yKGNvbnN0IE1lIGluIFRlKWVlLnB1c2goVGVbTWVdKX19O2NvbnN0IHJlPVYoWixX''@;'; put 'put ''KXx8W1pdLGllPXRoaXMuaWR4O3JlLmZvckVhY2godWU9Pntjb25zdCBnZT1pZVt1ZV07Z2UmJkooZ2UpfSkscShudWxsLGVlKX1wdXRDb29raWUoWixZKXt0aGlzLmlkeFtaLmRvbWFpbl18fCh0aGlzLmlkeFtaLmRvbWFpbl09T2JqZWN0LmNyZWF0ZShudWxsKSksdGhpcy5pZHhbWi5kb21h''@;'; put 'put ''aW5dW1oucGF0aF18fCh0aGlzLmlkeFtaLmRvbWFpbl1bWi5wYXRoXT1PYmplY3QuY3JlYXRlKG51bGwpKSx0aGlzLmlkeFtaLmRvbWFpbl1bWi5wYXRoXVtaLmtleV09WixZKG51bGwpfXVwZGF0ZUNvb2tpZShaLFksVyl7dGhpcy5wdXRDb29raWUoWSxXKX1yZW1vdmVDb29raWUoWixZLFcs''@;'; put 'put ''cSl7dGhpcy5pZHhbWl0mJnRoaXMuaWR4W1pdW1ldJiZ0aGlzLmlkeFtaXVtZXVtXXSYmZGVsZXRlIHRoaXMuaWR4W1pdW1ldW1ddLHEobnVsbCl9cmVtb3ZlQ29va2llcyhaLFksVyl7cmV0dXJuIHRoaXMuaWR4W1pdJiYoWT9kZWxldGUgdGhpcy5pZHhbWl1bWV06ZGVsZXRlIHRoaXMuaWR4''@;'; put 'put ''W1pdKSxXKG51bGwpfXJlbW92ZUFsbENvb2tpZXMoWil7cmV0dXJuIHRoaXMuaWR4PU9iamVjdC5jcmVhdGUobnVsbCksWihudWxsKX1nZXRBbGxDb29raWVzKFope2NvbnN0IFk9W10sVz10aGlzLmlkeDtPYmplY3Qua2V5cyhXKS5mb3JFYWNoKGVlPT57T2JqZWN0LmtleXMoV1tlZV0pLmZv''@;'; put 'put ''ckVhY2gocmU9PntPYmplY3Qua2V5cyhXW2VlXVtyZV0pLmZvckVhY2godWU9PntudWxsIT09dWUmJlkucHVzaChXW2VlXVtyZV1bdWVdKX0pfSl9KSxZLnNvcnQoKGVlLEopPT4oZWUuY3JlYXRpb25JbmRleHx8MCktKEouY3JlYXRpb25JbmRleHx8MCkpLFoobnVsbCxZKX19ZnVuY3Rpb24g''@;'; put 'put ''eihLKXtjb25zdCBaPU9iamVjdC5rZXlzKEspO2lmKDA9PT1aLmxlbmd0aClyZXR1cm4iW09iamVjdDogbnVsbCBwcm90b3R5cGVdIHt9IjtsZXQgWT0iW09iamVjdDogbnVsbCBwcm90b3R5cGVdIHtcbiI7cmV0dXJuIE9iamVjdC5rZXlzKEspLmZvckVhY2goKFcscSk9PntZKz1mdW5jdGlv''@;'; put 'put ''biBOKEssWil7bGV0IFc9YCAgJyR7S30nOiBbT2JqZWN0OiBudWxsIHByb3RvdHlwZV0ge1xuYDtyZXR1cm4gT2JqZWN0LmtleXMoWikuZm9yRWFjaCgocSxlZSxKKT0+e1crPWZ1bmN0aW9uIE8oSyxaKXtjb25zdCBZPSIgICAgIjtsZXQgVz1gJHtZfScke0t9JzogW09iamVjdDogbnVsbCBw''@;'; put 'put ''cm90b3R5cGVdIHtcbmA7cmV0dXJuIE9iamVjdC5rZXlzKFopLmZvckVhY2goKHEsZWUsSik9PntXKz1gICAgICAgJHtxfTogJHtaW3FdLmluc3BlY3QoKX1gLGVlPEoubGVuZ3RoLTEmJihXKz0iLCIpLFcrPSJcbiJ9KSxXKz1gJHtZfX1gLFd9KHEsWltxXSksZWU8Si5sZW5ndGgtMSYmKFcr''@;'; put 'put ''PSIsIiksVys9IlxuIn0pLFcrPSIgIH0iLFd9KFcsS1tXXSkscTxaLmxlbmd0aC0xJiYoWSs9IiwiKSxZKz0iXG4ifSksWSs9In0iLFl9WyJmaW5kQ29va2llIiwiZmluZENvb2tpZXMiLCJwdXRDb29raWUiLCJ1cGRhdGVDb29raWUiLCJyZW1vdmVDb29raWUiLCJyZW1vdmVDb29raWVzIiwi''@;'; put 'put ''cmVtb3ZlQWxsQ29va2llcyIsImdldEFsbENvb2tpZXMiXS5mb3JFYWNoKEs9PntSLnByb3RvdHlwZVtLXT1fKFIucHJvdG90eXBlW0tdKX0pLFgubT1SfSw4OTcxOihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtYLlU9ZnVuY3Rpb24gYihJLF8pe3JldHVybiBfPT09SXx8MD09PUkuaW5kZXhPZihf''@;'; put 'put ''KSYmKCIvIj09PV8uc3Vic3RyKC0xKXx8Ii8iPT09SS5zdWJzdHIoXy5sZW5ndGgsMSkpfX0sNzMyNDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPWIoNzUyKTtYLnBlcm11dGVEb21haW49ZnVuY3Rpb24gXyhwLFYpe2NvbnN0IHc9SS5nZXRQdWJsaWNTdWZmaXgocCx7YWxsb3dT''@;'; put 'put ''cGVjaWFsVXNlRG9tYWluOlZ9KTtpZighdylyZXR1cm4gbnVsbDtpZih3PT1wKXJldHVybltwXTsiLiI9PXAuc2xpY2UoLTEpJiYocD1wLnNsaWNlKDAsLTEpKTtjb25zdCBGPXAuc2xpY2UoMCwtKHcubGVuZ3RoKzEpKS5zcGxpdCgiLiIpLnJldmVyc2UoKTtsZXQgUj13O2NvbnN0IHo9W1Jd''@;'; put 'put ''O2Zvcig7Ri5sZW5ndGg7KVI9YCR7Ri5zaGlmdCgpfS4ke1J9YCx6LnB1c2goUik7cmV0dXJuIHp9fSw3NTI6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7Y29uc3QgST1iKDg1NjYpLF89WyJsb2NhbCIsImV4YW1wbGUiLCJpbnZhbGlkIiwibG9jYWxob3N0IiwidGVzdCJdLHA9WyJsb2NhbGhv''@;'; put 'put ''c3QiLCJpbnZhbGlkIl07WC5nZXRQdWJsaWNTdWZmaXg9ZnVuY3Rpb24gVih3LFA9e30pe2NvbnN0IEY9dy5zcGxpdCgiLiIpLFI9RltGLmxlbmd0aC0xXSxOPSEhUC5pZ25vcmVFcnJvcjtpZihQLmFsbG93U3BlY2lhbFVzZURvbWFpbiYmXy5pbmNsdWRlcyhSKSl7aWYoRi5sZW5ndGg+MSly''@;'; put 'put ''ZXR1cm5gJHtGW0YubGVuZ3RoLTJdfS4ke1J9YDtpZihwLmluY2x1ZGVzKFIpKXJldHVybmAke1J9YH1pZighTiYmXy5pbmNsdWRlcyhSKSl0aHJvdyBuZXcgRXJyb3IoYENvb2tpZSBoYXMgZG9tYWluIHNldCB0byB0aGUgcHVibGljIHN1ZmZpeCAiJHtSfSIgd2hpY2ggaXMgYSBzcGVjaWFs''@;'; put 'put ''IHVzZSBkb21haW4uIFRvIGFsbG93IHRoaXMsIGNvbmZpZ3VyZSB5b3VyIENvb2tpZUphciB3aXRoIHthbGxvd1NwZWNpYWxVc2VEb21haW46dHJ1ZSwgcmVqZWN0UHVibGljU3VmZml4ZXM6IGZhbHNlfS5gKTtyZXR1cm4gSS5nZXQodyl9fSwyMjI0OihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtY''@;'; put 'put ''Lnk9Y2xhc3MgYntjb25zdHJ1Y3Rvcigpe3RoaXMuc3luY2hyb25vdXM9ITF9ZmluZENvb2tpZShfLHAsVix3KXt0aHJvdyBuZXcgRXJyb3IoImZpbmRDb29raWUgaXMgbm90IGltcGxlbWVudGVkIil9ZmluZENvb2tpZXMoXyxwLFYsdyl7dGhyb3cgbmV3IEVycm9yKCJmaW5kQ29va2llcyBp''@;'; put 'put ''cyBub3QgaW1wbGVtZW50ZWQiKX1wdXRDb29raWUoXyxwKXt0aHJvdyBuZXcgRXJyb3IoInB1dENvb2tpZSBpcyBub3QgaW1wbGVtZW50ZWQiKX11cGRhdGVDb29raWUoXyxwLFYpe3Rocm93IG5ldyBFcnJvcigidXBkYXRlQ29va2llIGlzIG5vdCBpbXBsZW1lbnRlZCIpfXJlbW92ZUNvb2tp''@;'; put 'put ''ZShfLHAsVix3KXt0aHJvdyBuZXcgRXJyb3IoInJlbW92ZUNvb2tpZSBpcyBub3QgaW1wbGVtZW50ZWQiKX1yZW1vdmVDb29raWVzKF8scCxWKXt0aHJvdyBuZXcgRXJyb3IoInJlbW92ZUNvb2tpZXMgaXMgbm90IGltcGxlbWVudGVkIil9cmVtb3ZlQWxsQ29va2llcyhfKXt0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoInJlbW92ZUFsbENvb2tpZXMgaXMgbm90IGltcGxlbWVudGVkIil9Z2V0QWxsQ29va2llcyhfKXt0aHJvdyBuZXcgRXJyb3IoImdldEFsbENvb2tpZXMgaXMgbm90IGltcGxlbWVudGVkICh0aGVyZWZvcmUgamFyIGNhbm5vdCBiZSBzZXJpYWxpemVkKSIpfX19LDEyNjk6KGNlLFgs''@;'; put 'put ''Yik9PntmdW5jdGlvbiBJKCl7dHJ5e3JldHVybiBiKDk1MzkpfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBfKCl7cmV0dXJuIFN5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIil9WC5nZXRVdGlsSW5zcGVjdD1mdW5jdGlvbih3LFA9e30pe2NvbnN0IFI9KFAucmVx''@;'; put 'put ''dWlyZVV0aWx8fEkpKCk7cmV0dXJuIGZ1bmN0aW9uKE4sTyxLKXtyZXR1cm4gUj9SLmluc3BlY3QoTixPLEspOncoTil9fSxYLmdldEN1c3RvbUluc3BlY3RTeW1ib2w9ZnVuY3Rpb24odz17fSl7cmV0dXJuKHcubG9va3VwQ3VzdG9tSW5zcGVjdFN5bWJvbHx8XykoKXx8ZnVuY3Rpb24gcChW''@;'; put 'put ''KXtjb25zdCBQPShWLnJlcXVpcmVVdGlsfHxJKSgpO3JldHVybiBQP1AuaW5zcGVjdC5jdXN0b206bnVsbH0odyl9fSw3NjUyOihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKE4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBOfWZ1bmN0aW9uIFYoTil7cmV0dXJuInN0cmluZyI9''@;'; put 'put ''PXR5cGVvZiBOfHxOIGluc3RhbmNlb2YgU3RyaW5nfWZ1bmN0aW9uIHcoTil7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT10b1N0cmluZy5jYWxsKE4pfWNsYXNzIHogZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvciguLi5PKXtzdXBlciguLi5PKX19WC5QYXJhbWV0ZXJFcnJvcj16LFguaXNG''@;'; put 'put ''dW5jdGlvbj1iLFguaXNOb25FbXB0eVN0cmluZz1mdW5jdGlvbiBJKE4pe3JldHVybiBWKE4pJiYiIiE9PU59LFguaXNEYXRlPWZ1bmN0aW9uIF8oTil7cmV0dXJuIGZ1bmN0aW9uIFAoTixPKXt0cnl7cmV0dXJuIE4gaW5zdGFuY2VvZiBPfWNhdGNoe3JldHVybiExfX0oTixEYXRlKSYmZnVu''@;'; put 'put ''Y3Rpb24gRihOKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIE4mJk4lMT09MH0oTi5nZXRUaW1lKCkpfSxYLmlzRW1wdHlTdHJpbmc9ZnVuY3Rpb24gcChOKXtyZXR1cm4iIj09PU58fE4gaW5zdGFuY2VvZiBTdHJpbmcmJiIiPT09Ti50b1N0cmluZygpfSxYLmlzU3RyaW5nPVYsWC5pc09iamVj''@;'; put 'put ''dD13LFgudmFsaWRhdGU9ZnVuY3Rpb24gUihOLE8sSyl7aWYoYihPKXx8KEs9TyxPPW51bGwpLHcoSyl8fChLPXtFcnJvcjoiRmFpbGVkIENoZWNrIn0pLCFOKXtpZighTyl0aHJvdyBuZXcgeihLKTtPKG5ldyB6KEspKX19fSw0NTY6Y2U9PntjZS5leHBvcnRzPSI0LjEuMyJ9LDcwNDE6KGNl''@;'; put 'put ''LFgpPT57InVzZSBzdHJpY3QiO1guZnJvbUNhbGxiYWNrPWZ1bmN0aW9uKGIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV0pcmV0dXJuIG5ldyBQcm9taXNlKChJLF8pPT57''@;'; put 'put ''YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGhdPShwLFYpPT57aWYocClyZXR1cm4gXyhwKTtJKFYpfSxhcmd1bWVudHMubGVuZ3RoKyssYi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KTtiLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sIm5hbWUiLHt2YWx1ZTpiLm5hbWV9KX0sWC5mcm9tUHJvbWlz''@;'; put 'put ''ZT1mdW5jdGlvbihiKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKCl7Y29uc3QgST1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXTtpZigiZnVuY3Rpb24iIT10eXBlb2YgSSlyZXR1cm4gYi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZGVsZXRlIGFyZ3VtZW50c1th''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoLTFdLGFyZ3VtZW50cy5sZW5ndGgtLSxiLmFwcGx5KHRoaXMsYXJndW1lbnRzKS50aGVuKF89PkkobnVsbCxfKSxJKX0sIm5hbWUiLHt2YWx1ZTpiLm5hbWV9KX19LDY3MjpmdW5jdGlvbihjZSxYLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdh''@;'; put 'put ''aXRlcnx8ZnVuY3Rpb24odyxQLEYsUil7cmV0dXJuIG5ldyhGfHwoRj1Qcm9taXNlKSkoZnVuY3Rpb24oTixPKXtmdW5jdGlvbiBLKFcpe3RyeXtZKFIubmV4dChXKSl9Y2F0Y2gocSl7TyhxKX19ZnVuY3Rpb24gWihXKXt0cnl7WShSLnRocm93KFcpKX1jYXRjaChxKXtPKHEpfX1mdW5jdGlv''@;'; put 'put ''biBZKFcpe1cuZG9uZT9OKFcudmFsdWUpOmZ1bmN0aW9uIHooTil7cmV0dXJuIE4gaW5zdGFuY2VvZiBGP046bmV3IEYoZnVuY3Rpb24oTyl7TyhOKX0pfShXLnZhbHVlKS50aGVuKEssWil9WSgoUj1SLmFwcGx5KHcsUHx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShY''@;'; put 'put ''LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkNvbnRleHRNYW5hZ2VyPXZvaWQgMDtjb25zdCBfPWIoNTkyOCkscD1iKDk3NzgpO1guQ29udGV4dE1hbmFnZXI9Y2xhc3MgVntnZXQgZ2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cygpe3JldHVybiB0aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4''@;'; put 'put ''dHN9Z2V0IGdldERlZmF1bHRMYXVuY2hlckNvbnRleHRzKCl7cmV0dXJuIHRoaXMuZGVmYXVsdExhdW5jaGVyQ29udGV4dHN9Y29uc3RydWN0b3IoUCxGKXt0aGlzLnNlcnZlclVybD1QLHRoaXMucmVxdWVzdENsaWVudD1GLHRoaXMuZGVmYXVsdENvbXB1dGVDb250ZXh0cz1bIkNBUyBGb3Jt''@;'; put 'put ''YXRzIHNlcnZpY2UgY29tcHV0ZSBjb250ZXh0IiwiRGF0YSBNaW5pbmcgY29tcHV0ZSBjb250ZXh0IiwiSW1wb3J0IDkgc2VydmljZSBjb21wdXRlIGNvbnRleHQiLCJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQiLCJTQVMgTW9kZWwgTWFuYWdlciBjb21wdXRlIGNvbnRleHQi''@;'; put 'put ''LCJTQVMgU3R1ZGlvIGNvbXB1dGUgY29udGV4dCIsIlNBUyBWaXN1YWwgRm9yZWNhc3RpbmcgY29tcHV0ZSBjb250ZXh0Il0sdGhpcy5kZWZhdWx0TGF1bmNoZXJDb250ZXh0cz1bIkNBUyBGb3JtYXRzIHNlcnZpY2UgbGF1bmNoZXIgY29udGV4dCIsIkRhdGEgTWluaW5nIGxhdW5jaGVyIGNv''@;'; put 'put ''bnRleHQiLCJJbXBvcnQgOSBzZXJ2aWNlIGxhdW5jaGVyIGNvbnRleHQiLCJKb2IgRmxvdyBFeGVjdXRpb24gbGF1bmNoZXIgY29udGV4dCIsIlNBUyBKb2IgRXhlY3V0aW9uIGxhdW5jaGVyIGNvbnRleHQiLCJTQVMgTW9kZWwgTWFuYWdlciBsYXVuY2hlciBjb250ZXh0IiwiU0FTIFN0dWRp''@;'; put 'put ''byBsYXVuY2hlciBjb250ZXh0IiwiU0FTIFZpc3VhbCBGb3JlY2FzdGluZyBsYXVuY2hlciBjb250ZXh0Il0sUCYmKDAsXy5pc1VybCkoUCl9Z2V0Q29tcHV0ZUNvbnRleHRzKFApe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6Rn09eWllbGQg''@;'; put 'put ''dGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cz9saW1pdD0xMDAwMGAsUCkuY2F0Y2goej0+e3Rocm93KDAscC5wcmVmaXhNZXNzYWdlKSh6LCJFcnJvciB3aGlsZSBnZXR0aW5nIGNvbXB1dGUgY29udGV4dHMuICIpfSk7cmV0dXJuKEYm''@;'; put 'put ''JkYuaXRlbXM/Ri5pdGVtczpbXSkubWFwKHo9Pih7Y3JlYXRlZEJ5OnouY3JlYXRlZEJ5LGlkOnouaWQsbmFtZTp6Lm5hbWUsdmVyc2lvbjp6LnZlcnNpb24sYXR0cmlidXRlczp7fX0pKX0pfWdldExhdW5jaGVyQ29udGV4dHMoUCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0''@;'; put 'put ''aW9uKigpe2NvbnN0e3Jlc3VsdDpGfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9sYXVuY2hlci9jb250ZXh0cz9saW1pdD0xMDAwMGAsUCkuY2F0Y2goej0+e3Rocm93KDAscC5wcmVmaXhNZXNzYWdlKSh6LCJFcnJvciB3aGlsZSBnZXR0aW5nIGxh''@;'; put 'put ''dW5jaGVyIGNvbnRleHRzLiAiKX0pO3JldHVybihGJiZGLml0ZW1zP0YuaXRlbXM6W10pLm1hcCh6PT4oe2NyZWF0ZWRCeTp6LmNyZWF0ZWRCeSxpZDp6LmlkLG5hbWU6ei5uYW1lLHZlcnNpb246ei52ZXJzaW9uLGF0dHJpYnV0ZXM6e319KSl9KX1jcmVhdGVDb21wdXRlQ29udGV4dChQLEYs''@;'; put 'put ''Uix6LE4sTyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKHRoaXMudmFsaWRhdGVDb250ZXh0TmFtZShQKSx0aGlzLmlzRGVmYXVsdENvbnRleHQoUCx0aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHMsYENvbXB1dGUgY29udGV4dCAnJHtQfScgYWxyZWFkeSBl''@;'; put 'put ''eGlzdHMuYCksKHlpZWxkIHRoaXMuZ2V0Q29tcHV0ZUNvbnRleHRzKE4pKS5maW5kKGVlPT5lZS5uYW1lPT09UCkpdGhyb3cgbmV3IEVycm9yKGBDb21wdXRlIGNvbnRleHQgJyR7UH0nIGFscmVhZHkgZXhpc3RzLmApO2lmKEYmJiF0aGlzLmRlZmF1bHRMYXVuY2hlckNvbnRleHRzLmluY2x1''@;'; put 'put ''ZGVzKEYpJiYhKHlpZWxkIHRoaXMuZ2V0TGF1bmNoZXJDb250ZXh0cyhOKSkuZmluZChKPT5KLm5hbWU9PT1GKSl7Y29uc3QgSj1gVGhlIGxhdW5jaGVyIGNvbnRleHQgZm9yICR7Rn1gLGllPXlpZWxkIHRoaXMuY3JlYXRlTGF1bmNoZXJDb250ZXh0KEYsSiwiZGlyZWN0IixOKS5jYXRjaCh1''@;'; put 'put ''ZT0+e3Rocm93IG5ldyBFcnJvcihgRXJyb3Igd2hpbGUgY3JlYXRpbmcgbGF1bmNoZXIgY29udGV4dC4gJHt1ZX1gKX0pO2lmKCFpZXx8IWllLm5hbWUpdGhyb3cgbmV3IEVycm9yKCJFcnJvciB3aGlsZSBjcmVhdGluZyBsYXVuY2hlciBjb250ZXh0LiIpO0Y9aWUubmFtZX1sZXQgWT17cmV1''@;'; put 'put ''c2VTZXJ2ZXJQcm9jZXNzZXM6ITB9O1ImJihZPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxZKSx7cnVuU2VydmVyQXM6Un0pKTtjb25zdCBXPXtuYW1lOlAsbGF1bmNoQ29udGV4dDp7Y29udGV4dE5hbWU6Rnx8IiJ9LGF0dHJpYnV0ZXM6WX07TyYmTy5sZW5ndGg/Vy5hdXRob3Jp''@;'; put 'put ''emVkVXNlcnM9TzpXLmF1dGhvcml6ZUFsbEF1dGhlbnRpY2F0ZWRVc2Vycz0hMCx6JiYoVy5lbnZpcm9ubWVudD17YXV0b0V4ZWNMaW5lczp6fSk7Y29uc3R7cmVzdWx0OnF9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KGAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRz''@;'; put 'put ''YCxXLE4pLmNhdGNoKGVlPT57dGhyb3coMCxwLnByZWZpeE1lc3NhZ2UpKGVlLCJFcnJvciB3aGlsZSBjcmVhdGluZyBjb21wdXRlIGNvbnRleHQuICIpfSk7cmV0dXJuIHF9KX1jcmVhdGVMYXVuY2hlckNvbnRleHQoUCxGLFI9ImRpcmVjdCIseil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9p''@;'; put 'put ''ZCAwLGZ1bmN0aW9uKigpe2lmKCFQKXRocm93IG5ldyBFcnJvcigiQ29udGV4dCBuYW1lIGlzIHJlcXVpcmVkLiIpO2lmKHRoaXMuaXNEZWZhdWx0Q29udGV4dChQLHRoaXMuZGVmYXVsdExhdW5jaGVyQ29udGV4dHMsYExhdW5jaGVyIGNvbnRleHQgJyR7UH0nIGFscmVhZHkgZXhpc3RzLmAp''@;'; put 'put ''LCh5aWVsZCB0aGlzLmdldExhdW5jaGVyQ29udGV4dHMoeikpLmZpbmQoWT0+WS5uYW1lPT09UCkpdGhyb3cgbmV3IEVycm9yKGBMYXVuY2hlciBjb250ZXh0ICcke1B9JyBhbHJlYWR5IGV4aXN0cy5gKTtjb25zdCBLPXtuYW1lOlAsZGVzY3JpcHRpb246RixsYXVuY2hUeXBlOlJ9LHtyZXN1''@;'; put 'put ''bHQ6Wn09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoYCR7dGhpcy5zZXJ2ZXJVcmx9L2xhdW5jaGVyL2NvbnRleHRzYCxLLHopLmNhdGNoKFk9Pnt0aHJvdygwLHAucHJlZml4TWVzc2FnZSkoWSwiRXJyb3Igd2hpbGUgY3JlYXRpbmcgbGF1bmNoZXIgY29udGV4dC4gIil9KTtyZXR1''@;'; put 'put ''cm4gWn0pfWVkaXRDb21wdXRlQ29udGV4dChQLEYsUil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCB6O3RoaXMudmFsaWRhdGVDb250ZXh0TmFtZShQKSx0aGlzLmlzRGVmYXVsdENvbnRleHQoUCx0aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHMsIkVkaXRp''@;'; put 'put ''bmcgZGVmYXVsdCBTQVMgY29tcHV0ZSBjb250ZXh0cyBpcyBub3QgYWxsb3dlZC4iLCEwKSx6PXlpZWxkIHRoaXMuZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUoUCxSKSx6fHwoej15aWVsZCB0aGlzLmdldENvbXB1dGVDb250ZXh0QnlJZChGLmlkLFIpKTtjb25zdHtyZXN1bHQ6TixldGFnOk99''@;'; put 'put ''PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvY29udGV4dHMvJHt6LmlkfWAsUikuY2F0Y2goSz0+e3Rocm93IEsmJjQwND09PUsuc3RhdHVzP25ldyBFcnJvcihgVGhlIGNvbnRleHQgJyR7UH0nIHdhcyBub3QgZm91bmQgb24gdGhpcyBz''@;'; put 'put ''ZXJ2ZXIuYCk6S30pO3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucHV0KGAvY29tcHV0ZS9jb250ZXh0cy8ke04uaWR9YCxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxOKSxGKSx7YXR0cmlidXRlczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3Np''@;'; put 'put ''Z24oe30sTi5hdHRyaWJ1dGVzKSxGLmF0dHJpYnV0ZXMpfSksUix7IklmLU1hdGNoIjpPfSl9KX1nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShQLEYpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6Un09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50''@;'; put 'put ''LmdldChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cz9maWx0ZXI9ZXEobmFtZSwgIiR7UH0iKWAsRikuY2F0Y2goej0+e3Rocm93KDAscC5wcmVmaXhNZXNzYWdlKSh6LCJFcnJvciB3aGlsZSBnZXR0aW5nIGNvbXB1dGUgY29udGV4dCBieSBuYW1lLiAiKX0pO2lmKCFSfHwh''@;'; put 'put ''Ui5pdGVtc3x8IVIuaXRlbXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVGhlIGNvbnRleHQgJyR7UH0nIHdhcyBub3QgZm91bmQgYXQgJyR7dGhpcy5zZXJ2ZXJVcmx9Jy5gKTtyZXR1cm4gUi5pdGVtc1swXX0pfWdldENvbXB1dGVDb250ZXh0QnlJZChQLEYpe3JldHVybiBJKHRoaXMsdm9p''@;'; put 'put ''ZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6Un09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cy8ke1B9YCxGKS5jYXRjaCh6PT57dGhyb3coMCxwLnByZWZpeE1lc3NhZ2UpKHosIkVycm9yIHdoaWxlIGdl''@;'; put 'put ''dHRpbmcgY29tcHV0ZSBjb250ZXh0IGJ5IGlkLiAiKX0pO3JldHVybiBSfSl9Z2V0RXhlY3V0YWJsZUNvbnRleHRzKFAsRil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e3Jlc3VsdDpSfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMu''@;'; put 'put ''c2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzP2xpbWl0PTEwMDAwYCxGPy5hY2Nlc3NfdG9rZW4pLmNhdGNoKFo9Pnt0aHJvdygwLHAucHJlZml4TWVzc2FnZSkoWiwiRXJyb3Igd2hpbGUgZmV0Y2hpbmcgY29tcHV0ZSBjb250ZXh0cy4iKX0pLHo9Ui5pdGVtc3x8W10sTj1bXSxPPXoubWFw''@;'; put 'put ''KFo9Pntjb25zdCBZPVsiJXB1dCAmPXN5c3VzZXJpZDsiXTtyZXR1cm4oKT0+UChgdGVzdC0ke1oubmFtZX1gLFksWi5uYW1lLEYsbnVsbCwhMSwhMCwhMCkuY2F0Y2goVz0+Vyl9KTtsZXQgSz1bXTtmb3IoY29uc3QgWiBvZiBPKUsucHVzaCh5aWVsZCBaKCkpO3JldHVybiBLLmZvckVhY2go''@;'; put 'put ''KFosWSk9PntpZihaJiZaLmxvZyl0cnl7bGV0IHE9IiI7Y29uc3QgZWU9Wi5sb2cuc3BsaXQoIlxuIikuZmluZChKPT5KLnN0YXJ0c1dpdGgoIlNZU1VTRVJJRD0iKSk7ZWUmJihxPWVlLnJlcGxhY2UoIlNZU1VTRVJJRD0iLCIiKSxOLnB1c2goe2NyZWF0ZWRCeTp6W1ldLmNyZWF0ZWRCeSxp''@;'; put 'put ''ZDp6W1ldLmlkLG5hbWU6eltZXS5uYW1lLHZlcnNpb246eltZXS52ZXJzaW9uLGF0dHJpYnV0ZXM6e3N5c1VzZXJJZDpxfX0pKX1jYXRjaChXKXt0aHJvdyBXfX0pLE59KX1kZWxldGVDb21wdXRlQ29udGV4dChQLEYpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0''@;'; put 'put ''aGlzLnZhbGlkYXRlQ29udGV4dE5hbWUoUCksdGhpcy5pc0RlZmF1bHRDb250ZXh0KFAsdGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzLCJEZWxldGluZyBkZWZhdWx0IFNBUyBjb21wdXRlIGNvbnRleHRzIGlzIG5vdCBhbGxvd2VkLiIsITApO2NvbnN0IHo9eWllbGQgdGhpcy5nZXRDb21w''@;'; put 'put ''dXRlQ29udGV4dEJ5TmFtZShQLEYpO3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZGVsZXRlKGAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzLyR7ei5pZH1gLEYpfSl9dmFsaWRhdGVDb250ZXh0TmFtZShQKXtpZighUCl0aHJvdyBuZXcgRXJyb3IoIkNvbnRleHQg''@;'; put 'put ''bmFtZSBpcyByZXF1aXJlZC4iKX1pc0RlZmF1bHRDb250ZXh0KFAsRj10aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHMsUj0iIix6PSExKXtpZihGLmluY2x1ZGVzKFApKXRocm93IG5ldyBFcnJvcihgJHtSfSR7ej8iXG5EZWZhdWx0IGNvbnRleHRzOiIrRi5tYXAoKE4sTyk9PmBcbiR7Tysx''@;'; put 'put ''fS4gJHtOfWApOiIifWApfX19LDgzMDY6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHosTixPLEspe3JldHVybiBuZXcoT3x8KE89UHJvbWlzZSkpKGZ1bmN0aW9uKFksVyl7ZnVuY3Rpb24gcShyZSl7dHJ5e0ooSy5u''@;'; put 'put ''ZXh0KHJlKSl9Y2F0Y2goaWUpe1coaWUpfX1mdW5jdGlvbiBlZShyZSl7dHJ5e0ooSy50aHJvdyhyZSkpfWNhdGNoKGllKXtXKGllKX19ZnVuY3Rpb24gSihyZSl7cmUuZG9uZT9ZKHJlLnZhbHVlKTpmdW5jdGlvbiBaKFkpe3JldHVybiBZIGluc3RhbmNlb2YgTz9ZOm5ldyBPKGZ1bmN0aW9u''@;'; put 'put ''KFcpe1coWSl9KX0ocmUudmFsdWUpLnRoZW4ocSxlZSl9SigoSz1LLmFwcGx5KHosTnx8W10pKS5uZXh0KCkpfSl9LF89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKHope3JldHVybiB6JiZ6Ll9fZXNNb2R1bGU/ejp7ZGVmYXVsdDp6fX07T2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguU0FTOUFwaUNsaWVudD12b2lkIDA7Y29uc3QgcD1iKDc3NTcpLFY9XyhiKDYyMzApKSx3PWIoNzk1KSxQPWIoNTkyOCk7WC5TQVM5QXBpQ2xpZW50PWNsYXNzIEZ7Y29uc3RydWN0b3IoTixPLEspe3RoaXMuc2VydmVyVXJsPU4sdGhp''@;'; put 'put ''cy5qb2JzUGF0aD1PLE4mJigwLFAuaXNVcmwpKE4pLHRoaXMucmVxdWVzdENsaWVudD1uZXcgdy5TYXM5UmVxdWVzdENsaWVudChOLEspfWdldENvbmZpZygpe3JldHVybntzZXJ2ZXJVcmw6dGhpcy5zZXJ2ZXJVcmx9fXNldENvbmZpZyhOKXtOJiYodGhpcy5zZXJ2ZXJVcmw9Til9ZXhlY3V0''@;'; put 'put ''ZVNjcmlwdChOLE8sSyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVxdWVzdENsaWVudC5sb2dpbihPLEssdGhpcy5qb2JzUGF0aCk7Y29uc3QgWT1SKFsuLi5OLCJkYXRhIF9udWxsXzsiLCJmaWxlIF93ZWJvdXQ7IiwicHV0ICdFeGVjdXRl''@;'; put 'put ''ZCBzYXNqcyBydW4nOyIsInJ1bjsiXS5qb2luKCJcbiIpKSxXPWAvVXNlciBGb2xkZXJzLyR7T30vTXkgRm9sZGVyL3Nhc2pzL3J1bm5lcmAscT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9IitZLmdldEJvdW5kYXJ5KCksSj17ImNhY2hlLWNvbnRyb2wiOiJuby1jYWNoZSIsQWNj''@;'; put 'put ''ZXB0OiIqLyoiLCJDb250ZW50LVR5cGUiOnEsIkNvbnRlbnQtTGVuZ3RoIjpZLmdldExlbmd0aFN5bmMoKSxDb25uZWN0aW9uOiJrZWVwLWFsaXZlIn0scmU9YCR7dGhpcy5qb2JzUGF0aH0vPyR7Il9wcm9ncmFtPSIrVysiJl9kZWJ1Zz1sb2cifWA7cmV0dXJuKHlpZWxkIHRoaXMucmVxdWVz''@;'; put 'put ''dENsaWVudC5wb3N0KHJlLFksdm9pZCAwLHEsSikpLnJlc3VsdH0pfX07Y29uc3QgUj16PT57Y29uc3QgTj1uZXcgVi5kZWZhdWx0LE89YHNhc2pzLWV4ZWN1dGUtc2FzOS0keygwLHAuZ2VuZXJhdGVUaW1lc3RhbXApKCIiKX0uc2FzYDtyZXR1cm4gTi5hcHBlbmQoTyx6LHtmaWxlbmFtZTpP''@;'; put 'put ''LGNvbnRlbnRUeXBlOiJ0ZXh0L3BsYWluIn0pLE59fSw5ODIxOmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3QiO3ZhciBJPWIoNDE1NSksXz1iKDUxMDgpLHA9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHJlLGllLHVlLGdlKXtyZXR1cm4gbmV3KHVlfHwodWU9UHJvbWlzZSkp''@;'; put 'put ''KGZ1bmN0aW9uKFRlLE1lKXtmdW5jdGlvbiBaZSh5KXt0cnl7ZyhnZS5uZXh0KHkpKX1jYXRjaCh4KXtNZSh4KX19ZnVuY3Rpb24gQih5KXt0cnl7ZyhnZS50aHJvdyh5KSl9Y2F0Y2goeCl7TWUoeCl9fWZ1bmN0aW9uIGcoeSl7eS5kb25lP1RlKHkudmFsdWUpOmZ1bmN0aW9uIF9lKFRlKXty''@;'; put 'put ''ZXR1cm4gVGUgaW5zdGFuY2VvZiB1ZT9UZTpuZXcgdWUoZnVuY3Rpb24oTWUpe01lKFRlKX0pfSh5LnZhbHVlKS50aGVuKFplLEIpfWcoKGdlPWdlLmFwcGx5KHJlLGllfHxbXSkpLm5leHQoKSl9KX0sVj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24ocmUpe3JldHVybiBy''@;'; put 'put ''ZSYmcmUuX19lc01vZHVsZT9yZTp7ZGVmYXVsdDpyZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLlNBU1ZpeWFBcGlDbGllbnQ9dm9pZCAwO2NvbnN0IHc9Yig1OTI4KSxQPVYoYig2MjMwKSksRj1iKDEzOTUpLFI9Yig2OTAzKSx6PWIoNjcy''@;'; put 'put ''KSxOPWIoOTA5NyksTz1iKDk3NzgpLEs9YigxMzQzKSxaPWIoNzA0KSxZPWIoNjQ5NiksVz1iKDE2MjIpLHE9YigzNTY5KSxlZT1iKDM2Nik7WC5TQVNWaXlhQXBpQ2xpZW50PWNsYXNzIEp7Y29uc3RydWN0b3IoaWUsdWUsZ2UsX2Upe3RoaXMuc2VydmVyVXJsPWllLHRoaXMucm9vdEZvbGRl''@;'; put 'put ''ck5hbWU9dWUsdGhpcy5jb250ZXh0TmFtZT1nZSx0aGlzLnJlcXVlc3RDbGllbnQ9X2UsdGhpcy5fZGVidWc9ITEsdGhpcy5zZXNzaW9uTWFuYWdlcj1uZXcgUi5TZXNzaW9uTWFuYWdlcih0aGlzLnNlcnZlclVybCx0aGlzLmNvbnRleHROYW1lLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy5j''@;'; put 'put ''b250ZXh0TWFuYWdlcj1uZXcgei5Db250ZXh0TWFuYWdlcih0aGlzLnNlcnZlclVybCx0aGlzLnJlcXVlc3RDbGllbnQpLHRoaXMuZm9sZGVyTWFwPW5ldyBNYXAsdGhpcy5maWxlRXh0ZW5zaW9uTWFwPW5ldyBNYXAsdGhpcy5ib29sRXh0ZW5zaW9uTWFwPSExLGllJiYoMCx3LmlzVXJsKShp''@;'; put 'put ''ZSl9YXBwZW5kUmVxdWVzdChpZSx1ZSxnZSl7dGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoaWUsdWUsZ2UpfWdldCBkZWJ1Zygpe3JldHVybiB0aGlzLl9kZWJ1Z31zZXQgZGVidWcoaWUpe3RoaXMuX2RlYnVnPWllLHRoaXMuc2Vzc2lvbk1hbmFnZXImJih0aGlzLnNlc3Npb25N''@;'; put 'put ''YW5hZ2VyLmRlYnVnPWllKX1nZXRKb2JzSW5Gb2xkZXIoaWUpe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCB1ZT0oMCx3LmlzUmVsYXRpdmVQYXRoKShpZSk/YCR7dGhpcy5yb290Rm9sZGVyTmFtZX0vJHtpZX1gOmllO3JldHVybiB0aGlzLmZvbGRlck1h''@;'; put 'put ''cC5nZXQodWUpfHwoeWllbGQgdGhpcy5wb3B1bGF0ZUZvbGRlck1hcCh1ZSkpLHRoaXMuZm9sZGVyTWFwLmdldCh1ZSl9KX1nZXRDb25maWcoKXtyZXR1cm57c2VydmVyVXJsOnRoaXMuc2VydmVyVXJsLHJvb3RGb2xkZXJOYW1lOnRoaXMucm9vdEZvbGRlck5hbWV9fXNldENvbmZpZyhpZSx1''@;'; put 'put ''ZSl7aWUmJih0aGlzLnNlcnZlclVybD1pZSksdWUmJih0aGlzLnJvb3RGb2xkZXJOYW1lPXVlKX1nZXRDb21wdXRlQ29udGV4dHMoaWUpe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5nZXRDb21wdXRlQ29u''@;'; put 'put ''dGV4dHMoaWUpfSl9Z2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cygpe3JldHVybiB0aGlzLmNvbnRleHRNYW5hZ2VyLmdldERlZmF1bHRDb21wdXRlQ29udGV4dHN9Z2V0TGF1bmNoZXJDb250ZXh0cyhpZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5''@;'; put 'put ''aWVsZCB0aGlzLmNvbnRleHRNYW5hZ2VyLmdldExhdW5jaGVyQ29udGV4dHMoaWUpfSl9Z2V0RXhlY3V0YWJsZUNvbnRleHRzKGllKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgdWU9dGhpcy5leGVjdXRlU2NyaXB0LmJpbmQodGhpcyk7cmV0dXJuIHlp''@;'; put 'put ''ZWxkIHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0RXhlY3V0YWJsZUNvbnRleHRzKHVlLGllKX0pfWNyZWF0ZVNlc3Npb24oaWUsdWUpe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6X2V9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoIi9j''@;'; put 'put ''b21wdXRlL2NvbnRleHRzP2xpbWl0PTEwMDAwIix1ZSksVGU9X2UuaXRlbXMmJl9lLml0ZW1zLmxlbmd0aD9fZS5pdGVtcy5maW5kKFplPT5aZS5uYW1lPT09aWUpOm51bGw7aWYoIVRlKXRocm93IG5ldyBFcnJvcihgRXhlY3V0aW9uIGNvbnRleHQgJHtpZX0gbm90IGZvdW5kLmApO2NvbnN0''@;'; put 'put ''e3Jlc3VsdDpNZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoYC9jb21wdXRlL2NvbnRleHRzLyR7VGUuaWR9L3Nlc3Npb25zYCx7fSx1ZSk7cmV0dXJuIE1lfSl9Y3JlYXRlQ29tcHV0ZUNvbnRleHQoaWUsdWUsZ2UsX2UsVGUsTWUpe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQg''@;'; put 'put ''MCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5jcmVhdGVDb21wdXRlQ29udGV4dChpZSx1ZSxnZSxfZSxUZSxNZSl9KX1jcmVhdGVMYXVuY2hlckNvbnRleHQoaWUsdWUsZ2U9ImRpcmVjdCIsX2Upe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5j''@;'; put 'put ''dGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5jcmVhdGVMYXVuY2hlckNvbnRleHQoaWUsdWUsZ2UsX2UpfSl9ZWRpdENvbXB1dGVDb250ZXh0KGllLHVlLGdlKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMu''@;'; put 'put ''Y29udGV4dE1hbmFnZXIuZWRpdENvbXB1dGVDb250ZXh0KGllLHVlLGdlKX0pfWRlbGV0ZUNvbXB1dGVDb250ZXh0KGllLHVlKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY29udGV4dE1hbmFnZXIuZGVsZXRlQ29tcHV0ZUNvbnRl''@;'; put 'put ''eHQoaWUsdWUpfSl9ZXhlY3V0ZVNjcmlwdChpZSx1ZSxnZSxfZSxUZT1udWxsLE1lPSExLFplPSExLEI9ITAsZyx5PSExLHgpe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oMCxXLmV4ZWN1dGVPbkNvbXB1dGVBcGkpKHRoaXMucmVxdWVzdENsaWVudCx0''@;'; put 'put ''aGlzLnNlc3Npb25NYW5hZ2VyLHRoaXMucm9vdEZvbGRlck5hbWUsaWUsdWUsZ2UsX2UsVGUsTWUsWmUsQixnLHkseCl9KX1nZXRGaWxlQ29udGVudChpZSx1ZSxnZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IF9lPXlpZWxkIHRoaXMuZ2V0RmlsZVVy''@;'; put 'put ''aShpZSx1ZSxnZSkuY2F0Y2goVGU9Pnt0aHJvdygwLE8ucHJlZml4TWVzc2FnZSkoVGUsYEVycm9yIHdoaWxlIGdldHRpbmcgZmlsZSBVUkkgZm9yOiAke3VlfSBpbiBmb2xkZXI6ICR7aWV9LiBgKX0pO3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVy''@;'; put 'put ''VXJsfSR7X2V9L2NvbnRlbnRgLGdlKS50aGVuKFRlPT5UZS5yZXN1bHQpfSl9dXBkYXRlRmlsZUNvbnRlbnQoaWUsdWUsZ2UsX2Upe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBUZT15aWVsZCB0aGlzLmdldEZpbGVVcmkoaWUsdWUsX2UpLmNhdGNoKEI9''@;'; put 'put ''Pnt0aHJvdygwLE8ucHJlZml4TWVzc2FnZSkoQixgRXJyb3Igd2hpbGUgZ2V0dGluZyBmaWxlIFVSSSBmb3I6ICR7dWV9IGluIGZvbGRlcjogJHtpZX0uIGApfSkse3Jlc3VsdDpNZSxldGFnOlplfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7VGV9''@;'; put 'put ''YCxfZSk7aWYoIU1lfHwhWmUpdGhyb3cgbmV3IEVycm9yKGBGaWxlICR7dWV9IGRvZXMgbm90IGhhdmUgYW4gRVRhZywgb3IgcmVxdWVzdCBmYWlsZWQuYCk7cmV0dXJuIHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wdXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHtUZX0vY29udGVudGAsZ2UsX2Us''@;'; put 'put ''eyJJZi1NYXRjaCI6WmUsIkNvbnRlbnQtVHlwZSI6TWUuY29udGVudFR5cGV9KS50aGVuKEI9PkIucmVzdWx0KX0pfWdldEZvbGRlcihpZSx1ZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAvZm9s''@;'; put 'put ''ZGVycy9mb2xkZXJzL0BpdGVtP3BhdGg9JHtpZX1gLHVlKS50aGVuKGdlPT5nZS5yZXN1bHQpfSl9Y3JlYXRlRmlsZShpZSx1ZSxnZSxfZSxUZSl7dmFyIE1lO3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZighZ2UmJiFfZSl0aHJvdyBuZXcgRXJyb3IoIlBhdGgg''@;'; put 'put ''b3IgVVJJIG9mIHRoZSBwYXJlbnQgZm9sZGVyIGlzIHJlcXVpcmVkLiIpOyFfZSYmZ2UmJihfZT15aWVsZCB0aGlzLmdldEZvbGRlclVyaShnZSxUZSkpO2NvbnN0IFplPXtBY2NlcHQ6ImFwcGxpY2F0aW9uL3ZuZC5zYXMuZmlsZStqc29uIiwiQ29udGVudC1EaXNwb3NpdGlvbiI6YGZpbGVu''@;'; put 'put ''YW1lPSIke2llfSI7YH0sQj1uZXcgUC5kZWZhdWx0O2xldCBnLHk7Qi5hcHBlbmQoImZpbGUiLHVlLGllKTtjb25zdCB4PW51bGw9PT0oTWU9aWUuc3BsaXQoIi4iKS5wb3AoKSl8fHZvaWQgMD09PU1lP3ZvaWQgMDpNZS50b0xvd2VyQ2FzZSgpO2lmKHgpe3RoaXMuYm9vbEV4dGVuc2lvbk1h''@;'; put 'put ''cHx8KCh5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIvdHlwZXMvdHlwZXM/bGltaXQ9OTk5OTk5IixUZSkpLnJlc3VsdC5pdGVtcy5maWx0ZXIoRT0+RS5leHRlbnNpb25zKS5mb3JFYWNoKEU9Pnt2YXIgbTtudWxsPT09KG09RS5leHRlbnNpb25zKXx8dm9pZCAwPT09bXx8bS5mb3JF''@;'; put 'put ''YWNoKEE9Pnt0aGlzLmZpbGVFeHRlbnNpb25NYXAuc2V0KEEse3R5cGVEZWZOYW1lOkUubmFtZSYmRS5uYW1lLnRyaW0oKS5sZW5ndGg/RS5uYW1lLnRyaW0oKTp2b2lkIDAscHJvcGVydGllczpFLnByb3BlcnRpZXN9KX0pfSksdGhpcy5ib29sRXh0ZW5zaW9uTWFwPSEwKTtjb25zdCBUPXRo''@;'; put 'put ''aXMuZmlsZUV4dGVuc2lvbk1hcC5nZXQoeCk7VCYmKGc9VC50eXBlRGVmTmFtZSxULnByb3BlcnRpZXMmJih5PXtuYW1lOmllLHByb3BlcnRpZXM6VC5wcm9wZXJ0aWVzfSkpfWNvbnN0IEM9eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoYC9maWxlcy9maWxlcz9wYXJlbnRGb2xkZXJV''@;'; put 'put ''cmk9JHtfZX0mdHlwZURlZk5hbWU9JHtnPz8iZmlsZSJ9I3Jhd1VwbG9hZGAsQixUZSwibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9IitCLl9ib3VuZGFyeSxaZSk7aWYoeSl0cnl7Y29uc3QgVD17QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIiwiSWYtTWF0Y2giOiIqIn0sSD1DLnJl''@;'; put 'put ''c3VsdC5saW5rcy5maWx0ZXIoaj0+IlBBVENIIj09ai5tZXRob2QmJiJwYXRjaCI9PWoucmVsKVswXS51cmk7cmV0dXJuKHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wYXRjaChgJHtIfWAseSxUZSxUKSkucmVzdWx0fWNhdGNoKFQpe3Rocm93IG5ldyBFcnJvcihgRXJyb3IgcGF0Y2hpbmcg''@;'; put 'put ''ZmlsZSAke2llfS5cbiR7VC5tZXNzYWdlfWApfXJldHVybiBDLnJlc3VsdH0pfWNyZWF0ZUZvbGRlcihpZSx1ZSxnZSxfZSxUZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IE1lPUkubG9nZ2VyfHxfO2lmKCF1ZSYmIWdlKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''UGF0aCBvciBVUkkgb2YgdGhlIHBhcmVudCBmb2xkZXIgaXMgcmVxdWlyZWQuIik7aWYoIWdlJiZ1ZSlpZihnZT15aWVsZCB0aGlzLmdldEZvbGRlclVyaSh1ZSxfZSkpe2lmKFRlKXtjb25zdCBCPXVlKyIvIitpZTsoeWllbGQgdGhpcy5nZXRGb2xkZXJVcmkoQixfZSkpJiYoeWllbGQgdGhp''@;'; put 'put ''cy5kZWxldGVGb2xkZXIodWUrIi8iK2llLF9lKSl9fWVsc2V7TWUuaW5mbyhgUGFyZW50IGZvbGRlciBhdCBwYXRoICcke3VlfScgaXMgbm90IHByZXNlbnQuYCk7Y29uc3QgQj11ZS5zdWJzdHJpbmcoMCx1ZS5sYXN0SW5kZXhPZigiLyIpKSxnPWAke3VlLnNwbGl0KCIvIikucG9wKCl9YDtp''@;'; put 'put ''ZigiIj09PUIpdGhyb3cgbmV3IEYuUm9vdEZvbGRlck5vdEZvdW5kRXJyb3IodWUsdGhpcy5zZXJ2ZXJVcmwsX2UpO01lLmluZm8oYENyZWF0aW5nIHBhcmVudCBmb2xkZXI6XG4nJHtnfScgaW4gJyR7Qn0nYCk7Y29uc3QgeT15aWVsZCB0aGlzLmNyZWF0ZUZvbGRlcihnLEIsdm9pZCAwLF9l''@;'; put 'put ''KTtNZS5pbmZvKGBQYXJlbnQgZm9sZGVyICcke2d9JyBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY3JlYXRlZC5gKSxnZT1gL2ZvbGRlcnMvZm9sZGVycy8ke3kuaWR9YH1jb25zdHtyZXN1bHQ6WmV9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KGAvZm9sZGVycy9mb2xkZXJzP3BhcmVu''@;'; put 'put ''dEZvbGRlclVyaT0ke2dlfWAse25hbWU6aWUsdHlwZToiZm9sZGVyIn0sX2UpLmNhdGNoKEI9Pntjb25zdHttZXNzYWdlOmcscmVzcG9uc2U6eX09QjtpZihnJiZ5JiZ5LmRhdGEmJnkuZGF0YS5tZXNzYWdlKXtjb25zdHtzdGF0dXM6eH09eSx7bWVzc2FnZTpDfT15LmRhdGEsVD1bZyxDXS5t''@;'; put 'put ''YXAoaj0+L1wuJC8udGVzdChqKT9qOmAke2p9LmApO3Rocm93IVRlJiY0MDk9PT14JiZULnB1c2goJ1RvIG92ZXJyaWRlLCBwbGVhc2Ugc2V0ICJpc0ZvcmNlZCIgdG8gInRydWUiLicpLFQuam9pbigiICIpfXRocm93IEJ9KTtyZXR1cm4geWllbGQgdGhpcy5wb3B1bGF0ZUZvbGRlck1hcChg''@;'; put 'put ''JHt1ZX0vJHtpZX1gLF9lKSxaZX0pfWNyZWF0ZUpvYkRlZmluaXRpb24oaWUsdWUsZ2UsX2UsVGUpe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZighZ2UmJiFfZSl0aHJvdyBuZXcgRXJyb3IoIlBhdGggdG8gb3IgVVJJIG9mIHRoZSBwYXJlbnQgZm9sZGVyIGlz''@;'; put 'put ''IHJlcXVpcmVkLiIpO3JldHVybiFfZSYmZ2UmJihfZT15aWVsZCB0aGlzLmdldEZvbGRlclVyaShnZSxUZSkpLHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KGAke3RoaXMuc2VydmVyVXJsfS9qb2JEZWZpbml0aW9ucy9kZWZpbml0aW9ucz9wYXJlbnRGb2xkZXJVcmk9JHtfZX1gLHtu''@;'; put 'put ''YW1lOmllLHBhcmFtZXRlcnM6W3tuYW1lOiJfYWRkamVzYmVnaW5lbmRtYWNyb3MiLHR5cGU6IkNIQVJBQ1RFUiIsZGVmYXVsdFZhbHVlOiJmYWxzZSJ9XSx0eXBlOiJDb21wdXRlIixjb2RlOnVlfSxUZSl9KX1nZXRBdXRoQ29kZShpZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1''@;'; put 'put ''bmN0aW9uKigpe2NvbnN0IHVlPWAke3RoaXMuc2VydmVyVXJsfS9TQVNMb2dvbi9vYXV0aC9hdXRob3JpemU/Y2xpZW50X2lkPSR7aWV9JnJlc3BvbnNlX3R5cGU9Y29kZWA7cmV0dXJuIHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQodWUsdm9pZCAwLCJ0ZXh0L3BsYWluIikudGhlbihf''@;'; put 'put ''ZT0+X2UucmVzdWx0KS50aGVuKF9lPT5wKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgVGU9IiI7aWYoKDAsTi5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZCkoX2UpKXtjb25zdCBaZT0oeWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmF1dGhvcml6ZShfZSkpLnNwbGl0KCI8Ym9k''@;'; put 'put ''eT4iKVsxXS5zcGxpdCgiPC9ib2R5PiIpWzBdLEI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIEIuaW5uZXJIVE1MPVplLFRlPUIucXVlcnlTZWxlY3RvcigiLmluZm9ib3ggaDQiKS5pbm5lclRleHQsVGV9e2NvbnN0IE1lPV9lLnNwbGl0KCI8Ym9keT4iKVsxXS5zcGxp''@;'; put 'put ''dCgiPC9ib2R5PiIpWzBdLFplPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBaZS5pbm5lckhUTUw9TWUsWmUmJihUZT1aZS5xdWVyeVNlbGVjdG9yKCIuaW5mb2JveCBoNCIpLmlubmVyVGV4dCksVGV9fSkpLmNhdGNoKCgpPT5udWxsKX0pfWdldEFjY2Vzc1Rva2VuKGll''@;'; put 'put ''LHVlLGdlKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKDAscS5nZXRBY2Nlc3NUb2tlbkZvclZpeWEpKHRoaXMucmVxdWVzdENsaWVudCxpZSx1ZSxnZSl9KX1yZWZyZXNoVG9rZW5zKGllLHVlLGdlKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAs''@;'; put 'put ''ZnVuY3Rpb24qKCl7cmV0dXJuKDAsZWUucmVmcmVzaFRva2Vuc0ZvclZpeWEpKHRoaXMucmVxdWVzdENsaWVudCxpZSx1ZSxnZSl9KX1kZWxldGVDbGllbnQoaWUsdWUpe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBnZT10aGlzLnNlcnZlclVybCtgL29h''@;'; put 'put ''dXRoL2NsaWVudHMvJHtpZX1gO3JldHVybih5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZGVsZXRlKGdlLHVlKSkucmVzdWx0fSl9ZXhlY3V0ZUNvbXB1dGVKb2IoaWUsdWUsZ2UsX2UsVGUsTWU9ITAsWmU9ITEsQixnPSExLHkpe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlv''@;'; put 'put ''biooKXtsZXQgeD0oVGV8fHt9KS5hY2Nlc3NfdG9rZW47aWYoVGUmJih7YWNjZXNzX3Rva2VuOnh9PXlpZWxkKDAsWi5nZXRUb2tlbnMpKHRoaXMucmVxdWVzdENsaWVudCxUZSkpLCgwLHcuaXNSZWxhdGl2ZVBhdGgpKGllKSYmIXRoaXMucm9vdEZvbGRlck5hbWUpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJSZWxhdGl2ZSBwYXRocyBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IHNwZWNpZnlpbmcgYSByb290IGZvbGRlciBuYW1lIik7Y29uc3QgQz1pZS5zcGxpdCgiLyIpLFQ9Qy5wb3AoKSxIPUMuam9pbigiLyIpLGo9KDAsdy5pc1JlbGF0aXZlUGF0aCkoaWUpP2Ake3RoaXMucm9vdEZvbGRlck5h''@;'; put 'put ''bWV9LyR7SH1gOkg7eWllbGQgdGhpcy5wb3B1bGF0ZUZvbGRlck1hcChqLHgpLmNhdGNoKG5lPT57dGhyb3coMCxPLnByZWZpeE1lc3NhZ2UpKG5lLCJFcnJvciB3aGlsZSBwb3B1bGF0aW5nIGZvbGRlciBtYXAuICIpfSk7Y29uc3QgRT10aGlzLmZvbGRlck1hcC5nZXQoaik7aWYoIUUpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKGBUaGUgZm9sZGVyICcke2p9JyB3YXMgbm90IGZvdW5kIG9uICcke3RoaXMuc2VydmVyVXJsfSdgKTtjb25zdCBtPUU/LmZpbmQobmU9Pm5lLm5hbWU9PT1UKTtpZighbSl0aHJvdyBuZXcgRXJyb3IoIkpvYiB3YXMgbm90IGZvdW5kLiIpO2xldCBBPW0/LmNvZGU7aWYo''@;'; put 'put ''IUEpe2NvbnN0IG5lPW0/LmxpbmtzLmZpbmQoQ2U9PiJnZXRSZXNvdXJjZSI9PT1DZS5yZWwpO2lmKCFuZSl0aHJvdyBuZXcgRXJyb3IoIlVSSSBvZiBqb2IgZGVmaW5pdGlvbiB3YXMgbm90IGZvdW5kLiIpO2NvbnN0e3Jlc3VsdDpzZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChg''@;'; put 'put ''JHt0aGlzLnNlcnZlclVybH0ke25lLmhyZWZ9YCx4KS5jYXRjaChDZT0+e3Rocm93KDAsTy5wcmVmaXhNZXNzYWdlKShDZSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBqb2IgZGVmaW5pdGlvbi4gIil9KTtBPXNlLmNvZGUsbS5jb2RlPUF9QXx8KEE9IiIpO2NvbnN0IGFlPUEucmVwbGFjZSgvXHJc''@;'; put 'put ''bi9nLCJcbiIpLnNwbGl0KCJcbiIpO3JldHVybiB5aWVsZCB0aGlzLmV4ZWN1dGVTY3JpcHQoaWUsYWUsdWUsVGUsX2UsZ2UsWmUsTWUsQixnLHkpfSl9ZXhlY3V0ZUpvYihpZSx1ZSxnZSxfZSxUZSl7dmFyIE1lLFplLEI7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigp''@;'; put 'put ''e2xldCBnPShUZXx8e30pLmFjY2Vzc190b2tlbjtpZihUZSYmKHthY2Nlc3NfdG9rZW46Z309eWllbGQoMCxaLmdldFRva2VucykodGhpcy5yZXF1ZXN0Q2xpZW50LFRlKSksKDAsdy5pc1JlbGF0aXZlUGF0aCkoaWUpJiYhdGhpcy5yb290Rm9sZGVyTmFtZSl0aHJvdyBuZXcgRXJyb3IoIlJl''@;'; put 'put ''bGF0aXZlIHBhdGhzIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgc3BlY2lmeWluZyBhIHJvb3QgZm9sZGVyIG5hbWUuIik7Y29uc3QgeT1pZS5zcGxpdCgiLyIpLHg9eS5wb3AoKSxDPXkuam9pbigiLyIpLFQ9KDAsdy5pc1JlbGF0aXZlUGF0aCkoaWUpP2Ake3RoaXMucm9vdEZvbGRlck5hbWV9''@;'; put 'put ''LyR7Q31gOkM7eWllbGQgdGhpcy5wb3B1bGF0ZUZvbGRlck1hcChULGcpO2NvbnN0IEg9dGhpcy5mb2xkZXJNYXAuZ2V0KFQpO2lmKCFIKXRocm93IG5ldyBFcnJvcihgVGhlIGZvbGRlciAnJHtUfScgd2FzIG5vdCBmb3VuZCBvbiAnJHt0aGlzLnNlcnZlclVybH0nLmApO2NvbnN0IGo9SD8u''@;'; put 'put ''ZmluZChrZT0+a2UubmFtZT09PXgpO2xldCBFPVtdO2lmKF9lJiZPYmplY3Qua2V5cyhfZSkubGVuZ3RoJiYoRT15aWVsZCB0aGlzLnVwbG9hZFRhYmxlcyhfZSxnKSksIWopdGhyb3cgbmV3IEVycm9yKCJKb2Igd2FzIG5vdCBmb3VuZC4iKTtjb25zdCBtPW51bGw9PT0oTWU9aj8ubGlua3Mu''@;'; put 'put ''ZmluZChrZT0+ImdldFJlc291cmNlIj09PWtlLnJlbCkpfHx2b2lkIDA9PT1NZT92b2lkIDA6TWUuaHJlZix7cmVzdWx0OkF9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHttfWAsZyksYWU9e19jb250ZXh0TmFtZTp1ZSxfcHJvZ3JhbTpgJHtUfS8k''@;'; put 'put ''e3h9YCxfd2ViaW5fZmlsZV9jb3VudDpFLmxlbmd0aCxfT01JVEpTT05MSVNUSU5HOiEwLF9PTUlUSlNPTkxPRzohMCxfb21pdFNlc3Npb25SZXN1bHRzOiExLF9PTUlUVEVYVExJU1RJTkc6ITAsX09NSVRURVhUTE9HOiEwfTtnZSYmKGFlLl9PTUlUVEVYVExPRz0iZmFsc2UiLGFlLl9vbWl0''@;'; put 'put ''U2Vzc2lvblJlc3VsdHM9ImZhbHNlIixhZS5fREVCVUc9MTMxKSxFLmZvckVhY2goKGtlLEhlKT0+e2FlW2Bfd2ViaW5fZmlsZXVyaSR7SGUrMX1gXT1gL2ZpbGVzL2ZpbGVzLyR7a2UuZmlsZS5pZH1gLGFlW2Bfd2ViaW5fbmFtZSR7SGUrMX1gXT1rZS50YWJsZU5hbWV9KTtjb25zdCBuZT17''@;'; put 'put ''bmFtZTpgZXhlYy0ke3h9YCxkZXNjcmlwdGlvbjoiUG93ZXJlZCBieSBTQVNqcyIsam9iRGVmaW5pdGlvbjpBLGFyZ3VtZW50czphZX0se3Jlc3VsdDpzZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoYCR7dGhpcy5zZXJ2ZXJVcmx9L2pvYkV4ZWN1dGlvbi9qb2JzP19hY3Rpb249''@;'; put 'put ''d2FpdGAsbmUsZyksQ2U9eWllbGQgdGhpcy5wb2xsSm9iU3RhdGUoc2UsVGUpLmNhdGNoKGtlPT57dGhyb3coMCxPLnByZWZpeE1lc3NhZ2UpKGtlLCJFcnJvciB3aGlsZSBwb2xsaW5nIGpvYiBzdGF0dXMuICIpfSkse3Jlc3VsdDpVZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChg''@;'; put 'put ''JHt0aGlzLnNlcnZlclVybH0vam9iRXhlY3V0aW9uL2pvYnMvJHtzZS5pZH1gLGcpO2xldCBKZSxpdDtjb25zdCB4ZT1VZS5yZXN1bHRzWyJfd2Vib3V0Lmpzb24iXSx5ZT1VZS5saW5rcy5maW5kKGtlPT4ibG9nIj09PWtlLnJlbCk7aWYoeGUmJihKZT15aWVsZCB0aGlzLnJlcXVlc3RDbGll''@;'; put 'put ''bnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7eGV9L2NvbnRlbnRgLGcsInRleHQvcGxhaW4iKSksZ2UmJnllJiYoaXQ9eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0ke3llLmhyZWZ9L2NvbnRlbnRgLGcpLnRoZW4oa2U9PmtlLnJlc3VsdC5pdGVtcy5t''@;'; put 'put ''YXAoSGU9PkhlLmxpbmUpLmpvaW4oIlxuIikpKSwiZmFpbGVkIj09PUNlKXRocm93IG5ldyBGLkpvYkV4ZWN1dGlvbkVycm9yKG51bGw9PT0oWmU9VWUuZXJyb3IpfHx2b2lkIDA9PT1aZT92b2lkIDA6WmUuZXJyb3JDb2RlLG51bGw9PT0oQj1VZS5lcnJvcil8fHZvaWQgMD09PUI/dm9pZCAw''@;'; put 'put ''OkIubWVzc2FnZSxpdCk7Y29uc3QgS2U9e3Jlc3VsdDpKZT8ucmVzdWx0LGxvZzppdH0se2Vycm9yOmplfT1VZTtyZXR1cm4gamUmJihLZS5lcnJvcj1qZSksS2V9KX1wb3B1bGF0ZUZvbGRlck1hcChpZSx1ZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0''@;'; put 'put ''IGdlPSgwLHcuaXNSZWxhdGl2ZVBhdGgpKGllKT9gJHt0aGlzLnJvb3RGb2xkZXJOYW1lfS8ke2llfWA6aWU7aWYodGhpcy5mb2xkZXJNYXAuZ2V0KGdlKSlyZXR1cm47Y29uc3QgX2U9Ii9mb2xkZXJzL2ZvbGRlcnMvQGl0ZW0/cGF0aD0iK2dlLHtyZXN1bHQ6VGV9PXlpZWxkIHRoaXMucmVx''@;'; put 'put ''dWVzdENsaWVudC5nZXQoYCR7X2V9YCx1ZSkuY2F0Y2goQj0+e3Rocm93KDAsTy5wcmVmaXhNZXNzYWdlKShCLCJFcnJvciB3aGlsZSBnZXR0aW5nIGZvbGRlci4gIil9KTtpZighVGUpdGhyb3cgbmV3IEVycm9yKGBUaGUgcGF0aCAke2dlfSBkb2VzIG5vdCBleGlzdCBvbiAke3RoaXMuc2Vy''@;'; put 'put ''dmVyVXJsfWApO2NvbnN0e3Jlc3VsdDpNZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgL2ZvbGRlcnMvZm9sZGVycy8ke1RlLmlkfS9tZW1iZXJzP2xpbWl0PSR7VGUubWVtYmVyQ291bnQ8NTAwPzUwMDpUZS5tZW1iZXJDb3VudH1gLHVlKS5jYXRjaChCPT57dGhyb3coMCxPLnBy''@;'; put 'put ''ZWZpeE1lc3NhZ2UpKEIsIkVycm9yIHdoaWxlIGdldHRpbmcgbWVtYmVycy4gIil9KTt0aGlzLmZvbGRlck1hcC5zZXQoZ2UsTWUuaXRlbXMpfSl9cG9sbEpvYlN0YXRlKGllLHVlLGdlKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKDAsSy5wb2xsSm9i''@;'; put 'put ''U3RhdGUpKHRoaXMucmVxdWVzdENsaWVudCxpZSx0aGlzLmRlYnVnLHVlLGdlKX0pfXVwbG9hZFRhYmxlcyhpZSx1ZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybigwLFkudXBsb2FkVGFibGVzKSh0aGlzLnJlcXVlc3RDbGllbnQsaWUsdWUpfSl9Z2V0''@;'; put 'put ''Rm9sZGVyRGV0YWlscyhpZSx1ZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IGdlPSgwLHcuaXNVcmkpKGllKT9pZTpgL2ZvbGRlcnMvZm9sZGVycy9AaXRlbT9wYXRoPSR7aWV9YCx7cmVzdWx0Ol9lfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0''@;'; put 'put ''KGAke3RoaXMuc2VydmVyVXJsfSR7Z2V9YCx1ZSkuY2F0Y2goVGU9PntpZihUZSBpbnN0YW5jZW9mIEYuQ2VydGlmaWNhdGVFcnJvcil0aHJvdyBUZTtyZXR1cm57cmVzdWx0Om51bGx9fSk7aWYoX2UpcmV0dXJuIF9lfSl9Z2V0Rm9sZGVyVXJpKGllLHVlKXtyZXR1cm4gcCh0aGlzLHZvaWQg''@;'; put 'put ''MCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgZ2U9eWllbGQgdGhpcy5nZXRGb2xkZXJEZXRhaWxzKGllLHVlKTtpZihnZSlyZXR1cm5gL2ZvbGRlcnMvZm9sZGVycy8ke2dlLmlkfWB9KX1nZXRGaWxlVXJpKGllLHVlLGdlKXt2YXIgX2U7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1''@;'; put 'put ''bmN0aW9uKigpe2NvbnN0IFRlPXlpZWxkIHRoaXMubGlzdEZvbGRlcihpZSxnZSwxZTMse3JldHVybkRldGFpbHM6ITB9KS5jYXRjaChaZT0+e3Rocm93KDAsTy5wcmVmaXhNZXNzYWdlKShaZSxgRXJyb3Igd2hpbGUgbGlzdGluZyBmb2xkZXI6ICR7aWV9LiBgKX0pO2lmKCFUZXx8IVRlLmxl''@;'; put 'put ''bmd0aCl0aHJvdyBuZXcgRXJyb3IoYE5vIG1lbWJlcnMgZm91bmQgaW4gZm9sZGVyOiAke2llfWApO2NvbnN0IE1lPW51bGw9PT0oX2U9VGUuZmluZChaZT0+WmUubmFtZT09PXVlKSl8fHZvaWQgMD09PV9lP3ZvaWQgMDpfZS51cmk7aWYoIU1lKXRocm93IG5ldyBFcnJvcihgRmlsZSAke3Vl''@;'; put 'put ''fSBub3QgZm91bmQgaW4gZm9sZGVyOiAke2llfWApO3JldHVybiBNZX0pfWdldFJlY3ljbGVCaW5VcmkoaWUpe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6Z2V9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJV''@;'; put 'put ''cmx9L2ZvbGRlcnMvZm9sZGVycy9AbXlSZWN5Y2xlQmluYCxpZSkuY2F0Y2goX2U9PntpZihfZSBpbnN0YW5jZW9mIEYuQ2VydGlmaWNhdGVFcnJvcil0aHJvdyBfZTtyZXR1cm57cmVzdWx0Om51bGx9fSk7aWYoZ2UpcmV0dXJuYC9mb2xkZXJzL2ZvbGRlcnMvJHtnZS5pZH1gfSl9Z2V0Q29t''@;'; put 'put ''cHV0ZUNvbnRleHRCeU5hbWUoaWUsdWUpe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShpZSx1ZSl9KX1nZXRDb21wdXRlQ29udGV4dEJ5SWQoaWUsdWUpe3JldHVy''@;'; put 'put ''biBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5nZXRDb21wdXRlQ29udGV4dEJ5SWQoaWUsdWUpfSl9bGlzdEZvbGRlcihpZSx1ZSxnZT0yMCxfZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigp''@;'; put 'put ''e2NvbnN0IFRlPSgwLHcuaXNVcmkpKGllKT9pZTp5aWVsZCB0aGlzLmdldEZvbGRlclVyaShpZSx1ZSkse3Jlc3VsdDpNZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0ke1RlfS9tZW1iZXJzP2xpbWl0PSR7Z2V9YCx1ZSk7bGV0IFplPVtdO3JldHVy''@;'; put 'put ''biBNZSYmTWUuaXRlbXMmJihaZT1fZT8ucmV0dXJuRGV0YWlscz9NZS5pdGVtczpNZS5pdGVtcy5tYXAoQj0+Qi5uYW1lKSksWmV9KX1tb3ZlRm9sZGVyKGllLHVlLGdlLF9lKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVGU9aWUuc3BsaXQoIi8iKS5w''@;'; put 'put ''b3AoKTtpZih5aWVsZCB0aGlzLmdldEZvbGRlckRldGFpbHModWUsX2UpKWdlPVRlO2Vsc2V7bGV0IHg9dWUuc3BsaXQoIi8iKTt4LnNwbGljZSh4Lmxlbmd0aC0xLDEpLHVlPXguam9pbigiLyIpfWNvbnN0IFplPXlpZWxkIHRoaXMuZ2V0Rm9sZGVyVXJpKGllLF9lKSxCPXlpZWxkIHRoaXMu''@;'; put 'put ''Z2V0Rm9sZGVyVXJpKHVlLF9lKTtpZighWmUpcmV0dXJuO2NvbnN0IGc9WmU/LnNwbGl0KCIvIikucG9wKCkse3Jlc3VsdDp5fT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucGF0Y2goYCR7dGhpcy5zZXJ2ZXJVcmx9JHtaZX1gLHtpZDpnLG5hbWU6Z2UscGFyZW50Rm9sZGVyVXJpOkJ9LF9l''@;'; put 'put ''KS5jYXRjaCh4PT57dGhyb3cgeC5jb2RlJiYiRU5PVEZPVU5EIj09PXguY29kZT97Ym9keTp7bWVzc2FnZTpgRm9sZGVyICcke2llLnNwbGl0KCIvIikucG9wKCl9JyB3YXMgbm90IGZvdW5kLmB9fTp4fSk7cmV0dXJuIHl8fHZvaWQgMH0pfWRlbGV0ZUZvbGRlcihpZSx1ZSl7cmV0dXJuIHAo''@;'; put 'put ''dGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IGdlPXlpZWxkIHRoaXMuZ2V0UmVjeWNsZUJpblVyaSh1ZSksX2U9aWUuc3BsaXQoIi8iKS5wb3AoKXx8IiIsVGU9bmV3IERhdGUsWmU9X2UrIiAiK1RlLnRvTG9jYWxlRGF0ZVN0cmluZygpKyIgIitUZS50b0xvY2FsZVRpbWVT''@;'; put 'put ''dHJpbmcoKTtyZXR1cm4geWllbGQgdGhpcy5tb3ZlRm9sZGVyKGllLGdlLFplLHVlKX0pfX19LDU5NTY6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFksVyxxLGVlKXtyZXR1cm4gbmV3KHF8fChxPVByb21pc2UpKShm''@;'; put 'put ''dW5jdGlvbihyZSxpZSl7ZnVuY3Rpb24gdWUoVGUpe3RyeXtfZShlZS5uZXh0KFRlKSl9Y2F0Y2goTWUpe2llKE1lKX19ZnVuY3Rpb24gZ2UoVGUpe3RyeXtfZShlZS50aHJvdyhUZSkpfWNhdGNoKE1lKXtpZShNZSl9fWZ1bmN0aW9uIF9lKFRlKXtUZS5kb25lP3JlKFRlLnZhbHVlKTpmdW5j''@;'; put 'put ''dGlvbiBKKHJlKXtyZXR1cm4gcmUgaW5zdGFuY2VvZiBxP3JlOm5ldyBxKGZ1bmN0aW9uKGllKXtpZShyZSl9KX0oVGUudmFsdWUpLnRoZW4odWUsZ2UpfV9lKChlZT1lZS5hcHBseShZLFd8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3Zh''@;'; put 'put ''bHVlOiEwfSk7Y29uc3QgXz1iKDU5MjgpLHA9YigxMjMwKSxWPWIoOTgyMSksdz1iKDgzMDYpLFA9YigzNDY3KSxGPWIoMTUyNyksUj1iKDM5MDApLHo9Yig0NTg4KSxOPWIoMzYwMiksTz1iKDgyMTcpLEs9e3NlcnZlclVybDoiIixwYXRoU0FTSlM6Ii9TQVNqc0FwaS9zdHAvZXhlY3V0ZSIs''@;'; put 'put ''cGF0aFNBUzk6Ii9TQVNTdG9yZWRQcm9jZXNzL2RvIixwYXRoU0FTVml5YToiL1NBU0pvYkV4ZWN1dGlvbiIsYXBwTG9jOiIvUHVibGljL3NlZWRhcHAiLHNlcnZlclR5cGU6Ui5TZXJ2ZXJUeXBlLlNhc1ZpeWEsZGVidWc6ITEsY29udGV4dE5hbWU6IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1''@;'; put 'put ''dGUgY29udGV4dCIsdXNlQ29tcHV0ZUFwaTpudWxsLGxvZ2luTWVjaGFuaXNtOnAuTG9naW5NZWNoYW5pc20uRGVmYXVsdH07WC5kZWZhdWx0PWNsYXNzIFp7Y29uc3RydWN0b3IoVyl7dGhpcy5zYXNqc0NvbmZpZz1uZXcgcC5TQVNqc0NvbmZpZyx0aGlzLmpvYnNQYXRoPSIiLHRoaXMuc2Fz''@;'; put 'put ''Vml5YUFwaUNsaWVudD1udWxsLHRoaXMuc2FzOUFwaUNsaWVudD1udWxsLHRoaXMuc2FzSlNBcGlDbGllbnQ9bnVsbCx0aGlzLmZpbGVVcGxvYWRlcj1udWxsLHRoaXMuYXV0aE1hbmFnZXI9bnVsbCx0aGlzLnJlcXVlc3RDbGllbnQ9bnVsbCx0aGlzLndlYkpvYkV4ZWN1dG9yPW51bGwsdGhp''@;'; put 'put ''cy5zYXNqc0pvYkV4ZWN1dG9yPW51bGwsdGhpcy5jb21wdXRlSm9iRXhlY3V0b3I9bnVsbCx0aGlzLmplc0pvYkV4ZWN1dG9yPW51bGwsdGhpcy5zYXM5Sm9iRXhlY3V0b3I9bnVsbCx0aGlzLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cz0oKT0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24q''@;'; put 'put ''KCl7dmFyIHEsZWUsSixyZSxpZTt5aWVsZCBudWxsPT09KHE9dGhpcy53ZWJKb2JFeGVjdXRvcil8fHZvaWQgMD09PXE/dm9pZCAwOnEucmVzZW5kV2FpdGluZ1JlcXVlc3RzKCkseWllbGQgbnVsbD09PShlZT10aGlzLmNvbXB1dGVKb2JFeGVjdXRvcil8fHZvaWQgMD09PWVlP3ZvaWQgMDpl''@;'; put 'put ''ZS5yZXNlbmRXYWl0aW5nUmVxdWVzdHMoKSx5aWVsZCBudWxsPT09KEo9dGhpcy5qZXNKb2JFeGVjdXRvcil8fHZvaWQgMD09PUo/dm9pZCAwOkoucmVzZW5kV2FpdGluZ1JlcXVlc3RzKCkseWllbGQgbnVsbD09PShyZT10aGlzLmZpbGVVcGxvYWRlcil8fHZvaWQgMD09PXJlP3ZvaWQgMDpy''@;'; put 'put ''ZS5yZXNlbmRXYWl0aW5nUmVxdWVzdHMoKSx5aWVsZCBudWxsPT09KGllPXRoaXMuc2FzanNKb2JFeGVjdXRvcil8fHZvaWQgMD09PWllP3ZvaWQgMDppZS5yZXNlbmRXYWl0aW5nUmVxdWVzdHMoKX0pLHRoaXMuc2V0VmVyYm9zZU1vZGU9cT0+e3ZhciBlZTtudWxsPT09KGVlPXRoaXMucmVx''@;'; put 'put ''dWVzdENsaWVudCl8fHZvaWQgMD09PWVlfHxlZS5zZXRWZXJib3NlTW9kZShxKX0sdGhpcy5zYXNqc0NvbmZpZz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sSyksVyksdGhpcy5zZXR1cENvbmZpZ3VyYXRpb24oKX1nZXRDc3JmVG9rZW4oVz0iZ2VuZXJhbCIpe3ZhciBxO3JldHVy''@;'; put 'put ''biBudWxsPT09KHE9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09cT92b2lkIDA6cS5nZXRDc3JmVG9rZW4oVyl9ZXhlY3V0ZVNjcmlwdCh7bGluZXNPZkNvZGU6VyxmaWxlTmFtZTpxLGNvbnRleHROYW1lOmVlLHJ1blRpbWU6SixhdXRoQ29uZmlnOnJlLGF1dGhDb25maWdTYXM5Omll''@;'; put 'put ''LGRlYnVnOnVlfSl7dmFyIGdlLF9lO3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZih0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJleGVjdXRlU2NyaXB0IixbUi5TZXJ2ZXJUeXBlLlNhczksUi5TZXJ2ZXJUeXBlLlNhc2pzLFIuU2VydmVyVHlwZS5TYXNWaXlhXSks''@;'; put 'put ''dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ui5TZXJ2ZXJUeXBlLlNhczkpe2lmKCFpZSl0aHJvdyBuZXcgRXJyb3IoIkF1dGggY29uZmlnIGZvciBzYXM5IGlzIG5vdCBwcm92aWRlZCIpO3JldHVybiB5aWVsZCBudWxsPT09KGdlPXRoaXMuc2FzOUFwaUNsaWVudCl8fHZvaWQgMD09''@;'; put 'put ''PWdlP3ZvaWQgMDpnZS5leGVjdXRlU2NyaXB0KFcsaWUudXNlck5hbWUsaWUucGFzc3dvcmQpfWlmKHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVIuU2VydmVyVHlwZS5TYXNqcylyZXR1cm4geWllbGQgbnVsbD09PShfZT10aGlzLnNhc0pTQXBpQ2xpZW50KXx8dm9pZCAwPT09X2U/''@;'; put 'put ''dm9pZCAwOl9lLmV4ZWN1dGVTY3JpcHQoVy5qb2luKCJcbiIpLEoscmUpO2lmKHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVIuU2VydmVyVHlwZS5TYXNWaXlhKXtpZighKGVlPWVlfHx0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lKSl0aHJvdyBuZXcgRXJyb3IoIkNvbnRleHQg''@;'; put 'put ''bmFtZSBpcyB1bmRlZmluZWQuIFBsZWFzZSBzZXQgYSBgY29udGV4dE5hbWVgIGluIHlvdXIgU0FTanMgb3Igb3ZlcnJpZGUgY29uZmlnLiIpO2lmKCFxKXRocm93IG5ldyBFcnJvcigiRmlsZSBuYW1lIGlzIHJlcXVpcmVkIGluIGNhc2Ugb2YgU0FTIFZJWUEuIFBsZWFzZSBwcm92aWRlIGEg''@;'; put 'put ''YGZpbGVOYW1lYC4iKTtyZXR1cm4geWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmV4ZWN1dGVTY3JpcHQocSxXLGVlLHJlLG51bGwsdWV8fHRoaXMuc2FzanNDb25maWcuZGVidWcpfX0pfWV4ZWN1dGVKb2IoVyxxLGVlKXt2YXIgSjtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVu''@;'; put 'put ''Y3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImV4ZWN1dGVTY3JpcHQiLFtSLlNlcnZlclR5cGUuU2FzanNdKSx5aWVsZCBudWxsPT09KEo9dGhpcy5zYXNKU0FwaUNsaWVudCl8fHZvaWQgMD09PUo/dm9pZCAwOkouZXhlY3V0ZUpvYihXLHEsZWUpfSl9Z2V0Q29tcHV0''@;'; put 'put ''ZUNvbnRleHRzKFcpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0Q29tcHV0ZUNvbnRleHRzIixbUi5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0Q29tcHV0''@;'; put 'put ''ZUNvbnRleHRzKFcpfSl9Z2V0TGF1bmNoZXJDb250ZXh0cyhXKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldExhdW5jaGVyQ29udGV4dHMiLFtSLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMu''@;'; put 'put ''c2FzVml5YUFwaUNsaWVudC5nZXRMYXVuY2hlckNvbnRleHRzKFcpfSl9Z2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cygpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzIixbUi5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx0aGlzLnNhc1ZpeWFB''@;'; put 'put ''cGlDbGllbnQuZ2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cygpfWdldEV4ZWN1dGFibGVDb250ZXh0cyhXKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldEV4ZWN1dGFibGVDb250ZXh0cyIsW1IuU2VydmVy''@;'; put 'put ''VHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldEV4ZWN1dGFibGVDb250ZXh0cyhXKX0pfWNyZWF0ZUNvbXB1dGVDb250ZXh0KFcscSxlZSxKLHJlLGllKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRo''@;'; put 'put ''b2RTdXBwb3J0ZWQoImNyZWF0ZUNvbXB1dGVDb250ZXh0IixbUi5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3JlYXRlQ29tcHV0ZUNvbnRleHQoVyxxLGVlLEoscmUsaWUpfSl9Y3JlYXRlTGF1bmNoZXJDb250ZXh0KFcscSxlZSxKKXtyZXR1cm4g''@;'; put 'put ''SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImNyZWF0ZUxhdW5jaGVyQ29udGV4dCIsW1IuU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZUxhdW5jaGVyQ29udGV4dChXLHEs''@;'; put 'put ''ZWUsSil9KX1lZGl0Q29tcHV0ZUNvbnRleHQoVyxxLGVlKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImVkaXRDb21wdXRlQ29udGV4dCIsW1IuU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNW''@;'; put 'put ''aXlhQXBpQ2xpZW50LmVkaXRDb21wdXRlQ29udGV4dChXLHEsZWUpfSl9ZGVsZXRlQ29tcHV0ZUNvbnRleHQoVyxxKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImRlbGV0ZUNvbXB1dGVDb250ZXh0IixbUi5T''@;'; put 'put ''ZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZGVsZXRlQ29tcHV0ZUNvbnRleHQoVyxxKX0pfWdldENvbXB1dGVDb250ZXh0QnlOYW1lKFcscSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9k''@;'; put 'put ''U3VwcG9ydGVkKCJnZXRDb21wdXRlQ29udGV4dEJ5TmFtZSIsW1IuU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldENvbXB1dGVDb250ZXh0QnlOYW1lKFcscSl9KX1nZXRDb21wdXRlQ29udGV4dEJ5SWQoVyxxKXtyZXR1cm4gSSh0aGlzLHZvaWQg''@;'; put 'put ''MCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldENvbXB1dGVDb250ZXh0QnlJZCIsW1IuU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldENvbXB1dGVDb250ZXh0QnlJZChXLHEpfSl9Y3JlYXRlU2Vz''@;'; put 'put ''c2lvbihXLHEpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiY3JlYXRlU2Vzc2lvbiIsW1IuU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZVNlc3Npb24oVyxx''@;'; put 'put ''KX0pfWNyZWF0ZUZvbGRlcihXLHEsZWUsSixyZSxpZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiByZT95aWVsZCByZS5jcmVhdGVGb2xkZXIoVyxxLGVlLEosaWUpOnlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVGb2xkZXIoVyxxLGVl''@;'; put 'put ''LEosaWUpfSl9Y3JlYXRlRmlsZShXLHEsZWUsSixyZSxpZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBpZT95aWVsZCBpZS5jcmVhdGVGaWxlKFcscSxlZSxKLHJlKTp5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3JlYXRlRmlsZShXLHEsZWUs''@;'; put 'put ''SixyZSl9KX1nZXRGaWxlQ29udGVudChXLHEsZWUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0RmlsZUNvbnRlbnQiLFtSLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNs''@;'; put 'put ''aWVudC5nZXRGaWxlQ29udGVudChXLHEsZWUpfSl9dXBkYXRlRmlsZUNvbnRlbnQoVyxxLGVlLEope3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgidXBkYXRlRmlsZUNvbnRlbnQiLFtSLlNlcnZlclR5cGUuU2Fz''@;'; put 'put ''Vml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC51cGRhdGVGaWxlQ29udGVudChXLHEsZWUsSil9KX1nZXRGb2xkZXIoVyxxKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldEZvbGRlciIsW1Iu''@;'; put 'put ''U2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldEZvbGRlcihXLHEpfSl9ZGVsZXRlRm9sZGVyKFcscSl7dmFyIGVlO3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZGVs''@;'; put 'put ''ZXRlRm9sZGVyIixbUi5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCBudWxsPT09KGVlPXRoaXMuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PWVlP3ZvaWQgMDplZS5kZWxldGVGb2xkZXIoVyxxKX0pfWxpc3RGb2xkZXIoVyxxLGVlLEo9ITEpe3ZhciByZTtyZXR1cm4gSSh0aGlzLHZv''@;'; put 'put ''aWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImxpc3RGb2xkZXIiLFtSLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIG51bGw9PT0ocmU9dGhpcy5zYXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09cmU/dm9pZCAwOnJlLmxpc3RGb2xkZXIo''@;'; put 'put ''VyxxLGVlLHtyZXR1cm5EZXRhaWxzOkp9KX0pfW1vdmVGb2xkZXIoVyxxLGVlLEope3ZhciByZTtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoIm1vdmVGb2xkZXIiLFtSLlNlcnZlclR5cGUuU2FzVml5YV0pLHlp''@;'; put 'put ''ZWxkIG51bGw9PT0ocmU9dGhpcy5zYXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09cmU/dm9pZCAwOnJlLm1vdmVGb2xkZXIoVyxxLGVlLEopfSl9Y3JlYXRlSm9iRGVmaW5pdGlvbihXLHEsZWUsSixyZSxpZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVy''@;'; put 'put ''biB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJjcmVhdGVKb2JEZWZpbml0aW9uIixbUi5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxpZT95aWVsZCBpZS5jcmVhdGVKb2JEZWZpbml0aW9uKFcscSxlZSxKLHJlKTp5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3JlYXRlSm9iRGVmaW5pdGlvbihX''@;'; put 'put ''LHEsZWUsSixyZSl9KX1nZXRBdXRoQ29kZShXKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldEF1dGhDb2RlIixbUi5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQu''@;'; put 'put ''Z2V0QXV0aENvZGUoVyl9KX1nZXRBY2Nlc3NUb2tlbihXLHEsZWUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0QWNjZXNzVG9rZW4iLFtSLlNlcnZlclR5cGUuU2FzVml5YSxSLlNlcnZlclR5cGUuU2Fz''@;'; put 'put ''anNdKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1SLlNlcnZlclR5cGUuU2FzanM/eWllbGQgdGhpcy5zYXNKU0FwaUNsaWVudC5nZXRBY2Nlc3NUb2tlbihXLGVlKTp5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0QWNjZXNzVG9rZW4oVyxxLGVlKX0pfXJlZnJlc2hUb2tl''@;'; put 'put ''bnMoVyxxLGVlKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoInJlZnJlc2hUb2tlbnMiLFtSLlNlcnZlclR5cGUuU2FzVml5YSxSLlNlcnZlclR5cGUuU2FzanNdKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5''@;'; put 'put ''cGU9PT1SLlNlcnZlclR5cGUuU2FzanM/eWllbGQgdGhpcy5zYXNKU0FwaUNsaWVudC5yZWZyZXNoVG9rZW5zKGVlKTp5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQucmVmcmVzaFRva2VucyhXLHEsZWUpfSl9ZGVsZXRlQ2xpZW50KFcscSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAw''@;'; put 'put ''LGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJkZWxldGVDbGllbnQiLFtSLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5kZWxldGVDbGllbnQoVyxxKX0pfWdldFNhc2pzQ29uZmlnKCl7cmV0dXJuIHRoaXMuc2FzanND''@;'; put 'put ''b25maWd9Z2V0VXNlck5hbWUoKXtyZXR1cm4gdGhpcy5hdXRoTWFuYWdlci51c2VyTmFtZX1zZXRTQVNqc0NvbmZpZyhXKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dGhpcy5zYXNqc0NvbmZpZz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5z''@;'; put 'put ''YXNqc0NvbmZpZyksVyksdGhpcy5zZXR1cENvbmZpZ3VyYXRpb24oKX0pfXNldERlYnVnU3RhdGUoVyl7dGhpcy5zYXNqc0NvbmZpZy5kZWJ1Zz1XLHRoaXMuc2FzVml5YUFwaUNsaWVudCYmKHRoaXMuc2FzVml5YUFwaUNsaWVudC5kZWJ1Zz1XKX1jaGVja1Nlc3Npb24oKXtyZXR1cm4gSSh0''@;'; put 'put ''aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuYXV0aE1hbmFnZXIuY2hlY2tTZXNzaW9uKCl9KX1sb2dJbihXLHEsZWUsSj17fSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKHRoaXMuc2FzanNDb25maWcubG9naW5NZWNoYW5pc209''@;'; put 'put ''PT1wLkxvZ2luTWVjaGFuaXNtLkRlZmF1bHQpe2lmKCFXfHwhcSl0aHJvdyBuZXcgRXJyb3IoIkEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGFyZSByZXF1aXJlZCB3aGVuIHVzaW5nIHRoZSBkZWZhdWx0IGxvZ2luIG1lY2hhbmlzbS4iKTtyZXR1cm4gdGhpcy5hdXRoTWFuYWdlci5sb2dJbihX''@;'; put 'put ''LHEpfWlmKHR5cGVvZiB3aW5kb3c+InUiKXRocm93IG5ldyBFcnJvcigiVGhlIHJlZGlyZWN0ZWQgbG9naW4gbWVjaGFuaXNtIGlzIG9ubHkgYXZhaWxhYmxlIGZvciB1c2UgaW4gdGhlIGJyb3dzZXIuIik7cmV0dXJuIHRoaXMuYXV0aE1hbmFnZXIucmVkaXJlY3RlZExvZ0luKEopfSl9bG9n''@;'; put 'put ''T3V0KCl7cmV0dXJuIHRoaXMuYXV0aE1hbmFnZXIubG9nT3V0KCl9dXBsb2FkRmlsZShXLHEsZWUsSj17fSxyZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe0o9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuc2FzanNDb25maWcpLEopO2NvbnN0''@;'; put 'put ''IGllPXtmaWxlczpxLHBhcmFtczplZX07cmV0dXJuIHlpZWxkIHRoaXMuZmlsZVVwbG9hZGVyLmV4ZWN1dGUoVyxpZSxKLHJlKX0pfXJlcXVlc3QoVyxxLGVlPXt9LEoscmUsaWU9W10pe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtlZT1PYmplY3QuYXNzaWduKE9i''@;'; put 'put ''amVjdC5hc3NpZ24oe30sdGhpcy5zYXNqc0NvbmZpZyksZWUpO2NvbnN0IHVlPSgwLF8udmFsaWRhdGVJbnB1dCkocSk7cmV0dXJuIHVlLnN0YXR1cz9lZS5zZXJ2ZXJUeXBlPT09Ui5TZXJ2ZXJUeXBlLlNhc2pzP3lpZWxkIHRoaXMuc2FzanNKb2JFeGVjdXRvci5leGVjdXRlKFcscSxlZSxK''@;'; put 'put ''LHJlLGllKTplZS5zZXJ2ZXJUeXBlPT09Ui5TZXJ2ZXJUeXBlLlNhc1ZpeWEmJm51bGwhPWVlLnVzZUNvbXB1dGVBcGk/ZWUudXNlQ29tcHV0ZUFwaT95aWVsZCB0aGlzLmNvbXB1dGVKb2JFeGVjdXRvci5leGVjdXRlKFcscSxlZSxKLHJlKTooZWUuY29udGV4dE5hbWV8fChlZT1PYmplY3Qu''@;'; put 'put ''YXNzaWduKE9iamVjdC5hc3NpZ24oe30sZWUpLHtjb250ZXh0TmFtZToiU0FTIEpvYiBFeGVjdXRpb24gY29tcHV0ZSBjb250ZXh0In0pKSx5aWVsZCB0aGlzLmplc0pvYkV4ZWN1dG9yLmV4ZWN1dGUoVyxxLGVlLEoscmUsaWUpKTplZS5zZXJ2ZXJUeXBlPT09Ui5TZXJ2ZXJUeXBlLlNhczkm''@;'; put 'put ''JmVlLnVzZXJuYW1lJiZlZS5wYXNzd29yZD95aWVsZCB0aGlzLnNhczlKb2JFeGVjdXRvci5leGVjdXRlKFcscSxlZSk6eWllbGQgdGhpcy53ZWJKb2JFeGVjdXRvci5leGVjdXRlKFcscSxlZSxKLHJlLGllKTpQcm9taXNlLnJlamVjdChuZXcgcC5FcnJvclJlc3BvbnNlKHVlLm1zZykpfSl9''@;'; put 'put ''ZGVwbG95U2VydmljZVBhY2soVyxxLGVlLEoscmU9ITEpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJkZXBsb3lTZXJ2aWNlUGFjayIsW1IuU2VydmVyVHlwZS5TYXNWaXlhXSk7bGV0IGllPW51bGw7aWYoZWV8fHEpZWV8''@;'; put 'put ''fChlZT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCkscXx8KHE9dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2MpLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVIuU2VydmVyVHlwZS5TYXNWaXlhPyhpZT1uZXcgVi5TQVNWaXlhQXBpQ2xpZW50KGVlLHEsdGhpcy5zYXNqc0NvbmZpZy5j''@;'; put 'put ''b250ZXh0TmFtZSx0aGlzLnJlcXVlc3RDbGllbnQpLGllLmRlYnVnPXRoaXMuc2FzanNDb25maWcuZGVidWcpOnRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVIuU2VydmVyVHlwZS5TYXM5JiYoaWU9bmV3IHcuU0FTOUFwaUNsaWVudChlZSx0aGlzLmpvYnNQYXRoLHRoaXMuc2FzanND''@;'; put 'put ''b25maWcuaHR0cHNBZ2VudE9wdGlvbnMpKTtlbHNle2xldCBnZT1udWxsO3RoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVIuU2VydmVyVHlwZS5TYXNWaXlhP2dlPXRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRDb25maWcoKTp0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1SLlNl''@;'; put 'put ''cnZlclR5cGUuU2FzOSYmKGdlPXRoaXMuc2FzOUFwaUNsaWVudC5nZXRDb25maWcoKSksZWU9Z2Uuc2VydmVyVXJsLHE9Z2Uucm9vdEZvbGRlck5hbWV9Vy5tZW1iZXJzWzBdLm1lbWJlcnMmJlcubWVtYmVyc1swXS5tZW1iZXJzLnNvcnQoZ2U9PiJmb2xkZXIiPT09Z2UudHlwZT8tMToxKTtj''@;'; put 'put ''b25zdCB1ZT1XLm1lbWJlcnM7eWllbGQgdGhpcy5jcmVhdGVGb2xkZXJzQW5kU2VydmljZXMocSx1ZSxKLGllLHJlKX0pfXN0YXJ0Q29tcHV0ZUpvYihXLHEsZWU9e30sSixyZSxpZSx1ZT0hMSxnZSxfZSl7dmFyIFRlLE1lLFplLEI7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0''@;'; put 'put ''aW9uKigpe2lmKGVlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLnNhc2pzQ29uZmlnKSxlZSksdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgic3RhcnRDb21wdXRlSm9iIixbUi5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSwhZWUuY29udGV4dE5hbWUpdGhyb3cgbmV3IEVycm9yKCJD''@;'; put 'put ''b250ZXh0IG5hbWUgaXMgdW5kZWZpbmVkLiBQbGVhc2Ugc2V0IGEgYGNvbnRleHROYW1lYCBpbiB5b3VyIFNBU2pzIG9yIG92ZXJyaWRlIGNvbmZpZy4iKTtyZXR1cm4gX2U/KG51bGw9PT0oVGU9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09VGV8fFRlLnNldFZlcmJvc2VNb2RlKF9l''@;'; put 'put ''KSxudWxsPT09KE1lPXRoaXMucmVxdWVzdENsaWVudCl8fHZvaWQgMD09PU1lfHxNZS5lbmFibGVWZXJib3NlTW9kZSgpKTohMT09PV9lJiYobnVsbD09PShaZT10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1aZXx8WmUuZGlzYWJsZVZlcmJvc2VNb2RlKCkpLG51bGw9PT0oQj10aGlz''@;'; put 'put ''LnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1CP3ZvaWQgMDpCLmV4ZWN1dGVDb21wdXRlSm9iKFcsZWUuY29udGV4dE5hbWUsZWUuZGVidWcscSxKLCEhcmUsITEsaWUsdWUsZ2UpfSl9ZmV0Y2hMb2dGaWxlQ29udGVudChXLHEpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5j''@;'; put 'put ''dGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChXLHEpLnRoZW4oZWU9PntpZighZWUpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBwLkVycm9yUmVzcG9uc2UoIkVycm9yIHdoaWxlIGZldGNoaW5nIGxvZy4gUmVzcG9uc2Ugd2FzIG5vdCBwcm92aWRlZC4iKSk7''@;'; put 'put ''dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeShlZS5yZXN1bHQpfWNhdGNoKEope3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgcC5FcnJvclJlc3BvbnNlKCJFcnJvciB3aGlsZSBmZXRjaGluZyBsb2cuIFRoZSByZXN1bHQgaXMgbm90IHZhbGlkLiIsSikpfX0pfSl9Z2V0U2FzUmVxdWVzdHMo''@;'; put 'put ''KXtyZXR1cm5bLi4udGhpcy5yZXF1ZXN0Q2xpZW50LmdldFJlcXVlc3RzKCldLnNvcnQoXy5jb21wYXJlVGltZXN0YW1wcyl9Y2xlYXJTYXNSZXF1ZXN0cygpe3RoaXMucmVxdWVzdENsaWVudC5jbGVhclJlcXVlc3RzKCl9c2V0dXBDb25maWd1cmF0aW9uKCl7aWYodm9pZCAwPT09dGhpcy5z''@;'; put 'put ''YXNqc0NvbmZpZy5zZXJ2ZXJVcmx8fCIiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwpaWYodHlwZW9mIGxvY2F0aW9uPCJ1Iil7bGV0IFc9YCR7bG9jYXRpb24ucHJvdG9jb2x9Ly8ke2xvY2F0aW9uLmhvc3RuYW1lfWA7bG9jYXRpb24ucG9ydCYmKFc9YCR7V306JHtsb2NhdGlvbi5w''@;'; put 'put ''b3J0fWApLHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsPVd9ZWxzZSB0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybD0iIjsiLyI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybC5zbGljZSgtMSkmJih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybD10aGlzLnNhc2pzQ29uZmlnLnNlcnZl''@;'; put 'put ''clVybC5zbGljZSgwLC0xKSksdGhpcy5yZXF1ZXN0Q2xpZW50P3RoaXMucmVxdWVzdENsaWVudC5zZXRDb25maWcodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5odHRwc0FnZW50T3B0aW9ucyk6dGhpcy5yZXF1ZXN0Q2xpZW50PW5ldyh0aGlzLnNhc2pzQ29u''@;'; put 'put ''ZmlnLnNlcnZlclR5cGU9PT1SLlNlcnZlclR5cGUuU2FzanM/Ti5TYXNqc1JlcXVlc3RDbGllbnQ6ei5SZXF1ZXN0Q2xpZW50KSh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLmh0dHBzQWdlbnRPcHRpb25zLHRoaXMuc2FzanNDb25maWcucmVxdWVzdEhpc3Rv''@;'; put 'put ''cnlMaW1pdCx0aGlzLnNhc2pzQ29uZmlnLnZlcmJvc2UpLHRoaXMuam9ic1BhdGg9dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ui5TZXJ2ZXJUeXBlLlNhc1ZpeWE/dGhpcy5zYXNqc0NvbmZpZy5wYXRoU0FTVml5YTp0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1SLlNlcnZl''@;'; put 'put ''clR5cGUuU2FzOT90aGlzLnNhc2pzQ29uZmlnLnBhdGhTQVM5OnRoaXMuc2FzanNDb25maWcucGF0aFNBU0pTLHRoaXMuYXV0aE1hbmFnZXI9bmV3IEYuQXV0aE1hbmFnZXIodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlLHRoaXMucmVxdWVz''@;'; put 'put ''dENsaWVudCx0aGlzLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cyksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ui5TZXJ2ZXJUeXBlLlNhc1ZpeWEmJih0aGlzLnNhc1ZpeWFBcGlDbGllbnQ/dGhpcy5zYXNWaXlhQXBpQ2xpZW50LnNldENvbmZpZyh0aGlzLnNhc2pzQ29uZmlnLnNlcnZl''@;'; put 'put ''clVybCx0aGlzLnNhc2pzQ29uZmlnLmFwcExvYyk6dGhpcy5zYXNWaXlhQXBpQ2xpZW50PW5ldyBWLlNBU1ZpeWFBcGlDbGllbnQodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5hcHBMb2MsdGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZSx0aGlzLnJlcXVl''@;'; put 'put ''c3RDbGllbnQpLHRoaXMuc2FzVml5YUFwaUNsaWVudC5kZWJ1Zz10aGlzLnNhc2pzQ29uZmlnLmRlYnVnKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1SLlNlcnZlclR5cGUuU2FzOSYmKHRoaXMuc2FzOUFwaUNsaWVudD90aGlzLnNhczlBcGlDbGllbnQuc2V0Q29uZmlnKHRoaXMu''@;'; put 'put ''c2FzanNDb25maWcuc2VydmVyVXJsKTp0aGlzLnNhczlBcGlDbGllbnQ9bmV3IHcuU0FTOUFwaUNsaWVudCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLmpvYnNQYXRoLHRoaXMuc2FzanNDb25maWcuaHR0cHNBZ2VudE9wdGlvbnMpKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5''@;'; put 'put ''cGU9PT1SLlNlcnZlclR5cGUuU2FzanMmJih0aGlzLnNhc0pTQXBpQ2xpZW50fHwodGhpcy5zYXNKU0FwaUNsaWVudD1uZXcgUC5TQVNqc0FwaUNsaWVudCh0aGlzLnJlcXVlc3RDbGllbnQpKSksdGhpcy5maWxlVXBsb2FkZXI9bmV3IE8uRmlsZVVwbG9hZGVyKHRoaXMuc2FzanNDb25maWcu''@;'; put 'put ''c2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy53ZWJKb2JFeGVjdXRvcj1uZXcgTy5XZWJKb2JFeGVjdXRvcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5''@;'; put 'put ''cGUsdGhpcy5qb2JzUGF0aCx0aGlzLnJlcXVlc3RDbGllbnQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50KSx0aGlzLnNhc2pzSm9iRXhlY3V0b3I9bmV3IE8uU2FzanNKb2JFeGVjdXRvcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCks''@;'; put 'put ''dGhpcy5zYXM5Sm9iRXhlY3V0b3I9bmV3IE8uU2FzOUpvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCx0aGlzLnNhc2pzQ29uZmlnLmh0dHBzQWdlbnRPcHRpb25z''@;'; put 'put ''KSx0aGlzLmNvbXB1dGVKb2JFeGVjdXRvcj1uZXcgTy5Db21wdXRlSm9iRXhlY3V0b3IodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNWaXlhQXBpQ2xpZW50KSx0aGlzLmplc0pvYkV4ZWN1dG9yPW5ldyBPLkplc0pvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVy''@;'; put 'put ''VXJsLHRoaXMuc2FzVml5YUFwaUNsaWVudCl9Y3JlYXRlRm9sZGVyc0FuZFNlcnZpY2VzKFcscSxlZSxKLHJlKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7eWllbGQoMCxfLmFzeW5jRm9yRWFjaCkocSxpZT0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24q''@;'; put 'put ''KCl7c3dpdGNoKGllLnR5cGUpe2Nhc2UiZm9sZGVyIjp5aWVsZCB0aGlzLmNyZWF0ZUZvbGRlcihpZS5uYW1lLFcsdm9pZCAwLGVlLEoscmUpO2JyZWFrO2Nhc2UiZmlsZSI6eWllbGQgdGhpcy5jcmVhdGVGaWxlKGllLm5hbWUsaWUuY29kZSxXLHZvaWQgMCxlZSxKKTticmVhaztjYXNlInNl''@;'; put 'put ''cnZpY2UiOnlpZWxkIHRoaXMuY3JlYXRlSm9iRGVmaW5pdGlvbihpZS5uYW1lLGllLmNvZGUsVyx2b2lkIDAsZWUsSik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVuaWRlbnRpZmllZCBtZW1iZXIgJyR7aWUubmFtZX0nIHByb3ZpZGVkLmApfSJmb2xkZXIiPT09aWUudHlwZSYm''@;'; put 'put ''aWUubWVtYmVycyYmaWUubWVtYmVycy5sZW5ndGgmJih5aWVsZCB0aGlzLmNyZWF0ZUZvbGRlcnNBbmRTZXJ2aWNlcyhgJHtXfS8ke2llLm5hbWV9YCxpZS5tZW1iZXJzLGVlLEoscmUpKX0pKX0pfWlzTWV0aG9kU3VwcG9ydGVkKFcscSl7aWYoIXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlw''@;'; put 'put ''ZXx8IXEuaW5jbHVkZXModGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlKSl0aHJvdyBuZXcgRXJyb3IoYE1ldGhvZCAnJHtXfScgaXMgb25seSBzdXBwb3J0ZWQgb24gJHtxLmpvaW4oIiwgIil9IHNlcnZlcnMuYCl9ZW5hYmxlVmVyYm9zZU1vZGUoVyxxKXt2YXIgZWU7bnVsbD09PShlZT10''@;'; put 'put ''aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1lZXx8ZWUuZW5hYmxlVmVyYm9zZU1vZGUoVyxxKX1kaXNhYmxlVmVyYm9zZU1vZGUoKXt2YXIgVztudWxsPT09KFc9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09V3x8Vy5kaXNhYmxlVmVyYm9zZU1vZGUoKX1UYWJsZXMoVyxxKXty''@;'; put 'put ''ZXR1cm4gbmV3IHAuVGFibGVzKFcscSl9fX0sMzQ2NzpmdW5jdGlvbihjZSxYLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oTixPLEssWil7cmV0dXJuIG5ldyhLfHwoSz1Qcm9taXNlKSkoZnVuY3Rpb24oVyxxKXtmdW5jdGlvbiBlZShpZSl7''@;'; put 'put ''dHJ5e3JlKFoubmV4dChpZSkpfWNhdGNoKHVlKXtxKHVlKX19ZnVuY3Rpb24gSihpZSl7dHJ5e3JlKFoudGhyb3coaWUpKX1jYXRjaCh1ZSl7cSh1ZSl9fWZ1bmN0aW9uIHJlKGllKXtpZS5kb25lP1coaWUudmFsdWUpOmZ1bmN0aW9uIFkoVyl7cmV0dXJuIFcgaW5zdGFuY2VvZiBLP1c6bmV3''@;'; put 'put ''IEsoZnVuY3Rpb24ocSl7cShXKX0pfShpZS52YWx1ZSkudGhlbihlZSxKKX1yZSgoWj1aLmFwcGx5KE4sT3x8W10pKS5uZXh0KCkpfSl9LF89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKE4pe3JldHVybiBOJiZOLl9fZXNNb2R1bGU/Tjp7ZGVmYXVsdDpOfX07T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguU0FTanNBcGlDbGllbnQ9dm9pZCAwO2NvbnN0IHA9XyhiKDYyMzApKSxWPWIoMzkwMCksdz1iKDk3NzgpLFA9Yig1NyksRj1iKDI0OSksUj1iKDcwNCk7WC5TQVNqc0FwaUNsaWVudD1jbGFzcyB6e2NvbnN0cnVj''@;'; put 'put ''dG9yKE8pe3RoaXMucmVxdWVzdENsaWVudD1PfWdldEFjY2Vzc1Rva2VuRm9yUmVxdWVzdChPKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoTyl7Y29uc3R7YWNjZXNzX3Rva2VuOkt9PXlpZWxkKDAsUi5nZXRUb2tlbnMpKHRoaXMucmVxdWVzdENsaWVudCxP''@;'; put 'put ''LFYuU2VydmVyVHlwZS5TYXNqcyk7cmV0dXJuIEt9fSl9ZGVwbG95KE8sSyxaKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgWT15aWVsZCB0aGlzLmdldEFjY2Vzc1Rva2VuRm9yUmVxdWVzdChaKTtPLmFwcExvYz1PLmFwcExvY3x8Sztjb25zdHtyZXN1''@;'; put 'put ''bHQ6V309eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIlNBU2pzQXBpL2RyaXZlL2RlcGxveSIsTyxZLHZvaWQgMCx7fSx7bWF4Q29udGVudExlbmd0aDoxLzAsbWF4Qm9keUxlbmd0aDoxLzB9KTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFcpfSl9ZGVwbG95WmlwRmlsZShPLEspe3Jl''@;'; put 'put ''dHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtjcmVhdGVSZWFkU3RyZWFtOlp9PWIoMjk3NSksWT15aWVsZCB0aGlzLmdldEFjY2Vzc1Rva2VuRm9yUmVxdWVzdChLKSxXPXlpZWxkIFooTykscT1uZXcgcC5kZWZhdWx0O3EuYXBwZW5kKCJmaWxlIixXKTtjb25z''@;'; put 'put ''dCBlZT1gbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JHtxLmdldEJvdW5kYXJ5KCl9YCx7cmVzdWx0Okp9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCJTQVNqc0FwaS9kcml2ZS9kZXBsb3kvdXBsb2FkIixxLFksZWUse30se21heENvbnRlbnRMZW5ndGg6MS8wLG1heEJv''@;'; put 'put ''ZHlMZW5ndGg6MS8wfSk7cmV0dXJuIFByb21pc2UucmVzb2x2ZShKKX0pfWV4ZWN1dGVKb2IoTyxLLFope3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBZPVo/Wi5hY2Nlc3NfdG9rZW46dm9pZCAwO2xldCBXO1c9Ty5fcHJvZ3JhbS5zdGFydHNXaXRoKCIv''@;'; put 'put ''Iik/Ty5fcHJvZ3JhbTpgJHtLfS8ke08uX3Byb2dyYW19YDtjb25zdCBxPXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCJTQVNqc0FwaS9zdHAvZXhlY3V0ZSIsT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHtfZGVidWc6MTMxfSxPKSx7X3Byb2dyYW06V30pLFkpO3JldHVybnty''@;'; put 'put ''ZXN1bHQ6cS5yZXN1bHQsbG9nOnEubG9nfX0pfWV4ZWN1dGVTY3JpcHQoTyxLPSJzYXMiLFope3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBZPXlpZWxkIHRoaXMuZ2V0QWNjZXNzVG9rZW5Gb3JSZXF1ZXN0KFopLFc9e2xvZzoiIn07cmV0dXJuIHlpZWxk''@;'; put 'put ''IHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCJTQVNqc0FwaS9jb2RlL2V4ZWN1dGUiLHtjb2RlOk8scnVuVGltZTpLfSxZKS50aGVuKHE9Pntjb25zdHtsb2c6ZWUscHJpbnRPdXRwdXQ6SixyZXN1bHQ6cmV9PXE7Vy5sb2c9ZWUsSiYmKFcucHJpbnRPdXRwdXQ9SikscmUmJihXLndlYm91dD1y''@;'; put 'put ''ZSl9KS5jYXRjaChxPT57dGhyb3coMCx3LnByZWZpeE1lc3NhZ2UpKHEsIkVycm9yIHdoaWxlIHNlbmRpbmcgUE9TVCByZXF1ZXN0IHRvIGV4ZWN1dGUgY29kZS4gIil9KSxXfSl9Z2V0QWNjZXNzVG9rZW4oTyxLKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0''@;'; put 'put ''dXJuKDAsUC5nZXRBY2Nlc3NUb2tlbkZvclNhc2pzKSh0aGlzLnJlcXVlc3RDbGllbnQsTyxLKX0pfXJlZnJlc2hUb2tlbnMoTyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybigwLEYucmVmcmVzaFRva2Vuc0ZvclNhc2pzKSh0aGlzLnJlcXVlc3RDbGll''@;'; put 'put ''bnQsTyl9KX19fSw2OTAzOmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3QiO3ZhciBJPWIoNDE1NSksXz1iKDUxMDgpLHA9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKE4sTyxLLFope3JldHVybiBuZXcoS3x8KEs9UHJvbWlzZSkpKGZ1bmN0aW9uKFcscSl7ZnVuY3Rpb24gZWUo''@;'; put 'put ''aWUpe3RyeXtyZShaLm5leHQoaWUpKX1jYXRjaCh1ZSl7cSh1ZSl9fWZ1bmN0aW9uIEooaWUpe3RyeXtyZShaLnRocm93KGllKSl9Y2F0Y2godWUpe3EodWUpfX1mdW5jdGlvbiByZShpZSl7aWUuZG9uZT9XKGllLnZhbHVlKTpmdW5jdGlvbiBZKFcpe3JldHVybiBXIGluc3RhbmNlb2YgSz9X''@;'; put 'put ''Om5ldyBLKGZ1bmN0aW9uKHEpe3EoVyl9KX0oaWUudmFsdWUpLnRoZW4oZWUsSil9cmUoKFo9Wi5hcHBseShOLE98fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5TZXNzaW9uTWFuYWdlcj12b2lkIDA7Y29uc3QgVj1i''@;'; put 'put ''KDEyMzApLHc9YigxMzk1KSxQPWIoNTkyOCksRj1iKDk3NzgpO1guU2Vzc2lvbk1hbmFnZXI9Y2xhc3Mgentjb25zdHJ1Y3RvcihPLEssWil7dGhpcy5zZXJ2ZXJVcmw9Tyx0aGlzLmNvbnRleHROYW1lPUssdGhpcy5yZXF1ZXN0Q2xpZW50PVosdGhpcy5sb2dnZWRFcnJvcnM9W10sdGhpcy5z''@;'; put 'put ''ZXNzaW9uU3RhdGVMaW5rRXJyb3I9IkVycm9yIHdoaWxlIGdldHRpbmcgc2Vzc2lvbiBzdGF0ZSBsaW5rLiAiLHRoaXMuc2Vzc2lvbnM9W10sdGhpcy5jdXJyZW50Q29udGV4dD1udWxsLHRoaXMuc2V0dGluZ0NvbnRleHQ9ITEsdGhpcy5fZGVidWc9ITEsdGhpcy5wcmludGVkU2Vzc2lvblN0''@;'; put 'put ''YXRlPXtwcmludGVkOiExLHN0YXRlOlYuU2Vzc2lvblN0YXRlLk5vU3RhdGV9LE8mJigwLFAuaXNVcmwpKE8pfWdldCBkZWJ1Zygpe3JldHVybiB0aGlzLl9kZWJ1Z31zZXQgZGVidWcoTyl7dGhpcy5fZGVidWc9T31pc1Nlc3Npb25WYWxpZChPKXtpZighTylyZXR1cm4hMTtjb25zdCBLPSgo''@;'; put 'put ''bmV3IERhdGUpLmdldFRpbWUoKS1uZXcgRGF0ZShPLmNyZWF0aW9uVGltZVN0YW1wKS5nZXRUaW1lKCkpLzFlMztyZXR1cm4hKCFPLmF0dHJpYnV0ZXN8fEs+PU8uYXR0cmlidXRlcy5zZXNzaW9uSW5hY3RpdmVUaW1lb3V0KX1yZW1vdmVTZXNzaW9uRnJvbVBvb2woTyl7dGhpcy5zZXNzaW9u''@;'; put 'put ''cz10aGlzLnNlc3Npb25zLmZpbHRlcihLPT5LLmlkIT09Ty5pZCl9cmVtb3ZlRXhwaXJlZFNlc3Npb25zKCl7dGhpcy5zZXNzaW9ucz10aGlzLnNlc3Npb25zLmZpbHRlcihPPT50aGlzLmlzU2Vzc2lvblZhbGlkKE8pKX10aHJvd0Vycm9ycyhPLEspe3Rocm93IEs/KDAsRi5wcmVmaXhNZXNz''@;'; put 'put ''YWdlKShuZXcgRXJyb3IoTy5qb2luKCIuICIpKSxLKTpuZXcgRXJyb3IoTy5tYXAoWj0+Wi5tZXNzYWdlP1oubWVzc2FnZTpaKS5qb2luKCIuICIpKX1nZXRTZXNzaW9uKE8pe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBLPVtdO2xldCBaPSExO2NvbnN0''@;'; put 'put ''IFk9KCk9PntLLmxlbmd0aCYmIVomJihaPSEwLHRoaXMudGhyb3dFcnJvcnMoSykpfTtpZih0aGlzLnJlbW92ZUV4cGlyZWRTZXNzaW9ucygpLHRoaXMuc2Vzc2lvbnMubGVuZ3RoKXtjb25zdCBXPXRoaXMuc2Vzc2lvbnNbMF07cmV0dXJuIHRoaXMucmVtb3ZlU2Vzc2lvbkZyb21Qb29sKFcp''@;'; put 'put ''LHRoaXMuY3JlYXRlU2Vzc2lvbnMoTykuY2F0Y2gocT0+e0sucHVzaChxKX0pLHRoaXMuY3JlYXRlQW5kV2FpdEZvclNlc3Npb24oTykuY2F0Y2gocT0+e0sucHVzaChxKX0pLFkoKSxXfXt0aGlzLmNyZWF0ZVNlc3Npb25zKE8pLmNhdGNoKHE9PntLLnB1c2gocSl9KSx5aWVsZCB0aGlzLmNy''@;'; put 'put ''ZWF0ZUFuZFdhaXRGb3JTZXNzaW9uKE8pLmNhdGNoKHE9PntLLnB1c2gocSl9KSx0aGlzLnJlbW92ZUV4cGlyZWRTZXNzaW9ucygpO2NvbnN0IFc9dGhpcy5zZXNzaW9ucy5wb3AoKTtyZXR1cm4gdGhpcy5yZW1vdmVTZXNzaW9uRnJvbVBvb2woVyksWSgpLFd9fSl9Z2V0RXJyb3JNZXNzYWdl''@;'; put 'put ''KE8sSyxaKXtyZXR1cm5gJHtafSByZXF1ZXN0IHRvICR7S30gZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJHtPLnJlc3BvbnNlLnN0YXR1c3x8InVua25vd24ifS4gYCtPLnJlc3BvbnNlLmRhdGEubWVzc2FnZXx8IiJ9Y2xlYXJTZXNzaW9uKE8sSyl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9p''@;'; put 'put ''ZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFo9YC9jb21wdXRlL3Nlc3Npb25zLyR7T31gO3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZGVsZXRlKFosSykudGhlbigoKT0+e3RoaXMuc2Vzc2lvbnM9dGhpcy5zZXNzaW9ucy5maWx0ZXIoWT0+WS5pZCE9PU8pfSkuY2F0Y2goWT0+e3Ro''@;'; put 'put ''cm93KDAsRi5wcmVmaXhNZXNzYWdlKSh0aGlzLmdldEVycm9yTWVzc2FnZShZLFosIkRFTEVURSIpLCJFcnJvciB3aGlsZSBkZWxldGluZyBzZXNzaW9uLiAiKX0pfSl9Y3JlYXRlU2Vzc2lvbnMoTyl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEs9W107''@;'; put 'put ''dGhpcy5zZXNzaW9ucy5sZW5ndGh8fCh5aWVsZCgwLFAuYXN5bmNGb3JFYWNoKShuZXcgQXJyYXkoMSksKCk9PnAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuY3JlYXRlQW5kV2FpdEZvclNlc3Npb24oTykuY2F0Y2goWj0+e0sucHVzaChaKX0pfSkpKSxLLmxl''@;'; put 'put ''bmd0aCYmdGhpcy50aHJvd0Vycm9ycyhLLCJFcnJvciB3aGlsZSBjcmVhdGluZyBzZXNzaW9uLiAiKX0pfXdhaXRGb3JDdXJyZW50Q29udGV4dCgpe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoTz0+e2NvbnN0IEs9c2V0SW50ZXJ2''@;'; put 'put ''YWwoKCk9Pnt0aGlzLmN1cnJlbnRDb250ZXh0JiYodGhpcy5zZXR0aW5nQ29udGV4dD0hMSxjbGVhckludGVydmFsKEspLE8oKSl9LDEwMCl9KX0pfWNyZWF0ZUFuZFdhaXRGb3JTZXNzaW9uKE8pe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0aGlzLmN1cnJlbnRD''@;'; put 'put ''b250ZXh0fHwodGhpcy5zZXR0aW5nQ29udGV4dD95aWVsZCB0aGlzLndhaXRGb3JDdXJyZW50Q29udGV4dCgpOnlpZWxkIHRoaXMuc2V0Q3VycmVudENvbnRleHQoTykpO2NvbnN0IEs9YCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvY29udGV4dHMvJHt0aGlzLmN1cnJlbnRDb250ZXh0Lmlk''@;'; put 'put ''fS9zZXNzaW9uc2Ase3Jlc3VsdDpaLGV0YWc6WX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoSyx7fSxPKS5jYXRjaChxPT57dGhyb3coMCxGLnByZWZpeE1lc3NhZ2UpKHRoaXMuZ2V0RXJyb3JNZXNzYWdlKHEsSywiUE9TVCIpLCJFcnJvciB3aGlsZSBjcmVhdGluZyBzZXNzaW9u''@;'; put 'put ''LiAiKX0pO1ouZXRhZz1ZO2NvbnN0IFc9Wi5saW5rcy5maW5kKHE9PiJzdGF0ZSI9PT1xLnJlbCk7aWYoIVcpdGhyb3cgdGhpcy5zZXNzaW9uU3RhdGVMaW5rRXJyb3I7cmV0dXJuIFouc3RhdGVVcmw9Vy5ocmVmLHlpZWxkIHRoaXMud2FpdEZvclNlc3Npb24oWixZLE8pLHRoaXMuc2Vzc2lv''@;'; put 'put ''bnMucHVzaChaKSxafSl9c2V0Q3VycmVudENvbnRleHQoTyl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCF0aGlzLmN1cnJlbnRDb250ZXh0KXtjb25zdCBLPWAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzP2xpbWl0PTEwMDAwYDt0aGlzLnNl''@;'; put 'put ''dHRpbmdDb250ZXh0PSEwO2NvbnN0e3Jlc3VsdDpafT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KEssTykuY2F0Y2gocT0+e3Rocm93KDAsRi5wcmVmaXhNZXNzYWdlKSh0aGlzLmdldEVycm9yTWVzc2FnZShxLEssIkdFVCIpLCJFcnJvciB3aGlsZSBnZXR0aW5nIGxpc3Qgb2YgY29u''@;'; put 'put ''dGV4dHMuICIpfSksVz0oWiYmWi5pdGVtcyYmWi5pdGVtcy5sZW5ndGg/Wi5pdGVtczpbXSkuZmluZChxPT5xLm5hbWU9PT10aGlzLmNvbnRleHROYW1lKTtpZighVyl0aHJvdyBuZXcgRXJyb3IoYFRoZSBjb250ZXh0ICcke3RoaXMuY29udGV4dE5hbWV9JyB3YXMgbm90IGZvdW5kIG9uIHRo''@;'; put 'put ''ZSBzZXJ2ZXIgJHt0aGlzLnNlcnZlclVybH0uYCk7dGhpcy5jdXJyZW50Q29udGV4dD1XLFByb21pc2UucmVzb2x2ZSgpfX0pfXdhaXRGb3JTZXNzaW9uKE8sSyxaKXt2YXIgWTtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0e3N0YXRlOld9PU87Y29uc3R7c3Rh''@;'; put 'put ''dGVVcmw6cX09TyxlZT1JLmxvZ2dlcnx8XztpZihXPT09Vi5TZXNzaW9uU3RhdGUuUGVuZGluZ3x8Vz09PVYuU2Vzc2lvblN0YXRlLlJ1bm5pbmd8fFc9PT1WLlNlc3Npb25TdGF0ZS5Ob1N0YXRlKXtpZihxKXt0aGlzLmRlYnVnJiYhdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlLnByaW50ZWQm''@;'; put 'put ''JihlZS5pbmZvKGBQb2xsaW5nOiAke3RoaXMuc2VydmVyVXJsK3F9YCksdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlLnByaW50ZWQ9ITApO2NvbnN0IEo9YCR7dGhpcy5zZXJ2ZXJVcmx9JHtxfT93YWl0PTMwYCx7cmVzdWx0OnJlLHJlc3BvbnNlU3RhdHVzOmllfT15aWVsZCB0aGlzLmdldFNl''@;'; put 'put ''c3Npb25TdGF0ZShKLEssWikuY2F0Y2godWU9Pnt0aHJvdygwLEYucHJlZml4TWVzc2FnZSkodWUsIkVycm9yIHdoaWxlIHdhaXRpbmcgZm9yIHNlc3Npb24uICIpfSk7aWYoVz1yZS50cmltKCksdGhpcy5kZWJ1ZyYmdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlLnN0YXRlIT09VyYmKGVlLmlu''@;'; put 'put ''Zm8oYEN1cnJlbnQgc2Vzc2lvbiBzdGF0ZSBpcyAnJHtXfSdgKSx0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGUuc3RhdGU9Vyx0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGUucHJpbnRlZD0hMSksIVcpe2NvbnN0IHVlPW5ldyB3Lk5vU2Vzc2lvblN0YXRlRXJyb3IoaWUsdGhpcy5zZXJ2ZXJVcmwr''@;'; put 'put ''cSxudWxsPT09KFk9Ty5saW5rcy5maW5kKGdlPT4ibG9nIj09PWdlLnJlbCkpfHx2b2lkIDA9PT1ZP3ZvaWQgMDpZLmhyZWYpO3JldHVybiB0aGlzLmxvZ2dlZEVycm9ycy5maW5kKGdlPT5nZS5zZXJ2ZXJSZXNwb25zZVN0YXR1cz09PXVlLnNlcnZlclJlc3BvbnNlU3RhdHVzKXx8KHRoaXMu''@;'; put 'put ''bG9nZ2VkRXJyb3JzLnB1c2godWUpLGVlLmluZm8odWUubWVzc2FnZSkpLHlpZWxkIHRoaXMud2FpdEZvclNlc3Npb24oTyxLLFopfXJldHVybiB0aGlzLmxvZ2dlZEVycm9ycz1bXSxXfXRocm93IHRoaXMuc2Vzc2lvblN0YXRlTGlua0Vycm9yfXJldHVybiB0aGlzLmxvZ2dlZEVycm9ycz1b''@;'; put 'put ''XSxXfSl9Z2V0U2Vzc2lvblN0YXRlKE8sSyxaKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoTyxaLCJ0ZXh0L3BsYWluIix7IklmLU5vbmUtTWF0Y2giOkt9KS50aGVuKFk9Pih7cmVzdWx0OlkucmVz''@;'; put 'put ''dWx0LHJlc3BvbnNlU3RhdHVzOlkuc3RhdHVzfSkpLmNhdGNoKFk9Pnt0aHJvdygwLEYucHJlZml4TWVzc2FnZSkodGhpcy5nZXRFcnJvck1lc3NhZ2UoWSxPLCJHRVQiKSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBzZXNzaW9uIHN0YXRlLiAiKX0pfSl9Z2V0VmFyaWFibGUoTyxLLFope3JldHVy''@;'; put 'put ''biBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBZPWAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL3Nlc3Npb25zLyR7T30vdmFyaWFibGVzLyR7S31gO3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KFksWikuY2F0Y2goVz0+e3Rocm93KDAsRi5wcmVm''@;'; put 'put ''aXhNZXNzYWdlKSh0aGlzLmdldEVycm9yTWVzc2FnZShXLFksIkdFVCIpLGBFcnJvciB3aGlsZSBmZXRjaGluZyBzZXNzaW9uIHZhcmlhYmxlICcke0t9Jy4gYCl9KX0pfX19LDE2MjI6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9Yig0MTU1KSxfPWIoNTEwOCkscD10aGlz''@;'; put 'put ''JiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oWixZLFcscSl7cmV0dXJuIG5ldyhXfHwoVz1Qcm9taXNlKSkoZnVuY3Rpb24oSixyZSl7ZnVuY3Rpb24gaWUoX2Upe3RyeXtnZShxLm5leHQoX2UpKX1jYXRjaChUZSl7cmUoVGUpfX1mdW5jdGlvbiB1ZShfZSl7dHJ5e2dlKHEudGhyb3coX2Up''@;'; put 'put ''KX1jYXRjaChUZSl7cmUoVGUpfX1mdW5jdGlvbiBnZShfZSl7X2UuZG9uZT9KKF9lLnZhbHVlKTpmdW5jdGlvbiBlZShKKXtyZXR1cm4gSiBpbnN0YW5jZW9mIFc/SjpuZXcgVyhmdW5jdGlvbihyZSl7cmUoSil9KX0oX2UudmFsdWUpLnRoZW4oaWUsdWUpfWdlKChxPXEuYXBwbHkoWixZfHxb''@;'; put 'put ''XSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZXhlY3V0ZU9uQ29tcHV0ZUFwaT12b2lkIDA7Y29uc3QgVj1iKDc3NTcpLHc9Yig5Nzc4KSxQPWIoMzYwNyksRj1iKDcwNCksUj1iKDU5MjgpLHo9Yig3MTQpLE49YigxMzQz''@;'; put 'put ''KSxPPWIoNjQ5Nik7WC5leGVjdXRlT25Db21wdXRlQXBpPWZ1bmN0aW9uIEsoWixZLFcscSxlZSxKLHJlLGllPW51bGwsdWU9ITEsZ2U9ITEsX2U9ITAsVGUsTWU9ITEsWmUpe3ZhciBCLGc7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCB5PShyZXx8e30pLmFj''@;'; put 'put ''Y2Vzc190b2tlbjtyZSYmKHthY2Nlc3NfdG9rZW46eX09eWllbGQoMCxGLmdldFRva2VucykoWixyZSkpO2NvbnN0IHg9SS5sb2dnZXJ8fF87dHJ5e2xldCBDO2NvbnN0IFQ9eWllbGQgWS5nZXRTZXNzaW9uKHkpLmNhdGNoKHhlPT57dGhyb3coMCx3LnByZWZpeE1lc3NhZ2UpKHhlLCJFcnJv''@;'; put 'put ''ciB3aGlsZSBnZXR0aW5nIHNlc3Npb24uICIpfSk7aWYoQz1ULmlkLE1lKXtjb25zdHtyZXN1bHQ6eGV9PXlpZWxkIFkuZ2V0VmFyaWFibGUoQywiU1lTSk9CSUQiLHkpLmNhdGNoKHllPT57dGhyb3coMCx3LnByZWZpeE1lc3NhZ2UpKHllLCJFcnJvciB3aGlsZSBnZXR0aW5nIHNlc3Npb24g''@;'; put 'put ''dmFyaWFibGUuICIpfSk7aWYoeGUmJnhlLnZhbHVlKXtjb25zdCB5ZT1XP3Euc3BsaXQoVykuam9pbigiIikucmVwbGFjZSgvXlwvLywiIik6cTsoSS5sb2dnZXJ8fF8pLmluZm8oYFRyaWdnZXJpbmcgJyR7eWV9JyB3aXRoIFBJRCAke3hlLnZhbHVlfSBhdCAkeygwLFYudGltZXN0YW1wVG9Z''@;'; put 'put ''WVlZTU1EREhITU1TUykoKX1gKX19bGV0IEg7SD0oMCxSLmlzUmVsYXRpdmVQYXRoKShxKT9gZXhlYy0ke3EuaW5jbHVkZXMoIi8iKT9xLnNwbGl0KCIvIilbMV06cX1gOnEuc3BsaXQoIi8iKS5wb3AoKTtsZXQgaj17U1lTX0pFU19KT0JfVVJJOiIiLF9wcm9ncmFtOigwLFIuaXNSZWxhdGl2''@;'; put 'put ''ZVBhdGgpKHEpP1crIi8iK3E6cX07WmUmJihqPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxqKSxaZSkpLHVlJiYoaj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saikse19ERUJVRzoxMzF9KSk7bGV0IEU9W107aWUmJihKU09OLnN0cmluZ2lmeShpZSkuaW5jbHVkZXMo''@;'; put 'put ''IjsiKT8oRT15aWVsZCgwLE8udXBsb2FkVGFibGVzKShaLGllLHkpLmNhdGNoKHhlPT57dGhyb3coMCx3LnByZWZpeE1lc3NhZ2UpKHhlLCJFcnJvciB3aGlsZSB1cGxvYWRpbmcgdGFibGVzLiAiKX0pLGouX3dlYmluX2ZpbGVfY291bnQ9RS5sZW5ndGgsRS5mb3JFYWNoKCh4ZSx5ZSk9Pntq''@;'; put 'put ''W2Bfd2ViaW5fZmlsZXVyaSR7eWUrMX1gXT1gL2ZpbGVzL2ZpbGVzLyR7eGUuZmlsZS5pZH1gLGpbYF93ZWJpbl9uYW1lJHt5ZSsxfWBdPXhlLnRhYmxlTmFtZX0pKTpqPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxqKSwoMCx6LmZvcm1hdERhdGFGb3JSZXF1ZXN0KShpZSkpKTtj''@;'; put 'put ''b25zdCBtPXtuYW1lOkh8fCJEZWZhdWx0IEpvYiBOYW1lIixkZXNjcmlwdGlvbjoiUG93ZXJlZCBieSBTQVNqcyIsY29kZTplZSx2YXJpYWJsZXM6aix2ZXJzaW9uOjJ9LHtyZXN1bHQ6QX09eWllbGQgWi5wb3N0KGAvY29tcHV0ZS9zZXNzaW9ucy8ke0N9L2pvYnNgLG0seSkuY2F0Y2goeGU9''@;'; put 'put ''Pnt0aHJvdygwLHcucHJlZml4TWVzc2FnZSkoeGUsIkVycm9yIHdoaWxlIHBvc3Rpbmcgam9iLiAiKX0pO2lmKCFfZSlyZXR1cm4gVDt1ZSYmKHguaW5mbyhgSm9iIGhhcyBiZWVuIHN1Ym1pdHRlZCBmb3IgJyR7SH0nLmApLHguaW5mbyhgWW91IGNhbiBtb25pdG9yIHRoZSBqb2IgcHJvZ3Jl''@;'; put 'put ''c3MgYXQgJyR7Wi5nZXRCYXNlVXJsKCl9JHtBLmxpbmtzLmZpbmQoeGU9PiJzdGF0ZSI9PT14ZS5yZWwpLmhyZWZ9Jy5gKSk7Y29uc3QgbmU9eWllbGQoMCxOLnBvbGxKb2JTdGF0ZSkoWixBLHVlLHJlLFRlLHtzZXNzaW9uOlQsc2Vzc2lvbk1hbmFnZXI6WX0pLmNhdGNoKHhlPT5wKHRoaXMs''@;'; put 'put ''dm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt2YXIgeWUsS2U7Y29uc3QgamU9bnVsbD09PSh5ZT14ZT8ucmVzcG9uc2UpfHx2b2lkIDA9PT15ZT92b2lkIDA6eWUuZGF0YSxrZT0vZXJyPVswLTldKiwvLmV4ZWMoamUpO2lmKCI1MTEzIj09PShudWxsPT09KEtlPWtlPy5bMF0pfHx2b2lkIDA9''@;'; put 'put ''PT1LZT92b2lkIDA6S2Uuc2xpY2UoNCwtMSkpKXtjb25zdCBSZT1BLmxpbmtzLmZpbmQoVmU9PiJ1cCI9PT1WZS5yZWwpLmhyZWYrIi9sb2ciO3hlLmxvZz15aWVsZCgwLFIuZmV0Y2hMb2dCeUNodW5rcykoWix5LFJlLDFlNil9dGhyb3coMCx3LnByZWZpeE1lc3NhZ2UpKHhlLCJFcnJvciB3''@;'; put 'put ''aGlsZSBwb2xsaW5nIGpvYiBzdGF0dXMuICIpfSkpO3JlJiYoe2FjY2Vzc190b2tlbjp5fT15aWVsZCgwLEYuZ2V0VG9rZW5zKShaLHJlKSk7Y29uc3R7cmVzdWx0OnNlfT15aWVsZCBaLmdldChgL2NvbXB1dGUvc2Vzc2lvbnMvJHtDfS9qb2JzLyR7QS5pZH1gLHkpLmNhdGNoKHhlPT57dGhy''@;'; put 'put ''b3coMCx3LnByZWZpeE1lc3NhZ2UpKHhlLCJFcnJvciB3aGlsZSBnZXR0aW5nIGpvYi4gIil9KTtsZXQgQ2UsVWU9IiI7Y29uc3QgSmU9c2UubGlua3MuZmluZCh4ZT0+ImxvZyI9PT14ZS5yZWwpO2lmKHVlJiZKZSl7Y29uc3QgeGU9YCR7SmUuaHJlZn0vY29udGVudGAseWU9bnVsbCE9PShn''@;'; put 'put ''PW51bGw9PT0oQj1zZS5sb2dTdGF0aXN0aWNzKXx8dm9pZCAwPT09Qj92b2lkIDA6Qi5saW5lQ291bnQpJiZ2b2lkIDAhPT1nP2c6MWU2O1VlPXlpZWxkKDAsUi5mZXRjaExvZ0J5Q2h1bmtzKShaLHkseGUseWUpfWlmKG5lPT09Ti5Kb2JTdGF0ZS5GYWlsZWR8fG5lPT09Ti5Kb2JTdGF0ZS5F''@;'; put 'put ''cnJvcil0aHJvdyBuZXcgUC5Db21wdXRlSm9iRXhlY3V0aW9uRXJyb3Ioc2UsVWUpO2lmKCFnZSlyZXR1cm57am9iOnNlLGxvZzpVZX07Y29uc3QgaXQ9YC9jb21wdXRlL3Nlc3Npb25zLyR7Q30vZmlsZXJlZnMvX3dlYm91dC9jb250ZW50YDtyZXR1cm4gQ2U9eWllbGQgWi5nZXQoaXQseSwi''@;'; put 'put ''dGV4dC9wbGFpbiIpLmNhdGNoKHhlPT5wKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt2YXIgeWUsS2U7aWYoeGUgaW5zdGFuY2VvZiBQLk5vdEZvdW5kRXJyb3ImJkplKXtjb25zdCBqZT1gJHtKZS5ocmVmfS9jb250ZW50YCxrZT1udWxsIT09KEtlPW51bGw9PT0oeWU9c2UubG9n''@;'; put 'put ''U3RhdGlzdGljcyl8fHZvaWQgMD09PXllP3ZvaWQgMDp5ZS5saW5lQ291bnQpJiZ2b2lkIDAhPT1LZT9LZToxZTY7cmV0dXJuIFVlPXlpZWxkKDAsUi5mZXRjaExvZ0J5Q2h1bmtzKShaLHksamUsa2UpLFByb21pc2UucmVqZWN0KHtzdGF0dXM6NTAwLGxvZzpVZX0pfXJldHVybntyZXN1bHQ6''@;'; put 'put ''SlNPTi5zdHJpbmdpZnkoeGUpfX0pKSx5aWVsZCBZLmNsZWFyU2Vzc2lvbihDLHkpLmNhdGNoKHhlPT57dGhyb3coMCx3LnByZWZpeE1lc3NhZ2UpKHhlLCJFcnJvciB3aGlsZSBjbGVhcmluZyBzZXNzaW9uLiAiKX0pLHtyZXN1bHQ6Q2U/LnJlc3VsdCxsb2c6VWV9fWNhdGNoKEMpe2lmKDQw''@;'; put 'put ''ND09PUMuc3RhdHVzKXJldHVybiBLKFosWSxXLHEsZWUsSixyZSxpZSx1ZSwhMSwhMCk7dGhyb3coMCx3LnByZWZpeE1lc3NhZ2UpKEMsIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBzY3JpcHQuICIpfX0pfX0sNzQ1ODpmdW5jdGlvbihjZSxYLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQxNTUp''@;'; put 'put ''LF89dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFAsRixSLHope3JldHVybiBuZXcoUnx8KFI9UHJvbWlzZSkpKGZ1bmN0aW9uKE8sSyl7ZnVuY3Rpb24gWihxKXt0cnl7Vyh6Lm5leHQocSkpfWNhdGNoKGVlKXtLKGVlKX19ZnVuY3Rpb24gWShxKXt0cnl7Vyh6LnRocm93KHEpKX1j''@;'; put 'put ''YXRjaChlZSl7SyhlZSl9fWZ1bmN0aW9uIFcocSl7cS5kb25lP08ocS52YWx1ZSk6ZnVuY3Rpb24gTihPKXtyZXR1cm4gTyBpbnN0YW5jZW9mIFI/TzpuZXcgUihmdW5jdGlvbihLKXtLKE8pfSl9KHEudmFsdWUpLnRoZW4oWixZKX1XKCh6PXouYXBwbHkoUCxGfHxbXSkpLm5leHQoKSl9KX07''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2V0RmlsZVN0cmVhbT12b2lkIDA7Y29uc3QgcD1iKDI5NzUpLFY9Yig3NzU3KTtYLmdldEZpbGVTdHJlYW09KFAsRik9Pl8odm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7Y3Jl''@;'; put 'put ''YXRlV3JpdGVTdHJlYW06Un09YigyOTc1KSx6PUZ8fEkuY3dkKCk7aWYoeWllbGQoMCxwLmlzRm9sZGVyKSh6KSl7Y29uc3QgTz1gJHtQLm5hbWV8fCJqb2IifS0keygwLFYuZ2VuZXJhdGVUaW1lc3RhbXApKCl9LmxvZ2AsWj1iKDI1MjApLmpvaW4oRnx8SS5jd2QoKSxPKTtyZXR1cm4geWll''@;'; put 'put ''bGQgUihaKX1yZXR1cm4geWllbGQgUih6KX0pfSwxMzQzOmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3QiO3ZhciBJPWIoNDE1NSksXz1iKDUxMDgpLHA9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFksVyxxLGVlKXtyZXR1cm4gbmV3KHF8fChxPVByb21pc2UpKShmdW5jdGlv''@;'; put 'put ''bihyZSxpZSl7ZnVuY3Rpb24gdWUoVGUpe3RyeXtfZShlZS5uZXh0KFRlKSl9Y2F0Y2goTWUpe2llKE1lKX19ZnVuY3Rpb24gZ2UoVGUpe3RyeXtfZShlZS50aHJvdyhUZSkpfWNhdGNoKE1lKXtpZShNZSl9fWZ1bmN0aW9uIF9lKFRlKXtUZS5kb25lP3JlKFRlLnZhbHVlKTpmdW5jdGlvbiBK''@;'; put 'put ''KHJlKXtyZXR1cm4gcmUgaW5zdGFuY2VvZiBxP3JlOm5ldyBxKGZ1bmN0aW9uKGllKXtpZShyZSl9KX0oVGUudmFsdWUpLnRoZW4odWUsZ2UpfV9lKChlZT1lZS5hcHBseShZLFd8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEw''@;'; put 'put ''fSksWC5kb1BvbGw9WC5wb2xsSm9iU3RhdGU9WC5Kb2JTdGF0ZT12b2lkIDA7Y29uc3QgVj1iKDcwNCksdz1iKDEzOTUpLFA9YigxMjMwKSxGPWIoNTkyOCk7dmFyIFIsWTsoWT1SPVguSm9iU3RhdGV8fChYLkpvYlN0YXRlPXt9KSkuQ29tcGxldGVkPSJjb21wbGV0ZWQiLFkuUnVubmluZz0i''@;'; put 'put ''cnVubmluZyIsWS5QZW5kaW5nPSJwZW5kaW5nIixZLlVuYXZhaWxhYmxlPSJ1bmF2YWlsYWJsZSIsWS5Ob1N0YXRlPSIiLFkuRmFpbGVkPSJmYWlsZWQiLFkuRXJyb3I9ImVycm9yIixYLnBvbGxKb2JTdGF0ZT1mdW5jdGlvbiB6KFksVyxxLGVlLEoscmUpe3JldHVybiBwKHRoaXMsdm9pZCAw''@;'; put 'put ''LHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBpZT1JLmxvZ2dlcnx8Xyx1ZT1KPy5zdHJlYW1Mb2d8fCExLGdlPVt7bWF4UG9sbENvdW50OjIwMCxwb2xsSW50ZXJ2YWw6MzAwfSx7bWF4UG9sbENvdW50OjMwMCxwb2xsSW50ZXJ2YWw6M2UzfSx7bWF4UG9sbENvdW50OjUwMCxwb2xsSW50ZXJ2''@;'; put 'put ''YWw6M2U0fSx7bWF4UG9sbENvdW50OjM0MDAscG9sbEludGVydmFsOjZlNH1dO2xldCBfZTtpZih2b2lkIDAhPT1KKXtfZT1bSl07bGV0e3BvbGxTdHJhdGVneTp4fT1KO3ZvaWQgMCE9PXg/KFooeCkseD14LnNvcnQoKEMsVCk9PkMubWF4UG9sbENvdW50LVQubWF4UG9sbENvdW50KSxfZT1b''@;'; put 'put ''Li4uX2UsLi4ueF0pOl9lPVsuLi5fZSwuLi5nZV19ZWxzZSBfZT1nZTtsZXQgVGU9X2Uuc3BsaWNlKDAsMSlbMF07Sj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sVGUpLEp8fHt9KTtjb25zdCBNZT1XLmxpbmtzLmZpbmQoeD0+InN0YXRlIj09PXgucmVsKTtpZighTWUpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJKb2Igc3RhdGUgbGluayB3YXMgbm90IGZvdW5kLiIpO2xldCBnLFplPXlpZWxkIE4oWSxXLFIuTm9TdGF0ZSxxLGVlKS5jYXRjaCh4PT4oaWUuZXJyb3IoYEVycm9yIGZldGNoaW5nIGpvYiBzdGF0ZSBmcm9tICR7TWUuaHJlZn0uIFN0YXJ0aW5nIHBvbGwsIGFzc3VtaW5n''@;'; put 'put ''IGpvYiB0byBiZSBydW5uaW5nLmAseCksUi5VbmF2YWlsYWJsZSkpLEI9MDtpZihaZT09PVIuQ29tcGxldGVkKXJldHVybiBQcm9taXNlLnJlc29sdmUoWmUpO2lmKHVlJiYoMCxGLmlzTm9kZSkoKSl7Y29uc3R7Z2V0RmlsZVN0cmVhbTp4fT1iKDc0NTgpO2c9eWllbGQgeChXLEoubG9nRm9s''@;'; put 'put ''ZGVyUGF0aCl9bGV0IHk9eWllbGQoMCxYLmRvUG9sbCkoWSxXLFplLHEsQixKLGVlLHVlLGcscmUpO2lmKFplPXkuc3RhdGUsQj15LnBvbGxDb3VudCwhTyhaZSl8fEI+PUoubWF4UG9sbENvdW50JiYhX2UubGVuZ3RoKXJldHVybiBaZTtmb3IoO19lLmxlbmd0aCYmTyhaZSk7KVRlPV9lLnNw''@;'; put 'put ''bGljZSgwLDEpWzBdLEomJihUZS5sb2dGb2xkZXJQYXRoPUoubG9nRm9sZGVyUGF0aCkseT15aWVsZCgwLFguZG9Qb2xsKShZLFcsWmUscSxCLFRlLGVlLHVlLGcscmUpLFplPXkuc3RhdGUsQj15LnBvbGxDb3VudDtyZXR1cm4gZyYmZy5lbmQoKSxaZX0pfTtjb25zdCBOPShZLFcscSxlZSxK''@;'; put 'put ''KT0+cCh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCByZT1XLmxpbmtzLmZpbmQoaWU9PiJzdGF0ZSI9PT1pZS5yZWwpO2lmKE8ocSkpe2xldCBpZTtKJiYoaWU9eWllbGQoMCxWLmdldFRva2VucykoWSxKKSk7Y29uc3R7cmVzdWx0OnVlfT15aWVsZCBZLmdldChgJHty''@;'; put 'put ''ZS5ocmVmfT9fYWN0aW9uPXdhaXQmd2FpdD0zMDBgLGllPy5hY2Nlc3NfdG9rZW4sInRleHQvcGxhaW4iLHt9LGVlKS5jYXRjaChnZT0+e3Rocm93IG5ldyB3LkpvYlN0YXRlUG9sbEVycm9yKFcuaWQsZ2UpfSk7cmV0dXJuIHVlLnRyaW0oKX1yZXR1cm4gcX0pLE89WT0+WT09PVIuUnVubmlu''@;'; put 'put ''Z3x8WT09PVIuTm9TdGF0ZXx8WT09PVIuUGVuZGluZ3x8WT09PVIuVW5hdmFpbGFibGU7WC5kb1BvbGw9KFksVyxxLGVlLEoscmUsaWUsdWUsZ2UsX2UpPT5wKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3ZhciBUZSxNZTtjb25zdHttYXhQb2xsQ291bnQ6WmUscG9sbEludGVy''@;'; put 'put ''dmFsOkJ9PXJlLGc9SS5sb2dnZXJ8fF8seT1XLmxpbmtzLmZpbmQoRT0+InN0YXRlIj09PUUucmVsKTtsZXQgQz0wLFQ9cSxIPVIuTm9TdGF0ZSxqPTA7Zm9yKDtPKFQpJiZKPD1aZTspe2lmKF9lJiZKJiZKJTEwPT0wJiZpZSl7Y29uc3R7c2Vzc2lvbjptLHNlc3Npb25NYW5hZ2VyOkF9PV9l''@;'; put 'put ''LHtzdGF0ZVVybDphZSxldGFnOm5lLGlkOnNlfT1tLHthY2Nlc3NfdG9rZW46Q2V9PWllLHtpZDpVZX09Vyx7cmVzdWx0OkplLHJlc3BvbnNlU3RhdHVzOml0fT15aWVsZCBBLmdldFNlc3Npb25TdGF0ZShhZSxuZSxDZSkuY2F0Y2goeWU9Pnt0aHJvdyBuZXcgdy5Kb2JTdGF0ZVBvbGxFcnJv''@;'; put 'put ''cihVZSx5ZSl9KSx4ZT15ZT0+W1AuU2Vzc2lvblN0YXRlLlJ1bm5pbmcsUC5TZXNzaW9uU3RhdGUuSWRsZV0uaW5jbHVkZXMoeWUpO2lmKCF4ZShKZSl8fDIwMCE9PWl0KXtBLmNsZWFyU2Vzc2lvbihzZSxDZSk7Y29uc3QgeWU9eGUoSmUpP2BTZXNzaW9uIHJlc3BvbnNlIHN0YXR1cyBpcyBu''@;'; put 'put ''b3QgMjAwLiBTZXNzaW9uIHJlc3BvbnNlIHN0YXR1cyBpcyAke2l0fS5gOmBTZXNzaW9uIHN0YXRlIG9mIHRoZSBqb2IgaXMgbm90ICdydW5uaW5nJyBvciAnaWRsZScuIFNlc3Npb24gc3RhdGUgaXMgJyR7SmV9J2A7dGhyb3cgbmV3IHcuSm9iU3RhdGVQb2xsRXJyb3IoVWUsbmV3IEVycm9y''@;'; put 'put ''KHllKSl9fVQ9eWllbGQgTihZLFcsVCxlZSxpZSkuY2F0Y2gobT0+e2lmKEMrKyxKPj1aZXx8Qz49NSl0aHJvdyBtO3JldHVybiBnLmVycm9yKGBFcnJvciBmZXRjaGluZyBqb2Igc3RhdGUgZnJvbSAke3kuaHJlZn0uIFJlc3VtaW5nIHBvbGwsIGFzc3VtaW5nIGpvYiB0byBiZSBydW5uaW5n''@;'; put 'put ''LmAsbSksUi5VbmF2YWlsYWJsZX0pLEorKztjb25zdCBFPVcubGlua3MuZmluZChtPT4ic2VsZiI9PT1tLnJlbCkuaHJlZjtpZih1ZSl7Y29uc3R7cmVzdWx0Om19PXlpZWxkIFkuZ2V0KEUsaWU/LmFjY2Vzc190b2tlbiksQT1udWxsIT09KE1lPW51bGw9PT0oVGU9bS5sb2dTdGF0aXN0aWNz''@;'; put 'put ''KXx8dm9pZCAwPT09VGU/dm9pZCAwOlRlLmxpbmVDb3VudCkmJnZvaWQgMCE9PU1lP01lOjFlNix7c2F2ZUxvZzphZX09KDAsRi5pc05vZGUpKCk/YigyMDgwKTp7c2F2ZUxvZzpudWxsfTthZSYmKHlpZWxkIGFlKFcsWSxqLEEsZ2UsaWU/LmFjY2Vzc190b2tlbikpLGorPUF9ZWUmJkghPT1U''@;'; put 'put ''JiYoZy5pbmZvKGBQb2xsaW5nOiAke1kuZ2V0QmFzZVVybCgpK0V9L3N0YXRlYCksZy5pbmZvKGBDdXJyZW50IGpvYiBzdGF0ZTogJHtUfWApLEg9VCksVCE9PVIuVW5hdmFpbGFibGUmJkM+MCYmKEM9MCksVCE9PVIuQ29tcGxldGVkJiYoeWllbGQoMCxGLmRlbGF5KShCKSl9cmV0dXJue3N0''@;'; put 'put ''YXRlOlQscG9sbENvdW50Okp9fSk7Y29uc3QgWj1ZPT57Y29uc3QgVz0ocSxlZSk9Pnt0aHJvdyBuZXcgRXJyb3IoYFBvbGwgc3RyYXRlZ2llcyBhcmUgbm90IHZhbGlkLiR7cT9gICR7cX1gOiIifSR7ZWU/YCBJbnZhbGlkIHBvbGwgc3RyYXRlZ3k6IFxuJHtKU09OLnN0cmluZ2lmeShlZSxu''@;'; put 'put ''dWxsLDIpfWA6IiJ9YCl9O1kuZm9yRWFjaCgocSxlZSk9Pntjb25zdHttYXhQb2xsQ291bnQ6Sixwb2xsSW50ZXJ2YWw6cmV9PXE7SjwxP1coIidtYXhQb2xsQ291bnQnIGhhcyB0byBiZSBncmVhdGVyIHRoYW4gMC4iLHEpOjAhPT1lZT9KPD1ZW2VlLTFdLm1heFBvbGxDb3VudCYmVygiJ21h''@;'; put 'put ''eFBvbGxDb3VudCcgaGFzIHRvIGJlIGdyZWF0ZXIgdGhhbiAnbWF4UG9sbENvdW50JyBpbiBwcmV2aW91cyBwb2xsIHN0cmF0ZWd5LiIscSk6cmU8MSYmVygiJ3BvbGxJbnRlcnZhbCcgaGFzIHRvIGJlIGdyZWF0ZXIgdGhhbiAwLiIscSl9KX19LDIwODA6ZnVuY3Rpb24oY2UsWCxiKXsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIEk9Yig0MTU1KSxfPWIoNTEwOCkscD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oRixSLHosTil7cmV0dXJuIG5ldyh6fHwoej1Qcm9taXNlKSkoZnVuY3Rpb24oSyxaKXtmdW5jdGlvbiBZKGVlKXt0cnl7cShOLm5leHQoZWUpKX1jYXRjaChKKXtaKEopfX1m''@;'; put 'put ''dW5jdGlvbiBXKGVlKXt0cnl7cShOLnRocm93KGVlKSl9Y2F0Y2goSil7WihKKX19ZnVuY3Rpb24gcShlZSl7ZWUuZG9uZT9LKGVlLnZhbHVlKTpmdW5jdGlvbiBPKEspe3JldHVybiBLIGluc3RhbmNlb2Ygej9LOm5ldyB6KGZ1bmN0aW9uKFope1ooSyl9KX0oZWUudmFsdWUpLnRoZW4oWSxX''@;'; put 'put ''KX1xKChOPU4uYXBwbHkoRixSfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguc2F2ZUxvZz12b2lkIDA7Y29uc3QgVj1iKDU5MjgpLHc9Yig2MTMxKTtYLnNhdmVMb2c9ZnVuY3Rpb24gUChGLFIseixOLE8sSyl7cmV0''@;'; put 'put ''dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCFLKXRocm93IG5ldyBFcnJvcihgTG9ncyBmb3Igam9iICR7Ri5pZH0gY2Fubm90IGJlIGZldGNoZWQgd2l0aG91dCBhIHZhbGlkIGFjY2VzcyB0b2tlbi5gKTtpZighTyl0aHJvdyBuZXcgRXJyb3IoYExvZ3MgZm9yIGpv''@;'; put 'put ''YiAke0YuaWR9IGNhbm5vdCBiZSB3cml0dGVuIHdpdGhvdXQgYSB2YWxpZCB3cml0ZSBzdHJlYW0uYCk7Y29uc3QgWj1JLmxvZ2dlcnx8XyxZPUYubGlua3MuZmluZChxPT4ibG9nIj09PXEucmVsKTtpZighWSl0aHJvdyBuZXcgRXJyb3IoYExvZyBVUkwgZm9yIGpvYiAke0YuaWR9IHdhcyBu''@;'; put 'put ''b3QgZm91bmQuYCk7Y29uc3QgVz15aWVsZCgwLFYuZmV0Y2hMb2cpKFIsSyxgJHtZLmhyZWZ9L2NvbnRlbnRgLHosTik7Wi5pbmZvKGBXcml0aW5nIGxvZ3MgdG8gJHtPLnBhdGh9YCkseWllbGQoMCx3LndyaXRlU3RyZWFtKShPLFd8fCIiKX0pfX0sNjQ5NjpmdW5jdGlvbihjZSxYLGIpeyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24odyxQLEYsUil7cmV0dXJuIG5ldyhGfHwoRj1Qcm9taXNlKSkoZnVuY3Rpb24oTixPKXtmdW5jdGlvbiBLKFcpe3RyeXtZKFIubmV4dChXKSl9Y2F0Y2gocSl7TyhxKX19ZnVuY3Rpb24gWihXKXt0cnl7WShS''@;'; put 'put ''LnRocm93KFcpKX1jYXRjaChxKXtPKHEpfX1mdW5jdGlvbiBZKFcpe1cuZG9uZT9OKFcudmFsdWUpOmZ1bmN0aW9uIHooTil7cmV0dXJuIE4gaW5zdGFuY2VvZiBGP046bmV3IEYoZnVuY3Rpb24oTyl7TyhOKX0pfShXLnZhbHVlKS50aGVuKEssWil9WSgoUj1SLmFwcGx5KHcsUHx8W10pKS5u''@;'; put 'put ''ZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnVwbG9hZFRhYmxlcz12b2lkIDA7Y29uc3QgXz1iKDk3NzgpLHA9YigyNDAyKTtYLnVwbG9hZFRhYmxlcz1mdW5jdGlvbiBWKHcsUCxGKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lk''@;'; put 'put ''IDAsZnVuY3Rpb24qKCl7Y29uc3QgUj1bXTtmb3IoY29uc3QgeiBpbiBQKXtjb25zdCBOPSgwLHAuY29udmVydFRvQ1NWKShQLHopO2lmKCJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdUSCI9PT1OKXRocm93IG5ldyBFcnJvcigiVGhlIG1heCBsZW5ndGggb2YgYSBzdHJpbmcgdmFsdWUgaW4g''@;'; put 'put ''U0FTanMgaXMgMzI3NjUgY2hhcmFjdGVycy4iKTtjb25zdCBPPXlpZWxkIHcudXBsb2FkRmlsZSgiL2ZpbGVzL2ZpbGVzI3Jhd1VwbG9hZCIsTixGKS5jYXRjaChLPT57dGhyb3coMCxfLnByZWZpeE1lc3NhZ2UpKEssIkVycm9yIHdoaWxlIHVwbG9hZGluZyBmaWxlLiAiKX0pO1IucHVzaCh7''@;'; put 'put ''dGFibGVOYW1lOnosZmlsZTpPLnJlc3VsdH0pfXJldHVybiBSfSl9fSw2MTMxOmZ1bmN0aW9uKGNlLFgpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oXyxwLFYsdyl7cmV0dXJuIG5ldyhWfHwoVj1Qcm9taXNlKSkoZnVuY3Rpb24oRixSKXtmdW5j''@;'; put 'put ''dGlvbiB6KEspe3RyeXtPKHcubmV4dChLKSl9Y2F0Y2goWil7UihaKX19ZnVuY3Rpb24gTihLKXt0cnl7Tyh3LnRocm93KEspKX1jYXRjaChaKXtSKFopfX1mdW5jdGlvbiBPKEspe0suZG9uZT9GKEsudmFsdWUpOmZ1bmN0aW9uIFAoRil7cmV0dXJuIEYgaW5zdGFuY2VvZiBWP0Y6bmV3IFYo''@;'; put 'put ''ZnVuY3Rpb24oUil7UihGKX0pfShLLnZhbHVlKS50aGVuKHosTil9Tygodz13LmFwcGx5KF8scHx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLndyaXRlU3RyZWFtPXZvaWQgMCxYLndyaXRlU3RyZWFtPShfLHApPT5i''@;'; put 'put ''KHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoVix3KT0+e18ud3JpdGUocCsiXG4iLFA9PntQP3coUCk6VighMCl9KX0pfSl9LDI4NTE6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9Yig1MTA4KSxfPWIoNDE1NSkscD10aGlz''@;'; put 'put ''JiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oWSxXLHEsZWUpe3JldHVybiBuZXcocXx8KHE9UHJvbWlzZSkpKGZ1bmN0aW9uKHJlLGllKXtmdW5jdGlvbiB1ZShUZSl7dHJ5e19lKGVlLm5leHQoVGUpKX1jYXRjaChNZSl7aWUoTWUpfX1mdW5jdGlvbiBnZShUZSl7dHJ5e19lKGVlLnRocm93''@;'; put 'put ''KFRlKSl9Y2F0Y2goTWUpe2llKE1lKX19ZnVuY3Rpb24gX2UoVGUpe1RlLmRvbmU/cmUoVGUudmFsdWUpOmZ1bmN0aW9uIEoocmUpe3JldHVybiByZSBpbnN0YW5jZW9mIHE/cmU6bmV3IHEoZnVuY3Rpb24oaWUpe2llKHJlKX0pfShUZS52YWx1ZSkudGhlbih1ZSxnZSl9X2UoKGVlPWVlLmFw''@;'; put 'put ''cGx5KFksV3x8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkF1dGhNYW5hZ2VyPXZvaWQgMDtjb25zdCBWPWIoMzkwMCksdz1iKDEzOTUpLFA9Yig1OTI4KSxGPWIoMTE3MCksUj1iKDU0MTgpLHo9Yig0NTgyKSxOPWIo''@;'; put 'put ''NjU0NyksTz1iKDE1MjcpO1guQXV0aE1hbmFnZXI9Y2xhc3MgS3tjb25zdHJ1Y3RvcihXLHEsZWUsSil7dGhpcy5zZXJ2ZXJVcmw9Vyx0aGlzLnNlcnZlclR5cGU9cSx0aGlzLnJlcXVlc3RDbGllbnQ9ZWUsdGhpcy5sb2dpbkNhbGxiYWNrPUosdGhpcy51c2VyTmFtZT0iIix0aGlzLnVzZXJM''@;'; put 'put ''b25nTmFtZT0iIix0aGlzLnJlZGlyZWN0ZWRMb2dpblVybD0iL1NBU0xvZ29uIix0aGlzLmV4dHJhY3RVc2VyTmFtZT1yZT0+e3N3aXRjaCh0aGlzLnNlcnZlclR5cGUpe2Nhc2UgVi5TZXJ2ZXJUeXBlLlNhc1ZpeWE6cmV0dXJuIHJlPy5pZDtjYXNlIFYuU2VydmVyVHlwZS5TYXM5OnJldHVy''@;'; put 'put ''biIiO2Nhc2UgVi5TZXJ2ZXJUeXBlLlNhc2pzOnJldHVybiByZT8udXNlcm5hbWU7ZGVmYXVsdDpyZXR1cm4gSS5lcnJvcigiU2VydmVyIFR5cGUgbm90IGZvdW5kIGluIGV4dHJhY3RVc2VyTmFtZSBmdW5jdGlvbiIpLCIifX0sdGhpcy5leHRyYWN0VXNlckxvbmdOYW1lPXJlPT57c3dpdGNo''@;'; put 'put ''KHRoaXMuc2VydmVyVHlwZSl7Y2FzZSBWLlNlcnZlclR5cGUuU2FzVml5YTpyZXR1cm4gcmU/Lm5hbWU7Y2FzZSBWLlNlcnZlclR5cGUuU2FzOTpyZXR1cm4oMCxGLmV4dHJhY3RVc2VyTG9uZ05hbWVTYXM5KShyZSk7Y2FzZSBWLlNlcnZlclR5cGUuU2FzanM6cmV0dXJuIHJlPy5kaXNwbGF5''@;'; put 'put ''TmFtZTtkZWZhdWx0OnJldHVybiBJLmVycm9yKCJTZXJ2ZXIgVHlwZSBub3QgZm91bmQgaW4gZXh0cmFjdFVzZXJOYW1lIGZ1bmN0aW9uIiksIiJ9fSx0aGlzLnNldExvZ2luVXJsPXJlPT57bGV0IGllPXJlWzFdLnJlcGxhY2UoL1w/LiovLCIiKTtpZigiLyI9PT1pZVswXSl7aWU9aWUuc3Vi''@;'; put 'put ''c3RyKDEpO2NvbnN0IHVlPXRoaXMuc2VydmVyVXJsP2Ake3RoaXMuc2VydmVyVXJsfS8ke2llfWA6YCR7aWV9YDt0aGlzLmxvZ2luVXJsPXRoaXMuc2VydmVyVHlwZT09PVYuU2VydmVyVHlwZS5TYXNWaXlhP3VlOnVlLnJlcGxhY2UoIi9TQVNMb2dvbi9sb2dpbi5kbyIsIi9TQVNMb2dvbi9s''@;'; put 'put ''b2dpbiIpfX0sdGhpcy5sb2dpblVybD0iL1NBU0xvZ29uL2xvZ2luIix0aGlzLmxvZ291dFVybD10aGlzLnNlcnZlclR5cGU9PT1WLlNlcnZlclR5cGUuU2FzOT8iL1NBU0xvZ29uL2xvZ291dD8iOnRoaXMuc2VydmVyVHlwZT09PVYuU2VydmVyVHlwZS5TYXNWaXlhPyIvU0FTTG9nb24vbG9n''@;'; put 'put ''b3V0LmRvPyI6Ii9TQVNMb2dvbi9sb2dvdXQiLHRoaXMucmVkaXJlY3RlZExvZ2luVXJsPXRoaXMuc2VydmVyVXJsK3RoaXMucmVkaXJlY3RlZExvZ2luVXJsfXJlZGlyZWN0ZWRMb2dJbih7b25Mb2dnZWRPdXQ6V30pe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtj''@;'; put 'put ''b25zdHtpc0xvZ2dlZEluOnEsdXNlck5hbWU6ZWUsdXNlckxvbmdOYW1lOkp9PXlpZWxkIHRoaXMuZmV0Y2hVc2VyTmFtZSgpO2lmKHEpcmV0dXJuKF8ubG9nZ2VyfHxJKS5sb2coImxvZ2luIHdhcyBub3QgYXR0ZW1wdGVkIGFzIGEgdmFsaWQgc2Vzc2lvbiBhbHJlYWR5IGV4aXN0cyIpLHlp''@;'; put 'put ''ZWxkIHRoaXMubG9naW5DYWxsYmFjaygpLHtpc0xvZ2dlZEluOiEwLHVzZXJOYW1lOmVlLHVzZXJMb25nTmFtZTpKfTtjb25zdCByZT15aWVsZCgwLFIub3BlbldlYlBhZ2UpKHRoaXMucmVkaXJlY3RlZExvZ2luVXJsLCJTQVNMb2dvbiIse3dpZHRoOjUwMCxoZWlnaHQ6NjAwfSxXKTtpZigh''@;'; put 'put ''cmUpcmV0dXJue2lzTG9nZ2VkSW46ITEsdXNlck5hbWU6IiIsdXNlckxvbmdOYW1lOiIifTtjb25zdHtpc0xvZ2dlZEluOmllfT10aGlzLnNlcnZlclR5cGU9PT1WLlNlcnZlclR5cGUuU2FzVml5YT95aWVsZCgwLE4udmVyaWZ5U2FzVml5YUxvZ2luKShyZSk6eWllbGQoMCx6LnZlcmlmeVNh''@;'; put 'put ''czlMb2dpbikocmUpO2lmKHJlLmNsb3NlKCksaWUpe3RoaXMuc2VydmVyVHlwZT09PVYuU2VydmVyVHlwZS5TYXM5JiYoeWllbGQgdGhpcy5wZXJmb3JtQ0FTU2VjdXJpdHlDaGVjaygpKTtjb25zdHt1c2VyTmFtZTp1ZSx1c2VyTG9uZ05hbWU6Z2V9PXlpZWxkIHRoaXMuZmV0Y2hVc2VyTmFt''@;'; put 'put ''ZSgpO3JldHVybiB5aWVsZCB0aGlzLmxvZ2luQ2FsbGJhY2soKSx7aXNMb2dnZWRJbjohMCx1c2VyTmFtZTp1ZSx1c2VyTG9uZ05hbWU6Z2V9fXJldHVybntpc0xvZ2dlZEluOiExLHVzZXJOYW1lOiIiLHVzZXJMb25nTmFtZToiIn19KX1sb2dJbihXLHEpe3JldHVybiBwKHRoaXMsdm9pZCAw''@;'; put 'put ''LHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBlZT17X3NlcnZpY2U6ImRlZmF1bHQiLHVzZXJuYW1lOlcscGFzc3dvcmQ6cX07dGhpcy51c2VyTmFtZT0iIix0aGlzLnVzZXJMb25nTmFtZT0iIjtsZXR7aXNMb2dnZWRJbjpKLGxvZ2luRm9ybTpyZSx1c2VyTG9uZ05hbWU6aWV9PXlpZWxkIHRo''@;'; put 'put ''aXMuY2hlY2tTZXNzaW9uKCk7aWYoSilyZXR1cm4oXy5sb2dnZXJ8fEkpLmxvZygibG9naW4gd2FzIG5vdCBhdHRlbXB0ZWQgYXMgYSB2YWxpZCBzZXNzaW9uIGFscmVhZHkgZXhpc3RzIikseWllbGQgdGhpcy5sb2dpbkNhbGxiYWNrKCksdGhpcy51c2VyTmFtZT1lZS51c2VybmFtZSx0aGlz''@;'; put 'put ''LnVzZXJMb25nTmFtZT1pZSx7aXNMb2dnZWRJbjohMCx1c2VyTmFtZTp0aGlzLnVzZXJOYW1lLHVzZXJMb25nTmFtZTp0aGlzLnVzZXJMb25nTmFtZX07bGV0IHVlPXlpZWxkIHRoaXMuc2VuZExvZ2luUmVxdWVzdChyZSxlZSksZ2U9KDAsTy5pc0xvZ0luU3VjY2Vzc0hlYWRlclByZXNlbnQp''@;'; put 'put ''KHRoaXMuc2VydmVyVHlwZSx1ZSk7aWYoIWdlKXtpZihaKHVlKSl7Y29uc3QgVGU9eWllbGQgdGhpcy5nZXRMb2dpbkZvcm0odWUpO3VlPXlpZWxkIHRoaXMuc2VuZExvZ2luUmVxdWVzdChUZSxlZSl9Y29uc3QgX2U9eWllbGQgdGhpcy5jaGVja1Nlc3Npb24oKTtnZT1fZS5pc0xvZ2dlZElu''@;'; put 'put ''LHRoaXMudXNlckxvbmdOYW1lPV9lLnVzZXJMb25nTmFtZX1yZXR1cm4gZ2UmJih0aGlzLnNlcnZlclR5cGU9PT1WLlNlcnZlclR5cGUuU2FzOSYmKHlpZWxkIHRoaXMucGVyZm9ybUNBU1NlY3VyaXR5Q2hlY2soKSksdGhpcy5sb2dpbkNhbGxiYWNrKCksdGhpcy51c2VyTmFtZT1lZS51c2Vy''@;'; put 'put ''bmFtZSkse2lzTG9nZ2VkSW46Z2UsdXNlck5hbWU6dGhpcy51c2VyTmFtZSx1c2VyTG9uZ05hbWU6dGhpcy51c2VyTG9uZ05hbWV9fSl9cGVyZm9ybUNBU1NlY3VyaXR5Q2hlY2soKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVz1gJHt0aGlzLnNlcnZl''@;'; put 'put ''clVybH0vU0FTU3RvcmVkUHJvY2Vzcy9qX3NwcmluZ19jYXNfc2VjdXJpdHlfY2hlY2tgO3lpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYC9TQVNMb2dvbi9sb2dpbj9zZXJ2aWNlPSR7V31gLHZvaWQgMCkuY2F0Y2gocT0+e2lmKCEocSBpbnN0YW5jZW9mIHcuTm90Rm91bmRFcnJvcikp''@;'; put 'put ''dGhyb3cgcX0pfSl9c2VuZExvZ2luUmVxdWVzdChXLHEpe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZih0aGlzLnNlcnZlclR5cGU9PT1WLlNlcnZlclR5cGUuU2FzanMpe2NvbnN0e3VzZXJuYW1lOnJlLHBhc3N3b3JkOmllfT1xLHtyZXN1bHQ6dWV9PXlpZWxk''@;'; put 'put ''IHRoaXMucmVxdWVzdENsaWVudC5wb3N0KHRoaXMubG9naW5Vcmwse3VzZXJuYW1lOnJlLHBhc3N3b3JkOmllfSx2b2lkIDApO3JldHVybiB1ZX1mb3IoY29uc3QgcmUgaW4gVylxW3JlXT1XW3JlXTtjb25zdCBlZT0oMCxQLnNlcmlhbGl6ZSkocSkse3Jlc3VsdDpKfT15aWVsZCB0aGlzLnJl''@;'; put 'put ''cXVlc3RDbGllbnQucG9zdCh0aGlzLmxvZ2luVXJsLGVlLHZvaWQgMCwidGV4dC9wbGFpbiIseyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLEFjY2VwdDoiKi8qIn0pO3JldHVybiBKfSl9Y2hlY2tTZXNzaW9uKCl7cmV0dXJuIHAodGhpcyx2b2lk''@;'; put 'put ''IDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e2lzTG9nZ2VkSW46Vyx1c2VyTmFtZTpxLHVzZXJMb25nTmFtZTplZX09eWllbGQgdGhpcy5mZXRjaFVzZXJOYW1lKCk7bGV0IEo9bnVsbDtyZXR1cm4gV3x8KHlpZWxkIHRoaXMubG9nT3V0KCksSj15aWVsZCB0aGlzLmdldE5ld0xvZ2luRm9y''@;'; put 'put ''bSgpKSxQcm9taXNlLnJlc29sdmUoe2lzTG9nZ2VkSW46Vyx1c2VyTmFtZTpxLHVzZXJMb25nTmFtZTplZSxsb2dpbkZvcm06Sn0pfSl9Z2V0TmV3TG9naW5Gb3JtKCl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKHRoaXMuc2VydmVyVHlwZT09PVYuU2VydmVy''@;'; put 'put ''VHlwZS5TYXNqcylyZXR1cm4gdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiLyIsdm9pZCAwKS50aGVuKCh7cmVzdWx0OnF9KT0+e3ZhciBlZTtjb25zdCBKPW51bGw9PT0oZWU9LzxzY3JpcHQ+ZG9jdW1lbnQuY29va2llID0gJyhYU1JGLVRPS0VOPS4qOyBNYXgtQWdlPTg2NDAwOyBTYW1lU2l0''@;'; put 'put ''ZT1TdHJpY3Q7IFBhdGg9XC87KSc8XC9zY3JpcHQ+Ly5leGVjKHEpKXx8dm9pZCAwPT09ZWU/dm9pZCAwOmVlWzFdO0omJihkb2N1bWVudC5jb29raWU9Sil9KTtjb25zdHtyZXN1bHQ6V309eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCh0aGlzLmxvZ2luVXJsLnJlcGxhY2UoIi9TQVNM''@;'; put 'put ''b2dvbi9sb2dpbi5kbyIsIi9TQVNMb2dvbi9sb2dpbiIpLHZvaWQgMCwidGV4dC9wbGFpbiIpO3JldHVybiB5aWVsZCB0aGlzLmdldExvZ2luRm9ybShXKX0pfWZldGNoVXNlck5hbWUoKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVz10aGlzLnNlcnZl''@;'; put 'put ''clR5cGU9PT1WLlNlcnZlclR5cGUuU2FzVml5YT9gJHt0aGlzLnNlcnZlclVybH0vaWRlbnRpdGllcy91c2Vycy9AY3VycmVudFVzZXJgOnRoaXMuc2VydmVyVHlwZT09PVYuU2VydmVyVHlwZS5TYXM5P2Ake3RoaXMuc2VydmVyVXJsfS9TQVNTdG9yZWRQcm9jZXNzYDpgJHt0aGlzLnNlcnZl''@;'; put 'put ''clVybH0vU0FTanNBcGkvc2Vzc2lvbmAse3Jlc3VsdDpxfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KFcsdm9pZCAwLCJ0ZXh0L3BsYWluIikuY2F0Y2goSj0+KHtyZXN1bHQ6ImF1dGhFcnIifSkpLGVlPSJhdXRoRXJyIiE9PXE7cmV0dXJuIGVlP3tpc0xvZ2dlZEluOmVlLHVzZXJO''@;'; put 'put ''YW1lOnRoaXMuZXh0cmFjdFVzZXJOYW1lKHEpLHVzZXJMb25nTmFtZTp0aGlzLmV4dHJhY3RVc2VyTG9uZ05hbWUocSl9Oih5aWVsZCB0aGlzLmxvZ091dCgpLHtpc0xvZ2dlZEluOmVlLHVzZXJOYW1lOiIiLHVzZXJMb25nTmFtZToiIn0pfSl9Z2V0TG9naW5Gb3JtKFcpe2NvbnN0IGVlPS88''@;'; put 'put ''Zm9ybS4rYWN0aW9uPSIoLiooTG9nb258bG9naW4pW14iXSopLio+Ly5leGVjKFcpLEo9e307aWYoZWUmJmVlLmxlbmd0aCl7dGhpcy5zZXRMb2dpblVybChlZSk7Y29uc3QgcmU9KFc9Vy5yZXBsYWNlKC88aW5wdXQvZywiXG48aW5wdXQiKSkubWF0Y2goLzxpbnB1dC4qImhpZGRlbiJbXj5d''@;'; put 'put ''Kj4vZyk7cmUmJnJlLmZvckVhY2goaWU9Pntjb25zdCB1ZT1pZS5tYXRjaCgvbmFtZT0iKFteIl0qKSJcc3ZhbHVlPSIoW14iXSopLyk7dWUmJnVlLmxlbmd0aCYmKEpbdWVbMV1dPXVlWzJdKX0pfXJldHVybiBPYmplY3Qua2V5cyhKKS5sZW5ndGg/SjpudWxsfWxvZ091dCgpe3JldHVybiBw''@;'; put 'put ''KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5yZXF1ZXN0Q2xpZW50LmNsZWFyQ3NyZlRva2VucygpLHRoaXMucmVxdWVzdENsaWVudC5nZXQodGhpcy5sb2dvdXRVcmwsdm9pZCAwKS50aGVuKCgpPT4hMCl9KX19O2NvbnN0IFo9WT0+L0FuIGVycm9yIG9jY3Vy''@;'; put 'put ''cmVkIHdoaWxlIHRoZSBzeXN0ZW0gd2FzIHZlcmlmeWluZyB5b3VyIGNyZWRlbnRpYWxzLiBQbGVhc2UgZW50ZXIgeW91ciBjcmVkZW50aWFscyBhZ2Fpbi4vZ20udGVzdChZKX0sNTc6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1''@;'; put 'put ''bmN0aW9uKFAsRixSLHope3JldHVybiBuZXcoUnx8KFI9UHJvbWlzZSkpKGZ1bmN0aW9uKE8sSyl7ZnVuY3Rpb24gWihxKXt0cnl7Vyh6Lm5leHQocSkpfWNhdGNoKGVlKXtLKGVlKX19ZnVuY3Rpb24gWShxKXt0cnl7Vyh6LnRocm93KHEpKX1jYXRjaChlZSl7SyhlZSl9fWZ1bmN0aW9uIFco''@;'; put 'put ''cSl7cS5kb25lP08ocS52YWx1ZSk6ZnVuY3Rpb24gTihPKXtyZXR1cm4gTyBpbnN0YW5jZW9mIFI/TzpuZXcgUihmdW5jdGlvbihLKXtLKE8pfSl9KHEudmFsdWUpLnRoZW4oWixZKX1XKCh6PXouYXBwbHkoUCxGfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9f''@;'; put 'put ''ZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2V0QWNjZXNzVG9rZW5Gb3JTYXNqcz12b2lkIDA7Y29uc3QgXz1iKDk3NzgpLHA9Yig5MDE3KSxWPWIoMzkwMCk7WC5nZXRBY2Nlc3NUb2tlbkZvclNhc2pzPWZ1bmN0aW9uIHcoUCxGLFIpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5j''@;'; put 'put ''dGlvbiooKXtjb25zdCB6PSIvU0FTanNBcGkvYXV0aC90b2tlbiIsTj17Y2xpZW50SWQ6Rixjb2RlOlJ9O3JldHVybiB5aWVsZCBQLnBvc3QoeixOLHZvaWQgMCkudGhlbihPPT57Y29uc3QgSz1PLnJlc3VsdDtyZXR1cm57YWNjZXNzX3Rva2VuOksuYWNjZXNzVG9rZW4scmVmcmVzaF90b2tl''@;'; put 'put ''bjpLLnJlZnJlc2hUb2tlbn19KS5jYXRjaChPPT57dGhyb3coMCxfLnByZWZpeE1lc3NhZ2UpKE8sKDAscC5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeCkoImZldGNoaW5nIGFjY2VzcyB0b2tlbiIsImdldEFjY2Vzc1Rva2VuRm9yU2FzanMiLFYuU2VydmVyVHlwZS5TYXNqcyx6LE4sRikp''@;'; put 'put ''fSl9KX19LDM1Njk6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9Yig4NzY0KS5CdWZmZXIsXz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oUix6LE4sTyl7cmV0dXJuIG5ldyhOfHwoTj1Qcm9taXNlKSkoZnVuY3Rpb24oWixZKXtmdW5jdGlvbiBXKEope3RyeXtl''@;'; put 'put ''ZShPLm5leHQoSikpfWNhdGNoKHJlKXtZKHJlKX19ZnVuY3Rpb24gcShKKXt0cnl7ZWUoTy50aHJvdyhKKSl9Y2F0Y2gocmUpe1kocmUpfX1mdW5jdGlvbiBlZShKKXtKLmRvbmU/WihKLnZhbHVlKTpmdW5jdGlvbiBLKFope3JldHVybiBaIGluc3RhbmNlb2YgTj9aOm5ldyBOKGZ1bmN0aW9u''@;'; put 'put ''KFkpe1koWil9KX0oSi52YWx1ZSkudGhlbihXLHEpfWVlKChPPU8uYXBwbHkoUix6fHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2V0QWNjZXNzVG9rZW5Gb3JWaXlhPXZvaWQgMDtjb25zdCBwPWIoMzkwMCksVj1i''@;'; put 'put ''KDk3NzgpLHc9YigxMzk1KSxQPWIoOTAxNyk7WC5nZXRBY2Nlc3NUb2tlbkZvclZpeWE9ZnVuY3Rpb24gRihSLHosTixPKXtyZXR1cm4gXyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IEs7Sz10eXBlb2YgST4idSI/YnRvYSh6KyI6IitOKTpJLmZyb20oeisiOiIrTikudG9T''@;'; put 'put ''dHJpbmcoImJhc2U2NCIpO2NvbnN0IFo9Ii9TQVNMb2dvbi9vYXV0aC90b2tlbiIsWT17QXV0aG9yaXphdGlvbjoiQmFzaWMgIitLLEFjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9LFc9bmV3IFVSTFNlYXJjaFBhcmFtcyh7Z3JhbnRfdHlwZToiYXV0aG9yaXphdGlvbl9jb2RlIixjb2RlOk99''@;'; put 'put ''KSxxPW5ldyBVUkxTZWFyY2hQYXJhbXMoVyk7cmV0dXJuIHlpZWxkIFIucG9zdChaLHEsdm9pZCAwLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLFkpLnRoZW4oSj0+Si5yZXN1bHQpLmNhdGNoKEo9Pnt0aHJvdyBKIGluc3RhbmNlb2Ygdy5DZXJ0aWZpY2F0ZUVycm9yP0o6''@;'; put 'put ''KDAsVi5wcmVmaXhNZXNzYWdlKShKLCgwLFAuZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXgpKCJmZXRjaGluZyBhY2Nlc3MgdG9rZW4iLCJnZXRBY2Nlc3NUb2tlbkZvclZpeWEiLHAuU2VydmVyVHlwZS5TYXNWaXlhLFosVyxZLHosTikpfSl9KX19LDkwMTc6KGNlLFgsYik9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXhSZXNwb25zZT1YLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4PXZvaWQgMDtjb25zdCBJPWIoMzkwMCkscD1QPT5gUmVzcG9uc2UgZnJvbSAk''@;'; put 'put ''eyhQPT5QPT09SS5TZXJ2ZXJUeXBlLlNhc1ZpeWE/IlZpeWEiOiJTYXNqcyIpKFApfSBpcyBiZWxvdy5gO1guZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXg9KFAsRixSLHosTixPLEssWik9Pntjb25zdCBZPXE9PkpTT04uc3RyaW5naWZ5KHEsbnVsbCwyKSxXPVtgRXJyb3Igd2hpbGUgJHtQ''@;'; put 'put ''fSBmcm9tICR7en1gLGBUaHJvd24gYnkgdGhlIEBzYXNqcy9hZGFwdGVyICR7Rn0gZnVuY3Rpb24uYF07cmV0dXJuIE4mJihXLnB1c2goIlBheWxvYWQ6IiksVy5wdXNoKFkoTikpKSxPJiYoVy5wdXNoKCJIZWFkZXJzOiIpLFcucHVzaChZKE8pKSksSyYmVy5wdXNoKGBDbGllbnRJZDogJHtL''@;'; put 'put ''fWApLFomJlcucHVzaChgQ2xpZW50U2VjcmV0OiAke1p9YCksVy5wdXNoKCIiKSxXLnB1c2goYCR7cChSKX1gKSxXLnB1c2goIiIpLFcuam9pbigiXG4iKX0sWC5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeFJlc3BvbnNlPShQLEYpPT5QLnNwbGl0KGAke3AoRil9XG5gKS5wb3AoKX0sNzA0''@;'; put 'put ''OmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3QiO3ZhciBJPWIoNDE1NSksXz1iKDUxMDgpLHA9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHosTixPLEspe3JldHVybiBuZXcoT3x8KE89UHJvbWlzZSkpKGZ1bmN0aW9uKFksVyl7ZnVuY3Rpb24gcShyZSl7dHJ5e0ooSy5uZXh0''@;'; put 'put ''KHJlKSl9Y2F0Y2goaWUpe1coaWUpfX1mdW5jdGlvbiBlZShyZSl7dHJ5e0ooSy50aHJvdyhyZSkpfWNhdGNoKGllKXtXKGllKX19ZnVuY3Rpb24gSihyZSl7cmUuZG9uZT9ZKHJlLnZhbHVlKTpmdW5jdGlvbiBaKFkpe3JldHVybiBZIGluc3RhbmNlb2YgTz9ZOm5ldyBPKGZ1bmN0aW9uKFcp''@;'; put 'put ''e1coWSl9KX0ocmUudmFsdWUpLnRoZW4ocSxlZSl9SigoSz1LLmFwcGx5KHosTnx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmdldFRva2Vucz12b2lkIDA7Y29uc3QgVj1iKDY3OTkpLHc9YigzOTAwKSxQPWIoMzY2''@;'; put 'put ''KSxGPWIoMjQ5KTtYLmdldFRva2Vucz1mdW5jdGlvbiBSKHosTixPPXcuU2VydmVyVHlwZS5TYXNWaXlhKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgSz1JLmxvZ2dlcnx8XztsZXR7YWNjZXNzX3Rva2VuOloscmVmcmVzaF90b2tlbjpZLGNsaWVudDpX''@;'; put 'put ''LHNlY3JldDpxfT1OO2lmKCgwLFYuaXNBY2Nlc3NUb2tlbkV4cGlyaW5nKShaKXx8KDAsVi5pc1JlZnJlc2hUb2tlbkV4cGlyaW5nKShZKSl7aWYoKDAsVi5oYXNUb2tlbkV4cGlyZWQpKFkpKXtjb25zdCBKPSJVbmFibGUgdG8gb2J0YWluIG5ldyBhY2Nlc3MgdG9rZW4uIFlvdXIgcmVmcmVz''@;'; put 'put ''aCB0b2tlbiBoYXMgZXhwaXJlZC4iO3Rocm93IEsuZXJyb3IoSiksbmV3IEVycm9yKEopfUsuaW5mbygiUmVmcmVzaGluZyBhY2Nlc3MgYW5kIHJlZnJlc2ggdG9rZW5zLiIpLCh7YWNjZXNzX3Rva2VuOloscmVmcmVzaF90b2tlbjpZfT1PPT09dy5TZXJ2ZXJUeXBlLlNhc1ZpeWE/eWllbGQo''@;'; put 'put ''MCxQLnJlZnJlc2hUb2tlbnNGb3JWaXlhKSh6LFcscSxZKTp5aWVsZCgwLEYucmVmcmVzaFRva2Vuc0ZvclNhc2pzKSh6LFkpKX1yZXR1cm57YWNjZXNzX3Rva2VuOloscmVmcmVzaF90b2tlbjpZLGNsaWVudDpXLHNlY3JldDpxfX0pfX0sMTUyNzpmdW5jdGlvbihjZSxYLGIpeyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24ocCxWLHcsUCl7dm9pZCAwPT09UCYmKFA9dyk7dmFyIEY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihWLHcpOyghRnx8KCJnZXQiaW4gRj8hVi5fX2VzTW9kdWxlOkYu''@;'; put 'put ''d3JpdGFibGV8fEYuY29uZmlndXJhYmxlKSkmJihGPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBWW3ddfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLFAsRil9OmZ1bmN0aW9uKHAsVix3LFApe3ZvaWQgMD09PVAmJihQPXcpLHBbUF09Vlt3XX0pLF89dGhpcyYmdGhp''@;'; put 'put ''cy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKHAsVil7Zm9yKHZhciB3IGluIHApImRlZmF1bHQiIT09dyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWLHcpJiZJKFYscCx3KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8o''@;'; put 'put ''YigyODUxKSxYKSxfKGIoOTA5NyksWCksXyhiKDkxNjYpLFgpLF8oYig2NjQzKSxYKX0sOTA5NzooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguaXNBdXRob3JpemVGb3JtUmVxdWlyZWQ9dm9pZCAwLFguaXNB''@;'; put 'put ''dXRob3JpemVGb3JtUmVxdWlyZWQ9ST0+Lzxmb3JtLithY3Rpb249IiguKkxvZ29uXC9vYXV0aFwvYXV0aG9yaXplW14iXSopLio+L2dtLnRlc3QoSSl9LDkxNjY6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxY''@;'; put 'put ''LmlzTG9nSW5SZXF1aXJlZD12b2lkIDAsWC5pc0xvZ0luUmVxdWlyZWQ9ST0+Lzxmb3JtLithY3Rpb249IiguKihMb2dvbil8KGxvZ2luKVteIl0qKS4qPi9nbS50ZXN0KEkpfSw2NjQzOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxl''@;'; put 'put ''Iix7dmFsdWU6ITB9KSxYLmlzTG9nSW5TdWNjZXNzSGVhZGVyUHJlc2VudD1YLmdldEV4cGVjdGVkTG9nSW5TdWNjZXNzSGVhZGVyPVgubG9naW5TdWNjZXNzSGVhZGVycz1YLmRlZmF1bHRTdWNjZXNzSGVhZGVyS2V5PXZvaWQgMDtjb25zdCBJPWIoMzkwMCksXz1iKDU5MjgpLHA9IllvdSBo''@;'; put 'put ''YXZlIHNpZ25lZCBpbi4iO1guZGVmYXVsdFN1Y2Nlc3NIZWFkZXJLZXk9ImRlZmF1bHQiLFgubG9naW5TdWNjZXNzSGVhZGVycz17ZXM6IllhIHNlIGhhIGluaWNpYWRvIGxhIHNlc2lceGYzbi4iLHRoOiJcdTBlMDRcdTBlMzhcdTBlMTNcdTBlMjVcdTBlMDdcdTBlMGFcdTBlMzdcdTBlNDhc''@;'; put 'put ''dTBlMmRcdTBlNDBcdTBlMDJcdTBlNDlcdTBlMzJcdTBlNDNcdTBlMGFcdTBlNDlcdTBlNDFcdTBlMjVcdTBlNDlcdTBlMjciLGphOiJcdTMwYjVcdTMwYTRcdTMwZjNcdTMwYTRcdTMwZjNcdTMwNTdcdTMwN2VcdTMwNTdcdTMwNWZcdTMwMDIiLG5iOiJEdSBoYXIgbG9nZ2V0IGRlZyBwXHhl''@;'; put 'put ''NS4iLHNsOiJQcmlqYXZpbGkgc3RlIHNlLiIsYXI6Ilx1MDY0NFx1MDY0Mlx1MDYyZiBcdTA2NDJcdTA2NDVcdTA2MmEgIixzazoiUHJpaGxceGUxc2lsaSBzdGUgc2EuIix6aF9ISzoiXHU2MGE4XHU1ZGYyXHU3NjdiXHU1MTY1XHUzMDAyIix6aF9DTjoiXHU2MGE4XHU1ZGYyXHU3NjdiXHU1''@;'; put 'put ''ZjU1XHUzMDAyIixpdDoiTCd1dGVudGUgc2kgXHhlOCBjb25uZXNzby4iLHN2OiJEdSBoYXIgbG9nZ2F0IGluLiIsaGU6Ilx1MDVlMFx1MDVkYlx1MDVlMFx1MDVlMVx1MDVlYSAiLG5sOiJVIGhlYnQgemljaCBhYW5nZW1lbGQuIixwbDoiWm9zdGFcdTAxNDJlXHUwMTViIHphbG9nb3dhbnku''@;'; put 'put ''IixrbzoiXHViODVjXHVhZGY4XHVjNzc4XHVkNTg4XHVjMmI1XHViMmM4XHViMmU0LiIsemhfVFc6Ilx1NjBhOFx1NWRmMlx1NzY3Ylx1NTE2NVx1MzAwMiIsdHI6Ik90dXJ1bSBhXHhlN3RcdTAxMzFuXHUwMTMxei4iLGl3OiJcdTA1ZTBcdTA1ZGJcdTA1ZTBcdTA1ZTFcdTA1ZWEgIixmcjoi''@;'; put 'put ''Vm91cyBceGVhdGVzIGNvbm5lY3RceGU5LiIsdWs6Ilx1MDQxMlx1MDQzOCBcdTA0MzJcdTA0MzJcdTA0NTZcdTA0MzlcdTA0NDhcdTA0M2JcdTA0MzggXHUwNDMyIFx1MDQzZVx1MDQzMVx1MDQzYlx1MDQ1Nlx1MDQzYVx1MDQzZVx1MDQzMlx1MDQzOFx1MDQzOSBcdTA0MzdcdTA0MzBcdTA0''@;'; put 'put ''M2ZcdTA0MzhcdTA0NDEuIixwdF9CUjoiVm9jXHhlYSBzZSBjb25lY3RvdS4iLG5vOiJEdSBoYXIgbG9nZ2V0IGRlZyBwXHhlNS4iLGNzOiJKc3RlIHBcdTAxNTlpaGxceGUxXHUwMTYxZW5pLiIsZmk6Ik9sZXQga2lyamF1dHVudXQgc2lzXHhlNFx4ZTRuLiIscnU6Ilx1MDQxMlx1MDQ0YiBc''@;'; put 'put ''dTA0MzJcdTA0NGJcdTA0M2ZcdTA0M2VcdTA0M2JcdTA0M2RcdTA0MzhcdTA0M2JcdTA0MzggXHUwNDMyXHUwNDQ1XHUwNDNlXHUwNDM0IFx1MDQzMiBcdTA0NDFcdTA0MzhcdTA0NDFcdTA0NDJcdTA0MzVcdTA0M2NcdTA0NDMuIixlbDoiXHUwMzg4XHUwM2M3XHUwM2I1XHUwM2M0XHUwM2I1''@;'; put 'put ''IFx1MDNjM1x1MDNjNVx1MDNiZFx1MDNiNFx1MDNiNVx1MDNiOFx1MDNiNVx1MDNhZi4iLGhyOiJQcmlqYXZpbGkgc3RlIHNlLiIsZGE6IkR1IGVyIGxvZ2dldCBwXHhlNS4iLGRlOiJTaWUgc2luZCBqZXR6dCBhbmdlbWVsZGV0LiIsc2g6IlByaWphdmxqZW5pIHN0ZS4iLHB0OiJJbmljaW91''@;'; put 'put ''IHNlc3NceGUzby4iLGh1OiJCZWplbGVudGtlemV0dC4iLHNyOiJQcmlqYXZsamVuaSBzdGUuIixlbjpwLFtYLmRlZmF1bHRTdWNjZXNzSGVhZGVyS2V5XTpwfSxYLmdldEV4cGVjdGVkTG9nSW5TdWNjZXNzSGVhZGVyPSgpPT57bGV0IFA9WC5sb2dpblN1Y2Nlc3NIZWFkZXJzW1guZGVmYXVs''@;'; put 'put ''dFN1Y2Nlc3NIZWFkZXJLZXldO2NvbnN0IEY9KDAsXy5nZXRVc2VyTGFuZ3VhZ2UpKCk7aWYoRil7bGV0IFI9WC5sb2dpblN1Y2Nlc3NIZWFkZXJzW0ZdO2lmKFIpUD1SO2Vsc2V7Y29uc3QgTj1PYmplY3Qua2V5cyhYLmxvZ2luU3VjY2Vzc0hlYWRlcnMpLmZpbmQoTz0+bmV3IFJlZ0V4cChP''@;'; put 'put ''LCJpIikudGVzdChGKSk7TiYmKFA9WC5sb2dpblN1Y2Nlc3NIZWFkZXJzW05dKX19cmV0dXJuIFB9LFguaXNMb2dJblN1Y2Nlc3NIZWFkZXJQcmVzZW50PShQLEYpPT5QPT09SS5TZXJ2ZXJUeXBlLlNhc2pzP0Y/LmxvZ2dlZEluOm5ldyBSZWdFeHAoKDAsWC5nZXRFeHBlY3RlZExvZ0luU3Vj''@;'; put 'put ''Y2Vzc0hlYWRlcikoKSwiZ20iKS50ZXN0KEYpfSw1NDE4OmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbih3LFAsRixSKXtyZXR1cm4gbmV3KEZ8fChGPVByb21pc2UpKShmdW5jdGlvbihOLE8pe2Z1bmN0aW9uIEsoVyl7''@;'; put 'put ''dHJ5e1koUi5uZXh0KFcpKX1jYXRjaChxKXtPKHEpfX1mdW5jdGlvbiBaKFcpe3RyeXtZKFIudGhyb3coVykpfWNhdGNoKHEpe08ocSl9fWZ1bmN0aW9uIFkoVyl7Vy5kb25lP04oVy52YWx1ZSk6ZnVuY3Rpb24geihOKXtyZXR1cm4gTiBpbnN0YW5jZW9mIEY/TjpuZXcgRihmdW5jdGlvbihP''@;'; put 'put ''KXtPKE4pfSl9KFcudmFsdWUpLnRoZW4oSyxaKX1ZKChSPVIuYXBwbHkodyxQfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgub3BlbldlYlBhZ2U9dm9pZCAwO2NvbnN0IF89YigxMjEwKSxwPXt3aWR0aDo1MDAsaGVp''@;'; put 'put ''Z2h0OjYwMH07WC5vcGVuV2ViUGFnZT1mdW5jdGlvbiBWKHcsUD0iIixGPXAsUil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e3dpZHRoOnosaGVpZ2h0Ok59PUYsTz1zY3JlZW4ud2lkdGgvMi16LzIsSz1zY3JlZW4uaGVpZ2h0LzItTi8yO3JldHVybiB3''@;'; put 'put ''aW5kb3cub3Blbih3LFAsYHRvb2xiYXI9MCxsb2NhdGlvbj0wLG1lbnViYXI9MCx3aWR0aD0ke3p9LGhlaWdodD0ke059LGxlZnQ9JHtPfSx0b3A9JHtLfWApfHwoKHlpZWxkKFI/P18ub3BlbkxvZ2luUHJvbXB0KSgpKT93aW5kb3cub3Blbih3LFAsYHRvb2xiYXI9MCxsb2NhdGlvbj0wLG1l''@;'; put 'put ''bnViYXI9MCx3aWR0aD0ke3p9LGhlaWdodD0ke059LGxlZnQ9JHtPfSx0b3A9JHtLfWApOm51bGwpfSl9fSwyNDk6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFAsRixSLHope3JldHVybiBuZXcoUnx8KFI9UHJvbWlz''@;'; put 'put ''ZSkpKGZ1bmN0aW9uKE8sSyl7ZnVuY3Rpb24gWihxKXt0cnl7Vyh6Lm5leHQocSkpfWNhdGNoKGVlKXtLKGVlKX19ZnVuY3Rpb24gWShxKXt0cnl7Vyh6LnRocm93KHEpKX1jYXRjaChlZSl7SyhlZSl9fWZ1bmN0aW9uIFcocSl7cS5kb25lP08ocS52YWx1ZSk6ZnVuY3Rpb24gTihPKXtyZXR1''@;'; put 'put ''cm4gTyBpbnN0YW5jZW9mIFI/TzpuZXcgUihmdW5jdGlvbihLKXtLKE8pfSl9KHEudmFsdWUpLnRoZW4oWixZKX1XKCh6PXouYXBwbHkoUCxGfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgucmVmcmVzaFRva2Vuc0Zv''@;'; put 'put ''clNhc2pzPXZvaWQgMDtjb25zdCBfPWIoOTc3OCkscD1iKDkwMTcpLFY9YigzOTAwKTtYLnJlZnJlc2hUb2tlbnNGb3JTYXNqcz1mdW5jdGlvbiB3KFAsRil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFI9Ii9TQVNqc0FwaS9hdXRoL3JlZnJlc2giLHo9''@;'; put 'put ''e0F1dGhvcml6YXRpb246IkJlYXJlciAiK0Z9O3JldHVybiB5aWVsZCBQLnBvc3QoUix2b2lkIDAsdm9pZCAwLHZvaWQgMCx6KS50aGVuKE89Pntjb25zdCBLPU8ucmVzdWx0O3JldHVybnthY2Nlc3NfdG9rZW46Sy5hY2Nlc3NUb2tlbixyZWZyZXNoX3Rva2VuOksucmVmcmVzaFRva2VufX0p''@;'; put 'put ''LmNhdGNoKE89Pnt0aHJvdygwLF8ucHJlZml4TWVzc2FnZSkoTywoMCxwLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4KSgicmVmcmVzaGluZyB0b2tlbnMiLCJyZWZyZXNoVG9rZW5zRm9yU2FzanMiLFYuU2VydmVyVHlwZS5TYXNqcyxSKSl9KX0pfX0sMzY2OmZ1bmN0aW9uKGNlLFgsYil7''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBJPWIoODc2NCkuQnVmZmVyLF89dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKE4sTyxLLFope3JldHVybiBuZXcoS3x8KEs9UHJvbWlzZSkpKGZ1bmN0aW9uKFcscSl7ZnVuY3Rpb24gZWUoaWUpe3RyeXtyZShaLm5leHQoaWUpKX1jYXRjaCh1ZSl7cSh1''@;'; put 'put ''ZSl9fWZ1bmN0aW9uIEooaWUpe3RyeXtyZShaLnRocm93KGllKSl9Y2F0Y2godWUpe3EodWUpfX1mdW5jdGlvbiByZShpZSl7aWUuZG9uZT9XKGllLnZhbHVlKTpmdW5jdGlvbiBZKFcpe3JldHVybiBXIGluc3RhbmNlb2YgSz9XOm5ldyBLKGZ1bmN0aW9uKHEpe3EoVyl9KX0oaWUudmFsdWUp''@;'; put 'put ''LnRoZW4oZWUsSil9cmUoKFo9Wi5hcHBseShOLE98fFtdKSkubmV4dCgpKX0pfSxwPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihOKXtyZXR1cm4gTiYmTi5fX2VzTW9kdWxlP046e2RlZmF1bHQ6Tn19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7''@;'; put 'put ''dmFsdWU6ITB9KSxYLnJlZnJlc2hUb2tlbnNGb3JWaXlhPXZvaWQgMDtjb25zdCBWPWIoMzkwMCksdz1iKDk3NzgpLFA9cChiKDYyMzApKSxGPWIoNTkyOCksUj1iKDkwMTcpO1gucmVmcmVzaFRva2Vuc0ZvclZpeWE9ZnVuY3Rpb24geihOLE8sSyxaKXtyZXR1cm4gXyh0aGlzLHZvaWQgMCx2''@;'; put 'put ''b2lkIDAsZnVuY3Rpb24qKCl7aWYoISgwLEYuaXNOb2RlKSgpKXRocm93IG5ldyBFcnJvcigiTWV0aG9kICdyZWZyZXNoVG9rZW5zRm9yVml5YScgY2FuIG9ubHkgYmUgdXNlZCBieSBOb2RlLiIpO2NvbnN0IFk9Ii9TQVNMb2dvbi9vYXV0aC90b2tlbiIscT17QXV0aG9yaXphdGlvbjoiQmFz''@;'; put 'put ''aWMgIisodHlwZW9mIEk+InUiP2J0b2EoTysiOiIrSyk6SS5mcm9tKE8rIjoiK0spLnRvU3RyaW5nKCJiYXNlNjQiKSl9LGVlPW5ldyBQLmRlZmF1bHQ7cmV0dXJuIGVlLmFwcGVuZCgiZ3JhbnRfdHlwZSIsInJlZnJlc2hfdG9rZW4iKSxlZS5hcHBlbmQoInJlZnJlc2hfdG9rZW4iLFopLHlp''@;'; put 'put ''ZWxkIE4ucG9zdChZLGVlLHZvaWQgMCwibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9IitlZS5fYm91bmRhcnkscSkudGhlbihyZT0+cmUucmVzdWx0KS5jYXRjaChyZT0+e3Rocm93KDAsdy5wcmVmaXhNZXNzYWdlKShyZSwoMCxSLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4KSgi''@;'; put 'put ''cmVmcmVzaGluZyB0b2tlbnMiLCJyZWZyZXNoVG9rZW5zRm9yVml5YSIsVi5TZXJ2ZXJUeXBlLlNhc1ZpeWEsWSxlZSxxLE8sSykpfSl9KX19LDQ1ODI6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHcsUCxGLFIpe3Jl''@;'; put 'put ''dHVybiBuZXcoRnx8KEY9UHJvbWlzZSkpKGZ1bmN0aW9uKE4sTyl7ZnVuY3Rpb24gSyhXKXt0cnl7WShSLm5leHQoVykpfWNhdGNoKHEpe08ocSl9fWZ1bmN0aW9uIFooVyl7dHJ5e1koUi50aHJvdyhXKSl9Y2F0Y2gocSl7TyhxKX19ZnVuY3Rpb24gWShXKXtXLmRvbmU/TihXLnZhbHVlKTpm''@;'; put 'put ''dW5jdGlvbiB6KE4pe3JldHVybiBOIGluc3RhbmNlb2YgRj9OOm5ldyBGKGZ1bmN0aW9uKE8pe08oTil9KX0oVy52YWx1ZSkudGhlbihLLFopfVkoKFI9Ui5hcHBseSh3LFB8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSks''@;'; put 'put ''WC52ZXJpZnlTYXM5TG9naW49dm9pZCAwO2NvbnN0IF89Yig1OTI4KSxwPWIoMTUyNyk7WC52ZXJpZnlTYXM5TG9naW49ZnVuY3Rpb24gVih3KXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IFA9ITEsRj1uZXcgRGF0ZSxSPTA7ZG97aWYoeWllbGQoMCxfLmRl''@;'; put 'put ''bGF5KSgxZTMpLHcuY2xvc2VkKWJyZWFrO1A9dy53aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygiU0FTTG9nb24iKSYmdy53aW5kb3cuZG9jdW1lbnQuYm9keS5pbm5lclRleHQuaW5jbHVkZXMoKDAscC5nZXRFeHBlY3RlZExvZ0luU3VjY2Vzc0hlYWRlcikoKSksUj0oKG5ldyBEYXRl''@;'; put 'put ''KS52YWx1ZU9mKCktRi52YWx1ZU9mKCkpLzFlM313aGlsZSghUCYmUjwzMDApO3JldHVybntpc0xvZ2dlZEluOlB9fSl9fSw2NTQ3OmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihQLEYsUix6KXtyZXR1cm4gbmV3KFJ8''@;'; put 'put ''fChSPVByb21pc2UpKShmdW5jdGlvbihPLEspe2Z1bmN0aW9uIFoocSl7dHJ5e1coei5uZXh0KHEpKX1jYXRjaChlZSl7SyhlZSl9fWZ1bmN0aW9uIFkocSl7dHJ5e1coei50aHJvdyhxKSl9Y2F0Y2goZWUpe0soZWUpfX1mdW5jdGlvbiBXKHEpe3EuZG9uZT9PKHEudmFsdWUpOmZ1bmN0aW9u''@;'; put 'put ''IE4oTyl7cmV0dXJuIE8gaW5zdGFuY2VvZiBSP086bmV3IFIoZnVuY3Rpb24oSyl7SyhPKX0pfShxLnZhbHVlKS50aGVuKFosWSl9Vygoej16LmFwcGx5KFAsRnx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmlzTG9n''@;'; put 'put ''Z2VkSW5TQVNWSVlBPVgudmVyaWZ5U2FzVml5YUxvZ2luPXZvaWQgMDtjb25zdCBfPWIoNTkyOCkscD1iKDE1MjcpO1gudmVyaWZ5U2FzVml5YUxvZ2luPWZ1bmN0aW9uIFYoUCl7dmFyIEYsUjtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IHo9ITEsTj1uZXcg''@;'; put 'put ''RGF0ZSxPPTA7ZG97aWYoeWllbGQoMCxfLmRlbGF5KSgxZTMpLFAuY2xvc2VkKWJyZWFrO3o9KDAsWC5pc0xvZ2dlZEluU0FTVklZQSkoKSxPPSgobmV3IERhdGUpLnZhbHVlT2YoKS1OLnZhbHVlT2YoKSkvMWUzfXdoaWxlKCF6JiZPPDMwMCk7bGV0IEs9ITE7Tj1uZXcgRGF0ZTtkb3tpZih5''@;'; put 'put ''aWVsZCgwLF8uZGVsYXkpKDFlMyksUC5jbG9zZWQpYnJlYWs7Sz1QLndpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCJTQVNMb2dvbiIpfHwobnVsbD09PShSPW51bGw9PT0oRj1QLndpbmRvdy5kb2N1bWVudC5ib2R5KXx8dm9pZCAwPT09Rj92b2lkIDA6Ri5pbm5lclRleHQpfHx2b2lk''@;'; put 'put ''IDA9PT1SP3ZvaWQgMDpSLmluY2x1ZGVzKCgwLHAuZ2V0RXhwZWN0ZWRMb2dJblN1Y2Nlc3NIZWFkZXIpKCkpKSxPPSgobmV3IERhdGUpLnZhbHVlT2YoKS1OLnZhbHVlT2YoKSkvMWUzfXdoaWxlKCFLJiZPPDMwMCk7cmV0dXJue2lzTG9nZ2VkSW46eiYmS319KX0sWC5pc0xvZ2dlZEluU0FT''@;'; put 'put ''VklZQT0oKT0+ZG9jdW1lbnQuY29va2llLmluY2x1ZGVzKCJDdXJyZW50LVVzZXIiKSYmZG9jdW1lbnQuY29va2llLmluY2x1ZGVzKCJ1c2VySWQiKX0sNDAzNzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSks''@;'; put 'put ''WC5nZW5lcmF0ZUZpbGVVcGxvYWRGb3JtPXZvaWQgMDtjb25zdCBJPWIoMjQwMiksXz1iKDU5MjgpO1guZ2VuZXJhdGVGaWxlVXBsb2FkRm9ybT0oVix3KT0+e2Zvcihjb25zdCBQIGluIHcpe2lmKCFBcnJheS5pc0FycmF5KHdbUF0pKWNvbnRpbnVlO2NvbnN0IEY9UCxSPSgwLEkuY29udmVy''@;'; put 'put ''dFRvQ1NWKSh3LFApO2lmKCJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdUSCI9PT1SKXRocm93IG5ldyBFcnJvcigiVGhlIG1heCBsZW5ndGggb2YgYSBzdHJpbmcgdmFsdWUgaW4gU0FTanMgaXMgMzI3NjUgY2hhcmFjdGVycy4iKTtpZigoMCxfLmlzTm9kZSkoKSlWLmFwcGVuZChGLFIse2Zp''@;'; put 'put ''bGVuYW1lOmAke0Z9LmNzdmAsY29udGVudFR5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KTtlbHNle2NvbnN0IHo9bmV3IEJsb2IoW1JdLHt0eXBlOiJhcHBsaWNhdGlvbi9jc3YifSk7Vi5hcHBlbmQoRix6LGAke0Z9LmNzdmApfX1yZXR1cm4gVn19LDIxNzA6KGNlLFgsYik9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2VuZXJhdGVUYWJsZVVwbG9hZEZvcm09dm9pZCAwO2NvbnN0IEk9YigyNDAyKSxfPWIoNDc5OSk7WC5nZW5lcmF0ZVRhYmxlVXBsb2FkRm9ybT0oVix3KT0+e2NvbnN0IFA9W10sRj17fTtsZXQg''@;'; put 'put ''Uj0wO2Zvcihjb25zdCB6IGluIHcpe1IrKywoMCxJLmlzRm9ybWF0c1RhYmxlKSh6KXx8UC5wdXNoKHopO2NvbnN0IE49KDAsSS5jb252ZXJ0VG9DU1YpKHcseik7aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PU4pdGhyb3cgbmV3IEVycm9yKCJUaGUgbWF4IGxlbmd0aCBvZiBh''@;'; put 'put ''IHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2NSBjaGFyYWN0ZXJzLiIpO04ubGVuZ3RoPjE2ZTM/KDAsXy5zcGxpdENodW5rcykoTikubWFwKEs9PntWLmFwcGVuZChgc2FzanMke1J9ZGF0YWAsSyl9KTpGW2BzYXNqcyR7Un1kYXRhYF09Tn1yZXR1cm4gRi5zYXNqc190YWJsZXM9UC5q''@;'; put 'put ''b2luKCIgIikse2Zvcm1EYXRhOlYscmVxdWVzdFBhcmFtczpGfX19LDM2MDc6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHcsUCxGLFIpe3ZvaWQgMD09PVImJihSPUYpO3ZhciB6''@;'; put 'put ''PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUCxGKTsoIXp8fCgiZ2V0ImluIHo/IVAuX19lc01vZHVsZTp6LndyaXRhYmxlfHx6LmNvbmZpZ3VyYWJsZSkpJiYoej17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUFtGXX19KSxPYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkodyxSLHopfTpmdW5jdGlvbih3LFAsRixSKXt2b2lkIDA9PT1SJiYoUj1GKSx3W1JdPVBbRl19KSxfPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbih3LFApe2Zvcih2YXIgRiBpbiB3KSJkZWZhdWx0IiE9PUYmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNh''@;'; put 'put ''bGwoUCxGKSYmSShQLHcsRil9LHA9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKHcpe3JldHVybiB3JiZ3Ll9fZXNNb2R1bGU/dzp7ZGVmYXVsdDp3fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IFY9cChiKDU5NTYp''@;'; put 'put ''KTtfKGIoMTIzMCksWCksXyhiKDEzOTUpLFgpLF8oYig5ODIxKSxYKSxfKGIoODMwNiksWCksXyhiKDM0NjcpLFgpLF8oYigzNjAyKSxYKSxYLmRlZmF1bHQ9Vi5kZWZhdWx0fSwxNTcwOmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxm''@;'; put 'put ''dW5jdGlvbihQLEYsUix6KXtyZXR1cm4gbmV3KFJ8fChSPVByb21pc2UpKShmdW5jdGlvbihPLEspe2Z1bmN0aW9uIFoocSl7dHJ5e1coei5uZXh0KHEpKX1jYXRjaChlZSl7SyhlZSl9fWZ1bmN0aW9uIFkocSl7dHJ5e1coei50aHJvdyhxKSl9Y2F0Y2goZWUpe0soZWUpfX1mdW5jdGlvbiBX''@;'; put 'put ''KHEpe3EuZG9uZT9PKHEudmFsdWUpOmZ1bmN0aW9uIE4oTyl7cmV0dXJuIE8gaW5zdGFuY2VvZiBSP086bmV3IFIoZnVuY3Rpb24oSyl7SyhPKX0pfShxLnZhbHVlKS50aGVuKFosWSl9Vygoej16LmFwcGx5KFAsRnx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJf''@;'; put 'put ''X2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkNvbXB1dGVKb2JFeGVjdXRvcj12b2lkIDA7Y29uc3QgXz1iKDM5MDApLHA9YigxMzk1KSxWPWIoNjExOCk7WC5Db21wdXRlSm9iRXhlY3V0b3I9Y2xhc3MgdyBleHRlbmRzIFYuQmFzZUpvYkV4ZWN1dG9ye2NvbnN0cnVjdG9yKEYsUil7c3VwZXIo''@;'; put 'put ''RixfLlNlcnZlclR5cGUuU2FzVml5YSksdGhpcy5zYXNWaXlhQXBpQ2xpZW50PVJ9ZXhlY3V0ZShGLFIseixOLE8pe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBLPU58fCgoKT0+UHJvbWlzZS5yZXNvbHZlKCkpO3JldHVybiBuZXcgUHJvbWlzZSgocSxl''@;'; put 'put ''ZSk9Pnt2YXIgSjtudWxsPT09KEo9dGhpcy5zYXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09Snx8Si5leGVjdXRlQ29tcHV0ZUpvYihGLHouY29udGV4dE5hbWUsei5kZWJ1ZyxSLE8sITAsITApLnRoZW4ocmU9Pnt0aGlzLnNhc1ZpeWFBcGlDbGllbnQuYXBwZW5kUmVxdWVzdChyZSxGLHou''@;'; put 'put ''ZGVidWcpLHEocmUucmVzdWx0KX0pLmNhdGNoKHJlPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZSBpbnN0YW5jZW9mIHAuQ29tcHV0ZUpvYkV4ZWN1dGlvbkVycm9yJiYodGhpcy5zYXNWaXlhQXBpQ2xpZW50LmFwcGVuZFJlcXVlc3QocmUsRix6LmRlYnVnKSxlZShuZXcg''@;'; put 'put ''cC5FcnJvclJlc3BvbnNlKHJlPy5tZXNzYWdlLHJlKSkpLHJlIGluc3RhbmNlb2YgcC5Mb2dpblJlcXVpcmVkRXJyb3I/KHRoaXMuYXBwZW5kV2FpdGluZ1JlcXVlc3QoKCk9PnRoaXMuZXhlY3V0ZShGLFIseixOKS50aGVuKGllPT57cShpZSl9LGllPT57ZWUoaWUpfSkpLHlpZWxkIEsoKSk6''@;'; put 'put ''ZWUobmV3IHAuRXJyb3JSZXNwb25zZShyZT8ubWVzc2FnZSxyZSkpfSkpfSl9KX19fSwzNDkxOmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihGLFIseixOKXtyZXR1cm4gbmV3KHp8fCh6PVByb21pc2UpKShmdW5jdGlv''@;'; put 'put ''bihLLFope2Z1bmN0aW9uIFkoZWUpe3RyeXtxKE4ubmV4dChlZSkpfWNhdGNoKEope1ooSil9fWZ1bmN0aW9uIFcoZWUpe3RyeXtxKE4udGhyb3coZWUpKX1jYXRjaChKKXtaKEopfX1mdW5jdGlvbiBxKGVlKXtlZS5kb25lP0soZWUudmFsdWUpOmZ1bmN0aW9uIE8oSyl7cmV0dXJuIEsgaW5z''@;'; put 'put ''dGFuY2VvZiB6P0s6bmV3IHooZnVuY3Rpb24oWil7WihLKX0pfShlZS52YWx1ZSkudGhlbihZLFcpfXEoKE49Ti5hcHBseShGLFJ8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5GaWxlVXBsb2FkZXI9dm9pZCAwO2Nv''@;'; put 'put ''bnN0IF89Yig1OTI4KSxwPWIoMTM5NSksVj1iKDM5MDApLHc9Yig2MTE4KTtYLkZpbGVVcGxvYWRlcj1jbGFzcyBQIGV4dGVuZHMgdy5CYXNlSm9iRXhlY3V0b3J7Y29uc3RydWN0b3IoUix6LE4sTyl7c3VwZXIoUix6KSx0aGlzLmpvYnNQYXRoPU4sdGhpcy5yZXF1ZXN0Q2xpZW50PU99ZXhl''@;'; put 'put ''Y3V0ZShSLHosTixPKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7ZmlsZXM6SyxwYXJhbXM6Wn09eixZPU98fCgoKT0+UHJvbWlzZS5yZXNvbHZlKCkpO2lmKCFLPy5sZW5ndGgpdGhyb3cgbmV3IHAuRXJyb3JSZXNwb25zZSgiQXQgbGVhc3Qgb25lIGZp''@;'; put 'put ''bGUgbXVzdCBiZSBwcm92aWRlZC4iKTtpZighUnx8IiI9PT1SKXRocm93IG5ldyBwLkVycm9yUmVzcG9uc2UoInNhc0pvYiBtdXN0IGJlIHByb3ZpZGVkLiIpO2xldCBXPSIiO2ZvcihsZXQgZ2UgaW4gWilaLmhhc093blByb3BlcnR5KGdlKSYmKFcrPWAmJHtnZX09JHtaW2dlXX1gKTtjb25z''@;'; put 'put ''dCBxPU4uYXBwTG9jP04uYXBwTG9jLnJlcGxhY2UoL1wvPyQvLCIvIikrUi5yZXBsYWNlKC9eXC8vLCIiKTpSLGVlPWAke3RoaXMuam9ic1BhdGh9Lz8keyJfcHJvZ3JhbT0iK3F9JHtXfWAsSj1uZXcgRm9ybURhdGE7Zm9yKGxldCBnZSBvZiBLKUouYXBwZW5kKCJmaWxlIixnZS5maWxlLGdl''@;'; put 'put ''LmZpbGVOYW1lKTtjb25zdCByZT10aGlzLnJlcXVlc3RDbGllbnQuZ2V0Q3NyZlRva2VuKCJmaWxlIik7cmUmJkouYXBwZW5kKCJfY3NyZiIscmUudmFsdWUpLE4uZGVidWcmJkouYXBwZW5kKCJfZGVidWciLCIxMzEiKSxOLnNlcnZlclR5cGU9PT1WLlNlcnZlclR5cGUuU2FzVml5YSYmTi5j''@;'; put 'put ''b250ZXh0TmFtZSYmSi5hcHBlbmQoIl9jb250ZXh0bmFtZSIsTi5jb250ZXh0TmFtZSk7Y29uc3QgaWU9eyJjYWNoZS1jb250cm9sIjoibm8tY2FjaGUiLEFjY2VwdDoiKi8qIiwiQ29udGVudC1UeXBlIjoidGV4dC9wbGFpbiJ9O3JldHVybiBuZXcgUHJvbWlzZSgoZ2UsX2UpPT57dGhpcy5y''@;'; put 'put ''ZXF1ZXN0Q2xpZW50LnBvc3QoZWUsSix2b2lkIDAsImFwcGxpY2F0aW9uL2pzb24iLGllKS50aGVuKFRlPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChUZSxSLE4uZGVidWcpO2xldCBNZT1UZS5yZXN1bHQ7aWYoTi5k''@;'; put 'put ''ZWJ1Zylzd2l0Y2godGhpcy5zZXJ2ZXJUeXBlKXtjYXNlIFYuU2VydmVyVHlwZS5TYXNWaXlhOk1lPXlpZWxkKDAsXy5wYXJzZVNhc1ZpeWFEZWJ1Z1Jlc3BvbnNlKShUZS5yZXN1bHQsdGhpcy5yZXF1ZXN0Q2xpZW50LE4uc2VydmVyVXJsKTticmVhaztjYXNlIFYuU2VydmVyVHlwZS5TYXM5''@;'; put 'put ''Ok1lPSJzdHJpbmciPT10eXBlb2YgVGUucmVzdWx0PygwLF8ucGFyc2VXZWJvdXRSZXNwb25zZSkoVGUucmVzdWx0LGVlKTpUZS5yZXN1bHQ7YnJlYWs7Y2FzZSBWLlNlcnZlclR5cGUuU2FzanM6TWU9InN0cmluZyI9PXR5cGVvZiBUZS5yZXN1bHQ/KDAsXy5nZXRWYWxpZEpzb24pKFRlLnJl''@;'; put 'put ''c3VsdCk6VGUucmVzdWx0fWVsc2UgTWU9InN0cmluZyI9PXR5cGVvZiBUZS5yZXN1bHQ/KDAsXy5nZXRWYWxpZEpzb24pKFRlLnJlc3VsdCk6VGUucmVzdWx0O2dlKE1lKX0pKS5jYXRjaChUZT0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7VGUgaW5zdGFuY2VvZiBwLkpvYkV4''@;'; put 'put ''ZWN1dGlvbkVycm9yJiYodGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoVGUsUixOLmRlYnVnKSxfZShuZXcgcC5FcnJvclJlc3BvbnNlKFRlPy5tZXNzYWdlLFRlKSkpLFRlIGluc3RhbmNlb2YgcC5Mb2dpblJlcXVpcmVkRXJyb3I/KHRoaXMuYXBwZW5kV2FpdGluZ1JlcXVlc3Qo''@;'; put 'put ''KCk9PnRoaXMuZXhlY3V0ZShSLHosTixPKS50aGVuKE1lPT57Z2UoTWUpfSxNZT0+e19lKE1lKX0pKSx5aWVsZCBZKCkpOl9lKG5ldyBwLkVycm9yUmVzcG9uc2UoIkZpbGUgdXBsb2FkIHJlcXVlc3QgZmFpbGVkLiIsVGUpKX0pKX0pfSl9fX0sNDQ0NjpmdW5jdGlvbihjZSxYLGIpeyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oRixSLHosTil7cmV0dXJuIG5ldyh6fHwoej1Qcm9taXNlKSkoZnVuY3Rpb24oSyxaKXtmdW5jdGlvbiBZKGVlKXt0cnl7cShOLm5leHQoZWUpKX1jYXRjaChKKXtaKEopfX1mdW5jdGlvbiBXKGVlKXt0cnl7cShO''@;'; put 'put ''LnRocm93KGVlKSl9Y2F0Y2goSil7WihKKX19ZnVuY3Rpb24gcShlZSl7ZWUuZG9uZT9LKGVlLnZhbHVlKTpmdW5jdGlvbiBPKEspe3JldHVybiBLIGluc3RhbmNlb2Ygej9LOm5ldyB6KGZ1bmN0aW9uKFope1ooSyl9KX0oZWUudmFsdWUpLnRoZW4oWSxXKX1xKChOPU4uYXBwbHkoRixSfHxb''@;'; put 'put ''XSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguSmVzSm9iRXhlY3V0b3I9dm9pZCAwO2NvbnN0IF89YigzOTAwKSxwPWIoMTM5NSksVj1iKDYxMTgpLHc9Yig1OTI4KTtYLkplc0pvYkV4ZWN1dG9yPWNsYXNzIFAgZXh0ZW5k''@;'; put 'put ''cyBWLkJhc2VKb2JFeGVjdXRvcntjb25zdHJ1Y3RvcihSLHope3N1cGVyKFIsXy5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLHRoaXMuc2FzVml5YUFwaUNsaWVudD16fWV4ZWN1dGUoUix6LE4sTyxLLFo9W10pe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBZPU98''@;'; put 'put ''fCgoKT0+UHJvbWlzZS5yZXNvbHZlKCkpO3JldHVybiBuZXcgUHJvbWlzZSgocSxlZSk9Pnt2YXIgSjtudWxsPT09KEo9dGhpcy5zYXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09Snx8Si5leGVjdXRlSm9iKFIsTi5jb250ZXh0TmFtZSxOLmRlYnVnLHosSykudGhlbihyZT0+e3RoaXMuc2Fz''@;'; put 'put ''Vml5YUFwaUNsaWVudC5hcHBlbmRSZXF1ZXN0KHJlLFIsTi5kZWJ1Zyk7Y29uc3QgaWU9KDAsdy5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmlidXRlcykocmUsWik7cShpZSl9KS5jYXRjaChyZT0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmUgaW5zdGFuY2VvZiBwLkpvYkV4''@;'; put 'put ''ZWN1dGlvbkVycm9yJiYodGhpcy5zYXNWaXlhQXBpQ2xpZW50LmFwcGVuZFJlcXVlc3QocmUsUixOLmRlYnVnKSxlZShuZXcgcC5FcnJvclJlc3BvbnNlKHJlPy5tZXNzYWdlLHJlKSkpLHJlIGluc3RhbmNlb2YgcC5Mb2dpblJlcXVpcmVkRXJyb3I/KHRoaXMuYXBwZW5kV2FpdGluZ1JlcXVl''@;'; put 'put ''c3QoKCk9PnRoaXMuZXhlY3V0ZShSLHosTixPLEssWikudGhlbihpZT0+e3EoaWUpfSxpZT0+e2VlKGllKX0pKSx5aWVsZCBZKCkpOmVlKG5ldyBwLkVycm9yUmVzcG9uc2UocmU/Lm1lc3NhZ2UscmUpKX0pKX0pfSl9fX0sNjExODpmdW5jdGlvbihjZSxYLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''ST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oVix3LFAsRil7cmV0dXJuIG5ldyhQfHwoUD1Qcm9taXNlKSkoZnVuY3Rpb24oeixOKXtmdW5jdGlvbiBPKFkpe3RyeXtaKEYubmV4dChZKSl9Y2F0Y2goVyl7TihXKX19ZnVuY3Rpb24gSyhZKXt0cnl7WihGLnRocm93KFkpKX1jYXRj''@;'; put 'put ''aChXKXtOKFcpfX1mdW5jdGlvbiBaKFkpe1kuZG9uZT96KFkudmFsdWUpOmZ1bmN0aW9uIFIoeil7cmV0dXJuIHogaW5zdGFuY2VvZiBQP3o6bmV3IFAoZnVuY3Rpb24oTil7Tih6KX0pfShZLnZhbHVlKS50aGVuKE8sSyl9WigoRj1GLmFwcGx5KFYsd3x8W10pKS5uZXh0KCkpfSl9O09iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkJhc2VKb2JFeGVjdXRvcj12b2lkIDA7Y29uc3QgXz1iKDU5MjgpO1guQmFzZUpvYkV4ZWN1dG9yPWNsYXNzIHB7Y29uc3RydWN0b3IodyxQKXt0aGlzLnNlcnZlclVybD13LHRoaXMuc2VydmVyVHlwZT1QLHRo''@;'; put 'put ''aXMud2FpdGluZ1JlcXVlc3RzPVtdLHRoaXMucmVzZW5kV2FpdGluZ1JlcXVlc3RzPSgpPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt5aWVsZCgwLF8uYXN5bmNGb3JFYWNoKSh0aGlzLndhaXRpbmdSZXF1ZXN0cyxGPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbioo''@;'; put 'put ''KXt5aWVsZCBGKCl9KSksdGhpcy53YWl0aW5nUmVxdWVzdHM9W119KX1hcHBlbmRXYWl0aW5nUmVxdWVzdCh3KXt0aGlzLndhaXRpbmdSZXF1ZXN0cy5wdXNoKHcpfWdldFJlcXVlc3RQYXJhbXModyl7Y29uc3QgUD17fTtyZXR1cm4gdy5kZWJ1ZyYmKFAuX29taXR0ZXh0bG9nPSJmYWxzZSIs''@;'; put 'put ''UC5fb21pdFNlc3Npb25SZXN1bHRzPSJmYWxzZSIsUC5fZGVidWc9MTMxKSxQfX19LDI2OTM6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKE4sTyxLLFope3JldHVybiBuZXcoS3x8KEs9UHJvbWlzZSkpKGZ1bmN0aW9u''@;'; put 'put ''KFcscSl7ZnVuY3Rpb24gZWUoaWUpe3RyeXtyZShaLm5leHQoaWUpKX1jYXRjaCh1ZSl7cSh1ZSl9fWZ1bmN0aW9uIEooaWUpe3RyeXtyZShaLnRocm93KGllKSl9Y2F0Y2godWUpe3EodWUpfX1mdW5jdGlvbiByZShpZSl7aWUuZG9uZT9XKGllLnZhbHVlKTpmdW5jdGlvbiBZKFcpe3JldHVy''@;'; put 'put ''biBXIGluc3RhbmNlb2YgSz9XOm5ldyBLKGZ1bmN0aW9uKHEpe3EoVyl9KX0oaWUudmFsdWUpLnRoZW4oZWUsSil9cmUoKFo9Wi5hcHBseShOLE98fFtdKSkubmV4dCgpKX0pfSxfPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihOKXtyZXR1cm4gTiYmTi5fX2VzTW9kdWxl''@;'; put 'put ''P046e2RlZmF1bHQ6Tn19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLlNhczlKb2JFeGVjdXRvcj12b2lkIDA7Y29uc3QgcD1fKGIoNjIzMCkpLFY9YigxMzk1KSx3PWIoNTkyOCksUD1iKDYxMTgpLEY9Yig3OTUpO1guU2FzOUpvYkV4ZWN1dG9y''@;'; put 'put ''PWNsYXNzIFIgZXh0ZW5kcyBQLkJhc2VKb2JFeGVjdXRvcntjb25zdHJ1Y3RvcihPLEssWixZLFcpe3N1cGVyKE8sSyksdGhpcy5qb2JzUGF0aD1aLHRoaXMucmVxdWVzdENsaWVudD1ZLHRoaXMuc2FzOVJlcXVlc3RDbGllbnQ9bmV3IEYuU2FzOVJlcXVlc3RDbGllbnQoTyxXKX1leGVjdXRl''@;'; put 'put ''KE8sSyxaKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgWT0oMCx3LmlzUmVsYXRpdmVQYXRoKShPKSYmWi5hcHBMb2M/Wi5hcHBMb2MucmVwbGFjZSgvXC8/JC8sIi8iKStPLnJlcGxhY2UoL15cLy8sIiIpOk87bGV0IFc9YCR7Wi5zZXJ2ZXJVcmx9JHt0''@;'; put 'put ''aGlzLmpvYnNQYXRofT8keyJfcHJvZ3JhbT0iK1l9YDtXPWAke1d9JHtaLnVzZXJuYW1lJiZaLnBhc3N3b3JkPyImX3VzZXJuYW1lPSIrWi51c2VybmFtZSsiJl9wYXNzd29yZD0iK1oucGFzc3dvcmQ6IiJ9YCxXPWAke1d9JHtaLmRlYnVnPyImX2RlYnVnPTEzMSI6IiJ9YDtsZXQgcT1PYmpl''@;'; put 'put ''Y3QuYXNzaWduKHt9LHRoaXMuZ2V0UmVxdWVzdFBhcmFtcyhaKSksZWU9bmV3IHAuZGVmYXVsdDtpZihLKXRyeXtlZT16KGVlLEspfWNhdGNoKGllKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFYuRXJyb3JSZXNwb25zZShpZT8ubWVzc2FnZSxpZSkpfWVsc2UgSz0iIjtmb3IoY29uc3Qg''@;'; put 'put ''aWUgaW4gcSlxLmhhc093blByb3BlcnR5KGllKSYmZWUuYXBwZW5kKGllLHFbaWVdKTt5aWVsZCB0aGlzLnNhczlSZXF1ZXN0Q2xpZW50LmxvZ2luKFoudXNlcm5hbWUsWi5wYXNzd29yZCx0aGlzLmpvYnNQYXRoKTtjb25zdCBKPUsmJk9iamVjdC5rZXlzKEspLmxlbmd0aD8ibXVsdGlwYXJ0''@;'; put 'put ''L2Zvcm0tZGF0YTsgYm91bmRhcnk9IitlZS5fYm91bmRhcnk6InRleHQvcGxhaW4iO3JldHVybiBuZXcgUHJvbWlzZSgoaWUsdWUpPT50aGlzLnNhczlSZXF1ZXN0Q2xpZW50LnBvc3QoVyxlZSx2b2lkIDAsSix7QWNjZXB0OiIqLyoiLENvbm5lY3Rpb246IktlZXAtQWxpdmUifSkudGhlbihn''@;'; put 'put ''ZT0+e3RoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KGdlLE8sWi5kZWJ1ZyksaWUoZ2UpfSkuY2F0Y2goZ2U9PntsZXQgX2U9Z2U7Z2UucmVzdWx0JiYiIiE9PWdlLnJlc3VsdD9fZT1nZS5yZXN1bHQ6Z2UubWVzc2FnZSYmKF9lPWdlLm1lc3NhZ2UpLHRoaXMucmVxdWVzdENsaWVu''@;'; put 'put ''dC5hcHBlbmRSZXF1ZXN0KF9lLE8sWi5kZWJ1ZyksdWUobmV3IFYuRXJyb3JSZXNwb25zZShnZT8ubWVzc2FnZSxnZSkpfSkpfSl9Z2V0UmVxdWVzdFBhcmFtcyhPKXtjb25zdCBLPXt9O3JldHVybiBPLmRlYnVnJiYoSy5fZGVidWc9MTMxKSxLfX07Y29uc3Qgej0oTixPKT0+e2Zvcihjb25z''@;'; put 'put ''dCBLIGluIE8pe2NvbnN0IFo9SyxZPSgwLHcuY29udmVydFRvQ1NWKShPLEspO2lmKCJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdUSCI9PT1ZKXRocm93IG5ldyBFcnJvcigiVGhlIG1heCBsZW5ndGggb2YgYSBzdHJpbmcgdmFsdWUgaW4gU0FTanMgaXMgMzI3NjUgY2hhcmFjdGVycy4iKTtO''@;'; put 'put ''LmFwcGVuZChaLFkse2ZpbGVuYW1lOmAke1p9LmNzdmAsY29udGVudFR5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KX1yZXR1cm4gTn19LDEwNjU6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKE8sSyxaLFkpe3JldHVybiBu''@;'; put 'put ''ZXcoWnx8KFo9UHJvbWlzZSkpKGZ1bmN0aW9uKHEsZWUpe2Z1bmN0aW9uIEoodWUpe3RyeXtpZShZLm5leHQodWUpKX1jYXRjaChnZSl7ZWUoZ2UpfX1mdW5jdGlvbiByZSh1ZSl7dHJ5e2llKFkudGhyb3codWUpKX1jYXRjaChnZSl7ZWUoZ2UpfX1mdW5jdGlvbiBpZSh1ZSl7dWUuZG9uZT9x''@;'; put 'put ''KHVlLnZhbHVlKTpmdW5jdGlvbiBXKHEpe3JldHVybiBxIGluc3RhbmNlb2YgWj9xOm5ldyBaKGZ1bmN0aW9uKGVlKXtlZShxKX0pfSh1ZS52YWx1ZSkudGhlbihKLHJlKX1pZSgoWT1ZLmFwcGx5KE8sS3x8W10pKS5uZXh0KCkpfSl9LF89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1''@;'; put 'put ''bmN0aW9uKE8pe3JldHVybiBPJiZPLl9fZXNNb2R1bGU/Tzp7ZGVmYXVsdDpPfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguU2FzanNKb2JFeGVjdXRvcj12b2lkIDA7Y29uc3QgcD1fKGIoNjIzMCkpLFY9YigzOTAwKSx3PWIoMTM5NSksUD1i''@;'; put 'put ''KDQwMzcpLEY9Yig1OTI4KSxSPWIoNTkyOCksej1iKDYxMTgpO1guU2FzanNKb2JFeGVjdXRvcj1jbGFzcyBOIGV4dGVuZHMgei5CYXNlSm9iRXhlY3V0b3J7Y29uc3RydWN0b3IoSyxaLFkpe3N1cGVyKEssVi5TZXJ2ZXJUeXBlLlNhc2pzKSx0aGlzLmpvYnNQYXRoPVosdGhpcy5yZXF1ZXN0''@;'; put 'put ''Q2xpZW50PVl9ZXhlY3V0ZShLLFosWSxXLHEsZWU9W10pe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBKPVcscmU9KDAsUi5pc1JlbGF0aXZlUGF0aCkoSykmJlkuYXBwTG9jP1kuYXBwTG9jLnJlcGxhY2UoL1wvPyQvLCIvIikrSy5yZXBsYWNlKC9eXC8v''@;'; put 'put ''LCIiKTpLO2xldCBpZT1gJHtZLnNlcnZlclVybH0ke3RoaXMuam9ic1BhdGh9Lz8keyJfcHJvZ3JhbT0iK3JlfWAsdWU9T2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldFJlcXVlc3RQYXJhbXMoWSkpLGdlPSgwLEYuZ2V0Rm9ybURhdGEpKCk7aWYoWil0cnl7Z2U9KDAsUC5nZW5lcmF0ZUZpbGVV''@;'; put 'put ''cGxvYWRGb3JtKShnZSxaKX1jYXRjaChNZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyB3LkVycm9yUmVzcG9uc2UoTWU/Lm1lc3NhZ2UsTWUpKX1mb3IoY29uc3QgTWUgaW4gdWUpdWUuaGFzT3duUHJvcGVydHkoTWUpJiZnZS5hcHBlbmQoTWUsdWVbTWVdKTtjb25zdCBfZT1nZSBpbnN0''@;'; put 'put ''YW5jZW9mIHAuZGVmYXVsdCYmdHlwZW9mIEZvcm1EYXRhPiJ1Ij9gbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JHtnZS5nZXRIZWFkZXJzKClbImNvbnRlbnQtdHlwZSJdfWA6Im11bHRpcGFydC9mb3JtLWRhdGEiO3JldHVybiBuZXcgUHJvbWlzZSgoTWUsWmUpPT57dGhpcy5yZXF1''@;'; put 'put ''ZXN0Q2xpZW50LnBvc3QoaWUsZ2UscT8uYWNjZXNzX3Rva2VuLF9lKS50aGVuKEI9PkkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKE9iamVjdC5lbnRyaWVzKEIucmVzdWx0KS5sZW5ndGg8MSl0aHJvdyBuZXcgdy5Kb2JFeGVjdXRpb25FcnJvcigwLGBObyB3ZWJvdXQgd2Fz''@;'; put 'put ''IHJldHVybmVkIGJ5IGpvYiAke3JlfS4gIFBsZWFzZSBjaGVjayB0aGUgU0FTIGxvZyBmb3IgbW9yZSBpbmZvLmAsQi5sb2cpO2NvbnN0e3Jlc3VsdDpnfT1CO2cmJiJzdHJpbmciPT10eXBlb2YgZyYmZy50cmltKCkmJihCLnJlc3VsdD0oMCxSLmdldFZhbGlkSnNvbikoZykpLHRoaXMucmVx''@;'; put 'put ''dWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KEIsSyxZLmRlYnVnKTtjb25zdCB5PSgwLFIuYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0ZXMpKEIsZWUpO01lKHkpfSkpLmNhdGNoKEI9PkkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe0IgaW5zdGFuY2VvZiB3LkpvYkV4ZWN1dGlv''@;'; put 'put ''bkVycm9yJiYodGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoQixLLFkuZGVidWcpLFplKG5ldyB3LkVycm9yUmVzcG9uc2UoQj8ubWVzc2FnZSxCKSkpLEIgaW5zdGFuY2VvZiB3LkxvZ2luUmVxdWlyZWRFcnJvcj8oV3x8WmUobmV3IHcuRXJyb3JSZXNwb25zZSgiUmVxdWVzdCBp''@;'; put 'put ''cyBub3QgYXV0aGVudGljYXRlZC4gTWFrZSBzdXJlIC5lbnYgZmlsZSBleGlzdHMgd2l0aCB2YWxpZCBjcmVkZW50aWFscy4iLEIpKSx0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KCgpPT50aGlzLmV4ZWN1dGUoSyxaLFksVyxxLGVlKS50aGVuKGc9PntNZShnKX0sZz0+e1plKGcpfSkpLEom''@;'; put 'put ''Jih5aWVsZCBKKCkpKTpaZShuZXcgdy5FcnJvclJlc3BvbnNlKEI/Lm1lc3NhZ2UsQikpfSkpfSl9KX19fSw2MDg0OmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihPLEssWixZKXtyZXR1cm4gbmV3KFp8fChaPVByb21p''@;'; put 'put ''c2UpKShmdW5jdGlvbihxLGVlKXtmdW5jdGlvbiBKKHVlKXt0cnl7aWUoWS5uZXh0KHVlKSl9Y2F0Y2goZ2Upe2VlKGdlKX19ZnVuY3Rpb24gcmUodWUpe3RyeXtpZShZLnRocm93KHVlKSl9Y2F0Y2goZ2Upe2VlKGdlKX19ZnVuY3Rpb24gaWUodWUpe3VlLmRvbmU/cSh1ZS52YWx1ZSk6ZnVu''@;'; put 'put ''Y3Rpb24gVyhxKXtyZXR1cm4gcSBpbnN0YW5jZW9mIFo/cTpuZXcgWihmdW5jdGlvbihlZSl7ZWUocSl9KX0odWUudmFsdWUpLnRoZW4oSixyZSl9aWUoKFk9WS5hcHBseShPLEt8fFtdKSkubmV4dCgpKX0pfSxfPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihPKXtyZXR1''@;'; put 'put ''cm4gTyYmTy5fX2VzTW9kdWxlP086e2RlZmF1bHQ6T319O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLldlYkpvYkV4ZWN1dG9yPXZvaWQgMDtjb25zdCBwPV8oYig2MjMwKSksVj1iKDM5MDApLHc9YigxMzk1KSxQPWIoNDAzNyksRj1iKDIxNzAp''@;'; put 'put ''LFI9Yig1OTI4KSx6PWIoNjExOCk7WC5XZWJKb2JFeGVjdXRvcj1jbGFzcyBOIGV4dGVuZHMgei5CYXNlSm9iRXhlY3V0b3J7Y29uc3RydWN0b3IoSyxaLFksVyxxKXtzdXBlcihLLFopLHRoaXMuam9ic1BhdGg9WSx0aGlzLnJlcXVlc3RDbGllbnQ9Vyx0aGlzLnNhc1ZpeWFBcGlDbGllbnQ9''@;'; put 'put ''cX1leGVjdXRlKEssWixZLFcscSxlZT1bXSl7dmFyIEo7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IHJlPVcsaWU9KDAsUi5pc1JlbGF0aXZlUGF0aCkoSykmJlkuYXBwTG9jP1kuYXBwTG9jLnJlcGxhY2UoL1wvPyQvLCIvIikrSy5yZXBsYWNlKC9eXC8v''@;'; put 'put ''LCIiKTpLO2xldCB1ZT1gJHtZLnNlcnZlclVybH0ke3RoaXMuam9ic1BhdGh9Lz8keyJfcHJvZ3JhbT0iK2llfWA7aWYoWS5zZXJ2ZXJUeXBlPT09Vi5TZXJ2ZXJUeXBlLlNhc1ZpeWEpe2xldCBaZTt0cnl7WmU9eWllbGQgdGhpcy5nZXRKb2JVcmkoSyl9Y2F0Y2goQil7cmV0dXJuIG5ldyBQ''@;'; put 'put ''cm9taXNlKChnLHkpPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtCIGluc3RhbmNlb2Ygdy5Mb2dpblJlcXVpcmVkRXJyb3I/KHRoaXMuYXBwZW5kV2FpdGluZ1JlcXVlc3QoKCk9PnRoaXMuZXhlY3V0ZShLLFosWSxXLHEsZWUpLnRoZW4oeD0+e2coeCl9LHg9Pnt5KHgpfSkp''@;'; put 'put ''LHJlJiYoeWllbGQgcmUoKSkpOnkobmV3IHcuRXJyb3JSZXNwb25zZShCPy5tZXNzYWdlLEIpKX0pKX11ZSs9WmUubGVuZ3RoPjA/IiZfam9iPSIrWmU6IiIsWmUubGVuZ3RoPjAmJih1ZSs9IiZfam9iPSIrWmUsdWU9dWUucmVwbGFjZSgiX3Byb2dyYW09IiwiX19wcm9ncmFtPSIpKSx1ZSs9''@;'; put 'put ''bnVsbCE9PShKPVkuY29udGV4dE5hbWUpJiZ2b2lkIDAhPT1KJiZKLnRyaW0oKT9gJl9jb250ZXh0bmFtZT0ke2VuY29kZVVSSUNvbXBvbmVudChZLmNvbnRleHROYW1lKX1gOiIifWxldCBnZT1PYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0UmVxdWVzdFBhcmFtcyhZKSksX2U9KDAsUi5nZXRG''@;'; put 'put ''b3JtRGF0YSkoKTtpZihaKXtjb25zdCBaZT1KU09OLnN0cmluZ2lmeShaKTtpZihZLnNlcnZlclR5cGU9PT1WLlNlcnZlclR5cGUuU2FzOXx8WmUubGVuZ3RoPjVlNXx8WmUuaW5jbHVkZXMoIjsiKSl0cnl7X2U9KDAsUC5nZW5lcmF0ZUZpbGVVcGxvYWRGb3JtKShfZSxaKX1jYXRjaChCKXty''@;'; put 'put ''ZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IHcuRXJyb3JSZXNwb25zZShCPy5tZXNzYWdlLEIpKX1lbHNlIHRyeXtjb25zdHtmb3JtRGF0YTpCLHJlcXVlc3RQYXJhbXM6Z309KDAsRi5nZW5lcmF0ZVRhYmxlVXBsb2FkRm9ybSkoX2UsWik7X2U9QixnZT1PYmplY3QuYXNzaWduKE9iamVjdC5h''@;'; put 'put ''c3NpZ24oe30sZ2UpLGcpfWNhdGNoKEIpe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgdy5FcnJvclJlc3BvbnNlKEI/Lm1lc3NhZ2UsQikpfX1mb3IoY29uc3QgWmUgaW4gZ2UpZ2UuaGFzT3duUHJvcGVydHkoWmUpJiZfZS5hcHBlbmQoWmUsZ2VbWmVdKTtjb25zdCBUZT1fZSBpbnN0YW5j''@;'; put 'put ''ZW9mIHAuZGVmYXVsdCYmdHlwZW9mIEZvcm1EYXRhPiJ1Ij9gbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JHtfZS5nZXRIZWFkZXJzKClbImNvbnRlbnQtdHlwZSJdfWA6Im11bHRpcGFydC9mb3JtLWRhdGEiO3JldHVybiBuZXcgUHJvbWlzZSgoWmUsQik9Pnt0aGlzLnJlcXVlc3RD''@;'; put 'put ''bGllbnQucG9zdCh1ZSxfZSxxPy5hY2Nlc3NfdG9rZW4sVGUpLnRoZW4oZz0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoZyxLLFkuZGVidWcpO2xldCB5PWcucmVzdWx0O2lmKFkuZGVidWcpc3dpdGNoKHRoaXMuc2Vy''@;'; put 'put ''dmVyVHlwZSl7Y2FzZSBWLlNlcnZlclR5cGUuU2FzVml5YTp5PXlpZWxkKDAsUi5wYXJzZVNhc1ZpeWFEZWJ1Z1Jlc3BvbnNlKShnLnJlc3VsdCx0aGlzLnJlcXVlc3RDbGllbnQsdGhpcy5zZXJ2ZXJVcmwpO2JyZWFrO2Nhc2UgVi5TZXJ2ZXJUeXBlLlNhczk6eT0ic3RyaW5nIj09dHlwZW9m''@;'; put 'put ''IGcucmVzdWx0PygwLFIucGFyc2VXZWJvdXRSZXNwb25zZSkoZy5yZXN1bHQsdWUpOmcucmVzdWx0fWNvbnN0IHg9KDAsUi5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmlidXRlcykoe3Jlc3VsdDp5LGxvZzpnLmxvZ30sZWUpO1plKHgpfSkpLmNhdGNoKGc9PkkodGhpcyx2b2lkIDAsdm9pZCAw''@;'; put 'put ''LGZ1bmN0aW9uKigpe2cgaW5zdGFuY2VvZiB3LkpvYkV4ZWN1dGlvbkVycm9yJiYodGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoZyxLLFkuZGVidWcpLEIobmV3IHcuRXJyb3JSZXNwb25zZShnPy5tZXNzYWdlLGcpKSksZyBpbnN0YW5jZW9mIHcuTG9naW5SZXF1aXJlZEVycm9y''@;'; put 'put ''PyhXfHxCKG5ldyB3LkVycm9yUmVzcG9uc2UoIlJlcXVlc3QgaXMgbm90IGF1dGhlbnRpY2F0ZWQuIE1ha2Ugc3VyZSAuZW52IGZpbGUgZXhpc3RzIHdpdGggdmFsaWQgY3JlZGVudGlhbHMuIixnKSksdGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdCgoKT0+dGhpcy5leGVjdXRlKEssWixZLFcs''@;'; put 'put ''cSxlZSkudGhlbih5PT57WmUoeSl9LHk9PntCKHkpfSkpLHJlJiYoeWllbGQgcmUoKSkpOkIobmV3IHcuRXJyb3JSZXNwb25zZShnPy5tZXNzYWdlLGcpKX0pKX0pfSl9Z2V0Sm9iVXJpKEspe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZighdGhpcy5zYXNWaXlh''@;'; put 'put ''QXBpQ2xpZW50KXJldHVybiIiO2xldCBZLFcsWj0iIjtpZigoMCxSLmlzUmVsYXRpdmVQYXRoKShLKSl7Y29uc3QgZWU9Sy5zcGxpdCgiLyIpO1k9ZWUubGVuZ3RoPjE/ZWVbMF06IiIsVz1lZS5sZW5ndGg+MT9lZVsxXToiIn1lbHNle2NvbnN0IGVlPUsuc3BsaXQoIi8iKTtXPWVlLnBvcCgp''@;'; put 'put ''fHwiIixZPWVlLmpvaW4oIi8iKX1pZighVyl0aHJvdyBuZXcgRXJyb3IoIkpvYiBuYW1lIGlzIGVtcHR5LCBudWxsIG9yIHVuZGVmaW5lZC4iKTtjb25zdCBxPXlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRKb2JzSW5Gb2xkZXIoWSk7aWYocSl7Y29uc3QgZWU9cS5maW5kKEo9Pkou''@;'; put 'put ''bmFtZT09PVcmJiJqb2JEZWZpbml0aW9uIj09PUouY29udGVudFR5cGUpO2VlJiYoWj1lZS51cmkpfXJldHVybiBafSl9fX0sODIxNzpmdW5jdGlvbihjZSxYLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24o''@;'; put 'put ''cCxWLHcsUCl7dm9pZCAwPT09UCYmKFA9dyk7dmFyIEY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihWLHcpOyghRnx8KCJnZXQiaW4gRj8hVi5fX2VzTW9kdWxlOkYud3JpdGFibGV8fEYuY29uZmlndXJhYmxlKSkmJihGPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiBWW3ddfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLFAsRil9OmZ1bmN0aW9uKHAsVix3LFApe3ZvaWQgMD09PVAmJihQPXcpLHBbUF09Vlt3XX0pLF89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKHAsVil7Zm9yKHZhciB3IGluIHApImRlZmF1bHQiIT09dyYmIU9i''@;'; put 'put ''amVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWLHcpJiZJKFYscCx3KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8oYigxNTcwKSxYKSxfKGIoMzQ5MSksWCksXyhiKDQ0NDYpLFgpLF8oYig2MTE4KSxYKSxfKGIoMjY5MyksWCks''@;'; put 'put ''XyhiKDYwODQpLFgpLF8oYigxMDY1KSxYKX0sNDU4ODpmdW5jdGlvbihjZSxYLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQxNTUpLF89Yig1MTA4KSxwPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihyZSxpZSx1ZSxnZSl7dm9pZCAwPT09Z2Um''@;'; put 'put ''JihnZT11ZSk7dmFyIF9lPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaWUsdWUpOyghX2V8fCgiZ2V0ImluIF9lPyFpZS5fX2VzTW9kdWxlOl9lLndyaXRhYmxlfHxfZS5jb25maWd1cmFibGUpKSYmKF9lPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpZVt1''@;'; put 'put ''ZV19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlLGdlLF9lKX06ZnVuY3Rpb24ocmUsaWUsdWUsZ2Upe3ZvaWQgMD09PWdlJiYoZ2U9dWUpLHJlW2dlXT1pZVt1ZV19KSxWPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihyZSxpZSl7T2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KHJlLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTppZX0pfTpmdW5jdGlvbihyZSxpZSl7cmUuZGVmYXVsdD1pZX0pLHc9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKHJlKXtpZihyZSYmcmUuX19lc01vZHVsZSlyZXR1cm4gcmU7dmFy''@;'; put 'put ''IGllPXt9O2lmKG51bGwhPXJlKWZvcih2YXIgdWUgaW4gcmUpImRlZmF1bHQiIT09dWUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZSx1ZSkmJnAoaWUscmUsdWUpO3JldHVybiBWKGllLHJlKSxpZX0sUD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24ocmUs''@;'; put 'put ''aWUsdWUsZ2Upe3JldHVybiBuZXcodWV8fCh1ZT1Qcm9taXNlKSkoZnVuY3Rpb24oVGUsTWUpe2Z1bmN0aW9uIFplKHkpe3RyeXtnKGdlLm5leHQoeSkpfWNhdGNoKHgpe01lKHgpfX1mdW5jdGlvbiBCKHkpe3RyeXtnKGdlLnRocm93KHkpKX1jYXRjaCh4KXtNZSh4KX19ZnVuY3Rpb24gZyh5''@;'; put 'put ''KXt5LmRvbmU/VGUoeS52YWx1ZSk6ZnVuY3Rpb24gX2UoVGUpe3JldHVybiBUZSBpbnN0YW5jZW9mIHVlP1RlOm5ldyB1ZShmdW5jdGlvbihNZSl7TWUoVGUpfSl9KHkudmFsdWUpLnRoZW4oWmUsQil9ZygoZ2U9Z2UuYXBwbHkocmUsaWV8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC50aHJvd0lmRXJyb3I9WC5SZXF1ZXN0Q2xpZW50PXZvaWQgMDtjb25zdCBGPXcoYig4MzczKSksUj1iKDE1MjcpLHo9YigxMzk1KSxOPWIoMjgxMyksTz1iKDk3NzgpLEs9Yig5NTI2KSxaPWIoNTkyOCksWT1iKDEwMDUpLFc9''@;'; put 'put ''Yig5NTM5KTtYLlJlcXVlc3RDbGllbnQ9Y2xhc3MgcXtjb25zdHJ1Y3RvcihpZSx1ZSxnZSxfZSl7dGhpcy5iYXNlVXJsPWllLHRoaXMucmVxdWVzdHM9W10sdGhpcy5yZXF1ZXN0c0xpbWl0PTEwLHRoaXMudmVyYm9zZU1vZGU9ITEsdGhpcy5jc3JmVG9rZW49e2hlYWRlck5hbWU6IiIsdmFs''@;'; put 'put ''dWU6IiJ9LHRoaXMuZ2V0UmVxdWVzdHM9KCk9PnRoaXMucmVxdWVzdHMsdGhpcy5jbGVhclJlcXVlc3RzPSgpPT57dGhpcy5yZXF1ZXN0cz1bXX0sdGhpcy5hdXRob3JpemU9VGU9PlAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCBNZT1udWxsO2NvbnN0IFplPXt9LEI9VGUu''@;'; put 'put ''c3BsaXQoIjxib2R5PiIpWzFdLnNwbGl0KCI8L2JvZHk+IilbMF0sZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtnLmlubmVySFRNTD1CO2NvbnN0IHk9Zy5xdWVyeVNlbGVjdG9yKCIjYXBwbGljYXRpb25fYXV0aG9yaXphdGlvbiIpO01lPXk/dGhpcy5iYXNlVXJsK3kuZ2V0QXR0''@;'; put 'put ''cmlidXRlKCJhY3Rpb24iKTpudWxsO2NvbnN0IHg9eT8ucXVlcnlTZWxlY3RvckFsbCgiaW5wdXQiKTtmb3IoY29uc3QgSCBvZiB4KSJ1c2VyX29hdXRoX2FwcHJvdmFsIj09PUgubmFtZSYmKEgudmFsdWU9InRydWUiKSxaZVtILm5hbWVdPUgudmFsdWU7Y29uc3QgQz1PYmplY3Qua2V5cyha''@;'; put 'put ''ZSkuZmluZChIPT5IPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCJjc3JmIikpO0MmJih0aGlzLmNzcmZUb2tlbi52YWx1ZT1aZVtDXSx0aGlzLmNzcmZUb2tlbi5oZWFkZXJOYW1lPXRoaXMuY3NyZlRva2VuLmhlYWRlck5hbWV8fCJ4LWNzcmYtdG9rZW4iKTtjb25zdCBUPW5ldyBGb3JtRGF0''@;'; put 'put ''YTtmb3IoY29uc3QgSCBpbiBaZSlaZS5oYXNPd25Qcm9wZXJ0eShIKSYmVC5hcHBlbmQoSCxaZVtIXSk7aWYoIU1lKXRocm93IG5ldyBFcnJvcigiQXV0aCBGb3JtIFVSTCBpcyBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4geWllbGQgdGhpcy5odHRwQ2xpZW50LnBvc3QoTWUsVCx7cmVz''@;'; put 'put ''cG9uc2VUeXBlOiJ0ZXh0IixoZWFkZXJzOntBY2NlcHQ6IiovKiIsIkNvbnRlbnQtVHlwZSI6InRleHQvcGxhaW4ifX0pLnRoZW4oSD0+SC5kYXRhKS5jYXRjaChIPT57KEkubG9nZ2VyfHxfKS5lcnJvcihIKX0pfSksdGhpcy5wcmV0dGlmeVN0cmluZz1UZT0+KDAsVy5pbnNwZWN0KShUZSx7''@;'; put 'put ''Y29sb3JzOiJibGVhY2hlZCIhPT10aGlzLnZlcmJvc2VNb2RlfSksdGhpcy5wYXJzZUludGVyY2VwdGVkQm9keT1UZT0+e2lmKCFUZSlyZXR1cm4iIjtsZXQgTWU7aWYoInN0cmluZyI9PXR5cGVvZiBUZSl0cnl7TWU9SlNPTi5wYXJzZShUZSl9Y2F0Y2h7TWU9VGV9ZWxzZSBNZT1UZTtjb25z''@;'; put 'put ''dCBaZT10aGlzLnByZXR0aWZ5U3RyaW5nKE1lKS5zcGxpdCgiXG4iKTtyZXR1cm4gWmUubGVuZ3RoPjUxJiYoWmUuc3BsaWNlKDUwKSxaZS5wdXNoKCIuLi4iKSksWmUuam9pbigiXG4iKX0sdGhpcy5oYW5kbGVBeGlvc1Jlc3BvbnNlPVRlPT57dmFyIE1lLFplLEIsZztjb25zdHtzdGF0dXM6''@;'; put 'put ''eSxjb25maWc6eCxyZXF1ZXN0OkMsZGF0YTpUfT1UZSxIPW51bGwhPT0oTWU9Qz8uX2hlYWRlcikmJnZvaWQgMCE9PU1lP01lOiJOb3QgcHJvdmlkZWRcbiIsaj1udWxsIT09KEI9bnVsbD09PShaZT1DPy5yZXMpfHx2b2lkIDA9PT1aZT92b2lkIDA6WmUucmF3SGVhZGVycykmJnZvaWQgMCE9''@;'; put 'put ''PUI/QjpbIk5vdCBwcm92aWRlZCJdLEU9dGhpcy5mb3JtYXRIZWFkZXJzKGopLG09dGhpcy5wYXJzZUludGVyY2VwdGVkQm9keShUKTtyZXR1cm4gbnVsbD09PShnPUkubG9nZ2VyKXx8dm9pZCAwPT09Z3x8Zy5pbmZvKGBIVFRQIFJlcXVlc3QgKGZpcnN0IDUwIGxpbmVzKTpcbiR7SH0ke3Ro''@;'; put 'put ''aXMucGFyc2VJbnRlcmNlcHRlZEJvZHkoeC5kYXRhKX1cblxuSFRUUCBSZXNwb25zZSBDb2RlOiAke3RoaXMucHJldHRpZnlTdHJpbmcoeSl9XG5cbkhUVFAgUmVzcG9uc2UgKGZpcnN0IDUwIGxpbmVzKTpcbiR7RX0ke20/YFxuXG4ke219YDoiIn1cbmApLFRlfSx0aGlzLmhhbmRsZUF4aW9z''@;'; put 'put ''RXJyb3I9VGU9Pnt2YXIgTWUsWmUsQixnLHkseDtjb25zdCBDPSJOb3QgcHJvdmlkZWQiLHtyZXNwb25zZTpULHJlcXVlc3Q6SCxjb25maWc6an09VGU7bGV0IEU9e19oZWFkZXI6YCR7Q31cbmAscmVzOntyYXdIZWFkZXJzOltDXX19O0gmJihFPXtfaGVhZGVyOm51bGwhPT0oQj1udWxsIT09''@;'; put 'put ''KE1lPUguX2hlYWRlcikmJnZvaWQgMCE9PU1lP01lOm51bGw9PT0oWmU9SC5fY3VycmVudFJlcXVlc3QpfHx2b2lkIDA9PT1aZT92b2lkIDA6WmUuX2hlYWRlcikmJnZvaWQgMCE9PUI/QjpDLHJlczp7cmF3SGVhZGVyczpudWxsIT09KHk9bnVsbD09PShnPUgucmVzKXx8dm9pZCAwPT09Zz92''@;'; put 'put ''b2lkIDA6Zy5yYXdIZWFkZXJzKSYmdm9pZCAwIT09eT95OltDXX19KTtsZXQgbT1UfHx7c3RhdHVzOkMscmVxdWVzdDpFLGNvbmZpZzpqfHx7ZGF0YTpDLGhlYWRlcnM6e319LGRhdGE6Q307Y29uc3R7c3RhdHVzOkEscmVxdWVzdDphZSxkYXRhOm5lfT1tLHtfaGVhZGVyOnNlLHJlczpDZX09''@;'; put 'put ''YWUsVWU9dGhpcy5mb3JtYXRIZWFkZXJzKENlLnJhd0hlYWRlcnMpLEplPXRoaXMucGFyc2VJbnRlcmNlcHRlZEJvZHkobmUpO3JldHVybiBudWxsPT09KHg9SS5sb2dnZXIpfHx2b2lkIDA9PT14fHx4LmluZm8oYEhUVFAgUmVxdWVzdCAoZmlyc3QgNTAgbGluZXMpOlxuJHtzZX0ke3RoaXMu''@;'; put 'put ''cGFyc2VJbnRlcmNlcHRlZEJvZHkoaj8uZGF0YSl9XG5cbkhUVFAgUmVzcG9uc2UgQ29kZTogJHt0aGlzLnByZXR0aWZ5U3RyaW5nKEEpfVxuXG5IVFRQIFJlc3BvbnNlIChmaXJzdCA1MCBsaW5lcyk6XG4ke1VlfSR7SmU/YFxuXG4ke0plfWA6IiJ9XG5gKSxUZX0sdGhpcy5mb3JtYXRIZWFk''@;'; put 'put ''ZXJzPVRlPT5UZS5yZWR1Y2UoKE1lLFplLEIpPT5NZSsoQiUyPT0wP2AkezA9PT1CPyIiOiJcbiJ9JHtaZX1gOmA6ICR7WmV9YCksIiIpLHRoaXMuc2V0VmVyYm9zZU1vZGU9VGU9Pnt0aGlzLnZlcmJvc2VNb2RlPVRlLHRoaXMudmVyYm9zZU1vZGU/dGhpcy5lbmFibGVWZXJib3NlTW9kZSgp''@;'; put 'put ''OnRoaXMuZGlzYWJsZVZlcmJvc2VNb2RlKCl9LHRoaXMuZW5hYmxlVmVyYm9zZU1vZGU9KFRlPXRoaXMuaGFuZGxlQXhpb3NSZXNwb25zZSxNZT10aGlzLmhhbmRsZUF4aW9zRXJyb3IpPT57dGhpcy5odHRwSW50ZXJjZXB0b3I9dGhpcy5odHRwQ2xpZW50LmludGVyY2VwdG9ycy5yZXNwb25z''@;'; put 'put ''ZS51c2UoVGUsTWUpfSx0aGlzLmRpc2FibGVWZXJib3NlTW9kZT0oKT0+e3RoaXMuaHR0cEludGVyY2VwdG9yJiZ0aGlzLmh0dHBDbGllbnQuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmVqZWN0KHRoaXMuaHR0cEludGVyY2VwdG9yKX0sdGhpcy5nZXRIZWFkZXJzPShUZSxNZSk9Pntjb25zdCBa''@;'; put 'put ''ZT17fTtyZXR1cm4iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiE9PU1lJiYoWmVbIkNvbnRlbnQtVHlwZSJdPU1lKSxaZS5BY2NlcHQ9ImFwcGxpY2F0aW9uL2pzb24iPT09TWU/ImFwcGxpY2F0aW9uL2pzb24iOiIqLyoiLFRlJiYoWmUuQXV0aG9yaXphdGlvbj1gQmVhcmVy''@;'; put 'put ''ICR7VGV9YCksdGhpcy5jc3JmVG9rZW4uaGVhZGVyTmFtZSYmdGhpcy5jc3JmVG9rZW4udmFsdWUmJihaZVt0aGlzLmNzcmZUb2tlbi5oZWFkZXJOYW1lXT10aGlzLmNzcmZUb2tlbi52YWx1ZSksWmV9LHRoaXMucGFyc2VBbmRTZXRGaWxlVXBsb2FkQ3NyZlRva2VuPVRlPT57Y29uc3QgTWU9''@;'; put 'put ''dGhpcy5wYXJzZUNzcmZUb2tlbihUZSk7TWUmJih0aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW49TWUpfSx0aGlzLnBhcnNlQW5kU2V0Q3NyZlRva2VuPVRlPT57Y29uc3QgTWU9dGhpcy5wYXJzZUNzcmZUb2tlbihUZSk7TWUmJih0aGlzLmNzcmZUb2tlbj1NZSl9LHRoaXMucGFyc2VDc3JmVG9r''@;'; put 'put ''ZW49VGU9Pnt2YXIgTWU7Y29uc3QgWmU9bnVsbD09PShNZT1UZS5oZWFkZXJzWyJ4LWNzcmYtaGVhZGVyIl0pfHx2b2lkIDA9PT1NZT92b2lkIDA6TWUudG9Mb3dlckNhc2UoKTtpZihaZSlyZXR1cm57aGVhZGVyTmFtZTpaZSx2YWx1ZTpUZS5oZWFkZXJzW1plXXx8IiJ9fSx0aGlzLmhhbmRs''@;'; put 'put ''ZUVycm9yPShUZSxNZSxaZT0hMSk9PlAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEI9VGUucmVzcG9uc2U7aWYoVGUgaW5zdGFuY2VvZiB6LkF1dGhvcml6ZUVycm9yKXtjb25zdCBnPXlpZWxkIHRoaXMuaHR0cENsaWVudC5nZXQoVGUuY29uZmlybVVybCx7cmVzcG9u''@;'; put 'put ''c2VUeXBlOiJ0ZXh0IixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoidGV4dC9wbGFpbiIsQWNjZXB0OiIqLyoifX0pLmNhdGNoKHk9Pnt0aHJvdygwLE8ucHJlZml4TWVzc2FnZSkoeSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBlcnJvciBjb25maXJtVXJsLiAiKX0pO3JldHVybigwLFIuaXNBdXRo''@;'; put 'put ''b3JpemVGb3JtUmVxdWlyZWQpKGc/LmRhdGEpJiYoeWllbGQgdGhpcy5hdXRob3JpemUoZy5kYXRhKS5jYXRjaCh5PT57dGhyb3coMCxPLnByZWZpeE1lc3NhZ2UpKHksIkVycm9yIHdoaWxlIGF1dGhvcml6aW5nIHJlcXVlc3QuICIpfSkpLHlpZWxkIE1lKCkuY2F0Y2goeT0+e3Rocm93KDAs''@;'; put 'put ''Ty5wcmVmaXhNZXNzYWdlKSh5LCJFcnJvciB3aGlsZSBleGVjdXRpbmcgY2FsbGJhY2sgaW4gaGFuZGxlRXJyb3IuICIpfSl9aWYoVGUgaW5zdGFuY2VvZiB6LkxvZ2luUmVxdWlyZWRFcnJvcil0aHJvdyB0aGlzLmNsZWFyQ3NyZlRva2VucygpLFRlO2lmKFRlIGluc3RhbmNlb2YgWS5JbnZh''@;'; put 'put ''bGlkU0FTanNDc3JmRXJyb3IpcmV0dXJuIHlpZWxkIHRoaXMuaHR0cENsaWVudC5nZXQoIi8iLHt3aXRoWFNSRlRva2VuOiEwfSkudGhlbihnPT57dmFyIHk7Y29uc3QgeD1udWxsPT09KHk9LzxzY3JpcHQ+ZG9jdW1lbnQuY29va2llID0gJyhYU1JGLVRPS0VOPS4qOyBNYXgtQWdlPTg2NDAw''@;'; put 'put ''OyBTYW1lU2l0ZT1TdHJpY3Q7IFBhdGg9XC87KSc8XC9zY3JpcHQ+Ly5leGVjKGcuZGF0YSkpfHx2b2lkIDA9PT15P3ZvaWQgMDp5WzFdO3gmJihkb2N1bWVudC5jb29raWU9eCl9KS5jYXRjaChnPT57dGhyb3coMCxPLnByZWZpeE1lc3NhZ2UpKGcsIkVycm9yIHdoaWxlIHJlLWZldGNoaW5n''@;'; put 'put ''IENTUkYgdG9rZW4uIil9KSx5aWVsZCBNZSgpLmNhdGNoKGc9Pnt0aHJvdygwLE8ucHJlZml4TWVzc2FnZSkoZywiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGNhbGxiYWNrIGluIGhhbmRsZUVycm9yLiAiKX0pO2lmKDQwMz09PUI/LnN0YXR1c3x8NDQ5PT09Qj8uc3RhdHVzKXtpZih0aGlzLnBh''@;'; put 'put ''cnNlQW5kU2V0Q3NyZlRva2VuKEIpLHRoaXMuY3NyZlRva2VuLmhlYWRlck5hbWUmJnRoaXMuY3NyZlRva2VuLnZhbHVlKXJldHVybiB5aWVsZCBNZSgpLmNhdGNoKGc9Pnt0aHJvdygwLE8ucHJlZml4TWVzc2FnZSkoZywiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGNhbGxiYWNrIGluIGhhbmRs''@;'; put 'put ''ZUVycm9yLiAiKX0pO3Rocm93IFRlfWlmKDQwND09PUI/LnN0YXR1cyl0aHJvdyBuZXcgei5Ob3RGb3VuZEVycm9yKEIuY29uZmlnLnVybCk7aWYoNTAyIT09Qj8uc3RhdHVzKXRocm93IFRlLmlzQXhpb3NFcnJvciYmIlVOQUJMRV9UT19WRVJJRllfTEVBRl9TSUdOQVRVUkUiPT09VGUuY29k''@;'; put 'put ''ZT9uZXcgei5DZXJ0aWZpY2F0ZUVycm9yKFRlLm1lc3NhZ2UpOlRlLm1lc3NhZ2U/VGU6KDAsTy5wcmVmaXhNZXNzYWdlKShUZSwiRXJyb3Igd2hpbGUgaGFuZGxpbmcgZXJyb3IuICIpO2lmKFplKXRocm93IG5ldyB6LkludGVybmFsU2VydmVyRXJyb3J9KSx0aGlzLmNyZWF0ZUh0dHBDbGll''@;'; put 'put ''bnQoaWUsdWUpLGdlJiYodGhpcy5yZXF1ZXN0c0xpbWl0PWdlKSxfZSYmKHRoaXMuc2V0VmVyYm9zZU1vZGUoX2UpLHRoaXMuZW5hYmxlVmVyYm9zZU1vZGUoKSl9c2V0Q29uZmlnKGllLHVlKXt0aGlzLmNyZWF0ZUh0dHBDbGllbnQoaWUsdWUpfXNhdmVMb2NhbFN0b3JhZ2VUb2tlbihpZSx1''@;'; put 'put ''ZSl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oImFjY2Vzc1Rva2VuIixpZSksbG9jYWxTdG9yYWdlLnNldEl0ZW0oInJlZnJlc2hUb2tlbiIsdWUpfWdldENzcmZUb2tlbihpZT0iZ2VuZXJhbCIpe3JldHVybiJmaWxlIj09PWllP3RoaXMuZmlsZVVwbG9hZENzcmZUb2tlbjp0aGlzLmNzcmZUb2tl''@;'; put 'put ''bn1jbGVhckNzcmZUb2tlbnMoKXt0aGlzLmNzcmZUb2tlbj17aGVhZGVyTmFtZToiIix2YWx1ZToiIn0sdGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuPXtoZWFkZXJOYW1lOiIiLHZhbHVlOiIifX1jbGVhckxvY2FsU3RvcmFnZVRva2Vucygpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJhY2Nlc3NU''@;'; put 'put ''b2tlbiIsIiIpLGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJyZWZyZXNoVG9rZW4iLCIiKX1nZXRCYXNlVXJsKCl7cmV0dXJuIHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy5iYXNlVVJMfHwiIn1hcHBlbmRSZXF1ZXN0KGllLHVlLGdlKXtsZXQgX2U9IiIsVGU9IiIsTWU9bnVsbDtnZSYmKGllPy5s''@;'; put 'put ''b2c/KF9lPSgwLFoucGFyc2VTb3VyY2VDb2RlKShpZS5sb2cpLFRlPSgwLFoucGFyc2VHZW5lcmF0ZWRDb2RlKShpZS5sb2cpLE1lPWllPy5yZXN1bHQ/aWUucmVzdWx0LldPUks6aWUubG9nKTppZT8ucmVzdWx0JiYoInN0cmluZyI9PXR5cGVvZiBpZS5yZXN1bHQmJihfZT0oMCxaLnBhcnNl''@;'; put 'put ''U291cmNlQ29kZSkoaWUucmVzdWx0KSxUZT0oMCxaLnBhcnNlR2VuZXJhdGVkQ29kZSkoaWUucmVzdWx0KSksTWU9aWUucmVzdWx0LldPUkspKTtjb25zdCBaZT0ic3RyaW5nIj09dHlwZW9mIGllPy5yZXN1bHQ/aWU/LnJlc3VsdDpKU09OLnN0cmluZ2lmeShpZT8ucmVzdWx0LG51bGwsMik7''@;'; put 'put ''dGhpcy5yZXF1ZXN0cy5wdXNoKHtsb2dGaWxlOmllPy5sb2d8fFplfHxpZSxzZXJ2aWNlTGluazp1ZSx0aW1lc3RhbXA6bmV3IERhdGUsc291cmNlQ29kZTpfZSxnZW5lcmF0ZWRDb2RlOlRlLFNBU1dPUks6TWV9KSx0aGlzLnJlcXVlc3RzLmxlbmd0aD50aGlzLnJlcXVlc3RzTGltaXQmJnRo''@;'; put 'put ''aXMucmVxdWVzdHMuc3BsaWNlKDAsMSl9Z2V0KGllLHVlLGdlPSJhcHBsaWNhdGlvbi9qc29uIixfZT17fSxUZT0hMSl7cmV0dXJuIFAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFplPXtoZWFkZXJzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLmdl''@;'; put 'put ''dEhlYWRlcnModWUsZ2UpKSxfZSkscmVzcG9uc2VUeXBlOiJ0ZXh0L3BsYWluIj09PWdlPyJ0ZXh0IjoianNvbiIsd2l0aFhTUkZUb2tlbjohMH07cmV0dXJuInRleHQvcGxhaW4iPT09Z2UmJihaZS50cmFuc2Zvcm1SZXNwb25zZT12b2lkIDApLHRoaXMuaHR0cENsaWVudC5nZXQoaWUsWmUp''@;'; put 'put ''LnRoZW4oQj0+KCgwLFgudGhyb3dJZkVycm9yKShCKSx0aGlzLnBhcnNlUmVzcG9uc2UoQikpKS5jYXRjaChCPT5QKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5oYW5kbGVFcnJvcihCLCgpPT50aGlzLmdldChpZSx1ZSxnZSxfZSkuY2F0Y2goZz0+''@;'; put 'put ''e3Rocm93KDAsTy5wcmVmaXhNZXNzYWdlKShnLCJFcnJvciB3aGlsZSBleGVjdXRpbmcgaGFuZGxlIGVycm9yIGNhbGxiYWNrLiAiKX0pLFRlKX0pKX0pfXBvc3QoaWUsdWUsZ2UsX2U9ImFwcGxpY2F0aW9uL2pzb24iLFRlPXt9LE1lPXt9KXtyZXR1cm4gUCh0aGlzLHZvaWQgMCx2b2lkIDAs''@;'; put 'put ''ZnVuY3Rpb24qKCl7Y29uc3QgWmU9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0SGVhZGVycyhnZSxfZSkpLFRlKTtyZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3QoaWUsdWUsT2JqZWN0LmFzc2lnbih7aGVhZGVyczpaZSx3aXRoWFNSRlRva2VuOiEwfSxNZSkpLnRo''@;'; put 'put ''ZW4oQj0+KCgwLFgudGhyb3dJZkVycm9yKShCKSx0aGlzLnBhcnNlUmVzcG9uc2UoQikpKS5jYXRjaChCPT5QKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5oYW5kbGVFcnJvcihCLCgpPT50aGlzLnBvc3QoaWUsdWUsZ2UsX2UsVGUpKX0pKX0pfXB1''@;'; put 'put ''dChpZSx1ZSxnZSxfZT17fSl7cmV0dXJuIFAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFRlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldEhlYWRlcnMoZ2UsImFwcGxpY2F0aW9uL2pzb24iKSksX2UpO3JldHVybiB0aGlzLmh0dHBDbGllbnQu''@;'; put 'put ''cHV0KGllLHVlLHtoZWFkZXJzOlRlLHdpdGhYU1JGVG9rZW46ITB9KS50aGVuKE1lPT4oKDAsWC50aHJvd0lmRXJyb3IpKE1lKSx0aGlzLnBhcnNlUmVzcG9uc2UoTWUpKSkuY2F0Y2goTWU9PlAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmhhbmRs''@;'; put 'put ''ZUVycm9yKE1lLCgpPT50aGlzLnB1dChpZSx1ZSxnZSxfZSkpfSkpfSl9ZGVsZXRlKGllLHVlKXtyZXR1cm4gUCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgZ2U9dGhpcy5nZXRIZWFkZXJzKHVlLCJhcHBsaWNhdGlvbi9qc29uIik7cmV0dXJuIHRoaXMuaHR0cENsaWVu''@;'; put 'put ''dC5kZWxldGUoaWUse2hlYWRlcnM6Z2Usd2l0aFhTUkZUb2tlbjohMH0pLnRoZW4oX2U9PigoMCxYLnRocm93SWZFcnJvcikoX2UpLHRoaXMucGFyc2VSZXNwb25zZShfZSkpKS5jYXRjaChfZT0+UCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuaGFu''@;'; put 'put ''ZGxlRXJyb3IoX2UsKCk9PnRoaXMuZGVsZXRlKGllLHVlKSl9KSl9KX1wYXRjaChpZSx1ZT17fSxnZSxfZT17fSl7cmV0dXJuIFAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFRlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldEhlYWRlcnMoZ2Us''@;'; put 'put ''ImFwcGxpY2F0aW9uL2pzb24iKSksX2UpO3JldHVybiB0aGlzLmh0dHBDbGllbnQucGF0Y2goaWUsdWUse2hlYWRlcnM6VGUsd2l0aFhTUkZUb2tlbjohMH0pLnRoZW4oTWU9PigoMCxYLnRocm93SWZFcnJvcikoTWUpLHRoaXMucGFyc2VSZXNwb25zZShNZSkpKS5jYXRjaChNZT0+UCh0aGlz''@;'; put 'put ''LHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuaGFuZGxlRXJyb3IoTWUsKCk9PnRoaXMucGF0Y2goaWUsdWUsZ2UpKX0pKX0pfXVwbG9hZEZpbGUoaWUsdWUsZ2Upe3ZhciBfZTtyZXR1cm4gUCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3Qg''@;'; put 'put ''VGU9dGhpcy5nZXRIZWFkZXJzKGdlLCJhcHBsaWNhdGlvbi9qc29uIik7bnVsbCE9PShfZT10aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW4pJiZ2b2lkIDAhPT1fZSYmX2UudmFsdWUmJihUZVt0aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW4uaGVhZGVyTmFtZV09dGhpcy5maWxlVXBsb2FkQ3NyZlRv''@;'; put 'put ''a2VuLnZhbHVlKTt0cnl7Y29uc3QgTWU9eWllbGQgdGhpcy5odHRwQ2xpZW50LnBvc3QoaWUsdWUse2hlYWRlcnM6VGUsdHJhbnNmb3JtUmVxdWVzdDpaZT0+WmV9KTtyZXR1cm57cmVzdWx0Ok1lLmRhdGEsZXRhZzpNZS5oZWFkZXJzLmV0YWd9fWNhdGNoKE1lKXtjb25zdCBaZT1NZS5yZXNw''@;'; put 'put ''b25zZTtpZig0MDM9PT1aZT8uc3RhdHVzfHw0NDk9PT1aZT8uc3RhdHVzKXtpZih0aGlzLnBhcnNlQW5kU2V0RmlsZVVwbG9hZENzcmZUb2tlbihaZSksdGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuKXJldHVybiB0aGlzLnVwbG9hZEZpbGUoaWUsdWUsZ2UpO3Rocm93IE1lfXRocm93IE1lfX0p''@;'; put 'put ''fXBhcnNlUmVzcG9uc2UoaWUpe2NvbnN0IHVlPWllPy5oZWFkZXJzP2llLmhlYWRlcnMuZXRhZzoiIjtsZXQgZ2UsX2U9ITE7dHJ5e2dlPSJzdHJpbmciPT10eXBlb2YgaWUuZGF0YT9KU09OLnBhcnNlKGllLmRhdGEpOmllLmRhdGF9Y2F0Y2h7dHJ5e2dlPUpTT04ucGFyc2UoKDAsTi5wYXJz''@;'; put 'put ''ZVdlYm91dFJlc3BvbnNlKShpZS5kYXRhKSl9Y2F0Y2h7Z2U9aWUuZGF0YX1fZT0hMH1sZXQgVGU9e3Jlc3VsdDpnZSxldGFnOnVlLHN0YXR1czppZS5zdGF0dXN9O3JldHVybiBfZSYmKFRlLmxvZz1pZS5kYXRhKSxUZX1jcmVhdGVIdHRwQ2xpZW50KGllLHVlKXtjb25zdCBnZT11ZT9uZXcg''@;'; put 'put ''Ri5BZ2VudCh1ZSk6dm9pZCAwO3RoaXMuaHR0cENsaWVudD0oMCxaLmNyZWF0ZUF4aW9zSW5zdGFuY2UpKGllLGdlKSx0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMudmFsaWRhdGVTdGF0dXM9X2U9Pl9lPj0yMDAmJl9lPD00MDF9fSxYLnRocm93SWZFcnJvcj1yZT0+e3ZhciBpZSx1ZSxnZSxf''@;'; put 'put ''ZSxUZSxNZSxaZTtzd2l0Y2gocmUuc3RhdHVzKXtjYXNlIDQwMDppZigib2JqZWN0Ij09dHlwZW9mIHJlLmRhdGEmJiJpbnZhbGlkX2dyYW50Ij09PXJlLmRhdGEuZXJyb3IpdGhyb3cgbmV3IHouTG9naW5SZXF1aXJlZEVycm9yKHJlLmRhdGEpO2lmKCJzdHJpbmciPT10eXBlb2YgcmUuZGF0''@;'; put 'put ''YSYmImludmFsaWQgY3NyZiB0b2tlbiEiPT09cmUuZGF0YS50b0xvd2VyQ2FzZSgpKXRocm93IG5ldyBZLkludmFsaWRTQVNqc0NzcmZFcnJvcjticmVhaztjYXNlIDQwMTp0aHJvdyJvYmplY3QiPT10eXBlb2YgcmUuZGF0YT9uZXcgei5Mb2dpblJlcXVpcmVkRXJyb3IocmUuZGF0YSk6bmV3''@;'; put 'put ''IHouTG9naW5SZXF1aXJlZEVycm9yfWlmKG51bGwhPT0odWU9bnVsbD09PShpZT1yZS5kYXRhKXx8dm9pZCAwPT09aWU/dm9pZCAwOmllLmVudGl0eUlEKSYmdm9pZCAwIT09dWUmJnVlLmluY2x1ZGVzKCJsb2dpbiIpKXRocm93IG5ldyB6LkxvZ2luUmVxdWlyZWRFcnJvcjtpZigic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mIHJlLmRhdGEmJigwLFIuaXNBdXRob3JpemVGb3JtUmVxdWlyZWQpKHJlLmRhdGEpKXRocm93IG5ldyB6LkF1dGhvcml6ZUVycm9yKCJBdXRob3JpemF0aW9uIHJlcXVpcmVkIixyZS5yZXF1ZXN0LnJlc3BvbnNlVVJMKTtpZigic3RyaW5nIj09dHlwZW9mIHJlLmRhdGEmJigw''@;'; put 'put ''LFIuaXNMb2dJblJlcXVpcmVkKShyZS5kYXRhKSYmKG51bGw9PT0oX2U9bnVsbD09PShnZT1yZS5jb25maWcpfHx2b2lkIDA9PT1nZT92b2lkIDA6Z2UudXJsKXx8dm9pZCAwPT09X2V8fCFfZS5pbmNsdWRlcygiL1NBU0xvZ29uL2xvZ2luIikpKXRocm93IG5ldyB6LkxvZ2luUmVxdWlyZWRF''@;'; put 'put ''cnJvcjtpZihudWxsIT09KFRlPXJlLmRhdGEpJiZ2b2lkIDAhPT1UZSYmVGUuYXV0aF9yZXF1ZXN0KXRocm93IG5ldyB6LkF1dGhvcml6ZUVycm9yKHJlLmRhdGEubWVzc2FnZSxyZS5yZXF1ZXN0LnJlc3BvbnNlVVJMKTtpZihudWxsIT09KFplPW51bGw9PT0oTWU9cmUuY29uZmlnKXx8dm9p''@;'; put 'put ''ZCAwPT09TWU/dm9pZCAwOk1lLnVybCkmJnZvaWQgMCE9PVplJiZaZS5pbmNsdWRlcygic2FzQXV0aEVycm9yIikpdGhyb3cgbmV3IEsuU0FTOUF1dGhFcnJvcjtjb25zdCBCPUoocmUuZGF0YSk7aWYoQil0aHJvdyBCfTtjb25zdCBKPXJlPT57aWYoIXJlKXJldHVybiBudWxsO3RyeXtjb25z''@;'; put 'put ''dCBpZT1KU09OLnBhcnNlKHJlPy5yZXBsYWNlKC9bXG5ccl0vZywiICIpKTtpZihpZS5lcnJvckNvZGUmJmllLm1lc3NhZ2UpcmV0dXJuIG5ldyB6LkpvYkV4ZWN1dGlvbkVycm9yKGllLmVycm9yQ29kZSxpZS5tZXNzYWdlLHJlPy5yZXBsYWNlKC9bXG5ccl0vZywiICIpKX1jYXRjaHt9dHJ5''@;'; put 'put ''e2lmKHJlPy5pbmNsdWRlcygneyJlcnJvckNvZGUnKSl7Y29uc3QgdWU9cmUuc3BsaXQoJ3siZXJyb3JDb2RlJyk7aWYodWUubGVuZ3RoPjEpe2NvbnN0IGdlPSd7ImVycm9yQ29kZScrdWVbMV0uc3BsaXQoJyJ9JylbMF0rJyJ9JyxfZT1KU09OLnBhcnNlKGdlLnJlcGxhY2UoL1tcblxyXS9n''@;'; put 'put ''LCIgIikpO3JldHVybiBuZXcgei5Kb2JFeGVjdXRpb25FcnJvcihfZS5lcnJvckNvZGUsX2UubWVzc2FnZSxyZT8ucmVwbGFjZSgvW1xuXHJdL2csIlxuIikpfX19Y2F0Y2h7fXRyeXtpZihyZT8ubWF0Y2goL3N0b3JlZCBwcm9jZXNzIG5vdCBmb3VuZDogL2kpKXtjb25zdCB1ZT1yZS5zcGxp''@;'; put 'put ''dCgvc3RvcmVkIHByb2Nlc3Mgbm90IGZvdW5kOiAvaSk7aWYodWUubGVuZ3RoPjEpe2NvbnN0IGdlPXVlWzFdLnNwbGl0KCI8aT4iKVsxXS5zcGxpdCgiPC9pPiIpWzBdLF9lPWdlLmVuZHNXaXRoKCJydW5uZXIiKT8iU0FTSlMgcnVubmVyIG5vdCBmb3VuZC4gSGVyZSdzIHRoZSBsaW5rICho''@;'; put 'put ''dHRwczovL2NsaS5zYXNqcy5pby9hdXRoLyNzYXNqcy1ydW5uZXIpIHRvIHRoZSBTQVMgY29kZSBmb3IgcmVnaXN0ZXJpbmcgdGhlIFNBU2pzIHJ1bm5lciI6YFN0b3JlZCBwcm9jZXNzIG5vdCBmb3VuZDogJHtnZX1gO3JldHVybiBuZXcgei5Kb2JFeGVjdXRpb25FcnJvcig1MDAsX2UsIiIp''@;'; put 'put ''fX19Y2F0Y2h7fXRyeXtpZighcmU/Lm1hdGNoKC8+PndlYm91dEJFR0lOPDwvKSYmcmU/Lm1hdGNoKC9TdG9yZWQgUHJvY2VzcyBFcnJvci9pKSYmcmU/Lm1hdGNoKC9UaGlzIHJlcXVlc3QgY29tcGxldGVkIHdpdGggZXJyb3JzLi9pKSl7Y29uc3QgdWU9cmUuc3BsaXQoIjxoMj5TQVMgTG9n''@;'; put 'put ''PC9oMj4iKTtpZih1ZS5sZW5ndGg+MSl7Y29uc3QgZ2U9dWVbMV0uc3BsaXQoIjxwcmU+IilbMV0uc3BsaXQoIjwvcHJlPiIpWzBdO3JldHVybiBuZXcgei5Kb2JFeGVjdXRpb25FcnJvcig1MDAsIlRoaXMgcmVxdWVzdCBjb21wbGV0ZWQgd2l0aCBlcnJvcnMuIixnZSl9fX1jYXRjaHt9cmV0''@;'; put 'put ''dXJuIG51bGx9fSw3OTU6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKE8sSyxaLFkpe3ZvaWQgMD09PVkmJihZPVopO3ZhciBXPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0''@;'; put 'put ''b3IoSyxaKTsoIVd8fCgiZ2V0ImluIFc/IUsuX19lc01vZHVsZTpXLndyaXRhYmxlfHxXLmNvbmZpZ3VyYWJsZSkpJiYoVz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gS1taXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTyxZLFcpfTpmdW5jdGlvbihPLEssWixZKXt2''@;'; put 'put ''b2lkIDA9PT1ZJiYoWT1aKSxPW1ldPUtbWl19KSxfPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihPLEspe09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTpLfSl9OmZ1bmN0aW9uKE8sSyl7''@;'; put 'put ''Ty5kZWZhdWx0PUt9KSxwPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihPKXtpZihPJiZPLl9fZXNNb2R1bGUpcmV0dXJuIE87dmFyIEs9e307aWYobnVsbCE9Tylmb3IodmFyIFogaW4gTykiZGVmYXVsdCIhPT1aJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNh''@;'; put 'put ''bGwoTyxaKSYmSShLLE8sWik7cmV0dXJuIF8oSyxPKSxLfSxWPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihPLEssWixZKXtyZXR1cm4gbmV3KFp8fChaPVByb21pc2UpKShmdW5jdGlvbihxLGVlKXtmdW5jdGlvbiBKKHVlKXt0cnl7aWUoWS5uZXh0KHVlKSl9Y2F0Y2goZ2Upe2Vl''@;'; put 'put ''KGdlKX19ZnVuY3Rpb24gcmUodWUpe3RyeXtpZShZLnRocm93KHVlKSl9Y2F0Y2goZ2Upe2VlKGdlKX19ZnVuY3Rpb24gaWUodWUpe3VlLmRvbmU/cSh1ZS52YWx1ZSk6ZnVuY3Rpb24gVyhxKXtyZXR1cm4gcSBpbnN0YW5jZW9mIFo/cTpuZXcgWihmdW5jdGlvbihlZSl7ZWUocSl9KX0odWUu''@;'; put 'put ''dmFsdWUpLnRoZW4oSixyZSl9aWUoKFk9WS5hcHBseShPLEt8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5TYXM5UmVxdWVzdENsaWVudD12b2lkIDA7Y29uc3Qgdz1iKDgyMjQpLFA9cChiKDc4NTcpKSxGPWIoOTc3''@;'; put 'put ''OCksUj1iKDQ1ODgpLHo9YigxMzk1KTtYLlNhczlSZXF1ZXN0Q2xpZW50PWNsYXNzIE4gZXh0ZW5kcyBSLlJlcXVlc3RDbGllbnR7Y29uc3RydWN0b3IoSyxaKXtzdXBlcihLLFopLHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy5tYXhSZWRpcmVjdHM9MCx0aGlzLmh0dHBDbGllbnQuZGVmYXVs''@;'; put 'put ''dHMudmFsaWRhdGVTdGF0dXM9WT0+WT49MjAwJiZZPDMwMyx3LndyYXBwZXImJigoMCx3LndyYXBwZXIpKHRoaXMuaHR0cENsaWVudCksdGhpcy5odHRwQ2xpZW50LmRlZmF1bHRzLmphcj1uZXcgUC5Db29raWVKYXIpfWxvZ2luKEssWixZKXtyZXR1cm4gVih0aGlzLHZvaWQgMCx2b2lkIDAs''@;'; put 'put ''ZnVuY3Rpb24qKCl7Y29uc3QgVz1gL1VzZXIgRm9sZGVycy8ke0t9L015IEZvbGRlci9zYXNqcy9ydW5uZXJgO3RoaXMuaHR0cENsaWVudC5kZWZhdWx0cy5qYXImJih0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMuamFyLnJlbW92ZUFsbENvb2tpZXMoKSx5aWVsZCB0aGlzLmdldChgJHtZfT9f''@;'; put 'put ''cHJvZ3JhbT0ke1d9Jl91c2VybmFtZT0ke0t9Jl9wYXNzd29yZD0ke1p9YCx2b2lkIDAsInRleHQvcGxhaW4iKSl9KX1nZXQoSyxaLFk9ImFwcGxpY2F0aW9uL2pzb24iLFc9e30scT0hMSl7cmV0dXJuIFYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEo9e2hlYWRlcnM6''@;'; put 'put ''T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0SGVhZGVycyhaLFkpKSxXKSxyZXNwb25zZVR5cGU6InRleHQvcGxhaW4iPT09WT8idGV4dCI6Impzb24iLHdpdGhYU1JGVG9rZW46ITB9O3JldHVybiJ0ZXh0L3BsYWluIj09PVkmJihKLnRyYW5zZm9ybVJlc3BvbnNlPXZv''@;'; put 'put ''aWQgMCksdGhpcy5odHRwQ2xpZW50LmdldChLLEopLnRoZW4ocmU9PjMwMj09PXJlLnN0YXR1cz90aGlzLmdldChyZS5oZWFkZXJzLmxvY2F0aW9uLFosWSk6KCgwLFIudGhyb3dJZkVycm9yKShyZSksdGhpcy5wYXJzZVJlc3BvbnNlKHJlKSkpLmNhdGNoKHJlPT5WKHRoaXMsdm9pZCAwLHZv''@;'; put 'put ''aWQgMCxmdW5jdGlvbiooKXtpZihyZSBpbnN0YW5jZW9mIHouSm9iRXhlY3V0aW9uRXJyb3IpdGhyb3cgcmU7cmV0dXJuIHlpZWxkIHRoaXMuaGFuZGxlRXJyb3IocmUsKCk9PnRoaXMuZ2V0KEssWixZLFcpLmNhdGNoKGllPT57dGhyb3coMCxGLnByZWZpeE1lc3NhZ2UpKGllLCJFcnJvciB3''@;'; put 'put ''aGlsZSBleGVjdXRpbmcgaGFuZGxlIGVycm9yIGNhbGxiYWNrLiAiKX0pLHEpLmNhdGNoKGllPT57dGhyb3coMCxGLnByZWZpeE1lc3NhZ2UpKGllLCJFcnJvciB3aGlsZSBoYW5kbGluZyBlcnJvci4gIil9KX0pKX0pfXBvc3QoSyxaLFksVz0iYXBwbGljYXRpb24vanNvbiIscT17fSl7cmV0''@;'; put 'put ''dXJuIFYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IGVlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldEhlYWRlcnMoWSxXKSkscSk7cmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0KEssWix7aGVhZGVyczplZSx3aXRoWFNSRlRva2VuOiEwfSku''@;'; put 'put ''dGhlbihKPT5WKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gMzAyPT09Si5zdGF0dXM/eWllbGQgdGhpcy5nZXQoSi5oZWFkZXJzLmxvY2F0aW9uLHZvaWQgMCxXLHEpOigoMCxSLnRocm93SWZFcnJvcikoSiksdGhpcy5wYXJzZVJlc3BvbnNlKEopKX0pKS5jYXRjaChK''@;'; put 'put ''PT5WKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5oYW5kbGVFcnJvcihKLCgpPT50aGlzLnBvc3QoSyxaLFksVyxxKSl9KSl9KX19fSwzNjAyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxl''@;'; put 'put ''Iix7dmFsdWU6ITB9KSxYLlNBU0pTX0xPR1NfU0VQQVJBVE9SPVguU2FzanNSZXF1ZXN0Q2xpZW50PXZvaWQgMDtjb25zdCBJPWIoNDU4OCk7WC5TYXNqc1JlcXVlc3RDbGllbnQ9Y2xhc3MgXyBleHRlbmRzIEkuUmVxdWVzdENsaWVudHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50''@;'; put 'put ''cyksdGhpcy5nZXRIZWFkZXJzPShWLHcpPT57dmFyIFA7Y29uc3QgRj17fTtyZXR1cm4iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiE9PXcmJihGWyJDb250ZW50LVR5cGUiXT13KSxGLkFjY2VwdD0iYXBwbGljYXRpb24vanNvbiI9PT13P3c6IiovKiIsIVYmJnR5cGVvZiB3''@;'; put 'put ''aW5kb3c8InUiJiYoVj1udWxsIT09KFA9bG9jYWxTdG9yYWdlLmdldEl0ZW0oImFjY2Vzc1Rva2VuIikpJiZ2b2lkIDAhPT1QP1A6dm9pZCAwKSxWJiYoRi5BdXRob3JpemF0aW9uPWBCZWFyZXIgJHtWfWApLEZ9fXBhcnNlUmVzcG9uc2UoVil7Y29uc3Qgdz1WPy5oZWFkZXJzP1YuaGVhZGVy''@;'; put 'put ''cy5ldGFnOiIiO2xldCBGLFIseixQPXt9O3RyeXtQPSJzdHJpbmciPT10eXBlb2YgVi5kYXRhP0pTT04ucGFyc2UoVi5kYXRhKTpWLmRhdGF9Y2F0Y2h7aWYoVi5kYXRhLmluY2x1ZGVzKFguU0FTSlNfTE9HU19TRVBBUkFUT1IpKXtjb25zdHtkYXRhOkt9PVYsWj1LLnNwbGl0KFguU0FTSlNf''@;'; put 'put ''TE9HU19TRVBBUkFUT1IpO0Y9Wi5zcGxpY2UoMCwxKVswXSx2b2lkIDAhPT1GJiYoUD1GKTtjb25zdCBZPVouc3BsaWNlKDAsWi5sZW5ndGgtMSksVz1uZXcgUmVnRXhwKGAke1guU0FTSlNfTE9HU19TRVBBUkFUT1J9JGApLHE9WlswXTtxJiYoVy50ZXN0KEspP1kubGVuZ3RoPjEmJlkucHVz''@;'; put 'put ''aChxKTp6PXEpLFI9WS5qb2luKFguU0FTSlNfTE9HU19TRVBBUkFUT1IpfWVsc2UgUD1WLmRhdGF9Y29uc3QgTj17cmVzdWx0OlAsbG9nOlJ8fCIiLGV0YWc6dyxzdGF0dXM6Vi5zdGF0dXN9O3JldHVybiB6JiYoTi5wcmludE91dHB1dD16KSxOfX0sWC5TQVNKU19MT0dTX1NFUEFSQVRPUj0i''@;'; put 'put ''U0FTSlNfTE9HU19TRVBBUkFUT1JfMTYzZWUxN2I2ZmYyNGYwMjg5Mjg5NzJkODBhMjY3ODQifSw0NzA6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNDY2NjooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw2MTc3OihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDU3NjY6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNDk3NTooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwyMTU6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2Vz''@;'; put 'put ''TW9kdWxlIix7dmFsdWU6ITB9KX0sNDc4MjooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw0MTY4OihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3Zh''@;'; put 'put ''bHVlOiEwfSl9LDg1MTY6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMzg0MDooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwz''@;'; put 'put ''MTUzOihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDE0Mjg6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNTg0MTooY2UsWCk9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7dmFyIEksXztPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5Mb2dpbk1lY2hhbmlzbT1YLlNBU2pzQ29uZmlnPXZvaWQgMCxYLlNBU2pzQ29uZmlnPWNsYXNzIGJ7Y29uc3RydWN0b3IoKXt0aGlzLnNlcnZlclVybD0iIix0''@;'; put 'put ''aGlzLnBhdGhTQVNKUz0iIix0aGlzLnBhdGhTQVM5PSIiLHRoaXMucGF0aFNBU1ZpeWE9IiIsdGhpcy5hcHBMb2M9IiIsdGhpcy5zZXJ2ZXJUeXBlPW51bGwsdGhpcy5kZWJ1Zz0hMCx0aGlzLnZlcmJvc2U9ITAsdGhpcy5jb250ZXh0TmFtZT0iIix0aGlzLnVzZUNvbXB1dGVBcGk9bnVsbCx0''@;'; put 'put ''aGlzLmxvZ2luTWVjaGFuaXNtPUkuRGVmYXVsdCx0aGlzLnJlcXVlc3RIaXN0b3J5TGltaXQ9MTB9fSwoXz1JPVguTG9naW5NZWNoYW5pc218fChYLkxvZ2luTWVjaGFuaXNtPXt9KSkuRGVmYXVsdD0iRGVmYXVsdCIsXy5SZWRpcmVjdGVkPSJSZWRpcmVjdGVkIn0sNjAzODooY2UsWCk9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIEk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguU2Vzc2lvblN0YXRlPXZvaWQgMCwoST1YLlNlc3Npb25TdGF0ZXx8KFguU2Vzc2lvblN0YXRlPXt9KSkuQ29tcGxldGVkPSJjb21wbGV0ZWQiLEkuUnVubmluZz0icnVu''@;'; put 'put ''bmluZyIsSS5QZW5kaW5nPSJwZW5kaW5nIixJLklkbGU9ImlkbGUiLEkuVW5hdmFpbGFibGU9InVuYXZhaWxhYmxlIixJLk5vU3RhdGU9IiIsSS5GYWlsZWQ9ImZhaWxlZCIsSS5FcnJvcj0iZXJyb3IifSwzMDc3OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLlRhYmxlcz12b2lkIDA7Y29uc3QgST1iKDEzOTUpO1guVGFibGVzPWNsYXNzIF97Y29uc3RydWN0b3IoVix3KXt0aGlzLl90YWJsZXM9e30sdGhpcy5hZGQoVix3KX1hZGQoVix3KXtpZighVnx8IXcpdGhyb3cgbmV3IEkuQXJndW1lbnRF''@;'; put 'put ''cnJvcigiTWlzc2luZyBhcmd1bWVudHMiKTtpZighKFYgaW5zdGFuY2VvZiBBcnJheSkpdGhyb3cgbmV3IEkuQXJndW1lbnRFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhcnJheSIpO2lmKCJzdHJpbmciIT10eXBlb2Ygdyl0aHJvdyBuZXcgSS5Bcmd1bWVudEVycm9yKCJTZWNvbmQg''@;'; put 'put ''YXJndW1lbnQgbXVzdCBiZSBzdHJpbmciKTtpZighaXNOYU4oTnVtYmVyKHdbdy5sZW5ndGgtMV0pKSl0aHJvdyBuZXcgSS5Bcmd1bWVudEVycm9yKCJNYWNybyBuYW1lIGNhbm5vdCBoYXZlIG51bWJlciBhdCB0aGUgZW5kIik7dGhpcy5fdGFibGVzW3ddPVZ9fX0sOTQ5MzooY2UsWCk9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw4NjUwOihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDU2NDQ6KGNlLFgpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkFyZ3VtZW50RXJyb3I9dm9pZCAwO2NsYXNzIGIgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihfKXtzdXBlcihfKSx0aGlzLm1lc3NhZ2U9Xyx0aGlzLm5hbWU9IkFyZ3VtZW50RXJyb3IiLE9iamVj''@;'; put 'put ''dC5zZXRQcm90b3R5cGVPZih0aGlzLGIucHJvdG90eXBlKX19WC5Bcmd1bWVudEVycm9yPWJ9LDEyNDooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguQXV0aG9yaXplRXJyb3I9dm9pZCAwO2NsYXNzIGIgZXh0''@;'; put 'put ''ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihfLHApe3N1cGVyKF8pLHRoaXMubWVzc2FnZT1fLHRoaXMuY29uZmlybVVybD1wLHRoaXMubmFtZT0iQXV0aG9yaXplRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLGIucHJvdG90eXBlKX19WC5BdXRob3JpemVFcnJvcj1ifSw5NDY1Oihj''@;'; put 'put ''ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5DZXJ0aWZpY2F0ZUVycm9yPXZvaWQgMDtjbGFzcyBJIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IocCl7c3VwZXIoYCR7cH1cblBsZWFzZSB2aXNpdCB0aGUgbGlu''@;'; put 'put ''ayBiZWxvdyBmb3IgZnVydGhlciBpbmZvcm1hdGlvbiBvbiB0aGlzIGlzc3VlOlxuLSBodHRwczovL2dpdGh1Yi5jb20vc2FzanMvY2xpL2lzc3Vlcy8xMTgxI2lzc3VlY29tbWVudC0xMDkwNjM4NTg0XG5gKSx0aGlzLm5hbWU9IkNlcnRpZmljYXRlRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5''@;'; put 'put ''cGVPZih0aGlzLEkucHJvdG90eXBlKX19WC5DZXJ0aWZpY2F0ZUVycm9yPUl9LDUyNjc6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkNvbXB1dGVKb2JFeGVjdXRpb25FcnJvcj12b2lkIDA7Y2xhc3MgYiBl''@;'; put 'put ''eHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKF8scCl7c3VwZXIoIkVycm9yOiBKb2IgZXhlY3V0aW9uIGZhaWxlZCIpLHRoaXMuam9iPV8sdGhpcy5sb2c9cCx0aGlzLm5hbWU9IkNvbXB1dGVKb2JFeGVjdXRpb25FcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsYi5wcm90b3R5cGUp''@;'; put 'put ''fX1YLkNvbXB1dGVKb2JFeGVjdXRpb25FcnJvcj1ifSw5MjMyOihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5FcnJvclJlc3BvbnNlPXZvaWQgMCxYLkVycm9yUmVzcG9uc2U9Y2xhc3MgYntjb25zdHJ1Y3Rv''@;'; put 'put ''cihfLHAsVil7bGV0IHc9cDtpZigib2JqZWN0IiE9dHlwZW9mIHApdHJ5e3c9SlNPTi5wYXJzZShwKX1jYXRjaHtWPXAsdz0iIn10aGlzLmVycm9yPXttZXNzYWdlOl8sZGV0YWlsczp3LHJhdzpWfX19fSw1MTA5OihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''WCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5JbnRlcm5hbFNlcnZlckVycm9yPXZvaWQgMDtjbGFzcyBiIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiRXJyb3I6IEludGVybmFsIHNlcnZlciBlcnJvci4iKSx0aGlzLm5hbWU9IkludGVybmFsU2VydmVyRXJyb3IiLE9i''@;'; put 'put ''amVjdC5zZXRQcm90b3R5cGVPZih0aGlzLGIucHJvdG90eXBlKX19WC5JbnRlcm5hbFNlcnZlckVycm9yPWJ9LDU1MTg6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkludmFsaWRKc29uRXJyb3I9dm9pZCAw''@;'; put 'put ''O2NsYXNzIGIgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJFcnJvcjogaW52YWxpZCBKc29uIHN0cmluZyIpLHRoaXMubmFtZT0iSW52YWxpZEpzb25FcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsYi5wcm90b3R5cGUpfX1YLkludmFsaWRKc29uRXJyb3I9Yn0s''@;'; put 'put ''MTAwNTooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguSW52YWxpZFNBU2pzQ3NyZkVycm9yPXZvaWQgMDtjbGFzcyBiIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiQXV0aCBlcnJvcjogSW52''@;'; put 'put ''YWxpZCBDU1JGIHRva2VuISIpLHRoaXMubmFtZT0iSW52YWxpZFNBU2pzQ3NyZkVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxiLnByb3RvdHlwZSl9fVguSW52YWxpZFNBU2pzQ3NyZkVycm9yPWJ9LDg1MzE6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkpvYkV4ZWN1dGlvbkVycm9yPXZvaWQgMDtjbGFzcyBiIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoXyxwLFYpe3N1cGVyKGBFcnJvciBDb2RlICR7X306ICR7cH1gKSx0aGlzLmVycm9yQ29kZT1fLHRoaXMuZXJyb3JNZXNzYWdl''@;'; put 'put ''PXAsdGhpcy5yZXN1bHQ9Vix0aGlzLm5hbWU9IkpvYkV4ZWN1dGlvbkVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxiLnByb3RvdHlwZSl9fVguSm9iRXhlY3V0aW9uRXJyb3I9Yn0sOTA3OTooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9f''@;'; put 'put ''ZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguSm9iU3RhdGVQb2xsRXJyb3I9dm9pZCAwO2NsYXNzIGIgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihfLHApe3N1cGVyKGBFcnJvciB3aGlsZSBwb2xsaW5nIGpvYiBzdGF0ZSBmb3Igam9iICR7X306ICR7cC5tZXNzYWdlfHxwfWApLHRoaXMub3Jp''@;'; put 'put ''Z2luYWxFcnJvcj1wLHRoaXMubmFtZT0iSm9iU3RhdGVQb2xsRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLGIucHJvdG90eXBlKX19WC5Kb2JTdGF0ZVBvbGxFcnJvcj1ifSwzMDk2OihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01v''@;'; put 'put ''ZHVsZSIse3ZhbHVlOiEwfSksWC5Kc29uUGFyc2VBcnJheUVycm9yPXZvaWQgMDtjbGFzcyBiIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiQ2FuIG5vdCBwYXJzZSBhcnJheSBvYmplY3QgdG8ganNvbi4iKSx0aGlzLm5hbWU9Ikpzb25QYXJzZUFycmF5RXJyb3IiLE9iamVj''@;'; put 'put ''dC5zZXRQcm90b3R5cGVPZih0aGlzLGIucHJvdG90eXBlKX19WC5Kc29uUGFyc2VBcnJheUVycm9yPWJ9LDY3NDM6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkxvZ2luUmVxdWlyZWRFcnJvcj12b2lkIDA7''@;'; put 'put ''Y2xhc3MgYiBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKF8pe3N1cGVyKGBBdXRoIGVycm9yOiAke18/SlNPTi5zdHJpbmdpZnkoXyxudWxsLDIpOiJZb3UgbXVzdCBiZSBsb2dnZWQgaW4gdG8gYWNjZXNzIHRoaXMgcmVzb3VyY2UifWApLHRoaXMubmFtZT0iTG9naW5SZXF1aXJlZEVycm9y''@;'; put 'put ''IixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxiLnByb3RvdHlwZSl9fVguTG9naW5SZXF1aXJlZEVycm9yPWJ9LDc4NjQ6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLk5vU2Vzc2lvblN0YXRlRXJyb3I9''@;'; put 'put ''dm9pZCAwO2NsYXNzIGIgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihfLHAsVil7c3VwZXIoYENvdWxkIG5vdCBnZXQgc2Vzc2lvbiBzdGF0ZS4gU2VydmVyIHJlc3BvbmRlZCB3aXRoICR7X30gd2hpbHN0IGNoZWNraW5nIHN0YXRlOiAke3B9YCksdGhpcy5zZXJ2ZXJSZXNwb25zZVN0YXR1''@;'; put 'put ''cz1fLHRoaXMuc2Vzc2lvblN0YXRlVXJsPXAsdGhpcy5sb2dVcmw9Vix0aGlzLm5hbWU9Ik5vU2Vzc2lvblN0YXR1cyIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsYi5wcm90b3R5cGUpfX1YLk5vU2Vzc2lvblN0YXRlRXJyb3I9Yn0sOTU3NzooY2UsWCk9PnsidXNlIHN0cmljdCI7T2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguTm90Rm91bmRFcnJvcj12b2lkIDA7Y2xhc3MgYiBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKF8pe3N1cGVyKGBFcnJvcjogUmVzb3VyY2UgYXQgJHtffSB3YXMgbm90IGZvdW5kYCksdGhpcy51cmw9Xyx0''@;'; put 'put ''aGlzLm5hbWU9Ik5vdEZvdW5kRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLGIucHJvdG90eXBlKX19WC5Ob3RGb3VuZEVycm9yPWJ9LDkyNzk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgu''@;'; put 'put ''Um9vdEZvbGRlck5vdEZvdW5kRXJyb3I9dm9pZCAwO2NvbnN0IEk9Yig2Nzk5KTtjbGFzcyBfIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoVix3LFApe2xldCBGPWBSb290IGZvbGRlciAke1Z9IHdhcyBub3QgZm91bmQuXG5QbGVhc2UgY2hlY2sgJHt3fS9TQVNEcml2ZS5cbklmIHRoZSBm''@;'; put 'put ''b2xkZXIgRE9FUyBleGlzdCB0aGVuIGl0IGlzIGxpa2VseSBhIHBlcm1pc3Npb24gcHJvYmxlbS5cbmA7aWYoUCl7bGV0IHo9KDAsSS5kZWNvZGVUb2tlbikoUCkuc2NvcGU7ej16Lm1hcChOPT4iKiAiK04pLEYrPSJZb3VyIGFjY2VzcyB0b2tlbiBjb250YWlucyB0aGUgZm9sbG93aW5nIHNj''@;'; put 'put ''b3BlczpcbiIrei5qb2luKCJcbiIpfXN1cGVyKEYpLHRoaXMubmFtZT0iUm9vdEZvbGRlck5vdEZvdW5kRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLF8ucHJvdG90eXBlKX19WC5Sb290Rm9sZGVyTm90Rm91bmRFcnJvcj1ffSw5NTI2OihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5TQVM5QXV0aEVycm9yPXZvaWQgMDtjbGFzcyBiIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiVGhlIGNyZWRlbnRpYWxzIHlvdSBwcm92aWRlZCBjYW5ub3QgYmUgYXV0aGVudGljYXRl''@;'; put 'put ''ZC4gUGxlYXNlIHByb3ZpZGUgYSB2YWxpZCBzZXQgb2YgY3JlZGVudGlhbHMuIiksdGhpcy5uYW1lPSJBdXRob3JpemVFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsYi5wcm90b3R5cGUpfX1YLlNBUzlBdXRoRXJyb3I9Yn0sODg3NTooY2UsWCk9PnsidXNlIHN0cmljdCI7T2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguV2Vib3V0UmVzcG9uc2VFcnJvcj12b2lkIDA7Y2xhc3MgYiBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKF8pe3N1cGVyKGBFcnJvcjogZXJyb3Igd2hpbGUgcGFyc2luZyByZXNwb25zZSBmcm9tICR7X31g''@;'; put 'put ''KSx0aGlzLnVybD1fLHRoaXMubmFtZT0iV2Vib3V0UmVzcG9uc2VFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsYi5wcm90b3R5cGUpfX1YLldlYm91dFJlc3BvbnNlRXJyb3I9Yn0sMTM5NTpmdW5jdGlvbihjZSxYLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9f''@;'; put 'put ''Y3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24ocCxWLHcsUCl7dm9pZCAwPT09UCYmKFA9dyk7dmFyIEY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihWLHcpOyghRnx8KCJnZXQiaW4gRj8hVi5fX2VzTW9kdWxlOkYud3JpdGFibGV8fEYuY29uZmlndXJhYmxl''@;'; put 'put ''KSkmJihGPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBWW3ddfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLFAsRil9OmZ1bmN0aW9uKHAsVix3LFApe3ZvaWQgMD09PVAmJihQPXcpLHBbUF09Vlt3XX0pLF89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9u''@;'; put 'put ''KHAsVil7Zm9yKHZhciB3IGluIHApImRlZmF1bHQiIT09dyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWLHcpJiZJKFYscCx3KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8oYig1NjQ0KSxYKSxfKGIoMTI0KSxYKSxf''@;'; put 'put ''KGIoOTQ2NSksWCksXyhiKDUyNjcpLFgpLF8oYig5MjMyKSxYKSxfKGIoNTEwOSksWCksXyhiKDU1MTgpLFgpLF8oYig4NTMxKSxYKSxfKGIoOTA3OSksWCksXyhiKDMwOTYpLFgpLF8oYig2NzQzKSxYKSxfKGIoNzg2NCksWCksXyhiKDk1NzcpLFgpLF8oYig5Mjc5KSxYKSxfKGIoODg3NSks''@;'; put 'put ''WCl9LDEyMzA6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHAsVix3LFApe3ZvaWQgMD09PVAmJihQPXcpO3ZhciBGPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoVix3''@;'; put 'put ''KTsoIUZ8fCgiZ2V0ImluIEY/IVYuX19lc01vZHVsZTpGLndyaXRhYmxlfHxGLmNvbmZpZ3VyYWJsZSkpJiYoRj17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVlt3XX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocCxQLEYpfTpmdW5jdGlvbihwLFYsdyxQKXt2b2lkIDA9''@;'; put 'put ''PT1QJiYoUD13KSxwW1BdPVZbd119KSxfPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihwLFYpe2Zvcih2YXIgdyBpbiBwKSJkZWZhdWx0IiE9PXcmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVix3KSYmSShWLHAsdyl9O09iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxfKGIoNDcwKSxYKSxfKGIoNDY2NiksWCksXyhiKDQ5NzUpLFgpLF8oYig1NzY2KSxYKSxfKGIoMjE1KSxYKSxfKGIoNDc4MiksWCksXyhiKDQxNjgpLFgpLF8oYig4NTE2KSxYKSxfKGIoMzg0MCksWCksXyhiKDU4NDEpLFgpLF8oYigx''@;'; put 'put ''NDI4KSxYKSxfKGIoNjAzOCksWCksXyhiKDk0OTMpLFgpLF8oYigzMTUzKSxYKSxfKGIoODY1MCksWCksXyhiKDYxNzcpLFgpLF8oYigxMzk1KSxYKSxfKGIoMzA3NyksWCl9LDMzMDI6ZnVuY3Rpb24oY2UsWCl7InVzZSBzdHJpY3QiO3ZhciBiPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5j''@;'; put 'put ''dGlvbihfLHAsVix3KXtyZXR1cm4gbmV3KFZ8fChWPVByb21pc2UpKShmdW5jdGlvbihGLFIpe2Z1bmN0aW9uIHooSyl7dHJ5e08ody5uZXh0KEspKX1jYXRjaChaKXtSKFopfX1mdW5jdGlvbiBOKEspe3RyeXtPKHcudGhyb3coSykpfWNhdGNoKFope1IoWil9fWZ1bmN0aW9uIE8oSyl7Sy5k''@;'; put 'put ''b25lP0YoSy52YWx1ZSk6ZnVuY3Rpb24gUChGKXtyZXR1cm4gRiBpbnN0YW5jZW9mIFY/RjpuZXcgVihmdW5jdGlvbihSKXtSKEYpfSl9KEsudmFsdWUpLnRoZW4oeixOKX1PKCh3PXcuYXBwbHkoXyxwfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1''@;'; put 'put ''bGUiLHt2YWx1ZTohMH0pLFguYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0ZXM9dm9pZCAwLFguYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0ZXM9ZnVuY3Rpb24gSShfLHApe3JldHVybiBiKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgVj17fTtpZihwPy5sZW5ndGgp''@;'; put 'put ''e2NvbnN0IHc9cC5yZWR1Y2UoKFAsRik9PihQW0ZdPV9bRl0sUCkse30pO1Y9T2JqZWN0LmFzc2lnbih7cmVzdWx0Ol8ucmVzdWx0fSx3KX1lbHNlIFY9Xy5yZXN1bHQ7cmV0dXJuIFZ9KX19LDc5MjI6ZnVuY3Rpb24oY2UsWCl7InVzZSBzdHJpY3QiO3ZhciBiPXRoaXMmJnRoaXMuX19hd2Fp''@;'; put 'put ''dGVyfHxmdW5jdGlvbihfLHAsVix3KXtyZXR1cm4gbmV3KFZ8fChWPVByb21pc2UpKShmdW5jdGlvbihGLFIpe2Z1bmN0aW9uIHooSyl7dHJ5e08ody5uZXh0KEspKX1jYXRjaChaKXtSKFopfX1mdW5jdGlvbiBOKEspe3RyeXtPKHcudGhyb3coSykpfWNhdGNoKFope1IoWil9fWZ1bmN0aW9u''@;'; put 'put ''IE8oSyl7Sy5kb25lP0YoSy52YWx1ZSk6ZnVuY3Rpb24gUChGKXtyZXR1cm4gRiBpbnN0YW5jZW9mIFY/RjpuZXcgVihmdW5jdGlvbihSKXtSKEYpfSl9KEsudmFsdWUpLnRoZW4oeixOKX1PKCh3PXcuYXBwbHkoXyxwfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgs''@;'; put 'put ''Il9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguYXN5bmNGb3JFYWNoPXZvaWQgMCxYLmFzeW5jRm9yRWFjaD1mdW5jdGlvbiBJKF8scCl7cmV0dXJuIGIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2ZvcihsZXQgVj0wO1Y8Xy5sZW5ndGg7VisrKXlpZWxkIHAoX1tWXSxWLF8pfSl9''@;'; put 'put ''fSwzNzkzOihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5jb21wYXJlVGltZXN0YW1wcz12b2lkIDAsWC5jb21wYXJlVGltZXN0YW1wcz0oSSxfKT0+Xy50aW1lc3RhbXAuZ2V0VGltZSgpLUkudGltZXN0YW1w''@;'; put 'put ''LmdldFRpbWUoKX0sMjQwMjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDUxMDgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmlzRm9ybWF0c1RhYmxlPVguY29udmVydFRvQ1NWPXZvaWQgMDtjb25zdCBfPWIoNjQ2NykscD1iKDk3''@;'; put 'put ''NzgpO1guY29udmVydFRvQ1NWPShGLFIpPT57dmFyIHo7aWYoIUZbUl0pe2NvbnN0IGVlPSgwLHAucHJlZml4TWVzc2FnZSkoIk5vIHRhYmxlIHByb3ZpZGVkIHRvIGJlIGNvbnZlcnRlZCB0byBDU1YuIiwiRXJyb3Igd2hpbGUgY29udmVydGluZyB0byBDU1YuICIpO3Rocm93InN0cmluZyI9''@;'; put 'put ''PXR5cGVvZiBlZT9uZXcgRXJyb3IoZWUpOmVlfWNvbnN0IE49RltSXTtpZighQXJyYXkuaXNBcnJheShOKSlyZXR1cm4iIjtsZXQgWixPPW51bGw9PT0oej1GW2AkJHtSfWBdKXx8dm9pZCAwPT09ej92b2lkIDA6ei5mb3JtYXRzLEs9W10sWT0hMTtPJiYoSz1PYmplY3Qua2V5cyhPKS5tYXAo''@;'; put 'put ''ZWU9PmAke2VlfToke09bZWVdfWApKTtjb25zdCBXPU9iamVjdC5rZXlzKE5bMF0pO3JldHVybiBXLmZvckVhY2goZWU9PntpZighT3x8IU9iamVjdC5rZXlzKE8pLmluY2x1ZGVzKGVlKSl7bGV0IEo9ITEscmU9ITE7aWYoTi5mb3JFYWNoKGllPT57bnVsbD09PWllW2VlXXx8Im51bWJlciI9''@;'; put 'put ''PXR5cGVvZiBpZVtlZV0/Sj0hMDoic3RyaW5nIj09dHlwZW9mIGllW2VlXSYmKDAsXy5pc1NwZWNpYWxNaXNzaW5nKShpZVtlZV0pJiYocmU9ITApfSksSiYmcmUpSy5wdXNoKGAke2VlfTpiZXN0LmApLE98fChPPXt9KSxPW2VlXT0iYmVzdC4iO2Vsc2V7bGV0IGllPW51bGwsdWU9ITEsZ2U9''@;'; put 'put ''LTE7Y29uc3QgX2U9Ti5tYXAoKFRlLE1lKT0+e2lmKFRlW2VlXXx8IiI9PT1UZVtlZV0pe2xldCBaZTtyZXR1cm4gaWU/dWV8fCh1ZT0oIiI9PT1UZVtlZV18fCJzdHJpbmciPT10eXBlb2YgVGVbZWVdPyJjaGFycyI6Im51bWJlciIpIT09aWUsZ2U9dWU/TWUrMTotMSk6aWU9IiI9PT1UZVtl''@;'; put 'put ''ZV18fCJzdHJpbmciPT10eXBlb2YgVGVbZWVdPyJjaGFycyI6Im51bWJlciIsInN0cmluZyI9PXR5cGVvZiBUZVtlZV0mJihaZT1QKFRlW2VlXSkpLFplfX0pLnNvcnQoKFRlLE1lKT0+TWUtVGUpWzBdO19lJiZfZT4zMjc2NSYmKFk9ITApLHVlJiZJLmVycm9yKGBSb3cgKCR7Z2V9KSwgQ29s''@;'; put 'put ''dW1uICgke2VlfSkgaGFzIG1peGVkIHR5cGVzOiBFUlJPUmApLEsucHVzaChgJHtlZX06JHsiY2hhcnMiPT09aWU/IiRjaGFyIjoiIn0ke19lfHwoImNoYXJzIj09PWllPyIxIjoiYmVzdCIpfS5gKX19fSksTyYmKEs9Sy5zb3J0KChlZSxKKT0+Vy5pbmRleE9mKGVlLnJlcGxhY2UoLzouKi8s''@;'; put 'put ''IiIpKS1XLmluZGV4T2YoSi5yZXBsYWNlKC86LiovLCIiKSkpKSxZPyJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdUSCI6KFo9Ti5tYXAoZWU9Pk9iamVjdC5rZXlzKGVlKS5tYXAoKHJlLGllKT0+e2xldCB1ZTtjb25zdCBnZT1lZVtyZV07aWYoIm51bWJlciI9PXR5cGVvZiBnZSlyZXR1cm4g''@;'; put 'put ''Z2U7aWYodWU9bnVsbD09PWdlPyIiOmdlLE8mJiJiZXN0LiI9PT1PW3JlXSl7aWYodWUmJiEoMCxfLmlzU3BlY2lhbE1pc3NpbmcpKHVlKSl0aHJvdyBuZXcgRXJyb3IoIkEgU3BlY2lhbCBtaXNzaW5nIHZhbHVlIGNhbiBvbmx5IGJlIGEgc2luZ2xlIGNoYXJhY3RlciBmcm9tICdBJyB0byAn''@;'; put 'put ''WicsICdfJywgJy5bYS16XScsICcuXyciKTtyZXR1cm5gJHt1ZS5pbmNsdWRlcygiLiIpPyIiOiIuIn0ke3VlLnRvTG93ZXJDYXNlKCl9YH1yZXR1cm4gdWU9dWUucmVwbGFjZSgvIi9nLCciIicpLHVlPWAiJHt1ZX0iYCx1ZS5zdWJzdHJpbmcoMSx1ZS5sZW5ndGgtMSkuc2VhcmNoKC8oXHR8''@;'; put 'put ''XG58XHJ8LHxcJ3xcIikvZ20pPDAmJih1ZT11ZS5zdWJzdHJpbmcoMSx1ZS5sZW5ndGgtMSkpLHVlPXVlLnJlcGxhY2UoL1xyXG4vZ20sIlxuIiksIiI9PT11ZSYmS1tpZV0uaW5jbHVkZXMoImJlc3QiKSYmKHVlPSIuIiksdWV9KS5qb2luKCIsIikpLEsuam9pbigiLCIpLnJlcGxhY2UoLywv''@;'; put 'put ''ZywiICIpKyJcclxuIitaLmpvaW4oIlxyXG4iKSl9LFguaXNGb3JtYXRzVGFibGU9Rj0+L15cJC4qLy50ZXN0KEYpO2NvbnN0IFA9Rj0+e2xldCBSPUYubGVuZ3RoO2ZvcihsZXQgej1GLmxlbmd0aC0xO3o+PTA7ei0tKXtjb25zdCBOPUYuY2hhckNvZGVBdCh6KTtOPjEyNyYmTjw9MjA0Nz9S''@;'; put 'put ''Kys6Tj4yMDQ3JiZOPD02NTUzNSYmKFIrPTIpLE4+PTU2MzIwJiZOPD01NzM0MyYmei0tfXJldHVybiBSfX0sNjExNjpmdW5jdGlvbihjZSxYLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oVil7cmV0dXJuIFYmJlYuX19lc01vZHVs''@;'; put 'put ''ZT9WOntkZWZhdWx0OlZ9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5jcmVhdGVBeGlvc0luc3RhbmNlPXZvaWQgMDtjb25zdCBfPUkoYig3MjE4KSk7WC5jcmVhdGVBeGlvc0luc3RhbmNlPShWLHcpPT5fLmRlZmF1bHQuY3JlYXRlKHtiYXNl''@;'; put 'put ''VVJMOlYsaHR0cHNBZ2VudDp3fSl9LDk4MjU6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmRlbGF5PXZvaWQgMCxYLmRlbGF5PUk9Pm5ldyBQcm9taXNlKF89PnNldFRpbWVvdXQoXyxJKSl9LDk5MDpmdW5j''@;'; put 'put ''dGlvbihjZSxYLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQxNTUpLF89Yig1MTA4KSxwPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihGLFIseixOKXtyZXR1cm4gbmV3KHp8fCh6PVByb21pc2UpKShmdW5jdGlvbihLLFope2Z1bmN0aW9uIFkoZWUpe3RyeXtxKE4ubmV4dChlZSkp''@;'; put 'put ''fWNhdGNoKEope1ooSil9fWZ1bmN0aW9uIFcoZWUpe3RyeXtxKE4udGhyb3coZWUpKX1jYXRjaChKKXtaKEopfX1mdW5jdGlvbiBxKGVlKXtlZS5kb25lP0soZWUudmFsdWUpOmZ1bmN0aW9uIE8oSyl7cmV0dXJuIEsgaW5zdGFuY2VvZiB6P0s6bmV3IHooZnVuY3Rpb24oWil7WihLKX0pfShl''@;'; put 'put ''ZS52YWx1ZSkudGhlbihZLFcpfXEoKE49Ti5hcHBseShGLFJ8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5mZXRjaExvZz1YLmZldGNoTG9nQnlDaHVua3M9dm9pZCAwO2NvbnN0IFY9Yig5Nzc4KTtYLmZldGNoTG9n''@;'; put 'put ''QnlDaHVua3M9KEYsUix6LE4pPT5wKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCgwLFguZmV0Y2hMb2cpKEYsUix6LDAsTil9KSxYLmZldGNoTG9nPShGLFIseixOLE8pPT5wKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEs9SS5s''@;'; put 'put ''b2dnZXJ8fF87bGV0IFo9IiI7Y29uc3QgWT1PPDFlND9POjFlNDtkb3tLLmluZm8oYEZldGNoaW5nIGxvZ3MgZnJvbSBsaW5lIG5vOiAke04rMX0gdG8gJHtOK1l9IG9mICR7T30uYCk7Y29uc3QgVz15aWVsZCBGLmdldChgJHt6fT9zdGFydD0ke059JmxpbWl0PSR7WX1gLFIpLnRoZW4oZWU9''@;'; put 'put ''PmVlLnJlc3VsdCkuY2F0Y2goZWU9Pnt0aHJvdygwLFYucHJlZml4TWVzc2FnZSkoZWUsIkVycm9yIHdoaWxlIGdldHRpbmcgbG9nLiAiKX0pO2lmKDA9PT1XLml0ZW1zLmxlbmd0aClicmVhaztaKz1XLml0ZW1zLm1hcChlZT0+ZWUubGluZSkuam9pbigiXG4iKSxOKz1ZfXdoaWxlKE48Tyk7''@;'; put 'put ''cmV0dXJuIFp9KX0sNzE0OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmZvcm1hdERhdGFGb3JSZXF1ZXN0PXZvaWQgMDtjb25zdCBJPWIoMjQwMiksXz1iKDQ3OTkpO1guZm9ybWF0RGF0YUZvclJlcXVl''@;'; put 'put ''c3Q9Vj0+e2NvbnN0IHc9W107bGV0IFA9MDtjb25zdCBGPXt9O2Zvcihjb25zdCBSIGluIFYpe2lmKCgwLEkuaXNGb3JtYXRzVGFibGUpKFIpJiZPYmplY3Qua2V5cyhWKS5pbmNsdWRlcyhSLnJlcGxhY2UoL15cJC8sIiIpKSljb250aW51ZTtQKyssKDAsSS5pc0Zvcm1hdHNUYWJsZSkoUil8''@;'; put 'put ''fHcucHVzaChSKTtjb25zdCB6PSgwLEkuY29udmVydFRvQ1NWKShWLFIpO2lmKCJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdUSCI9PT16KXRocm93IG5ldyBFcnJvcigiVGhlIG1heCBsZW5ndGggb2YgYSBzdHJpbmcgdmFsdWUgaW4gU0FTanMgaXMgMzI3NjUgY2hhcmFjdGVycy4iKTtpZih6''@;'; put 'put ''Lmxlbmd0aD4xNmUzKXtjb25zdCBOPSgwLF8uc3BsaXRDaHVua3MpKHopO0ZbYHNhc2pzJHtQfWRhdGEwYF09Ti5sZW5ndGgsTi5mb3JFYWNoKChPLEspPT57Rltgc2FzanMke1B9ZGF0YSR7SysxfWBdPU99KX1lbHNlIEZbYHNhc2pzJHtQfWRhdGFgXT16fXJldHVybiBGLnNhc2pzX3RhYmxl''@;'; put 'put ''cz13LmpvaW4oIiAiKSxGfX0sODQ1ODpmdW5jdGlvbihjZSxYLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24odyl7cmV0dXJuIHcmJncuX19lc01vZHVsZT93OntkZWZhdWx0Ond9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19l''@;'; put 'put ''c01vZHVsZSIse3ZhbHVlOiEwfSksWC5nZXRGb3JtRGF0YT12b2lkIDA7Y29uc3QgXz1iKDU5MjgpLHA9SShiKDYyMzApKTtYLmdldEZvcm1EYXRhPSgpPT4oMCxfLmlzTm9kZSkoKT9uZXcgcC5kZWZhdWx0Om5ldyBGb3JtRGF0YX0sMzI2MDooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2V0VXNlckxhbmd1YWdlPXZvaWQgMCxYLmdldFVzZXJMYW5ndWFnZT0oKT0+d2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZXx8d2luZG93Lm5hdmlnYXRvci51c2VyTGFuZ3VhZ2V9LDE4ODQ6KGNlLFgsYik9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2V0VmFsaWRKc29uPXZvaWQgMDtjb25zdCBJPWIoMTM5NSk7WC5nZXRWYWxpZEpzb249cD0+e3RyeXtpZihudWxsPT1wKXRocm93IG5ldyBJLkludmFsaWRKc29uRXJyb3I7aWYo''@;'; put 'put ''QXJyYXkuaXNBcnJheShwKSl0aHJvdyBuZXcgSS5Kc29uUGFyc2VBcnJheUVycm9yO3JldHVybiJvYmplY3QiPT10eXBlb2YgcD9wOiIiPT09cD97fTpKU09OLnBhcnNlKHApfWNhdGNoKFYpe3Rocm93IFYgaW5zdGFuY2VvZiBJLkpzb25QYXJzZUFycmF5RXJyb3I/VjpuZXcgSS5JbnZhbGlk''@;'; put 'put ''SnNvbkVycm9yfX19LDU5Mjg6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHAsVix3LFApe3ZvaWQgMD09PVAmJihQPXcpO3ZhciBGPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny''@;'; put 'put ''aXB0b3IoVix3KTsoIUZ8fCgiZ2V0ImluIEY/IVYuX19lc01vZHVsZTpGLndyaXRhYmxlfHxGLmNvbmZpZ3VyYWJsZSkpJiYoRj17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVlt3XX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocCxQLEYpfTpmdW5jdGlvbihwLFYsdyxQ''@;'; put 'put ''KXt2b2lkIDA9PT1QJiYoUD13KSxwW1BdPVZbd119KSxfPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihwLFYpe2Zvcih2YXIgdyBpbiBwKSJkZWZhdWx0IiE9PXcmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVix3KSYmSShWLHAsdyl9O09iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxfKGIoMzMwMiksWCksXyhiKDc5MjIpLFgpLF8oYigzNzkzKSxYKSxfKGIoMjQwMiksWCksXyhiKDYxMTYpLFgpLF8oYig5ODI1KSxYKSxfKGIoOTkwKSxYKSxfKGIoMTg4NCksWCksXyhiKDQyNDMpLFgpLF8oYigyNTcp''@;'; put 'put ''LFgpLF8oYigyKSxYKSxfKGIoMjYxNSksWCksXyhiKDI5MjApLFgpLF8oYigyNDIyKSxYKSxfKGIoMzEpLFgpLF8oYig2NTE1KSxYKSxfKGIoNjQxNiksWCksXyhiKDI4MTMpLFgpLF8oYig5ODk2KSxYKSxfKGIoNDc5OSksWCksXyhiKDQ1MTYpLFgpLF8oYig4NDU4KSxYKSxfKGIoMzI2MCks''@;'; put 'put ''WCl9LDQyNDM6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0MTU1KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5pc05vZGU9dm9pZCAwLFguaXNOb2RlPSgpPT50eXBlb2YgSTwidSImJm51bGwhPUkudmVyc2lvbnMmJm51bGwhPUku''@;'; put 'put ''dmVyc2lvbnMubm9kZX0sMjU3OihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5pc1JlbGF0aXZlUGF0aD12b2lkIDAsWC5pc1JlbGF0aXZlUGF0aD1JPT4hIUkmJiFJLnN0YXJ0c1dpdGgoIi8iKX0sMjooY2Us''@;'; put 'put ''WCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguaXNVcmk9dm9pZCAwLFguaXNVcmk9ST0+L15cL2ZvbGRlcnNcL2ZvbGRlcnNcLy8udGVzdChJKX0sMjYxNTooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguaXNVcmw9dm9pZCAwLFguaXNVcmw9ST0+e2NvbnN0IF89WyJodHRwOiIsImh0dHBzOiJdO3RyeXtjb25zdCBwPW5ldyBVUkwoSSk7aWYoIV8uaW5jbHVkZXMocC5wcm90b2NvbCkpcmV0dXJuITF9Y2F0Y2h7cmV0dXJuITF9''@;'; put 'put ''cmV0dXJuITB9fSwxMjEwOmZ1bmN0aW9uKGNlLFgpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oRixSLHosTil7cmV0dXJuIG5ldyh6fHwoej1Qcm9taXNlKSkoZnVuY3Rpb24oSyxaKXtmdW5jdGlvbiBZKGVlKXt0cnl7cShOLm5leHQoZWUpKX1j''@;'; put 'put ''YXRjaChKKXtaKEopfX1mdW5jdGlvbiBXKGVlKXt0cnl7cShOLnRocm93KGVlKSl9Y2F0Y2goSil7WihKKX19ZnVuY3Rpb24gcShlZSl7ZWUuZG9uZT9LKGVlLnZhbHVlKTpmdW5jdGlvbiBPKEspe3JldHVybiBLIGluc3RhbmNlb2Ygej9LOm5ldyB6KGZ1bmN0aW9uKFope1ooSyl9KX0oZWUu''@;'; put 'put ''dmFsdWUpLnRoZW4oWSxXKX1xKChOPU4uYXBwbHkoRixSfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgub3BlbkxvZ2luUHJvbXB0PXZvaWQgMDt2YXIgST1mdW5jdGlvbihGKXtyZXR1cm4gRi5zdHlsZXM9InNhc2pz''@;'; put 'put ''QWRhcHRlclN0eWxlcyIsRi5vdmVybGF5PSJzYXNqc0FkYXB0ZXJMb2dpblByb21wdEJHIixGLmRpYWxvZz0ic2FzanNBZGFwdGVyTG9naW5Qcm9tcHQiLEZ9KEl8fHt9KTtjb25zdCBfPSJzYXNqcy1hZGFwdGVyIixwPXtwb3BVcDpgJHtffXBvcFVwYCxwb3BVcEJHOmAke199cG9wVXBCR2B9''@;'; put 'put ''O1gub3BlbkxvZ2luUHJvbXB0PSgpPT5uZXcgUHJvbWlzZShGPT5iKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtSLmlkPUkuc3R5bGVzLFIuaW5uZXJUZXh0PVA7Y29uc3Qgej1kb2N1bWVudC5jcmVhdGVF''@;'; put 'put ''bGVtZW50KCJkaXYiKTt6LmlkPUkub3ZlcmxheSx6LmNsYXNzTGlzdC5hZGQocC5wb3BVcEJHKTtjb25zdCBOPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO04uaWQ9SS5kaWFsb2csTi5jbGFzc0xpc3QuYWRkKHAucG9wVXApO2NvbnN0IE89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi''@;'; put 'put ''aDEiKTtPLmlubmVyVGV4dD0iU2Vzc2lvbiBFeHBpcmVkISIsTi5hcHBlbmRDaGlsZChPKTtjb25zdCBLPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLFo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO1ouaW5uZXJUZXh0PSJZb3UgbmVlZCB0byByZWxvZ2luLCBjbGljayBP''@;'; put 'put ''SyB0byBsb2dpbi4iLEsuYXBwZW5kQ2hpbGQoWiksTi5hcHBlbmRDaGlsZChLKTtjb25zdCBZPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpO1kuY2xhc3NMaXN0LmFkZCgiY2FuY2VsIiksWS5pbm5lclRleHQ9IkNhbmNlbCIsWS5vbmNsaWNrPSgpPT57dygpLEYoITEpfSxOLmFw''@;'; put 'put ''cGVuZENoaWxkKFkpO2NvbnN0IFc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7Vy5jbGFzc0xpc3QuYWRkKCJjb25maXJtIiksVy5pbm5lclRleHQ9Ik9rIixXLm9uY2xpY2s9KCk9Pnt3KCksRighMCl9LE4uYXBwZW5kQ2hpbGQoVyksZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVy''@;'; put 'put ''Zmxvdz0iaGlkZGVuIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoeiksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChOKX0pKTtjb25zdCB3PSgpPT57T2JqZWN0LnZhbHVlcyhJKS5mb3JFYWNoKEY9Pnt2YXIgUjtjb25zdCB6PWRvY3Vt''@;'; put 'put ''ZW50LmdldEVsZW1lbnRCeUlkKEYpO251bGw9PT0oUj16Py5wYXJlbnROb2RlKXx8dm9pZCAwPT09Unx8Ui5yZW1vdmVDaGlsZCh6KX0pLGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9ImF1dG8ifSxQPWBcbi4ke3AucG9wVXBCR30gLFxuLiR7cC5wb3BVcH0ge1xuICB6LWluZGV4OiAx''@;'; put 'put ''MDAwMDtcbn1cbi4ke3AucG9wVXB9IHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDog''@;'; put 'put ''NDAlO1xuICBsZWZ0OiA1MCU7XG4gIHBhZGRpbmc6IDA7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgZm9udC1mYW1pbHk6ICdQVCBTYW5zJywgc2Fucy1zZXJpZjtcbiAgY29sb3I6ICNmZmY7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbiAgei1pbmRleDogOTk5O1xuICBvdmVyZmxvdzogaGlk''@;'; put 'put ''ZGVuO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7XG4gIG1hcmdpbjogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogMzAwcHg7XG4gIGhlaWdodDogYXV0bztcbiAgbWF4LWhlaWdodDogMzAwcHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUp''@;'; put 'put ''O1xufVxuLiR7cC5wb3BVcH0gPiBoMSB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBwYWRkaW5nOiA1cHg7XG4gIG1pbi1oZWlnaHQ6IDQwcHg7XG4gIGZvbnQt''@;'; put 'put ''c2l6ZTogMS4yZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xuICBib3JkZXItd2lkdGg6IDVweDtcbiAgYm9yZGVyLWNv''@;'; put 'put ''bG9yOiBibGFjaztcbn1cbi4ke3AucG9wVXB9ID4gZGl2IHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogY2FsYygxMDAlIC0xMDhweCk7XG4gIG1hcmdpbjogMDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzog''@;'; put 'put ''Ym9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBwYWRkaW5nOiA1JTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgYm9yZGVyLWNvbG9yOiAjY2NjO1xuICBib3JkZXItc3R5bGU6IG5vbmUgbm9uZSBzb2xpZCBub25l''@;'; put 'put ''O1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi4ke3AucG9wVXB9ID4gZGl2ID4gc3BhbiB7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXIt''@;'; put 'put ''Ym94O1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIHdpZHRoOiAzMDBweDtcbiAgaGVpZ2h0OiAxMDhweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xufVxuLiR7cC5wb3BVcH0gLmNhbmNlbCB7XG4gIGZsb2F0OiBsZWZ0O1xufVxu''@;'; put 'put ''LiR7cC5wb3BVcH0gLmNvbmZpcm0ge1xuICBmbG9hdDogcmlnaHQ7XG59XG4uJHtwLnBvcFVwfSA+IGJ1dHRvbiB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBt''@;'; put 'put ''YXJnaW46IDA7XG4gIHBhZGRpbmc6IDEwcHg7XG4gIHdpZHRoOiA1MCU7XG4gIGJvcmRlcjogMXB4IG5vbmUgI2NjYztcbiAgY29sb3I6ICNmZmY7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGhlaWdodDogNTBweDtcbiAgYmFja2dyb3VuZDogcmdi''@;'; put 'put ''YSgxLCAxLCAxLCAwLjIpO1xufVxuLiR7cC5wb3BVcH0gPiBidXR0b246aG92ZXIge1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7XG59XG4uJHtwLnBvcFVwQkd9IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAw''@;'; put 'put ''O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIG9wYWNpdHk6IDAuOTU7XG4gIHotaW5kZXg6IDUwO1xuICBiYWNrZ3JvdW5kLWltYWdlOiByYWRpYWwtZ3JhZGllbnQoIzAzNzhjZCwgIzAxMjAzNik7XG59XG5gfSwyOTIw''@;'; put 'put ''OihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5uZWVkc1JldHJ5PXZvaWQgMCxYLm5lZWRzUmV0cnk9ST0+ISFJJiYoSS5pbmNsdWRlcygnImVycm9yQ29kZSI6NDAzJykmJkkuaW5jbHVkZXMoIl9jc3JmIikm''@;'; put 'put ''JkkuaW5jbHVkZXMoIlgtQ1NSRi1UT0tFTiIpfHxJLmluY2x1ZGVzKCcic3RhdHVzIjo0MDMnKSYmSS5pbmNsdWRlcygnImVycm9yIjoiRm9yYmlkZGVuIicpfHxJLmluY2x1ZGVzKCcic3RhdHVzIjo0NDknKSYmSS5pbmNsdWRlcygiQXV0aGVudGljYXRpb24gc3VjY2VzcywgcmV0cnkgb3Jp''@;'; put 'put ''Z2luYWwgcmVxdWVzdCIpKX0sMjQyMjooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgucGFyc2VHZW5lcmF0ZWRDb2RlPXZvaWQgMCxYLnBhcnNlR2VuZXJhdGVkQ29kZT1JPT5JLnNwbGl0KCJcbiIpLmZpbHRl''@;'; put 'put ''cih3PT53LnRyaW0oKS5zdGFydHNXaXRoKCJNUFJJTlQiKSkuam9pbigiXHJcbiIpfSwzMTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDUxMDgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnBhcnNlU2FzVml5YUxvZz12b2lkIDAs''@;'; put 'put ''WC5wYXJzZVNhc1ZpeWFMb2c9cD0+e2xldCBWO3RyeXtWPXAuaXRlbXM/cC5pdGVtcy5tYXAodz0+dy5saW5lKS5qb2luKCJcbiIpOkpTT04uc3RyaW5naWZ5KHApfWNhdGNoKHcpe0kuZXJyb3IoIkFuIGVycm9yIGhhcyBvY2N1cnJlZCB3aGlsZSBwYXJzaW5nIHRoZSBsb2cgcmVzcG9uc2Ui''@;'; put 'put ''LHcpLFY9cH1yZXR1cm4gVn19LDY1MTU6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnBhcnNlU291cmNlQ29kZT12b2lkIDAsWC5wYXJzZVNvdXJjZUNvZGU9ST0+SS5zcGxpdCgiXG4iKS5maWx0ZXIoVj0+''@;'; put 'put ''Vi50cmltKCkuc3Vic3RyaW5nKDAsMTApLnRyaW1TdGFydCgpLm1hdGNoKC9eXGQvKSkuam9pbigiXHJcbiIpfSw2NDE2OmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihWLHcsUCxGKXtyZXR1cm4gbmV3KFB8fChQPVBy''@;'; put 'put ''b21pc2UpKShmdW5jdGlvbih6LE4pe2Z1bmN0aW9uIE8oWSl7dHJ5e1ooRi5uZXh0KFkpKX1jYXRjaChXKXtOKFcpfX1mdW5jdGlvbiBLKFkpe3RyeXtaKEYudGhyb3coWSkpfWNhdGNoKFcpe04oVyl9fWZ1bmN0aW9uIFooWSl7WS5kb25lP3ooWS52YWx1ZSk6ZnVuY3Rpb24gUih6KXtyZXR1''@;'; put 'put ''cm4geiBpbnN0YW5jZW9mIFA/ejpuZXcgUChmdW5jdGlvbihOKXtOKHopfSl9KFkudmFsdWUpLnRoZW4oTyxLKX1aKChGPUYuYXBwbHkoVix3fHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgucGFyc2VTYXNWaXlhRGVi''@;'; put 'put ''dWdSZXNwb25zZT12b2lkIDA7Y29uc3QgXz1iKDU5MjgpO1gucGFyc2VTYXNWaXlhRGVidWdSZXNwb25zZT0oVix3LFApPT5JKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEY9Vi5zcGxpdCgvPGlmcmFtZSBzdHlsZT0id2lkdGg6IDk5JTsgaGVpZ2h0OiA1MDBweCIg''@;'; put 'put ''c3JjPSJ8PGlmcmFtZSBzdHlsZT0id2lkdGg6IDk5JTsgaGVpZ2h0OiA1MDBweDsgYmFja2dyb3VuZC1jb2xvcjpDYW52YXM7IiBzcmM9LylbMV0sUj1GP0Yuc3BsaXQoLyI+PFwvaWZyYW1lPnw+PFwvaWZyYW1lPi8pWzBdOm51bGw7aWYoIVIpdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8g''@;'; put 'put ''ZmluZCB3ZWJvdXQgZmlsZSBVUkwuIik7cmV0dXJuIHcuZ2V0KFArUix2b2lkIDAsInRleHQvcGxhaW4iKS50aGVuKHo9PigwLF8uZ2V0VmFsaWRKc29uKSh6LnJlc3VsdCkpfSl9LDI4MTM6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig1MTA4KTtPYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5wYXJzZVdlYm91dFJlc3BvbnNlPXZvaWQgMDtjb25zdCBfPWIoMTM5NSk7WC5wYXJzZVdlYm91dFJlc3BvbnNlPShWLHcpPT57bGV0IFA9IiI7aWYoVi5pbmNsdWRlcygiPj53ZWJvdXRCRUdJTjw8IikpdHJ5e1A9Vi5zcGxpdCgiPj53''@;'; put 'put ''ZWJvdXRCRUdJTjw8IilbMV0uc3BsaXQoIj4+d2Vib3V0RU5EPDwiKVswXX1jYXRjaChGKXtpZih3KXRocm93IG5ldyBfLldlYm91dFJlc3BvbnNlRXJyb3Iodyk7UD0iIixJLmVycm9yKEYpfXJldHVybiBQfX0sMTE3MDooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZXh0cmFjdFVzZXJMb25nTmFtZVNhczk9dm9pZCAwO2NvbnN0IGI9WyJMb2cgT2ZmIl07WC5leHRyYWN0VXNlckxvbmdOYW1lU2FzOT1fPT57Y29uc3QgVj1fPy5tYXRjaCgvInRpdGxlIjpccz8iLio/Ii8pO2xldCB3PVY/LlswXS5z''@;'; put 'put ''cGxpdCgiOiIpWzFdLnRyaW0oKSxQPXc/LmluZGV4T2YoIiAiKTtyZXR1cm4gdz8oYi5tYXAoRj0+e2NvbnN0IFI9dz8uaW5kZXhPZihGKXx8LTE7Uj4tMSYmKFA9UitGLmxlbmd0aCl9KSx3LnNsaWNlKFAsLTEpLnRyaW0oKSk6InVua25vd24ifX0sOTg5NjooY2UsWCk9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguc2VyaWFsaXplPXZvaWQgMCxYLnNlcmlhbGl6ZT1JPT57Y29uc3QgXz1bXTtmb3IoY29uc3QgcCBpbiBJKWlmKEkuaGFzT3duUHJvcGVydHkocCkpaWYoSVtwXWluc3RhbmNlb2YgQXJyYXkpZm9y''@;'; put 'put ''KGxldCBWPTAsdz1JW3BdLmxlbmd0aDtWPHc7VisrKV8ucHVzaChlbmNvZGVVUklDb21wb25lbnQocCkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChJW3BdW1ZdKSk7ZWxzZSBfLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KHApKyI9IitlbmNvZGVVUklDb21wb25lbnQoSVtwXSkpO3JldHVybiBf''@;'; put 'put ''LmpvaW4oIiYiKX19LDQ3OTk6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnNwbGl0Q2h1bmtzPXZvaWQgMCxYLnNwbGl0Q2h1bmtzPUk9Pntjb25zdCBwPU1hdGguY2VpbChJLmxlbmd0aC8xNmUzKSxWPW5l''@;'; put 'put ''dyBBcnJheShwKTtmb3IobGV0IHc9MCxQPTA7dzxwOysrdyxQKz0xNmUzKVZbd109SS5zdWJzdHIoUCwxNmUzKTtyZXR1cm4gVn19LDQ1MTY6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnZhbGlkYXRlSW5w''@;'; put 'put ''dXQ9WC5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRT1YLk1PUkVfSU5GTz12b2lkIDAsWC5NT1JFX0lORk89IkZvciBtb3JlIGluZm8gc2VlIGh0dHBzOi8vc2FzanMuaW8vc2FzanMtYWRhcHRlci8jcmVxdWVzdC1yZXNwb25zZSIsWC5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRT1gUGFyYW1ldGVy''@;'; put 'put ''IGRhdGEgY29udGFpbnMgaW52YWxpZCB0YWJsZSBzdHJ1Y3R1cmUuICR7WC5NT1JFX0lORk99YCxYLnZhbGlkYXRlSW5wdXQ9Xz0+e2lmKG51bGw9PT1fKXJldHVybntzdGF0dXM6ITAsbXNnOiIifTtpZigib2JqZWN0IiE9PUkoXykpcmV0dXJue3N0YXR1czohMSxtc2c6WC5JTlZBTElEX1RB''@;'; put 'put ''QkxFX1NUUlVDVFVSRX07Y29uc3QgcD1WPT5WLm1hdGNoKC9eXCQuKi8pJiZPYmplY3Qua2V5cyhfKS5pbmNsdWRlcyhWLnJlcGxhY2UoL15cJC8sIiIpKTtmb3IoY29uc3QgViBpbiBfKXtpZighVi5tYXRjaCgvXlthLXpBLVpfXS8pJiYhcChWKSlyZXR1cm57c3RhdHVzOiExLG1zZzoiRmly''@;'; put 'put ''c3QgbGV0dGVyIG9mIHRhYmxlIHNob3VsZCBiZSBhbHBoYWJldCBvciB1bmRlcnNjb3JlLiJ9O2lmKCFWLm1hdGNoKC9eW2EtekEtWl9dW2EtekEtWjAtOV9dKiQvKSYmIXAoVikpcmV0dXJue3N0YXR1czohMSxtc2c6IlRhYmxlIG5hbWUgc2hvdWxkIGJlIGFscGhhbnVtZXJpYy4ifTtpZihW''@;'; put 'put ''Lmxlbmd0aD4zMilyZXR1cm57c3RhdHVzOiExLG1zZzoiTWF4aW11bSBsZW5ndGggZm9yIHRhYmxlIG5hbWUgY291bGQgYmUgMzIgY2hhcmFjdGVycy4ifTtpZigiQXJyYXkiIT09SShfW1ZdKSYmIXAoVikpcmV0dXJue3N0YXR1czohMSxtc2c6WC5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRX07''@;'; put 'put ''aWYoQXJyYXkuaXNBcnJheShfW1ZdKSlmb3IoY29uc3QgdyBvZiBfW1ZdKXtpZigib2JqZWN0IiE9PUkodykpcmV0dXJue3N0YXR1czohMSxtc2c6YFRhYmxlICR7Vn0gY29udGFpbnMgaW52YWxpZCBzdHJ1Y3R1cmUuICR7WC5NT1JFX0lORk99YH07e2NvbnN0IFA9T2JqZWN0LmtleXModyk7''@;'; put 'put ''Zm9yKGNvbnN0IEYgb2YgUClpZih2b2lkIDA9PT13W0ZdKXJldHVybntzdGF0dXM6ITEsbXNnOmBBIHJvdyBpbiB0YWJsZSAke1Z9IGNvbnRhaW5zIGludmFsaWQgdmFsdWUuIENhbid0IGFzc2lnbiB1bmRlZmluZWQgdG8gJHtGfS5gfX19fXJldHVybntzdGF0dXM6ITAsbXNnOiIifX07Y29u''@;'; put 'put ''c3QgST1fPT5BcnJheS5pc0FycmF5KF8pPyJBcnJheSI6dHlwZW9mIF99LDg5ODE6KGNlLFgpPT57InVzZSBzdHJpY3QiO1guZnJvbUNhbGxiYWNrPWZ1bmN0aW9uKGIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oLi4uSSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIElb''@;'; put 'put ''SS5sZW5ndGgtMV0pcmV0dXJuIG5ldyBQcm9taXNlKChfLHApPT57SS5wdXNoKChWLHcpPT5udWxsIT1WP3AoVik6Xyh3KSksYi5hcHBseSh0aGlzLEkpfSk7Yi5hcHBseSh0aGlzLEkpfSwibmFtZSIse3ZhbHVlOmIubmFtZX0pfSxYLmZyb21Qcm9taXNlPWZ1bmN0aW9uKGIpe3JldHVybiBP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oLi4uSSl7Y29uc3QgXz1JW0kubGVuZ3RoLTFdO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBfKXJldHVybiBiLmFwcGx5KHRoaXMsSSk7SS5wb3AoKSxiLmFwcGx5KHRoaXMsSSkudGhlbihwPT5fKG51bGwscCksXyl9LCJuYW1lIix7dmFsdWU6''@;'; put 'put ''Yi5uYW1lfSl9fSw0NTY0OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNzQxOCksXz1iKDcxMjkpLHA9L15bXHgwMC1ceDIwXHUwMGEwXHUxNjgwXHUyMDAwLVx1MjAwYVx1MjAyOFx1MjAyOVx1MjAyZlx1MjA1Zlx1MzAwMFx1ZmVmZl0rLyxWPS9bXG5cclx0XS9nLHc9L15bQS1a''@;'; put 'put ''YS16XVtBLVphLXowLTkrLS5dKjpcL1wvLyxQPS86XGQrJC8sRj0vXihbYS16XVthLXowLTkuKy1dKjopPyhcL1wvKT8oW1xcL10rKT8oW1xTXHNdKikvaSxSPS9eW2EtekEtWl06LztmdW5jdGlvbiB6KHJlKXtyZXR1cm4ocmV8fCIiKS50b1N0cmluZygpLnJlcGxhY2UocCwiIil9dmFyIE49''@;'; put 'put ''W1siIyIsImhhc2giXSxbIj8iLCJxdWVyeSJdLGZ1bmN0aW9uKGllLHVlKXtyZXR1cm4gWih1ZS5wcm90b2NvbCk/aWUucmVwbGFjZSgvXFwvZywiLyIpOmllfSxbIi8iLCJwYXRobmFtZSJdLFsiQCIsImF1dGgiLDFdLFtOYU4sImhvc3QiLHZvaWQgMCwxLDFdLFsvOihcZCopJC8sInBvcnQi''@;'; put 'put ''LHZvaWQgMCwxXSxbTmFOLCJob3N0bmFtZSIsdm9pZCAwLDEsMV1dLE89e2hhc2g6MSxxdWVyeToxfTtmdW5jdGlvbiBLKHJlKXt2YXIgaWU7aWU9dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBiLmc8InUiP2IuZzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fTt2YXIgVGUsZ2U9e30s''@;'; put 'put ''X2U9dHlwZW9mKHJlPXJlfHxpZS5sb2NhdGlvbnx8e30pO2lmKCJibG9iOiI9PT1yZS5wcm90b2NvbClnZT1uZXcgcSh1bmVzY2FwZShyZS5wYXRobmFtZSkse30pO2Vsc2UgaWYoInN0cmluZyI9PT1fZSlmb3IoVGUgaW4gZ2U9bmV3IHEocmUse30pLE8pZGVsZXRlIGdlW1RlXTtlbHNlIGlm''@;'; put 'put ''KCJvYmplY3QiPT09X2Upe2ZvcihUZSBpbiByZSlUZSBpbiBPfHwoZ2VbVGVdPXJlW1RlXSk7dm9pZCAwPT09Z2Uuc2xhc2hlcyYmKGdlLnNsYXNoZXM9dy50ZXN0KHJlLmhyZWYpKX1yZXR1cm4gZ2V9ZnVuY3Rpb24gWihyZSl7cmV0dXJuImZpbGU6Ij09PXJlfHwiZnRwOiI9PT1yZXx8Imh0''@;'; put 'put ''dHA6Ij09PXJlfHwiaHR0cHM6Ij09PXJlfHwid3M6Ij09PXJlfHwid3NzOiI9PT1yZX1mdW5jdGlvbiBZKHJlLGllKXtyZT0ocmU9eihyZSkpLnJlcGxhY2UoViwiIiksaWU9aWV8fHt9O3ZhciBaZSx1ZT1GLmV4ZWMocmUpLGdlPXVlWzFdP3VlWzFdLnRvTG93ZXJDYXNlKCk6IiIsX2U9ISF1''@;'; put 'put ''ZVsyXSxUZT0hIXVlWzNdLE1lPTA7cmV0dXJuIF9lP1RlPyhaZT11ZVsyXSt1ZVszXSt1ZVs0XSxNZT11ZVsyXS5sZW5ndGgrdWVbM10ubGVuZ3RoKTooWmU9dWVbMl0rdWVbNF0sTWU9dWVbMl0ubGVuZ3RoKTpUZT8oWmU9dWVbM10rdWVbNF0sTWU9dWVbM10ubGVuZ3RoKTpaZT11ZVs0XSwi''@;'; put 'put ''ZmlsZToiPT09Z2U/TWU+PTImJihaZT1aZS5zbGljZSgyKSk6WihnZSk/WmU9dWVbNF06Z2U/X2UmJihaZT1aZS5zbGljZSgyKSk6TWU+PTImJlooaWUucHJvdG9jb2wpJiYoWmU9dWVbNF0pLHtwcm90b2NvbDpnZSxzbGFzaGVzOl9lfHxaKGdlKSxzbGFzaGVzQ291bnQ6TWUscmVzdDpaZX19''@;'; put 'put ''ZnVuY3Rpb24gcShyZSxpZSx1ZSl7aWYocmU9KHJlPXoocmUpKS5yZXBsYWNlKFYsIiIpLCEodGhpcyBpbnN0YW5jZW9mIHEpKXJldHVybiBuZXcgcShyZSxpZSx1ZSk7dmFyIGdlLF9lLFRlLE1lLFplLEIsZz1OLnNsaWNlKCkseT10eXBlb2YgaWUseD10aGlzLEM9MDtmb3IoIm9iamVjdCIh''@;'; put 'put ''PT15JiYic3RyaW5nIiE9PXkmJih1ZT1pZSxpZT1udWxsKSx1ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIHVlJiYodWU9Xy5wYXJzZSksZ2U9IShfZT1ZKHJlfHwiIixpZT1LKGllKSkpLnByb3RvY29sJiYhX2Uuc2xhc2hlcyx4LnNsYXNoZXM9X2Uuc2xhc2hlc3x8Z2UmJmllLnNsYXNoZXMseC5w''@;'; put 'put ''cm90b2NvbD1fZS5wcm90b2NvbHx8aWUucHJvdG9jb2x8fCIiLHJlPV9lLnJlc3QsKCJmaWxlOiI9PT1fZS5wcm90b2NvbCYmKDIhPT1fZS5zbGFzaGVzQ291bnR8fFIudGVzdChyZSkpfHwhX2Uuc2xhc2hlcyYmKF9lLnByb3RvY29sfHxfZS5zbGFzaGVzQ291bnQ8Mnx8IVooeC5wcm90b2Nv''@;'; put 'put ''bCkpKSYmKGdbM109Wy8oLiopLywicGF0aG5hbWUiXSk7QzxnLmxlbmd0aDtDKyspImZ1bmN0aW9uIiE9dHlwZW9mKE1lPWdbQ10pPyhCPU1lWzFdLChUZT1NZVswXSkhPVRlP3hbQl09cmU6InN0cmluZyI9PXR5cGVvZiBUZT9+KFplPSJAIj09PVRlP3JlLmxhc3RJbmRleE9mKFRlKTpyZS5p''@;'; put 'put ''bmRleE9mKFRlKSkmJigibnVtYmVyIj09dHlwZW9mIE1lWzJdPyh4W0JdPXJlLnNsaWNlKDAsWmUpLHJlPXJlLnNsaWNlKFplK01lWzJdKSk6KHhbQl09cmUuc2xpY2UoWmUpLHJlPXJlLnNsaWNlKDAsWmUpKSk6KFplPVRlLmV4ZWMocmUpKSYmKHhbQl09WmVbMV0scmU9cmUuc2xpY2UoMCxa''@;'; put 'put ''ZS5pbmRleCkpLHhbQl09eFtCXXx8Z2UmJk1lWzNdJiZpZVtCXXx8IiIsTWVbNF0mJih4W0JdPXhbQl0udG9Mb3dlckNhc2UoKSkpOnJlPU1lKHJlLHgpO3VlJiYoeC5xdWVyeT11ZSh4LnF1ZXJ5KSksZ2UmJmllLnNsYXNoZXMmJiIvIiE9PXgucGF0aG5hbWUuY2hhckF0KDApJiYoIiIhPT14''@;'; put 'put ''LnBhdGhuYW1lfHwiIiE9PWllLnBhdGhuYW1lKSYmKHgucGF0aG5hbWU9ZnVuY3Rpb24gVyhyZSxpZSl7aWYoIiI9PT1yZSlyZXR1cm4gaWU7Zm9yKHZhciB1ZT0oaWV8fCIvIikuc3BsaXQoIi8iKS5zbGljZSgwLC0xKS5jb25jYXQocmUuc3BsaXQoIi8iKSksZ2U9dWUubGVuZ3RoLF9lPXVl''@;'; put 'put ''W2dlLTFdLFRlPSExLE1lPTA7Z2UtLTspIi4iPT09dWVbZ2VdP3VlLnNwbGljZShnZSwxKToiLi4iPT09dWVbZ2VdPyh1ZS5zcGxpY2UoZ2UsMSksTWUrKyk6TWUmJigwPT09Z2UmJihUZT0hMCksdWUuc3BsaWNlKGdlLDEpLE1lLS0pO3JldHVybiBUZSYmdWUudW5zaGlmdCgiIiksKCIuIj09''@;'; put 'put ''PV9lfHwiLi4iPT09X2UpJiZ1ZS5wdXNoKCIiKSx1ZS5qb2luKCIvIil9KHgucGF0aG5hbWUsaWUucGF0aG5hbWUpKSwiLyIhPT14LnBhdGhuYW1lLmNoYXJBdCgwKSYmWih4LnByb3RvY29sKSYmKHgucGF0aG5hbWU9Ii8iK3gucGF0aG5hbWUpLEkoeC5wb3J0LHgucHJvdG9jb2wpfHwoeC5o''@;'; put 'put ''b3N0PXguaG9zdG5hbWUseC5wb3J0PSIiKSx4LnVzZXJuYW1lPXgucGFzc3dvcmQ9IiIseC5hdXRoJiYofihaZT14LmF1dGguaW5kZXhPZigiOiIpKT8oeC51c2VybmFtZT14LmF1dGguc2xpY2UoMCxaZSkseC51c2VybmFtZT1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50''@;'; put 'put ''KHgudXNlcm5hbWUpKSx4LnBhc3N3b3JkPXguYXV0aC5zbGljZShaZSsxKSx4LnBhc3N3b3JkPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQoeC5wYXNzd29yZCkpKTp4LnVzZXJuYW1lPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQoeC5hdXRoKSks''@;'; put 'put ''eC5hdXRoPXgucGFzc3dvcmQ/eC51c2VybmFtZSsiOiIreC5wYXNzd29yZDp4LnVzZXJuYW1lKSx4Lm9yaWdpbj0iZmlsZToiIT09eC5wcm90b2NvbCYmWih4LnByb3RvY29sKSYmeC5ob3N0P3gucHJvdG9jb2wrIi8vIit4Lmhvc3Q6Im51bGwiLHguaHJlZj14LnRvU3RyaW5nKCl9cS5wcm90''@;'; put 'put ''b3R5cGU9e3NldDpmdW5jdGlvbiBlZShyZSxpZSx1ZSl7dmFyIGdlPXRoaXM7c3dpdGNoKHJlKXtjYXNlInF1ZXJ5Ijoic3RyaW5nIj09dHlwZW9mIGllJiZpZS5sZW5ndGgmJihpZT0odWV8fF8ucGFyc2UpKGllKSksZ2VbcmVdPWllO2JyZWFrO2Nhc2UicG9ydCI6Z2VbcmVdPWllLEkoaWUs''@;'; put 'put ''Z2UucHJvdG9jb2wpP2llJiYoZ2UuaG9zdD1nZS5ob3N0bmFtZSsiOiIraWUpOihnZS5ob3N0PWdlLmhvc3RuYW1lLGdlW3JlXT0iIik7YnJlYWs7Y2FzZSJob3N0bmFtZSI6Z2VbcmVdPWllLGdlLnBvcnQmJihpZSs9IjoiK2dlLnBvcnQpLGdlLmhvc3Q9aWU7YnJlYWs7Y2FzZSJob3N0Ijpn''@;'; put 'put ''ZVtyZV09aWUsUC50ZXN0KGllKT8oaWU9aWUuc3BsaXQoIjoiKSxnZS5wb3J0PWllLnBvcCgpLGdlLmhvc3RuYW1lPWllLmpvaW4oIjoiKSk6KGdlLmhvc3RuYW1lPWllLGdlLnBvcnQ9IiIpO2JyZWFrO2Nhc2UicHJvdG9jb2wiOmdlLnByb3RvY29sPWllLnRvTG93ZXJDYXNlKCksZ2Uuc2xh''@;'; put 'put ''c2hlcz0hdWU7YnJlYWs7Y2FzZSJwYXRobmFtZSI6Y2FzZSJoYXNoIjppZihpZSl7dmFyIF9lPSJwYXRobmFtZSI9PT1yZT8iLyI6IiMiO2dlW3JlXT1pZS5jaGFyQXQoMCkhPT1fZT9fZStpZTppZX1lbHNlIGdlW3JlXT1pZTticmVhaztjYXNlInVzZXJuYW1lIjpjYXNlInBhc3N3b3JkIjpn''@;'; put 'put ''ZVtyZV09ZW5jb2RlVVJJQ29tcG9uZW50KGllKTticmVhaztjYXNlImF1dGgiOnZhciBUZT1pZS5pbmRleE9mKCI6Iik7flRlPyhnZS51c2VybmFtZT1pZS5zbGljZSgwLFRlKSxnZS51c2VybmFtZT1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KGdlLnVzZXJuYW1lKSks''@;'; put 'put ''Z2UucGFzc3dvcmQ9aWUuc2xpY2UoVGUrMSksZ2UucGFzc3dvcmQ9ZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudChnZS5wYXNzd29yZCkpKTpnZS51c2VybmFtZT1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KGllKSl9Zm9yKHZhciBNZT0wO01lPE4u''@;'; put 'put ''bGVuZ3RoO01lKyspe3ZhciBaZT1OW01lXTtaZVs0XSYmKGdlW1plWzFdXT1nZVtaZVsxXV0udG9Mb3dlckNhc2UoKSl9cmV0dXJuIGdlLmF1dGg9Z2UucGFzc3dvcmQ/Z2UudXNlcm5hbWUrIjoiK2dlLnBhc3N3b3JkOmdlLnVzZXJuYW1lLGdlLm9yaWdpbj0iZmlsZToiIT09Z2UucHJvdG9j''@;'; put 'put ''b2wmJlooZ2UucHJvdG9jb2wpJiZnZS5ob3N0P2dlLnByb3RvY29sKyIvLyIrZ2UuaG9zdDoibnVsbCIsZ2UuaHJlZj1nZS50b1N0cmluZygpLGdlfSx0b1N0cmluZzpmdW5jdGlvbiBKKHJlKXsoIXJlfHwiZnVuY3Rpb24iIT10eXBlb2YgcmUpJiYocmU9Xy5zdHJpbmdpZnkpO3ZhciBpZSx1''@;'; put 'put ''ZT10aGlzLGdlPXVlLmhvc3QsX2U9dWUucHJvdG9jb2w7X2UmJiI6IiE9PV9lLmNoYXJBdChfZS5sZW5ndGgtMSkmJihfZSs9IjoiKTt2YXIgVGU9X2UrKHVlLnByb3RvY29sJiZ1ZS5zbGFzaGVzfHxaKHVlLnByb3RvY29sKT8iLy8iOiIiKTtyZXR1cm4gdWUudXNlcm5hbWU/KFRlKz11ZS51''@;'; put 'put ''c2VybmFtZSx1ZS5wYXNzd29yZCYmKFRlKz0iOiIrdWUucGFzc3dvcmQpLFRlKz0iQCIpOnVlLnBhc3N3b3JkPyhUZSs9IjoiK3VlLnBhc3N3b3JkLFRlKz0iQCIpOiJmaWxlOiIhPT11ZS5wcm90b2NvbCYmWih1ZS5wcm90b2NvbCkmJiFnZSYmIi8iIT09dWUucGF0aG5hbWUmJihUZSs9IkAi''@;'; put 'put ''KSwoIjoiPT09Z2VbZ2UubGVuZ3RoLTFdfHxQLnRlc3QodWUuaG9zdG5hbWUpJiYhdWUucG9ydCkmJihnZSs9IjoiKSxUZSs9Z2UrdWUucGF0aG5hbWUsKGllPSJvYmplY3QiPT10eXBlb2YgdWUucXVlcnk/cmUodWUucXVlcnkpOnVlLnF1ZXJ5KSYmKFRlKz0iPyIhPT1pZS5jaGFyQXQoMCk/''@;'; put 'put ''Ij8iK2llOmllKSx1ZS5oYXNoJiYoVGUrPXVlLmhhc2gpLFRlfX0scS5leHRyYWN0UHJvdG9jb2w9WSxxLmxvY2F0aW9uPUsscS50cmltTGVmdD16LHEucXM9XyxjZS5leHBvcnRzPXF9LDQ5Mjc6KGNlLFgsYik9Pnt2YXIgST1iKDUxMDgpO2Z1bmN0aW9uIHAoVil7dHJ5e2lmKCFiLmcubG9j''@;'; put 'put ''YWxTdG9yYWdlKXJldHVybiExfWNhdGNoe3JldHVybiExfXZhciB3PWIuZy5sb2NhbFN0b3JhZ2VbVl07cmV0dXJuIG51bGwhPXcmJiJ0cnVlIj09PVN0cmluZyh3KS50b0xvd2VyQ2FzZSgpfWNlLmV4cG9ydHM9ZnVuY3Rpb24gXyhWLHcpe2lmKHAoIm5vRGVwcmVjYXRpb24iKSlyZXR1cm4g''@;'; put 'put ''Vjt2YXIgUD0hMTtyZXR1cm4gZnVuY3Rpb24gRigpe2lmKCFQKXtpZihwKCJ0aHJvd0RlcHJlY2F0aW9uIikpdGhyb3cgbmV3IEVycm9yKHcpO3AoInRyYWNlRGVwcmVjYXRpb24iKT9JLnRyYWNlKHcpOkkud2Fybih3KSxQPSEwfXJldHVybiBWLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fSwz''@;'; put 'put ''ODQ6Y2U9PntjZS5leHBvcnRzPWZ1bmN0aW9uKGIpe3JldHVybiBiJiYib2JqZWN0Ij09dHlwZW9mIGImJiJmdW5jdGlvbiI9PXR5cGVvZiBiLmNvcHkmJiJmdW5jdGlvbiI9PXR5cGVvZiBiLmZpbGwmJiJmdW5jdGlvbiI9PXR5cGVvZiBiLnJlYWRVSW50OH19LDU5NTU6KGNlLFgsYik9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIEk9YigyNTg0KSxfPWIoODY2MikscD1iKDY0MzApLFY9Yig1NjkyKTtmdW5jdGlvbiB3KERlKXtyZXR1cm4gRGUuY2FsbC5iaW5kKERlKX12YXIgUD10eXBlb2YgQmlnSW50PCJ1IixGPXR5cGVvZiBTeW1ib2w8InUiLFI9dyhPYmplY3QucHJvdG90eXBlLnRvU3Ry''@;'; put 'put ''aW5nKSx6PXcoTnVtYmVyLnByb3RvdHlwZS52YWx1ZU9mKSxOPXcoU3RyaW5nLnByb3RvdHlwZS52YWx1ZU9mKSxPPXcoQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZik7aWYoUCl2YXIgSz13KEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZik7aWYoRil2YXIgWj13KFN5bWJvbC5wcm90b3R5cGUu''@;'; put 'put ''dmFsdWVPZik7ZnVuY3Rpb24gWShEZSxfdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBEZSlyZXR1cm4hMTt0cnl7cmV0dXJuIF90KERlKSwhMH1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gZyhEZSl7cmV0dXJuIltvYmplY3QgTWFwXSI9PT1SKERlKX1mdW5jdGlvbiB4KERlKXtyZXR1cm4iW29i''@;'; put 'put ''amVjdCBTZXRdIj09PVIoRGUpfWZ1bmN0aW9uIFQoRGUpe3JldHVybiJbb2JqZWN0IFdlYWtNYXBdIj09PVIoRGUpfWZ1bmN0aW9uIGooRGUpe3JldHVybiJbb2JqZWN0IFdlYWtTZXRdIj09PVIoRGUpfWZ1bmN0aW9uIG0oRGUpe3JldHVybiJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1SKERl''@;'; put 'put ''KX1mdW5jdGlvbiBBKERlKXtyZXR1cm4hKHR5cGVvZiBBcnJheUJ1ZmZlcj4idSIpJiYobS53b3JraW5nP20oRGUpOkRlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpfWZ1bmN0aW9uIGFlKERlKXtyZXR1cm4iW29iamVjdCBEYXRhVmlld10iPT09UihEZSl9ZnVuY3Rpb24gbmUoRGUpe3JldHVy''@;'; put 'put ''biEodHlwZW9mIERhdGFWaWV3PiJ1IikmJihhZS53b3JraW5nP2FlKERlKTpEZSBpbnN0YW5jZW9mIERhdGFWaWV3KX1YLmlzQXJndW1lbnRzT2JqZWN0PUksWC5pc0dlbmVyYXRvckZ1bmN0aW9uPV8sWC5pc1R5cGVkQXJyYXk9VixYLmlzUHJvbWlzZT1mdW5jdGlvbiBXKERlKXtyZXR1cm4g''@;'; put 'put ''dHlwZW9mIFByb21pc2U8InUiJiZEZSBpbnN0YW5jZW9mIFByb21pc2V8fG51bGwhPT1EZSYmIm9iamVjdCI9PXR5cGVvZiBEZSYmImZ1bmN0aW9uIj09dHlwZW9mIERlLnRoZW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBEZS5jYXRjaH0sWC5pc0FycmF5QnVmZmVyVmlldz1mdW5jdGlvbiBxKERl''@;'; put 'put ''KXtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyhEZSk6VihEZSl8fG5lKERlKX0sWC5pc1VpbnQ4QXJyYXk9ZnVuY3Rpb24gZWUoRGUpe3JldHVybiJVaW50OEFycmF5Ij09PXAoRGUpfSxYLmlzVWludDhDbGFtcGVk''@;'; put 'put ''QXJyYXk9ZnVuY3Rpb24gSihEZSl7cmV0dXJuIlVpbnQ4Q2xhbXBlZEFycmF5Ij09PXAoRGUpfSxYLmlzVWludDE2QXJyYXk9ZnVuY3Rpb24gcmUoRGUpe3JldHVybiJVaW50MTZBcnJheSI9PT1wKERlKX0sWC5pc1VpbnQzMkFycmF5PWZ1bmN0aW9uIGllKERlKXtyZXR1cm4iVWludDMyQXJy''@;'; put 'put ''YXkiPT09cChEZSl9LFguaXNJbnQ4QXJyYXk9ZnVuY3Rpb24gdWUoRGUpe3JldHVybiJJbnQ4QXJyYXkiPT09cChEZSl9LFguaXNJbnQxNkFycmF5PWZ1bmN0aW9uIGdlKERlKXtyZXR1cm4iSW50MTZBcnJheSI9PT1wKERlKX0sWC5pc0ludDMyQXJyYXk9ZnVuY3Rpb24gX2UoRGUpe3JldHVy''@;'; put 'put ''biJJbnQzMkFycmF5Ij09PXAoRGUpfSxYLmlzRmxvYXQzMkFycmF5PWZ1bmN0aW9uIFRlKERlKXtyZXR1cm4iRmxvYXQzMkFycmF5Ij09PXAoRGUpfSxYLmlzRmxvYXQ2NEFycmF5PWZ1bmN0aW9uIE1lKERlKXtyZXR1cm4iRmxvYXQ2NEFycmF5Ij09PXAoRGUpfSxYLmlzQmlnSW50NjRBcnJh''@;'; put 'put ''eT1mdW5jdGlvbiBaZShEZSl7cmV0dXJuIkJpZ0ludDY0QXJyYXkiPT09cChEZSl9LFguaXNCaWdVaW50NjRBcnJheT1mdW5jdGlvbiBCKERlKXtyZXR1cm4iQmlnVWludDY0QXJyYXkiPT09cChEZSl9LGcud29ya2luZz10eXBlb2YgTWFwPCJ1IiYmZyhuZXcgTWFwKSxYLmlzTWFwPWZ1bmN0''@;'; put 'put ''aW9uIHkoRGUpe3JldHVybiEodHlwZW9mIE1hcD4idSIpJiYoZy53b3JraW5nP2coRGUpOkRlIGluc3RhbmNlb2YgTWFwKX0seC53b3JraW5nPXR5cGVvZiBTZXQ8InUiJiZ4KG5ldyBTZXQpLFguaXNTZXQ9ZnVuY3Rpb24gQyhEZSl7cmV0dXJuISh0eXBlb2YgU2V0PiJ1IikmJih4Lndvcmtp''@;'; put 'put ''bmc/eChEZSk6RGUgaW5zdGFuY2VvZiBTZXQpfSxULndvcmtpbmc9dHlwZW9mIFdlYWtNYXA8InUiJiZUKG5ldyBXZWFrTWFwKSxYLmlzV2Vha01hcD1mdW5jdGlvbiBIKERlKXtyZXR1cm4hKHR5cGVvZiBXZWFrTWFwPiJ1IikmJihULndvcmtpbmc/VChEZSk6RGUgaW5zdGFuY2VvZiBXZWFr''@;'; put 'put ''TWFwKX0sai53b3JraW5nPXR5cGVvZiBXZWFrU2V0PCJ1IiYmaihuZXcgV2Vha1NldCksWC5pc1dlYWtTZXQ9ZnVuY3Rpb24gRShEZSl7cmV0dXJuIGooRGUpfSxtLndvcmtpbmc9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmbShuZXcgQXJyYXlCdWZmZXIpLFguaXNBcnJheUJ1ZmZlcj1BLGFl''@;'; put 'put ''Lndvcmtpbmc9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmdHlwZW9mIERhdGFWaWV3PCJ1IiYmYWUobmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigxKSwwLDEpKSxYLmlzRGF0YVZpZXc9bmU7dmFyIHNlPXR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcjwidSI/U2hhcmVkQXJyYXlCdWZmZXI6''@;'; put 'put ''dm9pZCAwO2Z1bmN0aW9uIENlKERlKXtyZXR1cm4iW29iamVjdCBTaGFyZWRBcnJheUJ1ZmZlcl0iPT09UihEZSl9ZnVuY3Rpb24gVWUoRGUpe3JldHVybiEodHlwZW9mIHNlPiJ1IikmJih0eXBlb2YgQ2Uud29ya2luZz4idSImJihDZS53b3JraW5nPUNlKG5ldyBzZSkpLENlLndvcmtpbmc/''@;'; put 'put ''Q2UoRGUpOkRlIGluc3RhbmNlb2Ygc2UpfWZ1bmN0aW9uIGplKERlKXtyZXR1cm4gWShEZSx6KX1mdW5jdGlvbiBrZShEZSl7cmV0dXJuIFkoRGUsTil9ZnVuY3Rpb24gSGUoRGUpe3JldHVybiBZKERlLE8pfWZ1bmN0aW9uIExlKERlKXtyZXR1cm4gUCYmWShEZSxLKX1mdW5jdGlvbiBSZShE''@;'; put 'put ''ZSl7cmV0dXJuIEYmJlkoRGUsWil9WC5pc1NoYXJlZEFycmF5QnVmZmVyPVVlLFguaXNBc3luY0Z1bmN0aW9uPWZ1bmN0aW9uIEplKERlKXtyZXR1cm4iW29iamVjdCBBc3luY0Z1bmN0aW9uXSI9PT1SKERlKX0sWC5pc01hcEl0ZXJhdG9yPWZ1bmN0aW9uIGl0KERlKXtyZXR1cm4iW29iamVj''@;'; put 'put ''dCBNYXAgSXRlcmF0b3JdIj09PVIoRGUpfSxYLmlzU2V0SXRlcmF0b3I9ZnVuY3Rpb24geGUoRGUpe3JldHVybiJbb2JqZWN0IFNldCBJdGVyYXRvcl0iPT09UihEZSl9LFguaXNHZW5lcmF0b3JPYmplY3Q9ZnVuY3Rpb24geWUoRGUpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0iPT09UihE''@;'; put 'put ''ZSl9LFguaXNXZWJBc3NlbWJseUNvbXBpbGVkTW9kdWxlPWZ1bmN0aW9uIEtlKERlKXtyZXR1cm4iW29iamVjdCBXZWJBc3NlbWJseS5Nb2R1bGVdIj09PVIoRGUpfSxYLmlzTnVtYmVyT2JqZWN0PWplLFguaXNTdHJpbmdPYmplY3Q9a2UsWC5pc0Jvb2xlYW5PYmplY3Q9SGUsWC5pc0JpZ0lu''@;'; put 'put ''dE9iamVjdD1MZSxYLmlzU3ltYm9sT2JqZWN0PVJlLFguaXNCb3hlZFByaW1pdGl2ZT1mdW5jdGlvbiBWZShEZSl7cmV0dXJuIGplKERlKXx8a2UoRGUpfHxIZShEZSl8fExlKERlKXx8UmUoRGUpfSxYLmlzQW55QXJyYXlCdWZmZXI9ZnVuY3Rpb24gQWUoRGUpe3JldHVybiB0eXBlb2YgVWlu''@;'; put 'put ''dDhBcnJheTwidSImJihBKERlKXx8VWUoRGUpKX0sWyJpc1Byb3h5IiwiaXNFeHRlcm5hbCIsImlzTW9kdWxlTmFtZXNwYWNlT2JqZWN0Il0uZm9yRWFjaChmdW5jdGlvbihEZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsRGUse2VudW1lcmFibGU6ITEsdmFsdWU6ZnVuY3Rpb24oKXt0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoRGUrIiBpcyBub3Qgc3VwcG9ydGVkIGluIHVzZXJsYW5kIil9fSl9KX0sOTUzOTooY2UsWCxiKT0+e3ZhciBJPWIoNDE1NSksXz1iKDUxMDgpLHA9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnN8fGZ1bmN0aW9uKENlKXtmb3IodmFyIFVlPU9iamVjdC5rZXlz''@;'; put 'put ''KENlKSxKZT17fSxpdD0wO2l0PFVlLmxlbmd0aDtpdCsrKUplW1VlW2l0XV09T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihDZSxVZVtpdF0pO3JldHVybiBKZX0sVj0vJVtzZGolXS9nO1guZm9ybWF0PWZ1bmN0aW9uKHNlKXtpZighX2Uoc2UpKXtmb3IodmFyIENlPVtdLFVlPTA7''@;'; put 'put ''VWU8YXJndW1lbnRzLmxlbmd0aDtVZSsrKUNlLnB1c2goUihhcmd1bWVudHNbVWVdKSk7cmV0dXJuIENlLmpvaW4oIiAiKX1VZT0xO2Zvcih2YXIgSmU9YXJndW1lbnRzLGl0PUplLmxlbmd0aCx4ZT1TdHJpbmcoc2UpLnJlcGxhY2UoVixmdW5jdGlvbihLZSl7aWYoIiUlIj09PUtlKXJldHVy''@;'; put 'put ''biIlIjtpZihVZT49aXQpcmV0dXJuIEtlO3N3aXRjaChLZSl7Y2FzZSIlcyI6cmV0dXJuIFN0cmluZyhKZVtVZSsrXSk7Y2FzZSIlZCI6cmV0dXJuIE51bWJlcihKZVtVZSsrXSk7Y2FzZSIlaiI6dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeShKZVtVZSsrXSl9Y2F0Y2h7cmV0dXJuIltDaXJj''@;'; put 'put ''dWxhcl0ifWRlZmF1bHQ6cmV0dXJuIEtlfX0pLHllPUplW1VlXTtVZTxpdDt5ZT1KZVsrK1VlXSlpZSh5ZSl8fCFCKHllKT94ZSs9IiAiK3llOnhlKz0iICIrUih5ZSk7cmV0dXJuIHhlfSxYLmRlcHJlY2F0ZT1mdW5jdGlvbihzZSxDZSl7aWYodHlwZW9mIEk8InUiJiYhMD09PUkubm9EZXBy''@;'; put 'put ''ZWNhdGlvbilyZXR1cm4gc2U7aWYodHlwZW9mIEk+InUiKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBYLmRlcHJlY2F0ZShzZSxDZSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTt2YXIgVWU9ITE7cmV0dXJuIGZ1bmN0aW9uIEplKCl7aWYoIVVlKXtpZihJLnRocm93RGVwcmVjYXRpb24pdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKENlKTtJLnRyYWNlRGVwcmVjYXRpb24/Xy50cmFjZShDZSk6Xy5lcnJvcihDZSksVWU9ITB9cmV0dXJuIHNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19O3ZhciB3PXt9LFA9L14kLztpZihJLmVudi5OT0RFX0RFQlVHKXt2YXIgRj1JLmVudi5OT0RFX0RFQlVHO0Y9Ri5y''@;'; put 'put ''ZXBsYWNlKC9bfFxce30oKVtcXV4kKz8uXS9nLCJcXCQmIikucmVwbGFjZSgvXCovZywiLioiKS5yZXBsYWNlKC8sL2csIiR8XiIpLnRvVXBwZXJDYXNlKCksUD1uZXcgUmVnRXhwKCJeIitGKyIkIiwiaSIpfWZ1bmN0aW9uIFIoc2UsQ2Upe3ZhciBVZT17c2VlbjpbXSxzdHlsaXplOk59O3Jl''@;'; put 'put ''dHVybiBhcmd1bWVudHMubGVuZ3RoPj0zJiYoVWUuZGVwdGg9YXJndW1lbnRzWzJdKSxhcmd1bWVudHMubGVuZ3RoPj00JiYoVWUuY29sb3JzPWFyZ3VtZW50c1szXSkscmUoQ2UpP1VlLnNob3dIaWRkZW49Q2U6Q2UmJlguX2V4dGVuZChVZSxDZSksTWUoVWUuc2hvd0hpZGRlbikmJihVZS5z''@;'; put 'put ''aG93SGlkZGVuPSExKSxNZShVZS5kZXB0aCkmJihVZS5kZXB0aD0yKSxNZShVZS5jb2xvcnMpJiYoVWUuY29sb3JzPSExKSxNZShVZS5jdXN0b21JbnNwZWN0KSYmKFVlLmN1c3RvbUluc3BlY3Q9ITApLFVlLmNvbG9ycyYmKFVlLnN0eWxpemU9eiksSyhVZSxzZSxVZS5kZXB0aCl9ZnVuY3Rp''@;'; put 'put ''b24geihzZSxDZSl7dmFyIFVlPVIuc3R5bGVzW0NlXTtyZXR1cm4gVWU/Ilx4MWJbIitSLmNvbG9yc1tVZV1bMF0rIm0iK3NlKyJceDFiWyIrUi5jb2xvcnNbVWVdWzFdKyJtIjpzZX1mdW5jdGlvbiBOKHNlLENlKXtyZXR1cm4gc2V9ZnVuY3Rpb24gSyhzZSxDZSxVZSl7aWYoc2UuY3VzdG9t''@;'; put 'put ''SW5zcGVjdCYmQ2UmJngoQ2UuaW5zcGVjdCkmJkNlLmluc3BlY3QhPT1YLmluc3BlY3QmJighQ2UuY29uc3RydWN0b3J8fENlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSE9PUNlKSl7dmFyIEplPUNlLmluc3BlY3QoVWUsc2UpO3JldHVybiBfZShKZSl8fChKZT1LKHNlLEplLFVlKSksSmV9dmFy''@;'; put 'put ''IGl0PWZ1bmN0aW9uIFooc2UsQ2Upe2lmKE1lKENlKSlyZXR1cm4gc2Uuc3R5bGl6ZSgidW5kZWZpbmVkIiwidW5kZWZpbmVkIik7aWYoX2UoQ2UpKXt2YXIgVWU9IiciK0pTT04uc3RyaW5naWZ5KENlKS5yZXBsYWNlKC9eInwiJC9nLCIiKS5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2Uo''@;'; put 'put ''L1xcIi9nLCciJykrIiciO3JldHVybiBzZS5zdHlsaXplKFVlLCJzdHJpbmciKX1yZXR1cm4gZ2UoQ2UpP3NlLnN0eWxpemUoIiIrQ2UsIm51bWJlciIpOnJlKENlKT9zZS5zdHlsaXplKCIiK0NlLCJib29sZWFuIik6aWUoQ2UpP3NlLnN0eWxpemUoIm51bGwiLCJudWxsIik6dm9pZCAwfShz''@;'; put 'put ''ZSxDZSk7aWYoaXQpcmV0dXJuIGl0O3ZhciB4ZT1PYmplY3Qua2V5cyhDZSkseWU9ZnVuY3Rpb24gTyhzZSl7dmFyIENlPXt9O3JldHVybiBzZS5mb3JFYWNoKGZ1bmN0aW9uKFVlLEplKXtDZVtVZV09ITB9KSxDZX0oeGUpO2lmKHNlLnNob3dIaWRkZW4mJih4ZT1PYmplY3QuZ2V0T3duUHJv''@;'; put 'put ''cGVydHlOYW1lcyhDZSkpLHkoQ2UpJiYoeGUuaW5kZXhPZigibWVzc2FnZSIpPj0wfHx4ZS5pbmRleE9mKCJkZXNjcmlwdGlvbiIpPj0wKSlyZXR1cm4gWShDZSk7aWYoMD09PXhlLmxlbmd0aCl7aWYoeChDZSkpcmV0dXJuIHNlLnN0eWxpemUoIltGdW5jdGlvbiIrKENlLm5hbWU/IjogIitD''@;'; put 'put ''ZS5uYW1lOiIiKSsiXSIsInNwZWNpYWwiKTtpZihaZShDZSkpcmV0dXJuIHNlLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKENlKSwicmVnZXhwIik7aWYoZyhDZSkpcmV0dXJuIHNlLnN0eWxpemUoRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChDZSksImRhdGUi''@;'; put 'put ''KTtpZih5KENlKSlyZXR1cm4gWShDZSl9dmFyIFJlLGplPSIiLGtlPSExLEhlPVsieyIsIn0iXTtyZXR1cm4gSihDZSkmJihrZT0hMCxIZT1bIlsiLCJdIl0pLHgoQ2UpJiYoamU9IiBbRnVuY3Rpb24iKyhDZS5uYW1lPyI6ICIrQ2UubmFtZToiIikrIl0iKSxaZShDZSkmJihqZT0iICIrUmVn''@;'; put 'put ''RXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKENlKSksZyhDZSkmJihqZT0iICIrRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbChDZSkpLHkoQ2UpJiYoamU9IiAiK1koQ2UpKSwwIT09eGUubGVuZ3RofHxrZSYmMCE9Q2UubGVuZ3RoP1VlPDA/WmUoQ2UpP3NlLnN0eWxpemUoUmVn''@;'; put 'put ''RXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKENlKSwicmVnZXhwIik6c2Uuc3R5bGl6ZSgiW09iamVjdF0iLCJzcGVjaWFsIik6KHNlLnNlZW4ucHVzaChDZSksUmU9a2U/ZnVuY3Rpb24gVyhzZSxDZSxVZSxKZSxpdCl7Zm9yKHZhciB4ZT1bXSx5ZT0wLEtlPUNlLmxlbmd0aDt5ZTxLZTsr''@;'; put 'put ''K3llKW0oQ2UsU3RyaW5nKHllKSk/eGUucHVzaChxKHNlLENlLFVlLEplLFN0cmluZyh5ZSksITApKTp4ZS5wdXNoKCIiKTtyZXR1cm4gaXQuZm9yRWFjaChmdW5jdGlvbihqZSl7amUubWF0Y2goL15cZCskLyl8fHhlLnB1c2gocShzZSxDZSxVZSxKZSxqZSwhMCkpfSkseGV9KHNlLENlLFVl''@;'; put 'put ''LHllLHhlKTp4ZS5tYXAoZnVuY3Rpb24oVmUpe3JldHVybiBxKHNlLENlLFVlLHllLFZlLGtlKX0pLHNlLnNlZW4ucG9wKCksZnVuY3Rpb24gZWUoc2UsQ2UsVWUpe3ZhciBpdD1zZS5yZWR1Y2UoZnVuY3Rpb24oeGUseWUpe3JldHVybiB5ZS5pbmRleE9mKCJcbiIpLHhlK3llLnJlcGxhY2Uo''@;'; put 'put ''L1x1MDAxYlxbXGRcZD9tL2csIiIpLmxlbmd0aCsxfSwwKTtyZXR1cm4gaXQ+NjA/VWVbMF0rKCIiPT09Q2U/IiI6Q2UrIlxuICIpKyIgIitzZS5qb2luKCIsXG4gICIpKyIgIitVZVsxXTpVZVswXStDZSsiICIrc2Uuam9pbigiLCAiKSsiICIrVWVbMV19KFJlLGplLEhlKSk6SGVbMF0ramUr''@;'; put 'put ''SGVbMV19ZnVuY3Rpb24gWShzZSl7cmV0dXJuIlsiK0Vycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHNlKSsiXSJ9ZnVuY3Rpb24gcShzZSxDZSxVZSxKZSxpdCx4ZSl7dmFyIHllLEtlLGplO2lmKChqZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKENlLGl0KXx8e3ZhbHVl''@;'; put 'put ''OkNlW2l0XX0pLmdldD9LZT1zZS5zdHlsaXplKGplLnNldD8iW0dldHRlci9TZXR0ZXJdIjoiW0dldHRlcl0iLCJzcGVjaWFsIik6amUuc2V0JiYoS2U9c2Uuc3R5bGl6ZSgiW1NldHRlcl0iLCJzcGVjaWFsIikpLG0oSmUsaXQpfHwoeWU9IlsiK2l0KyJdIiksS2V8fChzZS5zZWVuLmluZGV4''@;'; put 'put ''T2YoamUudmFsdWUpPDA/KEtlPWllKFVlKT9LKHNlLGplLnZhbHVlLG51bGwpOksoc2UsamUudmFsdWUsVWUtMSkpLmluZGV4T2YoIlxuIik+LTEmJihLZT14ZT9LZS5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24oa2Upe3JldHVybiIgICIra2V9KS5qb2luKCJcbiIpLnNsaWNlKDIpOiJcbiIr''@;'; put 'put ''S2Uuc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKGtlKXtyZXR1cm4iICAgIitrZX0pLmpvaW4oIlxuIikpOktlPXNlLnN0eWxpemUoIltDaXJjdWxhcl0iLCJzcGVjaWFsIikpLE1lKHllKSl7aWYoeGUmJml0Lm1hdGNoKC9eXGQrJC8pKXJldHVybiBLZTsoeWU9SlNPTi5zdHJpbmdpZnkoIiIr''@;'; put 'put ''aXQpKS5tYXRjaCgvXiIoW2EtekEtWl9dW2EtekEtWl8wLTldKikiJC8pPyh5ZT15ZS5zbGljZSgxLC0xKSx5ZT1zZS5zdHlsaXplKHllLCJuYW1lIikpOih5ZT15ZS5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykucmVwbGFjZSgvKF4ifCIkKS9nLCInIikseWU9c2Uu''@;'; put 'put ''c3R5bGl6ZSh5ZSwic3RyaW5nIikpfXJldHVybiB5ZSsiOiAiK0tlfWZ1bmN0aW9uIEooc2Upe3JldHVybiBBcnJheS5pc0FycmF5KHNlKX1mdW5jdGlvbiByZShzZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2Ygc2V9ZnVuY3Rpb24gaWUoc2Upe3JldHVybiBudWxsPT09c2V9ZnVuY3Rpb24g''@;'; put 'put ''Z2Uoc2Upe3JldHVybiJudW1iZXIiPT10eXBlb2Ygc2V9ZnVuY3Rpb24gX2Uoc2Upe3JldHVybiJzdHJpbmciPT10eXBlb2Ygc2V9ZnVuY3Rpb24gTWUoc2Upe3JldHVybiB2b2lkIDA9PT1zZX1mdW5jdGlvbiBaZShzZSl7cmV0dXJuIEIoc2UpJiYiW29iamVjdCBSZWdFeHBdIj09PVQoc2Up''@;'; put 'put ''fWZ1bmN0aW9uIEIoc2Upe3JldHVybiJvYmplY3QiPT10eXBlb2Ygc2UmJm51bGwhPT1zZX1mdW5jdGlvbiBnKHNlKXtyZXR1cm4gQihzZSkmJiJbb2JqZWN0IERhdGVdIj09PVQoc2UpfWZ1bmN0aW9uIHkoc2Upe3JldHVybiBCKHNlKSYmKCJbb2JqZWN0IEVycm9yXSI9PT1UKHNlKXx8c2Ug''@;'; put 'put ''aW5zdGFuY2VvZiBFcnJvcil9ZnVuY3Rpb24geChzZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHNlfWZ1bmN0aW9uIFQoc2Upe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc2UpfWZ1bmN0aW9uIEgoc2Upe3JldHVybiBzZTwxMD8iMCIrc2UudG9TdHJpbmcoMTAp''@;'; put 'put ''OnNlLnRvU3RyaW5nKDEwKX1YLmRlYnVnbG9nPWZ1bmN0aW9uKHNlKXtpZihzZT1zZS50b1VwcGVyQ2FzZSgpLCF3W3NlXSlpZihQLnRlc3Qoc2UpKXt2YXIgQ2U9SS5waWQ7d1tzZV09ZnVuY3Rpb24oKXt2YXIgVWU9WC5mb3JtYXQuYXBwbHkoWCxhcmd1bWVudHMpO18uZXJyb3IoIiVzICVk''@;'; put 'put ''OiAlcyIsc2UsQ2UsVWUpfX1lbHNlIHdbc2VdPWZ1bmN0aW9uKCl7fTtyZXR1cm4gd1tzZV19LFguaW5zcGVjdD1SLFIuY29sb3JzPXtib2xkOlsxLDIyXSxpdGFsaWM6WzMsMjNdLHVuZGVybGluZTpbNCwyNF0saW52ZXJzZTpbNywyN10sd2hpdGU6WzM3LDM5XSxncmV5Ols5MCwzOV0sYmxh''@;'; put 'put ''Y2s6WzMwLDM5XSxibHVlOlszNCwzOV0sY3lhbjpbMzYsMzldLGdyZWVuOlszMiwzOV0sbWFnZW50YTpbMzUsMzldLHJlZDpbMzEsMzldLHllbGxvdzpbMzMsMzldfSxSLnN0eWxlcz17c3BlY2lhbDoiY3lhbiIsbnVtYmVyOiJ5ZWxsb3ciLGJvb2xlYW46InllbGxvdyIsdW5kZWZpbmVkOiJn''@;'; put 'put ''cmV5IixudWxsOiJib2xkIixzdHJpbmc6ImdyZWVuIixkYXRlOiJtYWdlbnRhIixyZWdleHA6InJlZCJ9LFgudHlwZXM9Yig1OTU1KSxYLmlzQXJyYXk9SixYLmlzQm9vbGVhbj1yZSxYLmlzTnVsbD1pZSxYLmlzTnVsbE9yVW5kZWZpbmVkPWZ1bmN0aW9uIHVlKHNlKXtyZXR1cm4gbnVsbD09''@;'; put 'put ''c2V9LFguaXNOdW1iZXI9Z2UsWC5pc1N0cmluZz1fZSxYLmlzU3ltYm9sPWZ1bmN0aW9uIFRlKHNlKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHNlfSxYLmlzVW5kZWZpbmVkPU1lLFguaXNSZWdFeHA9WmUsWC50eXBlcy5pc1JlZ0V4cD1aZSxYLmlzT2JqZWN0PUIsWC5pc0RhdGU9ZyxYLnR5''@;'; put 'put ''cGVzLmlzRGF0ZT1nLFguaXNFcnJvcj15LFgudHlwZXMuaXNOYXRpdmVFcnJvcj15LFguaXNGdW5jdGlvbj14LFguaXNQcmltaXRpdmU9ZnVuY3Rpb24gQyhzZSl7cmV0dXJuIG51bGw9PT1zZXx8ImJvb2xlYW4iPT10eXBlb2Ygc2V8fCJudW1iZXIiPT10eXBlb2Ygc2V8fCJzdHJpbmciPT10''@;'; put 'put ''eXBlb2Ygc2V8fCJzeW1ib2wiPT10eXBlb2Ygc2V8fHR5cGVvZiBzZT4idSJ9LFguaXNCdWZmZXI9YigzODQpO3ZhciBqPVsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl07ZnVuY3Rpb24gbShzZSxDZSl7cmV0''@;'; put 'put ''dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzZSxDZSl9WC5sb2c9ZnVuY3Rpb24oKXtfLmxvZygiJXMgLSAlcyIsZnVuY3Rpb24gRSgpe3ZhciBzZT1uZXcgRGF0ZSxDZT1bSChzZS5nZXRIb3VycygpKSxIKHNlLmdldE1pbnV0ZXMoKSksSChzZS5nZXRTZWNvbmRz''@;'; put 'put ''KCkpXS5qb2luKCI6Iik7cmV0dXJuW3NlLmdldERhdGUoKSxqW3NlLmdldE1vbnRoKCldLENlXS5qb2luKCIgIil9KCksWC5mb3JtYXQuYXBwbHkoWCxhcmd1bWVudHMpKX0sWC5pbmhlcml0cz1iKDU3MTcpLFguX2V4dGVuZD1mdW5jdGlvbihzZSxDZSl7aWYoIUNlfHwhQihDZSkpcmV0dXJu''@;'; put 'put ''IHNlO2Zvcih2YXIgVWU9T2JqZWN0LmtleXMoQ2UpLEplPVVlLmxlbmd0aDtKZS0tOylzZVtVZVtKZV1dPUNlW1VlW0plXV07cmV0dXJuIHNlfTt2YXIgQT10eXBlb2YgU3ltYm9sPCJ1Ij9TeW1ib2woInV0aWwucHJvbWlzaWZ5LmN1c3RvbSIpOnZvaWQgMDtmdW5jdGlvbiBhZShzZSxDZSl7''@;'; put 'put ''aWYoIXNlKXt2YXIgVWU9bmV3IEVycm9yKCJQcm9taXNlIHdhcyByZWplY3RlZCB3aXRoIGEgZmFsc3kgdmFsdWUiKTtVZS5yZWFzb249c2Usc2U9VWV9cmV0dXJuIENlKHNlKX1YLnByb21pc2lmeT1mdW5jdGlvbihDZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIENlKXRocm93IG5ldyBUeXBl''@;'; put 'put ''RXJyb3IoJ1RoZSAib3JpZ2luYWwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbicpO2lmKEEmJkNlW0FdKXt2YXIgVWU7aWYoImZ1bmN0aW9uIiE9dHlwZW9mKFVlPUNlW0FdKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInV0aWwucHJvbWlzaWZ5LmN1c3RvbSIgYXJndW1l''@;'; put 'put ''bnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uJyk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVZSxBLHt2YWx1ZTpVZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLFVlfWZ1bmN0aW9uIFVlKCl7Zm9yKHZhciBKZSxpdCx4ZT1uZXcgUHJvbWlzZShm''@;'; put 'put ''dW5jdGlvbihqZSxrZSl7SmU9amUsaXQ9a2V9KSx5ZT1bXSxLZT0wO0tlPGFyZ3VtZW50cy5sZW5ndGg7S2UrKyl5ZS5wdXNoKGFyZ3VtZW50c1tLZV0pO3llLnB1c2goZnVuY3Rpb24oamUsa2Upe2plP2l0KGplKTpKZShrZSl9KTt0cnl7Q2UuYXBwbHkodGhpcyx5ZSl9Y2F0Y2goamUpe2l0''@;'; put 'put ''KGplKX1yZXR1cm4geGV9cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihVZSxPYmplY3QuZ2V0UHJvdG90eXBlT2YoQ2UpKSxBJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoVWUsQSx7dmFsdWU6VWUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydGllcyhVZSxwKENlKSl9LFgucHJvbWlzaWZ5LmN1c3RvbT1BLFguY2FsbGJhY2tpZnk9ZnVuY3Rpb24gbmUoc2Upe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBzZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgIm9yaWdpbmFsIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUg''@;'; put 'put ''RnVuY3Rpb24nKTtmdW5jdGlvbiBDZSgpe2Zvcih2YXIgVWU9W10sSmU9MDtKZTxhcmd1bWVudHMubGVuZ3RoO0plKyspVWUucHVzaChhcmd1bWVudHNbSmVdKTt2YXIgaXQ9VWUucG9wKCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGl0KXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBsYXN0IGFy''@;'; put 'put ''Z3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbiIpO3ZhciB4ZT10aGlzLHllPWZ1bmN0aW9uKCl7cmV0dXJuIGl0LmFwcGx5KHhlLGFyZ3VtZW50cyl9O3NlLmFwcGx5KHRoaXMsVWUpLnRoZW4oZnVuY3Rpb24oS2Upe0kubmV4dFRpY2soeWUuYmluZChudWxsLG51bGwsS2UpKX0sZnVu''@;'; put 'put ''Y3Rpb24oS2Upe0kubmV4dFRpY2soYWUuYmluZChudWxsLEtlLHllKSl9KX1yZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKENlLE9iamVjdC5nZXRQcm90b3R5cGVPZihzZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENlLHAoc2UpKSxDZX19LDQ4MTooY2UsWCxiKT0+eyFmdW5jdGlv''@;'; put 'put ''bihJKXsidXNlIHN0cmljdCI7SS5leHBvcnRzLmlzX3VyaT1wLEkuZXhwb3J0cy5pc19odHRwX3VyaT1WLEkuZXhwb3J0cy5pc19odHRwc191cmk9dyxJLmV4cG9ydHMuaXNfd2ViX3VyaT1QLEkuZXhwb3J0cy5pc1VyaT1wLEkuZXhwb3J0cy5pc0h0dHBVcmk9VixJLmV4cG9ydHMuaXNIdHRw''@;'; put 'put ''c1VyaT13LEkuZXhwb3J0cy5pc1dlYlVyaT1QO3ZhciBfPWZ1bmN0aW9uKEYpe3JldHVybiBGLm1hdGNoKC8oPzooW146XC8/I10rKTopPyg/OlwvXC8oW15cLz8jXSopKT8oW14/I10qKSg/Olw/KFteI10qKSk/KD86IyguKikpPy8pfTtmdW5jdGlvbiBwKEYpe2lmKEYmJiEvW15hLXowLTlc''@;'; put 'put ''OlwvXD9cI1xbXF1cQFwhXCRcJlwnXChcKVwqXCtcLFw7XD1cLlwtXF9cflwlXS9pLnRlc3QoRikmJiEvJVteMC05YS1mXS9pLnRlc3QoRikmJiEvJVswLTlhLWZdKDo/W14wLTlhLWZdfCQpL2kudGVzdChGKSl7dmFyIFIsTixPLEssWix6PSIiLFk9IiI7aWYoTj0oUj1fKEYpKVsyXSxPPVJb''@;'; put 'put ''M10sSz1SWzRdLFo9Uls1XSwoej1SWzFdKSYmei5sZW5ndGgmJk8ubGVuZ3RoPj0wKXtpZihOJiZOLmxlbmd0aCl7aWYoMCE9PU8ubGVuZ3RoJiYhL15cLy8udGVzdChPKSlyZXR1cm59ZWxzZSBpZigvXlwvXC8vLnRlc3QoTykpcmV0dXJuO2lmKC9eW2Etel1bYS16MC05XCtcLVwuXSokLy50''@;'; put 'put ''ZXN0KHoudG9Mb3dlckNhc2UoKSkpcmV0dXJuIFkrPXorIjoiLE4mJk4ubGVuZ3RoJiYoWSs9Ii8vIitOKSxZKz1PLEsmJksubGVuZ3RoJiYoWSs9Ij8iK0spLFomJloubGVuZ3RoJiYoWSs9IiMiK1opLFl9fX1mdW5jdGlvbiBWKEYsUil7aWYocChGKSl7dmFyIHosSyxZLFcsTj0iIixPPSIi''@;'; put 'put ''LFo9IiIscT0iIjtpZihPPSh6PV8oRikpWzJdLEs9elszXSxZPXpbNF0sVz16WzVdLE49elsxXSl7aWYoUil7aWYoImh0dHBzIiE9Ti50b0xvd2VyQ2FzZSgpKXJldHVybn1lbHNlIGlmKCJodHRwIiE9Ti50b0xvd2VyQ2FzZSgpKXJldHVybjtpZihPKXJldHVybi86KFxkKykkLy50ZXN0KE8p''@;'; put 'put ''JiYoWj1PLm1hdGNoKC86KFxkKykkLylbMF0sTz1PLnJlcGxhY2UoLzpcZCskLywiIikpLHErPU4rIjoiLHErPSIvLyIrTyxaJiYocSs9WikscSs9SyxZJiZZLmxlbmd0aCYmKHErPSI/IitZKSxXJiZXLmxlbmd0aCYmKHErPSIjIitXKSxxfX19ZnVuY3Rpb24gdyhGKXtyZXR1cm4gVihGLCEw''@;'; put 'put ''KX1mdW5jdGlvbiBQKEYpe3JldHVybiBWKEYpfHx3KEYpfX0oY2U9Yi5ubWQoY2UpKX0sNTE0MDooX191bnVzZWRfd2VicGFja19tb2R1bGUsZXhwb3J0cyk9Pnt2YXIgaW5kZXhPZj1mdW5jdGlvbihjZSxYKXtpZihjZS5pbmRleE9mKXJldHVybiBjZS5pbmRleE9mKFgpO2Zvcih2YXIgYj0w''@;'; put 'put ''O2I8Y2UubGVuZ3RoO2IrKylpZihjZVtiXT09PVgpcmV0dXJuIGI7cmV0dXJuLTF9LE9iamVjdF9rZXlzPWZ1bmN0aW9uKGNlKXtpZihPYmplY3Qua2V5cylyZXR1cm4gT2JqZWN0LmtleXMoY2UpO3ZhciBYPVtdO2Zvcih2YXIgYiBpbiBjZSlYLnB1c2goYik7cmV0dXJuIFh9LGZvckVhY2g9''@;'; put 'put ''ZnVuY3Rpb24oY2UsWCl7aWYoY2UuZm9yRWFjaClyZXR1cm4gY2UuZm9yRWFjaChYKTtmb3IodmFyIGI9MDtiPGNlLmxlbmd0aDtiKyspWChjZVtiXSxiLGNlKX0sZGVmaW5lUHJvcD1mdW5jdGlvbigpe3RyeXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJfIix7fSksZnVuY3Rp''@;'; put 'put ''b24oY2UsWCxiKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoY2UsWCx7d3JpdGFibGU6ITAsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsdmFsdWU6Yn0pfX1jYXRjaHtyZXR1cm4gZnVuY3Rpb24oWCxiLEkpe1hbYl09SX19fSgpLGdsb2JhbHM9WyJBcnJheSIsIkJvb2xlYW4iLCJEYXRl''@;'; put 'put ''IiwiRXJyb3IiLCJFdmFsRXJyb3IiLCJGdW5jdGlvbiIsIkluZmluaXR5IiwiSlNPTiIsIk1hdGgiLCJOYU4iLCJOdW1iZXIiLCJPYmplY3QiLCJSYW5nZUVycm9yIiwiUmVmZXJlbmNlRXJyb3IiLCJSZWdFeHAiLCJTdHJpbmciLCJTeW50YXhFcnJvciIsIlR5cGVFcnJvciIsIlVSSUVycm9y''@;'; put 'put ''IiwiZGVjb2RlVVJJIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZW5jb2RlVVJJIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZXNjYXBlIiwiZXZhbCIsImlzRmluaXRlIiwiaXNOYU4iLCJwYXJzZUZsb2F0IiwicGFyc2VJbnQiLCJ1bmRlZmluZWQiLCJ1bmVzY2FwZSJdO2Z1bmN0aW9uIENvbnRl''@;'; put 'put ''eHQoKXt9Q29udGV4dC5wcm90b3R5cGU9e307dmFyIFNjcmlwdD1leHBvcnRzLlNjcmlwdD1mdW5jdGlvbihYKXtpZighKHRoaXMgaW5zdGFuY2VvZiBTY3JpcHQpKXJldHVybiBuZXcgU2NyaXB0KFgpO3RoaXMuY29kZT1YfTtTY3JpcHQucHJvdG90eXBlLnJ1bkluQ29udGV4dD1mdW5jdGlv''@;'; put 'put ''bihjZSl7aWYoIShjZSBpbnN0YW5jZW9mIENvbnRleHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIm5lZWRzIGEgJ2NvbnRleHQnIGFyZ3VtZW50LiIpO3ZhciBYPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO1guc3R5bGV8fChYLnN0eWxlPXt9KSxYLnN0eWxlLmRpc3BsYXk9Im5v''@;'; put 'put ''bmUiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoWCk7dmFyIGI9WC5jb250ZW50V2luZG93LEk9Yi5ldmFsLF89Yi5leGVjU2NyaXB0OyFJJiZfJiYoXy5jYWxsKGIsIm51bGwiKSxJPWIuZXZhbCksZm9yRWFjaChPYmplY3Rfa2V5cyhjZSksZnVuY3Rpb24odyl7Ylt3XT1jZVt3XX0pLGZv''@;'; put 'put ''ckVhY2goZ2xvYmFscyxmdW5jdGlvbih3KXtjZVt3XSYmKGJbd109Y2Vbd10pfSk7dmFyIHA9T2JqZWN0X2tleXMoYiksVj1JLmNhbGwoYix0aGlzLmNvZGUpO3JldHVybiBmb3JFYWNoKE9iamVjdF9rZXlzKGIpLGZ1bmN0aW9uKHcpeyh3IGluIGNlfHwtMT09PWluZGV4T2YocCx3KSkmJihj''@;'; put 'put ''ZVt3XT1iW3ddKX0pLGZvckVhY2goZ2xvYmFscyxmdW5jdGlvbih3KXt3IGluIGNlfHxkZWZpbmVQcm9wKGNlLHcsYlt3XSl9KSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKFgpLFZ9LFNjcmlwdC5wcm90b3R5cGUucnVuSW5UaGlzQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiBldmFsKHRo''@;'; put 'put ''aXMuY29kZSl9LFNjcmlwdC5wcm90b3R5cGUucnVuSW5OZXdDb250ZXh0PWZ1bmN0aW9uKGNlKXt2YXIgWD1TY3JpcHQuY3JlYXRlQ29udGV4dChjZSksYj10aGlzLnJ1bkluQ29udGV4dChYKTtyZXR1cm4gY2UmJmZvckVhY2goT2JqZWN0X2tleXMoWCksZnVuY3Rpb24oSSl7Y2VbSV09WFtJ''@;'; put 'put ''XX0pLGJ9LGZvckVhY2goT2JqZWN0X2tleXMoU2NyaXB0LnByb3RvdHlwZSksZnVuY3Rpb24oY2Upe2V4cG9ydHNbY2VdPVNjcmlwdFtjZV09ZnVuY3Rpb24oWCl7dmFyIGI9U2NyaXB0KFgpO3JldHVybiBiW2NlXS5hcHBseShiLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpKX19KSxleHBv''@;'; put 'put ''cnRzLmlzQ29udGV4dD1mdW5jdGlvbihjZSl7cmV0dXJuIGNlIGluc3RhbmNlb2YgQ29udGV4dH0sZXhwb3J0cy5jcmVhdGVTY3JpcHQ9ZnVuY3Rpb24oY2Upe3JldHVybiBleHBvcnRzLlNjcmlwdChjZSl9LGV4cG9ydHMuY3JlYXRlQ29udGV4dD1TY3JpcHQuY3JlYXRlQ29udGV4dD1mdW5j''@;'; put 'put ''dGlvbihjZSl7dmFyIFg9bmV3IENvbnRleHQ7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBjZSYmZm9yRWFjaChPYmplY3Rfa2V5cyhjZSksZnVuY3Rpb24oYil7WFtiXT1jZVtiXX0pLFh9fSw2NDMwOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNDAyOSksXz1iKDMwODMpLHA9Yig1''@;'; put 'put ''NTU5KSxWPWIoNzM3OSksdz1iKDcyOTYpLFA9VigiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyIpLEY9Yig2NDEwKSgpLFI9dHlwZW9mIGdsb2JhbFRoaXM+InUiP2IuZzpnbG9iYWxUaGlzLHo9XygpLE49VigiU3RyaW5nLnByb3RvdHlwZS5zbGljZSIpLE89T2JqZWN0LmdldFByb3RvdHlw''@;'; put 'put ''ZU9mLEs9VigiQXJyYXkucHJvdG90eXBlLmluZGV4T2YiLCEwKXx8ZnVuY3Rpb24oZWUsSil7Zm9yKHZhciByZT0wO3JlPGVlLmxlbmd0aDtyZSs9MSlpZihlZVtyZV09PT1KKXJldHVybiByZTtyZXR1cm4tMX0sWj17X19wcm90b19fOm51bGx9O0koeixGJiZ3JiZPP2Z1bmN0aW9uKHEpe3Zh''@;'; put 'put ''ciBlZT1uZXcgUltxXTtpZihTeW1ib2wudG9TdHJpbmdUYWcgaW4gZWUpe3ZhciBKPU8oZWUpLHJlPXcoSixTeW1ib2wudG9TdHJpbmdUYWcpO2lmKCFyZSl7dmFyIGllPU8oSik7cmU9dyhpZSxTeW1ib2wudG9TdHJpbmdUYWcpfVpbIiQiK3FdPXAocmUuZ2V0KX19OmZ1bmN0aW9uKHEpe3Zh''@;'; put 'put ''ciBlZT1uZXcgUltxXSxKPWVlLnNsaWNlfHxlZS5zZXQ7SiYmKFpbIiQiK3FdPXAoSikpfSksY2UuZXhwb3J0cz1mdW5jdGlvbihlZSl7aWYoIWVlfHwib2JqZWN0IiE9dHlwZW9mIGVlKXJldHVybiExO2lmKCFGKXt2YXIgSj1OKFAoZWUpLDgsLTEpO3JldHVybiBLKHosSik+LTE/SjoiT2Jq''@;'; put 'put ''ZWN0Ij09PUomJmZ1bmN0aW9uKGVlKXt2YXIgSj0hMTtyZXR1cm4gSShaLGZ1bmN0aW9uKHJlLGllKXtpZighSil0cnl7cmUoZWUpLEo9TihpZSwxKX1jYXRjaHt9fSksSn0oZWUpfXJldHVybiB3P2Z1bmN0aW9uKGVlKXt2YXIgSj0hMTtyZXR1cm4gSShaLGZ1bmN0aW9uKHJlLGllKXtpZigh''@;'; put 'put ''Sil0cnl7IiQiK3JlKGVlKT09PWllJiYoSj1OKGllLDEpKX1jYXRjaHt9fSksSn0oZWUpOm51bGx9fSw4NjQ2OigpPT57fSw5NTA6KCk9Pnt9LDY2MDE6KCk9Pnt9LDkyMTQ6KCk9Pnt9LDY0MTk6KCk9Pnt9LDYzNTM6KCk9Pnt9LDg2MjM6KCk9Pnt9LDc3NDg6KCk9Pnt9LDU1Njg6KCk9Pnt9''@;'; put 'put ''LDU0NDM6KCk9Pnt9LDQxMjk6KCk9Pnt9LDY2MTk6KCk9Pnt9LDcxMDg6KCk9Pnt9LDIzNjE6KCk9Pnt9LDQ2MTY6KCk9Pnt9LDgzNzM6KCk9Pnt9LDMwODM6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig5OTA4KSxfPXR5cGVvZiBnbG9iYWxUaGlzPiJ1Ij9iLmc6Z2xvYmFsVGhp''@;'; put 'put ''cztjZS5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciBWPVtdLHc9MDt3PEkubGVuZ3RoO3crKykiZnVuY3Rpb24iPT10eXBlb2YgX1tJW3ddXSYmKFZbVi5sZW5ndGhdPUlbd10pO3JldHVybiBWfX0sNzIxODooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQxNTUpLF89Yig4NzY0''@;'; put 'put ''KS5CdWZmZXIscD1iKDUxMDgpO2Z1bmN0aW9uIFYoSHQsanQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBIdC5hcHBseShqdCxhcmd1bWVudHMpfX1jb25zdHt0b1N0cmluZzp3fT1PYmplY3QucHJvdG90eXBlLHtnZXRQcm90b3R5cGVPZjpQfT1PYmplY3Qse2l0ZXJhdG9yOkYsdG9TdHJp''@;'; put 'put ''bmdUYWc6Un09U3ltYm9sLHo9KEh0PT5qdD0+e2NvbnN0IHBuPXcuY2FsbChqdCk7cmV0dXJuIEh0W3BuXXx8KEh0W3BuXT1wbi5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpKX0pKE9iamVjdC5jcmVhdGUobnVsbCkpLE49SHQ9PihIdD1IdC50b0xvd2VyQ2FzZSgpLGp0PT56KGp0KT09PUh0''@;'; put 'put ''KSxPPUh0PT5qdD0+dHlwZW9mIGp0PT09SHQse2lzQXJyYXk6S309QXJyYXksWj1PKCJ1bmRlZmluZWQiKTtmdW5jdGlvbiBZKEh0KXtyZXR1cm4gbnVsbCE9PUh0JiYhWihIdCkmJm51bGwhPT1IdC5jb25zdHJ1Y3RvciYmIVooSHQuY29uc3RydWN0b3IpJiZKKEh0LmNvbnN0cnVjdG9yLmlz''@;'; put 'put ''QnVmZmVyKSYmSHQuY29uc3RydWN0b3IuaXNCdWZmZXIoSHQpfWNvbnN0IFc9TigiQXJyYXlCdWZmZXIiKSxlZT1PKCJzdHJpbmciKSxKPU8oImZ1bmN0aW9uIikscmU9TygibnVtYmVyIiksaWU9SHQ9Pm51bGwhPT1IdCYmIm9iamVjdCI9PXR5cGVvZiBIdCxnZT1IdD0+e2lmKCJvYmplY3Qi''@;'; put 'put ''IT09eihIdCkpcmV0dXJuITE7Y29uc3QganQ9UChIdCk7cmV0dXJuIShudWxsIT09anQmJmp0IT09T2JqZWN0LnByb3RvdHlwZSYmbnVsbCE9PU9iamVjdC5nZXRQcm90b3R5cGVPZihqdCl8fFIgaW4gSHR8fEYgaW4gSHQpfSxUZT1OKCJEYXRlIiksTWU9TigiRmlsZSIpLFplPU4oIkJsb2Ii''@;'; put 'put ''KSxCPU4oIkZpbGVMaXN0IikseD1OKCJVUkxTZWFyY2hQYXJhbXMiKSxbQyxULEgsal09WyJSZWFkYWJsZVN0cmVhbSIsIlJlcXVlc3QiLCJSZXNwb25zZSIsIkhlYWRlcnMiXS5tYXAoTik7ZnVuY3Rpb24gbShIdCxqdCx7YWxsT3duS2V5czpwbj0hMX09e30pe2lmKG51bGw9PT1IdHx8dHlw''@;'; put 'put ''ZW9mIEh0PiJ1IilyZXR1cm47bGV0IFZ0LERuO2lmKCJvYmplY3QiIT10eXBlb2YgSHQmJihIdD1bSHRdKSxLKEh0KSlmb3IoVnQ9MCxEbj1IdC5sZW5ndGg7VnQ8RG47VnQrKylqdC5jYWxsKG51bGwsSHRbVnRdLFZ0LEh0KTtlbHNle2lmKFkoSHQpKXJldHVybjtjb25zdCBtcj1wbj9PYmpl''@;'; put 'put ''Y3QuZ2V0T3duUHJvcGVydHlOYW1lcyhIdCk6T2JqZWN0LmtleXMoSHQpLE1uPW1yLmxlbmd0aDtsZXQgam47Zm9yKFZ0PTA7VnQ8TW47VnQrKylqbj1tcltWdF0sanQuY2FsbChudWxsLEh0W2puXSxqbixIdCl9fWZ1bmN0aW9uIEEoSHQsanQpe2lmKFkoSHQpKXJldHVybiBudWxsO2p0PWp0''@;'; put 'put ''LnRvTG93ZXJDYXNlKCk7Y29uc3QgcG49T2JqZWN0LmtleXMoSHQpO2xldCBEbixWdD1wbi5sZW5ndGg7Zm9yKDtWdC0tID4wOylpZihEbj1wbltWdF0sanQ9PT1Ebi50b0xvd2VyQ2FzZSgpKXJldHVybiBEbjtyZXR1cm4gbnVsbH1jb25zdCBhZT10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xv''@;'; put 'put ''YmFsVGhpczp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6Yi5nLG5lPUh0PT4hWihIdCkmJkh0IT09YWUsS2U9KEh0PT5qdD0+SHQmJmp0IGluc3RhbmNlb2YgSHQpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmUChVaW50OEFycmF5KSksSGU9TigiSFRNTEZv''@;'; put 'put ''cm1FbGVtZW50IiksUmU9KCh7aGFzT3duUHJvcGVydHk6SHR9KT0+KGp0LHBuKT0+SHQuY2FsbChqdCxwbikpKE9iamVjdC5wcm90b3R5cGUpLFZlPU4oIlJlZ0V4cCIpLEFlPShIdCxqdCk9Pntjb25zdCBwbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhIdCksVnQ9e307bShw''@;'; put 'put ''biwoRG4sbXIpPT57bGV0IE1uOyExIT09KE1uPWp0KERuLG1yLEh0KSkmJihWdFttcl09TW58fERuKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEh0LFZ0KX0sU3Q9TigiQXN5bmNGdW5jdGlvbiIpLHV0PShIdD0iZnVuY3Rpb24iPT10eXBlb2Ygc2V0SW1tZWRpYXRlLGp0PUooYWUucG9z''@;'; put 'put ''dE1lc3NhZ2UpLEh0P3NldEltbWVkaWF0ZTpqdD8ocG49YGF4aW9zQCR7TWF0aC5yYW5kb20oKX1gLFZ0PVtdLGFlLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCh7c291cmNlOkRuLGRhdGE6bXJ9KT0+e0RuPT09YWUmJm1yPT09cG4mJlZ0Lmxlbmd0aCYmVnQuc2hpZnQoKSgpfSwhMSks''@;'; put 'put ''RG49PntWdC5wdXNoKERuKSxhZS5wb3N0TWVzc2FnZShwbiwiKiIpfSk6cG49PnNldFRpbWVvdXQocG4pKSxYZT10eXBlb2YgcXVldWVNaWNyb3Rhc2s8InUiP3F1ZXVlTWljcm90YXNrLmJpbmQoYWUpOnR5cGVvZiBJPCJ1IiYmSS5uZXh0VGlja3x8dXQ7dmFyIEh0LGp0LHBuLFZ0LEllPXtp''@;'; put 'put ''c0FycmF5OkssaXNBcnJheUJ1ZmZlcjpXLGlzQnVmZmVyOlksaXNGb3JtRGF0YTpIdD0+e2xldCBqdDtyZXR1cm4gSHQmJigiZnVuY3Rpb24iPT10eXBlb2YgRm9ybURhdGEmJkh0IGluc3RhbmNlb2YgRm9ybURhdGF8fEooSHQuYXBwZW5kKSYmKCJmb3JtZGF0YSI9PT0oanQ9eihIdCkpfHwi''@;'; put 'put ''b2JqZWN0Ij09PWp0JiZKKEh0LnRvU3RyaW5nKSYmIltvYmplY3QgRm9ybURhdGFdIj09PUh0LnRvU3RyaW5nKCkpKX0saXNBcnJheUJ1ZmZlclZpZXc6ZnVuY3Rpb24gcShIdCl7bGV0IGp0O3JldHVybiBqdD10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/QXJy''@;'; put 'put ''YXlCdWZmZXIuaXNWaWV3KEh0KTpIdCYmSHQuYnVmZmVyJiZXKEh0LmJ1ZmZlciksanR9LGlzU3RyaW5nOmVlLGlzTnVtYmVyOnJlLGlzQm9vbGVhbjpIdD0+ITA9PT1IdHx8ITE9PT1IdCxpc09iamVjdDppZSxpc1BsYWluT2JqZWN0OmdlLGlzRW1wdHlPYmplY3Q6SHQ9PntpZighaWUoSHQp''@;'; put 'put ''fHxZKEh0KSlyZXR1cm4hMTt0cnl7cmV0dXJuIDA9PT1PYmplY3Qua2V5cyhIdCkubGVuZ3RoJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoSHQpPT09T2JqZWN0LnByb3RvdHlwZX1jYXRjaHtyZXR1cm4hMX19LGlzUmVhZGFibGVTdHJlYW06Qyxpc1JlcXVlc3Q6VCxpc1Jlc3BvbnNlOkgsaXNI''@;'; put 'put ''ZWFkZXJzOmosaXNVbmRlZmluZWQ6Wixpc0RhdGU6VGUsaXNGaWxlOk1lLGlzQmxvYjpaZSxpc1JlZ0V4cDpWZSxpc0Z1bmN0aW9uOkosaXNTdHJlYW06SHQ9PmllKEh0KSYmSihIdC5waXBlKSxpc1VSTFNlYXJjaFBhcmFtczp4LGlzVHlwZWRBcnJheTpLZSxpc0ZpbGVMaXN0OkIsZm9yRWFj''@;'; put 'put ''aDptLG1lcmdlOmZ1bmN0aW9uIHNlKCl7Y29uc3R7Y2FzZWxlc3M6SHQsc2tpcFVuZGVmaW5lZDpqdH09bmUodGhpcykmJnRoaXN8fHt9LHBuPXt9LFZ0PShEbixtcik9Pntjb25zdCBNbj1IdCYmQShwbixtcil8fG1yO2dlKHBuW01uXSkmJmdlKERuKT9wbltNbl09c2UocG5bTW5dLERuKTpn''@;'; put 'put ''ZShEbik/cG5bTW5dPXNlKHt9LERuKTpLKERuKT9wbltNbl09RG4uc2xpY2UoKTooIWp0fHwhWihEbikpJiYocG5bTW5dPURuKX07Zm9yKGxldCBEbj0wLG1yPWFyZ3VtZW50cy5sZW5ndGg7RG48bXI7RG4rKylhcmd1bWVudHNbRG5dJiZtKGFyZ3VtZW50c1tEbl0sVnQpO3JldHVybiBwbn0s''@;'; put 'put ''ZXh0ZW5kOihIdCxqdCxwbix7YWxsT3duS2V5czpWdH09e30pPT4obShqdCwoRG4sbXIpPT57SHRbbXJdPXBuJiZKKERuKT9WKERuLHBuKTpEbn0se2FsbE93bktleXM6VnR9KSxIdCksdHJpbTpIdD0+SHQudHJpbT9IdC50cmltKCk6SHQucmVwbGFjZSgvXltcc1x1RkVGRlx4QTBdK3xbXHNc''@;'; put 'put ''dUZFRkZceEEwXSskL2csIiIpLHN0cmlwQk9NOkh0PT4oNjUyNzk9PT1IdC5jaGFyQ29kZUF0KDApJiYoSHQ9SHQuc2xpY2UoMSkpLEh0KSxpbmhlcml0czooSHQsanQscG4sVnQpPT57SHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoanQucHJvdG90eXBlLFZ0KSxIdC5wcm90b3R5cGUuY29u''@;'; put 'put ''c3RydWN0b3I9SHQsT2JqZWN0LmRlZmluZVByb3BlcnR5KEh0LCJzdXBlciIse3ZhbHVlOmp0LnByb3RvdHlwZX0pLHBuJiZPYmplY3QuYXNzaWduKEh0LnByb3RvdHlwZSxwbil9LHRvRmxhdE9iamVjdDooSHQsanQscG4sVnQpPT57bGV0IERuLG1yLE1uO2NvbnN0IGpuPXt9O2lmKGp0PWp0''@;'; put 'put ''fHx7fSxudWxsPT1IdClyZXR1cm4ganQ7ZG97Zm9yKERuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEh0KSxtcj1Ebi5sZW5ndGg7bXItLSA+MDspTW49RG5bbXJdLCghVnR8fFZ0KE1uLEh0LGp0KSkmJiFqbltNbl0mJihqdFtNbl09SHRbTW5dLGpuW01uXT0hMCk7SHQ9ITEhPT1wbiYm''@;'; put 'put ''UChIdCl9d2hpbGUoSHQmJighcG58fHBuKEh0LGp0KSkmJkh0IT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIGp0fSxraW5kT2Y6eixraW5kT2ZUZXN0Ok4sZW5kc1dpdGg6KEh0LGp0LHBuKT0+e0h0PVN0cmluZyhIdCksKHZvaWQgMD09PXBufHxwbj5IdC5sZW5ndGgpJiYocG49SHQubGVu''@;'; put 'put ''Z3RoKTtjb25zdCBWdD1IdC5pbmRleE9mKGp0LHBuLT1qdC5sZW5ndGgpO3JldHVybi0xIT09VnQmJlZ0PT09cG59LHRvQXJyYXk6SHQ9PntpZighSHQpcmV0dXJuIG51bGw7aWYoSyhIdCkpcmV0dXJuIEh0O2xldCBqdD1IdC5sZW5ndGg7aWYoIXJlKGp0KSlyZXR1cm4gbnVsbDtjb25zdCBw''@;'; put 'put ''bj1uZXcgQXJyYXkoanQpO2Zvcig7anQtLSA+MDspcG5banRdPUh0W2p0XTtyZXR1cm4gcG59LGZvckVhY2hFbnRyeTooSHQsanQpPT57Y29uc3QgVnQ9KEh0JiZIdFtGXSkuY2FsbChIdCk7bGV0IERuO2Zvcig7KERuPVZ0Lm5leHQoKSkmJiFEbi5kb25lOyl7Y29uc3QgbXI9RG4udmFsdWU7''@;'; put 'put ''anQuY2FsbChIdCxtclswXSxtclsxXSl9fSxtYXRjaEFsbDooSHQsanQpPT57bGV0IHBuO2NvbnN0IFZ0PVtdO2Zvcig7bnVsbCE9PShwbj1IdC5leGVjKGp0KSk7KVZ0LnB1c2gocG4pO3JldHVybiBWdH0saXNIVE1MRm9ybTpIZSxoYXNPd25Qcm9wZXJ0eTpSZSxoYXNPd25Qcm9wOlJlLHJl''@;'; put 'put ''ZHVjZURlc2NyaXB0b3JzOkFlLGZyZWV6ZU1ldGhvZHM6SHQ9PntBZShIdCwoanQscG4pPT57aWYoSihIdCkmJi0xIT09WyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKHBuKSlyZXR1cm4hMTtpZihKKEh0W3BuXSkpe2lmKGp0LmVudW1lcmFibGU9ITEsIndyaXRhYmxl''@;'; put 'put ''ImluIGp0KXJldHVybiB2b2lkKGp0LndyaXRhYmxlPSExKTtqdC5zZXR8fChqdC5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgJyIrcG4rIiciKX0pfX0pfSx0b09iamVjdFNldDooSHQsanQpPT57Y29uc3QgcG49e30sVnQ9RG49PntEbi5m''@;'; put 'put ''b3JFYWNoKG1yPT57cG5bbXJdPSEwfSl9O3JldHVybiBLKEh0KT9WdChIdCk6VnQoU3RyaW5nKEh0KS5zcGxpdChqdCkpLHBufSx0b0NhbWVsQ2FzZTpIdD0+SHQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cc10oW2EtelxkXSkoXHcqKS9nLGZ1bmN0aW9uKHBuLFZ0LERuKXtyZXR1cm4g''@;'; put 'put ''VnQudG9VcHBlckNhc2UoKStEbn0pLG5vb3A6KCk9Pnt9LHRvRmluaXRlTnVtYmVyOihIdCxqdCk9Pm51bGwhPUh0JiZOdW1iZXIuaXNGaW5pdGUoSHQ9K0h0KT9IdDpqdCxmaW5kS2V5OkEsZ2xvYmFsOmFlLGlzQ29udGV4dERlZmluZWQ6bmUsaXNTcGVjQ29tcGxpYW50Rm9ybTpmdW5jdGlv''@;'; put 'put ''biBzbihIdCl7cmV0dXJuISEoSHQmJkooSHQuYXBwZW5kKSYmIkZvcm1EYXRhIj09PUh0W1JdJiZIdFtGXSl9LHRvSlNPTk9iamVjdDpIdD0+e2NvbnN0IGp0PW5ldyBBcnJheSgxMCkscG49KFZ0LERuKT0+e2lmKGllKFZ0KSl7aWYoanQuaW5kZXhPZihWdCk+PTApcmV0dXJuO2lmKFkoVnQp''@;'; put 'put ''KXJldHVybiBWdDtpZighKCJ0b0pTT04iaW4gVnQpKXtqdFtEbl09VnQ7Y29uc3QgbXI9SyhWdCk/W106e307cmV0dXJuIG0oVnQsKE1uLGpuKT0+e2NvbnN0IEVhPXBuKE1uLERuKzEpOyFaKEVhKSYmKG1yW2puXT1FYSl9KSxqdFtEbl09dm9pZCAwLG1yfX1yZXR1cm4gVnR9O3JldHVybiBw''@;'; put 'put ''bihIdCwwKX0saXNBc3luY0ZuOlN0LGlzVGhlbmFibGU6SHQ9Pkh0JiYoaWUoSHQpfHxKKEh0KSkmJkooSHQudGhlbikmJkooSHQuY2F0Y2gpLHNldEltbWVkaWF0ZTp1dCxhc2FwOlhlLGlzSXRlcmFibGU6SHQ9Pm51bGwhPUh0JiZKKEh0W0ZdKX07ZnVuY3Rpb24gYXQoSHQsanQscG4sVnQs''@;'; put 'put ''RG4pe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPShuZXcgRXJyb3IpLnN0YWNrLHRoaXMubWVzc2FnZT1IdCx0aGlzLm5hbWU9IkF4aW9zRXJyb3IiLGp0JiYo''@;'; put 'put ''dGhpcy5jb2RlPWp0KSxwbiYmKHRoaXMuY29uZmlnPXBuKSxWdCYmKHRoaXMucmVxdWVzdD1WdCksRG4mJih0aGlzLnJlc3BvbnNlPURuLHRoaXMuc3RhdHVzPURuLnN0YXR1cz9Ebi5zdGF0dXM6bnVsbCl9SWUuaW5oZXJpdHMoYXQsRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybntt''@;'; put 'put ''ZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixz''@;'; put 'put ''dGFjazp0aGlzLnN0YWNrLGNvbmZpZzpJZS50b0pTT05PYmplY3QodGhpcy5jb25maWcpLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnN0YXR1c319fSk7Y29uc3QgdW49YXQucHJvdG90eXBlLEl0PXt9O2Z1bmN0aW9uIHJpKEh0KXtyZXR1cm4gSWUuaXNQbGFpbk9iamVjdChIdCl8fEll''@;'; put 'put ''LmlzQXJyYXkoSHQpfWZ1bmN0aW9uIGFuKEh0KXtyZXR1cm4gSWUuZW5kc1dpdGgoSHQsIltdIik/SHQuc2xpY2UoMCwtMik6SHR9ZnVuY3Rpb24gbG4oSHQsanQscG4pe3JldHVybiBIdD9IdC5jb25jYXQoanQpLm1hcChmdW5jdGlvbihEbixtcil7cmV0dXJuIERuPWFuKERuKSwhcG4mJm1y''@;'; put 'put ''PyJbIitEbisiXSI6RG59KS5qb2luKHBuPyIuIjoiIik6anR9WyJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiRUNPTk5BQk9SVEVEIiwiRVRJTUVET1VUIiwiRVJSX05FVFdPUksiLCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTIiwiRVJSX0RFUFJFQ0FURUQiLCJF''@;'; put 'put ''UlJfQkFEX1JFU1BPTlNFIiwiRVJSX0JBRF9SRVFVRVNUIiwiRVJSX0NBTkNFTEVEIiwiRVJSX05PVF9TVVBQT1JUIiwiRVJSX0lOVkFMSURfVVJMIl0uZm9yRWFjaChIdD0+e0l0W0h0XT17dmFsdWU6SHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYXQsSXQpLE9iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eSh1biwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KSxhdC5mcm9tPShIdCxqdCxwbixWdCxEbixtcik9Pntjb25zdCBNbj1PYmplY3QuY3JlYXRlKHVuKTtyZXR1cm4gSWUudG9GbGF0T2JqZWN0KEh0LE1uLGZ1bmN0aW9uKFlpKXtyZXR1cm4gWWkhPT1FcnJvci5wcm90b3R5cGV9''@;'; put 'put ''LFdpPT4iaXNBeGlvc0Vycm9yIiE9PVdpKSxhdC5jYWxsKE1uLEh0JiZIdC5tZXNzYWdlP0h0Lm1lc3NhZ2U6IkVycm9yIixudWxsPT1qdCYmSHQ/SHQuY29kZTpqdCxwbixWdCxEbiksSHQmJm51bGw9PU1uLmNhdXNlJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoTW4sImNhdXNlIix7dmFsdWU6''@;'; put 'put ''SHQsY29uZmlndXJhYmxlOiEwfSksTW4ubmFtZT1IdCYmSHQubmFtZXx8IkVycm9yIixtciYmT2JqZWN0LmFzc2lnbihNbixtciksTW59O2NvbnN0IGhuPUllLnRvRmxhdE9iamVjdChJZSx7fSxudWxsLGZ1bmN0aW9uKGp0KXtyZXR1cm4vXmlzW0EtWl0vLnRlc3QoanQpfSk7ZnVuY3Rpb24g''@;'; put 'put ''aHQoSHQsanQscG4pe2lmKCFJZS5pc09iamVjdChIdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Iik7anQ9anR8fG5ldyBGb3JtRGF0YTtjb25zdCBWdD0ocG49SWUudG9GbGF0T2JqZWN0KHBuLHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczoh''@;'; put 'put ''MX0sITEsZnVuY3Rpb24oT2EsV2Epe3JldHVybiFJZS5pc1VuZGVmaW5lZChXYVtPYV0pfSkpLm1ldGFUb2tlbnMsRG49cG4udmlzaXRvcnx8WWksbXI9cG4uZG90cyxNbj1wbi5pbmRleGVzLEVhPShwbi5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZJZS5pc1NwZWNDb21wbGlhbnRG''@;'; put 'put ''b3JtKGp0KTtpZighSWUuaXNGdW5jdGlvbihEbikpdGhyb3cgbmV3IFR5cGVFcnJvcigidmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTtmdW5jdGlvbiBXaShCaSl7aWYobnVsbD09PUJpKXJldHVybiIiO2lmKEllLmlzRGF0ZShCaSkpcmV0dXJuIEJpLnRvSVNPU3RyaW5nKCk7aWYoSWUu''@;'; put 'put ''aXNCb29sZWFuKEJpKSlyZXR1cm4gQmkudG9TdHJpbmcoKTtpZighRWEmJkllLmlzQmxvYihCaSkpdGhyb3cgbmV3IGF0KCJCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLiIpO3JldHVybiBJZS5pc0FycmF5QnVmZmVyKEJpKXx8SWUuaXNUeXBlZEFycmF5KEJp''@;'; put 'put ''KT9FYSYmImZ1bmN0aW9uIj09dHlwZW9mIEJsb2I/bmV3IEJsb2IoW0JpXSk6Xy5mcm9tKEJpKTpCaX1mdW5jdGlvbiBZaShCaSxPYSxXYSl7bGV0IFhsPUJpO2lmKEJpJiYhV2EmJiJvYmplY3QiPT10eXBlb2YgQmkpaWYoSWUuZW5kc1dpdGgoT2EsInt9IikpT2E9VnQ/T2E6T2Euc2xpY2Uo''@;'; put 'put ''MCwtMiksQmk9SlNPTi5zdHJpbmdpZnkoQmkpO2Vsc2UgaWYoSWUuaXNBcnJheShCaSkmJmZ1bmN0aW9uIG5pKEh0KXtyZXR1cm4gSWUuaXNBcnJheShIdCkmJiFIdC5zb21lKHJpKX0oQmkpfHwoSWUuaXNGaWxlTGlzdChCaSl8fEllLmVuZHNXaXRoKE9hLCJbXSIpKSYmKFhsPUllLnRvQXJy''@;'; put 'put ''YXkoQmkpKSlyZXR1cm4gT2E9YW4oT2EpLFhsLmZvckVhY2goZnVuY3Rpb24oQ2MsZmMpeyFJZS5pc1VuZGVmaW5lZChDYykmJm51bGwhPT1DYyYmanQuYXBwZW5kKCEwPT09TW4/bG4oW09hXSxmYyxtcik6bnVsbD09PU1uP09hOk9hKyJbXSIsV2koQ2MpKX0pLCExO3JldHVybiEhcmkoQmkp''@;'; put 'put ''fHwoanQuYXBwZW5kKGxuKFdhLE9hLG1yKSxXaShCaSkpLCExKX1jb25zdCAkYT1bXSxzbD1PYmplY3QuYXNzaWduKGhuLHtkZWZhdWx0VmlzaXRvcjpZaSxjb252ZXJ0VmFsdWU6V2ksaXNWaXNpdGFibGU6cml9KTtpZighSWUuaXNPYmplY3QoSHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImRh''@;'; put 'put ''dGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gZnVuY3Rpb24gbGwoQmksT2Epe2lmKCFJZS5pc1VuZGVmaW5lZChCaSkpe2lmKC0xIT09JGEuaW5kZXhPZihCaSkpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK09hLmpvaW4oIi4iKSk7JGEucHVzaChC''@;'; put 'put ''aSksSWUuZm9yRWFjaChCaSxmdW5jdGlvbihYbCxGbyl7ITA9PT0oIShJZS5pc1VuZGVmaW5lZChYbCl8fG51bGw9PT1YbCkmJkRuLmNhbGwoanQsWGwsSWUuaXNTdHJpbmcoRm8pP0ZvLnRyaW0oKTpGbyxPYSxzbCkpJiZsbChYbCxPYT9PYS5jb25jYXQoRm8pOltGb10pfSksJGEucG9wKCl9''@;'; put 'put ''fShIdCksanR9ZnVuY3Rpb24gUnIoSHQpe2NvbnN0IGp0PXsiISI6IiUyMSIsIiciOiIlMjciLCIoIjoiJTI4IiwiKSI6IiUyOSIsIn4iOiIlN0UiLCIlMjAiOiIrIiwiJTAwIjoiXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEh0KS5yZXBsYWNlKC9bIScoKX5dfCUyMHwlMDAvZyxm''@;'; put 'put ''dW5jdGlvbihWdCl7cmV0dXJuIGp0W1Z0XX0pfWZ1bmN0aW9uIEJ0KEh0LGp0KXt0aGlzLl9wYWlycz1bXSxIdCYmaHQoSHQsdGhpcyxqdCl9Y29uc3QgQXQ9QnQucHJvdG90eXBlO2Z1bmN0aW9uIEZuKEh0KXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEh0KS5yZXBsYWNlKC8lM0EvZ2ks''@;'; put 'put ''IjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIil9ZnVuY3Rpb24gc3QoSHQsanQscG4pe2lmKCFqdClyZXR1cm4gSHQ7Y29uc3QgVnQ9cG4mJnBuLmVuY29kZXx8Rm47SWUuaXNGdW5jdGlvbihwbikmJihwbj17c2VyaWFsaXpl''@;'; put 'put ''OnBufSk7Y29uc3QgRG49cG4mJnBuLnNlcmlhbGl6ZTtsZXQgbXI7aWYobXI9RG4/RG4oanQscG4pOkllLmlzVVJMU2VhcmNoUGFyYW1zKGp0KT9qdC50b1N0cmluZygpOm5ldyBCdChqdCxwbikudG9TdHJpbmcoVnQpLG1yKXtjb25zdCBNbj1IdC5pbmRleE9mKCIjIik7LTEhPT1NbiYmKEh0''@;'; put 'put ''PUh0LnNsaWNlKDAsTW4pKSxIdCs9KC0xPT09SHQuaW5kZXhPZigiPyIpPyI/IjoiJiIpK21yfXJldHVybiBIdH1BdC5hcHBlbmQ9ZnVuY3Rpb24oanQscG4pe3RoaXMuX3BhaXJzLnB1c2goW2p0LHBuXSl9LEF0LnRvU3RyaW5nPWZ1bmN0aW9uKGp0KXtjb25zdCBwbj1qdD9mdW5jdGlvbihW''@;'; put 'put ''dCl7cmV0dXJuIGp0LmNhbGwodGhpcyxWdCxScil9OlJyO3JldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24oRG4pe3JldHVybiBwbihEblswXSkrIj0iK3BuKERuWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIFFyPWNsYXNzIFp0e2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11''@;'; put 'put ''c2UoanQscG4sVnQpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDpqdCxyZWplY3RlZDpwbixzeW5jaHJvbm91czohIVZ0JiZWdC5zeW5jaHJvbm91cyxydW5XaGVuOlZ0P1Z0LnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QoanQpe3RoaXMu''@;'; put 'put ''aGFuZGxlcnNbanRdJiYodGhpcy5oYW5kbGVyc1tqdF09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaChqdCl7SWUuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKFZ0KXtudWxsIT09VnQmJmp0KFZ0KX0pfX0sWWU9e3NpbGVudEpT''@;'; put 'put ''T05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9LE10PXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOnR5cGVvZiBVUkxTZWFyY2hQYXJhbXM8InUiP1VSTFNlYXJjaFBhcmFtczpCdCxGb3JtRGF0YTp0eXBlb2YgRm9y''@;'; put 'put ''bURhdGE8InUiP0Zvcm1EYXRhOm51bGwsQmxvYjp0eXBlb2YgQmxvYjwidSI/QmxvYjpudWxsfSxwcm90b2NvbHM6WyJodHRwIiwiaHR0cHMiLCJmaWxlIiwiYmxvYiIsInVybCIsImRhdGEiXX07Y29uc3QgWm49dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwidSIsbm49Im9i''@;'; put 'put ''amVjdCI9PXR5cGVvZiBuYXZpZ2F0b3ImJm5hdmlnYXRvcnx8dm9pZCAwLFd0PVpuJiYoIW5ufHxbIlJlYWN0TmF0aXZlIiwiTmF0aXZlU2NyaXB0IiwiTlMiXS5pbmRleE9mKG5uLnByb2R1Y3QpPDApLGRpPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBX''@;'; put 'put ''b3JrZXJHbG9iYWxTY29wZSYmImZ1bmN0aW9uIj09dHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cyxkbj1abiYmd2luZG93LmxvY2F0aW9uLmhyZWZ8fCJodHRwOi8vbG9jYWxob3N0Ijt2YXIgcGk9ey4uLk9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLGhhc0Jyb3dzZXJFbnY6Wm4saGFz''@;'; put 'put ''U3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OmRpLGhhc1N0YW5kYXJkQnJvd3NlckVudjpXdCxuYXZpZ2F0b3I6bm4sb3JpZ2luOmRufSksLi4uTXR9O2Z1bmN0aW9uIF9pKEh0KXtmdW5jdGlvbiBqdChwbixWdCxEbixtcil7bGV0IE1uPXBuW21yKytdO2lmKCJfX3Byb3RvX18iPT09TW4p''@;'; put 'put ''cmV0dXJuITA7Y29uc3Qgam49TnVtYmVyLmlzRmluaXRlKCtNbiksRWE9bXI+PXBuLmxlbmd0aDtyZXR1cm4gTW49IU1uJiZJZS5pc0FycmF5KERuKT9Ebi5sZW5ndGg6TW4sRWE/KERuW01uXT1JZS5oYXNPd25Qcm9wKERuLE1uKT9bRG5bTW5dLFZ0XTpWdCwham4pOigoIURuW01uXXx8IUll''@;'; put 'put ''LmlzT2JqZWN0KERuW01uXSkpJiYoRG5bTW5dPVtdKSxqdChwbixWdCxEbltNbl0sbXIpJiZJZS5pc0FycmF5KERuW01uXSkmJihEbltNbl09ZnVuY3Rpb24gY2EoSHQpe2NvbnN0IGp0PXt9LHBuPU9iamVjdC5rZXlzKEh0KTtsZXQgVnQ7Y29uc3QgRG49cG4ubGVuZ3RoO2xldCBtcjtmb3Io''@;'; put 'put ''VnQ9MDtWdDxEbjtWdCsrKW1yPXBuW1Z0XSxqdFttcl09SHRbbXJdO3JldHVybiBqdH0oRG5bTW5dKSksIWpuKX1pZihJZS5pc0Zvcm1EYXRhKEh0KSYmSWUuaXNGdW5jdGlvbihIdC5lbnRyaWVzKSl7Y29uc3QgcG49e307cmV0dXJuIEllLmZvckVhY2hFbnRyeShIdCwoVnQsRG4pPT57anQo''@;'; put 'put ''ZnVuY3Rpb24gdG4oSHQpe3JldHVybiBJZS5tYXRjaEFsbCgvXHcrfFxbKFx3KildL2csSHQpLm1hcChqdD0+IltdIj09PWp0WzBdPyIiOmp0WzFdfHxqdFswXSl9KFZ0KSxEbixwbiwwKX0pLHBufXJldHVybiBudWxsfWNvbnN0IFhpPXt0cmFuc2l0aW9uYWw6WWUsYWRhcHRlcjpbInhociIs''@;'; put 'put ''Imh0dHAiLCJmZXRjaCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKGp0LHBuKXtjb25zdCBWdD1wbi5nZXRDb250ZW50VHlwZSgpfHwiIixEbj1WdC5pbmRleE9mKCJhcHBsaWNhdGlvbi9qc29uIik+LTEsbXI9SWUuaXNPYmplY3QoanQpO2lmKG1yJiZJZS5pc0hUTUxGb3JtKGp0KSYm''@;'; put 'put ''KGp0PW5ldyBGb3JtRGF0YShqdCkpLEllLmlzRm9ybURhdGEoanQpKXJldHVybiBEbj9KU09OLnN0cmluZ2lmeShfaShqdCkpOmp0O2lmKEllLmlzQXJyYXlCdWZmZXIoanQpfHxJZS5pc0J1ZmZlcihqdCl8fEllLmlzU3RyZWFtKGp0KXx8SWUuaXNGaWxlKGp0KXx8SWUuaXNCbG9iKGp0KXx8''@;'; put 'put ''SWUuaXNSZWFkYWJsZVN0cmVhbShqdCkpcmV0dXJuIGp0O2lmKEllLmlzQXJyYXlCdWZmZXJWaWV3KGp0KSlyZXR1cm4ganQuYnVmZmVyO2lmKEllLmlzVVJMU2VhcmNoUGFyYW1zKGp0KSlyZXR1cm4gcG4uc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2Rl''@;'; put 'put ''ZDtjaGFyc2V0PXV0Zi04IiwhMSksanQudG9TdHJpbmcoKTtsZXQgam47aWYobXIpe2lmKFZ0LmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiBmdW5jdGlvbiBmbihIdCxqdCl7cmV0dXJuIGh0KEh0LG5ldyBwaS5jbGFzc2VzLlVSTFNlYXJj''@;'; put 'put ''aFBhcmFtcyx7dmlzaXRvcjpmdW5jdGlvbihwbixWdCxEbixtcil7cmV0dXJuIHBpLmlzTm9kZSYmSWUuaXNCdWZmZXIocG4pPyh0aGlzLmFwcGVuZChWdCxwbi50b1N0cmluZygiYmFzZTY0IikpLCExKTptci5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LC4uLmp0fSl9''@;'; put 'put ''KGp0LHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKGpuPUllLmlzRmlsZUxpc3QoanQpKXx8VnQuaW5kZXhPZigibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpPi0xKXtjb25zdCBFYT10aGlzLmVudiYmdGhpcy5lbnYuRm9ybURhdGE7cmV0dXJuIGh0KGpuP3siZmlsZXNbXSI6anR9''@;'; put 'put ''Omp0LEVhJiZuZXcgRWEsdGhpcy5mb3JtU2VyaWFsaXplcil9fXJldHVybiBtcnx8RG4/KHBuLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9qc29uIiwhMSksZnVuY3Rpb24gdnIoSHQsanQscG4pe2lmKEllLmlzU3RyaW5nKEh0KSl0cnl7cmV0dXJuKGp0fHxKU09OLnBhcnNlKShIdCks''@;'; put 'put ''SWUudHJpbShIdCl9Y2F0Y2goVnQpe2lmKCJTeW50YXhFcnJvciIhPT1WdC5uYW1lKXRocm93IFZ0fXJldHVybihwbnx8SlNPTi5zdHJpbmdpZnkpKEh0KX0oanQpKTpqdH1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihqdCl7Y29uc3QgcG49dGhpcy50cmFuc2l0aW9uYWx8fFhpLnRy''@;'; put 'put ''YW5zaXRpb25hbCxWdD1wbiYmcG4uZm9yY2VkSlNPTlBhcnNpbmcsRG49Impzb24iPT09dGhpcy5yZXNwb25zZVR5cGU7aWYoSWUuaXNSZXNwb25zZShqdCl8fEllLmlzUmVhZGFibGVTdHJlYW0oanQpKXJldHVybiBqdDtpZihqdCYmSWUuaXNTdHJpbmcoanQpJiYoVnQmJiF0aGlzLnJlc3Bv''@;'; put 'put ''bnNlVHlwZXx8RG4pKXtjb25zdCBNbj0hKHBuJiZwbi5zaWxlbnRKU09OUGFyc2luZykmJkRuO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShqdCx0aGlzLnBhcnNlUmV2aXZlcil9Y2F0Y2goam4pe2lmKE1uKXRocm93IlN5bnRheEVycm9yIj09PWpuLm5hbWU/YXQuZnJvbShqbixhdC5FUlJfQkFE''@;'; put 'put ''X1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpqbn19cmV0dXJuIGp0fV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3Jt''@;'; put 'put ''RGF0YTpwaS5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6cGkuY2xhc3Nlcy5CbG9ifSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbihqdCl7cmV0dXJuIGp0Pj0yMDAmJmp0PDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIsIkNvbnRl''@;'; put 'put ''bnQtVHlwZSI6dm9pZCAwfX19O0llLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sSHQ9PntYaS5oZWFkZXJzW0h0XT17fX0pO3ZhciBRaT1YaTtjb25zdCBWaT1JZS50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50''@;'; put 'put ''LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVm''@;'; put 'put ''ZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSx1YT1TeW1ib2woImludGVybmFscyIpO2Z1bmN0aW9uIFJpKEh0KXtyZXR1cm4gSHQmJlN0cmluZyhIdCkudHJpbSgpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gRGEoSHQpe3JldHVybiExPT09SHR8fG51bGw9PUh0P0h0OkllLmlz''@;'; put 'put ''QXJyYXkoSHQpP0h0Lm1hcChEYSk6U3RyaW5nKEh0KX1mdW5jdGlvbiBQYShIdCxqdCxwbixWdCxEbil7aWYoSWUuaXNGdW5jdGlvbihWdCkpcmV0dXJuIFZ0LmNhbGwodGhpcyxqdCxwbik7aWYoRG4mJihqdD1wbiksSWUuaXNTdHJpbmcoanQpKXtpZihJZS5pc1N0cmluZyhWdCkpcmV0dXJu''@;'; put 'put ''LTEhPT1qdC5pbmRleE9mKFZ0KTtpZihJZS5pc1JlZ0V4cChWdCkpcmV0dXJuIFZ0LnRlc3QoanQpfX1jbGFzcyBNaXtjb25zdHJ1Y3RvcihqdCl7anQmJnRoaXMuc2V0KGp0KX1zZXQoanQscG4sVnQpe2NvbnN0IERuPXRoaXM7ZnVuY3Rpb24gbXIoam4sRWEsV2kpe2NvbnN0IFlpPVJpKEVh''@;'; put 'put ''KTtpZighWWkpdGhyb3cgbmV3IEVycm9yKCJoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2NvbnN0ICRhPUllLmZpbmRLZXkoRG4sWWkpOyghJGF8fHZvaWQgMD09PURuWyRhXXx8ITA9PT1XaXx8dm9pZCAwPT09V2kmJiExIT09RG5bJGFdKSYmKERuWyRhfHxFYV09''@;'; put 'put ''RGEoam4pKX1jb25zdCBNbj0oam4sRWEpPT5JZS5mb3JFYWNoKGpuLChXaSxZaSk9Pm1yKFdpLFlpLEVhKSk7aWYoSWUuaXNQbGFpbk9iamVjdChqdCl8fGp0IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3RvcilNbihqdCxwbik7ZWxzZSBpZihJZS5pc1N0cmluZyhqdCkmJihqdD1qdC50cmlt''@;'; put 'put ''KCkpJiYhKEh0PT4vXlstX2EtekEtWjAtOV5gfH4sISMkJSYnKisuXSskLy50ZXN0KEh0LnRyaW0oKSkpKGp0KSlNbigoSHQ9Pntjb25zdCBqdD17fTtsZXQgcG4sVnQsRG47cmV0dXJuIEh0JiZIdC5zcGxpdCgiXG4iKS5mb3JFYWNoKGZ1bmN0aW9uKE1uKXtEbj1Nbi5pbmRleE9mKCI6Iiks''@;'; put 'put ''cG49TW4uc3Vic3RyaW5nKDAsRG4pLnRyaW0oKS50b0xvd2VyQ2FzZSgpLFZ0PU1uLnN1YnN0cmluZyhEbisxKS50cmltKCksISghcG58fGp0W3BuXSYmVmlbcG5dKSYmKCJzZXQtY29va2llIj09PXBuP2p0W3BuXT9qdFtwbl0ucHVzaChWdCk6anRbcG5dPVtWdF06anRbcG5dPWp0W3BuXT9q''@;'; put 'put ''dFtwbl0rIiwgIitWdDpWdCl9KSxqdH0pKGp0KSxwbik7ZWxzZSBpZihJZS5pc09iamVjdChqdCkmJkllLmlzSXRlcmFibGUoanQpKXtsZXQgRWEsV2ksam49e307Zm9yKGNvbnN0IFlpIG9mIGp0KXtpZighSWUuaXNBcnJheShZaSkpdGhyb3cgVHlwZUVycm9yKCJPYmplY3QgaXRlcmF0b3Ig''@;'; put 'put ''bXVzdCByZXR1cm4gYSBrZXktdmFsdWUgcGFpciIpO2puW1dpPVlpWzBdXT0oRWE9am5bV2ldKT9JZS5pc0FycmF5KEVhKT9bLi4uRWEsWWlbMV1dOltFYSxZaVsxXV06WWlbMV19TW4oam4scG4pfWVsc2UgbnVsbCE9anQmJm1yKHBuLGp0LFZ0KTtyZXR1cm4gdGhpc31nZXQoanQscG4pe2lm''@;'; put 'put ''KGp0PVJpKGp0KSl7Y29uc3QgVnQ9SWUuZmluZEtleSh0aGlzLGp0KTtpZihWdCl7Y29uc3QgRG49dGhpc1tWdF07aWYoIXBuKXJldHVybiBEbjtpZighMD09PXBuKXJldHVybiBmdW5jdGlvbiBoaShIdCl7Y29uc3QganQ9T2JqZWN0LmNyZWF0ZShudWxsKSxwbj0vKFteXHMsOz1dKylccyoo''@;'; put 'put ''Pzo9XHMqKFteLDtdKykpPy9nO2xldCBWdDtmb3IoO1Z0PXBuLmV4ZWMoSHQpOylqdFtWdFsxXV09VnRbMl07cmV0dXJuIGp0fShEbik7aWYoSWUuaXNGdW5jdGlvbihwbikpcmV0dXJuIHBuLmNhbGwodGhpcyxEbixWdCk7aWYoSWUuaXNSZWdFeHAocG4pKXJldHVybiBwbi5leGVjKERuKTt0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKGp0LHBuKXtpZihqdD1SaShqdCkpe2NvbnN0IFZ0PUllLmZpbmRLZXkodGhpcyxqdCk7cmV0dXJuISghVnR8fHZvaWQgMD09PXRoaXNbVnRdfHxwbiYmIVBhKDAsdGhpc1tW''@;'; put 'put ''dF0sVnQscG4pKX1yZXR1cm4hMX1kZWxldGUoanQscG4pe2NvbnN0IFZ0PXRoaXM7bGV0IERuPSExO2Z1bmN0aW9uIG1yKE1uKXtpZihNbj1SaShNbikpe2NvbnN0IGpuPUllLmZpbmRLZXkoVnQsTW4pO2puJiYoIXBufHxQYSgwLFZ0W2puXSxqbixwbikpJiYoZGVsZXRlIFZ0W2puXSxEbj0h''@;'; put 'put ''MCl9fXJldHVybiBJZS5pc0FycmF5KGp0KT9qdC5mb3JFYWNoKG1yKTptcihqdCksRG59Y2xlYXIoanQpe2NvbnN0IHBuPU9iamVjdC5rZXlzKHRoaXMpO2xldCBWdD1wbi5sZW5ndGgsRG49ITE7Zm9yKDtWdC0tOyl7Y29uc3QgbXI9cG5bVnRdOyghanR8fFBhKDAsdGhpc1ttcl0sbXIsanQs''@;'; put 'put ''ITApKSYmKGRlbGV0ZSB0aGlzW21yXSxEbj0hMCl9cmV0dXJuIERufW5vcm1hbGl6ZShqdCl7Y29uc3QgcG49dGhpcyxWdD17fTtyZXR1cm4gSWUuZm9yRWFjaCh0aGlzLChEbixtcik9Pntjb25zdCBNbj1JZS5maW5kS2V5KFZ0LG1yKTtpZihNbilyZXR1cm4gcG5bTW5dPURhKERuKSx2b2lk''@;'; put 'put ''IGRlbGV0ZSBwblttcl07Y29uc3Qgam49anQ/ZnVuY3Rpb24gdXIoSHQpe3JldHVybiBIdC50cmltKCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oW2EtelxkXSkoXHcqKS9nLChqdCxwbixWdCk9PnBuLnRvVXBwZXJDYXNlKCkrVnQpfShtcik6U3RyaW5nKG1yKS50cmltKCk7am4hPT1tciYm''@;'; put 'put ''ZGVsZXRlIHBuW21yXSxwbltqbl09RGEoRG4pLFZ0W2puXT0hMH0pLHRoaXN9Y29uY2F0KC4uLmp0KXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi5qdCl9dG9KU09OKGp0KXtjb25zdCBwbj1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBJZS5mb3JFYWNoKHRoaXMs''@;'; put 'put ''KFZ0LERuKT0+e251bGwhPVZ0JiYhMSE9PVZ0JiYocG5bRG5dPWp0JiZJZS5pc0FycmF5KFZ0KT9WdC5qb2luKCIsICIpOlZ0KX0pLHBufVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygp''@;'; put 'put ''e3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtqdCxwbl0pPT5qdCsiOiAiK3BuKS5qb2luKCJcbiIpfWdldFNldENvb2tpZSgpe3JldHVybiB0aGlzLmdldCgic2V0LWNvb2tpZSIpfHxbXX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hl''@;'; put 'put ''YWRlcnMifXN0YXRpYyBmcm9tKGp0KXtyZXR1cm4ganQgaW5zdGFuY2VvZiB0aGlzP2p0Om5ldyB0aGlzKGp0KX1zdGF0aWMgY29uY2F0KGp0LC4uLnBuKXtjb25zdCBWdD1uZXcgdGhpcyhqdCk7cmV0dXJuIHBuLmZvckVhY2goRG49PlZ0LnNldChEbikpLFZ0fXN0YXRpYyBhY2Nlc3Nvcihq''@;'; put 'put ''dCl7Y29uc3QgVnQ9KHRoaXNbdWFdPXRoaXNbdWFdPXthY2Nlc3NvcnM6e319KS5hY2Nlc3NvcnMsRG49dGhpcy5wcm90b3R5cGU7ZnVuY3Rpb24gbXIoTW4pe2NvbnN0IGpuPVJpKE1uKTtWdFtqbl18fChmdW5jdGlvbiBiYShIdCxqdCl7Y29uc3QgcG49SWUudG9DYW1lbENhc2UoIiAiK2p0''@;'; put 'put ''KTtbImdldCIsInNldCIsImhhcyJdLmZvckVhY2goVnQ9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoSHQsVnQrcG4se3ZhbHVlOmZ1bmN0aW9uKERuLG1yLE1uKXtyZXR1cm4gdGhpc1tWdF0uY2FsbCh0aGlzLGp0LERuLG1yLE1uKX0sY29uZmlndXJhYmxlOiEwfSl9KX0oRG4sTW4pLFZ0W2pu''@;'; put 'put ''XT0hMCl9cmV0dXJuIEllLmlzQXJyYXkoanQpP2p0LmZvckVhY2gobXIpOm1yKGp0KSx0aGlzfX1NaS5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSksSWUucmVk''@;'; put 'put ''dWNlRGVzY3JpcHRvcnMoTWkucHJvdG90eXBlLCh7dmFsdWU6SHR9LGp0KT0+e2xldCBwbj1qdFswXS50b1VwcGVyQ2FzZSgpK2p0LnNsaWNlKDEpO3JldHVybntnZXQ6KCk9Pkh0LHNldChWdCl7dGhpc1twbl09VnR9fX0pLEllLmZyZWV6ZU1ldGhvZHMoTWkpO3ZhciB3YT1NaTtmdW5jdGlv''@;'; put 'put ''biBlYShIdCxqdCl7Y29uc3QgcG49dGhpc3x8UWksVnQ9anR8fHBuLERuPXdhLmZyb20oVnQuaGVhZGVycyk7bGV0IG1yPVZ0LmRhdGE7cmV0dXJuIEllLmZvckVhY2goSHQsZnVuY3Rpb24oam4pe21yPWpuLmNhbGwocG4sbXIsRG4ubm9ybWFsaXplKCksanQ/anQuc3RhdHVzOnZvaWQgMCl9''@;'; put 'put ''KSxEbi5ub3JtYWxpemUoKSxtcn1mdW5jdGlvbiBGcihIdCl7cmV0dXJuISghSHR8fCFIdC5fX0NBTkNFTF9fKX1mdW5jdGlvbiBjbyhIdCxqdCxwbil7YXQuY2FsbCh0aGlzLEh0Pz8iY2FuY2VsZWQiLGF0LkVSUl9DQU5DRUxFRCxqdCxwbiksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1m''@;'; put 'put ''dW5jdGlvbiBZYShIdCxqdCxwbil7Y29uc3QgVnQ9cG4uY29uZmlnLnZhbGlkYXRlU3RhdHVzO3BuLnN0YXR1cyYmVnQmJiFWdChwbi5zdGF0dXMpP2p0KG5ldyBhdCgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK3BuLnN0YXR1cyxbYXQuRVJSX0JBRF9SRVFVRVNULGF0LkVS''@;'; put 'put ''Ul9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IocG4uc3RhdHVzLzEwMCktNF0scG4uY29uZmlnLHBuLnJlcXVlc3QscG4pKTpIdChwbil9SWUuaW5oZXJpdHMoY28sYXQse19fQ0FOQ0VMX186ITB9KTtjb25zdCBkMD0oSHQsanQscG49Myk9PntsZXQgVnQ9MDtjb25zdCBEbj1mdW5jdGlvbiB2''@;'; put 'put ''MShIdCxqdCl7SHQ9SHR8fDEwO2NvbnN0IHBuPW5ldyBBcnJheShIdCksVnQ9bmV3IEFycmF5KEh0KTtsZXQgTW4sRG49MCxtcj0wO3JldHVybiBqdD12b2lkIDAhPT1qdD9qdDoxZTMsZnVuY3Rpb24oRWEpe2NvbnN0IFdpPURhdGUubm93KCksWWk9VnRbbXJdO01ufHwoTW49V2kpLHBuW0Ru''@;'; put 'put ''XT1FYSxWdFtEbl09V2k7bGV0ICRhPW1yLHNsPTA7Zm9yKDskYSE9PURuOylzbCs9cG5bJGErK10sJGElPUh0O2lmKERuPShEbisxKSVIdCxEbj09PW1yJiYobXI9KG1yKzEpJUh0KSxXaS1NbjxqdClyZXR1cm47Y29uc3QgbGw9WWkmJldpLVlpO3JldHVybiBsbD9NYXRoLnJvdW5kKDFlMypz''@;'; put 'put ''bC9sbCk6dm9pZCAwfX0oNTAsMjUwKTtyZXR1cm4gZnVuY3Rpb24gUHIoSHQsanQpe2xldCBEbixtcixwbj0wLFZ0PTFlMy9qdDtjb25zdCBNbj0oV2ksWWk9RGF0ZS5ub3coKSk9Pntwbj1ZaSxEbj1udWxsLG1yJiYoY2xlYXJUaW1lb3V0KG1yKSxtcj1udWxsKSxIdCguLi5XaSl9O3JldHVy''@;'; put 'put ''blsoLi4uV2kpPT57Y29uc3QgWWk9RGF0ZS5ub3coKSwkYT1ZaS1wbjskYT49VnQ/TW4oV2ksWWkpOihEbj1XaSxtcnx8KG1yPXNldFRpbWVvdXQoKCk9Pnttcj1udWxsLE1uKERuKX0sVnQtJGEpKSl9LCgpPT5EbiYmTW4oRG4pXX0obXI9Pntjb25zdCBNbj1tci5sb2FkZWQsam49bXIubGVu''@;'; put 'put ''Z3RoQ29tcHV0YWJsZT9tci50b3RhbDp2b2lkIDAsRWE9TW4tVnQsV2k9RG4oRWEpO1Z0PU1uLEh0KHtsb2FkZWQ6TW4sdG90YWw6am4scHJvZ3Jlc3M6am4/TW4vam46dm9pZCAwLGJ5dGVzOkVhLHJhdGU6V2l8fHZvaWQgMCxlc3RpbWF0ZWQ6V2kmJmpuJiZNbjw9am4/KGpuLU1uKS9XaTp2''@;'; put 'put ''b2lkIDAsZXZlbnQ6bXIsbGVuZ3RoQ29tcHV0YWJsZTpudWxsIT1qbixbanQ/ImRvd25sb2FkIjoidXBsb2FkIl06ITB9KX0scG4pfSxucj0oSHQsanQpPT57Y29uc3QgcG49bnVsbCE9SHQ7cmV0dXJuW1Z0PT5qdFswXSh7bGVuZ3RoQ29tcHV0YWJsZTpwbix0b3RhbDpIdCxsb2FkZWQ6VnR9''@;'; put 'put ''KSxqdFsxXV19LFJhPUh0PT4oLi4uanQpPT5JZS5hc2FwKCgpPT5IdCguLi5qdCkpO3ZhciBhaT1waS5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/KChIdCxqdCk9PnBuPT4ocG49bmV3IFVSTChwbixwaS5vcmlnaW4pLEh0LnByb3RvY29sPT09cG4ucHJvdG9jb2wmJkh0Lmhvc3Q9PT1wbi5ob3N0''@;'; put 'put ''JiYoanR8fEh0LnBvcnQ9PT1wbi5wb3J0KSkpKG5ldyBVUkwocGkub3JpZ2luKSxwaS5uYXZpZ2F0b3ImJi8obXNpZXx0cmlkZW50KS9pLnRlc3QocGkubmF2aWdhdG9yLnVzZXJBZ2VudCkpOigpPT4hMCxVdD1waS5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/e3dyaXRlKEh0LGp0LHBuLFZ0LERu''@;'; put 'put ''LG1yKXtjb25zdCBNbj1bSHQrIj0iK2VuY29kZVVSSUNvbXBvbmVudChqdCldO0llLmlzTnVtYmVyKHBuKSYmTW4ucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKHBuKS50b0dNVFN0cmluZygpKSxJZS5pc1N0cmluZyhWdCkmJk1uLnB1c2goInBhdGg9IitWdCksSWUuaXNTdHJpbmcoRG4pJiZN''@;'; put 'put ''bi5wdXNoKCJkb21haW49IitEbiksITA9PT1tciYmTW4ucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPU1uLmpvaW4oIjsgIil9LHJlYWQoSHQpe2NvbnN0IGp0PWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxzKikoIitIdCsiKT0oW147XSopIikpO3JldHVy''@;'; put 'put ''biBqdD9kZWNvZGVVUklDb21wb25lbnQoanRbM10pOm51bGx9LHJlbW92ZShIdCl7dGhpcy53cml0ZShIdCwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZSgpe30scmVhZDooKT0+bnVsbCxyZW1vdmUoKXt9fTtmdW5jdGlvbiBabyhIdCxqdCxwbil7bGV0IFZ0PSFmdW5jdGlvbiB0aShI''@;'; put 'put ''dCl7cmV0dXJuL14oW2Etel1bYS16XGQrXC0uXSo6KT9cL1wvL2kudGVzdChIdCl9KGp0KTtyZXR1cm4gSHQmJihWdHx8MD09cG4pP2Z1bmN0aW9uIHVjKEh0LGp0KXtyZXR1cm4ganQ/SHQucmVwbGFjZSgvXC8/XC8kLywiIikrIi8iK2p0LnJlcGxhY2UoL15cLysvLCIiKTpIdH0oSHQsanQp''@;'; put 'put ''Omp0fWNvbnN0IGRjPUh0PT5IdCBpbnN0YW5jZW9mIHdhP3suLi5IdH06SHQ7ZnVuY3Rpb24ganIoSHQsanQpe2p0PWp0fHx7fTtjb25zdCBwbj17fTtmdW5jdGlvbiBWdChXaSxZaSwkYSxzbCl7cmV0dXJuIEllLmlzUGxhaW5PYmplY3QoV2kpJiZJZS5pc1BsYWluT2JqZWN0KFlpKT9JZS5t''@;'; put 'put ''ZXJnZS5jYWxsKHtjYXNlbGVzczpzbH0sV2ksWWkpOkllLmlzUGxhaW5PYmplY3QoWWkpP0llLm1lcmdlKHt9LFlpKTpJZS5pc0FycmF5KFlpKT9ZaS5zbGljZSgpOllpfWZ1bmN0aW9uIERuKFdpLFlpLCRhLHNsKXtyZXR1cm4gSWUuaXNVbmRlZmluZWQoWWkpP0llLmlzVW5kZWZpbmVkKFdp''@;'; put 'put ''KT92b2lkIDA6VnQodm9pZCAwLFdpLDAsc2wpOlZ0KFdpLFlpLDAsc2wpfWZ1bmN0aW9uIG1yKFdpLFlpKXtpZighSWUuaXNVbmRlZmluZWQoWWkpKXJldHVybiBWdCh2b2lkIDAsWWkpfWZ1bmN0aW9uIE1uKFdpLFlpKXtyZXR1cm4gSWUuaXNVbmRlZmluZWQoWWkpP0llLmlzVW5kZWZpbmVk''@;'; put 'put ''KFdpKT92b2lkIDA6VnQodm9pZCAwLFdpKTpWdCh2b2lkIDAsWWkpfWZ1bmN0aW9uIGpuKFdpLFlpLCRhKXtyZXR1cm4gJGEgaW4ganQ/VnQoV2ksWWkpOiRhIGluIEh0P1Z0KHZvaWQgMCxXaSk6dm9pZCAwfWNvbnN0IEVhPXt1cmw6bXIsbWV0aG9kOm1yLGRhdGE6bXIsYmFzZVVSTDpNbix0''@;'; put 'put ''cmFuc2Zvcm1SZXF1ZXN0Ok1uLHRyYW5zZm9ybVJlc3BvbnNlOk1uLHBhcmFtc1NlcmlhbGl6ZXI6TW4sdGltZW91dDpNbix0aW1lb3V0TWVzc2FnZTpNbix3aXRoQ3JlZGVudGlhbHM6TW4sd2l0aFhTUkZUb2tlbjpNbixhZGFwdGVyOk1uLHJlc3BvbnNlVHlwZTpNbix4c3JmQ29va2llTmFt''@;'; put 'put ''ZTpNbix4c3JmSGVhZGVyTmFtZTpNbixvblVwbG9hZFByb2dyZXNzOk1uLG9uRG93bmxvYWRQcm9ncmVzczpNbixkZWNvbXByZXNzOk1uLG1heENvbnRlbnRMZW5ndGg6TW4sbWF4Qm9keUxlbmd0aDpNbixiZWZvcmVSZWRpcmVjdDpNbix0cmFuc3BvcnQ6TW4saHR0cEFnZW50Ok1uLGh0dHBz''@;'; put 'put ''QWdlbnQ6TW4sY2FuY2VsVG9rZW46TW4sc29ja2V0UGF0aDpNbixyZXNwb25zZUVuY29kaW5nOk1uLHZhbGlkYXRlU3RhdHVzOmpuLGhlYWRlcnM6KFdpLFlpLCRhKT0+RG4oZGMoV2kpLGRjKFlpKSwwLCEwKX07cmV0dXJuIEllLmZvckVhY2goT2JqZWN0LmtleXMoey4uLkh0LC4uLmp0fSks''@;'; put 'put ''ZnVuY3Rpb24oWWkpe2NvbnN0ICRhPUVhW1lpXXx8RG4sc2w9JGEoSHRbWWldLGp0W1lpXSxZaSk7SWUuaXNVbmRlZmluZWQoc2wpJiYkYSE9PWpufHwocG5bWWldPXNsKX0pLHBufXZhciBVZD1IdD0+e2NvbnN0IGp0PWpyKHt9LEh0KTtsZXR7ZGF0YTpwbix3aXRoWFNSRlRva2VuOlZ0LHhz''@;'; put 'put ''cmZIZWFkZXJOYW1lOkRuLHhzcmZDb29raWVOYW1lOm1yLGhlYWRlcnM6TW4sYXV0aDpqbn09anQ7aWYoanQuaGVhZGVycz1Nbj13YS5mcm9tKE1uKSxqdC51cmw9c3QoWm8oanQuYmFzZVVSTCxqdC51cmwsanQuYWxsb3dBYnNvbHV0ZVVybHMpLEh0LnBhcmFtcyxIdC5wYXJhbXNTZXJpYWxp''@;'; put 'put ''emVyKSxqbiYmTW4uc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKChqbi51c2VybmFtZXx8IiIpKyI6Iisoam4ucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGpuLnBhc3N3b3JkKSk6IiIpKSksSWUuaXNGb3JtRGF0YShwbikpaWYocGkuaGFzU3RhbmRhcmRC''@;'; put 'put ''cm93c2VyRW52fHxwaS5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpTW4uc2V0Q29udGVudFR5cGUodm9pZCAwKTtlbHNlIGlmKEllLmlzRnVuY3Rpb24ocG4uZ2V0SGVhZGVycykpe2NvbnN0IEVhPXBuLmdldEhlYWRlcnMoKSxXaT1bImNvbnRlbnQtdHlwZSIsImNvbnRlbnQtbGVu''@;'; put 'put ''Z3RoIl07T2JqZWN0LmVudHJpZXMoRWEpLmZvckVhY2goKFtZaSwkYV0pPT57V2kuaW5jbHVkZXMoWWkudG9Mb3dlckNhc2UoKSkmJk1uLnNldChZaSwkYSl9KX1pZihwaS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYmJihWdCYmSWUuaXNGdW5jdGlvbihWdCkmJihWdD1WdChqdCkpLFZ0fHwhMSE9''@;'; put 'put ''PVZ0JiZhaShqdC51cmwpKSl7Y29uc3QgRWE9RG4mJm1yJiZVdC5yZWFkKG1yKTtFYSYmTW4uc2V0KERuLEVhKX1yZXR1cm4ganR9LHkxPXR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSImJmZ1bmN0aW9uKEh0KXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocG4sVnQpe2NvbnN0IERuPVVk''@;'; put 'put ''KEh0KTtsZXQgbXI9RG4uZGF0YTtjb25zdCBNbj13YS5mcm9tKERuLmhlYWRlcnMpLm5vcm1hbGl6ZSgpO2xldCBZaSwkYSxzbCxsbCxCaSx7cmVzcG9uc2VUeXBlOmpuLG9uVXBsb2FkUHJvZ3Jlc3M6RWEsb25Eb3dubG9hZFByb2dyZXNzOldpfT1EbjtmdW5jdGlvbiBPYSgpe2xsJiZsbCgp''@;'; put 'put ''LEJpJiZCaSgpLERuLmNhbmNlbFRva2VuJiZEbi5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShZaSksRG4uc2lnbmFsJiZEbi5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLFlpKX1sZXQgV2E9bmV3IFhNTEh0dHBSZXF1ZXN0O2Z1bmN0aW9uIFhsKCl7aWYoIVdhKXJldHVybjtj''@;'; put 'put ''b25zdCBDYz13YS5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gV2EmJldhLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKTtZYShmdW5jdGlvbihHaSl7cG4oR2kpLE9hKCl9LGZ1bmN0aW9uKEdpKXtWdChHaSksT2EoKX0se2RhdGE6am4mJiJ0ZXh0IiE9PWpuJiYianNvbiIhPT1qbj9X''@;'; put 'put ''YS5yZXNwb25zZTpXYS5yZXNwb25zZVRleHQsc3RhdHVzOldhLnN0YXR1cyxzdGF0dXNUZXh0OldhLnN0YXR1c1RleHQsaGVhZGVyczpDYyxjb25maWc6SHQscmVxdWVzdDpXYX0pLFdhPW51bGx9V2Eub3BlbihEbi5tZXRob2QudG9VcHBlckNhc2UoKSxEbi51cmwsITApLFdhLnRpbWVvdXQ9''@;'; put 'put ''RG4udGltZW91dCwib25sb2FkZW5kImluIFdhP1dhLm9ubG9hZGVuZD1YbDpXYS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshV2F8fDQhPT1XYS5yZWFkeVN0YXRlfHwwPT09V2Euc3RhdHVzJiYoIVdhLnJlc3BvbnNlVVJMfHwwIT09V2EucmVzcG9uc2VVUkwuaW5kZXhPZigiZmls''@;'; put 'put ''ZToiKSl8fHNldFRpbWVvdXQoWGwpfSxXYS5vbmFib3J0PWZ1bmN0aW9uKCl7V2EmJihWdChuZXcgYXQoIlJlcXVlc3QgYWJvcnRlZCIsYXQuRUNPTk5BQk9SVEVELEh0LFdhKSksV2E9bnVsbCl9LFdhLm9uZXJyb3I9ZnVuY3Rpb24oZmMpe2NvbnN0IEFvPW5ldyBhdChmYyYmZmMubWVzc2Fn''@;'; put 'put ''ZT9mYy5tZXNzYWdlOiJOZXR3b3JrIEVycm9yIixhdC5FUlJfTkVUV09SSyxIdCxXYSk7QW8uZXZlbnQ9ZmN8fG51bGwsVnQoQW8pLFdhPW51bGx9LFdhLm9udGltZW91dD1mdW5jdGlvbigpe2xldCBmYz1Ebi50aW1lb3V0PyJ0aW1lb3V0IG9mICIrRG4udGltZW91dCsibXMgZXhjZWVkZWQi''@;'; put 'put ''OiJ0aW1lb3V0IGV4Y2VlZGVkIjtEbi50aW1lb3V0RXJyb3JNZXNzYWdlJiYoZmM9RG4udGltZW91dEVycm9yTWVzc2FnZSksVnQobmV3IGF0KGZjLChEbi50cmFuc2l0aW9uYWx8fFllKS5jbGFyaWZ5VGltZW91dEVycm9yP2F0LkVUSU1FRE9VVDphdC5FQ09OTkFCT1JURUQsSHQsV2EpKSxX''@;'; put 'put ''YT1udWxsfSx2b2lkIDA9PT1tciYmTW4uc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gV2EmJkllLmZvckVhY2goTW4udG9KU09OKCksZnVuY3Rpb24oZmMsZTEpe1dhLnNldFJlcXVlc3RIZWFkZXIoZTEsZmMpfSksSWUuaXNVbmRlZmluZWQoRG4ud2l0aENyZWRl''@;'; put 'put ''bnRpYWxzKXx8KFdhLndpdGhDcmVkZW50aWFscz0hIURuLndpdGhDcmVkZW50aWFscyksam4mJiJqc29uIiE9PWpuJiYoV2EucmVzcG9uc2VUeXBlPURuLnJlc3BvbnNlVHlwZSksV2kmJihbc2wsQmldPWQwKFdpLCEwKSxXYS5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsc2wpKSxFYSYm''@;'; put 'put ''V2EudXBsb2FkJiYoWyRhLGxsXT1kMChFYSksV2EudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIiwkYSksV2EudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlbmQiLGxsKSksKERuLmNhbmNlbFRva2VufHxEbi5zaWduYWwpJiYoWWk9Q2M9PntXYSYmKFZ0KCFDY3x8Q2Mu''@;'; put 'put ''dHlwZT9uZXcgY28obnVsbCxIdCxXYSk6Q2MpLFdhLmFib3J0KCksV2E9bnVsbCl9LERuLmNhbmNlbFRva2VuJiZEbi5jYW5jZWxUb2tlbi5zdWJzY3JpYmUoWWkpLERuLnNpZ25hbCYmKERuLnNpZ25hbC5hYm9ydGVkP1lpKCk6RG4uc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixZ''@;'; put 'put ''aSkpKTtjb25zdCBGbz1mdW5jdGlvbiAkYyhIdCl7Y29uc3QganQ9L14oWy0rXHddezEsMjV9KSg6P1wvXC98OikvLmV4ZWMoSHQpO3JldHVybiBqdCYmanRbMV18fCIifShEbi51cmwpO0ZvJiYtMT09PXBpLnByb3RvY29scy5pbmRleE9mKEZvKT9WdChuZXcgYXQoIlVuc3VwcG9ydGVkIHBy''@;'; put 'put ''b3RvY29sICIrRm8rIjoiLGF0LkVSUl9CQURfUkVRVUVTVCxIdCkpOldhLnNlbmQobXJ8fG51bGwpfSl9LEJhPShIdCxqdCk9Pntjb25zdHtsZW5ndGg6cG59PUh0PUh0P0h0LmZpbHRlcihCb29sZWFuKTpbXTtpZihqdHx8cG4pe2xldCBEbixWdD1uZXcgQWJvcnRDb250cm9sbGVyO2NvbnN0''@;'; put 'put ''IG1yPWZ1bmN0aW9uKFdpKXtpZighRG4pe0RuPSEwLGpuKCk7Y29uc3QgWWk9V2kgaW5zdGFuY2VvZiBFcnJvcj9XaTp0aGlzLnJlYXNvbjtWdC5hYm9ydChZaSBpbnN0YW5jZW9mIGF0P1lpOm5ldyBjbyhZaSBpbnN0YW5jZW9mIEVycm9yP1lpLm1lc3NhZ2U6WWkpKX19O2xldCBNbj1qdCYm''@;'; put 'put ''c2V0VGltZW91dCgoKT0+e01uPW51bGwsbXIobmV3IGF0KGB0aW1lb3V0ICR7anR9IG9mIG1zIGV4Y2VlZGVkYCxhdC5FVElNRURPVVQpKX0sanQpO2NvbnN0IGpuPSgpPT57SHQmJihNbiYmY2xlYXJUaW1lb3V0KE1uKSxNbj1udWxsLEh0LmZvckVhY2goV2k9PntXaS51bnN1YnNjcmliZT9X''@;'; put 'put ''aS51bnN1YnNjcmliZShtcik6V2kucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLG1yKX0pLEh0PW51bGwpfTtIdC5mb3JFYWNoKFdpPT5XaS5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsbXIpKTtjb25zdHtzaWduYWw6RWF9PVZ0O3JldHVybiBFYS51bnN1YnNjcmliZT0oKT0+SWUuYXNh''@;'; put 'put ''cChqbiksRWF9fTtjb25zdCBLYz1mdW5jdGlvbiooSHQsanQpe2xldCBwbj1IdC5ieXRlTGVuZ3RoO2lmKCFqdHx8cG48anQpcmV0dXJuIHZvaWQoeWllbGQgSHQpO2xldCBEbixWdD0wO2Zvcig7VnQ8cG47KURuPVZ0K2p0LHlpZWxkIEh0LnNsaWNlKFZ0LERuKSxWdD1Ebn0sUTU9ZnVuY3Rp''@;'; put 'put ''b24oKXt2YXIgSHQ9X3dyYXBBc3luY0dlbmVyYXRvcihmdW5jdGlvbiooanQscG4pe3ZhciBtcixWdD0hMSxEbj0hMTt0cnl7Zm9yKHZhciBqbixNbj1fYXN5bmNJdGVyYXRvcihJcyhqdCkpO1Z0PSEoam49eWllbGQgX2F3YWl0QXN5bmNHZW5lcmF0b3IoTW4ubmV4dCgpKSkuZG9uZTtWdD0h''@;'; put 'put ''MSl7Y29uc3QgRWE9am4udmFsdWU7eWllbGQqX2FzeW5jR2VuZXJhdG9yRGVsZWdhdGUoX2FzeW5jSXRlcmF0b3IoS2MoRWEscG4pKSxfYXdhaXRBc3luY0dlbmVyYXRvcil9fWNhdGNoKEVhKXtEbj0hMCxtcj1FYX1maW5hbGx5e3RyeXtWdCYmbnVsbCE9TW4ucmV0dXJuJiYoeWllbGQgX2F3''@;'; put 'put ''YWl0QXN5bmNHZW5lcmF0b3IoTW4ucmV0dXJuKCkpKX1maW5hbGx5e2lmKERuKXRocm93IG1yfX19KTtyZXR1cm4gZnVuY3Rpb24ocG4sVnQpe3JldHVybiBIdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLElzPWZ1bmN0aW9uKCl7dmFyIEh0PV93cmFwQXN5bmNHZW5lcmF0b3IoZnVuY3Rp''@;'; put 'put ''b24qKGp0KXtpZihqdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pcmV0dXJuIHZvaWQoeWllbGQqX2FzeW5jR2VuZXJhdG9yRGVsZWdhdGUoX2FzeW5jSXRlcmF0b3IoanQpLF9hd2FpdEFzeW5jR2VuZXJhdG9yKSk7Y29uc3QgcG49anQuZ2V0UmVhZGVyKCk7dHJ5e2Zvcig7Oyl7Y29uc3R7ZG9u''@;'; put 'put ''ZTpWdCx2YWx1ZTpEbn09eWllbGQgX2F3YWl0QXN5bmNHZW5lcmF0b3IocG4ucmVhZCgpKTtpZihWdClicmVhazt5aWVsZCBEbn19ZmluYWxseXt5aWVsZCBfYXdhaXRBc3luY0dlbmVyYXRvcihwbi5jYW5jZWwoKSl9fSk7cmV0dXJuIGZ1bmN0aW9uKHBuKXtyZXR1cm4gSHQuYXBwbHkodGhp''@;'; put 'put ''cyxhcmd1bWVudHMpfX0oKSxPMD0oSHQsanQscG4sVnQpPT57Y29uc3QgRG49UTUoSHQsanQpO2xldCBNbixtcj0wLGpuPUVhPT57TW58fChNbj0hMCxWdCYmVnQoRWEpKX07cmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7cHVsbDpFYT0+X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKCl7''@;'; put 'put ''dHJ5e2NvbnN0e2RvbmU6V2ksdmFsdWU6WWl9PXlpZWxkIERuLm5leHQoKTtpZihXaSlyZXR1cm4gam4oKSx2b2lkIEVhLmNsb3NlKCk7aWYocG4pe2xldCBzbD1tcis9WWkuYnl0ZUxlbmd0aDtwbihzbCl9RWEuZW5xdWV1ZShuZXcgVWludDhBcnJheShZaSkpfWNhdGNoKFdpKXt0aHJvdyBq''@;'; put 'put ''bihXaSksV2l9fSkoKSxjYW5jZWw6RWE9PihqbihFYSksRG4ucmV0dXJuKCkpfSx7aGlnaFdhdGVyTWFyazoyfSl9LHtpc0Z1bmN0aW9uOmhjfT1JZSx2Zz0oKHtSZXF1ZXN0Okh0LFJlc3BvbnNlOmp0fSk9Pih7UmVxdWVzdDpIdCxSZXNwb25zZTpqdH0pKShJZS5nbG9iYWwpLHtSZWFkYWJs''@;'; put 'put ''ZVN0cmVhbTpIaCxUZXh0RW5jb2Rlcjp1c309SWUuZ2xvYmFsLHFhPShIdCwuLi5qdCk9Pnt0cnl7cmV0dXJuISFIdCguLi5qdCl9Y2F0Y2h7cmV0dXJuITF9fSxXZD1IdD0+e0h0PUllLm1lcmdlLmNhbGwoe3NraXBVbmRlZmluZWQ6ITB9LHZnLEh0KTtjb25zdHtmZXRjaDpqdCxSZXF1ZXN0''@;'; put 'put ''OnBuLFJlc3BvbnNlOlZ0fT1IdCxEbj1qdD9oYyhqdCk6ImZ1bmN0aW9uIj09dHlwZW9mIGZldGNoLG1yPWhjKHBuKSxNbj1oYyhWdCk7aWYoIURuKXJldHVybiExO2NvbnN0IGpuPURuJiZoYyhIaCksRWE9RG4mJigiZnVuY3Rpb24iPT10eXBlb2YgdXM/KEJpPT5PYT0+QmkuZW5jb2RlKE9h''@;'; put 'put ''KSkobmV3IHVzKTpmdW5jdGlvbigpe3ZhciBCaT1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooT2Epe3JldHVybiBuZXcgVWludDhBcnJheSh5aWVsZCBuZXcgcG4oT2EpLmFycmF5QnVmZmVyKCkpfSk7cmV0dXJuIGZ1bmN0aW9uKE9hKXtyZXR1cm4gQmkuYXBwbHkodGhpcyxhcmd1bWVu''@;'; put 'put ''dHMpfX0oKSksV2k9bXImJmpuJiZxYSgoKT0+e2xldCBCaT0hMTtjb25zdCBPYT1uZXcgcG4ocGkub3JpZ2luLHtib2R5Om5ldyBIaCxtZXRob2Q6IlBPU1QiLGdldCBkdXBsZXgoKXtyZXR1cm4gQmk9ITAsImhhbGYifX0pLmhlYWRlcnMuaGFzKCJDb250ZW50LVR5cGUiKTtyZXR1cm4gQmkm''@;'; put 'put ''JiFPYX0pLFlpPU1uJiZqbiYmcWEoKCk9PkllLmlzUmVhZGFibGVTdHJlYW0obmV3IFZ0KCIiKS5ib2R5KSksJGE9e3N0cmVhbTpZaSYmKEJpPT5CaS5ib2R5KX07RG4mJlsidGV4dCIsImFycmF5QnVmZmVyIiwiYmxvYiIsImZvcm1EYXRhIiwic3RyZWFtIl0uZm9yRWFjaChCaT0+eyEkYVtC''@;'; put 'put ''aV0mJigkYVtCaV09KE9hLFdhKT0+e2xldCBYbD1PYSYmT2FbQmldO2lmKFhsKXJldHVybiBYbC5jYWxsKE9hKTt0aHJvdyBuZXcgYXQoYFJlc3BvbnNlIHR5cGUgJyR7Qml9JyBpcyBub3Qgc3VwcG9ydGVkYCxhdC5FUlJfTk9UX1NVUFBPUlQsV2EpfSl9KTtjb25zdCBzbD1mdW5jdGlvbigp''@;'; put 'put ''e3ZhciBCaT1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooT2Epe3JldHVybiBudWxsPT1PYT8wOkllLmlzQmxvYihPYSk/T2Euc2l6ZTpJZS5pc1NwZWNDb21wbGlhbnRGb3JtKE9hKT8oeWllbGQgbmV3IHBuKHBpLm9yaWdpbix7bWV0aG9kOiJQT1NUIixib2R5Ok9hfSkuYXJyYXlCdWZm''@;'; put 'put ''ZXIoKSkuYnl0ZUxlbmd0aDpJZS5pc0FycmF5QnVmZmVyVmlldyhPYSl8fEllLmlzQXJyYXlCdWZmZXIoT2EpP09hLmJ5dGVMZW5ndGg6KEllLmlzVVJMU2VhcmNoUGFyYW1zKE9hKSYmKE9hKz0iIiksSWUuaXNTdHJpbmcoT2EpPyh5aWVsZCBFYShPYSkpLmJ5dGVMZW5ndGg6dm9pZCAwKX0p''@;'; put 'put ''O3JldHVybiBmdW5jdGlvbihXYSl7cmV0dXJuIEJpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksbGw9ZnVuY3Rpb24oKXt2YXIgQmk9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKE9hLFdhKXtyZXR1cm4gSWUudG9GaW5pdGVOdW1iZXIoT2EuZ2V0Q29udGVudExlbmd0aCgpKT8/c2wo''@;'; put 'put ''V2EpfSk7cmV0dXJuIGZ1bmN0aW9uKFdhLFhsKXtyZXR1cm4gQmkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgQmk9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKE9hKXtsZXR7dXJsOldhLG1ldGhvZDpYbCxkYXRhOkZvLHNpZ25hbDpDYyxjYW5j''@;'; put 'put ''ZWxUb2tlbjpmYyx0aW1lb3V0OmUxLG9uRG93bmxvYWRQcm9ncmVzczpBbyxvblVwbG9hZFByb2dyZXNzOkdpLHJlc3BvbnNlVHlwZTpWbyxoZWFkZXJzOm9vLHdpdGhDcmVkZW50aWFsczp0bz0ic2FtZS1vcmlnaW4iLGZldGNoT3B0aW9uczpNb309VWQoT2EpLExvPWp0fHxmZXRjaDtWbz1W''@;'; put 'put ''bz8oVm8rIiIpLnRvTG93ZXJDYXNlKCk6InRleHQiO2xldCBiMT1CYShbQ2MsZmMmJmZjLnRvQWJvcnRTaWduYWwoKV0sZTEpLF8xPW51bGw7Y29uc3QgaDA9YjEmJmIxLnVuc3Vic2NyaWJlJiYoKCk9PntiMS51bnN1YnNjcmliZSgpfSk7bGV0IFlkO3RyeXtpZihHaSYmV2kmJiJnZXQiIT09''@;'; put 'put ''WGwmJiJoZWFkIiE9PVhsJiYwIT09KFlkPXlpZWxkIGxsKG9vLEZvKSkpe2xldCBWaCxrbz1uZXcgcG4oV2Ese21ldGhvZDoiUE9TVCIsYm9keTpGbyxkdXBsZXg6ImhhbGYifSk7aWYoSWUuaXNGb3JtRGF0YShGbykmJihWaD1rby5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIikpJiZvby5z''@;'; put 'put ''ZXRDb250ZW50VHlwZShWaCksa28uYm9keSl7Y29uc3RbZW0sRXBdPW5yKFlkLGQwKFJhKEdpKSkpO0ZvPU8wKGtvLmJvZHksNjU1MzYsZW0sRXApfX1JZS5pc1N0cmluZyh0byl8fCh0bz10bz8iaW5jbHVkZSI6Im9taXQiKTtjb25zdCBrbD1tciYmImNyZWRlbnRpYWxzImluIHBuLnByb3Rv''@;'; put 'put ''dHlwZSxTYz17Li4uTW8sc2lnbmFsOmIxLG1ldGhvZDpYbC50b1VwcGVyQ2FzZSgpLGhlYWRlcnM6b28ubm9ybWFsaXplKCkudG9KU09OKCksYm9keTpGbyxkdXBsZXg6ImhhbGYiLGNyZWRlbnRpYWxzOmtsP3RvOnZvaWQgMH07XzE9bXImJm5ldyBwbihXYSxTYyk7bGV0IHhvPXlpZWxkIG1y''@;'; put 'put ''P0xvKF8xLE1vKTpMbyhXYSxTYyk7Y29uc3QgeHA9WWkmJigic3RyZWFtIj09PVZvfHwicmVzcG9uc2UiPT09Vm8pO2lmKFlpJiYoQW98fHhwJiZoMCkpe2NvbnN0IGtvPXt9O1sic3RhdHVzIiwic3RhdHVzVGV4dCIsImhlYWRlcnMiXS5mb3JFYWNoKE9jPT57a29bT2NdPXhvW09jXX0pO2Nv''@;'; put 'put ''bnN0IFZoPUllLnRvRmluaXRlTnVtYmVyKHhvLmhlYWRlcnMuZ2V0KCJjb250ZW50LWxlbmd0aCIpKSxbZW0sRXBdPUFvJiZucihWaCxkMChSYShBbyksITApKXx8W107eG89bmV3IFZ0KE8wKHhvLmJvZHksNjU1MzYsZW0sKCk9PntFcCYmRXAoKSxoMCYmaDAoKX0pLGtvKX1Wbz1Wb3x8InRl''@;'; put 'put ''eHQiO2xldCB5Zz15aWVsZCAkYVtJZS5maW5kS2V5KCRhLFZvKXx8InRleHQiXSh4byxPYSk7cmV0dXJuIXhwJiZoMCYmaDAoKSx5aWVsZCBuZXcgUHJvbWlzZSgoa28sVmgpPT57WWEoa28sVmgse2RhdGE6eWcsaGVhZGVyczp3YS5mcm9tKHhvLmhlYWRlcnMpLHN0YXR1czp4by5zdGF0dXMs''@;'; put 'put ''c3RhdHVzVGV4dDp4by5zdGF0dXNUZXh0LGNvbmZpZzpPYSxyZXF1ZXN0Ol8xfSl9KX1jYXRjaChrbCl7dGhyb3cgaDAmJmgwKCksa2wmJiJUeXBlRXJyb3IiPT09a2wubmFtZSYmL0xvYWQgZmFpbGVkfGZldGNoL2kudGVzdChrbC5tZXNzYWdlKT9PYmplY3QuYXNzaWduKG5ldyBhdCgiTmV0''@;'; put 'put ''d29yayBFcnJvciIsYXQuRVJSX05FVFdPUkssT2EsXzEpLHtjYXVzZTprbC5jYXVzZXx8a2x9KTphdC5mcm9tKGtsLGtsJiZrbC5jb2RlLE9hLF8xKX19KTtyZXR1cm4gZnVuY3Rpb24oT2Epe3JldHVybiBCaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpfSxMYz1uZXcgTWFwLHdwPUh0PT57''@;'; put 'put ''bGV0IGp0PUh0P0h0LmVudjp7fTtjb25zdHtmZXRjaDpwbixSZXF1ZXN0OlZ0LFJlc3BvbnNlOkRufT1qdCxtcj1bVnQsRG4scG5dO2xldCBFYSxXaSxqbj1tci5sZW5ndGgsWWk9TGM7Zm9yKDtqbi0tOylFYT1tcltqbl0sV2k9WWkuZ2V0KEVhKSx2b2lkIDA9PT1XaSYmWWkuc2V0KEVhLFdp''@;'; put 'put ''PWpuP25ldyBNYXA6V2QoanQpKSxZaT1XaTtyZXR1cm4gV2l9O3dwKCk7Y29uc3QgdGQ9e2h0dHA6bnVsbCx4aHI6eTEsZmV0Y2g6e2dldDp3cH19O0llLmZvckVhY2godGQsKEh0LGp0KT0+e2lmKEh0KXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEh0LCJuYW1lIix7dmFsdWU6anR9KX1j''@;'; put 'put ''YXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEh0LCJhZGFwdGVyTmFtZSIse3ZhbHVlOmp0fSl9fSk7Y29uc3QgQ3A9SHQ9PmAtICR7SHR9YCxodT1IdD0+SWUuaXNGdW5jdGlvbihIdCl8fG51bGw9PT1IdHx8ITE9PT1IdDt2YXIgU3BfZ2V0QWRhcHRlcj0oSHQsanQpPT57SHQ9SWUuaXNB''@;'; put 'put ''cnJheShIdCk/SHQ6W0h0XTtjb25zdHtsZW5ndGg6cG59PUh0O2xldCBWdCxEbjtjb25zdCBtcj17fTtmb3IobGV0IE1uPTA7TW48cG47TW4rKyl7bGV0IGpuO2lmKFZ0PUh0W01uXSxEbj1WdCwhaHUoVnQpJiYoRG49dGRbKGpuPVN0cmluZyhWdCkpLnRvTG93ZXJDYXNlKCldLHZvaWQgMD09''@;'; put 'put ''PURuKSl0aHJvdyBuZXcgYXQoYFVua25vd24gYWRhcHRlciAnJHtqbn0nYCk7aWYoRG4mJihJZS5pc0Z1bmN0aW9uKERuKXx8KERuPURuLmdldChqdCkpKSlicmVhazttcltqbnx8IiMiK01uXT1Ebn1pZighRG4pe2NvbnN0IE1uPU9iamVjdC5lbnRyaWVzKG1yKS5tYXAoKFtFYSxXaV0pPT5g''@;'; put 'put ''YWRhcHRlciAke0VhfSBgKyghMT09PVdpPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpO3Rocm93IG5ldyBhdCgiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAi''@;'; put 'put ''Kyhwbj9Nbi5sZW5ndGg+MT8ic2luY2UgOlxuIitNbi5tYXAoQ3ApLmpvaW4oIlxuIik6IiAiK0NwKE1uWzBdKToiYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQiKSwiRVJSX05PVF9TVVBQT1JUIil9cmV0dXJuIERufTtmdW5jdGlvbiBOaChIdCl7aWYoSHQuY2FuY2VsVG9rZW4mJkh0LmNhbmNl''@;'; put 'put ''bFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxIdC5zaWduYWwmJkh0LnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBjbyhudWxsLEh0KX1mdW5jdGlvbiBNcChIdCl7cmV0dXJuIE5oKEh0KSxIdC5oZWFkZXJzPXdhLmZyb20oSHQuaGVhZGVycyksSHQuZGF0YT1lYS5jYWxsKEh0LEh0LnRyYW5z''@;'; put 'put ''Zm9ybVJlcXVlc3QpLC0xIT09WyJwb3N0IiwicHV0IiwicGF0Y2giXS5pbmRleE9mKEh0Lm1ldGhvZCkmJkh0LmhlYWRlcnMuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsITEpLFNwX2dldEFkYXB0ZXIoSHQuYWRhcHRlcnx8UWkuYWRhcHRlcixI''@;'; put 'put ''dCkoSHQpLnRoZW4oZnVuY3Rpb24oVnQpe3JldHVybiBOaChIdCksVnQuZGF0YT1lYS5jYWxsKEh0LEh0LnRyYW5zZm9ybVJlc3BvbnNlLFZ0KSxWdC5oZWFkZXJzPXdhLmZyb20oVnQuaGVhZGVycyksVnR9LGZ1bmN0aW9uKFZ0KXtyZXR1cm4gRnIoVnQpfHwoTmgoSHQpLFZ0JiZWdC5yZXNw''@;'; put 'put ''b25zZSYmKFZ0LnJlc3BvbnNlLmRhdGE9ZWEuY2FsbChIdCxIdC50cmFuc2Zvcm1SZXNwb25zZSxWdC5yZXNwb25zZSksVnQucmVzcG9uc2UuaGVhZGVycz13YS5mcm9tKFZ0LnJlc3BvbnNlLmhlYWRlcnMpKSksUHJvbWlzZS5yZWplY3QoVnQpfSl9Y29uc3QgeG49e307WyJvYmplY3QiLCJi''@;'; put 'put ''b29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChIdCxqdCk9Pnt4bltIdF09ZnVuY3Rpb24oVnQpe3JldHVybiB0eXBlb2YgVnQ9PT1IdHx8ImEiKyhqdDwxPyJuICI6IiAiKStIdH19KTtjb25zdCBncj17fTt4bi50cmFuc2l0aW9uYWw9ZnVu''@;'; put 'put ''Y3Rpb24oanQscG4sVnQpe2Z1bmN0aW9uIERuKG1yLE1uKXtyZXR1cm4iW0F4aW9zIHYxLjEyLjJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIrbXIrIiciK01uKyhWdD8iLiAiK1Z0OiIiKX1yZXR1cm4obXIsTW4sam4pPT57aWYoITE9PT1qdCl0aHJvdyBuZXcgYXQoRG4oTW4sIiBoYXMgYmVl''@;'; put 'put ''biByZW1vdmVkIisocG4/IiBpbiAiK3BuOiIiKSksYXQuRVJSX0RFUFJFQ0FURUQpO3JldHVybiBwbiYmIWdyW01uXSYmKGdyW01uXT0hMCxwLndhcm4oRG4oTW4sIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK3BuKyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1''@;'; put 'put ''cmUiKSkpLCFqdHx8anQobXIsTW4sam4pfX0seG4uc3BlbGxpbmc9ZnVuY3Rpb24oanQpe3JldHVybihwbixWdCk9PihwLndhcm4oYCR7VnR9IGlzIGxpa2VseSBhIG1pc3NwZWxsaW5nIG9mICR7anR9YCksITApfTt2YXIgdGE9e2Fzc2VydE9wdGlvbnM6ZnVuY3Rpb24gU2koSHQsanQscG4p''@;'; put 'put ''e2lmKCJvYmplY3QiIT10eXBlb2YgSHQpdGhyb3cgbmV3IGF0KCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixhdC5FUlJfQkFEX09QVElPTl9WQUxVRSk7Y29uc3QgVnQ9T2JqZWN0LmtleXMoSHQpO2xldCBEbj1WdC5sZW5ndGg7Zm9yKDtEbi0tID4wOyl7Y29uc3QgbXI9VnRbRG5dLE1u''@;'; put 'put ''PWp0W21yXTtpZihNbil7Y29uc3Qgam49SHRbbXJdLEVhPXZvaWQgMD09PWpufHxNbihqbixtcixIdCk7aWYoITAhPT1FYSl0aHJvdyBuZXcgYXQoIm9wdGlvbiAiK21yKyIgbXVzdCBiZSAiK0VhLGF0LkVSUl9CQURfT1BUSU9OX1ZBTFVFKX1lbHNlIGlmKCEwIT09cG4pdGhyb3cgbmV3IGF0''@;'; put 'put ''KCJVbmtub3duIG9wdGlvbiAiK21yLGF0LkVSUl9CQURfT1BUSU9OKX19LHZhbGlkYXRvcnM6eG59O2NvbnN0IHppPXRhLnZhbGlkYXRvcnM7Y2xhc3MgYW97Y29uc3RydWN0b3IoanQpe3RoaXMuZGVmYXVsdHM9anR8fHt9LHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBRcixyZXNw''@;'; put 'put ''b25zZTpuZXcgUXJ9fXJlcXVlc3QoanQscG4pe3ZhciBWdD10aGlzO3JldHVybiBfYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooKXt0cnl7cmV0dXJuIHlpZWxkIFZ0Ll9yZXF1ZXN0KGp0LHBuKX1jYXRjaChEbil7aWYoRG4gaW5zdGFuY2VvZiBFcnJvcil7bGV0IG1yPXt9O0Vycm9yLmNh''@;'; put 'put ''cHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKG1yKTptcj1uZXcgRXJyb3I7Y29uc3QgTW49bXIuc3RhY2s/bXIuc3RhY2sucmVwbGFjZSgvXi4rXG4vLCIiKToiIjt0cnl7RG4uc3RhY2s/TW4mJiFTdHJpbmcoRG4uc3RhY2spLmVuZHNXaXRoKE1uLnJlcGxhY2UoL14u''@;'; put 'put ''K1xuLitcbi8sIiIpKSYmKERuLnN0YWNrKz0iXG4iK01uKTpEbi5zdGFjaz1Nbn1jYXRjaHt9fXRocm93IERufX0pKCl9X3JlcXVlc3QoanQscG4peyJzdHJpbmciPT10eXBlb2YganQ/KHBuPXBufHx7fSkudXJsPWp0OnBuPWp0fHx7fSxwbj1qcih0aGlzLmRlZmF1bHRzLHBuKTtjb25zdHt0''@;'; put 'put ''cmFuc2l0aW9uYWw6VnQscGFyYW1zU2VyaWFsaXplcjpEbixoZWFkZXJzOm1yfT1wbjt2b2lkIDAhPT1WdCYmdGEuYXNzZXJ0T3B0aW9ucyhWdCx7c2lsZW50SlNPTlBhcnNpbmc6emkudHJhbnNpdGlvbmFsKHppLmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOnppLnRyYW5zaXRpb25hbCh6''@;'; put 'put ''aS5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOnppLnRyYW5zaXRpb25hbCh6aS5ib29sZWFuKX0sITEpLG51bGwhPURuJiYoSWUuaXNGdW5jdGlvbihEbik/cG4ucGFyYW1zU2VyaWFsaXplcj17c2VyaWFsaXplOkRufTp0YS5hc3NlcnRPcHRpb25zKERuLHtlbmNvZGU6emkuZnVuY3Rp''@;'; put 'put ''b24sc2VyaWFsaXplOnppLmZ1bmN0aW9ufSwhMCkpLHZvaWQgMCE9PXBuLmFsbG93QWJzb2x1dGVVcmxzfHwocG4uYWxsb3dBYnNvbHV0ZVVybHM9dm9pZCAwPT09dGhpcy5kZWZhdWx0cy5hbGxvd0Fic29sdXRlVXJsc3x8dGhpcy5kZWZhdWx0cy5hbGxvd0Fic29sdXRlVXJscyksdGEuYXNz''@;'; put 'put ''ZXJ0T3B0aW9ucyhwbix7YmFzZVVybDp6aS5zcGVsbGluZygiYmFzZVVSTCIpLHdpdGhYc3JmVG9rZW46emkuc3BlbGxpbmcoIndpdGhYU1JGVG9rZW4iKX0sITApLHBuLm1ldGhvZD0ocG4ubWV0aG9kfHx0aGlzLmRlZmF1bHRzLm1ldGhvZHx8ImdldCIpLnRvTG93ZXJDYXNlKCk7bGV0IE1u''@;'; put 'put ''PW1yJiZJZS5tZXJnZShtci5jb21tb24sbXJbcG4ubWV0aG9kXSk7bXImJkllLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sQmk9PntkZWxldGUgbXJbQmldfSkscG4uaGVhZGVycz13YS5jb25jYXQoTW4sbXIpO2NvbnN0IGpu''@;'; put 'put ''PVtdO2xldCBFYT0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24oT2EpeyJmdW5jdGlvbiI9PXR5cGVvZiBPYS5ydW5XaGVuJiYhMT09PU9hLnJ1bldoZW4ocG4pfHwoRWE9RWEmJk9hLnN5bmNocm9ub3VzLGpuLnVuc2hpZnQoT2EuZnVsZmlsbGVkLE9hLnJl''@;'; put 'put ''amVjdGVkKSl9KTtjb25zdCBXaT1bXTt0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uKE9hKXtXaS5wdXNoKE9hLmZ1bGZpbGxlZCxPYS5yZWplY3RlZCl9KTtsZXQgWWksc2wsJGE9MDtpZighRWEpe2NvbnN0IEJpPVtNcC5iaW5kKHRoaXMpLHZvaWQgMF07Zm9y''@;'; put 'put ''KEJpLnVuc2hpZnQoLi4uam4pLEJpLnB1c2goLi4uV2kpLHNsPUJpLmxlbmd0aCxZaT1Qcm9taXNlLnJlc29sdmUocG4pOyRhPHNsOylZaT1ZaS50aGVuKEJpWyRhKytdLEJpWyRhKytdKTtyZXR1cm4gWWl9c2w9am4ubGVuZ3RoO2xldCBsbD1wbjtmb3IoOyRhPHNsOyl7Y29uc3QgQmk9am5b''@;'; put 'put ''JGErK10sT2E9am5bJGErK107dHJ5e2xsPUJpKGxsKX1jYXRjaChXYSl7T2EuY2FsbCh0aGlzLFdhKTticmVha319dHJ5e1lpPU1wLmNhbGwodGhpcyxsbCl9Y2F0Y2goQmkpe3JldHVybiBQcm9taXNlLnJlamVjdChCaSl9Zm9yKCRhPTAsc2w9V2kubGVuZ3RoOyRhPHNsOylZaT1ZaS50aGVu''@;'; put 'put ''KFdpWyRhKytdLFdpWyRhKytdKTtyZXR1cm4gWWl9Z2V0VXJpKGp0KXtyZXR1cm4gc3QoWm8oKGp0PWpyKHRoaXMuZGVmYXVsdHMsanQpKS5iYXNlVVJMLGp0LnVybCxqdC5hbGxvd0Fic29sdXRlVXJscyksanQucGFyYW1zLGp0LnBhcmFtc1NlcmlhbGl6ZXIpfX1JZS5mb3JFYWNoKFsiZGVs''@;'; put 'put ''ZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbihqdCl7YW8ucHJvdG90eXBlW2p0XT1mdW5jdGlvbihwbixWdCl7cmV0dXJuIHRoaXMucmVxdWVzdChqcihWdHx8e30se21ldGhvZDpqdCx1cmw6cG4sZGF0YTooVnR8fHt9KS5kYXRhfSkpfX0pLEllLmZvckVhY2goWyJwb3N0''@;'; put 'put ''IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihqdCl7ZnVuY3Rpb24gcG4oVnQpe3JldHVybiBmdW5jdGlvbihtcixNbixqbil7cmV0dXJuIHRoaXMucmVxdWVzdChqcihqbnx8e30se21ldGhvZDpqdCxoZWFkZXJzOlZ0P3siQ29udGVudC1UeXBlIjoibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9Ont9''@;'; put 'put ''LHVybDptcixkYXRhOk1ufSkpfX1hby5wcm90b3R5cGVbanRdPXBuKCksYW8ucHJvdG90eXBlW2p0KyJGb3JtIl09cG4oITApfSk7dmFyIG9sPWFvO2NsYXNzICRve2NvbnN0cnVjdG9yKGp0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YganQpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3Ig''@;'; put 'put ''bXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCBwbjt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24obXIpe3BuPW1yfSk7Y29uc3QgVnQ9dGhpczt0aGlzLnByb21pc2UudGhlbihEbj0+e2lmKCFWdC5fbGlzdGVuZXJzKXJldHVybjtsZXQgbXI9VnQuX2xpc3RlbmVycy5sZW5ndGg7''@;'; put 'put ''Zm9yKDttci0tID4wOylWdC5fbGlzdGVuZXJzW21yXShEbik7VnQuX2xpc3RlbmVycz1udWxsfSksdGhpcy5wcm9taXNlLnRoZW49RG49PntsZXQgbXI7Y29uc3QgTW49bmV3IFByb21pc2Uoam49PntWdC5zdWJzY3JpYmUoam4pLG1yPWpufSkudGhlbihEbik7cmV0dXJuIE1uLmNhbmNlbD1m''@;'; put 'put ''dW5jdGlvbigpe1Z0LnVuc3Vic2NyaWJlKG1yKX0sTW59LGp0KGZ1bmN0aW9uKG1yLE1uLGpuKXtWdC5yZWFzb258fChWdC5yZWFzb249bmV3IGNvKG1yLE1uLGpuKSxwbihWdC5yZWFzb24pKX0pfXRocm93SWZSZXF1ZXN0ZWQoKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn1z''@;'; put 'put ''dWJzY3JpYmUoanQpe3RoaXMucmVhc29uP2p0KHRoaXMucmVhc29uKTp0aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2goanQpOnRoaXMuX2xpc3RlbmVycz1banRdfXVuc3Vic2NyaWJlKGp0KXtpZighdGhpcy5fbGlzdGVuZXJzKXJldHVybjtjb25zdCBwbj10aGlzLl9saXN0''@;'; put 'put ''ZW5lcnMuaW5kZXhPZihqdCk7LTEhPT1wbiYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZShwbiwxKX10b0Fib3J0U2lnbmFsKCl7Y29uc3QganQ9bmV3IEFib3J0Q29udHJvbGxlcixwbj1WdD0+e2p0LmFib3J0KFZ0KX07cmV0dXJuIHRoaXMuc3Vic2NyaWJlKHBuKSxqdC5zaWduYWwudW5zdWJz''@;'; put 'put ''Y3JpYmU9KCk9PnRoaXMudW5zdWJzY3JpYmUocG4pLGp0LnNpZ25hbH1zdGF0aWMgc291cmNlKCl7bGV0IGp0O3JldHVybnt0b2tlbjpuZXcgJG8oZnVuY3Rpb24oRG4pe2p0PURufSksY2FuY2VsOmp0fX19dmFyIFRsPSRvO2NvbnN0IEpvPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9j''@;'; put 'put ''b2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoy''@;'; put 'put ''MDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1h''@;'; put 'put ''bmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQw''@;'; put 'put ''NyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6''@;'; put 'put ''NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25S''@;'; put 'put ''ZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZh''@;'; put 'put ''aWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVx''@;'; put 'put ''dWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhKbykuZm9yRWFjaCgoW0h0LGp0XSk9PntKb1tqdF09SHR9KTt2YXIgeWk9Sm87Y29uc3QgX3M9ZnVuY3Rpb24gS2woSHQpe2NvbnN0IGp0PW5ldyBvbChIdCkscG49VihvbC5wcm90b3R5cGUucmVxdWVzdCxqdCk7cmV0dXJuIEllLmV4dGVuZChw''@;'; put 'put ''bixvbC5wcm90b3R5cGUsanQse2FsbE93bktleXM6ITB9KSxJZS5leHRlbmQocG4sanQsbnVsbCx7YWxsT3duS2V5czohMH0pLHBuLmNyZWF0ZT1mdW5jdGlvbihEbil7cmV0dXJuIEtsKGpyKEh0LERuKSl9LHBufShRaSk7X3MuQXhpb3M9b2wsX3MuQ2FuY2VsZWRFcnJvcj1jbyxfcy5DYW5j''@;'; put 'put ''ZWxUb2tlbj1UbCxfcy5pc0NhbmNlbD1Gcixfcy5WRVJTSU9OPSIxLjEyLjIiLF9zLnRvRm9ybURhdGE9aHQsX3MuQXhpb3NFcnJvcj1hdCxfcy5DYW5jZWw9X3MuQ2FuY2VsZWRFcnJvcixfcy5hbGw9ZnVuY3Rpb24oanQpe3JldHVybiBQcm9taXNlLmFsbChqdCl9LF9zLnNwcmVhZD1mdW5j''@;'; put 'put ''dGlvbiBBbChIdCl7cmV0dXJuIGZ1bmN0aW9uKHBuKXtyZXR1cm4gSHQuYXBwbHkobnVsbCxwbil9fSxfcy5pc0F4aW9zRXJyb3I9ZnVuY3Rpb24gZnIoSHQpe3JldHVybiBJZS5pc09iamVjdChIdCkmJiEwPT09SHQuaXNBeGlvc0Vycm9yfSxfcy5tZXJnZUNvbmZpZz1qcixfcy5BeGlvc0hl''@;'; put 'put ''YWRlcnM9d2EsX3MuZm9ybVRvSlNPTj1IdD0+X2koSWUuaXNIVE1MRm9ybShIdCk/bmV3IEZvcm1EYXRhKEh0KTpIdCksX3MuZ2V0QWRhcHRlcj1TcF9nZXRBZGFwdGVyLF9zLkh0dHBTdGF0dXNDb2RlPXlpLF9zLmRlZmF1bHQ9X3MsY2UuZXhwb3J0cz1fc30sODU2NjooY2UsWCk9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIEksXztPYmplY3QuZGVmaW5lUHJvcGVydGllcyhYLHtfX2VzTW9kdWxlOnt2YWx1ZTohMH0sW1N5bWJvbC50b1N0cmluZ1RhZ106e3ZhbHVlOiJNb2R1bGUifX0pO2NvbnN0IHc9ZnVuY3Rpb24gYihXKXtyZXR1cm4gVyYmVy5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90''@;'; put 'put ''eXBlLmhhc093blByb3BlcnR5LmNhbGwoVywiZGVmYXVsdCIpP1cuZGVmYXVsdDpXfShmdW5jdGlvbiBwKCl7aWYoXylyZXR1cm4gSTtfPTE7Y29uc3QgVz0yMTQ3NDgzNjQ3LHE9MzYsVGU9L154bi0tLyxNZT0vW15cMC1ceDdGXS8sWmU9L1tceDJFXHUzMDAyXHVGRjBFXHVGRjYxXS9nLEI9''@;'; put 'put ''e292ZXJmbG93OiJPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2VzcyIsIm5vdC1iYXNpYyI6IklsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCkiLCJpbnZhbGlkLWlucHV0IjoiSW52YWxpZCBpbnB1dCJ9LHk9TWF0aC5mbG9v''@;'; put 'put ''cix4PVN0cmluZy5mcm9tQ2hhckNvZGU7ZnVuY3Rpb24gQyhDZSl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoQltDZV0pfWZ1bmN0aW9uIEgoQ2UsVWUpe2NvbnN0IEplPUNlLnNwbGl0KCJAIik7bGV0IGl0PSIiO0plLmxlbmd0aD4xJiYoaXQ9SmVbMF0rIkAiLENlPUplWzFdKTtjb25zdCB5ZT1m''@;'; put 'put ''dW5jdGlvbiBUKENlLFVlKXtjb25zdCBKZT1bXTtsZXQgaXQ9Q2UubGVuZ3RoO2Zvcig7aXQtLTspSmVbaXRdPVVlKENlW2l0XSk7cmV0dXJuIEplfSgoQ2U9Q2UucmVwbGFjZShaZSwiLiIpKS5zcGxpdCgiLiIpLFVlKS5qb2luKCIuIik7cmV0dXJuIGl0K3llfWZ1bmN0aW9uIGooQ2Upe2Nv''@;'; put 'put ''bnN0IFVlPVtdO2xldCBKZT0wO2NvbnN0IGl0PUNlLmxlbmd0aDtmb3IoO0plPGl0Oyl7Y29uc3QgeGU9Q2UuY2hhckNvZGVBdChKZSsrKTtpZih4ZT49NTUyOTYmJnhlPD01NjMxOSYmSmU8aXQpe2NvbnN0IHllPUNlLmNoYXJDb2RlQXQoSmUrKyk7NTYzMjA9PSg2NDUxMiZ5ZSk/VWUucHVz''@;'; put 'put ''aCgoKDEwMjMmeGUpPDwxMCkrKDEwMjMmeWUpKzY1NTM2KTooVWUucHVzaCh4ZSksSmUtLSl9ZWxzZSBVZS5wdXNoKHhlKX1yZXR1cm4gVWV9Y29uc3QgbT1mdW5jdGlvbihDZSl7cmV0dXJuIENlPj00OCYmQ2U8NTg/Q2UtNDgrMjY6Q2U+PTY1JiZDZTw5MT9DZS02NTpDZT49OTcmJkNlPDEy''@;'; put 'put ''Mz9DZS05NzpxfSxBPWZ1bmN0aW9uKENlLFVlKXtyZXR1cm4gQ2UrMjIrNzUqKENlPDI2KS0oKDAhPVVlKTw8NSl9LGFlPWZ1bmN0aW9uKENlLFVlLEplKXtsZXQgaXQ9MDtmb3IoQ2U9SmU/eShDZS83MDApOkNlPj4xLENlKz15KENlL1VlKTtDZT40NTU7aXQrPXEpQ2U9eShDZS8zNSk7cmV0''@;'; put 'put ''dXJuIHkoaXQrMzYqQ2UvKENlKzM4KSl9LG5lPWZ1bmN0aW9uKENlKXtjb25zdCBVZT1bXSxKZT1DZS5sZW5ndGg7bGV0IGl0PTAseGU9MTI4LHllPTcyLEtlPUNlLmxhc3RJbmRleE9mKCItIik7S2U8MCYmKEtlPTApO2ZvcihsZXQgamU9MDtqZTxLZTsrK2plKUNlLmNoYXJDb2RlQXQoamUp''@;'; put 'put ''Pj0xMjgmJkMoIm5vdC1iYXNpYyIpLFVlLnB1c2goQ2UuY2hhckNvZGVBdChqZSkpO2ZvcihsZXQgamU9S2U+MD9LZSsxOjA7amU8SmU7KXtjb25zdCBrZT1pdDtmb3IobGV0IExlPTEsUmU9cTs7UmUrPXEpe2plPj1KZSYmQygiaW52YWxpZC1pbnB1dCIpO2NvbnN0IFZlPW0oQ2UuY2hhckNv''@;'; put 'put ''ZGVBdChqZSsrKSk7VmU+PXEmJkMoImludmFsaWQtaW5wdXQiKSxWZT55KChXLWl0KS9MZSkmJkMoIm92ZXJmbG93IiksaXQrPVZlKkxlO2NvbnN0IEFlPVJlPD15ZT8xOlJlPj15ZSsyNj8yNjpSZS15ZTtpZihWZTxBZSlicmVhaztjb25zdCBEZT1xLUFlO0xlPnkoVy9EZSkmJkMoIm92ZXJm''@;'; put 'put ''bG93IiksTGUqPURlfWNvbnN0IEhlPVVlLmxlbmd0aCsxO3llPWFlKGl0LWtlLEhlLDA9PWtlKSx5KGl0L0hlKT5XLXhlJiZDKCJvdmVyZmxvdyIpLHhlKz15KGl0L0hlKSxpdCU9SGUsVWUuc3BsaWNlKGl0KyssMCx4ZSl9cmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KC4uLlVlKX0sc2U9''@;'; put 'put ''ZnVuY3Rpb24oQ2Upe2NvbnN0IFVlPVtdLEplPShDZT1qKENlKSkubGVuZ3RoO2xldCBpdD0xMjgseGU9MCx5ZT03Mjtmb3IoY29uc3Qga2Ugb2YgQ2Upa2U8MTI4JiZVZS5wdXNoKHgoa2UpKTtjb25zdCBLZT1VZS5sZW5ndGg7bGV0IGplPUtlO2ZvcihLZSYmVWUucHVzaCgiLSIpO2plPEpl''@;'; put 'put ''Oyl7bGV0IGtlPVc7Zm9yKGNvbnN0IExlIG9mIENlKUxlPj1pdCYmTGU8a2UmJihrZT1MZSk7Y29uc3QgSGU9amUrMTtrZS1pdD55KChXLXhlKS9IZSkmJkMoIm92ZXJmbG93IikseGUrPShrZS1pdCkqSGUsaXQ9a2U7Zm9yKGNvbnN0IExlIG9mIENlKWlmKExlPGl0JiYrK3hlPlcmJkMoIm92''@;'; put 'put ''ZXJmbG93IiksTGU9PT1pdCl7bGV0IFJlPXhlO2ZvcihsZXQgVmU9cTs7VmUrPXEpe2NvbnN0IEFlPVZlPD15ZT8xOlZlPj15ZSsyNj8yNjpWZS15ZTtpZihSZTxBZSlicmVhaztjb25zdCBEZT1SZS1BZSxfdD1xLUFlO1VlLnB1c2goeChBKEFlK0RlJV90LDApKSksUmU9eShEZS9fdCl9VWUu''@;'; put 'put ''cHVzaCh4KEEoUmUsMCkpKSx5ZT1hZSh4ZSxIZSxqZT09PUtlKSx4ZT0wLCsramV9Kyt4ZSwrK2l0fXJldHVybiBVZS5qb2luKCIiKX07cmV0dXJuIEk9e3ZlcnNpb246IjIuMy4xIix1Y3MyOntkZWNvZGU6aixlbmNvZGU6Q2U9PlN0cmluZy5mcm9tQ29kZVBvaW50KC4uLkNlKX0sZGVjb2Rl''@;'; put 'put ''Om5lLGVuY29kZTpzZSx0b0FTQ0lJOmZ1bmN0aW9uKENlKXtyZXR1cm4gSChDZSxmdW5jdGlvbihVZSl7cmV0dXJuIE1lLnRlc3QoVWUpPyJ4bi0tIitzZShVZSk6VWV9KX0sdG9Vbmljb2RlOmZ1bmN0aW9uKENlKXtyZXR1cm4gSChDZSxmdW5jdGlvbihVZSl7cmV0dXJuIFRlLnRlc3QoVWUp''@;'; put 'put ''P25lKFVlLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpOlVlfSl9fX0oKSksRj1bImFjIiwiY29tLmFjIiwiZWR1LmFjIiwiZ292LmFjIiwibWlsLmFjIiwibmV0LmFjIiwib3JnLmFjIiwiYWQiLCJhZSIsImFjLmFlIiwiY28uYWUiLCJnb3YuYWUiLCJtaWwuYWUiLCJuZXQuYWUiLCJvcmcuYWUi''@;'; put 'put ''LCJzY2guYWUiLCJhZXJvIiwiYWlybGluZS5hZXJvIiwiYWlycG9ydC5hZXJvIiwiYWNjaWRlbnQtaW52ZXN0aWdhdGlvbi5hZXJvIiwiYWNjaWRlbnQtcHJldmVudGlvbi5hZXJvIiwiYWVyb2JhdGljLmFlcm8iLCJhZXJvY2x1Yi5hZXJvIiwiYWVyb2Ryb21lLmFlcm8iLCJhZ2VudHMuYWVy''@;'; put 'put ''byIsImFpci1zdXJ2ZWlsbGFuY2UuYWVybyIsImFpci10cmFmZmljLWNvbnRyb2wuYWVybyIsImFpcmNyYWZ0LmFlcm8iLCJhaXJ0cmFmZmljLmFlcm8iLCJhbWJ1bGFuY2UuYWVybyIsImFzc29jaWF0aW9uLmFlcm8iLCJhdXRob3IuYWVybyIsImJhbGxvb25pbmcuYWVybyIsImJyb2tlci5h''@;'; put 'put ''ZXJvIiwiY2FhLmFlcm8iLCJjYXJnby5hZXJvIiwiY2F0ZXJpbmcuYWVybyIsImNlcnRpZmljYXRpb24uYWVybyIsImNoYW1waW9uc2hpcC5hZXJvIiwiY2hhcnRlci5hZXJvIiwiY2l2aWxhdmlhdGlvbi5hZXJvIiwiY2x1Yi5hZXJvIiwiY29uZmVyZW5jZS5hZXJvIiwiY29uc3VsdGFudC5h''@;'; put 'put ''ZXJvIiwiY29uc3VsdGluZy5hZXJvIiwiY29udHJvbC5hZXJvIiwiY291bmNpbC5hZXJvIiwiY3Jldy5hZXJvIiwiZGVzaWduLmFlcm8iLCJkZ2NhLmFlcm8iLCJlZHVjYXRvci5hZXJvIiwiZW1lcmdlbmN5LmFlcm8iLCJlbmdpbmUuYWVybyIsImVuZ2luZWVyLmFlcm8iLCJlbnRlcnRhaW5t''@;'; put 'put ''ZW50LmFlcm8iLCJlcXVpcG1lbnQuYWVybyIsImV4Y2hhbmdlLmFlcm8iLCJleHByZXNzLmFlcm8iLCJmZWRlcmF0aW9uLmFlcm8iLCJmbGlnaHQuYWVybyIsImZyZWlnaHQuYWVybyIsImZ1ZWwuYWVybyIsImdsaWRpbmcuYWVybyIsImdvdmVybm1lbnQuYWVybyIsImdyb3VuZGhhbmRsaW5n''@;'; put 'put ''LmFlcm8iLCJncm91cC5hZXJvIiwiaGFuZ2dsaWRpbmcuYWVybyIsImhvbWVidWlsdC5hZXJvIiwiaW5zdXJhbmNlLmFlcm8iLCJqb3VybmFsLmFlcm8iLCJqb3VybmFsaXN0LmFlcm8iLCJsZWFzaW5nLmFlcm8iLCJsb2dpc3RpY3MuYWVybyIsIm1hZ2F6aW5lLmFlcm8iLCJtYWludGVuYW5j''@;'; put 'put ''ZS5hZXJvIiwibWFya2V0cGxhY2UuYWVybyIsIm1lZGlhLmFlcm8iLCJtaWNyb2xpZ2h0LmFlcm8iLCJtb2RlbGxpbmcuYWVybyIsIm5hdmlnYXRpb24uYWVybyIsInBhcmFjaHV0aW5nLmFlcm8iLCJwYXJhZ2xpZGluZy5hZXJvIiwicGFzc2VuZ2VyLWFzc29jaWF0aW9uLmFlcm8iLCJwaWxv''@;'; put 'put ''dC5hZXJvIiwicHJlc3MuYWVybyIsInByb2R1Y3Rpb24uYWVybyIsInJlY3JlYXRpb24uYWVybyIsInJlcGJvZHkuYWVybyIsInJlcy5hZXJvIiwicmVzZWFyY2guYWVybyIsInJvdG9yY3JhZnQuYWVybyIsInNhZmV0eS5hZXJvIiwic2NpZW50aXN0LmFlcm8iLCJzZXJ2aWNlcy5hZXJvIiwi''@;'; put 'put ''c2hvdy5hZXJvIiwic2t5ZGl2aW5nLmFlcm8iLCJzb2Z0d2FyZS5hZXJvIiwic3R1ZGVudC5hZXJvIiwidGF4aS5hZXJvIiwidHJhZGVyLmFlcm8iLCJ0cmFkaW5nLmFlcm8iLCJ0cmFpbmVyLmFlcm8iLCJ1bmlvbi5hZXJvIiwid29ya2luZ2dyb3VwLmFlcm8iLCJ3b3Jrcy5hZXJvIiwiYWYi''@;'; put 'put ''LCJjb20uYWYiLCJlZHUuYWYiLCJnb3YuYWYiLCJuZXQuYWYiLCJvcmcuYWYiLCJhZyIsImNvLmFnIiwiY29tLmFnIiwibmV0LmFnIiwibm9tLmFnIiwib3JnLmFnIiwiYWkiLCJjb20uYWkiLCJuZXQuYWkiLCJvZmYuYWkiLCJvcmcuYWkiLCJhbCIsImNvbS5hbCIsImVkdS5hbCIsImdvdi5h''@;'; put 'put ''bCIsIm1pbC5hbCIsIm5ldC5hbCIsIm9yZy5hbCIsImFtIiwiY28uYW0iLCJjb20uYW0iLCJjb21tdW5lLmFtIiwibmV0LmFtIiwib3JnLmFtIiwiYW8iLCJjby5hbyIsImVkLmFvIiwiZWR1LmFvIiwiZ292LmFvIiwiZ3YuYW8iLCJpdC5hbyIsIm9nLmFvIiwib3JnLmFvIiwicGIuYW8iLCJh''@;'; put 'put ''cSIsImFyIiwiYmV0LmFyIiwiY29tLmFyIiwiY29vcC5hciIsImVkdS5hciIsImdvYi5hciIsImdvdi5hciIsImludC5hciIsIm1pbC5hciIsIm11c2ljYS5hciIsIm11dHVhbC5hciIsIm5ldC5hciIsIm9yZy5hciIsInNlbmFzYS5hciIsInR1ci5hciIsImFycGEiLCJlMTY0LmFycGEiLCJo''@;'; put 'put ''b21lLmFycGEiLCJpbi1hZGRyLmFycGEiLCJpcDYuYXJwYSIsImlyaXMuYXJwYSIsInVyaS5hcnBhIiwidXJuLmFycGEiLCJhcyIsImdvdi5hcyIsImFzaWEiLCJhdCIsImFjLmF0Iiwic3RoLmFjLmF0IiwiY28uYXQiLCJndi5hdCIsIm9yLmF0IiwiYXUiLCJhc24uYXUiLCJjb20uYXUiLCJl''@;'; put 'put ''ZHUuYXUiLCJnb3YuYXUiLCJpZC5hdSIsIm5ldC5hdSIsIm9yZy5hdSIsImNvbmYuYXUiLCJvei5hdSIsImFjdC5hdSIsIm5zdy5hdSIsIm50LmF1IiwicWxkLmF1Iiwic2EuYXUiLCJ0YXMuYXUiLCJ2aWMuYXUiLCJ3YS5hdSIsImFjdC5lZHUuYXUiLCJjYXRob2xpYy5lZHUuYXUiLCJuc3cu''@;'; put 'put ''ZWR1LmF1IiwibnQuZWR1LmF1IiwicWxkLmVkdS5hdSIsInNhLmVkdS5hdSIsInRhcy5lZHUuYXUiLCJ2aWMuZWR1LmF1Iiwid2EuZWR1LmF1IiwicWxkLmdvdi5hdSIsInNhLmdvdi5hdSIsInRhcy5nb3YuYXUiLCJ2aWMuZ292LmF1Iiwid2EuZ292LmF1Iiwic2Nob29scy5uc3cuZWR1LmF1''@;'; put 'put ''IiwiYXciLCJjb20uYXciLCJheCIsImF6IiwiYml6LmF6IiwiY29tLmF6IiwiZWR1LmF6IiwiZ292LmF6IiwiaW5mby5heiIsImludC5heiIsIm1pbC5heiIsIm5hbWUuYXoiLCJuZXQuYXoiLCJvcmcuYXoiLCJwcC5heiIsInByby5heiIsImJhIiwiY29tLmJhIiwiZWR1LmJhIiwiZ292LmJh''@;'; put 'put ''IiwibWlsLmJhIiwibmV0LmJhIiwib3JnLmJhIiwiYmIiLCJiaXouYmIiLCJjby5iYiIsImNvbS5iYiIsImVkdS5iYiIsImdvdi5iYiIsImluZm8uYmIiLCJuZXQuYmIiLCJvcmcuYmIiLCJzdG9yZS5iYiIsInR2LmJiIiwiKi5iZCIsImJlIiwiYWMuYmUiLCJiZiIsImdvdi5iZiIsImJnIiwi''@;'; put 'put ''MC5iZyIsIjEuYmciLCIyLmJnIiwiMy5iZyIsIjQuYmciLCI1LmJnIiwiNi5iZyIsIjcuYmciLCI4LmJnIiwiOS5iZyIsImEuYmciLCJiLmJnIiwiYy5iZyIsImQuYmciLCJlLmJnIiwiZi5iZyIsImcuYmciLCJoLmJnIiwiaS5iZyIsImouYmciLCJrLmJnIiwibC5iZyIsIm0uYmciLCJuLmJn''@;'; put 'put ''Iiwiby5iZyIsInAuYmciLCJxLmJnIiwici5iZyIsInMuYmciLCJ0LmJnIiwidS5iZyIsInYuYmciLCJ3LmJnIiwieC5iZyIsInkuYmciLCJ6LmJnIiwiYmgiLCJjb20uYmgiLCJlZHUuYmgiLCJnb3YuYmgiLCJuZXQuYmgiLCJvcmcuYmgiLCJiaSIsImNvLmJpIiwiY29tLmJpIiwiZWR1LmJp''@;'; put 'put ''Iiwib3IuYmkiLCJvcmcuYmkiLCJiaXoiLCJiaiIsImFmcmljYS5iaiIsImFncm8uYmoiLCJhcmNoaXRlY3Rlcy5iaiIsImFzc3VyLmJqIiwiYXZvY2F0cy5iaiIsImNvLmJqIiwiY29tLmJqIiwiZWNvLmJqIiwiZWNvbm8uYmoiLCJlZHUuYmoiLCJpbmZvLmJqIiwibG9pc2lycy5iaiIsIm1v''@;'; put 'put ''bmV5LmJqIiwibmV0LmJqIiwib3JnLmJqIiwib3RlLmJqIiwicmVzdGF1cmFudC5iaiIsInJlc3RvLmJqIiwidG91cmlzbS5iaiIsInVuaXYuYmoiLCJibSIsImNvbS5ibSIsImVkdS5ibSIsImdvdi5ibSIsIm5ldC5ibSIsIm9yZy5ibSIsImJuIiwiY29tLmJuIiwiZWR1LmJuIiwiZ292LmJu''@;'; put 'put ''IiwibmV0LmJuIiwib3JnLmJuIiwiYm8iLCJjb20uYm8iLCJlZHUuYm8iLCJnb2IuYm8iLCJpbnQuYm8iLCJtaWwuYm8iLCJuZXQuYm8iLCJvcmcuYm8iLCJ0di5ibyIsIndlYi5ibyIsImFjYWRlbWlhLmJvIiwiYWdyby5ibyIsImFydGUuYm8iLCJibG9nLmJvIiwiYm9saXZpYS5ibyIsImNp''@;'; put 'put ''ZW5jaWEuYm8iLCJjb29wZXJhdGl2YS5ibyIsImRlbW9jcmFjaWEuYm8iLCJkZXBvcnRlLmJvIiwiZWNvbG9naWEuYm8iLCJlY29ub21pYS5ibyIsImVtcHJlc2EuYm8iLCJpbmRpZ2VuYS5ibyIsImluZHVzdHJpYS5ibyIsImluZm8uYm8iLCJtZWRpY2luYS5ibyIsIm1vdmltaWVudG8uYm8i''@;'; put 'put ''LCJtdXNpY2EuYm8iLCJuYXR1cmFsLmJvIiwibm9tYnJlLmJvIiwibm90aWNpYXMuYm8iLCJwYXRyaWEuYm8iLCJwbHVyaW5hY2lvbmFsLmJvIiwicG9saXRpY2EuYm8iLCJwcm9mZXNpb25hbC5ibyIsInB1ZWJsby5ibyIsInJldmlzdGEuYm8iLCJzYWx1ZC5ibyIsInRlY25vbG9naWEuYm8i''@;'; put 'put ''LCJ0a3NhdC5ibyIsInRyYW5zcG9ydGUuYm8iLCJ3aWtpLmJvIiwiYnIiLCI5Z3VhY3UuYnIiLCJhYmMuYnIiLCJhZG0uYnIiLCJhZHYuYnIiLCJhZ3IuYnIiLCJhanUuYnIiLCJhbS5iciIsImFuYW5pLmJyIiwiYXBhcmVjaWRhLmJyIiwiYXBwLmJyIiwiYXJxLmJyIiwiYXJ0LmJyIiwiYXRv''@;'; put 'put ''LmJyIiwiYi5iciIsImJhcnVlcmkuYnIiLCJiZWxlbS5iciIsImJldC5iciIsImJoei5iciIsImJpYi5iciIsImJpby5iciIsImJsb2cuYnIiLCJibWQuYnIiLCJib2F2aXN0YS5iciIsImJzYi5iciIsImNhbXBpbmFncmFuZGUuYnIiLCJjYW1waW5hcy5iciIsImNheGlhcy5iciIsImNpbS5i''@;'; put 'put ''ciIsImNuZy5iciIsImNudC5iciIsImNvbS5iciIsImNvbnRhZ2VtLmJyIiwiY29vcC5iciIsImNvei5iciIsImNyaS5iciIsImN1aWFiYS5iciIsImN1cml0aWJhLmJyIiwiZGVmLmJyIiwiZGVzLmJyIiwiZGV0LmJyIiwiZGV2LmJyIiwiZWNuLmJyIiwiZWNvLmJyIiwiZWR1LmJyIiwiZW1w''@;'; put 'put ''LmJyIiwiZW5mLmJyIiwiZW5nLmJyIiwiZXNwLmJyIiwiZXRjLmJyIiwiZXRpLmJyIiwiZmFyLmJyIiwiZmVpcmEuYnIiLCJmbG9nLmJyIiwiZmxvcmlwYS5iciIsImZtLmJyIiwiZm5kLmJyIiwiZm9ydGFsLmJyIiwiZm90LmJyIiwiZm96LmJyIiwiZnN0LmJyIiwiZzEyLmJyIiwiZ2VvLmJy''@;'; put 'put ''IiwiZ2dmLmJyIiwiZ29pYW5pYS5iciIsImdvdi5iciIsImFjLmdvdi5iciIsImFsLmdvdi5iciIsImFtLmdvdi5iciIsImFwLmdvdi5iciIsImJhLmdvdi5iciIsImNlLmdvdi5iciIsImRmLmdvdi5iciIsImVzLmdvdi5iciIsImdvLmdvdi5iciIsIm1hLmdvdi5iciIsIm1nLmdvdi5iciIs''@;'; put 'put ''Im1zLmdvdi5iciIsIm10Lmdvdi5iciIsInBhLmdvdi5iciIsInBiLmdvdi5iciIsInBlLmdvdi5iciIsInBpLmdvdi5iciIsInByLmdvdi5iciIsInJqLmdvdi5iciIsInJuLmdvdi5iciIsInJvLmdvdi5iciIsInJyLmdvdi5iciIsInJzLmdvdi5iciIsInNjLmdvdi5iciIsInNlLmdvdi5i''@;'; put 'put ''ciIsInNwLmdvdi5iciIsInRvLmdvdi5iciIsImdydS5iciIsImltYi5iciIsImluZC5iciIsImluZi5iciIsImphYi5iciIsImphbXBhLmJyIiwiamRmLmJyIiwiam9pbnZpbGxlLmJyIiwiam9yLmJyIiwianVzLmJyIiwibGVnLmJyIiwibGVpbGFvLmJyIiwibGVsLmJyIiwibG9nLmJyIiwi''@;'; put 'put ''bG9uZHJpbmEuYnIiLCJtYWNhcGEuYnIiLCJtYWNlaW8uYnIiLCJtYW5hdXMuYnIiLCJtYXJpbmdhLmJyIiwibWF0LmJyIiwibWVkLmJyIiwibWlsLmJyIiwibW9yZW5hLmJyIiwibXAuYnIiLCJtdXMuYnIiLCJuYXRhbC5iciIsIm5ldC5iciIsIm5pdGVyb2kuYnIiLCIqLm5vbS5iciIsIm5v''@;'; put 'put ''dC5iciIsIm50ci5iciIsIm9kby5iciIsIm9uZy5iciIsIm9yZy5iciIsIm9zYXNjby5iciIsInBhbG1hcy5iciIsInBvYS5iciIsInBwZy5iciIsInByby5iciIsInBzYy5iciIsInBzaS5iciIsInB2aC5iciIsInFzbC5iciIsInJhZGlvLmJyIiwicmVjLmJyIiwicmVjaWZlLmJyIiwicmVw''@;'; put 'put ''LmJyIiwicmliZWlyYW8uYnIiLCJyaW8uYnIiLCJyaW9icmFuY28uYnIiLCJyaW9wcmV0by5iciIsInNhbHZhZG9yLmJyIiwic2FtcGEuYnIiLCJzYW50YW1hcmlhLmJyIiwic2FudG9hbmRyZS5iciIsInNhb2Jlcm5hcmRvLmJyIiwic2FvZ29uY2EuYnIiLCJzZWcuYnIiLCJzamMuYnIiLCJz''@;'; put 'put ''bGcuYnIiLCJzbHouYnIiLCJzb3JvY2FiYS5iciIsInNydi5iciIsInRheGkuYnIiLCJ0Yy5iciIsInRlYy5iciIsInRlby5iciIsInRoZS5iciIsInRtcC5iciIsInRyZC5iciIsInR1ci5iciIsInR2LmJyIiwidWRpLmJyIiwidmV0LmJyIiwidml4LmJyIiwidmxvZy5iciIsIndpa2kuYnIi''@;'; put 'put ''LCJ6bGcuYnIiLCJicyIsImNvbS5icyIsImVkdS5icyIsImdvdi5icyIsIm5ldC5icyIsIm9yZy5icyIsImJ0IiwiY29tLmJ0IiwiZWR1LmJ0IiwiZ292LmJ0IiwibmV0LmJ0Iiwib3JnLmJ0IiwiYnYiLCJidyIsImNvLmJ3Iiwib3JnLmJ3IiwiYnkiLCJnb3YuYnkiLCJtaWwuYnkiLCJjb20u''@;'; put 'put ''YnkiLCJvZi5ieSIsImJ6IiwiY28uYnoiLCJjb20uYnoiLCJlZHUuYnoiLCJnb3YuYnoiLCJuZXQuYnoiLCJvcmcuYnoiLCJjYSIsImFiLmNhIiwiYmMuY2EiLCJtYi5jYSIsIm5iLmNhIiwibmYuY2EiLCJubC5jYSIsIm5zLmNhIiwibnQuY2EiLCJudS5jYSIsIm9uLmNhIiwicGUuY2EiLCJx''@;'; put 'put ''Yy5jYSIsInNrLmNhIiwieWsuY2EiLCJnYy5jYSIsImNhdCIsImNjIiwiY2QiLCJnb3YuY2QiLCJjZiIsImNnIiwiY2giLCJjaSIsImFjLmNpIiwiYVx4ZTlyb3BvcnQuY2kiLCJhc3NvLmNpIiwiY28uY2kiLCJjb20uY2kiLCJlZC5jaSIsImVkdS5jaSIsImdvLmNpIiwiZ291di5jaSIsImlu''@;'; put 'put ''dC5jaSIsIm5ldC5jaSIsIm9yLmNpIiwib3JnLmNpIiwiKi5jayIsIiF3d3cuY2siLCJjbCIsImNvLmNsIiwiZ29iLmNsIiwiZ292LmNsIiwibWlsLmNsIiwiY20iLCJjby5jbSIsImNvbS5jbSIsImdvdi5jbSIsIm5ldC5jbSIsImNuIiwiYWMuY24iLCJjb20uY24iLCJlZHUuY24iLCJnb3Yu''@;'; put 'put ''Y24iLCJtaWwuY24iLCJuZXQuY24iLCJvcmcuY24iLCJcdTUxNmNcdTUzZjguY24iLCJcdTdkYjJcdTdkNjEuY24iLCJcdTdmNTFcdTdlZGMuY24iLCJhaC5jbiIsImJqLmNuIiwiY3EuY24iLCJmai5jbiIsImdkLmNuIiwiZ3MuY24iLCJneC5jbiIsImd6LmNuIiwiaGEuY24iLCJoYi5jbiIs''@;'; put 'put ''ImhlLmNuIiwiaGkuY24iLCJoay5jbiIsImhsLmNuIiwiaG4uY24iLCJqbC5jbiIsImpzLmNuIiwianguY24iLCJsbi5jbiIsIm1vLmNuIiwibm0uY24iLCJueC5jbiIsInFoLmNuIiwic2MuY24iLCJzZC5jbiIsInNoLmNuIiwic24uY24iLCJzeC5jbiIsInRqLmNuIiwidHcuY24iLCJ4ai5j''@;'; put 'put ''biIsInh6LmNuIiwieW4uY24iLCJ6ai5jbiIsImNvIiwiY29tLmNvIiwiZWR1LmNvIiwiZ292LmNvIiwibWlsLmNvIiwibmV0LmNvIiwibm9tLmNvIiwib3JnLmNvIiwiY29tIiwiY29vcCIsImNyIiwiYWMuY3IiLCJjby5jciIsImVkLmNyIiwiZmkuY3IiLCJnby5jciIsIm9yLmNyIiwic2Eu''@;'; put 'put ''Y3IiLCJjdSIsImNvbS5jdSIsImVkdS5jdSIsImdvYi5jdSIsImluZi5jdSIsIm5hdC5jdSIsIm5ldC5jdSIsIm9yZy5jdSIsImN2IiwiY29tLmN2IiwiZWR1LmN2IiwiaWQuY3YiLCJpbnQuY3YiLCJuZXQuY3YiLCJub21lLmN2Iiwib3JnLmN2IiwicHVibC5jdiIsImN3IiwiY29tLmN3Iiwi''@;'; put 'put ''ZWR1LmN3IiwibmV0LmN3Iiwib3JnLmN3IiwiY3giLCJnb3YuY3giLCJjeSIsImFjLmN5IiwiYml6LmN5IiwiY29tLmN5IiwiZWtsb2dlcy5jeSIsImdvdi5jeSIsImx0ZC5jeSIsIm1pbC5jeSIsIm5ldC5jeSIsIm9yZy5jeSIsInByZXNzLmN5IiwicHJvLmN5IiwidG0uY3kiLCJjeiIsImRl''@;'; put 'put ''IiwiZGoiLCJkayIsImRtIiwiY28uZG0iLCJjb20uZG0iLCJlZHUuZG0iLCJnb3YuZG0iLCJuZXQuZG0iLCJvcmcuZG0iLCJkbyIsImFydC5kbyIsImNvbS5kbyIsImVkdS5kbyIsImdvYi5kbyIsImdvdi5kbyIsIm1pbC5kbyIsIm5ldC5kbyIsIm9yZy5kbyIsInNsZC5kbyIsIndlYi5kbyIs''@;'; put 'put ''ImR6IiwiYXJ0LmR6IiwiYXNzby5keiIsImNvbS5keiIsImVkdS5keiIsImdvdi5keiIsIm5ldC5keiIsIm9yZy5keiIsInBvbC5keiIsInNvYy5keiIsInRtLmR6IiwiZWMiLCJjb20uZWMiLCJlZHUuZWMiLCJmaW4uZWMiLCJnb2IuZWMiLCJnb3YuZWMiLCJpbmZvLmVjIiwiazEyLmVjIiwi''@;'; put 'put ''bWVkLmVjIiwibWlsLmVjIiwibmV0LmVjIiwib3JnLmVjIiwicHJvLmVjIiwiZWR1IiwiZWUiLCJhaXAuZWUiLCJjb20uZWUiLCJlZHUuZWUiLCJmaWUuZWUiLCJnb3YuZWUiLCJsaWIuZWUiLCJtZWQuZWUiLCJvcmcuZWUiLCJwcmkuZWUiLCJyaWlrLmVlIiwiZWciLCJhYy5lZyIsImNvbS5l''@;'; put 'put ''ZyIsImVkdS5lZyIsImV1bi5lZyIsImdvdi5lZyIsImluZm8uZWciLCJtZS5lZyIsIm1pbC5lZyIsIm5hbWUuZWciLCJuZXQuZWciLCJvcmcuZWciLCJzY2kuZWciLCJzcG9ydC5lZyIsInR2LmVnIiwiKi5lciIsImVzIiwiY29tLmVzIiwiZWR1LmVzIiwiZ29iLmVzIiwibm9tLmVzIiwib3Jn''@;'; put 'put ''LmVzIiwiZXQiLCJiaXouZXQiLCJjb20uZXQiLCJlZHUuZXQiLCJnb3YuZXQiLCJpbmZvLmV0IiwibmFtZS5ldCIsIm5ldC5ldCIsIm9yZy5ldCIsImV1IiwiZmkiLCJhbGFuZC5maSIsImZqIiwiYWMuZmoiLCJiaXouZmoiLCJjb20uZmoiLCJnb3YuZmoiLCJpbmZvLmZqIiwibWlsLmZqIiwi''@;'; put 'put ''bmFtZS5maiIsIm5ldC5maiIsIm9yZy5maiIsInByby5maiIsIiouZmsiLCJmbSIsImNvbS5mbSIsImVkdS5mbSIsIm5ldC5mbSIsIm9yZy5mbSIsImZvIiwiZnIiLCJhc3NvLmZyIiwiY29tLmZyIiwiZ291di5mciIsIm5vbS5mciIsInByZC5mciIsInRtLmZyIiwiYXZvdWVzLmZyIiwiY2Np''@;'; put 'put ''LmZyIiwiZ3JldGEuZnIiLCJodWlzc2llci1qdXN0aWNlLmZyIiwiZ2EiLCJnYiIsImdkIiwiZWR1LmdkIiwiZ292LmdkIiwiZ2UiLCJjb20uZ2UiLCJlZHUuZ2UiLCJnb3YuZ2UiLCJuZXQuZ2UiLCJvcmcuZ2UiLCJwdnQuZ2UiLCJzY2hvb2wuZ2UiLCJnZiIsImdnIiwiY28uZ2ciLCJuZXQu''@;'; put 'put ''Z2ciLCJvcmcuZ2ciLCJnaCIsImNvbS5naCIsImVkdS5naCIsImdvdi5naCIsIm1pbC5naCIsIm9yZy5naCIsImdpIiwiY29tLmdpIiwiZWR1LmdpIiwiZ292LmdpIiwibHRkLmdpIiwibW9kLmdpIiwib3JnLmdpIiwiZ2wiLCJjby5nbCIsImNvbS5nbCIsImVkdS5nbCIsIm5ldC5nbCIsIm9y''@;'; put 'put ''Zy5nbCIsImdtIiwiZ24iLCJhYy5nbiIsImNvbS5nbiIsImVkdS5nbiIsImdvdi5nbiIsIm5ldC5nbiIsIm9yZy5nbiIsImdvdiIsImdwIiwiYXNzby5ncCIsImNvbS5ncCIsImVkdS5ncCIsIm1vYmkuZ3AiLCJuZXQuZ3AiLCJvcmcuZ3AiLCJncSIsImdyIiwiY29tLmdyIiwiZWR1LmdyIiwi''@;'; put 'put ''Z292LmdyIiwibmV0LmdyIiwib3JnLmdyIiwiZ3MiLCJndCIsImNvbS5ndCIsImVkdS5ndCIsImdvYi5ndCIsImluZC5ndCIsIm1pbC5ndCIsIm5ldC5ndCIsIm9yZy5ndCIsImd1IiwiY29tLmd1IiwiZWR1Lmd1IiwiZ292Lmd1IiwiZ3VhbS5ndSIsImluZm8uZ3UiLCJuZXQuZ3UiLCJvcmcu''@;'; put 'put ''Z3UiLCJ3ZWIuZ3UiLCJndyIsImd5IiwiY28uZ3kiLCJjb20uZ3kiLCJlZHUuZ3kiLCJnb3YuZ3kiLCJuZXQuZ3kiLCJvcmcuZ3kiLCJoayIsImNvbS5oayIsImVkdS5oayIsImdvdi5oayIsImlkdi5oayIsIm5ldC5oayIsIm9yZy5oayIsIlx1NGUyYVx1NGViYS5oayIsIlx1NTAwYlx1NGVi''@;'; put 'put ''YS5oayIsIlx1NTE2Y1x1NTNmOC5oayIsIlx1NjUzZlx1NWU5Yy5oayIsIlx1NjU0ZVx1ODBiMi5oayIsIlx1NjU1OVx1ODBiMi5oayIsIlx1N2I4N1x1NGViYS5oayIsIlx1N2Q0NFx1N2U1NC5oayIsIlx1N2Q0NFx1N2VjNy5oayIsIlx1N2RiMlx1N2Q2MS5oayIsIlx1N2RiMlx1N2VkYy5o''@;'; put 'put ''ayIsIlx1N2VjNFx1N2U1NC5oayIsIlx1N2VjNFx1N2VjNy5oayIsIlx1N2Y1MVx1N2Q2MS5oayIsIlx1N2Y1MVx1N2VkYy5oayIsImhtIiwiaG4iLCJjb20uaG4iLCJlZHUuaG4iLCJnb2IuaG4iLCJtaWwuaG4iLCJuZXQuaG4iLCJvcmcuaG4iLCJociIsImNvbS5ociIsImZyb20uaHIiLCJp''@;'; put 'put ''ei5ociIsIm5hbWUuaHIiLCJodCIsImFkdWx0Lmh0IiwiYXJ0Lmh0IiwiYXNzby5odCIsImNvbS5odCIsImNvb3AuaHQiLCJlZHUuaHQiLCJmaXJtLmh0IiwiZ291di5odCIsImluZm8uaHQiLCJtZWQuaHQiLCJuZXQuaHQiLCJvcmcuaHQiLCJwZXJzby5odCIsInBvbC5odCIsInByby5odCIs''@;'; put 'put ''InJlbC5odCIsInNob3AuaHQiLCJodSIsIjIwMDAuaHUiLCJhZ3Jhci5odSIsImJvbHQuaHUiLCJjYXNpbm8uaHUiLCJjaXR5Lmh1IiwiY28uaHUiLCJlcm90aWNhLmh1IiwiZXJvdGlrYS5odSIsImZpbG0uaHUiLCJmb3J1bS5odSIsImdhbWVzLmh1IiwiaG90ZWwuaHUiLCJpbmZvLmh1Iiwi''@;'; put 'put ''aW5nYXRsYW4uaHUiLCJqb2dhc3ouaHUiLCJrb255dmVsby5odSIsImxha2FzLmh1IiwibWVkaWEuaHUiLCJuZXdzLmh1Iiwib3JnLmh1IiwicHJpdi5odSIsInJla2xhbS5odSIsInNleC5odSIsInNob3AuaHUiLCJzcG9ydC5odSIsInN1bGkuaHUiLCJzemV4Lmh1IiwidG0uaHUiLCJ0b3pz''@;'; put 'put ''ZGUuaHUiLCJ1dGF6YXMuaHUiLCJ2aWRlby5odSIsImlkIiwiYWMuaWQiLCJiaXouaWQiLCJjby5pZCIsImRlc2EuaWQiLCJnby5pZCIsIm1pbC5pZCIsIm15LmlkIiwibmV0LmlkIiwib3IuaWQiLCJwb25wZXMuaWQiLCJzY2guaWQiLCJ3ZWIuaWQiLCJpZSIsImdvdi5pZSIsImlsIiwiYWMu''@;'; put 'put ''aWwiLCJjby5pbCIsImdvdi5pbCIsImlkZi5pbCIsImsxMi5pbCIsIm11bmkuaWwiLCJuZXQuaWwiLCJvcmcuaWwiLCJcdTA1ZDlcdTA1ZTlcdTA1ZThcdTA1ZDBcdTA1ZGMiLCJcdTA1ZDBcdTA1ZTdcdTA1ZDNcdTA1ZGVcdTA1ZDlcdTA1ZDQuXHUwNWQ5XHUwNWU5XHUwNWU4XHUwNWQwXHUw''@;'; put 'put ''NWRjIiwiXHUwNWQ5XHUwNWU5XHUwNWQ1XHUwNWQxLlx1MDVkOVx1MDVlOVx1MDVlOFx1MDVkMFx1MDVkYyIsIlx1MDVlNlx1MDVkNFx1MDVkYy5cdTA1ZDlcdTA1ZTlcdTA1ZThcdTA1ZDBcdTA1ZGMiLCJcdTA1ZGVcdTA1ZGVcdTA1ZTlcdTA1ZGMuXHUwNWQ5XHUwNWU5XHUwNWU4XHUwNWQw''@;'; put 'put ''XHUwNWRjIiwiaW0iLCJhYy5pbSIsImNvLmltIiwibHRkLmNvLmltIiwicGxjLmNvLmltIiwiY29tLmltIiwibmV0LmltIiwib3JnLmltIiwidHQuaW0iLCJ0di5pbSIsImluIiwiNWcuaW4iLCI2Zy5pbiIsImFjLmluIiwiYWkuaW4iLCJhbS5pbiIsImJpaGFyLmluIiwiYml6LmluIiwiYnVz''@;'; put 'put ''aW5lc3MuaW4iLCJjYS5pbiIsImNuLmluIiwiY28uaW4iLCJjb20uaW4iLCJjb29wLmluIiwiY3MuaW4iLCJkZWxoaS5pbiIsImRyLmluIiwiZWR1LmluIiwiZXIuaW4iLCJmaXJtLmluIiwiZ2VuLmluIiwiZ292LmluIiwiZ3VqYXJhdC5pbiIsImluZC5pbiIsImluZm8uaW4iLCJpbnQuaW4i''@;'; put 'put ''LCJpbnRlcm5ldC5pbiIsImlvLmluIiwibWUuaW4iLCJtaWwuaW4iLCJuZXQuaW4iLCJuaWMuaW4iLCJvcmcuaW4iLCJwZy5pbiIsInBvc3QuaW4iLCJwcm8uaW4iLCJyZXMuaW4iLCJ0cmF2ZWwuaW4iLCJ0di5pbiIsInVrLmluIiwidXAuaW4iLCJ1cy5pbiIsImluZm8iLCJpbnQiLCJldS5p''@;'; put 'put ''bnQiLCJpbyIsImNvLmlvIiwiY29tLmlvIiwiZWR1LmlvIiwiZ292LmlvIiwibWlsLmlvIiwibmV0LmlvIiwibm9tLmlvIiwib3JnLmlvIiwiaXEiLCJjb20uaXEiLCJlZHUuaXEiLCJnb3YuaXEiLCJtaWwuaXEiLCJuZXQuaXEiLCJvcmcuaXEiLCJpciIsImFjLmlyIiwiY28uaXIiLCJnb3Yu''@;'; put 'put ''aXIiLCJpZC5pciIsIm5ldC5pciIsIm9yZy5pciIsInNjaC5pciIsIlx1MDYyN1x1MDZjY1x1MDYzMVx1MDYyN1x1MDY0Ni5pciIsIlx1MDYyN1x1MDY0YVx1MDYzMVx1MDYyN1x1MDY0Ni5pciIsImlzIiwiaXQiLCJlZHUuaXQiLCJnb3YuaXQiLCJhYnIuaXQiLCJhYnJ1enpvLml0IiwiYW9z''@;'; put 'put ''dGEtdmFsbGV5Lml0IiwiYW9zdGF2YWxsZXkuaXQiLCJiYXMuaXQiLCJiYXNpbGljYXRhLml0IiwiY2FsLml0IiwiY2FsYWJyaWEuaXQiLCJjYW0uaXQiLCJjYW1wYW5pYS5pdCIsImVtaWxpYS1yb21hZ25hLml0IiwiZW1pbGlhcm9tYWduYS5pdCIsImVtci5pdCIsImZyaXVsaS12LWdpdWxp''@;'; put 'put ''YS5pdCIsImZyaXVsaS12ZS1naXVsaWEuaXQiLCJmcml1bGktdmVnaXVsaWEuaXQiLCJmcml1bGktdmVuZXppYS1naXVsaWEuaXQiLCJmcml1bGktdmVuZXppYWdpdWxpYS5pdCIsImZyaXVsaS12Z2l1bGlhLml0IiwiZnJpdWxpdi1naXVsaWEuaXQiLCJmcml1bGl2ZS1naXVsaWEuaXQiLCJm''@;'; put 'put ''cml1bGl2ZWdpdWxpYS5pdCIsImZyaXVsaXZlbmV6aWEtZ2l1bGlhLml0IiwiZnJpdWxpdmVuZXppYWdpdWxpYS5pdCIsImZyaXVsaXZnaXVsaWEuaXQiLCJmdmcuaXQiLCJsYXouaXQiLCJsYXppby5pdCIsImxpZy5pdCIsImxpZ3VyaWEuaXQiLCJsb20uaXQiLCJsb21iYXJkaWEuaXQiLCJs''@;'; put 'put ''b21iYXJkeS5pdCIsImx1Y2FuaWEuaXQiLCJtYXIuaXQiLCJtYXJjaGUuaXQiLCJtb2wuaXQiLCJtb2xpc2UuaXQiLCJwaWVkbW9udC5pdCIsInBpZW1vbnRlLml0IiwicG1uLml0IiwicHVnLml0IiwicHVnbGlhLml0Iiwic2FyLml0Iiwic2FyZGVnbmEuaXQiLCJzYXJkaW5pYS5pdCIsInNp''@;'; put 'put ''Yy5pdCIsInNpY2lsaWEuaXQiLCJzaWNpbHkuaXQiLCJ0YWEuaXQiLCJ0b3MuaXQiLCJ0b3NjYW5hLml0IiwidHJlbnRpbi1zdWQtdGlyb2wuaXQiLCJ0cmVudGluLXNceGZjZC10aXJvbC5pdCIsInRyZW50aW4tc3VkdGlyb2wuaXQiLCJ0cmVudGluLXNceGZjZHRpcm9sLml0IiwidHJlbnRp''@;'; put 'put ''bi1zdWVkLXRpcm9sLml0IiwidHJlbnRpbi1zdWVkdGlyb2wuaXQiLCJ0cmVudGluby5pdCIsInRyZW50aW5vLWEtYWRpZ2UuaXQiLCJ0cmVudGluby1hYWRpZ2UuaXQiLCJ0cmVudGluby1hbHRvLWFkaWdlLml0IiwidHJlbnRpbm8tYWx0b2FkaWdlLml0IiwidHJlbnRpbm8tcy10aXJvbC5p''@;'; put 'put ''dCIsInRyZW50aW5vLXN0aXJvbC5pdCIsInRyZW50aW5vLXN1ZC10aXJvbC5pdCIsInRyZW50aW5vLXNceGZjZC10aXJvbC5pdCIsInRyZW50aW5vLXN1ZHRpcm9sLml0IiwidHJlbnRpbm8tc1x4ZmNkdGlyb2wuaXQiLCJ0cmVudGluby1zdWVkLXRpcm9sLml0IiwidHJlbnRpbm8tc3VlZHRp''@;'; put 'put ''cm9sLml0IiwidHJlbnRpbm9hLWFkaWdlLml0IiwidHJlbnRpbm9hYWRpZ2UuaXQiLCJ0cmVudGlub2FsdG8tYWRpZ2UuaXQiLCJ0cmVudGlub2FsdG9hZGlnZS5pdCIsInRyZW50aW5vcy10aXJvbC5pdCIsInRyZW50aW5vc3Rpcm9sLml0IiwidHJlbnRpbm9zdWQtdGlyb2wuaXQiLCJ0cmVu''@;'; put 'put ''dGlub3NceGZjZC10aXJvbC5pdCIsInRyZW50aW5vc3VkdGlyb2wuaXQiLCJ0cmVudGlub3NceGZjZHRpcm9sLml0IiwidHJlbnRpbm9zdWVkLXRpcm9sLml0IiwidHJlbnRpbm9zdWVkdGlyb2wuaXQiLCJ0cmVudGluc3VkLXRpcm9sLml0IiwidHJlbnRpbnNceGZjZC10aXJvbC5pdCIsInRy''@;'; put 'put ''ZW50aW5zdWR0aXJvbC5pdCIsInRyZW50aW5zXHhmY2R0aXJvbC5pdCIsInRyZW50aW5zdWVkLXRpcm9sLml0IiwidHJlbnRpbnN1ZWR0aXJvbC5pdCIsInR1c2NhbnkuaXQiLCJ1bWIuaXQiLCJ1bWJyaWEuaXQiLCJ2YWwtZC1hb3N0YS5pdCIsInZhbC1kYW9zdGEuaXQiLCJ2YWxkLWFvc3Rh''@;'; put 'put ''Lml0IiwidmFsZGFvc3RhLml0IiwidmFsbGUtYW9zdGEuaXQiLCJ2YWxsZS1kLWFvc3RhLml0IiwidmFsbGUtZGFvc3RhLml0IiwidmFsbGVhb3N0YS5pdCIsInZhbGxlZC1hb3N0YS5pdCIsInZhbGxlZGFvc3RhLml0IiwidmFsbGVlLWFvc3RlLml0IiwidmFsbFx4ZTllLWFvc3RlLml0Iiwi''@;'; put 'put ''dmFsbGVlLWQtYW9zdGUuaXQiLCJ2YWxsXHhlOWUtZC1hb3N0ZS5pdCIsInZhbGxlZWFvc3RlLml0IiwidmFsbFx4ZTllYW9zdGUuaXQiLCJ2YWxsZWVkYW9zdGUuaXQiLCJ2YWxsXHhlOWVkYW9zdGUuaXQiLCJ2YW8uaXQiLCJ2ZGEuaXQiLCJ2ZW4uaXQiLCJ2ZW5ldG8uaXQiLCJhZy5pdCIs''@;'; put 'put ''ImFncmlnZW50by5pdCIsImFsLml0IiwiYWxlc3NhbmRyaWEuaXQiLCJhbHRvLWFkaWdlLml0IiwiYWx0b2FkaWdlLml0IiwiYW4uaXQiLCJhbmNvbmEuaXQiLCJhbmRyaWEtYmFybGV0dGEtdHJhbmkuaXQiLCJhbmRyaWEtdHJhbmktYmFybGV0dGEuaXQiLCJhbmRyaWFiYXJsZXR0YXRyYW5p''@;'; put 'put ''Lml0IiwiYW5kcmlhdHJhbmliYXJsZXR0YS5pdCIsImFvLml0IiwiYW9zdGEuaXQiLCJhb3N0ZS5pdCIsImFwLml0IiwiYXEuaXQiLCJhcXVpbGEuaXQiLCJhci5pdCIsImFyZXp6by5pdCIsImFzY29saS1waWNlbm8uaXQiLCJhc2NvbGlwaWNlbm8uaXQiLCJhc3RpLml0IiwiYXQuaXQiLCJh''@;'; put 'put ''di5pdCIsImF2ZWxsaW5vLml0IiwiYmEuaXQiLCJiYWxzYW4uaXQiLCJiYWxzYW4tc3VkdGlyb2wuaXQiLCJiYWxzYW4tc1x4ZmNkdGlyb2wuaXQiLCJiYWxzYW4tc3VlZHRpcm9sLml0IiwiYmFyaS5pdCIsImJhcmxldHRhLXRyYW5pLWFuZHJpYS5pdCIsImJhcmxldHRhdHJhbmlhbmRyaWEu''@;'; put 'put ''aXQiLCJiZWxsdW5vLml0IiwiYmVuZXZlbnRvLml0IiwiYmVyZ2Ftby5pdCIsImJnLml0IiwiYmkuaXQiLCJiaWVsbGEuaXQiLCJibC5pdCIsImJuLml0IiwiYm8uaXQiLCJib2xvZ25hLml0IiwiYm9semFuby5pdCIsImJvbHphbm8tYWx0b2FkaWdlLml0IiwiYm96ZW4uaXQiLCJib3plbi1z''@;'; put 'put ''dWR0aXJvbC5pdCIsImJvemVuLXNceGZjZHRpcm9sLml0IiwiYm96ZW4tc3VlZHRpcm9sLml0IiwiYnIuaXQiLCJicmVzY2lhLml0IiwiYnJpbmRpc2kuaXQiLCJicy5pdCIsImJ0Lml0IiwiYnVsc2FuLml0IiwiYnVsc2FuLXN1ZHRpcm9sLml0IiwiYnVsc2FuLXNceGZjZHRpcm9sLml0Iiwi''@;'; put 'put ''YnVsc2FuLXN1ZWR0aXJvbC5pdCIsImJ6Lml0IiwiY2EuaXQiLCJjYWdsaWFyaS5pdCIsImNhbHRhbmlzc2V0dGEuaXQiLCJjYW1waWRhbm8tbWVkaW8uaXQiLCJjYW1waWRhbm9tZWRpby5pdCIsImNhbXBvYmFzc28uaXQiLCJjYXJib25pYS1pZ2xlc2lhcy5pdCIsImNhcmJvbmlhaWdsZXNp''@;'; put 'put ''YXMuaXQiLCJjYXJyYXJhLW1hc3NhLml0IiwiY2FycmFyYW1hc3NhLml0IiwiY2FzZXJ0YS5pdCIsImNhdGFuaWEuaXQiLCJjYXRhbnphcm8uaXQiLCJjYi5pdCIsImNlLml0IiwiY2VzZW5hLWZvcmxpLml0IiwiY2VzZW5hLWZvcmxceGVjLml0IiwiY2VzZW5hZm9ybGkuaXQiLCJjZXNlbmFm''@;'; put 'put ''b3JsXHhlYy5pdCIsImNoLml0IiwiY2hpZXRpLml0IiwiY2kuaXQiLCJjbC5pdCIsImNuLml0IiwiY28uaXQiLCJjb21vLml0IiwiY29zZW56YS5pdCIsImNyLml0IiwiY3JlbW9uYS5pdCIsImNyb3RvbmUuaXQiLCJjcy5pdCIsImN0Lml0IiwiY3VuZW8uaXQiLCJjei5pdCIsImRlbGwtb2ds''@;'; put 'put ''aWFzdHJhLml0IiwiZGVsbG9nbGlhc3RyYS5pdCIsImVuLml0IiwiZW5uYS5pdCIsImZjLml0IiwiZmUuaXQiLCJmZXJtby5pdCIsImZlcnJhcmEuaXQiLCJmZy5pdCIsImZpLml0IiwiZmlyZW56ZS5pdCIsImZsb3JlbmNlLml0IiwiZm0uaXQiLCJmb2dnaWEuaXQiLCJmb3JsaS1jZXNlbmEu''@;'; put 'put ''aXQiLCJmb3JsXHhlYy1jZXNlbmEuaXQiLCJmb3JsaWNlc2VuYS5pdCIsImZvcmxceGVjY2VzZW5hLml0IiwiZnIuaXQiLCJmcm9zaW5vbmUuaXQiLCJnZS5pdCIsImdlbm9hLml0IiwiZ2Vub3ZhLml0IiwiZ28uaXQiLCJnb3JpemlhLml0IiwiZ3IuaXQiLCJncm9zc2V0by5pdCIsImlnbGVz''@;'; put 'put ''aWFzLWNhcmJvbmlhLml0IiwiaWdsZXNpYXNjYXJib25pYS5pdCIsImltLml0IiwiaW1wZXJpYS5pdCIsImlzLml0IiwiaXNlcm5pYS5pdCIsImtyLml0IiwibGEtc3BlemlhLml0IiwibGFxdWlsYS5pdCIsImxhc3BlemlhLml0IiwibGF0aW5hLml0IiwibGMuaXQiLCJsZS5pdCIsImxlY2Nl''@;'; put 'put ''Lml0IiwibGVjY28uaXQiLCJsaS5pdCIsImxpdm9ybm8uaXQiLCJsby5pdCIsImxvZGkuaXQiLCJsdC5pdCIsImx1Lml0IiwibHVjY2EuaXQiLCJtYWNlcmF0YS5pdCIsIm1hbnRvdmEuaXQiLCJtYXNzYS1jYXJyYXJhLml0IiwibWFzc2FjYXJyYXJhLml0IiwibWF0ZXJhLml0IiwibWIuaXQi''@;'; put 'put ''LCJtYy5pdCIsIm1lLml0IiwibWVkaW8tY2FtcGlkYW5vLml0IiwibWVkaW9jYW1waWRhbm8uaXQiLCJtZXNzaW5hLml0IiwibWkuaXQiLCJtaWxhbi5pdCIsIm1pbGFuby5pdCIsIm1uLml0IiwibW8uaXQiLCJtb2RlbmEuaXQiLCJtb256YS5pdCIsIm1vbnphLWJyaWFuemEuaXQiLCJtb256''@;'; put 'put ''YS1lLWRlbGxhLWJyaWFuemEuaXQiLCJtb256YWJyaWFuemEuaXQiLCJtb256YWVicmlhbnphLml0IiwibW9uemFlZGVsbGFicmlhbnphLml0IiwibXMuaXQiLCJtdC5pdCIsIm5hLml0IiwibmFwbGVzLml0IiwibmFwb2xpLml0Iiwibm8uaXQiLCJub3ZhcmEuaXQiLCJudS5pdCIsIm51b3Jv''@;'; put 'put ''Lml0Iiwib2cuaXQiLCJvZ2xpYXN0cmEuaXQiLCJvbGJpYS10ZW1waW8uaXQiLCJvbGJpYXRlbXBpby5pdCIsIm9yLml0Iiwib3Jpc3Rhbm8uaXQiLCJvdC5pdCIsInBhLml0IiwicGFkb3ZhLml0IiwicGFkdWEuaXQiLCJwYWxlcm1vLml0IiwicGFybWEuaXQiLCJwYXZpYS5pdCIsInBjLml0''@;'; put 'put ''IiwicGQuaXQiLCJwZS5pdCIsInBlcnVnaWEuaXQiLCJwZXNhcm8tdXJiaW5vLml0IiwicGVzYXJvdXJiaW5vLml0IiwicGVzY2FyYS5pdCIsInBnLml0IiwicGkuaXQiLCJwaWFjZW56YS5pdCIsInBpc2EuaXQiLCJwaXN0b2lhLml0IiwicG4uaXQiLCJwby5pdCIsInBvcmRlbm9uZS5pdCIs''@;'; put 'put ''InBvdGVuemEuaXQiLCJwci5pdCIsInByYXRvLml0IiwicHQuaXQiLCJwdS5pdCIsInB2Lml0IiwicHouaXQiLCJyYS5pdCIsInJhZ3VzYS5pdCIsInJhdmVubmEuaXQiLCJyYy5pdCIsInJlLml0IiwicmVnZ2lvLWNhbGFicmlhLml0IiwicmVnZ2lvLWVtaWxpYS5pdCIsInJlZ2dpb2NhbGFi''@;'; put 'put ''cmlhLml0IiwicmVnZ2lvZW1pbGlhLml0IiwicmcuaXQiLCJyaS5pdCIsInJpZXRpLml0IiwicmltaW5pLml0Iiwicm0uaXQiLCJybi5pdCIsInJvLml0Iiwicm9tYS5pdCIsInJvbWUuaXQiLCJyb3ZpZ28uaXQiLCJzYS5pdCIsInNhbGVybm8uaXQiLCJzYXNzYXJpLml0Iiwic2F2b25hLml0''@;'; put 'put ''Iiwic2kuaXQiLCJzaWVuYS5pdCIsInNpcmFjdXNhLml0Iiwic28uaXQiLCJzb25kcmlvLml0Iiwic3AuaXQiLCJzci5pdCIsInNzLml0Iiwic1x4ZmNkdGlyb2wuaXQiLCJzdWVkdGlyb2wuaXQiLCJzdi5pdCIsInRhLml0IiwidGFyYW50by5pdCIsInRlLml0IiwidGVtcGlvLW9sYmlhLml0''@;'; put 'put ''IiwidGVtcGlvb2xiaWEuaXQiLCJ0ZXJhbW8uaXQiLCJ0ZXJuaS5pdCIsInRuLml0IiwidG8uaXQiLCJ0b3Jpbm8uaXQiLCJ0cC5pdCIsInRyLml0IiwidHJhbmktYW5kcmlhLWJhcmxldHRhLml0IiwidHJhbmktYmFybGV0dGEtYW5kcmlhLml0IiwidHJhbmlhbmRyaWFiYXJsZXR0YS5pdCIs''@;'; put 'put ''InRyYW5pYmFybGV0dGFhbmRyaWEuaXQiLCJ0cmFwYW5pLml0IiwidHJlbnRvLml0IiwidHJldmlzby5pdCIsInRyaWVzdGUuaXQiLCJ0cy5pdCIsInR1cmluLml0IiwidHYuaXQiLCJ1ZC5pdCIsInVkaW5lLml0IiwidXJiaW5vLXBlc2Fyby5pdCIsInVyYmlub3Blc2Fyby5pdCIsInZhLml0''@;'; put 'put ''IiwidmFyZXNlLml0IiwidmIuaXQiLCJ2Yy5pdCIsInZlLml0IiwidmVuZXppYS5pdCIsInZlbmljZS5pdCIsInZlcmJhbmlhLml0IiwidmVyY2VsbGkuaXQiLCJ2ZXJvbmEuaXQiLCJ2aS5pdCIsInZpYm8tdmFsZW50aWEuaXQiLCJ2aWJvdmFsZW50aWEuaXQiLCJ2aWNlbnphLml0Iiwidml0''@;'; put 'put ''ZXJiby5pdCIsInZyLml0IiwidnMuaXQiLCJ2dC5pdCIsInZ2Lml0IiwiamUiLCJjby5qZSIsIm5ldC5qZSIsIm9yZy5qZSIsIiouam0iLCJqbyIsImFncmkuam8iLCJhaS5qbyIsImNvbS5qbyIsImVkdS5qbyIsImVuZy5qbyIsImZtLmpvIiwiZ292LmpvIiwibWlsLmpvIiwibmV0LmpvIiwi''@;'; put 'put ''b3JnLmpvIiwicGVyLmpvIiwicGhkLmpvIiwic2NoLmpvIiwidHYuam8iLCJqb2JzIiwianAiLCJhYy5qcCIsImFkLmpwIiwiY28uanAiLCJlZC5qcCIsImdvLmpwIiwiZ3IuanAiLCJsZy5qcCIsIm5lLmpwIiwib3IuanAiLCJhaWNoaS5qcCIsImFraXRhLmpwIiwiYW9tb3JpLmpwIiwiY2hp''@;'; put 'put ''YmEuanAiLCJlaGltZS5qcCIsImZ1a3VpLmpwIiwiZnVrdW9rYS5qcCIsImZ1a3VzaGltYS5qcCIsImdpZnUuanAiLCJndW5tYS5qcCIsImhpcm9zaGltYS5qcCIsImhva2thaWRvLmpwIiwiaHlvZ28uanAiLCJpYmFyYWtpLmpwIiwiaXNoaWthd2EuanAiLCJpd2F0ZS5qcCIsImthZ2F3YS5q''@;'; put 'put ''cCIsImthZ29zaGltYS5qcCIsImthbmFnYXdhLmpwIiwia29jaGkuanAiLCJrdW1hbW90by5qcCIsImt5b3RvLmpwIiwibWllLmpwIiwibWl5YWdpLmpwIiwibWl5YXpha2kuanAiLCJuYWdhbm8uanAiLCJuYWdhc2FraS5qcCIsIm5hcmEuanAiLCJuaWlnYXRhLmpwIiwib2l0YS5qcCIsIm9r''@;'; put 'put ''YXlhbWEuanAiLCJva2luYXdhLmpwIiwib3Nha2EuanAiLCJzYWdhLmpwIiwic2FpdGFtYS5qcCIsInNoaWdhLmpwIiwic2hpbWFuZS5qcCIsInNoaXp1b2thLmpwIiwidG9jaGlnaS5qcCIsInRva3VzaGltYS5qcCIsInRva3lvLmpwIiwidG90dG9yaS5qcCIsInRveWFtYS5qcCIsIndha2F5''@;'; put 'put ''YW1hLmpwIiwieWFtYWdhdGEuanAiLCJ5YW1hZ3VjaGkuanAiLCJ5YW1hbmFzaGkuanAiLCJcdTRlMDlcdTkxY2QuanAiLCJcdTRlYWNcdTkwZmQuanAiLCJcdTRmNTBcdThjYzAuanAiLCJcdTUxNzVcdTVlYWIuanAiLCJcdTUzMTdcdTZkNzdcdTkwNTMuanAiLCJcdTUzNDNcdTg0NDkuanAi''@;'; put 'put ''LCJcdTU0OGNcdTZiNGNcdTVjNzEuanAiLCJcdTU3ZmNcdTczODkuanAiLCJcdTU5MjdcdTUyMDYuanAiLCJcdTU5MjdcdTk2MmEuanAiLCJcdTU5NDhcdTgyNmYuanAiLCJcdTViYWVcdTU3Y2UuanAiLCJcdTViYWVcdTVkMGUuanAiLCJcdTViY2NcdTVjNzEuanAiLCJcdTVjNzFcdTUzZTMu''@;'; put 'put ''anAiLCJcdTVjNzFcdTVmNjIuanAiLCJcdTVjNzFcdTY4YTguanAiLCJcdTVjOTBcdTk2MWMuanAiLCJcdTVjYTFcdTVjNzEuanAiLCJcdTVjYTlcdTYyNGIuanAiLCJcdTVjZjZcdTY4MzkuanAiLCJcdTVlODNcdTVjZjYuanAiLCJcdTVmYjNcdTVjZjYuanAiLCJcdTYxMWJcdTVhOWIuanAi''@;'; put 'put ''LCJcdTYxMWJcdTc3ZTUuanAiLCJcdTY1YjBcdTZmNWYuanAiLCJcdTY3NzFcdTRlYWMuanAiLCJcdTY4MDNcdTY3MjguanAiLCJcdTZjOTZcdTdlMDQuanAiLCJcdTZlY2JcdThjYzAuanAiLCJcdTcxOGFcdTY3MmMuanAiLCJcdTc3ZjNcdTVkZGQuanAiLCJcdTc5NWVcdTU5NDhcdTVkZGQu''@;'; put 'put ''anAiLCJcdTc5OGZcdTRlOTUuanAiLCJcdTc5OGZcdTVjYTEuanAiLCJcdTc5OGZcdTVjZjYuanAiLCJcdTc5Y2JcdTc1MzAuanAiLCJcdTdmYTRcdTk5YWMuanAiLCJcdTgzMjhcdTU3Y2UuanAiLCJcdTk1NzdcdTVkMGUuanAiLCJcdTk1NzdcdTkxY2UuanAiLCJcdTk3NTJcdTY4ZWUuanAi''@;'; put 'put ''LCJcdTk3NTlcdTVjYTEuanAiLCJcdTk5OTlcdTVkZGQuanAiLCJcdTlhZDhcdTc3ZTUuanAiLCJcdTljZTVcdTUzZDYuanAiLCJcdTllN2ZcdTUxNTBcdTVjZjYuanAiLCIqLmthd2FzYWtpLmpwIiwiIWNpdHkua2F3YXNha2kuanAiLCIqLmtpdGFreXVzaHUuanAiLCIhY2l0eS5raXRha3l1''@;'; put 'put ''c2h1LmpwIiwiKi5rb2JlLmpwIiwiIWNpdHkua29iZS5qcCIsIioubmFnb3lhLmpwIiwiIWNpdHkubmFnb3lhLmpwIiwiKi5zYXBwb3JvLmpwIiwiIWNpdHkuc2FwcG9yby5qcCIsIiouc2VuZGFpLmpwIiwiIWNpdHkuc2VuZGFpLmpwIiwiKi55b2tvaGFtYS5qcCIsIiFjaXR5Lnlva29oYW1h''@;'; put 'put ''LmpwIiwiYWlzYWkuYWljaGkuanAiLCJhbWEuYWljaGkuanAiLCJhbmpvLmFpY2hpLmpwIiwiYXN1a2UuYWljaGkuanAiLCJjaGlyeXUuYWljaGkuanAiLCJjaGl0YS5haWNoaS5qcCIsImZ1c28uYWljaGkuanAiLCJnYW1hZ29yaS5haWNoaS5qcCIsImhhbmRhLmFpY2hpLmpwIiwiaGF6dS5h''@;'; put 'put ''aWNoaS5qcCIsImhla2luYW4uYWljaGkuanAiLCJoaWdhc2hpdXJhLmFpY2hpLmpwIiwiaWNoaW5vbWl5YS5haWNoaS5qcCIsImluYXphd2EuYWljaGkuanAiLCJpbnV5YW1hLmFpY2hpLmpwIiwiaXNzaGlraS5haWNoaS5qcCIsIml3YWt1cmEuYWljaGkuanAiLCJrYW5pZS5haWNoaS5qcCIs''@;'; put 'put ''Imthcml5YS5haWNoaS5qcCIsImthc3VnYWkuYWljaGkuanAiLCJraXJhLmFpY2hpLmpwIiwia2l5b3N1LmFpY2hpLmpwIiwia29tYWtpLmFpY2hpLmpwIiwia29uYW4uYWljaGkuanAiLCJrb3RhLmFpY2hpLmpwIiwibWloYW1hLmFpY2hpLmpwIiwibWl5b3NoaS5haWNoaS5qcCIsIm5pc2hp''@;'; put 'put ''by5haWNoaS5qcCIsIm5pc3NoaW4uYWljaGkuanAiLCJvYnUuYWljaGkuanAiLCJvZ3VjaGkuYWljaGkuanAiLCJvaGFydS5haWNoaS5qcCIsIm9rYXpha2kuYWljaGkuanAiLCJvd2FyaWFzYWhpLmFpY2hpLmpwIiwic2V0by5haWNoaS5qcCIsInNoaWthdHN1LmFpY2hpLmpwIiwic2hpbnNo''@;'; put 'put ''aXJvLmFpY2hpLmpwIiwic2hpdGFyYS5haWNoaS5qcCIsInRhaGFyYS5haWNoaS5qcCIsInRha2FoYW1hLmFpY2hpLmpwIiwidG9iaXNoaW1hLmFpY2hpLmpwIiwidG9laS5haWNoaS5qcCIsInRvZ28uYWljaGkuanAiLCJ0b2thaS5haWNoaS5qcCIsInRva29uYW1lLmFpY2hpLmpwIiwidG95''@;'; put 'put ''b2FrZS5haWNoaS5qcCIsInRveW9oYXNoaS5haWNoaS5qcCIsInRveW9rYXdhLmFpY2hpLmpwIiwidG95b25lLmFpY2hpLmpwIiwidG95b3RhLmFpY2hpLmpwIiwidHN1c2hpbWEuYWljaGkuanAiLCJ5YXRvbWkuYWljaGkuanAiLCJha2l0YS5ha2l0YS5qcCIsImRhaXNlbi5ha2l0YS5qcCIs''@;'; put 'put ''ImZ1amlzYXRvLmFraXRhLmpwIiwiZ29qb21lLmFraXRhLmpwIiwiaGFjaGlyb2dhdGEuYWtpdGEuanAiLCJoYXBwb3UuYWtpdGEuanAiLCJoaWdhc2hpbmFydXNlLmFraXRhLmpwIiwiaG9uam8uYWtpdGEuanAiLCJob25qeW8uYWtpdGEuanAiLCJpa2F3YS5ha2l0YS5qcCIsImthbWlrb2Fu''@;'; put 'put ''aS5ha2l0YS5qcCIsImthbWlva2EuYWtpdGEuanAiLCJrYXRhZ2FtaS5ha2l0YS5qcCIsImthenVuby5ha2l0YS5qcCIsImtpdGFha2l0YS5ha2l0YS5qcCIsImtvc2FrYS5ha2l0YS5qcCIsImt5b3dhLmFraXRhLmpwIiwibWlzYXRvLmFraXRhLmpwIiwibWl0YW5lLmFraXRhLmpwIiwibW9y''@;'; put 'put ''aXlvc2hpLmFraXRhLmpwIiwibmlrYWhvLmFraXRhLmpwIiwibm9zaGlyby5ha2l0YS5qcCIsIm9kYXRlLmFraXRhLmpwIiwib2dhLmFraXRhLmpwIiwib2dhdGEuYWtpdGEuanAiLCJzZW1ib2t1LmFraXRhLmpwIiwieW9rb3RlLmFraXRhLmpwIiwieXVyaWhvbmpvLmFraXRhLmpwIiwiYW9t''@;'; put 'put ''b3JpLmFvbW9yaS5qcCIsImdvbm9oZS5hb21vcmkuanAiLCJoYWNoaW5vaGUuYW9tb3JpLmpwIiwiaGFzaGlrYW1pLmFvbW9yaS5qcCIsImhpcmFuYWkuYW9tb3JpLmpwIiwiaGlyb3Nha2kuYW9tb3JpLmpwIiwiaXRheWFuYWdpLmFvbW9yaS5qcCIsImt1cm9pc2hpLmFvbW9yaS5qcCIsIm1p''@;'; put 'put ''c2F3YS5hb21vcmkuanAiLCJtdXRzdS5hb21vcmkuanAiLCJuYWthZG9tYXJpLmFvbW9yaS5qcCIsIm5vaGVqaS5hb21vcmkuanAiLCJvaXJhc2UuYW9tb3JpLmpwIiwib3dhbmkuYW9tb3JpLmpwIiwicm9rdW5vaGUuYW9tb3JpLmpwIiwic2Fubm9oZS5hb21vcmkuanAiLCJzaGljaGlub2hl''@;'; put 'put ''LmFvbW9yaS5qcCIsInNoaW5nby5hb21vcmkuanAiLCJ0YWtrby5hb21vcmkuanAiLCJ0b3dhZGEuYW9tb3JpLmpwIiwidHN1Z2FydS5hb21vcmkuanAiLCJ0c3VydXRhLmFvbW9yaS5qcCIsImFiaWtvLmNoaWJhLmpwIiwiYXNhaGkuY2hpYmEuanAiLCJjaG9uYW4uY2hpYmEuanAiLCJjaG9z''@;'; put 'put ''ZWkuY2hpYmEuanAiLCJjaG9zaGkuY2hpYmEuanAiLCJjaHVvLmNoaWJhLmpwIiwiZnVuYWJhc2hpLmNoaWJhLmpwIiwiZnV0dHN1LmNoaWJhLmpwIiwiaGFuYW1pZ2F3YS5jaGliYS5qcCIsImljaGloYXJhLmNoaWJhLmpwIiwiaWNoaWthd2EuY2hpYmEuanAiLCJpY2hpbm9taXlhLmNoaWJh''@;'; put 'put ''LmpwIiwiaW56YWkuY2hpYmEuanAiLCJpc3VtaS5jaGliYS5qcCIsImthbWFnYXlhLmNoaWJhLmpwIiwia2Ftb2dhd2EuY2hpYmEuanAiLCJrYXNoaXdhLmNoaWJhLmpwIiwia2F0b3JpLmNoaWJhLmpwIiwia2F0c3V1cmEuY2hpYmEuanAiLCJraW1pdHN1LmNoaWJhLmpwIiwia2lzYXJhenUu''@;'; put 'put ''Y2hpYmEuanAiLCJrb3pha2kuY2hpYmEuanAiLCJrdWp1a3VyaS5jaGliYS5qcCIsImt5b25hbi5jaGliYS5qcCIsIm1hdHN1ZG8uY2hpYmEuanAiLCJtaWRvcmkuY2hpYmEuanAiLCJtaWhhbWEuY2hpYmEuanAiLCJtaW5hbWlib3NvLmNoaWJhLmpwIiwibW9iYXJhLmNoaWJhLmpwIiwibXV0''@;'; put 'put ''c3V6YXdhLmNoaWJhLmpwIiwibmFnYXJhLmNoaWJhLmpwIiwibmFnYXJleWFtYS5jaGliYS5qcCIsIm5hcmFzaGluby5jaGliYS5qcCIsIm5hcml0YS5jaGliYS5qcCIsIm5vZGEuY2hpYmEuanAiLCJvYW1pc2hpcmFzYXRvLmNoaWJhLmpwIiwib21pZ2F3YS5jaGliYS5qcCIsIm9uanVrdS5j''@;'; put 'put ''aGliYS5qcCIsIm90YWtpLmNoaWJhLmpwIiwic2FrYWUuY2hpYmEuanAiLCJzYWt1cmEuY2hpYmEuanAiLCJzaGltb2Z1c2EuY2hpYmEuanAiLCJzaGlyYWtvLmNoaWJhLmpwIiwic2hpcm9pLmNoaWJhLmpwIiwic2hpc3VpLmNoaWJhLmpwIiwic29kZWdhdXJhLmNoaWJhLmpwIiwic29zYS5j''@;'; put 'put ''aGliYS5qcCIsInRha28uY2hpYmEuanAiLCJ0YXRleWFtYS5jaGliYS5qcCIsInRvZ2FuZS5jaGliYS5qcCIsInRvaG5vc2hvLmNoaWJhLmpwIiwidG9taXNhdG8uY2hpYmEuanAiLCJ1cmF5YXN1LmNoaWJhLmpwIiwieWFjaGltYXRhLmNoaWJhLmpwIiwieWFjaGl5by5jaGliYS5qcCIsInlv''@;'; put 'put ''a2FpY2hpYmEuY2hpYmEuanAiLCJ5b2tvc2hpYmFoaWthcmkuY2hpYmEuanAiLCJ5b3RzdWthaWRvLmNoaWJhLmpwIiwiYWluYW4uZWhpbWUuanAiLCJob25haS5laGltZS5qcCIsImlrYXRhLmVoaW1lLmpwIiwiaW1hYmFyaS5laGltZS5qcCIsIml5by5laGltZS5qcCIsImthbWlqaW1hLmVo''@;'; put 'put ''aW1lLmpwIiwia2lob2t1LmVoaW1lLmpwIiwia3VtYWtvZ2VuLmVoaW1lLmpwIiwibWFzYWtpLmVoaW1lLmpwIiwibWF0c3Vuby5laGltZS5qcCIsIm1hdHN1eWFtYS5laGltZS5qcCIsIm5hbWlrYXRhLmVoaW1lLmpwIiwibmlpaGFtYS5laGltZS5qcCIsIm96dS5laGltZS5qcCIsInNhaWpv''@;'; put 'put ''LmVoaW1lLmpwIiwic2VpeW8uZWhpbWUuanAiLCJzaGlrb2t1Y2h1by5laGltZS5qcCIsInRvYmUuZWhpbWUuanAiLCJ0b29uLmVoaW1lLmpwIiwidWNoaWtvLmVoaW1lLmpwIiwidXdhamltYS5laGltZS5qcCIsInlhd2F0YWhhbWEuZWhpbWUuanAiLCJlY2hpemVuLmZ1a3VpLmpwIiwiZWlo''@;'; put 'put ''ZWlqaS5mdWt1aS5qcCIsImZ1a3VpLmZ1a3VpLmpwIiwiaWtlZGEuZnVrdWkuanAiLCJrYXRzdXlhbWEuZnVrdWkuanAiLCJtaWhhbWEuZnVrdWkuanAiLCJtaW5hbWllY2hpemVuLmZ1a3VpLmpwIiwib2JhbWEuZnVrdWkuanAiLCJvaGkuZnVrdWkuanAiLCJvbm8uZnVrdWkuanAiLCJzYWJh''@;'; put 'put ''ZS5mdWt1aS5qcCIsInNha2FpLmZ1a3VpLmpwIiwidGFrYWhhbWEuZnVrdWkuanAiLCJ0c3VydWdhLmZ1a3VpLmpwIiwid2FrYXNhLmZ1a3VpLmpwIiwiYXNoaXlhLmZ1a3Vva2EuanAiLCJidXplbi5mdWt1b2thLmpwIiwiY2hpa3Vnby5mdWt1b2thLmpwIiwiY2hpa3Voby5mdWt1b2thLmpw''@;'; put 'put ''IiwiY2hpa3Vqby5mdWt1b2thLmpwIiwiY2hpa3VzaGluby5mdWt1b2thLmpwIiwiY2hpa3V6ZW4uZnVrdW9rYS5qcCIsImNodW8uZnVrdW9rYS5qcCIsImRhemFpZnUuZnVrdW9rYS5qcCIsImZ1a3VjaGkuZnVrdW9rYS5qcCIsImhha2F0YS5mdWt1b2thLmpwIiwiaGlnYXNoaS5mdWt1b2th''@;'; put 'put ''LmpwIiwiaGlyb2thd2EuZnVrdW9rYS5qcCIsImhpc2F5YW1hLmZ1a3Vva2EuanAiLCJpaXp1a2EuZnVrdW9rYS5qcCIsImluYXRzdWtpLmZ1a3Vva2EuanAiLCJrYWhvLmZ1a3Vva2EuanAiLCJrYXN1Z2EuZnVrdW9rYS5qcCIsImthc3V5YS5mdWt1b2thLmpwIiwia2F3YXJhLmZ1a3Vva2Eu''@;'; put 'put ''anAiLCJrZWlzZW4uZnVrdW9rYS5qcCIsImtvZ2EuZnVrdW9rYS5qcCIsImt1cmF0ZS5mdWt1b2thLmpwIiwia3Vyb2dpLmZ1a3Vva2EuanAiLCJrdXJ1bWUuZnVrdW9rYS5qcCIsIm1pbmFtaS5mdWt1b2thLmpwIiwibWl5YWtvLmZ1a3Vva2EuanAiLCJtaXlhbWEuZnVrdW9rYS5qcCIsIm1p''@;'; put 'put ''eWF3YWthLmZ1a3Vva2EuanAiLCJtaXp1bWFraS5mdWt1b2thLmpwIiwibXVuYWthdGEuZnVrdW9rYS5qcCIsIm5ha2FnYXdhLmZ1a3Vva2EuanAiLCJuYWthbWEuZnVrdW9rYS5qcCIsIm5pc2hpLmZ1a3Vva2EuanAiLCJub2dhdGEuZnVrdW9rYS5qcCIsIm9nb3JpLmZ1a3Vva2EuanAiLCJv''@;'; put 'put ''a2FnYWtpLmZ1a3Vva2EuanAiLCJva2F3YS5mdWt1b2thLmpwIiwib2tpLmZ1a3Vva2EuanAiLCJvbXV0YS5mdWt1b2thLmpwIiwib25nYS5mdWt1b2thLmpwIiwib25vam8uZnVrdW9rYS5qcCIsIm90by5mdWt1b2thLmpwIiwic2FpZ2F3YS5mdWt1b2thLmpwIiwic2FzYWd1cmkuZnVrdW9r''@;'; put 'put ''YS5qcCIsInNoaW5ndS5mdWt1b2thLmpwIiwic2hpbnlvc2hpdG9taS5mdWt1b2thLmpwIiwic2hvbmFpLmZ1a3Vva2EuanAiLCJzb2VkYS5mdWt1b2thLmpwIiwic3VlLmZ1a3Vva2EuanAiLCJ0YWNoaWFyYWkuZnVrdW9rYS5qcCIsInRhZ2F3YS5mdWt1b2thLmpwIiwidGFrYXRhLmZ1a3Vv''@;'; put 'put ''a2EuanAiLCJ0b2hvLmZ1a3Vva2EuanAiLCJ0b3lvdHN1LmZ1a3Vva2EuanAiLCJ0c3Vpa2kuZnVrdW9rYS5qcCIsInVraWhhLmZ1a3Vva2EuanAiLCJ1bWkuZnVrdW9rYS5qcCIsInVzdWkuZnVrdW9rYS5qcCIsInlhbWFkYS5mdWt1b2thLmpwIiwieWFtZS5mdWt1b2thLmpwIiwieWFuYWdh''@;'; put 'put ''d2EuZnVrdW9rYS5qcCIsInl1a3VoYXNoaS5mdWt1b2thLmpwIiwiYWl6dWJhbmdlLmZ1a3VzaGltYS5qcCIsImFpenVtaXNhdG8uZnVrdXNoaW1hLmpwIiwiYWl6dXdha2FtYXRzdS5mdWt1c2hpbWEuanAiLCJhc2FrYXdhLmZ1a3VzaGltYS5qcCIsImJhbmRhaS5mdWt1c2hpbWEuanAiLCJk''@;'; put 'put ''YXRlLmZ1a3VzaGltYS5qcCIsImZ1a3VzaGltYS5mdWt1c2hpbWEuanAiLCJmdXJ1ZG9uby5mdWt1c2hpbWEuanAiLCJmdXRhYmEuZnVrdXNoaW1hLmpwIiwiaGFuYXdhLmZ1a3VzaGltYS5qcCIsImhpZ2FzaGkuZnVrdXNoaW1hLmpwIiwiaGlyYXRhLmZ1a3VzaGltYS5qcCIsImhpcm9uby5m''@;'; put 'put ''dWt1c2hpbWEuanAiLCJpaXRhdGUuZnVrdXNoaW1hLmpwIiwiaW5hd2FzaGlyby5mdWt1c2hpbWEuanAiLCJpc2hpa2F3YS5mdWt1c2hpbWEuanAiLCJpd2FraS5mdWt1c2hpbWEuanAiLCJpenVtaXpha2kuZnVrdXNoaW1hLmpwIiwia2FnYW1paXNoaS5mdWt1c2hpbWEuanAiLCJrYW5leWFt''@;'; put 'put ''YS5mdWt1c2hpbWEuanAiLCJrYXdhbWF0YS5mdWt1c2hpbWEuanAiLCJraXRha2F0YS5mdWt1c2hpbWEuanAiLCJraXRhc2hpb2JhcmEuZnVrdXNoaW1hLmpwIiwia29vcmkuZnVrdXNoaW1hLmpwIiwia29yaXlhbWEuZnVrdXNoaW1hLmpwIiwia3VuaW1pLmZ1a3VzaGltYS5qcCIsIm1paGFy''@;'; put 'put ''dS5mdWt1c2hpbWEuanAiLCJtaXNoaW1hLmZ1a3VzaGltYS5qcCIsIm5hbWllLmZ1a3VzaGltYS5qcCIsIm5hbmdvLmZ1a3VzaGltYS5qcCIsIm5pc2hpYWl6dS5mdWt1c2hpbWEuanAiLCJuaXNoaWdvLmZ1a3VzaGltYS5qcCIsIm9rdW1hLmZ1a3VzaGltYS5qcCIsIm9tb3RlZ28uZnVrdXNo''@;'; put 'put ''aW1hLmpwIiwib25vLmZ1a3VzaGltYS5qcCIsIm90YW1hLmZ1a3VzaGltYS5qcCIsInNhbWVnYXdhLmZ1a3VzaGltYS5qcCIsInNoaW1vZ28uZnVrdXNoaW1hLmpwIiwic2hpcmFrYXdhLmZ1a3VzaGltYS5qcCIsInNob3dhLmZ1a3VzaGltYS5qcCIsInNvbWEuZnVrdXNoaW1hLmpwIiwic3Vr''@;'; put 'put ''YWdhd2EuZnVrdXNoaW1hLmpwIiwidGFpc2hpbi5mdWt1c2hpbWEuanAiLCJ0YW1ha2F3YS5mdWt1c2hpbWEuanAiLCJ0YW5hZ3VyYS5mdWt1c2hpbWEuanAiLCJ0ZW5laS5mdWt1c2hpbWEuanAiLCJ5YWJ1a2kuZnVrdXNoaW1hLmpwIiwieWFtYXRvLmZ1a3VzaGltYS5qcCIsInlhbWF0c3Vy''@;'; put 'put ''aS5mdWt1c2hpbWEuanAiLCJ5YW5haXp1LmZ1a3VzaGltYS5qcCIsInl1Z2F3YS5mdWt1c2hpbWEuanAiLCJhbnBhY2hpLmdpZnUuanAiLCJlbmEuZ2lmdS5qcCIsImdpZnUuZ2lmdS5qcCIsImdpbmFuLmdpZnUuanAiLCJnb2RvLmdpZnUuanAiLCJndWpvLmdpZnUuanAiLCJoYXNoaW1hLmdp''@;'; put 'put ''ZnUuanAiLCJoaWNoaXNvLmdpZnUuanAiLCJoaWRhLmdpZnUuanAiLCJoaWdhc2hpc2hpcmFrYXdhLmdpZnUuanAiLCJpYmlnYXdhLmdpZnUuanAiLCJpa2VkYS5naWZ1LmpwIiwia2FrYW1pZ2FoYXJhLmdpZnUuanAiLCJrYW5pLmdpZnUuanAiLCJrYXNhaGFyYS5naWZ1LmpwIiwia2FzYW1h''@;'; put 'put ''dHN1LmdpZnUuanAiLCJrYXdhdWUuZ2lmdS5qcCIsImtpdGFnYXRhLmdpZnUuanAiLCJtaW5vLmdpZnUuanAiLCJtaW5va2Ftby5naWZ1LmpwIiwibWl0YWtlLmdpZnUuanAiLCJtaXp1bmFtaS5naWZ1LmpwIiwibW90b3N1LmdpZnUuanAiLCJuYWthdHN1Z2F3YS5naWZ1LmpwIiwib2dha2ku''@;'; put 'put ''Z2lmdS5qcCIsInNha2Fob2dpLmdpZnUuanAiLCJzZWtpLmdpZnUuanAiLCJzZWtpZ2FoYXJhLmdpZnUuanAiLCJzaGlyYWthd2EuZ2lmdS5qcCIsInRhamltaS5naWZ1LmpwIiwidGFrYXlhbWEuZ2lmdS5qcCIsInRhcnVpLmdpZnUuanAiLCJ0b2tpLmdpZnUuanAiLCJ0b21pa2EuZ2lmdS5q''@;'; put 'put ''cCIsIndhbm91Y2hpLmdpZnUuanAiLCJ5YW1hZ2F0YS5naWZ1LmpwIiwieWFvdHN1LmdpZnUuanAiLCJ5b3JvLmdpZnUuanAiLCJhbm5ha2EuZ3VubWEuanAiLCJjaGl5b2RhLmd1bm1hLmpwIiwiZnVqaW9rYS5ndW5tYS5qcCIsImhpZ2FzaGlhZ2F0c3VtYS5ndW5tYS5qcCIsImlzZXNha2ku''@;'; put 'put ''Z3VubWEuanAiLCJpdGFrdXJhLmd1bm1hLmpwIiwia2FubmEuZ3VubWEuanAiLCJrYW5yYS5ndW5tYS5qcCIsImthdGFzaGluYS5ndW5tYS5qcCIsImthd2FiYS5ndW5tYS5qcCIsImtpcnl1Lmd1bm1hLmpwIiwia3VzYXRzdS5ndW5tYS5qcCIsIm1hZWJhc2hpLmd1bm1hLmpwIiwibWVpd2Eu''@;'; put 'put ''Z3VubWEuanAiLCJtaWRvcmkuZ3VubWEuanAiLCJtaW5ha2FtaS5ndW5tYS5qcCIsIm5hZ2Fub2hhcmEuZ3VubWEuanAiLCJuYWthbm9qby5ndW5tYS5qcCIsIm5hbm1va3UuZ3VubWEuanAiLCJudW1hdGEuZ3VubWEuanAiLCJvaXp1bWkuZ3VubWEuanAiLCJvcmEuZ3VubWEuanAiLCJvdGEu''@;'; put 'put ''Z3VubWEuanAiLCJzaGlidWthd2EuZ3VubWEuanAiLCJzaGltb25pdGEuZ3VubWEuanAiLCJzaGludG8uZ3VubWEuanAiLCJzaG93YS5ndW5tYS5qcCIsInRha2FzYWtpLmd1bm1hLmpwIiwidGFrYXlhbWEuZ3VubWEuanAiLCJ0YW1hbXVyYS5ndW5tYS5qcCIsInRhdGViYXlhc2hpLmd1bm1h''@;'; put 'put ''LmpwIiwidG9taW9rYS5ndW5tYS5qcCIsInRzdWtpeW9uby5ndW5tYS5qcCIsInRzdW1hZ29pLmd1bm1hLmpwIiwidWVuby5ndW5tYS5qcCIsInlvc2hpb2thLmd1bm1hLmpwIiwiYXNhbWluYW1pLmhpcm9zaGltYS5qcCIsImRhaXdhLmhpcm9zaGltYS5qcCIsImV0YWppbWEuaGlyb3NoaW1h''@;'; put 'put ''LmpwIiwiZnVjaHUuaGlyb3NoaW1hLmpwIiwiZnVrdXlhbWEuaGlyb3NoaW1hLmpwIiwiaGF0c3VrYWljaGkuaGlyb3NoaW1hLmpwIiwiaGlnYXNoaWhpcm9zaGltYS5oaXJvc2hpbWEuanAiLCJob25nby5oaXJvc2hpbWEuanAiLCJqaW5zZWtpa29nZW4uaGlyb3NoaW1hLmpwIiwia2FpdGEu''@;'; put 'put ''aGlyb3NoaW1hLmpwIiwia3VpLmhpcm9zaGltYS5qcCIsImt1bWFuby5oaXJvc2hpbWEuanAiLCJrdXJlLmhpcm9zaGltYS5qcCIsIm1paGFyYS5oaXJvc2hpbWEuanAiLCJtaXlvc2hpLmhpcm9zaGltYS5qcCIsIm5ha2EuaGlyb3NoaW1hLmpwIiwib25vbWljaGkuaGlyb3NoaW1hLmpwIiwi''@;'; put 'put ''b3Nha2lrYW1pamltYS5oaXJvc2hpbWEuanAiLCJvdGFrZS5oaXJvc2hpbWEuanAiLCJzYWthLmhpcm9zaGltYS5qcCIsInNlcmEuaGlyb3NoaW1hLmpwIiwic2VyYW5pc2hpLmhpcm9zaGltYS5qcCIsInNoaW5pY2hpLmhpcm9zaGltYS5qcCIsInNob2JhcmEuaGlyb3NoaW1hLmpwIiwidGFr''@;'; put 'put ''ZWhhcmEuaGlyb3NoaW1hLmpwIiwiYWJhc2hpcmkuaG9ra2FpZG8uanAiLCJhYmlyYS5ob2trYWlkby5qcCIsImFpYmV0c3UuaG9ra2FpZG8uanAiLCJha2FiaXJhLmhva2thaWRvLmpwIiwiYWtrZXNoaS5ob2trYWlkby5qcCIsImFzYWhpa2F3YS5ob2trYWlkby5qcCIsImFzaGliZXRzdS5o''@;'; put 'put ''b2trYWlkby5qcCIsImFzaG9yby5ob2trYWlkby5qcCIsImFzc2FidS5ob2trYWlkby5qcCIsImF0c3VtYS5ob2trYWlkby5qcCIsImJpYmFpLmhva2thaWRvLmpwIiwiYmllaS5ob2trYWlkby5qcCIsImJpZnVrYS5ob2trYWlkby5qcCIsImJpaG9yby5ob2trYWlkby5qcCIsImJpcmF0b3Jp''@;'; put 'put ''Lmhva2thaWRvLmpwIiwiY2hpcHB1YmV0c3UuaG9ra2FpZG8uanAiLCJjaGl0b3NlLmhva2thaWRvLmpwIiwiZGF0ZS5ob2trYWlkby5qcCIsImViZXRzdS5ob2trYWlkby5qcCIsImVtYmV0c3UuaG9ra2FpZG8uanAiLCJlbml3YS5ob2trYWlkby5qcCIsImVyaW1vLmhva2thaWRvLmpwIiwi''@;'; put 'put ''ZXNhbi5ob2trYWlkby5qcCIsImVzYXNoaS5ob2trYWlkby5qcCIsImZ1a2FnYXdhLmhva2thaWRvLmpwIiwiZnVrdXNoaW1hLmhva2thaWRvLmpwIiwiZnVyYW5vLmhva2thaWRvLmpwIiwiZnVydWJpcmEuaG9ra2FpZG8uanAiLCJoYWJvcm8uaG9ra2FpZG8uanAiLCJoYWtvZGF0ZS5ob2tr''@;'; put 'put ''YWlkby5qcCIsImhhbWF0b25iZXRzdS5ob2trYWlkby5qcCIsImhpZGFrYS5ob2trYWlkby5qcCIsImhpZ2FzaGlrYWd1cmEuaG9ra2FpZG8uanAiLCJoaWdhc2hpa2F3YS5ob2trYWlkby5qcCIsImhpcm9vLmhva2thaWRvLmpwIiwiaG9rdXJ5dS5ob2trYWlkby5qcCIsImhva3V0by5ob2tr''@;'; put 'put ''YWlkby5qcCIsImhvbmJldHN1Lmhva2thaWRvLmpwIiwiaG9yb2thbmFpLmhva2thaWRvLmpwIiwiaG9yb25vYmUuaG9ra2FpZG8uanAiLCJpa2VkYS5ob2trYWlkby5qcCIsImltYWthbmUuaG9ra2FpZG8uanAiLCJpc2hpa2FyaS5ob2trYWlkby5qcCIsIml3YW1pemF3YS5ob2trYWlkby5q''@;'; put 'put ''cCIsIml3YW5haS5ob2trYWlkby5qcCIsImthbWlmdXJhbm8uaG9ra2FpZG8uanAiLCJrYW1pa2F3YS5ob2trYWlkby5qcCIsImthbWlzaGlob3JvLmhva2thaWRvLmpwIiwia2FtaXN1bmFnYXdhLmhva2thaWRvLmpwIiwia2Ftb2VuYWkuaG9ra2FpZG8uanAiLCJrYXlhYmUuaG9ra2FpZG8u''@;'; put 'put ''anAiLCJrZW1idWNoaS5ob2trYWlkby5qcCIsImtpa29uYWkuaG9ra2FpZG8uanAiLCJraW1vYmV0c3UuaG9ra2FpZG8uanAiLCJraXRhaGlyb3NoaW1hLmhva2thaWRvLmpwIiwia2l0YW1pLmhva2thaWRvLmpwIiwia2l5b3NhdG8uaG9ra2FpZG8uanAiLCJrb3NoaW1penUuaG9ra2FpZG8u''@;'; put 'put ''anAiLCJrdW5uZXBwdS5ob2trYWlkby5qcCIsImt1cml5YW1hLmhva2thaWRvLmpwIiwia3Vyb21hdHN1bmFpLmhva2thaWRvLmpwIiwia3VzaGlyby5ob2trYWlkby5qcCIsImt1dGNoYW4uaG9ra2FpZG8uanAiLCJreW93YS5ob2trYWlkby5qcCIsIm1hc2hpa2UuaG9ra2FpZG8uanAiLCJt''@;'; put 'put ''YXRzdW1hZS5ob2trYWlkby5qcCIsIm1pa2FzYS5ob2trYWlkby5qcCIsIm1pbmFtaWZ1cmFuby5ob2trYWlkby5qcCIsIm1vbWJldHN1Lmhva2thaWRvLmpwIiwibW9zZXVzaGkuaG9ra2FpZG8uanAiLCJtdWthd2EuaG9ra2FpZG8uanAiLCJtdXJvcmFuLmhva2thaWRvLmpwIiwibmFpZS5o''@;'; put 'put ''b2trYWlkby5qcCIsIm5ha2FnYXdhLmhva2thaWRvLmpwIiwibmFrYXNhdHN1bmFpLmhva2thaWRvLmpwIiwibmFrYXRvbWJldHN1Lmhva2thaWRvLmpwIiwibmFuYWUuaG9ra2FpZG8uanAiLCJuYW5wb3JvLmhva2thaWRvLmpwIiwibmF5b3JvLmhva2thaWRvLmpwIiwibmVtdXJvLmhva2th''@;'; put 'put ''aWRvLmpwIiwibmlpa2FwcHUuaG9ra2FpZG8uanAiLCJuaWtpLmhva2thaWRvLmpwIiwibmlzaGlva29wcGUuaG9ra2FpZG8uanAiLCJub2JvcmliZXRzdS5ob2trYWlkby5qcCIsIm51bWF0YS5ob2trYWlkby5qcCIsIm9iaWhpcm8uaG9ra2FpZG8uanAiLCJvYmlyYS5ob2trYWlkby5qcCIs''@;'; put 'put ''Im9rZXRvLmhva2thaWRvLmpwIiwib2tvcHBlLmhva2thaWRvLmpwIiwib3RhcnUuaG9ra2FpZG8uanAiLCJvdG9iZS5ob2trYWlkby5qcCIsIm90b2Z1a2UuaG9ra2FpZG8uanAiLCJvdG9pbmVwcHUuaG9ra2FpZG8uanAiLCJvdW11Lmhva2thaWRvLmpwIiwib3pvcmEuaG9ra2FpZG8uanAi''@;'; put 'put ''LCJwaXBwdS5ob2trYWlkby5qcCIsInJhbmtvc2hpLmhva2thaWRvLmpwIiwicmVidW4uaG9ra2FpZG8uanAiLCJyaWt1YmV0c3UuaG9ra2FpZG8uanAiLCJyaXNoaXJpLmhva2thaWRvLmpwIiwicmlzaGlyaWZ1amkuaG9ra2FpZG8uanAiLCJzYXJvbWEuaG9ra2FpZG8uanAiLCJzYXJ1ZnV0''@;'; put 'put ''c3UuaG9ra2FpZG8uanAiLCJzaGFrb3Rhbi5ob2trYWlkby5qcCIsInNoYXJpLmhva2thaWRvLmpwIiwic2hpYmVjaGEuaG9ra2FpZG8uanAiLCJzaGliZXRzdS5ob2trYWlkby5qcCIsInNoaWthYmUuaG9ra2FpZG8uanAiLCJzaGlrYW9pLmhva2thaWRvLmpwIiwic2hpbWFtYWtpLmhva2th''@;'; put 'put ''aWRvLmpwIiwic2hpbWl6dS5ob2trYWlkby5qcCIsInNoaW1va2F3YS5ob2trYWlkby5qcCIsInNoaW5zaGlub3RzdS5ob2trYWlkby5qcCIsInNoaW50b2t1Lmhva2thaWRvLmpwIiwic2hpcmFudWthLmhva2thaWRvLmpwIiwic2hpcmFvaS5ob2trYWlkby5qcCIsInNoaXJpdWNoaS5ob2tr''@;'; put 'put ''YWlkby5qcCIsInNvYmV0c3UuaG9ra2FpZG8uanAiLCJzdW5hZ2F3YS5ob2trYWlkby5qcCIsInRhaWtpLmhva2thaWRvLmpwIiwidGFrYXN1Lmhva2thaWRvLmpwIiwidGFraWthd2EuaG9ra2FpZG8uanAiLCJ0YWtpbm91ZS5ob2trYWlkby5qcCIsInRlc2hpa2FnYS5ob2trYWlkby5qcCIs''@;'; put 'put ''InRvYmV0c3UuaG9ra2FpZG8uanAiLCJ0b2htYS5ob2trYWlkby5qcCIsInRvbWFrb21haS5ob2trYWlkby5qcCIsInRvbWFyaS5ob2trYWlkby5qcCIsInRveWEuaG9ra2FpZG8uanAiLCJ0b3lha28uaG9ra2FpZG8uanAiLCJ0b3lvdG9taS5ob2trYWlkby5qcCIsInRveW91cmEuaG9ra2Fp''@;'; put 'put ''ZG8uanAiLCJ0c3ViZXRzdS5ob2trYWlkby5qcCIsInRzdWtpZ2F0YS5ob2trYWlkby5qcCIsInVyYWthd2EuaG9ra2FpZG8uanAiLCJ1cmF1c3UuaG9ra2FpZG8uanAiLCJ1cnl1Lmhva2thaWRvLmpwIiwidXRhc2hpbmFpLmhva2thaWRvLmpwIiwid2Fra2FuYWkuaG9ra2FpZG8uanAiLCJ3''@;'; put 'put ''YXNzYW11Lmhva2thaWRvLmpwIiwieWFrdW1vLmhva2thaWRvLmpwIiwieW9pY2hpLmhva2thaWRvLmpwIiwiYWlvaS5oeW9nby5qcCIsImFrYXNoaS5oeW9nby5qcCIsImFrby5oeW9nby5qcCIsImFtYWdhc2FraS5oeW9nby5qcCIsImFvZ2FraS5oeW9nby5qcCIsImFzYWdvLmh5b2dvLmpw''@;'; put 'put ''IiwiYXNoaXlhLmh5b2dvLmpwIiwiYXdhamkuaHlvZ28uanAiLCJmdWt1c2FraS5oeW9nby5qcCIsImdvc2hpa2kuaHlvZ28uanAiLCJoYXJpbWEuaHlvZ28uanAiLCJoaW1lamkuaHlvZ28uanAiLCJpY2hpa2F3YS5oeW9nby5qcCIsImluYWdhd2EuaHlvZ28uanAiLCJpdGFtaS5oeW9nby5q''@;'; put 'put ''cCIsImtha29nYXdhLmh5b2dvLmpwIiwia2FtaWdvcmkuaHlvZ28uanAiLCJrYW1pa2F3YS5oeW9nby5qcCIsImthc2FpLmh5b2dvLmpwIiwia2FzdWdhLmh5b2dvLmpwIiwia2F3YW5pc2hpLmh5b2dvLmpwIiwibWlraS5oeW9nby5qcCIsIm1pbmFtaWF3YWppLmh5b2dvLmpwIiwibmlzaGlu''@;'; put 'put ''b21peWEuaHlvZ28uanAiLCJuaXNoaXdha2kuaHlvZ28uanAiLCJvbm8uaHlvZ28uanAiLCJzYW5kYS5oeW9nby5qcCIsInNhbm5hbi5oeW9nby5qcCIsInNhc2F5YW1hLmh5b2dvLmpwIiwic2F5by5oeW9nby5qcCIsInNoaW5ndS5oeW9nby5qcCIsInNoaW5vbnNlbi5oeW9nby5qcCIsInNo''@;'; put 'put ''aXNvLmh5b2dvLmpwIiwic3Vtb3RvLmh5b2dvLmpwIiwidGFpc2hpLmh5b2dvLmpwIiwidGFrYS5oeW9nby5qcCIsInRha2FyYXp1a2EuaHlvZ28uanAiLCJ0YWthc2Fnby5oeW9nby5qcCIsInRha2luby5oeW9nby5qcCIsInRhbWJhLmh5b2dvLmpwIiwidGF0c3Vuby5oeW9nby5qcCIsInRv''@;'; put 'put ''eW9va2EuaHlvZ28uanAiLCJ5YWJ1Lmh5b2dvLmpwIiwieWFzaGlyby5oeW9nby5qcCIsInlva2EuaHlvZ28uanAiLCJ5b2thd2EuaHlvZ28uanAiLCJhbWkuaWJhcmFraS5qcCIsImFzYWhpLmliYXJha2kuanAiLCJiYW5kby5pYmFyYWtpLmpwIiwiY2hpa3VzZWkuaWJhcmFraS5qcCIsImRh''@;'; put 'put ''aWdvLmliYXJha2kuanAiLCJmdWppc2hpcm8uaWJhcmFraS5qcCIsImhpdGFjaGkuaWJhcmFraS5qcCIsImhpdGFjaGluYWthLmliYXJha2kuanAiLCJoaXRhY2hpb21peWEuaWJhcmFraS5qcCIsImhpdGFjaGlvdGEuaWJhcmFraS5qcCIsImliYXJha2kuaWJhcmFraS5qcCIsImluYS5pYmFy''@;'; put 'put ''YWtpLmpwIiwiaW5hc2hpa2kuaWJhcmFraS5qcCIsIml0YWtvLmliYXJha2kuanAiLCJpd2FtYS5pYmFyYWtpLmpwIiwiam9zby5pYmFyYWtpLmpwIiwia2FtaXN1LmliYXJha2kuanAiLCJrYXNhbWEuaWJhcmFraS5qcCIsImthc2hpbWEuaWJhcmFraS5qcCIsImthc3VtaWdhdXJhLmliYXJh''@;'; put 'put ''a2kuanAiLCJrb2dhLmliYXJha2kuanAiLCJtaWhvLmliYXJha2kuanAiLCJtaXRvLmliYXJha2kuanAiLCJtb3JpeWEuaWJhcmFraS5qcCIsIm5ha2EuaWJhcmFraS5qcCIsIm5hbWVnYXRhLmliYXJha2kuanAiLCJvYXJhaS5pYmFyYWtpLmpwIiwib2dhd2EuaWJhcmFraS5qcCIsIm9taXRh''@;'; put 'put ''bWEuaWJhcmFraS5qcCIsInJ5dWdhc2FraS5pYmFyYWtpLmpwIiwic2FrYWkuaWJhcmFraS5qcCIsInNha3VyYWdhd2EuaWJhcmFraS5qcCIsInNoaW1vZGF0ZS5pYmFyYWtpLmpwIiwic2hpbW90c3VtYS5pYmFyYWtpLmpwIiwic2hpcm9zYXRvLmliYXJha2kuanAiLCJzb3dhLmliYXJha2ku''@;'; put 'put ''anAiLCJzdWlmdS5pYmFyYWtpLmpwIiwidGFrYWhhZ2kuaWJhcmFraS5qcCIsInRhbWF0c3VrdXJpLmliYXJha2kuanAiLCJ0b2thaS5pYmFyYWtpLmpwIiwidG9tb2JlLmliYXJha2kuanAiLCJ0b25lLmliYXJha2kuanAiLCJ0b3JpZGUuaWJhcmFraS5qcCIsInRzdWNoaXVyYS5pYmFyYWtp''@;'; put 'put ''LmpwIiwidHN1a3ViYS5pYmFyYWtpLmpwIiwidWNoaWhhcmEuaWJhcmFraS5qcCIsInVzaGlrdS5pYmFyYWtpLmpwIiwieWFjaGl5by5pYmFyYWtpLmpwIiwieWFtYWdhdGEuaWJhcmFraS5qcCIsInlhd2FyYS5pYmFyYWtpLmpwIiwieXVraS5pYmFyYWtpLmpwIiwiYW5hbWl6dS5pc2hpa2F3''@;'; put 'put ''YS5qcCIsImhha3VpLmlzaGlrYXdhLmpwIiwiaGFrdXNhbi5pc2hpa2F3YS5qcCIsImthZ2EuaXNoaWthd2EuanAiLCJrYWhva3UuaXNoaWthd2EuanAiLCJrYW5hemF3YS5pc2hpa2F3YS5qcCIsImthd2FraXRhLmlzaGlrYXdhLmpwIiwia29tYXRzdS5pc2hpa2F3YS5qcCIsIm5ha2Fub3Rv''@;'; put 'put ''LmlzaGlrYXdhLmpwIiwibmFuYW8uaXNoaWthd2EuanAiLCJub21pLmlzaGlrYXdhLmpwIiwibm9ub2ljaGkuaXNoaWthd2EuanAiLCJub3RvLmlzaGlrYXdhLmpwIiwic2hpa2EuaXNoaWthd2EuanAiLCJzdXp1LmlzaGlrYXdhLmpwIiwidHN1YmF0YS5pc2hpa2F3YS5qcCIsInRzdXJ1Z2ku''@;'; put 'put ''aXNoaWthd2EuanAiLCJ1Y2hpbmFkYS5pc2hpa2F3YS5qcCIsIndhamltYS5pc2hpa2F3YS5qcCIsImZ1ZGFpLml3YXRlLmpwIiwiZnVqaXNhd2EuaXdhdGUuanAiLCJoYW5hbWFraS5pd2F0ZS5qcCIsImhpcmFpenVtaS5pd2F0ZS5qcCIsImhpcm9uby5pd2F0ZS5qcCIsImljaGlub2hlLml3''@;'; put 'put ''YXRlLmpwIiwiaWNoaW5vc2VraS5pd2F0ZS5qcCIsIml3YWl6dW1pLml3YXRlLmpwIiwiaXdhdGUuaXdhdGUuanAiLCJqb2JvamkuaXdhdGUuanAiLCJrYW1haXNoaS5pd2F0ZS5qcCIsImthbmVnYXNha2kuaXdhdGUuanAiLCJrYXJ1bWFpLml3YXRlLmpwIiwia2F3YWkuaXdhdGUuanAiLCJr''@;'; put 'put ''aXRha2FtaS5pd2F0ZS5qcCIsImt1amkuaXdhdGUuanAiLCJrdW5vaGUuaXdhdGUuanAiLCJrdXp1bWFraS5pd2F0ZS5qcCIsIm1peWFrby5pd2F0ZS5qcCIsIm1penVzYXdhLml3YXRlLmpwIiwibW9yaW9rYS5pd2F0ZS5qcCIsIm5pbm9oZS5pd2F0ZS5qcCIsIm5vZGEuaXdhdGUuanAiLCJv''@;'; put 'put ''ZnVuYXRvLml3YXRlLmpwIiwib3NodS5pd2F0ZS5qcCIsIm90c3VjaGkuaXdhdGUuanAiLCJyaWt1emVudGFrYXRhLml3YXRlLmpwIiwic2hpd2EuaXdhdGUuanAiLCJzaGl6dWt1aXNoaS5pd2F0ZS5qcCIsInN1bWl0YS5pd2F0ZS5qcCIsInRhbm9oYXRhLml3YXRlLmpwIiwidG9uby5pd2F0''@;'; put 'put ''ZS5qcCIsInlhaGFiYS5pd2F0ZS5qcCIsInlhbWFkYS5pd2F0ZS5qcCIsImF5YWdhd2Eua2FnYXdhLmpwIiwiaGlnYXNoaWthZ2F3YS5rYWdhd2EuanAiLCJrYW5vbmppLmthZ2F3YS5qcCIsImtvdG9oaXJhLmthZ2F3YS5qcCIsIm1hbm5vLmthZ2F3YS5qcCIsIm1hcnVnYW1lLmthZ2F3YS5q''@;'; put 'put ''cCIsIm1pdG95by5rYWdhd2EuanAiLCJuYW9zaGltYS5rYWdhd2EuanAiLCJzYW51a2kua2FnYXdhLmpwIiwidGFkb3RzdS5rYWdhd2EuanAiLCJ0YWthbWF0c3Uua2FnYXdhLmpwIiwidG9ub3Noby5rYWdhd2EuanAiLCJ1Y2hpbm9taS5rYWdhd2EuanAiLCJ1dGF6dS5rYWdhd2EuanAiLCJ6''@;'; put 'put ''ZW50c3VqaS5rYWdhd2EuanAiLCJha3VuZS5rYWdvc2hpbWEuanAiLCJhbWFtaS5rYWdvc2hpbWEuanAiLCJoaW9raS5rYWdvc2hpbWEuanAiLCJpc2Eua2Fnb3NoaW1hLmpwIiwiaXNlbi5rYWdvc2hpbWEuanAiLCJpenVtaS5rYWdvc2hpbWEuanAiLCJrYWdvc2hpbWEua2Fnb3NoaW1hLmpw''@;'; put 'put ''Iiwia2Fub3lhLmthZ29zaGltYS5qcCIsImthd2FuYWJlLmthZ29zaGltYS5qcCIsImtpbmtvLmthZ29zaGltYS5qcCIsImtvdXlhbWEua2Fnb3NoaW1hLmpwIiwibWFrdXJhemFraS5rYWdvc2hpbWEuanAiLCJtYXRzdW1vdG8ua2Fnb3NoaW1hLmpwIiwibWluYW1pdGFuZS5rYWdvc2hpbWEu''@;'; put 'put ''anAiLCJuYWthdGFuZS5rYWdvc2hpbWEuanAiLCJuaXNoaW5vb21vdGUua2Fnb3NoaW1hLmpwIiwic2F0c3VtYXNlbmRhaS5rYWdvc2hpbWEuanAiLCJzb28ua2Fnb3NoaW1hLmpwIiwidGFydW1penUua2Fnb3NoaW1hLmpwIiwieXVzdWkua2Fnb3NoaW1hLmpwIiwiYWlrYXdhLmthbmFnYXdh''@;'; put 'put ''LmpwIiwiYXRzdWdpLmthbmFnYXdhLmpwIiwiYXlhc2Uua2FuYWdhd2EuanAiLCJjaGlnYXNha2kua2FuYWdhd2EuanAiLCJlYmluYS5rYW5hZ2F3YS5qcCIsImZ1amlzYXdhLmthbmFnYXdhLmpwIiwiaGFkYW5vLmthbmFnYXdhLmpwIiwiaGFrb25lLmthbmFnYXdhLmpwIiwiaGlyYXRzdWth''@;'; put 'put ''LmthbmFnYXdhLmpwIiwiaXNlaGFyYS5rYW5hZ2F3YS5qcCIsImthaXNlaS5rYW5hZ2F3YS5qcCIsImthbWFrdXJhLmthbmFnYXdhLmpwIiwia2l5b2thd2Eua2FuYWdhd2EuanAiLCJtYXRzdWRhLmthbmFnYXdhLmpwIiwibWluYW1pYXNoaWdhcmEua2FuYWdhd2EuanAiLCJtaXVyYS5rYW5h''@;'; put 'put ''Z2F3YS5qcCIsIm5ha2FpLmthbmFnYXdhLmpwIiwibmlub21peWEua2FuYWdhd2EuanAiLCJvZGF3YXJhLmthbmFnYXdhLmpwIiwib2kua2FuYWdhd2EuanAiLCJvaXNvLmthbmFnYXdhLmpwIiwic2FnYW1paGFyYS5rYW5hZ2F3YS5qcCIsInNhbXVrYXdhLmthbmFnYXdhLmpwIiwidHN1a3Vp''@;'; put 'put ''LmthbmFnYXdhLmpwIiwieWFtYWtpdGEua2FuYWdhd2EuanAiLCJ5YW1hdG8ua2FuYWdhd2EuanAiLCJ5b2tvc3VrYS5rYW5hZ2F3YS5qcCIsInl1Z2F3YXJhLmthbmFnYXdhLmpwIiwiemFtYS5rYW5hZ2F3YS5qcCIsInp1c2hpLmthbmFnYXdhLmpwIiwiYWtpLmtvY2hpLmpwIiwiZ2Vpc2Vp''@;'; put 'put ''LmtvY2hpLmpwIiwiaGlkYWthLmtvY2hpLmpwIiwiaGlnYXNoaXRzdW5vLmtvY2hpLmpwIiwiaW5vLmtvY2hpLmpwIiwia2FnYW1pLmtvY2hpLmpwIiwia2FtaS5rb2NoaS5qcCIsImtpdGFnYXdhLmtvY2hpLmpwIiwia29jaGkua29jaGkuanAiLCJtaWhhcmEua29jaGkuanAiLCJtb3RveWFt''@;'; put 'put ''YS5rb2NoaS5qcCIsIm11cm90by5rb2NoaS5qcCIsIm5haGFyaS5rb2NoaS5qcCIsIm5ha2FtdXJhLmtvY2hpLmpwIiwibmFua29rdS5rb2NoaS5qcCIsIm5pc2hpdG9zYS5rb2NoaS5qcCIsIm5peW9kb2dhd2Eua29jaGkuanAiLCJvY2hpLmtvY2hpLmpwIiwib2thd2Eua29jaGkuanAiLCJv''@;'; put 'put ''dG95by5rb2NoaS5qcCIsIm90c3VraS5rb2NoaS5qcCIsInNha2F3YS5rb2NoaS5qcCIsInN1a3Vtby5rb2NoaS5qcCIsInN1c2FraS5rb2NoaS5qcCIsInRvc2Eua29jaGkuanAiLCJ0b3Nhc2hpbWl6dS5rb2NoaS5qcCIsInRveW8ua29jaGkuanAiLCJ0c3Vuby5rb2NoaS5qcCIsInVtYWpp''@;'; put 'put ''LmtvY2hpLmpwIiwieWFzdWRhLmtvY2hpLmpwIiwieXVzdWhhcmEua29jaGkuanAiLCJhbWFrdXNhLmt1bWFtb3RvLmpwIiwiYXJhby5rdW1hbW90by5qcCIsImFzby5rdW1hbW90by5qcCIsImNob3lvLmt1bWFtb3RvLmpwIiwiZ3lva3V0by5rdW1hbW90by5qcCIsImthbWlhbWFrdXNhLmt1''@;'; put 'put ''bWFtb3RvLmpwIiwia2lrdWNoaS5rdW1hbW90by5qcCIsImt1bWFtb3RvLmt1bWFtb3RvLmpwIiwibWFzaGlraS5rdW1hbW90by5qcCIsIm1pZnVuZS5rdW1hbW90by5qcCIsIm1pbmFtYXRhLmt1bWFtb3RvLmpwIiwibWluYW1pb2d1bmkua3VtYW1vdG8uanAiLCJuYWdhc3Uua3VtYW1vdG8u''@;'; put 'put ''anAiLCJuaXNoaWhhcmEua3VtYW1vdG8uanAiLCJvZ3VuaS5rdW1hbW90by5qcCIsIm96dS5rdW1hbW90by5qcCIsInN1bW90by5rdW1hbW90by5qcCIsInRha2Ftb3JpLmt1bWFtb3RvLmpwIiwidWtpLmt1bWFtb3RvLmpwIiwidXRvLmt1bWFtb3RvLmpwIiwieWFtYWdhLmt1bWFtb3RvLmpw''@;'; put 'put ''IiwieWFtYXRvLmt1bWFtb3RvLmpwIiwieWF0c3VzaGlyby5rdW1hbW90by5qcCIsImF5YWJlLmt5b3RvLmpwIiwiZnVrdWNoaXlhbWEua3lvdG8uanAiLCJoaWdhc2hpeWFtYS5reW90by5qcCIsImlkZS5reW90by5qcCIsImluZS5reW90by5qcCIsImpveW8ua3lvdG8uanAiLCJrYW1lb2th''@;'; put 'put ''Lmt5b3RvLmpwIiwia2Ftby5reW90by5qcCIsImtpdGEua3lvdG8uanAiLCJraXp1Lmt5b3RvLmpwIiwia3VtaXlhbWEua3lvdG8uanAiLCJreW90YW1iYS5reW90by5qcCIsImt5b3RhbmFiZS5reW90by5qcCIsImt5b3RhbmdvLmt5b3RvLmpwIiwibWFpenVydS5reW90by5qcCIsIm1pbmFt''@;'; put 'put ''aS5reW90by5qcCIsIm1pbmFtaXlhbWFzaGlyby5reW90by5qcCIsIm1peWF6dS5reW90by5qcCIsIm11a28ua3lvdG8uanAiLCJuYWdhb2tha3lvLmt5b3RvLmpwIiwibmFrYWd5by5reW90by5qcCIsIm5hbnRhbi5reW90by5qcCIsIm95YW1hemFraS5reW90by5qcCIsInNha3lvLmt5b3Rv''@;'; put 'put ''LmpwIiwic2Vpa2Eua3lvdG8uanAiLCJ0YW5hYmUua3lvdG8uanAiLCJ1amkua3lvdG8uanAiLCJ1aml0YXdhcmEua3lvdG8uanAiLCJ3YXp1a2Eua3lvdG8uanAiLCJ5YW1hc2hpbmEua3lvdG8uanAiLCJ5YXdhdGEua3lvdG8uanAiLCJhc2FoaS5taWUuanAiLCJpbmFiZS5taWUuanAiLCJp''@;'; put 'put ''c2UubWllLmpwIiwia2FtZXlhbWEubWllLmpwIiwia2F3YWdvZS5taWUuanAiLCJraWhvLm1pZS5qcCIsImtpc29zYWtpLm1pZS5qcCIsImtpd2EubWllLmpwIiwia29tb25vLm1pZS5qcCIsImt1bWFuby5taWUuanAiLCJrdXdhbmEubWllLmpwIiwibWF0c3VzYWthLm1pZS5qcCIsIm1laXdh''@;'; put 'put ''Lm1pZS5qcCIsIm1paGFtYS5taWUuanAiLCJtaW5hbWlpc2UubWllLmpwIiwibWlzdWdpLm1pZS5qcCIsIm1peWFtYS5taWUuanAiLCJuYWJhcmkubWllLmpwIiwic2hpbWEubWllLmpwIiwic3V6dWthLm1pZS5qcCIsInRhZG8ubWllLmpwIiwidGFpa2kubWllLmpwIiwidGFraS5taWUuanAi''@;'; put 'put ''LCJ0YW1ha2kubWllLmpwIiwidG9iYS5taWUuanAiLCJ0c3UubWllLmpwIiwidWRvbm8ubWllLmpwIiwidXJlc2hpbm8ubWllLmpwIiwid2F0YXJhaS5taWUuanAiLCJ5b2trYWljaGkubWllLmpwIiwiZnVydWthd2EubWl5YWdpLmpwIiwiaGlnYXNoaW1hdHN1c2hpbWEubWl5YWdpLmpwIiwi''@;'; put 'put ''aXNoaW5vbWFraS5taXlhZ2kuanAiLCJpd2FudW1hLm1peWFnaS5qcCIsImtha3VkYS5taXlhZ2kuanAiLCJrYW1pLm1peWFnaS5qcCIsImthd2FzYWtpLm1peWFnaS5qcCIsIm1hcnVtb3JpLm1peWFnaS5qcCIsIm1hdHN1c2hpbWEubWl5YWdpLmpwIiwibWluYW1pc2FucmlrdS5taXlhZ2ku''@;'; put 'put ''anAiLCJtaXNhdG8ubWl5YWdpLmpwIiwibXVyYXRhLm1peWFnaS5qcCIsIm5hdG9yaS5taXlhZ2kuanAiLCJvZ2F3YXJhLm1peWFnaS5qcCIsIm9oaXJhLm1peWFnaS5qcCIsIm9uYWdhd2EubWl5YWdpLmpwIiwib3Nha2kubWl5YWdpLmpwIiwicmlmdS5taXlhZ2kuanAiLCJzZW1pbmUubWl5''@;'; put 'put ''YWdpLmpwIiwic2hpYmF0YS5taXlhZ2kuanAiLCJzaGljaGlrYXNodWt1Lm1peWFnaS5qcCIsInNoaWthbWEubWl5YWdpLmpwIiwic2hpb2dhbWEubWl5YWdpLmpwIiwic2hpcm9pc2hpLm1peWFnaS5qcCIsInRhZ2Fqby5taXlhZ2kuanAiLCJ0YWl3YS5taXlhZ2kuanAiLCJ0b21lLm1peWFn''@;'; put 'put ''aS5qcCIsInRvbWl5YS5taXlhZ2kuanAiLCJ3YWt1eWEubWl5YWdpLmpwIiwid2F0YXJpLm1peWFnaS5qcCIsInlhbWFtb3RvLm1peWFnaS5qcCIsInphby5taXlhZ2kuanAiLCJheWEubWl5YXpha2kuanAiLCJlYmluby5taXlhemFraS5qcCIsImdva2FzZS5taXlhemFraS5qcCIsImh5dWdh''@;'; put 'put ''Lm1peWF6YWtpLmpwIiwia2Fkb2dhd2EubWl5YXpha2kuanAiLCJrYXdhbWluYW1pLm1peWF6YWtpLmpwIiwia2lqby5taXlhemFraS5qcCIsImtpdGFnYXdhLm1peWF6YWtpLmpwIiwia2l0YWthdGEubWl5YXpha2kuanAiLCJraXRhdXJhLm1peWF6YWtpLmpwIiwia29iYXlhc2hpLm1peWF6''@;'; put 'put ''YWtpLmpwIiwia3VuaXRvbWkubWl5YXpha2kuanAiLCJrdXNoaW1hLm1peWF6YWtpLmpwIiwibWltYXRhLm1peWF6YWtpLmpwIiwibWl5YWtvbm9qby5taXlhemFraS5qcCIsIm1peWF6YWtpLm1peWF6YWtpLmpwIiwibW9yb3RzdWthLm1peWF6YWtpLmpwIiwibmljaGluYW4ubWl5YXpha2ku''@;'; put 'put ''anAiLCJuaXNoaW1lcmEubWl5YXpha2kuanAiLCJub2Jlb2thLm1peWF6YWtpLmpwIiwic2FpdG8ubWl5YXpha2kuanAiLCJzaGlpYmEubWl5YXpha2kuanAiLCJzaGludG9taS5taXlhemFraS5qcCIsInRha2FoYXJ1Lm1peWF6YWtpLmpwIiwidGFrYW5hYmUubWl5YXpha2kuanAiLCJ0YWth''@;'; put 'put ''emFraS5taXlhemFraS5qcCIsInRzdW5vLm1peWF6YWtpLmpwIiwiYWNoaS5uYWdhbm8uanAiLCJhZ2VtYXRzdS5uYWdhbm8uanAiLCJhbmFuLm5hZ2Fuby5qcCIsImFva2kubmFnYW5vLmpwIiwiYXNhaGkubmFnYW5vLmpwIiwiYXp1bWluby5uYWdhbm8uanAiLCJjaGlrdWhva3UubmFnYW5v''@;'; put 'put ''LmpwIiwiY2hpa3VtYS5uYWdhbm8uanAiLCJjaGluby5uYWdhbm8uanAiLCJmdWppbWkubmFnYW5vLmpwIiwiaGFrdWJhLm5hZ2Fuby5qcCIsImhhcmEubmFnYW5vLmpwIiwiaGlyYXlhLm5hZ2Fuby5qcCIsImlpZGEubmFnYW5vLmpwIiwiaWlqaW1hLm5hZ2Fuby5qcCIsImlpeWFtYS5uYWdh''@;'; put 'put ''bm8uanAiLCJpaXp1bmEubmFnYW5vLmpwIiwiaWtlZGEubmFnYW5vLmpwIiwiaWt1c2FrYS5uYWdhbm8uanAiLCJpbmEubmFnYW5vLmpwIiwia2FydWl6YXdhLm5hZ2Fuby5qcCIsImthd2FrYW1pLm5hZ2Fuby5qcCIsImtpc28ubmFnYW5vLmpwIiwia2lzb2Z1a3VzaGltYS5uYWdhbm8uanAi''@;'; put 'put ''LCJraXRhYWlraS5uYWdhbm8uanAiLCJrb21hZ2FuZS5uYWdhbm8uanAiLCJrb21vcm8ubmFnYW5vLmpwIiwibWF0c3VrYXdhLm5hZ2Fuby5qcCIsIm1hdHN1bW90by5uYWdhbm8uanAiLCJtaWFzYS5uYWdhbm8uanAiLCJtaW5hbWlhaWtpLm5hZ2Fuby5qcCIsIm1pbmFtaW1ha2kubmFnYW5v''@;'; put 'put ''LmpwIiwibWluYW1pbWlub3dhLm5hZ2Fuby5qcCIsIm1pbm93YS5uYWdhbm8uanAiLCJtaXlhZGEubmFnYW5vLmpwIiwibWl5b3RhLm5hZ2Fuby5qcCIsIm1vY2hpenVraS5uYWdhbm8uanAiLCJuYWdhbm8ubmFnYW5vLmpwIiwibmFnYXdhLm5hZ2Fuby5qcCIsIm5hZ2lzby5uYWdhbm8uanAi''@;'; put 'put ''LCJuYWthZ2F3YS5uYWdhbm8uanAiLCJuYWthbm8ubmFnYW5vLmpwIiwibm96YXdhb25zZW4ubmFnYW5vLmpwIiwib2J1c2UubmFnYW5vLmpwIiwib2dhd2EubmFnYW5vLmpwIiwib2theWEubmFnYW5vLmpwIiwib21hY2hpLm5hZ2Fuby5qcCIsIm9taS5uYWdhbm8uanAiLCJvb2t1d2EubmFn''@;'; put 'put ''YW5vLmpwIiwib29zaGlrYS5uYWdhbm8uanAiLCJvdGFraS5uYWdhbm8uanAiLCJvdGFyaS5uYWdhbm8uanAiLCJzYWthZS5uYWdhbm8uanAiLCJzYWtha2kubmFnYW5vLmpwIiwic2FrdS5uYWdhbm8uanAiLCJzYWt1aG8ubmFnYW5vLmpwIiwic2hpbW9zdXdhLm5hZ2Fuby5qcCIsInNoaW5h''@;'; put 'put ''bm9tYWNoaS5uYWdhbm8uanAiLCJzaGlvamlyaS5uYWdhbm8uanAiLCJzdXdhLm5hZ2Fuby5qcCIsInN1emFrYS5uYWdhbm8uanAiLCJ0YWthZ2kubmFnYW5vLmpwIiwidGFrYW1vcmkubmFnYW5vLmpwIiwidGFrYXlhbWEubmFnYW5vLmpwIiwidGF0ZXNoaW5hLm5hZ2Fuby5qcCIsInRhdHN1''@;'; put 'put ''bm8ubmFnYW5vLmpwIiwidG9nYWt1c2hpLm5hZ2Fuby5qcCIsInRvZ3VyYS5uYWdhbm8uanAiLCJ0b21pLm5hZ2Fuby5qcCIsInVlZGEubmFnYW5vLmpwIiwid2FkYS5uYWdhbm8uanAiLCJ5YW1hZ2F0YS5uYWdhbm8uanAiLCJ5YW1hbm91Y2hpLm5hZ2Fuby5qcCIsInlhc2FrYS5uYWdhbm8u''@;'; put 'put ''anAiLCJ5YXN1b2thLm5hZ2Fuby5qcCIsImNoaWppd2EubmFnYXNha2kuanAiLCJmdXRzdS5uYWdhc2FraS5qcCIsImdvdG8ubmFnYXNha2kuanAiLCJoYXNhbWkubmFnYXNha2kuanAiLCJoaXJhZG8ubmFnYXNha2kuanAiLCJpa2kubmFnYXNha2kuanAiLCJpc2FoYXlhLm5hZ2FzYWtpLmpw''@;'; put 'put ''Iiwia2F3YXRhbmEubmFnYXNha2kuanAiLCJrdWNoaW5vdHN1Lm5hZ2FzYWtpLmpwIiwibWF0c3V1cmEubmFnYXNha2kuanAiLCJuYWdhc2FraS5uYWdhc2FraS5qcCIsIm9iYW1hLm5hZ2FzYWtpLmpwIiwib211cmEubmFnYXNha2kuanAiLCJvc2V0by5uYWdhc2FraS5qcCIsInNhaWthaS5u''@;'; put 'put ''YWdhc2FraS5qcCIsInNhc2Viby5uYWdhc2FraS5qcCIsInNlaWhpLm5hZ2FzYWtpLmpwIiwic2hpbWFiYXJhLm5hZ2FzYWtpLmpwIiwic2hpbmthbWlnb3RvLm5hZ2FzYWtpLmpwIiwidG9naXRzdS5uYWdhc2FraS5qcCIsInRzdXNoaW1hLm5hZ2FzYWtpLmpwIiwidW56ZW4ubmFnYXNha2ku''@;'; put 'put ''anAiLCJhbmRvLm5hcmEuanAiLCJnb3NlLm5hcmEuanAiLCJoZWd1cmkubmFyYS5qcCIsImhpZ2FzaGl5b3NoaW5vLm5hcmEuanAiLCJpa2FydWdhLm5hcmEuanAiLCJpa29tYS5uYXJhLmpwIiwia2FtaWtpdGF5YW1hLm5hcmEuanAiLCJrYW5tYWtpLm5hcmEuanAiLCJrYXNoaWJhLm5hcmEu''@;'; put 'put ''anAiLCJrYXNoaWhhcmEubmFyYS5qcCIsImthdHN1cmFnaS5uYXJhLmpwIiwia2F3YWkubmFyYS5qcCIsImthd2FrYW1pLm5hcmEuanAiLCJrYXdhbmlzaGkubmFyYS5qcCIsImtvcnlvLm5hcmEuanAiLCJrdXJvdGFraS5uYXJhLmpwIiwibWl0c3VlLm5hcmEuanAiLCJtaXlha2UubmFyYS5q''@;'; put 'put ''cCIsIm5hcmEubmFyYS5qcCIsIm5vc2VnYXdhLm5hcmEuanAiLCJvamkubmFyYS5qcCIsIm91ZGEubmFyYS5qcCIsIm95b2RvLm5hcmEuanAiLCJzYWt1cmFpLm5hcmEuanAiLCJzYW5nby5uYXJhLmpwIiwic2hpbW9pY2hpLm5hcmEuanAiLCJzaGltb2tpdGF5YW1hLm5hcmEuanAiLCJzaGlu''@;'; put 'put ''am8ubmFyYS5qcCIsInNvbmkubmFyYS5qcCIsInRha2F0b3JpLm5hcmEuanAiLCJ0YXdhcmFtb3RvLm5hcmEuanAiLCJ0ZW5rYXdhLm5hcmEuanAiLCJ0ZW5yaS5uYXJhLmpwIiwidWRhLm5hcmEuanAiLCJ5YW1hdG9rb3JpeWFtYS5uYXJhLmpwIiwieWFtYXRvdGFrYWRhLm5hcmEuanAiLCJ5''@;'; put 'put ''YW1hem9lLm5hcmEuanAiLCJ5b3NoaW5vLm5hcmEuanAiLCJhZ2EubmlpZ2F0YS5qcCIsImFnYW5vLm5paWdhdGEuanAiLCJnb3Nlbi5uaWlnYXRhLmpwIiwiaXRvaWdhd2EubmlpZ2F0YS5qcCIsIml6dW1vemFraS5uaWlnYXRhLmpwIiwiam9ldHN1Lm5paWdhdGEuanAiLCJrYW1vLm5paWdh''@;'; put 'put ''dGEuanAiLCJrYXJpd2EubmlpZ2F0YS5qcCIsImthc2hpd2F6YWtpLm5paWdhdGEuanAiLCJtaW5hbWl1b251bWEubmlpZ2F0YS5qcCIsIm1pdHN1a2UubmlpZ2F0YS5qcCIsIm11aWthLm5paWdhdGEuanAiLCJtdXJha2FtaS5uaWlnYXRhLmpwIiwibXlva28ubmlpZ2F0YS5qcCIsIm5hZ2Fv''@;'; put 'put ''a2EubmlpZ2F0YS5qcCIsIm5paWdhdGEubmlpZ2F0YS5qcCIsIm9qaXlhLm5paWdhdGEuanAiLCJvbWkubmlpZ2F0YS5qcCIsInNhZG8ubmlpZ2F0YS5qcCIsInNhbmpvLm5paWdhdGEuanAiLCJzZWlyby5uaWlnYXRhLmpwIiwic2Vpcm91Lm5paWdhdGEuanAiLCJzZWtpa2F3YS5uaWlnYXRh''@;'; put 'put ''LmpwIiwic2hpYmF0YS5uaWlnYXRhLmpwIiwidGFnYW1pLm5paWdhdGEuanAiLCJ0YWluYWkubmlpZ2F0YS5qcCIsInRvY2hpby5uaWlnYXRhLmpwIiwidG9rYW1hY2hpLm5paWdhdGEuanAiLCJ0c3ViYW1lLm5paWdhdGEuanAiLCJ0c3VuYW4ubmlpZ2F0YS5qcCIsInVvbnVtYS5uaWlnYXRh''@;'; put 'put ''LmpwIiwieWFoaWtvLm5paWdhdGEuanAiLCJ5b2l0YS5uaWlnYXRhLmpwIiwieXV6YXdhLm5paWdhdGEuanAiLCJiZXBwdS5vaXRhLmpwIiwiYnVuZ29vbm8ub2l0YS5qcCIsImJ1bmdvdGFrYWRhLm9pdGEuanAiLCJoYXNhbWEub2l0YS5qcCIsImhpamkub2l0YS5qcCIsImhpbWVzaGltYS5v''@;'; put 'put ''aXRhLmpwIiwiaGl0YS5vaXRhLmpwIiwia2FtaXRzdWUub2l0YS5qcCIsImtva29ub2Uub2l0YS5qcCIsImt1anUub2l0YS5qcCIsImt1bmlzYWtpLm9pdGEuanAiLCJrdXN1Lm9pdGEuanAiLCJvaXRhLm9pdGEuanAiLCJzYWlraS5vaXRhLmpwIiwidGFrZXRhLm9pdGEuanAiLCJ0c3VrdW1p''@;'; put 'put ''Lm9pdGEuanAiLCJ1c2Eub2l0YS5qcCIsInVzdWtpLm9pdGEuanAiLCJ5dWZ1Lm9pdGEuanAiLCJha2Fpd2Eub2theWFtYS5qcCIsImFzYWt1Y2hpLm9rYXlhbWEuanAiLCJiaXplbi5va2F5YW1hLmpwIiwiaGF5YXNoaW1hLm9rYXlhbWEuanAiLCJpYmFyYS5va2F5YW1hLmpwIiwia2FnYW1p''@;'; put 'put ''bm8ub2theWFtYS5qcCIsImthc2Fva2Eub2theWFtYS5qcCIsImtpYmljaHVvLm9rYXlhbWEuanAiLCJrdW1lbmFuLm9rYXlhbWEuanAiLCJrdXJhc2hpa2kub2theWFtYS5qcCIsIm1hbml3YS5va2F5YW1hLmpwIiwibWlzYWtpLm9rYXlhbWEuanAiLCJuYWdpLm9rYXlhbWEuanAiLCJuaWlt''@;'; put 'put ''aS5va2F5YW1hLmpwIiwibmlzaGlhd2FrdXJhLm9rYXlhbWEuanAiLCJva2F5YW1hLm9rYXlhbWEuanAiLCJzYXRvc2hvLm9rYXlhbWEuanAiLCJzZXRvdWNoaS5va2F5YW1hLmpwIiwic2hpbmpvLm9rYXlhbWEuanAiLCJzaG9vLm9rYXlhbWEuanAiLCJzb2phLm9rYXlhbWEuanAiLCJ0YWth''@;'; put 'put ''aGFzaGkub2theWFtYS5qcCIsInRhbWFuby5va2F5YW1hLmpwIiwidHN1eWFtYS5va2F5YW1hLmpwIiwid2FrZS5va2F5YW1hLmpwIiwieWFrYWdlLm9rYXlhbWEuanAiLCJhZ3VuaS5va2luYXdhLmpwIiwiZ2lub3dhbi5va2luYXdhLmpwIiwiZ2lub3phLm9raW5hd2EuanAiLCJndXNoaWth''@;'; put 'put ''bWkub2tpbmF3YS5qcCIsImhhZWJhcnUub2tpbmF3YS5qcCIsImhpZ2FzaGkub2tpbmF3YS5qcCIsImhpcmFyYS5va2luYXdhLmpwIiwiaWhleWEub2tpbmF3YS5qcCIsImlzaGlnYWtpLm9raW5hd2EuanAiLCJpc2hpa2F3YS5va2luYXdhLmpwIiwiaXRvbWFuLm9raW5hd2EuanAiLCJpemVu''@;'; put 'put ''YS5va2luYXdhLmpwIiwia2FkZW5hLm9raW5hd2EuanAiLCJraW4ub2tpbmF3YS5qcCIsImtpdGFkYWl0by5va2luYXdhLmpwIiwia2l0YW5ha2FndXN1a3Uub2tpbmF3YS5qcCIsImt1bWVqaW1hLm9raW5hd2EuanAiLCJrdW5pZ2FtaS5va2luYXdhLmpwIiwibWluYW1pZGFpdG8ub2tpbmF3''@;'; put 'put ''YS5qcCIsIm1vdG9idS5va2luYXdhLmpwIiwibmFnby5va2luYXdhLmpwIiwibmFoYS5va2luYXdhLmpwIiwibmFrYWd1c3VrdS5va2luYXdhLmpwIiwibmFraWppbi5va2luYXdhLmpwIiwibmFuam8ub2tpbmF3YS5qcCIsIm5pc2hpaGFyYS5va2luYXdhLmpwIiwib2dpbWkub2tpbmF3YS5q''@;'; put 'put ''cCIsIm9raW5hd2Eub2tpbmF3YS5qcCIsIm9ubmEub2tpbmF3YS5qcCIsInNoaW1vamkub2tpbmF3YS5qcCIsInRha2V0b21pLm9raW5hd2EuanAiLCJ0YXJhbWEub2tpbmF3YS5qcCIsInRva2FzaGlraS5va2luYXdhLmpwIiwidG9taWd1c3VrdS5va2luYXdhLmpwIiwidG9uYWtpLm9raW5h''@;'; put 'put ''d2EuanAiLCJ1cmFzb2Uub2tpbmF3YS5qcCIsInVydW1hLm9raW5hd2EuanAiLCJ5YWVzZS5va2luYXdhLmpwIiwieW9taXRhbi5va2luYXdhLmpwIiwieW9uYWJhcnUub2tpbmF3YS5qcCIsInlvbmFndW5pLm9raW5hd2EuanAiLCJ6YW1hbWkub2tpbmF3YS5qcCIsImFiZW5vLm9zYWthLmpw''@;'; put 'put ''IiwiY2hpaGF5YWFrYXNha2Eub3Nha2EuanAiLCJjaHVvLm9zYWthLmpwIiwiZGFpdG8ub3Nha2EuanAiLCJmdWppaWRlcmEub3Nha2EuanAiLCJoYWJpa2luby5vc2FrYS5qcCIsImhhbm5hbi5vc2FrYS5qcCIsImhpZ2FzaGlvc2FrYS5vc2FrYS5qcCIsImhpZ2FzaGlzdW1peW9zaGkub3Nh''@;'; put 'put ''a2EuanAiLCJoaWdhc2hpeW9kb2dhd2Eub3Nha2EuanAiLCJoaXJha2F0YS5vc2FrYS5qcCIsImliYXJha2kub3Nha2EuanAiLCJpa2VkYS5vc2FrYS5qcCIsIml6dW1pLm9zYWthLmpwIiwiaXp1bWlvdHN1Lm9zYWthLmpwIiwiaXp1bWlzYW5vLm9zYWthLmpwIiwia2Fkb21hLm9zYWthLmpw''@;'; put 'put ''Iiwia2FpenVrYS5vc2FrYS5qcCIsImthbmFuLm9zYWthLmpwIiwia2FzaGl3YXJhLm9zYWthLmpwIiwia2F0YW5vLm9zYWthLmpwIiwia2F3YWNoaW5hZ2Fuby5vc2FrYS5qcCIsImtpc2hpd2FkYS5vc2FrYS5qcCIsImtpdGEub3Nha2EuanAiLCJrdW1hdG9yaS5vc2FrYS5qcCIsIm1hdHN1''@;'; put 'put ''YmFyYS5vc2FrYS5qcCIsIm1pbmF0by5vc2FrYS5qcCIsIm1pbm9oLm9zYWthLmpwIiwibWlzYWtpLm9zYWthLmpwIiwibW9yaWd1Y2hpLm9zYWthLmpwIiwibmV5YWdhd2Eub3Nha2EuanAiLCJuaXNoaS5vc2FrYS5qcCIsIm5vc2Uub3Nha2EuanAiLCJvc2FrYXNheWFtYS5vc2FrYS5qcCIs''@;'; put 'put ''InNha2FpLm9zYWthLmpwIiwic2F5YW1hLm9zYWthLmpwIiwic2VubmFuLm9zYWthLmpwIiwic2V0dHN1Lm9zYWthLmpwIiwic2hpam9uYXdhdGUub3Nha2EuanAiLCJzaGltYW1vdG8ub3Nha2EuanAiLCJzdWl0YS5vc2FrYS5qcCIsInRhZGFva2Eub3Nha2EuanAiLCJ0YWlzaGkub3Nha2Eu''@;'; put 'put ''anAiLCJ0YWppcmkub3Nha2EuanAiLCJ0YWthaXNoaS5vc2FrYS5qcCIsInRha2F0c3VraS5vc2FrYS5qcCIsInRvbmRhYmF5YXNoaS5vc2FrYS5qcCIsInRveW9uYWthLm9zYWthLmpwIiwidG95b25vLm9zYWthLmpwIiwieWFvLm9zYWthLmpwIiwiYXJpYWtlLnNhZ2EuanAiLCJhcml0YS5z''@;'; put 'put ''YWdhLmpwIiwiZnVrdWRvbWkuc2FnYS5qcCIsImdlbmthaS5zYWdhLmpwIiwiaGFtYXRhbWEuc2FnYS5qcCIsImhpemVuLnNhZ2EuanAiLCJpbWFyaS5zYWdhLmpwIiwia2FtaW1pbmUuc2FnYS5qcCIsImthbnpha2kuc2FnYS5qcCIsImthcmF0c3Uuc2FnYS5qcCIsImthc2hpbWEuc2FnYS5q''@;'; put 'put ''cCIsImtpdGFnYXRhLnNhZ2EuanAiLCJraXRhaGF0YS5zYWdhLmpwIiwia2l5YW1hLnNhZ2EuanAiLCJrb3Vob2t1LnNhZ2EuanAiLCJreXVyYWdpLnNhZ2EuanAiLCJuaXNoaWFyaXRhLnNhZ2EuanAiLCJvZ2kuc2FnYS5qcCIsIm9tYWNoaS5zYWdhLmpwIiwib3VjaGkuc2FnYS5qcCIsInNh''@;'; put 'put ''Z2Euc2FnYS5qcCIsInNoaXJvaXNoaS5zYWdhLmpwIiwidGFrdS5zYWdhLmpwIiwidGFyYS5zYWdhLmpwIiwidG9zdS5zYWdhLmpwIiwieW9zaGlub2dhcmkuc2FnYS5qcCIsImFyYWthd2Euc2FpdGFtYS5qcCIsImFzYWthLnNhaXRhbWEuanAiLCJjaGljaGlidS5zYWl0YW1hLmpwIiwiZnVq''@;'; put 'put ''aW1pLnNhaXRhbWEuanAiLCJmdWppbWluby5zYWl0YW1hLmpwIiwiZnVrYXlhLnNhaXRhbWEuanAiLCJoYW5uby5zYWl0YW1hLmpwIiwiaGFueXUuc2FpdGFtYS5qcCIsImhhc3VkYS5zYWl0YW1hLmpwIiwiaGF0b2dheWEuc2FpdGFtYS5qcCIsImhhdG95YW1hLnNhaXRhbWEuanAiLCJoaWRh''@;'; put 'put ''a2Euc2FpdGFtYS5qcCIsImhpZ2FzaGljaGljaGlidS5zYWl0YW1hLmpwIiwiaGlnYXNoaW1hdHN1eWFtYS5zYWl0YW1hLmpwIiwiaG9uam8uc2FpdGFtYS5qcCIsImluYS5zYWl0YW1hLmpwIiwiaXJ1bWEuc2FpdGFtYS5qcCIsIml3YXRzdWtpLnNhaXRhbWEuanAiLCJrYW1paXp1bWkuc2Fp''@;'; put 'put ''dGFtYS5qcCIsImthbWlrYXdhLnNhaXRhbWEuanAiLCJrYW1pc2F0by5zYWl0YW1hLmpwIiwia2FzdWthYmUuc2FpdGFtYS5qcCIsImthd2Fnb2Uuc2FpdGFtYS5qcCIsImthd2FndWNoaS5zYWl0YW1hLmpwIiwia2F3YWppbWEuc2FpdGFtYS5qcCIsImthem8uc2FpdGFtYS5qcCIsImtpdGFt''@;'; put 'put ''b3RvLnNhaXRhbWEuanAiLCJrb3NoaWdheWEuc2FpdGFtYS5qcCIsImtvdW5vc3Uuc2FpdGFtYS5qcCIsImt1a2kuc2FpdGFtYS5qcCIsImt1bWFnYXlhLnNhaXRhbWEuanAiLCJtYXRzdWJ1c2hpLnNhaXRhbWEuanAiLCJtaW5hbm8uc2FpdGFtYS5qcCIsIm1pc2F0by5zYWl0YW1hLmpwIiwi''@;'; put 'put ''bWl5YXNoaXJvLnNhaXRhbWEuanAiLCJtaXlvc2hpLnNhaXRhbWEuanAiLCJtb3JveWFtYS5zYWl0YW1hLmpwIiwibmFnYXRvcm8uc2FpdGFtYS5qcCIsIm5hbWVnYXdhLnNhaXRhbWEuanAiLCJuaWl6YS5zYWl0YW1hLmpwIiwib2dhbm8uc2FpdGFtYS5qcCIsIm9nYXdhLnNhaXRhbWEuanAi''@;'; put 'put ''LCJvZ29zZS5zYWl0YW1hLmpwIiwib2tlZ2F3YS5zYWl0YW1hLmpwIiwib21peWEuc2FpdGFtYS5qcCIsIm90YWtpLnNhaXRhbWEuanAiLCJyYW56YW4uc2FpdGFtYS5qcCIsInJ5b2thbWkuc2FpdGFtYS5qcCIsInNhaXRhbWEuc2FpdGFtYS5qcCIsInNha2Fkby5zYWl0YW1hLmpwIiwic2F0''@;'; put 'put ''dGUuc2FpdGFtYS5qcCIsInNheWFtYS5zYWl0YW1hLmpwIiwic2hpa2kuc2FpdGFtYS5qcCIsInNoaXJhb2thLnNhaXRhbWEuanAiLCJzb2thLnNhaXRhbWEuanAiLCJzdWdpdG8uc2FpdGFtYS5qcCIsInRvZGEuc2FpdGFtYS5qcCIsInRva2lnYXdhLnNhaXRhbWEuanAiLCJ0b2tvcm96YXdh''@;'; put 'put ''LnNhaXRhbWEuanAiLCJ0c3VydWdhc2hpbWEuc2FpdGFtYS5qcCIsInVyYXdhLnNhaXRhbWEuanAiLCJ3YXJhYmkuc2FpdGFtYS5qcCIsInlhc2hpby5zYWl0YW1hLmpwIiwieW9rb3plLnNhaXRhbWEuanAiLCJ5b25vLnNhaXRhbWEuanAiLCJ5b3JpaS5zYWl0YW1hLmpwIiwieW9zaGlkYS5z''@;'; put 'put ''YWl0YW1hLmpwIiwieW9zaGlrYXdhLnNhaXRhbWEuanAiLCJ5b3NoaW1pLnNhaXRhbWEuanAiLCJhaXNoby5zaGlnYS5qcCIsImdhbW8uc2hpZ2EuanAiLCJoaWdhc2hpb21pLnNoaWdhLmpwIiwiaGlrb25lLnNoaWdhLmpwIiwia29rYS5zaGlnYS5qcCIsImtvbmFuLnNoaWdhLmpwIiwia29z''@;'; put 'put ''ZWkuc2hpZ2EuanAiLCJrb3RvLnNoaWdhLmpwIiwia3VzYXRzdS5zaGlnYS5qcCIsIm1haWJhcmEuc2hpZ2EuanAiLCJtb3JpeWFtYS5zaGlnYS5qcCIsIm5hZ2FoYW1hLnNoaWdhLmpwIiwibmlzaGlhemFpLnNoaWdhLmpwIiwibm90b2dhd2Euc2hpZ2EuanAiLCJvbWloYWNoaW1hbi5zaGln''@;'; put 'put ''YS5qcCIsIm90c3Uuc2hpZ2EuanAiLCJyaXR0by5zaGlnYS5qcCIsInJ5dW9oLnNoaWdhLmpwIiwidGFrYXNoaW1hLnNoaWdhLmpwIiwidGFrYXRzdWtpLnNoaWdhLmpwIiwidG9yYWhpbWUuc2hpZ2EuanAiLCJ0b3lvc2F0by5zaGlnYS5qcCIsInlhc3Uuc2hpZ2EuanAiLCJha2FnaS5zaGlt''@;'; put 'put ''YW5lLmpwIiwiYW1hLnNoaW1hbmUuanAiLCJnb3RzdS5zaGltYW5lLmpwIiwiaGFtYWRhLnNoaW1hbmUuanAiLCJoaWdhc2hpaXp1bW8uc2hpbWFuZS5qcCIsImhpa2F3YS5zaGltYW5lLmpwIiwiaGlraW1pLnNoaW1hbmUuanAiLCJpenVtby5zaGltYW5lLmpwIiwia2FraW5va2kuc2hpbWFu''@;'; put 'put ''ZS5qcCIsIm1hc3VkYS5zaGltYW5lLmpwIiwibWF0c3VlLnNoaW1hbmUuanAiLCJtaXNhdG8uc2hpbWFuZS5qcCIsIm5pc2hpbm9zaGltYS5zaGltYW5lLmpwIiwib2hkYS5zaGltYW5lLmpwIiwib2tpbm9zaGltYS5zaGltYW5lLmpwIiwib2t1aXp1bW8uc2hpbWFuZS5qcCIsInNoaW1hbmUu''@;'; put 'put ''c2hpbWFuZS5qcCIsInRhbWF5dS5zaGltYW5lLmpwIiwidHN1d2Fuby5zaGltYW5lLmpwIiwidW5uYW4uc2hpbWFuZS5qcCIsInlha3Vtby5zaGltYW5lLmpwIiwieWFzdWdpLnNoaW1hbmUuanAiLCJ5YXRzdWthLnNoaW1hbmUuanAiLCJhcmFpLnNoaXp1b2thLmpwIiwiYXRhbWkuc2hpenVv''@;'; put 'put ''a2EuanAiLCJmdWppLnNoaXp1b2thLmpwIiwiZnVqaWVkYS5zaGl6dW9rYS5qcCIsImZ1amlrYXdhLnNoaXp1b2thLmpwIiwiZnVqaW5vbWl5YS5zaGl6dW9rYS5qcCIsImZ1a3Vyb2kuc2hpenVva2EuanAiLCJnb3RlbWJhLnNoaXp1b2thLmpwIiwiaGFpYmFyYS5zaGl6dW9rYS5qcCIsImhh''@;'; put 'put ''bWFtYXRzdS5zaGl6dW9rYS5qcCIsImhpZ2FzaGlpenUuc2hpenVva2EuanAiLCJpdG8uc2hpenVva2EuanAiLCJpd2F0YS5zaGl6dW9rYS5qcCIsIml6dS5zaGl6dW9rYS5qcCIsIml6dW5va3VuaS5zaGl6dW9rYS5qcCIsImtha2VnYXdhLnNoaXp1b2thLmpwIiwia2FubmFtaS5zaGl6dW9r''@;'; put 'put ''YS5qcCIsImthd2FuZWhvbi5zaGl6dW9rYS5qcCIsImthd2F6dS5zaGl6dW9rYS5qcCIsImtpa3VnYXdhLnNoaXp1b2thLmpwIiwia29zYWkuc2hpenVva2EuanAiLCJtYWtpbm9oYXJhLnNoaXp1b2thLmpwIiwibWF0c3V6YWtpLnNoaXp1b2thLmpwIiwibWluYW1paXp1LnNoaXp1b2thLmpw''@;'; put 'put ''IiwibWlzaGltYS5zaGl6dW9rYS5qcCIsIm1vcmltYWNoaS5zaGl6dW9rYS5qcCIsIm5pc2hpaXp1LnNoaXp1b2thLmpwIiwibnVtYXp1LnNoaXp1b2thLmpwIiwib21hZXpha2kuc2hpenVva2EuanAiLCJzaGltYWRhLnNoaXp1b2thLmpwIiwic2hpbWl6dS5zaGl6dW9rYS5qcCIsInNoaW1v''@;'; put 'put ''ZGEuc2hpenVva2EuanAiLCJzaGl6dW9rYS5zaGl6dW9rYS5qcCIsInN1c29uby5zaGl6dW9rYS5qcCIsInlhaXp1LnNoaXp1b2thLmpwIiwieW9zaGlkYS5zaGl6dW9rYS5qcCIsImFzaGlrYWdhLnRvY2hpZ2kuanAiLCJiYXRvLnRvY2hpZ2kuanAiLCJoYWdhLnRvY2hpZ2kuanAiLCJpY2hp''@;'; put 'put ''a2FpLnRvY2hpZ2kuanAiLCJpd2FmdW5lLnRvY2hpZ2kuanAiLCJrYW1pbm9rYXdhLnRvY2hpZ2kuanAiLCJrYW51bWEudG9jaGlnaS5qcCIsImthcmFzdXlhbWEudG9jaGlnaS5qcCIsImt1cm9pc28udG9jaGlnaS5qcCIsIm1hc2hpa28udG9jaGlnaS5qcCIsIm1pYnUudG9jaGlnaS5qcCIs''@;'; put 'put ''Im1va2EudG9jaGlnaS5qcCIsIm1vdGVnaS50b2NoaWdpLmpwIiwibmFzdS50b2NoaWdpLmpwIiwibmFzdXNoaW9iYXJhLnRvY2hpZ2kuanAiLCJuaWtrby50b2NoaWdpLmpwIiwibmlzaGlrYXRhLnRvY2hpZ2kuanAiLCJub2dpLnRvY2hpZ2kuanAiLCJvaGlyYS50b2NoaWdpLmpwIiwib2h0''@;'; put 'put ''YXdhcmEudG9jaGlnaS5qcCIsIm95YW1hLnRvY2hpZ2kuanAiLCJzYWt1cmEudG9jaGlnaS5qcCIsInNhbm8udG9jaGlnaS5qcCIsInNoaW1vdHN1a2UudG9jaGlnaS5qcCIsInNoaW95YS50b2NoaWdpLmpwIiwidGFrYW5lemF3YS50b2NoaWdpLmpwIiwidG9jaGlnaS50b2NoaWdpLmpwIiwi''@;'; put 'put ''dHN1Z2EudG9jaGlnaS5qcCIsInVqaWllLnRvY2hpZ2kuanAiLCJ1dHN1bm9taXlhLnRvY2hpZ2kuanAiLCJ5YWl0YS50b2NoaWdpLmpwIiwiYWl6dW1pLnRva3VzaGltYS5qcCIsImFuYW4udG9rdXNoaW1hLmpwIiwiaWNoaWJhLnRva3VzaGltYS5qcCIsIml0YW5vLnRva3VzaGltYS5qcCIs''@;'; put 'put ''ImthaW5hbi50b2t1c2hpbWEuanAiLCJrb21hdHN1c2hpbWEudG9rdXNoaW1hLmpwIiwibWF0c3VzaGlnZS50b2t1c2hpbWEuanAiLCJtaW1hLnRva3VzaGltYS5qcCIsIm1pbmFtaS50b2t1c2hpbWEuanAiLCJtaXlvc2hpLnRva3VzaGltYS5qcCIsIm11Z2kudG9rdXNoaW1hLmpwIiwibmFr''@;'; put 'put ''YWdhd2EudG9rdXNoaW1hLmpwIiwibmFydXRvLnRva3VzaGltYS5qcCIsInNhbmFnb2NoaS50b2t1c2hpbWEuanAiLCJzaGlzaGlrdWkudG9rdXNoaW1hLmpwIiwidG9rdXNoaW1hLnRva3VzaGltYS5qcCIsIndhamlraS50b2t1c2hpbWEuanAiLCJhZGFjaGkudG9reW8uanAiLCJha2lydW5v''@;'; put 'put ''LnRva3lvLmpwIiwiYWtpc2hpbWEudG9reW8uanAiLCJhb2dhc2hpbWEudG9reW8uanAiLCJhcmFrYXdhLnRva3lvLmpwIiwiYnVua3lvLnRva3lvLmpwIiwiY2hpeW9kYS50b2t5by5qcCIsImNob2Z1LnRva3lvLmpwIiwiY2h1by50b2t5by5qcCIsImVkb2dhd2EudG9reW8uanAiLCJmdWNo''@;'; put 'put ''dS50b2t5by5qcCIsImZ1c3NhLnRva3lvLmpwIiwiaGFjaGlqby50b2t5by5qcCIsImhhY2hpb2ppLnRva3lvLmpwIiwiaGFtdXJhLnRva3lvLmpwIiwiaGlnYXNoaWt1cnVtZS50b2t5by5qcCIsImhpZ2FzaGltdXJheWFtYS50b2t5by5qcCIsImhpZ2FzaGl5YW1hdG8udG9reW8uanAiLCJo''@;'; put 'put ''aW5vLnRva3lvLmpwIiwiaGlub2RlLnRva3lvLmpwIiwiaGlub2hhcmEudG9reW8uanAiLCJpbmFnaS50b2t5by5qcCIsIml0YWJhc2hpLnRva3lvLmpwIiwia2F0c3VzaGlrYS50b2t5by5qcCIsImtpdGEudG9reW8uanAiLCJraXlvc2UudG9reW8uanAiLCJrb2RhaXJhLnRva3lvLmpwIiwi''@;'; put 'put ''a29nYW5laS50b2t5by5qcCIsImtva3VidW5qaS50b2t5by5qcCIsImtvbWFlLnRva3lvLmpwIiwia290by50b2t5by5qcCIsImtvdXp1c2hpbWEudG9reW8uanAiLCJrdW5pdGFjaGkudG9reW8uanAiLCJtYWNoaWRhLnRva3lvLmpwIiwibWVndXJvLnRva3lvLmpwIiwibWluYXRvLnRva3lv''@;'; put 'put ''LmpwIiwibWl0YWthLnRva3lvLmpwIiwibWl6dWhvLnRva3lvLmpwIiwibXVzYXNoaW11cmF5YW1hLnRva3lvLmpwIiwibXVzYXNoaW5vLnRva3lvLmpwIiwibmFrYW5vLnRva3lvLmpwIiwibmVyaW1hLnRva3lvLmpwIiwib2dhc2F3YXJhLnRva3lvLmpwIiwib2t1dGFtYS50b2t5by5qcCIs''@;'; put 'put ''Im9tZS50b2t5by5qcCIsIm9zaGltYS50b2t5by5qcCIsIm90YS50b2t5by5qcCIsInNldGFnYXlhLnRva3lvLmpwIiwic2hpYnV5YS50b2t5by5qcCIsInNoaW5hZ2F3YS50b2t5by5qcCIsInNoaW5qdWt1LnRva3lvLmpwIiwic3VnaW5hbWkudG9reW8uanAiLCJzdW1pZGEudG9reW8uanAi''@;'; put 'put ''LCJ0YWNoaWthd2EudG9reW8uanAiLCJ0YWl0by50b2t5by5qcCIsInRhbWEudG9reW8uanAiLCJ0b3NoaW1hLnRva3lvLmpwIiwiY2hpenUudG90dG9yaS5qcCIsImhpbm8udG90dG9yaS5qcCIsImthd2FoYXJhLnRvdHRvcmkuanAiLCJrb2dlLnRvdHRvcmkuanAiLCJrb3RvdXJhLnRvdHRv''@;'; put 'put ''cmkuanAiLCJtaXNhc2EudG90dG9yaS5qcCIsIm5hbmJ1LnRvdHRvcmkuanAiLCJuaWNoaW5hbi50b3R0b3JpLmpwIiwic2FrYWltaW5hdG8udG90dG9yaS5qcCIsInRvdHRvcmkudG90dG9yaS5qcCIsIndha2FzYS50b3R0b3JpLmpwIiwieWF6dS50b3R0b3JpLmpwIiwieW9uYWdvLnRvdHRv''@;'; put 'put ''cmkuanAiLCJhc2FoaS50b3lhbWEuanAiLCJmdWNodS50b3lhbWEuanAiLCJmdWt1bWl0c3UudG95YW1hLmpwIiwiZnVuYWhhc2hpLnRveWFtYS5qcCIsImhpbWkudG95YW1hLmpwIiwiaW1penUudG95YW1hLmpwIiwiaW5hbWkudG95YW1hLmpwIiwiam9oYW5hLnRveWFtYS5qcCIsImthbWlp''@;'; put 'put ''Y2hpLnRveWFtYS5qcCIsImt1cm9iZS50b3lhbWEuanAiLCJuYWthbmlpa2F3YS50b3lhbWEuanAiLCJuYW1lcmlrYXdhLnRveWFtYS5qcCIsIm5hbnRvLnRveWFtYS5qcCIsIm55dXplbi50b3lhbWEuanAiLCJveWFiZS50b3lhbWEuanAiLCJ0YWlyYS50b3lhbWEuanAiLCJ0YWthb2thLnRv''@;'; put 'put ''eWFtYS5qcCIsInRhdGV5YW1hLnRveWFtYS5qcCIsInRvZ2EudG95YW1hLmpwIiwidG9uYW1pLnRveWFtYS5qcCIsInRveWFtYS50b3lhbWEuanAiLCJ1bmF6dWtpLnRveWFtYS5qcCIsInVvenUudG95YW1hLmpwIiwieWFtYWRhLnRveWFtYS5qcCIsImFyaWRhLndha2F5YW1hLmpwIiwiYXJp''@;'; put 'put ''ZGFnYXdhLndha2F5YW1hLmpwIiwiZ29iby53YWtheWFtYS5qcCIsImhhc2hpbW90by53YWtheWFtYS5qcCIsImhpZGFrYS53YWtheWFtYS5qcCIsImhpcm9nYXdhLndha2F5YW1hLmpwIiwiaW5hbWkud2FrYXlhbWEuanAiLCJpd2FkZS53YWtheWFtYS5qcCIsImthaW5hbi53YWtheWFtYS5q''@;'; put 'put ''cCIsImthbWl0b25kYS53YWtheWFtYS5qcCIsImthdHN1cmFnaS53YWtheWFtYS5qcCIsImtpbWluby53YWtheWFtYS5qcCIsImtpbm9rYXdhLndha2F5YW1hLmpwIiwia2l0YXlhbWEud2FrYXlhbWEuanAiLCJrb3lhLndha2F5YW1hLmpwIiwia296YS53YWtheWFtYS5qcCIsImtvemFnYXdh''@;'; put 'put ''Lndha2F5YW1hLmpwIiwia3Vkb3lhbWEud2FrYXlhbWEuanAiLCJrdXNoaW1vdG8ud2FrYXlhbWEuanAiLCJtaWhhbWEud2FrYXlhbWEuanAiLCJtaXNhdG8ud2FrYXlhbWEuanAiLCJuYWNoaWthdHN1dXJhLndha2F5YW1hLmpwIiwic2hpbmd1Lndha2F5YW1hLmpwIiwic2hpcmFoYW1hLndh''@;'; put 'put ''a2F5YW1hLmpwIiwidGFpamkud2FrYXlhbWEuanAiLCJ0YW5hYmUud2FrYXlhbWEuanAiLCJ3YWtheWFtYS53YWtheWFtYS5qcCIsInl1YXNhLndha2F5YW1hLmpwIiwieXVyYS53YWtheWFtYS5qcCIsImFzYWhpLnlhbWFnYXRhLmpwIiwiZnVuYWdhdGEueWFtYWdhdGEuanAiLCJoaWdhc2hp''@;'; put 'put ''bmUueWFtYWdhdGEuanAiLCJpaWRlLnlhbWFnYXRhLmpwIiwia2Fob2t1LnlhbWFnYXRhLmpwIiwia2FtaW5veWFtYS55YW1hZ2F0YS5qcCIsImthbmV5YW1hLnlhbWFnYXRhLmpwIiwia2F3YW5pc2hpLnlhbWFnYXRhLmpwIiwibWFtdXJvZ2F3YS55YW1hZ2F0YS5qcCIsIm1pa2F3YS55YW1h''@;'; put 'put ''Z2F0YS5qcCIsIm11cmF5YW1hLnlhbWFnYXRhLmpwIiwibmFnYWkueWFtYWdhdGEuanAiLCJuYWtheWFtYS55YW1hZ2F0YS5qcCIsIm5hbnlvLnlhbWFnYXRhLmpwIiwibmlzaGlrYXdhLnlhbWFnYXRhLmpwIiwib2JhbmF6YXdhLnlhbWFnYXRhLmpwIiwib2UueWFtYWdhdGEuanAiLCJvZ3Vu''@;'; put 'put ''aS55YW1hZ2F0YS5qcCIsIm9oa3VyYS55YW1hZ2F0YS5qcCIsIm9pc2hpZGEueWFtYWdhdGEuanAiLCJzYWdhZS55YW1hZ2F0YS5qcCIsInNha2F0YS55YW1hZ2F0YS5qcCIsInNha2VnYXdhLnlhbWFnYXRhLmpwIiwic2hpbmpvLnlhbWFnYXRhLmpwIiwic2hpcmF0YWthLnlhbWFnYXRhLmpw''@;'; put 'put ''Iiwic2hvbmFpLnlhbWFnYXRhLmpwIiwidGFrYWhhdGEueWFtYWdhdGEuanAiLCJ0ZW5kby55YW1hZ2F0YS5qcCIsInRvemF3YS55YW1hZ2F0YS5qcCIsInRzdXJ1b2thLnlhbWFnYXRhLmpwIiwieWFtYWdhdGEueWFtYWdhdGEuanAiLCJ5YW1hbm9iZS55YW1hZ2F0YS5qcCIsInlvbmV6YXdh''@;'; put 'put ''LnlhbWFnYXRhLmpwIiwieXV6YS55YW1hZ2F0YS5qcCIsImFidS55YW1hZ3VjaGkuanAiLCJoYWdpLnlhbWFndWNoaS5qcCIsImhpa2FyaS55YW1hZ3VjaGkuanAiLCJob2Z1LnlhbWFndWNoaS5qcCIsIml3YWt1bmkueWFtYWd1Y2hpLmpwIiwia3VkYW1hdHN1LnlhbWFndWNoaS5qcCIsIm1p''@;'; put 'put ''dG91LnlhbWFndWNoaS5qcCIsIm5hZ2F0by55YW1hZ3VjaGkuanAiLCJvc2hpbWEueWFtYWd1Y2hpLmpwIiwic2hpbW9ub3Nla2kueWFtYWd1Y2hpLmpwIiwic2h1bmFuLnlhbWFndWNoaS5qcCIsInRhYnVzZS55YW1hZ3VjaGkuanAiLCJ0b2t1eWFtYS55YW1hZ3VjaGkuanAiLCJ0b3lvdGEu''@;'; put 'put ''eWFtYWd1Y2hpLmpwIiwidWJlLnlhbWFndWNoaS5qcCIsInl1dS55YW1hZ3VjaGkuanAiLCJjaHVvLnlhbWFuYXNoaS5qcCIsImRvc2hpLnlhbWFuYXNoaS5qcCIsImZ1ZWZ1a2kueWFtYW5hc2hpLmpwIiwiZnVqaWthd2EueWFtYW5hc2hpLmpwIiwiZnVqaWthd2FndWNoaWtvLnlhbWFuYXNo''@;'; put 'put ''aS5qcCIsImZ1aml5b3NoaWRhLnlhbWFuYXNoaS5qcCIsImhheWFrYXdhLnlhbWFuYXNoaS5qcCIsImhva3V0by55YW1hbmFzaGkuanAiLCJpY2hpa2F3YW1pc2F0by55YW1hbmFzaGkuanAiLCJrYWkueWFtYW5hc2hpLmpwIiwia29mdS55YW1hbmFzaGkuanAiLCJrb3NodS55YW1hbmFzaGku''@;'; put 'put ''anAiLCJrb3N1Z2UueWFtYW5hc2hpLmpwIiwibWluYW1pLWFscHMueWFtYW5hc2hpLmpwIiwibWlub2J1LnlhbWFuYXNoaS5qcCIsIm5ha2FtaWNoaS55YW1hbmFzaGkuanAiLCJuYW5idS55YW1hbmFzaGkuanAiLCJuYXJ1c2F3YS55YW1hbmFzaGkuanAiLCJuaXJhc2FraS55YW1hbmFzaGku''@;'; put 'put ''anAiLCJuaXNoaWthdHN1cmEueWFtYW5hc2hpLmpwIiwib3NoaW5vLnlhbWFuYXNoaS5qcCIsIm90c3VraS55YW1hbmFzaGkuanAiLCJzaG93YS55YW1hbmFzaGkuanAiLCJ0YWJheWFtYS55YW1hbmFzaGkuanAiLCJ0c3VydS55YW1hbmFzaGkuanAiLCJ1ZW5vaGFyYS55YW1hbmFzaGkuanAi''@;'; put 'put ''LCJ5YW1hbmFrYWtvLnlhbWFuYXNoaS5qcCIsInlhbWFuYXNoaS55YW1hbmFzaGkuanAiLCJrZSIsImFjLmtlIiwiY28ua2UiLCJnby5rZSIsImluZm8ua2UiLCJtZS5rZSIsIm1vYmkua2UiLCJuZS5rZSIsIm9yLmtlIiwic2Mua2UiLCJrZyIsImNvbS5rZyIsImVkdS5rZyIsImdvdi5rZyIs''@;'; put 'put ''Im1pbC5rZyIsIm5ldC5rZyIsIm9yZy5rZyIsIioua2giLCJraSIsImJpei5raSIsImNvbS5raSIsImVkdS5raSIsImdvdi5raSIsImluZm8ua2kiLCJuZXQua2kiLCJvcmcua2kiLCJrbSIsImFzcy5rbSIsImNvbS5rbSIsImVkdS5rbSIsImdvdi5rbSIsIm1pbC5rbSIsIm5vbS5rbSIsIm9y''@;'; put 'put ''Zy5rbSIsInByZC5rbSIsInRtLmttIiwiYXNzby5rbSIsImNvb3Aua20iLCJnb3V2LmttIiwibWVkZWNpbi5rbSIsIm5vdGFpcmVzLmttIiwicGhhcm1hY2llbnMua20iLCJwcmVzc2Uua20iLCJ2ZXRlcmluYWlyZS5rbSIsImtuIiwiZWR1LmtuIiwiZ292LmtuIiwibmV0LmtuIiwib3JnLmtu''@;'; put 'put ''Iiwia3AiLCJjb20ua3AiLCJlZHUua3AiLCJnb3Yua3AiLCJvcmcua3AiLCJyZXAua3AiLCJ0cmEua3AiLCJrciIsImFjLmtyIiwiY28ua3IiLCJlcy5rciIsImdvLmtyIiwiaHMua3IiLCJrZy5rciIsIm1pbC5rciIsIm1zLmtyIiwibmUua3IiLCJvci5rciIsInBlLmtyIiwicmUua3IiLCJz''@;'; put 'put ''Yy5rciIsImJ1c2FuLmtyIiwiY2h1bmdidWsua3IiLCJjaHVuZ25hbS5rciIsImRhZWd1LmtyIiwiZGFlamVvbi5rciIsImdhbmd3b24ua3IiLCJnd2FuZ2p1LmtyIiwiZ3llb25nYnVrLmtyIiwiZ3llb25nZ2kua3IiLCJneWVvbmduYW0ua3IiLCJpbmNoZW9uLmtyIiwiamVqdS5rciIsImpl''@;'; put 'put ''b25idWsua3IiLCJqZW9ubmFtLmtyIiwic2VvdWwua3IiLCJ1bHNhbi5rciIsImt3IiwiY29tLmt3IiwiZWR1Lmt3IiwiZW1iLmt3IiwiZ292Lmt3IiwiaW5kLmt3IiwibmV0Lmt3Iiwib3JnLmt3Iiwia3kiLCJjb20ua3kiLCJlZHUua3kiLCJuZXQua3kiLCJvcmcua3kiLCJreiIsImNvbS5r''@;'; put 'put ''eiIsImVkdS5reiIsImdvdi5reiIsIm1pbC5reiIsIm5ldC5reiIsIm9yZy5reiIsImxhIiwiY29tLmxhIiwiZWR1LmxhIiwiZ292LmxhIiwiaW5mby5sYSIsImludC5sYSIsIm5ldC5sYSIsIm9yZy5sYSIsInBlci5sYSIsImxiIiwiY29tLmxiIiwiZWR1LmxiIiwiZ292LmxiIiwibmV0Lmxi''@;'; put 'put ''Iiwib3JnLmxiIiwibGMiLCJjby5sYyIsImNvbS5sYyIsImVkdS5sYyIsImdvdi5sYyIsIm5ldC5sYyIsIm9yZy5sYyIsImxpIiwibGsiLCJhYy5sayIsImFzc24ubGsiLCJjb20ubGsiLCJlZHUubGsiLCJnb3YubGsiLCJncnAubGsiLCJob3RlbC5sayIsImludC5sayIsImx0ZC5sayIsIm5l''@;'; put 'put ''dC5sayIsIm5nby5sayIsIm9yZy5sayIsInNjaC5sayIsInNvYy5sayIsIndlYi5sayIsImxyIiwiY29tLmxyIiwiZWR1LmxyIiwiZ292LmxyIiwibmV0LmxyIiwib3JnLmxyIiwibHMiLCJhYy5scyIsImJpei5scyIsImNvLmxzIiwiZWR1LmxzIiwiZ292LmxzIiwiaW5mby5scyIsIm5ldC5s''@;'; put 'put ''cyIsIm9yZy5scyIsInNjLmxzIiwibHQiLCJnb3YubHQiLCJsdSIsImx2IiwiYXNuLmx2IiwiY29tLmx2IiwiY29uZi5sdiIsImVkdS5sdiIsImdvdi5sdiIsImlkLmx2IiwibWlsLmx2IiwibmV0Lmx2Iiwib3JnLmx2IiwibHkiLCJjb20ubHkiLCJlZHUubHkiLCJnb3YubHkiLCJpZC5seSIs''@;'; put 'put ''Im1lZC5seSIsIm5ldC5seSIsIm9yZy5seSIsInBsYy5seSIsInNjaC5seSIsIm1hIiwiYWMubWEiLCJjby5tYSIsImdvdi5tYSIsIm5ldC5tYSIsIm9yZy5tYSIsInByZXNzLm1hIiwibWMiLCJhc3NvLm1jIiwidG0ubWMiLCJtZCIsIm1lIiwiYWMubWUiLCJjby5tZSIsImVkdS5tZSIsImdv''@;'; put 'put ''di5tZSIsIml0cy5tZSIsIm5ldC5tZSIsIm9yZy5tZSIsInByaXYubWUiLCJtZyIsImNvLm1nIiwiY29tLm1nIiwiZWR1Lm1nIiwiZ292Lm1nIiwibWlsLm1nIiwibm9tLm1nIiwib3JnLm1nIiwicHJkLm1nIiwibWgiLCJtaWwiLCJtayIsImNvbS5tayIsImVkdS5tayIsImdvdi5tayIsImlu''@;'; put 'put ''Zi5tayIsIm5hbWUubWsiLCJuZXQubWsiLCJvcmcubWsiLCJtbCIsImNvbS5tbCIsImVkdS5tbCIsImdvdXYubWwiLCJnb3YubWwiLCJuZXQubWwiLCJvcmcubWwiLCJwcmVzc2UubWwiLCIqLm1tIiwibW4iLCJlZHUubW4iLCJnb3YubW4iLCJvcmcubW4iLCJtbyIsImNvbS5tbyIsImVkdS5t''@;'; put 'put ''byIsImdvdi5tbyIsIm5ldC5tbyIsIm9yZy5tbyIsIm1vYmkiLCJtcCIsIm1xIiwibXIiLCJnb3YubXIiLCJtcyIsImNvbS5tcyIsImVkdS5tcyIsImdvdi5tcyIsIm5ldC5tcyIsIm9yZy5tcyIsIm10IiwiY29tLm10IiwiZWR1Lm10IiwibmV0Lm10Iiwib3JnLm10IiwibXUiLCJhYy5tdSIs''@;'; put 'put ''ImNvLm11IiwiY29tLm11IiwiZ292Lm11IiwibmV0Lm11Iiwib3IubXUiLCJvcmcubXUiLCJtdXNldW0iLCJtdiIsImFlcm8ubXYiLCJiaXoubXYiLCJjb20ubXYiLCJjb29wLm12IiwiZWR1Lm12IiwiZ292Lm12IiwiaW5mby5tdiIsImludC5tdiIsIm1pbC5tdiIsIm11c2V1bS5tdiIsIm5h''@;'; put 'put ''bWUubXYiLCJuZXQubXYiLCJvcmcubXYiLCJwcm8ubXYiLCJtdyIsImFjLm13IiwiYml6Lm13IiwiY28ubXciLCJjb20ubXciLCJjb29wLm13IiwiZWR1Lm13IiwiZ292Lm13IiwiaW50Lm13IiwibmV0Lm13Iiwib3JnLm13IiwibXgiLCJjb20ubXgiLCJlZHUubXgiLCJnb2IubXgiLCJuZXQu''@;'; put 'put ''bXgiLCJvcmcubXgiLCJteSIsImJpei5teSIsImNvbS5teSIsImVkdS5teSIsImdvdi5teSIsIm1pbC5teSIsIm5hbWUubXkiLCJuZXQubXkiLCJvcmcubXkiLCJteiIsImFjLm16IiwiYWR2Lm16IiwiY28ubXoiLCJlZHUubXoiLCJnb3YubXoiLCJtaWwubXoiLCJuZXQubXoiLCJvcmcubXoi''@;'; put 'put ''LCJuYSIsImFsdC5uYSIsImNvLm5hIiwiY29tLm5hIiwiZ292Lm5hIiwibmV0Lm5hIiwib3JnLm5hIiwibmFtZSIsIm5jIiwiYXNzby5uYyIsIm5vbS5uYyIsIm5lIiwibmV0IiwibmYiLCJhcnRzLm5mIiwiY29tLm5mIiwiZmlybS5uZiIsImluZm8ubmYiLCJuZXQubmYiLCJvdGhlci5uZiIs''@;'; put 'put ''InBlci5uZiIsInJlYy5uZiIsInN0b3JlLm5mIiwid2ViLm5mIiwibmciLCJjb20ubmciLCJlZHUubmciLCJnb3YubmciLCJpLm5nIiwibWlsLm5nIiwibW9iaS5uZyIsIm5hbWUubmciLCJuZXQubmciLCJvcmcubmciLCJzY2gubmciLCJuaSIsImFjLm5pIiwiYml6Lm5pIiwiY28ubmkiLCJj''@;'; put 'put ''b20ubmkiLCJlZHUubmkiLCJnb2IubmkiLCJpbi5uaSIsImluZm8ubmkiLCJpbnQubmkiLCJtaWwubmkiLCJuZXQubmkiLCJub20ubmkiLCJvcmcubmkiLCJ3ZWIubmkiLCJubCIsIm5vIiwiZmhzLm5vIiwiZm9sa2ViaWJsLm5vIiwiZnlsa2VzYmlibC5ubyIsImlkcmV0dC5ubyIsIm11c2V1''@;'; put 'put ''bS5ubyIsInByaXYubm8iLCJ2Z3Mubm8iLCJkZXAubm8iLCJoZXJhZC5ubyIsImtvbW11bmUubm8iLCJtaWwubm8iLCJzdGF0Lm5vIiwiYWEubm8iLCJhaC5ubyIsImJ1Lm5vIiwiZm0ubm8iLCJobC5ubyIsImhtLm5vIiwiamFuLW1heWVuLm5vIiwibXIubm8iLCJubC5ubyIsIm50Lm5vIiwi''@;'; put 'put ''b2Yubm8iLCJvbC5ubyIsIm9zbG8ubm8iLCJybC5ubyIsInNmLm5vIiwic3Qubm8iLCJzdmFsYmFyZC5ubyIsInRtLm5vIiwidHIubm8iLCJ2YS5ubyIsInZmLm5vIiwiZ3MuYWEubm8iLCJncy5haC5ubyIsImdzLmJ1Lm5vIiwiZ3MuZm0ubm8iLCJncy5obC5ubyIsImdzLmhtLm5vIiwiZ3Mu''@;'; put 'put ''amFuLW1heWVuLm5vIiwiZ3MubXIubm8iLCJncy5ubC5ubyIsImdzLm50Lm5vIiwiZ3Mub2Yubm8iLCJncy5vbC5ubyIsImdzLm9zbG8ubm8iLCJncy5ybC5ubyIsImdzLnNmLm5vIiwiZ3Muc3Qubm8iLCJncy5zdmFsYmFyZC5ubyIsImdzLnRtLm5vIiwiZ3MudHIubm8iLCJncy52YS5ubyIs''@;'; put 'put ''ImdzLnZmLm5vIiwiYWtyZWhhbW4ubm8iLCJceGU1a3JlaGFtbi5ubyIsImFsZ2FyZC5ubyIsIlx4ZTVsZ1x4ZTVyZC5ubyIsImFybmEubm8iLCJicm9ubm95c3VuZC5ubyIsImJyXHhmOG5uXHhmOHlzdW5kLm5vIiwiYnJ1bXVuZGRhbC5ubyIsImJyeW5lLm5vIiwiZHJvYmFrLm5vIiwiZHJc''@;'; put 'put ''eGY4YmFrLm5vIiwiZWdlcnN1bmQubm8iLCJmZXRzdW5kLm5vIiwiZmxvcm8ubm8iLCJmbG9yXHhmOC5ubyIsImZyZWRyaWtzdGFkLm5vIiwiaG9ra3N1bmQubm8iLCJob25lZm9zcy5ubyIsImhceGY4bmVmb3NzLm5vIiwiamVzc2hlaW0ubm8iLCJqb3JwZWxhbmQubm8iLCJqXHhmOHJwZWxh''@;'; put 'put ''bmQubm8iLCJraXJrZW5lcy5ubyIsImtvcGVydmlrLm5vIiwia3Jva3N0YWRlbHZhLm5vIiwibGFuZ2V2YWcubm8iLCJsYW5nZXZceGU1Zy5ubyIsImxlaXJ2aWsubm8iLCJtam9uZGFsZW4ubm8iLCJtalx4ZjhuZGFsZW4ubm8iLCJtby1pLXJhbmEubm8iLCJtb3Nqb2VuLm5vIiwibW9zalx4''@;'; put 'put ''Zjhlbi5ubyIsIm5lc29kZHRhbmdlbi5ubyIsIm9ya2FuZ2VyLm5vIiwib3NveXJvLm5vIiwib3NceGY4eXJvLm5vIiwicmFob2x0Lm5vIiwiclx4ZTVob2x0Lm5vIiwic2FuZG5lc3Nqb2VuLm5vIiwic2FuZG5lc3NqXHhmOGVuLm5vIiwic2tlZHNtb2tvcnNldC5ubyIsInNsYXR0dW0ubm8i''@;'; put 'put ''LCJzcGplbGthdmlrLm5vIiwic3RhdGhlbGxlLm5vIiwic3RhdmVybi5ubyIsInN0am9yZGFsc2hhbHNlbi5ubyIsInN0alx4ZjhyZGFsc2hhbHNlbi5ubyIsInRhbmFuZ2VyLm5vIiwidHJhbmJ5Lm5vIiwidm9zc2V2YW5nZW4ubm8iLCJhYXJib3J0ZS5ubyIsImFlanJpZS5ubyIsImFmam9y''@;'; put 'put ''ZC5ubyIsIlx4ZTVmam9yZC5ubyIsImFnZGVuZXMubm8iLCJuZXMuYWtlcnNodXMubm8iLCJha25vbHVva3RhLm5vIiwiXHhlMWtcdTAxNGJvbHVva3RhLm5vIiwiYWwubm8iLCJceGU1bC5ubyIsImFsYWhlYWRqdS5ubyIsIlx4ZTFsYWhlYWRqdS5ubyIsImFsZXN1bmQubm8iLCJceGU1bGVz''@;'; put 'put ''dW5kLm5vIiwiYWxzdGFoYXVnLm5vIiwiYWx0YS5ubyIsIlx4ZTFsdFx4ZTEubm8iLCJhbHZkYWwubm8iLCJhbWxpLm5vIiwiXHhlNW1saS5ubyIsImFtb3Qubm8iLCJceGU1bW90Lm5vIiwiYW5kYXN1b2xvLm5vIiwiYW5kZWJ1Lm5vIiwiYW5kb3kubm8iLCJhbmRceGY4eS5ubyIsImFyZGFs''@;'; put 'put ''Lm5vIiwiXHhlNXJkYWwubm8iLCJhcmVtYXJrLm5vIiwiYXJlbmRhbC5ubyIsIlx4ZTVzLm5vIiwiYXNlcmFsLm5vIiwiXHhlNXNlcmFsLm5vIiwiYXNrZXIubm8iLCJhc2tpbS5ubyIsImFza295Lm5vIiwiYXNrXHhmOHkubm8iLCJhc2t2b2xsLm5vIiwiYXNuZXMubm8iLCJceGU1c25lcy5u''@;'; put 'put ''byIsImF1ZG5lZGFsbi5ubyIsImF1a3JhLm5vIiwiYXVyZS5ubyIsImF1cmxhbmQubm8iLCJhdXJza29nLWhvbGFuZC5ubyIsImF1cnNrb2ctaFx4ZjhsYW5kLm5vIiwiYXVzdGV2b2xsLm5vIiwiYXVzdHJoZWltLm5vIiwiYXZlcm95Lm5vIiwiYXZlclx4Zjh5Lm5vIiwiYmFkYWRkamEubm8i''@;'; put 'put ''LCJiXHhlNWRceGU1ZGRqXHhlNS5ubyIsImJceGU2cnVtLm5vIiwiYmFoY2F2dW90bmEubm8iLCJiXHhlMWhjYXZ1b3RuYS5ubyIsImJhaGNjYXZ1b3RuYS5ubyIsImJceGUxaGNjYXZ1b3RuYS5ubyIsImJhaWRhci5ubyIsImJceGUxaWRceGUxci5ubyIsImJhamRkYXIubm8iLCJiXHhlMWpk''@;'; put 'put ''ZGFyLm5vIiwiYmFsYXQubm8iLCJiXHhlMWxceGUxdC5ubyIsImJhbGVzdHJhbmQubm8iLCJiYWxsYW5nZW4ubm8iLCJiYWxzZmpvcmQubm8iLCJiYW1ibGUubm8iLCJiYXJkdS5ubyIsImJhcnVtLm5vIiwiYmF0c2Zqb3JkLm5vIiwiYlx4ZTV0c2Zqb3JkLm5vIiwiYmVhcmFsdmFoa2kubm8i''@;'; put 'put ''LCJiZWFyYWx2XHhlMWhraS5ubyIsImJlYXJkdS5ubyIsImJlaWFybi5ubyIsImJlcmcubm8iLCJiZXJnZW4ubm8iLCJiZXJsZXZhZy5ubyIsImJlcmxldlx4ZTVnLm5vIiwiYmlldmF0Lm5vIiwiYmlldlx4ZTF0Lm5vIiwiYmluZGFsLm5vIiwiYmlya2VuZXMubm8iLCJiamFya295Lm5vIiwi''@;'; put 'put ''YmphcmtceGY4eS5ubyIsImJqZXJrcmVpbS5ubyIsImJqdWduLm5vIiwiYm9kby5ubyIsImJvZFx4Zjgubm8iLCJib2tuLm5vIiwiYm9tbG8ubm8iLCJiXHhmOG1sby5ubyIsImJyZW1hbmdlci5ubyIsImJyb25ub3kubm8iLCJiclx4Zjhublx4Zjh5Lm5vIiwiYnVkZWpqdS5ubyIsIm5lcy5i''@;'; put 'put ''dXNrZXJ1ZC5ubyIsImJ5Z2xhbmQubm8iLCJieWtsZS5ubyIsImNhaGNlc3VvbG8ubm8iLCJcdTAxMGRceGUxaGNlc3VvbG8ubm8iLCJkYXZ2ZW5qYXJnYS5ubyIsImRhdnZlbmpceGUxcmdhLm5vIiwiZGF2dmVzaWlkYS5ubyIsImRlYXRudS5ubyIsImRpZWxkZGFudW9ycmkubm8iLCJkaXZ0''@;'; put 'put ''YXN2dW9kbmEubm8iLCJkaXZ0dGFzdnVvdG5hLm5vIiwiZG9ubmEubm8iLCJkXHhmOG5uYS5ubyIsImRvdnJlLm5vIiwiZHJhbW1lbi5ubyIsImRyYW5nZWRhbC5ubyIsImR5cm95Lm5vIiwiZHlyXHhmOHkubm8iLCJlaWQubm8iLCJlaWRmam9yZC5ubyIsImVpZHNiZXJnLm5vIiwiZWlkc2tv''@;'; put 'put ''Zy5ubyIsImVpZHN2b2xsLm5vIiwiZWlnZXJzdW5kLm5vIiwiZWx2ZXJ1bS5ubyIsImVuZWJha2subm8iLCJlbmdlcmRhbC5ubyIsImV0bmUubm8iLCJldG5lZGFsLm5vIiwiZXZlbmFzc2kubm8iLCJldmVuXHhlMVx1MDE2MVx1MDE2MWkubm8iLCJldmVuZXMubm8iLCJldmplLW9nLWhvcm5u''@;'; put 'put ''ZXMubm8iLCJmYXJzdW5kLm5vIiwiZmF1c2tlLm5vIiwiZmVkamUubm8iLCJmZXQubm8iLCJmaW5ub3kubm8iLCJmaW5uXHhmOHkubm8iLCJmaXRqYXIubm8iLCJmamFsZXIubm8iLCJmamVsbC5ubyIsImZsYS5ubyIsImZsXHhlNS5ubyIsImZsYWtzdGFkLm5vIiwiZmxhdGFuZ2VyLm5vIiwi''@;'; put 'put ''Zmxla2tlZmpvcmQubm8iLCJmbGVzYmVyZy5ubyIsImZsb3JhLm5vIiwiZm9sbGRhbC5ubyIsImZvcmRlLm5vIiwiZlx4ZjhyZGUubm8iLCJmb3JzYW5kLm5vIiwiZm9zbmVzLm5vIiwiZnJceGU2bmEubm8iLCJmcmFuYS5ubyIsImZyZWkubm8iLCJmcm9nbi5ubyIsImZyb2xhbmQubm8iLCJm''@;'; put 'put ''cm9zdGEubm8iLCJmcm95YS5ubyIsImZyXHhmOHlhLm5vIiwiZnVvaXNrdS5ubyIsImZ1b3Nza28ubm8iLCJmdXNhLm5vIiwiZnlyZXNkYWwubm8iLCJnYWl2dW90bmEubm8iLCJnXHhlMWl2dW90bmEubm8iLCJnYWxzYS5ubyIsImdceGUxbHNceGUxLm5vIiwiZ2FtdmlrLm5vIiwiZ2FuZ2F2''@;'; put 'put ''aWlrYS5ubyIsImdceGUxXHUwMTRiZ2F2aWlrYS5ubyIsImdhdWxhci5ubyIsImdhdXNkYWwubm8iLCJnaWVodGF2dW9hdG5hLm5vIiwiZ2lsZGVza2FsLm5vIiwiZ2lsZGVza1x4ZTVsLm5vIiwiZ2lza2Uubm8iLCJnamVtbmVzLm5vIiwiZ2plcmRydW0ubm8iLCJnamVyc3RhZC5ubyIsImdq''@;'; put 'put ''ZXNkYWwubm8iLCJnam92aWsubm8iLCJnalx4Zjh2aWsubm8iLCJnbG9wcGVuLm5vIiwiZ29sLm5vIiwiZ3Jhbi5ubyIsImdyYW5lLm5vIiwiZ3JhbnZpbi5ubyIsImdyYXRhbmdlbi5ubyIsImdyaW1zdGFkLm5vIiwiZ3Jvbmcubm8iLCJncnVlLm5vIiwiZ3VsZW4ubm8iLCJndW92ZGFnZWFp''@;'; put 'put ''ZG51Lm5vIiwiaGEubm8iLCJoXHhlNS5ubyIsImhhYm1lci5ubyIsImhceGUxYm1lci5ubyIsImhhZHNlbC5ubyIsImhceGU2Z2Vib3N0YWQubm8iLCJoYWdlYm9zdGFkLm5vIiwiaGFsZGVuLm5vIiwiaGFsc2Eubm8iLCJoYW1hci5ubyIsImhhbWFyb3kubm8iLCJoYW1tYXJmZWFzdGEubm8i''@;'; put 'put ''LCJoXHhlMW1tXHhlMXJmZWFzdGEubm8iLCJoYW1tZXJmZXN0Lm5vIiwiaGFwbWlyLm5vIiwiaFx4ZTFwbWlyLm5vIiwiaGFyYW0ubm8iLCJoYXJlaWQubm8iLCJoYXJzdGFkLm5vIiwiaGFzdmlrLm5vIiwiaGF0dGZqZWxsZGFsLm5vIiwiaGF1Z2VzdW5kLm5vIiwib3MuaGVkbWFyay5ubyIs''@;'; put 'put ''InZhbGVyLmhlZG1hcmsubm8iLCJ2XHhlNWxlci5oZWRtYXJrLm5vIiwiaGVtbmUubm8iLCJoZW1uZXMubm8iLCJoZW1zZWRhbC5ubyIsImhpdHJhLm5vIiwiaGphcnRkYWwubm8iLCJoamVsbWVsYW5kLm5vIiwiaG9ib2wubm8iLCJob2JceGY4bC5ubyIsImhvZi5ubyIsImhvbC5ubyIsImhv''@;'; put 'put ''bGUubm8iLCJob2xtZXN0cmFuZC5ubyIsImhvbHRhbGVuLm5vIiwiaG9sdFx4ZTVsZW4ubm8iLCJvcy5ob3JkYWxhbmQubm8iLCJob3JuaW5kYWwubm8iLCJob3J0ZW4ubm8iLCJob3lhbmdlci5ubyIsImhceGY4eWFuZ2VyLm5vIiwiaG95bGFuZGV0Lm5vIiwiaFx4Zjh5bGFuZGV0Lm5vIiwi''@;'; put 'put ''aHVyZGFsLm5vIiwiaHVydW0ubm8iLCJodmFsZXIubm8iLCJoeWxsZXN0YWQubm8iLCJpYmVzdGFkLm5vIiwiaW5kZXJveS5ubyIsImluZGVyXHhmOHkubm8iLCJpdmVsYW5kLm5vIiwiaXZndS5ubyIsImpldm5ha2VyLm5vIiwiam9sc3Rlci5ubyIsImpceGY4bHN0ZXIubm8iLCJqb25kYWwu''@;'; put 'put ''bm8iLCJrYWZqb3JkLm5vIiwia1x4ZTVmam9yZC5ubyIsImthcmFzam9oa2Eubm8iLCJrXHhlMXJceGUxXHUwMTYxam9oa2Eubm8iLCJrYXJhc2pvay5ubyIsImthcmxzb3kubm8iLCJrYXJtb3kubm8iLCJrYXJtXHhmOHkubm8iLCJrYXV0b2tlaW5vLm5vIiwia2xhYnUubm8iLCJrbFx4ZTZi''@;'; put 'put ''dS5ubyIsImtsZXBwLm5vIiwia29uZ3NiZXJnLm5vIiwia29uZ3N2aW5nZXIubm8iLCJrcmFhbmdoa2Uubm8iLCJrclx4ZTVhbmdoa2Uubm8iLCJrcmFnZXJvLm5vIiwia3JhZ2VyXHhmOC5ubyIsImtyaXN0aWFuc2FuZC5ubyIsImtyaXN0aWFuc3VuZC5ubyIsImtyb2RzaGVyYWQubm8iLCJr''@;'; put 'put ''clx4Zjhkc2hlcmFkLm5vIiwia3ZceGU2ZmpvcmQubm8iLCJrdlx4ZTZuYW5nZW4ubm8iLCJrdmFmam9yZC5ubyIsImt2YWxzdW5kLm5vIiwia3ZhbS5ubyIsImt2YW5hbmdlbi5ubyIsImt2aW5lc2RhbC5ubyIsImt2aW5uaGVyYWQubm8iLCJrdml0ZXNlaWQubm8iLCJrdml0c295Lm5vIiwi''@;'; put 'put ''a3ZpdHNceGY4eS5ubyIsImxhYWtlc3Z1ZW1pZS5ubyIsImxceGU2cmRhbC5ubyIsImxhaHBwaS5ubyIsImxceGUxaHBwaS5ubyIsImxhcmRhbC5ubyIsImxhcnZpay5ubyIsImxhdmFnaXMubm8iLCJsYXZhbmdlbi5ubyIsImxlYW5nYXZpaWthLm5vIiwibGVhXHUwMTRiZ2F2aWlrYS5ubyIs''@;'; put 'put ''ImxlYmVzYnkubm8iLCJsZWlrYW5nZXIubm8iLCJsZWlyZmpvcmQubm8iLCJsZWthLm5vIiwibGVrc3Zpay5ubyIsImxlbnZpay5ubyIsImxlcmRhbC5ubyIsImxlc2phLm5vIiwibGV2YW5nZXIubm8iLCJsaWVyLm5vIiwibGllcm5lLm5vIiwibGlsbGVoYW1tZXIubm8iLCJsaWxsZXNhbmQu''@;'; put 'put ''bm8iLCJsaW5kYXMubm8iLCJsaW5kXHhlNXMubm8iLCJsaW5kZXNuZXMubm8iLCJsb2FiYXQubm8iLCJsb2FiXHhlMXQubm8iLCJsb2Rpbmdlbi5ubyIsImxceGY4ZGluZ2VuLm5vIiwibG9tLm5vIiwibG9wcGEubm8iLCJsb3JlbnNrb2cubm8iLCJsXHhmOHJlbnNrb2cubm8iLCJsb3Rlbi5u''@;'; put 'put ''byIsImxceGY4dGVuLm5vIiwibHVuZC5ubyIsImx1bm5lci5ubyIsImx1cm95Lm5vIiwibHVyXHhmOHkubm8iLCJsdXN0ZXIubm8iLCJseW5nZGFsLm5vIiwibHluZ2VuLm5vIiwibWFsYXR2dW9wbWkubm8iLCJtXHhlMWxhdHZ1b3BtaS5ubyIsIm1hbHNlbHYubm8iLCJtXHhlNWxzZWx2Lm5v''@;'; put 'put ''IiwibWFsdmlrLm5vIiwibWFuZGFsLm5vIiwibWFya2VyLm5vIiwibWFybmFyZGFsLm5vIiwibWFzZmpvcmRlbi5ubyIsIm1hc295Lm5vIiwibVx4ZTVzXHhmOHkubm8iLCJtYXR0YS12YXJqamF0Lm5vIiwibVx4ZTF0dGEtdlx4ZTFyamphdC5ubyIsIm1lbGFuZC5ubyIsIm1lbGRhbC5ubyIs''@;'; put 'put ''Im1lbGh1cy5ubyIsIm1lbG95Lm5vIiwibWVsXHhmOHkubm8iLCJtZXJha2VyLm5vIiwibWVyXHhlNWtlci5ubyIsIm1pZHN1bmQubm8iLCJtaWR0cmUtZ2F1bGRhbC5ubyIsIm1vYXJla2Uubm8iLCJtb1x4ZTVyZWtlLm5vIiwibW9kYWxlbi5ubyIsIm1vZHVtLm5vIiwibW9sZGUubm8iLCJo''@;'; put 'put ''ZXJveS5tb3JlLW9nLXJvbXNkYWwubm8iLCJzYW5kZS5tb3JlLW9nLXJvbXNkYWwubm8iLCJoZXJceGY4eS5tXHhmOHJlLW9nLXJvbXNkYWwubm8iLCJzYW5kZS5tXHhmOHJlLW9nLXJvbXNkYWwubm8iLCJtb3NrZW5lcy5ubyIsIm1vc3Mubm8iLCJtb3N2aWsubm8iLCJtdW9zYXQubm8iLCJt''@;'; put 'put ''dW9zXHhlMXQubm8iLCJuYWFtZXNqZXZ1ZW1pZS5ubyIsIm5ceGU1XHhlNW1lc2pldnVlbWllLm5vIiwiblx4ZTZyXHhmOHkubm8iLCJuYW1kYWxzZWlkLm5vIiwibmFtc29zLm5vIiwibmFtc3Nrb2dhbi5ubyIsIm5hbm5lc3RhZC5ubyIsIm5hcm95Lm5vIiwibmFydmlpa2Eubm8iLCJuYXJ2''@;'; put 'put ''aWsubm8iLCJuYXVzdGRhbC5ubyIsIm5hdnVvdG5hLm5vIiwiblx4ZTF2dW90bmEubm8iLCJuZWRyZS1laWtlci5ubyIsIm5lc25hLm5vIiwibmVzb2RkZW4ubm8iLCJuZXNzZWJ5Lm5vIiwibmVzc2V0Lm5vIiwibmlzc2VkYWwubm8iLCJuaXR0ZWRhbC5ubyIsIm5vcmQtYXVyZGFsLm5vIiwi''@;'; put 'put ''bm9yZC1mcm9uLm5vIiwibm9yZC1vZGFsLm5vIiwibm9yZGRhbC5ubyIsIm5vcmRrYXBwLm5vIiwiYm8ubm9yZGxhbmQubm8iLCJiXHhmOC5ub3JkbGFuZC5ubyIsImhlcm95Lm5vcmRsYW5kLm5vIiwiaGVyXHhmOHkubm9yZGxhbmQubm8iLCJub3JkcmUtbGFuZC5ubyIsIm5vcmRyZWlzYS5u''@;'; put 'put ''byIsIm5vcmUtb2ctdXZkYWwubm8iLCJub3RvZGRlbi5ubyIsIm5vdHRlcm95Lm5vIiwiblx4Zjh0dGVyXHhmOHkubm8iLCJvZGRhLm5vIiwib2tzbmVzLm5vIiwiXHhmOGtzbmVzLm5vIiwib21hc3Z1b3RuYS5ubyIsIm9wcGRhbC5ubyIsIm9wcGVnYXJkLm5vIiwib3BwZWdceGU1cmQubm8i''@;'; put 'put ''LCJvcmtkYWwubm8iLCJvcmxhbmQubm8iLCJceGY4cmxhbmQubm8iLCJvcnNrb2cubm8iLCJceGY4cnNrb2cubm8iLCJvcnN0YS5ubyIsIlx4Zjhyc3RhLm5vIiwib3Nlbi5ubyIsIm9zdGVyb3kubm8iLCJvc3Rlclx4Zjh5Lm5vIiwidmFsZXIub3N0Zm9sZC5ubyIsInZceGU1bGVyLlx4Zjhz''@;'; put 'put ''dGZvbGQubm8iLCJvc3RyZS10b3Rlbi5ubyIsIlx4ZjhzdHJlLXRvdGVuLm5vIiwib3ZlcmhhbGxhLm5vIiwib3ZyZS1laWtlci5ubyIsIlx4Zjh2cmUtZWlrZXIubm8iLCJveWVyLm5vIiwiXHhmOHllci5ubyIsIm95Z2FyZGVuLm5vIiwiXHhmOHlnYXJkZW4ubm8iLCJveXN0cmUtc2xpZHJl''@;'; put 'put ''Lm5vIiwiXHhmOHlzdHJlLXNsaWRyZS5ubyIsInBvcnNhbmdlci5ubyIsInBvcnNhbmd1Lm5vIiwicG9yc1x4ZTFcdTAxNGJndS5ubyIsInBvcnNncnVubi5ubyIsInJhZGUubm8iLCJyXHhlNWRlLm5vIiwicmFkb3kubm8iLCJyYWRceGY4eS5ubyIsInJceGU2bGluZ2VuLm5vIiwicmFoa2tl''@;'; put 'put ''cmF2anUubm8iLCJyXHhlMWhra2VyXHhlMXZqdS5ubyIsInJhaXNhLm5vIiwiclx4ZTFpc2Eubm8iLCJyYWtrZXN0YWQubm8iLCJyYWxpbmdlbi5ubyIsInJhbmEubm8iLCJyYW5kYWJlcmcubm8iLCJyYXVtYS5ubyIsInJlbmRhbGVuLm5vIiwicmVubmVidS5ubyIsInJlbm5lc295Lm5vIiwi''@;'; put 'put ''cmVubmVzXHhmOHkubm8iLCJyaW5kYWwubm8iLCJyaW5nZWJ1Lm5vIiwicmluZ2VyaWtlLm5vIiwicmluZ3Nha2VyLm5vIiwicmlzb3Iubm8iLCJyaXNceGY4ci5ubyIsInJpc3NhLm5vIiwicm9hbi5ubyIsInJvZG95Lm5vIiwiclx4ZjhkXHhmOHkubm8iLCJyb2xsYWcubm8iLCJyb21zYS5u''@;'; put 'put ''byIsInJvbXNrb2cubm8iLCJyXHhmOG1za29nLm5vIiwicm9yb3Mubm8iLCJyXHhmOHJvcy5ubyIsInJvc3Qubm8iLCJyXHhmOHN0Lm5vIiwicm95a2VuLm5vIiwiclx4Zjh5a2VuLm5vIiwicm95cnZpay5ubyIsInJceGY4eXJ2aWsubm8iLCJydW92YXQubm8iLCJyeWdnZS5ubyIsInNhbGFu''@;'; put 'put ''Z2VuLm5vIiwic2FsYXQubm8iLCJzXHhlMWxhdC5ubyIsInNceGUxbFx4ZTF0Lm5vIiwic2FsdGRhbC5ubyIsInNhbW5hbmdlci5ubyIsInNhbmRlZmpvcmQubm8iLCJzYW5kbmVzLm5vIiwic2FuZG95Lm5vIiwic2FuZFx4Zjh5Lm5vIiwic2FycHNib3JnLm5vIiwic2F1ZGEubm8iLCJzYXVo''@;'; put 'put ''ZXJhZC5ubyIsInNlbC5ubyIsInNlbGJ1Lm5vIiwic2VsamUubm8iLCJzZWxqb3JkLm5vIiwic2llbGxhay5ubyIsInNpZ2RhbC5ubyIsInNpbGphbi5ubyIsInNpcmRhbC5ubyIsInNrYW5pdC5ubyIsInNrXHhlMW5pdC5ubyIsInNrYW5sYW5kLm5vIiwic2tceGU1bmxhbmQubm8iLCJza2F1''@;'; put 'put ''bi5ubyIsInNrZWRzbW8ubm8iLCJza2kubm8iLCJza2llbi5ubyIsInNraWVydmEubm8iLCJza2llcnZceGUxLm5vIiwic2tpcHR2ZXQubm8iLCJza2phay5ubyIsInNralx4ZTVrLm5vIiwic2tqZXJ2b3kubm8iLCJza2plcnZceGY4eS5ubyIsInNrb2RqZS5ubyIsInNtb2xhLm5vIiwic21c''@;'; put 'put ''eGY4bGEubm8iLCJzbmFhc2Uubm8iLCJzblx4ZTVhc2Uubm8iLCJzbmFzYS5ubyIsInNuXHhlNXNhLm5vIiwic25pbGxmam9yZC5ubyIsInNub2FzYS5ubyIsInNvZ25kYWwubm8iLCJzb2duZS5ubyIsInNceGY4Z25lLm5vIiwic29rbmRhbC5ubyIsInNvbGEubm8iLCJzb2x1bmQubm8iLCJz''@;'; put 'put ''b21uYS5ubyIsInNceGY4bW5hLm5vIiwic29uZHJlLWxhbmQubm8iLCJzXHhmOG5kcmUtbGFuZC5ubyIsInNvbmdkYWxlbi5ubyIsInNvci1hdXJkYWwubm8iLCJzXHhmOHItYXVyZGFsLm5vIiwic29yLWZyb24ubm8iLCJzXHhmOHItZnJvbi5ubyIsInNvci1vZGFsLm5vIiwic1x4ZjhyLW9k''@;'; put 'put ''YWwubm8iLCJzb3ItdmFyYW5nZXIubm8iLCJzXHhmOHItdmFyYW5nZXIubm8iLCJzb3Jmb2xkLm5vIiwic1x4ZjhyZm9sZC5ubyIsInNvcnJlaXNhLm5vIiwic1x4ZjhycmVpc2Eubm8iLCJzb3J0bGFuZC5ubyIsInNvcnVtLm5vIiwic1x4ZjhydW0ubm8iLCJzcHlkZWJlcmcubm8iLCJzdGFu''@;'; put 'put ''Z2Uubm8iLCJzdGF2YW5nZXIubm8iLCJzdGVpZ2VuLm5vIiwic3RlaW5ramVyLm5vIiwic3Rqb3JkYWwubm8iLCJzdGpceGY4cmRhbC5ubyIsInN0b2trZS5ubyIsInN0b3ItZWx2ZGFsLm5vIiwic3RvcmQubm8iLCJzdG9yZGFsLm5vIiwic3RvcmZqb3JkLm5vIiwic3RyYW5kLm5vIiwic3Ry''@;'; put 'put ''YW5kYS5ubyIsInN0cnluLm5vIiwic3VsYS5ubyIsInN1bGRhbC5ubyIsInN1bmQubm8iLCJzdW5uZGFsLm5vIiwic3VybmFkYWwubm8iLCJzdmVpby5ubyIsInN2ZWx2aWsubm8iLCJzeWtreWx2ZW4ubm8iLCJ0YW5hLm5vIiwiYm8udGVsZW1hcmsubm8iLCJiXHhmOC50ZWxlbWFyay5ubyIs''@;'; put 'put ''InRpbWUubm8iLCJ0aW5ndm9sbC5ubyIsInRpbm4ubm8iLCJ0amVsZHN1bmQubm8iLCJ0am9tZS5ubyIsInRqXHhmOG1lLm5vIiwidG9ra2Uubm8iLCJ0b2xnYS5ubyIsInRvbnNiZXJnLm5vIiwidFx4Zjhuc2Jlcmcubm8iLCJ0b3Jza2VuLm5vIiwidHJceGU2bmEubm8iLCJ0cmFuYS5ubyIs''@;'; put 'put ''InRyYW5veS5ubyIsInRyYW5ceGY4eS5ubyIsInRyb2FuZGluLm5vIiwidHJvZ3N0YWQubm8iLCJ0clx4Zjhnc3RhZC5ubyIsInRyb21zYS5ubyIsInRyb21zby5ubyIsInRyb21zXHhmOC5ubyIsInRyb25kaGVpbS5ubyIsInRyeXNpbC5ubyIsInR2ZWRlc3RyYW5kLm5vIiwidHlkYWwubm8i''@;'; put 'put ''LCJ0eW5zZXQubm8iLCJ0eXNmam9yZC5ubyIsInR5c25lcy5ubyIsInR5c3ZceGU2ci5ubyIsInR5c3Zhci5ubyIsInVsbGVuc2FrZXIubm8iLCJ1bGxlbnN2YW5nLm5vIiwidWx2aWsubm8iLCJ1bmphcmdhLm5vIiwidW5qXHhlMXJnYS5ubyIsInV0c2lyYS5ubyIsInZhYXBzdGUubm8iLCJ2''@;'; put 'put ''YWRzby5ubyIsInZhZHNceGY4Lm5vIiwidlx4ZTZyXHhmOHkubm8iLCJ2YWdhLm5vIiwidlx4ZTVnXHhlNS5ubyIsInZhZ2FuLm5vIiwidlx4ZTVnYW4ubm8iLCJ2YWdzb3kubm8iLCJ2XHhlNWdzXHhmOHkubm8iLCJ2YWtzZGFsLm5vIiwidmFsbGUubm8iLCJ2YW5nLm5vIiwidmFueWx2ZW4u''@;'; put 'put ''bm8iLCJ2YXJkby5ubyIsInZhcmRceGY4Lm5vIiwidmFyZ2dhdC5ubyIsInZceGUxcmdnXHhlMXQubm8iLCJ2YXJveS5ubyIsInZlZnNuLm5vIiwidmVnYS5ubyIsInZlZ2Fyc2hlaS5ubyIsInZlZ1x4ZTVyc2hlaS5ubyIsInZlbm5lc2xhLm5vIiwidmVyZGFsLm5vIiwidmVycmFuLm5vIiwi''@;'; put 'put ''dmVzdGJ5Lm5vIiwic2FuZGUudmVzdGZvbGQubm8iLCJ2ZXN0bmVzLm5vIiwidmVzdHJlLXNsaWRyZS5ubyIsInZlc3RyZS10b3Rlbi5ubyIsInZlc3R2YWdveS5ubyIsInZlc3R2XHhlNWdceGY4eS5ubyIsInZldmVsc3RhZC5ubyIsInZpay5ubyIsInZpa25hLm5vIiwidmluZGFmam9yZC5u''@;'; put 'put ''byIsInZvYWdhdC5ubyIsInZvbGRhLm5vIiwidm9zcy5ubyIsIioubnAiLCJuciIsImJpei5uciIsImNvbS5uciIsImVkdS5uciIsImdvdi5uciIsImluZm8ubnIiLCJuZXQubnIiLCJvcmcubnIiLCJudSIsIm56IiwiYWMubnoiLCJjby5ueiIsImNyaS5ueiIsImdlZWsubnoiLCJnZW4ubnoi''@;'; put 'put ''LCJnb3Z0Lm56IiwiaGVhbHRoLm56IiwiaXdpLm56Iiwia2l3aS5ueiIsIm1hb3JpLm56IiwibVx1MDEwMW9yaS5ueiIsIm1pbC5ueiIsIm5ldC5ueiIsIm9yZy5ueiIsInBhcmxpYW1lbnQubnoiLCJzY2hvb2wubnoiLCJvbSIsImNvLm9tIiwiY29tLm9tIiwiZWR1Lm9tIiwiZ292Lm9tIiwi''@;'; put 'put ''bWVkLm9tIiwibXVzZXVtLm9tIiwibmV0Lm9tIiwib3JnLm9tIiwicHJvLm9tIiwib25pb24iLCJvcmciLCJwYSIsImFiby5wYSIsImFjLnBhIiwiY29tLnBhIiwiZWR1LnBhIiwiZ29iLnBhIiwiaW5nLnBhIiwibWVkLnBhIiwibmV0LnBhIiwibm9tLnBhIiwib3JnLnBhIiwic2xkLnBhIiwi''@;'; put 'put ''cGUiLCJjb20ucGUiLCJlZHUucGUiLCJnb2IucGUiLCJtaWwucGUiLCJuZXQucGUiLCJub20ucGUiLCJvcmcucGUiLCJwZiIsImNvbS5wZiIsImVkdS5wZiIsIm9yZy5wZiIsIioucGciLCJwaCIsImNvbS5waCIsImVkdS5waCIsImdvdi5waCIsImkucGgiLCJtaWwucGgiLCJuZXQucGgiLCJu''@;'; put 'put ''Z28ucGgiLCJvcmcucGgiLCJwayIsImFjLnBrIiwiYml6LnBrIiwiY29tLnBrIiwiZWR1LnBrIiwiZmFtLnBrIiwiZ2twLnBrIiwiZ29iLnBrIiwiZ29nLnBrIiwiZ29rLnBrIiwiZ29uLnBrIiwiZ29wLnBrIiwiZ29zLnBrIiwiZ292LnBrIiwibmV0LnBrIiwib3JnLnBrIiwid2ViLnBrIiwi''@;'; put 'put ''cGwiLCJjb20ucGwiLCJuZXQucGwiLCJvcmcucGwiLCJhZ3JvLnBsIiwiYWlkLnBsIiwiYXRtLnBsIiwiYXV0by5wbCIsImJpei5wbCIsImVkdS5wbCIsImdtaW5hLnBsIiwiZ3NtLnBsIiwiaW5mby5wbCIsIm1haWwucGwiLCJtZWRpYS5wbCIsIm1pYXN0YS5wbCIsIm1pbC5wbCIsIm5pZXJ1''@;'; put 'put ''Y2hvbW9zY2kucGwiLCJub20ucGwiLCJwYy5wbCIsInBvd2lhdC5wbCIsInByaXYucGwiLCJyZWFsZXN0YXRlLnBsIiwicmVsLnBsIiwic2V4LnBsIiwic2hvcC5wbCIsInNrbGVwLnBsIiwic29zLnBsIiwic3prb2xhLnBsIiwidGFyZ2kucGwiLCJ0bS5wbCIsInRvdXJpc20ucGwiLCJ0cmF2''@;'; put 'put ''ZWwucGwiLCJ0dXJ5c3R5a2EucGwiLCJnb3YucGwiLCJhcC5nb3YucGwiLCJncml3Lmdvdi5wbCIsImljLmdvdi5wbCIsImlzLmdvdi5wbCIsImttcHNwLmdvdi5wbCIsImtvbnN1bGF0Lmdvdi5wbCIsImtwcHNwLmdvdi5wbCIsImt3cC5nb3YucGwiLCJrd3BzcC5nb3YucGwiLCJtdXAuZ292''@;'; put 'put ''LnBsIiwibXcuZ292LnBsIiwib2lhLmdvdi5wbCIsIm9pcm0uZ292LnBsIiwib2tlLmdvdi5wbCIsIm9vdy5nb3YucGwiLCJvc2Noci5nb3YucGwiLCJvdW0uZ292LnBsIiwicGEuZ292LnBsIiwicGluYi5nb3YucGwiLCJwaXcuZ292LnBsIiwicG8uZ292LnBsIiwicHIuZ292LnBsIiwicHNw''@;'; put 'put ''Lmdvdi5wbCIsInBzc2UuZ292LnBsIiwicHVwLmdvdi5wbCIsInJ6Z3cuZ292LnBsIiwic2EuZ292LnBsIiwic2RuLmdvdi5wbCIsInNrby5nb3YucGwiLCJzby5nb3YucGwiLCJzci5nb3YucGwiLCJzdGFyb3N0d28uZ292LnBsIiwidWcuZ292LnBsIiwidWdpbS5nb3YucGwiLCJ1bS5nb3Yu''@;'; put 'put ''cGwiLCJ1bWlnLmdvdi5wbCIsInVwb3cuZ292LnBsIiwidXBwby5nb3YucGwiLCJ1cy5nb3YucGwiLCJ1dy5nb3YucGwiLCJ1enMuZ292LnBsIiwid2lmLmdvdi5wbCIsIndpaWguZ292LnBsIiwid2luYi5nb3YucGwiLCJ3aW9zLmdvdi5wbCIsIndpdGQuZ292LnBsIiwid2l3Lmdvdi5wbCIs''@;'; put 'put ''Indrei5nb3YucGwiLCJ3c2EuZ292LnBsIiwid3Nrci5nb3YucGwiLCJ3c3NlLmdvdi5wbCIsInd1b3ouZ292LnBsIiwid3ptaXV3Lmdvdi5wbCIsInpwLmdvdi5wbCIsInpwaXNkbi5nb3YucGwiLCJhdWd1c3Rvdy5wbCIsImJhYmlhLWdvcmEucGwiLCJiZWR6aW4ucGwiLCJiZXNraWR5LnBs''@;'; put 'put ''IiwiYmlhbG93aWV6YS5wbCIsImJpYWx5c3Rvay5wbCIsImJpZWxhd2EucGwiLCJiaWVzemN6YWR5LnBsIiwiYm9sZXNsYXdpZWMucGwiLCJieWRnb3N6Y3oucGwiLCJieXRvbS5wbCIsImNpZXN6eW4ucGwiLCJjemVsYWR6LnBsIiwiY3plc3QucGwiLCJkbHVnb2xla2EucGwiLCJlbGJsYWcu''@;'; put 'put ''cGwiLCJlbGsucGwiLCJnbG9nb3cucGwiLCJnbmllem5vLnBsIiwiZ29ybGljZS5wbCIsImdyYWpld28ucGwiLCJpbGF3YS5wbCIsImphd29yem5vLnBsIiwiamVsZW5pYS1nb3JhLnBsIiwiamdvcmEucGwiLCJrYWxpc3oucGwiLCJrYXJwYWN6LnBsIiwia2FydHV6eS5wbCIsImthc3p1Ynku''@;'; put 'put ''cGwiLCJrYXRvd2ljZS5wbCIsImthemltaWVyei1kb2xueS5wbCIsImtlcG5vLnBsIiwia2V0cnp5bi5wbCIsImtsb2R6a28ucGwiLCJrb2JpZXJ6eWNlLnBsIiwia29sb2JyemVnLnBsIiwia29uaW4ucGwiLCJrb25za293b2xhLnBsIiwia3V0bm8ucGwiLCJsYXB5LnBsIiwibGVib3JrLnBs''@;'; put 'put ''IiwibGVnbmljYS5wbCIsImxlemFqc2sucGwiLCJsaW1hbm93YS5wbCIsImxvbXphLnBsIiwibG93aWN6LnBsIiwibHViaW4ucGwiLCJsdWtvdy5wbCIsIm1hbGJvcmsucGwiLCJtYWxvcG9sc2thLnBsIiwibWF6b3dzemUucGwiLCJtYXp1cnkucGwiLCJtaWVsZWMucGwiLCJtaWVsbm8ucGwi''@;'; put 'put ''LCJtcmFnb3dvLnBsIiwibmFrbG8ucGwiLCJub3dhcnVkYS5wbCIsIm55c2EucGwiLCJvbGF3YS5wbCIsIm9sZWNrby5wbCIsIm9sa3Vzei5wbCIsIm9sc3p0eW4ucGwiLCJvcG9jem5vLnBsIiwib3BvbGUucGwiLCJvc3Ryb2RhLnBsIiwib3N0cm9sZWthLnBsIiwib3N0cm93aWVjLnBsIiwi''@;'; put 'put ''b3N0cm93d2xrcC5wbCIsInBpbGEucGwiLCJwaXN6LnBsIiwicG9kaGFsZS5wbCIsInBvZGxhc2llLnBsIiwicG9sa293aWNlLnBsIiwicG9tb3Jza2llLnBsIiwicG9tb3J6ZS5wbCIsInByb2Nob3dpY2UucGwiLCJwcnVzemtvdy5wbCIsInByemV3b3Jzay5wbCIsInB1bGF3eS5wbCIsInJh''@;'; put 'put ''ZG9tLnBsIiwicmF3YS1tYXoucGwiLCJyeWJuaWsucGwiLCJyemVzem93LnBsIiwic2Fub2sucGwiLCJzZWpueS5wbCIsInNrb2N6b3cucGwiLCJzbGFzay5wbCIsInNsdXBzay5wbCIsInNvc25vd2llYy5wbCIsInN0YWxvd2Etd29sYS5wbCIsInN0YXJhY2hvd2ljZS5wbCIsInN0YXJnYXJk''@;'; put 'put ''LnBsIiwic3V3YWxraS5wbCIsInN3aWRuaWNhLnBsIiwic3dpZWJvZHppbi5wbCIsInN3aW5vdWpzY2llLnBsIiwic3pjemVjaW4ucGwiLCJzemN6eXRuby5wbCIsInRhcm5vYnJ6ZWcucGwiLCJ0Z29yeS5wbCIsInR1cmVrLnBsIiwidHljaHkucGwiLCJ1c3RrYS5wbCIsIndhbGJyenljaC5w''@;'; put 'put ''bCIsIndhcm1pYS5wbCIsIndhcnN6YXdhLnBsIiwid2F3LnBsIiwid2Vncm93LnBsIiwid2llbHVuLnBsIiwid2xvY2wucGwiLCJ3bG9jbGF3ZWsucGwiLCJ3b2R6aXNsYXcucGwiLCJ3b2xvbWluLnBsIiwid3JvY2xhdy5wbCIsInphY2hwb21vci5wbCIsInphZ2FuLnBsIiwiemFyb3cucGwi''@;'; put 'put ''LCJ6Z29yYS5wbCIsInpnb3J6ZWxlYy5wbCIsInBtIiwicG4iLCJjby5wbiIsImVkdS5wbiIsImdvdi5wbiIsIm5ldC5wbiIsIm9yZy5wbiIsInBvc3QiLCJwciIsImJpei5wciIsImNvbS5wciIsImVkdS5wciIsImdvdi5wciIsImluZm8ucHIiLCJpc2xhLnByIiwibmFtZS5wciIsIm5ldC5w''@;'; put 'put ''ciIsIm9yZy5wciIsInByby5wciIsImFjLnByIiwiZXN0LnByIiwicHJvZi5wciIsInBybyIsImFhYS5wcm8iLCJhY2EucHJvIiwiYWNjdC5wcm8iLCJhdm9jYXQucHJvIiwiYmFyLnBybyIsImNwYS5wcm8iLCJlbmcucHJvIiwianVyLnBybyIsImxhdy5wcm8iLCJtZWQucHJvIiwicmVjaHQu''@;'; put 'put ''cHJvIiwicHMiLCJjb20ucHMiLCJlZHUucHMiLCJnb3YucHMiLCJuZXQucHMiLCJvcmcucHMiLCJwbG8ucHMiLCJzZWMucHMiLCJwdCIsImNvbS5wdCIsImVkdS5wdCIsImdvdi5wdCIsImludC5wdCIsIm5ldC5wdCIsIm5vbWUucHQiLCJvcmcucHQiLCJwdWJsLnB0IiwicHciLCJiZWxhdS5w''@;'; put 'put ''dyIsImNvLnB3IiwiZWQucHciLCJnby5wdyIsIm9yLnB3IiwicHkiLCJjb20ucHkiLCJjb29wLnB5IiwiZWR1LnB5IiwiZ292LnB5IiwibWlsLnB5IiwibmV0LnB5Iiwib3JnLnB5IiwicWEiLCJjb20ucWEiLCJlZHUucWEiLCJnb3YucWEiLCJtaWwucWEiLCJuYW1lLnFhIiwibmV0LnFhIiwi''@;'; put 'put ''b3JnLnFhIiwic2NoLnFhIiwicmUiLCJhc3NvLnJlIiwiY29tLnJlIiwicm8iLCJhcnRzLnJvIiwiY29tLnJvIiwiZmlybS5ybyIsImluZm8ucm8iLCJub20ucm8iLCJudC5ybyIsIm9yZy5ybyIsInJlYy5ybyIsInN0b3JlLnJvIiwidG0ucm8iLCJ3d3cucm8iLCJycyIsImFjLnJzIiwiY28u''@;'; put 'put ''cnMiLCJlZHUucnMiLCJnb3YucnMiLCJpbi5ycyIsIm9yZy5ycyIsInJ1IiwicnciLCJhYy5ydyIsImNvLnJ3IiwiY29vcC5ydyIsImdvdi5ydyIsIm1pbC5ydyIsIm5ldC5ydyIsIm9yZy5ydyIsInNhIiwiY29tLnNhIiwiZWR1LnNhIiwiZ292LnNhIiwibWVkLnNhIiwibmV0LnNhIiwib3Jn''@;'; put 'put ''LnNhIiwicHViLnNhIiwic2NoLnNhIiwic2IiLCJjb20uc2IiLCJlZHUuc2IiLCJnb3Yuc2IiLCJuZXQuc2IiLCJvcmcuc2IiLCJzYyIsImNvbS5zYyIsImVkdS5zYyIsImdvdi5zYyIsIm5ldC5zYyIsIm9yZy5zYyIsInNkIiwiY29tLnNkIiwiZWR1LnNkIiwiZ292LnNkIiwiaW5mby5zZCIs''@;'; put 'put ''Im1lZC5zZCIsIm5ldC5zZCIsIm9yZy5zZCIsInR2LnNkIiwic2UiLCJhLnNlIiwiYWMuc2UiLCJiLnNlIiwiYmQuc2UiLCJicmFuZC5zZSIsImMuc2UiLCJkLnNlIiwiZS5zZSIsImYuc2UiLCJmaC5zZSIsImZoc2suc2UiLCJmaHYuc2UiLCJnLnNlIiwiaC5zZSIsImkuc2UiLCJrLnNlIiwi''@;'; put 'put ''a29tZm9yYi5zZSIsImtvbW11bmFsZm9yYnVuZC5zZSIsImtvbXZ1eC5zZSIsImwuc2UiLCJsYW5iaWIuc2UiLCJtLnNlIiwibi5zZSIsIm5hdHVyYnJ1a3NneW1uLnNlIiwiby5zZSIsIm9yZy5zZSIsInAuc2UiLCJwYXJ0aS5zZSIsInBwLnNlIiwicHJlc3Muc2UiLCJyLnNlIiwicy5zZSIs''@;'; put 'put ''InQuc2UiLCJ0bS5zZSIsInUuc2UiLCJ3LnNlIiwieC5zZSIsInkuc2UiLCJ6LnNlIiwic2ciLCJjb20uc2ciLCJlZHUuc2ciLCJnb3Yuc2ciLCJuZXQuc2ciLCJvcmcuc2ciLCJzaCIsImNvbS5zaCIsImdvdi5zaCIsIm1pbC5zaCIsIm5ldC5zaCIsIm9yZy5zaCIsInNpIiwic2oiLCJzayIs''@;'; put 'put ''InNsIiwiY29tLnNsIiwiZWR1LnNsIiwiZ292LnNsIiwibmV0LnNsIiwib3JnLnNsIiwic20iLCJzbiIsImFydC5zbiIsImNvbS5zbiIsImVkdS5zbiIsImdvdXYuc24iLCJvcmcuc24iLCJwZXJzby5zbiIsInVuaXYuc24iLCJzbyIsImNvbS5zbyIsImVkdS5zbyIsImdvdi5zbyIsIm1lLnNv''@;'; put 'put ''IiwibmV0LnNvIiwib3JnLnNvIiwic3IiLCJzcyIsImJpei5zcyIsImNvLnNzIiwiY29tLnNzIiwiZWR1LnNzIiwiZ292LnNzIiwibWUuc3MiLCJuZXQuc3MiLCJvcmcuc3MiLCJzY2guc3MiLCJzdCIsImNvLnN0IiwiY29tLnN0IiwiY29uc3VsYWRvLnN0IiwiZWR1LnN0IiwiZW1iYWl4YWRh''@;'; put 'put ''LnN0IiwibWlsLnN0IiwibmV0LnN0Iiwib3JnLnN0IiwicHJpbmNpcGUuc3QiLCJzYW90b21lLnN0Iiwic3RvcmUuc3QiLCJzdSIsInN2IiwiY29tLnN2IiwiZWR1LnN2IiwiZ29iLnN2Iiwib3JnLnN2IiwicmVkLnN2Iiwic3giLCJnb3Yuc3giLCJzeSIsImNvbS5zeSIsImVkdS5zeSIsImdv''@;'; put 'put ''di5zeSIsIm1pbC5zeSIsIm5ldC5zeSIsIm9yZy5zeSIsInN6IiwiYWMuc3oiLCJjby5zeiIsIm9yZy5zeiIsInRjIiwidGQiLCJ0ZWwiLCJ0ZiIsInRnIiwidGgiLCJhYy50aCIsImNvLnRoIiwiZ28udGgiLCJpbi50aCIsIm1pLnRoIiwibmV0LnRoIiwib3IudGgiLCJ0aiIsImFjLnRqIiwi''@;'; put 'put ''Yml6LnRqIiwiY28udGoiLCJjb20udGoiLCJlZHUudGoiLCJnby50aiIsImdvdi50aiIsImludC50aiIsIm1pbC50aiIsIm5hbWUudGoiLCJuZXQudGoiLCJuaWMudGoiLCJvcmcudGoiLCJ0ZXN0LnRqIiwid2ViLnRqIiwidGsiLCJ0bCIsImdvdi50bCIsInRtIiwiY28udG0iLCJjb20udG0i''@;'; put 'put ''LCJlZHUudG0iLCJnb3YudG0iLCJtaWwudG0iLCJuZXQudG0iLCJub20udG0iLCJvcmcudG0iLCJ0biIsImNvbS50biIsImVucy50biIsImZpbi50biIsImdvdi50biIsImluZC50biIsImluZm8udG4iLCJpbnRsLnRuIiwibWluY29tLnRuIiwibmF0LnRuIiwibmV0LnRuIiwib3JnLnRuIiwi''@;'; put 'put ''cGVyc28udG4iLCJ0b3VyaXNtLnRuIiwidG8iLCJjb20udG8iLCJlZHUudG8iLCJnb3YudG8iLCJtaWwudG8iLCJuZXQudG8iLCJvcmcudG8iLCJ0ciIsImF2LnRyIiwiYmJzLnRyIiwiYmVsLnRyIiwiYml6LnRyIiwiY29tLnRyIiwiZHIudHIiLCJlZHUudHIiLCJnZW4udHIiLCJnb3YudHIi''@;'; put 'put ''LCJpbmZvLnRyIiwiazEyLnRyIiwia2VwLnRyIiwibWlsLnRyIiwibmFtZS50ciIsIm5ldC50ciIsIm9yZy50ciIsInBvbC50ciIsInRlbC50ciIsInRzay50ciIsInR2LnRyIiwid2ViLnRyIiwibmMudHIiLCJnb3YubmMudHIiLCJ0dCIsImJpei50dCIsImNvLnR0IiwiY29tLnR0IiwiZWR1''@;'; put 'put ''LnR0IiwiZ292LnR0IiwiaW5mby50dCIsIm1pbC50dCIsIm5hbWUudHQiLCJuZXQudHQiLCJvcmcudHQiLCJwcm8udHQiLCJ0diIsInR3IiwiY2x1Yi50dyIsImNvbS50dyIsImViaXoudHciLCJlZHUudHciLCJnYW1lLnR3IiwiZ292LnR3IiwiaWR2LnR3IiwibWlsLnR3IiwibmV0LnR3Iiwi''@;'; put 'put ''b3JnLnR3IiwidHoiLCJhYy50eiIsImNvLnR6IiwiZ28udHoiLCJob3RlbC50eiIsImluZm8udHoiLCJtZS50eiIsIm1pbC50eiIsIm1vYmkudHoiLCJuZS50eiIsIm9yLnR6Iiwic2MudHoiLCJ0di50eiIsInVhIiwiY29tLnVhIiwiZWR1LnVhIiwiZ292LnVhIiwiaW4udWEiLCJuZXQudWEi''@;'; put 'put ''LCJvcmcudWEiLCJjaGVya2Fzc3kudWEiLCJjaGVya2FzeS51YSIsImNoZXJuaWdvdi51YSIsImNoZXJuaWhpdi51YSIsImNoZXJuaXZ0c2kudWEiLCJjaGVybm92dHN5LnVhIiwiY2sudWEiLCJjbi51YSIsImNyLnVhIiwiY3JpbWVhLnVhIiwiY3YudWEiLCJkbi51YSIsImRuZXByb3BldHJv''@;'; put 'put ''dnNrLnVhIiwiZG5pcHJvcGV0cm92c2sudWEiLCJkb25ldHNrLnVhIiwiZHAudWEiLCJpZi51YSIsIml2YW5vLWZyYW5raXZzay51YSIsImtoLnVhIiwia2hhcmtpdi51YSIsImtoYXJrb3YudWEiLCJraGVyc29uLnVhIiwia2htZWxuaXRza2l5LnVhIiwia2htZWxueXRza3lpLnVhIiwia2ll''@;'; put 'put ''di51YSIsImtpcm92b2dyYWQudWEiLCJrbS51YSIsImtyLnVhIiwia3JvcHl2bnl0c2t5aS51YSIsImtyeW0udWEiLCJrcy51YSIsImt2LnVhIiwia3lpdi51YSIsImxnLnVhIiwibHQudWEiLCJsdWdhbnNrLnVhIiwibHVoYW5zay51YSIsImx1dHNrLnVhIiwibHYudWEiLCJsdml2LnVhIiwi''@;'; put 'put ''bWsudWEiLCJteWtvbGFpdi51YSIsIm5pa29sYWV2LnVhIiwib2QudWEiLCJvZGVzYS51YSIsIm9kZXNzYS51YSIsInBsLnVhIiwicG9sdGF2YS51YSIsInJpdm5lLnVhIiwicm92bm8udWEiLCJydi51YSIsInNiLnVhIiwic2ViYXN0b3BvbC51YSIsInNldmFzdG9wb2wudWEiLCJzbS51YSIs''@;'; put 'put ''InN1bXkudWEiLCJ0ZS51YSIsInRlcm5vcGlsLnVhIiwidXoudWEiLCJ1emhnb3JvZC51YSIsInV6aGhvcm9kLnVhIiwidmlubmljYS51YSIsInZpbm55dHNpYS51YSIsInZuLnVhIiwidm9seW4udWEiLCJ5YWx0YS51YSIsInpha2FycGF0dGlhLnVhIiwiemFwb3Jpemh6aGUudWEiLCJ6YXBv''@;'; put 'put ''cml6aHpoaWEudWEiLCJ6aGl0b21pci51YSIsInpoeXRvbXlyLnVhIiwienAudWEiLCJ6dC51YSIsInVnIiwiYWMudWciLCJjby51ZyIsImNvbS51ZyIsImdvLnVnIiwibmUudWciLCJvci51ZyIsIm9yZy51ZyIsInNjLnVnIiwidWsiLCJhYy51ayIsImNvLnVrIiwiZ292LnVrIiwibHRkLnVr''@;'; put 'put ''IiwibWUudWsiLCJuZXQudWsiLCJuaHMudWsiLCJvcmcudWsiLCJwbGMudWsiLCJwb2xpY2UudWsiLCIqLnNjaC51ayIsInVzIiwiZG5pLnVzIiwiZmVkLnVzIiwiaXNhLnVzIiwia2lkcy51cyIsIm5zbi51cyIsImFrLnVzIiwiYWwudXMiLCJhci51cyIsImFzLnVzIiwiYXoudXMiLCJjYS51''@;'; put 'put ''cyIsImNvLnVzIiwiY3QudXMiLCJkYy51cyIsImRlLnVzIiwiZmwudXMiLCJnYS51cyIsImd1LnVzIiwiaGkudXMiLCJpYS51cyIsImlkLnVzIiwiaWwudXMiLCJpbi51cyIsImtzLnVzIiwia3kudXMiLCJsYS51cyIsIm1hLnVzIiwibWQudXMiLCJtZS51cyIsIm1pLnVzIiwibW4udXMiLCJt''@;'; put 'put ''by51cyIsIm1zLnVzIiwibXQudXMiLCJuYy51cyIsIm5kLnVzIiwibmUudXMiLCJuaC51cyIsIm5qLnVzIiwibm0udXMiLCJudi51cyIsIm55LnVzIiwib2gudXMiLCJvay51cyIsIm9yLnVzIiwicGEudXMiLCJwci51cyIsInJpLnVzIiwic2MudXMiLCJzZC51cyIsInRuLnVzIiwidHgudXMi''@;'; put 'put ''LCJ1dC51cyIsInZhLnVzIiwidmkudXMiLCJ2dC51cyIsIndhLnVzIiwid2kudXMiLCJ3di51cyIsInd5LnVzIiwiazEyLmFrLnVzIiwiazEyLmFsLnVzIiwiazEyLmFyLnVzIiwiazEyLmFzLnVzIiwiazEyLmF6LnVzIiwiazEyLmNhLnVzIiwiazEyLmNvLnVzIiwiazEyLmN0LnVzIiwiazEy''@;'; put 'put ''LmRjLnVzIiwiazEyLmZsLnVzIiwiazEyLmdhLnVzIiwiazEyLmd1LnVzIiwiazEyLmlhLnVzIiwiazEyLmlkLnVzIiwiazEyLmlsLnVzIiwiazEyLmluLnVzIiwiazEyLmtzLnVzIiwiazEyLmt5LnVzIiwiazEyLmxhLnVzIiwiazEyLm1hLnVzIiwiazEyLm1kLnVzIiwiazEyLm1lLnVzIiwi''@;'; put 'put ''azEyLm1pLnVzIiwiazEyLm1uLnVzIiwiazEyLm1vLnVzIiwiazEyLm1zLnVzIiwiazEyLm10LnVzIiwiazEyLm5jLnVzIiwiazEyLm5lLnVzIiwiazEyLm5oLnVzIiwiazEyLm5qLnVzIiwiazEyLm5tLnVzIiwiazEyLm52LnVzIiwiazEyLm55LnVzIiwiazEyLm9oLnVzIiwiazEyLm9rLnVz''@;'; put 'put ''IiwiazEyLm9yLnVzIiwiazEyLnBhLnVzIiwiazEyLnByLnVzIiwiazEyLnNjLnVzIiwiazEyLnRuLnVzIiwiazEyLnR4LnVzIiwiazEyLnV0LnVzIiwiazEyLnZhLnVzIiwiazEyLnZpLnVzIiwiazEyLnZ0LnVzIiwiazEyLndhLnVzIiwiazEyLndpLnVzIiwiY2MuYWsudXMiLCJsaWIuYWsu''@;'; put 'put ''dXMiLCJjYy5hbC51cyIsImxpYi5hbC51cyIsImNjLmFyLnVzIiwibGliLmFyLnVzIiwiY2MuYXMudXMiLCJsaWIuYXMudXMiLCJjYy5hei51cyIsImxpYi5hei51cyIsImNjLmNhLnVzIiwibGliLmNhLnVzIiwiY2MuY28udXMiLCJsaWIuY28udXMiLCJjYy5jdC51cyIsImxpYi5jdC51cyIs''@;'; put 'put ''ImNjLmRjLnVzIiwibGliLmRjLnVzIiwiY2MuZGUudXMiLCJjYy5mbC51cyIsImNjLmdhLnVzIiwiY2MuZ3UudXMiLCJjYy5oaS51cyIsImNjLmlhLnVzIiwiY2MuaWQudXMiLCJjYy5pbC51cyIsImNjLmluLnVzIiwiY2Mua3MudXMiLCJjYy5reS51cyIsImNjLmxhLnVzIiwiY2MubWEudXMi''@;'; put 'put ''LCJjYy5tZC51cyIsImNjLm1lLnVzIiwiY2MubWkudXMiLCJjYy5tbi51cyIsImNjLm1vLnVzIiwiY2MubXMudXMiLCJjYy5tdC51cyIsImNjLm5jLnVzIiwiY2MubmQudXMiLCJjYy5uZS51cyIsImNjLm5oLnVzIiwiY2MubmoudXMiLCJjYy5ubS51cyIsImNjLm52LnVzIiwiY2MubnkudXMi''@;'; put 'put ''LCJjYy5vaC51cyIsImNjLm9rLnVzIiwiY2Mub3IudXMiLCJjYy5wYS51cyIsImNjLnByLnVzIiwiY2MucmkudXMiLCJjYy5zYy51cyIsImNjLnNkLnVzIiwiY2MudG4udXMiLCJjYy50eC51cyIsImNjLnV0LnVzIiwiY2MudmEudXMiLCJjYy52aS51cyIsImNjLnZ0LnVzIiwiY2Mud2EudXMi''@;'; put 'put ''LCJjYy53aS51cyIsImNjLnd2LnVzIiwiY2Mud3kudXMiLCJrMTIud3kudXMiLCJsaWIuZmwudXMiLCJsaWIuZ2EudXMiLCJsaWIuZ3UudXMiLCJsaWIuaGkudXMiLCJsaWIuaWEudXMiLCJsaWIuaWQudXMiLCJsaWIuaWwudXMiLCJsaWIuaW4udXMiLCJsaWIua3MudXMiLCJsaWIua3kudXMi''@;'; put 'put ''LCJsaWIubGEudXMiLCJsaWIubWEudXMiLCJsaWIubWQudXMiLCJsaWIubWUudXMiLCJsaWIubWkudXMiLCJsaWIubW4udXMiLCJsaWIubW8udXMiLCJsaWIubXMudXMiLCJsaWIubXQudXMiLCJsaWIubmMudXMiLCJsaWIubmQudXMiLCJsaWIubmUudXMiLCJsaWIubmgudXMiLCJsaWIubmou''@;'; put 'put ''dXMiLCJsaWIubm0udXMiLCJsaWIubnYudXMiLCJsaWIubnkudXMiLCJsaWIub2gudXMiLCJsaWIub2sudXMiLCJsaWIub3IudXMiLCJsaWIucGEudXMiLCJsaWIucHIudXMiLCJsaWIucmkudXMiLCJsaWIuc2MudXMiLCJsaWIuc2QudXMiLCJsaWIudG4udXMiLCJsaWIudHgudXMiLCJsaWIu''@;'; put 'put ''dXQudXMiLCJsaWIudmEudXMiLCJsaWIudmkudXMiLCJsaWIudnQudXMiLCJsaWIud2EudXMiLCJsaWIud2kudXMiLCJsaWIud3kudXMiLCJjaHRyLmsxMi5tYS51cyIsInBhcm9jaC5rMTIubWEudXMiLCJwdnQuazEyLm1hLnVzIiwiYW5uLWFyYm9yLm1pLnVzIiwiY29nLm1pLnVzIiwiZHN0''@;'; put 'put ''Lm1pLnVzIiwiZWF0b24ubWkudXMiLCJnZW4ubWkudXMiLCJtdXMubWkudXMiLCJ0ZWMubWkudXMiLCJ3YXNodGVuYXcubWkudXMiLCJ1eSIsImNvbS51eSIsImVkdS51eSIsImd1Yi51eSIsIm1pbC51eSIsIm5ldC51eSIsIm9yZy51eSIsInV6IiwiY28udXoiLCJjb20udXoiLCJuZXQudXoi''@;'; put 'put ''LCJvcmcudXoiLCJ2YSIsInZjIiwiY29tLnZjIiwiZWR1LnZjIiwiZ292LnZjIiwibWlsLnZjIiwibmV0LnZjIiwib3JnLnZjIiwidmUiLCJhcnRzLnZlIiwiYmliLnZlIiwiY28udmUiLCJjb20udmUiLCJlMTIudmUiLCJlZHUudmUiLCJmaXJtLnZlIiwiZ29iLnZlIiwiZ292LnZlIiwiaW5m''@;'; put 'put ''by52ZSIsImludC52ZSIsIm1pbC52ZSIsIm5ldC52ZSIsIm5vbS52ZSIsIm9yZy52ZSIsInJhci52ZSIsInJlYy52ZSIsInN0b3JlLnZlIiwidGVjLnZlIiwid2ViLnZlIiwidmciLCJ2aSIsImNvLnZpIiwiY29tLnZpIiwiazEyLnZpIiwibmV0LnZpIiwib3JnLnZpIiwidm4iLCJhYy52biIs''@;'; put 'put ''ImFpLnZuIiwiYml6LnZuIiwiY29tLnZuIiwiZWR1LnZuIiwiZ292LnZuIiwiaGVhbHRoLnZuIiwiaWQudm4iLCJpbmZvLnZuIiwiaW50LnZuIiwiaW8udm4iLCJuYW1lLnZuIiwibmV0LnZuIiwib3JnLnZuIiwicHJvLnZuIiwiYW5naWFuZy52biIsImJhY2dpYW5nLnZuIiwiYmFja2FuLnZu''@;'; put 'put ''IiwiYmFjbGlldS52biIsImJhY25pbmgudm4iLCJiYXJpYS12dW5ndGF1LnZuIiwiYmVudHJlLnZuIiwiYmluaGRpbmgudm4iLCJiaW5oZHVvbmcudm4iLCJiaW5ocGh1b2Mudm4iLCJiaW5odGh1YW4udm4iLCJjYW1hdS52biIsImNhbnRoby52biIsImNhb2Jhbmcudm4iLCJkYWtsYWsudm4i''@;'; put 'put ''LCJkYWtub25nLnZuIiwiZGFuYW5nLnZuIiwiZGllbmJpZW4udm4iLCJkb25nbmFpLnZuIiwiZG9uZ3RoYXAudm4iLCJnaWFsYWkudm4iLCJoYWdpYW5nLnZuIiwiaGFpZHVvbmcudm4iLCJoYWlwaG9uZy52biIsImhhbmFtLnZuIiwiaGFub2kudm4iLCJoYXRpbmgudm4iLCJoYXVnaWFuZy52''@;'; put 'put ''biIsImhvYWJpbmgudm4iLCJodW5neWVuLnZuIiwia2hhbmhob2Eudm4iLCJraWVuZ2lhbmcudm4iLCJrb250dW0udm4iLCJsYWljaGF1LnZuIiwibGFtZG9uZy52biIsImxhbmdzb24udm4iLCJsYW9jYWkudm4iLCJsb25nYW4udm4iLCJuYW1kaW5oLnZuIiwibmdoZWFuLnZuIiwibmluaGJp''@;'; put 'put ''bmgudm4iLCJuaW5odGh1YW4udm4iLCJwaHV0aG8udm4iLCJwaHV5ZW4udm4iLCJxdWFuZ2Jpbmgudm4iLCJxdWFuZ25hbS52biIsInF1YW5nbmdhaS52biIsInF1YW5nbmluaC52biIsInF1YW5ndHJpLnZuIiwic29jdHJhbmcudm4iLCJzb25sYS52biIsInRheW5pbmgudm4iLCJ0aGFpYmlu''@;'; put 'put ''aC52biIsInRoYWluZ3V5ZW4udm4iLCJ0aGFuaGhvYS52biIsInRoYW5ocGhvaG9jaGltaW5oLnZuIiwidGh1YXRoaWVuaHVlLnZuIiwidGllbmdpYW5nLnZuIiwidHJhdmluaC52biIsInR1eWVucXVhbmcudm4iLCJ2aW5obG9uZy52biIsInZpbmhwaHVjLnZuIiwieWVuYmFpLnZuIiwidnUi''@;'; put 'put ''LCJjb20udnUiLCJlZHUudnUiLCJuZXQudnUiLCJvcmcudnUiLCJ3ZiIsIndzIiwiY29tLndzIiwiZWR1LndzIiwiZ292LndzIiwibmV0LndzIiwib3JnLndzIiwieXQiLCJcdTA2MjdcdTA2NDVcdTA2MjdcdTA2MzFcdTA2MjdcdTA2MmEiLCJcdTA1NzBcdTA1NjFcdTA1NzUiLCJcdTA5YWNc''@;'; put 'put ''dTA5YmVcdTA5ODJcdTA5YjJcdTA5YmUiLCJcdTA0MzFcdTA0MzMiLCJcdTA2MjdcdTA2NDRcdTA2MjhcdTA2MmRcdTA2MzFcdTA2NGFcdTA2NDYiLCJcdTA0MzFcdTA0MzVcdTA0M2IiLCJcdTRlMmRcdTU2ZmQiLCJcdTRlMmRcdTU3MGIiLCJcdTA2MjdcdTA2NDRcdTA2MmNcdTA2MzJcdTA2''@;'; put 'put ''MjdcdTA2MjZcdTA2MzEiLCJcdTA2NDVcdTA2MzVcdTA2MzEiLCJcdTA0MzVcdTA0NGUiLCJcdTAzYjVcdTAzYzUiLCJcdTA2NDVcdTA2NDhcdTA2MzFcdTA2NGFcdTA2MmFcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjciLCJcdTEwZDJcdTEwZDQiLCJcdTAzYjVcdTAzYmIiLCJcdTk5OTlcdTZl''@;'; put 'put ''MmYiLCJcdTUwMGJcdTRlYmEuXHU5OTk5XHU2ZTJmIiwiXHU1MTZjXHU1M2Y4Llx1OTk5OVx1NmUyZiIsIlx1NjUzZlx1NWU5Yy5cdTk5OTlcdTZlMmYiLCJcdTY1NTlcdTgwYjIuXHU5OTk5XHU2ZTJmIiwiXHU3ZDQ0XHU3ZTU0Llx1OTk5OVx1NmUyZiIsIlx1N2RiMlx1N2Q2MS5cdTk5OTlc''@;'; put 'put ''dTZlMmYiLCJcdTBjYWRcdTBjYmVcdTBjYjBcdTBjYTQiLCJcdTBiMmRcdTBiM2VcdTBiMzBcdTBiMjQiLCJcdTA5YWRcdTA5YmVcdTA5ZjBcdTA5YTQiLCJcdTA5MmRcdTA5M2VcdTA5MzBcdTA5MjRcdTA5MmVcdTA5NGQiLCJcdTA5MmRcdTA5M2VcdTA5MzBcdTA5NGJcdTA5MjQiLCJcdTA2''@;'; put 'put ''ODBcdTA2MjdcdTA2MzFcdTA2MmEiLCJcdTBkMmRcdTBkM2VcdTBkMzBcdTBkMjRcdTBkMDIiLCJcdTA5MmRcdTA5M2VcdTA5MzBcdTA5MjQiLCJcdTA2MjhcdTA2MjdcdTA2MzFcdTA2MmEiLCJcdTA2MjhcdTA2YmVcdTA2MjdcdTA2MzFcdTA2MmEiLCJcdTBjMmRcdTBjM2VcdTBjMzBcdTBj''@;'; put 'put ''MjRcdTBjNGQiLCJcdTBhYWRcdTBhYmVcdTBhYjBcdTBhYTQiLCJcdTBhMmRcdTBhM2VcdTBhMzBcdTBhMjQiLCJcdTA5YWRcdTA5YmVcdTA5YjBcdTA5YTQiLCJcdTBiODdcdTBiYThcdTBiY2RcdTBiYTRcdTBiYmZcdTBiYWZcdTBiYmUiLCJcdTA2MjdcdTA2Y2NcdTA2MzFcdTA2MjdcdTA2''@;'; put 'put ''NDYiLCJcdTA2MjdcdTA2NGFcdTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2MzlcdTA2MzFcdTA2MjdcdTA2NDIiLCJcdTA2MjdcdTA2NDRcdTA2MjdcdTA2MzFcdTA2MmZcdTA2NDYiLCJcdWQ1NWNcdWFkNmQiLCJcdTA0OWJcdTA0MzBcdTA0MzciLCJcdTBlYTVcdTBlYjJcdTBlYTciLCJcdTBk''@;'; put 'put ''YmRcdTBkODJcdTBkOWFcdTBkY2YiLCJcdTBiODdcdTBiYjJcdTBiOTlcdTBiY2RcdTBiOTVcdTBiYzgiLCJcdTA2MjdcdTA2NDRcdTA2NDVcdTA2M2FcdTA2MzFcdTA2MjgiLCJcdTA0M2NcdTA0M2FcdTA0MzQiLCJcdTA0M2NcdTA0M2VcdTA0M2QiLCJcdTZmYjNcdTk1ODAiLCJcdTZmYjNc''@;'; put 'put ''dTk1ZTgiLCJcdTA2NDVcdTA2NDRcdTA2NGFcdTA2MzNcdTA2NGFcdTA2MjciLCJcdTA2MzlcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2N2VcdTA2MjdcdTA2YTlcdTA2MzNcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2N2VcdTA2MjdcdTA2NDNcdTA2MzNcdTA2MmFcdTA2MjdcdTA2NDYiLCJc''@;'; put 'put ''dTA2NDFcdTA2NDRcdTA2MzNcdTA2MzdcdTA2NGFcdTA2NDYiLCJcdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0MzBcdTA0M2EuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDNlXHUwNDMxXHUwNDQwLlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQzZVx1MDQzNC5cdTA0NDFcdTA0NDBcdTA0MzEi''@;'; put 'put ''LCJcdTA0M2VcdTA0NDBcdTA0MzMuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDNmXHUwNDQwLlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQ0M1x1MDQzZlx1MDQ0MC5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0NDBcdTA0NDQiLCJcdTA2NDJcdTA2MzdcdTA2MzEiLCJcdTA2MjdcdTA2NDRc''@;'; put 'put ''dTA2MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2NGFcdTA2MjkiLCJcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2Y2NcdTA2MjkiLCJcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2Y2NcdTA2YzMiLCJcdTA2MjdcdTA2NDRcdTA2MzNcdTA2Mzlc''@;'; put 'put ''dTA2NDhcdTA2MmZcdTA2NGFcdTA2NDciLCJcdTA2MzNcdTA2NDhcdTA2MmZcdTA2MjdcdTA2NDYiLCJcdTY1YjBcdTUyYTBcdTU3NjEiLCJcdTBiOWFcdTBiYmZcdTBiOTlcdTBiY2RcdTBiOTVcdTBiYWFcdTBiY2RcdTBiYWFcdTBiYzJcdTBiYjBcdTBiY2QiLCJcdTA2MzNcdTA2NDhcdTA2''@;'; put 'put ''MzFcdTA2NGFcdTA2MjkiLCJcdTA2MzNcdTA2NDhcdTA2MzFcdTA2NGFcdTA2MjciLCJcdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlMTdcdTBlMmJcdTBlMzJcdTBlMjMuXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTE4XHUwZTM4XHUwZTIzXHUwZTAxXHUwZTM0XHUwZTA4Llx1MGU0NFx1MGUx''@;'; put 'put ''N1x1MGUyMiIsIlx1MGU0MFx1MGUxOVx1MGU0N1x1MGUxNS5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlMjNcdTBlMzFcdTBlMTBcdTBlMWFcdTBlMzJcdTBlMjUuXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTI4XHUwZTM2XHUwZTAxXHUwZTI5XHUwZTMyLlx1MGU0NFx1MGUxN1x1MGUyMiIs''@;'; put 'put ''Ilx1MGUyZFx1MGUwN1x1MGUwNFx1MGU0Y1x1MGUwMVx1MGUyMy5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTA2MmFcdTA2NDhcdTA2NDZcdTA2MzMiLCJcdTUzZjBcdTcwNjMiLCJcdTUzZjBcdTZlN2UiLCJcdTgxZmFcdTcwNjMiLCJcdTA0NDNcdTA0M2FcdTA0NDAiLCJcdTA2MjdcdTA2NDRc''@;'; put 'put ''dTA2NGFcdTA2NDVcdTA2NDYiLCJ4eHgiLCJ5ZSIsImNvbS55ZSIsImVkdS55ZSIsImdvdi55ZSIsIm1pbC55ZSIsIm5ldC55ZSIsIm9yZy55ZSIsImFjLnphIiwiYWdyaWMuemEiLCJhbHQuemEiLCJjby56YSIsImVkdS56YSIsImdvdi56YSIsImdyb25kYXIuemEiLCJsYXcuemEiLCJtaWwu''@;'; put 'put ''emEiLCJuZXQuemEiLCJuZ28uemEiLCJuaWMuemEiLCJuaXMuemEiLCJub20uemEiLCJvcmcuemEiLCJzY2hvb2wuemEiLCJ0bS56YSIsIndlYi56YSIsInptIiwiYWMuem0iLCJiaXouem0iLCJjby56bSIsImNvbS56bSIsImVkdS56bSIsImdvdi56bSIsImluZm8uem0iLCJtaWwuem0iLCJu''@;'; put 'put ''ZXQuem0iLCJvcmcuem0iLCJzY2guem0iLCJ6dyIsImFjLnp3IiwiY28uenciLCJnb3YuenciLCJtaWwuenciLCJvcmcuenciLCJhYWEiLCJhYXJwIiwiYWJiIiwiYWJib3R0IiwiYWJidmllIiwiYWJjIiwiYWJsZSIsImFib2dhZG8iLCJhYnVkaGFiaSIsImFjYWRlbXkiLCJhY2NlbnR1cmUi''@;'; put 'put ''LCJhY2NvdW50YW50IiwiYWNjb3VudGFudHMiLCJhY28iLCJhY3RvciIsImFkcyIsImFkdWx0IiwiYWVnIiwiYWV0bmEiLCJhZmwiLCJhZnJpY2EiLCJhZ2FraGFuIiwiYWdlbmN5IiwiYWlnIiwiYWlyYnVzIiwiYWlyZm9yY2UiLCJhaXJ0ZWwiLCJha2RuIiwiYWxpYmFiYSIsImFsaXBheSIs''@;'; put 'put ''ImFsbGZpbmFueiIsImFsbHN0YXRlIiwiYWxseSIsImFsc2FjZSIsImFsc3RvbSIsImFtYXpvbiIsImFtZXJpY2FuZXhwcmVzcyIsImFtZXJpY2FuZmFtaWx5IiwiYW1leCIsImFtZmFtIiwiYW1pY2EiLCJhbXN0ZXJkYW0iLCJhbmFseXRpY3MiLCJhbmRyb2lkIiwiYW5xdWFuIiwiYW56Iiwi''@;'; put 'put ''YW9sIiwiYXBhcnRtZW50cyIsImFwcCIsImFwcGxlIiwiYXF1YXJlbGxlIiwiYXJhYiIsImFyYW1jbyIsImFyY2hpIiwiYXJteSIsImFydCIsImFydGUiLCJhc2RhIiwiYXNzb2NpYXRlcyIsImF0aGxldGEiLCJhdHRvcm5leSIsImF1Y3Rpb24iLCJhdWRpIiwiYXVkaWJsZSIsImF1ZGlvIiwi''@;'; put 'put ''YXVzcG9zdCIsImF1dGhvciIsImF1dG8iLCJhdXRvcyIsImF3cyIsImF4YSIsImF6dXJlIiwiYmFieSIsImJhaWR1IiwiYmFuYW1leCIsImJhbmQiLCJiYW5rIiwiYmFyIiwiYmFyY2Vsb25hIiwiYmFyY2xheWNhcmQiLCJiYXJjbGF5cyIsImJhcmVmb290IiwiYmFyZ2FpbnMiLCJiYXNlYmFs''@;'; put 'put ''bCIsImJhc2tldGJhbGwiLCJiYXVoYXVzIiwiYmF5ZXJuIiwiYmJjIiwiYmJ0IiwiYmJ2YSIsImJjZyIsImJjbiIsImJlYXRzIiwiYmVhdXR5IiwiYmVlciIsImJlbnRsZXkiLCJiZXJsaW4iLCJiZXN0IiwiYmVzdGJ1eSIsImJldCIsImJoYXJ0aSIsImJpYmxlIiwiYmlkIiwiYmlrZSIsImJp''@;'; put 'put ''bmciLCJiaW5nbyIsImJpbyIsImJsYWNrIiwiYmxhY2tmcmlkYXkiLCJibG9ja2J1c3RlciIsImJsb2ciLCJibG9vbWJlcmciLCJibHVlIiwiYm1zIiwiYm13IiwiYm5wcGFyaWJhcyIsImJvYXRzIiwiYm9laHJpbmdlciIsImJvZmEiLCJib20iLCJib25kIiwiYm9vIiwiYm9vayIsImJvb2tp''@;'; put 'put ''bmciLCJib3NjaCIsImJvc3RpayIsImJvc3RvbiIsImJvdCIsImJvdXRpcXVlIiwiYm94IiwiYnJhZGVzY28iLCJicmlkZ2VzdG9uZSIsImJyb2Fkd2F5IiwiYnJva2VyIiwiYnJvdGhlciIsImJydXNzZWxzIiwiYnVpbGQiLCJidWlsZGVycyIsImJ1c2luZXNzIiwiYnV5IiwiYnV6eiIsImJ6''@;'; put 'put ''aCIsImNhYiIsImNhZmUiLCJjYWwiLCJjYWxsIiwiY2Fsdmlua2xlaW4iLCJjYW0iLCJjYW1lcmEiLCJjYW1wIiwiY2Fub24iLCJjYXBldG93biIsImNhcGl0YWwiLCJjYXBpdGFsb25lIiwiY2FyIiwiY2FyYXZhbiIsImNhcmRzIiwiY2FyZSIsImNhcmVlciIsImNhcmVlcnMiLCJjYXJzIiwi''@;'; put 'put ''Y2FzYSIsImNhc2UiLCJjYXNoIiwiY2FzaW5vIiwiY2F0ZXJpbmciLCJjYXRob2xpYyIsImNiYSIsImNibiIsImNicmUiLCJjZW50ZXIiLCJjZW8iLCJjZXJuIiwiY2ZhIiwiY2ZkIiwiY2hhbmVsIiwiY2hhbm5lbCIsImNoYXJpdHkiLCJjaGFzZSIsImNoYXQiLCJjaGVhcCIsImNoaW50YWki''@;'; put 'put ''LCJjaHJpc3RtYXMiLCJjaHJvbWUiLCJjaHVyY2giLCJjaXByaWFuaSIsImNpcmNsZSIsImNpc2NvIiwiY2l0YWRlbCIsImNpdGkiLCJjaXRpYyIsImNpdHkiLCJjbGFpbXMiLCJjbGVhbmluZyIsImNsaWNrIiwiY2xpbmljIiwiY2xpbmlxdWUiLCJjbG90aGluZyIsImNsb3VkIiwiY2x1YiIs''@;'; put 'put ''ImNsdWJtZWQiLCJjb2FjaCIsImNvZGVzIiwiY29mZmVlIiwiY29sbGVnZSIsImNvbG9nbmUiLCJjb21tYmFuayIsImNvbW11bml0eSIsImNvbXBhbnkiLCJjb21wYXJlIiwiY29tcHV0ZXIiLCJjb21zZWMiLCJjb25kb3MiLCJjb25zdHJ1Y3Rpb24iLCJjb25zdWx0aW5nIiwiY29udGFjdCIs''@;'; put 'put ''ImNvbnRyYWN0b3JzIiwiY29va2luZyIsImNvb2wiLCJjb3JzaWNhIiwiY291bnRyeSIsImNvdXBvbiIsImNvdXBvbnMiLCJjb3Vyc2VzIiwiY3BhIiwiY3JlZGl0IiwiY3JlZGl0Y2FyZCIsImNyZWRpdHVuaW9uIiwiY3JpY2tldCIsImNyb3duIiwiY3JzIiwiY3J1aXNlIiwiY3J1aXNlcyIs''@;'; put 'put ''ImN1aXNpbmVsbGEiLCJjeW1ydSIsImN5b3UiLCJkYWQiLCJkYW5jZSIsImRhdGEiLCJkYXRlIiwiZGF0aW5nIiwiZGF0c3VuIiwiZGF5IiwiZGNsayIsImRkcyIsImRlYWwiLCJkZWFsZXIiLCJkZWFscyIsImRlZ3JlZSIsImRlbGl2ZXJ5IiwiZGVsbCIsImRlbG9pdHRlIiwiZGVsdGEiLCJk''@;'; put 'put ''ZW1vY3JhdCIsImRlbnRhbCIsImRlbnRpc3QiLCJkZXNpIiwiZGVzaWduIiwiZGV2IiwiZGhsIiwiZGlhbW9uZHMiLCJkaWV0IiwiZGlnaXRhbCIsImRpcmVjdCIsImRpcmVjdG9yeSIsImRpc2NvdW50IiwiZGlzY292ZXIiLCJkaXNoIiwiZGl5IiwiZG5wIiwiZG9jcyIsImRvY3RvciIsImRv''@;'; put 'put ''ZyIsImRvbWFpbnMiLCJkb3QiLCJkb3dubG9hZCIsImRyaXZlIiwiZHR2IiwiZHViYWkiLCJkdW5sb3AiLCJkdXBvbnQiLCJkdXJiYW4iLCJkdmFnIiwiZHZyIiwiZWFydGgiLCJlYXQiLCJlY28iLCJlZGVrYSIsImVkdWNhdGlvbiIsImVtYWlsIiwiZW1lcmNrIiwiZW5lcmd5IiwiZW5naW5l''@;'; put 'put ''ZXIiLCJlbmdpbmVlcmluZyIsImVudGVycHJpc2VzIiwiZXBzb24iLCJlcXVpcG1lbnQiLCJlcmljc3NvbiIsImVybmkiLCJlc3EiLCJlc3RhdGUiLCJldXJvdmlzaW9uIiwiZXVzIiwiZXZlbnRzIiwiZXhjaGFuZ2UiLCJleHBlcnQiLCJleHBvc2VkIiwiZXhwcmVzcyIsImV4dHJhc3BhY2Ui''@;'; put 'put ''LCJmYWdlIiwiZmFpbCIsImZhaXJ3aW5kcyIsImZhaXRoIiwiZmFtaWx5IiwiZmFuIiwiZmFucyIsImZhcm0iLCJmYXJtZXJzIiwiZmFzaGlvbiIsImZhc3QiLCJmZWRleCIsImZlZWRiYWNrIiwiZmVycmFyaSIsImZlcnJlcm8iLCJmaWRlbGl0eSIsImZpZG8iLCJmaWxtIiwiZmluYWwiLCJm''@;'; put 'put ''aW5hbmNlIiwiZmluYW5jaWFsIiwiZmlyZSIsImZpcmVzdG9uZSIsImZpcm1kYWxlIiwiZmlzaCIsImZpc2hpbmciLCJmaXQiLCJmaXRuZXNzIiwiZmxpY2tyIiwiZmxpZ2h0cyIsImZsaXIiLCJmbG9yaXN0IiwiZmxvd2VycyIsImZseSIsImZvbyIsImZvb2QiLCJmb290YmFsbCIsImZvcmQi''@;'; put 'put ''LCJmb3JleCIsImZvcnNhbGUiLCJmb3J1bSIsImZvdW5kYXRpb24iLCJmb3giLCJmcmVlIiwiZnJlc2VuaXVzIiwiZnJsIiwiZnJvZ2FucyIsImZyb250aWVyIiwiZnRyIiwiZnVqaXRzdSIsImZ1biIsImZ1bmQiLCJmdXJuaXR1cmUiLCJmdXRib2wiLCJmeWkiLCJnYWwiLCJnYWxsZXJ5Iiwi''@;'; put 'put ''Z2FsbG8iLCJnYWxsdXAiLCJnYW1lIiwiZ2FtZXMiLCJnYXAiLCJnYXJkZW4iLCJnYXkiLCJnYml6IiwiZ2RuIiwiZ2VhIiwiZ2VudCIsImdlbnRpbmciLCJnZW9yZ2UiLCJnZ2VlIiwiZ2lmdCIsImdpZnRzIiwiZ2l2ZXMiLCJnaXZpbmciLCJnbGFzcyIsImdsZSIsImdsb2JhbCIsImdsb2Jv''@;'; put 'put ''IiwiZ21haWwiLCJnbWJoIiwiZ21vIiwiZ214IiwiZ29kYWRkeSIsImdvbGQiLCJnb2xkcG9pbnQiLCJnb2xmIiwiZ29vIiwiZ29vZHllYXIiLCJnb29nIiwiZ29vZ2xlIiwiZ29wIiwiZ290IiwiZ3JhaW5nZXIiLCJncmFwaGljcyIsImdyYXRpcyIsImdyZWVuIiwiZ3JpcGUiLCJncm9jZXJ5''@;'; put 'put ''IiwiZ3JvdXAiLCJndWNjaSIsImd1Z2UiLCJndWlkZSIsImd1aXRhcnMiLCJndXJ1IiwiaGFpciIsImhhbWJ1cmciLCJoYW5nb3V0IiwiaGF1cyIsImhibyIsImhkZmMiLCJoZGZjYmFuayIsImhlYWx0aCIsImhlYWx0aGNhcmUiLCJoZWxwIiwiaGVsc2lua2kiLCJoZXJlIiwiaGVybWVzIiwi''@;'; put 'put ''aGlwaG9wIiwiaGlzYW1pdHN1IiwiaGl0YWNoaSIsImhpdiIsImhrdCIsImhvY2tleSIsImhvbGRpbmdzIiwiaG9saWRheSIsImhvbWVkZXBvdCIsImhvbWVnb29kcyIsImhvbWVzIiwiaG9tZXNlbnNlIiwiaG9uZGEiLCJob3JzZSIsImhvc3BpdGFsIiwiaG9zdCIsImhvc3RpbmciLCJob3Qi''@;'; put 'put ''LCJob3RlbHMiLCJob3RtYWlsIiwiaG91c2UiLCJob3ciLCJoc2JjIiwiaHVnaGVzIiwiaHlhdHQiLCJoeXVuZGFpIiwiaWJtIiwiaWNiYyIsImljZSIsImljdSIsImllZWUiLCJpZm0iLCJpa2FubyIsImltYW1hdCIsImltZGIiLCJpbW1vIiwiaW1tb2JpbGllbiIsImluYyIsImluZHVzdHJp''@;'; put 'put ''ZXMiLCJpbmZpbml0aSIsImluZyIsImluayIsImluc3RpdHV0ZSIsImluc3VyYW5jZSIsImluc3VyZSIsImludGVybmF0aW9uYWwiLCJpbnR1aXQiLCJpbnZlc3RtZW50cyIsImlwaXJhbmdhIiwiaXJpc2giLCJpc21haWxpIiwiaXN0IiwiaXN0YW5idWwiLCJpdGF1IiwiaXR2IiwiamFndWFy''@;'; put 'put ''IiwiamF2YSIsImpjYiIsImplZXAiLCJqZXR6dCIsImpld2VscnkiLCJqaW8iLCJqbGwiLCJqbXAiLCJqbmoiLCJqb2J1cmciLCJqb3QiLCJqb3kiLCJqcG1vcmdhbiIsImpwcnMiLCJqdWVnb3MiLCJqdW5pcGVyIiwia2F1ZmVuIiwia2RkaSIsImtlcnJ5aG90ZWxzIiwia2Vycnlsb2dpc3Rp''@;'; put 'put ''Y3MiLCJrZXJyeXByb3BlcnRpZXMiLCJrZmgiLCJraWEiLCJraWRzIiwia2ltIiwia2luZGxlIiwia2l0Y2hlbiIsImtpd2kiLCJrb2VsbiIsImtvbWF0c3UiLCJrb3NoZXIiLCJrcG1nIiwia3BuIiwia3JkIiwia3JlZCIsImt1b2tncm91cCIsImt5b3RvIiwibGFjYWl4YSIsImxhbWJvcmdo''@;'; put 'put ''aW5pIiwibGFtZXIiLCJsYW5jYXN0ZXIiLCJsYW5kIiwibGFuZHJvdmVyIiwibGFueGVzcyIsImxhc2FsbGUiLCJsYXQiLCJsYXRpbm8iLCJsYXRyb2JlIiwibGF3IiwibGF3eWVyIiwibGRzIiwibGVhc2UiLCJsZWNsZXJjIiwibGVmcmFrIiwibGVnYWwiLCJsZWdvIiwibGV4dXMiLCJsZ2J0''@;'; put 'put ''IiwibGlkbCIsImxpZmUiLCJsaWZlaW5zdXJhbmNlIiwibGlmZXN0eWxlIiwibGlnaHRpbmciLCJsaWtlIiwibGlsbHkiLCJsaW1pdGVkIiwibGltbyIsImxpbmNvbG4iLCJsaW5rIiwibGlwc3kiLCJsaXZlIiwibGl2aW5nIiwibGxjIiwibGxwIiwibG9hbiIsImxvYW5zIiwibG9ja2VyIiwi''@;'; put 'put ''bG9jdXMiLCJsb2wiLCJsb25kb24iLCJsb3R0ZSIsImxvdHRvIiwibG92ZSIsImxwbCIsImxwbGZpbmFuY2lhbCIsImx0ZCIsImx0ZGEiLCJsdW5kYmVjayIsImx1eGUiLCJsdXh1cnkiLCJtYWRyaWQiLCJtYWlmIiwibWFpc29uIiwibWFrZXVwIiwibWFuIiwibWFuYWdlbWVudCIsIm1hbmdv''@;'; put 'put ''IiwibWFwIiwibWFya2V0IiwibWFya2V0aW5nIiwibWFya2V0cyIsIm1hcnJpb3R0IiwibWFyc2hhbGxzIiwibWF0dGVsIiwibWJhIiwibWNraW5zZXkiLCJtZWQiLCJtZWRpYSIsIm1lZXQiLCJtZWxib3VybmUiLCJtZW1lIiwibWVtb3JpYWwiLCJtZW4iLCJtZW51IiwibWVyY2siLCJtZXJj''@;'; put 'put ''a21zZCIsIm1pYW1pIiwibWljcm9zb2Z0IiwibWluaSIsIm1pbnQiLCJtaXQiLCJtaXRzdWJpc2hpIiwibWxiIiwibWxzIiwibW1hIiwibW9iaWxlIiwibW9kYSIsIm1vZSIsIm1vaSIsIm1vbSIsIm1vbmFzaCIsIm1vbmV5IiwibW9uc3RlciIsIm1vcm1vbiIsIm1vcnRnYWdlIiwibW9zY293''@;'; put 'put ''IiwibW90byIsIm1vdG9yY3ljbGVzIiwibW92IiwibW92aWUiLCJtc2QiLCJtdG4iLCJtdHIiLCJtdXNpYyIsIm5hYiIsIm5hZ295YSIsIm5hdnkiLCJuYmEiLCJuZWMiLCJuZXRiYW5rIiwibmV0ZmxpeCIsIm5ldHdvcmsiLCJuZXVzdGFyIiwibmV3IiwibmV3cyIsIm5leHQiLCJuZXh0ZGly''@;'; put 'put ''ZWN0IiwibmV4dXMiLCJuZmwiLCJuZ28iLCJuaGsiLCJuaWNvIiwibmlrZSIsIm5pa29uIiwibmluamEiLCJuaXNzYW4iLCJuaXNzYXkiLCJub2tpYSIsIm5vcnRvbiIsIm5vdyIsIm5vd3J1eiIsIm5vd3R2IiwibnJhIiwibnJ3IiwibnR0IiwibnljIiwib2JpIiwib2JzZXJ2ZXIiLCJvZmZp''@;'; put 'put ''Y2UiLCJva2luYXdhIiwib2xheWFuIiwib2xheWFuZ3JvdXAiLCJvbGxvIiwib21lZ2EiLCJvbmUiLCJvbmciLCJvbmwiLCJvbmxpbmUiLCJvb28iLCJvcGVuIiwib3JhY2xlIiwib3JhbmdlIiwib3JnYW5pYyIsIm9yaWdpbnMiLCJvc2FrYSIsIm90c3VrYSIsIm90dCIsIm92aCIsInBhZ2Ui''@;'; put 'put ''LCJwYW5hc29uaWMiLCJwYXJpcyIsInBhcnMiLCJwYXJ0bmVycyIsInBhcnRzIiwicGFydHkiLCJwYXkiLCJwY2N3IiwicGV0IiwicGZpemVyIiwicGhhcm1hY3kiLCJwaGQiLCJwaGlsaXBzIiwicGhvbmUiLCJwaG90byIsInBob3RvZ3JhcGh5IiwicGhvdG9zIiwicGh5c2lvIiwicGljcyIs''@;'; put 'put ''InBpY3RldCIsInBpY3R1cmVzIiwicGlkIiwicGluIiwicGluZyIsInBpbmsiLCJwaW9uZWVyIiwicGl6emEiLCJwbGFjZSIsInBsYXkiLCJwbGF5c3RhdGlvbiIsInBsdW1iaW5nIiwicGx1cyIsInBuYyIsInBvaGwiLCJwb2tlciIsInBvbGl0aWUiLCJwb3JuIiwicHJhbWVyaWNhIiwicHJh''@;'; put 'put ''eGkiLCJwcmVzcyIsInByaW1lIiwicHJvZCIsInByb2R1Y3Rpb25zIiwicHJvZiIsInByb2dyZXNzaXZlIiwicHJvbW8iLCJwcm9wZXJ0aWVzIiwicHJvcGVydHkiLCJwcm90ZWN0aW9uIiwicHJ1IiwicHJ1ZGVudGlhbCIsInB1YiIsInB3YyIsInFwb24iLCJxdWViZWMiLCJxdWVzdCIsInJh''@;'; put 'put ''Y2luZyIsInJhZGlvIiwicmVhZCIsInJlYWxlc3RhdGUiLCJyZWFsdG9yIiwicmVhbHR5IiwicmVjaXBlcyIsInJlZCIsInJlZHN0b25lIiwicmVkdW1icmVsbGEiLCJyZWhhYiIsInJlaXNlIiwicmVpc2VuIiwicmVpdCIsInJlbGlhbmNlIiwicmVuIiwicmVudCIsInJlbnRhbHMiLCJyZXBh''@;'; put 'put ''aXIiLCJyZXBvcnQiLCJyZXB1YmxpY2FuIiwicmVzdCIsInJlc3RhdXJhbnQiLCJyZXZpZXciLCJyZXZpZXdzIiwicmV4cm90aCIsInJpY2giLCJyaWNoYXJkbGkiLCJyaWNvaCIsInJpbCIsInJpbyIsInJpcCIsInJvY2tzIiwicm9kZW8iLCJyb2dlcnMiLCJyb29tIiwicnN2cCIsInJ1Z2J5''@;'; put 'put ''IiwicnVociIsInJ1biIsInJ3ZSIsInJ5dWt5dSIsInNhYXJsYW5kIiwic2FmZSIsInNhZmV0eSIsInNha3VyYSIsInNhbGUiLCJzYWxvbiIsInNhbXNjbHViIiwic2Ftc3VuZyIsInNhbmR2aWsiLCJzYW5kdmlrY29yb21hbnQiLCJzYW5vZmkiLCJzYXAiLCJzYXJsIiwic2FzIiwic2F2ZSIs''@;'; put 'put ''InNheG8iLCJzYmkiLCJzYnMiLCJzY2IiLCJzY2hhZWZmbGVyIiwic2NobWlkdCIsInNjaG9sYXJzaGlwcyIsInNjaG9vbCIsInNjaHVsZSIsInNjaHdhcnoiLCJzY2llbmNlIiwic2NvdCIsInNlYXJjaCIsInNlYXQiLCJzZWN1cmUiLCJzZWN1cml0eSIsInNlZWsiLCJzZWxlY3QiLCJzZW5l''@;'; put 'put ''ciIsInNlcnZpY2VzIiwic2V2ZW4iLCJzZXciLCJzZXgiLCJzZXh5Iiwic2ZyIiwic2hhbmdyaWxhIiwic2hhcnAiLCJzaGVsbCIsInNoaWEiLCJzaGlrc2hhIiwic2hvZXMiLCJzaG9wIiwic2hvcHBpbmciLCJzaG91amkiLCJzaG93Iiwic2lsayIsInNpbmEiLCJzaW5nbGVzIiwic2l0ZSIs''@;'; put 'put ''InNraSIsInNraW4iLCJza3kiLCJza3lwZSIsInNsaW5nIiwic21hcnQiLCJzbWlsZSIsInNuY2YiLCJzb2NjZXIiLCJzb2NpYWwiLCJzb2Z0YmFuayIsInNvZnR3YXJlIiwic29odSIsInNvbGFyIiwic29sdXRpb25zIiwic29uZyIsInNvbnkiLCJzb3kiLCJzcGEiLCJzcGFjZSIsInNwb3J0''@;'; put 'put ''Iiwic3BvdCIsInNybCIsInN0YWRhIiwic3RhcGxlcyIsInN0YXIiLCJzdGF0ZWJhbmsiLCJzdGF0ZWZhcm0iLCJzdGMiLCJzdGNncm91cCIsInN0b2NraG9sbSIsInN0b3JhZ2UiLCJzdG9yZSIsInN0cmVhbSIsInN0dWRpbyIsInN0dWR5Iiwic3R5bGUiLCJzdWNrcyIsInN1cHBsaWVzIiwi''@;'; put 'put ''c3VwcGx5Iiwic3VwcG9ydCIsInN1cmYiLCJzdXJnZXJ5Iiwic3V6dWtpIiwic3dhdGNoIiwic3dpc3MiLCJzeWRuZXkiLCJzeXN0ZW1zIiwidGFiIiwidGFpcGVpIiwidGFsayIsInRhb2JhbyIsInRhcmdldCIsInRhdGFtb3RvcnMiLCJ0YXRhciIsInRhdHRvbyIsInRheCIsInRheGkiLCJ0''@;'; put 'put ''Y2kiLCJ0ZGsiLCJ0ZWFtIiwidGVjaCIsInRlY2hub2xvZ3kiLCJ0ZW1hc2VrIiwidGVubmlzIiwidGV2YSIsInRoZCIsInRoZWF0ZXIiLCJ0aGVhdHJlIiwidGlhYSIsInRpY2tldHMiLCJ0aWVuZGEiLCJ0aXBzIiwidGlyZXMiLCJ0aXJvbCIsInRqbWF4eCIsInRqeCIsInRrbWF4eCIsInRt''@;'; put 'put ''YWxsIiwidG9kYXkiLCJ0b2t5byIsInRvb2xzIiwidG9wIiwidG9yYXkiLCJ0b3NoaWJhIiwidG90YWwiLCJ0b3VycyIsInRvd24iLCJ0b3lvdGEiLCJ0b3lzIiwidHJhZGUiLCJ0cmFkaW5nIiwidHJhaW5pbmciLCJ0cmF2ZWwiLCJ0cmF2ZWxlcnMiLCJ0cmF2ZWxlcnNpbnN1cmFuY2UiLCJ0''@;'; put 'put ''cnVzdCIsInRydiIsInR1YmUiLCJ0dWkiLCJ0dW5lcyIsInR1c2h1IiwidHZzIiwidWJhbmsiLCJ1YnMiLCJ1bmljb20iLCJ1bml2ZXJzaXR5IiwidW5vIiwidW9sIiwidXBzIiwidmFjYXRpb25zIiwidmFuYSIsInZhbmd1YXJkIiwidmVnYXMiLCJ2ZW50dXJlcyIsInZlcmlzaWduIiwidmVy''@;'; put 'put ''c2ljaGVydW5nIiwidmV0IiwidmlhamVzIiwidmlkZW8iLCJ2aWciLCJ2aWtpbmciLCJ2aWxsYXMiLCJ2aW4iLCJ2aXAiLCJ2aXJnaW4iLCJ2aXNhIiwidmlzaW9uIiwidml2YSIsInZpdm8iLCJ2bGFhbmRlcmVuIiwidm9ka2EiLCJ2b2x2byIsInZvdGUiLCJ2b3RpbmciLCJ2b3RvIiwidm95''@;'; put 'put ''YWdlIiwid2FsZXMiLCJ3YWxtYXJ0Iiwid2FsdGVyIiwid2FuZyIsIndhbmdnb3UiLCJ3YXRjaCIsIndhdGNoZXMiLCJ3ZWF0aGVyIiwid2VhdGhlcmNoYW5uZWwiLCJ3ZWJjYW0iLCJ3ZWJlciIsIndlYnNpdGUiLCJ3ZWQiLCJ3ZWRkaW5nIiwid2VpYm8iLCJ3ZWlyIiwid2hvc3dobyIsIndp''@;'; put 'put ''ZW4iLCJ3aWtpIiwid2lsbGlhbWhpbGwiLCJ3aW4iLCJ3aW5kb3dzIiwid2luZSIsIndpbm5lcnMiLCJ3bWUiLCJ3b2x0ZXJza2x1d2VyIiwid29vZHNpZGUiLCJ3b3JrIiwid29ya3MiLCJ3b3JsZCIsIndvdyIsInd0YyIsInd0ZiIsInhib3giLCJ4ZXJveCIsInhpaHVhbiIsInhpbiIsIlx1''@;'; put 'put ''MDkxNVx1MDk0OVx1MDkyZSIsIlx1MzBiYlx1MzBmY1x1MzBlYiIsIlx1NGY1Ylx1NWM3MSIsIlx1NjE0OFx1NTU4NCIsIlx1OTZjNlx1NTZlMiIsIlx1NTcyOFx1N2ViZiIsIlx1NzBiOVx1NzcwYiIsIlx1MGUwNFx1MGUyZFx1MGUyMSIsIlx1NTE2Ylx1NTM2NiIsIlx1MDY0NVx1MDY0OFx1''@;'; put 'put ''MDY0Mlx1MDYzOSIsIlx1NTE2Y1x1NzZjYSIsIlx1NTE2Y1x1NTNmOCIsIlx1OTk5OVx1NjgzY1x1OTFjY1x1NjJjOSIsIlx1N2Y1MVx1N2FkOSIsIlx1NzlmYlx1NTJhOCIsIlx1NjIxMVx1NzIzMVx1NGY2MCIsIlx1MDQzY1x1MDQzZVx1MDQ0MVx1MDQzYVx1MDQzMlx1MDQzMCIsIlx1MDQz''@;'; put 'put ''YVx1MDQzMFx1MDQ0Mlx1MDQzZVx1MDQzYlx1MDQzOFx1MDQzYSIsIlx1MDQzZVx1MDQzZFx1MDQzYlx1MDQzMFx1MDQzOVx1MDQzZCIsIlx1MDQ0MVx1MDQzMFx1MDQzOVx1MDQ0MiIsIlx1ODA1NFx1OTAxYSIsIlx1MDVlN1x1MDVkNVx1MDVkZCIsIlx1NjVmNlx1NWMxYSIsIlx1NWZhZVx1''@;'; put 'put ''NTM1YSIsIlx1NmRlMVx1OWE2Y1x1OTUyMSIsIlx1MzBkNVx1MzBhMVx1MzBjM1x1MzBiN1x1MzBlN1x1MzBmMyIsIlx1MDQzZVx1MDQ0MFx1MDQzMyIsIlx1MDkyOFx1MDk0N1x1MDkxZiIsIlx1MzBiOVx1MzBjOFx1MzBhMiIsIlx1MzBhMlx1MzBkZVx1MzBiZVx1MzBmMyIsIlx1YzBiY1x1''@;'; put 'put ''YzEzMSIsIlx1NTU0Nlx1NjgwNyIsIlx1NTU0Nlx1NWU5NyIsIlx1NTU0Nlx1NTdjZSIsIlx1MDQzNFx1MDQzNVx1MDQ0Mlx1MDQzOCIsIlx1MzBkZFx1MzBhNFx1MzBmM1x1MzBjOCIsIlx1NjViMFx1OTVmYiIsIlx1NWJiNlx1OTZmYiIsIlx1MDY0M1x1MDY0OFx1MDY0NSIsIlx1NGUyZFx1''@;'; put 'put ''NjU4N1x1N2Y1MSIsIlx1NGUyZFx1NGZlMSIsIlx1NWEzMVx1NGU1MCIsIlx1OGMzN1x1NmI0YyIsIlx1OTZmYlx1OGEwYVx1NzZjOFx1NzlkMSIsIlx1OGQyZFx1NzI2OSIsIlx1MzBhZlx1MzBlOVx1MzBhNlx1MzBjOSIsIlx1OTAxYVx1OGNhOSIsIlx1N2Y1MVx1NWU5NyIsIlx1MDkzOFx1''@;'; put 'put ''MDkwMlx1MDkxN1x1MDkyMFx1MDkyOCIsIlx1OTkxMFx1NTM4NSIsIlx1N2Y1MVx1N2VkYyIsIlx1MDQzYVx1MDQzZVx1MDQzYyIsIlx1NGU5YVx1OWE2Y1x1OTAwYSIsIlx1OThkZlx1NTRjMSIsIlx1OThkZVx1NTIyOVx1NmQ2NiIsIlx1NjI0Ylx1NjczYSIsIlx1MDYyN1x1MDYzMVx1MDYy''@;'; put 'put ''N1x1MDY0NVx1MDY0M1x1MDY0OCIsIlx1MDYyN1x1MDY0NFx1MDYzOVx1MDY0NFx1MDY0YVx1MDYyN1x1MDY0NiIsIlx1MDYyOFx1MDYyN1x1MDYzMlx1MDYyN1x1MDYzMSIsIlx1MDYyN1x1MDYyOFx1MDY0OFx1MDYzOFx1MDYyOFx1MDY0YSIsIlx1MDY0M1x1MDYyN1x1MDYyYlx1MDY0OFx1''@;'; put 'put ''MDY0NFx1MDY0YVx1MDY0MyIsIlx1MDY0N1x1MDY0NVx1MDYzMVx1MDYyN1x1MDY0NyIsIlx1YjJmN1x1Y2VmNCIsIlx1NjUzZlx1NWU5YyIsIlx1MDYzNFx1MDYyOFx1MDY0M1x1MDYyOSIsIlx1MDYyOFx1MDY0YVx1MDYyYVx1MDY0MyIsIlx1MDYzOVx1MDYzMVx1MDYyOCIsIlx1NjczYVx1''@;'; put 'put ''Njc4NCIsIlx1N2VjNFx1N2VjN1x1NjczYVx1Njc4NCIsIlx1NTA2NVx1NWViNyIsIlx1NjJkYlx1ODA1OCIsIlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1NTkyN1x1NjJmZiIsIlx1MzA3Zlx1MzA5M1x1MzA2YSIsIlx1MzBiMFx1MzBmY1x1MzBiMFx1MzBlYiIsIlx1NGUxNlx1NzU0YyIsIlx1''@;'; put 'put ''NjZmOFx1N2M0ZCIsIlx1N2Y1MVx1NTc0MCIsIlx1YjJmN1x1YjEzNyIsIlx1MzBiM1x1MzBlMCIsIlx1NTkyOVx1NGUzYlx1NjU1OSIsIlx1NmUzOFx1NjIwZiIsInZlcm1ceGY2Z2Vuc2JlcmF0ZXIiLCJ2ZXJtXHhmNmdlbnNiZXJhdHVuZyIsIlx1NGYwMVx1NGUxYSIsIlx1NGZlMVx1NjA2''@;'; put 'put ''ZiIsIlx1NTYwOVx1OTFjY1x1NTkyN1x1OTE1Mlx1NWU5NyIsIlx1NTYwOVx1OTFjYyIsIlx1NWU3Zlx1NGUxYyIsIlx1NjUzZlx1NTJhMSIsInh5eiIsInlhY2h0cyIsInlhaG9vIiwieWFtYXh1biIsInlhbmRleCIsInlvZG9iYXNoaSIsInlvZ2EiLCJ5b2tvaGFtYSIsInlvdSIsInlvdXR1''@;'; put 'put ''YmUiLCJ5dW4iLCJ6YXBwb3MiLCJ6YXJhIiwiemVybyIsInppcCIsInpvbmUiLCJ6dWVyaWNoIiwiY28ua3JkIiwiZWR1LmtyZCIsImFydC5wbCIsImdsaXdpY2UucGwiLCJrcmFrb3cucGwiLCJwb3puYW4ucGwiLCJ3cm9jLnBsIiwiemFrb3BhbmUucGwiLCJsaWIuZGUudXMiLCIxMmNoYXJz''@;'; put 'put ''LmRldiIsIjEyY2hhcnMuaXQiLCIxMmNoYXJzLnBybyIsImNjLnVhIiwiaW5mLnVhIiwibHRkLnVhIiwiNjExLnRvIiwiYTJob3N0ZWQuY29tIiwiY3BzZXJ2ZXIuY29tIiwiYWFhLnZvZGthIiwiKi5vbi1hY29ybi5pbyIsImFjdGl2ZXRyYWlsLmJpeiIsImFkYXB0YWJsZS5hcHAiLCJhZG9i''@;'; put 'put ''ZWFlbWNsb3VkLmNvbSIsIiouZGV2LmFkb2JlYWVtY2xvdWQuY29tIiwiYWVtLmxpdmUiLCJobHgubGl2ZSIsImFkb2JlYWVtY2xvdWQubmV0IiwiYWVtLnBhZ2UiLCJobHgucGFnZSIsImhseDMucGFnZSIsImFkb2JlaW8tc3RhdGljLm5ldCIsImFkb2JlaW9ydW50aW1lLm5ldCIsImFmcmlj''@;'; put 'put ''YS5jb20iLCJiZWVwLnBsIiwiYWlya2l0YXBwcy5jb20iLCJhaXJraXRhcHBzLWF1LmNvbSIsImFpcmtpdGFwcHMuZXUiLCJhaXZlbmNsb3VkLmNvbSIsImFrYWRucy5uZXQiLCJha2FtYWkubmV0IiwiYWthbWFpLXN0YWdpbmcubmV0IiwiYWthbWFpZWRnZS5uZXQiLCJha2FtYWllZGdlLXN0''@;'; put 'put ''YWdpbmcubmV0IiwiYWthbWFpaGQubmV0IiwiYWthbWFpaGQtc3RhZ2luZy5uZXQiLCJha2FtYWlvcmlnaW4ubmV0IiwiYWthbWFpb3JpZ2luLXN0YWdpbmcubmV0IiwiYWthbWFpemVkLm5ldCIsImFrYW1haXplZC1zdGFnaW5nLm5ldCIsImVkZ2VrZXkubmV0IiwiZWRnZWtleS1zdGFnaW5n''@;'; put 'put ''Lm5ldCIsImVkZ2VzdWl0ZS5uZXQiLCJlZGdlc3VpdGUtc3RhZ2luZy5uZXQiLCJiYXJzeS5jYSIsIiouY29tcHV0ZS5lc3RhdGUiLCIqLmFsY2VzLm5ldHdvcmsiLCJrYXNzZXJ2ZXIuY29tIiwiYWx0ZXJ2aXN0YS5vcmciLCJhbHdheXNkYXRhLm5ldCIsIm15YW1hemUubmV0IiwiZXhlY3V0''@;'; put 'put ''ZS1hcGkuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiZXhlY3V0ZS1hcGkuY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsImV4ZWN1dGUtYXBpLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0''@;'; put 'put ''ZS1hcGkuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZXhl''@;'; put 'put ''Y3V0ZS1hcGkuYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwi''@;'; put 'put ''ZXhlY3V0ZS1hcGkuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwi''@;'; put 'put ''ZXhlY3V0ZS1hcGkuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1''@;'; put 'put ''dGUtYXBpLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmlsLWNl''@;'; put 'put ''bnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkubWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLnVzLWVhc3QtMS5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS51cy13ZXN0LTEuYW1hem9u''@;'; put 'put ''YXdzLmNvbSIsImV4ZWN1dGUtYXBpLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiY2xvdWRmcm9udC5uZXQiLCJhdXRoLmFmLXNvdXRoLTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmFwLWVhc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtbm9ydGhlYXN0LTEuYW1hem9uY29n''@;'; put 'put ''bml0by5jb20iLCJhdXRoLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5hcC1ub3J0aGVhc3QtMy5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtc291dGgtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtc291dGgtMi5hbWF6b25jb2duaXRvLmNvbSIsImF1''@;'; put 'put ''dGguYXAtc291dGhlYXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5hcC1zb3V0aGVhc3QtMy5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtc291dGhlYXN0LTQuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmNh''@;'; put 'put ''LWNlbnRyYWwtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguY2Etd2VzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5ldS1jZW50cmFsLTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmV1LWNlbnRyYWwtMi5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguZXUtbm9ydGgtMS5hbWF6b25j''@;'; put 'put ''b2duaXRvLmNvbSIsImF1dGguZXUtc291dGgtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguZXUtc291dGgtMi5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguZXUtd2VzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5ldS13ZXN0LTIuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmV1LXdl''@;'; put 'put ''c3QtMy5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguaWwtY2VudHJhbC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5tZS1jZW50cmFsLTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLm1lLXNvdXRoLTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLnNhLWVhc3QtMS5hbWF6b25jb2duaXRv''@;'; put 'put ''LmNvbSIsImF1dGgudXMtZWFzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC1maXBzLnVzLWVhc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgudXMtZWFzdC0yLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC1maXBzLnVzLWVhc3QtMi5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgtZmlw''@;'; put 'put ''cy51cy1nb3Ytd2VzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC51cy13ZXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLWZpcHMudXMtd2VzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC51cy13ZXN0LTIuYW1hem9uY29nbml0by5jb20iLCJhdXRoLWZpcHMudXMtd2VzdC0y''@;'; put 'put ''LmFtYXpvbmNvZ25pdG8uY29tIiwiKi5jb21wdXRlLmFtYXpvbmF3cy5jb20uY24iLCIqLmNvbXB1dGUuYW1hem9uYXdzLmNvbSIsIiouY29tcHV0ZS0xLmFtYXpvbmF3cy5jb20iLCJ1cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuY24tbm9ydGgtMS5hbWF6b25hd3Mu''@;'; put 'put ''Y29tLmNuIiwiZW1ybm90ZWJvb2tzLXByb2QuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiZW1yc3R1ZGlvLXByb2QuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiZW1yYXBwdWktcHJvZC5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiZW1ybm90ZWJvb2tzLXBy''@;'; put 'put ''b2QuY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsImVtcnN0dWRpby1wcm9kLmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJlbXJhcHB1aS1wcm9kLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFmLXNvdXRoLTEuYW1hem9uYXdz''@;'; put 'put ''LmNvbSIsImVtcnN0dWRpby1wcm9kLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLWVhc3QtMS5hbWF6b25h''@;'; put 'put ''d3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFw''@;'; put 'put ''LW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsImVtcm5vdGVib29rcy1wcm9kLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1zb3V0''@;'; put 'put ''aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFw''@;'; put 'put ''LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwi''@;'; put 'put ''ZW1yYXBwdWktcHJvZC5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLXNvdXRoZWFz''@;'; put 'put ''dC0zLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuYXAtc291dGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsImVtcm5v''@;'; put 'put ''dGVib29rcy1wcm9kLmFwLXNvdXRoZWFzdC00LmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmNhLWNlbnRyYWwtMS5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5jYS13ZXN0''@;'; put 'put ''LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJv''@;'; put 'put ''ZC5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsImVt''@;'; put 'put ''cm5vdGVib29rcy1wcm9kLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuZXUtc291dGgtMS5hbWF6b25hd3Mu''@;'; put 'put ''Y29tIiwiZW1yc3R1ZGlvLXByb2QuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5ldS1zb3V0aC0yLmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuZXUtd2VzdC0yLmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmV1LXdlc3QtMy5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5pbC1j''@;'; put 'put ''ZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QubWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBw''@;'; put 'put ''dWktcHJvZC5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1y''@;'; put 'put ''bm90ZWJvb2tzLXByb2Quc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''ImVtcnN0dWRpby1wcm9kLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20i''@;'; put 'put ''LCJlbXJhcHB1aS1wcm9kLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QudXMtZ292LXdlc3Qt''@;'; put 'put ''MS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1w''@;'; put 'put ''cm9kLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8t''@;'; put 'put ''cHJvZC51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsIiouY24tbm9ydGgtMS5haXJmbG93LmFtYXpvbmF3cy5jb20uY24iLCIqLmNuLW5vcnRod2VzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbS5jbiIsIiouYWYtc291dGgtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLWVhc3QtMS5h''@;'; put 'put ''aXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLW5vcnRoZWFzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouYXAtbm9ydGhlYXN0LTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5hcC1ub3J0aGVhc3QtMy5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLXNvdXRoLTEuYWlyZmxv''@;'; put 'put ''dy5hbWF6b25hd3MuY29tIiwiKi5hcC1zb3V0aC0yLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouYXAtc291dGhlYXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5hcC1zb3V0aGVhc3QtMi5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLXNvdXRoZWFzdC0zLmFpcmZsb3cuYW1h''@;'; put 'put ''em9uYXdzLmNvbSIsIiouYXAtc291dGhlYXN0LTQuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5jYS1jZW50cmFsLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5jYS13ZXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS1jZW50cmFsLTEuYWlyZmxvdy5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwiKi5ldS1jZW50cmFsLTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS1ub3J0aC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouZXUtc291dGgtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmV1LXNvdXRoLTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS13ZXN0LTEu''@;'; put 'put ''YWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS13ZXN0LTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS13ZXN0LTMuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5pbC1jZW50cmFsLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5tZS1jZW50cmFsLTEuYWlyZmxvdy5hbWF6b25h''@;'; put 'put ''d3MuY29tIiwiKi5tZS1zb3V0aC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouc2EtZWFzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIioudXMtZWFzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIioudXMtZWFzdC0yLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIioudXMtd2VzdC0x''@;'; put 'put ''LmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIioudXMtd2VzdC0yLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtd2Vi''@;'; put 'put ''c2l0ZS5kdWFsc3RhY2suY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtYWNjZXNzcG9pbnQuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtZGVwcmVjYXRlZC5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24i''@;'; put 'put ''LCJzMy1vYmplY3QtbGFtYmRhLmNuLW5vcnRoLTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLXdlYnNpdGUuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMuZHVhbHN0YWNrLmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suY24t''@;'; put 'put ''bm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1hY2Nlc3Nwb2ludC5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtb2JqZWN0LWxhbWJkYS5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNu''@;'; put 'put ''IiwiczMtd2Vic2l0ZS5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiczMuZHVhbHN0YWNrLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hZi1z''@;'; put 'put ''b3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYWYtc291dGgtMS5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1lYXN0LTEuYW1hem9uYXdz''@;'; put 'put ''LmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtbm9ydGhl''@;'; put 'put ''YXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1s''@;'; put 'put ''YW1iZGEuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0yLmFt''@;'; put 'put ''YXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFw''@;'; put 'put ''LW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3Mu''@;'; put 'put ''Y29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hcC1ub3J0aGVh''@;'; put 'put ''c3QtMy5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRl''@;'; put 'put ''LmR1YWxzdGFjay5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUu''@;'; put 'put ''YXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20i''@;'; put 'put ''LCJzMy5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0''@;'; put 'put ''YWNrLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1zb3V0aGVhc3QtMS5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1z''@;'; put 'put ''b3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsInMzLWFjY2Vzc3BvaW50LmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtc291dGhlYXN0''@;'; put 'put ''LTMuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYXAtc291dGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1h''@;'; put 'put ''Y2Nlc3Nwb2ludC5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC00LmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC00LmFtYXpvbmF3cy5jb20iLCJzMy5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9p''@;'; put 'put ''bnQuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtNS5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtNS5hbWF6b25hd3MuY29tIiwiczMuYXAtc291dGhlYXN0LTUuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLXNv''@;'; put 'put ''dXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy1kZXByZWNhdGVkLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy5k''@;'; put 'put ''dWFsc3RhY2suY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmR1YWxzdGFjay5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0''@;'; put 'put ''YWNrLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNj''@;'; put 'put ''ZXNzcG9pbnQtZmlwcy5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''InMzLmR1YWxzdGFjay5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5kdWFsc3RhY2su''@;'; put 'put ''Y2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmNh''@;'; put 'put ''LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LWNlbnRyYWwtMS5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50''@;'; put 'put ''LmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nl''@;'; put 'put ''c3Nwb2ludC5kdWFsc3RhY2suZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsInMzLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtY2VudHJhbC0yLmFtYXpvbmF3''@;'; put 'put ''cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUtbm9y''@;'; put 'put ''dGgtMS5hbWF6b25hd3MuY29tIiwiczMuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LW5vcnRoLTEuYW1hem9u''@;'; put 'put ''YXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMuZXUtc291dGgtMS5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS1zb3V0aC0yLmFt''@;'; put 'put ''YXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMuZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtc291''@;'; put 'put ''dGgtMi5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFj''@;'; put 'put ''ay5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWRlcHJlY2F0ZWQuZXUtd2Vz''@;'; put 'put ''dC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5l''@;'; put 'put ''dS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS13ZXN0LTIuYW1hem9u''@;'; put 'put ''YXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMuZXUtd2VzdC0zLmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmlsLWNlbnRyYWwtMS5hbWF6b25h''@;'; put 'put ''d3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmlsLWNl''@;'; put 'put ''bnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2subWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2lu''@;'; put 'put ''dC5kdWFsc3RhY2subWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQubWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20i''@;'; put 'put ''LCJzMy1vYmplY3QtbGFtYmRhLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2subWUtc291dGgtMS5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwiczMubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLm1lLXNvdXRoLTEuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsInMzLmFtYXpvbmF3cy5jb20iLCJzMy0xLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYXAtbm9ydGhlYXN0LTMuYW1hem9u''@;'; put 'put ''YXdzLmNvbSIsInMzLWFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1ldS1jZW50cmFsLTEuYW1hem9uYXdz''@;'; put 'put ''LmNvbSIsInMzLWV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWV4dGVybmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMtdXMt''@;'; put 'put ''Z292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy11cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJtcmFwLmFjY2Vzc3BvaW50LnMzLWdsb2JhbC5hbWF6b25hd3MuY29tIiwiczMtbWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20i''@;'; put 'put ''LCJzMy11cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtdXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRl''@;'; put 'put ''LWFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLWFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLWFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS1z''@;'; put 'put ''YS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtdXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLXVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtdXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLXVzLXdlc3QtMi5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5zYS1lYXN0LTEuYW1h''@;'; put 'put ''em9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2sudXMtZWFzdC0xLmFtYXpvbmF3''@;'; put 'put ''cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2sudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmR1YWxzdGFjay51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNrLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vi''@;'; put 'put ''c2l0ZS5kdWFsc3RhY2sudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWRlcHJl''@;'; put 'put ''Y2F0ZWQudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2sudXMtZWFz''@;'; put 'put ''dC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2sudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmR1YWxzdGFjay51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNrLnVzLWVhc3QtMi5hbWF6b25hd3Mu''@;'; put 'put ''Y29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2sudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy51cy1lYXN0LTIuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsInMzLWRlcHJlY2F0ZWQudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFs''@;'; put 'put ''c3RhY2sudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0''@;'; put 'put ''YWNrLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMt''@;'; put 'put ''Zmlwcy51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''InMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmR1YWxzdGFjay51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLmR1YWxzdGFjay51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJz''@;'; put 'put ''My51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwi''@;'; put 'put ''czMtb2JqZWN0LWxhbWJkYS51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay51cy13ZXN0LTEuYW1h''@;'; put 'put ''em9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5kdWFsc3RhY2sudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLnVz''@;'; put 'put ''LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEudXMt''@;'; put 'put ''d2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQt''@;'; put 'put ''Zmlwcy5kdWFsc3RhY2sudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLmR1YWxzdGFjay51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1h''@;'; put 'put ''Y2Nlc3Nwb2ludC51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1kZXByZWNhdGVkLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtZmlwcy51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLW9iamVj''@;'; put 'put ''dC1sYW1iZGEudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwibGFiZWxpbmcuYXAtbm9ydGhlYXN0LTEuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLmFwLW5vcnRoZWFzdC0yLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy5hcC1z''@;'; put 'put ''b3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy5hcC1zb3V0aGVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcuYXAtc291dGhlYXN0LTIuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLmNhLWNlbnRyYWwtMS5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcuZXUtY2VudHJhbC0xLnNh''@;'; put 'put ''Z2VtYWtlci5hd3MiLCJsYWJlbGluZy5ldS13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLmV1LXdlc3QtMi5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcudXMtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy51cy1lYXN0LTIuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLnVz''@;'; put 'put ''LXdlc3QtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYWYtc291dGgtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYXAtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1ub3J0aGVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYXAtbm9ydGhlYXN0LTIuc2FnZW1h''@;'; put 'put ''a2VyLmF3cyIsIm5vdGVib29rLmFwLW5vcnRoZWFzdC0zLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1zb3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1zb3V0aC0yLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1zb3V0aGVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90''@;'; put 'put ''ZWJvb2suYXAtc291dGhlYXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLXNvdXRoZWFzdC0zLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1zb3V0aGVhc3QtNC5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suY2EtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay1m''@;'; put 'put ''aXBzLmNhLWNlbnRyYWwtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suY2Etd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay1maXBzLmNhLXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suZXUtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5ldS1jZW50cmFs''@;'; put 'put ''LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LW5vcnRoLTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LXNvdXRoLTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90''@;'; put 'put ''ZWJvb2suZXUtd2VzdC0yLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5ldS13ZXN0LTMuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmlsLWNlbnRyYWwtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2subWUtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5tZS1zb3V0aC0xLnNh''@;'; put 'put ''Z2VtYWtlci5hd3MiLCJub3RlYm9vay5zYS1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLnVzLWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2stZmlwcy51cy1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLnVzLWVhc3QtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJv''@;'; put 'put ''b2stZmlwcy51cy1lYXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLnVzLWdvdi1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLWZpcHMudXMtZ292LWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2sudXMtZ292LXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2st''@;'; put 'put ''Zmlwcy51cy1nb3Ytd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay51cy13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLWZpcHMudXMtd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay51cy13ZXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLWZpcHMudXMtd2Vz''@;'; put 'put ''dC0yLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5jbi1ub3J0aC0xLnNhZ2VtYWtlci5jb20uY24iLCJub3RlYm9vay5jbi1ub3J0aHdlc3QtMS5zYWdlbWFrZXIuY29tLmNuIiwic3R1ZGlvLmFmLXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1lYXN0LTEuc2FnZW1ha2VyLmF3''@;'; put 'put ''cyIsInN0dWRpby5hcC1ub3J0aGVhc3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmFwLW5vcnRoZWFzdC0yLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uYXAtbm9ydGhlYXN0LTMuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1zb3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uYXAtc291''@;'; put 'put ''dGhlYXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1zb3V0aGVhc3QtMi5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmFwLXNvdXRoZWFzdC0zLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uY2EtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtY2VudHJhbC0xLnNhZ2VtYWtl''@;'; put 'put ''ci5hd3MiLCJzdHVkaW8uZXUtbm9ydGgtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmV1LXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5ldS1zb3V0aC0yLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtd2VzdC0yLnNhZ2Vt''@;'; put 'put ''YWtlci5hd3MiLCJzdHVkaW8uZXUtd2VzdC0zLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uaWwtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8ubWUtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8ubWUtc291dGgtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLnNhLWVhc3Qt''@;'; put 'put ''MS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLnVzLWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLnVzLWVhc3QtMi5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLnVzLWdvdi1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby1maXBzLnVzLWdvdi1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0''@;'; put 'put ''dWRpby51cy1nb3Ytd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8tZmlwcy51cy1nb3Ytd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8udXMtd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8udXMtd2VzdC0yLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uY24tbm9ydGgtMS5zYWdl''@;'; put 'put ''bWFrZXIuY29tLmNuIiwic3R1ZGlvLmNuLW5vcnRod2VzdC0xLnNhZ2VtYWtlci5jb20uY24iLCIqLmV4cGVyaW1lbnRzLnNhZ2VtYWtlci5hd3MiLCJhbmFseXRpY3MtZ2F0ZXdheS5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXkuYXAtbm9ydGhlYXN0''@;'; put 'put ''LTIuYW1hem9uYXdzLmNvbSIsImFuYWx5dGljcy1nYXRld2F5LmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImFuYWx5dGljcy1nYXRld2F5LmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJhbmFseXRpY3MtZ2F0ZXdheS5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiYW5h''@;'; put 'put ''bHl0aWNzLWdhdGV3YXkuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJhbmFseXRpY3MtZ2F0ZXdheS5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImFuYWx5dGljcy1nYXRld2F5LnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXkudXMtZWFzdC0yLmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCJhbmFseXRpY3MtZ2F0ZXdheS51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImFtcGxpZnlhcHAuY29tIiwiKi5hd3NhcHBydW5uZXIuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFmLXNvdXRo''@;'; put 'put ''LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXct''@;'; put 'put ''YXNzZXRzLmNsb3VkOS5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5hcC1u''@;'; put 'put ''b3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmFwLW5vcnRoZWFzdC0yLmFt''@;'; put 'put ''YXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''IndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3Vk''@;'; put 'put ''OS5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmFwLXNvdXRoZWFz''@;'; put 'put ''dC0yLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5j''@;'; put 'put ''b20iLCJ2ZnMuY2xvdWQ5LmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuZXUt''@;'; put 'put ''Y2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29t''@;'; put 'put ''Iiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDku''@;'; put 'put ''ZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJ3''@;'; put 'put ''ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuZXUt''@;'; put 'put ''d2VzdC0zLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInZm''@;'; put 'put ''cy5jbG91ZDkuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5Lm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5Lm1lLXNvdXRoLTEuYW1h''@;'; put 'put ''em9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMu''@;'; put 'put ''YXdzLWNsb3VkOS51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LnVzLWVhc3QtMi5hbWF6b25h''@;'; put 'put ''d3MuY29tIiwidmZzLmNsb3VkOS51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LnVzLXdlc3Qt''@;'; put 'put ''MS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFz''@;'; put 'put ''c2V0cy5jbG91ZDkudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJhd3NhcHBzLmNvbSIsImNuLW5vcnRoLTEuZWIuYW1hem9uYXdzLmNvbS5jbiIsImNuLW5vcnRod2VzdC0xLmViLmFtYXpvbmF3cy5jb20uY24iLCJlbGFzdGljYmVhbnN0YWxrLmNvbSIsImFmLXNvdXRoLTEuZWxhc3RpY2Jl''@;'; put 'put ''YW5zdGFsay5jb20iLCJhcC1lYXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1ub3J0aGVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLW5vcnRoZWFzdC0yLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtbm9ydGhlYXN0LTMuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1z''@;'; put 'put ''b3V0aC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtc291dGhlYXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1zb3V0aGVhc3QtMi5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLXNvdXRoZWFzdC0zLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiY2EtY2VudHJhbC0xLmVsYXN0aWNi''@;'; put 'put ''ZWFuc3RhbGsuY29tIiwiZXUtY2VudHJhbC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiZXUtbm9ydGgtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImV1LXNvdXRoLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJldS13ZXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJldS13ZXN0LTIuZWxh''@;'; put 'put ''c3RpY2JlYW5zdGFsay5jb20iLCJldS13ZXN0LTMuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJpbC1jZW50cmFsLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJtZS1zb3V0aC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwic2EtZWFzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwidXMtZWFzdC0x''@;'; put 'put ''LmVsYXN0aWNiZWFuc3RhbGsuY29tIiwidXMtZWFzdC0yLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwidXMtZ292LWVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInVzLWdvdi13ZXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy13ZXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1''@;'; put 'put ''cy13ZXN0LTIuZWxhc3RpY2JlYW5zdGFsay5jb20iLCIqLmVsYi5hbWF6b25hd3MuY29tLmNuIiwiKi5lbGIuYW1hem9uYXdzLmNvbSIsImF3c2dsb2JhbGFjY2VsZXJhdG9yLmNvbSIsIioucHJpdmF0ZS5yZXBvc3QuYXdzIiwiZWVyby5vbmxpbmUiLCJlZXJvLXN0YWdlLm9ubGluZSIsImFw''@;'; put 'put ''aWdlZS5pbyIsInBhbmVsLmRldiIsInNpaWl0ZXMuY29tIiwiYXBwc3BhY2Vob3N0ZWQuY29tIiwiYXBwc3BhY2V1c2VyY29udGVudC5jb20iLCJhcHB1ZG8ubmV0Iiwib24tYXB0aWJsZS5jb20iLCJmNS5zaSIsImFydmFuZWRnZS5pciIsInVzZXIuYXNlaW5ldC5uZS5qcCIsImd2LnZjIiwi''@;'; put 'put ''ZC5ndi52YyIsInVzZXIucGFydHkuZXVzIiwicGltaWVudGEub3JnIiwicG9pdnJvbi5vcmciLCJwb3RhZ2VyLm9yZyIsInN3ZWV0cGVwcGVyLm9yZyIsIm15YXN1c3Rvci5jb20iLCJjZG4ucHJvZC5hdGxhc3NpYW4tZGV2Lm5ldCIsInRyYW5zbGF0ZWQucGFnZSIsIm15ZnJpdHoubGluayIs''@;'; put 'put ''Im15ZnJpdHoubmV0Iiwib25hdnN0YWNrLm5ldCIsIiouYXdkZXYuY2EiLCIqLmFkdmlzb3Iud3MiLCJlY29tbWVyY2Utc2hvcC5wbCIsImItZGF0YS5pbyIsImJhbGVuYS1kZXZpY2VzLmNvbSIsImJhc2UuZWMiLCJvZmZpY2lhbC5lYyIsImJ1eXNob3AuanAiLCJmYXNoaW9uc3RvcmUuanAi''@;'; put 'put ''LCJoYW5kY3JhZnRlZC5qcCIsImthd2FpaXNob3AuanAiLCJzdXBlcnNhbGUuanAiLCJ0aGVzaG9wLmpwIiwic2hvcHNlbGVjdC5uZXQiLCJiYXNlLnNob3AiLCJiZWFnbGVib2FyZC5pbyIsIiouYmVnZXQuYXBwIiwicGFnZXMuZ2F5IiwiYm5yLmxhIiwiYml0YnVja2V0LmlvIiwiYmxhY2ti''@;'; put 'put ''YXVkY2RuLm5ldCIsIm9mLmplIiwiYmx1ZWJpdGUuaW8iLCJib29tbGEubmV0IiwiYm91dGlyLmNvbSIsImJveGZ1c2UuaW8iLCJzcXVhcmU3LmNoIiwiYnBsYWNlZC5jb20iLCJicGxhY2VkLmRlIiwic3F1YXJlNy5kZSIsImJwbGFjZWQubmV0Iiwic3F1YXJlNy5uZXQiLCIqLnMuYnJhdmUu''@;'; put 'put ''aW8iLCJzaG9wLmJyZW5kbHkuaHIiLCJzaG9wLmJyZW5kbHkucnMiLCJicm93c2Vyc2FmZXR5bWFyay5pbyIsInJhZGlvLmFtIiwicmFkaW8uZm0iLCJ1azAuYmlndi5pbyIsImRoLmJ5dGVtYXJrLmNvLnVrIiwidm0uYnl0ZW1hcmsuY28udWsiLCJjYWZqcy5jb20iLCJjYW52YS1hcHBzLmNu''@;'; put 'put ''IiwiKi5teS5jYW52YXNpdGUuY24iLCJjYW52YS1hcHBzLmNvbSIsIioubXkuY2FudmEuc2l0ZSIsImRyci5hYyIsInV3dS5haSIsImNhcnJkLmNvIiwiY3JkLmNvIiwianUubXAiLCJhcGkuZ292LnVrIiwiY2RuNzctc3RvcmFnZS5jb20iLCJyc2MuY29udGVudHByb3h5OS5jeiIsInIuY2Ru''@;'; put 'put ''NzcubmV0IiwiY2RuNzctc3NsLm5ldCIsImMuY2RuNzcub3JnIiwicnNjLmNkbjc3Lm9yZyIsInNzbC5vcmlnaW4uY2RuNzctc2VjdXJlLm9yZyIsInphLmJ6IiwiYnIuY29tIiwiY24uY29tIiwiZGUuY29tIiwiZXUuY29tIiwianBuLmNvbSIsIm1leC5jb20iLCJydS5jb20iLCJzYS5jb20i''@;'; put 'put ''LCJ1ay5jb20iLCJ1cy5jb20iLCJ6YS5jb20iLCJjb20uZGUiLCJnYi5uZXQiLCJodS5uZXQiLCJqcC5uZXQiLCJzZS5uZXQiLCJ1ay5uZXQiLCJhZS5vcmciLCJjb20uc2UiLCJjeC51YSIsImRpc2NvdXJzZS5ncm91cCIsImRpc2NvdXJzZS50ZWFtIiwiY2xlcmsuYXBwIiwiY2xlcmtzdGFn''@;'; put 'put ''ZS5hcHAiLCIqLmxjbC5kZXYiLCIqLmxjbHN0YWdlLmRldiIsIiouc3RnLmRldiIsIiouc3Rnc3RhZ2UuZGV2IiwiY2xldmVyYXBwcy5jYyIsIiouc2VydmljZXMuY2xldmVyLWNsb3VkLmNvbSIsImNsZXZlcmFwcHMuaW8iLCJjbGV2ZXJhcHBzLnRlY2giLCJjbGlja3Jpc2luZy5uZXQiLCJj''@;'; put 'put ''bG91ZG5zLmFzaWEiLCJjbG91ZG5zLmJlIiwiY2xvdWQtaXAuYml6IiwiY2xvdWRucy5iaXoiLCJjbG91ZG5zLmNjIiwiY2xvdWRucy5jaCIsImNsb3VkbnMuY2wiLCJjbG91ZG5zLmNsdWIiLCJkbnNhYnIuY29tIiwiaXAtZGRucy5jb20iLCJjbG91ZG5zLmN4IiwiY2xvdWRucy5ldSIsImNs''@;'; put 'put ''b3VkbnMuaW4iLCJjbG91ZG5zLmluZm8iLCJkZG5zLWlwLm5ldCIsImRucy1jbG91ZC5uZXQiLCJkbnMtZHluYW1pYy5uZXQiLCJjbG91ZG5zLm56IiwiY2xvdWRucy5vcmciLCJpcC1keW5hbWljLm9yZyIsImNsb3VkbnMucGgiLCJjbG91ZG5zLnBybyIsImNsb3VkbnMucHciLCJjbG91ZG5z''@;'; put 'put ''LnVzIiwiYzY2Lm1lIiwiY2xvdWQ2Ni53cyIsImNsb3VkNjYuem9uZSIsImpkZXZjbG91ZC5jb20iLCJ3cGRldmNsb3VkLmNvbSIsImNsb3VkYWNjZXNzLmhvc3QiLCJmcmVlc2l0ZS5ob3N0IiwiY2xvdWRhY2Nlc3MubmV0IiwiKi5jbG91ZGVyYS5zaXRlIiwiY2YtaXBmcy5jb20iLCJjbG91''@;'; put 'put ''ZGZsYXJlLWlwZnMuY29tIiwidHJ5Y2xvdWRmbGFyZS5jb20iLCJwYWdlcy5kZXYiLCJyMi5kZXYiLCJ3b3JrZXJzLmRldiIsImNsb3VkZmxhcmUubmV0IiwiY2RuLmNsb3VkZmxhcmUubmV0IiwiY2RuLmNsb3VkZmxhcmVhbnljYXN0Lm5ldCIsImNkbi5jbG91ZGZsYXJlY24ubmV0IiwiY2Ru''@;'; put 'put ''LmNsb3VkZmxhcmVnbG9iYWwubmV0IiwiY3VzdC5jbG91ZHNjYWxlLmNoIiwib2JqZWN0cy5scGcuY2xvdWRzY2FsZS5jaCIsIm9iamVjdHMucm1hLmNsb3Vkc2NhbGUuY2giLCJ3bmV4dC5hcHAiLCJjbnB5LmdkbiIsIioub3RhcC5jbyIsImNvLmNhIiwiY28uY29tIiwiY29kZWJlcmcucGFn''@;'; put 'put ''ZSIsImNzYi5hcHAiLCJwcmV2aWV3LmNzYi5hcHAiLCJjby5ubCIsImNvLm5vIiwid2ViaG9zdGluZy5iZSIsImhvc3RpbmctY2x1c3Rlci5ubCIsImN0ZmNsb3VkLm5ldCIsImNvbnZleC5zaXRlIiwiYWMucnUiLCJlZHUucnUiLCJnb3YucnUiLCJpbnQucnUiLCJtaWwucnUiLCJ0ZXN0LnJ1''@;'; put 'put ''IiwiZHluLmNvc2lkbnMuZGUiLCJkbnN1cGRhdGVyLmRlIiwiZHluYW1pc2NoZXMtZG5zLmRlIiwiaW50ZXJuZXQtZG5zLmRlIiwibC1vLWctaS1uLmRlIiwiZHluYW1pYy1kbnMuaW5mbyIsImZlc3RlLWlwLm5ldCIsImtueC1zZXJ2ZXIubmV0Iiwic3RhdGljLWFjY2Vzcy5uZXQiLCJjcmFm''@;'; put 'put ''dC5tZSIsInJlYWxtLmN6Iiwib24uY3Jpc3AuZW1haWwiLCIqLmNyeXB0b25vbWljLm5ldCIsImN1cnYuZGV2IiwiY2ZvbGtzLnBsIiwiY3lvbi5saW5rIiwiY3lvbi5zaXRlIiwicGxhdGZvcm0wLmFwcCIsImZud2suc2l0ZSIsImZvbGlvbmV0d29yay5zaXRlIiwiYml6LmRrIiwiY28uZGsi''@;'; put 'put ''LCJmaXJtLmRrIiwicmVnLmRrIiwic3RvcmUuZGsiLCJkeW5kbnMuZGFwcG5vZGUuaW8iLCJidWlsdHdpdGhkYXJrLmNvbSIsImRhcmtsYW5nLmlvIiwiZGVtby5kYXRhZGV0ZWN0LmNvbSIsImluc3RhbmNlLmRhdGFkZXRlY3QuY29tIiwiZWRnZXN0YWNrLm1lIiwiZGF0dG9sb2NhbC5jb20i''@;'; put 'put ''LCJkYXR0b3JlbGF5LmNvbSIsImRhdHRvd2ViLmNvbSIsIm15ZGF0dG8uY29tIiwiZGF0dG9sb2NhbC5uZXQiLCJteWRhdHRvLm5ldCIsImRkbnNzLmRlIiwiZHluLmRkbnNzLmRlIiwiZHluZG5zLmRkbnNzLmRlIiwiZHluLWlwMjQuZGUiLCJkeW5kbnMxLmRlIiwiaG9tZS13ZWJzZXJ2ZXIu''@;'; put 'put ''ZGUiLCJkeW4uaG9tZS13ZWJzZXJ2ZXIuZGUiLCJteWhvbWUtc2VydmVyLmRlIiwiZGRuc3Mub3JnIiwiZGViaWFuLm5ldCIsImRlZmluaW1hLmlvIiwiZGVmaW5pbWEubmV0IiwiZGVuby5kZXYiLCJkZW5vLXN0YWdpbmcuZGV2IiwiZGVkeW4uaW8iLCJkZXRhLmFwcCIsImRldGEuZGV2Iiwi''@;'; put 'put ''ZGZpcm1hLnBsIiwiZGtvbnRvLnBsIiwieW91Mi5wbCIsIm9uZGlnaXRhbG9jZWFuLmFwcCIsIiouZGlnaXRhbG9jZWFuc3BhY2VzLmNvbSIsInVzLmtnIiwicnNzLm15LmlkIiwiZGloZXIuc29sdXRpb25zIiwiZGlzY29yZHNheXMuY29tIiwiZGlzY29yZHNlei5jb20iLCJqb3ppLmJpeiIs''@;'; put 'put ''ImRuc2hvbWUuZGUiLCJvbmxpbmUudGgiLCJzaG9wLnRoIiwiZHJheWRkbnMuY29tIiwic2hvcGFyZW5hLnBsIiwiZHJlYW1ob3N0ZXJzLmNvbSIsImR1cnVtaXMuY29tIiwibXlkcm9iby5jb20iLCJkcnVkLmlvIiwiZHJ1ZC51cyIsImR1Y2tkbnMub3JnIiwiZHkuZmkiLCJ0dW5rLm9yZyIs''@;'; put 'put ''ImR5bmRucy5iaXoiLCJmb3ItYmV0dGVyLmJpeiIsImZvci1tb3JlLmJpeiIsImZvci1zb21lLmJpeiIsImZvci10aGUuYml6Iiwic2VsZmlwLmJpeiIsIndlYmhvcC5iaXoiLCJmdHBhY2Nlc3MuY2MiLCJnYW1lLXNlcnZlci5jYyIsIm15cGhvdG9zLmNjIiwic2NyYXBwaW5nLmNjIiwiYmxv''@;'; put 'put ''Z2Rucy5jb20iLCJjZWNoaXJlLmNvbSIsImRuc2FsaWFzLmNvbSIsImRuc2Rvam8uY29tIiwiZG9lc250ZXhpc3QuY29tIiwiZG9udGV4aXN0LmNvbSIsImRvb21kbnMuY29tIiwiZHluLW8tc2F1ci5jb20iLCJkeW5hbGlhcy5jb20iLCJkeW5kbnMtYXQtaG9tZS5jb20iLCJkeW5kbnMtYXQt''@;'; put 'put ''d29yay5jb20iLCJkeW5kbnMtYmxvZy5jb20iLCJkeW5kbnMtZnJlZS5jb20iLCJkeW5kbnMtaG9tZS5jb20iLCJkeW5kbnMtaXAuY29tIiwiZHluZG5zLW1haWwuY29tIiwiZHluZG5zLW9mZmljZS5jb20iLCJkeW5kbnMtcGljcy5jb20iLCJkeW5kbnMtcmVtb3RlLmNvbSIsImR5bmRucy1z''@;'; put 'put ''ZXJ2ZXIuY29tIiwiZHluZG5zLXdlYi5jb20iLCJkeW5kbnMtd2lraS5jb20iLCJkeW5kbnMtd29yay5jb20iLCJlc3QtYS1sYS1tYWlzb24uY29tIiwiZXN0LWEtbGEtbWFzaW9uLmNvbSIsImVzdC1sZS1wYXRyb24uY29tIiwiZXN0LW1vbi1ibG9ndWV1ci5jb20iLCJmcm9tLWFrLmNvbSIs''@;'; put 'put ''ImZyb20tYWwuY29tIiwiZnJvbS1hci5jb20iLCJmcm9tLWNhLmNvbSIsImZyb20tY3QuY29tIiwiZnJvbS1kYy5jb20iLCJmcm9tLWRlLmNvbSIsImZyb20tZmwuY29tIiwiZnJvbS1nYS5jb20iLCJmcm9tLWhpLmNvbSIsImZyb20taWEuY29tIiwiZnJvbS1pZC5jb20iLCJmcm9tLWlsLmNv''@;'; put 'put ''bSIsImZyb20taW4uY29tIiwiZnJvbS1rcy5jb20iLCJmcm9tLWt5LmNvbSIsImZyb20tbWEuY29tIiwiZnJvbS1tZC5jb20iLCJmcm9tLW1pLmNvbSIsImZyb20tbW4uY29tIiwiZnJvbS1tby5jb20iLCJmcm9tLW1zLmNvbSIsImZyb20tbXQuY29tIiwiZnJvbS1uYy5jb20iLCJmcm9tLW5k''@;'; put 'put ''LmNvbSIsImZyb20tbmUuY29tIiwiZnJvbS1uaC5jb20iLCJmcm9tLW5qLmNvbSIsImZyb20tbm0uY29tIiwiZnJvbS1udi5jb20iLCJmcm9tLW9oLmNvbSIsImZyb20tb2suY29tIiwiZnJvbS1vci5jb20iLCJmcm9tLXBhLmNvbSIsImZyb20tcHIuY29tIiwiZnJvbS1yaS5jb20iLCJmcm9t''@;'; put 'put ''LXNjLmNvbSIsImZyb20tc2QuY29tIiwiZnJvbS10bi5jb20iLCJmcm9tLXR4LmNvbSIsImZyb20tdXQuY29tIiwiZnJvbS12YS5jb20iLCJmcm9tLXZ0LmNvbSIsImZyb20td2EuY29tIiwiZnJvbS13aS5jb20iLCJmcm9tLXd2LmNvbSIsImZyb20td3kuY29tIiwiZ2V0bXlpcC5jb20iLCJn''@;'; put 'put ''b3RkbnMuY29tIiwiaG9iYnktc2l0ZS5jb20iLCJob21lbGludXguY29tIiwiaG9tZXVuaXguY29tIiwiaWFtYWxsYW1hLmNvbSIsImlzLWEtYW5hcmNoaXN0LmNvbSIsImlzLWEtYmxvZ2dlci5jb20iLCJpcy1hLWJvb2trZWVwZXIuY29tIiwiaXMtYS1idWxscy1mYW4uY29tIiwiaXMtYS1j''@;'; put 'put ''YXRlcmVyLmNvbSIsImlzLWEtY2hlZi5jb20iLCJpcy1hLWNvbnNlcnZhdGl2ZS5jb20iLCJpcy1hLWNwYS5jb20iLCJpcy1hLWN1YmljbGUtc2xhdmUuY29tIiwiaXMtYS1kZW1vY3JhdC5jb20iLCJpcy1hLWRlc2lnbmVyLmNvbSIsImlzLWEtZG9jdG9yLmNvbSIsImlzLWEtZmluYW5jaWFs''@;'; put 'put ''YWR2aXNvci5jb20iLCJpcy1hLWdlZWsuY29tIiwiaXMtYS1ncmVlbi5jb20iLCJpcy1hLWd1cnUuY29tIiwiaXMtYS1oYXJkLXdvcmtlci5jb20iLCJpcy1hLWh1bnRlci5jb20iLCJpcy1hLWxhbmRzY2FwZXIuY29tIiwiaXMtYS1sYXd5ZXIuY29tIiwiaXMtYS1saWJlcmFsLmNvbSIsImlz''@;'; put 'put ''LWEtbGliZXJ0YXJpYW4uY29tIiwiaXMtYS1sbGFtYS5jb20iLCJpcy1hLW11c2ljaWFuLmNvbSIsImlzLWEtbmFzY2FyZmFuLmNvbSIsImlzLWEtbnVyc2UuY29tIiwiaXMtYS1wYWludGVyLmNvbSIsImlzLWEtcGVyc29uYWx0cmFpbmVyLmNvbSIsImlzLWEtcGhvdG9ncmFwaGVyLmNvbSIs''@;'; put 'put ''ImlzLWEtcGxheWVyLmNvbSIsImlzLWEtcmVwdWJsaWNhbi5jb20iLCJpcy1hLXJvY2tzdGFyLmNvbSIsImlzLWEtc29jaWFsaXN0LmNvbSIsImlzLWEtc3R1ZGVudC5jb20iLCJpcy1hLXRlYWNoZXIuY29tIiwiaXMtYS10ZWNoaWUuY29tIiwiaXMtYS10aGVyYXBpc3QuY29tIiwiaXMtYW4t''@;'; put 'put ''YWNjb3VudGFudC5jb20iLCJpcy1hbi1hY3Rvci5jb20iLCJpcy1hbi1hY3RyZXNzLmNvbSIsImlzLWFuLWFuYXJjaGlzdC5jb20iLCJpcy1hbi1hcnRpc3QuY29tIiwiaXMtYW4tZW5naW5lZXIuY29tIiwiaXMtYW4tZW50ZXJ0YWluZXIuY29tIiwiaXMtY2VydGlmaWVkLmNvbSIsImlzLWdv''@;'; put 'put ''bmUuY29tIiwiaXMtaW50by1hbmltZS5jb20iLCJpcy1pbnRvLWNhcnMuY29tIiwiaXMtaW50by1jYXJ0b29ucy5jb20iLCJpcy1pbnRvLWdhbWVzLmNvbSIsImlzLWxlZXQuY29tIiwiaXMtbm90LWNlcnRpZmllZC5jb20iLCJpcy1zbGljay5jb20iLCJpcy11YmVybGVldC5jb20iLCJpcy13''@;'; put 'put ''aXRoLXRoZWJhbmQuY29tIiwiaXNhLWdlZWsuY29tIiwiaXNhLWhvY2tleW51dC5jb20iLCJpc3NtYXJ0ZXJ0aGFueW91LmNvbSIsImxpa2VzLXBpZS5jb20iLCJsaWtlc2NhbmR5LmNvbSIsIm5lYXQtdXJsLmNvbSIsInNhdmVzLXRoZS13aGFsZXMuY29tIiwic2VsZmlwLmNvbSIsInNlbGxz''@;'; put 'put ''LWZvci1sZXNzLmNvbSIsInNlbGxzLWZvci11LmNvbSIsInNlcnZlYmJzLmNvbSIsInNpbXBsZS11cmwuY29tIiwic3BhY2UtdG8tcmVudC5jb20iLCJ0ZWFjaGVzLXlvZ2EuY29tIiwid3JpdGVzdGhpc2Jsb2cuY29tIiwiYXRoLmN4IiwiZnVldHRlcnRkYXNuZXR6LmRlIiwiaXN0ZWluZ2Vl''@;'; put 'put ''ay5kZSIsImlzdG1laW4uZGUiLCJsZWJ0aW1uZXR6LmRlIiwibGVpdHVuZ3Nlbi5kZSIsInRyYWV1bXRnZXJhZGUuZGUiLCJiYXJyZWwtb2Yta25vd2xlZGdlLmluZm8iLCJiYXJyZWxsLW9mLWtub3dsZWRnZS5pbmZvIiwiZHluZG5zLmluZm8iLCJmb3Itb3VyLmluZm8iLCJncm9rcy10aGUu''@;'; put 'put ''aW5mbyIsImdyb2tzLXRoaXMuaW5mbyIsImhlcmUtZm9yLW1vcmUuaW5mbyIsImtub3dzaXRhbGwuaW5mbyIsInNlbGZpcC5pbmZvIiwid2ViaG9wLmluZm8iLCJmb3Jnb3QuaGVyLm5hbWUiLCJmb3Jnb3QuaGlzLm5hbWUiLCJhdC1iYW5kLWNhbXAubmV0IiwiYmxvZ2Rucy5uZXQiLCJicm9r''@;'; put 'put ''ZS1pdC5uZXQiLCJidXlzaG91c2VzLm5ldCIsImRuc2FsaWFzLm5ldCIsImRuc2Rvam8ubmV0IiwiZG9lcy1pdC5uZXQiLCJkb250ZXhpc3QubmV0IiwiZHluYWxpYXMubmV0IiwiZHluYXRob21lLm5ldCIsImVuZG9maW50ZXJuZXQubmV0IiwiZnJvbS1hei5uZXQiLCJmcm9tLWNvLm5ldCIs''@;'; put 'put ''ImZyb20tbGEubmV0IiwiZnJvbS1ueS5uZXQiLCJnZXRzLWl0Lm5ldCIsImhhbS1yYWRpby1vcC5uZXQiLCJob21lZnRwLm5ldCIsImhvbWVpcC5uZXQiLCJob21lbGludXgubmV0IiwiaG9tZXVuaXgubmV0IiwiaW4tdGhlLWJhbmQubmV0IiwiaXMtYS1jaGVmLm5ldCIsImlzLWEtZ2Vlay5u''@;'; put 'put ''ZXQiLCJpc2EtZ2Vlay5uZXQiLCJraWNrcy1hc3MubmV0Iiwib2ZmaWNlLW9uLXRoZS5uZXQiLCJwb2R6b25lLm5ldCIsInNjcmFwcGVyLXNpdGUubmV0Iiwic2VsZmlwLm5ldCIsInNlbGxzLWl0Lm5ldCIsInNlcnZlYmJzLm5ldCIsInNlcnZlZnRwLm5ldCIsInRocnVoZXJlLm5ldCIsIndl''@;'; put 'put ''YmhvcC5uZXQiLCJtZXJzZWluZS5udSIsIm1pbmUubnUiLCJzaGFja25ldC5udSIsImJsb2dkbnMub3JnIiwiYmxvZ3NpdGUub3JnIiwiYm9sZGx5Z29pbmdub3doZXJlLm9yZyIsImRuc2FsaWFzLm9yZyIsImRuc2Rvam8ub3JnIiwiZG9lc250ZXhpc3Qub3JnIiwiZG9udGV4aXN0Lm9yZyIs''@;'; put 'put ''ImRvb21kbnMub3JnIiwiZHZyZG5zLm9yZyIsImR5bmFsaWFzLm9yZyIsImR5bmRucy5vcmciLCJnby5keW5kbnMub3JnIiwiaG9tZS5keW5kbnMub3JnIiwiZW5kb2ZpbnRlcm5ldC5vcmciLCJlbmRvZnRoZWludGVybmV0Lm9yZyIsImZyb20tbWUub3JnIiwiZ2FtZS1ob3N0Lm9yZyIsImdv''@;'; put 'put ''dGRucy5vcmciLCJob2JieS1zaXRlLm9yZyIsImhvbWVkbnMub3JnIiwiaG9tZWZ0cC5vcmciLCJob21lbGludXgub3JnIiwiaG9tZXVuaXgub3JnIiwiaXMtYS1icnVpbnNmYW4ub3JnIiwiaXMtYS1jYW5kaWRhdGUub3JnIiwiaXMtYS1jZWx0aWNzZmFuLm9yZyIsImlzLWEtY2hlZi5vcmci''@;'; put 'put ''LCJpcy1hLWdlZWsub3JnIiwiaXMtYS1rbmlnaHQub3JnIiwiaXMtYS1saW51eC11c2VyLm9yZyIsImlzLWEtcGF0c2Zhbi5vcmciLCJpcy1hLXNveGZhbi5vcmciLCJpcy1mb3VuZC5vcmciLCJpcy1sb3N0Lm9yZyIsImlzLXNhdmVkLm9yZyIsImlzLXZlcnktYmFkLm9yZyIsImlzLXZlcnkt''@;'; put 'put ''ZXZpbC5vcmciLCJpcy12ZXJ5LWdvb2Qub3JnIiwiaXMtdmVyeS1uaWNlLm9yZyIsImlzLXZlcnktc3dlZXQub3JnIiwiaXNhLWdlZWsub3JnIiwia2lja3MtYXNzLm9yZyIsIm1pc2NvbmZ1c2VkLm9yZyIsInBvZHpvbmUub3JnIiwicmVhZG15YmxvZy5vcmciLCJzZWxmaXAub3JnIiwic2Vs''@;'; put 'put ''bHN5b3VyaG9tZS5vcmciLCJzZXJ2ZWJicy5vcmciLCJzZXJ2ZWZ0cC5vcmciLCJzZXJ2ZWdhbWUub3JnIiwic3R1ZmYtNC1zYWxlLm9yZyIsIndlYmhvcC5vcmciLCJiZXR0ZXItdGhhbi50diIsImR5bmRucy50diIsIm9uLXRoZS13ZWIudHYiLCJ3b3JzZS10aGFuLnR2IiwiaXMtYnkudXMi''@;'; put 'put ''LCJsYW5kLTQtc2FsZS51cyIsInN0dWZmLTQtc2FsZS51cyIsImR5bmRucy53cyIsIm15cGV0cy53cyIsImRkbnNmcmVlLmNvbSIsImRkbnNnZWVrLmNvbSIsImdpaXplLmNvbSIsImdsZWV6ZS5jb20iLCJrb3pvdy5jb20iLCJsb3NleW91cmlwLmNvbSIsIm9vZ3V5LmNvbSIsInRoZXdvcmtw''@;'; put 'put ''Yy5jb20iLCJjYXNhY2FtLm5ldCIsImR5bnUubmV0IiwiYWNjZXNzY2FtLm9yZyIsImNhbWR2ci5vcmciLCJmcmVlZGRucy5vcmciLCJteXdpcmUub3JnIiwid2VicmVkaXJlY3Qub3JnIiwibXlkZG5zLnJvY2tzIiwiZHludjYubmV0IiwiZTQuY3oiLCJlYXN5cGFuZWwuYXBwIiwiZWFzeXBh''@;'; put 'put ''bmVsLmhvc3QiLCIqLmV3cC5saXZlIiwidHdtYWlsLmNjIiwidHdtYWlsLm5ldCIsInR3bWFpbC5vcmciLCJteW1haWxlci5jb20udHciLCJ1cmwudHciLCJhdC5lbWYuY2FtcCIsInJ0Lmh0IiwiZWxlbWVudG9yLmNsb3VkIiwiZWxlbWVudG9yLmNvb2wiLCJlbi1yb290LmZyIiwibXl0dWxl''@;'; put 'put ''YXAuY29tIiwidHVsZWFwLXBhcnRuZXJzLmNvbSIsImVuY3IuYXBwIiwiZW5jb3JlYXBpLmNvbSIsImV1LmVuY293YXkuY2xvdWQiLCJldS5vcmciLCJhbC5ldS5vcmciLCJhc3NvLmV1Lm9yZyIsImF0LmV1Lm9yZyIsImF1LmV1Lm9yZyIsImJlLmV1Lm9yZyIsImJnLmV1Lm9yZyIsImNhLmV1''@;'; put 'put ''Lm9yZyIsImNkLmV1Lm9yZyIsImNoLmV1Lm9yZyIsImNuLmV1Lm9yZyIsImN5LmV1Lm9yZyIsImN6LmV1Lm9yZyIsImRlLmV1Lm9yZyIsImRrLmV1Lm9yZyIsImVkdS5ldS5vcmciLCJlZS5ldS5vcmciLCJlcy5ldS5vcmciLCJmaS5ldS5vcmciLCJmci5ldS5vcmciLCJnci5ldS5vcmciLCJo''@;'; put 'put ''ci5ldS5vcmciLCJodS5ldS5vcmciLCJpZS5ldS5vcmciLCJpbC5ldS5vcmciLCJpbi5ldS5vcmciLCJpbnQuZXUub3JnIiwiaXMuZXUub3JnIiwiaXQuZXUub3JnIiwianAuZXUub3JnIiwia3IuZXUub3JnIiwibHQuZXUub3JnIiwibHUuZXUub3JnIiwibHYuZXUub3JnIiwibWUuZXUub3Jn''@;'; put 'put ''IiwibWsuZXUub3JnIiwibXQuZXUub3JnIiwibXkuZXUub3JnIiwibmV0LmV1Lm9yZyIsIm5nLmV1Lm9yZyIsIm5sLmV1Lm9yZyIsIm5vLmV1Lm9yZyIsIm56LmV1Lm9yZyIsInBsLmV1Lm9yZyIsInB0LmV1Lm9yZyIsInJvLmV1Lm9yZyIsInJ1LmV1Lm9yZyIsInNlLmV1Lm9yZyIsInNpLmV1''@;'; put 'put ''Lm9yZyIsInNrLmV1Lm9yZyIsInRyLmV1Lm9yZyIsInVrLmV1Lm9yZyIsInVzLmV1Lm9yZyIsImV1cm9kaXIucnUiLCJldS0xLmV2ZW5ub2RlLmNvbSIsImV1LTIuZXZlbm5vZGUuY29tIiwiZXUtMy5ldmVubm9kZS5jb20iLCJldS00LmV2ZW5ub2RlLmNvbSIsInVzLTEuZXZlbm5vZGUuY29t''@;'; put 'put ''IiwidXMtMi5ldmVubm9kZS5jb20iLCJ1cy0zLmV2ZW5ub2RlLmNvbSIsInVzLTQuZXZlbm5vZGUuY29tIiwicmVsYXkuZXZlcnZhdWx0LmFwcCIsInJlbGF5LmV2ZXJ2YXVsdC5kZXYiLCJleHBvLmFwcCIsInN0YWdpbmcuZXhwby5hcHAiLCJvbmZhYnJpY2EuY29tIiwicnUubmV0IiwiYWR5''@;'; put 'put ''Z2V5YS5ydSIsImJhc2hraXJpYS5ydSIsImJpci5ydSIsImNiZy5ydSIsImNvbS5ydSIsImRhZ2VzdGFuLnJ1IiwiZ3Jvem55LnJ1Iiwia2FsbXlraWEucnUiLCJrdXN0YW5haS5ydSIsIm1hcmluZS5ydSIsIm1vcmRvdmlhLnJ1IiwibXNrLnJ1IiwibXl0aXMucnUiLCJuYWxjaGlrLnJ1Iiwi''@;'; put 'put ''bm92LnJ1IiwicHlhdGlnb3Jzay5ydSIsInNwYi5ydSIsInZsYWRpa2F2a2F6LnJ1IiwidmxhZGltaXIucnUiLCJhYmtoYXppYS5zdSIsImFkeWdleWEuc3UiLCJha3R5dWJpbnNrLnN1IiwiYXJraGFuZ2Vsc2suc3UiLCJhcm1lbmlhLnN1IiwiYXNoZ2FiYWQuc3UiLCJhemVyYmFpamFuLnN1''@;'; put 'put ''IiwiYmFsYXNob3Yuc3UiLCJiYXNoa2lyaWEuc3UiLCJicnlhbnNrLnN1IiwiYnVraGFyYS5zdSIsImNoaW1rZW50LnN1IiwiZGFnZXN0YW4uc3UiLCJlYXN0LWthemFraHN0YW4uc3UiLCJleG5ldC5zdSIsImdlb3JnaWEuc3UiLCJncm96bnkuc3UiLCJpdmFub3ZvLnN1IiwiamFtYnlsLnN1''@;'; put 'put ''Iiwia2FsbXlraWEuc3UiLCJrYWx1Z2Euc3UiLCJrYXJhY29sLnN1Iiwia2FyYWdhbmRhLnN1Iiwia2FyZWxpYS5zdSIsImtoYWthc3NpYS5zdSIsImtyYXNub2Rhci5zdSIsImt1cmdhbi5zdSIsImt1c3RhbmFpLnN1IiwibGVudWcuc3UiLCJtYW5neXNobGFrLnN1IiwibW9yZG92aWEuc3Ui''@;'; put 'put ''LCJtc2suc3UiLCJtdXJtYW5zay5zdSIsIm5hbGNoaWsuc3UiLCJuYXZvaS5zdSIsIm5vcnRoLWthemFraHN0YW4uc3UiLCJub3Yuc3UiLCJvYm5pbnNrLnN1IiwicGVuemEuc3UiLCJwb2tyb3Zzay5zdSIsInNvY2hpLnN1Iiwic3BiLnN1IiwidGFzaGtlbnQuc3UiLCJ0ZXJtZXouc3UiLCJ0''@;'; put 'put ''b2dsaWF0dGkuc3UiLCJ0cm9pdHNrLnN1IiwidHNlbGlub2dyYWQuc3UiLCJ0dWxhLnN1IiwidHV2YS5zdSIsInZsYWRpa2F2a2F6LnN1IiwidmxhZGltaXIuc3UiLCJ2b2xvZ2RhLnN1IiwiY2hhbm5lbHNkdnIubmV0IiwidS5jaGFubmVsc2R2ci5uZXQiLCJlZGdlY29tcHV0ZS5hcHAiLCJm''@;'; put 'put ''YXN0bHktZWRnZS5jb20iLCJmYXN0bHktdGVycmFyaXVtLmNvbSIsImZyZWV0bHMuZmFzdGx5Lm5ldCIsIm1hcC5mYXN0bHkubmV0IiwiYS5wcm9kLmZhc3RseS5uZXQiLCJnbG9iYWwucHJvZC5mYXN0bHkubmV0IiwiYS5zc2wuZmFzdGx5Lm5ldCIsImIuc3NsLmZhc3RseS5uZXQiLCJnbG9i''@;'; put 'put ''YWwuc3NsLmZhc3RseS5uZXQiLCJmYXN0bHlsYi5uZXQiLCJtYXAuZmFzdGx5bGIubmV0IiwiKi51c2VyLmZtIiwiZmFzdHZwcy1zZXJ2ZXIuY29tIiwiZmFzdHZwcy5ob3N0IiwibXlmYXN0Lmhvc3QiLCJmYXN0dnBzLnNpdGUiLCJteWZhc3Quc3BhY2UiLCJjb25uLnVrIiwiY29wcm8udWsi''@;'; put 'put ''LCJob3NwLnVrIiwiZmVkb3JhaW5mcmFjbG91ZC5vcmciLCJmZWRvcmFwZW9wbGUub3JnIiwiY2xvdWQuZmVkb3JhcHJvamVjdC5vcmciLCJhcHAub3MuZmVkb3JhcHJvamVjdC5vcmciLCJhcHAub3Muc3RnLmZlZG9yYXByb2plY3Qub3JnIiwibXlkb2Jpc3MuY29tIiwiZmgtbXVlbnN0ZXIu''@;'; put 'put ''aW8iLCJmaWxlZ2Vhci5tZSIsImZpcmViYXNlYXBwLmNvbSIsImZsZHJ2LmNvbSIsImZsdXR0ZXJmbG93LmFwcCIsImZseS5kZXYiLCJzaHcuaW8iLCJlZGdlYXBwLm5ldCIsImZvcmdlYmxvY2tzLmNvbSIsImlkLmZvcmdlcm9jay5pbyIsImZyYW1lci5haSIsImZyYW1lci5hcHAiLCJmcmFt''@;'; put 'put ''ZXJjYW52YXMuY29tIiwiZnJhbWVyLm1lZGlhIiwiZnJhbWVyLnBob3RvcyIsImZyYW1lci53ZWJzaXRlIiwiZnJhbWVyLndpa2kiLCIwZS52YyIsImZyZWVib3gtb3MuY29tIiwiZnJlZWJveG9zLmNvbSIsImZieC1vcy5mciIsImZieG9zLmZyIiwiZnJlZWJveC1vcy5mciIsImZyZWVib3hv''@;'; put 'put ''cy5mciIsImZyZWVkZXNrdG9wLm9yZyIsImZyZWVteWlwLmNvbSIsIiouZnJ1c2t5LmRlIiwid2llbi5mdW5rZmV1ZXIuYXQiLCJkYWVtb24uYXNpYSIsImRpeC5hc2lhIiwibXlkbnMuYnoiLCIwYW0uanAiLCIwZzAuanAiLCIwajAuanAiLCIwdDAuanAiLCJteWRucy5qcCIsInBndy5qcCIs''@;'; put 'put ''IndqZy5qcCIsImtleXdvcmQtb24ubmV0IiwibGl2ZS1vbi5uZXQiLCJzZXJ2ZXItb24ubmV0IiwibXlkbnMudHciLCJteWRucy52YyIsIiouZnV0dXJlY21zLmF0IiwiKi5leC5mdXR1cmVjbXMuYXQiLCIqLmluLmZ1dHVyZWNtcy5hdCIsImZ1dHVyZWhvc3RpbmcuYXQiLCJmdXR1cmVtYWls''@;'; put 'put ''aW5nLmF0IiwiKi5leC5vcnRzaW5mby5hdCIsIioua3VuZGVuLm9ydHNpbmZvLmF0IiwiKi5zdGF0aWNzLmNsb3VkIiwiYWxpYXNlczEyMS5jb20iLCJjYW1wYWlnbi5nb3YudWsiLCJzZXJ2aWNlLmdvdi51ayIsImluZGVwZW5kZW50LWNvbW1pc3Npb24udWsiLCJpbmRlcGVuZGVudC1pbnF1''@;'; put 'put ''ZXN0LnVrIiwiaW5kZXBlbmRlbnQtaW5xdWlyeS51ayIsImluZGVwZW5kZW50LXBhbmVsLnVrIiwiaW5kZXBlbmRlbnQtcmV2aWV3LnVrIiwicHVibGljLWlucXVpcnkudWsiLCJyb3lhbC1jb21taXNzaW9uLnVrIiwiZ2VoaXJuLm5lLmpwIiwidXNlcmNvbnRlbnQuanAiLCJnZW50YXBwcy5j''@;'; put 'put ''b20iLCJnZW50bGVudGFwaXMuY29tIiwibGFiLm1zIiwiY2RuLWVkZ2VzLm5ldCIsImxvY2FsY2VydC5uZXQiLCJsb2NhbGhvc3RjZXJ0Lm5ldCIsImdzai5ieiIsImdpdGh1YnVzZXJjb250ZW50LmNvbSIsImdpdGh1YnByZXZpZXcuZGV2IiwiZ2l0aHViLmlvIiwiZ2l0bGFiLmlvIiwiZ2l0''@;'; put 'put ''YXBwLnNpIiwiZ2l0cGFnZS5zaSIsImdsaXRjaC5tZSIsIm5vZy5jb21tdW5pdHkiLCJjby5ybyIsInNob3Aucm8iLCJsb2xpcG9wLmlvIiwiYW5ncnkuanAiLCJiYWJ5Ymx1ZS5qcCIsImJhYnltaWxrLmpwIiwiYmFja2Ryb3AuanAiLCJiYW1iaW5hLmpwIiwiYml0dGVyLmpwIiwiYmx1c2gu''@;'; put 'put ''anAiLCJib28uanAiLCJib3kuanAiLCJib3lmcmllbmQuanAiLCJidXQuanAiLCJjYW5keXBvcC5qcCIsImNhcG9vLmpwIiwiY2F0Zm9vZC5qcCIsImNoZWFwLmpwIiwiY2hpY2FwcGEuanAiLCJjaGlsbG91dC5qcCIsImNoaXBzLmpwIiwiY2hvd2Rlci5qcCIsImNodS5qcCIsImNpYW8uanAi''@;'; put 'put ''LCJjb2NvdHRlLmpwIiwiY29vbGJsb2cuanAiLCJjcmFua3kuanAiLCJjdXRlZ2lybC5qcCIsImRhYS5qcCIsImRlY2EuanAiLCJkZWNpLmpwIiwiZGlnaWNrLmpwIiwiZWdvaXNtLmpwIiwiZmFrZWZ1ci5qcCIsImZlbS5qcCIsImZsaWVyLmpwIiwiZmxvcHB5LmpwIiwiZm9vbC5qcCIsImZy''@;'; put 'put ''ZW5jaGtpc3MuanAiLCJnaXJsZnJpZW5kLmpwIiwiZ2lybHkuanAiLCJnbG9vbXkuanAiLCJnb25uYS5qcCIsImdyZWF0ZXIuanAiLCJoYWNjYS5qcCIsImhlYXZ5LmpwIiwiaGVyLmpwIiwiaGloby5qcCIsImhpcHB5LmpwIiwiaG9seS5qcCIsImh1bmdyeS5qcCIsImljdXJ1cy5qcCIsIml0''@;'; put 'put ''aWdvLmpwIiwiamVsbHliZWFuLmpwIiwia2lraXJhcmEuanAiLCJraWxsLmpwIiwia2lsby5qcCIsImt1cm9uLmpwIiwibGl0dGxlc3Rhci5qcCIsImxvbGlwb3BtYy5qcCIsImxvbGl0YXB1bmsuanAiLCJsb21vLmpwIiwibG92ZXBvcC5qcCIsImxvdmVzaWNrLmpwIiwibWFpbi5qcCIsIm1v''@;'; put 'put ''ZHMuanAiLCJtb25kLmpwIiwibW9uZ29saWFuLmpwIiwibW9vLmpwIiwibmFtYXN0ZS5qcCIsIm5pa2l0YS5qcCIsIm5vYnVzaGkuanAiLCJub29yLmpwIiwib29wcy5qcCIsInBhcmFsbGVsLmpwIiwicGFyYXNpdGUuanAiLCJwZWNvcmkuanAiLCJwZWV3ZWUuanAiLCJwZW5uZS5qcCIsInBl''@;'; put 'put ''cHBlci5qcCIsInBlcm1hLmpwIiwicGlnYm9hdC5qcCIsInBpbm9rby5qcCIsInB1bnl1LmpwIiwicHVwdS5qcCIsInB1c3N5Y2F0LmpwIiwicHlhLmpwIiwicmFpbmRyb3AuanAiLCJyZWFkeW1hZGUuanAiLCJzYWRpc3QuanAiLCJzY2hvb2xidXMuanAiLCJzZWNyZXQuanAiLCJzdGFiYS5q''@;'; put 'put ''cCIsInN0cmlwcGVyLmpwIiwic3ViLmpwIiwic3VubnlkYXkuanAiLCJ0aGljay5qcCIsInRvbmtvdHN1LmpwIiwidW5kZXIuanAiLCJ1cHBlci5qcCIsInZlbHZldC5qcCIsInZlcnNlLmpwIiwidmVyc3VzLmpwIiwidml2aWFuLmpwIiwid2F0c29uLmpwIiwid2VibGlrZS5qcCIsIndoaXRl''@;'; put 'put ''c25vdy5qcCIsInpvbWJpZS5qcCIsImhldGVtbC5uZXQiLCJncmFwaGljLmRlc2lnbiIsImdvaXAuZGUiLCJibG9nc3BvdC5hZSIsImJsb2dzcG90LmFsIiwiYmxvZ3Nwb3QuYW0iLCIqLmhvc3RlZC5hcHAiLCIqLnJ1bi5hcHAiLCJ3ZWIuYXBwIiwiYmxvZ3Nwb3QuY29tLmFyIiwiYmxvZ3Nw''@;'; put 'put ''b3QuY28uYXQiLCJibG9nc3BvdC5jb20uYXUiLCJibG9nc3BvdC5iYSIsImJsb2dzcG90LmJlIiwiYmxvZ3Nwb3QuYmciLCJibG9nc3BvdC5iaiIsImJsb2dzcG90LmNvbS5iciIsImJsb2dzcG90LmNvbS5ieSIsImJsb2dzcG90LmNhIiwiYmxvZ3Nwb3QuY2YiLCJibG9nc3BvdC5jaCIsImJs''@;'; put 'put ''b2dzcG90LmNsIiwiYmxvZ3Nwb3QuY29tLmNvIiwiKi4wZW1tLmNvbSIsImFwcHNwb3QuY29tIiwiKi5yLmFwcHNwb3QuY29tIiwiYmxvZ3Nwb3QuY29tIiwiY29kZXNwb3QuY29tIiwiZ29vZ2xlYXBpcy5jb20iLCJnb29nbGVjb2RlLmNvbSIsInBhZ2VzcGVlZG1vYmlsaXplci5jb20iLCJ3''@;'; put 'put ''aXRoZ29vZ2xlLmNvbSIsIndpdGh5b3V0dWJlLmNvbSIsImJsb2dzcG90LmN2IiwiYmxvZ3Nwb3QuY29tLmN5IiwiYmxvZ3Nwb3QuY3oiLCJibG9nc3BvdC5kZSIsIiouZ2F0ZXdheS5kZXYiLCJibG9nc3BvdC5kayIsImJsb2dzcG90LmNvbS5lZSIsImJsb2dzcG90LmNvbS5lZyIsImJsb2dz''@;'; put 'put ''cG90LmNvbS5lcyIsImJsb2dzcG90LmZpIiwiYmxvZ3Nwb3QuZnIiLCJjbG91ZC5nb29nIiwidHJhbnNsYXRlLmdvb2ciLCIqLnVzZXJjb250ZW50Lmdvb2ciLCJibG9nc3BvdC5nciIsImJsb2dzcG90LmhrIiwiYmxvZ3Nwb3QuaHIiLCJibG9nc3BvdC5odSIsImJsb2dzcG90LmNvLmlkIiwi''@;'; put 'put ''YmxvZ3Nwb3QuaWUiLCJibG9nc3BvdC5jby5pbCIsImJsb2dzcG90LmluIiwiYmxvZ3Nwb3QuaXMiLCJibG9nc3BvdC5pdCIsImJsb2dzcG90LmpwIiwiYmxvZ3Nwb3QuY28ua2UiLCJibG9nc3BvdC5rciIsImJsb2dzcG90LmxpIiwiYmxvZ3Nwb3QubHQiLCJibG9nc3BvdC5sdSIsImJsb2dz''@;'; put 'put ''cG90Lm1kIiwiYmxvZ3Nwb3QubWsiLCJibG9nc3BvdC5jb20ubXQiLCJibG9nc3BvdC5teCIsImJsb2dzcG90Lm15IiwiY2xvdWRmdW5jdGlvbnMubmV0IiwiYmxvZ3Nwb3QuY29tLm5nIiwiYmxvZ3Nwb3QubmwiLCJibG9nc3BvdC5ubyIsImJsb2dzcG90LmNvLm56IiwiYmxvZ3Nwb3QucGUi''@;'; put 'put ''LCJibG9nc3BvdC5wdCIsImJsb2dzcG90LnFhIiwiYmxvZ3Nwb3QucmUiLCJibG9nc3BvdC5ybyIsImJsb2dzcG90LnJzIiwiYmxvZ3Nwb3QucnUiLCJibG9nc3BvdC5zZSIsImJsb2dzcG90LnNnIiwiYmxvZ3Nwb3Quc2kiLCJibG9nc3BvdC5zayIsImJsb2dzcG90LnNuIiwiYmxvZ3Nwb3Qu''@;'; put 'put ''dGQiLCJibG9nc3BvdC5jb20udHIiLCJibG9nc3BvdC50dyIsImJsb2dzcG90LnVnIiwiYmxvZ3Nwb3QuY28udWsiLCJibG9nc3BvdC5jb20udXkiLCJibG9nc3BvdC52biIsImJsb2dzcG90LmNvLnphIiwiZ291cGlsZS5mciIsInB5bW50LnVrIiwiY2xvdWRhcHBzLmRpZ2l0YWwiLCJsb25k''@;'; put 'put ''b24uY2xvdWRhcHBzLmRpZ2l0YWwiLCJnb3YubmwiLCJncmFmYW5hLWRldi5uZXQiLCJncmF5amF5bGVhZ3Vlcy5jb20iLCJnXHhmY25zdGlnYmVzdGVsbGVuLmRlIiwiZ1x4ZmNuc3RpZ2xpZWZlcm4uZGUiLCJmaW4uY2kiLCJmcmVlLmhyIiwiY2FhLmxpIiwidWEucnMiLCJjb25mLnNlIiwi''@;'; put 'put ''aFx4ZTRra2luZW4uZmkiLCJocnNuLmRldiIsImhhc2hiYW5nLnNoIiwiaGFzdXJhLmFwcCIsImhhc3VyYS1hcHAuaW8iLCJoYXRlbmFibG9nLmNvbSIsImhhdGVuYWRpYXJ5LmNvbSIsImhhdGVibG8uanAiLCJoYXRlbmFibG9nLmpwIiwiaGF0ZW5hZGlhcnkuanAiLCJoYXRlbmFkaWFyeS5v''@;'; put 'put ''cmciLCJwYWdlcy5pdC5ocy1oZWlsYnJvbm4uZGUiLCJwYWdlcy1yZXNlYXJjaC5pdC5ocy1oZWlsYnJvbm4uZGUiLCJoZWl5dS5zcGFjZSIsImhlbGlvaG8uc3QiLCJoZWxpb2hvc3QudXMiLCJoZXBmb3JnZS5vcmciLCJoZXJva3VhcHAuY29tIiwiaGVyb2t1c3NsLmNvbSIsImhleWZsb3cu''@;'; put 'put ''cGFnZSIsImhleWZsb3cuc2l0ZSIsInJhdmVuZGIuY2xvdWQiLCJyYXZlbmRiLmNvbW11bml0eSIsImRldmVsb3BtZW50LnJ1biIsInJhdmVuZGIucnVuIiwiaG9tZXNrbGVwLnBsIiwiKi5raW4ub25lIiwiKi5pZC5wdWIiLCIqLmtpbi5wdWIiLCJzZWNhYXMuaGsiLCJob3BsaXguc2hvcCIs''@;'; put 'put ''Im9yeC5iaXoiLCJiaXouZ2wiLCJiaXoubmciLCJjby5iaXoubmciLCJkbC5iaXoubmciLCJnby5iaXoubmciLCJsZy5iaXoubmciLCJvbi5iaXoubmciLCJjb2wubmciLCJmaXJtLm5nIiwiZ2VuLm5nIiwibHRkLm5nIiwibmdvLm5nIiwicGxjLm5nIiwiaWUudWEiLCJob3N0eWhvc3Rpbmcu''@;'; put 'put ''aW8iLCJoZi5zcGFjZSIsInN0YXRpYy5oZi5zcGFjZSIsImh5cGVybm9kZS5pbyIsImlvYmIubmV0IiwiY28uY3oiLCIqLm1vb25zY2FsZS5pbyIsIm1vb25zY2FsZS5uZXQiLCJnci5jb20iLCJpa2kuZmkiLCJpYnhvcy5pdCIsImlsaWFkYm94b3MuaXQiLCJzbXVzaGNkbi5jb20iLCJ3cGhv''@;'; put 'put ''c3RlZG1haWwuY29tIiwid3BtdWNkbi5jb20iLCJ0ZW1wdXJsLmhvc3QiLCJ3cG11ZGV2Lmhvc3QiLCJkeW4tYmVybGluLmRlIiwiaW4tYmVybGluLmRlIiwiaW4tYnJiLmRlIiwiaW4tYnV0dGVyLmRlIiwiaW4tZHNsLmRlIiwiaW4tdnBuLmRlIiwiaW4tZHNsLm5ldCIsImluLXZwbi5uZXQi''@;'; put 'put ''LCJpbi1kc2wub3JnIiwiaW4tdnBuLm9yZyIsImJpei5hdCIsImluZm8uYXQiLCJpbmZvLmN4IiwiYWMubGVnLmJyIiwiYWwubGVnLmJyIiwiYW0ubGVnLmJyIiwiYXAubGVnLmJyIiwiYmEubGVnLmJyIiwiY2UubGVnLmJyIiwiZGYubGVnLmJyIiwiZXMubGVnLmJyIiwiZ28ubGVnLmJyIiwi''@;'; put 'put ''bWEubGVnLmJyIiwibWcubGVnLmJyIiwibXMubGVnLmJyIiwibXQubGVnLmJyIiwicGEubGVnLmJyIiwicGIubGVnLmJyIiwicGUubGVnLmJyIiwicGkubGVnLmJyIiwicHIubGVnLmJyIiwicmoubGVnLmJyIiwicm4ubGVnLmJyIiwicm8ubGVnLmJyIiwicnIubGVnLmJyIiwicnMubGVnLmJy''@;'; put 'put ''Iiwic2MubGVnLmJyIiwic2UubGVnLmJyIiwic3AubGVnLmJyIiwidG8ubGVnLmJyIiwicGl4b2xpbm8uY29tIiwibmE0dS5ydSIsImFwcHMtMWFuZDEuY29tIiwibGl2ZS13ZWJzaXRlLmNvbSIsImFwcHMtMWFuZDEubmV0Iiwid2Vic2l0ZWJ1aWxkZXIub25saW5lIiwiYXBwLWlvbm9zLnNw''@;'; put 'put ''YWNlIiwiaW9wc3lzLnNlIiwiKi5kd2ViLmxpbmsiLCJpcGlmb255Lm5ldCIsImlyLm1kIiwiaXMtYS1nb29kLmRldiIsImlzLWEuZGV2IiwiaXNlcnZzY2h1bGUuZGUiLCJtZWluLWlzZXJ2LmRlIiwic2NodWxwbGF0dGZvcm0uZGUiLCJzY2h1bHNlcnZlci5kZSIsInRlc3QtaXNlcnYuZGUi''@;'; put 'put ''LCJpc2Vydi5kZXYiLCJtZWwuY2xvdWRsZXRzLmNvbS5hdSIsImNsb3VkLmludGVyaG9zdHNvbHV0aW9ucy5iZSIsImFscDEuYWUuZmxvdy5jaCIsImFwcGVuZ2luZS5mbG93LmNoIiwiZXMtMS5heGFybmV0LmNsb3VkIiwiZGlhZGVtLmNsb3VkIiwidmlwLmplbGFzdGljLmNsb3VkIiwiamVs''@;'; put 'put ''ZS5jbG91ZCIsIml0MS5ldXIuYXJ1YmEuamVudi1hcnViYS5jbG91ZCIsIml0MS5qZW52LWFydWJhLmNsb3VkIiwia2VsaXdlYi5jbG91ZCIsImNzLmtlbGl3ZWIuY2xvdWQiLCJveGEuY2xvdWQiLCJ0bi5veGEuY2xvdWQiLCJ1ay5veGEuY2xvdWQiLCJwcmltZXRlbC5jbG91ZCIsInVrLnBy''@;'; put 'put ''aW1ldGVsLmNsb3VkIiwiY2EucmVjbGFpbS5jbG91ZCIsInVrLnJlY2xhaW0uY2xvdWQiLCJ1cy5yZWNsYWltLmNsb3VkIiwiY2gudHJlbmRob3N0aW5nLmNsb3VkIiwiZGUudHJlbmRob3N0aW5nLmNsb3VkIiwiamVsZS5jbHViIiwiZG9wYWFzLmNvbSIsInBhYXMuaG9zdGVkLWJ5LXByZXZp''@;'; put 'put ''ZGVyLmNvbSIsInJhZy1jbG91ZC5ob3N0ZXVyLmNvbSIsInJhZy1jbG91ZC1jaC5ob3N0ZXVyLmNvbSIsImpjbG91ZC5pay1zZXJ2ZXIuY29tIiwiamNsb3VkLXZlci1qcGMuaWstc2VydmVyLmNvbSIsImRlbW8uamVsYXN0aWMuY29tIiwicGFhcy5tYXNzaXZlZ3JpZC5jb20iLCJqZWQud2Fm''@;'; put 'put ''YWljbG91ZC5jb20iLCJyeWQud2FmYWljbG91ZC5jb20iLCJqLnNjYWxlZm9yY2UuY29tLmN5IiwiamVsYXN0aWMuZG9nYWRvLmV1IiwiZmkuY2xvdWRwbGF0Zm9ybS5maSIsImRlbW8uZGF0YWNlbnRlci5maSIsInBhYXMuZGF0YWNlbnRlci5maSIsImplbGUuaG9zdCIsIm1pcmNsb3VkLmhv''@;'; put 'put ''c3QiLCJwYWFzLmJlZWJ5dGUuaW8iLCJzZWtkMS5iZWVieXRlYXBwLmlvIiwiamVsZS5pbyIsImpjLm5lZW4uaXQiLCJqY2xvdWQua3oiLCJjbG91ZGppZmZ5Lm5ldCIsImZyYTEtZGUuY2xvdWRqaWZmeS5uZXQiLCJ3ZXN0MS11cy5jbG91ZGppZmZ5Lm5ldCIsImpscy1zdG8xLmVsYXN0eC5u''@;'; put 'put ''ZXQiLCJqbHMtc3RvMi5lbGFzdHgubmV0IiwiamxzLXN0bzMuZWxhc3R4Lm5ldCIsImZyLTEucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJsb24tMS5wYWFzLm1hc3NpdmVncmlkLm5ldCIsImxvbi0yLnBhYXMubWFzc2l2ZWdyaWQubmV0IiwibnktMS5wYWFzLm1hc3NpdmVncmlkLm5ldCIsIm55''@;'; put 'put ''LTIucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJzZy0xLnBhYXMubWFzc2l2ZWdyaWQubmV0IiwiamVsYXN0aWMuc2F2ZWluY2xvdWQubmV0Iiwibm9yZGVzdGUtaWRjLnNhdmVpbmNsb3VkLm5ldCIsImouc2NhbGVmb3JjZS5uZXQiLCJzZHNjbG91ZC5wbCIsInVuaWNsb3VkLnBsIiwibWlyY2xv''@;'; put 'put ''dWQucnUiLCJlbnNjYWxlZC5zZyIsImplbGUuc2l0ZSIsImplbGFzdGljLnRlYW0iLCJvcmFuZ2VjbG91ZC50biIsImoubGF5ZXJzaGlmdC5jby51ayIsInBoeC5lbnNjYWxlZC51cyIsIm1pcmNsb3VkLnVzIiwibXlqaW5vLnJ1IiwiKi5ob3N0aW5nLm15amluby5ydSIsIioubGFuZGluZy5t''@;'; put 'put ''eWppbm8ucnUiLCIqLnNwZWN0cnVtLm15amluby5ydSIsIioudnBzLm15amluby5ydSIsImpvdGVsdWx1LmNsb3VkIiwid2ViYWRvcnNpdGUuY29tIiwiam91d3dlYi5zaXRlIiwiKi5jbnMuam95ZW50LmNvbSIsIioudHJpdG9uLnpvbmUiLCJqcy5vcmciLCJrYWFzLmdnIiwia2hwbGF5Lm5s''@;'; put 'put ''Iiwia2Fwc2kuZmkiLCJlenByb3h5Lmt1bGV1dmVuLmJlIiwia3VsZXV2ZW4uY2xvdWQiLCJrZXltYWNoaW5lLmRlIiwia2luZ2hvc3QubmV0IiwidW5pNS5uZXQiLCJrbmlnaHRwb2ludC5zeXN0ZW1zIiwia29vYmluLmV2ZW50cyIsIndlYnRoaW5ncy5pbyIsImtyZWxsaWFuLm5ldCIsIm95''@;'; put 'put ''YS50byIsImdpdC1yZXBvcy5kZSIsImxjdWJlLXNlcnZlci5kZSIsInN2bi1yZXBvcy5kZSIsImxlYWRwYWdlcy5jbyIsImxwYWdlcy5jbyIsImxwdXNlcmNvbnRlbnQuY29tIiwibGVsdXguc2l0ZSIsImxpYnAycC5kaXJlY3QiLCJydW5jb250YWluZXJzLmRldiIsImNvLmJ1c2luZXNzIiwi''@;'; put 'put ''Y28uZWR1Y2F0aW9uIiwiY28uZXZlbnRzIiwiY28uZmluYW5jaWFsIiwiY28ubmV0d29yayIsImNvLnBsYWNlIiwiY28udGVjaG5vbG9neSIsImxpbmt5YXJkLWNsb3VkLmNoIiwibGlua3lhcmQuY2xvdWQiLCJtZW1iZXJzLmxpbm9kZS5jb20iLCIqLm5vZGViYWxhbmNlci5saW5vZGUuY29t''@;'; put 'put ''IiwiKi5saW5vZGVvYmplY3RzLmNvbSIsImlwLmxpbm9kZXVzZXJjb250ZW50LmNvbSIsIndlLmJzIiwiZmlsZWdlYXItc2cubWUiLCJnZ2ZmLm5ldCIsIioudXNlci5sb2NhbGNlcnQuZGV2IiwibG9kei5wbCIsInBhYmlhbmljZS5wbCIsInBsb2NrLnBsIiwic2llcmFkei5wbCIsInNraWVy''@;'; put 'put ''bmlld2ljZS5wbCIsInpnaWVyei5wbCIsImxvZ2lubGluZS5hcHAiLCJsb2dpbmxpbmUuZGV2IiwibG9naW5saW5lLmlvIiwibG9naW5saW5lLnNlcnZpY2VzIiwibG9naW5saW5lLnNpdGUiLCJsb2htdXMubWUiLCJzZXJ2ZXJzLnJ1biIsImtyYXNuaWsucGwiLCJsZWN6bmEucGwiLCJsdWJh''@;'; put 'put ''cnRvdy5wbCIsImx1Ymxpbi5wbCIsInBvbmlhdG93YS5wbCIsInN3aWRuaWsucGwiLCJnbHVnLm9yZy51ayIsImx1Zy5vcmcudWsiLCJsdWdzLm9yZy51ayIsImJhcnN5LmJnIiwiYmFyc3kuY2x1YiIsImJhcnN5Y2VudGVyLmNvbSIsImJhcnN5b25saW5lLmNvbSIsImJhcnN5LmRlIiwiYmFy''@;'; put 'put ''c3kuZGV2IiwiYmFyc3kuZXUiLCJiYXJzeS5nciIsImJhcnN5LmluIiwiYmFyc3kuaW5mbyIsImJhcnN5LmlvIiwiYmFyc3kubWUiLCJiYXJzeS5tZW51IiwiYmFyc3lvbmxpbmUubWVudSIsImJhcnN5Lm1vYmkiLCJiYXJzeS5uZXQiLCJiYXJzeS5vbmxpbmUiLCJiYXJzeS5vcmciLCJiYXJz''@;'; put 'put ''eS5wcm8iLCJiYXJzeS5wdWIiLCJiYXJzeS5ybyIsImJhcnN5LnJzIiwiYmFyc3kuc2hvcCIsImJhcnN5b25saW5lLnNob3AiLCJiYXJzeS5zaXRlIiwiYmFyc3kuc3RvcmUiLCJiYXJzeS5zdXBwb3J0IiwiYmFyc3kudWsiLCJiYXJzeS5jby51ayIsImJhcnN5b25saW5lLmNvLnVrIiwiKi5t''@;'; put 'put ''YWdlbnRvc2l0ZS5jbG91ZCIsImhiLmNsZG1haWwucnUiLCJtYXRsYWIuY2xvdWQiLCJtb2RlbHNjYXBlLmNvbSIsIm13Y2xvdWRub25wcm9kLmNvbSIsInBvbHlzcGFjZS5jb20iLCJtYXlmaXJzdC5pbmZvIiwibWF5Zmlyc3Qub3JnIiwibWF6ZXBsYXkuY29tIiwibWNkaXIubWUiLCJtY2Rp''@;'; put 'put ''ci5ydSIsInZwcy5tY2Rpci5ydSIsIm1jcHJlLnJ1IiwibWVkaWF0ZWNoLmJ5IiwibWVkaWF0ZWNoLmRldiIsImhyYS5oZWFsdGgiLCJtZWR1c2Fqcy5hcHAiLCJtaW5pc2VydmVyLmNvbSIsIm1lbXNldC5uZXQiLCJtZXNzZXJsaS5hcHAiLCJhdG1ldGEuY29tIiwiYXBwcy5mYnNieC5jb20i''@;'; put 'put ''LCIqLmNsb3VkLm1ldGFjZW50cnVtLmN6IiwiY3VzdG9tLm1ldGFjZW50cnVtLmN6IiwiZmx0LmNsb3VkLm11bmkuY3oiLCJ1c3IuY2xvdWQubXVuaS5jeiIsIm1ldGVvcmFwcC5jb20iLCJldS5tZXRlb3JhcHAuY29tIiwiY28ucGwiLCIqLmF6dXJlY29udGFpbmVyLmlvIiwiYXp1cmUtYXBp''@;'; put 'put ''Lm5ldCIsImF6dXJlLW1vYmlsZS5uZXQiLCJhenVyZWVkZ2UubmV0IiwiYXp1cmVmZC5uZXQiLCJhenVyZXN0YXRpY2FwcHMubmV0IiwiMS5henVyZXN0YXRpY2FwcHMubmV0IiwiMi5henVyZXN0YXRpY2FwcHMubmV0IiwiMy5henVyZXN0YXRpY2FwcHMubmV0IiwiNC5henVyZXN0YXRpY2Fw''@;'; put 'put ''cHMubmV0IiwiNS5henVyZXN0YXRpY2FwcHMubmV0IiwiNi5henVyZXN0YXRpY2FwcHMubmV0IiwiNy5henVyZXN0YXRpY2FwcHMubmV0IiwiY2VudHJhbHVzLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJlYXN0YXNpYS5henVyZXN0YXRpY2FwcHMubmV0IiwiZWFzdHVzMi5henVyZXN0YXRpY2Fw''@;'; put 'put ''cHMubmV0Iiwid2VzdGV1cm9wZS5henVyZXN0YXRpY2FwcHMubmV0Iiwid2VzdHVzMi5henVyZXN0YXRpY2FwcHMubmV0IiwiYXp1cmV3ZWJzaXRlcy5uZXQiLCJjbG91ZGFwcC5uZXQiLCJ0cmFmZmljbWFuYWdlci5uZXQiLCJibG9iLmNvcmUud2luZG93cy5uZXQiLCJzZXJ2aWNlYnVzLndp''@;'; put 'put ''bmRvd3MubmV0Iiwicm91dGluZ3RoZWNsb3VkLmNvbSIsInNuLm15bmV0bmFtZS5uZXQiLCJyb3V0aW5ndGhlY2xvdWQubmV0Iiwicm91dGluZ3RoZWNsb3VkLm9yZyIsImNzeC5jYyIsIm15ZGJzZXJ2ZXIuY29tIiwid2Vic3BhY2Vjb25maWcuZGUiLCJtaXR0d2FsZC5pbmZvIiwibWl0dHdh''@;'; put 'put ''bGRzZXJ2ZXIuaW5mbyIsInR5cG8zc2VydmVyLmluZm8iLCJwcm9qZWN0LnNwYWNlIiwibW9keC5kZXYiLCJibW9hdHRhY2htZW50cy5vcmciLCJuZXQucnUiLCJvcmcucnUiLCJwcC5ydSIsImhvc3RlZHBpLmNvbSIsImNhcmFjYWwubXl0aGljLWJlYXN0cy5jb20iLCJjdXN0b21lci5teXRo''@;'; put 'put ''aWMtYmVhc3RzLmNvbSIsImZlbnRpZ2VyLm15dGhpYy1iZWFzdHMuY29tIiwibHlueC5teXRoaWMtYmVhc3RzLmNvbSIsIm9jZWxvdC5teXRoaWMtYmVhc3RzLmNvbSIsIm9uY2lsbGEubXl0aGljLWJlYXN0cy5jb20iLCJvbnphLm15dGhpYy1iZWFzdHMuY29tIiwic3BoaW54Lm15dGhpYy1i''@;'; put 'put ''ZWFzdHMuY29tIiwidnMubXl0aGljLWJlYXN0cy5jb20iLCJ4Lm15dGhpYy1iZWFzdHMuY29tIiwieWFsaS5teXRoaWMtYmVhc3RzLmNvbSIsImN1c3QucmV0cm9zbnViLmNvLnVrIiwidWkubmFidS5jYXNhIiwiY2xvdWQubm9zcGFtcHJveHkuY29tIiwibmV0ZnkuYXBwIiwibmV0bGlmeS5h''@;'; put 'put ''cHAiLCI0dS5jb20iLCJuZnNob3N0LmNvbSIsImlwZnMubmZ0c3RvcmFnZS5saW5rIiwibmdvLnVzIiwibmdyb2suYXBwIiwibmdyb2stZnJlZS5hcHAiLCJuZ3Jvay5kZXYiLCJuZ3Jvay1mcmVlLmRldiIsIm5ncm9rLmlvIiwiYXAubmdyb2suaW8iLCJhdS5uZ3Jvay5pbyIsImV1Lm5ncm9r''@;'; put 'put ''LmlvIiwiaW4ubmdyb2suaW8iLCJqcC5uZ3Jvay5pbyIsInNhLm5ncm9rLmlvIiwidXMubmdyb2suaW8iLCJuZ3Jvay5waXp6YSIsIm5ncm9rLnBybyIsInRvcnVuLnBsIiwibmgtc2Vydi5jby51ayIsIm5pbXNpdGUudWsiLCJtbWFmYW4uYml6IiwibXlmdHAuYml6Iiwibm8taXAuYml6Iiwi''@;'; put 'put ''bm8taXAuY2EiLCJmYW50YXN5bGVhZ3VlLmNjIiwiZ290ZG5zLmNoIiwiM3V0aWxpdGllcy5jb20iLCJibG9nc3l0ZS5jb20iLCJjaXNjb2ZyZWFrLmNvbSIsImRhbW5zZXJ2ZXIuY29tIiwiZGRuc2tpbmcuY29tIiwiZGl0Y2h5b3VyaXAuY29tIiwiZG5zaXNraW5reS5jb20iLCJkeW5ucy5j''@;'; put 'put ''b20iLCJnZWVrZ2FsYXh5LmNvbSIsImhlYWx0aC1jYXJlcmVmb3JtLmNvbSIsImhvbWVzZWN1cml0eW1hYy5jb20iLCJob21lc2VjdXJpdHlwYy5jb20iLCJteWFjdGl2ZWRpcmVjdG9yeS5jb20iLCJteXNlY3VyaXR5Y2FtZXJhLmNvbSIsIm15dm5jLmNvbSIsIm5ldC1mcmVha3MuY29tIiwi''@;'; put 'put ''b250aGV3aWZpLmNvbSIsInBvaW50MnRoaXMuY29tIiwicXVpY2tzeXRlcy5jb20iLCJzZWN1cml0eXRhY3RpY3MuY29tIiwic2VydmViZWVyLmNvbSIsInNlcnZlY291bnRlcnN0cmlrZS5jb20iLCJzZXJ2ZWV4Y2hhbmdlLmNvbSIsInNlcnZlZnRwLmNvbSIsInNlcnZlZ2FtZS5jb20iLCJz''@;'; put 'put ''ZXJ2ZWhhbGZsaWZlLmNvbSIsInNlcnZlaHR0cC5jb20iLCJzZXJ2ZWh1bW91ci5jb20iLCJzZXJ2ZWlyYy5jb20iLCJzZXJ2ZW1wMy5jb20iLCJzZXJ2ZXAycC5jb20iLCJzZXJ2ZXBpY3MuY29tIiwic2VydmVxdWFrZS5jb20iLCJzZXJ2ZXNhcmNhc20uY29tIiwic3R1ZmZ0b3JlYWQuY29t''@;'; put 'put ''IiwidW51c3VhbHBlcnNvbi5jb20iLCJ3b3JraXNib3JpbmcuY29tIiwiZHZyY2FtLmluZm8iLCJpbG92ZWNvbGxlZ2UuaW5mbyIsIm5vLWlwLmluZm8iLCJicmFzaWxpYS5tZSIsImRkbnMubWUiLCJkbnNmb3IubWUiLCJob3B0by5tZSIsImxvZ2ludG8ubWUiLCJub2lwLm1lIiwid2ViaG9w''@;'; put 'put ''Lm1lIiwiYm91bmNlbWUubmV0IiwiZGRucy5uZXQiLCJlYXRpbmctb3JnYW5pYy5uZXQiLCJteWRpc3NlbnQubmV0IiwibXllZmZlY3QubmV0IiwibXltZWRpYXBjLm5ldCIsIm15cHN4Lm5ldCIsIm15c2VjdXJpdHljYW1lcmEubmV0IiwibmhsZmFuLm5ldCIsIm5vLWlwLm5ldCIsInBnYWZh''@;'; put 'put ''bi5uZXQiLCJwcml2YXRpemVoZWFsdGhpbnN1cmFuY2UubmV0IiwicmVkaXJlY3RtZS5uZXQiLCJzZXJ2ZWJsb2cubmV0Iiwic2VydmVtaW5lY3JhZnQubmV0Iiwic3l0ZXMubmV0IiwiY2FibGUtbW9kZW0ub3JnIiwiY29sbGVnZWZhbi5vcmciLCJjb3VjaHBvdGF0b2ZyaWVzLm9yZyIsImhv''@;'; put 'put ''cHRvLm9yZyIsIm1sYmZhbi5vcmciLCJteWZ0cC5vcmciLCJteXNlY3VyaXR5Y2FtZXJhLm9yZyIsIm5mbGZhbi5vcmciLCJuby1pcC5vcmciLCJyZWFkLWJvb2tzLm9yZyIsInVmY2Zhbi5vcmciLCJ6YXB0by5vcmciLCJuby1pcC5jby51ayIsImdvbGZmYW4udXMiLCJub2lwLnVzIiwicG9p''@;'; put 'put ''bnR0by51cyIsInN0YWdlLm5vZGVhcnQuaW8iLCIqLmRldmVsb3Blci5hcHAiLCJub29wLmFwcCIsIioubm9ydGhmbGFuay5hcHAiLCIqLmJ1aWxkLnJ1biIsIiouY29kZS5ydW4iLCIqLmRhdGFiYXNlLnJ1biIsIioubWlncmF0aW9uLnJ1biIsIm5vdGljZWFibGUubmV3cyIsIm5vdGlvbi5z''@;'; put 'put ''aXRlIiwiZG5za2luZy5jaCIsIm15cGkuY28iLCJuNHQuY28iLCIwMDF3d3cuY29tIiwibXlpcGhvc3QuY29tIiwiZm9ydW16LmluZm8iLCJzb3VuZGNhc3QubWUiLCJ0Y3A0Lm1lIiwiZG5zdXAubmV0IiwiaGljYW0ubmV0Iiwibm93LWRucy5uZXQiLCJvd25pcC5uZXQiLCJ2cG5kbnMubmV0''@;'; put 'put ''IiwiZHluc2Vydi5vcmciLCJub3ctZG5zLm9yZyIsIng0NDMucHciLCJub3ctZG5zLnRvcCIsIm50ZGxsLnRvcCIsImZyZWVkZG5zLnVzIiwibnN1cGRhdGUuaW5mbyIsIm5lcmRwb2wub3ZoIiwibnljLm1uIiwicHJ2Y3kucGFnZSIsIm9ibC5vbmciLCJvYnNlcnZhYmxlaHEuY2xvdWQiLCJz''@;'; put 'put ''dGF0aWMub2JzZXJ2YWJsZXVzZXJjb250ZW50LmNvbSIsIm9tZy5sb2wiLCJjbG91ZHljbHVzdGVyLm5ldCIsIm9tbml3ZS5zaXRlIiwiMTIzd2Vic2VpdGUuYXQiLCIxMjN3ZWJzaXRlLmJlIiwic2ltcGxlc2l0ZS5jb20uYnIiLCIxMjN3ZWJzaXRlLmNoIiwic2ltcGxlc2l0ZS5jb20iLCIx''@;'; put 'put ''MjN3ZWJzZWl0ZS5kZSIsIjEyM2hqZW1tZXNpZGUuZGsiLCIxMjNtaXdlYi5lcyIsIjEyM2tvdGlzaXZ1LmZpIiwiMTIzc2l0ZXdlYi5mciIsInNpbXBsZXNpdGUuZ3IiLCIxMjNob21lcGFnZS5pdCIsIjEyM3dlYnNpdGUubHUiLCIxMjN3ZWJzaXRlLm5sIiwiMTIzaGplbW1lc2lkZS5ubyIs''@;'; put 'put ''InNlcnZpY2Uub25lIiwic2ltcGxlc2l0ZS5wbCIsIjEyM3BhZ2luYXdlYi5wdCIsIjEyM21pbnNpZGEuc2UiLCJpcy1hLWZ1bGxzdGFjay5kZXYiLCJpcy1jb29sLmRldiIsImlzLW5vdC1hLmRldiIsImxvY2FscGxheWVyLmRldiIsImlzLWxvY2FsLm9yZyIsIm9wZW5zb2NpYWwuc2l0ZSIs''@;'; put 'put ''Im9wZW5jcmFmdC5ob3N0aW5nIiwiMTYtYi5pdCIsIjMyLWIuaXQiLCI2NC1iLml0Iiwib3JzaXRlcy5jb20iLCJvcGVyYXVuaXRlLmNvbSIsIiouY3VzdG9tZXItb2NpLmNvbSIsIioub2NpLmN1c3RvbWVyLW9jaS5jb20iLCIqLm9jcC5jdXN0b21lci1vY2kuY29tIiwiKi5vY3MuY3VzdG9t''@;'; put 'put ''ZXItb2NpLmNvbSIsIioub3JhY2xlY2xvdWRhcHBzLmNvbSIsIioub3JhY2xlZ292Y2xvdWRhcHBzLmNvbSIsIioub3JhY2xlZ292Y2xvdWRhcHBzLnVrIiwidGVjaC5vcmFuZ2UiLCJjYW4ucmUiLCJhdXRoZ2Vhci1zdGFnaW5nLmNvbSIsImF1dGhnZWFyYXBwcy5jb20iLCJza3lnZWFyYXBw''@;'; put 'put ''LmNvbSIsIm91dHN5c3RlbXNjbG91ZC5jb20iLCIqLmhvc3Rpbmcub3ZoLm5ldCIsIioud2VicGFhcy5vdmgubmV0Iiwib3ducHJvdmlkZXIuY29tIiwib3duLnBtIiwiKi5vd28uY29kZXMiLCJveC5ycyIsIm95LmxjIiwicGdmb2cuY29tIiwicGFnZXhsLmNvbSIsImdvdHBhbnRoZW9uLmNv''@;'; put 'put ''bSIsInBhbnRoZW9uc2l0ZS5pbyIsIioucGF5d2hpcmwuY29tIiwiKi54bWl0LmNvIiwieG1pdC5kZXYiLCJtYWRldGhpcy5zaXRlIiwic3J2LnVzIiwiZ2guc3J2LnVzIiwiZ2wuc3J2LnVzIiwibGszLnJ1IiwibXlwZXAubGluayIsInBlcnNwZWN0YS5jbG91ZCIsIm9uLXdlYi5mciIsIiou''@;'; put 'put ''dXBzdW4uYXBwIiwidXBzdW5hcHAuY29tIiwiZW50LnBsYXRmb3JtLnNoIiwiZXUucGxhdGZvcm0uc2giLCJ1cy5wbGF0Zm9ybS5zaCIsIioucGxhdGZvcm1zaC5zaXRlIiwiKi50c3Quc2l0ZSIsInBsYXR0ZXItYXBwLmNvbSIsInBsYXR0ZXItYXBwLmRldiIsInBsYXR0ZXJwLnVzIiwicGxl''@;'; put 'put ''eS5nYW1lcyIsIm9ucG9ydGVyLnJ1biIsImNvLmJuIiwicG9zdG1hbi1lY2hvLmNvbSIsInBzdG1uLmlvIiwibW9jay5wc3Rtbi5pbyIsImh0dHBiaW4ub3JnIiwicHJlcXVhbGlmeW1lLnRvZGF5IiwieGVuLnByZ21yLmNvbSIsInByaXYuYXQiLCJwcm90b25ldC5pbyIsImNoaXJ1cmdpZW5z''@;'; put 'put ''LWRlbnRpc3Rlcy1lbi1mcmFuY2UuZnIiLCJieWVuLnNpdGUiLCJwdWJ0bHMub3JnIiwicHl0aG9uYW55d2hlcmUuY29tIiwiZXUucHl0aG9uYW55d2hlcmUuY29tIiwicWEyLmNvbSIsInFjeC5pbyIsIiouc3lzLnFjeC5pbyIsIm15cW5hcGNsb3VkLmNuIiwiYWxwaGEtbXlxbmFwY2xvdWQu''@;'; put 'put ''Y29tIiwiZGV2LW15cW5hcGNsb3VkLmNvbSIsIm15Y2xvdWRuYXMuY29tIiwibXluYXNjbG91ZC5jb20iLCJteXFuYXBjbG91ZC5jb20iLCJxb3RvLmlvIiwicXVhbGlmaW9hcHAuY29tIiwibGFkZXNrLmNvbSIsInFidXNlci5jb20iLCIqLnF1aXBlbGVtZW50cy5jb20iLCJ2YXBvci5jbG91''@;'; put 'put ''ZCIsInZhcG9yY2xvdWQuaW8iLCJyYWNrbWF6ZS5jb20iLCJyYWNrbWF6ZS5uZXQiLCJjbG91ZHNpdGUuYnVpbGRlcnMiLCJteXJhZHdlYi5uZXQiLCJzZXJ2ZXJuYW1lLnVzIiwid2ViLmluIiwiaW4ubmV0IiwibXlyZGJ4LmlvIiwic2l0ZS5yYi1ob3N0aW5nLmlvIiwiKi5vbi1yYW5jaGVy''@;'; put 'put ''LmNsb3VkIiwiKi5vbi1rM3MuaW8iLCIqLm9uLXJpby5pbyIsInJhdnBhZ2UuY28uaWwiLCJyZWFkdGhlZG9jcy1ob3N0ZWQuY29tIiwicmVhZHRoZWRvY3MuaW8iLCJyaGNsb3VkLmNvbSIsImluc3RhbmNlcy5zcGF3bi5jYyIsIm9ucmVuZGVyLmNvbSIsImFwcC5yZW5kZXIuY29tIiwicmVw''@;'; put 'put ''bGl0LmFwcCIsImlkLnJlcGxpdC5hcHAiLCJmaXJld2FsbGVkcmVwbGl0LmNvIiwiaWQuZmlyZXdhbGxlZHJlcGxpdC5jbyIsInJlcGwuY28iLCJpZC5yZXBsLmNvIiwicmVwbGl0LmRldiIsImFyY2hlci5yZXBsaXQuZGV2IiwiYm9uZXMucmVwbGl0LmRldiIsImNhbmFyeS5yZXBsaXQuZGV2''@;'; put 'put ''IiwiZ2xvYmFsLnJlcGxpdC5kZXYiLCJoYWNrZXIucmVwbGl0LmRldiIsImlkLnJlcGxpdC5kZXYiLCJqYW5ld2F5LnJlcGxpdC5kZXYiLCJraW0ucmVwbGl0LmRldiIsImtpcmEucmVwbGl0LmRldiIsImtpcmsucmVwbGl0LmRldiIsIm9kby5yZXBsaXQuZGV2IiwicGFyaXMucmVwbGl0LmRl''@;'; put 'put ''diIsInBpY2FyZC5yZXBsaXQuZGV2IiwicGlrZS5yZXBsaXQuZGV2IiwicHJlcmVsZWFzZS5yZXBsaXQuZGV2IiwicmVlZC5yZXBsaXQuZGV2IiwicmlrZXIucmVwbGl0LmRldiIsInNpc2tvLnJlcGxpdC5kZXYiLCJzcG9jay5yZXBsaXQuZGV2Iiwic3RhZ2luZy5yZXBsaXQuZGV2Iiwic3Vs''@;'; put 'put ''dS5yZXBsaXQuZGV2IiwidGFycGl0LnJlcGxpdC5kZXYiLCJ0ZWFtcy5yZXBsaXQuZGV2IiwidHVja2VyLnJlcGxpdC5kZXYiLCJ3ZXNsZXkucmVwbGl0LmRldiIsIndvcmYucmVwbGl0LmRldiIsInJlcGwucnVuIiwicmVzaW5kZXZpY2UuaW8iLCJkZXZpY2VzLnJlc2luc3RhZ2luZy5pbyIs''@;'; put 'put ''Imh6Yy5pbyIsImFkaW1vLmNvLnVrIiwiaXRjb3VsZGJld29yLnNlIiwiYXVzLmJhc2tldGJhbGwiLCJuei5iYXNrZXRiYWxsIiwiZ2l0LXBhZ2VzLnJpdC5lZHUiLCJyb2NreS5wYWdlIiwicnViLmRlIiwicnVoci11bmktYm9jaHVtLmRlIiwiaW8ubm9jLnJ1aHItdW5pLWJvY2h1bS5kZSIs''@;'; put 'put ''Ilx1MDQzMVx1MDQzOFx1MDQzNy5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0M2FcdTA0M2VcdTA0M2MuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDNhXHUwNDQwXHUwNDRiXHUwNDNjLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQzY1x1MDQzOFx1MDQ0MC5cdTA0NDBcdTA0NDNcdTA0NDEi''@;'; put 'put ''LCJcdTA0M2NcdTA0NDFcdTA0M2EuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDNlXHUwNDQwXHUwNDMzLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQ0MVx1MDQzMFx1MDQzY1x1MDQzMFx1MDQ0MFx1MDQzMC5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0NDFcdTA0M2VcdTA0NDdcdTA0Mzgu''@;'; put 'put ''XHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDQxXHUwNDNmXHUwNDMxLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQ0Zi5cdTA0NDBcdTA0NDNcdTA0NDEiLCJyYXMucnUiLCJueWF0LmFwcCIsIjE4MHIuY29tIiwiZG9qaW4uY29tIiwic2FrdXJhdGFuLmNvbSIsInNha3VyYXdlYi5jb20iLCJ4''@;'; put 'put ''MC5jb20iLCIyLWQuanAiLCJib25hLmpwIiwiY3JhcC5qcCIsImRheW5pZ2h0LmpwIiwiZWVrLmpwIiwiZmxvcC5qcCIsImhhbGZtb29uLmpwIiwiamVlei5qcCIsIm1hdHJpeC5qcCIsIm1pbW96YS5qcCIsIml2b3J5Lm5lLmpwIiwibWFpbC1ib3gubmUuanAiLCJtaW50cy5uZS5qcCIsIm1v''@;'; put 'put ''a3VyZW4ubmUuanAiLCJvcGFsLm5lLmpwIiwic2FrdXJhLm5lLmpwIiwic3Vtb21vLm5lLmpwIiwidG9wYXoubmUuanAiLCJuZXRnYW1lcnMuanAiLCJueWFudGEuanAiLCJvMG8wLmpwIiwicmR5LmpwIiwicmdyLmpwIiwicnVsZXouanAiLCJzMy5pc2swMS5zYWt1cmFzdG9yYWdlLmpwIiwi''@;'; put 'put ''czMuaXNrMDIuc2FrdXJhc3RvcmFnZS5qcCIsInNhbG9vbi5qcCIsInNibG8uanAiLCJza3IuanAiLCJ0YW5rLmpwIiwidWgtb2guanAiLCJ1bmRvLmpwIiwicnMud2ViYWNjZWwuanAiLCJ1c2VyLndlYmFjY2VsLmpwIiwid2Vic296YWkuanAiLCJ4aWkuanAiLCJzcXVhcmVzLm5ldCIsImpw''@;'; put 'put ''bi5vcmciLCJraXJhcmEuc3QiLCJ4MC50byIsImZyb20udHYiLCJzYWt1cmEudHYiLCIqLmJ1aWxkZXIuY29kZS5jb20iLCIqLmRldi1idWlsZGVyLmNvZGUuY29tIiwiKi5zdGctYnVpbGRlci5jb2RlLmNvbSIsIiouMDAxLnRlc3QuY29kZS1idWlsZGVyLXN0Zy5wbGF0Zm9ybS5zYWxlc2Zv''@;'; put 'put ''cmNlLmNvbSIsIiouZC5jcm0uZGV2IiwiKi53LmNybS5kZXYiLCIqLndhLmNybS5kZXYiLCIqLndiLmNybS5kZXYiLCIqLndjLmNybS5kZXYiLCIqLndkLmNybS5kZXYiLCIqLndlLmNybS5kZXYiLCIqLndmLmNybS5kZXYiLCJzYW5kY2F0cy5pbyIsImxvZ29pcC5jb20iLCJsb2dvaXAuZGUi''@;'; put 'put ''LCJmci1wYXItMS5iYXJlbWV0YWwuc2N3LmNsb3VkIiwiZnItcGFyLTIuYmFyZW1ldGFsLnNjdy5jbG91ZCIsIm5sLWFtcy0xLmJhcmVtZXRhbC5zY3cuY2xvdWQiLCJjb2NrcGl0LmZyLXBhci5zY3cuY2xvdWQiLCJmbmMuZnItcGFyLnNjdy5jbG91ZCIsImZ1bmN0aW9ucy5mbmMuZnItcGFy''@;'; put 'put ''LnNjdy5jbG91ZCIsIms4cy5mci1wYXIuc2N3LmNsb3VkIiwibm9kZXMuazhzLmZyLXBhci5zY3cuY2xvdWQiLCJzMy5mci1wYXIuc2N3LmNsb3VkIiwiczMtd2Vic2l0ZS5mci1wYXIuc2N3LmNsb3VkIiwid2htLmZyLXBhci5zY3cuY2xvdWQiLCJwcml2Lmluc3RhbmNlcy5zY3cuY2xvdWQi''@;'; put 'put ''LCJwdWIuaW5zdGFuY2VzLnNjdy5jbG91ZCIsIms4cy5zY3cuY2xvdWQiLCJjb2NrcGl0Lm5sLWFtcy5zY3cuY2xvdWQiLCJrOHMubmwtYW1zLnNjdy5jbG91ZCIsIm5vZGVzLms4cy5ubC1hbXMuc2N3LmNsb3VkIiwiczMubmwtYW1zLnNjdy5jbG91ZCIsInMzLXdlYnNpdGUubmwtYW1zLnNj''@;'; put 'put ''dy5jbG91ZCIsIndobS5ubC1hbXMuc2N3LmNsb3VkIiwiY29ja3BpdC5wbC13YXcuc2N3LmNsb3VkIiwiazhzLnBsLXdhdy5zY3cuY2xvdWQiLCJub2Rlcy5rOHMucGwtd2F3LnNjdy5jbG91ZCIsInMzLnBsLXdhdy5zY3cuY2xvdWQiLCJzMy13ZWJzaXRlLnBsLXdhdy5zY3cuY2xvdWQiLCJz''@;'; put 'put ''Y2FsZWJvb2suc2N3LmNsb3VkIiwic21hcnRsYWJlbGluZy5zY3cuY2xvdWQiLCJkZWRpYm94LmZyIiwic2Nob2tva2Vrcy5uZXQiLCJnb3Yuc2NvdCIsInNlcnZpY2UuZ292LnNjb3QiLCJzY3J5c2VjLmNvbSIsImNsaWVudC5zY3J5cHRlZC5pbyIsImZpcmV3YWxsLWdhdGV3YXkuY29tIiwi''@;'; put 'put ''ZmlyZXdhbGwtZ2F0ZXdheS5kZSIsIm15LWdhdGV3YXkuZGUiLCJteS1yb3V0ZXIuZGUiLCJzcGRucy5kZSIsInNwZG5zLmV1IiwiZmlyZXdhbGwtZ2F0ZXdheS5uZXQiLCJteS1maXJld2FsbC5vcmciLCJteWZpcmV3YWxsLm9yZyIsInNwZG5zLm9yZyIsInNlaWRhdC5uZXQiLCJzZWxsZnku''@;'; put 'put ''c3RvcmUiLCJtaW5pc2l0ZS5tcyIsInNlbnNlZXJpbmcubmV0Iiwic2VydmVib2x0LmNsb3VkIiwiYml6LnVhIiwiY28udWEiLCJwcC51YSIsImFzLnNoLmNuIiwic2hlZXp5LmdhbWVzIiwic2hpZnRlZGl0LmlvIiwibXlzaG9wYmxvY2tzLmNvbSIsIm15c2hvcGlmeS5jb20iLCJzaG9waXRz''@;'; put 'put ''aXRlLmNvbSIsInNob3B3YXJlLnNob3AiLCJzaG9wd2FyZS5zdG9yZSIsIm1vLXNpZW1lbnMuaW8iLCIxa2FwcC5jb20iLCJhcHBjaGl6aS5jb20iLCJhcHBsaW56aS5jb20iLCJzaW5hYXBwLmNvbSIsInZpcHNpbmFhcHAuY29tIiwic2l0ZWxlYWYubmV0Iiwic21hbGwtd2ViLm9yZyIsImFl''@;'; put 'put ''cm9wb3J0LmZyIiwiYXZvY2F0LmZyIiwiY2hhbWJhZ3JpLmZyIiwiY2hpcnVyZ2llbnMtZGVudGlzdGVzLmZyIiwiZXhwZXJ0cy1jb21wdGFibGVzLmZyIiwibWVkZWNpbi5mciIsIm5vdGFpcmVzLmZyIiwicGhhcm1hY2llbi5mciIsInBvcnQuZnIiLCJ2ZXRlcmluYWlyZS5mciIsInZwNC5t''@;'; put 'put ''ZSIsIiouc25vd2ZsYWtlLmFwcCIsIioucHJpdmF0ZWxpbmsuc25vd2ZsYWtlLmFwcCIsInN0cmVhbWxpdC5hcHAiLCJzdHJlYW1saXRhcHAuY29tIiwidHJ5LXNub3dwbG93LmNvbSIsIm1hZmVsby5uZXQiLCJwbGF5c3RhdGlvbi1jbG91ZC5jb20iLCJzcmh0LnNpdGUiLCJhcHBzLmxhaXIu''@;'; put 'put ''aW8iLCIqLnN0b2xvcy5pbyIsInNwYWNla2l0LmlvIiwiaW5kLm1vbSIsImN1c3RvbWVyLnNwZWVkcGFydG5lci5kZSIsIm15c3ByZWFkc2hvcC5hdCIsIm15c3ByZWFkc2hvcC5jb20uYXUiLCJteXNwcmVhZHNob3AuYmUiLCJteXNwcmVhZHNob3AuY2EiLCJteXNwcmVhZHNob3AuY2giLCJt''@;'; put 'put ''eXNwcmVhZHNob3AuY29tIiwibXlzcHJlYWRzaG9wLmRlIiwibXlzcHJlYWRzaG9wLmRrIiwibXlzcHJlYWRzaG9wLmVzIiwibXlzcHJlYWRzaG9wLmZpIiwibXlzcHJlYWRzaG9wLmZyIiwibXlzcHJlYWRzaG9wLmllIiwibXlzcHJlYWRzaG9wLml0IiwibXlzcHJlYWRzaG9wLm5ldCIsIm15''@;'; put 'put ''c3ByZWFkc2hvcC5ubCIsIm15c3ByZWFkc2hvcC5ubyIsIm15c3ByZWFkc2hvcC5wbCIsIm15c3ByZWFkc2hvcC5zZSIsIm15c3ByZWFkc2hvcC5jby51ayIsInctY29ycC1zdGF0aWNibGl0ei5jb20iLCJ3LWNyZWRlbnRpYWxsZXNzLXN0YXRpY2JsaXR6LmNvbSIsInctc3RhdGljYmxpdHou''@;'; put 'put ''Y29tIiwic3RhY2toZXJvLW5ldHdvcmsuY29tIiwicnVucy5vbnN0YWNraXQuY2xvdWQiLCJzdGFja2l0LmdnIiwic3RhY2tpdC5yb2NrcyIsInN0YWNraXQucnVuIiwic3RhY2tpdC56b25lIiwibXVzaWNpYW4uaW8iLCJub3ZlY29yZS5zaXRlIiwiYXBpLnN0ZGxpYi5jb20iLCJmZWVkYmFj''@;'; put 'put ''ay5hYyIsImZvcm1zLmFjIiwiYXNzZXNzbWVudHMuY3giLCJjYWxjdWxhdG9ycy5jeCIsImZ1bm5lbHMuY3giLCJwYXlub3cuY3giLCJxdWl6emVzLmN4IiwicmVzZWFyY2hlZC5jeCIsInRlc3RzLmN4Iiwic3VydmV5cy5zbyIsInN0b3JlYmFzZS5zdG9yZSIsInN0b3JpcHJlc3MuYXBwIiwi''@;'; put 'put ''c3RvcmouZmFybSIsInN0cmFwaWFwcC5jb20iLCJtZWRpYS5zdHJhcGlhcHAuY29tIiwidnBzLWhvc3QubmV0IiwiYXRsLmplbGFzdGljLnZwcy1ob3N0Lm5ldCIsIm5qcy5qZWxhc3RpYy52cHMtaG9zdC5uZXQiLCJyaWMuamVsYXN0aWMudnBzLWhvc3QubmV0Iiwic3RyZWFrLWxpbmsuY29t''@;'; put 'put ''Iiwic3RyZWFrbGlua3MuY29tIiwic3RyZWFrdXNlcmNvbnRlbnQuY29tIiwic29jLnNyY2YubmV0IiwidXNlci5zcmNmLm5ldCIsInV0d2VudGUuaW8iLCJ0ZW1wLWRucy5jb20iLCJzdXBhYmFzZS5jbyIsInN1cGFiYXNlLmluIiwic3VwYWJhc2UubmV0Iiwic3luY2xvdWQuaXQiLCJkc2Ns''@;'; put 'put ''b3VkLmJpeiIsImRpcmVjdC5xdWlja2Nvbm5lY3QuY24iLCJkc215bmFzLmNvbSIsImZhbWlseWRzLmNvbSIsImRpc2tzdGF0aW9uLm1lIiwiZHNjbG91ZC5tZSIsImkyMzQubWUiLCJteWRzLm1lIiwic3lub2xvZ3kubWUiLCJkc2Nsb3VkLm1vYmkiLCJkc215bmFzLm5ldCIsImZhbWlseWRz''@;'; put 'put ''Lm5ldCIsImRzbXluYXMub3JnIiwiZmFtaWx5ZHMub3JnIiwiZGlyZWN0LnF1aWNrY29ubmVjdC50byIsInZwbnBsdXMudG8iLCJteXRhYml0LmNvbSIsIm15dGFiaXQuY28uaWwiLCJ0YWJpdG9yZGVyLmNvLmlsIiwidGFpZnVuLWRucy5kZSIsInRzLm5ldCIsIiouYy50cy5uZXQiLCJnZGEu''@;'; put 'put ''cGwiLCJnZGFuc2sucGwiLCJnZHluaWEucGwiLCJtZWQucGwiLCJzb3BvdC5wbCIsInRhdmV1c2VyY29udGVudC5jb20iLCJwLnRhd2suZW1haWwiLCJwLnRhd2t0by5lbWFpbCIsInNpdGUudGItaG9zdGluZy5jb20iLCJlZHVnaXQuaW8iLCJzMy50ZWNraWRzLm9yZyIsInRlbGViaXQuYXBw''@;'; put 'put ''IiwidGVsZWJpdC5pbyIsIioudGVsZWJpdC54eXoiLCIqLmZpcmVuZXQuY2giLCIqLnN2Yy5maXJlbmV0LmNoIiwicmVzZXJ2ZC5jb20iLCJ0aGluZ2R1c3RkYXRhLmNvbSIsImN1c3QuZGV2LnRoaW5nZHVzdC5pbyIsInJlc2VydmQuZGV2LnRoaW5nZHVzdC5pbyIsImN1c3QuZGlzcmVjLnRo''@;'; put 'put ''aW5nZHVzdC5pbyIsInJlc2VydmQuZGlzcmVjLnRoaW5nZHVzdC5pbyIsImN1c3QucHJvZC50aGluZ2R1c3QuaW8iLCJjdXN0LnRlc3RpbmcudGhpbmdkdXN0LmlvIiwicmVzZXJ2ZC50ZXN0aW5nLnRoaW5nZHVzdC5pbyIsInRpY2tldHMuaW8iLCJhcnZvLm5ldHdvcmsiLCJhemltdXRoLm5l''@;'; put 'put ''dHdvcmsiLCJ0bG9uLm5ldHdvcmsiLCJ0b3Jwcm9qZWN0Lm5ldCIsInBhZ2VzLnRvcnByb2plY3QubmV0IiwidG93bm5ld3Mtc3RhZ2luZy5jb20iLCIxMmhwLmF0IiwiMml4LmF0IiwiNGxpbWEuYXQiLCJsaW1hLWNpdHkuYXQiLCIxMmhwLmNoIiwiMml4LmNoIiwiNGxpbWEuY2giLCJsaW1h''@;'; put 'put ''LWNpdHkuY2giLCJ0cmFmZmljcGxleC5jbG91ZCIsImRlLmNvb2wiLCIxMmhwLmRlIiwiMml4LmRlIiwiNGxpbWEuZGUiLCJsaW1hLWNpdHkuZGUiLCIxMzM3LnBpY3R1cmVzIiwiY2xhbi5yaXAiLCJsaW1hLWNpdHkucm9ja3MiLCJ3ZWJzcGFjZS5yb2NrcyIsImxpbWEuem9uZSIsIioudHJh''@;'; put 'put ''bnN1cmwuYmUiLCIqLnRyYW5zdXJsLmV1Iiwic2l0ZS50cmFuc2lwLm1lIiwiKi50cmFuc3VybC5ubCIsInR1eGZhbWlseS5vcmciLCJkZC1kbnMuZGUiLCJkcmF5LWRucy5kZSIsImRyYXlkbnMuZGUiLCJkeW4tdnBuLmRlIiwiZHludnBuLmRlIiwibWVpbi12aWdvci5kZSIsIm15LXZpZ29y''@;'; put 'put ''LmRlIiwibXktd2FuLmRlIiwic3luby1kcy5kZSIsInN5bm9sb2d5LWRpc2tzdGF0aW9uLmRlIiwic3lub2xvZ3ktZHMuZGUiLCJkaXNrc3RhdGlvbi5ldSIsImRpc2tzdGF0aW9uLm9yZyIsInR5cGVkcmVhbS5hcHAiLCJwcm8udHlwZWZvcm0uY29tIiwiKi51YmVyc3BhY2UuZGUiLCJ1YmVy''@;'; put 'put ''LnNwYWNlIiwiaGsuY29tIiwiaW5jLmhrIiwibHRkLmhrIiwiaGsub3JnIiwiaXQuY29tIiwidW5pc29uLXNlcnZpY2VzLmNsb3VkIiwidmlydHVhbC11c2VyLmRlIiwidmlydHVhbHVzZXIuZGUiLCJuYW1lLnBtIiwic2NoLnRmIiwiYml6LndmIiwic2NoLndmIiwib3JnLnl0IiwicnMuYmEi''@;'; put 'put ''LCJiaWVsc2tvLnBsIiwidXBsaS5pbyIsInVyb3duLmNsb3VkIiwiZG5zdXBkYXRlLmluZm8iLCJ1cy5vcmciLCJ2LnVhIiwiZXhwcmVzcy52YWwucnVuIiwid2ViLnZhbC5ydW4iLCJ2ZXJjZWwuYXBwIiwidjAuYnVpbGQiLCJ2ZXJjZWwuZGV2IiwidnVzZXJjb250ZW50Lm5ldCIsIm5vdy5z''@;'; put 'put ''aCIsIjIwMzguaW8iLCJyb3V0ZXIubWFuYWdlbWVudCIsInYtaW5mby5pbmZvIiwidm9vcmxvcGVyLmNsb3VkIiwiKi52dWx0cm9iamVjdHMuY29tIiwid2FmZmxlY2VsbC5jb20iLCJ3ZWJmbG93LmlvIiwid2ViZmxvd3Rlc3QuaW8iLCIqLndlYmhhcmUuZGV2IiwiYm9va29ubGluZS5hcHAi''@;'; put 'put ''LCJob3RlbHdpdGhmbGlnaHQuY29tIiwicmVzZXJ2ZS1vbmxpbmUuY29tIiwicmVzZXJ2ZS1vbmxpbmUubmV0IiwiY3ByYXBpZC5jb20iLCJwbGVza25zLmNvbSIsIndwMi5ob3N0IiwicGRucy5wYWdlIiwicGxlc2sucGFnZSIsIndwc3F1YXJlZC5zaXRlIiwiKi53YWRsLnRvcCIsInJlbW90''@;'; put 'put ''ZXdkLmNvbSIsImJveC5jYSIsInBhZ2VzLndpYXJkd2ViLmNvbSIsInRvb2xmb3JnZS5vcmciLCJ3bWNsb3VkLm9yZyIsIndtZmxhYnMub3JnIiwid2RoLmFwcCIsInBhbmVsLmdnIiwiZGFlbW9uLnBhbmVsLmdnIiwid2l4c2l0ZS5jb20iLCJ3aXhzdHVkaW8uY29tIiwiZWRpdG9yeC5pbyIs''@;'; put 'put ''IndpeHN0dWRpby5pbyIsIndpeC5ydW4iLCJtZXNzd2l0aGRucy5jb20iLCJ3b2x0bGFiLWRlbW8uY29tIiwibXlmb3J1bS5jb21tdW5pdHkiLCJjb21tdW5pdHktcHJvLmRlIiwiZGlza3Vzc2lvbnNiZXJlaWNoLmRlIiwiY29tbXVuaXR5LXByby5uZXQiLCJtZWluZm9ydW0ubmV0IiwiYWZm''@;'; put 'put ''aW5pdHlsb3R0ZXJ5Lm9yZy51ayIsInJhZmZsZWVudHJ5Lm9yZy51ayIsIndlZWtseWxvdHRlcnkub3JnLnVrIiwid3BlbmdpbmVwb3dlcmVkLmNvbSIsImpzLndwZW5naW5lcG93ZXJlZC5jb20iLCJoYWxmLmhvc3QiLCJ4bmJheS5jb20iLCJ1Mi54bmJheS5jb20iLCJ1Mi1sb2NhbC54bmJh''@;'; put 'put ''eS5jb20iLCJjaXN0cm9uLm5sIiwiZGVtb24ubmwiLCJ4czRhbGwuc3BhY2UiLCJ5YW5kZXhjbG91ZC5uZXQiLCJzdG9yYWdlLnlhbmRleGNsb3VkLm5ldCIsIndlYnNpdGUueWFuZGV4Y2xvdWQubmV0Iiwib2ZmaWNpYWwuYWNhZGVteSIsInlvbGFzaXRlLmNvbSIsInlvbWJvLm1lIiwieW5o''@;'; put 'put ''LmZyIiwibm9ob3N0Lm1lIiwibm9oby5zdCIsInphLm5ldCIsInphLm9yZyIsInphcC5jbG91ZCIsInplYWJ1ci5hcHAiLCJic3MuZGVzaWduIiwiYmFzaWNzZXJ2ZXIuaW8iLCJ2aXJ0dWFsc2VydmVyLmlvIiwiZW50ZXJwcmlzZWNsb3VkLm51Il0ucmVkdWNlKChXLHEpPT57Y29uc3QgZWU9''@;'; put 'put ''cS5yZXBsYWNlKC9eKFwqXC58XCEpLywiIiksSj13LnRvQVNDSUkoZWUpLHJlPXEuY2hhckF0KDApO2lmKFcuaGFzKEopKXRocm93IG5ldyBFcnJvcihgTXVsdGlwbGUgcnVsZXMgZm91bmQgZm9yICR7cX0gKCR7Sn0pYCk7cmV0dXJuIFcuc2V0KEose3J1bGU6cSxzdWZmaXg6ZWUscHVueVN1''@;'; put 'put ''ZmZpeDpKLHdpbGRjYXJkOiIqIj09PXJlLGV4Y2VwdGlvbjoiISI9PT1yZX0pLFd9LG5ldyBNYXApLHo9e0RPTUFJTl9UT09fU0hPUlQ6IkRvbWFpbiBuYW1lIHRvbyBzaG9ydC4iLERPTUFJTl9UT09fTE9ORzoiRG9tYWluIG5hbWUgdG9vIGxvbmcuIEl0IHNob3VsZCBiZSBubyBtb3JlIHRo''@;'; put 'put ''YW4gMjU1IGNoYXJzLiIsTEFCRUxfU1RBUlRTX1dJVEhfREFTSDoiRG9tYWluIG5hbWUgbGFiZWwgY2FuIG5vdCBzdGFydCB3aXRoIGEgZGFzaC4iLExBQkVMX0VORFNfV0lUSF9EQVNIOiJEb21haW4gbmFtZSBsYWJlbCBjYW4gbm90IGVuZCB3aXRoIGEgZGFzaC4iLExBQkVMX1RPT19MT05H''@;'; put 'put ''OiJEb21haW4gbmFtZSBsYWJlbCBzaG91bGQgYmUgYXQgbW9zdCA2MyBjaGFycyBsb25nLiIsTEFCRUxfVE9PX1NIT1JUOiJEb21haW4gbmFtZSBsYWJlbCBzaG91bGQgYmUgYXQgbGVhc3QgMSBjaGFyYWN0ZXIgbG9uZy4iLExBQkVMX0lOVkFMSURfQ0hBUlM6IkRvbWFpbiBuYW1lIGxhYmVs''@;'; put 'put ''IGNhbiBvbmx5IGNvbnRhaW4gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgb3IgZGFzaGVzLiJ9LE89Vz0+e2lmKCJzdHJpbmciIT10eXBlb2YgVyl0aHJvdyBuZXcgVHlwZUVycm9yKCJEb21haW4gbmFtZSBtdXN0IGJlIGEgc3RyaW5nLiIpO2xldCBxPVcuc2xpY2UoMCkudG9Mb3dlckNhc2Uo''@;'; put 'put ''KTsiLiI9PT1xLmNoYXJBdChxLmxlbmd0aC0xKSYmKHE9cS5zbGljZSgwLHEubGVuZ3RoLTEpKTtjb25zdCBlZT0oVz0+e2NvbnN0IHE9dy50b0FTQ0lJKFcpO2lmKHEubGVuZ3RoPDEpcmV0dXJuIkRPTUFJTl9UT09fU0hPUlQiO2lmKHEubGVuZ3RoPjI1NSlyZXR1cm4iRE9NQUlOX1RPT19M''@;'; put 'put ''T05HIjtjb25zdCBlZT1xLnNwbGl0KCIuIik7bGV0IEo7Zm9yKGxldCByZT0wO3JlPGVlLmxlbmd0aDsrK3JlKXtpZihKPWVlW3JlXSwhSi5sZW5ndGgpcmV0dXJuIkxBQkVMX1RPT19TSE9SVCI7aWYoSi5sZW5ndGg+NjMpcmV0dXJuIkxBQkVMX1RPT19MT05HIjtpZigiLSI9PT1KLmNoYXJB''@;'; put 'put ''dCgwKSlyZXR1cm4iTEFCRUxfU1RBUlRTX1dJVEhfREFTSCI7aWYoIi0iPT09Si5jaGFyQXQoSi5sZW5ndGgtMSkpcmV0dXJuIkxBQkVMX0VORFNfV0lUSF9EQVNIIjtpZighL15bYS16MC05XC1fXSskLy50ZXN0KEopKXJldHVybiJMQUJFTF9JTlZBTElEX0NIQVJTIn19KShxKTtpZihlZSly''@;'; put 'put ''ZXR1cm57aW5wdXQ6VyxlcnJvcjp7bWVzc2FnZTp6W2VlXSxjb2RlOmVlfX07Y29uc3QgSj17aW5wdXQ6Vyx0bGQ6bnVsbCxzbGQ6bnVsbCxkb21haW46bnVsbCxzdWJkb21haW46bnVsbCxsaXN0ZWQ6ITF9LHJlPXEuc3BsaXQoIi4iKTtpZigibG9jYWwiPT09cmVbcmUubGVuZ3RoLTFdKXJl''@;'; put 'put ''dHVybiBKO2NvbnN0IGllPSgpPT4oL3huLS0vLnRlc3QocSkmJihKLmRvbWFpbiYmKEouZG9tYWluPXcudG9BU0NJSShKLmRvbWFpbikpLEouc3ViZG9tYWluJiYoSi5zdWJkb21haW49dy50b0FTQ0lJKEouc3ViZG9tYWluKSkpLEopLHVlPShXPT57Y29uc3QgcT13LnRvQVNDSUkoVykuc3Bs''@;'; put 'put ''aXQoIi4iKTtmb3IobGV0IGVlPTA7ZWU8cS5sZW5ndGg7ZWUrKyl7Y29uc3QgSj1xLnNsaWNlKGVlKS5qb2luKCIuIikscmU9Ri5nZXQoSik7aWYocmUpcmV0dXJuIHJlfXJldHVybiBudWxsfSkocSk7aWYoIXVlKXJldHVybiByZS5sZW5ndGg8Mj9KOihKLnRsZD1yZS5wb3AoKSxKLnNsZD1y''@;'; put 'put ''ZS5wb3AoKSxKLmRvbWFpbj1bSi5zbGQsSi50bGRdLmpvaW4oIi4iKSxyZS5sZW5ndGgmJihKLnN1YmRvbWFpbj1yZS5wb3AoKSksaWUoKSk7Si5saXN0ZWQ9ITA7Y29uc3QgZ2U9dWUuc3VmZml4LnNwbGl0KCIuIiksX2U9cmUuc2xpY2UoMCxyZS5sZW5ndGgtZ2UubGVuZ3RoKTtyZXR1cm4g''@;'; put 'put ''dWUuZXhjZXB0aW9uJiZfZS5wdXNoKGdlLnNoaWZ0KCkpLEoudGxkPWdlLmpvaW4oIi4iKSwhX2UubGVuZ3RofHwodWUud2lsZGNhcmQmJihnZS51bnNoaWZ0KF9lLnBvcCgpKSxKLnRsZD1nZS5qb2luKCIuIikpLCFfZS5sZW5ndGgpfHwoSi5zbGQ9X2UucG9wKCksSi5kb21haW49W0ouc2xk''@;'; put 'put ''LEoudGxkXS5qb2luKCIuIiksX2UubGVuZ3RoJiYoSi5zdWJkb21haW49X2Uuam9pbigiLiIpKSksaWUoKX0sSz1XPT5XJiZPKFcpLmRvbWFpbnx8bnVsbCxaPVc9Pntjb25zdCBxPU8oVyk7cmV0dXJuISghcS5kb21haW58fCFxLmxpc3RlZCl9O1guZGVmYXVsdD17cGFyc2U6TyxnZXQ6Syxp''@;'; put 'put ''c1ZhbGlkOlp9LFguZXJyb3JDb2Rlcz16LFguZ2V0PUssWC5pc1ZhbGlkPVosWC5wYXJzZT1PfSw0OTQ2OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJhZXMtMTI4LWVjYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjAsIm1vZGUiOiJFQ0IiLCJ0''@;'; put 'put ''eXBlIjoiYmxvY2sifSwiYWVzLTE5Mi1lY2IiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjowLCJtb2RlIjoiRUNCIiwidHlwZSI6ImJsb2NrIn0sImFlcy0yNTYtZWNiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MCwibW9kZSI6IkVDQiIsInR5cGUiOiJibG9jayJ9''@;'; put 'put ''LCJhZXMtMTI4LWNiYyI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xOTItY2JjIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTI1Ni1j''@;'; put 'put ''YmMiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMxMjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMxOTIiOnsiY2lwaGVyIjoiQUVTIiwi''@;'; put 'put ''a2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMyNTYiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTI4LWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2''@;'; put 'put ''LCJtb2RlIjoiQ0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoi''@;'; put 'put ''Q0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWNmYjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNGQjgiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY2ZiOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCOCIs''@;'; put 'put ''InR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jZmI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkI4IiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWNmYjEiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNGQjEiLCJ0eXBl''@;'; put 'put ''Ijoic3RyZWFtIn0sImFlcy0xOTItY2ZiMSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCMSIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jZmIxIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkIxIiwidHlwZSI6InN0''@;'; put 'put ''cmVhbSJ9LCJhZXMtMTI4LW9mYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLW9mYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJh''@;'; put 'put ''ZXMtMjU2LW9mYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWN0ciI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWN0''@;'; put 'put ''ciI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWN0ciI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWdjbSI6eyJjaXBo''@;'; put 'put ''ZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjEyLCJtb2RlIjoiR0NNIiwidHlwZSI6ImF1dGgifSwiYWVzLTE5Mi1nY20iOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxMiwibW9kZSI6IkdDTSIsInR5cGUiOiJhdXRoIn0sImFlcy0yNTYtZ2NtIjp7ImNpcGhlciI6IkFFUyIsImtl''@;'; put 'put ''eSI6MjU2LCJpdiI6MTIsIm1vZGUiOiJHQ00iLCJ0eXBlIjoiYXV0aCJ9fScpfSw1MjA3OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJzaGEyMjRXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiMzAyZDMwMGQw''@;'; put 'put ''NjA5NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWMifSwiUlNBLVNIQTIyNCI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiMzAyZDMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWMifSwic2hhMjU2V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJz''@;'; put 'put ''YSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IjMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwIn0sIlJTQS1TSEEyNTYiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IjMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwIn0sInNo''@;'; put 'put ''YTM4NFdpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIzMDQxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQzMCJ9LCJSU0EtU0hBMzg0Ijp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIzMDQxMzAwZDA2''@;'; put 'put ''MDk2MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQzMCJ9LCJzaGE1MTJXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDAifSwiUlNBLVNIQTUxMiI6eyJzaWduIjoiZWNkc2EvcnNh''@;'; put 'put ''IiwiaGFzaCI6InNoYTUxMiIsImlkIjoiMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDAifSwiUlNBLVNIQTEiOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGExIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjBlMDMwMjFhMDUwMDA0MTQifSwiZWNkc2Etd2l0aC1TSEExIjp7InNp''@;'; put 'put ''Z24iOiJlY2RzYSIsImhhc2giOiJzaGExIiwiaWQiOiIifSwic2hhMjU2Ijp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IiJ9LCJzaGEyMjQiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiIn0sInNoYTM4NCI6eyJzaWduIjoiZWNkc2EiLCJoYXNo''@;'; put 'put ''Ijoic2hhMzg0IiwiaWQiOiIifSwic2hhNTEyIjp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IiJ9LCJEU0EtU0hBIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sIkRTQS1TSEExIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0s''@;'; put 'put ''IkRTQSI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEEyMjQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IiJ9LCJEU0EtU0hBMjI0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIifSwiRFNBLVdJVEgtU0hB''@;'; put 'put ''MjU2Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIifSwiRFNBLVNIQTI1NiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTM4NCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiIn0sIkRTQS1TSEEzODQi''@;'; put 'put ''Onsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEE1MTIiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IiJ9LCJEU0EtU0hBNTEyIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIifSwiRFNBLVJJUEVNRDE2MCI6''@;'; put 'put ''eyJzaWduIjoiZHNhIiwiaGFzaCI6InJtZDE2MCIsImlkIjoiIn0sInJpcGVtZDE2MFdpdGhSU0EiOnsic2lnbiI6InJzYSIsImhhc2giOiJybWQxNjAiLCJpZCI6IjMwMjEzMDA5MDYwNTJiMjQwMzAyMDEwNTAwMDQxNCJ9LCJSU0EtUklQRU1EMTYwIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoi''@;'; put 'put ''cm1kMTYwIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjI0MDMwMjAxMDUwMDA0MTQifSwibWQ1V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJtZDUiLCJpZCI6IjMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMCJ9LCJSU0EtTUQ1Ijp7InNpZ24iOiJyc2Ei''@;'; put 'put ''LCJoYXNoIjoibWQ1IiwiaWQiOiIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjA1MDUwMDA0MTAifX0nKX0sMTMwODpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPUpTT04ucGFyc2UoJ3siMS4zLjEzMi4wLjEwIjoic2VjcDI1NmsxIiwiMS4zLjEzMi4wLjMzIjoicDIyNCIsIjEuMi44''@;'; put 'put ''NDAuMTAwNDUuMy4xLjEiOiJwMTkyIiwiMS4yLjg0MC4xMDA0NS4zLjEuNyI6InAyNTYiLCIxLjMuMTMyLjAuMzQiOiJwMzg0IiwiMS4zLjEzMi4wLjM1IjoicDUyMSJ9Jyl9LDMyMDg6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1KU09OLnBhcnNlKCd7Ik9fUkRPTkxZIjowLCJPX1dS''@;'; put 'put ''T05MWSI6MSwiT19SRFdSIjoyLCJTX0lGTVQiOjYxNDQwLCJTX0lGUkVHIjozMjc2OCwiU19JRkRJUiI6MTYzODQsIlNfSUZDSFIiOjgxOTIsIlNfSUZCTEsiOjI0NTc2LCJTX0lGSUZPIjo0MDk2LCJTX0lGTE5LIjo0MDk2MCwiU19JRlNPQ0siOjQ5MTUyLCJPX0NSRUFUIjo1MTIsIk9fRVhD''@;'; put 'put ''TCI6MjA0OCwiT19OT0NUVFkiOjEzMTA3MiwiT19UUlVOQyI6MTAyNCwiT19BUFBFTkQiOjgsIk9fRElSRUNUT1JZIjoxMDQ4NTc2LCJPX05PRk9MTE9XIjoyNTYsIk9fU1lOQyI6MTI4LCJPX1NZTUxJTksiOjIwOTcxNTIsIk9fTk9OQkxPQ0siOjQsIlNfSVJXWFUiOjQ0OCwiU19JUlVTUiI6''@;'; put 'put ''MjU2LCJTX0lXVVNSIjoxMjgsIlNfSVhVU1IiOjY0LCJTX0lSV1hHIjo1NiwiU19JUkdSUCI6MzIsIlNfSVdHUlAiOjE2LCJTX0lYR1JQIjo4LCJTX0lSV1hPIjo3LCJTX0lST1RIIjo0LCJTX0lXT1RIIjoyLCJTX0lYT1RIIjoxLCJFMkJJRyI6NywiRUFDQ0VTIjoxMywiRUFERFJJTlVTRSI6''@;'; put 'put ''NDgsIkVBRERSTk9UQVZBSUwiOjQ5LCJFQUZOT1NVUFBPUlQiOjQ3LCJFQUdBSU4iOjM1LCJFQUxSRUFEWSI6MzcsIkVCQURGIjo5LCJFQkFETVNHIjo5NCwiRUJVU1kiOjE2LCJFQ0FOQ0VMRUQiOjg5LCJFQ0hJTEQiOjEwLCJFQ09OTkFCT1JURUQiOjUzLCJFQ09OTlJFRlVTRUQiOjYxLCJF''@;'; put 'put ''Q09OTlJFU0VUIjo1NCwiRURFQURMSyI6MTEsIkVERVNUQUREUlJFUSI6MzksIkVET00iOjMzLCJFRFFVT1QiOjY5LCJFRVhJU1QiOjE3LCJFRkFVTFQiOjE0LCJFRkJJRyI6MjcsIkVIT1NUVU5SRUFDSCI6NjUsIkVJRFJNIjo5MCwiRUlMU0VRIjo5MiwiRUlOUFJPR1JFU1MiOjM2LCJFSU5U''@;'; put 'put ''UiI6NCwiRUlOVkFMIjoyMiwiRUlPIjo1LCJFSVNDT05OIjo1NiwiRUlTRElSIjoyMSwiRUxPT1AiOjYyLCJFTUZJTEUiOjI0LCJFTUxJTksiOjMxLCJFTVNHU0laRSI6NDAsIkVNVUxUSUhPUCI6OTUsIkVOQU1FVE9PTE9ORyI6NjMsIkVORVRET1dOIjo1MCwiRU5FVFJFU0VUIjo1MiwiRU5F''@;'; put 'put ''VFVOUkVBQ0giOjUxLCJFTkZJTEUiOjIzLCJFTk9CVUZTIjo1NSwiRU5PREFUQSI6OTYsIkVOT0RFViI6MTksIkVOT0VOVCI6MiwiRU5PRVhFQyI6OCwiRU5PTENLIjo3NywiRU5PTElOSyI6OTcsIkVOT01FTSI6MTIsIkVOT01TRyI6OTEsIkVOT1BST1RPT1BUIjo0MiwiRU5PU1BDIjoyOCwi''@;'; put 'put ''RU5PU1IiOjk4LCJFTk9TVFIiOjk5LCJFTk9TWVMiOjc4LCJFTk9UQ09OTiI6NTcsIkVOT1RESVIiOjIwLCJFTk9URU1QVFkiOjY2LCJFTk9UU09DSyI6MzgsIkVOT1RTVVAiOjQ1LCJFTk9UVFkiOjI1LCJFTlhJTyI6NiwiRU9QTk9UU1VQUCI6MTAyLCJFT1ZFUkZMT1ciOjg0LCJFUEVSTSI6''@;'; put 'put ''MSwiRVBJUEUiOjMyLCJFUFJPVE8iOjEwMCwiRVBST1RPTk9TVVBQT1JUIjo0MywiRVBST1RPVFlQRSI6NDEsIkVSQU5HRSI6MzQsIkVST0ZTIjozMCwiRVNQSVBFIjoyOSwiRVNSQ0giOjMsIkVTVEFMRSI6NzAsIkVUSU1FIjoxMDEsIkVUSU1FRE9VVCI6NjAsIkVUWFRCU1kiOjI2LCJFV09V''@;'; put 'put ''TERCTE9DSyI6MzUsIkVYREVWIjoxOCwiU0lHSFVQIjoxLCJTSUdJTlQiOjIsIlNJR1FVSVQiOjMsIlNJR0lMTCI6NCwiU0lHVFJBUCI6NSwiU0lHQUJSVCI6NiwiU0lHSU9UIjo2LCJTSUdCVVMiOjEwLCJTSUdGUEUiOjgsIlNJR0tJTEwiOjksIlNJR1VTUjEiOjMwLCJTSUdTRUdWIjoxMSwi''@;'; put 'put ''U0lHVVNSMiI6MzEsIlNJR1BJUEUiOjEzLCJTSUdBTFJNIjoxNCwiU0lHVEVSTSI6MTUsIlNJR0NITEQiOjIwLCJTSUdDT05UIjoxOSwiU0lHU1RPUCI6MTcsIlNJR1RTVFAiOjE4LCJTSUdUVElOIjoyMSwiU0lHVFRPVSI6MjIsIlNJR1VSRyI6MTYsIlNJR1hDUFUiOjI0LCJTSUdYRlNaIjoy''@;'; put 'put ''NSwiU0lHVlRBTFJNIjoyNiwiU0lHUFJPRiI6MjcsIlNJR1dJTkNIIjoyOCwiU0lHSU8iOjIzLCJTSUdTWVMiOjEyLCJTU0xfT1BfQUxMIjoyMTQ3NDg2NzE5LCJTU0xfT1BfQUxMT1dfVU5TQUZFX0xFR0FDWV9SRU5FR09USUFUSU9OIjoyNjIxNDQsIlNTTF9PUF9DSVBIRVJfU0VSVkVSX1BS''@;'; put 'put ''RUZFUkVOQ0UiOjQxOTQzMDQsIlNTTF9PUF9DSVNDT19BTllDT05ORUNUIjozMjc2OCwiU1NMX09QX0NPT0tJRV9FWENIQU5HRSI6ODE5MiwiU1NMX09QX0NSWVBUT1BST19UTFNFWFRfQlVHIjoyMTQ3NDgzNjQ4LCJTU0xfT1BfRE9OVF9JTlNFUlRfRU1QVFlfRlJBR01FTlRTIjoyMDQ4LCJT''@;'; put 'put ''U0xfT1BfRVBIRU1FUkFMX1JTQSI6MCwiU1NMX09QX0xFR0FDWV9TRVJWRVJfQ09OTkVDVCI6NCwiU1NMX09QX01JQ1JPU09GVF9CSUdfU1NMVjNfQlVGRkVSIjozMiwiU1NMX09QX01JQ1JPU09GVF9TRVNTX0lEX0JVRyI6MSwiU1NMX09QX01TSUVfU1NMVjJfUlNBX1BBRERJTkciOjAsIlNT''@;'; put 'put ''TF9PUF9ORVRTQ0FQRV9DQV9ETl9CVUciOjUzNjg3MDkxMiwiU1NMX09QX05FVFNDQVBFX0NIQUxMRU5HRV9CVUciOjIsIlNTTF9PUF9ORVRTQ0FQRV9ERU1PX0NJUEhFUl9DSEFOR0VfQlVHIjoxMDczNzQxODI0LCJTU0xfT1BfTkVUU0NBUEVfUkVVU0VfQ0lQSEVSX0NIQU5HRV9CVUciOjgs''@;'; put 'put ''IlNTTF9PUF9OT19DT01QUkVTU0lPTiI6MTMxMDcyLCJTU0xfT1BfTk9fUVVFUllfTVRVIjo0MDk2LCJTU0xfT1BfTk9fU0VTU0lPTl9SRVNVTVBUSU9OX09OX1JFTkVHT1RJQVRJT04iOjY1NTM2LCJTU0xfT1BfTk9fU1NMdjIiOjE2Nzc3MjE2LCJTU0xfT1BfTk9fU1NMdjMiOjMzNTU0NDMy''@;'; put 'put ''LCJTU0xfT1BfTk9fVElDS0VUIjoxNjM4NCwiU1NMX09QX05PX1RMU3YxIjo2NzEwODg2NCwiU1NMX09QX05PX1RMU3YxXzEiOjI2ODQzNTQ1NiwiU1NMX09QX05PX1RMU3YxXzIiOjEzNDIxNzcyOCwiU1NMX09QX1BLQ1MxX0NIRUNLXzEiOjAsIlNTTF9PUF9QS0NTMV9DSEVDS18yIjowLCJT''@;'; put 'put ''U0xfT1BfU0lOR0xFX0RIX1VTRSI6MTA0ODU3NiwiU1NMX09QX1NJTkdMRV9FQ0RIX1VTRSI6NTI0Mjg4LCJTU0xfT1BfU1NMRUFZXzA4MF9DTElFTlRfREhfQlVHIjoxMjgsIlNTTF9PUF9TU0xSRUYyX1JFVVNFX0NFUlRfVFlQRV9CVUciOjAsIlNTTF9PUF9UTFNfQkxPQ0tfUEFERElOR19C''@;'; put 'put ''VUciOjUxMiwiU1NMX09QX1RMU19ENV9CVUciOjI1NiwiU1NMX09QX1RMU19ST0xMQkFDS19CVUciOjgzODg2MDgsIkVOR0lORV9NRVRIT0RfRFNBIjoyLCJFTkdJTkVfTUVUSE9EX0RIIjo0LCJFTkdJTkVfTUVUSE9EX1JBTkQiOjgsIkVOR0lORV9NRVRIT0RfRUNESCI6MTYsIkVOR0lORV9N''@;'; put 'put ''RVRIT0RfRUNEU0EiOjMyLCJFTkdJTkVfTUVUSE9EX0NJUEhFUlMiOjY0LCJFTkdJTkVfTUVUSE9EX0RJR0VTVFMiOjEyOCwiRU5HSU5FX01FVEhPRF9TVE9SRSI6MjU2LCJFTkdJTkVfTUVUSE9EX1BLRVlfTUVUSFMiOjUxMiwiRU5HSU5FX01FVEhPRF9QS0VZX0FTTjFfTUVUSFMiOjEwMjQs''@;'; put 'put ''IkVOR0lORV9NRVRIT0RfQUxMIjo2NTUzNSwiRU5HSU5FX01FVEhPRF9OT05FIjowLCJESF9DSEVDS19QX05PVF9TQUZFX1BSSU1FIjoyLCJESF9DSEVDS19QX05PVF9QUklNRSI6MSwiREhfVU5BQkxFX1RPX0NIRUNLX0dFTkVSQVRPUiI6NCwiREhfTk9UX1NVSVRBQkxFX0dFTkVSQVRPUiI6''@;'; put 'put ''OCwiTlBOX0VOQUJMRUQiOjEsIlJTQV9QS0NTMV9QQURESU5HIjoxLCJSU0FfU1NMVjIzX1BBRERJTkciOjIsIlJTQV9OT19QQURESU5HIjozLCJSU0FfUEtDUzFfT0FFUF9QQURESU5HIjo0LCJSU0FfWDkzMV9QQURESU5HIjo1LCJSU0FfUEtDUzFfUFNTX1BBRERJTkciOjYsIlBPSU5UX0NP''@;'; put 'put ''TlZFUlNJT05fQ09NUFJFU1NFRCI6MiwiUE9JTlRfQ09OVkVSU0lPTl9VTkNPTVBSRVNTRUQiOjQsIlBPSU5UX0NPTlZFUlNJT05fSFlCUklEIjo2LCJGX09LIjowLCJSX09LIjo0LCJXX09LIjoyLCJYX09LIjoxLCJVVl9VRFBfUkVVU0VBRERSIjo0fScpfSw5Nzk5OmNlPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO2NlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJtb2RwMSI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNh''@;'; put 'put ''NDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzYTM2MjBmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAyIjp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEy''@;'; put 'put ''OTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0''@;'; put 'put ''MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNjUzODFmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHA1Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUz''@;'; put 'put ''NDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1''@;'; put 'put ''OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTIzNzMyN2ZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE0Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZm''@;'; put 'put ''ZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlh''@;'; put 'put ''NjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2''@;'; put 'put ''NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWNhYTY4ZmZm''@;'; put 'put ''ZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTUiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2''@;'; put 'put ''ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0''@;'; put 'put ''Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgz''@;'; put 'put ''OTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2Qy''@;'; put 'put ''MjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5M2FkMmNhZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTYi''@;'; put 'put ''OnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0''@;'; put 'put ''NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYy''@;'; put 'put ''ZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5''@;'; put 'put ''OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4''@;'; put 'put ''NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5''@;'; put 'put ''NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4''@;'; put 'put ''OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDA2MzE5OWZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE3Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEz''@;'; put 'put ''OWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2Rj''@;'; put 'put ''MjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgz''@;'; put 'put ''YTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZl''@;'; put 'put ''MWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhl''@;'; put 'put ''NGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2Jh''@;'; put 'put ''MTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwMjg0OTIzNmMzZmFiNGQyN2M3MDI2YzFkNGRjYjI2MDI2NDZkZWM5NzUxZTc2M2RiYTM3YmRmOGZmOTQwNmFk''@;'; put 'put ''OWU1MzBlZTVkYjM4MmY0MTMwMDFhZWIwNmE1M2VkOTAyN2Q4MzExNzk3MjdiMDg2NWE4OTE4ZGEzZWRiZWJjZjliMTRlZDQ0Y2U2Y2JhY2VkNGJiMWJkYjdmMTQ0N2U2Y2MyNTRiMzMyMDUxNTEyYmQ3YWY0MjZmYjhmNDAxMzc4Y2QyYmY1OTgzY2EwMWM2NGI5MmVjZjAzMmVhMTVkMTcyMWQw''@;'; put 'put ''M2Y0ODJkN2NlNmU3NGZlZjZkNTVlNzAyZjQ2OTgwYzgyYjVhODQwMzE5MDBiMWM5ZTU5ZTdjOTdmYmVjN2U4ZjMyM2E5N2E3ZTM2Y2M4OGJlMGYxZDQ1YjdmZjU4NWFjNTRiZDQwN2IyMmI0MTU0YWFjYzhmNmQ3ZWJmNDhlMWQ4MTRjYzVlZDIwZjgwMzdlMGE3OTcxNWVlZjI5YmUzMjgwNmEx''@;'; put 'put ''ZDU4YmI3YzVkYTc2ZjU1MGFhM2Q4YTFmYmZmMGViMTljY2IxYTMxM2Q1NWNkYTU2YzllYzJlZjI5NjMyMzg3ZmU4ZDc2ZTNjMDQ2ODA0M2U4ZjY2M2Y0ODYwZWUxMmJmMmQ1YjBiNzQ3NGQ2ZTY5NGY5MWU2ZGNjNDAyNGZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE4Ijp7ImdlbiI6IjAyIiwi''@;'; put 'put ''cHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3''@;'; put 'put ''ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjll''@;'; put 'put ''ZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1''@;'; put 'put ''YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4''@;'; put 'put ''NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEy''@;'; put 'put ''NTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3''@;'; put 'put ''ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwMjg0OTIzNmMzZmFiNGQyN2M3MDI2YzFkNGRjYjI2MDI2NDZkZWM5NzUxZTc2M2RiYTM3YmRmOGZmOTQwNmFkOWU1MzBlZTVkYjM4MmY0MTMwMDFhZWIwNmE1M2VkOTAyN2Q4MzExNzk3MjdiMDg2NWE4OTE4ZGEzZWRiZWJjZjliMTRlZDQ0Y2U2Y2JhY2Vk''@;'; put 'put ''NGJiMWJkYjdmMTQ0N2U2Y2MyNTRiMzMyMDUxNTEyYmQ3YWY0MjZmYjhmNDAxMzc4Y2QyYmY1OTgzY2EwMWM2NGI5MmVjZjAzMmVhMTVkMTcyMWQwM2Y0ODJkN2NlNmU3NGZlZjZkNTVlNzAyZjQ2OTgwYzgyYjVhODQwMzE5MDBiMWM5ZTU5ZTdjOTdmYmVjN2U4ZjMyM2E5N2E3ZTM2Y2M4OGJl''@;'; put 'put ''MGYxZDQ1YjdmZjU4NWFjNTRiZDQwN2IyMmI0MTU0YWFjYzhmNmQ3ZWJmNDhlMWQ4MTRjYzVlZDIwZjgwMzdlMGE3OTcxNWVlZjI5YmUzMjgwNmExZDU4YmI3YzVkYTc2ZjU1MGFhM2Q4YTFmYmZmMGViMTljY2IxYTMxM2Q1NWNkYTU2YzllYzJlZjI5NjMyMzg3ZmU4ZDc2ZTNjMDQ2ODA0M2U4''@;'; put 'put ''ZjY2M2Y0ODYwZWUxMmJmMmQ1YjBiNzQ3NGQ2ZTY5NGY5MWU2ZGJlMTE1OTc0YTM5MjZmMTJmZWU1ZTQzODc3N2NiNmE5MzJkZjhjZDhiZWM0ZDA3M2I5MzFiYTNiYzgzMmI2OGQ5ZGQzMDA3NDFmYTdiZjhhZmM0N2VkMjU3NmY2OTM2YmE0MjQ2NjNhYWI2MzljNWFlNGY1NjgzNDIzYjQ3NDJi''@;'; put 'put ''ZjFjOTc4MjM4ZjE2Y2JlMzlkNjUyZGUzZmRiOGJlZmM4NDhhZDkyMjIyMmUwNGE0MDM3YzA3MTNlYjU3YTgxYTIzZjBjNzM0NzNmYzY0NmNlYTMwNmI0YmNiYzg4NjJmODM4NWRkZmE5ZDRiN2ZhMmMwODdlODc5NjgzMzAzZWQ1YmRkM2EwNjJiM2NmNWIzYTI3OGE2NmQyYTEzZjgzZjQ0Zjgy''@;'; put 'put ''ZGRmMzEwZWUwNzRhYjZhMzY0NTk3ZTg5OWEwMjU1ZGMxNjRmMzFjYzUwODQ2ODUxZGY5YWI0ODE5NWRlZDdlYTFiMWQ1MTBiZDdlZTc0ZDczZmFmMzZiYzMxZWNmYTI2ODM1OTA0NmY0ZWI4NzlmOTI0MDA5NDM4YjQ4MWM2Y2Q3ODg5YTAwMmVkNWVlMzgyYmM5MTkwZGE2ZmMwMjZlNDc5NTU4''@;'; put 'put ''ZTQ0NzU2NzdlOWFhOWUzMDUwZTI3NjU2OTRkZmM4MWY1NmU4ODBiOTZlNzE2MGM5ODBkZDk4ZWRkM2RmZmZmZmZmZmZmZmZmZmZmZiJ9fScpfSw4NTk3OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9e2k4OiI2LjYuMSJ9fSwyNTYyOmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9''@;'; put 'put ''SlNPTi5wYXJzZSgneyIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4xIjoiYWVzLTEyOC1lY2IiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yIjoiYWVzLTEyOC1jYmMiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4zIjoiYWVzLTEyOC1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40IjoiYWVzLTEyOC1j''@;'; put 'put ''ZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMSI6ImFlcy0xOTItZWNiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjIiOiJhZXMtMTkyLWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIzIjoiYWVzLTE5Mi1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yNCI6ImFlcy0xOTItY2ZiIiwi''@;'; put 'put ''Mi4xNi44NDAuMS4xMDEuMy40LjEuNDEiOiJhZXMtMjU2LWVjYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQyIjoiYWVzLTI1Ni1jYmMiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MyI6ImFlcy0yNTYtb2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDQiOiJhZXMtMjU2LWNmYiJ9Jyl9fSxf''@;'; put 'put ''X3dlYnBhY2tfbW9kdWxlX2NhY2hlX189e307ZnVuY3Rpb24gX19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI5MDU3MDVfXyhjZSl7dmFyIFg9X193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW2NlXTtpZih2b2lkIDAhPT1YKXJldHVybiBYLmV4cG9ydHM7dmFyIGI9X193ZWJwYWNrX21vZHVsZV9j''@;'; put 'put ''YWNoZV9fW2NlXT17aWQ6Y2UsbG9hZGVkOiExLGV4cG9ydHM6e319O3JldHVybiBfX3dlYnBhY2tfbW9kdWxlc19fW2NlXS5jYWxsKGIuZXhwb3J0cyxiLGIuZXhwb3J0cyxfX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjkwNTcwNV9fKSxiLmxvYWRlZD0hMCxiLmV4cG9ydHN9X19uZXN0ZWRf''@;'; put 'put ''d2VicGFja19yZXF1aXJlXzI5MDU3MDVfXy5kPShjZSxYKT0+e2Zvcih2YXIgYiBpbiBYKV9fbmVzdGVkX3dlYnBhY2tfcmVxdWlyZV8yOTA1NzA1X18ubyhYLGIpJiYhX19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI5MDU3MDVfXy5vKGNlLGIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoY2Us''@;'; put 'put ''Yix7ZW51bWVyYWJsZTohMCxnZXQ6WFtiXX0pfSxfX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjkwNTcwNV9fLmc9ZnVuY3Rpb24oKXtpZigib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMpcmV0dXJuIGdsb2JhbFRoaXM7dHJ5e3JldHVybiB0aGlzfHxuZXcgRnVuY3Rpb24oInJldHVybiB0''@;'; put 'put ''aGlzIikoKX1jYXRjaHtpZigib2JqZWN0Ij09dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93fX0oKSxfX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjkwNTcwNV9fLm89KGNlLFgpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2UsWCksX19uZXN0ZWRfd2VicGFja19y''@;'; put 'put ''ZXF1aXJlXzI5MDU3MDVfXy5yPWNlPT57dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGNlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoY2UsIl9fZXNNb2R1bGUiLHt2''@;'; put 'put ''YWx1ZTohMH0pfSxfX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjkwNTcwNV9fLm5tZD1jZT0+KGNlLnBhdGhzPVtdLGNlLmNoaWxkcmVufHwoY2UuY2hpbGRyZW49W10pLGNlKTt2YXIgX19uZXN0ZWRfd2VicGFja19leHBvcnRzX189X19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI5MDU3MDVf''@;'; put 'put ''XygzNjA3KTtyZXR1cm4gX19uZXN0ZWRfd2VicGFja19leHBvcnRzX199KSgpLG1vZHVsZS5leHBvcnRzPWIoKX0sMzc0NjpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6IidpbmppIiw1OiInaW5qaSIsODoiJ2luamkiLDcwOiInaW5qaSIsODA6''@;'; put 'put ''IidpbmppIiwyOiInbmppIiw3OiInbmppIiwyMDoiJ25qaSIsNTA6IiduamkiLDM6IidceGZjbmppIiw0OiInXHhmY25qaSIsMTAwOiInXHhmY25qaSIsNjoiJ25qeSIsOToiJ3VuankiLDEwOiIndW5qeSIsMzA6Iid1bmp5Iiw2MDoiJ3luankiLDkwOiIneW5qeSJ9O0kuZGVmaW5lTG9jYWxl''@;'; put 'put ''KCJ0ayIse21vbnRoczoiXHhkZGFud2FyX0Zld3JhbF9NYXJ0X0FwcmVsX01hXHhmZF9JXHhmZHVuX0lceGZkdWxfQXdndXN0X1NlbnRceGZkYWJyX09rdFx4ZmRhYnJfTm9ceGZkYWJyX0Rla2FiciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHhkZGFuX0Zld19NYXJfQXByX01hXHhmZF9J''@;'; put 'put ''XHhmZG5fSVx4ZmRsX0F3Z19TZW5fT2t0X05vXHhmZF9EZWsiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx4ZGRla1x1MDE1ZmVuYmVfRHVcdTAxNWZlbmJlX1NpXHUwMTVmZW5iZV9ceGM3YXJcdTAxNWZlbmJlX1Blblx1MDE1ZmVuYmVfQW5uYV9cdTAxNWVlbmJlIi5zcGxpdCgiXyIpLHdlZWtk''@;'; put 'put ''YXlzU2hvcnQ6Ilx4ZGRla19EdVx1MDE1Zl9TaVx1MDE1Zl9ceGM3YXJfUGVuX0Fubl9cdTAxNWVlbiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHhkZGtfRFx1MDE1Zl9TXHUwMTVmX1x4YzdyX1BuX0FuX1x1MDE1ZW4iLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIs''@;'; put 'put ''TFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbYnVnXHhmY24gc2FnYXRdIExUIixuZXh0RGF5OiJbZXJ0aXIgc2FnYXRd''@;'; put 'put ''IExUIixuZXh0V2VlazoiW2luZGlraV0gZGRkZCBbc2FnYXRdIExUIixsYXN0RGF5OiJbZFx4ZmNceGZkbl0gTFQiLGxhc3RXZWVrOiJbZ2VceGU3ZW5dIGRkZGQgW3NhZ2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgc29cdTAxNDgiLHBhc3Q6IiVzIFx4''@;'; put 'put ''ZjZcdTAxNDgiLHM6ImJpcm5ceGU0XHhlN2Ugc2VrdW50IixtOiJiaXIgbWludXQiLG1tOiIlZCBtaW51dCIsaDoiYmlyIHNhZ2F0IixoaDoiJWQgc2FnYXQiLGQ6ImJpciBnXHhmY24iLGRkOiIlZCBnXHhmY24iLE06ImJpciBhXHhmZCIsTU06IiVkIGFceGZkIix5OiJiaXIgXHhmZHlsIix5''@;'; put 'put ''eToiJWQgXHhmZHlsIn0sb3JkaW5hbDpmdW5jdGlvbihWLHcpe3N3aXRjaCh3KXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEbyI6Y2FzZSJERCI6cmV0dXJuIFY7ZGVmYXVsdDppZigwPT09VilyZXR1cm4gVisiJ3VuankiO3ZhciBQPVYlMTA7cmV0dXJuIFYrKF9bUF18fF9bViUxMDAtUF18fF9b''@;'; put 'put ''Vj49MTAwPzEwMDpudWxsXSl9fSx3ZWVrOntkb3c6MSxkb3k6N319KX0oYig5NzU4NikpfSwzODgxOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNzE3MSk7Y2UuZXhwb3J0cz1mdW5jdGlvbihfLHAsVil7Zm9yKHZhciB3PTAsUD1hcmd1bWVudHMubGVuZ3RoPjI/VjpJKHApLEY9''@;'; put 'put ''bmV3IF8oUCk7UD53OylGW3ddPXBbdysrXTtyZXR1cm4gRn19LDM5NjI6KGNlLFgpPT57InVzZSBzdHJpY3QiO3ZhciBiPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLEk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixfPUkmJiFiLmNhbGwoezE6Mn0sMSk7WC5mPV8/ZnVuY3Rpb24o''@;'; put 'put ''Vil7dmFyIHc9SSh0aGlzLFYpO3JldHVybiEhdyYmdy5lbnVtZXJhYmxlfTpifSw0MDU5OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgVj0vKGphbnZcLj98Zlx4ZTl2clwuP3xtYXJzfGF2clwuP3xtYWl8anVpbnxqdWlsXC4/fGFvXHhmYnR8c2VwdFwu''@;'; put 'put ''P3xvY3RcLj98bm92XC4/fGRceGU5Y1wuP3xqYW52aWVyfGZceGU5dnJpZXJ8bWFyc3xhdnJpbHxtYWl8anVpbnxqdWlsbGV0fGFvXHhmYnR8c2VwdGVtYnJlfG9jdG9icmV8bm92ZW1icmV8ZFx4ZTljZW1icmUpL2ksdz1bL15qYW52L2ksL15mXHhlOXZyL2ksL15tYXJzL2ksL15hdnIvaSwv''@;'; put 'put ''Xm1haS9pLC9eanVpbi9pLC9eanVpbC9pLC9eYW9ceGZidC9pLC9ec2VwdC9pLC9eb2N0L2ksL15ub3YvaSwvXmRceGU5Yy9pXTtJLmRlZmluZUxvY2FsZSgiZnIiLHttb250aHM6ImphbnZpZXJfZlx4ZTl2cmllcl9tYXJzX2F2cmlsX21haV9qdWluX2p1aWxsZXRfYW9ceGZidF9zZXB0ZW1i''@;'; put 'put ''cmVfb2N0b2JyZV9ub3ZlbWJyZV9kXHhlOWNlbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFudi5fZlx4ZTl2ci5fbWFyc19hdnIuX21haV9qdWluX2p1aWwuX2FvXHhmYnRfc2VwdC5fb2N0Ll9ub3YuX2RceGU5Yy4iLnNwbGl0KCJfIiksbW9udGhzUmVnZXg6Vixtb250aHNTaG9y''@;'; put 'put ''dFJlZ2V4OlYsbW9udGhzU3RyaWN0UmVnZXg6L14oamFudmllcnxmXHhlOXZyaWVyfG1hcnN8YXZyaWx8bWFpfGp1aW58anVpbGxldHxhb1x4ZmJ0fHNlcHRlbWJyZXxvY3RvYnJlfG5vdmVtYnJlfGRceGU5Y2VtYnJlKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6LyhqYW52XC4/fGZceGU5''@;'; put 'put ''dnJcLj98bWFyc3xhdnJcLj98bWFpfGp1aW58anVpbFwuP3xhb1x4ZmJ0fHNlcHRcLj98b2N0XC4/fG5vdlwuP3xkXHhlOWNcLj8pL2ksbW9udGhzUGFyc2U6dyxsb25nTW9udGhzUGFyc2U6dyxzaG9ydE1vbnRoc1BhcnNlOncsd2Vla2RheXM6ImRpbWFuY2hlX2x1bmRpX21hcmRpX21lcmNy''@;'; put 'put ''ZWRpX2pldWRpX3ZlbmRyZWRpX3NhbWVkaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkaW0uX2x1bi5fbWFyLl9tZXIuX2pldS5fdmVuLl9zYW0uIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkaV9sdV9tYV9tZV9qZV92ZV9zYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6''@;'; put 'put ''ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltBdWpvdXJkXHUyMDE5''@;'; put 'put ''aHVpIFx4ZTBdIExUIixuZXh0RGF5OiJbRGVtYWluIFx4ZTBdIExUIixuZXh0V2VlazoiZGRkZCBbXHhlMF0gTFQiLGxhc3REYXk6IltIaWVyIFx4ZTBdIExUIixsYXN0V2VlazoiZGRkZCBbZGVybmllciBceGUwXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZGFu''@;'; put 'put ''cyAlcyIscGFzdDoiaWwgeSBhICVzIixzOiJxdWVscXVlcyBzZWNvbmRlcyIsc3M6IiVkIHNlY29uZGVzIixtOiJ1bmUgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoidW5lIGhldXJlIixoaDoiJWQgaGV1cmVzIixkOiJ1biBqb3VyIixkZDoiJWQgam91cnMiLHc6InVuZSBzZW1haW5lIix3''@;'; put 'put ''dzoiJWQgc2VtYWluZXMiLE06InVuIG1vaXMiLE1NOiIlZCBtb2lzIix5OiJ1biBhbiIseXk6IiVkIGFucyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZXJ8KS8sb3JkaW5hbDpmdW5jdGlvbihGLFIpe3N3aXRjaChSKXtjYXNlIkQiOnJldHVybiBGKygxPT09Rj8iZXIiOiIi''@;'; put 'put ''KTtkZWZhdWx0OmNhc2UiTSI6Y2FzZSJRIjpjYXNlIkRERCI6Y2FzZSJkIjpyZXR1cm4gRisoMT09PUY/ImVyIjoiZSIpO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gRisoMT09PUY/InJlIjoiZSIpfX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sNDM3NzooY2UsWCxiKT0+e3Zh''@;'; put 'put ''ciBJPWIoMTI3MjcpLF89YigyMzI0MSkscD1iKDk0NTkzKSx3PXtiaW5hcnk6ITAsaGV4OiEwLGJhc2U2NDohMH07WC5EaWZmaWVIZWxsbWFuR3JvdXA9WC5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXA9WC5nZXREaWZmaWVIZWxsbWFuPWZ1bmN0aW9uIFYoRil7dmFyIFI9bmV3IEJ1ZmZlcihf''@;'; put 'put ''W0ZdLnByaW1lLCJoZXgiKSx6PW5ldyBCdWZmZXIoX1tGXS5nZW4sImhleCIpO3JldHVybiBuZXcgcChSLHopfSxYLmNyZWF0ZURpZmZpZUhlbGxtYW49WC5EaWZmaWVIZWxsbWFuPWZ1bmN0aW9uIFAoRixSLHosTil7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihSKXx8dm9pZCAwPT09d1tSXT9Q''@;'; put 'put ''KEYsImJpbmFyeSIsUix6KTooUj1SfHwiYmluYXJ5IixOPU58fCJiaW5hcnkiLHo9enx8bmV3IEJ1ZmZlcihbMl0pLEJ1ZmZlci5pc0J1ZmZlcih6KXx8KHo9bmV3IEJ1ZmZlcih6LE4pKSwibnVtYmVyIj09dHlwZW9mIEY/bmV3IHAoSShGLHopLHosITApOihCdWZmZXIuaXNCdWZmZXIoRil8''@;'; put 'put ''fChGPW5ldyBCdWZmZXIoRixSKSksbmV3IHAoRix6LCEwKSkpfX0sNDU3MDpjZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgWD1PYmplY3QuZGVmaW5lUHJvcGVydHl8fCExO2lmKFgpdHJ5e1goe30sImEiLHt2YWx1ZToxfSl9Y2F0Y2h7WD0hMX1jZS5leHBvcnRzPVh9LDQ3Mjk6KGNlLFgsYik9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIEk9Yig0NDA2OCk7Y2UuZXhwb3J0cz1mdW5jdGlvbihwKXtyZXR1cm4hIUkocCl9fSw0NzM2OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBLLFosWSxJPWIoNDg2OTEpLF89YigzMzk2MykscD1iKDMyNjMzKSxWPWIoMzY2NzgpLHc9YigzOGUzKSxQPWIoNDgz''@;'; put 'put ''NTYpLEY9Yig3OTY2MiksUj1iKDM0NjcwKSx6PSJPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCIsTj1fLlR5cGVFcnJvcjtpZihJfHxQLnN0YXRlKXt2YXIgZWU9UC5zdGF0ZXx8KFAuc3RhdGU9bmV3KDAsXy5XZWFrTWFwKSk7ZWUuZ2V0PWVlLmdldCxlZS5oYXM9ZWUuaGFzLGVlLnNldD1l''@;'; put 'put ''ZS5zZXQsSz1mdW5jdGlvbihyZSxpZSl7aWYoZWUuaGFzKHJlKSl0aHJvdyBuZXcgTih6KTtyZXR1cm4gaWUuZmFjYWRlPXJlLGVlLnNldChyZSxpZSksaWV9LFo9ZnVuY3Rpb24ocmUpe3JldHVybiBlZS5nZXQocmUpfHx7fX0sWT1mdW5jdGlvbihyZSl7cmV0dXJuIGVlLmhhcyhyZSl9fWVs''@;'; put 'put ''c2V7dmFyIEo9Rigic3RhdGUiKTtSW0pdPSEwLEs9ZnVuY3Rpb24ocmUsaWUpe2lmKHcocmUsSikpdGhyb3cgbmV3IE4oeik7cmV0dXJuIGllLmZhY2FkZT1yZSxWKHJlLEosaWUpLGllfSxaPWZ1bmN0aW9uKHJlKXtyZXR1cm4gdyhyZSxKKT9yZVtKXTp7fX0sWT1mdW5jdGlvbihyZSl7cmV0''@;'; put 'put ''dXJuIHcocmUsSil9fWNlLmV4cG9ydHM9e3NldDpLLGdldDpaLGhhczpZLGVuZm9yY2U6ZnVuY3Rpb24ocmUpe3JldHVybiBZKHJlKT9aKHJlKTpLKHJlLHt9KX0sZ2V0dGVyRm9yOmZ1bmN0aW9uKHJlKXtyZXR1cm4gZnVuY3Rpb24oaWUpe3ZhciB1ZTtpZighcChpZSl8fCh1ZT1aKGllKSku''@;'; put 'put ''dHlwZSE9PXJlKXRocm93IG5ldyBOKCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICIrcmUrIiByZXF1aXJlZCIpO3JldHVybiB1ZX19fX0sNDkxMjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDg1NDg4KTtjZS5leHBvcnRzPWZ1bmN0aW9uKHApe3JldHVybiBJKHApfHwwPT09cD9w''@;'; put 'put ''OnA8MD8tMToxfX0sNTAxOTpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPVsiRmxvYXQxNkFycmF5IiwiRmxvYXQzMkFycmF5IiwiRmxvYXQ2NEFycmF5IiwiSW50OEFycmF5IiwiSW50MTZBcnJheSIsIkludDMyQXJyYXkiLCJVaW50OEFycmF5IiwiVWludDhDbGFtcGVkQXJyYXkiLCJV''@;'; put 'put ''aW50MTZBcnJheSIsIlVpbnQzMkFycmF5IiwiQmlnSW50NjRBcnJheSIsIkJpZ1VpbnQ2NEFycmF5Il19LDUyODY6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1VUklFcnJvcn0sNTMzNzpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPU1hdGgucm91bmR9LDU0NTE6KGNlLFgsYik9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7dmFyIEk9Yig4ODcyMyksXz1iKDMxMzYpLHA9Xy5hc3NlcnQsVj1fLmNhY2hlZFByb3BlcnR5LHc9Xy5wYXJzZUJ5dGVzO2Z1bmN0aW9uIFAoRixSKXt0aGlzLmVkZHNhPUYsIm9iamVjdCIhPXR5cGVvZiBSJiYoUj13KFIpKSxBcnJheS5pc0FycmF5KFIpJiYocChS''@;'; put 'put ''Lmxlbmd0aD09PTIqRi5lbmNvZGluZ0xlbmd0aCwiU2lnbmF0dXJlIGhhcyBpbnZhbGlkIHNpemUiKSxSPXtSOlIuc2xpY2UoMCxGLmVuY29kaW5nTGVuZ3RoKSxTOlIuc2xpY2UoRi5lbmNvZGluZ0xlbmd0aCl9KSxwKFIuUiYmUi5TLCJTaWduYXR1cmUgd2l0aG91dCBSIG9yIFMiKSxGLmlz''@;'; put 'put ''UG9pbnQoUi5SKSYmKHRoaXMuX1I9Ui5SKSxSLlMgaW5zdGFuY2VvZiBJJiYodGhpcy5fUz1SLlMpLHRoaXMuX1JlbmNvZGVkPUFycmF5LmlzQXJyYXkoUi5SKT9SLlI6Ui5SZW5jb2RlZCx0aGlzLl9TZW5jb2RlZD1BcnJheS5pc0FycmF5KFIuUyk/Ui5TOlIuU2VuY29kZWR9VihQLCJTIixm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLlNlbmNvZGVkKCkpfSksVihQLCJSIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuUmVuY29kZWQoKSl9KSxWKFAsIlJlbmNvZGVkIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVk''@;'; put 'put ''ZHNhLmVuY29kZVBvaW50KHRoaXMuUigpKX0pLFYoUCwiU2VuY29kZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlSW50KHRoaXMuUygpKX0pLFAucHJvdG90eXBlLnRvQnl0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5SZW5jb2RlZCgpLmNvbmNhdCh0aGlzLlNlbmNv''@;'; put 'put ''ZGVkKCkpfSxQLnByb3RvdHlwZS50b0hleD1mdW5jdGlvbigpe3JldHVybiBfLmVuY29kZSh0aGlzLnRvQnl0ZXMoKSwiaGV4IikudG9VcHBlckNhc2UoKX0sY2UuZXhwb3J0cz1QfSw1NTYzOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNjgyODMpLF89YigyNzEzOCk7ZnVuY3Rp''@;'; put 'put ''b24gcCgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHApKXJldHVybiBuZXcgcDtfLmNhbGwodGhpcyksdGhpcy5oPVszMjM4MzcxMDMyLDkxNDE1MDY2Myw4MTI3MDI5OTksNDE0NDkxMjY5Nyw0MjkwNzc1ODU3LDE3NTA2MDMwMjUsMTY5NDA3NjgzOSwzMjA0MDc1NDI4XX1JLmluaGVyaXRzKHAs''@;'; put 'put ''XyksY2UuZXhwb3J0cz1wLHAuYmxvY2tTaXplPTUxMixwLm91dFNpemU9MjI0LHAuaG1hY1N0cmVuZ3RoPTE5MixwLnBhZExlbmd0aD02NCxwLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHcpe3JldHVybiJoZXgiPT09dz9JLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsNyksImJpZyIpOkku''@;'; put 'put ''c3BsaXQzMih0aGlzLmguc2xpY2UoMCw3KSwiYmlnIil9fSw1NzcyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMjgzNjcpLF89YigzMDc4NykscD1iKDU4Nzk1KTtJKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se2Zyb21FbnRyaWVzOmZ1bmN0aW9uKHcpe3ZhciBQPXt9O3Jl''@;'; put 'put ''dHVybiBfKHcsZnVuY3Rpb24oRixSKXtwKFAsRixSKX0se0FTX0VOVFJJRVM6ITB9KSxQfX0pfSw1OTQyOihjZSxYLGIpPT57KFg9Y2UuZXhwb3J0cz1iKDE5NjA5KSkuU3RyZWFtPVgsWC5SZWFkYWJsZT1YLFguV3JpdGFibGU9Yig0Nzg0OSksWC5EdXBsZXg9Yig3NDA3NSksWC5UcmFuc2Zv''@;'; put 'put ''cm09YigyOTA5KSxYLlBhc3NUaHJvdWdoPWIoMTg4MjMpfSw1OTQ4OmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihGKXtyZXR1cm4gRiYmRi5fX2VzTW9kdWxlP0Y6e2RlZmF1bHQ6Rn19O09iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmlzU3BlY2lhbE1pc3Npbmc9WC5jaG9pY2VWYWxpZGF0b3I9WC5jb25maXJtYXRpb25WYWxpZGF0b3I9WC51cmxWYWxpZGF0b3I9dm9pZCAwO2NvbnN0IF89SShiKDEyOTU0KSk7WC51cmxWYWxpZGF0b3I9KEYsUik9PiEh''@;'; put 'put ''Xy5kZWZhdWx0LmlzSHR0cFVyaShGKXx8ISFfLmRlZmF1bHQuaXNIdHRwc1VyaShGKXx8IiI9PT1GfHxSLFguY29uZmlybWF0aW9uVmFsaWRhdG9yPUY9PiEwPT09Rnx8ITE9PT1GLFguY2hvaWNlVmFsaWRhdG9yPShGLFIseik9PkY+MCYmRjw9Unx8eixYLmlzU3BlY2lhbE1pc3Npbmc9Rj0+''@;'; put 'put ''KCJzdHJpbmciIT10eXBlb2YgRnx8IUYuaW5jbHVkZXMoIi4uIikpJiZuZXcgUmVnRXhwKCJeKFxcLik/W2Etel8uXXsxfSQiLCJpIikudGVzdChGKX0sNjQwNTpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89WyJcdTA3OTZcdTA3YWNcdTA3ODJcdTA3''@;'; put 'put ''YWFcdTA3ODdcdTA3YTZcdTA3ODNcdTA3YTkiLCJcdTA3OGFcdTA3YWNcdTA3ODRcdTA3YjBcdTA3ODNcdTA3YWFcdTA3ODdcdTA3YTZcdTA3ODNcdTA3YTkiLCJcdTA3ODlcdTA3YTdcdTA3ODNcdTA3YThcdTA3OTdcdTA3YWEiLCJcdTA3ODdcdTA3YWRcdTA3OTVcdTA3YjBcdTA3ODNcdTA3''@;'; put 'put ''YTlcdTA3OGRcdTA3YWEiLCJcdTA3ODlcdTA3YWQiLCJcdTA3OTZcdTA3YWJcdTA3ODJcdTA3YjAiLCJcdTA3OTZcdTA3YWFcdTA3OGRcdTA3YTZcdTA3ODdcdTA3YTgiLCJcdTA3ODdcdTA3YWZcdTA3OGVcdTA3YTZcdTA3OTBcdTA3YjBcdTA3OTNcdTA3YWEiLCJcdTA3OTBcdTA3YWNcdTA3''@;'; put 'put ''OTVcdTA3YjBcdTA3OTNcdTA3YWNcdTA3ODlcdTA3YjBcdTA3ODRcdTA3YTZcdTA3ODNcdTA3YWEiLCJcdTA3ODdcdTA3YWVcdTA3ODZcdTA3YjBcdTA3OTNcdTA3YWZcdTA3ODRcdTA3YTZcdTA3ODNcdTA3YWEiLCJcdTA3ODJcdTA3YWVcdTA3ODhcdTA3YWNcdTA3ODlcdTA3YjBcdTA3ODRc''@;'; put 'put ''dTA3YTZcdTA3ODNcdTA3YWEiLCJcdTA3OTFcdTA3YThcdTA3OTBcdTA3YWNcdTA3ODlcdTA3YjBcdTA3ODRcdTA3YTZcdTA3ODNcdTA3YWEiXSxwPVsiXHUwNzg3XHUwN2E3XHUwNzhiXHUwN2E4XHUwNzg3XHUwN2IwXHUwNzhjXHUwN2E2IiwiXHUwNzgwXHUwN2FmXHUwNzg5XHUwN2E2Iiwi''@;'; put 'put ''XHUwNzg3XHUwN2E2XHUwNzgyXHUwN2IwXHUwNzhlXHUwN2E3XHUwNzgzXHUwN2E2IiwiXHUwNzg0XHUwN2FhXHUwNzhiXHUwN2E2IiwiXHUwNzg0XHUwN2FhXHUwNzgzXHUwN2E3XHUwNzkwXHUwN2IwXHUwNzhhXHUwN2E2XHUwNzhjXHUwN2E4IiwiXHUwNzgwXHUwN2FhXHUwNzg2XHUwN2Fh''@;'; put 'put ''XHUwNzgzXHUwN2FhIiwiXHUwNzgwXHUwN2FlXHUwNzgyXHUwN2E4XHUwNzgwXHUwN2E4XHUwNzgzXHUwN2FhIl07SS5kZWZpbmVMb2NhbGUoImR2Iix7bW9udGhzOl8sbW9udGhzU2hvcnQ6Xyx3ZWVrZGF5czpwLHdlZWtkYXlzU2hvcnQ6cCx3ZWVrZGF5c01pbjoiXHUwNzg3XHUwN2E3XHUw''@;'; put 'put ''NzhiXHUwN2E4X1x1MDc4MFx1MDdhZlx1MDc4OVx1MDdhNl9cdTA3ODdcdTA3YTZcdTA3ODJcdTA3YjBfXHUwNzg0XHUwN2FhXHUwNzhiXHUwN2E2X1x1MDc4NFx1MDdhYVx1MDc4M1x1MDdhN19cdTA3ODBcdTA3YWFcdTA3ODZcdTA3YWFfXHUwNzgwXHUwN2FlXHUwNzgyXHUwN2E4Ii5zcGxp''@;'; put 'put ''dCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkQvTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA3ODlcdTA3ODZ8XHUw''@;'; put 'put ''Nzg5XHUwNzhhLyxpc1BNOmZ1bmN0aW9uKHcpe3JldHVybiJcdTA3ODlcdTA3OGEiPT09d30sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDEyPyJcdTA3ODlcdTA3ODYiOiJcdTA3ODlcdTA3OGEifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDc4OVx1MDdhOFx1MDc4N1x1MDdh''@;'; put 'put ''Nlx1MDc4Ylx1MDdhYV0gTFQiLG5leHREYXk6IltcdTA3ODlcdTA3YTdcdTA3OGJcdTA3YTZcdTA3ODlcdTA3YTddIExUIixuZXh0V2VlazoiZGRkZCBMVCIsbGFzdERheToiW1x1MDc4N1x1MDdhOFx1MDc4N1x1MDdiMFx1MDc5NFx1MDdhY10gTFQiLGxhc3RXZWVrOiJbXHUwNzhhXHUwN2E3''@;'; put 'put ''XHUwNzg3XHUwN2E4XHUwNzhjXHUwN2FhXHUwNzg4XHUwN2E4XSBkZGRkIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA3OGNcdTA3YWNcdTA3ODNcdTA3YWRcdTA3OGVcdTA3YTZcdTA3ODdcdTA3YTggJXMiLHBhc3Q6Ilx1MDc4Nlx1MDdhYVx1MDc4M1x1MDdh''@;'; put 'put ''OFx1MDc4Mlx1MDdiMCAlcyIsczoiXHUwNzkwXHUwN2E4XHUwNzg2XHUwN2FhXHUwNzgyXHUwN2IwXHUwNzhjXHUwN2FhXHUwNzg2XHUwN2FlXHUwNzg1XHUwN2FjXHUwNzg3XHUwN2IwIixzczoiZCUgXHUwNzkwXHUwN2E4XHUwNzg2XHUwN2FhXHUwNzgyXHUwN2IwXHUwNzhjXHUwN2FhIixt''@;'; put 'put ''OiJcdTA3ODlcdTA3YThcdTA3ODJcdTA3YThcdTA3OTNcdTA3YWNcdTA3ODdcdTA3YjAiLG1tOiJcdTA3ODlcdTA3YThcdTA3ODJcdTA3YThcdTA3OTNcdTA3YWEgJWQiLGg6Ilx1MDc4ZVx1MDdhNlx1MDc5MVx1MDdhOFx1MDc4N1x1MDdhOFx1MDc4M1x1MDdhY1x1MDc4N1x1MDdiMCIsaGg6''@;'; put 'put ''Ilx1MDc4ZVx1MDdhNlx1MDc5MVx1MDdhOFx1MDc4N1x1MDdhOFx1MDc4M1x1MDdhYSAlZCIsZDoiXHUwNzhiXHUwN2FhXHUwNzg4XHUwN2E2XHUwNzgwXHUwN2FjXHUwNzg3XHUwN2IwIixkZDoiXHUwNzhiXHUwN2FhXHUwNzg4XHUwN2E2XHUwNzkwXHUwN2IwICVkIixNOiJcdTA3ODlcdTA3''@;'; put 'put ''YTZcdTA3ODBcdTA3YWNcdTA3ODdcdTA3YjAiLE1NOiJcdTA3ODlcdTA3YTZcdTA3OTBcdTA3YjAgJWQiLHk6Ilx1MDc4N1x1MDdhNlx1MDc4MFx1MDdhNlx1MDc4M1x1MDdhY1x1MDc4N1x1MDdiMCIseXk6Ilx1MDc4N1x1MDdhNlx1MDc4MFx1MDdhNlx1MDc4M1x1MDdhYSAlZCJ9LHByZXBh''@;'; put 'put ''cnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjcsZG95OjEyfX0pfShiKDk3NTg2KSl9LDY2MTM6Y2U9PnsidXNlIHN0cmljdCI7Y2Uu''@;'; put 'put ''ZXhwb3J0cz1SZWZlcmVuY2VFcnJvcn0sNjg0NjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSSxwPWIoMzA0NjQpLkYsVj1wLkVSUl9NSVNTSU5HX0FSR1Msdz1wLkVSUl9TVFJFQU1fREVTVFJPWUVEO2Z1bmN0aW9uIFAoWil7aWYoWil0aHJvdyBafWZ1bmN0aW9uIHooWil7WigpfWZ1''@;'; put 'put ''bmN0aW9uIE4oWixZKXtyZXR1cm4gWi5waXBlKFkpfWNlLmV4cG9ydHM9ZnVuY3Rpb24gSygpe2Zvcih2YXIgWj1hcmd1bWVudHMubGVuZ3RoLFk9bmV3IEFycmF5KFopLFc9MDtXPFo7VysrKVlbV109YXJndW1lbnRzW1ddO3ZhciBxPWZ1bmN0aW9uIE8oWil7cmV0dXJuIFoubGVuZ3RoJiYi''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgWltaLmxlbmd0aC0xXT9aLnBvcCgpOlB9KFkpO2lmKEFycmF5LmlzQXJyYXkoWVswXSkmJihZPVlbMF0pLFkubGVuZ3RoPDIpdGhyb3cgbmV3IFYoInN0cmVhbXMiKTt2YXIgZWUsSj1ZLm1hcChmdW5jdGlvbihyZSxpZSl7dmFyIHVlPWllPFkubGVuZ3RoLTE7''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uIFIoWixZLFcscSl7cT1mdW5jdGlvbiBfKFope3ZhciBZPSExO3JldHVybiBmdW5jdGlvbigpe1l8fChZPSEwLFouYXBwbHkodm9pZCAwLGFyZ3VtZW50cykpfX0ocSk7dmFyIGVlPSExO1oub24oImNsb3NlIixmdW5jdGlvbigpe2VlPSEwfSksdm9pZCAwPT09SSYm''@;'; put 'put ''KEk9Yig1Nzg1NCkpLEkoWix7cmVhZGFibGU6WSx3cml0YWJsZTpXfSxmdW5jdGlvbihyZSl7aWYocmUpcmV0dXJuIHEocmUpO2VlPSEwLHEoKX0pO3ZhciBKPSExO3JldHVybiBmdW5jdGlvbihyZSl7aWYoIWVlJiYhSil7aWYoSj0hMCxmdW5jdGlvbiBGKFope3JldHVybiBaLnNldEhlYWRl''@;'; put 'put ''ciYmImZ1bmN0aW9uIj09dHlwZW9mIFouYWJvcnR9KFopKXJldHVybiBaLmFib3J0KCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFouZGVzdHJveSlyZXR1cm4gWi5kZXN0cm95KCk7cShyZXx8bmV3IHcoInBpcGUiKSl9fX0ocmUsdWUsaWU+MCxmdW5jdGlvbihfZSl7ZWV8fChlZT1fZSksX2Um''@;'; put 'put ''JkouZm9yRWFjaCh6KSwhdWUmJihKLmZvckVhY2goeikscShlZSkpfSl9KTtyZXR1cm4gWS5yZWR1Y2UoTil9fSw3MDQ1OihjZSxYLGIpPT57Y2UuZXhwb3J0cz1wO3ZhciBJPWIoNDQzNTYpLkV2ZW50RW1pdHRlcjtmdW5jdGlvbiBwKCl7SS5jYWxsKHRoaXMpfWIoNzE5OTMpKHAsSSkscC5S''@;'; put 'put ''ZWFkYWJsZT1iKDYxMDkyKSxwLldyaXRhYmxlPWIoMTU0OTIpLHAuRHVwbGV4PWIoMTAzMCkscC5UcmFuc2Zvcm09Yig0MzQxMCkscC5QYXNzVGhyb3VnaD1iKDgzODI0KSxwLmZpbmlzaGVkPWIoNTc4NTQpLHAucGlwZWxpbmU9Yig2ODQ2KSxwLlN0cmVhbT1wLHAucHJvdG90eXBlLnBpcGU9''@;'; put 'put ''ZnVuY3Rpb24oVix3KXt2YXIgUD10aGlzO2Z1bmN0aW9uIEYoWSl7Vi53cml0YWJsZSYmITE9PT1WLndyaXRlKFkpJiZQLnBhdXNlJiZQLnBhdXNlKCl9ZnVuY3Rpb24gUigpe1AucmVhZGFibGUmJlAucmVzdW1lJiZQLnJlc3VtZSgpfVAub24oImRhdGEiLEYpLFYub24oImRyYWluIixSKSwh''@;'; put 'put ''Vi5faXNTdGRpbyYmKCF3fHwhMSE9PXcuZW5kKSYmKFAub24oImVuZCIsTiksUC5vbigiY2xvc2UiLE8pKTt2YXIgej0hMTtmdW5jdGlvbiBOKCl7enx8KHo9ITAsVi5lbmQoKSl9ZnVuY3Rpb24gTygpe3p8fCh6PSEwLCJmdW5jdGlvbiI9PXR5cGVvZiBWLmRlc3Ryb3kmJlYuZGVzdHJveSgp''@;'; put 'put ''KX1mdW5jdGlvbiBLKFkpe2lmKFooKSwwPT09SS5saXN0ZW5lckNvdW50KHRoaXMsImVycm9yIikpdGhyb3cgWX1mdW5jdGlvbiBaKCl7UC5yZW1vdmVMaXN0ZW5lcigiZGF0YSIsRiksVi5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLFIpLFAucmVtb3ZlTGlzdGVuZXIoImVuZCIsTiksUC5yZW1v''@;'; put 'put ''dmVMaXN0ZW5lcigiY2xvc2UiLE8pLFAucmVtb3ZlTGlzdGVuZXIoImVycm9yIixLKSxWLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsSyksUC5yZW1vdmVMaXN0ZW5lcigiZW5kIixaKSxQLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsWiksVi5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLFopfXJldHVy''@;'; put 'put ''biBQLm9uKCJlcnJvciIsSyksVi5vbigiZXJyb3IiLEspLFAub24oImVuZCIsWiksUC5vbigiY2xvc2UiLFopLFYub24oImNsb3NlIixaKSxWLmVtaXQoInBpcGUiLFApLFZ9fSw3MTcxOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoOTQyMzcpO2NlLmV4cG9ydHM9ZnVuY3Rpb24o''@;'; put 'put ''Xyl7cmV0dXJuIEkoXy5sZW5ndGgpfX0sNzE3NTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDkzODA3KS5CdWZmZXI7ZnVuY3Rpb24gXygpe31mdW5jdGlvbiBwKCl7fWZ1bmN0aW9uIFYoKXt0aGlzLm92ZXJmbG93Qnl0ZT0tMX1mdW5jdGlvbiB3KHosTil7dGhpcy5pY29udj1O''@;'; put 'put ''fWZ1bmN0aW9uIFAoeixOKXt2b2lkIDA9PT0oej16fHx7fSkuYWRkQk9NJiYoei5hZGRCT009ITApLHRoaXMuZW5jb2Rlcj1OLmljb252LmdldEVuY29kZXIoInV0Zi0xNmxlIix6KX1mdW5jdGlvbiBGKHosTil7dGhpcy5kZWNvZGVyPW51bGwsdGhpcy5pbml0aWFsQnl0ZXM9W10sdGhpcy5p''@;'; put 'put ''bml0aWFsQnl0ZXNMZW49MCx0aGlzLm9wdGlvbnM9enx8e30sdGhpcy5pY29udj1OLmljb252fWZ1bmN0aW9uIFIoeixOKXt2YXIgTz1OfHwidXRmLTE2bGUiO2lmKHoubGVuZ3RoPj0yKWlmKDI1ND09elswXSYmMjU1PT16WzFdKU89InV0Zi0xNmJlIjtlbHNlIGlmKDI1NT09elswXSYmMjU0''@;'; put 'put ''PT16WzFdKU89InV0Zi0xNmxlIjtlbHNle2Zvcih2YXIgSz0wLFo9MCxZPU1hdGgubWluKHoubGVuZ3RoLXoubGVuZ3RoJTIsNjQpLFc9MDtXPFk7Vys9MikwPT09eltXXSYmMCE9PXpbVysxXSYmWisrLDAhPT16W1ddJiYwPT09eltXKzFdJiZLKys7Wj5LP089InV0Zi0xNmJlIjpaPEsmJihP''@;'; put 'put ''PSJ1dGYtMTZsZSIpfXJldHVybiBPfVgudXRmMTZiZT1fLF8ucHJvdG90eXBlLmVuY29kZXI9cCxfLnByb3RvdHlwZS5kZWNvZGVyPVYsXy5wcm90b3R5cGUuYm9tQXdhcmU9ITAscC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oeil7Zm9yKHZhciBOPUkuZnJvbSh6LCJ1Y3MyIiksTz0wO088''@;'; put 'put ''Ti5sZW5ndGg7Tys9Mil7dmFyIEs9TltPXTtOW09dPU5bTysxXSxOW08rMV09S31yZXR1cm4gTn0scC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fSxWLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih6KXtpZigwPT16Lmxlbmd0aClyZXR1cm4iIjt2YXIgTj1JLmFsbG9jKHoubGVuZ3RoKzEp''@;'; put 'put ''LE89MCxLPTA7Zm9yKC0xIT09dGhpcy5vdmVyZmxvd0J5dGUmJihOWzBdPXpbMF0sTlsxXT10aGlzLm92ZXJmbG93Qnl0ZSxPPTEsSz0yKTtPPHoubGVuZ3RoLTE7Tys9MixLKz0yKU5bS109eltPKzFdLE5bSysxXT16W09dO3JldHVybiB0aGlzLm92ZXJmbG93Qnl0ZT1PPT16Lmxlbmd0aC0x''@;'; put 'put ''P3pbei5sZW5ndGgtMV06LTEsTi5zbGljZSgwLEspLnRvU3RyaW5nKCJ1Y3MyIil9LFYucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe30sWC51dGYxNj13LHcucHJvdG90eXBlLmVuY29kZXI9UCx3LnByb3RvdHlwZS5kZWNvZGVyPUYsUC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oeil7cmV0''@;'; put 'put ''dXJuIHRoaXMuZW5jb2Rlci53cml0ZSh6KX0sUC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5jb2Rlci5lbmQoKX0sRi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oeil7aWYoIXRoaXMuZGVjb2Rlcil7aWYodGhpcy5pbml0aWFsQnl0ZXMucHVzaCh6KSx0aGlzLmlu''@;'; put 'put ''aXRpYWxCeXRlc0xlbis9ei5sZW5ndGgsdGhpcy5pbml0aWFsQnl0ZXNMZW48MTYpcmV0dXJuIiI7dmFyIE49Uih6PUkuY29uY2F0KHRoaXMuaW5pdGlhbEJ5dGVzKSx0aGlzLm9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKTt0aGlzLmRlY29kZXI9dGhpcy5pY29udi5nZXREZWNvZGVyKE4sdGhp''@;'; put 'put ''cy5vcHRpb25zKSx0aGlzLmluaXRpYWxCeXRlcy5sZW5ndGg9dGhpcy5pbml0aWFsQnl0ZXNMZW49MH1yZXR1cm4gdGhpcy5kZWNvZGVyLndyaXRlKHopfSxGLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtpZighdGhpcy5kZWNvZGVyKXt2YXIgej1JLmNvbmNhdCh0aGlzLmluaXRpYWxCeXRl''@;'; put 'put ''cyksTj1SKHosdGhpcy5vcHRpb25zLmRlZmF1bHRFbmNvZGluZyk7dGhpcy5kZWNvZGVyPXRoaXMuaWNvbnYuZ2V0RGVjb2RlcihOLHRoaXMub3B0aW9ucyk7dmFyIE89dGhpcy5kZWNvZGVyLndyaXRlKHopLEs9dGhpcy5kZWNvZGVyLmVuZCgpO3JldHVybiBLP08rSzpPfXJldHVybiB0aGlz''@;'; put 'put ''LmRlY29kZXIuZW5kKCl9fSw3NDg1OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNjQ1NTApLF89TWF0aC5tYXgscD1NYXRoLm1pbjtjZS5leHBvcnRzPWZ1bmN0aW9uKFYsdyl7dmFyIFA9SShWKTtyZXR1cm4gUDwwP18oUCt3LDApOnAoUCx3KX19LDc0OTk6KGNlLFgsYik9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7YigzNjU3OCl9LDc1OTY6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIF9lLFRlLE1lLFplLEk9YigzMzk2MyksXz1iKDQwMjIwKSxwPWIoNzg4MTEpLFY9YigxOTE1MCksdz1iKDM4ZTMpLFA9Yig1NTU5MiksRj1iKDg3MzcyKSxSPWIoNzc2MzkpLHo9Yig1NTk4OCks''@;'; put 'put ''Tj1iKDI3OTY3KSxPPWIoNDQxMzcpLEs9YigyMTUxMCksWj1JLnNldEltbWVkaWF0ZSxZPUkuY2xlYXJJbW1lZGlhdGUsVz1JLnByb2Nlc3MscT1JLkRpc3BhdGNoLGVlPUkuRnVuY3Rpb24sSj1JLk1lc3NhZ2VDaGFubmVsLHJlPUkuU3RyaW5nLGllPTAsdWU9e30sZ2U9Im9ucmVhZHlzdGF0''@;'; put 'put ''ZWNoYW5nZSI7UChmdW5jdGlvbigpe19lPUkubG9jYXRpb259KTt2YXIgQj1mdW5jdGlvbihDKXtpZih3KHVlLEMpKXt2YXIgVD11ZVtDXTtkZWxldGUgdWVbQ10sVCgpfX0sZz1mdW5jdGlvbihDKXtyZXR1cm4gZnVuY3Rpb24oKXtCKEMpfX0seT1mdW5jdGlvbihDKXtCKEMuZGF0YSl9LHg9''@;'; put 'put ''ZnVuY3Rpb24oQyl7SS5wb3N0TWVzc2FnZShyZShDKSxfZS5wcm90b2NvbCsiLy8iK19lLmhvc3QpfTsoIVp8fCFZKSYmKFo9ZnVuY3Rpb24oVCl7Tihhcmd1bWVudHMubGVuZ3RoLDEpO3ZhciBIPVYoVCk/VDplZShUKSxqPVIoYXJndW1lbnRzLDEpO3JldHVybiB1ZVsrK2llXT1mdW5jdGlv''@;'; put 'put ''bigpe18oSCx2b2lkIDAsail9LFRlKGllKSxpZX0sWT1mdW5jdGlvbihUKXtkZWxldGUgdWVbVF19LEs/VGU9ZnVuY3Rpb24oQyl7Vy5uZXh0VGljayhnKEMpKX06cSYmcS5ub3c/VGU9ZnVuY3Rpb24oQyl7cS5ub3coZyhDKSl9OkomJiFPPyhaZT0oTWU9bmV3IEopLnBvcnQyLE1lLnBvcnQx''@;'; put 'put ''Lm9ubWVzc2FnZT15LFRlPXAoWmUucG9zdE1lc3NhZ2UsWmUpKTpJLmFkZEV2ZW50TGlzdGVuZXImJlYoSS5wb3N0TWVzc2FnZSkmJiFJLmltcG9ydFNjcmlwdHMmJl9lJiYiZmlsZToiIT09X2UucHJvdG9jb2wmJiFQKHgpPyhUZT14LEkuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIseSwh''@;'; put 'put ''MSkpOlRlPWdlIGluIHooInNjcmlwdCIpP2Z1bmN0aW9uKEMpe0YuYXBwZW5kQ2hpbGQoeigic2NyaXB0IikpW2dlXT1mdW5jdGlvbigpe0YucmVtb3ZlQ2hpbGQodGhpcyksQihDKX19OmZ1bmN0aW9uKEMpe3NldFRpbWVvdXQoZyhDKSwwKX0pLGNlLmV4cG9ydHM9e3NldDpaLGNsZWFyOll9''@;'; put 'put ''fSw3NjIzOmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9ezEwMDI5OiJtYWNjZW50ZXVybyIsbWFjY2VudGV1cm86e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx1MDEwMFx1MDEwMVx4YzlcdTAxMDRceGQ2XHhkY1x4ZTFcdTAxMDVcdTAxMGNceGU0XHUwMTBkXHUwMTA2XHUwMTA3XHhl''@;'; put 'put ''OVx1MDE3OVx1MDE3YVx1MDEwZVx4ZWRcdTAxMGZcdTAxMTJcdTAxMTNcdTAxMTZceGYzXHUwMTE3XHhmNFx4ZjZceGY1XHhmYVx1MDExYVx1MDExYlx4ZmNcdTIwMjBceGIwXHUwMTE4XHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHUwMTE5XHhhOFx1MjI2MFx1MDEyM1x1''@;'; put 'put ''MDEyZVx1MDEyZlx1MDEyYVx1MjI2NFx1MjI2NVx1MDEyYlx1MDEzNlx1MjIwMlx1MjIxMVx1MDE0Mlx1MDEzYlx1MDEzY1x1MDEzZFx1MDEzZVx1MDEzOVx1MDEzYVx1MDE0NVx1MDE0Nlx1MDE0M1x4YWNcdTIyMWFcdTAxNDRcdTAxNDdcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBcdTAxNDhc''@;'; put 'put ''dTAxNTBceGQ1XHUwMTUxXHUwMTRjXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx1MDE0ZFx1MDE1NFx1MDE1NVx1MDE1OFx1MjAzOVx1MjAzYVx1MDE1OVx1MDE1Nlx1MDE1N1x1MDE2MFx1MjAxYVx1MjAxZVx1MDE2MVx1MDE1YVx1MDE1Ylx4YzFcdTAx''@;'; put 'put ''NjRcdTAxNjVceGNkXHUwMTdkXHUwMTdlXHUwMTZhXHhkM1x4ZDRcdTAxNmJcdTAxNmVceGRhXHUwMTZmXHUwMTcwXHUwMTcxXHUwMTcyXHUwMTczXHhkZFx4ZmRcdTAxMzdcdTAxN2JcdTAxNDFcdTAxN2NcdTAxMjJcdTAyYzcifSw4MDg6ImNwODA4IixpYm04MDg6ImNwODA4IixjcDgwODp7''@;'; put 'put ''dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0Mjdc''@;'; put 'put ''dTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTI1OTFcdTI1OTJcdTI1OTNcdTI1''@;'; put 'put ''MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNc''@;'; put 'put ''dTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0''@;'; put 'put ''NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdTA0MDFcdTA0NTFcdTA0MDRcdTA0NTRcdTA0MDdcdTA0NTdcdTA0MGVcdTA0NWVceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjExNlx1MjBhY1x1MjVhMFx4YTAifSxtaWs6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDEwXHUwNDExXHUw''@;'; put 'put ''NDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJk''@;'; put 'put ''XHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUw''@;'; put 'put ''NDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTYzXHUyNTUxXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTEwXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0''@;'; put 'put ''XHUyMTE2XHhhN1x1MjU1N1x1MjU1ZFx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhi''@;'; put 'put ''MVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0sY3A3MjA6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceGU5XHhlMlx4ODRceGUwXHg4Nlx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4OGRceDhl''@;'; put 'put ''XHg4Zlx4OTBcdTA2NTFcdTA2NTJceGY0XHhhNFx1MDY0MFx4ZmJceGY5XHUwNjIxXHUwNjIyXHUwNjIzXHUwNjI0XHhhM1x1MDYyNVx1MDYyNlx1MDYyN1x1MDYyOFx1MDYyOVx1MDYyYVx1MDYyYlx1MDYyY1x1MDYyZFx1MDYyZVx1MDYyZlx1MDYzMFx1MDYzMVx1MDYzMlx1MDYzM1x1MDYz''@;'; put 'put ''NFx1MDYzNVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVh''@;'; put 'put ''XHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwNjM2XHUwNjM3XHUwNjM4XHUwNjM5XHUw''@;'; put 'put ''NjNhXHUwNjQxXHhiNVx1MDY0Mlx1MDY0M1x1MDY0NFx1MDY0NVx1MDY0Nlx1MDY0N1x1MDY0OFx1MDY0OVx1MDY0YVx1MjI2MVx1MDY0Ylx1MDY0Y1x1MDY0ZFx1MDY0ZVx1MDY0Zlx1MDY1MFx1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxhc2NpaThi''@;'; put 'put ''aXQ6ImFzY2lpIix1c2FzY2lpOiJhc2NpaSIsYW5zaXgzNDoiYXNjaWkiLGFuc2l4MzQxOTY4OiJhc2NpaSIsYW5zaXgzNDE5ODY6ImFzY2lpIixjc2FzY2lpOiJhc2NpaSIsY3AzNjc6ImFzY2lpIixpYm0zNjc6ImFzY2lpIixpc29pcjY6ImFzY2lpIixpc282NDZ1czoiYXNjaWkiLGlzbzY0''@;'; put 'put ''NmlydjoiYXNjaWkiLHVzOiJhc2NpaSIsbGF0aW4xOiJpc284ODU5MSIsbGF0aW4yOiJpc284ODU5MiIsbGF0aW4zOiJpc284ODU5MyIsbGF0aW40OiJpc284ODU5NCIsbGF0aW41OiJpc284ODU5OSIsbGF0aW42OiJpc284ODU5MTAiLGxhdGluNzoiaXNvODg1OTEzIixsYXRpbjg6Imlzbzg4''@;'; put 'put ''NTkxNCIsbGF0aW45OiJpc284ODU5MTUiLGxhdGluMTA6Imlzbzg4NTkxNiIsY3Npc29sYXRpbjE6Imlzbzg4NTkxIixjc2lzb2xhdGluMjoiaXNvODg1OTIiLGNzaXNvbGF0aW4zOiJpc284ODU5MyIsY3Npc29sYXRpbjQ6Imlzbzg4NTk0Iixjc2lzb2xhdGluY3lyaWxsaWM6Imlzbzg4NTk1''@;'; put 'put ''Iixjc2lzb2xhdGluYXJhYmljOiJpc284ODU5NiIsY3Npc29sYXRpbmdyZWVrOiJpc284ODU5NyIsY3Npc29sYXRpbmhlYnJldzoiaXNvODg1OTgiLGNzaXNvbGF0aW41OiJpc284ODU5OSIsY3Npc29sYXRpbjY6Imlzbzg4NTkxMCIsbDE6Imlzbzg4NTkxIixsMjoiaXNvODg1OTIiLGwzOiJp''@;'; put 'put ''c284ODU5MyIsbDQ6Imlzbzg4NTk0IixsNToiaXNvODg1OTkiLGw2OiJpc284ODU5MTAiLGw3OiJpc284ODU5MTMiLGw4OiJpc284ODU5MTQiLGw5OiJpc284ODU5MTUiLGwxMDoiaXNvODg1OTE2Iixpc29pcjE0OiJpc282NDZqcCIsaXNvaXI1NzoiaXNvNjQ2Y24iLGlzb2lyMTAwOiJpc284''@;'; put 'put ''ODU5MSIsaXNvaXIxMDE6Imlzbzg4NTkyIixpc29pcjEwOToiaXNvODg1OTMiLGlzb2lyMTEwOiJpc284ODU5NCIsaXNvaXIxNDQ6Imlzbzg4NTk1Iixpc29pcjEyNzoiaXNvODg1OTYiLGlzb2lyMTI2OiJpc284ODU5NyIsaXNvaXIxMzg6Imlzbzg4NTk4Iixpc29pcjE0ODoiaXNvODg1OTki''@;'; put 'put ''LGlzb2lyMTU3OiJpc284ODU5MTAiLGlzb2lyMTY2OiJ0aXM2MjAiLGlzb2lyMTc5OiJpc284ODU5MTMiLGlzb2lyMTk5OiJpc284ODU5MTQiLGlzb2lyMjAzOiJpc284ODU5MTUiLGlzb2lyMjI2OiJpc284ODU5MTYiLGNwODE5OiJpc284ODU5MSIsaWJtODE5OiJpc284ODU5MSIsY3lyaWxs''@;'; put 'put ''aWM6Imlzbzg4NTk1IixhcmFiaWM6Imlzbzg4NTk2IixhcmFiaWM4OiJpc284ODU5NiIsZWNtYTExNDoiaXNvODg1OTYiLGFzbW83MDg6Imlzbzg4NTk2IixncmVlazoiaXNvODg1OTciLGdyZWVrODoiaXNvODg1OTciLGVjbWExMTg6Imlzbzg4NTk3IixlbG90OTI4OiJpc284ODU5NyIsaGVi''@;'; put 'put ''cmV3OiJpc284ODU5OCIsaGVicmV3ODoiaXNvODg1OTgiLHR1cmtpc2g6Imlzbzg4NTk5Iix0dXJraXNoODoiaXNvODg1OTkiLHRoYWk6Imlzbzg4NTkxMSIsdGhhaTg6Imlzbzg4NTkxMSIsY2VsdGljOiJpc284ODU5MTQiLGNlbHRpYzg6Imlzbzg4NTkxNCIsaXNvY2VsdGljOiJpc284ODU5''@;'; put 'put ''MTQiLHRpczYyMDA6InRpczYyMCIsdGlzNjIwMjUyOTE6InRpczYyMCIsdGlzNjIwMjUzMzA6InRpczYyMCIsMWU0OiJtYWNyb21hbiIsMTAwMDY6Im1hY2dyZWVrIiwxMDAwNzoibWFjY3lyaWxsaWMiLDEwMDc5OiJtYWNpY2VsYW5kIiwxMDA4MToibWFjdHVya2lzaCIsY3NwYzhjb2RlcGFn''@;'; put 'put ''ZTQzNzoiY3A0MzciLGNzcGM3NzViYWx0aWM6ImNwNzc1Iixjc3BjODUwbXVsdGlsaW5ndWFsOiJjcDg1MCIsY3NwY3A4NTI6ImNwODUyIixjc3BjODYybGF0aW5oZWJyZXc6ImNwODYyIixjcGdyOiJjcDg2OSIsbXNlZToiY3AxMjUwIixtc2N5cmw6ImNwMTI1MSIsbXNhbnNpOiJjcDEyNTIi''@;'; put 'put ''LG1zZ3JlZWs6ImNwMTI1MyIsbXN0dXJrOiJjcDEyNTQiLG1zaGVicjoiY3AxMjU1Iixtc2FyYWI6ImNwMTI1NiIsd2luYmFsdHJpbToiY3AxMjU3IixjcDIwODY2OiJrb2k4ciIsMjA4NjY6ImtvaThyIixpYm04Nzg6ImtvaThyIixjc2tvaThyOiJrb2k4ciIsY3AyMTg2Njoia29pOHUiLDIx''@;'; put 'put ''ODY2OiJrb2k4dSIsaWJtMTE2ODoia29pOHUiLHN0cmsxMDQ4MjAwMjoicmsxMDQ4Iix0Y3ZuNTcxMjoidGN2biIsdGN2bjU3MTIxOiJ0Y3ZuIixnYjE5ODg4MDoiaXNvNjQ2Y24iLGNuOiJpc282NDZjbiIsY3Npc28xNGppc2M2MjIwcm86ImlzbzY0NmpwIixqaXNjNjIyMDE5NjlybzoiaXNv''@;'; put 'put ''NjQ2anAiLGpwOiJpc282NDZqcCIsY3NocHJvbWFuODoiaHByb21hbjgiLHI4OiJocHJvbWFuOCIscm9tYW44OiJocHJvbWFuOCIseHJvbWFuODoiaHByb21hbjgiLGlibTEwNTE6Imhwcm9tYW44IixtYWM6Im1hY2ludG9zaCIsY3NtYWNpbnRvc2g6Im1hY2ludG9zaCJ9fSw3NzEyOmZ1bmN0''@;'; put 'put ''aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwNjYxIiwyOiJcdTA2NjIiLDM6Ilx1MDY2MyIsNDoiXHUwNjY0Iiw1OiJcdTA2NjUiLDY6Ilx1MDY2NiIsNzoiXHUwNjY3Iiw4OiJcdTA2NjgiLDk6Ilx1MDY2OSIsMDoiXHUwNjYwIn0scD17Ilx1MDY2''@;'; put 'put ''MSI6IjEiLCJcdTA2NjIiOiIyIiwiXHUwNjYzIjoiMyIsIlx1MDY2NCI6IjQiLCJcdTA2NjUiOiI1IiwiXHUwNjY2IjoiNiIsIlx1MDY2NyI6IjciLCJcdTA2NjgiOiI4IiwiXHUwNjY5IjoiOSIsIlx1MDY2MCI6IjAifTtJLmRlZmluZUxvY2FsZSgiYXItcHMiLHttb250aHM6Ilx1MDY0M1x1''@;'; put 'put ''MDYyN1x1MDY0Nlx1MDY0OFx1MDY0NiBcdTA2MjdcdTA2NDRcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFfXHUwNjM0XHUwNjI4XHUwNjI3XHUwNjM3X1x1MDYyMlx1MDYzMFx1MDYyN1x1MDYzMV9cdTA2NDZcdTA2NGFcdTA2MzNcdTA2MjdcdTA2NDZfXHUwNjIzXHUwNjRhXHUwNjUxXHUwNjI3''@;'; put 'put ''XHUwNjMxX1x1MDYyZFx1MDYzMlx1MDY0YVx1MDYzMVx1MDYyN1x1MDY0Nl9cdTA2MmFcdTA2NDVcdTA2NTFcdTA2NDhcdTA2MzJfXHUwNjIyXHUwNjI4X1x1MDYyM1x1MDY0YVx1MDY0NFx1MDY0OFx1MDY0NF9cdTA2MmFcdTA2MzRcdTA2MzFcdTA2NGEgXHUwNjI3XHUwNjQ0XHUwNjIzXHUw''@;'; put 'put ''NjQ4XHUwNjUxXHUwNjQ0X1x1MDYyYVx1MDYzNFx1MDYzMVx1MDY0YVx1MDY0NiBcdTA2MjdcdTA2NDRcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFfXHUwNjQzXHUwNjI3XHUwNjQ2XHUwNjQ4XHUwNjQ2IFx1MDYyN1x1MDY0NFx1MDYyM1x1MDY0OFx1MDY1MVx1MDY0NCIuc3BsaXQoIl8iKSxt''@;'; put 'put ''b250aHNTaG9ydDoiXHUwNjQzXHUwNjYyX1x1MDYzNFx1MDYyOFx1MDYyN1x1MDYzN19cdTA2MjJcdTA2MzBcdTA2MjdcdTA2MzFfXHUwNjQ2XHUwNjRhXHUwNjMzXHUwNjI3XHUwNjQ2X1x1MDYyM1x1MDY0YVx1MDY1MVx1MDYyN1x1MDYzMV9cdTA2MmRcdTA2MzJcdTA2NGFcdTA2MzFcdTA2''@;'; put 'put ''MjdcdTA2NDZfXHUwNjJhXHUwNjQ1XHUwNjUxXHUwNjQ4XHUwNjMyX1x1MDYyMlx1MDYyOF9cdTA2MjNcdTA2NGFcdTA2NDRcdTA2NDhcdTA2NDRfXHUwNjJhXHUwNjYxX1x1MDYyYVx1MDY2Ml9cdTA2NDNcdTA2NjEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1''@;'; put 'put ''MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRc''@;'; put 'put ''dTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUw''@;'; put 'put ''NjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2Rh''@;'; put 'put ''eXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixM''@;'; put 'put ''TEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjM1fFx1MDY0NS8saXNQTTpmdW5jdGlvbih3KXtyZXR1cm4iXHUwNjQ1Ij09PXd9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzwxMj8iXHUwNjM1''@;'; put 'put ''IjoiXHUwNjQ1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2MjcgXHUwNjM5XHUwNjQ0''@;'; put 'put ''XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1MDYzMyBcdTA2MzlcdTA2''@;'; put 'put ''NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJc''@;'; put 'put ''dTA2NDFcdTA2NGEgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczoiXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IixtOiJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLG1tOiIlZCBcdTA2MmZcdTA2''@;'; put 'put ''NDJcdTA2MjdcdTA2MjZcdTA2NDIiLGg6Ilx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsaGg6IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsZDoiXHUwNjRhXHUwNjQ4XHUwNjQ1IixkZDoiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IixNOiJcdTA2MzRcdTA2NDdcdTA2''@;'; put 'put ''MzEiLE1NOiIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLHk6Ilx1MDYzM1x1MDY0Nlx1MDYyOSIseXk6IiVkIFx1MDYzM1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDYyYSJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTA2NjNcdTA2NjRcdTA2NjVcdTA2NjZc''@;'; put 'put ''dTA2NjdcdTA2NjhcdTA2NjlcdTA2NjBdL2csZnVuY3Rpb24oUCl7cmV0dXJuIHBbUF19KS5zcGxpdCgiIikucmV2ZXJzZSgpLmpvaW4oIiIpLnJlcGxhY2UoL1tcdTA2NjFcdTA2NjJdKD8hW1x1MDYyYVx1MDY0M10pL2csZnVuY3Rpb24oUCl7cmV0dXJuIHBbUF19KS5zcGxpdCgiIikucmV2''@;'; put 'put ''ZXJzZSgpLmpvaW4oIiIpLnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihQKXtyZXR1cm4gX1tQXX0pLnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2RvdzowLGRveTo2fX0pfShiKDk3NTg2''@;'; put 'put ''KSl9LDgyOTQ6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXswOiItXHUwNDQzXHUwNDNjIiwxOiItXHUwNDQzXHUwNDNjIiwyOiItXHUwNDRlXHUwNDNjIiwzOiItXHUwNDRlXHUwNDNjIiw0OiItXHUwNDQzXHUwNDNjIiw1OiItXHUwNDQzXHUwNDNj''@;'; put 'put ''Iiw2OiItXHUwNDQzXHUwNDNjIiw3OiItXHUwNDQzXHUwNDNjIiw4OiItXHUwNDQzXHUwNDNjIiw5OiItXHUwNDQzXHUwNDNjIiwxMDoiLVx1MDQ0M1x1MDQzYyIsMTI6Ii1cdTA0NDNcdTA0M2MiLDEzOiItXHUwNDQzXHUwNDNjIiwyMDoiLVx1MDQ0M1x1MDQzYyIsMzA6Ii1cdTA0NGVcdTA0''@;'; put 'put ''M2MiLDQwOiItXHUwNDQzXHUwNDNjIiw1MDoiLVx1MDQ0M1x1MDQzYyIsNjA6Ii1cdTA0NDNcdTA0M2MiLDcwOiItXHUwNDQzXHUwNDNjIiw4MDoiLVx1MDQ0M1x1MDQzYyIsOTA6Ii1cdTA0NDNcdTA0M2MiLDEwMDoiLVx1MDQ0M1x1MDQzYyJ9O0kuZGVmaW5lTG9jYWxlKCJ0ZyIse21vbnRo''@;'; put 'put ''czp7Zm9ybWF0OiJcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBcdTA0MzhfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiXHUwNDM4X1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Mlx1MDQzOF9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JcdTA0MzhfXHUwNDNj''@;'; put 'put ''XHUwNDMwXHUwNDM5XHUwNDM4X1x1MDQzOFx1MDQ0ZVx1MDQzZFx1MDQzOF9cdTA0MzhcdTA0NGVcdTA0M2JcdTA0MzhfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyXHUwNDM4X1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQzOF9cdTA0''@;'; put 'put ''M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBcdTA0MzhfXHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDM4X1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MFx1MDQzOCIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJcdTA0NGZcdTA0M2RcdTA0MzJcdTA0''@;'; put 'put ''MzBcdTA0NDBfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQzOFx1MDQ0ZVx1MDQzZF9cdTA0MzhcdTA0NGVcdTA0M2JfXHUwNDMw''@;'; put 'put ''XHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MF9cdTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBfXHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwX1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQz''@;'; put 'put ''MFx1MDQzMVx1MDQ0MCIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6Ilx1MDQ0Zlx1MDQzZFx1MDQzMl9cdTA0NDRcdTA0MzVcdTA0MzJfXHUwNDNjXHUwNDMwXHUwNDQwX1x1MDQzMFx1MDQzZlx1MDQ0MF9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDM4XHUwNDRlXHUwNDNkX1x1MDQzOFx1MDQ0''@;'; put 'put ''ZVx1MDQzYl9cdTA0MzBcdTA0MzJcdTA0MzNfXHUwNDQxXHUwNDM1XHUwNDNkX1x1MDQzZVx1MDQzYVx1MDQ0Ml9cdTA0M2RcdTA0M2VcdTA0NGZfXHUwNDM0XHUwNDM1XHUwNDNhIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA0NGZcdTA0M2FcdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0''@;'; put 'put ''MzVfXHUwNDM0XHUwNDQzXHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDM1X1x1MDQ0MVx1MDQzNVx1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzNV9cdTA0NDdcdTA0M2VcdTA0NDBcdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzVfXHUwNDNmXHUwNDMwXHUwNDNkXHUwNGI3XHUw''@;'; put 'put ''NDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDM1X1x1MDRiN1x1MDQ0M1x1MDQzY1x1MDQ0YVx1MDQzMF9cdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNDRmXHUwNDQ4XHUwNDMxX1x1MDQzNFx1MDQ0OFx1MDQzMV9cdTA0NDFcdTA0''@;'; put 'put ''NDhcdTA0MzFfXHUwNDQ3XHUwNDQ4XHUwNDMxX1x1MDQzZlx1MDQ0OFx1MDQzMV9cdTA0YjdcdTA0NDNcdTA0M2NfXHUwNDQ4XHUwNDNkXHUwNDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0NGZcdTA0NDhfXHUwNDM0XHUwNDQ4X1x1MDQ0MVx1MDQ0OF9cdTA0NDdcdTA0NDhfXHUw''@;'; put 'put ''NDNmXHUwNDQ4X1x1MDRiN1x1MDQzY19cdTA0NDhcdTA0MzEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0g''@;'; put 'put ''WVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNDE4XHUwNDNjXHUwNDQwXHUwNGVmXHUwNDM3IFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0Mlx1MDQzOF0gTFQiLG5leHREYXk6IltcdTA0MjRcdTA0MzBcdTA0NDBcdTA0MzRcdTA0M2UgXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQy''@;'; put 'put ''XHUwNDM4XSBMVCIsbGFzdERheToiW1x1MDQxNFx1MDQzOFx1MDQ0MFx1MDRlZlx1MDQzNyBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJcdTA0MzhdIExUIixuZXh0V2VlazoiZGRkZFtcdTA0MzhdIFtcdTA0YjNcdTA0MzBcdTA0NDRcdTA0NDJcdTA0MzBcdTA0MzggXHUwNDNlXHUwNDRmXHUw''@;'; put 'put ''NDNkXHUwNDM0XHUwNDMwIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0Mlx1MDQzOF0gTFQiLGxhc3RXZWVrOiJkZGRkW1x1MDQzOF0gW1x1MDRiM1x1MDQzMFx1MDQ0NFx1MDQ0Mlx1MDQzMFx1MDQzOCBcdTA0MzNcdTA0NDNcdTA0MzdcdTA0MzBcdTA0NDhcdTA0NDJcdTA0MzAgXHUwNDQxXHUw''@;'; put 'put ''NDNlXHUwNDMwXHUwNDQyXHUwNDM4XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDMxXHUwNDMwXHUwNDRhXHUwNDM0XHUwNDM4ICVzIixwYXN0OiIlcyBcdTA0M2ZcdTA0MzVcdTA0NDgiLHM6Ilx1MDQ0Zlx1MDQzYVx1MDQ0N1x1MDQzMFx1MDQzZFx1MDQz''@;'; put 'put ''NCBcdTA0NDFcdTA0M2VcdTA0M2RcdTA0MzhcdTA0NGYiLG06Ilx1MDQ0Zlx1MDQzYSBcdTA0MzRcdTA0MzBcdTA0OWJcdTA0MzhcdTA0OWJcdTA0MzAiLG1tOiIlZCBcdTA0MzRcdTA0MzBcdTA0OWJcdTA0MzhcdTA0OWJcdTA0MzAiLGg6Ilx1MDQ0Zlx1MDQzYSBcdTA0NDFcdTA0M2VcdTA0''@;'; put 'put ''MzBcdTA0NDIiLGhoOiIlZCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDIiLGQ6Ilx1MDQ0Zlx1MDQzYSBcdTA0NDBcdTA0ZWZcdTA0MzciLGRkOiIlZCBcdTA0NDBcdTA0ZWZcdTA0MzciLE06Ilx1MDQ0Zlx1MDQzYSBcdTA0M2NcdTA0M2VcdTA0YjMiLE1NOiIlZCBcdTA0M2NcdTA0M2VcdTA0''@;'; put 'put ''YjMiLHk6Ilx1MDQ0Zlx1MDQzYSBcdTA0NDFcdTA0M2VcdTA0M2IiLHl5OiIlZCBcdTA0NDFcdTA0M2VcdTA0M2IifSxtZXJpZGllbVBhcnNlOi9cdTA0NDhcdTA0MzBcdTA0MzF8XHUwNDQxXHUwNDQzXHUwNDMxXHUwNGIzfFx1MDQ0MFx1MDRlZlx1MDQzN3xcdTA0MzFcdTA0MzVcdTA0MzNc''@;'; put 'put ''dTA0M2VcdTA0YjMvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihWLHcpe3JldHVybiAxMj09PVYmJihWPTApLCJcdTA0NDhcdTA0MzBcdTA0MzEiPT09dz9WPDQ/VjpWKzEyOiJcdTA0NDFcdTA0NDNcdTA0MzFcdTA0YjMiPT09dz9WOiJcdTA0NDBcdTA0ZWZcdTA0MzciPT09dz9WPj0xMT9WOlYr''@;'; put 'put ''MTI6Ilx1MDQzMVx1MDQzNVx1MDQzM1x1MDQzZVx1MDRiMyI9PT13P1YrMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihWLHcsUCl7cmV0dXJuIFY8ND8iXHUwNDQ4XHUwNDMwXHUwNDMxIjpWPDExPyJcdTA0NDFcdTA0NDNcdTA0MzFcdTA0YjMiOlY8MTY/Ilx1MDQ0MFx1MDRlZlx1MDQz''@;'; put 'put ''NyI6VjwxOT8iXHUwNDMxXHUwNDM1XHUwNDMzXHUwNDNlXHUwNGIzIjoiXHUwNDQ4XHUwNDMwXHUwNDMxIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDQzXHUwNDNjfFx1MDQ0ZVx1MDQzYykvLG9yZGluYWw6ZnVuY3Rpb24oVil7cmV0dXJuIFYrKF9bVl18fF9bViUx''@;'; put 'put ''MF18fF9bVj49MTAwPzEwMDpudWxsXSl9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShiKDk3NTg2KSl9LDg2NjE6KGNlLFgsYik9PntjZS5leHBvcnRzPWIoODY2MSl9LDg3Mjk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9WDtJLmJhc2U9Yig5ODgyOCksSS5zaG9ydD1iKDY4MDc1KSxJ''@;'; put 'put ''Lm1vbnQ9Yig2NDk0NyksSS5lZHdhcmRzPWIoNTU1MzcpfSw4ODg3OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiemgtdHciLHttb250aHM6Ilx1NGUwMFx1NjcwOF9cdTRlOGNcdTY3MDhfXHU0ZTA5XHU2NzA4X1x1NTZkYlx1Njcw''@;'; put 'put ''OF9cdTRlOTRcdTY3MDhfXHU1MTZkXHU2NzA4X1x1NGUwM1x1NjcwOF9cdTUxNmJcdTY3MDhfXHU0ZTVkXHU2NzA4X1x1NTM0MVx1NjcwOF9cdTUzNDFcdTRlMDBcdTY3MDhfXHU1MzQxXHU0ZThjXHU2NzA4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiIxXHU2NzA4XzJcdTY3MDhfM1x1Njcw''@;'; put 'put ''OF80XHU2NzA4XzVcdTY3MDhfNlx1NjcwOF83XHU2NzA4XzhcdTY3MDhfOVx1NjcwOF8xMFx1NjcwOF8xMVx1NjcwOF8xMlx1NjcwOCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHU2NjFmXHU2NzFmXHU2NWU1X1x1NjYxZlx1NjcxZlx1NGUwMF9cdTY2MWZcdTY3MWZcdTRlOGNfXHU2NjFmXHU2''@;'; put 'put ''NzFmXHU0ZTA5X1x1NjYxZlx1NjcxZlx1NTZkYl9cdTY2MWZcdTY3MWZcdTRlOTRfXHU2NjFmXHU2NzFmXHU1MTZkIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1OTAzMVx1NjVlNV9cdTkwMzFcdTRlMDBfXHU5MDMxXHU0ZThjX1x1OTAzMVx1NGUwOV9cdTkwMzFcdTU2ZGJfXHU5MDMx''@;'; put 'put ''XHU0ZTk0X1x1OTAzMVx1NTE2ZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHU2NWU1X1x1NGUwMF9cdTRlOGNfXHU0ZTA5X1x1NTZkYl9cdTRlOTRfXHU1MTZkIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVkvTU0vREQiLExM''@;'; put 'put ''OiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixMTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVkZGRkIEhIOm1tIixsOiJZWVlZL00vRCIsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsbGxsOiJZWVlZXHU1ZTc0''@;'; put 'put ''TVx1NjcwOERcdTY1ZTUgSEg6bW0iLGxsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNWRkZGQgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTUxY2NcdTY2Njh8XHU2NWU5XHU0ZTBhfFx1NGUwYVx1NTM0OHxcdTRlMmRcdTUzNDh8XHU0ZTBiXHU1MzQ4fFx1NjY1YVx1NGUwYS8sbWVyaWRp''@;'; put 'put ''ZW1Ib3VyOmZ1bmN0aW9uKHAsVil7cmV0dXJuIDEyPT09cCYmKHA9MCksIlx1NTFjY1x1NjY2OCI9PT1WfHwiXHU2NWU5XHU0ZTBhIj09PVZ8fCJcdTRlMGFcdTUzNDgiPT09Vj9wOiJcdTRlMmRcdTUzNDgiPT09Vj9wPj0xMT9wOnArMTI6Ilx1NGUwYlx1NTM0OCI9PT1WfHwiXHU2NjVhXHU0''@;'; put 'put ''ZTBhIj09PVY/cCsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKHAsVix3KXt2YXIgUD0xMDAqcCtWO3JldHVybiBQPDYwMD8iXHU1MWNjXHU2NjY4IjpQPDkwMD8iXHU2NWU5XHU0ZTBhIjpQPDExMzA/Ilx1NGUwYVx1NTM0OCI6UDwxMjMwPyJcdTRlMmRcdTUzNDgiOlA8MTgwMD8iXHU0''@;'; put 'put ''ZTBiXHU1MzQ4IjoiXHU2NjVhXHU0ZTBhIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTRlY2FcdTU5MjldIExUIixuZXh0RGF5OiJbXHU2NjBlXHU1OTI5XSBMVCIsbmV4dFdlZWs6IltcdTRlMGJdZGRkZCBMVCIsbGFzdERheToiW1x1NjYyOFx1NTkyOV0gTFQiLGxhc3RXZWVrOiJbXHU0ZTBh''@;'; put 'put ''XWRkZGQgTFQiLHNhbWVFbHNlOiJMIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcdTY1ZTV8XHU2NzA4fFx1OTAzMSkvLG9yZGluYWw6ZnVuY3Rpb24ocCxWKXtzd2l0Y2goVil7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gcCsiXHU2NWU1IjtjYXNlIk0iOnJl''@;'; put 'put ''dHVybiBwKyJcdTY3MDgiO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gcCsiXHU5MDMxIjtkZWZhdWx0OnJldHVybiBwfX0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHU1ZjhjIixwYXN0OiIlc1x1NTI0ZCIsczoiXHU1ZTdlXHU3OWQyIixzczoiJWQgXHU3OWQyIixtOiIxIFx1NTIwNlx1OTQx''@;'; put 'put ''OCIsbW06IiVkIFx1NTIwNlx1OTQxOCIsaDoiMSBcdTVjMGZcdTY2NDIiLGhoOiIlZCBcdTVjMGZcdTY2NDIiLGQ6IjEgXHU1OTI5IixkZDoiJWQgXHU1OTI5IixNOiIxIFx1NTAwYlx1NjcwOCIsTU06IiVkIFx1NTAwYlx1NjcwOCIseToiMSBcdTVlNzQiLHl5OiIlZCBcdTVlNzQifX0pfShi''@;'; put 'put ''KDk3NTg2KSl9LDkwMDQ6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTBmMjEiLDI6Ilx1MGYyMiIsMzoiXHUwZjIzIiw0OiJcdTBmMjQiLDU6Ilx1MGYyNSIsNjoiXHUwZjI2Iiw3OiJcdTBmMjciLDg6Ilx1MGYyOCIsOToiXHUwZjI5Iiww''@;'; put 'put ''OiJcdTBmMjAifSxwPXsiXHUwZjIxIjoiMSIsIlx1MGYyMiI6IjIiLCJcdTBmMjMiOiIzIiwiXHUwZjI0IjoiNCIsIlx1MGYyNSI6IjUiLCJcdTBmMjYiOiI2IiwiXHUwZjI3IjoiNyIsIlx1MGYyOCI6IjgiLCJcdTBmMjkiOiI5IiwiXHUwZjIwIjoiMCJ9O0kuZGVmaW5lTG9jYWxlKCJibyIs''@;'; put 'put ''e21vbnRoczoiXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjUxXHUwZjQ0XHUwZjBiXHUwZjU0XHUwZjdjX1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY0Mlx1MGY0OVx1MGY3Mlx1MGY2Nlx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBm''@;'; put 'put ''MGJcdTBmNDJcdTBmNjZcdTBmNzRcdTBmNThcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUwZjVlXHUwZjcyXHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY2M1x1MGY5NFx1MGYwYlx1MGY1NF9cdTBmNWZcdTBm''@;'; put 'put ''YjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTFcdTBmYjJcdTBmNzRcdTBmNDJcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUwZjUxXHUwZjc0XHUwZjUzXHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1Nlx1MGY2''@;'; put 'put ''Mlx1MGY5Mlx1MGZiMVx1MGY1MVx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTFcdTBmNDJcdTBmNzRcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUwZjQ1XHUwZjc0XHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZi''@;'; put 'put ''M1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1Nlx1MGY0NVx1MGY3NFx1MGYwYlx1MGY0Mlx1MGY0NVx1MGY3Mlx1MGY0Mlx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTZcdTBmNDVcdTBmNzRcdTBmMGJcdTBmNDJcdTBmNDlcdTBmNzJcdTBmNjZcdTBmMGJc''@;'; put 'put ''dTBmNTQiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGY1Zlx1MGZiM1x1MGYwYjFfXHUwZjVmXHUwZmIzXHUwZjBiMl9cdTBmNWZcdTBmYjNcdTBmMGIzX1x1MGY1Zlx1MGZiM1x1MGYwYjRfXHUwZjVmXHUwZmIzXHUwZjBiNV9cdTBmNWZcdTBmYjNcdTBmMGI2X1x1MGY1Zlx1MGZiM1x1''@;'; put 'put ''MGYwYjdfXHUwZjVmXHUwZmIzXHUwZjBiOF9cdTBmNWZcdTBmYjNcdTBmMGI5X1x1MGY1Zlx1MGZiM1x1MGYwYjEwX1x1MGY1Zlx1MGZiM1x1MGYwYjExX1x1MGY1Zlx1MGZiM1x1MGYwYjEyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0UmVnZXg6L14oXHUwZjVmXHUwZmIzXHUwZjBiXGR7MSwy''@;'; put 'put ''fSkvLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY0OVx1MGY3Mlx1MGYwYlx1MGY1OFx1MGYwYl9cdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJfXHUwZjQyXHUwZjVmXHUwZjYwXHUw''@;'; put 'put ''ZjBiXHUwZjU4XHUwZjcyXHUwZjQyXHUwZjBiXHUwZjUxXHUwZjU4XHUwZjYyXHUwZjBiX1x1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY2M1x1MGZiN1x1MGY0Mlx1MGYwYlx1MGY1NFx1MGYwYl9cdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNTVcdTBmNzRcdTBmNjJcdTBmMGJcdTBm''@;'; put 'put ''NTZcdTBmNzRfXHUwZjQyXHUwZjVmXHUwZjYwXHUwZjBiXHUwZjU0XHUwZjBiXHUwZjY2XHUwZjQ0XHUwZjY2XHUwZjBiX1x1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY2Nlx1MGZhNFx1MGY3YVx1MGY1M1x1MGYwYlx1MGY1NFx1MGYwYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJc''@;'; put 'put ''dTBmNDlcdTBmNzJcdTBmMGJcdTBmNThcdTBmMGJfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiX1x1MGY1OFx1MGY3Mlx1MGY0Mlx1MGYwYlx1MGY1MVx1MGY1OFx1MGY2Mlx1MGYwYl9cdTBmNjNcdTBmYjdcdTBmNDJcdTBmMGJcdTBmNTRcdTBmMGJfXHUwZjU1XHUwZjc0XHUwZjYy''@;'; put 'put ''XHUwZjBiXHUwZjU2XHUwZjc0X1x1MGY1NFx1MGYwYlx1MGY2Nlx1MGY0NFx1MGY2Nlx1MGYwYl9cdTBmNjZcdTBmYTRcdTBmN2FcdTBmNTNcdTBmMGJcdTBmNTRcdTBmMGIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGY0OVx1MGY3Ml9cdTBmNWZcdTBmYjNfXHUwZjU4XHUwZjcyXHUw''@;'; put 'put ''ZjQyX1x1MGY2M1x1MGZiN1x1MGY0Ml9cdTBmNTVcdTBmNzRcdTBmNjJfXHUwZjY2XHUwZjQ0XHUwZjY2X1x1MGY2Nlx1MGZhNFx1MGY3YVx1MGY1MyIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSIsTFRTOiJBIGg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1N''@;'; put 'put ''TU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBmNTFcdTBmNzJcdTBmMGJcdTBmNjJcdTBmNzJcdTBmNDRdIExUIixuZXh0RGF5OiJbXHUwZjY2XHUwZjQ0XHUwZjBiXHUwZjQ5''@;'; put 'put ''XHUwZjcyXHUwZjUzXSBMVCIsbmV4dFdlZWs6IltcdTBmNTZcdTBmNTFcdTBmNzRcdTBmNTNcdTBmMGJcdTBmNTVcdTBmYjJcdTBmNDJcdTBmMGJcdTBmNjJcdTBmOTdcdTBmN2FcdTBmNjZcdTBmMGJcdTBmNThdLCBMVCIsbGFzdERheToiW1x1MGY0MVx1MGYwYlx1MGY2Nlx1MGY0NF0gTFQi''@;'; put 'put ''LGxhc3RXZWVrOiJbXHUwZjU2XHUwZjUxXHUwZjc0XHUwZjUzXHUwZjBiXHUwZjU1XHUwZmIyXHUwZjQyXHUwZjBiXHUwZjU4XHUwZjUwXHUwZjYwXHUwZjBiXHUwZjU4XSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwZjYzXHUwZjBiIixwYXN0''@;'; put 'put ''OiIlcyBcdTBmNjZcdTBmOTRcdTBmNTNcdTBmMGJcdTBmNjMiLHM6Ilx1MGY2M1x1MGY1OFx1MGYwYlx1MGY2Nlx1MGY0NCIsc3M6IiVkIFx1MGY2Nlx1MGY5MFx1MGY2Mlx1MGYwYlx1MGY0Nlx1MGYwZCIsbToiXHUwZjY2XHUwZjkwXHUwZjYyXHUwZjBiXHUwZjU4XHUwZjBiXHUwZjQyXHUw''@;'; put 'put ''ZjQ1XHUwZjcyXHUwZjQyIixtbToiJWQgXHUwZjY2XHUwZjkwXHUwZjYyXHUwZjBiXHUwZjU4IixoOiJcdTBmNDZcdTBmNzRcdTBmMGJcdTBmNWFcdTBmN2NcdTBmNTFcdTBmMGJcdTBmNDJcdTBmNDVcdTBmNzJcdTBmNDIiLGhoOiIlZCBcdTBmNDZcdTBmNzRcdTBmMGJcdTBmNWFcdTBmN2Nc''@;'; put 'put ''dTBmNTEiLGQ6Ilx1MGY0OVx1MGY3Mlx1MGY1M1x1MGYwYlx1MGY0Mlx1MGY0NVx1MGY3Mlx1MGY0MiIsZGQ6IiVkIFx1MGY0OVx1MGY3Mlx1MGY1M1x1MGYwYiIsTToiXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjQyXHUwZjQ1XHUwZjcyXHUwZjQyIixNTToiJWQgXHUwZjVm''@;'; put 'put ''XHUwZmIzXHUwZjBiXHUwZjU2Iix5OiJcdTBmNjNcdTBmN2NcdTBmMGJcdTBmNDJcdTBmNDVcdTBmNzJcdTBmNDIiLHl5OiIlZCBcdTBmNjNcdTBmN2MifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUwZjIxXHUwZjIyXHUwZjIzXHUwZjI0XHUwZjI1XHUwZjI2''@;'; put 'put ''XHUwZjI3XHUwZjI4XHUwZjI5XHUwZjIwXS9nLGZ1bmN0aW9uKFApe3JldHVybiBwW1BdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihQKXtyZXR1cm4gX1tQXX0pfSxtZXJpZGllbVBhcnNlOi9cdTBmNThcdTBmNWFcdTBmNTNcdTBm''@;'; put 'put ''MGJcdTBmNThcdTBmN2N8XHUwZjVlXHUwZjdjXHUwZjQyXHUwZjY2XHUwZjBiXHUwZjQwXHUwZjY2fFx1MGY0OVx1MGY3Mlx1MGY1M1x1MGYwYlx1MGY0Mlx1MGY3NFx1MGY0NHxcdTBmNTFcdTBmNDJcdTBmN2NcdTBmNDRcdTBmMGJcdTBmNTFcdTBmNDJ8XHUwZjU4XHUwZjVhXHUwZjUzXHUw''@;'; put 'put ''ZjBiXHUwZjU4XHUwZjdjLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24odyxQKXtyZXR1cm4gMTI9PT13JiYodz0wKSwiXHUwZjU4XHUwZjVhXHUwZjUzXHUwZjBiXHUwZjU4XHUwZjdjIj09PVAmJnc+PTR8fCJcdTBmNDlcdTBmNzJcdTBmNTNcdTBmMGJcdTBmNDJcdTBmNzRcdTBmNDQiPT09UCYm''@;'; put 'put ''dzw1fHwiXHUwZjUxXHUwZjQyXHUwZjdjXHUwZjQ0XHUwZjBiXHUwZjUxXHUwZjQyIj09PVA/dysxMjp3fSxtZXJpZGllbTpmdW5jdGlvbih3LFAsRil7cmV0dXJuIHc8ND8iXHUwZjU4XHUwZjVhXHUwZjUzXHUwZjBiXHUwZjU4XHUwZjdjIjp3PDEwPyJcdTBmNWVcdTBmN2NcdTBmNDJcdTBm''@;'; put 'put ''NjZcdTBmMGJcdTBmNDBcdTBmNjYiOnc8MTc/Ilx1MGY0OVx1MGY3Mlx1MGY1M1x1MGYwYlx1MGY0Mlx1MGY3NFx1MGY0NCI6dzwyMD8iXHUwZjUxXHUwZjQyXHUwZjdjXHUwZjQ0XHUwZjBiXHUwZjUxXHUwZjQyIjoiXHUwZjU4XHUwZjVhXHUwZjUzXHUwZjBiXHUwZjU4XHUwZjdjIn0sd2Vl''@;'; put 'put ''azp7ZG93OjAsZG95OjZ9fSl9KGIoOTc1ODYpKX0sOTM3ODooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDI4MzY3KSxfPWIoNDY5MjYpLHA9YigzMDc4NyksVj1iKDMxNDgzKSx3PWIoMTEwOCksUD1iKDc1NDI0KSxGPWIoNjY1NDIpLHo9Yig0MTI1MikoInNvbWUiLFR5cGVFcnJv''@;'; put 'put ''cik7SSh7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6en0se3NvbWU6ZnVuY3Rpb24oTyl7dyh0aGlzKTt0cnl7VihPKX1jYXRjaChZKXtGKHRoaXMsInRocm93IixZKX1pZih6KXJldHVybiBfKHosdGhpcyxPKTt2YXIgSz1QKHRoaXMpLFo9MDtyZXR1cm4gcChL''@;'; put 'put ''LGZ1bmN0aW9uKFksVyl7aWYoTyhZLForKykpcmV0dXJuIFcoKX0se0lTX1JFQ09SRDohMCxJTlRFUlJVUFRFRDohMH0pLnN0b3BwZWR9fSl9LDk2NTY6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz10eXBlb2YgcHJvY2Vzcz4idSJ8fCFwcm9jZXNzLnZlcnNpb258fDA9PT1wcm9jZXNz''@;'; put 'put ''LnZlcnNpb24uaW5kZXhPZigidjAuIil8fDA9PT1wcm9jZXNzLnZlcnNpb24uaW5kZXhPZigidjEuIikmJjAhPT1wcm9jZXNzLnZlcnNpb24uaW5kZXhPZigidjEuOC4iKT97bmV4dFRpY2s6ZnVuY3Rpb24gWChiLEksXyxwKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYil0aHJvdyBuZXcgVHlw''@;'; put 'put ''ZUVycm9yKCciY2FsbGJhY2siIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO3ZhciB3LFAsVj1hcmd1bWVudHMubGVuZ3RoO3N3aXRjaChWKXtjYXNlIDA6Y2FzZSAxOnJldHVybiBwcm9jZXNzLm5leHRUaWNrKGIpO2Nhc2UgMjpyZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlv''@;'; put 'put ''bigpe2IuY2FsbChudWxsLEkpfSk7Y2FzZSAzOnJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCl7Yi5jYWxsKG51bGwsSSxfKX0pO2Nhc2UgNDpyZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpe2IuY2FsbChudWxsLEksXyxwKX0pO2RlZmF1bHQ6Zm9yKHc9bmV3IEFy''@;'; put 'put ''cmF5KFYtMSksUD0wO1A8dy5sZW5ndGg7KXdbUCsrXT1hcmd1bWVudHNbUF07cmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKXtiLmFwcGx5KG51bGwsdyl9KX19fTpwcm9jZXNzfSw5NjgyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEkoKXt0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoInNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXJcbnVzZSBjaHJvbWUsIEZpcmVGb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTEiKX12YXIgXz1iKDI3MDU0KSxwPWIoMzM0MiksVj1fLkJ1ZmZlcix3PV8ua01heExlbmd0aCxQ''@;'; put 'put ''PWdsb2JhbC5jcnlwdG98fGdsb2JhbC5tc0NyeXB0byxGPU1hdGgucG93KDIsMzIpLTE7ZnVuY3Rpb24gUihaLFkpe2lmKCJudW1iZXIiIT10eXBlb2YgWnx8WiE9Wil0aHJvdyBuZXcgVHlwZUVycm9yKCJvZmZzZXQgbXVzdCBiZSBhIG51bWJlciIpO2lmKFo+Rnx8WjwwKXRocm93IG5ldyBU''@;'; put 'put ''eXBlRXJyb3IoIm9mZnNldCBtdXN0IGJlIGEgdWludDMyIik7aWYoWj53fHxaPlkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiB6KFosWSxXKXtpZigibnVtYmVyIiE9dHlwZW9mIFp8fFohPVopdGhyb3cgbmV3IFR5cGVFcnJvcigic2l6ZSBt''@;'; put 'put ''dXN0IGJlIGEgbnVtYmVyIik7aWYoWj5GfHxaPDApdGhyb3cgbmV3IFR5cGVFcnJvcigic2l6ZSBtdXN0IGJlIGEgdWludDMyIik7aWYoWitZPld8fFo+dyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiYnVmZmVyIHRvbyBzbWFsbCIpfWZ1bmN0aW9uIE8oWixZLFcscSl7aWYocHJvY2Vzcy5icm93''@;'; put 'put ''c2VyKXt2YXIgSj1uZXcgVWludDhBcnJheShaLmJ1ZmZlcixZLFcpO3JldHVybiBQLmdldFJhbmRvbVZhbHVlcyhKKSxxP3ZvaWQgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpe3EobnVsbCxaKX0pOlp9aWYoIXEpcmV0dXJuIHAoVykuY29weShaLFkpLFo7cChXLGZ1bmN0aW9uKGllLHVl''@;'; put 'put ''KXtpZihpZSlyZXR1cm4gcShpZSk7dWUuY29weShaLFkpLHEobnVsbCxaKX0pfVAmJlAuZ2V0UmFuZG9tVmFsdWVzfHwhcHJvY2Vzcy5icm93c2VyPyhYLnJhbmRvbUZpbGw9ZnVuY3Rpb24gTihaLFksVyxxKXtpZighKFYuaXNCdWZmZXIoWil8fFogaW5zdGFuY2VvZiBnbG9iYWwuVWludDhB''@;'; put 'put ''cnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZiIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFkpcT1ZLFk9MCxXPVoubGVuZ3RoO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIFcpcT1XLFc9Wi5sZW5ndGgtWTtl''@;'; put 'put ''bHNlIGlmKCJmdW5jdGlvbiIhPXR5cGVvZiBxKXRocm93IG5ldyBUeXBlRXJyb3IoJyJjYiIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7cmV0dXJuIFIoWSxaLmxlbmd0aCkseihXLFksWi5sZW5ndGgpLE8oWixZLFcscSl9LFgucmFuZG9tRmlsbFN5bmM9ZnVuY3Rpb24gSyhaLFks''@;'; put 'put ''Vyl7aWYodHlwZW9mIFk+InUiJiYoWT0wKSwhKFYuaXNCdWZmZXIoWil8fFogaW5zdGFuY2VvZiBnbG9iYWwuVWludDhBcnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZiIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7cmV0dXJuIFIoWSxaLmxlbmd0aCks''@;'; put 'put ''dm9pZCAwPT09VyYmKFc9Wi5sZW5ndGgtWSkseihXLFksWi5sZW5ndGgpLE8oWixZLFcpfSk6KFgucmFuZG9tRmlsbD1JLFgucmFuZG9tRmlsbFN5bmM9SSl9LDk3NDc6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig5MzgwNykuQnVmZmVyO2Z1bmN0aW9uIF8ocSxlZSl7dGhpcy5p''@;'; put 'put ''Y29udj1lZX1YLnV0Zjc9XyxYLnVuaWNvZGUxMXV0Zjc9InV0ZjciLF8ucHJvdG90eXBlLmVuY29kZXI9VixfLnByb3RvdHlwZS5kZWNvZGVyPXcsXy5wcm90b3R5cGUuYm9tQXdhcmU9ITA7dmFyIHA9L1teQS1aYS16MC05J1woXCksLVwuXC86XD8gXG5cclx0XSsvZztmdW5jdGlvbiBWKHEs''@;'; put 'put ''ZWUpe3RoaXMuaWNvbnY9ZWUuaWNvbnZ9ZnVuY3Rpb24gdyhxLGVlKXt0aGlzLmljb252PWVlLmljb252LHRoaXMuaW5CYXNlNjQ9ITEsdGhpcy5iYXNlNjRBY2N1bT0iIn1WLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihxKXtyZXR1cm4gSS5mcm9tKHEucmVwbGFjZShwLGZ1bmN0aW9uKGVl''@;'; put 'put ''KXtyZXR1cm4iKyIrKCIrIj09PWVlPyIiOnRoaXMuaWNvbnYuZW5jb2RlKGVlLCJ1dGYxNi1iZSIpLnRvU3RyaW5nKCJiYXNlNjQiKS5yZXBsYWNlKC89KyQvLCIiKSkrIi0ifS5iaW5kKHRoaXMpKSl9LFYucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe307Zm9yKHZhciBQPS9bQS1aYS16MC05''@;'; put 'put ''XC8rXS8sRj1bXSxSPTA7UjwyNTY7UisrKUZbUl09UC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoUikpO3ZhciBOPTQ1O2Z1bmN0aW9uIEsocSxlZSl7dGhpcy5pY29udj1lZX1mdW5jdGlvbiBaKHEsZWUpe3RoaXMuaWNvbnY9ZWUuaWNvbnYsdGhpcy5pbkJhc2U2ND0hMSx0aGlzLmJhc2U2''@;'; put 'put ''NEFjY3VtPUkuYWxsb2MoNiksdGhpcy5iYXNlNjRBY2N1bUlkeD0wfWZ1bmN0aW9uIFkocSxlZSl7dGhpcy5pY29udj1lZS5pY29udix0aGlzLmluQmFzZTY0PSExLHRoaXMuYmFzZTY0QWNjdW09IiJ9dy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24ocSl7Zm9yKHZhciBlZT0iIixKPTAscmU9''@;'; put 'put ''dGhpcy5pbkJhc2U2NCxpZT10aGlzLmJhc2U2NEFjY3VtLHVlPTA7dWU8cS5sZW5ndGg7dWUrKylpZihyZSl7aWYoIUZbcVt1ZV1dKXtpZih1ZT09SiYmcVt1ZV09PU4pZWUrPSIrIjtlbHNle3ZhciBnZT1pZStxLnNsaWNlKEosdWUpLnRvU3RyaW5nKCk7ZWUrPXRoaXMuaWNvbnYuZGVjb2Rl''@;'; put 'put ''KEkuZnJvbShnZSwiYmFzZTY0IiksInV0ZjE2LWJlIil9cVt1ZV0hPU4mJnVlLS0sSj11ZSsxLHJlPSExLGllPSIifX1lbHNlIDQzPT1xW3VlXSYmKGVlKz10aGlzLmljb252LmRlY29kZShxLnNsaWNlKEosdWUpLCJhc2NpaSIpLEo9dWUrMSxyZT0hMCk7aWYocmUpe3ZhciBfZT0oZ2U9aWUr''@;'; put 'put ''cS5zbGljZShKKS50b1N0cmluZygpKS5sZW5ndGgtZ2UubGVuZ3RoJTg7aWU9Z2Uuc2xpY2UoX2UpLGdlPWdlLnNsaWNlKDAsX2UpLGVlKz10aGlzLmljb252LmRlY29kZShJLmZyb20oZ2UsImJhc2U2NCIpLCJ1dGYxNi1iZSIpfWVsc2UgZWUrPXRoaXMuaWNvbnYuZGVjb2RlKHEuc2xpY2Uo''@;'; put 'put ''SiksImFzY2lpIik7cmV0dXJuIHRoaXMuaW5CYXNlNjQ9cmUsdGhpcy5iYXNlNjRBY2N1bT1pZSxlZX0sdy5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dmFyIHE9IiI7cmV0dXJuIHRoaXMuaW5CYXNlNjQmJnRoaXMuYmFzZTY0QWNjdW0ubGVuZ3RoPjAmJihxPXRoaXMuaWNvbnYuZGVjb2Rl''@;'; put 'put ''KEkuZnJvbSh0aGlzLmJhc2U2NEFjY3VtLCJiYXNlNjQiKSwidXRmMTYtYmUiKSksdGhpcy5pbkJhc2U2ND0hMSx0aGlzLmJhc2U2NEFjY3VtPSIiLHF9LFgudXRmN2ltYXA9SyxLLnByb3RvdHlwZS5lbmNvZGVyPVosSy5wcm90b3R5cGUuZGVjb2Rlcj1ZLEsucHJvdG90eXBlLmJvbUF3YXJl''@;'; put 'put ''PSEwLFoucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHEpe2Zvcih2YXIgZWU9dGhpcy5pbkJhc2U2NCxKPXRoaXMuYmFzZTY0QWNjdW0scmU9dGhpcy5iYXNlNjRBY2N1bUlkeCxpZT1JLmFsbG9jKDUqcS5sZW5ndGgrMTApLHVlPTAsZ2U9MDtnZTxxLmxlbmd0aDtnZSsrKXt2YXIgX2U9cS5j''@;'; put 'put ''aGFyQ29kZUF0KGdlKTszMjw9X2UmJl9lPD0xMjY/KGVlJiYocmU+MCYmKHVlKz1pZS53cml0ZShKLnNsaWNlKDAscmUpLnRvU3RyaW5nKCJiYXNlNjQiKS5yZXBsYWNlKC9cLy9nLCIsIikucmVwbGFjZSgvPSskLywiIiksdWUpLHJlPTApLGllW3VlKytdPU4sZWU9ITEpLGVlfHwoaWVbdWUr''@;'; put 'put ''K109X2UsMzg9PT1fZSYmKGllW3VlKytdPU4pKSk6KGVlfHwoaWVbdWUrK109MzgsZWU9ITApLGVlJiYoSltyZSsrXT1fZT4+OCxKW3JlKytdPTI1NSZfZSxyZT09Si5sZW5ndGgmJih1ZSs9aWUud3JpdGUoSi50b1N0cmluZygiYmFzZTY0IikucmVwbGFjZSgvXC8vZywiLCIpLHVlKSxyZT0w''@;'; put 'put ''KSkpfXJldHVybiB0aGlzLmluQmFzZTY0PWVlLHRoaXMuYmFzZTY0QWNjdW1JZHg9cmUsaWUuc2xpY2UoMCx1ZSl9LFoucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3ZhciBxPUkuYWxsb2MoMTApLGVlPTA7cmV0dXJuIHRoaXMuaW5CYXNlNjQmJih0aGlzLmJhc2U2NEFjY3VtSWR4PjAmJihl''@;'; put 'put ''ZSs9cS53cml0ZSh0aGlzLmJhc2U2NEFjY3VtLnNsaWNlKDAsdGhpcy5iYXNlNjRBY2N1bUlkeCkudG9TdHJpbmcoImJhc2U2NCIpLnJlcGxhY2UoL1wvL2csIiwiKS5yZXBsYWNlKC89KyQvLCIiKSxlZSksdGhpcy5iYXNlNjRBY2N1bUlkeD0wKSxxW2VlKytdPU4sdGhpcy5pbkJhc2U2ND0h''@;'; put 'put ''MSkscS5zbGljZSgwLGVlKX07dmFyIFc9Ri5zbGljZSgpO1dbNDRdPSEwLFkucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHEpe2Zvcih2YXIgZWU9IiIsSj0wLHJlPXRoaXMuaW5CYXNlNjQsaWU9dGhpcy5iYXNlNjRBY2N1bSx1ZT0wO3VlPHEubGVuZ3RoO3VlKyspaWYocmUpe2lmKCFXW3Fb''@;'; put 'put ''dWVdXSl7aWYodWU9PUomJnFbdWVdPT1OKWVlKz0iJiI7ZWxzZXt2YXIgZ2U9aWUrcS5zbGljZShKLHVlKS50b1N0cmluZygpLnJlcGxhY2UoLywvZywiLyIpO2VlKz10aGlzLmljb252LmRlY29kZShJLmZyb20oZ2UsImJhc2U2NCIpLCJ1dGYxNi1iZSIpfXFbdWVdIT1OJiZ1ZS0tLEo9dWUr''@;'; put 'put ''MSxyZT0hMSxpZT0iIn19ZWxzZSAzOD09cVt1ZV0mJihlZSs9dGhpcy5pY29udi5kZWNvZGUocS5zbGljZShKLHVlKSwiYXNjaWkiKSxKPXVlKzEscmU9ITApO2lmKHJlKXt2YXIgX2U9KGdlPWllK3Euc2xpY2UoSikudG9TdHJpbmcoKS5yZXBsYWNlKC8sL2csIi8iKSkubGVuZ3RoLWdlLmxl''@;'; put 'put ''bmd0aCU4O2llPWdlLnNsaWNlKF9lKSxnZT1nZS5zbGljZSgwLF9lKSxlZSs9dGhpcy5pY29udi5kZWNvZGUoSS5mcm9tKGdlLCJiYXNlNjQiKSwidXRmMTYtYmUiKX1lbHNlIGVlKz10aGlzLmljb252LmRlY29kZShxLnNsaWNlKEopLCJhc2NpaSIpO3JldHVybiB0aGlzLmluQmFzZTY0PXJl''@;'; put 'put ''LHRoaXMuYmFzZTY0QWNjdW09aWUsZWV9LFkucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3ZhciBxPSIiO3JldHVybiB0aGlzLmluQmFzZTY0JiZ0aGlzLmJhc2U2NEFjY3VtLmxlbmd0aD4wJiYocT10aGlzLmljb252LmRlY29kZShJLmZyb20odGhpcy5iYXNlNjRBY2N1bSwiYmFzZTY0Iiks''@;'; put 'put ''InV0ZjE2LWJlIikpLHRoaXMuaW5CYXNlNjQ9ITEsdGhpcy5iYXNlNjRBY2N1bT0iIixxfX0sMTAxMDE6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigyODM2NyksXz1iKDg1MDM5KSxwPWIoNDYzNjIpO0koe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohYig1''@;'; put 'put ''MzUwNSkoInN5bW1ldHJpY0RpZmZlcmVuY2UiKXx8IXAoInN5bW1ldHJpY0RpZmZlcmVuY2UiKX0se3N5bW1ldHJpY0RpZmZlcmVuY2U6X30pfSwxMDE0MzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDIzMzEzKSxfPWIoNTg1NDApO2NlLmV4cG9ydHM9T2JqZWN0LmtleXN8fGZ1''@;'; put 'put ''bmN0aW9uKFYpe3JldHVybiBJKFYsXyl9fSwxMDIxOTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDM5MjEwKTtmdW5jdGlvbiBfKHApe3RoaXMub3B0aW9ucz1wLHRoaXMudHlwZT10aGlzLm9wdGlvbnMudHlwZSx0aGlzLmJsb2NrU2l6ZT04LHRoaXMuX2luaXQoKSx0aGlzLmJ1''@;'; put 'put ''ZmZlcj1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpLHRoaXMuYnVmZmVyT2ZmPTAsdGhpcy5wYWRkaW5nPSExIT09cC5wYWRkaW5nfWNlLmV4cG9ydHM9XyxfLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbigpe30sXy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKFYpe3JldHVybiAwPT09Vi5s''@;'; put 'put ''ZW5ndGg/W106ImRlY3J5cHQiPT09dGhpcy50eXBlP3RoaXMuX3VwZGF0ZURlY3J5cHQoVik6dGhpcy5fdXBkYXRlRW5jcnlwdChWKX0sXy5wcm90b3R5cGUuX2J1ZmZlcj1mdW5jdGlvbihWLHcpe2Zvcih2YXIgUD1NYXRoLm1pbih0aGlzLmJ1ZmZlci5sZW5ndGgtdGhpcy5idWZmZXJPZmYs''@;'; put 'put ''Vi5sZW5ndGgtdyksRj0wO0Y8UDtGKyspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJPZmYrRl09Vlt3K0ZdO3JldHVybiB0aGlzLmJ1ZmZlck9mZis9UCxQfSxfLnByb3RvdHlwZS5fZmx1c2hCdWZmZXI9ZnVuY3Rpb24oVix3KXtyZXR1cm4gdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLDAsVix3''@;'; put 'put ''KSx0aGlzLmJ1ZmZlck9mZj0wLHRoaXMuYmxvY2tTaXplfSxfLnByb3RvdHlwZS5fdXBkYXRlRW5jcnlwdD1mdW5jdGlvbihWKXt2YXIgdz0wLFA9MCxSPW5ldyBBcnJheSgoKHRoaXMuYnVmZmVyT2ZmK1YubGVuZ3RoKS90aGlzLmJsb2NrU2l6ZXwwKSp0aGlzLmJsb2NrU2l6ZSk7MCE9PXRo''@;'; put 'put ''aXMuYnVmZmVyT2ZmJiYodys9dGhpcy5fYnVmZmVyKFYsdyksdGhpcy5idWZmZXJPZmY9PT10aGlzLmJ1ZmZlci5sZW5ndGgmJihQKz10aGlzLl9mbHVzaEJ1ZmZlcihSLFApKSk7Zm9yKHZhciB6PVYubGVuZ3RoLShWLmxlbmd0aC13KSV0aGlzLmJsb2NrU2l6ZTt3PHo7dys9dGhpcy5ibG9j''@;'; put 'put ''a1NpemUpdGhpcy5fdXBkYXRlKFYsdyxSLFApLFArPXRoaXMuYmxvY2tTaXplO2Zvcig7dzxWLmxlbmd0aDt3KyssdGhpcy5idWZmZXJPZmYrKyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZl09Vlt3XTtyZXR1cm4gUn0sXy5wcm90b3R5cGUuX3VwZGF0ZURlY3J5cHQ9ZnVuY3Rpb24oVil7''@;'; put 'put ''Zm9yKHZhciB3PTAsUD0wLEY9TWF0aC5jZWlsKCh0aGlzLmJ1ZmZlck9mZitWLmxlbmd0aCkvdGhpcy5ibG9ja1NpemUpLTEsUj1uZXcgQXJyYXkoRip0aGlzLmJsb2NrU2l6ZSk7Rj4wO0YtLSl3Kz10aGlzLl9idWZmZXIoVix3KSxQKz10aGlzLl9mbHVzaEJ1ZmZlcihSLFApO3JldHVybiB3''@;'; put 'put ''Kz10aGlzLl9idWZmZXIoVix3KSxSfSxfLnByb3RvdHlwZS5maW5hbD1mdW5jdGlvbihWKXt2YXIgdyxQO3JldHVybiBWJiYodz10aGlzLnVwZGF0ZShWKSksUD0iZW5jcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fZmluYWxFbmNyeXB0KCk6dGhpcy5fZmluYWxEZWNyeXB0KCksdz93LmNvbmNh''@;'; put 'put ''dChQKTpQfSxfLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKFYsdyl7aWYoMD09PXcpcmV0dXJuITE7Zm9yKDt3PFYubGVuZ3RoOylWW3crK109MDtyZXR1cm4hMH0sXy5wcm90b3R5cGUuX2ZpbmFsRW5jcnlwdD1mdW5jdGlvbigpe2lmKCF0aGlzLl9wYWQodGhpcy5idWZmZXIsdGhpcy5idWZm''@;'; put 'put ''ZXJPZmYpKXJldHVybltdO3ZhciBWPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSk7cmV0dXJuIHRoaXMuX3VwZGF0ZSh0aGlzLmJ1ZmZlciwwLFYsMCksVn0sXy5wcm90b3R5cGUuX3VucGFkPWZ1bmN0aW9uKFYpe3JldHVybiBWfSxfLnByb3RvdHlwZS5fZmluYWxEZWNyeXB0PWZ1bmN0aW9u''@;'; put 'put ''KCl7SS5lcXVhbCh0aGlzLmJ1ZmZlck9mZix0aGlzLmJsb2NrU2l6ZSwiTm90IGVub3VnaCBkYXRhIHRvIGRlY3J5cHQiKTt2YXIgVj1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO3JldHVybiB0aGlzLl9mbHVzaEJ1ZmZlcihWLDApLHRoaXMuX3VucGFkKFYpfX0sMTAzNjM6KGNlLFgsYik9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7Yig2ODc2OCksYig4MjMwNil9LDEwNTY4OihjZSxYLGIpPT57dmFyIEk9YigxNjUwOCksXz1iKDI3MDU0KS5CdWZmZXI7Y2UuZXhwb3J0cz1mdW5jdGlvbiBwKFYsdyl7cmV0dXJuIF8uZnJvbShWLnRvUmVkKEkubW9udCh3Lm1vZHVsdXMpKS5yZWRQb3cobmV3IEko''@;'; put 'put ''dy5wdWJsaWNFeHBvbmVudCkpLmZyb21SZWQoKS50b0FycmF5KCkpfX0sMTA4Mjc6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig2ODI4MyksXz1iKDEyOTAxKSxwPWIoMzkyMTApLFY9SS5yb3RyNjRfaGksdz1JLnJvdHI2NF9sbyxQPUkuc2hyNjRfaGksRj1JLnNocjY0X2xvLFI9''@;'; put 'put ''SS5zdW02NCx6PUkuc3VtNjRfaGksTj1JLnN1bTY0X2xvLE89SS5zdW02NF80X2hpLEs9SS5zdW02NF80X2xvLFo9SS5zdW02NF81X2hpLFk9SS5zdW02NF81X2xvLFc9Xy5CbG9ja0hhc2gscT1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEs''@;'; put 'put ''Mzk2NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYw''@;'; put 'put ''NzIyNTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcx''@;'; put 'put ''MTEzOSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0''@;'; put 'put ''OSw3NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzcz''@;'; put 'put ''NTI5OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4''@;'; put 'put ''NjM0NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzcz''@;'; put 'put ''NCwzMTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5''@;'; put 'put ''NTU1NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1''@;'; put 'put ''OTIwNDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2''@;'; put 'put ''OSwzMjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2''@;'; put 'put ''NDAyMzE2LDEyNDYxODk1OTFdO2Z1bmN0aW9uIGVlKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgZWUpKXJldHVybiBuZXcgZWU7Vy5jYWxsKHRoaXMpLHRoaXMuaD1bMTc3OTAzMzcwMyw0MDg5MjM1NzIwLDMxNDQxMzQyNzcsMjIyNzg3MzU5NSwxMDEzOTA0MjQyLDQyNzExNzU3MjMsMjc3MzQ4''@;'; put 'put ''MDc2MiwxNTk1NzUwMTI5LDEzNTk4OTMxMTksMjkxNzU2NTEzNywyNjAwODIyOTI0LDcyNTUxMTE5OSw1Mjg3MzQ2MzUsNDIxNTM4OTU0NywxNTQxNDU5MjI1LDMyNzAzMzIwOV0sdGhpcy5rPXEsdGhpcy5XPW5ldyBBcnJheSgxNjApfWZ1bmN0aW9uIEooeCxDLFQsSCxqKXt2YXIgRT14JlRe''@;'; put 'put ''fngmajtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiByZSh4LEMsVCxILGosRSl7dmFyIG09QyZIXn5DJkU7cmV0dXJuIG08MCYmKG0rPTQyOTQ5NjcyOTYpLG19ZnVuY3Rpb24gaWUoeCxDLFQsSCxqKXt2YXIgRT14JlReeCZqXlQmajtyZXR1cm4gRTwwJiYoRSs9NDI5''@;'; put 'put ''NDk2NzI5NiksRX1mdW5jdGlvbiB1ZSh4LEMsVCxILGosRSl7dmFyIG09QyZIXkMmRV5IJkU7cmV0dXJuIG08MCYmKG0rPTQyOTQ5NjcyOTYpLG19ZnVuY3Rpb24gZ2UoeCxDKXt2YXIgRT1WKHgsQywyOCleVihDLHgsMileVihDLHgsNyk7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9''@;'; put 'put ''ZnVuY3Rpb24gX2UoeCxDKXt2YXIgRT13KHgsQywyOCledyhDLHgsMiledyhDLHgsNyk7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gVGUoeCxDKXt2YXIgRT1WKHgsQywxNCleVih4LEMsMTgpXlYoQyx4LDkpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1''@;'; put 'put ''bmN0aW9uIE1lKHgsQyl7dmFyIEU9dyh4LEMsMTQpXncoeCxDLDE4KV53KEMseCw5KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBaZSh4LEMpe3ZhciBFPVYoeCxDLDEpXlYoeCxDLDgpXlAoeCxDLDcpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0''@;'; put 'put ''aW9uIEIoeCxDKXt2YXIgRT13KHgsQywxKV53KHgsQyw4KV5GKHgsQyw3KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBnKHgsQyl7dmFyIEU9Vih4LEMsMTkpXlYoQyx4LDI5KV5QKHgsQyw2KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiB5''@;'; put 'put ''KHgsQyl7dmFyIEU9dyh4LEMsMTkpXncoQyx4LDI5KV5GKHgsQyw2KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1JLmluaGVyaXRzKGVlLFcpLGNlLmV4cG9ydHM9ZWUsZWUuYmxvY2tTaXplPTEwMjQsZWUub3V0U2l6ZT01MTIsZWUuaG1hY1N0cmVuZ3RoPTE5MixlZS5wYWRMZW5n''@;'; put 'put ''dGg9MTI4LGVlLnByb3RvdHlwZS5fcHJlcGFyZUJsb2NrPWZ1bmN0aW9uKEMsVCl7Zm9yKHZhciBIPXRoaXMuVyxqPTA7ajwzMjtqKyspSFtqXT1DW1Qral07Zm9yKDtqPEgubGVuZ3RoO2orPTIpe3ZhciBFPWcoSFtqLTRdLEhbai0zXSksbT15KEhbai00XSxIW2otM10pLEE9SFtqLTE0XSxh''@;'; put 'put ''ZT1IW2otMTNdLG5lPVplKEhbai0zMF0sSFtqLTI5XSksc2U9QihIW2otMzBdLEhbai0yOV0pLENlPUhbai0zMl0sVWU9SFtqLTMxXTtIW2pdPU8oRSxtLEEsYWUsbmUsc2UsQ2UsVWUpLEhbaisxXT1LKEUsbSxBLGFlLG5lLHNlLENlLFVlKX19LGVlLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0''@;'; put 'put ''aW9uKEMsVCl7dGhpcy5fcHJlcGFyZUJsb2NrKEMsVCk7dmFyIEg9dGhpcy5XLGo9dGhpcy5oWzBdLEU9dGhpcy5oWzFdLG09dGhpcy5oWzJdLEE9dGhpcy5oWzNdLGFlPXRoaXMuaFs0XSxuZT10aGlzLmhbNV0sc2U9dGhpcy5oWzZdLENlPXRoaXMuaFs3XSxVZT10aGlzLmhbOF0sSmU9dGhp''@;'; put 'put ''cy5oWzldLGl0PXRoaXMuaFsxMF0seGU9dGhpcy5oWzExXSx5ZT10aGlzLmhbMTJdLEtlPXRoaXMuaFsxM10samU9dGhpcy5oWzE0XSxrZT10aGlzLmhbMTVdO3AodGhpcy5rLmxlbmd0aD09PUgubGVuZ3RoKTtmb3IodmFyIEhlPTA7SGU8SC5sZW5ndGg7SGUrPTIpe3ZhciBMZT1qZSxSZT1r''@;'; put 'put ''ZSxWZT1UZShVZSxKZSksQWU9TWUoVWUsSmUpLERlPUooVWUsMCxpdCwwLHllKSxfdD1yZSgwLEplLDAseGUsMCxLZSkscnQ9dGhpcy5rW0hlXSxRZT10aGlzLmtbSGUrMV0sc249SFtIZV0sdnQ9SFtIZSsxXSxTdD1aKExlLFJlLFZlLEFlLERlLF90LHJ0LFFlLHNuLHZ0KSxlbj1ZKExlLFJl''@;'; put 'put ''LFZlLEFlLERlLF90LHJ0LFFlLHNuLHZ0KTtMZT1nZShqLEUpLFJlPV9lKGosRSksVmU9aWUoaiwwLG0sMCxhZSksQWU9dWUoMCxFLDAsQSwwLG5lKTt2YXIgdXQ9eihMZSxSZSxWZSxBZSksWGU9TihMZSxSZSxWZSxBZSk7amU9eWUsa2U9S2UseWU9aXQsS2U9eGUsaXQ9VWUseGU9SmUsVWU9''@;'; put 'put ''eihzZSxDZSxTdCxlbiksSmU9TihDZSxDZSxTdCxlbiksc2U9YWUsQ2U9bmUsYWU9bSxuZT1BLG09aixBPUUsaj16KFN0LGVuLHV0LFhlKSxFPU4oU3QsZW4sdXQsWGUpfVIodGhpcy5oLDAsaixFKSxSKHRoaXMuaCwyLG0sQSksUih0aGlzLmgsNCxhZSxuZSksUih0aGlzLmgsNixzZSxDZSks''@;'; put 'put ''Uih0aGlzLmgsOCxVZSxKZSksUih0aGlzLmgsMTAsaXQseGUpLFIodGhpcy5oLDEyLHllLEtlKSxSKHRoaXMuaCwxNCxqZSxrZSl9LGVlLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKEMpe3JldHVybiJoZXgiPT09Qz9JLnRvSGV4MzIodGhpcy5oLCJiaWciKTpJLnNwbGl0MzIodGhpcy5o''@;'; put 'put ''LCJiaWciKX19LDExNTQ0OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiYWYiLHttb250aHM6IkphbnVhcmllX0ZlYnJ1YXJpZV9NYWFydF9BcHJpbF9NZWlfSnVuaWVfSnVsaWVfQXVndXN0dXNfU2VwdGVtYmVyX09rdG9iZXJfTm92''@;'; put 'put ''ZW1iZXJfRGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTXJ0X0Fwcl9NZWlfSnVuX0p1bF9BdWdfU2VwX09rdF9Ob3ZfRGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTb25kYWdfTWFhbmRhZ19EaW5zZGFnX1dvZW5zZGFnX0RvbmRlcmRhZ19WcnlkYWdfU2F0ZXJk''@;'; put 'put ''YWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU29uX01hYV9EaW5fV29lX0Rvbl9WcnlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTb19NYV9EaV9Xb19Eb19Wcl9TYSIuc3BsaXQoIl8iKSxtZXJpZGllbVBhcnNlOi92bXxubS9pLGlzUE06ZnVuY3Rpb24ocCl7cmV0dXJuL15u''@;'; put 'put ''bSQvaS50ZXN0KHApfSxtZXJpZGllbTpmdW5jdGlvbihwLFYsdyl7cmV0dXJuIHA8MTI/dz8idm0iOiJWTSI6dz8ibm0iOiJOTSJ9LGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZ''@;'; put 'put ''WSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1ZhbmRhZyBvbV0gTFQiLG5leHREYXk6IltNXHhmNHJlIG9tXSBMVCIsbmV4dFdlZWs6ImRkZGQgW29tXSBMVCIsbGFzdERheToiW0dpc3RlciBvbV0gTFQiLGxhc3RXZWVrOiJbTGFh''@;'; put 'put ''c10gZGRkZCBbb21dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvb3IgJXMiLHBhc3Q6IiVzIGdlbGVkZSIsczoiJ24gcGFhciBzZWtvbmRlcyIsc3M6IiVkIHNla29uZGVzIixtOiInbiBtaW51dXQiLG1tOiIlZCBtaW51dGUiLGg6IiduIHV1ciIsaGg6IiVkIHVy''@;'; put 'put ''ZSIsZDoiJ24gZGFnIixkZDoiJWQgZGFlIixNOiInbiBtYWFuZCIsTU06IiVkIG1hYW5kZSIseToiJ24gamFhciIseXk6IiVkIGphYXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0ZXxkZSkvLG9yZGluYWw6ZnVuY3Rpb24ocCl7cmV0dXJuIHArKDE9PT1wfHw4PT09cHx8''@;'; put 'put ''cD49MjA/InN0ZSI6ImRlIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDEyMjAyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMzM5NjMpLF89YigxOTE1MCk7Y2UuZXhwb3J0cz1mdW5jdGlvbihWLHcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/ZnVuY3Rp''@;'; put 'put ''b24oVil7cmV0dXJuIF8oVik/Vjp2b2lkIDB9KElbVl0pOklbVl0mJklbVl1bd119fSwxMjM3NTooY2UsWCxiKT0+e3ZhciBJPWIoMjcwNTQpLkJ1ZmZlcjtmdW5jdGlvbiBfKFIpe0kuaXNCdWZmZXIoUil8fChSPUkuZnJvbShSKSk7Zm9yKHZhciB6PVIubGVuZ3RoLzR8MCxOPW5ldyBBcnJh''@;'; put 'put ''eSh6KSxPPTA7Tzx6O08rKylOW09dPVIucmVhZFVJbnQzMkJFKDQqTyk7cmV0dXJuIE59ZnVuY3Rpb24gcChSKXtmb3IoOzA8Ui5sZW5ndGg7UisrKVJbMF09MH1mdW5jdGlvbiBWKFIseixOLE8sSyl7Zm9yKHZhciB1ZSxnZSxfZSxUZSxaPU5bMF0sWT1OWzFdLFc9TlsyXSxxPU5bM10sZWU9''@;'; put 'put ''UlswXV56WzBdLEo9UlsxXV56WzFdLHJlPVJbMl1eelsyXSxpZT1SWzNdXnpbM10sTWU9NCxaZT0xO1plPEs7WmUrKyl1ZT1aW2VlPj4+MjRdXllbSj4+PjE2JjI1NV1eV1tyZT4+PjgmMjU1XV5xWzI1NSZpZV1eeltNZSsrXSxnZT1aW0o+Pj4yNF1eWVtyZT4+PjE2JjI1NV1eV1tpZT4+Pjgm''@;'; put 'put ''MjU1XV5xWzI1NSZlZV1eeltNZSsrXSxfZT1aW3JlPj4+MjRdXllbaWU+Pj4xNiYyNTVdXldbZWU+Pj44JjI1NV1ecVsyNTUmSl1eeltNZSsrXSxUZT1aW2llPj4+MjRdXllbZWU+Pj4xNiYyNTVdXldbSj4+PjgmMjU1XV5xWzI1NSZyZV1eeltNZSsrXSxlZT11ZSxKPWdlLHJlPV9lLGllPVRl''@;'; put 'put ''O3JldHVybiB1ZT0oT1tlZT4+PjI0XTw8MjR8T1tKPj4+MTYmMjU1XTw8MTZ8T1tyZT4+PjgmMjU1XTw8OHxPWzI1NSZpZV0pXnpbTWUrK10sZ2U9KE9bSj4+PjI0XTw8MjR8T1tyZT4+PjE2JjI1NV08PDE2fE9baWU+Pj44JjI1NV08PDh8T1syNTUmZWVdKV56W01lKytdLF9lPShPW3JlPj4+''@;'; put 'put ''MjRdPDwyNHxPW2llPj4+MTYmMjU1XTw8MTZ8T1tlZT4+PjgmMjU1XTw8OHxPWzI1NSZKXSleeltNZSsrXSxUZT0oT1tpZT4+PjI0XTw8MjR8T1tlZT4+PjE2JjI1NV08PDE2fE9bSj4+PjgmMjU1XTw8OHxPWzI1NSZyZV0pXnpbTWUrK10sW3VlPj4+PTAsZ2U+Pj49MCxfZT4+Pj0wLFRlPj4+''@;'; put 'put ''PTBdfXZhciB3PVswLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0XSxQPWZ1bmN0aW9uKCl7Zm9yKHZhciBSPW5ldyBBcnJheSgyNTYpLHo9MDt6PDI1Njt6KyspUlt6XT16PDEyOD96PDwxOno8PDFeMjgzO2Zvcih2YXIgTj1bXSxPPVtdLEs9W1tdLFtdLFtdLFtdXSxaPVtbXSxbXSxbXSxb''@;'; put 'put ''XV0sWT0wLFc9MCxxPTA7cTwyNTY7KytxKXt2YXIgZWU9V15XPDwxXlc8PDJeVzw8M15XPDw0O05bWV09ZWU9ZWU+Pj44XjI1NSZlZV45OSxPW2VlXT1ZO3ZhciBKPVJbWV0scmU9UltKXSxpZT1SW3JlXSx1ZT0yNTcqUltlZV1eMTY4NDMwMDgqZWU7S1swXVtZXT11ZTw8MjR8dWU+Pj44LEtb''@;'; put 'put ''MV1bWV09dWU8PDE2fHVlPj4+MTYsS1syXVtZXT11ZTw8OHx1ZT4+PjI0LEtbM11bWV09dWUsWlswXVtlZV09KHVlPTE2ODQzMDA5KmllXjY1NTM3KnJlXjI1NypKXjE2ODQzMDA4KlkpPDwyNHx1ZT4+PjgsWlsxXVtlZV09dWU8PDE2fHVlPj4+MTYsWlsyXVtlZV09dWU8PDh8dWU+Pj4yNCxa''@;'; put 'put ''WzNdW2VlXT11ZSwwPT09WT9ZPVc9MTooWT1KXlJbUltSW2llXkpdXV0sV149UltSW1ddXSl9cmV0dXJue1NCT1g6TixJTlZfU0JPWDpPLFNVQl9NSVg6SyxJTlZfU1VCX01JWDpafX0oKTtmdW5jdGlvbiBGKFIpe3RoaXMuX2tleT1fKFIpLHRoaXMuX3Jlc2V0KCl9Ri5ibG9ja1NpemU9MTYs''@;'; put 'put ''Ri5rZXlTaXplPTMyLEYucHJvdG90eXBlLmJsb2NrU2l6ZT1GLmJsb2NrU2l6ZSxGLnByb3RvdHlwZS5rZXlTaXplPUYua2V5U2l6ZSxGLnByb3RvdHlwZS5fcmVzZXQ9ZnVuY3Rpb24oKXtmb3IodmFyIFI9dGhpcy5fa2V5LHo9Ui5sZW5ndGgsTj16KzYsTz00KihOKzEpLEs9W10sWj0wO1o8''@;'; put 'put ''ejtaKyspS1taXT1SW1pdO2ZvcihaPXo7WjxPO1orKyl7dmFyIFk9S1taLTFdO1olej09MD8oWT1QLlNCT1hbKFk9WTw8OHxZPj4+MjQpPj4+MjRdPDwyNHxQLlNCT1hbWT4+PjE2JjI1NV08PDE2fFAuU0JPWFtZPj4+OCYyNTVdPDw4fFAuU0JPWFsyNTUmWV0sWV49d1taL3p8MF08PDI0KTp6''@;'; put 'put ''PjYmJlolej09NCYmKFk9UC5TQk9YW1k+Pj4yNF08PDI0fFAuU0JPWFtZPj4+MTYmMjU1XTw8MTZ8UC5TQk9YW1k+Pj44JjI1NV08PDh8UC5TQk9YWzI1NSZZXSksS1taXT1LW1otel1eWX1mb3IodmFyIFc9W10scT0wO3E8TztxKyspe3ZhciBlZT1PLXEsSj1LW2VlLShxJTQ/MDo0KV07V1tx''@;'; put 'put ''XT1xPDR8fGVlPD00P0o6UC5JTlZfU1VCX01JWFswXVtQLlNCT1hbSj4+PjI0XV1eUC5JTlZfU1VCX01JWFsxXVtQLlNCT1hbSj4+PjE2JjI1NV1dXlAuSU5WX1NVQl9NSVhbMl1bUC5TQk9YW0o+Pj44JjI1NV1dXlAuSU5WX1NVQl9NSVhbM11bUC5TQk9YWzI1NSZKXV19dGhpcy5fblJvdW5k''@;'; put 'put ''cz1OLHRoaXMuX2tleVNjaGVkdWxlPUssdGhpcy5faW52S2V5U2NoZWR1bGU9V30sRi5wcm90b3R5cGUuZW5jcnlwdEJsb2NrUmF3PWZ1bmN0aW9uKFIpe3JldHVybiBWKFI9XyhSKSx0aGlzLl9rZXlTY2hlZHVsZSxQLlNVQl9NSVgsUC5TQk9YLHRoaXMuX25Sb3VuZHMpfSxGLnByb3RvdHlw''@;'; put 'put ''ZS5lbmNyeXB0QmxvY2s9ZnVuY3Rpb24oUil7dmFyIHo9dGhpcy5lbmNyeXB0QmxvY2tSYXcoUiksTj1JLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gTi53cml0ZVVJbnQzMkJFKHpbMF0sMCksTi53cml0ZVVJbnQzMkJFKHpbMV0sNCksTi53cml0ZVVJbnQzMkJFKHpbMl0sOCksTi53cml0ZVVJ''@;'; put 'put ''bnQzMkJFKHpbM10sMTIpLE59LEYucHJvdG90eXBlLmRlY3J5cHRCbG9jaz1mdW5jdGlvbihSKXt2YXIgej0oUj1fKFIpKVsxXTtSWzFdPVJbM10sUlszXT16O3ZhciBOPVYoUix0aGlzLl9pbnZLZXlTY2hlZHVsZSxQLklOVl9TVUJfTUlYLFAuSU5WX1NCT1gsdGhpcy5fblJvdW5kcyksTz1J''@;'; put 'put ''LmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gTy53cml0ZVVJbnQzMkJFKE5bMF0sMCksTy53cml0ZVVJbnQzMkJFKE5bM10sNCksTy53cml0ZVVJbnQzMkJFKE5bMl0sOCksTy53cml0ZVVJbnQzMkJFKE5bMV0sMTIpLE99LEYucHJvdG90eXBlLnNjcnViPWZ1bmN0aW9uKCl7cCh0aGlzLl9rZXlT''@;'; put 'put ''Y2hlZHVsZSkscCh0aGlzLl9pbnZLZXlTY2hlZHVsZSkscCh0aGlzLl9rZXkpfSxjZS5leHBvcnRzLkFFUz1GfSwxMjYwMTooY2UsWCxiKT0+e2NlLmV4cG9ydHM9Yig0NDM1NikuRXZlbnRFbWl0dGVyfSwxMjY4MzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSTtmdW5jdGlvbiBfKGll''@;'; put 'put ''LHVlLGdlKXtyZXR1cm4gdWU9ZnVuY3Rpb24gcChpZSl7dmFyIHVlPWZ1bmN0aW9uIFYoaWUsdWUpe2lmKCJvYmplY3QiIT10eXBlb2YgaWV8fG51bGw9PT1pZSlyZXR1cm4gaWU7dmFyIGdlPWllW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09Z2Upe3ZhciBfZT1nZS5jYWxsKGll''@;'; put 'put ''LHVlfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgX2UpcmV0dXJuIF9lO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dWU/U3RyaW5nOk51bWJlcikoaWUpfShpZSwic3Ry''@;'; put 'put ''aW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB1ZT91ZTpTdHJpbmcodWUpfSh1ZSksdWUgaW4gaWU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGllLHVlLHt2YWx1ZTpnZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmllW3VlXT1nZSxpZX12YXIgdz1iKDU3''@;'; put 'put ''ODU0KSxQPVN5bWJvbCgibGFzdFJlc29sdmUiKSxGPVN5bWJvbCgibGFzdFJlamVjdCIpLFI9U3ltYm9sKCJlcnJvciIpLHo9U3ltYm9sKCJlbmRlZCIpLE49U3ltYm9sKCJsYXN0UHJvbWlzZSIpLE89U3ltYm9sKCJoYW5kbGVQcm9taXNlIiksSz1TeW1ib2woInN0cmVhbSIpO2Z1bmN0aW9u''@;'; put 'put ''IFooaWUsdWUpe3JldHVybnt2YWx1ZTppZSxkb25lOnVlfX1mdW5jdGlvbiBZKGllKXt2YXIgdWU9aWVbUF07aWYobnVsbCE9PXVlKXt2YXIgZ2U9aWVbS10ucmVhZCgpO251bGwhPT1nZSYmKGllW05dPW51bGwsaWVbUF09bnVsbCxpZVtGXT1udWxsLHVlKFooZ2UsITEpKSl9fWZ1bmN0aW9u''@;'; put 'put ''IFcoaWUpe3Byb2Nlc3MubmV4dFRpY2soWSxpZSl9dmFyIGVlPU9iamVjdC5nZXRQcm90b3R5cGVPZihmdW5jdGlvbigpe30pLEo9T2JqZWN0LnNldFByb3RvdHlwZU9mKChfKEk9e2dldCBzdHJlYW0oKXtyZXR1cm4gdGhpc1tLXX0sbmV4dDpmdW5jdGlvbigpe3ZhciB1ZT10aGlzLGdlPXRo''@;'; put 'put ''aXNbUl07aWYobnVsbCE9PWdlKXJldHVybiBQcm9taXNlLnJlamVjdChnZSk7aWYodGhpc1t6XSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFoodm9pZCAwLCEwKSk7aWYodGhpc1tLXS5kZXN0cm95ZWQpcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKFplLEIpe3Byb2Nlc3MubmV4dFRpY2so''@;'; put 'put ''ZnVuY3Rpb24oKXt1ZVtSXT9CKHVlW1JdKTpaZShaKHZvaWQgMCwhMCkpfSl9KTt2YXIgVGUsX2U9dGhpc1tOXTtpZihfZSlUZT1uZXcgUHJvbWlzZShmdW5jdGlvbiBxKGllLHVlKXtyZXR1cm4gZnVuY3Rpb24oZ2UsX2Upe2llLnRoZW4oZnVuY3Rpb24oKXt1ZVt6XT9nZShaKHZvaWQgMCwh''@;'; put 'put ''MCkpOnVlW09dKGdlLF9lKX0sX2UpfX0oX2UsdGhpcykpO2Vsc2V7dmFyIE1lPXRoaXNbS10ucmVhZCgpO2lmKG51bGwhPT1NZSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFooTWUsITEpKTtUZT1uZXcgUHJvbWlzZSh0aGlzW09dKX1yZXR1cm4gdGhpc1tOXT1UZSxUZX19LFN5bWJvbC5hc3lu''@;'; put 'put ''Y0l0ZXJhdG9yLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxfKEksInJldHVybiIsZnVuY3Rpb24oKXt2YXIgdWU9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZ2UsX2Upe3VlW0tdLmRlc3Ryb3kobnVsbCxmdW5jdGlvbihUZSl7VGU/X2UoVGUpOmdlKFoodm9pZCAwLCEwKSl9''@;'; put 'put ''KX0pfSksSSksZWUpO2NlLmV4cG9ydHM9ZnVuY3Rpb24odWUpe3ZhciBnZSxfZT1PYmplY3QuY3JlYXRlKEosKF8oZ2U9e30sSyx7dmFsdWU6dWUsd3JpdGFibGU6ITB9KSxfKGdlLFAse3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSxfKGdlLEYse3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSxf''@;'; put 'put ''KGdlLFIse3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSxfKGdlLHose3ZhbHVlOnVlLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQsd3JpdGFibGU6ITB9KSxfKGdlLE8se3ZhbHVlOmZ1bmN0aW9uKE1lLFplKXt2YXIgQj1fZVtLXS5yZWFkKCk7Qj8oX2VbTl09bnVsbCxfZVtQXT1udWxsLF9l''@;'; put 'put ''W0ZdPW51bGwsTWUoWihCLCExKSkpOihfZVtQXT1NZSxfZVtGXT1aZSl9LHdyaXRhYmxlOiEwfSksZ2UpKTtyZXR1cm4gX2VbTl09bnVsbCx3KHVlLGZ1bmN0aW9uKFRlKXtpZihUZSYmIkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFIiE9PVRlLmNvZGUpe3ZhciBNZT1fZVtGXTtyZXR1cm4g''@;'; put 'put ''bnVsbCE9PU1lJiYoX2VbTl09bnVsbCxfZVtQXT1udWxsLF9lW0ZdPW51bGwsTWUoVGUpKSx2b2lkKF9lW1JdPVRlKX12YXIgWmU9X2VbUF07bnVsbCE9PVplJiYoX2VbTl09bnVsbCxfZVtQXT1udWxsLF9lW0ZdPW51bGwsWmUoWih2b2lkIDAsITApKSksX2Vbel09ITB9KSx1ZS5vbigicmVh''@;'; put 'put ''ZGFibGUiLFcuYmluZChudWxsLF9lKSksX2V9fSwxMjcyNzooY2UsWCxiKT0+e3ZhciBJPWIoMzM0Mik7Y2UuZXhwb3J0cz11ZSx1ZS5zaW1wbGVTaWV2ZT1yZSx1ZS5mZXJtYXRUZXN0PWllO3ZhciBfPWIoMzgyODApLHA9bmV3IF8oMjQpLHc9bmV3KGIoNTM0NTkpKSxQPW5ldyBfKDEpLEY9''@;'; put 'put ''bmV3IF8oMiksUj1uZXcgXyg1KSxPPShuZXcgXygxNiksbmV3IF8oOCksbmV3IF8oMTApKSxLPW5ldyBfKDMpLFk9KG5ldyBfKDcpLG5ldyBfKDExKSksVz1uZXcgXyg0KSxlZT0obmV3IF8oMTIpLG51bGwpO2Z1bmN0aW9uIHJlKGdlKXtmb3IodmFyIF9lPWZ1bmN0aW9uIEooKXtpZihudWxs''@;'; put 'put ''IT09ZWUpcmV0dXJuIGVlO3ZhciBfZT1bXTtfZVswXT0yO2Zvcih2YXIgVGU9MSxNZT0zO01lPDEwNDg1NzY7TWUrPTIpe2Zvcih2YXIgWmU9TWF0aC5jZWlsKE1hdGguc3FydChNZSkpLEI9MDtCPFRlJiZfZVtCXTw9WmUmJk1lJV9lW0JdIT0wO0IrKyk7VGUhPT1CJiZfZVtCXTw9WmV8fChf''@;'; put 'put ''ZVtUZSsrXT1NZSl9cmV0dXJuIGVlPV9lLF9lfSgpLFRlPTA7VGU8X2UubGVuZ3RoO1RlKyspaWYoMD09PWdlLm1vZG4oX2VbVGVdKSlyZXR1cm4gMD09PWdlLmNtcG4oX2VbVGVdKTtyZXR1cm4hMH1mdW5jdGlvbiBpZShnZSl7dmFyIF9lPV8ubW9udChnZSk7cmV0dXJuIDA9PT1GLnRvUmVk''@;'; put 'put ''KF9lKS5yZWRQb3coZ2Uuc3VibigxKSkuZnJvbVJlZCgpLmNtcG4oMSl9ZnVuY3Rpb24gdWUoZ2UsX2Upe2lmKGdlPDE2KXJldHVybiBuZXcgXygyPT09X2V8fDU9PT1fZT9bMTQwLDEyM106WzE0MCwzOV0pO19lPW5ldyBfKF9lKTtmb3IodmFyIFRlLE1lOzspe2ZvcihUZT1uZXcgXyhJKE1h''@;'; put 'put ''dGguY2VpbChnZS84KSkpO1RlLmJpdExlbmd0aCgpPmdlOylUZS5pc2hybigxKTtpZihUZS5pc0V2ZW4oKSYmVGUuaWFkZChQKSxUZS50ZXN0bigxKXx8VGUuaWFkZChGKSxfZS5jbXAoRikpe2lmKCFfZS5jbXAoUikpZm9yKDtUZS5tb2QoTykuY21wKEspOylUZS5pYWRkKFcpfWVsc2UgZm9y''@;'; put 'put ''KDtUZS5tb2QocCkuY21wKFkpOylUZS5pYWRkKFcpO2lmKHJlKE1lPVRlLnNocm4oMSkpJiZyZShUZSkmJmllKE1lKSYmaWUoVGUpJiZ3LnRlc3QoTWUpJiZ3LnRlc3QoVGUpKXJldHVybiBUZX19fSwxMjc3MzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDkwMjU4KSxfPWIoNjE4''@;'; put 'put ''ODUpLHA9XyhbSSgiJVN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiUiKV0pO2NlLmV4cG9ydHM9ZnVuY3Rpb24odyxQKXt2YXIgRj1JKHcsISFQKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRiYmcCh3LCIucHJvdG90eXBlLiIpPi0xP18oW0ZdKTpGfX0sMTI5MDE6KGNlLFgsYik9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIEk9Yig2ODI4MyksXz1iKDM5MjEwKTtmdW5jdGlvbiBwKCl7dGhpcy5wZW5kaW5nPW51bGwsdGhpcy5wZW5kaW5nVG90YWw9MCx0aGlzLmJsb2NrU2l6ZT10aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZSx0aGlzLm91dFNpemU9dGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXpl''@;'; put 'put ''LHRoaXMuaG1hY1N0cmVuZ3RoPXRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoLHRoaXMucGFkTGVuZ3RoPXRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoLzgsdGhpcy5lbmRpYW49ImJpZyIsdGhpcy5fZGVsdGE4PXRoaXMuYmxvY2tTaXplLzgsdGhpcy5fZGVsdGEzMj10aGlzLmJsb2Nr''@;'; put 'put ''U2l6ZS8zMn1YLkJsb2NrSGFzaD1wLHAucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih3LFApe2lmKHc9SS50b0FycmF5KHcsUCksdGhpcy5wZW5kaW5nPXRoaXMucGVuZGluZz90aGlzLnBlbmRpbmcuY29uY2F0KHcpOncsdGhpcy5wZW5kaW5nVG90YWwrPXcubGVuZ3RoLHRoaXMucGVuZGlu''@;'; put 'put ''Zy5sZW5ndGg+PXRoaXMuX2RlbHRhOCl7dmFyIEY9KHc9dGhpcy5wZW5kaW5nKS5sZW5ndGgldGhpcy5fZGVsdGE4O3RoaXMucGVuZGluZz13LnNsaWNlKHcubGVuZ3RoLUYsdy5sZW5ndGgpLDA9PT10aGlzLnBlbmRpbmcubGVuZ3RoJiYodGhpcy5wZW5kaW5nPW51bGwpLHc9SS5qb2luMzIo''@;'; put 'put ''dywwLHcubGVuZ3RoLUYsdGhpcy5lbmRpYW4pO2Zvcih2YXIgUj0wO1I8dy5sZW5ndGg7Uis9dGhpcy5fZGVsdGEzMil0aGlzLl91cGRhdGUodyxSLFIrdGhpcy5fZGVsdGEzMil9cmV0dXJuIHRoaXN9LHAucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbih3KXtyZXR1cm4gdGhpcy51cGRhdGUo''@;'; put 'put ''dGhpcy5fcGFkKCkpLF8obnVsbD09PXRoaXMucGVuZGluZyksdGhpcy5fZGlnZXN0KHcpfSxwLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5wZW5kaW5nVG90YWwsUD10aGlzLl9kZWx0YTgsRj1QLSh3K3RoaXMucGFkTGVuZ3RoKSVQLFI9bmV3IEFycmF5KEYrdGhpcy5w''@;'; put 'put ''YWRMZW5ndGgpO1JbMF09MTI4O2Zvcih2YXIgej0xO3o8Rjt6KyspUlt6XT0wO2lmKHc8PD0zLCJiaWciPT09dGhpcy5lbmRpYW4pe2Zvcih2YXIgTj04O048dGhpcy5wYWRMZW5ndGg7TisrKVJbeisrXT0wO1JbeisrXT0wLFJbeisrXT0wLFJbeisrXT0wLFJbeisrXT0wLFJbeisrXT13Pj4+''@;'; put 'put ''MjQmMjU1LFJbeisrXT13Pj4+MTYmMjU1LFJbeisrXT13Pj4+OCYyNTUsUlt6KytdPTI1NSZ3fWVsc2UgZm9yKFJbeisrXT0yNTUmdyxSW3orK109dz4+PjgmMjU1LFJbeisrXT13Pj4+MTYmMjU1LFJbeisrXT13Pj4+MjQmMjU1LFJbeisrXT0wLFJbeisrXT0wLFJbeisrXT0wLFJbeisrXT0w''@;'; put 'put ''LE49ODtOPHRoaXMucGFkTGVuZ3RoO04rKylSW3orK109MDtyZXR1cm4gUn19LDEyOTU0OihjZSxYLGIpPT57IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmV4cG9ydHMuaXNfdXJpPXAsSS5leHBvcnRzLmlzX2h0dHBfdXJpPVYsSS5leHBvcnRzLmlzX2h0dHBzX3VyaT13LEkuZXhwb3J0''@;'; put 'put ''cy5pc193ZWJfdXJpPVAsSS5leHBvcnRzLmlzVXJpPXAsSS5leHBvcnRzLmlzSHR0cFVyaT1WLEkuZXhwb3J0cy5pc0h0dHBzVXJpPXcsSS5leHBvcnRzLmlzV2ViVXJpPVA7dmFyIF89ZnVuY3Rpb24oRil7cmV0dXJuIEYubWF0Y2goLyg/OihbXjpcLz8jXSspOik/KD86XC9cLyhbXlwvPyNd''@;'; put 'put ''KikpPyhbXj8jXSopKD86XD8oW14jXSopKT8oPzojKC4qKSk/Lyl9O2Z1bmN0aW9uIHAoRil7aWYoRiYmIS9bXmEtejAtOVw6XC9cP1wjXFtcXVxAXCFcJFwmXCdcKFwpXCpcK1wsXDtcPVwuXC1cX1x+XCVdL2kudGVzdChGKSYmIS8lW14wLTlhLWZdL2kudGVzdChGKSYmIS8lWzAtOWEtZl0o''@;'; put 'put ''Oj9bXjAtOWEtZl18JCkvaS50ZXN0KEYpKXt2YXIgUixOLE8sSyxaLHo9IiIsWT0iIjtpZihOPShSPV8oRikpWzJdLE89UlszXSxLPVJbNF0sWj1SWzVdLCh6PVJbMV0pJiZ6Lmxlbmd0aCYmTy5sZW5ndGg+PTApe2lmKE4mJk4ubGVuZ3RoKXtpZigwIT09Ty5sZW5ndGgmJiEvXlwvLy50ZXN0''@;'; put 'put ''KE8pKXJldHVybn1lbHNlIGlmKC9eXC9cLy8udGVzdChPKSlyZXR1cm47aWYoL15bYS16XVthLXowLTlcK1wtXC5dKiQvLnRlc3Qoei50b0xvd2VyQ2FzZSgpKSlyZXR1cm4gWSs9eisiOiIsTiYmTi5sZW5ndGgmJihZKz0iLy8iK04pLFkrPU8sSyYmSy5sZW5ndGgmJihZKz0iPyIrSyksWiYm''@;'; put 'put ''Wi5sZW5ndGgmJihZKz0iIyIrWiksWX19fWZ1bmN0aW9uIFYoRixSKXtpZihwKEYpKXt2YXIgeixLLFksVyxOPSIiLE89IiIsWj0iIixxPSIiO2lmKE89KHo9XyhGKSlbMl0sSz16WzNdLFk9els0XSxXPXpbNV0sTj16WzFdKXtpZihSKXtpZigiaHR0cHMiIT1OLnRvTG93ZXJDYXNlKCkpcmV0''@;'; put 'put ''dXJufWVsc2UgaWYoImh0dHAiIT1OLnRvTG93ZXJDYXNlKCkpcmV0dXJuO2lmKE8pcmV0dXJuLzooXGQrKSQvLnRlc3QoTykmJihaPU8ubWF0Y2goLzooXGQrKSQvKVswXSxPPU8ucmVwbGFjZSgvOlxkKyQvLCIiKSkscSs9TisiOiIscSs9Ii8vIitPLFomJihxKz1aKSxxKz1LLFkmJlkubGVu''@;'; put 'put ''Z3RoJiYocSs9Ij8iK1kpLFcmJlcubGVuZ3RoJiYocSs9IiMiK1cpLHF9fX1mdW5jdGlvbiB3KEYpe3JldHVybiBWKEYsITApfWZ1bmN0aW9uIFAoRil7cmV0dXJuIFYoRil8fHcoRil9fShjZT1iLm5tZChjZSkpfSwxMzI0NzooY2UsWCk9PnsidXNlIHN0cmljdCI7dmFyIF87WC5ZPXZvaWQg''@;'; put 'put ''MCwoXz1YLll8fChYLlk9e30pKS5TYXNWaXlhPSJTQVNWSVlBIixfLlNhczk9IlNBUzkiLF8uU2FzanM9IlNBU0pTIn0sMTM1NDY6Y2U9PntjZS5leHBvcnRzPWZ1bmN0aW9uKGIsSSl7Zm9yKHZhciBfPU1hdGgubWluKGIubGVuZ3RoLEkubGVuZ3RoKSxwPW5ldyBCdWZmZXIoXyksVj0wO1Y8''@;'; put 'put ''XzsrK1YpcFtWXT1iW1ZdXklbVl07cmV0dXJuIHB9fSwxMzY0MjpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6Ilx1MDk2NyIsMjoiXHUwOTY4IiwzOiJcdTA5NjkiLDQ6Ilx1MDk2YSIsNToiXHUwOTZiIiw2OiJcdTA5NmMiLDc6Ilx1MDk2ZCIs''@;'; put 'put ''ODoiXHUwOTZlIiw5OiJcdTA5NmYiLDA6Ilx1MDk2NiJ9LHA9eyJcdTA5NjciOiIxIiwiXHUwOTY4IjoiMiIsIlx1MDk2OSI6IjMiLCJcdTA5NmEiOiI0IiwiXHUwOTZiIjoiNSIsIlx1MDk2YyI6IjYiLCJcdTA5NmQiOiI3IiwiXHUwOTZlIjoiOCIsIlx1MDk2ZiI6IjkiLCJcdTA5NjYiOiIw''@;'; put 'put ''In07SS5kZWZpbmVMb2NhbGUoIm5lIix7bW9udGhzOiJcdTA5MWNcdTA5MjhcdTA5MzVcdTA5MzBcdTA5NDBfXHUwOTJiXHUwOTQ3XHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQxXHUwOTM1XHUwOTMwXHUwOTQwX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MDVcdTA5MmFcdTA5''@;'; put 'put ''NGRcdTA5MzBcdTA5M2ZcdTA5MzJfXHUwOTJlXHUwOTA4X1x1MDkxY1x1MDk0MVx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5M2VcdTA5MDhfXHUwOTA1XHUwOTE3XHUwOTM3XHUwOTRkXHUwOTFmX1x1MDkzOFx1MDk0N1x1MDkyYVx1MDk0ZFx1MDkxZlx1MDk0N1x1MDkyZVx1MDk0ZFx1''@;'; put 'put ''MDkyY1x1MDkzMF9cdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NGJcdTA5MmNcdTA5MzBfXHUwOTI4XHUwOTRiXHUwOTJkXHUwOTQ3XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0N1x1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMCIuc3BsaXQoIl8iKSxt''@;'; put 'put ''b250aHNTaG9ydDoiXHUwOTFjXHUwOTI4Ll9cdTA5MmJcdTA5NDdcdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDEuX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5M2YuX1x1MDkyZVx1MDkwOF9cdTA5MWNcdTA5NDFcdTA5MjhfXHUwOTFj''@;'; put 'put ''XHUwOTQxXHUwOTMyXHUwOTNlXHUwOTA4Ll9cdTA5MDVcdTA5MTcuX1x1MDkzOFx1MDk0N1x1MDkyYVx1MDk0ZFx1MDkxZi5fXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTRiLl9cdTA5MjhcdTA5NGJcdTA5MmRcdTA5NDcuX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0Ny4iLnNwbGl0KCJf''@;'; put 'put ''IiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwOTA2XHUwOTA3XHUwOTI0XHUwOTJjXHUwOTNlXHUwOTMwX1x1MDkzOFx1MDk0Ylx1MDkyZVx1MDkyY1x1MDkzZVx1MDkzMF9cdTA5MmVcdTA5MTlcdTA5NGRcdTA5MTdcdTA5MzJcdTA5MmNcdTA5M2VcdTA5MzBfXHUwOTJjXHUw''@;'; put 'put ''OTQxXHUwOTI3XHUwOTJjXHUwOTNlXHUwOTMwX1x1MDkyY1x1MDkzZlx1MDkzOVx1MDkzZlx1MDkyY1x1MDkzZVx1MDkzMF9cdTA5MzZcdTA5NDFcdTA5MTVcdTA5NGRcdTA5MzBcdTA5MmNcdTA5M2VcdTA5MzBfXHUwOTM2XHUwOTI4XHUwOTNmXHUwOTJjXHUwOTNlXHUwOTMwIi5zcGxpdCgi''@;'; put 'put ''XyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDkwNlx1MDkwN1x1MDkyNC5fXHUwOTM4XHUwOTRiXHUwOTJlLl9cdTA5MmVcdTA5MTlcdTA5NGRcdTA5MTdcdTA5MzIuX1x1MDkyY1x1MDk0MVx1MDkyNy5fXHUwOTJjXHUwOTNmXHUwOTM5XHUwOTNmLl9cdTA5MzZcdTA5NDFcdTA5MTVcdTA5NGRcdTA5''@;'; put 'put ''MzAuX1x1MDkzNlx1MDkyOFx1MDkzZi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDkwNi5fXHUwOTM4XHUwOTRiLl9cdTA5MmVcdTA5MDIuX1x1MDkyY1x1MDk0MS5fXHUwOTJjXHUwOTNmLl9cdTA5MzZcdTA5NDEuX1x1MDkzNi4iLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0''@;'; put 'put ''OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiQVx1MDkxNVx1MDk0YiBoOm1tIFx1MDkyY1x1MDkxY1x1MDk0NyIsTFRTOiJBXHUwOTE1XHUwOTRiIGg6bW06c3MgXHUwOTJjXHUwOTFjXHUwOTQ3IixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEFcdTA5''@;'; put 'put ''MTVcdTA5NGIgaDptbSBcdTA5MmNcdTA5MWNcdTA5NDciLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBXHUwOTE1XHUwOTRiIGg6bW0gXHUwOTJjXHUwOTFjXHUwOTQ3In0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MDk2N1x1MDk2OFx1MDk2OVx1MDk2YVx1''@;'; put 'put ''MDk2Ylx1MDk2Y1x1MDk2ZFx1MDk2ZVx1MDk2Zlx1MDk2Nl0vZyxmdW5jdGlvbihQKXtyZXR1cm4gcFtQXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oUCl7cmV0dXJuIF9bUF19KX0sbWVyaWRpZW1QYXJzZTovXHUwOTMwXHUwOTNl''@;'; put 'put ''XHUwOTI0XHUwOTNmfFx1MDkyY1x1MDkzZlx1MDkzOVx1MDkzZVx1MDkyOHxcdTA5MjZcdTA5M2ZcdTA5MDlcdTA5MDFcdTA5MzhcdTA5NGJ8XHUwOTM4XHUwOTNlXHUwOTAxXHUwOTFkLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24odyxQKXtyZXR1cm4gMTI9PT13JiYodz0wKSwiXHUwOTMwXHUw''@;'; put 'put ''OTNlXHUwOTI0XHUwOTNmIj09PVA/dzw0P3c6dysxMjoiXHUwOTJjXHUwOTNmXHUwOTM5XHUwOTNlXHUwOTI4Ij09PVA/dzoiXHUwOTI2XHUwOTNmXHUwOTA5XHUwOTAxXHUwOTM4XHUwOTRiIj09PVA/dz49MTA/dzp3KzEyOiJcdTA5MzhcdTA5M2VcdTA5MDFcdTA5MWQiPT09UD93KzEyOnZv''@;'; put 'put ''aWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDM/Ilx1MDkzMFx1MDkzZVx1MDkyNFx1MDkzZiI6dzwxMj8iXHUwOTJjXHUwOTNmXHUwOTM5XHUwOTNlXHUwOTI4Ijp3PDE2PyJcdTA5MjZcdTA5M2ZcdTA5MDlcdTA5MDFcdTA5MzhcdTA5NGIiOnc8MjA/Ilx1MDkzOFx1''@;'; put 'put ''MDkzZVx1MDkwMVx1MDkxZCI6Ilx1MDkzMFx1MDkzZVx1MDkyNFx1MDkzZiJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwOTA2XHUwOTFjXSBMVCIsbmV4dERheToiW1x1MDkyZFx1MDk0Ylx1MDkzMlx1MDkzZl0gTFQiLG5leHRXZWVrOiJbXHUwOTA2XHUwOTA5XHUwOTAxXHUwOTI2XHUwOTRi''@;'; put 'put ''XSBkZGRkWyxdIExUIixsYXN0RGF5OiJbXHUwOTM5XHUwOTNmXHUwOTFjXHUwOTRiXSBMVCIsbGFzdFdlZWs6IltcdTA5MTdcdTA5MGZcdTA5MTVcdTA5NGJdIGRkZGRbLF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHUwOTJlXHUwOTNlIixwYXN0OiIlcyBc''@;'; put 'put ''dTA5MDVcdTA5MTdcdTA5M2VcdTA5MjFcdTA5M2YiLHM6Ilx1MDkxNVx1MDk0N1x1MDkzOVx1MDk0MCBcdTA5MTVcdTA5NGRcdTA5MzdcdTA5MjMiLHNzOiIlZCBcdTA5MzhcdTA5NDdcdTA5MTVcdTA5NDdcdTA5MjNcdTA5NGRcdTA5MjEiLG06Ilx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5M2Zc''@;'; put 'put ''dTA5MjhcdTA5NDdcdTA5MWYiLG1tOiIlZCBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5NDdcdTA5MWYiLGg6Ilx1MDkwZlx1MDkxNSBcdTA5MThcdTA5MjNcdTA5NGRcdTA5MWZcdTA5M2UiLGhoOiIlZCBcdTA5MThcdTA5MjNcdTA5NGRcdTA5MWZcdTA5M2UiLGQ6Ilx1MDkwZlx1MDkxNSBcdTA5''@;'; put 'put ''MjZcdTA5M2ZcdTA5MjgiLGRkOiIlZCBcdTA5MjZcdTA5M2ZcdTA5MjgiLE06Ilx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5MzlcdTA5M2ZcdTA5MjhcdTA5M2UiLE1NOiIlZCBcdTA5MmVcdTA5MzlcdTA5M2ZcdTA5MjhcdTA5M2UiLHk6Ilx1MDkwZlx1MDkxNSBcdTA5MmNcdTA5MzBcdTA5NGRc''@;'; put 'put ''dTA5MzciLHl5OiIlZCBcdTA5MmNcdTA5MzBcdTA5NGRcdTA5MzcifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oYig5NzU4NikpfSwxMzY4NjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDI3MDU0KS5CdWZmZXIsXz1iKDcwNDUpLlRyYW5zZm9ybTtmdW5jdGlvbiBWKFIpe18uY2Fs''@;'; put 'put ''bCh0aGlzKSx0aGlzLl9ibG9jaz1JLmFsbG9jVW5zYWZlKFIpLHRoaXMuX2Jsb2NrU2l6ZT1SLHRoaXMuX2Jsb2NrT2Zmc2V0PTAsdGhpcy5fbGVuZ3RoPVswLDAsMCwwXSx0aGlzLl9maW5hbGl6ZWQ9ITF9Yig3MTk5MykoVixfKSxWLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKFIs''@;'; put 'put ''eixOKXt2YXIgTz1udWxsO3RyeXt0aGlzLnVwZGF0ZShSLHopfWNhdGNoKEspe089S31OKE8pfSxWLnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24oUil7dmFyIHo9bnVsbDt0cnl7dGhpcy5wdXNoKHRoaXMuZGlnZXN0KCkpfWNhdGNoKE4pe3o9Tn1SKHopfTt2YXIgdz10eXBlb2YgVWludDhB''@;'; put 'put ''cnJheTwidSIsUD10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZ0eXBlb2YgVWludDhBcnJheTwidSImJkFycmF5QnVmZmVyLmlzVmlldyYmKEkucHJvdG90eXBlIGluc3RhbmNlb2YgVWludDhBcnJheXx8SS5UWVBFRF9BUlJBWV9TVVBQT1JUKTtWLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24o''@;'; put 'put ''Uix6KXtpZih0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKCJEaWdlc3QgYWxyZWFkeSBjYWxsZWQiKTtSPWZ1bmN0aW9uIEYoUix6KXtpZihSIGluc3RhbmNlb2YgSSlyZXR1cm4gUjtpZigic3RyaW5nIj09dHlwZW9mIFIpcmV0dXJuIEkuZnJvbShSLHopO2lmKFAmJkFycmF5QnVm''@;'; put 'put ''ZmVyLmlzVmlldyhSKSl7aWYoMD09PVIuYnl0ZUxlbmd0aClyZXR1cm4gSS5hbGxvYygwKTt2YXIgTj1JLmZyb20oUi5idWZmZXIsUi5ieXRlT2Zmc2V0LFIuYnl0ZUxlbmd0aCk7aWYoTi5ieXRlTGVuZ3RoPT09Ui5ieXRlTGVuZ3RoKXJldHVybiBOfWlmKHcmJlIgaW5zdGFuY2VvZiBVaW50''@;'; put 'put ''OEFycmF5fHxJLmlzQnVmZmVyKFIpJiZSLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgUi5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmUi5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihSKSlyZXR1cm4gSS5mcm9tKFIpO3Rocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiZGF0YSIgYXJndW1lbnQg''@;'; put 'put ''bXVzdCBiZSBvZiB0eXBlIHN0cmluZyBvciBhbiBpbnN0YW5jZSBvZiBCdWZmZXIsIFR5cGVkQXJyYXksIG9yIERhdGFWaWV3LicpfShSLHopO2Zvcih2YXIgTj10aGlzLl9ibG9jayxPPTA7dGhpcy5fYmxvY2tPZmZzZXQrUi5sZW5ndGgtTz49dGhpcy5fYmxvY2tTaXplOyl7Zm9yKHZhciBL''@;'; put 'put ''PXRoaXMuX2Jsb2NrT2Zmc2V0O0s8dGhpcy5fYmxvY2tTaXplOylOW0srK109UltPKytdO3RoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTB9Zm9yKDtPPFIubGVuZ3RoOylOW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPVJbTysrXTtmb3IodmFyIFo9MCxZPTgqUi5sZW5ndGg7WT4wOysr''@;'; put 'put ''Wil0aGlzLl9sZW5ndGhbWl0rPVksKFk9dGhpcy5fbGVuZ3RoW1pdLzQyOTQ5NjcyOTZ8MCk+MCYmKHRoaXMuX2xlbmd0aFtaXS09NDI5NDk2NzI5NipZKTtyZXR1cm4gdGhpc30sVi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX3VwZGF0ZSBpcyBub3Qg''@;'; put 'put ''aW1wbGVtZW50ZWQiKX0sVi5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKFIpe2lmKHRoaXMuX2ZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZCIpO3RoaXMuX2ZpbmFsaXplZD0hMDt2YXIgej10aGlzLl9kaWdlc3QoKTt2b2lkIDAhPT1SJiYoej16LnRv''@;'; put 'put ''U3RyaW5nKFIpKSx0aGlzLl9ibG9jay5maWxsKDApLHRoaXMuX2Jsb2NrT2Zmc2V0PTA7Zm9yKHZhciBOPTA7Tjw0OysrTil0aGlzLl9sZW5ndGhbTl09MDtyZXR1cm4gen0sVi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX2RpZ2VzdCBpcyBub3QgaW1w''@;'; put 'put ''bGVtZW50ZWQiKX0sY2UuZXhwb3J0cz1WfSwxMzkwODooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0IjtiKDM5NTk1KX0sMTM5MTE6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJzZSIse21vbnRoczoib1x1MDExMVx1MDExMWFqYWdlbVx4''@;'; put 'put ''ZTFubnVfZ3VvdnZhbVx4ZTFubnVfbmp1a1x1MDEwZGFtXHhlMW5udV9jdW9cdTAxNGJvbVx4ZTFubnVfbWllc3NlbVx4ZTFubnVfZ2Vhc3NlbVx4ZTFubnVfc3VvaWRuZW1ceGUxbm51X2JvcmdlbVx4ZTFubnVfXHUwMTBkYWtcdTAxMGRhbVx4ZTFubnVfZ29sZ2dvdG1ceGUxbm51X3NrXHhl''@;'; put 'put ''MWJtYW1ceGUxbm51X2p1b3ZsYW1ceGUxbm51Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJvXHUwMTExXHUwMTExal9ndW92X25qdWtfY3VvX21pZXNfZ2Vhc19zdW9pX2JvcmdfXHUwMTBkYWtcdTAxMGRfZ29sZ19za1x4ZTFiX2p1b3YiLnNwbGl0KCJfIiksd2Vla2RheXM6InNvdG5hYmVh''@;'; put 'put ''aXZpX3Z1b3NzXHhlMXJnYV9tYVx1MDE0Ylx1MDE0YmViXHhlMXJnYV9nYXNrYXZhaGtrdV9kdW9yYXN0YXRfYmVhcmphZGF0X2xceGUxdnZhcmRhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzb3RuX3Z1b3NfbWFcdTAxNGJfZ2Fza19kdW9yX2JlYXJfbFx4ZTF2Ii5zcGxpdCgiXyIp''@;'; put 'put ''LHdlZWtkYXlzTWluOiJzX3ZfbV9nX2RfYl9MIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJNTU1NIEQuIFtiLl0gWVlZWSIsTExMOiJNTU1NIEQuIFtiLl0gWVlZWSBbdGkuXSBISDptbSIsTExMTDoiZGRk''@;'; put 'put ''ZCwgTU1NTSBELiBbYi5dIFlZWVkgW3RpLl0gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW290bmUgdGldIExUIixuZXh0RGF5OiJbaWh0dGluIHRpXSBMVCIsbmV4dFdlZWs6ImRkZGQgW3RpXSBMVCIsbGFzdERheToiW2lrdGUgdGldIExUIixsYXN0V2VlazoiW292ZGRpdF0gZGRkZCBb''@;'; put 'put ''dGldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBnZWFcdTAxN2VlcyIscGFzdDoibWFcdTAxNGJpdCAlcyIsczoibW9hZGRlIHNla3VuZGRhdCIsc3M6IiVkIHNla3VuZGRhdCIsbToib2t0YSBtaW51aHRhIixtbToiJWQgbWludWh0YXQiLGg6Im9rdGEgZGlp''@;'; put 'put ''bW11IixoaDoiJWQgZGlpbW11dCIsZDoib2t0YSBiZWFpdmkiLGRkOiIlZCBiZWFpdnZpdCIsTToib2t0YSBtXHhlMW5udSIsTU06IiVkIG1ceGUxbnV0Iix5OiJva3RhIGphaGtpIix5eToiJWQgamFnaXQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVk''@;'; put 'put ''LiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sMTM5ODE6KGNlLFgpPT57InVzZSBzdHJpY3QiO1guYnl0ZUxlbmd0aD1mdW5jdGlvbiBGKFope3ZhciBZPVAoWikscT1ZWzFdO3JldHVybiAzKihZWzBdK3EpLzQtcX0sWC50b0J5dGVBcnJheT1mdW5jdGlvbiB6KFope3ZhciBZ''@;'; put 'put ''LHVlLFc9UChaKSxxPVdbMF0sZWU9V1sxXSxKPW5ldyBfKGZ1bmN0aW9uIFIoWixZLFcpe3JldHVybiAzKihZK1cpLzQtV30oMCxxLGVlKSkscmU9MCxpZT1lZT4wP3EtNDpxO2Zvcih1ZT0wO3VlPGllO3VlKz00KVk9SVtaLmNoYXJDb2RlQXQodWUpXTw8MTh8SVtaLmNoYXJDb2RlQXQodWUr''@;'; put 'put ''MSldPDwxMnxJW1ouY2hhckNvZGVBdCh1ZSsyKV08PDZ8SVtaLmNoYXJDb2RlQXQodWUrMyldLEpbcmUrK109WT4+MTYmMjU1LEpbcmUrK109WT4+OCYyNTUsSltyZSsrXT0yNTUmWTtyZXR1cm4gMj09PWVlJiYoWT1JW1ouY2hhckNvZGVBdCh1ZSldPDwyfElbWi5jaGFyQ29kZUF0KHVlKzEp''@;'; put 'put ''XT4+NCxKW3JlKytdPTI1NSZZKSwxPT09ZWUmJihZPUlbWi5jaGFyQ29kZUF0KHVlKV08PDEwfElbWi5jaGFyQ29kZUF0KHVlKzEpXTw8NHxJW1ouY2hhckNvZGVBdCh1ZSsyKV0+PjIsSltyZSsrXT1ZPj44JjI1NSxKW3JlKytdPTI1NSZZKSxKfSxYLmZyb21CeXRlQXJyYXk9ZnVuY3Rpb24g''@;'; put 'put ''SyhaKXtmb3IodmFyIFksVz1aLmxlbmd0aCxxPVclMyxlZT1bXSxKPTE2MzgzLHJlPTAsaWU9Vy1xO3JlPGllO3JlKz1KKWVlLnB1c2goTyhaLHJlLHJlK0o+aWU/aWU6cmUrSikpO3JldHVybiAxPT09cT9lZS5wdXNoKGJbKFk9WltXLTFdKT4+Ml0rYltZPDw0JjYzXSsiPT0iKToyPT09cSYm''@;'; put 'put ''ZWUucHVzaChiWyhZPShaW1ctMl08PDgpK1pbVy0xXSk+PjEwXStiW1k+PjQmNjNdK2JbWTw8MiY2M10rIj0iKSxlZS5qb2luKCIiKX07Zm9yKHZhciBiPVtdLEk9W10sXz10eXBlb2YgVWludDhBcnJheTwidSI/VWludDhBcnJheTpBcnJheSxwPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZ''@;'; put 'put ''WmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIixWPTA7Vjw2NDsrK1YpYltWXT1wW1ZdLElbcC5jaGFyQ29kZUF0KFYpXT1WO2Z1bmN0aW9uIFAoWil7dmFyIFk9Wi5sZW5ndGg7aWYoWSU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11''@;'; put 'put ''c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7dmFyIFc9Wi5pbmRleE9mKCI9Iik7cmV0dXJuLTE9PT1XJiYoVz1ZKSxbVyxXPT09WT8wOjQtVyU0XX1mdW5jdGlvbiBOKFope3JldHVybiBiW1o+PjE4JjYzXStiW1o+PjEyJjYzXStiW1o+PjYmNjNdK2JbNjMmWl19ZnVuY3Rpb24gTyhaLFksVyl7''@;'; put 'put ''Zm9yKHZhciBlZT1bXSxKPVk7SjxXO0orPTMpZWUucHVzaChOKChaW0pdPDwxNiYxNjcxMTY4MCkrKFpbSisxXTw8OCY2NTI4MCkrKDI1NSZaW0orMl0pKSk7cmV0dXJuIGVlLmpvaW4oIiIpfUlbNDVdPTYyLElbOTVdPTYzfSwxNDEwNTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1i''@;'; put 'put ''KDkxNyksXz1iKDMzNDIpLHA9YigyNzA1NCkuQnVmZmVyO2Z1bmN0aW9uIFYoRil7dmFyIHosUj1GLm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2Rve3o9bmV3IEkoXyhSKSl9d2hpbGUoei5jbXAoRi5tb2R1bHVzKT49MHx8IXoudW1vZChGLnByaW1lMSl8fCF6LnVtb2QoRi5wcmltZTIpKTtyZXR1''@;'; put 'put ''cm4gen1mdW5jdGlvbiBQKEYsUil7dmFyIHo9ZnVuY3Rpb24gdyhGKXt2YXIgUj1WKEYpO3JldHVybntibGluZGVyOlIudG9SZWQoSS5tb250KEYubW9kdWx1cykpLnJlZFBvdyhuZXcgSShGLnB1YmxpY0V4cG9uZW50KSkuZnJvbVJlZCgpLHVuYmxpbmRlcjpSLmludm0oRi5tb2R1bHVzKX19''@;'; put 'put ''KFIpLE49Ui5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxPPW5ldyBJKEYpLm11bCh6LmJsaW5kZXIpLnVtb2QoUi5tb2R1bHVzKSxLPU8udG9SZWQoSS5tb250KFIucHJpbWUxKSksWj1PLnRvUmVkKEkubW9udChSLnByaW1lMikpLFk9Ui5jb2VmZmljaWVudCxXPVIucHJpbWUxLHE9Ui5wcmltZTIs''@;'; put 'put ''ZWU9Sy5yZWRQb3coUi5leHBvbmVudDEpLmZyb21SZWQoKSxKPVoucmVkUG93KFIuZXhwb25lbnQyKS5mcm9tUmVkKCkscmU9ZWUuaXN1YihKKS5pbXVsKFkpLnVtb2QoVykuaW11bChxKTtyZXR1cm4gSi5pYWRkKHJlKS5pbXVsKHoudW5ibGluZGVyKS51bW9kKFIubW9kdWx1cykudG9BcnJh''@;'; put 'put ''eUxpa2UocCwiYmUiLE4pfVAuZ2V0cj1WLGNlLmV4cG9ydHM9UH0sMTQzNjA6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigyODM2NyksXz1iKDU4NjA3KSxwPWIoODgyNzUpLFY9Yig2NDU1MCksdz1iKDY4MzMyKSxQPWIoNTU1OTIpLEY9XygiIi5jaGFyQXQpO0koe3RhcmdldDoi''@;'; put 'put ''U3RyaW5nIixwcm90bzohMCxmb3JjZWQ6UChmdW5jdGlvbigpe3JldHVybiJcdWQ4NDIiIT09Ilx1ezIwYmI3fSIuYXQoLTIpfSl9LHthdDpmdW5jdGlvbihOKXt2YXIgTz13KHAodGhpcykpLEs9Ty5sZW5ndGgsWj1WKE4pLFk9Wj49MD9aOksrWjtyZXR1cm4gWTwwfHxZPj1LP3ZvaWQgMDpG''@;'; put 'put ''KE8sWSl9fSl9LDE0NzUwOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMzEwODMpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oXyxwLFYpe2Zvcih2YXIgdyBpbiBwKUkoXyx3LHBbd10sVik7cmV0dXJuIF99fSwxNDk4MTpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPU1hdGgubWlu''@;'; put 'put ''fSwxNTA2NjooY2UsWCxiKT0+e3ZhciBJPVg7SS5SZXBvcnRlcj1iKDg1Njk3KS5hLEkuRGVjb2RlckJ1ZmZlcj1iKDk3MjkwKS50LEkuRW5jb2RlckJ1ZmZlcj1iKDk3MjkwKS5kLEkuTm9kZT1iKDM0MzIwKX0sMTUyNTk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig5MzgwNyku''@;'; put 'put ''QnVmZmVyO2Z1bmN0aW9uIF8oeixOKXt0aGlzLmVuYz16LmVuY29kaW5nTmFtZSx0aGlzLmJvbUF3YXJlPXouYm9tQXdhcmUsImJhc2U2NCI9PT10aGlzLmVuYz90aGlzLmVuY29kZXI9UDoiY2VzdTgiPT09dGhpcy5lbmMmJih0aGlzLmVuYz0idXRmOCIsdGhpcy5lbmNvZGVyPUYsIlx1ezFm''@;'; put 'put ''NGE5fSIhPT1JLmZyb20oImVkYTBiZGVkYjJhOSIsImhleCIpLnRvU3RyaW5nKCkmJih0aGlzLmRlY29kZXI9Uix0aGlzLmRlZmF1bHRDaGFyVW5pY29kZT1OLmRlZmF1bHRDaGFyVW5pY29kZSkpfWNlLmV4cG9ydHM9e3V0Zjg6e3R5cGU6Il9pbnRlcm5hbCIsYm9tQXdhcmU6ITB9LGNlc3U4''@;'; put 'put ''Ont0eXBlOiJfaW50ZXJuYWwiLGJvbUF3YXJlOiEwfSx1bmljb2RlMTF1dGY4OiJ1dGY4Iix1Y3MyOnt0eXBlOiJfaW50ZXJuYWwiLGJvbUF3YXJlOiEwfSx1dGYxNmxlOiJ1Y3MyIixiaW5hcnk6e3R5cGU6Il9pbnRlcm5hbCJ9LGJhc2U2NDp7dHlwZToiX2ludGVybmFsIn0saGV4Ont0eXBl''@;'; put 'put ''OiJfaW50ZXJuYWwifSxfaW50ZXJuYWw6X30sXy5wcm90b3R5cGUuZW5jb2Rlcj13LF8ucHJvdG90eXBlLmRlY29kZXI9Vjt2YXIgcD1iKDc4NDU0KS5JO2Z1bmN0aW9uIFYoeixOKXtwLmNhbGwodGhpcyxOLmVuYyl9ZnVuY3Rpb24gdyh6LE4pe3RoaXMuZW5jPU4uZW5jfWZ1bmN0aW9uIFAo''@;'; put 'put ''eixOKXt0aGlzLnByZXZTdHI9IiJ9ZnVuY3Rpb24gRih6LE4pe31mdW5jdGlvbiBSKHosTil7dGhpcy5hY2M9MCx0aGlzLmNvbnRCeXRlcz0wLHRoaXMuYWNjQnl0ZXM9MCx0aGlzLmRlZmF1bHRDaGFyVW5pY29kZT1OLmRlZmF1bHRDaGFyVW5pY29kZX1wLnByb3RvdHlwZS5lbmR8fChwLnBy''@;'; put 'put ''b3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9KSxWLnByb3RvdHlwZT1wLnByb3RvdHlwZSx3LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih6KXtyZXR1cm4gSS5mcm9tKHosdGhpcy5lbmMpfSx3LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9LFAucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHop''@;'; put 'put ''e3ZhciBOPSh6PXRoaXMucHJldlN0cit6KS5sZW5ndGgtei5sZW5ndGglNDtyZXR1cm4gdGhpcy5wcmV2U3RyPXouc2xpY2UoTiksej16LnNsaWNlKDAsTiksSS5mcm9tKHosImJhc2U2NCIpfSxQLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gSS5mcm9tKHRoaXMucHJldlN0ciwi''@;'; put 'put ''YmFzZTY0Iil9LEYucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHope2Zvcih2YXIgTj1JLmFsbG9jKDMqei5sZW5ndGgpLE89MCxLPTA7Szx6Lmxlbmd0aDtLKyspe3ZhciBaPXouY2hhckNvZGVBdChLKTtaPDEyOD9OW08rK109WjpaPDIwNDg/KE5bTysrXT0xOTIrKFo+Pj42KSxOW08rK109''@;'; put 'put ''MTI4Kyg2MyZaKSk6KE5bTysrXT0yMjQrKFo+Pj4xMiksTltPKytdPTEyOCsoWj4+PjYmNjMpLE5bTysrXT0xMjgrKDYzJlopKX1yZXR1cm4gTi5zbGljZSgwLE8pfSxGLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9LFIucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHope2Zvcih2YXIgTj10''@;'; put 'put ''aGlzLmFjYyxPPXRoaXMuY29udEJ5dGVzLEs9dGhpcy5hY2NCeXRlcyxaPSIiLFk9MDtZPHoubGVuZ3RoO1krKyl7dmFyIFc9eltZXTsxMjghPSgxOTImVyk/KE8+MCYmKForPXRoaXMuZGVmYXVsdENoYXJVbmljb2RlLE89MCksVzwxMjg/Wis9U3RyaW5nLmZyb21DaGFyQ29kZShXKTpXPDIy''@;'; put 'put ''ND8oTj0zMSZXLE89MSxLPTEpOlc8MjQwPyhOPTE1JlcsTz0yLEs9MSk6Wis9dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGUpOk8+MD8oTj1OPDw2fDYzJlcsSysrLDA9PS0tTyYmKForPTI9PT1LJiZOPDEyOCYmTj4wfHwzPT09SyYmTjwyMDQ4P3RoaXMuZGVmYXVsdENoYXJVbmljb2RlOlN0cmlu''@;'; put 'put ''Zy5mcm9tQ2hhckNvZGUoTikpKTpaKz10aGlzLmRlZmF1bHRDaGFyVW5pY29kZX1yZXR1cm4gdGhpcy5hY2M9Tix0aGlzLmNvbnRCeXRlcz1PLHRoaXMuYWNjQnl0ZXM9SyxafSxSLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt2YXIgej0wO3JldHVybiB0aGlzLmNvbnRCeXRlcz4wJiYoeis9''@;'; put 'put ''dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGUpLHp9fSwxNTI4MzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDY4MjgzKSxfPWIoMTI5MDEpLHA9SS5yb3RsMzIsVj1JLnN1bTMyLHc9SS5zdW0zMl8zLFA9SS5zdW0zMl80LEY9Xy5CbG9ja0hhc2g7ZnVuY3Rpb24gUigpe2lmKCEodGhp''@;'; put 'put ''cyBpbnN0YW5jZW9mIFIpKXJldHVybiBuZXcgUjtGLmNhbGwodGhpcyksdGhpcy5oPVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzgsMzI4NTM3NzUyMF0sdGhpcy5lbmRpYW49ImxpdHRsZSJ9ZnVuY3Rpb24geihxLGVlLEoscmUpe3JldHVybiBxPD0xNT9lZV5K''@;'; put 'put ''XnJlOnE8PTMxP2VlJkp8fmVlJnJlOnE8PTQ3PyhlZXx+SilecmU6cTw9NjM/ZWUmcmV8SiZ+cmU6ZWVeKEp8fnJlKX1mdW5jdGlvbiBPKHEpe3JldHVybiBxPD0xNT8xMzUyODI5OTI2OnE8PTMxPzE1NDg2MDM2ODQ6cTw9NDc/MTgzNjA3MjY5MTpxPD02Mz8yMDUzOTk0MjE3OjB9SS5pbmhl''@;'; put 'put ''cml0cyhSLEYpLFgucmlwZW1kMTYwPVIsUi5ibG9ja1NpemU9NTEyLFIub3V0U2l6ZT0xNjAsUi5obWFjU3RyZW5ndGg9MTkyLFIucGFkTGVuZ3RoPTY0LFIucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZWUsSil7Zm9yKHZhciByZT10aGlzLmhbMF0saWU9dGhpcy5oWzFdLHVlPXRoaXMu''@;'; put 'put ''aFsyXSxnZT10aGlzLmhbM10sX2U9dGhpcy5oWzRdLFRlPXJlLE1lPWllLFplPXVlLEI9Z2UsZz1fZSx5PTA7eTw4MDt5Kyspe3ZhciB4PVYocChQKHJlLHooeSxpZSx1ZSxnZSksZWVbS1t5XStKXSwocT15KTw9MTU/MDpxPD0zMT8xNTE4NTAwMjQ5OnE8PTQ3PzE4NTk3NzUzOTM6cTw9NjM/''@;'; put 'put ''MjQwMDk1OTcwODoyODQwODUzODM4KSxZW3ldKSxfZSk7cmU9X2UsX2U9Z2UsZ2U9cCh1ZSwxMCksdWU9aWUsaWU9eCx4PVYocChQKFRlLHooNzkteSxNZSxaZSxCKSxlZVtaW3ldK0pdLE8oeSkpLFdbeV0pLGcpLFRlPWcsZz1CLEI9cChaZSwxMCksWmU9TWUsTWU9eH12YXIgcTt4PXcodGhp''@;'; put 'put ''cy5oWzFdLHVlLEIpLHRoaXMuaFsxXT13KHRoaXMuaFsyXSxnZSxnKSx0aGlzLmhbMl09dyh0aGlzLmhbM10sX2UsVGUpLHRoaXMuaFszXT13KHRoaXMuaFs0XSxyZSxNZSksdGhpcy5oWzRdPXcodGhpcy5oWzBdLGllLFplKSx0aGlzLmhbMF09eH0sUi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5j''@;'; put 'put ''dGlvbihlZSl7cmV0dXJuImhleCI9PT1lZT9JLnRvSGV4MzIodGhpcy5oLCJsaXR0bGUiKTpJLnNwbGl0MzIodGhpcy5oLCJsaXR0bGUiKX07dmFyIEs9WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsNyw0LDEzLDEsMTAsNiwxNSwzLDEyLDAsOSw1LDIsMTQsMTEsOCwz''@;'; put 'put ''LDEwLDE0LDQsOSwxNSw4LDEsMiw3LDAsNiwxMywxMSw1LDEyLDEsOSwxMSwxMCwwLDgsMTIsNCwxMywzLDcsMTUsMTQsNSw2LDIsNCwwLDUsOSw3LDEyLDIsMTAsMTQsMSwzLDgsMTEsNiwxNSwxM10sWj1bNSwxNCw3LDAsOSwyLDExLDQsMTMsNiwxNSw4LDEsMTAsMywxMiw2LDExLDMsNyww''@;'; put 'put ''LDEzLDUsMTAsMTQsMTUsOCwxMiw0LDksMSwyLDE1LDUsMSwzLDcsMTQsNiw5LDExLDgsMTIsMiwxMCwwLDQsMTMsOCw2LDQsMSwzLDExLDE1LDAsNSwxMiwyLDEzLDksNywxMCwxNCwxMiwxNSwxMCw0LDEsNSw4LDcsNiwyLDEzLDE0LDAsMyw5LDExXSxZPVsxMSwxNCwxNSwxMiw1LDgsNyw5''@;'; put 'put ''LDExLDEzLDE0LDE1LDYsNyw5LDgsNyw2LDgsMTMsMTEsOSw3LDE1LDcsMTIsMTUsOSwxMSw3LDEzLDEyLDExLDEzLDYsNywxNCw5LDEzLDE1LDE0LDgsMTMsNiw1LDEyLDcsNSwxMSwxMiwxNCwxNSwxNCwxNSw5LDgsOSwxNCw1LDYsOCw2LDUsMTIsOSwxNSw1LDExLDYsOCwxMywxMiw1LDEy''@;'; put 'put ''LDEzLDE0LDExLDgsNSw2XSxXPVs4LDksOSwxMSwxMywxNSwxNSw1LDcsNyw4LDExLDE0LDE0LDEyLDYsOSwxMywxNSw3LDEyLDgsOSwxMSw3LDcsMTIsNyw2LDE1LDEzLDExLDksNywxNSwxMSw4LDYsNiwxNCwxMiwxMyw1LDE0LDEzLDEzLDcsNSwxNSw1LDgsMTEsMTQsMTQsNiwxNCw2LDks''@;'; put 'put ''MTIsOSwxMiw1LDE1LDgsOCw1LDEyLDksMTIsNSwxNCw2LDgsMTMsNiw1LDE1LDEzLDExLDExXX0sMTUzNDA6KCk9Pnt9LDE1NDkyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF8oaXQpe3ZhciB4ZT10aGlzO3RoaXMubmV4dD1udWxsLHRoaXMuZW50cnk9bnVsbCx0aGlzLmZp''@;'; put 'put ''bmlzaD1mdW5jdGlvbigpeyFmdW5jdGlvbiBKZShpdCx4ZSx5ZSl7dmFyIEtlPWl0LmVudHJ5O2ZvcihpdC5lbnRyeT1udWxsO0tlOyl7dmFyIGplPUtlLmNhbGxiYWNrO3hlLnBlbmRpbmdjYi0tLGplKHllKSxLZT1LZS5uZXh0fXhlLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0PWl0fSh4ZSxp''@;'; put 'put ''dCl9fXZhciBwO2NlLmV4cG9ydHM9WmUsWmUuV3JpdGFibGVTdGF0ZT1UZTt2YXIgTWUsVj17ZGVwcmVjYXRlOmIoMzM5OCl9LHc9YigxMjYwMSksUD1iKDgzODM4KS5CdWZmZXIsRj0odHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2Vs''@;'; put 'put ''ZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LE49Yig4ODE1MiksSz1iKDIyODI3KS5nZXRIaWdoV2F0ZXJNYXJrLFo9YigzMDQ2NCkuRixZPVouRVJSX0lOVkFMSURfQVJHX1RZUEUsVz1aLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELHE9Wi5FUlJfTVVMVElQTEVf''@;'; put 'put ''Q0FMTEJBQ0ssZWU9Wi5FUlJfU1RSRUFNX0NBTk5PVF9QSVBFLEo9Wi5FUlJfU1RSRUFNX0RFU1RST1lFRCxyZT1aLkVSUl9TVFJFQU1fTlVMTF9WQUxVRVMsaWU9Wi5FUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCx1ZT1aLkVSUl9VTktOT1dOX0VOQ09ESU5HLGdlPU4uZXJyb3JPckRlc3Ry''@;'; put 'put ''b3k7ZnVuY3Rpb24gX2UoKXt9ZnVuY3Rpb24gVGUoaXQseGUseWUpe3A9cHx8YigxMDMwKSwiYm9vbGVhbiIhPXR5cGVvZiB5ZSYmKHllPXhlIGluc3RhbmNlb2YgcCksdGhpcy5vYmplY3RNb2RlPSEhKGl0PWl0fHx7fSkub2JqZWN0TW9kZSx5ZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9i''@;'; put 'put ''amVjdE1vZGV8fCEhaXQud3JpdGFibGVPYmplY3RNb2RlKSx0aGlzLmhpZ2hXYXRlck1hcms9Syh0aGlzLGl0LCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHllKSx0aGlzLmZpbmFsQ2FsbGVkPSExLHRoaXMubmVlZERyYWluPSExLHRoaXMuZW5kaW5nPSExLHRoaXMuZW5kZWQ9ITEsdGhpcy5m''@;'; put 'put ''aW5pc2hlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlY29kZVN0cmluZ3M9ISghMT09PWl0LmRlY29kZVN0cmluZ3MpLHRoaXMuZGVmYXVsdEVuY29kaW5nPWl0LmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMubGVuZ3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAs''@;'; put 'put ''dGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9ZnVuY3Rpb24oamUpeyFmdW5jdGlvbiBqKGl0LHhlKXt2YXIgeWU9aXQuX3dyaXRhYmxlU3RhdGUsS2U9eWUuc3luYyxqZT15ZS53cml0ZWNiO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBqZSl0aHJvdyBu''@;'; put 'put ''ZXcgcTtpZihmdW5jdGlvbiBIKGl0KXtpdC53cml0aW5nPSExLGl0LndyaXRlY2I9bnVsbCxpdC5sZW5ndGgtPWl0LndyaXRlbGVuLGl0LndyaXRlbGVuPTB9KHllKSx4ZSkhZnVuY3Rpb24gVChpdCx4ZSx5ZSxLZSxqZSl7LS14ZS5wZW5kaW5nY2IseWU/KHByb2Nlc3MubmV4dFRpY2soamUs''@;'; put 'put ''S2UpLHByb2Nlc3MubmV4dFRpY2soQ2UsaXQseGUpLGl0Ll93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxnZShpdCxLZSkpOihqZShLZSksaXQuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLGdlKGl0LEtlKSxDZShpdCx4ZSkpfShpdCx5ZSxLZSx4ZSxqZSk7ZWxzZXt2YXIg''@;'; put 'put ''a2U9YWUoeWUpfHxpdC5kZXN0cm95ZWQ7IWtlJiYheWUuY29ya2VkJiYheWUuYnVmZmVyUHJvY2Vzc2luZyYmeWUuYnVmZmVyZWRSZXF1ZXN0JiZBKGl0LHllKSxLZT9wcm9jZXNzLm5leHRUaWNrKEUsaXQseWUsa2UsamUpOkUoaXQseWUsa2UsamUpfX0oeGUsamUpfSx0aGlzLndyaXRlY2I9''@;'; put 'put ''bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5idWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5lbWl0Q2xvc2U9ITEhPT1pdC5lbWl0Q2xv''@;'; put 'put ''c2UsdGhpcy5hdXRvRGVzdHJveT0hIWl0LmF1dG9EZXN0cm95LHRoaXMuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MCx0aGlzLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgXyh0aGlzKX1mdW5jdGlvbiBaZShpdCl7dmFyIHhlPXRoaXMgaW5zdGFuY2VvZihwPXB8fGIoMTAzMCkpO2lmKCF4ZSYmIU1l''@;'; put 'put ''LmNhbGwoWmUsdGhpcykpcmV0dXJuIG5ldyBaZShpdCk7dGhpcy5fd3JpdGFibGVTdGF0ZT1uZXcgVGUoaXQsdGhpcyx4ZSksdGhpcy53cml0YWJsZT0hMCxpdCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpdC53cml0ZSYmKHRoaXMuX3dyaXRlPWl0LndyaXRlKSwiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''aXQud3JpdGV2JiYodGhpcy5fd3JpdGV2PWl0LndyaXRldiksImZ1bmN0aW9uIj09dHlwZW9mIGl0LmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PWl0LmRlc3Ryb3kpLCJmdW5jdGlvbiI9PXR5cGVvZiBpdC5maW5hbCYmKHRoaXMuX2ZpbmFsPWl0LmZpbmFsKSksdy5jYWxsKHRoaXMpfWZ1bmN0''@;'; put 'put ''aW9uIEMoaXQseGUseWUsS2UsamUsa2UsSGUpe3hlLndyaXRlbGVuPUtlLHhlLndyaXRlY2I9SGUseGUud3JpdGluZz0hMCx4ZS5zeW5jPSEwLHhlLmRlc3Ryb3llZD94ZS5vbndyaXRlKG5ldyBKKCJ3cml0ZSIpKTp5ZT9pdC5fd3JpdGV2KGplLHhlLm9ud3JpdGUpOml0Ll93cml0ZShqZSxr''@;'; put 'put ''ZSx4ZS5vbndyaXRlKSx4ZS5zeW5jPSExfWZ1bmN0aW9uIEUoaXQseGUseWUsS2Upe3llfHxmdW5jdGlvbiBtKGl0LHhlKXswPT09eGUubGVuZ3RoJiZ4ZS5uZWVkRHJhaW4mJih4ZS5uZWVkRHJhaW49ITEsaXQuZW1pdCgiZHJhaW4iKSl9KGl0LHhlKSx4ZS5wZW5kaW5nY2ItLSxLZSgpLENl''@;'; put 'put ''KGl0LHhlKX1mdW5jdGlvbiBBKGl0LHhlKXt4ZS5idWZmZXJQcm9jZXNzaW5nPSEwO3ZhciB5ZT14ZS5idWZmZXJlZFJlcXVlc3Q7aWYoaXQuX3dyaXRldiYmeWUmJnllLm5leHQpe3ZhciBqZT1uZXcgQXJyYXkoeGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQpLGtlPXhlLmNvcmtlZFJlcXVlc3Rz''@;'; put 'put ''RnJlZTtrZS5lbnRyeT15ZTtmb3IodmFyIEhlPTAsTGU9ITA7eWU7KWplW0hlXT15ZSx5ZS5pc0J1Znx8KExlPSExKSx5ZT15ZS5uZXh0LEhlKz0xO2plLmFsbEJ1ZmZlcnM9TGUsQyhpdCx4ZSwhMCx4ZS5sZW5ndGgsamUsIiIsa2UuZmluaXNoKSx4ZS5wZW5kaW5nY2IrKyx4ZS5sYXN0QnVm''@;'; put 'put ''ZmVyZWRSZXF1ZXN0PW51bGwsa2UubmV4dD8oeGUuY29ya2VkUmVxdWVzdHNGcmVlPWtlLm5leHQsa2UubmV4dD1udWxsKTp4ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IF8oeGUpLHhlLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTB9ZWxzZXtmb3IoO3llOyl7dmFyIFJlPXllLmNodW5rO2lmKEMo''@;'; put 'put ''aXQseGUsITEseGUub2JqZWN0TW9kZT8xOlJlLmxlbmd0aCxSZSx5ZS5lbmNvZGluZyx5ZS5jYWxsYmFjaykseWU9eWUubmV4dCx4ZS5idWZmZXJlZFJlcXVlc3RDb3VudC0tLHhlLndyaXRpbmcpYnJlYWt9bnVsbD09PXllJiYoeGUubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsKX14ZS5idWZm''@;'; put 'put ''ZXJlZFJlcXVlc3Q9eWUseGUuYnVmZmVyUHJvY2Vzc2luZz0hMX1mdW5jdGlvbiBhZShpdCl7cmV0dXJuIGl0LmVuZGluZyYmMD09PWl0Lmxlbmd0aCYmbnVsbD09PWl0LmJ1ZmZlcmVkUmVxdWVzdCYmIWl0LmZpbmlzaGVkJiYhaXQud3JpdGluZ31mdW5jdGlvbiBuZShpdCx4ZSl7aXQuX2Zp''@;'; put 'put ''bmFsKGZ1bmN0aW9uKHllKXt4ZS5wZW5kaW5nY2ItLSx5ZSYmZ2UoaXQseWUpLHhlLnByZWZpbmlzaGVkPSEwLGl0LmVtaXQoInByZWZpbmlzaCIpLENlKGl0LHhlKX0pfWZ1bmN0aW9uIENlKGl0LHhlKXt2YXIgeWU9YWUoeGUpO2lmKHllJiYoZnVuY3Rpb24gc2UoaXQseGUpeyF4ZS5wcmVm''@;'; put 'put ''aW5pc2hlZCYmIXhlLmZpbmFsQ2FsbGVkJiYoImZ1bmN0aW9uIiE9dHlwZW9mIGl0Ll9maW5hbHx8eGUuZGVzdHJveWVkPyh4ZS5wcmVmaW5pc2hlZD0hMCxpdC5lbWl0KCJwcmVmaW5pc2giKSk6KHhlLnBlbmRpbmdjYisrLHhlLmZpbmFsQ2FsbGVkPSEwLHByb2Nlc3MubmV4dFRpY2sobmUs''@;'; put 'put ''aXQseGUpKSl9KGl0LHhlKSwwPT09eGUucGVuZGluZ2NiJiYoeGUuZmluaXNoZWQ9ITAsaXQuZW1pdCgiZmluaXNoIikseGUuYXV0b0Rlc3Ryb3kpKSl7dmFyIEtlPWl0Ll9yZWFkYWJsZVN0YXRlOyghS2V8fEtlLmF1dG9EZXN0cm95JiZLZS5lbmRFbWl0dGVkKSYmaXQuZGVzdHJveSgpfXJl''@;'; put 'put ''dHVybiB5ZX1iKDcxOTkzKShaZSx3KSxUZS5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB4ZT10aGlzLmJ1ZmZlcmVkUmVxdWVzdCx5ZT1bXTt4ZTspeWUucHVzaCh4ZSkseGU9eGUubmV4dDtyZXR1cm4geWV9LGZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShUZS5wcm90b3R5cGUsImJ1ZmZlciIse2dldDpWLmRlcHJlY2F0ZShmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJ1ZmZlcigpfSwiX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBfd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIgaW5zdGVhZC4iLCJERVAwMDAz''@;'; put 'put ''Iil9KX1jYXRjaHt9fSgpLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5oYXNJbnN0YW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdPyhNZT1GdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSxP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoWmUsU3ltYm9sLmhhc0luc3RhbmNlLHt2YWx1ZTpmdW5jdGlvbih4ZSl7cmV0dXJuISFNZS5jYWxsKHRoaXMseGUpfHx0aGlzPT09WmUmJnhlJiZ4ZS5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIFRlfX0pKTpNZT1mdW5jdGlvbih4ZSl7cmV0dXJuIHhl''@;'; put 'put ''IGluc3RhbmNlb2YgdGhpc30sWmUucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXtnZSh0aGlzLG5ldyBlZSl9LFplLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihpdCx4ZSx5ZSl7dmFyIEtlPXRoaXMuX3dyaXRhYmxlU3RhdGUsamU9ITEsa2U9IUtlLm9iamVjdE1vZGUmJmZ1bmN0aW9uIHoo''@;'; put 'put ''aXQpe3JldHVybiBQLmlzQnVmZmVyKGl0KXx8aXQgaW5zdGFuY2VvZiBGfShpdCk7cmV0dXJuIGtlJiYhUC5pc0J1ZmZlcihpdCkmJihpdD1mdW5jdGlvbiBSKGl0KXtyZXR1cm4gUC5mcm9tKGl0KX0oaXQpKSwiZnVuY3Rpb24iPT10eXBlb2YgeGUmJih5ZT14ZSx4ZT1udWxsKSxrZT94ZT0i''@;'; put 'put ''YnVmZmVyIjp4ZXx8KHhlPUtlLmRlZmF1bHRFbmNvZGluZyksImZ1bmN0aW9uIiE9dHlwZW9mIHllJiYoeWU9X2UpLEtlLmVuZGluZz9mdW5jdGlvbiBCKGl0LHhlKXt2YXIgeWU9bmV3IGllO2dlKGl0LHllKSxwcm9jZXNzLm5leHRUaWNrKHhlLHllKX0odGhpcyx5ZSk6KGtlfHxmdW5jdGlv''@;'; put 'put ''biBnKGl0LHhlLHllLEtlKXt2YXIgamU7cmV0dXJuIG51bGw9PT15ZT9qZT1uZXcgcmU6InN0cmluZyIhPXR5cGVvZiB5ZSYmIXhlLm9iamVjdE1vZGUmJihqZT1uZXcgWSgiY2h1bmsiLFsic3RyaW5nIiwiQnVmZmVyIl0seWUpKSwhamV8fChnZShpdCxqZSkscHJvY2Vzcy5uZXh0VGljayhL''@;'; put 'put ''ZSxqZSksITEpfSh0aGlzLEtlLGl0LHllKSkmJihLZS5wZW5kaW5nY2IrKyxqZT1mdW5jdGlvbiB4KGl0LHhlLHllLEtlLGplLGtlKXtpZigheWUpe3ZhciBIZT1mdW5jdGlvbiB5KGl0LHhlLHllKXtyZXR1cm4haXQub2JqZWN0TW9kZSYmITEhPT1pdC5kZWNvZGVTdHJpbmdzJiYic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mIHhlJiYoeGU9UC5mcm9tKHhlLHllKSkseGV9KHhlLEtlLGplKTtLZSE9PUhlJiYoeWU9ITAsamU9ImJ1ZmZlciIsS2U9SGUpfXZhciBMZT14ZS5vYmplY3RNb2RlPzE6S2UubGVuZ3RoO3hlLmxlbmd0aCs9TGU7dmFyIFJlPXhlLmxlbmd0aDx4ZS5oaWdoV2F0ZXJNYXJrO2lm''@;'; put 'put ''KFJlfHwoeGUubmVlZERyYWluPSEwKSx4ZS53cml0aW5nfHx4ZS5jb3JrZWQpe3ZhciBWZT14ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O3hlLmxhc3RCdWZmZXJlZFJlcXVlc3Q9e2NodW5rOktlLGVuY29kaW5nOmplLGlzQnVmOnllLGNhbGxiYWNrOmtlLG5leHQ6bnVsbH0sVmU/VmUubmV4dD14''@;'; put 'put ''ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0OnhlLmJ1ZmZlcmVkUmVxdWVzdD14ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0LHhlLmJ1ZmZlcmVkUmVxdWVzdENvdW50Kz0xfWVsc2UgQyhpdCx4ZSwhMSxMZSxLZSxqZSxrZSk7cmV0dXJuIFJlfSh0aGlzLEtlLGtlLGl0LHhlLHllKSksamV9LFplLnByb3Rv''@;'; put 'put ''dHlwZS5jb3JrPWZ1bmN0aW9uKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrK30sWmUucHJvdG90eXBlLnVuY29yaz1mdW5jdGlvbigpe3ZhciBpdD10aGlzLl93cml0YWJsZVN0YXRlO2l0LmNvcmtlZCYmKGl0LmNvcmtlZC0tLCFpdC53cml0aW5nJiYhaXQuY29ya2VkJiYhaXQuYnVm''@;'; put 'put ''ZmVyUHJvY2Vzc2luZyYmaXQuYnVmZmVyZWRSZXF1ZXN0JiZBKHRoaXMsaXQpKX0sWmUucHJvdG90eXBlLnNldERlZmF1bHRFbmNvZGluZz1mdW5jdGlvbih4ZSl7aWYoInN0cmluZyI9PXR5cGVvZiB4ZSYmKHhlPXhlLnRvTG93ZXJDYXNlKCkpLCEoWyJoZXgiLCJ1dGY4IiwidXRmLTgiLCJh''@;'; put 'put ''c2NpaSIsImJpbmFyeSIsImJhc2U2NCIsInVjczIiLCJ1Y3MtMiIsInV0ZjE2bGUiLCJ1dGYtMTZsZSIsInJhdyJdLmluZGV4T2YoKHhlKyIiKS50b0xvd2VyQ2FzZSgpKT4tMSkpdGhyb3cgbmV3IHVlKHhlKTtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2Rpbmc9eGUs''@;'; put 'put ''dGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KFplLnByb3RvdHlwZSwid3JpdGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0pLE9iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShaZS5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxaZS5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKGl0LHhlLHllKXt5ZShuZXcg''@;'; put 'put ''VygiX3dyaXRlKCkiKSl9LFplLnByb3RvdHlwZS5fd3JpdGV2PW51bGwsWmUucHJvdG90eXBlLmVuZD1mdW5jdGlvbihpdCx4ZSx5ZSl7dmFyIEtlPXRoaXMuX3dyaXRhYmxlU3RhdGU7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGl0Pyh5ZT1pdCxpdD1udWxsLHhlPW51bGwpOiJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiB4ZSYmKHllPXhlLHhlPW51bGwpLG51bGwhPWl0JiZ0aGlzLndyaXRlKGl0LHhlKSxLZS5jb3JrZWQmJihLZS5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKSxLZS5lbmRpbmd8fGZ1bmN0aW9uIFVlKGl0LHhlLHllKXt4ZS5lbmRpbmc9ITAsQ2UoaXQseGUpLHllJiYoeGUuZmlu''@;'; put 'put ''aXNoZWQ/cHJvY2Vzcy5uZXh0VGljayh5ZSk6aXQub25jZSgiZmluaXNoIix5ZSkpLHhlLmVuZGVkPSEwLGl0LndyaXRhYmxlPSExfSh0aGlzLEtlLHllKSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWmUucHJvdG90eXBlLCJ3cml0YWJsZUxlbmd0aCIse2VudW1lcmFibGU6ITEsZ2V0''@;'; put 'put ''OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUubGVuZ3RofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShaZS5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRo''@;'; put 'put ''aXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oeGUpe3RoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD14ZSl9fSksWmUucHJvdG90eXBlLmRlc3Ryb3k9Ti5kZXN0cm95LFplLnByb3RvdHlwZS5fdW5kZXN0cm95PU4udW5k''@;'; put 'put ''ZXN0cm95LFplLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihpdCx4ZSl7eGUoaXQpfX0sMTU1Nzk6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1KU09OLnBhcnNlKCd7IjIuMTYuODQwLjEuMTAxLjMuNC4xLjEiOiJhZXMtMTI4LWVjYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIi''@;'; put 'put ''OiJhZXMtMTI4LWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjMiOiJhZXMtMTI4LW9mYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQiOiJhZXMtMTI4LWNmYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIxIjoiYWVzLTE5Mi1lY2IiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMiI6ImFlcy0x''@;'; put 'put ''OTItY2JjIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjMiOiJhZXMtMTkyLW9mYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjI0IjoiYWVzLTE5Mi1jZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MSI6ImFlcy0yNTYtZWNiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDIiOiJhZXMtMjU2LWNi''@;'; put 'put ''YyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQzIjoiYWVzLTI1Ni1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40NCI6ImFlcy0yNTYtY2ZiIn0nKX0sMTU3OTE6KCk9Pnt9LDE1OTU4OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz0iamFuLl9mZWIu''@;'; put 'put ''X21ydC5fYXByLl9tYWlfanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVzLiIuc3BsaXQoIl8iKSxwPSJqYW5fZmViX21ydF9hcHJfbWFpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlcyIuc3BsaXQoIl8iKTtJLmRlZmluZUxvY2FsZSgiZnkiLHttb250aHM6Imphbm5ld2FyaXNf''@;'; put 'put ''ZmVicmV3YXJpc19tYWFydF9hcHJpbF9tYWFpZV9qdW55X2p1bHlfYXVndXN0dXNfc2VwdGltYmVyX29rdG9iZXJfbm92aW1iZXJfZGVzaW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24odyxQKXtyZXR1cm4gdz8vLU1NTS0vLnRlc3QoUCk/cFt3Lm1vbnRoKCldOl9bdy5t''@;'; put 'put ''b250aCgpXTpffSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJzbmVpbl9tb2FuZGVpX3RpaXNkZWlfd29hbnNkZWlfdG9uZ2Vyc2RlaV9mcmVlZF9zbmVvbiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzaS5fbW8uX3RpLl93by5fdG8uX2ZyLl9zby4iLnNwbGl0KCJfIiksd2Vl''@;'; put 'put ''a2RheXNNaW46IlNpX01vX1RpX1dvX1RvX0ZyX1NvIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC1NTS1ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExM''@;'; put 'put ''TEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2hqb2VkIG9tXSBMVCIsbmV4dERheToiW21vYXJuIG9tXSBMVCIsbmV4dFdlZWs6ImRkZGQgW29tXSBMVCIsbGFzdERheToiW2p1c3RlciBvbV0gTFQiLGxhc3RXZWVrOiJbXHhmNGZyXHhmYm5lXSBkZGRk''@;'; put 'put ''IFtvbV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im9lciAlcyIscGFzdDoiJXMgbHluIixzOiJpbiBwZWFyIHNla29uZGVuIixzczoiJWQgc2Vrb25kZW4iLG06ImllbiBtaW5ceGZhdCIsbW06IiVkIG1pbnV0ZW4iLGg6ImllbiBvZXJlIixoaDoiJWQgb2VyZW4i''@;'; put 'put ''LGQ6ImllbiBkZWkiLGRkOiIlZCBkYWdlbiIsTToiaWVuIG1vYW5uZSIsTU06IiVkIG1vYW5uZW4iLHk6ImllbiBqaWVyIix5eToiJWQgamllcnJlbiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3RlfGRlKS8sb3JkaW5hbDpmdW5jdGlvbih3KXtyZXR1cm4gdysoMT09PXd8''@;'; put 'put ''fDg9PT13fHx3Pj0yMD8ic3RlIjoiZGUiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sMTYwOTM6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigyODM2NyksXz1iKDU1NTkyKSxwPWIoNjE4NzkpO0koe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNl''@;'; put 'put ''ZDohYig1MzUwNSkoImludGVyc2VjdGlvbiIsZnVuY3Rpb24oUCl7cmV0dXJuIDI9PT1QLnNpemUmJlAuaGFzKDEpJiZQLmhhcygyKX0pfHxfKGZ1bmN0aW9uKCl7cmV0dXJuIjMsMiIhPT1TdHJpbmcoQXJyYXkuZnJvbShuZXcgU2V0KFsxLDIsM10pLmludGVyc2VjdGlvbihuZXcgU2V0KFsz''@;'; put 'put ''LDJdKSkpKX0pfSx7aW50ZXJzZWN0aW9uOnB9KX0sMTYyMjk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigyODM2NyksXz1iKDQ2OTI2KSxwPWIoNTg2MDcpLFY9Yig4ODI3NSksdz1iKDE5MTUwKSxQPWIoMzI2MzMpLEY9Yig4ODg2NyksUj1iKDY4MzMyKSx6PWIoODYxMTUpLE49''@;'; put 'put ''YigzNzA3NSksTz1iKDk2MzM5KSxLPWIoNTgwMTIpLFo9Yig4ODc4OCksWT1LKCJyZXBsYWNlIiksVz1UeXBlRXJyb3IscT1wKCIiLmluZGV4T2YpLGVlPXAoIiIucmVwbGFjZSksSj1wKCIiLnNsaWNlKSxyZT1NYXRoLm1heDtJKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITB9LHtyZXBsYWNl''@;'; put 'put ''QWxsOmZ1bmN0aW9uKHVlLGdlKXt2YXIgVGUsTWUsWmUsQixnLHkseCxDLFQsSCxfZT1WKHRoaXMpLGo9MCxFPSIiO2lmKFAodWUpKXtpZigoVGU9Rih1ZSkpJiYoTWU9UihWKE4odWUpKSksIX5xKE1lLCJnIikpKXRocm93IG5ldyBXKCJgLnJlcGxhY2VBbGxgIGRvZXMgbm90IGFsbG93IG5v''@;'; put 'put ''bi1nbG9iYWwgcmVnZXhlcyIpO2lmKFplPXoodWUsWSkpcmV0dXJuIF8oWmUsdWUsX2UsZ2UpO2lmKFomJlRlKXJldHVybiBlZShSKF9lKSx1ZSxnZSl9Zm9yKEI9UihfZSksZz1SKHVlKSwoeT13KGdlKSl8fChnZT1SKGdlKSksQz1yZSgxLHg9Zy5sZW5ndGgpLFQ9cShCLGcpOy0xIT09VDsp''@;'; put 'put ''SD15P1IoZ2UoZyxULEIpKTpPKGcsQixULFtdLHZvaWQgMCxnZSksRSs9SihCLGosVCkrSCxqPVQreCxUPVQrQz5CLmxlbmd0aD8tMTpxKEIsZyxUK0MpO3JldHVybiBqPEIubGVuZ3RoJiYoRSs9SihCLGopKSxFfX0pfSwxNjM2MzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDU1''@;'; put 'put ''NTkyKSxfPWIoMTkxNTApLHA9LyN8XC5wcm90b3R5cGVcLi8sVj1mdW5jdGlvbih6LE4pe3ZhciBPPVBbdyh6KV07cmV0dXJuIE89PT1SfHxPIT09RiYmKF8oTik/SShOKTohIU4pfSx3PVYubm9ybWFsaXplPWZ1bmN0aW9uKHope3JldHVybiBTdHJpbmcoeikucmVwbGFjZShwLCIuIikudG9M''@;'; put 'put ''b3dlckNhc2UoKX0sUD1WLmRhdGE9e30sRj1WLk5BVElWRT0iTiIsUj1WLlBPTFlGSUxMPSJQIjtjZS5leHBvcnRzPVZ9LDE2NDkzOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMjgzNjcpLF89Yig3NDgzOSk7SSh7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2Vk''@;'; put 'put ''OiFiKDUzNTA1KSgiaXNTdWJzZXRPZiIsZnVuY3Rpb24odyl7cmV0dXJuIHd9KX0se2lzU3Vic2V0T2Y6X30pfSwxNjUwODpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJLF8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBwKEIsZyl7aWYoIUIpdGhyb3cgbmV3IEVycm9yKGd8fCJBc3NlcnRp''@;'; put 'put ''b24gZmFpbGVkIil9ZnVuY3Rpb24gVihCLGcpe0Iuc3VwZXJfPWc7dmFyIHk9ZnVuY3Rpb24oKXt9O3kucHJvdG90eXBlPWcucHJvdG90eXBlLEIucHJvdG90eXBlPW5ldyB5LEIucHJvdG90eXBlLmNvbnN0cnVjdG9yPUJ9ZnVuY3Rpb24gdyhCLGcseSl7aWYody5pc0JOKEIpKXJldHVybiBC''@;'; put 'put ''O3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1CJiYoKCJsZSI9PT1nfHwiYmUiPT09ZykmJih5PWcsZz0xMCksdGhpcy5faW5pdChCfHwwLGd8fDEwLHl8fCJiZSIpKX12YXIgUDsib2JqZWN0Ij09dHlwZW9mIEk/SS5l''@;'; put 'put ''eHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3RyeXtQPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpiKDUxMDY5KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEYoQixnKXt2YXIgeT1CLmNoYXJDb2RlQXQoZyk7cmV0''@;'; put 'put ''dXJuIHk+PTY1JiZ5PD03MD95LTU1Onk+PTk3JiZ5PD0xMDI/eS04Nzp5LTQ4JjE1fWZ1bmN0aW9uIFIoQixnLHkpe3ZhciB4PUYoQix5KTtyZXR1cm4geS0xPj1nJiYoeHw9RihCLHktMSk8PDQpLHh9ZnVuY3Rpb24geihCLGcseSx4KXtmb3IodmFyIEM9MCxUPU1hdGgubWluKEIubGVuZ3Ro''@;'; put 'put ''LHkpLEg9ZztIPFQ7SCsrKXt2YXIgaj1CLmNoYXJDb2RlQXQoSCktNDg7Qyo9eCxDKz1qPj00OT9qLTQ5KzEwOmo+PTE3P2otMTcrMTA6an1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24oZyl7cmV0dXJuIGcgaW5zdGFuY2VvZiB3fHxudWxsIT09ZyYmIm9iamVjdCI9PXR5cGVvZiBnJiZnLmNv''@;'; put 'put ''bnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShnLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gZy5jbXAoeSk+MD9nOnl9LHcubWluPWZ1bmN0aW9uKGcseSl7cmV0dXJuIGcuY21wKHkpPDA/Zzp5fSx3LnByb3RvdHlwZS5faW5pdD1mdW5j''@;'; put 'put ''dGlvbihnLHkseCl7aWYoIm51bWJlciI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGcseSx4KTtpZigib2JqZWN0Ij09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXRBcnJheShnLHkseCk7ImhleCI9PT15JiYoeT0xNikscCh5PT09KDB8eSkmJnk+PTImJnk8PTM2KTt2YXIg''@;'; put 'put ''Qz0wOyItIj09PShnPWcudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxnLmxlbmd0aCYmKDE2PT09eT90aGlzLl9wYXJzZUhleChnLEMseCk6KHRoaXMuX3BhcnNlQmFzZShnLHksQyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0''@;'; put 'put ''aGlzLnRvQXJyYXkoKSx5LHgpKSl9LHcucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGcseSx4KXtnPDAmJih0aGlzLm5lZ2F0aXZlPTEsZz0tZyksZzw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZ10sdGhpcy5sZW5ndGg9MSk6Zzw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlz''@;'; put 'put ''LndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihwKGc8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXko''@;'; put 'put ''dGhpcy50b0FycmF5KCkseSx4KX0sdy5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihnLHkseCl7aWYocCgibnVtYmVyIj09dHlwZW9mIGcubGVuZ3RoKSxnLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2Vp''@;'; put 'put ''bChnLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULEgsaj0wO2lmKCJiZSI9PT14KWZvcihDPWcubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0o''@;'; put 'put ''SD1nW0NdfGdbQy0xXTw8OHxnW0MtMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxnLmxlbmd0aDtDKz0zKXRoaXMud29yZHNbVF18PShIPWdb''@;'; put 'put ''Q118Z1tDKzFdPDw4fGdbQysyXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGcseSx4KXt0aGlzLmxlbmd0''@;'; put 'put ''aD1NYXRoLmNlaWwoKGcubGVuZ3RoLXkpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIGosVD0wLEg9MDtpZigiYmUiPT09eClmb3IoQz1nLmxlbmd0aC0xO0M+PXk7Qy09MilqPVIo''@;'; put 'put ''Zyx5LEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShnLmxlbmd0aC15KSUyPT0wP3krMTp5O0M8Zy5sZW5ndGg7Qys9MilqPVIoZyx5LEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4''@;'; put 'put ''ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oZyx5LHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPXkp''@;'; put 'put ''QysrO0MtLSxUPVQveXwwO2Zvcih2YXIgSD1nLmxlbmd0aC14LGo9SCVDLEU9TWF0aC5taW4oSCxILWopK3gsbT0wLEE9eDtBPEU7QSs9QyltPXooZyxBLEErQyx5KSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0p''@;'; put 'put ''O2lmKDAhPT1qKXt2YXIgYWU9MTtmb3IobT16KGcsQSxnLmxlbmd0aCx5KSxBPTA7QTxqO0ErKylhZSo9eTt0aGlzLmltdWxuKGFlKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9''@;'; put 'put ''ZnVuY3Rpb24oZyl7Zy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGg7eSsrKWcud29yZHNbeV09dGhpcy53b3Jkc1t5XTtnLmxlbmd0aD10aGlzLmxlbmd0aCxnLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsZy5yZWQ9dGhpcy5yZWR9LHcucHJv''@;'; put 'put ''dG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShnKSxnfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8ZzspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5n''@;'; put 'put ''dGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBOPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAw''@;'; put 'put ''MCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIs''@;'; put 'put ''IjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLE89WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sSz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3''@;'; put 'put ''MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2''@;'; put 'put ''MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBZKEIsZyx5KXt5Lm5lZ2F0aXZlPWcubmVnYXRpdmVeQi5uZWdhdGl2ZTt2YXIg''@;'; put 'put ''eD1CLmxlbmd0aCtnLmxlbmd0aHwwO3kubGVuZ3RoPXgseD14LTF8MDt2YXIgQz0wfEIud29yZHNbMF0sVD0wfGcud29yZHNbMF0sSD1DKlQsRT1ILzY3MTA4ODY0fDA7eS53b3Jkc1swXT02NzEwODg2MyZIO2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYsYWU9NjcxMDg4''@;'; put 'put ''NjMmRSxuZT1NYXRoLm1pbihtLGcubGVuZ3RoLTEpLHNlPU1hdGgubWF4KDAsbS1CLmxlbmd0aCsxKTtzZTw9bmU7c2UrKylBKz0oSD0oQz0wfEIud29yZHNbbS1zZXwwXSkqKFQ9MHxnLndvcmRzW3NlXSkrYWUpLzY3MTA4ODY0fDAsYWU9NjcxMDg4NjMmSDt5LndvcmRzW21dPTB8YWUsRT0w''@;'; put 'put ''fEF9cmV0dXJuIDAhPT1FP3kud29yZHNbbV09MHxFOnkubGVuZ3RoLS0seS5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGcseSl7dmFyIHg7aWYoeT0wfHl8fDEsMTY9PT0oZz1nfHwxMCl8fCJoZXgiPT09Zyl7eD0iIjtmb3IodmFyIEM9MCxUPTAsSD0wO0g8dGhpcy5s''@;'; put 'put ''ZW5ndGg7SCsrKXt2YXIgaj10aGlzLndvcmRzW0hdLEU9KDE2Nzc3MjE1JihqPDxDfFQpKS50b1N0cmluZygxNik7VD1qPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsSC0tKSx4PTAhPT1UfHxIIT09dGhpcy5sZW5ndGgtMT9OWzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAh''@;'; put 'put ''PT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4KTt4Lmxlbmd0aCV5IT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYoZz09PSgwfGcpJiZnPj0yJiZnPD0zNil7dmFyIG09T1tnXSxBPUtbZ107eD0iIjt2YXIgYWU9dGhpcy5jbG9uZSgpO2ZvcihhZS5u''@;'; put 'put ''ZWdhdGl2ZT0wOyFhZS5pc1plcm8oKTspe3ZhciBuZT1hZS5tb2RuKEEpLnRvU3RyaW5nKGcpO3g9KGFlPWFlLmlkaXZuKEEpKS5pc1plcm8oKT9uZSt4Ok5bbS1uZS5sZW5ndGhdK25lK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCV5IT0wOyl4PSIwIit4O3JldHVy''@;'; put 'put ''biAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9cCghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBnPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9nKz02NzEwODg2NCp0aGlz''@;'; put 'put ''LndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Zys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJnAoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5l''@;'; put 'put ''Z2F0aXZlPy1nOmd9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gcCh0eXBlb2YgUDwidSIpLHRoaXMudG9BcnJheUxpa2UoUCxnLHkpfSx3LnByb3RvdHlwZS50''@;'; put 'put ''b0FycmF5PWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksZyx5KX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oZyx5LHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtwKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2Vy''@;'; put 'put ''IHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxwKFQ+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sSD0ibGUiPT09eSxqPW5ldyBnKFQpLEE9dGhpcy5jbG9uZSgpO2lmKEgpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEu''@;'; put 'put ''aXVzaHJuKDgpLGpbbV09RTtmb3IoO208VDttKyspalttXT0wfWVsc2V7Zm9yKG09MDttPFQtQzttKyspalttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbVC1tLTFdPUV9cmV0dXJuIGp9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0''@;'; put 'put ''aC5jbHozMj9mdW5jdGlvbihnKXtyZXR1cm4gMzItTWF0aC5jbHozMihnKX06ZnVuY3Rpb24oZyl7dmFyIHk9Zyx4PTA7cmV0dXJuIHk+PTQwOTYmJih4Kz0xMyx5Pj4+PTEzKSx5Pj02NCYmKHgrPTcseT4+Pj03KSx5Pj04JiYoeCs9NCx5Pj4+PTQpLHk+PTImJih4Kz0yLHk+Pj49MikseCt5''@;'; put 'put ''fSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oZyl7aWYoMD09PWcpcmV0dXJuIDI2O3ZhciB5PWcseD0wO3JldHVybiEoODE5MSZ5KSYmKHgrPTEzLHk+Pj49MTMpLCEoMTI3JnkpJiYoeCs9Nyx5Pj4+PTcpLCEoMTUmeSkmJih4Kz00LHk+Pj49NCksISgzJnkpJiYoeCs9Mix5Pj4+''@;'; put 'put ''PTIpLCEoMSZ5KSYmeCsrLHh9LHcucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciB5PXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK3l9LHcucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYo''@;'; put 'put ''dGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGc9MCx5PTA7eTx0aGlzLmxlbmd0aDt5Kyspe3ZhciB4PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbeV0pO2lmKGcrPXgsMjYhPT14KWJyZWFrfXJldHVybiBnfSx3LnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSx3LnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oZykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihnKXty''@;'; put 'put ''ZXR1cm4gdGhpcy50ZXN0bihnLTEpP3RoaXMubm90bihnKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUo''@;'; put 'put ''KS5pbmVnKCl9LHcucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsr''@;'; put 'put ''XT0wO2Zvcih2YXIgeT0wO3k8Zy5sZW5ndGg7eSsrKXRoaXMud29yZHNbeV09dGhpcy53b3Jkc1t5XXxnLndvcmRzW3ldO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVv''@;'; put 'put ''cihnKX0sdy5wcm90b3R5cGUub3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoZyk6Zy5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNs''@;'; put 'put ''b25lKCkuaXVvcihnKTpnLmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oZyl7dmFyIHk7eT10aGlzLmxlbmd0aD5nLmxlbmd0aD9nOnRoaXM7Zm9yKHZhciB4PTA7eDx5Lmxlbmd0aDt4KyspdGhpcy53b3Jkc1t4XT10aGlzLndvcmRzW3hdJmcud29yZHNb''@;'; put 'put ''eF07cmV0dXJuIHRoaXMubGVuZ3RoPXkubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoZyl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoZyk6Zy5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChnKTpnLmNsb25lKCkuaXVhbmQodGhpcyl9LHcu''@;'; put 'put ''cHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGcpe3ZhciB5LHg7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KHk9dGhpcyx4PWcpOih5PWcseD10aGlzKTtmb3IodmFyIEM9MDtDPHgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXkud29yZHNbQ11eeC53b3Jkc1tDXTtpZih0aGlzIT09eSlmb3IoO0M8''@;'; put 'put ''eS5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109eS53b3Jkc1tDXTtyZXR1cm4gdGhpcy5sZW5ndGg9eS5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKGcpe3JldHVybiBwKCEodGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihnKX0sdy5w''@;'; put 'put ''cm90b3R5cGUueG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihnKTpnLmNsb25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgp''@;'; put 'put ''Lml1eG9yKGcpOmcuY2xvbmUoKS5pdXhvcih0aGlzKX0sdy5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PTB8TWF0aC5jZWlsKGcvMjYpLHg9ZyUyNjt0aGlzLl9leHBhbmQoeSkseD4wJiZ5LS07Zm9yKHZhciBDPTA7Qzx5O0Mr''@;'; put 'put ''Kyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJn50aGlzLndvcmRzW0NdO3JldHVybiB4PjAmJih0aGlzLndvcmRzW0NdPX50aGlzLndvcmRzW0NdJjY3MTA4ODYzPj4yNi14KSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90''@;'; put 'put ''bihnKX0sdy5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihnLHkpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeD1nLzI2fDAsQz1nJTI2O3JldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdPXk/dGhpcy53b3Jkc1t4XXwxPDxDOnRoaXMud29yZHNbeF0mfigxPDxD''@;'; put 'put ''KSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyl7dmFyIHkseCxDO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHk9dGhpcy5pc3ViKGcpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtp''@;'; put 'put ''ZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIGcubmVnYXRpdmU9MCx5PXRoaXMuaXN1YihnKSxnLm5lZ2F0aXZlPTEseS5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oeD10aGlzLEM9Zyk6KHg9ZyxDPXRoaXMpO2Zvcih2YXIgVD0wLEg9MDtIPEMu''@;'; put 'put ''bGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJih5PSgwfHgud29yZHNbSF0pKygwfEMud29yZHNbSF0pK1QpLFQ9eT4+PjI2O2Zvcig7MCE9PVQmJkg8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKHk9KDB8eC53b3Jkc1tIXSkrVCksVD15Pj4+MjY7aWYodGhp''@;'; put 'put ''cy5sZW5ndGg9eC5sZW5ndGgsMCE9PVQpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09VCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoeCE9PXRoaXMpZm9yKDtIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXgud29yZHNbSF07cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihn''@;'; put 'put ''KXt2YXIgeTtyZXR1cm4gMCE9PWcubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhnLm5lZ2F0aXZlPTAseT10aGlzLnN1YihnKSxnLm5lZ2F0aXZlXj0xLHkpOjA9PT1nLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLHk9Zy5zdWIodGhpcyksdGhpcy5u''@;'; put 'put ''ZWdhdGl2ZT0xLHkpOnRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKGcpOmcuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcpe2lmKDAhPT1nLm5lZ2F0aXZlKXtnLm5lZ2F0aXZlPTA7dmFyIHk9dGhpcy5pYWRkKGcpO3JldHVybiBn''@;'; put 'put ''Lm5lZ2F0aXZlPTEseS5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgQyxULHg9dGhpcy5jbXAoZyk7aWYoMD09PXgpcmV0dXJuIHRoaXMubmVnYXRp''@;'; put 'put ''dmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3g+MD8oQz10aGlzLFQ9Zyk6KEM9ZyxUPXRoaXMpO2Zvcih2YXIgSD0wLGo9MDtqPFQubGVuZ3RoO2orKylIPSh5PSgwfEMud29yZHNbal0pLSgwfFQud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYz''@;'; put 'put ''Jnk7Zm9yKDswIT09SCYmajxDLmxlbmd0aDtqKyspSD0oeT0oMHxDLndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZ5O2lmKDA9PT1IJiZqPEMubGVuZ3RoJiZDIT09dGhpcylmb3IoO2o8Qy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09Qy53b3Jkc1tqXTtyZXR1cm4g''@;'; put 'put ''dGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsaiksQyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihnKX07dmFyIFc9ZnVuY3Rpb24oZyx5LHgpe3ZhciBFLG0s''@;'; put 'put ''QSxDPWcud29yZHMsVD15LndvcmRzLEg9eC53b3JkcyxqPTAsYWU9MHxDWzBdLG5lPTgxOTEmYWUsc2U9YWU+Pj4xMyxDZT0wfENbMV0sVWU9ODE5MSZDZSxKZT1DZT4+PjEzLGl0PTB8Q1syXSx4ZT04MTkxJml0LHllPWl0Pj4+MTMsS2U9MHxDWzNdLGplPTgxOTEmS2Usa2U9S2U+Pj4xMyxI''@;'; put 'put ''ZT0wfENbNF0sTGU9ODE5MSZIZSxSZT1IZT4+PjEzLFZlPTB8Q1s1XSxBZT04MTkxJlZlLERlPVZlPj4+MTMsX3Q9MHxDWzZdLHJ0PTgxOTEmX3QsUWU9X3Q+Pj4xMyxzbj0wfENbN10sdnQ9ODE5MSZzbixTdD1zbj4+PjEzLGVuPTB8Q1s4XSx1dD04MTkxJmVuLFhlPWVuPj4+MTMsdHQ9MHxD''@;'; put 'put ''WzldLEllPTgxOTEmdHQsYXQ9dHQ+Pj4xMyx1bj0wfFRbMF0sSXQ9ODE5MSZ1bixSdD11bj4+PjEzLHJpPTB8VFsxXSxhbj04MTkxJnJpLGxuPXJpPj4+MTMsbmk9MHxUWzJdLGhuPTgxOTEmbmksaHQ9bmk+Pj4xMyxScj0wfFRbM10sQnQ9ODE5MSZScixBdD1Scj4+PjEzLEZuPTB8VFs0XSxz''@;'; put 'put ''dD04MTkxJkZuLFp0PUZuPj4+MTMsUXI9MHxUWzVdLFllPTgxOTEmUXIsVHQ9UXI+Pj4xMyxycj0wfFRbNl0sZnQ9ODE5MSZycixNdD1ycj4+PjEzLFpuPTB8VFs3XSxubj04MTkxJlpuLFd0PVpuPj4+MTMsZGk9MHxUWzhdLGRuPTgxOTEmZGksbW49ZGk+Pj4xMyxwaT0wfFRbOV0sZm49ODE5''@;'; put 'put ''MSZwaSx0bj1waT4+PjEzO3gubmVnYXRpdmU9Zy5uZWdhdGl2ZV55Lm5lZ2F0aXZlLHgubGVuZ3RoPTE5O3ZhciBjYT0oaisoRT1NYXRoLmltdWwobmUsSXQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKG5lLFJ0KSkrTWF0aC5pbXVsKHNlLEl0KXwwKSk8PDEzKXwwO2o9KChBPU1hdGgu''@;'; put 'put ''aW11bChzZSxSdCkpKyhtPj4+MTMpfDApKyhjYT4+PjI2KXwwLGNhJj02NzEwODg2MyxFPU1hdGguaW11bChVZSxJdCksbT0obT1NYXRoLmltdWwoVWUsUnQpKStNYXRoLmltdWwoSmUsSXQpfDAsQT1NYXRoLmltdWwoSmUsUnQpO3ZhciBfaT0oaisoRT1FK01hdGguaW11bChuZSxhbil8MCl8''@;'; put 'put ''MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGxuKXwwKStNYXRoLmltdWwoc2UsYW4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsbG4pfDApKyhtPj4+MTMpfDApKyhfaT4+PjI2KXwwLF9pJj02NzEwODg2MyxFPU1hdGguaW11bCh4ZSxJdCksbT0obT1NYXRoLmltdWwo''@;'; put 'put ''eGUsUnQpKStNYXRoLmltdWwoeWUsSXQpfDAsQT1NYXRoLmltdWwoeWUsUnQpLEU9RStNYXRoLmltdWwoVWUsYW4pfDAsbT0obT1tK01hdGguaW11bChVZSxsbil8MCkrTWF0aC5pbXVsKEplLGFuKXwwLEE9QStNYXRoLmltdWwoSmUsbG4pfDA7dmFyIHZyPShqKyhFPUUrTWF0aC5pbXVsKG5l''@;'; put 'put ''LGhuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsaHQpfDApK01hdGguaW11bChzZSxobil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxodCl8MCkrKG0+Pj4xMyl8MCkrKHZyPj4+MjYpfDAsdnImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGplLEl0KSxtPShtPU1h''@;'; put 'put ''dGguaW11bChqZSxSdCkpK01hdGguaW11bChrZSxJdCl8MCxBPU1hdGguaW11bChrZSxSdCksRT1FK01hdGguaW11bCh4ZSxhbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGxuKXwwKStNYXRoLmltdWwoeWUsYW4pfDAsQT1BK01hdGguaW11bCh5ZSxsbil8MCxFPUUrTWF0aC5pbXVsKFVlLGhu''@;'; put 'put ''KXwwLG09KG09bStNYXRoLmltdWwoVWUsaHQpfDApK01hdGguaW11bChKZSxobil8MCxBPUErTWF0aC5pbXVsKEplLGh0KXwwO3ZhciBYaT0oaisoRT1FK01hdGguaW11bChuZSxCdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLEF0KXwwKStNYXRoLmltdWwoc2UsQnQpfDAp''@;'; put 'put ''KTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsQXQpfDApKyhtPj4+MTMpfDApKyhYaT4+PjI2KXwwLFhpJj02NzEwODg2MyxFPU1hdGguaW11bChMZSxJdCksbT0obT1NYXRoLmltdWwoTGUsUnQpKStNYXRoLmltdWwoUmUsSXQpfDAsQT1NYXRoLmltdWwoUmUsUnQpLEU9RStNYXRoLmlt''@;'; put 'put ''dWwoamUsYW4pfDAsbT0obT1tK01hdGguaW11bChqZSxsbil8MCkrTWF0aC5pbXVsKGtlLGFuKXwwLEE9QStNYXRoLmltdWwoa2UsbG4pfDAsRT1FK01hdGguaW11bCh4ZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGh0KXwwKStNYXRoLmltdWwoeWUsaG4pfDAsQT1BK01hdGguaW11bCh5''@;'; put 'put ''ZSxodCl8MCxFPUUrTWF0aC5pbXVsKFVlLEJ0KXwwLG09KG09bStNYXRoLmltdWwoVWUsQXQpfDApK01hdGguaW11bChKZSxCdCl8MCxBPUErTWF0aC5pbXVsKEplLEF0KXwwO3ZhciBRaT0oaisoRT1FK01hdGguaW11bChuZSxzdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5l''@;'; put 'put ''LFp0KXwwKStNYXRoLmltdWwoc2Usc3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsWnQpfDApKyhtPj4+MTMpfDApKyhRaT4+PjI2KXwwLFFpJj02NzEwODg2MyxFPU1hdGguaW11bChBZSxJdCksbT0obT1NYXRoLmltdWwoQWUsUnQpKStNYXRoLmltdWwoRGUsSXQpfDAsQT1N''@;'; put 'put ''YXRoLmltdWwoRGUsUnQpLEU9RStNYXRoLmltdWwoTGUsYW4pfDAsbT0obT1tK01hdGguaW11bChMZSxsbil8MCkrTWF0aC5pbXVsKFJlLGFuKXwwLEE9QStNYXRoLmltdWwoUmUsbG4pfDAsRT1FK01hdGguaW11bChqZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKGplLGh0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoa2UsaG4pfDAsQT1BK01hdGguaW11bChrZSxodCl8MCxFPUUrTWF0aC5pbXVsKHhlLEJ0KXwwLG09KG09bStNYXRoLmltdWwoeGUsQXQpfDApK01hdGguaW11bCh5ZSxCdCl8MCxBPUErTWF0aC5pbXVsKHllLEF0KXwwLEU9RStNYXRoLmltdWwoVWUsc3QpfDAsbT0obT1tK01hdGguaW11''@;'; put 'put ''bChVZSxadCl8MCkrTWF0aC5pbXVsKEplLHN0KXwwLEE9QStNYXRoLmltdWwoSmUsWnQpfDA7dmFyIFZpPShqKyhFPUUrTWF0aC5pbXVsKG5lLFllKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsVHQpfDApK01hdGguaW11bChzZSxZZSl8MCkpPDwxMyl8MDtqPSgoQT1BK01h''@;'; put 'put ''dGguaW11bChzZSxUdCl8MCkrKG0+Pj4xMyl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHJ0LEl0KSxtPShtPU1hdGguaW11bChydCxSdCkpK01hdGguaW11bChRZSxJdCl8MCxBPU1hdGguaW11bChRZSxSdCksRT1FK01hdGguaW11bChBZSxhbil8MCxtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKEFlLGxuKXwwKStNYXRoLmltdWwoRGUsYW4pfDAsQT1BK01hdGguaW11bChEZSxsbil8MCxFPUUrTWF0aC5pbXVsKExlLGhuKXwwLG09KG09bStNYXRoLmltdWwoTGUsaHQpfDApK01hdGguaW11bChSZSxobil8MCxBPUErTWF0aC5pbXVsKFJlLGh0KXwwLEU9RStNYXRoLmlt''@;'; put 'put ''dWwoamUsQnQpfDAsbT0obT1tK01hdGguaW11bChqZSxBdCl8MCkrTWF0aC5pbXVsKGtlLEJ0KXwwLEE9QStNYXRoLmltdWwoa2UsQXQpfDAsRT1FK01hdGguaW11bCh4ZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFp0KXwwKStNYXRoLmltdWwoeWUsc3QpfDAsQT1BK01hdGguaW11bCh5''@;'; put 'put ''ZSxadCl8MCxFPUUrTWF0aC5pbXVsKFVlLFllKXwwLG09KG09bStNYXRoLmltdWwoVWUsVHQpfDApK01hdGguaW11bChKZSxZZSl8MCxBPUErTWF0aC5pbXVsKEplLFR0KXwwO3ZhciBlaT0oaisoRT1FK01hdGguaW11bChuZSxmdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5l''@;'; put 'put ''LE10KXwwKStNYXRoLmltdWwoc2UsZnQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsTXQpfDApKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxFPU1hdGguaW11bCh2dCxJdCksbT0obT1NYXRoLmltdWwodnQsUnQpKStNYXRoLmltdWwoU3QsSXQpfDAsQT1N''@;'; put 'put ''YXRoLmltdWwoU3QsUnQpLEU9RStNYXRoLmltdWwocnQsYW4pfDAsbT0obT1tK01hdGguaW11bChydCxsbil8MCkrTWF0aC5pbXVsKFFlLGFuKXwwLEE9QStNYXRoLmltdWwoUWUsbG4pfDAsRT1FK01hdGguaW11bChBZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKEFlLGh0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoRGUsaG4pfDAsQT1BK01hdGguaW11bChEZSxodCl8MCxFPUUrTWF0aC5pbXVsKExlLEJ0KXwwLG09KG09bStNYXRoLmltdWwoTGUsQXQpfDApK01hdGguaW11bChSZSxCdCl8MCxBPUErTWF0aC5pbXVsKFJlLEF0KXwwLEU9RStNYXRoLmltdWwoamUsc3QpfDAsbT0obT1tK01hdGguaW11''@;'; put 'put ''bChqZSxadCl8MCkrTWF0aC5pbXVsKGtlLHN0KXwwLEE9QStNYXRoLmltdWwoa2UsWnQpfDAsRT1FK01hdGguaW11bCh4ZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFR0KXwwKStNYXRoLmltdWwoeWUsWWUpfDAsQT1BK01hdGguaW11bCh5ZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFVlLGZ0''@;'; put 'put ''KXwwLG09KG09bStNYXRoLmltdWwoVWUsTXQpfDApK01hdGguaW11bChKZSxmdCl8MCxBPUErTWF0aC5pbXVsKEplLE10KXwwO3ZhciB1YT0oaisoRT1FK01hdGguaW11bChuZSxubil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLFd0KXwwKStNYXRoLmltdWwoc2Usbm4pfDAp''@;'; put 'put ''KTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsV3QpfDApKyhtPj4+MTMpfDApKyh1YT4+PjI2KXwwLHVhJj02NzEwODg2MyxFPU1hdGguaW11bCh1dCxJdCksbT0obT1NYXRoLmltdWwodXQsUnQpKStNYXRoLmltdWwoWGUsSXQpfDAsQT1NYXRoLmltdWwoWGUsUnQpLEU9RStNYXRoLmlt''@;'; put 'put ''dWwodnQsYW4pfDAsbT0obT1tK01hdGguaW11bCh2dCxsbil8MCkrTWF0aC5pbXVsKFN0LGFuKXwwLEE9QStNYXRoLmltdWwoU3QsbG4pfDAsRT1FK01hdGguaW11bChydCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LGh0KXwwKStNYXRoLmltdWwoUWUsaG4pfDAsQT1BK01hdGguaW11bChR''@;'; put 'put ''ZSxodCl8MCxFPUUrTWF0aC5pbXVsKEFlLEJ0KXwwLG09KG09bStNYXRoLmltdWwoQWUsQXQpfDApK01hdGguaW11bChEZSxCdCl8MCxBPUErTWF0aC5pbXVsKERlLEF0KXwwLEU9RStNYXRoLmltdWwoTGUsc3QpfDAsbT0obT1tK01hdGguaW11bChMZSxadCl8MCkrTWF0aC5pbXVsKFJlLHN0''@;'; put 'put ''KXwwLEE9QStNYXRoLmltdWwoUmUsWnQpfDAsRT1FK01hdGguaW11bChqZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKGplLFR0KXwwKStNYXRoLmltdWwoa2UsWWUpfDAsQT1BK01hdGguaW11bChrZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHhlLGZ0KXwwLG09KG09bStNYXRoLmltdWwoeGUsTXQp''@;'; put 'put ''fDApK01hdGguaW11bCh5ZSxmdCl8MCxBPUErTWF0aC5pbXVsKHllLE10KXwwLEU9RStNYXRoLmltdWwoVWUsbm4pfDAsbT0obT1tK01hdGguaW11bChVZSxXdCl8MCkrTWF0aC5pbXVsKEplLG5uKXwwLEE9QStNYXRoLmltdWwoSmUsV3QpfDA7dmFyIFJpPShqKyhFPUUrTWF0aC5pbXVsKG5l''@;'; put 'put ''LGRuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsbW4pfDApK01hdGguaW11bChzZSxkbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxtbil8MCkrKG0+Pj4xMyl8MCkrKFJpPj4+MjYpfDAsUmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLEl0KSxtPShtPU1h''@;'; put 'put ''dGguaW11bChJZSxSdCkpK01hdGguaW11bChhdCxJdCl8MCxBPU1hdGguaW11bChhdCxSdCksRT1FK01hdGguaW11bCh1dCxhbil8MCxtPShtPW0rTWF0aC5pbXVsKHV0LGxuKXwwKStNYXRoLmltdWwoWGUsYW4pfDAsQT1BK01hdGguaW11bChYZSxsbil8MCxFPUUrTWF0aC5pbXVsKHZ0LGhu''@;'; put 'put ''KXwwLG09KG09bStNYXRoLmltdWwodnQsaHQpfDApK01hdGguaW11bChTdCxobil8MCxBPUErTWF0aC5pbXVsKFN0LGh0KXwwLEU9RStNYXRoLmltdWwocnQsQnQpfDAsbT0obT1tK01hdGguaW11bChydCxBdCl8MCkrTWF0aC5pbXVsKFFlLEJ0KXwwLEE9QStNYXRoLmltdWwoUWUsQXQpfDAs''@;'; put 'put ''RT1FK01hdGguaW11bChBZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKEFlLFp0KXwwKStNYXRoLmltdWwoRGUsc3QpfDAsQT1BK01hdGguaW11bChEZSxadCl8MCxFPUUrTWF0aC5pbXVsKExlLFllKXwwLG09KG09bStNYXRoLmltdWwoTGUsVHQpfDApK01hdGguaW11bChSZSxZZSl8MCxBPUEr''@;'; put 'put ''TWF0aC5pbXVsKFJlLFR0KXwwLEU9RStNYXRoLmltdWwoamUsZnQpfDAsbT0obT1tK01hdGguaW11bChqZSxNdCl8MCkrTWF0aC5pbXVsKGtlLGZ0KXwwLEE9QStNYXRoLmltdWwoa2UsTXQpfDAsRT1FK01hdGguaW11bCh4ZSxubil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFd0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoeWUsbm4pfDAsQT1BK01hdGguaW11bCh5ZSxXdCl8MCxFPUUrTWF0aC5pbXVsKFVlLGRuKXwwLG09KG09bStNYXRoLmltdWwoVWUsbW4pfDApK01hdGguaW11bChKZSxkbil8MCxBPUErTWF0aC5pbXVsKEplLG1uKXwwO3ZhciBEYT0oaisoRT1FK01hdGguaW11bChuZSxmbil8MCl8''@;'; put 'put ''MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLHRuKXwwKStNYXRoLmltdWwoc2UsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsdG4pfDApKyhtPj4+MTMpfDApKyhEYT4+PjI2KXwwLERhJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxhbiksbT0obT1NYXRoLmltdWwo''@;'; put 'put ''SWUsbG4pKStNYXRoLmltdWwoYXQsYW4pfDAsQT1NYXRoLmltdWwoYXQsbG4pLEU9RStNYXRoLmltdWwodXQsaG4pfDAsbT0obT1tK01hdGguaW11bCh1dCxodCl8MCkrTWF0aC5pbXVsKFhlLGhuKXwwLEE9QStNYXRoLmltdWwoWGUsaHQpfDAsRT1FK01hdGguaW11bCh2dCxCdCl8MCxtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKHZ0LEF0KXwwKStNYXRoLmltdWwoU3QsQnQpfDAsQT1BK01hdGguaW11bChTdCxBdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LHN0KXwwLG09KG09bStNYXRoLmltdWwocnQsWnQpfDApK01hdGguaW11bChRZSxzdCl8MCxBPUErTWF0aC5pbXVsKFFlLFp0KXwwLEU9RStNYXRo''@;'; put 'put ''LmltdWwoQWUsWWUpfDAsbT0obT1tK01hdGguaW11bChBZSxUdCl8MCkrTWF0aC5pbXVsKERlLFllKXwwLEE9QStNYXRoLmltdWwoRGUsVHQpfDAsRT1FK01hdGguaW11bChMZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKExlLE10KXwwKStNYXRoLmltdWwoUmUsZnQpfDAsQT1BK01hdGguaW11''@;'; put 'put ''bChSZSxNdCl8MCxFPUUrTWF0aC5pbXVsKGplLG5uKXwwLG09KG09bStNYXRoLmltdWwoamUsV3QpfDApK01hdGguaW11bChrZSxubil8MCxBPUErTWF0aC5pbXVsKGtlLFd0KXwwLEU9RStNYXRoLmltdWwoeGUsZG4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxtbil8MCkrTWF0aC5pbXVsKHll''@;'; put 'put ''LGRuKXwwLEE9QStNYXRoLmltdWwoeWUsbW4pfDA7dmFyIGhpPShqKyhFPUUrTWF0aC5pbXVsKFVlLGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoVWUsdG4pfDApK01hdGguaW11bChKZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChKZSx0bil8MCkrKG0+Pj4x''@;'; put 'put ''Myl8MCkrKGhpPj4+MjYpfDAsaGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLGhuKSxtPShtPU1hdGguaW11bChJZSxodCkpK01hdGguaW11bChhdCxobil8MCxBPU1hdGguaW11bChhdCxodCksRT1FK01hdGguaW11bCh1dCxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKHV0LEF0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoWGUsQnQpfDAsQT1BK01hdGguaW11bChYZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHZ0LHN0KXwwLG09KG09bStNYXRoLmltdWwodnQsWnQpfDApK01hdGguaW11bChTdCxzdCl8MCxBPUErTWF0aC5pbXVsKFN0LFp0KXwwLEU9RStNYXRoLmltdWwocnQsWWUpfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bChydCxUdCl8MCkrTWF0aC5pbXVsKFFlLFllKXwwLEE9QStNYXRoLmltdWwoUWUsVHQpfDAsRT1FK01hdGguaW11bChBZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKEFlLE10KXwwKStNYXRoLmltdWwoRGUsZnQpfDAsQT1BK01hdGguaW11bChEZSxNdCl8MCxFPUUrTWF0aC5pbXVsKExl''@;'; put 'put ''LG5uKXwwLG09KG09bStNYXRoLmltdWwoTGUsV3QpfDApK01hdGguaW11bChSZSxubil8MCxBPUErTWF0aC5pbXVsKFJlLFd0KXwwLEU9RStNYXRoLmltdWwoamUsZG4pfDAsbT0obT1tK01hdGguaW11bChqZSxtbil8MCkrTWF0aC5pbXVsKGtlLGRuKXwwLEE9QStNYXRoLmltdWwoa2UsbW4p''@;'; put 'put ''fDA7dmFyIHFpPShqKyhFPUUrTWF0aC5pbXVsKHhlLGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoeGUsdG4pfDApK01hdGguaW11bCh5ZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCh5ZSx0bil8MCkrKG0+Pj4xMyl8MCkrKHFpPj4+MjYpfDAscWkmPTY3MTA4''@;'; put 'put ''ODYzLEU9TWF0aC5pbXVsKEllLEJ0KSxtPShtPU1hdGguaW11bChJZSxBdCkpK01hdGguaW11bChhdCxCdCl8MCxBPU1hdGguaW11bChhdCxBdCksRT1FK01hdGguaW11bCh1dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHV0LFp0KXwwKStNYXRoLmltdWwoWGUsc3QpfDAsQT1BK01hdGguaW11''@;'; put 'put ''bChYZSxadCl8MCxFPUUrTWF0aC5pbXVsKHZ0LFllKXwwLG09KG09bStNYXRoLmltdWwodnQsVHQpfDApK01hdGguaW11bChTdCxZZSl8MCxBPUErTWF0aC5pbXVsKFN0LFR0KXwwLEU9RStNYXRoLmltdWwocnQsZnQpfDAsbT0obT1tK01hdGguaW11bChydCxNdCl8MCkrTWF0aC5pbXVsKFFl''@;'; put 'put ''LGZ0KXwwLEE9QStNYXRoLmltdWwoUWUsTXQpfDAsRT1FK01hdGguaW11bChBZSxubil8MCxtPShtPW0rTWF0aC5pbXVsKEFlLFd0KXwwKStNYXRoLmltdWwoRGUsbm4pfDAsQT1BK01hdGguaW11bChEZSxXdCl8MCxFPUUrTWF0aC5pbXVsKExlLGRuKXwwLG09KG09bStNYXRoLmltdWwoTGUs''@;'; put 'put ''bW4pfDApK01hdGguaW11bChSZSxkbil8MCxBPUErTWF0aC5pbXVsKFJlLG1uKXwwO3ZhciBQYT0oaisoRT1FK01hdGguaW11bChqZSxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGplLHRuKXwwKStNYXRoLmltdWwoa2UsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmlt''@;'; put 'put ''dWwoa2UsdG4pfDApKyhtPj4+MTMpfDApKyhQYT4+PjI2KXwwLFBhJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxzdCksbT0obT1NYXRoLmltdWwoSWUsWnQpKStNYXRoLmltdWwoYXQsc3QpfDAsQT1NYXRoLmltdWwoYXQsWnQpLEU9RStNYXRoLmltdWwodXQsWWUpfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bCh1dCxUdCl8MCkrTWF0aC5pbXVsKFhlLFllKXwwLEE9QStNYXRoLmltdWwoWGUsVHQpfDAsRT1FK01hdGguaW11bCh2dCxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LE10KXwwKStNYXRoLmltdWwoU3QsZnQpfDAsQT1BK01hdGguaW11bChTdCxNdCl8MCxFPUUrTWF0aC5pbXVsKHJ0''@;'; put 'put ''LG5uKXwwLG09KG09bStNYXRoLmltdWwocnQsV3QpfDApK01hdGguaW11bChRZSxubil8MCxBPUErTWF0aC5pbXVsKFFlLFd0KXwwLEU9RStNYXRoLmltdWwoQWUsZG4pfDAsbT0obT1tK01hdGguaW11bChBZSxtbil8MCkrTWF0aC5pbXVsKERlLGRuKXwwLEE9QStNYXRoLmltdWwoRGUsbW4p''@;'; put 'put ''fDA7dmFyIHVyPShqKyhFPUUrTWF0aC5pbXVsKExlLGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoTGUsdG4pfDApK01hdGguaW11bChSZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChSZSx0bil8MCkrKG0+Pj4xMyl8MCkrKHVyPj4+MjYpfDAsdXImPTY3MTA4''@;'; put 'put ''ODYzLEU9TWF0aC5pbXVsKEllLFllKSxtPShtPU1hdGguaW11bChJZSxUdCkpK01hdGguaW11bChhdCxZZSl8MCxBPU1hdGguaW11bChhdCxUdCksRT1FK01hdGguaW11bCh1dCxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKHV0LE10KXwwKStNYXRoLmltdWwoWGUsZnQpfDAsQT1BK01hdGguaW11''@;'; put 'put ''bChYZSxNdCl8MCxFPUUrTWF0aC5pbXVsKHZ0LG5uKXwwLG09KG09bStNYXRoLmltdWwodnQsV3QpfDApK01hdGguaW11bChTdCxubil8MCxBPUErTWF0aC5pbXVsKFN0LFd0KXwwLEU9RStNYXRoLmltdWwocnQsZG4pfDAsbT0obT1tK01hdGguaW11bChydCxtbil8MCkrTWF0aC5pbXVsKFFl''@;'; put 'put ''LGRuKXwwLEE9QStNYXRoLmltdWwoUWUsbW4pfDA7dmFyIGJhPShqKyhFPUUrTWF0aC5pbXVsKEFlLGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoQWUsdG4pfDApK01hdGguaW11bChEZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChEZSx0bil8MCkrKG0+Pj4x''@;'; put 'put ''Myl8MCkrKGJhPj4+MjYpfDAsYmEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLGZ0KSxtPShtPU1hdGguaW11bChJZSxNdCkpK01hdGguaW11bChhdCxmdCl8MCxBPU1hdGguaW11bChhdCxNdCksRT1FK01hdGguaW11bCh1dCxubil8MCxtPShtPW0rTWF0aC5pbXVsKHV0LFd0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoWGUsbm4pfDAsQT1BK01hdGguaW11bChYZSxXdCl8MCxFPUUrTWF0aC5pbXVsKHZ0LGRuKXwwLG09KG09bStNYXRoLmltdWwodnQsbW4pfDApK01hdGguaW11bChTdCxkbil8MCxBPUErTWF0aC5pbXVsKFN0LG1uKXwwO3ZhciBNaT0oaisoRT1FK01hdGguaW11bChydCxmbil8MCl8''@;'; put 'put ''MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHJ0LHRuKXwwKStNYXRoLmltdWwoUWUsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoUWUsdG4pfDApKyhtPj4+MTMpfDApKyhNaT4+PjI2KXwwLE1pJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxubiksbT0obT1NYXRoLmltdWwo''@;'; put 'put ''SWUsV3QpKStNYXRoLmltdWwoYXQsbm4pfDAsQT1NYXRoLmltdWwoYXQsV3QpLEU9RStNYXRoLmltdWwodXQsZG4pfDAsbT0obT1tK01hdGguaW11bCh1dCxtbil8MCkrTWF0aC5pbXVsKFhlLGRuKXwwLEE9QStNYXRoLmltdWwoWGUsbW4pfDA7dmFyIHdhPShqKyhFPUUrTWF0aC5pbXVsKHZ0''@;'; put 'put ''LGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodnQsdG4pfDApK01hdGguaW11bChTdCxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChTdCx0bil8MCkrKG0+Pj4xMyl8MCkrKHdhPj4+MjYpfDAsd2EmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLGRuKSxtPShtPU1h''@;'; put 'put ''dGguaW11bChJZSxtbikpK01hdGguaW11bChhdCxkbil8MCxBPU1hdGguaW11bChhdCxtbik7dmFyIGVhPShqKyhFPUUrTWF0aC5pbXVsKHV0LGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodXQsdG4pfDApK01hdGguaW11bChYZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01h''@;'; put 'put ''dGguaW11bChYZSx0bil8MCkrKG0+Pj4xMyl8MCkrKGVhPj4+MjYpfDAsZWEmPTY3MTA4ODYzO3ZhciBGcj0oaisoRT1NYXRoLmltdWwoSWUsZm4pKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKEllLHRuKSkrTWF0aC5pbXVsKGF0LGZuKXwwKSk8PDEzKXwwO3JldHVybiBqPSgoQT1NYXRo''@;'; put 'put ''LmltdWwoYXQsdG4pKSsobT4+PjEzKXwwKSsoRnI+Pj4yNil8MCxGciY9NjcxMDg4NjMsSFswXT1jYSxIWzFdPV9pLEhbMl09dnIsSFszXT1YaSxIWzRdPVFpLEhbNV09VmksSFs2XT1laSxIWzddPXVhLEhbOF09UmksSFs5XT1EYSxIWzEwXT1oaSxIWzExXT1xaSxIWzEyXT1QYSxIWzEzXT11''@;'; put 'put ''cixIWzE0XT1iYSxIWzE1XT1NaSxIWzE2XT13YSxIWzE3XT1lYSxIWzE4XT1GciwwIT09aiYmKEhbMTldPWoseC5sZW5ndGgrKykseH07ZnVuY3Rpb24gZWUoQixnLHkpe3JldHVybihuZXcgSikubXVscChCLGcseSl9ZnVuY3Rpb24gSihCLGcpe3RoaXMueD1CLHRoaXMueT1nfU1hdGguaW11''@;'; put 'put ''bHx8KFc9WSksdy5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oZyx5KXt2YXIgeCxDPXRoaXMubGVuZ3RoK2cubGVuZ3RoO3JldHVybiB4PTEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/Vyh0aGlzLGcseSk6Qzw2Mz9ZKHRoaXMsZyx5KTpDPDEwMjQ/ZnVuY3Rpb24gcShCLGcseSl7''@;'; put 'put ''eS5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkIubmVnYXRpdmUseS5sZW5ndGg9Qi5sZW5ndGgrZy5sZW5ndGg7Zm9yKHZhciB4PTAsQz0wLFQ9MDtUPHkubGVuZ3RoLTE7VCsrKXt2YXIgSD1DO0M9MDtmb3IodmFyIGo9NjcxMDg4NjMmeCxFPU1hdGgubWluKFQsZy5sZW5ndGgtMSksbT1NYXRoLm1h''@;'; put 'put ''eCgwLFQtQi5sZW5ndGgrMSk7bTw9RTttKyspe3ZhciBzZT0oMHxCLndvcmRzW1QtbV0pKigwfGcud29yZHNbbV0pLENlPTY3MTA4ODYzJnNlO2o9NjcxMDg4NjMmKENlPUNlK2p8MCksQys9KEg9KEg9SCsoc2UvNjcxMDg4NjR8MCl8MCkrKENlPj4+MjYpfDApPj4+MjYsSCY9NjcxMDg4NjN9''@;'; put 'put ''eS53b3Jkc1tUXT1qLHg9SCxIPUN9cmV0dXJuIDAhPT14P3kud29yZHNbVF09eDp5Lmxlbmd0aC0tLHkuc3RyaXAoKX0odGhpcyxnLHkpOmVlKHRoaXMsZyx5KSx4fSxKLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT1uZXcgQXJyYXkoZykseD13LnByb3RvdHlwZS5f''@;'; put 'put ''Y291bnRCaXRzKGcpLTEsQz0wO0M8ZztDKyspeVtDXT10aGlzLnJldkJpbihDLHgsZyk7cmV0dXJuIHl9LEoucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihnLHkseCl7aWYoMD09PWd8fGc9PT14LTEpcmV0dXJuIGc7Zm9yKHZhciBDPTAsVD0wO1Q8eTtUKyspQ3w9KDEmZyk8PHktVC0xLGc+''@;'; put 'put ''Pj0xO3JldHVybiBDfSxKLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGcseSx4LEMsVCxIKXtmb3IodmFyIGo9MDtqPEg7aisrKUNbal09eVtnW2pdXSxUW2pdPXhbZ1tqXV19LEoucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihnLHkseCxDLFQsSCl7dGhpcy5wZXJtdXRlKEgsZyx5''@;'; put 'put ''LHgsQyxUKTtmb3IodmFyIGo9MTtqPFQ7ajw8PTEpZm9yKHZhciBFPWo8PDEsbT1NYXRoLmNvcygyKk1hdGguUEkvRSksQT1NYXRoLnNpbigyKk1hdGguUEkvRSksYWU9MDthZTxUO2FlKz1FKWZvcih2YXIgbmU9bSxzZT1BLENlPTA7Q2U8ajtDZSsrKXt2YXIgVWU9eFthZStDZV0sSmU9Q1th''@;'; put 'put ''ZStDZV0saXQ9eFthZStDZStqXSx4ZT1DW2FlK0NlK2pdLHllPW5lKml0LXNlKnhlO3hlPW5lKnhlK3NlKml0LHhbYWUrQ2VdPVVlKyhpdD15ZSksQ1thZStDZV09SmUreGUseFthZStDZStqXT1VZS1pdCxDW2FlK0NlK2pdPUplLXhlLENlIT09RSYmKHllPW0qbmUtQSpzZSxzZT1tKnNlK0Eq''@;'; put 'put ''bmUsbmU9eWUpfX0sSi5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oZyx5KXt2YXIgeD0xfE1hdGgubWF4KHksZyksQz0xJngsVD0wO2Zvcih4PXgvMnwwO3g7eD4+Pj0xKVQrKztyZXR1cm4gMTw8VCsxK0N9LEoucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihnLHkseCl7aWYo''@;'; put 'put ''ISh4PD0xKSlmb3IodmFyIEM9MDtDPHgvMjtDKyspe3ZhciBUPWdbQ107Z1tDXT1nW3gtQy0xXSxnW3gtQy0xXT1ULFQ9eVtDXSx5W0NdPS15W3gtQy0xXSx5W3gtQy0xXT0tVH19LEoucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihnLHkpe2Zvcih2YXIgeD0wLEM9MDtDPHkvMjtD''@;'; put 'put ''Kyspe3ZhciBUPTgxOTIqTWF0aC5yb3VuZChnWzIqQysxXS95KStNYXRoLnJvdW5kKGdbMipDXS95KSt4O2dbQ109NjcxMDg4NjMmVCx4PVQ8NjcxMDg4NjQ/MDpULzY3MTA4ODY0fDB9cmV0dXJuIGd9LEoucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oZyx5LHgsQyl7Zm9yKHZhciBU''@;'; put 'put ''PTAsSD0wO0g8eTtIKyspeFsyKkhdPTgxOTEmKFQrPTB8Z1tIXSkseFsyKkgrMV09ODE5MSYoVD4+Pj0xMyksVD4+Pj0xMztmb3IoSD0yKnk7SDxDOysrSCl4W0hdPTA7cCgwPT09VCkscCghKC04MTkyJlQpKX0sSi5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihnKXtmb3IodmFyIHk9bmV3IEFy''@;'; put 'put ''cmF5KGcpLHg9MDt4PGc7eCsrKXlbeF09MDtyZXR1cm4geX0sSi5wcm90b3R5cGUubXVscD1mdW5jdGlvbihnLHkseCl7dmFyIEM9Mip0aGlzLmd1ZXNzTGVuMTNiKGcubGVuZ3RoLHkubGVuZ3RoKSxUPXRoaXMubWFrZVJCVChDKSxIPXRoaXMuc3R1YihDKSxqPW5ldyBBcnJheShDKSxFPW5l''@;'; put 'put ''dyBBcnJheShDKSxtPW5ldyBBcnJheShDKSxBPW5ldyBBcnJheShDKSxhZT1uZXcgQXJyYXkoQyksbmU9bmV3IEFycmF5KEMpLHNlPXgud29yZHM7c2UubGVuZ3RoPUMsdGhpcy5jb252ZXJ0MTNiKGcud29yZHMsZy5sZW5ndGgsaixDKSx0aGlzLmNvbnZlcnQxM2IoeS53b3Jkcyx5Lmxlbmd0''@;'; put 'put ''aCxBLEMpLHRoaXMudHJhbnNmb3JtKGosSCxFLG0sQyxUKSx0aGlzLnRyYW5zZm9ybShBLEgsYWUsbmUsQyxUKTtmb3IodmFyIENlPTA7Q2U8QztDZSsrKXt2YXIgVWU9RVtDZV0qYWVbQ2VdLW1bQ2VdKm5lW0NlXTttW0NlXT1FW0NlXSpuZVtDZV0rbVtDZV0qYWVbQ2VdLEVbQ2VdPVVlfXJl''@;'; put 'put ''dHVybiB0aGlzLmNvbmp1Z2F0ZShFLG0sQyksdGhpcy50cmFuc2Zvcm0oRSxtLHNlLEgsQyxUKSx0aGlzLmNvbmp1Z2F0ZShzZSxILEMpLHRoaXMubm9ybWFsaXplMTNiKHNlLEMpLHgubmVnYXRpdmU9Zy5uZWdhdGl2ZV55Lm5lZ2F0aXZlLHgubGVuZ3RoPWcubGVuZ3RoK3kubGVuZ3RoLHgu''@;'; put 'put ''c3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcpe3ZhciB5PW5ldyB3KG51bGwpO3JldHVybiB5LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksdGhpcy5tdWxUbyhnLHkpfSx3LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGcpe3ZhciB5PW5ldyB3KG51bGwp''@;'; put 'put ''O3JldHVybiB5LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksZWUodGhpcyxnLHkpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oZyx0aGlzKX0sdy5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oZyl7cCgibnVtYmVy''@;'; put 'put ''Ij09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCk7Zm9yKHZhciB5PTAseD0wO3g8dGhpcy5sZW5ndGg7eCsrKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSpnLFQ9KDY3MTA4ODYzJkMpKyg2NzEwODg2MyZ5KTt5Pj49MjYseSs9Qy82NzEwODg2NHwwLHkrPVQ+Pj4yNix0aGlzLndvcmRzW3hdPTY3''@;'; put 'put ''MTA4ODYzJlR9cmV0dXJuIDAhPT15JiYodGhpcy53b3Jkc1t4XT15LHRoaXMubGVuZ3RoKyspLHRoaXMubGVuZ3RoPTA9PT1nPzE6dGhpcy5sZW5ndGgsdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGcpfSx3LnByb3RvdHlwZS5z''@;'; put 'put ''cXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnKXt2YXIgeT1mdW5jdGlvbiBaKEIpe2Zvcih2YXIgZz1uZXcgQXJyYXko''@;'; put 'put ''Qi5iaXRMZW5ndGgoKSkseT0wO3k8Zy5sZW5ndGg7eSsrKXt2YXIgQz15JTI2O2dbeV09KEIud29yZHNbeS8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIGd9KGcpO2lmKDA9PT15Lmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8eS5sZW5ndGgmJjA9PT15W0NdO0Mr''@;'; put 'put ''Kyx4PXguc3FyKCkpO2lmKCsrQzx5Lmxlbmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPHkubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PXlbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2''@;'; put 'put ''YXIgVCx5PWclMjYseD0oZy15KS8yNixDPTY3MTA4ODYzPj4+MjYteTw8MjYteTtpZigwIT09eSl7dmFyIEg9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgaj10aGlzLndvcmRzW1RdJkM7dGhpcy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1qPDx5fEgsSD1qPj4+MjYteX1I''@;'; put 'put ''JiYodGhpcy53b3Jkc1tUXT1ILHRoaXMubGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1QrKyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJuIHRoaXMuc3Ry''@;'; put 'put ''aXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGcpfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZyx5LHgpe3ZhciBDO3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKSxDPXk/KHkteSUyNikvMjY6''@;'; put 'put ''MDt2YXIgVD1nJTI2LEg9TWF0aC5taW4oKGctVCkvMjYsdGhpcy5sZW5ndGgpLGo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1ILEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDttPEg7bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0aD1IfWlmKDAh''@;'; put 'put ''PT1IKWlmKHRoaXMubGVuZ3RoPkgpZm9yKHRoaXMubGVuZ3RoLT1ILG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStIXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wJiYoMCE9''@;'; put 'put ''PUF8fG0+PUMpO20tLSl7dmFyIGFlPTB8dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8YWU+Pj5ULEE9YWUman1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0''@;'; put 'put ''aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGcseSx4KXtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oZyx5LHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oZyl9LHcucHJvdG90eXBl''@;'; put 'put ''LnVzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGcpfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oZyl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJu''@;'; put 'put ''KGcpfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHk9ZyUyNix4PShnLXkpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jkc1t4XSYxPDx5KSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihnKXtw''@;'; put 'put ''KCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHk9ZyUyNix4PShnLXkpLzI2O3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09eSYmeCsrLHRoaXMubGVuZ3RoPU1h''@;'; put 'put ''dGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT15JiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj55PDx5KSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihnKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuaWFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIm51bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpLGc8MD90aGlzLmlzdWJuKC1nKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPGc/KHRoaXMud29yZHNbMF09Zy0oMHx0aGlz''@;'; put 'put ''LndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihnKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKGcpe3RoaXMud29yZHNbMF0rPWc7Zm9yKHZhciB5PTA7eTx0''@;'; put 'put ''aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t5XT49NjcxMDg4NjQ7eSsrKXRoaXMud29yZHNbeV0tPTY3MTA4ODY0LHk9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbeSsxXT0xOnRoaXMud29yZHNbeSsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCx5KzEpLHRo''@;'; put 'put ''aXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGcpe2lmKHAoIm51bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpLGc8MClyZXR1cm4gdGhpcy5pYWRkbigtZyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKGcpLHRoaXMubmVn''@;'; put 'put ''YXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWcsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3ldPDA7eSsrKXRo''@;'; put 'put ''aXMud29yZHNbeV0rPTY3MTA4ODY0LHRoaXMud29yZHNbeSsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oZyl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xv''@;'; put 'put ''bmUoKS5pc3VibihnKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihnLHks''@;'; put 'put ''eCl7dmFyIFQ7dGhpcy5fZXhwYW5kKGcubGVuZ3RoK3gpO3ZhciBILGo9MDtmb3IoVD0wO1Q8Zy5sZW5ndGg7VCsrKXtIPSgwfHRoaXMud29yZHNbVCt4XSkrajt2YXIgRT0oMHxnLndvcmRzW1RdKSp5O2o9KChILT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDApLHRoaXMud29yZHNb''@;'; put 'put ''VCt4XT02NzEwODg2MyZIfWZvcig7VDx0aGlzLmxlbmd0aC14O1QrKylqPShIPSgwfHRoaXMud29yZHNbVCt4XSkraik+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIO2lmKDA9PT1qKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKHAoLTE9PT1qKSxqPTAsVD0wO1Q8dGhpcy5sZW5ndGg7''@;'; put 'put ''VCsrKWo9KEg9LSgwfHRoaXMud29yZHNbVF0pK2opPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJkg7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKGcseSl7dmFyIHgsQz10aGlzLmNsb25lKCksVD1nLEg9MHxULndv''@;'; put 'put ''cmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0cyhIKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksSD0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5sZW5ndGg7aWYoIm1vZCIhPT15KXsobT1uZXcgdyhudWxsKSkubGVuZ3RoPUUrMSxt''@;'; put 'put ''LndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBhZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09YWUubmVnYXRpdmUmJihDPWFlLG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFyIG5lPUUtMTtuZT49''@;'; put 'put ''MDtuZS0tKXt2YXIgc2U9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0aCtuZV0pKygwfEMud29yZHNbVC5sZW5ndGgrbmUtMV0pO2ZvcihzZT1NYXRoLm1pbihzZS9IfDAsNjcxMDg4NjMpLEMuX2lzaGxuc3VibXVsKFQsc2UsbmUpOzAhPT1DLm5lZ2F0aXZlOylzZS0tLEMubmVnYXRpdmU9''@;'; put 'put ''MCxDLl9pc2hsbnN1Ym11bChULDEsbmUpLEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1tuZV09c2UpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09eSYmMCE9PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcucHJvdG90eXBl''@;'; put 'put ''LmRpdm1vZD1mdW5jdGlvbihnLHkseCl7cmV0dXJuIHAoIWcuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChnLHkpLCJtb2QiIT09eSYmKEM9SC5k''@;'; put 'put ''aXYubmVnKCkpLCJkaXYiIT09eSYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChnKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlPyhIPXRoaXMuZGl2bW9kKGcubmVnKCkseSksIm1vZCIhPT15JiYoQz1ILmRpdi5uZWco''@;'; put 'put ''KSkse2RpdjpDLG1vZDpILm1vZH0pOnRoaXMubmVnYXRpdmUmZy5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChnLm5lZygpLHkpLCJkaXYiIT09eSYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaXN1YihnKSkse2RpdjpILmRpdixtb2Q6VH0pOmcubGVuZ3RoPnRo''@;'; put 'put ''aXMubGVuZ3RofHx0aGlzLmNtcChnKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1nLmxlbmd0aD8iZGl2Ij09PXk/e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09eT97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kbihnLndvcmRzWzBdKSl9Ontk''@;'; put 'put ''aXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGcseSk7dmFyIEMsVCxIfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUu''@;'; put 'put ''bW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oZyl7dmFyIHk9dGhpcy5kaXZt''@;'; put 'put ''b2QoZyk7aWYoeS5tb2QuaXNaZXJvKCkpcmV0dXJuIHkuZGl2O3ZhciB4PTAhPT15LmRpdi5uZWdhdGl2ZT95Lm1vZC5pc3ViKGcpOnkubW9kLEM9Zy51c2hybigxKSxUPWcuYW5kbG4oMSksSD14LmNtcChDKTtyZXR1cm4gSDwwfHwxPT09VCYmMD09PUg/eS5kaXY6MCE9PXkuZGl2Lm5lZ2F0''@;'; put 'put ''aXZlP3kuZGl2LmlzdWJuKDEpOnkuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGcpe3AoZzw9NjcxMDg4NjMpO2Zvcih2YXIgeT0oMTw8MjYpJWcseD0wLEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl4PSh5KngrKDB8dGhpcy53b3Jkc1tDXSkpJWc7cmV0dXJuIHh9''@;'; put 'put ''LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGcpe3AoZzw9NjcxMDg4NjMpO2Zvcih2YXIgeT0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqeTt0aGlzLndvcmRzW3hdPUMvZ3wwLHk9QyVnfXJldHVybiB0aGlzLnN0cmlwKCl9''@;'; put 'put ''LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihnKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlKSxwKCFnLmlzWmVybygpKTt2YXIgeT10aGlzLHg9Zy5jbG9uZSgpO3k9MCE9PXkubmVnYXRpdmU/eS51''@;'; put 'put ''bW9kKGcpOnkuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPW5ldyB3KDApLGo9bmV3IHcoMSksRT0wO3kuaXNFdmVuKCkmJnguaXNFdmVuKCk7KXkuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9eS5jbG9uZSgpOyF5LmlzWmVy''@;'; put 'put ''bygpOyl7Zm9yKHZhciBhZT0wLG5lPTE7ISh5LndvcmRzWzBdJm5lKSYmYWU8MjY7KythZSxuZTw8PTEpO2lmKGFlPjApZm9yKHkuaXVzaHJuKGFlKTthZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkpJiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSksVC5pdXNocm4oMSk7''@;'; put 'put ''Zm9yKHZhciBzZT0wLENlPTE7ISh4LndvcmRzWzBdJkNlKSYmc2U8MjY7KytzZSxDZTw8PTEpO2lmKHNlPjApZm9yKHguaXVzaHJuKHNlKTtzZS0tID4wOykoSC5pc09kZCgpfHxqLmlzT2RkKCkpJiYoSC5pYWRkKG0pLGouaXN1YihBKSksSC5pdXNocm4oMSksai5pdXNocm4oMSk7eS5jbXAo''@;'; put 'put ''eCk+PTA/KHkuaXN1Yih4KSxDLmlzdWIoSCksVC5pc3ViKGopKTooeC5pc3ViKHkpLEguaXN1YihDKSxqLmlzdWIoVCkpfXJldHVybnthOkgsYjpqLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlKSxwKCFnLmlzWmVybygp''@;'; put 'put ''KTt2YXIgYWUseT10aGlzLHg9Zy5jbG9uZSgpO3k9MCE9PXkubmVnYXRpdmU/eS51bW9kKGcpOnkuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPXguY2xvbmUoKTt5LmNtcG4oMSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIGo9MCxFPTE7ISh5LndvcmRzWzBdJkUp''@;'; put 'put ''JiZqPDI2OysraixFPDw9MSk7aWYoaj4wKWZvcih5Lml1c2hybihqKTtqLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKEgpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0pO20tLSA+MDspVC5p''@;'; put 'put ''c09kZCgpJiZULmlhZGQoSCksVC5pdXNocm4oMSk7eS5jbXAoeCk+PTA/KHkuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoeSksVC5pc3ViKEMpKX1yZXR1cm4oYWU9MD09PXkuY21wbigxKT9DOlQpLmNtcG4oMCk8MCYmYWUuaWFkZChnKSxhZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9u''@;'; put 'put ''KGcpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGcuYWJzKCk7aWYoZy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgeT10aGlzLmNsb25lKCkseD1nLmNsb25lKCk7eS5uZWdhdGl2ZT0wLHgubmVnYXRpdmU9MDtmb3IodmFyIEM9MDt5LmlzRXZlbigpJiZ4LmlzRXZlbigpO0MrKyl5''@;'; put 'put ''Lml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7eS5pc0V2ZW4oKTspeS5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD15LmNtcCh4KTtpZihUPDApe3ZhciBIPXk7eT14LHg9SH1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBuKDEpKWJyZWFrO3ku''@;'; put 'put ''aXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZWdjZChnKS5hLnVtb2QoZyl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZnfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyk7dmFyIHk9ZyUyNix4PShnLXkpLzI2LEM9''@;'; put 'put ''MTw8eTtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLEg9eDswIT09VCYmSDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPTB8dGhpcy53b3Jkc1tIXTtUPShqKz1UKT4+PjI2LHRoaXMud29yZHNbSF09aiY9''@;'; put 'put ''NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tIXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGcpe3Zh''@;'; put 'put ''ciB4LHk9ZzwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYheSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmeSlyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXt5JiYoZz0tZykscChnPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIg''@;'; put 'put ''Qz0wfHRoaXMud29yZHNbMF07eD1DPT09Zz8wOkM8Zz8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihnKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUm''@;'; put 'put ''JjAhPT1nLm5lZ2F0aXZlKXJldHVybiAxO3ZhciB5PXRoaXMudWNtcChnKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteTp5fSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGcpe2lmKHRoaXMubGVuZ3RoPmcubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGcubGVuZ3RoKXJl''@;'; put 'put ''dHVybi0xO2Zvcih2YXIgeT0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxnLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/eT0tMTpDPlQmJih5PTEpO2JyZWFrfX1yZXR1cm4geX0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGcpe3JldHVybiAx''@;'; put 'put ''PT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wKGcpfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAo''@;'; put 'put ''Zyk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcChnKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPD0wfSx3''@;'; put 'put ''LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXAoZyl9LHcucmVkPWZ1bmN0''@;'; put 'put ''aW9uKGcpe3JldHVybiBuZXcgTWUoZyl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBwKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHAoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVz''@;'; put 'put ''IiksZy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGcpfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlz''@;'; put 'put ''KX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnJlZD1nLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBwKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNl''@;'; put 'put ''UmVkKGcpfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJl''@;'; put 'put ''ZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0''@;'; put 'put ''aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMu''@;'; put 'put ''cmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJp''@;'; put 'put ''ZnkyKHRoaXMsZyksdGhpcy5yZWQubXVsKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLmltdWwodGhp''@;'; put 'put ''cyxnKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNxcnQgd29y''@;'; put 'put ''a3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMu''@;'; put 'put ''cmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRo''@;'; put 'put ''aXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQmJiFnLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxnKX07dmFyIHJlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVs''@;'; put 'put ''bCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoQixnKXt0aGlzLm5hbWU9Qix0aGlzLnA9bmV3IHcoZywxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHVl''@;'; put 'put ''KCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBnZSgpe2llLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm''@;'; put 'put ''ZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFRlKCl7aWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZm''@;'; put 'put ''ZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBNZShCKXtpZigic3RyaW5nIj09dHlwZW9mIEIpe3ZhciBnPXcuX3ByaW1lKEIpO3RoaXMubT1nLnAsdGhpcy5wcmltZT1nfWVsc2UgcChCLmd0bigxKSwibW9k''@;'; put 'put ''dWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPUIsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIFplKEIpe01lLmNhbGwodGhpcyxCKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiks''@;'; put 'put ''dGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhp''@;'; put 'put ''cy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IHcobnVsbCk7cmV0dXJuIGcud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxnfSxpZS5wcm90b3R5cGUuaXJl''@;'; put 'put ''ZHVjZT1mdW5jdGlvbihnKXt2YXIgeCx5PWc7ZG97dGhpcy5zcGxpdCh5LHRoaXMudG1wKSx4PSh5PSh5PXRoaXMuaW11bEsoeSkpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMubik7dmFyIEM9eDx0aGlzLm4/LTE6eS51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1D''@;'; put 'put ''Pyh5LndvcmRzWzBdPTAseS5sZW5ndGg9MSk6Qz4wP3kuaXN1Yih0aGlzLnApOnZvaWQgMCE9PXkuc3RyaXA/eS5zdHJpcCgpOnkuX3N0cmlwKCkseX0saWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcseSl7Zy5pdXNocm4odGhpcy5uLDAseSl9LGllLnByb3RvdHlwZS5pbXVsSz1mdW5j''@;'; put 'put ''dGlvbihnKXtyZXR1cm4gZy5pbXVsKHRoaXMuayl9LFYodWUsaWUpLHVlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLHkpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4oZy5sZW5ndGgsOSksVD0wO1Q8QztUKyspeS53b3Jkc1tUXT1nLndvcmRzW1RdO2lmKHkubGVuZ3RoPUMsZy5s''@;'; put 'put ''ZW5ndGg8PTkpcmV0dXJuIGcud29yZHNbMF09MCx2b2lkKGcubGVuZ3RoPTEpO3ZhciBIPWcud29yZHNbOV07Zm9yKHkud29yZHNbeS5sZW5ndGgrK109SCZ4LFQ9MTA7VDxnLmxlbmd0aDtUKyspe3ZhciBqPTB8Zy53b3Jkc1tUXTtnLndvcmRzW1QtMTBdPShqJngpPDw0fEg+Pj4yMixIPWp9''@;'; put 'put ''Zy53b3Jkc1tULTEwXT1IPj4+PTIyLGcubGVuZ3RoLT0wPT09SCYmZy5sZW5ndGg+MTA/MTA6OX0sdWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2cud29yZHNbZy5sZW5ndGhdPTAsZy53b3Jkc1tnLmxlbmd0aCsxXT0wLGcubGVuZ3RoKz0yO2Zvcih2YXIgeT0wLHg9MDt4PGcubGVu''@;'; put 'put ''Z3RoO3grKyl7dmFyIEM9MHxnLndvcmRzW3hdO2cud29yZHNbeF09NjcxMDg4NjMmKHkrPTk3NypDKSx5PTY0KkMrKHkvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiYoZy5sZW5ndGgtLSwwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmZy5sZW5ndGgtLSksZ30s''@;'; put 'put ''VihnZSxpZSksVihfZSxpZSksVihUZSxpZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT0wLHg9MDt4PGcubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8Zy53b3Jkc1t4XSkreSxUPTY3MTA4ODYzJkM7Qz4+Pj0yNixnLndvcmRzW3hdPVQseT1DfXJldHVybiAwIT09''@;'; put 'put ''eSYmKGcud29yZHNbZy5sZW5ndGgrK109eSksZ30sdy5fcHJpbWU9ZnVuY3Rpb24oZyl7aWYocmVbZ10pcmV0dXJuIHJlW2ddO3ZhciB5O2lmKCJrMjU2Ij09PWcpeT1uZXcgdWU7ZWxzZSBpZigicDIyNCI9PT1nKXk9bmV3IGdlO2Vsc2UgaWYoInAxOTIiPT09Zyl5PW5ldyBfZTtlbHNle2lm''@;'; put 'put ''KCJwMjU1MTkiIT09Zyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitnKTt5PW5ldyBUZX1yZXR1cm4gcmVbZ109eSx5fSxNZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwKGcu''@;'; put 'put ''cmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LE1lLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihnLHkpe3AoIShnLm5lZ2F0aXZlfHkubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAoZy5yZWQmJmcucmVkPT09eS5yZWQsInJlZCB3''@;'; put 'put ''b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sTWUucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGcpLl9mb3JjZVJlZCh0aGlzKTpnLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LE1lLnByb3RvdHlwZS5uZWc9''@;'; put 'put ''ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNaZXJvKCk/Zy5jbG9uZSgpOnRoaXMubS5zdWIoZykuX2ZvcmNlUmVkKHRoaXMpfSxNZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuYWRkKHkpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4Lmlz''@;'; put 'put ''dWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sTWUucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5pYWRkKHkpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxNZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9u''@;'; put 'put ''KGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuc3ViKHkpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LE1lLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuaXN1Yih5KTtyZXR1''@;'; put 'put ''cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LE1lLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShnKSx0aGlzLmltb2QoZy51c2hsbih5KSl9LE1lLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIo''@;'; put 'put ''Zyx5KSx0aGlzLmltb2QoZy5pbXVsKHkpKX0sTWUucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcseSksdGhpcy5pbW9kKGcubXVsKHkpKX0sTWUucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW11bChnLGcuY2xvbmUoKSl9''@;'; put 'put ''LE1lLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubXVsKGcsZyl9LE1lLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGcpe2lmKGcuaXNaZXJvKCkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgeT10aGlzLm0uYW5kbG4oMyk7aWYocCh5JTI9PTEpLDM9PT15KXt2YXIgeD10aGlz''@;'; put 'put ''Lm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGcseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hybigxKTtwKCFDLmlzWmVybygpKTt2YXIgSD1uZXcgdygxKS50b1JlZCh0aGlzKSxq''@;'; put 'put ''PUgucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChqKTspbS5yZWRJQWRkKGopO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMpLGFlPXRoaXMucG93''@;'; put 'put ''KGcsQy5hZGRuKDEpLml1c2hybigxKSksbmU9dGhpcy5wb3coZyxDKSxzZT1UOzAhPT1uZS5jbXAoSCk7KXtmb3IodmFyIENlPW5lLFVlPTA7MCE9PUNlLmNtcChIKTtVZSsrKUNlPUNlLnJlZFNxcigpO3AoVWU8c2UpO3ZhciBKZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hsbihzZS1VZS0x''@;'; put 'put ''KSk7YWU9YWUucmVkTXVsKEplKSxBPUplLnJlZFNxcigpLG5lPW5lLnJlZE11bChBKSxzZT1VZX1yZXR1cm4gYWV9LE1lLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3ZhciB5PWcuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT15Lm5lZ2F0aXZlPyh5Lm5lZ2F0aXZlPTAsdGhpcy5pbW9k''@;'; put 'put ''KHkpLnJlZE5lZygpKTp0aGlzLmltb2QoeSl9LE1lLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyx5KXtpZih5LmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09eS5jbXBuKDEpKXJldHVybiBnLmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5ldyB3''@;'; put 'put ''KDEpLnRvUmVkKHRoaXMpLENbMV09Zztmb3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxnKTt2YXIgSD1DWzBdLGo9MCxFPTAsbT15LmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bSYmKG09MjYpLFQ9eS5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9yKHZhciBBPXku''@;'; put 'put ''d29yZHNbVF0sYWU9bS0xO2FlPj0wO2FlLS0pe3ZhciBuZT1BPj5hZSYxO0ghPT1DWzBdJiYoSD10aGlzLnNxcihIKSksMCE9PW5lfHwwIT09aj8oajw8PTEsanw9bmUsKDQ9PSsrRXx8MD09PVQmJjA9PT1hZSkmJihIPXRoaXMubXVsKEgsQ1tqXSksRT0wLGo9MCkpOkU9MH1tPTI2fXJldHVy''@;'; put 'put ''biBIfSxNZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3ZhciB5PWcudW1vZCh0aGlzLm0pO3JldHVybiB5PT09Zz95LmNsb25lKCk6eX0sTWUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciB5PWcuY2xvbmUoKTtyZXR1cm4geS5yZWQ9bnVsbCx5fSx3Lm1v''@;'; put 'put ''bnQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBaZShnKX0sVihaZSxNZSksWmUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcudXNobG4odGhpcy5zaGlmdCkpfSxaZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIHk9dGhpcy5p''@;'; put 'put ''bW9kKGcubXVsKHRoaXMucmludikpO3JldHVybiB5LnJlZD1udWxsLHl9LFplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcseSl7aWYoZy5pc1plcm8oKXx8eS5pc1plcm8oKSlyZXR1cm4gZy53b3Jkc1swXT0wLGcubGVuZ3RoPTEsZzt2YXIgeD1nLmltdWwoeSksQz14Lm1hc2tuKHRoaXMu''@;'; put 'put ''c2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9m''@;'; put 'put ''b3JjZVJlZCh0aGlzKX0sWmUucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLHkpe2lmKGcuaXNaZXJvKCl8fHkuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1nLm11bCh5KSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRo''@;'; put 'put ''aXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxaZS5wcm90b3R5cGUuaW52''@;'; put 'put ''bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShjZT1iLm5tZChjZSksdGhpcyl9LDE2NjI2OihjZSxYLGIpPT57dmFyIEk9Yig0OTYwOSksXz1iKDcxOTkzKTtmdW5jdGlvbiBWKHcsUCl7dGhpcy5u''@;'; put 'put ''YW1lPXcsdGhpcy5ib2R5PVAsdGhpcy5kZWNvZGVycz17fSx0aGlzLmVuY29kZXJzPXt9fVguZGVmaW5lPWZ1bmN0aW9uKFAsRil7cmV0dXJuIG5ldyBWKFAsRil9LFYucHJvdG90eXBlLl9jcmVhdGVOYW1lZD1mdW5jdGlvbihQKXt2YXIgRjt0cnl7Rj1iKDg2NjEpLnJ1bkluVGhpc0NvbnRl''@;'; put 'put ''eHQoIihmdW5jdGlvbiAiK3RoaXMubmFtZSsiKGVudGl0eSkge1xuICB0aGlzLl9pbml0TmFtZWQoZW50aXR5KTtcbn0pIil9Y2F0Y2h7Rj1mdW5jdGlvbih6KXt0aGlzLl9pbml0TmFtZWQoeil9fXJldHVybiBfKEYsUCksRi5wcm90b3R5cGUuX2luaXROYW1lZD1mdW5jdGlvbih6KXtQLmNh''@;'; put 'put ''bGwodGhpcyx6KX0sbmV3IEYodGhpcyl9LFYucHJvdG90eXBlLl9nZXREZWNvZGVyPWZ1bmN0aW9uKFApe3JldHVybiB0aGlzLmRlY29kZXJzLmhhc093blByb3BlcnR5KFA9UHx8ImRlciIpfHwodGhpcy5kZWNvZGVyc1tQXT10aGlzLl9jcmVhdGVOYW1lZChJLmRlY29kZXJzW1BdKSksdGhp''@;'; put 'put ''cy5kZWNvZGVyc1tQXX0sVi5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKFAsRixSKXtyZXR1cm4gdGhpcy5fZ2V0RGVjb2RlcihGKS5kZWNvZGUoUCxSKX0sVi5wcm90b3R5cGUuX2dldEVuY29kZXI9ZnVuY3Rpb24oUCl7cmV0dXJuIHRoaXMuZW5jb2RlcnMuaGFzT3duUHJvcGVydHkoUD1Q''@;'; put 'put ''fHwiZGVyIil8fCh0aGlzLmVuY29kZXJzW1BdPXRoaXMuX2NyZWF0ZU5hbWVkKEkuZW5jb2RlcnNbUF0pKSx0aGlzLmVuY29kZXJzW1BdfSxWLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oUCxGLFIpe3JldHVybiB0aGlzLl9nZXRFbmNvZGVyKEYpLmVuY29kZShQLFIpfX0sMTY3NjY6ZnVu''@;'; put 'put ''Y3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHAodyxQLEYpe3JldHVybiJtIj09PUY/UD8iXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkXHUwNDMwIjoiXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkXHUwNDQzIjoi''@;'; put 'put ''aCI9PT1GP1A/Ilx1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQzMCI6Ilx1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQ0MyI6dysiICIrZnVuY3Rpb24gXyh3LFApe3ZhciBGPXcuc3BsaXQoIl8iKTtyZXR1cm4gUCUxMD09MSYmUCUxMDAhPTEx''@;'; put 'put ''P0ZbMF06UCUxMD49MiYmUCUxMDw9NCYmKFAlMTAwPDEwfHxQJTEwMD49MjApP0ZbMV06RlsyXX0oe3NzOlA/Ilx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzMF9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0NGJfXHUwNDQxXHUwNDM1XHUw''@;'; put 'put ''NDNhXHUwNDQzXHUwNDNkXHUwNDM0IjoiXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDQzX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0Yl9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLG1tOlA/Ilx1MDQ0NVx1MDQz''@;'; put 'put ''Mlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZFx1MDQzMF9cdTA0NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0M2RcdTA0NGJfXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkIjoiXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkXHUwNDQzX1x1MDQ0NVx1''@;'; put 'put ''MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZFx1MDQ0Yl9cdTA0NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0M2QiLGhoOlA/Ilx1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQzMF9cdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2RcdTA0NGJf''@;'; put 'put ''XHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNkIjoiXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNkXHUwNDQzX1x1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQ0Yl9cdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2QiLGRk''@;'; put 'put ''OiJcdTA0MzRcdTA0MzdcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDM0XHUwNDNkXHUwNDU2X1x1MDQzNFx1MDQzN1x1MDQ1MVx1MDQzZCIsTU06Ilx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQ0Zlx1MDQ0Nl9cdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDZcdTA0NGJfXHUwNDNjXHUwNDM1XHUw''@;'; put 'put ''NDQxXHUwNDRmXHUwNDQ2XHUwNDMwXHUwNDVlIix5eToiXHUwNDMzXHUwNDNlXHUwNDM0X1x1MDQzM1x1MDQzMFx1MDQzNFx1MDQ0Yl9cdTA0MzNcdTA0MzBcdTA0MzRcdTA0M2VcdTA0NWUifVtGXSwrdyl9SS5kZWZpbmVMb2NhbGUoImJlIix7bW9udGhzOntmb3JtYXQ6Ilx1MDQ0MVx1MDQ0''@;'; put 'put ''Mlx1MDQ0M1x1MDQzNFx1MDQzN1x1MDQzNVx1MDQzZFx1MDQ0Zl9cdTA0M2JcdTA0NGVcdTA0NDJcdTA0MzBcdTA0MzNcdTA0MzBfXHUwNDQxXHUwNDMwXHUwNDNhXHUwNDMwXHUwNDMyXHUwNDU2XHUwNDNhXHUwNDMwX1x1MDQzYVx1MDQ0MFx1MDQzMFx1MDQ0MVx1MDQzMFx1MDQzMlx1MDQ1''@;'; put 'put ''Nlx1MDQzYVx1MDQzMF9cdTA0NDJcdTA0NDBcdTA0MzBcdTA0NWVcdTA0M2RcdTA0NGZfXHUwNDQ3XHUwNDRkXHUwNDQwXHUwNDMyXHUwNDM1XHUwNDNkXHUwNDRmX1x1MDQzYlx1MDQ1Nlx1MDQzZlx1MDQzNVx1MDQzZFx1MDQ0Zl9cdTA0MzZcdTA0M2RcdTA0NTZcdTA0NWVcdTA0M2RcdTA0''@;'; put 'put ''NGZfXHUwNDMyXHUwNDM1XHUwNDQwXHUwNDMwXHUwNDQxXHUwNDNkXHUwNDRmX1x1MDQzYVx1MDQzMFx1MDQ0MVx1MDQ0Mlx1MDQ0MFx1MDQ0Ylx1MDQ0N1x1MDQzZFx1MDQ1Nlx1MDQzYVx1MDQzMF9cdTA0M2JcdTA0NTZcdTA0NDFcdTA0NDJcdTA0MzBcdTA0M2ZcdTA0MzBcdTA0MzRcdTA0''@;'; put 'put ''MzBfXHUwNDQxXHUwNDNkXHUwNDM1XHUwNDM2XHUwNDNkXHUwNDRmIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzNFx1MDQzN1x1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0M2JcdTA0NGVcdTA0NDJcdTA0NGJfXHUwNDQxXHUwNDMwXHUwNDNhXHUwNDMwXHUw''@;'; put 'put ''NDMyXHUwNDU2XHUwNDNhX1x1MDQzYVx1MDQ0MFx1MDQzMFx1MDQ0MVx1MDQzMFx1MDQzMlx1MDQ1Nlx1MDQzYV9cdTA0NDJcdTA0NDBcdTA0MzBcdTA0MzJcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDQ3XHUwNDRkXHUwNDQwXHUwNDMyXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzYlx1MDQ1Nlx1''@;'; put 'put ''MDQzZlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0MzZcdTA0M2RcdTA0NTZcdTA0MzJcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDMyXHUwNDM1XHUwNDQwXHUwNDMwXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzYVx1MDQzMFx1MDQ0MVx1MDQ0Mlx1MDQ0MFx1MDQ0Ylx1MDQ0N1x1MDQzZFx1''@;'; put 'put ''MDQ1Nlx1MDQzYV9cdTA0M2JcdTA0NTZcdTA0NDFcdTA0NDJcdTA0MzBcdTA0M2ZcdTA0MzBcdTA0MzRfXHUwNDQxXHUwNDNkXHUwNDM1XHUwNDM2XHUwNDMwXHUwNDNkXHUwNDRjIi5zcGxpdCgiXyIpfSxtb250aHNTaG9ydDoiXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDM0X1x1MDQzYlx1MDQ0''@;'; put 'put ''ZVx1MDQ0Ml9cdTA0NDFcdTA0MzBcdTA0M2FfXHUwNDNhXHUwNDQwXHUwNDMwXHUwNDQxX1x1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQzMl9cdTA0NDdcdTA0NGRcdTA0NDBcdTA0MzJfXHUwNDNiXHUwNDU2XHUwNDNmX1x1MDQzNlx1MDQzZFx1MDQ1Nlx1MDQzMl9cdTA0MzJcdTA0MzVcdTA0NDBf''@;'; put 'put ''XHUwNDNhXHUwNDMwXHUwNDQxXHUwNDQyX1x1MDQzYlx1MDQ1Nlx1MDQ0MVx1MDQ0Ml9cdTA0NDFcdTA0M2RcdTA0MzVcdTA0MzYiLnNwbGl0KCJfIiksd2Vla2RheXM6e2Zvcm1hdDoiXHUwNDNkXHUwNDRmXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNiXHUwNDRlX1x1MDQzZlx1MDQzMFx1MDQz''@;'; put 'put ''ZFx1MDQ0Zlx1MDQzNFx1MDQzN1x1MDQzNVx1MDQzYlx1MDQzMFx1MDQzYV9cdTA0MzBcdTA0NWVcdTA0NDJcdTA0M2VcdTA0NDBcdTA0MzBcdTA0M2FfXHUwNDQxXHUwNDM1XHUwNDQwXHUwNDMwXHUwNDM0XHUwNDQzX1x1MDQ0N1x1MDQzMFx1MDQ0Nlx1MDQzMlx1MDQzNVx1MDQ0MF9cdTA0''@;'; put 'put ''M2ZcdTA0NGZcdTA0NDJcdTA0M2RcdTA0NTZcdTA0NDZcdTA0NDNfXHUwNDQxXHUwNDQzXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDQzIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1MDQzZFx1MDQ0Zlx1MDQzNFx1MDQzN1x1MDQzNVx1MDQzYlx1MDQ0Zl9cdTA0M2ZcdTA0MzBcdTA0M2RcdTA0''@;'; put 'put ''NGZcdTA0MzRcdTA0MzdcdTA0MzVcdTA0M2JcdTA0MzBcdTA0M2FfXHUwNDMwXHUwNDVlXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDMwXHUwNDNhX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzMFx1MDQzNFx1MDQzMF9cdTA0NDdcdTA0MzBcdTA0NDZcdTA0MzJcdTA0MzVcdTA0NDBfXHUwNDNmXHUw''@;'; put 'put ''NDRmXHUwNDQyXHUwNDNkXHUwNDU2XHUwNDQ2XHUwNDMwX1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzMCIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovXFsgP1tcdTA0MjNcdTA0NDNcdTA0NWVdID8oPzpcdTA0M2NcdTA0NTZcdTA0M2RcdTA0NDNcdTA0M2JcdTA0NDNcdTA0NGV8''@;'; put 'put ''XHUwNDNkXHUwNDMwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDNmXHUwNDNkXHUwNDQzXHUwNDRlKT8gP1xdID9kZGRkL30sd2Vla2RheXNTaG9ydDoiXHUwNDNkXHUwNDM0X1x1MDQzZlx1MDQzZF9cdTA0MzBcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQ0Nl9cdTA0M2ZcdTA0NDJfXHUw''@;'; put 'put ''NDQxXHUwNDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0M2RcdTA0MzRfXHUwNDNmXHUwNDNkX1x1MDQzMFx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDQ2X1x1MDQzZlx1MDQ0Ml9cdTA0NDFcdTA0MzEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIs''@;'; put 'put ''TFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIFx1MDQzMy4iLExMTDoiRCBNTU1NIFlZWVkgXHUwNDMzLiwgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFx1MDQzMy4sIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MjFcdTA0NTFcdTA0''@;'; put 'put ''M2RcdTA0M2RcdTA0NGYgXHUwNDVlXSBMVCIsbmV4dERheToiW1x1MDQxN1x1MDQzMFx1MDQ1ZVx1MDQ0Mlx1MDQ0MFx1MDQzMCBcdTA0NWVdIExUIixsYXN0RGF5OiJbXHUwNDIzXHUwNDQ3XHUwNDNlXHUwNDQwXHUwNDMwIFx1MDQ1ZV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IltcdTA0MjNdIGRkZGQgW1x1MDQ1ZV0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6Y2FzZSAzOmNhc2UgNTpjYXNlIDY6cmV0dXJuIltcdTA0MjMgXHUwNDNjXHUwNDU2XHUwNDNkXHUwNDQzXHUwNDNiXHUwNDQzXHUwNDRlXSBkZGRkIFtcdTA0''@;'; put 'put ''NWVdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpyZXR1cm4iW1x1MDQyMyBcdTA0M2NcdTA0NTZcdTA0M2RcdTA0NDNcdTA0M2JcdTA0NGJdIGRkZGQgW1x1MDQ1ZV0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDNmXHUwNDQwXHUwNDMwXHUwNDM3ICVz''@;'; put 'put ''IixwYXN0OiIlcyBcdTA0NDJcdTA0MzBcdTA0M2NcdTA0NDMiLHM6Ilx1MDQzZFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzYlx1MDQ0Y1x1MDQzYVx1MDQ1NiBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLG06cCxtbTpwLGg6cCxoaDpwLGQ6Ilx1MDQzNFx1MDQzN1x1MDQz''@;'; put 'put ''NVx1MDQzZFx1MDQ0YyIsZGQ6cCxNOiJcdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDYiLE1NOnAseToiXHUwNDMzXHUwNDNlXHUwNDM0Iix5eTpwfSxtZXJpZGllbVBhcnNlOi9cdTA0M2RcdTA0M2VcdTA0NDdcdTA0NGJ8XHUwNDQwXHUwNDMwXHUwNDNkXHUwNDU2XHUwNDQ2XHUwNDRi''@;'; put 'put ''fFx1MDQzNFx1MDQzZFx1MDQ0ZnxcdTA0MzJcdTA0MzVcdTA0NDdcdTA0MzBcdTA0NDBcdTA0MzAvLGlzUE06ZnVuY3Rpb24odyl7cmV0dXJuL14oXHUwNDM0XHUwNDNkXHUwNDRmfFx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzMFx1MDQ0MFx1MDQzMCkkLy50ZXN0KHcpfSxtZXJpZGllbTpmdW5j''@;'; put 'put ''dGlvbih3LFAsRil7cmV0dXJuIHc8ND8iXHUwNDNkXHUwNDNlXHUwNDQ3XHUwNDRiIjp3PDEyPyJcdTA0NDBcdTA0MzBcdTA0M2RcdTA0NTZcdTA0NDZcdTA0NGIiOnc8MTc/Ilx1MDQzNFx1MDQzZFx1MDQ0ZiI6Ilx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzMFx1MDQ0MFx1MDQzMCJ9LGRheU9m''@;'; put 'put ''TW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1MDQ1NnxcdTA0NGJ8XHUwNDMzXHUwNDMwKS8sb3JkaW5hbDpmdW5jdGlvbih3LFApe3N3aXRjaChQKXtjYXNlIk0iOmNhc2UiZCI6Y2FzZSJEREQiOmNhc2UidyI6Y2FzZSJXIjpyZXR1cm4gdyUxMCE9MiYmdyUxMCE9M3x8dyUxMDA9PTEy''@;'; put 'put ''fHx3JTEwMD09MTM/dysiLVx1MDQ0YiI6dysiLVx1MDQ1NiI7Y2FzZSJEIjpyZXR1cm4gdysiLVx1MDQzM1x1MDQzMCI7ZGVmYXVsdDpyZXR1cm4gd319LHdlZWs6e2RvdzoxLGRveTo3fX0pfShiKDk3NTg2KSl9LDE2OTgwOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNTg2MDcp''@;'; put 'put ''LF89Yig1NTU5MikscD1iKDE5MTUwKSxWPWIoMzhlMyksdz1iKDQ2Mzg3KSxQPWIoODk5ODEpLkNPTkZJR1VSQUJMRSxGPWIoMjY5MzEpLFI9Yig0NzM2KSx6PVIuZW5mb3JjZSxOPVIuZ2V0LE89U3RyaW5nLEs9T2JqZWN0LmRlZmluZVByb3BlcnR5LFo9SSgiIi5zbGljZSksWT1JKCIiLnJl''@;'; put 'put ''cGxhY2UpLFc9SShbXS5qb2luKSxxPXcmJiFfKGZ1bmN0aW9uKCl7cmV0dXJuIDghPT1LKGZ1bmN0aW9uKCl7fSwibGVuZ3RoIix7dmFsdWU6OH0pLmxlbmd0aH0pLGVlPVN0cmluZyhTdHJpbmcpLnNwbGl0KCJTdHJpbmciKSxKPWNlLmV4cG9ydHM9ZnVuY3Rpb24ocmUsaWUsdWUpeyJTeW1i''@;'; put 'put ''b2woIj09PVooTyhpZSksMCw3KSYmKGllPSJbIitZKE8oaWUpLC9eU3ltYm9sXCgoW14pXSopXCkuKiQvLCIkMSIpKyJdIiksdWUmJnVlLmdldHRlciYmKGllPSJnZXQgIitpZSksdWUmJnVlLnNldHRlciYmKGllPSJzZXQgIitpZSksKCFWKHJlLCJuYW1lIil8fFAmJnJlLm5hbWUhPT1pZSkm''@;'; put 'put ''Jih3P0socmUsIm5hbWUiLHt2YWx1ZTppZSxjb25maWd1cmFibGU6ITB9KTpyZS5uYW1lPWllKSxxJiZ1ZSYmVih1ZSwiYXJpdHkiKSYmcmUubGVuZ3RoIT09dWUuYXJpdHkmJksocmUsImxlbmd0aCIse3ZhbHVlOnVlLmFyaXR5fSk7dHJ5e3VlJiZWKHVlLCJjb25zdHJ1Y3RvciIpJiZ1ZS5j''@;'; put 'put ''b25zdHJ1Y3Rvcj93JiZLKHJlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pOnJlLnByb3RvdHlwZSYmKHJlLnByb3RvdHlwZT12b2lkIDApfWNhdGNoe312YXIgZ2U9eihyZSk7cmV0dXJuIFYoZ2UsInNvdXJjZSIpfHwoZ2Uuc291cmNlPVcoZWUsInN0cmluZyI9PXR5cGVvZiBpZT9pZToi''@;'; put 'put ''IikpLHJlfTtGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc9SihmdW5jdGlvbigpe3JldHVybiBwKHRoaXMpJiZOKHRoaXMpLnNvdXJjZXx8Rih0aGlzKX0sInRvU3RyaW5nIil9LDE3MDkwOihjZSxYLGIpPT57dmFyIEk9YigyNzA1NCkuQnVmZmVyLF89YigxMzU0Nik7ZnVuY3Rpb24gcChW''@;'; put 'put ''LHcsUCl7dmFyIEY9dy5sZW5ndGgsUj1fKHcsVi5fY2FjaGUpO3JldHVybiBWLl9jYWNoZT1WLl9jYWNoZS5zbGljZShGKSxWLl9wcmV2PUkuY29uY2F0KFtWLl9wcmV2LFA/dzpSXSksUn1YLmVuY3J5cHQ9ZnVuY3Rpb24oVix3LFApe2Zvcih2YXIgUixGPUkuYWxsb2NVbnNhZmUoMCk7dy5s''@;'; put 'put ''ZW5ndGg7KXtpZigwPT09Vi5fY2FjaGUubGVuZ3RoJiYoVi5fY2FjaGU9Vi5fY2lwaGVyLmVuY3J5cHRCbG9jayhWLl9wcmV2KSxWLl9wcmV2PUkuYWxsb2NVbnNhZmUoMCkpLCEoVi5fY2FjaGUubGVuZ3RoPD13Lmxlbmd0aCkpe0Y9SS5jb25jYXQoW0YscChWLHcsUCldKTticmVha31GPUku''@;'; put 'put ''Y29uY2F0KFtGLHAoVix3LnNsaWNlKDAsUj1WLl9jYWNoZS5sZW5ndGgpLFApXSksdz13LnNsaWNlKFIpfXJldHVybiBGfX0sMTcxMDc6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTA5ZTciLDI6Ilx1MDllOCIsMzoiXHUwOWU5Iiw0OiJc''@;'; put 'put ''dTA5ZWEiLDU6Ilx1MDllYiIsNjoiXHUwOWVjIiw3OiJcdTA5ZWQiLDg6Ilx1MDllZSIsOToiXHUwOWVmIiwwOiJcdTA5ZTYifSxwPXsiXHUwOWU3IjoiMSIsIlx1MDllOCI6IjIiLCJcdTA5ZTkiOiIzIiwiXHUwOWVhIjoiNCIsIlx1MDllYiI6IjUiLCJcdTA5ZWMiOiI2IiwiXHUwOWVkIjoi''@;'; put 'put ''NyIsIlx1MDllZSI6IjgiLCJcdTA5ZWYiOiI5IiwiXHUwOWU2IjoiMCJ9O0kuZGVmaW5lTG9jYWxlKCJibiIse21vbnRoczoiXHUwOTljXHUwOWJlXHUwOWE4XHUwOWMxXHUwOWRmXHUwOWJlXHUwOWIwXHUwOWJmX1x1MDlhYlx1MDljN1x1MDlhY1x1MDljZFx1MDliMFx1MDljMVx1MDlkZlx1''@;'; put 'put ''MDliZVx1MDliMFx1MDliZl9cdTA5YWVcdTA5YmVcdTA5YjBcdTA5Y2RcdTA5OWFfXHUwOThmXHUwOWFhXHUwOWNkXHUwOWIwXHUwOWJmXHUwOWIyX1x1MDlhZVx1MDljN19cdTA5OWNcdTA5YzFcdTA5YThfXHUwOTljXHUwOWMxXHUwOWIyXHUwOWJlXHUwOTg3X1x1MDk4Nlx1MDk5N1x1MDli''@;'; put 'put ''OFx1MDljZFx1MDk5Zl9cdTA5YjhcdTA5YzdcdTA5YWFcdTA5Y2RcdTA5OWZcdTA5YzdcdTA5YWVcdTA5Y2RcdTA5YWNcdTA5YjBfXHUwOTg1XHUwOTk1XHUwOWNkXHUwOTlmXHUwOWNiXHUwOWFjXHUwOWIwX1x1MDlhOFx1MDlhZFx1MDljN1x1MDlhZVx1MDljZFx1MDlhY1x1MDliMF9cdTA5''@;'; put 'put ''YTFcdTA5YmZcdTA5YjhcdTA5YzdcdTA5YWVcdTA5Y2RcdTA5YWNcdTA5YjAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDk5Y1x1MDliZVx1MDlhOFx1MDljMV9cdTA5YWJcdTA5YzdcdTA5YWNcdTA5Y2RcdTA5YjBcdTA5YzFfXHUwOWFlXHUwOWJlXHUwOWIwXHUwOWNkXHUwOTlhX1x1''@;'; put 'put ''MDk4Zlx1MDlhYVx1MDljZFx1MDliMFx1MDliZlx1MDliMl9cdTA5YWVcdTA5YzdfXHUwOTljXHUwOWMxXHUwOWE4X1x1MDk5Y1x1MDljMVx1MDliMlx1MDliZVx1MDk4N19cdTA5ODZcdTA5OTdcdTA5YjhcdTA5Y2RcdTA5OWZfXHUwOWI4XHUwOWM3XHUwOWFhXHUwOWNkXHUwOTlmX1x1MDk4''@;'; put 'put ''NVx1MDk5NVx1MDljZFx1MDk5Zlx1MDljYl9cdTA5YThcdTA5YWRcdTA5YzdfXHUwOWExXHUwOWJmXHUwOWI4XHUwOWM3Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA5YjBcdTA5YWNcdTA5YmZcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWI4XHUwOWNiXHUwOWFlXHUwOWFjXHUwOWJlXHUwOWIw''@;'; put 'put ''X1x1MDlhZVx1MDk5OVx1MDljZFx1MDk5N1x1MDliMlx1MDlhY1x1MDliZVx1MDliMF9cdTA5YWNcdTA5YzFcdTA5YTdcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWFjXHUwOWMzXHUwOWI5XHUwOWI4XHUwOWNkXHUwOWFhXHUwOWE0XHUwOWJmXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDliNlx1MDlj''@;'; put 'put ''MVx1MDk5NVx1MDljZFx1MDliMFx1MDlhY1x1MDliZVx1MDliMF9cdTA5YjZcdTA5YThcdTA5YmZcdTA5YWNcdTA5YmVcdTA5YjAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwOWIwXHUwOWFjXHUwOWJmX1x1MDliOFx1MDljYlx1MDlhZV9cdTA5YWVcdTA5OTlcdTA5Y2RcdTA5OTdc''@;'; put 'put ''dTA5YjJfXHUwOWFjXHUwOWMxXHUwOWE3X1x1MDlhY1x1MDljM1x1MDliOVx1MDliOFx1MDljZFx1MDlhYVx1MDlhNFx1MDliZl9cdTA5YjZcdTA5YzFcdTA5OTVcdTA5Y2RcdTA5YjBfXHUwOWI2XHUwOWE4XHUwOWJmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA5YjBcdTA5YWNcdTA5''@;'; put 'put ''YmZfXHUwOWI4XHUwOWNiXHUwOWFlX1x1MDlhZVx1MDk5OVx1MDljZFx1MDk5N1x1MDliMl9cdTA5YWNcdTA5YzFcdTA5YTdfXHUwOWFjXHUwOWMzXHUwOWI5X1x1MDliNlx1MDljMVx1MDk5NVx1MDljZFx1MDliMF9cdTA5YjZcdTA5YThcdTA5YmYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3Jt''@;'; put 'put ''YXQ6e0xUOiJBIGg6bW0gXHUwOWI4XHUwOWFlXHUwOWRmIixMVFM6IkEgaDptbTpzcyBcdTA5YjhcdTA5YWVcdTA5ZGYiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MDliOFx1MDlhZVx1MDlkZiIsTExMTDoiZGRkZCwgRCBNTU1N''@;'; put 'put ''IFlZWVksIEEgaDptbSBcdTA5YjhcdTA5YWVcdTA5ZGYifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDk4Nlx1MDk5Y10gTFQiLG5leHREYXk6IltcdTA5ODZcdTA5OTdcdTA5YmVcdTA5YWVcdTA5YzBcdTA5OTVcdTA5YmVcdTA5YjJdIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6''@;'; put 'put ''IltcdTA5OTdcdTA5YTRcdTA5OTVcdTA5YmVcdTA5YjJdIExUIixsYXN0V2VlazoiW1x1MDk5N1x1MDlhNF0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDlhYVx1MDliMFx1MDljNyIscGFzdDoiJXMgXHUwOTg2XHUwOTk3XHUwOWM3IixzOiJc''@;'; put 'put ''dTA5OTVcdTA5ZGZcdTA5YzdcdTA5OTUgXHUwOWI4XHUwOWM3XHUwOTk1XHUwOWM3XHUwOWE4XHUwOWNkXHUwOWExIixzczoiJWQgXHUwOWI4XHUwOWM3XHUwOTk1XHUwOWM3XHUwOWE4XHUwOWNkXHUwOWExIixtOiJcdTA5OGZcdTA5OTUgXHUwOWFlXHUwOWJmXHUwOWE4XHUwOWJmXHUwOTlm''@;'; put 'put ''IixtbToiJWQgXHUwOWFlXHUwOWJmXHUwOWE4XHUwOWJmXHUwOTlmIixoOiJcdTA5OGZcdTA5OTUgXHUwOTk4XHUwOWE4XHUwOWNkXHUwOTlmXHUwOWJlIixoaDoiJWQgXHUwOTk4XHUwOWE4XHUwOWNkXHUwOTlmXHUwOWJlIixkOiJcdTA5OGZcdTA5OTUgXHUwOWE2XHUwOWJmXHUwOWE4Iixk''@;'; put 'put ''ZDoiJWQgXHUwOWE2XHUwOWJmXHUwOWE4IixNOiJcdTA5OGZcdTA5OTUgXHUwOWFlXHUwOWJlXHUwOWI4IixNTToiJWQgXHUwOWFlXHUwOWJlXHUwOWI4Iix5OiJcdTA5OGZcdTA5OTUgXHUwOWFjXHUwOTliXHUwOWIwIix5eToiJWQgXHUwOWFjXHUwOTliXHUwOWIwIn0scHJlcGFyc2U6ZnVu''@;'; put 'put ''Y3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MDllN1x1MDllOFx1MDllOVx1MDllYVx1MDllYlx1MDllY1x1MDllZFx1MDllZVx1MDllZlx1MDllNl0vZyxmdW5jdGlvbihQKXtyZXR1cm4gcFtQXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2cs''@;'; put 'put ''ZnVuY3Rpb24oUCl7cmV0dXJuIF9bUF19KX0sbWVyaWRpZW1QYXJzZTovXHUwOWIwXHUwOWJlXHUwOWE0fFx1MDliOFx1MDk5NVx1MDliZVx1MDliMnxcdTA5YTZcdTA5YzFcdTA5YWFcdTA5YzFcdTA5YjB8XHUwOWFjXHUwOWJmXHUwOTk1XHUwOWJlXHUwOWIyfFx1MDliMFx1MDliZVx1MDlh''@;'; put 'put ''NC8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHcsUCl7cmV0dXJuIDEyPT09dyYmKHc9MCksIlx1MDliMFx1MDliZVx1MDlhNCI9PT1QJiZ3Pj00fHwiXHUwOWE2XHUwOWMxXHUwOWFhXHUwOWMxXHUwOWIwIj09PVAmJnc8NXx8Ilx1MDlhY1x1MDliZlx1MDk5NVx1MDliZVx1MDliMiI9PT1QP3cr''@;'; put 'put ''MTI6d30sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDQ/Ilx1MDliMFx1MDliZVx1MDlhNCI6dzwxMD8iXHUwOWI4XHUwOTk1XHUwOWJlXHUwOWIyIjp3PDE3PyJcdTA5YTZcdTA5YzFcdTA5YWFcdTA5YzFcdTA5YjAiOnc8MjA/Ilx1MDlhY1x1MDliZlx1MDk5NVx1MDliZVx1''@;'; put 'put ''MDliMiI6Ilx1MDliMFx1MDliZVx1MDlhNCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShiKDk3NTg2KSl9LDE3MTg3OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz0icGFnaF93YVx1MjAxOV9jaGFcdTIwMTlfd2VqX2xvU192YWdoX2phdl9Tb2NoX2No''@;'; put 'put ''b3JnaF9IdXQiLnNwbGl0KCJfIik7ZnVuY3Rpb24gdyhSLHosTixPKXt2YXIgSz1mdW5jdGlvbiBQKFIpe3ZhciB6PU1hdGguZmxvb3IoUiUxZTMvMTAwKSxOPU1hdGguZmxvb3IoUiUxMDAvMTApLE89UiUxMCxLPSIiO3JldHVybiB6PjAmJihLKz1fW3pdKyJ2YXRsaCIpLE4+MCYmKEsrPSgi''@;'; put 'put ''IiE9PUs/IiAiOiIiKStfW05dKyJtYUgiKSxPPjAmJihLKz0oIiIhPT1LPyIgIjoiIikrX1tPXSksIiI9PT1LPyJwYWdoIjpLfShSKTtzd2l0Y2goTil7Y2FzZSJzcyI6cmV0dXJuIEsrIiBsdXAiO2Nhc2UibW0iOnJldHVybiBLKyIgdHVwIjtjYXNlImhoIjpyZXR1cm4gSysiIHJlcCI7Y2Fz''@;'; put 'put ''ZSJkZCI6cmV0dXJuIEsrIiBqYWoiO2Nhc2UiTU0iOnJldHVybiBLKyIgamFyIjtjYXNlInl5IjpyZXR1cm4gSysiIERJUyJ9fUkuZGVmaW5lTG9jYWxlKCJ0bGgiLHttb250aHM6InRlcmFcdTIwMTkgamFyIHdhXHUyMDE5X3RlcmFcdTIwMTkgamFyIGNoYVx1MjAxOV90ZXJhXHUyMDE5IGph''@;'; put 'put ''ciB3ZWpfdGVyYVx1MjAxOSBqYXIgbG9TX3RlcmFcdTIwMTkgamFyIHZhZ2hfdGVyYVx1MjAxOSBqYXIgamF2X3RlcmFcdTIwMTkgamFyIFNvY2hfdGVyYVx1MjAxOSBqYXIgY2hvcmdoX3RlcmFcdTIwMTkgamFyIEh1dF90ZXJhXHUyMDE5IGphciB3YVx1MjAxOW1hSF90ZXJhXHUyMDE5IGph''@;'; put 'put ''ciB3YVx1MjAxOW1hSCB3YVx1MjAxOV90ZXJhXHUyMDE5IGphciB3YVx1MjAxOW1hSCBjaGFcdTIwMTkiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ImphciB3YVx1MjAxOV9qYXIgY2hhXHUyMDE5X2phciB3ZWpfamFyIGxvU19qYXIgdmFnaF9qYXIgamF2X2phciBTb2NoX2phciBjaG9yZ2hf''@;'; put 'put ''amFyIEh1dF9qYXIgd2FcdTIwMTltYUhfamFyIHdhXHUyMDE5bWFIIHdhXHUyMDE5X2phciB3YVx1MjAxOW1hSCBjaGFcdTIwMTkiLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoibG9qbUl0amFqX0RhU2phal9wb3ZqYWpfZ2hJdGxoamFqX2xvZ2hqYWpfYnVxamFq''@;'; put 'put ''X2doSW5qYWoiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibG9qbUl0amFqX0RhU2phal9wb3ZqYWpfZ2hJdGxoamFqX2xvZ2hqYWpfYnVxamFqX2doSW5qYWoiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Imxvam1JdGphal9EYVNqYWpfcG92amFqX2doSXRsaGphal9sb2doamFqX2J1cWph''@;'; put 'put ''al9naEluamFqIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2Ft''@;'; put 'put ''ZURheToiW0RhSGphal0gTFQiLG5leHREYXk6Ilt3YVx1MjAxOWxlU10gTFQiLG5leHRXZWVrOiJMTEwiLGxhc3REYXk6Ilt3YVx1MjAxOUh1XHUyMDE5XSBMVCIsbGFzdFdlZWs6IkxMTCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpmdW5jdGlvbiBwKFIpe3ZhciB6PVI7''@;'; put 'put ''cmV0dXJuLTEhPT1SLmluZGV4T2YoImphaiIpP3ouc2xpY2UoMCwtMykrImxlUyI6LTEhPT1SLmluZGV4T2YoImphciIpP3ouc2xpY2UoMCwtMykrIndhUSI6LTEhPT1SLmluZGV4T2YoIkRJUyIpP3ouc2xpY2UoMCwtMykrIm5lbSI6eisiIHBJcSJ9LHBhc3Q6ZnVuY3Rpb24gVihSKXt2YXIg''@;'; put 'put ''ej1SO3JldHVybi0xIT09Ui5pbmRleE9mKCJqYWoiKT96LnNsaWNlKDAsLTMpKyJIdVx1MjAxOSI6LTEhPT1SLmluZGV4T2YoImphciIpP3ouc2xpY2UoMCwtMykrIndlbiI6LTEhPT1SLmluZGV4T2YoIkRJUyIpP3ouc2xpY2UoMCwtMykrImJlbiI6eisiIHJldCJ9LHM6InB1UyBsdXAiLHNz''@;'; put 'put ''OncsbToid2FcdTIwMTkgdHVwIixtbTp3LGg6IndhXHUyMDE5IHJlcCIsaGg6dyxkOiJ3YVx1MjAxOSBqYWoiLGRkOncsTToid2FcdTIwMTkgamFyIixNTTp3LHk6IndhXHUyMDE5IERJUyIseXk6d30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdl''@;'; put 'put ''ZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDE3Mjk2OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMTkxNTApLF89YigzMjYzMykscD1iKDIxNjEyKTtjZS5leHBvcnRzPWZ1bmN0aW9uKFYsdyxQKXt2YXIgRixSO3JldHVybiBwJiZJKEY9dy5jb25zdHJ1Y3RvcikmJkYh''@;'; put 'put ''PT1QJiZfKFI9Ri5wcm90b3R5cGUpJiZSIT09UC5wcm90b3R5cGUmJnAoVixSKSxWfX0sMTc2NTY6ZnVuY3Rpb24oY2UsWCxiKXt2YXIgSTtjZS5leHBvcnRzPShJPUl8fGZ1bmN0aW9uKF8pe3ZhciBWO2lmKHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuY3J5cHRvJiYoVj13aW5kb3cuY3J5''@;'; put 'put ''cHRvKSx0eXBlb2Ygc2VsZjwidSImJnNlbGYuY3J5cHRvJiYoVj1zZWxmLmNyeXB0byksdHlwZW9mIGdsb2JhbFRoaXM8InUiJiZnbG9iYWxUaGlzLmNyeXB0byYmKFY9Z2xvYmFsVGhpcy5jcnlwdG8pLCFWJiZ0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lm1zQ3J5cHRvJiYoVj13aW5kb3cu''@;'; put 'put ''bXNDcnlwdG8pLCFWJiZ0eXBlb2YgZ2xvYmFsPCJ1IiYmZ2xvYmFsLmNyeXB0byYmKFY9Z2xvYmFsLmNyeXB0byksIVYpdHJ5e1Y9Yig5MTQyNil9Y2F0Y2h7fXZhciB3PWZ1bmN0aW9uKCl7aWYoVil7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFYuZ2V0UmFuZG9tVmFsdWVzKXRyeXtyZXR1cm4g''@;'; put 'put ''Vi5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDEpKVswXX1jYXRjaHt9aWYoImZ1bmN0aW9uIj09dHlwZW9mIFYucmFuZG9tQnl0ZXMpdHJ5e3JldHVybiBWLnJhbmRvbUJ5dGVzKDQpLnJlYWRJbnQzMkxFKCl9Y2F0Y2h7fX10aHJvdyBuZXcgRXJyb3IoIk5hdGl2ZSBjcnlwdG8g''@;'; put 'put ''bW9kdWxlIGNvdWxkIG5vdCBiZSB1c2VkIHRvIGdldCBzZWN1cmUgcmFuZG9tIG51bWJlci4iKX0sUD1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbigpe2Z1bmN0aW9uIEooKXt9cmV0dXJuIGZ1bmN0aW9uKHJlKXt2YXIgaWU7cmV0dXJuIEoucHJvdG90eXBlPXJlLGllPW5ldyBKLEoucHJvdG90''@;'; put 'put ''eXBlPW51bGwsaWV9fSgpLEY9e30sUj1GLmxpYj17fSx6PVIuQmFzZT1mdW5jdGlvbigpe3JldHVybntleHRlbmQ6ZnVuY3Rpb24oSil7dmFyIHJlPVAodGhpcyk7cmV0dXJuIEomJnJlLm1peEluKEopLCghcmUuaGFzT3duUHJvcGVydHkoImluaXQiKXx8dGhpcy5pbml0PT09cmUuaW5pdCkm''@;'; put 'put ''JihyZS5pbml0PWZ1bmN0aW9uKCl7cmUuJHN1cGVyLmluaXQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSkscmUuaW5pdC5wcm90b3R5cGU9cmUscmUuJHN1cGVyPXRoaXMscmV9LGNyZWF0ZTpmdW5jdGlvbigpe3ZhciBKPXRoaXMuZXh0ZW5kKCk7cmV0dXJuIEouaW5pdC5hcHBseShKLGFyZ3Vt''@;'; put 'put ''ZW50cyksSn0saW5pdDpmdW5jdGlvbigpe30sbWl4SW46ZnVuY3Rpb24oSil7Zm9yKHZhciByZSBpbiBKKUouaGFzT3duUHJvcGVydHkocmUpJiYodGhpc1tyZV09SltyZV0pO0ouaGFzT3duUHJvcGVydHkoInRvU3RyaW5nIikmJih0aGlzLnRvU3RyaW5nPUoudG9TdHJpbmcpfSxjbG9uZTpm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiB0aGlzLmluaXQucHJvdG90eXBlLmV4dGVuZCh0aGlzKX19fSgpLE49Ui5Xb3JkQXJyYXk9ei5leHRlbmQoe2luaXQ6ZnVuY3Rpb24oSixyZSl7Sj10aGlzLndvcmRzPUp8fFtdLHRoaXMuc2lnQnl0ZXM9bnVsbCE9cmU/cmU6NCpKLmxlbmd0aH0sdG9TdHJpbmc6''@;'; put 'put ''ZnVuY3Rpb24oSil7cmV0dXJuKEp8fEspLnN0cmluZ2lmeSh0aGlzKX0sY29uY2F0OmZ1bmN0aW9uKEope3ZhciByZT10aGlzLndvcmRzLGllPUoud29yZHMsdWU9dGhpcy5zaWdCeXRlcyxnZT1KLnNpZ0J5dGVzO2lmKHRoaXMuY2xhbXAoKSx1ZSU0KWZvcih2YXIgX2U9MDtfZTxnZTtfZSsr''@;'; put 'put ''KXJlW3VlK19lPj4+Ml18PShpZVtfZT4+PjJdPj4+MjQtX2UlNCo4JjI1NSk8PDI0LSh1ZStfZSklNCo4O2Vsc2UgZm9yKHZhciBNZT0wO01lPGdlO01lKz00KXJlW3VlK01lPj4+Ml09aWVbTWU+Pj4yXTtyZXR1cm4gdGhpcy5zaWdCeXRlcys9Z2UsdGhpc30sY2xhbXA6ZnVuY3Rpb24oKXt2''@;'; put 'put ''YXIgSj10aGlzLndvcmRzLHJlPXRoaXMuc2lnQnl0ZXM7SltyZT4+PjJdJj00Mjk0OTY3Mjk1PDwzMi1yZSU0KjgsSi5sZW5ndGg9Xy5jZWlsKHJlLzQpfSxjbG9uZTpmdW5jdGlvbigpe3ZhciBKPXouY2xvbmUuY2FsbCh0aGlzKTtyZXR1cm4gSi53b3Jkcz10aGlzLndvcmRzLnNsaWNlKDAp''@;'; put 'put ''LEp9LHJhbmRvbTpmdW5jdGlvbihKKXtmb3IodmFyIHJlPVtdLGllPTA7aWU8SjtpZSs9NClyZS5wdXNoKHcoKSk7cmV0dXJuIG5ldyBOLmluaXQocmUsSil9fSksTz1GLmVuYz17fSxLPU8uSGV4PXtzdHJpbmdpZnk6ZnVuY3Rpb24oSil7Zm9yKHZhciByZT1KLndvcmRzLGllPUouc2lnQnl0''@;'; put 'put ''ZXMsdWU9W10sZ2U9MDtnZTxpZTtnZSsrKXt2YXIgX2U9cmVbZ2U+Pj4yXT4+PjI0LWdlJTQqOCYyNTU7dWUucHVzaCgoX2U+Pj40KS50b1N0cmluZygxNikpLHVlLnB1c2goKDE1Jl9lKS50b1N0cmluZygxNikpfXJldHVybiB1ZS5qb2luKCIiKX0scGFyc2U6ZnVuY3Rpb24oSil7Zm9yKHZh''@;'; put 'put ''ciByZT1KLmxlbmd0aCxpZT1bXSx1ZT0wO3VlPHJlO3VlKz0yKWllW3VlPj4+M118PXBhcnNlSW50KEouc3Vic3RyKHVlLDIpLDE2KTw8MjQtdWUlOCo0O3JldHVybiBuZXcgTi5pbml0KGllLHJlLzIpfX0sWj1PLkxhdGluMT17c3RyaW5naWZ5OmZ1bmN0aW9uKEope2Zvcih2YXIgcmU9Si53''@;'; put 'put ''b3JkcyxpZT1KLnNpZ0J5dGVzLHVlPVtdLGdlPTA7Z2U8aWU7Z2UrKyl1ZS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUocmVbZ2U+Pj4yXT4+PjI0LWdlJTQqOCYyNTUpKTtyZXR1cm4gdWUuam9pbigiIil9LHBhcnNlOmZ1bmN0aW9uKEope2Zvcih2YXIgcmU9Si5sZW5ndGgsaWU9W10sdWU9''@;'; put 'put ''MDt1ZTxyZTt1ZSsrKWllW3VlPj4+Ml18PSgyNTUmSi5jaGFyQ29kZUF0KHVlKSk8PDI0LXVlJTQqODtyZXR1cm4gbmV3IE4uaW5pdChpZSxyZSl9fSxZPU8uVXRmOD17c3RyaW5naWZ5OmZ1bmN0aW9uKEope3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShaLnN0cmluZ2lm''@;'; put 'put ''eShKKSkpfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIFVURi04IGRhdGEiKX19LHBhcnNlOmZ1bmN0aW9uKEope3JldHVybiBaLnBhcnNlKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKKSkpfX0sVz1SLkJ1ZmZlcmVkQmxvY2tBbGdvcml0aG09ei5leHRlbmQoe3Jlc2V0''@;'; put 'put ''OmZ1bmN0aW9uKCl7dGhpcy5fZGF0YT1uZXcgTi5pbml0LHRoaXMuX25EYXRhQnl0ZXM9MH0sX2FwcGVuZDpmdW5jdGlvbihKKXsic3RyaW5nIj09dHlwZW9mIEomJihKPVkucGFyc2UoSikpLHRoaXMuX2RhdGEuY29uY2F0KEopLHRoaXMuX25EYXRhQnl0ZXMrPUouc2lnQnl0ZXN9LF9wcm9j''@;'; put 'put ''ZXNzOmZ1bmN0aW9uKEope3ZhciByZSxpZT10aGlzLl9kYXRhLHVlPWllLndvcmRzLGdlPWllLnNpZ0J5dGVzLF9lPXRoaXMuYmxvY2tTaXplLE1lPWdlLyg0Kl9lKSxaZT0oTWU9Sj9fLmNlaWwoTWUpOl8ubWF4KCgwfE1lKS10aGlzLl9taW5CdWZmZXJTaXplLDApKSpfZSxCPV8ubWluKDQq''@;'; put 'put ''WmUsZ2UpO2lmKFplKXtmb3IodmFyIGc9MDtnPFplO2crPV9lKXRoaXMuX2RvUHJvY2Vzc0Jsb2NrKHVlLGcpO3JlPXVlLnNwbGljZSgwLFplKSxpZS5zaWdCeXRlcy09Qn1yZXR1cm4gbmV3IE4uaW5pdChyZSxCKX0sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgSj16LmNsb25lLmNhbGwodGhpcyk7''@;'; put 'put ''cmV0dXJuIEouX2RhdGE9dGhpcy5fZGF0YS5jbG9uZSgpLEp9LF9taW5CdWZmZXJTaXplOjB9KSxlZT0oUi5IYXNoZXI9Vy5leHRlbmQoe2NmZzp6LmV4dGVuZCgpLGluaXQ6ZnVuY3Rpb24oSil7dGhpcy5jZmc9dGhpcy5jZmcuZXh0ZW5kKEopLHRoaXMucmVzZXQoKX0scmVzZXQ6ZnVuY3Rp''@;'; put 'put ''b24oKXtXLnJlc2V0LmNhbGwodGhpcyksdGhpcy5fZG9SZXNldCgpfSx1cGRhdGU6ZnVuY3Rpb24oSil7cmV0dXJuIHRoaXMuX2FwcGVuZChKKSx0aGlzLl9wcm9jZXNzKCksdGhpc30sZmluYWxpemU6ZnVuY3Rpb24oSil7cmV0dXJuIEomJnRoaXMuX2FwcGVuZChKKSx0aGlzLl9kb0ZpbmFs''@;'; put 'put ''aXplKCl9LGJsb2NrU2l6ZToxNixfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKEope3JldHVybiBmdW5jdGlvbihyZSxpZSl7cmV0dXJuIG5ldyBKLmluaXQoaWUpLmZpbmFsaXplKHJlKX19LF9jcmVhdGVIbWFjSGVscGVyOmZ1bmN0aW9uKEope3JldHVybiBmdW5jdGlvbihyZSxpZSl7cmV0dXJu''@;'; put 'put ''IG5ldyBlZS5ITUFDLmluaXQoSixpZSkuZmluYWxpemUocmUpfX19KSxGLmFsZ289e30pO3JldHVybiBGfShNYXRoKSxJKX0sMTgwMTA6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJ0em0iLHttb250aHM6Ilx1MmQ0OVx1MmQ0Zlx1''@;'; put 'put ''MmQ0Zlx1MmQzMFx1MmQ2Mlx1MmQ1NF9cdTJkMzFcdTJkNTVcdTJkMzBcdTJkNjJcdTJkNTVfXHUyZDRlXHUyZDMwXHUyZDU1XHUyZDVhX1x1MmQ0OVx1MmQzMVx1MmQ1NFx1MmQ0OVx1MmQ1NF9cdTJkNGVcdTJkMzBcdTJkNjJcdTJkNjJcdTJkNTNfXHUyZDYyXHUyZDUzXHUyZDRmXHUyZDYy''@;'; put 'put ''XHUyZDUzX1x1MmQ2Mlx1MmQ1M1x1MmQ0ZFx1MmQ2Mlx1MmQ1M1x1MmQ2M19cdTJkNTZcdTJkNTNcdTJkNWJcdTJkNWNfXHUyZDViXHUyZDUzXHUyZDVjXHUyZDMwXHUyZDRmXHUyZDMxXHUyZDQ5XHUyZDU0X1x1MmQzZFx1MmQ1Zlx1MmQ1M1x1MmQzMVx1MmQ1NV9cdTJkNGZcdTJkNTNcdTJk''@;'; put 'put ''NjFcdTJkMzBcdTJkNGZcdTJkMzFcdTJkNDlcdTJkNTRfXHUyZDM3XHUyZDUzXHUyZDRhXHUyZDRmXHUyZDMxXHUyZDQ5XHUyZDU0Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTJkNDlcdTJkNGZcdTJkNGZcdTJkMzBcdTJkNjJcdTJkNTRfXHUyZDMxXHUyZDU1XHUyZDMwXHUyZDYyXHUy''@;'; put 'put ''ZDU1X1x1MmQ0ZVx1MmQzMFx1MmQ1NVx1MmQ1YV9cdTJkNDlcdTJkMzFcdTJkNTRcdTJkNDlcdTJkNTRfXHUyZDRlXHUyZDMwXHUyZDYyXHUyZDYyXHUyZDUzX1x1MmQ2Mlx1MmQ1M1x1MmQ0Zlx1MmQ2Mlx1MmQ1M19cdTJkNjJcdTJkNTNcdTJkNGRcdTJkNjJcdTJkNTNcdTJkNjNfXHUyZDU2''@;'; put 'put ''XHUyZDUzXHUyZDViXHUyZDVjX1x1MmQ1Ylx1MmQ1M1x1MmQ1Y1x1MmQzMFx1MmQ0Zlx1MmQzMVx1MmQ0OVx1MmQ1NF9cdTJkM2RcdTJkNWZcdTJkNTNcdTJkMzFcdTJkNTVfXHUyZDRmXHUyZDUzXHUyZDYxXHUyZDMwXHUyZDRmXHUyZDMxXHUyZDQ5XHUyZDU0X1x1MmQzN1x1MmQ1M1x1MmQ0''@;'; put 'put ''YVx1MmQ0Zlx1MmQzMVx1MmQ0OVx1MmQ1NCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUyZDMwXHUyZDU5XHUyZDMwXHUyZDRlXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ2Mlx1MmQ0Zlx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNTlcdTJkNDlcdTJkNGZcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDNk''@;'; put 'put ''XHUyZDU0XHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQzZFx1MmQ2MVx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNTlcdTJkNDlcdTJkNGVcdTJkNjFcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDM5XHUyZDYyXHUyZDMwXHUyZDU5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1''@;'; put 'put ''MmQzMFx1MmQ1OVx1MmQzMFx1MmQ0ZVx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNjJcdTJkNGZcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDRmXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQzZFx1MmQ1NFx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkM2RcdTJkNjFcdTJkMzBcdTJkNTlf''@;'; put 'put ''XHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDRlXHUyZDYxXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ1OVx1MmQ0OVx1MmQzOVx1MmQ2Mlx1MmQzMFx1MmQ1OSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUyZDMwXHUyZDU5XHUyZDMwXHUyZDRlXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ2Mlx1MmQ0''@;'; put 'put ''Zlx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNTlcdTJkNDlcdTJkNGZcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDNkXHUyZDU0XHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQzZFx1MmQ2MVx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNTlcdTJkNDlcdTJkNGVcdTJkNjFcdTJkMzBcdTJkNTlfXHUyZDMwXHUy''@;'; put 'put ''ZDU5XHUyZDQ5XHUyZDM5XHUyZDYyXHUyZDMwXHUyZDU5Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZ''@;'; put 'put ''WSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUyZDMwXHUyZDU5XHUyZDM3XHUyZDQ1IFx1MmQzNF0gTFQiLG5leHREYXk6IltcdTJkMzBcdTJkNTlcdTJkM2RcdTJkMzAgXHUyZDM0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MmQzNF0gTFQiLGxhc3REYXk6IltcdTJkMzBcdTJkNWFc''@;'; put 'put ''dTJkMzBcdTJkNGZcdTJkNWMgXHUyZDM0XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MmQzNF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MmQzN1x1MmQzMFx1MmQzN1x1MmQ0NSBcdTJkNTkgXHUyZDYyXHUyZDMwXHUyZDRmICVzIixwYXN0OiJcdTJkNjJcdTJk''@;'; put 'put ''MzBcdTJkNGYgJXMiLHM6Ilx1MmQ0OVx1MmQ0ZVx1MmQ0OVx1MmQzZCIsc3M6IiVkIFx1MmQ0OVx1MmQ0ZVx1MmQ0OVx1MmQzZCIsbToiXHUyZDRlXHUyZDQ5XHUyZDRmXHUyZDUzXHUyZDNhIixtbToiJWQgXHUyZDRlXHUyZDQ5XHUyZDRmXHUyZDUzXHUyZDNhIixoOiJcdTJkNTlcdTJkMzBc''@;'; put 'put ''dTJkNDRcdTJkMzAiLGhoOiIlZCBcdTJkNWNcdTJkMzBcdTJkNTlcdTJkNTlcdTJkMzBcdTJkNDRcdTJkNDlcdTJkNGYiLGQ6Ilx1MmQzMFx1MmQ1OVx1MmQ1OSIsZGQ6IiVkIG9cdTJkNTlcdTJkNTlcdTJkMzBcdTJkNGYiLE06Ilx1MmQzMFx1MmQ2Mm9cdTJkNTNcdTJkNTQiLE1NOiIlZCBc''@;'; put 'put ''dTJkNDlcdTJkNjJcdTJkNjJcdTJkNDlcdTJkNTRcdTJkNGYiLHk6Ilx1MmQzMFx1MmQ1OVx1MmQzM1x1MmQzMFx1MmQ1OSIseXk6IiVkIFx1MmQ0OVx1MmQ1OVx1MmQzM1x1MmQzMFx1MmQ1OVx1MmQ0ZiJ9LHdlZWs6e2Rvdzo2LGRveToxMn19KX0oYig5NzU4NikpfSwxODIxMTooY2UsWCxi''@;'; put 'put ''KT0+e3ZhciBJPWIoMjcwNTQpLkJ1ZmZlcixfPWIoMzQ3MjUpO2NlLmV4cG9ydHM9ZnVuY3Rpb24gcChWLHcsUCxGKXtpZihJLmlzQnVmZmVyKFYpfHwoVj1JLmZyb20oViwiYmluYXJ5IikpLHcmJihJLmlzQnVmZmVyKHcpfHwodz1JLmZyb20odywiYmluYXJ5IikpLDghPT13Lmxlbmd0aCkp''@;'; put 'put ''dGhyb3cgbmV3IFJhbmdlRXJyb3IoInNhbHQgc2hvdWxkIGJlIEJ1ZmZlciB3aXRoIDggYnl0ZSBsZW5ndGgiKTtmb3IodmFyIFI9UC84LHo9SS5hbGxvYyhSKSxOPUkuYWxsb2MoRnx8MCksTz1JLmFsbG9jKDApO1I+MHx8Rj4wOyl7dmFyIEs9bmV3IF87Sy51cGRhdGUoTyksSy51cGRhdGUo''@;'; put 'put ''ViksdyYmSy51cGRhdGUodyksTz1LLmRpZ2VzdCgpO3ZhciBaPTA7aWYoUj4wKXt2YXIgWT16Lmxlbmd0aC1SO1o9TWF0aC5taW4oUixPLmxlbmd0aCksTy5jb3B5KHosWSwwLFopLFItPVp9aWYoWjxPLmxlbmd0aCYmRj4wKXt2YXIgVz1OLmxlbmd0aC1GLHE9TWF0aC5taW4oRixPLmxlbmd0''@;'; put 'put ''aC1aKTtPLmNvcHkoTixXLFosWitxKSxGLT1xfX1yZXR1cm4gTy5maWxsKDApLHtrZXk6eixpdjpOfX19LDE4MzQyOihjZSxYLGIpPT57Y2UuZXhwb3J0cz1iKDQ0MzU2KS5FdmVudEVtaXR0ZXJ9LDE4MzUxOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRl''@;'; put 'put ''ZmluZUxvY2FsZSgiemgtaGsiLHttb250aHM6Ilx1NGUwMFx1NjcwOF9cdTRlOGNcdTY3MDhfXHU0ZTA5XHU2NzA4X1x1NTZkYlx1NjcwOF9cdTRlOTRcdTY3MDhfXHU1MTZkXHU2NzA4X1x1NGUwM1x1NjcwOF9cdTUxNmJcdTY3MDhfXHU0ZTVkXHU2NzA4X1x1NTM0MVx1NjcwOF9cdTUzNDFc''@;'; put 'put ''dTRlMDBcdTY3MDhfXHU1MzQxXHU0ZThjXHU2NzA4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiIxXHU2NzA4XzJcdTY3MDhfM1x1NjcwOF80XHU2NzA4XzVcdTY3MDhfNlx1NjcwOF83XHU2NzA4XzhcdTY3MDhfOVx1NjcwOF8xMFx1NjcwOF8xMVx1NjcwOF8xMlx1NjcwOCIuc3BsaXQoIl8i''@;'; put 'put ''KSx3ZWVrZGF5czoiXHU2NjFmXHU2NzFmXHU2NWU1X1x1NjYxZlx1NjcxZlx1NGUwMF9cdTY2MWZcdTY3MWZcdTRlOGNfXHU2NjFmXHU2NzFmXHU0ZTA5X1x1NjYxZlx1NjcxZlx1NTZkYl9cdTY2MWZcdTY3MWZcdTRlOTRfXHU2NjFmXHU2NzFmXHU1MTZkIi5zcGxpdCgiXyIpLHdlZWtkYXlz''@;'; put 'put ''U2hvcnQ6Ilx1OTAzMVx1NjVlNV9cdTkwMzFcdTRlMDBfXHU5MDMxXHU0ZThjX1x1OTAzMVx1NGUwOV9cdTkwMzFcdTU2ZGJfXHU5MDMxXHU0ZTk0X1x1OTAzMVx1NTE2ZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHU2NWU1X1x1NGUwMF9cdTRlOGNfXHU0ZTA5X1x1NTZkYl9cdTRlOTRf''@;'; put 'put ''XHU1MTZkIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVkvTU0vREQiLExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixMTExMOiJZWVlZXHU1ZTc0TVx1Njcw''@;'; put 'put ''OERcdTY1ZTVkZGRkIEhIOm1tIixsOiJZWVlZL00vRCIsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0iLGxsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNWRkZGQgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTUxY2Nc''@;'; put 'put ''dTY2Njh8XHU2NWU5XHU0ZTBhfFx1NGUwYVx1NTM0OHxcdTRlMmRcdTUzNDh8XHU0ZTBiXHU1MzQ4fFx1NjY1YVx1NGUwYS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHAsVil7cmV0dXJuIDEyPT09cCYmKHA9MCksIlx1NTFjY1x1NjY2OCI9PT1WfHwiXHU2NWU5XHU0ZTBhIj09PVZ8fCJcdTRl''@;'; put 'put ''MGFcdTUzNDgiPT09Vj9wOiJcdTRlMmRcdTUzNDgiPT09Vj9wPj0xMT9wOnArMTI6Ilx1NGUwYlx1NTM0OCI9PT1WfHwiXHU2NjVhXHU0ZTBhIj09PVY/cCsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKHAsVix3KXt2YXIgUD0xMDAqcCtWO3JldHVybiBQPDYwMD8iXHU1MWNjXHU2NjY4''@;'; put 'put ''IjpQPDkwMD8iXHU2NWU5XHU0ZTBhIjpQPDEyMDA/Ilx1NGUwYVx1NTM0OCI6MTIwMD09PVA/Ilx1NGUyZFx1NTM0OCI6UDwxODAwPyJcdTRlMGJcdTUzNDgiOiJcdTY2NWFcdTRlMGEifSxjYWxlbmRhcjp7c2FtZURheToiW1x1NGVjYVx1NTkyOV1MVCIsbmV4dERheToiW1x1NjYwZVx1NTky''@;'; put 'put ''OV1MVCIsbmV4dFdlZWs6IltcdTRlMGJdZGRkZExUIixsYXN0RGF5OiJbXHU2NjI4XHU1OTI5XUxUIixsYXN0V2VlazoiW1x1NGUwYV1kZGRkTFQiLHNhbWVFbHNlOiJMIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcdTY1ZTV8XHU2NzA4fFx1OTAzMSkvLG9yZGluYWw6ZnVu''@;'; put 'put ''Y3Rpb24ocCxWKXtzd2l0Y2goVil7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gcCsiXHU2NWU1IjtjYXNlIk0iOnJldHVybiBwKyJcdTY3MDgiO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gcCsiXHU5MDMxIjtkZWZhdWx0OnJldHVybiBwfX0scmVsYXRpdmVUaW1lOntmdXR1cmU6''@;'; put 'put ''IiVzXHU1ZjhjIixwYXN0OiIlc1x1NTI0ZCIsczoiXHU1ZTdlXHU3OWQyIixzczoiJWQgXHU3OWQyIixtOiIxIFx1NTIwNlx1OTQxOCIsbW06IiVkIFx1NTIwNlx1OTQxOCIsaDoiMSBcdTVjMGZcdTY2NDIiLGhoOiIlZCBcdTVjMGZcdTY2NDIiLGQ6IjEgXHU1OTI5IixkZDoiJWQgXHU1OTI5''@;'; put 'put ''IixNOiIxIFx1NTAwYlx1NjcwOCIsTU06IiVkIFx1NTAwYlx1NjcwOCIseToiMSBcdTVlNzQiLHl5OiIlZCBcdTVlNzQifX0pfShiKDk3NTg2KSl9LDE4NTU2OmNlPT57InVzZSBzdHJpY3QiO3ZhciBYPU1hdGguY2VpbCxiPU1hdGguZmxvb3I7Y2UuZXhwb3J0cz1NYXRoLnRydW5jfHxmdW5j''@;'; put 'put ''dGlvbihfKXt2YXIgcD0rXztyZXR1cm4ocD4wP2I6WCkocCl9fSwxODgyMzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPXA7dmFyIEk9YigyOTA5KSxfPU9iamVjdC5jcmVhdGUoYigyNzYzNykpO2Z1bmN0aW9uIHAoVil7aWYoISh0aGlzIGluc3RhbmNlb2YgcCkpcmV0dXJu''@;'; put 'put ''IG5ldyBwKFYpO0kuY2FsbCh0aGlzLFYpfV8uaW5oZXJpdHM9Yig3MTk5MyksXy5pbmhlcml0cyhwLEkpLHAucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oVix3LFApe1AobnVsbCxWKX19LDE5MTUwOmNlPT57InVzZSBzdHJpY3QiO3ZhciBYPSJvYmplY3QiPT10eXBlb2YgZG9jdW1l''@;'; put 'put ''bnQmJmRvY3VtZW50LmFsbDtjZS5leHBvcnRzPXR5cGVvZiBYPiJ1IiYmdm9pZCAwIT09WD9mdW5jdGlvbihiKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYnx8Yj09PVh9OmZ1bmN0aW9uKGIpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBifX0sMTkyNTg6Y2U9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''Y2UuZXhwb3J0cz17fX0sMTkzMDc6KGNlLFgsYik9Pnt2YXIgST1iKDEyMzc1KSxfPWIoMjcwNTQpLkJ1ZmZlcixwPWIoMzI0NyksVj1iKDcxOTkzKSx3PWIoODU5MTcpLFA9YigxMzU0NiksRj1iKDk1NzI1KTtmdW5jdGlvbiBOKE8sSyxaLFkpe3AuY2FsbCh0aGlzKTt2YXIgVz1fLmFsbG9j''@;'; put 'put ''KDQsMCk7dGhpcy5fY2lwaGVyPW5ldyBJLkFFUyhLKTt2YXIgcT10aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKFcpO3RoaXMuX2doYXNoPW5ldyB3KHEpLFo9ZnVuY3Rpb24geihPLEssWil7aWYoMTI9PT1LLmxlbmd0aClyZXR1cm4gTy5fZmluSUQ9Xy5jb25jYXQoW0ssXy5mcm9tKFswLDAs''@;'; put 'put ''MCwxXSldKSxfLmNvbmNhdChbSyxfLmZyb20oWzAsMCwwLDJdKV0pO3ZhciBZPW5ldyB3KFopLFc9Sy5sZW5ndGgscT1XJTE2O1kudXBkYXRlKEspLHEmJlkudXBkYXRlKF8uYWxsb2MocT0xNi1xLDApKSxZLnVwZGF0ZShfLmFsbG9jKDgsMCkpO3ZhciBlZT04KlcsSj1fLmFsbG9jKDgpO0ou''@;'; put 'put ''d3JpdGVVSW50QkUoZWUsMCw4KSxZLnVwZGF0ZShKKSxPLl9maW5JRD1ZLnN0YXRlO3ZhciByZT1fLmZyb20oTy5fZmluSUQpO3JldHVybiBGKHJlKSxyZX0odGhpcyxaLHEpLHRoaXMuX3ByZXY9Xy5mcm9tKFopLHRoaXMuX2NhY2hlPV8uYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2FjaGU9''@;'; put 'put ''Xy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9kZWNyeXB0PVksdGhpcy5fYWxlbj0wLHRoaXMuX2xlbj0wLHRoaXMuX21vZGU9Tyx0aGlzLl9hdXRoVGFnPW51bGwsdGhpcy5fY2FsbGVkPSExfVYoTixwKSxOLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKE8pe2lmKCF0aGlzLl9jYWxsZWQmJnRo''@;'; put 'put ''aXMuX2FsZW4pe3ZhciBLPTE2LXRoaXMuX2FsZW4lMTY7SzwxNiYmKEs9Xy5hbGxvYyhLLDApLHRoaXMuX2doYXNoLnVwZGF0ZShLKSl9dGhpcy5fY2FsbGVkPSEwO3ZhciBaPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLE8pO3JldHVybiB0aGlzLl9naGFzaC51cGRhdGUodGhpcy5fZGVjcnlw''@;'; put 'put ''dD9POlopLHRoaXMuX2xlbis9Ty5sZW5ndGgsWn0sTi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7aWYodGhpcy5fZGVjcnlwdCYmIXRoaXMuX2F1dGhUYWcpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGEiKTt2YXIg''@;'; put 'put ''Tz1QKHRoaXMuX2doYXNoLmZpbmFsKDgqdGhpcy5fYWxlbiw4KnRoaXMuX2xlbiksdGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayh0aGlzLl9maW5JRCkpO2lmKHRoaXMuX2RlY3J5cHQmJmZ1bmN0aW9uIFIoTyxLKXt2YXIgWj0wO08ubGVuZ3RoIT09Sy5sZW5ndGgmJlorKztmb3IodmFyIFk9''@;'; put 'put ''TWF0aC5taW4oTy5sZW5ndGgsSy5sZW5ndGgpLFc9MDtXPFk7KytXKVorPU9bV11eS1tXXTtyZXR1cm4gWn0oTyx0aGlzLl9hdXRoVGFnKSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YSIpO3RoaXMuX2F1dGhUYWc9Tyx0''@;'; put 'put ''aGlzLl9jaXBoZXIuc2NydWIoKX0sTi5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe2lmKHRoaXMuX2RlY3J5cHR8fCFfLmlzQnVmZmVyKHRoaXMuX2F1dGhUYWcpKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUi''@;'; put 'put ''KTtyZXR1cm4gdGhpcy5fYXV0aFRhZ30sTi5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbihLKXtpZighdGhpcy5fZGVjcnlwdCl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fYXV0aFRhZz1LfSxOLnBy''@;'; put 'put ''b3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oSyl7aWYodGhpcy5fY2FsbGVkKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBzZXQgQUFEIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fZ2hhc2gudXBkYXRlKEspLHRoaXMuX2FsZW4rPUsubGVuZ3RofSxjZS5leHBvcnRzPU59LDE5''@;'; put 'put ''NjA5OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoOTY1Nik7Y2UuZXhwb3J0cz1pZTt2YXIgcCxfPWIoMjAwNTMpO2llLlJlYWRhYmxlU3RhdGU9cmUsYig0NDM1Nik7dmFyIHc9ZnVuY3Rpb24oeGUseWUpe3JldHVybiB4ZS5saXN0ZW5lcnMoeWUpLmxlbmd0aH0sUD1iKDE4MzQy''@;'; put 'put ''KSxGPWIoMjY1NSkuQnVmZmVyLFI9KHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUiP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxPPU9iamVjdC5jcmVhdGUoYigyNzYzNykpO08uaW5oZXJpdHM9Yig3MTk5''@;'; put 'put ''Myk7dmFyIEs9Yig3OTgzOCksWj12b2lkIDA7Wj1LJiZLLmRlYnVnbG9nP0suZGVidWdsb2coInN0cmVhbSIpOmZ1bmN0aW9uKCl7fTt2YXIgcSxZPWIoMjc4MDkpLFc9YigyMTUwOSk7Ty5pbmhlcml0cyhpZSxQKTt2YXIgZWU9WyJlcnJvciIsImNsb3NlIiwiZGVzdHJveSIsInBhdXNlIiwi''@;'; put 'put ''cmVzdW1lIl07ZnVuY3Rpb24gcmUoeGUseWUpe3ZhciBLZT15ZSBpbnN0YW5jZW9mKHA9cHx8Yig3NDA3NSkpO3RoaXMub2JqZWN0TW9kZT0hISh4ZT14ZXx8e30pLm9iamVjdE1vZGUsS2UmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIXhlLnJlYWRhYmxlT2JqZWN0TW9k''@;'; put 'put ''ZSk7dmFyIGplPXhlLmhpZ2hXYXRlck1hcmssa2U9eGUucmVhZGFibGVIaWdoV2F0ZXJNYXJrO3RoaXMuaGlnaFdhdGVyTWFyaz1qZXx8MD09PWplP2plOktlJiYoa2V8fDA9PT1rZSk/a2U6dGhpcy5vYmplY3RNb2RlPzE2OjE2Mzg0LHRoaXMuaGlnaFdhdGVyTWFyaz1NYXRoLmZsb29yKHRo''@;'; put 'put ''aXMuaGlnaFdhdGVyTWFyayksdGhpcy5idWZmZXI9bmV3IFksdGhpcy5sZW5ndGg9MCx0aGlzLnBpcGVzPW51bGwsdGhpcy5waXBlc0NvdW50PTAsdGhpcy5mbG93aW5nPW51bGwsdGhpcy5lbmRlZD0hMSx0aGlzLmVuZEVtaXR0ZWQ9ITEsdGhpcy5yZWFkaW5nPSExLHRoaXMuc3luYz0hMCx0''@;'; put 'put ''aGlzLm5lZWRSZWFkYWJsZT0hMSx0aGlzLmVtaXR0ZWRSZWFkYWJsZT0hMSx0aGlzLnJlYWRhYmxlTGlzdGVuaW5nPSExLHRoaXMucmVzdW1lU2NoZWR1bGVkPSExLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVmYXVsdEVuY29kaW5nPXhlLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMu''@;'; put 'put ''YXdhaXREcmFpbj0wLHRoaXMucmVhZGluZ01vcmU9ITEsdGhpcy5kZWNvZGVyPW51bGwsdGhpcy5lbmNvZGluZz1udWxsLHhlLmVuY29kaW5nJiYocXx8KHE9Yig3ODQ1NCkuSSksdGhpcy5kZWNvZGVyPW5ldyBxKHhlLmVuY29kaW5nKSx0aGlzLmVuY29kaW5nPXhlLmVuY29kaW5nKX1mdW5j''@;'; put 'put ''dGlvbiBpZSh4ZSl7aWYocD1wfHxiKDc0MDc1KSwhKHRoaXMgaW5zdGFuY2VvZiBpZSkpcmV0dXJuIG5ldyBpZSh4ZSk7dGhpcy5fcmVhZGFibGVTdGF0ZT1uZXcgcmUoeGUsdGhpcyksdGhpcy5yZWFkYWJsZT0hMCx4ZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiB4ZS5yZWFkJiYodGhpcy5fcmVh''@;'; put 'put ''ZD14ZS5yZWFkKSwiZnVuY3Rpb24iPT10eXBlb2YgeGUuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9eGUuZGVzdHJveSkpLFAuY2FsbCh0aGlzKX1mdW5jdGlvbiB1ZSh4ZSx5ZSxLZSxqZSxrZSl7dmFyIExlLEhlPXhlLl9yZWFkYWJsZVN0YXRlO3JldHVybiBudWxsPT09eWU/KEhlLnJlYWRp''@;'; put 'put ''bmc9ITEsZnVuY3Rpb24gZyh4ZSx5ZSl7aWYoIXllLmVuZGVkKXtpZih5ZS5kZWNvZGVyKXt2YXIgS2U9eWUuZGVjb2Rlci5lbmQoKTtLZSYmS2UubGVuZ3RoJiYoeWUuYnVmZmVyLnB1c2goS2UpLHllLmxlbmd0aCs9eWUub2JqZWN0TW9kZT8xOktlLmxlbmd0aCl9eWUuZW5kZWQ9ITAseSh4''@;'; put 'put ''ZSl9fSh4ZSxIZSkpOihrZXx8KExlPWZ1bmN0aW9uIF9lKHhlLHllKXt2YXIgS2U7cmV0dXJuIWZ1bmN0aW9uIE4oeGUpe3JldHVybiBGLmlzQnVmZmVyKHhlKXx8eGUgaW5zdGFuY2VvZiBSfSh5ZSkmJiJzdHJpbmciIT10eXBlb2YgeWUmJnZvaWQgMCE9PXllJiYheGUub2JqZWN0TW9kZSYm''@;'; put 'put ''KEtlPW5ldyBUeXBlRXJyb3IoIkludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsiKSksS2V9KEhlLHllKSksTGU/eGUuZW1pdCgiZXJyb3IiLExlKTpIZS5vYmplY3RNb2RlfHx5ZSYmeWUubGVuZ3RoPjA/KCJzdHJpbmciIT10eXBlb2YgeWUmJiFIZS5vYmplY3RNb2RlJiZPYmplY3Qu''@;'; put 'put ''Z2V0UHJvdG90eXBlT2YoeWUpIT09Ri5wcm90b3R5cGUmJih5ZT1mdW5jdGlvbiB6KHhlKXtyZXR1cm4gRi5mcm9tKHhlKX0oeWUpKSxqZT9IZS5lbmRFbWl0dGVkP3hlLmVtaXQoImVycm9yIixuZXcgRXJyb3IoInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50IikpOmdlKHhlLEhl''@;'; put 'put ''LHllLCEwKTpIZS5lbmRlZD94ZS5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRiIpKTooSGUucmVhZGluZz0hMSxIZS5kZWNvZGVyJiYhS2U/KHllPUhlLmRlY29kZXIud3JpdGUoeWUpLEhlLm9iamVjdE1vZGV8fDAhPT15ZS5sZW5ndGg/Z2UoeGUsSGUs''@;'; put 'put ''eWUsITEpOkMoeGUsSGUpKTpnZSh4ZSxIZSx5ZSwhMSkpKTpqZXx8KEhlLnJlYWRpbmc9ITEpKSxmdW5jdGlvbiBUZSh4ZSl7cmV0dXJuIXhlLmVuZGVkJiYoeGUubmVlZFJlYWRhYmxlfHx4ZS5sZW5ndGg8eGUuaGlnaFdhdGVyTWFya3x8MD09PXhlLmxlbmd0aCl9KEhlKX1mdW5jdGlvbiBn''@;'; put 'put ''ZSh4ZSx5ZSxLZSxqZSl7eWUuZmxvd2luZyYmMD09PXllLmxlbmd0aCYmIXllLnN5bmM/KHhlLmVtaXQoImRhdGEiLEtlKSx4ZS5yZWFkKDApKTooeWUubGVuZ3RoKz15ZS5vYmplY3RNb2RlPzE6S2UubGVuZ3RoLGplP3llLmJ1ZmZlci51bnNoaWZ0KEtlKTp5ZS5idWZmZXIucHVzaChLZSks''@;'; put 'put ''eWUubmVlZFJlYWRhYmxlJiZ5KHhlKSksQyh4ZSx5ZSl9ZnVuY3Rpb24gQih4ZSx5ZSl7cmV0dXJuIHhlPD0wfHwwPT09eWUubGVuZ3RoJiZ5ZS5lbmRlZD8wOnllLm9iamVjdE1vZGU/MTp4ZSE9eGU/eWUuZmxvd2luZyYmeWUubGVuZ3RoP3llLmJ1ZmZlci5oZWFkLmRhdGEubGVuZ3RoOnll''@;'; put 'put ''Lmxlbmd0aDooeGU+eWUuaGlnaFdhdGVyTWFyayYmKHllLmhpZ2hXYXRlck1hcms9ZnVuY3Rpb24gWmUoeGUpe3JldHVybiB4ZT49ODM4ODYwOD94ZT04Mzg4NjA4Oih4ZS0tLHhlfD14ZT4+PjEseGV8PXhlPj4+Mix4ZXw9eGU+Pj40LHhlfD14ZT4+PjgseGV8PXhlPj4+MTYseGUrKykseGV9''@;'; put 'put ''KHhlKSkseGU8PXllLmxlbmd0aD94ZTp5ZS5lbmRlZD95ZS5sZW5ndGg6KHllLm5lZWRSZWFkYWJsZT0hMCwwKSl9ZnVuY3Rpb24geSh4ZSl7dmFyIHllPXhlLl9yZWFkYWJsZVN0YXRlO3llLm5lZWRSZWFkYWJsZT0hMSx5ZS5lbWl0dGVkUmVhZGFibGV8fChaKCJlbWl0UmVhZGFibGUiLHll''@;'; put 'put ''LmZsb3dpbmcpLHllLmVtaXR0ZWRSZWFkYWJsZT0hMCx5ZS5zeW5jP0kubmV4dFRpY2soeCx4ZSk6eCh4ZSkpfWZ1bmN0aW9uIHgoeGUpe1ooImVtaXQgcmVhZGFibGUiKSx4ZS5lbWl0KCJyZWFkYWJsZSIpLEEoeGUpfWZ1bmN0aW9uIEMoeGUseWUpe3llLnJlYWRpbmdNb3JlfHwoeWUucmVh''@;'; put 'put ''ZGluZ01vcmU9ITAsSS5uZXh0VGljayhULHhlLHllKSl9ZnVuY3Rpb24gVCh4ZSx5ZSl7Zm9yKHZhciBLZT15ZS5sZW5ndGg7IXllLnJlYWRpbmcmJiF5ZS5mbG93aW5nJiYheWUuZW5kZWQmJnllLmxlbmd0aDx5ZS5oaWdoV2F0ZXJNYXJrJiYoWigibWF5YmVSZWFkTW9yZSByZWFkIDAiKSx4''@;'; put 'put ''ZS5yZWFkKDApLEtlIT09eWUubGVuZ3RoKTspS2U9eWUubGVuZ3RoO3llLnJlYWRpbmdNb3JlPSExfWZ1bmN0aW9uIGooeGUpe1ooInJlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCIpLHhlLnJlYWQoMCl9ZnVuY3Rpb24gbSh4ZSx5ZSl7eWUucmVhZGluZ3x8KFooInJlc3VtZSByZWFkIDAiKSx4''@;'; put 'put ''ZS5yZWFkKDApKSx5ZS5yZXN1bWVTY2hlZHVsZWQ9ITEseWUuYXdhaXREcmFpbj0wLHhlLmVtaXQoInJlc3VtZSIpLEEoeGUpLHllLmZsb3dpbmcmJiF5ZS5yZWFkaW5nJiZ4ZS5yZWFkKDApfWZ1bmN0aW9uIEEoeGUpe3ZhciB5ZT14ZS5fcmVhZGFibGVTdGF0ZTtmb3IoWigiZmxvdyIseWUu''@;'; put 'put ''Zmxvd2luZyk7eWUuZmxvd2luZyYmbnVsbCE9PXhlLnJlYWQoKTspO31mdW5jdGlvbiBhZSh4ZSx5ZSl7cmV0dXJuIDA9PT15ZS5sZW5ndGg/bnVsbDooeWUub2JqZWN0TW9kZT9LZT15ZS5idWZmZXIuc2hpZnQoKToheGV8fHhlPj15ZS5sZW5ndGg/KEtlPXllLmRlY29kZXI/eWUuYnVmZmVy''@;'; put 'put ''LmpvaW4oIiIpOjE9PT15ZS5idWZmZXIubGVuZ3RoP3llLmJ1ZmZlci5oZWFkLmRhdGE6eWUuYnVmZmVyLmNvbmNhdCh5ZS5sZW5ndGgpLHllLmJ1ZmZlci5jbGVhcigpKTpLZT1mdW5jdGlvbiBuZSh4ZSx5ZSxLZSl7dmFyIGplO3JldHVybiB4ZTx5ZS5oZWFkLmRhdGEubGVuZ3RoPyhqZT15''@;'; put 'put ''ZS5oZWFkLmRhdGEuc2xpY2UoMCx4ZSkseWUuaGVhZC5kYXRhPXllLmhlYWQuZGF0YS5zbGljZSh4ZSkpOmplPXhlPT09eWUuaGVhZC5kYXRhLmxlbmd0aD95ZS5zaGlmdCgpOktlP2Z1bmN0aW9uIHNlKHhlLHllKXt2YXIgS2U9eWUuaGVhZCxqZT0xLGtlPUtlLmRhdGE7Zm9yKHhlLT1rZS5s''@;'; put 'put ''ZW5ndGg7S2U9S2UubmV4dDspe3ZhciBIZT1LZS5kYXRhLExlPXhlPkhlLmxlbmd0aD9IZS5sZW5ndGg6eGU7aWYoa2UrPUxlPT09SGUubGVuZ3RoP0hlOkhlLnNsaWNlKDAseGUpLDA9PSh4ZS09TGUpKXtMZT09PUhlLmxlbmd0aD8oKytqZSx5ZS5oZWFkPUtlLm5leHQ/S2UubmV4dDp5ZS50''@;'; put 'put ''YWlsPW51bGwpOih5ZS5oZWFkPUtlLEtlLmRhdGE9SGUuc2xpY2UoTGUpKTticmVha30rK2plfXJldHVybiB5ZS5sZW5ndGgtPWplLGtlfSh4ZSx5ZSk6ZnVuY3Rpb24gQ2UoeGUseWUpe3ZhciBLZT1GLmFsbG9jVW5zYWZlKHhlKSxqZT15ZS5oZWFkLGtlPTE7Zm9yKGplLmRhdGEuY29weShL''@;'; put 'put ''ZSkseGUtPWplLmRhdGEubGVuZ3RoO2plPWplLm5leHQ7KXt2YXIgSGU9amUuZGF0YSxMZT14ZT5IZS5sZW5ndGg/SGUubGVuZ3RoOnhlO2lmKEhlLmNvcHkoS2UsS2UubGVuZ3RoLXhlLDAsTGUpLDA9PSh4ZS09TGUpKXtMZT09PUhlLmxlbmd0aD8oKytrZSx5ZS5oZWFkPWplLm5leHQ/amUu''@;'; put 'put ''bmV4dDp5ZS50YWlsPW51bGwpOih5ZS5oZWFkPWplLGplLmRhdGE9SGUuc2xpY2UoTGUpKTticmVha30rK2tlfXJldHVybiB5ZS5sZW5ndGgtPWtlLEtlfSh4ZSx5ZSksamV9KHhlLHllLmJ1ZmZlcix5ZS5kZWNvZGVyKSxLZSk7dmFyIEtlfWZ1bmN0aW9uIFVlKHhlKXt2YXIgeWU9eGUuX3Jl''@;'; put 'put ''YWRhYmxlU3RhdGU7aWYoeWUubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCciZW5kUmVhZGFibGUoKSIgY2FsbGVkIG9uIG5vbi1lbXB0eSBzdHJlYW0nKTt5ZS5lbmRFbWl0dGVkfHwoeWUuZW5kZWQ9ITAsSS5uZXh0VGljayhKZSx5ZSx4ZSkpfWZ1bmN0aW9uIEplKHhlLHllKXsheGUuZW5k''@;'; put 'put ''RW1pdHRlZCYmMD09PXhlLmxlbmd0aCYmKHhlLmVuZEVtaXR0ZWQ9ITAseWUucmVhZGFibGU9ITEseWUuZW1pdCgiZW5kIikpfWZ1bmN0aW9uIGl0KHhlLHllKXtmb3IodmFyIEtlPTAsamU9eGUubGVuZ3RoO0tlPGplO0tlKyspaWYoeGVbS2VdPT09eWUpcmV0dXJuIEtlO3JldHVybi0xfU9i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShpZS5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKHhlKXt0aGlzLl9yZWFkYWJsZVN0YXRl''@;'; put 'put ''JiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9eGUpfX0pLGllLnByb3RvdHlwZS5kZXN0cm95PVcuZGVzdHJveSxpZS5wcm90b3R5cGUuX3VuZGVzdHJveT1XLnVuZGVzdHJveSxpZS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oeGUseWUpe3RoaXMucHVzaChudWxsKSx5ZSh4''@;'; put 'put ''ZSl9LGllLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKHhlLHllKXt2YXIgamUsS2U9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gS2Uub2JqZWN0TW9kZT9qZT0hMDoic3RyaW5nIj09dHlwZW9mIHhlJiYoKHllPXllfHxLZS5kZWZhdWx0RW5jb2RpbmcpIT09S2UuZW5jb2RpbmcmJih4ZT1G''@;'; put 'put ''LmZyb20oeGUseWUpLHllPSIiKSxqZT0hMCksdWUodGhpcyx4ZSx5ZSwhMSxqZSl9LGllLnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKHhlKXtyZXR1cm4gdWUodGhpcyx4ZSxudWxsLCEwLCExKX0saWUucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7cmV0dXJuITE9PT10aGlzLl9y''@;'; put 'put ''ZWFkYWJsZVN0YXRlLmZsb3dpbmd9LGllLnByb3RvdHlwZS5zZXRFbmNvZGluZz1mdW5jdGlvbih4ZSl7cmV0dXJuIHF8fChxPWIoNzg0NTQpLkkpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlcj1uZXcgcSh4ZSksdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZz14ZSx0aGlzfSxpZS5w''@;'; put 'put ''cm90b3R5cGUucmVhZD1mdW5jdGlvbih4ZSl7WigicmVhZCIseGUpLHhlPXBhcnNlSW50KHhlLDEwKTt2YXIgeWU9dGhpcy5fcmVhZGFibGVTdGF0ZSxLZT14ZTtpZigwIT09eGUmJih5ZS5lbWl0dGVkUmVhZGFibGU9ITEpLDA9PT14ZSYmeWUubmVlZFJlYWRhYmxlJiYoeWUubGVuZ3RoPj15''@;'; put 'put ''ZS5oaWdoV2F0ZXJNYXJrfHx5ZS5lbmRlZCkpcmV0dXJuIFooInJlYWQ6IGVtaXRSZWFkYWJsZSIseWUubGVuZ3RoLHllLmVuZGVkKSwwPT09eWUubGVuZ3RoJiZ5ZS5lbmRlZD9VZSh0aGlzKTp5KHRoaXMpLG51bGw7aWYoMD09PSh4ZT1CKHhlLHllKSkmJnllLmVuZGVkKXJldHVybiAwPT09''@;'; put 'put ''eWUubGVuZ3RoJiZVZSh0aGlzKSxudWxsO3ZhciBrZSxqZT15ZS5uZWVkUmVhZGFibGU7cmV0dXJuIFooIm5lZWQgcmVhZGFibGUiLGplKSwoMD09PXllLmxlbmd0aHx8eWUubGVuZ3RoLXhlPHllLmhpZ2hXYXRlck1hcmspJiZaKCJsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyayIsamU9ITAp''@;'; put 'put ''LHllLmVuZGVkfHx5ZS5yZWFkaW5nP1ooInJlYWRpbmcgb3IgZW5kZWQiLGplPSExKTpqZSYmKFooImRvIHJlYWQiKSx5ZS5yZWFkaW5nPSEwLHllLnN5bmM9ITAsMD09PXllLmxlbmd0aCYmKHllLm5lZWRSZWFkYWJsZT0hMCksdGhpcy5fcmVhZCh5ZS5oaWdoV2F0ZXJNYXJrKSx5ZS5zeW5j''@;'; put 'put ''PSExLHllLnJlYWRpbmd8fCh4ZT1CKEtlLHllKSkpLG51bGw9PT0oa2U9eGU+MD9hZSh4ZSx5ZSk6bnVsbCk/KHllLm5lZWRSZWFkYWJsZT0hMCx4ZT0wKTp5ZS5sZW5ndGgtPXhlLDA9PT15ZS5sZW5ndGgmJih5ZS5lbmRlZHx8KHllLm5lZWRSZWFkYWJsZT0hMCksS2UhPT14ZSYmeWUuZW5k''@;'; put 'put ''ZWQmJlVlKHRoaXMpKSxudWxsIT09a2UmJnRoaXMuZW1pdCgiZGF0YSIsa2UpLGtlfSxpZS5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oeGUpe3RoaXMuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigiX3JlYWQoKSBpcyBub3QgaW1wbGVtZW50ZWQiKSl9LGllLnByb3RvdHlwZS5waXBlPWZ1bmN0''@;'; put 'put ''aW9uKHhlLHllKXt2YXIgS2U9dGhpcyxqZT10aGlzLl9yZWFkYWJsZVN0YXRlO3N3aXRjaChqZS5waXBlc0NvdW50KXtjYXNlIDA6amUucGlwZXM9eGU7YnJlYWs7Y2FzZSAxOmplLnBpcGVzPVtqZS5waXBlcyx4ZV07YnJlYWs7ZGVmYXVsdDpqZS5waXBlcy5wdXNoKHhlKX1qZS5waXBlc0Nv''@;'; put 'put ''dW50Kz0xLFooInBpcGUgY291bnQ9JWQgb3B0cz0laiIsamUucGlwZXNDb3VudCx5ZSk7dmFyIEhlPXllJiYhMT09PXllLmVuZHx8eGU9PT1wcm9jZXNzLnN0ZG91dHx8eGU9PT1wcm9jZXNzLnN0ZGVycj9TdDpSZTtmdW5jdGlvbiBSZSgpe1ooIm9uZW5kIikseGUuZW5kKCl9amUuZW5kRW1p''@;'; put 'put ''dHRlZD9JLm5leHRUaWNrKEhlKTpLZS5vbmNlKCJlbmQiLEhlKSx4ZS5vbigidW5waXBlIixmdW5jdGlvbiBMZShlbix1dCl7Wigib251bnBpcGUiKSxlbj09PUtlJiZ1dCYmITE9PT11dC5oYXNVbnBpcGVkJiYodXQuaGFzVW5waXBlZD0hMCxmdW5jdGlvbiBEZSgpe1ooImNsZWFudXAiKSx4''@;'; put 'put ''ZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLHNuKSx4ZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIix2dCkseGUucmVtb3ZlTGlzdGVuZXIoImRyYWluIixWZSkseGUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixRZSkseGUucmVtb3ZlTGlzdGVuZXIoInVucGlwZSIsTGUpLEtlLnJlbW92ZUxpc3Rl''@;'; put 'put ''bmVyKCJlbmQiLFJlKSxLZS5yZW1vdmVMaXN0ZW5lcigiZW5kIixTdCksS2UucmVtb3ZlTGlzdGVuZXIoImRhdGEiLHJ0KSxBZT0hMCxqZS5hd2FpdERyYWluJiYoIXhlLl93cml0YWJsZVN0YXRlfHx4ZS5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW4pJiZWZSgpfSgpKX0pO3ZhciBWZT1mdW5j''@;'; put 'put ''dGlvbiBIKHhlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgeWU9eGUuX3JlYWRhYmxlU3RhdGU7WigicGlwZU9uRHJhaW4iLHllLmF3YWl0RHJhaW4pLHllLmF3YWl0RHJhaW4mJnllLmF3YWl0RHJhaW4tLSwwPT09eWUuYXdhaXREcmFpbiYmdyh4ZSwiZGF0YSIpJiYoeWUuZmxvd2luZz0hMCxB''@;'; put 'put ''KHhlKSl9fShLZSk7eGUub24oImRyYWluIixWZSk7dmFyIEFlPSExLF90PSExO2Z1bmN0aW9uIHJ0KGVuKXtaKCJvbmRhdGEiKSxfdD0hMSwhMT09PXhlLndyaXRlKGVuKSYmIV90JiYoKDE9PT1qZS5waXBlc0NvdW50JiZqZS5waXBlcz09PXhlfHxqZS5waXBlc0NvdW50PjEmJi0xIT09aXQo''@;'; put 'put ''amUucGlwZXMseGUpKSYmIUFlJiYoWigiZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlIixqZS5hd2FpdERyYWluKSxqZS5hd2FpdERyYWluKyssX3Q9ITApLEtlLnBhdXNlKCkpfWZ1bmN0aW9uIFFlKGVuKXtaKCJvbmVycm9yIixlbiksU3QoKSx4ZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3Ii''@;'; put 'put ''LFFlKSwwPT09dyh4ZSwiZXJyb3IiKSYmeGUuZW1pdCgiZXJyb3IiLGVuKX1mdW5jdGlvbiBzbigpe3hlLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLHZ0KSxTdCgpfWZ1bmN0aW9uIHZ0KCl7Wigib25maW5pc2giKSx4ZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLHNuKSxTdCgpfWZ1bmN0aW9u''@;'; put 'put ''IFN0KCl7WigidW5waXBlIiksS2UudW5waXBlKHhlKX1yZXR1cm4gS2Uub24oImRhdGEiLHJ0KSxmdW5jdGlvbiBKKHhlLHllLEtlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgeGUucHJlcGVuZExpc3RlbmVyKXJldHVybiB4ZS5wcmVwZW5kTGlzdGVuZXIoeWUsS2UpO3hlLl9ldmVudHMmJnhl''@;'; put 'put ''Ll9ldmVudHNbeWVdP18oeGUuX2V2ZW50c1t5ZV0pP3hlLl9ldmVudHNbeWVdLnVuc2hpZnQoS2UpOnhlLl9ldmVudHNbeWVdPVtLZSx4ZS5fZXZlbnRzW3llXV06eGUub24oeWUsS2UpfSh4ZSwiZXJyb3IiLFFlKSx4ZS5vbmNlKCJjbG9zZSIsc24pLHhlLm9uY2UoImZpbmlzaCIsdnQpLHhl''@;'; put 'put ''LmVtaXQoInBpcGUiLEtlKSxqZS5mbG93aW5nfHwoWigicGlwZSByZXN1bWUiKSxLZS5yZXN1bWUoKSkseGV9LGllLnByb3RvdHlwZS51bnBpcGU9ZnVuY3Rpb24oeGUpe3ZhciB5ZT10aGlzLl9yZWFkYWJsZVN0YXRlLEtlPXtoYXNVbnBpcGVkOiExfTtpZigwPT09eWUucGlwZXNDb3VudCly''@;'; put 'put ''ZXR1cm4gdGhpcztpZigxPT09eWUucGlwZXNDb3VudClyZXR1cm4geGUmJnhlIT09eWUucGlwZXN8fCh4ZXx8KHhlPXllLnBpcGVzKSx5ZS5waXBlcz1udWxsLHllLnBpcGVzQ291bnQ9MCx5ZS5mbG93aW5nPSExLHhlJiZ4ZS5lbWl0KCJ1bnBpcGUiLHRoaXMsS2UpKSx0aGlzO2lmKCF4ZSl7''@;'; put 'put ''dmFyIGplPXllLnBpcGVzLGtlPXllLnBpcGVzQ291bnQ7eWUucGlwZXM9bnVsbCx5ZS5waXBlc0NvdW50PTAseWUuZmxvd2luZz0hMTtmb3IodmFyIEhlPTA7SGU8a2U7SGUrKylqZVtIZV0uZW1pdCgidW5waXBlIix0aGlzLHtoYXNVbnBpcGVkOiExfSk7cmV0dXJuIHRoaXN9dmFyIExlPWl0''@;'; put 'put ''KHllLnBpcGVzLHhlKTtyZXR1cm4tMT09PUxlfHwoeWUucGlwZXMuc3BsaWNlKExlLDEpLHllLnBpcGVzQ291bnQtPTEsMT09PXllLnBpcGVzQ291bnQmJih5ZS5waXBlcz15ZS5waXBlc1swXSkseGUuZW1pdCgidW5waXBlIix0aGlzLEtlKSksdGhpc30saWUucHJvdG90eXBlLmFkZExpc3Rl''@;'; put 'put ''bmVyPWllLnByb3RvdHlwZS5vbj1mdW5jdGlvbih4ZSx5ZSl7dmFyIEtlPVAucHJvdG90eXBlLm9uLmNhbGwodGhpcyx4ZSx5ZSk7aWYoImRhdGEiPT09eGUpITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJnRoaXMucmVzdW1lKCk7ZWxzZSBpZigicmVhZGFibGUiPT09eGUpe3Zh''@;'; put 'put ''ciBqZT10aGlzLl9yZWFkYWJsZVN0YXRlOyFqZS5lbmRFbWl0dGVkJiYhamUucmVhZGFibGVMaXN0ZW5pbmcmJihqZS5yZWFkYWJsZUxpc3RlbmluZz1qZS5uZWVkUmVhZGFibGU9ITAsamUuZW1pdHRlZFJlYWRhYmxlPSExLGplLnJlYWRpbmc/amUubGVuZ3RoJiZ5KHRoaXMpOkkubmV4dFRp''@;'; put 'put ''Y2soaix0aGlzKSl9cmV0dXJuIEtlfSxpZS5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7dmFyIHhlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIHhlLmZsb3dpbmd8fChaKCJyZXN1bWUiKSx4ZS5mbG93aW5nPSEwLGZ1bmN0aW9uIEUoeGUseWUpe3llLnJlc3VtZVNjaGVkdWxlZHx8''@;'; put 'put ''KHllLnJlc3VtZVNjaGVkdWxlZD0hMCxJLm5leHRUaWNrKG0seGUseWUpKX0odGhpcyx4ZSkpLHRoaXN9LGllLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3JldHVybiBaKCJjYWxsIHBhdXNlIGZsb3dpbmc9JWoiLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyksITEhPT10aGlzLl9y''@;'; put 'put ''ZWFkYWJsZVN0YXRlLmZsb3dpbmcmJihaKCJwYXVzZSIpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz0hMSx0aGlzLmVtaXQoInBhdXNlIikpLHRoaXN9LGllLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHhlKXt2YXIgeWU9dGhpcyxLZT10aGlzLl9yZWFkYWJsZVN0YXRlLGplPSExO2Zv''@;'; put 'put ''cih2YXIga2UgaW4geGUub24oImVuZCIsZnVuY3Rpb24oKXtpZihaKCJ3cmFwcGVkIGVuZCIpLEtlLmRlY29kZXImJiFLZS5lbmRlZCl7dmFyIExlPUtlLmRlY29kZXIuZW5kKCk7TGUmJkxlLmxlbmd0aCYmeWUucHVzaChMZSl9eWUucHVzaChudWxsKX0pLHhlLm9uKCJkYXRhIixmdW5jdGlv''@;'; put 'put ''bihMZSl7Wigid3JhcHBlZCBkYXRhIiksS2UuZGVjb2RlciYmKExlPUtlLmRlY29kZXIud3JpdGUoTGUpKSxLZS5vYmplY3RNb2RlJiZudWxsPT1MZXx8IShLZS5vYmplY3RNb2RlfHxMZSYmTGUubGVuZ3RoKXx8eWUucHVzaChMZSl8fChqZT0hMCx4ZS5wYXVzZSgpKX0pLHhlKXZvaWQgMD09''@;'; put 'put ''PXRoaXNba2VdJiYiZnVuY3Rpb24iPT10eXBlb2YgeGVba2VdJiYodGhpc1trZV09ZnVuY3Rpb24oTGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB4ZVtMZV0uYXBwbHkoeGUsYXJndW1lbnRzKX19KGtlKSk7Zm9yKHZhciBIZT0wO0hlPGVlLmxlbmd0aDtIZSsrKXhlLm9uKGVlW0hlXSx0''@;'; put 'put ''aGlzLmVtaXQuYmluZCh0aGlzLGVlW0hlXSkpO3JldHVybiB0aGlzLl9yZWFkPWZ1bmN0aW9uKExlKXtaKCJ3cmFwcGVkIF9yZWFkIixMZSksamUmJihqZT0hMSx4ZS5yZXN1bWUoKSl9LHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpZS5wcm90b3R5cGUsInJlYWRhYmxlSGlnaFdhdGVy''@;'; put 'put ''TWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxpZS5fZnJvbUxpc3Q9YWV9LDE5ODAwOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgidXoi''@;'; put 'put ''LHttb250aHM6Ilx1MDQ0Zlx1MDQzZFx1MDQzMlx1MDQzMFx1MDQ0MF9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0MzBcdTA0M2JfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzYl9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDM4XHUwNDRl''@;'; put 'put ''XHUwNDNkX1x1MDQzOFx1MDQ0ZVx1MDQzYl9cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwX1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MF9cdTA0M2RcdTA0M2VcdTA0NGZcdTA0''@;'; put 'put ''MzFcdTA0NDBfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMxXHUwNDQwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0NGZcdTA0M2RcdTA0MzJfXHUwNDQ0XHUwNDM1XHUwNDMyX1x1MDQzY1x1MDQzMFx1MDQ0MF9cdTA0MzBcdTA0M2ZcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDM5''@;'; put 'put ''X1x1MDQzOFx1MDQ0ZVx1MDQzZF9cdTA0MzhcdTA0NGVcdTA0M2JfXHUwNDMwXHUwNDMyXHUwNDMzX1x1MDQ0MVx1MDQzNVx1MDQzZF9cdTA0M2VcdTA0M2FcdTA0NDJfXHUwNDNkXHUwNDNlXHUwNDRmX1x1MDQzNFx1MDQzNVx1MDQzYSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDJmXHUw''@;'; put 'put ''NDNhXHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDMwX1x1MDQxNFx1MDQ0M1x1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzMF9cdTA0MjFcdTA0MzVcdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzBfXHUwNDI3XHUwNDNlXHUwNDQwXHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUw''@;'; put 'put ''NDMwX1x1MDQxZlx1MDQzMFx1MDQzOVx1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzMF9cdTA0MTZcdTA0NDNcdTA0M2NcdTA0MzBfXHUwNDI4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQyZlx1MDQzYVx1MDQ0OF9cdTA0MTRcdTA0''@;'; put 'put ''NDNcdTA0NDhfXHUwNDIxXHUwNDM1XHUwNDQ4X1x1MDQyN1x1MDQzZVx1MDQ0MF9cdTA0MWZcdTA0MzBcdTA0MzlfXHUwNDE2XHUwNDQzXHUwNDNjX1x1MDQyOFx1MDQzMFx1MDQzZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDJmXHUwNDNhX1x1MDQxNFx1MDQ0M19cdTA0MjFcdTA0''@;'; put 'put ''MzVfXHUwNDI3XHUwNDNlX1x1MDQxZlx1MDQzMF9cdTA0MTZcdTA0NDNfXHUwNDI4XHUwNDMwIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIs''@;'; put 'put ''TExMTDoiRCBNTU1NIFlZWVksIGRkZGQgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQxMVx1MDQ0M1x1MDQzM1x1MDQ0M1x1MDQzZCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJdIExUIFtcdTA0MzRcdTA0MzBdIixuZXh0RGF5OiJbXHUwNDJkXHUwNDQwXHUwNDQyXHUwNDMwXHUw''@;'; put 'put ''NDMzXHUwNDMwXSBMVCBbXHUwNDM0XHUwNDMwXSIsbmV4dFdlZWs6ImRkZGQgW1x1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzOCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJdIExUIFtcdTA0MzRcdTA0MzBdIixsYXN0RGF5OiJbXHUwNDFhXHUwNDM1XHUwNDQ3XHUwNDMwIFx1MDQ0MVx1MDQzZVx1''@;'; put 'put ''MDQzMFx1MDQ0Ml0gTFQgW1x1MDQzNFx1MDQzMF0iLGxhc3RXZWVrOiJbXHUwNDIzXHUwNDQyXHUwNDMzXHUwNDMwXHUwNDNkXSBkZGRkIFtcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzggXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyXSBMVCBbXHUwNDM0XHUwNDMwXSIsc2FtZUVsc2U6IkwifSxy''@;'; put 'put ''ZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDJmXHUwNDNhXHUwNDM4XHUwNDNkICVzIFx1MDQzOFx1MDQ0N1x1MDQzOFx1MDQzNFx1MDQzMCIscGFzdDoiXHUwNDExXHUwNDM4XHUwNDQwIFx1MDQzZFx1MDQzNVx1MDQ0N1x1MDQzMCAlcyBcdTA0M2VcdTA0M2JcdTA0MzRcdTA0MzhcdTA0M2Qi''@;'; put 'put ''LHM6Ilx1MDQ0NFx1MDQ0M1x1MDQ0MFx1MDQ0MVx1MDQzMFx1MDQ0MiIsc3M6IiVkIFx1MDQ0NFx1MDQ0M1x1MDQ0MFx1MDQ0MVx1MDQzMFx1MDQ0MiIsbToiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzNFx1MDQzMFx1MDQzYVx1MDQzOFx1MDQzYVx1MDQzMCIsbW06IiVkIFx1MDQzNFx1MDQz''@;'; put 'put ''MFx1MDQzYVx1MDQzOFx1MDQzYVx1MDQzMCIsaDoiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0MiIsaGg6IiVkIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0MiIsZDoiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzYVx1MDQ0M1x1MDQzZCIsZGQ6IiVkIFx1MDQzYVx1''@;'; put 'put ''MDQ0M1x1MDQzZCIsTToiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzZVx1MDQzOSIsTU06IiVkIFx1MDQzZVx1MDQzOSIseToiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzOVx1MDQzOFx1MDQzYiIseXk6IiVkIFx1MDQzOVx1MDQzOFx1MDQzYiJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShiKDk3''@;'; put 'put ''NTg2KSl9LDE5ODQ2OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMjcwNTQpLkJ1ZmZlcixfPWIoMzU2OTYpLHA9Yig1OTQyKS5UcmFuc2Zvcm07ZnVuY3Rpb24gdyhQKXtwLmNhbGwodGhpcyksdGhpcy5fYmxvY2s9SS5hbGxvY1Vuc2FmZShQKSx0aGlzLl9ibG9ja1NpemU9UCx0''@;'; put 'put ''aGlzLl9ibG9ja09mZnNldD0wLHRoaXMuX2xlbmd0aD1bMCwwLDAsMF0sdGhpcy5fZmluYWxpemVkPSExfWIoNzE5OTMpKHcscCksdy5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihQLEYsUil7dmFyIHo9bnVsbDt0cnl7dGhpcy51cGRhdGUoUCxGKX1jYXRjaChOKXt6PU59Uih6KX0s''@;'; put 'put ''dy5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKFApe3ZhciBGPW51bGw7dHJ5e3RoaXMucHVzaCh0aGlzLmRpZ2VzdCgpKX1jYXRjaChSKXtGPVJ9UChGKX0sdy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKFAsRil7aWYodGhpcy5fZmluYWxpemVkKXRocm93IG5ldyBFcnJvcigiRGlnZXN0''@;'; put 'put ''IGFscmVhZHkgY2FsbGVkIik7Zm9yKHZhciBSPV8oUCxGKSx6PXRoaXMuX2Jsb2NrLE49MDt0aGlzLl9ibG9ja09mZnNldCtSLmxlbmd0aC1OPj10aGlzLl9ibG9ja1NpemU7KXtmb3IodmFyIE89dGhpcy5fYmxvY2tPZmZzZXQ7Tzx0aGlzLl9ibG9ja1NpemU7KXpbT109UltOXSxPKz0xLE4r''@;'; put 'put ''PTE7dGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MH1mb3IoO048Ui5sZW5ndGg7KXpbdGhpcy5fYmxvY2tPZmZzZXRdPVJbTl0sdGhpcy5fYmxvY2tPZmZzZXQrPTEsTis9MTtmb3IodmFyIEs9MCxaPTgqUi5sZW5ndGg7Wj4wOysrSyl0aGlzLl9sZW5ndGhbS10rPVosKFo9dGhp''@;'; put 'put ''cy5fbGVuZ3RoW0tdLzQyOTQ5NjcyOTZ8MCk+MCYmKHRoaXMuX2xlbmd0aFtLXS09NDI5NDk2NzI5NipaKTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX3VwZGF0ZSBpcyBub3QgaW1wbGVtZW50ZWQiKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''ZGlnZXN0PWZ1bmN0aW9uKFApe2lmKHRoaXMuX2ZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZCIpO3RoaXMuX2ZpbmFsaXplZD0hMDt2YXIgRj10aGlzLl9kaWdlc3QoKTt2b2lkIDAhPT1QJiYoRj1GLnRvU3RyaW5nKFApKSx0aGlzLl9ibG9jay5maWxs''@;'; put 'put ''KDApLHRoaXMuX2Jsb2NrT2Zmc2V0PTA7Zm9yKHZhciBSPTA7Ujw0OysrUil0aGlzLl9sZW5ndGhbUl09MDtyZXR1cm4gRn0sdy5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX2RpZ2VzdCBpcyBub3QgaW1wbGVtZW50ZWQiKX0sY2UuZXhwb3J0cz13fSwx''@;'; put 'put ''OTkwMDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLF89Yig0NTMxMCk7Y2UuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBJJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9m''@;'; put 'put ''IEkoImZvbyIpJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbCgiYmFyIikmJl8oKX19LDIwMDUzOmNlPT57dmFyIFg9e30udG9TdHJpbmc7Y2UuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihiKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT1YLmNhbGwoYil9fSwyMDEzNzpmdW5jdGlv''@;'; put 'put ''bihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImtvIix7bW9udGhzOiIxXHVjNmQ0XzJcdWM2ZDRfM1x1YzZkNF80XHVjNmQ0XzVcdWM2ZDRfNlx1YzZkNF83XHVjNmQ0XzhcdWM2ZDRfOVx1YzZkNF8xMFx1YzZkNF8xMVx1YzZkNF8xMlx1YzZkNCIu''@;'; put 'put ''c3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMVx1YzZkNF8yXHVjNmQ0XzNcdWM2ZDRfNFx1YzZkNF81XHVjNmQ0XzZcdWM2ZDRfN1x1YzZkNF84XHVjNmQ0XzlcdWM2ZDRfMTBcdWM2ZDRfMTFcdWM2ZDRfMTJcdWM2ZDQiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1Yzc3Y1x1YzY5NFx1Yzc3Y19c''@;'; put 'put ''dWM2ZDRcdWM2OTRcdWM3N2NfXHVkNjU0XHVjNjk0XHVjNzdjX1x1YzIxOFx1YzY5NFx1Yzc3Y19cdWJhYTlcdWM2OTRcdWM3N2NfXHVhZTA4XHVjNjk0XHVjNzdjX1x1ZDFhMFx1YzY5NFx1Yzc3YyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdWM3N2NfXHVjNmQ0X1x1ZDY1NF9cdWMy''@;'; put 'put ''MThfXHViYWE5X1x1YWUwOF9cdWQxYTAiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1Yzc3Y19cdWM2ZDRfXHVkNjU0X1x1YzIxOF9cdWJhYTlfXHVhZTA4X1x1ZDFhMCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSIsTFRTOiJBIGg6bW06c3MiLEw6IllZWVkuTU0u''@;'; put 'put ''REQuIixMTDoiWVlZWVx1YjE0NCBNTU1NIERcdWM3N2MiLExMTDoiWVlZWVx1YjE0NCBNTU1NIERcdWM3N2MgQSBoOm1tIixMTExMOiJZWVlZXHViMTQ0IE1NTU0gRFx1Yzc3YyBkZGRkIEEgaDptbSIsbDoiWVlZWS5NTS5ERC4iLGxsOiJZWVlZXHViMTQ0IE1NTU0gRFx1Yzc3YyIsbGxsOiJZ''@;'; put 'put ''WVlZXHViMTQ0IE1NTU0gRFx1Yzc3YyBBIGg6bW0iLGxsbGw6IllZWVlcdWIxNDQgTU1NTSBEXHVjNzdjIGRkZGQgQSBoOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilx1YzYyNFx1YjI5OCBMVCIsbmV4dERheToiXHViMGI0XHVjNzdjIExUIixuZXh0V2VlazoiZGRkZCBMVCIsbGFzdERheToi''@;'; put 'put ''XHVjNWI0XHVjODFjIExUIixsYXN0V2VlazoiXHVjOWMwXHViMDljXHVjOGZjIGRkZGQgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1ZDZjNCIscGFzdDoiJXMgXHVjODA0IixzOiJcdWJhODcgXHVjZDA4IixzczoiJWRcdWNkMDgiLG06IjFcdWJkODQiLG1t''@;'; put 'put ''OiIlZFx1YmQ4NCIsaDoiXHVkNTVjIFx1YzJkY1x1YWMwNCIsaGg6IiVkXHVjMmRjXHVhYzA0IixkOiJcdWQ1NThcdWI4ZTgiLGRkOiIlZFx1Yzc3YyIsTToiXHVkNTVjIFx1YjJlYyIsTU06IiVkXHViMmVjIix5OiJcdWM3N2MgXHViMTQ0Iix5eToiJWRcdWIxNDQifSxkYXlPZk1vbnRoT3Jk''@;'; put 'put ''aW5hbFBhcnNlOi9cZHsxLDJ9KFx1Yzc3Y3xcdWM2ZDR8XHVjOGZjKS8sb3JkaW5hbDpmdW5jdGlvbihwLFYpe3N3aXRjaChWKXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBwKyJcdWM3N2MiO2Nhc2UiTSI6cmV0dXJuIHArIlx1YzZkNCI7Y2FzZSJ3IjpjYXNlIlciOnJldHVy''@;'; put 'put ''biBwKyJcdWM4ZmMiO2RlZmF1bHQ6cmV0dXJuIHB9fSxtZXJpZGllbVBhcnNlOi9cdWM2MjRcdWM4MDR8XHVjNjI0XHVkNmM0Lyxpc1BNOmZ1bmN0aW9uKHApe3JldHVybiJcdWM2MjRcdWQ2YzQiPT09cH0sbWVyaWRpZW06ZnVuY3Rpb24ocCxWLHcpe3JldHVybiBwPDEyPyJcdWM2MjRcdWM4''@;'; put 'put ''MDQiOiJcdWM2MjRcdWQ2YzQifX0pfShiKDk3NTg2KSl9LDIwMjkxOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2IoOTM3OCl9LDIwNTA3OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMzc3MzEpLF89Yig5NzU0MSkuYWRkLHA9YigxNDQ1KSxWPWIoNDM2MzIpLHc9YigxMTM4KTtj''@;'; put 'put ''ZS5leHBvcnRzPWZ1bmN0aW9uKEYpe3ZhciBSPUkodGhpcyksej1WKEYpLmdldEl0ZXJhdG9yKCksTj1wKFIpO3JldHVybiB3KHosZnVuY3Rpb24oTyl7XyhOLE8pfSksTn19LDIxMTI2OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgi''@;'; put 'put ''bWwiLHttb250aHM6Ilx1MGQxY1x1MGQyOFx1MGQ0MVx1MGQzNVx1MGQzMFx1MGQzZl9cdTBkMmJcdTBkNDZcdTBkMmNcdTBkNGRcdTBkMzBcdTBkNDFcdTBkMzVcdTBkMzBcdTBkM2ZfXHUwZDJlXHUwZDNlXHUwZDdjXHUwZDFhXHUwZDRkXHUwZDFhXHUwZDRkX1x1MGQwZlx1MGQyYVx1MGQ0''@;'; put 'put ''ZFx1MGQzMFx1MGQzZlx1MGQ3ZF9cdTBkMmVcdTBkNDdcdTBkMmZcdTBkNGRfXHUwZDFjXHUwZDQyXHUwZDdhX1x1MGQxY1x1MGQ0Mlx1MGQzMlx1MGQ0OF9cdTBkMTNcdTBkMTdcdTBkMzhcdTBkNGRcdTBkMzFcdTBkNGRcdTBkMzFcdTBkNGRfXHUwZDM4XHUwZDQ2XHUwZDJhXHUwZDRkXHUw''@;'; put 'put ''ZDMxXHUwZDRkXHUwZDMxXHUwZDAyXHUwZDJjXHUwZDdjX1x1MGQxMlx1MGQxNVx1MGQ0ZFx1MGQxZlx1MGQ0Ylx1MGQyY1x1MGQ3Y19cdTBkMjhcdTBkMzVcdTBkMDJcdTBkMmNcdTBkN2NfXHUwZDIxXHUwZDNmXHUwZDM4XHUwZDAyXHUwZDJjXHUwZDdjIi5zcGxpdCgiXyIpLG1vbnRoc1No''@;'; put 'put ''b3J0OiJcdTBkMWNcdTBkMjhcdTBkNDEuX1x1MGQyYlx1MGQ0Nlx1MGQyY1x1MGQ0ZFx1MGQzMFx1MGQ0MS5fXHUwZDJlXHUwZDNlXHUwZDdjLl9cdTBkMGZcdTBkMmFcdTBkNGRcdTBkMzBcdTBkM2YuX1x1MGQyZVx1MGQ0N1x1MGQyZlx1MGQ0ZF9cdTBkMWNcdTBkNDJcdTBkN2FfXHUwZDFj''@;'; put 'put ''XHUwZDQyXHUwZDMyXHUwZDQ4Ll9cdTBkMTNcdTBkMTcuX1x1MGQzOFx1MGQ0Nlx1MGQyYVx1MGQ0ZFx1MGQzMVx1MGQ0ZFx1MGQzMS5fXHUwZDEyXHUwZDE1XHUwZDRkXHUwZDFmXHUwZDRiLl9cdTBkMjhcdTBkMzVcdTBkMDIuX1x1MGQyMVx1MGQzZlx1MGQzOFx1MGQwMi4iLnNwbGl0KCJf''@;'; put 'put ''IiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwZDFlXHUwZDNlXHUwZDJmXHUwZDMxXHUwZDNlXHUwZDM0XHUwZDRkXHUwZDFhX1x1MGQyNFx1MGQzZlx1MGQxOVx1MGQ0ZFx1MGQxNVx1MGQzM1x1MGQzZVx1MGQzNFx1MGQ0ZFx1MGQxYV9cdTBkMWFcdTBkNGFcdTBkMzVcdTBk''@;'; put 'put ''NGRcdTBkMzVcdTBkM2VcdTBkMzRcdTBkNGRcdTBkMWFfXHUwZDJjXHUwZDQxXHUwZDI3XHUwZDI4XHUwZDNlXHUwZDM0XHUwZDRkXHUwZDFhX1x1MGQzNVx1MGQ0ZFx1MGQyZlx1MGQzZVx1MGQzNFx1MGQzZVx1MGQzNFx1MGQ0ZFx1MGQxYV9cdTBkMzVcdTBkNDZcdTBkMzNcdTBkNGRcdTBk''@;'; put 'put ''MzNcdTBkM2ZcdTBkMmZcdTBkM2VcdTBkMzRcdTBkNGRcdTBkMWFfXHUwZDM2XHUwZDI4XHUwZDNmXHUwZDJmXHUwZDNlXHUwZDM0XHUwZDRkXHUwZDFhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MGQxZVx1MGQzZVx1MGQyZlx1MGQ3Y19cdTBkMjRcdTBkM2ZcdTBkMTlcdTBkNGRc''@;'; put 'put ''dTBkMTVcdTBkN2VfXHUwZDFhXHUwZDRhXHUwZDM1XHUwZDRkXHUwZDM1X1x1MGQyY1x1MGQ0MVx1MGQyN1x1MGQ3Yl9cdTBkMzVcdTBkNGRcdTBkMmZcdTBkM2VcdTBkMzRcdTBkMDJfXHUwZDM1XHUwZDQ2XHUwZDMzXHUwZDRkXHUwZDMzXHUwZDNmX1x1MGQzNlx1MGQyOFx1MGQzZiIuc3Bs''@;'; put 'put ''aXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwZDFlXHUwZDNlX1x1MGQyNFx1MGQzZl9cdTBkMWFcdTBkNGFfXHUwZDJjXHUwZDQxX1x1MGQzNVx1MGQ0ZFx1MGQyZlx1MGQzZV9cdTBkMzVcdTBkNDZfXHUwZDM2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIC1cdTBkMjhc''@;'; put 'put ''dTBkNDEiLExUUzoiQSBoOm1tOnNzIC1cdTBkMjhcdTBkNDEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIC1cdTBkMjhcdTBkNDEiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gLVx1MGQyOFx1MGQ0MSJ9LGNhbGVuZGFy''@;'; put 'put ''OntzYW1lRGF5OiJbXHUwZDA3XHUwZDI4XHUwZDRkXHUwZDI4XHUwZDRkXSBMVCIsbmV4dERheToiW1x1MGQyOFx1MGQzZVx1MGQzM1x1MGQ0Nl0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MGQwN1x1MGQyOFx1MGQ0ZFx1MGQyOFx1MGQzMlx1MGQ0Nl0gTFQiLGxhc3RX''@;'; put 'put ''ZWVrOiJbXHUwZDE1XHUwZDM0XHUwZDNmXHUwZDFlXHUwZDRkXHUwZDFlXSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwZDE1XHUwZDM0XHUwZDNmXHUwZDFlXHUwZDRkXHUwZDFlXHUwZDRkIixwYXN0OiIlcyBcdTBkMmVcdTBkNDFcdTBkN2Jc''@;'; put 'put ''dTBkMmFcdTBkNGQiLHM6Ilx1MGQwNVx1MGQ3ZFx1MGQyYSBcdTBkMjhcdTBkM2ZcdTBkMmVcdTBkM2ZcdTBkMzdcdTBkMTlcdTBkNGRcdTBkMTlcdTBkN2UiLHNzOiIlZCBcdTBkMzhcdTBkNDZcdTBkMTVcdTBkNGRcdTBkMTVcdTBkN2JcdTBkMjFcdTBkNGQiLG06Ilx1MGQxMlx1MGQzMFx1''@;'; put 'put ''MGQ0MSBcdTBkMmVcdTBkM2ZcdTBkMjhcdTBkM2ZcdTBkMzFcdTBkNGRcdTBkMzFcdTBkNGQiLG1tOiIlZCBcdTBkMmVcdTBkM2ZcdTBkMjhcdTBkM2ZcdTBkMzFcdTBkNGRcdTBkMzFcdTBkNGQiLGg6Ilx1MGQxMlx1MGQzMFx1MGQ0MSBcdTBkMmVcdTBkMjNcdTBkM2ZcdTBkMTVcdTBkNGRc''@;'; put 'put ''dTBkMTVcdTBkNDJcdTBkN2MiLGhoOiIlZCBcdTBkMmVcdTBkMjNcdTBkM2ZcdTBkMTVcdTBkNGRcdTBkMTVcdTBkNDJcdTBkN2MiLGQ6Ilx1MGQxMlx1MGQzMFx1MGQ0MSBcdTBkMjZcdTBkM2ZcdTBkMzVcdTBkMzhcdTBkMDIiLGRkOiIlZCBcdTBkMjZcdTBkM2ZcdTBkMzVcdTBkMzhcdTBk''@;'; put 'put ''MDIiLE06Ilx1MGQxMlx1MGQzMFx1MGQ0MSBcdTBkMmVcdTBkM2VcdTBkMzhcdTBkMDIiLE1NOiIlZCBcdTBkMmVcdTBkM2VcdTBkMzhcdTBkMDIiLHk6Ilx1MGQxMlx1MGQzMFx1MGQ0MSBcdTBkMzVcdTBkN2NcdTBkMzdcdTBkMDIiLHl5OiIlZCBcdTBkMzVcdTBkN2NcdTBkMzdcdTBkMDIi''@;'; put 'put ''fSxtZXJpZGllbVBhcnNlOi9cdTBkMzBcdTBkM2VcdTBkMjRcdTBkNGRcdTBkMzBcdTBkM2Z8XHUwZDMwXHUwZDNlXHUwZDM1XHUwZDNmXHUwZDMyXHUwZDQ2fFx1MGQwOVx1MGQxYVx1MGQ0ZFx1MGQxYSBcdTBkMTVcdTBkMzRcdTBkM2ZcdTBkMWVcdTBkNGRcdTBkMWVcdTBkNGR8XHUwZDM1''@;'; put 'put ''XHUwZDQ4XHUwZDE1XHUwZDQxXHUwZDI4XHUwZDRkXHUwZDI4XHUwZDQ3XHUwZDMwXHUwZDAyfFx1MGQzMFx1MGQzZVx1MGQyNFx1MGQ0ZFx1MGQzMFx1MGQzZi9pLG1lcmlkaWVtSG91cjpmdW5jdGlvbihwLFYpe3JldHVybiAxMj09PXAmJihwPTApLCJcdTBkMzBcdTBkM2VcdTBkMjRcdTBk''@;'; put 'put ''NGRcdTBkMzBcdTBkM2YiPT09ViYmcD49NHx8Ilx1MGQwOVx1MGQxYVx1MGQ0ZFx1MGQxYSBcdTBkMTVcdTBkMzRcdTBkM2ZcdTBkMWVcdTBkNGRcdTBkMWVcdTBkNGQiPT09Vnx8Ilx1MGQzNVx1MGQ0OFx1MGQxNVx1MGQ0MVx1MGQyOFx1MGQ0ZFx1MGQyOFx1MGQ0N1x1MGQzMFx1MGQwMiI9''@;'; put 'put ''PT1WP3ArMTI6cH0sbWVyaWRpZW06ZnVuY3Rpb24ocCxWLHcpe3JldHVybiBwPDQ/Ilx1MGQzMFx1MGQzZVx1MGQyNFx1MGQ0ZFx1MGQzMFx1MGQzZiI6cDwxMj8iXHUwZDMwXHUwZDNlXHUwZDM1XHUwZDNmXHUwZDMyXHUwZDQ2IjpwPDE3PyJcdTBkMDlcdTBkMWFcdTBkNGRcdTBkMWEgXHUw''@;'; put 'put ''ZDE1XHUwZDM0XHUwZDNmXHUwZDFlXHUwZDRkXHUwZDFlXHUwZDRkIjpwPDIwPyJcdTBkMzVcdTBkNDhcdTBkMTVcdTBkNDFcdTBkMjhcdTBkNGRcdTBkMjhcdTBkNDdcdTBkMzBcdTBkMDIiOiJcdTBkMzBcdTBkM2VcdTBkMjRcdTBkNGRcdTBkMzBcdTBkM2YifX0pfShiKDk3NTg2KSl9LDIx''@;'; put 'put ''MTY2OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9SlNPTi5wYXJzZSgnW1siMCIsIlxcdTAwMDAiLDEyN10sWyI4MTQxIiwiXHVhYzAyXHVhYzAzXHVhYzA1XHVhYzA2XHVhYzBiIiw0LCJcdWFjMThcdWFjMWVcdWFjMWZcdWFjMjFcdWFjMjJcdWFjMjNcdWFjMjUiLDYsIlx1YWMyZVx1''@;'; put 'put ''YWMzMlx1YWMzM1x1YWMzNCJdLFsiODE2MSIsIlx1YWMzNVx1YWMzNlx1YWMzN1x1YWMzYVx1YWMzYlx1YWMzZFx1YWMzZVx1YWMzZlx1YWM0MSIsOSwiXHVhYzRjXHVhYzRlIiw1LCJcdWFjNTUiXSxbIjgxODEiLCJcdWFjNTZcdWFjNTdcdWFjNTlcdWFjNWFcdWFjNWJcdWFjNWQiLDE4LCJc''@;'; put 'put ''dWFjNzJcdWFjNzNcdWFjNzVcdWFjNzZcdWFjNzlcdWFjN2IiLDQsIlx1YWM4Mlx1YWM4N1x1YWM4OFx1YWM4ZFx1YWM4ZVx1YWM4Zlx1YWM5MVx1YWM5Mlx1YWM5M1x1YWM5NSIsNiwiXHVhYzllXHVhY2EyIiw1LCJcdWFjYWJcdWFjYWRcdWFjYWVcdWFjYjEiLDYsIlx1YWNiYVx1YWNiZVx1''@;'; put 'put ''YWNiZlx1YWNjMFx1YWNjMlx1YWNjM1x1YWNjNVx1YWNjNlx1YWNjN1x1YWNjOVx1YWNjYVx1YWNjYlx1YWNjZCIsNywiXHVhY2Q2XHVhY2Q4Iiw3LCJcdWFjZTJcdWFjZTNcdWFjZTVcdWFjZTZcdWFjZTlcdWFjZWJcdWFjZWRcdWFjZWVcdWFjZjJcdWFjZjRcdWFjZjciLDQsIlx1YWNmZVx1''@;'; put 'put ''YWNmZlx1YWQwMVx1YWQwMlx1YWQwM1x1YWQwNVx1YWQwNyIsNCwiXHVhZDBlXHVhZDEwXHVhZDEyXHVhZDEzIl0sWyI4MjQxIiwiXHVhZDE0XHVhZDE1XHVhZDE2XHVhZDE3XHVhZDE5XHVhZDFhXHVhZDFiXHVhZDFkXHVhZDFlXHVhZDFmXHVhZDIxIiw3LCJcdWFkMmFcdWFkMmJcdWFkMmUi''@;'; put 'put ''LDVdLFsiODI2MSIsIlx1YWQzNlx1YWQzN1x1YWQzOVx1YWQzYVx1YWQzYlx1YWQzZCIsNiwiXHVhZDQ2XHVhZDQ4XHVhZDRhIiw1LCJcdWFkNTFcdWFkNTJcdWFkNTNcdWFkNTVcdWFkNTZcdWFkNTciXSxbIjgyODEiLCJcdWFkNTkiLDcsIlx1YWQ2Mlx1YWQ2NCIsNywiXHVhZDZlXHVhZDZm''@;'; put 'put ''XHVhZDcxXHVhZDcyXHVhZDc3XHVhZDc4XHVhZDc5XHVhZDdhXHVhZDdlXHVhZDgwXHVhZDgzIiw0LCJcdWFkOGFcdWFkOGJcdWFkOGRcdWFkOGVcdWFkOGZcdWFkOTEiLDEwLCJcdWFkOWUiLDUsIlx1YWRhNSIsMTcsIlx1YWRiOCIsNywiXHVhZGMyXHVhZGMzXHVhZGM1XHVhZGM2XHVhZGM3''@;'; put 'put ''XHVhZGM5Iiw2LCJcdWFkZDJcdWFkZDQiLDcsIlx1YWRkZFx1YWRkZVx1YWRkZlx1YWRlMVx1YWRlMlx1YWRlM1x1YWRlNSIsMThdLFsiODM0MSIsIlx1YWRmYVx1YWRmYlx1YWRmZFx1YWRmZVx1YWUwMiIsNSwiXHVhZTBhXHVhZTBjXHVhZTBlIiw1LCJcdWFlMTUiLDddLFsiODM2MSIsIlx1''@;'; put 'put ''YWUxZCIsMTgsIlx1YWUzMlx1YWUzM1x1YWUzNVx1YWUzNlx1YWUzOVx1YWUzYlx1YWUzYyJdLFsiODM4MSIsIlx1YWUzZFx1YWUzZVx1YWUzZlx1YWU0Mlx1YWU0NFx1YWU0N1x1YWU0OFx1YWU0OVx1YWU0Ylx1YWU0Zlx1YWU1MVx1YWU1Mlx1YWU1M1x1YWU1NVx1YWU1NyIsNCwiXHVhZTVl''@;'; put 'put ''XHVhZTYyXHVhZTYzXHVhZTY0XHVhZTY2XHVhZTY3XHVhZTZhXHVhZTZiXHVhZTZkXHVhZTZlXHVhZTZmXHVhZTcxIiw2LCJcdWFlN2FcdWFlN2UiLDUsIlx1YWU4NiIsNSwiXHVhZThkIiw0NiwiXHVhZWJmXHVhZWMxXHVhZWMyXHVhZWMzXHVhZWM1Iiw2LCJcdWFlY2VcdWFlZDIiLDUsIlx1''@;'; put 'put ''YWVkYVx1YWVkYlx1YWVkZCIsOF0sWyI4NDQxIiwiXHVhZWU2XHVhZWU3XHVhZWU5XHVhZWVhXHVhZWVjXHVhZWVlIiw1LCJcdWFlZjVcdWFlZjZcdWFlZjdcdWFlZjlcdWFlZmFcdWFlZmJcdWFlZmQiLDhdLFsiODQ2MSIsIlx1YWYwNlx1YWYwOVx1YWYwYVx1YWYwYlx1YWYwY1x1YWYwZVx1''@;'; put 'put ''YWYwZlx1YWYxMSIsMThdLFsiODQ4MSIsIlx1YWYyNCIsNywiXHVhZjJlXHVhZjJmXHVhZjMxXHVhZjMzXHVhZjM1Iiw2LCJcdWFmM2VcdWFmNDBcdWFmNDRcdWFmNDVcdWFmNDZcdWFmNDdcdWFmNGEiLDUsIlx1YWY1MSIsMTAsIlx1YWY1ZSIsNSwiXHVhZjY2IiwxOCwiXHVhZjdhIiw1LCJc''@;'; put 'put ''dWFmODFcdWFmODJcdWFmODNcdWFmODVcdWFmODZcdWFmODdcdWFmODkiLDYsIlx1YWY5Mlx1YWY5M1x1YWY5NFx1YWY5NiIsNSwiXHVhZjlkIiwyNiwiXHVhZmJhXHVhZmJiXHVhZmJkXHVhZmJlIl0sWyI4NTQxIiwiXHVhZmJmXHVhZmMxIiw1LCJcdWFmY2FcdWFmY2NcdWFmY2YiLDQsIlx1''@;'; put 'put ''YWZkNSIsNiwiXHVhZmRkIiw0XSxbIjg1NjEiLCJcdWFmZTIiLDUsIlx1YWZlYSIsNSwiXHVhZmYyXHVhZmYzXHVhZmY1XHVhZmY2XHVhZmY3XHVhZmY5Iiw2LCJcdWIwMDJcdWIwMDMiXSxbIjg1ODEiLCJcdWIwMDUiLDYsIlx1YjAwZFx1YjAwZVx1YjAwZlx1YjAxMVx1YjAxMlx1YjAxM1x1''@;'; put 'put ''YjAxNSIsNiwiXHViMDFlIiw5LCJcdWIwMjkiLDI2LCJcdWIwNDZcdWIwNDdcdWIwNDlcdWIwNGJcdWIwNGRcdWIwNGZcdWIwNTBcdWIwNTFcdWIwNTJcdWIwNTZcdWIwNThcdWIwNWFcdWIwNWJcdWIwNWNcdWIwNWUiLDI5LCJcdWIwN2VcdWIwN2ZcdWIwODFcdWIwODJcdWIwODNcdWIwODUi''@;'; put 'put ''LDYsIlx1YjA4ZVx1YjA5MFx1YjA5MiIsNSwiXHViMDliXHViMDlkXHViMDllXHViMGEzXHViMGE0Il0sWyI4NjQxIiwiXHViMGE1XHViMGE2XHViMGE3XHViMGFhXHViMGIwXHViMGIyXHViMGI2XHViMGI3XHViMGI5XHViMGJhXHViMGJiXHViMGJkIiw2LCJcdWIwYzZcdWIwY2EiLDUsIlx1''@;'; put 'put ''YjBkMiJdLFsiODY2MSIsIlx1YjBkM1x1YjBkNVx1YjBkNlx1YjBkN1x1YjBkOSIsNiwiXHViMGUxXHViMGUyXHViMGUzXHViMGU0XHViMGU2IiwxMF0sWyI4NjgxIiwiXHViMGYxIiwyMiwiXHViMTBhXHViMTBkXHViMTBlXHViMTBmXHViMTExXHViMTE0XHViMTE1XHViMTE2XHViMTE3XHVi''@;'; put 'put ''MTFhXHViMTFlIiw0LCJcdWIxMjZcdWIxMjdcdWIxMjlcdWIxMmFcdWIxMmJcdWIxMmQiLDYsIlx1YjEzNlx1YjEzYSIsNSwiXHViMTQyXHViMTQzXHViMTQ1XHViMTQ2XHViMTQ3XHViMTQ5Iiw2LCJcdWIxNTJcdWIxNTNcdWIxNTZcdWIxNTdcdWIxNTlcdWIxNWFcdWIxNWJcdWIxNWRcdWIx''@;'; put 'put ''NWVcdWIxNWZcdWIxNjEiLDIyLCJcdWIxN2FcdWIxN2JcdWIxN2RcdWIxN2VcdWIxN2ZcdWIxODFcdWIxODMiLDQsIlx1YjE4YVx1YjE4Y1x1YjE4ZVx1YjE4Zlx1YjE5MFx1YjE5MVx1YjE5NVx1YjE5Nlx1YjE5N1x1YjE5OVx1YjE5YVx1YjE5Ylx1YjE5ZCJdLFsiODc0MSIsIlx1YjE5ZSIs''@;'; put 'put ''OSwiXHViMWE5IiwxNV0sWyI4NzYxIiwiXHViMWI5IiwxOCwiXHViMWNkXHViMWNlXHViMWNmXHViMWQxXHViMWQyXHViMWQzXHViMWQ1Il0sWyI4NzgxIiwiXHViMWQ2Iiw1LCJcdWIxZGVcdWIxZTAiLDcsIlx1YjFlYVx1YjFlYlx1YjFlZFx1YjFlZVx1YjFlZlx1YjFmMSIsNywiXHViMWZh''@;'; put 'put ''XHViMWZjXHViMWZlIiw1LCJcdWIyMDZcdWIyMDdcdWIyMDlcdWIyMGFcdWIyMGQiLDYsIlx1YjIxNlx1YjIxOFx1YjIxYSIsNSwiXHViMjIxIiwxOCwiXHViMjM1Iiw2LCJcdWIyM2QiLDI2LCJcdWIyNTlcdWIyNWFcdWIyNWJcdWIyNWRcdWIyNWVcdWIyNWZcdWIyNjEiLDYsIlx1YjI2YSIs''@;'; put 'put ''NF0sWyI4ODQxIiwiXHViMjZmIiw0LCJcdWIyNzYiLDUsIlx1YjI3ZCIsNiwiXHViMjg2XHViMjg3XHViMjg4XHViMjhhIiw0XSxbIjg4NjEiLCJcdWIyOGZcdWIyOTJcdWIyOTNcdWIyOTVcdWIyOTZcdWIyOTdcdWIyOWIiLDQsIlx1YjJhMlx1YjJhNFx1YjJhN1x1YjJhOFx1YjJhOVx1YjJh''@;'; put 'put ''Ylx1YjJhZFx1YjJhZVx1YjJhZlx1YjJiMVx1YjJiMlx1YjJiM1x1YjJiNVx1YjJiNlx1YjJiNyJdLFsiODg4MSIsIlx1YjJiOCIsMTUsIlx1YjJjYVx1YjJjYlx1YjJjZFx1YjJjZVx1YjJjZlx1YjJkMVx1YjJkMyIsNCwiXHViMmRhXHViMmRjXHViMmRlXHViMmRmXHViMmUwXHViMmUxXHVi''@;'; put 'put ''MmUzXHViMmU3XHViMmU5XHViMmVhXHViMmYwXHViMmYxXHViMmYyXHViMmY2XHViMmZjXHViMmZkXHViMmZlXHViMzAyXHViMzAzXHViMzA1XHViMzA2XHViMzA3XHViMzA5Iiw2LCJcdWIzMTJcdWIzMTYiLDUsIlx1YjMxZCIsNTQsIlx1YjM1N1x1YjM1OVx1YjM1YVx1YjM1ZFx1YjM2MFx1''@;'; put 'put ''YjM2MVx1YjM2Mlx1YjM2MyJdLFsiODk0MSIsIlx1YjM2Nlx1YjM2OFx1YjM2YVx1YjM2Y1x1YjM2ZFx1YjM2Zlx1YjM3Mlx1YjM3M1x1YjM3NVx1YjM3Nlx1YjM3N1x1YjM3OSIsNiwiXHViMzgyXHViMzg2Iiw1LCJcdWIzOGQiXSxbIjg5NjEiLCJcdWIzOGVcdWIzOGZcdWIzOTFcdWIzOTJc''@;'; put 'put ''dWIzOTNcdWIzOTUiLDEwLCJcdWIzYTIiLDUsIlx1YjNhOVx1YjNhYVx1YjNhYlx1YjNhZCJdLFsiODk4MSIsIlx1YjNhZSIsMjEsIlx1YjNjNlx1YjNjN1x1YjNjOVx1YjNjYVx1YjNjZFx1YjNjZlx1YjNkMVx1YjNkMlx1YjNkM1x1YjNkNlx1YjNkOFx1YjNkYVx1YjNkY1x1YjNkZVx1YjNk''@;'; put 'put ''Zlx1YjNlMVx1YjNlMlx1YjNlM1x1YjNlNVx1YjNlNlx1YjNlN1x1YjNlOSIsMTgsIlx1YjNmZCIsMTgsIlx1YjQxMSIsNiwiXHViNDE5XHViNDFhXHViNDFiXHViNDFkXHViNDFlXHViNDFmXHViNDIxIiw2LCJcdWI0MmFcdWI0MmMiLDcsIlx1YjQzNSIsMTVdLFsiOGE0MSIsIlx1YjQ0NSIs''@;'; put 'put ''MTAsIlx1YjQ1Mlx1YjQ1M1x1YjQ1NVx1YjQ1Nlx1YjQ1N1x1YjQ1OSIsNiwiXHViNDYyXHViNDY0XHViNDY2Il0sWyI4YTYxIiwiXHViNDY3Iiw0LCJcdWI0NmQiLDE4LCJcdWI0ODFcdWI0ODIiXSxbIjhhODEiLCJcdWI0ODMiLDQsIlx1YjQ4OSIsMTksIlx1YjQ5ZSIsNSwiXHViNGE1XHVi''@;'; put 'put ''NGE2XHViNGE3XHViNGE5XHViNGFhXHViNGFiXHViNGFkIiw3LCJcdWI0YjZcdWI0YjhcdWI0YmEiLDUsIlx1YjRjMVx1YjRjMlx1YjRjM1x1YjRjNVx1YjRjNlx1YjRjN1x1YjRjOSIsNiwiXHViNGQxXHViNGQyXHViNGQzXHViNGQ0XHViNGQ2Iiw1LCJcdWI0ZGVcdWI0ZGZcdWI0ZTFcdWI0''@;'; put 'put ''ZTJcdWI0ZTVcdWI0ZTciLDQsIlx1YjRlZVx1YjRmMFx1YjRmMiIsNSwiXHViNGY5IiwyNiwiXHViNTE2XHViNTE3XHViNTE5XHViNTFhXHViNTFkIl0sWyI4YjQxIiwiXHViNTFlIiw1LCJcdWI1MjZcdWI1MmIiLDQsIlx1YjUzMlx1YjUzM1x1YjUzNVx1YjUzNlx1YjUzN1x1YjUzOSIsNiwi''@;'; put 'put ''XHViNTQyXHViNTQ2Il0sWyI4YjYxIiwiXHViNTQ3XHViNTQ4XHViNTQ5XHViNTRhXHViNTRlXHViNTRmXHViNTUxXHViNTUyXHViNTUzXHViNTU1Iiw2LCJcdWI1NWVcdWI1NjIiLDhdLFsiOGI4MSIsIlx1YjU2YiIsNTIsIlx1YjVhMlx1YjVhM1x1YjVhNVx1YjVhNlx1YjVhN1x1YjVhOVx1''@;'; put 'put ''YjVhY1x1YjVhZFx1YjVhZVx1YjVhZlx1YjViMlx1YjViNiIsNCwiXHViNWJlXHViNWJmXHViNWMxXHViNWMyXHViNWMzXHViNWM1Iiw2LCJcdWI1Y2VcdWI1ZDIiLDUsIlx1YjVkOSIsMTgsIlx1YjVlZCIsMThdLFsiOGM0MSIsIlx1YjYwMCIsMTUsIlx1YjYxMlx1YjYxM1x1YjYxNVx1YjYx''@;'; put 'put ''Nlx1YjYxN1x1YjYxOSIsNF0sWyI4YzYxIiwiXHViNjFlIiw2LCJcdWI2MjYiLDUsIlx1YjYyZCIsNiwiXHViNjM1Iiw1XSxbIjhjODEiLCJcdWI2M2IiLDEyLCJcdWI2NDkiLDI2LCJcdWI2NjVcdWI2NjZcdWI2NjdcdWI2NjkiLDUwLCJcdWI2OWVcdWI2OWZcdWI2YTFcdWI2YTJcdWI2YTNc''@;'; put 'put ''dWI2YTUiLDUsIlx1YjZhZFx1YjZhZVx1YjZhZlx1YjZiMFx1YjZiMiIsMTZdLFsiOGQ0MSIsIlx1YjZjMyIsMTYsIlx1YjZkNSIsOF0sWyI4ZDYxIiwiXHViNmRlIiwxNywiXHViNmYxXHViNmYyXHViNmYzXHViNmY1XHViNmY2XHViNmY3XHViNmY5XHViNmZhIl0sWyI4ZDgxIiwiXHViNmZi''@;'; put 'put ''Iiw0LCJcdWI3MDJcdWI3MDNcdWI3MDRcdWI3MDYiLDMzLCJcdWI3MmFcdWI3MmJcdWI3MmRcdWI3MmVcdWI3MzEiLDYsIlx1YjczYVx1YjczYyIsNywiXHViNzQ1XHViNzQ2XHViNzQ3XHViNzQ5XHViNzRhXHViNzRiXHViNzRkIiw2LCJcdWI3NTYiLDksIlx1Yjc2MVx1Yjc2Mlx1Yjc2M1x1''@;'; put 'put ''Yjc2NVx1Yjc2Nlx1Yjc2N1x1Yjc2OSIsNiwiXHViNzcyXHViNzc0XHViNzc2Iiw1LCJcdWI3N2VcdWI3N2ZcdWI3ODFcdWI3ODJcdWI3ODNcdWI3ODUiLDYsIlx1Yjc4ZVx1Yjc5M1x1Yjc5NFx1Yjc5NVx1Yjc5YVx1Yjc5Ylx1Yjc5ZFx1Yjc5ZSJdLFsiOGU0MSIsIlx1Yjc5Zlx1YjdhMSIs''@;'; put 'put ''NiwiXHViN2FhXHViN2FlIiw1LCJcdWI3YjZcdWI3YjdcdWI3YjkiLDhdLFsiOGU2MSIsIlx1YjdjMiIsNCwiXHViN2M4XHViN2NhIiwxOV0sWyI4ZTgxIiwiXHViN2RlIiwxMywiXHViN2VlXHViN2VmXHViN2YxXHViN2YyXHViN2YzXHViN2Y1Iiw2LCJcdWI3ZmVcdWI4MDIiLDQsIlx1Yjgw''@;'; put 'put ''YVx1YjgwYlx1YjgwZFx1YjgwZVx1YjgwZlx1YjgxMSIsNiwiXHViODFhXHViODFjXHViODFlIiw1LCJcdWI4MjZcdWI4MjdcdWI4MjlcdWI4MmFcdWI4MmJcdWI4MmQiLDYsIlx1YjgzNlx1YjgzYSIsNSwiXHViODQxXHViODQyXHViODQzXHViODQ1IiwxMSwiXHViODUyXHViODU0Iiw3LCJc''@;'; put 'put ''dWI4NWVcdWI4NWZcdWI4NjFcdWI4NjJcdWI4NjNcdWI4NjUiLDYsIlx1Yjg2ZVx1Yjg3MFx1Yjg3MiIsNSwiXHViODc5XHViODdhXHViODdiXHViODdkIiw3XSxbIjhmNDEiLCJcdWI4ODUiLDcsIlx1Yjg4ZSIsMTddLFsiOGY2MSIsIlx1YjhhMCIsNywiXHViOGE5Iiw2LCJcdWI4YjFcdWI4''@;'; put 'put ''YjJcdWI4YjNcdWI4YjVcdWI4YjZcdWI4YjdcdWI4YjkiLDRdLFsiOGY4MSIsIlx1YjhiZVx1YjhiZlx1YjhjMlx1YjhjNFx1YjhjNiIsNSwiXHViOGNkXHViOGNlXHViOGNmXHViOGQxXHViOGQyXHViOGQzXHViOGQ1Iiw3LCJcdWI4ZGVcdWI4ZTBcdWI4ZTIiLDUsIlx1YjhlYVx1YjhlYlx1''@;'; put 'put ''YjhlZFx1YjhlZVx1YjhlZlx1YjhmMSIsNiwiXHViOGZhXHViOGZjXHViOGZlIiw1LCJcdWI5MDUiLDE4LCJcdWI5MTkiLDYsIlx1YjkyMSIsMjYsIlx1YjkzZVx1YjkzZlx1Yjk0MVx1Yjk0Mlx1Yjk0M1x1Yjk0NSIsNiwiXHViOTRkXHViOTRlXHViOTUwXHViOTUyIiw1XSxbIjkwNDEiLCJc''@;'; put 'put ''dWI5NWFcdWI5NWJcdWI5NWRcdWI5NWVcdWI5NWZcdWI5NjEiLDYsIlx1Yjk2YVx1Yjk2Y1x1Yjk2ZSIsNSwiXHViOTc2XHViOTc3XHViOTc5XHViOTdhXHViOTdiXHViOTdkIl0sWyI5MDYxIiwiXHViOTdlIiw1LCJcdWI5ODZcdWI5ODhcdWI5OGJcdWI5OGNcdWI5OGYiLDE1XSxbIjkwODEi''@;'; put 'put ''LCJcdWI5OWYiLDEyLCJcdWI5YWVcdWI5YWZcdWI5YjFcdWI5YjJcdWI5YjNcdWI5YjUiLDYsIlx1YjliZVx1YjljMFx1YjljMiIsNSwiXHViOWNhXHViOWNiXHViOWNkXHViOWQzIiw0LCJcdWI5ZGFcdWI5ZGNcdWI5ZGZcdWI5ZTBcdWI5ZTJcdWI5ZTZcdWI5ZTdcdWI5ZTlcdWI5ZWFcdWI5''@;'; put 'put ''ZWJcdWI5ZWQiLDYsIlx1YjlmNlx1YjlmYiIsNCwiXHViYTAyIiw1LCJcdWJhMDkiLDExLCJcdWJhMTYiLDMzLCJcdWJhM2FcdWJhM2JcdWJhM2RcdWJhM2VcdWJhM2ZcdWJhNDFcdWJhNDNcdWJhNDRcdWJhNDVcdWJhNDYiXSxbIjkxNDEiLCJcdWJhNDdcdWJhNGFcdWJhNGNcdWJhNGZcdWJh''@;'; put 'put ''NTBcdWJhNTFcdWJhNTJcdWJhNTZcdWJhNTdcdWJhNTlcdWJhNWFcdWJhNWJcdWJhNWQiLDYsIlx1YmE2Nlx1YmE2YSIsNV0sWyI5MTYxIiwiXHViYTcyXHViYTczXHViYTc1XHViYTc2XHViYTc3XHViYTc5Iiw5LCJcdWJhODZcdWJhODhcdWJhODlcdWJhOGFcdWJhOGJcdWJhOGQiLDVdLFsi''@;'; put 'put ''OTE4MSIsIlx1YmE5MyIsMjAsIlx1YmFhYVx1YmFhZFx1YmFhZVx1YmFhZlx1YmFiMVx1YmFiMyIsNCwiXHViYWJhXHViYWJjXHViYWJlIiw1LCJcdWJhYzVcdWJhYzZcdWJhYzdcdWJhYzkiLDE0LCJcdWJhZGEiLDMzLCJcdWJhZmRcdWJhZmVcdWJhZmZcdWJiMDFcdWJiMDJcdWJiMDNcdWJi''@;'; put 'put ''MDUiLDcsIlx1YmIwZVx1YmIxMFx1YmIxMiIsNSwiXHViYjE5XHViYjFhXHViYjFiXHViYjFkXHViYjFlXHViYjFmXHViYjIxIiw2XSxbIjkyNDEiLCJcdWJiMjhcdWJiMmFcdWJiMmMiLDcsIlx1YmIzN1x1YmIzOVx1YmIzYVx1YmIzZiIsNCwiXHViYjQ2XHViYjQ4XHViYjRhXHViYjRiXHVi''@;'; put 'put ''YjRjXHViYjRlXHViYjUxXHViYjUyIl0sWyI5MjYxIiwiXHViYjUzXHViYjU1XHViYjU2XHViYjU3XHViYjU5Iiw3LCJcdWJiNjJcdWJiNjQiLDcsIlx1YmI2ZCIsNF0sWyI5MjgxIiwiXHViYjcyIiwyMSwiXHViYjg5XHViYjhhXHViYjhiXHViYjhkXHViYjhlXHViYjhmXHViYjkxIiwxOCwi''@;'; put 'put ''XHViYmE1XHViYmE2XHViYmE3XHViYmE5XHViYmFhXHViYmFiXHViYmFkIiw2LCJcdWJiYjVcdWJiYjZcdWJiYjgiLDcsIlx1YmJjMVx1YmJjMlx1YmJjM1x1YmJjNVx1YmJjNlx1YmJjN1x1YmJjOSIsNiwiXHViYmQxXHViYmQyXHViYmQ0IiwzNSwiXHViYmZhXHViYmZiXHViYmZkXHViYmZl''@;'; put 'put ''XHViYzAxIl0sWyI5MzQxIiwiXHViYzAzIiw0LCJcdWJjMGFcdWJjMGVcdWJjMTBcdWJjMTJcdWJjMTNcdWJjMTlcdWJjMWFcdWJjMjBcdWJjMjFcdWJjMjJcdWJjMjNcdWJjMjZcdWJjMjhcdWJjMmFcdWJjMmJcdWJjMmNcdWJjMmVcdWJjMmZcdWJjMzJcdWJjMzNcdWJjMzUiXSxbIjkzNjEi''@;'; put 'put ''LCJcdWJjMzZcdWJjMzdcdWJjMzkiLDYsIlx1YmM0Mlx1YmM0Nlx1YmM0N1x1YmM0OFx1YmM0YVx1YmM0Ylx1YmM0ZVx1YmM0Zlx1YmM1MSIsOF0sWyI5MzgxIiwiXHViYzVhXHViYzViXHViYzVjXHViYzVlIiwzNywiXHViYzg2XHViYzg3XHViYzg5XHViYzhhXHViYzhkXHViYzhmIiw0LCJc''@;'; put 'put ''dWJjOTZcdWJjOThcdWJjOWIiLDQsIlx1YmNhMlx1YmNhM1x1YmNhNVx1YmNhNlx1YmNhOSIsNiwiXHViY2IyXHViY2I2Iiw1LCJcdWJjYmVcdWJjYmZcdWJjYzFcdWJjYzJcdWJjYzNcdWJjYzUiLDcsIlx1YmNjZVx1YmNkMlx1YmNkM1x1YmNkNFx1YmNkNlx1YmNkN1x1YmNkOVx1YmNkYVx1''@;'; put 'put ''YmNkYlx1YmNkZCIsMjIsIlx1YmNmN1x1YmNmOVx1YmNmYVx1YmNmYlx1YmNmZCJdLFsiOTQ0MSIsIlx1YmNmZSIsNSwiXHViZDA2XHViZDA4XHViZDBhIiw1LCJcdWJkMTFcdWJkMTJcdWJkMTNcdWJkMTUiLDhdLFsiOTQ2MSIsIlx1YmQxZSIsNSwiXHViZDI1Iiw2LCJcdWJkMmQiLDEyXSxb''@;'; put 'put ''Ijk0ODEiLCJcdWJkM2EiLDUsIlx1YmQ0MSIsNiwiXHViZDRhXHViZDRiXHViZDRkXHViZDRlXHViZDRmXHViZDUxIiw2LCJcdWJkNWEiLDksIlx1YmQ2NVx1YmQ2Nlx1YmQ2N1x1YmQ2OSIsMjIsIlx1YmQ4Mlx1YmQ4M1x1YmQ4NVx1YmQ4Nlx1YmQ4YiIsNCwiXHViZDkyXHViZDk0XHViZDk2''@;'; put 'put ''XHViZDk3XHViZDk4XHViZDliXHViZDlkIiw2LCJcdWJkYTUiLDEwLCJcdWJkYjEiLDYsIlx1YmRiOSIsMjRdLFsiOTU0MSIsIlx1YmRkMlx1YmRkM1x1YmRkNlx1YmRkN1x1YmRkOVx1YmRkYVx1YmRkYlx1YmRkZCIsMTEsIlx1YmRlYSIsNSwiXHViZGYxIl0sWyI5NTYxIiwiXHViZGYyXHVi''@;'; put 'put ''ZGYzXHViZGY1XHViZGY2XHViZGY3XHViZGY5Iiw2LCJcdWJlMDFcdWJlMDJcdWJlMDRcdWJlMDYiLDUsIlx1YmUwZVx1YmUwZlx1YmUxMVx1YmUxMlx1YmUxMyJdLFsiOTU4MSIsIlx1YmUxNSIsNiwiXHViZTFlXHViZTIwIiwzNSwiXHViZTQ2XHViZTQ3XHViZTQ5XHViZTRhXHViZTRiXHVi''@;'; put 'put ''ZTRkXHViZTRmIiw0LCJcdWJlNTZcdWJlNThcdWJlNWNcdWJlNWRcdWJlNWVcdWJlNWZcdWJlNjJcdWJlNjNcdWJlNjVcdWJlNjZcdWJlNjdcdWJlNjlcdWJlNmIiLDQsIlx1YmU3Mlx1YmU3NiIsNCwiXHViZTdlXHViZTdmXHViZTgxXHViZTgyXHViZTgzXHViZTg1Iiw2LCJcdWJlOGVcdWJl''@;'; put 'put ''OTIiLDUsIlx1YmU5YSIsMTMsIlx1YmVhOSIsMTRdLFsiOTY0MSIsIlx1YmViOCIsMjMsIlx1YmVkMlx1YmVkMyJdLFsiOTY2MSIsIlx1YmVkNVx1YmVkNlx1YmVkOSIsNiwiXHViZWUxXHViZWUyXHViZWU2Iiw1LCJcdWJlZWQiLDhdLFsiOTY4MSIsIlx1YmVmNiIsMTAsIlx1YmYwMiIsNSwi''@;'; put 'put ''XHViZjBhIiwxMywiXHViZjFhXHViZjFlIiwzMywiXHViZjQyXHViZjQzXHViZjQ1XHViZjQ2XHViZjQ3XHViZjQ5Iiw2LCJcdWJmNTJcdWJmNTNcdWJmNTRcdWJmNTYiLDQ0XSxbIjk3NDEiLCJcdWJmODMiLDE2LCJcdWJmOTUiLDhdLFsiOTc2MSIsIlx1YmY5ZSIsMTcsIlx1YmZiMSIsN10s''@;'; put 'put ''WyI5NzgxIiwiXHViZmI5IiwxMSwiXHViZmM2Iiw1LCJcdWJmY2VcdWJmY2ZcdWJmZDFcdWJmZDJcdWJmZDNcdWJmZDUiLDYsIlx1YmZkZFx1YmZkZVx1YmZlMFx1YmZlMiIsODksIlx1YzAzZFx1YzAzZVx1YzAzZiJdLFsiOTg0MSIsIlx1YzA0MCIsMTYsIlx1YzA1MiIsNSwiXHVjMDU5XHVj''@;'; put 'put ''MDVhXHVjMDViIl0sWyI5ODYxIiwiXHVjMDVkXHVjMDVlXHVjMDVmXHVjMDYxIiw2LCJcdWMwNmEiLDE1XSxbIjk4ODEiLCJcdWMwN2EiLDIxLCJcdWMwOTJcdWMwOTNcdWMwOTVcdWMwOTZcdWMwOTdcdWMwOTkiLDYsIlx1YzBhMlx1YzBhNFx1YzBhNiIsNSwiXHVjMGFlXHVjMGIxXHVjMGIy''@;'; put 'put ''XHVjMGI3Iiw0LCJcdWMwYmVcdWMwYzJcdWMwYzNcdWMwYzRcdWMwYzZcdWMwYzdcdWMwY2FcdWMwY2JcdWMwY2RcdWMwY2VcdWMwY2ZcdWMwZDEiLDYsIlx1YzBkYVx1YzBkZSIsNSwiXHVjMGU2XHVjMGU3XHVjMGU5XHVjMGVhXHVjMGViXHVjMGVkIiw2LCJcdWMwZjZcdWMwZjhcdWMwZmEi''@;'; put 'put ''LDUsIlx1YzEwMVx1YzEwMlx1YzEwM1x1YzEwNVx1YzEwNlx1YzEwN1x1YzEwOSIsNiwiXHVjMTExXHVjMTEyXHVjMTEzXHVjMTE0XHVjMTE2Iiw1LCJcdWMxMjFcdWMxMjJcdWMxMjVcdWMxMjhcdWMxMjlcdWMxMmFcdWMxMmJcdWMxMmUiXSxbIjk5NDEiLCJcdWMxMzJcdWMxMzNcdWMxMzRc''@;'; put 'put ''dWMxMzVcdWMxMzdcdWMxM2FcdWMxM2JcdWMxM2RcdWMxM2VcdWMxM2ZcdWMxNDEiLDYsIlx1YzE0YVx1YzE0ZSIsNSwiXHVjMTU2XHVjMTU3Il0sWyI5OTYxIiwiXHVjMTU5XHVjMTVhXHVjMTViXHVjMTVkIiw2LCJcdWMxNjZcdWMxNmEiLDUsIlx1YzE3MVx1YzE3Mlx1YzE3M1x1YzE3NVx1''@;'; put 'put ''YzE3Nlx1YzE3N1x1YzE3OVx1YzE3YVx1YzE3YiJdLFsiOTk4MSIsIlx1YzE3YyIsOCwiXHVjMTg2Iiw1LCJcdWMxOGZcdWMxOTFcdWMxOTJcdWMxOTNcdWMxOTVcdWMxOTciLDQsIlx1YzE5ZVx1YzFhMFx1YzFhMlx1YzFhM1x1YzFhNFx1YzFhNlx1YzFhN1x1YzFhYVx1YzFhYlx1YzFhZFx1''@;'; put 'put ''YzFhZVx1YzFhZlx1YzFiMSIsMTEsIlx1YzFiZSIsNSwiXHVjMWM1XHVjMWM2XHVjMWM3XHVjMWM5XHVjMWNhXHVjMWNiXHVjMWNkIiw2LCJcdWMxZDVcdWMxZDZcdWMxZDkiLDYsIlx1YzFlMVx1YzFlMlx1YzFlM1x1YzFlNVx1YzFlNlx1YzFlN1x1YzFlOSIsNiwiXHVjMWYyXHVjMWY0Iiw3''@;'; put 'put ''LCJcdWMxZmVcdWMxZmZcdWMyMDFcdWMyMDJcdWMyMDNcdWMyMDUiLDYsIlx1YzIwZVx1YzIxMFx1YzIxMiIsNSwiXHVjMjFhXHVjMjFiXHVjMjFkXHVjMjFlXHVjMjIxXHVjMjIyXHVjMjIzIl0sWyI5YTQxIiwiXHVjMjI0XHVjMjI1XHVjMjI2XHVjMjI3XHVjMjJhXHVjMjJjXHVjMjJlXHVj''@;'; put 'put ''MjMwXHVjMjMzXHVjMjM1IiwxNl0sWyI5YTYxIiwiXHVjMjQ2XHVjMjQ3XHVjMjQ5Iiw2LCJcdWMyNTJcdWMyNTNcdWMyNTVcdWMyNTZcdWMyNTdcdWMyNTkiLDYsIlx1YzI2MVx1YzI2Mlx1YzI2M1x1YzI2NFx1YzI2NiJdLFsiOWE4MSIsIlx1YzI2NyIsNCwiXHVjMjZlXHVjMjZmXHVjMjcx''@;'; put 'put ''XHVjMjcyXHVjMjczXHVjMjc1Iiw2LCJcdWMyN2VcdWMyODBcdWMyODIiLDUsIlx1YzI4YSIsNSwiXHVjMjkxIiw2LCJcdWMyOTlcdWMyOWFcdWMyOWNcdWMyOWUiLDUsIlx1YzJhNlx1YzJhN1x1YzJhOVx1YzJhYVx1YzJhYlx1YzJhZSIsNSwiXHVjMmI2XHVjMmI4XHVjMmJhIiwzMywiXHVj''@;'; put 'put ''MmRlXHVjMmRmXHVjMmUxXHVjMmUyXHVjMmU1Iiw1LCJcdWMyZWVcdWMyZjBcdWMyZjJcdWMyZjNcdWMyZjRcdWMyZjVcdWMyZjdcdWMyZmFcdWMyZmRcdWMyZmVcdWMyZmZcdWMzMDEiLDYsIlx1YzMwYVx1YzMwYlx1YzMwZVx1YzMwZiJdLFsiOWI0MSIsIlx1YzMxMFx1YzMxMVx1YzMxMlx1''@;'; put 'put ''YzMxNlx1YzMxN1x1YzMxOVx1YzMxYVx1YzMxYlx1YzMxZCIsNiwiXHVjMzI2XHVjMzI3XHVjMzJhIiw4XSxbIjliNjEiLCJcdWMzMzMiLDE3LCJcdWMzNDYiLDddLFsiOWI4MSIsIlx1YzM0ZSIsMjUsIlx1YzM2YVx1YzM2Ylx1YzM2ZFx1YzM2ZVx1YzM2Zlx1YzM3MVx1YzM3MyIsNCwiXHVj''@;'; put 'put ''MzdhXHVjMzdiXHVjMzdlIiw1LCJcdWMzODVcdWMzODZcdWMzODdcdWMzODlcdWMzOGFcdWMzOGJcdWMzOGQiLDUwLCJcdWMzYzEiLDIyLCJcdWMzZGEiXSxbIjljNDEiLCJcdWMzZGJcdWMzZGRcdWMzZGVcdWMzZTFcdWMzZTMiLDQsIlx1YzNlYVx1YzNlYlx1YzNlY1x1YzNlZSIsNSwiXHVj''@;'; put 'put ''M2Y2XHVjM2Y3XHVjM2Y5Iiw1XSxbIjljNjEiLCJcdWMzZmYiLDgsIlx1YzQwOSIsNiwiXHVjNDExIiw5XSxbIjljODEiLCJcdWM0MWIiLDgsIlx1YzQyNSIsNiwiXHVjNDJkXHVjNDJlXHVjNDJmXHVjNDMxXHVjNDMyXHVjNDMzXHVjNDM1Iiw2LCJcdWM0M2UiLDksIlx1YzQ0OSIsMjYsIlx1''@;'; put 'put ''YzQ2Nlx1YzQ2N1x1YzQ2OVx1YzQ2YVx1YzQ2Ylx1YzQ2ZCIsNiwiXHVjNDc2XHVjNDc3XHVjNDc4XHVjNDdhIiw1LCJcdWM0ODEiLDE4LCJcdWM0OTUiLDYsIlx1YzQ5ZCIsMTJdLFsiOWQ0MSIsIlx1YzRhYSIsMTMsIlx1YzRiOVx1YzRiYVx1YzRiYlx1YzRiZCIsOF0sWyI5ZDYxIiwiXHVj''@;'; put 'put ''NGM2IiwyNV0sWyI5ZDgxIiwiXHVjNGUwIiw4LCJcdWM0ZWEiLDUsIlx1YzRmMlx1YzRmM1x1YzRmNVx1YzRmNlx1YzRmN1x1YzRmOVx1YzRmYlx1YzRmY1x1YzRmZFx1YzRmZVx1YzUwMiIsOSwiXHVjNTBkXHVjNTBlXHVjNTBmXHVjNTExXHVjNTEyXHVjNTEzXHVjNTE1Iiw2LCJcdWM1MWQi''@;'; put 'put ''LDEwLCJcdWM1MmFcdWM1MmJcdWM1MmRcdWM1MmVcdWM1MmZcdWM1MzEiLDYsIlx1YzUzYVx1YzUzY1x1YzUzZSIsNSwiXHVjNTQ2XHVjNTQ3XHVjNTRiXHVjNTRmXHVjNTUwXHVjNTUxXHVjNTUyXHVjNTU2XHVjNTVhXHVjNTViXHVjNTVjXHVjNTVmXHVjNTYyXHVjNTYzXHVjNTY1XHVjNTY2''@;'; put 'put ''XHVjNTY3XHVjNTY5Iiw2LCJcdWM1NzJcdWM1NzYiLDUsIlx1YzU3ZVx1YzU3Zlx1YzU4MVx1YzU4Mlx1YzU4M1x1YzU4NVx1YzU4Nlx1YzU4OFx1YzU4OVx1YzU4YVx1YzU4Ylx1YzU4ZVx1YzU5MFx1YzU5Mlx1YzU5M1x1YzU5NCJdLFsiOWU0MSIsIlx1YzU5Nlx1YzU5OVx1YzU5YVx1YzU5''@;'; put 'put ''Ylx1YzU5ZFx1YzU5ZVx1YzU5Zlx1YzVhMSIsNywiXHVjNWFhIiw5LCJcdWM1YjYiXSxbIjllNjEiLCJcdWM1YjdcdWM1YmFcdWM1YmYiLDQsIlx1YzVjYlx1YzVjZFx1YzVjZlx1YzVkMlx1YzVkM1x1YzVkNVx1YzVkNlx1YzVkN1x1YzVkOSIsNiwiXHVjNWUyXHVjNWU0XHVjNWU2XHVjNWU3''@;'; put 'put ''Il0sWyI5ZTgxIiwiXHVjNWU4XHVjNWU5XHVjNWVhXHVjNWViXHVjNWVmXHVjNWYxXHVjNWYyXHVjNWYzXHVjNWY1XHVjNWY4XHVjNWY5XHVjNWZhXHVjNWZiXHVjNjAyXHVjNjAzXHVjNjA0XHVjNjA5XHVjNjBhXHVjNjBiXHVjNjBkXHVjNjBlXHVjNjBmXHVjNjExIiw2LCJcdWM2MWFcdWM2''@;'; put 'put ''MWQiLDYsIlx1YzYyNlx1YzYyN1x1YzYyOVx1YzYyYVx1YzYyYlx1YzYyZlx1YzYzMVx1YzYzMlx1YzYzNlx1YzYzOFx1YzYzYVx1YzYzY1x1YzYzZFx1YzYzZVx1YzYzZlx1YzY0Mlx1YzY0M1x1YzY0NVx1YzY0Nlx1YzY0N1x1YzY0OSIsNiwiXHVjNjUyXHVjNjU2Iiw1LCJcdWM2NWVcdWM2''@;'; put 'put ''NWZcdWM2NjEiLDEwLCJcdWM2NmRcdWM2NmVcdWM2NzBcdWM2NzIiLDUsIlx1YzY3YVx1YzY3Ylx1YzY3ZFx1YzY3ZVx1YzY3Zlx1YzY4MSIsNiwiXHVjNjhhXHVjNjhjXHVjNjhlIiw1LCJcdWM2OTZcdWM2OTdcdWM2OTlcdWM2OWFcdWM2OWJcdWM2OWQiLDYsIlx1YzZhNiJdLFsiOWY0MSIs''@;'; put 'put ''Ilx1YzZhOFx1YzZhYSIsNSwiXHVjNmIyXHVjNmIzXHVjNmI1XHVjNmI2XHVjNmI3XHVjNmJiIiw0LCJcdWM2YzJcdWM2YzRcdWM2YzYiLDUsIlx1YzZjZSJdLFsiOWY2MSIsIlx1YzZjZlx1YzZkMVx1YzZkMlx1YzZkM1x1YzZkNSIsNiwiXHVjNmRlXHVjNmRmXHVjNmUyIiw1LCJcdWM2ZWFc''@;'; put 'put ''dWM2ZWJcdWM2ZWRcdWM2ZWVcdWM2ZWZcdWM2ZjFcdWM2ZjIiXSxbIjlmODEiLCJcdWM2ZjMiLDQsIlx1YzZmYVx1YzZmYlx1YzZmY1x1YzZmZSIsNSwiXHVjNzA2XHVjNzA3XHVjNzA5XHVjNzBhXHVjNzBiXHVjNzBkIiw2LCJcdWM3MTZcdWM3MThcdWM3MWEiLDUsIlx1YzcyMlx1YzcyM1x1''@;'; put 'put ''YzcyNVx1YzcyNlx1YzcyN1x1YzcyOSIsNiwiXHVjNzMyXHVjNzM0XHVjNzM2XHVjNzM4XHVjNzM5XHVjNzNhXHVjNzNiXHVjNzNlXHVjNzNmXHVjNzQxXHVjNzQyXHVjNzQzXHVjNzQ1Iiw0LCJcdWM3NGJcdWM3NGVcdWM3NTBcdWM3NTlcdWM3NWFcdWM3NWJcdWM3NWRcdWM3NWVcdWM3NWZc''@;'; put 'put ''dWM3NjEiLDYsIlx1Yzc2OVx1Yzc2YVx1Yzc2YyIsNywiXHVjNzc2XHVjNzc3XHVjNzc5XHVjNzdhXHVjNzdiXHVjNzdmXHVjNzgwXHVjNzgxXHVjNzgyXHVjNzg2XHVjNzhiXHVjNzhjXHVjNzhkXHVjNzhmXHVjNzkyXHVjNzkzXHVjNzk1XHVjNzk5XHVjNzliIiw0LCJcdWM3YTJcdWM3YTci''@;'; put 'put ''LDQsIlx1YzdhZVx1YzdhZlx1YzdiMVx1YzdiMlx1YzdiM1x1YzdiNVx1YzdiNlx1YzdiNyJdLFsiYTA0MSIsIlx1YzdiOFx1YzdiOVx1YzdiYVx1YzdiYlx1YzdiZVx1YzdjMiIsNSwiXHVjN2NhXHVjN2NiXHVjN2NkXHVjN2NmXHVjN2QxIiw2LCJcdWM3ZDlcdWM3ZGFcdWM3ZGJcdWM3ZGMi''@;'; put 'put ''XSxbImEwNjEiLCJcdWM3ZGUiLDUsIlx1YzdlNVx1YzdlNlx1YzdlN1x1YzdlOVx1YzdlYVx1YzdlYlx1YzdlZCIsMTNdLFsiYTA4MSIsIlx1YzdmYiIsNCwiXHVjODAyXHVjODAzXHVjODA1XHVjODA2XHVjODA3XHVjODA5XHVjODBiIiw0LCJcdWM4MTJcdWM4MTRcdWM4MTciLDQsIlx1Yzgx''@;'; put 'put ''ZVx1YzgxZlx1YzgyMVx1YzgyMlx1YzgyM1x1YzgyNSIsNiwiXHVjODJlXHVjODMwXHVjODMyIiw1LCJcdWM4MzlcdWM4M2FcdWM4M2JcdWM4M2RcdWM4M2VcdWM4M2ZcdWM4NDEiLDYsIlx1Yzg0YVx1Yzg0Ylx1Yzg0ZSIsNSwiXHVjODU1IiwyNiwiXHVjODcyXHVjODczXHVjODc1XHVjODc2''@;'; put 'put ''XHVjODc3XHVjODc5XHVjODdiIiw0LCJcdWM4ODJcdWM4ODRcdWM4ODhcdWM4ODlcdWM4OGFcdWM4OGUiLDUsIlx1Yzg5NSIsNywiXHVjODllXHVjOGEwXHVjOGEyXHVjOGEzXHVjOGE0Il0sWyJhMTQxIiwiXHVjOGE1XHVjOGE2XHVjOGE3XHVjOGE5IiwxOCwiXHVjOGJlXHVjOGJmXHVjOGMw''@;'; put 'put ''XHVjOGMxIl0sWyJhMTYxIiwiXHVjOGMyXHVjOGMzXHVjOGM1XHVjOGM2XHVjOGM3XHVjOGM5XHVjOGNhXHVjOGNiXHVjOGNkIiw2LCJcdWM4ZDZcdWM4ZDhcdWM4ZGEiLDUsIlx1YzhlMlx1YzhlM1x1YzhlNSJdLFsiYTE4MSIsIlx1YzhlNiIsMTQsIlx1YzhmNiIsNSwiXHVjOGZlXHVjOGZm''@;'; put 'put ''XHVjOTAxXHVjOTAyXHVjOTAzXHVjOTA3Iiw0LCJcdWM5MGVcdTMwMDBcdTMwMDFcdTMwMDJceGI3XHUyMDI1XHUyMDI2XHhhOFx1MzAwM1x4YWRcdTIwMTVcdTIyMjVcdWZmM2NcdTIyM2NcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTMwMTRcdTMwMTVcdTMwMDgiLDksIlx4YjFceGQ3XHhm''@;'; put 'put ''N1x1MjI2MFx1MjI2NFx1MjI2NVx1MjIxZVx1MjIzNFx4YjBcdTIwMzJcdTIwMzNcdTIxMDNcdTIxMmJcdWZmZTBcdWZmZTFcdWZmZTVcdTI2NDJcdTI2NDBcdTIyMjBcdTIyYTVcdTIzMTJcdTIyMDJcdTIyMDdcdTIyNjFcdTIyNTJceGE3XHUyMDNiXHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNm''@;'; put 'put ''XHUyNWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyNWJkXHUyNWJjXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUyMTk0XHUzMDEzXHUyMjZhXHUyMjZiXHUyMjFhXHUyMjNkXHUyMjFkXHUyMjM1XHUyMjJiXHUyMjJjXHUyMjA4XHUyMjBiXHUyMjg2XHUyMjg3XHUy''@;'; put 'put ''MjgyXHUyMjgzXHUyMjJhXHUyMjI5XHUyMjI3XHUyMjI4XHVmZmUyIl0sWyJhMjQxIiwiXHVjOTEwXHVjOTEyIiw1LCJcdWM5MTkiLDE4XSxbImEyNjEiLCJcdWM5MmQiLDYsIlx1YzkzNSIsMThdLFsiYTI4MSIsIlx1Yzk0OCIsNywiXHVjOTUyXHVjOTUzXHVjOTU1XHVjOTU2XHVjOTU3XHVj''@;'; put 'put ''OTU5Iiw2LCJcdWM5NjJcdWM5NjQiLDcsIlx1Yzk2ZFx1Yzk2ZVx1Yzk2Zlx1MjFkMlx1MjFkNFx1MjIwMFx1MjIwM1x4YjRcdWZmNWVcdTAyYzdcdTAyZDhcdTAyZGRcdTAyZGFcdTAyZDlceGI4XHUwMmRiXHhhMVx4YmZcdTAyZDBcdTIyMmVcdTIyMTFcdTIyMGZceGE0XHUyMTA5XHUyMDMw''@;'; put 'put ''XHUyNWMxXHUyNWMwXHUyNWI3XHUyNWI2XHUyNjY0XHUyNjYwXHUyNjYxXHUyNjY1XHUyNjY3XHUyNjYzXHUyMjk5XHUyNWM4XHUyNWEzXHUyNWQwXHUyNWQxXHUyNTkyXHUyNWE0XHUyNWE1XHUyNWE4XHUyNWE3XHUyNWE2XHUyNWE5XHUyNjY4XHUyNjBmXHUyNjBlXHUyNjFjXHUyNjFlXHhi''@;'; put 'put ''Nlx1MjAyMFx1MjAyMVx1MjE5NVx1MjE5N1x1MjE5OVx1MjE5Nlx1MjE5OFx1MjY2ZFx1MjY2OVx1MjY2YVx1MjY2Y1x1MzI3Zlx1MzIxY1x1MjExNlx1MzNjN1x1MjEyMlx1MzNjMlx1MzNkOFx1MjEyMVx1MjBhY1x4YWUiXSxbImEzNDEiLCJcdWM5NzFcdWM5NzJcdWM5NzNcdWM5NzUiLDYs''@;'; put 'put ''Ilx1Yzk3ZCIsMTAsIlx1Yzk4YVx1Yzk4Ylx1Yzk4ZFx1Yzk4ZVx1Yzk4ZiJdLFsiYTM2MSIsIlx1Yzk5MSIsNiwiXHVjOTlhXHVjOTljXHVjOTllIiwxNl0sWyJhMzgxIiwiXHVjOWFmIiwxNiwiXHVjOWMyXHVjOWMzXHVjOWM1XHVjOWM2XHVjOWM5XHVjOWNiIiw0LCJcdWM5ZDJcdWM5ZDRc''@;'; put 'put ''dWM5ZDdcdWM5ZDhcdWM5ZGJcdWZmMDEiLDU4LCJcdWZmZTZcdWZmM2QiLDMyLCJcdWZmZTMiXSxbImE0NDEiLCJcdWM5ZGVcdWM5ZGZcdWM5ZTFcdWM5ZTNcdWM5ZTVcdWM5ZTZcdWM5ZThcdWM5ZTlcdWM5ZWFcdWM5ZWJcdWM5ZWVcdWM5ZjIiLDUsIlx1YzlmYVx1YzlmYlx1YzlmZFx1Yzlm''@;'; put 'put ''ZVx1YzlmZlx1Y2EwMVx1Y2EwMlx1Y2EwM1x1Y2EwNCJdLFsiYTQ2MSIsIlx1Y2EwNVx1Y2EwNlx1Y2EwN1x1Y2EwYVx1Y2EwZSIsNSwiXHVjYTE1XHVjYTE2XHVjYTE3XHVjYTE5IiwxMl0sWyJhNDgxIiwiXHVjYTI2XHVjYTI3XHVjYTI4XHVjYTJhIiwyOCwiXHUzMTMxIiw5M10sWyJhNTQx''@;'; put 'put ''IiwiXHVjYTQ3Iiw0LCJcdWNhNGVcdWNhNGZcdWNhNTFcdWNhNTJcdWNhNTNcdWNhNTUiLDYsIlx1Y2E1ZVx1Y2E2MiIsNSwiXHVjYTY5XHVjYTZhIl0sWyJhNTYxIiwiXHVjYTZiIiwxNywiXHVjYTdlIiw1LCJcdWNhODVcdWNhODYiXSxbImE1ODEiLCJcdWNhODciLDE2LCJcdWNhOTkiLDE0''@;'; put 'put ''LCJcdTIxNzAiLDldLFsiYTViMCIsIlx1MjE2MCIsOV0sWyJhNWMxIiwiXHUwMzkxIiwxNiwiXHUwM2EzIiw2XSxbImE1ZTEiLCJcdTAzYjEiLDE2LCJcdTAzYzMiLDZdLFsiYTY0MSIsIlx1Y2FhOCIsMTksIlx1Y2FiZVx1Y2FiZlx1Y2FjMVx1Y2FjMlx1Y2FjM1x1Y2FjNSJdLFsiYTY2MSIs''@;'; put 'put ''Ilx1Y2FjNiIsNSwiXHVjYWNlXHVjYWQwXHVjYWQyXHVjYWQ0XHVjYWQ1XHVjYWQ2XHVjYWQ3XHVjYWRhIiw1LCJcdWNhZTEiLDZdLFsiYTY4MSIsIlx1Y2FlOFx1Y2FlOVx1Y2FlYVx1Y2FlYlx1Y2FlZCIsNiwiXHVjYWY1IiwxOCwiXHVjYjA5XHVjYjBhXHUyNTAwXHUyNTAyXHUyNTBjXHUy''@;'; put 'put ''NTEwXHUyNTE4XHUyNTE0XHUyNTFjXHUyNTJjXHUyNTI0XHUyNTM0XHUyNTNjXHUyNTAxXHUyNTAzXHUyNTBmXHUyNTEzXHUyNTFiXHUyNTE3XHUyNTIzXHUyNTMzXHUyNTJiXHUyNTNiXHUyNTRiXHUyNTIwXHUyNTJmXHUyNTI4XHUyNTM3XHUyNTNmXHUyNTFkXHUyNTMwXHUyNTI1XHUyNTM4''@;'; put 'put ''XHUyNTQyXHUyNTEyXHUyNTExXHUyNTFhXHUyNTE5XHUyNTE2XHUyNTE1XHUyNTBlXHUyNTBkXHUyNTFlXHUyNTFmXHUyNTIxXHUyNTIyXHUyNTI2XHUyNTI3XHUyNTI5XHUyNTJhXHUyNTJkXHUyNTJlXHUyNTMxXHUyNTMyXHUyNTM1XHUyNTM2XHUyNTM5XHUyNTNhXHUyNTNkXHUyNTNlXHUy''@;'; put 'put ''NTQwXHUyNTQxXHUyNTQzIiw3XSxbImE3NDEiLCJcdWNiMGIiLDQsIlx1Y2IxMVx1Y2IxMlx1Y2IxM1x1Y2IxNVx1Y2IxNlx1Y2IxN1x1Y2IxOSIsNiwiXHVjYjIyIiw3XSxbImE3NjEiLCJcdWNiMmEiLDIyLCJcdWNiNDJcdWNiNDNcdWNiNDQiXSxbImE3ODEiLCJcdWNiNDVcdWNiNDZcdWNi''@;'; put 'put ''NDdcdWNiNGFcdWNiNGJcdWNiNGRcdWNiNGVcdWNiNGZcdWNiNTEiLDYsIlx1Y2I1YVx1Y2I1Ylx1Y2I1Y1x1Y2I1ZSIsNSwiXHVjYjY1Iiw3LCJcdTMzOTVcdTMzOTZcdTMzOTdcdTIxMTNcdTMzOThcdTMzYzRcdTMzYTNcdTMzYTRcdTMzYTVcdTMzYTZcdTMzOTkiLDksIlx1MzNjYVx1MzM4''@;'; put 'put ''ZFx1MzM4ZVx1MzM4Zlx1MzNjZlx1MzM4OFx1MzM4OVx1MzNjOFx1MzNhN1x1MzNhOFx1MzNiMCIsOSwiXHUzMzgwIiw0LCJcdTMzYmEiLDUsIlx1MzM5MCIsNCwiXHUyMTI2XHUzM2MwXHUzM2MxXHUzMzhhXHUzMzhiXHUzMzhjXHUzM2Q2XHUzM2M1XHUzM2FkXHUzM2FlXHUzM2FmXHUzM2Ri''@;'; put 'put ''XHUzM2E5XHUzM2FhXHUzM2FiXHUzM2FjXHUzM2RkXHUzM2QwXHUzM2QzXHUzM2MzXHUzM2M5XHUzM2RjXHUzM2M2Il0sWyJhODQxIiwiXHVjYjZkIiwxMCwiXHVjYjdhIiwxNF0sWyJhODYxIiwiXHVjYjg5IiwxOCwiXHVjYjlkIiw2XSxbImE4ODEiLCJcdWNiYTQiLDE5LCJcdWNiYjkiLDEx''@;'; put 'put ''LCJceGM2XHhkMFx4YWFcdTAxMjYiXSxbImE4YTYiLCJcdTAxMzIiXSxbImE4YTgiLCJcdTAxM2ZcdTAxNDFceGQ4XHUwMTUyXHhiYVx4ZGVcdTAxNjZcdTAxNGEiXSxbImE4YjEiLCJcdTMyNjAiLDI3LCJcdTI0ZDAiLDI1LCJcdTI0NjAiLDE0LCJceGJkXHUyMTUzXHUyMTU0XHhiY1x4YmVc''@;'; put 'put ''dTIxNWJcdTIxNWNcdTIxNWRcdTIxNWUiXSxbImE5NDEiLCJcdWNiYzUiLDE0LCJcdWNiZDUiLDEwXSxbImE5NjEiLCJcdWNiZTBcdWNiZTFcdWNiZTJcdWNiZTNcdWNiZTVcdWNiZTZcdWNiZThcdWNiZWEiLDE4XSxbImE5ODEiLCJcdWNiZmQiLDE0LCJcdWNjMGVcdWNjMGZcdWNjMTFcdWNj''@;'; put 'put ''MTJcdWNjMTNcdWNjMTUiLDYsIlx1Y2MxZVx1Y2MxZlx1Y2MyMFx1Y2MyM1x1Y2MyNFx4ZTZcdTAxMTFceGYwXHUwMTI3XHUwMTMxXHUwMTMzXHUwMTM4XHUwMTQwXHUwMTQyXHhmOFx1MDE1M1x4ZGZceGZlXHUwMTY3XHUwMTRiXHUwMTQ5XHUzMjAwIiwyNywiXHUyNDljIiwyNSwiXHUyNDc0''@;'; put 'put ''IiwxNCwiXHhiOVx4YjJceGIzXHUyMDc0XHUyMDdmXHUyMDgxXHUyMDgyXHUyMDgzXHUyMDg0Il0sWyJhYTQxIiwiXHVjYzI1XHVjYzI2XHVjYzJhXHVjYzJiXHVjYzJkXHVjYzJmXHVjYzMxIiw2LCJcdWNjM2FcdWNjM2YiLDQsIlx1Y2M0Nlx1Y2M0N1x1Y2M0OVx1Y2M0YVx1Y2M0Ylx1Y2M0''@;'; put 'put ''ZFx1Y2M0ZSJdLFsiYWE2MSIsIlx1Y2M0ZiIsNCwiXHVjYzU2XHVjYzVhIiw1LCJcdWNjNjFcdWNjNjJcdWNjNjNcdWNjNjVcdWNjNjdcdWNjNjkiLDYsIlx1Y2M3MVx1Y2M3MiJdLFsiYWE4MSIsIlx1Y2M3M1x1Y2M3NFx1Y2M3NiIsMjksIlx1MzA0MSIsODJdLFsiYWI0MSIsIlx1Y2M5NFx1''@;'; put 'put ''Y2M5NVx1Y2M5Nlx1Y2M5N1x1Y2M5YVx1Y2M5Ylx1Y2M5ZFx1Y2M5ZVx1Y2M5Zlx1Y2NhMSIsNiwiXHVjY2FhXHVjY2FlIiw1LCJcdWNjYjZcdWNjYjdcdWNjYjkiXSxbImFiNjEiLCJcdWNjYmFcdWNjYmJcdWNjYmQiLDYsIlx1Y2NjNlx1Y2NjOFx1Y2NjYSIsNSwiXHVjY2QxXHVjY2QyXHVj''@;'; put 'put ''Y2QzXHVjY2Q1Iiw1XSxbImFiODEiLCJcdWNjZGIiLDgsIlx1Y2NlNSIsNiwiXHVjY2VkXHVjY2VlXHVjY2VmXHVjY2YxIiwxMiwiXHUzMGExIiw4NV0sWyJhYzQxIiwiXHVjY2ZlXHVjY2ZmXHVjZDAwXHVjZDAyIiw1LCJcdWNkMGFcdWNkMGJcdWNkMGRcdWNkMGVcdWNkMGZcdWNkMTEiLDYs''@;'; put 'put ''Ilx1Y2QxYVx1Y2QxY1x1Y2QxZVx1Y2QxZlx1Y2QyMCJdLFsiYWM2MSIsIlx1Y2QyMVx1Y2QyMlx1Y2QyM1x1Y2QyNVx1Y2QyNlx1Y2QyN1x1Y2QyOVx1Y2QyYVx1Y2QyYlx1Y2QyZCIsMTEsIlx1Y2QzYSIsNF0sWyJhYzgxIiwiXHVjZDNmIiwyOCwiXHVjZDVkXHVjZDVlXHVjZDVmXHUwNDEw''@;'; put 'put ''Iiw1LCJcdTA0MDFcdTA0MTYiLDI1XSxbImFjZDEiLCJcdTA0MzAiLDUsIlx1MDQ1MVx1MDQzNiIsMjVdLFsiYWQ0MSIsIlx1Y2Q2MVx1Y2Q2Mlx1Y2Q2M1x1Y2Q2NSIsNiwiXHVjZDZlXHVjZDcwXHVjZDcyIiw1LCJcdWNkNzkiLDddLFsiYWQ2MSIsIlx1Y2Q4MSIsNiwiXHVjZDg5IiwxMCwi''@;'; put 'put ''XHVjZDk2XHVjZDk3XHVjZDk5XHVjZDlhXHVjZDliXHVjZDlkXHVjZDllXHVjZDlmIl0sWyJhZDgxIiwiXHVjZGEwXHVjZGExXHVjZGEyXHVjZGEzXHVjZGE2XHVjZGE4XHVjZGFhIiw1LCJcdWNkYjEiLDE4LCJcdWNkYzUiXSxbImFlNDEiLCJcdWNkYzYiLDUsIlx1Y2RjZFx1Y2RjZVx1Y2Rj''@;'; put 'put ''Zlx1Y2RkMSIsMTZdLFsiYWU2MSIsIlx1Y2RlMiIsNSwiXHVjZGU5XHVjZGVhXHVjZGViXHVjZGVkXHVjZGVlXHVjZGVmXHVjZGYxIiw2LCJcdWNkZmFcdWNkZmNcdWNkZmUiLDRdLFsiYWU4MSIsIlx1Y2UwM1x1Y2UwNVx1Y2UwNlx1Y2UwN1x1Y2UwOVx1Y2UwYVx1Y2UwYlx1Y2UwZCIsNiwi''@;'; put 'put ''XHVjZTE1XHVjZTE2XHVjZTE3XHVjZTE4XHVjZTFhIiw1LCJcdWNlMjJcdWNlMjNcdWNlMjVcdWNlMjZcdWNlMjdcdWNlMjlcdWNlMmFcdWNlMmIiXSxbImFmNDEiLCJcdWNlMmNcdWNlMmRcdWNlMmVcdWNlMmZcdWNlMzJcdWNlMzRcdWNlMzYiLDE5XSxbImFmNjEiLCJcdWNlNGEiLDEzLCJc''@;'; put 'put ''dWNlNWFcdWNlNWJcdWNlNWRcdWNlNWVcdWNlNjIiLDUsIlx1Y2U2YVx1Y2U2YyJdLFsiYWY4MSIsIlx1Y2U2ZSIsNSwiXHVjZTc2XHVjZTc3XHVjZTc5XHVjZTdhXHVjZTdiXHVjZTdkIiw2LCJcdWNlODZcdWNlODhcdWNlOGEiLDUsIlx1Y2U5Mlx1Y2U5M1x1Y2U5NVx1Y2U5Nlx1Y2U5N1x1''@;'; put 'put ''Y2U5OSJdLFsiYjA0MSIsIlx1Y2U5YSIsNSwiXHVjZWEyXHVjZWE2Iiw1LCJcdWNlYWUiLDEyXSxbImIwNjEiLCJcdWNlYmIiLDUsIlx1Y2VjMiIsMTldLFsiYjA4MSIsIlx1Y2VkNiIsMTMsIlx1Y2VlNlx1Y2VlN1x1Y2VlOVx1Y2VlYVx1Y2VlZCIsNiwiXHVjZWY2XHVjZWZhIiw1LCJcdWFj''@;'; put 'put ''MDBcdWFjMDFcdWFjMDRcdWFjMDdcdWFjMDhcdWFjMDlcdWFjMGFcdWFjMTAiLDcsIlx1YWMxOSIsNCwiXHVhYzIwXHVhYzI0XHVhYzJjXHVhYzJkXHVhYzJmXHVhYzMwXHVhYzMxXHVhYzM4XHVhYzM5XHVhYzNjXHVhYzQwXHVhYzRiXHVhYzRkXHVhYzU0XHVhYzU4XHVhYzVjXHVhYzcwXHVh''@;'; put 'put ''YzcxXHVhYzc0XHVhYzc3XHVhYzc4XHVhYzdhXHVhYzgwXHVhYzgxXHVhYzgzXHVhYzg0XHVhYzg1XHVhYzg2XHVhYzg5XHVhYzhhXHVhYzhiXHVhYzhjXHVhYzkwXHVhYzk0XHVhYzljXHVhYzlkXHVhYzlmXHVhY2EwXHVhY2ExXHVhY2E4XHVhY2E5XHVhY2FhXHVhY2FjXHVhY2FmXHVhY2Iw''@;'; put 'put ''XHVhY2I4XHVhY2I5XHVhY2JiXHVhY2JjXHVhY2JkXHVhY2MxXHVhY2M0XHVhY2M4XHVhY2NjXHVhY2Q1XHVhY2Q3XHVhY2UwXHVhY2UxXHVhY2U0XHVhY2U3XHVhY2U4XHVhY2VhXHVhY2VjXHVhY2VmXHVhY2YwXHVhY2YxXHVhY2YzXHVhY2Y1XHVhY2Y2XHVhY2ZjXHVhY2ZkXHVhZDAwXHVh''@;'; put 'put ''ZDA0XHVhZDA2Il0sWyJiMTQxIiwiXHVjZjAyXHVjZjAzXHVjZjA1XHVjZjA2XHVjZjA3XHVjZjA5Iiw2LCJcdWNmMTJcdWNmMTRcdWNmMTYiLDUsIlx1Y2YxZFx1Y2YxZVx1Y2YxZlx1Y2YyMVx1Y2YyMlx1Y2YyMyJdLFsiYjE2MSIsIlx1Y2YyNSIsNiwiXHVjZjJlXHVjZjMyIiw1LCJcdWNm''@;'; put 'put ''MzkiLDExXSxbImIxODEiLCJcdWNmNDUiLDE0LCJcdWNmNTZcdWNmNTdcdWNmNTlcdWNmNWFcdWNmNWJcdWNmNWQiLDYsIlx1Y2Y2Nlx1Y2Y2OFx1Y2Y2YVx1Y2Y2Ylx1Y2Y2Y1x1YWQwY1x1YWQwZFx1YWQwZlx1YWQxMVx1YWQxOFx1YWQxY1x1YWQyMFx1YWQyOVx1YWQyY1x1YWQyZFx1YWQz''@;'; put 'put ''NFx1YWQzNVx1YWQzOFx1YWQzY1x1YWQ0NFx1YWQ0NVx1YWQ0N1x1YWQ0OVx1YWQ1MFx1YWQ1NFx1YWQ1OFx1YWQ2MVx1YWQ2M1x1YWQ2Y1x1YWQ2ZFx1YWQ3MFx1YWQ3M1x1YWQ3NFx1YWQ3NVx1YWQ3Nlx1YWQ3Ylx1YWQ3Y1x1YWQ3ZFx1YWQ3Zlx1YWQ4MVx1YWQ4Mlx1YWQ4OFx1YWQ4OVx1''@;'; put 'put ''YWQ4Y1x1YWQ5MFx1YWQ5Y1x1YWQ5ZFx1YWRhNFx1YWRiN1x1YWRjMFx1YWRjMVx1YWRjNFx1YWRjOFx1YWRkMFx1YWRkMVx1YWRkM1x1YWRkY1x1YWRlMFx1YWRlNFx1YWRmOFx1YWRmOVx1YWRmY1x1YWRmZlx1YWUwMFx1YWUwMVx1YWUwOFx1YWUwOVx1YWUwYlx1YWUwZFx1YWUxNFx1YWUz''@;'; put 'put ''MFx1YWUzMVx1YWUzNFx1YWUzN1x1YWUzOFx1YWUzYVx1YWU0MFx1YWU0MVx1YWU0M1x1YWU0NVx1YWU0Nlx1YWU0YVx1YWU0Y1x1YWU0ZFx1YWU0ZVx1YWU1MFx1YWU1NFx1YWU1Nlx1YWU1Y1x1YWU1ZFx1YWU1Zlx1YWU2MFx1YWU2MVx1YWU2NVx1YWU2OFx1YWU2OVx1YWU2Y1x1YWU3MFx1''@;'; put 'put ''YWU3OCJdLFsiYjI0MSIsIlx1Y2Y2ZFx1Y2Y2ZVx1Y2Y2Zlx1Y2Y3Mlx1Y2Y3M1x1Y2Y3NVx1Y2Y3Nlx1Y2Y3N1x1Y2Y3OSIsNiwiXHVjZjgxXHVjZjgyXHVjZjgzXHVjZjg0XHVjZjg2Iiw1LCJcdWNmOGQiXSxbImIyNjEiLCJcdWNmOGUiLDE4LCJcdWNmYTIiLDUsIlx1Y2ZhOSJdLFsiYjI4''@;'; put 'put ''MSIsIlx1Y2ZhYSIsNSwiXHVjZmIxIiwxOCwiXHVjZmM1Iiw2LCJcdWFlNzlcdWFlN2JcdWFlN2NcdWFlN2RcdWFlODRcdWFlODVcdWFlOGNcdWFlYmNcdWFlYmRcdWFlYmVcdWFlYzBcdWFlYzRcdWFlY2NcdWFlY2RcdWFlY2ZcdWFlZDBcdWFlZDFcdWFlZDhcdWFlZDlcdWFlZGNcdWFlZThc''@;'; put 'put ''dWFlZWJcdWFlZWRcdWFlZjRcdWFlZjhcdWFlZmNcdWFmMDdcdWFmMDhcdWFmMGRcdWFmMTBcdWFmMmNcdWFmMmRcdWFmMzBcdWFmMzJcdWFmMzRcdWFmM2NcdWFmM2RcdWFmM2ZcdWFmNDFcdWFmNDJcdWFmNDNcdWFmNDhcdWFmNDlcdWFmNTBcdWFmNWNcdWFmNWRcdWFmNjRcdWFmNjVcdWFm''@;'; put 'put ''NzlcdWFmODBcdWFmODRcdWFmODhcdWFmOTBcdWFmOTFcdWFmOTVcdWFmOWNcdWFmYjhcdWFmYjlcdWFmYmNcdWFmYzBcdWFmYzdcdWFmYzhcdWFmYzlcdWFmY2JcdWFmY2RcdWFmY2VcdWFmZDRcdWFmZGNcdWFmZThcdWFmZTlcdWFmZjBcdWFmZjFcdWFmZjRcdWFmZjhcdWIwMDBcdWIwMDFc''@;'; put 'put ''dWIwMDRcdWIwMGNcdWIwMTBcdWIwMTRcdWIwMWNcdWIwMWRcdWIwMjhcdWIwNDRcdWIwNDVcdWIwNDhcdWIwNGFcdWIwNGNcdWIwNGVcdWIwNTNcdWIwNTRcdWIwNTVcdWIwNTdcdWIwNTkiXSxbImIzNDEiLCJcdWNmY2MiLDE5LCJcdWNmZTJcdWNmZTNcdWNmZTVcdWNmZTZcdWNmZTdcdWNm''@;'; put 'put ''ZTkiXSxbImIzNjEiLCJcdWNmZWEiLDUsIlx1Y2ZmMlx1Y2ZmNFx1Y2ZmNiIsNSwiXHVjZmZkXHVjZmZlXHVjZmZmXHVkMDAxXHVkMDAyXHVkMDAzXHVkMDA1Iiw1XSxbImIzODEiLCJcdWQwMGIiLDUsIlx1ZDAxMiIsNSwiXHVkMDE5IiwxOSwiXHViMDVkXHViMDdjXHViMDdkXHViMDgwXHVi''@;'; put 'put ''MDg0XHViMDhjXHViMDhkXHViMDhmXHViMDkxXHViMDk4XHViMDk5XHViMDlhXHViMDljXHViMDlmXHViMGEwXHViMGExXHViMGEyXHViMGE4XHViMGE5XHViMGFiIiw0LCJcdWIwYjFcdWIwYjNcdWIwYjRcdWIwYjVcdWIwYjhcdWIwYmNcdWIwYzRcdWIwYzVcdWIwYzdcdWIwYzhcdWIwYzlc''@;'; put 'put ''dWIwZDBcdWIwZDFcdWIwZDRcdWIwZDhcdWIwZTBcdWIwZTVcdWIxMDhcdWIxMDlcdWIxMGJcdWIxMGNcdWIxMTBcdWIxMTJcdWIxMTNcdWIxMThcdWIxMTlcdWIxMWJcdWIxMWNcdWIxMWRcdWIxMjNcdWIxMjRcdWIxMjVcdWIxMjhcdWIxMmNcdWIxMzRcdWIxMzVcdWIxMzdcdWIxMzhcdWIx''@;'; put 'put ''MzlcdWIxNDBcdWIxNDFcdWIxNDRcdWIxNDhcdWIxNTBcdWIxNTFcdWIxNTRcdWIxNTVcdWIxNThcdWIxNWNcdWIxNjBcdWIxNzhcdWIxNzlcdWIxN2NcdWIxODBcdWIxODJcdWIxODhcdWIxODlcdWIxOGJcdWIxOGRcdWIxOTJcdWIxOTNcdWIxOTRcdWIxOThcdWIxOWNcdWIxYThcdWIxY2Nc''@;'; put 'put ''dWIxZDBcdWIxZDRcdWIxZGNcdWIxZGQiXSxbImI0NDEiLCJcdWQwMmUiLDUsIlx1ZDAzNlx1ZDAzN1x1ZDAzOVx1ZDAzYVx1ZDAzYlx1ZDAzZCIsNiwiXHVkMDQ2XHVkMDQ4XHVkMDRhIiw1XSxbImI0NjEiLCJcdWQwNTFcdWQwNTJcdWQwNTNcdWQwNTVcdWQwNTZcdWQwNTdcdWQwNTkiLDYs''@;'; put 'put ''Ilx1ZDA2MSIsMTAsIlx1ZDA2ZVx1ZDA2ZiJdLFsiYjQ4MSIsIlx1ZDA3MVx1ZDA3Mlx1ZDA3M1x1ZDA3NSIsNiwiXHVkMDdlXHVkMDdmXHVkMDgwXHVkMDgyIiwxOCwiXHViMWRmXHViMWU4XHViMWU5XHViMWVjXHViMWYwXHViMWY5XHViMWZiXHViMWZkXHViMjA0XHViMjA1XHViMjA4XHVi''@;'; put 'put ''MjBiXHViMjBjXHViMjE0XHViMjE1XHViMjE3XHViMjE5XHViMjIwXHViMjM0XHViMjNjXHViMjU4XHViMjVjXHViMjYwXHViMjY4XHViMjY5XHViMjc0XHViMjc1XHViMjdjXHViMjg0XHViMjg1XHViMjg5XHViMjkwXHViMjkxXHViMjk0XHViMjk4XHViMjk5XHViMjlhXHViMmEwXHViMmEx''@;'; put 'put ''XHViMmEzXHViMmE1XHViMmE2XHViMmFhXHViMmFjXHViMmIwXHViMmI0XHViMmM4XHViMmM5XHViMmNjXHViMmQwXHViMmQyXHViMmQ4XHViMmQ5XHViMmRiXHViMmRkXHViMmUyXHViMmU0XHViMmU1XHViMmU2XHViMmU4XHViMmViIiw0LCJcdWIyZjNcdWIyZjRcdWIyZjVcdWIyZjciLDQs''@;'; put 'put ''Ilx1YjJmZlx1YjMwMFx1YjMwMVx1YjMwNFx1YjMwOFx1YjMxMFx1YjMxMVx1YjMxM1x1YjMxNFx1YjMxNVx1YjMxY1x1YjM1NFx1YjM1NVx1YjM1Nlx1YjM1OFx1YjM1Ylx1YjM1Y1x1YjM1ZVx1YjM1Zlx1YjM2NFx1YjM2NSJdLFsiYjU0MSIsIlx1ZDA5NSIsMTQsIlx1ZDBhNlx1ZDBhN1x1''@;'; put 'put ''ZDBhOVx1ZDBhYVx1ZDBhYlx1ZDBhZCIsNV0sWyJiNTYxIiwiXHVkMGIzXHVkMGI2XHVkMGI4XHVkMGJhIiw1LCJcdWQwYzJcdWQwYzNcdWQwYzVcdWQwYzZcdWQwYzdcdWQwY2EiLDUsIlx1ZDBkMlx1ZDBkNiIsNF0sWyJiNTgxIiwiXHVkMGRiXHVkMGRlXHVkMGRmXHVkMGUxXHVkMGUyXHVk''@;'; put 'put ''MGUzXHVkMGU1Iiw2LCJcdWQwZWVcdWQwZjIiLDUsIlx1ZDBmOSIsMTEsIlx1YjM2N1x1YjM2OVx1YjM2Ylx1YjM2ZVx1YjM3MFx1YjM3MVx1YjM3NFx1YjM3OFx1YjM4MFx1YjM4MVx1YjM4M1x1YjM4NFx1YjM4NVx1YjM4Y1x1YjM5MFx1YjM5NFx1YjNhMFx1YjNhMVx1YjNhOFx1YjNhY1x1''@;'; put 'put ''YjNjNFx1YjNjNVx1YjNjOFx1YjNjYlx1YjNjY1x1YjNjZVx1YjNkMFx1YjNkNFx1YjNkNVx1YjNkN1x1YjNkOVx1YjNkYlx1YjNkZFx1YjNlMFx1YjNlNFx1YjNlOFx1YjNmY1x1YjQxMFx1YjQxOFx1YjQxY1x1YjQyMFx1YjQyOFx1YjQyOVx1YjQyYlx1YjQzNFx1YjQ1MFx1YjQ1MVx1YjQ1''@;'; put 'put ''NFx1YjQ1OFx1YjQ2MFx1YjQ2MVx1YjQ2M1x1YjQ2NVx1YjQ2Y1x1YjQ4MFx1YjQ4OFx1YjQ5ZFx1YjRhNFx1YjRhOFx1YjRhY1x1YjRiNVx1YjRiN1x1YjRiOVx1YjRjMFx1YjRjNFx1YjRjOFx1YjRkMFx1YjRkNVx1YjRkY1x1YjRkZFx1YjRlMFx1YjRlM1x1YjRlNFx1YjRlNlx1YjRlY1x1''@;'; put 'put ''YjRlZFx1YjRlZlx1YjRmMVx1YjRmOFx1YjUxNFx1YjUxNVx1YjUxOFx1YjUxYlx1YjUxY1x1YjUyNFx1YjUyNVx1YjUyN1x1YjUyOFx1YjUyOVx1YjUyYVx1YjUzMFx1YjUzMVx1YjUzNFx1YjUzOCJdLFsiYjY0MSIsIlx1ZDEwNSIsNywiXHVkMTBlIiwxN10sWyJiNjYxIiwiXHVkMTIwIiwx''@;'; put 'put ''NSwiXHVkMTMyXHVkMTMzXHVkMTM1XHVkMTM2XHVkMTM3XHVkMTM5XHVkMTNiXHVkMTNjXHVkMTNkXHVkMTNlIl0sWyJiNjgxIiwiXHVkMTNmXHVkMTQyXHVkMTQ2Iiw1LCJcdWQxNGVcdWQxNGZcdWQxNTFcdWQxNTJcdWQxNTNcdWQxNTUiLDYsIlx1ZDE1ZVx1ZDE2MFx1ZDE2MiIsNSwiXHVk''@;'; put 'put ''MTY5XHVkMTZhXHVkMTZiXHVkMTZkXHViNTQwXHViNTQxXHViNTQzXHViNTQ0XHViNTQ1XHViNTRiXHViNTRjXHViNTRkXHViNTUwXHViNTU0XHViNTVjXHViNTVkXHViNTVmXHViNTYwXHViNTYxXHViNWEwXHViNWExXHViNWE0XHViNWE4XHViNWFhXHViNWFiXHViNWIwXHViNWIxXHViNWIz''@;'; put 'put ''XHViNWI0XHViNWI1XHViNWJiXHViNWJjXHViNWJkXHViNWMwXHViNWM0XHViNWNjXHViNWNkXHViNWNmXHViNWQwXHViNWQxXHViNWQ4XHViNWVjXHViNjEwXHViNjExXHViNjE0XHViNjE4XHViNjI1XHViNjJjXHViNjM0XHViNjQ4XHViNjY0XHViNjY4XHViNjljXHViNjlkXHViNmEwXHVi''@;'; put 'put ''NmE0XHViNmFiXHViNmFjXHViNmIxXHViNmQ0XHViNmYwXHViNmY0XHViNmY4XHViNzAwXHViNzAxXHViNzA1XHViNzI4XHViNzI5XHViNzJjXHViNzJmXHViNzMwXHViNzM4XHViNzM5XHViNzNiXHViNzQ0XHViNzQ4XHViNzRjXHViNzU0XHViNzU1XHViNzYwXHViNzY0XHViNzY4XHViNzcw''@;'; put 'put ''XHViNzcxXHViNzczXHViNzc1XHViNzdjXHViNzdkXHViNzgwXHViNzg0XHViNzhjXHViNzhkXHViNzhmXHViNzkwXHViNzkxXHViNzkyXHViNzk2XHViNzk3Il0sWyJiNzQxIiwiXHVkMTZlIiwxMywiXHVkMTdkIiw2LCJcdWQxODVcdWQxODZcdWQxODdcdWQxODlcdWQxOGEiXSxbImI3NjEi''@;'; put 'put ''LCJcdWQxOGIiLDIwLCJcdWQxYTJcdWQxYTNcdWQxYTVcdWQxYTZcdWQxYTciXSxbImI3ODEiLCJcdWQxYTkiLDYsIlx1ZDFiMlx1ZDFiNFx1ZDFiNlx1ZDFiN1x1ZDFiOFx1ZDFiOVx1ZDFiYlx1ZDFiZFx1ZDFiZVx1ZDFiZlx1ZDFjMSIsMTQsIlx1Yjc5OFx1Yjc5OVx1Yjc5Y1x1YjdhMFx1''@;'; put 'put ''YjdhOFx1YjdhOVx1YjdhYlx1YjdhY1x1YjdhZFx1YjdiNFx1YjdiNVx1YjdiOFx1YjdjN1x1YjdjOVx1YjdlY1x1YjdlZFx1YjdmMFx1YjdmNFx1YjdmY1x1YjdmZFx1YjdmZlx1YjgwMFx1YjgwMVx1YjgwN1x1YjgwOFx1YjgwOVx1YjgwY1x1YjgxMFx1YjgxOFx1YjgxOVx1YjgxYlx1Yjgx''@;'; put 'put ''ZFx1YjgyNFx1YjgyNVx1YjgyOFx1YjgyY1x1YjgzNFx1YjgzNVx1YjgzN1x1YjgzOFx1YjgzOVx1Yjg0MFx1Yjg0NFx1Yjg1MVx1Yjg1M1x1Yjg1Y1x1Yjg1ZFx1Yjg2MFx1Yjg2NFx1Yjg2Y1x1Yjg2ZFx1Yjg2Zlx1Yjg3MVx1Yjg3OFx1Yjg3Y1x1Yjg4ZFx1YjhhOFx1YjhiMFx1YjhiNFx1''@;'; put 'put ''YjhiOFx1YjhjMFx1YjhjMVx1YjhjM1x1YjhjNVx1YjhjY1x1YjhkMFx1YjhkNFx1YjhkZFx1YjhkZlx1YjhlMVx1YjhlOFx1YjhlOVx1YjhlY1x1YjhmMFx1YjhmOFx1YjhmOVx1YjhmYlx1YjhmZFx1YjkwNFx1YjkxOFx1YjkyMFx1YjkzY1x1YjkzZFx1Yjk0MFx1Yjk0NFx1Yjk0Y1x1Yjk0''@;'; put 'put ''Zlx1Yjk1MVx1Yjk1OFx1Yjk1OVx1Yjk1Y1x1Yjk2MFx1Yjk2OFx1Yjk2OSJdLFsiYjg0MSIsIlx1ZDFkMCIsNywiXHVkMWQ5IiwxN10sWyJiODYxIiwiXHVkMWViIiw4LCJcdWQxZjVcdWQxZjZcdWQxZjdcdWQxZjkiLDEzXSxbImI4ODEiLCJcdWQyMDhcdWQyMGEiLDUsIlx1ZDIxMSIsMjQs''@;'; put 'put ''Ilx1Yjk2Ylx1Yjk2ZFx1Yjk3NFx1Yjk3NVx1Yjk3OFx1Yjk3Y1x1Yjk4NFx1Yjk4NVx1Yjk4N1x1Yjk4OVx1Yjk4YVx1Yjk4ZFx1Yjk4ZVx1YjlhY1x1YjlhZFx1YjliMFx1YjliNFx1YjliY1x1YjliZFx1YjliZlx1YjljMVx1YjljOFx1YjljOVx1YjljY1x1YjljZSIsNCwiXHViOWQ4XHVi''@;'; put 'put ''OWQ5XHViOWRiXHViOWRkXHViOWRlXHViOWUxXHViOWUzXHViOWU0XHViOWU1XHViOWU4XHViOWVjXHViOWY0XHViOWY1XHViOWY3XHViOWY4XHViOWY5XHViOWZhXHViYTAwXHViYTAxXHViYTA4XHViYTE1XHViYTM4XHViYTM5XHViYTNjXHViYTQwXHViYTQyXHViYTQ4XHViYTQ5XHViYTRi''@;'; put 'put ''XHViYTRkXHViYTRlXHViYTUzXHViYTU0XHViYTU1XHViYTU4XHViYTVjXHViYTY0XHViYTY1XHViYTY3XHViYTY4XHViYTY5XHViYTcwXHViYTcxXHViYTc0XHViYTc4XHViYTgzXHViYTg0XHViYTg1XHViYTg3XHViYThjXHViYWE4XHViYWE5XHViYWFiXHViYWFjXHViYWIwXHViYWIyXHVi''@;'; put 'put ''YWI4XHViYWI5XHViYWJiXHViYWJkXHViYWM0XHViYWM4XHViYWQ4XHViYWQ5XHViYWZjIl0sWyJiOTQxIiwiXHVkMjJhXHVkMjJiXHVkMjJlXHVkMjJmXHVkMjMxXHVkMjMyXHVkMjMzXHVkMjM1Iiw2LCJcdWQyM2VcdWQyNDBcdWQyNDIiLDUsIlx1ZDI0OVx1ZDI0YVx1ZDI0Ylx1ZDI0YyJd''@;'; put 'put ''LFsiYjk2MSIsIlx1ZDI0ZCIsMTQsIlx1ZDI1ZCIsNiwiXHVkMjY1XHVkMjY2XHVkMjY3XHVkMjY4Il0sWyJiOTgxIiwiXHVkMjY5IiwyMiwiXHVkMjgyXHVkMjgzXHVkMjg1XHVkMjg2XHVkMjg3XHVkMjg5XHVkMjhhXHVkMjhiXHVkMjhjXHViYjAwXHViYjA0XHViYjBkXHViYjBmXHViYjEx''@;'; put 'put ''XHViYjE4XHViYjFjXHViYjIwXHViYjI5XHViYjJiXHViYjM0XHViYjM1XHViYjM2XHViYjM4XHViYjNiXHViYjNjXHViYjNkXHViYjNlXHViYjQ0XHViYjQ1XHViYjQ3XHViYjQ5XHViYjRkXHViYjRmXHViYjUwXHViYjU0XHViYjU4XHViYjYxXHViYjYzXHViYjZjXHViYjg4XHViYjhjXHVi''@;'; put 'put ''YjkwXHViYmE0XHViYmE4XHViYmFjXHViYmI0XHViYmI3XHViYmMwXHViYmM0XHViYmM4XHViYmQwXHViYmQzXHViYmY4XHViYmY5XHViYmZjXHViYmZmXHViYzAwXHViYzAyXHViYzA4XHViYzA5XHViYzBiXHViYzBjXHViYzBkXHViYzBmXHViYzExXHViYzE0Iiw0LCJcdWJjMWIiLDQsIlx1''@;'; put 'put ''YmMyNFx1YmMyNVx1YmMyN1x1YmMyOVx1YmMyZFx1YmMzMFx1YmMzMVx1YmMzNFx1YmMzOFx1YmM0MFx1YmM0MVx1YmM0M1x1YmM0NFx1YmM0NVx1YmM0OVx1YmM0Y1x1YmM0ZFx1YmM1MFx1YmM1ZFx1YmM4NFx1YmM4NVx1YmM4OFx1YmM4Ylx1YmM4Y1x1YmM4ZVx1YmM5NFx1YmM5NVx1YmM5''@;'; put 'put ''NyJdLFsiYmE0MSIsIlx1ZDI4ZFx1ZDI4ZVx1ZDI4Zlx1ZDI5Mlx1ZDI5M1x1ZDI5NFx1ZDI5NiIsNSwiXHVkMjlkXHVkMjllXHVkMjlmXHVkMmExXHVkMmEyXHVkMmEzXHVkMmE1Iiw2LCJcdWQyYWQiXSxbImJhNjEiLCJcdWQyYWVcdWQyYWZcdWQyYjBcdWQyYjIiLDUsIlx1ZDJiYVx1ZDJi''@;'; put 'put ''Ylx1ZDJiZFx1ZDJiZVx1ZDJjMVx1ZDJjMyIsNCwiXHVkMmNhXHVkMmNjIiw1XSxbImJhODEiLCJcdWQyZDJcdWQyZDNcdWQyZDVcdWQyZDZcdWQyZDdcdWQyZDlcdWQyZGFcdWQyZGJcdWQyZGQiLDYsIlx1ZDJlNiIsOSwiXHVkMmYyXHVkMmYzXHVkMmY1XHVkMmY2XHVkMmY3XHVkMmY5XHVk''@;'; put 'put ''MmZhXHViYzk5XHViYzlhXHViY2EwXHViY2ExXHViY2E0XHViY2E3XHViY2E4XHViY2IwXHViY2IxXHViY2IzXHViY2I0XHViY2I1XHViY2JjXHViY2JkXHViY2MwXHViY2M0XHViY2NkXHViY2NmXHViY2QwXHViY2QxXHViY2Q1XHViY2Q4XHViY2RjXHViY2Y0XHViY2Y1XHViY2Y2XHViY2Y4''@;'; put 'put ''XHViY2ZjXHViZDA0XHViZDA1XHViZDA3XHViZDA5XHViZDEwXHViZDE0XHViZDI0XHViZDJjXHViZDQwXHViZDQ4XHViZDQ5XHViZDRjXHViZDUwXHViZDU4XHViZDU5XHViZDY0XHViZDY4XHViZDgwXHViZDgxXHViZDg0XHViZDg3XHViZDg4XHViZDg5XHViZDhhXHViZDkwXHViZDkxXHVi''@;'; put 'put ''ZDkzXHViZDk1XHViZDk5XHViZDlhXHViZDljXHViZGE0XHViZGIwXHViZGI4XHViZGQ0XHViZGQ1XHViZGQ4XHViZGRjXHViZGU5XHViZGYwXHViZGY0XHViZGY4XHViZTAwXHViZTAzXHViZTA1XHViZTBjXHViZTBkXHViZTEwXHViZTE0XHViZTFjXHViZTFkXHViZTFmXHViZTQ0XHViZTQ1''@;'; put 'put ''XHViZTQ4XHViZTRjXHViZTRlXHViZTU0XHViZTU1XHViZTU3XHViZTU5XHViZTVhXHViZTViXHViZTYwXHViZTYxXHViZTY0Il0sWyJiYjQxIiwiXHVkMmZiIiw0LCJcdWQzMDJcdWQzMDRcdWQzMDYiLDUsIlx1ZDMwZlx1ZDMxMVx1ZDMxMlx1ZDMxM1x1ZDMxNVx1ZDMxNyIsNCwiXHVkMzFl''@;'; put 'put ''XHVkMzIyXHVkMzIzIl0sWyJiYjYxIiwiXHVkMzI0XHVkMzI2XHVkMzI3XHVkMzJhXHVkMzJiXHVkMzJkXHVkMzJlXHVkMzJmXHVkMzMxIiw2LCJcdWQzM2FcdWQzM2UiLDUsIlx1ZDM0Nlx1ZDM0N1x1ZDM0OFx1ZDM0OSJdLFsiYmI4MSIsIlx1ZDM0YSIsMzEsIlx1YmU2OFx1YmU2YVx1YmU3''@;'; put 'put ''MFx1YmU3MVx1YmU3M1x1YmU3NFx1YmU3NVx1YmU3Ylx1YmU3Y1x1YmU3ZFx1YmU4MFx1YmU4NFx1YmU4Y1x1YmU4ZFx1YmU4Zlx1YmU5MFx1YmU5MVx1YmU5OFx1YmU5OVx1YmVhOFx1YmVkMFx1YmVkMVx1YmVkNFx1YmVkN1x1YmVkOFx1YmVlMFx1YmVlM1x1YmVlNFx1YmVlNVx1YmVlY1x1''@;'; put 'put ''YmYwMVx1YmYwOFx1YmYwOVx1YmYxOFx1YmYxOVx1YmYxYlx1YmYxY1x1YmYxZFx1YmY0MFx1YmY0MVx1YmY0NFx1YmY0OFx1YmY1MFx1YmY1MVx1YmY1NVx1YmY5NFx1YmZiMFx1YmZjNVx1YmZjY1x1YmZjZFx1YmZkMFx1YmZkNFx1YmZkY1x1YmZkZlx1YmZlMVx1YzAzY1x1YzA1MVx1YzA1''@;'; put 'put ''OFx1YzA1Y1x1YzA2MFx1YzA2OFx1YzA2OVx1YzA5MFx1YzA5MVx1YzA5NFx1YzA5OFx1YzBhMFx1YzBhMVx1YzBhM1x1YzBhNVx1YzBhY1x1YzBhZFx1YzBhZlx1YzBiMFx1YzBiM1x1YzBiNFx1YzBiNVx1YzBiNlx1YzBiY1x1YzBiZFx1YzBiZlx1YzBjMFx1YzBjMVx1YzBjNVx1YzBjOFx1''@;'; put 'put ''YzBjOVx1YzBjY1x1YzBkMFx1YzBkOFx1YzBkOVx1YzBkYlx1YzBkY1x1YzBkZFx1YzBlNCJdLFsiYmM0MSIsIlx1ZDM2YSIsMTcsIlx1ZDM3ZVx1ZDM3Zlx1ZDM4MVx1ZDM4Mlx1ZDM4M1x1ZDM4NVx1ZDM4Nlx1ZDM4NyJdLFsiYmM2MSIsIlx1ZDM4OFx1ZDM4OVx1ZDM4YVx1ZDM4Ylx1ZDM4''@;'; put 'put ''ZVx1ZDM5MiIsNSwiXHVkMzlhXHVkMzliXHVkMzlkXHVkMzllXHVkMzlmXHVkM2ExIiw2LCJcdWQzYWFcdWQzYWNcdWQzYWUiXSxbImJjODEiLCJcdWQzYWYiLDQsIlx1ZDNiNVx1ZDNiNlx1ZDNiN1x1ZDNiOVx1ZDNiYVx1ZDNiYlx1ZDNiZCIsNiwiXHVkM2M2XHVkM2M3XHVkM2NhIiw1LCJc''@;'; put 'put ''dWQzZDEiLDUsIlx1YzBlNVx1YzBlOFx1YzBlY1x1YzBmNFx1YzBmNVx1YzBmN1x1YzBmOVx1YzEwMFx1YzEwNFx1YzEwOFx1YzExMFx1YzExNVx1YzExYyIsNCwiXHVjMTIzXHVjMTI0XHVjMTI2XHVjMTI3XHVjMTJjXHVjMTJkXHVjMTJmXHVjMTMwXHVjMTMxXHVjMTM2XHVjMTM4XHVjMTM5''@;'; put 'put ''XHVjMTNjXHVjMTQwXHVjMTQ4XHVjMTQ5XHVjMTRiXHVjMTRjXHVjMTRkXHVjMTU0XHVjMTU1XHVjMTU4XHVjMTVjXHVjMTY0XHVjMTY1XHVjMTY3XHVjMTY4XHVjMTY5XHVjMTcwXHVjMTc0XHVjMTc4XHVjMTg1XHVjMThjXHVjMThkXHVjMThlXHVjMTkwXHVjMTk0XHVjMTk2XHVjMTljXHVj''@;'; put 'put ''MTlkXHVjMTlmXHVjMWExXHVjMWE1XHVjMWE4XHVjMWE5XHVjMWFjXHVjMWIwXHVjMWJkXHVjMWM0XHVjMWM4XHVjMWNjXHVjMWQ0XHVjMWQ3XHVjMWQ4XHVjMWUwXHVjMWU0XHVjMWU4XHVjMWYwXHVjMWYxXHVjMWYzXHVjMWZjXHVjMWZkXHVjMjAwXHVjMjA0XHVjMjBjXHVjMjBkXHVjMjBm''@;'; put 'put ''XHVjMjExXHVjMjE4XHVjMjE5XHVjMjFjXHVjMjFmXHVjMjIwXHVjMjI4XHVjMjI5XHVjMjJiXHVjMjJkIl0sWyJiZDQxIiwiXHVkM2Q3XHVkM2Q5Iiw3LCJcdWQzZTJcdWQzZTQiLDcsIlx1ZDNlZVx1ZDNlZlx1ZDNmMVx1ZDNmMlx1ZDNmM1x1ZDNmNVx1ZDNmNlx1ZDNmNyJdLFsiYmQ2MSIs''@;'; put 'put ''Ilx1ZDNmOFx1ZDNmOVx1ZDNmYVx1ZDNmYlx1ZDNmZVx1ZDQwMFx1ZDQwMiIsNSwiXHVkNDA5IiwxM10sWyJiZDgxIiwiXHVkNDE3Iiw1LCJcdWQ0MWUiLDI1LCJcdWMyMmZcdWMyMzFcdWMyMzJcdWMyMzRcdWMyNDhcdWMyNTBcdWMyNTFcdWMyNTRcdWMyNThcdWMyNjBcdWMyNjVcdWMyNmNc''@;'; put 'put ''dWMyNmRcdWMyNzBcdWMyNzRcdWMyN2NcdWMyN2RcdWMyN2ZcdWMyODFcdWMyODhcdWMyODlcdWMyOTBcdWMyOThcdWMyOWJcdWMyOWRcdWMyYTRcdWMyYTVcdWMyYThcdWMyYWNcdWMyYWRcdWMyYjRcdWMyYjVcdWMyYjdcdWMyYjlcdWMyZGNcdWMyZGRcdWMyZTBcdWMyZTNcdWMyZTRcdWMy''@;'; put 'put ''ZWJcdWMyZWNcdWMyZWRcdWMyZWZcdWMyZjFcdWMyZjZcdWMyZjhcdWMyZjlcdWMyZmJcdWMyZmNcdWMzMDBcdWMzMDhcdWMzMDlcdWMzMGNcdWMzMGRcdWMzMTNcdWMzMTRcdWMzMTVcdWMzMThcdWMzMWNcdWMzMjRcdWMzMjVcdWMzMjhcdWMzMjlcdWMzNDVcdWMzNjhcdWMzNjlcdWMzNmNc''@;'; put 'put ''dWMzNzBcdWMzNzJcdWMzNzhcdWMzNzlcdWMzN2NcdWMzN2RcdWMzODRcdWMzODhcdWMzOGNcdWMzYzBcdWMzZDhcdWMzZDlcdWMzZGNcdWMzZGZcdWMzZTBcdWMzZTJcdWMzZThcdWMzZTlcdWMzZWRcdWMzZjRcdWMzZjVcdWMzZjhcdWM0MDhcdWM0MTBcdWM0MjRcdWM0MmNcdWM0MzAiXSxb''@;'; put 'put ''ImJlNDEiLCJcdWQ0MzgiLDcsIlx1ZDQ0MVx1ZDQ0Mlx1ZDQ0M1x1ZDQ0NSIsMTRdLFsiYmU2MSIsIlx1ZDQ1NCIsNywiXHVkNDVkXHVkNDVlXHVkNDVmXHVkNDYxXHVkNDYyXHVkNDYzXHVkNDY1Iiw3LCJcdWQ0NmVcdWQ0NzBcdWQ0NzFcdWQ0NzIiXSxbImJlODEiLCJcdWQ0NzMiLDQsIlx1''@;'; put 'put ''ZDQ3YVx1ZDQ3Ylx1ZDQ3ZFx1ZDQ3ZVx1ZDQ4MVx1ZDQ4MyIsNCwiXHVkNDhhXHVkNDhjXHVkNDhlIiw1LCJcdWQ0OTUiLDgsIlx1YzQzNFx1YzQzY1x1YzQzZFx1YzQ0OFx1YzQ2NFx1YzQ2NVx1YzQ2OFx1YzQ2Y1x1YzQ3NFx1YzQ3NVx1YzQ3OVx1YzQ4MFx1YzQ5NFx1YzQ5Y1x1YzRiOFx1''@;'; put 'put ''YzRiY1x1YzRlOVx1YzRmMFx1YzRmMVx1YzRmNFx1YzRmOFx1YzRmYVx1YzRmZlx1YzUwMFx1YzUwMVx1YzUwY1x1YzUxMFx1YzUxNFx1YzUxY1x1YzUyOFx1YzUyOVx1YzUyY1x1YzUzMFx1YzUzOFx1YzUzOVx1YzUzYlx1YzUzZFx1YzU0NFx1YzU0NVx1YzU0OFx1YzU0OVx1YzU0YVx1YzU0''@;'; put 'put ''Y1x1YzU0ZFx1YzU0ZVx1YzU1M1x1YzU1NFx1YzU1NVx1YzU1N1x1YzU1OFx1YzU1OVx1YzU1ZFx1YzU1ZVx1YzU2MFx1YzU2MVx1YzU2NFx1YzU2OFx1YzU3MFx1YzU3MVx1YzU3M1x1YzU3NFx1YzU3NVx1YzU3Y1x1YzU3ZFx1YzU4MFx1YzU4NFx1YzU4N1x1YzU4Y1x1YzU4ZFx1YzU4Zlx1''@;'; put 'put ''YzU5MVx1YzU5NVx1YzU5N1x1YzU5OFx1YzU5Y1x1YzVhMFx1YzVhOVx1YzViNFx1YzViNVx1YzViOFx1YzViOVx1YzViYlx1YzViY1x1YzViZFx1YzViZVx1YzVjNCIsNiwiXHVjNWNjXHVjNWNlIl0sWyJiZjQxIiwiXHVkNDllIiwxMCwiXHVkNGFhIiwxNF0sWyJiZjYxIiwiXHVkNGI5Iiwx''@;'; put 'put ''OCwiXHVkNGNkXHVkNGNlXHVkNGNmXHVkNGQxXHVkNGQyXHVkNGQzXHVkNGQ1Il0sWyJiZjgxIiwiXHVkNGQ2Iiw1LCJcdWQ0ZGRcdWQ0ZGVcdWQ0ZTAiLDcsIlx1ZDRlOVx1ZDRlYVx1ZDRlYlx1ZDRlZFx1ZDRlZVx1ZDRlZlx1ZDRmMSIsNiwiXHVkNGY5XHVkNGZhXHVkNGZjXHVjNWQwXHVj''@;'; put 'put ''NWQxXHVjNWQ0XHVjNWQ4XHVjNWUwXHVjNWUxXHVjNWUzXHVjNWU1XHVjNWVjXHVjNWVkXHVjNWVlXHVjNWYwXHVjNWY0XHVjNWY2XHVjNWY3XHVjNWZjIiw1LCJcdWM2MDVcdWM2MDZcdWM2MDdcdWM2MDhcdWM2MGNcdWM2MTBcdWM2MThcdWM2MTlcdWM2MWJcdWM2MWNcdWM2MjRcdWM2MjVc''@;'; put 'put ''dWM2MjhcdWM2MmNcdWM2MmRcdWM2MmVcdWM2MzBcdWM2MzNcdWM2MzRcdWM2MzVcdWM2MzdcdWM2MzlcdWM2M2JcdWM2NDBcdWM2NDFcdWM2NDRcdWM2NDhcdWM2NTBcdWM2NTFcdWM2NTNcdWM2NTRcdWM2NTVcdWM2NWNcdWM2NWRcdWM2NjBcdWM2NmNcdWM2NmZcdWM2NzFcdWM2NzhcdWM2''@;'; put 'put ''NzlcdWM2N2NcdWM2ODBcdWM2ODhcdWM2ODlcdWM2OGJcdWM2OGRcdWM2OTRcdWM2OTVcdWM2OThcdWM2OWNcdWM2YTRcdWM2YTVcdWM2YTdcdWM2YTlcdWM2YjBcdWM2YjFcdWM2YjRcdWM2YjhcdWM2YjlcdWM2YmFcdWM2YzBcdWM2YzFcdWM2YzNcdWM2YzVcdWM2Y2NcdWM2Y2RcdWM2ZDBc''@;'; put 'put ''dWM2ZDRcdWM2ZGNcdWM2ZGRcdWM2ZTBcdWM2ZTFcdWM2ZTgiXSxbImMwNDEiLCJcdWQ0ZmUiLDUsIlx1ZDUwNVx1ZDUwNlx1ZDUwN1x1ZDUwOVx1ZDUwYVx1ZDUwYlx1ZDUwZCIsNiwiXHVkNTE2XHVkNTE4Iiw1XSxbImMwNjEiLCJcdWQ1MWUiLDI1XSxbImMwODEiLCJcdWQ1MzhcdWQ1Mzlc''@;'; put 'put ''dWQ1M2FcdWQ1M2JcdWQ1M2VcdWQ1M2ZcdWQ1NDFcdWQ1NDJcdWQ1NDNcdWQ1NDUiLDYsIlx1ZDU0ZVx1ZDU1MFx1ZDU1MiIsNSwiXHVkNTVhXHVkNTViXHVkNTVkXHVkNTVlXHVkNTVmXHVkNTYxXHVkNTYyXHVkNTYzXHVjNmU5XHVjNmVjXHVjNmYwXHVjNmY4XHVjNmY5XHVjNmZkXHVjNzA0''@;'; put 'put ''XHVjNzA1XHVjNzA4XHVjNzBjXHVjNzE0XHVjNzE1XHVjNzE3XHVjNzE5XHVjNzIwXHVjNzIxXHVjNzI0XHVjNzI4XHVjNzMwXHVjNzMxXHVjNzMzXHVjNzM1XHVjNzM3XHVjNzNjXHVjNzNkXHVjNzQwXHVjNzQ0XHVjNzRhXHVjNzRjXHVjNzRkXHVjNzRmXHVjNzUxIiw3LCJcdWM3NWNcdWM3''@;'; put 'put ''NjBcdWM3NjhcdWM3NmJcdWM3NzRcdWM3NzVcdWM3NzhcdWM3N2NcdWM3N2RcdWM3N2VcdWM3ODNcdWM3ODRcdWM3ODVcdWM3ODdcdWM3ODhcdWM3ODlcdWM3OGFcdWM3OGVcdWM3OTBcdWM3OTFcdWM3OTRcdWM3OTZcdWM3OTdcdWM3OThcdWM3OWFcdWM3YTBcdWM3YTFcdWM3YTNcdWM3YTRc''@;'; put 'put ''dWM3YTVcdWM3YTZcdWM3YWNcdWM3YWRcdWM3YjBcdWM3YjRcdWM3YmNcdWM3YmRcdWM3YmZcdWM3YzBcdWM3YzFcdWM3YzhcdWM3YzlcdWM3Y2NcdWM3Y2VcdWM3ZDBcdWM3ZDhcdWM3ZGRcdWM3ZTRcdWM3ZThcdWM3ZWNcdWM4MDBcdWM4MDFcdWM4MDRcdWM4MDhcdWM4MGEiXSxbImMxNDEi''@;'; put 'put ''LCJcdWQ1NjRcdWQ1NjZcdWQ1NjdcdWQ1NmFcdWQ1NmNcdWQ1NmUiLDUsIlx1ZDU3Nlx1ZDU3N1x1ZDU3OVx1ZDU3YVx1ZDU3Ylx1ZDU3ZCIsNiwiXHVkNTg2XHVkNThhXHVkNThiIl0sWyJjMTYxIiwiXHVkNThjXHVkNThkXHVkNThlXHVkNThmXHVkNTkxIiwxOSwiXHVkNWE2XHVkNWE3Il0s''@;'; put 'put ''WyJjMTgxIiwiXHVkNWE4IiwzMSwiXHVjODEwXHVjODExXHVjODEzXHVjODE1XHVjODE2XHVjODFjXHVjODFkXHVjODIwXHVjODI0XHVjODJjXHVjODJkXHVjODJmXHVjODMxXHVjODM4XHVjODNjXHVjODQwXHVjODQ4XHVjODQ5XHVjODRjXHVjODRkXHVjODU0XHVjODcwXHVjODcxXHVjODc0''@;'; put 'put ''XHVjODc4XHVjODdhXHVjODgwXHVjODgxXHVjODgzXHVjODg1XHVjODg2XHVjODg3XHVjODhiXHVjODhjXHVjODhkXHVjODk0XHVjODlkXHVjODlmXHVjOGExXHVjOGE4XHVjOGJjXHVjOGJkXHVjOGM0XHVjOGM4XHVjOGNjXHVjOGQ0XHVjOGQ1XHVjOGQ3XHVjOGQ5XHVjOGUwXHVjOGUxXHVj''@;'; put 'put ''OGU0XHVjOGY1XHVjOGZjXHVjOGZkXHVjOTAwXHVjOTA0XHVjOTA1XHVjOTA2XHVjOTBjXHVjOTBkXHVjOTBmXHVjOTExXHVjOTE4XHVjOTJjXHVjOTM0XHVjOTUwXHVjOTUxXHVjOTU0XHVjOTU4XHVjOTYwXHVjOTYxXHVjOTYzXHVjOTZjXHVjOTcwXHVjOTc0XHVjOTdjXHVjOTg4XHVjOTg5''@;'; put 'put ''XHVjOThjXHVjOTkwXHVjOTk4XHVjOTk5XHVjOTliXHVjOTlkXHVjOWMwXHVjOWMxXHVjOWM0XHVjOWM3XHVjOWM4XHVjOWNhXHVjOWQwXHVjOWQxXHVjOWQzIl0sWyJjMjQxIiwiXHVkNWNhXHVkNWNiXHVkNWNkXHVkNWNlXHVkNWNmXHVkNWQxXHVkNWQzIiw0LCJcdWQ1ZGFcdWQ1ZGNcdWQ1''@;'; put 'put ''ZGUiLDUsIlx1ZDVlNlx1ZDVlN1x1ZDVlOVx1ZDVlYVx1ZDVlYlx1ZDVlZFx1ZDVlZSJdLFsiYzI2MSIsIlx1ZDVlZiIsNCwiXHVkNWY2XHVkNWY4XHVkNWZhIiw1LCJcdWQ2MDJcdWQ2MDNcdWQ2MDVcdWQ2MDZcdWQ2MDdcdWQ2MDkiLDYsIlx1ZDYxMiJdLFsiYzI4MSIsIlx1ZDYxNiIsNSwi''@;'; put 'put ''XHVkNjFkXHVkNjFlXHVkNjFmXHVkNjIxXHVkNjIyXHVkNjIzXHVkNjI1Iiw3LCJcdWQ2MmUiLDksIlx1ZDYzYVx1ZDYzYlx1YzlkNVx1YzlkNlx1YzlkOVx1YzlkYVx1YzlkY1x1YzlkZFx1YzllMFx1YzllMlx1YzllNFx1YzllN1x1YzllY1x1YzllZFx1YzllZlx1YzlmMFx1YzlmMVx1Yzlm''@;'; put 'put ''OFx1YzlmOVx1YzlmY1x1Y2EwMFx1Y2EwOFx1Y2EwOVx1Y2EwYlx1Y2EwY1x1Y2EwZFx1Y2ExNFx1Y2ExOFx1Y2EyOVx1Y2E0Y1x1Y2E0ZFx1Y2E1MFx1Y2E1NFx1Y2E1Y1x1Y2E1ZFx1Y2E1Zlx1Y2E2MFx1Y2E2MVx1Y2E2OFx1Y2E3ZFx1Y2E4NFx1Y2E5OFx1Y2FiY1x1Y2FiZFx1Y2FjMFx1''@;'; put 'put ''Y2FjNFx1Y2FjY1x1Y2FjZFx1Y2FjZlx1Y2FkMVx1Y2FkM1x1Y2FkOFx1Y2FkOVx1Y2FlMFx1Y2FlY1x1Y2FmNFx1Y2IwOFx1Y2IxMFx1Y2IxNFx1Y2IxOFx1Y2IyMFx1Y2IyMVx1Y2I0MVx1Y2I0OFx1Y2I0OVx1Y2I0Y1x1Y2I1MFx1Y2I1OFx1Y2I1OVx1Y2I1ZFx1Y2I2NFx1Y2I3OFx1Y2I3''@;'; put 'put ''OVx1Y2I5Y1x1Y2JiOFx1Y2JkNFx1Y2JlNFx1Y2JlN1x1Y2JlOVx1Y2MwY1x1Y2MwZFx1Y2MxMFx1Y2MxNFx1Y2MxY1x1Y2MxZFx1Y2MyMVx1Y2MyMlx1Y2MyN1x1Y2MyOFx1Y2MyOVx1Y2MyY1x1Y2MyZVx1Y2MzMFx1Y2MzOFx1Y2MzOVx1Y2MzYiJdLFsiYzM0MSIsIlx1ZDYzZFx1ZDYzZVx1''@;'; put 'put ''ZDYzZlx1ZDY0MVx1ZDY0Mlx1ZDY0M1x1ZDY0NFx1ZDY0Nlx1ZDY0N1x1ZDY0YVx1ZDY0Y1x1ZDY0ZVx1ZDY0Zlx1ZDY1MFx1ZDY1Mlx1ZDY1M1x1ZDY1Nlx1ZDY1N1x1ZDY1OVx1ZDY1YVx1ZDY1Ylx1ZDY1ZCIsNF0sWyJjMzYxIiwiXHVkNjYyIiw0LCJcdWQ2NjhcdWQ2NmEiLDUsIlx1ZDY3''@;'; put 'put ''Mlx1ZDY3M1x1ZDY3NSIsMTFdLFsiYzM4MSIsIlx1ZDY4MVx1ZDY4Mlx1ZDY4NFx1ZDY4NiIsNSwiXHVkNjhlXHVkNjhmXHVkNjkxXHVkNjkyXHVkNjkzXHVkNjk1Iiw3LCJcdWQ2OWVcdWQ2YTBcdWQ2YTIiLDUsIlx1ZDZhOVx1ZDZhYVx1Y2MzY1x1Y2MzZFx1Y2MzZVx1Y2M0NFx1Y2M0NVx1''@;'; put 'put ''Y2M0OFx1Y2M0Y1x1Y2M1NFx1Y2M1NVx1Y2M1N1x1Y2M1OFx1Y2M1OVx1Y2M2MFx1Y2M2NFx1Y2M2Nlx1Y2M2OFx1Y2M3MFx1Y2M3NVx1Y2M5OFx1Y2M5OVx1Y2M5Y1x1Y2NhMFx1Y2NhOFx1Y2NhOVx1Y2NhYlx1Y2NhY1x1Y2NhZFx1Y2NiNFx1Y2NiNVx1Y2NiOFx1Y2NiY1x1Y2NjNFx1Y2Nj''@;'; put 'put ''NVx1Y2NjN1x1Y2NjOVx1Y2NkMFx1Y2NkNFx1Y2NlNFx1Y2NlY1x1Y2NmMFx1Y2QwMVx1Y2QwOFx1Y2QwOVx1Y2QwY1x1Y2QxMFx1Y2QxOFx1Y2QxOVx1Y2QxYlx1Y2QxZFx1Y2QyNFx1Y2QyOFx1Y2QyY1x1Y2QzOVx1Y2Q1Y1x1Y2Q2MFx1Y2Q2NFx1Y2Q2Y1x1Y2Q2ZFx1Y2Q2Zlx1Y2Q3MVx1''@;'; put 'put ''Y2Q3OFx1Y2Q4OFx1Y2Q5NFx1Y2Q5NVx1Y2Q5OFx1Y2Q5Y1x1Y2RhNFx1Y2RhNVx1Y2RhN1x1Y2RhOVx1Y2RiMFx1Y2RjNFx1Y2RjY1x1Y2RkMFx1Y2RlOFx1Y2RlY1x1Y2RmMFx1Y2RmOFx1Y2RmOVx1Y2RmYlx1Y2RmZFx1Y2UwNFx1Y2UwOFx1Y2UwY1x1Y2UxNFx1Y2UxOVx1Y2UyMFx1Y2Uy''@;'; put 'put ''MVx1Y2UyNFx1Y2UyOFx1Y2UzMFx1Y2UzMVx1Y2UzM1x1Y2UzNSJdLFsiYzQ0MSIsIlx1ZDZhYlx1ZDZhZFx1ZDZhZVx1ZDZhZlx1ZDZiMSIsNywiXHVkNmJhXHVkNmJjIiw3LCJcdWQ2YzZcdWQ2YzdcdWQ2YzlcdWQ2Y2FcdWQ2Y2IiXSxbImM0NjEiLCJcdWQ2Y2RcdWQ2Y2VcdWQ2Y2ZcdWQ2''@;'; put 'put ''ZDBcdWQ2ZDJcdWQ2ZDNcdWQ2ZDVcdWQ2ZDZcdWQ2ZDhcdWQ2ZGEiLDUsIlx1ZDZlMVx1ZDZlMlx1ZDZlM1x1ZDZlNVx1ZDZlNlx1ZDZlN1x1ZDZlOSIsNF0sWyJjNDgxIiwiXHVkNmVlXHVkNmVmXHVkNmYxXHVkNmYyXHVkNmYzXHVkNmY0XHVkNmY2Iiw1LCJcdWQ2ZmVcdWQ2ZmZcdWQ3MDFc''@;'; put 'put ''dWQ3MDJcdWQ3MDNcdWQ3MDUiLDExLCJcdWQ3MTJcdWQ3MTNcdWQ3MTRcdWNlNThcdWNlNTlcdWNlNWNcdWNlNWZcdWNlNjBcdWNlNjFcdWNlNjhcdWNlNjlcdWNlNmJcdWNlNmRcdWNlNzRcdWNlNzVcdWNlNzhcdWNlN2NcdWNlODRcdWNlODVcdWNlODdcdWNlODlcdWNlOTBcdWNlOTFcdWNl''@;'; put 'put ''OTRcdWNlOThcdWNlYTBcdWNlYTFcdWNlYTNcdWNlYTRcdWNlYTVcdWNlYWNcdWNlYWRcdWNlYzFcdWNlZTRcdWNlZTVcdWNlZThcdWNlZWJcdWNlZWNcdWNlZjRcdWNlZjVcdWNlZjdcdWNlZjhcdWNlZjlcdWNmMDBcdWNmMDFcdWNmMDRcdWNmMDhcdWNmMTBcdWNmMTFcdWNmMTNcdWNmMTVc''@;'; put 'put ''dWNmMWNcdWNmMjBcdWNmMjRcdWNmMmNcdWNmMmRcdWNmMmZcdWNmMzBcdWNmMzFcdWNmMzhcdWNmNTRcdWNmNTVcdWNmNThcdWNmNWNcdWNmNjRcdWNmNjVcdWNmNjdcdWNmNjlcdWNmNzBcdWNmNzFcdWNmNzRcdWNmNzhcdWNmODBcdWNmODVcdWNmOGNcdWNmYTFcdWNmYThcdWNmYjBcdWNm''@;'; put 'put ''YzRcdWNmZTBcdWNmZTFcdWNmZTRcdWNmZThcdWNmZjBcdWNmZjFcdWNmZjNcdWNmZjVcdWNmZmNcdWQwMDBcdWQwMDRcdWQwMTFcdWQwMThcdWQwMmRcdWQwMzRcdWQwMzVcdWQwMzhcdWQwM2MiXSxbImM1NDEiLCJcdWQ3MTVcdWQ3MTZcdWQ3MTdcdWQ3MWFcdWQ3MWJcdWQ3MWRcdWQ3MWVc''@;'; put 'put ''dWQ3MWZcdWQ3MjEiLDYsIlx1ZDcyYVx1ZDcyY1x1ZDcyZSIsNSwiXHVkNzM2XHVkNzM3XHVkNzM5Il0sWyJjNTYxIiwiXHVkNzNhXHVkNzNiXHVkNzNkIiw2LCJcdWQ3NDVcdWQ3NDZcdWQ3NDhcdWQ3NGEiLDUsIlx1ZDc1Mlx1ZDc1M1x1ZDc1NVx1ZDc1YSIsNF0sWyJjNTgxIiwiXHVkNzVm''@;'; put 'put ''XHVkNzYyXHVkNzY0XHVkNzY2XHVkNzY3XHVkNzY4XHVkNzZhXHVkNzZiXHVkNzZkXHVkNzZlXHVkNzZmXHVkNzcxXHVkNzcyXHVkNzczXHVkNzc1Iiw2LCJcdWQ3N2VcdWQ3N2ZcdWQ3ODBcdWQ3ODIiLDUsIlx1ZDc4YVx1ZDc4Ylx1ZDA0NFx1ZDA0NVx1ZDA0N1x1ZDA0OVx1ZDA1MFx1ZDA1''@;'; put 'put ''NFx1ZDA1OFx1ZDA2MFx1ZDA2Y1x1ZDA2ZFx1ZDA3MFx1ZDA3NFx1ZDA3Y1x1ZDA3ZFx1ZDA4MVx1ZDBhNFx1ZDBhNVx1ZDBhOFx1ZDBhY1x1ZDBiNFx1ZDBiNVx1ZDBiN1x1ZDBiOVx1ZDBjMFx1ZDBjMVx1ZDBjNFx1ZDBjOFx1ZDBjOVx1ZDBkMFx1ZDBkMVx1ZDBkM1x1ZDBkNFx1ZDBkNVx1''@;'; put 'put ''ZDBkY1x1ZDBkZFx1ZDBlMFx1ZDBlNFx1ZDBlY1x1ZDBlZFx1ZDBlZlx1ZDBmMFx1ZDBmMVx1ZDBmOFx1ZDEwZFx1ZDEzMFx1ZDEzMVx1ZDEzNFx1ZDEzOFx1ZDEzYVx1ZDE0MFx1ZDE0MVx1ZDE0M1x1ZDE0NFx1ZDE0NVx1ZDE0Y1x1ZDE0ZFx1ZDE1MFx1ZDE1NFx1ZDE1Y1x1ZDE1ZFx1ZDE1''@;'; put 'put ''Zlx1ZDE2MVx1ZDE2OFx1ZDE2Y1x1ZDE3Y1x1ZDE4NFx1ZDE4OFx1ZDFhMFx1ZDFhMVx1ZDFhNFx1ZDFhOFx1ZDFiMFx1ZDFiMVx1ZDFiM1x1ZDFiNVx1ZDFiYVx1ZDFiY1x1ZDFjMFx1ZDFkOFx1ZDFmNFx1ZDFmOFx1ZDIwN1x1ZDIwOVx1ZDIxMFx1ZDIyY1x1ZDIyZFx1ZDIzMFx1ZDIzNFx1''@;'; put 'put ''ZDIzY1x1ZDIzZFx1ZDIzZlx1ZDI0MVx1ZDI0OFx1ZDI1YyJdLFsiYzY0MSIsIlx1ZDc4ZFx1ZDc4ZVx1ZDc4Zlx1ZDc5MSIsNiwiXHVkNzlhXHVkNzljXHVkNzllIiw1XSxbImM2YTEiLCJcdWQyNjRcdWQyODBcdWQyODFcdWQyODRcdWQyODhcdWQyOTBcdWQyOTFcdWQyOTVcdWQyOWNcdWQy''@;'; put 'put ''YTBcdWQyYTRcdWQyYWNcdWQyYjFcdWQyYjhcdWQyYjlcdWQyYmNcdWQyYmZcdWQyYzBcdWQyYzJcdWQyYzhcdWQyYzlcdWQyY2JcdWQyZDRcdWQyZDhcdWQyZGNcdWQyZTRcdWQyZTVcdWQyZjBcdWQyZjFcdWQyZjRcdWQyZjhcdWQzMDBcdWQzMDFcdWQzMDNcdWQzMDVcdWQzMGNcdWQzMGRc''@;'; put 'put ''dWQzMGVcdWQzMTBcdWQzMTRcdWQzMTZcdWQzMWNcdWQzMWRcdWQzMWZcdWQzMjBcdWQzMjFcdWQzMjVcdWQzMjhcdWQzMjlcdWQzMmNcdWQzMzBcdWQzMzhcdWQzMzlcdWQzM2JcdWQzM2NcdWQzM2RcdWQzNDRcdWQzNDVcdWQzN2NcdWQzN2RcdWQzODBcdWQzODRcdWQzOGNcdWQzOGRcdWQz''@;'; put 'put ''OGZcdWQzOTBcdWQzOTFcdWQzOThcdWQzOTlcdWQzOWNcdWQzYTBcdWQzYThcdWQzYTlcdWQzYWJcdWQzYWRcdWQzYjRcdWQzYjhcdWQzYmNcdWQzYzRcdWQzYzVcdWQzYzhcdWQzYzlcdWQzZDBcdWQzZDhcdWQzZTFcdWQzZTNcdWQzZWNcdWQzZWRcdWQzZjBcdWQzZjRcdWQzZmNcdWQzZmRc''@;'; put 'put ''dWQzZmZcdWQ0MDEiXSxbImM3YTEiLCJcdWQ0MDhcdWQ0MWRcdWQ0NDBcdWQ0NDRcdWQ0NWNcdWQ0NjBcdWQ0NjRcdWQ0NmRcdWQ0NmZcdWQ0NzhcdWQ0NzlcdWQ0N2NcdWQ0N2ZcdWQ0ODBcdWQ0ODJcdWQ0ODhcdWQ0ODlcdWQ0OGJcdWQ0OGRcdWQ0OTRcdWQ0YTlcdWQ0Y2NcdWQ0ZDBcdWQ0''@;'; put 'put ''ZDRcdWQ0ZGNcdWQ0ZGZcdWQ0ZThcdWQ0ZWNcdWQ0ZjBcdWQ0ZjhcdWQ0ZmJcdWQ0ZmRcdWQ1MDRcdWQ1MDhcdWQ1MGNcdWQ1MTRcdWQ1MTVcdWQ1MTdcdWQ1M2NcdWQ1M2RcdWQ1NDBcdWQ1NDRcdWQ1NGNcdWQ1NGRcdWQ1NGZcdWQ1NTFcdWQ1NThcdWQ1NTlcdWQ1NWNcdWQ1NjBcdWQ1NjVc''@;'; put 'put ''dWQ1NjhcdWQ1NjlcdWQ1NmJcdWQ1NmRcdWQ1NzRcdWQ1NzVcdWQ1NzhcdWQ1N2NcdWQ1ODRcdWQ1ODVcdWQ1ODdcdWQ1ODhcdWQ1ODlcdWQ1OTBcdWQ1YTVcdWQ1YzhcdWQ1YzlcdWQ1Y2NcdWQ1ZDBcdWQ1ZDJcdWQ1ZDhcdWQ1ZDlcdWQ1ZGJcdWQ1ZGRcdWQ1ZTRcdWQ1ZTVcdWQ1ZThcdWQ1''@;'; put 'put ''ZWNcdWQ1ZjRcdWQ1ZjVcdWQ1ZjdcdWQ1ZjlcdWQ2MDBcdWQ2MDFcdWQ2MDRcdWQ2MDhcdWQ2MTBcdWQ2MTFcdWQ2MTNcdWQ2MTRcdWQ2MTVcdWQ2MWNcdWQ2MjAiXSxbImM4YTEiLCJcdWQ2MjRcdWQ2MmRcdWQ2MzhcdWQ2MzlcdWQ2M2NcdWQ2NDBcdWQ2NDVcdWQ2NDhcdWQ2NDlcdWQ2NGJc''@;'; put 'put ''dWQ2NGRcdWQ2NTFcdWQ2NTRcdWQ2NTVcdWQ2NThcdWQ2NWNcdWQ2NjdcdWQ2NjlcdWQ2NzBcdWQ2NzFcdWQ2NzRcdWQ2ODNcdWQ2ODVcdWQ2OGNcdWQ2OGRcdWQ2OTBcdWQ2OTRcdWQ2OWRcdWQ2OWZcdWQ2YTFcdWQ2YThcdWQ2YWNcdWQ2YjBcdWQ2YjlcdWQ2YmJcdWQ2YzRcdWQ2YzVcdWQ2''@;'; put 'put ''YzhcdWQ2Y2NcdWQ2ZDFcdWQ2ZDRcdWQ2ZDdcdWQ2ZDlcdWQ2ZTBcdWQ2ZTRcdWQ2ZThcdWQ2ZjBcdWQ2ZjVcdWQ2ZmNcdWQ2ZmRcdWQ3MDBcdWQ3MDRcdWQ3MTFcdWQ3MThcdWQ3MTlcdWQ3MWNcdWQ3MjBcdWQ3MjhcdWQ3MjlcdWQ3MmJcdWQ3MmRcdWQ3MzRcdWQ3MzVcdWQ3MzhcdWQ3M2Nc''@;'; put 'put ''dWQ3NDRcdWQ3NDdcdWQ3NDlcdWQ3NTBcdWQ3NTFcdWQ3NTRcdWQ3NTZcdWQ3NTdcdWQ3NThcdWQ3NTlcdWQ3NjBcdWQ3NjFcdWQ3NjNcdWQ3NjVcdWQ3NjlcdWQ3NmNcdWQ3NzBcdWQ3NzRcdWQ3N2NcdWQ3N2RcdWQ3ODFcdWQ3ODhcdWQ3ODlcdWQ3OGNcdWQ3OTBcdWQ3OThcdWQ3OTlcdWQ3''@;'; put 'put ''OWJcdWQ3OWQiXSxbImNhYTEiLCJcdTRmM2RcdTRmNzNcdTUwNDdcdTUwZjlcdTUyYTBcdTUzZWZcdTU0NzVcdTU0ZTVcdTU2MDlcdTVhYzFcdTViYjZcdTY2ODdcdTY3YjZcdTY3YjdcdTY3ZWZcdTZiNGNcdTczYzJcdTc1YzJcdTdhM2NcdTgyZGJcdTgzMDRcdTg4NTdcdTg4ODhcdThhMzZc''@;'; put 'put ''dThjYzhcdThkY2ZcdThlZmJcdThmZTZcdTk5ZDVcdTUyM2JcdTUzNzRcdTU0MDRcdTYwNmFcdTYxNjRcdTZiYmNcdTczY2ZcdTgxMWFcdTg5YmFcdTg5ZDJcdTk1YTNcdTRmODNcdTUyMGFcdTU4YmVcdTU5NzhcdTU5ZTZcdTVlNzJcdTVlNzlcdTYxYzdcdTYzYzBcdTY3NDZcdTY3ZWNcdTY4''@;'; put 'put ''N2ZcdTZmOTdcdTc2NGVcdTc3MGJcdTc4ZjVcdTdhMDhcdTdhZmZcdTdjMjFcdTgwOWRcdTgyNmVcdTgyNzFcdThhZWJcdTk1OTNcdTRlNmJcdTU1OWRcdTY2ZjdcdTZlMzRcdTc4YTNcdTdhZWRcdTg0NWJcdTg5MTBcdTg3NGVcdTk3YThcdTUyZDhcdTU3NGVcdTU4MmFcdTVkNGNcdTYxMWZc''@;'; put 'put ''dTYxYmVcdTYyMjFcdTY1NjJcdTY3ZDFcdTZhNDRcdTZlMWJcdTc1MThcdTc1YjNcdTc2ZTNcdTc3YjBcdTdkM2FcdTkwYWZcdTk0NTFcdTk0NTJcdTlmOTUiXSxbImNiYTEiLCJcdTUzMjNcdTVjYWNcdTc1MzJcdTgwZGJcdTkyNDBcdTk1OThcdTUyNWJcdTU4MDhcdTU5ZGNcdTVjYTFcdTVk''@;'; put 'put ''MTdcdTVlYjdcdTVmM2FcdTVmNGFcdTYxNzdcdTZjNWZcdTc1N2FcdTc1ODZcdTdjZTBcdTdkNzNcdTdkYjFcdTdmOGNcdTgxNTRcdTgyMjFcdTg1OTFcdTg5NDFcdThiMWJcdTkyZmNcdTk2NGRcdTljNDdcdTRlY2JcdTRlZjdcdTUwMGJcdTUxZjFcdTU4NGZcdTYxMzdcdTYxM2VcdTYxNjhc''@;'; put 'put ''dTY1MzlcdTY5ZWFcdTZmMTFcdTc1YTVcdTc2ODZcdTc2ZDZcdTdiODdcdTgyYTVcdTg0Y2JcdWY5MDBcdTkzYTdcdTk1OGJcdTU1ODBcdTViYTJcdTU3NTFcdWY5MDFcdTdjYjNcdTdmYjlcdTkxYjVcdTUwMjhcdTUzYmJcdTVjNDVcdTVkZThcdTYyZDJcdTYzNmVcdTY0ZGFcdTY0ZTdcdTZl''@;'; put 'put ''MjBcdTcwYWNcdTc5NWJcdThkZGRcdThlMWVcdWY5MDJcdTkwN2RcdTkyNDVcdTkyZjhcdTRlN2VcdTRlZjZcdTUwNjVcdTVkZmVcdTVlZmFcdTYxMDZcdTY5NTdcdTgxNzFcdTg2NTRcdThlNDdcdTkzNzVcdTlhMmJcdTRlNWVcdTUwOTFcdTY3NzBcdTY4NDBcdTUxMDlcdTUyOGRcdTUyOTJc''@;'; put 'put ''dTZhYTIiXSxbImNjYTEiLCJcdTc3YmNcdTkyMTBcdTllZDRcdTUyYWJcdTYwMmZcdThmZjJcdTUwNDhcdTYxYTlcdTYzZWRcdTY0Y2FcdTY4M2NcdTZhODRcdTZmYzBcdTgxODhcdTg5YTFcdTk2OTRcdTU4MDVcdTcyN2RcdTcyYWNcdTc1MDRcdTdkNzlcdTdlNmRcdTgwYTlcdTg5OGJcdThi''@;'; put 'put ''NzRcdTkwNjNcdTlkNTFcdTYyODlcdTZjN2FcdTZmNTRcdTdkNTBcdTdmM2FcdThhMjNcdTUxN2NcdTYxNGFcdTdiOWRcdThiMTlcdTkyNTdcdTkzOGNcdTRlYWNcdTRmZDNcdTUwMWVcdTUwYmVcdTUxMDZcdTUyYzFcdTUyY2RcdTUzN2ZcdTU3NzBcdTU4ODNcdTVlOWFcdTVmOTFcdTYxNzZc''@;'; put 'put ''dTYxYWNcdTY0Y2VcdTY1NmNcdTY2NmZcdTY2YmJcdTY2ZjRcdTY4OTdcdTZkODdcdTcwODVcdTcwZjFcdTc0OWZcdTc0YTVcdTc0Y2FcdTc1ZDlcdTc4NmNcdTc4ZWNcdTdhZGZcdTdhZjZcdTdkNDVcdTdkOTNcdTgwMTVcdTgwM2ZcdTgxMWJcdTgzOTZcdThiNjZcdThmMTVcdTkwMTVcdTkz''@;'; put 'put ''ZTFcdTk4MDNcdTk4MzhcdTlhNWFcdTliZThcdTRmYzJcdTU1NTNcdTU4M2FcdTU5NTFcdTViNjNcdTVjNDZcdTYwYjhcdTYyMTJcdTY4NDJcdTY4YjAiXSxbImNkYTEiLCJcdTY4ZThcdTZlYWFcdTc1NGNcdTc2NzhcdTc4Y2VcdTdhM2RcdTdjZmJcdTdlNmJcdTdlN2NcdThhMDhcdThhYTFc''@;'; put 'put ''dThjM2ZcdTk2OGVcdTlkYzRcdTUzZTRcdTUzZTlcdTU0NGFcdTU0NzFcdTU2ZmFcdTU5ZDFcdTViNjRcdTVjM2JcdTVlYWJcdTYyZjdcdTY1MzdcdTY1NDVcdTY1NzJcdTY2YTBcdTY3YWZcdTY5YzFcdTZjYmRcdTc1ZmNcdTc2OTBcdTc3N2VcdTdhM2ZcdTdmOTRcdTgwMDNcdTgwYTFcdTgx''@;'; put 'put ''OGZcdTgyZTZcdTgyZmRcdTgzZjBcdTg1YzFcdTg4MzFcdTg4YjRcdThhYTVcdWY5MDNcdThmOWNcdTkzMmVcdTk2YzdcdTk4NjdcdTlhZDhcdTlmMTNcdTU0ZWRcdTY1OWJcdTY2ZjJcdTY4OGZcdTdhNDBcdThjMzdcdTlkNjBcdTU2ZjBcdTU3NjRcdTVkMTFcdTY2MDZcdTY4YjFcdTY4Y2Rc''@;'; put 'put ''dTZlZmVcdTc0MjhcdTg4OWVcdTliZTRcdTZjNjhcdWY5MDRcdTlhYThcdTRmOWJcdTUxNmNcdTUxNzFcdTUyOWZcdTViNTRcdTVkZTVcdTYwNTBcdTYwNmRcdTYyZjFcdTYzYTdcdTY1M2JcdTczZDlcdTdhN2FcdTg2YTNcdThjYTJcdTk3OGZcdTRlMzJcdTViZTFcdTYyMDhcdTY3OWNcdTc0''@;'; put 'put ''ZGMiXSxbImNlYTEiLCJcdTc5ZDFcdTgzZDNcdThhODdcdThhYjJcdThkZThcdTkwNGVcdTkzNGJcdTk4NDZcdTVlZDNcdTY5ZThcdTg1ZmZcdTkwZWRcdWY5MDVcdTUxYTBcdTViOThcdTViZWNcdTYxNjNcdTY4ZmFcdTZiM2VcdTcwNGNcdTc0MmZcdTc0ZDhcdTdiYTFcdTdmNTBcdTgzYzVc''@;'; put 'put ''dTg5YzBcdThjYWJcdTk1ZGNcdTk5MjhcdTUyMmVcdTYwNWRcdTYyZWNcdTkwMDJcdTRmOGFcdTUxNDlcdTUzMjFcdTU4ZDlcdTVlZTNcdTY2ZTBcdTZkMzhcdTcwOWFcdTcyYzJcdTczZDZcdTdiNTBcdTgwZjFcdTk0NWJcdTUzNjZcdTYzOWJcdTdmNmJcdTRlNTZcdTUwODBcdTU4NGFcdTU4''@;'; put 'put ''ZGVcdTYwMmFcdTYxMjdcdTYyZDBcdTY5ZDBcdTliNDFcdTViOGZcdTdkMThcdTgwYjFcdThmNWZcdTRlYTRcdTUwZDFcdTU0YWNcdTU1YWNcdTViMGNcdTVkYTBcdTVkZTdcdTY1MmFcdTY1NGVcdTY4MjFcdTZhNGJcdTcyZTFcdTc2OGVcdTc3ZWZcdTdkNWVcdTdmZjlcdTgxYTBcdTg1NGVc''@;'; put 'put ''dTg2ZGZcdThmMDNcdThmNGVcdTkwY2FcdTk5MDNcdTlhNTVcdTliYWJcdTRlMThcdTRlNDVcdTRlNWRcdTRlYzdcdTRmZjFcdTUxNzdcdTUyZmUiXSxbImNmYTEiLCJcdTUzNDBcdTUzZTNcdTUzZTVcdTU0OGVcdTU2MTRcdTU3NzVcdTU3YTJcdTViYzdcdTVkODdcdTVlZDBcdTYxZmNcdTYy''@;'; put 'put ''ZDhcdTY1NTFcdTY3YjhcdTY3ZTlcdTY5Y2JcdTZiNTBcdTZiYzZcdTZiZWNcdTZjNDJcdTZlOWRcdTcwNzhcdTcyZDdcdTczOTZcdTc0MDNcdTc3YmZcdTc3ZTlcdTdhNzZcdTdkN2ZcdTgwMDlcdTgxZmNcdTgyMDVcdTgyMGFcdTgyZGZcdTg4NjJcdThiMzNcdThjZmNcdThlYzBcdTkwMTFc''@;'; put 'put ''dTkwYjFcdTkyNjRcdTkyYjZcdTk5ZDJcdTlhNDVcdTljZTlcdTlkZDdcdTlmOWNcdTU3MGJcdTVjNDBcdTgzY2FcdTk3YTBcdTk3YWJcdTllYjRcdTU0MWJcdTdhOThcdTdmYTRcdTg4ZDlcdThlY2RcdTkwZTFcdTU4MDBcdTVjNDhcdTYzOThcdTdhOWZcdTViYWVcdTVmMTNcdTdhNzlcdTdh''@;'; put 'put ''YWVcdTgyOGVcdThlYWNcdTUwMjZcdTUyMzhcdTUyZjhcdTUzNzdcdTU3MDhcdTYyZjNcdTYzNzJcdTZiMGFcdTZkYzNcdTc3MzdcdTUzYTVcdTczNTdcdTg1NjhcdThlNzZcdTk1ZDVcdTY3M2FcdTZhYzNcdTZmNzBcdThhNmRcdThlY2NcdTk5NGJcdWY5MDZcdTY2NzdcdTZiNzhcdThjYjQi''@;'; put 'put ''XSxbImQwYTEiLCJcdTliM2NcdWY5MDdcdTUzZWJcdTU3MmRcdTU5NGVcdTYzYzZcdTY5ZmJcdTczZWFcdTc4NDVcdTdhYmFcdTdhYzVcdTdjZmVcdTg0NzVcdTg5OGZcdThkNzNcdTkwMzVcdTk1YThcdTUyZmJcdTU3NDdcdTc1NDdcdTdiNjBcdTgzY2NcdTkyMWVcdWY5MDhcdTZhNThcdTUx''@;'; put 'put ''NGJcdTUyNGJcdTUyODdcdTYyMWZcdTY4ZDhcdTY5NzVcdTk2OTlcdTUwYzVcdTUyYTRcdTUyZTRcdTYxYzNcdTY1YTRcdTY4MzlcdTY5ZmZcdTc0N2VcdTdiNGJcdTgyYjlcdTgzZWJcdTg5YjJcdThiMzlcdThmZDFcdTk5NDlcdWY5MDlcdTRlY2FcdTU5OTdcdTY0ZDJcdTY2MTFcdTZhOGVc''@;'; put 'put ''dTc0MzRcdTc5ODFcdTc5YmRcdTgyYTlcdTg4N2VcdTg4N2ZcdTg5NWZcdWY5MGFcdTkzMjZcdTRmMGJcdTUzY2FcdTYwMjVcdTYyNzFcdTZjNzJcdTdkMWFcdTdkNjZcdTRlOThcdTUxNjJcdTc3ZGNcdTgwYWZcdTRmMDFcdTRmMGVcdTUxNzZcdTUxODBcdTU1ZGNcdTU2NjhcdTU3M2JcdTU3''@;'; put 'put ''ZmFcdTU3ZmNcdTU5MTRcdTU5NDdcdTU5OTNcdTViYzRcdTVjOTBcdTVkMGVcdTVkZjFcdTVlN2VcdTVmY2NcdTYyODBcdTY1ZDdcdTY1ZTMiXSxbImQxYTEiLCJcdTY3MWVcdTY3MWZcdTY3NWVcdTY4Y2JcdTY4YzRcdTZhNWZcdTZiM2FcdTZjMjNcdTZjN2RcdTZjODJcdTZkYzdcdTczOThc''@;'; put 'put ''dTc0MjZcdTc0MmFcdTc0ODJcdTc0YTNcdTc1NzhcdTc1N2ZcdTc4ODFcdTc4ZWZcdTc5NDFcdTc5NDdcdTc5NDhcdTc5N2FcdTdiOTVcdTdkMDBcdTdkYmFcdTdmODhcdTgwMDZcdTgwMmRcdTgwOGNcdThhMThcdThiNGZcdThjNDhcdThkNzdcdTkzMjFcdTkzMjRcdTk4ZTJcdTk5NTFcdTlh''@;'; put 'put ''MGVcdTlhMGZcdTlhNjVcdTllOTJcdTdkY2FcdTRmNzZcdTU0MDlcdTYyZWVcdTY4NTRcdTkxZDFcdTU1YWJcdTUxM2FcdWY5MGJcdWY5MGNcdTVhMWNcdTYxZTZcdWY5MGRcdTYyY2ZcdTYyZmZcdWY5MGUiLDUsIlx1OTBhM1x1ZjkxNCIsNCwiXHU4YWZlXHVmOTE5XHVmOTFhXHVmOTFiXHVm''@;'; put 'put ''OTFjXHU2Njk2XHVmOTFkXHU3MTU2XHVmOTFlXHVmOTFmXHU5NmUzXHVmOTIwXHU2MzRmXHU2MzdhXHU1MzU3XHVmOTIxXHU2NzhmXHU2OTYwXHU2ZTczXHVmOTIyXHU3NTM3XHVmOTIzXHVmOTI0XHVmOTI1Il0sWyJkMmExIiwiXHU3ZDBkXHVmOTI2XHVmOTI3XHU4ODcyXHU1NmNhXHU1YTE4''@;'; put 'put ''XHVmOTI4Iiw0LCJcdTRlNDNcdWY5MmRcdTUxNjdcdTU5NDhcdTY3ZjBcdTgwMTBcdWY5MmVcdTU5NzNcdTVlNzRcdTY0OWFcdTc5Y2FcdTVmZjVcdTYwNmNcdTYyYzhcdTYzN2JcdTViZTdcdTViZDdcdTUyYWFcdWY5MmZcdTU5NzRcdTVmMjlcdTYwMTJcdWY5MzBcdWY5MzFcdWY5MzJcdTc0''@;'; put 'put ''NTlcdWY5MzMiLDUsIlx1OTlkMVx1ZjkzOSIsMTAsIlx1NmZjM1x1Zjk0NFx1Zjk0NVx1ODFiZlx1OGZiMlx1NjBmMVx1Zjk0Nlx1Zjk0N1x1ODE2Nlx1Zjk0OFx1Zjk0OVx1NWMzZlx1Zjk0YSIsNywiXHU1YWU5XHU4YTI1XHU2NzdiXHU3ZDEwXHVmOTUyIiw1LCJcdTgwZmRcdWY5NThcdWY5''@;'; put 'put ''NTlcdTVjM2NcdTZjZTVcdTUzM2ZcdTZlYmFcdTU5MWFcdTgzMzYiXSxbImQzYTEiLCJcdTRlMzlcdTRlYjZcdTRmNDZcdTU1YWVcdTU3MThcdTU4YzdcdTVmNTZcdTY1YjdcdTY1ZTZcdTZhODBcdTZiYjVcdTZlNGRcdTc3ZWRcdTdhZWZcdTdjMWVcdTdkZGVcdTg2Y2JcdTg4OTJcdTkxMzJc''@;'; put 'put ''dTkzNWJcdTY0YmJcdTZmYmVcdTczN2FcdTc1YjhcdTkwNTRcdTU1NTZcdTU3NGRcdTYxYmFcdTY0ZDRcdTY2YzdcdTZkZTFcdTZlNWJcdTZmNmRcdTZmYjlcdTc1ZjBcdTgwNDNcdTgxYmRcdTg1NDFcdTg5ODNcdThhYzdcdThiNWFcdTkzMWZcdTZjOTNcdTc1NTNcdTdiNTRcdThlMGZcdTkw''@;'; put 'put ''NWRcdTU1MTBcdTU4MDJcdTU4NThcdTVlNjJcdTYyMDdcdTY0OWVcdTY4ZTBcdTc1NzZcdTdjZDZcdTg3YjNcdTllZThcdTRlZTNcdTU3ODhcdTU3NmVcdTU5MjdcdTVjMGRcdTVjYjFcdTVlMzZcdTVmODVcdTYyMzRcdTY0ZTFcdTczYjNcdTgxZmFcdTg4OGJcdThjYjhcdTk2OGFcdTllZGJc''@;'; put 'put ''dTViODVcdTVmYjdcdTYwYjNcdTUwMTJcdTUyMDBcdTUyMzBcdTU3MTZcdTU4MzVcdTU4NTdcdTVjMGVcdTVjNjBcdTVjZjZcdTVkOGJcdTVlYTZcdTVmOTJcdTYwYmNcdTYzMTFcdTYzODlcdTY0MTdcdTY4NDMiXSxbImQ0YTEiLCJcdTY4ZjlcdTZhYzJcdTZkZDhcdTZlMjFcdTZlZDRcdTZm''@;'; put 'put ''ZTRcdTcxZmVcdTc2ZGNcdTc3NzlcdTc5YjFcdTdhM2JcdTg0MDRcdTg5YTlcdThjZWRcdThkZjNcdThlNDhcdTkwMDNcdTkwMTRcdTkwNTNcdTkwZmRcdTkzNGRcdTk2NzZcdTk3ZGNcdTZiZDJcdTcwMDZcdTcyNThcdTcyYTJcdTczNjhcdTc3NjNcdTc5YmZcdTdiZTRcdTdlOWJcdThiODBc''@;'; put 'put ''dTU4YTlcdTYwYzdcdTY1NjZcdTY1ZmRcdTY2YmVcdTZjOGNcdTcxMWVcdTcxYzlcdThjNWFcdTk4MTNcdTRlNmRcdTdhODFcdTRlZGRcdTUxYWNcdTUxY2RcdTUyZDVcdTU0MGNcdTYxYTdcdTY3NzFcdTY4NTBcdTY4ZGZcdTZkMWVcdTZmN2NcdTc1YmNcdTc3YjNcdTdhZTVcdTgwZjRcdTg0''@;'; put 'put ''NjNcdTkyODVcdTUxNWNcdTY1OTdcdTY3NWNcdTY3OTNcdTc1ZDhcdTdhYzdcdTgzNzNcdWY5NWFcdThjNDZcdTkwMTdcdTk4MmRcdTVjNmZcdTgxYzBcdTgyOWFcdTkwNDFcdTkwNmZcdTkyMGRcdTVmOTdcdTVkOWRcdTZhNTlcdTcxYzhcdTc2N2JcdTdiNDlcdTg1ZTRcdThiMDRcdTkxMjdc''@;'; put 'put ''dTlhMzBcdTU1ODdcdTYxZjZcdWY5NWJcdTc2NjlcdTdmODUiXSxbImQ1YTEiLCJcdTg2M2ZcdTg3YmFcdTg4ZjhcdTkwOGZcdWY5NWNcdTZkMWJcdTcwZDlcdTczZGVcdTdkNjFcdTg0M2RcdWY5NWRcdTkxNmFcdTk5ZjFcdWY5NWVcdTRlODJcdTUzNzVcdTZiMDRcdTZiMTJcdTcwM2VcdTcy''@;'; put 'put ''MWJcdTg2MmRcdTllMWVcdTUyNGNcdThmYTNcdTVkNTBcdTY0ZTVcdTY1MmNcdTZiMTZcdTZmZWJcdTdjNDNcdTdlOWNcdTg1Y2RcdTg5NjRcdTg5YmRcdTYyYzlcdTgxZDhcdTg4MWZcdTVlY2FcdTY3MTdcdTZkNmFcdTcyZmNcdTc0MDVcdTc0NmZcdTg3ODJcdTkwZGVcdTRmODZcdTVkMGRc''@;'; put 'put ''dTVmYTBcdTg0MGFcdTUxYjdcdTYzYTBcdTc1NjVcdTRlYWVcdTUwMDZcdTUxNjlcdTUxYzlcdTY4ODFcdTZhMTFcdTdjYWVcdTdjYjFcdTdjZTdcdTgyNmZcdThhZDJcdThmMWJcdTkxY2ZcdTRmYjZcdTUxMzdcdTUyZjVcdTU0NDJcdTVlZWNcdTYxNmVcdTYyM2VcdTY1YzVcdTZhZGFcdTZm''@;'; put 'put ''ZmVcdTc5MmFcdTg1ZGNcdTg4MjNcdTk1YWRcdTlhNjJcdTlhNmFcdTllOTdcdTllY2VcdTUyOWJcdTY2YzZcdTZiNzdcdTcwMWRcdTc5MmJcdThmNjJcdTk3NDJcdTYxOTBcdTYyMDBcdTY1MjNcdTZmMjMiXSxbImQ2YTEiLCJcdTcxNDlcdTc0ODlcdTdkZjRcdTgwNmZcdTg0ZWVcdThmMjZc''@;'; put 'put ''dTkwMjNcdTkzNGFcdTUxYmRcdTUyMTdcdTUyYTNcdTZkMGNcdTcwYzhcdTg4YzJcdTVlYzlcdTY1ODJcdTZiYWVcdTZmYzJcdTdjM2VcdTczNzVcdTRlZTRcdTRmMzZcdTU2ZjlcdWY5NWZcdTVjYmFcdTVkYmFcdTYwMWNcdTczYjJcdTdiMmRcdTdmOWFcdTdmY2VcdTgwNDZcdTkwMWVcdTky''@;'; put 'put ''MzRcdTk2ZjZcdTk3NDhcdTk4MThcdTlmNjFcdTRmOGJcdTZmYTdcdTc5YWVcdTkxYjRcdTk2YjdcdTUyZGVcdWY5NjBcdTY0ODhcdTY0YzRcdTZhZDNcdTZmNWVcdTcwMThcdTcyMTBcdTc2ZTdcdTgwMDFcdTg2MDZcdTg2NWNcdThkZWZcdThmMDVcdTk3MzJcdTliNmZcdTlkZmFcdTllNzVc''@;'; put 'put ''dTc4OGNcdTc5N2ZcdTdkYTBcdTgzYzlcdTkzMDRcdTllN2ZcdTllOTNcdThhZDZcdTU4ZGZcdTVmMDRcdTY3MjdcdTcwMjdcdTc0Y2ZcdTdjNjBcdTgwN2VcdTUxMjFcdTcwMjhcdTcyNjJcdTc4Y2FcdThjYzJcdThjZGFcdThjZjRcdTk2ZjdcdTRlODZcdTUwZGFcdTViZWVcdTVlZDZcdTY1''@;'; put 'put ''OTlcdTcxY2VcdTc2NDJcdTc3YWRcdTgwNGFcdTg0ZmMiXSxbImQ3YTEiLCJcdTkwN2NcdTliMjdcdTlmOGRcdTU4ZDhcdTVhNDFcdTVjNjJcdTZhMTNcdTZkZGFcdTZmMGZcdTc2M2JcdTdkMmZcdTdlMzdcdTg1MWVcdTg5MzhcdTkzZTRcdTk2NGJcdTUyODlcdTY1ZDJcdTY3ZjNcdTY5YjRc''@;'; put 'put ''dTZkNDFcdTZlOWNcdTcwMGZcdTc0MDlcdTc0NjBcdTc1NTlcdTc2MjRcdTc4NmJcdThiMmNcdTk4NWVcdTUxNmRcdTYyMmVcdTk2NzhcdTRmOTZcdTUwMmJcdTVkMTlcdTZkZWFcdTdkYjhcdThmMmFcdTVmOGJcdTYxNDRcdTY4MTdcdWY5NjFcdTk2ODZcdTUyZDJcdTgwOGJcdTUxZGNcdTUx''@;'; put 'put ''Y2NcdTY5NWVcdTdhMWNcdTdkYmVcdTgzZjFcdTk2NzVcdTRmZGFcdTUyMjlcdTUzOThcdTU0MGZcdTU1MGVcdTVjNjVcdTYwYTdcdTY3NGVcdTY4YThcdTZkNmNcdTcyODFcdTcyZjhcdTc0MDZcdTc0ODNcdWY5NjJcdTc1ZTJcdTdjNmNcdTdmNzlcdTdmYjhcdTgzODlcdTg4Y2ZcdTg4ZTFc''@;'; put 'put ''dTkxY2NcdTkxZDBcdTk2ZTJcdTliYzlcdTU0MWRcdTZmN2VcdTcxZDBcdTc0OThcdTg1ZmFcdThlYWFcdTk2YTNcdTljNTdcdTllOWZcdTY3OTdcdTZkY2JcdTc0MzNcdTgxZThcdTk3MTZcdTc4MmMiXSxbImQ4YTEiLCJcdTdhY2JcdTdiMjBcdTdjOTJcdTY0NjlcdTc0NmFcdTc1ZjJcdTc4''@;'; put 'put ''YmNcdTc4ZThcdTk5YWNcdTliNTRcdTllYmJcdTViZGVcdTVlNTVcdTZmMjBcdTgxOWNcdTgzYWJcdTkwODhcdTRlMDdcdTUzNGRcdTVhMjlcdTVkZDJcdTVmNGVcdTYxNjJcdTYzM2RcdTY2NjlcdTY2ZmNcdTZlZmZcdTZmMmJcdTcwNjNcdTc3OWVcdTg0MmNcdTg1MTNcdTg4M2JcdThmMTNc''@;'; put 'put ''dTk5NDVcdTljM2JcdTU1MWNcdTYyYjlcdTY3MmJcdTZjYWJcdTgzMDlcdTg5NmFcdTk3N2FcdTRlYTFcdTU5ODRcdTVmZDhcdTVmZDlcdTY3MWJcdTdkYjJcdTdmNTRcdTgyOTJcdTgzMmJcdTgzYmRcdThmMWVcdTkwOTlcdTU3Y2JcdTU5YjlcdTVhOTJcdTViZDBcdTY2MjdcdTY3OWFcdTY4''@;'; put 'put ''ODVcdTZiY2ZcdTcxNjRcdTdmNzVcdThjYjdcdThjZTNcdTkwODFcdTliNDVcdTgxMDhcdThjOGFcdTk2NGNcdTlhNDBcdTllYTVcdTViNWZcdTZjMTNcdTczMWJcdTc2ZjJcdTc2ZGZcdTg0MGNcdTUxYWFcdTg5OTNcdTUxNGRcdTUxOTVcdTUyYzlcdTY4YzlcdTZjOTRcdTc3MDRcdTc3MjBc''@;'; put 'put ''dTdkYmZcdTdkZWNcdTk3NjJcdTllYjVcdTZlYzUiXSxbImQ5YTEiLCJcdTg1MTFcdTUxYTVcdTU0MGRcdTU0N2RcdTY2MGVcdTY2OWRcdTY5MjdcdTZlOWZcdTc2YmZcdTc3OTFcdTgzMTdcdTg0YzJcdTg3OWZcdTkxNjlcdTkyOThcdTljZjRcdTg4ODJcdTRmYWVcdTUxOTJcdTUyZGZcdTU5''@;'; put 'put ''YzZcdTVlM2RcdTYxNTVcdTY0NzhcdTY0NzlcdTY2YWVcdTY3ZDBcdTZhMjFcdTZiY2RcdTZiZGJcdTcyNWZcdTcyNjFcdTc0NDFcdTc3MzhcdTc3ZGJcdTgwMTdcdTgyYmNcdTgzMDVcdThiMDBcdThiMjhcdThjOGNcdTY3MjhcdTZjOTBcdTcyNjdcdTc2ZWVcdTc3NjZcdTdhNDZcdTlkYTlc''@;'; put 'put ''dTZiN2ZcdTZjOTJcdTU5MjJcdTY3MjZcdTg0OTlcdTUzNmZcdTU4OTNcdTU5OTlcdTVlZGZcdTYzY2ZcdTY2MzRcdTY3NzNcdTZlM2FcdTczMmJcdTdhZDdcdTgyZDdcdTkzMjhcdTUyZDlcdTVkZWJcdTYxYWVcdTYxY2JcdTYyMGFcdTYyYzdcdTY0YWJcdTY1ZTBcdTY5NTlcdTZiNjZcdTZi''@;'; put 'put ''Y2JcdTcxMjFcdTczZjdcdTc1NWRcdTdlNDZcdTgyMWVcdTgzMDJcdTg1NmFcdThhYTNcdThjYmZcdTk3MjdcdTlkNjFcdTU4YThcdTllZDhcdTUwMTFcdTUyMGVcdTU0M2JcdTU1NGZcdTY1ODciXSxbImRhYTEiLCJcdTZjNzZcdTdkMGFcdTdkMGJcdTgwNWVcdTg2OGFcdTk1ODBcdTk2ZWZc''@;'; put 'put ''dTUyZmZcdTZjOTVcdTcyNjlcdTU0NzNcdTVhOWFcdTVjM2VcdTVkNGJcdTVmNGNcdTVmYWVcdTY3MmFcdTY4YjZcdTY5NjNcdTZlM2NcdTZlNDRcdTc3MDlcdTdjNzNcdTdmOGVcdTg1ODdcdThiMGVcdThmZjdcdTk3NjFcdTllZjRcdTVjYjdcdTYwYjZcdTYxMGRcdTYxYWJcdTY1NGZcdTY1''@;'; put 'put ''ZmJcdTY1ZmNcdTZjMTFcdTZjZWZcdTczOWZcdTczYzlcdTdkZTFcdTk1OTRcdTViYzZcdTg3MWNcdThiMTBcdTUyNWRcdTUzNWFcdTYyY2RcdTY0MGZcdTY0YjJcdTY3MzRcdTZhMzhcdTZjY2FcdTczYzBcdTc0OWVcdTdiOTRcdTdjOTVcdTdlMWJcdTgxOGFcdTgyMzZcdTg1ODRcdThmZWJc''@;'; put 'put ''dTk2ZjlcdTk5YzFcdTRmMzRcdTUzNGFcdTUzY2RcdTUzZGJcdTYyY2NcdTY0MmNcdTY1MDBcdTY1OTFcdTY5YzNcdTZjZWVcdTZmNThcdTczZWRcdTc1NTRcdTc2MjJcdTc2ZTRcdTc2ZmNcdTc4ZDBcdTc4ZmJcdTc5MmNcdTdkNDZcdTgyMmNcdTg3ZTBcdThmZDRcdTk4MTJcdTk4ZWZcdTUy''@;'; put 'put ''YzNcdTYyZDRcdTY0YTVcdTZlMjRcdTZmNTEiXSxbImRiYTEiLCJcdTc2N2NcdThkY2JcdTkxYjFcdTkyNjJcdTlhZWVcdTliNDNcdTUwMjNcdTUwOGRcdTU3NGFcdTU5YThcdTVjMjhcdTVlNDdcdTVmNzdcdTYyM2ZcdTY1M2VcdTY1YjlcdTY1YzFcdTY2MDlcdTY3OGJcdTY5OWNcdTZlYzJc''@;'; put 'put ''dTc4YzVcdTdkMjFcdTgwYWFcdTgxODBcdTgyMmJcdTgyYjNcdTg0YTFcdTg2OGNcdThhMmFcdThiMTdcdTkwYTZcdTk2MzJcdTlmOTBcdTUwMGRcdTRmZjNcdWY5NjNcdTU3ZjlcdTVmOThcdTYyZGNcdTYzOTJcdTY3NmZcdTZlNDNcdTcxMTlcdTc2YzNcdTgwY2NcdTgwZGFcdTg4ZjRcdTg4''@;'; put 'put ''ZjVcdTg5MTlcdThjZTBcdThmMjlcdTkxNGRcdTk2NmFcdTRmMmZcdTRmNzBcdTVlMWJcdTY3Y2ZcdTY4MjJcdTc2N2RcdTc2N2VcdTliNDRcdTVlNjFcdTZhMGFcdTcxNjlcdTcxZDRcdTc1NmFcdWY5NjRcdTdlNDFcdTg1NDNcdTg1ZTlcdTk4ZGNcdTRmMTBcdTdiNGZcdTdmNzBcdTk1YTVc''@;'; put 'put ''dTUxZTFcdTVlMDZcdTY4YjVcdTZjM2VcdTZjNGVcdTZjZGJcdTcyYWZcdTdiYzRcdTgzMDNcdTZjZDVcdTc0M2FcdTUwZmJcdTUyODhcdTU4YzFcdTY0ZDhcdTZhOTdcdTc0YTdcdTc2NTYiXSxbImRjYTEiLCJcdTc4YTdcdTg2MTdcdTk1ZTJcdTk3MzlcdWY5NjVcdTUzNWVcdTVmMDFcdThi''@;'; put 'put ''OGFcdThmYThcdThmYWZcdTkwOGFcdTUyMjVcdTc3YTVcdTljNDlcdTlmMDhcdTRlMTlcdTUwMDJcdTUxNzVcdTVjNWJcdTVlNzdcdTY2MWVcdTY2M2FcdTY3YzRcdTY4YzVcdTcwYjNcdTc1MDFcdTc1YzVcdTc5YzlcdTdhZGRcdThmMjdcdTk5MjBcdTlhMDhcdTRmZGRcdTU4MjFcdTU4MzFc''@;'; put 'put ''dTViZjZcdTY2NmVcdTZiNjVcdTZkMTFcdTZlN2FcdTZmN2RcdTczZTRcdTc1MmJcdTgzZTlcdTg4ZGNcdTg5MTNcdThiNWNcdThmMTRcdTRmMGZcdTUwZDVcdTUzMTBcdTUzNWNcdTViOTNcdTVmYTlcdTY3MGRcdTc5OGZcdTgxNzlcdTgzMmZcdTg1MTRcdTg5MDdcdTg5ODZcdThmMzlcdThm''@;'; put 'put ''M2JcdTk5YTVcdTljMTJcdTY3MmNcdTRlNzZcdTRmZjhcdTU5NDlcdTVjMDFcdTVjZWZcdTVjZjBcdTYzNjdcdTY4ZDJcdTcwZmRcdTcxYTJcdTc0MmJcdTdlMmJcdTg0ZWNcdTg3MDJcdTkwMjJcdTkyZDJcdTljZjNcdTRlMGRcdTRlZDhcdTRmZWZcdTUwODVcdTUyNTZcdTUyNmZcdTU0MjZc''@;'; put 'put ''dTU0OTBcdTU3ZTBcdTU5MmJcdTVhNjYiXSxbImRkYTEiLCJcdTViNWFcdTViNzVcdTViY2NcdTVlOWNcdWY5NjZcdTYyNzZcdTY1NzdcdTY1YTdcdTZkNmVcdTZlYTVcdTcyMzZcdTdiMjZcdTdjM2ZcdTdmMzZcdTgxNTBcdTgxNTFcdTgxOWFcdTgyNDBcdTgyOTlcdTgzYTlcdThhMDNcdThj''@;'; put 'put ''YTBcdThjZTZcdThjZmJcdThkNzRcdThkYmFcdTkwZThcdTkxZGNcdTk2MWNcdTk2NDRcdTk5ZDlcdTljZTdcdTUzMTdcdTUyMDZcdTU0MjlcdTU2NzRcdTU4YjNcdTU5NTRcdTU5NmVcdTVmZmZcdTYxYTRcdTYyNmVcdTY2MTBcdTZjN2VcdTcxMWFcdTc2YzZcdTdjODlcdTdjZGVcdTdkMWJc''@;'; put 'put ''dTgyYWNcdThjYzFcdTk2ZjBcdWY5NjdcdTRmNWJcdTVmMTdcdTVmN2ZcdTYyYzJcdTVkMjlcdTY3MGJcdTY4ZGFcdTc4N2NcdTdlNDNcdTlkNmNcdTRlMTVcdTUwOTlcdTUzMTVcdTUzMmFcdTUzNTFcdTU5ODNcdTVhNjJcdTVlODdcdTYwYjJcdTYxOGFcdTYyNDlcdTYyNzlcdTY1OTBcdTY3''@;'; put 'put ''ODdcdTY5YTdcdTZiZDRcdTZiZDZcdTZiZDdcdTZiZDhcdTZjYjhcdWY5NjhcdTc0MzVcdTc1ZmFcdTc4MTJcdTc4OTFcdTc5ZDVcdTc5ZDhcdTdjODNcdTdkY2JcdTdmZTFcdTgwYTUiXSxbImRlYTEiLCJcdTgxM2VcdTgxYzJcdTgzZjJcdTg3MWFcdTg4ZThcdThhYjlcdThiNmNcdThjYmJc''@;'; put 'put ''dTkxMTlcdTk3NWVcdTk4ZGJcdTlmM2JcdTU2YWNcdTViMmFcdTVmNmNcdTY1OGNcdTZhYjNcdTZiYWZcdTZkNWNcdTZmZjFcdTcwMTVcdTcyNWRcdTczYWRcdThjYTdcdThjZDNcdTk4M2JcdTYxOTFcdTZjMzdcdTgwNThcdTlhMDFcdTRlNGRcdTRlOGJcdTRlOWJcdTRlZDVcdTRmM2FcdTRm''@;'; put 'put ''M2NcdTRmN2ZcdTRmZGZcdTUwZmZcdTUzZjJcdTUzZjhcdTU1MDZcdTU1ZTNcdTU2ZGJcdTU4ZWJcdTU5NjJcdTVhMTFcdTViZWJcdTViZmFcdTVjMDRcdTVkZjNcdTVlMmJcdTVmOTlcdTYwMWRcdTYzNjhcdTY1OWNcdTY1YWZcdTY3ZjZcdTY3ZmJcdTY4YWRcdTZiN2JcdTZjOTlcdTZjZDdc''@;'; put 'put ''dTZlMjNcdTcwMDlcdTczNDVcdTc4MDJcdTc5M2VcdTc5NDBcdTc5NjBcdTc5YzFcdTdiZTlcdTdkMTdcdTdkNzJcdTgwODZcdTgyMGRcdTgzOGVcdTg0ZDFcdTg2YzdcdTg4ZGZcdThhNTBcdThhNWVcdThiMWRcdThjZGNcdThkNjZcdThmYWRcdTkwYWFcdTk4ZmNcdTk5ZGZcdTllOWRcdTUy''@;'; put 'put ''NGFcdWY5NjlcdTY3MTRcdWY5NmEiXSxbImRmYTEiLCJcdTUwOThcdTUyMmFcdTVjNzFcdTY1NjNcdTZjNTVcdTczY2FcdTc1MjNcdTc1OWRcdTdiOTdcdTg0OWNcdTkxNzhcdTk3MzBcdTRlNzdcdTY0OTJcdTZiYmFcdTcxNWVcdTg1YTlcdTRlMDlcdWY5NmJcdTY3NDlcdTY4ZWVcdTZlMTdc''@;'; put 'put ''dTgyOWZcdTg1MThcdTg4NmJcdTYzZjdcdTZmODFcdTkyMTJcdTk4YWZcdTRlMGFcdTUwYjdcdTUwY2ZcdTUxMWZcdTU1NDZcdTU1YWFcdTU2MTdcdTViNDBcdTVjMTlcdTVjZTBcdTVlMzhcdTVlOGFcdTVlYTBcdTVlYzJcdTYwZjNcdTY4NTFcdTZhNjFcdTZlNThcdTcyM2RcdTcyNDBcdTcy''@;'; put 'put ''YzBcdTc2ZjhcdTc5NjVcdTdiYjFcdTdmZDRcdTg4ZjNcdTg5ZjRcdThhNzNcdThjNjFcdThjZGVcdTk3MWNcdTU4NWVcdTc0YmRcdThjZmRcdTU1YzdcdWY5NmNcdTdhNjFcdTdkMjJcdTgyNzJcdTcyNzJcdTc1MWZcdTc1MjVcdWY5NmRcdTdiMTlcdTU4ODVcdTU4ZmJcdTVkYmNcdTVlOGZc''@;'; put 'put ''dTVlYjZcdTVmOTBcdTYwNTVcdTYyOTJcdTYzN2ZcdTY1NGRcdTY2OTFcdTY2ZDlcdTY2ZjhcdTY4MTZcdTY4ZjJcdTcyODBcdTc0NWVcdTdiNmVcdTdkNmVcdTdkZDZcdTdmNzIiXSxbImUwYTEiLCJcdTgwZTVcdTgyMTJcdTg1YWZcdTg5N2ZcdThhOTNcdTkwMWRcdTkyZTRcdTllY2RcdTlm''@;'; put 'put ''MjBcdTU5MTVcdTU5NmRcdTVlMmRcdTYwZGNcdTY2MTRcdTY2NzNcdTY3OTBcdTZjNTBcdTZkYzVcdTZmNWZcdTc3ZjNcdTc4YTlcdTg0YzZcdTkxY2JcdTkzMmJcdTRlZDlcdTUwY2FcdTUxNDhcdTU1ODRcdTViMGJcdTViYTNcdTYyNDdcdTY1N2VcdTY1Y2JcdTZlMzJcdTcxN2RcdTc0MDFc''@;'; put 'put ''dTc0NDRcdTc0ODdcdTc0YmZcdTc2NmNcdTc5YWFcdTdkZGFcdTdlNTVcdTdmYThcdTgxN2FcdTgxYjNcdTgyMzlcdTg2MWFcdTg3ZWNcdThhNzVcdThkZTNcdTkwNzhcdTkyOTFcdTk0MjVcdTk5NGRcdTliYWVcdTUzNjhcdTVjNTFcdTY5NTRcdTZjYzRcdTZkMjlcdTZlMmJcdTgyMGNcdTg1''@;'; put 'put ''OWJcdTg5M2JcdThhMmRcdThhYWFcdTk2ZWFcdTlmNjdcdTUyNjFcdTY2YjlcdTZiYjJcdTdlOTZcdTg3ZmVcdThkMGRcdTk1ODNcdTk2NWRcdTY1MWRcdTZkODlcdTcxZWVcdWY5NmVcdTU3Y2VcdTU5ZDNcdTViYWNcdTYwMjdcdTYwZmFcdTYyMTBcdTY2MWZcdTY2NWZcdTczMjlcdTczZjlc''@;'; put 'put ''dTc2ZGJcdTc3MDFcdTdiNmMiXSxbImUxYTEiLCJcdTgwNTZcdTgwNzJcdTgxNjVcdThhYTBcdTkxOTJcdTRlMTZcdTUyZTJcdTZiNzJcdTZkMTdcdTdhMDVcdTdiMzlcdTdkMzBcdWY5NmZcdThjYjBcdTUzZWNcdTU2MmZcdTU4NTFcdTViYjVcdTVjMGZcdTVjMTFcdTVkZTJcdTYyNDBcdTYz''@;'; put 'put ''ODNcdTY0MTRcdTY2MmRcdTY4YjNcdTZjYmNcdTZkODhcdTZlYWZcdTcwMWZcdTcwYTRcdTcxZDJcdTc1MjZcdTc1OGZcdTc1OGVcdTc2MTlcdTdiMTFcdTdiZTBcdTdjMmJcdTdkMjBcdTdkMzlcdTg1MmNcdTg1NmRcdTg2MDdcdThhMzRcdTkwMGRcdTkwNjFcdTkwYjVcdTkyYjdcdTk3ZjZc''@;'; put 'put ''dTlhMzdcdTRmZDdcdTVjNmNcdTY3NWZcdTZkOTFcdTdjOWZcdTdlOGNcdThiMTZcdThkMTZcdTkwMWZcdTViNmJcdTVkZmRcdTY0MGRcdTg0YzBcdTkwNWNcdTk4ZTFcdTczODdcdTViOGJcdTYwOWFcdTY3N2VcdTZkZGVcdThhMWZcdThhYTZcdTkwMDFcdTk4MGNcdTUyMzdcdWY5NzBcdTcw''@;'; put 'put ''NTFcdTc4OGVcdTkzOTZcdTg4NzBcdTkxZDdcdTRmZWVcdTUzZDdcdTU1ZmRcdTU2ZGFcdTU3ODJcdTU4ZmRcdTVhYzJcdTViODhcdTVjYWJcdTVjYzBcdTVlMjVcdTYxMDEiXSxbImUyYTEiLCJcdTYyMGRcdTYyNGJcdTYzODhcdTY0MWNcdTY1MzZcdTY1NzhcdTZhMzlcdTZiOGFcdTZjMzRc''@;'; put 'put ''dTZkMTlcdTZmMzFcdTcxZTdcdTcyZTlcdTczNzhcdTc0MDdcdTc0YjJcdTc2MjZcdTc3NjFcdTc5YzBcdTdhNTdcdTdhZWFcdTdjYjlcdTdkOGZcdTdkYWNcdTdlNjFcdTdmOWVcdTgxMjlcdTgzMzFcdTg0OTBcdTg0ZGFcdTg1ZWFcdTg4OTZcdThhYjBcdThiOTBcdThmMzhcdTkwNDJcdTkw''@;'; put 'put ''ODNcdTkxNmNcdTkyOTZcdTkyYjlcdTk2OGJcdTk2YTdcdTk2YThcdTk2ZDZcdTk3MDBcdTk4MDhcdTk5OTZcdTlhZDNcdTliMWFcdTUzZDRcdTU4N2VcdTU5MTlcdTViNzBcdTViYmZcdTZkZDFcdTZmNWFcdTcxOWZcdTc0MjFcdTc0YjlcdTgwODVcdTgzZmRcdTVkZTFcdTVmODdcdTVmYWFc''@;'; put 'put ''dTYwNDJcdTY1ZWNcdTY4MTJcdTY5NmZcdTZhNTNcdTZiODlcdTZkMzVcdTZkZjNcdTczZTNcdTc2ZmVcdTc3YWNcdTdiNGRcdTdkMTRcdTgxMjNcdTgyMWNcdTgzNDBcdTg0ZjRcdTg1NjNcdThhNjJcdThhYzRcdTkxODdcdTkzMWVcdTk4MDZcdTk5YjRcdTYyMGNcdTg4NTNcdThmZjBcdTky''@;'; put 'put ''NjVcdTVkMDdcdTVkMjciXSxbImUzYTEiLCJcdTVkNjlcdTc0NWZcdTgxOWRcdTg3NjhcdTZmZDVcdTYyZmVcdTdmZDJcdTg5MzZcdTg5NzJcdTRlMWVcdTRlNThcdTUwZTdcdTUyZGRcdTUzNDdcdTYyN2ZcdTY2MDdcdTdlNjlcdTg4MDVcdTk2NWVcdTRmOGRcdTUzMTlcdTU2MzZcdTU5Y2Jc''@;'; put 'put ''dTVhYTRcdTVjMzhcdTVjNGVcdTVjNGRcdTVlMDJcdTVmMTFcdTYwNDNcdTY1YmRcdTY2MmZcdTY2NDJcdTY3YmVcdTY3ZjRcdTczMWNcdTc3ZTJcdTc5M2FcdTdmYzVcdTg0OTRcdTg0Y2RcdTg5OTZcdThhNjZcdThhNjlcdThhZTFcdThjNTVcdThjN2FcdTU3ZjRcdTViZDRcdTVmMGZcdTYw''@;'; put 'put ''NmZcdTYyZWRcdTY5MGRcdTZiOTZcdTZlNWNcdTcxODRcdTdiZDJcdTg3NTVcdThiNThcdThlZmVcdTk4ZGZcdTk4ZmVcdTRmMzhcdTRmODFcdTRmZTFcdTU0N2JcdTVhMjBcdTViYjhcdTYxM2NcdTY1YjBcdTY2NjhcdTcxZmNcdTc1MzNcdTc5NWVcdTdkMzNcdTgxNGVcdTgxZTNcdTgzOThc''@;'; put 'put ''dTg1YWFcdTg1Y2VcdTg3MDNcdThhMGFcdThlYWJcdThmOWJcdWY5NzFcdThmYzVcdTU5MzFcdTViYTRcdTViZTZcdTYwODlcdTViZTlcdTVjMGJcdTVmYzNcdTZjODEiXSxbImU0YTEiLCJcdWY5NzJcdTZkZjFcdTcwMGJcdTc1MWFcdTgyYWZcdThhZjZcdTRlYzBcdTUzNDFcdWY5NzNcdTk2''@;'; put 'put ''ZDlcdTZjMGZcdTRlOWVcdTRmYzRcdTUxNTJcdTU1NWVcdTVhMjVcdTVjZThcdTYyMTFcdTcyNTlcdTgyYmRcdTgzYWFcdTg2ZmVcdTg4NTlcdThhMWRcdTk2M2ZcdTk2YzVcdTk5MTNcdTlkMDlcdTlkNWRcdTU4MGFcdTVjYjNcdTVkYmRcdTVlNDRcdTYwZTFcdTYxMTVcdTYzZTFcdTZhMDJc''@;'; put 'put ''dTZlMjVcdTkxMDJcdTkzNTRcdTk4NGVcdTljMTBcdTlmNzdcdTViODlcdTVjYjhcdTYzMDlcdTY2NGZcdTY4NDhcdTc3M2NcdTk2YzFcdTk3OGRcdTk4NTRcdTliOWZcdTY1YTFcdThiMDFcdThlY2JcdTk1YmNcdTU1MzVcdTVjYTlcdTVkZDZcdTVlYjVcdTY2OTdcdTc2NGNcdTgzZjRcdTk1''@;'; put 'put ''YzdcdTU4ZDNcdTYyYmNcdTcyY2VcdTlkMjhcdTRlZjBcdTU5MmVcdTYwMGZcdTY2M2JcdTZiODNcdTc5ZTdcdTlkMjZcdTUzOTNcdTU0YzBcdTU3YzNcdTVkMTZcdTYxMWJcdTY2ZDZcdTZkYWZcdTc4OGRcdTgyN2VcdTk2OThcdTk3NDRcdTUzODRcdTYyN2NcdTYzOTZcdTZkYjJcdTdlMGFc''@;'; put 'put ''dTgxNGJcdTk4NGQiXSxbImU1YTEiLCJcdTZhZmJcdTdmNGNcdTlkYWZcdTllMWFcdTRlNWZcdTUwM2JcdTUxYjZcdTU5MWNcdTYwZjlcdTYzZjZcdTY5MzBcdTcyM2FcdTgwMzZcdWY5NzRcdTkxY2VcdTVmMzFcdWY5NzVcdWY5NzZcdTdkMDRcdTgyZTVcdTg0NmZcdTg0YmJcdTg1ZTVcdThl''@;'; put 'put ''OGRcdWY5NzdcdTRmNmZcdWY5NzhcdWY5NzlcdTU4ZTRcdTViNDNcdTYwNTlcdTYzZGFcdTY1MThcdTY1NmRcdTY2OThcdWY5N2FcdTY5NGFcdTZhMjNcdTZkMGJcdTcwMDFcdTcxNmNcdTc1ZDJcdTc2MGRcdTc5YjNcdTdhNzBcdWY5N2JcdTdmOGFcdWY5N2NcdTg5NDRcdWY5N2RcdThiOTNc''@;'; put 'put ''dTkxYzBcdTk2N2RcdWY5N2VcdTk5MGFcdTU3MDRcdTVmYTFcdTY1YmNcdTZmMDFcdTc2MDBcdTc5YTZcdThhOWVcdTk5YWRcdTliNWFcdTlmNmNcdTUxMDRcdTYxYjZcdTYyOTFcdTZhOGRcdTgxYzZcdTUwNDNcdTU4MzBcdTVmNjZcdTcxMDlcdThhMDBcdThhZmFcdTViN2NcdTg2MTZcdTRm''@;'; put 'put ''ZmFcdTUxM2NcdTU2YjRcdTU5NDRcdTYzYTlcdTZkZjlcdTVkYWFcdTY5NmRcdTUxODZcdTRlODhcdTRmNTlcdWY5N2ZcdWY5ODBcdWY5ODFcdTU5ODJcdWY5ODIiXSxbImU2YTEiLCJcdWY5ODNcdTZiNWZcdTZjNWRcdWY5ODRcdTc0YjVcdTc5MTZcdWY5ODVcdTgyMDdcdTgyNDVcdTgzMzlc''@;'; put 'put ''dThmM2ZcdThmNWRcdWY5ODZcdTk5MThcdWY5ODdcdWY5ODhcdWY5ODlcdTRlYTZcdWY5OGFcdTU3ZGZcdTVmNzlcdTY2MTNcdWY5OGJcdWY5OGNcdTc1YWJcdTdlNzlcdThiNmZcdWY5OGRcdTkwMDZcdTlhNWJcdTU2YTVcdTU4MjdcdTU5ZjhcdTVhMWZcdTViYjRcdWY5OGVcdTVlZjZcdWY5''@;'; put 'put ''OGZcdWY5OTBcdTYzNTBcdTYzM2JcdWY5OTFcdTY5M2RcdTZjODdcdTZjYmZcdTZkOGVcdTZkOTNcdTZkZjVcdTZmMTRcdWY5OTJcdTcwZGZcdTcxMzZcdTcxNTlcdWY5OTNcdTcxYzNcdTcxZDVcdWY5OTRcdTc4NGZcdTc4NmZcdWY5OTVcdTdiNzVcdTdkZTNcdWY5OTZcdTdlMmZcdWY5OTdc''@;'; put 'put ''dTg4NGRcdThlZGZcdWY5OThcdWY5OTlcdWY5OWFcdTkyNWJcdWY5OWJcdTljZjZcdWY5OWNcdWY5OWRcdWY5OWVcdTYwODVcdTZkODVcdWY5OWZcdTcxYjFcdWY5YTBcdWY5YTFcdTk1YjFcdTUzYWRcdWY5YTJcdWY5YTNcdWY5YTRcdTY3ZDNcdWY5YTVcdTcwOGVcdTcxMzBcdTc0MzBcdTgy''@;'; put 'put ''NzZcdTgyZDIiXSxbImU3YTEiLCJcdWY5YTZcdTk1YmJcdTlhZTVcdTllN2RcdTY2YzRcdWY5YTdcdTcxYzFcdTg0NDlcdWY5YThcdWY5YTlcdTU4NGJcdWY5YWFcdWY5YWJcdTVkYjhcdTVmNzFcdWY5YWNcdTY2MjBcdTY2OGVcdTY5NzlcdTY5YWVcdTZjMzhcdTZjZjNcdTZlMzZcdTZmNDFc''@;'; put 'put ''dTZmZGFcdTcwMWJcdTcwMmZcdTcxNTBcdTcxZGZcdTczNzBcdWY5YWRcdTc0NWJcdWY5YWVcdTc0ZDRcdTc2YzhcdTdhNGVcdTdlOTNcdWY5YWZcdWY5YjBcdTgyZjFcdThhNjBcdThmY2VcdWY5YjFcdTkzNDhcdWY5YjJcdTk3MTlcdWY5YjNcdWY5YjRcdTRlNDJcdTUwMmFcdWY5YjVcdTUy''@;'; put 'put ''MDhcdTUzZTFcdTY2ZjNcdTZjNmRcdTZmY2FcdTczMGFcdTc3N2ZcdTdhNjJcdTgyYWVcdTg1ZGRcdTg2MDJcdWY5YjZcdTg4ZDRcdThhNjNcdThiN2RcdThjNmJcdWY5YjdcdTkyYjNcdWY5YjhcdTk3MTNcdTk4MTBcdTRlOTRcdTRmMGRcdTRmYzlcdTUwYjJcdTUzNDhcdTU0M2VcdTU0MzNc''@;'; put 'put ''dTU1ZGFcdTU4NjJcdTU4YmFcdTU5NjdcdTVhMWJcdTViZTRcdTYwOWZcdWY5YjlcdTYxY2FcdTY1NTZcdTY1ZmZcdTY2NjRcdTY4YTdcdTZjNWFcdTZmYjMiXSxbImU4YTEiLCJcdTcwY2ZcdTcxYWNcdTczNTJcdTdiN2RcdTg3MDhcdThhYTRcdTljMzJcdTlmMDdcdTVjNGJcdTZjODNcdTcz''@;'; put 'put ''NDRcdTczODlcdTkyM2FcdTZlYWJcdTc0NjVcdTc2MWZcdTdhNjlcdTdlMTVcdTg2MGFcdTUxNDBcdTU4YzVcdTY0YzFcdTc0ZWVcdTc1MTVcdTc2NzBcdTdmYzFcdTkwOTVcdTk2Y2RcdTk5NTRcdTZlMjZcdTc0ZTZcdTdhYTlcdTdhYWFcdTgxZTVcdTg2ZDlcdTg3NzhcdThhMWJcdTVhNDlc''@;'; put 'put ''dTViOGNcdTViOWJcdTY4YTFcdTY5MDBcdTZkNjNcdTczYTlcdTc0MTNcdTc0MmNcdTc4OTdcdTdkZTlcdTdmZWJcdTgxMThcdTgxNTVcdTgzOWVcdThjNGNcdTk2MmVcdTk4MTFcdTY2ZjBcdTVmODBcdTY1ZmFcdTY3ODlcdTZjNmFcdTczOGJcdTUwMmRcdTVhMDNcdTZiNmFcdTc3ZWVcdTU5''@;'; put 'put ''MTZcdTVkNmNcdTVkY2RcdTczMjVcdTc1NGZcdWY5YmFcdWY5YmJcdTUwZTVcdTUxZjlcdTU4MmZcdTU5MmRcdTU5OTZcdTU5ZGFcdTViZTVcdWY5YmNcdWY5YmRcdTVkYTJcdTYyZDdcdTY0MTZcdTY0OTNcdTY0ZmVcdWY5YmVcdTY2ZGNcdWY5YmZcdTZhNDhcdWY5YzBcdTcxZmZcdTc0NjRc''@;'; put 'put ''dWY5YzEiXSxbImU5YTEiLCJcdTdhODhcdTdhYWZcdTdlNDdcdTdlNWVcdTgwMDBcdTgxNzBcdWY5YzJcdTg3ZWZcdTg5ODFcdThiMjBcdTkwNTlcdWY5YzNcdTkwODBcdTk5NTJcdTYxN2VcdTZiMzJcdTZkNzRcdTdlMWZcdTg5MjVcdThmYjFcdTRmZDFcdTUwYWRcdTUxOTdcdTUyYzdcdTU3''@;'; put 'put ''YzdcdTU4ODlcdTViYjlcdTVlYjhcdTYxNDJcdTY5OTVcdTZkOGNcdTZlNjdcdTZlYjZcdTcxOTRcdTc0NjJcdTc1MjhcdTc1MmNcdTgwNzNcdTgzMzhcdTg0YzlcdThlMGFcdTkzOTRcdTkzZGVcdWY5YzRcdTRlOGVcdTRmNTFcdTUwNzZcdTUxMmFcdTUzYzhcdTUzY2JcdTUzZjNcdTViODdc''@;'; put 'put ''dTViZDNcdTVjMjRcdTYxMWFcdTYxODJcdTY1ZjRcdTcyNWJcdTczOTdcdTc0NDBcdTc2YzJcdTc5NTBcdTc5OTFcdTc5YjlcdTdkMDZcdTdmYmRcdTgyOGJcdTg1ZDVcdTg2NWVcdThmYzJcdTkwNDdcdTkwZjVcdTkxZWFcdTk2ODVcdTk2ZThcdTk2ZTlcdTUyZDZcdTVmNjdcdTY1ZWRcdTY2''@;'; put 'put ''MzFcdTY4MmZcdTcxNWNcdTdhMzZcdTkwYzFcdTk4MGFcdTRlOTFcdWY5YzVcdTZhNTJcdTZiOWVcdTZmOTBcdTcxODlcdTgwMThcdTgyYjhcdTg1NTMiXSxbImVhYTEiLCJcdTkwNGJcdTk2OTVcdTk2ZjJcdTk3ZmJcdTg1MWFcdTliMzFcdTRlOTBcdTcxOGFcdTk2YzRcdTUxNDNcdTUzOWZc''@;'; put 'put ''dTU0ZTFcdTU3MTNcdTU3MTJcdTU3YTNcdTVhOWJcdTVhYzRcdTViYzNcdTYwMjhcdTYxM2ZcdTYzZjRcdTZjODVcdTZkMzlcdTZlNzJcdTZlOTBcdTcyMzBcdTczM2ZcdTc0NTdcdTgyZDFcdTg4ODFcdThmNDVcdTkwNjBcdWY5YzZcdTk2NjJcdTk4NThcdTlkMWJcdTY3MDhcdThkOGFcdTky''@;'; put 'put ''NWVcdTRmNGRcdTUwNDlcdTUwZGVcdTUzNzFcdTU3MGRcdTU5ZDRcdTVhMDFcdTVjMDlcdTYxNzBcdTY2OTBcdTZlMmRcdTcyMzJcdTc0NGJcdTdkZWZcdTgwYzNcdTg0MGVcdTg0NjZcdTg1M2ZcdTg3NWZcdTg4NWJcdTg5MThcdThiMDJcdTkwNTVcdTk3Y2JcdTliNGZcdTRlNzNcdTRmOTFc''@;'; put 'put ''dTUxMTJcdTUxNmFcdWY5YzdcdTU1MmZcdTU1YTlcdTViN2FcdTViYTVcdTVlN2NcdTVlN2RcdTVlYmVcdTYwYTBcdTYwZGZcdTYxMDhcdTYxMDlcdTYzYzRcdTY1MzhcdTY3MDlcdWY5YzhcdTY3ZDRcdTY3ZGFcdWY5YzlcdTY5NjFcdTY5NjJcdTZjYjlcdTZkMjdcdWY5Y2FcdTZlMzhcdWY5''@;'; put 'put ''Y2IiXSxbImViYTEiLCJcdTZmZTFcdTczMzZcdTczMzdcdWY5Y2NcdTc0NWNcdTc1MzFcdWY5Y2RcdTc2NTJcdWY5Y2VcdWY5Y2ZcdTdkYWRcdTgxZmVcdTg0MzhcdTg4ZDVcdThhOThcdThhZGJcdThhZWRcdThlMzBcdThlNDJcdTkwNGFcdTkwM2VcdTkwN2FcdTkxNDlcdTkxYzlcdTkzNmVc''@;'; put 'put ''dWY5ZDBcdWY5ZDFcdTU4MDlcdWY5ZDJcdTZiZDNcdTgwODlcdTgwYjJcdWY5ZDNcdWY5ZDRcdTUxNDFcdTU5NmJcdTVjMzlcdWY5ZDVcdWY5ZDZcdTZmNjRcdTczYTdcdTgwZTRcdThkMDdcdWY5ZDdcdTkyMTdcdTk1OGZcdWY5ZDhcdWY5ZDlcdWY5ZGFcdWY5ZGJcdTgwN2ZcdTYyMGVcdTcw''@;'; put 'put ''MWNcdTdkNjhcdTg3OGRcdWY5ZGNcdTU3YTBcdTYwNjlcdTYxNDdcdTZiYjdcdThhYmVcdTkyODBcdTk2YjFcdTRlNTlcdTU0MWZcdTZkZWJcdTg1MmRcdTk2NzBcdTk3ZjNcdTk4ZWVcdTYzZDZcdTZjZTNcdTkwOTFcdTUxZGRcdTYxYzlcdTgxYmFcdTlkZjlcdTRmOWRcdTUwMWFcdTUxMDBc''@;'; put 'put ''dTViOWNcdTYxMGZcdTYxZmZcdTY0ZWNcdTY5MDVcdTZiYzVcdTc1OTFcdTc3ZTNcdTdmYTlcdTgyNjRcdTg1OGZcdTg3ZmJcdTg4NjNcdThhYmMiXSxbImVjYTEiLCJcdThiNzBcdTkxYWJcdTRlOGNcdTRlZTVcdTRmMGFcdWY5ZGRcdWY5ZGVcdTU5MzdcdTU5ZThcdWY5ZGZcdTVkZjJcdTVm''@;'; put 'put ''MWJcdTVmNWJcdTYwMjFcdWY5ZTBcdWY5ZTFcdWY5ZTJcdWY5ZTNcdTcyM2VcdTczZTVcdWY5ZTRcdTc1NzBcdTc1Y2RcdWY5ZTVcdTc5ZmJcdWY5ZTZcdTgwMGNcdTgwMzNcdTgwODRcdTgyZTFcdTgzNTFcdWY5ZTdcdWY5ZThcdThjYmRcdThjYjNcdTkwODdcdWY5ZTlcdWY5ZWFcdTk4ZjRc''@;'; put 'put ''dTk5MGNcdWY5ZWJcdWY5ZWNcdTcwMzdcdTc2Y2FcdTdmY2FcdTdmY2NcdTdmZmNcdThiMWFcdTRlYmFcdTRlYzFcdTUyMDNcdTUzNzBcdWY5ZWRcdTU0YmRcdTU2ZTBcdTU5ZmJcdTViYzVcdTVmMTVcdTVmY2RcdTZlNmVcdWY5ZWVcdWY5ZWZcdTdkNmFcdTgzMzVcdWY5ZjBcdTg2OTNcdThh''@;'; put 'put ''OGRcdWY5ZjFcdTk3NmRcdTk3NzdcdWY5ZjJcdWY5ZjNcdTRlMDBcdTRmNWFcdTRmN2VcdTU4ZjlcdTY1ZTVcdTZlYTJcdTkwMzhcdTkzYjBcdTk5YjlcdTRlZmJcdTU4ZWNcdTU5OGFcdTU5ZDlcdTYwNDFcdWY5ZjRcdWY5ZjVcdTdhMTRcdWY5ZjZcdTgzNGZcdThjYzNcdTUxNjVcdTUzNDQi''@;'; put 'put ''XSxbImVkYTEiLCJcdWY5ZjdcdWY5ZjhcdWY5ZjlcdTRlY2RcdTUyNjlcdTViNTVcdTgyYmZcdTRlZDRcdTUyM2FcdTU0YThcdTU5YzlcdTU5ZmZcdTViNTBcdTViNTdcdTViNWNcdTYwNjNcdTYxNDhcdTZlY2JcdTcwOTlcdTcxNmVcdTczODZcdTc0ZjdcdTc1YjVcdTc4YzFcdTdkMmJcdTgw''@;'; put 'put ''MDVcdTgxZWFcdTgzMjhcdTg1MTdcdTg1YzlcdThhZWVcdThjYzdcdTk2Y2NcdTRmNWNcdTUyZmFcdTU2YmNcdTY1YWJcdTY2MjhcdTcwN2NcdTcwYjhcdTcyMzVcdTdkYmRcdTgyOGRcdTkxNGNcdTk2YzBcdTlkNzJcdTViNzFcdTY4ZTdcdTZiOThcdTZmN2FcdTc2ZGVcdTVjOTFcdTY2YWJc''@;'; put 'put ''dTZmNWJcdTdiYjRcdTdjMmFcdTg4MzZcdTk2ZGNcdTRlMDhcdTRlZDdcdTUzMjBcdTU4MzRcdTU4YmJcdTU4ZWZcdTU5NmNcdTVjMDdcdTVlMzNcdTVlODRcdTVmMzVcdTYzOGNcdTY2YjJcdTY3NTZcdTZhMWZcdTZhYTNcdTZiMGNcdTZmM2ZcdTcyNDZcdWY5ZmFcdTczNTBcdTc0OGJcdTdh''@;'; put 'put ''ZTBcdTdjYTdcdTgxNzhcdTgxZGZcdTgxZTdcdTgzOGFcdTg0NmNcdTg1MjNcdTg1OTRcdTg1Y2ZcdTg4ZGRcdThkMTNcdTkxYWNcdTk1NzciXSxbImVlYTEiLCJcdTk2OWNcdTUxOGRcdTU0YzlcdTU3MjhcdTViYjBcdTYyNGRcdTY3NTBcdTY4M2RcdTY4OTNcdTZlM2RcdTZlZDNcdTcwN2Rc''@;'; put 'put ''dTdlMjFcdTg4YzFcdThjYTFcdThmMDlcdTlmNGJcdTlmNGVcdTcyMmRcdTdiOGZcdThhY2RcdTkzMWFcdTRmNDdcdTRmNGVcdTUxMzJcdTU0ODBcdTU5ZDBcdTVlOTVcdTYyYjVcdTY3NzVcdTY5NmVcdTZhMTdcdTZjYWVcdTZlMWFcdTcyZDlcdTczMmFcdTc1YmRcdTdiYjhcdTdkMzVcdTgy''@;'; put 'put ''ZTdcdTgzZjlcdTg0NTdcdTg1ZjdcdThhNWJcdThjYWZcdThlODdcdTkwMTlcdTkwYjhcdTk2Y2VcdTlmNWZcdTUyZTNcdTU0MGFcdTVhZTFcdTViYzJcdTY0NThcdTY1NzVcdTZlZjRcdTcyYzRcdWY5ZmJcdTc2ODRcdTdhNGRcdTdiMWJcdTdjNGRcdTdlM2VcdTdmZGZcdTgzN2JcdThiMmJc''@;'; put 'put ''dThjY2FcdThkNjRcdThkZTFcdThlNWZcdThmZWFcdThmZjlcdTkwNjlcdTkzZDFcdTRmNDNcdTRmN2FcdTUwYjNcdTUxNjhcdTUxNzhcdTUyNGRcdTUyNmFcdTU4NjFcdTU4N2NcdTU5NjBcdTVjMDhcdTVjNTVcdTVlZGJcdTYwOWJcdTYyMzBcdTY4MTNcdTZiYmZcdTZjMDhcdTZmYjEiXSxb''@;'; put 'put ''ImVmYTEiLCJcdTcxNGVcdTc0MjBcdTc1MzBcdTc1MzhcdTc1NTFcdTc2NzJcdTdiNGNcdTdiOGJcdTdiYWRcdTdiYzZcdTdlOGZcdThhNmVcdThmM2VcdThmNDlcdTkyM2ZcdTkyOTNcdTkzMjJcdTk0MmJcdTk2ZmJcdTk4NWFcdTk4NmJcdTk5MWVcdTUyMDdcdTYyMmFcdTYyOThcdTZkNTlc''@;'; put 'put ''dTc2NjRcdTdhY2FcdTdiYzBcdTdkNzZcdTUzNjBcdTVjYmVcdTVlOTdcdTZmMzhcdTcwYjlcdTdjOThcdTk3MTFcdTliOGVcdTllZGVcdTYzYTVcdTY0N2FcdTg3NzZcdTRlMDFcdTRlOTVcdTRlYWRcdTUwNWNcdTUwNzVcdTU0NDhcdTU5YzNcdTViOWFcdTVlNDBcdTVlYWRcdTVlZjdcdTVm''@;'; put 'put ''ODFcdTYwYzVcdTYzM2FcdTY1M2ZcdTY1NzRcdTY1Y2NcdTY2NzZcdTY2NzhcdTY3ZmVcdTY5NjhcdTZhODlcdTZiNjNcdTZjNDBcdTZkYzBcdTZkZThcdTZlMWZcdTZlNWVcdTcwMWVcdTcwYTFcdTczOGVcdTczZmRcdTc1M2FcdTc3NWJcdTc4ODdcdTc5OGVcdTdhMGJcdTdhN2RcdTdjYmVc''@;'; put 'put ''dTdkOGVcdTgyNDdcdThhMDJcdThhZWFcdThjOWVcdTkxMmRcdTkxNGFcdTkxZDhcdTkyNjZcdTkyY2NcdTkzMjBcdTk3MDZcdTk3NTYiXSxbImYwYTEiLCJcdTk3NWNcdTk4MDJcdTlmMGVcdTUyMzZcdTUyOTFcdTU1N2NcdTU4MjRcdTVlMWRcdTVmMWZcdTYwOGNcdTYzZDBcdTY4YWZcdTZm''@;'; put 'put ''ZGZcdTc5NmRcdTdiMmNcdTgxY2RcdTg1YmFcdTg4ZmRcdThhZjhcdThlNDRcdTkxOGRcdTk2NjRcdTk2OWJcdTk3M2RcdTk4NGNcdTlmNGFcdTRmY2VcdTUxNDZcdTUxY2JcdTUyYTlcdTU2MzJcdTVmMTRcdTVmNmJcdTYzYWFcdTY0Y2RcdTY1ZTlcdTY2NDFcdTY2ZmFcdTY2ZjlcdTY3MWRc''@;'; put 'put ''dTY4OWRcdTY4ZDdcdTY5ZmRcdTZmMTVcdTZmNmVcdTcxNjdcdTcxZTVcdTcyMmFcdTc0YWFcdTc3M2FcdTc5NTZcdTc5NWFcdTc5ZGZcdTdhMjBcdTdhOTVcdTdjOTdcdTdjZGZcdTdkNDRcdTdlNzBcdTgwODdcdTg1ZmJcdTg2YTRcdThhNTRcdThhYmZcdThkOTlcdThlODFcdTkwMjBcdTkw''@;'; put 'put ''NmRcdTkxZTNcdTk2M2JcdTk2ZDVcdTljZTVcdTY1Y2ZcdTdjMDdcdThkYjNcdTkzYzNcdTViNThcdTVjMGFcdTUzNTJcdTYyZDlcdTczMWRcdTUwMjdcdTViOTdcdTVmOWVcdTYwYjBcdTYxNmJcdTY4ZDVcdTZkZDlcdTc0MmVcdTdhMmVcdTdkNDJcdTdkOWNcdTdlMzFcdTgxNmIiXSxbImYx''@;'; put 'put ''YTEiLCJcdThlMmFcdThlMzVcdTkzN2VcdTk0MThcdTRmNTBcdTU3NTBcdTVkZTZcdTVlYTdcdTYzMmJcdTdmNmFcdTRlM2JcdTRmNGZcdTRmOGZcdTUwNWFcdTU5ZGRcdTgwYzRcdTU0NmFcdTU0NjhcdTU1ZmVcdTU5NGZcdTViOTlcdTVkZGVcdTVlZGFcdTY2NWRcdTY3MzFcdTY3ZjFcdTY4''@;'; put 'put ''MmFcdTZjZThcdTZkMzJcdTZlNGFcdTZmOGRcdTcwYjdcdTczZTBcdTc1ODdcdTdjNGNcdTdkMDJcdTdkMmNcdTdkYTJcdTgyMWZcdTg2ZGJcdThhM2JcdThhODVcdThkNzBcdThlOGFcdThmMzNcdTkwMzFcdTkxNGVcdTkxNTJcdTk0NDRcdTk5ZDBcdTdhZjlcdTdjYTVcdTRmY2FcdTUxMDFc''@;'; put 'put ''dTUxYzZcdTU3YzhcdTViZWZcdTVjZmJcdTY2NTlcdTZhM2RcdTZkNWFcdTZlOTZcdTZmZWNcdTcxMGNcdTc1NmZcdTdhZTNcdTg4MjJcdTkwMjFcdTkwNzVcdTk2Y2JcdTk5ZmZcdTgzMDFcdTRlMmRcdTRlZjJcdTg4NDZcdTkxY2RcdTUzN2RcdTZhZGJcdTY5NmJcdTZjNDFcdTg0N2FcdTU4''@;'; put 'put ''OWVcdTYxOGVcdTY2ZmVcdTYyZWZcdTcwZGRcdTc1MTFcdTc1YzdcdTdlNTJcdTg0YjhcdThiNDlcdThkMDhcdTRlNGJcdTUzZWEiXSxbImYyYTEiLCJcdTU0YWJcdTU3MzBcdTU3NDBcdTVmZDdcdTYzMDFcdTYzMDdcdTY0NmZcdTY1MmZcdTY1ZThcdTY2N2FcdTY3OWRcdTY3YjNcdTZiNjJc''@;'; put 'put ''dTZjNjBcdTZjOWFcdTZmMmNcdTc3ZTVcdTc4MjVcdTc5NDlcdTc5NTdcdTdkMTlcdTgwYTJcdTgxMDJcdTgxZjNcdTgyOWRcdTgyYjdcdTg3MThcdThhOGNcdWY5ZmNcdThkMDRcdThkYmVcdTkwNzJcdTc2ZjRcdTdhMTlcdTdhMzdcdTdlNTRcdTgwNzdcdTU1MDdcdTU1ZDRcdTU4NzVcdTYz''@;'; put 'put ''MmZcdTY0MjJcdTY2NDlcdTY2NGJcdTY4NmRcdTY5OWJcdTZiODRcdTZkMjVcdTZlYjFcdTczY2RcdTc0NjhcdTc0YTFcdTc1NWJcdTc1YjlcdTc2ZTFcdTc3MWVcdTc3OGJcdTc5ZTZcdTdlMDlcdTdlMWRcdTgxZmJcdTg1MmZcdTg4OTdcdThhM2FcdThjZDFcdThlZWJcdThmYjBcdTkwMzJc''@;'; put 'put ''dTkzYWRcdTk2NjNcdTk2NzNcdTk3MDdcdTRmODRcdTUzZjFcdTU5ZWFcdTVhYzlcdTVlMTlcdTY4NGVcdTc0YzZcdTc1YmVcdTc5ZTlcdTdhOTJcdTgxYTNcdTg2ZWRcdThjZWFcdThkY2NcdThmZWRcdTY1OWZcdTY3MTVcdWY5ZmRcdTU3ZjdcdTZmNTdcdTdkZGRcdThmMmYiXSxbImYzYTEi''@;'; put 'put ''LCJcdTkzZjZcdTk2YzZcdTVmYjVcdTYxZjJcdTZmODRcdTRlMTRcdTRmOThcdTUwMWZcdTUzYzlcdTU1ZGZcdTVkNmZcdTVkZWVcdTZiMjFcdTZiNjRcdTc4Y2JcdTdiOWFcdWY5ZmVcdThlNDlcdThlY2FcdTkwNmVcdTYzNDlcdTY0M2VcdTc3NDBcdTdhODRcdTkzMmZcdTk0N2ZcdTlmNmFc''@;'; put 'put ''dTY0YjBcdTZmYWZcdTcxZTZcdTc0YThcdTc0ZGFcdTdhYzRcdTdjMTJcdTdlODJcdTdjYjJcdTdlOThcdThiOWFcdThkMGFcdTk0N2RcdTk5MTBcdTk5NGNcdTUyMzlcdTViZGZcdTY0ZTZcdTY3MmRcdTdkMmVcdTUwZWRcdTUzYzNcdTU4NzlcdTYxNThcdTYxNTlcdTYxZmFcdTY1YWNcdTdh''@;'; put 'put ''ZDlcdThiOTJcdThiOTZcdTUwMDlcdTUwMjFcdTUyNzVcdTU1MzFcdTVhM2NcdTVlZTBcdTVmNzBcdTYxMzRcdTY1NWVcdTY2MGNcdTY2MzZcdTY2YTJcdTY5Y2RcdTZlYzRcdTZmMzJcdTczMTZcdTc2MjFcdTdhOTNcdTgxMzlcdTgyNTlcdTgzZDZcdTg0YmNcdTUwYjVcdTU3ZjBcdTViYzBc''@;'; put 'put ''dTViZThcdTVmNjlcdTYzYTFcdTc4MjZcdTdkYjVcdTgzZGNcdTg1MjFcdTkxYzdcdTkxZjVcdTUxOGFcdTY3ZjVcdTdiNTYiXSxbImY0YTEiLCJcdThjYWNcdTUxYzRcdTU5YmJcdTYwYmRcdTg2NTVcdTUwMWNcdWY5ZmZcdTUyNTRcdTVjM2FcdTYxN2RcdTYyMWFcdTYyZDNcdTY0ZjJcdTY1''@;'; put 'put ''YTVcdTZlY2NcdTc2MjBcdTgxMGFcdThlNjBcdTk2NWZcdTk2YmJcdTRlZGZcdTUzNDNcdTU1OThcdTU5MjlcdTVkZGRcdTY0YzVcdTZjYzlcdTZkZmFcdTczOTRcdTdhN2ZcdTgyMWJcdTg1YTZcdThjZTRcdThlMTBcdTkwNzdcdTkxZTdcdTk1ZTFcdTk2MjFcdTk3YzZcdTUxZjhcdTU0ZjJc''@;'; put 'put ''dTU1ODZcdTVmYjlcdTY0YTRcdTZmODhcdTdkYjRcdThmMWZcdThmNGRcdTk0MzVcdTUwYzlcdTVjMTZcdTZjYmVcdTZkZmJcdTc1MWJcdTc3YmJcdTdjM2RcdTdjNjRcdThhNzlcdThhYzJcdTU4MWVcdTU5YmVcdTVlMTZcdTYzNzdcdTcyNTJcdTc1OGFcdTc3NmJcdThhZGNcdThjYmNcdThm''@;'; put 'put ''MTJcdTVlZjNcdTY2NzRcdTZkZjhcdTgwN2RcdTgzYzFcdThhY2JcdTk3NTFcdTliZDZcdWZhMDBcdTUyNDNcdTY2ZmZcdTZkOTVcdTZlZWZcdTdkZTBcdThhZTZcdTkwMmVcdTkwNWVcdTlhZDRcdTUyMWRcdTUyN2ZcdTU0ZThcdTYxOTRcdTYyODRcdTYyZGJcdTY4YTIiXSxbImY1YTEiLCJc''@;'; put 'put ''dTY5MTJcdTY5NWFcdTZhMzVcdTcwOTJcdTcxMjZcdTc4NWRcdTc5MDFcdTc5MGVcdTc5ZDJcdTdhMGRcdTgwOTZcdTgyNzhcdTgyZDVcdTgzNDlcdTg1NDlcdThjODJcdThkODVcdTkxNjJcdTkxOGJcdTkxYWVcdTRmYzNcdTU2ZDFcdTcxZWRcdTc3ZDdcdTg3MDBcdTg5ZjhcdTViZjhcdTVm''@;'; put 'put ''ZDZcdTY3NTFcdTkwYThcdTUzZTJcdTU4NWFcdTViZjVcdTYwYTRcdTYxODFcdTY0NjBcdTdlM2RcdTgwNzBcdTg1MjVcdTkyODNcdTY0YWVcdTUwYWNcdTVkMTRcdTY3MDBcdTU4OWNcdTYyYmRcdTYzYThcdTY5MGVcdTY5NzhcdTZhMWVcdTZlNmJcdTc2YmFcdTc5Y2JcdTgyYmJcdTg0Mjlc''@;'; put 'put ''dThhY2ZcdThkYThcdThmZmRcdTkxMTJcdTkxNGJcdTkxOWNcdTkzMTBcdTkzMThcdTkzOWFcdTk2ZGJcdTlhMzZcdTljMGRcdTRlMTFcdTc1NWNcdTc5NWRcdTdhZmFcdTdiNTFcdTdiYzlcdTdlMmVcdTg0YzRcdThlNTlcdThlNzRcdThlZjhcdTkwMTBcdTY2MjVcdTY5M2ZcdTc0NDNcdTUx''@;'; put 'put ''ZmFcdTY3MmVcdTllZGNcdTUxNDVcdTVmZTBcdTZjOTZcdTg3ZjJcdTg4NWRcdTg4NzdcdTYwYjRcdTgxYjVcdTg0MDMiXSxbImY2YTEiLCJcdThkMDVcdTUzZDZcdTU0MzlcdTU2MzRcdTVhMzZcdTVjMzFcdTcwOGFcdTdmZTBcdTgwNWFcdTgxMDZcdTgxZWRcdThkYTNcdTkxODlcdTlhNWZc''@;'; put 'put ''dTlkZjJcdTUwNzRcdTRlYzRcdTUzYTBcdTYwZmJcdTZlMmNcdTVjNjRcdTRmODhcdTUwMjRcdTU1ZTRcdTVjZDlcdTVlNWZcdTYwNjVcdTY4OTRcdTZjYmJcdTZkYzRcdTcxYmVcdTc1ZDRcdTc1ZjRcdTc2NjFcdTdhMWFcdTdhNDlcdTdkYzdcdTdkZmJcdTdmNmVcdTgxZjRcdTg2YTlcdThm''@;'; put 'put ''MWNcdTk2YzlcdTk5YjNcdTlmNTJcdTUyNDdcdTUyYzVcdTk4ZWRcdTg5YWFcdTRlMDNcdTY3ZDJcdTZmMDZcdTRmYjVcdTViZTJcdTY3OTVcdTZjODhcdTZkNzhcdTc0MWJcdTc4MjdcdTkxZGRcdTkzN2NcdTg3YzRcdTc5ZTRcdTdhMzFcdTVmZWJcdTRlZDZcdTU0YTRcdTU1M2VcdTU4YWVc''@;'; put 'put ''dTU5YTVcdTYwZjBcdTYyNTNcdTYyZDZcdTY3MzZcdTY5NTVcdTgyMzVcdTk2NDBcdTk5YjFcdTk5ZGRcdTUwMmNcdTUzNTNcdTU1NDRcdTU3N2NcdWZhMDFcdTYyNThcdWZhMDJcdTY0ZTJcdTY2NmJcdTY3ZGRcdTZmYzFcdTZmZWZcdTc0MjJcdTc0MzhcdThhMTciXSxbImY3YTEiLCJcdTk0''@;'; put 'put ''MzhcdTU0NTFcdTU2MDZcdTU3NjZcdTVmNDhcdTYxOWFcdTZiNGVcdTcwNThcdTcwYWRcdTdkYmJcdThhOTVcdTU5NmFcdTgxMmJcdTYzYTJcdTc3MDhcdTgwM2RcdThjYWFcdTU4NTRcdTY0MmRcdTY5YmJcdTViOTVcdTVlMTFcdTZlNmZcdWZhMDNcdTg1NjlcdTUxNGNcdTUzZjBcdTU5MmFc''@;'; put 'put ''dTYwMjBcdTYxNGJcdTZiODZcdTZjNzBcdTZjZjBcdTdiMWVcdTgwY2VcdTgyZDRcdThkYzZcdTkwYjBcdTk4YjFcdWZhMDRcdTY0YzdcdTZmYTRcdTY0OTFcdTY1MDRcdTUxNGVcdTU0MTBcdTU3MWZcdThhMGVcdTYxNWZcdTY4NzZcdWZhMDVcdTc1ZGJcdTdiNTJcdTdkNzFcdTkwMWFcdTU4''@;'; put 'put ''MDZcdTY5Y2NcdTgxN2ZcdTg5MmFcdTkwMDBcdTk4MzlcdTUwNzhcdTU5NTdcdTU5YWNcdTYyOTVcdTkwMGZcdTliMmFcdTYxNWRcdTcyNzlcdTk1ZDZcdTU3NjFcdTVhNDZcdTVkZjRcdTYyOGFcdTY0YWRcdTY0ZmFcdTY3NzdcdTZjZTJcdTZkM2VcdTcyMmNcdTc0MzZcdTc4MzRcdTdmNzdc''@;'; put 'put ''dTgyYWRcdThkZGJcdTk4MTdcdTUyMjRcdTU3NDJcdTY3N2ZcdTcyNDhcdTc0ZTNcdThjYTlcdThmYTZcdTkyMTEiXSxbImY4YTEiLCJcdTk2MmFcdTUxNmJcdTUzZWRcdTYzNGNcdTRmNjlcdTU1MDRcdTYwOTZcdTY1NTdcdTZjOWJcdTZkN2ZcdTcyNGNcdTcyZmRcdTdhMTdcdTg5ODdcdThj''@;'; put 'put ''OWRcdTVmNmRcdTZmOGVcdTcwZjlcdTgxYThcdTYxMGVcdTRmYmZcdTUwNGZcdTYyNDFcdTcyNDdcdTdiYzdcdTdkZThcdTdmZTlcdTkwNGRcdTk3YWRcdTlhMTlcdThjYjZcdTU3NmFcdTVlNzNcdTY3YjBcdTg0MGRcdThhNTVcdTU0MjBcdTViMTZcdTVlNjNcdTVlZTJcdTVmMGFcdTY1ODNc''@;'; put 'put ''dTgwYmFcdTg1M2RcdTk1ODlcdTk2NWJcdTRmNDhcdTUzMDVcdTUzMGRcdTUzMGZcdTU0ODZcdTU0ZmFcdTU3MDNcdTVlMDNcdTYwMTZcdTYyOWJcdTYyYjFcdTYzNTVcdWZhMDZcdTZjZTFcdTZkNjZcdTc1YjFcdTc4MzJcdTgwZGVcdTgxMmZcdTgyZGVcdTg0NjFcdTg0YjJcdTg4OGRcdTg5''@;'; put 'put ''MTJcdTkwMGJcdTkyZWFcdTk4ZmRcdTliOTFcdTVlNDVcdTY2YjRcdTY2ZGRcdTcwMTFcdTcyMDZcdWZhMDdcdTRmZjVcdTUyN2RcdTVmNmFcdTYxNTNcdTY3NTNcdTZhMTlcdTZmMDJcdTc0ZTJcdTc5NjhcdTg4NjhcdThjNzlcdTk4YzdcdTk4YzRcdTlhNDMiXSxbImY5YTEiLCJcdTU0YzFc''@;'; put 'put ''dTdhMWZcdTY5NTNcdThhZjdcdThjNGFcdTk4YThcdTk5YWVcdTVmN2NcdTYyYWJcdTc1YjJcdTc2YWVcdTg4YWJcdTkwN2ZcdTk2NDJcdTUzMzlcdTVmM2NcdTVmYzVcdTZjY2NcdTczY2NcdTc1NjJcdTc1OGJcdTdiNDZcdTgyZmVcdTk5OWRcdTRlNGZcdTkwM2NcdTRlMGJcdTRmNTVcdTUz''@;'; put 'put ''YTZcdTU5MGZcdTVlYzhcdTY2MzBcdTZjYjNcdTc0NTVcdTgzNzdcdTg3NjZcdThjYzBcdTkwNTBcdTk3MWVcdTljMTVcdTU4ZDFcdTViNzhcdTg2NTBcdThiMTRcdTlkYjRcdTViZDJcdTYwNjhcdTYwOGRcdTY1ZjFcdTZjNTdcdTZmMjJcdTZmYTNcdTcwMWFcdTdmNTVcdTdmZjBcdTk1OTFc''@;'; put 'put ''dTk1OTJcdTk2NTBcdTk3ZDNcdTUyNzJcdThmNDRcdTUxZmRcdTU0MmJcdTU0YjhcdTU1NjNcdTU1OGFcdTZhYmJcdTZkYjVcdTdkZDhcdTgyNjZcdTkyOWNcdTk2NzdcdTllNzlcdTU0MDhcdTU0YzhcdTc2ZDJcdTg2ZTRcdTk1YTRcdTk1ZDRcdTk2NWNcdTRlYTJcdTRmMDlcdTU5ZWVcdTVh''@;'; put 'put ''ZTZcdTVkZjdcdTYwNTJcdTYyOTdcdTY3NmRcdTY4NDFcdTZjODZcdTZlMmZcdTdmMzhcdTgwOWJcdTgyMmEiXSxbImZhYTEiLCJcdWZhMDhcdWZhMDlcdTk4MDVcdTRlYTVcdTUwNTVcdTU0YjNcdTU3OTNcdTU5NWFcdTViNjlcdTViYjNcdTYxYzhcdTY5NzdcdTZkNzdcdTcwMjNcdTg3Zjlc''@;'; put 'put ''dTg5ZTNcdThhNzJcdThhZTdcdTkwODJcdTk5ZWRcdTlhYjhcdTUyYmVcdTY4MzhcdTUwMTZcdTVlNzhcdTY3NGZcdTgzNDdcdTg4NGNcdTRlYWJcdTU0MTFcdTU2YWVcdTczZTZcdTkxMTVcdTk3ZmZcdTk5MDlcdTk5NTdcdTk5OTlcdTU2NTNcdTU4OWZcdTg2NWJcdThhMzFcdTYxYjJcdTZh''@;'; put 'put ''ZjZcdTczN2JcdThlZDJcdTZiNDdcdTk2YWFcdTlhNTdcdTU5NTVcdTcyMDBcdThkNmJcdTk3NjlcdTRmZDRcdTVjZjRcdTVmMjZcdTYxZjhcdTY2NWJcdTZjZWJcdTcwYWJcdTczODRcdTczYjlcdTczZmVcdTc3MjlcdTc3NGRcdTdkNDNcdTdkNjJcdTdlMjNcdTgyMzdcdTg4NTJcdWZhMGFc''@;'; put 'put ''dThjZTJcdTkyNDlcdTk4NmZcdTViNTFcdTdhNzRcdTg4NDBcdTk4MDFcdTVhY2NcdTRmZTBcdTUzNTRcdTU5M2VcdTVjZmRcdTYzM2VcdTZkNzlcdTcyZjlcdTgxMDVcdTgxMDdcdTgzYTJcdTkyY2ZcdTk4MzBcdTRlYThcdTUxNDRcdTUyMTFcdTU3OGIiXSxbImZiYTEiLCJcdTVmNjJcdTZj''@;'; put 'put ''YzJcdTZlY2VcdTcwMDVcdTcwNTBcdTcwYWZcdTcxOTJcdTczZTlcdTc0NjlcdTgzNGFcdTg3YTJcdTg4NjFcdTkwMDhcdTkwYTJcdTkzYTNcdTk5YThcdTUxNmVcdTVmNTdcdTYwZTBcdTYxNjdcdTY2YjNcdTg1NTlcdThlNGFcdTkxYWZcdTk3OGJcdTRlNGVcdTRlOTJcdTU0N2NcdTU4ZDVc''@;'; put 'put ''dTU4ZmFcdTU5N2RcdTVjYjVcdTVmMjdcdTYyMzZcdTYyNDhcdTY2MGFcdTY2NjdcdTZiZWJcdTZkNjlcdTZkY2ZcdTZlNTZcdTZlZjhcdTZmOTRcdTZmZTBcdTZmZTlcdTcwNWRcdTcyZDBcdTc0MjVcdTc0NWFcdTc0ZTBcdTc2OTNcdTc5NWNcdTdjY2FcdTdlMWVcdTgwZTFcdTgyYTZcdTg0''@;'; put 'put ''NmJcdTg0YmZcdTg2NGVcdTg2NWZcdTg3NzRcdThiNzdcdThjNmFcdTkzYWNcdTk4MDBcdTk4NjVcdTYwZDFcdTYyMTZcdTkxNzdcdTVhNWFcdTY2MGZcdTZkZjdcdTZlM2VcdTc0M2ZcdTliNDJcdTVmZmRcdTYwZGFcdTdiMGZcdTU0YzRcdTVmMThcdTZjNWVcdTZjZDNcdTZkMmFcdTcwZDhc''@;'; put 'put ''dTdkMDVcdTg2NzlcdThhMGNcdTlkM2JcdTUzMTZcdTU0OGNcdTViMDVcdTZhM2FcdTcwNmJcdTc1NzUiXSxbImZjYTEiLCJcdTc5OGRcdTc5YmVcdTgyYjFcdTgzZWZcdThhNzFcdThiNDFcdThjYThcdTk3NzRcdWZhMGJcdTY0ZjRcdTY1MmJcdTc4YmFcdTc4YmJcdTdhNmJcdTRlMzhcdTU1''@;'; put 'put ''OWFcdTU5NTBcdTViYTZcdTVlN2JcdTYwYTNcdTYzZGJcdTZiNjFcdTY2NjVcdTY4NTNcdTZlMTlcdTcxNjVcdTc0YjBcdTdkMDhcdTkwODRcdTlhNjlcdTljMjVcdTZkM2JcdTZlZDFcdTczM2VcdThjNDFcdTk1Y2FcdTUxZjBcdTVlNGNcdTVmYThcdTYwNGRcdTYwZjZcdTYxMzBcdTYxNGNc''@;'; put 'put ''dTY2NDNcdTY2NDRcdTY5YTVcdTZjYzFcdTZlNWZcdTZlYzlcdTZmNjJcdTcxNGNcdTc0OWNcdTc2ODdcdTdiYzFcdTdjMjdcdTgzNTJcdTg3NTdcdTkwNTFcdTk2OGRcdTllYzNcdTUzMmZcdTU2ZGVcdTVlZmJcdTVmOGFcdTYwNjJcdTYwOTRcdTYxZjdcdTY2NjZcdTY3MDNcdTZhOWNcdTZk''@;'; put 'put ''ZWVcdTZmYWVcdTcwNzBcdTczNmFcdTdlNmFcdTgxYmVcdTgzMzRcdTg2ZDRcdThhYThcdThjYzRcdTUyODNcdTczNzJcdTViOTZcdTZhNmJcdTk0MDRcdTU0ZWVcdTU2ODZcdTViNWRcdTY1NDhcdTY1ODVcdTY2YzlcdTY4OWZcdTZkOGRcdTZkYzYiXSxbImZkYTEiLCJcdTcyM2JcdTgwYjRc''@;'; put 'put ''dTkxNzVcdTlhNGRcdTRmYWZcdTUwMTlcdTUzOWFcdTU0MGVcdTU0M2NcdTU1ODlcdTU1YzVcdTVlM2ZcdTVmOGNcdTY3M2RcdTcxNjZcdTczZGRcdTkwMDVcdTUyZGJcdTUyZjNcdTU4NjRcdTU4Y2VcdTcxMDRcdTcxOGZcdTcxZmJcdTg1YjBcdThhMTNcdTY2ODhcdTg1YThcdTU1YTdcdTY2''@;'; put 'put ''ODRcdTcxNGFcdTg0MzFcdTUzNDlcdTU1OTlcdTZiYzFcdTVmNTlcdTVmYmRcdTYzZWVcdTY2ODlcdTcxNDdcdThhZjFcdThmMWRcdTllYmVcdTRmMTFcdTY0M2FcdTcwY2JcdTc1NjZcdTg2NjdcdTYwNjRcdThiNGVcdTlkZjhcdTUxNDdcdTUxZjZcdTUzMDhcdTZkMzZcdTgwZjhcdTllZDFc''@;'; put 'put ''dTY2MTVcdTZiMjNcdTcwOThcdTc1ZDVcdTU0MDNcdTVjNzlcdTdkMDdcdThhMTZcdTZiMjBcdTZiM2RcdTZiNDZcdTU0MzhcdTYwNzBcdTZkM2RcdTdmZDVcdTgyMDhcdTUwZDZcdTUxZGVcdTU1OWNcdTU2NmJcdTU2Y2RcdTU5ZWNcdTViMDlcdTVlMGNcdTYxOTlcdTYxOThcdTYyMzFcdTY2''@;'; put 'put ''NWVcdTY2ZTZcdTcxOTlcdTcxYjlcdTcxYmFcdTcyYTdcdTc5YTdcdTdhMDBcdTdmYjJcdThhNzAiXV0nKX0sMjEyNzA6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig3MTk5MyksXz1iKDcwNDYzKSxwPWIoMjcwNTQpLkJ1ZmZlcixWPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsLTE4''@;'; put 'put ''OTQwMDc1ODgsLTg5OTQ5NzUxNF0sdz1uZXcgQXJyYXkoODApO2Z1bmN0aW9uIFAoKXt0aGlzLmluaXQoKSx0aGlzLl93PXcsXy5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIEYoTyl7cmV0dXJuIE88PDF8Tz4+PjMxfWZ1bmN0aW9uIFIoTyl7cmV0dXJuIE88PDV8Tz4+PjI3fWZ1bmN0aW9u''@;'; put 'put ''IHooTyl7cmV0dXJuIE88PDMwfE8+Pj4yfWZ1bmN0aW9uIE4oTyxLLFosWSl7cmV0dXJuIDA9PT1PP0smWnx+SyZZOjI9PT1PP0smWnxLJll8WiZZOkteWl5ZfUkoUCxfKSxQLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMy''@;'; put 'put ''MzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0aGlzfSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKE8pe2Zvcih2YXIgSz10aGlzLl93LFo9MHx0aGlzLl9hLFk9MHx0aGlzLl9iLFc9MHx0aGlzLl9jLHE9MHx0aGlzLl9k''@;'; put 'put ''LGVlPTB8dGhpcy5fZSxKPTA7SjwxNjsrK0opS1tKXT1PLnJlYWRJbnQzMkJFKDQqSik7Zm9yKDtKPDgwOysrSilLW0pdPUYoS1tKLTNdXktbSi04XV5LW0otMTRdXktbSi0xNl0pO2Zvcih2YXIgcmU9MDtyZTw4MDsrK3JlKXt2YXIgaWU9fn4ocmUvMjApLHVlPVIoWikrTihpZSxZLFcscSkr''@;'; put 'put ''ZWUrS1tyZV0rVltpZV18MDtlZT1xLHE9VyxXPXooWSksWT1aLFo9dWV9dGhpcy5fYT1aK3RoaXMuX2F8MCx0aGlzLl9iPVkrdGhpcy5fYnwwLHRoaXMuX2M9Vyt0aGlzLl9jfDAsdGhpcy5fZD1xK3RoaXMuX2R8MCx0aGlzLl9lPWVlK3RoaXMuX2V8MH0sUC5wcm90b3R5cGUuX2hhc2g9ZnVu''@;'; put 'put ''Y3Rpb24oKXt2YXIgTz1wLmFsbG9jVW5zYWZlKDIwKTtyZXR1cm4gTy53cml0ZUludDMyQkUoMHx0aGlzLl9hLDApLE8ud3JpdGVJbnQzMkJFKDB8dGhpcy5fYiw0KSxPLndyaXRlSW50MzJCRSgwfHRoaXMuX2MsOCksTy53cml0ZUludDMyQkUoMHx0aGlzLl9kLDEyKSxPLndyaXRlSW50MzJC''@;'; put 'put ''RSgwfHRoaXMuX2UsMTYpLE99LGNlLmV4cG9ydHM9UH0sMjE1MDk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig5NjU2KTtmdW5jdGlvbiBWKHcsUCl7dy5lbWl0KCJlcnJvciIsUCl9Y2UuZXhwb3J0cz17ZGVzdHJveTpmdW5jdGlvbiBfKHcsUCl7dmFyIEY9dGhpcztyZXR1cm4g''@;'; put 'put ''dGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR8fHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPyhQP1Aodyk6dyYmKHRoaXMuX3dyaXRhYmxlU3RhdGU/dGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0''@;'; put 'put ''ZWR8fCh0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxJLm5leHRUaWNrKFYsdGhpcyx3KSk6SS5uZXh0VGljayhWLHRoaXMsdykpLHRoaXMpOih0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX3dyaXRhYmxlU3Rh''@;'; put 'put ''dGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fZGVzdHJveSh3fHxudWxsLGZ1bmN0aW9uKE4peyFQJiZOP0YuX3dyaXRhYmxlU3RhdGU/Ri5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWR8fChGLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxJLm5l''@;'; put 'put ''eHRUaWNrKFYsRixOKSk6SS5uZXh0VGljayhWLEYsTik6UCYmUChOKX0pLHRoaXMpfSx1bmRlc3Ryb3k6ZnVuY3Rpb24gcCgpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRpbmc9ITEsdGhpcy5f''@;'; put 'put ''cmVhZGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQ9ITEpLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5k''@;'; put 'put ''aW5nPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluYWxDYWxsZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5wcmVmaW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSExKX19fSwyMTUxMDooY2UsWCxiKT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQ3MDkyKTtjZS5leHBvcnRzPSJOT0RFIj09PUl9LDIxNjEyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNjkyMjcpLF89YigzMjYzMykscD1iKDg4Mjc1KSxWPWIoMjc2Nyk7Y2UuZXhwb3J0cz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fCgi''@;'; put 'put ''X19wcm90b19fImlue30/ZnVuY3Rpb24oKXt2YXIgRix3PSExLFA9e307dHJ5eyhGPUkoT2JqZWN0LnByb3RvdHlwZSwiX19wcm90b19fIiwic2V0IikpKFAsW10pLHc9UCBpbnN0YW5jZW9mIEFycmF5fWNhdGNoe31yZXR1cm4gZnVuY3Rpb24oeixOKXtyZXR1cm4gcCh6KSxWKE4pLF8oeikm''@;'; put 'put ''Jih3P0YoeixOKTp6Ll9fcHJvdG9fXz1OKSx6fX0oKTp2b2lkIDApfSwyMTgzMjooY2UsWCk9PnsidXNlIHN0cmljdCI7dmFyIGI9WDtmdW5jdGlvbiBfKFYpe3JldHVybiAxPT09Vi5sZW5ndGg/IjAiK1Y6Vn1mdW5jdGlvbiBwKFYpe2Zvcih2YXIgdz0iIixQPTA7UDxWLmxlbmd0aDtQKysp''@;'; put 'put ''dys9XyhWW1BdLnRvU3RyaW5nKDE2KSk7cmV0dXJuIHd9Yi50b0FycmF5PWZ1bmN0aW9uIEkoVix3KXtpZihBcnJheS5pc0FycmF5KFYpKXJldHVybiBWLnNsaWNlKCk7aWYoIVYpcmV0dXJuW107dmFyIFA9W107aWYoInN0cmluZyIhPXR5cGVvZiBWKXtmb3IodmFyIEY9MDtGPFYubGVuZ3Ro''@;'; put 'put ''O0YrKylQW0ZdPTB8VltGXTtyZXR1cm4gUH1pZigiaGV4Ij09PXcpZm9yKChWPVYucmVwbGFjZSgvW15hLXowLTldKy9naSwiIikpLmxlbmd0aCUyIT0wJiYoVj0iMCIrViksRj0wO0Y8Vi5sZW5ndGg7Ris9MilQLnB1c2gocGFyc2VJbnQoVltGXStWW0YrMV0sMTYpKTtlbHNlIGZvcihGPTA7''@;'; put 'put ''RjxWLmxlbmd0aDtGKyspe3ZhciBSPVYuY2hhckNvZGVBdChGKSx6PVI+PjgsTj0yNTUmUjt6P1AucHVzaCh6LE4pOlAucHVzaChOKX1yZXR1cm4gUH0sYi56ZXJvMj1fLGIudG9IZXg9cCxiLmVuY29kZT1mdW5jdGlvbih3LFApe3JldHVybiJoZXgiPT09UD9wKHcpOnd9fSwyMTkxMDooY2Us''@;'; put 'put ''WCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDU4NjA3KSxfPWIoMTEzOCkscD1iKDk3NTQxKSxWPXAuU2V0LHc9cC5wcm90byxQPUkody5mb3JFYWNoKSxGPUkody5rZXlzKSxSPUYobmV3IFYpLm5leHQ7Y2UuZXhwb3J0cz1mdW5jdGlvbih6LE4sTyl7cmV0dXJuIE8/Xyh7aXRlcmF0b3I6''@;'; put 'put ''Rih6KSxuZXh0OlJ9LE4pOlAoeixOKX19LDIxOTM2OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiaGUiLHttb250aHM6Ilx1MDVkOVx1MDVlMFx1MDVkNVx1MDVkMFx1MDVlOF9cdTA1ZTRcdTA1ZDFcdTA1ZThcdTA1ZDVcdTA1ZDBc''@;'; put 'put ''dTA1ZThfXHUwNWRlXHUwNWU4XHUwNWU1X1x1MDVkMFx1MDVlNFx1MDVlOFx1MDVkOVx1MDVkY19cdTA1ZGVcdTA1ZDBcdTA1ZDlfXHUwNWQ5XHUwNWQ1XHUwNWUwXHUwNWQ5X1x1MDVkOVx1MDVkNVx1MDVkY1x1MDVkOV9cdTA1ZDBcdTA1ZDVcdTA1ZDJcdTA1ZDVcdTA1ZTFcdTA1ZDhfXHUw''@;'; put 'put ''NWUxXHUwNWU0XHUwNWQ4XHUwNWRlXHUwNWQxXHUwNWU4X1x1MDVkMFx1MDVkNVx1MDVlN1x1MDVkOFx1MDVkNVx1MDVkMVx1MDVlOF9cdTA1ZTBcdTA1ZDVcdTA1ZDFcdTA1ZGVcdTA1ZDFcdTA1ZThfXHUwNWQzXHUwNWU2XHUwNWRlXHUwNWQxXHUwNWU4Ii5zcGxpdCgiXyIpLG1vbnRoc1No''@;'; put 'put ''b3J0OiJcdTA1ZDlcdTA1ZTBcdTA1ZDVcdTA1ZjNfXHUwNWU0XHUwNWQxXHUwNWU4XHUwNWYzX1x1MDVkZVx1MDVlOFx1MDVlNV9cdTA1ZDBcdTA1ZTRcdTA1ZThcdTA1ZjNfXHUwNWRlXHUwNWQwXHUwNWQ5X1x1MDVkOVx1MDVkNVx1MDVlMFx1MDVkOV9cdTA1ZDlcdTA1ZDVcdTA1ZGNcdTA1''@;'; put 'put ''ZDlfXHUwNWQwXHUwNWQ1XHUwNWQyXHUwNWYzX1x1MDVlMVx1MDVlNFx1MDVkOFx1MDVmM19cdTA1ZDBcdTA1ZDVcdTA1ZTdcdTA1ZjNfXHUwNWUwXHUwNWQ1XHUwNWQxXHUwNWYzX1x1MDVkM1x1MDVlNlx1MDVkZVx1MDVmMyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNWU4XHUwNWQwXHUw''@;'; put 'put ''NWU5XHUwNWQ1XHUwNWRmX1x1MDVlOVx1MDVlMFx1MDVkOV9cdTA1ZTlcdTA1ZGNcdTA1ZDlcdTA1ZTlcdTA1ZDlfXHUwNWU4XHUwNWQxXHUwNWQ5XHUwNWUyXHUwNWQ5X1x1MDVkN1x1MDVkZVx1MDVkOVx1MDVlOVx1MDVkOV9cdTA1ZTlcdTA1ZDlcdTA1ZTlcdTA1ZDlfXHUwNWU5XHUwNWQx''@;'; put 'put ''XHUwNWVhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDVkMFx1MDVmM19cdTA1ZDFcdTA1ZjNfXHUwNWQyXHUwNWYzX1x1MDVkM1x1MDVmM19cdTA1ZDRcdTA1ZjNfXHUwNWQ1XHUwNWYzX1x1MDVlOVx1MDVmMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNWQwX1x1MDVkMV9c''@;'; put 'put ''dTA1ZDJfXHUwNWQzX1x1MDVkNF9cdTA1ZDVfXHUwNWU5Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFtcdTA1ZDFdTU1NTSBZWVlZIixMTEw6IkQgW1x1MDVkMV1NTU1NIFlZWVkgSEg6bW0iLExMTEw6''@;'; put 'put ''ImRkZGQsIEQgW1x1MDVkMV1NTU1NIFlZWVkgSEg6bW0iLGw6IkQvTS9ZWVlZIixsbDoiRCBNTU0gWVlZWSIsbGxsOiJEIE1NTSBZWVlZIEhIOm1tIixsbGxsOiJkZGQsIEQgTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDVkNFx1MDVkOVx1MDVkNVx1MDVkZCBcdTA1''@;'; put 'put ''ZDFcdTA1YmVdTFQiLG5leHREYXk6IltcdTA1ZGVcdTA1ZDdcdTA1ZTggXHUwNWQxXHUwNWJlXUxUIixuZXh0V2VlazoiZGRkZCBbXHUwNWQxXHUwNWU5XHUwNWUyXHUwNWQ0XSBMVCIsbGFzdERheToiW1x1MDVkMFx1MDVlYVx1MDVkZVx1MDVkNVx1MDVkYyBcdTA1ZDFcdTA1YmVdTFQiLGxh''@;'; put 'put ''c3RXZWVrOiJbXHUwNWQxXHUwNWQ5XHUwNWQ1XHUwNWRkXSBkZGRkIFtcdTA1ZDRcdTA1ZDBcdTA1ZDdcdTA1ZThcdTA1ZDVcdTA1ZGYgXHUwNWQxXHUwNWU5XHUwNWUyXHUwNWQ0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNWQxXHUwNWUyXHUwNWQ1XHUw''@;'; put 'put ''NWQzICVzIixwYXN0OiJcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDkgJXMiLHM6Ilx1MDVkZVx1MDVlMVx1MDVlNFx1MDVlOCBcdTA1ZTlcdTA1ZTBcdTA1ZDlcdTA1ZDVcdTA1ZWEiLHNzOiIlZCBcdTA1ZTlcdTA1ZTBcdTA1ZDlcdTA1ZDVcdTA1ZWEiLG06Ilx1MDVkM1x1MDVlN1x1MDVkNCIs''@;'; put 'put ''bW06IiVkIFx1MDVkM1x1MDVlN1x1MDVkNVx1MDVlYSIsaDoiXHUwNWU5XHUwNWUyXHUwNWQ0IixoaDpmdW5jdGlvbihwKXtyZXR1cm4gMj09PXA/Ilx1MDVlOVx1MDVlMlx1MDVlYVx1MDVkOVx1MDVkOVx1MDVkZCI6cCsiIFx1MDVlOVx1MDVlMlx1MDVkNVx1MDVlYSJ9LGQ6Ilx1MDVkOVx1''@;'; put 'put ''MDVkNVx1MDVkZCIsZGQ6ZnVuY3Rpb24ocCl7cmV0dXJuIDI9PT1wPyJcdTA1ZDlcdTA1ZDVcdTA1ZGVcdTA1ZDlcdTA1ZDlcdTA1ZGQiOnArIiBcdTA1ZDlcdTA1ZGVcdTA1ZDlcdTA1ZGQifSxNOiJcdTA1ZDdcdTA1ZDVcdTA1ZDNcdTA1ZTkiLE1NOmZ1bmN0aW9uKHApe3JldHVybiAyPT09''@;'; put 'put ''cD8iXHUwNWQ3XHUwNWQ1XHUwNWQzXHUwNWU5XHUwNWQ5XHUwNWQ5XHUwNWRkIjpwKyIgXHUwNWQ3XHUwNWQ1XHUwNWQzXHUwNWU5XHUwNWQ5XHUwNWRkIn0seToiXHUwNWU5XHUwNWUwXHUwNWQ0Iix5eTpmdW5jdGlvbihwKXtyZXR1cm4gMj09PXA/Ilx1MDVlOVx1MDVlMFx1MDVlYVx1MDVk''@;'; put 'put ''OVx1MDVkOVx1MDVkZCI6cCUxMD09MCYmMTAhPT1wP3ArIiBcdTA1ZTlcdTA1ZTBcdTA1ZDQiOnArIiBcdTA1ZTlcdTA1ZTBcdTA1ZDlcdTA1ZGQifX0sbWVyaWRpZW1QYXJzZTovXHUwNWQwXHUwNWQ3XHUwNWQ0Ilx1MDVlNnxcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDQiXHUwNWU2fFx1MDVk''@;'; put 'put ''MFx1MDVkN1x1MDVlOFx1MDVkOSBcdTA1ZDRcdTA1ZTZcdTA1ZDRcdTA1ZThcdTA1ZDlcdTA1ZDlcdTA1ZGR8XHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ5IFx1MDVkNFx1MDVlNlx1MDVkNFx1MDVlOFx1MDVkOVx1MDVkOVx1MDVkZHxcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDVcdTA1ZWEgXHUw''@;'; put 'put ''NWQxXHUwNWQ1XHUwNWU3XHUwNWU4fFx1MDVkMVx1MDVkMVx1MDVkNVx1MDVlN1x1MDVlOHxcdTA1ZDFcdTA1ZTJcdTA1ZThcdTA1ZDEvaSxpc1BNOmZ1bmN0aW9uKHApe3JldHVybi9eKFx1MDVkMFx1MDVkN1x1MDVkNCJcdTA1ZTZ8XHUwNWQwXHUwNWQ3XHUwNWU4XHUwNWQ5IFx1MDVkNFx1''@;'; put 'put ''MDVlNlx1MDVkNFx1MDVlOFx1MDVkOVx1MDVkOVx1MDVkZHxcdTA1ZDFcdTA1ZTJcdTA1ZThcdTA1ZDEpJC8udGVzdChwKX0sbWVyaWRpZW06ZnVuY3Rpb24ocCxWLHcpe3JldHVybiBwPDU/Ilx1MDVkY1x1MDVlNFx1MDVlMFx1MDVkNVx1MDVlYSBcdTA1ZDFcdTA1ZDVcdTA1ZTdcdTA1ZTgi''@;'; put 'put ''OnA8MTA/Ilx1MDVkMVx1MDVkMVx1MDVkNVx1MDVlN1x1MDVlOCI6cDwxMj93PydcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDQiXHUwNWU2JzoiXHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ5IFx1MDVkNFx1MDVlNlx1MDVkNFx1MDVlOFx1MDVkOVx1MDVkOVx1MDVkZCI6cDwxOD93PydcdTA1ZDBc''@;'; put 'put ''dTA1ZDdcdTA1ZDQiXHUwNWU2JzoiXHUwNWQwXHUwNWQ3XHUwNWU4XHUwNWQ5IFx1MDVkNFx1MDVlNlx1MDVkNFx1MDVlOFx1MDVkOVx1MDVkOVx1MDVkZCI6Ilx1MDVkMVx1MDVlMlx1MDVlOFx1MDVkMSJ9fSl9KGIoOTc1ODYpKX0sMjIwMjA6KGNlLFgpPT57WC5yZWFkPWZ1bmN0aW9uKGIs''@;'; put 'put ''SSxfLHAsVil7dmFyIHcsUCxGPTgqVi1wLTEsUj0oMTw8RiktMSx6PVI+PjEsTj0tNyxPPV8/Vi0xOjAsSz1fPy0xOjEsWj1iW0krT107Zm9yKE8rPUssdz1aJigxPDwtTiktMSxaPj49LU4sTis9RjtOPjA7dz0yNTYqdytiW0krT10sTys9SyxOLT04KTtmb3IoUD13JigxPDwtTiktMSx3Pj49''@;'; put 'put ''LU4sTis9cDtOPjA7UD0yNTYqUCtiW0krT10sTys9SyxOLT04KTtpZigwPT09dyl3PTEtejtlbHNle2lmKHc9PT1SKXJldHVybiBQP05hTjoxLzAqKFo/LTE6MSk7UCs9TWF0aC5wb3coMixwKSx3LT16fXJldHVybihaPy0xOjEpKlAqTWF0aC5wb3coMix3LXApfSxYLndyaXRlPWZ1bmN0aW9u''@;'; put 'put ''KGIsSSxfLHAsVix3KXt2YXIgUCxGLFIsej04KnctVi0xLE49KDE8PHopLTEsTz1OPj4xLEs9MjM9PT1WP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxaPXA/MDp3LTEsWT1wPzE6LTEsVz1JPDB8fDA9PT1JJiYxL0k8MD8xOjA7Zm9yKEk9TWF0aC5hYnMoSSksaXNOYU4oSSl8''@;'; put 'put ''fEk9PT0xLzA/KEY9aXNOYU4oSSk/MTowLFA9Tik6KFA9TWF0aC5mbG9vcihNYXRoLmxvZyhJKS9NYXRoLkxOMiksSSooUj1NYXRoLnBvdygyLC1QKSk8MSYmKFAtLSxSKj0yKSwoSSs9UCtPPj0xP0svUjpLKk1hdGgucG93KDIsMS1PKSkqUj49MiYmKFArKyxSLz0yKSxQK08+PU4/KEY9MCxQ''@;'; put 'put ''PU4pOlArTz49MT8oRj0oSSpSLTEpKk1hdGgucG93KDIsViksUCs9Tyk6KEY9SSpNYXRoLnBvdygyLE8tMSkqTWF0aC5wb3coMixWKSxQPTApKTtWPj04O2JbXytaXT0yNTUmRixaKz1ZLEYvPTI1NixWLT04KTtmb3IoUD1QPDxWfEYseis9Vjt6PjA7YltfK1pdPTI1NSZQLForPVksUC89MjU2''@;'; put 'put ''LHotPTgpO2JbXytaLVldfD0xMjgqV319LDIyMjM0OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgidHptLWxhdG4iLHttb250aHM6ImlubmF5cl9iclx1MDJlNGF5clx1MDJlNF9tYXJcdTAyZTRzXHUwMmU0X2licmlyX21heXl3X3l3''@;'; put 'put ''bnl3X3l3bHl3el9cdTAyNjN3XHUwMTYxdF9cdTAxNjF3dGFuYmlyX2t0XHUwMmU0d2JyXHUwMmU0X253d2FuYmlyX2R3am5iaXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ImlubmF5cl9iclx1MDJlNGF5clx1MDJlNF9tYXJcdTAyZTRzXHUwMmU0X2licmlyX21heXl3X3l3bnl3X3l3bHl3''@;'; put 'put ''el9cdTAyNjN3XHUwMTYxdF9cdTAxNjF3dGFuYmlyX2t0XHUwMmU0d2JyXHUwMmU0X253d2FuYmlyX2R3am5iaXIiLnNwbGl0KCJfIiksd2Vla2RheXM6ImFzYW1hc19heW5hc19hc2luYXNfYWtyYXNfYWt3YXNfYXNpbXdhc19hc2lcdTFlMGR5YXMiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9y''@;'; put 'put ''dDoiYXNhbWFzX2F5bmFzX2FzaW5hc19ha3Jhc19ha3dhc19hc2ltd2FzX2FzaVx1MWUwZHlhcyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiYXNhbWFzX2F5bmFzX2FzaW5hc19ha3Jhc19ha3dhc19hc2ltd2FzX2FzaVx1MWUwZHlhcyIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6''@;'; put 'put ''IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2FzZGtoIGddIExUIixuZXh0RGF5OiJbYXNrYSBnXSBMVCIs''@;'; put 'put ''bmV4dFdlZWs6ImRkZGQgW2ddIExUIixsYXN0RGF5OiJbYXNzYW50IGddIExUIixsYXN0V2VlazoiZGRkZCBbZ10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRhZGtoIHMgeWFuICVzIixwYXN0OiJ5YW4gJXMiLHM6ImltaWsiLHNzOiIlZCBpbWlrIixtOiJtaW51''@;'; put 'put ''XHUxZTBkIixtbToiJWQgbWludVx1MWUwZCIsaDoic2FcdTAyNWJhIixoaDoiJWQgdGFzc2FcdTAyNWJpbiIsZDoiYXNzIixkZDoiJWQgb3NzYW4iLE06ImF5b3dyIixNTToiJWQgaXl5aXJuIix5OiJhc2dhcyIseXk6IiVkIGlzZ2FzbiJ9LHdlZWs6e2Rvdzo2LGRveToxMn19KX0oYig5NzU4''@;'; put 'put ''NikpfSwyMjMwNDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDM2Njc4KSxfPWIoOTg4NTQpLHA9Yig3NDk2NCksVj1FcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtjZS5leHBvcnRzPWZ1bmN0aW9uKHcsUCxGLFIpe3AmJihWP1YodyxQKTpJKHcsInN0YWNrIixfKEYsUikpKX19LDIy''@;'; put 'put ''MzQwOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiaXQtY2giLHttb250aHM6Imdlbm5haW9fZmViYnJhaW9fbWFyem9fYXByaWxlX21hZ2dpb19naXVnbm9fbHVnbGlvX2Fnb3N0b19zZXR0ZW1icmVfb3R0b2JyZV9ub3ZlbWJyZV9k''@;'; put 'put ''aWNlbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiZ2VuX2ZlYl9tYXJfYXByX21hZ19naXVfbHVnX2Fnb19zZXRfb3R0X25vdl9kaWMiLnNwbGl0KCJfIiksd2Vla2RheXM6ImRvbWVuaWNhX2x1bmVkXHhlY19tYXJ0ZWRceGVjX21lcmNvbGVkXHhlY19naW92ZWRceGVjX3ZlbmVyZFx4''@;'; put 'put ''ZWNfc2FiYXRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbV9sdW5fbWFyX21lcl9naW9fdmVuX3NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbWVfZ2lfdmVfc2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIs''@;'; put 'put ''TDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltPZ2dpIGFsbGVdIExUIixuZXh0RGF5OiJbRG9tYW5pIGFsbGVdIExUIixuZXh0V2VlazoiZGRkZCBb''@;'; put 'put ''YWxsZV0gTFQiLGxhc3REYXk6IltJZXJpIGFsbGVdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5kYXkoKT8iW2xhIHNjb3JzYV0gZGRkZCBbYWxsZV0gTFQiOiJbbG8gc2NvcnNvXSBkZGRkIFthbGxlXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntm''@;'; put 'put ''dXR1cmU6ZnVuY3Rpb24ocCl7cmV0dXJuKC9eWzAtOV0uKyQvLnRlc3QocCk/InRyYSI6ImluIikrIiAiK3B9LHBhc3Q6IiVzIGZhIixzOiJhbGN1bmkgc2Vjb25kaSIsc3M6IiVkIHNlY29uZGkiLG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0aSIsaDoidW4nb3JhIixoaDoiJWQgb3JlIixk''@;'; put 'put ''OiJ1biBnaW9ybm8iLGRkOiIlZCBnaW9ybmkiLE06InVuIG1lc2UiLE1NOiIlZCBtZXNpIix5OiJ1biBhbm5vIix5eToiJWQgYW5uaSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9''@;'; put 'put ''LDIyNzE0OihjZSxYLGIpPT57dmFyIEk9WDtJLmRlcj1iKDcyMTkzKSxJLnBlbT1iKDI0ODE2KX0sMjI3NTQ6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigxMTA4KTtjZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIF89SSh0aGlzKSxwPSIiO3JldHVybiBfLmhhc0luZGljZXMmJihw''@;'; put 'put ''Kz0iZCIpLF8uZ2xvYmFsJiYocCs9ImciKSxfLmlnbm9yZUNhc2UmJihwKz0iaSIpLF8ubXVsdGlsaW5lJiYocCs9Im0iKSxfLmRvdEFsbCYmKHArPSJzIiksXy51bmljb2RlJiYocCs9InUiKSxfLnVuaWNvZGVTZXRzJiYocCs9InYiKSxfLnN0aWNreSYmKHArPSJ5IikscH19LDIyODI3Oihj''@;'; put 'put ''ZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMzA0NjQpLkYuRVJSX0lOVkFMSURfT1BUX1ZBTFVFO2NlLmV4cG9ydHM9e2dldEhpZ2hXYXRlck1hcms6ZnVuY3Rpb24gcChWLHcsUCxGKXt2YXIgUj1mdW5jdGlvbiBfKFYsdyxQKXtyZXR1cm4gbnVsbCE9Vi5oaWdoV2F0ZXJNYXJrP1Yu''@;'; put 'put ''aGlnaFdhdGVyTWFyazp3P1ZbUF06bnVsbH0odyxGLFApO2lmKG51bGwhPVIpe2lmKCFpc0Zpbml0ZShSKXx8TWF0aC5mbG9vcihSKSE9PVJ8fFI8MCl0aHJvdyBuZXcgSShGP1A6ImhpZ2hXYXRlck1hcmsiLFIpO3JldHVybiBNYXRoLmZsb29yKFIpfXJldHVybiBWLm9iamVjdE1vZGU/MTY6''@;'; put 'put ''MTYzODR9fX0sMjMwMTI6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigyODM2NyksXz1iKDU4NjA3KSxwPWIoMzE0ODMpLFY9Yig5MzE2Miksdz1iKDM4ODEpLFA9Yig2NjUwMyksRj1iKDcwODI0KSxSPUFycmF5LHo9XyhQKCJBcnJheSIsInNvcnQiKSk7SSh7dGFyZ2V0OiJBcnJh''@;'; put 'put ''eSIscHJvdG86ITB9LHt0b1NvcnRlZDpmdW5jdGlvbihPKXt2b2lkIDAhPT1PJiZwKE8pO3ZhciBLPVYodGhpcyksWj13KFIsSyk7cmV0dXJuIHooWixPKX19KSxGKCJ0b1NvcnRlZCIpfSwyMzI0MTpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPUpTT04ucGFyc2UoJ3sibW9kcDEiOnsi''@;'; put 'put ''Z2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0''@;'; put 'put ''ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2M2EzNjIwZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMiI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3''@;'; put 'put ''OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTY1MzgxZmZmZmZmZmZmZmZm''@;'; put 'put ''ZmZmZiJ9LCJtb2RwNSI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0''@;'; put 'put ''ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVk''@;'; put 'put ''MjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2EyMzczMjdmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxNCI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4Yjgw''@;'; put 'put ''ZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZh''@;'; put 'put ''NWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkw''@;'; put 'put ''NWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFjYWE2OGZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE1Ijp7ImdlbiI6IjAyIiwi''@;'; put 'put ''cHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3''@;'; put 'put ''ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjll''@;'; put 'put ''ZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1''@;'; put 'put ''YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4''@;'; put 'put ''NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTNhZDJjYWZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE2Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZm''@;'; put 'put ''YzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1''@;'; put 'put ''Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRh''@;'; put 'put ''YmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2Ez''@;'; put 'put ''M2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUx''@;'; put 'put ''MTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIw''@;'; put 'put ''NGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwNjMx''@;'; put 'put ''OTlmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxNyI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMw''@;'; put 'put ''MmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2Zh''@;'; put 'put ''OGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4''@;'; put 'put ''MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRj''@;'; put 'put ''ZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlh''@;'; put 'put ''MTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3''@;'; put 'put ''MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDI4NDkyMzZjM2ZhYjRkMjdjNzAyNmMxZDRkY2IyNjAyNjQ2ZGVjOTc1MWU3NjNkYmEzN2JkZjhmZjk0MDZhZDllNTMwZWU1ZGIzODJmNDEzMDAxYWViMDZhNTNlZDkwMjdkODMx''@;'; put 'put ''MTc5NzI3YjA4NjVhODkxOGRhM2VkYmViY2Y5YjE0ZWQ0NGNlNmNiYWNlZDRiYjFiZGI3ZjE0NDdlNmNjMjU0YjMzMjA1MTUxMmJkN2FmNDI2ZmI4ZjQwMTM3OGNkMmJmNTk4M2NhMDFjNjRiOTJlY2YwMzJlYTE1ZDE3MjFkMDNmNDgyZDdjZTZlNzRmZWY2ZDU1ZTcwMmY0Njk4MGM4MmI1YTg0''@;'; put 'put ''MDMxOTAwYjFjOWU1OWU3Yzk3ZmJlYzdlOGYzMjNhOTdhN2UzNmNjODhiZTBmMWQ0NWI3ZmY1ODVhYzU0YmQ0MDdiMjJiNDE1NGFhY2M4ZjZkN2ViZjQ4ZTFkODE0Y2M1ZWQyMGY4MDM3ZTBhNzk3MTVlZWYyOWJlMzI4MDZhMWQ1OGJiN2M1ZGE3NmY1NTBhYTNkOGExZmJmZjBlYjE5Y2NiMWEz''@;'; put 'put ''MTNkNTVjZGE1NmM5ZWMyZWYyOTYzMjM4N2ZlOGQ3NmUzYzA0NjgwNDNlOGY2NjNmNDg2MGVlMTJiZjJkNWIwYjc0NzRkNmU2OTRmOTFlNmRjYzQwMjRmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxOCI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMy''@;'; put 'put ''MzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUz''@;'; put 'put ''ODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4''@;'; put 'put ''Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNi''@;'; put 'put ''YTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3''@;'; put 'put ''MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMx''@;'; put 'put ''NDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDI4NDkyMzZjM2ZhYjRkMjdj''@;'; put 'put ''NzAyNmMxZDRkY2IyNjAyNjQ2ZGVjOTc1MWU3NjNkYmEzN2JkZjhmZjk0MDZhZDllNTMwZWU1ZGIzODJmNDEzMDAxYWViMDZhNTNlZDkwMjdkODMxMTc5NzI3YjA4NjVhODkxOGRhM2VkYmViY2Y5YjE0ZWQ0NGNlNmNiYWNlZDRiYjFiZGI3ZjE0NDdlNmNjMjU0YjMzMjA1MTUxMmJkN2FmNDI2''@;'; put 'put ''ZmI4ZjQwMTM3OGNkMmJmNTk4M2NhMDFjNjRiOTJlY2YwMzJlYTE1ZDE3MjFkMDNmNDgyZDdjZTZlNzRmZWY2ZDU1ZTcwMmY0Njk4MGM4MmI1YTg0MDMxOTAwYjFjOWU1OWU3Yzk3ZmJlYzdlOGYzMjNhOTdhN2UzNmNjODhiZTBmMWQ0NWI3ZmY1ODVhYzU0YmQ0MDdiMjJiNDE1NGFhY2M4ZjZk''@;'; put 'put ''N2ViZjQ4ZTFkODE0Y2M1ZWQyMGY4MDM3ZTBhNzk3MTVlZWYyOWJlMzI4MDZhMWQ1OGJiN2M1ZGE3NmY1NTBhYTNkOGExZmJmZjBlYjE5Y2NiMWEzMTNkNTVjZGE1NmM5ZWMyZWYyOTYzMjM4N2ZlOGQ3NmUzYzA0NjgwNDNlOGY2NjNmNDg2MGVlMTJiZjJkNWIwYjc0NzRkNmU2OTRmOTFlNmRi''@;'; put 'put ''ZTExNTk3NGEzOTI2ZjEyZmVlNWU0Mzg3NzdjYjZhOTMyZGY4Y2Q4YmVjNGQwNzNiOTMxYmEzYmM4MzJiNjhkOWRkMzAwNzQxZmE3YmY4YWZjNDdlZDI1NzZmNjkzNmJhNDI0NjYzYWFiNjM5YzVhZTRmNTY4MzQyM2I0NzQyYmYxYzk3ODIzOGYxNmNiZTM5ZDY1MmRlM2ZkYjhiZWZjODQ4YWQ5''@;'; put 'put ''MjIyMjJlMDRhNDAzN2MwNzEzZWI1N2E4MWEyM2YwYzczNDczZmM2NDZjZWEzMDZiNGJjYmM4ODYyZjgzODVkZGZhOWQ0YjdmYTJjMDg3ZTg3OTY4MzMwM2VkNWJkZDNhMDYyYjNjZjViM2EyNzhhNjZkMmExM2Y4M2Y0NGY4MmRkZjMxMGVlMDc0YWI2YTM2NDU5N2U4OTlhMDI1NWRjMTY0ZjMx''@;'; put 'put ''Y2M1MDg0Njg1MWRmOWFiNDgxOTVkZWQ3ZWExYjFkNTEwYmQ3ZWU3NGQ3M2ZhZjM2YmMzMWVjZmEyNjgzNTkwNDZmNGViODc5ZjkyNDAwOTQzOGI0ODFjNmNkNzg4OWEwMDJlZDVlZTM4MmJjOTE5MGRhNmZjMDI2ZTQ3OTU1OGU0NDc1Njc3ZTlhYTllMzA1MGUyNzY1Njk0ZGZjODFmNTZlODgw''@;'; put 'put ''Yjk2ZTcxNjBjOTgwZGQ5OGVkZDNkZmZmZmZmZmZmZmZmZmZmZmYifX0nKX0sMjMzMTM6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig1ODYwNyksXz1iKDM4ZTMpLHA9Yig5MzE2MiksVj1iKDc0ODI0KS5pbmRleE9mLHc9YigzNDY3MCksUD1JKFtdLnB1c2gpO2NlLmV4cG9ydHM9''@;'; put 'put ''ZnVuY3Rpb24oRixSKXt2YXIgSyx6PXAoRiksTj0wLE89W107Zm9yKEsgaW4geikhXyh3LEspJiZfKHosSykmJlAoTyxLKTtmb3IoO1IubGVuZ3RoPk47KV8oeixLPVJbTisrXSkmJih+VihPLEspfHxQKE8sSykpO3JldHVybiBPfX0sMjM0MDE6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFy''@;'; put 'put ''IFIsST1YLF89Yig1MjUyOSkscD1iKDg3MjkpLHc9YigzMTM2KS5hc3NlcnQ7ZnVuY3Rpb24gUCh6KXt0aGlzLmN1cnZlPSJzaG9ydCI9PT16LnR5cGU/bmV3IHAuc2hvcnQoeik6ImVkd2FyZHMiPT09ei50eXBlP25ldyBwLmVkd2FyZHMoeik6bmV3IHAubW9udCh6KSx0aGlzLmc9dGhpcy5j''@;'; put 'put ''dXJ2ZS5nLHRoaXMubj10aGlzLmN1cnZlLm4sdGhpcy5oYXNoPXouaGFzaCx3KHRoaXMuZy52YWxpZGF0ZSgpLCJJbnZhbGlkIGN1cnZlIiksdyh0aGlzLmcubXVsKHRoaXMubikuaXNJbmZpbml0eSgpLCJJbnZhbGlkIGN1cnZlLCBHKk4gIT0gTyIpfWZ1bmN0aW9uIEYoeixOKXtPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkoSSx6LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgTz1uZXcgUChOKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KEkseix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6T30pLE99fSl9SS5QcmVz''@;'; put 'put ''ZXRDdXJ2ZT1QLEYoInAxOTIiLHt0eXBlOiJzaG9ydCIscHJpbWU6InAxOTIiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIixhOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmYyIsYjoi''@;'; put 'put ''NjQyMTA1MTkgZTU5YzgwZTcgMGZhN2U5YWIgNzIyNDMwNDkgZmViOGRlZWMgYzE0NmI5YjEiLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDk5ZGVmODM2IDE0NmJjOWIxIGI0ZDIyODMxIixoYXNoOl8uc2hhMjU2LGdSZWQ6ITEsZzpbIjE4OGRhODBlIGIwMzA5MGY2IDdjYmYyMGVi''@;'; put 'put ''IDQzYTE4ODAwIGY0ZmYwYWZkIDgyZmYxMDEyIiwiMDcxOTJiOTUgZmZjOGRhNzggNjMxMDExZWQgNmIyNGNkZDUgNzNmOTc3YTEgMWU3OTQ4MTEiXX0pLEYoInAyMjQiLHt0eXBlOiJzaG9ydCIscHJpbWU6InAyMjQiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAw''@;'; put 'put ''MDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIixhOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSIsYjoiYjQwNTBhODUgMGMwNGIzYWIgZjU0MTMyNTYgNTA0NGIwYjcgZDdiZmQ4YmEgMjcwYjM5NDMgMjM1NWZmYjQiLG46ImZm''@;'; put 'put ''ZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmYxNmEyIGUwYjhmMDNlIDEzZGQyOTQ1IDVjNWMyYTNkIixoYXNoOl8uc2hhMjU2LGdSZWQ6ITEsZzpbImI3MGUwY2JkIDZiYjRiZjdmIDMyMTM5MGI5IDRhMDNjMWQzIDU2YzIxMTIyIDM0MzI4MGQ2IDExNWMxZDIxIiwiYmQzNzYzODggYjVm''@;'; put 'put ''NzIzZmIgNGMyMmRmZTYgY2Q0Mzc1YTAgNWEwNzQ3NjQgNDRkNTgxOTkgODUwMDdlMzQiXX0pLEYoInAyNTYiLHt0eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxwOiJmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiIs''@;'; put 'put ''YToiZmZmZmZmZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmMiLGI6IjVhYzYzNWQ4IGFhM2E5M2U3IGIzZWJiZDU1IDc2OTg4NmJjIDY1MWQwNmIwIGNjNTNiMGY2IDNiY2UzYzNlIDI3ZDI2MDRiIixuOiJmZmZmZmZmZiAw''@;'; put 'put ''MDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBiY2U2ZmFhZCBhNzE3OWU4NCBmM2I5Y2FjMiBmYzYzMjU1MSIsaGFzaDpfLnNoYTI1NixnUmVkOiExLGc6WyI2YjE3ZDFmMiBlMTJjNDI0NyBmOGJjZTZlNSA2M2E0NDBmMiA3NzAzN2Q4MSAyZGViMzNhMCBmNGExMzk0NSBkODk4YzI5NiIsIjRm''@;'; put 'put ''ZTM0MmUyIGZlMWE3ZjliIDhlZTdlYjRhIDdjMGY5ZTE2IDJiY2UzMzU3IDZiMzE1ZWNlIGNiYjY0MDY4IDM3YmY1MWY1Il19KSxGKCJwMzg0Iix7dHlwZToic2hvcnQiLHByaW1lOm51bGwscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYg''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZj''@;'; put 'put ''IixiOiJiMzMxMmZhNyBlMjNlZTdlNCA5ODhlMDU2YiBlM2Y4MmQxOSAxODFkOWM2ZSBmZTgxNDExMiAwMzE0MDg4ZiA1MDEzODc1YSBjNjU2Mzk4ZCA4YTJlZDE5ZCAyYTg1YzhlZCBkM2VjMmFlZiIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZm''@;'; put 'put ''ZmZmZmYgYzc2MzRkODEgZjQzNzJkZGYgNTgxYTBkYjIgNDhiMGE3N2EgZWNlYzE5NmEgY2NjNTI5NzMiLGhhc2g6Xy5zaGEzODQsZ1JlZDohMSxnOlsiYWE4N2NhMjIgYmU4YjA1MzcgOGViMWM3MWUgZjMyMGFkNzQgNmUxZDNiNjIgOGJhNzliOTggNTlmNzQxZTAgODI1NDJhMzggNTUwMmYy''@;'; put 'put ''NWQgYmY1NTI5NmMgM2E1NDVlMzggNzI3NjBhYjciLCIzNjE3ZGU0YSA5NjI2MmM2ZiA1ZDllOThiZiA5MjkyZGMyOSBmOGY0MWRiZCAyODlhMTQ3YyBlOWRhMzExMyBiNWYwYjhjMCAwYTYwYjFjZSAxZDdlODE5ZCA3YTQzMWQ3YyA5MGVhMGU1ZiJdfSksRigicDUyMSIse3R5cGU6InNob3J0''@;'; put 'put ''IixwcmltZTpudWxsLHA6IjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm''@;'; put 'put ''ZmZmIixhOiIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYyIsYjoi''@;'; put 'put ''MDAwMDAwNTEgOTUzZWI5NjEgOGUxYzlhMWYgOTI5YTIxYTAgYjY4NTQwZWUgYTJkYTcyNWIgOTliMzE1ZjMgYjhiNDg5OTEgOGVmMTA5ZTEgNTYxOTM5NTEgZWM3ZTkzN2IgMTY1MmMwYmQgM2JiMWJmMDcgMzU3M2RmODggM2QyYzM0ZjEgZWY0NTFmZDQgNmI1MDNmMDAiLG46IjAwMDAwMWZm''@;'; put 'put ''IGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZhIDUxODY4NzgzIGJmMmY5NjZiIDdmY2MwMTQ4IGY3MDlhNWQwIDNiYjVjOWI4IDg5OWM0N2FlIGJiNmZiNzFlIDkxMzg2NDA5IixoYXNoOl8uc2hhNTEyLGdSZWQ6''@;'; put 'put ''ITEsZzpbIjAwMDAwMGM2IDg1OGUwNmI3IDA0MDRlOWNkIDllM2VjYjY2IDIzOTViNDQyIDljNjQ4MTM5IDA1M2ZiNTIxIGY4MjhhZjYwIDZiNGQzZGJhIGExNGI1ZTc3IGVmZTc1OTI4IGZlMWRjMTI3IGEyZmZhOGRlIDMzNDhiM2MxIDg1NmE0MjliIGY5N2U3ZTMxIGMyZTViZDY2IiwiMDAw''@;'; put 'put ''MDAxMTggMzkyOTZhNzggOWEzYmMwMDQgNWM4YTVmYjQgMmM3ZDFiZDkgOThmNTQ0NDkgNTc5YjQ0NjggMTdhZmJkMTcgMjczZTY2MmMgOTdlZTcyOTkgNWVmNDI2NDAgYzU1MGI5MDEgM2ZhZDA3NjEgMzUzYzcwODYgYTI3MmMyNDAgODhiZTk0NzYgOWZkMTY2NTAiXX0pLEYoImN1cnZlMjU1''@;'; put 'put ''MTkiLHt0eXBlOiJtb250IixwcmltZToicDI1NTE5IixwOiI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIixhOiI3NmQwNiIsYjoiMSIsbjoiMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRl''@;'; put 'put ''YTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZCIsaGFzaDpfLnNoYTI1NixnUmVkOiExLGc6WyI5Il19KSxGKCJlZDI1NTE5Iix7dHlwZToiZWR3YXJkcyIscHJpbWU6InAyNTUxOSIscDoiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZm''@;'; put 'put ''ZmZmZmZlZCIsYToiLTEiLGM6IjEiLGQ6IjUyMDM2Y2VlMmI2ZmZlNzMgOGNjNzQwNzk3Nzc5ZTg5OCAwMDcwMGE0ZDQxNDFkOGFiIDc1ZWI0ZGNhMTM1OTc4YTMiLG46IjEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4MTI2MzFhNWNmNWQzZWQi''@;'; put 'put ''LGhhc2g6Xy5zaGEyNTYsZ1JlZDohMSxnOlsiMjE2OTM2ZDNjZDZlNTNmZWMwYTRlMjMxZmRkNmRjNWM2OTJjYzc2MDk1MjVhN2IyYzk1NjJkNjA4ZjI1ZDUxYSIsIjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NTgiXX0pO3Ry''@;'; put 'put ''eXtSPWIoNTE0MTYpfWNhdGNoe1I9dm9pZCAwfUYoInNlY3AyNTZrMSIse3R5cGU6InNob3J0IixwcmltZToiazI1NiIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiLGE6IjAiLGI6IjciLG46ImZmZmZm''@;'; put 'put ''ZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGJhYWVkY2U2IGFmNDhhMDNiIGJmZDI1ZThjIGQwMzY0MTQxIixoOiIxIixoYXNoOl8uc2hhMjU2LGJldGE6IjdhZTk2YTJiNjU3YzA3MTA2ZTY0NDc5ZWFjMzQzNGU5OWNmMDQ5NzUxMmY1ODk5NWMxMzk2YzI4NzE5NTAxZWUiLGxhbWJk''@;'; put 'put ''YToiNTM2M2FkNGNjMDVjMzBlMGE1MjYxYzAyODgxMjY0NWExMjJlMjJlYTIwODE2Njc4ZGYwMjk2N2MxYjIzYmQ3MiIsYmFzaXM6W3thOiIzMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNSIsYjoiLWU0NDM3ZWQ2MDEwZTg4Mjg2ZjU0N2ZhOTBhYmZlNGMzIn0se2E6IjExNGNhNTBm''@;'; put 'put ''N2E4ZTJmM2Y2NTdjMTEwOGQ5ZDQ0Y2ZkOCIsYjoiMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTUifV0sZ1JlZDohMSxnOlsiNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OCIsIjQ4M2FkYTc3MjZhM2M0NjU1ZGE0''@;'; put 'put ''ZmJmYzBlMTEwOGE4ZmQxN2I0NDhhNjg1NTQxOTljNDdkMDhmZmIxMGQ0YjgiLFJdfSl9LDIzNzQxOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz0iamFudVx4ZTFyX2ZlYnJ1XHhlMXJfbWFyZWNfYXByXHhlZGxfbVx4ZTFqX2pceGZhbl9qXHhmYWxf''@;'; put 'put ''YXVndXN0X3NlcHRlbWJlcl9va3RceGYzYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLHA9Imphbl9mZWJfbWFyX2Fwcl9tXHhlMWpfalx4ZmFuX2pceGZhbF9hdWdfc2VwX29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpO2Z1bmN0aW9uIFYoRil7cmV0dXJuIEY+MSYmRjw1fWZ1bmN0''@;'; put 'put ''aW9uIHcoRixSLHosTil7dmFyIE89RisiICI7c3dpdGNoKHope2Nhc2UicyI6cmV0dXJuIFJ8fE4/InBceGUxciBzZWtceGZhbmQiOiJwXHhlMXIgc2VrdW5kYW1pIjtjYXNlInNzIjpyZXR1cm4gUnx8Tj9PKyhWKEYpPyJzZWt1bmR5Ijoic2VrXHhmYW5kIik6Tysic2VrdW5kYW1pIjtjYXNl''@;'; put 'put ''Im0iOnJldHVybiBSPyJtaW5ceGZhdGEiOk4/Im1pblx4ZmF0dSI6Im1pblx4ZmF0b3UiO2Nhc2UibW0iOnJldHVybiBSfHxOP08rKFYoRik/Im1pblx4ZmF0eSI6Im1pblx4ZmF0Iik6TysibWluXHhmYXRhbWkiO2Nhc2UiaCI6cmV0dXJuIFI/ImhvZGluYSI6Tj8iaG9kaW51IjoiaG9kaW5v''@;'; put 'put ''dSI7Y2FzZSJoaCI6cmV0dXJuIFJ8fE4/TysoVihGKT8iaG9kaW55IjoiaG9kXHhlZG4iKTpPKyJob2RpbmFtaSI7Y2FzZSJkIjpyZXR1cm4gUnx8Tj8iZGVcdTAxNDgiOiJkXHUwMTQ4b20iO2Nhc2UiZGQiOnJldHVybiBSfHxOP08rKFYoRik/ImRuaSI6ImRuXHhlZCIpOk8rImRcdTAxNDhh''@;'; put 'put ''bWkiO2Nhc2UiTSI6cmV0dXJuIFJ8fE4/Im1lc2lhYyI6Im1lc2lhY29tIjtjYXNlIk1NIjpyZXR1cm4gUnx8Tj9PKyhWKEYpPyJtZXNpYWNlIjoibWVzaWFjb3YiKTpPKyJtZXNpYWNtaSI7Y2FzZSJ5IjpyZXR1cm4gUnx8Tj8icm9rIjoicm9rb20iO2Nhc2UieXkiOnJldHVybiBSfHxOP08r''@;'; put 'put ''KFYoRik/InJva3kiOiJyb2tvdiIpOk8rInJva21pIn19SS5kZWZpbmVMb2NhbGUoInNrIix7bW9udGhzOl8sbW9udGhzU2hvcnQ6cCx3ZWVrZGF5czoibmVkZVx1MDEzZWFfcG9uZGVsb2tfdXRvcm9rX3N0cmVkYV9cdTAxNjF0dnJ0b2tfcGlhdG9rX3NvYm90YSIuc3BsaXQoIl8iKSx3ZWVr''@;'; put 'put ''ZGF5c1Nob3J0OiJuZV9wb191dF9zdF9cdTAxNjF0X3BpX3NvIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb191dF9zdF9cdTAxNjF0X3BpX3NvIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1N''@;'; put 'put ''TSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkIEQuIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltkbmVzIG9dIExUIixuZXh0RGF5OiJbemFqdHJhIG9dIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6''@;'; put 'put ''cmV0dXJuIlt2IG5lZGVcdTAxM2V1IG9dIExUIjtjYXNlIDE6Y2FzZSAyOnJldHVybiJbdl0gZGRkZCBbb10gTFQiO2Nhc2UgMzpyZXR1cm4iW3Ygc3RyZWR1IG9dIExUIjtjYXNlIDQ6cmV0dXJuIlt2byBcdTAxNjF0dnJ0b2sgb10gTFQiO2Nhc2UgNTpyZXR1cm4iW3YgcGlhdG9rIG9dIExU''@;'; put 'put ''IjtjYXNlIDY6cmV0dXJuIlt2IHNvYm90dSBvXSBMVCJ9fSxsYXN0RGF5OiJbdlx1MDEwZGVyYSBvXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbbWludWxceGZhIG5lZGVcdTAxM2V1IG9dIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2Ug''@;'; put 'put ''NDpjYXNlIDU6cmV0dXJuIlttaW51bFx4ZmRdIGRkZGQgW29dIExUIjtjYXNlIDM6cmV0dXJuIlttaW51bFx4ZmEgc3RyZWR1IG9dIExUIjtjYXNlIDY6cmV0dXJuIlttaW51bFx4ZmEgc29ib3R1IG9dIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVzIixw''@;'; put 'put ''YXN0OiJwcmVkICVzIixzOncsc3M6dyxtOncsbW06dyxoOncsaGg6dyxkOncsZGQ6dyxNOncsTU06dyx5OncseXk6d30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDI0ODE2OihjZSxYLGIp''@;'; put 'put ''PT57dmFyIEk9Yig3MTk5MyksXz1iKDcyMTkzKTtmdW5jdGlvbiBwKFYpe18uY2FsbCh0aGlzLFYpLHRoaXMuZW5jPSJwZW0ifUkocCxfKSxjZS5leHBvcnRzPXAscC5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHcsUCl7Zm9yKHZhciBSPV8ucHJvdG90eXBlLmVuY29kZS5jYWxsKHRoaXMs''@;'; put 'put ''dykudG9TdHJpbmcoImJhc2U2NCIpLHo9WyItLS0tLUJFR0lOICIrUC5sYWJlbCsiLS0tLS0iXSxOPTA7TjxSLmxlbmd0aDtOKz02NCl6LnB1c2goUi5zbGljZShOLE4rNjQpKTtyZXR1cm4gei5wdXNoKCItLS0tLUVORCAiK1AubGFiZWwrIi0tLS0tIiksei5qb2luKCJcbiIpfX0sMjUwMDE6''@;'; put 'put ''KGNlLFgpPT57InVzZSBzdHJpY3QiO1guQz12b2lkIDAsWC5DPShfLHA9MSxWPTEwOTk1MTE2Mjc3NzYpPT57aWYoMD09PV8pcmV0dXJuIjAgQiI7Xz1fPlY/VjpfO2NvbnN0IEY9cDwwPzA6cCxSPU1hdGguZmxvb3IoTWF0aC5sb2coXykvTWF0aC5sb2coMTAyNCkpO3JldHVybihfL01hdGgu''@;'; put 'put ''cG93KDEwMjQsUikpLnRvRml4ZWQoRikrIiAiK1siQiIsIktCIiwiTUIiLCJHQiIsIlRCIl1bUl19fSwyNTE0NzpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInNpIix7bW9udGhzOiJcdTBkYTJcdTBkYjFcdTBkYzBcdTBkY2ZcdTBk''@;'; put 'put ''YmJcdTBkZDJfXHUwZGI0XHUwZGQ5XHUwZGI2XHUwZGJiXHUwZGMwXHUwZGNmXHUwZGJiXHUwZGQyX1x1MGRiOFx1MGRjZlx1MGRiYlx1MGRjYVx1MGRhZFx1MGRkNF9cdTBkODVcdTBkYjRcdTBkY2FcdTIwMGRcdTBkYmJcdTBkZGFcdTBkYmRcdTBkY2FfXHUwZGI4XHUwZGQwXHUwZGJhXHUw''@;'; put 'put ''ZGQyX1x1MGRhMlx1MGRkNlx1MGRiMVx1MGRkMl9cdTBkYTJcdTBkZDZcdTBkYmRcdTBkZDJfXHUwZDg1XHUwZDljXHUwZGRkXHUwZGMzXHUwZGNhXHUwZGFkXHUwZGQ0X1x1MGRjM1x1MGRkMFx1MGRiNFx1MGRjYVx1MGRhZFx1MGRkMFx1MGRiOFx1MGRjYVx1MGRiNlx1MGRiYlx1MGRjYV9c''@;'; put 'put ''dTBkOTRcdTBkOWFcdTBkY2FcdTBkYWRcdTBkZGRcdTBkYjZcdTBkYmJcdTBkY2FfXHUwZGIxXHUwZGRjXHUwZGMwXHUwZGQwXHUwZGI4XHUwZGNhXHUwZGI2XHUwZGJiXHUwZGNhX1x1MGRhZlx1MGRkOVx1MGRjM1x1MGRkMFx1MGRiOFx1MGRjYVx1MGRiNlx1MGRiYlx1MGRjYSIuc3BsaXQo''@;'; put 'put ''Il8iKSxtb250aHNTaG9ydDoiXHUwZGEyXHUwZGIxX1x1MGRiNFx1MGRkOVx1MGRiNl9cdTBkYjhcdTBkY2ZcdTBkYmJcdTBkY2FfXHUwZDg1XHUwZGI0XHUwZGNhX1x1MGRiOFx1MGRkMFx1MGRiYVx1MGRkMl9cdTBkYTJcdTBkZDZcdTBkYjFcdTBkZDJfXHUwZGEyXHUwZGQ2XHUwZGJkXHUw''@;'; put 'put ''ZGQyX1x1MGQ4NVx1MGQ5Y1x1MGRkZF9cdTBkYzNcdTBkZDBcdTBkYjRcdTBkY2FfXHUwZDk0XHUwZDlhXHUwZGNhX1x1MGRiMVx1MGRkY1x1MGRjMFx1MGRkMF9cdTBkYWZcdTBkZDlcdTBkYzNcdTBkZDAiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MGQ4OVx1MGRiYlx1MGRkMlx1MGRhZlx1''@;'; put 'put ''MGRjZl9cdTBkYzNcdTBkYjNcdTBkZDRcdTBkYWZcdTBkY2ZfXHUwZDg1XHUwZDlmXHUwZGM0XHUwZGJiXHUwZGQ0XHUwZGMwXHUwZGNmXHUwZGFmXHUwZGNmX1x1MGRiNlx1MGRhZlx1MGRjZlx1MGRhZlx1MGRjZl9cdTBkYjZcdTBkY2FcdTIwMGRcdTBkYmJcdTBkYzRcdTBkYzNcdTBkY2Fc''@;'; put 'put ''dTBkYjRcdTBkYWRcdTBkZDJcdTBkYjFcdTBkY2FcdTBkYWZcdTBkY2ZfXHUwZGMzXHUwZGQyXHUwZDlhXHUwZGQ0XHUwZGJiXHUwZGNmXHUwZGFmXHUwZGNmX1x1MGRjM1x1MGRkOVx1MGRiMVx1MGRjM1x1MGRkNFx1MGRiYlx1MGRjZlx1MGRhZlx1MGRjZiIuc3BsaXQoIl8iKSx3ZWVrZGF5''@;'; put 'put ''c1Nob3J0OiJcdTBkODlcdTBkYmJcdTBkZDJfXHUwZGMzXHUwZGIzXHUwZGQ0X1x1MGQ4NVx1MGQ5Zl9cdTBkYjZcdTBkYWZcdTBkY2ZfXHUwZGI2XHUwZGNhXHUyMDBkXHUwZGJiXHUwZGM0X1x1MGRjM1x1MGRkMlx1MGQ5YVx1MGRkNF9cdTBkYzNcdTBkZDlcdTBkYjEiLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXNNaW46Ilx1MGQ4OV9cdTBkYzNfXHUwZDg1X1x1MGRiNl9cdTBkYjZcdTBkY2FcdTIwMGRcdTBkYmJfXHUwZGMzXHUwZGQyX1x1MGRjM1x1MGRkOSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJhIGg6bW0iLExUUzoiYSBoOm1t''@;'; put 'put ''OnNzIixMOiJZWVlZL01NL0REIixMTDoiWVlZWSBNTU1NIEQiLExMTDoiWVlZWSBNTU1NIEQsIGEgaDptbSIsTExMTDoiWVlZWSBNTU1NIEQgW1x1MGRjMFx1MGRkMFx1MGRiMVx1MGRkMl0gZGRkZCwgYSBoOm1tOnNzIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBkODVcdTBkYWZdIExUW1x1''@;'; put 'put ''MGRhN10iLG5leHREYXk6IltcdTBkYzRcdTBkZDlcdTBkYTddIExUW1x1MGRhN10iLG5leHRXZWVrOiJkZGRkIExUW1x1MGRhN10iLGxhc3REYXk6IltcdTBkOGFcdTBkYmFcdTBkZGFdIExUW1x1MGRhN10iLGxhc3RXZWVrOiJbXHUwZGI0XHUwZGMzXHUwZGQ0XHUwZDljXHUwZGQyXHUwZGJh''@;'; put 'put ''XSBkZGRkIExUW1x1MGRhN10iLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHUwZDlhXHUwZGQyXHUwZGIxXHUwZGNhIixwYXN0OiIlc1x1MGQ5YVx1MGRhNyBcdTBkYjRcdTBkZDlcdTBkYmIiLHM6Ilx1MGRhZFx1MGRhZFx1MGRjYVx1MGRiNFx1MGRiYiBcdTBkOWFc''@;'; put 'put ''dTBkZDJcdTBkYzRcdTBkZDJcdTBkYjRcdTBkYmEiLHNzOiJcdTBkYWRcdTBkYWRcdTBkY2FcdTBkYjRcdTBkYmIgJWQiLG06Ilx1MGRiOFx1MGRkMlx1MGRiMVx1MGRkMlx1MGRhZFx1MGRjYVx1MGRhZFx1MGRkNFx1MGRjMCIsbW06Ilx1MGRiOFx1MGRkMlx1MGRiMVx1MGRkMlx1MGRhZFx1''@;'; put 'put ''MGRjYVx1MGRhZFx1MGRkNCAlZCIsaDoiXHUwZGI0XHUwZGQwXHUwZGJhIixoaDoiXHUwZGI0XHUwZGQwXHUwZGJhICVkIixkOiJcdTBkYWZcdTBkZDJcdTBkYjFcdTBkYmEiLGRkOiJcdTBkYWZcdTBkZDJcdTBkYjEgJWQiLE06Ilx1MGRiOFx1MGRjZlx1MGRjM1x1MGRiYSIsTU06Ilx1MGRi''@;'; put 'put ''OFx1MGRjZlx1MGRjMyAlZCIseToiXHUwZGMwXHUwZGMzXHUwZGJiIix5eToiXHUwZGMwXHUwZGMzXHUwZGJiICVkIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfSBcdTBkYzBcdTBkZDBcdTBkYjFcdTBkZDIvLG9yZGluYWw6ZnVuY3Rpb24ocCl7cmV0dXJuIHArIiBcdTBkYzBc''@;'; put 'put ''dTBkZDBcdTBkYjFcdTBkZDIifSxtZXJpZGllbVBhcnNlOi9cdTBkYjRcdTBkZDlcdTBkYmIgXHUwZGMwXHUwZGJiXHUwZGQ0fFx1MGRiNFx1MGRjM1x1MGRjYSBcdTBkYzBcdTBkYmJcdTBkZDR8XHUwZGI0XHUwZGQ5Llx1MGRjMHxcdTBkYjQuXHUwZGMwLi8saXNQTTpmdW5jdGlvbihwKXty''@;'; put 'put ''ZXR1cm4iXHUwZGI0Llx1MGRjMC4iPT09cHx8Ilx1MGRiNFx1MGRjM1x1MGRjYSBcdTBkYzBcdTBkYmJcdTBkZDQiPT09cH0sbWVyaWRpZW06ZnVuY3Rpb24ocCxWLHcpe3JldHVybiBwPjExP3c/Ilx1MGRiNC5cdTBkYzAuIjoiXHUwZGI0XHUwZGMzXHUwZGNhIFx1MGRjMFx1MGRiYlx1MGRk''@;'; put 'put ''NCI6dz8iXHUwZGI0XHUwZGQ5Llx1MGRjMC4iOiJcdTBkYjRcdTBkZDlcdTBkYmIgXHUwZGMwXHUwZGJiXHUwZGQ0In19KX0oYig5NzU4NikpfSwyNTE3MjpjZT0+e2NlLmV4cG9ydHM9ZnVuY3Rpb24gWChiLEkpe3RoaXMudj1iLHRoaXMuaz1JfSxjZS5leHBvcnRzLl9fZXNNb2R1bGU9ITAs''@;'; put 'put ''Y2UuZXhwb3J0cy5kZWZhdWx0PWNlLmV4cG9ydHN9LDI1NDQzOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9ZnVuY3Rpb24oXyl7dmFyIHA9Xy50b0xvd2VyQ2FzZSgpLFY9Y2UuZXhwb3J0c1twXTtpZighVil0aHJvdyBuZXcgRXJyb3IocCsiIGlzIG5vdCBzdXBwb3J0ZWQg''@;'; put 'put ''KHdlIGFjY2VwdCBwdWxsIHJlcXVlc3RzKSIpO3JldHVybiBuZXcgVn0sY2UuZXhwb3J0cy5zaGE9Yig0ODU4NSksY2UuZXhwb3J0cy5zaGExPWIoMjEyNzApLGNlLmV4cG9ydHMuc2hhMjI0PWIoNDI3MDkpLGNlLmV4cG9ydHMuc2hhMjU2PWIoMzIxNDgpLGNlLmV4cG9ydHMuc2hhMzg0PWIo''@;'; put 'put ''NTE4NTYpLGNlLmV4cG9ydHMuc2hhNTEyPWIoMzEyMSl9LDI1OTUwOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgibXMtbXkiLHttb250aHM6IkphbnVhcmlfRmVicnVhcmlfTWFjX0FwcmlsX01laV9KdW5fSnVsYWlfT2dvc19TZXB0''@;'; put 'put ''ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EaXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYWNfQXByX01laV9KdW5fSnVsX09nc19TZXBfT2t0X05vdl9EaXMiLnNwbGl0KCJfIiksd2Vla2RheXM6IkFoYWRfSXNuaW5fU2VsYXNhX1JhYnVfS2hhbWlzX0p1bWFhdF9T''@;'; put 'put ''YWJ0dSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJBaGRfSXNuX1NlbF9SYWJfS2hhX0p1bV9TYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkFoX0lzX1NsX1JiX0ttX0ptX1NiIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkRE''@;'; put 'put ''L01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIn0sbWVyaWRpZW1QYXJzZTovcGFnaXx0ZW5nYWhhcml8cGV0YW5nfG1hbGFtLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24o''@;'; put 'put ''cCxWKXtyZXR1cm4gMTI9PT1wJiYocD0wKSwicGFnaSI9PT1WP3A6InRlbmdhaGFyaSI9PT1WP3A+PTExP3A6cCsxMjoicGV0YW5nIj09PVZ8fCJtYWxhbSI9PT1WP3ArMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihwLFYsdyl7cmV0dXJuIHA8MTE/InBhZ2kiOnA8MTU/InRlbmdhaGFy''@;'; put 'put ''aSI6cDwxOT8icGV0YW5nIjoibWFsYW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hhcmkgaW5pIHB1a3VsXSBMVCIsbmV4dERheToiW0Vzb2sgcHVrdWxdIExUIixuZXh0V2VlazoiZGRkZCBbcHVrdWxdIExUIixsYXN0RGF5OiJbS2VsbWFyaW4gcHVrdWxdIExUIixsYXN0V2VlazoiZGRkZCBb''@;'; put 'put ''bGVwYXMgcHVrdWxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkYWxhbSAlcyIscGFzdDoiJXMgeWFuZyBsZXBhcyIsczoiYmViZXJhcGEgc2FhdCIsc3M6IiVkIHNhYXQiLG06InNlbWluaXQiLG1tOiIlZCBtaW5pdCIsaDoic2VqYW0iLGhoOiIlZCBqYW0iLGQ6''@;'; put 'put ''InNlaGFyaSIsZGQ6IiVkIGhhcmkiLE06InNlYnVsYW4iLE1NOiIlZCBidWxhbiIseToic2V0YWh1biIseXk6IiVkIHRhaHVuIn0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGIoOTc1ODYpKX0sMjYzNTc6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigyODM2NyksXz1iKDQ2OTI2KSxw''@;'; put 'put ''PWIoMzA3ODcpLFY9YigzMTQ4Myksdz1iKDExMDgpLFA9Yig3NTQyNCksRj1iKDY2NTQyKSx6PWIoNDEyNTIpKCJmaW5kIixUeXBlRXJyb3IpO0koe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOnp9LHtmaW5kOmZ1bmN0aW9uKE8pe3codGhpcyk7dHJ5e1YoTyl9''@;'; put 'put ''Y2F0Y2goWSl7Rih0aGlzLCJ0aHJvdyIsWSl9aWYoeilyZXR1cm4gXyh6LHRoaXMsTyk7dmFyIEs9UCh0aGlzKSxaPTA7cmV0dXJuIHAoSyxmdW5jdGlvbihZLFcpe2lmKE8oWSxaKyspKXJldHVybiBXKFkpfSx7SVNfUkVDT1JEOiEwLElOVEVSUlVQVEVEOiEwfSkucmVzdWx0fX0pfSwyNjQw''@;'; put 'put ''MDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDM4ZTMpLF89YigxOTE1MCkscD1iKDMxOTUwKSxWPWIoNzk2NjIpLHc9Yig4MjgzNCksUD1WKCJJRV9QUk9UTyIpLEY9T2JqZWN0LFI9Ri5wcm90b3R5cGU7Y2UuZXhwb3J0cz13P0YuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oeil7''@;'; put 'put ''dmFyIE49cCh6KTtpZihJKE4sUCkpcmV0dXJuIE5bUF07dmFyIE89Ti5jb25zdHJ1Y3RvcjtyZXR1cm4gXyhPKSYmTiBpbnN0YW5jZW9mIE8/Ty5wcm90b3R5cGU6TiBpbnN0YW5jZW9mIEY/UjpudWxsfX0sMjY4Mjc6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBfPXsxOiJcdTBhZTciLDI6Ilx1MGFlOCIsMzoiXHUwYWU5Iiw0OiJcdTBhZWEiLDU6Ilx1MGFlYiIsNjoiXHUwYWVjIiw3OiJcdTBhZWQiLDg6Ilx1MGFlZSIsOToiXHUwYWVmIiwwOiJcdTBhZTYifSxwPXsiXHUwYWU3IjoiMSIsIlx1MGFlOCI6IjIiLCJcdTBhZTkiOiIzIiwiXHUw''@;'; put 'put ''YWVhIjoiNCIsIlx1MGFlYiI6IjUiLCJcdTBhZWMiOiI2IiwiXHUwYWVkIjoiNyIsIlx1MGFlZSI6IjgiLCJcdTBhZWYiOiI5IiwiXHUwYWU2IjoiMCJ9O0kuZGVmaW5lTG9jYWxlKCJndSIse21vbnRoczoiXHUwYTljXHUwYWJlXHUwYWE4XHUwYWNkXHUwYWFmXHUwYWMxXHUwYTg2XHUwYWIw''@;'; put 'put ''XHUwYWMwX1x1MGFhYlx1MGFjN1x1MGFhY1x1MGFjZFx1MGFiMFx1MGFjMVx1MGE4Nlx1MGFiMFx1MGFjMF9cdTBhYWVcdTBhYmVcdTBhYjBcdTBhY2RcdTBhOWFfXHUwYThmXHUwYWFhXHUwYWNkXHUwYWIwXHUwYWJmXHUwYWIyX1x1MGFhZVx1MGFjN19cdTBhOWNcdTBhYzJcdTBhYThfXHUw''@;'; put 'put ''YTljXHUwYWMxXHUwYWIyXHUwYWJlXHUwYTg4X1x1MGE5MVx1MGE5N1x1MGFiOFx1MGFjZFx1MGE5Zl9cdTBhYjhcdTBhYWFcdTBhY2RcdTBhOWZcdTBhYzdcdTBhYWVcdTBhY2RcdTBhYWNcdTBhYjBfXHUwYTkxXHUwYTk1XHUwYWNkXHUwYTlmXHUwYWNkXHUwYWFjXHUwYWIwX1x1MGFhOFx1''@;'; put 'put ''MGFiNVx1MGFjN1x1MGFhZVx1MGFjZFx1MGFhY1x1MGFiMF9cdTBhYTFcdTBhYmZcdTBhYjhcdTBhYzdcdTBhYWVcdTBhY2RcdTBhYWNcdTBhYjAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGE5Y1x1MGFiZVx1MGFhOFx1MGFjZFx1MGFhZlx1MGFjMS5fXHUwYWFiXHUwYWM3XHUwYWFj''@;'; put 'put ''XHUwYWNkXHUwYWIwXHUwYWMxLl9cdTBhYWVcdTBhYmVcdTBhYjBcdTBhY2RcdTBhOWFfXHUwYThmXHUwYWFhXHUwYWNkXHUwYWIwXHUwYWJmLl9cdTBhYWVcdTBhYzdfXHUwYTljXHUwYWMyXHUwYWE4X1x1MGE5Y1x1MGFjMVx1MGFiMlx1MGFiZS5fXHUwYTkxXHUwYTk3Ll9cdTBhYjhcdTBh''@;'; put 'put ''YWFcdTBhY2RcdTBhOWZcdTBhYzcuX1x1MGE5MVx1MGE5NVx1MGFjZFx1MGE5Zlx1MGFjZC5fXHUwYWE4XHUwYWI1XHUwYWM3Ll9cdTBhYTFcdTBhYmZcdTBhYjhcdTBhYzcuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MGFiMFx1MGFiNVx1MGFiZlx1MGFi''@;'; put 'put ''NVx1MGFiZVx1MGFiMF9cdTBhYjhcdTBhY2JcdTBhYWVcdTBhYjVcdTBhYmVcdTBhYjBfXHUwYWFlXHUwYTgyXHUwYTk3XHUwYWIzXHUwYWI1XHUwYWJlXHUwYWIwX1x1MGFhY1x1MGFjMVx1MGFhN1x1MGFjZFx1MGFiNVx1MGFiZVx1MGFiMF9cdTBhOTdcdTBhYzFcdTBhYjBcdTBhYzFcdTBh''@;'; put 'put ''YjVcdTBhYmVcdTBhYjBfXHUwYWI2XHUwYWMxXHUwYTk1XHUwYWNkXHUwYWIwXHUwYWI1XHUwYWJlXHUwYWIwX1x1MGFiNlx1MGFhOFx1MGFiZlx1MGFiNVx1MGFiZVx1MGFiMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBhYjBcdTBhYjVcdTBhYmZfXHUwYWI4XHUwYWNiXHUwYWFl''@;'; put 'put ''X1x1MGFhZVx1MGE4Mlx1MGE5N1x1MGFiM19cdTBhYWNcdTBhYzFcdTBhYTdcdTBhY2RfXHUwYTk3XHUwYWMxXHUwYWIwXHUwYWMxX1x1MGFiNlx1MGFjMVx1MGE5NVx1MGFjZFx1MGFiMF9cdTBhYjZcdTBhYThcdTBhYmYiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGFiMF9cdTBhYjhc''@;'; put 'put ''dTBhY2JfXHUwYWFlXHUwYTgyX1x1MGFhY1x1MGFjMV9cdTBhOTdcdTBhYzFfXHUwYWI2XHUwYWMxX1x1MGFiNiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSBcdTBhYjVcdTBhYmVcdTBhOTdcdTBhY2RcdTBhYWZcdTBhYzciLExUUzoiQSBoOm1tOnNzIFx1MGFiNVx1''@;'; put 'put ''MGFiZVx1MGE5N1x1MGFjZFx1MGFhZlx1MGFjNyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwYWI1XHUwYWJlXHUwYTk3XHUwYWNkXHUwYWFmXHUwYWM3IixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MGFiNVx1''@;'; put 'put ''MGFiZVx1MGE5N1x1MGFjZFx1MGFhZlx1MGFjNyJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwYTg2XHUwYTljXSBMVCIsbmV4dERheToiW1x1MGE5NVx1MGFiZVx1MGFiMlx1MGFjN10gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MGE5N1x1MGE4N1x1MGE5NVx1MGFiZVx1''@;'; put 'put ''MGFiMlx1MGFjN10gTFQiLGxhc3RXZWVrOiJbXHUwYWFhXHUwYWJlXHUwYTliXHUwYWIyXHUwYWJlXSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwYWFlXHUwYWJlIixwYXN0OiIlcyBcdTBhYWFcdTBhYjlcdTBhYzdcdTBhYjJcdTBhYmUiLHM6''@;'; put 'put ''Ilx1MGE4NVx1MGFhZVx1MGFjMVx1MGE5NSBcdTBhYWFcdTBhYjNcdTBhY2IiLHNzOiIlZCBcdTBhYjhcdTBhYzdcdTBhOTVcdTBhODJcdTBhYTEiLG06Ilx1MGE4Zlx1MGE5NSBcdTBhYWVcdTBhYmZcdTBhYThcdTBhYmZcdTBhOWYiLG1tOiIlZCBcdTBhYWVcdTBhYmZcdTBhYThcdTBhYmZc''@;'; put 'put ''dTBhOWYiLGg6Ilx1MGE4Zlx1MGE5NSBcdTBhOTVcdTBhYjJcdTBhYmVcdTBhOTUiLGhoOiIlZCBcdTBhOTVcdTBhYjJcdTBhYmVcdTBhOTUiLGQ6Ilx1MGE4Zlx1MGE5NSBcdTBhYTZcdTBhYmZcdTBhYjVcdTBhYjgiLGRkOiIlZCBcdTBhYTZcdTBhYmZcdTBhYjVcdTBhYjgiLE06Ilx1MGE4''@;'; put 'put ''Zlx1MGE5NSBcdTBhYWVcdTBhYjlcdTBhYmZcdTBhYThcdTBhY2IiLE1NOiIlZCBcdTBhYWVcdTBhYjlcdTBhYmZcdTBhYThcdTBhY2IiLHk6Ilx1MGE4Zlx1MGE5NSBcdTBhYjVcdTBhYjBcdTBhY2RcdTBhYjciLHl5OiIlZCBcdTBhYjVcdTBhYjBcdTBhY2RcdTBhYjcifSxwcmVwYXJzZTpm''@;'; put 'put ''dW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUwYWU3XHUwYWU4XHUwYWU5XHUwYWVhXHUwYWViXHUwYWVjXHUwYWVkXHUwYWVlXHUwYWVmXHUwYWU2XS9nLGZ1bmN0aW9uKFApe3JldHVybiBwW1BdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXGQv''@;'; put 'put ''ZyxmdW5jdGlvbihQKXtyZXR1cm4gX1tQXX0pfSxtZXJpZGllbVBhcnNlOi9cdTBhYjBcdTBhYmVcdTBhYTR8XHUwYWFjXHUwYWFhXHUwYWNiXHUwYWIwfFx1MGFiOFx1MGFiNVx1MGFiZVx1MGFiMHxcdTBhYjhcdTBhYmVcdTBhODJcdTBhOWMvLG1lcmlkaWVtSG91cjpmdW5jdGlvbih3LFAp''@;'; put 'put ''e3JldHVybiAxMj09PXcmJih3PTApLCJcdTBhYjBcdTBhYmVcdTBhYTQiPT09UD93PDQ/dzp3KzEyOiJcdTBhYjhcdTBhYjVcdTBhYmVcdTBhYjAiPT09UD93OiJcdTBhYWNcdTBhYWFcdTBhY2JcdTBhYjAiPT09UD93Pj0xMD93OncrMTI6Ilx1MGFiOFx1MGFiZVx1MGE4Mlx1MGE5YyI9PT1Q''@;'; put 'put ''P3crMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbih3LFAsRil7cmV0dXJuIHc8ND8iXHUwYWIwXHUwYWJlXHUwYWE0Ijp3PDEwPyJcdTBhYjhcdTBhYjVcdTBhYmVcdTBhYjAiOnc8MTc/Ilx1MGFhY1x1MGFhYVx1MGFjYlx1MGFiMCI6dzwyMD8iXHUwYWI4XHUwYWJlXHUwYTgyXHUwYTlj''@;'; put 'put ''IjoiXHUwYWIwXHUwYWJlXHUwYWE0In0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KGIoOTc1ODYpKX0sMjY4ODk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigyODM2NyksXz1iKDIwNTA3KSxwPWIoNDYzNjIpO0koe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDoh''@;'; put 'put ''Yig1MzUwNSkoInVuaW9uIil8fCFwKCJ1bmlvbiIpfSx7dW5pb246X30pfSwyNjkyOTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQ2Mzg3KSxfPWIoNTU1OTIpO2NlLmV4cG9ydHM9SSYmXyhmdW5jdGlvbigpe3JldHVybiA0MiE9PU9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5j''@;'; put 'put ''dGlvbigpe30sInByb3RvdHlwZSIse3ZhbHVlOjQyLHdyaXRhYmxlOiExfSkucHJvdG90eXBlfSl9LDI2OTMxOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNTg2MDcpLF89YigxOTE1MCkscD1iKDQ4MzU2KSxWPUkoRnVuY3Rpb24udG9TdHJpbmcpO18ocC5pbnNwZWN0U291cmNl''@;'; put 'put ''KXx8KHAuaW5zcGVjdFNvdXJjZT1mdW5jdGlvbih3KXtyZXR1cm4gVih3KX0pLGNlLmV4cG9ydHM9cC5pbnNwZWN0U291cmNlfSwyNzA1NDooY2UsWCxiKT0+e3ZhciBJPWIoODM4MzgpLF89SS5CdWZmZXI7ZnVuY3Rpb24gcCh3LFApe2Zvcih2YXIgRiBpbiB3KVBbRl09d1tGXX1mdW5jdGlv''@;'; put 'put ''biBWKHcsUCxGKXtyZXR1cm4gXyh3LFAsRil9Xy5mcm9tJiZfLmFsbG9jJiZfLmFsbG9jVW5zYWZlJiZfLmFsbG9jVW5zYWZlU2xvdz9jZS5leHBvcnRzPUk6KHAoSSxYKSxYLkJ1ZmZlcj1WKSxWLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKF8ucHJvdG90eXBlKSxwKF8sViksVi5mcm9tPWZ1''@;'; put 'put ''bmN0aW9uKHcsUCxGKXtpZigibnVtYmVyIj09dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gXyh3LFAsRil9LFYuYWxsb2M9ZnVuY3Rpb24odyxQLEYpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlw''@;'; put 'put ''ZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIFI9Xyh3KTtyZXR1cm4gdm9pZCAwIT09UD8ic3RyaW5nIj09dHlwZW9mIEY/Ui5maWxsKFAsRik6Ui5maWxsKFApOlIuZmlsbCgwKSxSfSxWLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHcpe2lmKCJudW1iZXIiIT10eXBlb2Yg''@;'; put 'put ''dyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIF8odyl9LFYuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHcpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7''@;'; put 'put ''cmV0dXJuIEkuU2xvd0J1ZmZlcih3KX19LDI3MTM4OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNjgyODMpLF89YigxMjkwMSkscD1iKDk1NTQyKSxWPWIoMzkyMTApLHc9SS5zdW0zMixQPUkuc3VtMzJfNCxGPUkuc3VtMzJfNSxSPXAuY2gzMix6PXAubWFqMzIsTj1wLnMwXzI1''@;'; put 'put ''NixPPXAuczFfMjU2LEs9cC5nMF8yNTYsWj1wLmcxXzI1NixZPV8uQmxvY2tIYXNoLFc9WzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIy''@;'; put 'put ''NTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0''@;'; put 'put ''OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4''@;'; put 'put ''MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIy''@;'; put 'put ''MjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF07ZnVuY3Rpb24gcSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHEpKXJldHVybiBuZXcgcTtZLmNhbGwodGhpcyksdGhpcy5oPVsxNzc5MDMzNzAzLDMx''@;'; put 'put ''NDQxMzQyNzcsMTAxMzkwNDI0MiwyNzczNDgwNzYyLDEzNTk4OTMxMTksMjYwMDgyMjkyNCw1Mjg3MzQ2MzUsMTU0MTQ1OTIyNV0sdGhpcy5rPVcsdGhpcy5XPW5ldyBBcnJheSg2NCl9SS5pbmhlcml0cyhxLFkpLGNlLmV4cG9ydHM9cSxxLmJsb2NrU2l6ZT01MTIscS5vdXRTaXplPTI1Nixx''@;'; put 'put ''LmhtYWNTdHJlbmd0aD0xOTIscS5wYWRMZW5ndGg9NjQscS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihKLHJlKXtmb3IodmFyIGllPXRoaXMuVyx1ZT0wO3VlPDE2O3VlKyspaWVbdWVdPUpbcmUrdWVdO2Zvcig7dWU8aWUubGVuZ3RoO3VlKyspaWVbdWVdPVAoWihpZVt1ZS0yXSksaWVb''@;'; put 'put ''dWUtN10sSyhpZVt1ZS0xNV0pLGllW3VlLTE2XSk7dmFyIGdlPXRoaXMuaFswXSxfZT10aGlzLmhbMV0sVGU9dGhpcy5oWzJdLE1lPXRoaXMuaFszXSxaZT10aGlzLmhbNF0sQj10aGlzLmhbNV0sZz10aGlzLmhbNl0seT10aGlzLmhbN107Zm9yKFYodGhpcy5rLmxlbmd0aD09PWllLmxlbmd0''@;'; put 'put ''aCksdWU9MDt1ZTxpZS5sZW5ndGg7dWUrKyl7dmFyIHg9Rih5LE8oWmUpLFIoWmUsQixnKSx0aGlzLmtbdWVdLGllW3VlXSksQz13KE4oZ2UpLHooZ2UsX2UsVGUpKTt5PWcsZz1CLEI9WmUsWmU9dyhNZSx4KSxNZT1UZSxUZT1fZSxfZT1nZSxnZT13KHgsQyl9dGhpcy5oWzBdPXcodGhpcy5o''@;'; put 'put ''WzBdLGdlKSx0aGlzLmhbMV09dyh0aGlzLmhbMV0sX2UpLHRoaXMuaFsyXT13KHRoaXMuaFsyXSxUZSksdGhpcy5oWzNdPXcodGhpcy5oWzNdLE1lKSx0aGlzLmhbNF09dyh0aGlzLmhbNF0sWmUpLHRoaXMuaFs1XT13KHRoaXMuaFs1XSxCKSx0aGlzLmhbNl09dyh0aGlzLmhbNl0sZyksdGhp''@;'; put 'put ''cy5oWzddPXcodGhpcy5oWzddLHkpfSxxLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKEope3JldHVybiJoZXgiPT09Sj9JLnRvSGV4MzIodGhpcy5oLCJiaWciKTpJLnNwbGl0MzIodGhpcy5oLCJiaWciKX19LDI3MjAzOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNjU4OTEp''@;'; put 'put ''O2NlLmV4cG9ydHM9SS5nZXRQcm90b3R5cGVPZnx8bnVsbH0sMjc2Mzc6KGNlLFgsYik9PntmdW5jdGlvbiBXKHEpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocSl9WC5pc0FycmF5PWZ1bmN0aW9uIEkocSl7cmV0dXJuIEFycmF5LmlzQXJyYXk/QXJyYXkuaXNBcnJh''@;'; put 'put ''eShxKToiW29iamVjdCBBcnJheV0iPT09VyhxKX0sWC5pc0Jvb2xlYW49ZnVuY3Rpb24gXyhxKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBxfSxYLmlzTnVsbD1mdW5jdGlvbiBwKHEpe3JldHVybiBudWxsPT09cX0sWC5pc051bGxPclVuZGVmaW5lZD1mdW5jdGlvbiBWKHEpe3JldHVybiBu''@;'; put 'put ''dWxsPT1xfSxYLmlzTnVtYmVyPWZ1bmN0aW9uIHcocSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBxfSxYLmlzU3RyaW5nPWZ1bmN0aW9uIFAocSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBxfSxYLmlzU3ltYm9sPWZ1bmN0aW9uIEYocSl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBxfSxYLmlz''@;'; put 'put ''VW5kZWZpbmVkPWZ1bmN0aW9uIFIocSl7cmV0dXJuIHZvaWQgMD09PXF9LFguaXNSZWdFeHA9ZnVuY3Rpb24geihxKXtyZXR1cm4iW29iamVjdCBSZWdFeHBdIj09PVcocSl9LFguaXNPYmplY3Q9ZnVuY3Rpb24gTihxKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHEmJm51bGwhPT1xfSxYLmlz''@;'; put 'put ''RGF0ZT1mdW5jdGlvbiBPKHEpe3JldHVybiJbb2JqZWN0IERhdGVdIj09PVcocSl9LFguaXNFcnJvcj1mdW5jdGlvbiBLKHEpe3JldHVybiJbb2JqZWN0IEVycm9yXSI9PT1XKHEpfHxxIGluc3RhbmNlb2YgRXJyb3J9LFguaXNGdW5jdGlvbj1mdW5jdGlvbiBaKHEpe3JldHVybiJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiBxfSxYLmlzUHJpbWl0aXZlPWZ1bmN0aW9uIFkocSl7cmV0dXJuIG51bGw9PT1xfHwiYm9vbGVhbiI9PXR5cGVvZiBxfHwibnVtYmVyIj09dHlwZW9mIHF8fCJzdHJpbmciPT10eXBlb2YgcXx8InN5bWJvbCI9PXR5cGVvZiBxfHx0eXBlb2YgcT4idSJ9LFguaXNCdWZmZXI9''@;'; put 'put ''Yig4MzgzOCkuQnVmZmVyLmlzQnVmZmVyfSwyNzgwOTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgXz1iKDI2NTUpLkJ1ZmZlcixwPWIoMTUzNDApO2Z1bmN0aW9uIFYodyxQLEYpe3cuY29weShQLEYpfWNlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB3KCl7KGZ1bmN0aW9uIEko''@;'; put 'put ''dyxQKXtpZighKHcgaW5zdGFuY2VvZiBQKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsdyksdGhpcy5oZWFkPW51bGwsdGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH1yZXR1cm4gdy5wcm90b3R5cGUucHVzaD1mdW5j''@;'; put 'put ''dGlvbihGKXt2YXIgUj17ZGF0YTpGLG5leHQ6bnVsbH07dGhpcy5sZW5ndGg+MD90aGlzLnRhaWwubmV4dD1SOnRoaXMuaGVhZD1SLHRoaXMudGFpbD1SLCsrdGhpcy5sZW5ndGh9LHcucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24oRil7dmFyIFI9e2RhdGE6RixuZXh0OnRoaXMuaGVhZH07''@;'; put 'put ''MD09PXRoaXMubGVuZ3RoJiYodGhpcy50YWlsPVIpLHRoaXMuaGVhZD1SLCsrdGhpcy5sZW5ndGh9LHcucHJvdG90eXBlLnNoaWZ0PWZ1bmN0aW9uKCl7aWYoMCE9PXRoaXMubGVuZ3RoKXt2YXIgRj10aGlzLmhlYWQuZGF0YTtyZXR1cm4gdGhpcy5oZWFkPTE9PT10aGlzLmxlbmd0aD90aGlz''@;'; put 'put ''LnRhaWw9bnVsbDp0aGlzLmhlYWQubmV4dCwtLXRoaXMubGVuZ3RoLEZ9fSx3LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfSx3LnByb3RvdHlwZS5qb2luPWZ1bmN0aW9uKEYpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1''@;'; put 'put ''cm4iIjtmb3IodmFyIFI9dGhpcy5oZWFkLHo9IiIrUi5kYXRhO1I9Ui5uZXh0Oyl6Kz1GK1IuZGF0YTtyZXR1cm4gen0sdy5wcm90b3R5cGUuY29uY2F0PWZ1bmN0aW9uKEYpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4gXy5hbGxvYygwKTtmb3IodmFyIFI9Xy5hbGxvY1Vuc2FmZShGPj4+''@;'; put 'put ''MCksej10aGlzLmhlYWQsTj0wO3o7KVYoei5kYXRhLFIsTiksTis9ei5kYXRhLmxlbmd0aCx6PXoubmV4dDtyZXR1cm4gUn0sd30oKSxwJiZwLmluc3BlY3QmJnAuaW5zcGVjdC5jdXN0b20mJihjZS5leHBvcnRzLnByb3RvdHlwZVtwLmluc3BlY3QuY3VzdG9tXT1mdW5jdGlvbigpe3ZhciB3''@;'; put 'put ''PXAuaW5zcGVjdCh7bGVuZ3RoOnRoaXMubGVuZ3RofSk7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZSsiICIrd30pfSwyNzk2NzpjZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgWD1UeXBlRXJyb3I7Y2UuZXhwb3J0cz1mdW5jdGlvbihiLEkpe2lmKGI8SSl0aHJvdyBuZXcgWCgiTm90IGVub3Vn''@;'; put 'put ''aCBhcmd1bWVudHMiKTtyZXR1cm4gYn19LDI4MDcwOihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtYLmY9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc30sMjgzNjc6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigzMzk2MyksXz1iKDU0MTIyKS5mLHA9YigzNjY3OCksVj1iKDMxMDgz''@;'; put 'put ''KSx3PWIoNDgxMDQpLFA9Yig0ODYzOSksRj1iKDE2MzYzKTtjZS5leHBvcnRzPWZ1bmN0aW9uKFIseil7dmFyIFksVyxxLGVlLEosTj1SLnRhcmdldCxPPVIuZ2xvYmFsLEs9Ui5zdGF0O2lmKFk9Tz9JOks/SVtOXXx8dyhOLHt9KTpJW05dJiZJW05dLnByb3RvdHlwZSlmb3IoVyBpbiB6KXtp''@;'; put 'put ''ZihlZT16W1ddLHE9Ui5kb250Q2FsbEdldFNldD8oSj1fKFksVykpJiZKLnZhbHVlOllbV10sIUYoTz9XOk4rKEs/Ii4iOiIjIikrVyxSLmZvcmNlZCkmJnZvaWQgMCE9PXEpe2lmKHR5cGVvZiBlZT09dHlwZW9mIHEpY29udGludWU7UChlZSxxKX0oUi5zaGFtfHxxJiZxLnNoYW0pJiZwKGVl''@;'; put 'put ''LCJzaGFtIiwhMCksVihZLFcsZWUsUil9fX0sMjg1NjQ6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJiZyIse21vbnRoczoiXHUwNDRmXHUwNDNkXHUwNDQzXHUwNDMwXHUwNDQwXHUwNDM4X1x1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0''@;'; put 'put ''MFx1MDQ0M1x1MDQzMFx1MDQ0MFx1MDQzOF9cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM4XHUwNDNiX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0NGVcdTA0M2RcdTA0MzhfXHUwNDRlXHUwNDNiXHUwNDM4X1x1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1''@;'; put 'put ''MDQ0MVx1MDQ0Ml9cdTA0NDFcdTA0MzVcdTA0M2ZcdTA0NDJcdTA0MzVcdTA0M2NcdTA0MzJcdTA0NDBcdTA0MzhfXHUwNDNlXHUwNDNhXHUwNDQyXHUwNDNlXHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4X1x1MDQzZFx1MDQzZVx1MDQzNVx1MDQzY1x1MDQzMlx1MDQ0MFx1MDQzOF9cdTA0MzRc''@;'; put 'put ''dTA0MzVcdTA0M2FcdTA0MzVcdTA0M2NcdTA0MzJcdTA0NDBcdTA0MzgiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDQ0Zlx1MDQzZFx1MDQ0M19cdTA0NDRcdTA0MzVcdTA0MzJfXHUwNDNjXHUwNDMwXHUwNDQwX1x1MDQzMFx1MDQzZlx1MDQ0MF9cdTA0M2NcdTA0MzBcdTA0MzlfXHUw''@;'; put 'put ''NDRlXHUwNDNkXHUwNDM4X1x1MDQ0ZVx1MDQzYlx1MDQzOF9cdTA0MzBcdTA0MzJcdTA0MzNfXHUwNDQxXHUwNDM1XHUwNDNmX1x1MDQzZVx1MDQzYVx1MDQ0Ml9cdTA0M2RcdTA0M2VcdTA0MzVfXHUwNDM0XHUwNDM1XHUwNDNhIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA0M2RcdTA0MzVc''@;'; put 'put ''dTA0MzRcdTA0MzVcdTA0M2JcdTA0NGZfXHUwNDNmXHUwNDNlXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDNkXHUwNDM4XHUwNDNhX1x1MDQzMlx1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzZFx1MDQzOFx1MDQzYV9cdTA0NDFcdTA0NDBcdTA0NGZcdTA0MzRcdTA0MzBfXHUwNDQ3''@;'; put 'put ''XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDRhXHUwNDQwXHUwNDQyXHUwNDRhXHUwNDNhX1x1MDQzZlx1MDQzNVx1MDQ0Mlx1MDQ0YVx1MDQzYV9cdTA0NDFcdTA0NGFcdTA0MzFcdTA0M2VcdTA0NDJcdTA0MzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNDNkXHUwNDM1XHUwNDM0X1x1''@;'; put 'put ''MDQzZlx1MDQzZVx1MDQzZF9cdTA0MzJcdTA0NDJcdTA0M2VfXHUwNDQxXHUwNDQwXHUwNDRmX1x1MDQ0N1x1MDQzNVx1MDQ0Ml9cdTA0M2ZcdTA0MzVcdTA0NDJfXHUwNDQxXHUwNDRhXHUwNDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0M2RcdTA0MzRfXHUwNDNmXHUwNDNkX1x1''@;'; put 'put ''MDQzMlx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDQyX1x1MDQzZlx1MDQ0Ml9cdTA0NDFcdTA0MzEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEg6''@;'; put 'put ''bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQxNFx1MDQzZFx1MDQzNVx1MDQ0MSBcdTA0MzJdIExUIixuZXh0RGF5OiJbXHUwNDIzXHUwNDQyXHUwNDQwXHUwNDM1IFx1MDQzMl0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA0MzJdIExU''@;'; put 'put ''IixsYXN0RGF5OiJbXHUwNDEyXHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMwIFx1MDQzMl0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpjYXNlIDM6Y2FzZSA2OnJldHVybiJbXHUwNDFjXHUwNDM4XHUwNDNkXHUwNDMwXHUwNDNiXHUwNDMwXHUwNDQy''@;'; put 'put ''XHUwNDMwXSBkZGRkIFtcdTA0MzJdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIltcdTA0MWNcdTA0MzhcdTA0M2RcdTA0MzBcdTA0M2JcdTA0MzhcdTA0NGZdIGRkZGQgW1x1MDQzMl0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUw''@;'; put 'put ''NDQxXHUwNDNiXHUwNDM1XHUwNDM0ICVzIixwYXN0OiJcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0MzRcdTA0MzggJXMiLHM6Ilx1MDQzZFx1MDQ0Zlx1MDQzYVx1MDQzZVx1MDQzYlx1MDQzYVx1MDQzZSBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzgiLHNzOiIlZCBc''@;'; put 'put ''dTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzgiLG06Ilx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzMCIsbW06IiVkIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzOCIsaDoiXHUwNDQ3XHUwNDMwXHUwNDQxIixoaDoiJWQgXHUwNDQ3''@;'; put 'put ''XHUwNDMwXHUwNDQxXHUwNDMwIixkOiJcdTA0MzRcdTA0MzVcdTA0M2QiLGRkOiIlZCBcdTA0MzRcdTA0MzVcdTA0M2RcdTA0MzAiLHc6Ilx1MDQ0MVx1MDQzNVx1MDQzNFx1MDQzY1x1MDQzOFx1MDQ0Nlx1MDQzMCIsd3c6IiVkIFx1MDQ0MVx1MDQzNVx1MDQzNFx1MDQzY1x1MDQzOFx1MDQ0''@;'; put 'put ''Nlx1MDQzOCIsTToiXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDQ2IixNTToiJWQgXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDQ2XHUwNDMwIix5OiJcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzAiLHl5OiIlZCBcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0''@;'; put 'put ''M2RcdTA0MzgifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0MzVcdTA0MzJ8XHUwNDM1XHUwNDNkfFx1MDQ0Mlx1MDQzOHxcdTA0MzJcdTA0Mzh8XHUwNDQwXHUwNDM4fFx1MDQzY1x1MDQzOCkvLG9yZGluYWw6ZnVuY3Rpb24ocCl7dmFyIFY9cCUxMCx3PXAlMTAwO3Jl''@;'; put 'put ''dHVybiAwPT09cD9wKyItXHUwNDM1XHUwNDMyIjowPT09dz9wKyItXHUwNDM1XHUwNDNkIjp3PjEwJiZ3PDIwP3ArIi1cdTA0NDJcdTA0MzgiOjE9PT1WP3ArIi1cdTA0MzJcdTA0MzgiOjI9PT1WP3ArIi1cdTA0NDBcdTA0MzgiOjc9PT1WfHw4PT09Vj9wKyItXHUwNDNjXHUwNDM4IjpwKyIt''@;'; put 'put ''XHUwNDQyXHUwNDM4In0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGIoOTc1ODYpKX0sMjkwNDI6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig4ODcyMyksXz1iKDMzNTU2KSxwPWIoMzEzNiksVj1iKDIzNDAxKSx3PWIoMzUyOTQpLFA9cC5hc3NlcnQsRj1iKDYwNTQxKSxSPWIoNDA0''@;'; put 'put ''ODQpO2Z1bmN0aW9uIHooTil7aWYoISh0aGlzIGluc3RhbmNlb2YgeikpcmV0dXJuIG5ldyB6KE4pOyJzdHJpbmciPT10eXBlb2YgTiYmKFAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFYsTiksIlVua25vd24gY3VydmUgIitOKSxOPVZbTl0pLE4gaW5zdGFuY2VvZiBW''@;'; put 'put ''LlByZXNldEN1cnZlJiYoTj17Y3VydmU6Tn0pLHRoaXMuY3VydmU9Ti5jdXJ2ZS5jdXJ2ZSx0aGlzLm49dGhpcy5jdXJ2ZS5uLHRoaXMubmg9dGhpcy5uLnVzaHJuKDEpLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5nPU4uY3VydmUuZyx0aGlzLmcucHJlY29tcHV0ZShOLmN1cnZlLm4uYml0''@;'; put 'put ''TGVuZ3RoKCkrMSksdGhpcy5oYXNoPU4uaGFzaHx8Ti5jdXJ2ZS5oYXNofWNlLmV4cG9ydHM9eix6LnByb3RvdHlwZS5rZXlQYWlyPWZ1bmN0aW9uKE8pe3JldHVybiBuZXcgRih0aGlzLE8pfSx6LnByb3RvdHlwZS5rZXlGcm9tUHJpdmF0ZT1mdW5jdGlvbihPLEspe3JldHVybiBGLmZyb21Q''@;'; put 'put ''cml2YXRlKHRoaXMsTyxLKX0sei5wcm90b3R5cGUua2V5RnJvbVB1YmxpYz1mdW5jdGlvbihPLEspe3JldHVybiBGLmZyb21QdWJsaWModGhpcyxPLEspfSx6LnByb3RvdHlwZS5nZW5LZXlQYWlyPWZ1bmN0aW9uKE8pe098fChPPXt9KTtmb3IodmFyIEs9bmV3IF8oe2hhc2g6dGhpcy5oYXNo''@;'; put 'put ''LHBlcnM6Ty5wZXJzLHBlcnNFbmM6Ty5wZXJzRW5jfHwidXRmOCIsZW50cm9weTpPLmVudHJvcHl8fHcodGhpcy5oYXNoLmhtYWNTdHJlbmd0aCksZW50cm9weUVuYzpPLmVudHJvcHkmJk8uZW50cm9weUVuY3x8InV0ZjgiLG5vbmNlOnRoaXMubi50b0FycmF5KCl9KSxaPXRoaXMubi5ieXRl''@;'; put 'put ''TGVuZ3RoKCksWT10aGlzLm4uc3ViKG5ldyBJKDIpKTs7KXt2YXIgVz1uZXcgSShLLmdlbmVyYXRlKFopKTtpZighKFcuY21wKFkpPjApKXJldHVybiBXLmlhZGRuKDEpLHRoaXMua2V5RnJvbVByaXZhdGUoVyl9fSx6LnByb3RvdHlwZS5fdHJ1bmNhdGVUb049ZnVuY3Rpb24oTyxLLFope3Zh''@;'; put 'put ''ciBZO2lmKEkuaXNCTihPKXx8Im51bWJlciI9PXR5cGVvZiBPKVk9KE89bmV3IEkoTywxNikpLmJ5dGVMZW5ndGgoKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgTylZPU8ubGVuZ3RoLE89bmV3IEkoTywxNik7ZWxzZXt2YXIgVz1PLnRvU3RyaW5nKCk7WT1XLmxlbmd0aCsxPj4+MSxPPW5l''@;'; put 'put ''dyBJKFcsMTYpfSJudW1iZXIiIT10eXBlb2YgWiYmKFo9OCpZKTt2YXIgcT1aLXRoaXMubi5iaXRMZW5ndGgoKTtyZXR1cm4gcT4wJiYoTz1PLnVzaHJuKHEpKSwhSyYmTy5jbXAodGhpcy5uKT49MD9PLnN1Yih0aGlzLm4pOk99LHoucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oTyxLLFosWSl7''@;'; put 'put ''aWYoIm9iamVjdCI9PXR5cGVvZiBaJiYoWT1aLFo9bnVsbCksWXx8KFk9e30pLCJzdHJpbmciIT10eXBlb2YgTyYmIm51bWJlciIhPXR5cGVvZiBPJiYhSS5pc0JOKE8pKXtQKCJvYmplY3QiPT10eXBlb2YgTyYmTyYmIm51bWJlciI9PXR5cGVvZiBPLmxlbmd0aCwiRXhwZWN0ZWQgbWVzc2Fn''@;'; put 'put ''ZSB0byBiZSBhbiBhcnJheS1saWtlLCBhIGhleCBzdHJpbmcsIG9yIGEgQk4gaW5zdGFuY2UiKSxQKE8ubGVuZ3RoPj4+MD09PU8ubGVuZ3RoKTtmb3IodmFyIFc9MDtXPE8ubGVuZ3RoO1crKylQKCgyNTUmT1tXXSk9PT1PW1ddKX1LPXRoaXMua2V5RnJvbVByaXZhdGUoSyxaKSxPPXRoaXMu''@;'; put 'put ''X3RydW5jYXRlVG9OKE8sITEsWS5tc2dCaXRMZW5ndGgpLFAoIU8uaXNOZWcoKSwiQ2FuIG5vdCBzaWduIGEgbmVnYXRpdmUgbWVzc2FnZSIpO3ZhciBxPXRoaXMubi5ieXRlTGVuZ3RoKCksZWU9Sy5nZXRQcml2YXRlKCkudG9BcnJheSgiYmUiLHEpLEo9Ty50b0FycmF5KCJiZSIscSk7UChu''@;'; put 'put ''ZXcgSShKKS5lcShPKSwiQ2FuIG5vdCBzaWduIG1lc3NhZ2UiKTtmb3IodmFyIHJlPW5ldyBfKHtoYXNoOnRoaXMuaGFzaCxlbnRyb3B5OmVlLG5vbmNlOkoscGVyczpZLnBlcnMscGVyc0VuYzpZLnBlcnNFbmN8fCJ1dGY4In0pLGllPXRoaXMubi5zdWIobmV3IEkoMSkpLHVlPTA7O3VlKysp''@;'; put 'put ''e3ZhciBnZT1ZLms/WS5rKHVlKTpuZXcgSShyZS5nZW5lcmF0ZSh0aGlzLm4uYnl0ZUxlbmd0aCgpKSk7aWYoISgoZ2U9dGhpcy5fdHJ1bmNhdGVUb04oZ2UsITApKS5jbXBuKDEpPD0wfHxnZS5jbXAoaWUpPj0wKSl7dmFyIF9lPXRoaXMuZy5tdWwoZ2UpO2lmKCFfZS5pc0luZmluaXR5KCkp''@;'; put 'put ''e3ZhciBUZT1fZS5nZXRYKCksTWU9VGUudW1vZCh0aGlzLm4pO2lmKDAhPT1NZS5jbXBuKDApKXt2YXIgWmU9Z2UuaW52bSh0aGlzLm4pLm11bChNZS5tdWwoSy5nZXRQcml2YXRlKCkpLmlhZGQoTykpO2lmKDAhPT0oWmU9WmUudW1vZCh0aGlzLm4pKS5jbXBuKDApKXt2YXIgQj0oX2UuZ2V0''@;'; put 'put ''WSgpLmlzT2RkKCk/MTowKXwoMCE9PVRlLmNtcChNZSk/MjowKTtyZXR1cm4gWS5jYW5vbmljYWwmJlplLmNtcCh0aGlzLm5oKT4wJiYoWmU9dGhpcy5uLnN1YihaZSksQl49MSksbmV3IFIoe3I6TWUsczpaZSxyZWNvdmVyeVBhcmFtOkJ9KX19fX19fSx6LnByb3RvdHlwZS52ZXJpZnk9ZnVu''@;'; put 'put ''Y3Rpb24oTyxLLFosWSxXKXtXfHwoVz17fSksTz10aGlzLl90cnVuY2F0ZVRvTihPLCExLFcubXNnQml0TGVuZ3RoKSxaPXRoaXMua2V5RnJvbVB1YmxpYyhaLFkpO3ZhciBxPShLPW5ldyBSKEssImhleCIpKS5yLGVlPUsucztpZihxLmNtcG4oMSk8MHx8cS5jbXAodGhpcy5uKT49MHx8ZWUu''@;'; put 'put ''Y21wbigxKTwwfHxlZS5jbXAodGhpcy5uKT49MClyZXR1cm4hMTt2YXIgdWUsSj1lZS5pbnZtKHRoaXMubikscmU9Si5tdWwoTykudW1vZCh0aGlzLm4pLGllPUoubXVsKHEpLnVtb2QodGhpcy5uKTtyZXR1cm4gdGhpcy5jdXJ2ZS5fbWF4d2VsbFRyaWNrPyEodWU9dGhpcy5nLmptdWxBZGQo''@;'; put 'put ''cmUsWi5nZXRQdWJsaWMoKSxpZSkpLmlzSW5maW5pdHkoKSYmdWUuZXFYVG9QKHEpOiEodWU9dGhpcy5nLm11bEFkZChyZSxaLmdldFB1YmxpYygpLGllKSkuaXNJbmZpbml0eSgpJiYwPT09dWUuZ2V0WCgpLnVtb2QodGhpcy5uKS5jbXAocSl9LHoucHJvdG90eXBlLnJlY292ZXJQdWJLZXk9''@;'; put 'put ''ZnVuY3Rpb24oTixPLEssWil7UCgoMyZLKT09PUssIlRoZSByZWNvdmVyeSBwYXJhbSBpcyBtb3JlIHRoYW4gdHdvIGJpdHMiKSxPPW5ldyBSKE8sWik7dmFyIFk9dGhpcy5uLFc9bmV3IEkoTikscT1PLnIsZWU9Ty5zLEo9MSZLLHJlPUs+PjE7aWYocS5jbXAodGhpcy5jdXJ2ZS5wLnVtb2Qo''@;'; put 'put ''dGhpcy5jdXJ2ZS5uKSk+PTAmJnJlKXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGZpbmQgc2VuY29uZCBrZXkgY2FuZGluYXRlIik7cT10aGlzLmN1cnZlLnBvaW50RnJvbVgocmU/cS5hZGQodGhpcy5jdXJ2ZS5uKTpxLEopO3ZhciBpZT1PLnIuaW52bShZKSx1ZT1ZLnN1YihXKS5tdWwo''@;'; put 'put ''aWUpLnVtb2QoWSksZ2U9ZWUubXVsKGllKS51bW9kKFkpO3JldHVybiB0aGlzLmcubXVsQWRkKHVlLHEsZ2UpfSx6LnByb3RvdHlwZS5nZXRLZXlSZWNvdmVyeVBhcmFtPWZ1bmN0aW9uKE4sTyxLLFope2lmKG51bGwhPT0oTz1uZXcgUihPLFopKS5yZWNvdmVyeVBhcmFtKXJldHVybiBPLnJl''@;'; put 'put ''Y292ZXJ5UGFyYW07Zm9yKHZhciBZPTA7WTw0O1krKyl7dmFyIFc7dHJ5e1c9dGhpcy5yZWNvdmVyUHViS2V5KE4sTyxZKX1jYXRjaHtjb250aW51ZX1pZihXLmVxKEspKXJldHVybiBZfXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGZpbmQgdmFsaWQgcmVjb3ZlcnkgZmFjdG9yIil9fSwy''@;'; put 'put ''OTI5MzpjZT0+e2Z1bmN0aW9uIFgoSSxfLHAsVix3LFAsRil7dHJ5e3ZhciBSPUlbUF0oRiksej1SLnZhbHVlfWNhdGNoKE4pe3JldHVybiB2b2lkIHAoTil9Ui5kb25lP18oeik6UHJvbWlzZS5yZXNvbHZlKHopLnRoZW4oVix3KX1jZS5leHBvcnRzPWZ1bmN0aW9uIGIoSSl7cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uKCl7dmFyIF89dGhpcyxwPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oVix3KXt2YXIgUD1JLmFwcGx5KF8scCk7ZnVuY3Rpb24gRih6KXtYKFAsVix3LEYsUiwibmV4dCIseil9ZnVuY3Rpb24gUih6KXtYKFAsVix3LEYsUiwidGhyb3ciLHopfUYodm9pZCAw''@;'; put 'put ''KX0pfX0sY2UuZXhwb3J0cy5fX2VzTW9kdWxlPSEwLGNlLmV4cG9ydHMuZGVmYXVsdD1jZS5leHBvcnRzfSwyOTQyMjooY2UsWCk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSShwLFYpe3RoaXMuZW5jb2Rlcj1wLHRoaXMuYWRkQk9NPSEwfWZ1bmN0aW9uIF8ocCxWKXt0aGlzLmRlY29kZXI9''@;'; put 'put ''cCx0aGlzLnBhc3M9ITEsdGhpcy5vcHRpb25zPVZ8fHt9fVguUHJlcGVuZEJPTT1JLEkucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmFkZEJPTSYmKHA9Ilx1ZmVmZiIrcCx0aGlzLmFkZEJPTT0hMSksdGhpcy5lbmNvZGVyLndyaXRlKHApfSxJLnByb3RvdHlwZS5l''@;'; put 'put ''bmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmNvZGVyLmVuZCgpfSxYLlN0cmlwQk9NPV8sXy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24ocCl7dmFyIFY9dGhpcy5kZWNvZGVyLndyaXRlKHApO3JldHVybiB0aGlzLnBhc3N8fCFWfHwoIlx1ZmVmZiI9PT1WWzBdJiYoVj1WLnNsaWNlKDEp''@;'; put 'put ''LCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9wdGlvbnMuc3RyaXBCT00mJnRoaXMub3B0aW9ucy5zdHJpcEJPTSgpKSx0aGlzLnBhc3M9ITApLFZ9LF8ucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29kZXIuZW5kKCl9fSwyOTcwODooY2UsWCxiKT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0IjtiKDMxMzUzKX0sMjk3NjA6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigyODM2NyksXz1iKDMxOTUwKSxwPWIoNzE3MSksVj1iKDM5MjA2KSx3PWIoNDMxOTUpLFA9YigzMzE2KTtJKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxhcml0eToxLGZvcmNlZDoxIT09W10udW5z''@;'; put 'put ''aGlmdCgwKXx8IWZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwibGVuZ3RoIix7d3JpdGFibGU6ITF9KS51bnNoaWZ0KCl9Y2F0Y2goTil7cmV0dXJuIE4gaW5zdGFuY2VvZiBUeXBlRXJyb3J9fSgpfSx7dW5zaGlmdDpmdW5jdGlvbihPKXt2YXIgSz1fKHRoaXMpLFo9''@;'; put 'put ''cChLKSxZPWFyZ3VtZW50cy5sZW5ndGg7aWYoWSl7UChaK1kpO2Zvcih2YXIgVz1aO1ctLTspe3ZhciBxPVcrWTtXIGluIEs/S1txXT1LW1ddOncoSyxxKX1mb3IodmFyIGVlPTA7ZWU8WTtlZSsrKUtbZWVdPWFyZ3VtZW50c1tlZV19cmV0dXJuIFYoSyxaK1kpfX0pfSwzMDE4NzpjZT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0IjtjZS5leHBvcnRzPXs0Mzc6ImNwNDM3Iiw3Mzc6ImNwNzM3Iiw3NzU6ImNwNzc1Iiw4NTA6ImNwODUwIiw4NTI6ImNwODUyIiw4NTU6ImNwODU1Iiw4NTY6ImNwODU2Iiw4NTc6ImNwODU3Iiw4NTg6ImNwODU4Iiw4NjA6ImNwODYwIiw4NjE6ImNwODYxIiw4NjI6ImNwODYy''@;'; put 'put ''Iiw4NjM6ImNwODYzIiw4NjQ6ImNwODY0Iiw4NjU6ImNwODY1Iiw4NjY6ImNwODY2Iiw4Njk6ImNwODY5Iiw4NzQ6IndpbmRvd3M4NzQiLDkyMjoiY3A5MjIiLDEwNDY6ImNwMTA0NiIsMTEyNDoiY3AxMTI0IiwxMTI1OiJjcDExMjUiLDExMjk6ImNwMTEyOSIsMTEzMzoiY3AxMTMzIiwxMTYx''@;'; put 'put ''OiJjcDExNjEiLDExNjI6ImNwMTE2MiIsMTE2MzoiY3AxMTYzIiwxMjUwOiJ3aW5kb3dzMTI1MCIsMTI1MToid2luZG93czEyNTEiLDEyNTI6IndpbmRvd3MxMjUyIiwxMjUzOiJ3aW5kb3dzMTI1MyIsMTI1NDoid2luZG93czEyNTQiLDEyNTU6IndpbmRvd3MxMjU1IiwxMjU2OiJ3aW5kb3dz''@;'; put 'put ''MTI1NiIsMTI1Nzoid2luZG93czEyNTciLDEyNTg6IndpbmRvd3MxMjU4IiwyODU5MToiaXNvODg1OTEiLDI4NTkyOiJpc284ODU5MiIsMjg1OTM6Imlzbzg4NTkzIiwyODU5NDoiaXNvODg1OTQiLDI4NTk1OiJpc284ODU5NSIsMjg1OTY6Imlzbzg4NTk2IiwyODU5NzoiaXNvODg1OTciLDI4''@;'; put 'put ''NTk4OiJpc284ODU5OCIsMjg1OTk6Imlzbzg4NTk5IiwyODYwMDoiaXNvODg1OTEwIiwyODYwMToiaXNvODg1OTExIiwyODYwMzoiaXNvODg1OTEzIiwyODYwNDoiaXNvODg1OTE0IiwyODYwNToiaXNvODg1OTE1IiwyODYwNjoiaXNvODg1OTE2Iix3aW5kb3dzODc0Ont0eXBlOiJfc2JjcyIs''@;'; put 'put ''Y2hhcnM6Ilx1MjBhY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAyNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTBcdTBlMDFcdTBlMDJcdTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBlMDhcdTBlMDlcdTBlMGFcdTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBlMTNcdTBlMTRcdTBlMTVc''@;'; put 'put ''dTBlMTZcdTBlMTdcdTBlMThcdTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRcdTBlMWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNcdTBlMjRcdTBlMjVcdTBlMjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVcdTBlMmZcdTBlMzBcdTBl''@;'; put 'put ''MzFcdTBlMzJcdTBlMzNcdTBlMzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBlMzlcdTBlM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlM2ZcdTBlNDBcdTBlNDFcdTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBlNGFcdTBlNGJcdTBlNGNc''@;'; put 'put ''dTBlNGRcdTBlNGVcdTBlNGZcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlcdTBlNWFcdTBlNWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSx3aW44NzQ6IndpbmRvd3M4NzQiLGNwODc0OiJ3aW5kb3dzODc0Iix3aW5kb3dzMTI1''@;'; put 'put ''MDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdWZmZmRcdTIwMWFcdWZmZmRcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNWFcdTAxNjRcdTAxN2RcdTAxNzlcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIw''@;'; put 'put ''MTRcdWZmZmRcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNWJcdTAxNjVcdTAxN2VcdTAxN2FceGEwXHUwMmM3XHUwMmQ4XHUwMTQxXHhhNFx1MDEwNFx4YTZceGE3XHhhOFx4YTlcdTAxNWVceGFiXHhhY1x4YWRceGFlXHUwMTdiXHhiMFx4YjFcdTAyZGJcdTAxNDJceGI0XHhiNVx4YjZceGI3XHhi''@;'; put 'put ''OFx1MDEwNVx1MDE1Zlx4YmJcdTAxM2RcdTAyZGRcdTAxM2VcdTAxN2NcdTAxNTRceGMxXHhjMlx1MDEwMlx4YzRcdTAxMzlcdTAxMDZceGM3XHUwMTBjXHhjOVx1MDExOFx4Y2JcdTAxMWFceGNkXHhjZVx1MDEwZVx1MDExMFx1MDE0M1x1MDE0N1x4ZDNceGQ0XHUwMTUwXHhkNlx4ZDdcdTAx''@;'; put 'put ''NThcdTAxNmVceGRhXHUwMTcwXHhkY1x4ZGRcdTAxNjJceGRmXHUwMTU1XHhlMVx4ZTJcdTAxMDNceGU0XHUwMTNhXHUwMTA3XHhlN1x1MDEwZFx4ZTlcdTAxMTlceGViXHUwMTFiXHhlZFx4ZWVcdTAxMGZcdTAxMTFcdTAxNDRcdTAxNDhceGYzXHhmNFx1MDE1MVx4ZjZceGY3XHUwMTU5XHUw''@;'; put 'put ''MTZmXHhmYVx1MDE3MVx4ZmNceGZkXHUwMTYzXHUwMmQ5In0sd2luMTI1MDoid2luZG93czEyNTAiLGNwMTI1MDoid2luZG93czEyNTAiLHdpbmRvd3MxMjUxOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQwMlx1MDQwM1x1MjAxYVx1MDQ1M1x1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MjBh''@;'; put 'put ''Y1x1MjAzMFx1MDQwOVx1MjAzOVx1MDQwYVx1MDQwY1x1MDQwYlx1MDQwZlx1MDQ1Mlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1MDQ1OVx1MjAzYVx1MDQ1YVx1MDQ1Y1x1MDQ1Ylx1MDQ1Zlx4YTBcdTA0MGVcdTA0NWVcdTA0MDhceGE0''@;'; put 'put ''XHUwNDkwXHhhNlx4YTdcdTA0MDFceGE5XHUwNDA0XHhhYlx4YWNceGFkXHhhZVx1MDQwN1x4YjBceGIxXHUwNDA2XHUwNDU2XHUwNDkxXHhiNVx4YjZceGI3XHUwNDUxXHUyMTE2XHUwNDU0XHhiYlx1MDQ1OFx1MDQwNVx1MDQ1NVx1MDQ1N1x1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQx''@;'; put 'put ''NFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1''@;'; put 'put ''MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0''@;'; put 'put ''Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0ZiJ9LHdpbjEyNTE6IndpbmRvd3MxMjUxIixjcDEyNTE6IndpbmRvd3MxMjUxIix3aW5kb3dzMTI1Mjp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBc''@;'; put 'put ''dTAxNjBcdTIwMzlcdTAxNTJcdWZmZmRcdTAxN2RcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNTNcdWZmZmRcdTAxN2VcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4''@;'; put 'put ''YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZceGQwXHhk''@;'; put 'put ''MVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZh''@;'; put 'put ''XHhmYlx4ZmNceGZkXHhmZVx4ZmYifSx3aW4xMjUyOiJ3aW5kb3dzMTI1MiIsY3AxMjUyOiJ3aW5kb3dzMTI1MiIsd2luZG93czEyNTM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHVmZmZk''@;'; put 'put ''XHUyMDM5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx1MDM4NVx1MDM4Nlx4YTNceGE0XHhhNVx4YTZceGE3XHhh''@;'; put 'put ''OFx4YTlcdWZmZmRceGFiXHhhY1x4YWRceGFlXHUyMDE1XHhiMFx4YjFceGIyXHhiM1x1MDM4NFx4YjVceGI2XHhiN1x1MDM4OFx1MDM4OVx1MDM4YVx4YmJcdTAzOGNceGJkXHUwMzhlXHUwMzhmXHUwMzkwXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4''@;'; put 'put ''XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHVmZmZkXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2FhXHUwM2FiXHUwM2FjXHUwM2FkXHUwM2FlXHUwM2FmXHUwM2IwXHUwM2IxXHUwM2IyXHUwM2IzXHUw''@;'; put 'put ''M2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MyXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHUwM2NhXHUwM2NiXHUwM2NjXHUwM2NkXHUwM2NlXHVmZmZk''@;'; put 'put ''In0sd2luMTI1Mzoid2luZG93czEyNTMiLGNwMTI1Mzoid2luZG93czEyNTMiLHdpbmRvd3MxMjU0Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1Mlx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1MDE2MVx1MjAzYVx1MDE1M1x1ZmZmZFx1ZmZmZFx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhh''@;'; put 'put ''ZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx1MDExZVx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4''@;'; put 'put ''ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x1MDEzMFx1MDE1ZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHUwMTFmXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHUwMTMxXHUw''@;'; put 'put ''MTVmXHhmZiJ9LHdpbjEyNTQ6IndpbmRvd3MxMjU0IixjcDEyNTQ6IndpbmRvd3MxMjU0Iix3aW5kb3dzMTI1NTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGEwXHhhMVx4YTJceGEzXHUyMGFhXHhhNVx4YTZceGE3XHhhOFx4YTlceGQ3XHhhYlx4''@;'; put 'put ''YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhmN1x4YmJceGJjXHhiZFx4YmVceGJmXHUwNWIwXHUwNWIxXHUwNWIyXHUwNWIzXHUwNWI0XHUwNWI1XHUwNWI2XHUwNWI3XHUwNWI4XHUwNWI5XHUwNWJhXHUwNWJiXHUwNWJjXHUwNWJkXHUw''@;'; put 'put ''NWJlXHUwNWJmXHUwNWMwXHUwNWMxXHUwNWMyXHUwNWMzXHUwNWYwXHUwNWYxXHUwNWYyXHUwNWYzXHUwNWY0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNWQwXHUwNWQxXHUwNWQyXHUwNWQzXHUwNWQ0XHUwNWQ1XHUwNWQ2XHUwNWQ3XHUwNWQ4XHUwNWQ5''@;'; put 'put ''XHUwNWRhXHUwNWRiXHUwNWRjXHUwNWRkXHUwNWRlXHUwNWRmXHUwNWUwXHUwNWUxXHUwNWUyXHUwNWUzXHUwNWU0XHUwNWU1XHUwNWU2XHUwNWU3XHUwNWU4XHUwNWU5XHUwNWVhXHVmZmZkXHVmZmZkXHUyMDBlXHUyMDBmXHVmZmZkIn0sd2luMTI1NToid2luZG93czEyNTUiLGNwMTI1NToi''@;'; put 'put ''d2luZG93czEyNTUiLHdpbmRvd3MxMjU2Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1MDY3ZVx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDY3OVx1MjAzOVx1MDE1Mlx1MDY4Nlx1MDY5OFx1MDY4OFx1MDZhZlx1MjAxOFx1MjAxOVx1MjAx''@;'; put 'put ''Y1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDZhOVx1MjEyMlx1MDY5MVx1MjAzYVx1MDE1M1x1MjAwY1x1MjAwZFx1MDZiYVx4YTBcdTA2MGNceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx1MDZiZVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1''@;'; put 'put ''XHhiNlx4YjdceGI4XHhiOVx1MDYxYlx4YmJceGJjXHhiZFx4YmVcdTA2MWZcdTA2YzFcdTA2MjFcdTA2MjJcdTA2MjNcdTA2MjRcdTA2MjVcdTA2MjZcdTA2MjdcdTA2MjhcdTA2MjlcdTA2MmFcdTA2MmJcdTA2MmNcdTA2MmRcdTA2MmVcdTA2MmZcdTA2MzBcdTA2MzFcdTA2MzJcdTA2MzNc''@;'; put 'put ''dTA2MzRcdTA2MzVcdTA2MzZceGQ3XHUwNjM3XHUwNjM4XHUwNjM5XHUwNjNhXHUwNjQwXHUwNjQxXHUwNjQyXHUwNjQzXHhlMFx1MDY0NFx4ZTJcdTA2NDVcdTA2NDZcdTA2NDdcdTA2NDhceGU3XHhlOFx4ZTlceGVhXHhlYlx1MDY0OVx1MDY0YVx4ZWVceGVmXHUwNjRiXHUwNjRjXHUwNjRk''@;'; put 'put ''XHUwNjRlXHhmNFx1MDY0Zlx1MDY1MFx4ZjdcdTA2NTFceGY5XHUwNjUyXHhmYlx4ZmNcdTIwMGVcdTIwMGZcdTA2ZDIifSx3aW4xMjU2OiJ3aW5kb3dzMTI1NiIsY3AxMjU2OiJ3aW5kb3dzMTI1NiIsd2luZG93czEyNTc6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHUyMDFh''@;'; put 'put ''XHVmZmZkXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHVmZmZkXHUyMDM5XHVmZmZkXHhhOFx1MDJjN1x4YjhcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRceGFmXHUwMmRiXHVm''@;'; put 'put ''ZmZkXHhhMFx1ZmZmZFx4YTJceGEzXHhhNFx1ZmZmZFx4YTZceGE3XHhkOFx4YTlcdTAxNTZceGFiXHhhY1x4YWRceGFlXHhjNlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhmOFx4YjlcdTAxNTdceGJiXHhiY1x4YmRceGJlXHhlNlx1MDEwNFx1MDEyZVx1MDEwMFx1MDEwNlx4''@;'; put 'put ''YzRceGM1XHUwMTE4XHUwMTEyXHUwMTBjXHhjOVx1MDE3OVx1MDExNlx1MDEyMlx1MDEzNlx1MDEyYVx1MDEzYlx1MDE2MFx1MDE0M1x1MDE0NVx4ZDNcdTAxNGNceGQ1XHhkNlx4ZDdcdTAxNzJcdTAxNDFcdTAxNWFcdTAxNmFceGRjXHUwMTdiXHUwMTdkXHhkZlx1MDEwNVx1MDEyZlx1MDEw''@;'; put 'put ''MVx1MDEwN1x4ZTRceGU1XHUwMTE5XHUwMTEzXHUwMTBkXHhlOVx1MDE3YVx1MDExN1x1MDEyM1x1MDEzN1x1MDEyYlx1MDEzY1x1MDE2MVx1MDE0NFx1MDE0Nlx4ZjNcdTAxNGRceGY1XHhmNlx4ZjdcdTAxNzNcdTAxNDJcdTAxNWJcdTAxNmJceGZjXHUwMTdjXHUwMTdlXHUwMmQ5In0sd2lu''@;'; put 'put ''MTI1Nzoid2luZG93czEyNTciLGNwMTI1Nzoid2luZG93czEyNTciLHdpbmRvd3MxMjU4Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1ZmZmZFx1MjAzOVx1MDE1Mlx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1ZmZmZFx1MjAzYVx1MDE1M1x1ZmZmZFx1ZmZmZFx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZc''@;'; put 'put ''eGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHUwMTAyXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JcdTAzMDBceGNkXHhjZVx4Y2ZcdTAxMTBceGQxXHUwMzA5XHhkM1x4ZDRcdTAxYTBceGQ2''@;'; put 'put ''XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMWFmXHUwMzAzXHhkZlx4ZTBceGUxXHhlMlx1MDEwM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHUwMzAxXHhlZFx4ZWVceGVmXHUwMTExXHhmMVx1MDMyM1x4ZjNceGY0XHUwMWExXHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhm''@;'; put 'put ''Y1x1MDFiMFx1MjBhYlx4ZmYifSx3aW4xMjU4OiJ3aW5kb3dzMTI1OCIsY3AxMjU4OiJ3aW5kb3dzMTI1OCIsaXNvODg1OTE6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkx''@;'; put 'put ''XHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFc''@;'; put 'put ''eGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZceGQwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHhlMFx4ZTFceGUyXHhlM1x4''@;'; put 'put ''ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYifSxjcDI4NTkxOiJpc284ODU5MSIsaXNvODg1OTI6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4''@;'; put 'put ''MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwMTA0XHUwMmQ4XHUwMTQxXHhhNFx1MDEzZFx1MDE1YVx4''@;'; put 'put ''YTdceGE4XHUwMTYwXHUwMTVlXHUwMTY0XHUwMTc5XHhhZFx1MDE3ZFx1MDE3Ylx4YjBcdTAxMDVcdTAyZGJcdTAxNDJceGI0XHUwMTNlXHUwMTViXHUwMmM3XHhiOFx1MDE2MVx1MDE1Zlx1MDE2NVx1MDE3YVx1MDJkZFx1MDE3ZVx1MDE3Y1x1MDE1NFx4YzFceGMyXHUwMTAyXHhjNFx1MDEz''@;'; put 'put ''OVx1MDEwNlx4YzdcdTAxMGNceGM5XHUwMTE4XHhjYlx1MDExYVx4Y2RceGNlXHUwMTBlXHUwMTEwXHUwMTQzXHUwMTQ3XHhkM1x4ZDRcdTAxNTBceGQ2XHhkN1x1MDE1OFx1MDE2ZVx4ZGFcdTAxNzBceGRjXHhkZFx1MDE2Mlx4ZGZcdTAxNTVceGUxXHhlMlx1MDEwM1x4ZTRcdTAxM2FcdTAx''@;'; put 'put ''MDdceGU3XHUwMTBkXHhlOVx1MDExOVx4ZWJcdTAxMWJceGVkXHhlZVx1MDEwZlx1MDExMVx1MDE0NFx1MDE0OFx4ZjNceGY0XHUwMTUxXHhmNlx4ZjdcdTAxNTlcdTAxNmZceGZhXHUwMTcxXHhmY1x4ZmRcdTAxNjNcdTAyZDkifSxjcDI4NTkyOiJpc284ODU5MiIsaXNvODg1OTM6e3R5cGU6''@;'; put 'put ''Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwMTI2XHUwMmQ4XHhhM1x4''@;'; put 'put ''YTRcdWZmZmRcdTAxMjRceGE3XHhhOFx1MDEzMFx1MDE1ZVx1MDExZVx1MDEzNFx4YWRcdWZmZmRcdTAxN2JceGIwXHUwMTI3XHhiMlx4YjNceGI0XHhiNVx1MDEyNVx4YjdceGI4XHUwMTMxXHUwMTVmXHUwMTFmXHUwMTM1XHhiZFx1ZmZmZFx1MDE3Y1x4YzBceGMxXHhjMlx1ZmZmZFx4YzRc''@;'; put 'put ''dTAxMGFcdTAxMDhceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdWZmZmRceGQxXHhkMlx4ZDNceGQ0XHUwMTIwXHhkNlx4ZDdcdTAxMWNceGQ5XHhkYVx4ZGJceGRjXHUwMTZjXHUwMTVjXHhkZlx4ZTBceGUxXHhlMlx1ZmZmZFx4ZTRcdTAxMGJcdTAxMDlceGU3XHhlOFx4''@;'; put 'put ''ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdWZmZmRceGYxXHhmMlx4ZjNceGY0XHUwMTIxXHhmNlx4ZjdcdTAxMWRceGY5XHhmYVx4ZmJceGZjXHUwMTZkXHUwMTVkXHUwMmQ5In0sY3AyODU5MzoiaXNvODg1OTMiLGlzbzg4NTk0Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4''@;'; put 'put ''Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MDEwNFx1MDEzOFx1MDE1Nlx4YTRcdTAxMjhcdTAxM2JceGE3XHhhOFx1''@;'; put 'put ''MDE2MFx1MDExMlx1MDEyMlx1MDE2Nlx4YWRcdTAxN2RceGFmXHhiMFx1MDEwNVx1MDJkYlx1MDE1N1x4YjRcdTAxMjlcdTAxM2NcdTAyYzdceGI4XHUwMTYxXHUwMTEzXHUwMTIzXHUwMTY3XHUwMTRhXHUwMTdlXHUwMTRiXHUwMTAwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHUwMTJlXHUw''@;'; put 'put ''MTBjXHhjOVx1MDExOFx4Y2JcdTAxMTZceGNkXHhjZVx1MDEyYVx1MDExMFx1MDE0NVx1MDE0Y1x1MDEzNlx4ZDRceGQ1XHhkNlx4ZDdceGQ4XHUwMTcyXHhkYVx4ZGJceGRjXHUwMTY4XHUwMTZhXHhkZlx1MDEwMVx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx1MDEyZlx1MDEwZFx4ZTlcdTAx''@;'; put 'put ''MTlceGViXHUwMTE3XHhlZFx4ZWVcdTAxMmJcdTAxMTFcdTAxNDZcdTAxNGRcdTAxMzdceGY0XHhmNVx4ZjZceGY3XHhmOFx1MDE3M1x4ZmFceGZiXHhmY1x1MDE2OVx1MDE2Ylx1MDJkOSJ9LGNwMjg1OTQ6Imlzbzg4NTk0Iixpc284ODU5NTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4''@;'; put 'put ''MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTA0MDFcdTA0MDJcdTA0MDNcdTA0MDRcdTA0MDVcdTA0MDZcdTA0''@;'; put 'put ''MDdcdTA0MDhcdTA0MDlcdTA0MGFcdTA0MGJcdTA0MGNceGFkXHUwNDBlXHUwNDBmXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUw''@;'; put 'put ''NDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNl''@;'; put 'put ''XHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHUyMTE2XHUwNDUxXHUwNDUyXHUwNDUzXHUwNDU0XHUwNDU1XHUwNDU2XHUwNDU3XHUwNDU4XHUwNDU5XHUw''@;'; put 'put ''NDVhXHUwNDViXHUwNDVjXHhhN1x1MDQ1ZVx1MDQ1ZiJ9LGNwMjg1OTU6Imlzbzg4NTk1Iixpc284ODU5Njp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4''@;'; put 'put ''OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdWZmZmRcdWZmZmRcdWZmZmRceGE0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNjBjXHhhZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDYxYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDYxZlx1ZmZmZFx1MDYyMVx1MDYyMlx1MDYyM1x1MDYyNFx1MDYyNVx1MDYyNlx1MDYyN1x1MDYyOFx1MDYyOVx1MDYyYVx1MDYyYlx1MDYyY1x1MDYyZFx1MDYyZVx1MDYyZlx1''@;'; put 'put ''MDYzMFx1MDYzMVx1MDYzMlx1MDYzM1x1MDYzNFx1MDYzNVx1MDYzNlx1MDYzN1x1MDYzOFx1MDYzOVx1MDYzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDY0MFx1MDY0MVx1MDY0Mlx1MDY0M1x1MDY0NFx1MDY0NVx1MDY0Nlx1MDY0N1x1MDY0OFx1MDY0OVx1MDY0YVx1MDY0''@;'; put 'put ''Ylx1MDY0Y1x1MDY0ZFx1MDY0ZVx1MDY0Zlx1MDY1MFx1MDY1MVx1MDY1Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LGNwMjg1OTY6Imlzbzg4NTk2Iixpc284ODU5Nzp7dHlwZToiX3NiY3Mi''@;'; put 'put ''LGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTIwMThcdTIwMTlceGEzXHUyMGFjXHUy''@;'; put 'put ''MGFmXHhhNlx4YTdceGE4XHhhOVx1MDM3YVx4YWJceGFjXHhhZFx1ZmZmZFx1MjAxNVx4YjBceGIxXHhiMlx4YjNcdTAzODRcdTAzODVcdTAzODZceGI3XHUwMzg4XHUwMzg5XHUwMzhhXHhiYlx1MDM4Y1x4YmRcdTAzOGVcdTAzOGZcdTAzOTBcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAz''@;'; put 'put ''OTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdWZmZmRcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdTAzYWFcdTAzYWJcdTAzYWNcdTAzYWRcdTAzYWVcdTAzYWZcdTAzYjBc''@;'; put 'put ''dTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzJcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdTAzY2FcdTAzY2JcdTAz''@;'; put 'put ''Y2NcdTAzY2RcdTAzY2VcdWZmZmQifSxjcDI4NTk3OiJpc284ODU5NyIsaXNvODg1OTg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZc''@;'; put 'put ''eDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHVmZmZkXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGQ3XHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhmN1x4YmJceGJjXHhiZFx4YmVcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMTdcdTA1ZDBcdTA1ZDFcdTA1ZDJcdTA1ZDNcdTA1ZDRcdTA1ZDVcdTA1ZDZcdTA1ZDdcdTA1ZDhcdTA1ZDlcdTA1ZGFcdTA1ZGJcdTA1ZGNcdTA1ZGRcdTA1ZGVcdTA1ZGZcdTA1ZTBcdTA1ZTFcdTA1ZTJcdTA1ZTNcdTA1ZTRcdTA1ZTVcdTA1''@;'; put 'put ''ZTZcdTA1ZTdcdTA1ZThcdTA1ZTlcdTA1ZWFcdWZmZmRcdWZmZmRcdTIwMGVcdTIwMGZcdWZmZmQifSxjcDI4NTk4OiJpc284ODU5OCIsaXNvODg1OTk6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRc''@;'; put 'put ''eDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4''@;'; put 'put ''YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdTAxMWVceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxMzBcdTAxNWVc''@;'; put 'put ''eGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1MDExZlx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDEzMVx1MDE1Zlx4ZmYifSxjcDI4NTk5OiJpc284ODU5OSIsaXNvODg1''@;'; put 'put ''OTEwOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MDEwNFx1''@;'; put 'put ''MDExMlx1MDEyMlx1MDEyYVx1MDEyOFx1MDEzNlx4YTdcdTAxM2JcdTAxMTBcdTAxNjBcdTAxNjZcdTAxN2RceGFkXHUwMTZhXHUwMTRhXHhiMFx1MDEwNVx1MDExM1x1MDEyM1x1MDEyYlx1MDEyOVx1MDEzN1x4YjdcdTAxM2NcdTAxMTFcdTAxNjFcdTAxNjdcdTAxN2VcdTIwMTVcdTAxNmJc''@;'; put 'put ''dTAxNGJcdTAxMDBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZcdTAxMmVcdTAxMGNceGM5XHUwMTE4XHhjYlx1MDExNlx4Y2RceGNlXHhjZlx4ZDBcdTAxNDVcdTAxNGNceGQzXHhkNFx4ZDVceGQ2XHUwMTY4XHhkOFx1MDE3Mlx4ZGFceGRiXHhkY1x4ZGRceGRlXHhkZlx1MDEwMVx4ZTFceGUy''@;'; put 'put ''XHhlM1x4ZTRceGU1XHhlNlx1MDEyZlx1MDEwZFx4ZTlcdTAxMTlceGViXHUwMTE3XHhlZFx4ZWVceGVmXHhmMFx1MDE0Nlx1MDE0ZFx4ZjNceGY0XHhmNVx4ZjZcdTAxNjlceGY4XHUwMTczXHhmYVx4ZmJceGZjXHhmZFx4ZmVcdTAxMzgifSxjcDI4NjAwOiJpc284ODU5MTAiLGlzbzg4NTkx''@;'; put 'put ''MTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTBlMDFcdTBl''@;'; put 'put ''MDJcdTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBlMDhcdTBlMDlcdTBlMGFcdTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBlMTNcdTBlMTRcdTBlMTVcdTBlMTZcdTBlMTdcdTBlMThcdTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRc''@;'; put 'put ''dTBlMWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNcdTBlMjRcdTBlMjVcdTBlMjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVcdTBlMmZcdTBlMzBcdTBlMzFcdTBlMzJcdTBlMzNcdTBlMzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBl''@;'; put 'put ''MzlcdTBlM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlM2ZcdTBlNDBcdTBlNDFcdTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBlNGFcdTBlNGJcdTBlNGNcdTBlNGRcdTBlNGVcdTBlNGZcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRc''@;'; put 'put ''dTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlcdTBlNWFcdTBlNWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSxjcDI4NjAxOiJpc284ODU5MTEiLGlzbzg4NTkxMzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4''@;'; put 'put ''OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTIwMWRceGEyXHhhM1x4YTRcdTIwMWVceGE2XHhhN1x4ZDhceGE5XHUwMTU2XHhhYlx4YWNceGFkXHhhZVx4YzZceGIwXHhiMVx4YjJc''@;'; put 'put ''eGIzXHUyMDFjXHhiNVx4YjZceGI3XHhmOFx4YjlcdTAxNTdceGJiXHhiY1x4YmRceGJlXHhlNlx1MDEwNFx1MDEyZVx1MDEwMFx1MDEwNlx4YzRceGM1XHUwMTE4XHUwMTEyXHUwMTBjXHhjOVx1MDE3OVx1MDExNlx1MDEyMlx1MDEzNlx1MDEyYVx1MDEzYlx1MDE2MFx1MDE0M1x1MDE0NVx4''@;'; put 'put ''ZDNcdTAxNGNceGQ1XHhkNlx4ZDdcdTAxNzJcdTAxNDFcdTAxNWFcdTAxNmFceGRjXHUwMTdiXHUwMTdkXHhkZlx1MDEwNVx1MDEyZlx1MDEwMVx1MDEwN1x4ZTRceGU1XHUwMTE5XHUwMTEzXHUwMTBkXHhlOVx1MDE3YVx1MDExN1x1MDEyM1x1MDEzN1x1MDEyYlx1MDEzY1x1MDE2MVx1MDE0''@;'; put 'put ''NFx1MDE0Nlx4ZjNcdTAxNGRceGY1XHhmNlx4ZjdcdTAxNzNcdTAxNDJcdTAxNWJcdTAxNmJceGZjXHUwMTdjXHUwMTdlXHUyMDE5In0sY3AyODYwMzoiaXNvODg1OTEzIixpc284ODU5MTQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4''@;'; put 'put ''XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUxZTAyXHUxZTAzXHhhM1x1MDEwYVx1MDEwYlx1MWUwYVx4YTdcdTFlODBceGE5XHUxZTgyXHUxZTBiXHUxZWYyXHhh''@;'; put 'put ''ZFx4YWVcdTAxNzhcdTFlMWVcdTFlMWZcdTAxMjBcdTAxMjFcdTFlNDBcdTFlNDFceGI2XHUxZTU2XHUxZTgxXHUxZTU3XHUxZTgzXHUxZTYwXHUxZWYzXHUxZTg0XHUxZTg1XHUxZTYxXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNl''@;'; put 'put ''XHhjZlx1MDE3NFx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx1MWU2YVx4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx1MDE3Nlx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHUwMTc1XHhmMVx4ZjJceGYzXHhmNFx4ZjVc''@;'; put 'put ''eGY2XHUxZTZiXHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHUwMTc3XHhmZiJ9LGNwMjg2MDQ6Imlzbzg4NTkxNCIsaXNvODg1OTE1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkw''@;'; put 'put ''XHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx4YTFceGEyXHhhM1x1MjBhY1x4YTVcdTAxNjBceGE3XHUwMTYxXHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNcdTAxN2RceGI1XHhiNlx4Yjdc''@;'; put 'put ''dTAxN2VceGI5XHhiYVx4YmJcdTAxNTJcdTAxNTNcdTAxNzhceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4''@;'; put 'put ''ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiJ9LGNwMjg2MDU6Imlzbzg4NTkxNSIsaXNvODg1OTE2Ont0''@;'; put 'put ''eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MDEwNFx1MDEwNVx1''@;'; put 'put ''MDE0MVx1MjBhY1x1MjAxZVx1MDE2MFx4YTdcdTAxNjFceGE5XHUwMjE4XHhhYlx1MDE3OVx4YWRcdTAxN2FcdTAxN2JceGIwXHhiMVx1MDEwY1x1MDE0Mlx1MDE3ZFx1MjAxZFx4YjZceGI3XHUwMTdlXHUwMTBkXHUwMjE5XHhiYlx1MDE1Mlx1MDE1M1x1MDE3OFx1MDE3Y1x4YzBceGMxXHhj''@;'; put 'put ''Mlx1MDEwMlx4YzRcdTAxMDZceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHUwMTEwXHUwMTQzXHhkMlx4ZDNceGQ0XHUwMTUwXHhkNlx1MDE1YVx1MDE3MFx4ZDlceGRhXHhkYlx4ZGNcdTAxMThcdTAyMWFceGRmXHhlMFx4ZTFceGUyXHUwMTAzXHhlNFx1MDEwN1x4''@;'; put 'put ''ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdTAxMTFcdTAxNDRceGYyXHhmM1x4ZjRcdTAxNTFceGY2XHUwMTViXHUwMTcxXHhmOVx4ZmFceGZiXHhmY1x1MDExOVx1MDIxYlx4ZmYifSxjcDI4NjA2OiJpc284ODU5MTYiLGNwNDM3Ont0eXBlOiJfc2JjcyIsY2hhcnM6''@;'; put 'put ''Ilx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4YTJceGEzXHhhNVx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJh''@;'; put 'put ''XHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUz''@;'; put 'put ''Y1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4''@;'; put 'put ''ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBc''@;'; put 'put ''eGEwIn0saWJtNDM3OiJjcDQzNyIsY3NpYm00Mzc6ImNwNDM3IixjcDczNzp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAz''@;'; put 'put ''YTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzJcdTAzYzRc''@;'; put 'put ''dTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1''@;'; put 'put ''NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYzlcdTAzYWNcdTAzYWRc''@;'; put 'put ''dTAzYWVcdTAzY2FcdTAzYWZcdTAzY2NcdTAzY2RcdTAzY2JcdTAzY2VcdTAzODZcdTAzODhcdTAzODlcdTAzOGFcdTAzOGNcdTAzOGVcdTAzOGZceGIxXHUyMjY1XHUyMjY0XHUwM2FhXHUwM2FiXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxp''@;'; put 'put ''Ym03Mzc6ImNwNzM3Iixjc2libTczNzoiY3A3MzciLGNwNzc1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDEwNlx4ZmNceGU5XHUwMTAxXHhlNFx1MDEyM1x4ZTVcdTAxMDdcdTAxNDJcdTAxMTNcdTAxNTZcdTAxNTdcdTAxMmJcdTAxNzlceGM0XHhjNVx4YzlceGU2XHhjNlx1MDE0ZFx4ZjZc''@;'; put 'put ''dTAxMjJceGEyXHUwMTVhXHUwMTViXHhkNlx4ZGNceGY4XHhhM1x4ZDhceGQ3XHhhNFx1MDEwMFx1MDEyYVx4ZjNcdTAxN2JcdTAxN2NcdTAxN2FcdTIwMWRceGE2XHhhOVx4YWVceGFjXHhiZFx4YmNcdTAxNDFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MDEwNFx1''@;'; put 'put ''MDEwY1x1MDExOFx1MDExNlx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MDEyZVx1MDE2MFx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MDE3Mlx1MDE2YVx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MDE3ZFx1MDEwNVx1MDEw''@;'; put 'put ''ZFx1MDExOVx1MDExN1x1MDEyZlx1MDE2MVx1MDE3M1x1MDE2Ylx1MDE3ZVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx4ZDNceGRmXHUwMTRjXHUwMTQzXHhmNVx4ZDVceGI1XHUwMTQ0XHUwMTM2XHUwMTM3XHUwMTNiXHUwMTNjXHUwMTQ2XHUwMTEyXHUwMTQ1''@;'; put 'put ''XHUyMDE5XHhhZFx4YjFcdTIwMWNceGJlXHhiNlx4YTdceGY3XHUyMDFlXHhiMFx1MjIxOVx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIn0saWJtNzc1OiJjcDc3NSIsY3NpYm03NzU6ImNwNzc1IixjcDg1MDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBc''@;'; put 'put ''eGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGY4XHhhM1x4ZDhceGQ3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHhhZVx4YWNceGJkXHhiY1x4YTFceGFi''@;'; put 'put ''XHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHhjMFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x4ZTNceGMzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUy''@;'; put 'put ''NTUwXHUyNTZjXHhhNFx4ZjBceGQwXHhjYVx4Y2JceGM4XHUwMTMxXHhjZFx4Y2VceGNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHhhNlx4Y2NcdTI1ODBceGQzXHhkZlx4ZDRceGQyXHhmNVx4ZDVceGI1XHhmZVx4ZGVceGRhXHhkYlx4ZDlceGZkXHhkZFx4YWZceGI0XHhhZFx4YjFcdTIw''@;'; put 'put ''MTdceGJlXHhiNlx4YTdceGY3XHhiOFx4YjBceGE4XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAifSxpYm04NTA6ImNwODUwIixjc2libTg1MDoiY3A4NTAiLGNwODUyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGU0XHUwMTZmXHUwMTA3XHhlN1x1MDE0Mlx4ZWJc''@;'; put 'put ''dTAxNTBcdTAxNTFceGVlXHUwMTc5XHhjNFx1MDEwNlx4YzlcdTAxMzlcdTAxM2FceGY0XHhmNlx1MDEzZFx1MDEzZVx1MDE1YVx1MDE1Ylx4ZDZceGRjXHUwMTY0XHUwMTY1XHUwMTQxXHhkN1x1MDEwZFx4ZTFceGVkXHhmM1x4ZmFcdTAxMDRcdTAxMDVcdTAxN2RcdTAxN2VcdTAxMThcdTAx''@;'; put 'put ''MTlceGFjXHUwMTdhXHUwMTBjXHUwMTVmXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRceGMxXHhjMlx1MDExYVx1MDE1ZVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MDE3Ylx1MDE3Y1x1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MDEw''@;'; put 'put ''Mlx1MDEwM1x1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRcdTAxMTFcdTAxMTBcdTAxMGVceGNiXHUwMTBmXHUwMTQ3XHhjZFx4Y2VcdTAxMWJcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTAxNjJcdTAxNmVcdTI1ODBceGQzXHhkZlx4ZDRcdTAxNDNcdTAx''@;'; put 'put ''NDRcdTAxNDhcdTAxNjBcdTAxNjFcdTAxNTRceGRhXHUwMTU1XHUwMTcwXHhmZFx4ZGRcdTAxNjNceGI0XHhhZFx1MDJkZFx1MDJkYlx1MDJjN1x1MDJkOFx4YTdceGY3XHhiOFx4YjBceGE4XHUwMmQ5XHUwMTcxXHUwMTU4XHUwMTU5XHUyNWEwXHhhMCJ9LGlibTg1MjoiY3A4NTIiLGNzaWJt''@;'; put 'put ''ODUyOiJjcDg1MiIsY3A4NTU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDUyXHUwNDAyXHUwNDUzXHUwNDAzXHUwNDUxXHUwNDAxXHUwNDU0XHUwNDA0XHUwNDU1XHUwNDA1XHUwNDU2XHUwNDA2XHUwNDU3XHUwNDA3XHUwNDU4XHUwNDA4XHUwNDU5XHUwNDA5XHUwNDVhXHUwNDBhXHUwNDVi''@;'; put 'put ''XHUwNDBiXHUwNDVjXHUwNDBjXHUwNDVlXHUwNDBlXHUwNDVmXHUwNDBmXHUwNDRlXHUwNDJlXHUwNDRhXHUwNDJhXHUwNDMwXHUwNDEwXHUwNDMxXHUwNDExXHUwNDQ2XHUwNDI2XHUwNDM0XHUwNDE0XHUwNDM1XHUwNDE1XHUwNDQ0XHUwNDI0XHUwNDMzXHUwNDEzXHhhYlx4YmJcdTI1OTFc''@;'; put 'put ''dTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTA0NDVcdTA0MjVcdTA0MzhcdTA0MThcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTA0MzlcdTA0MTlcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTA0M2FcdTA0MWFcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1''@;'; put 'put ''NjBcdTI1NTBcdTI1NmNceGE0XHUwNDNiXHUwNDFiXHUwNDNjXHUwNDFjXHUwNDNkXHUwNDFkXHUwNDNlXHUwNDFlXHUwNDNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUwNDFmXHUwNDRmXHUyNTgwXHUwNDJmXHUwNDQwXHUwNDIwXHUwNDQxXHUwNDIxXHUwNDQyXHUwNDIyXHUwNDQzXHUw''@;'; put 'put ''NDIzXHUwNDM2XHUwNDE2XHUwNDMyXHUwNDEyXHUwNDRjXHUwNDJjXHUyMTE2XHhhZFx1MDQ0Ylx1MDQyYlx1MDQzN1x1MDQxN1x1MDQ0OFx1MDQyOFx1MDQ0ZFx1MDQyZFx1MDQ0OVx1MDQyOVx1MDQ0N1x1MDQyN1x4YTdcdTI1YTBceGEwIn0saWJtODU1OiJjcDg1NSIsY3NpYm04NTU6ImNw''@;'; put 'put ''ODU1IixjcDg1Njp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA1ZDBcdTA1ZDFcdTA1ZDJcdTA1ZDNcdTA1ZDRcdTA1ZDVcdTA1ZDZcdTA1ZDdcdTA1ZDhcdTA1ZDlcdTA1ZGFcdTA1ZGJcdTA1ZGNcdTA1ZGRcdTA1ZGVcdTA1ZGZcdTA1ZTBcdTA1ZTFcdTA1ZTJcdTA1ZTNcdTA1ZTRcdTA1ZTVc''@;'; put 'put ''dTA1ZTZcdTA1ZTdcdTA1ZThcdTA1ZTlcdTA1ZWFcdWZmZmRceGEzXHVmZmZkXHhkN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YWVceGFjXHhiZFx4YmNcdWZmZmRceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1''@;'; put 'put ''MjUyNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1ZmZmZFx1ZmZmZFx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHVmZmZkXHUyNTgwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhiNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx4YWZceGI0XHhhZFx4YjFcdTIwMTdceGJlXHhiNlx4YTdceGY3XHhiOFx4YjBceGE4XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAifSxpYm04NTY6ImNwODU2Iixjc2libTg1NjoiY3A4NTYiLGNwODU3Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGU0XHhl''@;'; put 'put ''MFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVcdTAxMzFceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHUwMTMwXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTAxNWVcdTAxNWZceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFcdTAxMWVcdTAxMWZceGJmXHhhZVx4YWNceGJk''@;'; put 'put ''XHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHhjMFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x4ZTNceGMzXHUyNTVhXHUyNTU0XHUyNTY5XHUy''@;'; put 'put ''NTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx4YmFceGFhXHhjYVx4Y2JceGM4XHVmZmZkXHhjZFx4Y2VceGNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHhhNlx4Y2NcdTI1ODBceGQzXHhkZlx4ZDRceGQyXHhmNVx4ZDVceGI1XHVmZmZkXHhkN1x4ZGFceGRiXHhkOVx4ZWNceGZmXHhhZlx4''@;'; put 'put ''YjRceGFkXHhiMVx1ZmZmZFx4YmVceGI2XHhhN1x4ZjdceGI4XHhiMFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCJ9LGlibTg1NzoiY3A4NTciLGNzaWJtODU3OiJjcDg1NyIsY3A4NTg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdc''@;'; put 'put ''eGVhXHhlYlx4ZThceGVmXHhlZVx4ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhmOFx4YTNceGQ4XHhkN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx4YWVceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1''@;'; put 'put ''OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRceGMxXHhjMlx4YzBceGE5XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHhhMlx4YTVcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NceGUzXHhjM1x1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2''@;'; put 'put ''Y1x4YTRceGYwXHhkMFx4Y2FceGNiXHhjOFx1MjBhY1x4Y2RceGNlXHhjZlx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx4YTZceGNjXHUyNTgwXHhkM1x4ZGZceGQ0XHhkMlx4ZjVceGQ1XHhiNVx4ZmVceGRlXHhkYVx4ZGJceGQ5XHhmZFx4ZGRceGFmXHhiNFx4YWRceGIxXHUyMDE3XHhiZVx4''@;'; put 'put ''YjZceGE3XHhmN1x4YjhceGIwXHhhOFx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIn0saWJtODU4OiJjcDg1OCIsY3NpYm04NTg6ImNwODU4IixjcDg2MDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlM1x4ZTBceGMxXHhlN1x4ZWFceGNhXHhlOFx4Y2RceGQ0XHhl''@;'; put 'put ''Y1x4YzNceGMyXHhjOVx4YzBceGM4XHhmNFx4ZjVceGYyXHhkYVx4ZjlceGNjXHhkNVx4ZGNceGEyXHhhM1x4ZDlcdTIwYTdceGQzXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHhkMlx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1''@;'; put 'put ''MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2''@;'; put 'put ''N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0''@;'; put 'put ''XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0saWJtODYwOiJjcDg2MCIsY3NpYm04NjA6ImNwODYwIixjcDg2MTp7dHlwZToiX3NiY3MiLGNo''@;'; put 'put ''YXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZDBceGYwXHhkZVx4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGZlXHhmYlx4ZGRceGZkXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTIwYTdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhjMVx4Y2RceGQz''@;'; put 'put ''XHhkYVx4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBc''@;'; put 'put ''dTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAz''@;'; put 'put ''YjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUy''@;'; put 'put ''NWEwXHhhMCJ9LGlibTg2MToiY3A4NjEiLGNzaWJtODYxOiJjcDg2MSIsY3A4NjI6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNWQwXHUwNWQxXHUwNWQyXHUwNWQzXHUwNWQ0XHUwNWQ1XHUwNWQ2XHUwNWQ3XHUwNWQ4XHUwNWQ5XHUwNWRhXHUwNWRiXHUwNWRjXHUwNWRkXHUwNWRlXHUwNWRm''@;'; put 'put ''XHUwNWUwXHUwNWUxXHUwNWUyXHUwNWUzXHUwNWU0XHUwNWU1XHUwNWU2XHUwNWU3XHUwNWU4XHUwNWU5XHUwNWVhXHhhMlx4YTNceGE1XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUy''@;'; put 'put ''NTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYw''@;'; put 'put ''XHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZc''@;'; put 'put ''dTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxpYm04NjI6ImNwODYyIixjc2libTg2MjoiY3A4NjIiLGNwODYz''@;'; put 'put ''Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGMyXHhlMFx4YjZceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVcdTIwMTdceGMwXHhhN1x4YzlceGM4XHhjYVx4ZjRceGNiXHhjZlx4ZmJceGY5XHhhNFx4ZDRceGRjXHhhMlx4YTNceGQ5XHhkYlx1MDE5Mlx4YTZceGI0XHhm''@;'; put 'put ''M1x4ZmFceGE4XHhiOFx4YjNceGFmXHhjZVx1MjMxMFx4YWNceGJkXHhiY1x4YmVceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1''@;'; put 'put ''MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4''@;'; put 'put ''Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1''@;'; put 'put ''MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0saWJtODYzOiJjcDg2MyIsY3NpYm04NjM6ImNwODYzIixjcDg2NDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZc''@;'; put 'put ''eDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyRcdTA2NmEmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhiMFx4YjdcdTIyMTlcdTIyMWFcdTI1''@;'; put 'put ''OTJcdTI1MDBcdTI1MDJcdTI1M2NcdTI1MjRcdTI1MmNcdTI1MWNcdTI1MzRcdTI1MTBcdTI1MGNcdTI1MTRcdTI1MThcdTAzYjJcdTIyMWVcdTAzYzZceGIxXHhiZFx4YmNcdTIyNDhceGFiXHhiYlx1ZmVmN1x1ZmVmOFx1ZmZmZFx1ZmZmZFx1ZmVmYlx1ZmVmY1x1ZmZmZFx4YTBceGFkXHVm''@;'; put 'put ''ZTgyXHhhM1x4YTRcdWZlODRcdWZmZmRcdWZmZmRcdWZlOGVcdWZlOGZcdWZlOTVcdWZlOTlcdTA2MGNcdWZlOWRcdWZlYTFcdWZlYTVcdTA2NjBcdTA2NjFcdTA2NjJcdTA2NjNcdTA2NjRcdTA2NjVcdTA2NjZcdTA2NjdcdTA2NjhcdTA2NjlcdWZlZDFcdTA2MWJcdWZlYjFcdWZlYjVcdWZl''@;'; put 'put ''YjlcdTA2MWZceGEyXHVmZTgwXHVmZTgxXHVmZTgzXHVmZTg1XHVmZWNhXHVmZThiXHVmZThkXHVmZTkxXHVmZTkzXHVmZTk3XHVmZTliXHVmZTlmXHVmZWEzXHVmZWE3XHVmZWE5XHVmZWFiXHVmZWFkXHVmZWFmXHVmZWIzXHVmZWI3XHVmZWJiXHVmZWJmXHVmZWMxXHVmZWM1XHVmZWNiXHVm''@;'; put 'put ''ZWNmXHhhNlx4YWNceGY3XHhkN1x1ZmVjOVx1MDY0MFx1ZmVkM1x1ZmVkN1x1ZmVkYlx1ZmVkZlx1ZmVlM1x1ZmVlN1x1ZmVlYlx1ZmVlZFx1ZmVlZlx1ZmVmM1x1ZmViZFx1ZmVjY1x1ZmVjZVx1ZmVjZFx1ZmVlMVx1ZmU3ZFx1MDY1MVx1ZmVlNVx1ZmVlOVx1ZmVlY1x1ZmVmMFx1ZmVmMlx1''@;'; put 'put ''ZmVkMFx1ZmVkNVx1ZmVmNVx1ZmVmNlx1ZmVkZFx1ZmVkOVx1ZmVmMVx1MjVhMFx1ZmZmZCJ9LGlibTg2NDoiY3A4NjQiLGNzaWJtODY0OiJjcDg2NCIsY3A4NjU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhl''@;'; put 'put ''ZVx4ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhmOFx4YTNceGQ4XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGE0XHUyNTkxXHUyNTkyXHUyNTkz''@;'; put 'put ''XHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUy''@;'; put 'put ''NTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAz''@;'; put 'put ''YTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxpYm04NjU6ImNwODY1Iixjc2libTg2NToiY3A4NjUiLGNwODY2Ont0eXBlOiJf''@;'; put 'put ''c2JjcyIsY2hhcnM6Ilx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1''@;'; put 'put ''MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUy''@;'; put 'put ''NFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1''@;'; put 'put ''MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0''@;'; put 'put ''Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MDQwMVx1MDQ1MVx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwZVx1MDQ1ZVx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMTE2XHhhNFx1MjVhMFx4YTAifSxpYm04NjY6ImNwODY2Iixjc2libTg2NjoiY3A4NjYiLGNwODY5Ont0eXBlOiJfc2Jj''@;'; put 'put ''cyIsY2hhcnM6Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDM4Nlx1ZmZmZFx4YjdceGFjXHhhNlx1MjAxOFx1MjAxOVx1MDM4OFx1MjAxNVx1MDM4OVx1MDM4YVx1MDNhYVx1MDM4Y1x1ZmZmZFx1ZmZmZFx1MDM4ZVx1MDNhYlx4YTlcdTAzOGZceGIyXHhiM1x1MDNh''@;'; put 'put ''Y1x4YTNcdTAzYWRcdTAzYWVcdTAzYWZcdTAzY2FcdTAzOTBcdTAzY2NcdTAzY2RcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdceGJkXHUwMzk4XHUwMzk5XHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTAzOWFcdTAzOWJcdTAzOWNcdTAz''@;'; put 'put ''OWRcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTAzOWVcdTAzOWZcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTAzYTBcdTAzYTFcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdc''@;'; put 'put ''dTAzYThcdTAzYTlcdTAzYjFcdTAzYjJcdTAzYjNcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTAzYjRcdTAzYjVcdTI1ODBcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzJcdTAzYzRcdTAz''@;'; put 'put ''ODRceGFkXHhiMVx1MDNjNVx1MDNjNlx1MDNjN1x4YTdcdTAzYzhcdTAzODVceGIwXHhhOFx1MDNjOVx1MDNjYlx1MDNiMFx1MDNjZVx1MjVhMFx4YTAifSxpYm04Njk6ImNwODY5Iixjc2libTg2OToiY3A4NjkiLGNwOTIyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNc''@;'; put 'put ''eDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4''@;'; put 'put ''YWRceGFlXHUyMDNlXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdTAxNjBceGQxXHhkMlx4ZDNceGQ0XHhk''@;'; put 'put ''NVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHUwMTdkXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdTAxNjFceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZk''@;'; put 'put ''XHUwMTdlXHhmZiJ9LGlibTkyMjoiY3A5MjIiLGNzaWJtOTIyOiJjcDkyMiIsY3AxMDQ2Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1ZmU4OFx4ZDdceGY3XHVmOGY2XHVmOGY1XHVmOGY0XHVmOGY3XHVmZTcxXHg4OFx1MjVhMFx1MjUwMlx1MjUwMFx1MjUxMFx1MjUwY1x1MjUxNFx1MjUxOFx1''@;'; put 'put ''ZmU3OVx1ZmU3Ylx1ZmU3ZFx1ZmU3Zlx1ZmU3N1x1ZmU4YVx1ZmVmMFx1ZmVmM1x1ZmVmMlx1ZmVjZVx1ZmVjZlx1ZmVkMFx1ZmVmNlx1ZmVmOFx1ZmVmYVx1ZmVmY1x4YTBcdWY4ZmFcdWY4ZjlcdWY4ZjhceGE0XHVmOGZiXHVmZThiXHVmZTkxXHVmZTk3XHVmZTliXHVmZTlmXHVmZWEzXHUw''@;'; put 'put ''NjBjXHhhZFx1ZmVhN1x1ZmViM1x1MDY2MFx1MDY2MVx1MDY2Mlx1MDY2M1x1MDY2NFx1MDY2NVx1MDY2Nlx1MDY2N1x1MDY2OFx1MDY2OVx1ZmViN1x1MDYxYlx1ZmViYlx1ZmViZlx1ZmVjYVx1MDYxZlx1ZmVjYlx1MDYyMVx1MDYyMlx1MDYyM1x1MDYyNFx1MDYyNVx1MDYyNlx1MDYyN1x1''@;'; put 'put ''MDYyOFx1MDYyOVx1MDYyYVx1MDYyYlx1MDYyY1x1MDYyZFx1MDYyZVx1MDYyZlx1MDYzMFx1MDYzMVx1MDYzMlx1MDYzM1x1MDYzNFx1MDYzNVx1MDYzNlx1MDYzN1x1ZmVjN1x1MDYzOVx1MDYzYVx1ZmVjY1x1ZmU4Mlx1ZmU4NFx1ZmU4ZVx1ZmVkM1x1MDY0MFx1MDY0MVx1MDY0Mlx1MDY0''@;'; put 'put ''M1x1MDY0NFx1MDY0NVx1MDY0Nlx1MDY0N1x1MDY0OFx1MDY0OVx1MDY0YVx1MDY0Ylx1MDY0Y1x1MDY0ZFx1MDY0ZVx1MDY0Zlx1MDY1MFx1MDY1MVx1MDY1Mlx1ZmVkN1x1ZmVkYlx1ZmVkZlx1ZjhmY1x1ZmVmNVx1ZmVmN1x1ZmVmOVx1ZmVmYlx1ZmVlM1x1ZmVlN1x1ZmVlY1x1ZmVlOVx1''@;'; put 'put ''ZmZmZCJ9LGlibTEwNDY6ImNwMTA0NiIsY3NpYm0xMDQ2OiJjcDEwNDYiLGNwMTEyNDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4''@;'; put 'put ''OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTA0MDFcdTA0MDJcdTA0OTBcdTA0MDRcdTA0MDVcdTA0MDZcdTA0MDdcdTA0MDhcdTA0MDlcdTA0MGFcdTA0MGJcdTA0MGNceGFkXHUwNDBlXHUwNDBmXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUw''@;'; put 'put ''NDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMx''@;'; put 'put ''XHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUw''@;'; put 'put ''NDRkXHUwNDRlXHUwNDRmXHUyMTE2XHUwNDUxXHUwNDUyXHUwNDkxXHUwNDU0XHUwNDU1XHUwNDU2XHUwNDU3XHUwNDU4XHUwNDU5XHUwNDVhXHUwNDViXHUwNDVjXHhhN1x1MDQ1ZVx1MDQ1ZiJ9LGlibTExMjQ6ImNwMTEyNCIsY3NpYm0xMTI0OiJjcDExMjQiLGNwMTEyNTp7dHlwZToiX3Ni''@;'; put 'put ''Y3MiLGNoYXJzOiJcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0''@;'; put 'put ''MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRc''@;'; put 'put ''dTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1''@;'; put 'put ''NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJc''@;'; put 'put ''dTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdTA0MDFcdTA0NTFcdTA0OTBcdTA0OTFcdTA0MDRcdTA0NTRcdTA0MDZcdTA0NTZcdTA0MDdcdTA0NTdceGI3XHUyMjFhXHUyMTE2XHhhNFx1MjVhMFx4YTAifSxpYm0xMTI1OiJjcDExMjUiLGNzaWJtMTEyNToiY3AxMTI1IixjcDExMjk6e3R5cGU6''@;'; put 'put ''Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJceGEzXHhhNFx4''@;'; put 'put ''YTVceGE2XHhhN1x1MDE1M1x4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHUwMTc4XHhiNVx4YjZceGI3XHUwMTUyXHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx1MDEwMlx4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHUw''@;'; put 'put ''MzAwXHhjZFx4Y2VceGNmXHUwMTEwXHhkMVx1MDMwOVx4ZDNceGQ0XHUwMWEwXHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x1MDFhZlx1MDMwM1x4ZGZceGUwXHhlMVx4ZTJcdTAxMDNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx1MDMwMVx4ZWRceGVlXHhlZlx1MDExMVx4''@;'; put 'put ''ZjFcdTAzMjNceGYzXHhmNFx1MDFhMVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNcdTAxYjBcdTIwYWJceGZmIn0saWJtMTEyOToiY3AxMTI5Iixjc2libTExMjk6ImNwMTEyOSIsY3AxMTMzOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3''@;'; put 'put ''XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MGU4MVx1MGU4Mlx1MGU4NFx1MGU4N1x1MGU4OFx1MGVhYVx1MGU4YVx1MGU4ZFx1MGU5NFx1MGU5NVx1MGU5''@;'; put 'put ''Nlx1MGU5N1x1MGU5OVx1MGU5YVx1MGU5Ylx1MGU5Y1x1MGU5ZFx1MGU5ZVx1MGU5Zlx1MGVhMVx1MGVhMlx1MGVhM1x1MGVhNVx1MGVhN1x1MGVhYlx1MGVhZFx1MGVhZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGVhZlx1MGViMFx1MGViMlx1MGViM1x1MGViNFx1MGViNVx1MGViNlx1MGViN1x1''@;'; put 'put ''MGViOFx1MGViOVx1MGViY1x1MGViMVx1MGViYlx1MGViZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGVjMFx1MGVjMVx1MGVjMlx1MGVjM1x1MGVjNFx1MGVjOFx1MGVjOVx1MGVjYVx1MGVjYlx1MGVjY1x1MGVjZFx1MGVjNlx1ZmZmZFx1MGVkY1x1MGVkZFx1MjBhZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGVkMFx1MGVkMVx1MGVkMlx1MGVkM1x1MGVkNFx1MGVkNVx1MGVkNlx1MGVkN1x1MGVkOFx1MGVkOVx1ZmZmZFx1ZmZmZFx4YTJceGFjXHhhNlx1''@;'; put 'put ''ZmZmZCJ9LGlibTExMzM6ImNwMTEzMyIsY3NpYm0xMTMzOiJjcDExMzMiLGNwMTE2MTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlNDhcdTBlMDFcdTBlMDJcdTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBlMDhcdTBlMDlcdTBlMGFc''@;'; put 'put ''dTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBlMTNcdTBlMTRcdTBlMTVcdTBlMTZcdTBlMTdcdTBlMThcdTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRcdTBlMWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNcdTBlMjRcdTBlMjVcdTBl''@;'; put 'put ''MjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVcdTBlMmZcdTBlMzBcdTBlMzFcdTBlMzJcdTBlMzNcdTBlMzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBlMzlcdTBlM2FcdTBlNDlcdTBlNGFcdTBlNGJcdTIwYWNcdTBlM2ZcdTBlNDBcdTBlNDFc''@;'; put 'put ''dTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBlNGFcdTBlNGJcdTBlNGNcdTBlNGRcdTBlNGVcdTBlNGZcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlcdTBlNWFcdTBlNWJceGEyXHhhY1x4''@;'; put 'put ''YTZceGEwIn0saWJtMTE2MToiY3AxMTYxIixjc2libTExNjE6ImNwMTE2MSIsY3AxMTYyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x4ODFceDgyXHg4M1x4ODRcdTIwMjZceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx1MjAxOFx1MjAxOVx1MjAxY1x1''@;'; put 'put ''MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUx''@;'; put 'put ''Mlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1''@;'; put 'put ''MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0''@;'; put 'put ''OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx1MGU1YVx1MGU1Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LGlibTExNjI6ImNwMTE2MiIsY3NpYm0xMTYyOiJj''@;'; put 'put ''cDExNjIiLGNwMTE2Mzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4''@;'; put 'put ''YTBceGExXHhhMlx4YTNcdTIwYWNceGE1XHhhNlx4YTdcdTAxNTNceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x1MDE3OFx4YjVceGI2XHhiN1x1MDE1Mlx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJcdTAxMDJceGM0XHhjNVx4YzZc''@;'; put 'put ''eGM3XHhjOFx4YzlceGNhXHhjYlx1MDMwMFx4Y2RceGNlXHhjZlx1MDExMFx4ZDFcdTAzMDlceGQzXHhkNFx1MDFhMFx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxYWZcdTAzMDNceGRmXHhlMFx4ZTFceGUyXHUwMTAzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJcdTAz''@;'; put 'put ''MDFceGVkXHhlZVx4ZWZcdTAxMTFceGYxXHUwMzIzXHhmM1x4ZjRcdTAxYTFceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHUwMWIwXHUyMGFiXHhmZiJ9LGlibTExNjM6ImNwMTE2MyIsY3NpYm0xMTYzOiJjcDExNjMiLG1hY2Nyb2F0aWFuOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRc''@;'; put 'put ''eGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx1''@;'; put 'put ''MDE2MFx1MjEyMlx4YjRceGE4XHUyMjYwXHUwMTdkXHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVcdTIyMDZceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwMTYxXHUyMjJiXHhhYVx4YmFcdTIxMjZcdTAxN2VceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUwMTA2XHhhYlx1MDEw''@;'; put 'put ''Y1x1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTAxMTBcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHVmZmZkXHhhOVx1MjA0NFx4YTRcdTIwMzlcdTIwM2FceGM2XHhiYlx1MjAxM1x4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHUwMTA3XHhjMVx1''@;'; put 'put ''MDEwZFx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdTAxMTFceGQyXHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUwMmRjXHhhZlx1MDNjMFx4Y2JcdTAyZGFceGI4XHhjYVx4ZTZcdTAyYzcifSxtYWNjeXJpbGxpYzp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0MTBcdTA0MTFcdTA0MTJc''@;'; put 'put ''dTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0''@;'; put 'put ''MmVcdTA0MmZcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx1MDQwNlx4YWVceGE5XHUyMTIyXHUwNDAyXHUwNDUyXHUyMjYwXHUwNDAzXHUwNDUzXHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx1MDQ1Nlx4YjVcdTIyMDJcdTA0MDhcdTA0MDRcdTA0NTRcdTA0MDdcdTA0NTdcdTA0MDlc''@;'; put 'put ''dTA0NTlcdTA0MGFcdTA0NWFcdTA0NThcdTA0MDVceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHUwNDBiXHUwNDViXHUwNDBjXHUwNDVjXHUwNDU1XHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjAxZVx1MDQwZVx1MDQ1ZVx1''@;'; put 'put ''MDQwZlx1MDQ1Zlx1MjExNlx1MDQwMVx1MDQ1MVx1MDQ0Zlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0''@;'; put 'put ''NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx4YTQifSxtYWNncmVlazp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHhiOVx4YjJceGM5XHhiM1x4ZDZceGRjXHUwMzg1XHhlMFx4ZTJceGU0XHUwMzg0XHhhOFx4ZTdceGU5XHhlOFx4ZWFc''@;'; put 'put ''eGViXHhhM1x1MjEyMlx4ZWVceGVmXHUyMDIyXHhiZFx1MjAzMFx4ZjRceGY2XHhhNlx4YWRceGY5XHhmYlx4ZmNcdTIwMjBcdTAzOTNcdTAzOTRcdTAzOThcdTAzOWJcdTAzOWVcdTAzYTBceGRmXHhhZVx4YTlcdTAzYTNcdTAzYWFceGE3XHUyMjYwXHhiMFx1MDM4N1x1MDM5MVx4YjFcdTIy''@;'; put 'put ''NjRcdTIyNjVceGE1XHUwMzkyXHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk5XHUwMzlhXHUwMzljXHUwM2E2XHUwM2FiXHUwM2E4XHUwM2E5XHUwM2FjXHUwMzlkXHhhY1x1MDM5Zlx1MDNhMVx1MjI0OFx1MDNhNFx4YWJceGJiXHUyMDI2XHhhMFx1MDNhNVx1MDNhN1x1MDM4Nlx1MDM4OFx1MDE1''@;'; put 'put ''M1x1MjAxM1x1MjAxNVx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTAzODlcdTAzOGFcdTAzOGNcdTAzOGVcdTAzYWRcdTAzYWVcdTAzYWZcdTAzY2NcdTAzOGZcdTAzY2RcdTAzYjFcdTAzYjJcdTAzYzhcdTAzYjRcdTAzYjVcdTAzYzZcdTAzYjNcdTAzYjdcdTAzYjlcdTAzYmVcdTAz''@;'; put 'put ''YmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmZcdTAzYzBcdTAzY2VcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYjhcdTAzYzlcdTAzYzJcdTAzYzdcdTAzYzVcdTAzYjZcdTAzY2FcdTAzY2JcdTAzOTBcdTAzYjBcdWZmZmQifSxtYWNpY2VsYW5kOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRceGM1''@;'; put 'put ''XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHhkZFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUy''@;'; put 'put ''MTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMw''@;'; put 'put ''XHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRceGQwXHhmMFx4ZGVceGZlXHhmZFx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2Nc''@;'; put 'put ''eGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyJ9LG1hY3JvbWFuOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJc''@;'; put 'put ''eGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFl''@;'; put 'put ''XHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAx''@;'; put 'put ''NFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUyMDQ0XHhhNFx1MjAzOVx1MjAzYVx1ZmIwMVx1ZmIwMlx1MjAyMVx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRh''@;'; put 'put ''XHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyJ9LG1hY3JvbWFuaWE6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5''@;'; put 'put ''XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHUwMTAyXHUwMTVlXHUyMjFlXHhiMVx1MjI2NFx1MjI2''@;'; put 'put ''NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZcdTAxMDNcdTAxNWZceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIw''@;'; put 'put ''MWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRcdTIwMzlcdTIwM2FcdTAxNjJcdTAxNjNcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHUw''@;'; put 'put ''MTMxXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzcifSxtYWN0aGFpOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YWJceGJiXHUyMDI2XHVmODhjXHVmODhmXHVmODkyXHVmODk1XHVmODk4XHVmODhiXHVmODhlXHVmODkxXHVmODk0XHVmODk3''@;'; put 'put ''XHUyMDFjXHUyMDFkXHVmODk5XHVmZmZkXHUyMDIyXHVmODg0XHVmODg5XHVmODg1XHVmODg2XHVmODg3XHVmODg4XHVmODhhXHVmODhkXHVmODkwXHVmODkzXHVmODk2XHUyMDE4XHUyMDE5XHVmZmZkXHhhMFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUw''@;'; put 'put ''OFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1''@;'; put 'put ''MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmVmZlx1MjAwYlx1MjAxM1x1MjAxNFx1MGUz''@;'; put 'put ''Zlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MjEyMlx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx4YWVceGE5''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0sbWFjdHVya2lzaDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4''@;'; put 'put ''ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUy''@;'; put 'put ''MTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MDExZVx1MDExZlx1MDEzMFx1''@;'; put 'put ''MDEzMVx1MDE1ZVx1MDE1Zlx1MjAyMVx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdWZmZmRcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJk''@;'; put 'put ''Ylx1MDJjNyJ9LG1hY3VrcmFpbmU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUw''@;'; put 'put ''NDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUyMDIwXHhiMFx1MDQ5MFx4YTNceGE3XHUyMDIyXHhiNlx1MDQwNlx4YWVceGE5XHUyMTIyXHUwNDAyXHUwNDUyXHUyMjYwXHUwNDAzXHUwNDUzXHUyMjFlXHhiMVx1''@;'; put 'put ''MjI2NFx1MjI2NVx1MDQ1Nlx4YjVcdTA0OTFcdTA0MDhcdTA0MDRcdTA0NTRcdTA0MDdcdTA0NTdcdTA0MDlcdTA0NTlcdTA0MGFcdTA0NWFcdTA0NThcdTA0MDVceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHUwNDBiXHUwNDViXHUwNDBjXHUwNDVjXHUw''@;'; put 'put ''NDU1XHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjAxZVx1MDQwZVx1MDQ1ZVx1MDQwZlx1MDQ1Zlx1MjExNlx1MDQwMVx1MDQ1MVx1MDQ0Zlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1''@;'; put 'put ''MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx4YTQifSxrb2k4cjp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTI1MDBcdTI1MDJc''@;'; put 'put ''dTI1MGNcdTI1MTBcdTI1MTRcdTI1MThcdTI1MWNcdTI1MjRcdTI1MmNcdTI1MzRcdTI1M2NcdTI1ODBcdTI1ODRcdTI1ODhcdTI1OGNcdTI1OTBcdTI1OTFcdTI1OTJcdTI1OTNcdTIzMjBcdTI1YTBcdTIyMTlcdTIyMWFcdTIyNDhcdTIyNjRcdTIyNjVceGEwXHUyMzIxXHhiMFx4YjJceGI3''@;'; put 'put ''XHhmN1x1MjU1MFx1MjU1MVx1MjU1Mlx1MDQ1MVx1MjU1M1x1MjU1NFx1MjU1NVx1MjU1Nlx1MjU1N1x1MjU1OFx1MjU1OVx1MjU1YVx1MjU1Ylx1MjU1Y1x1MjU1ZFx1MjU1ZVx1MjU1Zlx1MjU2MFx1MjU2MVx1MDQwMVx1MjU2Mlx1MjU2M1x1MjU2NFx1MjU2NVx1MjU2Nlx1MjU2N1x1MjU2''@;'; put 'put ''OFx1MjU2OVx1MjU2YVx1MjU2Ylx1MjU2Y1x4YTlcdTA0NGVcdTA0MzBcdTA0MzFcdTA0NDZcdTA0MzRcdTA0MzVcdTA0NDRcdTA0MzNcdTA0NDVcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NGZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0''@;'; put 'put ''MzZcdTA0MzJcdTA0NGNcdTA0NGJcdTA0MzdcdTA0NDhcdTA0NGRcdTA0NDlcdTA0NDdcdTA0NGFcdTA0MmVcdTA0MTBcdTA0MTFcdTA0MjZcdTA0MTRcdTA0MTVcdTA0MjRcdTA0MTNcdTA0MjVcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MmZc''@;'; put 'put ''dTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MTZcdTA0MTJcdTA0MmNcdTA0MmJcdTA0MTdcdTA0MjhcdTA0MmRcdTA0MjlcdTA0MjdcdTA0MmEifSxrb2k4dTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MTRcdTI1MThcdTI1MWNcdTI1MjRcdTI1''@;'; put 'put ''MmNcdTI1MzRcdTI1M2NcdTI1ODBcdTI1ODRcdTI1ODhcdTI1OGNcdTI1OTBcdTI1OTFcdTI1OTJcdTI1OTNcdTIzMjBcdTI1YTBcdTIyMTlcdTIyMWFcdTIyNDhcdTIyNjRcdTIyNjVceGEwXHUyMzIxXHhiMFx4YjJceGI3XHhmN1x1MjU1MFx1MjU1MVx1MjU1Mlx1MDQ1MVx1MDQ1NFx1MjU1''@;'; put 'put ''NFx1MDQ1Nlx1MDQ1N1x1MjU1N1x1MjU1OFx1MjU1OVx1MjU1YVx1MjU1Ylx1MDQ5MVx1MjU1ZFx1MjU1ZVx1MjU1Zlx1MjU2MFx1MjU2MVx1MDQwMVx1MDQwNFx1MjU2M1x1MDQwNlx1MDQwN1x1MjU2Nlx1MjU2N1x1MjU2OFx1MjU2OVx1MjU2YVx1MDQ5MFx1MjU2Y1x4YTlcdTA0NGVcdTA0''@;'; put 'put ''MzBcdTA0MzFcdTA0NDZcdTA0MzRcdTA0MzVcdTA0NDRcdTA0MzNcdTA0NDVcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NGZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0MzZcdTA0MzJcdTA0NGNcdTA0NGJcdTA0MzdcdTA0NDhcdTA0NGRc''@;'; put 'put ''dTA0NDlcdTA0NDdcdTA0NGFcdTA0MmVcdTA0MTBcdTA0MTFcdTA0MjZcdTA0MTRcdTA0MTVcdTA0MjRcdTA0MTNcdTA0MjVcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MmZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MTZcdTA0MTJcdTA0''@;'; put 'put ''MmNcdTA0MmJcdTA0MTdcdTA0MjhcdTA0MmRcdTA0MjlcdTA0MjdcdTA0MmEifSxrb2k4cnU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyNTAwXHUyNTAyXHUyNTBjXHUyNTEwXHUyNTE0XHUyNTE4XHUyNTFjXHUyNTI0XHUyNTJjXHUyNTM0XHUyNTNjXHUyNTgwXHUyNTg0XHUyNTg4XHUyNThj''@;'; put 'put ''XHUyNTkwXHUyNTkxXHUyNTkyXHUyNTkzXHUyMzIwXHUyNWEwXHUyMjE5XHUyMjFhXHUyMjQ4XHUyMjY0XHUyMjY1XHhhMFx1MjMyMVx4YjBceGIyXHhiN1x4ZjdcdTI1NTBcdTI1NTFcdTI1NTJcdTA0NTFcdTA0NTRcdTI1NTRcdTA0NTZcdTA0NTdcdTI1NTdcdTI1NThcdTI1NTlcdTI1NWFc''@;'; put 'put ''dTI1NWJcdTA0OTFcdTA0NWVcdTI1NWVcdTI1NWZcdTI1NjBcdTI1NjFcdTA0MDFcdTA0MDRcdTI1NjNcdTA0MDZcdTA0MDdcdTI1NjZcdTI1NjdcdTI1NjhcdTI1NjlcdTI1NmFcdTA0OTBcdTA0MGVceGE5XHUwNDRlXHUwNDMwXHUwNDMxXHUwNDQ2XHUwNDM0XHUwNDM1XHUwNDQ0XHUwNDMz''@;'; put 'put ''XHUwNDQ1XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDRmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDM2XHUwNDMyXHUwNDRjXHUwNDRiXHUwNDM3XHUwNDQ4XHUwNDRkXHUwNDQ5XHUwNDQ3XHUwNDRhXHUwNDJlXHUwNDEwXHUwNDExXHUw''@;'; put 'put ''NDI2XHUwNDE0XHUwNDE1XHUwNDI0XHUwNDEzXHUwNDI1XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDJmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDE2XHUwNDEyXHUwNDJjXHUwNDJiXHUwNDE3XHUwNDI4XHUwNDJkXHUwNDI5XHUwNDI3''@;'; put 'put ''XHUwNDJhIn0sa29pOHQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDliXHUwNDkzXHUyMDFhXHUwNDkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHUwNGIzXHUyMDM5XHUwNGIyXHUwNGI3XHUwNGI2XHVmZmZkXHUwNDlhXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUy''@;'; put 'put ''MDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNGVmXHUwNGVlXHUwNDUxXHhhNFx1MDRlM1x4YTZceGE3XHVmZmZkXHVmZmZkXHVmZmZkXHhhYlx4YWNceGFkXHhhZVx1ZmZmZFx4YjBceGIxXHhiMlx1MDQwMVx1''@;'; put 'put ''ZmZmZFx1MDRlMlx4YjZceGI3XHVmZmZkXHUyMTE2XHVmZmZkXHhiYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTlcdTA0NGVcdTA0MzBcdTA0MzFcdTA0NDZcdTA0MzRcdTA0MzVcdTA0NDRcdTA0MzNcdTA0NDVcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2Zc''@;'; put 'put ''dTA0NGZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0MzZcdTA0MzJcdTA0NGNcdTA0NGJcdTA0MzdcdTA0NDhcdTA0NGRcdTA0NDlcdTA0NDdcdTA0NGFcdTA0MmVcdTA0MTBcdTA0MTFcdTA0MjZcdTA0MTRcdTA0MTVcdTA0MjRcdTA0MTNcdTA0MjVcdTA0MThcdTA0MTlcdTA0MWFcdTA0''@;'; put 'put ''MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MmZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MTZcdTA0MTJcdTA0MmNcdTA0MmJcdTA0MTdcdTA0MjhcdTA0MmRcdTA0MjlcdTA0MjdcdTA0MmEifSxhcm1zY2lpODp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgz''@;'; put 'put ''XHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdWZmZmRcdTA1ODdcdTA1ODkpKFx4YmJceGFiXHUyMDE0Llx1MDU1ZCwtXHUwNThh''@;'; put 'put ''XHUyMDI2XHUwNTVjXHUwNTViXHUwNTVlXHUwNTMxXHUwNTYxXHUwNTMyXHUwNTYyXHUwNTMzXHUwNTYzXHUwNTM0XHUwNTY0XHUwNTM1XHUwNTY1XHUwNTM2XHUwNTY2XHUwNTM3XHUwNTY3XHUwNTM4XHUwNTY4XHUwNTM5XHUwNTY5XHUwNTNhXHUwNTZhXHUwNTNiXHUwNTZiXHUwNTNjXHUw''@;'; put 'put ''NTZjXHUwNTNkXHUwNTZkXHUwNTNlXHUwNTZlXHUwNTNmXHUwNTZmXHUwNTQwXHUwNTcwXHUwNTQxXHUwNTcxXHUwNTQyXHUwNTcyXHUwNTQzXHUwNTczXHUwNTQ0XHUwNTc0XHUwNTQ1XHUwNTc1XHUwNTQ2XHUwNTc2XHUwNTQ3XHUwNTc3XHUwNTQ4XHUwNTc4XHUwNTQ5XHUwNTc5XHUwNTRh''@;'; put 'put ''XHUwNTdhXHUwNTRiXHUwNTdiXHUwNTRjXHUwNTdjXHUwNTRkXHUwNTdkXHUwNTRlXHUwNTdlXHUwNTRmXHUwNTdmXHUwNTUwXHUwNTgwXHUwNTUxXHUwNTgxXHUwNTUyXHUwNTgyXHUwNTUzXHUwNTgzXHUwNTU0XHUwNTg0XHUwNTU1XHUwNTg1XHUwNTU2XHUwNTg2XHUwNTVhXHVmZmZkIn0s''@;'; put 'put ''cmsxMDQ4Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQwMlx1MDQwM1x1MjAxYVx1MDQ1M1x1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MjBhY1x1MjAzMFx1MDQwOVx1MjAzOVx1MDQwYVx1MDQ5YVx1MDRiYVx1MDQwZlx1MDQ1Mlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAx''@;'; put 'put ''M1x1MjAxNFx1ZmZmZFx1MjEyMlx1MDQ1OVx1MjAzYVx1MDQ1YVx1MDQ5Ylx1MDRiYlx1MDQ1Zlx4YTBcdTA0YjBcdTA0YjFcdTA0ZDhceGE0XHUwNGU4XHhhNlx4YTdcdTA0MDFceGE5XHUwNDkyXHhhYlx4YWNceGFkXHhhZVx1MDRhZVx4YjBceGIxXHUwNDA2XHUwNDU2XHUwNGU5XHhiNVx4''@;'; put 'put ''YjZceGI3XHUwNDUxXHUyMTE2XHUwNDkzXHhiYlx1MDRkOVx1MDRhMlx1MDRhM1x1MDRhZlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQy''@;'; put 'put ''Mlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1''@;'; put 'put ''MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0ZiJ9LHRjdm46e3R5cGU6Il9zYmNzIixjaGFyczoiXDBceGRhXHUxZWU0XHgwM1x1MWVlYVx1MWVlY1x1''@;'; put 'put ''MWVlZVx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBcdTFlZThcdTFlZjBcdTFlZjJcdTFlZjZcdTFlZjhceGRkXHUxZWY0XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpb''@;'; put 'put ''XFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzBcdTFlYTJceGMzXHhjMVx1MWVhMFx1MWViNlx1MWVhY1x4YzhcdTFlYmFcdTFlYmNceGM5XHUxZWI4XHUxZWM2XHhjY1x1MWVjOFx1MDEyOFx4Y2RcdTFlY2FceGQyXHUxZWNlXHhkNVx4ZDNcdTFlY2NcdTFlZDhc''@;'; put 'put ''dTFlZGNcdTFlZGVcdTFlZTBcdTFlZGFcdTFlZTJceGQ5XHUxZWU2XHUwMTY4XHhhMFx1MDEwMlx4YzJceGNhXHhkNFx1MDFhMFx1MDFhZlx1MDExMFx1MDEwM1x4ZTJceGVhXHhmNFx1MDFhMVx1MDFiMFx1MDExMVx1MWViMFx1MDMwMFx1MDMwOVx1MDMwM1x1MDMwMVx1MDMyM1x4ZTBcdTFl''@;'; put 'put ''YTNceGUzXHhlMVx1MWVhMVx1MWViMlx1MWViMVx1MWViM1x1MWViNVx1MWVhZlx1MWViNFx1MWVhZVx1MWVhNlx1MWVhOFx1MWVhYVx1MWVhNFx1MWVjMFx1MWViN1x1MWVhN1x1MWVhOVx1MWVhYlx1MWVhNVx1MWVhZFx4ZThcdTFlYzJcdTFlYmJcdTFlYmRceGU5XHUxZWI5XHUxZWMxXHUx''@;'; put 'put ''ZWMzXHUxZWM1XHUxZWJmXHUxZWM3XHhlY1x1MWVjOVx1MWVjNFx1MWViZVx1MWVkMlx1MDEyOVx4ZWRcdTFlY2JceGYyXHUxZWQ0XHUxZWNmXHhmNVx4ZjNcdTFlY2RcdTFlZDNcdTFlZDVcdTFlZDdcdTFlZDFcdTFlZDlcdTFlZGRcdTFlZGZcdTFlZTFcdTFlZGJcdTFlZTNceGY5XHUxZWQ2''@;'; put 'put ''XHUxZWU3XHUwMTY5XHhmYVx1MWVlNVx1MWVlYlx1MWVlZFx1MWVlZlx1MWVlOVx1MWVmMVx1MWVmM1x1MWVmN1x1MWVmOVx4ZmRcdTFlZjVcdTFlZDAifSxnZW9yZ2lhbmFjYWRlbXk6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBc''@;'; put 'put ''dTIwMjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJceDhkXHg4ZVx4OGZceDkwXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHg5ZFx4OWVcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2''@;'; put 'put ''XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx1MTBkMFx1MTBkMVx1MTBkMlx1MTBkM1x1MTBkNFx1MTBkNVx1MTBkNlx1MTBkN1x1MTBkOFx1MTBkOVx1MTBk''@;'; put 'put ''YVx1MTBkYlx1MTBkY1x1MTBkZFx1MTBkZVx1MTBkZlx1MTBlMFx1MTBlMVx1MTBlMlx1MTBlM1x1MTBlNFx1MTBlNVx1MTBlNlx1MTBlN1x1MTBlOFx1MTBlOVx1MTBlYVx1MTBlYlx1MTBlY1x1MTBlZFx1MTBlZVx1MTBlZlx1MTBmMFx1MTBmMVx1MTBmMlx1MTBmM1x1MTBmNFx1MTBmNVx1''@;'; put 'put ''MTBmNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYifSxnZW9yZ2lhbnBzOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHUyMDFhXHUwMTkyXHUyMDFl''@;'; put 'put ''XHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYwXHUyMDM5XHUwMTUyXHg4ZFx4OGVceDhmXHg5MFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1MDE2MVx1MjAzYVx1MDE1M1x4OWRceDllXHUwMTc4XHhhMFx4YTFceGEyXHhh''@;'; put 'put ''M1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZcdTEwZDBcdTEwZDFcdTEwZDJcdTEwZDNcdTEwZDRcdTEwZDVcdTEwZDZcdTEwZjFcdTEw''@;'; put 'put ''ZDdcdTEwZDhcdTEwZDlcdTEwZGFcdTEwZGJcdTEwZGNcdTEwZjJcdTEwZGRcdTEwZGVcdTEwZGZcdTEwZTBcdTEwZTFcdTEwZTJcdTEwZjNcdTEwZTNcdTEwZTRcdTEwZTVcdTEwZTZcdTEwZTdcdTEwZThcdTEwZTlcdTEwZWFcdTEwZWJcdTEwZWNcdTEwZWRcdTEwZWVcdTEwZjRcdTEwZWZc''@;'; put 'put ''dTEwZjBcdTEwZjVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiJ9LHB0MTU0Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQ5Nlx1MDQ5Mlx1MDRlZVx1''@;'; put 'put ''MDQ5M1x1MjAxZVx1MjAyNlx1MDRiNlx1MDRhZVx1MDRiMlx1MDRhZlx1MDRhMFx1MDRlMlx1MDRhMlx1MDQ5YVx1MDRiYVx1MDRiOFx1MDQ5N1x1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDRiM1x1MDRiN1x1MDRhMVx1MDRlM1x1MDRhM1x1MDQ5Ylx1MDRi''@;'; put 'put ''Ylx1MDRiOVx4YTBcdTA0MGVcdTA0NWVcdTA0MDhcdTA0ZThcdTA0OThcdTA0YjBceGE3XHUwNDAxXHhhOVx1MDRkOFx4YWJceGFjXHUwNGVmXHhhZVx1MDQ5Y1x4YjBcdTA0YjFcdTA0MDZcdTA0NTZcdTA0OTlcdTA0ZTlceGI2XHhiN1x1MDQ1MVx1MjExNlx1MDRkOVx4YmJcdTA0NThcdTA0''@;'; put 'put ''YWFcdTA0YWJcdTA0OWRcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0Mjhc''@;'; put 'put ''dTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0''@;'; put 'put ''NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGYifSx2aXNjaWk6e3R5cGU6Il9zYmNzIixjaGFyczoiXDBceDAxXHUxZWIyXHgwM1x4MDRcdTFlYjRcdTFlYWFceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4''@;'; put 'put ''MTJceDEzXHUxZWY2XHgxNVx4MTZceDE3XHgxOFx1MWVmOFx4MWFceDFiXHgxY1x4MWRcdTFlZjRceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTFl''@;'; put 'put ''YTBcdTFlYWVcdTFlYjBcdTFlYjZcdTFlYTRcdTFlYTZcdTFlYThcdTFlYWNcdTFlYmNcdTFlYjhcdTFlYmVcdTFlYzBcdTFlYzJcdTFlYzRcdTFlYzZcdTFlZDBcdTFlZDJcdTFlZDRcdTFlZDZcdTFlZDhcdTFlZTJcdTFlZGFcdTFlZGNcdTFlZGVcdTFlY2FcdTFlY2VcdTFlY2NcdTFlYzhc''@;'; put 'put ''dTFlZTZcdTAxNjhcdTFlZTRcdTFlZjJceGQ1XHUxZWFmXHUxZWIxXHUxZWI3XHUxZWE1XHUxZWE3XHUxZWE5XHUxZWFkXHUxZWJkXHUxZWI5XHUxZWJmXHUxZWMxXHUxZWMzXHUxZWM1XHUxZWM3XHUxZWQxXHUxZWQzXHUxZWQ1XHUxZWQ3XHUxZWUwXHUwMWEwXHUxZWQ5XHUxZWRkXHUxZWRm''@;'; put 'put ''XHUxZWNiXHUxZWYwXHUxZWU4XHUxZWVhXHUxZWVjXHUwMWExXHUxZWRiXHUwMWFmXHhjMFx4YzFceGMyXHhjM1x1MWVhMlx1MDEwMlx1MWViM1x1MWViNVx4YzhceGM5XHhjYVx1MWViYVx4Y2NceGNkXHUwMTI4XHUxZWYzXHUwMTEwXHUxZWU5XHhkMlx4ZDNceGQ0XHUxZWExXHUxZWY3XHUx''@;'; put 'put ''ZWViXHUxZWVkXHhkOVx4ZGFcdTFlZjlcdTFlZjVceGRkXHUxZWUxXHUwMWIwXHhlMFx4ZTFceGUyXHhlM1x1MWVhM1x1MDEwM1x1MWVlZlx1MWVhYlx4ZThceGU5XHhlYVx1MWViYlx4ZWNceGVkXHUwMTI5XHUxZWM5XHUwMTExXHUxZWYxXHhmMlx4ZjNceGY0XHhmNVx1MWVjZlx1MWVjZFx1''@;'; put 'put ''MWVlNVx4ZjlceGZhXHUwMTY5XHUxZWU3XHhmZFx1MWVlM1x1MWVlZSJ9LGlzbzY0NmNuOnt0eXBlOiJfc2JjcyIsY2hhcnM6IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4''@;'; put 'put ''MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjXHhhNSUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fVx1MjAzZVx4N2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSxpc282NDZqcDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDEx''@;'; put 'put ''XHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXHhhNV1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fVx1MjAzZVx4N2Zc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSxocHJvbWFuODp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVc''@;'; put 'put ''eDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGMwXHhjMlx4YzhceGNhXHhjYlx4Y2VceGNmXHhiNFx1MDJjYlx1MDJjNlx4YThcdTAyZGNceGQ5''@;'; put 'put ''XHhkYlx1MjBhNFx4YWZceGRkXHhmZFx4YjBceGM3XHhlN1x4ZDFceGYxXHhhMVx4YmZceGE0XHhhM1x4YTVceGE3XHUwMTkyXHhhMlx4ZTJceGVhXHhmNFx4ZmJceGUxXHhlOVx4ZjNceGZhXHhlMFx4ZThceGYyXHhmOVx4ZTRceGViXHhmNlx4ZmNceGM1XHhlZVx4ZDhceGM2XHhlNVx4ZWRc''@;'; put 'put ''eGY4XHhlNlx4YzRceGVjXHhkNlx4ZGNceGM5XHhlZlx4ZGZceGQ0XHhjMVx4YzNceGUzXHhkMFx4ZjBceGNkXHhjY1x4ZDNceGQyXHhkNVx4ZjVcdTAxNjBcdTAxNjFceGRhXHUwMTc4XHhmZlx4ZGVceGZlXHhiN1x4YjVceGI2XHhiZVx1MjAxNFx4YmNceGJkXHhhYVx4YmFceGFiXHUyNWEw''@;'; put 'put ''XHhiYlx4YjFcdWZmZmQifSxtYWNpbnRvc2g6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFc''@;'; put 'put ''eGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4''@;'; put 'put ''XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTIwNDRceGE0XHUyMDM5XHUyMDNhXHVmYjAxXHVm''@;'; put 'put ''YjAyXHUyMDIxXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3In0sYXNj''@;'; put 'put ''aWk6e3R5cGU6Il9zYmNzIixjaGFyczoiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0sdGlzNjIwOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1''@;'; put 'put ''MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUz''@;'; put 'put ''Mlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1''@;'; put 'put ''MGU0ZVx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx1MGU1YVx1MGU1Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9fX0sMzAzMzk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig2OTIyNyksXz1iKDk3NTQx''@;'; put 'put ''KTtjZS5leHBvcnRzPUkoXy5wcm90bywic2l6ZSIsImdldCIpfHxmdW5jdGlvbihwKXtyZXR1cm4gcC5zaXplfX0sMzA0NjQ6Y2U9PnsidXNlIHN0cmljdCI7dmFyIGI9e307ZnVuY3Rpb24gSShQLEYsUil7Unx8KFI9RXJyb3IpO3ZhciBOPWZ1bmN0aW9uKE8pe2Z1bmN0aW9uIEsoWixZLFcp''@;'; put 'put ''e3JldHVybiBPLmNhbGwodGhpcyxmdW5jdGlvbiB6KE8sSyxaKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIEY/RjpGKE8sSyxaKX0oWixZLFcpKXx8dGhpc31yZXR1cm4gZnVuY3Rpb24gWChQLEYpe1AucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRi5wcm90b3R5cGUpLFAucHJvdG90eXBlLmNv''@;'; put 'put ''bnN0cnVjdG9yPVAsUC5fX3Byb3RvX189Rn0oSyxPKSxLfShSKTtOLnByb3RvdHlwZS5uYW1lPVIubmFtZSxOLnByb3RvdHlwZS5jb2RlPVAsYltQXT1OfWZ1bmN0aW9uIF8oUCxGKXtpZihBcnJheS5pc0FycmF5KFApKXt2YXIgUj1QLmxlbmd0aDtyZXR1cm4gUD1QLm1hcChmdW5jdGlvbih6''@;'; put 'put ''KXtyZXR1cm4gU3RyaW5nKHopfSksUj4yPyJvbmUgb2YgIi5jb25jYXQoRiwiICIpLmNvbmNhdChQLnNsaWNlKDAsUi0xKS5qb2luKCIsICIpLCIsIG9yICIpK1BbUi0xXToyPT09Uj8ib25lIG9mICIuY29uY2F0KEYsIiAiKS5jb25jYXQoUFswXSwiIG9yICIpLmNvbmNhdChQWzFdKToib2Yg''@;'; put 'put ''Ii5jb25jYXQoRiwiICIpLmNvbmNhdChQWzBdKX1yZXR1cm4ib2YgIi5jb25jYXQoRiwiICIpLmNvbmNhdChTdHJpbmcoUCkpfUkoIkVSUl9JTlZBTElEX09QVF9WQUxVRSIsZnVuY3Rpb24oUCxGKXtyZXR1cm4nVGhlIHZhbHVlICInK0YrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICInK1Ar''@;'; put 'put ''JyInfSxUeXBlRXJyb3IpLEkoIkVSUl9JTlZBTElEX0FSR19UWVBFIixmdW5jdGlvbihQLEYsUil7dmFyIHosTjtpZigic3RyaW5nIj09dHlwZW9mIEYmJmZ1bmN0aW9uIHAoUCxGLFIpe3JldHVybiBQLnN1YnN0cighUnx8UjwwPzA6K1IsRi5sZW5ndGgpPT09Rn0oRiwibm90ICIpPyh6PSJt''@;'; put 'put ''dXN0IG5vdCBiZSIsRj1GLnJlcGxhY2UoL15ub3QgLywiIikpOno9Im11c3QgYmUiLGZ1bmN0aW9uIFYoUCxGLFIpe3JldHVybih2b2lkIDA9PT1SfHxSPlAubGVuZ3RoKSYmKFI9UC5sZW5ndGgpLFAuc3Vic3RyaW5nKFItRi5sZW5ndGgsUik9PT1GfShQLCIgYXJndW1lbnQiKSlOPSJUaGUg''@;'; put 'put ''Ii5jb25jYXQoUCwiICIpLmNvbmNhdCh6LCIgIikuY29uY2F0KF8oRiwidHlwZSIpKTtlbHNle3ZhciBPPWZ1bmN0aW9uIHcoUCxGLFIpe3JldHVybiJudW1iZXIiIT10eXBlb2YgUiYmKFI9MCksIShSK0YubGVuZ3RoPlAubGVuZ3RoKSYmLTEhPT1QLmluZGV4T2YoRixSKX0oUCwiLiIpPyJw''@;'; put 'put ''cm9wZXJ0eSI6ImFyZ3VtZW50IjtOPSdUaGUgIicuY29uY2F0KFAsJyIgJykuY29uY2F0KE8sIiAiKS5jb25jYXQoeiwiICIpLmNvbmNhdChfKEYsInR5cGUiKSl9cmV0dXJuIE4rIi4gUmVjZWl2ZWQgdHlwZSAiLmNvbmNhdCh0eXBlb2YgUil9LFR5cGVFcnJvciksSSgiRVJSX1NUUkVBTV9Q''@;'; put 'put ''VVNIX0FGVEVSX0VPRiIsInN0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GIiksSSgiRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQiLGZ1bmN0aW9uKFApe3JldHVybiJUaGUgIitQKyIgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCJ9KSxJKCJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSIsIlBy''@;'; put 'put ''ZW1hdHVyZSBjbG9zZSIpLEkoIkVSUl9TVFJFQU1fREVTVFJPWUVEIixmdW5jdGlvbihQKXtyZXR1cm4iQ2Fubm90IGNhbGwgIitQKyIgYWZ0ZXIgYSBzdHJlYW0gd2FzIGRlc3Ryb3llZCJ9KSxJKCJFUlJfTVVMVElQTEVfQ0FMTEJBQ0siLCJDYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGlt''@;'; put 'put ''ZXMiKSxJKCJFUlJfU1RSRUFNX0NBTk5PVF9QSVBFIiwiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZSIpLEkoIkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EIiwid3JpdGUgYWZ0ZXIgZW5kIiksSSgiRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyIsIk1heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMg''@;'; put 'put ''dG8gc3RyZWFtIixUeXBlRXJyb3IpLEkoIkVSUl9VTktOT1dOX0VOQ09ESU5HIixmdW5jdGlvbihQKXtyZXR1cm4iVW5rbm93biBlbmNvZGluZzogIitQfSxUeXBlRXJyb3IpLEkoIkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQiLCJzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVu''@;'; put 'put ''ZCBldmVudCIpLGNlLmV4cG9ydHMuRj1ifSwzMDcxNTooY2UsWCxiKT0+e3ZhciBJPWIoNjcyMTEpLF89YigyNzA1NCkuQnVmZmVyO2Z1bmN0aW9uIHAoVil7dmFyIHc9Xy5hbGxvY1Vuc2FmZSg0KTtyZXR1cm4gdy53cml0ZVVJbnQzMkJFKFYsMCksd31jZS5leHBvcnRzPWZ1bmN0aW9uKFYs''@;'; put 'put ''dyl7Zm9yKHZhciBSLFA9Xy5hbGxvYygwKSxGPTA7UC5sZW5ndGg8dzspUj1wKEYrKyksUD1fLmNvbmNhdChbUCxJKCJzaGExIikudXBkYXRlKFYpLnVwZGF0ZShSKS5kaWdlc3QoKV0pO3JldHVybiBQLnNsaWNlKDAsdyl9fSwzMDc4NzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1i''@;'; put 'put ''KDc4ODExKSxfPWIoNDY5MjYpLHA9YigxMTA4KSxWPWIoNzUyMTIpLHc9Yig2Njc5MiksUD1iKDcxNzEpLEY9Yig0NjgpLFI9Yig0MzU4NCksej1iKDM2OTMyKSxOPWIoNjY1NDIpLE89VHlwZUVycm9yLEs9ZnVuY3Rpb24oWSxXKXt0aGlzLnN0b3BwZWQ9WSx0aGlzLnJlc3VsdD1XfSxaPUsu''@;'; put 'put ''cHJvdG90eXBlO2NlLmV4cG9ydHM9ZnVuY3Rpb24oWSxXLHEpe3ZhciBfZSxUZSxNZSxaZSxCLGcseSxKPSEoIXF8fCFxLkFTX0VOVFJJRVMpLHJlPSEoIXF8fCFxLklTX1JFQ09SRCksaWU9ISghcXx8IXEuSVNfSVRFUkFUT1IpLHVlPSEoIXF8fCFxLklOVEVSUlVQVEVEKSxnZT1JKFcscSYm''@;'; put 'put ''cS50aGF0KSx4PWZ1bmN0aW9uKFQpe3JldHVybiBfZSYmTihfZSwibm9ybWFsIiksbmV3IEsoITAsVCl9LEM9ZnVuY3Rpb24oVCl7cmV0dXJuIEo/KHAoVCksdWU/Z2UoVFswXSxUWzFdLHgpOmdlKFRbMF0sVFsxXSkpOnVlP2dlKFQseCk6Z2UoVCl9O2lmKHJlKV9lPVkuaXRlcmF0b3I7ZWxz''@;'; put 'put ''ZSBpZihpZSlfZT1ZO2Vsc2V7aWYoIShUZT16KFkpKSl0aHJvdyBuZXcgTyhWKFkpKyIgaXMgbm90IGl0ZXJhYmxlIik7aWYodyhUZSkpe2ZvcihNZT0wLFplPVAoWSk7WmU+TWU7TWUrKylpZigoQj1DKFlbTWVdKSkmJkYoWixCKSlyZXR1cm4gQjtyZXR1cm4gbmV3IEsoITEpfV9lPVIoWSxU''@;'; put 'put ''ZSl9Zm9yKGc9cmU/WS5uZXh0Ol9lLm5leHQ7ISh5PV8oZyxfZSkpLmRvbmU7KXt0cnl7Qj1DKHkudmFsdWUpfWNhdGNoKFQpe04oX2UsInRocm93IixUKX1pZigib2JqZWN0Ij09dHlwZW9mIEImJkImJkYoWixCKSlyZXR1cm4gQn1yZXR1cm4gbmV3IEsoITEpfX0sMzEwODM6KGNlLFgsYik9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7dmFyIEk9YigxOTE1MCksXz1iKDQ0NjQ4KSxwPWIoMTY5ODApLFY9Yig0ODEwNCk7Y2UuZXhwb3J0cz1mdW5jdGlvbih3LFAsRixSKXtSfHwoUj17fSk7dmFyIHo9Ui5lbnVtZXJhYmxlLE49dm9pZCAwIT09Ui5uYW1lP1IubmFtZTpQO2lmKEkoRikmJnAoRixOLFIp''@;'; put 'put ''LFIuZ2xvYmFsKXo/d1tQXT1GOlYoUCxGKTtlbHNle3RyeXtSLnVuc2FmZT93W1BdJiYoej0hMCk6ZGVsZXRlIHdbUF19Y2F0Y2h7fXo/d1tQXT1GOl8uZih3LFAse3ZhbHVlOkYsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6IVIubm9uQ29uZmlndXJhYmxlLHdyaXRhYmxlOiFSLm5vbldy''@;'; put 'put ''aXRhYmxlfSl9cmV0dXJuIHd9fSwzMTMzMjpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6Ilx1MDk2NyIsMjoiXHUwOTY4IiwzOiJcdTA5NjkiLDQ6Ilx1MDk2YSIsNToiXHUwOTZiIiw2OiJcdTA5NmMiLDc6Ilx1MDk2ZCIsODoiXHUwOTZlIiw5''@;'; put 'put ''OiJcdTA5NmYiLDA6Ilx1MDk2NiJ9LHA9eyJcdTA5NjciOiIxIiwiXHUwOTY4IjoiMiIsIlx1MDk2OSI6IjMiLCJcdTA5NmEiOiI0IiwiXHUwOTZiIjoiNSIsIlx1MDk2YyI6IjYiLCJcdTA5NmQiOiI3IiwiXHUwOTZlIjoiOCIsIlx1MDk2ZiI6IjkiLCJcdTA5NjYiOiIwIn0sVj1bL15cdTA5''@;'; put 'put ''MWNcdTA5MjgvaSwvXlx1MDkyYlx1MDkzY1x1MDkzMHxcdTA5MmJcdTA5MzAvaSwvXlx1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYS9pLC9eXHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4L2ksL15cdTA5MmVcdTA5MDgvaSwvXlx1MDkxY1x1MDk0Mlx1MDkyOC9pLC9eXHUwOTFj''@;'; put 'put ''XHUwOTQxXHUwOTMyL2ksL15cdTA5MDVcdTA5MTcvaSwvXlx1MDkzOFx1MDkzZlx1MDkyNFx1MDkwMnxcdTA5MzhcdTA5M2ZcdTA5MjQvaSwvXlx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mi9pLC9eXHUwOTI4XHUwOTM1fFx1MDkyOFx1MDkzNVx1MDkwMi9pLC9eXHUwOTI2XHUwOTNm''@;'; put 'put ''XHUwOTM4XHUwOTAyfFx1MDkyNlx1MDkzZlx1MDkzOC9pXTtJLmRlZmluZUxvY2FsZSgiaGkiLHttb250aHM6e2Zvcm1hdDoiXHUwOTFjXHUwOTI4XHUwOTM1XHUwOTMwXHUwOTQwX1x1MDkyYlx1MDkzY1x1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MF9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRc''@;'; put 'put ''dTA5MWFfXHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XHUwOTMyX1x1MDkyZVx1MDkwOF9cdTA5MWNcdTA5NDJcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyXHUwOTNlXHUwOTA4X1x1MDkwNVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkyNF9cdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MmVcdTA5''@;'; put 'put ''NGRcdTA5MmNcdTA5MzBfXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXHUwOTJjXHUwOTMwX1x1MDkyOFx1MDkzNVx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMF9cdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzAiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToiXHUw''@;'; put 'put ''OTFjXHUwOTI4XHUwOTM1XHUwOTMwXHUwOTQwX1x1MDkyYlx1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MF9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFfXHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XHUwOTMyX1x1MDkyZVx1MDkwOF9cdTA5MWNcdTA5NDJcdTA5MjhfXHUwOTFj''@;'; put 'put ''XHUwOTQxXHUwOTMyXHUwOTNlXHUwOTA4X1x1MDkwNVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkyNF9cdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MDJcdTA5MmNcdTA5MzBfXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXHUwOTJjXHUwOTMwX1x1MDkyOFx1MDkzNVx1MDkwMlx1MDkyY1x1MDkz''@;'; put 'put ''MF9cdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MDJcdTA5MmNcdTA5MzAiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0OiJcdTA5MWNcdTA5MjguX1x1MDkyYlx1MDkzY1x1MDkzMC5fXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OC5fXHUw''@;'; put 'put ''OTJlXHUwOTA4X1x1MDkxY1x1MDk0Mlx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzIuX1x1MDkwNVx1MDkxNy5fXHUwOTM4XHUwOTNmXHUwOTI0Ll9cdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDIuX1x1MDkyOFx1MDkzNS5fXHUwOTI2XHUwOTNmXHUwOTM4LiIuc3BsaXQoIl8iKSx3ZWVr''@;'; put 'put ''ZGF5czoiXHUwOTMwXHUwOTM1XHUwOTNmXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkzOFx1MDk0Ylx1MDkyZVx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MmVcdTA5MDJcdTA5MTdcdTA5MzJcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTJjXHUwOTQxXHUwOTI3XHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkx''@;'; put 'put ''N1x1MDk0MVx1MDkzMFx1MDk0Mlx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MzZcdTA5NDFcdTA5MTVcdTA5NGRcdTA5MzBcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTM2XHUwOTI4XHUwOTNmXHUwOTM1XHUwOTNlXHUwOTMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDkzMFx1MDkzNVx1''@;'; put 'put ''MDkzZl9cdTA5MzhcdTA5NGJcdTA5MmVfXHUwOTJlXHUwOTAyXHUwOTE3XHUwOTMyX1x1MDkyY1x1MDk0MVx1MDkyN19cdTA5MTdcdTA5NDFcdTA5MzBcdTA5NDJfXHUwOTM2XHUwOTQxXHUwOTE1XHUwOTRkXHUwOTMwX1x1MDkzNlx1MDkyOFx1MDkzZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01p''@;'; put 'put ''bjoiXHUwOTMwX1x1MDkzOFx1MDk0Yl9cdTA5MmVcdTA5MDJfXHUwOTJjXHUwOTQxX1x1MDkxN1x1MDk0MV9cdTA5MzZcdTA5NDFfXHUwOTM2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFx1MDkyY1x1MDkxY1x1MDk0NyIsTFRTOiJBIGg6bW06c3MgXHUwOTJjXHUw''@;'; put 'put ''OTFjXHUwOTQ3IixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSBcdTA5MmNcdTA5MWNcdTA5NDciLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOTJjXHUwOTFjXHUwOTQ3In0sbW9udGhzUGFyc2U6Vixsb25nTW9udGhz''@;'; put 'put ''UGFyc2U6VixzaG9ydE1vbnRoc1BhcnNlOlsvXlx1MDkxY1x1MDkyOC9pLC9eXHUwOTJiXHUwOTNjXHUwOTMwL2ksL15cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWEvaSwvXlx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OC9pLC9eXHUwOTJlXHUwOTA4L2ksL15cdTA5MWNcdTA5''@;'; put 'put ''NDJcdTA5MjgvaSwvXlx1MDkxY1x1MDk0MVx1MDkzMi9pLC9eXHUwOTA1XHUwOTE3L2ksL15cdTA5MzhcdTA5M2ZcdTA5MjQvaSwvXlx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mi9pLC9eXHUwOTI4XHUwOTM1L2ksL15cdTA5MjZcdTA5M2ZcdTA5MzgvaV0sbW9udGhzUmVnZXg6L14o''@;'; put 'put ''XHUwOTFjXHUwOTI4XHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkxY1x1MDkyOFwuP3xcdTA5MmJcdTA5M2NcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTJiXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkyYlx1MDkzY1x1MDkzMFwuP3xcdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5''@;'; put 'put ''MWE/fFx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFx1MDkzMnxcdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDhcLj98XHUwOTJlXHUwOTA4P3xcdTA5MWNcdTA5NDJcdTA5Mjg/fFx1MDkxY1x1MDk0MVx1MDkzMlx1MDkzZVx1MDkwOHxcdTA5MWNcdTA5NDFcdTA5MzJcLj98XHUw''@;'; put 'put ''OTA1XHUwOTE3XHUwOTM4XHUwOTRkXHUwOTI0fFx1MDkwNVx1MDkxN1wuP3xcdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTM4XHUwOTNmXHUwOTI0XHUwOTAyXHUwOTJjXHUwOTMwfFx1MDkzOFx1MDkzZlx1MDkyNFwuP3xcdTA5MDVcdTA5MTVcdTA5NGRc''@;'; put 'put ''dTA5MWZcdTA5NDJcdTA5MmNcdTA5MzB8XHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXC4/fFx1MDkyOFx1MDkzNVx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MjhcdTA5MzVcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTI4XHUwOTM1XC4/fFx1MDkyNlx1MDkzZlx1MDkzOFx1MDky''@;'; put 'put ''ZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTI2XHUwOTNmXHUwOTM4XC4/KS9pLG1vbnRoc1Nob3J0UmVnZXg6L14oXHUwOTFjXHUwOTI4XHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkxY1x1MDkyOFwuP3xcdTA5MmJcdTA5M2NcdTA5''@;'; put 'put ''MzBcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTJiXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkyYlx1MDkzY1x1MDkzMFwuP3xcdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWE/fFx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFx1MDkzMnxcdTA5MDVcdTA5MmFcdTA5NGRcdTA5''@;'; put 'put ''MzBcdTA5NDhcLj98XHUwOTJlXHUwOTA4P3xcdTA5MWNcdTA5NDJcdTA5Mjg/fFx1MDkxY1x1MDk0MVx1MDkzMlx1MDkzZVx1MDkwOHxcdTA5MWNcdTA5NDFcdTA5MzJcLj98XHUwOTA1XHUwOTE3XHUwOTM4XHUwOTRkXHUwOTI0fFx1MDkwNVx1MDkxN1wuP3xcdTA5MzhcdTA5M2ZcdTA5MjRc''@;'; put 'put ''dTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTM4XHUwOTNmXHUwOTI0XHUwOTAyXHUwOTJjXHUwOTMwfFx1MDkzOFx1MDkzZlx1MDkyNFwuP3xcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcdTA5MmNcdTA5MzB8XHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXC4/fFx1MDky''@;'; put 'put ''OFx1MDkzNVx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MjhcdTA5MzVcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTI4XHUwOTM1XC4/fFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTI2''@;'; put 'put ''XHUwOTNmXHUwOTM4XC4/KS9pLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKFx1MDkxY1x1MDkyOFx1MDkzNVx1MDkzMFx1MDk0MD98XHUwOTJiXHUwOTNjXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkyYlx1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MD98XHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRk''@;'; put 'put ''XHUwOTFhP3xcdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDhcdTA5MzI/fFx1MDkyZVx1MDkwOD98XHUwOTFjXHUwOTQyXHUwOTI4P3xcdTA5MWNcdTA5NDFcdTA5MzJcdTA5M2VcdTA5MDg/fFx1MDkwNVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkyND98XHUwOTM4XHUwOTNmXHUwOTI0XHUw''@;'; put 'put ''OTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkzOFx1MDkzZlx1MDkyNFx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5MzhcdTA5M2ZcdTA5MjQ/XC4/fFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mlx1MDkyY1x1MDkzMHxcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcLj98XHUwOTI4''@;'; put 'put ''XHUwOTM1XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyOFx1MDkzNVx1MDkwMlx1MDkyY1x1MDkzMD98XHUwOTI2XHUwOTNmXHUwOTM4XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkwMlx1MDkyY1x1MDkzMD8pL2ksbW9udGhzU2hvcnRTdHJpY3RS''@;'; put 'put ''ZWdleDovXihcdTA5MWNcdTA5MjhcLj98XHUwOTJiXHUwOTNjXHUwOTMwXC4/fFx1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYT98XHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XC4/fFx1MDkyZVx1MDkwOD98XHUwOTFjXHUwOTQyXHUwOTI4P3xcdTA5MWNcdTA5NDFcdTA5MzJc''@;'; put 'put ''Lj98XHUwOTA1XHUwOTE3XC4/fFx1MDkzOFx1MDkzZlx1MDkyNFwuP3xcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcLj98XHUwOTI4XHUwOTM1XC4/fFx1MDkyNlx1MDkzZlx1MDkzOFwuPykvaSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDkwNlx1MDkxY10gTFQiLG5leHREYXk6Iltc''@;'; put 'put ''dTA5MTVcdTA5MzJdIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTA5MTVcdTA5MzJdIExUIixsYXN0V2VlazoiW1x1MDkyYVx1MDkzZlx1MDkxYlx1MDkzMlx1MDk0N10gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDkyZVx1''@;'; put 'put ''MDk0N1x1MDkwMiIscGFzdDoiJXMgXHUwOTJhXHUwOTM5XHUwOTMyXHUwOTQ3IixzOiJcdTA5MTVcdTA5NDFcdTA5MWIgXHUwOTM5XHUwOTQwIFx1MDkxNVx1MDk0ZFx1MDkzN1x1MDkyMyIsc3M6IiVkIFx1MDkzOFx1MDk0N1x1MDkxNVx1MDkwMlx1MDkyMSIsbToiXHUwOTBmXHUwOTE1IFx1''@;'; put 'put ''MDkyZVx1MDkzZlx1MDkyOFx1MDkxZiIsbW06IiVkIFx1MDkyZVx1MDkzZlx1MDkyOFx1MDkxZiIsaDoiXHUwOTBmXHUwOTE1IFx1MDkxOFx1MDkwMlx1MDkxZlx1MDkzZSIsaGg6IiVkIFx1MDkxOFx1MDkwMlx1MDkxZlx1MDk0NyIsZDoiXHUwOTBmXHUwOTE1IFx1MDkyNlx1MDkzZlx1MDky''@;'; put 'put ''OCIsZGQ6IiVkIFx1MDkyNlx1MDkzZlx1MDkyOCIsTToiXHUwOTBmXHUwOTE1IFx1MDkyZVx1MDkzOVx1MDk0MFx1MDkyOFx1MDk0NyIsTU06IiVkIFx1MDkyZVx1MDkzOVx1MDk0MFx1MDkyOFx1MDk0NyIseToiXHUwOTBmXHUwOTE1IFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzNyIseXk6IiVk''@;'; put 'put ''IFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzNyJ9LHByZXBhcnNlOmZ1bmN0aW9uKEYpe3JldHVybiBGLnJlcGxhY2UoL1tcdTA5NjdcdTA5NjhcdTA5NjlcdTA5NmFcdTA5NmJcdTA5NmNcdTA5NmRcdTA5NmVcdTA5NmZcdTA5NjZdL2csZnVuY3Rpb24oUil7cmV0dXJuIHBbUl19KX0scG9zdGZv''@;'; put 'put ''cm1hdDpmdW5jdGlvbihGKXtyZXR1cm4gRi5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKFIpe3JldHVybiBfW1JdfSl9LG1lcmlkaWVtUGFyc2U6L1x1MDkzMFx1MDkzZVx1MDkyNHxcdTA5MzhcdTA5NDFcdTA5MmNcdTA5Mzl8XHUwOTI2XHUwOTRiXHUwOTJhXHUwOTM5XHUwOTMwfFx1MDkzNlx1''@;'; put 'put ''MDkzZVx1MDkyZS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKEYsUil7cmV0dXJuIDEyPT09RiYmKEY9MCksIlx1MDkzMFx1MDkzZVx1MDkyNCI9PT1SP0Y8ND9GOkYrMTI6Ilx1MDkzOFx1MDk0MVx1MDkyY1x1MDkzOSI9PT1SP0Y6Ilx1MDkyNlx1MDk0Ylx1MDkyYVx1MDkzOVx1MDkzMCI9PT1S''@;'; put 'put ''P0Y+PTEwP0Y6RisxMjoiXHUwOTM2XHUwOTNlXHUwOTJlIj09PVI/RisxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKEYsUix6KXtyZXR1cm4gRjw0PyJcdTA5MzBcdTA5M2VcdTA5MjQiOkY8MTA/Ilx1MDkzOFx1MDk0MVx1MDkyY1x1MDkzOSI6RjwxNz8iXHUwOTI2XHUwOTRiXHUwOTJh''@;'; put 'put ''XHUwOTM5XHUwOTMwIjpGPDIwPyJcdTA5MzZcdTA5M2VcdTA5MmUiOiJcdTA5MzBcdTA5M2VcdTA5MjQifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oYig5NzU4NikpfSwzMTM1MzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDI4MzY3KSxfPWIoNDY5MjYpLHA9YigzMDc4NyksVj1i''@;'; put 'put ''KDMxNDgzKSx3PWIoMTEwOCksUD1iKDc1NDI0KSxGPWIoNjY1NDIpLHo9Yig0MTI1MikoImZvckVhY2giLFR5cGVFcnJvcik7SSh7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6en0se2ZvckVhY2g6ZnVuY3Rpb24oTyl7dyh0aGlzKTt0cnl7VihPKX1jYXRjaChZ''@;'; put 'put ''KXtGKHRoaXMsInRocm93IixZKX1pZih6KXJldHVybiBfKHosdGhpcyxPKTt2YXIgSz1QKHRoaXMpLFo9MDtwKEssZnVuY3Rpb24oWSl7TyhZLForKyl9LHtJU19SRUNPUkQ6ITB9KX19KX0sMzEzNTg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig5MDI1OCksXz1iKDkyNzM2KSxw''@;'; put 'put ''PWIoMzU4NjEpKCksVj1iKDgzNzk4KSx3PWIoNDY3NTgpLFA9SSgiJU1hdGguZmxvb3IlIik7Y2UuZXhwb3J0cz1mdW5jdGlvbihSLHope2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBSKXRocm93IG5ldyB3KCJgZm5gIGlzIG5vdCBhIGZ1bmN0aW9uIik7aWYoIm51bWJlciIhPXR5cGVvZiB6fHx6''@;'; put 'put ''PDB8fHo+NDI5NDk2NzI5NXx8UCh6KSE9PXopdGhyb3cgbmV3IHcoImBsZW5ndGhgIG11c3QgYmUgYSBwb3NpdGl2ZSAzMi1iaXQgaW50ZWdlciIpO3ZhciBOPWFyZ3VtZW50cy5sZW5ndGg+MiYmISFhcmd1bWVudHNbMl0sTz0hMCxLPSEwO2lmKCJsZW5ndGgiaW4gUiYmVil7dmFyIFo9VihS''@;'; put 'put ''LCJsZW5ndGgiKTtaJiYhWi5jb25maWd1cmFibGUmJihPPSExKSxaJiYhWi53cml0YWJsZSYmKEs9ITEpfXJldHVybihPfHxLfHwhTikmJihwP18oUiwibGVuZ3RoIix6LCEwLCEwKTpfKFIsImxlbmd0aCIseikpLFJ9fSwzMTQ4MzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDE5''@;'; put 'put ''MTUwKSxfPWIoNzUyMTIpLHA9VHlwZUVycm9yO2NlLmV4cG9ydHM9ZnVuY3Rpb24oVil7aWYoSShWKSlyZXR1cm4gVjt0aHJvdyBuZXcgcChfKFYpKyIgaXMgbm90IGEgZnVuY3Rpb24iKX19LDMxOTUwOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoODgyNzUpLF89T2JqZWN0O2Nl''@;'; put 'put ''LmV4cG9ydHM9ZnVuY3Rpb24ocCl7cmV0dXJuIF8oSShwKSl9fSwzMjA2MDpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInRlIix7bW9udGhzOiJcdTBjMWNcdTBjMjhcdTBjMzVcdTBjMzBcdTBjM2ZfXHUwYzJiXHUwYzNmXHUwYzJj''@;'; put 'put ''XHUwYzRkXHUwYzMwXHUwYzM1XHUwYzMwXHUwYzNmX1x1MGMyZVx1MGMzZVx1MGMzMFx1MGM0ZFx1MGMxYVx1MGMzZl9cdTBjMGZcdTBjMmFcdTBjNGRcdTBjMzBcdTBjM2ZcdTBjMzJcdTBjNGRfXHUwYzJlXHUwYzQ3X1x1MGMxY1x1MGM0Mlx1MGMyOFx1MGM0ZF9cdTBjMWNcdTBjNDFcdTBj''@;'; put 'put ''MzJcdTBjNDhfXHUwYzA2XHUwYzE3XHUwYzM4XHUwYzRkXHUwYzFmXHUwYzQxX1x1MGMzOFx1MGM0Nlx1MGMyYVx1MGM0ZFx1MGMxZlx1MGM0Nlx1MGMwMlx1MGMyY1x1MGMzMFx1MGM0ZF9cdTBjMDVcdTBjMTVcdTBjNGRcdTBjMWZcdTBjNGJcdTBjMmNcdTBjMzBcdTBjNGRfXHUwYzI4XHUw''@;'; put 'put ''YzM1XHUwYzAyXHUwYzJjXHUwYzMwXHUwYzRkX1x1MGMyMVx1MGMzZlx1MGMzOFx1MGM0Nlx1MGMwMlx1MGMyY1x1MGMzMFx1MGM0ZCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwYzFjXHUwYzI4Ll9cdTBjMmJcdTBjM2ZcdTBjMmNcdTBjNGRcdTBjMzAuX1x1MGMyZVx1MGMzZVx1MGMz''@;'; put 'put ''MFx1MGM0ZFx1MGMxYVx1MGMzZl9cdTBjMGZcdTBjMmFcdTBjNGRcdTBjMzBcdTBjM2YuX1x1MGMyZVx1MGM0N19cdTBjMWNcdTBjNDJcdTBjMjhcdTBjNGRfXHUwYzFjXHUwYzQxXHUwYzMyXHUwYzQ4X1x1MGMwNlx1MGMxNy5fXHUwYzM4XHUwYzQ2XHUwYzJhXHUwYzRkLl9cdTBjMDVcdTBj''@;'; put 'put ''MTVcdTBjNGRcdTBjMWZcdTBjNGIuX1x1MGMyOFx1MGMzNS5fXHUwYzIxXHUwYzNmXHUwYzM4XHUwYzQ2LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTBjMDZcdTBjMjZcdTBjM2ZcdTBjMzVcdTBjM2VcdTBjMzBcdTBjMDJfXHUwYzM4XHUwYzRiXHUwYzJl''@;'; put 'put ''XHUwYzM1XHUwYzNlXHUwYzMwXHUwYzAyX1x1MGMyZVx1MGMwMlx1MGMxN1x1MGMzM1x1MGMzNVx1MGMzZVx1MGMzMFx1MGMwMl9cdTBjMmNcdTBjNDFcdTBjMjdcdTBjMzVcdTBjM2VcdTBjMzBcdTBjMDJfXHUwYzE3XHUwYzQxXHUwYzMwXHUwYzQxXHUwYzM1XHUwYzNlXHUwYzMwXHUwYzAy''@;'; put 'put ''X1x1MGMzNlx1MGM0MVx1MGMxNVx1MGM0ZFx1MGMzMFx1MGMzNVx1MGMzZVx1MGMzMFx1MGMwMl9cdTBjMzZcdTBjMjhcdTBjM2ZcdTBjMzVcdTBjM2VcdTBjMzBcdTBjMDIiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwYzA2XHUwYzI2XHUwYzNmX1x1MGMzOFx1MGM0Ylx1MGMyZV9c''@;'; put 'put ''dTBjMmVcdTBjMDJcdTBjMTdcdTBjMzNfXHUwYzJjXHUwYzQxXHUwYzI3X1x1MGMxN1x1MGM0MVx1MGMzMFx1MGM0MV9cdTBjMzZcdTBjNDFcdTBjMTVcdTBjNGRcdTBjMzBfXHUwYzM2XHUwYzI4XHUwYzNmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBjMDZfXHUwYzM4XHUwYzRiX1x1''@;'; put 'put ''MGMyZVx1MGMwMl9cdTBjMmNcdTBjNDFfXHUwYzE3XHUwYzQxX1x1MGMzNlx1MGM0MV9cdTBjMzYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0iLExUUzoiQSBoOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEg''@;'; put 'put ''aDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwYzI4XHUwYzQ3XHUwYzIxXHUwYzQxXSBMVCIsbmV4dERheToiW1x1MGMzMFx1MGM0N1x1MGMyYVx1MGM0MV0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MGMy''@;'; put 'put ''OFx1MGMzZlx1MGMyOFx1MGM0ZFx1MGMyOF0gTFQiLGxhc3RXZWVrOiJbXHUwYzE3XHUwYzI0XSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwYzMyXHUwYzRiIixwYXN0OiIlcyBcdTBjMTVcdTBjNGRcdTBjMzBcdTBjM2ZcdTBjMjRcdTBjMDIi''@;'; put 'put ''LHM6Ilx1MGMxNVx1MGM0YVx1MGMyOFx1MGM0ZFx1MGMyOFx1MGMzZiBcdTBjMTVcdTBjNGRcdTBjMzdcdTBjMjNcdTBjM2VcdTBjMzJcdTBjNDEiLHNzOiIlZCBcdTBjMzhcdTBjNDZcdTBjMTVcdTBjMjhcdTBjNGRcdTBjMzJcdTBjNDEiLG06Ilx1MGMxMlx1MGMxNSBcdTBjMjhcdTBjM2Zc''@;'; put 'put ''dTBjMmVcdTBjM2ZcdTBjMzdcdTBjMDIiLG1tOiIlZCBcdTBjMjhcdTBjM2ZcdTBjMmVcdTBjM2ZcdTBjMzdcdTBjM2VcdTBjMzJcdTBjNDEiLGg6Ilx1MGMxMlx1MGMxNSBcdTBjMTdcdTBjMDJcdTBjMWYiLGhoOiIlZCBcdTBjMTdcdTBjMDJcdTBjMWZcdTBjMzJcdTBjNDEiLGQ6Ilx1MGMx''@;'; put 'put ''Mlx1MGMxNSBcdTBjMzBcdTBjNGJcdTBjMWNcdTBjNDEiLGRkOiIlZCBcdTBjMzBcdTBjNGJcdTBjMWNcdTBjNDFcdTBjMzJcdTBjNDEiLE06Ilx1MGMxMlx1MGMxNSBcdTBjMjhcdTBjNDZcdTBjMzIiLE1NOiIlZCBcdTBjMjhcdTBjNDZcdTBjMzJcdTBjMzJcdTBjNDEiLHk6Ilx1MGMxMlx1''@;'; put 'put ''MGMxNSBcdTBjMzhcdTBjMDJcdTBjMzVcdTBjMjRcdTBjNGRcdTBjMzhcdTBjMzBcdTBjMDIiLHl5OiIlZCBcdTBjMzhcdTBjMDJcdTBjMzVcdTBjMjRcdTBjNGRcdTBjMzhcdTBjMzBcdTBjM2VcdTBjMzJcdTBjNDEifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHUwYzM1Lyxv''@;'; put 'put ''cmRpbmFsOiIlZFx1MGMzNSIsbWVyaWRpZW1QYXJzZTovXHUwYzMwXHUwYzNlXHUwYzI0XHUwYzRkXHUwYzMwXHUwYzNmfFx1MGMwOVx1MGMyNlx1MGMyZlx1MGMwMnxcdTBjMmVcdTBjMjdcdTBjNGRcdTBjMmZcdTBjM2VcdTBjMzlcdTBjNGRcdTBjMjhcdTBjMDJ8XHUwYzM4XHUwYzNlXHUw''@;'; put 'put ''YzJmXHUwYzAyXHUwYzI0XHUwYzRkXHUwYzMwXHUwYzAyLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24ocCxWKXtyZXR1cm4gMTI9PT1wJiYocD0wKSwiXHUwYzMwXHUwYzNlXHUwYzI0XHUwYzRkXHUwYzMwXHUwYzNmIj09PVY/cDw0P3A6cCsxMjoiXHUwYzA5XHUwYzI2XHUwYzJmXHUwYzAyIj09''@;'; put 'put ''PVY/cDoiXHUwYzJlXHUwYzI3XHUwYzRkXHUwYzJmXHUwYzNlXHUwYzM5XHUwYzRkXHUwYzI4XHUwYzAyIj09PVY/cD49MTA/cDpwKzEyOiJcdTBjMzhcdTBjM2VcdTBjMmZcdTBjMDJcdTBjMjRcdTBjNGRcdTBjMzBcdTBjMDIiPT09Vj9wKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24o''@;'; put 'put ''cCxWLHcpe3JldHVybiBwPDQ/Ilx1MGMzMFx1MGMzZVx1MGMyNFx1MGM0ZFx1MGMzMFx1MGMzZiI6cDwxMD8iXHUwYzA5XHUwYzI2XHUwYzJmXHUwYzAyIjpwPDE3PyJcdTBjMmVcdTBjMjdcdTBjNGRcdTBjMmZcdTBjM2VcdTBjMzlcdTBjNGRcdTBjMjhcdTBjMDIiOnA8MjA/Ilx1MGMzOFx1''@;'; put 'put ''MGMzZVx1MGMyZlx1MGMwMlx1MGMyNFx1MGM0ZFx1MGMzMFx1MGMwMiI6Ilx1MGMzMFx1MGMzZVx1MGMyNFx1MGM0ZFx1MGMzMFx1MGMzZiJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShiKDk3NTg2KSl9LDMyMTQ4OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNzE5OTMpLF89Yig3''@;'; put 'put ''MDQ2MykscD1iKDI3MDU0KS5CdWZmZXIsVj1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4''@;'; put 'put ''OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwz''@;'; put 'put ''MzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3''@;'; put 'put ''NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIs''@;'; put 'put ''MjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XSx3PW5ldyBBcnJheSg2NCk7ZnVuY3Rpb24gUCgpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dyxfLmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gRihaLFksVyl7cmV0dXJuIFdeWiYoWV5XKX1mdW5j''@;'; put 'put ''dGlvbiBSKFosWSxXKXtyZXR1cm4gWiZZfFcmKFp8WSl9ZnVuY3Rpb24geihaKXtyZXR1cm4oWj4+PjJ8Wjw8MzApXihaPj4+MTN8Wjw8MTkpXihaPj4+MjJ8Wjw8MTApfWZ1bmN0aW9uIE4oWil7cmV0dXJuKFo+Pj42fFo8PDI2KV4oWj4+PjExfFo8PDIxKV4oWj4+PjI1fFo8PDcpfWZ1bmN0''@;'; put 'put ''aW9uIE8oWil7cmV0dXJuKFo+Pj43fFo8PDI1KV4oWj4+PjE4fFo8PDE0KV5aPj4+M31mdW5jdGlvbiBLKFope3JldHVybihaPj4+MTd8Wjw8MTUpXihaPj4+MTl8Wjw8MTMpXlo+Pj4xMH1JKFAsXyksUC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3NzkwMzM3''@;'; put 'put ''MDMsdGhpcy5fYj0zMTQ0MTM0Mjc3LHRoaXMuX2M9MTAxMzkwNDI0Mix0aGlzLl9kPTI3NzM0ODA3NjIsdGhpcy5fZT0xMzU5ODkzMTE5LHRoaXMuX2Y9MjYwMDgyMjkyNCx0aGlzLl9nPTUyODczNDYzNSx0aGlzLl9oPTE1NDE0NTkyMjUsdGhpc30sUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5j''@;'; put 'put ''dGlvbihaKXtmb3IodmFyIFk9dGhpcy5fdyxXPTB8dGhpcy5fYSxxPTB8dGhpcy5fYixlZT0wfHRoaXMuX2MsSj0wfHRoaXMuX2QscmU9MHx0aGlzLl9lLGllPTB8dGhpcy5fZix1ZT0wfHRoaXMuX2csZ2U9MHx0aGlzLl9oLF9lPTA7X2U8MTY7KytfZSlZW19lXT1aLnJlYWRJbnQzMkJFKDQq''@;'; put 'put ''X2UpO2Zvcig7X2U8NjQ7KytfZSlZW19lXT1LKFlbX2UtMl0pK1lbX2UtN10rTyhZW19lLTE1XSkrWVtfZS0xNl18MDtmb3IodmFyIFRlPTA7VGU8NjQ7KytUZSl7dmFyIE1lPWdlK04ocmUpK0YocmUsaWUsdWUpK1ZbVGVdK1lbVGVdfDAsWmU9eihXKStSKFcscSxlZSl8MDtnZT11ZSx1ZT1p''@;'; put 'put ''ZSxpZT1yZSxyZT1KK01lfDAsSj1lZSxlZT1xLHE9VyxXPU1lK1plfDB9dGhpcy5fYT1XK3RoaXMuX2F8MCx0aGlzLl9iPXErdGhpcy5fYnwwLHRoaXMuX2M9ZWUrdGhpcy5fY3wwLHRoaXMuX2Q9Sit0aGlzLl9kfDAsdGhpcy5fZT1yZSt0aGlzLl9lfDAsdGhpcy5fZj1pZSt0aGlzLl9mfDAs''@;'; put 'put ''dGhpcy5fZz11ZSt0aGlzLl9nfDAsdGhpcy5faD1nZSt0aGlzLl9ofDB9LFAucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIFo9cC5hbGxvY1Vuc2FmZSgzMik7cmV0dXJuIFoud3JpdGVJbnQzMkJFKHRoaXMuX2EsMCksWi53cml0ZUludDMyQkUodGhpcy5fYiw0KSxaLndyaXRlSW50''@;'; put 'put ''MzJCRSh0aGlzLl9jLDgpLFoud3JpdGVJbnQzMkJFKHRoaXMuX2QsMTIpLFoud3JpdGVJbnQzMkJFKHRoaXMuX2UsMTYpLFoud3JpdGVJbnQzMkJFKHRoaXMuX2YsMjApLFoud3JpdGVJbnQzMkJFKHRoaXMuX2csMjQpLFoud3JpdGVJbnQzMkJFKHRoaXMuX2gsMjgpLFp9LGNlLmV4cG9ydHM9''@;'; put 'put ''UH0sMzI2MjE6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXtzczoic2VrdW5kZXNfc2VrdW5kXHUwMTEzbV9zZWt1bmRlX3Nla3VuZGVzIi5zcGxpdCgiXyIpLG06Im1pblx1MDE2YnRlc19taW5cdTAxNmJ0XHUwMTEzbV9taW5cdTAxNmJ0ZV9taW5c''@;'; put 'put ''dTAxNmJ0ZXMiLnNwbGl0KCJfIiksbW06Im1pblx1MDE2YnRlc19taW5cdTAxNmJ0XHUwMTEzbV9taW5cdTAxNmJ0ZV9taW5cdTAxNmJ0ZXMiLnNwbGl0KCJfIiksaDoic3R1bmRhc19zdHVuZFx1MDEwMW1fc3R1bmRhX3N0dW5kYXMiLnNwbGl0KCJfIiksaGg6InN0dW5kYXNfc3R1bmRcdTAx''@;'; put 'put ''MDFtX3N0dW5kYV9zdHVuZGFzIi5zcGxpdCgiXyIpLGQ6ImRpZW5hc19kaWVuXHUwMTAxbV9kaWVuYV9kaWVuYXMiLnNwbGl0KCJfIiksZGQ6ImRpZW5hc19kaWVuXHUwMTAxbV9kaWVuYV9kaWVuYXMiLnNwbGl0KCJfIiksTToibVx1MDExM25lXHUwMTYxYV9tXHUwMTEzbmVcdTAxNjFpZW1f''@;'; put 'put ''bVx1MDExM25lc2lzX21cdTAxMTNuZVx1MDE2MWkiLnNwbGl0KCJfIiksTU06Im1cdTAxMTNuZVx1MDE2MWFfbVx1MDExM25lXHUwMTYxaWVtX21cdTAxMTNuZXNpc19tXHUwMTEzbmVcdTAxNjFpIi5zcGxpdCgiXyIpLHk6ImdhZGFfZ2FkaWVtX2dhZHNfZ2FkaSIuc3BsaXQoIl8iKSx5eToi''@;'; put 'put ''Z2FkYV9nYWRpZW1fZ2Fkc19nYWRpIi5zcGxpdCgiXyIpfTtmdW5jdGlvbiBwKFIseixOKXtyZXR1cm4gTj96JTEwPT0xJiZ6JTEwMCE9MTE/UlsyXTpSWzNdOnolMTA9PTEmJnolMTAwIT0xMT9SWzBdOlJbMV19ZnVuY3Rpb24gVihSLHosTil7cmV0dXJuIFIrIiAiK3AoX1tOXSxSLHopfWZ1''@;'; put 'put ''bmN0aW9uIHcoUix6LE4pe3JldHVybiBwKF9bTl0sUix6KX1JLmRlZmluZUxvY2FsZSgibHYiLHttb250aHM6ImphbnZcdTAxMDFyaXNfZmVicnVcdTAxMDFyaXNfbWFydHNfYXByXHUwMTJibGlzX21haWpzX2pcdTAxNmJuaWpzX2pcdTAxNmJsaWpzX2F1Z3VzdHNfc2VwdGVtYnJpc19va3Rv''@;'; put 'put ''YnJpc19ub3ZlbWJyaXNfZGVjZW1icmlzIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcl9hcHJfbWFpX2pcdTAxNmJuX2pcdTAxNmJsX2F1Z19zZXBfb2t0X25vdl9kZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6InN2XHUwMTEzdGRpZW5hX3Bpcm1kaWVuYV9vdHJkaWVuYV90''@;'; put 'put ''cmVcdTAxNjFkaWVuYV9jZXR1cnRkaWVuYV9waWVrdGRpZW5hX3Nlc3RkaWVuYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdl9QX09fVF9DX1BrX1MiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN2X1BfT19UX0NfUGtfUyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAs''@;'; put 'put ''bG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWS4iLExMOiJZWVlZLiBbZ2FkYV0gRC4gTU1NTSIsTExMOiJZWVlZLiBbZ2FkYV0gRC4gTU1NTSwgSEg6bW0iLExMTEw6IllZWVkuIFtnYWRhXSBELiBNTU1NLCBkZGRkLCBISDptbSJ9LGNhbGVu''@;'; put 'put ''ZGFyOntzYW1lRGF5OiJbXHUwMTYwb2RpZW4gcHVsa3N0ZW5dIExUIixuZXh0RGF5OiJbUlx1MDEyYnQgcHVsa3N0ZW5dIExUIixuZXh0V2VlazoiZGRkZCBbcHVsa3N0ZW5dIExUIixsYXN0RGF5OiJbVmFrYXIgcHVsa3N0ZW5dIExUIixsYXN0V2VlazoiW1BhZ1x1MDEwMWp1XHUwMTYxXHUw''@;'; put 'put ''MTAxXSBkZGRkIFtwdWxrc3Rlbl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InBcdTAxMTNjICVzIixwYXN0OiJwaXJtcyAlcyIsczpmdW5jdGlvbiBQKFIseil7cmV0dXJuIHo/ImRhXHUwMTdlYXMgc2VrdW5kZXMiOiJkYVx1MDE3ZVx1MDEwMW0gc2VrdW5kXHUw''@;'; put 'put ''MTEzbSJ9LHNzOlYsbTp3LG1tOlYsaDp3LGhoOlYsZDp3LGRkOlYsTTp3LE1NOlYseTp3LHl5OlZ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSwzMjYzMzooY2UsWCxiKT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgST1iKDE5MTUwKTtjZS5leHBvcnRzPWZ1bmN0aW9uKF8pe3JldHVybiJvYmplY3QiPT10eXBlb2YgXz9udWxsIT09XzpJKF8pfX0sMzI2NDc6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJlbi1zZyIse21vbnRoczoi''@;'; put 'put ''SmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2Vf''@;'; put 'put ''VGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1l''@;'; put 'put ''RGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6''@;'; put 'put ''ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJh''@;'; put 'put ''IHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKHApe3ZhciBWPXAlMTA7cmV0dXJuIHArKDE9PX5+KHAlMTAwLzEwKT8idGgiOjE9PT1WPyJzdCI6Mj09PVY/Im5kIjozPT09Vj8icmQiOiJ0''@;'; put 'put ''aCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSwzMjkzMDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDEyMjAyKSxfPWIoMzhlMykscD1iKDM2Njc4KSxWPWIoNDY4KSx3PWIoMjE2MTIpLFA9Yig0ODYzOSksRj1iKDYwMzIxKSxSPWIoMTcyOTYpLHo9YigzOTEx''@;'; put 'put ''NiksTj1iKDY0ODU1KSxPPWIoMjIzMDQpLEs9Yig0NjM4NyksWj1iKDg4Nzg4KTtjZS5leHBvcnRzPWZ1bmN0aW9uKFksVyxxLGVlKXt2YXIgSj0ic3RhY2tUcmFjZUxpbWl0IixyZT1lZT8yOjEsaWU9WS5zcGxpdCgiLiIpLHVlPWllW2llLmxlbmd0aC0xXSxnZT1JLmFwcGx5KG51bGwsaWUp''@;'; put 'put ''O2lmKGdlKXt2YXIgX2U9Z2UucHJvdG90eXBlO2lmKCFaJiZfKF9lLCJjYXVzZSIpJiZkZWxldGUgX2UuY2F1c2UsIXEpcmV0dXJuIGdlO3ZhciBUZT1JKCJFcnJvciIpLE1lPVcoZnVuY3Rpb24oWmUsQil7dmFyIGc9eihlZT9COlplLHZvaWQgMCkseT1lZT9uZXcgZ2UoWmUpOm5ldyBnZTty''@;'; put 'put ''ZXR1cm4gdm9pZCAwIT09ZyYmcCh5LCJtZXNzYWdlIixnKSxPKHksTWUseS5zdGFjaywyKSx0aGlzJiZWKF9lLHRoaXMpJiZSKHksdGhpcyxNZSksYXJndW1lbnRzLmxlbmd0aD5yZSYmTih5LGFyZ3VtZW50c1tyZV0pLHl9KTtpZihNZS5wcm90b3R5cGU9X2UsIkVycm9yIiE9PXVlP3c/dyhN''@;'; put 'put ''ZSxUZSk6UChNZSxUZSx7bmFtZTohMH0pOksmJkogaW4gZ2UmJihGKE1lLGdlLEopLEYoTWUsZ2UsInByZXBhcmVTdGFja1RyYWNlIikpLFAoTWUsZ2UpLCFaKXRyeXtfZS5uYW1lIT09dWUmJnAoX2UsIm5hbWUiLHVlKSxfZS5jb25zdHJ1Y3Rvcj1NZX1jYXRjaHt9cmV0dXJuIE1lfX19LDMz''@;'; put 'put ''MTA4OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwNjYxIiwyOiJcdTA2NjIiLDM6Ilx1MDY2MyIsNDoiXHUwNjY0Iiw1OiJcdTA2NjUiLDY6Ilx1MDY2NiIsNzoiXHUwNjY3Iiw4OiJcdTA2NjgiLDk6Ilx1MDY2OSIsMDoiXHUwNjYwIn0s''@;'; put 'put ''cD17Ilx1MDY2MSI6IjEiLCJcdTA2NjIiOiIyIiwiXHUwNjYzIjoiMyIsIlx1MDY2NCI6IjQiLCJcdTA2NjUiOiI1IiwiXHUwNjY2IjoiNiIsIlx1MDY2NyI6IjciLCJcdTA2NjgiOiI4IiwiXHUwNjY5IjoiOSIsIlx1MDY2MCI6IjAifSxWPWZ1bmN0aW9uKHope3JldHVybiAwPT09ej8wOjE9''@;'; put 'put ''PT16PzE6Mj09PXo/Mjp6JTEwMD49MyYmeiUxMDA8PTEwPzM6eiUxMDA+PTExPzQ6NX0sdz17czpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IiwiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IFx1MDY0OFx1MDYy''@;'; put 'put ''N1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IiwiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2''@;'; put 'put ''XHUwNjRhXHUwNjI5IiwiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5Il0sbTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IiwiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IFx1MDY0OFx1MDYyN1x1''@;'; put 'put ''MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIiwiJWQgXHUwNjJmXHUwNjQyXHUw''@;'; put 'put ''NjRhXHUwNjQyXHUwNjI5IiwiJWQgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5Il0saDpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYy''@;'; put 'put ''Zlx1MDYyOSIsWyJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIiwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiJWQgXHUwNjMz''@;'; put 'put ''XHUwNjI3XHUwNjM5XHUwNjI5Il0sZDpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjRhXHUwNjQ4XHUwNjQ1IiwiXHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2NGFcdTA2NDhcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2NGFc''@;'; put 'put ''dTA2NDhcdTA2NDVcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IiwiJWQgXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjRhXHUwNjQ4XHUwNjQ1Il0sTTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjM0XHUwNjQ3''@;'; put 'put ''XHUwNjMxIiwiXHUwNjM0XHUwNjQ3XHUwNjMxIFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzRcdTA2NDdcdTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2MzRcdTA2NDdcdTA2MzFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIiwiJWQgXHUwNjM0XHUw''@;'; put 'put ''NjQ3XHUwNjMxXHUwNjI3IiwiJWQgXHUwNjM0XHUwNjQ3XHUwNjMxIl0seTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjM5XHUwNjI3XHUwNjQ1IiwiXHUwNjM5XHUwNjI3XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzlcdTA2MjdcdTA2NDVc''@;'; put 'put ''dTA2MjdcdTA2NDYiLCJcdTA2MzlcdTA2MjdcdTA2NDVcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM5XHUwNjQ4XHUwNjI3XHUwNjQ1IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1Il19LFA9ZnVuY3Rpb24oeil7cmV0dXJu''@;'; put 'put ''IGZ1bmN0aW9uKE4sTyxLLFope3ZhciBZPVYoTiksVz13W3pdW1YoTildO3JldHVybiAyPT09WSYmKFc9V1tPPzA6MV0pLFcucmVwbGFjZSgvJWQvaSxOKX19LEY9WyJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzEiLCJcdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzEi''@;'; put 'put ''LCJcdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzMiLCJcdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDQiLCJcdTA2NDVcdTA2MjdcdTA2NGFcdTA2NDgiLCJcdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDgiLCJcdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDgiLCJcdTA2MjNcdTA2''@;'; put 'put ''M2FcdTA2MzNcdTA2MzdcdTA2MzMiLCJcdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzEiLCJcdTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVc''@;'; put 'put ''dTA2MjhcdTA2MzEiXTtJLmRlZmluZUxvY2FsZSgiYXIiLHttb250aHM6Rixtb250aHNTaG9ydDpGLHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0''@;'; put 'put ''NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2''@;'; put 'put ''MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIx''@;'; put 'put ''X1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQ''@;'; put 'put ''YXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkQvXHUyMDBmTS9cdTIwMGZZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNl''@;'; put 'put ''Oi9cdTA2MzV8XHUwNjQ1Lyxpc1BNOmZ1bmN0aW9uKHope3JldHVybiJcdTA2NDUiPT09en0sbWVyaWRpZW06ZnVuY3Rpb24oeixOLE8pe3JldHVybiB6PDEyPyJcdTA2MzUiOiJcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2''@;'; put 'put ''MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDY0Ylx1MDYyNyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRk''@;'; put 'put ''ZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2Vlazoi''@;'; put 'put ''ZGRkZCBbXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDYyOFx1MDYzOVx1MDYyZiAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOlAoInMiKSxz''@;'; put 'put ''czpQKCJzIiksbTpQKCJtIiksbW06UCgibSIpLGg6UCgiaCIpLGhoOlAoImgiKSxkOlAoImQiKSxkZDpQKCJkIiksTTpQKCJNIiksTU06UCgiTSIpLHk6UCgieSIpLHl5OlAoInkiKX0scHJlcGFyc2U6ZnVuY3Rpb24oeil7cmV0dXJuIHoucmVwbGFjZSgvW1x1MDY2MVx1MDY2Mlx1MDY2M1x1''@;'; put 'put ''MDY2NFx1MDY2NVx1MDY2Nlx1MDY2N1x1MDY2OFx1MDY2OVx1MDY2MF0vZyxmdW5jdGlvbihOKXtyZXR1cm4gcFtOXX0pLnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oeil7cmV0dXJuIHoucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihOKXtyZXR1cm4gX1tOXX0p''@;'; put 'put ''LnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2Rvdzo2LGRveToxMn19KX0oYig5NzU4NikpfSwzMzQ2ODooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDY4MjgzKSxfPWIoMTI5MDEpLHA9Yig5NTU0MiksVj1JLnJvdGwzMix3PUkuc3VtMzIsUD1JLnN1bTMyXzUsRj1wLmZ0''@;'; put 'put ''XzEsUj1fLkJsb2NrSGFzaCx6PVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwzMzk1NDY5NzgyXTtmdW5jdGlvbiBOKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgTikpcmV0dXJuIG5ldyBOO1IuY2FsbCh0aGlzKSx0aGlzLmg9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgz''@;'; put 'put ''MTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXSx0aGlzLlc9bmV3IEFycmF5KDgwKX1JLmluaGVyaXRzKE4sUiksY2UuZXhwb3J0cz1OLE4uYmxvY2tTaXplPTUxMixOLm91dFNpemU9MTYwLE4uaG1hY1N0cmVuZ3RoPTgwLE4ucGFkTGVuZ3RoPTY0LE4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rp''@;'; put 'put ''b24oSyxaKXtmb3IodmFyIFk9dGhpcy5XLFc9MDtXPDE2O1crKylZW1ddPUtbWitXXTtmb3IoO1c8WS5sZW5ndGg7VysrKVlbV109VihZW1ctM11eWVtXLThdXllbVy0xNF1eWVtXLTE2XSwxKTt2YXIgcT10aGlzLmhbMF0sZWU9dGhpcy5oWzFdLEo9dGhpcy5oWzJdLHJlPXRoaXMuaFszXSxp''@;'; put 'put ''ZT10aGlzLmhbNF07Zm9yKFc9MDtXPFkubGVuZ3RoO1crKyl7dmFyIHVlPX5+KFcvMjApLGdlPVAoVihxLDUpLEYodWUsZWUsSixyZSksaWUsWVtXXSx6W3VlXSk7aWU9cmUscmU9SixKPVYoZWUsMzApLGVlPXEscT1nZX10aGlzLmhbMF09dyh0aGlzLmhbMF0scSksdGhpcy5oWzFdPXcodGhp''@;'; put 'put ''cy5oWzFdLGVlKSx0aGlzLmhbMl09dyh0aGlzLmhbMl0sSiksdGhpcy5oWzNdPXcodGhpcy5oWzNdLHJlKSx0aGlzLmhbNF09dyh0aGlzLmhbNF0saWUpfSxOLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKEspe3JldHVybiJoZXgiPT09Sz9JLnRvSGV4MzIodGhpcy5oLCJiaWciKTpJLnNw''@;'; put 'put ''bGl0MzIodGhpcy5oLCJiaWciKX19LDMzNTI2OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgibG8iLHttb250aHM6Ilx1MGVhMVx1MGViMVx1MGU4N1x1MGU4MVx1MGVhZFx1MGU5OV9cdTBlODFcdTBlYjhcdTBlYTFcdTBlOWVcdTBl''@;'; put 'put ''YjJfXHUwZWExXHUwZWI1XHUwZTk5XHUwZWIyX1x1MGVjMFx1MGVhMVx1MGVhYVx1MGViMl9cdTBlOWVcdTBlYjZcdTBlOTRcdTBlYWFcdTBlYjBcdTBlOWVcdTBlYjJfXHUwZWExXHUwZWI0XHUwZTk2XHUwZWI4XHUwZTk5XHUwZWIyX1x1MGU4MVx1MGVjZFx1MGVhNVx1MGViMFx1MGU4MVx1''@;'; put 'put ''MGViYlx1MGU5NF9cdTBlYWFcdTBlYjRcdTBlODdcdTBlYWJcdTBlYjJfXHUwZTgxXHUwZWIxXHUwZTk5XHUwZThkXHUwZWIyX1x1MGU5NVx1MGViOFx1MGVhNVx1MGViMl9cdTBlOWVcdTBlYjBcdTBlODhcdTBlYjRcdTBlODFfXHUwZTk3XHUwZWIxXHUwZTk5XHUwZWE3XHUwZWIyIi5zcGxp''@;'; put 'put ''dCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBlYTFcdTBlYjFcdTBlODdcdTBlODFcdTBlYWRcdTBlOTlfXHUwZTgxXHUwZWI4XHUwZWExXHUwZTllXHUwZWIyX1x1MGVhMVx1MGViNVx1MGU5OVx1MGViMl9cdTBlYzBcdTBlYTFcdTBlYWFcdTBlYjJfXHUwZTllXHUwZWI2XHUwZTk0XHUwZWFhXHUw''@;'; put 'put ''ZWIwXHUwZTllXHUwZWIyX1x1MGVhMVx1MGViNFx1MGU5Nlx1MGViOFx1MGU5OVx1MGViMl9cdTBlODFcdTBlY2RcdTBlYTVcdTBlYjBcdTBlODFcdTBlYmJcdTBlOTRfXHUwZWFhXHUwZWI0XHUwZTg3XHUwZWFiXHUwZWIyX1x1MGU4MVx1MGViMVx1MGU5OVx1MGU4ZFx1MGViMl9cdTBlOTVc''@;'; put 'put ''dTBlYjhcdTBlYTVcdTBlYjJfXHUwZTllXHUwZWIwXHUwZTg4XHUwZWI0XHUwZTgxX1x1MGU5N1x1MGViMVx1MGU5OVx1MGVhN1x1MGViMiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwZWFkXHUwZWIyXHUwZTk3XHUwZWI0XHUwZTk0X1x1MGU4OFx1MGViMVx1MGU5OV9cdTBlYWRcdTBlYjFc''@;'; put 'put ''dTBlODdcdTBlODRcdTBlYjJcdTBlOTlfXHUwZTllXHUwZWI4XHUwZTk0X1x1MGU5ZVx1MGViMFx1MGVhYlx1MGViMVx1MGU5NF9cdTBlYWFcdTBlYjhcdTBlODFfXHUwZWMwXHUwZWFhXHUwZWJiXHUwZWIyIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MGU5N1x1MGViNFx1MGU5NF9c''@;'; put 'put ''dTBlODhcdTBlYjFcdTBlOTlfXHUwZWFkXHUwZWIxXHUwZTg3XHUwZTg0XHUwZWIyXHUwZTk5X1x1MGU5ZVx1MGViOFx1MGU5NF9cdTBlOWVcdTBlYjBcdTBlYWJcdTBlYjFcdTBlOTRfXHUwZWFhXHUwZWI4XHUwZTgxX1x1MGVjMFx1MGVhYVx1MGViYlx1MGViMiIuc3BsaXQoIl8iKSx3ZWVr''@;'; put 'put ''ZGF5c01pbjoiXHUwZTk3X1x1MGU4OF9cdTBlYWRcdTBlODRfXHUwZTllX1x1MGU5ZVx1MGVhYl9cdTBlYWFcdTBlODFfXHUwZWFhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZ''@;'; put 'put ''IixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6Ilx1MGVhN1x1MGViMVx1MGU5OWRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTBlOTVcdTBlYWRcdTBlOTlcdTBlYzBcdTBlOGFcdTBlYmJcdTBlYzlcdTBlYjJ8XHUwZTk1XHUw''@;'; put 'put ''ZWFkXHUwZTk5XHUwZWMxXHUwZWE1XHUwZTg3Lyxpc1BNOmZ1bmN0aW9uKHApe3JldHVybiJcdTBlOTVcdTBlYWRcdTBlOTlcdTBlYzFcdTBlYTVcdTBlODciPT09cH0sbWVyaWRpZW06ZnVuY3Rpb24ocCxWLHcpe3JldHVybiBwPDEyPyJcdTBlOTVcdTBlYWRcdTBlOTlcdTBlYzBcdTBlOGFc''@;'; put 'put ''dTBlYmJcdTBlYzlcdTBlYjIiOiJcdTBlOTVcdTBlYWRcdTBlOTlcdTBlYzFcdTBlYTVcdTBlODcifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGVhMVx1MGViN1x1MGVjOVx1MGU5OVx1MGViNVx1MGVjOVx1MGVjMFx1MGVhN1x1MGVhNVx1MGViMl0gTFQiLG5leHREYXk6IltcdTBlYTFcdTBl''@;'; put 'put ''YjdcdTBlYzlcdTBlYWRcdTBlYjdcdTBlYzhcdTBlOTlcdTBlYzBcdTBlYTdcdTBlYTVcdTBlYjJdIExUIixuZXh0V2VlazoiW1x1MGVhN1x1MGViMVx1MGU5OV1kZGRkW1x1MGVkY1x1MGVjOVx1MGViMlx1MGVjMFx1MGVhN1x1MGVhNVx1MGViMl0gTFQiLGxhc3REYXk6IltcdTBlYTFcdTBl''@;'; put 'put ''YjdcdTBlYzlcdTBlYTdcdTBlYjJcdTBlOTlcdTBlOTlcdTBlYjVcdTBlYzlcdTBlYzBcdTBlYTdcdTBlYTVcdTBlYjJdIExUIixsYXN0V2VlazoiW1x1MGVhN1x1MGViMVx1MGU5OV1kZGRkW1x1MGVjMVx1MGVhNVx1MGVjOVx1MGVhN1x1MGU5OVx1MGViNVx1MGVjOVx1MGVjMFx1MGVhN1x1''@;'; put 'put ''MGVhNVx1MGViMl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MGVhZFx1MGViNVx1MGU4MSAlcyIscGFzdDoiJXNcdTBlOWNcdTBlYzhcdTBlYjJcdTBlOTlcdTBlYTFcdTBlYjIiLHM6Ilx1MGU5YVx1MGVjZFx1MGVjOFx1MGVjMFx1MGU5N1x1MGViYlx1MGVj''@;'; put 'put ''OFx1MGViMlx1MGVjM1x1MGU5NFx1MGVhN1x1MGViNFx1MGU5OVx1MGViMlx1MGU5N1x1MGViNSIsc3M6IiVkIFx1MGVhN1x1MGViNFx1MGU5OVx1MGViMlx1MGU5N1x1MGViNSIsbToiMSBcdTBlOTlcdTBlYjJcdTBlOTdcdTBlYjUiLG1tOiIlZCBcdTBlOTlcdTBlYjJcdTBlOTdcdTBlYjUi''@;'; put 'put ''LGg6IjEgXHUwZThhXHUwZWJiXHUwZWM4XHUwZWE3XHUwZWMyXHUwZWExXHUwZTg3IixoaDoiJWQgXHUwZThhXHUwZWJiXHUwZWM4XHUwZWE3XHUwZWMyXHUwZWExXHUwZTg3IixkOiIxIFx1MGVhMVx1MGViN1x1MGVjOSIsZGQ6IiVkIFx1MGVhMVx1MGViN1x1MGVjOSIsTToiMSBcdTBlYzBc''@;'; put 'put ''dTBlOTRcdTBlYjdcdTBlYWRcdTBlOTkiLE1NOiIlZCBcdTBlYzBcdTBlOTRcdTBlYjdcdTBlYWRcdTBlOTkiLHk6IjEgXHUwZTliXHUwZWI1Iix5eToiJWQgXHUwZTliXHUwZWI1In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovKFx1MGU5N1x1MGViNVx1MGVjOClcZHsxLDJ9LyxvcmRpbmFs''@;'; put 'put ''OmZ1bmN0aW9uKHApe3JldHVybiJcdTBlOTdcdTBlYjVcdTBlYzgiK3B9fSl9KGIoOTc1ODYpKX0sMzM1NTY6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig1MjUyOSksXz1iKDIxODMyKSxwPWIoMzkyMTApO2Z1bmN0aW9uIFYodyl7aWYoISh0aGlzIGluc3RhbmNlb2YgVikpcmV0''@;'; put 'put ''dXJuIG5ldyBWKHcpO3RoaXMuaGFzaD13Lmhhc2gsdGhpcy5wcmVkUmVzaXN0PSEhdy5wcmVkUmVzaXN0LHRoaXMub3V0TGVuPXRoaXMuaGFzaC5vdXRTaXplLHRoaXMubWluRW50cm9weT13Lm1pbkVudHJvcHl8fHRoaXMuaGFzaC5obWFjU3RyZW5ndGgsdGhpcy5fcmVzZWVkPW51bGwsdGhp''@;'; put 'put ''cy5yZXNlZWRJbnRlcnZhbD1udWxsLHRoaXMuSz1udWxsLHRoaXMuVj1udWxsO3ZhciBQPV8udG9BcnJheSh3LmVudHJvcHksdy5lbnRyb3B5RW5jfHwiaGV4IiksRj1fLnRvQXJyYXkody5ub25jZSx3Lm5vbmNlRW5jfHwiaGV4IiksUj1fLnRvQXJyYXkody5wZXJzLHcucGVyc0VuY3x8Imhl''@;'; put 'put ''eCIpO3AoUC5sZW5ndGg+PXRoaXMubWluRW50cm9weS84LCJOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6ICIrdGhpcy5taW5FbnRyb3B5KyIgYml0cyIpLHRoaXMuX2luaXQoUCxGLFIpfWNlLmV4cG9ydHM9VixWLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihQLEYsUil7dmFyIHo9''@;'; put 'put ''UC5jb25jYXQoRikuY29uY2F0KFIpO3RoaXMuSz1uZXcgQXJyYXkodGhpcy5vdXRMZW4vOCksdGhpcy5WPW5ldyBBcnJheSh0aGlzLm91dExlbi84KTtmb3IodmFyIE49MDtOPHRoaXMuVi5sZW5ndGg7TisrKXRoaXMuS1tOXT0wLHRoaXMuVltOXT0xO3RoaXMuX3VwZGF0ZSh6KSx0aGlzLl9y''@;'; put 'put ''ZXNlZWQ9MSx0aGlzLnJlc2VlZEludGVydmFsPTI4MTQ3NDk3NjcxMDY1Nn0sVi5wcm90b3R5cGUuX2htYWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEkuaG1hYyh0aGlzLmhhc2gsdGhpcy5LKX0sVi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihQKXt2YXIgRj10aGlzLl9obWFjKCkudXBk''@;'; put 'put ''YXRlKHRoaXMuVikudXBkYXRlKFswXSk7UCYmKEY9Ri51cGRhdGUoUCkpLHRoaXMuSz1GLmRpZ2VzdCgpLHRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCksUCYmKHRoaXMuSz10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikudXBkYXRlKFsxXSkudXBkYXRlKFAp''@;'; put 'put ''LmRpZ2VzdCgpLHRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCkpfSxWLnByb3RvdHlwZS5yZXNlZWQ9ZnVuY3Rpb24oUCxGLFIseil7InN0cmluZyIhPXR5cGVvZiBGJiYoej1SLFI9RixGPW51bGwpLFA9Xy50b0FycmF5KFAsRiksUj1fLnRvQXJyYXkoUix6KSxw''@;'; put 'put ''KFAubGVuZ3RoPj10aGlzLm1pbkVudHJvcHkvOCwiTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiAiK3RoaXMubWluRW50cm9weSsiIGJpdHMiKSx0aGlzLl91cGRhdGUoUC5jb25jYXQoUnx8W10pKSx0aGlzLl9yZXNlZWQ9MX0sVi5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24o''@;'; put 'put ''UCxGLFIseil7aWYodGhpcy5fcmVzZWVkPnRoaXMucmVzZWVkSW50ZXJ2YWwpdGhyb3cgbmV3IEVycm9yKCJSZXNlZWQgaXMgcmVxdWlyZWQiKTsic3RyaW5nIiE9dHlwZW9mIEYmJih6PVIsUj1GLEY9bnVsbCksUiYmKFI9Xy50b0FycmF5KFIsenx8ImhleCIpLHRoaXMuX3VwZGF0ZShSKSk7''@;'; put 'put ''Zm9yKHZhciBOPVtdO04ubGVuZ3RoPFA7KXRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCksTj1OLmNvbmNhdCh0aGlzLlYpO3ZhciBPPU4uc2xpY2UoMCxQKTtyZXR1cm4gdGhpcy5fdXBkYXRlKFIpLHRoaXMuX3Jlc2VlZCsrLF8uZW5jb2RlKE8sRil9fSwzMzk1''@;'; put 'put ''ODpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89Im5vbGxhIHlrc2kga2Frc2kga29sbWUgbmVsalx4ZTQgdmlpc2kga3V1c2kgc2VpdHNlbVx4ZTRuIGthaGRla3NhbiB5aGRla3NceGU0biIuc3BsaXQoIiAiKSxwPVsibm9sbGEiLCJ5aGRlbiIsImth''@;'; put 'put ''aGRlbiIsImtvbG1lbiIsIm5lbGpceGU0biIsInZpaWRlbiIsImt1dWRlbiIsX1s3XSxfWzhdLF9bOV1dO2Z1bmN0aW9uIFYoRixSLHosTil7dmFyIE89IiI7c3dpdGNoKHope2Nhc2UicyI6cmV0dXJuIE4/Im11dXRhbWFuIHNla3VubmluIjoibXV1dGFtYSBzZWt1bnRpIjtjYXNlInNzIjpP''@;'; put 'put ''PU4/InNla3VubmluIjoic2VrdW50aWEiO2JyZWFrO2Nhc2UibSI6cmV0dXJuIE4/Im1pbnV1dGluIjoibWludXV0dGkiO2Nhc2UibW0iOk89Tj8ibWludXV0aW4iOiJtaW51dXR0aWEiO2JyZWFrO2Nhc2UiaCI6cmV0dXJuIE4/InR1bm5pbiI6InR1bnRpIjtjYXNlImhoIjpPPU4/InR1bm5p''@;'; put 'put ''biI6InR1bnRpYSI7YnJlYWs7Y2FzZSJkIjpyZXR1cm4gTj8icFx4ZTRpdlx4ZTRuIjoicFx4ZTRpdlx4ZTQiO2Nhc2UiZGQiOk89Tj8icFx4ZTRpdlx4ZTRuIjoicFx4ZTRpdlx4ZTRceGU0IjticmVhaztjYXNlIk0iOnJldHVybiBOPyJrdXVrYXVkZW4iOiJrdXVrYXVzaSI7Y2FzZSJNTSI6''@;'; put 'put ''Tz1OPyJrdXVrYXVkZW4iOiJrdXVrYXV0dGEiO2JyZWFrO2Nhc2UieSI6cmV0dXJuIE4/InZ1b2RlbiI6InZ1b3NpIjtjYXNlInl5IjpPPU4/InZ1b2RlbiI6InZ1b3R0YSJ9cmV0dXJuIGZ1bmN0aW9uIHcoRixSKXtyZXR1cm4gRjwxMD9SP3BbRl06X1tGXTpGfShGLE4pKyIgIitPfUkuZGVm''@;'; put 'put ''aW5lTG9jYWxlKCJmaSIse21vbnRoczoidGFtbWlrdXVfaGVsbWlrdXVfbWFhbGlza3V1X2h1aHRpa3V1X3RvdWtva3V1X2tlc1x4ZTRrdXVfaGVpblx4ZTRrdXVfZWxva3V1X3N5eXNrdXVfbG9rYWt1dV9tYXJyYXNrdXVfam91bHVrdXUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6InRhbW1p''@;'; put 'put ''X2hlbG1pX21hYWxpc19odWh0aV90b3Vrb19rZXNceGU0X2hlaW5ceGU0X2Vsb19zeXlzX2xva2FfbWFycmFzX2pvdWx1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzdW5udW50YWlfbWFhbmFudGFpX3RpaXN0YWlfa2Vza2l2aWlra29fdG9yc3RhaV9wZXJqYW50YWlfbGF1YW50YWkiLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXNTaG9ydDoic3VfbWFfdGlfa2VfdG9fcGVfbGEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InN1X21hX3RpX2tlX3RvX3BlX2xhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkRELk1NLllZWVkiLExMOiJEbyBN''@;'; put 'put ''TU1NW3RhXSBZWVlZIixMTEw6IkRvIE1NTU1bdGFdIFlZWVksIFtrbG9dIEhILm1tIixMTExMOiJkZGRkLCBEbyBNTU1NW3RhXSBZWVlZLCBba2xvXSBISC5tbSIsbDoiRC5NLllZWVkiLGxsOiJEbyBNTU0gWVlZWSIsbGxsOiJEbyBNTU0gWVlZWSwgW2tsb10gSEgubW0iLGxsbGw6ImRkZCwg''@;'; put 'put ''RG8gTU1NIFlZWVksIFtrbG9dIEhILm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilt0XHhlNG5ceGU0XHhlNG5dIFtrbG9dIExUIixuZXh0RGF5OiJbaHVvbWVubmFdIFtrbG9dIExUIixuZXh0V2VlazoiZGRkZCBba2xvXSBMVCIsbGFzdERheToiW2VpbGVuXSBba2xvXSBMVCIsbGFzdFdlZWs6''@;'; put 'put ''Ilt2aWltZV0gZGRkZFtuYV0gW2tsb10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIHBceGU0XHhlNHN0XHhlNCIscGFzdDoiJXMgc2l0dGVuIixzOlYsc3M6VixtOlYsbW06VixoOlYsaGg6VixkOlYsZGQ6VixNOlYsTU06Vix5OlYseXk6Vn0sZGF5T2ZNb250''@;'; put 'put ''aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDMzOTYzOmZ1bmN0aW9uKGNlKXsidXNlIHN0cmljdCI7dmFyIFg9ZnVuY3Rpb24oYil7cmV0dXJuIGImJmIuTWF0aD09PU1hdGgmJmJ9O2NlLmV4cG9ydHM9WCgi''@;'; put 'put ''b2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMmJmdsb2JhbFRoaXMpfHxYKCJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cpfHxYKCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZil8fFgoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWwmJmdsb2JhbCl8fFgoIm9iamVjdCI9PXR5cGVvZiB0''@;'; put 'put ''aGlzJiZ0aGlzKXx8ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKX0sMzQxMzM6KGNlLFgsYik9Pnt2YXIgST1iKDEzNTQ2KTtYLmVuY3J5cHQ9ZnVuY3Rpb24oXyxwKXt2YXIgVj1JKHAsXy5fcHJldik7cmV0dXJuIF8uX3ByZXY9Xy5fY2lwaGVy''@;'; put 'put ''LmVuY3J5cHRCbG9jayhWKSxfLl9wcmV2fSxYLmRlY3J5cHQ9ZnVuY3Rpb24oXyxwKXt2YXIgVj1fLl9wcmV2O18uX3ByZXY9cDt2YXIgdz1fLl9jaXBoZXIuZGVjcnlwdEJsb2NrKHApO3JldHVybiBJKHcsVil9fSwzNDMyMDooY2UsWCxiKT0+e3ZhciBJPWIoMTUwNjYpLlJlcG9ydGVyLF89''@;'; put 'put ''YigxNTA2NikuRW5jb2RlckJ1ZmZlcixwPWIoMTUwNjYpLkRlY29kZXJCdWZmZXIsVj1iKDM5MjEwKSx3PVsic2VxIiwic2Vxb2YiLCJzZXQiLCJzZXRvZiIsIm9iamlkIiwiYm9vbCIsImdlbnRpbWUiLCJ1dGN0aW1lIiwibnVsbF8iLCJlbnVtIiwiaW50Iiwib2JqRGVzYyIsImJpdHN0ciIs''@;'; put 'put ''ImJtcHN0ciIsImNoYXJzdHIiLCJnZW5zdHIiLCJncmFwaHN0ciIsImlhNXN0ciIsImlzbzY0NnN0ciIsIm51bXN0ciIsIm9jdHN0ciIsInByaW50c3RyIiwidDYxc3RyIiwidW5pc3RyIiwidXRmOHN0ciIsInZpZGVvc3RyIl0sUD1bImtleSIsIm9iaiIsInVzZSIsIm9wdGlvbmFsIiwiZXhw''@;'; put 'put ''bGljaXQiLCJpbXBsaWNpdCIsImRlZiIsImNob2ljZSIsImFueSIsImNvbnRhaW5zIl0uY29uY2F0KHcpO2Z1bmN0aW9uIFIoTixPKXt2YXIgSz17fTt0aGlzLl9iYXNlU3RhdGU9SyxLLmVuYz1OLEsucGFyZW50PU98fG51bGwsSy5jaGlsZHJlbj1udWxsLEsudGFnPW51bGwsSy5hcmdzPW51''@;'; put 'put ''bGwsSy5yZXZlcnNlQXJncz1udWxsLEsuY2hvaWNlPW51bGwsSy5vcHRpb25hbD0hMSxLLmFueT0hMSxLLm9iaj0hMSxLLnVzZT1udWxsLEsudXNlRGVjb2Rlcj1udWxsLEsua2V5PW51bGwsSy5kZWZhdWx0PW51bGwsSy5leHBsaWNpdD1udWxsLEsuaW1wbGljaXQ9bnVsbCxLLmNvbnRhaW5z''@;'; put 'put ''PW51bGwsSy5wYXJlbnR8fChLLmNoaWxkcmVuPVtdLHRoaXMuX3dyYXAoKSl9Y2UuZXhwb3J0cz1SO3ZhciB6PVsiZW5jIiwicGFyZW50IiwiY2hpbGRyZW4iLCJ0YWciLCJhcmdzIiwicmV2ZXJzZUFyZ3MiLCJjaG9pY2UiLCJvcHRpb25hbCIsImFueSIsIm9iaiIsInVzZSIsImFsdGVyZWRV''@;'; put 'put ''c2UiLCJrZXkiLCJkZWZhdWx0IiwiZXhwbGljaXQiLCJpbXBsaWNpdCIsImNvbnRhaW5zIl07Ui5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgTz10aGlzLl9iYXNlU3RhdGUsSz17fTt6LmZvckVhY2goZnVuY3Rpb24oWSl7S1tZXT1PW1ldfSk7dmFyIFo9bmV3IHRoaXMuY29uc3Ry''@;'; put 'put ''dWN0b3IoSy5wYXJlbnQpO3JldHVybiBaLl9iYXNlU3RhdGU9SyxafSxSLnByb3RvdHlwZS5fd3JhcD1mdW5jdGlvbigpe3ZhciBPPXRoaXMuX2Jhc2VTdGF0ZTtQLmZvckVhY2goZnVuY3Rpb24oSyl7dGhpc1tLXT1mdW5jdGlvbigpe3ZhciBZPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMp''@;'; put 'put ''O3JldHVybiBPLmNoaWxkcmVuLnB1c2goWSksWVtLXS5hcHBseShZLGFyZ3VtZW50cyl9fSx0aGlzKX0sUi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oTyl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO1YobnVsbD09PUsucGFyZW50KSxPLmNhbGwodGhpcyksSy5jaGlsZHJlbj1LLmNoaWxkcmVu''@;'; put 'put ''LmZpbHRlcihmdW5jdGlvbihaKXtyZXR1cm4gWi5fYmFzZVN0YXRlLnBhcmVudD09PXRoaXN9LHRoaXMpLFYuZXF1YWwoSy5jaGlsZHJlbi5sZW5ndGgsMSwiUm9vdCBub2RlIGNhbiBoYXZlIG9ubHkgb25lIGNoaWxkIil9LFIucHJvdG90eXBlLl91c2VBcmdzPWZ1bmN0aW9uKE8pe3ZhciBL''@;'; put 'put ''PXRoaXMuX2Jhc2VTdGF0ZSxaPU8uZmlsdGVyKGZ1bmN0aW9uKFkpe3JldHVybiBZIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcn0sdGhpcyk7Tz1PLmZpbHRlcihmdW5jdGlvbihZKXtyZXR1cm4hKFkgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKX0sdGhpcyksMCE9PVoubGVuZ3Ro''@;'; put 'put ''JiYoVihudWxsPT09Sy5jaGlsZHJlbiksSy5jaGlsZHJlbj1aLFouZm9yRWFjaChmdW5jdGlvbihZKXtZLl9iYXNlU3RhdGUucGFyZW50PXRoaXN9LHRoaXMpKSwwIT09Ty5sZW5ndGgmJihWKG51bGw9PT1LLmFyZ3MpLEsuYXJncz1PLEsucmV2ZXJzZUFyZ3M9Ty5tYXAoZnVuY3Rpb24oWSl7''@;'; put 'put ''aWYoIm9iamVjdCIhPXR5cGVvZiBZfHxZLmNvbnN0cnVjdG9yIT09T2JqZWN0KXJldHVybiBZO3ZhciBXPXt9O3JldHVybiBPYmplY3Qua2V5cyhZKS5mb3JFYWNoKGZ1bmN0aW9uKHEpe3E9PSgwfHEpJiYocXw9MCksV1tZW3FdXT1xfSksV30pKX0sWyJfcGVla1RhZyIsIl9kZWNvZGVUYWci''@;'; put 'put ''LCJfdXNlIiwiX2RlY29kZVN0ciIsIl9kZWNvZGVPYmppZCIsIl9kZWNvZGVUaW1lIiwiX2RlY29kZU51bGwiLCJfZGVjb2RlSW50IiwiX2RlY29kZUJvb2wiLCJfZGVjb2RlTGlzdCIsIl9lbmNvZGVDb21wb3NpdGUiLCJfZW5jb2RlU3RyIiwiX2VuY29kZU9iamlkIiwiX2VuY29kZVRpbWUi''@;'; put 'put ''LCJfZW5jb2RlTnVsbCIsIl9lbmNvZGVJbnQiLCJfZW5jb2RlQm9vbCJdLmZvckVhY2goZnVuY3Rpb24oTil7Ui5wcm90b3R5cGVbTl09ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoTisiIG5vdCBpbXBsZW1lbnRlZCBmb3IgZW5jb2Rpbmc6ICIrdGhpcy5fYmFzZVN0YXRlLmVuYyl9fSks''@;'; put 'put ''dy5mb3JFYWNoKGZ1bmN0aW9uKE4pe1IucHJvdG90eXBlW05dPWZ1bmN0aW9uKCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlLFo9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gVihudWxsPT09Sy50YWcpLEsudGFnPU4sdGhpcy5fdXNlQXJncyhaKSx0aGlzfX0p''@;'; put 'put ''LFIucHJvdG90eXBlLnVzZT1mdW5jdGlvbihPKXtWKE8pO3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gVihudWxsPT09Sy51c2UpLEsudXNlPU8sdGhpc30sUi5wcm90b3R5cGUub3B0aW9uYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLm9wdGlvbmFsPSEwLHRoaXN9''@;'; put 'put ''LFIucHJvdG90eXBlLmRlZj1mdW5jdGlvbihPKXt2YXIgSz10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIFYobnVsbD09PUsuZGVmYXVsdCksSy5kZWZhdWx0PU8sSy5vcHRpb25hbD0hMCx0aGlzfSxSLnByb3RvdHlwZS5leHBsaWNpdD1mdW5jdGlvbihPKXt2YXIgSz10aGlzLl9iYXNlU3RhdGU7''@;'; put 'put ''cmV0dXJuIFYobnVsbD09PUsuZXhwbGljaXQmJm51bGw9PT1LLmltcGxpY2l0KSxLLmV4cGxpY2l0PU8sdGhpc30sUi5wcm90b3R5cGUuaW1wbGljaXQ9ZnVuY3Rpb24oTyl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBWKG51bGw9PT1LLmV4cGxpY2l0JiZudWxsPT09Sy5pbXBsaWNp''@;'; put 'put ''dCksSy5pbXBsaWNpdD1PLHRoaXN9LFIucHJvdG90eXBlLm9iaj1mdW5jdGlvbigpe3ZhciBPPXRoaXMuX2Jhc2VTdGF0ZSxLPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIE8ub2JqPSEwLDAhPT1LLmxlbmd0aCYmdGhpcy5fdXNlQXJncyhLKSx0aGlzfSxS''@;'; put 'put ''LnByb3RvdHlwZS5rZXk9ZnVuY3Rpb24oTyl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBWKG51bGw9PT1LLmtleSksSy5rZXk9Tyx0aGlzfSxSLnByb3RvdHlwZS5hbnk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLmFueT0hMCx0aGlzfSxSLnByb3RvdHlwZS5jaG9p''@;'; put 'put ''Y2U9ZnVuY3Rpb24oTyl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBWKG51bGw9PT1LLmNob2ljZSksSy5jaG9pY2U9Tyx0aGlzLl91c2VBcmdzKE9iamVjdC5rZXlzKE8pLm1hcChmdW5jdGlvbihaKXtyZXR1cm4gT1taXX0pKSx0aGlzfSxSLnByb3RvdHlwZS5jb250YWlucz1mdW5j''@;'; put 'put ''dGlvbihPKXt2YXIgSz10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIFYobnVsbD09PUsudXNlKSxLLmNvbnRhaW5zPU8sdGhpc30sUi5wcm90b3R5cGUuX2RlY29kZT1mdW5jdGlvbihPLEspe3ZhciBaPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09Wi5wYXJlbnQpcmV0dXJuIE8ud3JhcFJlc3Vs''@;'; put 'put ''dChaLmNoaWxkcmVuWzBdLl9kZWNvZGUoTyxLKSk7dmFyIHJlLFk9Wi5kZWZhdWx0LFc9ITAscT1udWxsO2lmKG51bGwhPT1aLmtleSYmKHE9Ty5lbnRlcktleShaLmtleSkpLFoub3B0aW9uYWwpe3ZhciBlZT1udWxsO2lmKG51bGwhPT1aLmV4cGxpY2l0P2VlPVouZXhwbGljaXQ6bnVsbCE9''@;'; put 'put ''PVouaW1wbGljaXQ/ZWU9Wi5pbXBsaWNpdDpudWxsIT09Wi50YWcmJihlZT1aLnRhZyksbnVsbCE9PWVlfHxaLmFueSl7aWYoVz10aGlzLl9wZWVrVGFnKE8sZWUsWi5hbnkpLE8uaXNFcnJvcihXKSlyZXR1cm4gV31lbHNle3ZhciBKPU8uc2F2ZSgpO3RyeXtudWxsPT09Wi5jaG9pY2U/dGhp''@;'; put 'put ''cy5fZGVjb2RlR2VuZXJpYyhaLnRhZyxPLEspOnRoaXMuX2RlY29kZUNob2ljZShPLEspLFc9ITB9Y2F0Y2h7Vz0hMX1PLnJlc3RvcmUoSil9fWlmKFoub2JqJiZXJiYocmU9Ty5lbnRlck9iamVjdCgpKSxXKXtpZihudWxsIT09Wi5leHBsaWNpdCl7dmFyIGllPXRoaXMuX2RlY29kZVRhZyhP''@;'; put 'put ''LFouZXhwbGljaXQpO2lmKE8uaXNFcnJvcihpZSkpcmV0dXJuIGllO089aWV9dmFyIHVlPU8ub2Zmc2V0O2lmKG51bGw9PT1aLnVzZSYmbnVsbD09PVouY2hvaWNlKXtaLmFueSYmKEo9Ty5zYXZlKCkpO3ZhciBnZT10aGlzLl9kZWNvZGVUYWcoTyxudWxsIT09Wi5pbXBsaWNpdD9aLmltcGxp''@;'; put 'put ''Y2l0OloudGFnLFouYW55KTtpZihPLmlzRXJyb3IoZ2UpKXJldHVybiBnZTtaLmFueT9ZPU8ucmF3KEopOk89Z2V9aWYoSyYmSy50cmFjayYmbnVsbCE9PVoudGFnJiZLLnRyYWNrKE8ucGF0aCgpLHVlLE8ubGVuZ3RoLCJ0YWdnZWQiKSxLJiZLLnRyYWNrJiZudWxsIT09Wi50YWcmJksudHJh''@;'; put 'put ''Y2soTy5wYXRoKCksTy5vZmZzZXQsTy5sZW5ndGgsImNvbnRlbnQiKSxaLmFueXx8KFk9bnVsbD09PVouY2hvaWNlP3RoaXMuX2RlY29kZUdlbmVyaWMoWi50YWcsTyxLKTp0aGlzLl9kZWNvZGVDaG9pY2UoTyxLKSksTy5pc0Vycm9yKFkpKXJldHVybiBZO2lmKCFaLmFueSYmbnVsbD09PVou''@;'; put 'put ''Y2hvaWNlJiZudWxsIT09Wi5jaGlsZHJlbiYmWi5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKE1lKXtNZS5fZGVjb2RlKE8sSyl9KSxaLmNvbnRhaW5zJiYoIm9jdHN0ciI9PT1aLnRhZ3x8ImJpdHN0ciI9PT1aLnRhZykpe3ZhciBfZT1uZXcgcChZKTtZPXRoaXMuX2dldFVzZShaLmNvbnRh''@;'; put 'put ''aW5zLE8uX3JlcG9ydGVyU3RhdGUub2JqKS5fZGVjb2RlKF9lLEspfX1yZXR1cm4gWi5vYmomJlcmJihZPU8ubGVhdmVPYmplY3QocmUpKSxudWxsPT09Wi5rZXl8fG51bGw9PT1ZJiYhMCE9PVc/bnVsbCE9PXEmJk8uZXhpdEtleShxKTpPLmxlYXZlS2V5KHEsWi5rZXksWSksWX0sUi5wcm90''@;'; put 'put ''b3R5cGUuX2RlY29kZUdlbmVyaWM9ZnVuY3Rpb24oTyxLLFope3ZhciBZPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4ic2VxIj09PU98fCJzZXQiPT09Tz9udWxsOiJzZXFvZiI9PT1PfHwic2V0b2YiPT09Tz90aGlzLl9kZWNvZGVMaXN0KEssTyxZLmFyZ3NbMF0sWik6L3N0ciQvLnRlc3QoTyk/''@;'; put 'put ''dGhpcy5fZGVjb2RlU3RyKEssTyxaKToib2JqaWQiPT09TyYmWS5hcmdzP3RoaXMuX2RlY29kZU9iamlkKEssWS5hcmdzWzBdLFkuYXJnc1sxXSxaKToib2JqaWQiPT09Tz90aGlzLl9kZWNvZGVPYmppZChLLG51bGwsbnVsbCxaKToiZ2VudGltZSI9PT1PfHwidXRjdGltZSI9PT1PP3RoaXMu''@;'; put 'put ''X2RlY29kZVRpbWUoSyxPLFopOiJudWxsXyI9PT1PP3RoaXMuX2RlY29kZU51bGwoSyxaKToiYm9vbCI9PT1PP3RoaXMuX2RlY29kZUJvb2woSyxaKToib2JqRGVzYyI9PT1PP3RoaXMuX2RlY29kZVN0cihLLE8sWik6ImludCI9PT1PfHwiZW51bSI9PT1PP3RoaXMuX2RlY29kZUludChLLFku''@;'; put 'put ''YXJncyYmWS5hcmdzWzBdLFopOm51bGwhPT1ZLnVzZT90aGlzLl9nZXRVc2UoWS51c2UsSy5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNvZGUoSyxaKTpLLmVycm9yKCJ1bmtub3duIHRhZzogIitPKX0sUi5wcm90b3R5cGUuX2dldFVzZT1mdW5jdGlvbihPLEspe3ZhciBaPXRoaXMuX2Jhc2VT''@;'; put 'put ''dGF0ZTtyZXR1cm4gWi51c2VEZWNvZGVyPXRoaXMuX3VzZShPLEspLFYobnVsbD09PVoudXNlRGVjb2Rlci5fYmFzZVN0YXRlLnBhcmVudCksWi51c2VEZWNvZGVyPVoudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmNoaWxkcmVuWzBdLFouaW1wbGljaXQhPT1aLnVzZURlY29kZXIuX2Jhc2VTdGF0''@;'; put 'put ''ZS5pbXBsaWNpdCYmKFoudXNlRGVjb2Rlcj1aLnVzZURlY29kZXIuY2xvbmUoKSxaLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdD1aLmltcGxpY2l0KSxaLnVzZURlY29kZXJ9LFIucHJvdG90eXBlLl9kZWNvZGVDaG9pY2U9ZnVuY3Rpb24oTyxLKXt2YXIgWj10aGlzLl9iYXNlU3Rh''@;'; put 'put ''dGUsWT1udWxsLFc9ITE7cmV0dXJuIE9iamVjdC5rZXlzKFouY2hvaWNlKS5zb21lKGZ1bmN0aW9uKHEpe3ZhciBlZT1PLnNhdmUoKSxKPVouY2hvaWNlW3FdO3RyeXt2YXIgcmU9Si5fZGVjb2RlKE8sSyk7aWYoTy5pc0Vycm9yKHJlKSlyZXR1cm4hMTtZPXt0eXBlOnEsdmFsdWU6cmV9LFc9''@;'; put 'put ''ITB9Y2F0Y2h7cmV0dXJuIE8ucmVzdG9yZShlZSksITF9cmV0dXJuITB9LHRoaXMpLFc/WTpPLmVycm9yKCJDaG9pY2Ugbm90IG1hdGNoZWQiKX0sUi5wcm90b3R5cGUuX2NyZWF0ZUVuY29kZXJCdWZmZXI9ZnVuY3Rpb24oTyl7cmV0dXJuIG5ldyBfKE8sdGhpcy5yZXBvcnRlcil9LFIucHJv''@;'; put 'put ''dG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oTyxLLFope3ZhciBZPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09WS5kZWZhdWx0fHxZLmRlZmF1bHQhPT1PKXt2YXIgVz10aGlzLl9lbmNvZGVWYWx1ZShPLEssWik7aWYodm9pZCAwIT09VyYmIXRoaXMuX3NraXBEZWZhdWx0KFcsSyxaKSlyZXR1''@;'; put 'put ''cm4gV319LFIucHJvdG90eXBlLl9lbmNvZGVWYWx1ZT1mdW5jdGlvbihPLEssWil7dmFyIFk9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1ZLnBhcmVudClyZXR1cm4gWS5jaGlsZHJlblswXS5fZW5jb2RlKE8sS3x8bmV3IEkpO3ZhciBKPW51bGw7aWYodGhpcy5yZXBvcnRlcj1LLFkub3B0''@;'; put 'put ''aW9uYWwmJnZvaWQgMD09PU8pe2lmKG51bGw9PT1ZLmRlZmF1bHQpcmV0dXJuO089WS5kZWZhdWx0fXZhciBXPW51bGwscT0hMTtpZihZLmFueSlKPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTyk7ZWxzZSBpZihZLmNob2ljZSlKPXRoaXMuX2VuY29kZUNob2ljZShPLEspO2Vsc2UgaWYo''@;'; put 'put ''WS5jb250YWlucylXPXRoaXMuX2dldFVzZShZLmNvbnRhaW5zLFopLl9lbmNvZGUoTyxLKSxxPSEwO2Vsc2UgaWYoWS5jaGlsZHJlbilXPVkuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKHVlKXtpZigibnVsbF8iPT09dWUuX2Jhc2VTdGF0ZS50YWcpcmV0dXJuIHVlLl9lbmNvZGUobnVsbCxLLE8p''@;'; put 'put ''O2lmKG51bGw9PT11ZS5fYmFzZVN0YXRlLmtleSlyZXR1cm4gSy5lcnJvcigiQ2hpbGQgc2hvdWxkIGhhdmUgYSBrZXkiKTt2YXIgZ2U9Sy5lbnRlcktleSh1ZS5fYmFzZVN0YXRlLmtleSk7aWYoIm9iamVjdCIhPXR5cGVvZiBPKXJldHVybiBLLmVycm9yKCJDaGlsZCBleHBlY3RlZCwgYnV0''@;'; put 'put ''IGlucHV0IGlzIG5vdCBvYmplY3QiKTt2YXIgX2U9dWUuX2VuY29kZShPW3VlLl9iYXNlU3RhdGUua2V5XSxLLE8pO3JldHVybiBLLmxlYXZlS2V5KGdlKSxfZX0sdGhpcykuZmlsdGVyKGZ1bmN0aW9uKHVlKXtyZXR1cm4gdWV9KSxXPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoVyk7ZWxz''@;'; put 'put ''ZSBpZigic2Vxb2YiPT09WS50YWd8fCJzZXRvZiI9PT1ZLnRhZyl7aWYoIVkuYXJnc3x8MSE9PVkuYXJncy5sZW5ndGgpcmV0dXJuIEsuZXJyb3IoIlRvbyBtYW55IGFyZ3MgZm9yIDogIitZLnRhZyk7aWYoIUFycmF5LmlzQXJyYXkoTykpcmV0dXJuIEsuZXJyb3IoInNlcW9mL3NldG9mLCBi''@;'; put 'put ''dXQgZGF0YSBpcyBub3QgQXJyYXkiKTt2YXIgZWU9dGhpcy5jbG9uZSgpO2VlLl9iYXNlU3RhdGUuaW1wbGljaXQ9bnVsbCxXPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTy5tYXAoZnVuY3Rpb24odWUpe3JldHVybiB0aGlzLl9nZXRVc2UodGhpcy5fYmFzZVN0YXRlLmFyZ3NbMF0sTyku''@;'; put 'put ''X2VuY29kZSh1ZSxLKX0sZWUpKX1lbHNlIG51bGwhPT1ZLnVzZT9KPXRoaXMuX2dldFVzZShZLnVzZSxaKS5fZW5jb2RlKE8sSyk6KFc9dGhpcy5fZW5jb2RlUHJpbWl0aXZlKFkudGFnLE8pLHE9ITApO2lmKCFZLmFueSYmbnVsbD09PVkuY2hvaWNlKXt2YXIgcmU9bnVsbCE9PVkuaW1wbGlj''@;'; put 'put ''aXQ/WS5pbXBsaWNpdDpZLnRhZyxpZT1udWxsPT09WS5pbXBsaWNpdD8idW5pdmVyc2FsIjoiY29udGV4dCI7bnVsbD09PXJlP251bGw9PT1ZLnVzZSYmSy5lcnJvcigiVGFnIGNvdWxkIGJlIG9taXR0ZWQgb25seSBmb3IgLnVzZSgpIik6bnVsbD09PVkudXNlJiYoSj10aGlzLl9lbmNvZGVD''@;'; put 'put ''b21wb3NpdGUocmUscSxpZSxXKSl9cmV0dXJuIG51bGwhPT1ZLmV4cGxpY2l0JiYoSj10aGlzLl9lbmNvZGVDb21wb3NpdGUoWS5leHBsaWNpdCwhMSwiY29udGV4dCIsSikpLEp9LFIucHJvdG90eXBlLl9lbmNvZGVDaG9pY2U9ZnVuY3Rpb24oTyxLKXt2YXIgWj10aGlzLl9iYXNlU3RhdGUs''@;'; put 'put ''WT1aLmNob2ljZVtPLnR5cGVdO3JldHVybiBZfHxWKCExLE8udHlwZSsiIG5vdCBmb3VuZCBpbiAiK0pTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKFouY2hvaWNlKSkpLFkuX2VuY29kZShPLnZhbHVlLEspfSxSLnByb3RvdHlwZS5fZW5jb2RlUHJpbWl0aXZlPWZ1bmN0aW9uKE8sSyl7dmFy''@;'; put 'put ''IFo9dGhpcy5fYmFzZVN0YXRlO2lmKC9zdHIkLy50ZXN0KE8pKXJldHVybiB0aGlzLl9lbmNvZGVTdHIoSyxPKTtpZigib2JqaWQiPT09TyYmWi5hcmdzKXJldHVybiB0aGlzLl9lbmNvZGVPYmppZChLLFoucmV2ZXJzZUFyZ3NbMF0sWi5hcmdzWzFdKTtpZigib2JqaWQiPT09TylyZXR1cm4g''@;'; put 'put ''dGhpcy5fZW5jb2RlT2JqaWQoSyxudWxsLG51bGwpO2lmKCJnZW50aW1lIj09PU98fCJ1dGN0aW1lIj09PU8pcmV0dXJuIHRoaXMuX2VuY29kZVRpbWUoSyxPKTtpZigibnVsbF8iPT09TylyZXR1cm4gdGhpcy5fZW5jb2RlTnVsbCgpO2lmKCJpbnQiPT09T3x8ImVudW0iPT09TylyZXR1cm4g''@;'; put 'put ''dGhpcy5fZW5jb2RlSW50KEssWi5hcmdzJiZaLnJldmVyc2VBcmdzWzBdKTtpZigiYm9vbCI9PT1PKXJldHVybiB0aGlzLl9lbmNvZGVCb29sKEspO2lmKCJvYmpEZXNjIj09PU8pcmV0dXJuIHRoaXMuX2VuY29kZVN0cihLLE8pO3Rocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdGFnOiAi''@;'; put 'put ''K08pfSxSLnByb3RvdHlwZS5faXNOdW1zdHI9ZnVuY3Rpb24oTyl7cmV0dXJuL15bMC05IF0qJC8udGVzdChPKX0sUi5wcm90b3R5cGUuX2lzUHJpbnRzdHI9ZnVuY3Rpb24oTyl7cmV0dXJuL15bQS1aYS16MC05ICdcKFwpXCssXC1cLlwvOj1cP10qJC8udGVzdChPKX19LDM0NjcwOmNlPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9e319LDM0NzI1OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNzE5OTMpLF89YigxMzY4NikscD1iKDI3MDU0KS5CdWZmZXIsVj1uZXcgQXJyYXkoMTYpO2Z1bmN0aW9uIHcoKXtfLmNhbGwodGhpcyw2NCksdGhpcy5fYT0xNzMyNTg0MTkz''@;'; put 'put ''LHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4Nzh9ZnVuY3Rpb24gUChPLEspe3JldHVybiBPPDxLfE8+Pj4zMi1LfWZ1bmN0aW9uIEYoTyxLLFosWSxXLHEsZWUpe3JldHVybiBQKE8rKEsmWnx+SyZZKStXK3F8MCxlZSkrS3wwfWZ1bmN0aW9u''@;'; put 'put ''IFIoTyxLLFosWSxXLHEsZWUpe3JldHVybiBQKE8rKEsmWXxaJn5ZKStXK3F8MCxlZSkrS3wwfWZ1bmN0aW9uIHooTyxLLFosWSxXLHEsZWUpe3JldHVybiBQKE8rKEteWl5ZKStXK3F8MCxlZSkrS3wwfWZ1bmN0aW9uIE4oTyxLLFosWSxXLHEsZWUpe3JldHVybiBQKE8rKFpeKEt8flkpKStX''@;'; put 'put ''K3F8MCxlZSkrS3wwfUkodyxfKSx3LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciBPPVYsSz0wO0s8MTY7KytLKU9bS109dGhpcy5fYmxvY2sucmVhZEludDMyTEUoNCpLKTt2YXIgWj10aGlzLl9hLFk9dGhpcy5fYixXPXRoaXMuX2MscT10aGlzLl9kO1o9RihaLFksVyxx''@;'; put 'put ''LE9bMF0sMzYxNDA5MDM2MCw3KSxxPUYocSxaLFksVyxPWzFdLDM5MDU0MDI3MTAsMTIpLFc9RihXLHEsWixZLE9bMl0sNjA2MTA1ODE5LDE3KSxZPUYoWSxXLHEsWixPWzNdLDMyNTA0NDE5NjYsMjIpLFo9RihaLFksVyxxLE9bNF0sNDExODU0ODM5OSw3KSxxPUYocSxaLFksVyxPWzVdLDEy''@;'; put 'put ''MDAwODA0MjYsMTIpLFc9RihXLHEsWixZLE9bNl0sMjgyMTczNTk1NSwxNyksWT1GKFksVyxxLFosT1s3XSw0MjQ5MjYxMzEzLDIyKSxaPUYoWixZLFcscSxPWzhdLDE3NzAwMzU0MTYsNykscT1GKHEsWixZLFcsT1s5XSwyMzM2NTUyODc5LDEyKSxXPUYoVyxxLFosWSxPWzEwXSw0Mjk0OTI1''@;'; put 'put ''MjMzLDE3KSxZPUYoWSxXLHEsWixPWzExXSwyMzA0NTYzMTM0LDIyKSxaPUYoWixZLFcscSxPWzEyXSwxODA0NjAzNjgyLDcpLHE9RihxLFosWSxXLE9bMTNdLDQyNTQ2MjYxOTUsMTIpLFc9RihXLHEsWixZLE9bMTRdLDI3OTI5NjUwMDYsMTcpLFo9UihaLFk9RihZLFcscSxaLE9bMTVdLDEy''@;'; put 'put ''MzY1MzUzMjksMjIpLFcscSxPWzFdLDQxMjkxNzA3ODYsNSkscT1SKHEsWixZLFcsT1s2XSwzMjI1NDY1NjY0LDkpLFc9UihXLHEsWixZLE9bMTFdLDY0MzcxNzcxMywxNCksWT1SKFksVyxxLFosT1swXSwzOTIxMDY5OTk0LDIwKSxaPVIoWixZLFcscSxPWzVdLDM1OTM0MDg2MDUsNSkscT1S''@;'; put 'put ''KHEsWixZLFcsT1sxMF0sMzgwMTYwODMsOSksVz1SKFcscSxaLFksT1sxNV0sMzYzNDQ4ODk2MSwxNCksWT1SKFksVyxxLFosT1s0XSwzODg5NDI5NDQ4LDIwKSxaPVIoWixZLFcscSxPWzldLDU2ODQ0NjQzOCw1KSxxPVIocSxaLFksVyxPWzE0XSwzMjc1MTYzNjA2LDkpLFc9UihXLHEsWixZ''@;'; put 'put ''LE9bM10sNDEwNzYwMzMzNSwxNCksWT1SKFksVyxxLFosT1s4XSwxMTYzNTMxNTAxLDIwKSxaPVIoWixZLFcscSxPWzEzXSwyODUwMjg1ODI5LDUpLHE9UihxLFosWSxXLE9bMl0sNDI0MzU2MzUxMiw5KSxXPVIoVyxxLFosWSxPWzddLDE3MzUzMjg0NzMsMTQpLFo9eihaLFk9UihZLFcscSxa''@;'; put 'put ''LE9bMTJdLDIzNjgzNTk1NjIsMjApLFcscSxPWzVdLDQyOTQ1ODg3MzgsNCkscT16KHEsWixZLFcsT1s4XSwyMjcyMzkyODMzLDExKSxXPXooVyxxLFosWSxPWzExXSwxODM5MDMwNTYyLDE2KSxZPXooWSxXLHEsWixPWzE0XSw0MjU5NjU3NzQwLDIzKSxaPXooWixZLFcscSxPWzFdLDI3NjM5''@;'; put 'put ''NzUyMzYsNCkscT16KHEsWixZLFcsT1s0XSwxMjcyODkzMzUzLDExKSxXPXooVyxxLFosWSxPWzddLDQxMzk0Njk2NjQsMTYpLFk9eihZLFcscSxaLE9bMTBdLDMyMDAyMzY2NTYsMjMpLFo9eihaLFksVyxxLE9bMTNdLDY4MTI3OTE3NCw0KSxxPXoocSxaLFksVyxPWzBdLDM5MzY0MzAwNzQs''@;'; put 'put ''MTEpLFc9eihXLHEsWixZLE9bM10sMzU3MjQ0NTMxNywxNiksWT16KFksVyxxLFosT1s2XSw3NjAyOTE4OSwyMyksWj16KFosWSxXLHEsT1s5XSwzNjU0NjAyODA5LDQpLHE9eihxLFosWSxXLE9bMTJdLDM4NzMxNTE0NjEsMTEpLFc9eihXLHEsWixZLE9bMTVdLDUzMDc0MjUyMCwxNiksWj1O''@;'; put 'put ''KFosWT16KFksVyxxLFosT1syXSwzMjk5NjI4NjQ1LDIzKSxXLHEsT1swXSw0MDk2MzM2NDUyLDYpLHE9TihxLFosWSxXLE9bN10sMTEyNjg5MTQxNSwxMCksVz1OKFcscSxaLFksT1sxNF0sMjg3ODYxMjM5MSwxNSksWT1OKFksVyxxLFosT1s1XSw0MjM3NTMzMjQxLDIxKSxaPU4oWixZLFcs''@;'; put 'put ''cSxPWzEyXSwxNzAwNDg1NTcxLDYpLHE9TihxLFosWSxXLE9bM10sMjM5OTk4MDY5MCwxMCksVz1OKFcscSxaLFksT1sxMF0sNDI5MzkxNTc3MywxNSksWT1OKFksVyxxLFosT1sxXSwyMjQwMDQ0NDk3LDIxKSxaPU4oWixZLFcscSxPWzhdLDE4NzMzMTMzNTksNikscT1OKHEsWixZLFcsT1sx''@;'; put 'put ''NV0sNDI2NDM1NTU1MiwxMCksVz1OKFcscSxaLFksT1s2XSwyNzM0NzY4OTE2LDE1KSxZPU4oWSxXLHEsWixPWzEzXSwxMzA5MTUxNjQ5LDIxKSxaPU4oWixZLFcscSxPWzRdLDQxNDk0NDQyMjYsNikscT1OKHEsWixZLFcsT1sxMV0sMzE3NDc1NjkxNywxMCksVz1OKFcscSxaLFksT1syXSw3''@;'; put 'put ''MTg3ODcyNTksMTUpLFk9TihZLFcscSxaLE9bOV0sMzk1MTQ4MTc0NSwyMSksdGhpcy5fYT10aGlzLl9hK1p8MCx0aGlzLl9iPXRoaXMuX2IrWXwwLHRoaXMuX2M9dGhpcy5fYytXfDAsdGhpcy5fZD10aGlzLl9kK3F8MH0sdy5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3RoaXMuX2Js''@;'; put 'put ''b2NrW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPTEyOCx0aGlzLl9ibG9ja09mZnNldD41NiYmKHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw2NCksdGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MCksdGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0''@;'; put 'put ''LDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFswXSw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMV0sNjApLHRoaXMuX3VwZGF0ZSgpO3ZhciBPPXAuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBPLndyaXRlSW50MzJMRSh0aGlzLl9h''@;'; put 'put ''LDApLE8ud3JpdGVJbnQzMkxFKHRoaXMuX2IsNCksTy53cml0ZUludDMyTEUodGhpcy5fYyw4KSxPLndyaXRlSW50MzJMRSh0aGlzLl9kLDEyKSxPfSxjZS5leHBvcnRzPXd9LDM1MDg5OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoOTM4MDcpLkJ1ZmZlcjtmdW5jdGlvbiBfKHos''@;'; put 'put ''Til7dGhpcy5pY29udj1OLHRoaXMuYm9tQXdhcmU9ITAsdGhpcy5pc0xFPXouaXNMRX1mdW5jdGlvbiBwKHosTil7dGhpcy5pc0xFPU4uaXNMRSx0aGlzLmhpZ2hTdXJyb2dhdGU9MH1mdW5jdGlvbiBWKHosTil7dGhpcy5pc0xFPU4uaXNMRSx0aGlzLmJhZENoYXI9Ti5pY29udi5kZWZhdWx0''@;'; put 'put ''Q2hhclVuaWNvZGUuY2hhckNvZGVBdCgwKSx0aGlzLm92ZXJmbG93PW51bGx9ZnVuY3Rpb24gdyh6LE4pe3RoaXMuaWNvbnY9Tn1mdW5jdGlvbiBQKHosTil7dm9pZCAwPT09KHo9enx8e30pLmFkZEJPTSYmKHouYWRkQk9NPSEwKSx0aGlzLmVuY29kZXI9Ti5pY29udi5nZXRFbmNvZGVyKHou''@;'; put 'put ''ZGVmYXVsdEVuY29kaW5nfHwidXRmLTMybGUiLHopfWZ1bmN0aW9uIEYoeixOKXt0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmluaXRpYWxCeXRlcz1bXSx0aGlzLmluaXRpYWxCeXRlc0xlbj0wLHRoaXMub3B0aW9ucz16fHx7fSx0aGlzLmljb252PU4uaWNvbnZ9ZnVuY3Rpb24gUih6LE4pe3Zh''@;'; put 'put ''ciBPPU58fCJ1dGYtMzJsZSI7aWYoei5sZW5ndGg+PTQpaWYoNjUyNzk9PT16LnJlYWRVSW50MzJCRSgwKSlPPSJ1dGYtMzJiZSI7ZWxzZSBpZig2NTI3OT09PXoucmVhZFVJbnQzMkxFKDApKU89InV0Zi0zMmxlIjtlbHNle2Zvcih2YXIgSz0wLFo9MCxZPTAsVz0wLHE9TWF0aC5taW4oei5s''@;'; put 'put ''ZW5ndGgtei5sZW5ndGglNCwxMjgpLGVlPTA7ZWU8cTtlZSs9NCl7dmFyIEo9eltlZV0scmU9eltlZSsxXSxpZT16W2VlKzJdLHVlPXpbZWUrM107KDAhPT1KfHxyZT4xNikmJisrWiwoMCE9PXVlfHxpZT4xNikmJisrSywwPT09SiYmMD09PXJlJiYwPT09aWUmJjAhPT11ZSYmVysrLDAhPT1K''@;'; put 'put ''JiYwPT09cmUmJjA9PT1pZSYmMD09PXVlJiZZKyt9WjxLP089InV0Zi0zMmJlIjpLPFomJihPPSJ1dGYtMzJsZSIpLFc+WT9PPSJ1dGYtMzJiZSI6VzxZJiYoTz0idXRmLTMybGUiKX1yZXR1cm4gT31YLl91dGYzMj1fLFgudXRmMzJsZT17dHlwZToiX3V0ZjMyIixpc0xFOiEwfSxYLnV0ZjMy''@;'; put 'put ''YmU9e3R5cGU6Il91dGYzMiIsaXNMRTohMX0sWC51Y3M0bGU9InV0ZjMybGUiLFgudWNzNGJlPSJ1dGYzMmJlIixfLnByb3RvdHlwZS5lbmNvZGVyPXAsXy5wcm90b3R5cGUuZGVjb2Rlcj1WLHAucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHope2Zvcih2YXIgTj1JLmZyb20oeiwidWNzMiIp''@;'; put 'put ''LE89SS5hbGxvYygyKk4ubGVuZ3RoKSxLPXRoaXMuaXNMRT9PLndyaXRlVUludDMyTEU6Ty53cml0ZVVJbnQzMkJFLFo9MCxZPTA7WTxOLmxlbmd0aDtZKz0yKXt2YXIgVz1OLnJlYWRVSW50MTZMRShZKSxxPTU1Mjk2PD1XJiZXPDU2MzIwO2lmKHRoaXMuaGlnaFN1cnJvZ2F0ZSl7aWYoIXEm''@;'; put 'put ''JjU2MzIwPD1XJiZXPDU3MzQ0KXtLLmNhbGwoTyw2NTUzNisodGhpcy5oaWdoU3Vycm9nYXRlLTU1Mjk2PDwxMHxXLTU2MzIwKSxaKSxaKz00LHRoaXMuaGlnaFN1cnJvZ2F0ZT0wO2NvbnRpbnVlfUsuY2FsbChPLHRoaXMuaGlnaFN1cnJvZ2F0ZSxaKSxaKz00fXE/dGhpcy5oaWdoU3Vycm9n''@;'; put 'put ''YXRlPVc6KEsuY2FsbChPLFcsWiksWis9NCx0aGlzLmhpZ2hTdXJyb2dhdGU9MCl9cmV0dXJuIFo8Ty5sZW5ndGgmJihPPU8uc2xpY2UoMCxaKSksT30scC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7aWYodGhpcy5oaWdoU3Vycm9nYXRlKXt2YXIgej1JLmFsbG9jKDQpO3JldHVybiB0aGlz''@;'; put 'put ''LmlzTEU/ei53cml0ZVVJbnQzMkxFKHRoaXMuaGlnaFN1cnJvZ2F0ZSwwKTp6LndyaXRlVUludDMyQkUodGhpcy5oaWdoU3Vycm9nYXRlLDApLHRoaXMuaGlnaFN1cnJvZ2F0ZT0wLHp9fSxWLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih6KXtpZigwPT09ei5sZW5ndGgpcmV0dXJuIiI7dGhp''@;'; put 'put ''cy5vdmVyZmxvdyYmKHo9SS5jb25jYXQoW3RoaXMub3ZlcmZsb3csel0pKTt2YXIgTj16Lmxlbmd0aC16Lmxlbmd0aCU0O3oubGVuZ3RoIT09Tj8odGhpcy5vdmVyZmxvdz16LnNsaWNlKE4pLHo9ei5zbGljZSgwLE4pKTp0aGlzLm92ZXJmbG93PW51bGw7Zm9yKHZhciBPPUkuYWxsb2MoTiks''@;'; put 'put ''Sz0wLFo9MDtaPE47Wis9NCl7dmFyIFk9dGhpcy5pc0xFP3oucmVhZFVJbnQzMkxFKFopOnoucmVhZFVJbnQzMkJFKFopO2lmKFk8NjU1MzYpTy53cml0ZVVJbnQxNkxFKFksSyksSys9MjtlbHNlIGlmKFk+MTExNDExMSlPLndyaXRlVUludDE2TEUodGhpcy5iYWRDaGFyLEspLEsrPTI7ZWxz''@;'; put 'put ''ZXt2YXIgcT01NjMyMCsoMTAyMyYoWS09NjU1MzYpKTtPLndyaXRlVUludDE2TEUoNTUyOTZ8WT4+MTAsSyksTy53cml0ZVVJbnQxNkxFKHEsSys9MiksSys9Mn19cmV0dXJuIE8uc2xpY2UoMCxLKS50b1N0cmluZygidWNzMiIpfSxWLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt0aGlzLm92''@;'; put 'put ''ZXJmbG93PW51bGx9LFgudXRmMzI9dyxYLnVjczQ9dyx3LnByb3RvdHlwZS5lbmNvZGVyPVAsdy5wcm90b3R5cGUuZGVjb2Rlcj1GLFAucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHope3JldHVybiB0aGlzLmVuY29kZXIud3JpdGUoeil9LFAucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmVuY29kZXIuZW5kKCl9LEYucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHope2lmKCF0aGlzLmRlY29kZXIpe2lmKHRoaXMuaW5pdGlhbEJ5dGVzLnB1c2goeiksdGhpcy5pbml0aWFsQnl0ZXNMZW4rPXoubGVuZ3RoLHRoaXMuaW5pdGlhbEJ5dGVzTGVuPDMyKXJldHVybiIi''@;'; put 'put ''O3ZhciBPPVIoSS5jb25jYXQodGhpcy5pbml0aWFsQnl0ZXMpLHRoaXMub3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcpO3RoaXMuZGVjb2Rlcj10aGlzLmljb252LmdldERlY29kZXIoTyx0aGlzLm9wdGlvbnMpLHRoaXMuaW5pdGlhbEJ5dGVzLmxlbmd0aD10aGlzLmluaXRpYWxCeXRlc0xlbj0w''@;'; put 'put ''fXJldHVybiB0aGlzLmRlY29kZXIud3JpdGUoeil9LEYucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe2lmKCF0aGlzLmRlY29kZXIpe3ZhciB6PUkuY29uY2F0KHRoaXMuaW5pdGlhbEJ5dGVzKSxOPVIoeix0aGlzLm9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKTt0aGlzLmRlY29kZXI9dGhpcy5p''@;'; put 'put ''Y29udi5nZXREZWNvZGVyKE4sdGhpcy5vcHRpb25zKTt2YXIgTz10aGlzLmRlY29kZXIud3JpdGUoeiksSz10aGlzLmRlY29kZXIuZW5kKCk7cmV0dXJuIEs/TytLOk99cmV0dXJuIHRoaXMuZGVjb2Rlci5lbmQoKX19LDM1Mjk0OihjZSxYLGIpPT57dmFyIEk7ZnVuY3Rpb24gXyhWKXt0aGlz''@;'; put 'put ''LnJhbmQ9Vn1pZihjZS5leHBvcnRzPWZ1bmN0aW9uKHcpe3JldHVybiBJfHwoST1uZXcgXyhudWxsKSksSS5nZW5lcmF0ZSh3KX0sY2UuZXhwb3J0cy5SYW5kPV8sXy5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24odyl7cmV0dXJuIHRoaXMuX3JhbmQodyl9LF8ucHJvdG90eXBlLl9yYW5k''@;'; put 'put ''PWZ1bmN0aW9uKHcpe2lmKHRoaXMucmFuZC5nZXRCeXRlcylyZXR1cm4gdGhpcy5yYW5kLmdldEJ5dGVzKHcpO2Zvcih2YXIgUD1uZXcgVWludDhBcnJheSh3KSxGPTA7RjxQLmxlbmd0aDtGKyspUFtGXT10aGlzLnJhbmQuZ2V0Qnl0ZSgpO3JldHVybiBQfSwib2JqZWN0Ij09dHlwZW9mIHNl''@;'; put 'put ''bGYpc2VsZi5jcnlwdG8mJnNlbGYuY3J5cHRvLmdldFJhbmRvbVZhbHVlcz9fLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih3KXt2YXIgUD1uZXcgVWludDhBcnJheSh3KTtyZXR1cm4gc2VsZi5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKFApLFB9OnNlbGYubXNDcnlwdG8mJnNlbGYubXNDcnlw''@;'; put 'put ''dG8uZ2V0UmFuZG9tVmFsdWVzP18ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHcpe3ZhciBQPW5ldyBVaW50OEFycmF5KHcpO3JldHVybiBzZWxmLm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyhQKSxQfToib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmKF8ucHJvdG90eXBlLl9yYW5kPWZ1bmN0''@;'; put 'put ''aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQgeWV0Iil9KTtlbHNlIHRyeXt2YXIgcD1iKDkxNDI2KTtpZigiZnVuY3Rpb24iIT10eXBlb2YgcC5yYW5kb21CeXRlcyl0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQiKTtfLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlv''@;'; put 'put ''bih3KXtyZXR1cm4gcC5yYW5kb21CeXRlcyh3KX19Y2F0Y2h7fX0sMzUzNTg6KGNlLFgsYik9Pnt2YXIgST17Ii4vYWYiOjExNTQ0LCIuL2FmLmpzIjoxMTU0NCwiLi9hciI6MzMxMDgsIi4vYXItZHoiOjUyMTU1LCIuL2FyLWR6LmpzIjo1MjE1NSwiLi9hci1rdyI6NTM1ODMsIi4vYXIta3cu''@;'; put 'put ''anMiOjUzNTgzLCIuL2FyLWx5Ijo0MTYzOCwiLi9hci1seS5qcyI6NDE2MzgsIi4vYXItbWEiOjg3ODIzLCIuL2FyLW1hLmpzIjo4NzgyMywiLi9hci1wcyI6NzcxMiwiLi9hci1wcy5qcyI6NzcxMiwiLi9hci1zYSI6NzgyNjEsIi4vYXItc2EuanMiOjc4MjYxLCIuL2FyLXRuIjo1NjcwMywi''@;'; put 'put ''Li9hci10bi5qcyI6NTY3MDMsIi4vYXIuanMiOjMzMTA4LCIuL2F6Ijo0NjUwOCwiLi9hei5qcyI6NDY1MDgsIi4vYmUiOjE2NzY2LCIuL2JlLmpzIjoxNjc2NiwiLi9iZyI6Mjg1NjQsIi4vYmcuanMiOjI4NTY0LCIuL2JtIjo5NzQ2MiwiLi9ibS5qcyI6OTc0NjIsIi4vYm4iOjE3MTA3LCIu''@;'; put 'put ''L2JuLWJkIjo0MzQzOCwiLi9ibi1iZC5qcyI6NDM0MzgsIi4vYm4uanMiOjE3MTA3LCIuL2JvIjo5MDA0LCIuL2JvLmpzIjo5MDA0LCIuL2JyIjo1MDkyNywiLi9ici5qcyI6NTA5MjcsIi4vYnMiOjg3NzY4LCIuL2JzLmpzIjo4Nzc2OCwiLi9jYSI6NTYyOTEsIi4vY2EuanMiOjU2MjkxLCIu''@;'; put 'put ''L2NzIjo4NTMwMSwiLi9jcy5qcyI6ODUzMDEsIi4vY3YiOjY2NjY2LCIuL2N2LmpzIjo2NjY2NiwiLi9jeSI6NTUxNjMsIi4vY3kuanMiOjU1MTYzLCIuL2RhIjo4NzM2MCwiLi9kYS5qcyI6ODczNjAsIi4vZGUiOjQ1OTMyLCIuL2RlLWF0Ijo0MzI0OCwiLi9kZS1hdC5qcyI6NDMyNDgsIi4v''@;'; put 'put ''ZGUtY2giOjgzMjIyLCIuL2RlLWNoLmpzIjo4MzIyMiwiLi9kZS5qcyI6NDU5MzIsIi4vZHYiOjY0MDUsIi4vZHYuanMiOjY0MDUsIi4vZWwiOjYwNzE4LCIuL2VsLmpzIjo2MDcxOCwiLi9lbi1hdSI6MzYzMTksIi4vZW4tYXUuanMiOjM2MzE5LCIuL2VuLWNhIjo4MDU5NywiLi9lbi1jYS5q''@;'; put 'put ''cyI6ODA1OTcsIi4vZW4tZ2IiOjUxODAwLCIuL2VuLWdiLmpzIjo1MTgwMCwiLi9lbi1pZSI6ODA3LCIuL2VuLWllLmpzIjo4MDcsIi4vZW4taWwiOjk1OTYwLCIuL2VuLWlsLmpzIjo5NTk2MCwiLi9lbi1pbiI6ODQ0MTgsIi4vZW4taW4uanMiOjg0NDE4LCIuL2VuLW56Ijo0Njg2NSwiLi9l''@;'; put 'put ''bi1uei5qcyI6NDY4NjUsIi4vZW4tc2ciOjMyNjQ3LCIuL2VuLXNnLmpzIjozMjY0NywiLi9lbyI6NjE5MzEsIi4vZW8uanMiOjYxOTMxLCIuL2VzIjo0NjY3OSwiLi9lcy1kbyI6NDE4MDUsIi4vZXMtZG8uanMiOjQxODA1LCIuL2VzLW14Ijo4MzQ0NSwiLi9lcy1teC5qcyI6ODM0NDUsIi4v''@;'; put 'put ''ZXMtdXMiOjgxNTE2LCIuL2VzLXVzLmpzIjo4MTUxNiwiLi9lcy5qcyI6NDY2NzksIi4vZXQiOjg4MTUwLCIuL2V0LmpzIjo4ODE1MCwiLi9ldSI6ODA3NTcsIi4vZXUuanMiOjgwNzU3LCIuL2ZhIjo2NTc0MiwiLi9mYS5qcyI6NjU3NDIsIi4vZmkiOjMzOTU4LCIuL2ZpLmpzIjozMzk1OCwi''@;'; put 'put ''Li9maWwiOjQ2NzIwLCIuL2ZpbC5qcyI6NDY3MjAsIi4vZm8iOjk4MzUyLCIuL2ZvLmpzIjo5ODM1MiwiLi9mciI6NDA1OSwiLi9mci1jYSI6NDIwOTYsIi4vZnItY2EuanMiOjQyMDk2LCIuL2ZyLWNoIjo5NTc1OSwiLi9mci1jaC5qcyI6OTU3NTksIi4vZnIuanMiOjQwNTksIi4vZnkiOjE1''@;'; put 'put ''OTU4LCIuL2Z5LmpzIjoxNTk1OCwiLi9nYSI6OTQxNDMsIi4vZ2EuanMiOjk0MTQzLCIuL2dkIjo2NzAyOCwiLi9nZC5qcyI6NjcwMjgsIi4vZ2wiOjgwNDI4LCIuL2dsLmpzIjo4MDQyOCwiLi9nb20tZGV2YSI6NzY4NjEsIi4vZ29tLWRldmEuanMiOjc2ODYxLCIuL2dvbS1sYXRuIjo1Nzcx''@;'; put 'put ''OCwiLi9nb20tbGF0bi5qcyI6NTc3MTgsIi4vZ3UiOjI2ODI3LCIuL2d1LmpzIjoyNjgyNywiLi9oZSI6MjE5MzYsIi4vaGUuanMiOjIxOTM2LCIuL2hpIjozMTMzMiwiLi9oaS5qcyI6MzEzMzIsIi4vaHIiOjkxOTU3LCIuL2hyLmpzIjo5MTk1NywiLi9odSI6NDg5MjgsIi4vaHUuanMiOjQ4''@;'; put 'put ''OTI4LCIuL2h5LWFtIjo1NjIxNSwiLi9oeS1hbS5qcyI6NTYyMTUsIi4vaWQiOjU4NiwiLi9pZC5qcyI6NTg2LCIuL2lzIjo5MDIxMSwiLi9pcy5qcyI6OTAyMTEsIi4vaXQiOjcwMTcwLCIuL2l0LWNoIjoyMjM0MCwiLi9pdC1jaC5qcyI6MjIzNDAsIi4vaXQuanMiOjcwMTcwLCIuL2phIjoz''@;'; put 'put ''OTc3MCwiLi9qYS5qcyI6Mzk3NzAsIi4vanYiOjczODc1LCIuL2p2LmpzIjo3Mzg3NSwiLi9rYSI6Nzk0OTksIi4va2EuanMiOjc5NDk5LCIuL2trIjo5MzU3MywiLi9ray5qcyI6OTM1NzMsIi4va20iOjY4ODA3LCIuL2ttLmpzIjo2ODgwNywiLi9rbiI6NjUwODIsIi4va24uanMiOjY1MDgy''@;'; put 'put ''LCIuL2tvIjoyMDEzNywiLi9rby5qcyI6MjAxMzcsIi4va3UiOjcwMTExLCIuL2t1LWttciI6NjM3NDQsIi4va3Uta21yLmpzIjo2Mzc0NCwiLi9rdS5qcyI6NzAxMTEsIi4va3kiOjk5MTg3LCIuL2t5LmpzIjo5OTE4NywiLi9sYiI6MzU5NjksIi4vbGIuanMiOjM1OTY5LCIuL2xvIjozMzUy''@;'; put 'put ''NiwiLi9sby5qcyI6MzM1MjYsIi4vbHQiOjkwNDExLCIuL2x0LmpzIjo5MDQxMSwiLi9sdiI6MzI2MjEsIi4vbHYuanMiOjMyNjIxLCIuL21lIjo4NTg2OSwiLi9tZS5qcyI6ODU4NjksIi4vbWkiOjM1ODgxLCIuL21pLmpzIjozNTg4MSwiLi9tayI6OTIzOTEsIi4vbWsuanMiOjkyMzkxLCIu''@;'; put 'put ''L21sIjoyMTEyNiwiLi9tbC5qcyI6MjExMjYsIi4vbW4iOjQ0ODkyLCIuL21uLmpzIjo0NDg5MiwiLi9tciI6NTkwODAsIi4vbXIuanMiOjU5MDgwLCIuL21zIjo3MDM5OSwiLi9tcy1teSI6MjU5NTAsIi4vbXMtbXkuanMiOjI1OTUwLCIuL21zLmpzIjo3MDM5OSwiLi9tdCI6Nzk5MDIsIi4v''@;'; put 'put ''bXQuanMiOjc5OTAyLCIuL215Ijo3Mjk4NSwiLi9teS5qcyI6NzI5ODUsIi4vbmIiOjY3ODU5LCIuL25iLmpzIjo2Nzg1OSwiLi9uZSI6MTM2NDIsIi4vbmUuanMiOjEzNjQyLCIuL25sIjo2NTQ0MSwiLi9ubC1iZSI6OTk4NzUsIi4vbmwtYmUuanMiOjk5ODc1LCIuL25sLmpzIjo2NTQ0MSwi''@;'; put 'put ''Li9ubiI6ODEzMTEsIi4vbm4uanMiOjgxMzExLCIuL29jLWxuYyI6NzI1NjcsIi4vb2MtbG5jLmpzIjo3MjU2NywiLi9wYS1pbiI6NTY5NjIsIi4vcGEtaW4uanMiOjU2OTYyLCIuL3BsIjo2MTA2MywiLi9wbC5qcyI6NjEwNjMsIi4vcHQiOjc4NzE5LCIuL3B0LWJyIjo5NzQ3NiwiLi9wdC1i''@;'; put 'put ''ci5qcyI6OTc0NzYsIi4vcHQuanMiOjc4NzE5LCIuL3JvIjo1MTAwNCwiLi9yby5qcyI6NTEwMDQsIi4vcnUiOjUxMzI2LCIuL3J1LmpzIjo1MTMyNiwiLi9zZCI6NzI2MDgsIi4vc2QuanMiOjcyNjA4LCIuL3NlIjoxMzkxMSwiLi9zZS5qcyI6MTM5MTEsIi4vc2kiOjI1MTQ3LCIuL3NpLmpz''@;'; put 'put ''IjoyNTE0NywiLi9zayI6MjM3NDEsIi4vc2suanMiOjIzNzQxLCIuL3NsIjo5M2UzLCIuL3NsLmpzIjo5M2UzLCIuL3NxIjo2MDQ1MSwiLi9zcS5qcyI6NjA0NTEsIi4vc3IiOjU1MDQ2LCIuL3NyLWN5cmwiOjQwOTA1LCIuL3NyLWN5cmwuanMiOjQwOTA1LCIuL3NyLmpzIjo1NTA0NiwiLi9z''@;'; put 'put ''cyI6ODU3NjUsIi4vc3MuanMiOjg1NzY1LCIuL3N2Ijo5OTI5MCwiLi9zdi5qcyI6OTkyOTAsIi4vc3ciOjUzNDQ5LCIuL3N3LmpzIjo1MzQ0OSwiLi90YSI6NzI2ODgsIi4vdGEuanMiOjcyNjg4LCIuL3RlIjozMjA2MCwiLi90ZS5qcyI6MzIwNjAsIi4vdGV0Ijo5MzI5MCwiLi90ZXQuanMi''@;'; put 'put ''OjkzMjkwLCIuL3RnIjo4Mjk0LCIuL3RnLmpzIjo4Mjk0LCIuL3RoIjoxMjMxLCIuL3RoLmpzIjoxMjMxLCIuL3RrIjozNzQ2LCIuL3RrLmpzIjozNzQ2LCIuL3RsLXBoIjo0OTA0MCwiLi90bC1waC5qcyI6NDkwNDAsIi4vdGxoIjoxNzE4NywiLi90bGguanMiOjE3MTg3LCIuL3RyIjo2MDE1''@;'; put 'put ''MywiLi90ci5qcyI6NjAxNTMsIi4vdHpsIjo4ODUyMSwiLi90emwuanMiOjg4NTIxLCIuL3R6bSI6MTgwMTAsIi4vdHptLWxhdG4iOjIyMjM0LCIuL3R6bS1sYXRuLmpzIjoyMjIzNCwiLi90em0uanMiOjE4MDEwLCIuL3VnLWNuIjo2MzM0OSwiLi91Zy1jbi5qcyI6NjMzNDksIi4vdWsiOjY4''@;'; put 'put ''NDc5LCIuL3VrLmpzIjo2ODQ3OSwiLi91ciI6NDMwMjQsIi4vdXIuanMiOjQzMDI0LCIuL3V6IjoxOTgwMCwiLi91ei1sYXRuIjo3MjM3NiwiLi91ei1sYXRuLmpzIjo3MjM3NiwiLi91ei5qcyI6MTk4MDAsIi4vdmkiOjg5MzY2LCIuL3ZpLmpzIjo4OTM2NiwiLi94LXBzZXVkbyI6Njk3MDIs''@;'; put 'put ''Ii4veC1wc2V1ZG8uanMiOjY5NzAyLCIuL3lvIjo3MjY1NSwiLi95by5qcyI6NzI2NTUsIi4vemgtY24iOjU3NSwiLi96aC1jbi5qcyI6NTc1LCIuL3poLWhrIjoxODM1MSwiLi96aC1oay5qcyI6MTgzNTEsIi4vemgtbW8iOjUxNjI2LCIuL3poLW1vLmpzIjo1MTYyNiwiLi96aC10dyI6ODg4''@;'; put 'put ''NywiLi96aC10dy5qcyI6ODg4N307ZnVuY3Rpb24gXyhWKXt2YXIgdz1wKFYpO3JldHVybiBiKHcpfWZ1bmN0aW9uIHAoVil7aWYoIWIubyhJLFYpKXt2YXIgdz1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitWKyInIik7dGhyb3cgdy5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIix3''@;'; put 'put ''fXJldHVybiBJW1ZdfV8ua2V5cz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyhJKX0sXy5yZXNvbHZlPXAsY2UuZXhwb3J0cz1fLF8uaWQ9MzUzNTh9LDM1Njk2OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMjcwNTQpLkJ1ZmZlcixfPWIoNDEwOTApLHA9dHlwZW9mIFVp''@;'; put 'put ''bnQ4QXJyYXk8InUiLHc9cCYmdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3O2NlLmV4cG9ydHM9ZnVuY3Rpb24oUCxGKXtpZigic3RyaW5nIj09dHlwZW9mIFB8fEkuaXNCdWZmZXIoUCl8fHAmJlAgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx3JiZ3KFApKXJldHVy''@;'; put 'put ''biBfKFAsRik7dGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJkYXRhIiBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBhIEJ1ZmZlciwgYSBVaW50OEFycmF5LCBvciBhIERhdGFWaWV3Jyl9fSwzNTg2MTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQ1NzApLF89ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4hIUl9O18uaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWc9ZnVuY3Rpb24oKXtpZighSSlyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIDEhPT1JKFtdLCJsZW5ndGgiLHt2YWx1ZToxfSkubGVuZ3RofWNhdGNoe3JldHVybiEwfX0sY2UuZXhwb3J0cz1ffSwzNTg4MTpmdW5jdGlvbihjZSxY''@;'; put 'put ''LGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoIm1pIix7bW9udGhzOiJLb2hpLXRcdTAxMDF0ZV9IdWktdGFuZ3VydV9Qb3V0XHUwMTZiLXRlLXJhbmdpX1BhZW5nYS13aFx1MDEwMXdoXHUwMTAxX0hhcmF0dWFfUGlwaXJpX0hcdTAxNGRuZ29pbmdvaV9IZXJl''@;'; put 'put ''LXR1cmkta1x1MDE0ZGtcdTAxMDFfTWFodXJ1X1doaXJpbmdhLVx1MDEwMS1udWt1X1doaXJpbmdhLVx1MDEwMS1yYW5naV9IYWtpaGVhIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJLb2hpX0h1aV9Qb3VfUGFlX0hhcmFfUGlwaV9IXHUwMTRkbmdvaV9IZXJlX01haHVfV2hpLW51X1doaS1y''@;'; put 'put ''YV9IYWtpIi5zcGxpdCgiXyIpLG1vbnRoc1JlZ2V4Oi8oPzpbJ2Etelx1MDEwMVx1MDE0RFx1MDE2Ql0rXC0/KXsxLDN9L2ksbW9udGhzU3RyaWN0UmVnZXg6Lyg/OlsnYS16XHUwMTAxXHUwMTREXHUwMTZCXStcLT8pezEsM30vaSxtb250aHNTaG9ydFJlZ2V4Oi8oPzpbJ2Etelx1MDEwMVx1''@;'; put 'put ''MDE0RFx1MDE2Ql0rXC0/KXsxLDN9L2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovKD86WydhLXpcdTAxMDFcdTAxNERcdTAxNkJdK1wtPyl7MSwyfS9pLHdlZWtkYXlzOiJSXHUwMTAxdGFwdV9NYW5lX1RcdTAxNmJyZWlfV2VuZXJlaV9UXHUwMTAxaXRlX1BhcmFpcmVfSFx1MDEwMXRhcmVp''@;'; put 'put ''Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlRhX01hX1RcdTAxNmJfV2VfVFx1MDEwMWlfUGFfSFx1MDEwMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiVGFfTWFfVFx1MDE2Yl9XZV9UXHUwMTAxaV9QYV9IXHUwMTAxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0i''@;'; put 'put ''LExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBbaV0gSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFtpXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaSB0ZWllIG1haGFuYSwgaV0gTFQiLG5leHREYXk6Ilth''@;'; put 'put ''cG9wbyBpXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2ldIExUIixsYXN0RGF5OiJbaW5hbmFoaSBpXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3doYWthbXV0dW5nYSBpXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaSByb3RvIGkgJXMiLHBhc3Q6IiVzIGkgbXVhIixzOiJ0''@;'; put 'put ''ZSBoXHUwMTEza29uYSBydWFydWEiLHNzOiIlZCBoXHUwMTEza29uYSIsbToiaGUgbWVuZXRpIixtbToiJWQgbWVuZXRpIixoOiJ0ZSBoYW9yYSIsaGg6IiVkIGhhb3JhIixkOiJoZSByYSIsZGQ6IiVkIHJhIixNOiJoZSBtYXJhbWEiLE1NOiIlZCBtYXJhbWEiLHk6ImhlIHRhdSIseXk6IiVk''@;'; put 'put ''IHRhdSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDM1OTY5OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKEYsUix6LE4pe3Zh''@;'; put 'put ''ciBPPXttOlsiZW5nIE1pbnV0dCIsImVuZ2VyIE1pbnV0dCJdLGg6WyJlbmcgU3Rvbm4iLCJlbmdlciBTdG9ubiJdLGQ6WyJlZW4gRGFnIiwiZW5nZW0gRGFnIl0sTTpbImVlIE1vdW50IiwiZW5nZW0gTW91bnQiXSx5OlsiZWUgSm9lciIsImVuZ2VtIEpvZXIiXX07cmV0dXJuIFI/T1t6XVsw''@;'; put 'put ''XTpPW3pdWzFdfWZ1bmN0aW9uIHcoRil7aWYoRj1wYXJzZUludChGLDEwKSxpc05hTihGKSlyZXR1cm4hMTtpZihGPDApcmV0dXJuITA7aWYoRjwxMClyZXR1cm4gNDw9RiYmRjw9NztpZihGPDEwMCl7dmFyIFI9RiUxMDtyZXR1cm4gdygwPT09Uj9GLzEwOlIpfWlmKEY8MWU0KXtmb3IoO0Y+''@;'; put 'put ''PTEwOylGLz0xMDtyZXR1cm4gdyhGKX1yZXR1cm4gdyhGLz0xZTMpfUkuZGVmaW5lTG9jYWxlKCJsYiIse21vbnRoczoiSmFudWFyX0ZlYnJ1YXJfTVx4ZTRlcnpfQWJyXHhlYmxsX01lZV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyIi5zcGxp''@;'; put 'put ''dCgiXyIpLG1vbnRoc1Nob3J0OiJKYW4uX0ZlYnIuX01yei5fQWJyLl9NZWVfSnVuLl9KdWwuX0F1Zy5fU2VwdC5fT2t0Ll9Ob3YuX0Rlei4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiU29ubmRlZ19NXHhlOWluZGVnX0RceGVibnNjaGRlZ19NXHhlYnR0d29j''@;'; put 'put ''aF9Eb25uZXNjaGRlZ19GcmVpZGVnX1NhbXNjaGRlZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTby5fTVx4ZTkuX0RceGViLl9NXHhlYi5fRG8uX0ZyLl9TYS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNvX01ceGU5X0RceGViX01ceGViX0RvX0ZyX1NhIi5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0gW0F1ZXJdIixMVFM6Ikg6bW06c3MgW0F1ZXJdIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIFtBdWVyXSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEg6''@;'; put 'put ''bW0gW0F1ZXJdIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIYXV0IHVtXSBMVCIsc2FtZUVsc2U6IkwiLG5leHREYXk6IltNdWVyIHVtXSBMVCIsbmV4dFdlZWs6ImRkZGQgW3VtXSBMVCIsbGFzdERheToiW0dceGVic2NodGVyIHVtXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhp''@;'; put 'put ''cy5kYXkoKSl7Y2FzZSAyOmNhc2UgNDpyZXR1cm4iW0xlc2NodGVuXSBkZGRkIFt1bV0gTFQiO2RlZmF1bHQ6cmV0dXJuIltMZXNjaHRlXSBkZGRkIFt1bV0gTFQifX19LHJlbGF0aXZlVGltZTp7ZnV0dXJlOmZ1bmN0aW9uIHAoRil7cmV0dXJuIHcoRi5zdWJzdHIoMCxGLmluZGV4T2YoIiAi''@;'; put 'put ''KSkpPyJhICIrRjoiYW4gIitGfSxwYXN0OmZ1bmN0aW9uIFYoRil7cmV0dXJuIHcoRi5zdWJzdHIoMCxGLmluZGV4T2YoIiAiKSkpPyJ2aXJ1ICIrRjoidmlydW4gIitGfSxzOiJlIHB1ZXIgU2Vrb25uZW4iLHNzOiIlZCBTZWtvbm5lbiIsbTpfLG1tOiIlZCBNaW51dHRlbiIsaDpfLGhoOiIl''@;'; put 'put ''ZCBTdG9ubmVuIixkOl8sZGQ6IiVkIERlZWciLE06XyxNTToiJWQgTVx4ZTlpbnQiLHk6Xyx5eToiJWQgSm9lciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSwzNjE0MzooY2UsWCxiKT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDIzMzEzKSxwPWIoNTg1NDApLmNvbmNhdCgibGVuZ3RoIiwicHJvdG90eXBlIik7WC5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbih3KXtyZXR1cm4gSSh3LHApfX0sMzYyODM6KGNlLFgsYik9Pnt2YXIgST1iKDQ3NzQwKTtYLnRh''@;'; put 'put ''Z0NsYXNzPXswOiJ1bml2ZXJzYWwiLDE6ImFwcGxpY2F0aW9uIiwyOiJjb250ZXh0IiwzOiJwcml2YXRlIn0sWC50YWdDbGFzc0J5TmFtZT1JLl9yZXZlcnNlKFgudGFnQ2xhc3MpLFgudGFnPXswOiJlbmQiLDE6ImJvb2wiLDI6ImludCIsMzoiYml0c3RyIiw0OiJvY3RzdHIiLDU6Im51bGxf''@;'; put 'put ''Iiw2OiJvYmppZCIsNzoib2JqRGVzYyIsODoiZXh0ZXJuYWwiLDk6InJlYWwiLDEwOiJlbnVtIiwxMToiZW1iZWQiLDEyOiJ1dGY4c3RyIiwxMzoicmVsYXRpdmVPaWQiLDE2OiJzZXEiLDE3OiJzZXQiLDE4OiJudW1zdHIiLDE5OiJwcmludHN0ciIsMjA6InQ2MXN0ciIsMjE6InZpZGVvc3Ry''@;'; put 'put ''IiwyMjoiaWE1c3RyIiwyMzoidXRjdGltZSIsMjQ6ImdlbnRpbWUiLDI1OiJncmFwaHN0ciIsMjY6ImlzbzY0NnN0ciIsMjc6ImdlbnN0ciIsMjg6InVuaXN0ciIsMjk6ImNoYXJzdHIiLDMwOiJibXBzdHIifSxYLnRhZ0J5TmFtZT1JLl9yZXZlcnNlKFgudGFnKX0sMzYzMTk6ZnVuY3Rpb24o''@;'; put 'put ''Y2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJlbi1hdSIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxt''@;'; put 'put ''b250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6''@;'; put 'put ''IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExM''@;'; put 'put ''TDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0g''@;'; put 'put ''TFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3Vy''@;'; put 'put ''IixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihwKXt2YXIgVj1w''@;'; put 'put ''JTEwO3JldHVybiBwKygxPT1+fihwJTEwMC8xMCk/InRoIjoxPT09Vj8ic3QiOjI9PT1WPyJuZCI6Mz09PVY/InJkIjoidGgiKX0sd2Vlazp7ZG93OjAsZG95OjR9fSl9KGIoOTc1ODYpKX0sMzY1MDY6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0NDA2NiksXz1iKDU1NTkyKSxW''@;'; put 'put ''PWIoMzM5NjMpLlN0cmluZztjZS5leHBvcnRzPSEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmIV8oZnVuY3Rpb24oKXt2YXIgdz1TeW1ib2woInN5bWJvbCBkZXRlY3Rpb24iKTtyZXR1cm4hVih3KXx8IShPYmplY3QodylpbnN0YW5jZW9mIFN5bWJvbCl8fCFTeW1ib2wuc2hhbSYm''@;'; put 'put ''SSYmSTw0MX0pfSwzNjU3ODooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDI4MzY3KSxfPWIoNDY5MjYpLHA9YigzMTQ4MyksVj1iKDExMDgpLHc9Yig3NTQyNCksUD1iKDYzNjI3KSxGPWIoNjk5MTcpLFI9Yig2NjU0Miksej1iKDg4Nzg4KSxOPWIoNTY3NDUpLE89Yig0MTI1Miks''@;'; put 'put ''Sz0heiYmIU4oImZsYXRNYXAiLGZ1bmN0aW9uKCl7fSksWj0heiYmIUsmJk8oImZsYXRNYXAiLFR5cGVFcnJvciksWT16fHxLfHxaLFc9RihmdW5jdGlvbigpe2Zvcih2YXIgSixyZSxxPXRoaXMuaXRlcmF0b3IsZWU9dGhpcy5tYXBwZXI7Oyl7aWYocmU9dGhpcy5pbm5lcil0cnl7aWYoIShK''@;'; put 'put ''PVYoXyhyZS5uZXh0LHJlLml0ZXJhdG9yKSkpLmRvbmUpcmV0dXJuIEoudmFsdWU7dGhpcy5pbm5lcj1udWxsfWNhdGNoKGllKXtSKHEsInRocm93IixpZSl9aWYoSj1WKF8odGhpcy5uZXh0LHEpKSx0aGlzLmRvbmU9ISFKLmRvbmUpcmV0dXJuO3RyeXt0aGlzLmlubmVyPVAoZWUoSi52YWx1''@;'; put 'put ''ZSx0aGlzLmNvdW50ZXIrKyksITEpfWNhdGNoKGllKXtSKHEsInRocm93IixpZSl9fX0pO0koe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOll9LHtmbGF0TWFwOmZ1bmN0aW9uKGVlKXtWKHRoaXMpO3RyeXtwKGVlKX1jYXRjaChKKXtSKHRoaXMsInRocm93IixK''@;'; put 'put ''KX1yZXR1cm4gWj9fKFosdGhpcyxlZSk6bmV3IFcodyh0aGlzKSx7bWFwcGVyOmVlLGlubmVyOm51bGx9KX19KX0sMzY2MzY6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig4MzgzOCkuQnVmZmVyLF89Yig3MTk5MykscD1iKDE5ODQ2KSxWPW5ldyBBcnJheSgxNiksdz1bMCwxLDIs''@;'; put 'put ''Myw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSw3LDQsMTMsMSwxMCw2LDE1LDMsMTIsMCw5LDUsMiwxNCwxMSw4LDMsMTAsMTQsNCw5LDE1LDgsMSwyLDcsMCw2LDEzLDExLDUsMTIsMSw5LDExLDEwLDAsOCwxMiw0LDEzLDMsNywxNSwxNCw1LDYsMiw0LDAsNSw5LDcsMTIsMiwxMCwx''@;'; put 'put ''NCwxLDMsOCwxMSw2LDE1LDEzXSxQPVs1LDE0LDcsMCw5LDIsMTEsNCwxMyw2LDE1LDgsMSwxMCwzLDEyLDYsMTEsMyw3LDAsMTMsNSwxMCwxNCwxNSw4LDEyLDQsOSwxLDIsMTUsNSwxLDMsNywxNCw2LDksMTEsOCwxMiwyLDEwLDAsNCwxMyw4LDYsNCwxLDMsMTEsMTUsMCw1LDEyLDIsMTMs''@;'; put 'put ''OSw3LDEwLDE0LDEyLDE1LDEwLDQsMSw1LDgsNyw2LDIsMTMsMTQsMCwzLDksMTFdLEY9WzExLDE0LDE1LDEyLDUsOCw3LDksMTEsMTMsMTQsMTUsNiw3LDksOCw3LDYsOCwxMywxMSw5LDcsMTUsNywxMiwxNSw5LDExLDcsMTMsMTIsMTEsMTMsNiw3LDE0LDksMTMsMTUsMTQsOCwxMyw2LDUs''@;'; put 'put ''MTIsNyw1LDExLDEyLDE0LDE1LDE0LDE1LDksOCw5LDE0LDUsNiw4LDYsNSwxMiw5LDE1LDUsMTEsNiw4LDEzLDEyLDUsMTIsMTMsMTQsMTEsOCw1LDZdLFI9WzgsOSw5LDExLDEzLDE1LDE1LDUsNyw3LDgsMTEsMTQsMTQsMTIsNiw5LDEzLDE1LDcsMTIsOCw5LDExLDcsNywxMiw3LDYsMTUs''@;'; put 'put ''MTMsMTEsOSw3LDE1LDExLDgsNiw2LDE0LDEyLDEzLDUsMTQsMTMsMTMsNyw1LDE1LDUsOCwxMSwxNCwxNCw2LDE0LDYsOSwxMiw5LDEyLDUsMTUsOCw4LDUsMTIsOSwxMiw1LDE0LDYsOCwxMyw2LDUsMTUsMTMsMTEsMTFdLHo9WzAsMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgs''@;'; put 'put ''Mjg0MDg1MzgzOF0sTj1bMTM1MjgyOTkyNiwxNTQ4NjAzNjg0LDE4MzYwNzI2OTEsMjA1Mzk5NDIxNywwXTtmdW5jdGlvbiBPKEoscmUpe3JldHVybiBKPDxyZXxKPj4+MzItcmV9ZnVuY3Rpb24gSyhKLHJlLGllLHVlLGdlLF9lLFRlLE1lKXtyZXR1cm4gTyhKKyhyZV5pZV51ZSkrX2UrVGV8''@;'; put 'put ''MCxNZSkrZ2V8MH1mdW5jdGlvbiBaKEoscmUsaWUsdWUsZ2UsX2UsVGUsTWUpe3JldHVybiBPKEorKHJlJmllfH5yZSZ1ZSkrX2UrVGV8MCxNZSkrZ2V8MH1mdW5jdGlvbiBZKEoscmUsaWUsdWUsZ2UsX2UsVGUsTWUpe3JldHVybiBPKEorKChyZXx+aWUpXnVlKStfZStUZXwwLE1lKStnZXww''@;'; put 'put ''fWZ1bmN0aW9uIFcoSixyZSxpZSx1ZSxnZSxfZSxUZSxNZSl7cmV0dXJuIE8oSisocmUmdWV8aWUmfnVlKStfZStUZXwwLE1lKStnZXwwfWZ1bmN0aW9uIHEoSixyZSxpZSx1ZSxnZSxfZSxUZSxNZSl7cmV0dXJuIE8oSisocmVeKGllfH51ZSkpK19lK1RlfDAsTWUpK2dlfDB9ZnVuY3Rpb24g''@;'; put 'put ''ZWUoKXtwLmNhbGwodGhpcyw2NCksdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4NzgsdGhpcy5fZT0zMjg1Mzc3NTIwfV8oZWUscCksZWUucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIEo9''@;'; put 'put ''VixyZT0wO3JlPDE2OysrcmUpSltyZV09dGhpcy5fYmxvY2sucmVhZEludDMyTEUoNCpyZSk7Zm9yKHZhciBpZT0wfHRoaXMuX2EsdWU9MHx0aGlzLl9iLGdlPTB8dGhpcy5fYyxfZT0wfHRoaXMuX2QsVGU9MHx0aGlzLl9lLE1lPTB8dGhpcy5fYSxaZT0wfHRoaXMuX2IsQj0wfHRoaXMuX2Ms''@;'; put 'put ''Zz0wfHRoaXMuX2QseT0wfHRoaXMuX2UseD0wO3g8ODA7eCs9MSl7dmFyIEMsVDt4PDE2PyhDPUsoaWUsdWUsZ2UsX2UsVGUsSlt3W3hdXSx6WzBdLEZbeF0pLFQ9cShNZSxaZSxCLGcseSxKW1BbeF1dLE5bMF0sUlt4XSkpOng8MzI/KEM9WihpZSx1ZSxnZSxfZSxUZSxKW3dbeF1dLHpbMV0s''@;'; put 'put ''Rlt4XSksVD1XKE1lLFplLEIsZyx5LEpbUFt4XV0sTlsxXSxSW3hdKSk6eDw0OD8oQz1ZKGllLHVlLGdlLF9lLFRlLEpbd1t4XV0selsyXSxGW3hdKSxUPVkoTWUsWmUsQixnLHksSltQW3hdXSxOWzJdLFJbeF0pKTp4PDY0PyhDPVcoaWUsdWUsZ2UsX2UsVGUsSlt3W3hdXSx6WzNdLEZbeF0p''@;'; put 'put ''LFQ9WihNZSxaZSxCLGcseSxKW1BbeF1dLE5bM10sUlt4XSkpOihDPXEoaWUsdWUsZ2UsX2UsVGUsSlt3W3hdXSx6WzRdLEZbeF0pLFQ9SyhNZSxaZSxCLGcseSxKW1BbeF1dLE5bNF0sUlt4XSkpLGllPVRlLFRlPV9lLF9lPU8oZ2UsMTApLGdlPXVlLHVlPUMsTWU9eSx5PWcsZz1PKEIsMTAp''@;'; put 'put ''LEI9WmUsWmU9VH12YXIgSD10aGlzLl9iK2dlK2d8MDt0aGlzLl9iPXRoaXMuX2MrX2UreXwwLHRoaXMuX2M9dGhpcy5fZCtUZStNZXwwLHRoaXMuX2Q9dGhpcy5fZStpZStaZXwwLHRoaXMuX2U9dGhpcy5fYSt1ZStCfDAsdGhpcy5fYT1IfSxlZS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlv''@;'; put 'put ''bigpe3RoaXMuX2Jsb2NrW3RoaXMuX2Jsb2NrT2Zmc2V0XT0xMjgsdGhpcy5fYmxvY2tPZmZzZXQrPTEsdGhpcy5fYmxvY2tPZmZzZXQ+NTYmJih0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNjQpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTApLHRoaXMu''@;'; put 'put ''X2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMF0sNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzFdLDYwKSx0aGlzLl91cGRhdGUoKTt2YXIgSj1JLmFsbG9jP0kuYWxsb2Mo''@;'; put 'put ''MjApOm5ldyBJKDIwKTtyZXR1cm4gSi53cml0ZUludDMyTEUodGhpcy5fYSwwKSxKLndyaXRlSW50MzJMRSh0aGlzLl9iLDQpLEoud3JpdGVJbnQzMkxFKHRoaXMuX2MsOCksSi53cml0ZUludDMyTEUodGhpcy5fZCwxMiksSi53cml0ZUludDMyTEUodGhpcy5fZSwxNiksSn0sY2UuZXhwb3J0''@;'; put 'put ''cz1lZX0sMzY2Nzg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0NjM4NyksXz1iKDQ0NjQ4KSxwPWIoNzc3NzMpO2NlLmV4cG9ydHM9ST9mdW5jdGlvbihWLHcsUCl7cmV0dXJuIF8uZihWLHcscCgxLFApKX06ZnVuY3Rpb24oVix3LFApe3JldHVybiBWW3ddPVAsVn19LDM2OTMy''@;'; put 'put ''OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNzE4MjQpLF89Yig4NjExNSkscD1iKDk0NDY4KSxWPWIoMTkyNTgpLFA9Yig1ODAxMikoIml0ZXJhdG9yIik7Y2UuZXhwb3J0cz1mdW5jdGlvbihGKXtpZighcChGKSlyZXR1cm4gXyhGLFApfHxfKEYsIkBAaXRlcmF0b3IiKXx8VltJ''@;'; put 'put ''KEYpXX19LDM3MDc1OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNDY5MjYpLF89YigzOGUzKSxwPWIoNDY4KSxWPWIoNzg3MjcpLHc9YigyMjc1NCksUD1SZWdFeHAucHJvdG90eXBlO2NlLmV4cG9ydHM9Vi5jb3JyZWN0P2Z1bmN0aW9uKEYpe3JldHVybiBGLmZsYWdzfTpmdW5j''@;'; put 'put ''dGlvbihGKXtyZXR1cm4gVi5jb3JyZWN0fHwhcChQLEYpfHxfKEYsImZsYWdzIik/Ri5mbGFnczpJKHcsRil9fSwzNzE2MzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDY4MjgzKSxfPWIoMzkyMTApO2Z1bmN0aW9uIHAoVix3LFApe2lmKCEodGhpcyBpbnN0YW5jZW9mIHApKXJl''@;'; put 'put ''dHVybiBuZXcgcChWLHcsUCk7dGhpcy5IYXNoPVYsdGhpcy5ibG9ja1NpemU9Vi5ibG9ja1NpemUvOCx0aGlzLm91dFNpemU9Vi5vdXRTaXplLzgsdGhpcy5pbm5lcj1udWxsLHRoaXMub3V0ZXI9bnVsbCx0aGlzLl9pbml0KEkudG9BcnJheSh3LFApKX1jZS5leHBvcnRzPXAscC5wcm90b3R5''@;'; put 'put ''cGUuX2luaXQ9ZnVuY3Rpb24odyl7dy5sZW5ndGg+dGhpcy5ibG9ja1NpemUmJih3PShuZXcgdGhpcy5IYXNoKS51cGRhdGUodykuZGlnZXN0KCkpLF8ody5sZW5ndGg8PXRoaXMuYmxvY2tTaXplKTtmb3IodmFyIFA9dy5sZW5ndGg7UDx0aGlzLmJsb2NrU2l6ZTtQKyspdy5wdXNoKDApO2Zv''@;'; put 'put ''cihQPTA7UDx3Lmxlbmd0aDtQKyspd1tQXV49NTQ7Zm9yKHRoaXMuaW5uZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZSh3KSxQPTA7UDx3Lmxlbmd0aDtQKyspd1tQXV49MTA2O3RoaXMub3V0ZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZSh3KX0scC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9u''@;'; put 'put ''KHcsUCl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKHcsUCksdGhpc30scC5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKHcpe3JldHVybiB0aGlzLm91dGVyLnVwZGF0ZSh0aGlzLmlubmVyLmRpZ2VzdCgpKSx0aGlzLm91dGVyLmRpZ2VzdCh3KX19LDM3MTk2OmNlPT57Y2UuZXhwb3J0cz1m''@;'; put 'put ''dW5jdGlvbihiLEkpe2Zvcih2YXIgXz1iLmxlbmd0aCxwPS0xOysrcDxfOyliW3BdXj1JW3BdO3JldHVybiBifX0sMzc0ODI6ZnVuY3Rpb24oY2Upe2NlLmV4cG9ydHM9ZnVuY3Rpb24oWCl7dmFyIGI9e307ZnVuY3Rpb24gSShfKXtpZihiW19dKXJldHVybiBiW19dLmV4cG9ydHM7dmFyIHA9''@;'; put 'put ''YltfXT17aTpfLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIFhbX10uY2FsbChwLmV4cG9ydHMscCxwLmV4cG9ydHMsSSkscC5sPSEwLHAuZXhwb3J0c31yZXR1cm4gSS5tPVgsSS5jPWIsSS5kPWZ1bmN0aW9uKF8scCxWKXtJLm8oXyxwKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KF8scCx7ZW51''@;'; put 'put ''bWVyYWJsZTohMCxnZXQ6Vn0pfSxJLnI9ZnVuY3Rpb24oXyl7dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KF8sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLCJfX2Vz''@;'; put 'put ''TW9kdWxlIix7dmFsdWU6ITB9KX0sSS50PWZ1bmN0aW9uKF8scCl7aWYoMSZwJiYoXz1JKF8pKSw4JnB8fDQmcCYmIm9iamVjdCI9PXR5cGVvZiBfJiZfJiZfLl9fZXNNb2R1bGUpcmV0dXJuIF87dmFyIFY9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihJLnIoViksT2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KFYsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOl99KSwyJnAmJiJzdHJpbmciIT10eXBlb2YgXylmb3IodmFyIHcgaW4gXylJLmQoVix3LGZ1bmN0aW9uKFApe3JldHVybiBfW1BdfS5iaW5kKG51bGwsdykpO3JldHVybiBWfSxJLm49ZnVuY3Rpb24oXyl7dmFyIHA9XyYmXy5f''@;'; put 'put ''X2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIF8uZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gX307cmV0dXJuIEkuZChwLCJhIixwKSxwfSxJLm89ZnVuY3Rpb24oXyxwKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF8scCl9LEkucD0iIixJKEkucz0i''@;'; put 'put ''Li9wcm9qZWN0cy9pY29ucy9zcmMvaW5kZXgudHMiKX0oeyIuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtYXBpLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29u''@;'; put 'put ''cy9zcmMvY2xyLWljb25zLWFwaS50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgsYixJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGIuQ2xhcml0eUljb25zQXBpPXZvaWQgMDt2YXIgXz1JKAovKiEgLi91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc2hhcGUtdGVtcGxhdGUtb2JzZXJ2ZXIudHMi''@;'; put 'put ''KSxwPXt9LFY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB3KCl7fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodywiaW5zdGFuY2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdy5zaW5nbGVJbnN0YW5jZXx8KHcuc2luZ2xlSW5zdGFuY2U9bmV3IHcpLHcuc2luZ2xlSW5zdGFuY2V9LGVudW1l''@;'; put 'put ''cmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksdy5wcm90b3R5cGUudmFsaWRhdGVOYW1lPWZ1bmN0aW9uKFApe2lmKDA9PT1QLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlNoYXBlIG5hbWUgb3IgYWxpYXMgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmchIik7aWYoL1xzLy50ZXN0KFApKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigiU2hhcGUgbmFtZSBvciBhbGlhcyBtdXN0IG5vdCBjb250YWluIGFueSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMhIik7cmV0dXJuITB9LHcucHJvdG90eXBlLm5vcm1hbGl6ZVNoYXBlTmFtZT1mdW5jdGlvbihQKXtyZXR1cm4gUC50b0xvd2VyQ2FzZSgpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5zZXRJY29uVGVtcGxhdGU9ZnVuY3Rpb24oUCxGKXt2YXIgUj1GLnRyaW0oKTt0aGlzLnZhbGlkYXRlTmFtZShQKSYmKFA9dGhpcy5ub3JtYWxpemVTaGFwZU5hbWUoUCkscFtQXSYmZGVsZXRlIHBbUF0scFtQXT1SLF8uU2hhcGVUZW1wbGF0ZU9ic2VydmVyLmluc3RhbmNlLmVtaXRD''@;'; put 'put ''aGFuZ2VzKFAsUikpfSx3LnByb3RvdHlwZS5zZXRJY29uQWxpYXNlcz1mdW5jdGlvbihQLEYsUil7Zm9yKHZhciB6PTAsTj1SO3o8Ti5sZW5ndGg7eisrKXt2YXIgTz1OW3pdO3RoaXMudmFsaWRhdGVOYW1lKE8pJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoUCxPLHtnZXQ6ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gUFtGXX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX19LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihQKXtpZigib2JqZWN0IiE9dHlwZW9mIFApdGhyb3cgbmV3IEVycm9yKCdUaGUgYXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3QgbGl0ZXJhbCBwYXNzZWQgaW4gdGhl''@;'; put 'put ''IGZvbGxvd2luZyBwYXR0ZXJuOlxuICAgICAgICAgICAgICAgIHsgInNoYXBlLW5hbWUiOiAic2hhcGUtdGVtcGxhdGUiIH0nKTtmb3IodmFyIEYgaW4gUClQLmhhc093blByb3BlcnR5KEYpJiZ0aGlzLnNldEljb25UZW1wbGF0ZShGLFBbRl0pfSx3LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24o''@;'; put 'put ''UCl7cmV0dXJuISFwW3RoaXMubm9ybWFsaXplU2hhcGVOYW1lKFApXX0sdy5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKFApe2lmKCFQKXJldHVybiBwO2lmKCJzdHJpbmciIT10eXBlb2YgUCl0aHJvdyBuZXcgVHlwZUVycm9yKCJPbmx5IHN0cmluZyBhcmd1bWVudCBpcyBhbGxvd2VkIGluIHRo''@;'; put 'put ''aXMgbWV0aG9kLiIpO3JldHVybiBwW3RoaXMubm9ybWFsaXplU2hhcGVOYW1lKFApXX0sdy5wcm90b3R5cGUuYWxpYXM9ZnVuY3Rpb24oUCl7aWYoIm9iamVjdCIhPXR5cGVvZiBQKXRocm93IG5ldyBFcnJvcignVGhlIGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0IGxpdGVyYWwgcGFzc2Vk''@;'; put 'put ''IGluIHRoZSBmb2xsb3dpbmcgcGF0dGVybjpcbiAgICAgICAgICAgICAgICB7ICJzaGFwZS1uYW1lIjogWyJhbGlhcy1uYW1lIiwgLi4uXSB9Jyk7Zm9yKHZhciBGIGluIFApaWYoUC5oYXNPd25Qcm9wZXJ0eShGKSl7aWYoIXAuaGFzT3duUHJvcGVydHkoRikpdGhyb3cgbmV3IEVycm9yKCdB''@;'; put 'put ''biBpY29uICInK0YrIlwiIHlvdSBhcmUgdHJ5aW5nIHRvIHNldCBhbGlhc2VzIHRvIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIENsYXJpdHkgSWNvbnMgc2V0cyEiKTt0aGlzLnNldEljb25BbGlhc2VzKHAsRixQW0ZdKX19LHd9KCk7Yi5DbGFyaXR5SWNvbnNBcGk9Vn0sIi4vcHJvamVjdHMvaWNv''@;'; put 'put ''bnMvc3JjL2Nsci1pY29ucy1lbGVtZW50LnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1lbGVtZW50LnRzICoqKiEKICAgICAgICAg''@;'; put 'put ''ICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgsYixJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZToh''@;'; put 'put ''MH0pLGIuQ2xhcml0eUljb25FbGVtZW50PXZvaWQgMDt2YXIgXz1JKAovKiEgLi9jbHItaWNvbnMtYXBpICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtYXBpLnRzIikscD1JKAovKiEgLi91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlciAqLwoiLi9wcm9qZWN0cy9pY29u''@;'; put 'put ''cy9zcmMvdXRpbHMvc2hhcGUtdGVtcGxhdGUtb2JzZXJ2ZXIudHMiKSxWPTAsdz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7dy5jbGFzc05hbWU9ImlzLW9mZi1zY3JlZW4iO3ZhciBQPWZ1bmN0aW9uKCl7cmV0dXJuIEhUTUxFbGVtZW50LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07''@;'; put 'put ''ZnVuY3Rpb24gRigpe3ZhciBSPVAuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBSLmNsckljb25VbmlxSWQ9Il9jbHJfaWNvbl8iK1YsVisrLFJ9Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYoUD1mdW5jdGlvbigpe3JldHVybiBSZWZsZWN0LmNvbnN0cnVjdChIVE1MRWxlbWVudCxh''@;'; put 'put ''cmd1bWVudHMsdGhpcy5jb25zdHJ1Y3Rvcil9KSxiLkNsYXJpdHlJY29uRWxlbWVudD1GLEYub2JzZXJ2ZWRBdHRyaWJ1dGVzPVsic2hhcGUiLCJzaXplIiwidGl0bGUiXSwoRi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShIVE1MRWxlbWVudC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOntjb25m''@;'; put 'put ''aWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Rn19KSkuY29uc3RydWN0b3I9RixGLnByb3RvdHlwZS5fYXBwZW5kQ3VzdG9tVGl0bGU9ZnVuY3Rpb24oKXt2YXIgUj13LmNsb25lTm9kZSghMSk7Ui5pZD10aGlzLmNsckljb25VbmlxSWQsUi50ZXh0Q29udGVudD10aGlzLmN1cnJlbnRU''@;'; put 'put ''aXRsZUF0dHJWYWwsdGhpcy5hcHBlbmRDaGlsZChSKX0sRi5wcm90b3R5cGUuX3NldEljb25TaXplPWZ1bmN0aW9uKFIpeyFOdW1iZXIoUil8fE51bWJlcihSKTwwPyh0aGlzLnN0eWxlLndpZHRoPW51bGwsdGhpcy5zdHlsZS5oZWlnaHQ9bnVsbCk6KHRoaXMuc3R5bGUud2lkdGg9UisicHgi''@;'; put 'put ''LHRoaXMuc3R5bGUuaGVpZ2h0PVIrInB4Iil9LEYucHJvdG90eXBlLl9ub3JtYWxpemVTaGFwZT1mdW5jdGlvbihSKXtyZXR1cm4gUi5zcGxpdCgvXHMvKVswXS50b0xvd2VyQ2FzZSgpfSxGLnByb3RvdHlwZS5jb25uZWN0ZWRDYWxsYmFjaz1mdW5jdGlvbigpe3ZhciBSPXRoaXM7aWYodGhp''@;'; put 'put ''cy5nZXRBdHRyaWJ1dGUoInJvbGUiKXx8dGhpcy5zZXRBdHRyaWJ1dGUoInJvbGUiLCJub25lIiksdGhpcy5oYXNBdHRyaWJ1dGUoInNpemUiKSl7dmFyIHo9dGhpcy5nZXRBdHRyaWJ1dGUoInNpemUiKTt0aGlzLmN1cnJlbnRTaXplQXR0clZhbCE9PXomJih0aGlzLmN1cnJlbnRTaXplQXR0''@;'; put 'put ''clZhbD16LHRoaXMuX3NldEljb25TaXplKHopKX1pZih0aGlzLmhhc0F0dHJpYnV0ZSgic2hhcGUiKSl7dmFyIE49dGhpcy5fbm9ybWFsaXplU2hhcGUodGhpcy5nZXRBdHRyaWJ1dGUoInNoYXBlIikpO2lmKHRoaXMuX3NoYXBlVGVtcGxhdGVTdWJzY3JpcHRpb249cC5TaGFwZVRlbXBsYXRl''@;'; put 'put ''T2JzZXJ2ZXIuaW5zdGFuY2Uuc3Vic2NyaWJlVG8oTixmdW5jdGlvbihaKXtSLl9pbmplY3RUZW1wbGF0ZShaKX0pLHRoaXMuY3VycmVudFNoYXBlQXR0clZhbD1OLCFfLkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZS5oYXModGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsKSlyZXR1cm4gdm9pZCB0''@;'; put 'put ''aGlzLl9pbmplY3RFcnJvclRlbXBsYXRlKCk7dmFyIE89Xy5DbGFyaXR5SWNvbnNBcGkuaW5zdGFuY2UuZ2V0KHRoaXMuY3VycmVudFNoYXBlQXR0clZhbCk7aWYoTz09PXRoaXMuY3VycmVudFNoYXBlVGVtcGxhdGUpcmV0dXJuO3RoaXMuY3VycmVudFNoYXBlVGVtcGxhdGU9T31pZih0aGlz''@;'; put 'put ''Lmhhc0F0dHJpYnV0ZSgidGl0bGUiKSl7dmFyIEs9dGhpcy5nZXRBdHRyaWJ1dGUoInRpdGxlIik7aWYodGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsIT09SyYmKHRoaXMuY3VycmVudFRpdGxlQXR0clZhbD1LKSwhdGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsKXJldHVybn10aGlzLl9pbmplY3RU''@;'; put 'put ''ZW1wbGF0ZSgpfSxGLnByb3RvdHlwZS5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2s9ZnVuY3Rpb24oUix6LE4pe3ZhciBPPXRoaXM7aWYoInNpemUiPT09UiYmdGhpcy5fc2V0SWNvblNpemUoTiksInNoYXBlIj09PVIpe2lmKHRoaXMuY3VycmVudFNoYXBlQXR0clZhbD10aGlzLl9ub3JtYWxp''@;'; put 'put ''emVTaGFwZShOKSx0aGlzLl9zaGFwZVRlbXBsYXRlU3Vic2NyaXB0aW9uJiYodGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbigpLHRoaXMuX3NoYXBlVGVtcGxhdGVTdWJzY3JpcHRpb249cC5TaGFwZVRlbXBsYXRlT2JzZXJ2ZXIuaW5zdGFuY2Uuc3Vic2NyaWJlVG8odGhpcy5jdXJy''@;'; put 'put ''ZW50U2hhcGVBdHRyVmFsLGZ1bmN0aW9uKEspe08uX2luamVjdFRlbXBsYXRlKEspfSkpLCFfLkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZS5oYXModGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsKSlyZXR1cm4gdm9pZCB0aGlzLl9pbmplY3RFcnJvclRlbXBsYXRlKCk7dGhpcy5jdXJyZW50U2hh''@;'; put 'put ''cGVUZW1wbGF0ZT1fLkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZS5nZXQodGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsKX0idGl0bGUiPT09UiYmKHRoaXMuY3VycmVudFRpdGxlQXR0clZhbD1OLCF0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpfHx0aGlzLl9pbmplY3RUZW1wbGF0ZSgpfSxGLnBy''@;'; put 'put ''b3RvdHlwZS5kaXNjb25uZWN0ZWRDYWxsYmFjaz1mdW5jdGlvbigpe3RoaXMuX3NoYXBlVGVtcGxhdGVTdWJzY3JpcHRpb24mJnRoaXMuX3NoYXBlVGVtcGxhdGVTdWJzY3JpcHRpb24oKX0sRi5wcm90b3R5cGUuX3NldEFyaWFMYWJlbGxlZEJ5PWZ1bmN0aW9uKCl7dmFyIFI9dGhpcy5nZXRB''@;'; put 'put ''dHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIpLE49dGhpcy5xdWVyeVNlbGVjdG9yKCJzdmciKXx8dGhpcztSP1ImJlIuaW5kZXhPZih0aGlzLmNsckljb25VbmlxSWQpPDAmJk4uc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLFIrIiAiK3RoaXMuY2xySWNvblVuaXFJZCk6Ti5zZXRB''@;'; put 'put ''dHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIsdGhpcy5jbHJJY29uVW5pcUlkKX0sRi5wcm90b3R5cGUuX2luamVjdFRlbXBsYXRlPWZ1bmN0aW9uKFIpe1ImJlIhPT10aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlJiYodGhpcy5jdXJyZW50U2hhcGVUZW1wbGF0ZT1SKSx0aGlzLmlubmVySFRN''@;'; put 'put ''TD10aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlLHRoaXMuY3VycmVudFRpdGxlQXR0clZhbCYmKHRoaXMuX3NldEFyaWFMYWJlbGxlZEJ5KCksdGhpcy5fYXBwZW5kQ3VzdG9tVGl0bGUoKSl9LEYucHJvdG90eXBlLl9pbmplY3RFcnJvclRlbXBsYXRlPWZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50''@;'; put 'put ''U2hhcGVUZW1wbGF0ZT1fLkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZS5nZXQoImVycm9yIiksdGhpcy5faW5qZWN0VGVtcGxhdGUoKX19LCIuL3Byb2plY3RzL2ljb25zL3NyYy9pbmRleC50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAg''@;'; put 'put ''ICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9pbmRleC50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihYLGIsSSl7InVzZSBzdHJpY3Qi''@;'; put 'put ''O09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxiLkNsYXJpdHlJY29ucz12b2lkIDA7dmFyIF89SSgKLyohIC4vY2xyLWljb25zLWFwaSAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWFwaS50cyIpLHA9SSgKLyohIC4vY2xyLWljb25z''@;'; put 'put ''LWVsZW1lbnQgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1lbGVtZW50LnRzIiksVj1JKAovKiEgLi9zaGFwZXMvY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyIpLHc9Xy5DbGFyaXR5SWNvbnNBcGkuaW5zdGFuY2U7''@;'; put 'put ''Yi5DbGFyaXR5SWNvbnM9dyx3LmFkZChWLkNvcmVTaGFwZXMpLHR5cGVvZiB3aW5kb3c8InUiJiYod2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKXx8KHdpbmRvdy5DbGFyaXR5SWNvbnM9dyksY3VzdG9tRWxlbWVudHMuZ2V0KCJjbHItaWNvbiIpfHxjdXN0b21FbGVtZW50''@;'; put 'put ''cy5kZWZpbmUoImNsci1pY29uIixwLkNsYXJpdHlJY29uRWxlbWVudCkpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAg''@;'; put 'put ''ISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgs''@;'; put 'put ''YixJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGIuQ29yZVNoYXBlcz1iLkNsclNoYXBlQXJyb3c9Yi5DbHJTaGFwZVN0ZXBGb3J3YXJkMj1iLkNsclNoYXBlRXllSGlkZT1iLkNsclNoYXBlRXllPWIuQ2xyU2hhcGVFdmVu''@;'; put 'put ''dD1iLkNsclNoYXBlQ2FsZW5kYXI9Yi5DbHJTaGFwZUFuZ2xlRG91YmxlPWIuQ2xyU2hhcGVWaWV3Q29sdW1ucz1iLkNsclNoYXBlU2VhcmNoPWIuQ2xyU2hhcGVWbUJ1Zz1iLkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT1iLkNsclNoYXBlRmlsdGVyR3JpZD1iLkNsclNoYXBlRWxsaXBzaXNW''@;'; put 'put ''ZXJ0aWNhbD1iLkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsPWIuQ2xyU2hhcGVDbG91ZD1iLkNsclNoYXBlSW1hZ2U9Yi5DbHJTaGFwZUJlbGw9Yi5DbHJTaGFwZUZvbGRlck9wZW49Yi5DbHJTaGFwZUZvbGRlcj1iLkNsclNoYXBlQW5nbGU9Yi5DbHJTaGFwZVVzZXI9Yi5DbHJTaGFwZUJh''@;'; put 'put ''cnM9Yi5DbHJTaGFwZUhlbHBJbmZvPWIuQ2xyU2hhcGVXYXJuaW5nU3RhbmRhcmQ9Yi5DbHJTaGFwZUVycm9yU3RhbmRhcmQ9Yi5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZD1iLkNsclNoYXBlSW5mb1N0YW5kYXJkPWIuQ2xyU2hhcGVJbmZvQ2lyY2xlPWIuQ2xyU2hhcGVDaGVja0NpcmNsZT1i''@;'; put 'put ''LkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9Yi5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9Yi5DbHJTaGFwZVRpbWVzPWIuQ2xyU2hhcGVDaGVjaz1iLkNsclNoYXBlQ29nPWIuQ2xyU2hhcGVIb21lPWIuQ2xyU2hhcGVVbmtub3duU3RhdHVzPXZvaWQgMDt2YXIgXz1JKAovKiEgLi4v''@;'; put 'put ''dXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIikscD1JKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRz''@;'; put 'put ''Iik7Yi5DbHJTaGFwZVVua25vd25TdGF0dXM9KDAscC5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE3LjU4IiBjeT0iMjYuMjMiIHI9IjEuNCIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjQuNywxM2E1LjE4LDUuMTgsMCwwLDAtMi4xNi0zLjU2LDcuMjYsNy4yNiwwLDAsMC01LjcxLTEuMDlBMTEuMzQsMTEuMzQsMCwwLDAsMTIsMTAuNDQsMSwxLDAsMSwwLDEzLjI2LDEyYTkuMzIsOS4zMiwwLDAsMSwzLjk0LTEuNzIs''@;'; put 'put ''NS4yOSw1LjI5LDAsMCwxLDQuMTYuNzQsMy4yMSwzLjIxLDAsMCwxLDEuMzUsMi4xOWMuMzMsMi42OS0zLjE5LDMuNzUtNS4zMiw0LjE0bC0uODIuMTV2NC4zNmExLDEsMCwwLDAsMiwwVjE5LjE3QzI0LjYxLDE3Ljc5LDI0Ljg4LDE0LjQxLDI0LjcsMTNaIi8+JyksYi5DbHJTaGFwZUhvbWU9''@;'; put 'put ''KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMy43MSwxNy4yOWwtMTUtMTVhMSwxLDAsMCwwLTEuNDEsMGwtMTUsMTVhMSwxLDAsMCwwLDEuNDEsMS40MUwxOCw0LjQxLDMyLjI5LDE4LjcxYTEsMSwwLDAsMCwx''@;'; put 'put ''LjQxLTEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOCwzMmgtNVYyMkgxM1YzMkg4VjE4TDYsMjBWMzJhMiwyLDAsMCwwLDIsMmg3VjI0aDZWMzRoN2EyLDIsMCwwLDAsMi0yVjE5Ljc2bC0yLTJa''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMzLDE5YTEsMSwwLDAsMS0uNzEtLjI5TDE4LDQuNDEsMy43MSwxOC43MWExLDEsMCwwLDEtMS40MS0xLjQxbDE1LTE1YTEsMSwwLDAsMSwxLjQxLDBsMTUsMTVBMSwx''@;'; put 'put ''LDAsMCwxLDMzLDE5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xOCw3Ljc5LDYsMTkuODNWMzJhMiwyLDAsMCwwLDIsMmg3VjI0aDZWMzRoN2EyLDIsMCwwLDAsMi0yVjE5Ljc2WiIvPicpLGIuQ2xyU2hhcGVD''@;'; put 'put ''b2c9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOC4xLDExYy0zLjksMC03LDMuMS03LDdzMy4xLDcsNyw3YzMuOSwwLDctMy4xLDctN1MyMiwxMSwxOC4xLDExeiBNMTguMSwyM2MtMi44LDAtNS0yLjItNS01''@;'; put 'put ''czIuMi01LDUtNWMyLjgsMCw1LDIuMiw1LDVTMjAuOSwyMywxOC4xLDIzeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIuOCwxNC43TDMwLDEzLjhsLTAuNi0xLjVsMS40LTIuNmMwLjMtMC42LDAuMi0x''@;'; put 'put ''LjQtMC4zLTEuOWwtMi40LTIuNGMtMC41LTAuNS0xLjMtMC42LTEuOS0wLjNsLTIuNiwxLjRsLTEuNS0wLjZsLTAuOS0yLjhDMjEsMi41LDIwLjQsMiwxOS43LDJoLTMuNGMtMC43LDAtMS4zLDAuNS0xLjQsMS4yTDE0LDZjLTAuNiwwLjEtMS4xLDAuMy0xLjYsMC42TDkuOCw1LjJDOS4yLDQu''@;'; put 'put ''OSw4LjQsNSw3LjksNS41TDUuNSw3LjlDNSw4LjQsNC45LDkuMiw1LjIsOS44bDEuMywyLjVjLTAuMiwwLjUtMC40LDEuMS0wLjYsMS42bC0yLjgsMC45QzIuNSwxNSwyLDE1LjYsMiwxNi4zdjMuNGMwLDAuNywwLjUsMS4zLDEuMiwxLjVMNiwyMi4xbDAuNiwxLjVsLTEuNCwyLjZjLTAuMyww''@;'; put 'put ''LjYtMC4yLDEuNCwwLjMsMS45bDIuNCwyLjRjMC41LDAuNSwxLjMsMC42LDEuOSwwLjNsMi42LTEuNGwxLjUsMC42bDAuOSwyLjljMC4yLDAuNiwwLjgsMS4xLDEuNSwxLjFoMy40YzAuNywwLDEuMy0wLjUsMS41LTEuMWwwLjktMi45bDEuNS0wLjZsMi42LDEuNGMwLjYsMC4zLDEuNCwwLjIs''@;'; put 'put ''MS45LTAuM2wyLjQtMi40YzAuNS0wLjUsMC42LTEuMywwLjMtMS45bC0xLjQtMi42bDAuNi0xLjVsMi45LTAuOWMwLjYtMC4yLDEuMS0wLjgsMS4xLTEuNXYtMy40QzM0LDE1LjYsMzMuNSwxNC45LDMyLjgsMTQuN3ogTTMyLDE5LjRsLTMuNiwxLjFMMjguMywyMWMtMC4zLDAuNy0wLjYsMS40''@;'; put 'put ''LTAuOSwyLjFsLTAuMywwLjVsMS44LDMuM2wtMiwybC0zLjMtMS44bC0wLjUsMC4zYy0wLjcsMC40LTEuNCwwLjctMi4xLDAuOWwtMC41LDAuMUwxOS40LDMyaC0yLjhsLTEuMS0zLjZMMTUsMjguM2MtMC43LTAuMy0xLjQtMC42LTIuMS0wLjlsLTAuNS0wLjNsLTMuMywxLjhsLTItMmwxLjgt''@;'; put 'put ''My4zbC0wLjMtMC41Yy0wLjQtMC43LTAuNy0xLjQtMC45LTIuMWwtMC4xLTAuNUw0LDE5LjR2LTIuOGwzLjQtMWwwLjItMC41YzAuMi0wLjgsMC41LTEuNSwwLjktMi4ybDAuMy0wLjVMNy4xLDkuMWwyLTJsMy4yLDEuOGwwLjUtMC4zYzAuNy0wLjQsMS40LTAuNywyLjItMC45bDAuNS0wLjJM''@;'; put 'put ''MTYuNiw0aDIuOGwxLjEsMy41TDIxLDcuN2MwLjcsMC4yLDEuNCwwLjUsMi4xLDAuOWwwLjUsMC4zbDMuMy0xLjhsMiwybC0xLjgsMy4zbDAuMywwLjVjMC40LDAuNywwLjcsMS40LDAuOSwyLjFsMC4xLDAuNWwzLjYsMS4xVjE5LjR6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTEuMSwxOGMwLDMuOSwzLjEsNyw3LDdjMy45LDAsNy0zLjEsNy03cy0zLjEtNy03LTdDMTQuMiwxMSwxMS4xLDE0LjEsMTEuMSwxOHogTTIzLjEsMThjMCwyLjgtMi4yLDUtNSw1Yy0yLjgs''@;'; put 'put ''MC01LTIuMi01LTVzMi4yLTUsNS01QzIwLjksMTMsMjMuMSwxNS4yLDIzLjEsMTh6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzIuOCwxNC43TDMwLDEzLjhsLTAuMS0wLjNj''@;'; put 'put ''LTAuOCwwLTEuNi0wLjItMi40LTAuNGMwLjMsMC42LDAuNiwxLjMsMC44LDEuOWwwLjEsMC41bDMuNiwxLjF2Mi44bC0zLjYsMS4xTDI4LjMsMjFjLTAuMywwLjctMC42LDEuNC0wLjksMi4xbC0wLjMsMC41bDEuOCwzLjNsLTIsMmwtMy4zLTEuOGwtMC41LDAuM2MtMC43LDAuNC0xLjQsMC43''@;'; put 'put ''LTIuMSwwLjlsLTAuNSwwLjFMMTkuNCwzMmgtMi44bC0xLjEtMy42TDE1LDI4LjNjLTAuNy0wLjMtMS40LTAuNi0yLjEtMC45bC0wLjUtMC4zbC0zLjMsMS44bC0yLTJsMS44LTMuM2wtMC4zLTAuNWMtMC40LTAuNy0wLjctMS40LTAuOS0yLjFsLTAuMS0wLjVMNCwxOS40di0yLjhsMy40LTFs''@;'; put 'put ''MC4yLTAuNWMwLjItMC44LDAuNS0xLjUsMC45LTIuMmwwLjMtMC41TDcuMSw5LjFsMi0ybDMuMiwxLjhsMC41LTAuM2MwLjctMC40LDEuNC0wLjcsMi4yLTAuOWwwLjUtMC4yTDE2LjYsNGgyLjhsMS4xLDMuNUwyMSw3LjdjMC43LDAuMiwxLjMsMC41LDEuOSwwLjhjLTAuMy0wLjgtMC40LTEu''@;'; put 'put ''Ni0wLjQtMi41bC0wLjQtMC4ybC0wLjktMi44QzIxLDIuNSwyMC40LDIsMTkuNywyaC0zLjRjLTAuNywwLTEuMywwLjUtMS40LDEuMkwxNCw2Yy0wLjYsMC4xLTEuMSwwLjMtMS42LDAuNkw5LjgsNS4yQzkuMiw0LjksOC40LDUsNy45LDUuNUw1LjUsNy45QzUsOC40LDQuOSw5LjIsNS4yLDku''@;'; put 'put ''OGwxLjMsMi41Yy0wLjIsMC41LTAuNCwxLjEtMC42LDEuNmwtMi44LDAuOUMyLjUsMTUsMiwxNS42LDIsMTYuM3YzLjRjMCwwLjcsMC41LDEuMywxLjIsMS41TDYsMjIuMWwwLjYsMS41bC0xLjQsMi42Yy0wLjMsMC42LTAuMiwxLjQsMC4zLDEuOWwyLjQsMi40YzAuNSwwLjUsMS4zLDAuNiwx''@;'; put 'put ''LjksMC4zbDIuNi0xLjRsMS41LDAuNmwwLjksMi45YzAuMiwwLjYsMC44LDEuMSwxLjUsMS4xaDMuNGMwLjcsMCwxLjMtMC41LDEuNS0xLjFsMC45LTIuOWwxLjUtMC42bDIuNiwxLjRjMC42LDAuMywxLjQsMC4yLDEuOS0wLjNsMi40LTIuNGMwLjUtMC41LDAuNi0xLjMsMC4zLTEuOWwtMS40''@;'; put 'put ''LTIuNmwwLjYtMS41bDIuOS0wLjljMC42LTAuMiwxLjEtMC44LDEuMS0xLjV2LTMuNEMzNCwxNS42LDMzLjUsMTQuOSwzMi44LDE0Ljd6Ii8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjcsMTUuNGgtNS4zdjAuMWwzLjYsMS4xdjIuOGwtMy42LDEuMUwy''@;'; put 'put ''OC4zLDIxYy0wLjMsMC43LTAuNiwxLjQtMC45LDIuMWwtMC4zLDAuNWwxLjgsMy4zbC0yLDJsLTMuMy0xLjhsLTAuNSwwLjNjLTAuNywwLjQtMS40LDAuNy0yLjEsMC45bC0wLjUsMC4xTDE5LjQsMzJoLTIuOGwtMS4xLTMuNkwxNSwyOC4zYy0wLjctMC4zLTEuNC0wLjYtMi4xLTAuOWwtMC41''@;'; put 'put ''LTAuM2wtMy4zLDEuOGwtMi0ybDEuOC0zLjNsLTAuMy0wLjVjLTAuNC0wLjctMC43LTEuNC0wLjktMi4xbC0wLjEtMC41TDQsMTkuNHYtMi44bDMuNC0xbDAuMi0wLjVjMC4yLTAuOCwwLjUtMS41LDAuOS0yLjJsMC4zLTAuNUw3LjEsOS4xbDItMmwzLjIsMS44bDAuNS0wLjNjMC43LTAuNCwx''@;'; put 'put ''LjQtMC43LDIuMi0wLjlsMC41LTAuMkwxNi42LDRoMi44bDEuMSwzLjRsMS40LTIuM2wtMC42LTJDMjEsMi40LDIwLjQsMiwxOS43LDJoLTMuNGMtMC43LDAtMS4zLDAuNS0xLjQsMS4yTDE0LDZjLTAuNiwwLjEtMS4xLDAuMy0xLjYsMC42TDkuOCw1LjJDOS4yLDQuOSw4LjQsNSw3LjksNS41''@;'; put 'put ''TDUuNSw3LjlDNSw4LjQsNC45LDkuMiw1LjIsOS44bDEuMywyLjVjLTAuMiwwLjUtMC40LDEuMS0wLjYsMS42bC0yLjgsMC45QzIuNSwxNSwyLDE1LjYsMiwxNi4zdjMuNGMwLDAuNywwLjUsMS4zLDEuMiwxLjVMNiwyMi4xbDAuNiwxLjVsLTEuNCwyLjZjLTAuMywwLjYtMC4yLDEuNCwwLjMs''@;'; put 'put ''MS45bDIuNCwyLjRjMC41LDAuNSwxLjMsMC42LDEuOSwwLjNsMi42LTEuNGwxLjUsMC42bDAuOSwyLjljMC4yLDAuNiwwLjgsMS4xLDEuNSwxLjFoMy40YzAuNywwLDEuMy0wLjUsMS41LTEuMWwwLjktMi45bDEuNS0wLjZsMi42LDEuNGMwLjYsMC4zLDEuNCwwLjIsMS45LTAuM2wyLjQtMi40''@;'; put 'put ''YzAuNS0wLjUsMC42LTEuMywwLjMtMS45bC0xLjQtMi42bDAuNi0xLjVsMi45LTAuOWMwLjYtMC4yLDEuMS0wLjgsMS4xLTEuNXYtMy40QzM0LDE2LDMzLjksMTUuNywzMy43LDE1LjR6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xOC4xLDIzYy0yLjgsMC01LTIuMi01LTVzMi4yLTUsNS01YzAuMiwwLDAuNSwwLDAuNywwLjFjLTAuMi0wLjYtMC4zLTEuMy0wLjItMmgtMC41Yy0zLjksMC03LDMuMS03LDdjMCwzLjksMy4xLDcsNyw3YzMuOSwwLDctMy4xLDctN2Mw''@;'; put 'put ''LTAuOS0wLjItMS44LTAuNS0yLjZoLTIuMmMwLjUsMC44LDAuNywxLjYsMC43LDIuNUMyMy4xLDIwLjgsMjAuOSwyMywxOC4xLDIzeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLWFsZXJ0IiBkPSJNMjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0wLjIsMS40LDAuMywxLjhjMC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJoMTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01LjctOS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMy''@;'; put 'put ''Ny4xLDAuOCwyNywxLDI2LjksMS4xeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi41NywxNS43MmwtMy4zNS0xYTExLjY1LDExLjY1LDAsMCwwLS45NS0yLjMzbDEuNjQtMy4wN2EuNjEuNjEsMCwwLDAtLjEx''@;'; put 'put ''LS43MkwyNy40MSw2LjJhLjYxLjYxLDAsMCwwLS43Mi0uMTFMMjMuNjQsNy43MmExMS42MiwxMS42MiwwLDAsMC0yLjM2LTFsLTEtMy4zMUEuNjEuNjEsMCwwLDAsMTkuNjksM0gxNi4zMWEuNjEuNjEsMCwwLDAtLjU4LjQzbC0xLDMuM2ExMS42MywxMS42MywwLDAsMC0yLjM4LDFsLTMtMS42''@;'; put 'put ''MmEuNjEuNjEsMCwwLDAtLjcyLjExTDYuMiw4LjU5YS42MS42MSwwLDAsMC0uMTEuNzJsMS42MiwzYTExLjYzLDExLjYzLDAsMCwwLTEsMi4zN2wtMy4zMSwxYS42MS42MSwwLDAsMC0uNDMuNTh2My4zOGEuNjEuNjEsMCwwLDAsLjQzLjU4bDMuMzMsMWExMS42MiwxMS42MiwwLDAsMCwxLDIu''@;'; put 'put ''MzNMNi4wOSwyNi42OWEuNjEuNjEsMCwwLDAsLjExLjcyTDguNTksMjkuOGEuNjEuNjEsMCwwLDAsLjcyLjExbDMuMDktMS42NWExMS42NSwxMS42NSwwLDAsMCwyLjMuOTRsMSwzLjM3YS42MS42MSwwLDAsMCwuNTguNDNoMy4zOGEuNjEuNjEsMCwwLDAsLjU4LS40M2wxLTMuMzhhMTEuNjMs''@;'; put 'put ''MTEuNjMsMCwwLDAsMi4yOC0uOTRsMy4xMSwxLjY2YS42MS42MSwwLDAsMCwuNzItLjExbDIuMzktMi4zOWEuNjEuNjEsMCwwLDAsLjExLS43MmwtMS42Ni0zLjFhMTEuNjMsMTEuNjMsMCwwLDAsLjk1LTIuMjlsMy4zNy0xYS42MS42MSwwLDAsMCwuNDMtLjU4VjE2LjMxQS42MS42MSwwLDAs''@;'; put 'put ''MCwzMi41NywxNS43MlpNMTgsMjMuNUE1LjUsNS41LDAsMSwxLDIzLjUsMTgsNS41LDUuNSwwLDAsMSwxOCwyMy41WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIuNTcsMTUuNzJs''@;'; put 'put ''LTMuMzUtMWExMi4xMiwxMi4xMiwwLDAsMC0uNDctMS4zMiw3LjQ5LDcuNDksMCwwLDEtNi4xNC02LjE2LDExLjgyLDExLjgyLDAsMCwwLTEuMzMtLjQ4bC0xLTMuMzFBLjYxLjYxLDAsMCwwLDE5LjY5LDNIMTYuMzFhLjYxLjYxLDAsMCwwLS41OC40M2wtMSwzLjNhMTEuNjMsMTEuNjMsMCww''@;'; put 'put ''LDAtMi4zOCwxbC0zLTEuNjJhLjYxLjYxLDAsMCwwLS43Mi4xMUw2LjIsOC41OWEuNjEuNjEsMCwwLDAtLjExLjcybDEuNjIsM2ExMS42MywxMS42MywwLDAsMC0xLDIuMzdsLTMuMzEsMWEuNjEuNjEsMCwwLDAtLjQzLjU4djMuMzhhLjYxLjYxLDAsMCwwLC40My41OGwzLjMzLDFhMTEuNjIs''@;'; put 'put ''MTEuNjIsMCwwLDAsMSwyLjMzTDYuMDksMjYuNjlhLjYxLjYxLDAsMCwwLC4xMS43Mkw4LjU5LDI5LjhhLjYxLjYxLDAsMCwwLC43Mi4xMWwzLjA5LTEuNjVhMTEuNjUsMTEuNjUsMCwwLDAsMi4zLjk0bDEsMy4zN2EuNjEuNjEsMCwwLDAsLjU4LjQzaDMuMzhhLjYxLjYxLDAsMCwwLC41OC0u''@;'; put 'put ''NDNsMS0zLjM4YTExLjYzLDExLjYzLDAsMCwwLDIuMjgtLjk0bDMuMTEsMS42NmEuNjEuNjEsMCwwLDAsLjcyLS4xMWwyLjM5LTIuMzlhLjYxLjYxLDAsMCwwLC4xMS0uNzJsLTEuNjYtMy4xYTExLjYzLDExLjYzLDAsMCwwLC45NS0yLjI5bDMuMzctMWEuNjEuNjEsMCwwLDAsLjQzLS41OFYx''@;'; put 'put ''Ni4zMUEuNjEuNjEsMCwwLDAsMzIuNTcsMTUuNzJaTTE4LDIzLjVBNS41LDUuNSwwLDEsMSwyMy41LDE4LDUuNSw1LjUsMCwwLDEsMTgsMjMuNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMyLjU3LDE1LjcyLDMxLjUsMTUuNEgyMi44NUE1LjUsNS41LDAsMSwxLDE4''@;'; put 'put ''LDEyLjVhNS41Myw1LjUzLDAsMCwxLC42NSwwQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDIuMDktMy42Mi0uODYtMi44M0EuNjEuNjEsMCwwLDAsMTkuNjksM0gxNi4zMWEuNjEuNjEsMCwwLDAtLjU4LjQzbC0xLDMuM2ExMS42MywxMS42MywwLDAsMC0yLjM4LDFsLTMtMS42MmEuNjEuNjEs''@;'; put 'put ''MCwwLDAtLjcyLjExTDYuMiw4LjU5YS42MS42MSwwLDAsMC0uMTEuNzJsMS42MiwzYTExLjYzLDExLjYzLDAsMCwwLTEsMi4zN2wtMy4zMSwxYS42MS42MSwwLDAsMC0uNDMuNTh2My4zOGEuNjEuNjEsMCwwLDAsLjQzLjU4bDMuMzMsMWExMS42MiwxMS42MiwwLDAsMCwxLDIuMzNMNi4wOSwy''@;'; put 'put ''Ni42OWEuNjEuNjEsMCwwLDAsLjExLjcyTDguNTksMjkuOGEuNjEuNjEsMCwwLDAsLjcyLjExbDMuMDktMS42NWExMS42NSwxMS42NSwwLDAsMCwyLjMuOTRsMSwzLjM3YS42MS42MSwwLDAsMCwuNTguNDNoMy4zOGEuNjEuNjEsMCwwLDAsLjU4LS40M2wxLTMuMzhhMTEuNjMsMTEuNjMsMCww''@;'; put 'put ''LDAsMi4yOC0uOTRsMy4xMSwxLjY2YS42MS42MSwwLDAsMCwuNzItLjExbDIuMzktMi4zOWEuNjEuNjEsMCwwLDAsLjExLS43MmwtMS42Ni0zLjFhMTEuNjMsMTEuNjMsMCwwLDAsLjk1LTIuMjlsMy4zNy0xYS42MS42MSwwLDAsMCwuNDMtLjU4VjE2LjMxQS42MS42MSwwLDAsMCwzMi41Nywx''@;'; put 'put ''NS43MloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4''@;'; put 'put ''LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksYi5DbHJTaGFwZUNoZWNrPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTMuNzIsMjcuNjksMy4yOSwx''@;'; put 'put ''Ny4yN2ExLDEsMCwwLDEsMS40MS0xLjQxbDksOUwzMS4yOSw3LjI5YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+JyksYi5DbHJTaGFwZVRpbWVzPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTkuNDEsMThsOC4y''@;'; put 'put ''OS04LjI5YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTgsMTYuNTksOS43MSw4LjI5QTEsMSwwLDAsMCw4LjI5LDkuNzFMMTYuNTksMTgsOC4yOSwyNi4yOWExLDEsMCwxLDAsMS40MSwxLjQxTDE4LDE5LjQxbDguMjksOC4yOWExLDEsMCwwLDAsMS40MS0xLjQxWiIvPicpLGIuQ2xyU2hhcGVFeGNs''@;'; put 'put ''YW1hdGlvblRyaWFuZ2xlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMjEuMzJhMS4zLDEuMywwLDAsMCwxLjMtMS4zVjE0YTEuMywxLjMsMCwxLDAtMi42LDB2NkExLjMsMS4zLDAsMCwwLDE4LDIxLjMy''@;'; put 'put ''WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGN4PSIxNy45NSIgY3k9IjI0LjI3IiByPSIxLjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMyIgZD0iTTMwLjMzLDI1LjU0LDIwLjU5LDcuNmEzLDMsMCwwLDAtNS4yNywwTDUuNTcsMjUuNTRBMywzLDAsMCwwLDguMjEsMzBIMjcuNjlhMywzLDAsMCwwLDIuNjQtNC40M1ptLTEuNzgsMS45NGExLDEsMCwwLDEtLjg2LjQ5SDguMjFhMSwxLDAsMCwxLS44OC0xLjQ4TDE3LjA3LDgu''@;'; put 'put ''NTVhMSwxLDAsMCwxLDEuNzYsMGw5Ljc0LDE3Ljk0QTEsMSwwLDAsMSwyOC41NSwyNy40OFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3LDBMNS41''@;'; put 'put ''NywyNS41NEEzLDMsMCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42NC00LjQzWk0xNi40NiwxMi43NGExLjQ5LDEuNDksMCwwLDEsMywwdjYuODlhMS40OSwxLjQ5LDAsMSwxLTMsMFpNMTgsMjYuMjVhMS43MiwxLjcyLDAsMSwxLDEuNzItMS43MkExLjcyLDEuNzIsMCwwLDEsMTgs''@;'; put 'put ''MjYuMjVaIi8+JyksYi5DbHJTaGFwZUV4Y2xhbWF0aW9uQ2lyY2xlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0wLDIyQTEwLDEwLDAs''@;'; put 'put ''MSwxLDI4LDE4LDEwLDEwLDAsMCwxLDE4LDI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjAuMDdhMS4zLDEuMywwLDAsMS0xLjMtMS4zdi02YTEuMywxLjMsMCwxLDEsMi42LDB2NkExLjMsMS4z''@;'; put 'put ''LDAsMCwxLDE4LDIwLjA3WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGN4PSIxNy45NSIgY3k9IjIzLjAyIiByPSIxLjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0xIiBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0tMS40OSw2YTEuNDksMS40OSwwLDAsMSwzLDB2Ni44OWExLjQ5LDEuNDksMCwxLDEtMywwWk0xOCwyNS41YTEuNzIsMS43MiwwLDEsMSwxLjcyLTEuNzJBMS43MiwxLjcyLDAsMCwx''@;'; put 'put ''LDE4LDI1LjVaIi8+JyksYi5DbHJTaGFwZUNoZWNrQ2lyY2xlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0wLDIyQTEwLDEwLDAsMSwx''@;'; put 'put ''LDI4LDE4LDEwLDEwLDAsMCwxLDE4LDI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTYuMzQsMjMuNzRsLTUtNWExLDEsMCwwLDEsMS40MS0xLjQxbDMuNTksMy41OSw2Ljc4LTYuNzhhMSwxLDAsMCwx''@;'; put 'put ''LDEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsMThBMTIsMTIsMCwxLDEsMTgsNiwxMiwxMiwwLDAsMSwzMCwxOFptLTQuNzctMi4xNmExLjQsMS40LDAsMCwwLTItMmwtNi43Nyw2Ljc3TDEz''@;'; put 'put ''LDE3LjE2YTEuNCwxLjQsMCwwLDAtMiwybDUuNDUsNS40NVoiLz4nKSxiLkNsclNoYXBlSW5mb0NpcmNsZT0oMCxwLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAgY3g9IjE3LjkzIiBjeT0iMTEuOSIgcj0iMS40Ii8+XG4g''@;'; put 'put ''ICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiICBkPSJNMjEsMjNIMTlWMTVIMTZhMSwxLDAsMCwwLDAsMmgxdjZIMTVhMSwxLDAsMSwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiICBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0wLDIyQTEwLDEwLDAsMSwxLDI4LDE4LDEwLDEwLDAsMCwxLDE4LDI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0yLDUuMTVhMiwyLDAsMSwxLDIsMkEyLDIsMCwwLDEsMTUuOSwxMS4xNVpNMjMsMjRhMSwxLDAsMCwxLTEsMUgxNWExLDEsMCwxLDEsMC0yaDJWMTdIMTZhMSwx''@;'; put 'put ''LDAsMCwxLDAtMmg0djhoMkExLDEsMCwwLDEsMjMsMjRaIi8+JyksYi5DbHJTaGFwZUluZm9TdGFuZGFyZD0oMCxwLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTcuOTciIGN5PSIxMC40NSIgcj0iMS40Ii8+XG4g''@;'; put 'put ''ICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yMSwyNUgxOVYxNC4xSDE2YTEsMSwwLDAsMCwwLDJoMVYyNUgxNWExLDEsMCwwLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDM0QTE2LDE2LDAsMSwxLDM0LDE4LDE2LDE2LDAsMCwxLDE4LDM0Wk0xOCw0QTE0LDE0LDAsMSwwLDMyLDE4LDE0LDE0LDAsMCwwLDE4LDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIuMWExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOCwyLjFabS0uMSw1LjI4YTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwxLDE3LjksNy4zOFptMy42LDIxLjI1aC03YTEuNCwxLjQsMCwxLDEsMC0yLjhoMi4xdi05LjJI''@;'; put 'put ''MTVhMS40LDEuNCwwLDEsMSwwLTIuOGg0LjR2MTJoMi4xYTEuNCwxLjQsMCwxLDEsMCwyLjhaIi8+JyksYi5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDJBMTYs''@;'; put 'put ''MTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LDEyLjFhMSwxLDAsMCww''@;'; put 'put ''LTEuNDEsMEwxNS40OSwyMy4xNWwtNi02QTEsMSwwLDAsMCw4LDE4LjUzTDE1LjQ5LDI2LDI4LDEzLjUyQTEsMSwwLDAsMCwyOCwxMi4xWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSww''@;'; put 'put ''LDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTI4LjQ1LDEyLjYzLDE1LjMxLDI1Ljc2LDcuNTUsMThhMS40LDEuNCwwLDAsMSwyLTJsNS43OCw1Ljc4TDI2LjQ3LDEwLjY1YTEuNCwxLjQsMCwxLDEsMiwyWiIvPicpLGIuQ2xyU2hhcGVFcnJvclN0YW5kYXJkPSgwLHAuY2xySWNvblNWRykoJzxj''@;'; put 'put ''aXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxOCIgY3k9IjI2LjA2IiByPSIxLjMzIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMi42MWExLDEsMCww''@;'; put 'put ''LDEtMS0xdi0xMmExLDEsMCwxLDEsMiwwdjEyQTEsMSwwLDAsMSwxOCwyMi42MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDM0QTE2LDE2LDAsMSwxLDM0LDE4LDE2LDE2LDAsMCwxLDE4LDM0Wk0x''@;'; put 'put ''OCw0QTE0LDE0LDAsMSwwLDMyLDE4LDE0LDE0LDAsMCwwLDE4LDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIuMWExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOCwyLjFaTTE2LjYsOC44YTEu''@;'; put 'put ''NCwxLjQsMCwwLDEsMi44LDB2MTJhMS40LDEuNCwwLDAsMS0yLjgsMFpNMTgsMjguNmExLjgsMS44LDAsMSwxLDEuOC0xLjhBMS44LDEuOCwwLDAsMSwxOCwyOC42WiIvPicpLGIuQ2xyU2hhcGVXYXJuaW5nU3RhbmRhcmQ9KDAscC5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDIyLjYxYTEsMSwwLDAsMS0xLTF2LTEyYTEsMSwwLDEs''@;'; put 'put ''MSwyLDB2MTJBMSwxLDAsMCwxLDE4LDIyLjYxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTUuMDYyMDc4MiwxLjY4MTE5NiBDMTUuNjI5ODgxOSwwLjY0OTI2NjM1NSAxNi43MTA5MDkxLDAuMDEwMjIx''@;'; put 'put ''OTM5NiAxNy44ODUsMC4wMTAyMjE5Mzk2IEMxOS4wNTkwOTA5LDAuMDEwMjIxOTM5NiAyMC4xNDAxMTgxLDAuNjQ5MjY2MzU1IDIwLjcwODY0MzMsMS42ODI1MjEyOSBMMzQuNTk4NjQ0LDI3LjI0MjUyMjUgQzM1LjE0MDc3NDYsMjguMjQwMTM5NyAzNS4xMTc0MzQ1LDI5LjQ0OTUzNzMgMzQu''@;'; put 'put ''NTM3MjE2MSwzMC40MjU0OTQzIEMzMy45NTY5OTc3LDMxLjQwMTQ1MTQgMzIuOTA1NjcxLDMxLjk5OTY5ODQgMzEuNzcsMzIgTDQuMDIyMzkzMjMsMzEuOTk5NzQ5MiBDMi44NzQwOTAwOSwzMi4wMjU0Njk5IDEuNzk5MDI4NDMsMzEuNDM3NTc1MyAxLjIwMTA2MzM1LDMwLjQ1NjkxMjYgQzAu''@;'; put 'put ''NjAzMDk4MjY1LDI5LjQ3NjI0OTkgMC41NzI3Nzc4OTksMjguMjUxMzE3OSAxLjEyMjA3ODE4LDI3LjI0MTE5NiBMMTUuMDYyMDc4MiwxLjY4MTE5NiBaIE0yLjg3ODUwNzY3LDI4LjE5NzcyODIgQzIuNjcwNjA5NjYsMjguNTgwMDM3NiAyLjY4MjA5NzUsMjkuMDQ0MTQyMyAyLjkwODY1NTcs''@;'; put 'put ''MjkuNDE1Njk3NyBDMy4xMzUyMTM5LDI5Ljc4NzI1MzIgMy41NDI1MzU0LDMwLjAwOTk5NTkgNCwzMCBMMzEuNzY5NzM0NCwzMCBDMzIuMTk5OTE5MSwyOS45OTk4ODU4IDMyLjU5ODI0NzgsMjkuNzczMjIwOCAzMi44MTgwODIxLDI5LjQwMzQ0ODIgQzMzLjAzNzkxNjQsMjkuMDMzNjc1NyAz''@;'; put 'put ''My4wNDY3NTk1LDI4LjU3NTQ1NjcgMzIuODQxMzU2NywyOC4xOTc0Nzg3IEwxOC45NTM4NzM5LDIuNjQyMDgxOTUgQzE4LjczOTQyMzYsMi4yNTIzNDQzNiAxOC4zMjk4NDE5LDIuMDEwMjIxOTQgMTcuODg1LDIuMDEwMjIxOTQgQzE3LjQ0MDY4ODksMi4wMTAyMjE5NCAxNy4wMzE1NTM4LDIu''@;'; put 'put ''MjUxNzY2OTIgMTYuODE2ODk0NiwyLjY0MDY4NzUzIEwyLjg3ODUwNzY3LDI4LjE5NzcyODIgWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNC42LDI5LjIxLDIwLjcxLDMuNjVhMy4yMiwzLjIyLDAsMCwwLTUu''@;'; put 'put ''NjYsMEwxLjE3LDI5LjIxQTMuMjIsMy4yMiwwLDAsMCw0LDM0SDMxLjc3YTMuMjIsMy4yMiwwLDAsMCwyLjgzLTQuNzVaTTE2LjYsMTBhMS40LDEuNCwwLDAsMSwyLjgsMHYxMmExLjQsMS40LDAsMCwxLTIuOCwwWk0xOCwyOS44NWExLjgsMS44LDAsMSwxLDEuOC0xLjhBMS44LDEuOCwwLDAs''@;'; put 'put ''MSwxOCwyOS44NVoiLz4nKSxiLkNsclNoYXBlSGVscEluZm89KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI1LjM5LDI1LjQ1YTEsMSwwLDAsMC0xLjM4LjI5Yy0xLjQxLDIuMTYtNCw0LjgxLTYuMzEsNS43cy00LjEyLjU3LTQuODQsMGMtLjMxLS4yNy0xLjEyLTEtLjQzLTMuNDkuNDYt''@;'; put 'put ''MS42NiwzLjMyLTkuNDgsNC0xMS4zOGwtMi4xOC4yOGMtLjY5LDEuODYtMy4yOSw4Ljg0LTMuNzYsMTAuNTgtLjY4LDIuNDktLjM0LDQuMywxLjA5LDUuNTZBNS41OSw1LjU5LDAsMCwwLDE1LDM0YTkuNTMsOS41MywwLDAsMCwzLjQ1LS43YzIuNzktMS4wOSw1LjcyLTQuMTIsNy4yNi02LjQ3''@;'; put 'put ''QTEsMSwwLDAsMCwyNS4zOSwyNS40NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjMsMTFhNC41LDQuNSwwLDEsMC00LjUtNC41QTQuNSw0LjUsMCwwLDAsMTkuMywxMVptMC03YTIuNSwyLjUsMCwxLDEt''@;'; put 'put ''Mi41LDIuNUEyLjUsMi41LDAsMCwxLDE5LjMsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjgxLDE1Yy4wNiwwLDYuMjctLjgyLDcuNzMtMSwuNjUtLjEsMS4xNCwwLDEuMy4xNXMuMjEuOC0uMDcsMS42''@;'; put 'put ''OGMtLjYxLDEuODYtMy42OSwxMS00LjU5LDEzLjcxYTgsOCwwLDAsMCwxLjI5LS4zOCw3LjMyLDcuMzIsMCwwLDAsMS4xNS0uNkMxOS44NSwyNSwyMi4xNSwxOC4xLDIyLjY3LDE2LjUycy4zOS0yLjc4LS4zLTMuNmEzLjE2LDMuMTYsMCwwLDAtMy4wOC0uODNjLTEuNDMuMTUtNy40Ny45NC03''@;'; put 'put ''LjczLDFhMSwxLDAsMCwwLC4yNiwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyMC43NSIgY3k9IjYiIHI9IjQiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMjQuODQsMjYuMjNhMSwxLDAsMCwwLTEuNC4yOSwxNi42LDE2LjYsMCwwLDEtMy41MSwzLjc3Yy0uMzMuMjUtMS41NiwxLjItMi4wOCwxLS4zNi0uMTEtLjE1LS44Mi0uMDgtMS4xMmwuNTMtMS41N2MuMjItLjY0LDQuMDUtMTIsNC40Ny0xMy4zLjYyLTEuOS4zNS0z''@;'; put 'put ''Ljc3LTIuNDgtMy4zMi0uNzcuMDgtOC41OCwxLjA5LTguNzIsMS4xYTEsMSwwLDAsMCwuMTMsMnMzLS4zOSwzLjMzLS40MmEuODguODgsMCwwLDEsLjg1LjQ0LDIuNDcsMi40NywwLDAsMS0uMDcsMS43MWMtLjI2LDEtNC4zNywxMi41OC00LjUsMTMuMjVhMi43OCwyLjc4LDAsMCwwLDEuMTgs''@;'; put 'put ''Myw1LDUsMCwwLDAsMy4wOC44M2gwYTguNTMsOC41MywwLDAsMCwzLjA5LS42MmMyLjQ5LTEsNS4wOS0zLjY2LDYuNDYtNS43NUExLDEsMCwwLDAsMjQuODQsMjYuMjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGIuQ2xyU2hhcGVCYXJzPSgwLHAuY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsMjlINGExLDEsMCwwLDEsMC0ySDMyYTEsMSwwLDAsMSwwLDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTIiIGQ9Ik0zMiwxOUg0YTEsMSwwLDAsMSwwLTJIMzJhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTMyLDlINEExLDEsMCwwLDEsNCw3SDMyYTEsMSwwLDAsMSwwLDJaIi8+''@;'; put 'put ''JyksYi5DbHJTaGFwZVVzZXI9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDE3YTcsNywwLDEsMC03LTdBNyw3LDAsMCwwLDE4LDE3Wk0xOCw1YTUsNSwwLDEsMS01LDVBNSw1LDAsMCwxLDE4LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC40NywyNC4zN2ExNy4xNiwxNy4xNiwwLDAsMC0yNC45MywwQTIsMiwwLDAsMCw1LDI1Ljc0VjMxYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyNS43NEEyLDIsMCwwLDAsMzAuNDcsMjQuMzdaTTI5LDMxSDdWMjUuNzNhMTUuMTcsMTUu''@;'; put 'put ''MTcsMCwwLDEsMjIsMGgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNDcsMjQuMzdhMTcuMTYsMTcuMTYsMCwwLDAtMjQuOTMsMEEyLDIsMCwwLDAsNSwyNS43NFYzMWEyLDIsMCwwLDAsMiwySDI5YTIs''@;'; put 'put ''MiwwLDAsMCwyLTJWMjUuNzRBMiwyLDAsMCwwLDMwLjQ3LDI0LjM3Wk0yOSwzMUg3VjI1LjczYTE1LjE3LDE1LjE3LDAsMCwxLDIyLDBoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTE4LDE3YTcsNywwLDAsMCw0LjQ1LTEuNmgtLjIyQTMuNjgsMy42OCwwLDAsMSwyMCwxNC42YTUsNSwwLDEsMSwxLjI0LTguNDJsMS0xLjc2QTcsNywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjQ3LDI0LjM3YTE3LjE2LDE3LjE2LDAsMCwwLTI0LjkzLDBBMiwyLDAsMCwwLDUsMjUuNzRWMzFhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAsMi0y''@;'; put 'put ''VjI1Ljc0QTIsMiwwLDAsMCwzMC40NywyNC4zN1pNMjksMzFIN1YyNS43M2ExNS4xNywxNS4xNywwLDAsMSwyMiwwaDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3''@;'; put 'put ''LDAsMCwwLDYuODUtNS41Niw3LjQsNy40LDAsMCwxLTIuMjQtNi42OUE3LDcsMCwxLDAsMTgsMTdaTTE4LDVhNSw1LDAsMSwxLTUsNUE1LDUsMCwwLDEsMTgsNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC42MSwyNC41MmExNy4xNiwxNy4xNiwwLDAsMC0yNS4y''@;'; put 'put ''MiwwLDEuNTEsMS41MSwwLDAsMC0uMzksMXY2QTEuNSwxLjUsMCwwLDAsNi41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNXYtNkExLjUxLDEuNTEsMCwwLDAsMzAuNjEsMjQuNTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNp''@;'; put 'put ''cmNsZSBjeD0iMTgiIGN5PSIxMCIgcj0iNyIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC42MSwyNC41MmExNy4xNiwxNy4xNiwwLDAsMC0yNS4yMiwwLDEuNTEsMS41MSwwLDAsMC0uMzksMXY2QTEuNSwxLjUsMCww''@;'; put 'put ''LDAsNi41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNXYtNkExLjUxLDEuNTEsMCwwLDAsMzAuNjEsMjQuNTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE3YTcsNywwLDAs''@;'; put 'put ''MCw0LjQ1LTEuNmgtLjIyQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDMuMTYtNS40N0E3LDcsMCwxLDAsMTgsMTdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEu''@;'; put 'put ''MTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWkt''@;'; put 'put ''YWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNjEsMjQuNTJhMTcuMTYsMTcuMTYsMCwwLDAtMjUuMjIsMCwxLjUxLDEuNTEsMCwwLDAtLjM5LDF2NkExLjUsMS41LDAsMCwwLDYuNSwzM2gyM0ExLjUsMS41LDAsMCwwLDMxLDMxLjV2LTZBMS41MSwxLjUxLDAsMCwwLDMwLjYx''@;'; put 'put ''LDI0LjUyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDYuODUtNS41Niw3LjQsNy40LDAsMCwxLTIuMjQtNi42OUE3LDcsMCwxLDAsMTgsMTdaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicp''@;'; put 'put ''LGIuQ2xyU2hhcGVBbmdsZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI5LjUyLDIyLjUyLDE4LDEwLjYsNi40OCwyMi41MmExLjcsMS43LDAsMCwwLDIuNDUsMi4zNkwxOCwxNS40OWw5LjA4LDkuMzlhMS43''@;'; put 'put ''LDEuNywwLDAsMCwyLjQ1LTIuMzZaIi8+JyksYi5DbHJTaGFwZUZvbGRlcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAs''@;'; put 'put ''MCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjExQTIsMiwwLDAsMCwzMCw5Wm0wLDIwSDZWMTNoNy4zMWEyLDIsMCwwLDAsMi0ySDZWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxSDMwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTMwLDEzLjVWMjlINlYxM2g3LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoOC41MWE3LjUsNy41LDAsMCwxLTEuMjktMkgxNi40MkwxNC4xMSw1Ljgy''@;'; put 'put ''QTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMwLDE1LjRWMjlINlYxM2g3LjMx''@;'; put 'put ''YTIsMiwwLDAsMCwyLTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoMi43M0EzLjY2LDMuNjYsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAs''@;'; put 'put ''MCwwLDItMlYxNS40WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMu''@;'; put 'put ''NjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCww''@;'; put 'put ''LDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjExQTIsMiwwLDAsMCwzMCw5Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMS0tYWxlcnRlZCIgZD0iTTIyLjIzLDE1LjRBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUuNFpNNiwxMVY3aDYu''@;'; put 'put ''NDlsMi43Miw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4''@;'; put 'put ''LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTMwLDEzLjVBNy41LDcuNSwwLDAs''@;'; put 'put ''MSwyMy4xMyw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVpNNiwxMVY3aDYuNDlsMi43Miw0WiIvPlxuICAgICAgICAgICAgICAg''@;'; put 'put ''IDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxiLkNsclNoYXBlRm9sZGVyT3Blbj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAsMCwzMy44NywxM0gxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgzMmEyLDIsMCwwLDAt''@;'; put 'put ''Mi0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFBMS42NCwxLjY0LDAsMCwwLDM1LjMyLDEzLjc0Wk0yOS41NSwyOUg2LjlsMy44OC0x''@;'; put 'put ''My44MWEuNjYuNjYsMCwwLDEsLjM4LS4yNEgzMy40OVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdh''@;'; put 'put ''Mi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoOC41MmE3LjQ5LDcuNDksMCwwLDEtMS4yOS0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5''@;'; put 'put ''QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFBMS42NCwxLjY0LDAsMCwwLDM1LjMyLDEzLjc0Wk0yOS41NSwyOUg2LjlsMy44OC0xMy44MWEuNjYuNjYsMCwwLDEsLjM4LS4yNEgzMy40OVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xl''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNGgtLjNMMjkuNTUsMjlINi45bDMuODgtMTMuODFhLjY2LjY2LDAsMCwxLC4zOC0uMjRoOS40MkEzLjY3LDMuNjcsMCwwLDEsMTksMTMuNTZhMy42MywzLjYzLDAsMCwxLS4yNi0uNTZIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41Miwx''@;'; put 'put ''LDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoMi43M0EzLjY2LDMuNjYsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1''@;'; put 'put ''LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFhMS42OCwxLjY4LDAsMCwwLC4wNy0uMzJBMy42NywzLjY3LDAsMCwxLDMzLjY4LDE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAs''@;'; put 'put ''LjgxLjQxSDMyYTIsMiwwLDAsMC0yLTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRa''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2YTMuNjMsMy42MywwLDAsMS0uMjYtLjU2SDExLjE3YTIuNTks''@;'; put 'put ''Mi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDIuNzNBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1Yy''@;'; put 'put ''OS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xYTEuNjgsMS42OCwwLDAsMCwuMDctLjMyQTMuNjcsMy42NywwLDAsMSwzMy42OCwxNS40WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAsMCwzMy44NywxM0gxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4x''@;'; put 'put ''NEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUyYTcuNDksNy40OSwwLDAsMS0xLjMxLTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCww''@;'; put 'put ''LDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicp''@;'; put 'put ''LGIuQ2xyU2hhcGVCZWxsPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuNTEsMjcuODNBMTQuNCwxNC40LDAsMCwxLDMwLDI0LjlhMTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1QTEwLjgxLDEw''@;'; put 'put ''LjgxLDAsMCwwLDE5LjIxLDQuNFYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3LDIuOTMsMSwxLDAsMCwwLS4zNC43NXYxLjM2YTEs''@;'; put 'put ''MSwwLDAsMCwxLDFoMjcuOGExLDEsMCwwLDAsMS0xVjI4LjU4QTEsMSwwLDAsMCwzMi41MSwyNy44M1pNNS4xMywyOC45NGExNi4xNywxNi4xNywwLDAsMCwyLjQ0LTMsMTQuMjQsMTQuMjQsMCwwLDAsMS42NS01Ljg1VjE1LjE1YTguNzQsOC43NCwwLDEsMSwxNy40NywwdjQuOTRhMTQuMjQs''@;'; put 'put ''MTQuMjQsMCwwLDAsMS42NSw1Ljg1LDE2LjE3LDE2LjE3LDAsMCwwLDIuNDQsM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDM0LjI4QTIuNjcsMi42NywwLDAsMCwyMC41OCwzMkgxNS4zMkEyLjY3''@;'; put 'put ''LDIuNjcsMCwwLDAsMTgsMzQuMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTgsMzQuMjhBMi42NywyLjY3LDAsMCwwLDIwLjU4LDMySDE1LjMyQTIuNjcsMi42NywwLDAs''@;'; put 'put ''MCwxOCwzNC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMi41MSwyNy44M0ExNC40LDE0LjQsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0xLjM1LTQuODFW''@;'; put 'put ''MTUuMTVhMTAuOTIsMTAuOTIsMCwwLDAtLjE2LTEuNzksNy40NCw3LjQ0LDAsMCwxLTIuMjQtLjg0LDguODksOC44OSwwLDAsMSwuNCwyLjY0djQuOTRhMTQuMjQsMTQuMjQsMCwwLDAsMS42NSw1Ljg1LDE2LjE3LDE2LjE3LDAsMCwwLDIuNDQsM0g1LjEzYTE2LjE3LDE2LjE3LDAsMCwwLDIu''@;'; put 'put ''NDQtMywxNC4yNCwxNC4yNCwwLDAsMCwxLjY1LTUuODVWMTUuMTVBOC44LDguOCwwLDAsMSwxOCw2LjMxYTguNjEsOC42MSwwLDAsMSw0Ljc2LDEuNDRBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNmMwLS4yMSwwLS40MiwwLS42M2ExMC41OCwxMC41OCwwLDAsMC0zLjMyLTFWMy4xMWExLjMzLDEu''@;'; put 'put ''MzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYzLDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzLDEsMSwwLDAsMC0uMzQuNzV2MS4zNmExLDEsMCwwLDAsMSwxaDI3LjhhMSwxLDAsMCwwLDEtMVYy''@;'; put 'put ''OC41OEExLDEsMCwwLDAsMzIuNTEsMjcuODNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuODUsMjguMTNsLS4zNC0uM0ExNC4zNywxNC4zNywwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNUExMC44MSwxMC44MSwwLDAsMCwxOS4yMSw0LjRWMy4xMWEx''@;'; put 'put ''LjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYzLDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzbC0uMzQuM3YyLjgySDMyLjg1WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xNS4zMiwzMmEyLjY1LDIuNjUsMCwwLDAsNS4yNSwwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTgsMzQuMjhB''@;'; put 'put ''Mi42NywyLjY3LDAsMCwwLDIwLjU4LDMySDE1LjMyQTIuNjcsMi42NywwLDAsMCwxOCwzNC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMyLjg1LDI4LjEzbC0uMzQtLjNBMTQu''@;'; put 'put ''MzcsMTQuMzcsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0xLjM1LTQuODFWMTUuMTVhMTAuOTIsMTAuOTIsMCwwLDAtLjE2LTEuNzlBNy41LDcuNSwwLDAsMSwyMi41LDZjMC0uMjEsMC0uNDIsMC0uNjNhMTAuNTcsMTAuNTcsMCwwLDAtMy4zMi0xVjMuMTFhMS4zMywxLjMzLDAs''@;'; put 'put ''MSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40LDAsMCwxLTIuNDcsMi45M2wtLjM0LjN2Mi44MkgzMi44NVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+JyksYi5DbHJTaGFwZUltYWdlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIs''@;'; put 'put ''MiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNNCwzMFY2SDMyVjMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjkyLDE0YTMsMywwLDEsMC0zLTNBMywzLDAsMCwwLDguOTIsMTRabTAtNC42QTEuNiwx''@;'; put 'put ''LjYsMCwxLDEsNy4zMywxMSwxLjYsMS42LDAsMCwxLDguOTIsOS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNzgsMTUuMzdsLTUuNCw1LjQtNC00YTEsMSwwLDAsMC0xLjQxLDBMNS45MiwyMi45djIu''@;'; put 'put ''ODNsNi43OS02Ljc5TDE2LDIyLjE4bC0zLjc1LDMuNzVIMTVsOC40NS04LjQ1TDMwLDI0VjIxLjE4bC01LjgxLTUuODFBMSwxLDAsMCwwLDIyLjc4LDE1LjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45''@;'; put 'put ''MywxMWEzLDMsMCwxLDAtMywzQTMsMywwLDAsMCwxMS45MywxMVptLTQuNiwwYTEuNiwxLjYsMCwxLDEsMS42LDEuNkExLjYsMS42LDAsMCwxLDcuMzMsMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0xNy4zOCwyMC43N2wtNC00YTEsMSwwLDAsMC0xLjQxLDBMNS45MiwyMi45djIuODNsNi43OS02Ljc5TDE2LDIyLjE4bC0zLjc1LDMuNzVIMTVsOC40NS04LjQ1TDMwLDI0VjIxLjE4bC01LjgxLTUuODFhMSwxLDAsMCwwLTEuNDEsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDEzLjIyVjMwSDRWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcu''@;'; put 'put ''NDUsNy40NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNOC45Miw4YTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDgu''@;'; put 'put ''OTIsOFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNDgsNy40OCwwLDAsMSwyMi43OCw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTguOTIsOGEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4LjkyLDha''@;'; put 'put ''TTYsMjdWMjIuOWw2LTYuMDhhMSwxLDAsMCwxLDEuNDEsMEwxNiwxOS4zNSw4LjMyLDI3Wm0yNCwwSDExLjE1bDYuMjMtNi4yMyw1LjQtNS40YTEsMSwwLDAsMSwxLjQxLDBMMzAsMjEuMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLGIuQ2xyU2hhcGVDbG91ZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjE0LDMzSDEwLjYyQzUuNjcsMzMsMSwyOC4xOSwxLDIzLjFhMTAsMTAsMCwwLDEsOC05Ljc1LDEwLjE5LDEwLjE5LDAsMCwxLDIwLjMzLDEuMDZBMTAuMDcsMTAuMDcsMCwwLDEsMjksMTYuNjZhOC4yOSw4LjI5LDAsMCwx''@;'; put 'put ''LDYsOEMzNSwyOS4xLDMxLjMzLDMzLDI3LjE0LDMzWk0xOS4wOSw2LjIzYTguMjQsOC4yNCwwLDAsMC04LjE5LDhsMCwuODctLjg2LjFBNy45NCw3Ljk0LDAsMCwwLDMsMjMuMWMwLDQsMy43Nyw3LjksNy42Miw3LjlIMjcuMTRDMzAuMjEsMzEsMzMsMjgsMzMsMjQuNjVhNi4zMSw2LjMxLDAs''@;'; put 'put ''MCwwLTUuMzctNi4yNmwtMS4xOC0uMTguMzktMS4xM0E4LjE4LDguMTgsMCwwLDAsMTkuMDksNi4yM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yOSwxNi42NmExMC4wNywx''@;'; put 'put ''MC4wNywwLDAsMCwuMjUtMi4yNGMwLS4zMywwLS42NSwwLTFhNy40NSw3LjQ1LDAsMCwxLTIuMS0uNTQsOCw4LDAsMCwxLS4zLDQuMTZsLS4zOSwxLjEzLDEuMTguMThhNi4zMSw2LjMxLDAsMCwxLDUuMzcsNi4yNkMzMi45NSwyOCwzMC4xNiwzMSwyNy4wOSwzMUgxMC41N2MtMy44NCwwLTcu''@;'; put 'put ''NjItMy45MS03LjYyLTcuOWE3Ljk0LDcuOTQsMCwwLDEsNy03Ljg5bC44Ni0uMSwwLS44N2E4LjI0LDguMjQsMCwwLDEsOC4xOS04QTguMTMsOC4xMywwLDAsMSwyMi41OCw3YTcuNTMsNy41MywwLDAsMS0uMDgtMSw3LjUxLDcuNTEsMCwwLDEsLjA5LTEuMTJBMTAuMTMsMTAuMTMsMCwwLDAs''@;'; put 'put ''MTksNC4yMywxMC4yNiwxMC4yNiwwLDAsMCw4LjkxLDEzLjM2YTEwLDEwLDAsMCwwLTgsOS43NWMwLDUuMDksNC42Nyw5LjksOS42Miw5LjlIMjcuMDljNC4xOSwwLDcuODYtMy45LDcuODYtOC4zNUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNs''@;'; put 'put ''ZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMS0tYWxlcnRlZCIgZD0iTTI5LDE2LjY2YTEwLjE0LDEwLjE0LDAsMCwwLC4yLTEuM2gtMmE4LjI4LDguMjgsMCwwLDEtLjM3LDEuNzJsLS4zOSwxLjEzLDEuMTguMThhNi4zMSw2LjMxLDAsMCwxLDUuMzcsNi4yNkMzMi45NSwyOCwzMC4xNiwzMSwyNy4wOSwzMUgxMC41N2MtMy44NCww''@;'; put 'put ''LTcuNjItMy45MS03LjYyLTcuOWE3Ljk0LDcuOTQsMCwwLDEsNy03Ljg5bC44Ni0uMSwwLS44N0E4LjE2LDguMTYsMCwwLDEsMjEsNi40N2wxLTEuOEExMC4xOSwxMC4xOSwwLDAsMCw4LjkxLDEzLjM2YTEwLDEwLDAsMCwwLTgsOS43NWMwLDUuMDksNC42Nyw5LjksOS42Miw5LjlIMjcuMDlj''@;'; put 'put ''NC4xOSwwLDcuODYtMy45LDcuODYtOC4zNUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0''@;'; put 'put ''LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0xIiBkPSJNMjksMTYuNjZhMTAuMDcsMTAuMDcsMCwwLDAsLjI1LTIuMjRBMTAuMTksMTAuMTksMCwwLDAsOC45MSwxMy4zNiwxMCwxMCwwLDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5LDAsMCww''@;'; put 'put ''LDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMjksMTYuNjZhMTAuMDcsMTAuMDcsMCwwLDAsLjI1LTIuMjRjMC0uMzMsMC0uNjUsMC0xYTcuNDQsNy40NCwwLDAsMS02''@;'; put 'put ''LjYtOC41OEExMC4xMywxMC4xMywwLDAsMCwxOSw0LjIzLDEwLjI2LDEwLjI2LDAsMCwwLDguOTEsMTMuMzYsMTAsMTAsMCwwLDAsMSwyMy4xQzEsMjguMTksNS42MiwzMywxMC41NywzM0gyNy4wOUMzMS4yOCwzMywzNSwyOS4xLDM1LDI0LjY1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42Nloi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTI5LDE2LjY2YTEwLjE1LDEwLjE1LDAsMCwwLC4yLTEuMjZoLTdBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMy01LjIxQTEwLjE5LDEwLjE5LDAsMCwwLDguOTEsMTMuMzYsMTAsMTAsMCwwLDAsMSwyMy4xQzEsMjguMTksNS42''@;'; put 'put ''MiwzMywxMC41NywzM0gyNy4wOUMzMS4yOCwzMywzNSwyOS4xLDM1LDI0LjY1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0''@;'; put 'put ''IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksYi5DbHJTaGFwZUVsbGlwc2lzSG9yaXpvbnRhbD0oMCxwLmNscklj''@;'; put 'put ''b25TVkcpKCc8Y2lyY2xlIGN4PSIzMS4xIiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNC45IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMS4xIiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8Y2lyY2xlIGN4PSI0LjkiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksYi5DbHJTaGFwZUVsbGlwc2lzVmVydGljYWw9KDAscC5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iMTgiIGN5PSI0LjkiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIzMS4xIiByPSIyLjkiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSI0LjkiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0i''@;'; put 'put ''MTgiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGIuQ2xyU2hhcGVGaWx0ZXJHcmlk''@;'; put 'put ''PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTUsMjUuODZsMiwxVjIwLjI3YTEsMSwwLDAsMC0uMjktLjdMMTAuMjMsMTNIMjUuNzlsLTYuNDcsNi41N2ExLDEsMCwwLDAtLjI5LjdMMTksMjhsMiwxVjIwLjY4''@;'; put 'put ''TDI3LjU4LDE0QTEuNDYsMS40NiwwLDAsMCwyOCwxM1YxMmExLDEsMCwwLDAtMS0xSDlhMSwxLDAsMCwwLTEsMXYxYTEuNDYsMS40NiwwLDAsMCwuNDIsMUwxNSwyMC42OFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBk''@;'; put 'put ''PSJNOCwxMXYxLjEyYS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4xNS4zNXY2Ljg5YS41LjUsMCwwLDAsLjI4LjQ1bDMuOTUsMS40MWEuNS41LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCwwLDAsMSwuMTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCwwLC4xNS0u''@;'; put 'put ''MzVWMTFaIi8+JyksYi5DbHJTaGFwZUZpbHRlckdyaWRDaXJjbGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAsMCwwLS4yOS0uN0wxMC4yMywxM0gyNS43OWwtNi40''@;'; put 'put ''Nyw2LjU3YTEsMSwwLDAsMC0uMjkuN0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFhMS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtMiIgZD0iTTgsMTF2MS4xMmEuNS41LDAsMCwwLC4xNS4zNWw3LjI4LDcuMzZhLjUuNSwwLDAsMSwuMTUuMzV2Ni44OWEuNS41LDAsMCwwLC4yOC40NWwzLjk1LDEuNDFhLjUuNSwwLDAsMCwuNzItLjQ1bDAtOC4zOWEuNTQuNTQsMCwwLDEsLjE4LS4zNWw3LjEyLTcuMjVh''@;'; put 'put ''LjUuNSwwLDAsMCwuMTUtLjM1VjExWiIvPicpLGIuQ2xyU2hhcGVWbUJ1Zz0oMCxwLmNsckljb25TVkcpKCc8cmVjdCB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHJ4PSIzIiBmaWxsPSIjZmZmZmZmIiBvcGFjaXR5PSIwLjE1IiBzdHlsZT0iaXNvbGF0aW9uOmlzb2xhdGUiLz48cGF0aCBkPSJN''@;'; put 'put ''My43OSwxNC44M2ExLjA5LDEuMDksMCwwLDAtMS40Ny0uNTYsMS4wOSwxLjA5LDAsMCwwLS41NCwxLjQ5bDIuNDcsNS40Yy4zOS44NS44LDEuMjksMS41NywxLjI5UzcsMjIsNy4zOSwyMS4xNmwyLjE3LTQuNzdhLjMzLjMzLDAsMCwxLC4zMS0uMi4zNS4zNSwwLDAsMSwuMzUuMzV2NC42MWEx''@;'; put 'put ''LjE1LDEuMTUsMCwwLDAsMS4xNCwxLjMsMS4xNywxLjE3LDAsMCwwLDEuMTctMS4zVjE3LjM4YTEuMTUsMS4xNSwwLDAsMSwxLjIyLTEuMiwxLjEzLDEuMTMsMCwwLDEsMS4xOCwxLjJ2My43N2ExLjE3LDEuMTcsMCwxLDAsMi4zMiwwVjE3LjM4YTEuMTUsMS4xNSwwLDAsMSwxLjIyLTEuMiwx''@;'; put 'put ''LjEzLDEuMTMsMCwwLDEsMS4xOCwxLjJ2My43N2ExLjE2LDEuMTYsMCwxLDAsMi4zMSwwVjE2Ljg2YTIuNjksMi42OSwwLDAsMC0yLjc4LTIuNjksMy41NywzLjU3LDAsMCwwLTIuNDcsMS4wNSwyLjc1LDIuNzUsMCwwLDAtMi4zOC0xLjA1QTMuOTMsMy45MywwLDAsMCwxMiwxNS4yMmEyLjgy''@;'; put 'put ''LDIuODIsMCwwLDAtMi4wOC0xLjA1QTIuNTUsMi41NSwwLDAsMCw3LjQsMTUuODlMNS44MiwxOS42M2wtMi00LjgiIGZpbGw9IiNmZmZmZmYiLz48cGF0aCBkPSJNMzMsMTQuMThBMS4xNCwxLjE0LDAsMCwwLDMxLjksMTVsLTEuMTksMy43M0wyOS41LDE1LjA1YTEuMTgsMS4xOCwwLDAsMC0x''@;'; put 'put ''LjE1LS44N2gtLjFhMS4yLDEuMiwwLDAsMC0xLjE1Ljg3bC0xLjE5LDMuNzEtMS4xOC0zLjcxYTEuMTUsMS4xNSwwLDAsMC0xLjExLS44NywxLjA4LDEuMDgsMCwwLDAtMS4xMiwxLjA3LDEuNjgsMS42OCwwLDAsMCwuMS41NGwyLDUuN2ExLjI3LDEuMjcsMCwwLDAsMS4yNywxLDEuMjQsMS4y''@;'; put 'put ''NCwwLDAsMCwxLjItLjkzbDEuMi0zLjY0LDEuMiwzLjY0YTEuMjUsMS4yNSwwLDAsMCwxLjI2LjkzQTEuMjcsMS4yNywwLDAsMCwzMiwyMS41TDM0LDE1LjczYTEuNzcsMS43NywwLDAsMCwuMDgtLjQ4QTEuMDcsMS4wNywwLDAsMCwzMywxNC4xOFoiIGZpbGw9IiNmZmZmZmYiLz4nKSxiLkNs''@;'; put 'put ''clNoYXBlU2VhcmNoPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTYuMzMsNS4wNUExMC45NSwxMC45NSwwLDEsMSw1LjM5LDE2LDExLDExLDAsMCwxLDE2LjMzLDUuMDVtMC0yLjA1YTEzLDEzLDAsMSwwLDEz''@;'; put 'put ''LDEzLDEzLDEzLDAsMCwwLTEzLTEzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzUsMzMuMjlsLTcuMzctNy40Mi0xLjQyLDEuNDEsNy4zNyw3LjQyQTEsMSwwLDEsMCwzNSwzMy4yOVoiLz4nKSxiLkNs''@;'; put 'put ''clNoYXBlVmlld0NvbHVtbnM9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMSw1SDVBMiwyLDAsMCwwLDMsN1YyOWEyLDIsMCwwLDAsMiwySDMxYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzEsNVpNMTMs''@;'; put 'put ''MjlINVY3aDhabTEwLDBIMTVWN2g4WiIvPicpLGIuQ2xyU2hhcGVBbmdsZURvdWJsZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI5LDE5LjQxYTEsMSwwLDAsMS0uNzEtLjI5TDE4LDguODMsNy43MSwxOS4x''@;'; put 'put ''MmExLDEsMCwwLDEtMS40MS0xLjQxTDE4LDYsMjkuNzEsMTcuNzFBMSwxLDAsMCwxLDI5LDE5LjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjksMzAuNDFhMSwxLDAsMCwxLS43MS0uMjlMMTgsMTku''@;'; put 'put ''ODMsNy43MSwzMC4xMmExLDEsMCwwLDEtMS40MS0xLjQxTDE4LDE3LDI5LjcxLDI4LjcxQTEsMSwwLDAsMSwyOSwzMC40MVoiLz4nKSxiLkNsclNoYXBlQ2FsZW5kYXI9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9''@;'; put 'put ''Ik0zMi4yNSw2SDI5VjhoM1YzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2WiIvPlxuICAgICAgICAgICAgICAg''@;'; put 'put ''IDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSI4IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIxNCIgeT0iMTQi''@;'; put 'put ''IHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgeD0iMjAiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjI2IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiB4PSI4IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtOCIgeD0iMjAiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiIHg9IjI2IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxy''@;'; put 'put ''ZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTEiIHg9IjE0IiB5PSIyNCIg''@;'; put 'put ''d2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMiIgeD0iMjAiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEzIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAs''@;'; put 'put ''MCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTUiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwxMFoiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTYiIHg9IjEzIiB5PSI2IiB3aWR0aD0iMTAiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEtLWJhZGdlZCIgZD0iTTMyLDEzLjIyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiB4PSIxNCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIHg9IjIwIiB5PSIxNCIg''@;'; put 'put ''d2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgeD0iMjYiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3Qg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIiB4PSI4IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTctLWJhZGdlZCIgeD0iMTQiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIiB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQiIHg9IjI2IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1iYWRnZWQiIHg9IjgiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTEtLWJhZGdlZCIgeD0iMTQi''@;'; put 'put ''IHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTItLWJhZGdlZCIgeD0iMjAiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWJhZGdlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMTQtLWJhZGdlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE1LS1iYWRn''@;'; put 'put ''ZWQiIGQ9Ik0yMi41LDZIMTNWOGg5Ljc4QTcuNDksNy40OSwwLDAsMSwyMi41LDZaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiBy''@;'; put 'put ''PSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDMyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCww''@;'; put 'put ''LDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiB4PSI4IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdo''@;'; put 'put ''dD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiB4PSIxNCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgeD0iOCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRl''@;'; put 'put ''ZCIgeD0iMTQiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQiIHg9IjIwIiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIiB4PSIyNiIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYWxlcnRlZCIgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOS0tYWxlcnRlZCIgeD0iMTQiIHk9''@;'; put 'put ''IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1hbGVydGVkIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTEtLWFsZXJ0ZWQiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xMi0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPjxwb2x5Z29uIHBvaW50cz0iMjEuMjkgNiAxMyA2IDEzIDggMjAuMTQgOCAyMS4yOSA2Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEzLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRB''@;'; put 'put ''MS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjI1LDZoLTRWOWEyLjIsMi4yLDAsMSwxLTQuNCwwVjZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEEx''@;'; put 'put ''Ljc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZaTTEwLDI2SDhWMjRoMlptMC01SDhWMTloMlptMC01SDhWMTRoMlptNiwxMEgxNFYyNGgyWm0w''@;'; put 'put ''LTVIMTRWMTloMlptMC01SDE0VjE0aDJabTYsMTBIMjBWMjRoMlptMC01SDIwVjE5aDJabTAtNUgyMFYxNGgyWm02LDEwSDI2VjI0aDJabTAtNUgyNlYxOWgyWm0wLTVIMjZWMTRoMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0yIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAt''@;'; put 'put ''MiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMCwxMy41QTcuNSw3LjUsMCwwLDEsMjIuNSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44''@;'; put 'put ''MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzAsMTMuNVpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVIOFYxNGgyWm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRW''@;'; put 'put ''MTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptMC01SDIwVjE0aDJabTYsMTBIMjZWMjRoMlptMC01SDI2VjE5aDJabTAtNUgyNlYxNGgyWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwy''@;'; put 'put ''MS4yOSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxNS4zOFpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVIOFYxNGgy''@;'; put 'put ''Wm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptNiw1SDI2VjI0aDJabTAtNUgyNlYxOWgyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTItLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0''@;'; put 'put ''IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksYi5DbHJTaGFwZUV2ZW50PSgwLHAuY2xySWNvblNWRykoJzxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTYuMTcsMjUuODYsMTAuODEsMjAuNWExLDEsMCwwLDEsMS40MS0xLjQxTDE2LjE3LDIzbDguNjQtOC42NGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIuMjUsNkgyOVY4aDNWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEu''@;'; put 'put ''NzgsMCwwLDAsMzIuMjUsNloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTUiIHg9IjEzIiB5PSI2IiB3aWR0aD0iMTAiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTEwLjgxLDIwLjVsNS4zNiw1LjM2TDI2LjIyLDE1''@;'; put 'put ''LjgxYTEsMSwwLDAsMC0xLjQxLTEuNDFMMTYuMTcsMjNsLTMuOTQtMy45NGExLDEsMCwwLDAtMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTEwLDEwYTEsMSww''@;'; put 'put ''LDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTMyLDEzLjIyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEu''@;'; put 'put ''NzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0yMi41LDZIMTNWOGg5Ljc4QTcuNDksNy40OSwwLDAsMSwyMi41LDZaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''YmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCww''@;'; put 'put ''LDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTAuODEsMjAuNWw1LjM2LDUuMzZMMjYuMjIsMTUuODFhMSwxLDAsMCwwLC4yMy0uNDFIMjMuOEwxNi4xNywyM2wt''@;'; put 'put ''My45NC0zLjk0YTEsMSwwLDAsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHBvaW50cz0iMjEuMjkgNiAxMyA2IDEzIDggMjAuMTQgOCAyMS4yOSA2Ii8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDMyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwz''@;'; put 'put ''Ljc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywx''@;'; put 'put ''MUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0i''@;'; put 'put ''TTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEs''@;'; put 'put ''MSwwLDAsMCwyNiwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMzIuMjUsNmgtNFY5YTIuMiwyLjIsMCwwLDEtNC40LDBWNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAs''@;'; put 'put ''MCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIuMjUsNlpNMjUuOTQsMTYuNThsLTkuNjcsOS42N0wxMSwyMC45NEExLjM2LDEuMzYsMCwwLDEsMTIuOSwxOWwzLjM4LDMuMzhM''@;'; put 'put ''MjQsMTQuNjZhMS4zNiwxLjM2LDAsMSwxLDEuOTMsMS45M1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEs''@;'; put 'put ''MCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMjYuM2ExLjM0LDEuMzQsMCwwLDEtLjM2LDEuMThsLTkuNjcsOS42N0wxMSwyMC45NEExLjM2''@;'; put 'put ''LDEuMzYsMCwwLDEsMTIuOSwxOWwzLjM4LDMuMzgsNy03aC0xQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwx''@;'; put 'put ''Ljc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4y''@;'; put 'put ''MywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTEwLDEw''@;'; put 'put ''YTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNkgx''@;'; put 'put ''Mi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVabS00LjA2LDMuMDgtOS42Nyw5LjY3''@;'; put 'put ''TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEuMzYsMCwxLDEsMS45MywxLjkzWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxiLkNsclNoYXBlRXllPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy42MiwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBTNS4zNCwxMS4zLDIsMTcuNTNMMS43MiwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgs''@;'; put 'put ''MTAsMTUuODIsMTBzMTIuNDYtMy43MiwxNS44Mi0xMGwuMjYtLjQ4Wk0xNy44LDI2LjQzQzEyLjE3LDI2LjQzLDcsMjMuMjksNCwxOGMzLTUuMjksOC4xNy04LjQzLDEzLjgtOC40M1MyOC41NCwxMi43MiwzMS41OSwxOEMyOC41NCwyMy4yOSwyMy40MiwyNi40MywxNy44LDI2LjQzWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4wOSwxMS4xN0E2Ljg2LDYuODYsMCwxLDAsMjUsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjA5LDExLjE3Wm0wLDExLjcyQTQuODYsNC44NiwwLDEsMSwyMywxOCw0Ljg3LDQu''@;'; put 'put ''ODcsMCwwLDEsMTguMDksMjIuODlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjYyLDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMFM1LjM0LDExLjMsMiwxNy41M0wxLjcyLDE4bC4yNi40OGMz''@;'; put 'put ''LjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMHMxMi40Ni0zLjcyLDE1LjgyLTEwbC4yNi0uNDhaTTE3LjgsMjYuNDNDMTIuMTcsMjYuNDMsNywyMy4yOSw0LDE4YzMtNS4yOSw4LjE3LTguNDMsMTMuOC04LjQzUzI4LjU0LDEyLjcyLDMxLjU5LDE4QzI4LjU0LDIzLjI5LDIzLjQyLDI2LjQzLDE3''@;'; put 'put ''LjgsMjYuNDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOC4wOSIgY3k9IjE4LjAzIiByPSI2Ljg2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+JyksYi5DbHJTaGFwZUV5ZUhpZGU9''@;'; put 'put ''KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI1LjE5LDIwLjRBNi43OCw2Ljc4LDAsMCwwLDI1LjYyLDE4YTYuODYsNi44NiwwLDAsMC02Ljg2LTYuODYsNi43OSw2Ljc5LDAsMCwwLTIuMzcuNDNMMTgsMTMuMjNhNC43OCw0Ljc4LDAsMCwxLC43NC0uMDZBNC44Nyw0Ljg3LDAsMCwxLDIz''@;'; put 'put ''LjYyLDE4YTQuNzksNC43OSwwLDAsMS0uMDYuNzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LjI5LDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMGExNi44MiwxNi44MiwwLDAsMC01LjI0Ljg1''@;'; put 'put ''TDE0Ljg0LDEwYTE0Ljc4LDE0Ljc4LDAsMCwxLDMuNjMtLjQ3YzUuNjMsMCwxMC43NSwzLjE0LDEzLjgsOC40M2ExNy43NSwxNy43NSwwLDAsMS00LjM3LDUuMWwxLjQyLDEuNDJhMTkuOTMsMTkuOTMsMCwwLDAsNS02bC4yNi0uNDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQuODcsNS43OGw0LjQ2LDQuNDZhMTkuNTIsMTkuNTIsMCwwLDAtNi42OSw3LjI5TDIuMzgsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwYTE2LjkzLDE2LjkzLDAsMCwwLDcuMzctMS42OWw1LDUsMS43NS0x''@;'; put 'put ''LjUtMjYtMjZabTkuNzUsOS43NSw2LjY1LDYuNjVhNC44MSw0LjgxLDAsMCwxLTIuNS43MkE0Ljg3LDQuODcsMCwwLDEsMTMuOSwxOCw0LjgxLDQuODEsMCwwLDEsMTQuNjIsMTUuNTNabS0xLjQ1LTEuNDVhNi44NSw2Ljg1LDAsMCwwLDkuNTUsOS41NWwxLjYsMS42YTE0LjkxLDE0LjkxLDAs''@;'; put 'put ''MCwxLTUuODYsMS4yYy01LjYzLDAtMTAuNzUtMy4xNC0xMy44LTguNDNhMTcuMjksMTcuMjksMCwwLDEsNi4xMi02LjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjM3LDExLjE3QTYuNzksNi43OSwwLDAs''@;'; put 'put ''MCwxNiwxMS42bDguOCw4LjhBNi43OCw2Ljc4LDAsMCwwLDI1LjIzLDE4LDYuODYsNi44NiwwLDAsMCwxOC4zNywxMS4xN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNC4yOSwxNy41M2MtMy4zNy02LjIzLTkuMjgt''@;'; put 'put ''MTAtMTUuODItMTBhMTYuODIsMTYuODIsMCwwLDAtNS4yNC44NUwxNC44NCwxMGExNC43OCwxNC43OCwwLDAsMSwzLjYzLS40N2M1LjYzLDAsMTAuNzUsMy4xNCwxMy44LDguNDNhMTcuNzUsMTcuNzUsMCwwLDEtNC4zNyw1LjFsMS40MiwxLjQyYTE5LjkzLDE5LjkzLDAsMCwwLDUtNmwuMjYt''@;'; put 'put ''LjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQuODcsNS43OGw0LjQ2LDQuNDZhMTkuNTIsMTkuNTIsMCwwLDAtNi42OSw3LjI5TDIuMzgsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwYTE2Ljkz''@;'; put 'put ''LDE2LjkzLDAsMCwwLDcuMzctMS42OWw1LDUsMS43NS0xLjUtMjYtMjZabTguMyw4LjNhNi44NSw2Ljg1LDAsMCwwLDkuNTUsOS41NWwxLjYsMS42YTE0LjkxLDE0LjkxLDAsMCwxLTUuODYsMS4yYy01LjYzLDAtMTAuNzUtMy4xNC0xMy44LTguNDNhMTcuMjksMTcuMjksMCwwLDEsNi4xMi02''@;'; put 'put ''LjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+JyksYi5DbHJTaGFwZVN0ZXBGb3J3YXJkMj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNy4wOCw2LjUyYTEuNjgsMS42OCwwLDAsMCwwLDIuNEwxNi41MSwxOCw3LjEyLDI3LjA4YTEuNywxLjcsMCwwLDAs''@;'; put 'put ''Mi4zNiwyLjQ0aDBMMjEuNCwxOCw5LjQ4LDYuNDdBMS42OSwxLjY5LDAsMCwwLDcuMDgsNi41MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNi40OSw1YTEuNywxLjcsMCwwLDAtMS43LDEuN1YyOS4zYTEuNywxLjcsMCwwLDAsMy40''@;'; put 'put ''LDBWNi43QTEuNywxLjcsMCwwLDAsMjYuNDksNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLGIuQ2xyU2hhcGVBcnJvdz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcuNjYsMTUuNjEsMTgsNiw4LjM0LDE1LjYxQTEsMSwwLDEsMCw5Ljc1''@;'; put 'put ''LDE3TDE3LDkuODFWMjguOTRhMSwxLDAsMSwwLDIsMFY5LjgxTDI2LjI1LDE3YTEsMSwwLDAsMCwxLjQxLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPicpLGIuQ29yZVNoYXBlcz17InVua25vd24tc3RhdHVzIjpiLkNsclNoYXBlVW5rbm93blN0''@;'; put 'put ''YXR1cyxob21lOmIuQ2xyU2hhcGVIb21lLGNvZzpiLkNsclNoYXBlQ29nLGNoZWNrOmIuQ2xyU2hhcGVDaGVjayx0aW1lczpiLkNsclNoYXBlVGltZXMsImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIjpiLkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZSwiZXhjbGFtYXRpb24tY2lyY2xlIjpiLkNs''@;'; put 'put ''clNoYXBlRXhjbGFtYXRpb25DaXJjbGUsImNoZWNrLWNpcmNsZSI6Yi5DbHJTaGFwZUNoZWNrQ2lyY2xlLCJpbmZvLWNpcmNsZSI6Yi5DbHJTaGFwZUluZm9DaXJjbGUsImluZm8tc3RhbmRhcmQiOmIuQ2xyU2hhcGVJbmZvU3RhbmRhcmQsInN1Y2Nlc3Mtc3RhbmRhcmQiOmIuQ2xyU2hhcGVT''@;'; put 'put ''dWNjZXNzU3RhbmRhcmQsImVycm9yLXN0YW5kYXJkIjpiLkNsclNoYXBlRXJyb3JTdGFuZGFyZCwid2FybmluZy1zdGFuZGFyZCI6Yi5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZCwiaGVscC1pbmZvIjpiLkNsclNoYXBlSGVscEluZm8sYmFyczpiLkNsclNoYXBlQmFycyx1c2VyOmIuQ2xyU2hh''@;'; put 'put ''cGVVc2VyLGFuZ2xlOmIuQ2xyU2hhcGVBbmdsZSxmb2xkZXI6Yi5DbHJTaGFwZUZvbGRlciwiZm9sZGVyLW9wZW4iOmIuQ2xyU2hhcGVGb2xkZXJPcGVuLGJlbGw6Yi5DbHJTaGFwZUJlbGwsaW1hZ2U6Yi5DbHJTaGFwZUltYWdlLGNsb3VkOmIuQ2xyU2hhcGVDbG91ZCwiZWxsaXBzaXMtaG9y''@;'; put 'put ''aXpvbnRhbCI6Yi5DbHJTaGFwZUVsbGlwc2lzSG9yaXpvbnRhbCwiZWxsaXBzaXMtdmVydGljYWwiOmIuQ2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsLCJmaWx0ZXItZ3JpZCI6Yi5DbHJTaGFwZUZpbHRlckdyaWQsImZpbHRlci1ncmlkLWNpcmNsZSI6Yi5DbHJTaGFwZUZpbHRlckdyaWRDaXJj''@;'; put 'put ''bGUsInZtLWJ1ZyI6Yi5DbHJTaGFwZVZtQnVnLHNlYXJjaDpiLkNsclNoYXBlU2VhcmNoLCJ2aWV3LWNvbHVtbnMiOmIuQ2xyU2hhcGVWaWV3Q29sdW1ucywiYW5nbGUtZG91YmxlIjpiLkNsclNoYXBlQW5nbGVEb3VibGUsY2FsZW5kYXI6Yi5DbHJTaGFwZUNhbGVuZGFyLGV2ZW50OmIuQ2xy''@;'; put 'put ''U2hhcGVFdmVudCxleWU6Yi5DbHJTaGFwZUV5ZSwiZXllLWhpZGUiOmIuQ2xyU2hhcGVFeWVIaWRlLCJzdGVwLWZvcndhcmQtMiI6Yi5DbHJTaGFwZVN0ZXBGb3J3YXJkMixhcnJvdzpiLkNsclNoYXBlQXJyb3d9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkNvcmVTaGFwZXMsImhvdXNlIiwo''@;'; put 'put ''MCxfLmRlc2NyaXB0b3JDb25maWcpKGIuQ29yZVNoYXBlcy5ob21lKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuQ29yZVNoYXBlcywic2V0dGluZ3MiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Db3JlU2hhcGVzLmNvZykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkNvcmVTaGFwZXMs''@;'; put 'put ''InN1Y2Nlc3MiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Db3JlU2hhcGVzLmNoZWNrKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuQ29yZVNoYXBlcywiY2xvc2UiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Db3JlU2hhcGVzLnRpbWVzKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIu''@;'; put 'put ''Q29yZVNoYXBlcywid2FybmluZyIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXNbImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJlcnJvciIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXNbImV4''@;'; put 'put ''Y2xhbWF0aW9uLWNpcmNsZSJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuQ29yZVNoYXBlcywiaW5mbyIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXNbImluZm8tY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJtZW51IiwoMCxfLmRl''@;'; put 'put ''c2NyaXB0b3JDb25maWcpKGIuQ29yZVNoYXBlcy5iYXJzKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuQ29yZVNoYXBlcywiYXZhdGFyIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuQ29yZVNoYXBlcy51c2VyKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuQ29yZVNoYXBlcywiY2FyZXQi''@;'; put 'put ''LCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Db3JlU2hhcGVzLmFuZ2xlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuQ29yZVNoYXBlcywiZGlyZWN0b3J5IiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuQ29yZVNoYXBlcy5mb2xkZXIpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3Jl''@;'; put 'put ''U2hhcGVzLCJub3RpZmljYXRpb24iLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Db3JlU2hhcGVzLmJlbGwpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJjb2xsYXBzZSIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXNbImFuZ2xlLWRvdWJsZSJdKSl9''@;'; put 'put ''LCIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9k''@;'; put 'put ''ZXNjcmlwdG9yLWNvbmZpZy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihYLGIsSSl7InVzZSBzdHJpY3QiO09iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShiLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxiLmRlc2NyaXB0b3JDb25maWc9dm9pZCAwLGIuZGVzY3JpcHRvckNvbmZpZz1mdW5jdGlvbiBfKHApe3JldHVybntlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx2YWx1ZTpwfX19LCIu''@;'; put 'put ''L3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3Ny''@;'; put 'put ''Yy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihYLGIs''@;'; put 'put ''SSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxiLlNoYXBlVGVtcGxhdGVPYnNlcnZlcj1iLmNoYW5nZUhhbmRsZXJDYWxsYmFja3M9dm9pZCAwLGIuY2hhbmdlSGFuZGxlckNhbGxiYWNrcz17fTt2YXIgXz1mdW5jdGlvbigp''@;'; put 'put ''e2Z1bmN0aW9uIHAoKXt0aGlzLmNhbGxiYWNrcz1iLmNoYW5nZUhhbmRsZXJDYWxsYmFja3N9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCJpbnN0YW5jZSIse2dldDpmdW5jdGlvbigpe3JldHVybiBwLnNpbmdsZUluc3RhbmNlfHwocC5zaW5nbGVJbnN0YW5jZT1uZXcgcCkscC5z''@;'; put 'put ''aW5nbGVJbnN0YW5jZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxwLnByb3RvdHlwZS5zdWJzY3JpYmVUbz1mdW5jdGlvbihWLHcpe3ZhciBQPXRoaXM7cmV0dXJuIHRoaXMuY2FsbGJhY2tzW1ZdPy0xPT09dGhpcy5jYWxsYmFja3NbVl0uaW5kZXhPZih3KSYmdGhpcy5jYWxs''@;'; put 'put ''YmFja3NbVl0ucHVzaCh3KTp0aGlzLmNhbGxiYWNrc1tWXT1bd10sZnVuY3Rpb24oKXt2YXIgRj1QLmNhbGxiYWNrc1tWXS5pbmRleE9mKHcpO1AuY2FsbGJhY2tzW1ZdLnNwbGljZShGLDEpLDA9PT1QLmNhbGxiYWNrc1tWXS5sZW5ndGgmJmRlbGV0ZSBQLmNhbGxiYWNrc1tWXX19LHAucHJv''@;'; put 'put ''dG90eXBlLmVtaXRDaGFuZ2VzPWZ1bmN0aW9uKFYsdyl7dGhpcy5jYWxsYmFja3NbVl0mJnRoaXMuY2FsbGJhY2tzW1ZdLm1hcChmdW5jdGlvbihQKXtQKHcpfSl9LHB9KCk7Yi5TaGFwZVRlbXBsYXRlT2JzZXJ2ZXI9X30sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2Vu''@;'; put 'put ''ZXJhdG9yLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzICoqKiEKICAgICAgICAgICAgICAg''@;'; put 'put ''ICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgsYixJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZToh''@;'; put 'put ''MH0pLGIuY2xySWNvblNWRz12b2lkIDA7Yi5jbHJJY29uU1ZHPWZ1bmN0aW9uIHcoUCl7dmFyIEY9IiI7cmV0dXJuIFAuaW5kZXhPZigiLS1iYWRnZWQiKT4tMSYmKEYrPSJjYW4tYmFkZ2UgIiksUC5pbmRleE9mKCItLWFsZXJ0ZWQiKT4tMSYmKEYrPSJjYW4tYWxlcnQgIiksUC5pbmRleE9m''@;'; put 'put ''KCJjbHItaS1zb2xpZCIpPi0xJiYoRis9Imhhcy1zb2xpZCAiKSwoRj8nPHN2ZyB2ZXJzaW9uPSIxLjEiIGNsYXNzPSInK0YrJyIgdmlld0JveD0iMCAwIDM2IDM2IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCBtZWV0IlxuICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAw''@;'; put 'put ''L3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9ImltZyI+JzonPHN2ZyB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAzNiAzNiIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCJcbiAgICB4bWxu''@;'; put 'put ''cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmb2N1c2FibGU9ImZhbHNlIiByb2xlPSJpbWciPicpK1ArIjwvc3ZnPiJ9fX0pfSwzNzUxMzooY2UsWCk9PntYLmVuY3J5cHQ9ZnVuY3Rpb24oYixJKXtyZXR1''@;'; put 'put ''cm4gYi5fY2lwaGVyLmVuY3J5cHRCbG9jayhJKX0sWC5kZWNyeXB0PWZ1bmN0aW9uKGIsSSl7cmV0dXJuIGIuX2NpcGhlci5kZWNyeXB0QmxvY2soSSl9fSwzNzY0MDpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPUVycm9yfSwzNzczMTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''ST1iKDk3NTQxKS5oYXM7Y2UuZXhwb3J0cz1mdW5jdGlvbihfKXtyZXR1cm4gSShfKSxffX0sMzhlMzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDU4NjA3KSxfPWIoMzE5NTApLHA9SSh7fS5oYXNPd25Qcm9wZXJ0eSk7Y2UuZXhwb3J0cz1PYmplY3QuaGFzT3dufHxmdW5jdGlv''@;'; put 'put ''bih3LFApe3JldHVybiBwKF8odyksUCl9fSwzODI4MDpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJLF8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBwKEIsZyl7aWYoIUIpdGhyb3cgbmV3IEVycm9yKGd8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gVihCLGcpe0Iuc3VwZXJfPWc7''@;'; put 'put ''dmFyIHk9ZnVuY3Rpb24oKXt9O3kucHJvdG90eXBlPWcucHJvdG90eXBlLEIucHJvdG90eXBlPW5ldyB5LEIucHJvdG90eXBlLmNvbnN0cnVjdG9yPUJ9ZnVuY3Rpb24gdyhCLGcseSl7aWYody5pc0JOKEIpKXJldHVybiBCO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5s''@;'; put 'put ''ZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1CJiYoKCJsZSI9PT1nfHwiYmUiPT09ZykmJih5PWcsZz0xMCksdGhpcy5faW5pdChCfHwwLGd8fDEwLHl8fCJiZSIpKX12YXIgUDsib2JqZWN0Ij09dHlwZW9mIEk/SS5leHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3Ry''@;'; put 'put ''eXtQPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpiKDY2MDg5KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEYoQixnKXt2YXIgeT1CLmNoYXJDb2RlQXQoZyk7cmV0dXJuIHk+PTY1JiZ5PD03MD95LTU1Onk+PTk3JiZ5PD0xMDI/eS04''@;'; put 'put ''Nzp5LTQ4JjE1fWZ1bmN0aW9uIFIoQixnLHkpe3ZhciB4PUYoQix5KTtyZXR1cm4geS0xPj1nJiYoeHw9RihCLHktMSk8PDQpLHh9ZnVuY3Rpb24geihCLGcseSx4KXtmb3IodmFyIEM9MCxUPU1hdGgubWluKEIubGVuZ3RoLHkpLEg9ZztIPFQ7SCsrKXt2YXIgaj1CLmNoYXJDb2RlQXQoSCkt''@;'; put 'put ''NDg7Qyo9eCxDKz1qPj00OT9qLTQ5KzEwOmo+PTE3P2otMTcrMTA6an1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24oZyl7cmV0dXJuIGcgaW5zdGFuY2VvZiB3fHxudWxsIT09ZyYmIm9iamVjdCI9PXR5cGVvZiBnJiZnLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXku''@;'; put 'put ''aXNBcnJheShnLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gZy5jbXAoeSk+MD9nOnl9LHcubWluPWZ1bmN0aW9uKGcseSl7cmV0dXJuIGcuY21wKHkpPDA/Zzp5fSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihnLHkseCl7aWYoIm51bWJlciI9PXR5cGVvZiBnKXJldHVy''@;'; put 'put ''biB0aGlzLl9pbml0TnVtYmVyKGcseSx4KTtpZigib2JqZWN0Ij09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXRBcnJheShnLHkseCk7ImhleCI9PT15JiYoeT0xNikscCh5PT09KDB8eSkmJnk+PTImJnk8PTM2KTt2YXIgQz0wOyItIj09PShnPWcudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysv''@;'; put 'put ''ZywiIikpWzBdJiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxnLmxlbmd0aCYmKDE2PT09eT90aGlzLl9wYXJzZUhleChnLEMseCk6KHRoaXMuX3BhcnNlQmFzZShnLHksQyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx5LHgpKSl9LHcucHJvdG90eXBlLl9pbml0''@;'; put 'put ''TnVtYmVyPWZ1bmN0aW9uKGcseSx4KXtnPDAmJih0aGlzLm5lZ2F0aXZlPTEsZz0tZyksZzw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZ10sdGhpcy5sZW5ndGg9MSk6Zzw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjNd''@;'; put 'put ''LHRoaXMubGVuZ3RoPTIpOihwKGc8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCkseSx4KX0sdy5wcm90b3R5cGUuX2luaXRB''@;'; put 'put ''cnJheT1mdW5jdGlvbihnLHkseCl7aWYocCgibnVtYmVyIj09dHlwZW9mIGcubGVuZ3RoKSxnLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChnLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlz''@;'; put 'put ''Lmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULEgsaj0wO2lmKCJiZSI9PT14KWZvcihDPWcubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oSD1nW0NdfGdbQy0xXTw8OHxnW0MtMl08PDE2KTw8aiY2NzEwODg2''@;'; put 'put ''Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxnLmxlbmd0aDtDKz0zKXRoaXMud29yZHNbVF18PShIPWdbQ118Z1tDKzFdPDw4fGdbQysyXTw8MTYpPDxqJjY3MTA4ODYzLHRo''@;'; put 'put ''aXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGcseSx4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGcubGVuZ3RoLXkpLzYpLHRoaXMud29yZHM9''@;'; put 'put ''bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIGosVD0wLEg9MDtpZigiYmUiPT09eClmb3IoQz1nLmxlbmd0aC0xO0M+PXk7Qy09MilqPVIoZyx5LEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49''@;'; put 'put ''MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShnLmxlbmd0aC15KSUyPT0wP3krMTp5O0M8Zy5sZW5ndGg7Qys9MilqPVIoZyx5LEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+''@;'; put 'put ''Pj4yNik6VCs9ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oZyx5LHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPXkpQysrO0MtLSxUPVQveXwwO2Zvcih2YXIgSD1nLmxlbmd0aC14LGo9''@;'; put 'put ''SCVDLEU9TWF0aC5taW4oSCxILWopK3gsbT0wLEE9eDtBPEU7QSs9QyltPXooZyxBLEErQyx5KSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lmKDAhPT1qKXt2YXIgYWU9MTtmb3IobT16KGcsQSxnLmxlbmd0''@;'; put 'put ''aCx5KSxBPTA7QTxqO0ErKylhZSo9eTt0aGlzLmltdWxuKGFlKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZyl7Zy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5n''@;'; put 'put ''dGgpO2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGg7eSsrKWcud29yZHNbeV09dGhpcy53b3Jkc1t5XTtnLmxlbmd0aD10aGlzLmxlbmd0aCxnLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsZy5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IHcobnVs''@;'; put 'put ''bCk7cmV0dXJuIHRoaXMuY29weShnKSxnfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8ZzspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+''@;'; put 'put ''MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0w''@;'; put 'put ''KSx0aGlzfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBOPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAw''@;'; put 'put ''IiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''IiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMCJdLE89WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sSz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2''@;'; put 'put ''LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4''@;'; put 'put ''LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBZKEIsZyx5KXt5Lm5lZ2F0aXZlPWcubmVnYXRpdmVeQi5uZWdhdGl2ZTt2YXIgeD1CLmxlbmd0aCtnLmxlbmd0aHwwO3kubGVuZ3RoPXgseD14LTF8''@;'; put 'put ''MDt2YXIgQz0wfEIud29yZHNbMF0sVD0wfGcud29yZHNbMF0sSD1DKlQsRT1ILzY3MTA4ODY0fDA7eS53b3Jkc1swXT02NzEwODg2MyZIO2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYsYWU9NjcxMDg4NjMmRSxuZT1NYXRoLm1pbihtLGcubGVuZ3RoLTEpLHNlPU1hdGgu''@;'; put 'put ''bWF4KDAsbS1CLmxlbmd0aCsxKTtzZTw9bmU7c2UrKylBKz0oSD0oQz0wfEIud29yZHNbbS1zZXwwXSkqKFQ9MHxnLndvcmRzW3NlXSkrYWUpLzY3MTA4ODY0fDAsYWU9NjcxMDg4NjMmSDt5LndvcmRzW21dPTB8YWUsRT0wfEF9cmV0dXJuIDAhPT1FP3kud29yZHNbbV09MHxFOnkubGVuZ3Ro''@;'; put 'put ''LS0seS5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGcseSl7dmFyIHg7aWYoeT0wfHl8fDEsMTY9PT0oZz1nfHwxMCl8fCJoZXgiPT09Zyl7eD0iIjtmb3IodmFyIEM9MCxUPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj10aGlzLndvcmRzW0hdLEU9KDE2Nzc3''@;'; put 'put ''MjE1JihqPDxDfFQpKS50b1N0cmluZygxNik7VD1qPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsSC0tKSx4PTAhPT1UfHxIIT09dGhpcy5sZW5ndGgtMT9OWzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4KTt4Lmxlbmd0aCV5IT0w''@;'; put 'put ''Oyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYoZz09PSgwfGcpJiZnPj0yJiZnPD0zNil7dmFyIG09T1tnXSxBPUtbZ107eD0iIjt2YXIgYWU9dGhpcy5jbG9uZSgpO2ZvcihhZS5uZWdhdGl2ZT0wOyFhZS5pc1plcm8oKTspe3ZhciBuZT1hZS5tb2Ru''@;'; put 'put ''KEEpLnRvU3RyaW5nKGcpO3g9KGFlPWFlLmlkaXZuKEEpKS5pc1plcm8oKT9uZSt4Ok5bbS1uZS5sZW5ndGhdK25lK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCV5IT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9cCghMSwi''@;'; put 'put ''QmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBnPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9nKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29y''@;'; put 'put ''ZHNbMl0/Zys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJnAoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1nOmd9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gcCh0eXBlb2YgUDwidSIpLHRoaXMudG9BcnJheUxpa2UoUCxnLHkpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMudG9BcnJh''@;'; put 'put ''eUxpa2UoQXJyYXksZyx5KX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oZyx5LHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtwKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxwKFQ+MCwiUmVxdWVzdGVk''@;'; put 'put ''IGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sSD0ibGUiPT09eSxqPW5ldyBnKFQpLEE9dGhpcy5jbG9uZSgpO2lmKEgpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbbV09RTtmb3IoO208VDttKyspalttXT0wfWVs''@;'; put 'put ''c2V7Zm9yKG09MDttPFQtQzttKyspalttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbVC1tLTFdPUV9cmV0dXJuIGp9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihnKXtyZXR1cm4gMzItTWF0aC5jbHoz''@;'; put 'put ''MihnKX06ZnVuY3Rpb24oZyl7dmFyIHk9Zyx4PTA7cmV0dXJuIHk+PTQwOTYmJih4Kz0xMyx5Pj4+PTEzKSx5Pj02NCYmKHgrPTcseT4+Pj03KSx5Pj04JiYoeCs9NCx5Pj4+PTQpLHk+PTImJih4Kz0yLHk+Pj49MikseCt5fSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oZyl7aWYo''@;'; put 'put ''MD09PWcpcmV0dXJuIDI2O3ZhciB5PWcseD0wO3JldHVybiEoODE5MSZ5KSYmKHgrPTEzLHk+Pj49MTMpLCEoMTI3JnkpJiYoeCs9Nyx5Pj4+PTcpLCEoMTUmeSkmJih4Kz00LHk+Pj49NCksISgzJnkpJiYoeCs9Mix5Pj4+PTIpLCEoMSZ5KSYmeCsrLHh9LHcucHJvdG90eXBlLmJpdExlbmd0''@;'; put 'put ''aD1mdW5jdGlvbigpe3ZhciB5PXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK3l9LHcucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGc9MCx5PTA7''@;'; put 'put ''eTx0aGlzLmxlbmd0aDt5Kyspe3ZhciB4PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbeV0pO2lmKGcrPXgsMjYhPT14KWJyZWFrfXJldHVybiBnfSx3LnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS50b1R3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oZykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy50ZXN0bihnLTEpP3RoaXMubm90bihnKS5pYWRk''@;'; put 'put ''bigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHcucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgeT0wO3k8Zy5sZW5ndGg7eSsrKXRoaXMud29y''@;'; put 'put ''ZHNbeV09dGhpcy53b3Jkc1t5XXxnLndvcmRzW3ldO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihnKX0sdy5wcm90b3R5cGUub3I9ZnVuY3Rpb24oZyl7cmV0dXJu''@;'; put 'put ''IHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoZyk6Zy5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihnKTpnLmNsb25lKCkuaXVvcih0aGlzKX0sdy5w''@;'; put 'put ''cm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oZyl7dmFyIHk7eT10aGlzLmxlbmd0aD5nLmxlbmd0aD9nOnRoaXM7Zm9yKHZhciB4PTA7eDx5Lmxlbmd0aDt4KyspdGhpcy53b3Jkc1t4XT10aGlzLndvcmRzW3hdJmcud29yZHNbeF07cmV0dXJuIHRoaXMubGVuZ3RoPXkubGVuZ3RoLHRoaXMuc3Ry''@;'; put 'put ''aXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoZyl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoZyk6''@;'; put 'put ''Zy5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChnKTpnLmNsb25lKCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGcpe3ZhciB5LHg7dGhp''@;'; put 'put ''cy5sZW5ndGg+Zy5sZW5ndGg/KHk9dGhpcyx4PWcpOih5PWcseD10aGlzKTtmb3IodmFyIEM9MDtDPHgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXkud29yZHNbQ11eeC53b3Jkc1tDXTtpZih0aGlzIT09eSlmb3IoO0M8eS5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109eS53b3Jkc1tDXTty''@;'; put 'put ''ZXR1cm4gdGhpcy5sZW5ndGg9eS5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKGcpe3JldHVybiBwKCEodGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihnKX0sdy5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxl''@;'; put 'put ''bmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihnKTpnLmNsb25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGcpOmcuY2xvbmUoKS5pdXhvcih0aGlzKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuaW5vdG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PTB8TWF0aC5jZWlsKGcvMjYpLHg9ZyUyNjt0aGlzLl9leHBhbmQoeSkseD4wJiZ5LS07Zm9yKHZhciBDPTA7Qzx5O0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJn50aGlzLndvcmRzW0Nd''@;'; put 'put ''O3JldHVybiB4PjAmJih0aGlzLndvcmRzW0NdPX50aGlzLndvcmRzW0NdJjY3MTA4ODYzPj4yNi14KSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihnKX0sdy5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihnLHkpe3Ao''@;'; put 'put ''Im51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeD1nLzI2fDAsQz1nJTI2O3JldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdPXk/dGhpcy53b3Jkc1t4XXwxPDxDOnRoaXMud29yZHNbeF0mfigxPDxDKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rp''@;'; put 'put ''b24oZyl7dmFyIHkseCxDO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHk9dGhpcy5pc3ViKGcpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0''@;'; put 'put ''dXJuIGcubmVnYXRpdmU9MCx5PXRoaXMuaXN1YihnKSxnLm5lZ2F0aXZlPTEseS5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oeD10aGlzLEM9Zyk6KHg9ZyxDPXRoaXMpO2Zvcih2YXIgVD0wLEg9MDtIPEMubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJih5PSgw''@;'; put 'put ''fHgud29yZHNbSF0pKygwfEMud29yZHNbSF0pK1QpLFQ9eT4+PjI2O2Zvcig7MCE9PVQmJkg8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKHk9KDB8eC53b3Jkc1tIXSkrVCksVD15Pj4+MjY7aWYodGhpcy5sZW5ndGg9eC5sZW5ndGgsMCE9PVQpdGhpcy53b3Jkc1t0aGlz''@;'; put 'put ''Lmxlbmd0aF09VCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoeCE9PXRoaXMpZm9yKDtIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXgud29yZHNbSF07cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnKXt2YXIgeTtyZXR1cm4gMCE9PWcubmVnYXRpdmUmJjA9PT10aGlz''@;'; put 'put ''Lm5lZ2F0aXZlPyhnLm5lZ2F0aXZlPTAseT10aGlzLnN1YihnKSxnLm5lZ2F0aXZlXj0xLHkpOjA9PT1nLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLHk9Zy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLHkpOnRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMu''@;'; put 'put ''Y2xvbmUoKS5pYWRkKGcpOmcuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcpe2lmKDAhPT1nLm5lZ2F0aXZlKXtnLm5lZ2F0aXZlPTA7dmFyIHk9dGhpcy5pYWRkKGcpO3JldHVybiBnLm5lZ2F0aXZlPTEseS5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5u''@;'; put 'put ''ZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgQyxULHg9dGhpcy5jbXAoZyk7aWYoMD09PXgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlz''@;'; put 'put ''O3g+MD8oQz10aGlzLFQ9Zyk6KEM9ZyxUPXRoaXMpO2Zvcih2YXIgSD0wLGo9MDtqPFQubGVuZ3RoO2orKylIPSh5PSgwfEMud29yZHNbal0pLSgwfFQud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJnk7Zm9yKDswIT09SCYmajxDLmxlbmd0aDtqKyspSD0oeT0oMHxD''@;'; put 'put ''LndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZ5O2lmKDA9PT1IJiZqPEMubGVuZ3RoJiZDIT09dGhpcylmb3IoO2o8Qy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09Qy53b3Jkc1tqXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsaiksQyE9''@;'; put 'put ''PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihnKX07dmFyIFc9ZnVuY3Rpb24oZyx5LHgpe3ZhciBFLG0sQSxDPWcud29yZHMsVD15LndvcmRzLEg9eC53b3JkcyxqPTAsYWU9''@;'; put 'put ''MHxDWzBdLG5lPTgxOTEmYWUsc2U9YWU+Pj4xMyxDZT0wfENbMV0sVWU9ODE5MSZDZSxKZT1DZT4+PjEzLGl0PTB8Q1syXSx4ZT04MTkxJml0LHllPWl0Pj4+MTMsS2U9MHxDWzNdLGplPTgxOTEmS2Usa2U9S2U+Pj4xMyxIZT0wfENbNF0sTGU9ODE5MSZIZSxSZT1IZT4+PjEzLFZlPTB8Q1s1''@;'; put 'put ''XSxBZT04MTkxJlZlLERlPVZlPj4+MTMsX3Q9MHxDWzZdLHJ0PTgxOTEmX3QsUWU9X3Q+Pj4xMyxzbj0wfENbN10sdnQ9ODE5MSZzbixTdD1zbj4+PjEzLGVuPTB8Q1s4XSx1dD04MTkxJmVuLFhlPWVuPj4+MTMsdHQ9MHxDWzldLEllPTgxOTEmdHQsYXQ9dHQ+Pj4xMyx1bj0wfFRbMF0sSXQ9''@;'; put 'put ''ODE5MSZ1bixSdD11bj4+PjEzLHJpPTB8VFsxXSxhbj04MTkxJnJpLGxuPXJpPj4+MTMsbmk9MHxUWzJdLGhuPTgxOTEmbmksaHQ9bmk+Pj4xMyxScj0wfFRbM10sQnQ9ODE5MSZScixBdD1Scj4+PjEzLEZuPTB8VFs0XSxzdD04MTkxJkZuLFp0PUZuPj4+MTMsUXI9MHxUWzVdLFllPTgxOTEm''@;'; put 'put ''UXIsVHQ9UXI+Pj4xMyxycj0wfFRbNl0sZnQ9ODE5MSZycixNdD1ycj4+PjEzLFpuPTB8VFs3XSxubj04MTkxJlpuLFd0PVpuPj4+MTMsZGk9MHxUWzhdLGRuPTgxOTEmZGksbW49ZGk+Pj4xMyxwaT0wfFRbOV0sZm49ODE5MSZwaSx0bj1waT4+PjEzO3gubmVnYXRpdmU9Zy5uZWdhdGl2ZV55''@;'; put 'put ''Lm5lZ2F0aXZlLHgubGVuZ3RoPTE5O3ZhciBjYT0oaisoRT1NYXRoLmltdWwobmUsSXQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKG5lLFJ0KSkrTWF0aC5pbXVsKHNlLEl0KXwwKSk8PDEzKXwwO2o9KChBPU1hdGguaW11bChzZSxSdCkpKyhtPj4+MTMpfDApKyhjYT4+PjI2KXwwLGNh''@;'; put 'put ''Jj02NzEwODg2MyxFPU1hdGguaW11bChVZSxJdCksbT0obT1NYXRoLmltdWwoVWUsUnQpKStNYXRoLmltdWwoSmUsSXQpfDAsQT1NYXRoLmltdWwoSmUsUnQpO3ZhciBfaT0oaisoRT1FK01hdGguaW11bChuZSxhbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGxuKXwwKStN''@;'; put 'put ''YXRoLmltdWwoc2UsYW4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsbG4pfDApKyhtPj4+MTMpfDApKyhfaT4+PjI2KXwwLF9pJj02NzEwODg2MyxFPU1hdGguaW11bCh4ZSxJdCksbT0obT1NYXRoLmltdWwoeGUsUnQpKStNYXRoLmltdWwoeWUsSXQpfDAsQT1NYXRoLmltdWwo''@;'; put 'put ''eWUsUnQpLEU9RStNYXRoLmltdWwoVWUsYW4pfDAsbT0obT1tK01hdGguaW11bChVZSxsbil8MCkrTWF0aC5pbXVsKEplLGFuKXwwLEE9QStNYXRoLmltdWwoSmUsbG4pfDA7dmFyIHZyPShqKyhFPUUrTWF0aC5pbXVsKG5lLGhuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUs''@;'; put 'put ''aHQpfDApK01hdGguaW11bChzZSxobil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxodCl8MCkrKG0+Pj4xMyl8MCkrKHZyPj4+MjYpfDAsdnImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGplLEl0KSxtPShtPU1hdGguaW11bChqZSxSdCkpK01hdGguaW11bChrZSxJdCl8MCxBPU1h''@;'; put 'put ''dGguaW11bChrZSxSdCksRT1FK01hdGguaW11bCh4ZSxhbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGxuKXwwKStNYXRoLmltdWwoeWUsYW4pfDAsQT1BK01hdGguaW11bCh5ZSxsbil8MCxFPUUrTWF0aC5pbXVsKFVlLGhuKXwwLG09KG09bStNYXRoLmltdWwoVWUsaHQpfDApK01hdGguaW11''@;'; put 'put ''bChKZSxobil8MCxBPUErTWF0aC5pbXVsKEplLGh0KXwwO3ZhciBYaT0oaisoRT1FK01hdGguaW11bChuZSxCdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLEF0KXwwKStNYXRoLmltdWwoc2UsQnQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsQXQpfDApKyht''@;'; put 'put ''Pj4+MTMpfDApKyhYaT4+PjI2KXwwLFhpJj02NzEwODg2MyxFPU1hdGguaW11bChMZSxJdCksbT0obT1NYXRoLmltdWwoTGUsUnQpKStNYXRoLmltdWwoUmUsSXQpfDAsQT1NYXRoLmltdWwoUmUsUnQpLEU9RStNYXRoLmltdWwoamUsYW4pfDAsbT0obT1tK01hdGguaW11bChqZSxsbil8MCkr''@;'; put 'put ''TWF0aC5pbXVsKGtlLGFuKXwwLEE9QStNYXRoLmltdWwoa2UsbG4pfDAsRT1FK01hdGguaW11bCh4ZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGh0KXwwKStNYXRoLmltdWwoeWUsaG4pfDAsQT1BK01hdGguaW11bCh5ZSxodCl8MCxFPUUrTWF0aC5pbXVsKFVlLEJ0KXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoVWUsQXQpfDApK01hdGguaW11bChKZSxCdCl8MCxBPUErTWF0aC5pbXVsKEplLEF0KXwwO3ZhciBRaT0oaisoRT1FK01hdGguaW11bChuZSxzdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLFp0KXwwKStNYXRoLmltdWwoc2Usc3QpfDApKTw8MTMpfDA7aj0o''@;'; put 'put ''KEE9QStNYXRoLmltdWwoc2UsWnQpfDApKyhtPj4+MTMpfDApKyhRaT4+PjI2KXwwLFFpJj02NzEwODg2MyxFPU1hdGguaW11bChBZSxJdCksbT0obT1NYXRoLmltdWwoQWUsUnQpKStNYXRoLmltdWwoRGUsSXQpfDAsQT1NYXRoLmltdWwoRGUsUnQpLEU9RStNYXRoLmltdWwoTGUsYW4pfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bChMZSxsbil8MCkrTWF0aC5pbXVsKFJlLGFuKXwwLEE9QStNYXRoLmltdWwoUmUsbG4pfDAsRT1FK01hdGguaW11bChqZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKGplLGh0KXwwKStNYXRoLmltdWwoa2UsaG4pfDAsQT1BK01hdGguaW11bChrZSxodCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKHhlLEJ0KXwwLG09KG09bStNYXRoLmltdWwoeGUsQXQpfDApK01hdGguaW11bCh5ZSxCdCl8MCxBPUErTWF0aC5pbXVsKHllLEF0KXwwLEU9RStNYXRoLmltdWwoVWUsc3QpfDAsbT0obT1tK01hdGguaW11bChVZSxadCl8MCkrTWF0aC5pbXVsKEplLHN0KXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoSmUsWnQpfDA7dmFyIFZpPShqKyhFPUUrTWF0aC5pbXVsKG5lLFllKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsVHQpfDApK01hdGguaW11bChzZSxZZSl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxUdCl8MCkrKG0+Pj4xMyl8MCkrKFZpPj4+MjYp''@;'; put 'put ''fDAsVmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHJ0LEl0KSxtPShtPU1hdGguaW11bChydCxSdCkpK01hdGguaW11bChRZSxJdCl8MCxBPU1hdGguaW11bChRZSxSdCksRT1FK01hdGguaW11bChBZSxhbil8MCxtPShtPW0rTWF0aC5pbXVsKEFlLGxuKXwwKStNYXRoLmltdWwoRGUsYW4pfDAs''@;'; put 'put ''QT1BK01hdGguaW11bChEZSxsbil8MCxFPUUrTWF0aC5pbXVsKExlLGhuKXwwLG09KG09bStNYXRoLmltdWwoTGUsaHQpfDApK01hdGguaW11bChSZSxobil8MCxBPUErTWF0aC5pbXVsKFJlLGh0KXwwLEU9RStNYXRoLmltdWwoamUsQnQpfDAsbT0obT1tK01hdGguaW11bChqZSxBdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKGtlLEJ0KXwwLEE9QStNYXRoLmltdWwoa2UsQXQpfDAsRT1FK01hdGguaW11bCh4ZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFp0KXwwKStNYXRoLmltdWwoeWUsc3QpfDAsQT1BK01hdGguaW11bCh5ZSxadCl8MCxFPUUrTWF0aC5pbXVsKFVlLFllKXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoVWUsVHQpfDApK01hdGguaW11bChKZSxZZSl8MCxBPUErTWF0aC5pbXVsKEplLFR0KXwwO3ZhciBlaT0oaisoRT1FK01hdGguaW11bChuZSxmdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLE10KXwwKStNYXRoLmltdWwoc2UsZnQpfDApKTw8MTMpfDA7aj0o''@;'; put 'put ''KEE9QStNYXRoLmltdWwoc2UsTXQpfDApKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxFPU1hdGguaW11bCh2dCxJdCksbT0obT1NYXRoLmltdWwodnQsUnQpKStNYXRoLmltdWwoU3QsSXQpfDAsQT1NYXRoLmltdWwoU3QsUnQpLEU9RStNYXRoLmltdWwocnQsYW4pfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bChydCxsbil8MCkrTWF0aC5pbXVsKFFlLGFuKXwwLEE9QStNYXRoLmltdWwoUWUsbG4pfDAsRT1FK01hdGguaW11bChBZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKEFlLGh0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsQT1BK01hdGguaW11bChEZSxodCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKExlLEJ0KXwwLG09KG09bStNYXRoLmltdWwoTGUsQXQpfDApK01hdGguaW11bChSZSxCdCl8MCxBPUErTWF0aC5pbXVsKFJlLEF0KXwwLEU9RStNYXRoLmltdWwoamUsc3QpfDAsbT0obT1tK01hdGguaW11bChqZSxadCl8MCkrTWF0aC5pbXVsKGtlLHN0KXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoa2UsWnQpfDAsRT1FK01hdGguaW11bCh4ZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFR0KXwwKStNYXRoLmltdWwoeWUsWWUpfDAsQT1BK01hdGguaW11bCh5ZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFVlLGZ0KXwwLG09KG09bStNYXRoLmltdWwoVWUsTXQpfDApK01hdGguaW11''@;'; put 'put ''bChKZSxmdCl8MCxBPUErTWF0aC5pbXVsKEplLE10KXwwO3ZhciB1YT0oaisoRT1FK01hdGguaW11bChuZSxubil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLFd0KXwwKStNYXRoLmltdWwoc2Usbm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsV3QpfDApKyht''@;'; put 'put ''Pj4+MTMpfDApKyh1YT4+PjI2KXwwLHVhJj02NzEwODg2MyxFPU1hdGguaW11bCh1dCxJdCksbT0obT1NYXRoLmltdWwodXQsUnQpKStNYXRoLmltdWwoWGUsSXQpfDAsQT1NYXRoLmltdWwoWGUsUnQpLEU9RStNYXRoLmltdWwodnQsYW4pfDAsbT0obT1tK01hdGguaW11bCh2dCxsbil8MCkr''@;'; put 'put ''TWF0aC5pbXVsKFN0LGFuKXwwLEE9QStNYXRoLmltdWwoU3QsbG4pfDAsRT1FK01hdGguaW11bChydCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LGh0KXwwKStNYXRoLmltdWwoUWUsaG4pfDAsQT1BK01hdGguaW11bChRZSxodCl8MCxFPUUrTWF0aC5pbXVsKEFlLEJ0KXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoQWUsQXQpfDApK01hdGguaW11bChEZSxCdCl8MCxBPUErTWF0aC5pbXVsKERlLEF0KXwwLEU9RStNYXRoLmltdWwoTGUsc3QpfDAsbT0obT1tK01hdGguaW11bChMZSxadCl8MCkrTWF0aC5pbXVsKFJlLHN0KXwwLEE9QStNYXRoLmltdWwoUmUsWnQpfDAsRT1FK01hdGguaW11''@;'; put 'put ''bChqZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKGplLFR0KXwwKStNYXRoLmltdWwoa2UsWWUpfDAsQT1BK01hdGguaW11bChrZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHhlLGZ0KXwwLG09KG09bStNYXRoLmltdWwoeGUsTXQpfDApK01hdGguaW11bCh5ZSxmdCl8MCxBPUErTWF0aC5pbXVsKHll''@;'; put 'put ''LE10KXwwLEU9RStNYXRoLmltdWwoVWUsbm4pfDAsbT0obT1tK01hdGguaW11bChVZSxXdCl8MCkrTWF0aC5pbXVsKEplLG5uKXwwLEE9QStNYXRoLmltdWwoSmUsV3QpfDA7dmFyIFJpPShqKyhFPUUrTWF0aC5pbXVsKG5lLGRuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUs''@;'; put 'put ''bW4pfDApK01hdGguaW11bChzZSxkbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxtbil8MCkrKG0+Pj4xMyl8MCkrKFJpPj4+MjYpfDAsUmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLEl0KSxtPShtPU1hdGguaW11bChJZSxSdCkpK01hdGguaW11bChhdCxJdCl8MCxBPU1h''@;'; put 'put ''dGguaW11bChhdCxSdCksRT1FK01hdGguaW11bCh1dCxhbil8MCxtPShtPW0rTWF0aC5pbXVsKHV0LGxuKXwwKStNYXRoLmltdWwoWGUsYW4pfDAsQT1BK01hdGguaW11bChYZSxsbil8MCxFPUUrTWF0aC5pbXVsKHZ0LGhuKXwwLG09KG09bStNYXRoLmltdWwodnQsaHQpfDApK01hdGguaW11''@;'; put 'put ''bChTdCxobil8MCxBPUErTWF0aC5pbXVsKFN0LGh0KXwwLEU9RStNYXRoLmltdWwocnQsQnQpfDAsbT0obT1tK01hdGguaW11bChydCxBdCl8MCkrTWF0aC5pbXVsKFFlLEJ0KXwwLEE9QStNYXRoLmltdWwoUWUsQXQpfDAsRT1FK01hdGguaW11bChBZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KEFlLFp0KXwwKStNYXRoLmltdWwoRGUsc3QpfDAsQT1BK01hdGguaW11bChEZSxadCl8MCxFPUUrTWF0aC5pbXVsKExlLFllKXwwLG09KG09bStNYXRoLmltdWwoTGUsVHQpfDApK01hdGguaW11bChSZSxZZSl8MCxBPUErTWF0aC5pbXVsKFJlLFR0KXwwLEU9RStNYXRoLmltdWwoamUsZnQp''@;'; put 'put ''fDAsbT0obT1tK01hdGguaW11bChqZSxNdCl8MCkrTWF0aC5pbXVsKGtlLGZ0KXwwLEE9QStNYXRoLmltdWwoa2UsTXQpfDAsRT1FK01hdGguaW11bCh4ZSxubil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFd0KXwwKStNYXRoLmltdWwoeWUsbm4pfDAsQT1BK01hdGguaW11bCh5ZSxXdCl8MCxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKFVlLGRuKXwwLG09KG09bStNYXRoLmltdWwoVWUsbW4pfDApK01hdGguaW11bChKZSxkbil8MCxBPUErTWF0aC5pbXVsKEplLG1uKXwwO3ZhciBEYT0oaisoRT1FK01hdGguaW11bChuZSxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLHRuKXwwKStN''@;'; put 'put ''YXRoLmltdWwoc2UsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsdG4pfDApKyhtPj4+MTMpfDApKyhEYT4+PjI2KXwwLERhJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxhbiksbT0obT1NYXRoLmltdWwoSWUsbG4pKStNYXRoLmltdWwoYXQsYW4pfDAsQT1NYXRoLmltdWwo''@;'; put 'put ''YXQsbG4pLEU9RStNYXRoLmltdWwodXQsaG4pfDAsbT0obT1tK01hdGguaW11bCh1dCxodCl8MCkrTWF0aC5pbXVsKFhlLGhuKXwwLEE9QStNYXRoLmltdWwoWGUsaHQpfDAsRT1FK01hdGguaW11bCh2dCxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LEF0KXwwKStNYXRoLmltdWwoU3QsQnQp''@;'; put 'put ''fDAsQT1BK01hdGguaW11bChTdCxBdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LHN0KXwwLG09KG09bStNYXRoLmltdWwocnQsWnQpfDApK01hdGguaW11bChRZSxzdCl8MCxBPUErTWF0aC5pbXVsKFFlLFp0KXwwLEU9RStNYXRoLmltdWwoQWUsWWUpfDAsbT0obT1tK01hdGguaW11bChBZSxUdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKERlLFllKXwwLEE9QStNYXRoLmltdWwoRGUsVHQpfDAsRT1FK01hdGguaW11bChMZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKExlLE10KXwwKStNYXRoLmltdWwoUmUsZnQpfDAsQT1BK01hdGguaW11bChSZSxNdCl8MCxFPUUrTWF0aC5pbXVsKGplLG5uKXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwoamUsV3QpfDApK01hdGguaW11bChrZSxubil8MCxBPUErTWF0aC5pbXVsKGtlLFd0KXwwLEU9RStNYXRoLmltdWwoeGUsZG4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxtbil8MCkrTWF0aC5pbXVsKHllLGRuKXwwLEE9QStNYXRoLmltdWwoeWUsbW4pfDA7dmFyIGhpPShq''@;'; put 'put ''KyhFPUUrTWF0aC5pbXVsKFVlLGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoVWUsdG4pfDApK01hdGguaW11bChKZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChKZSx0bil8MCkrKG0+Pj4xMyl8MCkrKGhpPj4+MjYpfDAsaGkmPTY3MTA4ODYzLEU9TWF0aC5p''@;'; put 'put ''bXVsKEllLGhuKSxtPShtPU1hdGguaW11bChJZSxodCkpK01hdGguaW11bChhdCxobil8MCxBPU1hdGguaW11bChhdCxodCksRT1FK01hdGguaW11bCh1dCxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKHV0LEF0KXwwKStNYXRoLmltdWwoWGUsQnQpfDAsQT1BK01hdGguaW11bChYZSxBdCl8MCxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKHZ0LHN0KXwwLG09KG09bStNYXRoLmltdWwodnQsWnQpfDApK01hdGguaW11bChTdCxzdCl8MCxBPUErTWF0aC5pbXVsKFN0LFp0KXwwLEU9RStNYXRoLmltdWwocnQsWWUpfDAsbT0obT1tK01hdGguaW11bChydCxUdCl8MCkrTWF0aC5pbXVsKFFlLFllKXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoUWUsVHQpfDAsRT1FK01hdGguaW11bChBZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKEFlLE10KXwwKStNYXRoLmltdWwoRGUsZnQpfDAsQT1BK01hdGguaW11bChEZSxNdCl8MCxFPUUrTWF0aC5pbXVsKExlLG5uKXwwLG09KG09bStNYXRoLmltdWwoTGUsV3QpfDApK01hdGgu''@;'; put 'put ''aW11bChSZSxubil8MCxBPUErTWF0aC5pbXVsKFJlLFd0KXwwLEU9RStNYXRoLmltdWwoamUsZG4pfDAsbT0obT1tK01hdGguaW11bChqZSxtbil8MCkrTWF0aC5pbXVsKGtlLGRuKXwwLEE9QStNYXRoLmltdWwoa2UsbW4pfDA7dmFyIHFpPShqKyhFPUUrTWF0aC5pbXVsKHhlLGZuKXwwKXww''@;'; put 'put ''KSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoeGUsdG4pfDApK01hdGguaW11bCh5ZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCh5ZSx0bil8MCkrKG0+Pj4xMyl8MCkrKHFpPj4+MjYpfDAscWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLEJ0KSxtPShtPU1hdGguaW11bChJ''@;'; put 'put ''ZSxBdCkpK01hdGguaW11bChhdCxCdCl8MCxBPU1hdGguaW11bChhdCxBdCksRT1FK01hdGguaW11bCh1dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHV0LFp0KXwwKStNYXRoLmltdWwoWGUsc3QpfDAsQT1BK01hdGguaW11bChYZSxadCl8MCxFPUUrTWF0aC5pbXVsKHZ0LFllKXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwodnQsVHQpfDApK01hdGguaW11bChTdCxZZSl8MCxBPUErTWF0aC5pbXVsKFN0LFR0KXwwLEU9RStNYXRoLmltdWwocnQsZnQpfDAsbT0obT1tK01hdGguaW11bChydCxNdCl8MCkrTWF0aC5pbXVsKFFlLGZ0KXwwLEE9QStNYXRoLmltdWwoUWUsTXQpfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bChBZSxubil8MCxtPShtPW0rTWF0aC5pbXVsKEFlLFd0KXwwKStNYXRoLmltdWwoRGUsbm4pfDAsQT1BK01hdGguaW11bChEZSxXdCl8MCxFPUUrTWF0aC5pbXVsKExlLGRuKXwwLG09KG09bStNYXRoLmltdWwoTGUsbW4pfDApK01hdGguaW11bChSZSxkbil8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KFJlLG1uKXwwO3ZhciBQYT0oaisoRT1FK01hdGguaW11bChqZSxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGplLHRuKXwwKStNYXRoLmltdWwoa2UsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoa2UsdG4pfDApKyhtPj4+MTMpfDApKyhQYT4+PjI2KXwwLFBh''@;'; put 'put ''Jj02NzEwODg2MyxFPU1hdGguaW11bChJZSxzdCksbT0obT1NYXRoLmltdWwoSWUsWnQpKStNYXRoLmltdWwoYXQsc3QpfDAsQT1NYXRoLmltdWwoYXQsWnQpLEU9RStNYXRoLmltdWwodXQsWWUpfDAsbT0obT1tK01hdGguaW11bCh1dCxUdCl8MCkrTWF0aC5pbXVsKFhlLFllKXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoWGUsVHQpfDAsRT1FK01hdGguaW11bCh2dCxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LE10KXwwKStNYXRoLmltdWwoU3QsZnQpfDAsQT1BK01hdGguaW11bChTdCxNdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LG5uKXwwLG09KG09bStNYXRoLmltdWwocnQsV3QpfDApK01hdGgu''@;'; put 'put ''aW11bChRZSxubil8MCxBPUErTWF0aC5pbXVsKFFlLFd0KXwwLEU9RStNYXRoLmltdWwoQWUsZG4pfDAsbT0obT1tK01hdGguaW11bChBZSxtbil8MCkrTWF0aC5pbXVsKERlLGRuKXwwLEE9QStNYXRoLmltdWwoRGUsbW4pfDA7dmFyIHVyPShqKyhFPUUrTWF0aC5pbXVsKExlLGZuKXwwKXww''@;'; put 'put ''KSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoTGUsdG4pfDApK01hdGguaW11bChSZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChSZSx0bil8MCkrKG0+Pj4xMyl8MCkrKHVyPj4+MjYpfDAsdXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLFllKSxtPShtPU1hdGguaW11bChJ''@;'; put 'put ''ZSxUdCkpK01hdGguaW11bChhdCxZZSl8MCxBPU1hdGguaW11bChhdCxUdCksRT1FK01hdGguaW11bCh1dCxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKHV0LE10KXwwKStNYXRoLmltdWwoWGUsZnQpfDAsQT1BK01hdGguaW11bChYZSxNdCl8MCxFPUUrTWF0aC5pbXVsKHZ0LG5uKXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwodnQsV3QpfDApK01hdGguaW11bChTdCxubil8MCxBPUErTWF0aC5pbXVsKFN0LFd0KXwwLEU9RStNYXRoLmltdWwocnQsZG4pfDAsbT0obT1tK01hdGguaW11bChydCxtbil8MCkrTWF0aC5pbXVsKFFlLGRuKXwwLEE9QStNYXRoLmltdWwoUWUsbW4pfDA7dmFyIGJhPShq''@;'; put 'put ''KyhFPUUrTWF0aC5pbXVsKEFlLGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoQWUsdG4pfDApK01hdGguaW11bChEZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChEZSx0bil8MCkrKG0+Pj4xMyl8MCkrKGJhPj4+MjYpfDAsYmEmPTY3MTA4ODYzLEU9TWF0aC5p''@;'; put 'put ''bXVsKEllLGZ0KSxtPShtPU1hdGguaW11bChJZSxNdCkpK01hdGguaW11bChhdCxmdCl8MCxBPU1hdGguaW11bChhdCxNdCksRT1FK01hdGguaW11bCh1dCxubil8MCxtPShtPW0rTWF0aC5pbXVsKHV0LFd0KXwwKStNYXRoLmltdWwoWGUsbm4pfDAsQT1BK01hdGguaW11bChYZSxXdCl8MCxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKHZ0LGRuKXwwLG09KG09bStNYXRoLmltdWwodnQsbW4pfDApK01hdGguaW11bChTdCxkbil8MCxBPUErTWF0aC5pbXVsKFN0LG1uKXwwO3ZhciBNaT0oaisoRT1FK01hdGguaW11bChydCxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHJ0LHRuKXwwKStN''@;'; put 'put ''YXRoLmltdWwoUWUsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoUWUsdG4pfDApKyhtPj4+MTMpfDApKyhNaT4+PjI2KXwwLE1pJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxubiksbT0obT1NYXRoLmltdWwoSWUsV3QpKStNYXRoLmltdWwoYXQsbm4pfDAsQT1NYXRoLmltdWwo''@;'; put 'put ''YXQsV3QpLEU9RStNYXRoLmltdWwodXQsZG4pfDAsbT0obT1tK01hdGguaW11bCh1dCxtbil8MCkrTWF0aC5pbXVsKFhlLGRuKXwwLEE9QStNYXRoLmltdWwoWGUsbW4pfDA7dmFyIHdhPShqKyhFPUUrTWF0aC5pbXVsKHZ0LGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodnQs''@;'; put 'put ''dG4pfDApK01hdGguaW11bChTdCxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChTdCx0bil8MCkrKG0+Pj4xMyl8MCkrKHdhPj4+MjYpfDAsd2EmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLGRuKSxtPShtPU1hdGguaW11bChJZSxtbikpK01hdGguaW11bChhdCxkbil8MCxBPU1h''@;'; put 'put ''dGguaW11bChhdCxtbik7dmFyIGVhPShqKyhFPUUrTWF0aC5pbXVsKHV0LGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodXQsdG4pfDApK01hdGguaW11bChYZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChYZSx0bil8MCkrKG0+Pj4xMyl8MCkrKGVhPj4+MjYp''@;'; put 'put ''fDAsZWEmPTY3MTA4ODYzO3ZhciBGcj0oaisoRT1NYXRoLmltdWwoSWUsZm4pKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKEllLHRuKSkrTWF0aC5pbXVsKGF0LGZuKXwwKSk8PDEzKXwwO3JldHVybiBqPSgoQT1NYXRoLmltdWwoYXQsdG4pKSsobT4+PjEzKXwwKSsoRnI+Pj4yNil8MCxG''@;'; put 'put ''ciY9NjcxMDg4NjMsSFswXT1jYSxIWzFdPV9pLEhbMl09dnIsSFszXT1YaSxIWzRdPVFpLEhbNV09VmksSFs2XT1laSxIWzddPXVhLEhbOF09UmksSFs5XT1EYSxIWzEwXT1oaSxIWzExXT1xaSxIWzEyXT1QYSxIWzEzXT11cixIWzE0XT1iYSxIWzE1XT1NaSxIWzE2XT13YSxIWzE3XT1lYSxI''@;'; put 'put ''WzE4XT1GciwwIT09aiYmKEhbMTldPWoseC5sZW5ndGgrKykseH07ZnVuY3Rpb24gZWUoQixnLHkpe3JldHVybihuZXcgSikubXVscChCLGcseSl9ZnVuY3Rpb24gSihCLGcpe3RoaXMueD1CLHRoaXMueT1nfU1hdGguaW11bHx8KFc9WSksdy5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oZyx5''@;'; put 'put ''KXt2YXIgeCxDPXRoaXMubGVuZ3RoK2cubGVuZ3RoO3JldHVybiB4PTEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/Vyh0aGlzLGcseSk6Qzw2Mz9ZKHRoaXMsZyx5KTpDPDEwMjQ/ZnVuY3Rpb24gcShCLGcseSl7eS5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkIubmVnYXRpdmUseS5sZW5n''@;'; put 'put ''dGg9Qi5sZW5ndGgrZy5sZW5ndGg7Zm9yKHZhciB4PTAsQz0wLFQ9MDtUPHkubGVuZ3RoLTE7VCsrKXt2YXIgSD1DO0M9MDtmb3IodmFyIGo9NjcxMDg4NjMmeCxFPU1hdGgubWluKFQsZy5sZW5ndGgtMSksbT1NYXRoLm1heCgwLFQtQi5sZW5ndGgrMSk7bTw9RTttKyspe3ZhciBzZT0oMHxC''@;'; put 'put ''LndvcmRzW1QtbV0pKigwfGcud29yZHNbbV0pLENlPTY3MTA4ODYzJnNlO2o9NjcxMDg4NjMmKENlPUNlK2p8MCksQys9KEg9KEg9SCsoc2UvNjcxMDg4NjR8MCl8MCkrKENlPj4+MjYpfDApPj4+MjYsSCY9NjcxMDg4NjN9eS53b3Jkc1tUXT1qLHg9SCxIPUN9cmV0dXJuIDAhPT14P3kud29y''@;'; put 'put ''ZHNbVF09eDp5Lmxlbmd0aC0tLHkuc3RyaXAoKX0odGhpcyxnLHkpOmVlKHRoaXMsZyx5KSx4fSxKLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT1uZXcgQXJyYXkoZykseD13LnByb3RvdHlwZS5fY291bnRCaXRzKGcpLTEsQz0wO0M8ZztDKyspeVtDXT10aGlzLnJl''@;'; put 'put ''dkJpbihDLHgsZyk7cmV0dXJuIHl9LEoucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihnLHkseCl7aWYoMD09PWd8fGc9PT14LTEpcmV0dXJuIGc7Zm9yKHZhciBDPTAsVD0wO1Q8eTtUKyspQ3w9KDEmZyk8PHktVC0xLGc+Pj0xO3JldHVybiBDfSxKLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0''@;'; put 'put ''aW9uKGcseSx4LEMsVCxIKXtmb3IodmFyIGo9MDtqPEg7aisrKUNbal09eVtnW2pdXSxUW2pdPXhbZ1tqXV19LEoucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihnLHkseCxDLFQsSCl7dGhpcy5wZXJtdXRlKEgsZyx5LHgsQyxUKTtmb3IodmFyIGo9MTtqPFQ7ajw8PTEpZm9yKHZhciBF''@;'; put 'put ''PWo8PDEsbT1NYXRoLmNvcygyKk1hdGguUEkvRSksQT1NYXRoLnNpbigyKk1hdGguUEkvRSksYWU9MDthZTxUO2FlKz1FKWZvcih2YXIgbmU9bSxzZT1BLENlPTA7Q2U8ajtDZSsrKXt2YXIgVWU9eFthZStDZV0sSmU9Q1thZStDZV0saXQ9eFthZStDZStqXSx4ZT1DW2FlK0NlK2pdLHllPW5l''@;'; put 'put ''Kml0LXNlKnhlO3hlPW5lKnhlK3NlKml0LHhbYWUrQ2VdPVVlKyhpdD15ZSksQ1thZStDZV09SmUreGUseFthZStDZStqXT1VZS1pdCxDW2FlK0NlK2pdPUplLXhlLENlIT09RSYmKHllPW0qbmUtQSpzZSxzZT1tKnNlK0EqbmUsbmU9eWUpfX0sSi5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVu''@;'; put 'put ''Y3Rpb24oZyx5KXt2YXIgeD0xfE1hdGgubWF4KHksZyksQz0xJngsVD0wO2Zvcih4PXgvMnwwO3g7eD4+Pj0xKVQrKztyZXR1cm4gMTw8VCsxK0N9LEoucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihnLHkseCl7aWYoISh4PD0xKSlmb3IodmFyIEM9MDtDPHgvMjtDKyspe3ZhciBUPWdb''@;'; put 'put ''Q107Z1tDXT1nW3gtQy0xXSxnW3gtQy0xXT1ULFQ9eVtDXSx5W0NdPS15W3gtQy0xXSx5W3gtQy0xXT0tVH19LEoucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihnLHkpe2Zvcih2YXIgeD0wLEM9MDtDPHkvMjtDKyspe3ZhciBUPTgxOTIqTWF0aC5yb3VuZChnWzIqQysxXS95KStN''@;'; put 'put ''YXRoLnJvdW5kKGdbMipDXS95KSt4O2dbQ109NjcxMDg4NjMmVCx4PVQ8NjcxMDg4NjQ/MDpULzY3MTA4ODY0fDB9cmV0dXJuIGd9LEoucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oZyx5LHgsQyl7Zm9yKHZhciBUPTAsSD0wO0g8eTtIKyspeFsyKkhdPTgxOTEmKFQrPTB8Z1tIXSks''@;'; put 'put ''eFsyKkgrMV09ODE5MSYoVD4+Pj0xMyksVD4+Pj0xMztmb3IoSD0yKnk7SDxDOysrSCl4W0hdPTA7cCgwPT09VCkscCghKC04MTkyJlQpKX0sSi5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihnKXtmb3IodmFyIHk9bmV3IEFycmF5KGcpLHg9MDt4PGc7eCsrKXlbeF09MDtyZXR1cm4geX0sSi5w''@;'; put 'put ''cm90b3R5cGUubXVscD1mdW5jdGlvbihnLHkseCl7dmFyIEM9Mip0aGlzLmd1ZXNzTGVuMTNiKGcubGVuZ3RoLHkubGVuZ3RoKSxUPXRoaXMubWFrZVJCVChDKSxIPXRoaXMuc3R1YihDKSxqPW5ldyBBcnJheShDKSxFPW5ldyBBcnJheShDKSxtPW5ldyBBcnJheShDKSxBPW5ldyBBcnJheShD''@;'; put 'put ''KSxhZT1uZXcgQXJyYXkoQyksbmU9bmV3IEFycmF5KEMpLHNlPXgud29yZHM7c2UubGVuZ3RoPUMsdGhpcy5jb252ZXJ0MTNiKGcud29yZHMsZy5sZW5ndGgsaixDKSx0aGlzLmNvbnZlcnQxM2IoeS53b3Jkcyx5Lmxlbmd0aCxBLEMpLHRoaXMudHJhbnNmb3JtKGosSCxFLG0sQyxUKSx0aGlz''@;'; put 'put ''LnRyYW5zZm9ybShBLEgsYWUsbmUsQyxUKTtmb3IodmFyIENlPTA7Q2U8QztDZSsrKXt2YXIgVWU9RVtDZV0qYWVbQ2VdLW1bQ2VdKm5lW0NlXTttW0NlXT1FW0NlXSpuZVtDZV0rbVtDZV0qYWVbQ2VdLEVbQ2VdPVVlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShFLG0sQyksdGhpcy50cmFuc2Zv''@;'; put 'put ''cm0oRSxtLHNlLEgsQyxUKSx0aGlzLmNvbmp1Z2F0ZShzZSxILEMpLHRoaXMubm9ybWFsaXplMTNiKHNlLEMpLHgubmVnYXRpdmU9Zy5uZWdhdGl2ZV55Lm5lZ2F0aXZlLHgubGVuZ3RoPWcubGVuZ3RoK3kubGVuZ3RoLHguc3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcpe3Zh''@;'; put 'put ''ciB5PW5ldyB3KG51bGwpO3JldHVybiB5LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksdGhpcy5tdWxUbyhnLHkpfSx3LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGcpe3ZhciB5PW5ldyB3KG51bGwpO3JldHVybiB5LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtn''@;'; put 'put ''Lmxlbmd0aCksZWUodGhpcyxnLHkpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oZyx0aGlzKX0sdy5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCk7Zm9yKHZhciB5PTAs''@;'; put 'put ''eD0wO3g8dGhpcy5sZW5ndGg7eCsrKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSpnLFQ9KDY3MTA4ODYzJkMpKyg2NzEwODg2MyZ5KTt5Pj49MjYseSs9Qy82NzEwODg2NHwwLHkrPVQ+Pj4yNix0aGlzLndvcmRzW3hdPTY3MTA4ODYzJlR9cmV0dXJuIDAhPT15JiYodGhpcy53b3Jkc1t4XT15''@;'; put 'put ''LHRoaXMubGVuZ3RoKyspLHRoaXMubGVuZ3RoPTA9PT1nPzE6dGhpcy5sZW5ndGgsdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGcpfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcu''@;'; put 'put ''cHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnKXt2YXIgeT1mdW5jdGlvbiBaKEIpe2Zvcih2YXIgZz1uZXcgQXJyYXkoQi5iaXRMZW5ndGgoKSkseT0wO3k8Zy5sZW5ndGg7eSsrKXt2YXIg''@;'; put 'put ''Qz15JTI2O2dbeV09KEIud29yZHNbeS8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIGd9KGcpO2lmKDA9PT15Lmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8eS5sZW5ndGgmJjA9PT15W0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzx5Lmxlbmd0aClmb3IodmFyIFQ9''@;'; put 'put ''eC5zcXIoKTtDPHkubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PXlbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgVCx5PWclMjYseD0oZy15KS8yNixDPTY3MTA4ODYzPj4+MjYt''@;'; put 'put ''eTw8MjYteTtpZigwIT09eSl7dmFyIEg9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgaj10aGlzLndvcmRzW1RdJkM7dGhpcy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1qPDx5fEgsSD1qPj4+MjYteX1IJiYodGhpcy53b3Jkc1tUXT1ILHRoaXMubGVuZ3RoKyspfWlmKDAh''@;'; put 'put ''PT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1QrKyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oZyl7cmV0''@;'; put 'put ''dXJuIHAoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGcpfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZyx5LHgpe3ZhciBDO3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKSxDPXk/KHkteSUyNikvMjY6MDt2YXIgVD1nJTI2LEg9TWF0aC5taW4oKGctVCkvMjYsdGhpcy5s''@;'; put 'put ''ZW5ndGgpLGo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1ILEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDttPEg7bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0aD1IfWlmKDAhPT1IKWlmKHRoaXMubGVuZ3RoPkgpZm9yKHRoaXMubGVuZ3RoLT1I''@;'; put 'put ''LG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStIXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIGFlPTB8dGhpcy53b3Jkc1ttXTt0''@;'; put 'put ''aGlzLndvcmRzW21dPUE8PDI2LVR8YWU+Pj5ULEE9YWUman1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9u''@;'; put 'put ''KGcseSx4KXtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oZyx5LHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oZyl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCku''@;'; put 'put ''aXVzaGxuKGcpfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oZyl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGcpfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihnKXtwKCJu''@;'; put 'put ''dW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHk9ZyUyNix4PShnLXkpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jkc1t4XSYxPDx5KSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHk9ZyUyNix4''@;'; put 'put ''PShnLXkpLzI2O3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09eSYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT15JiYodGhpcy53b3Jk''@;'; put 'put ''c1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj55PDx5KSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihnKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIm51bWJl''@;'; put 'put ''ciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpLGc8MD90aGlzLmlzdWJuKC1nKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPGc/KHRoaXMud29yZHNbMF09Zy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMu''@;'; put 'put ''bmVnYXRpdmU9MCx0aGlzLmlzdWJuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihnKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKGcpe3RoaXMud29yZHNbMF0rPWc7Zm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t5XT49NjcxMDg4NjQ7eSsr''@;'; put 'put ''KXRoaXMud29yZHNbeV0tPTY3MTA4ODY0LHk9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbeSsxXT0xOnRoaXMud29yZHNbeSsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCx5KzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGcpe2lmKHAo''@;'; put 'put ''Im51bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpLGc8MClyZXR1cm4gdGhpcy5pYWRkbigtZyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWcsMT09PXRo''@;'; put 'put ''aXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3ldPDA7eSsrKXRoaXMud29yZHNbeV0rPTY3MTA4ODY0LHRoaXMud29yZHNbeSsxXS09''@;'; put 'put ''MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oZyl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihnKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihnLHkseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKGcubGVuZ3RoK3gpO3ZhciBI''@;'; put 'put ''LGo9MDtmb3IoVD0wO1Q8Zy5sZW5ndGg7VCsrKXtIPSgwfHRoaXMud29yZHNbVCt4XSkrajt2YXIgRT0oMHxnLndvcmRzW1RdKSp5O2o9KChILT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIfWZvcig7VDx0aGlzLmxlbmd0aC14O1Qr''@;'; put 'put ''KylqPShIPSgwfHRoaXMud29yZHNbVCt4XSkraik+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIO2lmKDA9PT1qKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKHAoLTE9PT1qKSxqPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKWo9KEg9LSgwfHRoaXMud29yZHNbVF0pK2opPj4yNix0aGlz''@;'; put 'put ''LndvcmRzW1RdPTY3MTA4ODYzJkg7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKGcseSl7dmFyIHgsQz10aGlzLmNsb25lKCksVD1nLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0''@;'; put 'put ''cyhIKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksSD0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5sZW5ndGg7aWYoIm1vZCIhPT15KXsobT1uZXcgdyhudWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7''@;'; put 'put ''QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBhZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09YWUubmVnYXRpdmUmJihDPWFlLG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFyIG5lPUUtMTtuZT49MDtuZS0tKXt2YXIgc2U9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxl''@;'; put 'put ''bmd0aCtuZV0pKygwfEMud29yZHNbVC5sZW5ndGgrbmUtMV0pO2ZvcihzZT1NYXRoLm1pbihzZS9IfDAsNjcxMDg4NjMpLEMuX2lzaGxuc3VibXVsKFQsc2UsbmUpOzAhPT1DLm5lZ2F0aXZlOylzZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsbmUpLEMuaXNaZXJvKCl8fChD''@;'; put 'put ''Lm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1tuZV09c2UpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09eSYmMCE9PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihnLHkseCl7cmV0dXJuIHAoIWcuaXNa''@;'; put 'put ''ZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChnLHkpLCJtb2QiIT09eSYmKEM9SC5kaXYubmVnKCkpLCJkaXYiIT09eSYmKFQ9SC5tb2QubmVnKCkseCYm''@;'; put 'put ''MCE9PVQubmVnYXRpdmUmJlQuaWFkZChnKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlPyhIPXRoaXMuZGl2bW9kKGcubmVnKCkseSksIm1vZCIhPT15JiYoQz1ILmRpdi5uZWcoKSkse2RpdjpDLG1vZDpILm1vZH0pOnRoaXMubmVnYXRpdmUmZy5u''@;'; put 'put ''ZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChnLm5lZygpLHkpLCJkaXYiIT09eSYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaXN1YihnKSkse2RpdjpILmRpdixtb2Q6VH0pOmcubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChnKTwwP3tkaXY6bmV3IHcoMCks''@;'; put 'put ''bW9kOnRoaXN9OjE9PT1nLmxlbmd0aD8iZGl2Ij09PXk/e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09eT97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kbihnLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlz''@;'; put 'put ''Lm1vZG4oZy53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGcseSk7dmFyIEMsVCxIfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJt''@;'; put 'put ''b2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oZyl7dmFyIHk9dGhpcy5kaXZtb2QoZyk7aWYoeS5tb2QuaXNaZXJvKCkpcmV0dXJuIHkuZGl2O3Zh''@;'; put 'put ''ciB4PTAhPT15LmRpdi5uZWdhdGl2ZT95Lm1vZC5pc3ViKGcpOnkubW9kLEM9Zy51c2hybigxKSxUPWcuYW5kbG4oMSksSD14LmNtcChDKTtyZXR1cm4gSDwwfHwxPT09VCYmMD09PUg/eS5kaXY6MCE9PXkuZGl2Lm5lZ2F0aXZlP3kuZGl2LmlzdWJuKDEpOnkuZGl2LmlhZGRuKDEpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGcpe3AoZzw9NjcxMDg4NjMpO2Zvcih2YXIgeT0oMTw8MjYpJWcseD0wLEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl4PSh5KngrKDB8dGhpcy53b3Jkc1tDXSkpJWc7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGcpe3AoZzw9Njcx''@;'; put 'put ''MDg4NjMpO2Zvcih2YXIgeT0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqeTt0aGlzLndvcmRzW3hdPUMvZ3wwLHk9QyVnfXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRo''@;'; put 'put ''aXMuY2xvbmUoKS5pZGl2bihnKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlKSxwKCFnLmlzWmVybygpKTt2YXIgeT10aGlzLHg9Zy5jbG9uZSgpO3k9MCE9PXkubmVnYXRpdmU/eS51bW9kKGcpOnkuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1u''@;'; put 'put ''ZXcgdygwKSxIPW5ldyB3KDApLGo9bmV3IHcoMSksRT0wO3kuaXNFdmVuKCkmJnguaXNFdmVuKCk7KXkuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9eS5jbG9uZSgpOyF5LmlzWmVybygpOyl7Zm9yKHZhciBhZT0wLG5lPTE7ISh5LndvcmRzWzBdJm5l''@;'; put 'put ''KSYmYWU8MjY7KythZSxuZTw8PTEpO2lmKGFlPjApZm9yKHkuaXVzaHJuKGFlKTthZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkpJiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBzZT0wLENlPTE7ISh4LndvcmRzWzBdJkNlKSYmc2U8''@;'; put 'put ''MjY7KytzZSxDZTw8PTEpO2lmKHNlPjApZm9yKHguaXVzaHJuKHNlKTtzZS0tID4wOykoSC5pc09kZCgpfHxqLmlzT2RkKCkpJiYoSC5pYWRkKG0pLGouaXN1YihBKSksSC5pdXNocm4oMSksai5pdXNocm4oMSk7eS5jbXAoeCk+PTA/KHkuaXN1Yih4KSxDLmlzdWIoSCksVC5pc3ViKGopKToo''@;'; put 'put ''eC5pc3ViKHkpLEguaXN1YihDKSxqLmlzdWIoVCkpfXJldHVybnthOkgsYjpqLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlKSxwKCFnLmlzWmVybygpKTt2YXIgYWUseT10aGlzLHg9Zy5jbG9uZSgpO3k9MCE9PXkubmVn''@;'; put 'put ''YXRpdmU/eS51bW9kKGcpOnkuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPXguY2xvbmUoKTt5LmNtcG4oMSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIGo9MCxFPTE7ISh5LndvcmRzWzBdJkUpJiZqPDI2OysraixFPDw9MSk7aWYoaj4wKWZvcih5Lml1c2hybihq''@;'; put 'put ''KTtqLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKEgpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoSCksVC5pdXNocm4oMSk7eS5jbXAoeCk+''@;'; put 'put ''PTA/KHkuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoeSksVC5pc3ViKEMpKX1yZXR1cm4oYWU9MD09PXkuY21wbigxKT9DOlQpLmNtcG4oMCk8MCYmYWUuaWFkZChnKSxhZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGcpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGcuYWJzKCk7aWYo''@;'; put 'put ''Zy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgeT10aGlzLmNsb25lKCkseD1nLmNsb25lKCk7eS5uZWdhdGl2ZT0wLHgubmVnYXRpdmU9MDtmb3IodmFyIEM9MDt5LmlzRXZlbigpJiZ4LmlzRXZlbigpO0MrKyl5Lml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7eS5p''@;'; put 'put ''c0V2ZW4oKTspeS5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD15LmNtcCh4KTtpZihUPDApe3ZhciBIPXk7eT14LHg9SH1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBuKDEpKWJyZWFrO3kuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBl''@;'; put 'put ''Lmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZWdjZChnKS5hLnVtb2QoZyl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5hbmRsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZnfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyk7dmFyIHk9ZyUyNix4PShnLXkpLzI2LEM9MTw8eTtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhw''@;'; put 'put ''YW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLEg9eDswIT09VCYmSDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPTB8dGhpcy53b3Jkc1tIXTtUPShqKz1UKT4+PjI2LHRoaXMud29yZHNbSF09aiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tIXT1U''@;'; put 'put ''LHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGcpe3ZhciB4LHk9ZzwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYheSlyZXR1''@;'; put 'put ''cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmeSlyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXt5JiYoZz0tZykscChnPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09Zz8wOkM8Zz8tMToxfXJl''@;'; put 'put ''dHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihnKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiAxO3ZhciB5PXRoaXMudWNt''@;'; put 'put ''cChnKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteTp5fSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGcpe2lmKHRoaXMubGVuZ3RoPmcubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGcubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgeT0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0w''@;'; put 'put ''O3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxnLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/eT0tMTpDPlQmJih5PTEpO2JyZWFrfX1yZXR1cm4geX0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlv''@;'; put 'put ''bihnKXtyZXR1cm4gMT09PXRoaXMuY21wKGcpfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihnKXtyZXR1''@;'; put 'put ''cm4tMT09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcChnKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMu''@;'; put 'put ''Y21wKGcpPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXAoZyl9LHcucmVkPWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgTWUoZyl9LHcucHJvdG90eXBlLnRv''@;'; put 'put ''UmVkPWZ1bmN0aW9uKGcpe3JldHVybiBwKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHAoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGcpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGcpe3Jl''@;'; put 'put ''dHVybiB0aGlzLnJlZD1nLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBwKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGcpfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oZyl7''@;'; put 'put ''cmV0dXJuIHAodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMi''@;'; put 'put ''KSx0aGlzLnJlZC5pYWRkKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGcp''@;'; put 'put ''e3JldHVybiBwKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJz''@;'; put 'put ''IiksdGhpcy5yZWQuc2hsKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQubXVsKHRoaXMsZyl9LHcucHJv''@;'; put 'put ''dG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLmltdWwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIHAodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5''@;'; put 'put ''IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3Zl''@;'; put 'put ''cmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9''@;'; put 'put ''LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oZyl7cmV0''@;'; put 'put ''dXJuIHAodGhpcy5yZWQmJiFnLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxnKX07dmFyIHJlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoQixnKXt0aGlzLm5h''@;'; put 'put ''bWU9Qix0aGlzLnA9bmV3IHcoZywxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHVlKCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBnZSgpe2llLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rp''@;'; put 'put ''b24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFRlKCl7aWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZm''@;'; put 'put ''ZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBNZShCKXtpZigic3RyaW5nIj09dHlwZW9mIEIpe3ZhciBnPXcuX3ByaW1lKEIpO3RoaXMubT1nLnAsdGhpcy5wcmltZT1nfWVsc2UgcChCLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPUIs''@;'; put 'put ''dGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIFplKEIpe01lLmNhbGwodGhpcyxCKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlz''@;'; put 'put ''LnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1''@;'; put 'put ''Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IHcobnVsbCk7cmV0dXJuIGcud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxnfSxpZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihnKXt2YXIgeCx5PWc7ZG97dGhpcy5zcGxp''@;'; put 'put ''dCh5LHRoaXMudG1wKSx4PSh5PSh5PXRoaXMuaW11bEsoeSkpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMubik7dmFyIEM9eDx0aGlzLm4/LTE6eS51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1DPyh5LndvcmRzWzBdPTAseS5sZW5ndGg9MSk6Qz4wP3kuaXN1Yih0''@;'; put 'put ''aGlzLnApOnZvaWQgMCE9PXkuc3RyaXA/eS5zdHJpcCgpOnkuX3N0cmlwKCkseX0saWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcseSl7Zy5pdXNocm4odGhpcy5uLDAseSl9LGllLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pbXVsKHRoaXMuayl9LFYodWUsaWUp''@;'; put 'put ''LHVlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLHkpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4oZy5sZW5ndGgsOSksVD0wO1Q8QztUKyspeS53b3Jkc1tUXT1nLndvcmRzW1RdO2lmKHkubGVuZ3RoPUMsZy5sZW5ndGg8PTkpcmV0dXJuIGcud29yZHNbMF09MCx2b2lkKGcubGVu''@;'; put 'put ''Z3RoPTEpO3ZhciBIPWcud29yZHNbOV07Zm9yKHkud29yZHNbeS5sZW5ndGgrK109SCZ4LFQ9MTA7VDxnLmxlbmd0aDtUKyspe3ZhciBqPTB8Zy53b3Jkc1tUXTtnLndvcmRzW1QtMTBdPShqJngpPDw0fEg+Pj4yMixIPWp9Zy53b3Jkc1tULTEwXT1IPj4+PTIyLGcubGVuZ3RoLT0wPT09SCYm''@;'; put 'put ''Zy5sZW5ndGg+MTA/MTA6OX0sdWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2cud29yZHNbZy5sZW5ndGhdPTAsZy53b3Jkc1tnLmxlbmd0aCsxXT0wLGcubGVuZ3RoKz0yO2Zvcih2YXIgeT0wLHg9MDt4PGcubGVuZ3RoO3grKyl7dmFyIEM9MHxnLndvcmRzW3hdO2cud29yZHNbeF09''@;'; put 'put ''NjcxMDg4NjMmKHkrPTk3NypDKSx5PTY0KkMrKHkvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiYoZy5sZW5ndGgtLSwwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmZy5sZW5ndGgtLSksZ30sVihnZSxpZSksVihfZSxpZSksVihUZSxpZSksVGUucHJvdG90eXBl''@;'; put 'put ''LmltdWxLPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT0wLHg9MDt4PGcubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8Zy53b3Jkc1t4XSkreSxUPTY3MTA4ODYzJkM7Qz4+Pj0yNixnLndvcmRzW3hdPVQseT1DfXJldHVybiAwIT09eSYmKGcud29yZHNbZy5sZW5ndGgrK109eSksZ30sdy5fcHJpbWU9''@;'; put 'put ''ZnVuY3Rpb24oZyl7aWYocmVbZ10pcmV0dXJuIHJlW2ddO3ZhciB5O2lmKCJrMjU2Ij09PWcpeT1uZXcgdWU7ZWxzZSBpZigicDIyNCI9PT1nKXk9bmV3IGdlO2Vsc2UgaWYoInAxOTIiPT09Zyl5PW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09Zyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24g''@;'; put 'put ''cHJpbWUgIitnKTt5PW5ldyBUZX1yZXR1cm4gcmVbZ109eSx5fSxNZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwKGcucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9''@;'; put 'put ''LE1lLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihnLHkpe3AoIShnLm5lZ2F0aXZlfHkubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAoZy5yZWQmJmcucmVkPT09eS5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sTWUucHJvdG90''@;'; put 'put ''eXBlLmltb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGcpLl9mb3JjZVJlZCh0aGlzKTpnLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LE1lLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNaZXJvKCk/Zy5jbG9uZSgp''@;'; put 'put ''OnRoaXMubS5zdWIoZykuX2ZvcmNlUmVkKHRoaXMpfSxNZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuYWRkKHkpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sTWUucHJvdG90''@;'; put 'put ''eXBlLmlhZGQ9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5pYWRkKHkpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxNZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuc3ViKHkp''@;'; put 'put ''O3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LE1lLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuaXN1Yih5KTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LE1lLnBy''@;'; put 'put ''b3RvdHlwZS5zaGw9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShnKSx0aGlzLmltb2QoZy51c2hsbih5KSl9LE1lLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyx5KSx0aGlzLmltb2QoZy5pbXVsKHkpKX0sTWUucHJvdG90eXBl''@;'; put 'put ''Lm11bD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcseSksdGhpcy5pbW9kKGcubXVsKHkpKX0sTWUucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW11bChnLGcuY2xvbmUoKSl9LE1lLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRo''@;'; put 'put ''aXMubXVsKGcsZyl9LE1lLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGcpe2lmKGcuaXNaZXJvKCkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgeT10aGlzLm0uYW5kbG4oMyk7aWYocCh5JTI9PTEpLDM9PT15KXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMu''@;'; put 'put ''cG93KGcseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hybigxKTtwKCFDLmlzWmVybygpKTt2YXIgSD1uZXcgdygxKS50b1JlZCh0aGlzKSxqPUgucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSks''@;'; put 'put ''bT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChqKTspbS5yZWRJQWRkKGopO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMpLGFlPXRoaXMucG93KGcsQy5hZGRuKDEpLml1c2hybigxKSksbmU9dGhpcy5wb3coZyxD''@;'; put 'put ''KSxzZT1UOzAhPT1uZS5jbXAoSCk7KXtmb3IodmFyIENlPW5lLFVlPTA7MCE9PUNlLmNtcChIKTtVZSsrKUNlPUNlLnJlZFNxcigpO3AoVWU8c2UpO3ZhciBKZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hsbihzZS1VZS0xKSk7YWU9YWUucmVkTXVsKEplKSxBPUplLnJlZFNxcigpLG5lPW5l''@;'; put 'put ''LnJlZE11bChBKSxzZT1VZX1yZXR1cm4gYWV9LE1lLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3ZhciB5PWcuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT15Lm5lZ2F0aXZlPyh5Lm5lZ2F0aXZlPTAsdGhpcy5pbW9kKHkpLnJlZE5lZygpKTp0aGlzLmltb2QoeSl9LE1lLnByb3RvdHlw''@;'; put 'put ''ZS5wb3c9ZnVuY3Rpb24oZyx5KXtpZih5LmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09eS5jbXBuKDEpKXJldHVybiBnLmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09Zztmb3IodmFyIFQ9MjtUPEMu''@;'; put 'put ''bGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxnKTt2YXIgSD1DWzBdLGo9MCxFPTAsbT15LmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bSYmKG09MjYpLFQ9eS5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9yKHZhciBBPXkud29yZHNbVF0sYWU9bS0xO2FlPj0wO2FlLS0pe3ZhciBuZT1BPj5h''@;'; put 'put ''ZSYxO0ghPT1DWzBdJiYoSD10aGlzLnNxcihIKSksMCE9PW5lfHwwIT09aj8oajw8PTEsanw9bmUsKDQ9PSsrRXx8MD09PVQmJjA9PT1hZSkmJihIPXRoaXMubXVsKEgsQ1tqXSksRT0wLGo9MCkpOkU9MH1tPTI2fXJldHVybiBIfSxNZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcp''@;'; put 'put ''e3ZhciB5PWcudW1vZCh0aGlzLm0pO3JldHVybiB5PT09Zz95LmNsb25lKCk6eX0sTWUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciB5PWcuY2xvbmUoKTtyZXR1cm4geS5yZWQ9bnVsbCx5fSx3Lm1vbnQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBaZShnKX0sVihaZSxN''@;'; put 'put ''ZSksWmUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcudXNobG4odGhpcy5zaGlmdCkpfSxaZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIHk9dGhpcy5pbW9kKGcubXVsKHRoaXMucmludikpO3JldHVybiB5LnJlZD1udWxs''@;'; put 'put ''LHl9LFplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcseSl7aWYoZy5pc1plcm8oKXx8eS5pc1plcm8oKSlyZXR1cm4gZy53b3Jkc1swXT0wLGcubGVuZ3RoPTEsZzt2YXIgeD1nLmltdWwoeSksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0''@;'; put 'put ''KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0sWmUucHJvdG90eXBlLm11bD1mdW5jdGlv''@;'; put 'put ''bihnLHkpe2lmKGcuaXNaZXJvKCl8fHkuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1nLm11bCh5KSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hy''@;'; put 'put ''bih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxaZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcuX2ludm1w''@;'; put 'put ''KHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShjZT1iLm5tZChjZSksdGhpcyl9LDM4NTk1OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBwPXt9O3BbYig1ODAxMikoInRvU3RyaW5nVGFnIildPSJ6IixjZS5leHBvcnRzPSJbb2JqZWN0IHpdIj09PVN0cmluZyhw''@;'; put 'put ''KX0sMzkwOTI6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigyODM2NyksXz1iKDMxOTUwKSxwPWIoNzE3MSksVj1iKDY0NTUwKSx3PWIoNzA4MjQpO0koe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwfSx7YXQ6ZnVuY3Rpb24oRil7dmFyIFI9Xyh0aGlzKSx6PXAoUiksTj1WKEYpLE89''@;'; put 'put ''Tj49MD9OOnorTjtyZXR1cm4gTzwwfHxPPj16P3ZvaWQgMDpSW09dfX0pLHcoImF0Iil9LDM5MTE2OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNjgzMzIpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oXyxwKXtyZXR1cm4gdm9pZCAwPT09Xz9hcmd1bWVudHMubGVuZ3RoPDI/IiI6cDpJ''@;'; put 'put ''KF8pfX0sMzkyMDY6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0NjM4NyksXz1iKDY3Mjc3KSxwPVR5cGVFcnJvcixWPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Isdz1JJiYhZnVuY3Rpb24oKXtpZih2b2lkIDAhPT10aGlzKXJldHVybiEwO3RyeXtPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoW10sImxlbmd0aCIse3dyaXRhYmxlOiExfSkubGVuZ3RoPTF9Y2F0Y2goUCl7cmV0dXJuIFAgaW5zdGFuY2VvZiBUeXBlRXJyb3J9fSgpO2NlLmV4cG9ydHM9dz9mdW5jdGlvbihQLEYpe2lmKF8oUCkmJiFWKFAsImxlbmd0aCIpLndyaXRhYmxlKXRocm93IG5ldyBwKCJD''@;'; put 'put ''YW5ub3Qgc2V0IHJlYWQgb25seSAubGVuZ3RoIik7cmV0dXJuIFAubGVuZ3RoPUZ9OmZ1bmN0aW9uKFAsRil7cmV0dXJuIFAubGVuZ3RoPUZ9fSwzOTIxMDpjZT0+e2Z1bmN0aW9uIFgoYixJKXtpZighYil0aHJvdyBuZXcgRXJyb3IoSXx8IkFzc2VydGlvbiBmYWlsZWQiKX1jZS5leHBvcnRz''@;'; put 'put ''PVgsWC5lcXVhbD1mdW5jdGlvbihJLF8scCl7aWYoSSE9Xyl0aHJvdyBuZXcgRXJyb3IocHx8IkFzc2VydGlvbiBmYWlsZWQ6ICIrSSsiICE9ICIrXyl9fSwzOTU5NTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDI4MzY3KSxfPWIoNDY5MjYpLHA9YigzMDc4NyksVj1iKDMxNDgz''@;'; put 'put ''KSx3PWIoMTEwOCksUD1iKDc1NDI0KSxGPWIoNjY1NDIpLHo9Yig0MTI1MikoImV2ZXJ5IixUeXBlRXJyb3IpO0koe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOnp9LHtldmVyeTpmdW5jdGlvbihPKXt3KHRoaXMpO3RyeXtWKE8pfWNhdGNoKFkpe0YodGhpcywi''@;'; put 'put ''dGhyb3ciLFkpfWlmKHopcmV0dXJuIF8oeix0aGlzLE8pO3ZhciBLPVAodGhpcyksWj0wO3JldHVybiFwKEssZnVuY3Rpb24oWSxXKXtpZighTyhZLForKykpcmV0dXJuIFcoKX0se0lTX1JFQ09SRDohMCxJTlRFUlJVUFRFRDohMH0pLnN0b3BwZWR9fSl9LDM5NzcwOmZ1bmN0aW9uKGNlLFgs''@;'; put 'put ''Yil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiamEiLHtlcmFzOlt7c2luY2U6IjIwMTktMDUtMDEiLG9mZnNldDoxLG5hbWU6Ilx1NGVlNFx1NTQ4YyIsbmFycm93OiJcdTMyZmYiLGFiYnI6IlIifSx7c2luY2U6IjE5ODktMDEtMDgiLHVudGlsOiIyMDE5LTA0''@;'; put 'put ''LTMwIixvZmZzZXQ6MSxuYW1lOiJcdTVlNzNcdTYyMTAiLG5hcnJvdzoiXHUzMzdiIixhYmJyOiJIIn0se3NpbmNlOiIxOTI2LTEyLTI1Iix1bnRpbDoiMTk4OS0wMS0wNyIsb2Zmc2V0OjEsbmFtZToiXHU2NjJkXHU1NDhjIixuYXJyb3c6Ilx1MzM3YyIsYWJicjoiUyJ9LHtzaW5jZToiMTkx''@;'; put 'put ''Mi0wNy0zMCIsdW50aWw6IjE5MjYtMTItMjQiLG9mZnNldDoxLG5hbWU6Ilx1NTkyN1x1NmI2MyIsbmFycm93OiJcdTMzN2QiLGFiYnI6IlQifSx7c2luY2U6IjE4NzMtMDEtMDEiLHVudGlsOiIxOTEyLTA3LTI5IixvZmZzZXQ6NixuYW1lOiJcdTY2MGVcdTZjYmIiLG5hcnJvdzoiXHUzMzdl''@;'; put 'put ''IixhYmJyOiJNIn0se3NpbmNlOiIwMDAxLTAxLTAxIix1bnRpbDoiMTg3My0xMi0zMSIsb2Zmc2V0OjEsbmFtZToiXHU4OTdmXHU2NmE2IixuYXJyb3c6IkFEIixhYmJyOiJBRCJ9LHtzaW5jZToiMDAwMC0xMi0zMSIsdW50aWw6LTEvMCxvZmZzZXQ6MSxuYW1lOiJcdTdkMDBcdTUxNDNcdTUy''@;'; put 'put ''NGQiLG5hcnJvdzoiQkMiLGFiYnI6IkJDIn1dLGVyYVllYXJPcmRpbmFsUmVnZXg6LyhcdTUxNDN8XGQrKVx1NWU3NC8sZXJhWWVhck9yZGluYWxQYXJzZTpmdW5jdGlvbihwLFYpe3JldHVybiJcdTUxNDMiPT09VlsxXT8xOnBhcnNlSW50KFZbMV18fHAsMTApfSxtb250aHM6IjFcdTY3MDhf''@;'; put 'put ''Mlx1NjcwOF8zXHU2NzA4XzRcdTY3MDhfNVx1NjcwOF82XHU2NzA4XzdcdTY3MDhfOFx1NjcwOF85XHU2NzA4XzEwXHU2NzA4XzExXHU2NzA4XzEyXHU2NzA4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiIxXHU2NzA4XzJcdTY3MDhfM1x1NjcwOF80XHU2NzA4XzVcdTY3MDhfNlx1NjcwOF83''@;'; put 'put ''XHU2NzA4XzhcdTY3MDhfOVx1NjcwOF8xMFx1NjcwOF8xMVx1NjcwOF8xMlx1NjcwOCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHU2NWU1XHU2NmRjXHU2NWU1X1x1NjcwOFx1NjZkY1x1NjVlNV9cdTcwNmJcdTY2ZGNcdTY1ZTVfXHU2YzM0XHU2NmRjXHU2NWU1X1x1NjcyOFx1NjZkY1x1NjVl''@;'; put 'put ''NV9cdTkxZDFcdTY2ZGNcdTY1ZTVfXHU1NzFmXHU2NmRjXHU2NWU1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1NjVlNV9cdTY3MDhfXHU3MDZiX1x1NmMzNF9cdTY3MjhfXHU5MWQxX1x1NTcxZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHU2NWU1X1x1NjcwOF9cdTcwNmJfXHU2''@;'; put 'put ''YzM0X1x1NjcyOF9cdTkxZDFfXHU1NzFmIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVkvTU0vREQiLExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixMTExM''@;'; put 'put ''OiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgZGRkZCBISDptbSIsbDoiWVlZWS9NTS9ERCIsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0iLGxsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNShkZGQpIEhIOm1tIn0s''@;'; put 'put ''bWVyaWRpZW1QYXJzZTovXHU1MzQ4XHU1MjRkfFx1NTM0OFx1NWY4Yy9pLGlzUE06ZnVuY3Rpb24ocCl7cmV0dXJuIlx1NTM0OFx1NWY4YyI9PT1wfSxtZXJpZGllbTpmdW5jdGlvbihwLFYsdyl7cmV0dXJuIHA8MTI/Ilx1NTM0OFx1NTI0ZCI6Ilx1NTM0OFx1NWY4YyJ9LGNhbGVuZGFyOntz''@;'; put 'put ''YW1lRGF5OiJbXHU0ZWNhXHU2NWU1XSBMVCIsbmV4dERheToiW1x1NjYwZVx1NjVlNV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKHApe3JldHVybiBwLndlZWsoKSE9PXRoaXMud2VlaygpPyJbXHU2NzY1XHU5MDMxXWRkZGQgTFQiOiJkZGRkIExUIn0sbGFzdERheToiW1x1NjYyOFx1NjVlNV0g''@;'; put 'put ''TFQiLGxhc3RXZWVrOmZ1bmN0aW9uKHApe3JldHVybiB0aGlzLndlZWsoKSE9PXAud2VlaygpPyJbXHU1MTQ4XHU5MDMxXWRkZGQgTFQiOiJkZGRkIExUIn0sc2FtZUVsc2U6IkwifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHU2NWU1LyxvcmRpbmFsOmZ1bmN0aW9uKHAsVil7''@;'; put 'put ''c3dpdGNoKFYpe2Nhc2UieSI6cmV0dXJuIDE9PT1wPyJcdTUxNDNcdTVlNzQiOnArIlx1NWU3NCI7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gcCsiXHU2NWU1IjtkZWZhdWx0OnJldHVybiBwfX0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHU1ZjhjIixwYXN0OiIlc1x1NTI0''@;'; put 'put ''ZCIsczoiXHU2NTcwXHU3OWQyIixzczoiJWRcdTc5ZDIiLG06IjFcdTUyMDYiLG1tOiIlZFx1NTIwNiIsaDoiMVx1NjY0Mlx1OTU5MyIsaGg6IiVkXHU2NjQyXHU5NTkzIixkOiIxXHU2NWU1IixkZDoiJWRcdTY1ZTUiLE06IjFcdTMwZjZcdTY3MDgiLE1NOiIlZFx1MzBmNlx1NjcwOCIseToi''@;'; put 'put ''MVx1NWU3NCIseXk6IiVkXHU1ZTc0In19KX0oYig5NzU4NikpfSwzOTc5OTooY2UsWCxiKT0+e3ZhciBJPWIoMzI0NyksXz1iKDcxNTQ5KSxwPWIoNzE5OTMpLFY9YigyNzA1NCkuQnVmZmVyLHc9eyJkZXMtZWRlMy1jYmMiOl8uQ0JDLmluc3RhbnRpYXRlKF8uRURFKSwiZGVzLWVkZTMiOl8u''@;'; put 'put ''RURFLCJkZXMtZWRlLWNiYyI6Xy5DQkMuaW5zdGFudGlhdGUoXy5FREUpLCJkZXMtZWRlIjpfLkVERSwiZGVzLWNiYyI6Xy5DQkMuaW5zdGFudGlhdGUoXy5ERVMpLCJkZXMtZWNiIjpfLkRFU307ZnVuY3Rpb24gUChGKXtJLmNhbGwodGhpcyk7dmFyIE4sUj1GLm1vZGUudG9Mb3dlckNhc2Uo''@;'; put 'put ''KSx6PXdbUl07Tj1GLmRlY3J5cHQ/ImRlY3J5cHQiOiJlbmNyeXB0Ijt2YXIgTz1GLmtleTtWLmlzQnVmZmVyKE8pfHwoTz1WLmZyb20oTykpLCgiZGVzLWVkZSI9PT1SfHwiZGVzLWVkZS1jYmMiPT09UikmJihPPVYuY29uY2F0KFtPLE8uc2xpY2UoMCw4KV0pKTt2YXIgSz1GLml2O1YuaXNC''@;'; put 'put ''dWZmZXIoSyl8fChLPVYuZnJvbShLKSksdGhpcy5fZGVzPXouY3JlYXRlKHtrZXk6TyxpdjpLLHR5cGU6Tn0pfXcuZGVzPXdbImRlcy1jYmMiXSx3LmRlczM9d1siZGVzLWVkZTMtY2JjIl0sY2UuZXhwb3J0cz1QLHAoUCxJKSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEYpe3JldHVy''@;'; put 'put ''biBWLmZyb20odGhpcy5fZGVzLnVwZGF0ZShGKSl9LFAucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3JldHVybiBWLmZyb20odGhpcy5fZGVzLmZpbmFsKCkpfX0sNDAyMjA6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig3NTE1NyksXz1GdW5jdGlvbi5wcm90b3R5cGUscD1f''@;'; put 'put ''LmFwcGx5LFY9Xy5jYWxsO2NlLmV4cG9ydHM9Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0LmFwcGx5fHwoST9WLmJpbmQocCk6ZnVuY3Rpb24oKXtyZXR1cm4gVi5hcHBseShwLGFyZ3VtZW50cyl9KX0sNDA0ODQ6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig4ODcy''@;'; put 'put ''MyksXz1iKDMxMzYpLHA9Xy5hc3NlcnQ7ZnVuY3Rpb24gVih6LE4pe2lmKHogaW5zdGFuY2VvZiBWKXJldHVybiB6O3RoaXMuX2ltcG9ydERFUih6LE4pfHwocCh6LnImJnoucywiU2lnbmF0dXJlIHdpdGhvdXQgciBvciBzIiksdGhpcy5yPW5ldyBJKHouciwxNiksdGhpcy5zPW5ldyBJKHou''@;'; put 'put ''cywxNiksdGhpcy5yZWNvdmVyeVBhcmFtPXZvaWQgMD09PXoucmVjb3ZlcnlQYXJhbT9udWxsOnoucmVjb3ZlcnlQYXJhbSl9ZnVuY3Rpb24gdygpe3RoaXMucGxhY2U9MH1mdW5jdGlvbiBQKHosTil7dmFyIE89eltOLnBsYWNlKytdO2lmKCEoMTI4Jk8pKXJldHVybiBPO3ZhciBLPTE1Jk87''@;'; put 'put ''aWYoMD09PUt8fEs+NHx8MD09PXpbTi5wbGFjZV0pcmV0dXJuITE7Zm9yKHZhciBaPTAsWT0wLFc9Ti5wbGFjZTtZPEs7WSsrLFcrKylaPDw9OCxafD16W1ddLFo+Pj49MDtyZXR1cm4hKFo8PTEyNykmJihOLnBsYWNlPVcsWil9ZnVuY3Rpb24gRih6KXtmb3IodmFyIE49MCxPPXoubGVuZ3Ro''@;'; put 'put ''LTE7IXpbTl0mJiEoMTI4JnpbTisxXSkmJk48TzspTisrO3JldHVybiAwPT09Tj96Onouc2xpY2UoTil9ZnVuY3Rpb24gUih6LE4pe2lmKE48MTI4KXoucHVzaChOKTtlbHNle3ZhciBPPTErKE1hdGgubG9nKE4pL01hdGguTE4yPj4+Myk7Zm9yKHoucHVzaCgxMjh8Tyk7LS1POyl6LnB1c2go''@;'; put 'put ''Tj4+PihPPDwzKSYyNTUpO3oucHVzaChOKX19Y2UuZXhwb3J0cz1WLFYucHJvdG90eXBlLl9pbXBvcnRERVI9ZnVuY3Rpb24oTixPKXtOPV8udG9BcnJheShOLE8pO3ZhciBLPW5ldyB3O2lmKDQ4IT09TltLLnBsYWNlKytdKXJldHVybiExO3ZhciBaPVAoTixLKTtpZighMT09PVp8fForSy5w''@;'; put 'put ''bGFjZSE9PU4ubGVuZ3RofHwyIT09TltLLnBsYWNlKytdKXJldHVybiExO3ZhciBZPVAoTixLKTtpZighMT09PVl8fDEyOCZOW0sucGxhY2VdKXJldHVybiExO3ZhciBXPU4uc2xpY2UoSy5wbGFjZSxZK0sucGxhY2UpO2lmKEsucGxhY2UrPVksMiE9PU5bSy5wbGFjZSsrXSlyZXR1cm4hMTt2''@;'; put 'put ''YXIgcT1QKE4sSyk7aWYoITE9PT1xfHxOLmxlbmd0aCE9PXErSy5wbGFjZXx8MTI4Jk5bSy5wbGFjZV0pcmV0dXJuITE7dmFyIGVlPU4uc2xpY2UoSy5wbGFjZSxxK0sucGxhY2UpO2lmKDA9PT1XWzBdKXtpZighKDEyOCZXWzFdKSlyZXR1cm4hMTtXPVcuc2xpY2UoMSl9aWYoMD09PWVlWzBd''@;'; put 'put ''KXtpZighKDEyOCZlZVsxXSkpcmV0dXJuITE7ZWU9ZWUuc2xpY2UoMSl9cmV0dXJuIHRoaXMucj1uZXcgSShXKSx0aGlzLnM9bmV3IEkoZWUpLHRoaXMucmVjb3ZlcnlQYXJhbT1udWxsLCEwfSxWLnByb3RvdHlwZS50b0RFUj1mdW5jdGlvbihOKXt2YXIgTz10aGlzLnIudG9BcnJheSgpLEs9''@;'; put 'put ''dGhpcy5zLnRvQXJyYXkoKTtmb3IoMTI4Jk9bMF0mJihPPVswXS5jb25jYXQoTykpLDEyOCZLWzBdJiYoSz1bMF0uY29uY2F0KEspKSxPPUYoTyksSz1GKEspOyEoS1swXXx8MTI4JktbMV0pOylLPUsuc2xpY2UoMSk7dmFyIFo9WzJdO1IoWixPLmxlbmd0aCksKFo9Wi5jb25jYXQoTykpLnB1''@;'; put 'put ''c2goMiksUihaLEsubGVuZ3RoKTt2YXIgWT1aLmNvbmNhdChLKSxXPVs0OF07cmV0dXJuIFIoVyxZLmxlbmd0aCksVz1XLmNvbmNhdChZKSxfLmVuY29kZShXLE4pfX0sNDA2Nzk6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1KU09OLnBhcnNlKCdbWyIwIiwiXFx1MDAwMCIsMTI4XSxb''@;'; put 'put ''ImExIiwiXHVmZjYxIiw2Ml0sWyI4MTQwIiwiXHUzMDAwXHUzMDAxXHUzMDAyXHVmZjBjXHVmZjBlXHUzMGZiXHVmZjFhXHVmZjFiXHVmZjFmXHVmZjAxXHUzMDliXHUzMDljXHhiNFx1ZmY0MFx4YThcdWZmM2VcdWZmZTNcdWZmM2ZcdTMwZmRcdTMwZmVcdTMwOWRcdTMwOWVcdTMwMDNcdTRl''@;'; put 'put ''ZGRcdTMwMDVcdTMwMDZcdTMwMDdcdTMwZmNcdTIwMTVcdTIwMTBcdWZmMGZcdWZmM2NcdWZmNWVcdTIyMjVcdWZmNWNcdTIwMjZcdTIwMjVcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdWZmMDhcdWZmMDlcdTMwMTRcdTMwMTVcdWZmM2JcdWZmM2RcdWZmNWJcdWZmNWRcdTMwMDgiLDksIlx1''@;'; put 'put ''ZmYwYlx1ZmYwZFx4YjFceGQ3Il0sWyI4MTgwIiwiXHhmN1x1ZmYxZFx1MjI2MFx1ZmYxY1x1ZmYxZVx1MjI2Nlx1MjI2N1x1MjIxZVx1MjIzNFx1MjY0Mlx1MjY0MFx4YjBcdTIwMzJcdTIwMzNcdTIxMDNcdWZmZTVcdWZmMDRcdWZmZTBcdWZmZTFcdWZmMDVcdWZmMDNcdWZmMDZcdWZmMGFc''@;'; put 'put ''dWZmMjBceGE3XHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyNWJkXHUyNWJjXHUyMDNiXHUzMDEyXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEzIl0sWyI4MWI4IiwiXHUyMjA4XHUyMjBiXHUyMjg2XHUyMjg3''@;'; put 'put ''XHUyMjgyXHUyMjgzXHUyMjJhXHUyMjI5Il0sWyI4MWM4IiwiXHUyMjI3XHUyMjI4XHVmZmUyXHUyMWQyXHUyMWQ0XHUyMjAwXHUyMjAzIl0sWyI4MWRhIiwiXHUyMjIwXHUyMmE1XHUyMzEyXHUyMjAyXHUyMjA3XHUyMjYxXHUyMjUyXHUyMjZhXHUyMjZiXHUyMjFhXHUyMjNkXHUyMjFkXHUy''@;'; put 'put ''MjM1XHUyMjJiXHUyMjJjIl0sWyI4MWYwIiwiXHUyMTJiXHUyMDMwXHUyNjZmXHUyNjZkXHUyNjZhXHUyMDIwXHUyMDIxXHhiNiJdLFsiODFmYyIsIlx1MjVlZiJdLFsiODI0ZiIsIlx1ZmYxMCIsOV0sWyI4MjYwIiwiXHVmZjIxIiwyNV0sWyI4MjgxIiwiXHVmZjQxIiwyNV0sWyI4MjlmIiwi''@;'; put 'put ''XHUzMDQxIiw4Ml0sWyI4MzQwIiwiXHUzMGExIiw2Ml0sWyI4MzgwIiwiXHUzMGUwIiwyMl0sWyI4MzlmIiwiXHUwMzkxIiwxNiwiXHUwM2EzIiw2XSxbIjgzYmYiLCJcdTAzYjEiLDE2LCJcdTAzYzMiLDZdLFsiODQ0MCIsIlx1MDQxMCIsNSwiXHUwNDAxXHUwNDE2IiwyNV0sWyI4NDcwIiwi''@;'; put 'put ''XHUwNDMwIiw1LCJcdTA0NTFcdTA0MzYiLDddLFsiODQ4MCIsIlx1MDQzZSIsMTddLFsiODQ5ZiIsIlx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxOFx1MjUxNFx1MjUxY1x1MjUyY1x1MjUyNFx1MjUzNFx1MjUzY1x1MjUwMVx1MjUwM1x1MjUwZlx1MjUxM1x1MjUxYlx1MjUxN1x1MjUy''@;'; put 'put ''M1x1MjUzM1x1MjUyYlx1MjUzYlx1MjU0Ylx1MjUyMFx1MjUyZlx1MjUyOFx1MjUzN1x1MjUzZlx1MjUxZFx1MjUzMFx1MjUyNVx1MjUzOFx1MjU0MiJdLFsiODc0MCIsIlx1MjQ2MCIsMTksIlx1MjE2MCIsOV0sWyI4NzVmIiwiXHUzMzQ5XHUzMzE0XHUzMzIyXHUzMzRkXHUzMzE4XHUzMzI3''@;'; put 'put ''XHUzMzAzXHUzMzM2XHUzMzUxXHUzMzU3XHUzMzBkXHUzMzI2XHUzMzIzXHUzMzJiXHUzMzRhXHUzMzNiXHUzMzljXHUzMzlkXHUzMzllXHUzMzhlXHUzMzhmXHUzM2M0XHUzM2ExIl0sWyI4NzdlIiwiXHUzMzdiIl0sWyI4NzgwIiwiXHUzMDFkXHUzMDFmXHUyMTE2XHUzM2NkXHUyMTIxXHUz''@;'; put 'put ''MmE0Iiw0LCJcdTMyMzFcdTMyMzJcdTMyMzlcdTMzN2VcdTMzN2RcdTMzN2NcdTIyNTJcdTIyNjFcdTIyMmJcdTIyMmVcdTIyMTFcdTIyMWFcdTIyYTVcdTIyMjBcdTIyMWZcdTIyYmZcdTIyMzVcdTIyMjlcdTIyMmEiXSxbIjg4OWYiLCJcdTRlOWNcdTU1MTZcdTVhMDNcdTk2M2ZcdTU0YzBc''@;'; put 'put ''dTYxMWJcdTYzMjhcdTU5ZjZcdTkwMjJcdTg0NzVcdTgzMWNcdTdhNTBcdTYwYWFcdTYzZTFcdTZlMjVcdTY1ZWRcdTg0NjZcdTgyYTZcdTliZjVcdTY4OTNcdTU3MjdcdTY1YTFcdTYyNzFcdTViOWJcdTU5ZDBcdTg2N2JcdTk4ZjRcdTdkNjJcdTdkYmVcdTliOGVcdTYyMTZcdTdjOWZcdTg4''@;'; put 'put ''YjdcdTViODlcdTVlYjVcdTYzMDlcdTY2OTdcdTY4NDhcdTk1YzdcdTk3OGRcdTY3NGZcdTRlZTVcdTRmMGFcdTRmNGRcdTRmOWRcdTUwNDlcdTU2ZjJcdTU5MzdcdTU5ZDRcdTVhMDFcdTVjMDlcdTYwZGZcdTYxMGZcdTYxNzBcdTY2MTNcdTY5MDVcdTcwYmFcdTc1NGZcdTc1NzBcdTc5ZmJc''@;'; put 'put ''dTdkYWRcdTdkZWZcdTgwYzNcdTg0MGVcdTg4NjNcdThiMDJcdTkwNTVcdTkwN2FcdTUzM2JcdTRlOTVcdTRlYTVcdTU3ZGZcdTgwYjJcdTkwYzFcdTc4ZWZcdTRlMDBcdTU4ZjFcdTZlYTJcdTkwMzhcdTdhMzJcdTgzMjhcdTgyOGJcdTljMmZcdTUxNDFcdTUzNzBcdTU0YmRcdTU0ZTFcdTU2''@;'; put 'put ''ZTBcdTU5ZmJcdTVmMTVcdTk4ZjJcdTZkZWJcdTgwZTRcdTg1MmQiXSxbIjg5NDAiLCJcdTk2NjJcdTk2NzBcdTk2YTBcdTk3ZmJcdTU0MGJcdTUzZjNcdTViODdcdTcwY2ZcdTdmYmRcdThmYzJcdTk2ZThcdTUzNmZcdTlkNWNcdTdhYmFcdTRlMTFcdTc4OTNcdTgxZmNcdTZlMjZcdTU2MThc''@;'; put 'put ''dTU1MDRcdTZiMWRcdTg1MWFcdTljM2JcdTU5ZTVcdTUzYTlcdTZkNjZcdTc0ZGNcdTk1OGZcdTU2NDJcdTRlOTFcdTkwNGJcdTk2ZjJcdTgzNGZcdTk5MGNcdTUzZTFcdTU1YjZcdTViMzBcdTVmNzFcdTY2MjBcdTY2ZjNcdTY4MDRcdTZjMzhcdTZjZjNcdTZkMjlcdTc0NWJcdTc2YzhcdTdh''@;'; put 'put ''NGVcdTk4MzRcdTgyZjFcdTg4NWJcdThhNjBcdTkyZWRcdTZkYjJcdTc1YWJcdTc2Y2FcdTk5YzVcdTYwYTZcdThiMDFcdThkOGFcdTk1YjJcdTY5OGVcdTUzYWRcdTUxODYiXSxbIjg5ODAiLCJcdTU3MTJcdTU4MzBcdTU5NDRcdTViYjRcdTVlZjZcdTYwMjhcdTYzYTlcdTYzZjRcdTZjYmZc''@;'; put 'put ''dTZmMTRcdTcwOGVcdTcxMTRcdTcxNTlcdTcxZDVcdTczM2ZcdTdlMDFcdTgyNzZcdTgyZDFcdTg1OTdcdTkwNjBcdTkyNWJcdTlkMWJcdTU4NjlcdTY1YmNcdTZjNWFcdTc1MjVcdTUxZjlcdTU5MmVcdTU5NjVcdTVmODBcdTVmZGNcdTYyYmNcdTY1ZmFcdTZhMmFcdTZiMjdcdTZiYjRcdTcz''@;'; put 'put ''OGJcdTdmYzFcdTg5NTZcdTlkMmNcdTlkMGVcdTllYzRcdTVjYTFcdTZjOTZcdTgzN2JcdTUxMDRcdTVjNGJcdTYxYjZcdTgxYzZcdTY4NzZcdTcyNjFcdTRlNTlcdTRmZmFcdTUzNzhcdTYwNjlcdTZlMjlcdTdhNGZcdTk3ZjNcdTRlMGJcdTUzMTZcdTRlZWVcdTRmNTVcdTRmM2RcdTRmYTFc''@;'; put 'put ''dTRmNzNcdTUyYTBcdTUzZWZcdTU2MDlcdTU5MGZcdTVhYzFcdTViYjZcdTViZTFcdTc5ZDFcdTY2ODdcdTY3OWNcdTY3YjZcdTZiNGNcdTZjYjNcdTcwNmJcdTczYzJcdTc5OGRcdTc5YmVcdTdhM2NcdTdiODdcdTgyYjFcdTgyZGJcdTgzMDRcdTgzNzdcdTgzZWZcdTgzZDNcdTg3NjZcdThh''@;'; put 'put ''YjJcdTU2MjlcdThjYThcdThmZTZcdTkwNGVcdTk3MWVcdTg2OGFcdTRmYzRcdTVjZThcdTYyMTFcdTcyNTlcdTc1M2JcdTgxZTVcdTgyYmRcdTg2ZmVcdThjYzBcdTk2YzVcdTk5MTNcdTk5ZDVcdTRlY2JcdTRmMWFcdTg5ZTNcdTU2ZGVcdTU4NGFcdTU4Y2FcdTVlZmJcdTVmZWJcdTYwMmFc''@;'; put 'put ''dTYwOTRcdTYwNjJcdTYxZDBcdTYyMTJcdTYyZDBcdTY1MzkiXSxbIjhhNDAiLCJcdTliNDFcdTY2NjZcdTY4YjBcdTZkNzdcdTcwNzBcdTc1NGNcdTc2ODZcdTdkNzVcdTgyYTVcdTg3ZjlcdTk1OGJcdTk2OGVcdThjOWRcdTUxZjFcdTUyYmVcdTU5MTZcdTU0YjNcdTViYjNcdTVkMTZcdTYx''@;'; put 'put ''NjhcdTY5ODJcdTZkYWZcdTc4OGRcdTg0Y2JcdTg4NTdcdThhNzJcdTkzYTdcdTlhYjhcdTZkNmNcdTk5YThcdTg2ZDlcdTU3YTNcdTY3ZmZcdTg2Y2VcdTkyMGVcdTUyODNcdTU2ODdcdTU0MDRcdTVlZDNcdTYyZTFcdTY0YjlcdTY4M2NcdTY4MzhcdTZiYmJcdTczNzJcdTc4YmFcdTdhNmJc''@;'; put 'put ''dTg5OWFcdTg5ZDJcdThkNmJcdThmMDNcdTkwZWRcdTk1YTNcdTk2OTRcdTk3NjlcdTViNjZcdTVjYjNcdTY5N2RcdTk4NGRcdTk4NGVcdTYzOWJcdTdiMjBcdTZhMmIiXSxbIjhhODAiLCJcdTZhN2ZcdTY4YjZcdTljMGRcdTZmNWZcdTUyNzJcdTU1OWRcdTYwNzBcdTYyZWNcdTZkM2JcdTZl''@;'; put 'put ''MDdcdTZlZDFcdTg0NWJcdTg5MTBcdThmNDRcdTRlMTRcdTljMzlcdTUzZjZcdTY5MWJcdTZhM2FcdTk3ODRcdTY4MmFcdTUxNWNcdTdhYzNcdTg0YjJcdTkxZGNcdTkzOGNcdTU2NWJcdTlkMjhcdTY4MjJcdTgzMDVcdTg0MzFcdTdjYTVcdTUyMDhcdTgyYzVcdTc0ZTZcdTRlN2VcdTRmODNc''@;'; put 'put ''dTUxYTBcdTViZDJcdTUyMGFcdTUyZDhcdTUyZTdcdTVkZmJcdTU1OWFcdTU4MmFcdTU5ZTZcdTViOGNcdTViOThcdTViZGJcdTVlNzJcdTVlNzlcdTYwYTNcdTYxMWZcdTYxNjNcdTYxYmVcdTYzZGJcdTY1NjJcdTY3ZDFcdTY4NTNcdTY4ZmFcdTZiM2VcdTZiNTNcdTZjNTdcdTZmMjJcdTZm''@;'; put 'put ''OTdcdTZmNDVcdTc0YjBcdTc1MThcdTc2ZTNcdTc3MGJcdTdhZmZcdTdiYTFcdTdjMjFcdTdkZTlcdTdmMzZcdTdmZjBcdTgwOWRcdTgyNjZcdTgzOWVcdTg5YjNcdThhY2NcdThjYWJcdTkwODRcdTk0NTFcdTk1OTNcdTk1OTFcdTk1YTJcdTk2NjVcdTk3ZDNcdTk5MjhcdTgyMThcdTRlMzhc''@;'; put 'put ''dTU0MmJcdTVjYjhcdTVkY2NcdTczYTlcdTc2NGNcdTc3M2NcdTVjYTlcdTdmZWJcdThkMGJcdTk2YzFcdTk4MTFcdTk4NTRcdTk4NThcdTRmMDFcdTRmMGVcdTUzNzFcdTU1OWNcdTU2NjhcdTU3ZmFcdTU5NDdcdTViMDlcdTViYzRcdTVjOTBcdTVlMGNcdTVlN2VcdTVmY2NcdTYzZWVcdTY3''@;'; put 'put ''M2FcdTY1ZDdcdTY1ZTJcdTY3MWZcdTY4Y2JcdTY4YzQiXSxbIjhiNDAiLCJcdTZhNWZcdTVlMzBcdTZiYzVcdTZjMTdcdTZjN2RcdTc1N2ZcdTc5NDhcdTViNjNcdTdhMDBcdTdkMDBcdTVmYmRcdTg5OGZcdThhMThcdThjYjRcdThkNzdcdThlY2NcdThmMWRcdTk4ZTJcdTlhMGVcdTliM2Nc''@;'; put 'put ''dTRlODBcdTUwN2RcdTUxMDBcdTU5OTNcdTViOWNcdTYyMmZcdTYyODBcdTY0ZWNcdTZiM2FcdTcyYTBcdTc1OTFcdTc5NDdcdTdmYTlcdTg3ZmJcdThhYmNcdThiNzBcdTYzYWNcdTgzY2FcdTk3YTBcdTU0MDlcdTU0MDNcdTU1YWJcdTY4NTRcdTZhNThcdThhNzBcdTc4MjdcdTY3NzVcdTll''@;'; put 'put ''Y2RcdTUzNzRcdTViYTJcdTgxMWFcdTg2NTBcdTkwMDZcdTRlMThcdTRlNDVcdTRlYzdcdTRmMTFcdTUzY2FcdTU0MzhcdTViYWVcdTVmMTNcdTYwMjVcdTY1NTEiXSxbIjhiODAiLCJcdTY3M2RcdTZjNDJcdTZjNzJcdTZjZTNcdTcwNzhcdTc0MDNcdTdhNzZcdTdhYWVcdTdiMDhcdTdkMWFc''@;'; put 'put ''dTdjZmVcdTdkNjZcdTY1ZTdcdTcyNWJcdTUzYmJcdTVjNDVcdTVkZThcdTYyZDJcdTYyZTBcdTYzMTlcdTZlMjBcdTg2NWFcdThhMzFcdThkZGRcdTkyZjhcdTZmMDFcdTc5YTZcdTliNWFcdTRlYThcdTRlYWJcdTRlYWNcdTRmOWJcdTRmYTBcdTUwZDFcdTUxNDdcdTdhZjZcdTUxNzFcdTUx''@;'; put 'put ''ZjZcdTUzNTRcdTUzMjFcdTUzN2ZcdTUzZWJcdTU1YWNcdTU4ODNcdTVjZTFcdTVmMzdcdTVmNGFcdTYwMmZcdTYwNTBcdTYwNmRcdTYzMWZcdTY1NTlcdTZhNGJcdTZjYzFcdTcyYzJcdTcyZWRcdTc3ZWZcdTgwZjhcdTgxMDVcdTgyMDhcdTg1NGVcdTkwZjdcdTkzZTFcdTk3ZmZcdTk5NTdc''@;'; put 'put ''dTlhNWFcdTRlZjBcdTUxZGRcdTVjMmRcdTY2ODFcdTY5NmRcdTVjNDBcdTY2ZjJcdTY5NzVcdTczODlcdTY4NTBcdTdjODFcdTUwYzVcdTUyZTRcdTU3NDdcdTVkZmVcdTkzMjZcdTY1YTRcdTZiMjNcdTZiM2RcdTc0MzRcdTc5ODFcdTc5YmRcdTdiNGJcdTdkY2FcdTgyYjlcdTgzY2NcdTg4''@;'; put 'put ''N2ZcdTg5NWZcdThiMzlcdThmZDFcdTkxZDFcdTU0MWZcdTkyODBcdTRlNWRcdTUwMzZcdTUzZTVcdTUzM2FcdTcyZDdcdTczOTZcdTc3ZTlcdTgyZTZcdThlYWZcdTk5YzZcdTk5YzhcdTk5ZDJcdTUxNzdcdTYxMWFcdTg2NWVcdTU1YjBcdTdhN2FcdTUwNzZcdTViZDNcdTkwNDdcdTk2ODVc''@;'; put 'put ''dTRlMzJcdTZhZGJcdTkxZTdcdTVjNTFcdTVjNDgiXSxbIjhjNDAiLCJcdTYzOThcdTdhOWZcdTZjOTNcdTk3NzRcdThmNjFcdTdhYWFcdTcxOGFcdTk2ODhcdTdjODJcdTY4MTdcdTdlNzBcdTY4NTFcdTkzNmNcdTUyZjJcdTU0MWJcdTg1YWJcdThhMTNcdTdmYTRcdThlY2RcdTkwZTFcdTUz''@;'; put 'put ''NjZcdTg4ODhcdTc5NDFcdTRmYzJcdTUwYmVcdTUyMTFcdTUxNDRcdTU1NTNcdTU3MmRcdTczZWFcdTU3OGJcdTU5NTFcdTVmNjJcdTVmODRcdTYwNzVcdTYxNzZcdTYxNjdcdTYxYTlcdTYzYjJcdTY0M2FcdTY1NmNcdTY2NmZcdTY4NDJcdTZlMTNcdTc1NjZcdTdhM2RcdTdjZmJcdTdkNGNc''@;'; put 'put ''dTdkOTlcdTdlNGJcdTdmNmJcdTgzMGVcdTgzNGFcdTg2Y2RcdThhMDhcdThhNjNcdThiNjZcdThlZmRcdTk4MWFcdTlkOGZcdTgyYjhcdThmY2VcdTliZTgiXSxbIjhjODAiLCJcdTUyODdcdTYyMWZcdTY0ODNcdTZmYzBcdTk2OTlcdTY4NDFcdTUwOTFcdTZiMjBcdTZjN2FcdTZmNTRcdTdh''@;'; put 'put ''NzRcdTdkNTBcdTg4NDBcdThhMjNcdTY3MDhcdTRlZjZcdTUwMzlcdTUwMjZcdTUwNjVcdTUxN2NcdTUyMzhcdTUyNjNcdTU1YTdcdTU3MGZcdTU4MDVcdTVhY2NcdTVlZmFcdTYxYjJcdTYxZjhcdTYyZjNcdTYzNzJcdTY5MWNcdTZhMjlcdTcyN2RcdTcyYWNcdTczMmVcdTc4MTRcdTc4NmZc''@;'; put 'put ''dTdkNzlcdTc3MGNcdTgwYTlcdTg5OGJcdThiMTlcdThjZTJcdThlZDJcdTkwNjNcdTkzNzVcdTk2N2FcdTk4NTVcdTlhMTNcdTllNzhcdTUxNDNcdTUzOWZcdTUzYjNcdTVlN2JcdTVmMjZcdTZlMWJcdTZlOTBcdTczODRcdTczZmVcdTdkNDNcdTgyMzdcdThhMDBcdThhZmFcdTk2NTBcdTRl''@;'; put 'put ''NGVcdTUwMGJcdTUzZTRcdTU0N2NcdTU2ZmFcdTU5ZDFcdTViNjRcdTVkZjFcdTVlYWJcdTVmMjdcdTYyMzhcdTY1NDVcdTY3YWZcdTZlNTZcdTcyZDBcdTdjY2FcdTg4YjRcdTgwYTFcdTgwZTFcdTgzZjBcdTg2NGVcdThhODdcdThkZThcdTkyMzdcdTk2YzdcdTk4NjdcdTlmMTNcdTRlOTRc''@;'; put 'put ''dTRlOTJcdTRmMGRcdTUzNDhcdTU0NDlcdTU0M2VcdTVhMmZcdTVmOGNcdTVmYTFcdTYwOWZcdTY4YTdcdTZhOGVcdTc0NWFcdTc4ODFcdThhOWVcdThhYTRcdThiNzdcdTkxOTBcdTRlNWVcdTliYzlcdTRlYTRcdTRmN2NcdTRmYWZcdTUwMTlcdTUwMTZcdTUxNDlcdTUxNmNcdTUyOWZcdTUy''@;'; put 'put ''YjlcdTUyZmVcdTUzOWFcdTUzZTNcdTU0MTEiXSxbIjhkNDAiLCJcdTU0MGVcdTU1ODlcdTU3NTFcdTU3YTJcdTU5N2RcdTViNTRcdTViNWRcdTViOGZcdTVkZTVcdTVkZTdcdTVkZjdcdTVlNzhcdTVlODNcdTVlOWFcdTVlYjdcdTVmMThcdTYwNTJcdTYxNGNcdTYyOTdcdTYyZDhcdTYzYTdc''@;'; put 'put ''dTY1M2JcdTY2MDJcdTY2NDNcdTY2ZjRcdTY3NmRcdTY4MjFcdTY4OTdcdTY5Y2JcdTZjNWZcdTZkMmFcdTZkNjlcdTZlMmZcdTZlOWRcdTc1MzJcdTc2ODdcdTc4NmNcdTdhM2ZcdTdjZTBcdTdkMDVcdTdkMThcdTdkNWVcdTdkYjFcdTgwMTVcdTgwMDNcdTgwYWZcdTgwYjFcdTgxNTRcdTgx''@;'; put 'put ''OGZcdTgyMmFcdTgzNTJcdTg4NGNcdTg4NjFcdThiMWJcdThjYTJcdThjZmNcdTkwY2FcdTkxNzVcdTkyNzFcdTc4M2ZcdTkyZmNcdTk1YTRcdTk2NGQiXSxbIjhkODAiLCJcdTk4MDVcdTk5OTlcdTlhZDhcdTlkM2JcdTUyNWJcdTUyYWJcdTUzZjdcdTU0MDhcdTU4ZDVcdTYyZjdcdTZmZTBc''@;'; put 'put ''dThjNmFcdThmNWZcdTllYjlcdTUxNGJcdTUyM2JcdTU0NGFcdTU2ZmRcdTdhNDBcdTkxNzdcdTlkNjBcdTllZDJcdTczNDRcdTZmMDlcdTgxNzBcdTc1MTFcdTVmZmRcdTYwZGFcdTlhYThcdTcyZGJcdThmYmNcdTZiNjRcdTk4MDNcdTRlY2FcdTU2ZjBcdTU3NjRcdTU4YmVcdTVhNWFcdTYw''@;'; put 'put ''NjhcdTYxYzdcdTY2MGZcdTY2MDZcdTY4MzlcdTY4YjFcdTZkZjdcdTc1ZDVcdTdkM2FcdTgyNmVcdTliNDJcdTRlOWJcdTRmNTBcdTUzYzlcdTU1MDZcdTVkNmZcdTVkZTZcdTVkZWVcdTY3ZmJcdTZjOTlcdTc0NzNcdTc4MDJcdThhNTBcdTkzOTZcdTg4ZGZcdTU3NTBcdTVlYTdcdTYzMmJc''@;'; put 'put ''dTUwYjVcdTUwYWNcdTUxOGRcdTY3MDBcdTU0YzlcdTU4NWVcdTU5YmJcdTViYjBcdTVmNjlcdTYyNGRcdTYzYTFcdTY4M2RcdTZiNzNcdTZlMDhcdTcwN2RcdTkxYzdcdTcyODBcdTc4MTVcdTc4MjZcdTc5NmRcdTY1OGVcdTdkMzBcdTgzZGNcdTg4YzFcdThmMDlcdTk2OWJcdTUyNjRcdTU3''@;'; put 'put ''MjhcdTY3NTBcdTdmNmFcdThjYTFcdTUxYjRcdTU3NDJcdTk2MmFcdTU4M2FcdTY5OGFcdTgwYjRcdTU0YjJcdTVkMGVcdTU3ZmNcdTc4OTVcdTlkZmFcdTRmNWNcdTUyNGFcdTU0OGJcdTY0M2VcdTY2MjhcdTY3MTRcdTY3ZjVcdTdhODRcdTdiNTZcdTdkMjJcdTkzMmZcdTY4NWNcdTliYWRc''@;'; put 'put ''dTdiMzlcdTUzMTlcdTUxOGFcdTUyMzciXSxbIjhlNDAiLCJcdTViZGZcdTYyZjZcdTY0YWVcdTY0ZTZcdTY3MmRcdTZiYmFcdTg1YTlcdTk2ZDFcdTc2OTBcdTliZDZcdTYzNGNcdTkzMDZcdTliYWJcdTc2YmZcdTY2NTJcdTRlMDlcdTUwOThcdTUzYzJcdTVjNzFcdTYwZThcdTY0OTJcdTY1''@;'; put 'put ''NjNcdTY4NWZcdTcxZTZcdTczY2FcdTc1MjNcdTdiOTdcdTdlODJcdTg2OTVcdThiODNcdThjZGJcdTkxNzhcdTk5MTBcdTY1YWNcdTY2YWJcdTZiOGJcdTRlZDVcdTRlZDRcdTRmM2FcdTRmN2ZcdTUyM2FcdTUzZjhcdTUzZjJcdTU1ZTNcdTU2ZGJcdTU4ZWJcdTU5Y2JcdTU5YzlcdTU5ZmZc''@;'; put 'put ''dTViNTBcdTVjNGRcdTVlMDJcdTVlMmJcdTVmZDdcdTYwMWRcdTYzMDdcdTY1MmZcdTViNWNcdTY1YWZcdTY1YmRcdTY1ZThcdTY3OWRcdTZiNjIiXSxbIjhlODAiLCJcdTZiN2JcdTZjMGZcdTczNDVcdTc5NDlcdTc5YzFcdTdjZjhcdTdkMTlcdTdkMmJcdTgwYTJcdTgxMDJcdTgxZjNcdTg5''@;'; put 'put ''OTZcdThhNWVcdThhNjlcdThhNjZcdThhOGNcdThhZWVcdThjYzdcdThjZGNcdTk2Y2NcdTk4ZmNcdTZiNmZcdTRlOGJcdTRmM2NcdTRmOGRcdTUxNTBcdTViNTdcdTViZmFcdTYxNDhcdTYzMDFcdTY2NDJcdTZiMjFcdTZlY2JcdTZjYmJcdTcyM2VcdTc0YmRcdTc1ZDRcdTc4YzFcdTc5M2Fc''@;'; put 'put ''dTgwMGNcdTgwMzNcdTgxZWFcdTg0OTRcdThmOWVcdTZjNTBcdTllN2ZcdTVmMGZcdThiNThcdTlkMmJcdTdhZmFcdThlZjhcdTViOGRcdTk2ZWJcdTRlMDNcdTUzZjFcdTU3ZjdcdTU5MzFcdTVhYzlcdTViYTRcdTYwODlcdTZlN2ZcdTZmMDZcdTc1YmVcdThjZWFcdTViOWZcdTg1MDBcdTdi''@;'; put 'put ''ZTBcdTUwNzJcdTY3ZjRcdTgyOWRcdTVjNjFcdTg1NGFcdTdlMWVcdTgyMGVcdTUxOTlcdTVjMDRcdTYzNjhcdThkNjZcdTY1OWNcdTcxNmVcdTc5M2VcdTdkMTdcdTgwMDVcdThiMWRcdThlY2FcdTkwNmVcdTg2YzdcdTkwYWFcdTUwMWZcdTUyZmFcdTVjM2FcdTY3NTNcdTcwN2NcdTcyMzVc''@;'; put 'put ''dTkxNGNcdTkxYzhcdTkzMmJcdTgyZTVcdTViYzJcdTVmMzFcdTYwZjlcdTRlM2JcdTUzZDZcdTViODhcdTYyNGJcdTY3MzFcdTZiOGFcdTcyZTlcdTczZTBcdTdhMmVcdTgxNmJcdThkYTNcdTkxNTJcdTk5OTZcdTUxMTJcdTUzZDdcdTU0NmFcdTViZmZcdTYzODhcdTZhMzlcdTdkYWNcdTk3''@;'; put 'put ''MDBcdTU2ZGFcdTUzY2VcdTU0NjgiXSxbIjhmNDAiLCJcdTViOTdcdTVjMzFcdTVkZGVcdTRmZWVcdTYxMDFcdTYyZmVcdTZkMzJcdTc5YzBcdTc5Y2JcdTdkNDJcdTdlNGRcdTdmZDJcdTgxZWRcdTgyMWZcdTg0OTBcdTg4NDZcdTg5NzJcdThiOTBcdThlNzRcdThmMmZcdTkwMzFcdTkxNGJc''@;'; put 'put ''dTkxNmNcdTk2YzZcdTkxOWNcdTRlYzBcdTRmNGZcdTUxNDVcdTUzNDFcdTVmOTNcdTYyMGVcdTY3ZDRcdTZjNDFcdTZlMGJcdTczNjNcdTdlMjZcdTkxY2RcdTkyODNcdTUzZDRcdTU5MTlcdTViYmZcdTZkZDFcdTc5NWRcdTdlMmVcdTdjOWJcdTU4N2VcdTcxOWZcdTUxZmFcdTg4NTNcdThm''@;'; put 'put ''ZjBcdTRmY2FcdTVjZmJcdTY2MjVcdTc3YWNcdTdhZTNcdTgyMWNcdTk5ZmZcdTUxYzZcdTVmYWFcdTY1ZWNcdTY5NmZcdTZiODlcdTZkZjMiXSxbIjhmODAiLCJcdTZlOTZcdTZmNjRcdTc2ZmVcdTdkMTRcdTVkZTFcdTkwNzVcdTkxODdcdTk4MDZcdTUxZTZcdTUyMWRcdTYyNDBcdTY2OTFc''@;'; put 'put ''dTY2ZDlcdTZlMWFcdTVlYjZcdTdkZDJcdTdmNzJcdTY2ZjhcdTg1YWZcdTg1ZjdcdThhZjhcdTUyYTlcdTUzZDlcdTU5NzNcdTVlOGZcdTVmOTBcdTYwNTVcdTkyZTRcdTk2NjRcdTUwYjdcdTUxMWZcdTUyZGRcdTUzMjBcdTUzNDdcdTUzZWNcdTU0ZThcdTU1NDZcdTU1MzFcdTU2MTdcdTU5''@;'; put 'put ''NjhcdTU5YmVcdTVhM2NcdTViYjVcdTVjMDZcdTVjMGZcdTVjMTFcdTVjMWFcdTVlODRcdTVlOGFcdTVlZTBcdTVmNzBcdTYyN2ZcdTYyODRcdTYyZGJcdTYzOGNcdTYzNzdcdTY2MDdcdTY2MGNcdTY2MmRcdTY2NzZcdTY3N2VcdTY4YTJcdTZhMWZcdTZhMzVcdTZjYmNcdTZkODhcdTZlMDlc''@;'; put 'put ''dTZlNThcdTcxM2NcdTcxMjZcdTcxNjdcdTc1YzdcdTc3MDFcdTc4NWRcdTc5MDFcdTc5NjVcdTc5ZjBcdTdhZTBcdTdiMTFcdTdjYTdcdTdkMzlcdTgwOTZcdTgzZDZcdTg0OGJcdTg1NDlcdTg4NWRcdTg4ZjNcdThhMWZcdThhM2NcdThhNTRcdThhNzNcdThjNjFcdThjZGVcdTkxYTRcdTky''@;'; put 'put ''NjZcdTkzN2VcdTk0MThcdTk2OWNcdTk3OThcdTRlMGFcdTRlMDhcdTRlMWVcdTRlNTdcdTUxOTdcdTUyNzBcdTU3Y2VcdTU4MzRcdTU4Y2NcdTViMjJcdTVlMzhcdTYwYzVcdTY0ZmVcdTY3NjFcdTY3NTZcdTZkNDRcdTcyYjZcdTc1NzNcdTdhNjNcdTg0YjhcdThiNzJcdTkxYjhcdTkzMjBc''@;'; put 'put ''dTU2MzFcdTU3ZjRcdTk4ZmUiXSxbIjkwNDAiLCJcdTYyZWRcdTY5MGRcdTZiOTZcdTcxZWRcdTdlNTRcdTgwNzdcdTgyNzJcdTg5ZTZcdTk4ZGZcdTg3NTVcdThmYjFcdTVjM2JcdTRmMzhcdTRmZTFcdTRmYjVcdTU1MDdcdTVhMjBcdTViZGRcdTViZTlcdTVmYzNcdTYxNGVcdTYzMmZcdTY1''@;'; put 'put ''YjBcdTY2NGJcdTY4ZWVcdTY5OWJcdTZkNzhcdTZkZjFcdTc1MzNcdTc1YjlcdTc3MWZcdTc5NWVcdTc5ZTZcdTdkMzNcdTgxZTNcdTgyYWZcdTg1YWFcdTg5YWFcdThhM2FcdThlYWJcdThmOWJcdTkwMzJcdTkxZGRcdTk3MDdcdTRlYmFcdTRlYzFcdTUyMDNcdTU4NzVcdTU4ZWNcdTVjMGJc''@;'; put 'put ''dTc1MWFcdTVjM2RcdTgxNGVcdThhMGFcdThmYzVcdTk2NjNcdTk3NmRcdTdiMjVcdThhY2ZcdTk4MDhcdTkxNjJcdTU2ZjNcdTUzYTgiXSxbIjkwODAiLCJcdTkwMTdcdTU0MzlcdTU3ODJcdTVlMjVcdTYzYThcdTZjMzRcdTcwOGFcdTc3NjFcdTdjOGJcdTdmZTBcdTg4NzBcdTkwNDJcdTkx''@;'; put 'put ''NTRcdTkzMTBcdTkzMThcdTk2OGZcdTc0NWVcdTlhYzRcdTVkMDdcdTVkNjlcdTY1NzBcdTY3YTJcdThkYThcdTk2ZGJcdTYzNmVcdTY3NDlcdTY5MTlcdTgzYzVcdTk4MTdcdTk2YzBcdTg4ZmVcdTZmODRcdTY0N2FcdTViZjhcdTRlMTZcdTcwMmNcdTc1NWRcdTY2MmZcdTUxYzRcdTUyMzZc''@;'; put 'put ''dTUyZTJcdTU5ZDNcdTVmODFcdTYwMjdcdTYyMTBcdTY1M2ZcdTY1NzRcdTY2MWZcdTY2NzRcdTY4ZjJcdTY4MTZcdTZiNjNcdTZlMDVcdTcyNzJcdTc1MWZcdTc2ZGJcdTdjYmVcdTgwNTZcdTU4ZjBcdTg4ZmRcdTg5N2ZcdThhYTBcdThhOTNcdThhY2JcdTkwMWRcdTkxOTJcdTk3NTJcdTk3''@;'; put 'put ''NTlcdTY1ODlcdTdhMGVcdTgxMDZcdTk2YmJcdTVlMmRcdTYwZGNcdTYyMWFcdTY1YTVcdTY2MTRcdTY3OTBcdTc3ZjNcdTdhNGRcdTdjNGRcdTdlM2VcdTgxMGFcdThjYWNcdThkNjRcdThkZTFcdThlNWZcdTc4YTlcdTUyMDdcdTYyZDlcdTYzYTVcdTY0NDJcdTYyOThcdThhMmRcdTdhODNc''@;'; put 'put ''dTdiYzBcdThhYWNcdTk2ZWFcdTdkNzZcdTgyMGNcdTg3NDlcdTRlZDlcdTUxNDhcdTUzNDNcdTUzNjBcdTViYTNcdTVjMDJcdTVjMTZcdTVkZGRcdTYyMjZcdTYyNDdcdTY0YjBcdTY4MTNcdTY4MzRcdTZjYzlcdTZkNDVcdTZkMTdcdTY3ZDNcdTZmNWNcdTcxNGVcdTcxN2RcdTY1Y2JcdTdh''@;'; put 'put ''N2ZcdTdiYWRcdTdkZGEiXSxbIjkxNDAiLCJcdTdlNGFcdTdmYThcdTgxN2FcdTgyMWJcdTgyMzlcdTg1YTZcdThhNmVcdThjY2VcdThkZjVcdTkwNzhcdTkwNzdcdTkyYWRcdTkyOTFcdTk1ODNcdTliYWVcdTUyNGRcdTU1ODRcdTZmMzhcdTcxMzZcdTUxNjhcdTc5ODVcdTdlNTVcdTgxYjNc''@;'; put 'put ''dTdjY2VcdTU2NGNcdTU4NTFcdTVjYThcdTYzYWFcdTY2ZmVcdTY2ZmRcdTY5NWFcdTcyZDlcdTc1OGZcdTc1OGVcdTc5MGVcdTc5NTZcdTc5ZGZcdTdjOTdcdTdkMjBcdTdkNDRcdTg2MDdcdThhMzRcdTk2M2JcdTkwNjFcdTlmMjBcdTUwZTdcdTUyNzVcdTUzY2NcdTUzZTJcdTUwMDlcdTU1''@;'; put 'put ''YWFcdTU4ZWVcdTU5NGZcdTcyM2RcdTViOGJcdTVjNjRcdTUzMWRcdTYwZTNcdTYwZjNcdTYzNWNcdTYzODNcdTYzM2ZcdTYzYmIiXSxbIjkxODAiLCJcdTY0Y2RcdTY1ZTlcdTY2ZjlcdTVkZTNcdTY5Y2RcdTY5ZmRcdTZmMTVcdTcxZTVcdTRlODlcdTc1ZTlcdTc2ZjhcdTdhOTNcdTdjZGZc''@;'; put 'put ''dTdkY2ZcdTdkOWNcdTgwNjFcdTgzNDlcdTgzNThcdTg0NmNcdTg0YmNcdTg1ZmJcdTg4YzVcdThkNzBcdTkwMDFcdTkwNmRcdTkzOTdcdTk3MWNcdTlhMTJcdTUwY2ZcdTU4OTdcdTYxOGVcdTgxZDNcdTg1MzVcdThkMDhcdTkwMjBcdTRmYzNcdTUwNzRcdTUyNDdcdTUzNzNcdTYwNmZcdTYz''@;'; put 'put ''NDlcdTY3NWZcdTZlMmNcdThkYjNcdTkwMWZcdTRmZDdcdTVjNWVcdThjY2FcdTY1Y2ZcdTdkOWFcdTUzNTJcdTg4OTZcdTUxNzZcdTYzYzNcdTViNThcdTViNmJcdTVjMGFcdTY0MGRcdTY3NTFcdTkwNWNcdTRlZDZcdTU5MWFcdTU5MmFcdTZjNzBcdThhNTFcdTU1M2VcdTU4MTVcdTU5YTVc''@;'; put 'put ''dTYwZjBcdTYyNTNcdTY3YzFcdTgyMzVcdTY5NTVcdTk2NDBcdTk5YzRcdTlhMjhcdTRmNTNcdTU4MDZcdTViZmVcdTgwMTBcdTVjYjFcdTVlMmZcdTVmODVcdTYwMjBcdTYxNGJcdTYyMzRcdTY2ZmZcdTZjZjBcdTZlZGVcdTgwY2VcdTgxN2ZcdTgyZDRcdTg4OGJcdThjYjhcdTkwMDBcdTkw''@;'; put 'put ''MmVcdTk2OGFcdTllZGJcdTliZGJcdTRlZTNcdTUzZjBcdTU5MjdcdTdiMmNcdTkxOGRcdTk4NGNcdTlkZjlcdTZlZGRcdTcwMjdcdTUzNTNcdTU1NDRcdTViODVcdTYyNThcdTYyOWVcdTYyZDNcdTZjYTJcdTZmZWZcdTc0MjJcdThhMTdcdTk0MzhcdTZmYzFcdThhZmVcdTgzMzhcdTUxZTdc''@;'; put 'put ''dTg2ZjhcdTUzZWEiXSxbIjkyNDAiLCJcdTUzZTlcdTRmNDZcdTkwNTRcdThmYjBcdTU5NmFcdTgxMzFcdTVkZmRcdTdhZWFcdThmYmZcdTY4ZGFcdThjMzdcdTcyZjhcdTljNDhcdTZhM2RcdThhYjBcdTRlMzlcdTUzNThcdTU2MDZcdTU3NjZcdTYyYzVcdTYzYTJcdTY1ZTZcdTZiNGVcdTZk''@;'; put 'put ''ZTFcdTZlNWJcdTcwYWRcdTc3ZWRcdTdhZWZcdTdiYWFcdTdkYmJcdTgwM2RcdTgwYzZcdTg2Y2JcdThhOTVcdTkzNWJcdTU2ZTNcdTU4YzdcdTVmM2VcdTY1YWRcdTY2OTZcdTZhODBcdTZiYjVcdTc1MzdcdThhYzdcdTUwMjRcdTc3ZTVcdTU3MzBcdTVmMWJcdTYwNjVcdTY2N2FcdTZjNjBc''@;'; put 'put ''dTc1ZjRcdTdhMWFcdTdmNmVcdTgxZjRcdTg3MThcdTkwNDVcdTk5YjNcdTdiYzlcdTc1NWNcdTdhZjlcdTdiNTFcdTg0YzQiXSxbIjkyODAiLCJcdTkwMTBcdTc5ZTlcdTdhOTJcdTgzMzZcdTVhZTFcdTc3NDBcdTRlMmRcdTRlZjJcdTViOTlcdTVmZTBcdTYyYmRcdTY2M2NcdTY3ZjFcdTZj''@;'; put 'put ''ZThcdTg2NmJcdTg4NzdcdThhM2JcdTkxNGVcdTkyZjNcdTk5ZDBcdTZhMTdcdTcwMjZcdTczMmFcdTgyZTdcdTg0NTdcdThjYWZcdTRlMDFcdTUxNDZcdTUxY2JcdTU1OGJcdTViZjVcdTVlMTZcdTVlMzNcdTVlODFcdTVmMTRcdTVmMzVcdTVmNmJcdTVmYjRcdTYxZjJcdTYzMTFcdTY2YTJc''@;'; put 'put ''dTY3MWRcdTZmNmVcdTcyNTJcdTc1M2FcdTc3M2FcdTgwNzRcdTgxMzlcdTgxNzhcdTg3NzZcdThhYmZcdThhZGNcdThkODVcdThkZjNcdTkyOWFcdTk1NzdcdTk4MDJcdTljZTVcdTUyYzVcdTYzNTdcdTc2ZjRcdTY3MTVcdTZjODhcdTczY2RcdThjYzNcdTkzYWVcdTk2NzNcdTZkMjVcdTU4''@;'; put 'put ''OWNcdTY5MGVcdTY5Y2NcdThmZmRcdTkzOWFcdTc1ZGJcdTkwMWFcdTU4NWFcdTY4MDJcdTYzYjRcdTY5ZmJcdTRmNDNcdTZmMmNcdTY3ZDhcdThmYmJcdTg1MjZcdTdkYjRcdTkzNTRcdTY5M2ZcdTZmNzBcdTU3NmFcdTU4ZjdcdTViMmNcdTdkMmNcdTcyMmFcdTU0MGFcdTkxZTNcdTlkYjRc''@;'; put 'put ''dTRlYWRcdTRmNGVcdTUwNWNcdTUwNzVcdTUyNDNcdThjOWVcdTU0NDhcdTU4MjRcdTViOWFcdTVlMWRcdTVlOTVcdTVlYWRcdTVlZjdcdTVmMWZcdTYwOGNcdTYyYjVcdTYzM2FcdTYzZDBcdTY4YWZcdTZjNDBcdTc4ODdcdTc5OGVcdTdhMGJcdTdkZTBcdTgyNDdcdThhMDJcdThhZTZcdThl''@;'; put 'put ''NDRcdTkwMTMiXSxbIjkzNDAiLCJcdTkwYjhcdTkxMmRcdTkxZDhcdTlmMGVcdTZjZTVcdTY0NThcdTY0ZTJcdTY1NzVcdTZlZjRcdTc2ODRcdTdiMWJcdTkwNjlcdTkzZDFcdTZlYmFcdTU0ZjJcdTVmYjlcdTY0YTRcdThmNGRcdThmZWRcdTkyNDRcdTUxNzhcdTU4NmJcdTU5MjlcdTVjNTVc''@;'; put 'put ''dTVlOTdcdTZkZmJcdTdlOGZcdTc1MWNcdThjYmNcdThlZTJcdTk4NWJcdTcwYjlcdTRmMWRcdTZiYmZcdTZmYjFcdTc1MzBcdTk2ZmJcdTUxNGVcdTU0MTBcdTU4MzVcdTU4NTdcdTU5YWNcdTVjNjBcdTVmOTJcdTY1OTdcdTY3NWNcdTZlMjFcdTc2N2JcdTgzZGZcdThjZWRcdTkwMTRcdTkw''@;'; put 'put ''ZmRcdTkzNGRcdTc4MjVcdTc4M2FcdTUyYWFcdTVlYTZcdTU3MWZcdTU5NzRcdTYwMTJcdTUwMTJcdTUxNWFcdTUxYWMiXSxbIjkzODAiLCJcdTUxY2RcdTUyMDBcdTU1MTBcdTU4NTRcdTU4NThcdTU5NTdcdTViOTVcdTVjZjZcdTVkOGJcdTYwYmNcdTYyOTVcdTY0MmRcdTY3NzFcdTY4NDNc''@;'; put 'put ''dTY4YmNcdTY4ZGZcdTc2ZDdcdTZkZDhcdTZlNmZcdTZkOWJcdTcwNmZcdTcxYzhcdTVmNTNcdTc1ZDhcdTc5NzdcdTdiNDlcdTdiNTRcdTdiNTJcdTdjZDZcdTdkNzFcdTUyMzBcdTg0NjNcdTg1NjlcdTg1ZTRcdThhMGVcdThiMDRcdThjNDZcdThlMGZcdTkwMDNcdTkwMGZcdTk0MTlcdTk2''@;'; put 'put ''NzZcdTk4MmRcdTlhMzBcdTk1ZDhcdTUwY2RcdTUyZDVcdTU0MGNcdTU4MDJcdTVjMGVcdTYxYTdcdTY0OWVcdTZkMWVcdTc3YjNcdTdhZTVcdTgwZjRcdTg0MDRcdTkwNTNcdTkyODVcdTVjZTBcdTlkMDdcdTUzM2ZcdTVmOTdcdTVmYjNcdTZkOWNcdTcyNzlcdTc3NjNcdTc5YmZcdTdiZTRc''@;'; put 'put ''dTZiZDJcdTcyZWNcdThhYWRcdTY4MDNcdTZhNjFcdTUxZjhcdTdhODFcdTY5MzRcdTVjNGFcdTljZjZcdTgyZWJcdTViYzVcdTkxNDlcdTcwMWVcdTU2NzhcdTVjNmZcdTYwYzdcdTY1NjZcdTZjOGNcdThjNWFcdTkwNDFcdTk4MTNcdTU0NTFcdTY2YzdcdTkyMGRcdTU5NDhcdTkwYTNcdTUx''@;'; put 'put ''ODVcdTRlNGRcdTUxZWFcdTg1OTlcdThiMGVcdTcwNThcdTYzN2FcdTkzNGJcdTY5NjJcdTk5YjRcdTdlMDRcdTc1NzdcdTUzNTdcdTY5NjBcdThlZGZcdTk2ZTNcdTZjNWRcdTRlOGNcdTVjM2NcdTVmMTBcdThmZTlcdTUzMDJcdThjZDFcdTgwODlcdTg2NzlcdTVlZmZcdTY1ZTVcdTRlNzNc''@;'; put 'put ''dTUxNjUiXSxbIjk0NDAiLCJcdTU5ODJcdTVjM2ZcdTk3ZWVcdTRlZmJcdTU5OGFcdTVmY2RcdThhOGRcdTZmZTFcdTc5YjBcdTc5NjJcdTViZTdcdTg0NzFcdTczMmJcdTcxYjFcdTVlNzRcdTVmZjVcdTYzN2JcdTY0OWFcdTcxYzNcdTdjOThcdTRlNDNcdTVlZmNcdTRlNGJcdTU3ZGNcdTU2''@;'; put 'put ''YTJcdTYwYTlcdTZmYzNcdTdkMGRcdTgwZmRcdTgxMzNcdTgxYmZcdThmYjJcdTg5OTdcdTg2YTRcdTVkZjRcdTYyOGFcdTY0YWRcdTg5ODdcdTY3NzdcdTZjZTJcdTZkM2VcdTc0MzZcdTc4MzRcdTVhNDZcdTdmNzVcdTgyYWRcdTk5YWNcdTRmZjNcdTVlYzNcdTYyZGRcdTYzOTJcdTY1NTdc''@;'; put 'put ''dTY3NmZcdTc2YzNcdTcyNGNcdTgwY2NcdTgwYmFcdThmMjlcdTkxNGRcdTUwMGRcdTU3ZjlcdTVhOTJcdTY4ODUiXSxbIjk0ODAiLCJcdTY5NzNcdTcxNjRcdTcyZmRcdThjYjdcdTU4ZjJcdThjZTBcdTk2NmFcdTkwMTlcdTg3N2ZcdTc5ZTRcdTc3ZTdcdTg0MjlcdTRmMmZcdTUyNjVcdTUz''@;'; put 'put ''NWFcdTYyY2RcdTY3Y2ZcdTZjY2FcdTc2N2RcdTdiOTRcdTdjOTVcdTgyMzZcdTg1ODRcdThmZWJcdTY2ZGRcdTZmMjBcdTcyMDZcdTdlMWJcdTgzYWJcdTk5YzFcdTllYTZcdTUxZmRcdTdiYjFcdTc4NzJcdTdiYjhcdTgwODdcdTdiNDhcdTZhZThcdTVlNjFcdTgwOGNcdTc1NTFcdTc1NjBc''@;'; put 'put ''dTUxNmJcdTkyNjJcdTZlOGNcdTc2N2FcdTkxOTdcdTlhZWFcdTRmMTBcdTdmNzBcdTYyOWNcdTdiNGZcdTk1YTVcdTljZTlcdTU2N2FcdTU4NTlcdTg2ZTRcdTk2YmNcdTRmMzRcdTUyMjRcdTUzNGFcdTUzY2RcdTUzZGJcdTVlMDZcdTY0MmNcdTY1OTFcdTY3N2ZcdTZjM2VcdTZjNGVcdTcy''@;'; put 'put ''NDhcdTcyYWZcdTczZWRcdTc1NTRcdTdlNDFcdTgyMmNcdTg1ZTlcdThjYTlcdTdiYzRcdTkxYzZcdTcxNjlcdTk4MTJcdTk4ZWZcdTYzM2RcdTY2NjlcdTc1NmFcdTc2ZTRcdTc4ZDBcdTg1NDNcdTg2ZWVcdTUzMmFcdTUzNTFcdTU0MjZcdTU5ODNcdTVlODdcdTVmN2NcdTYwYjJcdTYyNDlc''@;'; put 'put ''dTYyNzlcdTYyYWJcdTY1OTBcdTZiZDRcdTZjY2NcdTc1YjJcdTc2YWVcdTc4OTFcdTc5ZDhcdTdkY2JcdTdmNzdcdTgwYTVcdTg4YWJcdThhYjlcdThjYmJcdTkwN2ZcdTk3NWVcdTk4ZGJcdTZhMGJcdTdjMzhcdTUwOTlcdTVjM2VcdTVmYWVcdTY3ODdcdTZiZDhcdTc0MzVcdTc3MDlcdTdm''@;'; put 'put ''OGUiXSxbIjk1NDAiLCJcdTlmM2JcdTY3Y2FcdTdhMTdcdTUzMzlcdTc1OGJcdTlhZWRcdTVmNjZcdTgxOWRcdTgzZjFcdTgwOThcdTVmM2NcdTVmYzVcdTc1NjJcdTdiNDZcdTkwM2NcdTY4NjdcdTU5ZWJcdTVhOWJcdTdkMTBcdTc2N2VcdThiMmNcdTRmZjVcdTVmNmFcdTZhMTlcdTZjMzdc''@;'; put 'put ''dTZmMDJcdTc0ZTJcdTc5NjhcdTg4NjhcdThhNTVcdThjNzlcdTVlZGZcdTYzY2ZcdTc1YzVcdTc5ZDJcdTgyZDdcdTkzMjhcdTkyZjJcdTg0OWNcdTg2ZWRcdTljMmRcdTU0YzFcdTVmNmNcdTY1OGNcdTZkNWNcdTcwMTVcdThjYTdcdThjZDNcdTk4M2JcdTY1NGZcdTc0ZjZcdTRlMGRcdTRl''@;'; put 'put ''ZDhcdTU3ZTBcdTU5MmJcdTVhNjZcdTViY2NcdTUxYThcdTVlMDNcdTVlOWNcdTYwMTZcdTYyNzZcdTY1NzciXSxbIjk1ODAiLCJcdTY1YTdcdTY2NmVcdTZkNmVcdTcyMzZcdTdiMjZcdTgxNTBcdTgxOWFcdTgyOTlcdThiNWNcdThjYTBcdThjZTZcdThkNzRcdTk2MWNcdTk2NDRcdTRmYWVc''@;'; put 'put ''dTY0YWJcdTZiNjZcdTgyMWVcdTg0NjFcdTg1NmFcdTkwZThcdTVjMDFcdTY5NTNcdTk4YThcdTg0N2FcdTg1NTdcdTRmMGZcdTUyNmZcdTVmYTlcdTVlNDVcdTY3MGRcdTc5OGZcdTgxNzlcdTg5MDdcdTg5ODZcdTZkZjVcdTVmMTdcdTYyNTVcdTZjYjhcdTRlY2ZcdTcyNjlcdTliOTJcdTUy''@;'; put 'put ''MDZcdTU0M2JcdTU2NzRcdTU4YjNcdTYxYTRcdTYyNmVcdTcxMWFcdTU5NmVcdTdjODlcdTdjZGVcdTdkMWJcdTk2ZjBcdTY1ODdcdTgwNWVcdTRlMTlcdTRmNzVcdTUxNzVcdTU4NDBcdTVlNjNcdTVlNzNcdTVmMGFcdTY3YzRcdTRlMjZcdTg1M2RcdTk1ODlcdTk2NWJcdTdjNzNcdTk4MDFc''@;'; put 'put ''dTUwZmJcdTU4YzFcdTc2NTZcdTc4YTdcdTUyMjVcdTc3YTVcdTg1MTFcdTdiODZcdTUwNGZcdTU5MDlcdTcyNDdcdTdiYzdcdTdkZThcdThmYmFcdThmZDRcdTkwNGRcdTRmYmZcdTUyYzlcdTVhMjlcdTVmMDFcdTk3YWRcdTRmZGRcdTgyMTdcdTkyZWFcdTU3MDNcdTYzNTVcdTZiNjlcdTc1''@;'; put 'put ''MmJcdTg4ZGNcdThmMTRcdTdhNDJcdTUyZGZcdTU4OTNcdTYxNTVcdTYyMGFcdTY2YWVcdTZiY2RcdTdjM2ZcdTgzZTlcdTUwMjNcdTRmZjhcdTUzMDVcdTU0NDZcdTU4MzFcdTU5NDlcdTViOWRcdTVjZjBcdTVjZWZcdTVkMjlcdTVlOTZcdTYyYjFcdTYzNjdcdTY1M2VcdTY1YjlcdTY3MGIi''@;'; put 'put ''XSxbIjk2NDAiLCJcdTZjZDVcdTZjZTFcdTcwZjlcdTc4MzJcdTdlMmJcdTgwZGVcdTgyYjNcdTg0MGNcdTg0ZWNcdTg3MDJcdTg5MTJcdThhMmFcdThjNGFcdTkwYTZcdTkyZDJcdTk4ZmRcdTljZjNcdTlkNmNcdTRlNGZcdTRlYTFcdTUwOGRcdTUyNTZcdTU3NGFcdTU5YThcdTVlM2RcdTVm''@;'; put 'put ''ZDhcdTVmZDlcdTYyM2ZcdTY2YjRcdTY3MWJcdTY3ZDBcdTY4ZDJcdTUxOTJcdTdkMjFcdTgwYWFcdTgxYThcdThiMDBcdThjOGNcdThjYmZcdTkyN2VcdTk2MzJcdTU0MjBcdTk4MmNcdTUzMTdcdTUwZDVcdTUzNWNcdTU4YThcdTY0YjJcdTY3MzRcdTcyNjdcdTc3NjZcdTdhNDZcdTkxZTZc''@;'; put 'put ''dTUyYzNcdTZjYTFcdTZiODZcdTU4MDBcdTVlNGNcdTU5NTRcdTY3MmNcdTdmZmJcdTUxZTFcdTc2YzYiXSxbIjk2ODAiLCJcdTY0NjlcdTc4ZThcdTliNTRcdTllYmJcdTU3Y2JcdTU5YjlcdTY2MjdcdTY3OWFcdTZiY2VcdTU0ZTlcdTY5ZDlcdTVlNTVcdTgxOWNcdTY3OTVcdTliYWFcdTY3''@;'; put 'put ''ZmVcdTljNTJcdTY4NWRcdTRlYTZcdTRmZTNcdTUzYzhcdTYyYjlcdTY3MmJcdTZjYWJcdThmYzRcdTRmYWRcdTdlNmRcdTllYmZcdTRlMDdcdTYxNjJcdTZlODBcdTZmMmJcdTg1MTNcdTU0NzNcdTY3MmFcdTliNDVcdTVkZjNcdTdiOTVcdTVjYWNcdTViYzZcdTg3MWNcdTZlNGFcdTg0ZDFc''@;'; put 'put ''dTdhMTRcdTgxMDhcdTU5OTlcdTdjOGRcdTZjMTFcdTc3MjBcdTUyZDlcdTU5MjJcdTcxMjFcdTcyNWZcdTc3ZGJcdTk3MjdcdTlkNjFcdTY5MGJcdTVhN2ZcdTVhMThcdTUxYTVcdTU0MGRcdTU0N2RcdTY2MGVcdTc2ZGZcdThmZjdcdTkyOThcdTljZjRcdTU5ZWFcdTcyNWRcdTZlYzVcdTUx''@;'; put 'put ''NGRcdTY4YzlcdTdkYmZcdTdkZWNcdTk3NjJcdTllYmFcdTY0NzhcdTZhMjFcdTgzMDJcdTU5ODRcdTViNWZcdTZiZGJcdTczMWJcdTc2ZjJcdTdkYjJcdTgwMTdcdTg0OTlcdTUxMzJcdTY3MjhcdTllZDlcdTc2ZWVcdTY3NjJcdTUyZmZcdTk5MDVcdTVjMjRcdTYyM2JcdTdjN2VcdThjYjBc''@;'; put 'put ''dTU1NGZcdTYwYjZcdTdkMGJcdTk1ODBcdTUzMDFcdTRlNWZcdTUxYjZcdTU5MWNcdTcyM2FcdTgwMzZcdTkxY2VcdTVmMjVcdTc3ZTJcdTUzODRcdTVmNzlcdTdkMDRcdTg1YWNcdThhMzNcdThlOGRcdTk3NTZcdTY3ZjNcdTg1YWVcdTk0NTNcdTYxMDlcdTYxMDhcdTZjYjlcdTc2NTIiXSxb''@;'; put 'put ''Ijk3NDAiLCJcdThhZWRcdThmMzhcdTU1MmZcdTRmNTFcdTUxMmFcdTUyYzdcdTUzY2JcdTViYTVcdTVlN2RcdTYwYTBcdTYxODJcdTYzZDZcdTY3MDlcdTY3ZGFcdTZlNjdcdTZkOGNcdTczMzZcdTczMzdcdTc1MzFcdTc5NTBcdTg4ZDVcdThhOThcdTkwNGFcdTkwOTFcdTkwZjVcdTk2YzRc''@;'; put 'put ''dTg3OGRcdTU5MTVcdTRlODhcdTRmNTlcdTRlMGVcdThhODlcdThmM2ZcdTk4MTBcdTUwYWRcdTVlN2NcdTU5OTZcdTViYjlcdTVlYjhcdTYzZGFcdTYzZmFcdTY0YzFcdTY2ZGNcdTY5NGFcdTY5ZDhcdTZkMGJcdTZlYjZcdTcxOTRcdTc1MjhcdTdhYWZcdTdmOGFcdTgwMDBcdTg0NDlcdTg0''@;'; put 'put ''YzlcdTg5ODFcdThiMjFcdThlMGFcdTkwNjVcdTk2N2RcdTk5MGFcdTYxN2VcdTYyOTFcdTZiMzIiXSxbIjk3ODAiLCJcdTZjODNcdTZkNzRcdTdmY2NcdTdmZmNcdTZkYzBcdTdmODVcdTg3YmFcdTg4ZjhcdTY3NjVcdTgzYjFcdTk4M2NcdTk2ZjdcdTZkMWJcdTdkNjFcdTg0M2RcdTkxNmFc''@;'; put 'put ''dTRlNzFcdTUzNzVcdTVkNTBcdTZiMDRcdTZmZWJcdTg1Y2RcdTg2MmRcdTg5YTdcdTUyMjlcdTU0MGZcdTVjNjVcdTY3NGVcdTY4YThcdTc0MDZcdTc0ODNcdTc1ZTJcdTg4Y2ZcdTg4ZTFcdTkxY2NcdTk2ZTJcdTk2NzhcdTVmOGJcdTczODdcdTdhY2JcdTg0NGVcdTYzYTBcdTc1NjVcdTUy''@;'; put 'put ''ODlcdTZkNDFcdTZlOWNcdTc0MDlcdTc1NTlcdTc4NmJcdTdjOTJcdTk2ODZcdTdhZGNcdTlmOGRcdTRmYjZcdTYxNmVcdTY1YzVcdTg2NWNcdTRlODZcdTRlYWVcdTUwZGFcdTRlMjFcdTUxY2NcdTViZWVcdTY1OTlcdTY4ODFcdTZkYmNcdTczMWZcdTc2NDJcdTc3YWRcdTdhMWNcdTdjZTdc''@;'; put 'put ''dTgyNmZcdThhZDJcdTkwN2NcdTkxY2ZcdTk2NzVcdTk4MThcdTUyOWJcdTdkZDFcdTUwMmJcdTUzOThcdTY3OTdcdTZkY2JcdTcxZDBcdTc0MzNcdTgxZThcdThmMmFcdTk2YTNcdTljNTdcdTllOWZcdTc0NjBcdTU4NDFcdTZkOTlcdTdkMmZcdTk4NWVcdTRlZTRcdTRmMzZcdTRmOGJcdTUx''@;'; put 'put ''YjdcdTUyYjFcdTVkYmFcdTYwMWNcdTczYjJcdTc5M2NcdTgyZDNcdTkyMzRcdTk2YjdcdTk2ZjZcdTk3MGFcdTllOTdcdTlmNjJcdTY2YTZcdTZiNzRcdTUyMTdcdTUyYTNcdTcwYzhcdTg4YzJcdTVlYzlcdTYwNGJcdTYxOTBcdTZmMjNcdTcxNDlcdTdjM2VcdTdkZjRcdTgwNmYiXSxbIjk4''@;'; put 'put ''NDAiLCJcdTg0ZWVcdTkwMjNcdTkzMmNcdTU0NDJcdTliNmZcdTZhZDNcdTcwODlcdThjYzJcdThkZWZcdTk3MzJcdTUyYjRcdTVhNDFcdTVlY2FcdTVmMDRcdTY3MTdcdTY5N2NcdTY5OTRcdTZkNmFcdTZmMGZcdTcyNjJcdTcyZmNcdTdiZWRcdTgwMDFcdTgwN2VcdTg3NGJcdTkwY2VcdTUx''@;'; put 'put ''NmRcdTllOTNcdTc5ODRcdTgwOGJcdTkzMzJcdThhZDZcdTUwMmRcdTU0OGNcdThhNzFcdTZiNmFcdThjYzRcdTgxMDdcdTYwZDFcdTY3YTBcdTlkZjJcdTRlOTlcdTRlOThcdTljMTBcdThhNmJcdTg1YzFcdTg1NjhcdTY5MDBcdTZlN2VcdTc4OTdcdTgxNTUiXSxbIjk4OWYiLCJcdTVmMGNc''@;'; put 'put ''dTRlMTBcdTRlMTVcdTRlMmFcdTRlMzFcdTRlMzZcdTRlM2NcdTRlM2ZcdTRlNDJcdTRlNTZcdTRlNThcdTRlODJcdTRlODVcdThjNmJcdTRlOGFcdTgyMTJcdTVmMGRcdTRlOGVcdTRlOWVcdTRlOWZcdTRlYTBcdTRlYTJcdTRlYjBcdTRlYjNcdTRlYjZcdTRlY2VcdTRlY2RcdTRlYzRcdTRl''@;'; put 'put ''YzZcdTRlYzJcdTRlZDdcdTRlZGVcdTRlZWRcdTRlZGZcdTRlZjdcdTRmMDlcdTRmNWFcdTRmMzBcdTRmNWJcdTRmNWRcdTRmNTdcdTRmNDdcdTRmNzZcdTRmODhcdTRmOGZcdTRmOThcdTRmN2JcdTRmNjlcdTRmNzBcdTRmOTFcdTRmNmZcdTRmODZcdTRmOTZcdTUxMThcdTRmZDRcdTRmZGZc''@;'; put 'put ''dTRmY2VcdTRmZDhcdTRmZGJcdTRmZDFcdTRmZGFcdTRmZDBcdTRmZTRcdTRmZTVcdTUwMWFcdTUwMjhcdTUwMTRcdTUwMmFcdTUwMjVcdTUwMDVcdTRmMWNcdTRmZjZcdTUwMjFcdTUwMjlcdTUwMmNcdTRmZmVcdTRmZWZcdTUwMTFcdTUwMDZcdTUwNDNcdTUwNDdcdTY3MDNcdTUwNTVcdTUw''@;'; put 'put ''NTBcdTUwNDhcdTUwNWFcdTUwNTZcdTUwNmNcdTUwNzhcdTUwODBcdTUwOWFcdTUwODVcdTUwYjRcdTUwYjIiXSxbIjk5NDAiLCJcdTUwYzlcdTUwY2FcdTUwYjNcdTUwYzJcdTUwZDZcdTUwZGVcdTUwZTVcdTUwZWRcdTUwZTNcdTUwZWVcdTUwZjlcdTUwZjVcdTUxMDlcdTUxMDFcdTUxMDJc''@;'; put 'put ''dTUxMTZcdTUxMTVcdTUxMTRcdTUxMWFcdTUxMjFcdTUxM2FcdTUxMzdcdTUxM2NcdTUxM2JcdTUxM2ZcdTUxNDBcdTUxNTJcdTUxNGNcdTUxNTRcdTUxNjJcdTdhZjhcdTUxNjlcdTUxNmFcdTUxNmVcdTUxODBcdTUxODJcdTU2ZDhcdTUxOGNcdTUxODlcdTUxOGZcdTUxOTFcdTUxOTNcdTUx''@;'; put 'put ''OTVcdTUxOTZcdTUxYTRcdTUxYTZcdTUxYTJcdTUxYTlcdTUxYWFcdTUxYWJcdTUxYjNcdTUxYjFcdTUxYjJcdTUxYjBcdTUxYjVcdTUxYmRcdTUxYzVcdTUxYzlcdTUxZGJcdTUxZTBcdTg2NTVcdTUxZTlcdTUxZWQiXSxbIjk5ODAiLCJcdTUxZjBcdTUxZjVcdTUxZmVcdTUyMDRcdTUyMGJc''@;'; put 'put ''dTUyMTRcdTUyMGVcdTUyMjdcdTUyMmFcdTUyMmVcdTUyMzNcdTUyMzlcdTUyNGZcdTUyNDRcdTUyNGJcdTUyNGNcdTUyNWVcdTUyNTRcdTUyNmFcdTUyNzRcdTUyNjlcdTUyNzNcdTUyN2ZcdTUyN2RcdTUyOGRcdTUyOTRcdTUyOTJcdTUyNzFcdTUyODhcdTUyOTFcdThmYThcdThmYTdcdTUy''@;'; put 'put ''YWNcdTUyYWRcdTUyYmNcdTUyYjVcdTUyYzFcdTUyY2RcdTUyZDdcdTUyZGVcdTUyZTNcdTUyZTZcdTk4ZWRcdTUyZTBcdTUyZjNcdTUyZjVcdTUyZjhcdTUyZjlcdTUzMDZcdTUzMDhcdTc1MzhcdTUzMGRcdTUzMTBcdTUzMGZcdTUzMTVcdTUzMWFcdTUzMjNcdTUzMmZcdTUzMzFcdTUzMzNc''@;'; put 'put ''dTUzMzhcdTUzNDBcdTUzNDZcdTUzNDVcdTRlMTdcdTUzNDlcdTUzNGRcdTUxZDZcdTUzNWVcdTUzNjlcdTUzNmVcdTU5MThcdTUzN2JcdTUzNzdcdTUzODJcdTUzOTZcdTUzYTBcdTUzYTZcdTUzYTVcdTUzYWVcdTUzYjBcdTUzYjZcdTUzYzNcdTdjMTJcdTk2ZDlcdTUzZGZcdTY2ZmNcdTcx''@;'; put 'put ''ZWVcdTUzZWVcdTUzZThcdTUzZWRcdTUzZmFcdTU0MDFcdTU0M2RcdTU0NDBcdTU0MmNcdTU0MmRcdTU0M2NcdTU0MmVcdTU0MzZcdTU0MjlcdTU0MWRcdTU0NGVcdTU0OGZcdTU0NzVcdTU0OGVcdTU0NWZcdTU0NzFcdTU0NzdcdTU0NzBcdTU0OTJcdTU0N2JcdTU0ODBcdTU0NzZcdTU0ODRc''@;'; put 'put ''dTU0OTBcdTU0ODZcdTU0YzdcdTU0YTJcdTU0YjhcdTU0YTVcdTU0YWNcdTU0YzRcdTU0YzhcdTU0YTgiXSxbIjlhNDAiLCJcdTU0YWJcdTU0YzJcdTU0YTRcdTU0YmVcdTU0YmNcdTU0ZDhcdTU0ZTVcdTU0ZTZcdTU1MGZcdTU1MTRcdTU0ZmRcdTU0ZWVcdTU0ZWRcdTU0ZmFcdTU0ZTJcdTU1''@;'; put 'put ''MzlcdTU1NDBcdTU1NjNcdTU1NGNcdTU1MmVcdTU1NWNcdTU1NDVcdTU1NTZcdTU1NTdcdTU1MzhcdTU1MzNcdTU1NWRcdTU1OTlcdTU1ODBcdTU0YWZcdTU1OGFcdTU1OWZcdTU1N2JcdTU1N2VcdTU1OThcdTU1OWVcdTU1YWVcdTU1N2NcdTU1ODNcdTU1YTlcdTU1ODdcdTU1YThcdTU1ZGFc''@;'; put 'put ''dTU1YzVcdTU1ZGZcdTU1YzRcdTU1ZGNcdTU1ZTRcdTU1ZDRcdTU2MTRcdTU1ZjdcdTU2MTZcdTU1ZmVcdTU1ZmRcdTU2MWJcdTU1ZjlcdTU2NGVcdTU2NTBcdTcxZGZcdTU2MzRcdTU2MzZcdTU2MzJcdTU2MzgiXSxbIjlhODAiLCJcdTU2NmJcdTU2NjRcdTU2MmZcdTU2NmNcdTU2NmFcdTU2''@;'; put 'put ''ODZcdTU2ODBcdTU2OGFcdTU2YTBcdTU2OTRcdTU2OGZcdTU2YTVcdTU2YWVcdTU2YjZcdTU2YjRcdTU2YzJcdTU2YmNcdTU2YzFcdTU2YzNcdTU2YzBcdTU2YzhcdTU2Y2VcdTU2ZDFcdTU2ZDNcdTU2ZDdcdTU2ZWVcdTU2ZjlcdTU3MDBcdTU2ZmZcdTU3MDRcdTU3MDlcdTU3MDhcdTU3MGJc''@;'; put 'put ''dTU3MGRcdTU3MTNcdTU3MThcdTU3MTZcdTU1YzdcdTU3MWNcdTU3MjZcdTU3MzdcdTU3MzhcdTU3NGVcdTU3M2JcdTU3NDBcdTU3NGZcdTU3NjlcdTU3YzBcdTU3ODhcdTU3NjFcdTU3N2ZcdTU3ODlcdTU3OTNcdTU3YTBcdTU3YjNcdTU3YTRcdTU3YWFcdTU3YjBcdTU3YzNcdTU3YzZcdTU3''@;'; put 'put ''ZDRcdTU3ZDJcdTU3ZDNcdTU4MGFcdTU3ZDZcdTU3ZTNcdTU4MGJcdTU4MTlcdTU4MWRcdTU4NzJcdTU4MjFcdTU4NjJcdTU4NGJcdTU4NzBcdTZiYzBcdTU4NTJcdTU4M2RcdTU4NzlcdTU4ODVcdTU4YjlcdTU4OWZcdTU4YWJcdTU4YmFcdTU4ZGVcdTU4YmJcdTU4YjhcdTU4YWVcdTU4YzVc''@;'; put 'put ''dTU4ZDNcdTU4ZDFcdTU4ZDdcdTU4ZDlcdTU4ZDhcdTU4ZTVcdTU4ZGNcdTU4ZTRcdTU4ZGZcdTU4ZWZcdTU4ZmFcdTU4ZjlcdTU4ZmJcdTU4ZmNcdTU4ZmRcdTU5MDJcdTU5MGFcdTU5MTBcdTU5MWJcdTY4YTZcdTU5MjVcdTU5MmNcdTU5MmRcdTU5MzJcdTU5MzhcdTU5M2VcdTdhZDJcdTU5''@;'; put 'put ''NTVcdTU5NTBcdTU5NGVcdTU5NWFcdTU5NThcdTU5NjJcdTU5NjBcdTU5NjdcdTU5NmNcdTU5NjkiXSxbIjliNDAiLCJcdTU5NzhcdTU5ODFcdTU5OWRcdTRmNWVcdTRmYWJcdTU5YTNcdTU5YjJcdTU5YzZcdTU5ZThcdTU5ZGNcdTU5OGRcdTU5ZDlcdTU5ZGFcdTVhMjVcdTVhMWZcdTVhMTFc''@;'; put 'put ''dTVhMWNcdTVhMDlcdTVhMWFcdTVhNDBcdTVhNmNcdTVhNDlcdTVhMzVcdTVhMzZcdTVhNjJcdTVhNmFcdTVhOWFcdTVhYmNcdTVhYmVcdTVhY2JcdTVhYzJcdTVhYmRcdTVhZTNcdTVhZDdcdTVhZTZcdTVhZTlcdTVhZDZcdTVhZmFcdTVhZmJcdTViMGNcdTViMGJcdTViMTZcdTViMzJcdTVh''@;'; put 'put ''ZDBcdTViMmFcdTViMzZcdTViM2VcdTViNDNcdTViNDVcdTViNDBcdTViNTFcdTViNTVcdTViNWFcdTViNWJcdTViNjVcdTViNjlcdTViNzBcdTViNzNcdTViNzVcdTViNzhcdTY1ODhcdTViN2FcdTViODAiXSxbIjliODAiLCJcdTViODNcdTViYTZcdTViYjhcdTViYzNcdTViYzdcdTViYzlc''@;'; put 'put ''dTViZDRcdTViZDBcdTViZTRcdTViZTZcdTViZTJcdTViZGVcdTViZTVcdTViZWJcdTViZjBcdTViZjZcdTViZjNcdTVjMDVcdTVjMDdcdTVjMDhcdTVjMGRcdTVjMTNcdTVjMjBcdTVjMjJcdTVjMjhcdTVjMzhcdTVjMzlcdTVjNDFcdTVjNDZcdTVjNGVcdTVjNTNcdTVjNTBcdTVjNGZcdTVi''@;'; put 'put ''NzFcdTVjNmNcdTVjNmVcdTRlNjJcdTVjNzZcdTVjNzlcdTVjOGNcdTVjOTFcdTVjOTRcdTU5OWJcdTVjYWJcdTVjYmJcdTVjYjZcdTVjYmNcdTVjYjdcdTVjYzVcdTVjYmVcdTVjYzdcdTVjZDlcdTVjZTlcdTVjZmRcdTVjZmFcdTVjZWRcdTVkOGNcdTVjZWFcdTVkMGJcdTVkMTVcdTVkMTdc''@;'; put 'put ''dTVkNWNcdTVkMWZcdTVkMWJcdTVkMTFcdTVkMTRcdTVkMjJcdTVkMWFcdTVkMTlcdTVkMThcdTVkNGNcdTVkNTJcdTVkNGVcdTVkNGJcdTVkNmNcdTVkNzNcdTVkNzZcdTVkODdcdTVkODRcdTVkODJcdTVkYTJcdTVkOWRcdTVkYWNcdTVkYWVcdTVkYmRcdTVkOTBcdTVkYjdcdTVkYmNcdTVk''@;'; put 'put ''YzlcdTVkY2RcdTVkZDNcdTVkZDJcdTVkZDZcdTVkZGJcdTVkZWJcdTVkZjJcdTVkZjVcdTVlMGJcdTVlMWFcdTVlMTlcdTVlMTFcdTVlMWJcdTVlMzZcdTVlMzdcdTVlNDRcdTVlNDNcdTVlNDBcdTVlNGVcdTVlNTdcdTVlNTRcdTVlNWZcdTVlNjJcdTVlNjRcdTVlNDdcdTVlNzVcdTVlNzZc''@;'; put 'put ''dTVlN2FcdTllYmNcdTVlN2ZcdTVlYTBcdTVlYzFcdTVlYzJcdTVlYzhcdTVlZDBcdTVlY2YiXSxbIjljNDAiLCJcdTVlZDZcdTVlZTNcdTVlZGRcdTVlZGFcdTVlZGJcdTVlZTJcdTVlZTFcdTVlZThcdTVlZTlcdTVlZWNcdTVlZjFcdTVlZjNcdTVlZjBcdTVlZjRcdTVlZjhcdTVlZmVcdTVm''@;'; put 'put ''MDNcdTVmMDlcdTVmNWRcdTVmNWNcdTVmMGJcdTVmMTFcdTVmMTZcdTVmMjlcdTVmMmRcdTVmMzhcdTVmNDFcdTVmNDhcdTVmNGNcdTVmNGVcdTVmMmZcdTVmNTFcdTVmNTZcdTVmNTdcdTVmNTlcdTVmNjFcdTVmNmRcdTVmNzNcdTVmNzdcdTVmODNcdTVmODJcdTVmN2ZcdTVmOGFcdTVmODhc''@;'; put 'put ''dTVmOTFcdTVmODdcdTVmOWVcdTVmOTlcdTVmOThcdTVmYTBcdTVmYThcdTVmYWRcdTVmYmNcdTVmZDZcdTVmZmJcdTVmZTRcdTVmZjhcdTVmZjFcdTVmZGRcdTYwYjNcdTVmZmZcdTYwMjFcdTYwNjAiXSxbIjljODAiLCJcdTYwMTlcdTYwMTBcdTYwMjlcdTYwMGVcdTYwMzFcdTYwMWJcdTYw''@;'; put 'put ''MTVcdTYwMmJcdTYwMjZcdTYwMGZcdTYwM2FcdTYwNWFcdTYwNDFcdTYwNmFcdTYwNzdcdTYwNWZcdTYwNGFcdTYwNDZcdTYwNGRcdTYwNjNcdTYwNDNcdTYwNjRcdTYwNDJcdTYwNmNcdTYwNmJcdTYwNTlcdTYwODFcdTYwOGRcdTYwZTdcdTYwODNcdTYwOWFcdTYwODRcdTYwOWJcdTYwOTZc''@;'; put 'put ''dTYwOTdcdTYwOTJcdTYwYTdcdTYwOGJcdTYwZTFcdTYwYjhcdTYwZTBcdTYwZDNcdTYwYjRcdTVmZjBcdTYwYmRcdTYwYzZcdTYwYjVcdTYwZDhcdTYxNGRcdTYxMTVcdTYxMDZcdTYwZjZcdTYwZjdcdTYxMDBcdTYwZjRcdTYwZmFcdTYxMDNcdTYxMjFcdTYwZmJcdTYwZjFcdTYxMGRcdTYx''@;'; put 'put ''MGVcdTYxNDdcdTYxM2VcdTYxMjhcdTYxMjdcdTYxNGFcdTYxM2ZcdTYxM2NcdTYxMmNcdTYxMzRcdTYxM2RcdTYxNDJcdTYxNDRcdTYxNzNcdTYxNzdcdTYxNThcdTYxNTlcdTYxNWFcdTYxNmJcdTYxNzRcdTYxNmZcdTYxNjVcdTYxNzFcdTYxNWZcdTYxNWRcdTYxNTNcdTYxNzVcdTYxOTlc''@;'; put 'put ''dTYxOTZcdTYxODdcdTYxYWNcdTYxOTRcdTYxOWFcdTYxOGFcdTYxOTFcdTYxYWJcdTYxYWVcdTYxY2NcdTYxY2FcdTYxYzlcdTYxZjdcdTYxYzhcdTYxYzNcdTYxYzZcdTYxYmFcdTYxY2JcdTdmNzlcdTYxY2RcdTYxZTZcdTYxZTNcdTYxZjZcdTYxZmFcdTYxZjRcdTYxZmZcdTYxZmRcdTYx''@;'; put 'put ''ZmNcdTYxZmVcdTYyMDBcdTYyMDhcdTYyMDlcdTYyMGRcdTYyMGNcdTYyMTRcdTYyMWIiXSxbIjlkNDAiLCJcdTYyMWVcdTYyMjFcdTYyMmFcdTYyMmVcdTYyMzBcdTYyMzJcdTYyMzNcdTYyNDFcdTYyNGVcdTYyNWVcdTYyNjNcdTYyNWJcdTYyNjBcdTYyNjhcdTYyN2NcdTYyODJcdTYyODlc''@;'; put 'put ''dTYyN2VcdTYyOTJcdTYyOTNcdTYyOTZcdTYyZDRcdTYyODNcdTYyOTRcdTYyZDdcdTYyZDFcdTYyYmJcdTYyY2ZcdTYyZmZcdTYyYzZcdTY0ZDRcdTYyYzhcdTYyZGNcdTYyY2NcdTYyY2FcdTYyYzJcdTYyYzdcdTYyOWJcdTYyYzlcdTYzMGNcdTYyZWVcdTYyZjFcdTYzMjdcdTYzMDJcdTYz''@;'; put 'put ''MDhcdTYyZWZcdTYyZjVcdTYzNTBcdTYzM2VcdTYzNGRcdTY0MWNcdTYzNGZcdTYzOTZcdTYzOGVcdTYzODBcdTYzYWJcdTYzNzZcdTYzYTNcdTYzOGZcdTYzODlcdTYzOWZcdTYzYjVcdTYzNmIiXSxbIjlkODAiLCJcdTYzNjlcdTYzYmVcdTYzZTlcdTYzYzBcdTYzYzZcdTYzZTNcdTYzYzlc''@;'; put 'put ''dTYzZDJcdTYzZjZcdTYzYzRcdTY0MTZcdTY0MzRcdTY0MDZcdTY0MTNcdTY0MjZcdTY0MzZcdTY1MWRcdTY0MTdcdTY0MjhcdTY0MGZcdTY0NjdcdTY0NmZcdTY0NzZcdTY0NGVcdTY1MmFcdTY0OTVcdTY0OTNcdTY0YTVcdTY0YTlcdTY0ODhcdTY0YmNcdTY0ZGFcdTY0ZDJcdTY0YzVcdTY0''@;'; put 'put ''YzdcdTY0YmJcdTY0ZDhcdTY0YzJcdTY0ZjFcdTY0ZTdcdTgyMDlcdTY0ZTBcdTY0ZTFcdTYyYWNcdTY0ZTNcdTY0ZWZcdTY1MmNcdTY0ZjZcdTY0ZjRcdTY0ZjJcdTY0ZmFcdTY1MDBcdTY0ZmRcdTY1MThcdTY1MWNcdTY1MDVcdTY1MjRcdTY1MjNcdTY1MmJcdTY1MzRcdTY1MzVcdTY1Mzdc''@;'; put 'put ''dTY1MzZcdTY1MzhcdTc1NGJcdTY1NDhcdTY1NTZcdTY1NTVcdTY1NGRcdTY1NThcdTY1NWVcdTY1NWRcdTY1NzJcdTY1NzhcdTY1ODJcdTY1ODNcdThiOGFcdTY1OWJcdTY1OWZcdTY1YWJcdTY1YjdcdTY1YzNcdTY1YzZcdTY1YzFcdTY1YzRcdTY1Y2NcdTY1ZDJcdTY1ZGJcdTY1ZDlcdTY1''@;'; put 'put ''ZTBcdTY1ZTFcdTY1ZjFcdTY3NzJcdTY2MGFcdTY2MDNcdTY1ZmJcdTY3NzNcdTY2MzVcdTY2MzZcdTY2MzRcdTY2MWNcdTY2NGZcdTY2NDRcdTY2NDlcdTY2NDFcdTY2NWVcdTY2NWRcdTY2NjRcdTY2NjdcdTY2NjhcdTY2NWZcdTY2NjJcdTY2NzBcdTY2ODNcdTY2ODhcdTY2OGVcdTY2ODlc''@;'; put 'put ''dTY2ODRcdTY2OThcdTY2OWRcdTY2YzFcdTY2YjlcdTY2YzlcdTY2YmVcdTY2YmMiXSxbIjllNDAiLCJcdTY2YzRcdTY2YjhcdTY2ZDZcdTY2ZGFcdTY2ZTBcdTY2M2ZcdTY2ZTZcdTY2ZTlcdTY2ZjBcdTY2ZjVcdTY2ZjdcdTY3MGZcdTY3MTZcdTY3MWVcdTY3MjZcdTY3MjdcdTk3MzhcdTY3''@;'; put 'put ''MmVcdTY3M2ZcdTY3MzZcdTY3NDFcdTY3MzhcdTY3MzdcdTY3NDZcdTY3NWVcdTY3NjBcdTY3NTlcdTY3NjNcdTY3NjRcdTY3ODlcdTY3NzBcdTY3YTlcdTY3N2NcdTY3NmFcdTY3OGNcdTY3OGJcdTY3YTZcdTY3YTFcdTY3ODVcdTY3YjdcdTY3ZWZcdTY3YjRcdTY3ZWNcdTY3YjNcdTY3ZTlc''@;'; put 'put ''dTY3YjhcdTY3ZTRcdTY3ZGVcdTY3ZGRcdTY3ZTJcdTY3ZWVcdTY3YjlcdTY3Y2VcdTY3YzZcdTY3ZTdcdTZhOWNcdTY4MWVcdTY4NDZcdTY4MjlcdTY4NDBcdTY4NGRcdTY4MzJcdTY4NGUiXSxbIjllODAiLCJcdTY4YjNcdTY4MmJcdTY4NTlcdTY4NjNcdTY4NzdcdTY4N2ZcdTY4OWZcdTY4''@;'; put 'put ''OGZcdTY4YWRcdTY4OTRcdTY4OWRcdTY4OWJcdTY4ODNcdTZhYWVcdTY4YjlcdTY4NzRcdTY4YjVcdTY4YTBcdTY4YmFcdTY5MGZcdTY4OGRcdTY4N2VcdTY5MDFcdTY4Y2FcdTY5MDhcdTY4ZDhcdTY5MjJcdTY5MjZcdTY4ZTFcdTY5MGNcdTY4Y2RcdTY4ZDRcdTY4ZTdcdTY4ZDVcdTY5MzZc''@;'; put 'put ''dTY5MTJcdTY5MDRcdTY4ZDdcdTY4ZTNcdTY5MjVcdTY4ZjlcdTY4ZTBcdTY4ZWZcdTY5MjhcdTY5MmFcdTY5MWFcdTY5MjNcdTY5MjFcdTY4YzZcdTY5NzlcdTY5NzdcdTY5NWNcdTY5NzhcdTY5NmJcdTY5NTRcdTY5N2VcdTY5NmVcdTY5MzlcdTY5NzRcdTY5M2RcdTY5NTlcdTY5MzBcdTY5''@;'; put 'put ''NjFcdTY5NWVcdTY5NWRcdTY5ODFcdTY5NmFcdTY5YjJcdTY5YWVcdTY5ZDBcdTY5YmZcdTY5YzFcdTY5ZDNcdTY5YmVcdTY5Y2VcdTViZThcdTY5Y2FcdTY5ZGRcdTY5YmJcdTY5YzNcdTY5YTdcdTZhMmVcdTY5OTFcdTY5YTBcdTY5OWNcdTY5OTVcdTY5YjRcdTY5ZGVcdTY5ZThcdTZhMDJc''@;'; put 'put ''dTZhMWJcdTY5ZmZcdTZiMGFcdTY5ZjlcdTY5ZjJcdTY5ZTdcdTZhMDVcdTY5YjFcdTZhMWVcdTY5ZWRcdTZhMTRcdTY5ZWJcdTZhMGFcdTZhMTJcdTZhYzFcdTZhMjNcdTZhMTNcdTZhNDRcdTZhMGNcdTZhNzJcdTZhMzZcdTZhNzhcdTZhNDdcdTZhNjJcdTZhNTlcdTZhNjZcdTZhNDhcdTZh''@;'; put 'put ''MzhcdTZhMjJcdTZhOTBcdTZhOGRcdTZhYTBcdTZhODRcdTZhYTJcdTZhYTMiXSxbIjlmNDAiLCJcdTZhOTdcdTg2MTdcdTZhYmJcdTZhYzNcdTZhYzJcdTZhYjhcdTZhYjNcdTZhYWNcdTZhZGVcdTZhZDFcdTZhZGZcdTZhYWFcdTZhZGFcdTZhZWFcdTZhZmJcdTZiMDVcdTg2MTZcdTZhZmFc''@;'; put 'put ''dTZiMTJcdTZiMTZcdTliMzFcdTZiMWZcdTZiMzhcdTZiMzdcdTc2ZGNcdTZiMzlcdTk4ZWVcdTZiNDdcdTZiNDNcdTZiNDlcdTZiNTBcdTZiNTlcdTZiNTRcdTZiNWJcdTZiNWZcdTZiNjFcdTZiNzhcdTZiNzlcdTZiN2ZcdTZiODBcdTZiODRcdTZiODNcdTZiOGRcdTZiOThcdTZiOTVcdTZi''@;'; put 'put ''OWVcdTZiYTRcdTZiYWFcdTZiYWJcdTZiYWZcdTZiYjJcdTZiYjFcdTZiYjNcdTZiYjdcdTZiYmNcdTZiYzZcdTZiY2JcdTZiZDNcdTZiZGZcdTZiZWNcdTZiZWJcdTZiZjNcdTZiZWYiXSxbIjlmODAiLCJcdTllYmVcdTZjMDhcdTZjMTNcdTZjMTRcdTZjMWJcdTZjMjRcdTZjMjNcdTZjNWVc''@;'; put 'put ''dTZjNTVcdTZjNjJcdTZjNmFcdTZjODJcdTZjOGRcdTZjOWFcdTZjODFcdTZjOWJcdTZjN2VcdTZjNjhcdTZjNzNcdTZjOTJcdTZjOTBcdTZjYzRcdTZjZjFcdTZjZDNcdTZjYmRcdTZjZDdcdTZjYzVcdTZjZGRcdTZjYWVcdTZjYjFcdTZjYmVcdTZjYmFcdTZjZGJcdTZjZWZcdTZjZDlcdTZj''@;'; put 'put ''ZWFcdTZkMWZcdTg4NGRcdTZkMzZcdTZkMmJcdTZkM2RcdTZkMzhcdTZkMTlcdTZkMzVcdTZkMzNcdTZkMTJcdTZkMGNcdTZkNjNcdTZkOTNcdTZkNjRcdTZkNWFcdTZkNzlcdTZkNTlcdTZkOGVcdTZkOTVcdTZmZTRcdTZkODVcdTZkZjlcdTZlMTVcdTZlMGFcdTZkYjVcdTZkYzdcdTZkZTZc''@;'; put 'put ''dTZkYjhcdTZkYzZcdTZkZWNcdTZkZGVcdTZkY2NcdTZkZThcdTZkZDJcdTZkYzVcdTZkZmFcdTZkZDlcdTZkZTRcdTZkZDVcdTZkZWFcdTZkZWVcdTZlMmRcdTZlNmVcdTZlMmVcdTZlMTlcdTZlNzJcdTZlNWZcdTZlM2VcdTZlMjNcdTZlNmJcdTZlMmJcdTZlNzZcdTZlNGRcdTZlMWZcdTZl''@;'; put 'put ''NDNcdTZlM2FcdTZlNGVcdTZlMjRcdTZlZmZcdTZlMWRcdTZlMzhcdTZlODJcdTZlYWFcdTZlOThcdTZlYzlcdTZlYjdcdTZlZDNcdTZlYmRcdTZlYWZcdTZlYzRcdTZlYjJcdTZlZDRcdTZlZDVcdTZlOGZcdTZlYTVcdTZlYzJcdTZlOWZcdTZmNDFcdTZmMTFcdTcwNGNcdTZlZWNcdTZlZjhc''@;'; put 'put ''dTZlZmVcdTZmM2ZcdTZlZjJcdTZmMzFcdTZlZWZcdTZmMzJcdTZlY2MiXSxbImUwNDAiLCJcdTZmM2VcdTZmMTNcdTZlZjdcdTZmODZcdTZmN2FcdTZmNzhcdTZmODFcdTZmODBcdTZmNmZcdTZmNWJcdTZmZjNcdTZmNmRcdTZmODJcdTZmN2NcdTZmNThcdTZmOGVcdTZmOTFcdTZmYzJcdTZm''@;'; put 'put ''NjZcdTZmYjNcdTZmYTNcdTZmYTFcdTZmYTRcdTZmYjlcdTZmYzZcdTZmYWFcdTZmZGZcdTZmZDVcdTZmZWNcdTZmZDRcdTZmZDhcdTZmZjFcdTZmZWVcdTZmZGJcdTcwMDlcdTcwMGJcdTZmZmFcdTcwMTFcdTcwMDFcdTcwMGZcdTZmZmVcdTcwMWJcdTcwMWFcdTZmNzRcdTcwMWRcdTcwMThc''@;'; put 'put ''dTcwMWZcdTcwMzBcdTcwM2VcdTcwMzJcdTcwNTFcdTcwNjNcdTcwOTlcdTcwOTJcdTcwYWZcdTcwZjFcdTcwYWNcdTcwYjhcdTcwYjNcdTcwYWVcdTcwZGZcdTcwY2JcdTcwZGQiXSxbImUwODAiLCJcdTcwZDlcdTcxMDlcdTcwZmRcdTcxMWNcdTcxMTlcdTcxNjVcdTcxNTVcdTcxODhcdTcx''@;'; put 'put ''NjZcdTcxNjJcdTcxNGNcdTcxNTZcdTcxNmNcdTcxOGZcdTcxZmJcdTcxODRcdTcxOTVcdTcxYThcdTcxYWNcdTcxZDdcdTcxYjlcdTcxYmVcdTcxZDJcdTcxYzlcdTcxZDRcdTcxY2VcdTcxZTBcdTcxZWNcdTcxZTdcdTcxZjVcdTcxZmNcdTcxZjlcdTcxZmZcdTcyMGRcdTcyMTBcdTcyMWJc''@;'; put 'put ''dTcyMjhcdTcyMmRcdTcyMmNcdTcyMzBcdTcyMzJcdTcyM2JcdTcyM2NcdTcyM2ZcdTcyNDBcdTcyNDZcdTcyNGJcdTcyNThcdTcyNzRcdTcyN2VcdTcyODJcdTcyODFcdTcyODdcdTcyOTJcdTcyOTZcdTcyYTJcdTcyYTdcdTcyYjlcdTcyYjJcdTcyYzNcdTcyYzZcdTcyYzRcdTcyY2VcdTcy''@;'; put 'put ''ZDJcdTcyZTJcdTcyZTBcdTcyZTFcdTcyZjlcdTcyZjdcdTUwMGZcdTczMTdcdTczMGFcdTczMWNcdTczMTZcdTczMWRcdTczMzRcdTczMmZcdTczMjlcdTczMjVcdTczM2VcdTczNGVcdTczNGZcdTllZDhcdTczNTdcdTczNmFcdTczNjhcdTczNzBcdTczNzhcdTczNzVcdTczN2JcdTczN2Fc''@;'; put 'put ''dTczYzhcdTczYjNcdTczY2VcdTczYmJcdTczYzBcdTczZTVcdTczZWVcdTczZGVcdTc0YTJcdTc0MDVcdTc0NmZcdTc0MjVcdTczZjhcdTc0MzJcdTc0M2FcdTc0NTVcdTc0M2ZcdTc0NWZcdTc0NTlcdTc0NDFcdTc0NWNcdTc0NjlcdTc0NzBcdTc0NjNcdTc0NmFcdTc0NzZcdTc0N2VcdTc0''@;'; put 'put ''OGJcdTc0OWVcdTc0YTdcdTc0Y2FcdTc0Y2ZcdTc0ZDRcdTczZjEiXSxbImUxNDAiLCJcdTc0ZTBcdTc0ZTNcdTc0ZTdcdTc0ZTlcdTc0ZWVcdTc0ZjJcdTc0ZjBcdTc0ZjFcdTc0ZjhcdTc0ZjdcdTc1MDRcdTc1MDNcdTc1MDVcdTc1MGNcdTc1MGVcdTc1MGRcdTc1MTVcdTc1MTNcdTc1MWVc''@;'; put 'put ''dTc1MjZcdTc1MmNcdTc1M2NcdTc1NDRcdTc1NGRcdTc1NGFcdTc1NDlcdTc1NWJcdTc1NDZcdTc1NWFcdTc1NjlcdTc1NjRcdTc1NjdcdTc1NmJcdTc1NmRcdTc1NzhcdTc1NzZcdTc1ODZcdTc1ODdcdTc1NzRcdTc1OGFcdTc1ODlcdTc1ODJcdTc1OTRcdTc1OWFcdTc1OWRcdTc1YTVcdTc1''@;'; put 'put ''YTNcdTc1YzJcdTc1YjNcdTc1YzNcdTc1YjVcdTc1YmRcdTc1YjhcdTc1YmNcdTc1YjFcdTc1Y2RcdTc1Y2FcdTc1ZDJcdTc1ZDlcdTc1ZTNcdTc1ZGVcdTc1ZmVcdTc1ZmYiXSxbImUxODAiLCJcdTc1ZmNcdTc2MDFcdTc1ZjBcdTc1ZmFcdTc1ZjJcdTc1ZjNcdTc2MGJcdTc2MGRcdTc2MDlc''@;'; put 'put ''dTc2MWZcdTc2MjdcdTc2MjBcdTc2MjFcdTc2MjJcdTc2MjRcdTc2MzRcdTc2MzBcdTc2M2JcdTc2NDdcdTc2NDhcdTc2NDZcdTc2NWNcdTc2NThcdTc2NjFcdTc2NjJcdTc2NjhcdTc2NjlcdTc2NmFcdTc2NjdcdTc2NmNcdTc2NzBcdTc2NzJcdTc2NzZcdTc2NzhcdTc2N2NcdTc2ODBcdTc2''@;'; put 'put ''ODNcdTc2ODhcdTc2OGJcdTc2OGVcdTc2OTZcdTc2OTNcdTc2OTlcdTc2OWFcdTc2YjBcdTc2YjRcdTc2YjhcdTc2YjlcdTc2YmFcdTc2YzJcdTc2Y2RcdTc2ZDZcdTc2ZDJcdTc2ZGVcdTc2ZTFcdTc2ZTVcdTc2ZTdcdTc2ZWFcdTg2MmZcdTc2ZmJcdTc3MDhcdTc3MDdcdTc3MDRcdTc3Mjlc''@;'; put 'put ''dTc3MjRcdTc3MWVcdTc3MjVcdTc3MjZcdTc3MWJcdTc3MzdcdTc3MzhcdTc3NDdcdTc3NWFcdTc3NjhcdTc3NmJcdTc3NWJcdTc3NjVcdTc3N2ZcdTc3N2VcdTc3NzlcdTc3OGVcdTc3OGJcdTc3OTFcdTc3YTBcdTc3OWVcdTc3YjBcdTc3YjZcdTc3YjlcdTc3YmZcdTc3YmNcdTc3YmRcdTc3''@;'; put 'put ''YmJcdTc3YzdcdTc3Y2RcdTc3ZDdcdTc3ZGFcdTc3ZGNcdTc3ZTNcdTc3ZWVcdTc3ZmNcdTc4MGNcdTc4MTJcdTc5MjZcdTc4MjBcdTc5MmFcdTc4NDVcdTc4OGVcdTc4NzRcdTc4ODZcdTc4N2NcdTc4OWFcdTc4OGNcdTc4YTNcdTc4YjVcdTc4YWFcdTc4YWZcdTc4ZDFcdTc4YzZcdTc4Y2Jc''@;'; put 'put ''dTc4ZDRcdTc4YmVcdTc4YmNcdTc4YzVcdTc4Y2FcdTc4ZWMiXSxbImUyNDAiLCJcdTc4ZTdcdTc4ZGFcdTc4ZmRcdTc4ZjRcdTc5MDdcdTc5MTJcdTc5MTFcdTc5MTlcdTc5MmNcdTc5MmJcdTc5NDBcdTc5NjBcdTc5NTdcdTc5NWZcdTc5NWFcdTc5NTVcdTc5NTNcdTc5N2FcdTc5N2ZcdTc5''@;'; put 'put ''OGFcdTc5OWRcdTc5YTdcdTlmNGJcdTc5YWFcdTc5YWVcdTc5YjNcdTc5YjlcdTc5YmFcdTc5YzlcdTc5ZDVcdTc5ZTdcdTc5ZWNcdTc5ZTFcdTc5ZTNcdTdhMDhcdTdhMGRcdTdhMThcdTdhMTlcdTdhMjBcdTdhMWZcdTc5ODBcdTdhMzFcdTdhM2JcdTdhM2VcdTdhMzdcdTdhNDNcdTdhNTdc''@;'; put 'put ''dTdhNDlcdTdhNjFcdTdhNjJcdTdhNjlcdTlmOWRcdTdhNzBcdTdhNzlcdTdhN2RcdTdhODhcdTdhOTdcdTdhOTVcdTdhOThcdTdhOTZcdTdhYTlcdTdhYzhcdTdhYjAiXSxbImUyODAiLCJcdTdhYjZcdTdhYzVcdTdhYzRcdTdhYmZcdTkwODNcdTdhYzdcdTdhY2FcdTdhY2RcdTdhY2ZcdTdh''@;'; put 'put ''ZDVcdTdhZDNcdTdhZDlcdTdhZGFcdTdhZGRcdTdhZTFcdTdhZTJcdTdhZTZcdTdhZWRcdTdhZjBcdTdiMDJcdTdiMGZcdTdiMGFcdTdiMDZcdTdiMzNcdTdiMThcdTdiMTlcdTdiMWVcdTdiMzVcdTdiMjhcdTdiMzZcdTdiNTBcdTdiN2FcdTdiMDRcdTdiNGRcdTdiMGJcdTdiNGNcdTdiNDVc''@;'; put 'put ''dTdiNzVcdTdiNjVcdTdiNzRcdTdiNjdcdTdiNzBcdTdiNzFcdTdiNmNcdTdiNmVcdTdiOWRcdTdiOThcdTdiOWZcdTdiOGRcdTdiOWNcdTdiOWFcdTdiOGJcdTdiOTJcdTdiOGZcdTdiNWRcdTdiOTlcdTdiY2JcdTdiYzFcdTdiY2NcdTdiY2ZcdTdiYjRcdTdiYzZcdTdiZGRcdTdiZTlcdTdj''@;'; put 'put ''MTFcdTdjMTRcdTdiZTZcdTdiZTVcdTdjNjBcdTdjMDBcdTdjMDdcdTdjMTNcdTdiZjNcdTdiZjdcdTdjMTdcdTdjMGRcdTdiZjZcdTdjMjNcdTdjMjdcdTdjMmFcdTdjMWZcdTdjMzdcdTdjMmJcdTdjM2RcdTdjNGNcdTdjNDNcdTdjNTRcdTdjNGZcdTdjNDBcdTdjNTBcdTdjNThcdTdjNWZc''@;'; put 'put ''dTdjNjRcdTdjNTZcdTdjNjVcdTdjNmNcdTdjNzVcdTdjODNcdTdjOTBcdTdjYTRcdTdjYWRcdTdjYTJcdTdjYWJcdTdjYTFcdTdjYThcdTdjYjNcdTdjYjJcdTdjYjFcdTdjYWVcdTdjYjlcdTdjYmRcdTdjYzBcdTdjYzVcdTdjYzJcdTdjZDhcdTdjZDJcdTdjZGNcdTdjZTJcdTliM2JcdTdj''@;'; put 'put ''ZWZcdTdjZjJcdTdjZjRcdTdjZjZcdTdjZmFcdTdkMDYiXSxbImUzNDAiLCJcdTdkMDJcdTdkMWNcdTdkMTVcdTdkMGFcdTdkNDVcdTdkNGJcdTdkMmVcdTdkMzJcdTdkM2ZcdTdkMzVcdTdkNDZcdTdkNzNcdTdkNTZcdTdkNGVcdTdkNzJcdTdkNjhcdTdkNmVcdTdkNGZcdTdkNjNcdTdkOTNc''@;'; put 'put ''dTdkODlcdTdkNWJcdTdkOGZcdTdkN2RcdTdkOWJcdTdkYmFcdTdkYWVcdTdkYTNcdTdkYjVcdTdkYzdcdTdkYmRcdTdkYWJcdTdlM2RcdTdkYTJcdTdkYWZcdTdkZGNcdTdkYjhcdTdkOWZcdTdkYjBcdTdkZDhcdTdkZGRcdTdkZTRcdTdkZGVcdTdkZmJcdTdkZjJcdTdkZTFcdTdlMDVcdTdl''@;'; put 'put ''MGFcdTdlMjNcdTdlMjFcdTdlMTJcdTdlMzFcdTdlMWZcdTdlMDlcdTdlMGJcdTdlMjJcdTdlNDZcdTdlNjZcdTdlM2JcdTdlMzVcdTdlMzlcdTdlNDNcdTdlMzciXSxbImUzODAiLCJcdTdlMzJcdTdlM2FcdTdlNjdcdTdlNWRcdTdlNTZcdTdlNWVcdTdlNTlcdTdlNWFcdTdlNzlcdTdlNmFc''@;'; put 'put ''dTdlNjlcdTdlN2NcdTdlN2JcdTdlODNcdTdkZDVcdTdlN2RcdThmYWVcdTdlN2ZcdTdlODhcdTdlODlcdTdlOGNcdTdlOTJcdTdlOTBcdTdlOTNcdTdlOTRcdTdlOTZcdTdlOGVcdTdlOWJcdTdlOWNcdTdmMzhcdTdmM2FcdTdmNDVcdTdmNGNcdTdmNGRcdTdmNGVcdTdmNTBcdTdmNTFcdTdm''@;'; put 'put ''NTVcdTdmNTRcdTdmNThcdTdmNWZcdTdmNjBcdTdmNjhcdTdmNjlcdTdmNjdcdTdmNzhcdTdmODJcdTdmODZcdTdmODNcdTdmODhcdTdmODdcdTdmOGNcdTdmOTRcdTdmOWVcdTdmOWRcdTdmOWFcdTdmYTNcdTdmYWZcdTdmYjJcdTdmYjlcdTdmYWVcdTdmYjZcdTdmYjhcdThiNzFcdTdmYzVc''@;'; put 'put ''dTdmYzZcdTdmY2FcdTdmZDVcdTdmZDRcdTdmZTFcdTdmZTZcdTdmZTlcdTdmZjNcdTdmZjlcdTk4ZGNcdTgwMDZcdTgwMDRcdTgwMGJcdTgwMTJcdTgwMThcdTgwMTlcdTgwMWNcdTgwMjFcdTgwMjhcdTgwM2ZcdTgwM2JcdTgwNGFcdTgwNDZcdTgwNTJcdTgwNThcdTgwNWFcdTgwNWZcdTgw''@;'; put 'put ''NjJcdTgwNjhcdTgwNzNcdTgwNzJcdTgwNzBcdTgwNzZcdTgwNzlcdTgwN2RcdTgwN2ZcdTgwODRcdTgwODZcdTgwODVcdTgwOWJcdTgwOTNcdTgwOWFcdTgwYWRcdTUxOTBcdTgwYWNcdTgwZGJcdTgwZTVcdTgwZDlcdTgwZGRcdTgwYzRcdTgwZGFcdTgwZDZcdTgxMDlcdTgwZWZcdTgwZjFc''@;'; put 'put ''dTgxMWJcdTgxMjlcdTgxMjNcdTgxMmZcdTgxNGIiXSxbImU0NDAiLCJcdTk2OGJcdTgxNDZcdTgxM2VcdTgxNTNcdTgxNTFcdTgwZmNcdTgxNzFcdTgxNmVcdTgxNjVcdTgxNjZcdTgxNzRcdTgxODNcdTgxODhcdTgxOGFcdTgxODBcdTgxODJcdTgxYTBcdTgxOTVcdTgxYTRcdTgxYTNcdTgx''@;'; put 'put ''NWZcdTgxOTNcdTgxYTlcdTgxYjBcdTgxYjVcdTgxYmVcdTgxYjhcdTgxYmRcdTgxYzBcdTgxYzJcdTgxYmFcdTgxYzlcdTgxY2RcdTgxZDFcdTgxZDlcdTgxZDhcdTgxYzhcdTgxZGFcdTgxZGZcdTgxZTBcdTgxZTdcdTgxZmFcdTgxZmJcdTgxZmVcdTgyMDFcdTgyMDJcdTgyMDVcdTgyMDdc''@;'; put 'put ''dTgyMGFcdTgyMGRcdTgyMTBcdTgyMTZcdTgyMjlcdTgyMmJcdTgyMzhcdTgyMzNcdTgyNDBcdTgyNTlcdTgyNThcdTgyNWRcdTgyNWFcdTgyNWZcdTgyNjQiXSxbImU0ODAiLCJcdTgyNjJcdTgyNjhcdTgyNmFcdTgyNmJcdTgyMmVcdTgyNzFcdTgyNzdcdTgyNzhcdTgyN2VcdTgyOGRcdTgy''@;'; put 'put ''OTJcdTgyYWJcdTgyOWZcdTgyYmJcdTgyYWNcdTgyZTFcdTgyZTNcdTgyZGZcdTgyZDJcdTgyZjRcdTgyZjNcdTgyZmFcdTgzOTNcdTgzMDNcdTgyZmJcdTgyZjlcdTgyZGVcdTgzMDZcdTgyZGNcdTgzMDlcdTgyZDlcdTgzMzVcdTgzMzRcdTgzMTZcdTgzMzJcdTgzMzFcdTgzNDBcdTgzMzlc''@;'; put 'put ''dTgzNTBcdTgzNDVcdTgzMmZcdTgzMmJcdTgzMTdcdTgzMThcdTgzODVcdTgzOWFcdTgzYWFcdTgzOWZcdTgzYTJcdTgzOTZcdTgzMjNcdTgzOGVcdTgzODdcdTgzOGFcdTgzN2NcdTgzYjVcdTgzNzNcdTgzNzVcdTgzYTBcdTgzODlcdTgzYThcdTgzZjRcdTg0MTNcdTgzZWJcdTgzY2VcdTgz''@;'; put 'put ''ZmRcdTg0MDNcdTgzZDhcdTg0MGJcdTgzYzFcdTgzZjdcdTg0MDdcdTgzZTBcdTgzZjJcdTg0MGRcdTg0MjJcdTg0MjBcdTgzYmRcdTg0MzhcdTg1MDZcdTgzZmJcdTg0NmRcdTg0MmFcdTg0M2NcdTg1NWFcdTg0ODRcdTg0NzdcdTg0NmJcdTg0YWRcdTg0NmVcdTg0ODJcdTg0NjlcdTg0NDZc''@;'; put 'put ''dTg0MmNcdTg0NmZcdTg0NzlcdTg0MzVcdTg0Y2FcdTg0NjJcdTg0YjlcdTg0YmZcdTg0OWZcdTg0ZDlcdTg0Y2RcdTg0YmJcdTg0ZGFcdTg0ZDBcdTg0YzFcdTg0YzZcdTg0ZDZcdTg0YTFcdTg1MjFcdTg0ZmZcdTg0ZjRcdTg1MTdcdTg1MThcdTg1MmNcdTg1MWZcdTg1MTVcdTg1MTRcdTg0''@;'; put 'put ''ZmNcdTg1NDBcdTg1NjNcdTg1NThcdTg1NDgiXSxbImU1NDAiLCJcdTg1NDFcdTg2MDJcdTg1NGJcdTg1NTVcdTg1ODBcdTg1YTRcdTg1ODhcdTg1OTFcdTg1OGFcdTg1YThcdTg1NmRcdTg1OTRcdTg1OWJcdTg1ZWFcdTg1ODdcdTg1OWNcdTg1NzdcdTg1N2VcdTg1OTBcdTg1YzlcdTg1YmFc''@;'; put 'put ''dTg1Y2ZcdTg1YjlcdTg1ZDBcdTg1ZDVcdTg1ZGRcdTg1ZTVcdTg1ZGNcdTg1ZjlcdTg2MGFcdTg2MTNcdTg2MGJcdTg1ZmVcdTg1ZmFcdTg2MDZcdTg2MjJcdTg2MWFcdTg2MzBcdTg2M2ZcdTg2NGRcdTRlNTVcdTg2NTRcdTg2NWZcdTg2NjdcdTg2NzFcdTg2OTNcdTg2YTNcdTg2YTlcdTg2''@;'; put 'put ''YWFcdTg2OGJcdTg2OGNcdTg2YjZcdTg2YWZcdTg2YzRcdTg2YzZcdTg2YjBcdTg2YzlcdTg4MjNcdTg2YWJcdTg2ZDRcdTg2ZGVcdTg2ZTlcdTg2ZWMiXSxbImU1ODAiLCJcdTg2ZGZcdTg2ZGJcdTg2ZWZcdTg3MTJcdTg3MDZcdTg3MDhcdTg3MDBcdTg3MDNcdTg2ZmJcdTg3MTFcdTg3MDlc''@;'; put 'put ''dTg3MGRcdTg2ZjlcdTg3MGFcdTg3MzRcdTg3M2ZcdTg3MzdcdTg3M2JcdTg3MjVcdTg3MjlcdTg3MWFcdTg3NjBcdTg3NWZcdTg3NzhcdTg3NGNcdTg3NGVcdTg3NzRcdTg3NTdcdTg3NjhcdTg3NmVcdTg3NTlcdTg3NTNcdTg3NjNcdTg3NmFcdTg4MDVcdTg3YTJcdTg3OWZcdTg3ODJcdTg3''@;'; put 'put ''YWZcdTg3Y2JcdTg3YmRcdTg3YzBcdTg3ZDBcdTk2ZDZcdTg3YWJcdTg3YzRcdTg3YjNcdTg3YzdcdTg3YzZcdTg3YmJcdTg3ZWZcdTg3ZjJcdTg3ZTBcdTg4MGZcdTg4MGRcdTg3ZmVcdTg3ZjZcdTg3ZjdcdTg4MGVcdTg3ZDJcdTg4MTFcdTg4MTZcdTg4MTVcdTg4MjJcdTg4MjFcdTg4MzFc''@;'; put 'put ''dTg4MzZcdTg4MzlcdTg4MjdcdTg4M2JcdTg4NDRcdTg4NDJcdTg4NTJcdTg4NTlcdTg4NWVcdTg4NjJcdTg4NmJcdTg4ODFcdTg4N2VcdTg4OWVcdTg4NzVcdTg4N2RcdTg4YjVcdTg4NzJcdTg4ODJcdTg4OTdcdTg4OTJcdTg4YWVcdTg4OTlcdTg4YTJcdTg4OGRcdTg4YTRcdTg4YjBcdTg4''@;'; put 'put ''YmZcdTg4YjFcdTg4YzNcdTg4YzRcdTg4ZDRcdTg4ZDhcdTg4ZDlcdTg4ZGRcdTg4ZjlcdTg5MDJcdTg4ZmNcdTg4ZjRcdTg4ZThcdTg4ZjJcdTg5MDRcdTg5MGNcdTg5MGFcdTg5MTNcdTg5NDNcdTg5MWVcdTg5MjVcdTg5MmFcdTg5MmJcdTg5NDFcdTg5NDRcdTg5M2JcdTg5MzZcdTg5Mzhc''@;'; put 'put ''dTg5NGNcdTg5MWRcdTg5NjBcdTg5NWUiXSxbImU2NDAiLCJcdTg5NjZcdTg5NjRcdTg5NmRcdTg5NmFcdTg5NmZcdTg5NzRcdTg5NzdcdTg5N2VcdTg5ODNcdTg5ODhcdTg5OGFcdTg5OTNcdTg5OThcdTg5YTFcdTg5YTlcdTg5YTZcdTg5YWNcdTg5YWZcdTg5YjJcdTg5YmFcdTg5YmRcdTg5''@;'; put 'put ''YmZcdTg5YzBcdTg5ZGFcdTg5ZGNcdTg5ZGRcdTg5ZTdcdTg5ZjRcdTg5ZjhcdThhMDNcdThhMTZcdThhMTBcdThhMGNcdThhMWJcdThhMWRcdThhMjVcdThhMzZcdThhNDFcdThhNWJcdThhNTJcdThhNDZcdThhNDhcdThhN2NcdThhNmRcdThhNmNcdThhNjJcdThhODVcdThhODJcdThhODRc''@;'; put 'put ''dThhYThcdThhYTFcdThhOTFcdThhYTVcdThhYTZcdThhOWFcdThhYTNcdThhYzRcdThhY2RcdThhYzJcdThhZGFcdThhZWJcdThhZjNcdThhZTciXSxbImU2ODAiLCJcdThhZTRcdThhZjFcdThiMTRcdThhZTBcdThhZTJcdThhZjdcdThhZGVcdThhZGJcdThiMGNcdThiMDdcdThiMWFcdThh''@;'; put 'put ''ZTFcdThiMTZcdThiMTBcdThiMTdcdThiMjBcdThiMzNcdTk3YWJcdThiMjZcdThiMmJcdThiM2VcdThiMjhcdThiNDFcdThiNGNcdThiNGZcdThiNGVcdThiNDlcdThiNTZcdThiNWJcdThiNWFcdThiNmJcdThiNWZcdThiNmNcdThiNmZcdThiNzRcdThiN2RcdThiODBcdThiOGNcdThiOGVc''@;'; put 'put ''dThiOTJcdThiOTNcdThiOTZcdThiOTlcdThiOWFcdThjM2FcdThjNDFcdThjM2ZcdThjNDhcdThjNGNcdThjNGVcdThjNTBcdThjNTVcdThjNjJcdThjNmNcdThjNzhcdThjN2FcdThjODJcdThjODlcdThjODVcdThjOGFcdThjOGRcdThjOGVcdThjOTRcdThjN2NcdThjOThcdTYyMWRcdThj''@;'; put 'put ''YWRcdThjYWFcdThjYmRcdThjYjJcdThjYjNcdThjYWVcdThjYjZcdThjYzhcdThjYzFcdThjZTRcdThjZTNcdThjZGFcdThjZmRcdThjZmFcdThjZmJcdThkMDRcdThkMDVcdThkMGFcdThkMDdcdThkMGZcdThkMGRcdThkMTBcdTlmNGVcdThkMTNcdThjY2RcdThkMTRcdThkMTZcdThkNjdc''@;'; put 'put ''dThkNmRcdThkNzFcdThkNzNcdThkODFcdThkOTlcdThkYzJcdThkYmVcdThkYmFcdThkY2ZcdThkZGFcdThkZDZcdThkY2NcdThkZGJcdThkY2JcdThkZWFcdThkZWJcdThkZGZcdThkZTNcdThkZmNcdThlMDhcdThlMDlcdThkZmZcdThlMWRcdThlMWVcdThlMTBcdThlMWZcdThlNDJcdThl''@;'; put 'put ''MzVcdThlMzBcdThlMzRcdThlNGEiXSxbImU3NDAiLCJcdThlNDdcdThlNDlcdThlNGNcdThlNTBcdThlNDhcdThlNTlcdThlNjRcdThlNjBcdThlMmFcdThlNjNcdThlNTVcdThlNzZcdThlNzJcdThlN2NcdThlODFcdThlODdcdThlODVcdThlODRcdThlOGJcdThlOGFcdThlOTNcdThlOTFc''@;'; put 'put ''dThlOTRcdThlOTlcdThlYWFcdThlYTFcdThlYWNcdThlYjBcdThlYzZcdThlYjFcdThlYmVcdThlYzVcdThlYzhcdThlY2JcdThlZGJcdThlZTNcdThlZmNcdThlZmJcdThlZWJcdThlZmVcdThmMGFcdThmMDVcdThmMTVcdThmMTJcdThmMTlcdThmMTNcdThmMWNcdThmMWZcdThmMWJcdThm''@;'; put 'put ''MGNcdThmMjZcdThmMzNcdThmM2JcdThmMzlcdThmNDVcdThmNDJcdThmM2VcdThmNGNcdThmNDlcdThmNDZcdThmNGVcdThmNTdcdThmNWMiXSxbImU3ODAiLCJcdThmNjJcdThmNjNcdThmNjRcdThmOWNcdThmOWZcdThmYTNcdThmYWRcdThmYWZcdThmYjdcdThmZGFcdThmZTVcdThmZTJc''@;'; put 'put ''dThmZWFcdThmZWZcdTkwODdcdThmZjRcdTkwMDVcdThmZjlcdThmZmFcdTkwMTFcdTkwMTVcdTkwMjFcdTkwMGRcdTkwMWVcdTkwMTZcdTkwMGJcdTkwMjdcdTkwMzZcdTkwMzVcdTkwMzlcdThmZjhcdTkwNGZcdTkwNTBcdTkwNTFcdTkwNTJcdTkwMGVcdTkwNDlcdTkwM2VcdTkwNTZcdTkw''@;'; put 'put ''NThcdTkwNWVcdTkwNjhcdTkwNmZcdTkwNzZcdTk2YThcdTkwNzJcdTkwODJcdTkwN2RcdTkwODFcdTkwODBcdTkwOGFcdTkwODlcdTkwOGZcdTkwYThcdTkwYWZcdTkwYjFcdTkwYjVcdTkwZTJcdTkwZTRcdTYyNDhcdTkwZGJcdTkxMDJcdTkxMTJcdTkxMTlcdTkxMzJcdTkxMzBcdTkxNGFc''@;'; put 'put ''dTkxNTZcdTkxNThcdTkxNjNcdTkxNjVcdTkxNjlcdTkxNzNcdTkxNzJcdTkxOGJcdTkxODlcdTkxODJcdTkxYTJcdTkxYWJcdTkxYWZcdTkxYWFcdTkxYjVcdTkxYjRcdTkxYmFcdTkxYzBcdTkxYzFcdTkxYzlcdTkxY2JcdTkxZDBcdTkxZDZcdTkxZGZcdTkxZTFcdTkxZGJcdTkxZmNcdTkx''@;'; put 'put ''ZjVcdTkxZjZcdTkyMWVcdTkxZmZcdTkyMTRcdTkyMmNcdTkyMTVcdTkyMTFcdTkyNWVcdTkyNTdcdTkyNDVcdTkyNDlcdTkyNjRcdTkyNDhcdTkyOTVcdTkyM2ZcdTkyNGJcdTkyNTBcdTkyOWNcdTkyOTZcdTkyOTNcdTkyOWJcdTkyNWFcdTkyY2ZcdTkyYjlcdTkyYjdcdTkyZTlcdTkzMGZc''@;'; put 'put ''dTkyZmFcdTkzNDRcdTkzMmUiXSxbImU4NDAiLCJcdTkzMTlcdTkzMjJcdTkzMWFcdTkzMjNcdTkzM2FcdTkzMzVcdTkzM2JcdTkzNWNcdTkzNjBcdTkzN2NcdTkzNmVcdTkzNTZcdTkzYjBcdTkzYWNcdTkzYWRcdTkzOTRcdTkzYjlcdTkzZDZcdTkzZDdcdTkzZThcdTkzZTVcdTkzZDhcdTkz''@;'; put 'put ''YzNcdTkzZGRcdTkzZDBcdTkzYzhcdTkzZTRcdTk0MWFcdTk0MTRcdTk0MTNcdTk0MDNcdTk0MDdcdTk0MTBcdTk0MzZcdTk0MmJcdTk0MzVcdTk0MjFcdTk0M2FcdTk0NDFcdTk0NTJcdTk0NDRcdTk0NWJcdTk0NjBcdTk0NjJcdTk0NWVcdTk0NmFcdTkyMjlcdTk0NzBcdTk0NzVcdTk0Nzdc''@;'; put 'put ''dTk0N2RcdTk0NWFcdTk0N2NcdTk0N2VcdTk0ODFcdTk0N2ZcdTk1ODJcdTk1ODdcdTk1OGFcdTk1OTRcdTk1OTZcdTk1OThcdTk1OTkiXSxbImU4ODAiLCJcdTk1YTBcdTk1YThcdTk1YTdcdTk1YWRcdTk1YmNcdTk1YmJcdTk1YjlcdTk1YmVcdTk1Y2FcdTZmZjZcdTk1YzNcdTk1Y2RcdTk1''@;'; put 'put ''Y2NcdTk1ZDVcdTk1ZDRcdTk1ZDZcdTk1ZGNcdTk1ZTFcdTk1ZTVcdTk1ZTJcdTk2MjFcdTk2MjhcdTk2MmVcdTk2MmZcdTk2NDJcdTk2NGNcdTk2NGZcdTk2NGJcdTk2NzdcdTk2NWNcdTk2NWVcdTk2NWRcdTk2NWZcdTk2NjZcdTk2NzJcdTk2NmNcdTk2OGRcdTk2OThcdTk2OTVcdTk2OTdc''@;'; put 'put ''dTk2YWFcdTk2YTdcdTk2YjFcdTk2YjJcdTk2YjBcdTk2YjRcdTk2YjZcdTk2YjhcdTk2YjlcdTk2Y2VcdTk2Y2JcdTk2YzlcdTk2Y2RcdTg5NGRcdTk2ZGNcdTk3MGRcdTk2ZDVcdTk2ZjlcdTk3MDRcdTk3MDZcdTk3MDhcdTk3MTNcdTk3MGVcdTk3MTFcdTk3MGZcdTk3MTZcdTk3MTlcdTk3''@;'; put 'put ''MjRcdTk3MmFcdTk3MzBcdTk3MzlcdTk3M2RcdTk3M2VcdTk3NDRcdTk3NDZcdTk3NDhcdTk3NDJcdTk3NDlcdTk3NWNcdTk3NjBcdTk3NjRcdTk3NjZcdTk3NjhcdTUyZDJcdTk3NmJcdTk3NzFcdTk3NzlcdTk3ODVcdTk3N2NcdTk3ODFcdTk3N2FcdTk3ODZcdTk3OGJcdTk3OGZcdTk3OTBc''@;'; put 'put ''dTk3OWNcdTk3YThcdTk3YTZcdTk3YTNcdTk3YjNcdTk3YjRcdTk3YzNcdTk3YzZcdTk3YzhcdTk3Y2JcdTk3ZGNcdTk3ZWRcdTlmNGZcdTk3ZjJcdTdhZGZcdTk3ZjZcdTk3ZjVcdTk4MGZcdTk4MGNcdTk4MzhcdTk4MjRcdTk4MjFcdTk4MzdcdTk4M2RcdTk4NDZcdTk4NGZcdTk4NGJcdTk4''@;'; put 'put ''NmJcdTk4NmZcdTk4NzAiXSxbImU5NDAiLCJcdTk4NzFcdTk4NzRcdTk4NzNcdTk4YWFcdTk4YWZcdTk4YjFcdTk4YjZcdTk4YzRcdTk4YzNcdTk4YzZcdTk4ZTlcdTk4ZWJcdTk5MDNcdTk5MDlcdTk5MTJcdTk5MTRcdTk5MThcdTk5MjFcdTk5MWRcdTk5MWVcdTk5MjRcdTk5MjBcdTk5MmNc''@;'; put 'put ''dTk5MmVcdTk5M2RcdTk5M2VcdTk5NDJcdTk5NDlcdTk5NDVcdTk5NTBcdTk5NGJcdTk5NTFcdTk5NTJcdTk5NGNcdTk5NTVcdTk5OTdcdTk5OThcdTk5YTVcdTk5YWRcdTk5YWVcdTk5YmNcdTk5ZGZcdTk5ZGJcdTk5ZGRcdTk5ZDhcdTk5ZDFcdTk5ZWRcdTk5ZWVcdTk5ZjFcdTk5ZjJcdTk5''@;'; put 'put ''ZmJcdTk5ZjhcdTlhMDFcdTlhMGZcdTlhMDVcdTk5ZTJcdTlhMTlcdTlhMmJcdTlhMzdcdTlhNDVcdTlhNDJcdTlhNDBcdTlhNDMiXSxbImU5ODAiLCJcdTlhM2VcdTlhNTVcdTlhNGRcdTlhNWJcdTlhNTdcdTlhNWZcdTlhNjJcdTlhNjVcdTlhNjRcdTlhNjlcdTlhNmJcdTlhNmFcdTlhYWRc''@;'; put 'put ''dTlhYjBcdTlhYmNcdTlhYzBcdTlhY2ZcdTlhZDFcdTlhZDNcdTlhZDRcdTlhZGVcdTlhZGZcdTlhZTJcdTlhZTNcdTlhZTZcdTlhZWZcdTlhZWJcdTlhZWVcdTlhZjRcdTlhZjFcdTlhZjdcdTlhZmJcdTliMDZcdTliMThcdTliMWFcdTliMWZcdTliMjJcdTliMjNcdTliMjVcdTliMjdcdTli''@;'; put 'put ''MjhcdTliMjlcdTliMmFcdTliMmVcdTliMmZcdTliMzJcdTliNDRcdTliNDNcdTliNGZcdTliNGRcdTliNGVcdTliNTFcdTliNThcdTliNzRcdTliOTNcdTliODNcdTliOTFcdTliOTZcdTliOTdcdTliOWZcdTliYTBcdTliYThcdTliYjRcdTliYzBcdTliY2FcdTliYjlcdTliYzZcdTliY2Zc''@;'; put 'put ''dTliZDFcdTliZDJcdTliZTNcdTliZTJcdTliZTRcdTliZDRcdTliZTFcdTljM2FcdTliZjJcdTliZjFcdTliZjBcdTljMTVcdTljMTRcdTljMDlcdTljMTNcdTljMGNcdTljMDZcdTljMDhcdTljMTJcdTljMGFcdTljMDRcdTljMmVcdTljMWJcdTljMjVcdTljMjRcdTljMjFcdTljMzBcdTlj''@;'; put 'put ''NDdcdTljMzJcdTljNDZcdTljM2VcdTljNWFcdTljNjBcdTljNjdcdTljNzZcdTljNzhcdTljZTdcdTljZWNcdTljZjBcdTlkMDlcdTlkMDhcdTljZWJcdTlkMDNcdTlkMDZcdTlkMmFcdTlkMjZcdTlkYWZcdTlkMjNcdTlkMWZcdTlkNDRcdTlkMTVcdTlkMTJcdTlkNDFcdTlkM2ZcdTlkM2Vc''@;'; put 'put ''dTlkNDZcdTlkNDgiXSxbImVhNDAiLCJcdTlkNWRcdTlkNWVcdTlkNjRcdTlkNTFcdTlkNTBcdTlkNTlcdTlkNzJcdTlkODlcdTlkODdcdTlkYWJcdTlkNmZcdTlkN2FcdTlkOWFcdTlkYTRcdTlkYTlcdTlkYjJcdTlkYzRcdTlkYzFcdTlkYmJcdTlkYjhcdTlkYmFcdTlkYzZcdTlkY2ZcdTlk''@;'; put 'put ''YzJcdTlkZDlcdTlkZDNcdTlkZjhcdTlkZTZcdTlkZWRcdTlkZWZcdTlkZmRcdTllMWFcdTllMWJcdTllMWVcdTllNzVcdTllNzlcdTllN2RcdTllODFcdTllODhcdTllOGJcdTllOGNcdTllOTJcdTllOTVcdTllOTFcdTllOWRcdTllYTVcdTllYTlcdTllYjhcdTllYWFcdTllYWRcdTk3NjFc''@;'; put 'put ''dTllY2NcdTllY2VcdTllY2ZcdTllZDBcdTllZDRcdTllZGNcdTllZGVcdTllZGRcdTllZTBcdTllZTVcdTllZThcdTllZWYiXSxbImVhODAiLCJcdTllZjRcdTllZjZcdTllZjdcdTllZjlcdTllZmJcdTllZmNcdTllZmRcdTlmMDdcdTlmMDhcdTc2YjdcdTlmMTVcdTlmMjFcdTlmMmNcdTlm''@;'; put 'put ''M2VcdTlmNGFcdTlmNTJcdTlmNTRcdTlmNjNcdTlmNWZcdTlmNjBcdTlmNjFcdTlmNjZcdTlmNjdcdTlmNmNcdTlmNmFcdTlmNzdcdTlmNzJcdTlmNzZcdTlmOTVcdTlmOWNcdTlmYTBcdTU4MmZcdTY5YzdcdTkwNTlcdTc0NjRcdTUxZGNcdTcxOTkiXSxbImVkNDAiLCJcdTdlOGFcdTg5MWNc''@;'; put 'put ''dTkzNDhcdTkyODhcdTg0ZGNcdTRmYzlcdTcwYmJcdTY2MzFcdTY4YzhcdTkyZjlcdTY2ZmJcdTVmNDVcdTRlMjhcdTRlZTFcdTRlZmNcdTRmMDBcdTRmMDNcdTRmMzlcdTRmNTZcdTRmOTJcdTRmOGFcdTRmOWFcdTRmOTRcdTRmY2RcdTUwNDBcdTUwMjJcdTRmZmZcdTUwMWVcdTUwNDZcdTUw''@;'; put 'put ''NzBcdTUwNDJcdTUwOTRcdTUwZjRcdTUwZDhcdTUxNGFcdTUxNjRcdTUxOWRcdTUxYmVcdTUxZWNcdTUyMTVcdTUyOWNcdTUyYTZcdTUyYzBcdTUyZGJcdTUzMDBcdTUzMDdcdTUzMjRcdTUzNzJcdTUzOTNcdTUzYjJcdTUzZGRcdWZhMGVcdTU0OWNcdTU0OGFcdTU0YTlcdTU0ZmZcdTU1ODZc''@;'; put 'put ''dTU3NTlcdTU3NjVcdTU3YWNcdTU3YzhcdTU3YzdcdWZhMGYiXSxbImVkODAiLCJcdWZhMTBcdTU4OWVcdTU4YjJcdTU5MGJcdTU5NTNcdTU5NWJcdTU5NWRcdTU5NjNcdTU5YTRcdTU5YmFcdTViNTZcdTViYzBcdTc1MmZcdTViZDhcdTViZWNcdTVjMWVcdTVjYTZcdTVjYmFcdTVjZjVcdTVk''@;'; put 'put ''MjdcdTVkNTNcdWZhMTFcdTVkNDJcdTVkNmRcdTVkYjhcdTVkYjlcdTVkZDBcdTVmMjFcdTVmMzRcdTVmNjdcdTVmYjdcdTVmZGVcdTYwNWRcdTYwODVcdTYwOGFcdTYwZGVcdTYwZDVcdTYxMjBcdTYwZjJcdTYxMTFcdTYxMzdcdTYxMzBcdTYxOThcdTYyMTNcdTYyYTZcdTYzZjVcdTY0NjBc''@;'; put 'put ''dTY0OWRcdTY0Y2VcdTY1NGVcdTY2MDBcdTY2MTVcdTY2M2JcdTY2MDlcdTY2MmVcdTY2MWVcdTY2MjRcdTY2NjVcdTY2NTdcdTY2NTlcdWZhMTJcdTY2NzNcdTY2OTlcdTY2YTBcdTY2YjJcdTY2YmZcdTY2ZmFcdTY3MGVcdWY5MjlcdTY3NjZcdTY3YmJcdTY4NTJcdTY3YzBcdTY4MDFcdTY4''@;'; put 'put ''NDRcdTY4Y2ZcdWZhMTNcdTY5NjhcdWZhMTRcdTY5OThcdTY5ZTJcdTZhMzBcdTZhNmJcdTZhNDZcdTZhNzNcdTZhN2VcdTZhZTJcdTZhZTRcdTZiZDZcdTZjM2ZcdTZjNWNcdTZjODZcdTZjNmZcdTZjZGFcdTZkMDRcdTZkODdcdTZkNmZcdTZkOTZcdTZkYWNcdTZkY2ZcdTZkZjhcdTZkZjJc''@;'; put 'put ''dTZkZmNcdTZlMzlcdTZlNWNcdTZlMjdcdTZlM2NcdTZlYmZcdTZmODhcdTZmYjVcdTZmZjVcdTcwMDVcdTcwMDdcdTcwMjhcdTcwODVcdTcwYWJcdTcxMGZcdTcxMDRcdTcxNWNcdTcxNDZcdTcxNDdcdWZhMTVcdTcxYzFcdTcxZmVcdTcyYjEiXSxbImVlNDAiLCJcdTcyYmVcdTczMjRcdWZh''@;'; put 'put ''MTZcdTczNzdcdTczYmRcdTczYzlcdTczZDZcdTczZTNcdTczZDJcdTc0MDdcdTczZjVcdTc0MjZcdTc0MmFcdTc0MjlcdTc0MmVcdTc0NjJcdTc0ODlcdTc0OWZcdTc1MDFcdTc1NmZcdTc2ODJcdTc2OWNcdTc2OWVcdTc2OWJcdTc2YTZcdWZhMTdcdTc3NDZcdTUyYWZcdTc4MjFcdTc4NGVc''@;'; put 'put ''dTc4NjRcdTc4N2FcdTc5MzBcdWZhMThcdWZhMTlcdWZhMWFcdTc5OTRcdWZhMWJcdTc5OWJcdTdhZDFcdTdhZTdcdWZhMWNcdTdhZWJcdTdiOWVcdWZhMWRcdTdkNDhcdTdkNWNcdTdkYjdcdTdkYTBcdTdkZDZcdTdlNTJcdTdmNDdcdTdmYTFcdWZhMWVcdTgzMDFcdTgzNjJcdTgzN2ZcdTgz''@;'; put 'put ''YzdcdTgzZjZcdTg0NDhcdTg0YjRcdTg1NTNcdTg1NTkiXSxbImVlODAiLCJcdTg1NmJcdWZhMWZcdTg1YjBcdWZhMjBcdWZhMjFcdTg4MDdcdTg4ZjVcdThhMTJcdThhMzdcdThhNzlcdThhYTdcdThhYmVcdThhZGZcdWZhMjJcdThhZjZcdThiNTNcdThiN2ZcdThjZjBcdThjZjRcdThkMTJc''@;'; put 'put ''dThkNzZcdWZhMjNcdThlY2ZcdWZhMjRcdWZhMjVcdTkwNjdcdTkwZGVcdWZhMjZcdTkxMTVcdTkxMjdcdTkxZGFcdTkxZDdcdTkxZGVcdTkxZWRcdTkxZWVcdTkxZTRcdTkxZTVcdTkyMDZcdTkyMTBcdTkyMGFcdTkyM2FcdTkyNDBcdTkyM2NcdTkyNGVcdTkyNTlcdTkyNTFcdTkyMzlcdTky''@;'; put 'put ''NjdcdTkyYTdcdTkyNzdcdTkyNzhcdTkyZTdcdTkyZDdcdTkyZDlcdTkyZDBcdWZhMjdcdTkyZDVcdTkyZTBcdTkyZDNcdTkzMjVcdTkzMjFcdTkyZmJcdWZhMjhcdTkzMWVcdTkyZmZcdTkzMWRcdTkzMDJcdTkzNzBcdTkzNTdcdTkzYTRcdTkzYzZcdTkzZGVcdTkzZjhcdTk0MzFcdTk0NDVc''@;'; put 'put ''dTk0NDhcdTk1OTJcdWY5ZGNcdWZhMjlcdTk2OWRcdTk2YWZcdTk3MzNcdTk3M2JcdTk3NDNcdTk3NGRcdTk3NGZcdTk3NTFcdTk3NTVcdTk4NTdcdTk4NjVcdWZhMmFcdWZhMmJcdTk5MjdcdWZhMmNcdTk5OWVcdTlhNGVcdTlhZDlcdTlhZGNcdTliNzVcdTliNzJcdTliOGZcdTliYjFcdTli''@;'; put 'put ''YmJcdTljMDBcdTlkNzBcdTlkNmJcdWZhMmRcdTllMTlcdTllZDEiXSxbImVlZWYiLCJcdTIxNzAiLDksIlx1ZmZlMlx1ZmZlNFx1ZmYwN1x1ZmYwMiJdLFsiZjA0MCIsIlx1ZTAwMCIsNjJdLFsiZjA4MCIsIlx1ZTAzZiIsMTI0XSxbImYxNDAiLCJcdWUwYmMiLDYyXSxbImYxODAiLCJcdWUw''@;'; put 'put ''ZmIiLDEyNF0sWyJmMjQwIiwiXHVlMTc4Iiw2Ml0sWyJmMjgwIiwiXHVlMWI3IiwxMjRdLFsiZjM0MCIsIlx1ZTIzNCIsNjJdLFsiZjM4MCIsIlx1ZTI3MyIsMTI0XSxbImY0NDAiLCJcdWUyZjAiLDYyXSxbImY0ODAiLCJcdWUzMmYiLDEyNF0sWyJmNTQwIiwiXHVlM2FjIiw2Ml0sWyJmNTgw''@;'; put 'put ''IiwiXHVlM2ViIiwxMjRdLFsiZjY0MCIsIlx1ZTQ2OCIsNjJdLFsiZjY4MCIsIlx1ZTRhNyIsMTI0XSxbImY3NDAiLCJcdWU1MjQiLDYyXSxbImY3ODAiLCJcdWU1NjMiLDEyNF0sWyJmODQwIiwiXHVlNWUwIiw2Ml0sWyJmODgwIiwiXHVlNjFmIiwxMjRdLFsiZjk0MCIsIlx1ZTY5YyJdLFsi''@;'; put 'put ''ZmE0MCIsIlx1MjE3MCIsOSwiXHUyMTYwIiw5LCJcdWZmZTJcdWZmZTRcdWZmMDdcdWZmMDJcdTMyMzFcdTIxMTZcdTIxMjFcdTIyMzVcdTdlOGFcdTg5MWNcdTkzNDhcdTkyODhcdTg0ZGNcdTRmYzlcdTcwYmJcdTY2MzFcdTY4YzhcdTkyZjlcdTY2ZmJcdTVmNDVcdTRlMjhcdTRlZTFcdTRl''@;'; put 'put ''ZmNcdTRmMDBcdTRmMDNcdTRmMzlcdTRmNTZcdTRmOTJcdTRmOGFcdTRmOWFcdTRmOTRcdTRmY2RcdTUwNDBcdTUwMjJcdTRmZmZcdTUwMWVcdTUwNDZcdTUwNzBcdTUwNDJcdTUwOTRcdTUwZjRcdTUwZDhcdTUxNGEiXSxbImZhODAiLCJcdTUxNjRcdTUxOWRcdTUxYmVcdTUxZWNcdTUyMTVc''@;'; put 'put ''dTUyOWNcdTUyYTZcdTUyYzBcdTUyZGJcdTUzMDBcdTUzMDdcdTUzMjRcdTUzNzJcdTUzOTNcdTUzYjJcdTUzZGRcdWZhMGVcdTU0OWNcdTU0OGFcdTU0YTlcdTU0ZmZcdTU1ODZcdTU3NTlcdTU3NjVcdTU3YWNcdTU3YzhcdTU3YzdcdWZhMGZcdWZhMTBcdTU4OWVcdTU4YjJcdTU5MGJcdTU5''@;'; put 'put ''NTNcdTU5NWJcdTU5NWRcdTU5NjNcdTU5YTRcdTU5YmFcdTViNTZcdTViYzBcdTc1MmZcdTViZDhcdTViZWNcdTVjMWVcdTVjYTZcdTVjYmFcdTVjZjVcdTVkMjdcdTVkNTNcdWZhMTFcdTVkNDJcdTVkNmRcdTVkYjhcdTVkYjlcdTVkZDBcdTVmMjFcdTVmMzRcdTVmNjdcdTVmYjdcdTVmZGVc''@;'; put 'put ''dTYwNWRcdTYwODVcdTYwOGFcdTYwZGVcdTYwZDVcdTYxMjBcdTYwZjJcdTYxMTFcdTYxMzdcdTYxMzBcdTYxOThcdTYyMTNcdTYyYTZcdTYzZjVcdTY0NjBcdTY0OWRcdTY0Y2VcdTY1NGVcdTY2MDBcdTY2MTVcdTY2M2JcdTY2MDlcdTY2MmVcdTY2MWVcdTY2MjRcdTY2NjVcdTY2NTdcdTY2''@;'; put 'put ''NTlcdWZhMTJcdTY2NzNcdTY2OTlcdTY2YTBcdTY2YjJcdTY2YmZcdTY2ZmFcdTY3MGVcdWY5MjlcdTY3NjZcdTY3YmJcdTY4NTJcdTY3YzBcdTY4MDFcdTY4NDRcdTY4Y2ZcdWZhMTNcdTY5NjhcdWZhMTRcdTY5OThcdTY5ZTJcdTZhMzBcdTZhNmJcdTZhNDZcdTZhNzNcdTZhN2VcdTZhZTJc''@;'; put 'put ''dTZhZTRcdTZiZDZcdTZjM2ZcdTZjNWNcdTZjODZcdTZjNmZcdTZjZGFcdTZkMDRcdTZkODdcdTZkNmYiXSxbImZiNDAiLCJcdTZkOTZcdTZkYWNcdTZkY2ZcdTZkZjhcdTZkZjJcdTZkZmNcdTZlMzlcdTZlNWNcdTZlMjdcdTZlM2NcdTZlYmZcdTZmODhcdTZmYjVcdTZmZjVcdTcwMDVcdTcw''@;'; put 'put ''MDdcdTcwMjhcdTcwODVcdTcwYWJcdTcxMGZcdTcxMDRcdTcxNWNcdTcxNDZcdTcxNDdcdWZhMTVcdTcxYzFcdTcxZmVcdTcyYjFcdTcyYmVcdTczMjRcdWZhMTZcdTczNzdcdTczYmRcdTczYzlcdTczZDZcdTczZTNcdTczZDJcdTc0MDdcdTczZjVcdTc0MjZcdTc0MmFcdTc0MjlcdTc0MmVc''@;'; put 'put ''dTc0NjJcdTc0ODlcdTc0OWZcdTc1MDFcdTc1NmZcdTc2ODJcdTc2OWNcdTc2OWVcdTc2OWJcdTc2YTZcdWZhMTdcdTc3NDZcdTUyYWZcdTc4MjFcdTc4NGVcdTc4NjRcdTc4N2FcdTc5MzBcdWZhMThcdWZhMTkiXSxbImZiODAiLCJcdWZhMWFcdTc5OTRcdWZhMWJcdTc5OWJcdTdhZDFcdTdh''@;'; put 'put ''ZTdcdWZhMWNcdTdhZWJcdTdiOWVcdWZhMWRcdTdkNDhcdTdkNWNcdTdkYjdcdTdkYTBcdTdkZDZcdTdlNTJcdTdmNDdcdTdmYTFcdWZhMWVcdTgzMDFcdTgzNjJcdTgzN2ZcdTgzYzdcdTgzZjZcdTg0NDhcdTg0YjRcdTg1NTNcdTg1NTlcdTg1NmJcdWZhMWZcdTg1YjBcdWZhMjBcdWZhMjFc''@;'; put 'put ''dTg4MDdcdTg4ZjVcdThhMTJcdThhMzdcdThhNzlcdThhYTdcdThhYmVcdThhZGZcdWZhMjJcdThhZjZcdThiNTNcdThiN2ZcdThjZjBcdThjZjRcdThkMTJcdThkNzZcdWZhMjNcdThlY2ZcdWZhMjRcdWZhMjVcdTkwNjdcdTkwZGVcdWZhMjZcdTkxMTVcdTkxMjdcdTkxZGFcdTkxZDdcdTkx''@;'; put 'put ''ZGVcdTkxZWRcdTkxZWVcdTkxZTRcdTkxZTVcdTkyMDZcdTkyMTBcdTkyMGFcdTkyM2FcdTkyNDBcdTkyM2NcdTkyNGVcdTkyNTlcdTkyNTFcdTkyMzlcdTkyNjdcdTkyYTdcdTkyNzdcdTkyNzhcdTkyZTdcdTkyZDdcdTkyZDlcdTkyZDBcdWZhMjdcdTkyZDVcdTkyZTBcdTkyZDNcdTkzMjVc''@;'; put 'put ''dTkzMjFcdTkyZmJcdWZhMjhcdTkzMWVcdTkyZmZcdTkzMWRcdTkzMDJcdTkzNzBcdTkzNTdcdTkzYTRcdTkzYzZcdTkzZGVcdTkzZjhcdTk0MzFcdTk0NDVcdTk0NDhcdTk1OTJcdWY5ZGNcdWZhMjlcdTk2OWRcdTk2YWZcdTk3MzNcdTk3M2JcdTk3NDNcdTk3NGRcdTk3NGZcdTk3NTFcdTk3''@;'; put 'put ''NTVcdTk4NTdcdTk4NjVcdWZhMmFcdWZhMmJcdTk5MjdcdWZhMmNcdTk5OWVcdTlhNGVcdTlhZDkiXSxbImZjNDAiLCJcdTlhZGNcdTliNzVcdTliNzJcdTliOGZcdTliYjFcdTliYmJcdTljMDBcdTlkNzBcdTlkNmJcdWZhMmRcdTllMTlcdTllZDEiXV0nKX0sNDA5MDU6ZnVuY3Rpb24oY2Us''@;'; put 'put ''WCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXt3b3Jkczp7c3M6WyJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzAiLCJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzUiLCJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNc''@;'; put 'put ''dTA0M2RcdTA0MzRcdTA0MzgiXSxtOlsiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDMwXHUwNDNkIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzZFx1MDQzZVx1MDQzMyBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzAiXSxt''@;'; put 'put ''bTpbIlx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsIlx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzMCIsIlx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzMCJdLGg6WyJcdTA0NThcdTA0MzVcdTA0MzRcdTA0MzBcdTA0M2QgXHUwNDQxXHUwNDMwXHUw''@;'; put 'put ''NDQyIiwiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDNkXHUwNDNlXHUwNDMzIFx1MDQ0MVx1MDQzMFx1MDQ0Mlx1MDQzMCJdLGhoOlsiXHUwNDQxXHUwNDMwXHUwNDQyIiwiXHUwNDQxXHUwNDMwXHUwNDQyXHUwNDMwIiwiXHUwNDQxXHUwNDMwXHUwNDQyXHUwNDM4Il0sZDpbIlx1MDQ1OFx1MDQz''@;'; put 'put ''NVx1MDQzNFx1MDQzMFx1MDQzZCBcdTA0MzRcdTA0MzBcdTA0M2QiLCJcdTA0NThcdTA0MzVcdTA0MzRcdTA0M2RcdTA0M2VcdTA0MzMgXHUwNDM0XHUwNDMwXHUwNDNkXHUwNDMwIl0sZGQ6WyJcdTA0MzRcdTA0MzBcdTA0M2QiLCJcdTA0MzRcdTA0MzBcdTA0M2RcdTA0MzAiLCJcdTA0MzRc''@;'; put 'put ''dTA0MzBcdTA0M2RcdTA0MzAiXSxNOlsiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDMwXHUwNDNkIFx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0NiIsIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzZFx1MDQzZVx1MDQzMyBcdTA0M2NcdTA0MzVcdTA0NDFcdTA0MzVcdTA0NDZcdTA0MzAiXSxN''@;'; put 'put ''TTpbIlx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0NiIsIlx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0Nlx1MDQzMCIsIlx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0Nlx1MDQzOCJdLHk6WyJcdTA0NThcdTA0MzVcdTA0MzRcdTA0M2RcdTA0NDMgXHUwNDMzXHUwNDNlXHUw''@;'; put 'put ''NDM0XHUwNDM4XHUwNDNkXHUwNDQzIiwiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDNkXHUwNDM1IFx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzNSJdLHl5OlsiXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDQzIiwiXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUw''@;'; put 'put ''NDNkXHUwNDM1IiwiXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDMwIl19LGNvcnJlY3RHcmFtbWF0aWNhbENhc2U6ZnVuY3Rpb24oVix3KXtyZXR1cm4gViUxMD49MSYmViUxMDw9NCYmKFYlMTAwPDEwfHxWJTEwMD49MjApP1YlMTA9PTE/d1swXTp3WzFdOndbMl19LHRyYW5z''@;'; put 'put ''bGF0ZTpmdW5jdGlvbihWLHcsUCxGKXt2YXIgeixSPV8ud29yZHNbUF07cmV0dXJuIDE9PT1QLmxlbmd0aD8ieSI9PT1QJiZ3PyJcdTA0NThcdTA0MzVcdTA0MzRcdTA0M2RcdTA0MzAgXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDMwIjpGfHx3P1JbMF06UlsxXTooej1fLmNv''@;'; put 'put ''cnJlY3RHcmFtbWF0aWNhbENhc2UoVixSKSwieXkiPT09UCYmdyYmIlx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQ0MyI9PT16P1YrIiBcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzAiOlYrIiAiK3opfX07SS5kZWZpbmVMb2NhbGUoInNyLWN5cmwiLHttb250''@;'; put 'put ''aHM6Ilx1MDQ1OFx1MDQzMFx1MDQzZFx1MDQ0M1x1MDQzMFx1MDQ0MF9cdTA0NDRcdTA0MzVcdTA0MzFcdTA0NDBcdTA0NDNcdTA0MzBcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzOFx1MDQzYl9cdTA0M2NcdTA0MzBcdTA0NThfXHUwNDU4''@;'; put 'put ''XHUwNDQzXHUwNDNkX1x1MDQ1OFx1MDQ0M1x1MDQzYl9cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNmXHUwNDQyXHUwNDM1XHUwNDNjXHUwNDMxXHUwNDMwXHUwNDQwX1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQzZVx1MDQzMVx1MDQzMFx1MDQ0''@;'; put 'put ''MF9cdTA0M2RcdTA0M2VcdTA0MzJcdTA0MzVcdTA0M2NcdTA0MzFcdTA0MzBcdTA0NDBfXHUwNDM0XHUwNDM1XHUwNDQ2XHUwNDM1XHUwNDNjXHUwNDMxXHUwNDMwXHUwNDQwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0NThcdTA0MzBcdTA0M2QuX1x1MDQ0NFx1MDQzNVx1MDQzMS5f''@;'; put 'put ''XHUwNDNjXHUwNDMwXHUwNDQwLl9cdTA0MzBcdTA0M2ZcdTA0NDAuX1x1MDQzY1x1MDQzMFx1MDQ1OF9cdTA0NThcdTA0NDNcdTA0M2RfXHUwNDU4XHUwNDQzXHUwNDNiX1x1MDQzMFx1MDQzMlx1MDQzMy5fXHUwNDQxXHUwNDM1XHUwNDNmLl9cdTA0M2VcdTA0M2FcdTA0NDIuX1x1MDQzZFx1''@;'; put 'put ''MDQzZVx1MDQzMi5fXHUwNDM0XHUwNDM1XHUwNDQ2LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0NTlcdTA0MzBfXHUwNDNmXHUwNDNlXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDU5XHUwNDMwXHUwNDNh''@;'; put 'put ''X1x1MDQ0M1x1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzMFx1MDQzYV9cdTA0NDFcdTA0NDBcdTA0MzVcdTA0MzRcdTA0MzBfXHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDQwXHUwNDQyXHUwNDMwXHUwNDNhX1x1MDQzZlx1MDQzNVx1MDQ0Mlx1MDQzMFx1MDQzYV9cdTA0NDFcdTA0NDNcdTA0''@;'; put 'put ''MzFcdTA0M2VcdTA0NDJcdTA0MzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNDNkXHUwNDM1XHUwNDM0Ll9cdTA0M2ZcdTA0M2VcdTA0M2QuX1x1MDQ0M1x1MDQ0Mlx1MDQzZS5fXHUwNDQxXHUwNDQwXHUwNDM1Ll9cdTA0NDdcdTA0MzVcdTA0NDIuX1x1MDQzZlx1MDQzNVx1MDQ0''@;'; put 'put ''Mi5fXHUwNDQxXHUwNDQzXHUwNDMxLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDNkXHUwNDM1X1x1MDQzZlx1MDQzZV9cdTA0NDNcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQzNV9cdTA0M2ZcdTA0MzVfXHUwNDQxXHUwNDQzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VF''@;'; put 'put ''eGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiRC4gTS4gWVlZWS4iLExMOiJELiBNTU1NIFlZWVkuIixMTEw6IkQuIE1NTU0gWVlZWS4gSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZLiBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0''@;'; put 'put ''MzRcdTA0MzBcdTA0M2RcdTA0MzBcdTA0NDEgXHUwNDQzXSBMVCIsbmV4dERheToiW1x1MDQ0MVx1MDQ0M1x1MDQ0Mlx1MDQ0MFx1MDQzMCBcdTA0NDNdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIltcdTA0NDNdIFtcdTA0M2RcdTA0''@;'; put 'put ''MzVcdTA0MzRcdTA0MzVcdTA0NTlcdTA0NDNdIFtcdTA0NDNdIExUIjtjYXNlIDM6cmV0dXJuIltcdTA0NDNdIFtcdTA0NDFcdTA0NDBcdTA0MzVcdTA0MzRcdTA0NDNdIFtcdTA0NDNdIExUIjtjYXNlIDY6cmV0dXJuIltcdTA0NDNdIFtcdTA0NDFcdTA0NDNcdTA0MzFcdTA0M2VcdTA0NDJc''@;'; put 'put ''dTA0NDNdIFtcdTA0NDNdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIltcdTA0NDNdIGRkZGQgW1x1MDQ0M10gTFQifX0sbGFzdERheToiW1x1MDQ1OFx1MDQ0M1x1MDQ0N1x1MDQzNSBcdTA0NDNdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVyblsiW1x1MDQz''@;'; put 'put ''Zlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQzNV0gW1x1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQ1OVx1MDQzNV0gW1x1MDQ0M10gTFQiLCJbXHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQ4XHUwNDNiXHUwNDNlXHUwNDMzXSBbXHUwNDNmXHUwNDNlXHUwNDNkXHUwNDM1XHUwNDM0XHUw''@;'; put 'put ''NDM1XHUwNDU5XHUwNDNhXHUwNDMwXSBbXHUwNDQzXSBMVCIsIltcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0M2VcdTA0MzNdIFtcdTA0NDNcdTA0NDJcdTA0M2VcdTA0NDBcdTA0M2FcdTA0MzBdIFtcdTA0NDNdIExUIiwiW1x1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQz''@;'; put 'put ''Ylx1MDQzNV0gW1x1MDQ0MVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzNV0gW1x1MDQ0M10gTFQiLCJbXHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQ4XHUwNDNiXHUwNDNlXHUwNDMzXSBbXHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDQwXHUwNDQyXHUwNDNhXHUwNDMwXSBbXHUwNDQzXSBMVCIs''@;'; put 'put ''IltcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0M2VcdTA0MzNdIFtcdTA0M2ZcdTA0MzVcdTA0NDJcdTA0M2FcdTA0MzBdIFtcdTA0NDNdIExUIiwiW1x1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQzNV0gW1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1''@;'; put 'put ''MDQzNV0gW1x1MDQ0M10gTFQiXVt0aGlzLmRheSgpXX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDM3XHUwNDMwICVzIixwYXN0OiJcdTA0M2ZcdTA0NDBcdTA0MzUgJXMiLHM6Ilx1MDQzZFx1MDQzNVx1MDQzYVx1MDQzZVx1MDQzYlx1MDQzOFx1MDQzYVx1MDQz''@;'; put 'put ''ZSBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzgiLHNzOl8udHJhbnNsYXRlLG06Xy50cmFuc2xhdGUsbW06Xy50cmFuc2xhdGUsaDpfLnRyYW5zbGF0ZSxoaDpfLnRyYW5zbGF0ZSxkOl8udHJhbnNsYXRlLGRkOl8udHJhbnNsYXRlLE06Xy50cmFuc2xhdGUsTU06''@;'; put 'put ''Xy50cmFuc2xhdGUseTpfLnRyYW5zbGF0ZSx5eTpfLnRyYW5zbGF0ZX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfShiKDk3NTg2KSl9LDQxMDkwOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMjcw''@;'; put 'put ''NTQpLkJ1ZmZlcixfPWIoNTY0NzEpLHA9Yig1NzMpLFY9QXJyYXlCdWZmZXIuaXNWaWV3fHxmdW5jdGlvbih6KXt0cnl7cmV0dXJuIHAoeiksITB9Y2F0Y2h7cmV0dXJuITF9fSx3PXR5cGVvZiBVaW50OEFycmF5PCJ1IixQPXR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJnR5cGVvZiBVaW50OEFy''@;'; put 'put ''cmF5PCJ1IixGPVAmJihJLnByb3RvdHlwZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fEkuVFlQRURfQVJSQVlfU1VQUE9SVCk7Y2UuZXhwb3J0cz1mdW5jdGlvbih6LE4pe2lmKEkuaXNCdWZmZXIoeikpcmV0dXJuIHouY29uc3RydWN0b3ImJiEoImlzQnVmZmVyImluIHopP0kuZnJvbSh6KTp6''@;'; put 'put ''O2lmKCJzdHJpbmciPT10eXBlb2YgeilyZXR1cm4gSS5mcm9tKHosTik7aWYoUCYmVih6KSl7aWYoMD09PXouYnl0ZUxlbmd0aClyZXR1cm4gSS5hbGxvYygwKTtpZihGKXt2YXIgTz1JLmZyb20oei5idWZmZXIsei5ieXRlT2Zmc2V0LHouYnl0ZUxlbmd0aCk7aWYoTy5ieXRlTGVuZ3RoPT09''@;'; put 'put ''ei5ieXRlTGVuZ3RoKXJldHVybiBPfXZhciBLPXogaW5zdGFuY2VvZiBVaW50OEFycmF5P3o6bmV3IFVpbnQ4QXJyYXkoei5idWZmZXIsei5ieXRlT2Zmc2V0LHouYnl0ZUxlbmd0aCksWj1JLmZyb20oSyk7aWYoWi5sZW5ndGg9PT16LmJ5dGVMZW5ndGgpcmV0dXJuIFp9aWYodyYmeiBpbnN0''@;'; put 'put ''YW5jZW9mIFVpbnQ4QXJyYXkpcmV0dXJuIEkuZnJvbSh6KTt2YXIgWT1fKHopO2lmKFkpZm9yKHZhciBXPTA7Vzx6Lmxlbmd0aDtXKz0xKXt2YXIgcT16W1ddO2lmKCJudW1iZXIiIT10eXBlb2YgcXx8cTwwfHxxPjI1NXx8fn5xIT09cSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXJyYXkgaXRl''@;'; put 'put ''bXMgbXVzdCBiZSBudW1iZXJzIGluIHRoZSByYW5nZSAwLTI1NS4iKX1pZihZfHxJLmlzQnVmZmVyKHopJiZ6LmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2Ygei5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmei5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih6KSlyZXR1cm4gSS5mcm9tKHopO3Ro''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiZGF0YSIgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgYW4gQXJyYXksIGEgQnVmZmVyLCBhIFVpbnQ4QXJyYXksIG9yIGEgRGF0YVZpZXcuJyl9fSw0MTI1MjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDMzOTYzKTtjZS5leHBvcnRz''@;'; put 'put ''PWZ1bmN0aW9uKF8scCl7dmFyIFY9SS5JdGVyYXRvcix3PVYmJlYucHJvdG90eXBlLFA9dyYmd1tfXSxGPSExO2lmKFApdHJ5e1AuY2FsbCh7bmV4dDpmdW5jdGlvbigpe3JldHVybntkb25lOiEwfX0scmV0dXJuOmZ1bmN0aW9uKCl7Rj0hMH19LC0xKX1jYXRjaChSKXtSIGluc3RhbmNlb2Yg''@;'; put 'put ''cHx8KEY9ITEpfWlmKCFGKXJldHVybiBQfX0sNDE2Mzg6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiIxIiwyOiIyIiwzOiIzIiw0OiI0Iiw1OiI1Iiw2OiI2Iiw3OiI3Iiw4OiI4Iiw5OiI5IiwwOiIwIn0scD1mdW5jdGlvbihSKXtyZXR1cm4g''@;'; put 'put ''MD09PVI/MDoxPT09Uj8xOjI9PT1SPzI6UiUxMDA+PTMmJlIlMTAwPD0xMD8zOlIlMTAwPj0xMT80OjV9LFY9e3M6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSBc''@;'; put 'put ''dTA2NDhcdTA2MjdcdTA2MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyYlx1MDY0OFx1MDYyN1x1MDY0NiIsIiVkIFx1MDYyYlx1''@;'; put 'put ''MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsIiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSJdLG06WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSBcdTA2''@;'; put 'put ''NDhcdTA2MjdcdTA2MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsIiVkIFx1MDYy''@;'; put 'put ''Zlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsIiVkIFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSJdLGg6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSBcdTA2NDhcdTA2Mjdc''@;'; put 'put ''dTA2MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsIiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIs''@;'; put 'put ''IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSJdLGQ6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDY0YVx1MDY0OFx1MDY0NSIsIlx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjI3XHUwNjQ2''@;'; put 'put ''IiwiXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDY0YVx1MDYyN1x1MDY0NSIsIiVkIFx1MDY0YVx1MDY0OFx1MDY0NVx1MDY0Ylx1MDYyNyIsIiVkIFx1MDY0YVx1MDY0OFx1MDY0NSJdLE06WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1''@;'; put 'put ''MDYzNFx1MDY0N1x1MDYzMSIsIlx1MDYzNFx1MDY0N1x1MDYzMSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjI3XHUwNjQ2IiwiXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYzMSIsIiVk''@;'; put 'put ''IFx1MDYzNFx1MDY0N1x1MDYzMVx1MDYyNyIsIiVkIFx1MDYzNFx1MDY0N1x1MDYzMSJdLHk6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYzOVx1MDYyN1x1MDY0NSIsIlx1MDYzOVx1MDYyN1x1MDY0NSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjM5XHUw''@;'; put 'put ''NjI3XHUwNjQ1XHUwNjI3XHUwNjQ2IiwiXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDYzOVx1MDY0OFx1MDYyN1x1MDY0NSIsIiVkIFx1MDYzOVx1MDYyN1x1MDY0NVx1MDY0Ylx1MDYyNyIsIiVkIFx1MDYzOVx1MDYyN1x1MDY0NSJdfSx3PWZ1bmN0aW9u''@;'; put 'put ''KFIpe3JldHVybiBmdW5jdGlvbih6LE4sTyxLKXt2YXIgWj1wKHopLFk9VltSXVtwKHopXTtyZXR1cm4gMj09PVomJihZPVlbTj8wOjFdKSxZLnJlcGxhY2UoLyVkL2kseil9fSxQPVsiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxIiwiXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUw''@;'; put 'put ''NjRhXHUwNjMxIiwiXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzIiwiXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0IiwiXHUwNjQ1XHUwNjI3XHUwNjRhXHUwNjQ4IiwiXHUwNjRhXHUwNjQ4XHUwNjQ2XHUwNjRhXHUwNjQ4IiwiXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4Iiwi''@;'; put 'put ''XHUwNjIzXHUwNjNhXHUwNjMzXHUwNjM3XHUwNjMzIiwiXHUwNjMzXHUwNjI4XHUwNjJhXHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxIiwiXHUwNjQ2XHUwNjQ4XHUwNjQxXHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUwNjJmXHUwNjRhXHUw''@;'; put 'put ''NjMzXHUwNjQ1XHUwNjI4XHUwNjMxIl07SS5kZWZpbmVMb2NhbGUoImFyLWx5Iix7bW9udGhzOlAsbW9udGhzU2hvcnQ6UCx3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2''@;'; put 'put ''NDRcdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUw''@;'; put 'put ''NjI3XHUwNjQ0XHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyM1x1MDYzMVx1MDYyOFx1MDYz''@;'; put 'put ''OVx1MDYyN1x1MDYyMV9cdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgi''@;'; put 'put ''XyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJEL1x1MjAwZk0vXHUyMDBmWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0s''@;'; put 'put ''bWVyaWRpZW1QYXJzZTovXHUwNjM1fFx1MDY0NS8saXNQTTpmdW5jdGlvbihSKXtyZXR1cm4iXHUwNjQ1Ij09PVJ9LG1lcmlkaWVtOmZ1bmN0aW9uKFIseixOKXtyZXR1cm4gUjwxMj8iXHUwNjM1IjoiXHUwNjQ1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2''@;'; put 'put ''NDhcdTA2NDUgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2NGJcdTA2MjcgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQi''@;'; put 'put ''LG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1MDYzMyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBM''@;'; put 'put ''VCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2MjhcdTA2MzlcdTA2MmYgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAl''@;'; put 'put ''cyIsczp3KCJzIiksc3M6dygicyIpLG06dygibSIpLG1tOncoIm0iKSxoOncoImgiKSxoaDp3KCJoIiksZDp3KCJkIiksZGQ6dygiZCIpLE06dygiTSIpLE1NOncoIk0iKSx5OncoInkiKSx5eTp3KCJ5Iil9LHByZXBhcnNlOmZ1bmN0aW9uKFIpe3JldHVybiBSLnJlcGxhY2UoL1x1MDYwYy9n''@;'; put 'put ''LCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oUil7cmV0dXJuIFIucmVwbGFjZSgvXGQvZyxmdW5jdGlvbih6KXtyZXR1cm4gX1t6XX0pLnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2Rvdzo2LGRveToxMn19KX0oYig5NzU4NikpfSw0MTgwNTpmdW5jdGlvbihjZSxYLGIpeyFmdW5j''@;'; put 'put ''dGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ImVuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5fYWdvLl9zZXAuX29jdC5fbm92Ll9kaWMuIi5zcGxpdCgiXyIpLHA9ImVuZV9mZWJfbWFyX2Ficl9tYXlfanVuX2p1bF9hZ29fc2VwX29jdF9ub3ZfZGljIi5zcGxpdCgiXyIpLFY9''@;'; put 'put ''Wy9eZW5lL2ksL15mZWIvaSwvXm1hci9pLC9eYWJyL2ksL15tYXkvaSwvXmp1bi9pLC9eanVsL2ksL15hZ28vaSwvXnNlcC9pLC9eb2N0L2ksL15ub3YvaSwvXmRpYy9pXSx3PS9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxv''@;'; put 'put ''Y3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmV8ZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2k7SS5kZWZpbmVMb2NhbGUoImVzLWRvIix7bW9udGhzOiJlbmVyb19mZWJyZXJvX21hcnpv''@;'; put 'put ''X2FicmlsX21heW9fanVuaW9fanVsaW9fYWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1icmVfZGljaWVtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKEYsUil7cmV0dXJuIEY/Ly1NTU0tLy50ZXN0KFIpP3BbRi5tb250aCgpXTpfW0YubW9udGgoKV06X30sbW9u''@;'; put 'put ''dGhzUmVnZXg6dyxtb250aHNTaG9ydFJlZ2V4OncsbW9udGhzU3RyaWN0UmVnZXg6L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4''@;'; put 'put ''Oi9eKGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pLG1vbnRoc1BhcnNlOlYsbG9uZ01vbnRoc1BhcnNlOlYsc2hvcnRNb250aHNQYXJzZTpWLHdlZWtkYXlzOiJkb21pbmdvX2x1bmVz''@;'; put 'put ''X21hcnRlc19taVx4ZTlyY29sZXNfanVldmVzX3ZpZXJuZXNfc1x4ZTFiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbS5fbHVuLl9tYXIuX21pXHhlOS5fanVlLl92aWUuX3NceGUxYi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvX2x1X21hX21pX2p1X3ZpX3NceGUxIi5z''@;'; put 'put ''cGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwg''@;'; put 'put ''RCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltob3kgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW21hXHhmMWFuYSBhIGxhIisoMSE9PXRoaXMu''@;'; put 'put ''aG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2F5ZXIgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBM''@;'; put 'put ''VCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltlbF0gZGRkZCBbcGFzYWRvIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlbiAlcyIscGFzdDoiaGFjZSAlcyIsczoidW5vcyBzZWd1bmRvcyIs''@;'; put 'put ''c3M6IiVkIHNlZ3VuZG9zIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bmEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1biBkXHhlZGEiLGRkOiIlZCBkXHhlZGFzIix3OiJ1bmEgc2VtYW5hIix3dzoiJWQgc2VtYW5hcyIsTToidW4gbWVzIixNTToiJWQgbWVzZXMiLHk6InVu''@;'; put 'put ''IGFceGYxbyIseXk6IiVkIGFceGYxb3MifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw0MjA5NjpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5k''@;'; put 'put ''ZWZpbmVMb2NhbGUoImZyLWNhIix7bW9udGhzOiJqYW52aWVyX2ZceGU5dnJpZXJfbWFyc19hdnJpbF9tYWlfanVpbl9qdWlsbGV0X2FvXHhmYnRfc2VwdGVtYnJlX29jdG9icmVfbm92ZW1icmVfZFx4ZTljZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ImphbnYuX2ZceGU5dnIuX21h''@;'; put 'put ''cnNfYXZyLl9tYWlfanVpbl9qdWlsLl9hb1x4ZmJ0X3NlcHQuX29jdC5fbm92Ll9kXHhlOWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6ImRpbWFuY2hlX2x1bmRpX21hcmRpX21lcmNyZWRpX2pldWRpX3ZlbmRyZWRpX3NhbWVkaSIuc3BsaXQoIl8iKSx3ZWVr''@;'; put 'put ''ZGF5c1Nob3J0OiJkaW0uX2x1bi5fbWFyLl9tZXIuX2pldS5fdmVuLl9zYW0uIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkaV9sdV9tYV9tZV9qZV92ZV9zYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpz''@;'; put 'put ''cyIsTDoiWVlZWS1NTS1ERCIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltBdWpvdXJkXHUyMDE5aHVpIFx4ZTBdIExUIixuZXh0RGF5OiJbRGVtYWluIFx4ZTBdIExUIixu''@;'; put 'put ''ZXh0V2VlazoiZGRkZCBbXHhlMF0gTFQiLGxhc3REYXk6IltIaWVyIFx4ZTBdIExUIixsYXN0V2VlazoiZGRkZCBbZGVybmllciBceGUwXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZGFucyAlcyIscGFzdDoiaWwgeSBhICVzIixzOiJxdWVscXVlcyBzZWNvbmRl''@;'; put 'put ''cyIsc3M6IiVkIHNlY29uZGVzIixtOiJ1bmUgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoidW5lIGhldXJlIixoaDoiJWQgaGV1cmVzIixkOiJ1biBqb3VyIixkZDoiJWQgam91cnMiLE06InVuIG1vaXMiLE1NOiIlZCBtb2lzIix5OiJ1biBhbiIseXk6IiVkIGFucyJ9LGRheU9mTW9udGhP''@;'; put 'put ''cmRpbmFsUGFyc2U6L1xkezEsMn0oZXJ8ZSkvLG9yZGluYWw6ZnVuY3Rpb24ocCxWKXtzd2l0Y2goVil7ZGVmYXVsdDpjYXNlIk0iOmNhc2UiUSI6Y2FzZSJEIjpjYXNlIkRERCI6Y2FzZSJkIjpyZXR1cm4gcCsoMT09PXA/ImVyIjoiZSIpO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gcCsoMT09''@;'; put 'put ''PXA/InJlIjoiZSIpfX19KX0oYig5NzU4NikpfSw0MjcwOTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDcxOTkzKSxfPWIoMzIxNDgpLHA9Yig3MDQ2MyksVj1iKDI3MDU0KS5CdWZmZXIsdz1uZXcgQXJyYXkoNjQpO2Z1bmN0aW9uIFAoKXt0aGlzLmluaXQoKSx0aGlzLl93PXcs''@;'; put 'put ''cC5jYWxsKHRoaXMsNjQsNTYpfUkoUCxfKSxQLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MzIzODM3MTAzMix0aGlzLl9iPTkxNDE1MDY2Myx0aGlzLl9jPTgxMjcwMjk5OSx0aGlzLl9kPTQxNDQ5MTI2OTcsdGhpcy5fZT00MjkwNzc1ODU3LHRoaXMuX2Y9MTc1''@;'; put 'put ''MDYwMzAyNSx0aGlzLl9nPTE2OTQwNzY4MzksdGhpcy5faD0zMjA0MDc1NDI4LHRoaXN9LFAucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIEY9Vi5hbGxvY1Vuc2FmZSgyOCk7cmV0dXJuIEYud3JpdGVJbnQzMkJFKHRoaXMuX2EsMCksRi53cml0ZUludDMyQkUodGhpcy5fYiw0KSxG''@;'; put 'put ''LndyaXRlSW50MzJCRSh0aGlzLl9jLDgpLEYud3JpdGVJbnQzMkJFKHRoaXMuX2QsMTIpLEYud3JpdGVJbnQzMkJFKHRoaXMuX2UsMTYpLEYud3JpdGVJbnQzMkJFKHRoaXMuX2YsMjApLEYud3JpdGVJbnQzMkJFKHRoaXMuX2csMjQpLEZ9LGNlLmV4cG9ydHM9UH0sNDI5MjQ6ZnVuY3Rpb24o''@;'; put 'put ''Y2Upe3ZhciBYPXt2ZXJzaW9uOiIxLjE1LjAifTtYWzQzN109ZnVuY3Rpb24oKXtmb3IodmFyIGI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRc''@;'; put 'put ''eDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4ZWNc''@;'; put 'put ''eGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhhMlx4YTNceGE1XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAy''@;'; put 'put ''XHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUy''@;'; put 'put ''NTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAz''@;'; put 'put ''YjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAiLEk9W10sXz17fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9b''@;'; put 'put ''Yi5jaGFyQXQocCldPXApLElbcF09Yi5jaGFyQXQocCk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzYyMF09ZnVuY3Rpb24oKXtmb3IodmFyIGI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4''@;'; put 'put ''MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHUwMTA1''@;'; put 'put ''XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHUwMTA3XHhjNFx1MDEwNFx1MDExOFx1MDExOVx1MDE0Mlx4ZjRceGY2XHUwMTA2XHhmYlx4ZjlcdTAxNWFceGQ2XHhkY1x4YTJcdTAxNDFceGE1XHUwMTViXHUwMTkyXHUwMTc5XHUwMTdiXHhmM1x4ZDNcdTAxNDRcdTAxNDNcdTAxN2FcdTAxN2Nc''@;'; put 'put ''eGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNj''@;'; put 'put ''XHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhk''@;'; put 'put ''Zlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4''@;'; put 'put ''YTAiLEk9W10sXz17fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9bYi5jaGFyQXQocCldPXApLElbcF09Yi5jaGFyQXQocCk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzczN109ZnVuY3Rpb24oKXtmb3IodmFyIGI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVc''@;'; put 'put ''eDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZn''@;'; put 'put ''aGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4''@;'; put 'put ''XHUwM2E5XHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2MyXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUyNTkxXHUyNTkyXHUy''@;'; put 'put ''NTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUw''@;'; put 'put ''XHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2M5XHUwM2FjXHUwM2FkXHUwM2FlXHUwM2NhXHUwM2FmXHUwM2NjXHUwM2NkXHUwM2NiXHUw''@;'; put 'put ''M2NlXHUwMzg2XHUwMzg4XHUwMzg5XHUwMzhhXHUwMzhjXHUwMzhlXHUwMzhmXHhiMVx1MjI2NVx1MjI2NFx1MDNhYVx1MDNhYlx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixJPVtdLF89e30scD0wOzI1NiE9cDsrK3ApNjU1MzMhPT1iLmNoYXJD''@;'; put 'put ''b2RlQXQocCkmJihfW2IuY2hhckF0KHApXT1wKSxJW3BdPWIuY2hhckF0KHApO3JldHVybntlbmM6XyxkZWM6SX19KCksWFs4NTBdPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNc''@;'; put 'put ''eDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJc''@;'; put 'put ''eGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4ZjhceGEzXHhkOFx4ZDdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZceGFlXHhhY1x4YmRceGJj''@;'; put 'put ''XHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJceGMwXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHhlM1x4YzNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZc''@;'; put 'put ''dTI1NjBcdTI1NTBcdTI1NmNceGE0XHhmMFx4ZDBceGNhXHhjYlx4YzhcdTAxMzFceGNkXHhjZVx4Y2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHhjY1x1MjU4MFx4ZDNceGRmXHhkNFx4ZDJceGY1XHhkNVx4YjVceGZlXHhkZVx4ZGFceGRiXHhkOVx4ZmRceGRkXHhhZlx4YjRceGFk''@;'; put 'put ''XHhiMVx1MjAxN1x4YmVceGI2XHhhN1x4ZjdceGI4XHhiMFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCIsST1bXSxfPXt9LHA9MDsyNTYhPXA7KytwKTY1NTMzIT09Yi5jaGFyQ29kZUF0KHApJiYoX1tiLmNoYXJBdChwKV09cCksSVtwXT1iLmNoYXJBdChwKTtyZXR1cm57ZW5jOl8s''@;'; put 'put ''ZGVjOkl9fSgpLFhbODUyXT1mdW5jdGlvbigpe2Zvcih2YXIgYj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkq''@;'; put 'put ''KywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx1MDE2Zlx1MDEwN1x4ZTdcdTAxNDJceGViXHUwMTUwXHUwMTUxXHhlZVx1MDE3OVx4YzRcdTAx''@;'; put 'put ''MDZceGM5XHUwMTM5XHUwMTNhXHhmNFx4ZjZcdTAxM2RcdTAxM2VcdTAxNWFcdTAxNWJceGQ2XHhkY1x1MDE2NFx1MDE2NVx1MDE0MVx4ZDdcdTAxMGRceGUxXHhlZFx4ZjNceGZhXHUwMTA0XHUwMTA1XHUwMTdkXHUwMTdlXHUwMTE4XHUwMTE5XHhhY1x1MDE3YVx1MDEwY1x1MDE1Zlx4YWJc''@;'; put 'put ''eGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJcdTAxMWFcdTAxNWVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTAxN2JcdTAxN2NcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTAxMDJcdTAxMDNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1''@;'; put 'put ''NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHUwMTExXHUwMTEwXHUwMTBlXHhjYlx1MDEwZlx1MDE0N1x4Y2RceGNlXHUwMTFiXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUwMTYyXHUwMTZlXHUyNTgwXHhkM1x4ZGZceGQ0XHUwMTQzXHUwMTQ0XHUwMTQ4XHUwMTYwXHUwMTYxXHUwMTU0XHhk''@;'; put 'put ''YVx1MDE1NVx1MDE3MFx4ZmRceGRkXHUwMTYzXHhiNFx4YWRcdTAyZGRcdTAyZGJcdTAyYzdcdTAyZDhceGE3XHhmN1x4YjhceGIwXHhhOFx1MDJkOVx1MDE3MVx1MDE1OFx1MDE1OVx1MjVhMFx4YTAiLEk9W10sXz17fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYm''@;'; put 'put ''KF9bYi5jaGFyQXQocCldPXApLElbcF09Yi5jaGFyQXQocCk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzg1N109ZnVuY3Rpb24oKXtmb3IodmFyIGI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgx''@;'; put 'put ''Nlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhl''@;'; put 'put ''NVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx1MDEzMVx4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlcdTAxMzBceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MDE1ZVx1MDE1Zlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx1MDExZVx1MDExZlx4YmZceGFlXHhhY1x4YmRceGJj''@;'; put 'put ''XHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJceGMwXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHhlM1x4YzNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZc''@;'; put 'put ''dTI1NjBcdTI1NTBcdTI1NmNceGE0XHhiYVx4YWFceGNhXHhjYlx4YzhcdWZmZmRceGNkXHhjZVx4Y2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHhjY1x1MjU4MFx4ZDNceGRmXHhkNFx4ZDJceGY1XHhkNVx4YjVcdWZmZmRceGQ3XHhkYVx4ZGJceGQ5XHhlY1x4ZmZceGFmXHhiNFx4''@;'; put 'put ''YWRceGIxXHVmZmZkXHhiZVx4YjZceGE3XHhmN1x4YjhceGIwXHhhOFx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIixJPVtdLF89e30scD0wOzI1NiE9cDsrK3ApNjU1MzMhPT1iLmNoYXJDb2RlQXQocCkmJihfW2IuY2hhckF0KHApXT1wKSxJW3BdPWIuY2hhckF0KHApO3JldHVybntlbmM6''@;'; put 'put ''XyxkZWM6SX19KCksWFs4NjFdPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJico''@;'; put 'put ''KSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhkMFx4ZjBceGRlXHhjNFx4YzVceGM5XHhlNlx4''@;'; put 'put ''YzZceGY0XHhmNlx4ZmVceGZiXHhkZFx4ZmRceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGMxXHhjZFx4ZDNceGRhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2''@;'; put 'put ''Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1''@;'; put 'put ''MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUw''@;'; put 'put ''M2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixJPVtdLF89e30scD0wOzI1NiE9cDsrK3ApNjU1MzMhPT1iLmNoYXJDb2RlQXQocCkmJihfW2IuY2hhckF0KHApXT1wKSxJ''@;'; put 'put ''W3BdPWIuY2hhckF0KHApO3JldHVybntlbmM6XyxkZWM6SX19KCksWFs4NjVdPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgx''@;'; put 'put ''Ylx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhl''@;'; put 'put ''Zlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhhNFx1MjU5MVx1MjU5Mlx1''@;'; put 'put ''MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1''@;'; put 'put ''MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4''@;'; put 'put ''XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixJPVtdLF89e30scD0wOzI1NiE9cDsrK3ApNjU1MzMhPT1iLmNoYXJDb2Rl''@;'; put 'put ''QXQocCkmJihfW2IuY2hhckF0KHApXT1wKSxJW3BdPWIuY2hhckF0KHApO3JldHVybntlbmM6XyxkZWM6SX19KCksWFs4NjZdPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0''@;'; put 'put ''XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MDQxMFx1MDQxMVx1MDQxMlx1''@;'; put 'put ''MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQy''@;'; put 'put ''ZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1''@;'; put 'put ''MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1''@;'; put 'put ''Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MDQwMVx1''@;'; put 'put ''MDQ1MVx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwZVx1MDQ1ZVx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMTE2XHhhNFx1MjVhMFx4YTAiLEk9W10sXz17fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9bYi5jaGFyQXQocCldPXApLElbcF09Yi5jaGFyQXQo''@;'; put 'put ''cCk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzg3NF09ZnVuY3Rpb24oKXtmb3IodmFyIGI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFl''@;'; put 'put ''XHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDI2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUw''@;'; put 'put ''NVx1MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1''@;'; put 'put ''MGUyMVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1''@;'; put 'put ''MGU1OFx1MGU1OVx1MGU1YVx1MGU1Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIsST1bXSxfPXt9LHA9MDsyNTYhPXA7KytwKTY1NTMzIT09Yi5jaGFyQ29kZUF0KHApJiYoX1tiLmNoYXJBdChwKV09cCksSVtwXT1iLmNoYXJBdChwKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbODk1XT1m''@;'; put 'put ''dW5jdGlvbigpe2Zvcih2YXIgYj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8''@;'; put 'put ''PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTAxMGNceGZjXHhlOVx1MDEwZlx4ZTRcdTAxMGVcdTAxNjRcdTAxMGRcdTAxMWJcdTAxMWFcdTAxMzlceGNkXHUwMTNlXHUwMWVhXHhjNFx4YzFceGM5XHUwMTdl''@;'; put 'put ''XHUwMTdkXHhmNFx4ZjZceGQzXHUwMTZmXHhkYVx4ZmRceGQ2XHhkY1x1MDE2MFx1MDEzZFx4ZGRcdTAxNThcdTAxNjVceGUxXHhlZFx4ZjNceGZhXHUwMTQ4XHUwMTQ3XHUwMTZlXHhkNFx1MDE2MVx1MDE1OVx1MDE1NVx1MDE1NFx4YmNceGE3XHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNc''@;'; put 'put ''dTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1''@;'; put 'put ''NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNh''@;'; put 'put ''OVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIsST1bXSxfPXt9LHA9MDsyNTYhPXA7KytwKTY1NTMzIT09Yi5jaGFyQ29kZUF0KHAp''@;'; put 'put ''JiYoX1tiLmNoYXJBdChwKV09cCksSVtwXT1iLmNoYXJBdChwKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbOTMyXT1mdW5jdGlvbigpe3ZhciBwLGI9W10sST17fSxfPVtdO2ZvcihfWzBdPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBc''@;'; put 'put ''eDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmY2MVx1ZmY2Mlx1ZmY2M1x1ZmY2NFx1ZmY2NVx1ZmY2Nlx1ZmY2N1x1ZmY2OFx1ZmY2OVx1ZmY2YVx1ZmY2Ylx1ZmY2Y1x1ZmY2ZFx1ZmY2ZVx1ZmY2Zlx1ZmY3MFx1ZmY3MVx1ZmY3Mlx1ZmY3M1x1ZmY3NFx1ZmY3NVx1ZmY3Nlx1ZmY3''@;'; put 'put ''N1x1ZmY3OFx1ZmY3OVx1ZmY3YVx1ZmY3Ylx1ZmY3Y1x1ZmY3ZFx1ZmY3ZVx1ZmY3Zlx1ZmY4MFx1ZmY4MVx1ZmY4Mlx1ZmY4M1x1ZmY4NFx1ZmY4NVx1ZmY4Nlx1ZmY4N1x1ZmY4OFx1ZmY4OVx1ZmY4YVx1ZmY4Ylx1ZmY4Y1x1ZmY4ZFx1ZmY4ZVx1ZmY4Zlx1ZmY5MFx1ZmY5MVx1ZmY5Mlx1''@;'; put 'put ''ZmY5M1x1ZmY5NFx1ZmY5NVx1ZmY5Nlx1ZmY5N1x1ZmY5OFx1ZmY5OVx1ZmY5YVx1ZmY5Ylx1ZmY5Y1x1ZmY5ZFx1ZmY5ZVx1ZmY5Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzBdW3BdLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJihJW19bMF1bcF1dPTArcCxiWzArcF09X1swXVtwXSk7Zm9yKF9bMTI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDAwXHUzMDAxXHUzMDAyXHVmZjBjXHVmZjBlXHUzMGZiXHVmZjFhXHVmZjFiXHVmZjFmXHVmZjAxXHUz''@;'; put 'put ''MDliXHUzMDljXHhiNFx1ZmY0MFx4YThcdWZmM2VcdWZmZTNcdWZmM2ZcdTMwZmRcdTMwZmVcdTMwOWRcdTMwOWVcdTMwMDNcdTRlZGRcdTMwMDVcdTMwMDZcdTMwMDdcdTMwZmNcdTIwMTVcdTIwMTBcdWZmMGZcdWZmM2NcdWZmNWVcdTIyMjVcdWZmNWNcdTIwMjZcdTIwMjVcdTIwMThcdTIw''@;'; put 'put ''MTlcdTIwMWNcdTIwMWRcdWZmMDhcdWZmMDlcdTMwMTRcdTMwMTVcdWZmM2JcdWZmM2RcdWZmNWJcdWZmNWRcdTMwMDhcdTMwMDlcdTMwMGFcdTMwMGJcdTMwMGNcdTMwMGRcdTMwMGVcdTMwMGZcdTMwMTBcdTMwMTFcdWZmMGJcdWZmMGRceGIxXHhkN1x1ZmZmZFx4ZjdcdWZmMWRcdTIyNjBc''@;'; put 'put ''dWZmMWNcdWZmMWVcdTIyNjZcdTIyNjdcdTIyMWVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHVmZmU1XHVmZjA0XHVmZmUwXHVmZmUxXHVmZjA1XHVmZjAzXHVmZjA2XHVmZjBhXHVmZjIwXHhhN1x1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1''@;'; put 'put ''MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjViZFx1MjViY1x1MjAzYlx1MzAxMlx1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MzAxM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjIwOFx1MjIwYlx1MjI4''@;'; put 'put ''Nlx1MjI4N1x1MjI4Mlx1MjI4M1x1MjIyYVx1MjIyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjIyN1x1MjIyOFx1ZmZlMlx1MjFkMlx1MjFkNFx1MjIwMFx1MjIwM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjIyMFx1MjJhNVx1MjMxMlx1MjIwMlx1MjIwN1x1MjI2MVx1MjI1Mlx1MjI2YVx1MjI2Ylx1MjIxYVx1MjIzZFx1MjIxZFx1MjIzNVx1MjIyYlx1MjIyY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjEyYlx1MjAz''@;'; put 'put ''MFx1MjY2Zlx1MjY2ZFx1MjY2YVx1MjAyMFx1MjAyMVx4YjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1ZWZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMjldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEyOV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxMjldW3Bd''@;'; put 'put ''XT0zMzAyNCtwLGJbMzMwMjQrcF09X1sxMjldW3BdKTtmb3IoX1sxMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZm''@;'; put 'put ''MjdcdWZmMjhcdWZmMjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmNDFc''@;'; put 'put ''dWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZmNDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTMwNDFcdTMwNDJcdTMwNDNcdTMwNDRcdTMwNDVcdTMwNDZcdTMwNDdcdTMwNDhcdTMwNDlcdTMwNGFcdTMwNGJcdTMwNGNcdTMwNGRcdTMwNGVcdTMwNGZcdTMwNTBcdTMwNTFcdTMwNTJcdTMwNTNcdTMwNTRcdTMwNTVcdTMwNTZcdTMwNTdcdTMwNThcdTMwNTlcdTMwNWFc''@;'; put 'put ''dTMwNWJcdTMwNWNcdTMwNWRcdTMwNWVcdTMwNWZcdTMwNjBcdTMwNjFcdTMwNjJcdTMwNjNcdTMwNjRcdTMwNjVcdTMwNjZcdTMwNjdcdTMwNjhcdTMwNjlcdTMwNmFcdTMwNmJcdTMwNmNcdTMwNmRcdTMwNmVcdTMwNmZcdTMwNzBcdTMwNzFcdTMwNzJcdTMwNzNcdTMwNzRcdTMwNzVcdTMw''@;'; put 'put ''NzZcdTMwNzdcdTMwNzhcdTMwNzlcdTMwN2FcdTMwN2JcdTMwN2NcdTMwN2RcdTMwN2VcdTMwN2ZcdTMwODBcdTMwODFcdTMwODJcdTMwODNcdTMwODRcdTMwODVcdTMwODZcdTMwODdcdTMwODhcdTMwODlcdTMwOGFcdTMwOGJcdTMwOGNcdTMwOGRcdTMwOGVcdTMwOGZcdTMwOTBcdTMwOTFc''@;'; put 'put ''dTMwOTJcdTMwOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzMF1bcF0uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KElbX1sxMzBdW3BdXT0zMzI4MCtwLGJbMzMyODArcF09X1sxMzBdW3BdKTtmb3IoX1sxMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwYTFcdTMwYTJcdTMwYTNcdTMwYTRcdTMwYTVcdTMwYTZcdTMwYTdcdTMwYThcdTMwYTlc''@;'; put 'put ''dTMwYWFcdTMwYWJcdTMwYWNcdTMwYWRcdTMwYWVcdTMwYWZcdTMwYjBcdTMwYjFcdTMwYjJcdTMwYjNcdTMwYjRcdTMwYjVcdTMwYjZcdTMwYjdcdTMwYjhcdTMwYjlcdTMwYmFcdTMwYmJcdTMwYmNcdTMwYmRcdTMwYmVcdTMwYmZcdTMwYzBcdTMwYzFcdTMwYzJcdTMwYzNcdTMwYzRcdTMw''@;'; put 'put ''YzVcdTMwYzZcdTMwYzdcdTMwYzhcdTMwYzlcdTMwY2FcdTMwY2JcdTMwY2NcdTMwY2RcdTMwY2VcdTMwY2ZcdTMwZDBcdTMwZDFcdTMwZDJcdTMwZDNcdTMwZDRcdTMwZDVcdTMwZDZcdTMwZDdcdTMwZDhcdTMwZDlcdTMwZGFcdTMwZGJcdTMwZGNcdTMwZGRcdTMwZGVcdTMwZGZcdWZmZmRc''@;'; put 'put ''dTMwZTBcdTMwZTFcdTMwZTJcdTMwZTNcdTMwZTRcdTMwZTVcdTMwZTZcdTMwZTdcdTMwZThcdTMwZTlcdTMwZWFcdTMwZWJcdTMwZWNcdTMwZWRcdTMwZWVcdTMwZWZcdTMwZjBcdTMwZjFcdTMwZjJcdTMwZjNcdTMwZjRcdTMwZjVcdTMwZjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAz''@;'; put 'put ''YzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzMV1bcF0uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKElbX1sxMzFdW3BdXT0zMzUzNitwLGJbMzM1MzYrcF09X1sxMzFdW3BdKTtmb3IoX1sxMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MDFc''@;'; put 'put ''dTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0NTFcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2Nc''@;'; put 'put ''dTA0M2RcdWZmZmRcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MThcdTI1MTRcdTI1MWNcdTI1MmNcdTI1MjRcdTI1MzRcdTI1M2NcdTI1MDFcdTI1MDNcdTI1MGZcdTI1MTNcdTI1MWJcdTI1MTdcdTI1MjNcdTI1MzNcdTI1MmJcdTI1M2JcdTI1NGJc''@;'; put 'put ''dTI1MjBcdTI1MmZcdTI1MjhcdTI1MzdcdTI1M2ZcdTI1MWRcdTI1MzBcdTI1MjVcdTI1MzhcdTI1NDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzJdLmxlbmd0aDsrK3ApNjU1MzMhPT1f''@;'; put 'put ''WzEzMl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxMzJdW3BdXT0zMzc5MitwLGJbMzM3OTIrcF09X1sxMzJdW3BdKTtmb3IoX1sxMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI0NjBcdTI0NjFcdTI0NjJcdTI0NjNcdTI0NjRc''@;'; put 'put ''dTI0NjVcdTI0NjZcdTI0NjdcdTI0NjhcdTI0NjlcdTI0NmFcdTI0NmJcdTI0NmNcdTI0NmRcdTI0NmVcdTI0NmZcdTI0NzBcdTI0NzFcdTI0NzJcdTI0NzNcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdWZmZmRcdTMzNDlcdTMz''@;'; put 'put ''MTRcdTMzMjJcdTMzNGRcdTMzMThcdTMzMjdcdTMzMDNcdTMzMzZcdTMzNTFcdTMzNTdcdTMzMGRcdTMzMjZcdTMzMjNcdTMzMmJcdTMzNGFcdTMzM2JcdTMzOWNcdTMzOWRcdTMzOWVcdTMzOGVcdTMzOGZcdTMzYzRcdTMzYTFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTMzN2JcdWZmZmRcdTMwMWRcdTMwMWZcdTIxMTZcdTMzY2RcdTIxMjFcdTMyYTRcdTMyYTVcdTMyYTZcdTMyYTdcdTMyYThcdTMyMzFcdTMyMzJcdTMyMzlcdTMzN2VcdTMzN2RcdTMzN2NcdTIyNTJcdTIyNjFcdTIyMmJcdTIyMmVcdTIyMTFcdTIyMWFcdTIyYTVcdTIy''@;'; put 'put ''MjBcdTIyMWZcdTIyYmZcdTIyMzVcdTIyMjlcdTIyMmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzVdLmxlbmd0aDsr''@;'; put 'put ''K3ApNjU1MzMhPT1fWzEzNV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxMzVdW3BdXT0zNDU2MCtwLGJbMzQ1NjArcF09X1sxMzVdW3BdKTtmb3IoX1sxMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlOWNcdTU1MTZcdTVhMDNcdTk2M2ZcdTU0YzBcdTYxMWJcdTYzMjhcdTU5ZjZcdTkwMjJcdTg0NzVcdTgzMWNcdTdhNTBcdTYwYWFcdTYzZTFcdTZlMjVcdTY1ZWRcdTg0NjZcdTgyYTZc''@;'; put 'put ''dTliZjVcdTY4OTNcdTU3MjdcdTY1YTFcdTYyNzFcdTViOWJcdTU5ZDBcdTg2N2JcdTk4ZjRcdTdkNjJcdTdkYmVcdTliOGVcdTYyMTZcdTdjOWZcdTg4YjdcdTViODlcdTVlYjVcdTYzMDlcdTY2OTdcdTY4NDhcdTk1YzdcdTk3OGRcdTY3NGZcdTRlZTVcdTRmMGFcdTRmNGRcdTRmOWRcdTUw''@;'; put 'put ''NDlcdTU2ZjJcdTU5MzdcdTU5ZDRcdTVhMDFcdTVjMDlcdTYwZGZcdTYxMGZcdTYxNzBcdTY2MTNcdTY5MDVcdTcwYmFcdTc1NGZcdTc1NzBcdTc5ZmJcdTdkYWRcdTdkZWZcdTgwYzNcdTg0MGVcdTg4NjNcdThiMDJcdTkwNTVcdTkwN2FcdTUzM2JcdTRlOTVcdTRlYTVcdTU3ZGZcdTgwYjJc''@;'; put 'put ''dTkwYzFcdTc4ZWZcdTRlMDBcdTU4ZjFcdTZlYTJcdTkwMzhcdTdhMzJcdTgzMjhcdTgyOGJcdTljMmZcdTUxNDFcdTUzNzBcdTU0YmRcdTU0ZTFcdTU2ZTBcdTU5ZmJcdTVmMTVcdTk4ZjJcdTZkZWJcdTgwZTRcdTg1MmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sx''@;'; put 'put ''MzZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzNl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxMzZdW3BdXT0zNDgxNitwLGJbMzQ4MTYrcF09X1sxMzZdW3BdKTtmb3IoX1sxMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2NjJc''@;'; put 'put ''dTk2NzBcdTk2YTBcdTk3ZmJcdTU0MGJcdTUzZjNcdTViODdcdTcwY2ZcdTdmYmRcdThmYzJcdTk2ZThcdTUzNmZcdTlkNWNcdTdhYmFcdTRlMTFcdTc4OTNcdTgxZmNcdTZlMjZcdTU2MThcdTU1MDRcdTZiMWRcdTg1MWFcdTljM2JcdTU5ZTVcdTUzYTlcdTZkNjZcdTc0ZGNcdTk1OGZcdTU2''@;'; put 'put ''NDJcdTRlOTFcdTkwNGJcdTk2ZjJcdTgzNGZcdTk5MGNcdTUzZTFcdTU1YjZcdTViMzBcdTVmNzFcdTY2MjBcdTY2ZjNcdTY4MDRcdTZjMzhcdTZjZjNcdTZkMjlcdTc0NWJcdTc2YzhcdTdhNGVcdTk4MzRcdTgyZjFcdTg4NWJcdThhNjBcdTkyZWRcdTZkYjJcdTc1YWJcdTc2Y2FcdTk5YzVc''@;'; put 'put ''dTYwYTZcdThiMDFcdThkOGFcdTk1YjJcdTY5OGVcdTUzYWRcdTUxODZcdWZmZmRcdTU3MTJcdTU4MzBcdTU5NDRcdTViYjRcdTVlZjZcdTYwMjhcdTYzYTlcdTYzZjRcdTZjYmZcdTZmMTRcdTcwOGVcdTcxMTRcdTcxNTlcdTcxZDVcdTczM2ZcdTdlMDFcdTgyNzZcdTgyZDFcdTg1OTdcdTkw''@;'; put 'put ''NjBcdTkyNWJcdTlkMWJcdTU4NjlcdTY1YmNcdTZjNWFcdTc1MjVcdTUxZjlcdTU5MmVcdTU5NjVcdTVmODBcdTVmZGNcdTYyYmNcdTY1ZmFcdTZhMmFcdTZiMjdcdTZiYjRcdTczOGJcdTdmYzFcdTg5NTZcdTlkMmNcdTlkMGVcdTllYzRcdTVjYTFcdTZjOTZcdTgzN2JcdTUxMDRcdTVjNGJc''@;'; put 'put ''dTYxYjZcdTgxYzZcdTY4NzZcdTcyNjFcdTRlNTlcdTRmZmFcdTUzNzhcdTYwNjlcdTZlMjlcdTdhNGZcdTk3ZjNcdTRlMGJcdTUzMTZcdTRlZWVcdTRmNTVcdTRmM2RcdTRmYTFcdTRmNzNcdTUyYTBcdTUzZWZcdTU2MDlcdTU5MGZcdTVhYzFcdTViYjZcdTViZTFcdTc5ZDFcdTY2ODdcdTY3''@;'; put 'put ''OWNcdTY3YjZcdTZiNGNcdTZjYjNcdTcwNmJcdTczYzJcdTc5OGRcdTc5YmVcdTdhM2NcdTdiODdcdTgyYjFcdTgyZGJcdTgzMDRcdTgzNzdcdTgzZWZcdTgzZDNcdTg3NjZcdThhYjJcdTU2MjlcdThjYThcdThmZTZcdTkwNGVcdTk3MWVcdTg2OGFcdTRmYzRcdTVjZThcdTYyMTFcdTcyNTlc''@;'; put 'put ''dTc1M2JcdTgxZTVcdTgyYmRcdTg2ZmVcdThjYzBcdTk2YzVcdTk5MTNcdTk5ZDVcdTRlY2JcdTRmMWFcdTg5ZTNcdTU2ZGVcdTU4NGFcdTU4Y2FcdTVlZmJcdTVmZWJcdTYwMmFcdTYwOTRcdTYwNjJcdTYxZDBcdTYyMTJcdTYyZDBcdTY1MzlcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxwPTA7cCE9X1sxMzddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzN11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxMzddW3BdXT0zNTA3MitwLGJbMzUwNzIrcF09X1sxMzddW3BdKTtmb3IoX1sxMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTliNDFcdTY2NjZcdTY4YjBcdTZkNzdcdTcwNzBcdTc1NGNcdTc2ODZcdTdkNzVcdTgyYTVcdTg3ZjlcdTk1OGJcdTk2OGVcdThjOWRcdTUxZjFcdTUyYmVcdTU5MTZcdTU0YjNcdTViYjNcdTVkMTZcdTYxNjhcdTY5ODJcdTZkYWZcdTc4OGRcdTg0Y2JcdTg4NTdcdThhNzJcdTkz''@;'; put 'put ''YTdcdTlhYjhcdTZkNmNcdTk5YThcdTg2ZDlcdTU3YTNcdTY3ZmZcdTg2Y2VcdTkyMGVcdTUyODNcdTU2ODdcdTU0MDRcdTVlZDNcdTYyZTFcdTY0YjlcdTY4M2NcdTY4MzhcdTZiYmJcdTczNzJcdTc4YmFcdTdhNmJcdTg5OWFcdTg5ZDJcdThkNmJcdThmMDNcdTkwZWRcdTk1YTNcdTk2OTRc''@;'; put 'put ''dTk3NjlcdTViNjZcdTVjYjNcdTY5N2RcdTk4NGRcdTk4NGVcdTYzOWJcdTdiMjBcdTZhMmJcdWZmZmRcdTZhN2ZcdTY4YjZcdTljMGRcdTZmNWZcdTUyNzJcdTU1OWRcdTYwNzBcdTYyZWNcdTZkM2JcdTZlMDdcdTZlZDFcdTg0NWJcdTg5MTBcdThmNDRcdTRlMTRcdTljMzlcdTUzZjZcdTY5''@;'; put 'put ''MWJcdTZhM2FcdTk3ODRcdTY4MmFcdTUxNWNcdTdhYzNcdTg0YjJcdTkxZGNcdTkzOGNcdTU2NWJcdTlkMjhcdTY4MjJcdTgzMDVcdTg0MzFcdTdjYTVcdTUyMDhcdTgyYzVcdTc0ZTZcdTRlN2VcdTRmODNcdTUxYTBcdTViZDJcdTUyMGFcdTUyZDhcdTUyZTdcdTVkZmJcdTU1OWFcdTU4MmFc''@;'; put 'put ''dTU5ZTZcdTViOGNcdTViOThcdTViZGJcdTVlNzJcdTVlNzlcdTYwYTNcdTYxMWZcdTYxNjNcdTYxYmVcdTYzZGJcdTY1NjJcdTY3ZDFcdTY4NTNcdTY4ZmFcdTZiM2VcdTZiNTNcdTZjNTdcdTZmMjJcdTZmOTdcdTZmNDVcdTc0YjBcdTc1MThcdTc2ZTNcdTc3MGJcdTdhZmZcdTdiYTFcdTdj''@;'; put 'put ''MjFcdTdkZTlcdTdmMzZcdTdmZjBcdTgwOWRcdTgyNjZcdTgzOWVcdTg5YjNcdThhY2NcdThjYWJcdTkwODRcdTk0NTFcdTk1OTNcdTk1OTFcdTk1YTJcdTk2NjVcdTk3ZDNcdTk5MjhcdTgyMThcdTRlMzhcdTU0MmJcdTVjYjhcdTVkY2NcdTczYTlcdTc2NGNcdTc3M2NcdTVjYTlcdTdmZWJc''@;'; put 'put ''dThkMGJcdTk2YzFcdTk4MTFcdTk4NTRcdTk4NThcdTRmMDFcdTRmMGVcdTUzNzFcdTU1OWNcdTU2NjhcdTU3ZmFcdTU5NDdcdTViMDlcdTViYzRcdTVjOTBcdTVlMGNcdTVlN2VcdTVmY2NcdTYzZWVcdTY3M2FcdTY1ZDdcdTY1ZTJcdTY3MWZcdTY4Y2JcdTY4YzRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzOF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxMzhdW3BdXT0zNTMyOCtwLGJbMzUzMjgrcF09X1sxMzhdW3BdKTtmb3IoX1sxMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTZhNWZcdTVlMzBcdTZiYzVcdTZjMTdcdTZjN2RcdTc1N2ZcdTc5NDhcdTViNjNcdTdhMDBcdTdkMDBcdTVmYmRcdTg5OGZcdThhMThcdThjYjRcdThkNzdcdThlY2NcdThmMWRcdTk4ZTJcdTlhMGVcdTliM2NcdTRlODBcdTUwN2RcdTUxMDBcdTU5OTNcdTVi''@;'; put 'put ''OWNcdTYyMmZcdTYyODBcdTY0ZWNcdTZiM2FcdTcyYTBcdTc1OTFcdTc5NDdcdTdmYTlcdTg3ZmJcdThhYmNcdThiNzBcdTYzYWNcdTgzY2FcdTk3YTBcdTU0MDlcdTU0MDNcdTU1YWJcdTY4NTRcdTZhNThcdThhNzBcdTc4MjdcdTY3NzVcdTllY2RcdTUzNzRcdTViYTJcdTgxMWFcdTg2NTBc''@;'; put 'put ''dTkwMDZcdTRlMThcdTRlNDVcdTRlYzdcdTRmMTFcdTUzY2FcdTU0MzhcdTViYWVcdTVmMTNcdTYwMjVcdTY1NTFcdWZmZmRcdTY3M2RcdTZjNDJcdTZjNzJcdTZjZTNcdTcwNzhcdTc0MDNcdTdhNzZcdTdhYWVcdTdiMDhcdTdkMWFcdTdjZmVcdTdkNjZcdTY1ZTdcdTcyNWJcdTUzYmJcdTVj''@;'; put 'put ''NDVcdTVkZThcdTYyZDJcdTYyZTBcdTYzMTlcdTZlMjBcdTg2NWFcdThhMzFcdThkZGRcdTkyZjhcdTZmMDFcdTc5YTZcdTliNWFcdTRlYThcdTRlYWJcdTRlYWNcdTRmOWJcdTRmYTBcdTUwZDFcdTUxNDdcdTdhZjZcdTUxNzFcdTUxZjZcdTUzNTRcdTUzMjFcdTUzN2ZcdTUzZWJcdTU1YWNc''@;'; put 'put ''dTU4ODNcdTVjZTFcdTVmMzdcdTVmNGFcdTYwMmZcdTYwNTBcdTYwNmRcdTYzMWZcdTY1NTlcdTZhNGJcdTZjYzFcdTcyYzJcdTcyZWRcdTc3ZWZcdTgwZjhcdTgxMDVcdTgyMDhcdTg1NGVcdTkwZjdcdTkzZTFcdTk3ZmZcdTk5NTdcdTlhNWFcdTRlZjBcdTUxZGRcdTVjMmRcdTY2ODFcdTY5''@;'; put 'put ''NmRcdTVjNDBcdTY2ZjJcdTY5NzVcdTczODlcdTY4NTBcdTdjODFcdTUwYzVcdTUyZTRcdTU3NDdcdTVkZmVcdTkzMjZcdTY1YTRcdTZiMjNcdTZiM2RcdTc0MzRcdTc5ODFcdTc5YmRcdTdiNGJcdTdkY2FcdTgyYjlcdTgzY2NcdTg4N2ZcdTg5NWZcdThiMzlcdThmZDFcdTkxZDFcdTU0MWZc''@;'; put 'put ''dTkyODBcdTRlNWRcdTUwMzZcdTUzZTVcdTUzM2FcdTcyZDdcdTczOTZcdTc3ZTlcdTgyZTZcdThlYWZcdTk5YzZcdTk5YzhcdTk5ZDJcdTUxNzdcdTYxMWFcdTg2NWVcdTU1YjBcdTdhN2FcdTUwNzZcdTViZDNcdTkwNDdcdTk2ODVcdTRlMzJcdTZhZGJcdTkxZTdcdTVjNTFcdTVjNDhcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzOV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxMzldW3BdXT0zNTU4NCtwLGJbMzU1ODQrcF09X1sxMzldW3BdKTtmb3IoX1sxNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYzOThcdTdhOWZcdTZjOTNcdTk3NzRcdThmNjFcdTdhYWFcdTcxOGFcdTk2ODhcdTdjODJcdTY4MTdcdTdlNzBcdTY4NTFcdTkzNmNcdTUyZjJcdTU0MWJcdTg1YWJcdThhMTNcdTdmYTRcdThlY2RcdTkwZTFcdTUzNjZcdTg4ODhcdTc5''@;'; put 'put ''NDFcdTRmYzJcdTUwYmVcdTUyMTFcdTUxNDRcdTU1NTNcdTU3MmRcdTczZWFcdTU3OGJcdTU5NTFcdTVmNjJcdTVmODRcdTYwNzVcdTYxNzZcdTYxNjdcdTYxYTlcdTYzYjJcdTY0M2FcdTY1NmNcdTY2NmZcdTY4NDJcdTZlMTNcdTc1NjZcdTdhM2RcdTdjZmJcdTdkNGNcdTdkOTlcdTdlNGJc''@;'; put 'put ''dTdmNmJcdTgzMGVcdTgzNGFcdTg2Y2RcdThhMDhcdThhNjNcdThiNjZcdThlZmRcdTk4MWFcdTlkOGZcdTgyYjhcdThmY2VcdTliZThcdWZmZmRcdTUyODdcdTYyMWZcdTY0ODNcdTZmYzBcdTk2OTlcdTY4NDFcdTUwOTFcdTZiMjBcdTZjN2FcdTZmNTRcdTdhNzRcdTdkNTBcdTg4NDBcdThh''@;'; put 'put ''MjNcdTY3MDhcdTRlZjZcdTUwMzlcdTUwMjZcdTUwNjVcdTUxN2NcdTUyMzhcdTUyNjNcdTU1YTdcdTU3MGZcdTU4MDVcdTVhY2NcdTVlZmFcdTYxYjJcdTYxZjhcdTYyZjNcdTYzNzJcdTY5MWNcdTZhMjlcdTcyN2RcdTcyYWNcdTczMmVcdTc4MTRcdTc4NmZcdTdkNzlcdTc3MGNcdTgwYTlc''@;'; put 'put ''dTg5OGJcdThiMTlcdThjZTJcdThlZDJcdTkwNjNcdTkzNzVcdTk2N2FcdTk4NTVcdTlhMTNcdTllNzhcdTUxNDNcdTUzOWZcdTUzYjNcdTVlN2JcdTVmMjZcdTZlMWJcdTZlOTBcdTczODRcdTczZmVcdTdkNDNcdTgyMzdcdThhMDBcdThhZmFcdTk2NTBcdTRlNGVcdTUwMGJcdTUzZTRcdTU0''@;'; put 'put ''N2NcdTU2ZmFcdTU5ZDFcdTViNjRcdTVkZjFcdTVlYWJcdTVmMjdcdTYyMzhcdTY1NDVcdTY3YWZcdTZlNTZcdTcyZDBcdTdjY2FcdTg4YjRcdTgwYTFcdTgwZTFcdTgzZjBcdTg2NGVcdThhODdcdThkZThcdTkyMzdcdTk2YzdcdTk4NjdcdTlmMTNcdTRlOTRcdTRlOTJcdTRmMGRcdTUzNDhc''@;'; put 'put ''dTU0NDlcdTU0M2VcdTVhMmZcdTVmOGNcdTVmYTFcdTYwOWZcdTY4YTdcdTZhOGVcdTc0NWFcdTc4ODFcdThhOWVcdThhYTRcdThiNzdcdTkxOTBcdTRlNWVcdTliYzlcdTRlYTRcdTRmN2NcdTRmYWZcdTUwMTlcdTUwMTZcdTUxNDlcdTUxNmNcdTUyOWZcdTUyYjlcdTUyZmVcdTUzOWFcdTUz''@;'; put 'put ''ZTNcdTU0MTFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0MF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNDBdW3BdXT0zNTg0MCtwLGJbMzU4NDArcF09X1sxNDBdW3BdKTtmb3IoX1sxNDFdPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0MGVcdTU1ODlcdTU3NTFcdTU3YTJcdTU5N2RcdTViNTRcdTViNWRcdTViOGZcdTVkZTVcdTVkZTdcdTVkZjdcdTVlNzhcdTVlODNcdTVlOWFcdTVlYjdcdTVmMThcdTYwNTJcdTYxNGNcdTYyOTdcdTYyZDhcdTYz''@;'; put 'put ''YTdcdTY1M2JcdTY2MDJcdTY2NDNcdTY2ZjRcdTY3NmRcdTY4MjFcdTY4OTdcdTY5Y2JcdTZjNWZcdTZkMmFcdTZkNjlcdTZlMmZcdTZlOWRcdTc1MzJcdTc2ODdcdTc4NmNcdTdhM2ZcdTdjZTBcdTdkMDVcdTdkMThcdTdkNWVcdTdkYjFcdTgwMTVcdTgwMDNcdTgwYWZcdTgwYjFcdTgxNTRc''@;'; put 'put ''dTgxOGZcdTgyMmFcdTgzNTJcdTg4NGNcdTg4NjFcdThiMWJcdThjYTJcdThjZmNcdTkwY2FcdTkxNzVcdTkyNzFcdTc4M2ZcdTkyZmNcdTk1YTRcdTk2NGRcdWZmZmRcdTk4MDVcdTk5OTlcdTlhZDhcdTlkM2JcdTUyNWJcdTUyYWJcdTUzZjdcdTU0MDhcdTU4ZDVcdTYyZjdcdTZmZTBcdThj''@;'; put 'put ''NmFcdThmNWZcdTllYjlcdTUxNGJcdTUyM2JcdTU0NGFcdTU2ZmRcdTdhNDBcdTkxNzdcdTlkNjBcdTllZDJcdTczNDRcdTZmMDlcdTgxNzBcdTc1MTFcdTVmZmRcdTYwZGFcdTlhYThcdTcyZGJcdThmYmNcdTZiNjRcdTk4MDNcdTRlY2FcdTU2ZjBcdTU3NjRcdTU4YmVcdTVhNWFcdTYwNjhc''@;'; put 'put ''dTYxYzdcdTY2MGZcdTY2MDZcdTY4MzlcdTY4YjFcdTZkZjdcdTc1ZDVcdTdkM2FcdTgyNmVcdTliNDJcdTRlOWJcdTRmNTBcdTUzYzlcdTU1MDZcdTVkNmZcdTVkZTZcdTVkZWVcdTY3ZmJcdTZjOTlcdTc0NzNcdTc4MDJcdThhNTBcdTkzOTZcdTg4ZGZcdTU3NTBcdTVlYTdcdTYzMmJcdTUw''@;'; put 'put ''YjVcdTUwYWNcdTUxOGRcdTY3MDBcdTU0YzlcdTU4NWVcdTU5YmJcdTViYjBcdTVmNjlcdTYyNGRcdTYzYTFcdTY4M2RcdTZiNzNcdTZlMDhcdTcwN2RcdTkxYzdcdTcyODBcdTc4MTVcdTc4MjZcdTc5NmRcdTY1OGVcdTdkMzBcdTgzZGNcdTg4YzFcdThmMDlcdTk2OWJcdTUyNjRcdTU3Mjhc''@;'; put 'put ''dTY3NTBcdTdmNmFcdThjYTFcdTUxYjRcdTU3NDJcdTk2MmFcdTU4M2FcdTY5OGFcdTgwYjRcdTU0YjJcdTVkMGVcdTU3ZmNcdTc4OTVcdTlkZmFcdTRmNWNcdTUyNGFcdTU0OGJcdTY0M2VcdTY2MjhcdTY3MTRcdTY3ZjVcdTdhODRcdTdiNTZcdTdkMjJcdTkzMmZcdTY4NWNcdTliYWRcdTdi''@;'; put 'put ''MzlcdTUzMTlcdTUxOGFcdTUyMzdcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0MV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNDFdW3BdXT0zNjA5NitwLGJbMzYwOTYrcF09X1sxNDFdW3BdKTtmb3IoX1sxNDJdPSJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTViZGZcdTYyZjZcdTY0YWVcdTY0ZTZcdTY3MmRcdTZiYmFcdTg1YTlcdTk2ZDFcdTc2OTBcdTliZDZcdTYzNGNcdTkzMDZcdTliYWJcdTc2YmZcdTY2NTJcdTRlMDlcdTUwOThcdTUzYzJcdTVj''@;'; put 'put ''NzFcdTYwZThcdTY0OTJcdTY1NjNcdTY4NWZcdTcxZTZcdTczY2FcdTc1MjNcdTdiOTdcdTdlODJcdTg2OTVcdThiODNcdThjZGJcdTkxNzhcdTk5MTBcdTY1YWNcdTY2YWJcdTZiOGJcdTRlZDVcdTRlZDRcdTRmM2FcdTRmN2ZcdTUyM2FcdTUzZjhcdTUzZjJcdTU1ZTNcdTU2ZGJcdTU4ZWJc''@;'; put 'put ''dTU5Y2JcdTU5YzlcdTU5ZmZcdTViNTBcdTVjNGRcdTVlMDJcdTVlMmJcdTVmZDdcdTYwMWRcdTYzMDdcdTY1MmZcdTViNWNcdTY1YWZcdTY1YmRcdTY1ZThcdTY3OWRcdTZiNjJcdWZmZmRcdTZiN2JcdTZjMGZcdTczNDVcdTc5NDlcdTc5YzFcdTdjZjhcdTdkMTlcdTdkMmJcdTgwYTJcdTgx''@;'; put 'put ''MDJcdTgxZjNcdTg5OTZcdThhNWVcdThhNjlcdThhNjZcdThhOGNcdThhZWVcdThjYzdcdThjZGNcdTk2Y2NcdTk4ZmNcdTZiNmZcdTRlOGJcdTRmM2NcdTRmOGRcdTUxNTBcdTViNTdcdTViZmFcdTYxNDhcdTYzMDFcdTY2NDJcdTZiMjFcdTZlY2JcdTZjYmJcdTcyM2VcdTc0YmRcdTc1ZDRc''@;'; put 'put ''dTc4YzFcdTc5M2FcdTgwMGNcdTgwMzNcdTgxZWFcdTg0OTRcdThmOWVcdTZjNTBcdTllN2ZcdTVmMGZcdThiNThcdTlkMmJcdTdhZmFcdThlZjhcdTViOGRcdTk2ZWJcdTRlMDNcdTUzZjFcdTU3ZjdcdTU5MzFcdTVhYzlcdTViYTRcdTYwODlcdTZlN2ZcdTZmMDZcdTc1YmVcdThjZWFcdTVi''@;'; put 'put ''OWZcdTg1MDBcdTdiZTBcdTUwNzJcdTY3ZjRcdTgyOWRcdTVjNjFcdTg1NGFcdTdlMWVcdTgyMGVcdTUxOTlcdTVjMDRcdTYzNjhcdThkNjZcdTY1OWNcdTcxNmVcdTc5M2VcdTdkMTdcdTgwMDVcdThiMWRcdThlY2FcdTkwNmVcdTg2YzdcdTkwYWFcdTUwMWZcdTUyZmFcdTVjM2FcdTY3NTNc''@;'; put 'put ''dTcwN2NcdTcyMzVcdTkxNGNcdTkxYzhcdTkzMmJcdTgyZTVcdTViYzJcdTVmMzFcdTYwZjlcdTRlM2JcdTUzZDZcdTViODhcdTYyNGJcdTY3MzFcdTZiOGFcdTcyZTlcdTczZTBcdTdhMmVcdTgxNmJcdThkYTNcdTkxNTJcdTk5OTZcdTUxMTJcdTUzZDdcdTU0NmFcdTViZmZcdTYzODhcdTZh''@;'; put 'put ''MzlcdTdkYWNcdTk3MDBcdTU2ZGFcdTUzY2VcdTU0NjhcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0Ml1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNDJdW3BdXT0zNjM1MitwLGJbMzYzNTIrcF09X1sxNDJdW3BdKTtm''@;'; put 'put ''b3IoX1sxNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTViOTdcdTVjMzFcdTVkZGVcdTRmZWVcdTYxMDFcdTYyZmVcdTZkMzJcdTc5YzBcdTc5Y2JcdTdkNDJcdTdlNGRcdTdmZDJcdTgxZWRcdTgyMWZcdTg0OTBcdTg4NDZcdTg5''@;'; put 'put ''NzJcdThiOTBcdThlNzRcdThmMmZcdTkwMzFcdTkxNGJcdTkxNmNcdTk2YzZcdTkxOWNcdTRlYzBcdTRmNGZcdTUxNDVcdTUzNDFcdTVmOTNcdTYyMGVcdTY3ZDRcdTZjNDFcdTZlMGJcdTczNjNcdTdlMjZcdTkxY2RcdTkyODNcdTUzZDRcdTU5MTlcdTViYmZcdTZkZDFcdTc5NWRcdTdlMmVc''@;'; put 'put ''dTdjOWJcdTU4N2VcdTcxOWZcdTUxZmFcdTg4NTNcdThmZjBcdTRmY2FcdTVjZmJcdTY2MjVcdTc3YWNcdTdhZTNcdTgyMWNcdTk5ZmZcdTUxYzZcdTVmYWFcdTY1ZWNcdTY5NmZcdTZiODlcdTZkZjNcdWZmZmRcdTZlOTZcdTZmNjRcdTc2ZmVcdTdkMTRcdTVkZTFcdTkwNzVcdTkxODdcdTk4''@;'; put 'put ''MDZcdTUxZTZcdTUyMWRcdTYyNDBcdTY2OTFcdTY2ZDlcdTZlMWFcdTVlYjZcdTdkZDJcdTdmNzJcdTY2ZjhcdTg1YWZcdTg1ZjdcdThhZjhcdTUyYTlcdTUzZDlcdTU5NzNcdTVlOGZcdTVmOTBcdTYwNTVcdTkyZTRcdTk2NjRcdTUwYjdcdTUxMWZcdTUyZGRcdTUzMjBcdTUzNDdcdTUzZWNc''@;'; put 'put ''dTU0ZThcdTU1NDZcdTU1MzFcdTU2MTdcdTU5NjhcdTU5YmVcdTVhM2NcdTViYjVcdTVjMDZcdTVjMGZcdTVjMTFcdTVjMWFcdTVlODRcdTVlOGFcdTVlZTBcdTVmNzBcdTYyN2ZcdTYyODRcdTYyZGJcdTYzOGNcdTYzNzdcdTY2MDdcdTY2MGNcdTY2MmRcdTY2NzZcdTY3N2VcdTY4YTJcdTZh''@;'; put 'put ''MWZcdTZhMzVcdTZjYmNcdTZkODhcdTZlMDlcdTZlNThcdTcxM2NcdTcxMjZcdTcxNjdcdTc1YzdcdTc3MDFcdTc4NWRcdTc5MDFcdTc5NjVcdTc5ZjBcdTdhZTBcdTdiMTFcdTdjYTdcdTdkMzlcdTgwOTZcdTgzZDZcdTg0OGJcdTg1NDlcdTg4NWRcdTg4ZjNcdThhMWZcdThhM2NcdThhNTRc''@;'; put 'put ''dThhNzNcdThjNjFcdThjZGVcdTkxYTRcdTkyNjZcdTkzN2VcdTk0MThcdTk2OWNcdTk3OThcdTRlMGFcdTRlMDhcdTRlMWVcdTRlNTdcdTUxOTdcdTUyNzBcdTU3Y2VcdTU4MzRcdTU4Y2NcdTViMjJcdTVlMzhcdTYwYzVcdTY0ZmVcdTY3NjFcdTY3NTZcdTZkNDRcdTcyYjZcdTc1NzNcdTdh''@;'; put 'put ''NjNcdTg0YjhcdThiNzJcdTkxYjhcdTkzMjBcdTU2MzFcdTU3ZjRcdTk4ZmVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0M11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNDNdW3BdXT0zNjYwOCtwLGJbMzY2MDgrcF09''@;'; put 'put ''X1sxNDNdW3BdKTtmb3IoX1sxNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyZWRcdTY5MGRcdTZiOTZcdTcxZWRcdTdlNTRcdTgwNzdcdTgyNzJcdTg5ZTZcdTk4ZGZcdTg3NTVcdThmYjFcdTVjM2JcdTRmMzhcdTRmZTFcdTRm''@;'; put 'put ''YjVcdTU1MDdcdTVhMjBcdTViZGRcdTViZTlcdTVmYzNcdTYxNGVcdTYzMmZcdTY1YjBcdTY2NGJcdTY4ZWVcdTY5OWJcdTZkNzhcdTZkZjFcdTc1MzNcdTc1YjlcdTc3MWZcdTc5NWVcdTc5ZTZcdTdkMzNcdTgxZTNcdTgyYWZcdTg1YWFcdTg5YWFcdThhM2FcdThlYWJcdThmOWJcdTkwMzJc''@;'; put 'put ''dTkxZGRcdTk3MDdcdTRlYmFcdTRlYzFcdTUyMDNcdTU4NzVcdTU4ZWNcdTVjMGJcdTc1MWFcdTVjM2RcdTgxNGVcdThhMGFcdThmYzVcdTk2NjNcdTk3NmRcdTdiMjVcdThhY2ZcdTk4MDhcdTkxNjJcdTU2ZjNcdTUzYThcdWZmZmRcdTkwMTdcdTU0MzlcdTU3ODJcdTVlMjVcdTYzYThcdTZj''@;'; put 'put ''MzRcdTcwOGFcdTc3NjFcdTdjOGJcdTdmZTBcdTg4NzBcdTkwNDJcdTkxNTRcdTkzMTBcdTkzMThcdTk2OGZcdTc0NWVcdTlhYzRcdTVkMDdcdTVkNjlcdTY1NzBcdTY3YTJcdThkYThcdTk2ZGJcdTYzNmVcdTY3NDlcdTY5MTlcdTgzYzVcdTk4MTdcdTk2YzBcdTg4ZmVcdTZmODRcdTY0N2Fc''@;'; put 'put ''dTViZjhcdTRlMTZcdTcwMmNcdTc1NWRcdTY2MmZcdTUxYzRcdTUyMzZcdTUyZTJcdTU5ZDNcdTVmODFcdTYwMjdcdTYyMTBcdTY1M2ZcdTY1NzRcdTY2MWZcdTY2NzRcdTY4ZjJcdTY4MTZcdTZiNjNcdTZlMDVcdTcyNzJcdTc1MWZcdTc2ZGJcdTdjYmVcdTgwNTZcdTU4ZjBcdTg4ZmRcdTg5''@;'; put 'put ''N2ZcdThhYTBcdThhOTNcdThhY2JcdTkwMWRcdTkxOTJcdTk3NTJcdTk3NTlcdTY1ODlcdTdhMGVcdTgxMDZcdTk2YmJcdTVlMmRcdTYwZGNcdTYyMWFcdTY1YTVcdTY2MTRcdTY3OTBcdTc3ZjNcdTdhNGRcdTdjNGRcdTdlM2VcdTgxMGFcdThjYWNcdThkNjRcdThkZTFcdThlNWZcdTc4YTlc''@;'; put 'put ''dTUyMDdcdTYyZDlcdTYzYTVcdTY0NDJcdTYyOThcdThhMmRcdTdhODNcdTdiYzBcdThhYWNcdTk2ZWFcdTdkNzZcdTgyMGNcdTg3NDlcdTRlZDlcdTUxNDhcdTUzNDNcdTUzNjBcdTViYTNcdTVjMDJcdTVjMTZcdTVkZGRcdTYyMjZcdTYyNDdcdTY0YjBcdTY4MTNcdTY4MzRcdTZjYzlcdTZk''@;'; put 'put ''NDVcdTZkMTdcdTY3ZDNcdTZmNWNcdTcxNGVcdTcxN2RcdTY1Y2JcdTdhN2ZcdTdiYWRcdTdkZGFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0NF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNDRdW3BdXT0zNjg2NCtw''@;'; put 'put ''LGJbMzY4NjQrcF09X1sxNDRdW3BdKTtmb3IoX1sxNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlNGFcdTdmYThcdTgxN2FcdTgyMWJcdTgyMzlcdTg1YTZcdThhNmVcdThjY2VcdThkZjVcdTkwNzhcdTkwNzdcdTkyYWRcdTky''@;'; put 'put ''OTFcdTk1ODNcdTliYWVcdTUyNGRcdTU1ODRcdTZmMzhcdTcxMzZcdTUxNjhcdTc5ODVcdTdlNTVcdTgxYjNcdTdjY2VcdTU2NGNcdTU4NTFcdTVjYThcdTYzYWFcdTY2ZmVcdTY2ZmRcdTY5NWFcdTcyZDlcdTc1OGZcdTc1OGVcdTc5MGVcdTc5NTZcdTc5ZGZcdTdjOTdcdTdkMjBcdTdkNDRc''@;'; put 'put ''dTg2MDdcdThhMzRcdTk2M2JcdTkwNjFcdTlmMjBcdTUwZTdcdTUyNzVcdTUzY2NcdTUzZTJcdTUwMDlcdTU1YWFcdTU4ZWVcdTU5NGZcdTcyM2RcdTViOGJcdTVjNjRcdTUzMWRcdTYwZTNcdTYwZjNcdTYzNWNcdTYzODNcdTYzM2ZcdTYzYmJcdWZmZmRcdTY0Y2RcdTY1ZTlcdTY2ZjlcdTVk''@;'; put 'put ''ZTNcdTY5Y2RcdTY5ZmRcdTZmMTVcdTcxZTVcdTRlODlcdTc1ZTlcdTc2ZjhcdTdhOTNcdTdjZGZcdTdkY2ZcdTdkOWNcdTgwNjFcdTgzNDlcdTgzNThcdTg0NmNcdTg0YmNcdTg1ZmJcdTg4YzVcdThkNzBcdTkwMDFcdTkwNmRcdTkzOTdcdTk3MWNcdTlhMTJcdTUwY2ZcdTU4OTdcdTYxOGVc''@;'; put 'put ''dTgxZDNcdTg1MzVcdThkMDhcdTkwMjBcdTRmYzNcdTUwNzRcdTUyNDdcdTUzNzNcdTYwNmZcdTYzNDlcdTY3NWZcdTZlMmNcdThkYjNcdTkwMWZcdTRmZDdcdTVjNWVcdThjY2FcdTY1Y2ZcdTdkOWFcdTUzNTJcdTg4OTZcdTUxNzZcdTYzYzNcdTViNThcdTViNmJcdTVjMGFcdTY0MGRcdTY3''@;'; put 'put ''NTFcdTkwNWNcdTRlZDZcdTU5MWFcdTU5MmFcdTZjNzBcdThhNTFcdTU1M2VcdTU4MTVcdTU5YTVcdTYwZjBcdTYyNTNcdTY3YzFcdTgyMzVcdTY5NTVcdTk2NDBcdTk5YzRcdTlhMjhcdTRmNTNcdTU4MDZcdTViZmVcdTgwMTBcdTVjYjFcdTVlMmZcdTVmODVcdTYwMjBcdTYxNGJcdTYyMzRc''@;'; put 'put ''dTY2ZmZcdTZjZjBcdTZlZGVcdTgwY2VcdTgxN2ZcdTgyZDRcdTg4OGJcdThjYjhcdTkwMDBcdTkwMmVcdTk2OGFcdTllZGJcdTliZGJcdTRlZTNcdTUzZjBcdTU5MjdcdTdiMmNcdTkxOGRcdTk4NGNcdTlkZjlcdTZlZGRcdTcwMjdcdTUzNTNcdTU1NDRcdTViODVcdTYyNThcdTYyOWVcdTYy''@;'; put 'put ''ZDNcdTZjYTJcdTZmZWZcdTc0MjJcdThhMTdcdTk0MzhcdTZmYzFcdThhZmVcdTgzMzhcdTUxZTdcdTg2ZjhcdTUzZWFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0NV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNDVd''@;'; put 'put ''W3BdXT0zNzEyMCtwLGJbMzcxMjArcF09X1sxNDVdW3BdKTtmb3IoX1sxNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzZTlcdTRmNDZcdTkwNTRcdThmYjBcdTU5NmFcdTgxMzFcdTVkZmRcdTdhZWFcdThmYmZcdTY4ZGFcdThj''@;'; put 'put ''MzdcdTcyZjhcdTljNDhcdTZhM2RcdThhYjBcdTRlMzlcdTUzNThcdTU2MDZcdTU3NjZcdTYyYzVcdTYzYTJcdTY1ZTZcdTZiNGVcdTZkZTFcdTZlNWJcdTcwYWRcdTc3ZWRcdTdhZWZcdTdiYWFcdTdkYmJcdTgwM2RcdTgwYzZcdTg2Y2JcdThhOTVcdTkzNWJcdTU2ZTNcdTU4YzdcdTVmM2Vc''@;'; put 'put ''dTY1YWRcdTY2OTZcdTZhODBcdTZiYjVcdTc1MzdcdThhYzdcdTUwMjRcdTc3ZTVcdTU3MzBcdTVmMWJcdTYwNjVcdTY2N2FcdTZjNjBcdTc1ZjRcdTdhMWFcdTdmNmVcdTgxZjRcdTg3MThcdTkwNDVcdTk5YjNcdTdiYzlcdTc1NWNcdTdhZjlcdTdiNTFcdTg0YzRcdWZmZmRcdTkwMTBcdTc5''@;'; put 'put ''ZTlcdTdhOTJcdTgzMzZcdTVhZTFcdTc3NDBcdTRlMmRcdTRlZjJcdTViOTlcdTVmZTBcdTYyYmRcdTY2M2NcdTY3ZjFcdTZjZThcdTg2NmJcdTg4NzdcdThhM2JcdTkxNGVcdTkyZjNcdTk5ZDBcdTZhMTdcdTcwMjZcdTczMmFcdTgyZTdcdTg0NTdcdThjYWZcdTRlMDFcdTUxNDZcdTUxY2Jc''@;'; put 'put ''dTU1OGJcdTViZjVcdTVlMTZcdTVlMzNcdTVlODFcdTVmMTRcdTVmMzVcdTVmNmJcdTVmYjRcdTYxZjJcdTYzMTFcdTY2YTJcdTY3MWRcdTZmNmVcdTcyNTJcdTc1M2FcdTc3M2FcdTgwNzRcdTgxMzlcdTgxNzhcdTg3NzZcdThhYmZcdThhZGNcdThkODVcdThkZjNcdTkyOWFcdTk1NzdcdTk4''@;'; put 'put ''MDJcdTljZTVcdTUyYzVcdTYzNTdcdTc2ZjRcdTY3MTVcdTZjODhcdTczY2RcdThjYzNcdTkzYWVcdTk2NzNcdTZkMjVcdTU4OWNcdTY5MGVcdTY5Y2NcdThmZmRcdTkzOWFcdTc1ZGJcdTkwMWFcdTU4NWFcdTY4MDJcdTYzYjRcdTY5ZmJcdTRmNDNcdTZmMmNcdTY3ZDhcdThmYmJcdTg1MjZc''@;'; put 'put ''dTdkYjRcdTkzNTRcdTY5M2ZcdTZmNzBcdTU3NmFcdTU4ZjdcdTViMmNcdTdkMmNcdTcyMmFcdTU0MGFcdTkxZTNcdTlkYjRcdTRlYWRcdTRmNGVcdTUwNWNcdTUwNzVcdTUyNDNcdThjOWVcdTU0NDhcdTU4MjRcdTViOWFcdTVlMWRcdTVlOTVcdTVlYWRcdTVlZjdcdTVmMWZcdTYwOGNcdTYy''@;'; put 'put ''YjVcdTYzM2FcdTYzZDBcdTY4YWZcdTZjNDBcdTc4ODdcdTc5OGVcdTdhMGJcdTdkZTBcdTgyNDdcdThhMDJcdThhZTZcdThlNDRcdTkwMTNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0Nl1bcF0uY2hhckNvZGVBdCgw''@;'; put 'put ''KSYmKElbX1sxNDZdW3BdXT0zNzM3NitwLGJbMzczNzYrcF09X1sxNDZdW3BdKTtmb3IoX1sxNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwYjhcdTkxMmRcdTkxZDhcdTlmMGVcdTZjZTVcdTY0NThcdTY0ZTJcdTY1NzVcdTZl''@;'; put 'put ''ZjRcdTc2ODRcdTdiMWJcdTkwNjlcdTkzZDFcdTZlYmFcdTU0ZjJcdTVmYjlcdTY0YTRcdThmNGRcdThmZWRcdTkyNDRcdTUxNzhcdTU4NmJcdTU5MjlcdTVjNTVcdTVlOTdcdTZkZmJcdTdlOGZcdTc1MWNcdThjYmNcdThlZTJcdTk4NWJcdTcwYjlcdTRmMWRcdTZiYmZcdTZmYjFcdTc1MzBc''@;'; put 'put ''dTk2ZmJcdTUxNGVcdTU0MTBcdTU4MzVcdTU4NTdcdTU5YWNcdTVjNjBcdTVmOTJcdTY1OTdcdTY3NWNcdTZlMjFcdTc2N2JcdTgzZGZcdThjZWRcdTkwMTRcdTkwZmRcdTkzNGRcdTc4MjVcdTc4M2FcdTUyYWFcdTVlYTZcdTU3MWZcdTU5NzRcdTYwMTJcdTUwMTJcdTUxNWFcdTUxYWNcdWZm''@;'; put 'put ''ZmRcdTUxY2RcdTUyMDBcdTU1MTBcdTU4NTRcdTU4NThcdTU5NTdcdTViOTVcdTVjZjZcdTVkOGJcdTYwYmNcdTYyOTVcdTY0MmRcdTY3NzFcdTY4NDNcdTY4YmNcdTY4ZGZcdTc2ZDdcdTZkZDhcdTZlNmZcdTZkOWJcdTcwNmZcdTcxYzhcdTVmNTNcdTc1ZDhcdTc5NzdcdTdiNDlcdTdiNTRc''@;'; put 'put ''dTdiNTJcdTdjZDZcdTdkNzFcdTUyMzBcdTg0NjNcdTg1NjlcdTg1ZTRcdThhMGVcdThiMDRcdThjNDZcdThlMGZcdTkwMDNcdTkwMGZcdTk0MTlcdTk2NzZcdTk4MmRcdTlhMzBcdTk1ZDhcdTUwY2RcdTUyZDVcdTU0MGNcdTU4MDJcdTVjMGVcdTYxYTdcdTY0OWVcdTZkMWVcdTc3YjNcdTdh''@;'; put 'put ''ZTVcdTgwZjRcdTg0MDRcdTkwNTNcdTkyODVcdTVjZTBcdTlkMDdcdTUzM2ZcdTVmOTdcdTVmYjNcdTZkOWNcdTcyNzlcdTc3NjNcdTc5YmZcdTdiZTRcdTZiZDJcdTcyZWNcdThhYWRcdTY4MDNcdTZhNjFcdTUxZjhcdTdhODFcdTY5MzRcdTVjNGFcdTljZjZcdTgyZWJcdTViYzVcdTkxNDlc''@;'; put 'put ''dTcwMWVcdTU2NzhcdTVjNmZcdTYwYzdcdTY1NjZcdTZjOGNcdThjNWFcdTkwNDFcdTk4MTNcdTU0NTFcdTY2YzdcdTkyMGRcdTU5NDhcdTkwYTNcdTUxODVcdTRlNGRcdTUxZWFcdTg1OTlcdThiMGVcdTcwNThcdTYzN2FcdTkzNGJcdTY5NjJcdTk5YjRcdTdlMDRcdTc1NzdcdTUzNTdcdTY5''@;'; put 'put ''NjBcdThlZGZcdTk2ZTNcdTZjNWRcdTRlOGNcdTVjM2NcdTVmMTBcdThmZTlcdTUzMDJcdThjZDFcdTgwODlcdTg2NzlcdTVlZmZcdTY1ZTVcdTRlNzNcdTUxNjVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0N11bcF0u''@;'; put 'put ''Y2hhckNvZGVBdCgwKSYmKElbX1sxNDddW3BdXT0zNzYzMitwLGJbMzc2MzIrcF09X1sxNDddW3BdKTtmb3IoX1sxNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5ODJcdTVjM2ZcdTk3ZWVcdTRlZmJcdTU5OGFcdTVmY2RcdThh''@;'; put 'put ''OGRcdTZmZTFcdTc5YjBcdTc5NjJcdTViZTdcdTg0NzFcdTczMmJcdTcxYjFcdTVlNzRcdTVmZjVcdTYzN2JcdTY0OWFcdTcxYzNcdTdjOThcdTRlNDNcdTVlZmNcdTRlNGJcdTU3ZGNcdTU2YTJcdTYwYTlcdTZmYzNcdTdkMGRcdTgwZmRcdTgxMzNcdTgxYmZcdThmYjJcdTg5OTdcdTg2YTRc''@;'; put 'put ''dTVkZjRcdTYyOGFcdTY0YWRcdTg5ODdcdTY3NzdcdTZjZTJcdTZkM2VcdTc0MzZcdTc4MzRcdTVhNDZcdTdmNzVcdTgyYWRcdTk5YWNcdTRmZjNcdTVlYzNcdTYyZGRcdTYzOTJcdTY1NTdcdTY3NmZcdTc2YzNcdTcyNGNcdTgwY2NcdTgwYmFcdThmMjlcdTkxNGRcdTUwMGRcdTU3ZjlcdTVh''@;'; put 'put ''OTJcdTY4ODVcdWZmZmRcdTY5NzNcdTcxNjRcdTcyZmRcdThjYjdcdTU4ZjJcdThjZTBcdTk2NmFcdTkwMTlcdTg3N2ZcdTc5ZTRcdTc3ZTdcdTg0MjlcdTRmMmZcdTUyNjVcdTUzNWFcdTYyY2RcdTY3Y2ZcdTZjY2FcdTc2N2RcdTdiOTRcdTdjOTVcdTgyMzZcdTg1ODRcdThmZWJcdTY2ZGRc''@;'; put 'put ''dTZmMjBcdTcyMDZcdTdlMWJcdTgzYWJcdTk5YzFcdTllYTZcdTUxZmRcdTdiYjFcdTc4NzJcdTdiYjhcdTgwODdcdTdiNDhcdTZhZThcdTVlNjFcdTgwOGNcdTc1NTFcdTc1NjBcdTUxNmJcdTkyNjJcdTZlOGNcdTc2N2FcdTkxOTdcdTlhZWFcdTRmMTBcdTdmNzBcdTYyOWNcdTdiNGZcdTk1''@;'; put 'put ''YTVcdTljZTlcdTU2N2FcdTU4NTlcdTg2ZTRcdTk2YmNcdTRmMzRcdTUyMjRcdTUzNGFcdTUzY2RcdTUzZGJcdTVlMDZcdTY0MmNcdTY1OTFcdTY3N2ZcdTZjM2VcdTZjNGVcdTcyNDhcdTcyYWZcdTczZWRcdTc1NTRcdTdlNDFcdTgyMmNcdTg1ZTlcdThjYTlcdTdiYzRcdTkxYzZcdTcxNjlc''@;'; put 'put ''dTk4MTJcdTk4ZWZcdTYzM2RcdTY2NjlcdTc1NmFcdTc2ZTRcdTc4ZDBcdTg1NDNcdTg2ZWVcdTUzMmFcdTUzNTFcdTU0MjZcdTU5ODNcdTVlODdcdTVmN2NcdTYwYjJcdTYyNDlcdTYyNzlcdTYyYWJcdTY1OTBcdTZiZDRcdTZjY2NcdTc1YjJcdTc2YWVcdTc4OTFcdTc5ZDhcdTdkY2JcdTdm''@;'; put 'put ''NzdcdTgwYTVcdTg4YWJcdThhYjlcdThjYmJcdTkwN2ZcdTk3NWVcdTk4ZGJcdTZhMGJcdTdjMzhcdTUwOTlcdTVjM2VcdTVmYWVcdTY3ODdcdTZiZDhcdTc0MzVcdTc3MDlcdTdmOGVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDhdLmxlbmd0aDsrK3ApNjU1MzMh''@;'; put 'put ''PT1fWzE0OF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNDhdW3BdXT0zNzg4OCtwLGJbMzc4ODgrcF09X1sxNDhdW3BdKTtmb3IoX1sxNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlmM2JcdTY3Y2FcdTdhMTdcdTUzMzlcdTc1''@;'; put 'put ''OGJcdTlhZWRcdTVmNjZcdTgxOWRcdTgzZjFcdTgwOThcdTVmM2NcdTVmYzVcdTc1NjJcdTdiNDZcdTkwM2NcdTY4NjdcdTU5ZWJcdTVhOWJcdTdkMTBcdTc2N2VcdThiMmNcdTRmZjVcdTVmNmFcdTZhMTlcdTZjMzdcdTZmMDJcdTc0ZTJcdTc5NjhcdTg4NjhcdThhNTVcdThjNzlcdTVlZGZc''@;'; put 'put ''dTYzY2ZcdTc1YzVcdTc5ZDJcdTgyZDdcdTkzMjhcdTkyZjJcdTg0OWNcdTg2ZWRcdTljMmRcdTU0YzFcdTVmNmNcdTY1OGNcdTZkNWNcdTcwMTVcdThjYTdcdThjZDNcdTk4M2JcdTY1NGZcdTc0ZjZcdTRlMGRcdTRlZDhcdTU3ZTBcdTU5MmJcdTVhNjZcdTViY2NcdTUxYThcdTVlMDNcdTVl''@;'; put 'put ''OWNcdTYwMTZcdTYyNzZcdTY1NzdcdWZmZmRcdTY1YTdcdTY2NmVcdTZkNmVcdTcyMzZcdTdiMjZcdTgxNTBcdTgxOWFcdTgyOTlcdThiNWNcdThjYTBcdThjZTZcdThkNzRcdTk2MWNcdTk2NDRcdTRmYWVcdTY0YWJcdTZiNjZcdTgyMWVcdTg0NjFcdTg1NmFcdTkwZThcdTVjMDFcdTY5NTNc''@;'; put 'put ''dTk4YThcdTg0N2FcdTg1NTdcdTRmMGZcdTUyNmZcdTVmYTlcdTVlNDVcdTY3MGRcdTc5OGZcdTgxNzlcdTg5MDdcdTg5ODZcdTZkZjVcdTVmMTdcdTYyNTVcdTZjYjhcdTRlY2ZcdTcyNjlcdTliOTJcdTUyMDZcdTU0M2JcdTU2NzRcdTU4YjNcdTYxYTRcdTYyNmVcdTcxMWFcdTU5NmVcdTdj''@;'; put 'put ''ODlcdTdjZGVcdTdkMWJcdTk2ZjBcdTY1ODdcdTgwNWVcdTRlMTlcdTRmNzVcdTUxNzVcdTU4NDBcdTVlNjNcdTVlNzNcdTVmMGFcdTY3YzRcdTRlMjZcdTg1M2RcdTk1ODlcdTk2NWJcdTdjNzNcdTk4MDFcdTUwZmJcdTU4YzFcdTc2NTZcdTc4YTdcdTUyMjVcdTc3YTVcdTg1MTFcdTdiODZc''@;'; put 'put ''dTUwNGZcdTU5MDlcdTcyNDdcdTdiYzdcdTdkZThcdThmYmFcdThmZDRcdTkwNGRcdTRmYmZcdTUyYzlcdTVhMjlcdTVmMDFcdTk3YWRcdTRmZGRcdTgyMTdcdTkyZWFcdTU3MDNcdTYzNTVcdTZiNjlcdTc1MmJcdTg4ZGNcdThmMTRcdTdhNDJcdTUyZGZcdTU4OTNcdTYxNTVcdTYyMGFcdTY2''@;'; put 'put ''YWVcdTZiY2RcdTdjM2ZcdTgzZTlcdTUwMjNcdTRmZjhcdTUzMDVcdTU0NDZcdTU4MzFcdTU5NDlcdTViOWRcdTVjZjBcdTVjZWZcdTVkMjlcdTVlOTZcdTYyYjFcdTYzNjdcdTY1M2VcdTY1YjlcdTY3MGJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDldLmxlbmd0''@;'; put 'put ''aDsrK3ApNjU1MzMhPT1fWzE0OV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNDldW3BdXT0zODE0NCtwLGJbMzgxNDQrcF09X1sxNDldW3BdKTtmb3IoX1sxNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjZDVcdTZjZTFcdTcw''@;'; put 'put ''ZjlcdTc4MzJcdTdlMmJcdTgwZGVcdTgyYjNcdTg0MGNcdTg0ZWNcdTg3MDJcdTg5MTJcdThhMmFcdThjNGFcdTkwYTZcdTkyZDJcdTk4ZmRcdTljZjNcdTlkNmNcdTRlNGZcdTRlYTFcdTUwOGRcdTUyNTZcdTU3NGFcdTU5YThcdTVlM2RcdTVmZDhcdTVmZDlcdTYyM2ZcdTY2YjRcdTY3MWJc''@;'; put 'put ''dTY3ZDBcdTY4ZDJcdTUxOTJcdTdkMjFcdTgwYWFcdTgxYThcdThiMDBcdThjOGNcdThjYmZcdTkyN2VcdTk2MzJcdTU0MjBcdTk4MmNcdTUzMTdcdTUwZDVcdTUzNWNcdTU4YThcdTY0YjJcdTY3MzRcdTcyNjdcdTc3NjZcdTdhNDZcdTkxZTZcdTUyYzNcdTZjYTFcdTZiODZcdTU4MDBcdTVl''@;'; put 'put ''NGNcdTU5NTRcdTY3MmNcdTdmZmJcdTUxZTFcdTc2YzZcdWZmZmRcdTY0NjlcdTc4ZThcdTliNTRcdTllYmJcdTU3Y2JcdTU5YjlcdTY2MjdcdTY3OWFcdTZiY2VcdTU0ZTlcdTY5ZDlcdTVlNTVcdTgxOWNcdTY3OTVcdTliYWFcdTY3ZmVcdTljNTJcdTY4NWRcdTRlYTZcdTRmZTNcdTUzYzhc''@;'; put 'put ''dTYyYjlcdTY3MmJcdTZjYWJcdThmYzRcdTRmYWRcdTdlNmRcdTllYmZcdTRlMDdcdTYxNjJcdTZlODBcdTZmMmJcdTg1MTNcdTU0NzNcdTY3MmFcdTliNDVcdTVkZjNcdTdiOTVcdTVjYWNcdTViYzZcdTg3MWNcdTZlNGFcdTg0ZDFcdTdhMTRcdTgxMDhcdTU5OTlcdTdjOGRcdTZjMTFcdTc3''@;'; put 'put ''MjBcdTUyZDlcdTU5MjJcdTcxMjFcdTcyNWZcdTc3ZGJcdTk3MjdcdTlkNjFcdTY5MGJcdTVhN2ZcdTVhMThcdTUxYTVcdTU0MGRcdTU0N2RcdTY2MGVcdTc2ZGZcdThmZjdcdTkyOThcdTljZjRcdTU5ZWFcdTcyNWRcdTZlYzVcdTUxNGRcdTY4YzlcdTdkYmZcdTdkZWNcdTk3NjJcdTllYmFc''@;'; put 'put ''dTY0NzhcdTZhMjFcdTgzMDJcdTU5ODRcdTViNWZcdTZiZGJcdTczMWJcdTc2ZjJcdTdkYjJcdTgwMTdcdTg0OTlcdTUxMzJcdTY3MjhcdTllZDlcdTc2ZWVcdTY3NjJcdTUyZmZcdTk5MDVcdTVjMjRcdTYyM2JcdTdjN2VcdThjYjBcdTU1NGZcdTYwYjZcdTdkMGJcdTk1ODBcdTUzMDFcdTRl''@;'; put 'put ''NWZcdTUxYjZcdTU5MWNcdTcyM2FcdTgwMzZcdTkxY2VcdTVmMjVcdTc3ZTJcdTUzODRcdTVmNzlcdTdkMDRcdTg1YWNcdThhMzNcdThlOGRcdTk3NTZcdTY3ZjNcdTg1YWVcdTk0NTNcdTYxMDlcdTYxMDhcdTZjYjlcdTc2NTJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9''@;'; put 'put ''X1sxNTBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1MF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNTBdW3BdXT0zODQwMCtwLGJbMzg0MDArcF09X1sxNTBdW3BdKTtmb3IoX1sxNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThh''@;'; put 'put ''ZWRcdThmMzhcdTU1MmZcdTRmNTFcdTUxMmFcdTUyYzdcdTUzY2JcdTViYTVcdTVlN2RcdTYwYTBcdTYxODJcdTYzZDZcdTY3MDlcdTY3ZGFcdTZlNjdcdTZkOGNcdTczMzZcdTczMzdcdTc1MzFcdTc5NTBcdTg4ZDVcdThhOThcdTkwNGFcdTkwOTFcdTkwZjVcdTk2YzRcdTg3OGRcdTU5MTVc''@;'; put 'put ''dTRlODhcdTRmNTlcdTRlMGVcdThhODlcdThmM2ZcdTk4MTBcdTUwYWRcdTVlN2NcdTU5OTZcdTViYjlcdTVlYjhcdTYzZGFcdTYzZmFcdTY0YzFcdTY2ZGNcdTY5NGFcdTY5ZDhcdTZkMGJcdTZlYjZcdTcxOTRcdTc1MjhcdTdhYWZcdTdmOGFcdTgwMDBcdTg0NDlcdTg0YzlcdTg5ODFcdThi''@;'; put 'put ''MjFcdThlMGFcdTkwNjVcdTk2N2RcdTk5MGFcdTYxN2VcdTYyOTFcdTZiMzJcdWZmZmRcdTZjODNcdTZkNzRcdTdmY2NcdTdmZmNcdTZkYzBcdTdmODVcdTg3YmFcdTg4ZjhcdTY3NjVcdTgzYjFcdTk4M2NcdTk2ZjdcdTZkMWJcdTdkNjFcdTg0M2RcdTkxNmFcdTRlNzFcdTUzNzVcdTVkNTBc''@;'; put 'put ''dTZiMDRcdTZmZWJcdTg1Y2RcdTg2MmRcdTg5YTdcdTUyMjlcdTU0MGZcdTVjNjVcdTY3NGVcdTY4YThcdTc0MDZcdTc0ODNcdTc1ZTJcdTg4Y2ZcdTg4ZTFcdTkxY2NcdTk2ZTJcdTk2NzhcdTVmOGJcdTczODdcdTdhY2JcdTg0NGVcdTYzYTBcdTc1NjVcdTUyODlcdTZkNDFcdTZlOWNcdTc0''@;'; put 'put ''MDlcdTc1NTlcdTc4NmJcdTdjOTJcdTk2ODZcdTdhZGNcdTlmOGRcdTRmYjZcdTYxNmVcdTY1YzVcdTg2NWNcdTRlODZcdTRlYWVcdTUwZGFcdTRlMjFcdTUxY2NcdTViZWVcdTY1OTlcdTY4ODFcdTZkYmNcdTczMWZcdTc2NDJcdTc3YWRcdTdhMWNcdTdjZTdcdTgyNmZcdThhZDJcdTkwN2Nc''@;'; put 'put ''dTkxY2ZcdTk2NzVcdTk4MThcdTUyOWJcdTdkZDFcdTUwMmJcdTUzOThcdTY3OTdcdTZkY2JcdTcxZDBcdTc0MzNcdTgxZThcdThmMmFcdTk2YTNcdTljNTdcdTllOWZcdTc0NjBcdTU4NDFcdTZkOTlcdTdkMmZcdTk4NWVcdTRlZTRcdTRmMzZcdTRmOGJcdTUxYjdcdTUyYjFcdTVkYmFcdTYw''@;'; put 'put ''MWNcdTczYjJcdTc5M2NcdTgyZDNcdTkyMzRcdTk2YjdcdTk2ZjZcdTk3MGFcdTllOTdcdTlmNjJcdTY2YTZcdTZiNzRcdTUyMTdcdTUyYTNcdTcwYzhcdTg4YzJcdTVlYzlcdTYwNGJcdTYxOTBcdTZmMjNcdTcxNDlcdTdjM2VcdTdkZjRcdTgwNmZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0''@;'; put 'put ''KCIiKSxwPTA7cCE9X1sxNTFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1MV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNTFdW3BdXT0zODY1NitwLGJbMzg2NTYrcF09X1sxNTFdW3BdKTtmb3IoX1sxNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTg0ZWVcdTkwMjNcdTkzMmNcdTU0NDJcdTliNmZcdTZhZDNcdTcwODlcdThjYzJcdThkZWZcdTk3MzJcdTUyYjRcdTVhNDFcdTVlY2FcdTVmMDRcdTY3MTdcdTY5N2NcdTY5OTRcdTZkNmFcdTZmMGZcdTcyNjJcdTcyZmNcdTdiZWRcdTgwMDFcdTgwN2VcdTg3NGJcdTkwY2Vc''@;'; put 'put ''dTUxNmRcdTllOTNcdTc5ODRcdTgwOGJcdTkzMzJcdThhZDZcdTUwMmRcdTU0OGNcdThhNzFcdTZiNmFcdThjYzRcdTgxMDdcdTYwZDFcdTY3YTBcdTlkZjJcdTRlOTlcdTRlOThcdTljMTBcdThhNmJcdTg1YzFcdTg1NjhcdTY5MDBcdTZlN2VcdTc4OTdcdTgxNTVcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmMGNcdTRlMTBcdTRlMTVcdTRlMmFcdTRlMzFcdTRlMzZcdTRlM2NcdTRlM2ZcdTRlNDJcdTRlNTZcdTRlNThcdTRlODJcdTRlODVcdThj''@;'; put 'put ''NmJcdTRlOGFcdTgyMTJcdTVmMGRcdTRlOGVcdTRlOWVcdTRlOWZcdTRlYTBcdTRlYTJcdTRlYjBcdTRlYjNcdTRlYjZcdTRlY2VcdTRlY2RcdTRlYzRcdTRlYzZcdTRlYzJcdTRlZDdcdTRlZGVcdTRlZWRcdTRlZGZcdTRlZjdcdTRmMDlcdTRmNWFcdTRmMzBcdTRmNWJcdTRmNWRcdTRmNTdc''@;'; put 'put ''dTRmNDdcdTRmNzZcdTRmODhcdTRmOGZcdTRmOThcdTRmN2JcdTRmNjlcdTRmNzBcdTRmOTFcdTRmNmZcdTRmODZcdTRmOTZcdTUxMThcdTRmZDRcdTRmZGZcdTRmY2VcdTRmZDhcdTRmZGJcdTRmZDFcdTRmZGFcdTRmZDBcdTRmZTRcdTRmZTVcdTUwMWFcdTUwMjhcdTUwMTRcdTUwMmFcdTUw''@;'; put 'put ''MjVcdTUwMDVcdTRmMWNcdTRmZjZcdTUwMjFcdTUwMjlcdTUwMmNcdTRmZmVcdTRmZWZcdTUwMTFcdTUwMDZcdTUwNDNcdTUwNDdcdTY3MDNcdTUwNTVcdTUwNTBcdTUwNDhcdTUwNWFcdTUwNTZcdTUwNmNcdTUwNzhcdTUwODBcdTUwOWFcdTUwODVcdTUwYjRcdTUwYjJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1Ml1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNTJdW3BdXT0zODkxMitwLGJbMzg5MTIrcF09X1sxNTJdW3BdKTtmb3IoX1sxNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUwYzlcdTUwY2FcdTUwYjNcdTUwYzJcdTUwZDZcdTUwZGVcdTUwZTVcdTUwZWRcdTUwZTNcdTUwZWVcdTUwZjlcdTUwZjVcdTUxMDlcdTUxMDFcdTUxMDJcdTUxMTZcdTUxMTVcdTUxMTRcdTUxMWFcdTUxMjFcdTUxM2FcdTUxMzdcdTUxM2NcdTUxM2Jc''@;'; put 'put ''dTUxM2ZcdTUxNDBcdTUxNTJcdTUxNGNcdTUxNTRcdTUxNjJcdTdhZjhcdTUxNjlcdTUxNmFcdTUxNmVcdTUxODBcdTUxODJcdTU2ZDhcdTUxOGNcdTUxODlcdTUxOGZcdTUxOTFcdTUxOTNcdTUxOTVcdTUxOTZcdTUxYTRcdTUxYTZcdTUxYTJcdTUxYTlcdTUxYWFcdTUxYWJcdTUxYjNcdTUx''@;'; put 'put ''YjFcdTUxYjJcdTUxYjBcdTUxYjVcdTUxYmRcdTUxYzVcdTUxYzlcdTUxZGJcdTUxZTBcdTg2NTVcdTUxZTlcdTUxZWRcdWZmZmRcdTUxZjBcdTUxZjVcdTUxZmVcdTUyMDRcdTUyMGJcdTUyMTRcdTUyMGVcdTUyMjdcdTUyMmFcdTUyMmVcdTUyMzNcdTUyMzlcdTUyNGZcdTUyNDRcdTUyNGJc''@;'; put 'put ''dTUyNGNcdTUyNWVcdTUyNTRcdTUyNmFcdTUyNzRcdTUyNjlcdTUyNzNcdTUyN2ZcdTUyN2RcdTUyOGRcdTUyOTRcdTUyOTJcdTUyNzFcdTUyODhcdTUyOTFcdThmYThcdThmYTdcdTUyYWNcdTUyYWRcdTUyYmNcdTUyYjVcdTUyYzFcdTUyY2RcdTUyZDdcdTUyZGVcdTUyZTNcdTUyZTZcdTk4''@;'; put 'put ''ZWRcdTUyZTBcdTUyZjNcdTUyZjVcdTUyZjhcdTUyZjlcdTUzMDZcdTUzMDhcdTc1MzhcdTUzMGRcdTUzMTBcdTUzMGZcdTUzMTVcdTUzMWFcdTUzMjNcdTUzMmZcdTUzMzFcdTUzMzNcdTUzMzhcdTUzNDBcdTUzNDZcdTUzNDVcdTRlMTdcdTUzNDlcdTUzNGRcdTUxZDZcdTUzNWVcdTUzNjlc''@;'; put 'put ''dTUzNmVcdTU5MThcdTUzN2JcdTUzNzdcdTUzODJcdTUzOTZcdTUzYTBcdTUzYTZcdTUzYTVcdTUzYWVcdTUzYjBcdTUzYjZcdTUzYzNcdTdjMTJcdTk2ZDlcdTUzZGZcdTY2ZmNcdTcxZWVcdTUzZWVcdTUzZThcdTUzZWRcdTUzZmFcdTU0MDFcdTU0M2RcdTU0NDBcdTU0MmNcdTU0MmRcdTU0''@;'; put 'put ''M2NcdTU0MmVcdTU0MzZcdTU0MjlcdTU0MWRcdTU0NGVcdTU0OGZcdTU0NzVcdTU0OGVcdTU0NWZcdTU0NzFcdTU0NzdcdTU0NzBcdTU0OTJcdTU0N2JcdTU0ODBcdTU0NzZcdTU0ODRcdTU0OTBcdTU0ODZcdTU0YzdcdTU0YTJcdTU0YjhcdTU0YTVcdTU0YWNcdTU0YzRcdTU0YzhcdTU0YThc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1M11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNTNdW3BdXT0zOTE2OCtwLGJbMzkxNjgrcF09X1sxNTNdW3BdKTtmb3IoX1sxNTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YWJcdTU0YzJcdTU0YTRcdTU0YmVcdTU0YmNcdTU0ZDhcdTU0ZTVcdTU0ZTZcdTU1MGZcdTU1MTRcdTU0ZmRcdTU0ZWVcdTU0ZWRcdTU0ZmFcdTU0ZTJcdTU1MzlcdTU1NDBcdTU1NjNcdTU1NGNcdTU1MmVcdTU1NWNcdTU1NDVc''@;'; put 'put ''dTU1NTZcdTU1NTdcdTU1MzhcdTU1MzNcdTU1NWRcdTU1OTlcdTU1ODBcdTU0YWZcdTU1OGFcdTU1OWZcdTU1N2JcdTU1N2VcdTU1OThcdTU1OWVcdTU1YWVcdTU1N2NcdTU1ODNcdTU1YTlcdTU1ODdcdTU1YThcdTU1ZGFcdTU1YzVcdTU1ZGZcdTU1YzRcdTU1ZGNcdTU1ZTRcdTU1ZDRcdTU2''@;'; put 'put ''MTRcdTU1ZjdcdTU2MTZcdTU1ZmVcdTU1ZmRcdTU2MWJcdTU1ZjlcdTU2NGVcdTU2NTBcdTcxZGZcdTU2MzRcdTU2MzZcdTU2MzJcdTU2MzhcdWZmZmRcdTU2NmJcdTU2NjRcdTU2MmZcdTU2NmNcdTU2NmFcdTU2ODZcdTU2ODBcdTU2OGFcdTU2YTBcdTU2OTRcdTU2OGZcdTU2YTVcdTU2YWVc''@;'; put 'put ''dTU2YjZcdTU2YjRcdTU2YzJcdTU2YmNcdTU2YzFcdTU2YzNcdTU2YzBcdTU2YzhcdTU2Y2VcdTU2ZDFcdTU2ZDNcdTU2ZDdcdTU2ZWVcdTU2ZjlcdTU3MDBcdTU2ZmZcdTU3MDRcdTU3MDlcdTU3MDhcdTU3MGJcdTU3MGRcdTU3MTNcdTU3MThcdTU3MTZcdTU1YzdcdTU3MWNcdTU3MjZcdTU3''@;'; put 'put ''MzdcdTU3MzhcdTU3NGVcdTU3M2JcdTU3NDBcdTU3NGZcdTU3NjlcdTU3YzBcdTU3ODhcdTU3NjFcdTU3N2ZcdTU3ODlcdTU3OTNcdTU3YTBcdTU3YjNcdTU3YTRcdTU3YWFcdTU3YjBcdTU3YzNcdTU3YzZcdTU3ZDRcdTU3ZDJcdTU3ZDNcdTU4MGFcdTU3ZDZcdTU3ZTNcdTU4MGJcdTU4MTlc''@;'; put 'put ''dTU4MWRcdTU4NzJcdTU4MjFcdTU4NjJcdTU4NGJcdTU4NzBcdTZiYzBcdTU4NTJcdTU4M2RcdTU4NzlcdTU4ODVcdTU4YjlcdTU4OWZcdTU4YWJcdTU4YmFcdTU4ZGVcdTU4YmJcdTU4YjhcdTU4YWVcdTU4YzVcdTU4ZDNcdTU4ZDFcdTU4ZDdcdTU4ZDlcdTU4ZDhcdTU4ZTVcdTU4ZGNcdTU4''@;'; put 'put ''ZTRcdTU4ZGZcdTU4ZWZcdTU4ZmFcdTU4ZjlcdTU4ZmJcdTU4ZmNcdTU4ZmRcdTU5MDJcdTU5MGFcdTU5MTBcdTU5MWJcdTY4YTZcdTU5MjVcdTU5MmNcdTU5MmRcdTU5MzJcdTU5MzhcdTU5M2VcdTdhZDJcdTU5NTVcdTU5NTBcdTU5NGVcdTU5NWFcdTU5NThcdTU5NjJcdTU5NjBcdTU5Njdc''@;'; put 'put ''dTU5NmNcdTU5NjlcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1NF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNTRdW3BdXT0zOTQyNCtwLGJbMzk0MjQrcF09X1sxNTRdW3BdKTtmb3IoX1sxNTVdPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5NzhcdTU5ODFcdTU5OWRcdTRmNWVcdTRmYWJcdTU5YTNcdTU5YjJcdTU5YzZcdTU5ZThcdTU5ZGNcdTU5OGRcdTU5ZDlcdTU5ZGFcdTVhMjVcdTVhMWZcdTVhMTFcdTVhMWNcdTVhMDlcdTVhMWFcdTVhNDBc''@;'; put 'put ''dTVhNmNcdTVhNDlcdTVhMzVcdTVhMzZcdTVhNjJcdTVhNmFcdTVhOWFcdTVhYmNcdTVhYmVcdTVhY2JcdTVhYzJcdTVhYmRcdTVhZTNcdTVhZDdcdTVhZTZcdTVhZTlcdTVhZDZcdTVhZmFcdTVhZmJcdTViMGNcdTViMGJcdTViMTZcdTViMzJcdTVhZDBcdTViMmFcdTViMzZcdTViM2VcdTVi''@;'; put 'put ''NDNcdTViNDVcdTViNDBcdTViNTFcdTViNTVcdTViNWFcdTViNWJcdTViNjVcdTViNjlcdTViNzBcdTViNzNcdTViNzVcdTViNzhcdTY1ODhcdTViN2FcdTViODBcdWZmZmRcdTViODNcdTViYTZcdTViYjhcdTViYzNcdTViYzdcdTViYzlcdTViZDRcdTViZDBcdTViZTRcdTViZTZcdTViZTJc''@;'; put 'put ''dTViZGVcdTViZTVcdTViZWJcdTViZjBcdTViZjZcdTViZjNcdTVjMDVcdTVjMDdcdTVjMDhcdTVjMGRcdTVjMTNcdTVjMjBcdTVjMjJcdTVjMjhcdTVjMzhcdTVjMzlcdTVjNDFcdTVjNDZcdTVjNGVcdTVjNTNcdTVjNTBcdTVjNGZcdTViNzFcdTVjNmNcdTVjNmVcdTRlNjJcdTVjNzZcdTVj''@;'; put 'put ''NzlcdTVjOGNcdTVjOTFcdTVjOTRcdTU5OWJcdTVjYWJcdTVjYmJcdTVjYjZcdTVjYmNcdTVjYjdcdTVjYzVcdTVjYmVcdTVjYzdcdTVjZDlcdTVjZTlcdTVjZmRcdTVjZmFcdTVjZWRcdTVkOGNcdTVjZWFcdTVkMGJcdTVkMTVcdTVkMTdcdTVkNWNcdTVkMWZcdTVkMWJcdTVkMTFcdTVkMTRc''@;'; put 'put ''dTVkMjJcdTVkMWFcdTVkMTlcdTVkMThcdTVkNGNcdTVkNTJcdTVkNGVcdTVkNGJcdTVkNmNcdTVkNzNcdTVkNzZcdTVkODdcdTVkODRcdTVkODJcdTVkYTJcdTVkOWRcdTVkYWNcdTVkYWVcdTVkYmRcdTVkOTBcdTVkYjdcdTVkYmNcdTVkYzlcdTVkY2RcdTVkZDNcdTVkZDJcdTVkZDZcdTVk''@;'; put 'put ''ZGJcdTVkZWJcdTVkZjJcdTVkZjVcdTVlMGJcdTVlMWFcdTVlMTlcdTVlMTFcdTVlMWJcdTVlMzZcdTVlMzdcdTVlNDRcdTVlNDNcdTVlNDBcdTVlNGVcdTVlNTdcdTVlNTRcdTVlNWZcdTVlNjJcdTVlNjRcdTVlNDdcdTVlNzVcdTVlNzZcdTVlN2FcdTllYmNcdTVlN2ZcdTVlYTBcdTVlYzFc''@;'; put 'put ''dTVlYzJcdTVlYzhcdTVlZDBcdTVlY2ZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1NV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNTVdW3BdXT0zOTY4MCtwLGJbMzk2ODArcF09X1sxNTVdW3BdKTtmb3IoX1sxNTZd''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVlZDZcdTVlZTNcdTVlZGRcdTVlZGFcdTVlZGJcdTVlZTJcdTVlZTFcdTVlZThcdTVlZTlcdTVlZWNcdTVlZjFcdTVlZjNcdTVlZjBcdTVlZjRcdTVlZjhcdTVlZmVcdTVmMDNcdTVmMDlc''@;'; put 'put ''dTVmNWRcdTVmNWNcdTVmMGJcdTVmMTFcdTVmMTZcdTVmMjlcdTVmMmRcdTVmMzhcdTVmNDFcdTVmNDhcdTVmNGNcdTVmNGVcdTVmMmZcdTVmNTFcdTVmNTZcdTVmNTdcdTVmNTlcdTVmNjFcdTVmNmRcdTVmNzNcdTVmNzdcdTVmODNcdTVmODJcdTVmN2ZcdTVmOGFcdTVmODhcdTVmOTFcdTVm''@;'; put 'put ''ODdcdTVmOWVcdTVmOTlcdTVmOThcdTVmYTBcdTVmYThcdTVmYWRcdTVmYmNcdTVmZDZcdTVmZmJcdTVmZTRcdTVmZjhcdTVmZjFcdTVmZGRcdTYwYjNcdTVmZmZcdTYwMjFcdTYwNjBcdWZmZmRcdTYwMTlcdTYwMTBcdTYwMjlcdTYwMGVcdTYwMzFcdTYwMWJcdTYwMTVcdTYwMmJcdTYwMjZc''@;'; put 'put ''dTYwMGZcdTYwM2FcdTYwNWFcdTYwNDFcdTYwNmFcdTYwNzdcdTYwNWZcdTYwNGFcdTYwNDZcdTYwNGRcdTYwNjNcdTYwNDNcdTYwNjRcdTYwNDJcdTYwNmNcdTYwNmJcdTYwNTlcdTYwODFcdTYwOGRcdTYwZTdcdTYwODNcdTYwOWFcdTYwODRcdTYwOWJcdTYwOTZcdTYwOTdcdTYwOTJcdTYw''@;'; put 'put ''YTdcdTYwOGJcdTYwZTFcdTYwYjhcdTYwZTBcdTYwZDNcdTYwYjRcdTVmZjBcdTYwYmRcdTYwYzZcdTYwYjVcdTYwZDhcdTYxNGRcdTYxMTVcdTYxMDZcdTYwZjZcdTYwZjdcdTYxMDBcdTYwZjRcdTYwZmFcdTYxMDNcdTYxMjFcdTYwZmJcdTYwZjFcdTYxMGRcdTYxMGVcdTYxNDdcdTYxM2Vc''@;'; put 'put ''dTYxMjhcdTYxMjdcdTYxNGFcdTYxM2ZcdTYxM2NcdTYxMmNcdTYxMzRcdTYxM2RcdTYxNDJcdTYxNDRcdTYxNzNcdTYxNzdcdTYxNThcdTYxNTlcdTYxNWFcdTYxNmJcdTYxNzRcdTYxNmZcdTYxNjVcdTYxNzFcdTYxNWZcdTYxNWRcdTYxNTNcdTYxNzVcdTYxOTlcdTYxOTZcdTYxODdcdTYx''@;'; put 'put ''YWNcdTYxOTRcdTYxOWFcdTYxOGFcdTYxOTFcdTYxYWJcdTYxYWVcdTYxY2NcdTYxY2FcdTYxYzlcdTYxZjdcdTYxYzhcdTYxYzNcdTYxYzZcdTYxYmFcdTYxY2JcdTdmNzlcdTYxY2RcdTYxZTZcdTYxZTNcdTYxZjZcdTYxZmFcdTYxZjRcdTYxZmZcdTYxZmRcdTYxZmNcdTYxZmVcdTYyMDBc''@;'; put 'put ''dTYyMDhcdTYyMDlcdTYyMGRcdTYyMGNcdTYyMTRcdTYyMWJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1Nl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNTZdW3BdXT0zOTkzNitwLGJbMzk5MzYrcF09X1sxNTZdW3Bd''@;'; put 'put ''KTtmb3IoX1sxNTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyMWVcdTYyMjFcdTYyMmFcdTYyMmVcdTYyMzBcdTYyMzJcdTYyMzNcdTYyNDFcdTYyNGVcdTYyNWVcdTYyNjNcdTYyNWJcdTYyNjBcdTYyNjhcdTYyN2NcdTYyODJc''@;'; put 'put ''dTYyODlcdTYyN2VcdTYyOTJcdTYyOTNcdTYyOTZcdTYyZDRcdTYyODNcdTYyOTRcdTYyZDdcdTYyZDFcdTYyYmJcdTYyY2ZcdTYyZmZcdTYyYzZcdTY0ZDRcdTYyYzhcdTYyZGNcdTYyY2NcdTYyY2FcdTYyYzJcdTYyYzdcdTYyOWJcdTYyYzlcdTYzMGNcdTYyZWVcdTYyZjFcdTYzMjdcdTYz''@;'; put 'put ''MDJcdTYzMDhcdTYyZWZcdTYyZjVcdTYzNTBcdTYzM2VcdTYzNGRcdTY0MWNcdTYzNGZcdTYzOTZcdTYzOGVcdTYzODBcdTYzYWJcdTYzNzZcdTYzYTNcdTYzOGZcdTYzODlcdTYzOWZcdTYzYjVcdTYzNmJcdWZmZmRcdTYzNjlcdTYzYmVcdTYzZTlcdTYzYzBcdTYzYzZcdTYzZTNcdTYzYzlc''@;'; put 'put ''dTYzZDJcdTYzZjZcdTYzYzRcdTY0MTZcdTY0MzRcdTY0MDZcdTY0MTNcdTY0MjZcdTY0MzZcdTY1MWRcdTY0MTdcdTY0MjhcdTY0MGZcdTY0NjdcdTY0NmZcdTY0NzZcdTY0NGVcdTY1MmFcdTY0OTVcdTY0OTNcdTY0YTVcdTY0YTlcdTY0ODhcdTY0YmNcdTY0ZGFcdTY0ZDJcdTY0YzVcdTY0''@;'; put 'put ''YzdcdTY0YmJcdTY0ZDhcdTY0YzJcdTY0ZjFcdTY0ZTdcdTgyMDlcdTY0ZTBcdTY0ZTFcdTYyYWNcdTY0ZTNcdTY0ZWZcdTY1MmNcdTY0ZjZcdTY0ZjRcdTY0ZjJcdTY0ZmFcdTY1MDBcdTY0ZmRcdTY1MThcdTY1MWNcdTY1MDVcdTY1MjRcdTY1MjNcdTY1MmJcdTY1MzRcdTY1MzVcdTY1Mzdc''@;'; put 'put ''dTY1MzZcdTY1MzhcdTc1NGJcdTY1NDhcdTY1NTZcdTY1NTVcdTY1NGRcdTY1NThcdTY1NWVcdTY1NWRcdTY1NzJcdTY1NzhcdTY1ODJcdTY1ODNcdThiOGFcdTY1OWJcdTY1OWZcdTY1YWJcdTY1YjdcdTY1YzNcdTY1YzZcdTY1YzFcdTY1YzRcdTY1Y2NcdTY1ZDJcdTY1ZGJcdTY1ZDlcdTY1''@;'; put 'put ''ZTBcdTY1ZTFcdTY1ZjFcdTY3NzJcdTY2MGFcdTY2MDNcdTY1ZmJcdTY3NzNcdTY2MzVcdTY2MzZcdTY2MzRcdTY2MWNcdTY2NGZcdTY2NDRcdTY2NDlcdTY2NDFcdTY2NWVcdTY2NWRcdTY2NjRcdTY2NjdcdTY2NjhcdTY2NWZcdTY2NjJcdTY2NzBcdTY2ODNcdTY2ODhcdTY2OGVcdTY2ODlc''@;'; put 'put ''dTY2ODRcdTY2OThcdTY2OWRcdTY2YzFcdTY2YjlcdTY2YzlcdTY2YmVcdTY2YmNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1N11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNTddW3BdXT00MDE5MitwLGJbNDAxOTIr''@;'; put 'put ''cF09X1sxNTddW3BdKTtmb3IoX1sxNThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY2YzRcdTY2YjhcdTY2ZDZcdTY2ZGFcdTY2ZTBcdTY2M2ZcdTY2ZTZcdTY2ZTlcdTY2ZjBcdTY2ZjVcdTY2ZjdcdTY3MGZcdTY3MTZcdTY3MWVc''@;'; put 'put ''dTY3MjZcdTY3MjdcdTk3MzhcdTY3MmVcdTY3M2ZcdTY3MzZcdTY3NDFcdTY3MzhcdTY3MzdcdTY3NDZcdTY3NWVcdTY3NjBcdTY3NTlcdTY3NjNcdTY3NjRcdTY3ODlcdTY3NzBcdTY3YTlcdTY3N2NcdTY3NmFcdTY3OGNcdTY3OGJcdTY3YTZcdTY3YTFcdTY3ODVcdTY3YjdcdTY3ZWZcdTY3''@;'; put 'put ''YjRcdTY3ZWNcdTY3YjNcdTY3ZTlcdTY3YjhcdTY3ZTRcdTY3ZGVcdTY3ZGRcdTY3ZTJcdTY3ZWVcdTY3YjlcdTY3Y2VcdTY3YzZcdTY3ZTdcdTZhOWNcdTY4MWVcdTY4NDZcdTY4MjlcdTY4NDBcdTY4NGRcdTY4MzJcdTY4NGVcdWZmZmRcdTY4YjNcdTY4MmJcdTY4NTlcdTY4NjNcdTY4Nzdc''@;'; put 'put ''dTY4N2ZcdTY4OWZcdTY4OGZcdTY4YWRcdTY4OTRcdTY4OWRcdTY4OWJcdTY4ODNcdTZhYWVcdTY4YjlcdTY4NzRcdTY4YjVcdTY4YTBcdTY4YmFcdTY5MGZcdTY4OGRcdTY4N2VcdTY5MDFcdTY4Y2FcdTY5MDhcdTY4ZDhcdTY5MjJcdTY5MjZcdTY4ZTFcdTY5MGNcdTY4Y2RcdTY4ZDRcdTY4''@;'; put 'put ''ZTdcdTY4ZDVcdTY5MzZcdTY5MTJcdTY5MDRcdTY4ZDdcdTY4ZTNcdTY5MjVcdTY4ZjlcdTY4ZTBcdTY4ZWZcdTY5MjhcdTY5MmFcdTY5MWFcdTY5MjNcdTY5MjFcdTY4YzZcdTY5NzlcdTY5NzdcdTY5NWNcdTY5NzhcdTY5NmJcdTY5NTRcdTY5N2VcdTY5NmVcdTY5MzlcdTY5NzRcdTY5M2Rc''@;'; put 'put ''dTY5NTlcdTY5MzBcdTY5NjFcdTY5NWVcdTY5NWRcdTY5ODFcdTY5NmFcdTY5YjJcdTY5YWVcdTY5ZDBcdTY5YmZcdTY5YzFcdTY5ZDNcdTY5YmVcdTY5Y2VcdTViZThcdTY5Y2FcdTY5ZGRcdTY5YmJcdTY5YzNcdTY5YTdcdTZhMmVcdTY5OTFcdTY5YTBcdTY5OWNcdTY5OTVcdTY5YjRcdTY5''@;'; put 'put ''ZGVcdTY5ZThcdTZhMDJcdTZhMWJcdTY5ZmZcdTZiMGFcdTY5ZjlcdTY5ZjJcdTY5ZTdcdTZhMDVcdTY5YjFcdTZhMWVcdTY5ZWRcdTZhMTRcdTY5ZWJcdTZhMGFcdTZhMTJcdTZhYzFcdTZhMjNcdTZhMTNcdTZhNDRcdTZhMGNcdTZhNzJcdTZhMzZcdTZhNzhcdTZhNDdcdTZhNjJcdTZhNTlc''@;'; put 'put ''dTZhNjZcdTZhNDhcdTZhMzhcdTZhMjJcdTZhOTBcdTZhOGRcdTZhYTBcdTZhODRcdTZhYTJcdTZhYTNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNThdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1OF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNThdW3BdXT00MDQ0''@;'; put 'put ''OCtwLGJbNDA0NDgrcF09X1sxNThdW3BdKTtmb3IoX1sxNTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZhOTdcdTg2MTdcdTZhYmJcdTZhYzNcdTZhYzJcdTZhYjhcdTZhYjNcdTZhYWNcdTZhZGVcdTZhZDFcdTZhZGZcdTZhYWFc''@;'; put 'put ''dTZhZGFcdTZhZWFcdTZhZmJcdTZiMDVcdTg2MTZcdTZhZmFcdTZiMTJcdTZiMTZcdTliMzFcdTZiMWZcdTZiMzhcdTZiMzdcdTc2ZGNcdTZiMzlcdTk4ZWVcdTZiNDdcdTZiNDNcdTZiNDlcdTZiNTBcdTZiNTlcdTZiNTRcdTZiNWJcdTZiNWZcdTZiNjFcdTZiNzhcdTZiNzlcdTZiN2ZcdTZi''@;'; put 'put ''ODBcdTZiODRcdTZiODNcdTZiOGRcdTZiOThcdTZiOTVcdTZiOWVcdTZiYTRcdTZiYWFcdTZiYWJcdTZiYWZcdTZiYjJcdTZiYjFcdTZiYjNcdTZiYjdcdTZiYmNcdTZiYzZcdTZiY2JcdTZiZDNcdTZiZGZcdTZiZWNcdTZiZWJcdTZiZjNcdTZiZWZcdWZmZmRcdTllYmVcdTZjMDhcdTZjMTNc''@;'; put 'put ''dTZjMTRcdTZjMWJcdTZjMjRcdTZjMjNcdTZjNWVcdTZjNTVcdTZjNjJcdTZjNmFcdTZjODJcdTZjOGRcdTZjOWFcdTZjODFcdTZjOWJcdTZjN2VcdTZjNjhcdTZjNzNcdTZjOTJcdTZjOTBcdTZjYzRcdTZjZjFcdTZjZDNcdTZjYmRcdTZjZDdcdTZjYzVcdTZjZGRcdTZjYWVcdTZjYjFcdTZj''@;'; put 'put ''YmVcdTZjYmFcdTZjZGJcdTZjZWZcdTZjZDlcdTZjZWFcdTZkMWZcdTg4NGRcdTZkMzZcdTZkMmJcdTZkM2RcdTZkMzhcdTZkMTlcdTZkMzVcdTZkMzNcdTZkMTJcdTZkMGNcdTZkNjNcdTZkOTNcdTZkNjRcdTZkNWFcdTZkNzlcdTZkNTlcdTZkOGVcdTZkOTVcdTZmZTRcdTZkODVcdTZkZjlc''@;'; put 'put ''dTZlMTVcdTZlMGFcdTZkYjVcdTZkYzdcdTZkZTZcdTZkYjhcdTZkYzZcdTZkZWNcdTZkZGVcdTZkY2NcdTZkZThcdTZkZDJcdTZkYzVcdTZkZmFcdTZkZDlcdTZkZTRcdTZkZDVcdTZkZWFcdTZkZWVcdTZlMmRcdTZlNmVcdTZlMmVcdTZlMTlcdTZlNzJcdTZlNWZcdTZlM2VcdTZlMjNcdTZl''@;'; put 'put ''NmJcdTZlMmJcdTZlNzZcdTZlNGRcdTZlMWZcdTZlNDNcdTZlM2FcdTZlNGVcdTZlMjRcdTZlZmZcdTZlMWRcdTZlMzhcdTZlODJcdTZlYWFcdTZlOThcdTZlYzlcdTZlYjdcdTZlZDNcdTZlYmRcdTZlYWZcdTZlYzRcdTZlYjJcdTZlZDRcdTZlZDVcdTZlOGZcdTZlYTVcdTZlYzJcdTZlOWZc''@;'; put 'put ''dTZmNDFcdTZmMTFcdTcwNGNcdTZlZWNcdTZlZjhcdTZlZmVcdTZmM2ZcdTZlZjJcdTZmMzFcdTZlZWZcdTZmMzJcdTZlY2NcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1OV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sx''@;'; put 'put ''NTldW3BdXT00MDcwNCtwLGJbNDA3MDQrcF09X1sxNTldW3BdKTtmb3IoX1syMjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmM2VcdTZmMTNcdTZlZjdcdTZmODZcdTZmN2FcdTZmNzhcdTZmODFcdTZmODBcdTZmNmZcdTZmNWJc''@;'; put 'put ''dTZmZjNcdTZmNmRcdTZmODJcdTZmN2NcdTZmNThcdTZmOGVcdTZmOTFcdTZmYzJcdTZmNjZcdTZmYjNcdTZmYTNcdTZmYTFcdTZmYTRcdTZmYjlcdTZmYzZcdTZmYWFcdTZmZGZcdTZmZDVcdTZmZWNcdTZmZDRcdTZmZDhcdTZmZjFcdTZmZWVcdTZmZGJcdTcwMDlcdTcwMGJcdTZmZmFcdTcw''@;'; put 'put ''MTFcdTcwMDFcdTcwMGZcdTZmZmVcdTcwMWJcdTcwMWFcdTZmNzRcdTcwMWRcdTcwMThcdTcwMWZcdTcwMzBcdTcwM2VcdTcwMzJcdTcwNTFcdTcwNjNcdTcwOTlcdTcwOTJcdTcwYWZcdTcwZjFcdTcwYWNcdTcwYjhcdTcwYjNcdTcwYWVcdTcwZGZcdTcwY2JcdTcwZGRcdWZmZmRcdTcwZDlc''@;'; put 'put ''dTcxMDlcdTcwZmRcdTcxMWNcdTcxMTlcdTcxNjVcdTcxNTVcdTcxODhcdTcxNjZcdTcxNjJcdTcxNGNcdTcxNTZcdTcxNmNcdTcxOGZcdTcxZmJcdTcxODRcdTcxOTVcdTcxYThcdTcxYWNcdTcxZDdcdTcxYjlcdTcxYmVcdTcxZDJcdTcxYzlcdTcxZDRcdTcxY2VcdTcxZTBcdTcxZWNcdTcx''@;'; put 'put ''ZTdcdTcxZjVcdTcxZmNcdTcxZjlcdTcxZmZcdTcyMGRcdTcyMTBcdTcyMWJcdTcyMjhcdTcyMmRcdTcyMmNcdTcyMzBcdTcyMzJcdTcyM2JcdTcyM2NcdTcyM2ZcdTcyNDBcdTcyNDZcdTcyNGJcdTcyNThcdTcyNzRcdTcyN2VcdTcyODJcdTcyODFcdTcyODdcdTcyOTJcdTcyOTZcdTcyYTJc''@;'; put 'put ''dTcyYTdcdTcyYjlcdTcyYjJcdTcyYzNcdTcyYzZcdTcyYzRcdTcyY2VcdTcyZDJcdTcyZTJcdTcyZTBcdTcyZTFcdTcyZjlcdTcyZjdcdTUwMGZcdTczMTdcdTczMGFcdTczMWNcdTczMTZcdTczMWRcdTczMzRcdTczMmZcdTczMjlcdTczMjVcdTczM2VcdTczNGVcdTczNGZcdTllZDhcdTcz''@;'; put 'put ''NTdcdTczNmFcdTczNjhcdTczNzBcdTczNzhcdTczNzVcdTczN2JcdTczN2FcdTczYzhcdTczYjNcdTczY2VcdTczYmJcdTczYzBcdTczZTVcdTczZWVcdTczZGVcdTc0YTJcdTc0MDVcdTc0NmZcdTc0MjVcdTczZjhcdTc0MzJcdTc0M2FcdTc0NTVcdTc0M2ZcdTc0NWZcdTc0NTlcdTc0NDFc''@;'; put 'put ''dTc0NWNcdTc0NjlcdTc0NzBcdTc0NjNcdTc0NmFcdTc0NzZcdTc0N2VcdTc0OGJcdTc0OWVcdTc0YTdcdTc0Y2FcdTc0Y2ZcdTc0ZDRcdTczZjFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyNF1bcF0uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKElbX1syMjRdW3BdXT01NzM0NCtwLGJbNTczNDQrcF09X1syMjRdW3BdKTtmb3IoX1syMjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0ZTBcdTc0ZTNcdTc0ZTdcdTc0ZTlcdTc0ZWVcdTc0ZjJcdTc0ZjBcdTc0ZjFc''@;'; put 'put ''dTc0ZjhcdTc0ZjdcdTc1MDRcdTc1MDNcdTc1MDVcdTc1MGNcdTc1MGVcdTc1MGRcdTc1MTVcdTc1MTNcdTc1MWVcdTc1MjZcdTc1MmNcdTc1M2NcdTc1NDRcdTc1NGRcdTc1NGFcdTc1NDlcdTc1NWJcdTc1NDZcdTc1NWFcdTc1NjlcdTc1NjRcdTc1NjdcdTc1NmJcdTc1NmRcdTc1NzhcdTc1''@;'; put 'put ''NzZcdTc1ODZcdTc1ODdcdTc1NzRcdTc1OGFcdTc1ODlcdTc1ODJcdTc1OTRcdTc1OWFcdTc1OWRcdTc1YTVcdTc1YTNcdTc1YzJcdTc1YjNcdTc1YzNcdTc1YjVcdTc1YmRcdTc1YjhcdTc1YmNcdTc1YjFcdTc1Y2RcdTc1Y2FcdTc1ZDJcdTc1ZDlcdTc1ZTNcdTc1ZGVcdTc1ZmVcdTc1ZmZc''@;'; put 'put ''dWZmZmRcdTc1ZmNcdTc2MDFcdTc1ZjBcdTc1ZmFcdTc1ZjJcdTc1ZjNcdTc2MGJcdTc2MGRcdTc2MDlcdTc2MWZcdTc2MjdcdTc2MjBcdTc2MjFcdTc2MjJcdTc2MjRcdTc2MzRcdTc2MzBcdTc2M2JcdTc2NDdcdTc2NDhcdTc2NDZcdTc2NWNcdTc2NThcdTc2NjFcdTc2NjJcdTc2NjhcdTc2''@;'; put 'put ''NjlcdTc2NmFcdTc2NjdcdTc2NmNcdTc2NzBcdTc2NzJcdTc2NzZcdTc2NzhcdTc2N2NcdTc2ODBcdTc2ODNcdTc2ODhcdTc2OGJcdTc2OGVcdTc2OTZcdTc2OTNcdTc2OTlcdTc2OWFcdTc2YjBcdTc2YjRcdTc2YjhcdTc2YjlcdTc2YmFcdTc2YzJcdTc2Y2RcdTc2ZDZcdTc2ZDJcdTc2ZGVc''@;'; put 'put ''dTc2ZTFcdTc2ZTVcdTc2ZTdcdTc2ZWFcdTg2MmZcdTc2ZmJcdTc3MDhcdTc3MDdcdTc3MDRcdTc3MjlcdTc3MjRcdTc3MWVcdTc3MjVcdTc3MjZcdTc3MWJcdTc3MzdcdTc3MzhcdTc3NDdcdTc3NWFcdTc3NjhcdTc3NmJcdTc3NWJcdTc3NjVcdTc3N2ZcdTc3N2VcdTc3NzlcdTc3OGVcdTc3''@;'; put 'put ''OGJcdTc3OTFcdTc3YTBcdTc3OWVcdTc3YjBcdTc3YjZcdTc3YjlcdTc3YmZcdTc3YmNcdTc3YmRcdTc3YmJcdTc3YzdcdTc3Y2RcdTc3ZDdcdTc3ZGFcdTc3ZGNcdTc3ZTNcdTc3ZWVcdTc3ZmNcdTc4MGNcdTc4MTJcdTc5MjZcdTc4MjBcdTc5MmFcdTc4NDVcdTc4OGVcdTc4NzRcdTc4ODZc''@;'; put 'put ''dTc4N2NcdTc4OWFcdTc4OGNcdTc4YTNcdTc4YjVcdTc4YWFcdTc4YWZcdTc4ZDFcdTc4YzZcdTc4Y2JcdTc4ZDRcdTc4YmVcdTc4YmNcdTc4YzVcdTc4Y2FcdTc4ZWNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyNV1b''@;'; put 'put ''cF0uY2hhckNvZGVBdCgwKSYmKElbX1syMjVdW3BdXT01NzYwMCtwLGJbNTc2MDArcF09X1syMjVdW3BdKTtmb3IoX1syMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc4ZTdcdTc4ZGFcdTc4ZmRcdTc4ZjRcdTc5MDdcdTc5MTJc''@;'; put 'put ''dTc5MTFcdTc5MTlcdTc5MmNcdTc5MmJcdTc5NDBcdTc5NjBcdTc5NTdcdTc5NWZcdTc5NWFcdTc5NTVcdTc5NTNcdTc5N2FcdTc5N2ZcdTc5OGFcdTc5OWRcdTc5YTdcdTlmNGJcdTc5YWFcdTc5YWVcdTc5YjNcdTc5YjlcdTc5YmFcdTc5YzlcdTc5ZDVcdTc5ZTdcdTc5ZWNcdTc5ZTFcdTc5''@;'; put 'put ''ZTNcdTdhMDhcdTdhMGRcdTdhMThcdTdhMTlcdTdhMjBcdTdhMWZcdTc5ODBcdTdhMzFcdTdhM2JcdTdhM2VcdTdhMzdcdTdhNDNcdTdhNTdcdTdhNDlcdTdhNjFcdTdhNjJcdTdhNjlcdTlmOWRcdTdhNzBcdTdhNzlcdTdhN2RcdTdhODhcdTdhOTdcdTdhOTVcdTdhOThcdTdhOTZcdTdhYTlc''@;'; put 'put ''dTdhYzhcdTdhYjBcdWZmZmRcdTdhYjZcdTdhYzVcdTdhYzRcdTdhYmZcdTkwODNcdTdhYzdcdTdhY2FcdTdhY2RcdTdhY2ZcdTdhZDVcdTdhZDNcdTdhZDlcdTdhZGFcdTdhZGRcdTdhZTFcdTdhZTJcdTdhZTZcdTdhZWRcdTdhZjBcdTdiMDJcdTdiMGZcdTdiMGFcdTdiMDZcdTdiMzNcdTdi''@;'; put 'put ''MThcdTdiMTlcdTdiMWVcdTdiMzVcdTdiMjhcdTdiMzZcdTdiNTBcdTdiN2FcdTdiMDRcdTdiNGRcdTdiMGJcdTdiNGNcdTdiNDVcdTdiNzVcdTdiNjVcdTdiNzRcdTdiNjdcdTdiNzBcdTdiNzFcdTdiNmNcdTdiNmVcdTdiOWRcdTdiOThcdTdiOWZcdTdiOGRcdTdiOWNcdTdiOWFcdTdiOGJc''@;'; put 'put ''dTdiOTJcdTdiOGZcdTdiNWRcdTdiOTlcdTdiY2JcdTdiYzFcdTdiY2NcdTdiY2ZcdTdiYjRcdTdiYzZcdTdiZGRcdTdiZTlcdTdjMTFcdTdjMTRcdTdiZTZcdTdiZTVcdTdjNjBcdTdjMDBcdTdjMDdcdTdjMTNcdTdiZjNcdTdiZjdcdTdjMTdcdTdjMGRcdTdiZjZcdTdjMjNcdTdjMjdcdTdj''@;'; put 'put ''MmFcdTdjMWZcdTdjMzdcdTdjMmJcdTdjM2RcdTdjNGNcdTdjNDNcdTdjNTRcdTdjNGZcdTdjNDBcdTdjNTBcdTdjNThcdTdjNWZcdTdjNjRcdTdjNTZcdTdjNjVcdTdjNmNcdTdjNzVcdTdjODNcdTdjOTBcdTdjYTRcdTdjYWRcdTdjYTJcdTdjYWJcdTdjYTFcdTdjYThcdTdjYjNcdTdjYjJc''@;'; put 'put ''dTdjYjFcdTdjYWVcdTdjYjlcdTdjYmRcdTdjYzBcdTdjYzVcdTdjYzJcdTdjZDhcdTdjZDJcdTdjZGNcdTdjZTJcdTliM2JcdTdjZWZcdTdjZjJcdTdjZjRcdTdjZjZcdTdjZmFcdTdkMDZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjZdLmxlbmd0aDsrK3ApNjU1''@;'; put 'put ''MzMhPT1fWzIyNl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMjZdW3BdXT01Nzg1NitwLGJbNTc4NTYrcF09X1syMjZdW3BdKTtmb3IoX1syMjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdkMDJcdTdkMWNcdTdkMTVcdTdkMGFc''@;'; put 'put ''dTdkNDVcdTdkNGJcdTdkMmVcdTdkMzJcdTdkM2ZcdTdkMzVcdTdkNDZcdTdkNzNcdTdkNTZcdTdkNGVcdTdkNzJcdTdkNjhcdTdkNmVcdTdkNGZcdTdkNjNcdTdkOTNcdTdkODlcdTdkNWJcdTdkOGZcdTdkN2RcdTdkOWJcdTdkYmFcdTdkYWVcdTdkYTNcdTdkYjVcdTdkYzdcdTdkYmRcdTdk''@;'; put 'put ''YWJcdTdlM2RcdTdkYTJcdTdkYWZcdTdkZGNcdTdkYjhcdTdkOWZcdTdkYjBcdTdkZDhcdTdkZGRcdTdkZTRcdTdkZGVcdTdkZmJcdTdkZjJcdTdkZTFcdTdlMDVcdTdlMGFcdTdlMjNcdTdlMjFcdTdlMTJcdTdlMzFcdTdlMWZcdTdlMDlcdTdlMGJcdTdlMjJcdTdlNDZcdTdlNjZcdTdlM2Jc''@;'; put 'put ''dTdlMzVcdTdlMzlcdTdlNDNcdTdlMzdcdWZmZmRcdTdlMzJcdTdlM2FcdTdlNjdcdTdlNWRcdTdlNTZcdTdlNWVcdTdlNTlcdTdlNWFcdTdlNzlcdTdlNmFcdTdlNjlcdTdlN2NcdTdlN2JcdTdlODNcdTdkZDVcdTdlN2RcdThmYWVcdTdlN2ZcdTdlODhcdTdlODlcdTdlOGNcdTdlOTJcdTdl''@;'; put 'put ''OTBcdTdlOTNcdTdlOTRcdTdlOTZcdTdlOGVcdTdlOWJcdTdlOWNcdTdmMzhcdTdmM2FcdTdmNDVcdTdmNGNcdTdmNGRcdTdmNGVcdTdmNTBcdTdmNTFcdTdmNTVcdTdmNTRcdTdmNThcdTdmNWZcdTdmNjBcdTdmNjhcdTdmNjlcdTdmNjdcdTdmNzhcdTdmODJcdTdmODZcdTdmODNcdTdmODhc''@;'; put 'put ''dTdmODdcdTdmOGNcdTdmOTRcdTdmOWVcdTdmOWRcdTdmOWFcdTdmYTNcdTdmYWZcdTdmYjJcdTdmYjlcdTdmYWVcdTdmYjZcdTdmYjhcdThiNzFcdTdmYzVcdTdmYzZcdTdmY2FcdTdmZDVcdTdmZDRcdTdmZTFcdTdmZTZcdTdmZTlcdTdmZjNcdTdmZjlcdTk4ZGNcdTgwMDZcdTgwMDRcdTgw''@;'; put 'put ''MGJcdTgwMTJcdTgwMThcdTgwMTlcdTgwMWNcdTgwMjFcdTgwMjhcdTgwM2ZcdTgwM2JcdTgwNGFcdTgwNDZcdTgwNTJcdTgwNThcdTgwNWFcdTgwNWZcdTgwNjJcdTgwNjhcdTgwNzNcdTgwNzJcdTgwNzBcdTgwNzZcdTgwNzlcdTgwN2RcdTgwN2ZcdTgwODRcdTgwODZcdTgwODVcdTgwOWJc''@;'; put 'put ''dTgwOTNcdTgwOWFcdTgwYWRcdTUxOTBcdTgwYWNcdTgwZGJcdTgwZTVcdTgwZDlcdTgwZGRcdTgwYzRcdTgwZGFcdTgwZDZcdTgxMDlcdTgwZWZcdTgwZjFcdTgxMWJcdTgxMjlcdTgxMjNcdTgxMmZcdTgxNGJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjddLmxl''@;'; put 'put ''bmd0aDsrK3ApNjU1MzMhPT1fWzIyN11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMjddW3BdXT01ODExMitwLGJbNTgxMTIrcF09X1syMjddW3BdKTtmb3IoX1syMjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2OGJcdTgxNDZc''@;'; put 'put ''dTgxM2VcdTgxNTNcdTgxNTFcdTgwZmNcdTgxNzFcdTgxNmVcdTgxNjVcdTgxNjZcdTgxNzRcdTgxODNcdTgxODhcdTgxOGFcdTgxODBcdTgxODJcdTgxYTBcdTgxOTVcdTgxYTRcdTgxYTNcdTgxNWZcdTgxOTNcdTgxYTlcdTgxYjBcdTgxYjVcdTgxYmVcdTgxYjhcdTgxYmRcdTgxYzBcdTgx''@;'; put 'put ''YzJcdTgxYmFcdTgxYzlcdTgxY2RcdTgxZDFcdTgxZDlcdTgxZDhcdTgxYzhcdTgxZGFcdTgxZGZcdTgxZTBcdTgxZTdcdTgxZmFcdTgxZmJcdTgxZmVcdTgyMDFcdTgyMDJcdTgyMDVcdTgyMDdcdTgyMGFcdTgyMGRcdTgyMTBcdTgyMTZcdTgyMjlcdTgyMmJcdTgyMzhcdTgyMzNcdTgyNDBc''@;'; put 'put ''dTgyNTlcdTgyNThcdTgyNWRcdTgyNWFcdTgyNWZcdTgyNjRcdWZmZmRcdTgyNjJcdTgyNjhcdTgyNmFcdTgyNmJcdTgyMmVcdTgyNzFcdTgyNzdcdTgyNzhcdTgyN2VcdTgyOGRcdTgyOTJcdTgyYWJcdTgyOWZcdTgyYmJcdTgyYWNcdTgyZTFcdTgyZTNcdTgyZGZcdTgyZDJcdTgyZjRcdTgy''@;'; put 'put ''ZjNcdTgyZmFcdTgzOTNcdTgzMDNcdTgyZmJcdTgyZjlcdTgyZGVcdTgzMDZcdTgyZGNcdTgzMDlcdTgyZDlcdTgzMzVcdTgzMzRcdTgzMTZcdTgzMzJcdTgzMzFcdTgzNDBcdTgzMzlcdTgzNTBcdTgzNDVcdTgzMmZcdTgzMmJcdTgzMTdcdTgzMThcdTgzODVcdTgzOWFcdTgzYWFcdTgzOWZc''@;'; put 'put ''dTgzYTJcdTgzOTZcdTgzMjNcdTgzOGVcdTgzODdcdTgzOGFcdTgzN2NcdTgzYjVcdTgzNzNcdTgzNzVcdTgzYTBcdTgzODlcdTgzYThcdTgzZjRcdTg0MTNcdTgzZWJcdTgzY2VcdTgzZmRcdTg0MDNcdTgzZDhcdTg0MGJcdTgzYzFcdTgzZjdcdTg0MDdcdTgzZTBcdTgzZjJcdTg0MGRcdTg0''@;'; put 'put ''MjJcdTg0MjBcdTgzYmRcdTg0MzhcdTg1MDZcdTgzZmJcdTg0NmRcdTg0MmFcdTg0M2NcdTg1NWFcdTg0ODRcdTg0NzdcdTg0NmJcdTg0YWRcdTg0NmVcdTg0ODJcdTg0NjlcdTg0NDZcdTg0MmNcdTg0NmZcdTg0NzlcdTg0MzVcdTg0Y2FcdTg0NjJcdTg0YjlcdTg0YmZcdTg0OWZcdTg0ZDlc''@;'; put 'put ''dTg0Y2RcdTg0YmJcdTg0ZGFcdTg0ZDBcdTg0YzFcdTg0YzZcdTg0ZDZcdTg0YTFcdTg1MjFcdTg0ZmZcdTg0ZjRcdTg1MTdcdTg1MThcdTg1MmNcdTg1MWZcdTg1MTVcdTg1MTRcdTg0ZmNcdTg1NDBcdTg1NjNcdTg1NThcdTg1NDhcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7''@;'; put 'put ''cCE9X1syMjhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyOF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMjhdW3BdXT01ODM2OCtwLGJbNTgzNjgrcF09X1syMjhdW3BdKTtmb3IoX1syMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTg1NDFcdTg2MDJcdTg1NGJcdTg1NTVcdTg1ODBcdTg1YTRcdTg1ODhcdTg1OTFcdTg1OGFcdTg1YThcdTg1NmRcdTg1OTRcdTg1OWJcdTg1ZWFcdTg1ODdcdTg1OWNcdTg1NzdcdTg1N2VcdTg1OTBcdTg1YzlcdTg1YmFcdTg1Y2ZcdTg1YjlcdTg1ZDBcdTg1ZDVcdTg1ZGRcdTg1ZTVcdTg1''@;'; put 'put ''ZGNcdTg1ZjlcdTg2MGFcdTg2MTNcdTg2MGJcdTg1ZmVcdTg1ZmFcdTg2MDZcdTg2MjJcdTg2MWFcdTg2MzBcdTg2M2ZcdTg2NGRcdTRlNTVcdTg2NTRcdTg2NWZcdTg2NjdcdTg2NzFcdTg2OTNcdTg2YTNcdTg2YTlcdTg2YWFcdTg2OGJcdTg2OGNcdTg2YjZcdTg2YWZcdTg2YzRcdTg2YzZc''@;'; put 'put ''dTg2YjBcdTg2YzlcdTg4MjNcdTg2YWJcdTg2ZDRcdTg2ZGVcdTg2ZTlcdTg2ZWNcdWZmZmRcdTg2ZGZcdTg2ZGJcdTg2ZWZcdTg3MTJcdTg3MDZcdTg3MDhcdTg3MDBcdTg3MDNcdTg2ZmJcdTg3MTFcdTg3MDlcdTg3MGRcdTg2ZjlcdTg3MGFcdTg3MzRcdTg3M2ZcdTg3MzdcdTg3M2JcdTg3''@;'; put 'put ''MjVcdTg3MjlcdTg3MWFcdTg3NjBcdTg3NWZcdTg3NzhcdTg3NGNcdTg3NGVcdTg3NzRcdTg3NTdcdTg3NjhcdTg3NmVcdTg3NTlcdTg3NTNcdTg3NjNcdTg3NmFcdTg4MDVcdTg3YTJcdTg3OWZcdTg3ODJcdTg3YWZcdTg3Y2JcdTg3YmRcdTg3YzBcdTg3ZDBcdTk2ZDZcdTg3YWJcdTg3YzRc''@;'; put 'put ''dTg3YjNcdTg3YzdcdTg3YzZcdTg3YmJcdTg3ZWZcdTg3ZjJcdTg3ZTBcdTg4MGZcdTg4MGRcdTg3ZmVcdTg3ZjZcdTg3ZjdcdTg4MGVcdTg3ZDJcdTg4MTFcdTg4MTZcdTg4MTVcdTg4MjJcdTg4MjFcdTg4MzFcdTg4MzZcdTg4MzlcdTg4MjdcdTg4M2JcdTg4NDRcdTg4NDJcdTg4NTJcdTg4''@;'; put 'put ''NTlcdTg4NWVcdTg4NjJcdTg4NmJcdTg4ODFcdTg4N2VcdTg4OWVcdTg4NzVcdTg4N2RcdTg4YjVcdTg4NzJcdTg4ODJcdTg4OTdcdTg4OTJcdTg4YWVcdTg4OTlcdTg4YTJcdTg4OGRcdTg4YTRcdTg4YjBcdTg4YmZcdTg4YjFcdTg4YzNcdTg4YzRcdTg4ZDRcdTg4ZDhcdTg4ZDlcdTg4ZGRc''@;'; put 'put ''dTg4ZjlcdTg5MDJcdTg4ZmNcdTg4ZjRcdTg4ZThcdTg4ZjJcdTg5MDRcdTg5MGNcdTg5MGFcdTg5MTNcdTg5NDNcdTg5MWVcdTg5MjVcdTg5MmFcdTg5MmJcdTg5NDFcdTg5NDRcdTg5M2JcdTg5MzZcdTg5MzhcdTg5NGNcdTg5MWRcdTg5NjBcdTg5NWVcdWZmZmRcdWZmZmRcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxwPTA7cCE9X1syMjldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyOV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMjldW3BdXT01ODYyNCtwLGJbNTg2MjQrcF09X1syMjldW3BdKTtmb3IoX1syMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTg5NjZcdTg5NjRcdTg5NmRcdTg5NmFcdTg5NmZcdTg5NzRcdTg5NzdcdTg5N2VcdTg5ODNcdTg5ODhcdTg5OGFcdTg5OTNcdTg5OThcdTg5YTFcdTg5YTlcdTg5YTZcdTg5YWNcdTg5YWZcdTg5YjJcdTg5YmFcdTg5YmRcdTg5YmZcdTg5YzBcdTg5ZGFcdTg5ZGNcdTg5''@;'; put 'put ''ZGRcdTg5ZTdcdTg5ZjRcdTg5ZjhcdThhMDNcdThhMTZcdThhMTBcdThhMGNcdThhMWJcdThhMWRcdThhMjVcdThhMzZcdThhNDFcdThhNWJcdThhNTJcdThhNDZcdThhNDhcdThhN2NcdThhNmRcdThhNmNcdThhNjJcdThhODVcdThhODJcdThhODRcdThhYThcdThhYTFcdThhOTFcdThhYTVc''@;'; put 'put ''dThhYTZcdThhOWFcdThhYTNcdThhYzRcdThhY2RcdThhYzJcdThhZGFcdThhZWJcdThhZjNcdThhZTdcdWZmZmRcdThhZTRcdThhZjFcdThiMTRcdThhZTBcdThhZTJcdThhZjdcdThhZGVcdThhZGJcdThiMGNcdThiMDdcdThiMWFcdThhZTFcdThiMTZcdThiMTBcdThiMTdcdThiMjBcdThi''@;'; put 'put ''MzNcdTk3YWJcdThiMjZcdThiMmJcdThiM2VcdThiMjhcdThiNDFcdThiNGNcdThiNGZcdThiNGVcdThiNDlcdThiNTZcdThiNWJcdThiNWFcdThiNmJcdThiNWZcdThiNmNcdThiNmZcdThiNzRcdThiN2RcdThiODBcdThiOGNcdThiOGVcdThiOTJcdThiOTNcdThiOTZcdThiOTlcdThiOWFc''@;'; put 'put ''dThjM2FcdThjNDFcdThjM2ZcdThjNDhcdThjNGNcdThjNGVcdThjNTBcdThjNTVcdThjNjJcdThjNmNcdThjNzhcdThjN2FcdThjODJcdThjODlcdThjODVcdThjOGFcdThjOGRcdThjOGVcdThjOTRcdThjN2NcdThjOThcdTYyMWRcdThjYWRcdThjYWFcdThjYmRcdThjYjJcdThjYjNcdThj''@;'; put 'put ''YWVcdThjYjZcdThjYzhcdThjYzFcdThjZTRcdThjZTNcdThjZGFcdThjZmRcdThjZmFcdThjZmJcdThkMDRcdThkMDVcdThkMGFcdThkMDdcdThkMGZcdThkMGRcdThkMTBcdTlmNGVcdThkMTNcdThjY2RcdThkMTRcdThkMTZcdThkNjdcdThkNmRcdThkNzFcdThkNzNcdThkODFcdThkOTlc''@;'; put 'put ''dThkYzJcdThkYmVcdThkYmFcdThkY2ZcdThkZGFcdThkZDZcdThkY2NcdThkZGJcdThkY2JcdThkZWFcdThkZWJcdThkZGZcdThkZTNcdThkZmNcdThlMDhcdThlMDlcdThkZmZcdThlMWRcdThlMWVcdThlMTBcdThlMWZcdThlNDJcdThlMzVcdThlMzBcdThlMzRcdThlNGFcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzMF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMzBdW3BdXT01ODg4MCtwLGJbNTg4ODArcF09X1syMzBdW3BdKTtmb3IoX1syMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlNDdcdThlNDlcdThlNGNcdThlNTBcdThlNDhcdThlNTlcdThlNjRcdThlNjBcdThlMmFcdThlNjNcdThlNTVcdThlNzZcdThlNzJcdThlN2NcdThlODFcdThlODdcdThlODVcdThlODRcdThlOGJcdThlOGFcdThlOTNcdThlOTFcdThlOTRcdThl''@;'; put 'put ''OTlcdThlYWFcdThlYTFcdThlYWNcdThlYjBcdThlYzZcdThlYjFcdThlYmVcdThlYzVcdThlYzhcdThlY2JcdThlZGJcdThlZTNcdThlZmNcdThlZmJcdThlZWJcdThlZmVcdThmMGFcdThmMDVcdThmMTVcdThmMTJcdThmMTlcdThmMTNcdThmMWNcdThmMWZcdThmMWJcdThmMGNcdThmMjZc''@;'; put 'put ''dThmMzNcdThmM2JcdThmMzlcdThmNDVcdThmNDJcdThmM2VcdThmNGNcdThmNDlcdThmNDZcdThmNGVcdThmNTdcdThmNWNcdWZmZmRcdThmNjJcdThmNjNcdThmNjRcdThmOWNcdThmOWZcdThmYTNcdThmYWRcdThmYWZcdThmYjdcdThmZGFcdThmZTVcdThmZTJcdThmZWFcdThmZWZcdTkw''@;'; put 'put ''ODdcdThmZjRcdTkwMDVcdThmZjlcdThmZmFcdTkwMTFcdTkwMTVcdTkwMjFcdTkwMGRcdTkwMWVcdTkwMTZcdTkwMGJcdTkwMjdcdTkwMzZcdTkwMzVcdTkwMzlcdThmZjhcdTkwNGZcdTkwNTBcdTkwNTFcdTkwNTJcdTkwMGVcdTkwNDlcdTkwM2VcdTkwNTZcdTkwNThcdTkwNWVcdTkwNjhc''@;'; put 'put ''dTkwNmZcdTkwNzZcdTk2YThcdTkwNzJcdTkwODJcdTkwN2RcdTkwODFcdTkwODBcdTkwOGFcdTkwODlcdTkwOGZcdTkwYThcdTkwYWZcdTkwYjFcdTkwYjVcdTkwZTJcdTkwZTRcdTYyNDhcdTkwZGJcdTkxMDJcdTkxMTJcdTkxMTlcdTkxMzJcdTkxMzBcdTkxNGFcdTkxNTZcdTkxNThcdTkx''@;'; put 'put ''NjNcdTkxNjVcdTkxNjlcdTkxNzNcdTkxNzJcdTkxOGJcdTkxODlcdTkxODJcdTkxYTJcdTkxYWJcdTkxYWZcdTkxYWFcdTkxYjVcdTkxYjRcdTkxYmFcdTkxYzBcdTkxYzFcdTkxYzlcdTkxY2JcdTkxZDBcdTkxZDZcdTkxZGZcdTkxZTFcdTkxZGJcdTkxZmNcdTkxZjVcdTkxZjZcdTkyMWVc''@;'; put 'put ''dTkxZmZcdTkyMTRcdTkyMmNcdTkyMTVcdTkyMTFcdTkyNWVcdTkyNTdcdTkyNDVcdTkyNDlcdTkyNjRcdTkyNDhcdTkyOTVcdTkyM2ZcdTkyNGJcdTkyNTBcdTkyOWNcdTkyOTZcdTkyOTNcdTkyOWJcdTkyNWFcdTkyY2ZcdTkyYjlcdTkyYjdcdTkyZTlcdTkzMGZcdTkyZmFcdTkzNDRcdTkz''@;'; put 'put ''MmVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzMV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMzFdW3BdXT01OTEzNitwLGJbNTkxMzYrcF09X1syMzFdW3BdKTtmb3IoX1syMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzMTlcdTkzMjJcdTkzMWFcdTkzMjNcdTkzM2FcdTkzMzVcdTkzM2JcdTkzNWNcdTkzNjBcdTkzN2NcdTkzNmVcdTkzNTZcdTkzYjBcdTkzYWNcdTkzYWRcdTkzOTRcdTkzYjlcdTkzZDZcdTkzZDdcdTkzZThcdTkzZTVcdTkz''@;'; put 'put ''ZDhcdTkzYzNcdTkzZGRcdTkzZDBcdTkzYzhcdTkzZTRcdTk0MWFcdTk0MTRcdTk0MTNcdTk0MDNcdTk0MDdcdTk0MTBcdTk0MzZcdTk0MmJcdTk0MzVcdTk0MjFcdTk0M2FcdTk0NDFcdTk0NTJcdTk0NDRcdTk0NWJcdTk0NjBcdTk0NjJcdTk0NWVcdTk0NmFcdTkyMjlcdTk0NzBcdTk0NzVc''@;'; put 'put ''dTk0NzdcdTk0N2RcdTk0NWFcdTk0N2NcdTk0N2VcdTk0ODFcdTk0N2ZcdTk1ODJcdTk1ODdcdTk1OGFcdTk1OTRcdTk1OTZcdTk1OThcdTk1OTlcdWZmZmRcdTk1YTBcdTk1YThcdTk1YTdcdTk1YWRcdTk1YmNcdTk1YmJcdTk1YjlcdTk1YmVcdTk1Y2FcdTZmZjZcdTk1YzNcdTk1Y2RcdTk1''@;'; put 'put ''Y2NcdTk1ZDVcdTk1ZDRcdTk1ZDZcdTk1ZGNcdTk1ZTFcdTk1ZTVcdTk1ZTJcdTk2MjFcdTk2MjhcdTk2MmVcdTk2MmZcdTk2NDJcdTk2NGNcdTk2NGZcdTk2NGJcdTk2NzdcdTk2NWNcdTk2NWVcdTk2NWRcdTk2NWZcdTk2NjZcdTk2NzJcdTk2NmNcdTk2OGRcdTk2OThcdTk2OTVcdTk2OTdc''@;'; put 'put ''dTk2YWFcdTk2YTdcdTk2YjFcdTk2YjJcdTk2YjBcdTk2YjRcdTk2YjZcdTk2YjhcdTk2YjlcdTk2Y2VcdTk2Y2JcdTk2YzlcdTk2Y2RcdTg5NGRcdTk2ZGNcdTk3MGRcdTk2ZDVcdTk2ZjlcdTk3MDRcdTk3MDZcdTk3MDhcdTk3MTNcdTk3MGVcdTk3MTFcdTk3MGZcdTk3MTZcdTk3MTlcdTk3''@;'; put 'put ''MjRcdTk3MmFcdTk3MzBcdTk3MzlcdTk3M2RcdTk3M2VcdTk3NDRcdTk3NDZcdTk3NDhcdTk3NDJcdTk3NDlcdTk3NWNcdTk3NjBcdTk3NjRcdTk3NjZcdTk3NjhcdTUyZDJcdTk3NmJcdTk3NzFcdTk3NzlcdTk3ODVcdTk3N2NcdTk3ODFcdTk3N2FcdTk3ODZcdTk3OGJcdTk3OGZcdTk3OTBc''@;'; put 'put ''dTk3OWNcdTk3YThcdTk3YTZcdTk3YTNcdTk3YjNcdTk3YjRcdTk3YzNcdTk3YzZcdTk3YzhcdTk3Y2JcdTk3ZGNcdTk3ZWRcdTlmNGZcdTk3ZjJcdTdhZGZcdTk3ZjZcdTk3ZjVcdTk4MGZcdTk4MGNcdTk4MzhcdTk4MjRcdTk4MjFcdTk4MzdcdTk4M2RcdTk4NDZcdTk4NGZcdTk4NGJcdTk4''@;'; put 'put ''NmJcdTk4NmZcdTk4NzBcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzMl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMzJdW3BdXT01OTM5MitwLGJbNTkzOTIrcF09X1syMzJdW3BdKTtmb3IoX1syMzNdPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk4NzFcdTk4NzRcdTk4NzNcdTk4YWFcdTk4YWZcdTk4YjFcdTk4YjZcdTk4YzRcdTk4YzNcdTk4YzZcdTk4ZTlcdTk4ZWJcdTk5MDNcdTk5MDlcdTk5MTJcdTk5MTRcdTk5MThcdTk5MjFcdTk5MWRcdTk5''@;'; put 'put ''MWVcdTk5MjRcdTk5MjBcdTk5MmNcdTk5MmVcdTk5M2RcdTk5M2VcdTk5NDJcdTk5NDlcdTk5NDVcdTk5NTBcdTk5NGJcdTk5NTFcdTk5NTJcdTk5NGNcdTk5NTVcdTk5OTdcdTk5OThcdTk5YTVcdTk5YWRcdTk5YWVcdTk5YmNcdTk5ZGZcdTk5ZGJcdTk5ZGRcdTk5ZDhcdTk5ZDFcdTk5ZWRc''@;'; put 'put ''dTk5ZWVcdTk5ZjFcdTk5ZjJcdTk5ZmJcdTk5ZjhcdTlhMDFcdTlhMGZcdTlhMDVcdTk5ZTJcdTlhMTlcdTlhMmJcdTlhMzdcdTlhNDVcdTlhNDJcdTlhNDBcdTlhNDNcdWZmZmRcdTlhM2VcdTlhNTVcdTlhNGRcdTlhNWJcdTlhNTdcdTlhNWZcdTlhNjJcdTlhNjVcdTlhNjRcdTlhNjlcdTlh''@;'; put 'put ''NmJcdTlhNmFcdTlhYWRcdTlhYjBcdTlhYmNcdTlhYzBcdTlhY2ZcdTlhZDFcdTlhZDNcdTlhZDRcdTlhZGVcdTlhZGZcdTlhZTJcdTlhZTNcdTlhZTZcdTlhZWZcdTlhZWJcdTlhZWVcdTlhZjRcdTlhZjFcdTlhZjdcdTlhZmJcdTliMDZcdTliMThcdTliMWFcdTliMWZcdTliMjJcdTliMjNc''@;'; put 'put ''dTliMjVcdTliMjdcdTliMjhcdTliMjlcdTliMmFcdTliMmVcdTliMmZcdTliMzJcdTliNDRcdTliNDNcdTliNGZcdTliNGRcdTliNGVcdTliNTFcdTliNThcdTliNzRcdTliOTNcdTliODNcdTliOTFcdTliOTZcdTliOTdcdTliOWZcdTliYTBcdTliYThcdTliYjRcdTliYzBcdTliY2FcdTli''@;'; put 'put ''YjlcdTliYzZcdTliY2ZcdTliZDFcdTliZDJcdTliZTNcdTliZTJcdTliZTRcdTliZDRcdTliZTFcdTljM2FcdTliZjJcdTliZjFcdTliZjBcdTljMTVcdTljMTRcdTljMDlcdTljMTNcdTljMGNcdTljMDZcdTljMDhcdTljMTJcdTljMGFcdTljMDRcdTljMmVcdTljMWJcdTljMjVcdTljMjRc''@;'; put 'put ''dTljMjFcdTljMzBcdTljNDdcdTljMzJcdTljNDZcdTljM2VcdTljNWFcdTljNjBcdTljNjdcdTljNzZcdTljNzhcdTljZTdcdTljZWNcdTljZjBcdTlkMDlcdTlkMDhcdTljZWJcdTlkMDNcdTlkMDZcdTlkMmFcdTlkMjZcdTlkYWZcdTlkMjNcdTlkMWZcdTlkNDRcdTlkMTVcdTlkMTJcdTlk''@;'; put 'put ''NDFcdTlkM2ZcdTlkM2VcdTlkNDZcdTlkNDhcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzM11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMzNdW3BdXT01OTY0OCtwLGJbNTk2NDgrcF09X1syMzNdW3BdKTtmb3IoX1sy''@;'; put 'put ''MzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlkNWRcdTlkNWVcdTlkNjRcdTlkNTFcdTlkNTBcdTlkNTlcdTlkNzJcdTlkODlcdTlkODdcdTlkYWJcdTlkNmZcdTlkN2FcdTlkOWFcdTlkYTRcdTlkYTlcdTlkYjJcdTlkYzRcdTlk''@;'; put 'put ''YzFcdTlkYmJcdTlkYjhcdTlkYmFcdTlkYzZcdTlkY2ZcdTlkYzJcdTlkZDlcdTlkZDNcdTlkZjhcdTlkZTZcdTlkZWRcdTlkZWZcdTlkZmRcdTllMWFcdTllMWJcdTllMWVcdTllNzVcdTllNzlcdTllN2RcdTllODFcdTllODhcdTllOGJcdTllOGNcdTllOTJcdTllOTVcdTllOTFcdTllOWRc''@;'; put 'put ''dTllYTVcdTllYTlcdTllYjhcdTllYWFcdTllYWRcdTk3NjFcdTllY2NcdTllY2VcdTllY2ZcdTllZDBcdTllZDRcdTllZGNcdTllZGVcdTllZGRcdTllZTBcdTllZTVcdTllZThcdTllZWZcdWZmZmRcdTllZjRcdTllZjZcdTllZjdcdTllZjlcdTllZmJcdTllZmNcdTllZmRcdTlmMDdcdTlm''@;'; put 'put ''MDhcdTc2YjdcdTlmMTVcdTlmMjFcdTlmMmNcdTlmM2VcdTlmNGFcdTlmNTJcdTlmNTRcdTlmNjNcdTlmNWZcdTlmNjBcdTlmNjFcdTlmNjZcdTlmNjdcdTlmNmNcdTlmNmFcdTlmNzdcdTlmNzJcdTlmNzZcdTlmOTVcdTlmOWNcdTlmYTBcdTU4MmZcdTY5YzdcdTkwNTlcdTc0NjRcdTUxZGNc''@;'; put 'put ''dTcxOTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzNF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMzRdW3BdXT01OTkwNCtwLGJbNTk5MDQrcF09X1syMzRd''@;'; put 'put ''W3BdKTtmb3IoX1syMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlOGFcdTg5MWNcdTkzNDhcdTkyODhcdTg0ZGNcdTRmYzlcdTcwYmJcdTY2MzFcdTY4YzhcdTkyZjlcdTY2ZmJcdTVmNDVcdTRlMjhcdTRlZTFcdTRlZmNcdTRm''@;'; put 'put ''MDBcdTRmMDNcdTRmMzlcdTRmNTZcdTRmOTJcdTRmOGFcdTRmOWFcdTRmOTRcdTRmY2RcdTUwNDBcdTUwMjJcdTRmZmZcdTUwMWVcdTUwNDZcdTUwNzBcdTUwNDJcdTUwOTRcdTUwZjRcdTUwZDhcdTUxNGFcdTUxNjRcdTUxOWRcdTUxYmVcdTUxZWNcdTUyMTVcdTUyOWNcdTUyYTZcdTUyYzBc''@;'; put 'put ''dTUyZGJcdTUzMDBcdTUzMDdcdTUzMjRcdTUzNzJcdTUzOTNcdTUzYjJcdTUzZGRcdWZhMGVcdTU0OWNcdTU0OGFcdTU0YTlcdTU0ZmZcdTU1ODZcdTU3NTlcdTU3NjVcdTU3YWNcdTU3YzhcdTU3YzdcdWZhMGZcdWZmZmRcdWZhMTBcdTU4OWVcdTU4YjJcdTU5MGJcdTU5NTNcdTU5NWJcdTU5''@;'; put 'put ''NWRcdTU5NjNcdTU5YTRcdTU5YmFcdTViNTZcdTViYzBcdTc1MmZcdTViZDhcdTViZWNcdTVjMWVcdTVjYTZcdTVjYmFcdTVjZjVcdTVkMjdcdTVkNTNcdWZhMTFcdTVkNDJcdTVkNmRcdTVkYjhcdTVkYjlcdTVkZDBcdTVmMjFcdTVmMzRcdTVmNjdcdTVmYjdcdTVmZGVcdTYwNWRcdTYwODVc''@;'; put 'put ''dTYwOGFcdTYwZGVcdTYwZDVcdTYxMjBcdTYwZjJcdTYxMTFcdTYxMzdcdTYxMzBcdTYxOThcdTYyMTNcdTYyYTZcdTYzZjVcdTY0NjBcdTY0OWRcdTY0Y2VcdTY1NGVcdTY2MDBcdTY2MTVcdTY2M2JcdTY2MDlcdTY2MmVcdTY2MWVcdTY2MjRcdTY2NjVcdTY2NTdcdTY2NTlcdWZhMTJcdTY2''@;'; put 'put ''NzNcdTY2OTlcdTY2YTBcdTY2YjJcdTY2YmZcdTY2ZmFcdTY3MGVcdWY5MjlcdTY3NjZcdTY3YmJcdTY4NTJcdTY3YzBcdTY4MDFcdTY4NDRcdTY4Y2ZcdWZhMTNcdTY5NjhcdWZhMTRcdTY5OThcdTY5ZTJcdTZhMzBcdTZhNmJcdTZhNDZcdTZhNzNcdTZhN2VcdTZhZTJcdTZhZTRcdTZiZDZc''@;'; put 'put ''dTZjM2ZcdTZjNWNcdTZjODZcdTZjNmZcdTZjZGFcdTZkMDRcdTZkODdcdTZkNmZcdTZkOTZcdTZkYWNcdTZkY2ZcdTZkZjhcdTZkZjJcdTZkZmNcdTZlMzlcdTZlNWNcdTZlMjdcdTZlM2NcdTZlYmZcdTZmODhcdTZmYjVcdTZmZjVcdTcwMDVcdTcwMDdcdTcwMjhcdTcwODVcdTcwYWJcdTcx''@;'; put 'put ''MGZcdTcxMDRcdTcxNWNcdTcxNDZcdTcxNDdcdWZhMTVcdTcxYzFcdTcxZmVcdTcyYjFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzN11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMzddW3BdXT02MDY3MitwLGJbNjA2''@;'; put 'put ''NzIrcF09X1syMzddW3BdKTtmb3IoX1syMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcyYmVcdTczMjRcdWZhMTZcdTczNzdcdTczYmRcdTczYzlcdTczZDZcdTczZTNcdTczZDJcdTc0MDdcdTczZjVcdTc0MjZcdTc0MmFcdTc0''@;'; put 'put ''MjlcdTc0MmVcdTc0NjJcdTc0ODlcdTc0OWZcdTc1MDFcdTc1NmZcdTc2ODJcdTc2OWNcdTc2OWVcdTc2OWJcdTc2YTZcdWZhMTdcdTc3NDZcdTUyYWZcdTc4MjFcdTc4NGVcdTc4NjRcdTc4N2FcdTc5MzBcdWZhMThcdWZhMTlcdWZhMWFcdTc5OTRcdWZhMWJcdTc5OWJcdTdhZDFcdTdhZTdc''@;'; put 'put ''dWZhMWNcdTdhZWJcdTdiOWVcdWZhMWRcdTdkNDhcdTdkNWNcdTdkYjdcdTdkYTBcdTdkZDZcdTdlNTJcdTdmNDdcdTdmYTFcdWZhMWVcdTgzMDFcdTgzNjJcdTgzN2ZcdTgzYzdcdTgzZjZcdTg0NDhcdTg0YjRcdTg1NTNcdTg1NTlcdWZmZmRcdTg1NmJcdWZhMWZcdTg1YjBcdWZhMjBcdWZh''@;'; put 'put ''MjFcdTg4MDdcdTg4ZjVcdThhMTJcdThhMzdcdThhNzlcdThhYTdcdThhYmVcdThhZGZcdWZhMjJcdThhZjZcdThiNTNcdThiN2ZcdThjZjBcdThjZjRcdThkMTJcdThkNzZcdWZhMjNcdThlY2ZcdWZhMjRcdWZhMjVcdTkwNjdcdTkwZGVcdWZhMjZcdTkxMTVcdTkxMjdcdTkxZGFcdTkxZDdc''@;'; put 'put ''dTkxZGVcdTkxZWRcdTkxZWVcdTkxZTRcdTkxZTVcdTkyMDZcdTkyMTBcdTkyMGFcdTkyM2FcdTkyNDBcdTkyM2NcdTkyNGVcdTkyNTlcdTkyNTFcdTkyMzlcdTkyNjdcdTkyYTdcdTkyNzdcdTkyNzhcdTkyZTdcdTkyZDdcdTkyZDlcdTkyZDBcdWZhMjdcdTkyZDVcdTkyZTBcdTkyZDNcdTkz''@;'; put 'put ''MjVcdTkzMjFcdTkyZmJcdWZhMjhcdTkzMWVcdTkyZmZcdTkzMWRcdTkzMDJcdTkzNzBcdTkzNTdcdTkzYTRcdTkzYzZcdTkzZGVcdTkzZjhcdTk0MzFcdTk0NDVcdTk0NDhcdTk1OTJcdWY5ZGNcdWZhMjlcdTk2OWRcdTk2YWZcdTk3MzNcdTk3M2JcdTk3NDNcdTk3NGRcdTk3NGZcdTk3NTFc''@;'; put 'put ''dTk3NTVcdTk4NTdcdTk4NjVcdWZhMmFcdWZhMmJcdTk5MjdcdWZhMmNcdTk5OWVcdTlhNGVcdTlhZDlcdTlhZGNcdTliNzVcdTliNzJcdTliOGZcdTliYjFcdTliYmJcdTljMDBcdTlkNzBcdTlkNmJcdWZhMmRcdTllMTlcdTllZDFcdWZmZmRcdWZmZmRcdTIxNzBcdTIxNzFcdTIxNzJcdTIx''@;'; put 'put ''NzNcdTIxNzRcdTIxNzVcdTIxNzZcdTIxNzdcdTIxNzhcdTIxNzlcdWZmZTJcdWZmZTRcdWZmMDdcdWZmMDJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzOF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMzhdW3BdXT02''@;'; put 'put ''MDkyOCtwLGJbNjA5MjgrcF09X1syMzhdW3BdKTtmb3IoX1syNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIxNzBcdTIxNzFcdTIxNzJcdTIxNzNcdTIxNzRcdTIxNzVcdTIxNzZcdTIxNzdcdTIxNzhcdTIxNzlcdTIxNjBcdTIx''@;'; put 'put ''NjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdWZmZTJcdWZmZTRcdWZmMDdcdWZmMDJcdTMyMzFcdTIxMTZcdTIxMjFcdTIyMzVcdTdlOGFcdTg5MWNcdTkzNDhcdTkyODhcdTg0ZGNcdTRmYzlcdTcwYmJcdTY2MzFcdTY4YzhcdTkyZjlcdTY2ZmJc''@;'; put 'put ''dTVmNDVcdTRlMjhcdTRlZTFcdTRlZmNcdTRmMDBcdTRmMDNcdTRmMzlcdTRmNTZcdTRmOTJcdTRmOGFcdTRmOWFcdTRmOTRcdTRmY2RcdTUwNDBcdTUwMjJcdTRmZmZcdTUwMWVcdTUwNDZcdTUwNzBcdTUwNDJcdTUwOTRcdTUwZjRcdTUwZDhcdTUxNGFcdWZmZmRcdTUxNjRcdTUxOWRcdTUx''@;'; put 'put ''YmVcdTUxZWNcdTUyMTVcdTUyOWNcdTUyYTZcdTUyYzBcdTUyZGJcdTUzMDBcdTUzMDdcdTUzMjRcdTUzNzJcdTUzOTNcdTUzYjJcdTUzZGRcdWZhMGVcdTU0OWNcdTU0OGFcdTU0YTlcdTU0ZmZcdTU1ODZcdTU3NTlcdTU3NjVcdTU3YWNcdTU3YzhcdTU3YzdcdWZhMGZcdWZhMTBcdTU4OWVc''@;'; put 'put ''dTU4YjJcdTU5MGJcdTU5NTNcdTU5NWJcdTU5NWRcdTU5NjNcdTU5YTRcdTU5YmFcdTViNTZcdTViYzBcdTc1MmZcdTViZDhcdTViZWNcdTVjMWVcdTVjYTZcdTVjYmFcdTVjZjVcdTVkMjdcdTVkNTNcdWZhMTFcdTVkNDJcdTVkNmRcdTVkYjhcdTVkYjlcdTVkZDBcdTVmMjFcdTVmMzRcdTVm''@;'; put 'put ''NjdcdTVmYjdcdTVmZGVcdTYwNWRcdTYwODVcdTYwOGFcdTYwZGVcdTYwZDVcdTYxMjBcdTYwZjJcdTYxMTFcdTYxMzdcdTYxMzBcdTYxOThcdTYyMTNcdTYyYTZcdTYzZjVcdTY0NjBcdTY0OWRcdTY0Y2VcdTY1NGVcdTY2MDBcdTY2MTVcdTY2M2JcdTY2MDlcdTY2MmVcdTY2MWVcdTY2MjRc''@;'; put 'put ''dTY2NjVcdTY2NTdcdTY2NTlcdWZhMTJcdTY2NzNcdTY2OTlcdTY2YTBcdTY2YjJcdTY2YmZcdTY2ZmFcdTY3MGVcdWY5MjlcdTY3NjZcdTY3YmJcdTY4NTJcdTY3YzBcdTY4MDFcdTY4NDRcdTY4Y2ZcdWZhMTNcdTY5NjhcdWZhMTRcdTY5OThcdTY5ZTJcdTZhMzBcdTZhNmJcdTZhNDZcdTZh''@;'; put 'put ''NzNcdTZhN2VcdTZhZTJcdTZhZTRcdTZiZDZcdTZjM2ZcdTZjNWNcdTZjODZcdTZjNmZcdTZjZGFcdTZkMDRcdTZkODdcdTZkNmZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNTBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI1MF1bcF0uY2hhckNvZGVBdCgwKSYmKElb''@;'; put 'put ''X1syNTBdW3BdXT02NGUzK3AsYls2NGUzK3BdPV9bMjUwXVtwXSk7Zm9yKF9bMjUxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDk2XHU2ZGFjXHU2ZGNmXHU2ZGY4XHU2ZGYyXHU2ZGZjXHU2ZTM5XHU2ZTVjXHU2ZTI3XHU2ZTNj''@;'; put 'put ''XHU2ZWJmXHU2Zjg4XHU2ZmI1XHU2ZmY1XHU3MDA1XHU3MDA3XHU3MDI4XHU3MDg1XHU3MGFiXHU3MTBmXHU3MTA0XHU3MTVjXHU3MTQ2XHU3MTQ3XHVmYTE1XHU3MWMxXHU3MWZlXHU3MmIxXHU3MmJlXHU3MzI0XHVmYTE2XHU3Mzc3XHU3M2JkXHU3M2M5XHU3M2Q2XHU3M2UzXHU3M2QyXHU3''@;'; put 'put ''NDA3XHU3M2Y1XHU3NDI2XHU3NDJhXHU3NDI5XHU3NDJlXHU3NDYyXHU3NDg5XHU3NDlmXHU3NTAxXHU3NTZmXHU3NjgyXHU3NjljXHU3NjllXHU3NjliXHU3NmE2XHVmYTE3XHU3NzQ2XHU1MmFmXHU3ODIxXHU3ODRlXHU3ODY0XHU3ODdhXHU3OTMwXHVmYTE4XHVmYTE5XHVmZmZkXHVmYTFh''@;'; put 'put ''XHU3OTk0XHVmYTFiXHU3OTliXHU3YWQxXHU3YWU3XHVmYTFjXHU3YWViXHU3YjllXHVmYTFkXHU3ZDQ4XHU3ZDVjXHU3ZGI3XHU3ZGEwXHU3ZGQ2XHU3ZTUyXHU3ZjQ3XHU3ZmExXHVmYTFlXHU4MzAxXHU4MzYyXHU4MzdmXHU4M2M3XHU4M2Y2XHU4NDQ4XHU4NGI0XHU4NTUzXHU4NTU5XHU4''@;'; put 'put ''NTZiXHVmYTFmXHU4NWIwXHVmYTIwXHVmYTIxXHU4ODA3XHU4OGY1XHU4YTEyXHU4YTM3XHU4YTc5XHU4YWE3XHU4YWJlXHU4YWRmXHVmYTIyXHU4YWY2XHU4YjUzXHU4YjdmXHU4Y2YwXHU4Y2Y0XHU4ZDEyXHU4ZDc2XHVmYTIzXHU4ZWNmXHVmYTI0XHVmYTI1XHU5MDY3XHU5MGRlXHVmYTI2''@;'; put 'put ''XHU5MTE1XHU5MTI3XHU5MWRhXHU5MWQ3XHU5MWRlXHU5MWVkXHU5MWVlXHU5MWU0XHU5MWU1XHU5MjA2XHU5MjEwXHU5MjBhXHU5MjNhXHU5MjQwXHU5MjNjXHU5MjRlXHU5MjU5XHU5MjUxXHU5MjM5XHU5MjY3XHU5MmE3XHU5Mjc3XHU5Mjc4XHU5MmU3XHU5MmQ3XHU5MmQ5XHU5MmQwXHVm''@;'; put 'put ''YTI3XHU5MmQ1XHU5MmUwXHU5MmQzXHU5MzI1XHU5MzIxXHU5MmZiXHVmYTI4XHU5MzFlXHU5MmZmXHU5MzFkXHU5MzAyXHU5MzcwXHU5MzU3XHU5M2E0XHU5M2M2XHU5M2RlXHU5M2Y4XHU5NDMxXHU5NDQ1XHU5NDQ4XHU5NTkyXHVmOWRjXHVmYTI5XHU5NjlkXHU5NmFmXHU5NzMzXHU5NzNi''@;'; put 'put ''XHU5NzQzXHU5NzRkXHU5NzRmXHU5NzUxXHU5NzU1XHU5ODU3XHU5ODY1XHVmYTJhXHVmYTJiXHU5OTI3XHVmYTJjXHU5OTllXHU5YTRlXHU5YWQ5XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjUxXS5sZW5ndGg7KytwKTY1NTMzIT09X1syNTFdW3BdLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCkmJihJW19bMjUxXVtwXV09NjQyNTYrcCxiWzY0MjU2K3BdPV9bMjUxXVtwXSk7Zm9yKF9bMjUyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YWRjXHU5Yjc1XHU5YjcyXHU5YjhmXHU5YmIxXHU5YmJiXHU5YzAwXHU5ZDcw''@;'; put 'put ''XHU5ZDZiXHVmYTJkXHU5ZTE5XHU5ZWQxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjUyXS5sZW5ndGg7KytwKTY1NTMzIT09X1syNTJd''@;'; put 'put ''W3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjUyXVtwXV09NjQ1MTIrcCxiWzY0NTEyK3BdPV9bMjUyXVtwXSk7cmV0dXJue2VuYzpJLGRlYzpifX0oKSxYWzkzNl09ZnVuY3Rpb24oKXt2YXIgcCxiPVtdLEk9e30sXz1bXTtmb3IoX1swXT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3''@;'; put 'put ''XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1u''@;'; put 'put ''b3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1swXS5sZW5ndGg7KytwKTY1''@;'; put 'put ''NTMzIT09X1swXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzBdW3BdXT0wK3AsYlswK3BdPV9bMF1bcF0pO2ZvcihfWzEyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUwMlx1NGUwNFx1NGUwNVx1NGUwNlx1NGUwZlx1NGUxMlx1''@;'; put 'put ''NGUxN1x1NGUxZlx1NGUyMFx1NGUyMVx1NGUyM1x1NGUyNlx1NGUyOVx1NGUyZVx1NGUyZlx1NGUzMVx1NGUzM1x1NGUzNVx1NGUzN1x1NGUzY1x1NGU0MFx1NGU0MVx1NGU0Mlx1NGU0NFx1NGU0Nlx1NGU0YVx1NGU1MVx1NGU1NVx1NGU1N1x1NGU1YVx1NGU1Ylx1NGU2Mlx1NGU2M1x1NGU2''@;'; put 'put ''NFx1NGU2NVx1NGU2N1x1NGU2OFx1NGU2YVx1NGU2Ylx1NGU2Y1x1NGU2ZFx1NGU2ZVx1NGU2Zlx1NGU3Mlx1NGU3NFx1NGU3NVx1NGU3Nlx1NGU3N1x1NGU3OFx1NGU3OVx1NGU3YVx1NGU3Ylx1NGU3Y1x1NGU3ZFx1NGU3Zlx1NGU4MFx1NGU4MVx1NGU4Mlx1NGU4M1x1NGU4NFx1NGU4NVx1''@;'; put 'put ''NGU4N1x1NGU4YVx1ZmZmZFx1NGU5MFx1NGU5Nlx1NGU5N1x1NGU5OVx1NGU5Y1x1NGU5ZFx1NGU5ZVx1NGVhM1x1NGVhYVx1NGVhZlx1NGViMFx1NGViMVx1NGViNFx1NGViNlx1NGViN1x1NGViOFx1NGViOVx1NGViY1x1NGViZFx1NGViZVx1NGVjOFx1NGVjY1x1NGVjZlx1NGVkMFx1NGVk''@;'; put 'put ''Mlx1NGVkYVx1NGVkYlx1NGVkY1x1NGVlMFx1NGVlMlx1NGVlNlx1NGVlN1x1NGVlOVx1NGVlZFx1NGVlZVx1NGVlZlx1NGVmMVx1NGVmNFx1NGVmOFx1NGVmOVx1NGVmYVx1NGVmY1x1NGVmZVx1NGYwMFx1NGYwMlx1NGYwM1x1NGYwNFx1NGYwNVx1NGYwNlx1NGYwN1x1NGYwOFx1NGYwYlx1''@;'; put 'put ''NGYwY1x1NGYxMlx1NGYxM1x1NGYxNFx1NGYxNVx1NGYxNlx1NGYxY1x1NGYxZFx1NGYyMVx1NGYyM1x1NGYyOFx1NGYyOVx1NGYyY1x1NGYyZFx1NGYyZVx1NGYzMVx1NGYzM1x1NGYzNVx1NGYzN1x1NGYzOVx1NGYzYlx1NGYzZVx1NGYzZlx1NGY0MFx1NGY0MVx1NGY0Mlx1NGY0NFx1NGY0''@;'; put 'put ''NVx1NGY0N1x1NGY0OFx1NGY0OVx1NGY0YVx1NGY0Ylx1NGY0Y1x1NGY1Mlx1NGY1NFx1NGY1Nlx1NGY2MVx1NGY2Mlx1NGY2Nlx1NGY2OFx1NGY2YVx1NGY2Ylx1NGY2ZFx1NGY2ZVx1NGY3MVx1NGY3Mlx1NGY3NVx1NGY3N1x1NGY3OFx1NGY3OVx1NGY3YVx1NGY3ZFx1NGY4MFx1NGY4MVx1''@;'; put 'put ''NGY4Mlx1NGY4NVx1NGY4Nlx1NGY4N1x1NGY4YVx1NGY4Y1x1NGY4ZVx1NGY5MFx1NGY5Mlx1NGY5M1x1NGY5NVx1NGY5Nlx1NGY5OFx1NGY5OVx1NGY5YVx1NGY5Y1x1NGY5ZVx1NGY5Zlx1NGZhMVx1NGZhMlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEyOV0ubGVuZ3RoOysrcCk2NTUz''@;'; put 'put ''MyE9PV9bMTI5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEyOV1bcF1dPTMzMDI0K3AsYlszMzAyNCtwXT1fWzEyOV1bcF0pO2ZvcihfWzEzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGZhNFx1NGZhYlx1NGZhZFx1NGZiMFx1''@;'; put 'put ''NGZiMVx1NGZiMlx1NGZiM1x1NGZiNFx1NGZiNlx1NGZiN1x1NGZiOFx1NGZiOVx1NGZiYVx1NGZiYlx1NGZiY1x1NGZiZFx1NGZiZVx1NGZjMFx1NGZjMVx1NGZjMlx1NGZjNlx1NGZjN1x1NGZjOFx1NGZjOVx1NGZjYlx1NGZjY1x1NGZjZFx1NGZkMlx1NGZkM1x1NGZkNFx1NGZkNVx1NGZk''@;'; put 'put ''Nlx1NGZkOVx1NGZkYlx1NGZlMFx1NGZlMlx1NGZlNFx1NGZlNVx1NGZlN1x1NGZlYlx1NGZlY1x1NGZmMFx1NGZmMlx1NGZmNFx1NGZmNVx1NGZmNlx1NGZmN1x1NGZmOVx1NGZmYlx1NGZmY1x1NGZmZFx1NGZmZlx1NTAwMFx1NTAwMVx1NTAwMlx1NTAwM1x1NTAwNFx1NTAwNVx1NTAwNlx1''@;'; put 'put ''NTAwN1x1NTAwOFx1NTAwOVx1NTAwYVx1ZmZmZFx1NTAwYlx1NTAwZVx1NTAxMFx1NTAxMVx1NTAxM1x1NTAxNVx1NTAxNlx1NTAxN1x1NTAxYlx1NTAxZFx1NTAxZVx1NTAyMFx1NTAyMlx1NTAyM1x1NTAyNFx1NTAyN1x1NTAyYlx1NTAyZlx1NTAzMFx1NTAzMVx1NTAzMlx1NTAzM1x1NTAz''@;'; put 'put ''NFx1NTAzNVx1NTAzNlx1NTAzN1x1NTAzOFx1NTAzOVx1NTAzYlx1NTAzZFx1NTAzZlx1NTA0MFx1NTA0MVx1NTA0Mlx1NTA0NFx1NTA0NVx1NTA0Nlx1NTA0OVx1NTA0YVx1NTA0Ylx1NTA0ZFx1NTA1MFx1NTA1MVx1NTA1Mlx1NTA1M1x1NTA1NFx1NTA1Nlx1NTA1N1x1NTA1OFx1NTA1OVx1''@;'; put 'put ''NTA1Ylx1NTA1ZFx1NTA1ZVx1NTA1Zlx1NTA2MFx1NTA2MVx1NTA2Mlx1NTA2M1x1NTA2NFx1NTA2Nlx1NTA2N1x1NTA2OFx1NTA2OVx1NTA2YVx1NTA2Ylx1NTA2ZFx1NTA2ZVx1NTA2Zlx1NTA3MFx1NTA3MVx1NTA3Mlx1NTA3M1x1NTA3NFx1NTA3NVx1NTA3OFx1NTA3OVx1NTA3YVx1NTA3''@;'; put 'put ''Y1x1NTA3ZFx1NTA4MVx1NTA4Mlx1NTA4M1x1NTA4NFx1NTA4Nlx1NTA4N1x1NTA4OVx1NTA4YVx1NTA4Ylx1NTA4Y1x1NTA4ZVx1NTA4Zlx1NTA5MFx1NTA5MVx1NTA5Mlx1NTA5M1x1NTA5NFx1NTA5NVx1NTA5Nlx1NTA5N1x1NTA5OFx1NTA5OVx1NTA5YVx1NTA5Ylx1NTA5Y1x1NTA5ZFx1''@;'; put 'put ''NTA5ZVx1NTA5Zlx1NTBhMFx1NTBhMVx1NTBhMlx1NTBhNFx1NTBhNlx1NTBhYVx1NTBhYlx1NTBhZFx1NTBhZVx1NTBhZlx1NTBiMFx1NTBiMVx1NTBiM1x1NTBiNFx1NTBiNVx1NTBiNlx1NTBiN1x1NTBiOFx1NTBiOVx1NTBiY1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEzMF0ubGVu''@;'; put 'put ''Z3RoOysrcCk2NTUzMyE9PV9bMTMwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzMF1bcF1dPTMzMjgwK3AsYlszMzI4MCtwXT1fWzEzMF1bcF0pO2ZvcihfWzEzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTBiZFx1NTBiZVx1''@;'; put 'put ''NTBiZlx1NTBjMFx1NTBjMVx1NTBjMlx1NTBjM1x1NTBjNFx1NTBjNVx1NTBjNlx1NTBjN1x1NTBjOFx1NTBjOVx1NTBjYVx1NTBjYlx1NTBjY1x1NTBjZFx1NTBjZVx1NTBkMFx1NTBkMVx1NTBkMlx1NTBkM1x1NTBkNFx1NTBkNVx1NTBkN1x1NTBkOFx1NTBkOVx1NTBkYlx1NTBkY1x1NTBk''@;'; put 'put ''ZFx1NTBkZVx1NTBkZlx1NTBlMFx1NTBlMVx1NTBlMlx1NTBlM1x1NTBlNFx1NTBlNVx1NTBlOFx1NTBlOVx1NTBlYVx1NTBlYlx1NTBlZlx1NTBmMFx1NTBmMVx1NTBmMlx1NTBmNFx1NTBmNlx1NTBmN1x1NTBmOFx1NTBmOVx1NTBmYVx1NTBmY1x1NTBmZFx1NTBmZVx1NTBmZlx1NTEwMFx1''@;'; put 'put ''NTEwMVx1NTEwMlx1NTEwM1x1NTEwNFx1NTEwNVx1NTEwOFx1ZmZmZFx1NTEwOVx1NTEwYVx1NTEwY1x1NTEwZFx1NTEwZVx1NTEwZlx1NTExMFx1NTExMVx1NTExM1x1NTExNFx1NTExNVx1NTExNlx1NTExN1x1NTExOFx1NTExOVx1NTExYVx1NTExYlx1NTExY1x1NTExZFx1NTExZVx1NTEx''@;'; put 'put ''Zlx1NTEyMFx1NTEyMlx1NTEyM1x1NTEyNFx1NTEyNVx1NTEyNlx1NTEyN1x1NTEyOFx1NTEyOVx1NTEyYVx1NTEyYlx1NTEyY1x1NTEyZFx1NTEyZVx1NTEyZlx1NTEzMFx1NTEzMVx1NTEzMlx1NTEzM1x1NTEzNFx1NTEzNVx1NTEzNlx1NTEzN1x1NTEzOFx1NTEzOVx1NTEzYVx1NTEzYlx1''@;'; put 'put ''NTEzY1x1NTEzZFx1NTEzZVx1NTE0Mlx1NTE0N1x1NTE0YVx1NTE0Y1x1NTE0ZVx1NTE0Zlx1NTE1MFx1NTE1Mlx1NTE1M1x1NTE1N1x1NTE1OFx1NTE1OVx1NTE1Ylx1NTE1ZFx1NTE1ZVx1NTE1Zlx1NTE2MFx1NTE2MVx1NTE2M1x1NTE2NFx1NTE2Nlx1NTE2N1x1NTE2OVx1NTE2YVx1NTE2''@;'; put 'put ''Zlx1NTE3Mlx1NTE3YVx1NTE3ZVx1NTE3Zlx1NTE4M1x1NTE4NFx1NTE4Nlx1NTE4N1x1NTE4YVx1NTE4Ylx1NTE4ZVx1NTE4Zlx1NTE5MFx1NTE5MVx1NTE5M1x1NTE5NFx1NTE5OFx1NTE5YVx1NTE5ZFx1NTE5ZVx1NTE5Zlx1NTFhMVx1NTFhM1x1NTFhNlx1NTFhN1x1NTFhOFx1NTFhOVx1''@;'; put 'put ''NTFhYVx1NTFhZFx1NTFhZVx1NTFiNFx1NTFiOFx1NTFiOVx1NTFiYVx1NTFiZVx1NTFiZlx1NTFjMVx1NTFjMlx1NTFjM1x1NTFjNVx1NTFjOFx1NTFjYVx1NTFjZFx1NTFjZVx1NTFkMFx1NTFkMlx1NTFkM1x1NTFkNFx1NTFkNVx1NTFkNlx1NTFkN1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtw''@;'; put 'put ''IT1fWzEzMV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTMxXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzMV1bcF1dPTMzNTM2K3AsYlszMzUzNitwXT1fWzEzMV1bcF0pO2ZvcihfWzEzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''NTFkOFx1NTFkOVx1NTFkYVx1NTFkY1x1NTFkZVx1NTFkZlx1NTFlMlx1NTFlM1x1NTFlNVx1NTFlNlx1NTFlN1x1NTFlOFx1NTFlOVx1NTFlYVx1NTFlY1x1NTFlZVx1NTFmMVx1NTFmMlx1NTFmNFx1NTFmN1x1NTFmZVx1NTIwNFx1NTIwNVx1NTIwOVx1NTIwYlx1NTIwY1x1NTIwZlx1NTIx''@;'; put 'put ''MFx1NTIxM1x1NTIxNFx1NTIxNVx1NTIxY1x1NTIxZVx1NTIxZlx1NTIyMVx1NTIyMlx1NTIyM1x1NTIyNVx1NTIyNlx1NTIyN1x1NTIyYVx1NTIyY1x1NTIyZlx1NTIzMVx1NTIzMlx1NTIzNFx1NTIzNVx1NTIzY1x1NTIzZVx1NTI0NFx1NTI0NVx1NTI0Nlx1NTI0N1x1NTI0OFx1NTI0OVx1''@;'; put 'put ''NTI0Ylx1NTI0ZVx1NTI0Zlx1NTI1Mlx1NTI1M1x1NTI1NVx1NTI1N1x1NTI1OFx1ZmZmZFx1NTI1OVx1NTI1YVx1NTI1Ylx1NTI1ZFx1NTI1Zlx1NTI2MFx1NTI2Mlx1NTI2M1x1NTI2NFx1NTI2Nlx1NTI2OFx1NTI2Ylx1NTI2Y1x1NTI2ZFx1NTI2ZVx1NTI3MFx1NTI3MVx1NTI3M1x1NTI3''@;'; put 'put ''NFx1NTI3NVx1NTI3Nlx1NTI3N1x1NTI3OFx1NTI3OVx1NTI3YVx1NTI3Ylx1NTI3Y1x1NTI3ZVx1NTI4MFx1NTI4M1x1NTI4NFx1NTI4NVx1NTI4Nlx1NTI4N1x1NTI4OVx1NTI4YVx1NTI4Ylx1NTI4Y1x1NTI4ZFx1NTI4ZVx1NTI4Zlx1NTI5MVx1NTI5Mlx1NTI5NFx1NTI5NVx1NTI5Nlx1''@;'; put 'put ''NTI5N1x1NTI5OFx1NTI5OVx1NTI5YVx1NTI5Y1x1NTJhNFx1NTJhNVx1NTJhNlx1NTJhN1x1NTJhZVx1NTJhZlx1NTJiMFx1NTJiNFx1NTJiNVx1NTJiNlx1NTJiN1x1NTJiOFx1NTJiOVx1NTJiYVx1NTJiYlx1NTJiY1x1NTJiZFx1NTJjMFx1NTJjMVx1NTJjMlx1NTJjNFx1NTJjNVx1NTJj''@;'; put 'put ''Nlx1NTJjOFx1NTJjYVx1NTJjY1x1NTJjZFx1NTJjZVx1NTJjZlx1NTJkMVx1NTJkM1x1NTJkNFx1NTJkNVx1NTJkN1x1NTJkOVx1NTJkYVx1NTJkYlx1NTJkY1x1NTJkZFx1NTJkZVx1NTJlMFx1NTJlMVx1NTJlMlx1NTJlM1x1NTJlNVx1NTJlNlx1NTJlN1x1NTJlOFx1NTJlOVx1NTJlYVx1''@;'; put 'put ''NTJlYlx1NTJlY1x1NTJlZFx1NTJlZVx1NTJlZlx1NTJmMVx1NTJmMlx1NTJmM1x1NTJmNFx1NTJmNVx1NTJmNlx1NTJmN1x1NTJmOFx1NTJmYlx1NTJmY1x1NTJmZFx1NTMwMVx1NTMwMlx1NTMwM1x1NTMwNFx1NTMwN1x1NTMwOVx1NTMwYVx1NTMwYlx1NTMwY1x1NTMwZVx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLHA9MDtwIT1fWzEzMl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTMyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzMl1bcF1dPTMzNzkyK3AsYlszMzc5MitwXT1fWzEzMl1bcF0pO2ZvcihfWzEzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1NTMxMVx1NTMxMlx1NTMxM1x1NTMxNFx1NTMxOFx1NTMxYlx1NTMxY1x1NTMxZVx1NTMxZlx1NTMyMlx1NTMyNFx1NTMyNVx1NTMyN1x1NTMyOFx1NTMyOVx1NTMyYlx1NTMyY1x1NTMyZFx1NTMyZlx1NTMzMFx1NTMzMVx1NTMzMlx1NTMzM1x1NTMzNFx1NTMzNVx1NTMz''@;'; put 'put ''Nlx1NTMzN1x1NTMzOFx1NTMzY1x1NTMzZFx1NTM0MFx1NTM0Mlx1NTM0NFx1NTM0Nlx1NTM0Ylx1NTM0Y1x1NTM0ZFx1NTM1MFx1NTM1NFx1NTM1OFx1NTM1OVx1NTM1Ylx1NTM1ZFx1NTM2NVx1NTM2OFx1NTM2YVx1NTM2Y1x1NTM2ZFx1NTM3Mlx1NTM3Nlx1NTM3OVx1NTM3Ylx1NTM3Y1x1''@;'; put 'put ''NTM3ZFx1NTM3ZVx1NTM4MFx1NTM4MVx1NTM4M1x1NTM4N1x1NTM4OFx1NTM4YVx1NTM4ZVx1NTM4Zlx1ZmZmZFx1NTM5MFx1NTM5MVx1NTM5Mlx1NTM5M1x1NTM5NFx1NTM5Nlx1NTM5N1x1NTM5OVx1NTM5Ylx1NTM5Y1x1NTM5ZVx1NTNhMFx1NTNhMVx1NTNhNFx1NTNhN1x1NTNhYVx1NTNh''@;'; put 'put ''Ylx1NTNhY1x1NTNhZFx1NTNhZlx1NTNiMFx1NTNiMVx1NTNiMlx1NTNiM1x1NTNiNFx1NTNiNVx1NTNiN1x1NTNiOFx1NTNiOVx1NTNiYVx1NTNiY1x1NTNiZFx1NTNiZVx1NTNjMFx1NTNjM1x1NTNjNFx1NTNjNVx1NTNjNlx1NTNjN1x1NTNjZVx1NTNjZlx1NTNkMFx1NTNkMlx1NTNkM1x1''@;'; put 'put ''NTNkNVx1NTNkYVx1NTNkY1x1NTNkZFx1NTNkZVx1NTNlMVx1NTNlMlx1NTNlN1x1NTNmNFx1NTNmYVx1NTNmZVx1NTNmZlx1NTQwMFx1NTQwMlx1NTQwNVx1NTQwN1x1NTQwYlx1NTQxNFx1NTQxOFx1NTQxOVx1NTQxYVx1NTQxY1x1NTQyMlx1NTQyNFx1NTQyNVx1NTQyYVx1NTQzMFx1NTQz''@;'; put 'put ''M1x1NTQzNlx1NTQzN1x1NTQzYVx1NTQzZFx1NTQzZlx1NTQ0MVx1NTQ0Mlx1NTQ0NFx1NTQ0NVx1NTQ0N1x1NTQ0OVx1NTQ0Y1x1NTQ0ZFx1NTQ0ZVx1NTQ0Zlx1NTQ1MVx1NTQ1YVx1NTQ1ZFx1NTQ1ZVx1NTQ1Zlx1NTQ2MFx1NTQ2MVx1NTQ2M1x1NTQ2NVx1NTQ2N1x1NTQ2OVx1NTQ2YVx1''@;'; put 'put ''NTQ2Ylx1NTQ2Y1x1NTQ2ZFx1NTQ2ZVx1NTQ2Zlx1NTQ3MFx1NTQ3NFx1NTQ3OVx1NTQ3YVx1NTQ3ZVx1NTQ3Zlx1NTQ4MVx1NTQ4M1x1NTQ4NVx1NTQ4N1x1NTQ4OFx1NTQ4OVx1NTQ4YVx1NTQ4ZFx1NTQ5MVx1NTQ5M1x1NTQ5N1x1NTQ5OFx1NTQ5Y1x1NTQ5ZVx1NTQ5Zlx1NTRhMFx1NTRh''@;'; put 'put ''MVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEzM10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTMzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzM11bcF1dPTM0MDQ4K3AsYlszNDA0OCtwXT1fWzEzM11bcF0pO2ZvcihfWzEzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRhMlx1NTRhNVx1NTRhZVx1NTRiMFx1NTRiMlx1NTRiNVx1NTRiNlx1NTRiN1x1NTRiOVx1NTRiYVx1NTRiY1x1NTRiZVx1NTRjM1x1NTRjNVx1NTRjYVx1NTRjYlx1NTRkNlx1NTRkOFx1NTRkYlx1NTRlMFx1NTRlMVx1NTRlMlx1NTRlM1x1NTRl''@;'; put 'put ''NFx1NTRlYlx1NTRlY1x1NTRlZlx1NTRmMFx1NTRmMVx1NTRmNFx1NTRmNVx1NTRmNlx1NTRmN1x1NTRmOFx1NTRmOVx1NTRmYlx1NTRmZVx1NTUwMFx1NTUwMlx1NTUwM1x1NTUwNFx1NTUwNVx1NTUwOFx1NTUwYVx1NTUwYlx1NTUwY1x1NTUwZFx1NTUwZVx1NTUxMlx1NTUxM1x1NTUxNVx1''@;'; put 'put ''NTUxNlx1NTUxN1x1NTUxOFx1NTUxOVx1NTUxYVx1NTUxY1x1NTUxZFx1NTUxZVx1NTUxZlx1NTUyMVx1NTUyNVx1NTUyNlx1ZmZmZFx1NTUyOFx1NTUyOVx1NTUyYlx1NTUyZFx1NTUzMlx1NTUzNFx1NTUzNVx1NTUzNlx1NTUzOFx1NTUzOVx1NTUzYVx1NTUzYlx1NTUzZFx1NTU0MFx1NTU0''@;'; put 'put ''Mlx1NTU0NVx1NTU0N1x1NTU0OFx1NTU0Ylx1NTU0Y1x1NTU0ZFx1NTU0ZVx1NTU0Zlx1NTU1MVx1NTU1Mlx1NTU1M1x1NTU1NFx1NTU1N1x1NTU1OFx1NTU1OVx1NTU1YVx1NTU1Ylx1NTU1ZFx1NTU1ZVx1NTU1Zlx1NTU2MFx1NTU2Mlx1NTU2M1x1NTU2OFx1NTU2OVx1NTU2Ylx1NTU2Zlx1''@;'; put 'put ''NTU3MFx1NTU3MVx1NTU3Mlx1NTU3M1x1NTU3NFx1NTU3OVx1NTU3YVx1NTU3ZFx1NTU3Zlx1NTU4NVx1NTU4Nlx1NTU4Y1x1NTU4ZFx1NTU4ZVx1NTU5MFx1NTU5Mlx1NTU5M1x1NTU5NVx1NTU5Nlx1NTU5N1x1NTU5YVx1NTU5Ylx1NTU5ZVx1NTVhMFx1NTVhMVx1NTVhMlx1NTVhM1x1NTVh''@;'; put 'put ''NFx1NTVhNVx1NTVhNlx1NTVhOFx1NTVhOVx1NTVhYVx1NTVhYlx1NTVhY1x1NTVhZFx1NTVhZVx1NTVhZlx1NTViMFx1NTViMlx1NTViNFx1NTViNlx1NTViOFx1NTViYVx1NTViY1x1NTViZlx1NTVjMFx1NTVjMVx1NTVjMlx1NTVjM1x1NTVjNlx1NTVjN1x1NTVjOFx1NTVjYVx1NTVjYlx1''@;'; put 'put ''NTVjZVx1NTVjZlx1NTVkMFx1NTVkNVx1NTVkN1x1NTVkOFx1NTVkOVx1NTVkYVx1NTVkYlx1NTVkZVx1NTVlMFx1NTVlMlx1NTVlN1x1NTVlOVx1NTVlZFx1NTVlZVx1NTVmMFx1NTVmMVx1NTVmNFx1NTVmNlx1NTVmOFx1NTVmOVx1NTVmYVx1NTVmYlx1NTVmY1x1NTVmZlx1NTYwMlx1NTYw''@;'; put 'put ''M1x1NTYwNFx1NTYwNVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEzNF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTM0XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzNF1bcF1dPTM0MzA0K3AsYlszNDMwNCtwXT1fWzEzNF1bcF0pO2ZvcihfWzEzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTYwNlx1NTYwN1x1NTYwYVx1NTYwYlx1NTYwZFx1NTYxMFx1NTYxMVx1NTYxMlx1NTYxM1x1NTYxNFx1NTYxNVx1NTYxNlx1NTYxN1x1NTYxOVx1NTYxYVx1NTYxY1x1NTYxZFx1NTYyMFx1NTYyMVx1NTYyMlx1NTYyNVx1NTYy''@;'; put 'put ''Nlx1NTYyOFx1NTYyOVx1NTYyYVx1NTYyYlx1NTYyZVx1NTYyZlx1NTYzMFx1NTYzM1x1NTYzNVx1NTYzN1x1NTYzOFx1NTYzYVx1NTYzY1x1NTYzZFx1NTYzZVx1NTY0MFx1NTY0MVx1NTY0Mlx1NTY0M1x1NTY0NFx1NTY0NVx1NTY0Nlx1NTY0N1x1NTY0OFx1NTY0OVx1NTY0YVx1NTY0Ylx1''@;'; put 'put ''NTY0Zlx1NTY1MFx1NTY1MVx1NTY1Mlx1NTY1M1x1NTY1NVx1NTY1Nlx1NTY1YVx1NTY1Ylx1NTY1ZFx1NTY1ZVx1NTY1Zlx1NTY2MFx1NTY2MVx1ZmZmZFx1NTY2M1x1NTY2NVx1NTY2Nlx1NTY2N1x1NTY2ZFx1NTY2ZVx1NTY2Zlx1NTY3MFx1NTY3Mlx1NTY3M1x1NTY3NFx1NTY3NVx1NTY3''@;'; put 'put ''N1x1NTY3OFx1NTY3OVx1NTY3YVx1NTY3ZFx1NTY3ZVx1NTY3Zlx1NTY4MFx1NTY4MVx1NTY4Mlx1NTY4M1x1NTY4NFx1NTY4N1x1NTY4OFx1NTY4OVx1NTY4YVx1NTY4Ylx1NTY4Y1x1NTY4ZFx1NTY5MFx1NTY5MVx1NTY5Mlx1NTY5NFx1NTY5NVx1NTY5Nlx1NTY5N1x1NTY5OFx1NTY5OVx1''@;'; put 'put ''NTY5YVx1NTY5Ylx1NTY5Y1x1NTY5ZFx1NTY5ZVx1NTY5Zlx1NTZhMFx1NTZhMVx1NTZhMlx1NTZhNFx1NTZhNVx1NTZhNlx1NTZhN1x1NTZhOFx1NTZhOVx1NTZhYVx1NTZhYlx1NTZhY1x1NTZhZFx1NTZhZVx1NTZiMFx1NTZiMVx1NTZiMlx1NTZiM1x1NTZiNFx1NTZiNVx1NTZiNlx1NTZi''@;'; put 'put ''OFx1NTZiOVx1NTZiYVx1NTZiYlx1NTZiZFx1NTZiZVx1NTZiZlx1NTZjMFx1NTZjMVx1NTZjMlx1NTZjM1x1NTZjNFx1NTZjNVx1NTZjNlx1NTZjN1x1NTZjOFx1NTZjOVx1NTZjYlx1NTZjY1x1NTZjZFx1NTZjZVx1NTZjZlx1NTZkMFx1NTZkMVx1NTZkMlx1NTZkM1x1NTZkNVx1NTZkNlx1''@;'; put 'put ''NTZkOFx1NTZkOVx1NTZkY1x1NTZlM1x1NTZlNVx1NTZlNlx1NTZlN1x1NTZlOFx1NTZlOVx1NTZlYVx1NTZlY1x1NTZlZVx1NTZlZlx1NTZmMlx1NTZmM1x1NTZmNlx1NTZmN1x1NTZmOFx1NTZmYlx1NTZmY1x1NTcwMFx1NTcwMVx1NTcwMlx1NTcwNVx1NTcwN1x1NTcwYlx1NTcwY1x1NTcw''@;'; put 'put ''ZFx1NTcwZVx1NTcwZlx1NTcxMFx1NTcxMVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEzNV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTM1XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzNV1bcF1dPTM0NTYwK3AsYlszNDU2MCtwXT1fWzEzNV1bcF0pO2ZvcihfWzEzNl09Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTcxMlx1NTcxM1x1NTcxNFx1NTcxNVx1NTcxNlx1NTcxN1x1NTcxOFx1NTcxOVx1NTcxYVx1NTcxYlx1NTcxZFx1NTcxZVx1NTcyMFx1NTcyMVx1NTcyMlx1NTcyNFx1NTcyNVx1NTcyNlx1NTcyN1x1NTcy''@;'; put 'put ''Ylx1NTczMVx1NTczMlx1NTczNFx1NTczNVx1NTczNlx1NTczN1x1NTczOFx1NTczY1x1NTczZFx1NTczZlx1NTc0MVx1NTc0M1x1NTc0NFx1NTc0NVx1NTc0Nlx1NTc0OFx1NTc0OVx1NTc0Ylx1NTc1Mlx1NTc1M1x1NTc1NFx1NTc1NVx1NTc1Nlx1NTc1OFx1NTc1OVx1NTc2Mlx1NTc2M1x1''@;'; put 'put ''NTc2NVx1NTc2N1x1NTc2Y1x1NTc2ZVx1NTc3MFx1NTc3MVx1NTc3Mlx1NTc3NFx1NTc3NVx1NTc3OFx1NTc3OVx1NTc3YVx1NTc3ZFx1NTc3ZVx1NTc3Zlx1NTc4MFx1ZmZmZFx1NTc4MVx1NTc4N1x1NTc4OFx1NTc4OVx1NTc4YVx1NTc4ZFx1NTc4ZVx1NTc4Zlx1NTc5MFx1NTc5MVx1NTc5''@;'; put 'put ''NFx1NTc5NVx1NTc5Nlx1NTc5N1x1NTc5OFx1NTc5OVx1NTc5YVx1NTc5Y1x1NTc5ZFx1NTc5ZVx1NTc5Zlx1NTdhNVx1NTdhOFx1NTdhYVx1NTdhY1x1NTdhZlx1NTdiMFx1NTdiMVx1NTdiM1x1NTdiNVx1NTdiNlx1NTdiN1x1NTdiOVx1NTdiYVx1NTdiYlx1NTdiY1x1NTdiZFx1NTdiZVx1''@;'; put 'put ''NTdiZlx1NTdjMFx1NTdjMVx1NTdjNFx1NTdjNVx1NTdjNlx1NTdjN1x1NTdjOFx1NTdjOVx1NTdjYVx1NTdjY1x1NTdjZFx1NTdkMFx1NTdkMVx1NTdkM1x1NTdkNlx1NTdkN1x1NTdkYlx1NTdkY1x1NTdkZVx1NTdlMVx1NTdlMlx1NTdlM1x1NTdlNVx1NTdlNlx1NTdlN1x1NTdlOFx1NTdl''@;'; put 'put ''OVx1NTdlYVx1NTdlYlx1NTdlY1x1NTdlZVx1NTdmMFx1NTdmMVx1NTdmMlx1NTdmM1x1NTdmNVx1NTdmNlx1NTdmN1x1NTdmYlx1NTdmY1x1NTdmZVx1NTdmZlx1NTgwMVx1NTgwM1x1NTgwNFx1NTgwNVx1NTgwOFx1NTgwOVx1NTgwYVx1NTgwY1x1NTgwZVx1NTgwZlx1NTgxMFx1NTgxMlx1''@;'; put 'put ''NTgxM1x1NTgxNFx1NTgxNlx1NTgxN1x1NTgxOFx1NTgxYVx1NTgxYlx1NTgxY1x1NTgxZFx1NTgxZlx1NTgyMlx1NTgyM1x1NTgyNVx1NTgyNlx1NTgyN1x1NTgyOFx1NTgyOVx1NTgyYlx1NTgyY1x1NTgyZFx1NTgyZVx1NTgyZlx1NTgzMVx1NTgzMlx1NTgzM1x1NTgzNFx1NTgzNlx1NTgz''@;'; put 'put ''N1x1NTgzOFx1NTgzOVx1NTgzYVx1NTgzYlx1NTgzY1x1NTgzZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEzNl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTM2XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzNl1bcF1dPTM0ODE2K3AsYlszNDgxNitwXT1fWzEzNl1bcF0pO2ZvcihfWzEz''@;'; put 'put ''N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTgzZVx1NTgzZlx1NTg0MFx1NTg0MVx1NTg0Mlx1NTg0M1x1NTg0NVx1NTg0Nlx1NTg0N1x1NTg0OFx1NTg0OVx1NTg0YVx1NTg0Ylx1NTg0ZVx1NTg0Zlx1NTg1MFx1NTg1Mlx1NTg1''@;'; put 'put ''M1x1NTg1NVx1NTg1Nlx1NTg1N1x1NTg1OVx1NTg1YVx1NTg1Ylx1NTg1Y1x1NTg1ZFx1NTg1Zlx1NTg2MFx1NTg2MVx1NTg2Mlx1NTg2M1x1NTg2NFx1NTg2Nlx1NTg2N1x1NTg2OFx1NTg2OVx1NTg2YVx1NTg2ZFx1NTg2ZVx1NTg2Zlx1NTg3MFx1NTg3MVx1NTg3Mlx1NTg3M1x1NTg3NFx1''@;'; put 'put ''NTg3NVx1NTg3Nlx1NTg3N1x1NTg3OFx1NTg3OVx1NTg3YVx1NTg3Ylx1NTg3Y1x1NTg3ZFx1NTg3Zlx1NTg4Mlx1NTg4NFx1NTg4Nlx1NTg4N1x1NTg4OFx1NTg4YVx1NTg4Ylx1NTg4Y1x1ZmZmZFx1NTg4ZFx1NTg4ZVx1NTg4Zlx1NTg5MFx1NTg5MVx1NTg5NFx1NTg5NVx1NTg5Nlx1NTg5''@;'; put 'put ''N1x1NTg5OFx1NTg5Ylx1NTg5Y1x1NTg5ZFx1NThhMFx1NThhMVx1NThhMlx1NThhM1x1NThhNFx1NThhNVx1NThhNlx1NThhN1x1NThhYVx1NThhYlx1NThhY1x1NThhZFx1NThhZVx1NThhZlx1NThiMFx1NThiMVx1NThiMlx1NThiM1x1NThiNFx1NThiNVx1NThiNlx1NThiN1x1NThiOFx1''@;'; put 'put ''NThiOVx1NThiYVx1NThiYlx1NThiZFx1NThiZVx1NThiZlx1NThjMFx1NThjMlx1NThjM1x1NThjNFx1NThjNlx1NThjN1x1NThjOFx1NThjOVx1NThjYVx1NThjYlx1NThjY1x1NThjZFx1NThjZVx1NThjZlx1NThkMFx1NThkMlx1NThkM1x1NThkNFx1NThkNlx1NThkN1x1NThkOFx1NThk''@;'; put 'put ''OVx1NThkYVx1NThkYlx1NThkY1x1NThkZFx1NThkZVx1NThkZlx1NThlMFx1NThlMVx1NThlMlx1NThlM1x1NThlNVx1NThlNlx1NThlN1x1NThlOFx1NThlOVx1NThlYVx1NThlZFx1NThlZlx1NThmMVx1NThmMlx1NThmNFx1NThmNVx1NThmN1x1NThmOFx1NThmYVx1NThmYlx1NThmY1x1''@;'; put 'put ''NThmZFx1NThmZVx1NThmZlx1NTkwMFx1NTkwMVx1NTkwM1x1NTkwNVx1NTkwNlx1NTkwOFx1NTkwOVx1NTkwYVx1NTkwYlx1NTkwY1x1NTkwZVx1NTkxMFx1NTkxMVx1NTkxMlx1NTkxM1x1NTkxN1x1NTkxOFx1NTkxYlx1NTkxZFx1NTkxZVx1NTkyMFx1NTkyMVx1NTkyMlx1NTkyM1x1NTky''@;'; put 'put ''Nlx1NTkyOFx1NTkyY1x1NTkzMFx1NTkzMlx1NTkzM1x1NTkzNVx1NTkzNlx1NTkzYlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEzN10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTM3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzN11bcF1dPTM1MDcyK3AsYlszNTA3MitwXT1fWzEzN11b''@;'; put 'put ''cF0pO2ZvcihfWzEzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTkzZFx1NTkzZVx1NTkzZlx1NTk0MFx1NTk0M1x1NTk0NVx1NTk0Nlx1NTk0YVx1NTk0Y1x1NTk0ZFx1NTk1MFx1NTk1Mlx1NTk1M1x1NTk1OVx1NTk1Ylx1NTk1''@;'; put 'put ''Y1x1NTk1ZFx1NTk1ZVx1NTk1Zlx1NTk2MVx1NTk2M1x1NTk2NFx1NTk2Nlx1NTk2N1x1NTk2OFx1NTk2OVx1NTk2YVx1NTk2Ylx1NTk2Y1x1NTk2ZFx1NTk2ZVx1NTk2Zlx1NTk3MFx1NTk3MVx1NTk3Mlx1NTk3NVx1NTk3N1x1NTk3YVx1NTk3Ylx1NTk3Y1x1NTk3ZVx1NTk3Zlx1NTk4MFx1''@;'; put 'put ''NTk4NVx1NTk4OVx1NTk4Ylx1NTk4Y1x1NTk4ZVx1NTk4Zlx1NTk5MFx1NTk5MVx1NTk5NFx1NTk5NVx1NTk5OFx1NTk5YVx1NTk5Ylx1NTk5Y1x1NTk5ZFx1NTk5Zlx1NTlhMFx1NTlhMVx1NTlhMlx1NTlhNlx1ZmZmZFx1NTlhN1x1NTlhY1x1NTlhZFx1NTliMFx1NTliMVx1NTliM1x1NTli''@;'; put 'put ''NFx1NTliNVx1NTliNlx1NTliN1x1NTliOFx1NTliYVx1NTliY1x1NTliZFx1NTliZlx1NTljMFx1NTljMVx1NTljMlx1NTljM1x1NTljNFx1NTljNVx1NTljN1x1NTljOFx1NTljOVx1NTljY1x1NTljZFx1NTljZVx1NTljZlx1NTlkNVx1NTlkNlx1NTlkOVx1NTlkYlx1NTlkZVx1NTlkZlx1''@;'; put 'put ''NTllMFx1NTllMVx1NTllMlx1NTllNFx1NTllNlx1NTllN1x1NTllOVx1NTllYVx1NTllYlx1NTllZFx1NTllZVx1NTllZlx1NTlmMFx1NTlmMVx1NTlmMlx1NTlmM1x1NTlmNFx1NTlmNVx1NTlmNlx1NTlmN1x1NTlmOFx1NTlmYVx1NTlmY1x1NTlmZFx1NTlmZVx1NWEwMFx1NWEwMlx1NWEw''@;'; put 'put ''YVx1NWEwYlx1NWEwZFx1NWEwZVx1NWEwZlx1NWExMFx1NWExMlx1NWExNFx1NWExNVx1NWExNlx1NWExN1x1NWExOVx1NWExYVx1NWExYlx1NWExZFx1NWExZVx1NWEyMVx1NWEyMlx1NWEyNFx1NWEyNlx1NWEyN1x1NWEyOFx1NWEyYVx1NWEyYlx1NWEyY1x1NWEyZFx1NWEyZVx1NWEyZlx1''@;'; put 'put ''NWEzMFx1NWEzM1x1NWEzNVx1NWEzN1x1NWEzOFx1NWEzOVx1NWEzYVx1NWEzYlx1NWEzZFx1NWEzZVx1NWEzZlx1NWE0MVx1NWE0Mlx1NWE0M1x1NWE0NFx1NWE0NVx1NWE0N1x1NWE0OFx1NWE0Ylx1NWE0Y1x1NWE0ZFx1NWE0ZVx1NWE0Zlx1NWE1MFx1NWE1MVx1NWE1Mlx1NWE1M1x1NWE1''@;'; put 'put ''NFx1NWE1Nlx1NWE1N1x1NWE1OFx1NWE1OVx1NWE1Ylx1NWE1Y1x1NWE1ZFx1NWE1ZVx1NWE1Zlx1NWE2MFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEzOF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTM4XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzOF1bcF1dPTM1MzI4K3AsYlszNTMy''@;'; put 'put ''OCtwXT1fWzEzOF1bcF0pO2ZvcihfWzEzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWE2MVx1NWE2M1x1NWE2NFx1NWE2NVx1NWE2Nlx1NWE2OFx1NWE2OVx1NWE2Ylx1NWE2Y1x1NWE2ZFx1NWE2ZVx1NWE2Zlx1NWE3MFx1NWE3''@;'; put 'put ''MVx1NWE3Mlx1NWE3M1x1NWE3OFx1NWE3OVx1NWE3Ylx1NWE3Y1x1NWE3ZFx1NWE3ZVx1NWE4MFx1NWE4MVx1NWE4Mlx1NWE4M1x1NWE4NFx1NWE4NVx1NWE4Nlx1NWE4N1x1NWE4OFx1NWE4OVx1NWE4YVx1NWE4Ylx1NWE4Y1x1NWE4ZFx1NWE4ZVx1NWE4Zlx1NWE5MFx1NWE5MVx1NWE5M1x1''@;'; put 'put ''NWE5NFx1NWE5NVx1NWE5Nlx1NWE5N1x1NWE5OFx1NWE5OVx1NWE5Y1x1NWE5ZFx1NWE5ZVx1NWE5Zlx1NWFhMFx1NWFhMVx1NWFhMlx1NWFhM1x1NWFhNFx1NWFhNVx1NWFhNlx1NWFhN1x1NWFhOFx1NWFhOVx1NWFhYlx1NWFhY1x1ZmZmZFx1NWFhZFx1NWFhZVx1NWFhZlx1NWFiMFx1NWFi''@;'; put 'put ''MVx1NWFiNFx1NWFiNlx1NWFiN1x1NWFiOVx1NWFiYVx1NWFiYlx1NWFiY1x1NWFiZFx1NWFiZlx1NWFjMFx1NWFjM1x1NWFjNFx1NWFjNVx1NWFjNlx1NWFjN1x1NWFjOFx1NWFjYVx1NWFjYlx1NWFjZFx1NWFjZVx1NWFjZlx1NWFkMFx1NWFkMVx1NWFkM1x1NWFkNVx1NWFkN1x1NWFkOVx1''@;'; put 'put ''NWFkYVx1NWFkYlx1NWFkZFx1NWFkZVx1NWFkZlx1NWFlMlx1NWFlNFx1NWFlNVx1NWFlN1x1NWFlOFx1NWFlYVx1NWFlY1x1NWFlZFx1NWFlZVx1NWFlZlx1NWFmMFx1NWFmMlx1NWFmM1x1NWFmNFx1NWFmNVx1NWFmNlx1NWFmN1x1NWFmOFx1NWFmOVx1NWFmYVx1NWFmYlx1NWFmY1x1NWFm''@;'; put 'put ''ZFx1NWFmZVx1NWFmZlx1NWIwMFx1NWIwMVx1NWIwMlx1NWIwM1x1NWIwNFx1NWIwNVx1NWIwNlx1NWIwN1x1NWIwOFx1NWIwYVx1NWIwYlx1NWIwY1x1NWIwZFx1NWIwZVx1NWIwZlx1NWIxMFx1NWIxMVx1NWIxMlx1NWIxM1x1NWIxNFx1NWIxNVx1NWIxOFx1NWIxOVx1NWIxYVx1NWIxYlx1''@;'; put 'put ''NWIxY1x1NWIxZFx1NWIxZVx1NWIxZlx1NWIyMFx1NWIyMVx1NWIyMlx1NWIyM1x1NWIyNFx1NWIyNVx1NWIyNlx1NWIyN1x1NWIyOFx1NWIyOVx1NWIyYVx1NWIyYlx1NWIyY1x1NWIyZFx1NWIyZVx1NWIyZlx1NWIzMFx1NWIzMVx1NWIzM1x1NWIzNVx1NWIzNlx1NWIzOFx1NWIzOVx1NWIz''@;'; put 'put ''YVx1NWIzYlx1NWIzY1x1NWIzZFx1NWIzZVx1NWIzZlx1NWI0MVx1NWI0Mlx1NWI0M1x1NWI0NFx1NWI0NVx1NWI0Nlx1NWI0N1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEzOV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTM5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzOV1bcF1dPTM1''@;'; put 'put ''NTg0K3AsYlszNTU4NCtwXT1fWzEzOV1bcF0pO2ZvcihfWzE0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWI0OFx1NWI0OVx1NWI0YVx1NWI0Ylx1NWI0Y1x1NWI0ZFx1NWI0ZVx1NWI0Zlx1NWI1Mlx1NWI1Nlx1NWI1ZVx1NWI2''@;'; put 'put ''MFx1NWI2MVx1NWI2N1x1NWI2OFx1NWI2Ylx1NWI2ZFx1NWI2ZVx1NWI2Zlx1NWI3Mlx1NWI3NFx1NWI3Nlx1NWI3N1x1NWI3OFx1NWI3OVx1NWI3Ylx1NWI3Y1x1NWI3ZVx1NWI3Zlx1NWI4Mlx1NWI4Nlx1NWI4YVx1NWI4ZFx1NWI4ZVx1NWI5MFx1NWI5MVx1NWI5Mlx1NWI5NFx1NWI5Nlx1''@;'; put 'put ''NWI5Zlx1NWJhN1x1NWJhOFx1NWJhOVx1NWJhY1x1NWJhZFx1NWJhZVx1NWJhZlx1NWJiMVx1NWJiMlx1NWJiN1x1NWJiYVx1NWJiYlx1NWJiY1x1NWJjMFx1NWJjMVx1NWJjM1x1NWJjOFx1NWJjOVx1NWJjYVx1NWJjYlx1NWJjZFx1NWJjZVx1NWJjZlx1ZmZmZFx1NWJkMVx1NWJkNFx1NWJk''@;'; put 'put ''NVx1NWJkNlx1NWJkN1x1NWJkOFx1NWJkOVx1NWJkYVx1NWJkYlx1NWJkY1x1NWJlMFx1NWJlMlx1NWJlM1x1NWJlNlx1NWJlN1x1NWJlOVx1NWJlYVx1NWJlYlx1NWJlY1x1NWJlZFx1NWJlZlx1NWJmMVx1NWJmMlx1NWJmM1x1NWJmNFx1NWJmNVx1NWJmNlx1NWJmN1x1NWJmZFx1NWJmZVx1''@;'; put 'put ''NWMwMFx1NWMwMlx1NWMwM1x1NWMwNVx1NWMwN1x1NWMwOFx1NWMwYlx1NWMwY1x1NWMwZFx1NWMwZVx1NWMxMFx1NWMxMlx1NWMxM1x1NWMxN1x1NWMxOVx1NWMxYlx1NWMxZVx1NWMxZlx1NWMyMFx1NWMyMVx1NWMyM1x1NWMyNlx1NWMyOFx1NWMyOVx1NWMyYVx1NWMyYlx1NWMyZFx1NWMy''@;'; put 'put ''ZVx1NWMyZlx1NWMzMFx1NWMzMlx1NWMzM1x1NWMzNVx1NWMzNlx1NWMzN1x1NWM0M1x1NWM0NFx1NWM0Nlx1NWM0N1x1NWM0Y1x1NWM0ZFx1NWM1Mlx1NWM1M1x1NWM1NFx1NWM1Nlx1NWM1N1x1NWM1OFx1NWM1YVx1NWM1Ylx1NWM1Y1x1NWM1ZFx1NWM1Zlx1NWM2Mlx1NWM2NFx1NWM2N1x1''@;'; put 'put ''NWM2OFx1NWM2OVx1NWM2YVx1NWM2Ylx1NWM2Y1x1NWM2ZFx1NWM3MFx1NWM3Mlx1NWM3M1x1NWM3NFx1NWM3NVx1NWM3Nlx1NWM3N1x1NWM3OFx1NWM3Ylx1NWM3Y1x1NWM3ZFx1NWM3ZVx1NWM4MFx1NWM4M1x1NWM4NFx1NWM4NVx1NWM4Nlx1NWM4N1x1NWM4OVx1NWM4YVx1NWM4Ylx1NWM4''@;'; put 'put ''ZVx1NWM4Zlx1NWM5Mlx1NWM5M1x1NWM5NVx1NWM5ZFx1NWM5ZVx1NWM5Zlx1NWNhMFx1NWNhMVx1NWNhNFx1NWNhNVx1NWNhNlx1NWNhN1x1NWNhOFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE0MF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtf''@;'; put 'put ''WzE0MF1bcF1dPTM1ODQwK3AsYlszNTg0MCtwXT1fWzE0MF1bcF0pO2ZvcihfWzE0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWNhYVx1NWNhZVx1NWNhZlx1NWNiMFx1NWNiMlx1NWNiNFx1NWNiNlx1NWNiOVx1NWNiYVx1NWNi''@;'; put 'put ''Ylx1NWNiY1x1NWNiZVx1NWNjMFx1NWNjMlx1NWNjM1x1NWNjNVx1NWNjNlx1NWNjN1x1NWNjOFx1NWNjOVx1NWNjYVx1NWNjY1x1NWNjZFx1NWNjZVx1NWNjZlx1NWNkMFx1NWNkMVx1NWNkM1x1NWNkNFx1NWNkNVx1NWNkNlx1NWNkN1x1NWNkOFx1NWNkYVx1NWNkYlx1NWNkY1x1NWNkZFx1''@;'; put 'put ''NWNkZVx1NWNkZlx1NWNlMFx1NWNlMlx1NWNlM1x1NWNlN1x1NWNlOVx1NWNlYlx1NWNlY1x1NWNlZVx1NWNlZlx1NWNmMVx1NWNmMlx1NWNmM1x1NWNmNFx1NWNmNVx1NWNmNlx1NWNmN1x1NWNmOFx1NWNmOVx1NWNmYVx1NWNmY1x1NWNmZFx1NWNmZVx1NWNmZlx1NWQwMFx1ZmZmZFx1NWQw''@;'; put 'put ''MVx1NWQwNFx1NWQwNVx1NWQwOFx1NWQwOVx1NWQwYVx1NWQwYlx1NWQwY1x1NWQwZFx1NWQwZlx1NWQxMFx1NWQxMVx1NWQxMlx1NWQxM1x1NWQxNVx1NWQxN1x1NWQxOFx1NWQxOVx1NWQxYVx1NWQxY1x1NWQxZFx1NWQxZlx1NWQyMFx1NWQyMVx1NWQyMlx1NWQyM1x1NWQyNVx1NWQyOFx1''@;'; put 'put ''NWQyYVx1NWQyYlx1NWQyY1x1NWQyZlx1NWQzMFx1NWQzMVx1NWQzMlx1NWQzM1x1NWQzNVx1NWQzNlx1NWQzN1x1NWQzOFx1NWQzOVx1NWQzYVx1NWQzYlx1NWQzY1x1NWQzZlx1NWQ0MFx1NWQ0MVx1NWQ0Mlx1NWQ0M1x1NWQ0NFx1NWQ0NVx1NWQ0Nlx1NWQ0OFx1NWQ0OVx1NWQ0ZFx1NWQ0''@;'; put 'put ''ZVx1NWQ0Zlx1NWQ1MFx1NWQ1MVx1NWQ1Mlx1NWQ1M1x1NWQ1NFx1NWQ1NVx1NWQ1Nlx1NWQ1N1x1NWQ1OVx1NWQ1YVx1NWQ1Y1x1NWQ1ZVx1NWQ1Zlx1NWQ2MFx1NWQ2MVx1NWQ2Mlx1NWQ2M1x1NWQ2NFx1NWQ2NVx1NWQ2Nlx1NWQ2N1x1NWQ2OFx1NWQ2YVx1NWQ2ZFx1NWQ2ZVx1NWQ3MFx1''@;'; put 'put ''NWQ3MVx1NWQ3Mlx1NWQ3M1x1NWQ3NVx1NWQ3Nlx1NWQ3N1x1NWQ3OFx1NWQ3OVx1NWQ3YVx1NWQ3Ylx1NWQ3Y1x1NWQ3ZFx1NWQ3ZVx1NWQ3Zlx1NWQ4MFx1NWQ4MVx1NWQ4M1x1NWQ4NFx1NWQ4NVx1NWQ4Nlx1NWQ4N1x1NWQ4OFx1NWQ4OVx1NWQ4YVx1NWQ4Ylx1NWQ4Y1x1NWQ4ZFx1NWQ4''@;'; put 'put ''ZVx1NWQ4Zlx1NWQ5MFx1NWQ5MVx1NWQ5Mlx1NWQ5M1x1NWQ5NFx1NWQ5NVx1NWQ5Nlx1NWQ5N1x1NWQ5OFx1NWQ5YVx1NWQ5Ylx1NWQ5Y1x1NWQ5ZVx1NWQ5Zlx1NWRhMFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE0MV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQxXVtwXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoSVtfWzE0MV1bcF1dPTM2MDk2K3AsYlszNjA5NitwXT1fWzE0MV1bcF0pO2ZvcihfWzE0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWRhMVx1NWRhMlx1NWRhM1x1NWRhNFx1NWRhNVx1NWRhNlx1NWRhN1x1NWRh''@;'; put 'put ''OFx1NWRhOVx1NWRhYVx1NWRhYlx1NWRhY1x1NWRhZFx1NWRhZVx1NWRhZlx1NWRiMFx1NWRiMVx1NWRiMlx1NWRiM1x1NWRiNFx1NWRiNVx1NWRiNlx1NWRiOFx1NWRiOVx1NWRiYVx1NWRiYlx1NWRiY1x1NWRiZFx1NWRiZVx1NWRiZlx1NWRjMFx1NWRjMVx1NWRjMlx1NWRjM1x1NWRjNFx1''@;'; put 'put ''NWRjNlx1NWRjN1x1NWRjOFx1NWRjOVx1NWRjYVx1NWRjYlx1NWRjY1x1NWRjZVx1NWRjZlx1NWRkMFx1NWRkMVx1NWRkMlx1NWRkM1x1NWRkNFx1NWRkNVx1NWRkNlx1NWRkN1x1NWRkOFx1NWRkOVx1NWRkYVx1NWRkY1x1NWRkZlx1NWRlMFx1NWRlM1x1NWRlNFx1NWRlYVx1NWRlY1x1NWRl''@;'; put 'put ''ZFx1ZmZmZFx1NWRmMFx1NWRmNVx1NWRmNlx1NWRmOFx1NWRmOVx1NWRmYVx1NWRmYlx1NWRmY1x1NWRmZlx1NWUwMFx1NWUwNFx1NWUwN1x1NWUwOVx1NWUwYVx1NWUwYlx1NWUwZFx1NWUwZVx1NWUxMlx1NWUxM1x1NWUxN1x1NWUxZVx1NWUxZlx1NWUyMFx1NWUyMVx1NWUyMlx1NWUyM1x1''@;'; put 'put ''NWUyNFx1NWUyNVx1NWUyOFx1NWUyOVx1NWUyYVx1NWUyYlx1NWUyY1x1NWUyZlx1NWUzMFx1NWUzMlx1NWUzM1x1NWUzNFx1NWUzNVx1NWUzNlx1NWUzOVx1NWUzYVx1NWUzZVx1NWUzZlx1NWU0MFx1NWU0MVx1NWU0M1x1NWU0Nlx1NWU0N1x1NWU0OFx1NWU0OVx1NWU0YVx1NWU0Ylx1NWU0''@;'; put 'put ''ZFx1NWU0ZVx1NWU0Zlx1NWU1MFx1NWU1MVx1NWU1Mlx1NWU1M1x1NWU1Nlx1NWU1N1x1NWU1OFx1NWU1OVx1NWU1YVx1NWU1Y1x1NWU1ZFx1NWU1Zlx1NWU2MFx1NWU2M1x1NWU2NFx1NWU2NVx1NWU2Nlx1NWU2N1x1NWU2OFx1NWU2OVx1NWU2YVx1NWU2Ylx1NWU2Y1x1NWU2ZFx1NWU2ZVx1''@;'; put 'put ''NWU2Zlx1NWU3MFx1NWU3MVx1NWU3NVx1NWU3N1x1NWU3OVx1NWU3ZVx1NWU4MVx1NWU4Mlx1NWU4M1x1NWU4NVx1NWU4OFx1NWU4OVx1NWU4Y1x1NWU4ZFx1NWU4ZVx1NWU5Mlx1NWU5OFx1NWU5Ylx1NWU5ZFx1NWVhMVx1NWVhMlx1NWVhM1x1NWVhNFx1NWVhOFx1NWVhOVx1NWVhYVx1NWVh''@;'; put 'put ''Ylx1NWVhY1x1NWVhZVx1NWVhZlx1NWViMFx1NWViMVx1NWViMlx1NWViNFx1NWViYVx1NWViYlx1NWViY1x1NWViZFx1NWViZlx1NWVjMFx1NWVjMVx1NWVjMlx1NWVjM1x1NWVjNFx1NWVjNVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE0Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQy''@;'; put 'put ''XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0Ml1bcF1dPTM2MzUyK3AsYlszNjM1MitwXT1fWzE0Ml1bcF0pO2ZvcihfWzE0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWVjNlx1NWVjN1x1NWVjOFx1NWVjYlx1NWVjY1x1NWVj''@;'; put 'put ''ZFx1NWVjZVx1NWVjZlx1NWVkMFx1NWVkNFx1NWVkNVx1NWVkN1x1NWVkOFx1NWVkOVx1NWVkYVx1NWVkY1x1NWVkZFx1NWVkZVx1NWVkZlx1NWVlMFx1NWVlMVx1NWVlMlx1NWVlM1x1NWVlNFx1NWVlNVx1NWVlNlx1NWVlN1x1NWVlOVx1NWVlYlx1NWVlY1x1NWVlZFx1NWVlZVx1NWVlZlx1''@;'; put 'put ''NWVmMFx1NWVmMVx1NWVmMlx1NWVmM1x1NWVmNVx1NWVmOFx1NWVmOVx1NWVmYlx1NWVmY1x1NWVmZFx1NWYwNVx1NWYwNlx1NWYwN1x1NWYwOVx1NWYwY1x1NWYwZFx1NWYwZVx1NWYxMFx1NWYxMlx1NWYxNFx1NWYxNlx1NWYxOVx1NWYxYVx1NWYxY1x1NWYxZFx1NWYxZVx1NWYyMVx1NWYy''@;'; put 'put ''Mlx1NWYyM1x1NWYyNFx1ZmZmZFx1NWYyOFx1NWYyYlx1NWYyY1x1NWYyZVx1NWYzMFx1NWYzMlx1NWYzM1x1NWYzNFx1NWYzNVx1NWYzNlx1NWYzN1x1NWYzOFx1NWYzYlx1NWYzZFx1NWYzZVx1NWYzZlx1NWY0MVx1NWY0Mlx1NWY0M1x1NWY0NFx1NWY0NVx1NWY0Nlx1NWY0N1x1NWY0OFx1''@;'; put 'put ''NWY0OVx1NWY0YVx1NWY0Ylx1NWY0Y1x1NWY0ZFx1NWY0ZVx1NWY0Zlx1NWY1MVx1NWY1NFx1NWY1OVx1NWY1YVx1NWY1Ylx1NWY1Y1x1NWY1ZVx1NWY1Zlx1NWY2MFx1NWY2M1x1NWY2NVx1NWY2N1x1NWY2OFx1NWY2Ylx1NWY2ZVx1NWY2Zlx1NWY3Mlx1NWY3NFx1NWY3NVx1NWY3Nlx1NWY3''@;'; put 'put ''OFx1NWY3YVx1NWY3ZFx1NWY3ZVx1NWY3Zlx1NWY4M1x1NWY4Nlx1NWY4ZFx1NWY4ZVx1NWY4Zlx1NWY5MVx1NWY5M1x1NWY5NFx1NWY5Nlx1NWY5YVx1NWY5Ylx1NWY5ZFx1NWY5ZVx1NWY5Zlx1NWZhMFx1NWZhMlx1NWZhM1x1NWZhNFx1NWZhNVx1NWZhNlx1NWZhN1x1NWZhOVx1NWZhYlx1''@;'; put 'put ''NWZhY1x1NWZhZlx1NWZiMFx1NWZiMVx1NWZiMlx1NWZiM1x1NWZiNFx1NWZiNlx1NWZiOFx1NWZiOVx1NWZiYVx1NWZiYlx1NWZiZVx1NWZiZlx1NWZjMFx1NWZjMVx1NWZjMlx1NWZjN1x1NWZjOFx1NWZjYVx1NWZjYlx1NWZjZVx1NWZkM1x1NWZkNFx1NWZkNVx1NWZkYVx1NWZkYlx1NWZk''@;'; put 'put ''Y1x1NWZkZVx1NWZkZlx1NWZlMlx1NWZlM1x1NWZlNVx1NWZlNlx1NWZlOFx1NWZlOVx1NWZlY1x1NWZlZlx1NWZmMFx1NWZmMlx1NWZmM1x1NWZmNFx1NWZmNlx1NWZmN1x1NWZmOVx1NWZmYVx1NWZmY1x1NjAwN1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE0M10ubGVuZ3RoOysrcCk2''@;'; put 'put ''NTUzMyE9PV9bMTQzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0M11bcF1dPTM2NjA4K3AsYlszNjYwOCtwXT1fWzE0M11bcF0pO2ZvcihfWzE0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjAwOFx1NjAwOVx1NjAwYlx1NjAw''@;'; put 'put ''Y1x1NjAxMFx1NjAxMVx1NjAxM1x1NjAxN1x1NjAxOFx1NjAxYVx1NjAxZVx1NjAxZlx1NjAyMlx1NjAyM1x1NjAyNFx1NjAyY1x1NjAyZFx1NjAyZVx1NjAzMFx1NjAzMVx1NjAzMlx1NjAzM1x1NjAzNFx1NjAzNlx1NjAzN1x1NjAzOFx1NjAzOVx1NjAzYVx1NjAzZFx1NjAzZVx1NjA0MFx1''@;'; put 'put ''NjA0NFx1NjA0NVx1NjA0Nlx1NjA0N1x1NjA0OFx1NjA0OVx1NjA0YVx1NjA0Y1x1NjA0ZVx1NjA0Zlx1NjA1MVx1NjA1M1x1NjA1NFx1NjA1Nlx1NjA1N1x1NjA1OFx1NjA1Ylx1NjA1Y1x1NjA1ZVx1NjA1Zlx1NjA2MFx1NjA2MVx1NjA2NVx1NjA2Nlx1NjA2ZVx1NjA3MVx1NjA3Mlx1NjA3''@;'; put 'put ''NFx1NjA3NVx1NjA3N1x1NjA3ZVx1NjA4MFx1ZmZmZFx1NjA4MVx1NjA4Mlx1NjA4NVx1NjA4Nlx1NjA4N1x1NjA4OFx1NjA4YVx1NjA4Ylx1NjA4ZVx1NjA4Zlx1NjA5MFx1NjA5MVx1NjA5M1x1NjA5NVx1NjA5N1x1NjA5OFx1NjA5OVx1NjA5Y1x1NjA5ZVx1NjBhMVx1NjBhMlx1NjBhNFx1''@;'; put 'put ''NjBhNVx1NjBhN1x1NjBhOVx1NjBhYVx1NjBhZVx1NjBiMFx1NjBiM1x1NjBiNVx1NjBiNlx1NjBiN1x1NjBiOVx1NjBiYVx1NjBiZFx1NjBiZVx1NjBiZlx1NjBjMFx1NjBjMVx1NjBjMlx1NjBjM1x1NjBjNFx1NjBjN1x1NjBjOFx1NjBjOVx1NjBjY1x1NjBjZFx1NjBjZVx1NjBjZlx1NjBk''@;'; put 'put ''MFx1NjBkMlx1NjBkM1x1NjBkNFx1NjBkNlx1NjBkN1x1NjBkOVx1NjBkYlx1NjBkZVx1NjBlMVx1NjBlMlx1NjBlM1x1NjBlNFx1NjBlNVx1NjBlYVx1NjBmMVx1NjBmMlx1NjBmNVx1NjBmN1x1NjBmOFx1NjBmYlx1NjBmY1x1NjBmZFx1NjBmZVx1NjBmZlx1NjEwMlx1NjEwM1x1NjEwNFx1''@;'; put 'put ''NjEwNVx1NjEwN1x1NjEwYVx1NjEwYlx1NjEwY1x1NjExMFx1NjExMVx1NjExMlx1NjExM1x1NjExNFx1NjExNlx1NjExN1x1NjExOFx1NjExOVx1NjExYlx1NjExY1x1NjExZFx1NjExZVx1NjEyMVx1NjEyMlx1NjEyNVx1NjEyOFx1NjEyOVx1NjEyYVx1NjEyY1x1NjEyZFx1NjEyZVx1NjEy''@;'; put 'put ''Zlx1NjEzMFx1NjEzMVx1NjEzMlx1NjEzM1x1NjEzNFx1NjEzNVx1NjEzNlx1NjEzN1x1NjEzOFx1NjEzOVx1NjEzYVx1NjEzYlx1NjEzY1x1NjEzZFx1NjEzZVx1NjE0MFx1NjE0MVx1NjE0Mlx1NjE0M1x1NjE0NFx1NjE0NVx1NjE0Nlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE0NF0u''@;'; put 'put ''bGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQ0XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0NF1bcF1dPTM2ODY0K3AsYlszNjg2NCtwXT1fWzE0NF1bcF0pO2ZvcihfWzE0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjE0N1x1NjE0''@;'; put 'put ''OVx1NjE0Ylx1NjE0ZFx1NjE0Zlx1NjE1MFx1NjE1Mlx1NjE1M1x1NjE1NFx1NjE1Nlx1NjE1N1x1NjE1OFx1NjE1OVx1NjE1YVx1NjE1Ylx1NjE1Y1x1NjE1ZVx1NjE1Zlx1NjE2MFx1NjE2MVx1NjE2M1x1NjE2NFx1NjE2NVx1NjE2Nlx1NjE2OVx1NjE2YVx1NjE2Ylx1NjE2Y1x1NjE2ZFx1''@;'; put 'put ''NjE2ZVx1NjE2Zlx1NjE3MVx1NjE3Mlx1NjE3M1x1NjE3NFx1NjE3Nlx1NjE3OFx1NjE3OVx1NjE3YVx1NjE3Ylx1NjE3Y1x1NjE3ZFx1NjE3ZVx1NjE3Zlx1NjE4MFx1NjE4MVx1NjE4Mlx1NjE4M1x1NjE4NFx1NjE4NVx1NjE4Nlx1NjE4N1x1NjE4OFx1NjE4OVx1NjE4YVx1NjE4Y1x1NjE4''@;'; put 'put ''ZFx1NjE4Zlx1NjE5MFx1NjE5MVx1NjE5Mlx1NjE5M1x1NjE5NVx1ZmZmZFx1NjE5Nlx1NjE5N1x1NjE5OFx1NjE5OVx1NjE5YVx1NjE5Ylx1NjE5Y1x1NjE5ZVx1NjE5Zlx1NjFhMFx1NjFhMVx1NjFhMlx1NjFhM1x1NjFhNFx1NjFhNVx1NjFhNlx1NjFhYVx1NjFhYlx1NjFhZFx1NjFhZVx1''@;'; put 'put ''NjFhZlx1NjFiMFx1NjFiMVx1NjFiMlx1NjFiM1x1NjFiNFx1NjFiNVx1NjFiNlx1NjFiOFx1NjFiOVx1NjFiYVx1NjFiYlx1NjFiY1x1NjFiZFx1NjFiZlx1NjFjMFx1NjFjMVx1NjFjM1x1NjFjNFx1NjFjNVx1NjFjNlx1NjFjN1x1NjFjOVx1NjFjY1x1NjFjZFx1NjFjZVx1NjFjZlx1NjFk''@;'; put 'put ''MFx1NjFkM1x1NjFkNVx1NjFkNlx1NjFkN1x1NjFkOFx1NjFkOVx1NjFkYVx1NjFkYlx1NjFkY1x1NjFkZFx1NjFkZVx1NjFkZlx1NjFlMFx1NjFlMVx1NjFlMlx1NjFlM1x1NjFlNFx1NjFlNVx1NjFlN1x1NjFlOFx1NjFlOVx1NjFlYVx1NjFlYlx1NjFlY1x1NjFlZFx1NjFlZVx1NjFlZlx1''@;'; put 'put ''NjFmMFx1NjFmMVx1NjFmMlx1NjFmM1x1NjFmNFx1NjFmNlx1NjFmN1x1NjFmOFx1NjFmOVx1NjFmYVx1NjFmYlx1NjFmY1x1NjFmZFx1NjFmZVx1NjIwMFx1NjIwMVx1NjIwMlx1NjIwM1x1NjIwNFx1NjIwNVx1NjIwN1x1NjIwOVx1NjIxM1x1NjIxNFx1NjIxOVx1NjIxY1x1NjIxZFx1NjIx''@;'; put 'put ''ZVx1NjIyMFx1NjIyM1x1NjIyNlx1NjIyN1x1NjIyOFx1NjIyOVx1NjIyYlx1NjIyZFx1NjIyZlx1NjIzMFx1NjIzMVx1NjIzMlx1NjIzNVx1NjIzNlx1NjIzOFx1NjIzOVx1NjIzYVx1NjIzYlx1NjIzY1x1NjI0Mlx1NjI0NFx1NjI0NVx1NjI0Nlx1NjI0YVx1ZmZmZCIuc3BsaXQoIiIpLHA9''@;'; put 'put ''MDtwIT1fWzE0NV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQ1XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0NV1bcF1dPTM3MTIwK3AsYlszNzEyMCtwXT1fWzE0NV1bcF0pO2ZvcihfWzE0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1NjI0Zlx1NjI1MFx1NjI1NVx1NjI1Nlx1NjI1N1x1NjI1OVx1NjI1YVx1NjI1Y1x1NjI1ZFx1NjI1ZVx1NjI1Zlx1NjI2MFx1NjI2MVx1NjI2Mlx1NjI2NFx1NjI2NVx1NjI2OFx1NjI3MVx1NjI3Mlx1NjI3NFx1NjI3NVx1NjI3N1x1NjI3OFx1NjI3YVx1NjI3Ylx1NjI3ZFx1NjI4MVx1''@;'; put 'put ''NjI4Mlx1NjI4M1x1NjI4NVx1NjI4Nlx1NjI4N1x1NjI4OFx1NjI4Ylx1NjI4Y1x1NjI4ZFx1NjI4ZVx1NjI4Zlx1NjI5MFx1NjI5NFx1NjI5OVx1NjI5Y1x1NjI5ZFx1NjI5ZVx1NjJhM1x1NjJhNlx1NjJhN1x1NjJhOVx1NjJhYVx1NjJhZFx1NjJhZVx1NjJhZlx1NjJiMFx1NjJiMlx1NjJi''@;'; put 'put ''M1x1NjJiNFx1NjJiNlx1NjJiN1x1NjJiOFx1NjJiYVx1NjJiZVx1NjJjMFx1NjJjMVx1ZmZmZFx1NjJjM1x1NjJjYlx1NjJjZlx1NjJkMVx1NjJkNVx1NjJkZFx1NjJkZVx1NjJlMFx1NjJlMVx1NjJlNFx1NjJlYVx1NjJlYlx1NjJmMFx1NjJmMlx1NjJmNVx1NjJmOFx1NjJmOVx1NjJmYVx1''@;'; put 'put ''NjJmYlx1NjMwMFx1NjMwM1x1NjMwNFx1NjMwNVx1NjMwNlx1NjMwYVx1NjMwYlx1NjMwY1x1NjMwZFx1NjMwZlx1NjMxMFx1NjMxMlx1NjMxM1x1NjMxNFx1NjMxNVx1NjMxN1x1NjMxOFx1NjMxOVx1NjMxY1x1NjMyNlx1NjMyN1x1NjMyOVx1NjMyY1x1NjMyZFx1NjMyZVx1NjMzMFx1NjMz''@;'; put 'put ''MVx1NjMzM1x1NjMzNFx1NjMzNVx1NjMzNlx1NjMzN1x1NjMzOFx1NjMzYlx1NjMzY1x1NjMzZVx1NjMzZlx1NjM0MFx1NjM0MVx1NjM0NFx1NjM0N1x1NjM0OFx1NjM0YVx1NjM1MVx1NjM1Mlx1NjM1M1x1NjM1NFx1NjM1Nlx1NjM1N1x1NjM1OFx1NjM1OVx1NjM1YVx1NjM1Ylx1NjM1Y1x1''@;'; put 'put ''NjM1ZFx1NjM2MFx1NjM2NFx1NjM2NVx1NjM2Nlx1NjM2OFx1NjM2YVx1NjM2Ylx1NjM2Y1x1NjM2Zlx1NjM3MFx1NjM3Mlx1NjM3M1x1NjM3NFx1NjM3NVx1NjM3OFx1NjM3OVx1NjM3Y1x1NjM3ZFx1NjM3ZVx1NjM3Zlx1NjM4MVx1NjM4M1x1NjM4NFx1NjM4NVx1NjM4Nlx1NjM4Ylx1NjM4''@;'; put 'put ''ZFx1NjM5MVx1NjM5M1x1NjM5NFx1NjM5NVx1NjM5N1x1NjM5OVx1NjM5YVx1NjM5Ylx1NjM5Y1x1NjM5ZFx1NjM5ZVx1NjM5Zlx1NjNhMVx1NjNhNFx1NjNhNlx1NjNhYlx1NjNhZlx1NjNiMVx1NjNiMlx1NjNiNVx1NjNiNlx1NjNiOVx1NjNiYlx1NjNiZFx1NjNiZlx1NjNjMFx1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLHA9MDtwIT1fWzE0Nl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQ2XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0Nl1bcF1dPTM3Mzc2K3AsYlszNzM3NitwXT1fWzE0Nl1bcF0pO2ZvcihfWzE0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1NjNjMVx1NjNjMlx1NjNjM1x1NjNjNVx1NjNjN1x1NjNjOFx1NjNjYVx1NjNjYlx1NjNjY1x1NjNkMVx1NjNkM1x1NjNkNFx1NjNkNVx1NjNkN1x1NjNkOFx1NjNkOVx1NjNkYVx1NjNkYlx1NjNkY1x1NjNkZFx1NjNkZlx1NjNlMlx1NjNlNFx1NjNlNVx1NjNlNlx1''@;'; put 'put ''NjNlN1x1NjNlOFx1NjNlYlx1NjNlY1x1NjNlZVx1NjNlZlx1NjNmMFx1NjNmMVx1NjNmM1x1NjNmNVx1NjNmN1x1NjNmOVx1NjNmYVx1NjNmYlx1NjNmY1x1NjNmZVx1NjQwM1x1NjQwNFx1NjQwNlx1NjQwN1x1NjQwOFx1NjQwOVx1NjQwYVx1NjQwZFx1NjQwZVx1NjQxMVx1NjQxMlx1NjQx''@;'; put 'put ''NVx1NjQxNlx1NjQxN1x1NjQxOFx1NjQxOVx1NjQxYVx1NjQxZFx1NjQxZlx1NjQyMlx1NjQyM1x1NjQyNFx1ZmZmZFx1NjQyNVx1NjQyN1x1NjQyOFx1NjQyOVx1NjQyYlx1NjQyZVx1NjQyZlx1NjQzMFx1NjQzMVx1NjQzMlx1NjQzM1x1NjQzNVx1NjQzNlx1NjQzN1x1NjQzOFx1NjQzOVx1''@;'; put 'put ''NjQzYlx1NjQzY1x1NjQzZVx1NjQ0MFx1NjQ0Mlx1NjQ0M1x1NjQ0OVx1NjQ0Ylx1NjQ0Y1x1NjQ0ZFx1NjQ0ZVx1NjQ0Zlx1NjQ1MFx1NjQ1MVx1NjQ1M1x1NjQ1NVx1NjQ1Nlx1NjQ1N1x1NjQ1OVx1NjQ1YVx1NjQ1Ylx1NjQ1Y1x1NjQ1ZFx1NjQ1Zlx1NjQ2MFx1NjQ2MVx1NjQ2Mlx1NjQ2''@;'; put 'put ''M1x1NjQ2NFx1NjQ2NVx1NjQ2Nlx1NjQ2OFx1NjQ2YVx1NjQ2Ylx1NjQ2Y1x1NjQ2ZVx1NjQ2Zlx1NjQ3MFx1NjQ3MVx1NjQ3Mlx1NjQ3M1x1NjQ3NFx1NjQ3NVx1NjQ3Nlx1NjQ3N1x1NjQ3Ylx1NjQ3Y1x1NjQ3ZFx1NjQ3ZVx1NjQ3Zlx1NjQ4MFx1NjQ4MVx1NjQ4M1x1NjQ4Nlx1NjQ4OFx1''@;'; put 'put ''NjQ4OVx1NjQ4YVx1NjQ4Ylx1NjQ4Y1x1NjQ4ZFx1NjQ4ZVx1NjQ4Zlx1NjQ5MFx1NjQ5M1x1NjQ5NFx1NjQ5N1x1NjQ5OFx1NjQ5YVx1NjQ5Ylx1NjQ5Y1x1NjQ5ZFx1NjQ5Zlx1NjRhMFx1NjRhMVx1NjRhMlx1NjRhM1x1NjRhNVx1NjRhNlx1NjRhN1x1NjRhOFx1NjRhYVx1NjRhYlx1NjRh''@;'; put 'put ''Zlx1NjRiMVx1NjRiMlx1NjRiM1x1NjRiNFx1NjRiNlx1NjRiOVx1NjRiYlx1NjRiZFx1NjRiZVx1NjRiZlx1NjRjMVx1NjRjM1x1NjRjNFx1NjRjNlx1NjRjN1x1NjRjOFx1NjRjOVx1NjRjYVx1NjRjYlx1NjRjY1x1NjRjZlx1NjRkMVx1NjRkM1x1NjRkNFx1NjRkNVx1NjRkNlx1NjRkOVx1''@;'; put 'put ''NjRkYVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE0N10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQ3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0N11bcF1dPTM3NjMyK3AsYlszNzYzMitwXT1fWzE0N11bcF0pO2ZvcihfWzE0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjRkYlx1NjRkY1x1NjRkZFx1NjRkZlx1NjRlMFx1NjRlMVx1NjRlM1x1NjRlNVx1NjRlN1x1NjRlOFx1NjRlOVx1NjRlYVx1NjRlYlx1NjRlY1x1NjRlZFx1NjRlZVx1NjRlZlx1NjRmMFx1NjRmMVx1NjRmMlx1NjRmM1x1NjRmNFx1NjRmNVx1''@;'; put 'put ''NjRmNlx1NjRmN1x1NjRmOFx1NjRmOVx1NjRmYVx1NjRmYlx1NjRmY1x1NjRmZFx1NjRmZVx1NjRmZlx1NjUwMVx1NjUwMlx1NjUwM1x1NjUwNFx1NjUwNVx1NjUwNlx1NjUwN1x1NjUwOFx1NjUwYVx1NjUwYlx1NjUwY1x1NjUwZFx1NjUwZVx1NjUwZlx1NjUxMFx1NjUxMVx1NjUxM1x1NjUx''@;'; put 'put ''NFx1NjUxNVx1NjUxNlx1NjUxN1x1NjUxOVx1NjUxYVx1NjUxYlx1NjUxY1x1NjUxZFx1NjUxZVx1NjUxZlx1NjUyMFx1NjUyMVx1ZmZmZFx1NjUyMlx1NjUyM1x1NjUyNFx1NjUyNlx1NjUyN1x1NjUyOFx1NjUyOVx1NjUyYVx1NjUyY1x1NjUyZFx1NjUzMFx1NjUzMVx1NjUzMlx1NjUzM1x1''@;'; put 'put ''NjUzN1x1NjUzYVx1NjUzY1x1NjUzZFx1NjU0MFx1NjU0MVx1NjU0Mlx1NjU0M1x1NjU0NFx1NjU0Nlx1NjU0N1x1NjU0YVx1NjU0Ylx1NjU0ZFx1NjU0ZVx1NjU1MFx1NjU1Mlx1NjU1M1x1NjU1NFx1NjU1N1x1NjU1OFx1NjU1YVx1NjU1Y1x1NjU1Zlx1NjU2MFx1NjU2MVx1NjU2NFx1NjU2''@;'; put 'put ''NVx1NjU2N1x1NjU2OFx1NjU2OVx1NjU2YVx1NjU2ZFx1NjU2ZVx1NjU2Zlx1NjU3MVx1NjU3M1x1NjU3NVx1NjU3Nlx1NjU3OFx1NjU3OVx1NjU3YVx1NjU3Ylx1NjU3Y1x1NjU3ZFx1NjU3ZVx1NjU3Zlx1NjU4MFx1NjU4MVx1NjU4Mlx1NjU4M1x1NjU4NFx1NjU4NVx1NjU4Nlx1NjU4OFx1''@;'; put 'put ''NjU4OVx1NjU4YVx1NjU4ZFx1NjU4ZVx1NjU4Zlx1NjU5Mlx1NjU5NFx1NjU5NVx1NjU5Nlx1NjU5OFx1NjU5YVx1NjU5ZFx1NjU5ZVx1NjVhMFx1NjVhMlx1NjVhM1x1NjVhNlx1NjVhOFx1NjVhYVx1NjVhY1x1NjVhZVx1NjViMVx1NjViMlx1NjViM1x1NjViNFx1NjViNVx1NjViNlx1NjVi''@;'; put 'put ''N1x1NjViOFx1NjViYVx1NjViYlx1NjViZVx1NjViZlx1NjVjMFx1NjVjMlx1NjVjN1x1NjVjOFx1NjVjOVx1NjVjYVx1NjVjZFx1NjVkMFx1NjVkMVx1NjVkM1x1NjVkNFx1NjVkNVx1NjVkOFx1NjVkOVx1NjVkYVx1NjVkYlx1NjVkY1x1NjVkZFx1NjVkZVx1NjVkZlx1NjVlMVx1NjVlM1x1''@;'; put 'put ''NjVlNFx1NjVlYVx1NjVlYlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE0OF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQ4XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0OF1bcF1dPTM3ODg4K3AsYlszNzg4OCtwXT1fWzE0OF1bcF0pO2ZvcihfWzE0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjVmMlx1NjVmM1x1NjVmNFx1NjVmNVx1NjVmOFx1NjVmOVx1NjVmYlx1NjVmY1x1NjVmZFx1NjVmZVx1NjVmZlx1NjYwMVx1NjYwNFx1NjYwNVx1NjYwN1x1NjYwOFx1NjYwOVx1NjYwYlx1NjYwZFx1NjYxMFx1NjYxMVx1''@;'; put 'put ''NjYxMlx1NjYxNlx1NjYxN1x1NjYxOFx1NjYxYVx1NjYxYlx1NjYxY1x1NjYxZVx1NjYyMVx1NjYyMlx1NjYyM1x1NjYyNFx1NjYyNlx1NjYyOVx1NjYyYVx1NjYyYlx1NjYyY1x1NjYyZVx1NjYzMFx1NjYzMlx1NjYzM1x1NjYzN1x1NjYzOFx1NjYzOVx1NjYzYVx1NjYzYlx1NjYzZFx1NjYz''@;'; put 'put ''Zlx1NjY0MFx1NjY0Mlx1NjY0NFx1NjY0NVx1NjY0Nlx1NjY0N1x1NjY0OFx1NjY0OVx1NjY0YVx1NjY0ZFx1NjY0ZVx1NjY1MFx1NjY1MVx1NjY1OFx1ZmZmZFx1NjY1OVx1NjY1Ylx1NjY1Y1x1NjY1ZFx1NjY1ZVx1NjY2MFx1NjY2Mlx1NjY2M1x1NjY2NVx1NjY2N1x1NjY2OVx1NjY2YVx1''@;'; put 'put ''NjY2Ylx1NjY2Y1x1NjY2ZFx1NjY3MVx1NjY3Mlx1NjY3M1x1NjY3NVx1NjY3OFx1NjY3OVx1NjY3Ylx1NjY3Y1x1NjY3ZFx1NjY3Zlx1NjY4MFx1NjY4MVx1NjY4M1x1NjY4NVx1NjY4Nlx1NjY4OFx1NjY4OVx1NjY4YVx1NjY4Ylx1NjY4ZFx1NjY4ZVx1NjY4Zlx1NjY5MFx1NjY5Mlx1NjY5''@;'; put 'put ''M1x1NjY5NFx1NjY5NVx1NjY5OFx1NjY5OVx1NjY5YVx1NjY5Ylx1NjY5Y1x1NjY5ZVx1NjY5Zlx1NjZhMFx1NjZhMVx1NjZhMlx1NjZhM1x1NjZhNFx1NjZhNVx1NjZhNlx1NjZhOVx1NjZhYVx1NjZhYlx1NjZhY1x1NjZhZFx1NjZhZlx1NjZiMFx1NjZiMVx1NjZiMlx1NjZiM1x1NjZiNVx1''@;'; put 'put ''NjZiNlx1NjZiN1x1NjZiOFx1NjZiYVx1NjZiYlx1NjZiY1x1NjZiZFx1NjZiZlx1NjZjMFx1NjZjMVx1NjZjMlx1NjZjM1x1NjZjNFx1NjZjNVx1NjZjNlx1NjZjN1x1NjZjOFx1NjZjOVx1NjZjYVx1NjZjYlx1NjZjY1x1NjZjZFx1NjZjZVx1NjZjZlx1NjZkMFx1NjZkMVx1NjZkMlx1NjZk''@;'; put 'put ''M1x1NjZkNFx1NjZkNVx1NjZkNlx1NjZkN1x1NjZkOFx1NjZkYVx1NjZkZVx1NjZkZlx1NjZlMFx1NjZlMVx1NjZlMlx1NjZlM1x1NjZlNFx1NjZlNVx1NjZlN1x1NjZlOFx1NjZlYVx1NjZlYlx1NjZlY1x1NjZlZFx1NjZlZVx1NjZlZlx1NjZmMVx1NjZmNVx1NjZmNlx1NjZmOFx1NjZmYVx1''@;'; put 'put ''NjZmYlx1NjZmZFx1NjcwMVx1NjcwMlx1NjcwM1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE0OV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQ5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0OV1bcF1dPTM4MTQ0K3AsYlszODE0NCtwXT1fWzE0OV1bcF0pO2ZvcihfWzE1MF09Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjcwNFx1NjcwNVx1NjcwNlx1NjcwN1x1NjcwY1x1NjcwZVx1NjcwZlx1NjcxMVx1NjcxMlx1NjcxM1x1NjcxNlx1NjcxOFx1NjcxOVx1NjcxYVx1NjcxY1x1NjcxZVx1NjcyMFx1NjcyMVx1NjcyMlx1''@;'; put 'put ''NjcyM1x1NjcyNFx1NjcyNVx1NjcyN1x1NjcyOVx1NjcyZVx1NjczMFx1NjczMlx1NjczM1x1NjczNlx1NjczN1x1NjczOFx1NjczOVx1NjczYlx1NjczY1x1NjczZVx1NjczZlx1Njc0MVx1Njc0NFx1Njc0NVx1Njc0N1x1Njc0YVx1Njc0Ylx1Njc0ZFx1Njc1Mlx1Njc1NFx1Njc1NVx1Njc1''@;'; put 'put ''N1x1Njc1OFx1Njc1OVx1Njc1YVx1Njc1Ylx1Njc1ZFx1Njc2Mlx1Njc2M1x1Njc2NFx1Njc2Nlx1Njc2N1x1Njc2Ylx1Njc2Y1x1Njc2ZVx1Njc3MVx1Njc3NFx1Njc3Nlx1ZmZmZFx1Njc3OFx1Njc3OVx1Njc3YVx1Njc3Ylx1Njc3ZFx1Njc4MFx1Njc4Mlx1Njc4M1x1Njc4NVx1Njc4Nlx1''@;'; put 'put ''Njc4OFx1Njc4YVx1Njc4Y1x1Njc4ZFx1Njc4ZVx1Njc4Zlx1Njc5MVx1Njc5Mlx1Njc5M1x1Njc5NFx1Njc5Nlx1Njc5OVx1Njc5Ylx1Njc5Zlx1NjdhMFx1NjdhMVx1NjdhNFx1NjdhNlx1NjdhOVx1NjdhY1x1NjdhZVx1NjdiMVx1NjdiMlx1NjdiNFx1NjdiOVx1NjdiYVx1NjdiYlx1Njdi''@;'; put 'put ''Y1x1NjdiZFx1NjdiZVx1NjdiZlx1NjdjMFx1NjdjMlx1NjdjNVx1NjdjNlx1NjdjN1x1NjdjOFx1NjdjOVx1NjdjYVx1NjdjYlx1NjdjY1x1NjdjZFx1NjdjZVx1NjdkNVx1NjdkNlx1NjdkN1x1NjdkYlx1NjdkZlx1NjdlMVx1NjdlM1x1NjdlNFx1NjdlNlx1NjdlN1x1NjdlOFx1NjdlYVx1''@;'; put 'put ''NjdlYlx1NjdlZFx1NjdlZVx1NjdmMlx1NjdmNVx1NjdmNlx1NjdmN1x1NjdmOFx1NjdmOVx1NjdmYVx1NjdmYlx1NjdmY1x1NjdmZVx1NjgwMVx1NjgwMlx1NjgwM1x1NjgwNFx1NjgwNlx1NjgwZFx1NjgxMFx1NjgxMlx1NjgxNFx1NjgxNVx1NjgxOFx1NjgxOVx1NjgxYVx1NjgxYlx1Njgx''@;'; put 'put ''Y1x1NjgxZVx1NjgxZlx1NjgyMFx1NjgyMlx1NjgyM1x1NjgyNFx1NjgyNVx1NjgyNlx1NjgyN1x1NjgyOFx1NjgyYlx1NjgyY1x1NjgyZFx1NjgyZVx1NjgyZlx1NjgzMFx1NjgzMVx1NjgzNFx1NjgzNVx1NjgzNlx1NjgzYVx1NjgzYlx1NjgzZlx1Njg0N1x1Njg0Ylx1Njg0ZFx1Njg0Zlx1''@;'; put 'put ''Njg1Mlx1Njg1Nlx1Njg1N1x1Njg1OFx1Njg1OVx1Njg1YVx1Njg1Ylx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1MF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTUwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1MF1bcF1dPTM4NDAwK3AsYlszODQwMCtwXT1fWzE1MF1bcF0pO2Zvcihf''@;'; put 'put ''WzE1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njg1Y1x1Njg1ZFx1Njg1ZVx1Njg1Zlx1Njg2YVx1Njg2Y1x1Njg2ZFx1Njg2ZVx1Njg2Zlx1Njg3MFx1Njg3MVx1Njg3Mlx1Njg3M1x1Njg3NVx1Njg3OFx1Njg3OVx1Njg3YVx1''@;'; put 'put ''Njg3Ylx1Njg3Y1x1Njg3ZFx1Njg3ZVx1Njg3Zlx1Njg4MFx1Njg4Mlx1Njg4NFx1Njg4N1x1Njg4OFx1Njg4OVx1Njg4YVx1Njg4Ylx1Njg4Y1x1Njg4ZFx1Njg4ZVx1Njg5MFx1Njg5MVx1Njg5Mlx1Njg5NFx1Njg5NVx1Njg5Nlx1Njg5OFx1Njg5OVx1Njg5YVx1Njg5Ylx1Njg5Y1x1Njg5''@;'; put 'put ''ZFx1Njg5ZVx1Njg5Zlx1NjhhMFx1NjhhMVx1NjhhM1x1NjhhNFx1NjhhNVx1NjhhOVx1NjhhYVx1NjhhYlx1NjhhY1x1NjhhZVx1NjhiMVx1NjhiMlx1NjhiNFx1NjhiNlx1NjhiN1x1NjhiOFx1ZmZmZFx1NjhiOVx1NjhiYVx1NjhiYlx1NjhiY1x1NjhiZFx1NjhiZVx1NjhiZlx1NjhjMVx1''@;'; put 'put ''NjhjM1x1NjhjNFx1NjhjNVx1NjhjNlx1NjhjN1x1NjhjOFx1NjhjYVx1NjhjY1x1NjhjZVx1NjhjZlx1NjhkMFx1NjhkMVx1NjhkM1x1NjhkNFx1NjhkNlx1NjhkN1x1NjhkOVx1NjhkYlx1NjhkY1x1NjhkZFx1NjhkZVx1NjhkZlx1NjhlMVx1NjhlMlx1NjhlNFx1NjhlNVx1NjhlNlx1Njhl''@;'; put 'put ''N1x1NjhlOFx1NjhlOVx1NjhlYVx1NjhlYlx1NjhlY1x1NjhlZFx1NjhlZlx1NjhmMlx1NjhmM1x1NjhmNFx1NjhmNlx1NjhmN1x1NjhmOFx1NjhmYlx1NjhmZFx1NjhmZVx1NjhmZlx1NjkwMFx1NjkwMlx1NjkwM1x1NjkwNFx1NjkwNlx1NjkwN1x1NjkwOFx1NjkwOVx1NjkwYVx1NjkwY1x1''@;'; put 'put ''NjkwZlx1NjkxMVx1NjkxM1x1NjkxNFx1NjkxNVx1NjkxNlx1NjkxN1x1NjkxOFx1NjkxOVx1NjkxYVx1NjkxYlx1NjkxY1x1NjkxZFx1NjkxZVx1NjkyMVx1NjkyMlx1NjkyM1x1NjkyNVx1NjkyNlx1NjkyN1x1NjkyOFx1NjkyOVx1NjkyYVx1NjkyYlx1NjkyY1x1NjkyZVx1NjkyZlx1Njkz''@;'; put 'put ''MVx1NjkzMlx1NjkzM1x1NjkzNVx1NjkzNlx1NjkzN1x1NjkzOFx1NjkzYVx1NjkzYlx1NjkzY1x1NjkzZVx1Njk0MFx1Njk0MVx1Njk0M1x1Njk0NFx1Njk0NVx1Njk0Nlx1Njk0N1x1Njk0OFx1Njk0OVx1Njk0YVx1Njk0Ylx1Njk0Y1x1Njk0ZFx1Njk0ZVx1Njk0Zlx1Njk1MFx1Njk1MVx1''@;'; put 'put ''Njk1Mlx1Njk1M1x1Njk1NVx1Njk1Nlx1Njk1OFx1Njk1OVx1Njk1Ylx1Njk1Y1x1Njk1Zlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1MV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTUxXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1MV1bcF1dPTM4NjU2K3AsYlszODY1NitwXT1fWzE1''@;'; put 'put ''MV1bcF0pO2ZvcihfWzE1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njk2MVx1Njk2Mlx1Njk2NFx1Njk2NVx1Njk2N1x1Njk2OFx1Njk2OVx1Njk2YVx1Njk2Y1x1Njk2ZFx1Njk2Zlx1Njk3MFx1Njk3Mlx1Njk3M1x1Njk3NFx1''@;'; put 'put ''Njk3NVx1Njk3Nlx1Njk3YVx1Njk3Ylx1Njk3ZFx1Njk3ZVx1Njk3Zlx1Njk4MVx1Njk4M1x1Njk4NVx1Njk4YVx1Njk4Ylx1Njk4Y1x1Njk4ZVx1Njk4Zlx1Njk5MFx1Njk5MVx1Njk5Mlx1Njk5M1x1Njk5Nlx1Njk5N1x1Njk5OVx1Njk5YVx1Njk5ZFx1Njk5ZVx1Njk5Zlx1NjlhMFx1Njlh''@;'; put 'put ''MVx1NjlhMlx1NjlhM1x1NjlhNFx1NjlhNVx1NjlhNlx1NjlhOVx1NjlhYVx1NjlhY1x1NjlhZVx1NjlhZlx1NjliMFx1NjliMlx1NjliM1x1NjliNVx1NjliNlx1NjliOFx1NjliOVx1NjliYVx1NjliY1x1NjliZFx1ZmZmZFx1NjliZVx1NjliZlx1NjljMFx1NjljMlx1NjljM1x1NjljNFx1''@;'; put 'put ''NjljNVx1NjljNlx1NjljN1x1NjljOFx1NjljOVx1NjljYlx1NjljZFx1NjljZlx1NjlkMVx1NjlkMlx1NjlkM1x1NjlkNVx1NjlkNlx1NjlkN1x1NjlkOFx1NjlkOVx1NjlkYVx1NjlkY1x1NjlkZFx1NjlkZVx1NjllMVx1NjllMlx1NjllM1x1NjllNFx1NjllNVx1NjllNlx1NjllN1x1Njll''@;'; put 'put ''OFx1NjllOVx1NjllYVx1NjllYlx1NjllY1x1NjllZVx1NjllZlx1NjlmMFx1NjlmMVx1NjlmM1x1NjlmNFx1NjlmNVx1NjlmNlx1NjlmN1x1NjlmOFx1NjlmOVx1NjlmYVx1NjlmYlx1NjlmY1x1NjlmZVx1NmEwMFx1NmEwMVx1NmEwMlx1NmEwM1x1NmEwNFx1NmEwNVx1NmEwNlx1NmEwN1x1''@;'; put 'put ''NmEwOFx1NmEwOVx1NmEwYlx1NmEwY1x1NmEwZFx1NmEwZVx1NmEwZlx1NmExMFx1NmExMVx1NmExMlx1NmExM1x1NmExNFx1NmExNVx1NmExNlx1NmExOVx1NmExYVx1NmExYlx1NmExY1x1NmExZFx1NmExZVx1NmEyMFx1NmEyMlx1NmEyM1x1NmEyNFx1NmEyNVx1NmEyNlx1NmEyN1x1NmEy''@;'; put 'put ''OVx1NmEyYlx1NmEyY1x1NmEyZFx1NmEyZVx1NmEzMFx1NmEzMlx1NmEzM1x1NmEzNFx1NmEzNlx1NmEzN1x1NmEzOFx1NmEzOVx1NmEzYVx1NmEzYlx1NmEzY1x1NmEzZlx1NmE0MFx1NmE0MVx1NmE0Mlx1NmE0M1x1NmE0NVx1NmE0Nlx1NmE0OFx1NmE0OVx1NmE0YVx1NmE0Ylx1NmE0Y1x1''@;'; put 'put ''NmE0ZFx1NmE0ZVx1NmE0Zlx1NmE1MVx1NmE1Mlx1NmE1M1x1NmE1NFx1NmE1NVx1NmE1Nlx1NmE1N1x1NmE1YVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTUyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1Ml1bcF1dPTM4OTEyK3AsYlsz''@;'; put 'put ''ODkxMitwXT1fWzE1Ml1bcF0pO2ZvcihfWzE1M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmE1Y1x1NmE1ZFx1NmE1ZVx1NmE1Zlx1NmE2MFx1NmE2Mlx1NmE2M1x1NmE2NFx1NmE2Nlx1NmE2N1x1NmE2OFx1NmE2OVx1NmE2YVx1''@;'; put 'put ''NmE2Ylx1NmE2Y1x1NmE2ZFx1NmE2ZVx1NmE2Zlx1NmE3MFx1NmE3Mlx1NmE3M1x1NmE3NFx1NmE3NVx1NmE3Nlx1NmE3N1x1NmE3OFx1NmE3YVx1NmE3Ylx1NmE3ZFx1NmE3ZVx1NmE3Zlx1NmE4MVx1NmE4Mlx1NmE4M1x1NmE4NVx1NmE4Nlx1NmE4N1x1NmE4OFx1NmE4OVx1NmE4YVx1NmE4''@;'; put 'put ''Ylx1NmE4Y1x1NmE4ZFx1NmE4Zlx1NmE5Mlx1NmE5M1x1NmE5NFx1NmE5NVx1NmE5Nlx1NmE5OFx1NmE5OVx1NmE5YVx1NmE5Ylx1NmE5Y1x1NmE5ZFx1NmE5ZVx1NmE5Zlx1NmFhMVx1NmFhMlx1NmFhM1x1NmFhNFx1NmFhNVx1NmFhNlx1ZmZmZFx1NmFhN1x1NmFhOFx1NmFhYVx1NmFhZFx1''@;'; put 'put ''NmFhZVx1NmFhZlx1NmFiMFx1NmFiMVx1NmFiMlx1NmFiM1x1NmFiNFx1NmFiNVx1NmFiNlx1NmFiN1x1NmFiOFx1NmFiOVx1NmFiYVx1NmFiYlx1NmFiY1x1NmFiZFx1NmFiZVx1NmFiZlx1NmFjMFx1NmFjMVx1NmFjMlx1NmFjM1x1NmFjNFx1NmFjNVx1NmFjNlx1NmFjN1x1NmFjOFx1NmFj''@;'; put 'put ''OVx1NmFjYVx1NmFjYlx1NmFjY1x1NmFjZFx1NmFjZVx1NmFjZlx1NmFkMFx1NmFkMVx1NmFkMlx1NmFkM1x1NmFkNFx1NmFkNVx1NmFkNlx1NmFkN1x1NmFkOFx1NmFkOVx1NmFkYVx1NmFkYlx1NmFkY1x1NmFkZFx1NmFkZVx1NmFkZlx1NmFlMFx1NmFlMVx1NmFlMlx1NmFlM1x1NmFlNFx1''@;'; put 'put ''NmFlNVx1NmFlNlx1NmFlN1x1NmFlOFx1NmFlOVx1NmFlYVx1NmFlYlx1NmFlY1x1NmFlZFx1NmFlZVx1NmFlZlx1NmFmMFx1NmFmMVx1NmFmMlx1NmFmM1x1NmFmNFx1NmFmNVx1NmFmNlx1NmFmN1x1NmFmOFx1NmFmOVx1NmFmYVx1NmFmYlx1NmFmY1x1NmFmZFx1NmFmZVx1NmFmZlx1NmIw''@;'; put 'put ''MFx1NmIwMVx1NmIwMlx1NmIwM1x1NmIwNFx1NmIwNVx1NmIwNlx1NmIwN1x1NmIwOFx1NmIwOVx1NmIwYVx1NmIwYlx1NmIwY1x1NmIwZFx1NmIwZVx1NmIwZlx1NmIxMFx1NmIxMVx1NmIxMlx1NmIxM1x1NmIxNFx1NmIxNVx1NmIxNlx1NmIxN1x1NmIxOFx1NmIxOVx1NmIxYVx1NmIxYlx1''@;'; put 'put ''NmIxY1x1NmIxZFx1NmIxZVx1NmIxZlx1NmIyNVx1NmIyNlx1NmIyOFx1NmIyOVx1NmIyYVx1NmIyYlx1NmIyY1x1NmIyZFx1NmIyZVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1M10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTUzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1M11bcF1d''@;'; put 'put ''PTM5MTY4K3AsYlszOTE2OCtwXT1fWzE1M11bcF0pO2ZvcihfWzE1NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmIyZlx1NmIzMFx1NmIzMVx1NmIzM1x1NmIzNFx1NmIzNVx1NmIzNlx1NmIzOFx1NmIzYlx1NmIzY1x1NmIzZFx1''@;'; put 'put ''NmIzZlx1NmI0MFx1NmI0MVx1NmI0Mlx1NmI0NFx1NmI0NVx1NmI0OFx1NmI0YVx1NmI0Ylx1NmI0ZFx1NmI0ZVx1NmI0Zlx1NmI1MFx1NmI1MVx1NmI1Mlx1NmI1M1x1NmI1NFx1NmI1NVx1NmI1Nlx1NmI1N1x1NmI1OFx1NmI1YVx1NmI1Ylx1NmI1Y1x1NmI1ZFx1NmI1ZVx1NmI1Zlx1NmI2''@;'; put 'put ''MFx1NmI2MVx1NmI2OFx1NmI2OVx1NmI2Ylx1NmI2Y1x1NmI2ZFx1NmI2ZVx1NmI2Zlx1NmI3MFx1NmI3MVx1NmI3Mlx1NmI3M1x1NmI3NFx1NmI3NVx1NmI3Nlx1NmI3N1x1NmI3OFx1NmI3YVx1NmI3ZFx1NmI3ZVx1NmI3Zlx1NmI4MFx1NmI4NVx1NmI4OFx1ZmZmZFx1NmI4Y1x1NmI4ZVx1''@;'; put 'put ''NmI4Zlx1NmI5MFx1NmI5MVx1NmI5NFx1NmI5NVx1NmI5N1x1NmI5OFx1NmI5OVx1NmI5Y1x1NmI5ZFx1NmI5ZVx1NmI5Zlx1NmJhMFx1NmJhMlx1NmJhM1x1NmJhNFx1NmJhNVx1NmJhNlx1NmJhN1x1NmJhOFx1NmJhOVx1NmJhYlx1NmJhY1x1NmJhZFx1NmJhZVx1NmJhZlx1NmJiMFx1NmJi''@;'; put 'put ''MVx1NmJiMlx1NmJiNlx1NmJiOFx1NmJiOVx1NmJiYVx1NmJiYlx1NmJiY1x1NmJiZFx1NmJiZVx1NmJjMFx1NmJjM1x1NmJjNFx1NmJjNlx1NmJjN1x1NmJjOFx1NmJjOVx1NmJjYVx1NmJjY1x1NmJjZVx1NmJkMFx1NmJkMVx1NmJkOFx1NmJkYVx1NmJkY1x1NmJkZFx1NmJkZVx1NmJkZlx1''@;'; put 'put ''NmJlMFx1NmJlMlx1NmJlM1x1NmJlNFx1NmJlNVx1NmJlNlx1NmJlN1x1NmJlOFx1NmJlOVx1NmJlY1x1NmJlZFx1NmJlZVx1NmJmMFx1NmJmMVx1NmJmMlx1NmJmNFx1NmJmNlx1NmJmN1x1NmJmOFx1NmJmYVx1NmJmYlx1NmJmY1x1NmJmZVx1NmJmZlx1NmMwMFx1NmMwMVx1NmMwMlx1NmMw''@;'; put 'put ''M1x1NmMwNFx1NmMwOFx1NmMwOVx1NmMwYVx1NmMwYlx1NmMwY1x1NmMwZVx1NmMxMlx1NmMxN1x1NmMxY1x1NmMxZFx1NmMxZVx1NmMyMFx1NmMyM1x1NmMyNVx1NmMyYlx1NmMyY1x1NmMyZFx1NmMzMVx1NmMzM1x1NmMzNlx1NmMzN1x1NmMzOVx1NmMzYVx1NmMzYlx1NmMzY1x1NmMzZVx1''@;'; put 'put ''NmMzZlx1NmM0M1x1NmM0NFx1NmM0NVx1NmM0OFx1NmM0Ylx1NmM0Y1x1NmM0ZFx1NmM0ZVx1NmM0Zlx1NmM1MVx1NmM1Mlx1NmM1M1x1NmM1Nlx1NmM1OFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1NF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTU0XVtwXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''SVtfWzE1NF1bcF1dPTM5NDI0K3AsYlszOTQyNCtwXT1fWzE1NF1bcF0pO2ZvcihfWzE1NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmM1OVx1NmM1YVx1NmM2Mlx1NmM2M1x1NmM2NVx1NmM2Nlx1NmM2N1x1NmM2Ylx1NmM2Y1x1''@;'; put 'put ''NmM2ZFx1NmM2ZVx1NmM2Zlx1NmM3MVx1NmM3M1x1NmM3NVx1NmM3N1x1NmM3OFx1NmM3YVx1NmM3Ylx1NmM3Y1x1NmM3Zlx1NmM4MFx1NmM4NFx1NmM4N1x1NmM4YVx1NmM4Ylx1NmM4ZFx1NmM4ZVx1NmM5MVx1NmM5Mlx1NmM5NVx1NmM5Nlx1NmM5N1x1NmM5OFx1NmM5YVx1NmM5Y1x1NmM5''@;'; put 'put ''ZFx1NmM5ZVx1NmNhMFx1NmNhMlx1NmNhOFx1NmNhY1x1NmNhZlx1NmNiMFx1NmNiNFx1NmNiNVx1NmNiNlx1NmNiN1x1NmNiYVx1NmNjMFx1NmNjMVx1NmNjMlx1NmNjM1x1NmNjNlx1NmNjN1x1NmNjOFx1NmNjYlx1NmNjZFx1NmNjZVx1NmNjZlx1NmNkMVx1NmNkMlx1NmNkOFx1ZmZmZFx1''@;'; put 'put ''NmNkOVx1NmNkYVx1NmNkY1x1NmNkZFx1NmNkZlx1NmNlNFx1NmNlNlx1NmNlN1x1NmNlOVx1NmNlY1x1NmNlZFx1NmNmMlx1NmNmNFx1NmNmOVx1NmNmZlx1NmQwMFx1NmQwMlx1NmQwM1x1NmQwNVx1NmQwNlx1NmQwOFx1NmQwOVx1NmQwYVx1NmQwZFx1NmQwZlx1NmQxMFx1NmQxMVx1NmQx''@;'; put 'put ''M1x1NmQxNFx1NmQxNVx1NmQxNlx1NmQxOFx1NmQxY1x1NmQxZFx1NmQxZlx1NmQyMFx1NmQyMVx1NmQyMlx1NmQyM1x1NmQyNFx1NmQyNlx1NmQyOFx1NmQyOVx1NmQyY1x1NmQyZFx1NmQyZlx1NmQzMFx1NmQzNFx1NmQzNlx1NmQzN1x1NmQzOFx1NmQzYVx1NmQzZlx1NmQ0MFx1NmQ0Mlx1''@;'; put 'put ''NmQ0NFx1NmQ0OVx1NmQ0Y1x1NmQ1MFx1NmQ1NVx1NmQ1Nlx1NmQ1N1x1NmQ1OFx1NmQ1Ylx1NmQ1ZFx1NmQ1Zlx1NmQ2MVx1NmQ2Mlx1NmQ2NFx1NmQ2NVx1NmQ2N1x1NmQ2OFx1NmQ2Ylx1NmQ2Y1x1NmQ2ZFx1NmQ3MFx1NmQ3MVx1NmQ3Mlx1NmQ3M1x1NmQ3NVx1NmQ3Nlx1NmQ3OVx1NmQ3''@;'; put 'put ''YVx1NmQ3Ylx1NmQ3ZFx1NmQ3ZVx1NmQ3Zlx1NmQ4MFx1NmQ4MVx1NmQ4M1x1NmQ4NFx1NmQ4Nlx1NmQ4N1x1NmQ4YVx1NmQ4Ylx1NmQ4ZFx1NmQ4Zlx1NmQ5MFx1NmQ5Mlx1NmQ5Nlx1NmQ5N1x1NmQ5OFx1NmQ5OVx1NmQ5YVx1NmQ5Y1x1NmRhMlx1NmRhNVx1NmRhY1x1NmRhZFx1NmRiMFx1''@;'; put 'put ''NmRiMVx1NmRiM1x1NmRiNFx1NmRiNlx1NmRiN1x1NmRiOVx1NmRiYVx1NmRiYlx1NmRiY1x1NmRiZFx1NmRiZVx1NmRjMVx1NmRjMlx1NmRjM1x1NmRjOFx1NmRjOVx1NmRjYVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1NV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTU1XVtwXS5jaGFy''@;'; put 'put ''Q29kZUF0KDApJiYoSVtfWzE1NV1bcF1dPTM5NjgwK3AsYlszOTY4MCtwXT1fWzE1NV1bcF0pO2ZvcihfWzE1Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmRjZFx1NmRjZVx1NmRjZlx1NmRkMFx1NmRkMlx1NmRkM1x1NmRkNFx1''@;'; put 'put ''NmRkNVx1NmRkN1x1NmRkYVx1NmRkYlx1NmRkY1x1NmRkZlx1NmRlMlx1NmRlM1x1NmRlNVx1NmRlN1x1NmRlOFx1NmRlOVx1NmRlYVx1NmRlZFx1NmRlZlx1NmRmMFx1NmRmMlx1NmRmNFx1NmRmNVx1NmRmNlx1NmRmOFx1NmRmYVx1NmRmZFx1NmRmZVx1NmRmZlx1NmUwMFx1NmUwMVx1NmUw''@;'; put 'put ''Mlx1NmUwM1x1NmUwNFx1NmUwNlx1NmUwN1x1NmUwOFx1NmUwOVx1NmUwYlx1NmUwZlx1NmUxMlx1NmUxM1x1NmUxNVx1NmUxOFx1NmUxOVx1NmUxYlx1NmUxY1x1NmUxZVx1NmUxZlx1NmUyMlx1NmUyNlx1NmUyN1x1NmUyOFx1NmUyYVx1NmUyY1x1NmUyZVx1NmUzMFx1NmUzMVx1NmUzM1x1''@;'; put 'put ''NmUzNVx1ZmZmZFx1NmUzNlx1NmUzN1x1NmUzOVx1NmUzYlx1NmUzY1x1NmUzZFx1NmUzZVx1NmUzZlx1NmU0MFx1NmU0MVx1NmU0Mlx1NmU0NVx1NmU0Nlx1NmU0N1x1NmU0OFx1NmU0OVx1NmU0YVx1NmU0Ylx1NmU0Y1x1NmU0Zlx1NmU1MFx1NmU1MVx1NmU1Mlx1NmU1NVx1NmU1N1x1NmU1''@;'; put 'put ''OVx1NmU1YVx1NmU1Y1x1NmU1ZFx1NmU1ZVx1NmU2MFx1NmU2MVx1NmU2Mlx1NmU2M1x1NmU2NFx1NmU2NVx1NmU2Nlx1NmU2N1x1NmU2OFx1NmU2OVx1NmU2YVx1NmU2Y1x1NmU2ZFx1NmU2Zlx1NmU3MFx1NmU3MVx1NmU3Mlx1NmU3M1x1NmU3NFx1NmU3NVx1NmU3Nlx1NmU3N1x1NmU3OFx1''@;'; put 'put ''NmU3OVx1NmU3YVx1NmU3Ylx1NmU3Y1x1NmU3ZFx1NmU4MFx1NmU4MVx1NmU4Mlx1NmU4NFx1NmU4N1x1NmU4OFx1NmU4YVx1NmU4Ylx1NmU4Y1x1NmU4ZFx1NmU4ZVx1NmU5MVx1NmU5Mlx1NmU5M1x1NmU5NFx1NmU5NVx1NmU5Nlx1NmU5N1x1NmU5OVx1NmU5YVx1NmU5Ylx1NmU5ZFx1NmU5''@;'; put 'put ''ZVx1NmVhMFx1NmVhMVx1NmVhM1x1NmVhNFx1NmVhNlx1NmVhOFx1NmVhOVx1NmVhYlx1NmVhY1x1NmVhZFx1NmVhZVx1NmViMFx1NmViM1x1NmViNVx1NmViOFx1NmViOVx1NmViY1x1NmViZVx1NmViZlx1NmVjMFx1NmVjM1x1NmVjNFx1NmVjNVx1NmVjNlx1NmVjOFx1NmVjOVx1NmVjYVx1''@;'; put 'put ''NmVjY1x1NmVjZFx1NmVjZVx1NmVkMFx1NmVkMlx1NmVkNlx1NmVkOFx1NmVkOVx1NmVkYlx1NmVkY1x1NmVkZFx1NmVlM1x1NmVlN1x1NmVlYVx1NmVlYlx1NmVlY1x1NmVlZFx1NmVlZVx1NmVlZlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1Nl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9b''@;'; put 'put ''MTU2XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1Nl1bcF1dPTM5OTM2K3AsYlszOTkzNitwXT1fWzE1Nl1bcF0pO2ZvcihfWzE1N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmVmMFx1NmVmMVx1NmVmMlx1NmVmM1x1NmVmNVx1''@;'; put 'put ''NmVmNlx1NmVmN1x1NmVmOFx1NmVmYVx1NmVmYlx1NmVmY1x1NmVmZFx1NmVmZVx1NmVmZlx1NmYwMFx1NmYwMVx1NmYwM1x1NmYwNFx1NmYwNVx1NmYwN1x1NmYwOFx1NmYwYVx1NmYwYlx1NmYwY1x1NmYwZFx1NmYwZVx1NmYxMFx1NmYxMVx1NmYxMlx1NmYxNlx1NmYxN1x1NmYxOFx1NmYx''@;'; put 'put ''OVx1NmYxYVx1NmYxYlx1NmYxY1x1NmYxZFx1NmYxZVx1NmYxZlx1NmYyMVx1NmYyMlx1NmYyM1x1NmYyNVx1NmYyNlx1NmYyN1x1NmYyOFx1NmYyY1x1NmYyZVx1NmYzMFx1NmYzMlx1NmYzNFx1NmYzNVx1NmYzN1x1NmYzOFx1NmYzOVx1NmYzYVx1NmYzYlx1NmYzY1x1NmYzZFx1NmYzZlx1''@;'; put 'put ''NmY0MFx1NmY0MVx1NmY0Mlx1ZmZmZFx1NmY0M1x1NmY0NFx1NmY0NVx1NmY0OFx1NmY0OVx1NmY0YVx1NmY0Y1x1NmY0ZVx1NmY0Zlx1NmY1MFx1NmY1MVx1NmY1Mlx1NmY1M1x1NmY1NFx1NmY1NVx1NmY1Nlx1NmY1N1x1NmY1OVx1NmY1YVx1NmY1Ylx1NmY1ZFx1NmY1Zlx1NmY2MFx1NmY2''@;'; put 'put ''MVx1NmY2M1x1NmY2NFx1NmY2NVx1NmY2N1x1NmY2OFx1NmY2OVx1NmY2YVx1NmY2Ylx1NmY2Y1x1NmY2Zlx1NmY3MFx1NmY3MVx1NmY3M1x1NmY3NVx1NmY3Nlx1NmY3N1x1NmY3OVx1NmY3Ylx1NmY3ZFx1NmY3ZVx1NmY3Zlx1NmY4MFx1NmY4MVx1NmY4Mlx1NmY4M1x1NmY4NVx1NmY4Nlx1''@;'; put 'put ''NmY4N1x1NmY4YVx1NmY4Ylx1NmY4Zlx1NmY5MFx1NmY5MVx1NmY5Mlx1NmY5M1x1NmY5NFx1NmY5NVx1NmY5Nlx1NmY5N1x1NmY5OFx1NmY5OVx1NmY5YVx1NmY5Ylx1NmY5ZFx1NmY5ZVx1NmY5Zlx1NmZhMFx1NmZhMlx1NmZhM1x1NmZhNFx1NmZhNVx1NmZhNlx1NmZhOFx1NmZhOVx1NmZh''@;'; put 'put ''YVx1NmZhYlx1NmZhY1x1NmZhZFx1NmZhZVx1NmZhZlx1NmZiMFx1NmZiMVx1NmZiMlx1NmZiNFx1NmZiNVx1NmZiN1x1NmZiOFx1NmZiYVx1NmZiYlx1NmZiY1x1NmZiZFx1NmZiZVx1NmZiZlx1NmZjMVx1NmZjM1x1NmZjNFx1NmZjNVx1NmZjNlx1NmZjN1x1NmZjOFx1NmZjYVx1NmZjYlx1''@;'; put 'put ''NmZjY1x1NmZjZFx1NmZjZVx1NmZjZlx1NmZkMFx1NmZkM1x1NmZkNFx1NmZkNVx1NmZkNlx1NmZkN1x1NmZkOFx1NmZkOVx1NmZkYVx1NmZkYlx1NmZkY1x1NmZkZFx1NmZkZlx1NmZlMlx1NmZlM1x1NmZlNFx1NmZlNVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1N10ubGVuZ3RoOysr''@;'; put 'put ''cCk2NTUzMyE9PV9bMTU3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1N11bcF1dPTQwMTkyK3AsYls0MDE5MitwXT1fWzE1N11bcF0pO2ZvcihfWzE1OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZlNlx1NmZlN1x1NmZlOFx1''@;'; put 'put ''NmZlOVx1NmZlYVx1NmZlYlx1NmZlY1x1NmZlZFx1NmZmMFx1NmZmMVx1NmZmMlx1NmZmM1x1NmZmNFx1NmZmNVx1NmZmNlx1NmZmN1x1NmZmOFx1NmZmOVx1NmZmYVx1NmZmYlx1NmZmY1x1NmZmZFx1NmZmZVx1NmZmZlx1NzAwMFx1NzAwMVx1NzAwMlx1NzAwM1x1NzAwNFx1NzAwNVx1NzAw''@;'; put 'put ''Nlx1NzAwN1x1NzAwOFx1NzAwOVx1NzAwYVx1NzAwYlx1NzAwY1x1NzAwZFx1NzAwZVx1NzAwZlx1NzAxMFx1NzAxMlx1NzAxM1x1NzAxNFx1NzAxNVx1NzAxNlx1NzAxN1x1NzAxOFx1NzAxOVx1NzAxY1x1NzAxZFx1NzAxZVx1NzAxZlx1NzAyMFx1NzAyMVx1NzAyMlx1NzAyNFx1NzAyNVx1''@;'; put 'put ''NzAyNlx1NzAyN1x1NzAyOFx1NzAyOVx1NzAyYVx1ZmZmZFx1NzAyYlx1NzAyY1x1NzAyZFx1NzAyZVx1NzAyZlx1NzAzMFx1NzAzMVx1NzAzMlx1NzAzM1x1NzAzNFx1NzAzNlx1NzAzN1x1NzAzOFx1NzAzYVx1NzAzYlx1NzAzY1x1NzAzZFx1NzAzZVx1NzAzZlx1NzA0MFx1NzA0MVx1NzA0''@;'; put 'put ''Mlx1NzA0M1x1NzA0NFx1NzA0NVx1NzA0Nlx1NzA0N1x1NzA0OFx1NzA0OVx1NzA0YVx1NzA0Ylx1NzA0ZFx1NzA0ZVx1NzA1MFx1NzA1MVx1NzA1Mlx1NzA1M1x1NzA1NFx1NzA1NVx1NzA1Nlx1NzA1N1x1NzA1OFx1NzA1OVx1NzA1YVx1NzA1Ylx1NzA1Y1x1NzA1ZFx1NzA1Zlx1NzA2MFx1''@;'; put 'put ''NzA2MVx1NzA2Mlx1NzA2M1x1NzA2NFx1NzA2NVx1NzA2Nlx1NzA2N1x1NzA2OFx1NzA2OVx1NzA2YVx1NzA2ZVx1NzA3MVx1NzA3Mlx1NzA3M1x1NzA3NFx1NzA3N1x1NzA3OVx1NzA3YVx1NzA3Ylx1NzA3ZFx1NzA4MVx1NzA4Mlx1NzA4M1x1NzA4NFx1NzA4Nlx1NzA4N1x1NzA4OFx1NzA4''@;'; put 'put ''Ylx1NzA4Y1x1NzA4ZFx1NzA4Zlx1NzA5MFx1NzA5MVx1NzA5M1x1NzA5N1x1NzA5OFx1NzA5YVx1NzA5Ylx1NzA5ZVx1NzA5Zlx1NzBhMFx1NzBhMVx1NzBhMlx1NzBhM1x1NzBhNFx1NzBhNVx1NzBhNlx1NzBhN1x1NzBhOFx1NzBhOVx1NzBhYVx1NzBiMFx1NzBiMlx1NzBiNFx1NzBiNVx1''@;'; put 'put ''NzBiNlx1NzBiYVx1NzBiZVx1NzBiZlx1NzBjNFx1NzBjNVx1NzBjNlx1NzBjN1x1NzBjOVx1NzBjYlx1NzBjY1x1NzBjZFx1NzBjZVx1NzBjZlx1NzBkMFx1NzBkMVx1NzBkMlx1NzBkM1x1NzBkNFx1NzBkNVx1NzBkNlx1NzBkN1x1NzBkYVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1''@;'; put 'put ''OF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTU4XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1OF1bcF1dPTQwNDQ4K3AsYls0MDQ0OCtwXT1fWzE1OF1bcF0pO2ZvcihfWzE1OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzBkY1x1''@;'; put 'put ''NzBkZFx1NzBkZVx1NzBlMFx1NzBlMVx1NzBlMlx1NzBlM1x1NzBlNVx1NzBlYVx1NzBlZVx1NzBmMFx1NzBmMVx1NzBmMlx1NzBmM1x1NzBmNFx1NzBmNVx1NzBmNlx1NzBmOFx1NzBmYVx1NzBmYlx1NzBmY1x1NzBmZVx1NzBmZlx1NzEwMFx1NzEwMVx1NzEwMlx1NzEwM1x1NzEwNFx1NzEw''@;'; put 'put ''NVx1NzEwNlx1NzEwN1x1NzEwOFx1NzEwYlx1NzEwY1x1NzEwZFx1NzEwZVx1NzEwZlx1NzExMVx1NzExMlx1NzExNFx1NzExN1x1NzExYlx1NzExY1x1NzExZFx1NzExZVx1NzExZlx1NzEyMFx1NzEyMVx1NzEyMlx1NzEyM1x1NzEyNFx1NzEyNVx1NzEyN1x1NzEyOFx1NzEyOVx1NzEyYVx1''@;'; put 'put ''NzEyYlx1NzEyY1x1NzEyZFx1NzEyZVx1NzEzMlx1NzEzM1x1NzEzNFx1ZmZmZFx1NzEzNVx1NzEzN1x1NzEzOFx1NzEzOVx1NzEzYVx1NzEzYlx1NzEzY1x1NzEzZFx1NzEzZVx1NzEzZlx1NzE0MFx1NzE0MVx1NzE0Mlx1NzE0M1x1NzE0NFx1NzE0Nlx1NzE0N1x1NzE0OFx1NzE0OVx1NzE0''@;'; put 'put ''Ylx1NzE0ZFx1NzE0Zlx1NzE1MFx1NzE1MVx1NzE1Mlx1NzE1M1x1NzE1NFx1NzE1NVx1NzE1Nlx1NzE1N1x1NzE1OFx1NzE1OVx1NzE1YVx1NzE1Ylx1NzE1ZFx1NzE1Zlx1NzE2MFx1NzE2MVx1NzE2Mlx1NzE2M1x1NzE2NVx1NzE2OVx1NzE2YVx1NzE2Ylx1NzE2Y1x1NzE2ZFx1NzE2Zlx1''@;'; put 'put ''NzE3MFx1NzE3MVx1NzE3NFx1NzE3NVx1NzE3Nlx1NzE3N1x1NzE3OVx1NzE3Ylx1NzE3Y1x1NzE3ZVx1NzE3Zlx1NzE4MFx1NzE4MVx1NzE4Mlx1NzE4M1x1NzE4NVx1NzE4Nlx1NzE4N1x1NzE4OFx1NzE4OVx1NzE4Ylx1NzE4Y1x1NzE4ZFx1NzE4ZVx1NzE5MFx1NzE5MVx1NzE5Mlx1NzE5''@;'; put 'put ''M1x1NzE5NVx1NzE5Nlx1NzE5N1x1NzE5YVx1NzE5Ylx1NzE5Y1x1NzE5ZFx1NzE5ZVx1NzFhMVx1NzFhMlx1NzFhM1x1NzFhNFx1NzFhNVx1NzFhNlx1NzFhN1x1NzFhOVx1NzFhYVx1NzFhYlx1NzFhZFx1NzFhZVx1NzFhZlx1NzFiMFx1NzFiMVx1NzFiMlx1NzFiNFx1NzFiNlx1NzFiN1x1''@;'; put 'put ''NzFiOFx1NzFiYVx1NzFiYlx1NzFiY1x1NzFiZFx1NzFiZVx1NzFiZlx1NzFjMFx1NzFjMVx1NzFjMlx1NzFjNFx1NzFjNVx1NzFjNlx1NzFjN1x1NzFjOFx1NzFjOVx1NzFjYVx1NzFjYlx1NzFjY1x1NzFjZFx1NzFjZlx1NzFkMFx1NzFkMVx1NzFkMlx1NzFkM1x1ZmZmZCIuc3BsaXQoIiIp''@;'; put 'put ''LHA9MDtwIT1fWzE1OV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTU5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1OV1bcF1dPTQwNzA0K3AsYls0MDcwNCtwXT1fWzE1OV1bcF0pO2ZvcihfWzE2MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1NzFkNlx1NzFkN1x1NzFkOFx1NzFkOVx1NzFkYVx1NzFkYlx1NzFkY1x1NzFkZFx1NzFkZVx1NzFkZlx1NzFlMVx1NzFlMlx1NzFlM1x1NzFlNFx1NzFlNlx1NzFlOFx1NzFlOVx1NzFlYVx1NzFlYlx1NzFlY1x1NzFlZFx1NzFlZlx1NzFmMFx1NzFmMVx1NzFmMlx1NzFmM1x1NzFm''@;'; put 'put ''NFx1NzFmNVx1NzFmNlx1NzFmN1x1NzFmOFx1NzFmYVx1NzFmYlx1NzFmY1x1NzFmZFx1NzFmZVx1NzFmZlx1NzIwMFx1NzIwMVx1NzIwMlx1NzIwM1x1NzIwNFx1NzIwNVx1NzIwN1x1NzIwOFx1NzIwOVx1NzIwYVx1NzIwYlx1NzIwY1x1NzIwZFx1NzIwZVx1NzIwZlx1NzIxMFx1NzIxMVx1''@;'; put 'put ''NzIxMlx1NzIxM1x1NzIxNFx1NzIxNVx1NzIxNlx1NzIxN1x1NzIxOFx1NzIxOVx1NzIxYVx1ZmZmZFx1NzIxYlx1NzIxY1x1NzIxZVx1NzIxZlx1NzIyMFx1NzIyMVx1NzIyMlx1NzIyM1x1NzIyNFx1NzIyNVx1NzIyNlx1NzIyN1x1NzIyOVx1NzIyYlx1NzIyZFx1NzIyZVx1NzIyZlx1NzIz''@;'; put 'put ''Mlx1NzIzM1x1NzIzNFx1NzIzYVx1NzIzY1x1NzIzZVx1NzI0MFx1NzI0MVx1NzI0Mlx1NzI0M1x1NzI0NFx1NzI0NVx1NzI0Nlx1NzI0OVx1NzI0YVx1NzI0Ylx1NzI0ZVx1NzI0Zlx1NzI1MFx1NzI1MVx1NzI1M1x1NzI1NFx1NzI1NVx1NzI1N1x1NzI1OFx1NzI1YVx1NzI1Y1x1NzI1ZVx1''@;'; put 'put ''NzI2MFx1NzI2M1x1NzI2NFx1NzI2NVx1NzI2OFx1NzI2YVx1NzI2Ylx1NzI2Y1x1NzI2ZFx1NzI3MFx1NzI3MVx1NzI3M1x1NzI3NFx1NzI3Nlx1NzI3N1x1NzI3OFx1NzI3Ylx1NzI3Y1x1NzI3ZFx1NzI4Mlx1NzI4M1x1NzI4NVx1NzI4Nlx1NzI4N1x1NzI4OFx1NzI4OVx1NzI4Y1x1NzI4''@;'; put 'put ''ZVx1NzI5MFx1NzI5MVx1NzI5M1x1NzI5NFx1NzI5NVx1NzI5Nlx1NzI5N1x1NzI5OFx1NzI5OVx1NzI5YVx1NzI5Ylx1NzI5Y1x1NzI5ZFx1NzI5ZVx1NzJhMFx1NzJhMVx1NzJhMlx1NzJhM1x1NzJhNFx1NzJhNVx1NzJhNlx1NzJhN1x1NzJhOFx1NzJhOVx1NzJhYVx1NzJhYlx1NzJhZVx1''@;'; put 'put ''NzJiMVx1NzJiMlx1NzJiM1x1NzJiNVx1NzJiYVx1NzJiYlx1NzJiY1x1NzJiZFx1NzJiZVx1NzJiZlx1NzJjMFx1NzJjNVx1NzJjNlx1NzJjN1x1NzJjOVx1NzJjYVx1NzJjYlx1NzJjY1x1NzJjZlx1NzJkMVx1NzJkM1x1NzJkNFx1NzJkNVx1NzJkNlx1NzJkOFx1NzJkYVx1NzJkYlx1ZmZm''@;'; put 'put ''ZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2MF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTYwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2MF1bcF1dPTQwOTYwK3AsYls0MDk2MCtwXT1fWzE2MF1bcF0pO2ZvcihfWzE2MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAwMFx1MzAwMVx1MzAwMlx4YjdcdTAyYzlcdTAyYzdceGE4XHUzMDAzXHUzMDA1XHUyMDE0XHVmZjVl''@;'; put 'put ''XHUyMDE2XHUyMDI2XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDE0XHUzMDE1XHUzMDA4XHUzMDA5XHUzMDBhXHUzMDBiXHUzMDBjXHUzMDBkXHUzMDBlXHUzMDBmXHUzMDE2XHUzMDE3XHUzMDEwXHUzMDExXHhiMVx4ZDdceGY3XHUyMjM2XHUyMjI3XHUyMjI4XHUyMjExXHUyMjBmXHUy''@;'; put 'put ''MjJhXHUyMjI5XHUyMjA4XHUyMjM3XHUyMjFhXHUyMmE1XHUyMjI1XHUyMjIwXHUyMzEyXHUyMjk5XHUyMjJiXHUyMjJlXHUyMjYxXHUyMjRjXHUyMjQ4XHUyMjNkXHUyMjFkXHUyMjYwXHUyMjZlXHUyMjZmXHUyMjY0XHUyMjY1XHUyMjFlXHUyMjM1XHUyMjM0XHUyNjQyXHUyNjQwXHhiMFx1''@;'; put 'put ''MjAzMlx1MjAzM1x1MjEwM1x1ZmYwNFx4YTRcdWZmZTBcdWZmZTFcdTIwMzBceGE3XHUyMTE2XHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyMDNiXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEzXHVmZmZkIi5z''@;'; put 'put ''cGxpdCgiIikscD0wO3AhPV9bMTYxXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjFdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTYxXVtwXV09NDEyMTYrcCxiWzQxMjE2K3BdPV9bMTYxXVtwXSk7Zm9yKF9bMTYyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMTcwXHUyMTcxXHUyMTcyXHUyMTczXHUyMTc0XHUyMTc1XHUyMTc2XHUyMTc3XHUyMTc4XHUyMTc5XHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNDg4XHUyNDg5XHUyNDhhXHUyNDhiXHUyNDhjXHUyNDhkXHUyNDhlXHUyNDhmXHUyNDkwXHUyNDkxXHUyNDkyXHUyNDkzXHUyNDk0XHUyNDk1XHUyNDk2XHUyNDk3XHUyNDk4XHUyNDk5XHUyNDlhXHUyNDliXHUyNDc0XHUyNDc1XHUy''@;'; put 'put ''NDc2XHUyNDc3XHUyNDc4XHUyNDc5XHUyNDdhXHUyNDdiXHUyNDdjXHUyNDdkXHUyNDdlXHUyNDdmXHUyNDgwXHUyNDgxXHUyNDgyXHUyNDgzXHUyNDg0XHUyNDg1XHUyNDg2XHUyNDg3XHUyNDYwXHUyNDYxXHUyNDYyXHUyNDYzXHUyNDY0XHUyNDY1XHUyNDY2XHUyNDY3XHUyNDY4XHUyNDY5''@;'; put 'put ''XHVmZmZkXHVmZmZkXHUzMjIwXHUzMjIxXHUzMjIyXHUzMjIzXHUzMjI0XHUzMjI1XHUzMjI2XHUzMjI3XHUzMjI4XHUzMjI5XHVmZmZkXHVmZmZkXHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHUyMTZhXHUyMTZiXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTYyXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjJdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTYyXVtwXV09NDE0NzIrcCxiWzQxNDcyK3BdPV9bMTYyXVtwXSk7Zm9yKF9bMTYzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjAxXHVmZjAyXHVmZjAzXHVmZmU1XHVmZjA1XHVmZjA2XHVmZjA3XHVmZjA4XHVmZjA5''@;'; put 'put ''XHVmZjBhXHVmZjBiXHVmZjBjXHVmZjBkXHVmZjBlXHVmZjBmXHVmZjEwXHVmZjExXHVmZjEyXHVmZjEzXHVmZjE0XHVmZjE1XHVmZjE2XHVmZjE3XHVmZjE4XHVmZjE5XHVmZjFhXHVmZjFiXHVmZjFjXHVmZjFkXHVmZjFlXHVmZjFmXHVmZjIwXHVmZjIxXHVmZjIyXHVmZjIzXHVmZjI0XHVm''@;'; put 'put ''ZjI1XHVmZjI2XHVmZjI3XHVmZjI4XHVmZjI5XHVmZjJhXHVmZjJiXHVmZjJjXHVmZjJkXHVmZjJlXHVmZjJmXHVmZjMwXHVmZjMxXHVmZjMyXHVmZjMzXHVmZjM0XHVmZjM1XHVmZjM2XHVmZjM3XHVmZjM4XHVmZjM5XHVmZjNhXHVmZjNiXHVmZjNjXHVmZjNkXHVmZjNlXHVmZjNmXHVmZjQw''@;'; put 'put ''XHVmZjQxXHVmZjQyXHVmZjQzXHVmZjQ0XHVmZjQ1XHVmZjQ2XHVmZjQ3XHVmZjQ4XHVmZjQ5XHVmZjRhXHVmZjRiXHVmZjRjXHVmZjRkXHVmZjRlXHVmZjRmXHVmZjUwXHVmZjUxXHVmZjUyXHVmZjUzXHVmZjU0XHVmZjU1XHVmZjU2XHVmZjU3XHVmZjU4XHVmZjU5XHVmZjVhXHVmZjViXHVm''@;'; put 'put ''ZjVjXHVmZjVkXHVmZmUzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTYzXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjNdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTYzXVtwXV09NDE3MjgrcCxiWzQxNzI4K3BdPV9bMTYzXVtwXSk7Zm9yKF9bMTY0XT0iXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDQxXHUzMDQyXHUzMDQzXHUzMDQ0XHUzMDQ1XHUzMDQ2XHUzMDQ3''@;'; put 'put ''XHUzMDQ4XHUzMDQ5XHUzMDRhXHUzMDRiXHUzMDRjXHUzMDRkXHUzMDRlXHUzMDRmXHUzMDUwXHUzMDUxXHUzMDUyXHUzMDUzXHUzMDU0XHUzMDU1XHUzMDU2XHUzMDU3XHUzMDU4XHUzMDU5XHUzMDVhXHUzMDViXHUzMDVjXHUzMDVkXHUzMDVlXHUzMDVmXHUzMDYwXHUzMDYxXHUzMDYyXHUz''@;'; put 'put ''MDYzXHUzMDY0XHUzMDY1XHUzMDY2XHUzMDY3XHUzMDY4XHUzMDY5XHUzMDZhXHUzMDZiXHUzMDZjXHUzMDZkXHUzMDZlXHUzMDZmXHUzMDcwXHUzMDcxXHUzMDcyXHUzMDczXHUzMDc0XHUzMDc1XHUzMDc2XHUzMDc3XHUzMDc4XHUzMDc5XHUzMDdhXHUzMDdiXHUzMDdjXHUzMDdkXHUzMDdl''@;'; put 'put ''XHUzMDdmXHUzMDgwXHUzMDgxXHUzMDgyXHUzMDgzXHUzMDg0XHUzMDg1XHUzMDg2XHUzMDg3XHUzMDg4XHUzMDg5XHUzMDhhXHUzMDhiXHUzMDhjXHUzMDhkXHUzMDhlXHUzMDhmXHUzMDkwXHUzMDkxXHUzMDkyXHUzMDkzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTY0XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjRdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTY0XVtwXV09NDE5ODQrcCxiWzQxOTg0K3BdPV9bMTY0XVtwXSk7Zm9yKF9bMTY1XT0iXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMGExXHUzMGEyXHUzMGEzXHUzMGE0XHUzMGE1''@;'; put 'put ''XHUzMGE2XHUzMGE3XHUzMGE4XHUzMGE5XHUzMGFhXHUzMGFiXHUzMGFjXHUzMGFkXHUzMGFlXHUzMGFmXHUzMGIwXHUzMGIxXHUzMGIyXHUzMGIzXHUzMGI0XHUzMGI1XHUzMGI2XHUzMGI3XHUzMGI4XHUzMGI5XHUzMGJhXHUzMGJiXHUzMGJjXHUzMGJkXHUzMGJlXHUzMGJmXHUzMGMwXHUz''@;'; put 'put ''MGMxXHUzMGMyXHUzMGMzXHUzMGM0XHUzMGM1XHUzMGM2XHUzMGM3XHUzMGM4XHUzMGM5XHUzMGNhXHUzMGNiXHUzMGNjXHUzMGNkXHUzMGNlXHUzMGNmXHUzMGQwXHUzMGQxXHUzMGQyXHUzMGQzXHUzMGQ0XHUzMGQ1XHUzMGQ2XHUzMGQ3XHUzMGQ4XHUzMGQ5XHUzMGRhXHUzMGRiXHUzMGRj''@;'; put 'put ''XHUzMGRkXHUzMGRlXHUzMGRmXHUzMGUwXHUzMGUxXHUzMGUyXHUzMGUzXHUzMGU0XHUzMGU1XHUzMGU2XHUzMGU3XHUzMGU4XHUzMGU5XHUzMGVhXHUzMGViXHUzMGVjXHUzMGVkXHUzMGVlXHUzMGVmXHUzMGYwXHUzMGYxXHUzMGYyXHUzMGYzXHUzMGY0XHUzMGY1XHUzMGY2XHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTY1XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjVdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTY1XVtwXV09NDIyNDArcCxiWzQyMjQwK3BdPV9bMTY1XVtwXSk7Zm9yKF9b''@;'; put 'put ''MTY2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMzkxXHUwMzkyXHUwMzkz''@;'; put 'put ''XHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZTM1XHVmZTM2XHVmZTM5XHVmZTNhXHVmZTNmXHVmZTQwXHVmZTNkXHVmZTNlXHVmZTQxXHVmZTQyXHVmZTQzXHVmZTQ0XHVmZmZkXHVmZmZkXHVmZTNiXHVmZTNjXHVmZTM3XHVmZTM4XHVmZTMxXHVmZmZkXHVmZTMzXHVmZTM0XHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTY2XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjZdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTY2XVtwXV09NDI0OTYrcCxiWzQyNDk2K3BdPV9bMTY2''@;'; put 'put ''XVtwXSk7Zm9yKF9bMTY3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDEw''@;'; put 'put ''XHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDAxXHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUw''@;'; put 'put ''NDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDUxXHUwNDM2''@;'; put 'put ''XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTY3XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjddW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTY3XVtwXV09NDI3NTIrcCxiWzQy''@;'; put 'put ''NzUyK3BdPV9bMTY3XVtwXSk7Zm9yKF9bMTY4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMmNhXHUwMmNiXHUwMmQ5XHUyMDEzXHUyMDE1XHUyMDI1XHUyMDM1XHUyMTA1XHUyMTA5XHUyMTk2XHUyMTk3XHUyMTk4XHUyMTk5XHUy''@;'; put 'put ''MjE1XHUyMjFmXHUyMjIzXHUyMjUyXHUyMjY2XHUyMjY3XHUyMmJmXHUyNTUwXHUyNTUxXHUyNTUyXHUyNTUzXHUyNTU0XHUyNTU1XHUyNTU2XHUyNTU3XHUyNTU4XHUyNTU5XHUyNTVhXHUyNTViXHUyNTVjXHUyNTVkXHUyNTVlXHUyNTVmXHUyNTYwXHUyNTYxXHUyNTYyXHUyNTYzXHUyNTY0''@;'; put 'put ''XHUyNTY1XHUyNTY2XHUyNTY3XHUyNTY4XHUyNTY5XHUyNTZhXHUyNTZiXHUyNTZjXHUyNTZkXHUyNTZlXHUyNTZmXHUyNTcwXHUyNTcxXHUyNTcyXHUyNTczXHUyNTgxXHUyNTgyXHUyNTgzXHUyNTg0XHUyNTg1XHUyNTg2XHUyNTg3XHVmZmZkXHUyNTg4XHUyNTg5XHUyNThhXHUyNThiXHUy''@;'; put 'put ''NThjXHUyNThkXHUyNThlXHUyNThmXHUyNTkzXHUyNTk0XHUyNTk1XHUyNWJjXHUyNWJkXHUyNWUyXHUyNWUzXHUyNWU0XHUyNWU1XHUyNjA5XHUyMjk1XHUzMDEyXHUzMDFkXHUzMDFlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHUwMTAxXHhlMVx1MDFjZVx4ZTBcdTAxMTNceGU5XHUwMTFiXHhlOFx1MDEyYlx4ZWRcdTAxZDBceGVjXHUwMTRkXHhmM1x1MDFkMlx4ZjJcdTAxNmJceGZhXHUwMWQ0XHhmOVx1MDFkNlx1MDFkOFx1MDFkYVx1MDFkY1x4ZmNceGVhXHUwMjUxXHVmZmZkXHUwMTQ0XHUwMTQ4XHVm''@;'; put 'put ''ZmZkXHUwMjYxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMTA1XHUzMTA2XHUzMTA3XHUzMTA4XHUzMTA5XHUzMTBhXHUzMTBiXHUzMTBjXHUzMTBkXHUzMTBlXHUzMTBmXHUzMTEwXHUzMTExXHUzMTEyXHUzMTEzXHUzMTE0XHUzMTE1XHUzMTE2XHUzMTE3XHUzMTE4XHUzMTE5XHUzMTFh''@;'; put 'put ''XHUzMTFiXHUzMTFjXHUzMTFkXHUzMTFlXHUzMTFmXHUzMTIwXHUzMTIxXHUzMTIyXHUzMTIzXHUzMTI0XHUzMTI1XHUzMTI2XHUzMTI3XHUzMTI4XHUzMTI5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTY4XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjhdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTY4XVtwXV09NDMwMDgrcCxiWzQzMDA4K3BdPV9bMTY4''@;'; put 'put ''XVtwXSk7Zm9yKF9bMTY5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDIxXHUzMDIyXHUzMDIzXHUzMDI0XHUzMDI1XHUzMDI2XHUzMDI3XHUzMDI4XHUzMDI5XHUzMmEzXHUzMzhlXHUzMzhmXHUzMzljXHUzMzlkXHUzMzllXHUz''@;'; put 'put ''M2ExXHUzM2M0XHUzM2NlXHUzM2QxXHUzM2QyXHUzM2Q1XHVmZTMwXHVmZmUyXHVmZmU0XHVmZmZkXHUyMTIxXHUzMjMxXHVmZmZkXHUyMDEwXHVmZmZkXHVmZmZkXHVmZmZkXHUzMGZjXHUzMDliXHUzMDljXHUzMGZkXHUzMGZlXHUzMDA2XHUzMDlkXHUzMDllXHVmZTQ5XHVmZTRhXHVmZTRi''@;'; put 'put ''XHVmZTRjXHVmZTRkXHVmZTRlXHVmZTRmXHVmZTUwXHVmZTUxXHVmZTUyXHVmZTU0XHVmZTU1XHVmZTU2XHVmZTU3XHVmZTU5XHVmZTVhXHVmZTViXHVmZTVjXHVmZTVkXHVmZTVlXHVmZTVmXHVmZTYwXHVmZTYxXHVmZmZkXHVmZTYyXHVmZTYzXHVmZTY0XHVmZTY1XHVmZTY2XHVmZTY4XHVm''@;'; put 'put ''ZTY5XHVmZTZhXHVmZTZiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDA3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHUyNTAwXHUyNTAxXHUyNTAyXHUyNTAzXHUyNTA0XHUyNTA1XHUyNTA2XHUyNTA3XHUyNTA4XHUyNTA5XHUyNTBhXHUyNTBiXHUyNTBjXHUyNTBkXHUyNTBlXHUyNTBmXHUyNTEwXHUyNTExXHUyNTEyXHUyNTEzXHUyNTE0XHUyNTE1XHUyNTE2XHUyNTE3XHUyNTE4XHUy''@;'; put 'put ''NTE5XHUyNTFhXHUyNTFiXHUyNTFjXHUyNTFkXHUyNTFlXHUyNTFmXHUyNTIwXHUyNTIxXHUyNTIyXHUyNTIzXHUyNTI0XHUyNTI1XHUyNTI2XHUyNTI3XHUyNTI4XHUyNTI5XHUyNTJhXHUyNTJiXHUyNTJjXHUyNTJkXHUyNTJlXHUyNTJmXHUyNTMwXHUyNTMxXHUyNTMyXHUyNTMzXHUyNTM0''@;'; put 'put ''XHUyNTM1XHUyNTM2XHUyNTM3XHUyNTM4XHUyNTM5XHUyNTNhXHUyNTNiXHUyNTNjXHUyNTNkXHUyNTNlXHUyNTNmXHUyNTQwXHUyNTQxXHUyNTQyXHUyNTQzXHUyNTQ0XHUyNTQ1XHUyNTQ2XHUyNTQ3XHUyNTQ4XHUyNTQ5XHUyNTRhXHUyNTRiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTY5XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjldW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTY5XVtwXV09NDMyNjQrcCxiWzQz''@;'; put 'put ''MjY0K3BdPV9bMTY5XVtwXSk7Zm9yKF9bMTcwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MmRjXHU3MmRkXHU3MmRmXHU3MmUyXHU3MmUzXHU3MmU0XHU3MmU1XHU3MmU2XHU3MmU3XHU3MmVhXHU3MmViXHU3MmY1XHU3MmY2XHU3''@;'; put 'put ''MmY5XHU3MmZkXHU3MmZlXHU3MmZmXHU3MzAwXHU3MzAyXHU3MzA0XHU3MzA1XHU3MzA2XHU3MzA3XHU3MzA4XHU3MzA5XHU3MzBiXHU3MzBjXHU3MzBkXHU3MzBmXHU3MzEwXHU3MzExXHU3MzEyXHU3MzE0XHU3MzE4XHU3MzE5XHU3MzFhXHU3MzFmXHU3MzIwXHU3MzIzXHU3MzI0XHU3MzI2''@;'; put 'put ''XHU3MzI3XHU3MzI4XHU3MzJkXHU3MzJmXHU3MzMwXHU3MzMyXHU3MzMzXHU3MzM1XHU3MzM2XHU3MzNhXHU3MzNiXHU3MzNjXHU3MzNkXHU3MzQwXHU3MzQxXHU3MzQyXHU3MzQzXHU3MzQ0XHU3MzQ1XHU3MzQ2XHU3MzQ3XHU3MzQ4XHVmZmZkXHU3MzQ5XHU3MzRhXHU3MzRiXHU3MzRjXHU3''@;'; put 'put ''MzRlXHU3MzRmXHU3MzUxXHU3MzUzXHU3MzU0XHU3MzU1XHU3MzU2XHU3MzU4XHU3MzU5XHU3MzVhXHU3MzViXHU3MzVjXHU3MzVkXHU3MzVlXHU3MzVmXHU3MzYxXHU3MzYyXHU3MzYzXHU3MzY0XHU3MzY1XHU3MzY2XHU3MzY3XHU3MzY4XHU3MzY5XHU3MzZhXHU3MzZiXHU3MzZlXHU3Mzcw''@;'; put 'put ''XHU3MzcxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTcwXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzBdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTcwXVtwXV09''@;'; put 'put ''NDM1MjArcCxiWzQzNTIwK3BdPV9bMTcwXVtwXSk7Zm9yKF9bMTcxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MzcyXHU3MzczXHU3Mzc0XHU3Mzc1XHU3Mzc2XHU3Mzc3XHU3Mzc4XHU3Mzc5XHU3MzdhXHU3MzdiXHU3MzdjXHU3''@;'; put 'put ''MzdkXHU3MzdmXHU3MzgwXHU3MzgxXHU3MzgyXHU3MzgzXHU3Mzg1XHU3Mzg2XHU3Mzg4XHU3MzhhXHU3MzhjXHU3MzhkXHU3MzhmXHU3MzkwXHU3MzkyXHU3MzkzXHU3Mzk0XHU3Mzk1XHU3Mzk3XHU3Mzk4XHU3Mzk5XHU3MzlhXHU3MzljXHU3MzlkXHU3MzllXHU3M2EwXHU3M2ExXHU3M2Ez''@;'; put 'put ''XHU3M2E0XHU3M2E1XHU3M2E2XHU3M2E3XHU3M2E4XHU3M2FhXHU3M2FjXHU3M2FkXHU3M2IxXHU3M2I0XHU3M2I1XHU3M2I2XHU3M2I4XHU3M2I5XHU3M2JjXHU3M2JkXHU3M2JlXHU3M2JmXHU3M2MxXHU3M2MzXHU3M2M0XHU3M2M1XHU3M2M2XHU3M2M3XHVmZmZkXHU3M2NiXHU3M2NjXHU3''@;'; put 'put ''M2NlXHU3M2QyXHU3M2QzXHU3M2Q0XHU3M2Q1XHU3M2Q2XHU3M2Q3XHU3M2Q4XHU3M2RhXHU3M2RiXHU3M2RjXHU3M2RkXHU3M2RmXHU3M2UxXHU3M2UyXHU3M2UzXHU3M2U0XHU3M2U2XHU3M2U4XHU3M2VhXHU3M2ViXHU3M2VjXHU3M2VlXHU3M2VmXHU3M2YwXHU3M2YxXHU3M2YzXHU3M2Y0''@;'; put 'put ''XHU3M2Y1XHU3M2Y2XHU3M2Y3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTcxXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzFdW3BdLmNoYXJDb2RlQXQoMCkmJihJ''@;'; put 'put ''W19bMTcxXVtwXV09NDM3NzYrcCxiWzQzNzc2K3BdPV9bMTcxXVtwXSk7Zm9yKF9bMTcyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3M2Y4XHU3M2Y5XHU3M2ZhXHU3M2ZiXHU3M2ZjXHU3M2ZkXHU3M2ZlXHU3M2ZmXHU3NDAwXHU3''@;'; put 'put ''NDAxXHU3NDAyXHU3NDA0XHU3NDA3XHU3NDA4XHU3NDBiXHU3NDBjXHU3NDBkXHU3NDBlXHU3NDExXHU3NDEyXHU3NDEzXHU3NDE0XHU3NDE1XHU3NDE2XHU3NDE3XHU3NDE4XHU3NDE5XHU3NDFjXHU3NDFkXHU3NDFlXHU3NDFmXHU3NDIwXHU3NDIxXHU3NDIzXHU3NDI0XHU3NDI3XHU3NDI5''@;'; put 'put ''XHU3NDJiXHU3NDJkXHU3NDJmXHU3NDMxXHU3NDMyXHU3NDM3XHU3NDM4XHU3NDM5XHU3NDNhXHU3NDNiXHU3NDNkXHU3NDNlXHU3NDNmXHU3NDQwXHU3NDQyXHU3NDQzXHU3NDQ0XHU3NDQ1XHU3NDQ2XHU3NDQ3XHU3NDQ4XHU3NDQ5XHU3NDRhXHU3NDRiXHU3NDRjXHU3NDRkXHVmZmZkXHU3''@;'; put 'put ''NDRlXHU3NDRmXHU3NDUwXHU3NDUxXHU3NDUyXHU3NDUzXHU3NDU0XHU3NDU2XHU3NDU4XHU3NDVkXHU3NDYwXHU3NDYxXHU3NDYyXHU3NDYzXHU3NDY0XHU3NDY1XHU3NDY2XHU3NDY3XHU3NDY4XHU3NDY5XHU3NDZhXHU3NDZiXHU3NDZjXHU3NDZlXHU3NDZmXHU3NDcxXHU3NDcyXHU3NDcz''@;'; put 'put ''XHU3NDc0XHU3NDc1XHU3NDc4XHU3NDc5XHU3NDdhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTcyXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzJdW3BdLmNoYXJD''@;'; put 'put ''b2RlQXQoMCkmJihJW19bMTcyXVtwXV09NDQwMzIrcCxiWzQ0MDMyK3BdPV9bMTcyXVtwXSk7Zm9yKF9bMTczXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NDdiXHU3NDdjXHU3NDdkXHU3NDdmXHU3NDgyXHU3NDg0XHU3NDg1XHU3''@;'; put 'put ''NDg2XHU3NDg4XHU3NDg5XHU3NDhhXHU3NDhjXHU3NDhkXHU3NDhmXHU3NDkxXHU3NDkyXHU3NDkzXHU3NDk0XHU3NDk1XHU3NDk2XHU3NDk3XHU3NDk4XHU3NDk5XHU3NDlhXHU3NDliXHU3NDlkXHU3NDlmXHU3NGEwXHU3NGExXHU3NGEyXHU3NGEzXHU3NGE0XHU3NGE1XHU3NGE2XHU3NGFh''@;'; put 'put ''XHU3NGFiXHU3NGFjXHU3NGFkXHU3NGFlXHU3NGFmXHU3NGIwXHU3NGIxXHU3NGIyXHU3NGIzXHU3NGI0XHU3NGI1XHU3NGI2XHU3NGI3XHU3NGI4XHU3NGI5XHU3NGJiXHU3NGJjXHU3NGJkXHU3NGJlXHU3NGJmXHU3NGMwXHU3NGMxXHU3NGMyXHU3NGMzXHU3NGM0XHU3NGM1XHU3NGM2XHU3''@;'; put 'put ''NGM3XHVmZmZkXHU3NGM4XHU3NGM5XHU3NGNhXHU3NGNiXHU3NGNjXHU3NGNkXHU3NGNlXHU3NGNmXHU3NGQwXHU3NGQxXHU3NGQzXHU3NGQ0XHU3NGQ1XHU3NGQ2XHU3NGQ3XHU3NGQ4XHU3NGQ5XHU3NGRhXHU3NGRiXHU3NGRkXHU3NGRmXHU3NGUxXHU3NGU1XHU3NGU3XHU3NGU4XHU3NGU5''@;'; put 'put ''XHU3NGVhXHU3NGViXHU3NGVjXHU3NGVkXHU3NGYwXHU3NGYxXHU3NGYyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTczXS5sZW5ndGg7KytwKTY1NTMzIT09X1sx''@;'; put 'put ''NzNdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTczXVtwXV09NDQyODgrcCxiWzQ0Mjg4K3BdPV9bMTczXVtwXSk7Zm9yKF9bMTc0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NGYzXHU3NGY1XHU3NGY4XHU3NGY5XHU3NGZhXHU3''@;'; put 'put ''NGZiXHU3NGZjXHU3NGZkXHU3NGZlXHU3NTAwXHU3NTAxXHU3NTAyXHU3NTAzXHU3NTA1XHU3NTA2XHU3NTA3XHU3NTA4XHU3NTA5XHU3NTBhXHU3NTBiXHU3NTBjXHU3NTBlXHU3NTEwXHU3NTEyXHU3NTE0XHU3NTE1XHU3NTE2XHU3NTE3XHU3NTFiXHU3NTFkXHU3NTFlXHU3NTIwXHU3NTIx''@;'; put 'put ''XHU3NTIyXHU3NTIzXHU3NTI0XHU3NTI2XHU3NTI3XHU3NTJhXHU3NTJlXHU3NTM0XHU3NTM2XHU3NTM5XHU3NTNjXHU3NTNkXHU3NTNmXHU3NTQxXHU3NTQyXHU3NTQzXHU3NTQ0XHU3NTQ2XHU3NTQ3XHU3NTQ5XHU3NTRhXHU3NTRkXHU3NTUwXHU3NTUxXHU3NTUyXHU3NTUzXHU3NTU1XHU3''@;'; put 'put ''NTU2XHU3NTU3XHU3NTU4XHVmZmZkXHU3NTVkXHU3NTVlXHU3NTVmXHU3NTYwXHU3NTYxXHU3NTYyXHU3NTYzXHU3NTY0XHU3NTY3XHU3NTY4XHU3NTY5XHU3NTZiXHU3NTZjXHU3NTZkXHU3NTZlXHU3NTZmXHU3NTcwXHU3NTcxXHU3NTczXHU3NTc1XHU3NTc2XHU3NTc3XHU3NTdhXHU3NTdi''@;'; put 'put ''XHU3NTdjXHU3NTdkXHU3NTdlXHU3NTgwXHU3NTgxXHU3NTgyXHU3NTg0XHU3NTg1XHU3NTg3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTc0XS5sZW5ndGg7Kytw''@;'; put 'put ''KTY1NTMzIT09X1sxNzRdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTc0XVtwXV09NDQ1NDQrcCxiWzQ0NTQ0K3BdPV9bMTc0XVtwXSk7Zm9yKF9bMTc1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NTg4XHU3NTg5XHU3NThhXHU3''@;'; put 'put ''NThjXHU3NThkXHU3NThlXHU3NTkwXHU3NTkzXHU3NTk1XHU3NTk4XHU3NTliXHU3NTljXHU3NTllXHU3NWEyXHU3NWE2XHU3NWE3XHU3NWE4XHU3NWE5XHU3NWFhXHU3NWFkXHU3NWI2XHU3NWI3XHU3NWJhXHU3NWJiXHU3NWJmXHU3NWMwXHU3NWMxXHU3NWM2XHU3NWNiXHU3NWNjXHU3NWNl''@;'; put 'put ''XHU3NWNmXHU3NWQwXHU3NWQxXHU3NWQzXHU3NWQ3XHU3NWQ5XHU3NWRhXHU3NWRjXHU3NWRkXHU3NWRmXHU3NWUwXHU3NWUxXHU3NWU1XHU3NWU5XHU3NWVjXHU3NWVkXHU3NWVlXHU3NWVmXHU3NWYyXHU3NWYzXHU3NWY1XHU3NWY2XHU3NWY3XHU3NWY4XHU3NWZhXHU3NWZiXHU3NWZkXHU3''@;'; put 'put ''NWZlXHU3NjAyXHU3NjA0XHU3NjA2XHU3NjA3XHVmZmZkXHU3NjA4XHU3NjA5XHU3NjBiXHU3NjBkXHU3NjBlXHU3NjBmXHU3NjExXHU3NjEyXHU3NjEzXHU3NjE0XHU3NjE2XHU3NjFhXHU3NjFjXHU3NjFkXHU3NjFlXHU3NjIxXHU3NjIzXHU3NjI3XHU3NjI4XHU3NjJjXHU3NjJlXHU3NjJm''@;'; put 'put ''XHU3NjMxXHU3NjMyXHU3NjM2XHU3NjM3XHU3NjM5XHU3NjNhXHU3NjNiXHU3NjNkXHU3NjQxXHU3NjQyXHU3NjQ0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTc1''@;'; put 'put ''XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzVdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTc1XVtwXV09NDQ4MDArcCxiWzQ0ODAwK3BdPV9bMTc1XVtwXSk7Zm9yKF9bMTc2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NjQ1XHU3''@;'; put 'put ''NjQ2XHU3NjQ3XHU3NjQ4XHU3NjQ5XHU3NjRhXHU3NjRiXHU3NjRlXHU3NjRmXHU3NjUwXHU3NjUxXHU3NjUyXHU3NjUzXHU3NjU1XHU3NjU3XHU3NjU4XHU3NjU5XHU3NjVhXHU3NjViXHU3NjVkXHU3NjVmXHU3NjYwXHU3NjYxXHU3NjYyXHU3NjY0XHU3NjY1XHU3NjY2XHU3NjY3XHU3NjY4''@;'; put 'put ''XHU3NjY5XHU3NjZhXHU3NjZjXHU3NjZkXHU3NjZlXHU3NjcwXHU3NjcxXHU3NjcyXHU3NjczXHU3Njc0XHU3Njc1XHU3Njc2XHU3Njc3XHU3Njc5XHU3NjdhXHU3NjdjXHU3NjdmXHU3NjgwXHU3NjgxXHU3NjgzXHU3Njg1XHU3Njg5XHU3NjhhXHU3NjhjXHU3NjhkXHU3NjhmXHU3NjkwXHU3''@;'; put 'put ''NjkyXHU3Njk0XHU3Njk1XHU3Njk3XHU3Njk4XHU3NjlhXHU3NjliXHVmZmZkXHU3NjljXHU3NjlkXHU3NjllXHU3NjlmXHU3NmEwXHU3NmExXHU3NmEyXHU3NmEzXHU3NmE1XHU3NmE2XHU3NmE3XHU3NmE4XHU3NmE5XHU3NmFhXHU3NmFiXHU3NmFjXHU3NmFkXHU3NmFmXHU3NmIwXHU3NmIz''@;'; put 'put ''XHU3NmI1XHU3NmI2XHU3NmI3XHU3NmI4XHU3NmI5XHU3NmJhXHU3NmJiXHU3NmJjXHU3NmJkXHU3NmJlXHU3NmMwXHU3NmMxXHU3NmMzXHU1NTRhXHU5NjNmXHU1N2MzXHU2MzI4XHU1NGNlXHU1NTA5XHU1NGMwXHU3NjkxXHU3NjRjXHU4NTNjXHU3N2VlXHU4MjdlXHU3ODhkXHU3MjMxXHU5''@;'; put 'put ''Njk4XHU5NzhkXHU2YzI4XHU1Yjg5XHU0ZmZhXHU2MzA5XHU2Njk3XHU1Y2I4XHU4MGZhXHU2ODQ4XHU4MGFlXHU2NjAyXHU3NmNlXHU1MWY5XHU2NTU2XHU3MWFjXHU3ZmYxXHU4ODg0XHU1MGIyXHU1OTY1XHU2MWNhXHU2ZmIzXHU4MmFkXHU2MzRjXHU2MjUyXHU1M2VkXHU1NDI3XHU3YjA2''@;'; put 'put ''XHU1MTZiXHU3NWE0XHU1ZGY0XHU2MmQ0XHU4ZGNiXHU5Nzc2XHU2MjhhXHU4MDE5XHU1NzVkXHU5NzM4XHU3ZjYyXHU3MjM4XHU3NjdkXHU2N2NmXHU3NjdlXHU2NDQ2XHU0ZjcwXHU4ZDI1XHU2MmRjXHU3YTE3XHU2NTkxXHU3M2VkXHU2NDJjXHU2MjczXHU4MjJjXHU5ODgxXHU2NzdmXHU3''@;'; put 'put ''MjQ4XHU2MjZlXHU2MmNjXHU0ZjM0XHU3NGUzXHU1MzRhXHU1MjllXHU3ZWNhXHU5MGE2XHU1ZTJlXHU2ODg2XHU2OTljXHU4MTgwXHU3ZWQxXHU2OGQyXHU3OGM1XHU4NjhjXHU5NTUxXHU1MDhkXHU4YzI0XHU4MmRlXHU4MGRlXHU1MzA1XHU4OTEyXHU1MjY1XHVmZmZkIi5zcGxpdCgiIiks''@;'; put 'put ''cD0wO3AhPV9bMTc2XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzZdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTc2XVtwXV09NDUwNTYrcCxiWzQ1MDU2K3BdPV9bMTc2XVtwXSk7Zm9yKF9bMTc3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHU3NmM0XHU3NmM3XHU3NmM5XHU3NmNiXHU3NmNjXHU3NmQzXHU3NmQ1XHU3NmQ5XHU3NmRhXHU3NmRjXHU3NmRkXHU3NmRlXHU3NmUwXHU3NmUxXHU3NmUyXHU3NmUzXHU3NmU0XHU3NmU2XHU3NmU3XHU3NmU4XHU3NmU5XHU3NmVhXHU3NmViXHU3NmVjXHU3NmVkXHU3NmYwXHU3NmYz''@;'; put 'put ''XHU3NmY1XHU3NmY2XHU3NmY3XHU3NmZhXHU3NmZiXHU3NmZkXHU3NmZmXHU3NzAwXHU3NzAyXHU3NzAzXHU3NzA1XHU3NzA2XHU3NzBhXHU3NzBjXHU3NzBlXHU3NzBmXHU3NzEwXHU3NzExXHU3NzEyXHU3NzEzXHU3NzE0XHU3NzE1XHU3NzE2XHU3NzE3XHU3NzE4XHU3NzFiXHU3NzFjXHU3''@;'; put 'put ''NzFkXHU3NzFlXHU3NzIxXHU3NzIzXHU3NzI0XHU3NzI1XHU3NzI3XHU3NzJhXHU3NzJiXHVmZmZkXHU3NzJjXHU3NzJlXHU3NzMwXHU3NzMxXHU3NzMyXHU3NzMzXHU3NzM0XHU3NzM5XHU3NzNiXHU3NzNkXHU3NzNlXHU3NzNmXHU3NzQyXHU3NzQ0XHU3NzQ1XHU3NzQ2XHU3NzQ4XHU3NzQ5''@;'; put 'put ''XHU3NzRhXHU3NzRiXHU3NzRjXHU3NzRkXHU3NzRlXHU3NzRmXHU3NzUyXHU3NzUzXHU3NzU0XHU3NzU1XHU3NzU2XHU3NzU3XHU3NzU4XHU3NzU5XHU3NzVjXHU4NTg0XHU5NmY5XHU0ZmRkXHU1ODIxXHU5OTcxXHU1YjlkXHU2MmIxXHU2MmE1XHU2NmI0XHU4Yzc5XHU5YzhkXHU3MjA2XHU2''@;'; put 'put ''NzZmXHU3ODkxXHU2MGIyXHU1MzUxXHU1MzE3XHU4Zjg4XHU4MGNjXHU4ZDFkXHU5NGExXHU1MDBkXHU3MmM4XHU1OTA3XHU2MGViXHU3MTE5XHU4OGFiXHU1OTU0XHU4MmVmXHU2NzJjXHU3YjI4XHU1ZDI5XHU3ZWY3XHU3NTJkXHU2Y2Y1XHU4ZTY2XHU4ZmY4XHU5MDNjXHU5ZjNiXHU2YmQ0''@;'; put 'put ''XHU5MTE5XHU3YjE0XHU1ZjdjXHU3OGE3XHU4NGQ2XHU4NTNkXHU2YmQ1XHU2YmQ5XHU2YmQ2XHU1ZTAxXHU1ZTg3XHU3NWY5XHU5NWVkXHU2NTVkXHU1ZjBhXHU1ZmM1XHU4ZjlmXHU1OGMxXHU4MWMyXHU5MDdmXHU5NjViXHU5N2FkXHU4ZmI5XHU3ZjE2XHU4ZDJjXHU2MjQxXHU0ZmJmXHU1''@;'; put 'put ''M2Q4XHU1MzVlXHU4ZmE4XHU4ZmE5XHU4ZmFiXHU5MDRkXHU2ODA3XHU1ZjZhXHU4MTk4XHU4ODY4XHU5Y2Q2XHU2MThiXHU1MjJiXHU3NjJhXHU1ZjZjXHU2NThjXHU2ZmQyXHU2ZWU4XHU1YmJlXHU2NDQ4XHU1MTc1XHU1MWIwXHU2N2M0XHU0ZTE5XHU3OWM5XHU5OTdjXHU3MGIzXHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIikscD0wO3AhPV9bMTc3XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzddW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTc3XVtwXV09NDUzMTIrcCxiWzQ1MzEyK3BdPV9bMTc3XVtwXSk7Zm9yKF9bMTc4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHU3NzVkXHU3NzVlXHU3NzVmXHU3NzYwXHU3NzY0XHU3NzY3XHU3NzY5XHU3NzZhXHU3NzZkXHU3NzZlXHU3NzZmXHU3NzcwXHU3NzcxXHU3NzcyXHU3NzczXHU3Nzc0XHU3Nzc1XHU3Nzc2XHU3Nzc3XHU3Nzc4XHU3NzdhXHU3NzdiXHU3NzdjXHU3NzgxXHU3Nzgy''@;'; put 'put ''XHU3NzgzXHU3Nzg2XHU3Nzg3XHU3Nzg4XHU3Nzg5XHU3NzhhXHU3NzhiXHU3NzhmXHU3NzkwXHU3NzkzXHU3Nzk0XHU3Nzk1XHU3Nzk2XHU3Nzk3XHU3Nzk4XHU3Nzk5XHU3NzlhXHU3NzliXHU3NzljXHU3NzlkXHU3NzllXHU3N2ExXHU3N2EzXHU3N2E0XHU3N2E2XHU3N2E4XHU3N2FiXHU3''@;'; put 'put ''N2FkXHU3N2FlXHU3N2FmXHU3N2IxXHU3N2IyXHU3N2I0XHU3N2I2XHU3N2I3XHU3N2I4XHU3N2I5XHU3N2JhXHVmZmZkXHU3N2JjXHU3N2JlXHU3N2MwXHU3N2MxXHU3N2MyXHU3N2MzXHU3N2M0XHU3N2M1XHU3N2M2XHU3N2M3XHU3N2M4XHU3N2M5XHU3N2NhXHU3N2NiXHU3N2NjXHU3N2Nl''@;'; put 'put ''XHU3N2NmXHU3N2QwXHU3N2QxXHU3N2QyXHU3N2QzXHU3N2Q0XHU3N2Q1XHU3N2Q2XHU3N2Q4XHU3N2Q5XHU3N2RhXHU3N2RkXHU3N2RlXHU3N2RmXHU3N2UwXHU3N2UxXHU3N2U0XHU3NWM1XHU1ZTc2XHU3M2JiXHU4M2UwXHU2NGFkXHU2MmU4XHU5NGI1XHU2Y2UyXHU1MzVhXHU1MmMzXHU2''@;'; put 'put ''NDBmXHU5NGMyXHU3Yjk0XHU0ZjJmXHU1ZTFiXHU4MjM2XHU4MTE2XHU4MThhXHU2ZTI0XHU2Y2NhXHU5YTczXHU2MzU1XHU1MzVjXHU1NGZhXHU4ODY1XHU1N2UwXHU0ZTBkXHU1ZTAzXHU2YjY1XHU3YzNmXHU5MGU4XHU2MDE2XHU2NGU2XHU3MzFjXHU4OGMxXHU2NzUwXHU2MjRkXHU4ZDIy''@;'; put 'put ''XHU3NzZjXHU4ZTI5XHU5MWM3XHU1ZjY5XHU4M2RjXHU4NTIxXHU5OTEwXHU1M2MyXHU4Njk1XHU2YjhiXHU2MGVkXHU2MGU4XHU3MDdmXHU4MmNkXHU4MjMxXHU0ZWQzXHU2Y2E3XHU4NWNmXHU2NGNkXHU3Y2Q5XHU2OWZkXHU2NmY5XHU4MzQ5XHU1Mzk1XHU3YjU2XHU0ZmE3XHU1MThjXHU2''@;'; put 'put ''ZDRiXHU1YzQyXHU4ZTZkXHU2M2QyXHU1M2M5XHU4MzJjXHU4MzM2XHU2N2U1XHU3OGI0XHU2NDNkXHU1YmRmXHU1Yzk0XHU1ZGVlXHU4YmU3XHU2MmM2XHU2N2Y0XHU4YzdhXHU2NDAwXHU2M2JhXHU4NzQ5XHU5OThiXHU4YzE3XHU3ZjIwXHU5NGYyXHU0ZWE3XHU5NjEwXHU5OGE0XHU2NjBj''@;'; put 'put ''XHU3MzE2XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTc4XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzhdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTc4XVtwXV09NDU1NjgrcCxiWzQ1NTY4K3BdPV9bMTc4XVtwXSk7Zm9yKF9bMTc5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3N2U2XHU3N2U4XHU3N2VhXHU3N2VmXHU3N2YwXHU3N2YxXHU3N2YyXHU3N2Y0XHU3N2Y1XHU3N2Y3XHU3N2Y5XHU3N2ZhXHU3N2ZiXHU3N2ZjXHU3ODAzXHU3ODA0XHU3ODA1XHU3ODA2XHU3ODA3XHU3ODA4XHU3ODBhXHU3ODBiXHU3ODBl''@;'; put 'put ''XHU3ODBmXHU3ODEwXHU3ODEzXHU3ODE1XHU3ODE5XHU3ODFiXHU3ODFlXHU3ODIwXHU3ODIxXHU3ODIyXHU3ODI0XHU3ODI4XHU3ODJhXHU3ODJiXHU3ODJlXHU3ODJmXHU3ODMxXHU3ODMyXHU3ODMzXHU3ODM1XHU3ODM2XHU3ODNkXHU3ODNmXHU3ODQxXHU3ODQyXHU3ODQzXHU3ODQ0XHU3''@;'; put 'put ''ODQ2XHU3ODQ4XHU3ODQ5XHU3ODRhXHU3ODRiXHU3ODRkXHU3ODRmXHU3ODUxXHU3ODUzXHU3ODU0XHU3ODU4XHU3ODU5XHU3ODVhXHVmZmZkXHU3ODViXHU3ODVjXHU3ODVlXHU3ODVmXHU3ODYwXHU3ODYxXHU3ODYyXHU3ODYzXHU3ODY0XHU3ODY1XHU3ODY2XHU3ODY3XHU3ODY4XHU3ODY5''@;'; put 'put ''XHU3ODZmXHU3ODcwXHU3ODcxXHU3ODcyXHU3ODczXHU3ODc0XHU3ODc1XHU3ODc2XHU3ODc4XHU3ODc5XHU3ODdhXHU3ODdiXHU3ODdkXHU3ODdlXHU3ODdmXHU3ODgwXHU3ODgxXHU3ODgyXHU3ODgzXHU1NzNhXHU1YzFkXHU1ZTM4XHU5NTdmXHU1MDdmXHU4MGEwXHU1MzgyXHU2NTVlXHU3''@;'; put 'put ''NTQ1XHU1NTMxXHU1MDIxXHU4ZDg1XHU2Mjg0XHU5NDllXHU2NzFkXHU1NjMyXHU2ZjZlXHU1ZGUyXHU1NDM1XHU3MDkyXHU4ZjY2XHU2MjZmXHU2NGE0XHU2M2EzXHU1ZjdiXHU2Zjg4XHU5MGY0XHU4MWUzXHU4ZmIwXHU1YzE4XHU2NjY4XHU1ZmYxXHU2Yzg5XHU5NjQ4XHU4ZDgxXHU4ODZj''@;'; put 'put ''XHU2NDkxXHU3OWYwXHU1N2NlXHU2YTU5XHU2MjEwXHU1NDQ4XHU0ZTU4XHU3YTBiXHU2MGU5XHU2Zjg0XHU4YmRhXHU2MjdmXHU5MDFlXHU5YThiXHU3OWU0XHU1NDAzXHU3NWY0XHU2MzAxXHU1MzE5XHU2YzYwXHU4ZmRmXHU1ZjFiXHU5YTcwXHU4MDNiXHU5ZjdmXHU0Zjg4XHU1YzNhXHU4''@;'; put 'put ''ZDY0XHU3ZmM1XHU2NWE1XHU3MGJkXHU1MTQ1XHU1MWIyXHU4NjZiXHU1ZDA3XHU1YmEwXHU2MmJkXHU5MTZjXHU3NTc0XHU4ZTBjXHU3YTIwXHU2MTAxXHU3Yjc5XHU0ZWM3XHU3ZWY4XHU3Nzg1XHU0ZTExXHU4MWVkXHU1MjFkXHU1MWZhXHU2YTcxXHU1M2E4XHU4ZTg3XHU5NTA0XHU5NmNm''@;'; put 'put ''XHU2ZWMxXHU5NjY0XHU2OTVhXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTc5XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzldW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTc5XVtwXV09NDU4MjQrcCxiWzQ1ODI0K3BdPV9bMTc5XVtwXSk7Zm9yKF9bMTgwXT0iXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ODg0XHU3ODg1XHU3ODg2XHU3ODg4XHU3ODhhXHU3ODhiXHU3ODhmXHU3ODkwXHU3ODkyXHU3ODk0XHU3ODk1XHU3ODk2XHU3ODk5XHU3ODlkXHU3ODllXHU3OGEwXHU3OGEyXHU3OGE0XHU3OGE2XHU3OGE4XHU3OGE5''@;'; put 'put ''XHU3OGFhXHU3OGFiXHU3OGFjXHU3OGFkXHU3OGFlXHU3OGFmXHU3OGI1XHU3OGI2XHU3OGI3XHU3OGI4XHU3OGJhXHU3OGJiXHU3OGJjXHU3OGJkXHU3OGJmXHU3OGMwXHU3OGMyXHU3OGMzXHU3OGM0XHU3OGM2XHU3OGM3XHU3OGM4XHU3OGNjXHU3OGNkXHU3OGNlXHU3OGNmXHU3OGQxXHU3''@;'; put 'put ''OGQyXHU3OGQzXHU3OGQ2XHU3OGQ3XHU3OGQ4XHU3OGRhXHU3OGRiXHU3OGRjXHU3OGRkXHU3OGRlXHU3OGRmXHU3OGUwXHU3OGUxXHU3OGUyXHU3OGUzXHVmZmZkXHU3OGU0XHU3OGU1XHU3OGU2XHU3OGU3XHU3OGU5XHU3OGVhXHU3OGViXHU3OGVkXHU3OGVlXHU3OGVmXHU3OGYwXHU3OGYx''@;'; put 'put ''XHU3OGYzXHU3OGY1XHU3OGY2XHU3OGY4XHU3OGY5XHU3OGZiXHU3OGZjXHU3OGZkXHU3OGZlXHU3OGZmXHU3OTAwXHU3OTAyXHU3OTAzXHU3OTA0XHU3OTA2XHU3OTA3XHU3OTA4XHU3OTA5XHU3OTBhXHU3OTBiXHU3OTBjXHU3ODQwXHU1MGE4XHU3N2Q3XHU2NDEwXHU4OWU2XHU1OTA0XHU2''@;'; put 'put ''M2UzXHU1ZGRkXHU3YTdmXHU2OTNkXHU0ZjIwXHU4MjM5XHU1NTk4XHU0ZTMyXHU3NWFlXHU3YTk3XHU1ZTYyXHU1ZThhXHU5NWVmXHU1MjFiXHU1NDM5XHU3MDhhXHU2Mzc2XHU5NTI0XHU1NzgyXHU2NjI1XHU2OTNmXHU5MTg3XHU1NTA3XHU2ZGYzXHU3ZWFmXHU4ODIyXHU2MjMzXHU3ZWYw''@;'; put 'put ''XHU3NWI1XHU4MzI4XHU3OGMxXHU5NmNjXHU4ZjllXHU2MTQ4XHU3NGY3XHU4YmNkXHU2YjY0XHU1MjNhXHU4ZDUwXHU2YjIxXHU4MDZhXHU4NDcxXHU1NmYxXHU1MzA2XHU0ZWNlXHU0ZTFiXHU1MWQxXHU3Yzk3XHU5MThiXHU3YzA3XHU0ZmMzXHU4ZTdmXHU3YmUxXHU3YTljXHU2NDY3XHU1''@;'; put 'put ''ZDE0XHU1MGFjXHU4MTA2XHU3NjAxXHU3Y2I5XHU2ZGVjXHU3ZmUwXHU2NzUxXHU1YjU4XHU1YmY4XHU3OGNiXHU2NGFlXHU2NDEzXHU2M2FhXHU2MzJiXHU5NTE5XHU2NDJkXHU4ZmJlXHU3YjU0XHU3NjI5XHU2MjUzXHU1OTI3XHU1NDQ2XHU2Yjc5XHU1MGEzXHU2MjM0XHU1ZTI2XHU2Yjg2''@;'; put 'put ''XHU0ZWUzXHU4ZDM3XHU4ODhiXHU1Zjg1XHU5MDJlXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTgwXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODBdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTgwXVtwXV09NDYwODArcCxiWzQ2MDgwK3BdPV9bMTgwXVtwXSk7Zm9yKF9bMTgxXT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OTBkXHU3OTBlXHU3OTBmXHU3OTEwXHU3OTExXHU3OTEyXHU3OTE0XHU3OTE1XHU3OTE2XHU3OTE3XHU3OTE4XHU3OTE5XHU3OTFhXHU3OTFiXHU3OTFjXHU3OTFkXHU3OTFmXHU3OTIwXHU3OTIx''@;'; put 'put ''XHU3OTIyXHU3OTIzXHU3OTI1XHU3OTI2XHU3OTI3XHU3OTI4XHU3OTI5XHU3OTJhXHU3OTJiXHU3OTJjXHU3OTJkXHU3OTJlXHU3OTJmXHU3OTMwXHU3OTMxXHU3OTMyXHU3OTMzXHU3OTM1XHU3OTM2XHU3OTM3XHU3OTM4XHU3OTM5XHU3OTNkXHU3OTNmXHU3OTQyXHU3OTQzXHU3OTQ0XHU3''@;'; put 'put ''OTQ1XHU3OTQ3XHU3OTRhXHU3OTRiXHU3OTRjXHU3OTRkXHU3OTRlXHU3OTRmXHU3OTUwXHU3OTUxXHU3OTUyXHU3OTU0XHU3OTU1XHU3OTU4XHU3OTU5XHU3OTYxXHU3OTYzXHVmZmZkXHU3OTY0XHU3OTY2XHU3OTY5XHU3OTZhXHU3OTZiXHU3OTZjXHU3OTZlXHU3OTcwXHU3OTcxXHU3OTcy''@;'; put 'put ''XHU3OTczXHU3OTc0XHU3OTc1XHU3OTc2XHU3OTc5XHU3OTdiXHU3OTdjXHU3OTdkXHU3OTdlXHU3OTdmXHU3OTgyXHU3OTgzXHU3OTg2XHU3OTg3XHU3OTg4XHU3OTg5XHU3OThiXHU3OThjXHU3OThkXHU3OThlXHU3OTkwXHU3OTkxXHU3OTkyXHU2MDIwXHU4MDNkXHU2MmM1XHU0ZTM5XHU1''@;'; put 'put ''MzU1XHU5MGY4XHU2M2I4XHU4MGM2XHU2NWU2XHU2YzJlXHU0ZjQ2XHU2MGVlXHU2ZGUxXHU4YmRlXHU1ZjM5XHU4NmNiXHU1ZjUzXHU2MzIxXHU1MTVhXHU4MzYxXHU2ODYzXHU1MjAwXHU2MzYzXHU4ZTQ4XHU1MDEyXHU1YzliXHU3OTc3XHU1YmZjXHU1MjMwXHU3YTNiXHU2MGJjXHU5MDUz''@;'; put 'put ''XHU3NmQ3XHU1ZmI3XHU1Zjk3XHU3Njg0XHU4ZTZjXHU3MDZmXHU3NjdiXHU3YjQ5XHU3N2FhXHU1MWYzXHU5MDkzXHU1ODI0XHU0ZjRlXHU2ZWY0XHU4ZmVhXHU2NTRjXHU3YjFiXHU3MmM0XHU2ZGE0XHU3ZmRmXHU1YWUxXHU2MmI1XHU1ZTk1XHU1NzMwXHU4NDgyXHU3YjJjXHU1ZTFkXHU1''@;'; put 'put ''ZjFmXHU5MDEyXHU3ZjE0XHU5OGEwXHU2MzgyXHU2ZWM3XHU3ODk4XHU3MGI5XHU1MTc4XHU5NzViXHU1N2FiXHU3NTM1XHU0ZjQzXHU3NTM4XHU1ZTk3XHU2MGU2XHU1OTYwXHU2ZGMwXHU2YmJmXHU3ODg5XHU1M2ZjXHU5NmQ1XHU1MWNiXHU1MjAxXHU2Mzg5XHU1NDBhXHU5NDkzXHU4YzAz''@;'; put 'put ''XHU4ZGNjXHU3MjM5XHU3ODlmXHU4Nzc2XHU4ZmVkXHU4YzBkXHU1M2UwXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTgxXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODFdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTgxXVtwXV09NDYzMzYrcCxiWzQ2MzM2K3BdPV9bMTgxXVtwXSk7Zm9y''@;'; put 'put ''KF9bMTgyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OTkzXHU3OTk0XHU3OTk1XHU3OTk2XHU3OTk3XHU3OTk4XHU3OTk5XHU3OTliXHU3OTljXHU3OTlkXHU3OTllXHU3OTlmXHU3OWEwXHU3OWExXHU3OWEyXHU3OWEzXHU3OWE0''@;'; put 'put ''XHU3OWE1XHU3OWE2XHU3OWE4XHU3OWE5XHU3OWFhXHU3OWFiXHU3OWFjXHU3OWFkXHU3OWFlXHU3OWFmXHU3OWIwXHU3OWIxXHU3OWIyXHU3OWI0XHU3OWI1XHU3OWI2XHU3OWI3XHU3OWI4XHU3OWJjXHU3OWJmXHU3OWMyXHU3OWM0XHU3OWM1XHU3OWM3XHU3OWM4XHU3OWNhXHU3OWNjXHU3''@;'; put 'put ''OWNlXHU3OWNmXHU3OWQwXHU3OWQzXHU3OWQ0XHU3OWQ2XHU3OWQ3XHU3OWQ5XHU3OWRhXHU3OWRiXHU3OWRjXHU3OWRkXHU3OWRlXHU3OWUwXHU3OWUxXHU3OWUyXHU3OWU1XHU3OWU4XHU3OWVhXHVmZmZkXHU3OWVjXHU3OWVlXHU3OWYxXHU3OWYyXHU3OWYzXHU3OWY0XHU3OWY1XHU3OWY2''@;'; put 'put ''XHU3OWY3XHU3OWY5XHU3OWZhXHU3OWZjXHU3OWZlXHU3OWZmXHU3YTAxXHU3YTA0XHU3YTA1XHU3YTA3XHU3YTA4XHU3YTA5XHU3YTBhXHU3YTBjXHU3YTBmXHU3YTEwXHU3YTExXHU3YTEyXHU3YTEzXHU3YTE1XHU3YTE2XHU3YTE4XHU3YTE5XHU3YTFiXHU3YTFjXHU0ZTAxXHU3NmVmXHU1''@;'; put 'put ''M2VlXHU5NDg5XHU5ODc2XHU5ZjBlXHU5NTJkXHU1YjlhXHU4YmEyXHU0ZTIyXHU0ZTFjXHU1MWFjXHU4NDYzXHU2MWMyXHU1MmE4XHU2ODBiXHU0Zjk3XHU2MDZiXHU1MWJiXHU2ZDFlXHU1MTVjXHU2Mjk2XHU2NTk3XHU5NjYxXHU4YzQ2XHU5MDE3XHU3NWQ4XHU5MGZkXHU3NzYzXHU2YmQy''@;'; put 'put ''XHU3MjhhXHU3MmVjXHU4YmZiXHU1ODM1XHU3Nzc5XHU4ZDRjXHU2NzVjXHU5NTQwXHU4MDlhXHU1ZWE2XHU2ZTIxXHU1OTkyXHU3YWVmXHU3N2VkXHU5NTNiXHU2YmI1XHU2NWFkXHU3ZjBlXHU1ODA2XHU1MTUxXHU5NjFmXHU1YmY5XHU1OGE5XHU1NDI4XHU4ZTcyXHU2NTY2XHU5ODdmXHU1''@;'; put 'put ''NmU0XHU5NDlkXHU3NmZlXHU5MDQxXHU2Mzg3XHU1NGM2XHU1OTFhXHU1OTNhXHU1NzliXHU4ZWIyXHU2NzM1XHU4ZGZhXHU4MjM1XHU1MjQxXHU2MGYwXHU1ODE1XHU4NmZlXHU1Y2U4XHU5ZTQ1XHU0ZmM0XHU5ODlkXHU4YmI5XHU1YTI1XHU2MDc2XHU1Mzg0XHU2MjdjXHU5MDRmXHU5MTAy''@;'; put 'put ''XHU5OTdmXHU2MDY5XHU4MDBjXHU1MTNmXHU4MDMzXHU1YzE0XHU5OTc1XHU2ZDMxXHU0ZThjXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTgyXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODJdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTgyXVtwXV09NDY1OTIrcCxiWzQ2NTkyK3BdPV9b''@;'; put 'put ''MTgyXVtwXSk7Zm9yKF9bMTgzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YTFkXHU3YTFmXHU3YTIxXHU3YTIyXHU3YTI0XHU3YTI1XHU3YTI2XHU3YTI3XHU3YTI4XHU3YTI5XHU3YTJhXHU3YTJiXHU3YTJjXHU3YTJkXHU3YTJl''@;'; put 'put ''XHU3YTJmXHU3YTMwXHU3YTMxXHU3YTMyXHU3YTM0XHU3YTM1XHU3YTM2XHU3YTM4XHU3YTNhXHU3YTNlXHU3YTQwXHU3YTQxXHU3YTQyXHU3YTQzXHU3YTQ0XHU3YTQ1XHU3YTQ3XHU3YTQ4XHU3YTQ5XHU3YTRhXHU3YTRiXHU3YTRjXHU3YTRkXHU3YTRlXHU3YTRmXHU3YTUwXHU3YTUyXHU3''@;'; put 'put ''YTUzXHU3YTU0XHU3YTU1XHU3YTU2XHU3YTU4XHU3YTU5XHU3YTVhXHU3YTViXHU3YTVjXHU3YTVkXHU3YTVlXHU3YTVmXHU3YTYwXHU3YTYxXHU3YTYyXHU3YTYzXHU3YTY0XHU3YTY1XHU3YTY2XHU3YTY3XHU3YTY4XHVmZmZkXHU3YTY5XHU3YTZhXHU3YTZiXHU3YTZjXHU3YTZkXHU3YTZl''@;'; put 'put ''XHU3YTZmXHU3YTcxXHU3YTcyXHU3YTczXHU3YTc1XHU3YTdiXHU3YTdjXHU3YTdkXHU3YTdlXHU3YTgyXHU3YTg1XHU3YTg3XHU3YTg5XHU3YThhXHU3YThiXHU3YThjXHU3YThlXHU3YThmXHU3YTkwXHU3YTkzXHU3YTk0XHU3YTk5XHU3YTlhXHU3YTliXHU3YTllXHU3YWExXHU3YWEyXHU4''@;'; put 'put ''ZDMwXHU1M2QxXHU3ZjVhXHU3YjRmXHU0ZjEwXHU0ZTRmXHU5NjAwXHU2Y2Q1XHU3M2QwXHU4NWU5XHU1ZTA2XHU3NTZhXHU3ZmZiXHU2YTBhXHU3N2ZlXHU5NDkyXHU3ZTQxXHU1MWUxXHU3MGU2XHU1M2NkXHU4ZmQ0XHU4MzAzXHU4ZDI5XHU3MmFmXHU5OTZkXHU2Y2RiXHU1NzRhXHU4MmIz''@;'; put 'put ''XHU2NWI5XHU4MGFhXHU2MjNmXHU5NjMyXHU1OWE4XHU0ZWZmXHU4YmJmXHU3ZWJhXHU2NTNlXHU4M2YyXHU5NzVlXHU1NTYxXHU5OGRlXHU4MGE1XHU1MzJhXHU4YmZkXHU1NDIwXHU4MGJhXHU1ZTlmXHU2Y2I4XHU4ZDM5XHU4MmFjXHU5MTVhXHU1NDI5XHU2YzFiXHU1MjA2XHU3ZWI3XHU1''@;'; put 'put ''NzVmXHU3MTFhXHU2YzdlXHU3Yzg5XHU1OTRiXHU0ZWZkXHU1ZmZmXHU2MTI0XHU3Y2FhXHU0ZTMwXHU1YzAxXHU2N2FiXHU4NzAyXHU1Y2YwXHU5NTBiXHU5OGNlXHU3NWFmXHU3MGZkXHU5MDIyXHU1MWFmXHU3ZjFkXHU4YmJkXHU1OTQ5XHU1MWU0XHU0ZjViXHU1NDI2XHU1OTJiXHU2NTc3''@;'; put 'put ''XHU4MGE0XHU1Yjc1XHU2Mjc2XHU2MmMyXHU4ZjkwXHU1ZTQ1XHU2YzFmXHU3YjI2XHU0ZjBmXHU0ZmQ4XHU2NzBkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTgzXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODNdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTgzXVtwXV09NDY4NDgrcCxi''@;'; put 'put ''WzQ2ODQ4K3BdPV9bMTgzXVtwXSk7Zm9yKF9bMTg0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YWEzXHU3YWE0XHU3YWE3XHU3YWE5XHU3YWFhXHU3YWFiXHU3YWFlXHU3YWFmXHU3YWIwXHU3YWIxXHU3YWIyXHU3YWI0XHU3YWI1''@;'; put 'put ''XHU3YWI2XHU3YWI3XHU3YWI4XHU3YWI5XHU3YWJhXHU3YWJiXHU3YWJjXHU3YWJkXHU3YWJlXHU3YWMwXHU3YWMxXHU3YWMyXHU3YWMzXHU3YWM0XHU3YWM1XHU3YWM2XHU3YWM3XHU3YWM4XHU3YWM5XHU3YWNhXHU3YWNjXHU3YWNkXHU3YWNlXHU3YWNmXHU3YWQwXHU3YWQxXHU3YWQyXHU3''@;'; put 'put ''YWQzXHU3YWQ0XHU3YWQ1XHU3YWQ3XHU3YWQ4XHU3YWRhXHU3YWRiXHU3YWRjXHU3YWRkXHU3YWUxXHU3YWUyXHU3YWU0XHU3YWU3XHU3YWU4XHU3YWU5XHU3YWVhXHU3YWViXHU3YWVjXHU3YWVlXHU3YWYwXHU3YWYxXHU3YWYyXHU3YWYzXHVmZmZkXHU3YWY0XHU3YWY1XHU3YWY2XHU3YWY3''@;'; put 'put ''XHU3YWY4XHU3YWZiXHU3YWZjXHU3YWZlXHU3YjAwXHU3YjAxXHU3YjAyXHU3YjA1XHU3YjA3XHU3YjA5XHU3YjBjXHU3YjBkXHU3YjBlXHU3YjEwXHU3YjEyXHU3YjEzXHU3YjE2XHU3YjE3XHU3YjE4XHU3YjFhXHU3YjFjXHU3YjFkXHU3YjFmXHU3YjIxXHU3YjIyXHU3YjIzXHU3YjI3XHU3''@;'; put 'put ''YjI5XHU3YjJkXHU2ZDZlXHU2ZGFhXHU3OThmXHU4OGIxXHU1ZjE3XHU3NTJiXHU2MjlhXHU4Zjg1XHU0ZmVmXHU5MWRjXHU2NWE3XHU4MTJmXHU4MTUxXHU1ZTljXHU4MTUwXHU4ZDc0XHU1MjZmXHU4OTg2XHU4ZDRiXHU1OTBkXHU1MDg1XHU0ZWQ4XHU5NjFjXHU3MjM2XHU4MTc5XHU4ZDFm''@;'; put 'put ''XHU1YmNjXHU4YmEzXHU5NjQ0XHU1OTg3XHU3ZjFhXHU1NDkwXHU1Njc2XHU1NjBlXHU4YmU1XHU2NTM5XHU2OTgyXHU5NDk5XHU3NmQ2XHU2ZTg5XHU1ZTcyXHU3NTE4XHU2NzQ2XHU2N2QxXHU3YWZmXHU4MDlkXHU4ZDc2XHU2MTFmXHU3OWM2XHU2NTYyXHU4ZDYzXHU1MTg4XHU1MjFhXHU5''@;'; put 'put ''NGEyXHU3ZjM4XHU4MDliXHU3ZWIyXHU1Yzk3XHU2ZTJmXHU2NzYwXHU3YmQ5XHU3NjhiXHU5YWQ4XHU4MThmXHU3Zjk0XHU3Y2Q1XHU2NDFlXHU5NTUwXHU3YTNmXHU1NDRhXHU1NGU1XHU2YjRjXHU2NDAxXHU2MjA4XHU5ZTNkXHU4MGYzXHU3NTk5XHU1MjcyXHU5NzY5XHU4NDViXHU2ODNj''@;'; put 'put ''XHU4NmU0XHU5NjAxXHU5Njk0XHU5NGVjXHU0ZTJhXHU1NDA0XHU3ZWQ5XHU2ODM5XHU4ZGRmXHU4MDE1XHU2NmY0XHU1ZTlhXHU3ZmI5XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTg0XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODRdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTg0XVtw''@;'; put 'put ''XV09NDcxMDQrcCxiWzQ3MTA0K3BdPV9bMTg0XVtwXSk7Zm9yKF9bMTg1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YjJmXHU3YjMwXHU3YjMyXHU3YjM0XHU3YjM1XHU3YjM2XHU3YjM3XHU3YjM5XHU3YjNiXHU3YjNkXHU3YjNm''@;'; put 'put ''XHU3YjQwXHU3YjQxXHU3YjQyXHU3YjQzXHU3YjQ0XHU3YjQ2XHU3YjQ4XHU3YjRhXHU3YjRkXHU3YjRlXHU3YjUzXHU3YjU1XHU3YjU3XHU3YjU5XHU3YjVjXHU3YjVlXHU3YjVmXHU3YjYxXHU3YjYzXHU3YjY0XHU3YjY1XHU3YjY2XHU3YjY3XHU3YjY4XHU3YjY5XHU3YjZhXHU3YjZiXHU3''@;'; put 'put ''YjZjXHU3YjZkXHU3YjZmXHU3YjcwXHU3YjczXHU3Yjc0XHU3Yjc2XHU3Yjc4XHU3YjdhXHU3YjdjXHU3YjdkXHU3YjdmXHU3YjgxXHU3YjgyXHU3YjgzXHU3Yjg0XHU3Yjg2XHU3Yjg3XHU3Yjg4XHU3Yjg5XHU3YjhhXHU3YjhiXHU3YjhjXHU3YjhlXHU3YjhmXHVmZmZkXHU3YjkxXHU3Yjky''@;'; put 'put ''XHU3YjkzXHU3Yjk2XHU3Yjk4XHU3Yjk5XHU3YjlhXHU3YjliXHU3YjllXHU3YjlmXHU3YmEwXHU3YmEzXHU3YmE0XHU3YmE1XHU3YmFlXHU3YmFmXHU3YmIwXHU3YmIyXHU3YmIzXHU3YmI1XHU3YmI2XHU3YmI3XHU3YmI5XHU3YmJhXHU3YmJiXHU3YmJjXHU3YmJkXHU3YmJlXHU3YmJmXHU3''@;'; put 'put ''YmMwXHU3YmMyXHU3YmMzXHU3YmM0XHU1N2MyXHU4MDNmXHU2ODk3XHU1ZGU1XHU2NTNiXHU1MjlmXHU2MDZkXHU5ZjlhXHU0ZjliXHU4ZWFjXHU1MTZjXHU1YmFiXHU1ZjEzXHU1ZGU5XHU2YzVlXHU2MmYxXHU4ZDIxXHU1MTcxXHU5NGE5XHU1MmZlXHU2YzlmXHU4MmRmXHU3MmQ3XHU1N2Ey''@;'; put 'put ''XHU2Nzg0XHU4ZDJkXHU1OTFmXHU4ZjljXHU4M2M3XHU1NDk1XHU3YjhkXHU0ZjMwXHU2Y2JkXHU1YjY0XHU1OWQxXHU5ZjEzXHU1M2U0XHU4NmNhXHU5YWE4XHU4YzM3XHU4MGExXHU2NTQ1XHU5ODdlXHU1NmZhXHU5NmM3XHU1MjJlXHU3NGRjXHU1MjUwXHU1YmUxXHU2MzAyXHU4OTAyXHU0''@;'; put 'put ''ZTU2XHU2MmQwXHU2MDJhXHU2OGZhXHU1MTczXHU1Yjk4XHU1MWEwXHU4OWMyXHU3YmExXHU5OTg2XHU3ZjUwXHU2MGVmXHU3MDRjXHU4ZDJmXHU1MTQ5XHU1ZTdmXHU5MDFiXHU3NDcwXHU4OWM0XHU1NzJkXHU3ODQ1XHU1ZjUyXHU5ZjlmXHU5NWZhXHU4ZjY4XHU5YjNjXHU4YmUxXHU3Njc4''@;'; put 'put ''XHU2ODQyXHU2N2RjXHU4ZGVhXHU4ZDM1XHU1MjNkXHU4ZjhhXHU2ZWRhXHU2OGNkXHU5NTA1XHU5MGVkXHU1NmZkXHU2NzljXHU4OGY5XHU4ZmM3XHU1NGM4XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTg1XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODVdW3BdLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihJW19bMTg1XVtwXV09NDczNjArcCxiWzQ3MzYwK3BdPV9bMTg1XVtwXSk7Zm9yKF9bMTg2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YmM1XHU3YmM4XHU3YmM5XHU3YmNhXHU3YmNiXHU3YmNkXHU3YmNlXHU3YmNmXHU3YmQw''@;'; put 'put ''XHU3YmQyXHU3YmQ0XHU3YmQ1XHU3YmQ2XHU3YmQ3XHU3YmQ4XHU3YmRiXHU3YmRjXHU3YmRlXHU3YmRmXHU3YmUwXHU3YmUyXHU3YmUzXHU3YmU0XHU3YmU3XHU3YmU4XHU3YmU5XHU3YmViXHU3YmVjXHU3YmVkXHU3YmVmXHU3YmYwXHU3YmYyXHU3YmYzXHU3YmY0XHU3YmY1XHU3YmY2XHU3''@;'; put 'put ''YmY4XHU3YmY5XHU3YmZhXHU3YmZiXHU3YmZkXHU3YmZmXHU3YzAwXHU3YzAxXHU3YzAyXHU3YzAzXHU3YzA0XHU3YzA1XHU3YzA2XHU3YzA4XHU3YzA5XHU3YzBhXHU3YzBkXHU3YzBlXHU3YzEwXHU3YzExXHU3YzEyXHU3YzEzXHU3YzE0XHU3YzE1XHU3YzE3XHU3YzE4XHU3YzE5XHVmZmZk''@;'; put 'put ''XHU3YzFhXHU3YzFiXHU3YzFjXHU3YzFkXHU3YzFlXHU3YzIwXHU3YzIxXHU3YzIyXHU3YzIzXHU3YzI0XHU3YzI1XHU3YzI4XHU3YzI5XHU3YzJiXHU3YzJjXHU3YzJkXHU3YzJlXHU3YzJmXHU3YzMwXHU3YzMxXHU3YzMyXHU3YzMzXHU3YzM0XHU3YzM1XHU3YzM2XHU3YzM3XHU3YzM5XHU3''@;'; put 'put ''YzNhXHU3YzNiXHU3YzNjXHU3YzNkXHU3YzNlXHU3YzQyXHU5YWI4XHU1YjY5XHU2ZDc3XHU2YzI2XHU0ZWE1XHU1YmIzXHU5YTg3XHU5MTYzXHU2MWE4XHU5MGFmXHU5N2U5XHU1NDJiXHU2ZGI1XHU1YmQyXHU1MWZkXHU1NThhXHU3ZjU1XHU3ZmYwXHU2NGJjXHU2MzRkXHU2NWYxXHU2MWJl''@;'; put 'put ''XHU2MDhkXHU3MTBhXHU2YzU3XHU2YzQ5XHU1OTJmXHU2NzZkXHU4MjJhXHU1OGQ1XHU1NjhlXHU4YzZhXHU2YmViXHU5MGRkXHU1OTdkXHU4MDE3XHU1M2Y3XHU2ZDY5XHU1NDc1XHU1NTlkXHU4Mzc3XHU4M2NmXHU2ODM4XHU3OWJlXHU1NDhjXHU0ZjU1XHU1NDA4XHU3NmQyXHU4Yzg5XHU5''@;'; put 'put ''NjAyXHU2Y2IzXHU2ZGI4XHU4ZDZiXHU4OTEwXHU5ZTY0XHU4ZDNhXHU1NjNmXHU5ZWQxXHU3NWQ1XHU1Zjg4XHU3MmUwXHU2MDY4XHU1NGZjXHU0ZWE4XHU2YTJhXHU4ODYxXHU2MDUyXHU4ZjcwXHU1NGM0XHU3MGQ4XHU4Njc5XHU5ZTNmXHU2ZDJhXHU1YjhmXHU1ZjE4XHU3ZWEyXHU1NTg5''@;'; put 'put ''XHU0ZmFmXHU3MzM0XHU1NDNjXHU1MzlhXHU1MDE5XHU1NDBlXHU1NDdjXHU0ZTRlXHU1ZmZkXHU3NDVhXHU1OGY2XHU4NDZiXHU4MGUxXHU4Nzc0XHU3MmQwXHU3Y2NhXHU2ZTU2XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTg2XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODZdW3BdLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJihJW19bMTg2XVtwXV09NDc2MTYrcCxiWzQ3NjE2K3BdPV9bMTg2XVtwXSk7Zm9yKF9bMTg3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YzQzXHU3YzQ0XHU3YzQ1XHU3YzQ2XHU3YzQ3XHU3YzQ4XHU3YzQ5''@;'; put 'put ''XHU3YzRhXHU3YzRiXHU3YzRjXHU3YzRlXHU3YzRmXHU3YzUwXHU3YzUxXHU3YzUyXHU3YzUzXHU3YzU0XHU3YzU1XHU3YzU2XHU3YzU3XHU3YzU4XHU3YzU5XHU3YzVhXHU3YzViXHU3YzVjXHU3YzVkXHU3YzVlXHU3YzVmXHU3YzYwXHU3YzYxXHU3YzYyXHU3YzYzXHU3YzY0XHU3YzY1XHU3''@;'; put 'put ''YzY2XHU3YzY3XHU3YzY4XHU3YzY5XHU3YzZhXHU3YzZiXHU3YzZjXHU3YzZkXHU3YzZlXHU3YzZmXHU3YzcwXHU3YzcxXHU3YzcyXHU3Yzc1XHU3Yzc2XHU3Yzc3XHU3Yzc4XHU3Yzc5XHU3YzdhXHU3YzdlXHU3YzdmXHU3YzgwXHU3YzgxXHU3YzgyXHU3YzgzXHU3Yzg0XHU3Yzg1XHU3Yzg2''@;'; put 'put ''XHU3Yzg3XHVmZmZkXHU3Yzg4XHU3YzhhXHU3YzhiXHU3YzhjXHU3YzhkXHU3YzhlXHU3YzhmXHU3YzkwXHU3YzkzXHU3Yzk0XHU3Yzk2XHU3Yzk5XHU3YzlhXHU3YzliXHU3Y2EwXHU3Y2ExXHU3Y2EzXHU3Y2E2XHU3Y2E3XHU3Y2E4XHU3Y2E5XHU3Y2FiXHU3Y2FjXHU3Y2FkXHU3Y2FmXHU3''@;'; put 'put ''Y2IwXHU3Y2I0XHU3Y2I1XHU3Y2I2XHU3Y2I3XHU3Y2I4XHU3Y2JhXHU3Y2JiXHU1ZjI3XHU4NjRlXHU1NTJjXHU2MmE0XHU0ZTkyXHU2Y2FhXHU2MjM3XHU4MmIxXHU1NGQ3XHU1MzRlXHU3MzNlXHU2ZWQxXHU3NTNiXHU1MjEyXHU1MzE2XHU4YmRkXHU2OWQwXHU1ZjhhXHU2MDAwXHU2ZGVl''@;'; put 'put ''XHU1NzRmXHU2YjIyXHU3M2FmXHU2ODUzXHU4ZmQ4XHU3ZjEzXHU2MzYyXHU2MGEzXHU1NTI0XHU3NWVhXHU4YzYyXHU3MTE1XHU2ZGEzXHU1YmE2XHU1ZTdiXHU4MzUyXHU2MTRjXHU5ZWM0XHU3OGZhXHU4NzU3XHU3YzI3XHU3Njg3XHU1MWYwXHU2MGY2XHU3MTRjXHU2NjQzXHU1ZTRjXHU2''@;'; put 'put ''MDRkXHU4YzBlXHU3MDcwXHU2MzI1XHU4Zjg5XHU1ZmJkXHU2MDYyXHU4NmQ0XHU1NmRlXHU2YmMxXHU2MDk0XHU2MTY3XHU1MzQ5XHU2MGUwXHU2NjY2XHU4ZDNmXHU3OWZkXHU0ZjFhXHU3MGU5XHU2YzQ3XHU4YmIzXHU4YmYyXHU3ZWQ4XHU4MzY0XHU2NjBmXHU1YTVhXHU5YjQyXHU2ZDUx''@;'; put 'put ''XHU2ZGY3XHU4YzQxXHU2ZDNiXHU0ZjE5XHU3MDZiXHU4M2I3XHU2MjE2XHU2MGQxXHU5NzBkXHU4ZDI3XHU3OTc4XHU1MWZiXHU1NzNlXHU1N2ZhXHU2NzNhXHU3NTc4XHU3YTNkXHU3OWVmXHU3Yjk1XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTg3XS5sZW5ndGg7KytwKTY1NTMzIT09''@;'; put 'put ''X1sxODddW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTg3XVtwXV09NDc4NzIrcCxiWzQ3ODcyK3BdPV9bMTg3XVtwXSk7Zm9yKF9bMTg4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3Y2JmXHU3Y2MwXHU3Y2MyXHU3Y2MzXHU3Y2M0''@;'; put 'put ''XHU3Y2M2XHU3Y2M5XHU3Y2NiXHU3Y2NlXHU3Y2NmXHU3Y2QwXHU3Y2QxXHU3Y2QyXHU3Y2QzXHU3Y2Q0XHU3Y2Q4XHU3Y2RhXHU3Y2RiXHU3Y2RkXHU3Y2RlXHU3Y2UxXHU3Y2UyXHU3Y2UzXHU3Y2U0XHU3Y2U1XHU3Y2U2XHU3Y2U3XHU3Y2U5XHU3Y2VhXHU3Y2ViXHU3Y2VjXHU3Y2VkXHU3''@;'; put 'put ''Y2VlXHU3Y2YwXHU3Y2YxXHU3Y2YyXHU3Y2YzXHU3Y2Y0XHU3Y2Y1XHU3Y2Y2XHU3Y2Y3XHU3Y2Y5XHU3Y2ZhXHU3Y2ZjXHU3Y2ZkXHU3Y2ZlXHU3Y2ZmXHU3ZDAwXHU3ZDAxXHU3ZDAyXHU3ZDAzXHU3ZDA0XHU3ZDA1XHU3ZDA2XHU3ZDA3XHU3ZDA4XHU3ZDA5XHU3ZDBiXHU3ZDBjXHU3ZDBk''@;'; put 'put ''XHU3ZDBlXHU3ZDBmXHU3ZDEwXHVmZmZkXHU3ZDExXHU3ZDEyXHU3ZDEzXHU3ZDE0XHU3ZDE1XHU3ZDE2XHU3ZDE3XHU3ZDE4XHU3ZDE5XHU3ZDFhXHU3ZDFiXHU3ZDFjXHU3ZDFkXHU3ZDFlXHU3ZDFmXHU3ZDIxXHU3ZDIzXHU3ZDI0XHU3ZDI1XHU3ZDI2XHU3ZDI4XHU3ZDI5XHU3ZDJhXHU3''@;'; put 'put ''ZDJjXHU3ZDJkXHU3ZDJlXHU3ZDMwXHU3ZDMxXHU3ZDMyXHU3ZDMzXHU3ZDM0XHU3ZDM1XHU3ZDM2XHU4MDhjXHU5OTY1XHU4ZmY5XHU2ZmMwXHU4YmE1XHU5ZTIxXHU1OWVjXHU3ZWU5XHU3ZjA5XHU1NDA5XHU2NzgxXHU2OGQ4XHU4ZjkxXHU3YzRkXHU5NmM2XHU1M2NhXHU2MDI1XHU3NWJl''@;'; put 'put ''XHU2YzcyXHU1MzczXHU1YWM5XHU3ZWE3XHU2MzI0XHU1MWUwXHU4MTBhXHU1ZGYxXHU4NGRmXHU2MjgwXHU1MTgwXHU1YjYzXHU0ZjBlXHU3OTZkXHU1MjQyXHU2MGI4XHU2ZDRlXHU1YmM0XHU1YmMyXHU4YmExXHU4YmIwXHU2NWUyXHU1ZmNjXHU5NjQ1XHU1OTkzXHU3ZWU3XHU3ZWFhXHU1''@;'; put 'put ''NjA5XHU2N2I3XHU1OTM5XHU0ZjczXHU1YmI2XHU1MmEwXHU4MzVhXHU5ODhhXHU4ZDNlXHU3NTMyXHU5NGJlXHU1MDQ3XHU3YTNjXHU0ZWY3XHU2N2I2XHU5YTdlXHU1YWMxXHU2YjdjXHU3NmQxXHU1NzVhXHU1YzE2XHU3YjNhXHU5NWY0XHU3MTRlXHU1MTdjXHU4MGE5XHU4MjcwXHU1OTc4''@;'; put 'put ''XHU3ZjA0XHU4MzI3XHU2OGMwXHU2N2VjXHU3OGIxXHU3ODc3XHU2MmUzXHU2MzYxXHU3YjgwXHU0ZmVkXHU1MjZhXHU1MWNmXHU4MzUwXHU2OWRiXHU5Mjc0XHU4ZGY1XHU4ZDMxXHU4OWMxXHU5NTJlXHU3YmFkXHU0ZWY2XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTg4XS5sZW5ndGg7''@;'; put 'put ''KytwKTY1NTMzIT09X1sxODhdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTg4XVtwXV09NDgxMjgrcCxiWzQ4MTI4K3BdPV9bMTg4XVtwXSk7Zm9yKF9bMTg5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZDM3XHU3ZDM4XHU3ZDM5''@;'; put 'put ''XHU3ZDNhXHU3ZDNiXHU3ZDNjXHU3ZDNkXHU3ZDNlXHU3ZDNmXHU3ZDQwXHU3ZDQxXHU3ZDQyXHU3ZDQzXHU3ZDQ0XHU3ZDQ1XHU3ZDQ2XHU3ZDQ3XHU3ZDQ4XHU3ZDQ5XHU3ZDRhXHU3ZDRiXHU3ZDRjXHU3ZDRkXHU3ZDRlXHU3ZDRmXHU3ZDUwXHU3ZDUxXHU3ZDUyXHU3ZDUzXHU3ZDU0XHU3''@;'; put 'put ''ZDU1XHU3ZDU2XHU3ZDU3XHU3ZDU4XHU3ZDU5XHU3ZDVhXHU3ZDViXHU3ZDVjXHU3ZDVkXHU3ZDVlXHU3ZDVmXHU3ZDYwXHU3ZDYxXHU3ZDYyXHU3ZDYzXHU3ZDY0XHU3ZDY1XHU3ZDY2XHU3ZDY3XHU3ZDY4XHU3ZDY5XHU3ZDZhXHU3ZDZiXHU3ZDZjXHU3ZDZkXHU3ZDZmXHU3ZDcwXHU3ZDcx''@;'; put 'put ''XHU3ZDcyXHU3ZDczXHU3ZDc0XHU3ZDc1XHU3ZDc2XHVmZmZkXHU3ZDc4XHU3ZDc5XHU3ZDdhXHU3ZDdiXHU3ZDdjXHU3ZDdkXHU3ZDdlXHU3ZDdmXHU3ZDgwXHU3ZDgxXHU3ZDgyXHU3ZDgzXHU3ZDg0XHU3ZDg1XHU3ZDg2XHU3ZDg3XHU3ZDg4XHU3ZDg5XHU3ZDhhXHU3ZDhiXHU3ZDhjXHU3''@;'; put 'put ''ZDhkXHU3ZDhlXHU3ZDhmXHU3ZDkwXHU3ZDkxXHU3ZDkyXHU3ZDkzXHU3ZDk0XHU3ZDk1XHU3ZDk2XHU3ZDk3XHU3ZDk4XHU1MDY1XHU4MjMwXHU1MjUxXHU5OTZmXHU2ZTEwXHU2ZTg1XHU2ZGE3XHU1ZWZhXHU1MGY1XHU1OWRjXHU1YzA2XHU2ZDQ2XHU2YzVmXHU3NTg2XHU4NDhiXHU2ODY4''@;'; put 'put ''XHU1OTU2XHU4YmIyXHU1MzIwXHU5MTcxXHU5NjRkXHU4NTQ5XHU2OTEyXHU3OTAxXHU3MTI2XHU4MGY2XHU0ZWE0XHU5MGNhXHU2ZDQ3XHU5YTg0XHU1YTA3XHU1NmJjXHU2NDA1XHU5NGYwXHU3N2ViXHU0ZmE1XHU4MTFhXHU3MmUxXHU4OWQyXHU5OTdhXHU3ZjM0XHU3ZWRlXHU1MjdmXHU2''@;'; put 'put ''NTU5XHU5MTc1XHU4ZjdmXHU4ZjgzXHU1M2ViXHU3YTk2XHU2M2VkXHU2M2E1XHU3Njg2XHU3OWY4XHU4ODU3XHU5NjM2XHU2MjJhXHU1MmFiXHU4MjgyXHU2ODU0XHU2NzcwXHU2Mzc3XHU3NzZiXHU3YWVkXHU2ZDAxXHU3ZWQzXHU4OWUzXHU1OWQwXHU2MjEyXHU4NWM5XHU4MmE1XHU3NTRj''@;'; put 'put ''XHU1MDFmXHU0ZWNiXHU3NWE1XHU4YmViXHU1YzRhXHU1ZGZlXHU3YjRiXHU2NWE0XHU5MWQxXHU0ZWNhXHU2ZDI1XHU4OTVmXHU3ZDI3XHU5NTI2XHU0ZWM1XHU4YzI4XHU4ZmRiXHU5NzczXHU2NjRiXHU3OTgxXHU4ZmQxXHU3MGVjXHU2ZDc4XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9b''@;'; put 'put ''MTg5XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODldW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTg5XVtwXV09NDgzODQrcCxiWzQ4Mzg0K3BdPV9bMTg5XVtwXSk7Zm9yKF9bMTkwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZDk5''@;'; put 'put ''XHU3ZDlhXHU3ZDliXHU3ZDljXHU3ZDlkXHU3ZDllXHU3ZDlmXHU3ZGEwXHU3ZGExXHU3ZGEyXHU3ZGEzXHU3ZGE0XHU3ZGE1XHU3ZGE3XHU3ZGE4XHU3ZGE5XHU3ZGFhXHU3ZGFiXHU3ZGFjXHU3ZGFkXHU3ZGFmXHU3ZGIwXHU3ZGIxXHU3ZGIyXHU3ZGIzXHU3ZGI0XHU3ZGI1XHU3ZGI2XHU3''@;'; put 'put ''ZGI3XHU3ZGI4XHU3ZGI5XHU3ZGJhXHU3ZGJiXHU3ZGJjXHU3ZGJkXHU3ZGJlXHU3ZGJmXHU3ZGMwXHU3ZGMxXHU3ZGMyXHU3ZGMzXHU3ZGM0XHU3ZGM1XHU3ZGM2XHU3ZGM3XHU3ZGM4XHU3ZGM5XHU3ZGNhXHU3ZGNiXHU3ZGNjXHU3ZGNkXHU3ZGNlXHU3ZGNmXHU3ZGQwXHU3ZGQxXHU3ZGQy''@;'; put 'put ''XHU3ZGQzXHU3ZGQ0XHU3ZGQ1XHU3ZGQ2XHU3ZGQ3XHU3ZGQ4XHU3ZGQ5XHVmZmZkXHU3ZGRhXHU3ZGRiXHU3ZGRjXHU3ZGRkXHU3ZGRlXHU3ZGRmXHU3ZGUwXHU3ZGUxXHU3ZGUyXHU3ZGUzXHU3ZGU0XHU3ZGU1XHU3ZGU2XHU3ZGU3XHU3ZGU4XHU3ZGU5XHU3ZGVhXHU3ZGViXHU3ZGVjXHU3''@;'; put 'put ''ZGVkXHU3ZGVlXHU3ZGVmXHU3ZGYwXHU3ZGYxXHU3ZGYyXHU3ZGYzXHU3ZGY0XHU3ZGY1XHU3ZGY2XHU3ZGY3XHU3ZGY4XHU3ZGY5XHU3ZGZhXHU1YzNkXHU1MmIyXHU4MzQ2XHU1MTYyXHU4MzBlXHU3NzViXHU2Njc2XHU5Y2I4XHU0ZWFjXHU2MGNhXHU3Y2JlXHU3Y2IzXHU3ZWNmXHU0ZTk1''@;'; put 'put ''XHU4YjY2XHU2NjZmXHU5ODg4XHU5NzU5XHU1ODgzXHU2NTZjXHU5NTVjXHU1Zjg0XHU3NWM5XHU5NzU2XHU3YWRmXHU3YWRlXHU1MWMwXHU3MGFmXHU3YTk4XHU2M2VhXHU3YTc2XHU3ZWEwXHU3Mzk2XHU5N2VkXHU0ZTQ1XHU3MDc4XHU0ZTVkXHU5MTUyXHU1M2E5XHU2NTUxXHU2NWU3XHU4''@;'; put 'put ''MWZjXHU4MjA1XHU1NDhlXHU1YzMxXHU3NTlhXHU5N2EwXHU2MmQ4XHU3MmQ5XHU3NWJkXHU1YzQ1XHU5YTc5XHU4M2NhXHU1YzQwXHU1NDgwXHU3N2U5XHU0ZTNlXHU2Y2FlXHU4MDVhXHU2MmQyXHU2MzZlXHU1ZGU4XHU1MTc3XHU4ZGRkXHU4ZTFlXHU5NTJmXHU0ZmYxXHU1M2U1XHU2MGU3''@;'; put 'put ''XHU3MGFjXHU1MjY3XHU2MzUwXHU5ZTQzXHU1YTFmXHU1MDI2XHU3NzM3XHU1Mzc3XHU3ZWUyXHU2NDg1XHU2NTJiXHU2Mjg5XHU2Mzk4XHU1MDE0XHU3MjM1XHU4OWM5XHU1MWIzXHU4YmMwXHU3ZWRkXHU1NzQ3XHU4M2NjXHU5NGE3XHU1MTliXHU1NDFiXHU1Y2ZiXHVmZmZkIi5zcGxpdCgi''@;'; put 'put ''IikscD0wO3AhPV9bMTkwXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTBdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTkwXVtwXV09NDg2NDArcCxiWzQ4NjQwK3BdPV9bMTkwXVtwXSk7Zm9yKF9bMTkxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHU3ZGZiXHU3ZGZjXHU3ZGZkXHU3ZGZlXHU3ZGZmXHU3ZTAwXHU3ZTAxXHU3ZTAyXHU3ZTAzXHU3ZTA0XHU3ZTA1XHU3ZTA2XHU3ZTA3XHU3ZTA4XHU3ZTA5XHU3ZTBhXHU3ZTBiXHU3ZTBjXHU3ZTBkXHU3ZTBlXHU3ZTBmXHU3ZTEwXHU3ZTExXHU3ZTEyXHU3ZTEzXHU3ZTE0XHU3''@;'; put 'put ''ZTE1XHU3ZTE2XHU3ZTE3XHU3ZTE4XHU3ZTE5XHU3ZTFhXHU3ZTFiXHU3ZTFjXHU3ZTFkXHU3ZTFlXHU3ZTFmXHU3ZTIwXHU3ZTIxXHU3ZTIyXHU3ZTIzXHU3ZTI0XHU3ZTI1XHU3ZTI2XHU3ZTI3XHU3ZTI4XHU3ZTI5XHU3ZTJhXHU3ZTJiXHU3ZTJjXHU3ZTJkXHU3ZTJlXHU3ZTJmXHU3ZTMw''@;'; put 'put ''XHU3ZTMxXHU3ZTMyXHU3ZTMzXHU3ZTM0XHU3ZTM1XHU3ZTM2XHU3ZTM3XHU3ZTM4XHU3ZTM5XHVmZmZkXHU3ZTNhXHU3ZTNjXHU3ZTNkXHU3ZTNlXHU3ZTNmXHU3ZTQwXHU3ZTQyXHU3ZTQzXHU3ZTQ0XHU3ZTQ1XHU3ZTQ2XHU3ZTQ4XHU3ZTQ5XHU3ZTRhXHU3ZTRiXHU3ZTRjXHU3ZTRkXHU3''@;'; put 'put ''ZTRlXHU3ZTRmXHU3ZTUwXHU3ZTUxXHU3ZTUyXHU3ZTUzXHU3ZTU0XHU3ZTU1XHU3ZTU2XHU3ZTU3XHU3ZTU4XHU3ZTU5XHU3ZTVhXHU3ZTViXHU3ZTVjXHU3ZTVkXHU0ZmNhXHU3YWUzXHU2ZDVhXHU5MGUxXHU5YThmXHU1NTgwXHU1NDk2XHU1MzYxXHU1NGFmXHU1ZjAwXHU2M2U5XHU2OTc3''@;'; put 'put ''XHU1MWVmXHU2MTY4XHU1MjBhXHU1ODJhXHU1MmQ4XHU1NzRlXHU3ODBkXHU3NzBiXHU1ZWI3XHU2MTc3XHU3Y2UwXHU2MjViXHU2Mjk3XHU0ZWEyXHU3MDk1XHU4MDAzXHU2MmY3XHU3MGU0XHU5NzYwXHU1Nzc3XHU4MmRiXHU2N2VmXHU2OGY1XHU3OGQ1XHU5ODk3XHU3OWQxXHU1OGYzXHU1''@;'; put 'put ''NGIzXHU1M2VmXHU2ZTM0XHU1MTRiXHU1MjNiXHU1YmEyXHU4YmZlXHU4MGFmXHU1NTQzXHU1N2E2XHU2MDczXHU1NzUxXHU1NDJkXHU3YTdhXHU2MDUwXHU1YjU0XHU2M2E3XHU2MmEwXHU1M2UzXHU2MjYzXHU1YmM3XHU2N2FmXHU1NGVkXHU3YTlmXHU4MmU2XHU5MTc3XHU1ZTkzXHU4OGU0''@;'; put 'put ''XHU1OTM4XHU1N2FlXHU2MzBlXHU4ZGU4XHU4MGVmXHU1NzU3XHU3Yjc3XHU0ZmE5XHU1ZmViXHU1YmJkXHU2YjNlXHU1MzIxXHU3YjUwXHU3MmMyXHU2ODQ2XHU3N2ZmXHU3NzM2XHU2NWY3XHU1MWI1XHU0ZThmXHU3NmQ0XHU1Y2JmXHU3YWE1XHU4NDc1XHU1OTRlXHU5YjQxXHU1MDgwXHVm''@;'; put 'put ''ZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTkxXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTFdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTkxXVtwXV09NDg4OTYrcCxiWzQ4ODk2K3BdPV9bMTkxXVtwXSk7Zm9yKF9bMTkyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHU3ZTVlXHU3ZTVmXHU3ZTYwXHU3ZTYxXHU3ZTYyXHU3ZTYzXHU3ZTY0XHU3ZTY1XHU3ZTY2XHU3ZTY3XHU3ZTY4XHU3ZTY5XHU3ZTZhXHU3ZTZiXHU3ZTZjXHU3ZTZkXHU3ZTZlXHU3ZTZmXHU3ZTcwXHU3ZTcxXHU3ZTcyXHU3ZTczXHU3ZTc0XHU3ZTc1XHU3''@;'; put 'put ''ZTc2XHU3ZTc3XHU3ZTc4XHU3ZTc5XHU3ZTdhXHU3ZTdiXHU3ZTdjXHU3ZTdkXHU3ZTdlXHU3ZTdmXHU3ZTgwXHU3ZTgxXHU3ZTgzXHU3ZTg0XHU3ZTg1XHU3ZTg2XHU3ZTg3XHU3ZTg4XHU3ZTg5XHU3ZThhXHU3ZThiXHU3ZThjXHU3ZThkXHU3ZThlXHU3ZThmXHU3ZTkwXHU3ZTkxXHU3ZTky''@;'; put 'put ''XHU3ZTkzXHU3ZTk0XHU3ZTk1XHU3ZTk2XHU3ZTk3XHU3ZTk4XHU3ZTk5XHU3ZTlhXHU3ZTljXHU3ZTlkXHU3ZTllXHVmZmZkXHU3ZWFlXHU3ZWI0XHU3ZWJiXHU3ZWJjXHU3ZWQ2XHU3ZWU0XHU3ZWVjXHU3ZWY5XHU3ZjBhXHU3ZjEwXHU3ZjFlXHU3ZjM3XHU3ZjM5XHU3ZjNiXHU3ZjNjXHU3''@;'; put 'put ''ZjNkXHU3ZjNlXHU3ZjNmXHU3ZjQwXHU3ZjQxXHU3ZjQzXHU3ZjQ2XHU3ZjQ3XHU3ZjQ4XHU3ZjQ5XHU3ZjRhXHU3ZjRiXHU3ZjRjXHU3ZjRkXHU3ZjRlXHU3ZjRmXHU3ZjUyXHU3ZjUzXHU5OTg4XHU2MTI3XHU2ZTgzXHU1NzY0XHU2NjA2XHU2MzQ2XHU1NmYwXHU2MmVjXHU2MjY5XHU1ZWQz''@;'; put 'put ''XHU5NjE0XHU1NzgzXHU2MmM5XHU1NTg3XHU4NzIxXHU4MTRhXHU4ZmEzXHU1NTY2XHU4M2IxXHU2NzY1XHU4ZDU2XHU4NGRkXHU1YTZhXHU2ODBmXHU2MmU2XHU3YmVlXHU5NjExXHU1MTcwXHU2ZjljXHU4YzMwXHU2M2ZkXHU4OWM4XHU2MWQyXHU3ZjA2XHU3MGMyXHU2ZWU1XHU3NDA1XHU2''@;'; put 'put ''OTk0XHU3MmZjXHU1ZWNhXHU5MGNlXHU2NzE3XHU2ZDZhXHU2MzVlXHU1MmIzXHU3MjYyXHU4MDAxXHU0ZjZjXHU1OWU1XHU5MTZhXHU3MGQ5XHU2ZDlkXHU1MmQyXHU0ZTUwXHU5NmY3XHU5NTZkXHU4NTdlXHU3OGNhXHU3ZDJmXHU1MTIxXHU1NzkyXHU2NGMyXHU4MDhiXHU3YzdiXHU2Y2Vh''@;'; put 'put ''XHU2OGYxXHU2OTVlXHU1MWI3XHU1Mzk4XHU2OGE4XHU3MjgxXHU5ZWNlXHU3YmYxXHU3MmY4XHU3OWJiXHU2ZjEzXHU3NDA2XHU2NzRlXHU5MWNjXHU5Y2E0XHU3OTNjXHU4Mzg5XHU4MzU0XHU1NDBmXHU2ODE3XHU0ZTNkXHU1Mzg5XHU1MmIxXHU3ODNlXHU1Mzg2XHU1MjI5XHU1MDg4XHU0''@;'; put 'put ''ZjhiXHU0ZmQwXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTkyXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTJdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTkyXVtwXV09NDkxNTIrcCxiWzQ5MTUyK3BdPV9bMTkyXVtwXSk7Zm9yKF9bMTkzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZjU2XHU3ZjU5XHU3ZjViXHU3ZjVjXHU3ZjVkXHU3ZjVlXHU3ZjYwXHU3ZjYzXHU3ZjY0XHU3ZjY1XHU3ZjY2XHU3ZjY3XHU3ZjZiXHU3ZjZjXHU3ZjZkXHU3ZjZmXHU3ZjcwXHU3ZjczXHU3Zjc1XHU3Zjc2XHU3Zjc3XHU3Zjc4XHU3''@;'; put 'put ''ZjdhXHU3ZjdiXHU3ZjdjXHU3ZjdkXHU3ZjdmXHU3ZjgwXHU3ZjgyXHU3ZjgzXHU3Zjg0XHU3Zjg1XHU3Zjg2XHU3Zjg3XHU3Zjg4XHU3Zjg5XHU3ZjhiXHU3ZjhkXHU3ZjhmXHU3ZjkwXHU3ZjkxXHU3ZjkyXHU3ZjkzXHU3Zjk1XHU3Zjk2XHU3Zjk3XHU3Zjk4XHU3Zjk5XHU3ZjliXHU3Zjlj''@;'; put 'put ''XHU3ZmEwXHU3ZmEyXHU3ZmEzXHU3ZmE1XHU3ZmE2XHU3ZmE4XHU3ZmE5XHU3ZmFhXHU3ZmFiXHU3ZmFjXHU3ZmFkXHU3ZmFlXHU3ZmIxXHVmZmZkXHU3ZmIzXHU3ZmI0XHU3ZmI1XHU3ZmI2XHU3ZmI3XHU3ZmJhXHU3ZmJiXHU3ZmJlXHU3ZmMwXHU3ZmMyXHU3ZmMzXHU3ZmM0XHU3ZmM2XHU3''@;'; put 'put ''ZmM3XHU3ZmM4XHU3ZmM5XHU3ZmNiXHU3ZmNkXHU3ZmNmXHU3ZmQwXHU3ZmQxXHU3ZmQyXHU3ZmQzXHU3ZmQ2XHU3ZmQ3XHU3ZmQ5XHU3ZmRhXHU3ZmRiXHU3ZmRjXHU3ZmRkXHU3ZmRlXHU3ZmUyXHU3ZmUzXHU3NWUyXHU3YWNiXHU3YzkyXHU2Y2E1XHU5NmI2XHU1MjliXHU3NDgzXHU1NGU5''@;'; put 'put ''XHU0ZmU5XHU4MDU0XHU4M2IyXHU4ZmRlXHU5NTcwXHU1ZWM5XHU2MDFjXHU2ZDlmXHU1ZTE4XHU2NTViXHU4MTM4XHU5NGZlXHU2MDRiXHU3MGJjXHU3ZWMzXHU3Y2FlXHU1MWM5XHU2ODgxXHU3Y2IxXHU4MjZmXHU0ZTI0XHU4Zjg2XHU5MWNmXHU2NjdlXHU0ZWFlXHU4YzA1XHU2NGE5XHU4''@;'; put 'put ''MDRhXHU1MGRhXHU3NTk3XHU3MWNlXHU1YmU1XHU4ZmJkXHU2ZjY2XHU0ZTg2XHU2NDgyXHU5NTYzXHU1ZWQ2XHU2NTk5XHU1MjE3XHU4OGMyXHU3MGM4XHU1MmEzXHU3MzBlXHU3NDMzXHU2Nzk3XHU3OGY3XHU5NzE2XHU0ZTM0XHU5MGJiXHU5Y2RlXHU2ZGNiXHU1MWRiXHU4ZDQxXHU1NDFk''@;'; put 'put ''XHU2MmNlXHU3M2IyXHU4M2YxXHU5NmY2XHU5Zjg0XHU5NGMzXHU0ZjM2XHU3ZjlhXHU1MWNjXHU3MDc1XHU5Njc1XHU1Y2FkXHU5ODg2XHU1M2U2XHU0ZWU0XHU2ZTljXHU3NDA5XHU2OWI0XHU3ODZiXHU5OThmXHU3NTU5XHU1MjE4XHU3NjI0XHU2ZDQxXHU2N2YzXHU1MTZkXHU5Zjk5XHU4''@;'; put 'put ''MDRiXHU1NDk5XHU3YjNjXHU3YWJmXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTkzXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTNdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTkzXVtwXV09NDk0MDgrcCxiWzQ5NDA4K3BdPV9bMTkzXVtwXSk7Zm9yKF9bMTk0XT0iXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZmU0XHU3ZmU3XHU3ZmU4XHU3ZmVhXHU3ZmViXHU3ZmVjXHU3ZmVkXHU3ZmVmXHU3ZmYyXHU3ZmY0XHU3ZmY1XHU3ZmY2XHU3ZmY3XHU3ZmY4XHU3ZmY5XHU3ZmZhXHU3ZmZkXHU3ZmZlXHU3ZmZmXHU4MDAyXHU4''@;'; put 'put ''MDA3XHU4MDA4XHU4MDA5XHU4MDBhXHU4MDBlXHU4MDBmXHU4MDExXHU4MDEzXHU4MDFhXHU4MDFiXHU4MDFkXHU4MDFlXHU4MDFmXHU4MDIxXHU4MDIzXHU4MDI0XHU4MDJiXHU4MDJjXHU4MDJkXHU4MDJlXHU4MDJmXHU4MDMwXHU4MDMyXHU4MDM0XHU4MDM5XHU4MDNhXHU4MDNjXHU4MDNl''@;'; put 'put ''XHU4MDQwXHU4MDQxXHU4MDQ0XHU4MDQ1XHU4MDQ3XHU4MDQ4XHU4MDQ5XHU4MDRlXHU4MDRmXHU4MDUwXHU4MDUxXHU4MDUzXHU4MDU1XHU4MDU2XHU4MDU3XHVmZmZkXHU4MDU5XHU4MDViXHU4MDVjXHU4MDVkXHU4MDVlXHU4MDVmXHU4MDYwXHU4MDYxXHU4MDYyXHU4MDYzXHU4MDY0XHU4''@;'; put 'put ''MDY1XHU4MDY2XHU4MDY3XHU4MDY4XHU4MDZiXHU4MDZjXHU4MDZkXHU4MDZlXHU4MDZmXHU4MDcwXHU4MDcyXHU4MDczXHU4MDc0XHU4MDc1XHU4MDc2XHU4MDc3XHU4MDc4XHU4MDc5XHU4MDdhXHU4MDdiXHU4MDdjXHU4MDdkXHU5Njg2XHU1Nzg0XHU2MmUyXHU5NjQ3XHU2OTdjXHU1YTA0''@;'; put 'put ''XHU2NDAyXHU3YmQzXHU2ZjBmXHU5NjRiXHU4MmE2XHU1MzYyXHU5ODg1XHU1ZTkwXHU3MDg5XHU2M2IzXHU1MzY0XHU4NjRmXHU5YzgxXHU5ZTkzXHU3ODhjXHU5NzMyXHU4ZGVmXHU4ZDQyXHU5ZTdmXHU2ZjVlXHU3OTg0XHU1ZjU1XHU5NjQ2XHU2MjJlXHU5YTc0XHU1NDE1XHU5NGRkXHU0''@;'; put 'put ''ZmEzXHU2NWM1XHU1YzY1XHU1YzYxXHU3ZjE1XHU4NjUxXHU2YzJmXHU1ZjhiXHU3Mzg3XHU2ZWU0XHU3ZWZmXHU1Y2U2XHU2MzFiXHU1YjZhXHU2ZWU2XHU1Mzc1XHU0ZTcxXHU2M2EwXHU3NTY1XHU2MmExXHU4ZjZlXHU0ZjI2XHU0ZWQxXHU2Y2E2XHU3ZWI2XHU4YmJhXHU4NDFkXHU4N2Jh''@;'; put 'put ''XHU3ZjU3XHU5MDNiXHU5NTIzXHU3YmE5XHU5YWExXHU4OGY4XHU4NDNkXHU2ZDFiXHU5YTg2XHU3ZWRjXHU1OTg4XHU5ZWJiXHU3MzliXHU3ODAxXHU4NjgyXHU5YTZjXHU5YTgyXHU1NjFiXHU1NDE3XHU1N2NiXHU0ZTcwXHU5ZWE2XHU1MzU2XHU4ZmM4XHU4MTA5XHU3NzkyXHU5OTkyXHU4''@;'; put 'put ''NmVlXHU2ZWUxXHU4NTEzXHU2NmZjXHU2MTYyXHU2ZjJiXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTk0XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTRdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTk0XVtwXV09NDk2NjQrcCxiWzQ5NjY0K3BdPV9bMTk0XVtwXSk7Zm9yKF9bMTk1XT0i''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MDdlXHU4MDgxXHU4MDgyXHU4MDg1XHU4MDg4XHU4MDhhXHU4MDhkXHU4MDhlXHU4MDhmXHU4MDkwXHU4MDkxXHU4MDkyXHU4MDk0XHU4MDk1XHU4MDk3XHU4MDk5XHU4MDllXHU4MGEzXHU4''@;'; put 'put ''MGE2XHU4MGE3XHU4MGE4XHU4MGFjXHU4MGIwXHU4MGIzXHU4MGI1XHU4MGI2XHU4MGI4XHU4MGI5XHU4MGJiXHU4MGM1XHU4MGM3XHU4MGM4XHU4MGM5XHU4MGNhXHU4MGNiXHU4MGNmXHU4MGQwXHU4MGQxXHU4MGQyXHU4MGQzXHU4MGQ0XHU4MGQ1XHU4MGQ4XHU4MGRmXHU4MGUwXHU4MGUy''@;'; put 'put ''XHU4MGUzXHU4MGU2XHU4MGVlXHU4MGY1XHU4MGY3XHU4MGY5XHU4MGZiXHU4MGZlXHU4MGZmXHU4MTAwXHU4MTAxXHU4MTAzXHU4MTA0XHU4MTA1XHU4MTA3XHU4MTA4XHU4MTBiXHVmZmZkXHU4MTBjXHU4MTE1XHU4MTE3XHU4MTE5XHU4MTFiXHU4MTFjXHU4MTFkXHU4MTFmXHU4MTIwXHU4''@;'; put 'put ''MTIxXHU4MTIyXHU4MTIzXHU4MTI0XHU4MTI1XHU4MTI2XHU4MTI3XHU4MTI4XHU4MTI5XHU4MTJhXHU4MTJiXHU4MTJkXHU4MTJlXHU4MTMwXHU4MTMzXHU4MTM0XHU4MTM1XHU4MTM3XHU4MTM5XHU4MTNhXHU4MTNiXHU4MTNjXHU4MTNkXHU4MTNmXHU4YzI5XHU4MjkyXHU4MzJiXHU3NmYy''@;'; put 'put ''XHU2YzEzXHU1ZmQ5XHU4M2JkXHU3MzJiXHU4MzA1XHU5NTFhXHU2YmRiXHU3N2RiXHU5NGM2XHU1MzZmXHU4MzAyXHU1MTkyXHU1ZTNkXHU4YzhjXHU4ZDM4XHU0ZTQ4XHU3M2FiXHU2NzlhXHU2ODg1XHU5MTc2XHU5NzA5XHU3MTY0XHU2Y2ExXHU3NzA5XHU1YTkyXHU5NTQxXHU2YmNmXHU3''@;'; put 'put ''ZjhlXHU2NjI3XHU1YmQwXHU1OWI5XHU1YTlhXHU5NWU4XHU5NWY3XHU0ZWVjXHU4NDBjXHU4NDk5XHU2YWFjXHU3NmRmXHU5NTMwXHU3MzFiXHU2OGE2XHU1YjVmXHU3NzJmXHU5MTlhXHU5NzYxXHU3Y2RjXHU4ZmY3XHU4YzFjXHU1ZjI1XHU3YzczXHU3OWQ4XHU4OWM1XHU2Y2NjXHU4NzFj''@;'; put 'put ''XHU1YmM2XHU1ZTQyXHU2OGM5XHU3NzIwXHU3ZWY1XHU1MTk1XHU1MTRkXHU1MmM5XHU1YTI5XHU3ZjA1XHU5NzYyXHU4MmQ3XHU2M2NmXHU3Nzg0XHU4NWQwXHU3OWQyXHU2ZTNhXHU1ZTk5XHU1OTk5XHU4NTExXHU3MDZkXHU2YzExXHU2MmJmXHU3NmJmXHU2NTRmXHU2MGFmXHU5NWZkXHU2''@;'; put 'put ''NjBlXHU4NzlmXHU5ZTIzXHU5NGVkXHU1NDBkXHU1NDdkXHU4YzJjXHU2NDc4XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTk1XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTVdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTk1XVtwXV09NDk5MjArcCxiWzQ5OTIwK3BdPV9bMTk1XVtwXSk7''@;'; put 'put ''Zm9yKF9bMTk2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MTQwXHU4MTQxXHU4MTQyXHU4MTQzXHU4MTQ0XHU4MTQ1XHU4MTQ3XHU4MTQ5XHU4MTRkXHU4MTRlXHU4MTRmXHU4MTUyXHU4MTU2XHU4MTU3XHU4MTU4XHU4MTViXHU4''@;'; put 'put ''MTVjXHU4MTVkXHU4MTVlXHU4MTVmXHU4MTYxXHU4MTYyXHU4MTYzXHU4MTY0XHU4MTY2XHU4MTY4XHU4MTZhXHU4MTZiXHU4MTZjXHU4MTZmXHU4MTcyXHU4MTczXHU4MTc1XHU4MTc2XHU4MTc3XHU4MTc4XHU4MTgxXHU4MTgzXHU4MTg0XHU4MTg1XHU4MTg2XHU4MTg3XHU4MTg5XHU4MThi''@;'; put 'put ''XHU4MThjXHU4MThkXHU4MThlXHU4MTkwXHU4MTkyXHU4MTkzXHU4MTk0XHU4MTk1XHU4MTk2XHU4MTk3XHU4MTk5XHU4MTlhXHU4MTllXHU4MTlmXHU4MWEwXHU4MWExXHU4MWEyXHU4MWE0XHU4MWE1XHVmZmZkXHU4MWE3XHU4MWE5XHU4MWFiXHU4MWFjXHU4MWFkXHU4MWFlXHU4MWFmXHU4''@;'; put 'put ''MWIwXHU4MWIxXHU4MWIyXHU4MWI0XHU4MWI1XHU4MWI2XHU4MWI3XHU4MWI4XHU4MWI5XHU4MWJjXHU4MWJkXHU4MWJlXHU4MWJmXHU4MWM0XHU4MWM1XHU4MWM3XHU4MWM4XHU4MWM5XHU4MWNiXHU4MWNkXHU4MWNlXHU4MWNmXHU4MWQwXHU4MWQxXHU4MWQyXHU4MWQzXHU2NDc5XHU4NjEx''@;'; put 'put ''XHU2YTIxXHU4MTljXHU3OGU4XHU2NDY5XHU5YjU0XHU2MmI5XHU2NzJiXHU4M2FiXHU1OGE4XHU5ZWQ4XHU2Y2FiXHU2ZjIwXHU1YmRlXHU5NjRjXHU4YzBiXHU3MjVmXHU2N2QwXHU2MmM3XHU3MjYxXHU0ZWE5XHU1OWM2XHU2YmNkXHU1ODkzXHU2NmFlXHU1ZTU1XHU1MmRmXHU2MTU1XHU2''@;'; put 'put ''NzI4XHU3NmVlXHU3NzY2XHU3MjY3XHU3YTQ2XHU2MmZmXHU1NGVhXHU1NDUwXHU5NGEwXHU5MGEzXHU1YTFjXHU3ZWIzXHU2YzE2XHU0ZTQzXHU1OTc2XHU4MDEwXHU1OTQ4XHU1MzU3XHU3NTM3XHU5NmJlXHU1NmNhXHU2MzIwXHU4MTExXHU2MDdjXHU5NWY5XHU2ZGQ2XHU1NDYyXHU5OTgx''@;'; put 'put ''XHU1MTg1XHU1YWU5XHU4MGZkXHU1OWFlXHU5NzEzXHU1MDJhXHU2Y2U1XHU1YzNjXHU2MmRmXHU0ZjYwXHU1MzNmXHU4MTdiXHU5MDA2XHU2ZWJhXHU4NTJiXHU2MmM4XHU1ZTc0XHU3OGJlXHU2NGI1XHU2MzdiXHU1ZmY1XHU1YTE4XHU5MTdmXHU5ZTFmXHU1YzNmXHU2MzRmXHU4MDQyXHU1''@;'; put 'put ''YjdkXHU1NTZlXHU5NTRhXHU5NTRkXHU2ZDg1XHU2MGE4XHU2N2UwXHU3MmRlXHU1MWRkXHU1YjgxXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTk2XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTZdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTk2XVtwXV09NTAxNzYrcCxiWzUwMTc2K3Bd''@;'; put 'put ''PV9bMTk2XVtwXSk7Zm9yKF9bMTk3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MWQ0XHU4MWQ1XHU4MWQ2XHU4MWQ3XHU4MWQ4XHU4MWQ5XHU4MWRhXHU4MWRiXHU4MWRjXHU4MWRkXHU4MWRlXHU4MWRmXHU4MWUwXHU4MWUxXHU4''@;'; put 'put ''MWUyXHU4MWU0XHU4MWU1XHU4MWU2XHU4MWU4XHU4MWU5XHU4MWViXHU4MWVlXHU4MWVmXHU4MWYwXHU4MWYxXHU4MWYyXHU4MWY1XHU4MWY2XHU4MWY3XHU4MWY4XHU4MWY5XHU4MWZhXHU4MWZkXHU4MWZmXHU4MjAzXHU4MjA3XHU4MjA4XHU4MjA5XHU4MjBhXHU4MjBiXHU4MjBlXHU4MjBm''@;'; put 'put ''XHU4MjExXHU4MjEzXHU4MjE1XHU4MjE2XHU4MjE3XHU4MjE4XHU4MjE5XHU4MjFhXHU4MjFkXHU4MjIwXHU4MjI0XHU4MjI1XHU4MjI2XHU4MjI3XHU4MjI5XHU4MjJlXHU4MjMyXHU4MjNhXHU4MjNjXHU4MjNkXHU4MjNmXHVmZmZkXHU4MjQwXHU4MjQxXHU4MjQyXHU4MjQzXHU4MjQ1XHU4''@;'; put 'put ''MjQ2XHU4MjQ4XHU4MjRhXHU4MjRjXHU4MjRkXHU4MjRlXHU4MjUwXHU4MjUxXHU4MjUyXHU4MjUzXHU4MjU0XHU4MjU1XHU4MjU2XHU4MjU3XHU4MjU5XHU4MjViXHU4MjVjXHU4MjVkXHU4MjVlXHU4MjYwXHU4MjYxXHU4MjYyXHU4MjYzXHU4MjY0XHU4MjY1XHU4MjY2XHU4MjY3XHU4MjY5''@;'; put 'put ''XHU2MmU3XHU2Y2RlXHU3MjViXHU2MjZkXHU5NGFlXHU3ZWJkXHU4MTEzXHU2ZDUzXHU1MTljXHU1ZjA0XHU1OTc0XHU1MmFhXHU2MDEyXHU1OTczXHU2Njk2XHU4NjUwXHU3NTlmXHU2MzJhXHU2MWU2XHU3Y2VmXHU4YmZhXHU1NGU2XHU2YjI3XHU5ZTI1XHU2YmI0XHU4NWQ1XHU1NDU1XHU1''@;'; put 'put ''MDc2XHU2Y2E0XHU1NTZhXHU4ZGI0XHU3MjJjXHU1ZTE1XHU2MDE1XHU3NDM2XHU2MmNkXHU2MzkyXHU3MjRjXHU1Zjk4XHU2ZTQzXHU2ZDNlXHU2NTAwXHU2ZjU4XHU3NmQ4XHU3OGQwXHU3NmZjXHU3NTU0XHU1MjI0XHU1M2RiXHU0ZTUzXHU1ZTllXHU2NWMxXHU4MDJhXHU4MGQ2XHU2Mjli''@;'; put 'put ''XHU1NDg2XHU1MjI4XHU3MGFlXHU4ODhkXHU4ZGQxXHU2Y2UxXHU1NDc4XHU4MGRhXHU1N2Y5XHU4OGY0XHU4ZDU0XHU5NjZhXHU5MTRkXHU0ZjY5XHU2YzliXHU1NWI3XHU3NmM2XHU3ODMwXHU2MmE4XHU3MGY5XHU2ZjhlXHU1ZjZkXHU4NGVjXHU2OGRhXHU3ODdjXHU3YmY3XHU4MWE4XHU2''@;'; put 'put ''NzBiXHU5ZTRmXHU2MzY3XHU3OGIwXHU1NzZmXHU3ODEyXHU5NzM5XHU2Mjc5XHU2MmFiXHU1Mjg4XHU3NDM1XHU2YmQ3XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTk3XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTddW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTk3XVtwXV09NTA0MzIr''@;'; put 'put ''cCxiWzUwNDMyK3BdPV9bMTk3XVtwXSk7Zm9yKF9bMTk4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MjZhXHU4MjZiXHU4MjZjXHU4MjZkXHU4MjcxXHU4Mjc1XHU4Mjc2XHU4Mjc3XHU4Mjc4XHU4MjdiXHU4MjdjXHU4MjgwXHU4''@;'; put 'put ''MjgxXHU4MjgzXHU4Mjg1XHU4Mjg2XHU4Mjg3XHU4Mjg5XHU4MjhjXHU4MjkwXHU4MjkzXHU4Mjk0XHU4Mjk1XHU4Mjk2XHU4MjlhXHU4MjliXHU4MjllXHU4MmEwXHU4MmEyXHU4MmEzXHU4MmE3XHU4MmIyXHU4MmI1XHU4MmI2XHU4MmJhXHU4MmJiXHU4MmJjXHU4MmJmXHU4MmMwXHU4MmMy''@;'; put 'put ''XHU4MmMzXHU4MmM1XHU4MmM2XHU4MmM5XHU4MmQwXHU4MmQ2XHU4MmQ5XHU4MmRhXHU4MmRkXHU4MmUyXHU4MmU3XHU4MmU4XHU4MmU5XHU4MmVhXHU4MmVjXHU4MmVkXHU4MmVlXHU4MmYwXHU4MmYyXHU4MmYzXHU4MmY1XHU4MmY2XHU4MmY4XHVmZmZkXHU4MmZhXHU4MmZjXHU4MmZkXHU4''@;'; put 'put ''MmZlXHU4MmZmXHU4MzAwXHU4MzBhXHU4MzBiXHU4MzBkXHU4MzEwXHU4MzEyXHU4MzEzXHU4MzE2XHU4MzE4XHU4MzE5XHU4MzFkXHU4MzFlXHU4MzFmXHU4MzIwXHU4MzIxXHU4MzIyXHU4MzIzXHU4MzI0XHU4MzI1XHU4MzI2XHU4MzI5XHU4MzJhXHU4MzJlXHU4MzMwXHU4MzMyXHU4MzM3''@;'; put 'put ''XHU4MzNiXHU4MzNkXHU1NTY0XHU4MTNlXHU3NWIyXHU3NmFlXHU1MzM5XHU3NWRlXHU1MGZiXHU1YzQxXHU4YjZjXHU3YmM3XHU1MDRmXHU3MjQ3XHU5YTk3XHU5OGQ4XHU2ZjAyXHU3NGUyXHU3OTY4XHU2NDg3XHU3N2E1XHU2MmZjXHU5ODkxXHU4ZDJiXHU1NGMxXHU4MDU4XHU0ZTUyXHU1''@;'; put 'put ''NzZhXHU4MmY5XHU4NDBkXHU1ZTczXHU1MWVkXHU3NGY2XHU4YmM0XHU1YzRmXHU1NzYxXHU2Y2ZjXHU5ODg3XHU1YTQ2XHU3ODM0XHU5YjQ0XHU4ZmViXHU3Yzk1XHU1MjU2XHU2MjUxXHU5NGZhXHU0ZWM2XHU4Mzg2XHU4NDYxXHU4M2U5XHU4NGIyXHU1N2Q0XHU2NzM0XHU1NzAzXHU2NjZl''@;'; put 'put ''XHU2ZDY2XHU4YzMxXHU2NmRkXHU3MDExXHU2NzFmXHU2YjNhXHU2ODE2XHU2MjFhXHU1OWJiXHU0ZTAzXHU1MWM0XHU2ZjA2XHU2N2QyXHU2YzhmXHU1MTc2XHU2OGNiXHU1OTQ3XHU2YjY3XHU3NTY2XHU1ZDBlXHU4MTEwXHU5ZjUwXHU2NWQ3XHU3OTQ4XHU3OTQxXHU5YTkxXHU4ZDc3XHU1''@;'; put 'put ''YzgyXHU0ZTVlXHU0ZjAxXHU1NDJmXHU1OTUxXHU3ODBjXHU1NjY4XHU2YzE0XHU4ZmM0XHU1ZjAzXHU2YzdkXHU2Y2UzXHU4YmFiXHU2MzkwXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTk4XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOThdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTk4''@;'; put 'put ''XVtwXV09NTA2ODgrcCxiWzUwNjg4K3BdPV9bMTk4XVtwXSk7Zm9yKF9bMTk5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MzNlXHU4MzNmXHU4MzQxXHU4MzQyXHU4MzQ0XHU4MzQ1XHU4MzQ4XHU4MzRhXHU4MzRiXHU4MzRjXHU4''@;'; put 'put ''MzRkXHU4MzRlXHU4MzUzXHU4MzU1XHU4MzU2XHU4MzU3XHU4MzU4XHU4MzU5XHU4MzVkXHU4MzYyXHU4MzcwXHU4MzcxXHU4MzcyXHU4MzczXHU4Mzc0XHU4Mzc1XHU4Mzc2XHU4Mzc5XHU4MzdhXHU4MzdlXHU4MzdmXHU4MzgwXHU4MzgxXHU4MzgyXHU4MzgzXHU4Mzg0XHU4Mzg3XHU4Mzg4''@;'; put 'put ''XHU4MzhhXHU4MzhiXHU4MzhjXHU4MzhkXHU4MzhmXHU4MzkwXHU4MzkxXHU4Mzk0XHU4Mzk1XHU4Mzk2XHU4Mzk3XHU4Mzk5XHU4MzlhXHU4MzlkXHU4MzlmXHU4M2ExXHU4M2EyXHU4M2EzXHU4M2E0XHU4M2E1XHU4M2E2XHU4M2E3XHU4M2FjXHU4M2FkXHU4M2FlXHVmZmZkXHU4M2FmXHU4''@;'; put 'put ''M2I1XHU4M2JiXHU4M2JlXHU4M2JmXHU4M2MyXHU4M2MzXHU4M2M0XHU4M2M2XHU4M2M4XHU4M2M5XHU4M2NiXHU4M2NkXHU4M2NlXHU4M2QwXHU4M2QxXHU4M2QyXHU4M2QzXHU4M2Q1XHU4M2Q3XHU4M2Q5XHU4M2RhXHU4M2RiXHU4M2RlXHU4M2UyXHU4M2UzXHU4M2U0XHU4M2U2XHU4M2U3''@;'; put 'put ''XHU4M2U4XHU4M2ViXHU4M2VjXHU4M2VkXHU2MDcwXHU2ZDNkXHU3Mjc1XHU2MjY2XHU5NDhlXHU5NGM1XHU1MzQzXHU4ZmMxXHU3YjdlXHU0ZWRmXHU4YzI2XHU0ZTdlXHU5ZWQ0XHU5NGIxXHU5NGIzXHU1MjRkXHU2ZjVjXHU5MDYzXHU2ZDQ1XHU4YzM0XHU1ODExXHU1ZDRjXHU2YjIwXHU2''@;'; put 'put ''YjQ5XHU2N2FhXHU1NDViXHU4MTU0XHU3ZjhjXHU1ODk5XHU4NTM3XHU1ZjNhXHU2MmEyXHU2YTQ3XHU5NTM5XHU2NTcyXHU2MDg0XHU2ODY1XHU3N2E3XHU0ZTU0XHU0ZmE4XHU1ZGU3XHU5Nzk4XHU2NGFjXHU3ZmQ4XHU1Y2VkXHU0ZmNmXHU3YThkXHU1MjA3XHU4MzA0XHU0ZTE0XHU2MDJm''@;'; put 'put ''XHU3YTgzXHU5NGE2XHU0ZmI1XHU0ZWIyXHU3OWU2XHU3NDM0XHU1MmU0XHU4MmI5XHU2NGQyXHU3OWJkXHU1YmRkXHU2YzgxXHU5NzUyXHU4ZjdiXHU2YzIyXHU1MDNlXHU1MzdmXHU2ZTA1XHU2NGNlXHU2Njc0XHU2YzMwXHU2MGM1XHU5ODc3XHU4YmY3XHU1ZTg2XHU3NDNjXHU3YTc3XHU3''@;'; put 'put ''OWNiXHU0ZTE4XHU5MGIxXHU3NDAzXHU2YzQyXHU1NmRhXHU5MTRiXHU2Y2M1XHU4ZDhiXHU1MzNhXHU4NmM2XHU2NmYyXHU4ZWFmXHU1YzQ4XHU5YTcxXHU2ZTIwXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTk5XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTldW3BdLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJihJW19bMTk5XVtwXV09NTA5NDQrcCxiWzUwOTQ0K3BdPV9bMTk5XVtwXSk7Zm9yKF9bMjAwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4M2VlXHU4M2VmXHU4M2YzXHU4M2Y0XHU4M2Y1XHU4M2Y2XHU4M2Y3XHU4M2ZhXHU4''@;'; put 'put ''M2ZiXHU4M2ZjXHU4M2ZlXHU4M2ZmXHU4NDAwXHU4NDAyXHU4NDA1XHU4NDA3XHU4NDA4XHU4NDA5XHU4NDBhXHU4NDEwXHU4NDEyXHU4NDEzXHU4NDE0XHU4NDE1XHU4NDE2XHU4NDE3XHU4NDE5XHU4NDFhXHU4NDFiXHU4NDFlXHU4NDFmXHU4NDIwXHU4NDIxXHU4NDIyXHU4NDIzXHU4NDI5''@;'; put 'put ''XHU4NDJhXHU4NDJiXHU4NDJjXHU4NDJkXHU4NDJlXHU4NDJmXHU4NDMwXHU4NDMyXHU4NDMzXHU4NDM0XHU4NDM1XHU4NDM2XHU4NDM3XHU4NDM5XHU4NDNhXHU4NDNiXHU4NDNlXHU4NDNmXHU4NDQwXHU4NDQxXHU4NDQyXHU4NDQzXHU4NDQ0XHU4NDQ1XHU4NDQ3XHU4NDQ4XHU4NDQ5XHVm''@;'; put 'put ''ZmZkXHU4NDRhXHU4NDRiXHU4NDRjXHU4NDRkXHU4NDRlXHU4NDRmXHU4NDUwXHU4NDUyXHU4NDUzXHU4NDU0XHU4NDU1XHU4NDU2XHU4NDU4XHU4NDVkXHU4NDVlXHU4NDVmXHU4NDYwXHU4NDYyXHU4NDY0XHU4NDY1XHU4NDY2XHU4NDY3XHU4NDY4XHU4NDZhXHU4NDZlXHU4NDZmXHU4NDcw''@;'; put 'put ''XHU4NDcyXHU4NDc0XHU4NDc3XHU4NDc5XHU4NDdiXHU4NDdjXHU1M2Q2XHU1YTM2XHU5ZjhiXHU4ZGEzXHU1M2JiXHU1NzA4XHU5OGE3XHU2NzQzXHU5MTliXHU2Y2M5XHU1MTY4XHU3NWNhXHU2MmYzXHU3MmFjXHU1MjM4XHU1MjlkXHU3ZjNhXHU3MDk0XHU3NjM4XHU1Mzc0XHU5ZTRhXHU2''@;'; put 'put ''OWI3XHU3ODZlXHU5NmMwXHU4OGQ5XHU3ZmE0XHU3MTM2XHU3MWMzXHU1MTg5XHU2N2QzXHU3NGU0XHU1OGU0XHU2NTE4XHU1NmI3XHU4YmE5XHU5OTc2XHU2MjcwXHU3ZWQ1XHU2MGY5XHU3MGVkXHU1OGVjXHU0ZWMxXHU0ZWJhXHU1ZmNkXHU5N2U3XHU0ZWZiXHU4YmE0XHU1MjAzXHU1OThh''@;'; put 'put ''XHU3ZWFiXHU2MjU0XHU0ZWNkXHU2NWU1XHU2MjBlXHU4MzM4XHU4NGM5XHU4MzYzXHU4NzhkXHU3MTk0XHU2ZWI2XHU1YmI5XHU3ZWQyXHU1MTk3XHU2M2M5XHU2N2Q0XHU4MDg5XHU4MzM5XHU4ODE1XHU1MTEyXHU1YjdhXHU1OTgyXHU4ZmIxXHU0ZTczXHU2YzVkXHU1MTY1XHU4OTI1XHU4''@;'; put 'put ''ZjZmXHU5NjJlXHU4NTRhXHU3NDVlXHU5NTEwXHU5NWYwXHU2ZGE2XHU4MmU1XHU1ZjMxXHU2NDkyXHU2ZDEyXHU4NDI4XHU4MTZlXHU5Y2MzXHU1ODVlXHU4ZDViXHU0ZTA5XHU1M2MxXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjAwXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDBdW3Bd''@;'; put 'put ''LmNoYXJDb2RlQXQoMCkmJihJW19bMjAwXVtwXV09NTEyMDArcCxiWzUxMjAwK3BdPV9bMjAwXVtwXSk7Zm9yKF9bMjAxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NDdkXHU4NDdlXHU4NDdmXHU4NDgwXHU4NDgxXHU4NDgzXHU4''@;'; put 'put ''NDg0XHU4NDg1XHU4NDg2XHU4NDhhXHU4NDhkXHU4NDhmXHU4NDkwXHU4NDkxXHU4NDkyXHU4NDkzXHU4NDk0XHU4NDk1XHU4NDk2XHU4NDk4XHU4NDlhXHU4NDliXHU4NDlkXHU4NDllXHU4NDlmXHU4NGEwXHU4NGEyXHU4NGEzXHU4NGE0XHU4NGE1XHU4NGE2XHU4NGE3XHU4NGE4XHU4NGE5''@;'; put 'put ''XHU4NGFhXHU4NGFiXHU4NGFjXHU4NGFkXHU4NGFlXHU4NGIwXHU4NGIxXHU4NGIzXHU4NGI1XHU4NGI2XHU4NGI3XHU4NGJiXHU4NGJjXHU4NGJlXHU4NGMwXHU4NGMyXHU4NGMzXHU4NGM1XHU4NGM2XHU4NGM3XHU4NGM4XHU4NGNiXHU4NGNjXHU4NGNlXHU4NGNmXHU4NGQyXHU4NGQ0XHU4''@;'; put 'put ''NGQ1XHU4NGQ3XHVmZmZkXHU4NGQ4XHU4NGQ5XHU4NGRhXHU4NGRiXHU4NGRjXHU4NGRlXHU4NGUxXHU4NGUyXHU4NGU0XHU4NGU3XHU4NGU4XHU4NGU5XHU4NGVhXHU4NGViXHU4NGVkXHU4NGVlXHU4NGVmXHU4NGYxXHU4NGYyXHU4NGYzXHU4NGY0XHU4NGY1XHU4NGY2XHU4NGY3XHU4NGY4''@;'; put 'put ''XHU4NGY5XHU4NGZhXHU4NGZiXHU4NGZkXHU4NGZlXHU4NTAwXHU4NTAxXHU4NTAyXHU0ZjFlXHU2NTYzXHU2ODUxXHU1NWQzXHU0ZTI3XHU2NDE0XHU5YTlhXHU2MjZiXHU1YWMyXHU3NDVmXHU4MjcyXHU2ZGE5XHU2OGVlXHU1MGU3XHU4MzhlXHU3ODAyXHU2NzQwXHU1MjM5XHU2Yzk5XHU3''@;'; put 'put ''ZWIxXHU1MGJiXHU1NTY1XHU3MTVlXHU3YjViXHU2NjUyXHU3M2NhXHU4MmViXHU2NzQ5XHU1YzcxXHU1MjIwXHU3MTdkXHU4ODZiXHU5NWVhXHU5NjU1XHU2NGM1XHU4ZDYxXHU4MWIzXHU1NTg0XHU2YzU1XHU2MjQ3XHU3ZjJlXHU1ODkyXHU0ZjI0XHU1NTQ2XHU4ZDRmXHU2NjRjXHU0ZTBh''@;'; put 'put ''XHU1YzFhXHU4OGYzXHU2OGEyXHU2MzRlXHU3YTBkXHU3MGU3XHU4MjhkXHU1MmZhXHU5N2Y2XHU1YzExXHU1NGU4XHU5MGI1XHU3ZWNkXHU1OTYyXHU4ZDRhXHU4NmM3XHU4MjBjXHU4MjBkXHU4ZDY2XHU2NDQ0XHU1YzA0XHU2MTUxXHU2ZDg5XHU3OTNlXHU4YmJlXHU3ODM3XHU3NTMzXHU1''@;'; put 'put ''NDdiXHU0ZjM4XHU4ZWFiXHU2ZGYxXHU1YTIwXHU3ZWM1XHU3OTVlXHU2Yzg4XHU1YmExXHU1YTc2XHU3NTFhXHU4MGJlXHU2MTRlXHU2ZTE3XHU1OGYwXHU3NTFmXHU3NTI1XHU3MjcyXHU1MzQ3XHU3ZWYzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjAxXS5sZW5ndGg7KytwKTY1NTMz''@;'; put 'put ''IT09X1syMDFdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjAxXVtwXV09NTE0NTYrcCxiWzUxNDU2K3BdPV9bMjAxXVtwXSk7Zm9yKF9bMjAyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTAzXHU4NTA0XHU4NTA1XHU4NTA2XHU4''@;'; put 'put ''NTA3XHU4NTA4XHU4NTA5XHU4NTBhXHU4NTBiXHU4NTBkXHU4NTBlXHU4NTBmXHU4NTEwXHU4NTEyXHU4NTE0XHU4NTE1XHU4NTE2XHU4NTE4XHU4NTE5XHU4NTFiXHU4NTFjXHU4NTFkXHU4NTFlXHU4NTIwXHU4NTIyXHU4NTIzXHU4NTI0XHU4NTI1XHU4NTI2XHU4NTI3XHU4NTI4XHU4NTI5''@;'; put 'put ''XHU4NTJhXHU4NTJkXHU4NTJlXHU4NTJmXHU4NTMwXHU4NTMxXHU4NTMyXHU4NTMzXHU4NTM0XHU4NTM1XHU4NTM2XHU4NTNlXHU4NTNmXHU4NTQwXHU4NTQxXHU4NTQyXHU4NTQ0XHU4NTQ1XHU4NTQ2XHU4NTQ3XHU4NTRiXHU4NTRjXHU4NTRkXHU4NTRlXHU4NTRmXHU4NTUwXHU4NTUxXHU4''@;'; put 'put ''NTUyXHU4NTUzXHU4NTU0XHU4NTU1XHVmZmZkXHU4NTU3XHU4NTU4XHU4NTVhXHU4NTViXHU4NTVjXHU4NTVkXHU4NTVmXHU4NTYwXHU4NTYxXHU4NTYyXHU4NTYzXHU4NTY1XHU4NTY2XHU4NTY3XHU4NTY5XHU4NTZhXHU4NTZiXHU4NTZjXHU4NTZkXHU4NTZlXHU4NTZmXHU4NTcwXHU4NTcx''@;'; put 'put ''XHU4NTczXHU4NTc1XHU4NTc2XHU4NTc3XHU4NTc4XHU4NTdjXHU4NTdkXHU4NTdmXHU4NTgwXHU4NTgxXHU3NzAxXHU3NmRiXHU1MjY5XHU4MGRjXHU1NzIzXHU1ZTA4XHU1OTMxXHU3MmVlXHU2NWJkXHU2ZTdmXHU4YmQ3XHU1YzM4XHU4NjcxXHU1MzQxXHU3N2YzXHU2MmZlXHU2NWY2XHU0''@;'; put 'put ''ZWMwXHU5OGRmXHU4NjgwXHU1YjllXHU4YmM2XHU1M2YyXHU3N2UyXHU0ZjdmXHU1YzRlXHU5YTc2XHU1OWNiXHU1ZjBmXHU3OTNhXHU1OGViXHU0ZTE2XHU2N2ZmXHU0ZThiXHU2MmVkXHU4YTkzXHU5MDFkXHU1MmJmXHU2NjJmXHU1NWRjXHU1NjZjXHU5MDAyXHU0ZWQ1XHU0ZjhkXHU5MWNh''@;'; put 'put ''XHU5OTcwXHU2YzBmXHU1ZTAyXHU2MDQzXHU1YmE0XHU4OWM2XHU4YmQ1XHU2NTM2XHU2MjRiXHU5OTk2XHU1Yjg4XHU1YmZmXHU2Mzg4XHU1NTJlXHU1M2Q3XHU3NjI2XHU1MTdkXHU4NTJjXHU2N2EyXHU2OGIzXHU2YjhhXHU2MjkyXHU4ZjkzXHU1M2Q0XHU4MjEyXHU2ZGQxXHU3NThmXHU0''@;'; put 'put ''ZTY2XHU4ZDRlXHU1YjcwXHU3MTlmXHU4NWFmXHU2NjkxXHU2NmQ5XHU3ZjcyXHU4NzAwXHU5ZWNkXHU5ZjIwXHU1YzVlXHU2NzJmXHU4ZmYwXHU2ODExXHU2NzVmXHU2MjBkXHU3YWQ2XHU1ODg1XHU1ZWI2XHU2NTcwXHU2ZjMxXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjAyXS5sZW5n''@;'; put 'put ''dGg7KytwKTY1NTMzIT09X1syMDJdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjAyXVtwXV09NTE3MTIrcCxiWzUxNzEyK3BdPV9bMjAyXVtwXSk7Zm9yKF9bMjAzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTgyXHU4NTgzXHU4''@;'; put 'put ''NTg2XHU4NTg4XHU4NTg5XHU4NThhXHU4NThiXHU4NThjXHU4NThkXHU4NThlXHU4NTkwXHU4NTkxXHU4NTkyXHU4NTkzXHU4NTk0XHU4NTk1XHU4NTk2XHU4NTk3XHU4NTk4XHU4NTk5XHU4NTlhXHU4NTlkXHU4NTllXHU4NTlmXHU4NWEwXHU4NWExXHU4NWEyXHU4NWEzXHU4NWE1XHU4NWE2''@;'; put 'put ''XHU4NWE3XHU4NWE5XHU4NWFiXHU4NWFjXHU4NWFkXHU4NWIxXHU4NWIyXHU4NWIzXHU4NWI0XHU4NWI1XHU4NWI2XHU4NWI4XHU4NWJhXHU4NWJiXHU4NWJjXHU4NWJkXHU4NWJlXHU4NWJmXHU4NWMwXHU4NWMyXHU4NWMzXHU4NWM0XHU4NWM1XHU4NWM2XHU4NWM3XHU4NWM4XHU4NWNhXHU4''@;'; put 'put ''NWNiXHU4NWNjXHU4NWNkXHU4NWNlXHU4NWQxXHU4NWQyXHVmZmZkXHU4NWQ0XHU4NWQ2XHU4NWQ3XHU4NWQ4XHU4NWQ5XHU4NWRhXHU4NWRiXHU4NWRkXHU4NWRlXHU4NWRmXHU4NWUwXHU4NWUxXHU4NWUyXHU4NWUzXHU4NWU1XHU4NWU2XHU4NWU3XHU4NWU4XHU4NWVhXHU4NWViXHU4NWVj''@;'; put 'put ''XHU4NWVkXHU4NWVlXHU4NWVmXHU4NWYwXHU4NWYxXHU4NWYyXHU4NWYzXHU4NWY0XHU4NWY1XHU4NWY2XHU4NWY3XHU4NWY4XHU2MDU1XHU1MjM3XHU4MDBkXHU2NDU0XHU4ODcwXHU3NTI5XHU1ZTA1XHU2ODEzXHU2MmY0XHU5NzFjXHU1M2NjXHU3MjNkXHU4YzAxXHU2YzM0XHU3NzYxXHU3''@;'; put 'put ''YTBlXHU1NDJlXHU3N2FjXHU5ODdhXHU4MjFjXHU4YmY0XHU3ODU1XHU2NzE0XHU3MGMxXHU2NWFmXHU2NDk1XHU1NjM2XHU2MDFkXHU3OWMxXHU1M2Y4XHU0ZTFkXHU2YjdiXHU4MDg2XHU1YmZhXHU1NWUzXHU1NmRiXHU0ZjNhXHU0ZjNjXHU5OTcyXHU1ZGYzXHU2NzdlXHU4MDM4XHU2MDAy''@;'; put 'put ''XHU5ODgyXHU5MDAxXHU1YjhiXHU4YmJjXHU4YmY1XHU2NDFjXHU4MjU4XHU2NGRlXHU1NWZkXHU4MmNmXHU5MTY1XHU0ZmQ3XHU3ZDIwXHU5MDFmXHU3YzlmXHU1MGYzXHU1ODUxXHU2ZWFmXHU1YmJmXHU4YmM5XHU4MDgzXHU5MTc4XHU4NDljXHU3Yjk3XHU4NjdkXHU5NjhiXHU5NjhmXHU3''@;'; put 'put ''ZWU1XHU5YWQzXHU3ODhlXHU1YzgxXHU3YTU3XHU5MDQyXHU5NmE3XHU3OTVmXHU1YjU5XHU2MzVmXHU3YjBiXHU4NGQxXHU2OGFkXHU1NTA2XHU3ZjI5XHU3NDEwXHU3ZDIyXHU5NTAxXHU2MjQwXHU1ODRjXHU0ZWQ2XHU1YjgzXHU1OTc5XHU1ODU0XHVmZmZkIi5zcGxpdCgiIikscD0wO3Ah''@;'; put 'put ''PV9bMjAzXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDNdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjAzXVtwXV09NTE5NjgrcCxiWzUxOTY4K3BdPV9bMjAzXVtwXSk7Zm9yKF9bMjA0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4''@;'; put 'put ''NWY5XHU4NWZhXHU4NWZjXHU4NWZkXHU4NWZlXHU4NjAwXHU4NjAxXHU4NjAyXHU4NjAzXHU4NjA0XHU4NjA2XHU4NjA3XHU4NjA4XHU4NjA5XHU4NjBhXHU4NjBiXHU4NjBjXHU4NjBkXHU4NjBlXHU4NjBmXHU4NjEwXHU4NjEyXHU4NjEzXHU4NjE0XHU4NjE1XHU4NjE3XHU4NjE4XHU4NjE5''@;'; put 'put ''XHU4NjFhXHU4NjFiXHU4NjFjXHU4NjFkXHU4NjFlXHU4NjFmXHU4NjIwXHU4NjIxXHU4NjIyXHU4NjIzXHU4NjI0XHU4NjI1XHU4NjI2XHU4NjI4XHU4NjJhXHU4NjJiXHU4NjJjXHU4NjJkXHU4NjJlXHU4NjJmXHU4NjMwXHU4NjMxXHU4NjMyXHU4NjMzXHU4NjM0XHU4NjM1XHU4NjM2XHU4''@;'; put 'put ''NjM3XHU4NjM5XHU4NjNhXHU4NjNiXHU4NjNkXHU4NjNlXHU4NjNmXHU4NjQwXHVmZmZkXHU4NjQxXHU4NjQyXHU4NjQzXHU4NjQ0XHU4NjQ1XHU4NjQ2XHU4NjQ3XHU4NjQ4XHU4NjQ5XHU4NjRhXHU4NjRiXHU4NjRjXHU4NjUyXHU4NjUzXHU4NjU1XHU4NjU2XHU4NjU3XHU4NjU4XHU4NjU5''@;'; put 'put ''XHU4NjViXHU4NjVjXHU4NjVkXHU4NjVmXHU4NjYwXHU4NjYxXHU4NjYzXHU4NjY0XHU4NjY1XHU4NjY2XHU4NjY3XHU4NjY4XHU4NjY5XHU4NjZhXHU3MzZkXHU2MzFlXHU4ZTRiXHU4ZTBmXHU4MGNlXHU4MmQ0XHU2MmFjXHU1M2YwXHU2Y2YwXHU5MTVlXHU1OTJhXHU2MDAxXHU2YzcwXHU1''@;'; put 'put ''NzRkXHU2NDRhXHU4ZDJhXHU3NjJiXHU2ZWU5XHU1NzViXHU2YTgwXHU3NWYwXHU2ZjZkXHU4YzJkXHU4YzA4XHU1NzY2XHU2YmVmXHU4ODkyXHU3OGIzXHU2M2EyXHU1M2Y5XHU3MGFkXHU2YzY0XHU1ODU4XHU2NDJhXHU1ODAyXHU2OGUwXHU4MTliXHU1NTEwXHU3Y2Q2XHU1MDE4XHU4ZWJh''@;'; put 'put ''XHU2ZGNjXHU4ZDlmXHU3MGViXHU2MzhmXHU2ZDliXHU2ZWQ0XHU3ZWU2XHU4NDA0XHU2ODQzXHU5MDAzXHU2ZGQ4XHU5Njc2XHU4YmE4XHU1OTU3XHU3Mjc5XHU4NWU0XHU4MTdlXHU3NWJjXHU4YThhXHU2OGFmXHU1MjU0XHU4ZTIyXHU5NTExXHU2M2QwXHU5ODk4XHU4ZTQ0XHU1NTdjXHU0''@;'; put 'put ''ZjUzXHU2NmZmXHU1NjhmXHU2MGQ1XHU2ZDk1XHU1MjQzXHU1YzQ5XHU1OTI5XHU2ZGZiXHU1ODZiXHU3NTMwXHU3NTFjXHU2MDZjXHU4MjE0XHU4MTQ2XHU2MzExXHU2NzYxXHU4ZmUyXHU3NzNhXHU4ZGYzXHU4ZDM0XHU5NGMxXHU1ZTE2XHU1Mzg1XHU1NDJjXHU3MGMzXHVmZmZkIi5zcGxp''@;'; put 'put ''dCgiIikscD0wO3AhPV9bMjA0XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDRdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjA0XVtwXV09NTIyMjQrcCxiWzUyMjI0K3BdPV9bMjA0XVtwXSk7Zm9yKF9bMjA1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHU4NjZkXHU4NjZmXHU4NjcwXHU4NjcyXHU4NjczXHU4Njc0XHU4Njc1XHU4Njc2XHU4Njc3XHU4Njc4XHU4NjgzXHU4Njg0XHU4Njg1XHU4Njg2XHU4Njg3XHU4Njg4XHU4Njg5XHU4NjhlXHU4NjhmXHU4NjkwXHU4NjkxXHU4NjkyXHU4Njk0XHU4Njk2XHU4Njk3XHU4Njk4''@;'; put 'put ''XHU4Njk5XHU4NjlhXHU4NjliXHU4NjllXHU4NjlmXHU4NmEwXHU4NmExXHU4NmEyXHU4NmE1XHU4NmE2XHU4NmFiXHU4NmFkXHU4NmFlXHU4NmIyXHU4NmIzXHU4NmI3XHU4NmI4XHU4NmI5XHU4NmJiXHU4NmJjXHU4NmJkXHU4NmJlXHU4NmJmXHU4NmMxXHU4NmMyXHU4NmMzXHU4NmM1XHU4''@;'; put 'put ''NmM4XHU4NmNjXHU4NmNkXHU4NmQyXHU4NmQzXHU4NmQ1XHU4NmQ2XHU4NmQ3XHU4NmRhXHU4NmRjXHVmZmZkXHU4NmRkXHU4NmUwXHU4NmUxXHU4NmUyXHU4NmUzXHU4NmU1XHU4NmU2XHU4NmU3XHU4NmU4XHU4NmVhXHU4NmViXHU4NmVjXHU4NmVmXHU4NmY1XHU4NmY2XHU4NmY3XHU4NmZh''@;'; put 'put ''XHU4NmZiXHU4NmZjXHU4NmZkXHU4NmZmXHU4NzAxXHU4NzA0XHU4NzA1XHU4NzA2XHU4NzBiXHU4NzBjXHU4NzBlXHU4NzBmXHU4NzEwXHU4NzExXHU4NzE0XHU4NzE2XHU2YzQwXHU1ZWY3XHU1MDVjXHU0ZWFkXHU1ZWFkXHU2MzNhXHU4MjQ3XHU5MDFhXHU2ODUwXHU5MTZlXHU3N2IzXHU1''@;'; put 'put ''NDBjXHU5NGRjXHU1ZjY0XHU3YWU1XHU2ODc2XHU2MzQ1XHU3YjUyXHU3ZWRmXHU3NWRiXHU1MDc3XHU2Mjk1XHU1OTM0XHU5MDBmXHU1MWY4XHU3OWMzXHU3YTgxXHU1NmZlXHU1ZjkyXHU5MDE0XHU2ZDgyXHU1YzYwXHU1NzFmXHU1NDEwXHU1MTU0XHU2ZTRkXHU1NmUyXHU2M2E4XHU5ODkz''@;'; put 'put ''XHU4MTdmXHU4NzE1XHU4OTJhXHU5MDAwXHU1NDFlXHU1YzZmXHU4MWMwXHU2MmQ2XHU2MjU4XHU4MTMxXHU5ZTM1XHU5NjQwXHU5YTZlXHU5YTdjXHU2OTJkXHU1OWE1XHU2MmQzXHU1NTNlXHU2MzE2XHU1NGM3XHU4NmQ5XHU2ZDNjXHU1YTAzXHU3NGU2XHU4ODljXHU2YjZhXHU1OTE2XHU4''@;'; put 'put ''YzRjXHU1ZjJmXHU2ZTdlXHU3M2E5XHU5ODdkXHU0ZTM4XHU3MGY3XHU1YjhjXHU3ODk3XHU2MzNkXHU2NjVhXHU3Njk2XHU2MGNiXHU1YjliXHU1YTQ5XHU0ZTA3XHU4MTU1XHU2YzZhXHU3MzhiXHU0ZWExXHU2Nzg5XHU3ZjUxXHU1ZjgwXHU2NWZhXHU2NzFiXHU1ZmQ4XHU1OTg0XHU1YTAx''@;'; put 'put ''XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjA1XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDVdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjA1XVtwXV09NTI0ODArcCxiWzUyNDgwK3BdPV9bMjA1XVtwXSk7Zm9yKF9bMjA2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NzE5XHU4NzFiXHU4NzFkXHU4NzFmXHU4NzIwXHU4NzI0XHU4NzI2XHU4NzI3XHU4NzI4XHU4NzJhXHU4NzJiXHU4NzJjXHU4NzJkXHU4NzJmXHU4NzMwXHU4NzMyXHU4NzMzXHU4NzM1XHU4NzM2XHU4NzM4XHU4NzM5XHU4NzNhXHU4NzNjXHU4NzNk''@;'; put 'put ''XHU4NzQwXHU4NzQxXHU4NzQyXHU4NzQzXHU4NzQ0XHU4NzQ1XHU4NzQ2XHU4NzRhXHU4NzRiXHU4NzRkXHU4NzRmXHU4NzUwXHU4NzUxXHU4NzUyXHU4NzU0XHU4NzU1XHU4NzU2XHU4NzU4XHU4NzVhXHU4NzViXHU4NzVjXHU4NzVkXHU4NzVlXHU4NzVmXHU4NzYxXHU4NzYyXHU4NzY2XHU4''@;'; put 'put ''NzY3XHU4NzY4XHU4NzY5XHU4NzZhXHU4NzZiXHU4NzZjXHU4NzZkXHU4NzZmXHU4NzcxXHU4NzcyXHU4NzczXHU4Nzc1XHVmZmZkXHU4Nzc3XHU4Nzc4XHU4Nzc5XHU4NzdhXHU4NzdmXHU4NzgwXHU4NzgxXHU4Nzg0XHU4Nzg2XHU4Nzg3XHU4Nzg5XHU4NzhhXHU4NzhjXHU4NzhlXHU4Nzhm''@;'; put 'put ''XHU4NzkwXHU4NzkxXHU4NzkyXHU4Nzk0XHU4Nzk1XHU4Nzk2XHU4Nzk4XHU4Nzk5XHU4NzlhXHU4NzliXHU4NzljXHU4NzlkXHU4NzllXHU4N2EwXHU4N2ExXHU4N2EyXHU4N2EzXHU4N2E0XHU1ZGNkXHU1ZmFlXHU1MzcxXHU5N2U2XHU4ZmRkXHU2ODQ1XHU1NmY0XHU1NTJmXHU2MGRmXHU0''@;'; put 'put ''ZTNhXHU2ZjRkXHU3ZWY0XHU4MmM3XHU4NDBlXHU1OWQ0XHU0ZjFmXHU0ZjJhXHU1YzNlXHU3ZWFjXHU2NzJhXHU4NTFhXHU1NDczXHU3NTRmXHU4MGMzXHU1NTgyXHU5YjRmXHU0ZjRkXHU2ZTJkXHU4YzEzXHU1YzA5XHU2MTcwXHU1MzZiXHU3NjFmXHU2ZTI5XHU4NjhhXHU2NTg3XHU5NWZi''@;'; put 'put ''XHU3ZWI5XHU1NDNiXHU3YTMzXHU3ZDBhXHU5NWVlXHU1NWUxXHU3ZmMxXHU3NGVlXHU2MzFkXHU4NzE3XHU2ZGExXHU3YTlkXHU2MjExXHU2NWExXHU1MzY3XHU2M2UxXHU2YzgzXHU1ZGViXHU1NDVjXHU5NGE4XHU0ZTRjXHU2YzYxXHU4YmVjXHU1YzRiXHU2NWUwXHU4MjljXHU2OGE3XHU1''@;'; put 'put ''NDNlXHU1NDM0XHU2YmNiXHU2YjY2XHU0ZTk0XHU2MzQyXHU1MzQ4XHU4MjFlXHU0ZjBkXHU0ZmFlXHU1NzVlXHU2MjBhXHU5NmZlXHU2NjY0XHU3MjY5XHU1MmZmXHU1MmExXHU2MDlmXHU4YmVmXHU2NjE0XHU3MTk5XHU2NzkwXHU4OTdmXHU3ODUyXHU3N2ZkXHU2NjcwXHU1NjNiXHU1NDM4''@;'; put 'put ''XHU5NTIxXHU3MjdhXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjA2XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDZdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjA2XVtwXV09NTI3MzYrcCxiWzUyNzM2K3BdPV9bMjA2XVtwXSk7Zm9yKF9bMjA3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4N2E1XHU4N2E2XHU4N2E3XHU4N2E5XHU4N2FhXHU4N2FlXHU4N2IwXHU4N2IxXHU4N2IyXHU4N2I0XHU4N2I2XHU4N2I3XHU4N2I4XHU4N2I5XHU4N2JiXHU4N2JjXHU4N2JlXHU4N2JmXHU4N2MxXHU4N2MyXHU4N2MzXHU4N2M0''@;'; put 'put ''XHU4N2M1XHU4N2M3XHU4N2M4XHU4N2M5XHU4N2NjXHU4N2NkXHU4N2NlXHU4N2NmXHU4N2QwXHU4N2Q0XHU4N2Q1XHU4N2Q2XHU4N2Q3XHU4N2Q4XHU4N2Q5XHU4N2RhXHU4N2RjXHU4N2RkXHU4N2RlXHU4N2RmXHU4N2UxXHU4N2UyXHU4N2UzXHU4N2U0XHU4N2U2XHU4N2U3XHU4N2U4XHU4''@;'; put 'put ''N2U5XHU4N2ViXHU4N2VjXHU4N2VkXHU4N2VmXHU4N2YwXHU4N2YxXHU4N2YyXHU4N2YzXHU4N2Y0XHU4N2Y1XHU4N2Y2XHU4N2Y3XHU4N2Y4XHVmZmZkXHU4N2ZhXHU4N2ZiXHU4N2ZjXHU4N2ZkXHU4N2ZmXHU4ODAwXHU4ODAxXHU4ODAyXHU4ODA0XHU4ODA1XHU4ODA2XHU4ODA3XHU4ODA4''@;'; put 'put ''XHU4ODA5XHU4ODBiXHU4ODBjXHU4ODBkXHU4ODBlXHU4ODBmXHU4ODEwXHU4ODExXHU4ODEyXHU4ODE0XHU4ODE3XHU4ODE4XHU4ODE5XHU4ODFhXHU4ODFjXHU4ODFkXHU4ODFlXHU4ODFmXHU4ODIwXHU4ODIzXHU3YTAwXHU2MDZmXHU1ZTBjXHU2MDg5XHU4MTlkXHU1OTE1XHU2MGRjXHU3''@;'; put 'put ''MTg0XHU3MGVmXHU2ZWFhXHU2YzUwXHU3MjgwXHU2YTg0XHU4OGFkXHU1ZTJkXHU0ZTYwXHU1YWIzXHU1NTljXHU5NGUzXHU2ZDE3XHU3Y2ZiXHU5Njk5XHU2MjBmXHU3ZWM2XHU3NzhlXHU4NjdlXHU1MzIzXHU5NzFlXHU4Zjk2XHU2Njg3XHU1Y2UxXHU0ZmEwXHU3MmVkXHU0ZTBiXHU1M2E2''@;'; put 'put ''XHU1OTBmXHU1NDEzXHU2MzgwXHU5NTI4XHU1MTQ4XHU0ZWQ5XHU5YzljXHU3ZWE0XHU1NGI4XHU4ZDI0XHU4ODU0XHU4MjM3XHU5NWYyXHU2ZDhlXHU1ZjI2XHU1YWNjXHU2NjNlXHU5NjY5XHU3M2IwXHU3MzJlXHU1M2JmXHU4MTdhXHU5OTg1XHU3ZmExXHU1YmFhXHU5Njc3XHU5NjUwXHU3''@;'; put 'put ''ZWJmXHU3NmY4XHU1M2EyXHU5NTc2XHU5OTk5XHU3YmIxXHU4OTQ0XHU2ZTU4XHU0ZTYxXHU3ZmQ0XHU3OTY1XHU4YmU2XHU2MGYzXHU1NGNkXHU0ZWFiXHU5ODc5XHU1ZGY3XHU2YTYxXHU1MGNmXHU1NDExXHU4YzYxXHU4NDI3XHU3ODVkXHU5NzA0XHU1MjRhXHU1NGVlXHU1NmEzXHU5NTAw''@;'; put 'put ''XHU2ZDg4XHU1YmI1XHU2ZGM2XHU2NjUzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjA3XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDddW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjA3XVtwXV09NTI5OTIrcCxiWzUyOTkyK3BdPV9bMjA3XVtwXSk7Zm9yKF9bMjA4XT0iXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ODI0XHU4ODI1XHU4ODI2XHU4ODI3XHU4ODI4XHU4ODI5XHU4ODJhXHU4ODJiXHU4ODJjXHU4ODJkXHU4ODJlXHU4ODJmXHU4ODMwXHU4ODMxXHU4ODMzXHU4ODM0XHU4ODM1XHU4ODM2XHU4ODM3XHU4ODM4''@;'; put 'put ''XHU4ODNhXHU4ODNiXHU4ODNkXHU4ODNlXHU4ODNmXHU4ODQxXHU4ODQyXHU4ODQzXHU4ODQ2XHU4ODQ3XHU4ODQ4XHU4ODQ5XHU4ODRhXHU4ODRiXHU4ODRlXHU4ODRmXHU4ODUwXHU4ODUxXHU4ODUyXHU4ODUzXHU4ODU1XHU4ODU2XHU4ODU4XHU4ODVhXHU4ODViXHU4ODVjXHU4ODVkXHU4''@;'; put 'put ''ODVlXHU4ODVmXHU4ODYwXHU4ODY2XHU4ODY3XHU4ODZhXHU4ODZkXHU4ODZmXHU4ODcxXHU4ODczXHU4ODc0XHU4ODc1XHU4ODc2XHU4ODc4XHU4ODc5XHU4ODdhXHVmZmZkXHU4ODdiXHU4ODdjXHU4ODgwXHU4ODgzXHU4ODg2XHU4ODg3XHU4ODg5XHU4ODhhXHU4ODhjXHU4ODhlXHU4ODhm''@;'; put 'put ''XHU4ODkwXHU4ODkxXHU4ODkzXHU4ODk0XHU4ODk1XHU4ODk3XHU4ODk4XHU4ODk5XHU4ODlhXHU4ODliXHU4ODlkXHU4ODllXHU4ODlmXHU4OGEwXHU4OGExXHU4OGEzXHU4OGE1XHU4OGE2XHU4OGE3XHU4OGE4XHU4OGE5XHU4OGFhXHU1YzBmXHU1YjVkXHU2ODIxXHU4MDk2XHU1NTc4XHU3''@;'; put 'put ''YjExXHU2NTQ4XHU2OTU0XHU0ZTliXHU2YjQ3XHU4NzRlXHU5NzhiXHU1MzRmXHU2MzFmXHU2NDNhXHU5MGFhXHU2NTljXHU4MGMxXHU4YzEwXHU1MTk5XHU2OGIwXHU1Mzc4XHU4N2Y5XHU2MWM4XHU2Y2M0XHU2Y2ZiXHU4YzIyXHU1YzUxXHU4NWFhXHU4MmFmXHU5NTBjXHU2YjIzXHU4Zjli''@;'; put 'put ''XHU2NWIwXHU1ZmZiXHU1ZmMzXHU0ZmUxXHU4ODQ1XHU2NjFmXHU4MTY1XHU3MzI5XHU2MGZhXHU1MTc0XHU1MjExXHU1NzhiXHU1ZjYyXHU5MGEyXHU4ODRjXHU5MTkyXHU1ZTc4XHU2NzRmXHU2MDI3XHU1OWQzXHU1MTQ0XHU1MWY2XHU4MGY4XHU1MzA4XHU2Yzc5XHU5NmM0XHU3MThhXHU0''@;'; put 'put ''ZjExXHU0ZmVlXHU3ZjllXHU2NzNkXHU1NWM1XHU5NTA4XHU3OWMwXHU4ODk2XHU3ZWUzXHU1ODlmXHU2MjBjXHU5NzAwXHU4NjVhXHU1NjE4XHU5ODdiXHU1ZjkwXHU4YmI4XHU4NGM0XHU5MTU3XHU1M2Q5XHU2NWVkXHU1ZThmXHU3NTVjXHU2MDY0XHU3ZDZlXHU1YTdmXHU3ZWVhXHU3ZWVk''@;'; put 'put ''XHU4ZjY5XHU1NWE3XHU1YmEzXHU2MGFjXHU2NWNiXHU3Mzg0XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjA4XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDhdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjA4XVtwXV09NTMyNDgrcCxiWzUzMjQ4K3BdPV9bMjA4XVtwXSk7Zm9yKF9bMjA5''@;'; put 'put ''XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OGFjXHU4OGFlXHU4OGFmXHU4OGIwXHU4OGIyXHU4OGIzXHU4OGI0XHU4OGI1XHU4OGI2XHU4OGI4XHU4OGI5XHU4OGJhXHU4OGJiXHU4OGJkXHU4OGJlXHU4OGJmXHU4OGMwXHU4OGMz''@;'; put 'put ''XHU4OGM0XHU4OGM3XHU4OGM4XHU4OGNhXHU4OGNiXHU4OGNjXHU4OGNkXHU4OGNmXHU4OGQwXHU4OGQxXHU4OGQzXHU4OGQ2XHU4OGQ3XHU4OGRhXHU4OGRiXHU4OGRjXHU4OGRkXHU4OGRlXHU4OGUwXHU4OGUxXHU4OGU2XHU4OGU3XHU4OGU5XHU4OGVhXHU4OGViXHU4OGVjXHU4OGVkXHU4''@;'; put 'put ''OGVlXHU4OGVmXHU4OGYyXHU4OGY1XHU4OGY2XHU4OGY3XHU4OGZhXHU4OGZiXHU4OGZkXHU4OGZmXHU4OTAwXHU4OTAxXHU4OTAzXHU4OTA0XHU4OTA1XHU4OTA2XHU4OTA3XHU4OTA4XHVmZmZkXHU4OTA5XHU4OTBiXHU4OTBjXHU4OTBkXHU4OTBlXHU4OTBmXHU4OTExXHU4OTE0XHU4OTE1''@;'; put 'put ''XHU4OTE2XHU4OTE3XHU4OTE4XHU4OTFjXHU4OTFkXHU4OTFlXHU4OTFmXHU4OTIwXHU4OTIyXHU4OTIzXHU4OTI0XHU4OTI2XHU4OTI3XHU4OTI4XHU4OTI5XHU4OTJjXHU4OTJkXHU4OTJlXHU4OTJmXHU4OTMxXHU4OTMyXHU4OTMzXHU4OTM1XHU4OTM3XHU5MDA5XHU3NjYzXHU3NzI5XHU3''@;'; put 'put ''ZWRhXHU5Nzc0XHU4NTliXHU1YjY2XHU3YTc0XHU5NmVhXHU4ODQwXHU1MmNiXHU3MThmXHU1ZmFhXHU2NWVjXHU4YmUyXHU1YmZiXHU5YTZmXHU1ZGUxXHU2Yjg5XHU2YzViXHU4YmFkXHU4YmFmXHU5MDBhXHU4ZmM1XHU1MzhiXHU2MmJjXHU5ZTI2XHU5ZTJkXHU1NDQwXHU0ZTJiXHU4MmJk''@;'; put 'put ''XHU3MjU5XHU4NjljXHU1ZDE2XHU4ODU5XHU2ZGFmXHU5NmM1XHU1NGQxXHU0ZTlhXHU4YmI2XHU3MTA5XHU1NGJkXHU5NjA5XHU3MGRmXHU2ZGY5XHU3NmQwXHU0ZTI1XHU3ODE0XHU4NzEyXHU1Y2E5XHU1ZWY2XHU4YTAwXHU5ODljXHU5NjBlXHU3MDhlXHU2Y2JmXHU1OTQ0XHU2M2E5XHU3''@;'; put 'put ''NzNjXHU4ODRkXHU2ZjE0XHU4MjczXHU1ODMwXHU3MWQ1XHU1MzhjXHU3ODFhXHU5NmMxXHU1NTAxXHU1ZjY2XHU3MTMwXHU1YmI0XHU4YzFhXHU5YThjXHU2YjgzXHU1OTJlXHU5ZTJmXHU3OWU3XHU2NzY4XHU2MjZjXHU0ZjZmXHU3NWExXHU3ZjhhXHU2ZDBiXHU5NjMzXHU2YzI3XHU0ZWYw''@;'; put 'put ''XHU3NWQyXHU1MTdiXHU2ODM3XHU2ZjNlXHU5MDgwXHU4MTcwXHU1OTk2XHU3NDc2XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjA5XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDldW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjA5XVtwXV09NTM1MDQrcCxiWzUzNTA0K3BdPV9bMjA5XVtw''@;'; put 'put ''XSk7Zm9yKF9bMjEwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OTM4XHU4OTM5XHU4OTNhXHU4OTNiXHU4OTNjXHU4OTNkXHU4OTNlXHU4OTNmXHU4OTQwXHU4OTQyXHU4OTQzXHU4OTQ1XHU4OTQ2XHU4OTQ3XHU4OTQ4XHU4OTQ5''@;'; put 'put ''XHU4OTRhXHU4OTRiXHU4OTRjXHU4OTRkXHU4OTRlXHU4OTRmXHU4OTUwXHU4OTUxXHU4OTUyXHU4OTUzXHU4OTU0XHU4OTU1XHU4OTU2XHU4OTU3XHU4OTU4XHU4OTU5XHU4OTVhXHU4OTViXHU4OTVjXHU4OTVkXHU4OTYwXHU4OTYxXHU4OTYyXHU4OTYzXHU4OTY0XHU4OTY1XHU4OTY3XHU4''@;'; put 'put ''OTY4XHU4OTY5XHU4OTZhXHU4OTZiXHU4OTZjXHU4OTZkXHU4OTZlXHU4OTZmXHU4OTcwXHU4OTcxXHU4OTcyXHU4OTczXHU4OTc0XHU4OTc1XHU4OTc2XHU4OTc3XHU4OTc4XHU4OTc5XHU4OTdhXHU4OTdjXHVmZmZkXHU4OTdkXHU4OTdlXHU4OTgwXHU4OTgyXHU4OTg0XHU4OTg1XHU4OTg3''@;'; put 'put ''XHU4OTg4XHU4OTg5XHU4OThhXHU4OThiXHU4OThjXHU4OThkXHU4OThlXHU4OThmXHU4OTkwXHU4OTkxXHU4OTkyXHU4OTkzXHU4OTk0XHU4OTk1XHU4OTk2XHU4OTk3XHU4OTk4XHU4OTk5XHU4OTlhXHU4OTliXHU4OTljXHU4OTlkXHU4OTllXHU4OTlmXHU4OWEwXHU4OWExXHU2NDQ3XHU1''@;'; put 'put ''YzI3XHU5MDY1XHU3YTkxXHU4YzIzXHU1OWRhXHU1NGFjXHU4MjAwXHU4MzZmXHU4OTgxXHU4MDAwXHU2OTMwXHU1NjRlXHU4MDM2XHU3MjM3XHU5MWNlXHU1MWI2XHU0ZTVmXHU5ODc1XHU2Mzk2XHU0ZTFhXHU1M2Y2XHU2NmYzXHU4MTRiXHU1OTFjXHU2ZGIyXHU0ZTAwXHU1OGY5XHU1MzNi''@;'; put 'put ''XHU2M2Q2XHU5NGYxXHU0ZjlkXHU0ZjBhXHU4ODYzXHU5ODkwXHU1OTM3XHU5MDU3XHU3OWZiXHU0ZWVhXHU4MGYwXHU3NTkxXHU2YzgyXHU1YjljXHU1OWU4XHU1ZjVkXHU2OTA1XHU4NjgxXHU1MDFhXHU1ZGYyXHU0ZTU5XHU3N2UzXHU0ZWU1XHU4MjdhXHU2MjkxXHU2NjEzXHU5MDkxXHU1''@;'; put 'put ''Yzc5XHU0ZWJmXHU1Zjc5XHU4MWM2XHU5MDM4XHU4MDg0XHU3NWFiXHU0ZWE2XHU4OGQ0XHU2MTBmXHU2YmM1XHU1ZmM2XHU0ZTQ5XHU3NmNhXHU2ZWEyXHU4YmUzXHU4YmFlXHU4YzBhXHU4YmQxXHU1ZjAyXHU3ZmZjXHU3ZmNjXHU3ZWNlXHU4MzM1XHU4MzZiXHU1NmUwXHU2YmI3XHU5N2Yz''@;'; put 'put ''XHU5NjM0XHU1OWZiXHU1NDFmXHU5NGY2XHU2ZGViXHU1YmM1XHU5OTZlXHU1YzM5XHU1ZjE1XHU5NjkwXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjEwXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTBdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjEwXVtwXV09NTM3NjArcCxiWzUzNzYw''@;'; put 'put ''K3BdPV9bMjEwXVtwXSk7Zm9yKF9bMjExXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OWEyXHU4OWEzXHU4OWE0XHU4OWE1XHU4OWE2XHU4OWE3XHU4OWE4XHU4OWE5XHU4OWFhXHU4OWFiXHU4OWFjXHU4OWFkXHU4OWFlXHU4OWFm''@;'; put 'put ''XHU4OWIwXHU4OWIxXHU4OWIyXHU4OWIzXHU4OWI0XHU4OWI1XHU4OWI2XHU4OWI3XHU4OWI4XHU4OWI5XHU4OWJhXHU4OWJiXHU4OWJjXHU4OWJkXHU4OWJlXHU4OWJmXHU4OWMwXHU4OWMzXHU4OWNkXHU4OWQzXHU4OWQ0XHU4OWQ1XHU4OWQ3XHU4OWQ4XHU4OWQ5XHU4OWRiXHU4OWRkXHU4''@;'; put 'put ''OWRmXHU4OWUwXHU4OWUxXHU4OWUyXHU4OWU0XHU4OWU3XHU4OWU4XHU4OWU5XHU4OWVhXHU4OWVjXHU4OWVkXHU4OWVlXHU4OWYwXHU4OWYxXHU4OWYyXHU4OWY0XHU4OWY1XHU4OWY2XHU4OWY3XHU4OWY4XHU4OWY5XHU4OWZhXHVmZmZkXHU4OWZiXHU4OWZjXHU4OWZkXHU4OWZlXHU4OWZm''@;'; put 'put ''XHU4YTAxXHU4YTAyXHU4YTAzXHU4YTA0XHU4YTA1XHU4YTA2XHU4YTA4XHU4YTA5XHU4YTBhXHU4YTBiXHU4YTBjXHU4YTBkXHU4YTBlXHU4YTBmXHU4YTEwXHU4YTExXHU4YTEyXHU4YTEzXHU4YTE0XHU4YTE1XHU4YTE2XHU4YTE3XHU4YTE4XHU4YTE5XHU4YTFhXHU4YTFiXHU4YTFjXHU4''@;'; put 'put ''YTFkXHU1MzcwXHU4MmYxXHU2YTMxXHU1YTc0XHU5ZTcwXHU1ZTk0XHU3ZjI4XHU4M2I5XHU4NDI0XHU4NDI1XHU4MzY3XHU4NzQ3XHU4ZmNlXHU4ZDYyXHU3NmM4XHU1ZjcxXHU5ODk2XHU3ODZjXHU2NjIwXHU1NGRmXHU2MmU1XHU0ZjYzXHU4MWMzXHU3NWM4XHU1ZWI4XHU5NmNkXHU4ZTBh''@;'; put 'put ''XHU4NmY5XHU1NDhmXHU2Y2YzXHU2ZDhjXHU2YzM4XHU2MDdmXHU1MmM3XHU3NTI4XHU1ZTdkXHU0ZjE4XHU2MGEwXHU1ZmU3XHU1YzI0XHU3NTMxXHU5MGFlXHU5NGMwXHU3MmI5XHU2Y2I5XHU2ZTM4XHU5MTQ5XHU2NzA5XHU1M2NiXHU1M2YzXHU0ZjUxXHU5MWM5XHU4YmYxXHU1M2M4XHU1''@;'; put 'put ''ZTdjXHU4ZmMyXHU2ZGU0XHU0ZThlXHU3NmMyXHU2OTg2XHU4NjVlXHU2MTFhXHU4MjA2XHU0ZjU5XHU0ZmRlXHU5MDNlXHU5YzdjXHU2MTA5XHU2ZTFkXHU2ZTE0XHU5Njg1XHU0ZTg4XHU1YTMxXHU5NmU4XHU0ZTBlXHU1YzdmXHU3OWI5XHU1Yjg3XHU4YmVkXHU3ZmJkXHU3Mzg5XHU1N2Rm''@;'; put 'put ''XHU4MjhiXHU5MGMxXHU1NDAxXHU5MDQ3XHU1NWJiXHU1Y2VhXHU1ZmExXHU2MTA4XHU2YjMyXHU3MmYxXHU4MGIyXHU4YTg5XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjExXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTFdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjExXVtwXV09NTQw''@;'; put 'put ''MTYrcCxiWzU0MDE2K3BdPV9bMjExXVtwXSk7Zm9yKF9bMjEyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YTFlXHU4YTFmXHU4YTIwXHU4YTIxXHU4YTIyXHU4YTIzXHU4YTI0XHU4YTI1XHU4YTI2XHU4YTI3XHU4YTI4XHU4YTI5''@;'; put 'put ''XHU4YTJhXHU4YTJiXHU4YTJjXHU4YTJkXHU4YTJlXHU4YTJmXHU4YTMwXHU4YTMxXHU4YTMyXHU4YTMzXHU4YTM0XHU4YTM1XHU4YTM2XHU4YTM3XHU4YTM4XHU4YTM5XHU4YTNhXHU4YTNiXHU4YTNjXHU4YTNkXHU4YTNmXHU4YTQwXHU4YTQxXHU4YTQyXHU4YTQzXHU4YTQ0XHU4YTQ1XHU4''@;'; put 'put ''YTQ2XHU4YTQ3XHU4YTQ5XHU4YTRhXHU4YTRiXHU4YTRjXHU4YTRkXHU4YTRlXHU4YTRmXHU4YTUwXHU4YTUxXHU4YTUyXHU4YTUzXHU4YTU0XHU4YTU1XHU4YTU2XHU4YTU3XHU4YTU4XHU4YTU5XHU4YTVhXHU4YTViXHU4YTVjXHU4YTVkXHU4YTVlXHVmZmZkXHU4YTVmXHU4YTYwXHU4YTYx''@;'; put 'put ''XHU4YTYyXHU4YTYzXHU4YTY0XHU4YTY1XHU4YTY2XHU4YTY3XHU4YTY4XHU4YTY5XHU4YTZhXHU4YTZiXHU4YTZjXHU4YTZkXHU4YTZlXHU4YTZmXHU4YTcwXHU4YTcxXHU4YTcyXHU4YTczXHU4YTc0XHU4YTc1XHU4YTc2XHU4YTc3XHU4YTc4XHU4YTdhXHU4YTdiXHU4YTdjXHU4YTdkXHU4''@;'; put 'put ''YTdlXHU4YTdmXHU4YTgwXHU2ZDc0XHU1YmQzXHU4OGQ1XHU5ODg0XHU4YzZiXHU5YTZkXHU5ZTMzXHU2ZTBhXHU1MWE0XHU1MTQzXHU1N2EzXHU4ODgxXHU1MzlmXHU2M2Y0XHU4Zjk1XHU1NmVkXHU1NDU4XHU1NzA2XHU3MzNmXHU2ZTkwXHU3ZjE4XHU4ZmRjXHU4MmQxXHU2MTNmXHU2MDI4''@;'; put 'put ''XHU5NjYyXHU2NmYwXHU3ZWE2XHU4ZDhhXHU4ZGMzXHU5NGE1XHU1Y2IzXHU3Y2E0XHU2NzA4XHU2MGE2XHU5NjA1XHU4MDE4XHU0ZTkxXHU5MGU3XHU1MzAwXHU5NjY4XHU1MTQxXHU4ZmQwXHU4NTc0XHU5MTVkXHU2NjU1XHU5N2Y1XHU1YjU1XHU1MzFkXHU3ODM4XHU2NzQyXHU2ODNkXHU1''@;'; put 'put ''NGM5XHU3MDdlXHU1YmIwXHU4ZjdkXHU1MThkXHU1NzI4XHU1NGIxXHU2NTEyXHU2NjgyXHU4ZDVlXHU4ZDQzXHU4MTBmXHU4NDZjXHU5MDZkXHU3Y2RmXHU1MWZmXHU4NWZiXHU2N2EzXHU2NWU5XHU2ZmExXHU4NmE0XHU4ZTgxXHU1NjZhXHU5MDIwXHU3NjgyXHU3MDc2XHU3MWU1XHU4ZDIz''@;'; put 'put ''XHU2MmU5XHU1MjE5XHU2Y2ZkXHU4ZDNjXHU2MDBlXHU1ODllXHU2MThlXHU2NmZlXHU4ZDYwXHU2MjRlXHU1NWIzXHU2ZTIzXHU2NzJkXHU4ZjY3XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjEyXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTJdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19b''@;'; put 'put ''MjEyXVtwXV09NTQyNzIrcCxiWzU0MjcyK3BdPV9bMjEyXVtwXSk7Zm9yKF9bMjEzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YTgxXHU4YTgyXHU4YTgzXHU4YTg0XHU4YTg1XHU4YTg2XHU4YTg3XHU4YTg4XHU4YThiXHU4YThj''@;'; put 'put ''XHU4YThkXHU4YThlXHU4YThmXHU4YTkwXHU4YTkxXHU4YTkyXHU4YTk0XHU4YTk1XHU4YTk2XHU4YTk3XHU4YTk4XHU4YTk5XHU4YTlhXHU4YTliXHU4YTljXHU4YTlkXHU4YTllXHU4YTlmXHU4YWEwXHU4YWExXHU4YWEyXHU4YWEzXHU4YWE0XHU4YWE1XHU4YWE2XHU4YWE3XHU4YWE4XHU4''@;'; put 'put ''YWE5XHU4YWFhXHU4YWFiXHU4YWFjXHU4YWFkXHU4YWFlXHU4YWFmXHU4YWIwXHU4YWIxXHU4YWIyXHU4YWIzXHU4YWI0XHU4YWI1XHU4YWI2XHU4YWI3XHU4YWI4XHU4YWI5XHU4YWJhXHU4YWJiXHU4YWJjXHU4YWJkXHU4YWJlXHU4YWJmXHU4YWMwXHU4YWMxXHU4YWMyXHVmZmZkXHU4YWMz''@;'; put 'put ''XHU4YWM0XHU4YWM1XHU4YWM2XHU4YWM3XHU4YWM4XHU4YWM5XHU4YWNhXHU4YWNiXHU4YWNjXHU4YWNkXHU4YWNlXHU4YWNmXHU4YWQwXHU4YWQxXHU4YWQyXHU4YWQzXHU4YWQ0XHU4YWQ1XHU4YWQ2XHU4YWQ3XHU4YWQ4XHU4YWQ5XHU4YWRhXHU4YWRiXHU4YWRjXHU4YWRkXHU4YWRlXHU4''@;'; put 'put ''YWRmXHU4YWUwXHU4YWUxXHU4YWUyXHU4YWUzXHU5NGUxXHU5NWY4XHU3NzI4XHU2ODA1XHU2OWE4XHU1NDhiXHU0ZTRkXHU3MGI4XHU4YmM4XHU2NDU4XHU2NThiXHU1Yjg1XHU3YTg0XHU1MDNhXHU1YmU4XHU3N2JiXHU2YmUxXHU4YTc5XHU3Yzk4XHU2Y2JlXHU3NmNmXHU2NWE5XHU4Zjk3''@;'; put 'put ''XHU1ZDJkXHU1YzU1XHU4NjM4XHU2ODA4XHU1MzYwXHU2MjE4XHU3YWQ5XHU2ZTViXHU3ZWZkXHU2YTFmXHU3YWUwXHU1ZjcwXHU2ZjMzXHU1ZjIwXHU2MzhjXHU2ZGE4XHU2NzU2XHU0ZTA4XHU1ZTEwXHU4ZDI2XHU0ZWQ3XHU4MGMwXHU3NjM0XHU5NjljXHU2MmRiXHU2NjJkXHU2MjdlXHU2''@;'; put 'put ''Y2JjXHU4ZDc1XHU3MTY3XHU3ZjY5XHU1MTQ2XHU4MDg3XHU1M2VjXHU5MDZlXHU2Mjk4XHU1NGYyXHU4NmYwXHU4Zjk5XHU4MDA1XHU5NTE3XHU4NTE3XHU4ZmQ5XHU2ZDU5XHU3M2NkXHU2NTlmXHU3NzFmXHU3NTA0XHU3ODI3XHU4MWZiXHU4ZDFlXHU5NDg4XHU0ZmE2XHU2Nzk1XHU3NWI5''@;'; put 'put ''XHU4YmNhXHU5NzA3XHU2MzJmXHU5NTQ3XHU5NjM1XHU4NGI4XHU2MzIzXHU3NzQxXHU1ZjgxXHU3MmYwXHU0ZTg5XHU2MDE0XHU2NTc0XHU2MmVmXHU2YjYzXHU2NTNmXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjEzXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTNdW3BdLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCkmJihJW19bMjEzXVtwXV09NTQ1MjgrcCxiWzU0NTI4K3BdPV9bMjEzXVtwXSk7Zm9yKF9bMjE0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YWU0XHU4YWU1XHU4YWU2XHU4YWU3XHU4YWU4XHU4YWU5XHU4YWVhXHU4YWVi''@;'; put 'put ''XHU4YWVjXHU4YWVkXHU4YWVlXHU4YWVmXHU4YWYwXHU4YWYxXHU4YWYyXHU4YWYzXHU4YWY0XHU4YWY1XHU4YWY2XHU4YWY3XHU4YWY4XHU4YWY5XHU4YWZhXHU4YWZiXHU4YWZjXHU4YWZkXHU4YWZlXHU4YWZmXHU4YjAwXHU4YjAxXHU4YjAyXHU4YjAzXHU4YjA0XHU4YjA1XHU4YjA2XHU4''@;'; put 'put ''YjA4XHU4YjA5XHU4YjBhXHU4YjBiXHU4YjBjXHU4YjBkXHU4YjBlXHU4YjBmXHU4YjEwXHU4YjExXHU4YjEyXHU4YjEzXHU4YjE0XHU4YjE1XHU4YjE2XHU4YjE3XHU4YjE4XHU4YjE5XHU4YjFhXHU4YjFiXHU4YjFjXHU4YjFkXHU4YjFlXHU4YjFmXHU4YjIwXHU4YjIxXHU4YjIyXHU4YjIz''@;'; put 'put ''XHVmZmZkXHU4YjI0XHU4YjI1XHU4YjI3XHU4YjI4XHU4YjI5XHU4YjJhXHU4YjJiXHU4YjJjXHU4YjJkXHU4YjJlXHU4YjJmXHU4YjMwXHU4YjMxXHU4YjMyXHU4YjMzXHU4YjM0XHU4YjM1XHU4YjM2XHU4YjM3XHU4YjM4XHU4YjM5XHU4YjNhXHU4YjNiXHU4YjNjXHU4YjNkXHU4YjNlXHU4''@;'; put 'put ''YjNmXHU4YjQwXHU4YjQxXHU4YjQyXHU4YjQzXHU4YjQ0XHU4YjQ1XHU1ZTI3XHU3NWM3XHU5MGQxXHU4YmMxXHU4MjlkXHU2NzlkXHU2NTJmXHU1NDMxXHU4NzE4XHU3N2U1XHU4MGEyXHU4MTAyXHU2YzQxXHU0ZTRiXHU3ZWM3XHU4MDRjXHU3NmY0XHU2OTBkXHU2Yjk2XHU2MjY3XHU1MDNj''@;'; put 'put ''XHU0Zjg0XHU1NzQwXHU2MzA3XHU2YjYyXHU4ZGJlXHU1M2VhXHU2NWU4XHU3ZWI4XHU1ZmQ3XHU2MzFhXHU2M2I3XHU4MWYzXHU4MWY0XHU3ZjZlXHU1ZTFjXHU1Y2Q5XHU1MjM2XHU2NjdhXHU3OWU5XHU3YTFhXHU4ZDI4XHU3MDk5XHU3NWQ0XHU2ZWRlXHU2Y2JiXHU3YTkyXHU0ZTJkXHU3''@;'; put 'put ''NmM1XHU1ZmUwXHU5NDlmXHU4ODc3XHU3ZWM4XHU3OWNkXHU4MGJmXHU5MWNkXHU0ZWYyXHU0ZjE3XHU4MjFmXHU1NDY4XHU1ZGRlXHU2ZDMyXHU4YmNjXHU3Y2E1XHU4Zjc0XHU4MDk4XHU1ZTFhXHU1NDkyXHU3NmIxXHU1Yjk5XHU2NjNjXHU5YWE0XHU3M2UwXHU2ODJhXHU4NmRiXHU2NzMx''@;'; put 'put ''XHU3MzJhXHU4YmY4XHU4YmRiXHU5MDEwXHU3YWY5XHU3MGRiXHU3MTZlXHU2MmM0XHU3N2E5XHU1NjMxXHU0ZTNiXHU4NDU3XHU2N2YxXHU1MmE5XHU4NmMwXHU4ZDJlXHU5NGY4XHU3YjUxXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjE0XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTRd''@;'; put 'put ''W3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjE0XVtwXV09NTQ3ODQrcCxiWzU0Nzg0K3BdPV9bMjE0XVtwXSk7Zm9yKF9bMjE1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YjQ2XHU4YjQ3XHU4YjQ4XHU4YjQ5XHU4YjRhXHU4YjRi''@;'; put 'put ''XHU4YjRjXHU4YjRkXHU4YjRlXHU4YjRmXHU4YjUwXHU4YjUxXHU4YjUyXHU4YjUzXHU4YjU0XHU4YjU1XHU4YjU2XHU4YjU3XHU4YjU4XHU4YjU5XHU4YjVhXHU4YjViXHU4YjVjXHU4YjVkXHU4YjVlXHU4YjVmXHU4YjYwXHU4YjYxXHU4YjYyXHU4YjYzXHU4YjY0XHU4YjY1XHU4YjY3XHU4''@;'; put 'put ''YjY4XHU4YjY5XHU4YjZhXHU4YjZiXHU4YjZkXHU4YjZlXHU4YjZmXHU4YjcwXHU4YjcxXHU4YjcyXHU4YjczXHU4Yjc0XHU4Yjc1XHU4Yjc2XHU4Yjc3XHU4Yjc4XHU4Yjc5XHU4YjdhXHU4YjdiXHU4YjdjXHU4YjdkXHU4YjdlXHU4YjdmXHU4YjgwXHU4YjgxXHU4YjgyXHU4YjgzXHU4Yjg0''@;'; put 'put ''XHU4Yjg1XHU4Yjg2XHVmZmZkXHU4Yjg3XHU4Yjg4XHU4Yjg5XHU4YjhhXHU4YjhiXHU4YjhjXHU4YjhkXHU4YjhlXHU4YjhmXHU4YjkwXHU4YjkxXHU4YjkyXHU4YjkzXHU4Yjk0XHU4Yjk1XHU4Yjk2XHU4Yjk3XHU4Yjk4XHU4Yjk5XHU4YjlhXHU4YjliXHU4YjljXHU4YjlkXHU4YjllXHU4''@;'; put 'put ''YjlmXHU4YmFjXHU4YmIxXHU4YmJiXHU4YmM3XHU4YmQwXHU4YmVhXHU4YzA5XHU4YzFlXHU0ZjRmXHU2Y2U4XHU3OTVkXHU5YTdiXHU2MjkzXHU3MjJhXHU2MmZkXHU0ZTEzXHU3ODE2XHU4ZjZjXHU2NGIwXHU4ZDVhXHU3YmM2XHU2ODY5XHU1ZTg0XHU4OGM1XHU1OTg2XHU2NDllXHU1OGVl''@;'; put 'put ''XHU3MmI2XHU2OTBlXHU5NTI1XHU4ZmZkXHU4ZDU4XHU1NzYwXHU3ZjAwXHU4YzA2XHU1MWM2XHU2MzQ5XHU2MmQ5XHU1MzUzXHU2ODRjXHU3NDIyXHU4MzAxXHU5MTRjXHU1NTQ0XHU3NzQwXHU3MDdjXHU2ZDRhXHU1MTc5XHU1NGE4XHU4ZDQ0XHU1OWZmXHU2ZWNiXHU2ZGM0XHU1YjVjXHU3''@;'; put 'put ''ZDJiXHU0ZWQ0XHU3YzdkXHU2ZWQzXHU1YjUwXHU4MWVhXHU2ZTBkXHU1YjU3XHU5YjAzXHU2OGQ1XHU4ZTJhXHU1Yjk3XHU3ZWZjXHU2MDNiXHU3ZWI1XHU5MGI5XHU4ZDcwXHU1OTRmXHU2M2NkXHU3OWRmXHU4ZGIzXHU1MzUyXHU2NWNmXHU3OTU2XHU4YmM1XHU5NjNiXHU3ZWM0XHU5NGJi''@;'; put 'put ''XHU3ZTgyXHU1NjM0XHU5MTg5XHU2NzAwXHU3ZjZhXHU1YzBhXHU5MDc1XHU2NjI4XHU1ZGU2XHU0ZjUwXHU2N2RlXHU1MDVhXHU0ZjVjXHU1NzUwXHU1ZWE3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjE1XS5sZW5ndGg7KytwKTY1''@;'; put 'put ''NTMzIT09X1syMTVdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjE1XVtwXV09NTUwNDArcCxiWzU1MDQwK3BdPV9bMjE1XVtwXSk7Zm9yKF9bMjE2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YzM4XHU4YzM5XHU4YzNhXHU4YzNi''@;'; put 'put ''XHU4YzNjXHU4YzNkXHU4YzNlXHU4YzNmXHU4YzQwXHU4YzQyXHU4YzQzXHU4YzQ0XHU4YzQ1XHU4YzQ4XHU4YzRhXHU4YzRiXHU4YzRkXHU4YzRlXHU4YzRmXHU4YzUwXHU4YzUxXHU4YzUyXHU4YzUzXHU4YzU0XHU4YzU2XHU4YzU3XHU4YzU4XHU4YzU5XHU4YzViXHU4YzVjXHU4YzVkXHU4''@;'; put 'put ''YzVlXHU4YzVmXHU4YzYwXHU4YzYzXHU4YzY0XHU4YzY1XHU4YzY2XHU4YzY3XHU4YzY4XHU4YzY5XHU4YzZjXHU4YzZkXHU4YzZlXHU4YzZmXHU4YzcwXHU4YzcxXHU4YzcyXHU4Yzc0XHU4Yzc1XHU4Yzc2XHU4Yzc3XHU4YzdiXHU4YzdjXHU4YzdkXHU4YzdlXHU4YzdmXHU4YzgwXHU4Yzgx''@;'; put 'put ''XHU4YzgzXHU4Yzg0XHU4Yzg2XHU4Yzg3XHVmZmZkXHU4Yzg4XHU4YzhiXHU4YzhkXHU4YzhlXHU4YzhmXHU4YzkwXHU4YzkxXHU4YzkyXHU4YzkzXHU4Yzk1XHU4Yzk2XHU4Yzk3XHU4Yzk5XHU4YzlhXHU4YzliXHU4YzljXHU4YzlkXHU4YzllXHU4YzlmXHU4Y2EwXHU4Y2ExXHU4Y2EyXHU4''@;'; put 'put ''Y2EzXHU4Y2E0XHU4Y2E1XHU4Y2E2XHU4Y2E3XHU4Y2E4XHU4Y2E5XHU4Y2FhXHU4Y2FiXHU4Y2FjXHU4Y2FkXHU0ZThkXHU0ZTBjXHU1MTQwXHU0ZTEwXHU1ZWZmXHU1MzQ1XHU0ZTE1XHU0ZTk4XHU0ZTFlXHU5YjMyXHU1YjZjXHU1NjY5XHU0ZTI4XHU3OWJhXHU0ZTNmXHU1MzE1XHU0ZTQ3''@;'; put 'put ''XHU1OTJkXHU3MjNiXHU1MzZlXHU2YzEwXHU1NmRmXHU4MGU0XHU5OTk3XHU2YmQzXHU3NzdlXHU5ZjE3XHU0ZTM2XHU0ZTlmXHU5ZjEwXHU0ZTVjXHU0ZTY5XHU0ZTkzXHU4Mjg4XHU1YjViXHU1NTZjXHU1NjBmXHU0ZWM0XHU1MzhkXHU1MzlkXHU1M2EzXHU1M2E1XHU1M2FlXHU5NzY1XHU4''@;'; put 'put ''ZDVkXHU1MzFhXHU1M2Y1XHU1MzI2XHU1MzJlXHU1MzNlXHU4ZDVjXHU1MzY2XHU1MzYzXHU1MjAyXHU1MjA4XHU1MjBlXHU1MjJkXHU1MjMzXHU1MjNmXHU1MjQwXHU1MjRjXHU1MjVlXHU1MjYxXHU1MjVjXHU4NGFmXHU1MjdkXHU1MjgyXHU1MjgxXHU1MjkwXHU1MjkzXHU1MTgyXHU3ZjU0''@;'; put 'put ''XHU0ZWJiXHU0ZWMzXHU0ZWM5XHU0ZWMyXHU0ZWU4XHU0ZWUxXHU0ZWViXHU0ZWRlXHU0ZjFiXHU0ZWYzXHU0ZjIyXHU0ZjY0XHU0ZWY1XHU0ZjI1XHU0ZjI3XHU0ZjA5XHU0ZjJiXHU0ZjVlXHU0ZjY3XHU2NTM4XHU0ZjVhXHU0ZjVkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjE2XS5s''@;'; put 'put ''ZW5ndGg7KytwKTY1NTMzIT09X1syMTZdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjE2XVtwXV09NTUyOTYrcCxiWzU1Mjk2K3BdPV9bMjE2XVtwXSk7Zm9yKF9bMjE3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4Y2FlXHU4Y2Fm''@;'; put 'put ''XHU4Y2IwXHU4Y2IxXHU4Y2IyXHU4Y2IzXHU4Y2I0XHU4Y2I1XHU4Y2I2XHU4Y2I3XHU4Y2I4XHU4Y2I5XHU4Y2JhXHU4Y2JiXHU4Y2JjXHU4Y2JkXHU4Y2JlXHU4Y2JmXHU4Y2MwXHU4Y2MxXHU4Y2MyXHU4Y2MzXHU4Y2M0XHU4Y2M1XHU4Y2M2XHU4Y2M3XHU4Y2M4XHU4Y2M5XHU4Y2NhXHU4''@;'; put 'put ''Y2NiXHU4Y2NjXHU4Y2NkXHU4Y2NlXHU4Y2NmXHU4Y2QwXHU4Y2QxXHU4Y2QyXHU4Y2QzXHU4Y2Q0XHU4Y2Q1XHU4Y2Q2XHU4Y2Q3XHU4Y2Q4XHU4Y2Q5XHU4Y2RhXHU4Y2RiXHU4Y2RjXHU4Y2RkXHU4Y2RlXHU4Y2RmXHU4Y2UwXHU4Y2UxXHU4Y2UyXHU4Y2UzXHU4Y2U0XHU4Y2U1XHU4Y2U2''@;'; put 'put ''XHU4Y2U3XHU4Y2U4XHU4Y2U5XHU4Y2VhXHU4Y2ViXHU4Y2VjXHVmZmZkXHU4Y2VkXHU4Y2VlXHU4Y2VmXHU4Y2YwXHU4Y2YxXHU4Y2YyXHU4Y2YzXHU4Y2Y0XHU4Y2Y1XHU4Y2Y2XHU4Y2Y3XHU4Y2Y4XHU4Y2Y5XHU4Y2ZhXHU4Y2ZiXHU4Y2ZjXHU4Y2ZkXHU4Y2ZlXHU4Y2ZmXHU4ZDAwXHU4''@;'; put 'put ''ZDAxXHU4ZDAyXHU4ZDAzXHU4ZDA0XHU4ZDA1XHU4ZDA2XHU4ZDA3XHU4ZDA4XHU4ZDA5XHU4ZDBhXHU4ZDBiXHU4ZDBjXHU4ZDBkXHU0ZjVmXHU0ZjU3XHU0ZjMyXHU0ZjNkXHU0Zjc2XHU0Zjc0XHU0ZjkxXHU0Zjg5XHU0ZjgzXHU0ZjhmXHU0ZjdlXHU0ZjdiXHU0ZmFhXHU0ZjdjXHU0ZmFj''@;'; put 'put ''XHU0Zjk0XHU0ZmU2XHU0ZmU4XHU0ZmVhXHU0ZmM1XHU0ZmRhXHU0ZmUzXHU0ZmRjXHU0ZmQxXHU0ZmRmXHU0ZmY4XHU1MDI5XHU1MDRjXHU0ZmYzXHU1MDJjXHU1MDBmXHU1MDJlXHU1MDJkXHU0ZmZlXHU1MDFjXHU1MDBjXHU1MDI1XHU1MDI4XHU1MDdlXHU1MDQzXHU1MDU1XHU1MDQ4XHU1''@;'; put 'put ''MDRlXHU1MDZjXHU1MDdiXHU1MGE1XHU1MGE3XHU1MGE5XHU1MGJhXHU1MGQ2XHU1MTA2XHU1MGVkXHU1MGVjXHU1MGU2XHU1MGVlXHU1MTA3XHU1MTBiXHU0ZWRkXHU2YzNkXHU0ZjU4XHU0ZjY1XHU0ZmNlXHU5ZmEwXHU2YzQ2XHU3Yzc0XHU1MTZlXHU1ZGZkXHU5ZWM5XHU5OTk4XHU1MTgx''@;'; put 'put ''XHU1OTE0XHU1MmY5XHU1MzBkXHU4YTA3XHU1MzEwXHU1MWViXHU1OTE5XHU1MTU1XHU0ZWEwXHU1MTU2XHU0ZWIzXHU4ODZlXHU4OGE0XHU0ZWI1XHU4MTE0XHU4OGQyXHU3OTgwXHU1YjM0XHU4ODAzXHU3ZmI4XHU1MWFiXHU1MWIxXHU1MWJkXHU1MWJjXHVmZmZkIi5zcGxpdCgiIikscD0w''@;'; put 'put ''O3AhPV9bMjE3XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTddW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjE3XVtwXV09NTU1NTIrcCxiWzU1NTUyK3BdPV9bMjE3XVtwXSk7Zm9yKF9bMjE4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHU4ZDBlXHU4ZDBmXHU4ZDEwXHU4ZDExXHU4ZDEyXHU4ZDEzXHU4ZDE0XHU4ZDE1XHU4ZDE2XHU4ZDE3XHU4ZDE4XHU4ZDE5XHU4ZDFhXHU4ZDFiXHU4ZDFjXHU4ZDIwXHU4ZDUxXHU4ZDUyXHU4ZDU3XHU4ZDVmXHU4ZDY1XHU4ZDY4XHU4ZDY5XHU4ZDZhXHU4ZDZjXHU4ZDZlXHU4ZDZmXHU4''@;'; put 'put ''ZDcxXHU4ZDcyXHU4ZDc4XHU4ZDc5XHU4ZDdhXHU4ZDdiXHU4ZDdjXHU4ZDdkXHU4ZDdlXHU4ZDdmXHU4ZDgwXHU4ZDgyXHU4ZDgzXHU4ZDg2XHU4ZDg3XHU4ZDg4XHU4ZDg5XHU4ZDhjXHU4ZDhkXHU4ZDhlXHU4ZDhmXHU4ZDkwXHU4ZDkyXHU4ZDkzXHU4ZDk1XHU4ZDk2XHU4ZDk3XHU4ZDk4''@;'; put 'put ''XHU4ZDk5XHU4ZDlhXHU4ZDliXHU4ZDljXHU4ZDlkXHU4ZDllXHU4ZGEwXHU4ZGExXHVmZmZkXHU4ZGEyXHU4ZGE0XHU4ZGE1XHU4ZGE2XHU4ZGE3XHU4ZGE4XHU4ZGE5XHU4ZGFhXHU4ZGFiXHU4ZGFjXHU4ZGFkXHU4ZGFlXHU4ZGFmXHU4ZGIwXHU4ZGIyXHU4ZGI2XHU4ZGI3XHU4ZGI5XHU4''@;'; put 'put ''ZGJiXHU4ZGJkXHU4ZGMwXHU4ZGMxXHU4ZGMyXHU4ZGM1XHU4ZGM3XHU4ZGM4XHU4ZGM5XHU4ZGNhXHU4ZGNkXHU4ZGQwXHU4ZGQyXHU4ZGQzXHU4ZGQ0XHU1MWM3XHU1MTk2XHU1MWEyXHU1MWE1XHU4YmEwXHU4YmE2XHU4YmE3XHU4YmFhXHU4YmI0XHU4YmI1XHU4YmI3XHU4YmMyXHU4YmMz''@;'; put 'put ''XHU4YmNiXHU4YmNmXHU4YmNlXHU4YmQyXHU4YmQzXHU4YmQ0XHU4YmQ2XHU4YmQ4XHU4YmQ5XHU4YmRjXHU4YmRmXHU4YmUwXHU4YmU0XHU4YmU4XHU4YmU5XHU4YmVlXHU4YmYwXHU4YmYzXHU4YmY2XHU4YmY5XHU4YmZjXHU4YmZmXHU4YzAwXHU4YzAyXHU4YzA0XHU4YzA3XHU4YzBjXHU4''@;'; put 'put ''YzBmXHU4YzExXHU4YzEyXHU4YzE0XHU4YzE1XHU4YzE2XHU4YzE5XHU4YzFiXHU4YzE4XHU4YzFkXHU4YzFmXHU4YzIwXHU4YzIxXHU4YzI1XHU4YzI3XHU4YzJhXHU4YzJiXHU4YzJlXHU4YzJmXHU4YzMyXHU4YzMzXHU4YzM1XHU4YzM2XHU1MzY5XHU1MzdhXHU5NjFkXHU5NjIyXHU5NjIx''@;'; put 'put ''XHU5NjMxXHU5NjJhXHU5NjNkXHU5NjNjXHU5NjQyXHU5NjQ5XHU5NjU0XHU5NjVmXHU5NjY3XHU5NjZjXHU5NjcyXHU5Njc0XHU5Njg4XHU5NjhkXHU5Njk3XHU5NmIwXHU5MDk3XHU5MDliXHU5MDlkXHU5MDk5XHU5MGFjXHU5MGExXHU5MGI0XHU5MGIzXHU5MGI2XHU5MGJhXHVmZmZkIi5z''@;'; put 'put ''cGxpdCgiIikscD0wO3AhPV9bMjE4XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMThdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjE4XVtwXV09NTU4MDgrcCxiWzU1ODA4K3BdPV9bMjE4XVtwXSk7Zm9yKF9bMjE5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHU4ZGQ1XHU4ZGQ4XHU4ZGQ5XHU4ZGRjXHU4ZGUwXHU4ZGUxXHU4ZGUyXHU4ZGU1XHU4ZGU2XHU4ZGU3XHU4ZGU5XHU4ZGVkXHU4ZGVlXHU4ZGYwXHU4ZGYxXHU4ZGYyXHU4ZGY0XHU4ZGY2XHU4ZGZjXHU4ZGZlXHU4ZGZmXHU4ZTAwXHU4ZTAxXHU4ZTAyXHU4ZTAzXHU4''@;'; put 'put ''ZTA0XHU4ZTA2XHU4ZTA3XHU4ZTA4XHU4ZTBiXHU4ZTBkXHU4ZTBlXHU4ZTEwXHU4ZTExXHU4ZTEyXHU4ZTEzXHU4ZTE1XHU4ZTE2XHU4ZTE3XHU4ZTE4XHU4ZTE5XHU4ZTFhXHU4ZTFiXHU4ZTFjXHU4ZTIwXHU4ZTIxXHU4ZTI0XHU4ZTI1XHU4ZTI2XHU4ZTI3XHU4ZTI4XHU4ZTJiXHU4ZTJk''@;'; put 'put ''XHU4ZTMwXHU4ZTMyXHU4ZTMzXHU4ZTM0XHU4ZTM2XHU4ZTM3XHU4ZTM4XHU4ZTNiXHU4ZTNjXHU4ZTNlXHVmZmZkXHU4ZTNmXHU4ZTQzXHU4ZTQ1XHU4ZTQ2XHU4ZTRjXHU4ZTRkXHU4ZTRlXHU4ZTRmXHU4ZTUwXHU4ZTUzXHU4ZTU0XHU4ZTU1XHU4ZTU2XHU4ZTU3XHU4ZTU4XHU4ZTVhXHU4''@;'; put 'put ''ZTViXHU4ZTVjXHU4ZTVkXHU4ZTVlXHU4ZTVmXHU4ZTYwXHU4ZTYxXHU4ZTYyXHU4ZTYzXHU4ZTY0XHU4ZTY1XHU4ZTY3XHU4ZTY4XHU4ZTZhXHU4ZTZiXHU4ZTZlXHU4ZTcxXHU5MGI4XHU5MGIwXHU5MGNmXHU5MGM1XHU5MGJlXHU5MGQwXHU5MGM0XHU5MGM3XHU5MGQzXHU5MGU2XHU5MGUy''@;'; put 'put ''XHU5MGRjXHU5MGQ3XHU5MGRiXHU5MGViXHU5MGVmXHU5MGZlXHU5MTA0XHU5MTIyXHU5MTFlXHU5MTIzXHU5MTMxXHU5MTJmXHU5MTM5XHU5MTQzXHU5MTQ2XHU1MjBkXHU1OTQyXHU1MmEyXHU1MmFjXHU1MmFkXHU1MmJlXHU1NGZmXHU1MmQwXHU1MmQ2XHU1MmYwXHU1M2RmXHU3MWVlXHU3''@;'; put 'put ''N2NkXHU1ZWY0XHU1MWY1XHU1MWZjXHU5YjJmXHU1M2I2XHU1ZjAxXHU3NTVhXHU1ZGVmXHU1NzRjXHU1N2E5XHU1N2ExXHU1ODdlXHU1OGJjXHU1OGM1XHU1OGQxXHU1NzI5XHU1NzJjXHU1NzJhXHU1NzMzXHU1NzM5XHU1NzJlXHU1NzJmXHU1NzVjXHU1NzNiXHU1NzQyXHU1NzY5XHU1Nzg1''@;'; put 'put ''XHU1NzZiXHU1Nzg2XHU1NzdjXHU1NzdiXHU1NzY4XHU1NzZkXHU1Nzc2XHU1NzczXHU1N2FkXHU1N2E0XHU1NzhjXHU1N2IyXHU1N2NmXHU1N2E3XHU1N2I0XHU1NzkzXHU1N2EwXHU1N2Q1XHU1N2Q4XHU1N2RhXHU1N2Q5XHU1N2QyXHU1N2I4XHU1N2Y0XHU1N2VmXHU1N2Y4XHU1N2U0XHU1''@;'; put 'put ''N2RkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjE5XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTldW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjE5XVtwXV09NTYwNjQrcCxiWzU2MDY0K3BdPV9bMjE5XVtwXSk7Zm9yKF9bMjIwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZTczXHU4ZTc1XHU4ZTc3XHU4ZTc4XHU4ZTc5XHU4ZTdhXHU4ZTdiXHU4ZTdkXHU4ZTdlXHU4ZTgwXHU4ZTgyXHU4ZTgzXHU4ZTg0XHU4ZTg2XHU4ZTg4XHU4ZTg5XHU4ZThhXHU4ZThiXHU4ZThjXHU4ZThkXHU4ZThlXHU4ZTkxXHU4ZTkyXHU4''@;'; put 'put ''ZTkzXHU4ZTk1XHU4ZTk2XHU4ZTk3XHU4ZTk4XHU4ZTk5XHU4ZTlhXHU4ZTliXHU4ZTlkXHU4ZTlmXHU4ZWEwXHU4ZWExXHU4ZWEyXHU4ZWEzXHU4ZWE0XHU4ZWE1XHU4ZWE2XHU4ZWE3XHU4ZWE4XHU4ZWE5XHU4ZWFhXHU4ZWFkXHU4ZWFlXHU4ZWIwXHU4ZWIxXHU4ZWIzXHU4ZWI0XHU4ZWI1''@;'; put 'put ''XHU4ZWI2XHU4ZWI3XHU4ZWI4XHU4ZWI5XHU4ZWJiXHU4ZWJjXHU4ZWJkXHU4ZWJlXHU4ZWJmXHU4ZWMwXHU4ZWMxXHU4ZWMyXHVmZmZkXHU4ZWMzXHU4ZWM0XHU4ZWM1XHU4ZWM2XHU4ZWM3XHU4ZWM4XHU4ZWM5XHU4ZWNhXHU4ZWNiXHU4ZWNjXHU4ZWNkXHU4ZWNmXHU4ZWQwXHU4ZWQxXHU4''@;'; put 'put ''ZWQyXHU4ZWQzXHU4ZWQ0XHU4ZWQ1XHU4ZWQ2XHU4ZWQ3XHU4ZWQ4XHU4ZWQ5XHU4ZWRhXHU4ZWRiXHU4ZWRjXHU4ZWRkXHU4ZWRlXHU4ZWRmXHU4ZWUwXHU4ZWUxXHU4ZWUyXHU4ZWUzXHU4ZWU0XHU1ODBiXHU1ODBkXHU1N2ZkXHU1N2VkXHU1ODAwXHU1ODFlXHU1ODE5XHU1ODQ0XHU1ODIw''@;'; put 'put ''XHU1ODY1XHU1ODZjXHU1ODgxXHU1ODg5XHU1ODlhXHU1ODgwXHU5OWE4XHU5ZjE5XHU2MWZmXHU4Mjc5XHU4MjdkXHU4MjdmXHU4MjhmXHU4MjhhXHU4MmE4XHU4Mjg0XHU4MjhlXHU4MjkxXHU4Mjk3XHU4Mjk5XHU4MmFiXHU4MmI4XHU4MmJlXHU4MmIwXHU4MmM4XHU4MmNhXHU4MmUzXHU4''@;'; put 'put ''Mjk4XHU4MmI3XHU4MmFlXHU4MmNiXHU4MmNjXHU4MmMxXHU4MmE5XHU4MmI0XHU4MmExXHU4MmFhXHU4MjlmXHU4MmM0XHU4MmNlXHU4MmE0XHU4MmUxXHU4MzA5XHU4MmY3XHU4MmU0XHU4MzBmXHU4MzA3XHU4MmRjXHU4MmY0XHU4MmQyXHU4MmQ4XHU4MzBjXHU4MmZiXHU4MmQzXHU4MzEx''@;'; put 'put ''XHU4MzFhXHU4MzA2XHU4MzE0XHU4MzE1XHU4MmUwXHU4MmQ1XHU4MzFjXHU4MzUxXHU4MzViXHU4MzVjXHU4MzA4XHU4MzkyXHU4MzNjXHU4MzM0XHU4MzMxXHU4MzliXHU4MzVlXHU4MzJmXHU4MzRmXHU4MzQ3XHU4MzQzXHU4MzVmXHU4MzQwXHU4MzE3XHU4MzYwXHU4MzJkXHU4MzNhXHU4''@;'; put 'put ''MzMzXHU4MzY2XHU4MzY1XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjIwXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjBdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjIwXVtwXV09NTYzMjArcCxiWzU2MzIwK3BdPV9bMjIwXVtwXSk7Zm9yKF9bMjIxXT0iXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZWU1XHU4ZWU2XHU4ZWU3XHU4ZWU4XHU4ZWU5XHU4ZWVhXHU4ZWViXHU4ZWVjXHU4ZWVkXHU4ZWVlXHU4ZWVmXHU4ZWYwXHU4ZWYxXHU4ZWYyXHU4ZWYzXHU4ZWY0XHU4ZWY1XHU4ZWY2XHU4ZWY3XHU4ZWY4XHU4ZWY5XHU4''@;'; put 'put ''ZWZhXHU4ZWZiXHU4ZWZjXHU4ZWZkXHU4ZWZlXHU4ZWZmXHU4ZjAwXHU4ZjAxXHU4ZjAyXHU4ZjAzXHU4ZjA0XHU4ZjA1XHU4ZjA2XHU4ZjA3XHU4ZjA4XHU4ZjA5XHU4ZjBhXHU4ZjBiXHU4ZjBjXHU4ZjBkXHU4ZjBlXHU4ZjBmXHU4ZjEwXHU4ZjExXHU4ZjEyXHU4ZjEzXHU4ZjE0XHU4ZjE1''@;'; put 'put ''XHU4ZjE2XHU4ZjE3XHU4ZjE4XHU4ZjE5XHU4ZjFhXHU4ZjFiXHU4ZjFjXHU4ZjFkXHU4ZjFlXHU4ZjFmXHU4ZjIwXHU4ZjIxXHU4ZjIyXHU4ZjIzXHVmZmZkXHU4ZjI0XHU4ZjI1XHU4ZjI2XHU4ZjI3XHU4ZjI4XHU4ZjI5XHU4ZjJhXHU4ZjJiXHU4ZjJjXHU4ZjJkXHU4ZjJlXHU4ZjJmXHU4''@;'; put 'put ''ZjMwXHU4ZjMxXHU4ZjMyXHU4ZjMzXHU4ZjM0XHU4ZjM1XHU4ZjM2XHU4ZjM3XHU4ZjM4XHU4ZjM5XHU4ZjNhXHU4ZjNiXHU4ZjNjXHU4ZjNkXHU4ZjNlXHU4ZjNmXHU4ZjQwXHU4ZjQxXHU4ZjQyXHU4ZjQzXHU4ZjQ0XHU4MzY4XHU4MzFiXHU4MzY5XHU4MzZjXHU4MzZhXHU4MzZkXHU4MzZl''@;'; put 'put ''XHU4M2IwXHU4Mzc4XHU4M2IzXHU4M2I0XHU4M2EwXHU4M2FhXHU4MzkzXHU4MzljXHU4Mzg1XHU4MzdjXHU4M2I2XHU4M2E5XHU4MzdkXHU4M2I4XHU4MzdiXHU4Mzk4XHU4MzllXHU4M2E4XHU4M2JhXHU4M2JjXHU4M2MxXHU4NDAxXHU4M2U1XHU4M2Q4XHU1ODA3XHU4NDE4XHU4NDBiXHU4''@;'; put 'put ''M2RkXHU4M2ZkXHU4M2Q2XHU4NDFjXHU4NDM4XHU4NDExXHU4NDA2XHU4M2Q0XHU4M2RmXHU4NDBmXHU4NDAzXHU4M2Y4XHU4M2Y5XHU4M2VhXHU4M2M1XHU4M2MwXHU4NDI2XHU4M2YwXHU4M2UxXHU4NDVjXHU4NDUxXHU4NDVhXHU4NDU5XHU4NDczXHU4NDg3XHU4NDg4XHU4NDdhXHU4NDg5''@;'; put 'put ''XHU4NDc4XHU4NDNjXHU4NDQ2XHU4NDY5XHU4NDc2XHU4NDhjXHU4NDhlXHU4NDMxXHU4NDZkXHU4NGMxXHU4NGNkXHU4NGQwXHU4NGU2XHU4NGJkXHU4NGQzXHU4NGNhXHU4NGJmXHU4NGJhXHU4NGUwXHU4NGExXHU4NGI5XHU4NGI0XHU4NDk3XHU4NGU1XHU4NGUzXHU4NTBjXHU3NTBkXHU4''@;'; put 'put ''NTM4XHU4NGYwXHU4NTM5XHU4NTFmXHU4NTNhXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjIxXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjFdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjIxXVtwXV09NTY1NzYrcCxiWzU2NTc2K3BdPV9bMjIxXVtwXSk7Zm9yKF9bMjIyXT0iXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZjQ1XHU4ZjQ2XHU4ZjQ3XHU4ZjQ4XHU4ZjQ5XHU4ZjRhXHU4ZjRiXHU4ZjRjXHU4ZjRkXHU4ZjRlXHU4ZjRmXHU4ZjUwXHU4ZjUxXHU4ZjUyXHU4ZjUzXHU4ZjU0XHU4ZjU1XHU4ZjU2XHU4ZjU3XHU4''@;'; put 'put ''ZjU4XHU4ZjU5XHU4ZjVhXHU4ZjViXHU4ZjVjXHU4ZjVkXHU4ZjVlXHU4ZjVmXHU4ZjYwXHU4ZjYxXHU4ZjYyXHU4ZjYzXHU4ZjY0XHU4ZjY1XHU4ZjZhXHU4ZjgwXHU4ZjhjXHU4ZjkyXHU4ZjlkXHU4ZmEwXHU4ZmExXHU4ZmEyXHU4ZmE0XHU4ZmE1XHU4ZmE2XHU4ZmE3XHU4ZmFhXHU4ZmFj''@;'; put 'put ''XHU4ZmFkXHU4ZmFlXHU4ZmFmXHU4ZmIyXHU4ZmIzXHU4ZmI0XHU4ZmI1XHU4ZmI3XHU4ZmI4XHU4ZmJhXHU4ZmJiXHU4ZmJjXHU4ZmJmXHU4ZmMwXHU4ZmMzXHU4ZmM2XHVmZmZkXHU4ZmM5XHU4ZmNhXHU4ZmNiXHU4ZmNjXHU4ZmNkXHU4ZmNmXHU4ZmQyXHU4ZmQ2XHU4ZmQ3XHU4ZmRhXHU4''@;'; put 'put ''ZmUwXHU4ZmUxXHU4ZmUzXHU4ZmU3XHU4ZmVjXHU4ZmVmXHU4ZmYxXHU4ZmYyXHU4ZmY0XHU4ZmY1XHU4ZmY2XHU4ZmZhXHU4ZmZiXHU4ZmZjXHU4ZmZlXHU4ZmZmXHU5MDA3XHU5MDA4XHU5MDBjXHU5MDBlXHU5MDEzXHU5MDE1XHU5MDE4XHU4NTU2XHU4NTNiXHU4NGZmXHU4NGZjXHU4NTU5''@;'; put 'put ''XHU4NTQ4XHU4NTY4XHU4NTY0XHU4NTVlXHU4NTdhXHU3N2EyXHU4NTQzXHU4NTcyXHU4NTdiXHU4NWE0XHU4NWE4XHU4NTg3XHU4NThmXHU4NTc5XHU4NWFlXHU4NTljXHU4NTg1XHU4NWI5XHU4NWI3XHU4NWIwXHU4NWQzXHU4NWMxXHU4NWRjXHU4NWZmXHU4NjI3XHU4NjA1XHU4NjI5XHU4''@;'; put 'put ''NjE2XHU4NjNjXHU1ZWZlXHU1ZjA4XHU1OTNjXHU1OTQxXHU4MDM3XHU1OTU1XHU1OTVhXHU1OTU4XHU1MzBmXHU1YzIyXHU1YzI1XHU1YzJjXHU1YzM0XHU2MjRjXHU2MjZhXHU2MjlmXHU2MmJiXHU2MmNhXHU2MmRhXHU2MmQ3XHU2MmVlXHU2MzIyXHU2MmY2XHU2MzM5XHU2MzRiXHU2MzQz''@;'; put 'put ''XHU2M2FkXHU2M2Y2XHU2MzcxXHU2MzdhXHU2MzhlXHU2M2I0XHU2MzZkXHU2M2FjXHU2MzhhXHU2MzY5XHU2M2FlXHU2M2JjXHU2M2YyXHU2M2Y4XHU2M2UwXHU2M2ZmXHU2M2M0XHU2M2RlXHU2M2NlXHU2NDUyXHU2M2M2XHU2M2JlXHU2NDQ1XHU2NDQxXHU2NDBiXHU2NDFiXHU2NDIwXHU2''@;'; put 'put ''NDBjXHU2NDI2XHU2NDIxXHU2NDVlXHU2NDg0XHU2NDZkXHU2NDk2XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjIyXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjJdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjIyXVtwXV09NTY4MzIrcCxiWzU2ODMyK3BdPV9bMjIyXVtwXSk7Zm9yKF9b''@;'; put 'put ''MjIzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MDE5XHU5MDFjXHU5MDIzXHU5MDI0XHU5MDI1XHU5MDI3XHU5MDI4XHU5MDI5XHU5MDJhXHU5MDJiXHU5MDJjXHU5MDMwXHU5MDMxXHU5MDMyXHU5MDMzXHU5MDM0XHU5MDM3XHU5''@;'; put 'put ''MDM5XHU5MDNhXHU5MDNkXHU5MDNmXHU5MDQwXHU5MDQzXHU5MDQ1XHU5MDQ2XHU5MDQ4XHU5MDQ5XHU5MDRhXHU5MDRiXHU5MDRjXHU5MDRlXHU5MDU0XHU5MDU1XHU5MDU2XHU5MDU5XHU5MDVhXHU5MDVjXHU5MDVkXHU5MDVlXHU5MDVmXHU5MDYwXHU5MDYxXHU5MDY0XHU5MDY2XHU5MDY3''@;'; put 'put ''XHU5MDY5XHU5MDZhXHU5MDZiXHU5MDZjXHU5MDZmXHU5MDcwXHU5MDcxXHU5MDcyXHU5MDczXHU5MDc2XHU5MDc3XHU5MDc4XHU5MDc5XHU5MDdhXHU5MDdiXHU5MDdjXHU5MDdlXHU5MDgxXHVmZmZkXHU5MDg0XHU5MDg1XHU5MDg2XHU5MDg3XHU5MDg5XHU5MDhhXHU5MDhjXHU5MDhkXHU5''@;'; put 'put ''MDhlXHU5MDhmXHU5MDkwXHU5MDkyXHU5MDk0XHU5MDk2XHU5MDk4XHU5MDlhXHU5MDljXHU5MDllXHU5MDlmXHU5MGEwXHU5MGE0XHU5MGE1XHU5MGE3XHU5MGE4XHU5MGE5XHU5MGFiXHU5MGFkXHU5MGIyXHU5MGI3XHU5MGJjXHU5MGJkXHU5MGJmXHU5MGMwXHU2NDdhXHU2NGI3XHU2NGI4''@;'; put 'put ''XHU2NDk5XHU2NGJhXHU2NGMwXHU2NGQwXHU2NGQ3XHU2NGU0XHU2NGUyXHU2NTA5XHU2NTI1XHU2NTJlXHU1ZjBiXHU1ZmQyXHU3NTE5XHU1ZjExXHU1MzVmXHU1M2YxXHU1M2ZkXHU1M2U5XHU1M2U4XHU1M2ZiXHU1NDEyXHU1NDE2XHU1NDA2XHU1NDRiXHU1NDUyXHU1NDUzXHU1NDU0XHU1''@;'; put 'put ''NDU2XHU1NDQzXHU1NDIxXHU1NDU3XHU1NDU5XHU1NDIzXHU1NDMyXHU1NDgyXHU1NDk0XHU1NDc3XHU1NDcxXHU1NDY0XHU1NDlhXHU1NDliXHU1NDg0XHU1NDc2XHU1NDY2XHU1NDlkXHU1NGQwXHU1NGFkXHU1NGMyXHU1NGI0XHU1NGQyXHU1NGE3XHU1NGE2XHU1NGQzXHU1NGQ0XHU1NDcy''@;'; put 'put ''XHU1NGEzXHU1NGQ1XHU1NGJiXHU1NGJmXHU1NGNjXHU1NGQ5XHU1NGRhXHU1NGRjXHU1NGE5XHU1NGFhXHU1NGE0XHU1NGRkXHU1NGNmXHU1NGRlXHU1NTFiXHU1NGU3XHU1NTIwXHU1NGZkXHU1NTE0XHU1NGYzXHU1NTIyXHU1NTIzXHU1NTBmXHU1NTExXHU1NTI3XHU1NTJhXHU1NTY3XHU1''@;'; put 'put ''NThmXHU1NWI1XHU1NTQ5XHU1NTZkXHU1NTQxXHU1NTU1XHU1NTNmXHU1NTUwXHU1NTNjXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjIzXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjNdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjIzXVtwXV09NTcwODgrcCxiWzU3MDg4K3BdPV9bMjIz''@;'; put 'put ''XVtwXSk7Zm9yKF9bMjI0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MGMyXHU5MGMzXHU5MGM2XHU5MGM4XHU5MGM5XHU5MGNiXHU5MGNjXHU5MGNkXHU5MGQyXHU5MGQ0XHU5MGQ1XHU5MGQ2XHU5MGQ4XHU5MGQ5XHU5MGRhXHU5''@;'; put 'put ''MGRlXHU5MGRmXHU5MGUwXHU5MGUzXHU5MGU0XHU5MGU1XHU5MGU5XHU5MGVhXHU5MGVjXHU5MGVlXHU5MGYwXHU5MGYxXHU5MGYyXHU5MGYzXHU5MGY1XHU5MGY2XHU5MGY3XHU5MGY5XHU5MGZhXHU5MGZiXHU5MGZjXHU5MGZmXHU5MTAwXHU5MTAxXHU5MTAzXHU5MTA1XHU5MTA2XHU5MTA3''@;'; put 'put ''XHU5MTA4XHU5MTA5XHU5MTBhXHU5MTBiXHU5MTBjXHU5MTBkXHU5MTBlXHU5MTBmXHU5MTEwXHU5MTExXHU5MTEyXHU5MTEzXHU5MTE0XHU5MTE1XHU5MTE2XHU5MTE3XHU5MTE4XHU5MTFhXHU5MTFiXHU5MTFjXHVmZmZkXHU5MTFkXHU5MTFmXHU5MTIwXHU5MTIxXHU5MTI0XHU5MTI1XHU5''@;'; put 'put ''MTI2XHU5MTI3XHU5MTI4XHU5MTI5XHU5MTJhXHU5MTJiXHU5MTJjXHU5MTJkXHU5MTJlXHU5MTMwXHU5MTMyXHU5MTMzXHU5MTM0XHU5MTM1XHU5MTM2XHU5MTM3XHU5MTM4XHU5MTNhXHU5MTNiXHU5MTNjXHU5MTNkXHU5MTNlXHU5MTNmXHU5MTQwXHU5MTQxXHU5MTQyXHU5MTQ0XHU1NTM3''@;'; put 'put ''XHU1NTU2XHU1NTc1XHU1NTc2XHU1NTc3XHU1NTMzXHU1NTMwXHU1NTVjXHU1NThiXHU1NWQyXHU1NTgzXHU1NWIxXHU1NWI5XHU1NTg4XHU1NTgxXHU1NTlmXHU1NTdlXHU1NWQ2XHU1NTkxXHU1NTdiXHU1NWRmXHU1NWJkXHU1NWJlXHU1NTk0XHU1NTk5XHU1NWVhXHU1NWY3XHU1NWM5XHU1''@;'; put 'put ''NjFmXHU1NWQxXHU1NWViXHU1NWVjXHU1NWQ0XHU1NWU2XHU1NWRkXHU1NWM0XHU1NWVmXHU1NWU1XHU1NWYyXHU1NWYzXHU1NWNjXHU1NWNkXHU1NWU4XHU1NWY1XHU1NWU0XHU4Zjk0XHU1NjFlXHU1NjA4XHU1NjBjXHU1NjAxXHU1NjI0XHU1NjIzXHU1NWZlXHU1NjAwXHU1NjI3XHU1NjJk''@;'; put 'put ''XHU1NjU4XHU1NjM5XHU1NjU3XHU1NjJjXHU1NjRkXHU1NjYyXHU1NjU5XHU1NjVjXHU1NjRjXHU1NjU0XHU1Njg2XHU1NjY0XHU1NjcxXHU1NjZiXHU1NjdiXHU1NjdjXHU1Njg1XHU1NjkzXHU1NmFmXHU1NmQ0XHU1NmQ3XHU1NmRkXHU1NmUxXHU1NmY1XHU1NmViXHU1NmY5XHU1NmZmXHU1''@;'; put 'put ''NzA0XHU1NzBhXHU1NzA5XHU1NzFjXHU1ZTBmXHU1ZTE5XHU1ZTE0XHU1ZTExXHU1ZTMxXHU1ZTNiXHU1ZTNjXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjI0XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjRdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjI0XVtwXV09NTczNDQrcCxiWzU3''@;'; put 'put ''MzQ0K3BdPV9bMjI0XVtwXSk7Zm9yKF9bMjI1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MTQ1XHU5MTQ3XHU5MTQ4XHU5MTUxXHU5MTUzXHU5MTU0XHU5MTU1XHU5MTU2XHU5MTU4XHU5MTU5XHU5MTViXHU5MTVjXHU5MTVmXHU5''@;'; put 'put ''MTYwXHU5MTY2XHU5MTY3XHU5MTY4XHU5MTZiXHU5MTZkXHU5MTczXHU5MTdhXHU5MTdiXHU5MTdjXHU5MTgwXHU5MTgxXHU5MTgyXHU5MTgzXHU5MTg0XHU5MTg2XHU5MTg4XHU5MThhXHU5MThlXHU5MThmXHU5MTkzXHU5MTk0XHU5MTk1XHU5MTk2XHU5MTk3XHU5MTk4XHU5MTk5XHU5MTlj''@;'; put 'put ''XHU5MTlkXHU5MTllXHU5MTlmXHU5MWEwXHU5MWExXHU5MWE0XHU5MWE1XHU5MWE2XHU5MWE3XHU5MWE4XHU5MWE5XHU5MWFiXHU5MWFjXHU5MWIwXHU5MWIxXHU5MWIyXHU5MWIzXHU5MWI2XHU5MWI3XHU5MWI4XHU5MWI5XHU5MWJiXHVmZmZkXHU5MWJjXHU5MWJkXHU5MWJlXHU5MWJmXHU5''@;'; put 'put ''MWMwXHU5MWMxXHU5MWMyXHU5MWMzXHU5MWM0XHU5MWM1XHU5MWM2XHU5MWM4XHU5MWNiXHU5MWQwXHU5MWQyXHU5MWQzXHU5MWQ0XHU5MWQ1XHU5MWQ2XHU5MWQ3XHU5MWQ4XHU5MWQ5XHU5MWRhXHU5MWRiXHU5MWRkXHU5MWRlXHU5MWRmXHU5MWUwXHU5MWUxXHU5MWUyXHU5MWUzXHU5MWU0''@;'; put 'put ''XHU5MWU1XHU1ZTM3XHU1ZTQ0XHU1ZTU0XHU1ZTViXHU1ZTVlXHU1ZTYxXHU1YzhjXHU1YzdhXHU1YzhkXHU1YzkwXHU1Yzk2XHU1Yzg4XHU1Yzk4XHU1Yzk5XHU1YzkxXHU1YzlhXHU1YzljXHU1Y2I1XHU1Y2EyXHU1Y2JkXHU1Y2FjXHU1Y2FiXHU1Y2IxXHU1Y2EzXHU1Y2MxXHU1Y2I3XHU1''@;'; put 'put ''Y2M0XHU1Y2QyXHU1Y2U0XHU1Y2NiXHU1Y2U1XHU1ZDAyXHU1ZDAzXHU1ZDI3XHU1ZDI2XHU1ZDJlXHU1ZDI0XHU1ZDFlXHU1ZDA2XHU1ZDFiXHU1ZDU4XHU1ZDNlXHU1ZDM0XHU1ZDNkXHU1ZDZjXHU1ZDViXHU1ZDZmXHU1ZDVkXHU1ZDZiXHU1ZDRiXHU1ZDRhXHU1ZDY5XHU1ZDc0XHU1ZDgy''@;'; put 'put ''XHU1ZDk5XHU1ZDlkXHU4YzczXHU1ZGI3XHU1ZGM1XHU1ZjczXHU1Zjc3XHU1ZjgyXHU1Zjg3XHU1Zjg5XHU1ZjhjXHU1Zjk1XHU1Zjk5XHU1ZjljXHU1ZmE4XHU1ZmFkXHU1ZmI1XHU1ZmJjXHU4ODYyXHU1ZjYxXHU3MmFkXHU3MmIwXHU3MmI0XHU3MmI3XHU3MmI4XHU3MmMzXHU3MmMxXHU3''@;'; put 'put ''MmNlXHU3MmNkXHU3MmQyXHU3MmU4XHU3MmVmXHU3MmU5XHU3MmYyXHU3MmY0XHU3MmY3XHU3MzAxXHU3MmYzXHU3MzAzXHU3MmZhXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjI1XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjVdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjI1XVtwXV09''@;'; put 'put ''NTc2MDArcCxiWzU3NjAwK3BdPV9bMjI1XVtwXSk7Zm9yKF9bMjI2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MWU2XHU5MWU3XHU5MWU4XHU5MWU5XHU5MWVhXHU5MWViXHU5MWVjXHU5MWVkXHU5MWVlXHU5MWVmXHU5MWYwXHU5''@;'; put 'put ''MWYxXHU5MWYyXHU5MWYzXHU5MWY0XHU5MWY1XHU5MWY2XHU5MWY3XHU5MWY4XHU5MWY5XHU5MWZhXHU5MWZiXHU5MWZjXHU5MWZkXHU5MWZlXHU5MWZmXHU5MjAwXHU5MjAxXHU5MjAyXHU5MjAzXHU5MjA0XHU5MjA1XHU5MjA2XHU5MjA3XHU5MjA4XHU5MjA5XHU5MjBhXHU5MjBiXHU5MjBj''@;'; put 'put ''XHU5MjBkXHU5MjBlXHU5MjBmXHU5MjEwXHU5MjExXHU5MjEyXHU5MjEzXHU5MjE0XHU5MjE1XHU5MjE2XHU5MjE3XHU5MjE4XHU5MjE5XHU5MjFhXHU5MjFiXHU5MjFjXHU5MjFkXHU5MjFlXHU5MjFmXHU5MjIwXHU5MjIxXHU5MjIyXHU5MjIzXHU5MjI0XHVmZmZkXHU5MjI1XHU5MjI2XHU5''@;'; put 'put ''MjI3XHU5MjI4XHU5MjI5XHU5MjJhXHU5MjJiXHU5MjJjXHU5MjJkXHU5MjJlXHU5MjJmXHU5MjMwXHU5MjMxXHU5MjMyXHU5MjMzXHU5MjM0XHU5MjM1XHU5MjM2XHU5MjM3XHU5MjM4XHU5MjM5XHU5MjNhXHU5MjNiXHU5MjNjXHU5MjNkXHU5MjNlXHU5MjNmXHU5MjQwXHU5MjQxXHU5MjQy''@;'; put 'put ''XHU5MjQzXHU5MjQ0XHU5MjQ1XHU3MmZiXHU3MzE3XHU3MzEzXHU3MzIxXHU3MzBhXHU3MzFlXHU3MzFkXHU3MzE1XHU3MzIyXHU3MzM5XHU3MzI1XHU3MzJjXHU3MzM4XHU3MzMxXHU3MzUwXHU3MzRkXHU3MzU3XHU3MzYwXHU3MzZjXHU3MzZmXHU3MzdlXHU4MjFiXHU1OTI1XHU5OGU3XHU1''@;'; put 'put ''OTI0XHU1OTAyXHU5OTYzXHU5OTY3XHU5OTY4XHU5OTY5XHU5OTZhXHU5OTZiXHU5OTZjXHU5OTc0XHU5OTc3XHU5OTdkXHU5OTgwXHU5OTg0XHU5OTg3XHU5OThhXHU5OThkXHU5OTkwXHU5OTkxXHU5OTkzXHU5OTk0XHU5OTk1XHU1ZTgwXHU1ZTkxXHU1ZThiXHU1ZTk2XHU1ZWE1XHU1ZWEw''@;'; put 'put ''XHU1ZWI5XHU1ZWI1XHU1ZWJlXHU1ZWIzXHU4ZDUzXHU1ZWQyXHU1ZWQxXHU1ZWRiXHU1ZWU4XHU1ZWVhXHU4MWJhXHU1ZmM0XHU1ZmM5XHU1ZmQ2XHU1ZmNmXHU2MDAzXHU1ZmVlXHU2MDA0XHU1ZmUxXHU1ZmU0XHU1ZmZlXHU2MDA1XHU2MDA2XHU1ZmVhXHU1ZmVkXHU1ZmY4XHU2MDE5XHU2''@;'; put 'put ''MDM1XHU2MDI2XHU2MDFiXHU2MDBmXHU2MDBkXHU2MDI5XHU2MDJiXHU2MDBhXHU2MDNmXHU2MDIxXHU2MDc4XHU2MDc5XHU2MDdiXHU2MDdhXHU2MDQyXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjI2XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjZdW3BdLmNoYXJDb2RlQXQoMCkmJihJ''@;'; put 'put ''W19bMjI2XVtwXV09NTc4NTYrcCxiWzU3ODU2K3BdPV9bMjI2XVtwXSk7Zm9yKF9bMjI3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MjQ2XHU5MjQ3XHU5MjQ4XHU5MjQ5XHU5MjRhXHU5MjRiXHU5MjRjXHU5MjRkXHU5MjRlXHU5''@;'; put 'put ''MjRmXHU5MjUwXHU5MjUxXHU5MjUyXHU5MjUzXHU5MjU0XHU5MjU1XHU5MjU2XHU5MjU3XHU5MjU4XHU5MjU5XHU5MjVhXHU5MjViXHU5MjVjXHU5MjVkXHU5MjVlXHU5MjVmXHU5MjYwXHU5MjYxXHU5MjYyXHU5MjYzXHU5MjY0XHU5MjY1XHU5MjY2XHU5MjY3XHU5MjY4XHU5MjY5XHU5MjZh''@;'; put 'put ''XHU5MjZiXHU5MjZjXHU5MjZkXHU5MjZlXHU5MjZmXHU5MjcwXHU5MjcxXHU5MjcyXHU5MjczXHU5Mjc1XHU5Mjc2XHU5Mjc3XHU5Mjc4XHU5Mjc5XHU5MjdhXHU5MjdiXHU5MjdjXHU5MjdkXHU5MjdlXHU5MjdmXHU5MjgwXHU5MjgxXHU5MjgyXHU5MjgzXHU5Mjg0XHU5Mjg1XHVmZmZkXHU5''@;'; put 'put ''Mjg2XHU5Mjg3XHU5Mjg4XHU5Mjg5XHU5MjhhXHU5MjhiXHU5MjhjXHU5MjhkXHU5MjhmXHU5MjkwXHU5MjkxXHU5MjkyXHU5MjkzXHU5Mjk0XHU5Mjk1XHU5Mjk2XHU5Mjk3XHU5Mjk4XHU5Mjk5XHU5MjlhXHU5MjliXHU5MjljXHU5MjlkXHU5MjllXHU5MjlmXHU5MmEwXHU5MmExXHU5MmEy''@;'; put 'put ''XHU5MmEzXHU5MmE0XHU5MmE1XHU5MmE2XHU5MmE3XHU2MDZhXHU2MDdkXHU2MDk2XHU2MDlhXHU2MGFkXHU2MDlkXHU2MDgzXHU2MDkyXHU2MDhjXHU2MDliXHU2MGVjXHU2MGJiXHU2MGIxXHU2MGRkXHU2MGQ4XHU2MGM2XHU2MGRhXHU2MGI0XHU2MTIwXHU2MTI2XHU2MTE1XHU2MTIzXHU2''@;'; put 'put ''MGY0XHU2MTAwXHU2MTBlXHU2MTJiXHU2MTRhXHU2MTc1XHU2MWFjXHU2MTk0XHU2MWE3XHU2MWI3XHU2MWQ0XHU2MWY1XHU1ZmRkXHU5NmIzXHU5NWU5XHU5NWViXHU5NWYxXHU5NWYzXHU5NWY1XHU5NWY2XHU5NWZjXHU5NWZlXHU5NjAzXHU5NjA0XHU5NjA2XHU5NjA4XHU5NjBhXHU5NjBi''@;'; put 'put ''XHU5NjBjXHU5NjBkXHU5NjBmXHU5NjEyXHU5NjE1XHU5NjE2XHU5NjE3XHU5NjE5XHU5NjFhXHU0ZTJjXHU3MjNmXHU2MjE1XHU2YzM1XHU2YzU0XHU2YzVjXHU2YzRhXHU2Y2EzXHU2Yzg1XHU2YzkwXHU2Yzk0XHU2YzhjXHU2YzY4XHU2YzY5XHU2Yzc0XHU2Yzc2XHU2Yzg2XHU2Y2E5XHU2''@;'; put 'put ''Y2QwXHU2Y2Q0XHU2Y2FkXHU2Y2Y3XHU2Y2Y4XHU2Y2YxXHU2Y2Q3XHU2Y2IyXHU2Y2UwXHU2Y2Q2XHU2Y2ZhXHU2Y2ViXHU2Y2VlXHU2Y2IxXHU2Y2QzXHU2Y2VmXHU2Y2ZlXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjI3XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjddW3BdLmNoYXJD''@;'; put 'put ''b2RlQXQoMCkmJihJW19bMjI3XVtwXV09NTgxMTIrcCxiWzU4MTEyK3BdPV9bMjI3XVtwXSk7Zm9yKF9bMjI4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MmE4XHU5MmE5XHU5MmFhXHU5MmFiXHU5MmFjXHU5MmFkXHU5MmFmXHU5''@;'; put 'put ''MmIwXHU5MmIxXHU5MmIyXHU5MmIzXHU5MmI0XHU5MmI1XHU5MmI2XHU5MmI3XHU5MmI4XHU5MmI5XHU5MmJhXHU5MmJiXHU5MmJjXHU5MmJkXHU5MmJlXHU5MmJmXHU5MmMwXHU5MmMxXHU5MmMyXHU5MmMzXHU5MmM0XHU5MmM1XHU5MmM2XHU5MmM3XHU5MmM5XHU5MmNhXHU5MmNiXHU5MmNj''@;'; put 'put ''XHU5MmNkXHU5MmNlXHU5MmNmXHU5MmQwXHU5MmQxXHU5MmQyXHU5MmQzXHU5MmQ0XHU5MmQ1XHU5MmQ2XHU5MmQ3XHU5MmQ4XHU5MmQ5XHU5MmRhXHU5MmRiXHU5MmRjXHU5MmRkXHU5MmRlXHU5MmRmXHU5MmUwXHU5MmUxXHU5MmUyXHU5MmUzXHU5MmU0XHU5MmU1XHU5MmU2XHU5MmU3XHU5''@;'; put 'put ''MmU4XHVmZmZkXHU5MmU5XHU5MmVhXHU5MmViXHU5MmVjXHU5MmVkXHU5MmVlXHU5MmVmXHU5MmYwXHU5MmYxXHU5MmYyXHU5MmYzXHU5MmY0XHU5MmY1XHU5MmY2XHU5MmY3XHU5MmY4XHU5MmY5XHU5MmZhXHU5MmZiXHU5MmZjXHU5MmZkXHU5MmZlXHU5MmZmXHU5MzAwXHU5MzAxXHU5MzAy''@;'; put 'put ''XHU5MzAzXHU5MzA0XHU5MzA1XHU5MzA2XHU5MzA3XHU5MzA4XHU5MzA5XHU2ZDM5XHU2ZDI3XHU2ZDBjXHU2ZDQzXHU2ZDQ4XHU2ZDA3XHU2ZDA0XHU2ZDE5XHU2ZDBlXHU2ZDJiXHU2ZDRkXHU2ZDJlXHU2ZDM1XHU2ZDFhXHU2ZDRmXHU2ZDUyXHU2ZDU0XHU2ZDMzXHU2ZDkxXHU2ZDZmXHU2''@;'; put 'put ''ZDllXHU2ZGEwXHU2ZDVlXHU2ZDkzXHU2ZDk0XHU2ZDVjXHU2ZDYwXHU2ZDdjXHU2ZDYzXHU2ZTFhXHU2ZGM3XHU2ZGM1XHU2ZGRlXHU2ZTBlXHU2ZGJmXHU2ZGUwXHU2ZTExXHU2ZGU2XHU2ZGRkXHU2ZGQ5XHU2ZTE2XHU2ZGFiXHU2ZTBjXHU2ZGFlXHU2ZTJiXHU2ZTZlXHU2ZTRlXHU2ZTZi''@;'; put 'put ''XHU2ZWIyXHU2ZTVmXHU2ZTg2XHU2ZTUzXHU2ZTU0XHU2ZTMyXHU2ZTI1XHU2ZTQ0XHU2ZWRmXHU2ZWIxXHU2ZTk4XHU2ZWUwXHU2ZjJkXHU2ZWUyXHU2ZWE1XHU2ZWE3XHU2ZWJkXHU2ZWJiXHU2ZWI3XHU2ZWQ3XHU2ZWI0XHU2ZWNmXHU2ZThmXHU2ZWMyXHU2ZTlmXHU2ZjYyXHU2ZjQ2XHU2''@;'; put 'put ''ZjQ3XHU2ZjI0XHU2ZjE1XHU2ZWY5XHU2ZjJmXHU2ZjM2XHU2ZjRiXHU2Zjc0XHU2ZjJhXHU2ZjA5XHU2ZjI5XHU2Zjg5XHU2ZjhkXHU2ZjhjXHU2Zjc4XHU2ZjcyXHU2ZjdjXHU2ZjdhXHU2ZmQxXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjI4XS5sZW5ndGg7KytwKTY1NTMzIT09X1sy''@;'; put 'put ''MjhdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjI4XVtwXV09NTgzNjgrcCxiWzU4MzY4K3BdPV9bMjI4XVtwXSk7Zm9yKF9bMjI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MzBhXHU5MzBiXHU5MzBjXHU5MzBkXHU5MzBlXHU5''@;'; put 'put ''MzBmXHU5MzEwXHU5MzExXHU5MzEyXHU5MzEzXHU5MzE0XHU5MzE1XHU5MzE2XHU5MzE3XHU5MzE4XHU5MzE5XHU5MzFhXHU5MzFiXHU5MzFjXHU5MzFkXHU5MzFlXHU5MzFmXHU5MzIwXHU5MzIxXHU5MzIyXHU5MzIzXHU5MzI0XHU5MzI1XHU5MzI2XHU5MzI3XHU5MzI4XHU5MzI5XHU5MzJh''@;'; put 'put ''XHU5MzJiXHU5MzJjXHU5MzJkXHU5MzJlXHU5MzJmXHU5MzMwXHU5MzMxXHU5MzMyXHU5MzMzXHU5MzM0XHU5MzM1XHU5MzM2XHU5MzM3XHU5MzM4XHU5MzM5XHU5MzNhXHU5MzNiXHU5MzNjXHU5MzNkXHU5MzNmXHU5MzQwXHU5MzQxXHU5MzQyXHU5MzQzXHU5MzQ0XHU5MzQ1XHU5MzQ2XHU5''@;'; put 'put ''MzQ3XHU5MzQ4XHU5MzQ5XHVmZmZkXHU5MzRhXHU5MzRiXHU5MzRjXHU5MzRkXHU5MzRlXHU5MzRmXHU5MzUwXHU5MzUxXHU5MzUyXHU5MzUzXHU5MzU0XHU5MzU1XHU5MzU2XHU5MzU3XHU5MzU4XHU5MzU5XHU5MzVhXHU5MzViXHU5MzVjXHU5MzVkXHU5MzVlXHU5MzVmXHU5MzYwXHU5MzYx''@;'; put 'put ''XHU5MzYyXHU5MzYzXHU5MzY0XHU5MzY1XHU5MzY2XHU5MzY3XHU5MzY4XHU5MzY5XHU5MzZiXHU2ZmM5XHU2ZmE3XHU2ZmI5XHU2ZmI2XHU2ZmMyXHU2ZmUxXHU2ZmVlXHU2ZmRlXHU2ZmUwXHU2ZmVmXHU3MDFhXHU3MDIzXHU3MDFiXHU3MDM5XHU3MDM1XHU3MDRmXHU3MDVlXHU1YjgwXHU1''@;'; put 'put ''Yjg0XHU1Yjk1XHU1YjkzXHU1YmE1XHU1YmI4XHU3NTJmXHU5YTllXHU2NDM0XHU1YmU0XHU1YmVlXHU4OTMwXHU1YmYwXHU4ZTQ3XHU4YjA3XHU4ZmI2XHU4ZmQzXHU4ZmQ1XHU4ZmU1XHU4ZmVlXHU4ZmU0XHU4ZmU5XHU4ZmU2XHU4ZmYzXHU4ZmU4XHU5MDA1XHU5MDA0XHU5MDBiXHU5MDI2''@;'; put 'put ''XHU5MDExXHU5MDBkXHU5MDE2XHU5MDIxXHU5MDM1XHU5MDM2XHU5MDJkXHU5MDJmXHU5MDQ0XHU5MDUxXHU5MDUyXHU5MDUwXHU5MDY4XHU5MDU4XHU5MDYyXHU5MDViXHU2NmI5XHU5MDc0XHU5MDdkXHU5MDgyXHU5MDg4XHU5MDgzXHU5MDhiXHU1ZjUwXHU1ZjU3XHU1ZjU2XHU1ZjU4XHU1''@;'; put 'put ''YzNiXHU1NGFiXHU1YzUwXHU1YzU5XHU1YjcxXHU1YzYzXHU1YzY2XHU3ZmJjXHU1ZjJhXHU1ZjI5XHU1ZjJkXHU4Mjc0XHU1ZjNjXHU5YjNiXHU1YzZlXHU1OTgxXHU1OTgzXHU1OThkXHU1OWE5XHU1OWFhXHU1OWEzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjI5XS5sZW5ndGg7Kytw''@;'; put 'put ''KTY1NTMzIT09X1syMjldW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjI5XVtwXV09NTg2MjQrcCxiWzU4NjI0K3BdPV9bMjI5XVtwXSk7Zm9yKF9bMjMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MzZjXHU5MzZkXHU5MzZlXHU5''@;'; put 'put ''MzZmXHU5MzcwXHU5MzcxXHU5MzcyXHU5MzczXHU5Mzc0XHU5Mzc1XHU5Mzc2XHU5Mzc3XHU5Mzc4XHU5Mzc5XHU5MzdhXHU5MzdiXHU5MzdjXHU5MzdkXHU5MzdlXHU5MzdmXHU5MzgwXHU5MzgxXHU5MzgyXHU5MzgzXHU5Mzg0XHU5Mzg1XHU5Mzg2XHU5Mzg3XHU5Mzg4XHU5Mzg5XHU5Mzhh''@;'; put 'put ''XHU5MzhiXHU5MzhjXHU5MzhkXHU5MzhlXHU5MzkwXHU5MzkxXHU5MzkyXHU5MzkzXHU5Mzk0XHU5Mzk1XHU5Mzk2XHU5Mzk3XHU5Mzk4XHU5Mzk5XHU5MzlhXHU5MzliXHU5MzljXHU5MzlkXHU5MzllXHU5MzlmXHU5M2EwXHU5M2ExXHU5M2EyXHU5M2EzXHU5M2E0XHU5M2E1XHU5M2E2XHU5''@;'; put 'put ''M2E3XHU5M2E4XHU5M2E5XHU5M2FhXHU5M2FiXHVmZmZkXHU5M2FjXHU5M2FkXHU5M2FlXHU5M2FmXHU5M2IwXHU5M2IxXHU5M2IyXHU5M2IzXHU5M2I0XHU5M2I1XHU5M2I2XHU5M2I3XHU5M2I4XHU5M2I5XHU5M2JhXHU5M2JiXHU5M2JjXHU5M2JkXHU5M2JlXHU5M2JmXHU5M2MwXHU5M2Mx''@;'; put 'put ''XHU5M2MyXHU5M2MzXHU5M2M0XHU5M2M1XHU5M2M2XHU5M2M3XHU5M2M4XHU5M2M5XHU5M2NiXHU5M2NjXHU5M2NkXHU1OTk3XHU1OWNhXHU1OWFiXHU1OTllXHU1OWE0XHU1OWQyXHU1OWIyXHU1OWFmXHU1OWQ3XHU1OWJlXHU1YTA1XHU1YTA2XHU1OWRkXHU1YTA4XHU1OWUzXHU1OWQ4XHU1''@;'; put 'put ''OWY5XHU1YTBjXHU1YTA5XHU1YTMyXHU1YTM0XHU1YTExXHU1YTIzXHU1YTEzXHU1YTQwXHU1YTY3XHU1YTRhXHU1YTU1XHU1YTNjXHU1YTYyXHU1YTc1XHU4MGVjXHU1YWFhXHU1YTliXHU1YTc3XHU1YTdhXHU1YWJlXHU1YWViXHU1YWIyXHU1YWQyXHU1YWQ0XHU1YWI4XHU1YWUwXHU1YWUz''@;'; put 'put ''XHU1YWYxXHU1YWQ2XHU1YWU2XHU1YWQ4XHU1YWRjXHU1YjA5XHU1YjE3XHU1YjE2XHU1YjMyXHU1YjM3XHU1YjQwXHU1YzE1XHU1YzFjXHU1YjVhXHU1YjY1XHU1YjczXHU1YjUxXHU1YjUzXHU1YjYyXHU5YTc1XHU5YTc3XHU5YTc4XHU5YTdhXHU5YTdmXHU5YTdkXHU5YTgwXHU5YTgxXHU5''@;'; put 'put ''YTg1XHU5YTg4XHU5YThhXHU5YTkwXHU5YTkyXHU5YTkzXHU5YTk2XHU5YTk4XHU5YTliXHU5YTljXHU5YTlkXHU5YTlmXHU5YWEwXHU5YWEyXHU5YWEzXHU5YWE1XHU5YWE3XHU3ZTlmXHU3ZWExXHU3ZWEzXHU3ZWE1XHU3ZWE4XHU3ZWE5XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjMw''@;'; put 'put ''XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzBdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjMwXVtwXV09NTg4ODArcCxiWzU4ODgwK3BdPV9bMjMwXVtwXSk7Zm9yKF9bMjMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5M2NlXHU5''@;'; put 'put ''M2NmXHU5M2QwXHU5M2QxXHU5M2QyXHU5M2QzXHU5M2Q0XHU5M2Q1XHU5M2Q3XHU5M2Q4XHU5M2Q5XHU5M2RhXHU5M2RiXHU5M2RjXHU5M2RkXHU5M2RlXHU5M2RmXHU5M2UwXHU5M2UxXHU5M2UyXHU5M2UzXHU5M2U0XHU5M2U1XHU5M2U2XHU5M2U3XHU5M2U4XHU5M2U5XHU5M2VhXHU5M2Vi''@;'; put 'put ''XHU5M2VjXHU5M2VkXHU5M2VlXHU5M2VmXHU5M2YwXHU5M2YxXHU5M2YyXHU5M2YzXHU5M2Y0XHU5M2Y1XHU5M2Y2XHU5M2Y3XHU5M2Y4XHU5M2Y5XHU5M2ZhXHU5M2ZiXHU5M2ZjXHU5M2ZkXHU5M2ZlXHU5M2ZmXHU5NDAwXHU5NDAxXHU5NDAyXHU5NDAzXHU5NDA0XHU5NDA1XHU5NDA2XHU5''@;'; put 'put ''NDA3XHU5NDA4XHU5NDA5XHU5NDBhXHU5NDBiXHU5NDBjXHU5NDBkXHVmZmZkXHU5NDBlXHU5NDBmXHU5NDEwXHU5NDExXHU5NDEyXHU5NDEzXHU5NDE0XHU5NDE1XHU5NDE2XHU5NDE3XHU5NDE4XHU5NDE5XHU5NDFhXHU5NDFiXHU5NDFjXHU5NDFkXHU5NDFlXHU5NDFmXHU5NDIwXHU5NDIx''@;'; put 'put ''XHU5NDIyXHU5NDIzXHU5NDI0XHU5NDI1XHU5NDI2XHU5NDI3XHU5NDI4XHU5NDI5XHU5NDJhXHU5NDJiXHU5NDJjXHU5NDJkXHU5NDJlXHU3ZWFkXHU3ZWIwXHU3ZWJlXHU3ZWMwXHU3ZWMxXHU3ZWMyXHU3ZWM5XHU3ZWNiXHU3ZWNjXHU3ZWQwXHU3ZWQ0XHU3ZWQ3XHU3ZWRiXHU3ZWUwXHU3''@;'; put 'put ''ZWUxXHU3ZWU4XHU3ZWViXHU3ZWVlXHU3ZWVmXHU3ZWYxXHU3ZWYyXHU3ZjBkXHU3ZWY2XHU3ZWZhXHU3ZWZiXHU3ZWZlXHU3ZjAxXHU3ZjAyXHU3ZjAzXHU3ZjA3XHU3ZjA4XHU3ZjBiXHU3ZjBjXHU3ZjBmXHU3ZjExXHU3ZjEyXHU3ZjE3XHU3ZjE5XHU3ZjFjXHU3ZjFiXHU3ZjFmXHU3ZjIx''@;'; put 'put ''XHU3ZjIyXHU3ZjIzXHU3ZjI0XHU3ZjI1XHU3ZjI2XHU3ZjI3XHU3ZjJhXHU3ZjJiXHU3ZjJjXHU3ZjJkXHU3ZjJmXHU3ZjMwXHU3ZjMxXHU3ZjMyXHU3ZjMzXHU3ZjM1XHU1ZTdhXHU3NTdmXHU1ZGRiXHU3NTNlXHU5MDk1XHU3MzhlXHU3MzkxXHU3M2FlXHU3M2EyXHU3MzlmXHU3M2NmXHU3''@;'; put 'put ''M2MyXHU3M2QxXHU3M2I3XHU3M2IzXHU3M2MwXHU3M2M5XHU3M2M4XHU3M2U1XHU3M2Q5XHU5ODdjXHU3NDBhXHU3M2U5XHU3M2U3XHU3M2RlXHU3M2JhXHU3M2YyXHU3NDBmXHU3NDJhXHU3NDViXHU3NDI2XHU3NDI1XHU3NDI4XHU3NDMwXHU3NDJlXHU3NDJjXHVmZmZkIi5zcGxpdCgiIiks''@;'; put 'put ''cD0wO3AhPV9bMjMxXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzFdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjMxXVtwXV09NTkxMzYrcCxiWzU5MTM2K3BdPV9bMjMxXVtwXSk7Zm9yKF9bMjMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHU5NDJmXHU5NDMwXHU5NDMxXHU5NDMyXHU5NDMzXHU5NDM0XHU5NDM1XHU5NDM2XHU5NDM3XHU5NDM4XHU5NDM5XHU5NDNhXHU5NDNiXHU5NDNjXHU5NDNkXHU5NDNmXHU5NDQwXHU5NDQxXHU5NDQyXHU5NDQzXHU5NDQ0XHU5NDQ1XHU5NDQ2XHU5NDQ3XHU5NDQ4XHU5NDQ5XHU5NDRh''@;'; put 'put ''XHU5NDRiXHU5NDRjXHU5NDRkXHU5NDRlXHU5NDRmXHU5NDUwXHU5NDUxXHU5NDUyXHU5NDUzXHU5NDU0XHU5NDU1XHU5NDU2XHU5NDU3XHU5NDU4XHU5NDU5XHU5NDVhXHU5NDViXHU5NDVjXHU5NDVkXHU5NDVlXHU5NDVmXHU5NDYwXHU5NDYxXHU5NDYyXHU5NDYzXHU5NDY0XHU5NDY1XHU5''@;'; put 'put ''NDY2XHU5NDY3XHU5NDY4XHU5NDY5XHU5NDZhXHU5NDZjXHU5NDZkXHU5NDZlXHU5NDZmXHVmZmZkXHU5NDcwXHU5NDcxXHU5NDcyXHU5NDczXHU5NDc0XHU5NDc1XHU5NDc2XHU5NDc3XHU5NDc4XHU5NDc5XHU5NDdhXHU5NDdiXHU5NDdjXHU5NDdkXHU5NDdlXHU5NDdmXHU5NDgwXHU5NDgx''@;'; put 'put ''XHU5NDgyXHU5NDgzXHU5NDg0XHU5NDkxXHU5NDk2XHU5NDk4XHU5NGM3XHU5NGNmXHU5NGQzXHU5NGQ0XHU5NGRhXHU5NGU2XHU5NGZiXHU5NTFjXHU5NTIwXHU3NDFiXHU3NDFhXHU3NDQxXHU3NDVjXHU3NDU3XHU3NDU1XHU3NDU5XHU3NDc3XHU3NDZkXHU3NDdlXHU3NDljXHU3NDhlXHU3''@;'; put 'put ''NDgwXHU3NDgxXHU3NDg3XHU3NDhiXHU3NDllXHU3NGE4XHU3NGE5XHU3NDkwXHU3NGE3XHU3NGQyXHU3NGJhXHU5N2VhXHU5N2ViXHU5N2VjXHU2NzRjXHU2NzUzXHU2NzVlXHU2NzQ4XHU2NzY5XHU2N2E1XHU2Nzg3XHU2NzZhXHU2NzczXHU2Nzk4XHU2N2E3XHU2Nzc1XHU2N2E4XHU2Nzll''@;'; put 'put ''XHU2N2FkXHU2NzhiXHU2Nzc3XHU2NzdjXHU2N2YwXHU2ODA5XHU2N2Q4XHU2ODBhXHU2N2U5XHU2N2IwXHU2ODBjXHU2N2Q5XHU2N2I1XHU2N2RhXHU2N2IzXHU2N2RkXHU2ODAwXHU2N2MzXHU2N2I4XHU2N2UyXHU2ODBlXHU2N2MxXHU2N2ZkXHU2ODMyXHU2ODMzXHU2ODYwXHU2ODYxXHU2''@;'; put 'put ''ODRlXHU2ODYyXHU2ODQ0XHU2ODY0XHU2ODgzXHU2ODFkXHU2ODU1XHU2ODY2XHU2ODQxXHU2ODY3XHU2ODQwXHU2ODNlXHU2ODRhXHU2ODQ5XHU2ODI5XHU2OGI1XHU2ODhmXHU2ODc0XHU2ODc3XHU2ODkzXHU2ODZiXHU2OGMyXHU2OTZlXHU2OGZjXHU2OTFmXHU2OTIwXHU2OGY5XHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIikscD0wO3AhPV9bMjMyXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzJdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjMyXVtwXV09NTkzOTIrcCxiWzU5MzkyK3BdPV9bMjMyXVtwXSk7Zm9yKF9bMjMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHU5NTI3XHU5NTMzXHU5NTNkXHU5NTQzXHU5NTQ4XHU5NTRiXHU5NTU1XHU5NTVhXHU5NTYwXHU5NTZlXHU5NTc0XHU5NTc1XHU5NTc3XHU5NTc4XHU5NTc5XHU5NTdhXHU5NTdiXHU5NTdjXHU5NTdkXHU5NTdlXHU5NTgwXHU5NTgxXHU5NTgyXHU5NTgzXHU5NTg0''@;'; put 'put ''XHU5NTg1XHU5NTg2XHU5NTg3XHU5NTg4XHU5NTg5XHU5NThhXHU5NThiXHU5NThjXHU5NThkXHU5NThlXHU5NThmXHU5NTkwXHU5NTkxXHU5NTkyXHU5NTkzXHU5NTk0XHU5NTk1XHU5NTk2XHU5NTk3XHU5NTk4XHU5NTk5XHU5NTlhXHU5NTliXHU5NTljXHU5NTlkXHU5NTllXHU5NTlmXHU5''@;'; put 'put ''NWEwXHU5NWExXHU5NWEyXHU5NWEzXHU5NWE0XHU5NWE1XHU5NWE2XHU5NWE3XHU5NWE4XHU5NWE5XHU5NWFhXHVmZmZkXHU5NWFiXHU5NWFjXHU5NWFkXHU5NWFlXHU5NWFmXHU5NWIwXHU5NWIxXHU5NWIyXHU5NWIzXHU5NWI0XHU5NWI1XHU5NWI2XHU5NWI3XHU5NWI4XHU5NWI5XHU5NWJh''@;'; put 'put ''XHU5NWJiXHU5NWJjXHU5NWJkXHU5NWJlXHU5NWJmXHU5NWMwXHU5NWMxXHU5NWMyXHU5NWMzXHU5NWM0XHU5NWM1XHU5NWM2XHU5NWM3XHU5NWM4XHU5NWM5XHU5NWNhXHU5NWNiXHU2OTI0XHU2OGYwXHU2OTBiXHU2OTAxXHU2OTU3XHU2OGUzXHU2OTEwXHU2OTcxXHU2OTM5XHU2OTYwXHU2''@;'; put 'put ''OTQyXHU2OTVkXHU2OTg0XHU2OTZiXHU2OTgwXHU2OTk4XHU2OTc4XHU2OTM0XHU2OWNjXHU2OTg3XHU2OTg4XHU2OWNlXHU2OTg5XHU2OTY2XHU2OTYzXHU2OTc5XHU2OTliXHU2OWE3XHU2OWJiXHU2OWFiXHU2OWFkXHU2OWQ0XHU2OWIxXHU2OWMxXHU2OWNhXHU2OWRmXHU2OTk1XHU2OWUw''@;'; put 'put ''XHU2OThkXHU2OWZmXHU2YTJmXHU2OWVkXHU2YTE3XHU2YTE4XHU2YTY1XHU2OWYyXHU2YTQ0XHU2YTNlXHU2YWEwXHU2YTUwXHU2YTViXHU2YTM1XHU2YThlXHU2YTc5XHU2YTNkXHU2YTI4XHU2YTU4XHU2YTdjXHU2YTkxXHU2YTkwXHU2YWE5XHU2YTk3XHU2YWFiXHU3MzM3XHU3MzUyXHU2''@;'; put 'put ''YjgxXHU2YjgyXHU2Yjg3XHU2Yjg0XHU2YjkyXHU2YjkzXHU2YjhkXHU2YjlhXHU2YjliXHU2YmExXHU2YmFhXHU4ZjZiXHU4ZjZkXHU4ZjcxXHU4ZjcyXHU4ZjczXHU4Zjc1XHU4Zjc2XHU4Zjc4XHU4Zjc3XHU4Zjc5XHU4ZjdhXHU4ZjdjXHU4ZjdlXHU4ZjgxXHU4ZjgyXHU4Zjg0XHU4Zjg3''@;'; put 'put ''XHU4ZjhiXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjMzXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzNdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjMzXVtwXV09NTk2NDgrcCxiWzU5NjQ4K3BdPV9bMjMzXVtwXSk7Zm9yKF9bMjM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NWNjXHU5NWNkXHU5NWNlXHU5NWNmXHU5NWQwXHU5NWQxXHU5NWQyXHU5NWQzXHU5NWQ0XHU5NWQ1XHU5NWQ2XHU5NWQ3XHU5NWQ4XHU5NWQ5XHU5NWRhXHU5NWRiXHU5NWRjXHU5NWRkXHU5NWRlXHU5NWRmXHU5NWUwXHU5NWUxXHU5NWUy''@;'; put 'put ''XHU5NWUzXHU5NWU0XHU5NWU1XHU5NWU2XHU5NWU3XHU5NWVjXHU5NWZmXHU5NjA3XHU5NjEzXHU5NjE4XHU5NjFiXHU5NjFlXHU5NjIwXHU5NjIzXHU5NjI0XHU5NjI1XHU5NjI2XHU5NjI3XHU5NjI4XHU5NjI5XHU5NjJiXHU5NjJjXHU5NjJkXHU5NjJmXHU5NjMwXHU5NjM3XHU5NjM4XHU5''@;'; put 'put ''NjM5XHU5NjNhXHU5NjNlXHU5NjQxXHU5NjQzXHU5NjRhXHU5NjRlXHU5NjRmXHU5NjUxXHU5NjUyXHU5NjUzXHU5NjU2XHU5NjU3XHVmZmZkXHU5NjU4XHU5NjU5XHU5NjVhXHU5NjVjXHU5NjVkXHU5NjVlXHU5NjYwXHU5NjYzXHU5NjY1XHU5NjY2XHU5NjZiXHU5NjZkXHU5NjZlXHU5NjZm''@;'; put 'put ''XHU5NjcwXHU5NjcxXHU5NjczXHU5Njc4XHU5Njc5XHU5NjdhXHU5NjdiXHU5NjdjXHU5NjdkXHU5NjdlXHU5NjdmXHU5NjgwXHU5NjgxXHU5NjgyXHU5NjgzXHU5Njg0XHU5Njg3XHU5Njg5XHU5NjhhXHU4ZjhkXHU4ZjhlXHU4ZjhmXHU4Zjk4XHU4ZjlhXHU4ZWNlXHU2MjBiXHU2MjE3XHU2''@;'; put 'put ''MjFiXHU2MjFmXHU2MjIyXHU2MjIxXHU2MjI1XHU2MjI0XHU2MjJjXHU4MWU3XHU3NGVmXHU3NGY0XHU3NGZmXHU3NTBmXHU3NTExXHU3NTEzXHU2NTM0XHU2NWVlXHU2NWVmXHU2NWYwXHU2NjBhXHU2NjE5XHU2NzcyXHU2NjAzXHU2NjE1XHU2NjAwXHU3MDg1XHU2NmY3XHU2NjFkXHU2NjM0''@;'; put 'put ''XHU2NjMxXHU2NjM2XHU2NjM1XHU4MDA2XHU2NjVmXHU2NjU0XHU2NjQxXHU2NjRmXHU2NjU2XHU2NjYxXHU2NjU3XHU2Njc3XHU2Njg0XHU2NjhjXHU2NmE3XHU2NjlkXHU2NmJlXHU2NmRiXHU2NmRjXHU2NmU2XHU2NmU5XHU4ZDMyXHU4ZDMzXHU4ZDM2XHU4ZDNiXHU4ZDNkXHU4ZDQwXHU4''@;'; put 'put ''ZDQ1XHU4ZDQ2XHU4ZDQ4XHU4ZDQ5XHU4ZDQ3XHU4ZDRkXHU4ZDU1XHU4ZDU5XHU4OWM3XHU4OWNhXHU4OWNiXHU4OWNjXHU4OWNlXHU4OWNmXHU4OWQwXHU4OWQxXHU3MjZlXHU3MjlmXHU3MjVkXHU3MjY2XHU3MjZmXHU3MjdlXHU3MjdmXHU3Mjg0XHU3MjhiXHU3MjhkXHU3MjhmXHU3Mjky''@;'; put 'put ''XHU2MzA4XHU2MzMyXHU2M2IwXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjM0XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzRdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjM0XVtwXV09NTk5MDQrcCxiWzU5OTA0K3BdPV9bMjM0XVtwXSk7Zm9yKF9bMjM1XT0iXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NjhjXHU5NjhlXHU5NjkxXHU5NjkyXHU5NjkzXHU5Njk1XHU5Njk2XHU5NjlhXHU5NjliXHU5NjlkXHU5NjllXHU5NjlmXHU5NmEwXHU5NmExXHU5NmEyXHU5NmEzXHU5NmE0XHU5NmE1XHU5NmE2XHU5NmE4XHU5NmE5''@;'; put 'put ''XHU5NmFhXHU5NmFiXHU5NmFjXHU5NmFkXHU5NmFlXHU5NmFmXHU5NmIxXHU5NmIyXHU5NmI0XHU5NmI1XHU5NmI3XHU5NmI4XHU5NmJhXHU5NmJiXHU5NmJmXHU5NmMyXHU5NmMzXHU5NmM4XHU5NmNhXHU5NmNiXHU5NmQwXHU5NmQxXHU5NmQzXHU5NmQ0XHU5NmQ2XHU5NmQ3XHU5NmQ4XHU5''@;'; put 'put ''NmQ5XHU5NmRhXHU5NmRiXHU5NmRjXHU5NmRkXHU5NmRlXHU5NmRmXHU5NmUxXHU5NmUyXHU5NmUzXHU5NmU0XHU5NmU1XHU5NmU2XHU5NmU3XHU5NmViXHVmZmZkXHU5NmVjXHU5NmVkXHU5NmVlXHU5NmYwXHU5NmYxXHU5NmYyXHU5NmY0XHU5NmY1XHU5NmY4XHU5NmZhXHU5NmZiXHU5NmZj''@;'; put 'put ''XHU5NmZkXHU5NmZmXHU5NzAyXHU5NzAzXHU5NzA1XHU5NzBhXHU5NzBiXHU5NzBjXHU5NzEwXHU5NzExXHU5NzEyXHU5NzE0XHU5NzE1XHU5NzE3XHU5NzE4XHU5NzE5XHU5NzFhXHU5NzFiXHU5NzFkXHU5NzFmXHU5NzIwXHU2NDNmXHU2NGQ4XHU4MDA0XHU2YmVhXHU2YmYzXHU2YmZkXHU2''@;'; put 'put ''YmY1XHU2YmY5XHU2YzA1XHU2YzA3XHU2YzA2XHU2YzBkXHU2YzE1XHU2YzE4XHU2YzE5XHU2YzFhXHU2YzIxXHU2YzI5XHU2YzI0XHU2YzJhXHU2YzMyXHU2NTM1XHU2NTU1XHU2NTZiXHU3MjRkXHU3MjUyXHU3MjU2XHU3MjMwXHU4NjYyXHU1MjE2XHU4MDlmXHU4MDljXHU4MDkzXHU4MGJj''@;'; put 'put ''XHU2NzBhXHU4MGJkXHU4MGIxXHU4MGFiXHU4MGFkXHU4MGI0XHU4MGI3XHU4MGU3XHU4MGU4XHU4MGU5XHU4MGVhXHU4MGRiXHU4MGMyXHU4MGM0XHU4MGQ5XHU4MGNkXHU4MGQ3XHU2NzEwXHU4MGRkXHU4MGViXHU4MGYxXHU4MGY0XHU4MGVkXHU4MTBkXHU4MTBlXHU4MGYyXHU4MGZjXHU2''@;'; put 'put ''NzE1XHU4MTEyXHU4YzVhXHU4MTM2XHU4MTFlXHU4MTJjXHU4MTE4XHU4MTMyXHU4MTQ4XHU4MTRjXHU4MTUzXHU4MTc0XHU4MTU5XHU4MTVhXHU4MTcxXHU4MTYwXHU4MTY5XHU4MTdjXHU4MTdkXHU4MTZkXHU4MTY3XHU1ODRkXHU1YWI1XHU4MTg4XHU4MTgyXHU4MTkxXHU2ZWQ1XHU4MWEz''@;'; put 'put ''XHU4MWFhXHU4MWNjXHU2NzI2XHU4MWNhXHU4MWJiXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjM1XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzVdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjM1XVtwXV09NjAxNjArcCxiWzYwMTYwK3BdPV9bMjM1XVtwXSk7Zm9yKF9bMjM2XT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NzIxXHU5NzIyXHU5NzIzXHU5NzI0XHU5NzI1XHU5NzI2XHU5NzI3XHU5NzI4XHU5NzI5XHU5NzJiXHU5NzJjXHU5NzJlXHU5NzJmXHU5NzMxXHU5NzMzXHU5NzM0XHU5NzM1XHU5NzM2XHU5NzM3''@;'; put 'put ''XHU5NzNhXHU5NzNiXHU5NzNjXHU5NzNkXHU5NzNmXHU5NzQwXHU5NzQxXHU5NzQyXHU5NzQzXHU5NzQ0XHU5NzQ1XHU5NzQ2XHU5NzQ3XHU5NzQ4XHU5NzQ5XHU5NzRhXHU5NzRiXHU5NzRjXHU5NzRkXHU5NzRlXHU5NzRmXHU5NzUwXHU5NzUxXHU5NzU0XHU5NzU1XHU5NzU3XHU5NzU4XHU5''@;'; put 'put ''NzVhXHU5NzVjXHU5NzVkXHU5NzVmXHU5NzYzXHU5NzY0XHU5NzY2XHU5NzY3XHU5NzY4XHU5NzZhXHU5NzZiXHU5NzZjXHU5NzZkXHU5NzZlXHU5NzZmXHU5NzcwXHU5NzcxXHVmZmZkXHU5NzcyXHU5Nzc1XHU5Nzc3XHU5Nzc4XHU5Nzc5XHU5NzdhXHU5NzdiXHU5NzdkXHU5NzdlXHU5Nzdm''@;'; put 'put ''XHU5NzgwXHU5NzgxXHU5NzgyXHU5NzgzXHU5Nzg0XHU5Nzg2XHU5Nzg3XHU5Nzg4XHU5Nzg5XHU5NzhhXHU5NzhjXHU5NzhlXHU5NzhmXHU5NzkwXHU5NzkzXHU5Nzk1XHU5Nzk2XHU5Nzk3XHU5Nzk5XHU5NzlhXHU5NzliXHU5NzljXHU5NzlkXHU4MWMxXHU4MWE2XHU2YjI0XHU2YjM3XHU2''@;'; put 'put ''YjM5XHU2YjQzXHU2YjQ2XHU2YjU5XHU5OGQxXHU5OGQyXHU5OGQzXHU5OGQ1XHU5OGQ5XHU5OGRhXHU2YmIzXHU1ZjQwXHU2YmMyXHU4OWYzXHU2NTkwXHU5ZjUxXHU2NTkzXHU2NWJjXHU2NWM2XHU2NWM0XHU2NWMzXHU2NWNjXHU2NWNlXHU2NWQyXHU2NWQ2XHU3MDgwXHU3MDljXHU3MDk2''@;'; put 'put ''XHU3MDlkXHU3MGJiXHU3MGMwXHU3MGI3XHU3MGFiXHU3MGIxXHU3MGU4XHU3MGNhXHU3MTEwXHU3MTEzXHU3MTE2XHU3MTJmXHU3MTMxXHU3MTczXHU3MTVjXHU3MTY4XHU3MTQ1XHU3MTcyXHU3MTRhXHU3MTc4XHU3MTdhXHU3MTk4XHU3MWIzXHU3MWI1XHU3MWE4XHU3MWEwXHU3MWUwXHU3''@;'; put 'put ''MWQ0XHU3MWU3XHU3MWY5XHU3MjFkXHU3MjI4XHU3MDZjXHU3MTE4XHU3MTY2XHU3MWI5XHU2MjNlXHU2MjNkXHU2MjQzXHU2MjQ4XHU2MjQ5XHU3OTNiXHU3OTQwXHU3OTQ2XHU3OTQ5XHU3OTViXHU3OTVjXHU3OTUzXHU3OTVhXHU3OTYyXHU3OTU3XHU3OTYwXHU3OTZmXHU3OTY3XHU3OTdh''@;'; put 'put ''XHU3OTg1XHU3OThhXHU3OTlhXHU3OWE3XHU3OWIzXHU1ZmQxXHU1ZmQwXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjM2XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzZdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjM2XVtwXV09NjA0MTYrcCxiWzYwNDE2K3BdPV9bMjM2XVtwXSk7Zm9y''@;'; put 'put ''KF9bMjM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NzllXHU5NzlmXHU5N2ExXHU5N2EyXHU5N2E0XHU5N2E1XHU5N2E2XHU5N2E3XHU5N2E4XHU5N2E5XHU5N2FhXHU5N2FjXHU5N2FlXHU5N2IwXHU5N2IxXHU5N2IzXHU5N2I1''@;'; put 'put ''XHU5N2I2XHU5N2I3XHU5N2I4XHU5N2I5XHU5N2JhXHU5N2JiXHU5N2JjXHU5N2JkXHU5N2JlXHU5N2JmXHU5N2MwXHU5N2MxXHU5N2MyXHU5N2MzXHU5N2M0XHU5N2M1XHU5N2M2XHU5N2M3XHU5N2M4XHU5N2M5XHU5N2NhXHU5N2NiXHU5N2NjXHU5N2NkXHU5N2NlXHU5N2NmXHU5N2QwXHU5''@;'; put 'put ''N2QxXHU5N2QyXHU5N2QzXHU5N2Q0XHU5N2Q1XHU5N2Q2XHU5N2Q3XHU5N2Q4XHU5N2Q5XHU5N2RhXHU5N2RiXHU5N2RjXHU5N2RkXHU5N2RlXHU5N2RmXHU5N2UwXHU5N2UxXHU5N2UyXHU5N2UzXHVmZmZkXHU5N2U0XHU5N2U1XHU5N2U4XHU5N2VlXHU5N2VmXHU5N2YwXHU5N2YxXHU5N2Yy''@;'; put 'put ''XHU5N2Y0XHU5N2Y3XHU5N2Y4XHU5N2Y5XHU5N2ZhXHU5N2ZiXHU5N2ZjXHU5N2ZkXHU5N2ZlXHU5N2ZmXHU5ODAwXHU5ODAxXHU5ODAyXHU5ODAzXHU5ODA0XHU5ODA1XHU5ODA2XHU5ODA3XHU5ODA4XHU5ODA5XHU5ODBhXHU5ODBiXHU5ODBjXHU5ODBkXHU5ODBlXHU2MDNjXHU2MDVkXHU2''@;'; put 'put ''MDVhXHU2MDY3XHU2MDQxXHU2MDU5XHU2MDYzXHU2MGFiXHU2MTA2XHU2MTBkXHU2MTVkXHU2MWE5XHU2MTlkXHU2MWNiXHU2MWQxXHU2MjA2XHU4MDgwXHU4MDdmXHU2YzkzXHU2Y2Y2XHU2ZGZjXHU3N2Y2XHU3N2Y4XHU3ODAwXHU3ODA5XHU3ODE3XHU3ODE4XHU3ODExXHU2NWFiXHU3ODJk''@;'; put 'put ''XHU3ODFjXHU3ODFkXHU3ODM5XHU3ODNhXHU3ODNiXHU3ODFmXHU3ODNjXHU3ODI1XHU3ODJjXHU3ODIzXHU3ODI5XHU3ODRlXHU3ODZkXHU3ODU2XHU3ODU3XHU3ODI2XHU3ODUwXHU3ODQ3XHU3ODRjXHU3ODZhXHU3ODliXHU3ODkzXHU3ODlhXHU3ODg3XHU3ODljXHU3OGExXHU3OGEzXHU3''@;'; put 'put ''OGIyXHU3OGI5XHU3OGE1XHU3OGQ0XHU3OGQ5XHU3OGM5XHU3OGVjXHU3OGYyXHU3OTA1XHU3OGY0XHU3OTEzXHU3OTI0XHU3OTFlXHU3OTM0XHU5ZjliXHU5ZWY5XHU5ZWZiXHU5ZWZjXHU3NmYxXHU3NzA0XHU3NzBkXHU3NmY5XHU3NzA3XHU3NzA4XHU3NzFhXHU3NzIyXHU3NzE5XHU3NzJk''@;'; put 'put ''XHU3NzI2XHU3NzM1XHU3NzM4XHU3NzUwXHU3NzUxXHU3NzQ3XHU3NzQzXHU3NzVhXHU3NzY4XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjM3XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzddW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjM3XVtwXV09NjA2NzIrcCxiWzYwNjcyK3BdPV9b''@;'; put 'put ''MjM3XVtwXSk7Zm9yKF9bMjM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODBmXHU5ODEwXHU5ODExXHU5ODEyXHU5ODEzXHU5ODE0XHU5ODE1XHU5ODE2XHU5ODE3XHU5ODE4XHU5ODE5XHU5ODFhXHU5ODFiXHU5ODFjXHU5ODFk''@;'; put 'put ''XHU5ODFlXHU5ODFmXHU5ODIwXHU5ODIxXHU5ODIyXHU5ODIzXHU5ODI0XHU5ODI1XHU5ODI2XHU5ODI3XHU5ODI4XHU5ODI5XHU5ODJhXHU5ODJiXHU5ODJjXHU5ODJkXHU5ODJlXHU5ODJmXHU5ODMwXHU5ODMxXHU5ODMyXHU5ODMzXHU5ODM0XHU5ODM1XHU5ODM2XHU5ODM3XHU5ODM4XHU5''@;'; put 'put ''ODM5XHU5ODNhXHU5ODNiXHU5ODNjXHU5ODNkXHU5ODNlXHU5ODNmXHU5ODQwXHU5ODQxXHU5ODQyXHU5ODQzXHU5ODQ0XHU5ODQ1XHU5ODQ2XHU5ODQ3XHU5ODQ4XHU5ODQ5XHU5ODRhXHU5ODRiXHU5ODRjXHU5ODRkXHVmZmZkXHU5ODRlXHU5ODRmXHU5ODUwXHU5ODUxXHU5ODUyXHU5ODUz''@;'; put 'put ''XHU5ODU0XHU5ODU1XHU5ODU2XHU5ODU3XHU5ODU4XHU5ODU5XHU5ODVhXHU5ODViXHU5ODVjXHU5ODVkXHU5ODVlXHU5ODVmXHU5ODYwXHU5ODYxXHU5ODYyXHU5ODYzXHU5ODY0XHU5ODY1XHU5ODY2XHU5ODY3XHU5ODY4XHU5ODY5XHU5ODZhXHU5ODZiXHU5ODZjXHU5ODZkXHU5ODZlXHU3''@;'; put 'put ''NzYyXHU3NzY1XHU3NzdmXHU3NzhkXHU3NzdkXHU3NzgwXHU3NzhjXHU3NzkxXHU3NzlmXHU3N2EwXHU3N2IwXHU3N2I1XHU3N2JkXHU3NTNhXHU3NTQwXHU3NTRlXHU3NTRiXHU3NTQ4XHU3NTViXHU3NTcyXHU3NTc5XHU3NTgzXHU3ZjU4XHU3ZjYxXHU3ZjVmXHU4YTQ4XHU3ZjY4XHU3Zjc0''@;'; put 'put ''XHU3ZjcxXHU3Zjc5XHU3ZjgxXHU3ZjdlXHU3NmNkXHU3NmU1XHU4ODMyXHU5NDg1XHU5NDg2XHU5NDg3XHU5NDhiXHU5NDhhXHU5NDhjXHU5NDhkXHU5NDhmXHU5NDkwXHU5NDk0XHU5NDk3XHU5NDk1XHU5NDlhXHU5NDliXHU5NDljXHU5NGEzXHU5NGE0XHU5NGFiXHU5NGFhXHU5NGFkXHU5''@;'; put 'put ''NGFjXHU5NGFmXHU5NGIwXHU5NGIyXHU5NGI0XHU5NGI2XHU5NGI3XHU5NGI4XHU5NGI5XHU5NGJhXHU5NGJjXHU5NGJkXHU5NGJmXHU5NGM0XHU5NGM4XHU5NGM5XHU5NGNhXHU5NGNiXHU5NGNjXHU5NGNkXHU5NGNlXHU5NGQwXHU5NGQxXHU5NGQyXHU5NGQ1XHU5NGQ2XHU5NGQ3XHU5NGQ5''@;'; put 'put ''XHU5NGQ4XHU5NGRiXHU5NGRlXHU5NGRmXHU5NGUwXHU5NGUyXHU5NGU0XHU5NGU1XHU5NGU3XHU5NGU4XHU5NGVhXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjM4XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzhdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjM4XVtwXV09NjA5MjgrcCxi''@;'; put 'put ''WzYwOTI4K3BdPV9bMjM4XVtwXSk7Zm9yKF9bMjM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODZmXHU5ODcwXHU5ODcxXHU5ODcyXHU5ODczXHU5ODc0XHU5ODhiXHU5ODhlXHU5ODkyXHU5ODk1XHU5ODk5XHU5OGEzXHU5OGE4''@;'; put 'put ''XHU5OGE5XHU5OGFhXHU5OGFiXHU5OGFjXHU5OGFkXHU5OGFlXHU5OGFmXHU5OGIwXHU5OGIxXHU5OGIyXHU5OGIzXHU5OGI0XHU5OGI1XHU5OGI2XHU5OGI3XHU5OGI4XHU5OGI5XHU5OGJhXHU5OGJiXHU5OGJjXHU5OGJkXHU5OGJlXHU5OGJmXHU5OGMwXHU5OGMxXHU5OGMyXHU5OGMzXHU5''@;'; put 'put ''OGM0XHU5OGM1XHU5OGM2XHU5OGM3XHU5OGM4XHU5OGM5XHU5OGNhXHU5OGNiXHU5OGNjXHU5OGNkXHU5OGNmXHU5OGQwXHU5OGQ0XHU5OGQ2XHU5OGQ3XHU5OGRiXHU5OGRjXHU5OGRkXHU5OGUwXHU5OGUxXHU5OGUyXHU5OGUzXHU5OGU0XHVmZmZkXHU5OGU1XHU5OGU2XHU5OGU5XHU5OGVh''@;'; put 'put ''XHU5OGViXHU5OGVjXHU5OGVkXHU5OGVlXHU5OGVmXHU5OGYwXHU5OGYxXHU5OGYyXHU5OGYzXHU5OGY0XHU5OGY1XHU5OGY2XHU5OGY3XHU5OGY4XHU5OGY5XHU5OGZhXHU5OGZiXHU5OGZjXHU5OGZkXHU5OGZlXHU5OGZmXHU5OTAwXHU5OTAxXHU5OTAyXHU5OTAzXHU5OTA0XHU5OTA1XHU5''@;'; put 'put ''OTA2XHU5OTA3XHU5NGU5XHU5NGViXHU5NGVlXHU5NGVmXHU5NGYzXHU5NGY0XHU5NGY1XHU5NGY3XHU5NGY5XHU5NGZjXHU5NGZkXHU5NGZmXHU5NTAzXHU5NTAyXHU5NTA2XHU5NTA3XHU5NTA5XHU5NTBhXHU5NTBkXHU5NTBlXHU5NTBmXHU5NTEyXHU5NTEzXHU5NTE0XHU5NTE1XHU5NTE2''@;'; put 'put ''XHU5NTE4XHU5NTFiXHU5NTFkXHU5NTFlXHU5NTFmXHU5NTIyXHU5NTJhXHU5NTJiXHU5NTI5XHU5NTJjXHU5NTMxXHU5NTMyXHU5NTM0XHU5NTM2XHU5NTM3XHU5NTM4XHU5NTNjXHU5NTNlXHU5NTNmXHU5NTQyXHU5NTM1XHU5NTQ0XHU5NTQ1XHU5NTQ2XHU5NTQ5XHU5NTRjXHU5NTRlXHU5''@;'; put 'put ''NTRmXHU5NTUyXHU5NTUzXHU5NTU0XHU5NTU2XHU5NTU3XHU5NTU4XHU5NTU5XHU5NTViXHU5NTVlXHU5NTVmXHU5NTVkXHU5NTYxXHU5NTYyXHU5NTY0XHU5NTY1XHU5NTY2XHU5NTY3XHU5NTY4XHU5NTY5XHU5NTZhXHU5NTZiXHU5NTZjXHU5NTZmXHU5NTcxXHU5NTcyXHU5NTczXHU5NTNh''@;'; put 'put ''XHU3N2U3XHU3N2VjXHU5NmM5XHU3OWQ1XHU3OWVkXHU3OWUzXHU3OWViXHU3YTA2XHU1ZDQ3XHU3YTAzXHU3YTAyXHU3YTFlXHU3YTE0XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjM5XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzldW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjM5XVtw''@;'; put 'put ''XV09NjExODQrcCxiWzYxMTg0K3BdPV9bMjM5XVtwXSk7Zm9yKF9bMjQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OTA4XHU5OTA5XHU5OTBhXHU5OTBiXHU5OTBjXHU5OTBlXHU5OTBmXHU5OTExXHU5OTEyXHU5OTEzXHU5OTE0''@;'; put 'put ''XHU5OTE1XHU5OTE2XHU5OTE3XHU5OTE4XHU5OTE5XHU5OTFhXHU5OTFiXHU5OTFjXHU5OTFkXHU5OTFlXHU5OTFmXHU5OTIwXHU5OTIxXHU5OTIyXHU5OTIzXHU5OTI0XHU5OTI1XHU5OTI2XHU5OTI3XHU5OTI4XHU5OTI5XHU5OTJhXHU5OTJiXHU5OTJjXHU5OTJkXHU5OTJmXHU5OTMwXHU5''@;'; put 'put ''OTMxXHU5OTMyXHU5OTMzXHU5OTM0XHU5OTM1XHU5OTM2XHU5OTM3XHU5OTM4XHU5OTM5XHU5OTNhXHU5OTNiXHU5OTNjXHU5OTNkXHU5OTNlXHU5OTNmXHU5OTQwXHU5OTQxXHU5OTQyXHU5OTQzXHU5OTQ0XHU5OTQ1XHU5OTQ2XHU5OTQ3XHU5OTQ4XHU5OTQ5XHVmZmZkXHU5OTRhXHU5OTRi''@;'; put 'put ''XHU5OTRjXHU5OTRkXHU5OTRlXHU5OTRmXHU5OTUwXHU5OTUxXHU5OTUyXHU5OTUzXHU5OTU2XHU5OTU3XHU5OTU4XHU5OTU5XHU5OTVhXHU5OTViXHU5OTVjXHU5OTVkXHU5OTVlXHU5OTVmXHU5OTYwXHU5OTYxXHU5OTYyXHU5OTY0XHU5OTY2XHU5OTczXHU5OTc4XHU5OTc5XHU5OTdiXHU5''@;'; put 'put ''OTdlXHU5OTgyXHU5OTgzXHU5OTg5XHU3YTM5XHU3YTM3XHU3YTUxXHU5ZWNmXHU5OWE1XHU3YTcwXHU3Njg4XHU3NjhlXHU3NjkzXHU3Njk5XHU3NmE0XHU3NGRlXHU3NGUwXHU3NTJjXHU5ZTIwXHU5ZTIyXHU5ZTI4XHU5ZTI5XHU5ZTJhXHU5ZTJiXHU5ZTJjXHU5ZTMyXHU5ZTMxXHU5ZTM2''@;'; put 'put ''XHU5ZTM4XHU5ZTM3XHU5ZTM5XHU5ZTNhXHU5ZTNlXHU5ZTQxXHU5ZTQyXHU5ZTQ0XHU5ZTQ2XHU5ZTQ3XHU5ZTQ4XHU5ZTQ5XHU5ZTRiXHU5ZTRjXHU5ZTRlXHU5ZTUxXHU5ZTU1XHU5ZTU3XHU5ZTVhXHU5ZTViXHU5ZTVjXHU5ZTVlXHU5ZTYzXHU5ZTY2XHU5ZTY3XHU5ZTY4XHU5ZTY5XHU5''@;'; put 'put ''ZTZhXHU5ZTZiXHU5ZTZjXHU5ZTcxXHU5ZTZkXHU5ZTczXHU3NTkyXHU3NTk0XHU3NTk2XHU3NWEwXHU3NTlkXHU3NWFjXHU3NWEzXHU3NWIzXHU3NWI0XHU3NWI4XHU3NWM0XHU3NWIxXHU3NWIwXHU3NWMzXHU3NWMyXHU3NWQ2XHU3NWNkXHU3NWUzXHU3NWU4XHU3NWU2XHU3NWU0XHU3NWVi''@;'; put 'put ''XHU3NWU3XHU3NjAzXHU3NWYxXHU3NWZjXHU3NWZmXHU3NjEwXHU3NjAwXHU3NjA1XHU3NjBjXHU3NjE3XHU3NjBhXHU3NjI1XHU3NjE4XHU3NjE1XHU3NjE5XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQwXS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDBdW3BdLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihJW19bMjQwXVtwXV09NjE0NDArcCxiWzYxNDQwK3BdPV9bMjQwXVtwXSk7Zm9yKF9bMjQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OThjXHU5OThlXHU5OTlhXHU5OTliXHU5OTljXHU5OTlkXHU5OTllXHU5OTlmXHU5OWEw''@;'; put 'put ''XHU5OWExXHU5OWEyXHU5OWEzXHU5OWE0XHU5OWE2XHU5OWE3XHU5OWE5XHU5OWFhXHU5OWFiXHU5OWFjXHU5OWFkXHU5OWFlXHU5OWFmXHU5OWIwXHU5OWIxXHU5OWIyXHU5OWIzXHU5OWI0XHU5OWI1XHU5OWI2XHU5OWI3XHU5OWI4XHU5OWI5XHU5OWJhXHU5OWJiXHU5OWJjXHU5OWJkXHU5''@;'; put 'put ''OWJlXHU5OWJmXHU5OWMwXHU5OWMxXHU5OWMyXHU5OWMzXHU5OWM0XHU5OWM1XHU5OWM2XHU5OWM3XHU5OWM4XHU5OWM5XHU5OWNhXHU5OWNiXHU5OWNjXHU5OWNkXHU5OWNlXHU5OWNmXHU5OWQwXHU5OWQxXHU5OWQyXHU5OWQzXHU5OWQ0XHU5OWQ1XHU5OWQ2XHU5OWQ3XHU5OWQ4XHVmZmZk''@;'; put 'put ''XHU5OWQ5XHU5OWRhXHU5OWRiXHU5OWRjXHU5OWRkXHU5OWRlXHU5OWRmXHU5OWUwXHU5OWUxXHU5OWUyXHU5OWUzXHU5OWU0XHU5OWU1XHU5OWU2XHU5OWU3XHU5OWU4XHU5OWU5XHU5OWVhXHU5OWViXHU5OWVjXHU5OWVkXHU5OWVlXHU5OWVmXHU5OWYwXHU5OWYxXHU5OWYyXHU5OWYzXHU5''@;'; put 'put ''OWY0XHU5OWY1XHU5OWY2XHU5OWY3XHU5OWY4XHU5OWY5XHU3NjFiXHU3NjNjXHU3NjIyXHU3NjIwXHU3NjQwXHU3NjJkXHU3NjMwXHU3NjNmXHU3NjM1XHU3NjQzXHU3NjNlXHU3NjMzXHU3NjRkXHU3NjVlXHU3NjU0XHU3NjVjXHU3NjU2XHU3NjZiXHU3NjZmXHU3ZmNhXHU3YWU2XHU3YTc4''@;'; put 'put ''XHU3YTc5XHU3YTgwXHU3YTg2XHU3YTg4XHU3YTk1XHU3YWE2XHU3YWEwXHU3YWFjXHU3YWE4XHU3YWFkXHU3YWIzXHU4ODY0XHU4ODY5XHU4ODcyXHU4ODdkXHU4ODdmXHU4ODgyXHU4OGEyXHU4OGM2XHU4OGI3XHU4OGJjXHU4OGM5XHU4OGUyXHU4OGNlXHU4OGUzXHU4OGU1XHU4OGYxXHU4''@;'; put 'put ''OTFhXHU4OGZjXHU4OGU4XHU4OGZlXHU4OGYwXHU4OTIxXHU4OTE5XHU4OTEzXHU4OTFiXHU4OTBhXHU4OTM0XHU4OTJiXHU4OTM2XHU4OTQxXHU4OTY2XHU4OTdiXHU3NThiXHU4MGU1XHU3NmIyXHU3NmI0XHU3N2RjXHU4MDEyXHU4MDE0XHU4MDE2XHU4MDFjXHU4MDIwXHU4MDIyXHU4MDI1''@;'; put 'put ''XHU4MDI2XHU4MDI3XHU4MDI5XHU4MDI4XHU4MDMxXHU4MDBiXHU4MDM1XHU4MDQzXHU4MDQ2XHU4MDRkXHU4MDUyXHU4MDY5XHU4MDcxXHU4OTgzXHU5ODc4XHU5ODgwXHU5ODgzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQxXS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDFdW3BdLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJihJW19bMjQxXVtwXV09NjE2OTYrcCxiWzYxNjk2K3BdPV9bMjQxXVtwXSk7Zm9yKF9bMjQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OWZhXHU5OWZiXHU5OWZjXHU5OWZkXHU5OWZlXHU5OWZmXHU5YTAw''@;'; put 'put ''XHU5YTAxXHU5YTAyXHU5YTAzXHU5YTA0XHU5YTA1XHU5YTA2XHU5YTA3XHU5YTA4XHU5YTA5XHU5YTBhXHU5YTBiXHU5YTBjXHU5YTBkXHU5YTBlXHU5YTBmXHU5YTEwXHU5YTExXHU5YTEyXHU5YTEzXHU5YTE0XHU5YTE1XHU5YTE2XHU5YTE3XHU5YTE4XHU5YTE5XHU5YTFhXHU5YTFiXHU5''@;'; put 'put ''YTFjXHU5YTFkXHU5YTFlXHU5YTFmXHU5YTIwXHU5YTIxXHU5YTIyXHU5YTIzXHU5YTI0XHU5YTI1XHU5YTI2XHU5YTI3XHU5YTI4XHU5YTI5XHU5YTJhXHU5YTJiXHU5YTJjXHU5YTJkXHU5YTJlXHU5YTJmXHU5YTMwXHU5YTMxXHU5YTMyXHU5YTMzXHU5YTM0XHU5YTM1XHU5YTM2XHU5YTM3''@;'; put 'put ''XHU5YTM4XHVmZmZkXHU5YTM5XHU5YTNhXHU5YTNiXHU5YTNjXHU5YTNkXHU5YTNlXHU5YTNmXHU5YTQwXHU5YTQxXHU5YTQyXHU5YTQzXHU5YTQ0XHU5YTQ1XHU5YTQ2XHU5YTQ3XHU5YTQ4XHU5YTQ5XHU5YTRhXHU5YTRiXHU5YTRjXHU5YTRkXHU5YTRlXHU5YTRmXHU5YTUwXHU5YTUxXHU5''@;'; put 'put ''YTUyXHU5YTUzXHU5YTU0XHU5YTU1XHU5YTU2XHU5YTU3XHU5YTU4XHU5YTU5XHU5ODg5XHU5ODhjXHU5ODhkXHU5ODhmXHU5ODk0XHU5ODlhXHU5ODliXHU5ODllXHU5ODlmXHU5OGExXHU5OGEyXHU5OGE1XHU5OGE2XHU4NjRkXHU4NjU0XHU4NjZjXHU4NjZlXHU4NjdmXHU4NjdhXHU4Njdj''@;'; put 'put ''XHU4NjdiXHU4NmE4XHU4NjhkXHU4NjhiXHU4NmFjXHU4NjlkXHU4NmE3XHU4NmEzXHU4NmFhXHU4NjkzXHU4NmE5XHU4NmI2XHU4NmM0XHU4NmI1XHU4NmNlXHU4NmIwXHU4NmJhXHU4NmIxXHU4NmFmXHU4NmM5XHU4NmNmXHU4NmI0XHU4NmU5XHU4NmYxXHU4NmYyXHU4NmVkXHU4NmYzXHU4''@;'; put 'put ''NmQwXHU4NzEzXHU4NmRlXHU4NmY0XHU4NmRmXHU4NmQ4XHU4NmQxXHU4NzAzXHU4NzA3XHU4NmY4XHU4NzA4XHU4NzBhXHU4NzBkXHU4NzA5XHU4NzIzXHU4NzNiXHU4NzFlXHU4NzI1XHU4NzJlXHU4NzFhXHU4NzNlXHU4NzQ4XHU4NzM0XHU4NzMxXHU4NzI5XHU4NzM3XHU4NzNmXHU4Nzgy''@;'; put 'put ''XHU4NzIyXHU4NzdkXHU4NzdlXHU4NzdiXHU4NzYwXHU4NzcwXHU4NzRjXHU4NzZlXHU4NzhiXHU4NzUzXHU4NzYzXHU4NzdjXHU4NzY0XHU4NzU5XHU4NzY1XHU4NzkzXHU4N2FmXHU4N2E4XHU4N2QyXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQyXS5sZW5ndGg7KytwKTY1NTMzIT09''@;'; put 'put ''X1syNDJdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjQyXVtwXV09NjE5NTIrcCxiWzYxOTUyK3BdPV9bMjQyXVtwXSk7Zm9yKF9bMjQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YTVhXHU5YTViXHU5YTVjXHU5YTVkXHU5YTVl''@;'; put 'put ''XHU5YTVmXHU5YTYwXHU5YTYxXHU5YTYyXHU5YTYzXHU5YTY0XHU5YTY1XHU5YTY2XHU5YTY3XHU5YTY4XHU5YTY5XHU5YTZhXHU5YTZiXHU5YTcyXHU5YTgzXHU5YTg5XHU5YThkXHU5YThlXHU5YTk0XHU5YTk1XHU5YTk5XHU5YWE2XHU5YWE5XHU5YWFhXHU5YWFiXHU5YWFjXHU5YWFkXHU5''@;'; put 'put ''YWFlXHU5YWFmXHU5YWIyXHU5YWIzXHU5YWI0XHU5YWI1XHU5YWI5XHU5YWJiXHU5YWJkXHU5YWJlXHU5YWJmXHU5YWMzXHU5YWM0XHU5YWM2XHU5YWM3XHU5YWM4XHU5YWM5XHU5YWNhXHU5YWNkXHU5YWNlXHU5YWNmXHU5YWQwXHU5YWQyXHU5YWQ0XHU5YWQ1XHU5YWQ2XHU5YWQ3XHU5YWQ5''@;'; put 'put ''XHU5YWRhXHU5YWRiXHU5YWRjXHVmZmZkXHU5YWRkXHU5YWRlXHU5YWUwXHU5YWUyXHU5YWUzXHU5YWU0XHU5YWU1XHU5YWU3XHU5YWU4XHU5YWU5XHU5YWVhXHU5YWVjXHU5YWVlXHU5YWYwXHU5YWYxXHU5YWYyXHU5YWYzXHU5YWY0XHU5YWY1XHU5YWY2XHU5YWY3XHU5YWY4XHU5YWZhXHU5''@;'; put 'put ''YWZjXHU5YWZkXHU5YWZlXHU5YWZmXHU5YjAwXHU5YjAxXHU5YjAyXHU5YjA0XHU5YjA1XHU5YjA2XHU4N2M2XHU4Nzg4XHU4Nzg1XHU4N2FkXHU4Nzk3XHU4NzgzXHU4N2FiXHU4N2U1XHU4N2FjXHU4N2I1XHU4N2IzXHU4N2NiXHU4N2QzXHU4N2JkXHU4N2QxXHU4N2MwXHU4N2NhXHU4N2Ri''@;'; put 'put ''XHU4N2VhXHU4N2UwXHU4N2VlXHU4ODE2XHU4ODEzXHU4N2ZlXHU4ODBhXHU4ODFiXHU4ODIxXHU4ODM5XHU4ODNjXHU3ZjM2XHU3ZjQyXHU3ZjQ0XHU3ZjQ1XHU4MjEwXHU3YWZhXHU3YWZkXHU3YjA4XHU3YjAzXHU3YjA0XHU3YjE1XHU3YjBhXHU3YjJiXHU3YjBmXHU3YjQ3XHU3YjM4XHU3''@;'; put 'put ''YjJhXHU3YjE5XHU3YjJlXHU3YjMxXHU3YjIwXHU3YjI1XHU3YjI0XHU3YjMzXHU3YjNlXHU3YjFlXHU3YjU4XHU3YjVhXHU3YjQ1XHU3Yjc1XHU3YjRjXHU3YjVkXHU3YjYwXHU3YjZlXHU3YjdiXHU3YjYyXHU3YjcyXHU3YjcxXHU3YjkwXHU3YmE2XHU3YmE3XHU3YmI4XHU3YmFjXHU3Yjlk''@;'; put 'put ''XHU3YmE4XHU3Yjg1XHU3YmFhXHU3YjljXHU3YmEyXHU3YmFiXHU3YmI0XHU3YmQxXHU3YmMxXHU3YmNjXHU3YmRkXHU3YmRhXHU3YmU1XHU3YmU2XHU3YmVhXHU3YzBjXHU3YmZlXHU3YmZjXHU3YzBmXHU3YzE2XHU3YzBiXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQzXS5sZW5ndGg7''@;'; put 'put ''KytwKTY1NTMzIT09X1syNDNdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjQzXVtwXV09NjIyMDgrcCxiWzYyMjA4K3BdPV9bMjQzXVtwXSk7Zm9yKF9bMjQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YjA3XHU5YjA5XHU5YjBh''@;'; put 'put ''XHU5YjBiXHU5YjBjXHU5YjBkXHU5YjBlXHU5YjEwXHU5YjExXHU5YjEyXHU5YjE0XHU5YjE1XHU5YjE2XHU5YjE3XHU5YjE4XHU5YjE5XHU5YjFhXHU5YjFiXHU5YjFjXHU5YjFkXHU5YjFlXHU5YjIwXHU5YjIxXHU5YjIyXHU5YjI0XHU5YjI1XHU5YjI2XHU5YjI3XHU5YjI4XHU5YjI5XHU5''@;'; put 'put ''YjJhXHU5YjJiXHU5YjJjXHU5YjJkXHU5YjJlXHU5YjMwXHU5YjMxXHU5YjMzXHU5YjM0XHU5YjM1XHU5YjM2XHU5YjM3XHU5YjM4XHU5YjM5XHU5YjNhXHU5YjNkXHU5YjNlXHU5YjNmXHU5YjQwXHU5YjQ2XHU5YjRhXHU5YjRiXHU5YjRjXHU5YjRlXHU5YjUwXHU5YjUyXHU5YjUzXHU5YjU1''@;'; put 'put ''XHU5YjU2XHU5YjU3XHU5YjU4XHU5YjU5XHU5YjVhXHVmZmZkXHU5YjViXHU5YjVjXHU5YjVkXHU5YjVlXHU5YjVmXHU5YjYwXHU5YjYxXHU5YjYyXHU5YjYzXHU5YjY0XHU5YjY1XHU5YjY2XHU5YjY3XHU5YjY4XHU5YjY5XHU5YjZhXHU5YjZiXHU5YjZjXHU5YjZkXHU5YjZlXHU5YjZmXHU5''@;'; put 'put ''YjcwXHU5YjcxXHU5YjcyXHU5YjczXHU5Yjc0XHU5Yjc1XHU5Yjc2XHU5Yjc3XHU5Yjc4XHU5Yjc5XHU5YjdhXHU5YjdiXHU3YzFmXHU3YzJhXHU3YzI2XHU3YzM4XHU3YzQxXHU3YzQwXHU4MWZlXHU4MjAxXHU4MjAyXHU4MjA0XHU4MWVjXHU4ODQ0XHU4MjIxXHU4MjIyXHU4MjIzXHU4MjJk''@;'; put 'put ''XHU4MjJmXHU4MjI4XHU4MjJiXHU4MjM4XHU4MjNiXHU4MjMzXHU4MjM0XHU4MjNlXHU4MjQ0XHU4MjQ5XHU4MjRiXHU4MjRmXHU4MjVhXHU4MjVmXHU4MjY4XHU4ODdlXHU4ODg1XHU4ODg4XHU4OGQ4XHU4OGRmXHU4OTVlXHU3ZjlkXHU3ZjlmXHU3ZmE3XHU3ZmFmXHU3ZmIwXHU3ZmIyXHU3''@;'; put 'put ''YzdjXHU2NTQ5XHU3YzkxXHU3YzlkXHU3YzljXHU3YzllXHU3Y2EyXHU3Y2IyXHU3Y2JjXHU3Y2JkXHU3Y2MxXHU3Y2M3XHU3Y2NjXHU3Y2NkXHU3Y2M4XHU3Y2M1XHU3Y2Q3XHU3Y2U4XHU4MjZlXHU2NmE4XHU3ZmJmXHU3ZmNlXHU3ZmQ1XHU3ZmU1XHU3ZmUxXHU3ZmU2XHU3ZmU5XHU3ZmVl''@;'; put 'put ''XHU3ZmYzXHU3Y2Y4XHU3ZDc3XHU3ZGE2XHU3ZGFlXHU3ZTQ3XHU3ZTliXHU5ZWI4XHU5ZWI0XHU4ZDczXHU4ZDg0XHU4ZDk0XHU4ZDkxXHU4ZGIxXHU4ZDY3XHU4ZDZkXHU4YzQ3XHU4YzQ5XHU5MTRhXHU5MTUwXHU5MTRlXHU5MTRmXHU5MTY0XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9b''@;'; put 'put ''MjQ0XS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDRdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ0XVtwXV09NjI0NjQrcCxiWzYyNDY0K3BdPV9bMjQ0XVtwXSk7Zm9yKF9bMjQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5Yjdj''@;'; put 'put ''XHU5YjdkXHU5YjdlXHU5YjdmXHU5YjgwXHU5YjgxXHU5YjgyXHU5YjgzXHU5Yjg0XHU5Yjg1XHU5Yjg2XHU5Yjg3XHU5Yjg4XHU5Yjg5XHU5YjhhXHU5YjhiXHU5YjhjXHU5YjhkXHU5YjhlXHU5YjhmXHU5YjkwXHU5YjkxXHU5YjkyXHU5YjkzXHU5Yjk0XHU5Yjk1XHU5Yjk2XHU5Yjk3XHU5''@;'; put 'put ''Yjk4XHU5Yjk5XHU5YjlhXHU5YjliXHU5YjljXHU5YjlkXHU5YjllXHU5YjlmXHU5YmEwXHU5YmExXHU5YmEyXHU5YmEzXHU5YmE0XHU5YmE1XHU5YmE2XHU5YmE3XHU5YmE4XHU5YmE5XHU5YmFhXHU5YmFiXHU5YmFjXHU5YmFkXHU5YmFlXHU5YmFmXHU5YmIwXHU5YmIxXHU5YmIyXHU5YmIz''@;'; put 'put ''XHU5YmI0XHU5YmI1XHU5YmI2XHU5YmI3XHU5YmI4XHU5YmI5XHU5YmJhXHVmZmZkXHU5YmJiXHU5YmJjXHU5YmJkXHU5YmJlXHU5YmJmXHU5YmMwXHU5YmMxXHU5YmMyXHU5YmMzXHU5YmM0XHU5YmM1XHU5YmM2XHU5YmM3XHU5YmM4XHU5YmM5XHU5YmNhXHU5YmNiXHU5YmNjXHU5YmNkXHU5''@;'; put 'put ''YmNlXHU5YmNmXHU5YmQwXHU5YmQxXHU5YmQyXHU5YmQzXHU5YmQ0XHU5YmQ1XHU5YmQ2XHU5YmQ3XHU5YmQ4XHU5YmQ5XHU5YmRhXHU5YmRiXHU5MTYyXHU5MTYxXHU5MTcwXHU5MTY5XHU5MTZmXHU5MTdkXHU5MTdlXHU5MTcyXHU5MTc0XHU5MTc5XHU5MThjXHU5MTg1XHU5MTkwXHU5MThk''@;'; put 'put ''XHU5MTkxXHU5MWEyXHU5MWEzXHU5MWFhXHU5MWFkXHU5MWFlXHU5MWFmXHU5MWI1XHU5MWI0XHU5MWJhXHU4YzU1XHU5ZTdlXHU4ZGI4XHU4ZGViXHU4ZTA1XHU4ZTU5XHU4ZTY5XHU4ZGI1XHU4ZGJmXHU4ZGJjXHU4ZGJhXHU4ZGM0XHU4ZGQ2XHU4ZGQ3XHU4ZGRhXHU4ZGRlXHU4ZGNlXHU4''@;'; put 'put ''ZGNmXHU4ZGRiXHU4ZGM2XHU4ZGVjXHU4ZGY3XHU4ZGY4XHU4ZGUzXHU4ZGY5XHU4ZGZiXHU4ZGU0XHU4ZTA5XHU4ZGZkXHU4ZTE0XHU4ZTFkXHU4ZTFmXHU4ZTJjXHU4ZTJlXHU4ZTIzXHU4ZTJmXHU4ZTNhXHU4ZTQwXHU4ZTM5XHU4ZTM1XHU4ZTNkXHU4ZTMxXHU4ZTQ5XHU4ZTQxXHU4ZTQy''@;'; put 'put ''XHU4ZTUxXHU4ZTUyXHU4ZTRhXHU4ZTcwXHU4ZTc2XHU4ZTdjXHU4ZTZmXHU4ZTc0XHU4ZTg1XHU4ZThmXHU4ZTk0XHU4ZTkwXHU4ZTljXHU4ZTllXHU4Yzc4XHU4YzgyXHU4YzhhXHU4Yzg1XHU4Yzk4XHU4Yzk0XHU2NTliXHU4OWQ2XHU4OWRlXHU4OWRhXHU4OWRjXHVmZmZkIi5zcGxpdCgi''@;'; put 'put ''IikscD0wO3AhPV9bMjQ1XS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDVdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ1XVtwXV09NjI3MjArcCxiWzYyNzIwK3BdPV9bMjQ1XVtwXSk7Zm9yKF9bMjQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHU5YmRjXHU5YmRkXHU5YmRlXHU5YmRmXHU5YmUwXHU5YmUxXHU5YmUyXHU5YmUzXHU5YmU0XHU5YmU1XHU5YmU2XHU5YmU3XHU5YmU4XHU5YmU5XHU5YmVhXHU5YmViXHU5YmVjXHU5YmVkXHU5YmVlXHU5YmVmXHU5YmYwXHU5YmYxXHU5YmYyXHU5YmYzXHU5YmY0XHU5YmY1XHU5''@;'; put 'put ''YmY2XHU5YmY3XHU5YmY4XHU5YmY5XHU5YmZhXHU5YmZiXHU5YmZjXHU5YmZkXHU5YmZlXHU5YmZmXHU5YzAwXHU5YzAxXHU5YzAyXHU5YzAzXHU5YzA0XHU5YzA1XHU5YzA2XHU5YzA3XHU5YzA4XHU5YzA5XHU5YzBhXHU5YzBiXHU5YzBjXHU5YzBkXHU5YzBlXHU5YzBmXHU5YzEwXHU5YzEx''@;'; put 'put ''XHU5YzEyXHU5YzEzXHU5YzE0XHU5YzE1XHU5YzE2XHU5YzE3XHU5YzE4XHU5YzE5XHU5YzFhXHVmZmZkXHU5YzFiXHU5YzFjXHU5YzFkXHU5YzFlXHU5YzFmXHU5YzIwXHU5YzIxXHU5YzIyXHU5YzIzXHU5YzI0XHU5YzI1XHU5YzI2XHU5YzI3XHU5YzI4XHU5YzI5XHU5YzJhXHU5YzJiXHU5''@;'; put 'put ''YzJjXHU5YzJkXHU5YzJlXHU5YzJmXHU5YzMwXHU5YzMxXHU5YzMyXHU5YzMzXHU5YzM0XHU5YzM1XHU5YzM2XHU5YzM3XHU5YzM4XHU5YzM5XHU5YzNhXHU5YzNiXHU4OWU1XHU4OWViXHU4OWVmXHU4YTNlXHU4YjI2XHU5NzUzXHU5NmU5XHU5NmYzXHU5NmVmXHU5NzA2XHU5NzAxXHU5NzA4''@;'; put 'put ''XHU5NzBmXHU5NzBlXHU5NzJhXHU5NzJkXHU5NzMwXHU5NzNlXHU5ZjgwXHU5ZjgzXHU5Zjg1XHU5Zjg2XHU5Zjg3XHU5Zjg4XHU5Zjg5XHU5ZjhhXHU5ZjhjXHU5ZWZlXHU5ZjBiXHU5ZjBkXHU5NmI5XHU5NmJjXHU5NmJkXHU5NmNlXHU5NmQyXHU3N2JmXHU5NmUwXHU5MjhlXHU5MmFlXHU5''@;'; put 'put ''MmM4XHU5MzNlXHU5MzZhXHU5M2NhXHU5MzhmXHU5NDNlXHU5NDZiXHU5YzdmXHU5YzgyXHU5Yzg1XHU5Yzg2XHU5Yzg3XHU5Yzg4XHU3YTIzXHU5YzhiXHU5YzhlXHU5YzkwXHU5YzkxXHU5YzkyXHU5Yzk0XHU5Yzk1XHU5YzlhXHU5YzliXHU5YzllXHU5YzlmXHU5Y2EwXHU5Y2ExXHU5Y2Ey''@;'; put 'put ''XHU5Y2EzXHU5Y2E1XHU5Y2E2XHU5Y2E3XHU5Y2E4XHU5Y2E5XHU5Y2FiXHU5Y2FkXHU5Y2FlXHU5Y2IwXHU5Y2IxXHU5Y2IyXHU5Y2IzXHU5Y2I0XHU5Y2I1XHU5Y2I2XHU5Y2I3XHU5Y2JhXHU5Y2JiXHU5Y2JjXHU5Y2JkXHU5Y2M0XHU5Y2M1XHU5Y2M2XHU5Y2M3XHU5Y2NhXHU5Y2NiXHVm''@;'; put 'put ''ZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQ2XS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDZdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ2XVtwXV09NjI5NzYrcCxiWzYyOTc2K3BdPV9bMjQ2XVtwXSk7Zm9yKF9bMjQ3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHU5YzNjXHU5YzNkXHU5YzNlXHU5YzNmXHU5YzQwXHU5YzQxXHU5YzQyXHU5YzQzXHU5YzQ0XHU5YzQ1XHU5YzQ2XHU5YzQ3XHU5YzQ4XHU5YzQ5XHU5YzRhXHU5YzRiXHU5YzRjXHU5YzRkXHU5YzRlXHU5YzRmXHU5YzUwXHU5YzUxXHU5YzUyXHU5YzUzXHU5''@;'; put 'put ''YzU0XHU5YzU1XHU5YzU2XHU5YzU3XHU5YzU4XHU5YzU5XHU5YzVhXHU5YzViXHU5YzVjXHU5YzVkXHU5YzVlXHU5YzVmXHU5YzYwXHU5YzYxXHU5YzYyXHU5YzYzXHU5YzY0XHU5YzY1XHU5YzY2XHU5YzY3XHU5YzY4XHU5YzY5XHU5YzZhXHU5YzZiXHU5YzZjXHU5YzZkXHU5YzZlXHU5YzZm''@;'; put 'put ''XHU5YzcwXHU5YzcxXHU5YzcyXHU5YzczXHU5Yzc0XHU5Yzc1XHU5Yzc2XHU5Yzc3XHU5Yzc4XHU5Yzc5XHU5YzdhXHVmZmZkXHU5YzdiXHU5YzdkXHU5YzdlXHU5YzgwXHU5YzgzXHU5Yzg0XHU5Yzg5XHU5YzhhXHU5YzhjXHU5YzhmXHU5YzkzXHU5Yzk2XHU5Yzk3XHU5Yzk4XHU5Yzk5XHU5''@;'; put 'put ''YzlkXHU5Y2FhXHU5Y2FjXHU5Y2FmXHU5Y2I5XHU5Y2JlXHU5Y2JmXHU5Y2MwXHU5Y2MxXHU5Y2MyXHU5Y2M4XHU5Y2M5XHU5Y2QxXHU5Y2QyXHU5Y2RhXHU5Y2RiXHU5Y2UwXHU5Y2UxXHU5Y2NjXHU5Y2NkXHU5Y2NlXHU5Y2NmXHU5Y2QwXHU5Y2QzXHU5Y2Q0XHU5Y2Q1XHU5Y2Q3XHU5Y2Q4''@;'; put 'put ''XHU5Y2Q5XHU5Y2RjXHU5Y2RkXHU5Y2RmXHU5Y2UyXHU5NzdjXHU5Nzg1XHU5NzkxXHU5NzkyXHU5Nzk0XHU5N2FmXHU5N2FiXHU5N2EzXHU5N2IyXHU5N2I0XHU5YWIxXHU5YWIwXHU5YWI3XHU5ZTU4XHU5YWI2XHU5YWJhXHU5YWJjXHU5YWMxXHU5YWMwXHU5YWM1XHU5YWMyXHU5YWNiXHU5''@;'; put 'put ''YWNjXHU5YWQxXHU5YjQ1XHU5YjQzXHU5YjQ3XHU5YjQ5XHU5YjQ4XHU5YjRkXHU5YjUxXHU5OGU4XHU5OTBkXHU5OTJlXHU5OTU1XHU5OTU0XHU5YWRmXHU5YWUxXHU5YWU2XHU5YWVmXHU5YWViXHU5YWZiXHU5YWVkXHU5YWY5XHU5YjA4XHU5YjBmXHU5YjEzXHU5YjFmXHU5YjIzXHU5ZWJk''@;'; put 'put ''XHU5ZWJlXHU3ZTNiXHU5ZTgyXHU5ZTg3XHU5ZTg4XHU5ZThiXHU5ZTkyXHU5M2Q2XHU5ZTlkXHU5ZTlmXHU5ZWRiXHU5ZWRjXHU5ZWRkXHU5ZWUwXHU5ZWRmXHU5ZWUyXHU5ZWU5XHU5ZWU3XHU5ZWU1XHU5ZWVhXHU5ZWVmXHU5ZjIyXHU5ZjJjXHU5ZjJmXHU5ZjM5XHU5ZjM3XHU5ZjNkXHU5''@;'; put 'put ''ZjNlXHU5ZjQ0XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQ3XS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDddW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ3XVtwXV09NjMyMzIrcCxiWzYzMjMyK3BdPV9bMjQ3XVtwXSk7Zm9yKF9bMjQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5Y2UzXHU5Y2U0XHU5Y2U1XHU5Y2U2XHU5Y2U3XHU5Y2U4XHU5Y2U5XHU5Y2VhXHU5Y2ViXHU5Y2VjXHU5Y2VkXHU5Y2VlXHU5Y2VmXHU5Y2YwXHU5Y2YxXHU5Y2YyXHU5Y2YzXHU5Y2Y0XHU5Y2Y1XHU5Y2Y2XHU5Y2Y3XHU5Y2Y4XHU5''@;'; put 'put ''Y2Y5XHU5Y2ZhXHU5Y2ZiXHU5Y2ZjXHU5Y2ZkXHU5Y2ZlXHU5Y2ZmXHU5ZDAwXHU5ZDAxXHU5ZDAyXHU5ZDAzXHU5ZDA0XHU5ZDA1XHU5ZDA2XHU5ZDA3XHU5ZDA4XHU5ZDA5XHU5ZDBhXHU5ZDBiXHU5ZDBjXHU5ZDBkXHU5ZDBlXHU5ZDBmXHU5ZDEwXHU5ZDExXHU5ZDEyXHU5ZDEzXHU5ZDE0''@;'; put 'put ''XHU5ZDE1XHU5ZDE2XHU5ZDE3XHU5ZDE4XHU5ZDE5XHU5ZDFhXHU5ZDFiXHU5ZDFjXHU5ZDFkXHU5ZDFlXHU5ZDFmXHU5ZDIwXHU5ZDIxXHVmZmZkXHU5ZDIyXHU5ZDIzXHU5ZDI0XHU5ZDI1XHU5ZDI2XHU5ZDI3XHU5ZDI4XHU5ZDI5XHU5ZDJhXHU5ZDJiXHU5ZDJjXHU5ZDJkXHU5ZDJlXHU5''@;'; put 'put ''ZDJmXHU5ZDMwXHU5ZDMxXHU5ZDMyXHU5ZDMzXHU5ZDM0XHU5ZDM1XHU5ZDM2XHU5ZDM3XHU5ZDM4XHU5ZDM5XHU5ZDNhXHU5ZDNiXHU5ZDNjXHU5ZDNkXHU5ZDNlXHU5ZDNmXHU5ZDQwXHU5ZDQxXHU5ZDQyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQ4XS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDhdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ4XVtwXV09NjM0ODgrcCxiWzYzNDg4K3BdPV9bMjQ4XVtwXSk7Zm9yKF9bMjQ5XT0iXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZDQzXHU5ZDQ0XHU5ZDQ1XHU5ZDQ2XHU5ZDQ3XHU5ZDQ4XHU5ZDQ5XHU5ZDRhXHU5ZDRiXHU5ZDRjXHU5ZDRkXHU5ZDRlXHU5ZDRmXHU5ZDUwXHU5ZDUxXHU5ZDUyXHU5ZDUzXHU5ZDU0XHU5ZDU1XHU5ZDU2XHU5''@;'; put 'put ''ZDU3XHU5ZDU4XHU5ZDU5XHU5ZDVhXHU5ZDViXHU5ZDVjXHU5ZDVkXHU5ZDVlXHU5ZDVmXHU5ZDYwXHU5ZDYxXHU5ZDYyXHU5ZDYzXHU5ZDY0XHU5ZDY1XHU5ZDY2XHU5ZDY3XHU5ZDY4XHU5ZDY5XHU5ZDZhXHU5ZDZiXHU5ZDZjXHU5ZDZkXHU5ZDZlXHU5ZDZmXHU5ZDcwXHU5ZDcxXHU5ZDcy''@;'; put 'put ''XHU5ZDczXHU5ZDc0XHU5ZDc1XHU5ZDc2XHU5ZDc3XHU5ZDc4XHU5ZDc5XHU5ZDdhXHU5ZDdiXHU5ZDdjXHU5ZDdkXHU5ZDdlXHU5ZDdmXHU5ZDgwXHU5ZDgxXHVmZmZkXHU5ZDgyXHU5ZDgzXHU5ZDg0XHU5ZDg1XHU5ZDg2XHU5ZDg3XHU5ZDg4XHU5ZDg5XHU5ZDhhXHU5ZDhiXHU5ZDhjXHU5''@;'; put 'put ''ZDhkXHU5ZDhlXHU5ZDhmXHU5ZDkwXHU5ZDkxXHU5ZDkyXHU5ZDkzXHU5ZDk0XHU5ZDk1XHU5ZDk2XHU5ZDk3XHU5ZDk4XHU5ZDk5XHU5ZDlhXHU5ZDliXHU5ZDljXHU5ZDlkXHU5ZDllXHU5ZDlmXHU5ZGEwXHU5ZGExXHU5ZGEyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQ5XS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDldW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ5XVtwXV09NjM3NDQrcCxiWzYzNzQ0K3BdPV9bMjQ5XVtwXSk7Zm9yKF9bMjUwXT0i''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZGEzXHU5ZGE0XHU5ZGE1XHU5ZGE2XHU5ZGE3XHU5ZGE4XHU5ZGE5XHU5ZGFhXHU5ZGFiXHU5ZGFjXHU5ZGFkXHU5ZGFlXHU5ZGFmXHU5ZGIwXHU5ZGIxXHU5ZGIyXHU5ZGIzXHU5ZGI0XHU5''@;'; put 'put ''ZGI1XHU5ZGI2XHU5ZGI3XHU5ZGI4XHU5ZGI5XHU5ZGJhXHU5ZGJiXHU5ZGJjXHU5ZGJkXHU5ZGJlXHU5ZGJmXHU5ZGMwXHU5ZGMxXHU5ZGMyXHU5ZGMzXHU5ZGM0XHU5ZGM1XHU5ZGM2XHU5ZGM3XHU5ZGM4XHU5ZGM5XHU5ZGNhXHU5ZGNiXHU5ZGNjXHU5ZGNkXHU5ZGNlXHU5ZGNmXHU5ZGQw''@;'; put 'put ''XHU5ZGQxXHU5ZGQyXHU5ZGQzXHU5ZGQ0XHU5ZGQ1XHU5ZGQ2XHU5ZGQ3XHU5ZGQ4XHU5ZGQ5XHU5ZGRhXHU5ZGRiXHU5ZGRjXHU5ZGRkXHU5ZGRlXHU5ZGRmXHU5ZGUwXHU5ZGUxXHVmZmZkXHU5ZGUyXHU5ZGUzXHU5ZGU0XHU5ZGU1XHU5ZGU2XHU5ZGU3XHU5ZGU4XHU5ZGU5XHU5ZGVhXHU5''@;'; put 'put ''ZGViXHU5ZGVjXHU5ZGVkXHU5ZGVlXHU5ZGVmXHU5ZGYwXHU5ZGYxXHU5ZGYyXHU5ZGYzXHU5ZGY0XHU5ZGY1XHU5ZGY2XHU5ZGY3XHU5ZGY4XHU5ZGY5XHU5ZGZhXHU5ZGZiXHU5ZGZjXHU5ZGZkXHU5ZGZlXHU5ZGZmXHU5ZTAwXHU5ZTAxXHU5ZTAyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjUwXS5sZW5ndGg7KytwKTY1NTMzIT09X1syNTBdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjUwXVtwXV09NjRlMytwLGJbNjRlMytwXT1fWzI1MF1bcF0pO2Zv''@;'; put 'put ''cihfWzI1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWUwM1x1OWUwNFx1OWUwNVx1OWUwNlx1OWUwN1x1OWUwOFx1OWUwOVx1OWUwYVx1OWUwYlx1OWUwY1x1OWUwZFx1OWUwZVx1OWUwZlx1OWUxMFx1OWUxMVx1OWUxMlx1OWUx''@;'; put 'put ''M1x1OWUxNFx1OWUxNVx1OWUxNlx1OWUxN1x1OWUxOFx1OWUxOVx1OWUxYVx1OWUxYlx1OWUxY1x1OWUxZFx1OWUxZVx1OWUyNFx1OWUyN1x1OWUyZVx1OWUzMFx1OWUzNFx1OWUzYlx1OWUzY1x1OWU0MFx1OWU0ZFx1OWU1MFx1OWU1Mlx1OWU1M1x1OWU1NFx1OWU1Nlx1OWU1OVx1OWU1ZFx1''@;'; put 'put ''OWU1Zlx1OWU2MFx1OWU2MVx1OWU2Mlx1OWU2NVx1OWU2ZVx1OWU2Zlx1OWU3Mlx1OWU3NFx1OWU3NVx1OWU3Nlx1OWU3N1x1OWU3OFx1OWU3OVx1OWU3YVx1OWU3Ylx1OWU3Y1x1OWU3ZFx1OWU4MFx1ZmZmZFx1OWU4MVx1OWU4M1x1OWU4NFx1OWU4NVx1OWU4Nlx1OWU4OVx1OWU4YVx1OWU4''@;'; put 'put ''Y1x1OWU4ZFx1OWU4ZVx1OWU4Zlx1OWU5MFx1OWU5MVx1OWU5NFx1OWU5NVx1OWU5Nlx1OWU5N1x1OWU5OFx1OWU5OVx1OWU5YVx1OWU5Ylx1OWU5Y1x1OWU5ZVx1OWVhMFx1OWVhMVx1OWVhMlx1OWVhM1x1OWVhNFx1OWVhNVx1OWVhN1x1OWVhOFx1OWVhOVx1OWVhYVx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI1MV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjUxXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI1MV1bcF1dPTY0MjU2K3AsYls2NDI1NitwXT1f''@;'; put 'put ''WzI1MV1bcF0pO2ZvcihfWzI1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWVhYlx1OWVhY1x1OWVhZFx1OWVhZVx1OWVhZlx1OWViMFx1OWViMVx1OWViMlx1OWViM1x1OWViNVx1OWViNlx1OWViN1x1OWViOVx1OWViYVx1OWVi''@;'; put 'put ''Y1x1OWViZlx1OWVjMFx1OWVjMVx1OWVjMlx1OWVjM1x1OWVjNVx1OWVjNlx1OWVjN1x1OWVjOFx1OWVjYVx1OWVjYlx1OWVjY1x1OWVkMFx1OWVkMlx1OWVkM1x1OWVkNVx1OWVkNlx1OWVkN1x1OWVkOVx1OWVkYVx1OWVkZVx1OWVlMVx1OWVlM1x1OWVlNFx1OWVlNlx1OWVlOFx1OWVlYlx1''@;'; put 'put ''OWVlY1x1OWVlZFx1OWVlZVx1OWVmMFx1OWVmMVx1OWVmMlx1OWVmM1x1OWVmNFx1OWVmNVx1OWVmNlx1OWVmN1x1OWVmOFx1OWVmYVx1OWVmZFx1OWVmZlx1OWYwMFx1OWYwMVx1OWYwMlx1OWYwM1x1OWYwNFx1OWYwNVx1ZmZmZFx1OWYwNlx1OWYwN1x1OWYwOFx1OWYwOVx1OWYwYVx1OWYw''@;'; put 'put ''Y1x1OWYwZlx1OWYxMVx1OWYxMlx1OWYxNFx1OWYxNVx1OWYxNlx1OWYxOFx1OWYxYVx1OWYxYlx1OWYxY1x1OWYxZFx1OWYxZVx1OWYxZlx1OWYyMVx1OWYyM1x1OWYyNFx1OWYyNVx1OWYyNlx1OWYyN1x1OWYyOFx1OWYyOVx1OWYyYVx1OWYyYlx1OWYyZFx1OWYyZVx1OWYzMFx1OWYzMVx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI1Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjUyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI1Ml1bcF1dPTY0NTEyK3As''@;'; put 'put ''Yls2NDUxMitwXT1fWzI1Ml1bcF0pO2ZvcihfWzI1M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWYzMlx1OWYzM1x1OWYzNFx1OWYzNVx1OWYzNlx1OWYzOFx1OWYzYVx1OWYzY1x1OWYzZlx1OWY0MFx1OWY0MVx1OWY0Mlx1OWY0''@;'; put 'put ''M1x1OWY0NVx1OWY0Nlx1OWY0N1x1OWY0OFx1OWY0OVx1OWY0YVx1OWY0Ylx1OWY0Y1x1OWY0ZFx1OWY0ZVx1OWY0Zlx1OWY1Mlx1OWY1M1x1OWY1NFx1OWY1NVx1OWY1Nlx1OWY1N1x1OWY1OFx1OWY1OVx1OWY1YVx1OWY1Ylx1OWY1Y1x1OWY1ZFx1OWY1ZVx1OWY1Zlx1OWY2MFx1OWY2MVx1''@;'; put 'put ''OWY2Mlx1OWY2M1x1OWY2NFx1OWY2NVx1OWY2Nlx1OWY2N1x1OWY2OFx1OWY2OVx1OWY2YVx1OWY2Ylx1OWY2Y1x1OWY2ZFx1OWY2ZVx1OWY2Zlx1OWY3MFx1OWY3MVx1OWY3Mlx1OWY3M1x1OWY3NFx1OWY3NVx1OWY3Nlx1OWY3N1x1OWY3OFx1ZmZmZFx1OWY3OVx1OWY3YVx1OWY3Ylx1OWY3''@;'; put 'put ''Y1x1OWY3ZFx1OWY3ZVx1OWY4MVx1OWY4Mlx1OWY4ZFx1OWY4ZVx1OWY4Zlx1OWY5MFx1OWY5MVx1OWY5Mlx1OWY5M1x1OWY5NFx1OWY5NVx1OWY5Nlx1OWY5N1x1OWY5OFx1OWY5Y1x1OWY5ZFx1OWY5ZVx1OWZhMVx1OWZhMlx1OWZhM1x1OWZhNFx1OWZhNVx1ZjkyY1x1Zjk3OVx1Zjk5NVx1''@;'; put 'put ''ZjllN1x1ZjlmMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI1M10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjUzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI1M11b''@;'; put 'put ''cF1dPTY0NzY4K3AsYls2NDc2OCtwXT1fWzI1M11bcF0pO2ZvcihfWzI1NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmEwY1x1ZmEwZFx1ZmEwZVx1ZmEwZlx1ZmExMVx1ZmExM1x1ZmExNFx1ZmExOFx1ZmExZlx1ZmEyMFx1ZmEy''@;'; put 'put ''MVx1ZmEyM1x1ZmEyNFx1ZmEyN1x1ZmEyOFx1ZmEyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI1NF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjU0XVtwXS5jaGFyQ29kZUF0KDAp''@;'; put 'put ''JiYoSVtfWzI1NF1bcF1dPTY1MDI0K3AsYls2NTAyNCtwXT1fWzI1NF1bcF0pO3JldHVybntlbmM6SSxkZWM6Yn19KCksWFs5NDldPWZ1bmN0aW9uKCl7dmFyIHAsYj1bXSxJPXt9LF89W107Zm9yKF9bMF09IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVc''@;'; put 'put ''eDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5c''@;'; put 'put ''eDdmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMF1bcF0uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKElbX1swXVtwXV09MCtwLGJbMCtwXT1fWzBdW3BdKTtmb3IoX1sxMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFjMDJcdWFjMDNcdWFjMDVcdWFjMDZcdWFjMGJcdWFjMGNcdWFjMGRcdWFjMGVc''@;'; put 'put ''dWFjMGZcdWFjMThcdWFjMWVcdWFjMWZcdWFjMjFcdWFjMjJcdWFjMjNcdWFjMjVcdWFjMjZcdWFjMjdcdWFjMjhcdWFjMjlcdWFjMmFcdWFjMmJcdWFjMmVcdWFjMzJcdWFjMzNcdWFjMzRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFjMzVcdWFjMzZcdWFjMzdcdWFj''@;'; put 'put ''M2FcdWFjM2JcdWFjM2RcdWFjM2VcdWFjM2ZcdWFjNDFcdWFjNDJcdWFjNDNcdWFjNDRcdWFjNDVcdWFjNDZcdWFjNDdcdWFjNDhcdWFjNDlcdWFjNGFcdWFjNGNcdWFjNGVcdWFjNGZcdWFjNTBcdWFjNTFcdWFjNTJcdWFjNTNcdWFjNTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWFjNTZcdWFjNTdcdWFjNTlcdWFjNWFcdWFjNWJcdWFjNWRcdWFjNWVcdWFjNWZcdWFjNjBcdWFjNjFcdWFjNjJcdWFjNjNcdWFjNjRcdWFjNjVcdWFjNjZcdWFjNjdcdWFjNjhcdWFjNjlcdWFjNmFcdWFjNmJcdWFjNmNcdWFjNmRcdWFjNmVcdWFjNmZcdWFjNzJcdWFjNzNcdWFj''@;'; put 'put ''NzVcdWFjNzZcdWFjNzlcdWFjN2JcdWFjN2NcdWFjN2RcdWFjN2VcdWFjN2ZcdWFjODJcdWFjODdcdWFjODhcdWFjOGRcdWFjOGVcdWFjOGZcdWFjOTFcdWFjOTJcdWFjOTNcdWFjOTVcdWFjOTZcdWFjOTdcdWFjOThcdWFjOTlcdWFjOWFcdWFjOWJcdWFjOWVcdWFjYTJcdWFjYTNcdWFjYTRc''@;'; put 'put ''dWFjYTVcdWFjYTZcdWFjYTdcdWFjYWJcdWFjYWRcdWFjYWVcdWFjYjFcdWFjYjJcdWFjYjNcdWFjYjRcdWFjYjVcdWFjYjZcdWFjYjdcdWFjYmFcdWFjYmVcdWFjYmZcdWFjYzBcdWFjYzJcdWFjYzNcdWFjYzVcdWFjYzZcdWFjYzdcdWFjYzlcdWFjY2FcdWFjY2JcdWFjY2RcdWFjY2VcdWFj''@;'; put 'put ''Y2ZcdWFjZDBcdWFjZDFcdWFjZDJcdWFjZDNcdWFjZDRcdWFjZDZcdWFjZDhcdWFjZDlcdWFjZGFcdWFjZGJcdWFjZGNcdWFjZGRcdWFjZGVcdWFjZGZcdWFjZTJcdWFjZTNcdWFjZTVcdWFjZTZcdWFjZTlcdWFjZWJcdWFjZWRcdWFjZWVcdWFjZjJcdWFjZjRcdWFjZjdcdWFjZjhcdWFjZjlc''@;'; put 'put ''dWFjZmFcdWFjZmJcdWFjZmVcdWFjZmZcdWFkMDFcdWFkMDJcdWFkMDNcdWFkMDVcdWFkMDdcdWFkMDhcdWFkMDlcdWFkMGFcdWFkMGJcdWFkMGVcdWFkMTBcdWFkMTJcdWFkMTNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMjldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEyOV1bcF0uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKElbX1sxMjldW3BdXT0zMzAyNCtwLGJbMzMwMjQrcF09X1sxMjldW3BdKTtmb3IoX1sxMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkMTRcdWFkMTVcdWFkMTZcdWFkMTdcdWFkMTlcdWFkMWFc''@;'; put 'put ''dWFkMWJcdWFkMWRcdWFkMWVcdWFkMWZcdWFkMjFcdWFkMjJcdWFkMjNcdWFkMjRcdWFkMjVcdWFkMjZcdWFkMjdcdWFkMjhcdWFkMmFcdWFkMmJcdWFkMmVcdWFkMmZcdWFkMzBcdWFkMzFcdWFkMzJcdWFkMzNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkMzZcdWFk''@;'; put 'put ''MzdcdWFkMzlcdWFkM2FcdWFkM2JcdWFkM2RcdWFkM2VcdWFkM2ZcdWFkNDBcdWFkNDFcdWFkNDJcdWFkNDNcdWFkNDZcdWFkNDhcdWFkNGFcdWFkNGJcdWFkNGNcdWFkNGRcdWFkNGVcdWFkNGZcdWFkNTFcdWFkNTJcdWFkNTNcdWFkNTVcdWFkNTZcdWFkNTdcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWFkNTlcdWFkNWFcdWFkNWJcdWFkNWNcdWFkNWRcdWFkNWVcdWFkNWZcdWFkNjBcdWFkNjJcdWFkNjRcdWFkNjVcdWFkNjZcdWFkNjdcdWFkNjhcdWFkNjlcdWFkNmFcdWFkNmJcdWFkNmVcdWFkNmZcdWFkNzFcdWFkNzJcdWFkNzdcdWFkNzhcdWFkNzlcdWFk''@;'; put 'put ''N2FcdWFkN2VcdWFkODBcdWFkODNcdWFkODRcdWFkODVcdWFkODZcdWFkODdcdWFkOGFcdWFkOGJcdWFkOGRcdWFkOGVcdWFkOGZcdWFkOTFcdWFkOTJcdWFkOTNcdWFkOTRcdWFkOTVcdWFkOTZcdWFkOTdcdWFkOThcdWFkOTlcdWFkOWFcdWFkOWJcdWFkOWVcdWFkOWZcdWFkYTBcdWFkYTFc''@;'; put 'put ''dWFkYTJcdWFkYTNcdWFkYTVcdWFkYTZcdWFkYTdcdWFkYThcdWFkYTlcdWFkYWFcdWFkYWJcdWFkYWNcdWFkYWRcdWFkYWVcdWFkYWZcdWFkYjBcdWFkYjFcdWFkYjJcdWFkYjNcdWFkYjRcdWFkYjVcdWFkYjZcdWFkYjhcdWFkYjlcdWFkYmFcdWFkYmJcdWFkYmNcdWFkYmRcdWFkYmVcdWFk''@;'; put 'put ''YmZcdWFkYzJcdWFkYzNcdWFkYzVcdWFkYzZcdWFkYzdcdWFkYzlcdWFkY2FcdWFkY2JcdWFkY2NcdWFkY2RcdWFkY2VcdWFkY2ZcdWFkZDJcdWFkZDRcdWFkZDVcdWFkZDZcdWFkZDdcdWFkZDhcdWFkZDlcdWFkZGFcdWFkZGJcdWFkZGRcdWFkZGVcdWFkZGZcdWFkZTFcdWFkZTJcdWFkZTNc''@;'; put 'put ''dWFkZTVcdWFkZTZcdWFkZTdcdWFkZThcdWFkZTlcdWFkZWFcdWFkZWJcdWFkZWNcdWFkZWRcdWFkZWVcdWFkZWZcdWFkZjBcdWFkZjFcdWFkZjJcdWFkZjNcdWFkZjRcdWFkZjVcdWFkZjZcdWFkZjdcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzBdLmxlbmd0aDsrK3ApNjU1MzMhPT1f''@;'; put 'put ''WzEzMF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxMzBdW3BdXT0zMzI4MCtwLGJbMzMyODArcF09X1sxMzBdW3BdKTtmb3IoX1sxMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkZmFcdWFkZmJcdWFkZmRcdWFkZmVc''@;'; put 'put ''dWFlMDJcdWFlMDNcdWFlMDRcdWFlMDVcdWFlMDZcdWFlMDdcdWFlMGFcdWFlMGNcdWFlMGVcdWFlMGZcdWFlMTBcdWFlMTFcdWFlMTJcdWFlMTNcdWFlMTVcdWFlMTZcdWFlMTdcdWFlMThcdWFlMTlcdWFlMWFcdWFlMWJcdWFlMWNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWFlMWRcdWFlMWVcdWFlMWZcdWFlMjBcdWFlMjFcdWFlMjJcdWFlMjNcdWFlMjRcdWFlMjVcdWFlMjZcdWFlMjdcdWFlMjhcdWFlMjlcdWFlMmFcdWFlMmJcdWFlMmNcdWFlMmRcdWFlMmVcdWFlMmZcdWFlMzJcdWFlMzNcdWFlMzVcdWFlMzZcdWFlMzlcdWFlM2JcdWFlM2NcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFlM2RcdWFlM2VcdWFlM2ZcdWFlNDJcdWFlNDRcdWFlNDdcdWFlNDhcdWFlNDlcdWFlNGJcdWFlNGZcdWFlNTFcdWFlNTJcdWFlNTNcdWFlNTVcdWFlNTdcdWFlNThcdWFlNTlcdWFlNWFcdWFlNWJcdWFlNWVcdWFlNjJcdWFlNjNcdWFl''@;'; put 'put ''NjRcdWFlNjZcdWFlNjdcdWFlNmFcdWFlNmJcdWFlNmRcdWFlNmVcdWFlNmZcdWFlNzFcdWFlNzJcdWFlNzNcdWFlNzRcdWFlNzVcdWFlNzZcdWFlNzdcdWFlN2FcdWFlN2VcdWFlN2ZcdWFlODBcdWFlODFcdWFlODJcdWFlODNcdWFlODZcdWFlODdcdWFlODhcdWFlODlcdWFlOGFcdWFlOGJc''@;'; put 'put ''dWFlOGRcdWFlOGVcdWFlOGZcdWFlOTBcdWFlOTFcdWFlOTJcdWFlOTNcdWFlOTRcdWFlOTVcdWFlOTZcdWFlOTdcdWFlOThcdWFlOTlcdWFlOWFcdWFlOWJcdWFlOWNcdWFlOWRcdWFlOWVcdWFlOWZcdWFlYTBcdWFlYTFcdWFlYTJcdWFlYTNcdWFlYTRcdWFlYTVcdWFlYTZcdWFlYTdcdWFl''@;'; put 'put ''YThcdWFlYTlcdWFlYWFcdWFlYWJcdWFlYWNcdWFlYWRcdWFlYWVcdWFlYWZcdWFlYjBcdWFlYjFcdWFlYjJcdWFlYjNcdWFlYjRcdWFlYjVcdWFlYjZcdWFlYjdcdWFlYjhcdWFlYjlcdWFlYmFcdWFlYmJcdWFlYmZcdWFlYzFcdWFlYzJcdWFlYzNcdWFlYzVcdWFlYzZcdWFlYzdcdWFlYzhc''@;'; put 'put ''dWFlYzlcdWFlY2FcdWFlY2JcdWFlY2VcdWFlZDJcdWFlZDNcdWFlZDRcdWFlZDVcdWFlZDZcdWFlZDdcdWFlZGFcdWFlZGJcdWFlZGRcdWFlZGVcdWFlZGZcdWFlZTBcdWFlZTFcdWFlZTJcdWFlZTNcdWFlZTRcdWFlZTVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzFdLmxlbmd0aDsr''@;'; put 'put ''K3ApNjU1MzMhPT1fWzEzMV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxMzFdW3BdXT0zMzUzNitwLGJbMzM1MzYrcF09X1sxMzFdW3BdKTtmb3IoX1sxMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFlZTZcdWFlZTdc''@;'; put 'put ''dWFlZTlcdWFlZWFcdWFlZWNcdWFlZWVcdWFlZWZcdWFlZjBcdWFlZjFcdWFlZjJcdWFlZjNcdWFlZjVcdWFlZjZcdWFlZjdcdWFlZjlcdWFlZmFcdWFlZmJcdWFlZmRcdWFlZmVcdWFlZmZcdWFmMDBcdWFmMDFcdWFmMDJcdWFmMDNcdWFmMDRcdWFmMDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWFmMDZcdWFmMDlcdWFmMGFcdWFmMGJcdWFmMGNcdWFmMGVcdWFmMGZcdWFmMTFcdWFmMTJcdWFmMTNcdWFmMTRcdWFmMTVcdWFmMTZcdWFmMTdcdWFmMThcdWFmMTlcdWFmMWFcdWFmMWJcdWFmMWNcdWFmMWRcdWFmMWVcdWFmMWZcdWFmMjBcdWFmMjFcdWFmMjJc''@;'; put 'put ''dWFmMjNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFmMjRcdWFmMjVcdWFmMjZcdWFmMjdcdWFmMjhcdWFmMjlcdWFmMmFcdWFmMmJcdWFmMmVcdWFmMmZcdWFmMzFcdWFmMzNcdWFmMzVcdWFmMzZcdWFmMzdcdWFmMzhcdWFmMzlcdWFmM2FcdWFmM2JcdWFmM2VcdWFm''@;'; put 'put ''NDBcdWFmNDRcdWFmNDVcdWFmNDZcdWFmNDdcdWFmNGFcdWFmNGJcdWFmNGNcdWFmNGRcdWFmNGVcdWFmNGZcdWFmNTFcdWFmNTJcdWFmNTNcdWFmNTRcdWFmNTVcdWFmNTZcdWFmNTdcdWFmNThcdWFmNTlcdWFmNWFcdWFmNWJcdWFmNWVcdWFmNWZcdWFmNjBcdWFmNjFcdWFmNjJcdWFmNjNc''@;'; put 'put ''dWFmNjZcdWFmNjdcdWFmNjhcdWFmNjlcdWFmNmFcdWFmNmJcdWFmNmNcdWFmNmRcdWFmNmVcdWFmNmZcdWFmNzBcdWFmNzFcdWFmNzJcdWFmNzNcdWFmNzRcdWFmNzVcdWFmNzZcdWFmNzdcdWFmNzhcdWFmN2FcdWFmN2JcdWFmN2NcdWFmN2RcdWFmN2VcdWFmN2ZcdWFmODFcdWFmODJcdWFm''@;'; put 'put ''ODNcdWFmODVcdWFmODZcdWFmODdcdWFmODlcdWFmOGFcdWFmOGJcdWFmOGNcdWFmOGRcdWFmOGVcdWFmOGZcdWFmOTJcdWFmOTNcdWFmOTRcdWFmOTZcdWFmOTdcdWFmOThcdWFmOTlcdWFmOWFcdWFmOWJcdWFmOWRcdWFmOWVcdWFmOWZcdWFmYTBcdWFmYTFcdWFmYTJcdWFmYTNcdWFmYTRc''@;'; put 'put ''dWFmYTVcdWFmYTZcdWFmYTdcdWFmYThcdWFmYTlcdWFmYWFcdWFmYWJcdWFmYWNcdWFmYWRcdWFmYWVcdWFmYWZcdWFmYjBcdWFmYjFcdWFmYjJcdWFmYjNcdWFmYjRcdWFmYjVcdWFmYjZcdWFmYjdcdWFmYmFcdWFmYmJcdWFmYmRcdWFmYmVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sx''@;'; put 'put ''MzJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzMl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxMzJdW3BdXT0zMzc5MitwLGJbMzM3OTIrcF09X1sxMzJdW3BdKTtmb3IoX1sxMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWFmYmZcdWFmYzFcdWFmYzJcdWFmYzNcdWFmYzRcdWFmYzVcdWFmYzZcdWFmY2FcdWFmY2NcdWFmY2ZcdWFmZDBcdWFmZDFcdWFmZDJcdWFmZDNcdWFmZDVcdWFmZDZcdWFmZDdcdWFmZDhcdWFmZDlcdWFmZGFcdWFmZGJcdWFmZGRcdWFmZGVcdWFmZGZcdWFmZTBcdWFmZTFcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFmZTJcdWFmZTNcdWFmZTRcdWFmZTVcdWFmZTZcdWFmZTdcdWFmZWFcdWFmZWJcdWFmZWNcdWFmZWRcdWFmZWVcdWFmZWZcdWFmZjJcdWFmZjNcdWFmZjVcdWFmZjZcdWFmZjdcdWFmZjlcdWFmZmFcdWFmZmJcdWFmZmNcdWFmZmRcdWFmZmVc''@;'; put 'put ''dWFmZmZcdWIwMDJcdWIwMDNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIwMDVcdWIwMDZcdWIwMDdcdWIwMDhcdWIwMDlcdWIwMGFcdWIwMGJcdWIwMGRcdWIwMGVcdWIwMGZcdWIwMTFcdWIwMTJcdWIwMTNcdWIwMTVcdWIwMTZcdWIwMTdcdWIwMThcdWIwMTlcdWIw''@;'; put 'put ''MWFcdWIwMWJcdWIwMWVcdWIwMWZcdWIwMjBcdWIwMjFcdWIwMjJcdWIwMjNcdWIwMjRcdWIwMjVcdWIwMjZcdWIwMjdcdWIwMjlcdWIwMmFcdWIwMmJcdWIwMmNcdWIwMmRcdWIwMmVcdWIwMmZcdWIwMzBcdWIwMzFcdWIwMzJcdWIwMzNcdWIwMzRcdWIwMzVcdWIwMzZcdWIwMzdcdWIwMzhc''@;'; put 'put ''dWIwMzlcdWIwM2FcdWIwM2JcdWIwM2NcdWIwM2RcdWIwM2VcdWIwM2ZcdWIwNDBcdWIwNDFcdWIwNDJcdWIwNDNcdWIwNDZcdWIwNDdcdWIwNDlcdWIwNGJcdWIwNGRcdWIwNGZcdWIwNTBcdWIwNTFcdWIwNTJcdWIwNTZcdWIwNThcdWIwNWFcdWIwNWJcdWIwNWNcdWIwNWVcdWIwNWZcdWIw''@;'; put 'put ''NjBcdWIwNjFcdWIwNjJcdWIwNjNcdWIwNjRcdWIwNjVcdWIwNjZcdWIwNjdcdWIwNjhcdWIwNjlcdWIwNmFcdWIwNmJcdWIwNmNcdWIwNmRcdWIwNmVcdWIwNmZcdWIwNzBcdWIwNzFcdWIwNzJcdWIwNzNcdWIwNzRcdWIwNzVcdWIwNzZcdWIwNzdcdWIwNzhcdWIwNzlcdWIwN2FcdWIwN2Jc''@;'; put 'put ''dWIwN2VcdWIwN2ZcdWIwODFcdWIwODJcdWIwODNcdWIwODVcdWIwODZcdWIwODdcdWIwODhcdWIwODlcdWIwOGFcdWIwOGJcdWIwOGVcdWIwOTBcdWIwOTJcdWIwOTNcdWIwOTRcdWIwOTVcdWIwOTZcdWIwOTdcdWIwOWJcdWIwOWRcdWIwOWVcdWIwYTNcdWIwYTRcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxwPTA7cCE9X1sxMzNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzM11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxMzNdW3BdXT0zNDA0OCtwLGJbMzQwNDgrcF09X1sxMzNdW3BdKTtmb3IoX1sxMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWIwYTVcdWIwYTZcdWIwYTdcdWIwYWFcdWIwYjBcdWIwYjJcdWIwYjZcdWIwYjdcdWIwYjlcdWIwYmFcdWIwYmJcdWIwYmRcdWIwYmVcdWIwYmZcdWIwYzBcdWIwYzFcdWIwYzJcdWIwYzNcdWIwYzZcdWIwY2FcdWIwY2JcdWIwY2NcdWIwY2RcdWIwY2VcdWIwY2ZcdWIw''@;'; put 'put ''ZDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIwZDNcdWIwZDVcdWIwZDZcdWIwZDdcdWIwZDlcdWIwZGFcdWIwZGJcdWIwZGNcdWIwZGRcdWIwZGVcdWIwZGZcdWIwZTFcdWIwZTJcdWIwZTNcdWIwZTRcdWIwZTZcdWIwZTdcdWIwZThcdWIwZTlcdWIwZWFcdWIwZWJc''@;'; put 'put ''dWIwZWNcdWIwZWRcdWIwZWVcdWIwZWZcdWIwZjBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIwZjFcdWIwZjJcdWIwZjNcdWIwZjRcdWIwZjVcdWIwZjZcdWIwZjdcdWIwZjhcdWIwZjlcdWIwZmFcdWIwZmJcdWIwZmNcdWIwZmRcdWIwZmVcdWIwZmZcdWIxMDBcdWIx''@;'; put 'put ''MDFcdWIxMDJcdWIxMDNcdWIxMDRcdWIxMDVcdWIxMDZcdWIxMDdcdWIxMGFcdWIxMGRcdWIxMGVcdWIxMGZcdWIxMTFcdWIxMTRcdWIxMTVcdWIxMTZcdWIxMTdcdWIxMWFcdWIxMWVcdWIxMWZcdWIxMjBcdWIxMjFcdWIxMjJcdWIxMjZcdWIxMjdcdWIxMjlcdWIxMmFcdWIxMmJcdWIxMmRc''@;'; put 'put ''dWIxMmVcdWIxMmZcdWIxMzBcdWIxMzFcdWIxMzJcdWIxMzNcdWIxMzZcdWIxM2FcdWIxM2JcdWIxM2NcdWIxM2RcdWIxM2VcdWIxM2ZcdWIxNDJcdWIxNDNcdWIxNDVcdWIxNDZcdWIxNDdcdWIxNDlcdWIxNGFcdWIxNGJcdWIxNGNcdWIxNGRcdWIxNGVcdWIxNGZcdWIxNTJcdWIxNTNcdWIx''@;'; put 'put ''NTZcdWIxNTdcdWIxNTlcdWIxNWFcdWIxNWJcdWIxNWRcdWIxNWVcdWIxNWZcdWIxNjFcdWIxNjJcdWIxNjNcdWIxNjRcdWIxNjVcdWIxNjZcdWIxNjdcdWIxNjhcdWIxNjlcdWIxNmFcdWIxNmJcdWIxNmNcdWIxNmRcdWIxNmVcdWIxNmZcdWIxNzBcdWIxNzFcdWIxNzJcdWIxNzNcdWIxNzRc''@;'; put 'put ''dWIxNzVcdWIxNzZcdWIxNzdcdWIxN2FcdWIxN2JcdWIxN2RcdWIxN2VcdWIxN2ZcdWIxODFcdWIxODNcdWIxODRcdWIxODVcdWIxODZcdWIxODdcdWIxOGFcdWIxOGNcdWIxOGVcdWIxOGZcdWIxOTBcdWIxOTFcdWIxOTVcdWIxOTZcdWIxOTdcdWIxOTlcdWIxOWFcdWIxOWJcdWIxOWRcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzNF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxMzRdW3BdXT0zNDMwNCtwLGJbMzQzMDQrcF09X1sxMzRdW3BdKTtmb3IoX1sxMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIxOWVcdWIxOWZcdWIxYTBcdWIxYTFcdWIxYTJcdWIxYTNcdWIxYTRcdWIxYTVcdWIxYTZcdWIxYTdcdWIxYTlcdWIxYWFcdWIxYWJcdWIxYWNcdWIxYWRcdWIxYWVcdWIxYWZcdWIxYjBcdWIxYjFcdWIxYjJcdWIxYjNcdWIxYjRcdWIxYjVcdWIx''@;'; put 'put ''YjZcdWIxYjdcdWIxYjhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIxYjlcdWIxYmFcdWIxYmJcdWIxYmNcdWIxYmRcdWIxYmVcdWIxYmZcdWIxYzBcdWIxYzFcdWIxYzJcdWIxYzNcdWIxYzRcdWIxYzVcdWIxYzZcdWIxYzdcdWIxYzhcdWIxYzlcdWIxY2FcdWIxY2Jc''@;'; put 'put ''dWIxY2RcdWIxY2VcdWIxY2ZcdWIxZDFcdWIxZDJcdWIxZDNcdWIxZDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIxZDZcdWIxZDdcdWIxZDhcdWIxZDlcdWIxZGFcdWIxZGJcdWIxZGVcdWIxZTBcdWIxZTFcdWIxZTJcdWIxZTNcdWIxZTRcdWIxZTVcdWIxZTZcdWIx''@;'; put 'put ''ZTdcdWIxZWFcdWIxZWJcdWIxZWRcdWIxZWVcdWIxZWZcdWIxZjFcdWIxZjJcdWIxZjNcdWIxZjRcdWIxZjVcdWIxZjZcdWIxZjdcdWIxZjhcdWIxZmFcdWIxZmNcdWIxZmVcdWIxZmZcdWIyMDBcdWIyMDFcdWIyMDJcdWIyMDNcdWIyMDZcdWIyMDdcdWIyMDlcdWIyMGFcdWIyMGRcdWIyMGVc''@;'; put 'put ''dWIyMGZcdWIyMTBcdWIyMTFcdWIyMTJcdWIyMTNcdWIyMTZcdWIyMThcdWIyMWFcdWIyMWJcdWIyMWNcdWIyMWRcdWIyMWVcdWIyMWZcdWIyMjFcdWIyMjJcdWIyMjNcdWIyMjRcdWIyMjVcdWIyMjZcdWIyMjdcdWIyMjhcdWIyMjlcdWIyMmFcdWIyMmJcdWIyMmNcdWIyMmRcdWIyMmVcdWIy''@;'; put 'put ''MmZcdWIyMzBcdWIyMzFcdWIyMzJcdWIyMzNcdWIyMzVcdWIyMzZcdWIyMzdcdWIyMzhcdWIyMzlcdWIyM2FcdWIyM2JcdWIyM2RcdWIyM2VcdWIyM2ZcdWIyNDBcdWIyNDFcdWIyNDJcdWIyNDNcdWIyNDRcdWIyNDVcdWIyNDZcdWIyNDdcdWIyNDhcdWIyNDlcdWIyNGFcdWIyNGJcdWIyNGNc''@;'; put 'put ''dWIyNGRcdWIyNGVcdWIyNGZcdWIyNTBcdWIyNTFcdWIyNTJcdWIyNTNcdWIyNTRcdWIyNTVcdWIyNTZcdWIyNTdcdWIyNTlcdWIyNWFcdWIyNWJcdWIyNWRcdWIyNWVcdWIyNWZcdWIyNjFcdWIyNjJcdWIyNjNcdWIyNjRcdWIyNjVcdWIyNjZcdWIyNjdcdWIyNmFcdWIyNmJcdWIyNmNcdWIy''@;'; put 'put ''NmRcdWIyNmVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzNV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxMzVdW3BdXT0zNDU2MCtwLGJbMzQ1NjArcF09X1sxMzVdW3BdKTtmb3IoX1sxMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIyNmZcdWIyNzBcdWIyNzFcdWIyNzJcdWIyNzNcdWIyNzZcdWIyNzdcdWIyNzhcdWIyNzlcdWIyN2FcdWIyN2JcdWIyN2RcdWIyN2VcdWIyN2ZcdWIyODBcdWIyODFcdWIyODJcdWIyODNcdWIyODZcdWIyODdcdWIyODhcdWIy''@;'; put 'put ''OGFcdWIyOGJcdWIyOGNcdWIyOGRcdWIyOGVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIyOGZcdWIyOTJcdWIyOTNcdWIyOTVcdWIyOTZcdWIyOTdcdWIyOWJcdWIyOWNcdWIyOWRcdWIyOWVcdWIyOWZcdWIyYTJcdWIyYTRcdWIyYTdcdWIyYThcdWIyYTlcdWIyYWJc''@;'; put 'put ''dWIyYWRcdWIyYWVcdWIyYWZcdWIyYjFcdWIyYjJcdWIyYjNcdWIyYjVcdWIyYjZcdWIyYjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIyYjhcdWIyYjlcdWIyYmFcdWIyYmJcdWIyYmNcdWIyYmRcdWIyYmVcdWIyYmZcdWIyYzBcdWIyYzFcdWIyYzJcdWIyYzNcdWIy''@;'; put 'put ''YzRcdWIyYzVcdWIyYzZcdWIyYzdcdWIyY2FcdWIyY2JcdWIyY2RcdWIyY2VcdWIyY2ZcdWIyZDFcdWIyZDNcdWIyZDRcdWIyZDVcdWIyZDZcdWIyZDdcdWIyZGFcdWIyZGNcdWIyZGVcdWIyZGZcdWIyZTBcdWIyZTFcdWIyZTNcdWIyZTdcdWIyZTlcdWIyZWFcdWIyZjBcdWIyZjFcdWIyZjJc''@;'; put 'put ''dWIyZjZcdWIyZmNcdWIyZmRcdWIyZmVcdWIzMDJcdWIzMDNcdWIzMDVcdWIzMDZcdWIzMDdcdWIzMDlcdWIzMGFcdWIzMGJcdWIzMGNcdWIzMGRcdWIzMGVcdWIzMGZcdWIzMTJcdWIzMTZcdWIzMTdcdWIzMThcdWIzMTlcdWIzMWFcdWIzMWJcdWIzMWRcdWIzMWVcdWIzMWZcdWIzMjBcdWIz''@;'; put 'put ''MjFcdWIzMjJcdWIzMjNcdWIzMjRcdWIzMjVcdWIzMjZcdWIzMjdcdWIzMjhcdWIzMjlcdWIzMmFcdWIzMmJcdWIzMmNcdWIzMmRcdWIzMmVcdWIzMmZcdWIzMzBcdWIzMzFcdWIzMzJcdWIzMzNcdWIzMzRcdWIzMzVcdWIzMzZcdWIzMzdcdWIzMzhcdWIzMzlcdWIzM2FcdWIzM2JcdWIzM2Nc''@;'; put 'put ''dWIzM2RcdWIzM2VcdWIzM2ZcdWIzNDBcdWIzNDFcdWIzNDJcdWIzNDNcdWIzNDRcdWIzNDVcdWIzNDZcdWIzNDdcdWIzNDhcdWIzNDlcdWIzNGFcdWIzNGJcdWIzNGNcdWIzNGRcdWIzNGVcdWIzNGZcdWIzNTBcdWIzNTFcdWIzNTJcdWIzNTNcdWIzNTdcdWIzNTlcdWIzNWFcdWIzNWRcdWIz''@;'; put 'put ''NjBcdWIzNjFcdWIzNjJcdWIzNjNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzNl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxMzZdW3BdXT0zNDgxNitwLGJbMzQ4MTYrcF09X1sxMzZdW3BdKTtmb3IoX1sxMzddPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIzNjZcdWIzNjhcdWIzNmFcdWIzNmNcdWIzNmRcdWIzNmZcdWIzNzJcdWIzNzNcdWIzNzVcdWIzNzZcdWIzNzdcdWIzNzlcdWIzN2FcdWIzN2JcdWIzN2NcdWIzN2RcdWIzN2VcdWIzN2ZcdWIzODJcdWIz''@;'; put 'put ''ODZcdWIzODdcdWIzODhcdWIzODlcdWIzOGFcdWIzOGJcdWIzOGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIzOGVcdWIzOGZcdWIzOTFcdWIzOTJcdWIzOTNcdWIzOTVcdWIzOTZcdWIzOTdcdWIzOThcdWIzOTlcdWIzOWFcdWIzOWJcdWIzOWNcdWIzOWRcdWIzOWVc''@;'; put 'put ''dWIzOWZcdWIzYTJcdWIzYTNcdWIzYTRcdWIzYTVcdWIzYTZcdWIzYTdcdWIzYTlcdWIzYWFcdWIzYWJcdWIzYWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIzYWVcdWIzYWZcdWIzYjBcdWIzYjFcdWIzYjJcdWIzYjNcdWIzYjRcdWIzYjVcdWIzYjZcdWIzYjdcdWIz''@;'; put 'put ''YjhcdWIzYjlcdWIzYmFcdWIzYmJcdWIzYmNcdWIzYmRcdWIzYmVcdWIzYmZcdWIzYzBcdWIzYzFcdWIzYzJcdWIzYzNcdWIzYzZcdWIzYzdcdWIzYzlcdWIzY2FcdWIzY2RcdWIzY2ZcdWIzZDFcdWIzZDJcdWIzZDNcdWIzZDZcdWIzZDhcdWIzZGFcdWIzZGNcdWIzZGVcdWIzZGZcdWIzZTFc''@;'; put 'put ''dWIzZTJcdWIzZTNcdWIzZTVcdWIzZTZcdWIzZTdcdWIzZTlcdWIzZWFcdWIzZWJcdWIzZWNcdWIzZWRcdWIzZWVcdWIzZWZcdWIzZjBcdWIzZjFcdWIzZjJcdWIzZjNcdWIzZjRcdWIzZjVcdWIzZjZcdWIzZjdcdWIzZjhcdWIzZjlcdWIzZmFcdWIzZmJcdWIzZmRcdWIzZmVcdWIzZmZcdWI0''@;'; put 'put ''MDBcdWI0MDFcdWI0MDJcdWI0MDNcdWI0MDRcdWI0MDVcdWI0MDZcdWI0MDdcdWI0MDhcdWI0MDlcdWI0MGFcdWI0MGJcdWI0MGNcdWI0MGRcdWI0MGVcdWI0MGZcdWI0MTFcdWI0MTJcdWI0MTNcdWI0MTRcdWI0MTVcdWI0MTZcdWI0MTdcdWI0MTlcdWI0MWFcdWI0MWJcdWI0MWRcdWI0MWVc''@;'; put 'put ''dWI0MWZcdWI0MjFcdWI0MjJcdWI0MjNcdWI0MjRcdWI0MjVcdWI0MjZcdWI0MjdcdWI0MmFcdWI0MmNcdWI0MmRcdWI0MmVcdWI0MmZcdWI0MzBcdWI0MzFcdWI0MzJcdWI0MzNcdWI0MzVcdWI0MzZcdWI0MzdcdWI0MzhcdWI0MzlcdWI0M2FcdWI0M2JcdWI0M2NcdWI0M2RcdWI0M2VcdWI0''@;'; put 'put ''M2ZcdWI0NDBcdWI0NDFcdWI0NDJcdWI0NDNcdWI0NDRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzN11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxMzddW3BdXT0zNTA3MitwLGJbMzUwNzIrcF09X1sxMzddW3BdKTtmb3IoX1sxMzhdPSJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI0NDVcdWI0NDZcdWI0NDdcdWI0NDhcdWI0NDlcdWI0NGFcdWI0NGJcdWI0NGNcdWI0NGRcdWI0NGVcdWI0NGZcdWI0NTJcdWI0NTNcdWI0NTVcdWI0NTZcdWI0NTdcdWI0NTlcdWI0''@;'; put 'put ''NWFcdWI0NWJcdWI0NWNcdWI0NWRcdWI0NWVcdWI0NWZcdWI0NjJcdWI0NjRcdWI0NjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI0NjdcdWI0NjhcdWI0NjlcdWI0NmFcdWI0NmJcdWI0NmRcdWI0NmVcdWI0NmZcdWI0NzBcdWI0NzFcdWI0NzJcdWI0NzNcdWI0NzRc''@;'; put 'put ''dWI0NzVcdWI0NzZcdWI0NzdcdWI0NzhcdWI0NzlcdWI0N2FcdWI0N2JcdWI0N2NcdWI0N2RcdWI0N2VcdWI0N2ZcdWI0ODFcdWI0ODJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI0ODNcdWI0ODRcdWI0ODVcdWI0ODZcdWI0ODdcdWI0ODlcdWI0OGFcdWI0OGJcdWI0''@;'; put 'put ''OGNcdWI0OGRcdWI0OGVcdWI0OGZcdWI0OTBcdWI0OTFcdWI0OTJcdWI0OTNcdWI0OTRcdWI0OTVcdWI0OTZcdWI0OTdcdWI0OThcdWI0OTlcdWI0OWFcdWI0OWJcdWI0OWNcdWI0OWVcdWI0OWZcdWI0YTBcdWI0YTFcdWI0YTJcdWI0YTNcdWI0YTVcdWI0YTZcdWI0YTdcdWI0YTlcdWI0YWFc''@;'; put 'put ''dWI0YWJcdWI0YWRcdWI0YWVcdWI0YWZcdWI0YjBcdWI0YjFcdWI0YjJcdWI0YjNcdWI0YjRcdWI0YjZcdWI0YjhcdWI0YmFcdWI0YmJcdWI0YmNcdWI0YmRcdWI0YmVcdWI0YmZcdWI0YzFcdWI0YzJcdWI0YzNcdWI0YzVcdWI0YzZcdWI0YzdcdWI0YzlcdWI0Y2FcdWI0Y2JcdWI0Y2NcdWI0''@;'; put 'put ''Y2RcdWI0Y2VcdWI0Y2ZcdWI0ZDFcdWI0ZDJcdWI0ZDNcdWI0ZDRcdWI0ZDZcdWI0ZDdcdWI0ZDhcdWI0ZDlcdWI0ZGFcdWI0ZGJcdWI0ZGVcdWI0ZGZcdWI0ZTFcdWI0ZTJcdWI0ZTVcdWI0ZTdcdWI0ZThcdWI0ZTlcdWI0ZWFcdWI0ZWJcdWI0ZWVcdWI0ZjBcdWI0ZjJcdWI0ZjNcdWI0ZjRc''@;'; put 'put ''dWI0ZjVcdWI0ZjZcdWI0ZjdcdWI0ZjlcdWI0ZmFcdWI0ZmJcdWI0ZmNcdWI0ZmRcdWI0ZmVcdWI0ZmZcdWI1MDBcdWI1MDFcdWI1MDJcdWI1MDNcdWI1MDRcdWI1MDVcdWI1MDZcdWI1MDdcdWI1MDhcdWI1MDlcdWI1MGFcdWI1MGJcdWI1MGNcdWI1MGRcdWI1MGVcdWI1MGZcdWI1MTBcdWI1''@;'; put 'put ''MTFcdWI1MTJcdWI1MTNcdWI1MTZcdWI1MTdcdWI1MTlcdWI1MWFcdWI1MWRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzOF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxMzhdW3BdXT0zNTMyOCtwLGJbMzUzMjgrcF09X1sxMzhdW3BdKTtm''@;'; put 'put ''b3IoX1sxMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI1MWVcdWI1MWZcdWI1MjBcdWI1MjFcdWI1MjJcdWI1MjNcdWI1MjZcdWI1MmJcdWI1MmNcdWI1MmRcdWI1MmVcdWI1MmZcdWI1MzJcdWI1MzNcdWI1MzVcdWI1''@;'; put 'put ''MzZcdWI1MzdcdWI1MzlcdWI1M2FcdWI1M2JcdWI1M2NcdWI1M2RcdWI1M2VcdWI1M2ZcdWI1NDJcdWI1NDZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI1NDdcdWI1NDhcdWI1NDlcdWI1NGFcdWI1NGVcdWI1NGZcdWI1NTFcdWI1NTJcdWI1NTNcdWI1NTVcdWI1NTZc''@;'; put 'put ''dWI1NTdcdWI1NThcdWI1NTlcdWI1NWFcdWI1NWJcdWI1NWVcdWI1NjJcdWI1NjNcdWI1NjRcdWI1NjVcdWI1NjZcdWI1NjdcdWI1NjhcdWI1NjlcdWI1NmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI1NmJcdWI1NmNcdWI1NmRcdWI1NmVcdWI1NmZcdWI1NzBcdWI1''@;'; put 'put ''NzFcdWI1NzJcdWI1NzNcdWI1NzRcdWI1NzVcdWI1NzZcdWI1NzdcdWI1NzhcdWI1NzlcdWI1N2FcdWI1N2JcdWI1N2NcdWI1N2RcdWI1N2VcdWI1N2ZcdWI1ODBcdWI1ODFcdWI1ODJcdWI1ODNcdWI1ODRcdWI1ODVcdWI1ODZcdWI1ODdcdWI1ODhcdWI1ODlcdWI1OGFcdWI1OGJcdWI1OGNc''@;'; put 'put ''dWI1OGRcdWI1OGVcdWI1OGZcdWI1OTBcdWI1OTFcdWI1OTJcdWI1OTNcdWI1OTRcdWI1OTVcdWI1OTZcdWI1OTdcdWI1OThcdWI1OTlcdWI1OWFcdWI1OWJcdWI1OWNcdWI1OWRcdWI1OWVcdWI1OWZcdWI1YTJcdWI1YTNcdWI1YTVcdWI1YTZcdWI1YTdcdWI1YTlcdWI1YWNcdWI1YWRcdWI1''@;'; put 'put ''YWVcdWI1YWZcdWI1YjJcdWI1YjZcdWI1YjdcdWI1YjhcdWI1YjlcdWI1YmFcdWI1YmVcdWI1YmZcdWI1YzFcdWI1YzJcdWI1YzNcdWI1YzVcdWI1YzZcdWI1YzdcdWI1YzhcdWI1YzlcdWI1Y2FcdWI1Y2JcdWI1Y2VcdWI1ZDJcdWI1ZDNcdWI1ZDRcdWI1ZDVcdWI1ZDZcdWI1ZDdcdWI1ZDlc''@;'; put 'put ''dWI1ZGFcdWI1ZGJcdWI1ZGNcdWI1ZGRcdWI1ZGVcdWI1ZGZcdWI1ZTBcdWI1ZTFcdWI1ZTJcdWI1ZTNcdWI1ZTRcdWI1ZTVcdWI1ZTZcdWI1ZTdcdWI1ZThcdWI1ZTlcdWI1ZWFcdWI1ZWJcdWI1ZWRcdWI1ZWVcdWI1ZWZcdWI1ZjBcdWI1ZjFcdWI1ZjJcdWI1ZjNcdWI1ZjRcdWI1ZjVcdWI1''@;'; put 'put ''ZjZcdWI1ZjdcdWI1ZjhcdWI1ZjlcdWI1ZmFcdWI1ZmJcdWI1ZmNcdWI1ZmRcdWI1ZmVcdWI1ZmZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzOV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxMzldW3BdXT0zNTU4NCtwLGJbMzU1ODQrcF09''@;'; put 'put ''X1sxMzldW3BdKTtmb3IoX1sxNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2MDBcdWI2MDFcdWI2MDJcdWI2MDNcdWI2MDRcdWI2MDVcdWI2MDZcdWI2MDdcdWI2MDhcdWI2MDlcdWI2MGFcdWI2MGJcdWI2MGNcdWI2''@;'; put 'put ''MGRcdWI2MGVcdWI2MGZcdWI2MTJcdWI2MTNcdWI2MTVcdWI2MTZcdWI2MTdcdWI2MTlcdWI2MWFcdWI2MWJcdWI2MWNcdWI2MWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2MWVcdWI2MWZcdWI2MjBcdWI2MjFcdWI2MjJcdWI2MjNcdWI2MjRcdWI2MjZcdWI2Mjdc''@;'; put 'put ''dWI2MjhcdWI2MjlcdWI2MmFcdWI2MmJcdWI2MmRcdWI2MmVcdWI2MmZcdWI2MzBcdWI2MzFcdWI2MzJcdWI2MzNcdWI2MzVcdWI2MzZcdWI2MzdcdWI2MzhcdWI2MzlcdWI2M2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2M2JcdWI2M2NcdWI2M2RcdWI2M2VcdWI2''@;'; put 'put ''M2ZcdWI2NDBcdWI2NDFcdWI2NDJcdWI2NDNcdWI2NDRcdWI2NDVcdWI2NDZcdWI2NDdcdWI2NDlcdWI2NGFcdWI2NGJcdWI2NGNcdWI2NGRcdWI2NGVcdWI2NGZcdWI2NTBcdWI2NTFcdWI2NTJcdWI2NTNcdWI2NTRcdWI2NTVcdWI2NTZcdWI2NTdcdWI2NThcdWI2NTlcdWI2NWFcdWI2NWJc''@;'; put 'put ''dWI2NWNcdWI2NWRcdWI2NWVcdWI2NWZcdWI2NjBcdWI2NjFcdWI2NjJcdWI2NjNcdWI2NjVcdWI2NjZcdWI2NjdcdWI2NjlcdWI2NmFcdWI2NmJcdWI2NmNcdWI2NmRcdWI2NmVcdWI2NmZcdWI2NzBcdWI2NzFcdWI2NzJcdWI2NzNcdWI2NzRcdWI2NzVcdWI2NzZcdWI2NzdcdWI2NzhcdWI2''@;'; put 'put ''NzlcdWI2N2FcdWI2N2JcdWI2N2NcdWI2N2RcdWI2N2VcdWI2N2ZcdWI2ODBcdWI2ODFcdWI2ODJcdWI2ODNcdWI2ODRcdWI2ODVcdWI2ODZcdWI2ODdcdWI2ODhcdWI2ODlcdWI2OGFcdWI2OGJcdWI2OGNcdWI2OGRcdWI2OGVcdWI2OGZcdWI2OTBcdWI2OTFcdWI2OTJcdWI2OTNcdWI2OTRc''@;'; put 'put ''dWI2OTVcdWI2OTZcdWI2OTdcdWI2OThcdWI2OTlcdWI2OWFcdWI2OWJcdWI2OWVcdWI2OWZcdWI2YTFcdWI2YTJcdWI2YTNcdWI2YTVcdWI2YTZcdWI2YTdcdWI2YThcdWI2YTlcdWI2YWFcdWI2YWRcdWI2YWVcdWI2YWZcdWI2YjBcdWI2YjJcdWI2YjNcdWI2YjRcdWI2YjVcdWI2YjZcdWI2''@;'; put 'put ''YjdcdWI2YjhcdWI2YjlcdWI2YmFcdWI2YmJcdWI2YmNcdWI2YmRcdWI2YmVcdWI2YmZcdWI2YzBcdWI2YzFcdWI2YzJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0MF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNDBdW3BdXT0zNTg0MCtw''@;'; put 'put ''LGJbMzU4NDArcF09X1sxNDBdW3BdKTtmb3IoX1sxNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2YzNcdWI2YzRcdWI2YzVcdWI2YzZcdWI2YzdcdWI2YzhcdWI2YzlcdWI2Y2FcdWI2Y2JcdWI2Y2NcdWI2Y2RcdWI2''@;'; put 'put ''Y2VcdWI2Y2ZcdWI2ZDBcdWI2ZDFcdWI2ZDJcdWI2ZDNcdWI2ZDVcdWI2ZDZcdWI2ZDdcdWI2ZDhcdWI2ZDlcdWI2ZGFcdWI2ZGJcdWI2ZGNcdWI2ZGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2ZGVcdWI2ZGZcdWI2ZTBcdWI2ZTFcdWI2ZTJcdWI2ZTNcdWI2ZTRc''@;'; put 'put ''dWI2ZTVcdWI2ZTZcdWI2ZTdcdWI2ZThcdWI2ZTlcdWI2ZWFcdWI2ZWJcdWI2ZWNcdWI2ZWRcdWI2ZWVcdWI2ZWZcdWI2ZjFcdWI2ZjJcdWI2ZjNcdWI2ZjVcdWI2ZjZcdWI2ZjdcdWI2ZjlcdWI2ZmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2ZmJcdWI2ZmNcdWI2''@;'; put 'put ''ZmRcdWI2ZmVcdWI2ZmZcdWI3MDJcdWI3MDNcdWI3MDRcdWI3MDZcdWI3MDdcdWI3MDhcdWI3MDlcdWI3MGFcdWI3MGJcdWI3MGNcdWI3MGRcdWI3MGVcdWI3MGZcdWI3MTBcdWI3MTFcdWI3MTJcdWI3MTNcdWI3MTRcdWI3MTVcdWI3MTZcdWI3MTdcdWI3MThcdWI3MTlcdWI3MWFcdWI3MWJc''@;'; put 'put ''dWI3MWNcdWI3MWRcdWI3MWVcdWI3MWZcdWI3MjBcdWI3MjFcdWI3MjJcdWI3MjNcdWI3MjRcdWI3MjVcdWI3MjZcdWI3MjdcdWI3MmFcdWI3MmJcdWI3MmRcdWI3MmVcdWI3MzFcdWI3MzJcdWI3MzNcdWI3MzRcdWI3MzVcdWI3MzZcdWI3MzdcdWI3M2FcdWI3M2NcdWI3M2RcdWI3M2VcdWI3''@;'; put 'put ''M2ZcdWI3NDBcdWI3NDFcdWI3NDJcdWI3NDNcdWI3NDVcdWI3NDZcdWI3NDdcdWI3NDlcdWI3NGFcdWI3NGJcdWI3NGRcdWI3NGVcdWI3NGZcdWI3NTBcdWI3NTFcdWI3NTJcdWI3NTNcdWI3NTZcdWI3NTdcdWI3NThcdWI3NTlcdWI3NWFcdWI3NWJcdWI3NWNcdWI3NWRcdWI3NWVcdWI3NWZc''@;'; put 'put ''dWI3NjFcdWI3NjJcdWI3NjNcdWI3NjVcdWI3NjZcdWI3NjdcdWI3NjlcdWI3NmFcdWI3NmJcdWI3NmNcdWI3NmRcdWI3NmVcdWI3NmZcdWI3NzJcdWI3NzRcdWI3NzZcdWI3NzdcdWI3NzhcdWI3NzlcdWI3N2FcdWI3N2JcdWI3N2VcdWI3N2ZcdWI3ODFcdWI3ODJcdWI3ODNcdWI3ODVcdWI3''@;'; put 'put ''ODZcdWI3ODdcdWI3ODhcdWI3ODlcdWI3OGFcdWI3OGJcdWI3OGVcdWI3OTNcdWI3OTRcdWI3OTVcdWI3OWFcdWI3OWJcdWI3OWRcdWI3OWVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0MV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNDFd''@;'; put 'put ''W3BdXT0zNjA5NitwLGJbMzYwOTYrcF09X1sxNDFdW3BdKTtmb3IoX1sxNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI3OWZcdWI3YTFcdWI3YTJcdWI3YTNcdWI3YTRcdWI3YTVcdWI3YTZcdWI3YTdcdWI3YWFcdWI3''@;'; put 'put ''YWVcdWI3YWZcdWI3YjBcdWI3YjFcdWI3YjJcdWI3YjNcdWI3YjZcdWI3YjdcdWI3YjlcdWI3YmFcdWI3YmJcdWI3YmNcdWI3YmRcdWI3YmVcdWI3YmZcdWI3YzBcdWI3YzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI3YzJcdWI3YzNcdWI3YzRcdWI3YzVcdWI3YzZc''@;'; put 'put ''dWI3YzhcdWI3Y2FcdWI3Y2JcdWI3Y2NcdWI3Y2RcdWI3Y2VcdWI3Y2ZcdWI3ZDBcdWI3ZDFcdWI3ZDJcdWI3ZDNcdWI3ZDRcdWI3ZDVcdWI3ZDZcdWI3ZDdcdWI3ZDhcdWI3ZDlcdWI3ZGFcdWI3ZGJcdWI3ZGNcdWI3ZGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI3''@;'; put 'put ''ZGVcdWI3ZGZcdWI3ZTBcdWI3ZTFcdWI3ZTJcdWI3ZTNcdWI3ZTRcdWI3ZTVcdWI3ZTZcdWI3ZTdcdWI3ZThcdWI3ZTlcdWI3ZWFcdWI3ZWJcdWI3ZWVcdWI3ZWZcdWI3ZjFcdWI3ZjJcdWI3ZjNcdWI3ZjVcdWI3ZjZcdWI3ZjdcdWI3ZjhcdWI3ZjlcdWI3ZmFcdWI3ZmJcdWI3ZmVcdWI4MDJc''@;'; put 'put ''dWI4MDNcdWI4MDRcdWI4MDVcdWI4MDZcdWI4MGFcdWI4MGJcdWI4MGRcdWI4MGVcdWI4MGZcdWI4MTFcdWI4MTJcdWI4MTNcdWI4MTRcdWI4MTVcdWI4MTZcdWI4MTdcdWI4MWFcdWI4MWNcdWI4MWVcdWI4MWZcdWI4MjBcdWI4MjFcdWI4MjJcdWI4MjNcdWI4MjZcdWI4MjdcdWI4MjlcdWI4''@;'; put 'put ''MmFcdWI4MmJcdWI4MmRcdWI4MmVcdWI4MmZcdWI4MzBcdWI4MzFcdWI4MzJcdWI4MzNcdWI4MzZcdWI4M2FcdWI4M2JcdWI4M2NcdWI4M2RcdWI4M2VcdWI4M2ZcdWI4NDFcdWI4NDJcdWI4NDNcdWI4NDVcdWI4NDZcdWI4NDdcdWI4NDhcdWI4NDlcdWI4NGFcdWI4NGJcdWI4NGNcdWI4NGRc''@;'; put 'put ''dWI4NGVcdWI4NGZcdWI4NTBcdWI4NTJcdWI4NTRcdWI4NTVcdWI4NTZcdWI4NTdcdWI4NThcdWI4NTlcdWI4NWFcdWI4NWJcdWI4NWVcdWI4NWZcdWI4NjFcdWI4NjJcdWI4NjNcdWI4NjVcdWI4NjZcdWI4NjdcdWI4NjhcdWI4NjlcdWI4NmFcdWI4NmJcdWI4NmVcdWI4NzBcdWI4NzJcdWI4''@;'; put 'put ''NzNcdWI4NzRcdWI4NzVcdWI4NzZcdWI4NzdcdWI4NzlcdWI4N2FcdWI4N2JcdWI4N2RcdWI4N2VcdWI4N2ZcdWI4ODBcdWI4ODFcdWI4ODJcdWI4ODNcdWI4ODRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0Ml1bcF0uY2hhckNvZGVBdCgw''@;'; put 'put ''KSYmKElbX1sxNDJdW3BdXT0zNjM1MitwLGJbMzYzNTIrcF09X1sxNDJdW3BdKTtmb3IoX1sxNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI4ODVcdWI4ODZcdWI4ODdcdWI4ODhcdWI4ODlcdWI4OGFcdWI4OGJcdWI4''@;'; put 'put ''OGNcdWI4OGVcdWI4OGZcdWI4OTBcdWI4OTFcdWI4OTJcdWI4OTNcdWI4OTRcdWI4OTVcdWI4OTZcdWI4OTdcdWI4OThcdWI4OTlcdWI4OWFcdWI4OWJcdWI4OWNcdWI4OWRcdWI4OWVcdWI4OWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI4YTBcdWI4YTFcdWI4YTJc''@;'; put 'put ''dWI4YTNcdWI4YTRcdWI4YTVcdWI4YTZcdWI4YTdcdWI4YTlcdWI4YWFcdWI4YWJcdWI4YWNcdWI4YWRcdWI4YWVcdWI4YWZcdWI4YjFcdWI4YjJcdWI4YjNcdWI4YjVcdWI4YjZcdWI4YjdcdWI4YjlcdWI4YmFcdWI4YmJcdWI4YmNcdWI4YmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWI4YmVcdWI4YmZcdWI4YzJcdWI4YzRcdWI4YzZcdWI4YzdcdWI4YzhcdWI4YzlcdWI4Y2FcdWI4Y2JcdWI4Y2RcdWI4Y2VcdWI4Y2ZcdWI4ZDFcdWI4ZDJcdWI4ZDNcdWI4ZDVcdWI4ZDZcdWI4ZDdcdWI4ZDhcdWI4ZDlcdWI4ZGFcdWI4ZGJcdWI4ZGNcdWI4ZGVcdWI4ZTBc''@;'; put 'put ''dWI4ZTJcdWI4ZTNcdWI4ZTRcdWI4ZTVcdWI4ZTZcdWI4ZTdcdWI4ZWFcdWI4ZWJcdWI4ZWRcdWI4ZWVcdWI4ZWZcdWI4ZjFcdWI4ZjJcdWI4ZjNcdWI4ZjRcdWI4ZjVcdWI4ZjZcdWI4ZjdcdWI4ZmFcdWI4ZmNcdWI4ZmVcdWI4ZmZcdWI5MDBcdWI5MDFcdWI5MDJcdWI5MDNcdWI5MDVcdWI5''@;'; put 'put ''MDZcdWI5MDdcdWI5MDhcdWI5MDlcdWI5MGFcdWI5MGJcdWI5MGNcdWI5MGRcdWI5MGVcdWI5MGZcdWI5MTBcdWI5MTFcdWI5MTJcdWI5MTNcdWI5MTRcdWI5MTVcdWI5MTZcdWI5MTdcdWI5MTlcdWI5MWFcdWI5MWJcdWI5MWNcdWI5MWRcdWI5MWVcdWI5MWZcdWI5MjFcdWI5MjJcdWI5MjNc''@;'; put 'put ''dWI5MjRcdWI5MjVcdWI5MjZcdWI5MjdcdWI5MjhcdWI5MjlcdWI5MmFcdWI5MmJcdWI5MmNcdWI5MmRcdWI5MmVcdWI5MmZcdWI5MzBcdWI5MzFcdWI5MzJcdWI5MzNcdWI5MzRcdWI5MzVcdWI5MzZcdWI5MzdcdWI5MzhcdWI5MzlcdWI5M2FcdWI5M2JcdWI5M2VcdWI5M2ZcdWI5NDFcdWI5''@;'; put 'put ''NDJcdWI5NDNcdWI5NDVcdWI5NDZcdWI5NDdcdWI5NDhcdWI5NDlcdWI5NGFcdWI5NGJcdWI5NGRcdWI5NGVcdWI5NTBcdWI5NTJcdWI5NTNcdWI5NTRcdWI5NTVcdWI5NTZcdWI5NTdcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0M11bcF0u''@;'; put 'put ''Y2hhckNvZGVBdCgwKSYmKElbX1sxNDNdW3BdXT0zNjYwOCtwLGJbMzY2MDgrcF09X1sxNDNdW3BdKTtmb3IoX1sxNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI5NWFcdWI5NWJcdWI5NWRcdWI5NWVcdWI5NWZcdWI5''@;'; put 'put ''NjFcdWI5NjJcdWI5NjNcdWI5NjRcdWI5NjVcdWI5NjZcdWI5NjdcdWI5NmFcdWI5NmNcdWI5NmVcdWI5NmZcdWI5NzBcdWI5NzFcdWI5NzJcdWI5NzNcdWI5NzZcdWI5NzdcdWI5NzlcdWI5N2FcdWI5N2JcdWI5N2RcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI5N2Vc''@;'; put 'put ''dWI5N2ZcdWI5ODBcdWI5ODFcdWI5ODJcdWI5ODNcdWI5ODZcdWI5ODhcdWI5OGJcdWI5OGNcdWI5OGZcdWI5OTBcdWI5OTFcdWI5OTJcdWI5OTNcdWI5OTRcdWI5OTVcdWI5OTZcdWI5OTdcdWI5OThcdWI5OTlcdWI5OWFcdWI5OWJcdWI5OWNcdWI5OWRcdWI5OWVcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI5OWZcdWI5YTBcdWI5YTFcdWI5YTJcdWI5YTNcdWI5YTRcdWI5YTVcdWI5YTZcdWI5YTdcdWI5YThcdWI5YTlcdWI5YWFcdWI5YWJcdWI5YWVcdWI5YWZcdWI5YjFcdWI5YjJcdWI5YjNcdWI5YjVcdWI5YjZcdWI5YjdcdWI5YjhcdWI5YjlcdWI5YmFc''@;'; put 'put ''dWI5YmJcdWI5YmVcdWI5YzBcdWI5YzJcdWI5YzNcdWI5YzRcdWI5YzVcdWI5YzZcdWI5YzdcdWI5Y2FcdWI5Y2JcdWI5Y2RcdWI5ZDNcdWI5ZDRcdWI5ZDVcdWI5ZDZcdWI5ZDdcdWI5ZGFcdWI5ZGNcdWI5ZGZcdWI5ZTBcdWI5ZTJcdWI5ZTZcdWI5ZTdcdWI5ZTlcdWI5ZWFcdWI5ZWJcdWI5''@;'; put 'put ''ZWRcdWI5ZWVcdWI5ZWZcdWI5ZjBcdWI5ZjFcdWI5ZjJcdWI5ZjNcdWI5ZjZcdWI5ZmJcdWI5ZmNcdWI5ZmRcdWI5ZmVcdWI5ZmZcdWJhMDJcdWJhMDNcdWJhMDRcdWJhMDVcdWJhMDZcdWJhMDdcdWJhMDlcdWJhMGFcdWJhMGJcdWJhMGNcdWJhMGRcdWJhMGVcdWJhMGZcdWJhMTBcdWJhMTFc''@;'; put 'put ''dWJhMTJcdWJhMTNcdWJhMTRcdWJhMTZcdWJhMTdcdWJhMThcdWJhMTlcdWJhMWFcdWJhMWJcdWJhMWNcdWJhMWRcdWJhMWVcdWJhMWZcdWJhMjBcdWJhMjFcdWJhMjJcdWJhMjNcdWJhMjRcdWJhMjVcdWJhMjZcdWJhMjdcdWJhMjhcdWJhMjlcdWJhMmFcdWJhMmJcdWJhMmNcdWJhMmRcdWJh''@;'; put 'put ''MmVcdWJhMmZcdWJhMzBcdWJhMzFcdWJhMzJcdWJhMzNcdWJhMzRcdWJhMzVcdWJhMzZcdWJhMzdcdWJhM2FcdWJhM2JcdWJhM2RcdWJhM2VcdWJhM2ZcdWJhNDFcdWJhNDNcdWJhNDRcdWJhNDVcdWJhNDZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDRdLmxlbmd0aDsrK3ApNjU1MzMh''@;'; put 'put ''PT1fWzE0NF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNDRdW3BdXT0zNjg2NCtwLGJbMzY4NjQrcF09X1sxNDRdW3BdKTtmb3IoX1sxNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJhNDdcdWJhNGFcdWJhNGNcdWJh''@;'; put 'put ''NGZcdWJhNTBcdWJhNTFcdWJhNTJcdWJhNTZcdWJhNTdcdWJhNTlcdWJhNWFcdWJhNWJcdWJhNWRcdWJhNWVcdWJhNWZcdWJhNjBcdWJhNjFcdWJhNjJcdWJhNjNcdWJhNjZcdWJhNmFcdWJhNmJcdWJhNmNcdWJhNmRcdWJhNmVcdWJhNmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWJhNzJcdWJhNzNcdWJhNzVcdWJhNzZcdWJhNzdcdWJhNzlcdWJhN2FcdWJhN2JcdWJhN2NcdWJhN2RcdWJhN2VcdWJhN2ZcdWJhODBcdWJhODFcdWJhODJcdWJhODZcdWJhODhcdWJhODlcdWJhOGFcdWJhOGJcdWJhOGRcdWJhOGVcdWJhOGZcdWJhOTBcdWJhOTFcdWJhOTJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJhOTNcdWJhOTRcdWJhOTVcdWJhOTZcdWJhOTdcdWJhOThcdWJhOTlcdWJhOWFcdWJhOWJcdWJhOWNcdWJhOWRcdWJhOWVcdWJhOWZcdWJhYTBcdWJhYTFcdWJhYTJcdWJhYTNcdWJhYTRcdWJhYTVcdWJhYTZcdWJhYTdcdWJhYWFc''@;'; put 'put ''dWJhYWRcdWJhYWVcdWJhYWZcdWJhYjFcdWJhYjNcdWJhYjRcdWJhYjVcdWJhYjZcdWJhYjdcdWJhYmFcdWJhYmNcdWJhYmVcdWJhYmZcdWJhYzBcdWJhYzFcdWJhYzJcdWJhYzNcdWJhYzVcdWJhYzZcdWJhYzdcdWJhYzlcdWJhY2FcdWJhY2JcdWJhY2NcdWJhY2RcdWJhY2VcdWJhY2ZcdWJh''@;'; put 'put ''ZDBcdWJhZDFcdWJhZDJcdWJhZDNcdWJhZDRcdWJhZDVcdWJhZDZcdWJhZDdcdWJhZGFcdWJhZGJcdWJhZGNcdWJhZGRcdWJhZGVcdWJhZGZcdWJhZTBcdWJhZTFcdWJhZTJcdWJhZTNcdWJhZTRcdWJhZTVcdWJhZTZcdWJhZTdcdWJhZThcdWJhZTlcdWJhZWFcdWJhZWJcdWJhZWNcdWJhZWRc''@;'; put 'put ''dWJhZWVcdWJhZWZcdWJhZjBcdWJhZjFcdWJhZjJcdWJhZjNcdWJhZjRcdWJhZjVcdWJhZjZcdWJhZjdcdWJhZjhcdWJhZjlcdWJhZmFcdWJhZmJcdWJhZmRcdWJhZmVcdWJhZmZcdWJiMDFcdWJiMDJcdWJiMDNcdWJiMDVcdWJiMDZcdWJiMDdcdWJiMDhcdWJiMDlcdWJiMGFcdWJiMGJcdWJi''@;'; put 'put ''MGNcdWJiMGVcdWJiMTBcdWJiMTJcdWJiMTNcdWJiMTRcdWJiMTVcdWJiMTZcdWJiMTdcdWJiMTlcdWJiMWFcdWJiMWJcdWJiMWRcdWJiMWVcdWJiMWZcdWJiMjFcdWJiMjJcdWJiMjNcdWJiMjRcdWJiMjVcdWJiMjZcdWJiMjdcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDVdLmxlbmd0''@;'; put 'put ''aDsrK3ApNjU1MzMhPT1fWzE0NV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNDVdW3BdXT0zNzEyMCtwLGJbMzcxMjArcF09X1sxNDVdW3BdKTtmb3IoX1sxNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJiMjhcdWJi''@;'; put 'put ''MmFcdWJiMmNcdWJiMmRcdWJiMmVcdWJiMmZcdWJiMzBcdWJiMzFcdWJiMzJcdWJiMzNcdWJiMzdcdWJiMzlcdWJiM2FcdWJiM2ZcdWJiNDBcdWJiNDFcdWJiNDJcdWJiNDNcdWJiNDZcdWJiNDhcdWJiNGFcdWJiNGJcdWJiNGNcdWJiNGVcdWJiNTFcdWJiNTJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWJiNTNcdWJiNTVcdWJiNTZcdWJiNTdcdWJiNTlcdWJiNWFcdWJiNWJcdWJiNWNcdWJiNWRcdWJiNWVcdWJiNWZcdWJiNjBcdWJiNjJcdWJiNjRcdWJiNjVcdWJiNjZcdWJiNjdcdWJiNjhcdWJiNjlcdWJiNmFcdWJiNmJcdWJiNmRcdWJiNmVcdWJiNmZcdWJi''@;'; put 'put ''NzBcdWJiNzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJiNzJcdWJiNzNcdWJiNzRcdWJiNzVcdWJiNzZcdWJiNzdcdWJiNzhcdWJiNzlcdWJiN2FcdWJiN2JcdWJiN2NcdWJiN2RcdWJiN2VcdWJiN2ZcdWJiODBcdWJiODFcdWJiODJcdWJiODNcdWJiODRcdWJiODVc''@;'; put 'put ''dWJiODZcdWJiODdcdWJiODlcdWJiOGFcdWJiOGJcdWJiOGRcdWJiOGVcdWJiOGZcdWJiOTFcdWJiOTJcdWJiOTNcdWJiOTRcdWJiOTVcdWJiOTZcdWJiOTdcdWJiOThcdWJiOTlcdWJiOWFcdWJiOWJcdWJiOWNcdWJiOWRcdWJiOWVcdWJiOWZcdWJiYTBcdWJiYTFcdWJiYTJcdWJiYTNcdWJi''@;'; put 'put ''YTVcdWJiYTZcdWJiYTdcdWJiYTlcdWJiYWFcdWJiYWJcdWJiYWRcdWJiYWVcdWJiYWZcdWJiYjBcdWJiYjFcdWJiYjJcdWJiYjNcdWJiYjVcdWJiYjZcdWJiYjhcdWJiYjlcdWJiYmFcdWJiYmJcdWJiYmNcdWJiYmRcdWJiYmVcdWJiYmZcdWJiYzFcdWJiYzJcdWJiYzNcdWJiYzVcdWJiYzZc''@;'; put 'put ''dWJiYzdcdWJiYzlcdWJiY2FcdWJiY2JcdWJiY2NcdWJiY2RcdWJiY2VcdWJiY2ZcdWJiZDFcdWJiZDJcdWJiZDRcdWJiZDVcdWJiZDZcdWJiZDdcdWJiZDhcdWJiZDlcdWJiZGFcdWJiZGJcdWJiZGNcdWJiZGRcdWJiZGVcdWJiZGZcdWJiZTBcdWJiZTFcdWJiZTJcdWJiZTNcdWJiZTRcdWJi''@;'; put 'put ''ZTVcdWJiZTZcdWJiZTdcdWJiZThcdWJiZTlcdWJiZWFcdWJiZWJcdWJiZWNcdWJiZWRcdWJiZWVcdWJiZWZcdWJiZjBcdWJiZjFcdWJiZjJcdWJiZjNcdWJiZjRcdWJiZjVcdWJiZjZcdWJiZjdcdWJiZmFcdWJiZmJcdWJiZmRcdWJiZmVcdWJjMDFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9''@;'; put 'put ''X1sxNDZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0Nl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNDZdW3BdXT0zNzM3NitwLGJbMzczNzYrcF09X1sxNDZdW3BdKTtmb3IoX1sxNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWJjMDNcdWJjMDRcdWJjMDVcdWJjMDZcdWJjMDdcdWJjMGFcdWJjMGVcdWJjMTBcdWJjMTJcdWJjMTNcdWJjMTlcdWJjMWFcdWJjMjBcdWJjMjFcdWJjMjJcdWJjMjNcdWJjMjZcdWJjMjhcdWJjMmFcdWJjMmJcdWJjMmNcdWJjMmVcdWJjMmZcdWJjMzJcdWJjMzNcdWJjMzVcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJjMzZcdWJjMzdcdWJjMzlcdWJjM2FcdWJjM2JcdWJjM2NcdWJjM2RcdWJjM2VcdWJjM2ZcdWJjNDJcdWJjNDZcdWJjNDdcdWJjNDhcdWJjNGFcdWJjNGJcdWJjNGVcdWJjNGZcdWJjNTFcdWJjNTJcdWJjNTNcdWJjNTRcdWJjNTVcdWJj''@;'; put 'put ''NTZcdWJjNTdcdWJjNThcdWJjNTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJjNWFcdWJjNWJcdWJjNWNcdWJjNWVcdWJjNWZcdWJjNjBcdWJjNjFcdWJjNjJcdWJjNjNcdWJjNjRcdWJjNjVcdWJjNjZcdWJjNjdcdWJjNjhcdWJjNjlcdWJjNmFcdWJjNmJcdWJjNmNc''@;'; put 'put ''dWJjNmRcdWJjNmVcdWJjNmZcdWJjNzBcdWJjNzFcdWJjNzJcdWJjNzNcdWJjNzRcdWJjNzVcdWJjNzZcdWJjNzdcdWJjNzhcdWJjNzlcdWJjN2FcdWJjN2JcdWJjN2NcdWJjN2RcdWJjN2VcdWJjN2ZcdWJjODBcdWJjODFcdWJjODJcdWJjODNcdWJjODZcdWJjODdcdWJjODlcdWJjOGFcdWJj''@;'; put 'put ''OGRcdWJjOGZcdWJjOTBcdWJjOTFcdWJjOTJcdWJjOTNcdWJjOTZcdWJjOThcdWJjOWJcdWJjOWNcdWJjOWRcdWJjOWVcdWJjOWZcdWJjYTJcdWJjYTNcdWJjYTVcdWJjYTZcdWJjYTlcdWJjYWFcdWJjYWJcdWJjYWNcdWJjYWRcdWJjYWVcdWJjYWZcdWJjYjJcdWJjYjZcdWJjYjdcdWJjYjhc''@;'; put 'put ''dWJjYjlcdWJjYmFcdWJjYmJcdWJjYmVcdWJjYmZcdWJjYzFcdWJjYzJcdWJjYzNcdWJjYzVcdWJjYzZcdWJjYzdcdWJjYzhcdWJjYzlcdWJjY2FcdWJjY2JcdWJjY2NcdWJjY2VcdWJjZDJcdWJjZDNcdWJjZDRcdWJjZDZcdWJjZDdcdWJjZDlcdWJjZGFcdWJjZGJcdWJjZGRcdWJjZGVcdWJj''@;'; put 'put ''ZGZcdWJjZTBcdWJjZTFcdWJjZTJcdWJjZTNcdWJjZTRcdWJjZTVcdWJjZTZcdWJjZTdcdWJjZThcdWJjZTlcdWJjZWFcdWJjZWJcdWJjZWNcdWJjZWRcdWJjZWVcdWJjZWZcdWJjZjBcdWJjZjFcdWJjZjJcdWJjZjNcdWJjZjdcdWJjZjlcdWJjZmFcdWJjZmJcdWJjZmRcdWZmZmQiLnNwbGl0''@;'; put 'put ''KCIiKSxwPTA7cCE9X1sxNDddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0N11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNDddW3BdXT0zNzYzMitwLGJbMzc2MzIrcF09X1sxNDddW3BdKTtmb3IoX1sxNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWJjZmVcdWJjZmZcdWJkMDBcdWJkMDFcdWJkMDJcdWJkMDNcdWJkMDZcdWJkMDhcdWJkMGFcdWJkMGJcdWJkMGNcdWJkMGRcdWJkMGVcdWJkMGZcdWJkMTFcdWJkMTJcdWJkMTNcdWJkMTVcdWJkMTZcdWJkMTdcdWJkMThcdWJkMTlcdWJkMWFcdWJkMWJcdWJkMWNc''@;'; put 'put ''dWJkMWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkMWVcdWJkMWZcdWJkMjBcdWJkMjFcdWJkMjJcdWJkMjNcdWJkMjVcdWJkMjZcdWJkMjdcdWJkMjhcdWJkMjlcdWJkMmFcdWJkMmJcdWJkMmRcdWJkMmVcdWJkMmZcdWJkMzBcdWJkMzFcdWJkMzJcdWJkMzNcdWJk''@;'; put 'put ''MzRcdWJkMzVcdWJkMzZcdWJkMzdcdWJkMzhcdWJkMzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkM2FcdWJkM2JcdWJkM2NcdWJkM2RcdWJkM2VcdWJkM2ZcdWJkNDFcdWJkNDJcdWJkNDNcdWJkNDRcdWJkNDVcdWJkNDZcdWJkNDdcdWJkNGFcdWJkNGJcdWJkNGRc''@;'; put 'put ''dWJkNGVcdWJkNGZcdWJkNTFcdWJkNTJcdWJkNTNcdWJkNTRcdWJkNTVcdWJkNTZcdWJkNTdcdWJkNWFcdWJkNWJcdWJkNWNcdWJkNWRcdWJkNWVcdWJkNWZcdWJkNjBcdWJkNjFcdWJkNjJcdWJkNjNcdWJkNjVcdWJkNjZcdWJkNjdcdWJkNjlcdWJkNmFcdWJkNmJcdWJkNmNcdWJkNmRcdWJk''@;'; put 'put ''NmVcdWJkNmZcdWJkNzBcdWJkNzFcdWJkNzJcdWJkNzNcdWJkNzRcdWJkNzVcdWJkNzZcdWJkNzdcdWJkNzhcdWJkNzlcdWJkN2FcdWJkN2JcdWJkN2NcdWJkN2RcdWJkN2VcdWJkN2ZcdWJkODJcdWJkODNcdWJkODVcdWJkODZcdWJkOGJcdWJkOGNcdWJkOGRcdWJkOGVcdWJkOGZcdWJkOTJc''@;'; put 'put ''dWJkOTRcdWJkOTZcdWJkOTdcdWJkOThcdWJkOWJcdWJkOWRcdWJkOWVcdWJkOWZcdWJkYTBcdWJkYTFcdWJkYTJcdWJkYTNcdWJkYTVcdWJkYTZcdWJkYTdcdWJkYThcdWJkYTlcdWJkYWFcdWJkYWJcdWJkYWNcdWJkYWRcdWJkYWVcdWJkYWZcdWJkYjFcdWJkYjJcdWJkYjNcdWJkYjRcdWJk''@;'; put 'put ''YjVcdWJkYjZcdWJkYjdcdWJkYjlcdWJkYmFcdWJkYmJcdWJkYmNcdWJkYmRcdWJkYmVcdWJkYmZcdWJkYzBcdWJkYzFcdWJkYzJcdWJkYzNcdWJkYzRcdWJkYzVcdWJkYzZcdWJkYzdcdWJkYzhcdWJkYzlcdWJkY2FcdWJkY2JcdWJkY2NcdWJkY2RcdWJkY2VcdWJkY2ZcdWJkZDBcdWJkZDFc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0OF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNDhdW3BdXT0zNzg4OCtwLGJbMzc4ODgrcF09X1sxNDhdW3BdKTtmb3IoX1sxNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkZDJcdWJkZDNcdWJkZDZcdWJkZDdcdWJkZDlcdWJkZGFcdWJkZGJcdWJkZGRcdWJkZGVcdWJkZGZcdWJkZTBcdWJkZTFcdWJkZTJcdWJkZTNcdWJkZTRcdWJkZTVcdWJkZTZcdWJkZTdcdWJkZThcdWJkZWFcdWJkZWJcdWJkZWNcdWJkZWRc''@;'; put 'put ''dWJkZWVcdWJkZWZcdWJkZjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkZjJcdWJkZjNcdWJkZjVcdWJkZjZcdWJkZjdcdWJkZjlcdWJkZmFcdWJkZmJcdWJkZmNcdWJkZmRcdWJkZmVcdWJkZmZcdWJlMDFcdWJlMDJcdWJlMDRcdWJlMDZcdWJlMDdcdWJlMDhcdWJl''@;'; put 'put ''MDlcdWJlMGFcdWJlMGJcdWJlMGVcdWJlMGZcdWJlMTFcdWJlMTJcdWJlMTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJlMTVcdWJlMTZcdWJlMTdcdWJlMThcdWJlMTlcdWJlMWFcdWJlMWJcdWJlMWVcdWJlMjBcdWJlMjFcdWJlMjJcdWJlMjNcdWJlMjRcdWJlMjVc''@;'; put 'put ''dWJlMjZcdWJlMjdcdWJlMjhcdWJlMjlcdWJlMmFcdWJlMmJcdWJlMmNcdWJlMmRcdWJlMmVcdWJlMmZcdWJlMzBcdWJlMzFcdWJlMzJcdWJlMzNcdWJlMzRcdWJlMzVcdWJlMzZcdWJlMzdcdWJlMzhcdWJlMzlcdWJlM2FcdWJlM2JcdWJlM2NcdWJlM2RcdWJlM2VcdWJlM2ZcdWJlNDBcdWJl''@;'; put 'put ''NDFcdWJlNDJcdWJlNDNcdWJlNDZcdWJlNDdcdWJlNDlcdWJlNGFcdWJlNGJcdWJlNGRcdWJlNGZcdWJlNTBcdWJlNTFcdWJlNTJcdWJlNTNcdWJlNTZcdWJlNThcdWJlNWNcdWJlNWRcdWJlNWVcdWJlNWZcdWJlNjJcdWJlNjNcdWJlNjVcdWJlNjZcdWJlNjdcdWJlNjlcdWJlNmJcdWJlNmNc''@;'; put 'put ''dWJlNmRcdWJlNmVcdWJlNmZcdWJlNzJcdWJlNzZcdWJlNzdcdWJlNzhcdWJlNzlcdWJlN2FcdWJlN2VcdWJlN2ZcdWJlODFcdWJlODJcdWJlODNcdWJlODVcdWJlODZcdWJlODdcdWJlODhcdWJlODlcdWJlOGFcdWJlOGJcdWJlOGVcdWJlOTJcdWJlOTNcdWJlOTRcdWJlOTVcdWJlOTZcdWJl''@;'; put 'put ''OTdcdWJlOWFcdWJlOWJcdWJlOWNcdWJlOWRcdWJlOWVcdWJlOWZcdWJlYTBcdWJlYTFcdWJlYTJcdWJlYTNcdWJlYTRcdWJlYTVcdWJlYTZcdWJlYTdcdWJlYTlcdWJlYWFcdWJlYWJcdWJlYWNcdWJlYWRcdWJlYWVcdWJlYWZcdWJlYjBcdWJlYjFcdWJlYjJcdWJlYjNcdWJlYjRcdWJlYjVc''@;'; put 'put ''dWJlYjZcdWJlYjdcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0OV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNDldW3BdXT0zODE0NCtwLGJbMzgxNDQrcF09X1sxNDldW3BdKTtmb3IoX1sxNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJlYjhcdWJlYjlcdWJlYmFcdWJlYmJcdWJlYmNcdWJlYmRcdWJlYmVcdWJlYmZcdWJlYzBcdWJlYzFcdWJlYzJcdWJlYzNcdWJlYzRcdWJlYzVcdWJlYzZcdWJlYzdcdWJlYzhcdWJlYzlcdWJlY2FcdWJlY2JcdWJlY2Nc''@;'; put 'put ''dWJlY2RcdWJlY2VcdWJlY2ZcdWJlZDJcdWJlZDNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJlZDVcdWJlZDZcdWJlZDlcdWJlZGFcdWJlZGJcdWJlZGNcdWJlZGRcdWJlZGVcdWJlZGZcdWJlZTFcdWJlZTJcdWJlZTZcdWJlZTdcdWJlZThcdWJlZTlcdWJlZWFcdWJl''@;'; put 'put ''ZWJcdWJlZWRcdWJlZWVcdWJlZWZcdWJlZjBcdWJlZjFcdWJlZjJcdWJlZjNcdWJlZjRcdWJlZjVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJlZjZcdWJlZjdcdWJlZjhcdWJlZjlcdWJlZmFcdWJlZmJcdWJlZmNcdWJlZmRcdWJlZmVcdWJlZmZcdWJmMDBcdWJmMDJc''@;'; put 'put ''dWJmMDNcdWJmMDRcdWJmMDVcdWJmMDZcdWJmMDdcdWJmMGFcdWJmMGJcdWJmMGNcdWJmMGRcdWJmMGVcdWJmMGZcdWJmMTBcdWJmMTFcdWJmMTJcdWJmMTNcdWJmMTRcdWJmMTVcdWJmMTZcdWJmMTdcdWJmMWFcdWJmMWVcdWJmMWZcdWJmMjBcdWJmMjFcdWJmMjJcdWJmMjNcdWJmMjRcdWJm''@;'; put 'put ''MjVcdWJmMjZcdWJmMjdcdWJmMjhcdWJmMjlcdWJmMmFcdWJmMmJcdWJmMmNcdWJmMmRcdWJmMmVcdWJmMmZcdWJmMzBcdWJmMzFcdWJmMzJcdWJmMzNcdWJmMzRcdWJmMzVcdWJmMzZcdWJmMzdcdWJmMzhcdWJmMzlcdWJmM2FcdWJmM2JcdWJmM2NcdWJmM2RcdWJmM2VcdWJmM2ZcdWJmNDJc''@;'; put 'put ''dWJmNDNcdWJmNDVcdWJmNDZcdWJmNDdcdWJmNDlcdWJmNGFcdWJmNGJcdWJmNGNcdWJmNGRcdWJmNGVcdWJmNGZcdWJmNTJcdWJmNTNcdWJmNTRcdWJmNTZcdWJmNTdcdWJmNThcdWJmNTlcdWJmNWFcdWJmNWJcdWJmNWNcdWJmNWRcdWJmNWVcdWJmNWZcdWJmNjBcdWJmNjFcdWJmNjJcdWJm''@;'; put 'put ''NjNcdWJmNjRcdWJmNjVcdWJmNjZcdWJmNjdcdWJmNjhcdWJmNjlcdWJmNmFcdWJmNmJcdWJmNmNcdWJmNmRcdWJmNmVcdWJmNmZcdWJmNzBcdWJmNzFcdWJmNzJcdWJmNzNcdWJmNzRcdWJmNzVcdWJmNzZcdWJmNzdcdWJmNzhcdWJmNzlcdWJmN2FcdWJmN2JcdWJmN2NcdWJmN2RcdWJmN2Vc''@;'; put 'put ''dWJmN2ZcdWJmODBcdWJmODFcdWJmODJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1MF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNTBdW3BdXT0zODQwMCtwLGJbMzg0MDArcF09X1sxNTBdW3BdKTtmb3IoX1sxNTFdPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJmODNcdWJmODRcdWJmODVcdWJmODZcdWJmODdcdWJmODhcdWJmODlcdWJmOGFcdWJmOGJcdWJmOGNcdWJmOGRcdWJmOGVcdWJmOGZcdWJmOTBcdWJmOTFcdWJmOTJcdWJmOTNcdWJmOTVcdWJmOTZc''@;'; put 'put ''dWJmOTdcdWJmOThcdWJmOTlcdWJmOWFcdWJmOWJcdWJmOWNcdWJmOWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJmOWVcdWJmOWZcdWJmYTBcdWJmYTFcdWJmYTJcdWJmYTNcdWJmYTRcdWJmYTVcdWJmYTZcdWJmYTdcdWJmYThcdWJmYTlcdWJmYWFcdWJmYWJcdWJm''@;'; put 'put ''YWNcdWJmYWRcdWJmYWVcdWJmYWZcdWJmYjFcdWJmYjJcdWJmYjNcdWJmYjRcdWJmYjVcdWJmYjZcdWJmYjdcdWJmYjhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJmYjlcdWJmYmFcdWJmYmJcdWJmYmNcdWJmYmRcdWJmYmVcdWJmYmZcdWJmYzBcdWJmYzFcdWJmYzJc''@;'; put 'put ''dWJmYzNcdWJmYzRcdWJmYzZcdWJmYzdcdWJmYzhcdWJmYzlcdWJmY2FcdWJmY2JcdWJmY2VcdWJmY2ZcdWJmZDFcdWJmZDJcdWJmZDNcdWJmZDVcdWJmZDZcdWJmZDdcdWJmZDhcdWJmZDlcdWJmZGFcdWJmZGJcdWJmZGRcdWJmZGVcdWJmZTBcdWJmZTJcdWJmZTNcdWJmZTRcdWJmZTVcdWJm''@;'; put 'put ''ZTZcdWJmZTdcdWJmZThcdWJmZTlcdWJmZWFcdWJmZWJcdWJmZWNcdWJmZWRcdWJmZWVcdWJmZWZcdWJmZjBcdWJmZjFcdWJmZjJcdWJmZjNcdWJmZjRcdWJmZjVcdWJmZjZcdWJmZjdcdWJmZjhcdWJmZjlcdWJmZmFcdWJmZmJcdWJmZmNcdWJmZmRcdWJmZmVcdWJmZmZcdWMwMDBcdWMwMDFc''@;'; put 'put ''dWMwMDJcdWMwMDNcdWMwMDRcdWMwMDVcdWMwMDZcdWMwMDdcdWMwMDhcdWMwMDlcdWMwMGFcdWMwMGJcdWMwMGNcdWMwMGRcdWMwMGVcdWMwMGZcdWMwMTBcdWMwMTFcdWMwMTJcdWMwMTNcdWMwMTRcdWMwMTVcdWMwMTZcdWMwMTdcdWMwMThcdWMwMTlcdWMwMWFcdWMwMWJcdWMwMWNcdWMw''@;'; put 'put ''MWRcdWMwMWVcdWMwMWZcdWMwMjBcdWMwMjFcdWMwMjJcdWMwMjNcdWMwMjRcdWMwMjVcdWMwMjZcdWMwMjdcdWMwMjhcdWMwMjlcdWMwMmFcdWMwMmJcdWMwMmNcdWMwMmRcdWMwMmVcdWMwMmZcdWMwMzBcdWMwMzFcdWMwMzJcdWMwMzNcdWMwMzRcdWMwMzVcdWMwMzZcdWMwMzdcdWMwMzhc''@;'; put 'put ''dWMwMzlcdWMwM2FcdWMwM2JcdWMwM2RcdWMwM2VcdWMwM2ZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1MV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNTFdW3BdXT0zODY1NitwLGJbMzg2NTYrcF09X1sxNTFdW3BdKTtmb3IoX1sxNTJd''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMwNDBcdWMwNDFcdWMwNDJcdWMwNDNcdWMwNDRcdWMwNDVcdWMwNDZcdWMwNDdcdWMwNDhcdWMwNDlcdWMwNGFcdWMwNGJcdWMwNGNcdWMwNGRcdWMwNGVcdWMwNGZcdWMwNTBc''@;'; put 'put ''dWMwNTJcdWMwNTNcdWMwNTRcdWMwNTVcdWMwNTZcdWMwNTdcdWMwNTlcdWMwNWFcdWMwNWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMwNWRcdWMwNWVcdWMwNWZcdWMwNjFcdWMwNjJcdWMwNjNcdWMwNjRcdWMwNjVcdWMwNjZcdWMwNjdcdWMwNmFcdWMwNmJcdWMw''@;'; put 'put ''NmNcdWMwNmRcdWMwNmVcdWMwNmZcdWMwNzBcdWMwNzFcdWMwNzJcdWMwNzNcdWMwNzRcdWMwNzVcdWMwNzZcdWMwNzdcdWMwNzhcdWMwNzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMwN2FcdWMwN2JcdWMwN2NcdWMwN2RcdWMwN2VcdWMwN2ZcdWMwODBcdWMwODFc''@;'; put 'put ''dWMwODJcdWMwODNcdWMwODRcdWMwODVcdWMwODZcdWMwODdcdWMwODhcdWMwODlcdWMwOGFcdWMwOGJcdWMwOGNcdWMwOGRcdWMwOGVcdWMwOGZcdWMwOTJcdWMwOTNcdWMwOTVcdWMwOTZcdWMwOTdcdWMwOTlcdWMwOWFcdWMwOWJcdWMwOWNcdWMwOWRcdWMwOWVcdWMwOWZcdWMwYTJcdWMw''@;'; put 'put ''YTRcdWMwYTZcdWMwYTdcdWMwYThcdWMwYTlcdWMwYWFcdWMwYWJcdWMwYWVcdWMwYjFcdWMwYjJcdWMwYjdcdWMwYjhcdWMwYjlcdWMwYmFcdWMwYmJcdWMwYmVcdWMwYzJcdWMwYzNcdWMwYzRcdWMwYzZcdWMwYzdcdWMwY2FcdWMwY2JcdWMwY2RcdWMwY2VcdWMwY2ZcdWMwZDFcdWMwZDJc''@;'; put 'put ''dWMwZDNcdWMwZDRcdWMwZDVcdWMwZDZcdWMwZDdcdWMwZGFcdWMwZGVcdWMwZGZcdWMwZTBcdWMwZTFcdWMwZTJcdWMwZTNcdWMwZTZcdWMwZTdcdWMwZTlcdWMwZWFcdWMwZWJcdWMwZWRcdWMwZWVcdWMwZWZcdWMwZjBcdWMwZjFcdWMwZjJcdWMwZjNcdWMwZjZcdWMwZjhcdWMwZmFcdWMw''@;'; put 'put ''ZmJcdWMwZmNcdWMwZmRcdWMwZmVcdWMwZmZcdWMxMDFcdWMxMDJcdWMxMDNcdWMxMDVcdWMxMDZcdWMxMDdcdWMxMDlcdWMxMGFcdWMxMGJcdWMxMGNcdWMxMGRcdWMxMGVcdWMxMGZcdWMxMTFcdWMxMTJcdWMxMTNcdWMxMTRcdWMxMTZcdWMxMTdcdWMxMThcdWMxMTlcdWMxMWFcdWMxMWJc''@;'; put 'put ''dWMxMjFcdWMxMjJcdWMxMjVcdWMxMjhcdWMxMjlcdWMxMmFcdWMxMmJcdWMxMmVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1Ml1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNTJdW3BdXT0zODkxMitwLGJbMzg5MTIrcF09X1sxNTJdW3Bd''@;'; put 'put ''KTtmb3IoX1sxNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMxMzJcdWMxMzNcdWMxMzRcdWMxMzVcdWMxMzdcdWMxM2FcdWMxM2JcdWMxM2RcdWMxM2VcdWMxM2ZcdWMxNDFcdWMxNDJcdWMxNDNcdWMxNDRcdWMxNDVc''@;'; put 'put ''dWMxNDZcdWMxNDdcdWMxNGFcdWMxNGVcdWMxNGZcdWMxNTBcdWMxNTFcdWMxNTJcdWMxNTNcdWMxNTZcdWMxNTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMxNTlcdWMxNWFcdWMxNWJcdWMxNWRcdWMxNWVcdWMxNWZcdWMxNjBcdWMxNjFcdWMxNjJcdWMxNjNcdWMx''@;'; put 'put ''NjZcdWMxNmFcdWMxNmJcdWMxNmNcdWMxNmRcdWMxNmVcdWMxNmZcdWMxNzFcdWMxNzJcdWMxNzNcdWMxNzVcdWMxNzZcdWMxNzdcdWMxNzlcdWMxN2FcdWMxN2JcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMxN2NcdWMxN2RcdWMxN2VcdWMxN2ZcdWMxODBcdWMxODFc''@;'; put 'put ''dWMxODJcdWMxODNcdWMxODRcdWMxODZcdWMxODdcdWMxODhcdWMxODlcdWMxOGFcdWMxOGJcdWMxOGZcdWMxOTFcdWMxOTJcdWMxOTNcdWMxOTVcdWMxOTdcdWMxOThcdWMxOTlcdWMxOWFcdWMxOWJcdWMxOWVcdWMxYTBcdWMxYTJcdWMxYTNcdWMxYTRcdWMxYTZcdWMxYTdcdWMxYWFcdWMx''@;'; put 'put ''YWJcdWMxYWRcdWMxYWVcdWMxYWZcdWMxYjFcdWMxYjJcdWMxYjNcdWMxYjRcdWMxYjVcdWMxYjZcdWMxYjdcdWMxYjhcdWMxYjlcdWMxYmFcdWMxYmJcdWMxYmNcdWMxYmVcdWMxYmZcdWMxYzBcdWMxYzFcdWMxYzJcdWMxYzNcdWMxYzVcdWMxYzZcdWMxYzdcdWMxYzlcdWMxY2FcdWMxY2Jc''@;'; put 'put ''dWMxY2RcdWMxY2VcdWMxY2ZcdWMxZDBcdWMxZDFcdWMxZDJcdWMxZDNcdWMxZDVcdWMxZDZcdWMxZDlcdWMxZGFcdWMxZGJcdWMxZGNcdWMxZGRcdWMxZGVcdWMxZGZcdWMxZTFcdWMxZTJcdWMxZTNcdWMxZTVcdWMxZTZcdWMxZTdcdWMxZTlcdWMxZWFcdWMxZWJcdWMxZWNcdWMxZWRcdWMx''@;'; put 'put ''ZWVcdWMxZWZcdWMxZjJcdWMxZjRcdWMxZjVcdWMxZjZcdWMxZjdcdWMxZjhcdWMxZjlcdWMxZmFcdWMxZmJcdWMxZmVcdWMxZmZcdWMyMDFcdWMyMDJcdWMyMDNcdWMyMDVcdWMyMDZcdWMyMDdcdWMyMDhcdWMyMDlcdWMyMGFcdWMyMGJcdWMyMGVcdWMyMTBcdWMyMTJcdWMyMTNcdWMyMTRc''@;'; put 'put ''dWMyMTVcdWMyMTZcdWMyMTdcdWMyMWFcdWMyMWJcdWMyMWRcdWMyMWVcdWMyMjFcdWMyMjJcdWMyMjNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1M11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNTNdW3BdXT0zOTE2OCtwLGJbMzkxNjgr''@;'; put 'put ''cF09X1sxNTNdW3BdKTtmb3IoX1sxNTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMyMjRcdWMyMjVcdWMyMjZcdWMyMjdcdWMyMmFcdWMyMmNcdWMyMmVcdWMyMzBcdWMyMzNcdWMyMzVcdWMyMzZcdWMyMzdcdWMyMzhc''@;'; put 'put ''dWMyMzlcdWMyM2FcdWMyM2JcdWMyM2NcdWMyM2RcdWMyM2VcdWMyM2ZcdWMyNDBcdWMyNDFcdWMyNDJcdWMyNDNcdWMyNDRcdWMyNDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMyNDZcdWMyNDdcdWMyNDlcdWMyNGFcdWMyNGJcdWMyNGNcdWMyNGRcdWMyNGVcdWMy''@;'; put 'put ''NGZcdWMyNTJcdWMyNTNcdWMyNTVcdWMyNTZcdWMyNTdcdWMyNTlcdWMyNWFcdWMyNWJcdWMyNWNcdWMyNWRcdWMyNWVcdWMyNWZcdWMyNjFcdWMyNjJcdWMyNjNcdWMyNjRcdWMyNjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMyNjdcdWMyNjhcdWMyNjlcdWMyNmFc''@;'; put 'put ''dWMyNmJcdWMyNmVcdWMyNmZcdWMyNzFcdWMyNzJcdWMyNzNcdWMyNzVcdWMyNzZcdWMyNzdcdWMyNzhcdWMyNzlcdWMyN2FcdWMyN2JcdWMyN2VcdWMyODBcdWMyODJcdWMyODNcdWMyODRcdWMyODVcdWMyODZcdWMyODdcdWMyOGFcdWMyOGJcdWMyOGNcdWMyOGRcdWMyOGVcdWMyOGZcdWMy''@;'; put 'put ''OTFcdWMyOTJcdWMyOTNcdWMyOTRcdWMyOTVcdWMyOTZcdWMyOTdcdWMyOTlcdWMyOWFcdWMyOWNcdWMyOWVcdWMyOWZcdWMyYTBcdWMyYTFcdWMyYTJcdWMyYTNcdWMyYTZcdWMyYTdcdWMyYTlcdWMyYWFcdWMyYWJcdWMyYWVcdWMyYWZcdWMyYjBcdWMyYjFcdWMyYjJcdWMyYjNcdWMyYjZc''@;'; put 'put ''dWMyYjhcdWMyYmFcdWMyYmJcdWMyYmNcdWMyYmRcdWMyYmVcdWMyYmZcdWMyYzBcdWMyYzFcdWMyYzJcdWMyYzNcdWMyYzRcdWMyYzVcdWMyYzZcdWMyYzdcdWMyYzhcdWMyYzlcdWMyY2FcdWMyY2JcdWMyY2NcdWMyY2RcdWMyY2VcdWMyY2ZcdWMyZDBcdWMyZDFcdWMyZDJcdWMyZDNcdWMy''@;'; put 'put ''ZDRcdWMyZDVcdWMyZDZcdWMyZDdcdWMyZDhcdWMyZDlcdWMyZGFcdWMyZGJcdWMyZGVcdWMyZGZcdWMyZTFcdWMyZTJcdWMyZTVcdWMyZTZcdWMyZTdcdWMyZThcdWMyZTlcdWMyZWFcdWMyZWVcdWMyZjBcdWMyZjJcdWMyZjNcdWMyZjRcdWMyZjVcdWMyZjdcdWMyZmFcdWMyZmRcdWMyZmVc''@;'; put 'put ''dWMyZmZcdWMzMDFcdWMzMDJcdWMzMDNcdWMzMDRcdWMzMDVcdWMzMDZcdWMzMDdcdWMzMGFcdWMzMGJcdWMzMGVcdWMzMGZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1NF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNTRdW3BdXT0zOTQy''@;'; put 'put ''NCtwLGJbMzk0MjQrcF09X1sxNTRdW3BdKTtmb3IoX1sxNTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzMTBcdWMzMTFcdWMzMTJcdWMzMTZcdWMzMTdcdWMzMTlcdWMzMWFcdWMzMWJcdWMzMWRcdWMzMWVcdWMzMWZc''@;'; put 'put ''dWMzMjBcdWMzMjFcdWMzMjJcdWMzMjNcdWMzMjZcdWMzMjdcdWMzMmFcdWMzMmJcdWMzMmNcdWMzMmRcdWMzMmVcdWMzMmZcdWMzMzBcdWMzMzFcdWMzMzJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzMzNcdWMzMzRcdWMzMzVcdWMzMzZcdWMzMzdcdWMzMzhcdWMz''@;'; put 'put ''MzlcdWMzM2FcdWMzM2JcdWMzM2NcdWMzM2RcdWMzM2VcdWMzM2ZcdWMzNDBcdWMzNDFcdWMzNDJcdWMzNDNcdWMzNDRcdWMzNDZcdWMzNDdcdWMzNDhcdWMzNDlcdWMzNGFcdWMzNGJcdWMzNGNcdWMzNGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzNGVcdWMzNGZc''@;'; put 'put ''dWMzNTBcdWMzNTFcdWMzNTJcdWMzNTNcdWMzNTRcdWMzNTVcdWMzNTZcdWMzNTdcdWMzNThcdWMzNTlcdWMzNWFcdWMzNWJcdWMzNWNcdWMzNWRcdWMzNWVcdWMzNWZcdWMzNjBcdWMzNjFcdWMzNjJcdWMzNjNcdWMzNjRcdWMzNjVcdWMzNjZcdWMzNjdcdWMzNmFcdWMzNmJcdWMzNmRcdWMz''@;'; put 'put ''NmVcdWMzNmZcdWMzNzFcdWMzNzNcdWMzNzRcdWMzNzVcdWMzNzZcdWMzNzdcdWMzN2FcdWMzN2JcdWMzN2VcdWMzN2ZcdWMzODBcdWMzODFcdWMzODJcdWMzODNcdWMzODVcdWMzODZcdWMzODdcdWMzODlcdWMzOGFcdWMzOGJcdWMzOGRcdWMzOGVcdWMzOGZcdWMzOTBcdWMzOTFcdWMzOTJc''@;'; put 'put ''dWMzOTNcdWMzOTRcdWMzOTVcdWMzOTZcdWMzOTdcdWMzOThcdWMzOTlcdWMzOWFcdWMzOWJcdWMzOWNcdWMzOWRcdWMzOWVcdWMzOWZcdWMzYTBcdWMzYTFcdWMzYTJcdWMzYTNcdWMzYTRcdWMzYTVcdWMzYTZcdWMzYTdcdWMzYThcdWMzYTlcdWMzYWFcdWMzYWJcdWMzYWNcdWMzYWRcdWMz''@;'; put 'put ''YWVcdWMzYWZcdWMzYjBcdWMzYjFcdWMzYjJcdWMzYjNcdWMzYjRcdWMzYjVcdWMzYjZcdWMzYjdcdWMzYjhcdWMzYjlcdWMzYmFcdWMzYmJcdWMzYmNcdWMzYmRcdWMzYmVcdWMzYmZcdWMzYzFcdWMzYzJcdWMzYzNcdWMzYzRcdWMzYzVcdWMzYzZcdWMzYzdcdWMzYzhcdWMzYzlcdWMzY2Fc''@;'; put 'put ''dWMzY2JcdWMzY2NcdWMzY2RcdWMzY2VcdWMzY2ZcdWMzZDBcdWMzZDFcdWMzZDJcdWMzZDNcdWMzZDRcdWMzZDVcdWMzZDZcdWMzZDdcdWMzZGFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1NV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sx''@;'; put 'put ''NTVdW3BdXT0zOTY4MCtwLGJbMzk2ODArcF09X1sxNTVdW3BdKTtmb3IoX1sxNTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzZGJcdWMzZGRcdWMzZGVcdWMzZTFcdWMzZTNcdWMzZTRcdWMzZTVcdWMzZTZcdWMzZTdc''@;'; put 'put ''dWMzZWFcdWMzZWJcdWMzZWNcdWMzZWVcdWMzZWZcdWMzZjBcdWMzZjFcdWMzZjJcdWMzZjNcdWMzZjZcdWMzZjdcdWMzZjlcdWMzZmFcdWMzZmJcdWMzZmNcdWMzZmRcdWMzZmVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzZmZcdWM0MDBcdWM0MDFcdWM0MDJcdWM0''@;'; put 'put ''MDNcdWM0MDRcdWM0MDVcdWM0MDZcdWM0MDdcdWM0MDlcdWM0MGFcdWM0MGJcdWM0MGNcdWM0MGRcdWM0MGVcdWM0MGZcdWM0MTFcdWM0MTJcdWM0MTNcdWM0MTRcdWM0MTVcdWM0MTZcdWM0MTdcdWM0MThcdWM0MTlcdWM0MWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWM0MWJcdWM0MWNcdWM0MWRcdWM0MWVcdWM0MWZcdWM0MjBcdWM0MjFcdWM0MjJcdWM0MjNcdWM0MjVcdWM0MjZcdWM0MjdcdWM0MjhcdWM0MjlcdWM0MmFcdWM0MmJcdWM0MmRcdWM0MmVcdWM0MmZcdWM0MzFcdWM0MzJcdWM0MzNcdWM0MzVcdWM0MzZcdWM0MzdcdWM0MzhcdWM0MzlcdWM0''@;'; put 'put ''M2FcdWM0M2JcdWM0M2VcdWM0M2ZcdWM0NDBcdWM0NDFcdWM0NDJcdWM0NDNcdWM0NDRcdWM0NDVcdWM0NDZcdWM0NDdcdWM0NDlcdWM0NGFcdWM0NGJcdWM0NGNcdWM0NGRcdWM0NGVcdWM0NGZcdWM0NTBcdWM0NTFcdWM0NTJcdWM0NTNcdWM0NTRcdWM0NTVcdWM0NTZcdWM0NTdcdWM0NThc''@;'; put 'put ''dWM0NTlcdWM0NWFcdWM0NWJcdWM0NWNcdWM0NWRcdWM0NWVcdWM0NWZcdWM0NjBcdWM0NjFcdWM0NjJcdWM0NjNcdWM0NjZcdWM0NjdcdWM0NjlcdWM0NmFcdWM0NmJcdWM0NmRcdWM0NmVcdWM0NmZcdWM0NzBcdWM0NzFcdWM0NzJcdWM0NzNcdWM0NzZcdWM0NzdcdWM0NzhcdWM0N2FcdWM0''@;'; put 'put ''N2JcdWM0N2NcdWM0N2RcdWM0N2VcdWM0N2ZcdWM0ODFcdWM0ODJcdWM0ODNcdWM0ODRcdWM0ODVcdWM0ODZcdWM0ODdcdWM0ODhcdWM0ODlcdWM0OGFcdWM0OGJcdWM0OGNcdWM0OGRcdWM0OGVcdWM0OGZcdWM0OTBcdWM0OTFcdWM0OTJcdWM0OTNcdWM0OTVcdWM0OTZcdWM0OTdcdWM0OThc''@;'; put 'put ''dWM0OTlcdWM0OWFcdWM0OWJcdWM0OWRcdWM0OWVcdWM0OWZcdWM0YTBcdWM0YTFcdWM0YTJcdWM0YTNcdWM0YTRcdWM0YTVcdWM0YTZcdWM0YTdcdWM0YThcdWM0YTlcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1Nl1bcF0uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKElbX1sxNTZdW3BdXT0zOTkzNitwLGJbMzk5MzYrcF09X1sxNTZdW3BdKTtmb3IoX1sxNTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM0YWFcdWM0YWJcdWM0YWNcdWM0YWRcdWM0YWVcdWM0YWZcdWM0YjBc''@;'; put 'put ''dWM0YjFcdWM0YjJcdWM0YjNcdWM0YjRcdWM0YjVcdWM0YjZcdWM0YjdcdWM0YjlcdWM0YmFcdWM0YmJcdWM0YmRcdWM0YmVcdWM0YmZcdWM0YzBcdWM0YzFcdWM0YzJcdWM0YzNcdWM0YzRcdWM0YzVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM0YzZcdWM0YzdcdWM0''@;'; put 'put ''YzhcdWM0YzlcdWM0Y2FcdWM0Y2JcdWM0Y2NcdWM0Y2RcdWM0Y2VcdWM0Y2ZcdWM0ZDBcdWM0ZDFcdWM0ZDJcdWM0ZDNcdWM0ZDRcdWM0ZDVcdWM0ZDZcdWM0ZDdcdWM0ZDhcdWM0ZDlcdWM0ZGFcdWM0ZGJcdWM0ZGNcdWM0ZGRcdWM0ZGVcdWM0ZGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWM0ZTBcdWM0ZTFcdWM0ZTJcdWM0ZTNcdWM0ZTRcdWM0ZTVcdWM0ZTZcdWM0ZTdcdWM0ZThcdWM0ZWFcdWM0ZWJcdWM0ZWNcdWM0ZWRcdWM0ZWVcdWM0ZWZcdWM0ZjJcdWM0ZjNcdWM0ZjVcdWM0ZjZcdWM0ZjdcdWM0ZjlcdWM0ZmJcdWM0ZmNcdWM0ZmRcdWM0ZmVcdWM1''@;'; put 'put ''MDJcdWM1MDNcdWM1MDRcdWM1MDVcdWM1MDZcdWM1MDdcdWM1MDhcdWM1MDlcdWM1MGFcdWM1MGJcdWM1MGRcdWM1MGVcdWM1MGZcdWM1MTFcdWM1MTJcdWM1MTNcdWM1MTVcdWM1MTZcdWM1MTdcdWM1MThcdWM1MTlcdWM1MWFcdWM1MWJcdWM1MWRcdWM1MWVcdWM1MWZcdWM1MjBcdWM1MjFc''@;'; put 'put ''dWM1MjJcdWM1MjNcdWM1MjRcdWM1MjVcdWM1MjZcdWM1MjdcdWM1MmFcdWM1MmJcdWM1MmRcdWM1MmVcdWM1MmZcdWM1MzFcdWM1MzJcdWM1MzNcdWM1MzRcdWM1MzVcdWM1MzZcdWM1MzdcdWM1M2FcdWM1M2NcdWM1M2VcdWM1M2ZcdWM1NDBcdWM1NDFcdWM1NDJcdWM1NDNcdWM1NDZcdWM1''@;'; put 'put ''NDdcdWM1NGJcdWM1NGZcdWM1NTBcdWM1NTFcdWM1NTJcdWM1NTZcdWM1NWFcdWM1NWJcdWM1NWNcdWM1NWZcdWM1NjJcdWM1NjNcdWM1NjVcdWM1NjZcdWM1NjdcdWM1NjlcdWM1NmFcdWM1NmJcdWM1NmNcdWM1NmRcdWM1NmVcdWM1NmZcdWM1NzJcdWM1NzZcdWM1NzdcdWM1NzhcdWM1Nzlc''@;'; put 'put ''dWM1N2FcdWM1N2JcdWM1N2VcdWM1N2ZcdWM1ODFcdWM1ODJcdWM1ODNcdWM1ODVcdWM1ODZcdWM1ODhcdWM1ODlcdWM1OGFcdWM1OGJcdWM1OGVcdWM1OTBcdWM1OTJcdWM1OTNcdWM1OTRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1N11b''@;'; put 'put ''cF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNTddW3BdXT00MDE5MitwLGJbNDAxOTIrcF09X1sxNTddW3BdKTtmb3IoX1sxNThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM1OTZcdWM1OTlcdWM1OWFcdWM1OWJcdWM1OWRc''@;'; put 'put ''dWM1OWVcdWM1OWZcdWM1YTFcdWM1YTJcdWM1YTNcdWM1YTRcdWM1YTVcdWM1YTZcdWM1YTdcdWM1YThcdWM1YWFcdWM1YWJcdWM1YWNcdWM1YWRcdWM1YWVcdWM1YWZcdWM1YjBcdWM1YjFcdWM1YjJcdWM1YjNcdWM1YjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM1''@;'; put 'put ''YjdcdWM1YmFcdWM1YmZcdWM1YzBcdWM1YzFcdWM1YzJcdWM1YzNcdWM1Y2JcdWM1Y2RcdWM1Y2ZcdWM1ZDJcdWM1ZDNcdWM1ZDVcdWM1ZDZcdWM1ZDdcdWM1ZDlcdWM1ZGFcdWM1ZGJcdWM1ZGNcdWM1ZGRcdWM1ZGVcdWM1ZGZcdWM1ZTJcdWM1ZTRcdWM1ZTZcdWM1ZTdcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM1ZThcdWM1ZTlcdWM1ZWFcdWM1ZWJcdWM1ZWZcdWM1ZjFcdWM1ZjJcdWM1ZjNcdWM1ZjVcdWM1ZjhcdWM1ZjlcdWM1ZmFcdWM1ZmJcdWM2MDJcdWM2MDNcdWM2MDRcdWM2MDlcdWM2MGFcdWM2MGJcdWM2MGRcdWM2MGVcdWM2MGZcdWM2MTFcdWM2''@;'; put 'put ''MTJcdWM2MTNcdWM2MTRcdWM2MTVcdWM2MTZcdWM2MTdcdWM2MWFcdWM2MWRcdWM2MWVcdWM2MWZcdWM2MjBcdWM2MjFcdWM2MjJcdWM2MjNcdWM2MjZcdWM2MjdcdWM2MjlcdWM2MmFcdWM2MmJcdWM2MmZcdWM2MzFcdWM2MzJcdWM2MzZcdWM2MzhcdWM2M2FcdWM2M2NcdWM2M2RcdWM2M2Vc''@;'; put 'put ''dWM2M2ZcdWM2NDJcdWM2NDNcdWM2NDVcdWM2NDZcdWM2NDdcdWM2NDlcdWM2NGFcdWM2NGJcdWM2NGNcdWM2NGRcdWM2NGVcdWM2NGZcdWM2NTJcdWM2NTZcdWM2NTdcdWM2NThcdWM2NTlcdWM2NWFcdWM2NWJcdWM2NWVcdWM2NWZcdWM2NjFcdWM2NjJcdWM2NjNcdWM2NjRcdWM2NjVcdWM2''@;'; put 'put ''NjZcdWM2NjdcdWM2NjhcdWM2NjlcdWM2NmFcdWM2NmJcdWM2NmRcdWM2NmVcdWM2NzBcdWM2NzJcdWM2NzNcdWM2NzRcdWM2NzVcdWM2NzZcdWM2NzdcdWM2N2FcdWM2N2JcdWM2N2RcdWM2N2VcdWM2N2ZcdWM2ODFcdWM2ODJcdWM2ODNcdWM2ODRcdWM2ODVcdWM2ODZcdWM2ODdcdWM2OGFc''@;'; put 'put ''dWM2OGNcdWM2OGVcdWM2OGZcdWM2OTBcdWM2OTFcdWM2OTJcdWM2OTNcdWM2OTZcdWM2OTdcdWM2OTlcdWM2OWFcdWM2OWJcdWM2OWRcdWM2OWVcdWM2OWZcdWM2YTBcdWM2YTFcdWM2YTJcdWM2YTNcdWM2YTZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNThdLmxlbmd0aDsrK3ApNjU1''@;'; put 'put ''MzMhPT1fWzE1OF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNThdW3BdXT00MDQ0OCtwLGJbNDA0NDgrcF09X1sxNThdW3BdKTtmb3IoX1sxNTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM2YThcdWM2YWFcdWM2YWJc''@;'; put 'put ''dWM2YWNcdWM2YWRcdWM2YWVcdWM2YWZcdWM2YjJcdWM2YjNcdWM2YjVcdWM2YjZcdWM2YjdcdWM2YmJcdWM2YmNcdWM2YmRcdWM2YmVcdWM2YmZcdWM2YzJcdWM2YzRcdWM2YzZcdWM2YzdcdWM2YzhcdWM2YzlcdWM2Y2FcdWM2Y2JcdWM2Y2VcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWM2Y2ZcdWM2ZDFcdWM2ZDJcdWM2ZDNcdWM2ZDVcdWM2ZDZcdWM2ZDdcdWM2ZDhcdWM2ZDlcdWM2ZGFcdWM2ZGJcdWM2ZGVcdWM2ZGZcdWM2ZTJcdWM2ZTNcdWM2ZTRcdWM2ZTVcdWM2ZTZcdWM2ZTdcdWM2ZWFcdWM2ZWJcdWM2ZWRcdWM2ZWVcdWM2ZWZcdWM2ZjFcdWM2ZjJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM2ZjNcdWM2ZjRcdWM2ZjVcdWM2ZjZcdWM2ZjdcdWM2ZmFcdWM2ZmJcdWM2ZmNcdWM2ZmVcdWM2ZmZcdWM3MDBcdWM3MDFcdWM3MDJcdWM3MDNcdWM3MDZcdWM3MDdcdWM3MDlcdWM3MGFcdWM3MGJcdWM3MGRcdWM3MGVcdWM3''@;'; put 'put ''MGZcdWM3MTBcdWM3MTFcdWM3MTJcdWM3MTNcdWM3MTZcdWM3MThcdWM3MWFcdWM3MWJcdWM3MWNcdWM3MWRcdWM3MWVcdWM3MWZcdWM3MjJcdWM3MjNcdWM3MjVcdWM3MjZcdWM3MjdcdWM3MjlcdWM3MmFcdWM3MmJcdWM3MmNcdWM3MmRcdWM3MmVcdWM3MmZcdWM3MzJcdWM3MzRcdWM3MzZc''@;'; put 'put ''dWM3MzhcdWM3MzlcdWM3M2FcdWM3M2JcdWM3M2VcdWM3M2ZcdWM3NDFcdWM3NDJcdWM3NDNcdWM3NDVcdWM3NDZcdWM3NDdcdWM3NDhcdWM3NDlcdWM3NGJcdWM3NGVcdWM3NTBcdWM3NTlcdWM3NWFcdWM3NWJcdWM3NWRcdWM3NWVcdWM3NWZcdWM3NjFcdWM3NjJcdWM3NjNcdWM3NjRcdWM3''@;'; put 'put ''NjVcdWM3NjZcdWM3NjdcdWM3NjlcdWM3NmFcdWM3NmNcdWM3NmRcdWM3NmVcdWM3NmZcdWM3NzBcdWM3NzFcdWM3NzJcdWM3NzNcdWM3NzZcdWM3NzdcdWM3NzlcdWM3N2FcdWM3N2JcdWM3N2ZcdWM3ODBcdWM3ODFcdWM3ODJcdWM3ODZcdWM3OGJcdWM3OGNcdWM3OGRcdWM3OGZcdWM3OTJc''@;'; put 'put ''dWM3OTNcdWM3OTVcdWM3OTlcdWM3OWJcdWM3OWNcdWM3OWRcdWM3OWVcdWM3OWZcdWM3YTJcdWM3YTdcdWM3YThcdWM3YTlcdWM3YWFcdWM3YWJcdWM3YWVcdWM3YWZcdWM3YjFcdWM3YjJcdWM3YjNcdWM3YjVcdWM3YjZcdWM3YjdcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTldLmxl''@;'; put 'put ''bmd0aDsrK3ApNjU1MzMhPT1fWzE1OV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNTldW3BdXT00MDcwNCtwLGJbNDA3MDQrcF09X1sxNTldW3BdKTtmb3IoX1sxNjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM3Yjhc''@;'; put 'put ''dWM3YjlcdWM3YmFcdWM3YmJcdWM3YmVcdWM3YzJcdWM3YzNcdWM3YzRcdWM3YzVcdWM3YzZcdWM3YzdcdWM3Y2FcdWM3Y2JcdWM3Y2RcdWM3Y2ZcdWM3ZDFcdWM3ZDJcdWM3ZDNcdWM3ZDRcdWM3ZDVcdWM3ZDZcdWM3ZDdcdWM3ZDlcdWM3ZGFcdWM3ZGJcdWM3ZGNcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM3ZGVcdWM3ZGZcdWM3ZTBcdWM3ZTFcdWM3ZTJcdWM3ZTNcdWM3ZTVcdWM3ZTZcdWM3ZTdcdWM3ZTlcdWM3ZWFcdWM3ZWJcdWM3ZWRcdWM3ZWVcdWM3ZWZcdWM3ZjBcdWM3ZjFcdWM3ZjJcdWM3ZjNcdWM3ZjRcdWM3ZjVcdWM3ZjZcdWM3ZjdcdWM3Zjhc''@;'; put 'put ''dWM3ZjlcdWM3ZmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM3ZmJcdWM3ZmNcdWM3ZmRcdWM3ZmVcdWM3ZmZcdWM4MDJcdWM4MDNcdWM4MDVcdWM4MDZcdWM4MDdcdWM4MDlcdWM4MGJcdWM4MGNcdWM4MGRcdWM4MGVcdWM4MGZcdWM4MTJcdWM4MTRcdWM4MTdcdWM4''@;'; put 'put ''MThcdWM4MTlcdWM4MWFcdWM4MWJcdWM4MWVcdWM4MWZcdWM4MjFcdWM4MjJcdWM4MjNcdWM4MjVcdWM4MjZcdWM4MjdcdWM4MjhcdWM4MjlcdWM4MmFcdWM4MmJcdWM4MmVcdWM4MzBcdWM4MzJcdWM4MzNcdWM4MzRcdWM4MzVcdWM4MzZcdWM4MzdcdWM4MzlcdWM4M2FcdWM4M2JcdWM4M2Rc''@;'; put 'put ''dWM4M2VcdWM4M2ZcdWM4NDFcdWM4NDJcdWM4NDNcdWM4NDRcdWM4NDVcdWM4NDZcdWM4NDdcdWM4NGFcdWM4NGJcdWM4NGVcdWM4NGZcdWM4NTBcdWM4NTFcdWM4NTJcdWM4NTNcdWM4NTVcdWM4NTZcdWM4NTdcdWM4NThcdWM4NTlcdWM4NWFcdWM4NWJcdWM4NWNcdWM4NWRcdWM4NWVcdWM4''@;'; put 'put ''NWZcdWM4NjBcdWM4NjFcdWM4NjJcdWM4NjNcdWM4NjRcdWM4NjVcdWM4NjZcdWM4NjdcdWM4NjhcdWM4NjlcdWM4NmFcdWM4NmJcdWM4NmNcdWM4NmRcdWM4NmVcdWM4NmZcdWM4NzJcdWM4NzNcdWM4NzVcdWM4NzZcdWM4NzdcdWM4NzlcdWM4N2JcdWM4N2NcdWM4N2RcdWM4N2VcdWM4N2Zc''@;'; put 'put ''dWM4ODJcdWM4ODRcdWM4ODhcdWM4ODlcdWM4OGFcdWM4OGVcdWM4OGZcdWM4OTBcdWM4OTFcdWM4OTJcdWM4OTNcdWM4OTVcdWM4OTZcdWM4OTdcdWM4OThcdWM4OTlcdWM4OWFcdWM4OWJcdWM4OWNcdWM4OWVcdWM4YTBcdWM4YTJcdWM4YTNcdWM4YTRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7''@;'; put 'put ''cCE9X1sxNjBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2MF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNjBdW3BdXT00MDk2MCtwLGJbNDA5NjArcF09X1sxNjBdW3BdKTtmb3IoX1sxNjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWM4YTVcdWM4YTZcdWM4YTdcdWM4YTlcdWM4YWFcdWM4YWJcdWM4YWNcdWM4YWRcdWM4YWVcdWM4YWZcdWM4YjBcdWM4YjFcdWM4YjJcdWM4YjNcdWM4YjRcdWM4YjVcdWM4YjZcdWM4YjdcdWM4YjhcdWM4YjlcdWM4YmFcdWM4YmJcdWM4YmVcdWM4YmZcdWM4YzBcdWM4YzFcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM4YzJcdWM4YzNcdWM4YzVcdWM4YzZcdWM4YzdcdWM4YzlcdWM4Y2FcdWM4Y2JcdWM4Y2RcdWM4Y2VcdWM4Y2ZcdWM4ZDBcdWM4ZDFcdWM4ZDJcdWM4ZDNcdWM4ZDZcdWM4ZDhcdWM4ZGFcdWM4ZGJcdWM4ZGNcdWM4ZGRcdWM4ZGVc''@;'; put 'put ''dWM4ZGZcdWM4ZTJcdWM4ZTNcdWM4ZTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM4ZTZcdWM4ZTdcdWM4ZThcdWM4ZTlcdWM4ZWFcdWM4ZWJcdWM4ZWNcdWM4ZWRcdWM4ZWVcdWM4ZWZcdWM4ZjBcdWM4ZjFcdWM4ZjJcdWM4ZjNcdWM4ZjRcdWM4ZjZcdWM4ZjdcdWM4''@;'; put 'put ''ZjhcdWM4ZjlcdWM4ZmFcdWM4ZmJcdWM4ZmVcdWM4ZmZcdWM5MDFcdWM5MDJcdWM5MDNcdWM5MDdcdWM5MDhcdWM5MDlcdWM5MGFcdWM5MGJcdWM5MGVcdTMwMDBcdTMwMDFcdTMwMDJceGI3XHUyMDI1XHUyMDI2XHhhOFx1MzAwM1x4YWRcdTIwMTVcdTIyMjVcdWZmM2NcdTIyM2NcdTIwMThc''@;'; put 'put ''dTIwMTlcdTIwMWNcdTIwMWRcdTMwMTRcdTMwMTVcdTMwMDhcdTMwMDlcdTMwMGFcdTMwMGJcdTMwMGNcdTMwMGRcdTMwMGVcdTMwMGZcdTMwMTBcdTMwMTFceGIxXHhkN1x4ZjdcdTIyNjBcdTIyNjRcdTIyNjVcdTIyMWVcdTIyMzRceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHUyMTJiXHVmZmUw''@;'; put 'put ''XHVmZmUxXHVmZmU1XHUyNjQyXHUyNjQwXHUyMjIwXHUyMmE1XHUyMzEyXHUyMjAyXHUyMjA3XHUyMjYxXHUyMjUyXHhhN1x1MjAzYlx1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjViZFx1MjViY1x1MjE5Mlx1MjE5''@;'; put 'put ''MFx1MjE5MVx1MjE5M1x1MjE5NFx1MzAxM1x1MjI2YVx1MjI2Ylx1MjIxYVx1MjIzZFx1MjIxZFx1MjIzNVx1MjIyYlx1MjIyY1x1MjIwOFx1MjIwYlx1MjI4Nlx1MjI4N1x1MjI4Mlx1MjI4M1x1MjIyYVx1MjIyOVx1MjIyN1x1MjIyOFx1ZmZlMlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1f''@;'; put 'put ''WzE2MV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTYxXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2MV1bcF1dPTQxMjE2K3AsYls0MTIxNitwXT1fWzE2MV1bcF0pO2ZvcihfWzE2Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1YzkxMFx1YzkxMlx1YzkxM1x1YzkxNFx1YzkxNVx1YzkxNlx1YzkxN1x1YzkxOVx1YzkxYVx1YzkxYlx1YzkxY1x1YzkxZFx1YzkxZVx1YzkxZlx1YzkyMFx1YzkyMVx1YzkyMlx1YzkyM1x1YzkyNFx1YzkyNVx1YzkyNlx1YzkyN1x1YzkyOFx1YzkyOVx1YzkyYVx1YzkyYlx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzkyZFx1YzkyZVx1YzkyZlx1YzkzMFx1YzkzMVx1YzkzMlx1YzkzM1x1YzkzNVx1YzkzNlx1YzkzN1x1YzkzOFx1YzkzOVx1YzkzYVx1YzkzYlx1YzkzY1x1YzkzZFx1YzkzZVx1YzkzZlx1Yzk0MFx1Yzk0MVx1Yzk0Mlx1Yzk0M1x1Yzk0''@;'; put 'put ''NFx1Yzk0NVx1Yzk0Nlx1Yzk0N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yzk0OFx1Yzk0OVx1Yzk0YVx1Yzk0Ylx1Yzk0Y1x1Yzk0ZFx1Yzk0ZVx1Yzk0Zlx1Yzk1Mlx1Yzk1M1x1Yzk1NVx1Yzk1Nlx1Yzk1N1x1Yzk1OVx1Yzk1YVx1Yzk1Ylx1Yzk1Y1x1Yzk1ZFx1''@;'; put 'put ''Yzk1ZVx1Yzk1Zlx1Yzk2Mlx1Yzk2NFx1Yzk2NVx1Yzk2Nlx1Yzk2N1x1Yzk2OFx1Yzk2OVx1Yzk2YVx1Yzk2Ylx1Yzk2ZFx1Yzk2ZVx1Yzk2Zlx1MjFkMlx1MjFkNFx1MjIwMFx1MjIwM1x4YjRcdWZmNWVcdTAyYzdcdTAyZDhcdTAyZGRcdTAyZGFcdTAyZDlceGI4XHUwMmRiXHhhMVx4YmZc''@;'; put 'put ''dTAyZDBcdTIyMmVcdTIyMTFcdTIyMGZceGE0XHUyMTA5XHUyMDMwXHUyNWMxXHUyNWMwXHUyNWI3XHUyNWI2XHUyNjY0XHUyNjYwXHUyNjYxXHUyNjY1XHUyNjY3XHUyNjYzXHUyMjk5XHUyNWM4XHUyNWEzXHUyNWQwXHUyNWQxXHUyNTkyXHUyNWE0XHUyNWE1XHUyNWE4XHUyNWE3XHUyNWE2''@;'; put 'put ''XHUyNWE5XHUyNjY4XHUyNjBmXHUyNjBlXHUyNjFjXHUyNjFlXHhiNlx1MjAyMFx1MjAyMVx1MjE5NVx1MjE5N1x1MjE5OVx1MjE5Nlx1MjE5OFx1MjY2ZFx1MjY2OVx1MjY2YVx1MjY2Y1x1MzI3Zlx1MzIxY1x1MjExNlx1MzNjN1x1MjEyMlx1MzNjMlx1MzNkOFx1MjEyMVx1MjBhY1x4YWVc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sx''@;'; put 'put ''NjJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2Ml1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNjJdW3BdXT00MTQ3MitwLGJbNDE0NzIrcF09X1sxNjJdW3BdKTtmb3IoX1sxNjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWM5NzFcdWM5NzJcdWM5NzNcdWM5NzVcdWM5NzZcdWM5NzdcdWM5NzhcdWM5NzlcdWM5N2FcdWM5N2JcdWM5N2RcdWM5N2VcdWM5N2ZcdWM5ODBcdWM5ODFcdWM5ODJcdWM5ODNcdWM5ODRcdWM5ODVcdWM5ODZcdWM5ODdcdWM5OGFcdWM5OGJcdWM5OGRcdWM5OGVcdWM5OGZcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5OTFcdWM5OTJcdWM5OTNcdWM5OTRcdWM5OTVcdWM5OTZcdWM5OTdcdWM5OWFcdWM5OWNcdWM5OWVcdWM5OWZcdWM5YTBcdWM5YTFcdWM5YTJcdWM5YTNcdWM5YTRcdWM5YTVcdWM5YTZcdWM5YTdcdWM5YThcdWM5YTlcdWM5YWFcdWM5YWJc''@;'; put 'put ''dWM5YWNcdWM5YWRcdWM5YWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5YWZcdWM5YjBcdWM5YjFcdWM5YjJcdWM5YjNcdWM5YjRcdWM5YjVcdWM5YjZcdWM5YjdcdWM5YjhcdWM5YjlcdWM5YmFcdWM5YmJcdWM5YmNcdWM5YmRcdWM5YmVcdWM5YmZcdWM5YzJcdWM5''@;'; put 'put ''YzNcdWM5YzVcdWM5YzZcdWM5YzlcdWM5Y2JcdWM5Y2NcdWM5Y2RcdWM5Y2VcdWM5Y2ZcdWM5ZDJcdWM5ZDRcdWM5ZDdcdWM5ZDhcdWM5ZGJcdWZmMDFcdWZmMDJcdWZmMDNcdWZmMDRcdWZmMDVcdWZmMDZcdWZmMDdcdWZmMDhcdWZmMDlcdWZmMGFcdWZmMGJcdWZmMGNcdWZmMGRcdWZmMGVc''@;'; put 'put ''dWZmMGZcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdWZmMWFcdWZmMWJcdWZmMWNcdWZmMWRcdWZmMWVcdWZmMWZcdWZmMjBcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlcdWZm''@;'; put 'put ''MmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmM2JcdWZmZTZcdWZmM2RcdWZmM2VcdWZmM2ZcdWZmNDBcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVc''@;'; put 'put ''dWZmNDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmNWJcdWZmNWNcdWZmNWRcdWZmZTNcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxwPTA7cCE9X1sxNjNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2M11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNjNdW3BdXT00MTcyOCtwLGJbNDE3MjgrcF09X1sxNjNdW3BdKTtmb3IoX1sxNjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWM5ZGVcdWM5ZGZcdWM5ZTFcdWM5ZTNcdWM5ZTVcdWM5ZTZcdWM5ZThcdWM5ZTlcdWM5ZWFcdWM5ZWJcdWM5ZWVcdWM5ZjJcdWM5ZjNcdWM5ZjRcdWM5ZjVcdWM5ZjZcdWM5ZjdcdWM5ZmFcdWM5ZmJcdWM5ZmRcdWM5ZmVcdWM5ZmZcdWNhMDFcdWNhMDJcdWNhMDNcdWNh''@;'; put 'put ''MDRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhMDVcdWNhMDZcdWNhMDdcdWNhMGFcdWNhMGVcdWNhMGZcdWNhMTBcdWNhMTFcdWNhMTJcdWNhMTNcdWNhMTVcdWNhMTZcdWNhMTdcdWNhMTlcdWNhMWFcdWNhMWJcdWNhMWNcdWNhMWRcdWNhMWVcdWNhMWZcdWNhMjBc''@;'; put 'put ''dWNhMjFcdWNhMjJcdWNhMjNcdWNhMjRcdWNhMjVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhMjZcdWNhMjdcdWNhMjhcdWNhMmFcdWNhMmJcdWNhMmNcdWNhMmRcdWNhMmVcdWNhMmZcdWNhMzBcdWNhMzFcdWNhMzJcdWNhMzNcdWNhMzRcdWNhMzVcdWNhMzZcdWNh''@;'; put 'put ''MzdcdWNhMzhcdWNhMzlcdWNhM2FcdWNhM2JcdWNhM2NcdWNhM2RcdWNhM2VcdWNhM2ZcdWNhNDBcdWNhNDFcdWNhNDJcdWNhNDNcdWNhNDRcdWNhNDVcdWNhNDZcdTMxMzFcdTMxMzJcdTMxMzNcdTMxMzRcdTMxMzVcdTMxMzZcdTMxMzdcdTMxMzhcdTMxMzlcdTMxM2FcdTMxM2JcdTMxM2Nc''@;'; put 'put ''dTMxM2RcdTMxM2VcdTMxM2ZcdTMxNDBcdTMxNDFcdTMxNDJcdTMxNDNcdTMxNDRcdTMxNDVcdTMxNDZcdTMxNDdcdTMxNDhcdTMxNDlcdTMxNGFcdTMxNGJcdTMxNGNcdTMxNGRcdTMxNGVcdTMxNGZcdTMxNTBcdTMxNTFcdTMxNTJcdTMxNTNcdTMxNTRcdTMxNTVcdTMxNTZcdTMxNTdcdTMx''@;'; put 'put ''NThcdTMxNTlcdTMxNWFcdTMxNWJcdTMxNWNcdTMxNWRcdTMxNWVcdTMxNWZcdTMxNjBcdTMxNjFcdTMxNjJcdTMxNjNcdTMxNjRcdTMxNjVcdTMxNjZcdTMxNjdcdTMxNjhcdTMxNjlcdTMxNmFcdTMxNmJcdTMxNmNcdTMxNmRcdTMxNmVcdTMxNmZcdTMxNzBcdTMxNzFcdTMxNzJcdTMxNzNc''@;'; put 'put ''dTMxNzRcdTMxNzVcdTMxNzZcdTMxNzdcdTMxNzhcdTMxNzlcdTMxN2FcdTMxN2JcdTMxN2NcdTMxN2RcdTMxN2VcdTMxN2ZcdTMxODBcdTMxODFcdTMxODJcdTMxODNcdTMxODRcdTMxODVcdTMxODZcdTMxODdcdTMxODhcdTMxODlcdTMxOGFcdTMxOGJcdTMxOGNcdTMxOGRcdTMxOGVcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2NF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNjRdW3BdXT00MTk4NCtwLGJbNDE5ODQrcF09X1sxNjRdW3BdKTtmb3IoX1sxNjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhNDdcdWNhNDhcdWNhNDlcdWNhNGFcdWNhNGJcdWNhNGVcdWNhNGZcdWNhNTFcdWNhNTJcdWNhNTNcdWNhNTVcdWNhNTZcdWNhNTdcdWNhNThcdWNhNTlcdWNhNWFcdWNhNWJcdWNhNWVcdWNhNjJcdWNhNjNcdWNhNjRcdWNhNjVcdWNhNjZcdWNh''@;'; put 'put ''NjdcdWNhNjlcdWNhNmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhNmJcdWNhNmNcdWNhNmRcdWNhNmVcdWNhNmZcdWNhNzBcdWNhNzFcdWNhNzJcdWNhNzNcdWNhNzRcdWNhNzVcdWNhNzZcdWNhNzdcdWNhNzhcdWNhNzlcdWNhN2FcdWNhN2JcdWNhN2NcdWNhN2Vc''@;'; put 'put ''dWNhN2ZcdWNhODBcdWNhODFcdWNhODJcdWNhODNcdWNhODVcdWNhODZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhODdcdWNhODhcdWNhODlcdWNhOGFcdWNhOGJcdWNhOGNcdWNhOGRcdWNhOGVcdWNhOGZcdWNhOTBcdWNhOTFcdWNhOTJcdWNhOTNcdWNhOTRcdWNh''@;'; put 'put ''OTVcdWNhOTZcdWNhOTdcdWNhOTlcdWNhOWFcdWNhOWJcdWNhOWNcdWNhOWRcdWNhOWVcdWNhOWZcdWNhYTBcdWNhYTFcdWNhYTJcdWNhYTNcdWNhYTRcdWNhYTVcdWNhYTZcdWNhYTdcdTIxNzBcdTIxNzFcdTIxNzJcdTIxNzNcdTIxNzRcdTIxNzVcdTIxNzZcdTIxNzdcdTIxNzhcdTIxNzlc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAz''@;'; put 'put ''OTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzYjFc''@;'; put 'put ''dTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2NV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNjVdW3BdXT00MjI0MCtwLGJbNDIyNDArcF09X1sxNjVdW3BdKTtmb3IoX1sxNjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhYThcdWNhYTlcdWNhYWFcdWNhYWJcdWNhYWNcdWNhYWRcdWNhYWVcdWNhYWZcdWNhYjBcdWNhYjFcdWNhYjJcdWNhYjNcdWNhYjRcdWNhYjVcdWNhYjZcdWNhYjdcdWNhYjhcdWNhYjlcdWNhYmFcdWNhYmJcdWNhYmVcdWNh''@;'; put 'put ''YmZcdWNhYzFcdWNhYzJcdWNhYzNcdWNhYzVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhYzZcdWNhYzdcdWNhYzhcdWNhYzlcdWNhY2FcdWNhY2JcdWNhY2VcdWNhZDBcdWNhZDJcdWNhZDRcdWNhZDVcdWNhZDZcdWNhZDdcdWNhZGFcdWNhZGJcdWNhZGNcdWNhZGRc''@;'; put 'put ''dWNhZGVcdWNhZGZcdWNhZTFcdWNhZTJcdWNhZTNcdWNhZTRcdWNhZTVcdWNhZTZcdWNhZTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhZThcdWNhZTlcdWNhZWFcdWNhZWJcdWNhZWRcdWNhZWVcdWNhZWZcdWNhZjBcdWNhZjFcdWNhZjJcdWNhZjNcdWNhZjVcdWNh''@;'; put 'put ''ZjZcdWNhZjdcdWNhZjhcdWNhZjlcdWNhZmFcdWNhZmJcdWNhZmNcdWNhZmRcdWNhZmVcdWNhZmZcdWNiMDBcdWNiMDFcdWNiMDJcdWNiMDNcdWNiMDRcdWNiMDVcdWNiMDZcdWNiMDdcdWNiMDlcdWNiMGFcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MThcdTI1MTRcdTI1MWNcdTI1MmNc''@;'; put 'put ''dTI1MjRcdTI1MzRcdTI1M2NcdTI1MDFcdTI1MDNcdTI1MGZcdTI1MTNcdTI1MWJcdTI1MTdcdTI1MjNcdTI1MzNcdTI1MmJcdTI1M2JcdTI1NGJcdTI1MjBcdTI1MmZcdTI1MjhcdTI1MzdcdTI1M2ZcdTI1MWRcdTI1MzBcdTI1MjVcdTI1MzhcdTI1NDJcdTI1MTJcdTI1MTFcdTI1MWFcdTI1''@;'; put 'put ''MTlcdTI1MTZcdTI1MTVcdTI1MGVcdTI1MGRcdTI1MWVcdTI1MWZcdTI1MjFcdTI1MjJcdTI1MjZcdTI1MjdcdTI1MjlcdTI1MmFcdTI1MmRcdTI1MmVcdTI1MzFcdTI1MzJcdTI1MzVcdTI1MzZcdTI1MzlcdTI1M2FcdTI1M2RcdTI1M2VcdTI1NDBcdTI1NDFcdTI1NDNcdTI1NDRcdTI1NDVc''@;'; put 'put ''dTI1NDZcdTI1NDdcdTI1NDhcdTI1NDlcdTI1NGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2Nl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNjZdW3BdXT00MjQ5NitwLGJbNDI0OTYrcF09X1sxNjZdW3BdKTtmb3IoX1sxNjddPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiMGJcdWNiMGNcdWNiMGRcdWNiMGVcdWNiMGZcdWNiMTFcdWNiMTJcdWNiMTNcdWNiMTVcdWNiMTZcdWNiMTdcdWNiMTlcdWNiMWFcdWNiMWJcdWNiMWNcdWNiMWRcdWNiMWVcdWNiMWZcdWNiMjJcdWNi''@;'; put 'put ''MjNcdWNiMjRcdWNiMjVcdWNiMjZcdWNiMjdcdWNiMjhcdWNiMjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiMmFcdWNiMmJcdWNiMmNcdWNiMmRcdWNiMmVcdWNiMmZcdWNiMzBcdWNiMzFcdWNiMzJcdWNiMzNcdWNiMzRcdWNiMzVcdWNiMzZcdWNiMzdcdWNiMzhc''@;'; put 'put ''dWNiMzlcdWNiM2FcdWNiM2JcdWNiM2NcdWNiM2RcdWNiM2VcdWNiM2ZcdWNiNDBcdWNiNDJcdWNiNDNcdWNiNDRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiNDVcdWNiNDZcdWNiNDdcdWNiNGFcdWNiNGJcdWNiNGRcdWNiNGVcdWNiNGZcdWNiNTFcdWNiNTJcdWNi''@;'; put 'put ''NTNcdWNiNTRcdWNiNTVcdWNiNTZcdWNiNTdcdWNiNWFcdWNiNWJcdWNiNWNcdWNiNWVcdWNiNWZcdWNiNjBcdWNiNjFcdWNiNjJcdWNiNjNcdWNiNjVcdWNiNjZcdWNiNjdcdWNiNjhcdWNiNjlcdWNiNmFcdWNiNmJcdWNiNmNcdTMzOTVcdTMzOTZcdTMzOTdcdTIxMTNcdTMzOThcdTMzYzRc''@;'; put 'put ''dTMzYTNcdTMzYTRcdTMzYTVcdTMzYTZcdTMzOTlcdTMzOWFcdTMzOWJcdTMzOWNcdTMzOWRcdTMzOWVcdTMzOWZcdTMzYTBcdTMzYTFcdTMzYTJcdTMzY2FcdTMzOGRcdTMzOGVcdTMzOGZcdTMzY2ZcdTMzODhcdTMzODlcdTMzYzhcdTMzYTdcdTMzYThcdTMzYjBcdTMzYjFcdTMzYjJcdTMz''@;'; put 'put ''YjNcdTMzYjRcdTMzYjVcdTMzYjZcdTMzYjdcdTMzYjhcdTMzYjlcdTMzODBcdTMzODFcdTMzODJcdTMzODNcdTMzODRcdTMzYmFcdTMzYmJcdTMzYmNcdTMzYmRcdTMzYmVcdTMzYmZcdTMzOTBcdTMzOTFcdTMzOTJcdTMzOTNcdTMzOTRcdTIxMjZcdTMzYzBcdTMzYzFcdTMzOGFcdTMzOGJc''@;'; put 'put ''dTMzOGNcdTMzZDZcdTMzYzVcdTMzYWRcdTMzYWVcdTMzYWZcdTMzZGJcdTMzYTlcdTMzYWFcdTMzYWJcdTMzYWNcdTMzZGRcdTMzZDBcdTMzZDNcdTMzYzNcdTMzYzlcdTMzZGNcdTMzYzZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2N11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNjddW3BdXT00Mjc1MitwLGJbNDI3NTIrcF09X1sxNjddW3BdKTtmb3IoX1sxNjhdPSJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiNmRcdWNiNmVcdWNiNmZcdWNiNzBcdWNiNzFcdWNiNzJcdWNiNzNcdWNiNzRcdWNiNzVcdWNiNzZcdWNiNzdcdWNiN2FcdWNiN2JcdWNiN2NcdWNiN2RcdWNiN2VcdWNiN2ZcdWNi''@;'; put 'put ''ODBcdWNiODFcdWNiODJcdWNiODNcdWNiODRcdWNiODVcdWNiODZcdWNiODdcdWNiODhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiODlcdWNiOGFcdWNiOGJcdWNiOGNcdWNiOGRcdWNiOGVcdWNiOGZcdWNiOTBcdWNiOTFcdWNiOTJcdWNiOTNcdWNiOTRcdWNiOTVc''@;'; put 'put ''dWNiOTZcdWNiOTdcdWNiOThcdWNiOTlcdWNiOWFcdWNiOWJcdWNiOWRcdWNiOWVcdWNiOWZcdWNiYTBcdWNiYTFcdWNiYTJcdWNiYTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiYTRcdWNiYTVcdWNiYTZcdWNiYTdcdWNiYThcdWNiYTlcdWNiYWFcdWNiYWJcdWNi''@;'; put 'put ''YWNcdWNiYWRcdWNiYWVcdWNiYWZcdWNiYjBcdWNiYjFcdWNiYjJcdWNiYjNcdWNiYjRcdWNiYjVcdWNiYjZcdWNiYjdcdWNiYjlcdWNiYmFcdWNiYmJcdWNiYmNcdWNiYmRcdWNiYmVcdWNiYmZcdWNiYzBcdWNiYzFcdWNiYzJcdWNiYzNcdWNiYzRceGM2XHhkMFx4YWFcdTAxMjZcdWZmZmRc''@;'; put 'put ''dTAxMzJcdWZmZmRcdTAxM2ZcdTAxNDFceGQ4XHUwMTUyXHhiYVx4ZGVcdTAxNjZcdTAxNGFcdWZmZmRcdTMyNjBcdTMyNjFcdTMyNjJcdTMyNjNcdTMyNjRcdTMyNjVcdTMyNjZcdTMyNjdcdTMyNjhcdTMyNjlcdTMyNmFcdTMyNmJcdTMyNmNcdTMyNmRcdTMyNmVcdTMyNmZcdTMyNzBcdTMy''@;'; put 'put ''NzFcdTMyNzJcdTMyNzNcdTMyNzRcdTMyNzVcdTMyNzZcdTMyNzdcdTMyNzhcdTMyNzlcdTMyN2FcdTMyN2JcdTI0ZDBcdTI0ZDFcdTI0ZDJcdTI0ZDNcdTI0ZDRcdTI0ZDVcdTI0ZDZcdTI0ZDdcdTI0ZDhcdTI0ZDlcdTI0ZGFcdTI0ZGJcdTI0ZGNcdTI0ZGRcdTI0ZGVcdTI0ZGZcdTI0ZTBc''@;'; put 'put ''dTI0ZTFcdTI0ZTJcdTI0ZTNcdTI0ZTRcdTI0ZTVcdTI0ZTZcdTI0ZTdcdTI0ZThcdTI0ZTlcdTI0NjBcdTI0NjFcdTI0NjJcdTI0NjNcdTI0NjRcdTI0NjVcdTI0NjZcdTI0NjdcdTI0NjhcdTI0NjlcdTI0NmFcdTI0NmJcdTI0NmNcdTI0NmRcdTI0NmVceGJkXHUyMTUzXHUyMTU0XHhiY1x4''@;'; put 'put ''YmVcdTIxNWJcdTIxNWNcdTIxNWRcdTIxNWVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2OF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNjhdW3BdXT00MzAwOCtwLGJbNDMwMDgrcF09X1sxNjhdW3BdKTtmb3IoX1sxNjldPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiYzVcdWNiYzZcdWNiYzdcdWNiYzhcdWNiYzlcdWNiY2FcdWNiY2JcdWNiY2NcdWNiY2RcdWNiY2VcdWNiY2ZcdWNiZDBcdWNiZDFcdWNiZDJcdWNiZDNcdWNiZDVcdWNiZDZcdWNiZDdcdWNi''@;'; put 'put ''ZDhcdWNiZDlcdWNiZGFcdWNiZGJcdWNiZGNcdWNiZGRcdWNiZGVcdWNiZGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiZTBcdWNiZTFcdWNiZTJcdWNiZTNcdWNiZTVcdWNiZTZcdWNiZThcdWNiZWFcdWNiZWJcdWNiZWNcdWNiZWRcdWNiZWVcdWNiZWZcdWNiZjBc''@;'; put 'put ''dWNiZjFcdWNiZjJcdWNiZjNcdWNiZjRcdWNiZjVcdWNiZjZcdWNiZjdcdWNiZjhcdWNiZjlcdWNiZmFcdWNiZmJcdWNiZmNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiZmRcdWNiZmVcdWNiZmZcdWNjMDBcdWNjMDFcdWNjMDJcdWNjMDNcdWNjMDRcdWNjMDVcdWNj''@;'; put 'put ''MDZcdWNjMDdcdWNjMDhcdWNjMDlcdWNjMGFcdWNjMGJcdWNjMGVcdWNjMGZcdWNjMTFcdWNjMTJcdWNjMTNcdWNjMTVcdWNjMTZcdWNjMTdcdWNjMThcdWNjMTlcdWNjMWFcdWNjMWJcdWNjMWVcdWNjMWZcdWNjMjBcdWNjMjNcdWNjMjRceGU2XHUwMTExXHhmMFx1MDEyN1x1MDEzMVx1MDEz''@;'; put 'put ''M1x1MDEzOFx1MDE0MFx1MDE0Mlx4ZjhcdTAxNTNceGRmXHhmZVx1MDE2N1x1MDE0Ylx1MDE0OVx1MzIwMFx1MzIwMVx1MzIwMlx1MzIwM1x1MzIwNFx1MzIwNVx1MzIwNlx1MzIwN1x1MzIwOFx1MzIwOVx1MzIwYVx1MzIwYlx1MzIwY1x1MzIwZFx1MzIwZVx1MzIwZlx1MzIxMFx1MzIxMVx1''@;'; put 'put ''MzIxMlx1MzIxM1x1MzIxNFx1MzIxNVx1MzIxNlx1MzIxN1x1MzIxOFx1MzIxOVx1MzIxYVx1MzIxYlx1MjQ5Y1x1MjQ5ZFx1MjQ5ZVx1MjQ5Zlx1MjRhMFx1MjRhMVx1MjRhMlx1MjRhM1x1MjRhNFx1MjRhNVx1MjRhNlx1MjRhN1x1MjRhOFx1MjRhOVx1MjRhYVx1MjRhYlx1MjRhY1x1MjRh''@;'; put 'put ''ZFx1MjRhZVx1MjRhZlx1MjRiMFx1MjRiMVx1MjRiMlx1MjRiM1x1MjRiNFx1MjRiNVx1MjQ3NFx1MjQ3NVx1MjQ3Nlx1MjQ3N1x1MjQ3OFx1MjQ3OVx1MjQ3YVx1MjQ3Ylx1MjQ3Y1x1MjQ3ZFx1MjQ3ZVx1MjQ3Zlx1MjQ4MFx1MjQ4MVx1MjQ4Mlx4YjlceGIyXHhiM1x1MjA3NFx1MjA3Zlx1''@;'; put 'put ''MjA4MVx1MjA4Mlx1MjA4M1x1MjA4NFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2OV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTY5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2OV1bcF1dPTQzMjY0K3AsYls0MzI2NCtwXT1fWzE2OV1bcF0pO2ZvcihfWzE3MF09Ilx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2MyNVx1Y2MyNlx1Y2MyYVx1Y2MyYlx1Y2MyZFx1Y2MyZlx1Y2MzMVx1Y2MzMlx1Y2MzM1x1Y2MzNFx1Y2MzNVx1Y2MzNlx1Y2MzN1x1Y2MzYVx1Y2MzZlx1Y2M0MFx1Y2M0MVx1Y2M0Mlx1Y2M0M1x1''@;'; put 'put ''Y2M0Nlx1Y2M0N1x1Y2M0OVx1Y2M0YVx1Y2M0Ylx1Y2M0ZFx1Y2M0ZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2M0Zlx1Y2M1MFx1Y2M1MVx1Y2M1Mlx1Y2M1M1x1Y2M1Nlx1Y2M1YVx1Y2M1Ylx1Y2M1Y1x1Y2M1ZFx1Y2M1ZVx1Y2M1Zlx1Y2M2MVx1Y2M2Mlx1Y2M2''@;'; put 'put ''M1x1Y2M2NVx1Y2M2N1x1Y2M2OVx1Y2M2YVx1Y2M2Ylx1Y2M2Y1x1Y2M2ZFx1Y2M2ZVx1Y2M2Zlx1Y2M3MVx1Y2M3Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2M3M1x1Y2M3NFx1Y2M3Nlx1Y2M3N1x1Y2M3OFx1Y2M3OVx1Y2M3YVx1Y2M3Ylx1Y2M3Y1x1Y2M3ZFx1''@;'; put 'put ''Y2M3ZVx1Y2M3Zlx1Y2M4MFx1Y2M4MVx1Y2M4Mlx1Y2M4M1x1Y2M4NFx1Y2M4NVx1Y2M4Nlx1Y2M4N1x1Y2M4OFx1Y2M4OVx1Y2M4YVx1Y2M4Ylx1Y2M4Y1x1Y2M4ZFx1Y2M4ZVx1Y2M4Zlx1Y2M5MFx1Y2M5MVx1Y2M5Mlx1Y2M5M1x1MzA0MVx1MzA0Mlx1MzA0M1x1MzA0NFx1MzA0NVx1MzA0''@;'; put 'put ''Nlx1MzA0N1x1MzA0OFx1MzA0OVx1MzA0YVx1MzA0Ylx1MzA0Y1x1MzA0ZFx1MzA0ZVx1MzA0Zlx1MzA1MFx1MzA1MVx1MzA1Mlx1MzA1M1x1MzA1NFx1MzA1NVx1MzA1Nlx1MzA1N1x1MzA1OFx1MzA1OVx1MzA1YVx1MzA1Ylx1MzA1Y1x1MzA1ZFx1MzA1ZVx1MzA1Zlx1MzA2MFx1MzA2MVx1''@;'; put 'put ''MzA2Mlx1MzA2M1x1MzA2NFx1MzA2NVx1MzA2Nlx1MzA2N1x1MzA2OFx1MzA2OVx1MzA2YVx1MzA2Ylx1MzA2Y1x1MzA2ZFx1MzA2ZVx1MzA2Zlx1MzA3MFx1MzA3MVx1MzA3Mlx1MzA3M1x1MzA3NFx1MzA3NVx1MzA3Nlx1MzA3N1x1MzA3OFx1MzA3OVx1MzA3YVx1MzA3Ylx1MzA3Y1x1MzA3''@;'; put 'put ''ZFx1MzA3ZVx1MzA3Zlx1MzA4MFx1MzA4MVx1MzA4Mlx1MzA4M1x1MzA4NFx1MzA4NVx1MzA4Nlx1MzA4N1x1MzA4OFx1MzA4OVx1MzA4YVx1MzA4Ylx1MzA4Y1x1MzA4ZFx1MzA4ZVx1MzA4Zlx1MzA5MFx1MzA5MVx1MzA5Mlx1MzA5M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3MF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTcwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3MF1bcF1dPTQzNTIwK3AsYls0MzUyMCtwXT1fWzE3MF1bcF0pO2ZvcihfWzE3MV09''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2M5NFx1Y2M5NVx1Y2M5Nlx1Y2M5N1x1Y2M5YVx1Y2M5Ylx1Y2M5ZFx1Y2M5ZVx1Y2M5Zlx1Y2NhMVx1Y2NhMlx1Y2NhM1x1Y2NhNFx1Y2NhNVx1Y2NhNlx1Y2NhN1x1Y2NhYVx1''@;'; put 'put ''Y2NhZVx1Y2NhZlx1Y2NiMFx1Y2NiMVx1Y2NiMlx1Y2NiM1x1Y2NiNlx1Y2NiN1x1Y2NiOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2NiYVx1Y2NiYlx1Y2NiZFx1Y2NiZVx1Y2NiZlx1Y2NjMFx1Y2NjMVx1Y2NjMlx1Y2NjM1x1Y2NjNlx1Y2NjOFx1Y2NjYVx1Y2Nj''@;'; put 'put ''Ylx1Y2NjY1x1Y2NjZFx1Y2NjZVx1Y2NjZlx1Y2NkMVx1Y2NkMlx1Y2NkM1x1Y2NkNVx1Y2NkNlx1Y2NkN1x1Y2NkOFx1Y2NkOVx1Y2NkYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2NkYlx1Y2NkY1x1Y2NkZFx1Y2NkZVx1Y2NkZlx1Y2NlMFx1Y2NlMVx1Y2NlMlx1''@;'; put 'put ''Y2NlM1x1Y2NlNVx1Y2NlNlx1Y2NlN1x1Y2NlOFx1Y2NlOVx1Y2NlYVx1Y2NlYlx1Y2NlZFx1Y2NlZVx1Y2NlZlx1Y2NmMVx1Y2NmMlx1Y2NmM1x1Y2NmNFx1Y2NmNVx1Y2NmNlx1Y2NmN1x1Y2NmOFx1Y2NmOVx1Y2NmYVx1Y2NmYlx1Y2NmY1x1Y2NmZFx1MzBhMVx1MzBhMlx1MzBhM1x1MzBh''@;'; put 'put ''NFx1MzBhNVx1MzBhNlx1MzBhN1x1MzBhOFx1MzBhOVx1MzBhYVx1MzBhYlx1MzBhY1x1MzBhZFx1MzBhZVx1MzBhZlx1MzBiMFx1MzBiMVx1MzBiMlx1MzBiM1x1MzBiNFx1MzBiNVx1MzBiNlx1MzBiN1x1MzBiOFx1MzBiOVx1MzBiYVx1MzBiYlx1MzBiY1x1MzBiZFx1MzBiZVx1MzBiZlx1''@;'; put 'put ''MzBjMFx1MzBjMVx1MzBjMlx1MzBjM1x1MzBjNFx1MzBjNVx1MzBjNlx1MzBjN1x1MzBjOFx1MzBjOVx1MzBjYVx1MzBjYlx1MzBjY1x1MzBjZFx1MzBjZVx1MzBjZlx1MzBkMFx1MzBkMVx1MzBkMlx1MzBkM1x1MzBkNFx1MzBkNVx1MzBkNlx1MzBkN1x1MzBkOFx1MzBkOVx1MzBkYVx1MzBk''@;'; put 'put ''Ylx1MzBkY1x1MzBkZFx1MzBkZVx1MzBkZlx1MzBlMFx1MzBlMVx1MzBlMlx1MzBlM1x1MzBlNFx1MzBlNVx1MzBlNlx1MzBlN1x1MzBlOFx1MzBlOVx1MzBlYVx1MzBlYlx1MzBlY1x1MzBlZFx1MzBlZVx1MzBlZlx1MzBmMFx1MzBmMVx1MzBmMlx1MzBmM1x1MzBmNFx1MzBmNVx1MzBmNlx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3MV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTcxXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3MV1bcF1dPTQzNzc2K3AsYls0Mzc3NitwXT1fWzE3MV1bcF0p''@;'; put 'put ''O2ZvcihfWzE3Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2NmZVx1Y2NmZlx1Y2QwMFx1Y2QwMlx1Y2QwM1x1Y2QwNFx1Y2QwNVx1Y2QwNlx1Y2QwN1x1Y2QwYVx1Y2QwYlx1Y2QwZFx1Y2QwZVx1Y2QwZlx1Y2QxMVx1''@;'; put 'put ''Y2QxMlx1Y2QxM1x1Y2QxNFx1Y2QxNVx1Y2QxNlx1Y2QxN1x1Y2QxYVx1Y2QxY1x1Y2QxZVx1Y2QxZlx1Y2QyMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2QyMVx1Y2QyMlx1Y2QyM1x1Y2QyNVx1Y2QyNlx1Y2QyN1x1Y2QyOVx1Y2QyYVx1Y2QyYlx1Y2QyZFx1Y2Qy''@;'; put 'put ''ZVx1Y2QyZlx1Y2QzMFx1Y2QzMVx1Y2QzMlx1Y2QzM1x1Y2QzNFx1Y2QzNVx1Y2QzNlx1Y2QzN1x1Y2QzOFx1Y2QzYVx1Y2QzYlx1Y2QzY1x1Y2QzZFx1Y2QzZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2QzZlx1Y2Q0MFx1Y2Q0MVx1Y2Q0Mlx1Y2Q0M1x1Y2Q0NFx1''@;'; put 'put ''Y2Q0NVx1Y2Q0Nlx1Y2Q0N1x1Y2Q0OFx1Y2Q0OVx1Y2Q0YVx1Y2Q0Ylx1Y2Q0Y1x1Y2Q0ZFx1Y2Q0ZVx1Y2Q0Zlx1Y2Q1MFx1Y2Q1MVx1Y2Q1Mlx1Y2Q1M1x1Y2Q1NFx1Y2Q1NVx1Y2Q1Nlx1Y2Q1N1x1Y2Q1OFx1Y2Q1OVx1Y2Q1YVx1Y2Q1Ylx1Y2Q1ZFx1Y2Q1ZVx1Y2Q1Zlx1MDQxMFx1MDQx''@;'; put 'put ''MVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQwMVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1''@;'; put 'put ''MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQ1MVx1MDQzNlx1MDQz''@;'; put 'put ''N1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTcyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3Ml1bcF1dPTQ0MDMyK3AsYls0NDAzMitw''@;'; put 'put ''XT1fWzE3Ml1bcF0pO2ZvcihfWzE3M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Q2MVx1Y2Q2Mlx1Y2Q2M1x1Y2Q2NVx1Y2Q2Nlx1Y2Q2N1x1Y2Q2OFx1Y2Q2OVx1Y2Q2YVx1Y2Q2Ylx1Y2Q2ZVx1Y2Q3MFx1Y2Q3Mlx1''@;'; put 'put ''Y2Q3M1x1Y2Q3NFx1Y2Q3NVx1Y2Q3Nlx1Y2Q3N1x1Y2Q3OVx1Y2Q3YVx1Y2Q3Ylx1Y2Q3Y1x1Y2Q3ZFx1Y2Q3ZVx1Y2Q3Zlx1Y2Q4MFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Q4MVx1Y2Q4Mlx1Y2Q4M1x1Y2Q4NFx1Y2Q4NVx1Y2Q4Nlx1Y2Q4N1x1Y2Q4OVx1Y2Q4''@;'; put 'put ''YVx1Y2Q4Ylx1Y2Q4Y1x1Y2Q4ZFx1Y2Q4ZVx1Y2Q4Zlx1Y2Q5MFx1Y2Q5MVx1Y2Q5Mlx1Y2Q5M1x1Y2Q5Nlx1Y2Q5N1x1Y2Q5OVx1Y2Q5YVx1Y2Q5Ylx1Y2Q5ZFx1Y2Q5ZVx1Y2Q5Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2RhMFx1Y2RhMVx1Y2RhMlx1Y2RhM1x1''@;'; put 'put ''Y2RhNlx1Y2RhOFx1Y2RhYVx1Y2RhYlx1Y2RhY1x1Y2RhZFx1Y2RhZVx1Y2RhZlx1Y2RiMVx1Y2RiMlx1Y2RiM1x1Y2RiNFx1Y2RiNVx1Y2RiNlx1Y2RiN1x1Y2RiOFx1Y2RiOVx1Y2RiYVx1Y2RiYlx1Y2RiY1x1Y2RiZFx1Y2RiZVx1Y2RiZlx1Y2RjMFx1Y2RjMVx1Y2RjMlx1Y2RjM1x1Y2Rj''@;'; put 'put ''NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3M10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTczXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3M11bcF1dPTQ0Mjg4''@;'; put 'put ''K3AsYls0NDI4OCtwXT1fWzE3M11bcF0pO2ZvcihfWzE3NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2RjNlx1Y2RjN1x1Y2RjOFx1Y2RjOVx1Y2RjYVx1Y2RjYlx1Y2RjZFx1Y2RjZVx1Y2RjZlx1Y2RkMVx1Y2RkMlx1''@;'; put 'put ''Y2RkM1x1Y2RkNFx1Y2RkNVx1Y2RkNlx1Y2RkN1x1Y2RkOFx1Y2RkOVx1Y2RkYVx1Y2RkYlx1Y2RkY1x1Y2RkZFx1Y2RkZVx1Y2RkZlx1Y2RlMFx1Y2RlMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2RlMlx1Y2RlM1x1Y2RlNFx1Y2RlNVx1Y2RlNlx1Y2RlN1x1Y2Rl''@;'; put 'put ''OVx1Y2RlYVx1Y2RlYlx1Y2RlZFx1Y2RlZVx1Y2RlZlx1Y2RmMVx1Y2RmMlx1Y2RmM1x1Y2RmNFx1Y2RmNVx1Y2RmNlx1Y2RmN1x1Y2RmYVx1Y2RmY1x1Y2RmZVx1Y2RmZlx1Y2UwMFx1Y2UwMVx1Y2UwMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2UwM1x1Y2UwNVx1''@;'; put 'put ''Y2UwNlx1Y2UwN1x1Y2UwOVx1Y2UwYVx1Y2UwYlx1Y2UwZFx1Y2UwZVx1Y2UwZlx1Y2UxMFx1Y2UxMVx1Y2UxMlx1Y2UxM1x1Y2UxNVx1Y2UxNlx1Y2UxN1x1Y2UxOFx1Y2UxYVx1Y2UxYlx1Y2UxY1x1Y2UxZFx1Y2UxZVx1Y2UxZlx1Y2UyMlx1Y2UyM1x1Y2UyNVx1Y2UyNlx1Y2UyN1x1Y2Uy''@;'; put 'put ''OVx1Y2UyYVx1Y2UyYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3NF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTc0XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3''@;'; put 'put ''NF1bcF1dPTQ0NTQ0K3AsYls0NDU0NCtwXT1fWzE3NF1bcF0pO2ZvcihfWzE3NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2UyY1x1Y2UyZFx1Y2UyZVx1Y2UyZlx1Y2UzMlx1Y2UzNFx1Y2UzNlx1Y2UzN1x1Y2UzOFx1''@;'; put 'put ''Y2UzOVx1Y2UzYVx1Y2UzYlx1Y2UzY1x1Y2UzZFx1Y2UzZVx1Y2UzZlx1Y2U0MFx1Y2U0MVx1Y2U0Mlx1Y2U0M1x1Y2U0NFx1Y2U0NVx1Y2U0Nlx1Y2U0N1x1Y2U0OFx1Y2U0OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2U0YVx1Y2U0Ylx1Y2U0Y1x1Y2U0ZFx1Y2U0''@;'; put 'put ''ZVx1Y2U0Zlx1Y2U1MFx1Y2U1MVx1Y2U1Mlx1Y2U1M1x1Y2U1NFx1Y2U1NVx1Y2U1Nlx1Y2U1N1x1Y2U1YVx1Y2U1Ylx1Y2U1ZFx1Y2U1ZVx1Y2U2Mlx1Y2U2M1x1Y2U2NFx1Y2U2NVx1Y2U2Nlx1Y2U2N1x1Y2U2YVx1Y2U2Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''Y2U2ZVx1Y2U2Zlx1Y2U3MFx1Y2U3MVx1Y2U3Mlx1Y2U3M1x1Y2U3Nlx1Y2U3N1x1Y2U3OVx1Y2U3YVx1Y2U3Ylx1Y2U3ZFx1Y2U3ZVx1Y2U3Zlx1Y2U4MFx1Y2U4MVx1Y2U4Mlx1Y2U4M1x1Y2U4Nlx1Y2U4OFx1Y2U4YVx1Y2U4Ylx1Y2U4Y1x1Y2U4ZFx1Y2U4ZVx1Y2U4Zlx1Y2U5Mlx1Y2U5''@;'; put 'put ''M1x1Y2U5NVx1Y2U5Nlx1Y2U5N1x1Y2U5OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3NV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTc1XVtwXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoSVtfWzE3NV1bcF1dPTQ0ODAwK3AsYls0NDgwMCtwXT1fWzE3NV1bcF0pO2ZvcihfWzE3Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2U5YVx1Y2U5Ylx1Y2U5Y1x1Y2U5ZFx1Y2U5ZVx1Y2U5Zlx1Y2VhMlx1''@;'; put 'put ''Y2VhNlx1Y2VhN1x1Y2VhOFx1Y2VhOVx1Y2VhYVx1Y2VhYlx1Y2VhZVx1Y2VhZlx1Y2ViMFx1Y2ViMVx1Y2ViMlx1Y2ViM1x1Y2ViNFx1Y2ViNVx1Y2ViNlx1Y2ViN1x1Y2ViOFx1Y2ViOVx1Y2ViYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ViYlx1Y2ViY1x1Y2Vi''@;'; put 'put ''ZFx1Y2ViZVx1Y2ViZlx1Y2VjMFx1Y2VjMlx1Y2VjM1x1Y2VjNFx1Y2VjNVx1Y2VjNlx1Y2VjN1x1Y2VjOFx1Y2VjOVx1Y2VjYVx1Y2VjYlx1Y2VjY1x1Y2VjZFx1Y2VjZVx1Y2VjZlx1Y2VkMFx1Y2VkMVx1Y2VkMlx1Y2VkM1x1Y2VkNFx1Y2VkNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1Y2VkNlx1Y2VkN1x1Y2VkOFx1Y2VkOVx1Y2VkYVx1Y2VkYlx1Y2VkY1x1Y2VkZFx1Y2VkZVx1Y2VkZlx1Y2VlMFx1Y2VlMVx1Y2VlMlx1Y2VlM1x1Y2VlNlx1Y2VlN1x1Y2VlOVx1Y2VlYVx1Y2VlZFx1Y2VlZVx1Y2VlZlx1Y2VmMFx1Y2VmMVx1Y2VmMlx1Y2VmM1x1Y2Vm''@;'; put 'put ''Nlx1Y2VmYVx1Y2VmYlx1Y2VmY1x1Y2VmZFx1Y2VmZVx1Y2VmZlx1YWMwMFx1YWMwMVx1YWMwNFx1YWMwN1x1YWMwOFx1YWMwOVx1YWMwYVx1YWMxMFx1YWMxMVx1YWMxMlx1YWMxM1x1YWMxNFx1YWMxNVx1YWMxNlx1YWMxN1x1YWMxOVx1YWMxYVx1YWMxYlx1YWMxY1x1YWMxZFx1YWMyMFx1''@;'; put 'put ''YWMyNFx1YWMyY1x1YWMyZFx1YWMyZlx1YWMzMFx1YWMzMVx1YWMzOFx1YWMzOVx1YWMzY1x1YWM0MFx1YWM0Ylx1YWM0ZFx1YWM1NFx1YWM1OFx1YWM1Y1x1YWM3MFx1YWM3MVx1YWM3NFx1YWM3N1x1YWM3OFx1YWM3YVx1YWM4MFx1YWM4MVx1YWM4M1x1YWM4NFx1YWM4NVx1YWM4Nlx1YWM4''@;'; put 'put ''OVx1YWM4YVx1YWM4Ylx1YWM4Y1x1YWM5MFx1YWM5NFx1YWM5Y1x1YWM5ZFx1YWM5Zlx1YWNhMFx1YWNhMVx1YWNhOFx1YWNhOVx1YWNhYVx1YWNhY1x1YWNhZlx1YWNiMFx1YWNiOFx1YWNiOVx1YWNiYlx1YWNiY1x1YWNiZFx1YWNjMVx1YWNjNFx1YWNjOFx1YWNjY1x1YWNkNVx1YWNkN1x1''@;'; put 'put ''YWNlMFx1YWNlMVx1YWNlNFx1YWNlN1x1YWNlOFx1YWNlYVx1YWNlY1x1YWNlZlx1YWNmMFx1YWNmMVx1YWNmM1x1YWNmNVx1YWNmNlx1YWNmY1x1YWNmZFx1YWQwMFx1YWQwNFx1YWQwNlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3Nl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTc2XVtw''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3Nl1bcF1dPTQ1MDU2K3AsYls0NTA1NitwXT1fWzE3Nl1bcF0pO2ZvcihfWzE3N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2YwMlx1Y2YwM1x1Y2YwNVx1Y2YwNlx1Y2YwN1x1''@;'; put 'put ''Y2YwOVx1Y2YwYVx1Y2YwYlx1Y2YwY1x1Y2YwZFx1Y2YwZVx1Y2YwZlx1Y2YxMlx1Y2YxNFx1Y2YxNlx1Y2YxN1x1Y2YxOFx1Y2YxOVx1Y2YxYVx1Y2YxYlx1Y2YxZFx1Y2YxZVx1Y2YxZlx1Y2YyMVx1Y2YyMlx1Y2YyM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Yy''@;'; put 'put ''NVx1Y2YyNlx1Y2YyN1x1Y2YyOFx1Y2YyOVx1Y2YyYVx1Y2YyYlx1Y2YyZVx1Y2YzMlx1Y2YzM1x1Y2YzNFx1Y2YzNVx1Y2YzNlx1Y2YzN1x1Y2YzOVx1Y2YzYVx1Y2YzYlx1Y2YzY1x1Y2YzZFx1Y2YzZVx1Y2YzZlx1Y2Y0MFx1Y2Y0MVx1Y2Y0Mlx1Y2Y0M1x1Y2Y0NFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Y0NVx1Y2Y0Nlx1Y2Y0N1x1Y2Y0OFx1Y2Y0OVx1Y2Y0YVx1Y2Y0Ylx1Y2Y0Y1x1Y2Y0ZFx1Y2Y0ZVx1Y2Y0Zlx1Y2Y1MFx1Y2Y1MVx1Y2Y1Mlx1Y2Y1M1x1Y2Y1Nlx1Y2Y1N1x1Y2Y1OVx1Y2Y1YVx1Y2Y1Ylx1Y2Y1ZFx1Y2Y1ZVx1Y2Y1Zlx1Y2Y2''@;'; put 'put ''MFx1Y2Y2MVx1Y2Y2Mlx1Y2Y2M1x1Y2Y2Nlx1Y2Y2OFx1Y2Y2YVx1Y2Y2Ylx1Y2Y2Y1x1YWQwY1x1YWQwZFx1YWQwZlx1YWQxMVx1YWQxOFx1YWQxY1x1YWQyMFx1YWQyOVx1YWQyY1x1YWQyZFx1YWQzNFx1YWQzNVx1YWQzOFx1YWQzY1x1YWQ0NFx1YWQ0NVx1YWQ0N1x1YWQ0OVx1YWQ1MFx1''@;'; put 'put ''YWQ1NFx1YWQ1OFx1YWQ2MVx1YWQ2M1x1YWQ2Y1x1YWQ2ZFx1YWQ3MFx1YWQ3M1x1YWQ3NFx1YWQ3NVx1YWQ3Nlx1YWQ3Ylx1YWQ3Y1x1YWQ3ZFx1YWQ3Zlx1YWQ4MVx1YWQ4Mlx1YWQ4OFx1YWQ4OVx1YWQ4Y1x1YWQ5MFx1YWQ5Y1x1YWQ5ZFx1YWRhNFx1YWRiN1x1YWRjMFx1YWRjMVx1YWRj''@;'; put 'put ''NFx1YWRjOFx1YWRkMFx1YWRkMVx1YWRkM1x1YWRkY1x1YWRlMFx1YWRlNFx1YWRmOFx1YWRmOVx1YWRmY1x1YWRmZlx1YWUwMFx1YWUwMVx1YWUwOFx1YWUwOVx1YWUwYlx1YWUwZFx1YWUxNFx1YWUzMFx1YWUzMVx1YWUzNFx1YWUzN1x1YWUzOFx1YWUzYVx1YWU0MFx1YWU0MVx1YWU0M1x1''@;'; put 'put ''YWU0NVx1YWU0Nlx1YWU0YVx1YWU0Y1x1YWU0ZFx1YWU0ZVx1YWU1MFx1YWU1NFx1YWU1Nlx1YWU1Y1x1YWU1ZFx1YWU1Zlx1YWU2MFx1YWU2MVx1YWU2NVx1YWU2OFx1YWU2OVx1YWU2Y1x1YWU3MFx1YWU3OFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3N10ubGVuZ3RoOysrcCk2NTUz''@;'; put 'put ''MyE9PV9bMTc3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3N11bcF1dPTQ1MzEyK3AsYls0NTMxMitwXT1fWzE3N11bcF0pO2ZvcihfWzE3OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Y2ZFx1Y2Y2ZVx1Y2Y2Zlx1''@;'; put 'put ''Y2Y3Mlx1Y2Y3M1x1Y2Y3NVx1Y2Y3Nlx1Y2Y3N1x1Y2Y3OVx1Y2Y3YVx1Y2Y3Ylx1Y2Y3Y1x1Y2Y3ZFx1Y2Y3ZVx1Y2Y3Zlx1Y2Y4MVx1Y2Y4Mlx1Y2Y4M1x1Y2Y4NFx1Y2Y4Nlx1Y2Y4N1x1Y2Y4OFx1Y2Y4OVx1Y2Y4YVx1Y2Y4Ylx1Y2Y4ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1Y2Y4ZVx1Y2Y4Zlx1Y2Y5MFx1Y2Y5MVx1Y2Y5Mlx1Y2Y5M1x1Y2Y5NFx1Y2Y5NVx1Y2Y5Nlx1Y2Y5N1x1Y2Y5OFx1Y2Y5OVx1Y2Y5YVx1Y2Y5Ylx1Y2Y5Y1x1Y2Y5ZFx1Y2Y5ZVx1Y2Y5Zlx1Y2ZhMFx1Y2ZhMlx1Y2ZhM1x1Y2ZhNFx1Y2ZhNVx1Y2ZhNlx1Y2ZhN1x1Y2ZhOVx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ZhYVx1Y2ZhYlx1Y2ZhY1x1Y2ZhZFx1Y2ZhZVx1Y2ZhZlx1Y2ZiMVx1Y2ZiMlx1Y2ZiM1x1Y2ZiNFx1Y2ZiNVx1Y2ZiNlx1Y2ZiN1x1Y2ZiOFx1Y2ZiOVx1Y2ZiYVx1Y2ZiYlx1Y2ZiY1x1Y2ZiZFx1Y2ZiZVx1Y2ZiZlx1Y2Zj''@;'; put 'put ''MFx1Y2ZjMVx1Y2ZjMlx1Y2ZjM1x1Y2ZjNVx1Y2ZjNlx1Y2ZjN1x1Y2ZjOFx1Y2ZjOVx1Y2ZjYVx1Y2ZjYlx1YWU3OVx1YWU3Ylx1YWU3Y1x1YWU3ZFx1YWU4NFx1YWU4NVx1YWU4Y1x1YWViY1x1YWViZFx1YWViZVx1YWVjMFx1YWVjNFx1YWVjY1x1YWVjZFx1YWVjZlx1YWVkMFx1YWVkMVx1''@;'; put 'put ''YWVkOFx1YWVkOVx1YWVkY1x1YWVlOFx1YWVlYlx1YWVlZFx1YWVmNFx1YWVmOFx1YWVmY1x1YWYwN1x1YWYwOFx1YWYwZFx1YWYxMFx1YWYyY1x1YWYyZFx1YWYzMFx1YWYzMlx1YWYzNFx1YWYzY1x1YWYzZFx1YWYzZlx1YWY0MVx1YWY0Mlx1YWY0M1x1YWY0OFx1YWY0OVx1YWY1MFx1YWY1''@;'; put 'put ''Y1x1YWY1ZFx1YWY2NFx1YWY2NVx1YWY3OVx1YWY4MFx1YWY4NFx1YWY4OFx1YWY5MFx1YWY5MVx1YWY5NVx1YWY5Y1x1YWZiOFx1YWZiOVx1YWZiY1x1YWZjMFx1YWZjN1x1YWZjOFx1YWZjOVx1YWZjYlx1YWZjZFx1YWZjZVx1YWZkNFx1YWZkY1x1YWZlOFx1YWZlOVx1YWZmMFx1YWZmMVx1''@;'; put 'put ''YWZmNFx1YWZmOFx1YjAwMFx1YjAwMVx1YjAwNFx1YjAwY1x1YjAxMFx1YjAxNFx1YjAxY1x1YjAxZFx1YjAyOFx1YjA0NFx1YjA0NVx1YjA0OFx1YjA0YVx1YjA0Y1x1YjA0ZVx1YjA1M1x1YjA1NFx1YjA1NVx1YjA1N1x1YjA1OVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3OF0ubGVu''@;'; put 'put ''Z3RoOysrcCk2NTUzMyE9PV9bMTc4XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3OF1bcF1dPTQ1NTY4K3AsYls0NTU2OCtwXT1fWzE3OF1bcF0pO2ZvcihfWzE3OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ZjY1x1''@;'; put 'put ''Y2ZjZFx1Y2ZjZVx1Y2ZjZlx1Y2ZkMFx1Y2ZkMVx1Y2ZkMlx1Y2ZkM1x1Y2ZkNFx1Y2ZkNVx1Y2ZkNlx1Y2ZkN1x1Y2ZkOFx1Y2ZkOVx1Y2ZkYVx1Y2ZkYlx1Y2ZkY1x1Y2ZkZFx1Y2ZkZVx1Y2ZkZlx1Y2ZlMlx1Y2ZlM1x1Y2ZlNVx1Y2ZlNlx1Y2ZlN1x1Y2ZlOVx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ZlYVx1Y2ZlYlx1Y2ZlY1x1Y2ZlZFx1Y2ZlZVx1Y2ZlZlx1Y2ZmMlx1Y2ZmNFx1Y2ZmNlx1Y2ZmN1x1Y2ZmOFx1Y2ZmOVx1Y2ZmYVx1Y2ZmYlx1Y2ZmZFx1Y2ZmZVx1Y2ZmZlx1ZDAwMVx1ZDAwMlx1ZDAwM1x1ZDAwNVx1ZDAwNlx1ZDAwN1x1ZDAwOFx1''@;'; put 'put ''ZDAwOVx1ZDAwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDAwYlx1ZDAwY1x1ZDAwZFx1ZDAwZVx1ZDAwZlx1ZDAxMFx1ZDAxMlx1ZDAxM1x1ZDAxNFx1ZDAxNVx1ZDAxNlx1ZDAxN1x1ZDAxOVx1ZDAxYVx1ZDAxYlx1ZDAxY1x1ZDAxZFx1ZDAxZVx1ZDAxZlx1ZDAy''@;'; put 'put ''MFx1ZDAyMVx1ZDAyMlx1ZDAyM1x1ZDAyNFx1ZDAyNVx1ZDAyNlx1ZDAyN1x1ZDAyOFx1ZDAyOVx1ZDAyYVx1ZDAyYlx1ZDAyY1x1YjA1ZFx1YjA3Y1x1YjA3ZFx1YjA4MFx1YjA4NFx1YjA4Y1x1YjA4ZFx1YjA4Zlx1YjA5MVx1YjA5OFx1YjA5OVx1YjA5YVx1YjA5Y1x1YjA5Zlx1YjBhMFx1''@;'; put 'put ''YjBhMVx1YjBhMlx1YjBhOFx1YjBhOVx1YjBhYlx1YjBhY1x1YjBhZFx1YjBhZVx1YjBhZlx1YjBiMVx1YjBiM1x1YjBiNFx1YjBiNVx1YjBiOFx1YjBiY1x1YjBjNFx1YjBjNVx1YjBjN1x1YjBjOFx1YjBjOVx1YjBkMFx1YjBkMVx1YjBkNFx1YjBkOFx1YjBlMFx1YjBlNVx1YjEwOFx1YjEw''@;'; put 'put ''OVx1YjEwYlx1YjEwY1x1YjExMFx1YjExMlx1YjExM1x1YjExOFx1YjExOVx1YjExYlx1YjExY1x1YjExZFx1YjEyM1x1YjEyNFx1YjEyNVx1YjEyOFx1YjEyY1x1YjEzNFx1YjEzNVx1YjEzN1x1YjEzOFx1YjEzOVx1YjE0MFx1YjE0MVx1YjE0NFx1YjE0OFx1YjE1MFx1YjE1MVx1YjE1NFx1''@;'; put 'put ''YjE1NVx1YjE1OFx1YjE1Y1x1YjE2MFx1YjE3OFx1YjE3OVx1YjE3Y1x1YjE4MFx1YjE4Mlx1YjE4OFx1YjE4OVx1YjE4Ylx1YjE4ZFx1YjE5Mlx1YjE5M1x1YjE5NFx1YjE5OFx1YjE5Y1x1YjFhOFx1YjFjY1x1YjFkMFx1YjFkNFx1YjFkY1x1YjFkZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtw''@;'; put 'put ''IT1fWzE3OV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTc5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3OV1bcF1dPTQ1ODI0K3AsYls0NTgyNCtwXT1fWzE3OV1bcF0pO2ZvcihfWzE4MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZDAyZVx1ZDAyZlx1ZDAzMFx1ZDAzMVx1ZDAzMlx1ZDAzM1x1ZDAzNlx1ZDAzN1x1ZDAzOVx1ZDAzYVx1ZDAzYlx1ZDAzZFx1ZDAzZVx1ZDAzZlx1ZDA0MFx1ZDA0MVx1ZDA0Mlx1ZDA0M1x1ZDA0Nlx1ZDA0OFx1ZDA0YVx1ZDA0Ylx1ZDA0Y1x1ZDA0ZFx1ZDA0ZVx1ZDA0Zlx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDA1MVx1ZDA1Mlx1ZDA1M1x1ZDA1NVx1ZDA1Nlx1ZDA1N1x1ZDA1OVx1ZDA1YVx1ZDA1Ylx1ZDA1Y1x1ZDA1ZFx1ZDA1ZVx1ZDA1Zlx1ZDA2MVx1ZDA2Mlx1ZDA2M1x1ZDA2NFx1ZDA2NVx1ZDA2Nlx1ZDA2N1x1ZDA2OFx1ZDA2OVx1''@;'; put 'put ''ZDA2YVx1ZDA2Ylx1ZDA2ZVx1ZDA2Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDA3MVx1ZDA3Mlx1ZDA3M1x1ZDA3NVx1ZDA3Nlx1ZDA3N1x1ZDA3OFx1ZDA3OVx1ZDA3YVx1ZDA3Ylx1ZDA3ZVx1ZDA3Zlx1ZDA4MFx1ZDA4Mlx1ZDA4M1x1ZDA4NFx1ZDA4NVx1ZDA4''@;'; put 'put ''Nlx1ZDA4N1x1ZDA4OFx1ZDA4OVx1ZDA4YVx1ZDA4Ylx1ZDA4Y1x1ZDA4ZFx1ZDA4ZVx1ZDA4Zlx1ZDA5MFx1ZDA5MVx1ZDA5Mlx1ZDA5M1x1ZDA5NFx1YjFkZlx1YjFlOFx1YjFlOVx1YjFlY1x1YjFmMFx1YjFmOVx1YjFmYlx1YjFmZFx1YjIwNFx1YjIwNVx1YjIwOFx1YjIwYlx1YjIwY1x1''@;'; put 'put ''YjIxNFx1YjIxNVx1YjIxN1x1YjIxOVx1YjIyMFx1YjIzNFx1YjIzY1x1YjI1OFx1YjI1Y1x1YjI2MFx1YjI2OFx1YjI2OVx1YjI3NFx1YjI3NVx1YjI3Y1x1YjI4NFx1YjI4NVx1YjI4OVx1YjI5MFx1YjI5MVx1YjI5NFx1YjI5OFx1YjI5OVx1YjI5YVx1YjJhMFx1YjJhMVx1YjJhM1x1YjJh''@;'; put 'put ''NVx1YjJhNlx1YjJhYVx1YjJhY1x1YjJiMFx1YjJiNFx1YjJjOFx1YjJjOVx1YjJjY1x1YjJkMFx1YjJkMlx1YjJkOFx1YjJkOVx1YjJkYlx1YjJkZFx1YjJlMlx1YjJlNFx1YjJlNVx1YjJlNlx1YjJlOFx1YjJlYlx1YjJlY1x1YjJlZFx1YjJlZVx1YjJlZlx1YjJmM1x1YjJmNFx1YjJmNVx1''@;'; put 'put ''YjJmN1x1YjJmOFx1YjJmOVx1YjJmYVx1YjJmYlx1YjJmZlx1YjMwMFx1YjMwMVx1YjMwNFx1YjMwOFx1YjMxMFx1YjMxMVx1YjMxM1x1YjMxNFx1YjMxNVx1YjMxY1x1YjM1NFx1YjM1NVx1YjM1Nlx1YjM1OFx1YjM1Ylx1YjM1Y1x1YjM1ZVx1YjM1Zlx1YjM2NFx1YjM2NVx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLHA9MDtwIT1fWzE4MF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTgwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4MF1bcF1dPTQ2MDgwK3AsYls0NjA4MCtwXT1fWzE4MF1bcF0pO2ZvcihfWzE4MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDA5NVx1ZDA5Nlx1ZDA5N1x1ZDA5OFx1ZDA5OVx1ZDA5YVx1ZDA5Ylx1ZDA5Y1x1ZDA5ZFx1ZDA5ZVx1ZDA5Zlx1ZDBhMFx1ZDBhMVx1ZDBhMlx1ZDBhM1x1ZDBhNlx1ZDBhN1x1ZDBhOVx1ZDBhYVx1ZDBhYlx1ZDBhZFx1ZDBhZVx1ZDBhZlx1ZDBiMFx1ZDBi''@;'; put 'put ''MVx1ZDBiMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDBiM1x1ZDBiNlx1ZDBiOFx1ZDBiYVx1ZDBiYlx1ZDBiY1x1ZDBiZFx1ZDBiZVx1ZDBiZlx1ZDBjMlx1ZDBjM1x1ZDBjNVx1ZDBjNlx1ZDBjN1x1ZDBjYVx1ZDBjYlx1ZDBjY1x1ZDBjZFx1ZDBjZVx1ZDBjZlx1''@;'; put 'put ''ZDBkMlx1ZDBkNlx1ZDBkN1x1ZDBkOFx1ZDBkOVx1ZDBkYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDBkYlx1ZDBkZVx1ZDBkZlx1ZDBlMVx1ZDBlMlx1ZDBlM1x1ZDBlNVx1ZDBlNlx1ZDBlN1x1ZDBlOFx1ZDBlOVx1ZDBlYVx1ZDBlYlx1ZDBlZVx1ZDBmMlx1ZDBm''@;'; put 'put ''M1x1ZDBmNFx1ZDBmNVx1ZDBmNlx1ZDBmN1x1ZDBmOVx1ZDBmYVx1ZDBmYlx1ZDBmY1x1ZDBmZFx1ZDBmZVx1ZDBmZlx1ZDEwMFx1ZDEwMVx1ZDEwMlx1ZDEwM1x1ZDEwNFx1YjM2N1x1YjM2OVx1YjM2Ylx1YjM2ZVx1YjM3MFx1YjM3MVx1YjM3NFx1YjM3OFx1YjM4MFx1YjM4MVx1YjM4M1x1''@;'; put 'put ''YjM4NFx1YjM4NVx1YjM4Y1x1YjM5MFx1YjM5NFx1YjNhMFx1YjNhMVx1YjNhOFx1YjNhY1x1YjNjNFx1YjNjNVx1YjNjOFx1YjNjYlx1YjNjY1x1YjNjZVx1YjNkMFx1YjNkNFx1YjNkNVx1YjNkN1x1YjNkOVx1YjNkYlx1YjNkZFx1YjNlMFx1YjNlNFx1YjNlOFx1YjNmY1x1YjQxMFx1YjQx''@;'; put 'put ''OFx1YjQxY1x1YjQyMFx1YjQyOFx1YjQyOVx1YjQyYlx1YjQzNFx1YjQ1MFx1YjQ1MVx1YjQ1NFx1YjQ1OFx1YjQ2MFx1YjQ2MVx1YjQ2M1x1YjQ2NVx1YjQ2Y1x1YjQ4MFx1YjQ4OFx1YjQ5ZFx1YjRhNFx1YjRhOFx1YjRhY1x1YjRiNVx1YjRiN1x1YjRiOVx1YjRjMFx1YjRjNFx1YjRjOFx1''@;'; put 'put ''YjRkMFx1YjRkNVx1YjRkY1x1YjRkZFx1YjRlMFx1YjRlM1x1YjRlNFx1YjRlNlx1YjRlY1x1YjRlZFx1YjRlZlx1YjRmMVx1YjRmOFx1YjUxNFx1YjUxNVx1YjUxOFx1YjUxYlx1YjUxY1x1YjUyNFx1YjUyNVx1YjUyN1x1YjUyOFx1YjUyOVx1YjUyYVx1YjUzMFx1YjUzMVx1YjUzNFx1YjUz''@;'; put 'put ''OFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4MV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTgxXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4MV1bcF1dPTQ2MzM2K3AsYls0NjMzNitwXT1fWzE4MV1bcF0pO2ZvcihfWzE4Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDEwNVx1ZDEwNlx1ZDEwN1x1ZDEwOFx1ZDEwOVx1ZDEwYVx1ZDEwYlx1ZDEwY1x1ZDEwZVx1ZDEwZlx1ZDExMFx1ZDExMVx1ZDExMlx1ZDExM1x1ZDExNFx1ZDExNVx1ZDExNlx1ZDExN1x1ZDExOFx1ZDExOVx1ZDExYVx1ZDExYlx1ZDEx''@;'; put 'put ''Y1x1ZDExZFx1ZDExZVx1ZDExZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDEyMFx1ZDEyMVx1ZDEyMlx1ZDEyM1x1ZDEyNFx1ZDEyNVx1ZDEyNlx1ZDEyN1x1ZDEyOFx1ZDEyOVx1ZDEyYVx1ZDEyYlx1ZDEyY1x1ZDEyZFx1ZDEyZVx1ZDEyZlx1ZDEzMlx1ZDEzM1x1''@;'; put 'put ''ZDEzNVx1ZDEzNlx1ZDEzN1x1ZDEzOVx1ZDEzYlx1ZDEzY1x1ZDEzZFx1ZDEzZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDEzZlx1ZDE0Mlx1ZDE0Nlx1ZDE0N1x1ZDE0OFx1ZDE0OVx1ZDE0YVx1ZDE0Ylx1ZDE0ZVx1ZDE0Zlx1ZDE1MVx1ZDE1Mlx1ZDE1M1x1ZDE1''@;'; put 'put ''NVx1ZDE1Nlx1ZDE1N1x1ZDE1OFx1ZDE1OVx1ZDE1YVx1ZDE1Ylx1ZDE1ZVx1ZDE2MFx1ZDE2Mlx1ZDE2M1x1ZDE2NFx1ZDE2NVx1ZDE2Nlx1ZDE2N1x1ZDE2OVx1ZDE2YVx1ZDE2Ylx1ZDE2ZFx1YjU0MFx1YjU0MVx1YjU0M1x1YjU0NFx1YjU0NVx1YjU0Ylx1YjU0Y1x1YjU0ZFx1YjU1MFx1''@;'; put 'put ''YjU1NFx1YjU1Y1x1YjU1ZFx1YjU1Zlx1YjU2MFx1YjU2MVx1YjVhMFx1YjVhMVx1YjVhNFx1YjVhOFx1YjVhYVx1YjVhYlx1YjViMFx1YjViMVx1YjViM1x1YjViNFx1YjViNVx1YjViYlx1YjViY1x1YjViZFx1YjVjMFx1YjVjNFx1YjVjY1x1YjVjZFx1YjVjZlx1YjVkMFx1YjVkMVx1YjVk''@;'; put 'put ''OFx1YjVlY1x1YjYxMFx1YjYxMVx1YjYxNFx1YjYxOFx1YjYyNVx1YjYyY1x1YjYzNFx1YjY0OFx1YjY2NFx1YjY2OFx1YjY5Y1x1YjY5ZFx1YjZhMFx1YjZhNFx1YjZhYlx1YjZhY1x1YjZiMVx1YjZkNFx1YjZmMFx1YjZmNFx1YjZmOFx1YjcwMFx1YjcwMVx1YjcwNVx1YjcyOFx1YjcyOVx1''@;'; put 'put ''YjcyY1x1YjcyZlx1YjczMFx1YjczOFx1YjczOVx1YjczYlx1Yjc0NFx1Yjc0OFx1Yjc0Y1x1Yjc1NFx1Yjc1NVx1Yjc2MFx1Yjc2NFx1Yjc2OFx1Yjc3MFx1Yjc3MVx1Yjc3M1x1Yjc3NVx1Yjc3Y1x1Yjc3ZFx1Yjc4MFx1Yjc4NFx1Yjc4Y1x1Yjc4ZFx1Yjc4Zlx1Yjc5MFx1Yjc5MVx1Yjc5''@;'; put 'put ''Mlx1Yjc5Nlx1Yjc5N1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTgyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4Ml1bcF1dPTQ2NTkyK3AsYls0NjU5MitwXT1fWzE4Ml1bcF0pO2ZvcihfWzE4M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDE2ZVx1ZDE2Zlx1ZDE3MFx1ZDE3MVx1ZDE3Mlx1ZDE3M1x1ZDE3NFx1ZDE3NVx1ZDE3Nlx1ZDE3N1x1ZDE3OFx1ZDE3OVx1ZDE3YVx1ZDE3Ylx1ZDE3ZFx1ZDE3ZVx1ZDE3Zlx1ZDE4MFx1ZDE4MVx1ZDE4Mlx1ZDE4''@;'; put 'put ''M1x1ZDE4NVx1ZDE4Nlx1ZDE4N1x1ZDE4OVx1ZDE4YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDE4Ylx1ZDE4Y1x1ZDE4ZFx1ZDE4ZVx1ZDE4Zlx1ZDE5MFx1ZDE5MVx1ZDE5Mlx1ZDE5M1x1ZDE5NFx1ZDE5NVx1ZDE5Nlx1ZDE5N1x1ZDE5OFx1ZDE5OVx1ZDE5YVx1''@;'; put 'put ''ZDE5Ylx1ZDE5Y1x1ZDE5ZFx1ZDE5ZVx1ZDE5Zlx1ZDFhMlx1ZDFhM1x1ZDFhNVx1ZDFhNlx1ZDFhN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDFhOVx1ZDFhYVx1ZDFhYlx1ZDFhY1x1ZDFhZFx1ZDFhZVx1ZDFhZlx1ZDFiMlx1ZDFiNFx1ZDFiNlx1ZDFiN1x1ZDFi''@;'; put 'put ''OFx1ZDFiOVx1ZDFiYlx1ZDFiZFx1ZDFiZVx1ZDFiZlx1ZDFjMVx1ZDFjMlx1ZDFjM1x1ZDFjNFx1ZDFjNVx1ZDFjNlx1ZDFjN1x1ZDFjOFx1ZDFjOVx1ZDFjYVx1ZDFjYlx1ZDFjY1x1ZDFjZFx1ZDFjZVx1ZDFjZlx1Yjc5OFx1Yjc5OVx1Yjc5Y1x1YjdhMFx1YjdhOFx1YjdhOVx1YjdhYlx1''@;'; put 'put ''YjdhY1x1YjdhZFx1YjdiNFx1YjdiNVx1YjdiOFx1YjdjN1x1YjdjOVx1YjdlY1x1YjdlZFx1YjdmMFx1YjdmNFx1YjdmY1x1YjdmZFx1YjdmZlx1YjgwMFx1YjgwMVx1YjgwN1x1YjgwOFx1YjgwOVx1YjgwY1x1YjgxMFx1YjgxOFx1YjgxOVx1YjgxYlx1YjgxZFx1YjgyNFx1YjgyNVx1Yjgy''@;'; put 'put ''OFx1YjgyY1x1YjgzNFx1YjgzNVx1YjgzN1x1YjgzOFx1YjgzOVx1Yjg0MFx1Yjg0NFx1Yjg1MVx1Yjg1M1x1Yjg1Y1x1Yjg1ZFx1Yjg2MFx1Yjg2NFx1Yjg2Y1x1Yjg2ZFx1Yjg2Zlx1Yjg3MVx1Yjg3OFx1Yjg3Y1x1Yjg4ZFx1YjhhOFx1YjhiMFx1YjhiNFx1YjhiOFx1YjhjMFx1YjhjMVx1''@;'; put 'put ''YjhjM1x1YjhjNVx1YjhjY1x1YjhkMFx1YjhkNFx1YjhkZFx1YjhkZlx1YjhlMVx1YjhlOFx1YjhlOVx1YjhlY1x1YjhmMFx1YjhmOFx1YjhmOVx1YjhmYlx1YjhmZFx1YjkwNFx1YjkxOFx1YjkyMFx1YjkzY1x1YjkzZFx1Yjk0MFx1Yjk0NFx1Yjk0Y1x1Yjk0Zlx1Yjk1MVx1Yjk1OFx1Yjk1''@;'; put 'put ''OVx1Yjk1Y1x1Yjk2MFx1Yjk2OFx1Yjk2OVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4M10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTgzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4M11bcF1dPTQ2ODQ4K3AsYls0Njg0OCtwXT1fWzE4M11bcF0pO2ZvcihfWzE4NF09Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDFkMFx1ZDFkMVx1ZDFkMlx1ZDFkM1x1ZDFkNFx1ZDFkNVx1ZDFkNlx1ZDFkN1x1ZDFkOVx1ZDFkYVx1ZDFkYlx1ZDFkY1x1ZDFkZFx1ZDFkZVx1ZDFkZlx1ZDFlMFx1ZDFlMVx1ZDFlMlx1ZDFl''@;'; put 'put ''M1x1ZDFlNFx1ZDFlNVx1ZDFlNlx1ZDFlN1x1ZDFlOFx1ZDFlOVx1ZDFlYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDFlYlx1ZDFlY1x1ZDFlZFx1ZDFlZVx1ZDFlZlx1ZDFmMFx1ZDFmMVx1ZDFmMlx1ZDFmM1x1ZDFmNVx1ZDFmNlx1ZDFmN1x1ZDFmOVx1ZDFmYVx1''@;'; put 'put ''ZDFmYlx1ZDFmY1x1ZDFmZFx1ZDFmZVx1ZDFmZlx1ZDIwMFx1ZDIwMVx1ZDIwMlx1ZDIwM1x1ZDIwNFx1ZDIwNVx1ZDIwNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDIwOFx1ZDIwYVx1ZDIwYlx1ZDIwY1x1ZDIwZFx1ZDIwZVx1ZDIwZlx1ZDIxMVx1ZDIxMlx1ZDIx''@;'; put 'put ''M1x1ZDIxNFx1ZDIxNVx1ZDIxNlx1ZDIxN1x1ZDIxOFx1ZDIxOVx1ZDIxYVx1ZDIxYlx1ZDIxY1x1ZDIxZFx1ZDIxZVx1ZDIxZlx1ZDIyMFx1ZDIyMVx1ZDIyMlx1ZDIyM1x1ZDIyNFx1ZDIyNVx1ZDIyNlx1ZDIyN1x1ZDIyOFx1ZDIyOVx1Yjk2Ylx1Yjk2ZFx1Yjk3NFx1Yjk3NVx1Yjk3OFx1''@;'; put 'put ''Yjk3Y1x1Yjk4NFx1Yjk4NVx1Yjk4N1x1Yjk4OVx1Yjk4YVx1Yjk4ZFx1Yjk4ZVx1YjlhY1x1YjlhZFx1YjliMFx1YjliNFx1YjliY1x1YjliZFx1YjliZlx1YjljMVx1YjljOFx1YjljOVx1YjljY1x1YjljZVx1YjljZlx1YjlkMFx1YjlkMVx1YjlkMlx1YjlkOFx1YjlkOVx1YjlkYlx1Yjlk''@;'; put 'put ''ZFx1YjlkZVx1YjllMVx1YjllM1x1YjllNFx1YjllNVx1YjllOFx1YjllY1x1YjlmNFx1YjlmNVx1YjlmN1x1YjlmOFx1YjlmOVx1YjlmYVx1YmEwMFx1YmEwMVx1YmEwOFx1YmExNVx1YmEzOFx1YmEzOVx1YmEzY1x1YmE0MFx1YmE0Mlx1YmE0OFx1YmE0OVx1YmE0Ylx1YmE0ZFx1YmE0ZVx1''@;'; put 'put ''YmE1M1x1YmE1NFx1YmE1NVx1YmE1OFx1YmE1Y1x1YmE2NFx1YmE2NVx1YmE2N1x1YmE2OFx1YmE2OVx1YmE3MFx1YmE3MVx1YmE3NFx1YmE3OFx1YmE4M1x1YmE4NFx1YmE4NVx1YmE4N1x1YmE4Y1x1YmFhOFx1YmFhOVx1YmFhYlx1YmFhY1x1YmFiMFx1YmFiMlx1YmFiOFx1YmFiOVx1YmFi''@;'; put 'put ''Ylx1YmFiZFx1YmFjNFx1YmFjOFx1YmFkOFx1YmFkOVx1YmFmY1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4NF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTg0XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4NF1bcF1dPTQ3MTA0K3AsYls0NzEwNCtwXT1fWzE4NF1bcF0pO2ZvcihfWzE4''@;'; put 'put ''NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDIyYVx1ZDIyYlx1ZDIyZVx1ZDIyZlx1ZDIzMVx1ZDIzMlx1ZDIzM1x1ZDIzNVx1ZDIzNlx1ZDIzN1x1ZDIzOFx1ZDIzOVx1ZDIzYVx1ZDIzYlx1ZDIzZVx1ZDI0MFx1ZDI0''@;'; put 'put ''Mlx1ZDI0M1x1ZDI0NFx1ZDI0NVx1ZDI0Nlx1ZDI0N1x1ZDI0OVx1ZDI0YVx1ZDI0Ylx1ZDI0Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI0ZFx1ZDI0ZVx1ZDI0Zlx1ZDI1MFx1ZDI1MVx1ZDI1Mlx1ZDI1M1x1ZDI1NFx1ZDI1NVx1ZDI1Nlx1ZDI1N1x1ZDI1OFx1''@;'; put 'put ''ZDI1OVx1ZDI1YVx1ZDI1Ylx1ZDI1ZFx1ZDI1ZVx1ZDI1Zlx1ZDI2MFx1ZDI2MVx1ZDI2Mlx1ZDI2M1x1ZDI2NVx1ZDI2Nlx1ZDI2N1x1ZDI2OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI2OVx1ZDI2YVx1ZDI2Ylx1ZDI2Y1x1ZDI2ZFx1ZDI2ZVx1ZDI2Zlx1ZDI3''@;'; put 'put ''MFx1ZDI3MVx1ZDI3Mlx1ZDI3M1x1ZDI3NFx1ZDI3NVx1ZDI3Nlx1ZDI3N1x1ZDI3OFx1ZDI3OVx1ZDI3YVx1ZDI3Ylx1ZDI3Y1x1ZDI3ZFx1ZDI3ZVx1ZDI3Zlx1ZDI4Mlx1ZDI4M1x1ZDI4NVx1ZDI4Nlx1ZDI4N1x1ZDI4OVx1ZDI4YVx1ZDI4Ylx1ZDI4Y1x1YmIwMFx1YmIwNFx1YmIwZFx1''@;'; put 'put ''YmIwZlx1YmIxMVx1YmIxOFx1YmIxY1x1YmIyMFx1YmIyOVx1YmIyYlx1YmIzNFx1YmIzNVx1YmIzNlx1YmIzOFx1YmIzYlx1YmIzY1x1YmIzZFx1YmIzZVx1YmI0NFx1YmI0NVx1YmI0N1x1YmI0OVx1YmI0ZFx1YmI0Zlx1YmI1MFx1YmI1NFx1YmI1OFx1YmI2MVx1YmI2M1x1YmI2Y1x1YmI4''@;'; put 'put ''OFx1YmI4Y1x1YmI5MFx1YmJhNFx1YmJhOFx1YmJhY1x1YmJiNFx1YmJiN1x1YmJjMFx1YmJjNFx1YmJjOFx1YmJkMFx1YmJkM1x1YmJmOFx1YmJmOVx1YmJmY1x1YmJmZlx1YmMwMFx1YmMwMlx1YmMwOFx1YmMwOVx1YmMwYlx1YmMwY1x1YmMwZFx1YmMwZlx1YmMxMVx1YmMxNFx1YmMxNVx1''@;'; put 'put ''YmMxNlx1YmMxN1x1YmMxOFx1YmMxYlx1YmMxY1x1YmMxZFx1YmMxZVx1YmMxZlx1YmMyNFx1YmMyNVx1YmMyN1x1YmMyOVx1YmMyZFx1YmMzMFx1YmMzMVx1YmMzNFx1YmMzOFx1YmM0MFx1YmM0MVx1YmM0M1x1YmM0NFx1YmM0NVx1YmM0OVx1YmM0Y1x1YmM0ZFx1YmM1MFx1YmM1ZFx1YmM4''@;'; put 'put ''NFx1YmM4NVx1YmM4OFx1YmM4Ylx1YmM4Y1x1YmM4ZVx1YmM5NFx1YmM5NVx1YmM5N1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4NV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTg1XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4NV1bcF1dPTQ3MzYwK3AsYls0NzM2MCtwXT1fWzE4NV1b''@;'; put 'put ''cF0pO2ZvcihfWzE4Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI4ZFx1ZDI4ZVx1ZDI4Zlx1ZDI5Mlx1ZDI5M1x1ZDI5NFx1ZDI5Nlx1ZDI5N1x1ZDI5OFx1ZDI5OVx1ZDI5YVx1ZDI5Ylx1ZDI5ZFx1ZDI5ZVx1ZDI5''@;'; put 'put ''Zlx1ZDJhMVx1ZDJhMlx1ZDJhM1x1ZDJhNVx1ZDJhNlx1ZDJhN1x1ZDJhOFx1ZDJhOVx1ZDJhYVx1ZDJhYlx1ZDJhZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDJhZVx1ZDJhZlx1ZDJiMFx1ZDJiMlx1ZDJiM1x1ZDJiNFx1ZDJiNVx1ZDJiNlx1ZDJiN1x1ZDJiYVx1''@;'; put 'put ''ZDJiYlx1ZDJiZFx1ZDJiZVx1ZDJjMVx1ZDJjM1x1ZDJjNFx1ZDJjNVx1ZDJjNlx1ZDJjN1x1ZDJjYVx1ZDJjY1x1ZDJjZFx1ZDJjZVx1ZDJjZlx1ZDJkMFx1ZDJkMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDJkMlx1ZDJkM1x1ZDJkNVx1ZDJkNlx1ZDJkN1x1ZDJk''@;'; put 'put ''OVx1ZDJkYVx1ZDJkYlx1ZDJkZFx1ZDJkZVx1ZDJkZlx1ZDJlMFx1ZDJlMVx1ZDJlMlx1ZDJlM1x1ZDJlNlx1ZDJlN1x1ZDJlOFx1ZDJlOVx1ZDJlYVx1ZDJlYlx1ZDJlY1x1ZDJlZFx1ZDJlZVx1ZDJlZlx1ZDJmMlx1ZDJmM1x1ZDJmNVx1ZDJmNlx1ZDJmN1x1ZDJmOVx1ZDJmYVx1YmM5OVx1''@;'; put 'put ''YmM5YVx1YmNhMFx1YmNhMVx1YmNhNFx1YmNhN1x1YmNhOFx1YmNiMFx1YmNiMVx1YmNiM1x1YmNiNFx1YmNiNVx1YmNiY1x1YmNiZFx1YmNjMFx1YmNjNFx1YmNjZFx1YmNjZlx1YmNkMFx1YmNkMVx1YmNkNVx1YmNkOFx1YmNkY1x1YmNmNFx1YmNmNVx1YmNmNlx1YmNmOFx1YmNmY1x1YmQw''@;'; put 'put ''NFx1YmQwNVx1YmQwN1x1YmQwOVx1YmQxMFx1YmQxNFx1YmQyNFx1YmQyY1x1YmQ0MFx1YmQ0OFx1YmQ0OVx1YmQ0Y1x1YmQ1MFx1YmQ1OFx1YmQ1OVx1YmQ2NFx1YmQ2OFx1YmQ4MFx1YmQ4MVx1YmQ4NFx1YmQ4N1x1YmQ4OFx1YmQ4OVx1YmQ4YVx1YmQ5MFx1YmQ5MVx1YmQ5M1x1YmQ5NVx1''@;'; put 'put ''YmQ5OVx1YmQ5YVx1YmQ5Y1x1YmRhNFx1YmRiMFx1YmRiOFx1YmRkNFx1YmRkNVx1YmRkOFx1YmRkY1x1YmRlOVx1YmRmMFx1YmRmNFx1YmRmOFx1YmUwMFx1YmUwM1x1YmUwNVx1YmUwY1x1YmUwZFx1YmUxMFx1YmUxNFx1YmUxY1x1YmUxZFx1YmUxZlx1YmU0NFx1YmU0NVx1YmU0OFx1YmU0''@;'; put 'put ''Y1x1YmU0ZVx1YmU1NFx1YmU1NVx1YmU1N1x1YmU1OVx1YmU1YVx1YmU1Ylx1YmU2MFx1YmU2MVx1YmU2NFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4Nl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTg2XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4Nl1bcF1dPTQ3NjE2K3AsYls0NzYx''@;'; put 'put ''NitwXT1fWzE4Nl1bcF0pO2ZvcihfWzE4N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDJmYlx1ZDJmY1x1ZDJmZFx1ZDJmZVx1ZDJmZlx1ZDMwMlx1ZDMwNFx1ZDMwNlx1ZDMwN1x1ZDMwOFx1ZDMwOVx1ZDMwYVx1ZDMw''@;'; put 'put ''Ylx1ZDMwZlx1ZDMxMVx1ZDMxMlx1ZDMxM1x1ZDMxNVx1ZDMxN1x1ZDMxOFx1ZDMxOVx1ZDMxYVx1ZDMxYlx1ZDMxZVx1ZDMyMlx1ZDMyM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDMyNFx1ZDMyNlx1ZDMyN1x1ZDMyYVx1ZDMyYlx1ZDMyZFx1ZDMyZVx1ZDMyZlx1''@;'; put 'put ''ZDMzMVx1ZDMzMlx1ZDMzM1x1ZDMzNFx1ZDMzNVx1ZDMzNlx1ZDMzN1x1ZDMzYVx1ZDMzZVx1ZDMzZlx1ZDM0MFx1ZDM0MVx1ZDM0Mlx1ZDM0M1x1ZDM0Nlx1ZDM0N1x1ZDM0OFx1ZDM0OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDM0YVx1ZDM0Ylx1ZDM0Y1x1ZDM0''@;'; put 'put ''ZFx1ZDM0ZVx1ZDM0Zlx1ZDM1MFx1ZDM1MVx1ZDM1Mlx1ZDM1M1x1ZDM1NFx1ZDM1NVx1ZDM1Nlx1ZDM1N1x1ZDM1OFx1ZDM1OVx1ZDM1YVx1ZDM1Ylx1ZDM1Y1x1ZDM1ZFx1ZDM1ZVx1ZDM1Zlx1ZDM2MFx1ZDM2MVx1ZDM2Mlx1ZDM2M1x1ZDM2NFx1ZDM2NVx1ZDM2Nlx1ZDM2N1x1ZDM2OFx1''@;'; put 'put ''ZDM2OVx1YmU2OFx1YmU2YVx1YmU3MFx1YmU3MVx1YmU3M1x1YmU3NFx1YmU3NVx1YmU3Ylx1YmU3Y1x1YmU3ZFx1YmU4MFx1YmU4NFx1YmU4Y1x1YmU4ZFx1YmU4Zlx1YmU5MFx1YmU5MVx1YmU5OFx1YmU5OVx1YmVhOFx1YmVkMFx1YmVkMVx1YmVkNFx1YmVkN1x1YmVkOFx1YmVlMFx1YmVl''@;'; put 'put ''M1x1YmVlNFx1YmVlNVx1YmVlY1x1YmYwMVx1YmYwOFx1YmYwOVx1YmYxOFx1YmYxOVx1YmYxYlx1YmYxY1x1YmYxZFx1YmY0MFx1YmY0MVx1YmY0NFx1YmY0OFx1YmY1MFx1YmY1MVx1YmY1NVx1YmY5NFx1YmZiMFx1YmZjNVx1YmZjY1x1YmZjZFx1YmZkMFx1YmZkNFx1YmZkY1x1YmZkZlx1''@;'; put 'put ''YmZlMVx1YzAzY1x1YzA1MVx1YzA1OFx1YzA1Y1x1YzA2MFx1YzA2OFx1YzA2OVx1YzA5MFx1YzA5MVx1YzA5NFx1YzA5OFx1YzBhMFx1YzBhMVx1YzBhM1x1YzBhNVx1YzBhY1x1YzBhZFx1YzBhZlx1YzBiMFx1YzBiM1x1YzBiNFx1YzBiNVx1YzBiNlx1YzBiY1x1YzBiZFx1YzBiZlx1YzBj''@;'; put 'put ''MFx1YzBjMVx1YzBjNVx1YzBjOFx1YzBjOVx1YzBjY1x1YzBkMFx1YzBkOFx1YzBkOVx1YzBkYlx1YzBkY1x1YzBkZFx1YzBlNFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4N10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTg3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4N11bcF1dPTQ3''@;'; put 'put ''ODcyK3AsYls0Nzg3MitwXT1fWzE4N11bcF0pO2ZvcihfWzE4OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDM2YVx1ZDM2Ylx1ZDM2Y1x1ZDM2ZFx1ZDM2ZVx1ZDM2Zlx1ZDM3MFx1ZDM3MVx1ZDM3Mlx1ZDM3M1x1ZDM3''@;'; put 'put ''NFx1ZDM3NVx1ZDM3Nlx1ZDM3N1x1ZDM3OFx1ZDM3OVx1ZDM3YVx1ZDM3Ylx1ZDM3ZVx1ZDM3Zlx1ZDM4MVx1ZDM4Mlx1ZDM4M1x1ZDM4NVx1ZDM4Nlx1ZDM4N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDM4OFx1ZDM4OVx1ZDM4YVx1ZDM4Ylx1ZDM4ZVx1ZDM5Mlx1''@;'; put 'put ''ZDM5M1x1ZDM5NFx1ZDM5NVx1ZDM5Nlx1ZDM5N1x1ZDM5YVx1ZDM5Ylx1ZDM5ZFx1ZDM5ZVx1ZDM5Zlx1ZDNhMVx1ZDNhMlx1ZDNhM1x1ZDNhNFx1ZDNhNVx1ZDNhNlx1ZDNhN1x1ZDNhYVx1ZDNhY1x1ZDNhZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDNhZlx1ZDNi''@;'; put 'put ''MFx1ZDNiMVx1ZDNiMlx1ZDNiM1x1ZDNiNVx1ZDNiNlx1ZDNiN1x1ZDNiOVx1ZDNiYVx1ZDNiYlx1ZDNiZFx1ZDNiZVx1ZDNiZlx1ZDNjMFx1ZDNjMVx1ZDNjMlx1ZDNjM1x1ZDNjNlx1ZDNjN1x1ZDNjYVx1ZDNjYlx1ZDNjY1x1ZDNjZFx1ZDNjZVx1ZDNjZlx1ZDNkMVx1ZDNkMlx1ZDNkM1x1''@;'; put 'put ''ZDNkNFx1ZDNkNVx1ZDNkNlx1YzBlNVx1YzBlOFx1YzBlY1x1YzBmNFx1YzBmNVx1YzBmN1x1YzBmOVx1YzEwMFx1YzEwNFx1YzEwOFx1YzExMFx1YzExNVx1YzExY1x1YzExZFx1YzExZVx1YzExZlx1YzEyMFx1YzEyM1x1YzEyNFx1YzEyNlx1YzEyN1x1YzEyY1x1YzEyZFx1YzEyZlx1YzEz''@;'; put 'put ''MFx1YzEzMVx1YzEzNlx1YzEzOFx1YzEzOVx1YzEzY1x1YzE0MFx1YzE0OFx1YzE0OVx1YzE0Ylx1YzE0Y1x1YzE0ZFx1YzE1NFx1YzE1NVx1YzE1OFx1YzE1Y1x1YzE2NFx1YzE2NVx1YzE2N1x1YzE2OFx1YzE2OVx1YzE3MFx1YzE3NFx1YzE3OFx1YzE4NVx1YzE4Y1x1YzE4ZFx1YzE4ZVx1''@;'; put 'put ''YzE5MFx1YzE5NFx1YzE5Nlx1YzE5Y1x1YzE5ZFx1YzE5Zlx1YzFhMVx1YzFhNVx1YzFhOFx1YzFhOVx1YzFhY1x1YzFiMFx1YzFiZFx1YzFjNFx1YzFjOFx1YzFjY1x1YzFkNFx1YzFkN1x1YzFkOFx1YzFlMFx1YzFlNFx1YzFlOFx1YzFmMFx1YzFmMVx1YzFmM1x1YzFmY1x1YzFmZFx1YzIw''@;'; put 'put ''MFx1YzIwNFx1YzIwY1x1YzIwZFx1YzIwZlx1YzIxMVx1YzIxOFx1YzIxOVx1YzIxY1x1YzIxZlx1YzIyMFx1YzIyOFx1YzIyOVx1YzIyYlx1YzIyZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4OF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTg4XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtf''@;'; put 'put ''WzE4OF1bcF1dPTQ4MTI4K3AsYls0ODEyOCtwXT1fWzE4OF1bcF0pO2ZvcihfWzE4OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDNkN1x1ZDNkOVx1ZDNkYVx1ZDNkYlx1ZDNkY1x1ZDNkZFx1ZDNkZVx1ZDNkZlx1ZDNl''@;'; put 'put ''MFx1ZDNlMlx1ZDNlNFx1ZDNlNVx1ZDNlNlx1ZDNlN1x1ZDNlOFx1ZDNlOVx1ZDNlYVx1ZDNlYlx1ZDNlZVx1ZDNlZlx1ZDNmMVx1ZDNmMlx1ZDNmM1x1ZDNmNVx1ZDNmNlx1ZDNmN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDNmOFx1ZDNmOVx1ZDNmYVx1ZDNmYlx1''@;'; put 'put ''ZDNmZVx1ZDQwMFx1ZDQwMlx1ZDQwM1x1ZDQwNFx1ZDQwNVx1ZDQwNlx1ZDQwN1x1ZDQwOVx1ZDQwYVx1ZDQwYlx1ZDQwY1x1ZDQwZFx1ZDQwZVx1ZDQwZlx1ZDQxMFx1ZDQxMVx1ZDQxMlx1ZDQxM1x1ZDQxNFx1ZDQxNVx1ZDQxNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZDQxN1x1ZDQxOFx1ZDQxOVx1ZDQxYVx1ZDQxYlx1ZDQxY1x1ZDQxZVx1ZDQxZlx1ZDQyMFx1ZDQyMVx1ZDQyMlx1ZDQyM1x1ZDQyNFx1ZDQyNVx1ZDQyNlx1ZDQyN1x1ZDQyOFx1ZDQyOVx1ZDQyYVx1ZDQyYlx1ZDQyY1x1ZDQyZFx1ZDQyZVx1ZDQyZlx1ZDQzMFx1ZDQzMVx1ZDQzMlx1''@;'; put 'put ''ZDQzM1x1ZDQzNFx1ZDQzNVx1ZDQzNlx1ZDQzN1x1YzIyZlx1YzIzMVx1YzIzMlx1YzIzNFx1YzI0OFx1YzI1MFx1YzI1MVx1YzI1NFx1YzI1OFx1YzI2MFx1YzI2NVx1YzI2Y1x1YzI2ZFx1YzI3MFx1YzI3NFx1YzI3Y1x1YzI3ZFx1YzI3Zlx1YzI4MVx1YzI4OFx1YzI4OVx1YzI5MFx1YzI5''@;'; put 'put ''OFx1YzI5Ylx1YzI5ZFx1YzJhNFx1YzJhNVx1YzJhOFx1YzJhY1x1YzJhZFx1YzJiNFx1YzJiNVx1YzJiN1x1YzJiOVx1YzJkY1x1YzJkZFx1YzJlMFx1YzJlM1x1YzJlNFx1YzJlYlx1YzJlY1x1YzJlZFx1YzJlZlx1YzJmMVx1YzJmNlx1YzJmOFx1YzJmOVx1YzJmYlx1YzJmY1x1YzMwMFx1''@;'; put 'put ''YzMwOFx1YzMwOVx1YzMwY1x1YzMwZFx1YzMxM1x1YzMxNFx1YzMxNVx1YzMxOFx1YzMxY1x1YzMyNFx1YzMyNVx1YzMyOFx1YzMyOVx1YzM0NVx1YzM2OFx1YzM2OVx1YzM2Y1x1YzM3MFx1YzM3Mlx1YzM3OFx1YzM3OVx1YzM3Y1x1YzM3ZFx1YzM4NFx1YzM4OFx1YzM4Y1x1YzNjMFx1YzNk''@;'; put 'put ''OFx1YzNkOVx1YzNkY1x1YzNkZlx1YzNlMFx1YzNlMlx1YzNlOFx1YzNlOVx1YzNlZFx1YzNmNFx1YzNmNVx1YzNmOFx1YzQwOFx1YzQxMFx1YzQyNFx1YzQyY1x1YzQzMFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4OV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTg5XVtwXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoSVtfWzE4OV1bcF1dPTQ4Mzg0K3AsYls0ODM4NCtwXT1fWzE4OV1bcF0pO2ZvcihfWzE5MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQzOFx1ZDQzOVx1ZDQzYVx1ZDQzYlx1ZDQzY1x1ZDQzZFx1ZDQz''@;'; put 'put ''ZVx1ZDQzZlx1ZDQ0MVx1ZDQ0Mlx1ZDQ0M1x1ZDQ0NVx1ZDQ0Nlx1ZDQ0N1x1ZDQ0OFx1ZDQ0OVx1ZDQ0YVx1ZDQ0Ylx1ZDQ0Y1x1ZDQ0ZFx1ZDQ0ZVx1ZDQ0Zlx1ZDQ1MFx1ZDQ1MVx1ZDQ1Mlx1ZDQ1M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQ1NFx1ZDQ1NVx1''@;'; put 'put ''ZDQ1Nlx1ZDQ1N1x1ZDQ1OFx1ZDQ1OVx1ZDQ1YVx1ZDQ1Ylx1ZDQ1ZFx1ZDQ1ZVx1ZDQ1Zlx1ZDQ2MVx1ZDQ2Mlx1ZDQ2M1x1ZDQ2NVx1ZDQ2Nlx1ZDQ2N1x1ZDQ2OFx1ZDQ2OVx1ZDQ2YVx1ZDQ2Ylx1ZDQ2Y1x1ZDQ2ZVx1ZDQ3MFx1ZDQ3MVx1ZDQ3Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZDQ3M1x1ZDQ3NFx1ZDQ3NVx1ZDQ3Nlx1ZDQ3N1x1ZDQ3YVx1ZDQ3Ylx1ZDQ3ZFx1ZDQ3ZVx1ZDQ4MVx1ZDQ4M1x1ZDQ4NFx1ZDQ4NVx1ZDQ4Nlx1ZDQ4N1x1ZDQ4YVx1ZDQ4Y1x1ZDQ4ZVx1ZDQ4Zlx1ZDQ5MFx1ZDQ5MVx1ZDQ5Mlx1ZDQ5M1x1ZDQ5NVx1ZDQ5Nlx1''@;'; put 'put ''ZDQ5N1x1ZDQ5OFx1ZDQ5OVx1ZDQ5YVx1ZDQ5Ylx1ZDQ5Y1x1ZDQ5ZFx1YzQzNFx1YzQzY1x1YzQzZFx1YzQ0OFx1YzQ2NFx1YzQ2NVx1YzQ2OFx1YzQ2Y1x1YzQ3NFx1YzQ3NVx1YzQ3OVx1YzQ4MFx1YzQ5NFx1YzQ5Y1x1YzRiOFx1YzRiY1x1YzRlOVx1YzRmMFx1YzRmMVx1YzRmNFx1YzRm''@;'; put 'put ''OFx1YzRmYVx1YzRmZlx1YzUwMFx1YzUwMVx1YzUwY1x1YzUxMFx1YzUxNFx1YzUxY1x1YzUyOFx1YzUyOVx1YzUyY1x1YzUzMFx1YzUzOFx1YzUzOVx1YzUzYlx1YzUzZFx1YzU0NFx1YzU0NVx1YzU0OFx1YzU0OVx1YzU0YVx1YzU0Y1x1YzU0ZFx1YzU0ZVx1YzU1M1x1YzU1NFx1YzU1NVx1''@;'; put 'put ''YzU1N1x1YzU1OFx1YzU1OVx1YzU1ZFx1YzU1ZVx1YzU2MFx1YzU2MVx1YzU2NFx1YzU2OFx1YzU3MFx1YzU3MVx1YzU3M1x1YzU3NFx1YzU3NVx1YzU3Y1x1YzU3ZFx1YzU4MFx1YzU4NFx1YzU4N1x1YzU4Y1x1YzU4ZFx1YzU4Zlx1YzU5MVx1YzU5NVx1YzU5N1x1YzU5OFx1YzU5Y1x1YzVh''@;'; put 'put ''MFx1YzVhOVx1YzViNFx1YzViNVx1YzViOFx1YzViOVx1YzViYlx1YzViY1x1YzViZFx1YzViZVx1YzVjNFx1YzVjNVx1YzVjNlx1YzVjN1x1YzVjOFx1YzVjOVx1YzVjYVx1YzVjY1x1YzVjZVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5MF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTkw''@;'; put 'put ''XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5MF1bcF1dPTQ4NjQwK3AsYls0ODY0MCtwXT1fWzE5MF1bcF0pO2ZvcihfWzE5MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQ5ZVx1ZDQ5Zlx1ZDRhMFx1ZDRhMVx1ZDRh''@;'; put 'put ''Mlx1ZDRhM1x1ZDRhNFx1ZDRhNVx1ZDRhNlx1ZDRhN1x1ZDRhOFx1ZDRhYVx1ZDRhYlx1ZDRhY1x1ZDRhZFx1ZDRhZVx1ZDRhZlx1ZDRiMFx1ZDRiMVx1ZDRiMlx1ZDRiM1x1ZDRiNFx1ZDRiNVx1ZDRiNlx1ZDRiN1x1ZDRiOFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZDRiOVx1ZDRiYVx1ZDRiYlx1ZDRiY1x1ZDRiZFx1ZDRiZVx1ZDRiZlx1ZDRjMFx1ZDRjMVx1ZDRjMlx1ZDRjM1x1ZDRjNFx1ZDRjNVx1ZDRjNlx1ZDRjN1x1ZDRjOFx1ZDRjOVx1ZDRjYVx1ZDRjYlx1ZDRjZFx1ZDRjZVx1ZDRjZlx1ZDRkMVx1ZDRkMlx1ZDRkM1x1ZDRkNVx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDRkNlx1ZDRkN1x1ZDRkOFx1ZDRkOVx1ZDRkYVx1ZDRkYlx1ZDRkZFx1ZDRkZVx1ZDRlMFx1ZDRlMVx1ZDRlMlx1ZDRlM1x1ZDRlNFx1ZDRlNVx1ZDRlNlx1ZDRlN1x1ZDRlOVx1ZDRlYVx1ZDRlYlx1ZDRlZFx1ZDRlZVx1ZDRlZlx1ZDRmMVx1''@;'; put 'put ''ZDRmMlx1ZDRmM1x1ZDRmNFx1ZDRmNVx1ZDRmNlx1ZDRmN1x1ZDRmOVx1ZDRmYVx1ZDRmY1x1YzVkMFx1YzVkMVx1YzVkNFx1YzVkOFx1YzVlMFx1YzVlMVx1YzVlM1x1YzVlNVx1YzVlY1x1YzVlZFx1YzVlZVx1YzVmMFx1YzVmNFx1YzVmNlx1YzVmN1x1YzVmY1x1YzVmZFx1YzVmZVx1YzVm''@;'; put 'put ''Zlx1YzYwMFx1YzYwMVx1YzYwNVx1YzYwNlx1YzYwN1x1YzYwOFx1YzYwY1x1YzYxMFx1YzYxOFx1YzYxOVx1YzYxYlx1YzYxY1x1YzYyNFx1YzYyNVx1YzYyOFx1YzYyY1x1YzYyZFx1YzYyZVx1YzYzMFx1YzYzM1x1YzYzNFx1YzYzNVx1YzYzN1x1YzYzOVx1YzYzYlx1YzY0MFx1YzY0MVx1''@;'; put 'put ''YzY0NFx1YzY0OFx1YzY1MFx1YzY1MVx1YzY1M1x1YzY1NFx1YzY1NVx1YzY1Y1x1YzY1ZFx1YzY2MFx1YzY2Y1x1YzY2Zlx1YzY3MVx1YzY3OFx1YzY3OVx1YzY3Y1x1YzY4MFx1YzY4OFx1YzY4OVx1YzY4Ylx1YzY4ZFx1YzY5NFx1YzY5NVx1YzY5OFx1YzY5Y1x1YzZhNFx1YzZhNVx1YzZh''@;'; put 'put ''N1x1YzZhOVx1YzZiMFx1YzZiMVx1YzZiNFx1YzZiOFx1YzZiOVx1YzZiYVx1YzZjMFx1YzZjMVx1YzZjM1x1YzZjNVx1YzZjY1x1YzZjZFx1YzZkMFx1YzZkNFx1YzZkY1x1YzZkZFx1YzZlMFx1YzZlMVx1YzZlOFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5MV0ubGVuZ3RoOysrcCk2''@;'; put 'put ''NTUzMyE9PV9bMTkxXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5MV1bcF1dPTQ4ODk2K3AsYls0ODg5NitwXT1fWzE5MV1bcF0pO2ZvcihfWzE5Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDRmZVx1ZDRmZlx1ZDUw''@;'; put 'put ''MFx1ZDUwMVx1ZDUwMlx1ZDUwM1x1ZDUwNVx1ZDUwNlx1ZDUwN1x1ZDUwOVx1ZDUwYVx1ZDUwYlx1ZDUwZFx1ZDUwZVx1ZDUwZlx1ZDUxMFx1ZDUxMVx1ZDUxMlx1ZDUxM1x1ZDUxNlx1ZDUxOFx1ZDUxOVx1ZDUxYVx1ZDUxYlx1ZDUxY1x1ZDUxZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZDUxZVx1ZDUxZlx1ZDUyMFx1ZDUyMVx1ZDUyMlx1ZDUyM1x1ZDUyNFx1ZDUyNVx1ZDUyNlx1ZDUyN1x1ZDUyOFx1ZDUyOVx1ZDUyYVx1ZDUyYlx1ZDUyY1x1ZDUyZFx1ZDUyZVx1ZDUyZlx1ZDUzMFx1ZDUzMVx1ZDUzMlx1ZDUzM1x1ZDUzNFx1ZDUzNVx1ZDUzNlx1ZDUz''@;'; put 'put ''N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDUzOFx1ZDUzOVx1ZDUzYVx1ZDUzYlx1ZDUzZVx1ZDUzZlx1ZDU0MVx1ZDU0Mlx1ZDU0M1x1ZDU0NVx1ZDU0Nlx1ZDU0N1x1ZDU0OFx1ZDU0OVx1ZDU0YVx1ZDU0Ylx1ZDU0ZVx1ZDU1MFx1ZDU1Mlx1ZDU1M1x1ZDU1NFx1''@;'; put 'put ''ZDU1NVx1ZDU1Nlx1ZDU1N1x1ZDU1YVx1ZDU1Ylx1ZDU1ZFx1ZDU1ZVx1ZDU1Zlx1ZDU2MVx1ZDU2Mlx1ZDU2M1x1YzZlOVx1YzZlY1x1YzZmMFx1YzZmOFx1YzZmOVx1YzZmZFx1YzcwNFx1YzcwNVx1YzcwOFx1YzcwY1x1YzcxNFx1YzcxNVx1YzcxN1x1YzcxOVx1YzcyMFx1YzcyMVx1Yzcy''@;'; put 'put ''NFx1YzcyOFx1YzczMFx1YzczMVx1YzczM1x1YzczNVx1YzczN1x1YzczY1x1YzczZFx1Yzc0MFx1Yzc0NFx1Yzc0YVx1Yzc0Y1x1Yzc0ZFx1Yzc0Zlx1Yzc1MVx1Yzc1Mlx1Yzc1M1x1Yzc1NFx1Yzc1NVx1Yzc1Nlx1Yzc1N1x1Yzc1OFx1Yzc1Y1x1Yzc2MFx1Yzc2OFx1Yzc2Ylx1Yzc3NFx1''@;'; put 'put ''Yzc3NVx1Yzc3OFx1Yzc3Y1x1Yzc3ZFx1Yzc3ZVx1Yzc4M1x1Yzc4NFx1Yzc4NVx1Yzc4N1x1Yzc4OFx1Yzc4OVx1Yzc4YVx1Yzc4ZVx1Yzc5MFx1Yzc5MVx1Yzc5NFx1Yzc5Nlx1Yzc5N1x1Yzc5OFx1Yzc5YVx1YzdhMFx1YzdhMVx1YzdhM1x1YzdhNFx1YzdhNVx1YzdhNlx1YzdhY1x1Yzdh''@;'; put 'put ''ZFx1YzdiMFx1YzdiNFx1YzdiY1x1YzdiZFx1YzdiZlx1YzdjMFx1YzdjMVx1YzdjOFx1YzdjOVx1YzdjY1x1YzdjZVx1YzdkMFx1YzdkOFx1YzdkZFx1YzdlNFx1YzdlOFx1YzdlY1x1YzgwMFx1YzgwMVx1YzgwNFx1YzgwOFx1YzgwYVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5Ml0u''@;'; put 'put ''bGVuZ3RoOysrcCk2NTUzMyE9PV9bMTkyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5Ml1bcF1dPTQ5MTUyK3AsYls0OTE1MitwXT1fWzE5Ml1bcF0pO2ZvcihfWzE5M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDU2''@;'; put 'put ''NFx1ZDU2Nlx1ZDU2N1x1ZDU2YVx1ZDU2Y1x1ZDU2ZVx1ZDU2Zlx1ZDU3MFx1ZDU3MVx1ZDU3Mlx1ZDU3M1x1ZDU3Nlx1ZDU3N1x1ZDU3OVx1ZDU3YVx1ZDU3Ylx1ZDU3ZFx1ZDU3ZVx1ZDU3Zlx1ZDU4MFx1ZDU4MVx1ZDU4Mlx1ZDU4M1x1ZDU4Nlx1ZDU4YVx1ZDU4Ylx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDU4Y1x1ZDU4ZFx1ZDU4ZVx1ZDU4Zlx1ZDU5MVx1ZDU5Mlx1ZDU5M1x1ZDU5NFx1ZDU5NVx1ZDU5Nlx1ZDU5N1x1ZDU5OFx1ZDU5OVx1ZDU5YVx1ZDU5Ylx1ZDU5Y1x1ZDU5ZFx1ZDU5ZVx1ZDU5Zlx1ZDVhMFx1ZDVhMVx1ZDVhMlx1ZDVhM1x1ZDVh''@;'; put 'put ''NFx1ZDVhNlx1ZDVhN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDVhOFx1ZDVhOVx1ZDVhYVx1ZDVhYlx1ZDVhY1x1ZDVhZFx1ZDVhZVx1ZDVhZlx1ZDViMFx1ZDViMVx1ZDViMlx1ZDViM1x1ZDViNFx1ZDViNVx1ZDViNlx1ZDViN1x1ZDViOFx1ZDViOVx1ZDViYVx1''@;'; put 'put ''ZDViYlx1ZDViY1x1ZDViZFx1ZDViZVx1ZDViZlx1ZDVjMFx1ZDVjMVx1ZDVjMlx1ZDVjM1x1ZDVjNFx1ZDVjNVx1ZDVjNlx1ZDVjN1x1YzgxMFx1YzgxMVx1YzgxM1x1YzgxNVx1YzgxNlx1YzgxY1x1YzgxZFx1YzgyMFx1YzgyNFx1YzgyY1x1YzgyZFx1YzgyZlx1YzgzMVx1YzgzOFx1Yzgz''@;'; put 'put ''Y1x1Yzg0MFx1Yzg0OFx1Yzg0OVx1Yzg0Y1x1Yzg0ZFx1Yzg1NFx1Yzg3MFx1Yzg3MVx1Yzg3NFx1Yzg3OFx1Yzg3YVx1Yzg4MFx1Yzg4MVx1Yzg4M1x1Yzg4NVx1Yzg4Nlx1Yzg4N1x1Yzg4Ylx1Yzg4Y1x1Yzg4ZFx1Yzg5NFx1Yzg5ZFx1Yzg5Zlx1YzhhMVx1YzhhOFx1YzhiY1x1YzhiZFx1''@;'; put 'put ''YzhjNFx1YzhjOFx1YzhjY1x1YzhkNFx1YzhkNVx1YzhkN1x1YzhkOVx1YzhlMFx1YzhlMVx1YzhlNFx1YzhmNVx1YzhmY1x1YzhmZFx1YzkwMFx1YzkwNFx1YzkwNVx1YzkwNlx1YzkwY1x1YzkwZFx1YzkwZlx1YzkxMVx1YzkxOFx1YzkyY1x1YzkzNFx1Yzk1MFx1Yzk1MVx1Yzk1NFx1Yzk1''@;'; put 'put ''OFx1Yzk2MFx1Yzk2MVx1Yzk2M1x1Yzk2Y1x1Yzk3MFx1Yzk3NFx1Yzk3Y1x1Yzk4OFx1Yzk4OVx1Yzk4Y1x1Yzk5MFx1Yzk5OFx1Yzk5OVx1Yzk5Ylx1Yzk5ZFx1YzljMFx1YzljMVx1YzljNFx1YzljN1x1YzljOFx1YzljYVx1YzlkMFx1YzlkMVx1YzlkM1x1ZmZmZCIuc3BsaXQoIiIpLHA9''@;'; put 'put ''MDtwIT1fWzE5M10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTkzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5M11bcF1dPTQ5NDA4K3AsYls0OTQwOCtwXT1fWzE5M11bcF0pO2ZvcihfWzE5NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZDVjYVx1ZDVjYlx1ZDVjZFx1ZDVjZVx1ZDVjZlx1ZDVkMVx1ZDVkM1x1ZDVkNFx1ZDVkNVx1ZDVkNlx1ZDVkN1x1ZDVkYVx1ZDVkY1x1ZDVkZVx1ZDVkZlx1ZDVlMFx1ZDVlMVx1ZDVlMlx1ZDVlM1x1ZDVlNlx1ZDVlN1x1ZDVlOVx1ZDVlYVx1ZDVlYlx1ZDVlZFx1ZDVlZVx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDVlZlx1ZDVmMFx1ZDVmMVx1ZDVmMlx1ZDVmM1x1ZDVmNlx1ZDVmOFx1ZDVmYVx1ZDVmYlx1ZDVmY1x1ZDVmZFx1ZDVmZVx1ZDVmZlx1ZDYwMlx1ZDYwM1x1ZDYwNVx1ZDYwNlx1ZDYwN1x1ZDYwOVx1ZDYwYVx1ZDYwYlx1ZDYw''@;'; put 'put ''Y1x1ZDYwZFx1ZDYwZVx1ZDYwZlx1ZDYxMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDYxNlx1ZDYxN1x1ZDYxOFx1ZDYxOVx1ZDYxYVx1ZDYxYlx1ZDYxZFx1ZDYxZVx1ZDYxZlx1ZDYyMVx1ZDYyMlx1ZDYyM1x1ZDYyNVx1ZDYyNlx1ZDYyN1x1ZDYyOFx1ZDYyOVx1''@;'; put 'put ''ZDYyYVx1ZDYyYlx1ZDYyY1x1ZDYyZVx1ZDYyZlx1ZDYzMFx1ZDYzMVx1ZDYzMlx1ZDYzM1x1ZDYzNFx1ZDYzNVx1ZDYzNlx1ZDYzN1x1ZDYzYVx1ZDYzYlx1YzlkNVx1YzlkNlx1YzlkOVx1YzlkYVx1YzlkY1x1YzlkZFx1YzllMFx1YzllMlx1YzllNFx1YzllN1x1YzllY1x1YzllZFx1Yzll''@;'; put 'put ''Zlx1YzlmMFx1YzlmMVx1YzlmOFx1YzlmOVx1YzlmY1x1Y2EwMFx1Y2EwOFx1Y2EwOVx1Y2EwYlx1Y2EwY1x1Y2EwZFx1Y2ExNFx1Y2ExOFx1Y2EyOVx1Y2E0Y1x1Y2E0ZFx1Y2E1MFx1Y2E1NFx1Y2E1Y1x1Y2E1ZFx1Y2E1Zlx1Y2E2MFx1Y2E2MVx1Y2E2OFx1Y2E3ZFx1Y2E4NFx1Y2E5OFx1''@;'; put 'put ''Y2FiY1x1Y2FiZFx1Y2FjMFx1Y2FjNFx1Y2FjY1x1Y2FjZFx1Y2FjZlx1Y2FkMVx1Y2FkM1x1Y2FkOFx1Y2FkOVx1Y2FlMFx1Y2FlY1x1Y2FmNFx1Y2IwOFx1Y2IxMFx1Y2IxNFx1Y2IxOFx1Y2IyMFx1Y2IyMVx1Y2I0MVx1Y2I0OFx1Y2I0OVx1Y2I0Y1x1Y2I1MFx1Y2I1OFx1Y2I1OVx1Y2I1''@;'; put 'put ''ZFx1Y2I2NFx1Y2I3OFx1Y2I3OVx1Y2I5Y1x1Y2JiOFx1Y2JkNFx1Y2JlNFx1Y2JlN1x1Y2JlOVx1Y2MwY1x1Y2MwZFx1Y2MxMFx1Y2MxNFx1Y2MxY1x1Y2MxZFx1Y2MyMVx1Y2MyMlx1Y2MyN1x1Y2MyOFx1Y2MyOVx1Y2MyY1x1Y2MyZVx1Y2MzMFx1Y2MzOFx1Y2MzOVx1Y2MzYlx1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLHA9MDtwIT1fWzE5NF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTk0XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5NF1bcF1dPTQ5NjY0K3AsYls0OTY2NCtwXT1fWzE5NF1bcF0pO2ZvcihfWzE5NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDYzZFx1ZDYzZVx1ZDYzZlx1ZDY0MVx1ZDY0Mlx1ZDY0M1x1ZDY0NFx1ZDY0Nlx1ZDY0N1x1ZDY0YVx1ZDY0Y1x1ZDY0ZVx1ZDY0Zlx1ZDY1MFx1ZDY1Mlx1ZDY1M1x1ZDY1Nlx1ZDY1N1x1ZDY1OVx1ZDY1YVx1ZDY1Ylx1ZDY1ZFx1ZDY1ZVx1ZDY1Zlx1''@;'; put 'put ''ZDY2MFx1ZDY2MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDY2Mlx1ZDY2M1x1ZDY2NFx1ZDY2NVx1ZDY2Nlx1ZDY2OFx1ZDY2YVx1ZDY2Ylx1ZDY2Y1x1ZDY2ZFx1ZDY2ZVx1ZDY2Zlx1ZDY3Mlx1ZDY3M1x1ZDY3NVx1ZDY3Nlx1ZDY3N1x1ZDY3OFx1ZDY3OVx1ZDY3''@;'; put 'put ''YVx1ZDY3Ylx1ZDY3Y1x1ZDY3ZFx1ZDY3ZVx1ZDY3Zlx1ZDY4MFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDY4MVx1ZDY4Mlx1ZDY4NFx1ZDY4Nlx1ZDY4N1x1ZDY4OFx1ZDY4OVx1ZDY4YVx1ZDY4Ylx1ZDY4ZVx1ZDY4Zlx1ZDY5MVx1ZDY5Mlx1ZDY5M1x1ZDY5NVx1''@;'; put 'put ''ZDY5Nlx1ZDY5N1x1ZDY5OFx1ZDY5OVx1ZDY5YVx1ZDY5Ylx1ZDY5Y1x1ZDY5ZVx1ZDZhMFx1ZDZhMlx1ZDZhM1x1ZDZhNFx1ZDZhNVx1ZDZhNlx1ZDZhN1x1ZDZhOVx1ZDZhYVx1Y2MzY1x1Y2MzZFx1Y2MzZVx1Y2M0NFx1Y2M0NVx1Y2M0OFx1Y2M0Y1x1Y2M1NFx1Y2M1NVx1Y2M1N1x1Y2M1''@;'; put 'put ''OFx1Y2M1OVx1Y2M2MFx1Y2M2NFx1Y2M2Nlx1Y2M2OFx1Y2M3MFx1Y2M3NVx1Y2M5OFx1Y2M5OVx1Y2M5Y1x1Y2NhMFx1Y2NhOFx1Y2NhOVx1Y2NhYlx1Y2NhY1x1Y2NhZFx1Y2NiNFx1Y2NiNVx1Y2NiOFx1Y2NiY1x1Y2NjNFx1Y2NjNVx1Y2NjN1x1Y2NjOVx1Y2NkMFx1Y2NkNFx1Y2NlNFx1''@;'; put 'put ''Y2NlY1x1Y2NmMFx1Y2QwMVx1Y2QwOFx1Y2QwOVx1Y2QwY1x1Y2QxMFx1Y2QxOFx1Y2QxOVx1Y2QxYlx1Y2QxZFx1Y2QyNFx1Y2QyOFx1Y2QyY1x1Y2QzOVx1Y2Q1Y1x1Y2Q2MFx1Y2Q2NFx1Y2Q2Y1x1Y2Q2ZFx1Y2Q2Zlx1Y2Q3MVx1Y2Q3OFx1Y2Q4OFx1Y2Q5NFx1Y2Q5NVx1Y2Q5OFx1Y2Q5''@;'; put 'put ''Y1x1Y2RhNFx1Y2RhNVx1Y2RhN1x1Y2RhOVx1Y2RiMFx1Y2RjNFx1Y2RjY1x1Y2RkMFx1Y2RlOFx1Y2RlY1x1Y2RmMFx1Y2RmOFx1Y2RmOVx1Y2RmYlx1Y2RmZFx1Y2UwNFx1Y2UwOFx1Y2UwY1x1Y2UxNFx1Y2UxOVx1Y2UyMFx1Y2UyMVx1Y2UyNFx1Y2UyOFx1Y2UzMFx1Y2UzMVx1Y2UzM1x1''@;'; put 'put ''Y2UzNVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5NV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTk1XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5NV1bcF1dPTQ5OTIwK3AsYls0OTkyMCtwXT1fWzE5NV1bcF0pO2ZvcihfWzE5Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDZhYlx1ZDZhZFx1ZDZhZVx1ZDZhZlx1ZDZiMVx1ZDZiMlx1ZDZiM1x1ZDZiNFx1ZDZiNVx1ZDZiNlx1ZDZiN1x1ZDZiOFx1ZDZiYVx1ZDZiY1x1ZDZiZFx1ZDZiZVx1ZDZiZlx1ZDZjMFx1ZDZjMVx1ZDZjMlx1ZDZjM1x1ZDZjNlx1''@;'; put 'put ''ZDZjN1x1ZDZjOVx1ZDZjYVx1ZDZjYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDZjZFx1ZDZjZVx1ZDZjZlx1ZDZkMFx1ZDZkMlx1ZDZkM1x1ZDZkNVx1ZDZkNlx1ZDZkOFx1ZDZkYVx1ZDZkYlx1ZDZkY1x1ZDZkZFx1ZDZkZVx1ZDZkZlx1ZDZlMVx1ZDZlMlx1ZDZl''@;'; put 'put ''M1x1ZDZlNVx1ZDZlNlx1ZDZlN1x1ZDZlOVx1ZDZlYVx1ZDZlYlx1ZDZlY1x1ZDZlZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDZlZVx1ZDZlZlx1ZDZmMVx1ZDZmMlx1ZDZmM1x1ZDZmNFx1ZDZmNlx1ZDZmN1x1ZDZmOFx1ZDZmOVx1ZDZmYVx1ZDZmYlx1ZDZmZVx1''@;'; put 'put ''ZDZmZlx1ZDcwMVx1ZDcwMlx1ZDcwM1x1ZDcwNVx1ZDcwNlx1ZDcwN1x1ZDcwOFx1ZDcwOVx1ZDcwYVx1ZDcwYlx1ZDcwY1x1ZDcwZFx1ZDcwZVx1ZDcwZlx1ZDcxMFx1ZDcxMlx1ZDcxM1x1ZDcxNFx1Y2U1OFx1Y2U1OVx1Y2U1Y1x1Y2U1Zlx1Y2U2MFx1Y2U2MVx1Y2U2OFx1Y2U2OVx1Y2U2''@;'; put 'put ''Ylx1Y2U2ZFx1Y2U3NFx1Y2U3NVx1Y2U3OFx1Y2U3Y1x1Y2U4NFx1Y2U4NVx1Y2U4N1x1Y2U4OVx1Y2U5MFx1Y2U5MVx1Y2U5NFx1Y2U5OFx1Y2VhMFx1Y2VhMVx1Y2VhM1x1Y2VhNFx1Y2VhNVx1Y2VhY1x1Y2VhZFx1Y2VjMVx1Y2VlNFx1Y2VlNVx1Y2VlOFx1Y2VlYlx1Y2VlY1x1Y2VmNFx1''@;'; put 'put ''Y2VmNVx1Y2VmN1x1Y2VmOFx1Y2VmOVx1Y2YwMFx1Y2YwMVx1Y2YwNFx1Y2YwOFx1Y2YxMFx1Y2YxMVx1Y2YxM1x1Y2YxNVx1Y2YxY1x1Y2YyMFx1Y2YyNFx1Y2YyY1x1Y2YyZFx1Y2YyZlx1Y2YzMFx1Y2YzMVx1Y2YzOFx1Y2Y1NFx1Y2Y1NVx1Y2Y1OFx1Y2Y1Y1x1Y2Y2NFx1Y2Y2NVx1Y2Y2''@;'; put 'put ''N1x1Y2Y2OVx1Y2Y3MFx1Y2Y3MVx1Y2Y3NFx1Y2Y3OFx1Y2Y4MFx1Y2Y4NVx1Y2Y4Y1x1Y2ZhMVx1Y2ZhOFx1Y2ZiMFx1Y2ZjNFx1Y2ZlMFx1Y2ZlMVx1Y2ZlNFx1Y2ZlOFx1Y2ZmMFx1Y2ZmMVx1Y2ZmM1x1Y2ZmNVx1Y2ZmY1x1ZDAwMFx1ZDAwNFx1ZDAxMVx1ZDAxOFx1ZDAyZFx1ZDAzNFx1''@;'; put 'put ''ZDAzNVx1ZDAzOFx1ZDAzY1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5Nl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTk2XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5Nl1bcF1dPTUwMTc2K3AsYls1MDE3NitwXT1fWzE5Nl1bcF0pO2ZvcihfWzE5N109Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDcxNVx1ZDcxNlx1ZDcxN1x1ZDcxYVx1ZDcxYlx1ZDcxZFx1ZDcxZVx1ZDcxZlx1ZDcyMVx1ZDcyMlx1ZDcyM1x1ZDcyNFx1ZDcyNVx1ZDcyNlx1ZDcyN1x1ZDcyYVx1ZDcyY1x1ZDcyZVx1ZDcyZlx1ZDczMFx1''@;'; put 'put ''ZDczMVx1ZDczMlx1ZDczM1x1ZDczNlx1ZDczN1x1ZDczOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDczYVx1ZDczYlx1ZDczZFx1ZDczZVx1ZDczZlx1ZDc0MFx1ZDc0MVx1ZDc0Mlx1ZDc0M1x1ZDc0NVx1ZDc0Nlx1ZDc0OFx1ZDc0YVx1ZDc0Ylx1ZDc0Y1x1ZDc0''@;'; put 'put ''ZFx1ZDc0ZVx1ZDc0Zlx1ZDc1Mlx1ZDc1M1x1ZDc1NVx1ZDc1YVx1ZDc1Ylx1ZDc1Y1x1ZDc1ZFx1ZDc1ZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDc1Zlx1ZDc2Mlx1ZDc2NFx1ZDc2Nlx1ZDc2N1x1ZDc2OFx1ZDc2YVx1ZDc2Ylx1ZDc2ZFx1ZDc2ZVx1ZDc2Zlx1''@;'; put 'put ''ZDc3MVx1ZDc3Mlx1ZDc3M1x1ZDc3NVx1ZDc3Nlx1ZDc3N1x1ZDc3OFx1ZDc3OVx1ZDc3YVx1ZDc3Ylx1ZDc3ZVx1ZDc3Zlx1ZDc4MFx1ZDc4Mlx1ZDc4M1x1ZDc4NFx1ZDc4NVx1ZDc4Nlx1ZDc4N1x1ZDc4YVx1ZDc4Ylx1ZDA0NFx1ZDA0NVx1ZDA0N1x1ZDA0OVx1ZDA1MFx1ZDA1NFx1ZDA1''@;'; put 'put ''OFx1ZDA2MFx1ZDA2Y1x1ZDA2ZFx1ZDA3MFx1ZDA3NFx1ZDA3Y1x1ZDA3ZFx1ZDA4MVx1ZDBhNFx1ZDBhNVx1ZDBhOFx1ZDBhY1x1ZDBiNFx1ZDBiNVx1ZDBiN1x1ZDBiOVx1ZDBjMFx1ZDBjMVx1ZDBjNFx1ZDBjOFx1ZDBjOVx1ZDBkMFx1ZDBkMVx1ZDBkM1x1ZDBkNFx1ZDBkNVx1ZDBkY1x1''@;'; put 'put ''ZDBkZFx1ZDBlMFx1ZDBlNFx1ZDBlY1x1ZDBlZFx1ZDBlZlx1ZDBmMFx1ZDBmMVx1ZDBmOFx1ZDEwZFx1ZDEzMFx1ZDEzMVx1ZDEzNFx1ZDEzOFx1ZDEzYVx1ZDE0MFx1ZDE0MVx1ZDE0M1x1ZDE0NFx1ZDE0NVx1ZDE0Y1x1ZDE0ZFx1ZDE1MFx1ZDE1NFx1ZDE1Y1x1ZDE1ZFx1ZDE1Zlx1ZDE2''@;'; put 'put ''MVx1ZDE2OFx1ZDE2Y1x1ZDE3Y1x1ZDE4NFx1ZDE4OFx1ZDFhMFx1ZDFhMVx1ZDFhNFx1ZDFhOFx1ZDFiMFx1ZDFiMVx1ZDFiM1x1ZDFiNVx1ZDFiYVx1ZDFiY1x1ZDFjMFx1ZDFkOFx1ZDFmNFx1ZDFmOFx1ZDIwN1x1ZDIwOVx1ZDIxMFx1ZDIyY1x1ZDIyZFx1ZDIzMFx1ZDIzNFx1ZDIzY1x1''@;'; put 'put ''ZDIzZFx1ZDIzZlx1ZDI0MVx1ZDI0OFx1ZDI1Y1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5N10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTk3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5N11bcF1dPTUwNDMyK3AsYls1MDQzMitwXT1fWzE5N11bcF0pO2ZvcihfWzE5OF09Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDc4ZFx1ZDc4ZVx1ZDc4Zlx1ZDc5MVx1ZDc5Mlx1ZDc5M1x1ZDc5NFx1ZDc5NVx1ZDc5Nlx1ZDc5N1x1ZDc5YVx1ZDc5Y1x1ZDc5ZVx1ZDc5Zlx1ZDdhMFx1ZDdhMVx1ZDdhMlx1ZDdhM1x1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI2NFx1ZDI4MFx1ZDI4MVx1ZDI4NFx1ZDI4''@;'; put 'put ''OFx1ZDI5MFx1ZDI5MVx1ZDI5NVx1ZDI5Y1x1ZDJhMFx1ZDJhNFx1ZDJhY1x1ZDJiMVx1ZDJiOFx1ZDJiOVx1ZDJiY1x1ZDJiZlx1ZDJjMFx1ZDJjMlx1ZDJjOFx1ZDJjOVx1ZDJjYlx1ZDJkNFx1ZDJkOFx1ZDJkY1x1ZDJlNFx1ZDJlNVx1ZDJmMFx1ZDJmMVx1ZDJmNFx1ZDJmOFx1ZDMwMFx1''@;'; put 'put ''ZDMwMVx1ZDMwM1x1ZDMwNVx1ZDMwY1x1ZDMwZFx1ZDMwZVx1ZDMxMFx1ZDMxNFx1ZDMxNlx1ZDMxY1x1ZDMxZFx1ZDMxZlx1ZDMyMFx1ZDMyMVx1ZDMyNVx1ZDMyOFx1ZDMyOVx1ZDMyY1x1ZDMzMFx1ZDMzOFx1ZDMzOVx1ZDMzYlx1ZDMzY1x1ZDMzZFx1ZDM0NFx1ZDM0NVx1ZDM3Y1x1ZDM3''@;'; put 'put ''ZFx1ZDM4MFx1ZDM4NFx1ZDM4Y1x1ZDM4ZFx1ZDM4Zlx1ZDM5MFx1ZDM5MVx1ZDM5OFx1ZDM5OVx1ZDM5Y1x1ZDNhMFx1ZDNhOFx1ZDNhOVx1ZDNhYlx1ZDNhZFx1ZDNiNFx1ZDNiOFx1ZDNiY1x1ZDNjNFx1ZDNjNVx1ZDNjOFx1ZDNjOVx1ZDNkMFx1ZDNkOFx1ZDNlMVx1ZDNlM1x1ZDNlY1x1''@;'; put 'put ''ZDNlZFx1ZDNmMFx1ZDNmNFx1ZDNmY1x1ZDNmZFx1ZDNmZlx1ZDQwMVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5OF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTk4XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5OF1bcF1dPTUwNjg4K3AsYls1MDY4OCtwXT1fWzE5OF1bcF0pO2Zvcihf''@;'; put 'put ''WzE5OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQwOFx1ZDQxZFx1ZDQ0''@;'; put 'put ''MFx1ZDQ0NFx1ZDQ1Y1x1ZDQ2MFx1ZDQ2NFx1ZDQ2ZFx1ZDQ2Zlx1ZDQ3OFx1ZDQ3OVx1ZDQ3Y1x1ZDQ3Zlx1ZDQ4MFx1ZDQ4Mlx1ZDQ4OFx1ZDQ4OVx1ZDQ4Ylx1ZDQ4ZFx1ZDQ5NFx1ZDRhOVx1ZDRjY1x1ZDRkMFx1ZDRkNFx1ZDRkY1x1ZDRkZlx1ZDRlOFx1ZDRlY1x1ZDRmMFx1ZDRmOFx1''@;'; put 'put ''ZDRmYlx1ZDRmZFx1ZDUwNFx1ZDUwOFx1ZDUwY1x1ZDUxNFx1ZDUxNVx1ZDUxN1x1ZDUzY1x1ZDUzZFx1ZDU0MFx1ZDU0NFx1ZDU0Y1x1ZDU0ZFx1ZDU0Zlx1ZDU1MVx1ZDU1OFx1ZDU1OVx1ZDU1Y1x1ZDU2MFx1ZDU2NVx1ZDU2OFx1ZDU2OVx1ZDU2Ylx1ZDU2ZFx1ZDU3NFx1ZDU3NVx1ZDU3''@;'; put 'put ''OFx1ZDU3Y1x1ZDU4NFx1ZDU4NVx1ZDU4N1x1ZDU4OFx1ZDU4OVx1ZDU5MFx1ZDVhNVx1ZDVjOFx1ZDVjOVx1ZDVjY1x1ZDVkMFx1ZDVkMlx1ZDVkOFx1ZDVkOVx1ZDVkYlx1ZDVkZFx1ZDVlNFx1ZDVlNVx1ZDVlOFx1ZDVlY1x1ZDVmNFx1ZDVmNVx1ZDVmN1x1ZDVmOVx1ZDYwMFx1ZDYwMVx1''@;'; put 'put ''ZDYwNFx1ZDYwOFx1ZDYxMFx1ZDYxMVx1ZDYxM1x1ZDYxNFx1ZDYxNVx1ZDYxY1x1ZDYyMFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5OV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTk5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5OV1bcF1dPTUwOTQ0K3AsYls1MDk0NCtwXT1fWzE5''@;'; put 'put ''OV1bcF0pO2ZvcihfWzIwMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDYy''@;'; put 'put ''NFx1ZDYyZFx1ZDYzOFx1ZDYzOVx1ZDYzY1x1ZDY0MFx1ZDY0NVx1ZDY0OFx1ZDY0OVx1ZDY0Ylx1ZDY0ZFx1ZDY1MVx1ZDY1NFx1ZDY1NVx1ZDY1OFx1ZDY1Y1x1ZDY2N1x1ZDY2OVx1ZDY3MFx1ZDY3MVx1ZDY3NFx1ZDY4M1x1ZDY4NVx1ZDY4Y1x1ZDY4ZFx1ZDY5MFx1ZDY5NFx1ZDY5ZFx1''@;'; put 'put ''ZDY5Zlx1ZDZhMVx1ZDZhOFx1ZDZhY1x1ZDZiMFx1ZDZiOVx1ZDZiYlx1ZDZjNFx1ZDZjNVx1ZDZjOFx1ZDZjY1x1ZDZkMVx1ZDZkNFx1ZDZkN1x1ZDZkOVx1ZDZlMFx1ZDZlNFx1ZDZlOFx1ZDZmMFx1ZDZmNVx1ZDZmY1x1ZDZmZFx1ZDcwMFx1ZDcwNFx1ZDcxMVx1ZDcxOFx1ZDcxOVx1ZDcx''@;'; put 'put ''Y1x1ZDcyMFx1ZDcyOFx1ZDcyOVx1ZDcyYlx1ZDcyZFx1ZDczNFx1ZDczNVx1ZDczOFx1ZDczY1x1ZDc0NFx1ZDc0N1x1ZDc0OVx1ZDc1MFx1ZDc1MVx1ZDc1NFx1ZDc1Nlx1ZDc1N1x1ZDc1OFx1ZDc1OVx1ZDc2MFx1ZDc2MVx1ZDc2M1x1ZDc2NVx1ZDc2OVx1ZDc2Y1x1ZDc3MFx1ZDc3NFx1''@;'; put 'put ''ZDc3Y1x1ZDc3ZFx1ZDc4MVx1ZDc4OFx1ZDc4OVx1ZDc4Y1x1ZDc5MFx1ZDc5OFx1ZDc5OVx1ZDc5Ylx1ZDc5ZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwMF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjAwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwMF1bcF1dPTUxMjAwK3AsYls1''@;'; put 'put ''MTIwMCtwXT1fWzIwMF1bcF0pO2ZvcihfWzIwMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1NGYzZFx1NGY3M1x1NTA0N1x1NTBmOVx1NTJhMFx1NTNlZlx1NTQ3NVx1NTRlNVx1NTYwOVx1NWFjMVx1NWJiNlx1NjY4N1x1NjdiNlx1NjdiN1x1NjdlZlx1NmI0Y1x1NzNjMlx1NzVjMlx1N2EzY1x1ODJkYlx1ODMwNFx1ODg1N1x1ODg4OFx1OGEzNlx1OGNjOFx1OGRjZlx1''@;'; put 'put ''OGVmYlx1OGZlNlx1OTlkNVx1NTIzYlx1NTM3NFx1NTQwNFx1NjA2YVx1NjE2NFx1NmJiY1x1NzNjZlx1ODExYVx1ODliYVx1ODlkMlx1OTVhM1x1NGY4M1x1NTIwYVx1NThiZVx1NTk3OFx1NTllNlx1NWU3Mlx1NWU3OVx1NjFjN1x1NjNjMFx1Njc0Nlx1NjdlY1x1Njg3Zlx1NmY5N1x1NzY0''@;'; put 'put ''ZVx1NzcwYlx1NzhmNVx1N2EwOFx1N2FmZlx1N2MyMVx1ODA5ZFx1ODI2ZVx1ODI3MVx1OGFlYlx1OTU5M1x1NGU2Ylx1NTU5ZFx1NjZmN1x1NmUzNFx1NzhhM1x1N2FlZFx1ODQ1Ylx1ODkxMFx1ODc0ZVx1OTdhOFx1NTJkOFx1NTc0ZVx1NTgyYVx1NWQ0Y1x1NjExZlx1NjFiZVx1NjIyMVx1''@;'; put 'put ''NjU2Mlx1NjdkMVx1NmE0NFx1NmUxYlx1NzUxOFx1NzViM1x1NzZlM1x1NzdiMFx1N2QzYVx1OTBhZlx1OTQ1MVx1OTQ1Mlx1OWY5NVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwMl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjAyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwMl1bcF1d''@;'; put 'put ''PTUxNzEyK3AsYls1MTcxMitwXT1fWzIwMl1bcF0pO2ZvcihfWzIwM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTMyM1x1NWNhY1x1NzUzMlx1ODBkYlx1OTI0MFx1OTU5OFx1NTI1Ylx1NTgwOFx1NTlkY1x1NWNhMVx1NWQxN1x1NWViN1x1NWYzYVx1NWY0YVx1NjE3N1x1NmM1Zlx1NzU3YVx1NzU4Nlx1N2NlMFx1N2Q3M1x1N2RiMVx1N2Y4Y1x1ODE1NFx1ODIyMVx1''@;'; put 'put ''ODU5MVx1ODk0MVx1OGIxYlx1OTJmY1x1OTY0ZFx1OWM0N1x1NGVjYlx1NGVmN1x1NTAwYlx1NTFmMVx1NTg0Zlx1NjEzN1x1NjEzZVx1NjE2OFx1NjUzOVx1NjllYVx1NmYxMVx1NzVhNVx1NzY4Nlx1NzZkNlx1N2I4N1x1ODJhNVx1ODRjYlx1ZjkwMFx1OTNhN1x1OTU4Ylx1NTU4MFx1NWJh''@;'; put 'put ''Mlx1NTc1MVx1ZjkwMVx1N2NiM1x1N2ZiOVx1OTFiNVx1NTAyOFx1NTNiYlx1NWM0NVx1NWRlOFx1NjJkMlx1NjM2ZVx1NjRkYVx1NjRlN1x1NmUyMFx1NzBhY1x1Nzk1Ylx1OGRkZFx1OGUxZVx1ZjkwMlx1OTA3ZFx1OTI0NVx1OTJmOFx1NGU3ZVx1NGVmNlx1NTA2NVx1NWRmZVx1NWVmYVx1''@;'; put 'put ''NjEwNlx1Njk1N1x1ODE3MVx1ODY1NFx1OGU0N1x1OTM3NVx1OWEyYlx1NGU1ZVx1NTA5MVx1Njc3MFx1Njg0MFx1NTEwOVx1NTI4ZFx1NTI5Mlx1NmFhMlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwM10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjAzXVtwXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''SVtfWzIwM11bcF1dPTUxOTY4K3AsYls1MTk2OCtwXT1fWzIwM11bcF0pO2ZvcihfWzIwNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdiY1x1OTIxMFx1OWVkNFx1NTJhYlx1NjAyZlx1OGZmMlx1NTA0OFx1NjFhOVx1NjNlZFx1NjRjYVx1NjgzY1x1NmE4NFx1NmZjMFx1ODE4OFx1ODlhMVx1OTY5NFx1NTgwNVx1NzI3ZFx1NzJhY1x1NzUwNFx1N2Q3OVx1N2U2ZFx1''@;'; put 'put ''ODBhOVx1ODk4Ylx1OGI3NFx1OTA2M1x1OWQ1MVx1NjI4OVx1NmM3YVx1NmY1NFx1N2Q1MFx1N2YzYVx1OGEyM1x1NTE3Y1x1NjE0YVx1N2I5ZFx1OGIxOVx1OTI1N1x1OTM4Y1x1NGVhY1x1NGZkM1x1NTAxZVx1NTBiZVx1NTEwNlx1NTJjMVx1NTJjZFx1NTM3Zlx1NTc3MFx1NTg4M1x1NWU5''@;'; put 'put ''YVx1NWY5MVx1NjE3Nlx1NjFhY1x1NjRjZVx1NjU2Y1x1NjY2Zlx1NjZiYlx1NjZmNFx1Njg5N1x1NmQ4N1x1NzA4NVx1NzBmMVx1NzQ5Zlx1NzRhNVx1NzRjYVx1NzVkOVx1Nzg2Y1x1NzhlY1x1N2FkZlx1N2FmNlx1N2Q0NVx1N2Q5M1x1ODAxNVx1ODAzZlx1ODExYlx1ODM5Nlx1OGI2Nlx1''@;'; put 'put ''OGYxNVx1OTAxNVx1OTNlMVx1OTgwM1x1OTgzOFx1OWE1YVx1OWJlOFx1NGZjMlx1NTU1M1x1NTgzYVx1NTk1MVx1NWI2M1x1NWM0Nlx1NjBiOFx1NjIxMlx1Njg0Mlx1NjhiMFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwNF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjA0XVtwXS5jaGFy''@;'; put 'put ''Q29kZUF0KDApJiYoSVtfWzIwNF1bcF1dPTUyMjI0K3AsYls1MjIyNCtwXT1fWzIwNF1bcF0pO2ZvcihfWzIwNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjhlOFx1NmVhYVx1NzU0Y1x1NzY3OFx1NzhjZVx1N2EzZFx1N2NmYlx1N2U2Ylx1N2U3Y1x1OGEwOFx1OGFhMVx1OGMzZlx1OTY4ZVx1OWRjNFx1NTNlNFx1NTNlOVx1NTQ0YVx1NTQ3MVx1NTZmYVx1NTlkMVx1''@;'; put 'put ''NWI2NFx1NWMzYlx1NWVhYlx1NjJmN1x1NjUzN1x1NjU0NVx1NjU3Mlx1NjZhMFx1NjdhZlx1NjljMVx1NmNiZFx1NzVmY1x1NzY5MFx1Nzc3ZVx1N2EzZlx1N2Y5NFx1ODAwM1x1ODBhMVx1ODE4Zlx1ODJlNlx1ODJmZFx1ODNmMFx1ODVjMVx1ODgzMVx1ODhiNFx1OGFhNVx1ZjkwM1x1OGY5''@;'; put 'put ''Y1x1OTMyZVx1OTZjN1x1OTg2N1x1OWFkOFx1OWYxM1x1NTRlZFx1NjU5Ylx1NjZmMlx1Njg4Zlx1N2E0MFx1OGMzN1x1OWQ2MFx1NTZmMFx1NTc2NFx1NWQxMVx1NjYwNlx1NjhiMVx1NjhjZFx1NmVmZVx1NzQyOFx1ODg5ZVx1OWJlNFx1NmM2OFx1ZjkwNFx1OWFhOFx1NGY5Ylx1NTE2Y1x1''@;'; put 'put ''NTE3MVx1NTI5Zlx1NWI1NFx1NWRlNVx1NjA1MFx1NjA2ZFx1NjJmMVx1NjNhN1x1NjUzYlx1NzNkOVx1N2E3YVx1ODZhM1x1OGNhMlx1OTc4Zlx1NGUzMlx1NWJlMVx1NjIwOFx1Njc5Y1x1NzRkY1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwNV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9b''@;'; put 'put ''MjA1XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwNV1bcF1dPTUyNDgwK3AsYls1MjQ4MCtwXT1fWzIwNV1bcF0pO2ZvcihfWzIwNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzlkMVx1ODNkM1x1OGE4N1x1OGFiMlx1OGRlOFx1OTA0ZVx1OTM0Ylx1OTg0Nlx1NWVkM1x1NjllOFx1ODVmZlx1OTBlZFx1ZjkwNVx1NTFhMFx1NWI5OFx1NWJlY1x1NjE2M1x1NjhmYVx1''@;'; put 'put ''NmIzZVx1NzA0Y1x1NzQyZlx1NzRkOFx1N2JhMVx1N2Y1MFx1ODNjNVx1ODljMFx1OGNhYlx1OTVkY1x1OTkyOFx1NTIyZVx1NjA1ZFx1NjJlY1x1OTAwMlx1NGY4YVx1NTE0OVx1NTMyMVx1NThkOVx1NWVlM1x1NjZlMFx1NmQzOFx1NzA5YVx1NzJjMlx1NzNkNlx1N2I1MFx1ODBmMVx1OTQ1''@;'; put 'put ''Ylx1NTM2Nlx1NjM5Ylx1N2Y2Ylx1NGU1Nlx1NTA4MFx1NTg0YVx1NThkZVx1NjAyYVx1NjEyN1x1NjJkMFx1NjlkMFx1OWI0MVx1NWI4Zlx1N2QxOFx1ODBiMVx1OGY1Zlx1NGVhNFx1NTBkMVx1NTRhY1x1NTVhY1x1NWIwY1x1NWRhMFx1NWRlN1x1NjUyYVx1NjU0ZVx1NjgyMVx1NmE0Ylx1''@;'; put 'put ''NzJlMVx1NzY4ZVx1NzdlZlx1N2Q1ZVx1N2ZmOVx1ODFhMFx1ODU0ZVx1ODZkZlx1OGYwM1x1OGY0ZVx1OTBjYVx1OTkwM1x1OWE1NVx1OWJhYlx1NGUxOFx1NGU0NVx1NGU1ZFx1NGVjN1x1NGZmMVx1NTE3N1x1NTJmZVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwNl0ubGVuZ3RoOysr''@;'; put 'put ''cCk2NTUzMyE9PV9bMjA2XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwNl1bcF1dPTUyNzM2K3AsYls1MjczNitwXT1fWzIwNl1bcF0pO2ZvcihfWzIwN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTM0MFx1NTNlM1x1NTNlNVx1NTQ4ZVx1NTYxNFx1NTc3NVx1NTdhMlx1NWJjN1x1NWQ4N1x1NWVkMFx1NjFmY1x1NjJkOFx1NjU1MVx1NjdiOFx1NjdlOVx1NjljYlx1''@;'; put 'put ''NmI1MFx1NmJjNlx1NmJlY1x1NmM0Mlx1NmU5ZFx1NzA3OFx1NzJkN1x1NzM5Nlx1NzQwM1x1NzdiZlx1NzdlOVx1N2E3Nlx1N2Q3Zlx1ODAwOVx1ODFmY1x1ODIwNVx1ODIwYVx1ODJkZlx1ODg2Mlx1OGIzM1x1OGNmY1x1OGVjMFx1OTAxMVx1OTBiMVx1OTI2NFx1OTJiNlx1OTlkMlx1OWE0''@;'; put 'put ''NVx1OWNlOVx1OWRkN1x1OWY5Y1x1NTcwYlx1NWM0MFx1ODNjYVx1OTdhMFx1OTdhYlx1OWViNFx1NTQxYlx1N2E5OFx1N2ZhNFx1ODhkOVx1OGVjZFx1OTBlMVx1NTgwMFx1NWM0OFx1NjM5OFx1N2E5Zlx1NWJhZVx1NWYxM1x1N2E3OVx1N2FhZVx1ODI4ZVx1OGVhY1x1NTAyNlx1NTIzOFx1''@;'; put 'put ''NTJmOFx1NTM3N1x1NTcwOFx1NjJmM1x1NjM3Mlx1NmIwYVx1NmRjM1x1NzczN1x1NTNhNVx1NzM1N1x1ODU2OFx1OGU3Nlx1OTVkNVx1NjczYVx1NmFjM1x1NmY3MFx1OGE2ZFx1OGVjY1x1OTk0Ylx1ZjkwNlx1NjY3N1x1NmI3OFx1OGNiNFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIw''@;'; put 'put ''N10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjA3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwN11bcF1dPTUyOTkyK3AsYls1Mjk5MitwXT1fWzIwN11bcF0pO2ZvcihfWzIwOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWIzY1x1ZjkwN1x1NTNlYlx1NTcyZFx1NTk0ZVx1NjNjNlx1NjlmYlx1NzNlYVx1Nzg0NVx1N2FiYVx1N2FjNVx1N2NmZVx1ODQ3NVx1ODk4Zlx1''@;'; put 'put ''OGQ3M1x1OTAzNVx1OTVhOFx1NTJmYlx1NTc0N1x1NzU0N1x1N2I2MFx1ODNjY1x1OTIxZVx1ZjkwOFx1NmE1OFx1NTE0Ylx1NTI0Ylx1NTI4N1x1NjIxZlx1NjhkOFx1Njk3NVx1OTY5OVx1NTBjNVx1NTJhNFx1NTJlNFx1NjFjM1x1NjVhNFx1NjgzOVx1NjlmZlx1NzQ3ZVx1N2I0Ylx1ODJi''@;'; put 'put ''OVx1ODNlYlx1ODliMlx1OGIzOVx1OGZkMVx1OTk0OVx1ZjkwOVx1NGVjYVx1NTk5N1x1NjRkMlx1NjYxMVx1NmE4ZVx1NzQzNFx1Nzk4MVx1NzliZFx1ODJhOVx1ODg3ZVx1ODg3Zlx1ODk1Zlx1ZjkwYVx1OTMyNlx1NGYwYlx1NTNjYVx1NjAyNVx1NjI3MVx1NmM3Mlx1N2QxYVx1N2Q2Nlx1''@;'; put 'put ''NGU5OFx1NTE2Mlx1NzdkY1x1ODBhZlx1NGYwMVx1NGYwZVx1NTE3Nlx1NTE4MFx1NTVkY1x1NTY2OFx1NTczYlx1NTdmYVx1NTdmY1x1NTkxNFx1NTk0N1x1NTk5M1x1NWJjNFx1NWM5MFx1NWQwZVx1NWRmMVx1NWU3ZVx1NWZjY1x1NjI4MFx1NjVkN1x1NjVlM1x1ZmZmZCIuc3BsaXQoIiIp''@;'; put 'put ''LHA9MDtwIT1fWzIwOF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjA4XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwOF1bcF1dPTUzMjQ4K3AsYls1MzI0OCtwXT1fWzIwOF1bcF0pO2ZvcihfWzIwOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjcxZVx1NjcxZlx1Njc1ZVx1NjhjYlx1NjhjNFx1NmE1Zlx1NmIzYVx1NmMyM1x1NmM3ZFx1NmM4Mlx1NmRjN1x1NzM5OFx1''@;'; put 'put ''NzQyNlx1NzQyYVx1NzQ4Mlx1NzRhM1x1NzU3OFx1NzU3Zlx1Nzg4MVx1NzhlZlx1Nzk0MVx1Nzk0N1x1Nzk0OFx1Nzk3YVx1N2I5NVx1N2QwMFx1N2RiYVx1N2Y4OFx1ODAwNlx1ODAyZFx1ODA4Y1x1OGExOFx1OGI0Zlx1OGM0OFx1OGQ3N1x1OTMyMVx1OTMyNFx1OThlMlx1OTk1MVx1OWEw''@;'; put 'put ''ZVx1OWEwZlx1OWE2NVx1OWU5Mlx1N2RjYVx1NGY3Nlx1NTQwOVx1NjJlZVx1Njg1NFx1OTFkMVx1NTVhYlx1NTEzYVx1ZjkwYlx1ZjkwY1x1NWExY1x1NjFlNlx1ZjkwZFx1NjJjZlx1NjJmZlx1ZjkwZVx1ZjkwZlx1ZjkxMFx1ZjkxMVx1ZjkxMlx1ZjkxM1x1OTBhM1x1ZjkxNFx1ZjkxNVx1''@;'; put 'put ''ZjkxNlx1ZjkxN1x1ZjkxOFx1OGFmZVx1ZjkxOVx1ZjkxYVx1ZjkxYlx1ZjkxY1x1NjY5Nlx1ZjkxZFx1NzE1Nlx1ZjkxZVx1ZjkxZlx1OTZlM1x1ZjkyMFx1NjM0Zlx1NjM3YVx1NTM1N1x1ZjkyMVx1Njc4Zlx1Njk2MFx1NmU3M1x1ZjkyMlx1NzUzN1x1ZjkyM1x1ZjkyNFx1ZjkyNVx1ZmZm''@;'; put 'put ''ZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwOV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjA5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwOV1bcF1dPTUzNTA0K3AsYls1MzUwNCtwXT1fWzIwOV1bcF0pO2ZvcihfWzIxMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2QwZFx1ZjkyNlx1ZjkyN1x1ODg3Mlx1NTZjYVx1NWExOFx1ZjkyOFx1ZjkyOVx1ZjkyYVx1ZjkyYlx1''@;'; put 'put ''ZjkyY1x1NGU0M1x1ZjkyZFx1NTE2N1x1NTk0OFx1NjdmMFx1ODAxMFx1ZjkyZVx1NTk3M1x1NWU3NFx1NjQ5YVx1NzljYVx1NWZmNVx1NjA2Y1x1NjJjOFx1NjM3Ylx1NWJlN1x1NWJkN1x1NTJhYVx1ZjkyZlx1NTk3NFx1NWYyOVx1NjAxMlx1ZjkzMFx1ZjkzMVx1ZjkzMlx1NzQ1OVx1Zjkz''@;'; put 'put ''M1x1ZjkzNFx1ZjkzNVx1ZjkzNlx1ZjkzN1x1ZjkzOFx1OTlkMVx1ZjkzOVx1ZjkzYVx1ZjkzYlx1ZjkzY1x1ZjkzZFx1ZjkzZVx1ZjkzZlx1Zjk0MFx1Zjk0MVx1Zjk0Mlx1Zjk0M1x1NmZjM1x1Zjk0NFx1Zjk0NVx1ODFiZlx1OGZiMlx1NjBmMVx1Zjk0Nlx1Zjk0N1x1ODE2Nlx1Zjk0OFx1''@;'; put 'put ''Zjk0OVx1NWMzZlx1Zjk0YVx1Zjk0Ylx1Zjk0Y1x1Zjk0ZFx1Zjk0ZVx1Zjk0Zlx1Zjk1MFx1Zjk1MVx1NWFlOVx1OGEyNVx1Njc3Ylx1N2QxMFx1Zjk1Mlx1Zjk1M1x1Zjk1NFx1Zjk1NVx1Zjk1Nlx1Zjk1N1x1ODBmZFx1Zjk1OFx1Zjk1OVx1NWMzY1x1NmNlNVx1NTMzZlx1NmViYVx1NTkx''@;'; put 'put ''YVx1ODMzNlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxMF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjEwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxMF1bcF1dPTUzNzYwK3AsYls1Mzc2MCtwXT1fWzIxMF1bcF0pO2ZvcihfWzIxMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUzOVx1NGViNlx1NGY0Nlx1NTVhZVx1NTcxOFx1NThjN1x1NWY1Nlx1NjViN1x1''@;'; put 'put ''NjVlNlx1NmE4MFx1NmJiNVx1NmU0ZFx1NzdlZFx1N2FlZlx1N2MxZVx1N2RkZVx1ODZjYlx1ODg5Mlx1OTEzMlx1OTM1Ylx1NjRiYlx1NmZiZVx1NzM3YVx1NzViOFx1OTA1NFx1NTU1Nlx1NTc0ZFx1NjFiYVx1NjRkNFx1NjZjN1x1NmRlMVx1NmU1Ylx1NmY2ZFx1NmZiOVx1NzVmMFx1ODA0''@;'; put 'put ''M1x1ODFiZFx1ODU0MVx1ODk4M1x1OGFjN1x1OGI1YVx1OTMxZlx1NmM5M1x1NzU1M1x1N2I1NFx1OGUwZlx1OTA1ZFx1NTUxMFx1NTgwMlx1NTg1OFx1NWU2Mlx1NjIwN1x1NjQ5ZVx1NjhlMFx1NzU3Nlx1N2NkNlx1ODdiM1x1OWVlOFx1NGVlM1x1NTc4OFx1NTc2ZVx1NTkyN1x1NWMwZFx1''@;'; put 'put ''NWNiMVx1NWUzNlx1NWY4NVx1NjIzNFx1NjRlMVx1NzNiM1x1ODFmYVx1ODg4Ylx1OGNiOFx1OTY4YVx1OWVkYlx1NWI4NVx1NWZiN1x1NjBiM1x1NTAxMlx1NTIwMFx1NTIzMFx1NTcxNlx1NTgzNVx1NTg1N1x1NWMwZVx1NWM2MFx1NWNmNlx1NWQ4Ylx1NWVhNlx1NWY5Mlx1NjBiY1x1NjMx''@;'; put 'put ''MVx1NjM4OVx1NjQxN1x1Njg0M1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxMV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjExXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxMV1bcF1dPTU0MDE2K3AsYls1NDAxNitwXT1fWzIxMV1bcF0pO2ZvcihfWzIxMl09Ilx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjhmOVx1NmFjMlx1NmRkOFx1NmUyMVx1NmVkNFx1NmZlNFx1''@;'; put 'put ''NzFmZVx1NzZkY1x1Nzc3OVx1NzliMVx1N2EzYlx1ODQwNFx1ODlhOVx1OGNlZFx1OGRmM1x1OGU0OFx1OTAwM1x1OTAxNFx1OTA1M1x1OTBmZFx1OTM0ZFx1OTY3Nlx1OTdkY1x1NmJkMlx1NzAwNlx1NzI1OFx1NzJhMlx1NzM2OFx1Nzc2M1x1NzliZlx1N2JlNFx1N2U5Ylx1OGI4MFx1NThh''@;'; put 'put ''OVx1NjBjN1x1NjU2Nlx1NjVmZFx1NjZiZVx1NmM4Y1x1NzExZVx1NzFjOVx1OGM1YVx1OTgxM1x1NGU2ZFx1N2E4MVx1NGVkZFx1NTFhY1x1NTFjZFx1NTJkNVx1NTQwY1x1NjFhN1x1Njc3MVx1Njg1MFx1NjhkZlx1NmQxZVx1NmY3Y1x1NzViY1x1NzdiM1x1N2FlNVx1ODBmNFx1ODQ2M1x1''@;'; put 'put ''OTI4NVx1NTE1Y1x1NjU5N1x1Njc1Y1x1Njc5M1x1NzVkOFx1N2FjN1x1ODM3M1x1Zjk1YVx1OGM0Nlx1OTAxN1x1OTgyZFx1NWM2Zlx1ODFjMFx1ODI5YVx1OTA0MVx1OTA2Zlx1OTIwZFx1NWY5N1x1NWQ5ZFx1NmE1OVx1NzFjOFx1NzY3Ylx1N2I0OVx1ODVlNFx1OGIwNFx1OTEyN1x1OWEz''@;'; put 'put ''MFx1NTU4N1x1NjFmNlx1Zjk1Ylx1NzY2OVx1N2Y4NVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxMl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjEyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxMl1bcF1dPTU0MjcyK3AsYls1NDI3MitwXT1fWzIxMl1bcF0pO2ZvcihfWzIxM109Ilx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODYzZlx1ODdiYVx1ODhmOFx1OTA4Zlx1''@;'; put 'put ''Zjk1Y1x1NmQxYlx1NzBkOVx1NzNkZVx1N2Q2MVx1ODQzZFx1Zjk1ZFx1OTE2YVx1OTlmMVx1Zjk1ZVx1NGU4Mlx1NTM3NVx1NmIwNFx1NmIxMlx1NzAzZVx1NzIxYlx1ODYyZFx1OWUxZVx1NTI0Y1x1OGZhM1x1NWQ1MFx1NjRlNVx1NjUyY1x1NmIxNlx1NmZlYlx1N2M0M1x1N2U5Y1x1ODVj''@;'; put 'put ''ZFx1ODk2NFx1ODliZFx1NjJjOVx1ODFkOFx1ODgxZlx1NWVjYVx1NjcxN1x1NmQ2YVx1NzJmY1x1NzQwNVx1NzQ2Zlx1ODc4Mlx1OTBkZVx1NGY4Nlx1NWQwZFx1NWZhMFx1ODQwYVx1NTFiN1x1NjNhMFx1NzU2NVx1NGVhZVx1NTAwNlx1NTE2OVx1NTFjOVx1Njg4MVx1NmExMVx1N2NhZVx1''@;'; put 'put ''N2NiMVx1N2NlN1x1ODI2Zlx1OGFkMlx1OGYxYlx1OTFjZlx1NGZiNlx1NTEzN1x1NTJmNVx1NTQ0Mlx1NWVlY1x1NjE2ZVx1NjIzZVx1NjVjNVx1NmFkYVx1NmZmZVx1NzkyYVx1ODVkY1x1ODgyM1x1OTVhZFx1OWE2Mlx1OWE2YVx1OWU5N1x1OWVjZVx1NTI5Ylx1NjZjNlx1NmI3N1x1NzAx''@;'; put 'put ''ZFx1NzkyYlx1OGY2Mlx1OTc0Mlx1NjE5MFx1NjIwMFx1NjUyM1x1NmYyM1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxM10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjEzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxM11bcF1dPTU0NTI4K3AsYls1NDUyOCtwXT1fWzIxM11bcF0pO2Zv''@;'; put 'put ''cihfWzIxNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzE0OVx1NzQ4OVx1''@;'; put 'put ''N2RmNFx1ODA2Zlx1ODRlZVx1OGYyNlx1OTAyM1x1OTM0YVx1NTFiZFx1NTIxN1x1NTJhM1x1NmQwY1x1NzBjOFx1ODhjMlx1NWVjOVx1NjU4Mlx1NmJhZVx1NmZjMlx1N2MzZVx1NzM3NVx1NGVlNFx1NGYzNlx1NTZmOVx1Zjk1Zlx1NWNiYVx1NWRiYVx1NjAxY1x1NzNiMlx1N2IyZFx1N2Y5''@;'; put 'put ''YVx1N2ZjZVx1ODA0Nlx1OTAxZVx1OTIzNFx1OTZmNlx1OTc0OFx1OTgxOFx1OWY2MVx1NGY4Ylx1NmZhN1x1NzlhZVx1OTFiNFx1OTZiN1x1NTJkZVx1Zjk2MFx1NjQ4OFx1NjRjNFx1NmFkM1x1NmY1ZVx1NzAxOFx1NzIxMFx1NzZlN1x1ODAwMVx1ODYwNlx1ODY1Y1x1OGRlZlx1OGYwNVx1''@;'; put 'put ''OTczMlx1OWI2Zlx1OWRmYVx1OWU3NVx1Nzg4Y1x1Nzk3Zlx1N2RhMFx1ODNjOVx1OTMwNFx1OWU3Zlx1OWU5M1x1OGFkNlx1NThkZlx1NWYwNFx1NjcyN1x1NzAyN1x1NzRjZlx1N2M2MFx1ODA3ZVx1NTEyMVx1NzAyOFx1NzI2Mlx1NzhjYVx1OGNjMlx1OGNkYVx1OGNmNFx1OTZmN1x1NGU4''@;'; put 'put ''Nlx1NTBkYVx1NWJlZVx1NWVkNlx1NjU5OVx1NzFjZVx1NzY0Mlx1NzdhZFx1ODA0YVx1ODRmY1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxNF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjE0XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxNF1bcF1dPTU0Nzg0K3AsYls1NDc4NCtwXT1f''@;'; put 'put ''WzIxNF1bcF0pO2ZvcihfWzIxNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''OTA3Y1x1OWIyN1x1OWY4ZFx1NThkOFx1NWE0MVx1NWM2Mlx1NmExM1x1NmRkYVx1NmYwZlx1NzYzYlx1N2QyZlx1N2UzN1x1ODUxZVx1ODkzOFx1OTNlNFx1OTY0Ylx1NTI4OVx1NjVkMlx1NjdmM1x1NjliNFx1NmQ0MVx1NmU5Y1x1NzAwZlx1NzQwOVx1NzQ2MFx1NzU1OVx1NzYyNFx1Nzg2''@;'; put 'put ''Ylx1OGIyY1x1OTg1ZVx1NTE2ZFx1NjIyZVx1OTY3OFx1NGY5Nlx1NTAyYlx1NWQxOVx1NmRlYVx1N2RiOFx1OGYyYVx1NWY4Ylx1NjE0NFx1NjgxN1x1Zjk2MVx1OTY4Nlx1NTJkMlx1ODA4Ylx1NTFkY1x1NTFjY1x1Njk1ZVx1N2ExY1x1N2RiZVx1ODNmMVx1OTY3NVx1NGZkYVx1NTIyOVx1''@;'; put 'put ''NTM5OFx1NTQwZlx1NTUwZVx1NWM2NVx1NjBhN1x1Njc0ZVx1NjhhOFx1NmQ2Y1x1NzI4MVx1NzJmOFx1NzQwNlx1NzQ4M1x1Zjk2Mlx1NzVlMlx1N2M2Y1x1N2Y3OVx1N2ZiOFx1ODM4OVx1ODhjZlx1ODhlMVx1OTFjY1x1OTFkMFx1OTZlMlx1OWJjOVx1NTQxZFx1NmY3ZVx1NzFkMFx1NzQ5''@;'; put 'put ''OFx1ODVmYVx1OGVhYVx1OTZhM1x1OWM1N1x1OWU5Zlx1Njc5N1x1NmRjYlx1NzQzM1x1ODFlOFx1OTcxNlx1NzgyY1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxNV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjE1XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxNV1bcF1dPTU1MDQwK3As''@;'; put 'put ''Yls1NTA0MCtwXT1fWzIxNV1bcF0pO2ZvcihfWzIxNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1N2FjYlx1N2IyMFx1N2M5Mlx1NjQ2OVx1NzQ2YVx1NzVmMlx1NzhiY1x1NzhlOFx1OTlhY1x1OWI1NFx1OWViYlx1NWJkZVx1NWU1NVx1NmYyMFx1ODE5Y1x1ODNhYlx1OTA4OFx1NGUwN1x1NTM0ZFx1NWEyOVx1NWRkMlx1NWY0ZVx1NjE2Mlx1NjMzZFx1NjY2OVx1NjZm''@;'; put 'put ''Y1x1NmVmZlx1NmYyYlx1NzA2M1x1Nzc5ZVx1ODQyY1x1ODUxM1x1ODgzYlx1OGYxM1x1OTk0NVx1OWMzYlx1NTUxY1x1NjJiOVx1NjcyYlx1NmNhYlx1ODMwOVx1ODk2YVx1OTc3YVx1NGVhMVx1NTk4NFx1NWZkOFx1NWZkOVx1NjcxYlx1N2RiMlx1N2Y1NFx1ODI5Mlx1ODMyYlx1ODNiZFx1''@;'; put 'put ''OGYxZVx1OTA5OVx1NTdjYlx1NTliOVx1NWE5Mlx1NWJkMFx1NjYyN1x1Njc5YVx1Njg4NVx1NmJjZlx1NzE2NFx1N2Y3NVx1OGNiN1x1OGNlM1x1OTA4MVx1OWI0NVx1ODEwOFx1OGM4YVx1OTY0Y1x1OWE0MFx1OWVhNVx1NWI1Zlx1NmMxM1x1NzMxYlx1NzZmMlx1NzZkZlx1ODQwY1x1NTFh''@;'; put 'put ''YVx1ODk5M1x1NTE0ZFx1NTE5NVx1NTJjOVx1NjhjOVx1NmM5NFx1NzcwNFx1NzcyMFx1N2RiZlx1N2RlY1x1OTc2Mlx1OWViNVx1NmVjNVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxNl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjE2XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxNl1b''@;'; put 'put ''cF1dPTU1Mjk2K3AsYls1NTI5NitwXT1fWzIxNl1bcF0pO2ZvcihfWzIxN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODUxMVx1NTFhNVx1NTQwZFx1NTQ3ZFx1NjYwZVx1NjY5ZFx1NjkyN1x1NmU5Zlx1NzZiZlx1Nzc5MVx1ODMxN1x1ODRjMlx1ODc5Zlx1OTE2OVx1OTI5OFx1OWNmNFx1ODg4Mlx1NGZhZVx1NTE5Mlx1NTJkZlx1NTljNlx1NWUzZFx1NjE1NVx1NjQ3''@;'; put 'put ''OFx1NjQ3OVx1NjZhZVx1NjdkMFx1NmEyMVx1NmJjZFx1NmJkYlx1NzI1Zlx1NzI2MVx1NzQ0MVx1NzczOFx1NzdkYlx1ODAxN1x1ODJiY1x1ODMwNVx1OGIwMFx1OGIyOFx1OGM4Y1x1NjcyOFx1NmM5MFx1NzI2N1x1NzZlZVx1Nzc2Nlx1N2E0Nlx1OWRhOVx1NmI3Zlx1NmM5Mlx1NTkyMlx1''@;'; put 'put ''NjcyNlx1ODQ5OVx1NTM2Zlx1NTg5M1x1NTk5OVx1NWVkZlx1NjNjZlx1NjYzNFx1Njc3M1x1NmUzYVx1NzMyYlx1N2FkN1x1ODJkN1x1OTMyOFx1NTJkOVx1NWRlYlx1NjFhZVx1NjFjYlx1NjIwYVx1NjJjN1x1NjRhYlx1NjVlMFx1Njk1OVx1NmI2Nlx1NmJjYlx1NzEyMVx1NzNmN1x1NzU1''@;'; put 'put ''ZFx1N2U0Nlx1ODIxZVx1ODMwMlx1ODU2YVx1OGFhM1x1OGNiZlx1OTcyN1x1OWQ2MVx1NThhOFx1OWVkOFx1NTAxMVx1NTIwZVx1NTQzYlx1NTU0Zlx1NjU4N1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxN10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjE3XVtwXS5jaGFyQ29kZUF0KDAp''@;'; put 'put ''JiYoSVtfWzIxN11bcF1dPTU1NTUyK3AsYls1NTU1MitwXT1fWzIxN11bcF0pO2ZvcihfWzIxOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmM3Nlx1N2QwYVx1N2QwYlx1ODA1ZVx1ODY4YVx1OTU4MFx1OTZlZlx1NTJmZlx1NmM5NVx1NzI2OVx1NTQ3M1x1NWE5YVx1NWMzZVx1NWQ0Ylx1NWY0Y1x1NWZhZVx1NjcyYVx1NjhiNlx1Njk2M1x1NmUzY1x1NmU0NFx1Nzcw''@;'; put 'put ''OVx1N2M3M1x1N2Y4ZVx1ODU4N1x1OGIwZVx1OGZmN1x1OTc2MVx1OWVmNFx1NWNiN1x1NjBiNlx1NjEwZFx1NjFhYlx1NjU0Zlx1NjVmYlx1NjVmY1x1NmMxMVx1NmNlZlx1NzM5Zlx1NzNjOVx1N2RlMVx1OTU5NFx1NWJjNlx1ODcxY1x1OGIxMFx1NTI1ZFx1NTM1YVx1NjJjZFx1NjQwZlx1''@;'; put 'put ''NjRiMlx1NjczNFx1NmEzOFx1NmNjYVx1NzNjMFx1NzQ5ZVx1N2I5NFx1N2M5NVx1N2UxYlx1ODE4YVx1ODIzNlx1ODU4NFx1OGZlYlx1OTZmOVx1OTljMVx1NGYzNFx1NTM0YVx1NTNjZFx1NTNkYlx1NjJjY1x1NjQyY1x1NjUwMFx1NjU5MVx1NjljM1x1NmNlZVx1NmY1OFx1NzNlZFx1NzU1''@;'; put 'put ''NFx1NzYyMlx1NzZlNFx1NzZmY1x1NzhkMFx1NzhmYlx1NzkyY1x1N2Q0Nlx1ODIyY1x1ODdlMFx1OGZkNFx1OTgxMlx1OThlZlx1NTJjM1x1NjJkNFx1NjRhNVx1NmUyNFx1NmY1MVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxOF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjE4XVtwXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApJiYoSVtfWzIxOF1bcF1dPTU1ODA4K3AsYls1NTgwOCtwXT1fWzIxOF1bcF0pO2ZvcihfWzIxOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzY3Y1x1OGRjYlx1OTFiMVx1OTI2Mlx1OWFlZVx1OWI0M1x1NTAyM1x1NTA4ZFx1NTc0YVx1NTlhOFx1NWMyOFx1NWU0N1x1NWY3N1x1NjIzZlx1NjUzZVx1NjViOVx1NjVjMVx1NjYwOVx1Njc4Ylx1Njk5''@;'; put 'put ''Y1x1NmVjMlx1NzhjNVx1N2QyMVx1ODBhYVx1ODE4MFx1ODIyYlx1ODJiM1x1ODRhMVx1ODY4Y1x1OGEyYVx1OGIxN1x1OTBhNlx1OTYzMlx1OWY5MFx1NTAwZFx1NGZmM1x1Zjk2M1x1NTdmOVx1NWY5OFx1NjJkY1x1NjM5Mlx1Njc2Zlx1NmU0M1x1NzExOVx1NzZjM1x1ODBjY1x1ODBkYVx1''@;'; put 'put ''ODhmNFx1ODhmNVx1ODkxOVx1OGNlMFx1OGYyOVx1OTE0ZFx1OTY2YVx1NGYyZlx1NGY3MFx1NWUxYlx1NjdjZlx1NjgyMlx1NzY3ZFx1NzY3ZVx1OWI0NFx1NWU2MVx1NmEwYVx1NzE2OVx1NzFkNFx1NzU2YVx1Zjk2NFx1N2U0MVx1ODU0M1x1ODVlOVx1OThkY1x1NGYxMFx1N2I0Zlx1N2Y3''@;'; put 'put ''MFx1OTVhNVx1NTFlMVx1NWUwNlx1NjhiNVx1NmMzZVx1NmM0ZVx1NmNkYlx1NzJhZlx1N2JjNFx1ODMwM1x1NmNkNVx1NzQzYVx1NTBmYlx1NTI4OFx1NThjMVx1NjRkOFx1NmE5N1x1NzRhN1x1NzY1Nlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxOV0ubGVuZ3RoOysrcCk2NTUzMyE9''@;'; put 'put ''PV9bMjE5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxOV1bcF1dPTU2MDY0K3AsYls1NjA2NCtwXT1fWzIxOV1bcF0pO2ZvcihfWzIyMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzhhN1x1ODYxN1x1OTVlMlx1OTczOVx1Zjk2NVx1NTM1ZVx1NWYwMVx1OGI4YVx1OGZhOFx1OGZhZlx1OTA4YVx1NTIyNVx1NzdhNVx1OWM0OVx1OWYwOFx1NGUxOVx1NTAwMlx1NTE3''@;'; put 'put ''NVx1NWM1Ylx1NWU3N1x1NjYxZVx1NjYzYVx1NjdjNFx1NjhjNVx1NzBiM1x1NzUwMVx1NzVjNVx1NzljOVx1N2FkZFx1OGYyN1x1OTkyMFx1OWEwOFx1NGZkZFx1NTgyMVx1NTgzMVx1NWJmNlx1NjY2ZVx1NmI2NVx1NmQxMVx1NmU3YVx1NmY3ZFx1NzNlNFx1NzUyYlx1ODNlOVx1ODhkY1x1''@;'; put 'put ''ODkxM1x1OGI1Y1x1OGYxNFx1NGYwZlx1NTBkNVx1NTMxMFx1NTM1Y1x1NWI5M1x1NWZhOVx1NjcwZFx1Nzk4Zlx1ODE3OVx1ODMyZlx1ODUxNFx1ODkwN1x1ODk4Nlx1OGYzOVx1OGYzYlx1OTlhNVx1OWMxMlx1NjcyY1x1NGU3Nlx1NGZmOFx1NTk0OVx1NWMwMVx1NWNlZlx1NWNmMFx1NjM2''@;'; put 'put ''N1x1NjhkMlx1NzBmZFx1NzFhMlx1NzQyYlx1N2UyYlx1ODRlY1x1ODcwMlx1OTAyMlx1OTJkMlx1OWNmM1x1NGUwZFx1NGVkOFx1NGZlZlx1NTA4NVx1NTI1Nlx1NTI2Zlx1NTQyNlx1NTQ5MFx1NTdlMFx1NTkyYlx1NWE2Nlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyMF0ubGVuZ3Ro''@;'; put 'put ''OysrcCk2NTUzMyE9PV9bMjIwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyMF1bcF1dPTU2MzIwK3AsYls1NjMyMCtwXT1fWzIyMF1bcF0pO2ZvcihfWzIyMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWI1YVx1NWI3NVx1NWJjY1x1NWU5Y1x1Zjk2Nlx1NjI3Nlx1NjU3N1x1NjVhN1x1NmQ2ZVx1NmVhNVx1NzIzNlx1N2IyNlx1N2MzZlx1N2YzNlx1ODE1MFx1ODE1''@;'; put 'put ''MVx1ODE5YVx1ODI0MFx1ODI5OVx1ODNhOVx1OGEwM1x1OGNhMFx1OGNlNlx1OGNmYlx1OGQ3NFx1OGRiYVx1OTBlOFx1OTFkY1x1OTYxY1x1OTY0NFx1OTlkOVx1OWNlN1x1NTMxN1x1NTIwNlx1NTQyOVx1NTY3NFx1NThiM1x1NTk1NFx1NTk2ZVx1NWZmZlx1NjFhNFx1NjI2ZVx1NjYxMFx1''@;'; put 'put ''NmM3ZVx1NzExYVx1NzZjNlx1N2M4OVx1N2NkZVx1N2QxYlx1ODJhY1x1OGNjMVx1OTZmMFx1Zjk2N1x1NGY1Ylx1NWYxN1x1NWY3Zlx1NjJjMlx1NWQyOVx1NjcwYlx1NjhkYVx1Nzg3Y1x1N2U0M1x1OWQ2Y1x1NGUxNVx1NTA5OVx1NTMxNVx1NTMyYVx1NTM1MVx1NTk4M1x1NWE2Mlx1NWU4''@;'; put 'put ''N1x1NjBiMlx1NjE4YVx1NjI0OVx1NjI3OVx1NjU5MFx1Njc4N1x1NjlhN1x1NmJkNFx1NmJkNlx1NmJkN1x1NmJkOFx1NmNiOFx1Zjk2OFx1NzQzNVx1NzVmYVx1NzgxMlx1Nzg5MVx1NzlkNVx1NzlkOFx1N2M4M1x1N2RjYlx1N2ZlMVx1ODBhNVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1f''@;'; put 'put ''WzIyMV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjIxXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyMV1bcF1dPTU2NTc2K3AsYls1NjU3NitwXT1fWzIyMV1bcF0pO2ZvcihfWzIyMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODEzZVx1ODFjMlx1ODNmMlx1ODcxYVx1ODhlOFx1OGFiOVx1OGI2Y1x1OGNiYlx1OTExOVx1OTc1ZVx1OThkYlx1OWYzYlx1NTZhY1x1NWIy''@;'; put 'put ''YVx1NWY2Y1x1NjU4Y1x1NmFiM1x1NmJhZlx1NmQ1Y1x1NmZmMVx1NzAxNVx1NzI1ZFx1NzNhZFx1OGNhN1x1OGNkM1x1OTgzYlx1NjE5MVx1NmMzN1x1ODA1OFx1OWEwMVx1NGU0ZFx1NGU4Ylx1NGU5Ylx1NGVkNVx1NGYzYVx1NGYzY1x1NGY3Zlx1NGZkZlx1NTBmZlx1NTNmMlx1NTNmOFx1''@;'; put 'put ''NTUwNlx1NTVlM1x1NTZkYlx1NThlYlx1NTk2Mlx1NWExMVx1NWJlYlx1NWJmYVx1NWMwNFx1NWRmM1x1NWUyYlx1NWY5OVx1NjAxZFx1NjM2OFx1NjU5Y1x1NjVhZlx1NjdmNlx1NjdmYlx1NjhhZFx1NmI3Ylx1NmM5OVx1NmNkN1x1NmUyM1x1NzAwOVx1NzM0NVx1NzgwMlx1NzkzZVx1Nzk0''@;'; put 'put ''MFx1Nzk2MFx1NzljMVx1N2JlOVx1N2QxN1x1N2Q3Mlx1ODA4Nlx1ODIwZFx1ODM4ZVx1ODRkMVx1ODZjN1x1ODhkZlx1OGE1MFx1OGE1ZVx1OGIxZFx1OGNkY1x1OGQ2Nlx1OGZhZFx1OTBhYVx1OThmY1x1OTlkZlx1OWU5ZFx1NTI0YVx1Zjk2OVx1NjcxNFx1Zjk2YVx1ZmZmZCIuc3BsaXQo''@;'; put 'put ''IiIpLHA9MDtwIT1fWzIyMl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjIyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyMl1bcF1dPTU2ODMyK3AsYls1NjgzMitwXT1fWzIyMl1bcF0pO2ZvcihfWzIyM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTA5OFx1NTIyYVx1NWM3MVx1NjU2M1x1NmM1NVx1NzNjYVx1NzUyM1x1NzU5ZFx1N2I5N1x1ODQ5Y1x1OTE3OFx1OTcz''@;'; put 'put ''MFx1NGU3N1x1NjQ5Mlx1NmJiYVx1NzE1ZVx1ODVhOVx1NGUwOVx1Zjk2Ylx1Njc0OVx1NjhlZVx1NmUxN1x1ODI5Zlx1ODUxOFx1ODg2Ylx1NjNmN1x1NmY4MVx1OTIxMlx1OThhZlx1NGUwYVx1NTBiN1x1NTBjZlx1NTExZlx1NTU0Nlx1NTVhYVx1NTYxN1x1NWI0MFx1NWMxOVx1NWNlMFx1''@;'; put 'put ''NWUzOFx1NWU4YVx1NWVhMFx1NWVjMlx1NjBmM1x1Njg1MVx1NmE2MVx1NmU1OFx1NzIzZFx1NzI0MFx1NzJjMFx1NzZmOFx1Nzk2NVx1N2JiMVx1N2ZkNFx1ODhmM1x1ODlmNFx1OGE3M1x1OGM2MVx1OGNkZVx1OTcxY1x1NTg1ZVx1NzRiZFx1OGNmZFx1NTVjN1x1Zjk2Y1x1N2E2MVx1N2Qy''@;'; put 'put ''Mlx1ODI3Mlx1NzI3Mlx1NzUxZlx1NzUyNVx1Zjk2ZFx1N2IxOVx1NTg4NVx1NThmYlx1NWRiY1x1NWU4Zlx1NWViNlx1NWY5MFx1NjA1NVx1NjI5Mlx1NjM3Zlx1NjU0ZFx1NjY5MVx1NjZkOVx1NjZmOFx1NjgxNlx1NjhmMlx1NzI4MFx1NzQ1ZVx1N2I2ZVx1N2Q2ZVx1N2RkNlx1N2Y3Mlx1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyM10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjIzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyM11bcF1dPTU3MDg4K3AsYls1NzA4OCtwXT1fWzIyM11bcF0pO2ZvcihfWzIyNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODBlNVx1ODIxMlx1ODVhZlx1ODk3Zlx1OGE5M1x1OTAxZFx1OTJlNFx1OWVjZFx1OWYyMFx1NTkx''@;'; put 'put ''NVx1NTk2ZFx1NWUyZFx1NjBkY1x1NjYxNFx1NjY3M1x1Njc5MFx1NmM1MFx1NmRjNVx1NmY1Zlx1NzdmM1x1NzhhOVx1ODRjNlx1OTFjYlx1OTMyYlx1NGVkOVx1NTBjYVx1NTE0OFx1NTU4NFx1NWIwYlx1NWJhM1x1NjI0N1x1NjU3ZVx1NjVjYlx1NmUzMlx1NzE3ZFx1NzQwMVx1NzQ0NFx1''@;'; put 'put ''NzQ4N1x1NzRiZlx1NzY2Y1x1NzlhYVx1N2RkYVx1N2U1NVx1N2ZhOFx1ODE3YVx1ODFiM1x1ODIzOVx1ODYxYVx1ODdlY1x1OGE3NVx1OGRlM1x1OTA3OFx1OTI5MVx1OTQyNVx1OTk0ZFx1OWJhZVx1NTM2OFx1NWM1MVx1Njk1NFx1NmNjNFx1NmQyOVx1NmUyYlx1ODIwY1x1ODU5Ylx1ODkz''@;'; put 'put ''Ylx1OGEyZFx1OGFhYVx1OTZlYVx1OWY2N1x1NTI2MVx1NjZiOVx1NmJiMlx1N2U5Nlx1ODdmZVx1OGQwZFx1OTU4M1x1OTY1ZFx1NjUxZFx1NmQ4OVx1NzFlZVx1Zjk2ZVx1NTdjZVx1NTlkM1x1NWJhY1x1NjAyN1x1NjBmYVx1NjIxMFx1NjYxZlx1NjY1Zlx1NzMyOVx1NzNmOVx1NzZkYlx1''@;'; put 'put ''NzcwMVx1N2I2Y1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyNF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI0XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyNF1bcF1dPTU3MzQ0K3AsYls1NzM0NCtwXT1fWzIyNF1bcF0pO2ZvcihfWzIyNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODA1Nlx1ODA3Mlx1ODE2NVx1OGFhMFx1OTE5Mlx1NGUxNlx1NTJlMlx1NmI3''@;'; put 'put ''Mlx1NmQxN1x1N2EwNVx1N2IzOVx1N2QzMFx1Zjk2Zlx1OGNiMFx1NTNlY1x1NTYyZlx1NTg1MVx1NWJiNVx1NWMwZlx1NWMxMVx1NWRlMlx1NjI0MFx1NjM4M1x1NjQxNFx1NjYyZFx1NjhiM1x1NmNiY1x1NmQ4OFx1NmVhZlx1NzAxZlx1NzBhNFx1NzFkMlx1NzUyNlx1NzU4Zlx1NzU4ZVx1''@;'; put 'put ''NzYxOVx1N2IxMVx1N2JlMFx1N2MyYlx1N2QyMFx1N2QzOVx1ODUyY1x1ODU2ZFx1ODYwN1x1OGEzNFx1OTAwZFx1OTA2MVx1OTBiNVx1OTJiN1x1OTdmNlx1OWEzN1x1NGZkN1x1NWM2Y1x1Njc1Zlx1NmQ5MVx1N2M5Zlx1N2U4Y1x1OGIxNlx1OGQxNlx1OTAxZlx1NWI2Ylx1NWRmZFx1NjQw''@;'; put 'put ''ZFx1ODRjMFx1OTA1Y1x1OThlMVx1NzM4N1x1NWI4Ylx1NjA5YVx1Njc3ZVx1NmRkZVx1OGExZlx1OGFhNlx1OTAwMVx1OTgwY1x1NTIzN1x1Zjk3MFx1NzA1MVx1Nzg4ZVx1OTM5Nlx1ODg3MFx1OTFkN1x1NGZlZVx1NTNkN1x1NTVmZFx1NTZkYVx1NTc4Mlx1NThmZFx1NWFjMlx1NWI4OFx1''@;'; put 'put ''NWNhYlx1NWNjMFx1NWUyNVx1NjEwMVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyNV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI1XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyNV1bcF1dPTU3NjAwK3AsYls1NzYwMCtwXT1fWzIyNV1bcF0pO2ZvcihfWzIyNl09Ilx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjIwZFx1NjI0Ylx1NjM4OFx1NjQxY1x1NjUzNlx1NjU3''@;'; put 'put ''OFx1NmEzOVx1NmI4YVx1NmMzNFx1NmQxOVx1NmYzMVx1NzFlN1x1NzJlOVx1NzM3OFx1NzQwN1x1NzRiMlx1NzYyNlx1Nzc2MVx1NzljMFx1N2E1N1x1N2FlYVx1N2NiOVx1N2Q4Zlx1N2RhY1x1N2U2MVx1N2Y5ZVx1ODEyOVx1ODMzMVx1ODQ5MFx1ODRkYVx1ODVlYVx1ODg5Nlx1OGFiMFx1''@;'; put 'put ''OGI5MFx1OGYzOFx1OTA0Mlx1OTA4M1x1OTE2Y1x1OTI5Nlx1OTJiOVx1OTY4Ylx1OTZhN1x1OTZhOFx1OTZkNlx1OTcwMFx1OTgwOFx1OTk5Nlx1OWFkM1x1OWIxYVx1NTNkNFx1NTg3ZVx1NTkxOVx1NWI3MFx1NWJiZlx1NmRkMVx1NmY1YVx1NzE5Zlx1NzQyMVx1NzRiOVx1ODA4NVx1ODNm''@;'; put 'put ''ZFx1NWRlMVx1NWY4N1x1NWZhYVx1NjA0Mlx1NjVlY1x1NjgxMlx1Njk2Zlx1NmE1M1x1NmI4OVx1NmQzNVx1NmRmM1x1NzNlM1x1NzZmZVx1NzdhY1x1N2I0ZFx1N2QxNFx1ODEyM1x1ODIxY1x1ODM0MFx1ODRmNFx1ODU2M1x1OGE2Mlx1OGFjNFx1OTE4N1x1OTMxZVx1OTgwNlx1OTliNFx1''@;'; put 'put ''NjIwY1x1ODg1M1x1OGZmMFx1OTI2NVx1NWQwN1x1NWQyN1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyNl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI2XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyNl1bcF1dPTU3ODU2K3AsYls1Nzg1NitwXT1fWzIyNl1bcF0pO2ZvcihfWzIyN109''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWQ2OVx1NzQ1Zlx1ODE5ZFx1ODc2''@;'; put 'put ''OFx1NmZkNVx1NjJmZVx1N2ZkMlx1ODkzNlx1ODk3Mlx1NGUxZVx1NGU1OFx1NTBlN1x1NTJkZFx1NTM0N1x1NjI3Zlx1NjYwN1x1N2U2OVx1ODgwNVx1OTY1ZVx1NGY4ZFx1NTMxOVx1NTYzNlx1NTljYlx1NWFhNFx1NWMzOFx1NWM0ZVx1NWM0ZFx1NWUwMlx1NWYxMVx1NjA0M1x1NjViZFx1''@;'; put 'put ''NjYyZlx1NjY0Mlx1NjdiZVx1NjdmNFx1NzMxY1x1NzdlMlx1NzkzYVx1N2ZjNVx1ODQ5NFx1ODRjZFx1ODk5Nlx1OGE2Nlx1OGE2OVx1OGFlMVx1OGM1NVx1OGM3YVx1NTdmNFx1NWJkNFx1NWYwZlx1NjA2Zlx1NjJlZFx1NjkwZFx1NmI5Nlx1NmU1Y1x1NzE4NFx1N2JkMlx1ODc1NVx1OGI1''@;'; put 'put ''OFx1OGVmZVx1OThkZlx1OThmZVx1NGYzOFx1NGY4MVx1NGZlMVx1NTQ3Ylx1NWEyMFx1NWJiOFx1NjEzY1x1NjViMFx1NjY2OFx1NzFmY1x1NzUzM1x1Nzk1ZVx1N2QzM1x1ODE0ZVx1ODFlM1x1ODM5OFx1ODVhYVx1ODVjZVx1ODcwM1x1OGEwYVx1OGVhYlx1OGY5Ylx1Zjk3MVx1OGZjNVx1''@;'; put 'put ''NTkzMVx1NWJhNFx1NWJlNlx1NjA4OVx1NWJlOVx1NWMwYlx1NWZjM1x1NmM4MVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyN10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyN11bcF1dPTU4MTEyK3AsYls1ODExMitwXT1fWzIyN11bcF0p''@;'; put 'put ''O2ZvcihfWzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Zjk3Mlx1NmRm''@;'; put 'put ''MVx1NzAwYlx1NzUxYVx1ODJhZlx1OGFmNlx1NGVjMFx1NTM0MVx1Zjk3M1x1OTZkOVx1NmMwZlx1NGU5ZVx1NGZjNFx1NTE1Mlx1NTU1ZVx1NWEyNVx1NWNlOFx1NjIxMVx1NzI1OVx1ODJiZFx1ODNhYVx1ODZmZVx1ODg1OVx1OGExZFx1OTYzZlx1OTZjNVx1OTkxM1x1OWQwOVx1OWQ1ZFx1''@;'; put 'put ''NTgwYVx1NWNiM1x1NWRiZFx1NWU0NFx1NjBlMVx1NjExNVx1NjNlMVx1NmEwMlx1NmUyNVx1OTEwMlx1OTM1NFx1OTg0ZVx1OWMxMFx1OWY3N1x1NWI4OVx1NWNiOFx1NjMwOVx1NjY0Zlx1Njg0OFx1NzczY1x1OTZjMVx1OTc4ZFx1OTg1NFx1OWI5Zlx1NjVhMVx1OGIwMVx1OGVjYlx1OTVi''@;'; put 'put ''Y1x1NTUzNVx1NWNhOVx1NWRkNlx1NWViNVx1NjY5N1x1NzY0Y1x1ODNmNFx1OTVjN1x1NThkM1x1NjJiY1x1NzJjZVx1OWQyOFx1NGVmMFx1NTkyZVx1NjAwZlx1NjYzYlx1NmI4M1x1NzllN1x1OWQyNlx1NTM5M1x1NTRjMFx1NTdjM1x1NWQxNlx1NjExYlx1NjZkNlx1NmRhZlx1Nzg4ZFx1''@;'; put 'put ''ODI3ZVx1OTY5OFx1OTc0NFx1NTM4NFx1NjI3Y1x1NjM5Nlx1NmRiMlx1N2UwYVx1ODE0Ylx1OTg0ZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyOF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI4XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyOF1bcF1dPTU4MzY4K3AsYls1ODM2OCtw''@;'; put 'put ''XT1fWzIyOF1bcF0pO2ZvcihfWzIyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1NmFmYlx1N2Y0Y1x1OWRhZlx1OWUxYVx1NGU1Zlx1NTAzYlx1NTFiNlx1NTkxY1x1NjBmOVx1NjNmNlx1NjkzMFx1NzIzYVx1ODAzNlx1Zjk3NFx1OTFjZVx1NWYzMVx1Zjk3NVx1Zjk3Nlx1N2QwNFx1ODJlNVx1ODQ2Zlx1ODRiYlx1ODVlNVx1OGU4ZFx1Zjk3N1x1NGY2Zlx1Zjk3OFx1''@;'; put 'put ''Zjk3OVx1NThlNFx1NWI0M1x1NjA1OVx1NjNkYVx1NjUxOFx1NjU2ZFx1NjY5OFx1Zjk3YVx1Njk0YVx1NmEyM1x1NmQwYlx1NzAwMVx1NzE2Y1x1NzVkMlx1NzYwZFx1NzliM1x1N2E3MFx1Zjk3Ylx1N2Y4YVx1Zjk3Y1x1ODk0NFx1Zjk3ZFx1OGI5M1x1OTFjMFx1OTY3ZFx1Zjk3ZVx1OTkw''@;'; put 'put ''YVx1NTcwNFx1NWZhMVx1NjViY1x1NmYwMVx1NzYwMFx1NzlhNlx1OGE5ZVx1OTlhZFx1OWI1YVx1OWY2Y1x1NTEwNFx1NjFiNlx1NjI5MVx1NmE4ZFx1ODFjNlx1NTA0M1x1NTgzMFx1NWY2Nlx1NzEwOVx1OGEwMFx1OGFmYVx1NWI3Y1x1ODYxNlx1NGZmYVx1NTEzY1x1NTZiNFx1NTk0NFx1''@;'; put 'put ''NjNhOVx1NmRmOVx1NWRhYVx1Njk2ZFx1NTE4Nlx1NGU4OFx1NGY1OVx1Zjk3Zlx1Zjk4MFx1Zjk4MVx1NTk4Mlx1Zjk4Mlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyOV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyOV1bcF1dPTU4NjI0''@;'; put 'put ''K3AsYls1ODYyNCtwXT1fWzIyOV1bcF0pO2ZvcihfWzIzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1Zjk4M1x1NmI1Zlx1NmM1ZFx1Zjk4NFx1NzRiNVx1NzkxNlx1Zjk4NVx1ODIwN1x1ODI0NVx1ODMzOVx1OGYzZlx1OGY1ZFx1Zjk4Nlx1OTkxOFx1Zjk4N1x1Zjk4OFx1Zjk4OVx1NGVhNlx1Zjk4YVx1NTdkZlx1NWY3OVx1NjYxM1x1Zjk4Ylx1Zjk4Y1x1NzVhYlx1''@;'; put 'put ''N2U3OVx1OGI2Zlx1Zjk4ZFx1OTAwNlx1OWE1Ylx1NTZhNVx1NTgyN1x1NTlmOFx1NWExZlx1NWJiNFx1Zjk4ZVx1NWVmNlx1Zjk4Zlx1Zjk5MFx1NjM1MFx1NjMzYlx1Zjk5MVx1NjkzZFx1NmM4N1x1NmNiZlx1NmQ4ZVx1NmQ5M1x1NmRmNVx1NmYxNFx1Zjk5Mlx1NzBkZlx1NzEzNlx1NzE1''@;'; put 'put ''OVx1Zjk5M1x1NzFjM1x1NzFkNVx1Zjk5NFx1Nzg0Zlx1Nzg2Zlx1Zjk5NVx1N2I3NVx1N2RlM1x1Zjk5Nlx1N2UyZlx1Zjk5N1x1ODg0ZFx1OGVkZlx1Zjk5OFx1Zjk5OVx1Zjk5YVx1OTI1Ylx1Zjk5Ylx1OWNmNlx1Zjk5Y1x1Zjk5ZFx1Zjk5ZVx1NjA4NVx1NmQ4NVx1Zjk5Zlx1NzFiMVx1''@;'; put 'put ''ZjlhMFx1ZjlhMVx1OTViMVx1NTNhZFx1ZjlhMlx1ZjlhM1x1ZjlhNFx1NjdkM1x1ZjlhNVx1NzA4ZVx1NzEzMFx1NzQzMFx1ODI3Nlx1ODJkMlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzMF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjMwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIz''@;'; put 'put ''MF1bcF1dPTU4ODgwK3AsYls1ODg4MCtwXT1fWzIzMF1bcF0pO2ZvcihfWzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZjlhNlx1OTViYlx1OWFlNVx1OWU3ZFx1NjZjNFx1ZjlhN1x1NzFjMVx1ODQ0OVx1ZjlhOFx1ZjlhOVx1NTg0Ylx1ZjlhYVx1ZjlhYlx1NWRiOFx1NWY3MVx1ZjlhY1x1NjYyMFx1NjY4ZVx1Njk3OVx1NjlhZVx1NmMzOFx1NmNmM1x1NmUzNlx1''@;'; put 'put ''NmY0MVx1NmZkYVx1NzAxYlx1NzAyZlx1NzE1MFx1NzFkZlx1NzM3MFx1ZjlhZFx1NzQ1Ylx1ZjlhZVx1NzRkNFx1NzZjOFx1N2E0ZVx1N2U5M1x1ZjlhZlx1ZjliMFx1ODJmMVx1OGE2MFx1OGZjZVx1ZjliMVx1OTM0OFx1ZjliMlx1OTcxOVx1ZjliM1x1ZjliNFx1NGU0Mlx1NTAyYVx1Zjli''@;'; put 'put ''NVx1NTIwOFx1NTNlMVx1NjZmM1x1NmM2ZFx1NmZjYVx1NzMwYVx1Nzc3Zlx1N2E2Mlx1ODJhZVx1ODVkZFx1ODYwMlx1ZjliNlx1ODhkNFx1OGE2M1x1OGI3ZFx1OGM2Ylx1ZjliN1x1OTJiM1x1ZjliOFx1OTcxM1x1OTgxMFx1NGU5NFx1NGYwZFx1NGZjOVx1NTBiMlx1NTM0OFx1NTQzZVx1''@;'; put 'put ''NTQzM1x1NTVkYVx1NTg2Mlx1NThiYVx1NTk2N1x1NWExYlx1NWJlNFx1NjA5Zlx1ZjliOVx1NjFjYVx1NjU1Nlx1NjVmZlx1NjY2NFx1NjhhN1x1NmM1YVx1NmZiM1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzMV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjMxXVtwXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoSVtfWzIzMV1bcF1dPTU5MTM2K3AsYls1OTEzNitwXT1fWzIzMV1bcF0pO2ZvcihfWzIzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzBjZlx1NzFhY1x1NzM1Mlx1N2I3ZFx1ODcwOFx1OGFhNFx1OWMzMlx1OWYwN1x1NWM0Ylx1NmM4M1x1NzM0NFx1NzM4OVx1OTIzYVx1NmVhYlx1NzQ2NVx1NzYxZlx1N2E2OVx1N2UxNVx1ODYwYVx1NTE0MFx1NThjNVx1''@;'; put 'put ''NjRjMVx1NzRlZVx1NzUxNVx1NzY3MFx1N2ZjMVx1OTA5NVx1OTZjZFx1OTk1NFx1NmUyNlx1NzRlNlx1N2FhOVx1N2FhYVx1ODFlNVx1ODZkOVx1ODc3OFx1OGExYlx1NWE0OVx1NWI4Y1x1NWI5Ylx1NjhhMVx1NjkwMFx1NmQ2M1x1NzNhOVx1NzQxM1x1NzQyY1x1Nzg5N1x1N2RlOVx1N2Zl''@;'; put 'put ''Ylx1ODExOFx1ODE1NVx1ODM5ZVx1OGM0Y1x1OTYyZVx1OTgxMVx1NjZmMFx1NWY4MFx1NjVmYVx1Njc4OVx1NmM2YVx1NzM4Ylx1NTAyZFx1NWEwM1x1NmI2YVx1NzdlZVx1NTkxNlx1NWQ2Y1x1NWRjZFx1NzMyNVx1NzU0Zlx1ZjliYVx1ZjliYlx1NTBlNVx1NTFmOVx1NTgyZlx1NTkyZFx1''@;'; put 'put ''NTk5Nlx1NTlkYVx1NWJlNVx1ZjliY1x1ZjliZFx1NWRhMlx1NjJkN1x1NjQxNlx1NjQ5M1x1NjRmZVx1ZjliZVx1NjZkY1x1ZjliZlx1NmE0OFx1ZjljMFx1NzFmZlx1NzQ2NFx1ZjljMVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzMl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjMyXVtw''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzMl1bcF1dPTU5MzkyK3AsYls1OTM5MitwXT1fWzIzMl1bcF0pO2ZvcihfWzIzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2E4OFx1N2FhZlx1N2U0N1x1N2U1ZVx1ODAwMFx1ODE3MFx1ZjljMlx1ODdlZlx1ODk4MVx1OGIyMFx1OTA1OVx1ZjljM1x1OTA4MFx1OTk1Mlx1NjE3ZVx1NmIzMlx1NmQ3NFx1N2UxZlx1ODkyNVx1''@;'; put 'put ''OGZiMVx1NGZkMVx1NTBhZFx1NTE5N1x1NTJjN1x1NTdjN1x1NTg4OVx1NWJiOVx1NWViOFx1NjE0Mlx1Njk5NVx1NmQ4Y1x1NmU2N1x1NmViNlx1NzE5NFx1NzQ2Mlx1NzUyOFx1NzUyY1x1ODA3M1x1ODMzOFx1ODRjOVx1OGUwYVx1OTM5NFx1OTNkZVx1ZjljNFx1NGU4ZVx1NGY1MVx1NTA3''@;'; put 'put ''Nlx1NTEyYVx1NTNjOFx1NTNjYlx1NTNmM1x1NWI4N1x1NWJkM1x1NWMyNFx1NjExYVx1NjE4Mlx1NjVmNFx1NzI1Ylx1NzM5N1x1NzQ0MFx1NzZjMlx1Nzk1MFx1Nzk5MVx1NzliOVx1N2QwNlx1N2ZiZFx1ODI4Ylx1ODVkNVx1ODY1ZVx1OGZjMlx1OTA0N1x1OTBmNVx1OTFlYVx1OTY4NVx1''@;'; put 'put ''OTZlOFx1OTZlOVx1NTJkNlx1NWY2N1x1NjVlZFx1NjYzMVx1NjgyZlx1NzE1Y1x1N2EzNlx1OTBjMVx1OTgwYVx1NGU5MVx1ZjljNVx1NmE1Mlx1NmI5ZVx1NmY5MFx1NzE4OVx1ODAxOFx1ODJiOFx1ODU1M1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzM10ubGVuZ3RoOysrcCk2NTUz''@;'; put 'put ''MyE9PV9bMjMzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzM11bcF1dPTU5NjQ4K3AsYls1OTY0OCtwXT1fWzIzM11bcF0pO2ZvcihfWzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTA0Ylx1OTY5NVx1OTZmMlx1OTdmYlx1ODUxYVx1OWIzMVx1NGU5MFx1NzE4YVx1OTZjNFx1NTE0M1x1NTM5Zlx1NTRlMVx1NTcxM1x1NTcxMlx1NTdhM1x1NWE5Ylx1NWFjNFx1''@;'; put 'put ''NWJjM1x1NjAyOFx1NjEzZlx1NjNmNFx1NmM4NVx1NmQzOVx1NmU3Mlx1NmU5MFx1NzIzMFx1NzMzZlx1NzQ1N1x1ODJkMVx1ODg4MVx1OGY0NVx1OTA2MFx1ZjljNlx1OTY2Mlx1OTg1OFx1OWQxYlx1NjcwOFx1OGQ4YVx1OTI1ZVx1NGY0ZFx1NTA0OVx1NTBkZVx1NTM3MVx1NTcwZFx1NTlk''@;'; put 'put ''NFx1NWEwMVx1NWMwOVx1NjE3MFx1NjY5MFx1NmUyZFx1NzIzMlx1NzQ0Ylx1N2RlZlx1ODBjM1x1ODQwZVx1ODQ2Nlx1ODUzZlx1ODc1Zlx1ODg1Ylx1ODkxOFx1OGIwMlx1OTA1NVx1OTdjYlx1OWI0Zlx1NGU3M1x1NGY5MVx1NTExMlx1NTE2YVx1ZjljN1x1NTUyZlx1NTVhOVx1NWI3YVx1''@;'; put 'put ''NWJhNVx1NWU3Y1x1NWU3ZFx1NWViZVx1NjBhMFx1NjBkZlx1NjEwOFx1NjEwOVx1NjNjNFx1NjUzOFx1NjcwOVx1ZjljOFx1NjdkNFx1NjdkYVx1ZjljOVx1Njk2MVx1Njk2Mlx1NmNiOVx1NmQyN1x1ZjljYVx1NmUzOFx1ZjljYlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzNF0ubGVu''@;'; put 'put ''Z3RoOysrcCk2NTUzMyE9PV9bMjM0XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzNF1bcF1dPTU5OTA0K3AsYls1OTkwNCtwXT1fWzIzNF1bcF0pO2ZvcihfWzIzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZlMVx1NzMzNlx1NzMzN1x1ZjljY1x1NzQ1Y1x1NzUzMVx1ZjljZFx1NzY1Mlx1ZjljZVx1ZjljZlx1N2RhZFx1ODFmZVx1ODQzOFx1ODhkNVx1OGE5OFx1''@;'; put 'put ''OGFkYlx1OGFlZFx1OGUzMFx1OGU0Mlx1OTA0YVx1OTAzZVx1OTA3YVx1OTE0OVx1OTFjOVx1OTM2ZVx1ZjlkMFx1ZjlkMVx1NTgwOVx1ZjlkMlx1NmJkM1x1ODA4OVx1ODBiMlx1ZjlkM1x1ZjlkNFx1NTE0MVx1NTk2Ylx1NWMzOVx1ZjlkNVx1ZjlkNlx1NmY2NFx1NzNhN1x1ODBlNFx1OGQw''@;'; put 'put ''N1x1ZjlkN1x1OTIxN1x1OTU4Zlx1ZjlkOFx1ZjlkOVx1ZjlkYVx1ZjlkYlx1ODA3Zlx1NjIwZVx1NzAxY1x1N2Q2OFx1ODc4ZFx1ZjlkY1x1NTdhMFx1NjA2OVx1NjE0N1x1NmJiN1x1OGFiZVx1OTI4MFx1OTZiMVx1NGU1OVx1NTQxZlx1NmRlYlx1ODUyZFx1OTY3MFx1OTdmM1x1OThlZVx1''@;'; put 'put ''NjNkNlx1NmNlM1x1OTA5MVx1NTFkZFx1NjFjOVx1ODFiYVx1OWRmOVx1NGY5ZFx1NTAxYVx1NTEwMFx1NWI5Y1x1NjEwZlx1NjFmZlx1NjRlY1x1NjkwNVx1NmJjNVx1NzU5MVx1NzdlM1x1N2ZhOVx1ODI2NFx1ODU4Zlx1ODdmYlx1ODg2M1x1OGFiY1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtw''@;'; put 'put ''IT1fWzIzNV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM1XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzNV1bcF1dPTYwMTYwK3AsYls2MDE2MCtwXT1fWzIzNV1bcF0pO2ZvcihfWzIzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI3MFx1OTFhYlx1NGU4Y1x1NGVlNVx1NGYwYVx1ZjlkZFx1ZjlkZVx1NTkzN1x1NTllOFx1ZjlkZlx1NWRmMlx1NWYxYlx1NWY1Ylx1''@;'; put 'put ''NjAyMVx1ZjllMFx1ZjllMVx1ZjllMlx1ZjllM1x1NzIzZVx1NzNlNVx1ZjllNFx1NzU3MFx1NzVjZFx1ZjllNVx1NzlmYlx1ZjllNlx1ODAwY1x1ODAzM1x1ODA4NFx1ODJlMVx1ODM1MVx1ZjllN1x1ZjllOFx1OGNiZFx1OGNiM1x1OTA4N1x1ZjllOVx1ZjllYVx1OThmNFx1OTkwY1x1Zjll''@;'; put 'put ''Ylx1ZjllY1x1NzAzN1x1NzZjYVx1N2ZjYVx1N2ZjY1x1N2ZmY1x1OGIxYVx1NGViYVx1NGVjMVx1NTIwM1x1NTM3MFx1ZjllZFx1NTRiZFx1NTZlMFx1NTlmYlx1NWJjNVx1NWYxNVx1NWZjZFx1NmU2ZVx1ZjllZVx1ZjllZlx1N2Q2YVx1ODMzNVx1ZjlmMFx1ODY5M1x1OGE4ZFx1ZjlmMVx1''@;'; put 'put ''OTc2ZFx1OTc3N1x1ZjlmMlx1ZjlmM1x1NGUwMFx1NGY1YVx1NGY3ZVx1NThmOVx1NjVlNVx1NmVhMlx1OTAzOFx1OTNiMFx1OTliOVx1NGVmYlx1NThlY1x1NTk4YVx1NTlkOVx1NjA0MVx1ZjlmNFx1ZjlmNVx1N2ExNFx1ZjlmNlx1ODM0Zlx1OGNjM1x1NTE2NVx1NTM0NFx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLHA9MDtwIT1fWzIzNl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM2XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzNl1bcF1dPTYwNDE2K3AsYls2MDQxNitwXT1fWzIzNl1bcF0pO2ZvcihfWzIzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZjlmN1x1ZjlmOFx1ZjlmOVx1NGVjZFx1NTI2OVx1NWI1NVx1ODJiZlx1NGVkNFx1NTIzYVx1NTRhOFx1NTljOVx1''@;'; put 'put ''NTlmZlx1NWI1MFx1NWI1N1x1NWI1Y1x1NjA2M1x1NjE0OFx1NmVjYlx1NzA5OVx1NzE2ZVx1NzM4Nlx1NzRmN1x1NzViNVx1NzhjMVx1N2QyYlx1ODAwNVx1ODFlYVx1ODMyOFx1ODUxN1x1ODVjOVx1OGFlZVx1OGNjN1x1OTZjY1x1NGY1Y1x1NTJmYVx1NTZiY1x1NjVhYlx1NjYyOFx1NzA3''@;'; put 'put ''Y1x1NzBiOFx1NzIzNVx1N2RiZFx1ODI4ZFx1OTE0Y1x1OTZjMFx1OWQ3Mlx1NWI3MVx1NjhlN1x1NmI5OFx1NmY3YVx1NzZkZVx1NWM5MVx1NjZhYlx1NmY1Ylx1N2JiNFx1N2MyYVx1ODgzNlx1OTZkY1x1NGUwOFx1NGVkN1x1NTMyMFx1NTgzNFx1NThiYlx1NThlZlx1NTk2Y1x1NWMwN1x1''@;'; put 'put ''NWUzM1x1NWU4NFx1NWYzNVx1NjM4Y1x1NjZiMlx1Njc1Nlx1NmExZlx1NmFhM1x1NmIwY1x1NmYzZlx1NzI0Nlx1ZjlmYVx1NzM1MFx1NzQ4Ylx1N2FlMFx1N2NhN1x1ODE3OFx1ODFkZlx1ODFlN1x1ODM4YVx1ODQ2Y1x1ODUyM1x1ODU5NFx1ODVjZlx1ODhkZFx1OGQxM1x1OTFhY1x1OTU3''@;'; put 'put ''N1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzN10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzN11bcF1dPTYwNjcyK3AsYls2MDY3MitwXT1fWzIzN11bcF0pO2ZvcihfWzIzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY5Y1x1NTE4ZFx1NTRjOVx1NTcyOFx1NWJiMFx1NjI0ZFx1Njc1MFx1NjgzZFx1Njg5M1x1''@;'; put 'put ''NmUzZFx1NmVkM1x1NzA3ZFx1N2UyMVx1ODhjMVx1OGNhMVx1OGYwOVx1OWY0Ylx1OWY0ZVx1NzIyZFx1N2I4Zlx1OGFjZFx1OTMxYVx1NGY0N1x1NGY0ZVx1NTEzMlx1NTQ4MFx1NTlkMFx1NWU5NVx1NjJiNVx1Njc3NVx1Njk2ZVx1NmExN1x1NmNhZVx1NmUxYVx1NzJkOVx1NzMyYVx1NzVi''@;'; put 'put ''ZFx1N2JiOFx1N2QzNVx1ODJlN1x1ODNmOVx1ODQ1N1x1ODVmN1x1OGE1Ylx1OGNhZlx1OGU4N1x1OTAxOVx1OTBiOFx1OTZjZVx1OWY1Zlx1NTJlM1x1NTQwYVx1NWFlMVx1NWJjMlx1NjQ1OFx1NjU3NVx1NmVmNFx1NzJjNFx1ZjlmYlx1NzY4NFx1N2E0ZFx1N2IxYlx1N2M0ZFx1N2UzZVx1''@;'; put 'put ''N2ZkZlx1ODM3Ylx1OGIyYlx1OGNjYVx1OGQ2NFx1OGRlMVx1OGU1Zlx1OGZlYVx1OGZmOVx1OTA2OVx1OTNkMVx1NGY0M1x1NGY3YVx1NTBiM1x1NTE2OFx1NTE3OFx1NTI0ZFx1NTI2YVx1NTg2MVx1NTg3Y1x1NTk2MFx1NWMwOFx1NWM1NVx1NWVkYlx1NjA5Ylx1NjIzMFx1NjgxM1x1NmJi''@;'; put 'put ''Zlx1NmMwOFx1NmZiMVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzOF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM4XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzOF1bcF1dPTYwOTI4K3AsYls2MDkyOCtwXT1fWzIzOF1bcF0pO2ZvcihfWzIzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzE0ZVx1NzQyMFx1NzUzMFx1NzUzOFx1NzU1MVx1NzY3Mlx1N2I0Y1x1''@;'; put 'put ''N2I4Ylx1N2JhZFx1N2JjNlx1N2U4Zlx1OGE2ZVx1OGYzZVx1OGY0OVx1OTIzZlx1OTI5M1x1OTMyMlx1OTQyYlx1OTZmYlx1OTg1YVx1OTg2Ylx1OTkxZVx1NTIwN1x1NjIyYVx1NjI5OFx1NmQ1OVx1NzY2NFx1N2FjYVx1N2JjMFx1N2Q3Nlx1NTM2MFx1NWNiZVx1NWU5N1x1NmYzOFx1NzBi''@;'; put 'put ''OVx1N2M5OFx1OTcxMVx1OWI4ZVx1OWVkZVx1NjNhNVx1NjQ3YVx1ODc3Nlx1NGUwMVx1NGU5NVx1NGVhZFx1NTA1Y1x1NTA3NVx1NTQ0OFx1NTljM1x1NWI5YVx1NWU0MFx1NWVhZFx1NWVmN1x1NWY4MVx1NjBjNVx1NjMzYVx1NjUzZlx1NjU3NFx1NjVjY1x1NjY3Nlx1NjY3OFx1NjdmZVx1''@;'; put 'put ''Njk2OFx1NmE4OVx1NmI2M1x1NmM0MFx1NmRjMFx1NmRlOFx1NmUxZlx1NmU1ZVx1NzAxZVx1NzBhMVx1NzM4ZVx1NzNmZFx1NzUzYVx1Nzc1Ylx1Nzg4N1x1Nzk4ZVx1N2EwYlx1N2E3ZFx1N2NiZVx1N2Q4ZVx1ODI0N1x1OGEwMlx1OGFlYVx1OGM5ZVx1OTEyZFx1OTE0YVx1OTFkOFx1OTI2''@;'; put 'put ''Nlx1OTJjY1x1OTMyMFx1OTcwNlx1OTc1Nlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzOV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzOV1bcF1dPTYxMTg0K3AsYls2MTE4NCtwXT1fWzIzOV1bcF0pO2ZvcihfWzI0MF09Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTc1Y1x1OTgwMlx1OWYwZVx1NTIzNlx1NTI5MVx1''@;'; put 'put ''NTU3Y1x1NTgyNFx1NWUxZFx1NWYxZlx1NjA4Y1x1NjNkMFx1NjhhZlx1NmZkZlx1Nzk2ZFx1N2IyY1x1ODFjZFx1ODViYVx1ODhmZFx1OGFmOFx1OGU0NFx1OTE4ZFx1OTY2NFx1OTY5Ylx1OTczZFx1OTg0Y1x1OWY0YVx1NGZjZVx1NTE0Nlx1NTFjYlx1NTJhOVx1NTYzMlx1NWYxNFx1NWY2''@;'; put 'put ''Ylx1NjNhYVx1NjRjZFx1NjVlOVx1NjY0MVx1NjZmYVx1NjZmOVx1NjcxZFx1Njg5ZFx1NjhkN1x1NjlmZFx1NmYxNVx1NmY2ZVx1NzE2N1x1NzFlNVx1NzIyYVx1NzRhYVx1NzczYVx1Nzk1Nlx1Nzk1YVx1NzlkZlx1N2EyMFx1N2E5NVx1N2M5N1x1N2NkZlx1N2Q0NFx1N2U3MFx1ODA4N1x1''@;'; put 'put ''ODVmYlx1ODZhNFx1OGE1NFx1OGFiZlx1OGQ5OVx1OGU4MVx1OTAyMFx1OTA2ZFx1OTFlM1x1OTYzYlx1OTZkNVx1OWNlNVx1NjVjZlx1N2MwN1x1OGRiM1x1OTNjM1x1NWI1OFx1NWMwYVx1NTM1Mlx1NjJkOVx1NzMxZFx1NTAyN1x1NWI5N1x1NWY5ZVx1NjBiMFx1NjE2Ylx1NjhkNVx1NmRk''@;'; put 'put ''OVx1NzQyZVx1N2EyZVx1N2Q0Mlx1N2Q5Y1x1N2UzMVx1ODE2Ylx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0MF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0MF1bcF1dPTYxNDQwK3AsYls2MTQ0MCtwXT1fWzI0MF1bcF0pO2ZvcihfWzI0''@;'; put 'put ''MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGUyYVx1OGUzNVx1OTM3ZVx1''@;'; put 'put ''OTQxOFx1NGY1MFx1NTc1MFx1NWRlNlx1NWVhN1x1NjMyYlx1N2Y2YVx1NGUzYlx1NGY0Zlx1NGY4Zlx1NTA1YVx1NTlkZFx1ODBjNFx1NTQ2YVx1NTQ2OFx1NTVmZVx1NTk0Zlx1NWI5OVx1NWRkZVx1NWVkYVx1NjY1ZFx1NjczMVx1NjdmMVx1NjgyYVx1NmNlOFx1NmQzMlx1NmU0YVx1NmY4''@;'; put 'put ''ZFx1NzBiN1x1NzNlMFx1NzU4N1x1N2M0Y1x1N2QwMlx1N2QyY1x1N2RhMlx1ODIxZlx1ODZkYlx1OGEzYlx1OGE4NVx1OGQ3MFx1OGU4YVx1OGYzM1x1OTAzMVx1OTE0ZVx1OTE1Mlx1OTQ0NFx1OTlkMFx1N2FmOVx1N2NhNVx1NGZjYVx1NTEwMVx1NTFjNlx1NTdjOFx1NWJlZlx1NWNmYlx1''@;'; put 'put ''NjY1OVx1NmEzZFx1NmQ1YVx1NmU5Nlx1NmZlY1x1NzEwY1x1NzU2Zlx1N2FlM1x1ODgyMlx1OTAyMVx1OTA3NVx1OTZjYlx1OTlmZlx1ODMwMVx1NGUyZFx1NGVmMlx1ODg0Nlx1OTFjZFx1NTM3ZFx1NmFkYlx1Njk2Ylx1NmM0MVx1ODQ3YVx1NTg5ZVx1NjE4ZVx1NjZmZVx1NjJlZlx1NzBk''@;'; put 'put ''ZFx1NzUxMVx1NzVjN1x1N2U1Mlx1ODRiOFx1OGI0OVx1OGQwOFx1NGU0Ylx1NTNlYVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0MV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQxXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0MV1bcF1dPTYxNjk2K3AsYls2MTY5NitwXT1fWzI0MV1b''@;'; put 'put ''cF0pO2ZvcihfWzI0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRhYlx1''@;'; put 'put ''NTczMFx1NTc0MFx1NWZkN1x1NjMwMVx1NjMwN1x1NjQ2Zlx1NjUyZlx1NjVlOFx1NjY3YVx1Njc5ZFx1NjdiM1x1NmI2Mlx1NmM2MFx1NmM5YVx1NmYyY1x1NzdlNVx1NzgyNVx1Nzk0OVx1Nzk1N1x1N2QxOVx1ODBhMlx1ODEwMlx1ODFmM1x1ODI5ZFx1ODJiN1x1ODcxOFx1OGE4Y1x1Zjlm''@;'; put 'put ''Y1x1OGQwNFx1OGRiZVx1OTA3Mlx1NzZmNFx1N2ExOVx1N2EzN1x1N2U1NFx1ODA3N1x1NTUwN1x1NTVkNFx1NTg3NVx1NjMyZlx1NjQyMlx1NjY0OVx1NjY0Ylx1Njg2ZFx1Njk5Ylx1NmI4NFx1NmQyNVx1NmViMVx1NzNjZFx1NzQ2OFx1NzRhMVx1NzU1Ylx1NzViOVx1NzZlMVx1NzcxZVx1''@;'; put 'put ''Nzc4Ylx1NzllNlx1N2UwOVx1N2UxZFx1ODFmYlx1ODUyZlx1ODg5N1x1OGEzYVx1OGNkMVx1OGVlYlx1OGZiMFx1OTAzMlx1OTNhZFx1OTY2M1x1OTY3M1x1OTcwN1x1NGY4NFx1NTNmMVx1NTllYVx1NWFjOVx1NWUxOVx1Njg0ZVx1NzRjNlx1NzViZVx1NzllOVx1N2E5Mlx1ODFhM1x1ODZl''@;'; put 'put ''ZFx1OGNlYVx1OGRjY1x1OGZlZFx1NjU5Zlx1NjcxNVx1ZjlmZFx1NTdmN1x1NmY1N1x1N2RkZFx1OGYyZlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0Ml1bcF1dPTYxOTUyK3AsYls2MTk1''@;'; put 'put ''MitwXT1fWzI0Ml1bcF0pO2ZvcihfWzI0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1OTNmNlx1OTZjNlx1NWZiNVx1NjFmMlx1NmY4NFx1NGUxNFx1NGY5OFx1NTAxZlx1NTNjOVx1NTVkZlx1NWQ2Zlx1NWRlZVx1NmIyMVx1NmI2NFx1NzhjYlx1N2I5YVx1ZjlmZVx1OGU0OVx1OGVjYVx1OTA2ZVx1NjM0OVx1NjQzZVx1Nzc0MFx1N2E4NFx1OTMyZlx1OTQ3Zlx1OWY2''@;'; put 'put ''YVx1NjRiMFx1NmZhZlx1NzFlNlx1NzRhOFx1NzRkYVx1N2FjNFx1N2MxMlx1N2U4Mlx1N2NiMlx1N2U5OFx1OGI5YVx1OGQwYVx1OTQ3ZFx1OTkxMFx1OTk0Y1x1NTIzOVx1NWJkZlx1NjRlNlx1NjcyZFx1N2QyZVx1NTBlZFx1NTNjM1x1NTg3OVx1NjE1OFx1NjE1OVx1NjFmYVx1NjVhY1x1''@;'; put 'put ''N2FkOVx1OGI5Mlx1OGI5Nlx1NTAwOVx1NTAyMVx1NTI3NVx1NTUzMVx1NWEzY1x1NWVlMFx1NWY3MFx1NjEzNFx1NjU1ZVx1NjYwY1x1NjYzNlx1NjZhMlx1NjljZFx1NmVjNFx1NmYzMlx1NzMxNlx1NzYyMVx1N2E5M1x1ODEzOVx1ODI1OVx1ODNkNlx1ODRiY1x1NTBiNVx1NTdmMFx1NWJj''@;'; put 'put ''MFx1NWJlOFx1NWY2OVx1NjNhMVx1NzgyNlx1N2RiNVx1ODNkY1x1ODUyMVx1OTFjN1x1OTFmNVx1NTE4YVx1NjdmNVx1N2I1Nlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0M10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0M11bcF1dPTYy''@;'; put 'put ''MjA4K3AsYls2MjIwOCtwXT1fWzI0M11bcF0pO2ZvcihfWzI0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1OGNhY1x1NTFjNFx1NTliYlx1NjBiZFx1ODY1NVx1NTAxY1x1ZjlmZlx1NTI1NFx1NWMzYVx1NjE3ZFx1NjIxYVx1NjJkM1x1NjRmMlx1NjVhNVx1NmVjY1x1NzYyMFx1ODEwYVx1OGU2MFx1OTY1Zlx1OTZiYlx1NGVkZlx1NTM0M1x1NTU5OFx1NTkyOVx1NWRk''@;'; put 'put ''ZFx1NjRjNVx1NmNjOVx1NmRmYVx1NzM5NFx1N2E3Zlx1ODIxYlx1ODVhNlx1OGNlNFx1OGUxMFx1OTA3N1x1OTFlN1x1OTVlMVx1OTYyMVx1OTdjNlx1NTFmOFx1NTRmMlx1NTU4Nlx1NWZiOVx1NjRhNFx1NmY4OFx1N2RiNFx1OGYxZlx1OGY0ZFx1OTQzNVx1NTBjOVx1NWMxNlx1NmNiZVx1''@;'; put 'put ''NmRmYlx1NzUxYlx1NzdiYlx1N2MzZFx1N2M2NFx1OGE3OVx1OGFjMlx1NTgxZVx1NTliZVx1NWUxNlx1NjM3N1x1NzI1Mlx1NzU4YVx1Nzc2Ylx1OGFkY1x1OGNiY1x1OGYxMlx1NWVmM1x1NjY3NFx1NmRmOFx1ODA3ZFx1ODNjMVx1OGFjYlx1OTc1MVx1OWJkNlx1ZmEwMFx1NTI0M1x1NjZm''@;'; put 'put ''Zlx1NmQ5NVx1NmVlZlx1N2RlMFx1OGFlNlx1OTAyZVx1OTA1ZVx1OWFkNFx1NTIxZFx1NTI3Zlx1NTRlOFx1NjE5NFx1NjI4NFx1NjJkYlx1NjhhMlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0NF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQ0XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtf''@;'; put 'put ''WzI0NF1bcF1dPTYyNDY0K3AsYls2MjQ2NCtwXT1fWzI0NF1bcF0pO2ZvcihfWzI0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjkxMlx1Njk1YVx1NmEzNVx1NzA5Mlx1NzEyNlx1Nzg1ZFx1NzkwMVx1NzkwZVx1NzlkMlx1N2EwZFx1ODA5Nlx1ODI3OFx1ODJkNVx1ODM0OVx1ODU0OVx1OGM4Mlx1OGQ4NVx1OTE2Mlx1OTE4Ylx1OTFhZVx1NGZjM1x1NTZkMVx1NzFl''@;'; put 'put ''ZFx1NzdkN1x1ODcwMFx1ODlmOFx1NWJmOFx1NWZkNlx1Njc1MVx1OTBhOFx1NTNlMlx1NTg1YVx1NWJmNVx1NjBhNFx1NjE4MVx1NjQ2MFx1N2UzZFx1ODA3MFx1ODUyNVx1OTI4M1x1NjRhZVx1NTBhY1x1NWQxNFx1NjcwMFx1NTg5Y1x1NjJiZFx1NjNhOFx1NjkwZVx1Njk3OFx1NmExZVx1''@;'; put 'put ''NmU2Ylx1NzZiYVx1NzljYlx1ODJiYlx1ODQyOVx1OGFjZlx1OGRhOFx1OGZmZFx1OTExMlx1OTE0Ylx1OTE5Y1x1OTMxMFx1OTMxOFx1OTM5YVx1OTZkYlx1OWEzNlx1OWMwZFx1NGUxMVx1NzU1Y1x1Nzk1ZFx1N2FmYVx1N2I1MVx1N2JjOVx1N2UyZVx1ODRjNFx1OGU1OVx1OGU3NFx1OGVm''@;'; put 'put ''OFx1OTAxMFx1NjYyNVx1NjkzZlx1NzQ0M1x1NTFmYVx1NjcyZVx1OWVkY1x1NTE0NVx1NWZlMFx1NmM5Nlx1ODdmMlx1ODg1ZFx1ODg3N1x1NjBiNFx1ODFiNVx1ODQwM1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0NV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQ1XVtwXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoSVtfWzI0NV1bcF1dPTYyNzIwK3AsYls2MjcyMCtwXT1fWzI0NV1bcF0pO2ZvcihfWzI0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGQwNVx1NTNkNlx1NTQzOVx1NTYzNFx1NWEzNlx1NWMzMVx1NzA4YVx1N2ZlMFx1ODA1YVx1ODEwNlx1ODFlZFx1OGRhM1x1OTE4OVx1OWE1Zlx1OWRmMlx1NTA3NFx1NGVjNFx1NTNhMFx1NjBmYlx1NmUyY1x1NWM2''@;'; put 'put ''NFx1NGY4OFx1NTAyNFx1NTVlNFx1NWNkOVx1NWU1Zlx1NjA2NVx1Njg5NFx1NmNiYlx1NmRjNFx1NzFiZVx1NzVkNFx1NzVmNFx1NzY2MVx1N2ExYVx1N2E0OVx1N2RjN1x1N2RmYlx1N2Y2ZVx1ODFmNFx1ODZhOVx1OGYxY1x1OTZjOVx1OTliM1x1OWY1Mlx1NTI0N1x1NTJjNVx1OThlZFx1''@;'; put 'put ''ODlhYVx1NGUwM1x1NjdkMlx1NmYwNlx1NGZiNVx1NWJlMlx1Njc5NVx1NmM4OFx1NmQ3OFx1NzQxYlx1NzgyN1x1OTFkZFx1OTM3Y1x1ODdjNFx1NzllNFx1N2EzMVx1NWZlYlx1NGVkNlx1NTRhNFx1NTUzZVx1NThhZVx1NTlhNVx1NjBmMFx1NjI1M1x1NjJkNlx1NjczNlx1Njk1NVx1ODIz''@;'; put 'put ''NVx1OTY0MFx1OTliMVx1OTlkZFx1NTAyY1x1NTM1M1x1NTU0NFx1NTc3Y1x1ZmEwMVx1NjI1OFx1ZmEwMlx1NjRlMlx1NjY2Ylx1NjdkZFx1NmZjMVx1NmZlZlx1NzQyMlx1NzQzOFx1OGExN1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0Nl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQ2''@;'; put 'put ''XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0Nl1bcF1dPTYyOTc2K3AsYls2Mjk3NitwXT1fWzI0Nl1bcF0pO2ZvcihfWzI0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTQzOFx1NTQ1MVx1NTYwNlx1NTc2Nlx1NWY0OFx1NjE5YVx1NmI0ZVx1NzA1OFx1NzBhZFx1N2RiYlx1OGE5NVx1NTk2YVx1ODEyYlx1NjNhMlx1NzcwOFx1ODAzZFx1OGNhYVx1NTg1NFx1NjQy''@;'; put 'put ''ZFx1NjliYlx1NWI5NVx1NWUxMVx1NmU2Zlx1ZmEwM1x1ODU2OVx1NTE0Y1x1NTNmMFx1NTkyYVx1NjAyMFx1NjE0Ylx1NmI4Nlx1NmM3MFx1NmNmMFx1N2IxZVx1ODBjZVx1ODJkNFx1OGRjNlx1OTBiMFx1OThiMVx1ZmEwNFx1NjRjN1x1NmZhNFx1NjQ5MVx1NjUwNFx1NTE0ZVx1NTQxMFx1''@;'; put 'put ''NTcxZlx1OGEwZVx1NjE1Zlx1Njg3Nlx1ZmEwNVx1NzVkYlx1N2I1Mlx1N2Q3MVx1OTAxYVx1NTgwNlx1NjljY1x1ODE3Zlx1ODkyYVx1OTAwMFx1OTgzOVx1NTA3OFx1NTk1N1x1NTlhY1x1NjI5NVx1OTAwZlx1OWIyYVx1NjE1ZFx1NzI3OVx1OTVkNlx1NTc2MVx1NWE0Nlx1NWRmNFx1NjI4''@;'; put 'put ''YVx1NjRhZFx1NjRmYVx1Njc3N1x1NmNlMlx1NmQzZVx1NzIyY1x1NzQzNlx1NzgzNFx1N2Y3N1x1ODJhZFx1OGRkYlx1OTgxN1x1NTIyNFx1NTc0Mlx1Njc3Zlx1NzI0OFx1NzRlM1x1OGNhOVx1OGZhNlx1OTIxMVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0N10ubGVuZ3RoOysrcCk2''@;'; put 'put ''NTUzMyE9PV9bMjQ3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0N11bcF1dPTYzMjMyK3AsYls2MzIzMitwXT1fWzI0N11bcF0pO2ZvcihfWzI0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTYyYVx1NTE2Ylx1NTNlZFx1NjM0Y1x1NGY2OVx1NTUwNFx1NjA5Nlx1NjU1N1x1NmM5Ylx1NmQ3Zlx1NzI0Y1x1NzJmZFx1N2ExN1x1ODk4N1x1OGM5ZFx1NWY2ZFx1NmY4''@;'; put 'put ''ZVx1NzBmOVx1ODFhOFx1NjEwZVx1NGZiZlx1NTA0Zlx1NjI0MVx1NzI0N1x1N2JjN1x1N2RlOFx1N2ZlOVx1OTA0ZFx1OTdhZFx1OWExOVx1OGNiNlx1NTc2YVx1NWU3M1x1NjdiMFx1ODQwZFx1OGE1NVx1NTQyMFx1NWIxNlx1NWU2M1x1NWVlMlx1NWYwYVx1NjU4M1x1ODBiYVx1ODUzZFx1''@;'; put 'put ''OTU4OVx1OTY1Ylx1NGY0OFx1NTMwNVx1NTMwZFx1NTMwZlx1NTQ4Nlx1NTRmYVx1NTcwM1x1NWUwM1x1NjAxNlx1NjI5Ylx1NjJiMVx1NjM1NVx1ZmEwNlx1NmNlMVx1NmQ2Nlx1NzViMVx1NzgzMlx1ODBkZVx1ODEyZlx1ODJkZVx1ODQ2MVx1ODRiMlx1ODg4ZFx1ODkxMlx1OTAwYlx1OTJl''@;'; put 'put ''YVx1OThmZFx1OWI5MVx1NWU0NVx1NjZiNFx1NjZkZFx1NzAxMVx1NzIwNlx1ZmEwN1x1NGZmNVx1NTI3ZFx1NWY2YVx1NjE1M1x1Njc1M1x1NmExOVx1NmYwMlx1NzRlMlx1Nzk2OFx1ODg2OFx1OGM3OVx1OThjN1x1OThjNFx1OWE0M1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0OF0u''@;'; put 'put ''bGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQ4XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0OF1bcF1dPTYzNDg4K3AsYls2MzQ4OCtwXT1fWzI0OF1bcF0pO2ZvcihfWzI0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRjMVx1N2ExZlx1Njk1M1x1OGFmN1x1OGM0YVx1OThhOFx1OTlhZVx1NWY3Y1x1NjJhYlx1NzViMlx1NzZhZVx1ODhhYlx1OTA3Zlx1OTY0Mlx1NTMz''@;'; put 'put ''OVx1NWYzY1x1NWZjNVx1NmNjY1x1NzNjY1x1NzU2Mlx1NzU4Ylx1N2I0Nlx1ODJmZVx1OTk5ZFx1NGU0Zlx1OTAzY1x1NGUwYlx1NGY1NVx1NTNhNlx1NTkwZlx1NWVjOFx1NjYzMFx1NmNiM1x1NzQ1NVx1ODM3N1x1ODc2Nlx1OGNjMFx1OTA1MFx1OTcxZVx1OWMxNVx1NThkMVx1NWI3OFx1''@;'; put 'put ''ODY1MFx1OGIxNFx1OWRiNFx1NWJkMlx1NjA2OFx1NjA4ZFx1NjVmMVx1NmM1N1x1NmYyMlx1NmZhM1x1NzAxYVx1N2Y1NVx1N2ZmMFx1OTU5MVx1OTU5Mlx1OTY1MFx1OTdkM1x1NTI3Mlx1OGY0NFx1NTFmZFx1NTQyYlx1NTRiOFx1NTU2M1x1NTU4YVx1NmFiYlx1NmRiNVx1N2RkOFx1ODI2''@;'; put 'put ''Nlx1OTI5Y1x1OTY3N1x1OWU3OVx1NTQwOFx1NTRjOFx1NzZkMlx1ODZlNFx1OTVhNFx1OTVkNFx1OTY1Y1x1NGVhMlx1NGYwOVx1NTllZVx1NWFlNlx1NWRmN1x1NjA1Mlx1NjI5N1x1Njc2ZFx1Njg0MVx1NmM4Nlx1NmUyZlx1N2YzOFx1ODA5Ylx1ODIyYVx1ZmZmZCIuc3BsaXQoIiIpLHA9''@;'; put 'put ''MDtwIT1fWzI0OV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQ5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0OV1bcF1dPTYzNzQ0K3AsYls2Mzc0NCtwXT1fWzI0OV1bcF0pO2ZvcihfWzI1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmEwOFx1ZmEwOVx1OTgwNVx1NGVhNVx1NTA1NVx1NTRiM1x1NTc5M1x1NTk1YVx1NWI2OVx1NWJiM1x1NjFjOFx1Njk3N1x1NmQ3''@;'; put 'put ''N1x1NzAyM1x1ODdmOVx1ODllM1x1OGE3Mlx1OGFlN1x1OTA4Mlx1OTllZFx1OWFiOFx1NTJiZVx1NjgzOFx1NTAxNlx1NWU3OFx1Njc0Zlx1ODM0N1x1ODg0Y1x1NGVhYlx1NTQxMVx1NTZhZVx1NzNlNlx1OTExNVx1OTdmZlx1OTkwOVx1OTk1N1x1OTk5OVx1NTY1M1x1NTg5Zlx1ODY1Ylx1''@;'; put 'put ''OGEzMVx1NjFiMlx1NmFmNlx1NzM3Ylx1OGVkMlx1NmI0N1x1OTZhYVx1OWE1N1x1NTk1NVx1NzIwMFx1OGQ2Ylx1OTc2OVx1NGZkNFx1NWNmNFx1NWYyNlx1NjFmOFx1NjY1Ylx1NmNlYlx1NzBhYlx1NzM4NFx1NzNiOVx1NzNmZVx1NzcyOVx1Nzc0ZFx1N2Q0M1x1N2Q2Mlx1N2UyM1x1ODIz''@;'; put 'put ''N1x1ODg1Mlx1ZmEwYVx1OGNlMlx1OTI0OVx1OTg2Zlx1NWI1MVx1N2E3NFx1ODg0MFx1OTgwMVx1NWFjY1x1NGZlMFx1NTM1NFx1NTkzZVx1NWNmZFx1NjMzZVx1NmQ3OVx1NzJmOVx1ODEwNVx1ODEwN1x1ODNhMlx1OTJjZlx1OTgzMFx1NGVhOFx1NTE0NFx1NTIxMVx1NTc4Ylx1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLHA9MDtwIT1fWzI1MF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjUwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI1MF1bcF1dPTY0ZTMrcCxiWzY0ZTMrcF09X1syNTBdW3BdKTtmb3IoX1syNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmNjJcdTZjYzJcdTZlY2VcdTcwMDVcdTcwNTBcdTcwYWZcdTcxOTJcdTczZTlcdTc0NjlcdTgzNGFcdTg3YTJc''@;'; put 'put ''dTg4NjFcdTkwMDhcdTkwYTJcdTkzYTNcdTk5YThcdTUxNmVcdTVmNTdcdTYwZTBcdTYxNjdcdTY2YjNcdTg1NTlcdThlNGFcdTkxYWZcdTk3OGJcdTRlNGVcdTRlOTJcdTU0N2NcdTU4ZDVcdTU4ZmFcdTU5N2RcdTVjYjVcdTVmMjdcdTYyMzZcdTYyNDhcdTY2MGFcdTY2NjdcdTZiZWJcdTZk''@;'; put 'put ''NjlcdTZkY2ZcdTZlNTZcdTZlZjhcdTZmOTRcdTZmZTBcdTZmZTlcdTcwNWRcdTcyZDBcdTc0MjVcdTc0NWFcdTc0ZTBcdTc2OTNcdTc5NWNcdTdjY2FcdTdlMWVcdTgwZTFcdTgyYTZcdTg0NmJcdTg0YmZcdTg2NGVcdTg2NWZcdTg3NzRcdThiNzdcdThjNmFcdTkzYWNcdTk4MDBcdTk4NjVc''@;'; put 'put ''dTYwZDFcdTYyMTZcdTkxNzdcdTVhNWFcdTY2MGZcdTZkZjdcdTZlM2VcdTc0M2ZcdTliNDJcdTVmZmRcdTYwZGFcdTdiMGZcdTU0YzRcdTVmMThcdTZjNWVcdTZjZDNcdTZkMmFcdTcwZDhcdTdkMDVcdTg2NzlcdThhMGNcdTlkM2JcdTUzMTZcdTU0OGNcdTViMDVcdTZhM2FcdTcwNmJcdTc1''@;'; put 'put ''NzVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNTFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI1MV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syNTFdW3BdXT02NDI1NitwLGJbNjQyNTYrcF09X1syNTFdW3BdKTtmb3IoX1syNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5OGRcdTc5YmVcdTgyYjFcdTgzZWZcdThhNzFcdThiNDFcdThjYThcdTk3NzRcdWZhMGJc''@;'; put 'put ''dTY0ZjRcdTY1MmJcdTc4YmFcdTc4YmJcdTdhNmJcdTRlMzhcdTU1OWFcdTU5NTBcdTViYTZcdTVlN2JcdTYwYTNcdTYzZGJcdTZiNjFcdTY2NjVcdTY4NTNcdTZlMTlcdTcxNjVcdTc0YjBcdTdkMDhcdTkwODRcdTlhNjlcdTljMjVcdTZkM2JcdTZlZDFcdTczM2VcdThjNDFcdTk1Y2FcdTUx''@;'; put 'put ''ZjBcdTVlNGNcdTVmYThcdTYwNGRcdTYwZjZcdTYxMzBcdTYxNGNcdTY2NDNcdTY2NDRcdTY5YTVcdTZjYzFcdTZlNWZcdTZlYzlcdTZmNjJcdTcxNGNcdTc0OWNcdTc2ODdcdTdiYzFcdTdjMjdcdTgzNTJcdTg3NTdcdTkwNTFcdTk2OGRcdTllYzNcdTUzMmZcdTU2ZGVcdTVlZmJcdTVmOGFc''@;'; put 'put ''dTYwNjJcdTYwOTRcdTYxZjdcdTY2NjZcdTY3MDNcdTZhOWNcdTZkZWVcdTZmYWVcdTcwNzBcdTczNmFcdTdlNmFcdTgxYmVcdTgzMzRcdTg2ZDRcdThhYThcdThjYzRcdTUyODNcdTczNzJcdTViOTZcdTZhNmJcdTk0MDRcdTU0ZWVcdTU2ODZcdTViNWRcdTY1NDhcdTY1ODVcdTY2YzlcdTY4''@;'; put 'put ''OWZcdTZkOGRcdTZkYzZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNTJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI1Ml1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syNTJdW3BdXT02NDUxMitwLGJbNjQ1MTIrcF09X1syNTJdW3BdKTtmb3IoX1syNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcyM2JcdTgwYjRcdTkxNzVcdTlhNGRcdTRmYWZcdTUwMTlcdTUzOWFc''@;'; put 'put ''dTU0MGVcdTU0M2NcdTU1ODlcdTU1YzVcdTVlM2ZcdTVmOGNcdTY3M2RcdTcxNjZcdTczZGRcdTkwMDVcdTUyZGJcdTUyZjNcdTU4NjRcdTU4Y2VcdTcxMDRcdTcxOGZcdTcxZmJcdTg1YjBcdThhMTNcdTY2ODhcdTg1YThcdTU1YTdcdTY2ODRcdTcxNGFcdTg0MzFcdTUzNDlcdTU1OTlcdTZi''@;'; put 'put ''YzFcdTVmNTlcdTVmYmRcdTYzZWVcdTY2ODlcdTcxNDdcdThhZjFcdThmMWRcdTllYmVcdTRmMTFcdTY0M2FcdTcwY2JcdTc1NjZcdTg2NjdcdTYwNjRcdThiNGVcdTlkZjhcdTUxNDdcdTUxZjZcdTUzMDhcdTZkMzZcdTgwZjhcdTllZDFcdTY2MTVcdTZiMjNcdTcwOThcdTc1ZDVcdTU0MDNc''@;'; put 'put ''dTVjNzlcdTdkMDdcdThhMTZcdTZiMjBcdTZiM2RcdTZiNDZcdTU0MzhcdTYwNzBcdTZkM2RcdTdmZDVcdTgyMDhcdTUwZDZcdTUxZGVcdTU1OWNcdTU2NmJcdTU2Y2RcdTU5ZWNcdTViMDlcdTVlMGNcdTYxOTlcdTYxOThcdTYyMzFcdTY2NWVcdTY2ZTZcdTcxOTlcdTcxYjlcdTcxYmFcdTcy''@;'; put 'put ''YTdcdTc5YTdcdTdhMDBcdTdmYjJcdThhNzBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNTNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI1M11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syNTNdW3BdXT02NDc2OCtwLGJbNjQ3NjgrcF09X1syNTNdW3BdKTtyZXR1cm57ZW5jOkksZGVjOmJ9''@;'; put 'put ''fSgpLFhbOTUwXT1mdW5jdGlvbigpe3ZhciBwLGI9W10sST17fSxfPVtdO2ZvcihfWzBdPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4''@;'; put 'put ''MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzBdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMF1bcF1dPTArcCxiWzArcF09X1swXVtwXSk7Zm9yKF9bMTYxXT0iXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDAwXHVmZjBjXHUzMDAxXHUzMDAyXHVmZjBlXHUyMDI3XHVmZjFiXHVmZjFhXHVmZjFmXHVmZjAxXHVmZTMwXHUyMDI2XHUyMDI1XHVmZTUwXHVmZTUxXHVmZTUyXHhiN1x1ZmU1NFx1ZmU1NVx1ZmU1Nlx1''@;'; put 'put ''ZmU1N1x1ZmY1Y1x1MjAxM1x1ZmUzMVx1MjAxNFx1ZmUzM1x1MjU3NFx1ZmUzNFx1ZmU0Zlx1ZmYwOFx1ZmYwOVx1ZmUzNVx1ZmUzNlx1ZmY1Ylx1ZmY1ZFx1ZmUzN1x1ZmUzOFx1MzAxNFx1MzAxNVx1ZmUzOVx1ZmUzYVx1MzAxMFx1MzAxMVx1ZmUzYlx1ZmUzY1x1MzAwYVx1MzAwYlx1ZmUz''@;'; put 'put ''ZFx1ZmUzZVx1MzAwOFx1MzAwOVx1ZmUzZlx1ZmU0MFx1MzAwY1x1MzAwZFx1ZmU0MVx1ZmU0Mlx1MzAwZVx1MzAwZlx1ZmU0M1x1ZmU0NFx1ZmU1OVx1ZmU1YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmU1Ylx1ZmU1Y1x1ZmU1ZFx1ZmU1ZVx1MjAxOFx1MjAx''@;'; put 'put ''OVx1MjAxY1x1MjAxZFx1MzAxZFx1MzAxZVx1MjAzNVx1MjAzMlx1ZmYwM1x1ZmYwNlx1ZmYwYVx1MjAzYlx4YTdcdTMwMDNcdTI1Y2JcdTI1Y2ZcdTI1YjNcdTI1YjJcdTI1Y2VcdTI2MDZcdTI2MDVcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YmRcdTI1YmNcdTMyYTNcdTIxMDVceGFm''@;'; put 'put ''XHVmZmUzXHVmZjNmXHUwMmNkXHVmZTQ5XHVmZTRhXHVmZTRkXHVmZTRlXHVmZTRiXHVmZTRjXHVmZTVmXHVmZTYwXHVmZTYxXHVmZjBiXHVmZjBkXHhkN1x4ZjdceGIxXHUyMjFhXHVmZjFjXHVmZjFlXHVmZjFkXHUyMjY2XHUyMjY3XHUyMjYwXHUyMjFlXHUyMjUyXHUyMjYxXHVmZTYyXHVm''@;'; put 'put ''ZTYzXHVmZTY0XHVmZTY1XHVmZTY2XHVmZjVlXHUyMjI5XHUyMjJhXHUyMmE1XHUyMjIwXHUyMjFmXHUyMmJmXHUzM2QyXHUzM2QxXHUyMjJiXHUyMjJlXHUyMjM1XHUyMjM0XHUyNjQwXHUyNjQyXHUyMjk1XHUyMjk5XHUyMTkxXHUyMTkzXHUyMTkwXHUyMTkyXHUyMTk2XHUyMTk3XHUyMTk5''@;'; put 'put ''XHUyMTk4XHUyMjI1XHUyMjIzXHVmZjBmXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTYxXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjFdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTYxXVtwXV09NDEyMTYrcCxiWzQxMjE2K3BdPV9bMTYxXVtwXSk7Zm9yKF9bMTYyXT0iXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjNjXHUyMjE1XHVmZTY4XHVmZjA0XHVmZmU1XHUzMDEyXHVmZmUwXHVmZmUxXHVmZjA1XHVmZjIwXHUyMTAzXHUyMTA5XHVmZTY5XHVmZTZhXHVmZTZiXHUzM2Q1XHUzMzljXHUzMzlkXHUzMzllXHUzM2Nl''@;'; put 'put ''XHUzM2ExXHUzMzhlXHUzMzhmXHUzM2M0XHhiMFx1NTE1OVx1NTE1Ylx1NTE1ZVx1NTE1ZFx1NTE2MVx1NTE2M1x1NTVlN1x1NzRlOVx1N2NjZVx1MjU4MVx1MjU4Mlx1MjU4M1x1MjU4NFx1MjU4NVx1MjU4Nlx1MjU4N1x1MjU4OFx1MjU4Zlx1MjU4ZVx1MjU4ZFx1MjU4Y1x1MjU4Ylx1MjU4''@;'; put 'put ''YVx1MjU4OVx1MjUzY1x1MjUzNFx1MjUyY1x1MjUyNFx1MjUxY1x1MjU5NFx1MjUwMFx1MjUwMlx1MjU5NVx1MjUwY1x1MjUxMFx1MjUxNFx1MjUxOFx1MjU2ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjU2ZVx1MjU3MFx1MjU2Zlx1MjU1MFx1MjU1ZVx1MjU2''@;'; put 'put ''YVx1MjU2MVx1MjVlMlx1MjVlM1x1MjVlNVx1MjVlNFx1MjU3MVx1MjU3Mlx1MjU3M1x1ZmYxMFx1ZmYxMVx1ZmYxMlx1ZmYxM1x1ZmYxNFx1ZmYxNVx1ZmYxNlx1ZmYxN1x1ZmYxOFx1ZmYxOVx1MjE2MFx1MjE2MVx1MjE2Mlx1MjE2M1x1MjE2NFx1MjE2NVx1MjE2Nlx1MjE2N1x1MjE2OFx1''@;'; put 'put ''MjE2OVx1MzAyMVx1MzAyMlx1MzAyM1x1MzAyNFx1MzAyNVx1MzAyNlx1MzAyN1x1MzAyOFx1MzAyOVx1NTM0MVx1NTM0NFx1NTM0NVx1ZmYyMVx1ZmYyMlx1ZmYyM1x1ZmYyNFx1ZmYyNVx1ZmYyNlx1ZmYyN1x1ZmYyOFx1ZmYyOVx1ZmYyYVx1ZmYyYlx1ZmYyY1x1ZmYyZFx1ZmYyZVx1ZmYy''@;'; put 'put ''Zlx1ZmYzMFx1ZmYzMVx1ZmYzMlx1ZmYzM1x1ZmYzNFx1ZmYzNVx1ZmYzNlx1ZmYzN1x1ZmYzOFx1ZmYzOVx1ZmYzYVx1ZmY0MVx1ZmY0Mlx1ZmY0M1x1ZmY0NFx1ZmY0NVx1ZmY0Nlx1ZmY0N1x1ZmY0OFx1ZmY0OVx1ZmY0YVx1ZmY0Ylx1ZmY0Y1x1ZmY0ZFx1ZmY0ZVx1ZmY0Zlx1ZmY1MFx1''@;'; put 'put ''ZmY1MVx1ZmY1Mlx1ZmY1M1x1ZmY1NFx1ZmY1NVx1ZmY1Nlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTYyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2Ml1bcF1dPTQxNDcyK3AsYls0MTQ3MitwXT1fWzE2Ml1bcF0pO2ZvcihfWzE2M109''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmY1N1x1ZmY1OFx1ZmY1OVx1ZmY1YVx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1''@;'; put 'put ''MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNj''@;'; put 'put ''M1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1MzEwNVx1MzEwNlx1MzEwN1x1MzEwOFx1MzEwOVx1MzEwYVx1MzEwYlx1MzEwY1x1MzEwZFx1MzEwZVx1MzEwZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzExMFx1MzExMVx1MzExMlx1MzEx''@;'; put 'put ''M1x1MzExNFx1MzExNVx1MzExNlx1MzExN1x1MzExOFx1MzExOVx1MzExYVx1MzExYlx1MzExY1x1MzExZFx1MzExZVx1MzExZlx1MzEyMFx1MzEyMVx1MzEyMlx1MzEyM1x1MzEyNFx1MzEyNVx1MzEyNlx1MzEyN1x1MzEyOFx1MzEyOVx1MDJkOVx1MDJjOVx1MDJjYVx1MDJjN1x1MDJjYlx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjBhY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2M10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTYzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2M11bcF1dPTQxNzI4K3AsYls0MTcyOCtwXT1fWzE2M11bcF0p''@;'; put 'put ''O2ZvcihfWzE2NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUwMFx1NGU1OVx1NGUwMVx1NGUwM1x1NGU0M1x1NGU1ZFx1NGU4Nlx1NGU4Y1x1NGViYVx1NTEzZlx1NTE2NVx1NTE2Ylx1NTFlMFx1NTIwMFx1NTIwMVx1NTI5Ylx1''@;'; put 'put ''NTMxNVx1NTM0MVx1NTM1Y1x1NTNjOFx1NGUwOVx1NGUwYlx1NGUwOFx1NGUwYVx1NGUyYlx1NGUzOFx1NTFlMVx1NGU0NVx1NGU0OFx1NGU1Zlx1NGU1ZVx1NGU4ZVx1NGVhMVx1NTE0MFx1NTIwM1x1NTJmYVx1NTM0M1x1NTNjOVx1NTNlM1x1NTcxZlx1NThlYlx1NTkxNVx1NTkyN1x1NTk3''@;'; put 'put ''M1x1NWI1MFx1NWI1MVx1NWI1M1x1NWJmOFx1NWMwZlx1NWMyMlx1NWMzOFx1NWM3MVx1NWRkZFx1NWRlNVx1NWRmMVx1NWRmMlx1NWRmM1x1NWRmZVx1NWU3Mlx1NWVmZVx1NWYwYlx1NWYxM1x1NjI0ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUxMVx1NGUx''@;'; put 'put ''MFx1NGUwZFx1NGUyZFx1NGUzMFx1NGUzOVx1NGU0Ylx1NWMzOVx1NGU4OFx1NGU5MVx1NGU5NVx1NGU5Mlx1NGU5NFx1NGVhMlx1NGVjMVx1NGVjMFx1NGVjM1x1NGVjNlx1NGVjN1x1NGVjZFx1NGVjYVx1NGVjYlx1NGVjNFx1NTE0M1x1NTE0MVx1NTE2N1x1NTE2ZFx1NTE2ZVx1NTE2Y1x1''@;'; put 'put ''NTE5N1x1NTFmNlx1NTIwNlx1NTIwN1x1NTIwOFx1NTJmYlx1NTJmZVx1NTJmZlx1NTMxNlx1NTMzOVx1NTM0OFx1NTM0N1x1NTM0NVx1NTM1ZVx1NTM4NFx1NTNjYlx1NTNjYVx1NTNjZFx1NThlY1x1NTkyOVx1NTkyYlx1NTkyYVx1NTkyZFx1NWI1NFx1NWMxMVx1NWMyNFx1NWMzYVx1NWM2''@;'; put 'put ''Zlx1NWRmNFx1NWU3Ylx1NWVmZlx1NWYxNFx1NWYxNVx1NWZjM1x1NjIwOFx1NjIzNlx1NjI0Ylx1NjI0ZVx1NjUyZlx1NjU4N1x1NjU5N1x1NjVhNFx1NjViOVx1NjVlNVx1NjZmMFx1NjcwOFx1NjcyOFx1NmIyMFx1NmI2Mlx1NmI3OVx1NmJjYlx1NmJkNFx1NmJkYlx1NmMwZlx1NmMzNFx1''@;'; put 'put ''NzA2Ylx1NzIyYVx1NzIzNlx1NzIzYlx1NzI0N1x1NzI1OVx1NzI1Ylx1NzJhY1x1NzM4Ylx1NGUxOVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2NF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTY0XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2NF1bcF1dPTQxOTg0K3AsYls0MTk4NCtw''@;'; put 'put ''XT1fWzE2NF1bcF0pO2ZvcihfWzE2NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUxNlx1NGUxNVx1NGUxNFx1NGUxOFx1NGUzYlx1NGU0ZFx1NGU0Zlx1NGU0ZVx1NGVlNVx1NGVkOFx1NGVkNFx1NGVkNVx1NGVkNlx1NGVkN1x1''@;'; put 'put ''NGVlM1x1NGVlNFx1NGVkOVx1NGVkZVx1NTE0NVx1NTE0NFx1NTE4OVx1NTE4YVx1NTFhY1x1NTFmOVx1NTFmYVx1NTFmOFx1NTIwYVx1NTJhMFx1NTI5Zlx1NTMwNVx1NTMwNlx1NTMxN1x1NTMxZFx1NGVkZlx1NTM0YVx1NTM0OVx1NTM2MVx1NTM2MFx1NTM2Zlx1NTM2ZVx1NTNiYlx1NTNl''@;'; put 'put ''Zlx1NTNlNFx1NTNmM1x1NTNlY1x1NTNlZVx1NTNlOVx1NTNlOFx1NTNmY1x1NTNmOFx1NTNmNVx1NTNlYlx1NTNlNlx1NTNlYVx1NTNmMlx1NTNmMVx1NTNmMFx1NTNlNVx1NTNlZFx1NTNmYlx1NTZkYlx1NTZkYVx1NTkxNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1NTkyZVx1NTkzMVx1NTk3NFx1NTk3Nlx1NWI1NVx1NWI4M1x1NWMzY1x1NWRlOFx1NWRlN1x1NWRlNlx1NWUwMlx1NWUwM1x1NWU3M1x1NWU3Y1x1NWYwMVx1NWYxOFx1NWYxN1x1NWZjNVx1NjIwYVx1NjI1M1x1NjI1NFx1NjI1Mlx1NjI1MVx1NjVhNVx1NjVlNlx1NjcyZVx1NjcyY1x1''@;'; put 'put ''NjcyYVx1NjcyYlx1NjcyZFx1NmI2M1x1NmJjZFx1NmMxMVx1NmMxMFx1NmMzOFx1NmM0MVx1NmM0MFx1NmMzZVx1NzJhZlx1NzM4NFx1NzM4OVx1NzRkY1x1NzRlNlx1NzUxOFx1NzUxZlx1NzUyOFx1NzUyOVx1NzUzMFx1NzUzMVx1NzUzMlx1NzUzM1x1NzU4Ylx1NzY3ZFx1NzZhZVx1NzZi''@;'; put 'put ''Zlx1NzZlZVx1NzdkYlx1NzdlMlx1NzdmM1x1NzkzYVx1NzliZVx1N2E3NFx1N2FjYlx1NGUxZVx1NGUxZlx1NGU1Mlx1NGU1M1x1NGU2OVx1NGU5OVx1NGVhNFx1NGVhNlx1NGVhNVx1NGVmZlx1NGYwOVx1NGYxOVx1NGYwYVx1NGYxNVx1NGYwZFx1NGYxMFx1NGYxMVx1NGYwZlx1NGVmMlx1''@;'; put 'put ''NGVmNlx1NGVmYlx1NGVmMFx1NGVmM1x1NGVmZFx1NGYwMVx1NGYwYlx1NTE0OVx1NTE0N1x1NTE0Nlx1NTE0OFx1NTE2OFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2NV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTY1XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2NV1bcF1dPTQyMjQw''@;'; put 'put ''K3AsYls0MjI0MCtwXT1fWzE2NV1bcF0pO2ZvcihfWzE2Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTE3MVx1NTE4ZFx1NTFiMFx1NTIxN1x1NTIxMVx1NTIxMlx1NTIwZVx1NTIxNlx1NTJhM1x1NTMwOFx1NTMyMVx1NTMyMFx1''@;'; put 'put ''NTM3MFx1NTM3MVx1NTQwOVx1NTQwZlx1NTQwY1x1NTQwYVx1NTQxMFx1NTQwMVx1NTQwYlx1NTQwNFx1NTQxMVx1NTQwZFx1NTQwOFx1NTQwM1x1NTQwZVx1NTQwNlx1NTQxMlx1NTZlMFx1NTZkZVx1NTZkZFx1NTczM1x1NTczMFx1NTcyOFx1NTcyZFx1NTcyY1x1NTcyZlx1NTcyOVx1NTkx''@;'; put 'put ''OVx1NTkxYVx1NTkzN1x1NTkzOFx1NTk4NFx1NTk3OFx1NTk4M1x1NTk3ZFx1NTk3OVx1NTk4Mlx1NTk4MVx1NWI1N1x1NWI1OFx1NWI4N1x1NWI4OFx1NWI4NVx1NWI4OVx1NWJmYVx1NWMxNlx1NWM3OVx1NWRkZVx1NWUwNlx1NWU3Nlx1NWU3NFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1NWYwZlx1NWYxYlx1NWZkOVx1NWZkNlx1NjIwZVx1NjIwY1x1NjIwZFx1NjIxMFx1NjI2M1x1NjI1Ylx1NjI1OFx1NjUzNlx1NjVlOVx1NjVlOFx1NjVlY1x1NjVlZFx1NjZmMlx1NjZmM1x1NjcwOVx1NjczZFx1NjczNFx1NjczMVx1NjczNVx1NmIyMVx1NmI2NFx1''@;'; put 'put ''NmI3Ylx1NmMxNlx1NmM1ZFx1NmM1N1x1NmM1OVx1NmM1Zlx1NmM2MFx1NmM1MFx1NmM1NVx1NmM2MVx1NmM1Ylx1NmM0ZFx1NmM0ZVx1NzA3MFx1NzI1Zlx1NzI1ZFx1NzY3ZVx1N2FmOVx1N2M3M1x1N2NmOFx1N2YzNlx1N2Y4YVx1N2ZiZFx1ODAwMVx1ODAwM1x1ODAwY1x1ODAxMlx1ODAz''@;'; put 'put ''M1x1ODA3Zlx1ODA4OVx1ODA4Ylx1ODA4Y1x1ODFlM1x1ODFlYVx1ODFmM1x1ODFmY1x1ODIwY1x1ODIxYlx1ODIxZlx1ODI2ZVx1ODI3Mlx1ODI3ZVx1ODY2Ylx1ODg0MFx1ODg0Y1x1ODg2M1x1ODk3Zlx1OTYyMVx1NGUzMlx1NGVhOFx1NGY0ZFx1NGY0Zlx1NGY0N1x1NGY1N1x1NGY1ZVx1''@;'; put 'put ''NGYzNFx1NGY1Ylx1NGY1NVx1NGYzMFx1NGY1MFx1NGY1MVx1NGYzZFx1NGYzYVx1NGYzOFx1NGY0M1x1NGY1NFx1NGYzY1x1NGY0Nlx1NGY2M1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2Nl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTY2XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2''@;'; put 'put ''Nl1bcF1dPTQyNDk2K3AsYls0MjQ5NitwXT1fWzE2Nl1bcF0pO2ZvcihfWzE2N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGY1Y1x1NGY2MFx1NGYyZlx1NGY0ZVx1NGYzNlx1NGY1OVx1NGY1ZFx1NGY0OFx1NGY1YVx1NTE0Y1x1''@;'; put 'put ''NTE0Ylx1NTE0ZFx1NTE3NVx1NTFiNlx1NTFiN1x1NTIyNVx1NTIyNFx1NTIyOVx1NTIyYVx1NTIyOFx1NTJhYlx1NTJhOVx1NTJhYVx1NTJhY1x1NTMyM1x1NTM3M1x1NTM3NVx1NTQxZFx1NTQyZFx1NTQxZVx1NTQzZVx1NTQyNlx1NTQ0ZVx1NTQyN1x1NTQ0Nlx1NTQ0M1x1NTQzM1x1NTQ0''@;'; put 'put ''OFx1NTQ0Mlx1NTQxYlx1NTQyOVx1NTQ0YVx1NTQzOVx1NTQzYlx1NTQzOFx1NTQyZVx1NTQzNVx1NTQzNlx1NTQyMFx1NTQzY1x1NTQ0MFx1NTQzMVx1NTQyYlx1NTQxZlx1NTQyY1x1NTZlYVx1NTZmMFx1NTZlNFx1NTZlYlx1NTc0YVx1NTc1MVx1NTc0MFx1NTc0ZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTc0N1x1NTc0ZVx1NTczZVx1NTc1MFx1NTc0Zlx1NTczYlx1NThlZlx1NTkzZVx1NTk5ZFx1NTk5Mlx1NTlhOFx1NTk5ZVx1NTlhM1x1NTk5OVx1NTk5Nlx1NTk4ZFx1NTlhNFx1NTk5M1x1NTk4YVx1NTlhNVx1NWI1ZFx1NWI1Y1x1NWI1YVx1''@;'; put 'put ''NWI1Ylx1NWI4Y1x1NWI4Ylx1NWI4Zlx1NWMyY1x1NWM0MFx1NWM0MVx1NWMzZlx1NWMzZVx1NWM5MFx1NWM5MVx1NWM5NFx1NWM4Y1x1NWRlYlx1NWUwY1x1NWU4Zlx1NWU4N1x1NWU4YVx1NWVmN1x1NWYwNFx1NWYxZlx1NWY2NFx1NWY2Mlx1NWY3N1x1NWY3OVx1NWZkOFx1NWZjY1x1NWZk''@;'; put 'put ''N1x1NWZjZFx1NWZmMVx1NWZlYlx1NWZmOFx1NWZlYVx1NjIxMlx1NjIxMVx1NjI4NFx1NjI5N1x1NjI5Nlx1NjI4MFx1NjI3Nlx1NjI4OVx1NjI2ZFx1NjI4YVx1NjI3Y1x1NjI3ZVx1NjI3OVx1NjI3M1x1NjI5Mlx1NjI2Zlx1NjI5OFx1NjI2ZVx1NjI5NVx1NjI5M1x1NjI5MVx1NjI4Nlx1''@;'; put 'put ''NjUzOVx1NjUzYlx1NjUzOFx1NjVmMVx1NjZmNFx1Njc1Zlx1Njc0ZVx1Njc0Zlx1Njc1MFx1Njc1MVx1Njc1Y1x1Njc1Nlx1Njc1ZVx1Njc0OVx1Njc0Nlx1Njc2MFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2N10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTY3XVtwXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoSVtfWzE2N11bcF1dPTQyNzUyK3AsYls0Mjc1MitwXT1fWzE2N11bcF0pO2ZvcihfWzE2OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njc1M1x1Njc1N1x1NmI2NVx1NmJjZlx1NmM0Mlx1NmM1ZVx1NmM5OVx1NmM4MVx1''@;'; put 'put ''NmM4OFx1NmM4OVx1NmM4NVx1NmM5Ylx1NmM2YVx1NmM3YVx1NmM5MFx1NmM3MFx1NmM4Y1x1NmM2OFx1NmM5Nlx1NmM5Mlx1NmM3ZFx1NmM4M1x1NmM3Mlx1NmM3ZVx1NmM3NFx1NmM4Nlx1NmM3Nlx1NmM4ZFx1NmM5NFx1NmM5OFx1NmM4Mlx1NzA3Nlx1NzA3Y1x1NzA3ZFx1NzA3OFx1NzI2''@;'; put 'put ''Mlx1NzI2MVx1NzI2MFx1NzJjNFx1NzJjMlx1NzM5Nlx1NzUyY1x1NzUyYlx1NzUzN1x1NzUzOFx1NzY4Mlx1NzZlZlx1NzdlM1x1NzljMVx1NzljMFx1NzliZlx1N2E3Nlx1N2NmYlx1N2Y1NVx1ODA5Nlx1ODA5M1x1ODA5ZFx1ODA5OFx1ODA5Ylx1ODA5YVx1ODBiMlx1ODI2Zlx1ODI5Mlx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODI4Ylx1ODI4ZFx1ODk4Ylx1ODlkMlx1OGEwMFx1OGMzN1x1OGM0Nlx1OGM1NVx1OGM5ZFx1OGQ2NFx1OGQ3MFx1OGRiM1x1OGVhYlx1OGVjYVx1OGY5Ylx1OGZiMFx1OGZjMlx1OGZjNlx1OGZjNVx1OGZjNFx1NWRlMVx1''@;'; put 'put ''OTA5MVx1OTBhMlx1OTBhYVx1OTBhNlx1OTBhM1x1OTE0OVx1OTFjNlx1OTFjY1x1OTYzMlx1OTYyZVx1OTYzMVx1OTYyYVx1OTYyY1x1NGUyNlx1NGU1Nlx1NGU3M1x1NGU4Ylx1NGU5Ylx1NGU5ZVx1NGVhYlx1NGVhY1x1NGY2Zlx1NGY5ZFx1NGY4ZFx1NGY3M1x1NGY3Zlx1NGY2Y1x1NGY5''@;'; put 'put ''Ylx1NGY4Ylx1NGY4Nlx1NGY4M1x1NGY3MFx1NGY3NVx1NGY4OFx1NGY2OVx1NGY3Ylx1NGY5Nlx1NGY3ZVx1NGY4Zlx1NGY5MVx1NGY3YVx1NTE1NFx1NTE1Mlx1NTE1NVx1NTE2OVx1NTE3N1x1NTE3Nlx1NTE3OFx1NTFiZFx1NTFmZFx1NTIzYlx1NTIzOFx1NTIzN1x1NTIzYVx1NTIzMFx1''@;'; put 'put ''NTIyZVx1NTIzNlx1NTI0MVx1NTJiZVx1NTJiYlx1NTM1Mlx1NTM1NFx1NTM1M1x1NTM1MVx1NTM2Nlx1NTM3N1x1NTM3OFx1NTM3OVx1NTNkNlx1NTNkNFx1NTNkN1x1NTQ3M1x1NTQ3NVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2OF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTY4XVtw''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2OF1bcF1dPTQzMDA4K3AsYls0MzAwOCtwXT1fWzE2OF1bcF0pO2ZvcihfWzE2OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTQ5Nlx1NTQ3OFx1NTQ5NVx1NTQ4MFx1NTQ3Ylx1NTQ3N1x1''@;'; put 'put ''NTQ4NFx1NTQ5Mlx1NTQ4Nlx1NTQ3Y1x1NTQ5MFx1NTQ3MVx1NTQ3Nlx1NTQ4Y1x1NTQ5YVx1NTQ2Mlx1NTQ2OFx1NTQ4Ylx1NTQ3ZFx1NTQ4ZVx1NTZmYVx1NTc4M1x1NTc3N1x1NTc2YVx1NTc2OVx1NTc2MVx1NTc2Nlx1NTc2NFx1NTc3Y1x1NTkxY1x1NTk0OVx1NTk0N1x1NTk0OFx1NTk0''@;'; put 'put ''NFx1NTk1NFx1NTliZVx1NTliYlx1NTlkNFx1NTliOVx1NTlhZVx1NTlkMVx1NTljNlx1NTlkMFx1NTljZFx1NTljYlx1NTlkM1x1NTljYVx1NTlhZlx1NTliM1x1NTlkMlx1NTljNVx1NWI1Zlx1NWI2NFx1NWI2M1x1NWI5N1x1NWI5YVx1NWI5OFx1NWI5Y1x1NWI5OVx1NWI5Ylx1NWMxYVx1''@;'; put 'put ''NWM0OFx1NWM0NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWM0Nlx1NWNiN1x1NWNhMVx1NWNiOFx1NWNhOVx1NWNhYlx1NWNiMVx1NWNiM1x1NWUxOFx1NWUxYVx1NWUxNlx1NWUxNVx1NWUxYlx1NWUxMVx1NWU3OFx1NWU5YVx1NWU5N1x1NWU5Y1x1NWU5NVx1''@;'; put 'put ''NWU5Nlx1NWVmNlx1NWYyNlx1NWYyN1x1NWYyOVx1NWY4MFx1NWY4MVx1NWY3Zlx1NWY3Y1x1NWZkZFx1NWZlMFx1NWZmZFx1NWZmNVx1NWZmZlx1NjAwZlx1NjAxNFx1NjAyZlx1NjAzNVx1NjAxNlx1NjAyYVx1NjAxNVx1NjAyMVx1NjAyN1x1NjAyOVx1NjAyYlx1NjAxYlx1NjIxNlx1NjIx''@;'; put 'put ''NVx1NjIzZlx1NjIzZVx1NjI0MFx1NjI3Zlx1NjJjOVx1NjJjY1x1NjJjNFx1NjJiZlx1NjJjMlx1NjJiOVx1NjJkMlx1NjJkYlx1NjJhYlx1NjJkM1x1NjJkNFx1NjJjYlx1NjJjOFx1NjJhOFx1NjJiZFx1NjJiY1x1NjJkMFx1NjJkOVx1NjJjN1x1NjJjZFx1NjJiNVx1NjJkYVx1NjJiMVx1''@;'; put 'put ''NjJkOFx1NjJkNlx1NjJkN1x1NjJjNlx1NjJhY1x1NjJjZVx1NjUzZVx1NjVhN1x1NjViY1x1NjVmYVx1NjYxNFx1NjYxM1x1NjYwY1x1NjYwNlx1NjYwMlx1NjYwZVx1NjYwMFx1NjYwZlx1NjYxNVx1NjYwYVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2OV0ubGVuZ3RoOysrcCk2NTUz''@;'; put 'put ''MyE9PV9bMTY5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2OV1bcF1dPTQzMjY0K3AsYls0MzI2NCtwXT1fWzE2OV1bcF0pO2ZvcihfWzE3MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjYwN1x1NjcwZFx1NjcwYlx1Njc2ZFx1''@;'; put 'put ''Njc4Ylx1Njc5NVx1Njc3MVx1Njc5Y1x1Njc3M1x1Njc3N1x1Njc4N1x1Njc5ZFx1Njc5N1x1Njc2Zlx1Njc3MFx1Njc3Zlx1Njc4OVx1Njc3ZVx1Njc5MFx1Njc3NVx1Njc5YVx1Njc5M1x1Njc3Y1x1Njc2YVx1Njc3Mlx1NmIyM1x1NmI2Nlx1NmI2N1x1NmI3Zlx1NmMxM1x1NmMxYlx1NmNl''@;'; put 'put ''M1x1NmNlOFx1NmNmM1x1NmNiMVx1NmNjY1x1NmNlNVx1NmNiM1x1NmNiZFx1NmNiZVx1NmNiY1x1NmNlMlx1NmNhYlx1NmNkNVx1NmNkM1x1NmNiOFx1NmNjNFx1NmNiOVx1NmNjMVx1NmNhZVx1NmNkN1x1NmNjNVx1NmNmMVx1NmNiZlx1NmNiYlx1NmNlMVx1NmNkYlx1NmNjYVx1NmNhY1x1''@;'; put 'put ''NmNlZlx1NmNkY1x1NmNkNlx1NmNlMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzA5NVx1NzA4ZVx1NzA5Mlx1NzA4YVx1NzA5OVx1NzIyY1x1NzIyZFx1NzIzOFx1NzI0OFx1NzI2N1x1NzI2OVx1NzJjMFx1NzJjZVx1NzJkOVx1NzJkN1x1NzJkMFx1NzNhOVx1''@;'; put 'put ''NzNhOFx1NzM5Zlx1NzNhYlx1NzNhNVx1NzUzZFx1NzU5ZFx1NzU5OVx1NzU5YVx1NzY4NFx1NzZjMlx1NzZmMlx1NzZmNFx1NzdlNVx1NzdmZFx1NzkzZVx1Nzk0MFx1Nzk0MVx1NzljOVx1NzljOFx1N2E3YVx1N2E3OVx1N2FmYVx1N2NmZVx1N2Y1NFx1N2Y4Y1x1N2Y4Ylx1ODAwNVx1ODBi''@;'; put 'put ''YVx1ODBhNVx1ODBhMlx1ODBiMVx1ODBhMVx1ODBhYlx1ODBhOVx1ODBiNFx1ODBhYVx1ODBhZlx1ODFlNVx1ODFmZVx1ODIwZFx1ODJiM1x1ODI5ZFx1ODI5OVx1ODJhZFx1ODJiZFx1ODI5Zlx1ODJiOVx1ODJiMVx1ODJhY1x1ODJhNVx1ODJhZlx1ODJiOFx1ODJhM1x1ODJiMFx1ODJiZVx1''@;'; put 'put ''ODJiN1x1ODY0ZVx1ODY3MVx1NTIxZFx1ODg2OFx1OGVjYlx1OGZjZVx1OGZkNFx1OGZkMVx1OTBiNVx1OTBiOFx1OTBiMVx1OTBiNlx1OTFjN1x1OTFkMVx1OTU3N1x1OTU4MFx1OTYxY1x1OTY0MFx1OTYzZlx1OTYzYlx1OTY0NFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3MF0ubGVu''@;'; put 'put ''Z3RoOysrcCk2NTUzMyE9PV9bMTcwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3MF1bcF1dPTQzNTIwK3AsYls0MzUyMCtwXT1fWzE3MF1bcF0pO2ZvcihfWzE3MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY0Mlx1OTZiOVx1''@;'; put 'put ''OTZlOFx1OTc1Mlx1OTc1ZVx1NGU5Zlx1NGVhZFx1NGVhZVx1NGZlMVx1NGZiNVx1NGZhZlx1NGZiZlx1NGZlMFx1NGZkMVx1NGZjZlx1NGZkZFx1NGZjM1x1NGZiNlx1NGZkOFx1NGZkZlx1NGZjYVx1NGZkN1x1NGZhZVx1NGZkMFx1NGZjNFx1NGZjMlx1NGZkYVx1NGZjZVx1NGZkZVx1NGZi''@;'; put 'put ''N1x1NTE1N1x1NTE5Mlx1NTE5MVx1NTFhMFx1NTI0ZVx1NTI0M1x1NTI0YVx1NTI0ZFx1NTI0Y1x1NTI0Ylx1NTI0N1x1NTJjN1x1NTJjOVx1NTJjM1x1NTJjMVx1NTMwZFx1NTM1N1x1NTM3Ylx1NTM5YVx1NTNkYlx1NTRhY1x1NTRjMFx1NTRhOFx1NTRjZVx1NTRjOVx1NTRiOFx1NTRhNlx1''@;'; put 'put ''NTRiM1x1NTRjN1x1NTRjMlx1NTRiZFx1NTRhYVx1NTRjMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRjNFx1NTRjOFx1NTRhZlx1NTRhYlx1NTRiMVx1NTRiYlx1NTRhOVx1NTRhN1x1NTRiZlx1NTZmZlx1NTc4Mlx1NTc4Ylx1NTdhMFx1NTdhM1x1NTdhMlx1''@;'; put 'put ''NTdjZVx1NTdhZVx1NTc5M1x1NTk1NVx1NTk1MVx1NTk0Zlx1NTk0ZVx1NTk1MFx1NTlkY1x1NTlkOFx1NTlmZlx1NTllM1x1NTllOFx1NWEwM1x1NTllNVx1NTllYVx1NTlkYVx1NTllNlx1NWEwMVx1NTlmYlx1NWI2OVx1NWJhM1x1NWJhNlx1NWJhNFx1NWJhMlx1NWJhNVx1NWMwMVx1NWM0''@;'; put 'put ''ZVx1NWM0Zlx1NWM0ZFx1NWM0Ylx1NWNkOVx1NWNkMlx1NWRmN1x1NWUxZFx1NWUyNVx1NWUxZlx1NWU3ZFx1NWVhMFx1NWVhNlx1NWVmYVx1NWYwOFx1NWYyZFx1NWY2NVx1NWY4OFx1NWY4NVx1NWY4YVx1NWY4Ylx1NWY4N1x1NWY4Y1x1NWY4OVx1NjAxMlx1NjAxZFx1NjAyMFx1NjAyNVx1''@;'; put 'put ''NjAwZVx1NjAyOFx1NjA0ZFx1NjA3MFx1NjA2OFx1NjA2Mlx1NjA0Nlx1NjA0M1x1NjA2Y1x1NjA2Ylx1NjA2YVx1NjA2NFx1NjI0MVx1NjJkY1x1NjMxNlx1NjMwOVx1NjJmY1x1NjJlZFx1NjMwMVx1NjJlZVx1NjJmZFx1NjMwN1x1NjJmMVx1NjJmN1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtw''@;'; put 'put ''IT1fWzE3MV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTcxXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3MV1bcF1dPTQzNzc2K3AsYls0Mzc3NitwXT1fWzE3MV1bcF0pO2ZvcihfWzE3Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''NjJlZlx1NjJlY1x1NjJmZVx1NjJmNFx1NjMxMVx1NjMwMlx1NjUzZlx1NjU0NVx1NjVhYlx1NjViZFx1NjVlMlx1NjYyNVx1NjYyZFx1NjYyMFx1NjYyN1x1NjYyZlx1NjYxZlx1NjYyOFx1NjYzMVx1NjYyNFx1NjZmN1x1NjdmZlx1NjdkM1x1NjdmMVx1NjdkNFx1NjdkMFx1NjdlY1x1Njdi''@;'; put 'put ''Nlx1NjdhZlx1NjdmNVx1NjdlOVx1NjdlZlx1NjdjNFx1NjdkMVx1NjdiNFx1NjdkYVx1NjdlNVx1NjdiOFx1NjdjZlx1NjdkZVx1NjdmM1x1NjdiMFx1NjdkOVx1NjdlMlx1NjdkZFx1NjdkMlx1NmI2YVx1NmI4M1x1NmI4Nlx1NmJiNVx1NmJkMlx1NmJkN1x1NmMxZlx1NmNjOVx1NmQwYlx1''@;'; put 'put ''NmQzMlx1NmQyYVx1NmQ0MVx1NmQyNVx1NmQwY1x1NmQzMVx1NmQxZVx1NmQxN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQzYlx1NmQzZFx1NmQzZVx1NmQzNlx1NmQxYlx1NmNmNVx1NmQzOVx1NmQyN1x1NmQzOFx1NmQyOVx1NmQyZVx1NmQzNVx1NmQwZVx1''@;'; put 'put ''NmQyYlx1NzBhYlx1NzBiYVx1NzBiM1x1NzBhY1x1NzBhZlx1NzBhZFx1NzBiOFx1NzBhZVx1NzBhNFx1NzIzMFx1NzI3Mlx1NzI2Zlx1NzI3NFx1NzJlOVx1NzJlMFx1NzJlMVx1NzNiN1x1NzNjYVx1NzNiYlx1NzNiMlx1NzNjZFx1NzNjMFx1NzNiM1x1NzUxYVx1NzUyZFx1NzU0Zlx1NzU0''@;'; put 'put ''Y1x1NzU0ZVx1NzU0Ylx1NzVhYlx1NzVhNFx1NzVhNVx1NzVhMlx1NzVhM1x1NzY3OFx1NzY4Nlx1NzY4N1x1NzY4OFx1NzZjOFx1NzZjNlx1NzZjM1x1NzZjNVx1NzcwMVx1NzZmOVx1NzZmOFx1NzcwOVx1NzcwYlx1NzZmZVx1NzZmY1x1NzcwN1x1NzdkY1x1NzgwMlx1NzgxNFx1NzgwY1x1''@;'; put 'put ''NzgwZFx1Nzk0Nlx1Nzk0OVx1Nzk0OFx1Nzk0N1x1NzliOVx1NzliYVx1NzlkMVx1NzlkMlx1NzljYlx1N2E3Zlx1N2E4MVx1N2FmZlx1N2FmZFx1N2M3ZFx1N2QwMlx1N2QwNVx1N2QwMFx1N2QwOVx1N2QwN1x1N2QwNFx1N2QwNlx1N2YzOFx1N2Y4ZVx1N2ZiZlx1ODAwNFx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLHA9MDtwIT1fWzE3Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTcyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3Ml1bcF1dPTQ0MDMyK3AsYls0NDAzMitwXT1fWzE3Ml1bcF0pO2ZvcihfWzE3M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ODAxMFx1ODAwZFx1ODAxMVx1ODAzNlx1ODBkNlx1ODBlNVx1ODBkYVx1ODBjM1x1ODBjNFx1ODBjY1x1ODBlMVx1ODBkYlx1ODBjZVx1ODBkZVx1ODBlNFx1ODBkZFx1ODFmNFx1ODIyMlx1ODJlN1x1ODMwM1x1ODMwNVx1ODJlM1x1ODJkYlx1ODJlNlx1ODMwNFx1ODJl''@;'; put 'put ''NVx1ODMwMlx1ODMwOVx1ODJkMlx1ODJkN1x1ODJmMVx1ODMwMVx1ODJkY1x1ODJkNFx1ODJkMVx1ODJkZVx1ODJkM1x1ODJkZlx1ODJlZlx1ODMwNlx1ODY1MFx1ODY3OVx1ODY3Ylx1ODY3YVx1ODg0ZFx1ODg2Ylx1ODk4MVx1ODlkNFx1OGEwOFx1OGEwMlx1OGEwM1x1OGM5ZVx1OGNhMFx1''@;'; put 'put ''OGQ3NFx1OGQ3M1x1OGRiNFx1OGVjZFx1OGVjY1x1OGZmMFx1OGZlNlx1OGZlMlx1OGZlYVx1OGZlNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGZlZFx1OGZlYlx1OGZlNFx1OGZlOFx1OTBjYVx1OTBjZVx1OTBjMVx1OTBjM1x1OTE0Ylx1OTE0YVx1OTFjZFx1''@;'; put 'put ''OTU4Mlx1OTY1MFx1OTY0Ylx1OTY0Y1x1OTY0ZFx1OTc2Mlx1OTc2OVx1OTdjYlx1OTdlZFx1OTdmM1x1OTgwMVx1OThhOFx1OThkYlx1OThkZlx1OTk5Nlx1OTk5OVx1NGU1OFx1NGViM1x1NTAwY1x1NTAwZFx1NTAyM1x1NGZlZlx1NTAyNlx1NTAyNVx1NGZmOFx1NTAyOVx1NTAxNlx1NTAw''@;'; put 'put ''Nlx1NTAzY1x1NTAxZlx1NTAxYVx1NTAxMlx1NTAxMVx1NGZmYVx1NTAwMFx1NTAxNFx1NTAyOFx1NGZmMVx1NTAyMVx1NTAwYlx1NTAxOVx1NTAxOFx1NGZmM1x1NGZlZVx1NTAyZFx1NTAyYVx1NGZmZVx1NTAyYlx1NTAwOVx1NTE3Y1x1NTFhNFx1NTFhNVx1NTFhMlx1NTFjZFx1NTFjY1x1''@;'; put 'put ''NTFjNlx1NTFjYlx1NTI1Nlx1NTI1Y1x1NTI1NFx1NTI1Ylx1NTI1ZFx1NTMyYVx1NTM3Zlx1NTM5Zlx1NTM5ZFx1NTNkZlx1NTRlOFx1NTUxMFx1NTUwMVx1NTUzN1x1NTRmY1x1NTRlNVx1NTRmMlx1NTUwNlx1NTRmYVx1NTUxNFx1NTRlOVx1NTRlZFx1NTRlMVx1NTUwOVx1NTRlZVx1NTRl''@;'; put 'put ''YVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3M10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTczXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3M11bcF1dPTQ0Mjg4K3AsYls0NDI4OCtwXT1fWzE3M11bcF0pO2ZvcihfWzE3NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRlNlx1NTUyN1x1NTUwN1x1NTRmZFx1NTUwZlx1NTcwM1x1NTcwNFx1NTdjMlx1NTdkNFx1NTdjYlx1NTdjM1x1NTgwOVx1NTkwZlx1NTk1N1x1NTk1OFx1NTk1YVx1NWExMVx1NWExOFx1NWExY1x1NWExZlx1NWExYlx1NWExM1x1NTllY1x1NWEy''@;'; put 'put ''MFx1NWEyM1x1NWEyOVx1NWEyNVx1NWEwY1x1NWEwOVx1NWI2Ylx1NWM1OFx1NWJiMFx1NWJiM1x1NWJiNlx1NWJiNFx1NWJhZVx1NWJiNVx1NWJiOVx1NWJiOFx1NWMwNFx1NWM1MVx1NWM1NVx1NWM1MFx1NWNlZFx1NWNmZFx1NWNmYlx1NWNlYVx1NWNlOFx1NWNmMFx1NWNmNlx1NWQwMVx1''@;'; put 'put ''NWNmNFx1NWRlZVx1NWUyZFx1NWUyYlx1NWVhYlx1NWVhZFx1NWVhN1x1NWYzMVx1NWY5Mlx1NWY5MVx1NWY5MFx1NjA1OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjA2M1x1NjA2NVx1NjA1MFx1NjA1NVx1NjA2ZFx1NjA2OVx1NjA2Zlx1NjA4NFx1NjA5Zlx1''@;'; put 'put ''NjA5YVx1NjA4ZFx1NjA5NFx1NjA4Y1x1NjA4NVx1NjA5Nlx1NjI0N1x1NjJmM1x1NjMwOFx1NjJmZlx1NjM0ZVx1NjMzZVx1NjMyZlx1NjM1NVx1NjM0Mlx1NjM0Nlx1NjM0Zlx1NjM0OVx1NjMzYVx1NjM1MFx1NjMzZFx1NjMyYVx1NjMyYlx1NjMyOFx1NjM0ZFx1NjM0Y1x1NjU0OFx1NjU0''@;'; put 'put ''OVx1NjU5OVx1NjVjMVx1NjVjNVx1NjY0Mlx1NjY0OVx1NjY0Zlx1NjY0M1x1NjY1Mlx1NjY0Y1x1NjY0NVx1NjY0MVx1NjZmOFx1NjcxNFx1NjcxNVx1NjcxN1x1NjgyMVx1NjgzOFx1Njg0OFx1Njg0Nlx1Njg1M1x1NjgzOVx1Njg0Mlx1Njg1NFx1NjgyOVx1NjhiM1x1NjgxN1x1Njg0Y1x1''@;'; put 'put ''Njg1MVx1NjgzZFx1NjdmNFx1Njg1MFx1Njg0MFx1NjgzY1x1Njg0M1x1NjgyYVx1Njg0NVx1NjgxM1x1NjgxOFx1Njg0MVx1NmI4YVx1NmI4OVx1NmJiN1x1NmMyM1x1NmMyN1x1NmMyOFx1NmMyNlx1NmMyNFx1NmNmMFx1NmQ2YVx1NmQ5NVx1NmQ4OFx1NmQ4N1x1NmQ2Nlx1NmQ3OFx1NmQ3''@;'; put 'put ''N1x1NmQ1OVx1NmQ5M1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3NF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTc0XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3NF1bcF1dPTQ0NTQ0K3AsYls0NDU0NCtwXT1fWzE3NF1bcF0pO2ZvcihfWzE3NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQ2Y1x1NmQ4OVx1NmQ2ZVx1NmQ1YVx1NmQ3NFx1NmQ2OVx1NmQ4Y1x1NmQ4YVx1NmQ3OVx1NmQ4NVx1NmQ2NVx1NmQ5NFx1NzBjYVx1NzBkOFx1NzBlNFx1NzBkOVx1NzBjOFx1NzBjZlx1NzIzOVx1NzI3OVx1NzJmY1x1NzJm''@;'; put 'put ''OVx1NzJmZFx1NzJmOFx1NzJmN1x1NzM4Nlx1NzNlZFx1NzQwOVx1NzNlZVx1NzNlMFx1NzNlYVx1NzNkZVx1NzU1NFx1NzU1ZFx1NzU1Y1x1NzU1YVx1NzU1OVx1NzViZVx1NzVjNVx1NzVjN1x1NzViMlx1NzViM1x1NzViZFx1NzViY1x1NzViOVx1NzVjMlx1NzViOFx1NzY4Ylx1NzZiMFx1''@;'; put 'put ''NzZjYVx1NzZjZFx1NzZjZVx1NzcyOVx1NzcxZlx1NzcyMFx1NzcyOFx1NzdlOVx1NzgzMFx1NzgyN1x1NzgzOFx1NzgxZFx1NzgzNFx1NzgzN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzgyNVx1NzgyZFx1NzgyMFx1NzgxZlx1NzgzMlx1Nzk1NVx1Nzk1MFx1''@;'; put 'put ''Nzk2MFx1Nzk1Zlx1Nzk1Nlx1Nzk1ZVx1Nzk1ZFx1Nzk1N1x1Nzk1YVx1NzllNFx1NzllM1x1NzllN1x1NzlkZlx1NzllNlx1NzllOVx1NzlkOFx1N2E4NFx1N2E4OFx1N2FkOVx1N2IwNlx1N2IxMVx1N2M4OVx1N2QyMVx1N2QxN1x1N2QwYlx1N2QwYVx1N2QyMFx1N2QyMlx1N2QxNFx1N2Qx''@;'; put 'put ''MFx1N2QxNVx1N2QxYVx1N2QxY1x1N2QwZFx1N2QxOVx1N2QxYlx1N2YzYVx1N2Y1Zlx1N2Y5NFx1N2ZjNVx1N2ZjMVx1ODAwNlx1ODAxOFx1ODAxNVx1ODAxOVx1ODAxN1x1ODAzZFx1ODAzZlx1ODBmMVx1ODEwMlx1ODBmMFx1ODEwNVx1ODBlZFx1ODBmNFx1ODEwNlx1ODBmOFx1ODBmM1x1''@;'; put 'put ''ODEwOFx1ODBmZFx1ODEwYVx1ODBmY1x1ODBlZlx1ODFlZFx1ODFlY1x1ODIwMFx1ODIxMFx1ODIyYVx1ODIyYlx1ODIyOFx1ODIyY1x1ODJiYlx1ODMyYlx1ODM1Mlx1ODM1NFx1ODM0YVx1ODMzOFx1ODM1MFx1ODM0OVx1ODMzNVx1ODMzNFx1ODM0Zlx1ODMzMlx1ODMzOVx1ODMzNlx1ODMx''@;'; put 'put ''N1x1ODM0MFx1ODMzMVx1ODMyOFx1ODM0M1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3NV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTc1XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3NV1bcF1dPTQ0ODAwK3AsYls0NDgwMCtwXT1fWzE3NV1bcF0pO2ZvcihfWzE3Nl09Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODY1NFx1ODY4YVx1ODZhYVx1ODY5M1x1ODZhNFx1ODZhOVx1ODY4Y1x1ODZhM1x1ODY5Y1x1ODg3MFx1ODg3N1x1ODg4MVx1ODg4Mlx1ODg3ZFx1ODg3OVx1OGExOFx1OGExMFx1OGEwZVx1OGEwY1x1OGEx''@;'; put 'put ''NVx1OGEwYVx1OGExN1x1OGExM1x1OGExNlx1OGEwZlx1OGExMVx1OGM0OFx1OGM3YVx1OGM3OVx1OGNhMVx1OGNhMlx1OGQ3N1x1OGVhY1x1OGVkMlx1OGVkNFx1OGVjZlx1OGZiMVx1OTAwMVx1OTAwNlx1OGZmN1x1OTAwMFx1OGZmYVx1OGZmNFx1OTAwM1x1OGZmZFx1OTAwNVx1OGZmOFx1''@;'; put 'put ''OTA5NVx1OTBlMVx1OTBkZFx1OTBlMlx1OTE1Mlx1OTE0ZFx1OTE0Y1x1OTFkOFx1OTFkZFx1OTFkN1x1OTFkY1x1OTFkOVx1OTU4M1x1OTY2Mlx1OTY2M1x1OTY2MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY1Ylx1OTY1ZFx1OTY2NFx1OTY1OFx1OTY1ZVx1''@;'; put 'put ''OTZiYlx1OThlMlx1OTlhY1x1OWFhOFx1OWFkOFx1OWIyNVx1OWIzMlx1OWIzY1x1NGU3ZVx1NTA3YVx1NTA3ZFx1NTA1Y1x1NTA0N1x1NTA0M1x1NTA0Y1x1NTA1YVx1NTA0OVx1NTA2NVx1NTA3Nlx1NTA0ZVx1NTA1NVx1NTA3NVx1NTA3NFx1NTA3N1x1NTA0Zlx1NTAwZlx1NTA2Zlx1NTA2''@;'; put 'put ''ZFx1NTE1Y1x1NTE5NVx1NTFmMFx1NTI2YVx1NTI2Zlx1NTJkMlx1NTJkOVx1NTJkOFx1NTJkNVx1NTMxMFx1NTMwZlx1NTMxOVx1NTMzZlx1NTM0MFx1NTMzZVx1NTNjM1x1NjZmY1x1NTU0Nlx1NTU2YVx1NTU2Nlx1NTU0NFx1NTU1ZVx1NTU2MVx1NTU0M1x1NTU0YVx1NTUzMVx1NTU1Nlx1''@;'; put 'put ''NTU0Zlx1NTU1NVx1NTUyZlx1NTU2NFx1NTUzOFx1NTUyZVx1NTU1Y1x1NTUyY1x1NTU2M1x1NTUzM1x1NTU0MVx1NTU1N1x1NTcwOFx1NTcwYlx1NTcwOVx1NTdkZlx1NTgwNVx1NTgwYVx1NTgwNlx1NTdlMFx1NTdlNFx1NTdmYVx1NTgwMlx1NTgzNVx1NTdmN1x1NTdmOVx1NTkyMFx1NTk2''@;'; put 'put ''Mlx1NWEzNlx1NWE0MVx1NWE0OVx1NWE2Nlx1NWE2YVx1NWE0MFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3Nl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTc2XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3Nl1bcF1dPTQ1MDU2K3AsYls0NTA1NitwXT1fWzE3Nl1bcF0pO2ZvcihfWzE3''@;'; put 'put ''N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWEzY1x1NWE2Mlx1NWE1YVx1NWE0Nlx1NWE0YVx1NWI3MFx1NWJjN1x1NWJjNVx1NWJjNFx1NWJjMlx1NWJiZlx1NWJjNlx1NWMwOVx1NWMwOFx1NWMwN1x1NWM2MFx1NWM1Y1x1NWM1''@;'; put 'put ''ZFx1NWQwN1x1NWQwNlx1NWQwZVx1NWQxYlx1NWQxNlx1NWQyMlx1NWQxMVx1NWQyOVx1NWQxNFx1NWQxOVx1NWQyNFx1NWQyN1x1NWQxN1x1NWRlMlx1NWUzOFx1NWUzNlx1NWUzM1x1NWUzN1x1NWViN1x1NWViOFx1NWViNlx1NWViNVx1NWViZVx1NWYzNVx1NWYzN1x1NWY1N1x1NWY2Y1x1''@;'; put 'put ''NWY2OVx1NWY2Ylx1NWY5N1x1NWY5OVx1NWY5ZVx1NWY5OFx1NWZhMVx1NWZhMFx1NWY5Y1x1NjA3Zlx1NjBhM1x1NjA4OVx1NjBhMFx1NjBhOFx1NjBjYlx1NjBiNFx1NjBlNlx1NjBiZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjBjNVx1NjBiYlx1NjBiNVx1''@;'; put 'put ''NjBkY1x1NjBiY1x1NjBkOFx1NjBkNVx1NjBjNlx1NjBkZlx1NjBiOFx1NjBkYVx1NjBjN1x1NjIxYVx1NjIxYlx1NjI0OFx1NjNhMFx1NjNhN1x1NjM3Mlx1NjM5Nlx1NjNhMlx1NjNhNVx1NjM3N1x1NjM2N1x1NjM5OFx1NjNhYVx1NjM3MVx1NjNhOVx1NjM4OVx1NjM4M1x1NjM5Ylx1NjM2''@;'; put 'put ''Ylx1NjNhOFx1NjM4NFx1NjM4OFx1NjM5OVx1NjNhMVx1NjNhY1x1NjM5Mlx1NjM4Zlx1NjM4MFx1NjM3Ylx1NjM2OVx1NjM2OFx1NjM3YVx1NjU1ZFx1NjU1Nlx1NjU1MVx1NjU1OVx1NjU1N1x1NTU1Zlx1NjU0Zlx1NjU1OFx1NjU1NVx1NjU1NFx1NjU5Y1x1NjU5Ylx1NjVhY1x1NjVjZlx1''@;'; put 'put ''NjVjYlx1NjVjY1x1NjVjZVx1NjY1ZFx1NjY1YVx1NjY2NFx1NjY2OFx1NjY2Nlx1NjY1ZVx1NjZmOVx1NTJkN1x1NjcxYlx1Njg4MVx1NjhhZlx1NjhhMlx1Njg5M1x1NjhiNVx1Njg3Zlx1Njg3Nlx1NjhiMVx1NjhhN1x1Njg5N1x1NjhiMFx1Njg4M1x1NjhjNFx1NjhhZFx1Njg4Nlx1Njg4''@;'; put 'put ''NVx1Njg5NFx1Njg5ZFx1NjhhOFx1Njg5Zlx1NjhhMVx1Njg4Mlx1NmIzMlx1NmJiYVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3N10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTc3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3N11bcF1dPTQ1MzEyK3AsYls0NTMxMitwXT1fWzE3N11b''@;'; put 'put ''cF0pO2ZvcihfWzE3OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmJlYlx1NmJlY1x1NmMyYlx1NmQ4ZVx1NmRiY1x1NmRmM1x1NmRkOVx1NmRiMlx1NmRlMVx1NmRjY1x1NmRlNFx1NmRmYlx1NmRmYVx1NmUwNVx1NmRjN1x1NmRj''@;'; put 'put ''Ylx1NmRhZlx1NmRkMVx1NmRhZVx1NmRkZVx1NmRmOVx1NmRiOFx1NmRmN1x1NmRmNVx1NmRjNVx1NmRkMlx1NmUxYVx1NmRiNVx1NmRkYVx1NmRlYlx1NmRkOFx1NmRlYVx1NmRmMVx1NmRlZVx1NmRlOFx1NmRjNlx1NmRjNFx1NmRhYVx1NmRlY1x1NmRiZlx1NmRlNlx1NzBmOVx1NzEwOVx1''@;'; put 'put ''NzEwYVx1NzBmZFx1NzBlZlx1NzIzZFx1NzI3ZFx1NzI4MVx1NzMxY1x1NzMxYlx1NzMxNlx1NzMxM1x1NzMxOVx1NzM4N1x1NzQwNVx1NzQwYVx1NzQwM1x1NzQwNlx1NzNmZVx1NzQwZFx1NzRlMFx1NzRmNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzRmN1x1''@;'; put 'put ''NzUxY1x1NzUyMlx1NzU2NVx1NzU2Nlx1NzU2Mlx1NzU3MFx1NzU4Zlx1NzVkNFx1NzVkNVx1NzViNVx1NzVjYVx1NzVjZFx1NzY4ZVx1NzZkNFx1NzZkMlx1NzZkYlx1NzczN1x1NzczZVx1NzczY1x1NzczNlx1NzczOFx1NzczYVx1Nzg2Ylx1Nzg0M1x1Nzg0ZVx1Nzk2NVx1Nzk2OFx1Nzk2''@;'; put 'put ''ZFx1NzlmYlx1N2E5Mlx1N2E5NVx1N2IyMFx1N2IyOFx1N2IxYlx1N2IyY1x1N2IyNlx1N2IxOVx1N2IxZVx1N2IyZVx1N2M5Mlx1N2M5N1x1N2M5NVx1N2Q0Nlx1N2Q0M1x1N2Q3MVx1N2QyZVx1N2QzOVx1N2QzY1x1N2Q0MFx1N2QzMFx1N2QzM1x1N2Q0NFx1N2QyZlx1N2Q0Mlx1N2QzMlx1''@;'; put 'put ''N2QzMVx1N2YzZFx1N2Y5ZVx1N2Y5YVx1N2ZjY1x1N2ZjZVx1N2ZkMlx1ODAxY1x1ODA0YVx1ODA0Nlx1ODEyZlx1ODExNlx1ODEyM1x1ODEyYlx1ODEyOVx1ODEzMFx1ODEyNFx1ODIwMlx1ODIzNVx1ODIzN1x1ODIzNlx1ODIzOVx1ODM4ZVx1ODM5ZVx1ODM5OFx1ODM3OFx1ODNhMlx1ODM5''@;'; put 'put ''Nlx1ODNiZFx1ODNhYlx1ODM5Mlx1ODM4YVx1ODM5M1x1ODM4OVx1ODNhMFx1ODM3N1x1ODM3Ylx1ODM3Y1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3OF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTc4XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3OF1bcF1dPTQ1NTY4K3AsYls0NTU2''@;'; put 'put ''OCtwXT1fWzE3OF1bcF0pO2ZvcihfWzE3OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODM4Nlx1ODNhN1x1ODY1NVx1NWY2YVx1ODZjN1x1ODZjMFx1ODZiNlx1ODZjNFx1ODZiNVx1ODZjNlx1ODZjYlx1ODZiMVx1ODZhZlx1ODZj''@;'; put 'put ''OVx1ODg1M1x1ODg5ZVx1ODg4OFx1ODhhYlx1ODg5Mlx1ODg5Nlx1ODg4ZFx1ODg4Ylx1ODk5M1x1ODk4Zlx1OGEyYVx1OGExZFx1OGEyM1x1OGEyNVx1OGEzMVx1OGEyZFx1OGExZlx1OGExYlx1OGEyMlx1OGM0OVx1OGM1YVx1OGNhOVx1OGNhY1x1OGNhYlx1OGNhOFx1OGNhYVx1OGNhN1x1''@;'; put 'put ''OGQ2N1x1OGQ2Nlx1OGRiZVx1OGRiYVx1OGVkYlx1OGVkZlx1OTAxOVx1OTAwZFx1OTAxYVx1OTAxN1x1OTAyM1x1OTAxZlx1OTAxZFx1OTAxMFx1OTAxNVx1OTAxZVx1OTAyMFx1OTAwZlx1OTAyMlx1OTAxNlx1OTAxYlx1OTAxNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1OTBlOFx1OTBlZFx1OTBmZFx1OTE1N1x1OTFjZVx1OTFmNVx1OTFlNlx1OTFlM1x1OTFlN1x1OTFlZFx1OTFlOVx1OTU4OVx1OTY2YVx1OTY3NVx1OTY3M1x1OTY3OFx1OTY3MFx1OTY3NFx1OTY3Nlx1OTY3N1x1OTY2Y1x1OTZjMFx1OTZlYVx1OTZlOVx1N2FlMFx1N2FkZlx1OTgw''@;'; put 'put ''Mlx1OTgwM1x1OWI1YVx1OWNlNVx1OWU3NVx1OWU3Zlx1OWVhNVx1OWViYlx1NTBhMlx1NTA4ZFx1NTA4NVx1NTA5OVx1NTA5MVx1NTA4MFx1NTA5Nlx1NTA5OFx1NTA5YVx1NjcwMFx1NTFmMVx1NTI3Mlx1NTI3NFx1NTI3NVx1NTI2OVx1NTJkZVx1NTJkZFx1NTJkYlx1NTM1YVx1NTNhNVx1''@;'; put 'put ''NTU3Ylx1NTU4MFx1NTVhN1x1NTU3Y1x1NTU4YVx1NTU5ZFx1NTU5OFx1NTU4Mlx1NTU5Y1x1NTVhYVx1NTU5NFx1NTU4N1x1NTU4Ylx1NTU4M1x1NTViM1x1NTVhZVx1NTU5Zlx1NTUzZVx1NTViMlx1NTU5YVx1NTViYlx1NTVhY1x1NTViMVx1NTU3ZVx1NTU4OVx1NTVhYlx1NTU5OVx1NTcw''@;'; put 'put ''ZFx1NTgyZlx1NTgyYVx1NTgzNFx1NTgyNFx1NTgzMFx1NTgzMVx1NTgyMVx1NTgxZFx1NTgyMFx1NThmOVx1NThmYVx1NTk2MFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3OV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTc5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3OV1bcF1dPTQ1''@;'; put 'put ''ODI0K3AsYls0NTgyNCtwXT1fWzE3OV1bcF0pO2ZvcihfWzE4MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWE3N1x1NWE5YVx1NWE3Zlx1NWE5Mlx1NWE5Ylx1NWFhN1x1NWI3M1x1NWI3MVx1NWJkMlx1NWJjY1x1NWJkM1x1NWJk''@;'; put 'put ''MFx1NWMwYVx1NWMwYlx1NWMzMVx1NWQ0Y1x1NWQ1MFx1NWQzNFx1NWQ0N1x1NWRmZFx1NWU0NVx1NWUzZFx1NWU0MFx1NWU0M1x1NWU3ZVx1NWVjYVx1NWVjMVx1NWVjMlx1NWVjNFx1NWYzY1x1NWY2ZFx1NWZhOVx1NWZhYVx1NWZhOFx1NjBkMVx1NjBlMVx1NjBiMlx1NjBiNlx1NjBlMFx1''@;'; put 'put ''NjExY1x1NjEyM1x1NjBmYVx1NjExNVx1NjBmMFx1NjBmYlx1NjBmNFx1NjE2OFx1NjBmMVx1NjEwZVx1NjBmNlx1NjEwOVx1NjEwMFx1NjExMlx1NjIxZlx1NjI0OVx1NjNhM1x1NjM4Y1x1NjNjZlx1NjNjMFx1NjNlOVx1NjNjOVx1NjNjNlx1NjNjZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1NjNkMlx1NjNlM1x1NjNkMFx1NjNlMVx1NjNkNlx1NjNlZFx1NjNlZVx1NjM3Nlx1NjNmNFx1NjNlYVx1NjNkYlx1NjQ1Mlx1NjNkYVx1NjNmOVx1NjU1ZVx1NjU2Nlx1NjU2Mlx1NjU2M1x1NjU5MVx1NjU5MFx1NjVhZlx1NjY2ZVx1NjY3MFx1NjY3NFx1NjY3''@;'; put 'put ''Nlx1NjY2Zlx1NjY5MVx1NjY3YVx1NjY3ZVx1NjY3N1x1NjZmZVx1NjZmZlx1NjcxZlx1NjcxZFx1NjhmYVx1NjhkNVx1NjhlMFx1NjhkOFx1NjhkN1x1NjkwNVx1NjhkZlx1NjhmNVx1NjhlZVx1NjhlN1x1NjhmOVx1NjhkMlx1NjhmMlx1NjhlM1x1NjhjYlx1NjhjZFx1NjkwZFx1NjkxMlx1''@;'; put 'put ''NjkwZVx1NjhjOVx1NjhkYVx1Njk2ZVx1NjhmYlx1NmIzZVx1NmIzYVx1NmIzZFx1NmI5OFx1NmI5Nlx1NmJiY1x1NmJlZlx1NmMyZVx1NmMyZlx1NmMyY1x1NmUyZlx1NmUzOFx1NmU1NFx1NmUyMVx1NmUzMlx1NmU2N1x1NmU0YVx1NmUyMFx1NmUyNVx1NmUyM1x1NmUxYlx1NmU1Ylx1NmU1''@;'; put 'put ''OFx1NmUyNFx1NmU1Nlx1NmU2ZVx1NmUyZFx1NmUyNlx1NmU2Zlx1NmUzNFx1NmU0ZFx1NmUzYVx1NmUyY1x1NmU0M1x1NmUxZFx1NmUzZVx1NmVjYlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4MF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTgwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtf''@;'; put 'put ''WzE4MF1bcF1dPTQ2MDgwK3AsYls0NjA4MCtwXT1fWzE4MF1bcF0pO2ZvcihfWzE4MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmU4OVx1NmUxOVx1NmU0ZVx1NmU2M1x1NmU0NFx1NmU3Mlx1NmU2OVx1NmU1Zlx1NzExOVx1NzEx''@;'; put 'put ''YVx1NzEyNlx1NzEzMFx1NzEyMVx1NzEzNlx1NzE2ZVx1NzExY1x1NzI0Y1x1NzI4NFx1NzI4MFx1NzMzNlx1NzMyNVx1NzMzNFx1NzMyOVx1NzQzYVx1NzQyYVx1NzQzM1x1NzQyMlx1NzQyNVx1NzQzNVx1NzQzNlx1NzQzNFx1NzQyZlx1NzQxYlx1NzQyNlx1NzQyOFx1NzUyNVx1NzUyNlx1''@;'; put 'put ''NzU2Ylx1NzU2YVx1NzVlMlx1NzVkYlx1NzVlM1x1NzVkOVx1NzVkOFx1NzVkZVx1NzVlMFx1NzY3Ylx1NzY3Y1x1NzY5Nlx1NzY5M1x1NzZiNFx1NzZkY1x1Nzc0Zlx1NzdlZFx1Nzg1ZFx1Nzg2Y1x1Nzg2Zlx1N2EwZFx1N2EwOFx1N2EwYlx1N2EwNVx1N2EwMFx1N2E5OFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2E5N1x1N2E5Nlx1N2FlNVx1N2FlM1x1N2I0OVx1N2I1Nlx1N2I0Nlx1N2I1MFx1N2I1Mlx1N2I1NFx1N2I0ZFx1N2I0Ylx1N2I0Zlx1N2I1MVx1N2M5Zlx1N2NhNVx1N2Q1ZVx1N2Q1MFx1N2Q2OFx1N2Q1NVx1N2QyYlx1N2Q2ZVx1N2Q3''@;'; put 'put ''Mlx1N2Q2MVx1N2Q2Nlx1N2Q2Mlx1N2Q3MFx1N2Q3M1x1NTU4NFx1N2ZkNFx1N2ZkNVx1ODAwYlx1ODA1Mlx1ODA4NVx1ODE1NVx1ODE1NFx1ODE0Ylx1ODE1MVx1ODE0ZVx1ODEzOVx1ODE0Nlx1ODEzZVx1ODE0Y1x1ODE1M1x1ODE3NFx1ODIxMlx1ODIxY1x1ODNlOVx1ODQwM1x1ODNmOFx1''@;'; put 'put ''ODQwZFx1ODNlMFx1ODNjNVx1ODQwYlx1ODNjMVx1ODNlZlx1ODNmMVx1ODNmNFx1ODQ1N1x1ODQwYVx1ODNmMFx1ODQwY1x1ODNjY1x1ODNmZFx1ODNmMlx1ODNjYVx1ODQzOFx1ODQwZVx1ODQwNFx1ODNkY1x1ODQwN1x1ODNkNFx1ODNkZlx1ODY1Ylx1ODZkZlx1ODZkOVx1ODZlZFx1ODZk''@;'; put 'put ''NFx1ODZkYlx1ODZlNFx1ODZkMFx1ODZkZVx1ODg1N1x1ODhjMVx1ODhjMlx1ODhiMVx1ODk4M1x1ODk5Nlx1OGEzYlx1OGE2MFx1OGE1NVx1OGE1ZVx1OGEzY1x1OGE0MVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4MV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTgxXVtwXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoSVtfWzE4MV1bcF1dPTQ2MzM2K3AsYls0NjMzNitwXT1fWzE4MV1bcF0pO2ZvcihfWzE4Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGE1NFx1OGE1Ylx1OGE1MFx1OGE0Nlx1OGEzNFx1OGEzYVx1OGEzNlx1OGE1''@;'; put 'put ''Nlx1OGM2MVx1OGM4Mlx1OGNhZlx1OGNiY1x1OGNiM1x1OGNiZFx1OGNjMVx1OGNiYlx1OGNjMFx1OGNiNFx1OGNiN1x1OGNiNlx1OGNiZlx1OGNiOFx1OGQ4YVx1OGQ4NVx1OGQ4MVx1OGRjZVx1OGRkZFx1OGRjYlx1OGRkYVx1OGRkMVx1OGRjY1x1OGRkYlx1OGRjNlx1OGVmYlx1OGVmOFx1''@;'; put 'put ''OGVmY1x1OGY5Y1x1OTAyZVx1OTAzNVx1OTAzMVx1OTAzOFx1OTAzMlx1OTAzNlx1OTEwMlx1OTBmNVx1OTEwOVx1OTBmZVx1OTE2M1x1OTE2NVx1OTFjZlx1OTIxNFx1OTIxNVx1OTIyM1x1OTIwOVx1OTIxZVx1OTIwZFx1OTIxMFx1OTIwN1x1OTIxMVx1OTU5NFx1OTU4Zlx1OTU4Ylx1OTU5''@;'; put 'put ''MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTU5M1x1OTU5Mlx1OTU4ZVx1OTY4YVx1OTY4ZVx1OTY4Ylx1OTY3ZFx1OTY4NVx1OTY4Nlx1OTY4ZFx1OTY3Mlx1OTY4NFx1OTZjMVx1OTZjNVx1OTZjNFx1OTZjNlx1OTZjN1x1OTZlZlx1OTZmMlx1OTdjY1x1OTgw''@;'; put 'put ''NVx1OTgwNlx1OTgwOFx1OThlN1x1OThlYVx1OThlZlx1OThlOVx1OThmMlx1OThlZFx1OTlhZVx1OTlhZFx1OWVjM1x1OWVjZFx1OWVkMVx1NGU4Mlx1NTBhZFx1NTBiNVx1NTBiMlx1NTBiM1x1NTBjNVx1NTBiZVx1NTBhY1x1NTBiN1x1NTBiYlx1NTBhZlx1NTBjN1x1NTI3Zlx1NTI3N1x1''@;'; put 'put ''NTI3ZFx1NTJkZlx1NTJlNlx1NTJlNFx1NTJlMlx1NTJlM1x1NTMyZlx1NTVkZlx1NTVlOFx1NTVkM1x1NTVlNlx1NTVjZVx1NTVkY1x1NTVjN1x1NTVkMVx1NTVlM1x1NTVlNFx1NTVlZlx1NTVkYVx1NTVlMVx1NTVjNVx1NTVjNlx1NTVlNVx1NTVjOVx1NTcxMlx1NTcxM1x1NTg1ZVx1NTg1''@;'; put 'put ''MVx1NTg1OFx1NTg1N1x1NTg1YVx1NTg1NFx1NTg2Ylx1NTg0Y1x1NTg2ZFx1NTg0YVx1NTg2Mlx1NTg1Mlx1NTg0Ylx1NTk2N1x1NWFjMVx1NWFjOVx1NWFjY1x1NWFiZVx1NWFiZFx1NWFiY1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTgy''@;'; put 'put ''XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4Ml1bcF1dPTQ2NTkyK3AsYls0NjU5MitwXT1fWzE4Ml1bcF0pO2ZvcihfWzE4M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWFiM1x1NWFjMlx1NWFiMlx1NWQ2OVx1NWQ2Zlx1NWU0''@;'; put 'put ''Y1x1NWU3OVx1NWVjOVx1NWVjOFx1NWYxMlx1NWY1OVx1NWZhY1x1NWZhZVx1NjExYVx1NjEwZlx1NjE0OFx1NjExZlx1NjBmM1x1NjExYlx1NjBmOVx1NjEwMVx1NjEwOFx1NjE0ZVx1NjE0Y1x1NjE0NFx1NjE0ZFx1NjEzZVx1NjEzNFx1NjEyN1x1NjEwZFx1NjEwNlx1NjEzN1x1NjIyMVx1''@;'; put 'put ''NjIyMlx1NjQxM1x1NjQzZVx1NjQxZVx1NjQyYVx1NjQyZFx1NjQzZFx1NjQyY1x1NjQwZlx1NjQxY1x1NjQxNFx1NjQwZFx1NjQzNlx1NjQxNlx1NjQxN1x1NjQwNlx1NjU2Y1x1NjU5Zlx1NjViMFx1NjY5N1x1NjY4OVx1NjY4N1x1NjY4OFx1NjY5Nlx1NjY4NFx1NjY5OFx1NjY4ZFx1Njcw''@;'; put 'put ''M1x1Njk5NFx1Njk2ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njk1YVx1Njk3N1x1Njk2MFx1Njk1NFx1Njk3NVx1NjkzMFx1Njk4Mlx1Njk0YVx1Njk2OFx1Njk2Ylx1Njk1ZVx1Njk1M1x1Njk3OVx1Njk4Nlx1Njk1ZFx1Njk2M1x1Njk1Ylx1NmI0N1x1NmI3''@;'; put 'put ''Mlx1NmJjMFx1NmJiZlx1NmJkM1x1NmJmZFx1NmVhMlx1NmVhZlx1NmVkM1x1NmViNlx1NmVjMlx1NmU5MFx1NmU5ZFx1NmVjN1x1NmVjNVx1NmVhNVx1NmU5OFx1NmViY1x1NmViYVx1NmVhYlx1NmVkMVx1NmU5Nlx1NmU5Y1x1NmVjNFx1NmVkNFx1NmVhYVx1NmVhN1x1NmViNFx1NzE0ZVx1''@;'; put 'put ''NzE1OVx1NzE2OVx1NzE2NFx1NzE0OVx1NzE2N1x1NzE1Y1x1NzE2Y1x1NzE2Nlx1NzE0Y1x1NzE2NVx1NzE1ZVx1NzE0Nlx1NzE2OFx1NzE1Nlx1NzIzYVx1NzI1Mlx1NzMzN1x1NzM0NVx1NzMzZlx1NzMzZVx1NzQ2Zlx1NzQ1YVx1NzQ1NVx1NzQ1Zlx1NzQ1ZVx1NzQ0MVx1NzQzZlx1NzQ1''@;'; put 'put ''OVx1NzQ1Ylx1NzQ1Y1x1NzU3Nlx1NzU3OFx1NzYwMFx1NzVmMFx1NzYwMVx1NzVmMlx1NzVmMVx1NzVmYVx1NzVmZlx1NzVmNFx1NzVmM1x1NzZkZVx1NzZkZlx1Nzc1Ylx1Nzc2Ylx1Nzc2Nlx1Nzc1ZVx1Nzc2M1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4M10ubGVuZ3RoOysrcCk2''@;'; put 'put ''NTUzMyE9PV9bMTgzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4M11bcF1dPTQ2ODQ4K3AsYls0Njg0OCtwXT1fWzE4M11bcF0pO2ZvcihfWzE4NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzc3OVx1Nzc2YVx1Nzc2Y1x1Nzc1''@;'; put 'put ''Y1x1Nzc2NVx1Nzc2OFx1Nzc2Mlx1NzdlZVx1Nzg4ZVx1NzhiMFx1Nzg5N1x1Nzg5OFx1Nzg4Y1x1Nzg4OVx1Nzg3Y1x1Nzg5MVx1Nzg5M1x1Nzg3Zlx1Nzk3YVx1Nzk3Zlx1Nzk4MVx1ODQyY1x1NzliZFx1N2ExY1x1N2ExYVx1N2EyMFx1N2ExNFx1N2ExZlx1N2ExZVx1N2E5Zlx1N2FhMFx1''@;'; put 'put ''N2I3N1x1N2JjMFx1N2I2MFx1N2I2ZVx1N2I2N1x1N2NiMVx1N2NiM1x1N2NiNVx1N2Q5M1x1N2Q3OVx1N2Q5MVx1N2Q4MVx1N2Q4Zlx1N2Q1Ylx1N2Y2ZVx1N2Y2OVx1N2Y2YVx1N2Y3Mlx1N2ZhOVx1N2ZhOFx1N2ZhNFx1ODA1Nlx1ODA1OFx1ODA4Nlx1ODA4NFx1ODE3MVx1ODE3MFx1ODE3''@;'; put 'put ''OFx1ODE2NVx1ODE2ZVx1ODE3M1x1ODE2Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODE3OVx1ODE3YVx1ODE2Nlx1ODIwNVx1ODI0N1x1ODQ4Mlx1ODQ3N1x1ODQzZFx1ODQzMVx1ODQ3NVx1ODQ2Nlx1ODQ2Ylx1ODQ0OVx1ODQ2Y1x1ODQ1Ylx1ODQzY1x1ODQz''@;'; put 'put ''NVx1ODQ2MVx1ODQ2M1x1ODQ2OVx1ODQ2ZFx1ODQ0Nlx1ODY1ZVx1ODY1Y1x1ODY1Zlx1ODZmOVx1ODcxM1x1ODcwOFx1ODcwN1x1ODcwMFx1ODZmZVx1ODZmYlx1ODcwMlx1ODcwM1x1ODcwNlx1ODcwYVx1ODg1OVx1ODhkZlx1ODhkNFx1ODhkOVx1ODhkY1x1ODhkOFx1ODhkZFx1ODhlMVx1''@;'; put 'put ''ODhjYVx1ODhkNVx1ODhkMlx1ODk5Y1x1ODllM1x1OGE2Ylx1OGE3Mlx1OGE3M1x1OGE2Nlx1OGE2OVx1OGE3MFx1OGE4N1x1OGE3Y1x1OGE2M1x1OGFhMFx1OGE3MVx1OGE4NVx1OGE2ZFx1OGE2Mlx1OGE2ZVx1OGE2Y1x1OGE3OVx1OGE3Ylx1OGEzZVx1OGE2OFx1OGM2Mlx1OGM4YVx1OGM4''@;'; put 'put ''OVx1OGNjYVx1OGNjN1x1OGNjOFx1OGNjNFx1OGNiMlx1OGNjM1x1OGNjMlx1OGNjNVx1OGRlMVx1OGRkZlx1OGRlOFx1OGRlZlx1OGRmM1x1OGRmYVx1OGRlYVx1OGRlNFx1OGRlNlx1OGViMlx1OGYwM1x1OGYwOVx1OGVmZVx1OGYwYVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4NF0u''@;'; put 'put ''bGVuZ3RoOysrcCk2NTUzMyE9PV9bMTg0XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4NF1bcF1dPTQ3MTA0K3AsYls0NzEwNCtwXT1fWzE4NF1bcF0pO2ZvcihfWzE4NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGY5Zlx1OGZi''@;'; put 'put ''Mlx1OTA0Ylx1OTA0YVx1OTA1M1x1OTA0Mlx1OTA1NFx1OTAzY1x1OTA1NVx1OTA1MFx1OTA0N1x1OTA0Zlx1OTA0ZVx1OTA0ZFx1OTA1MVx1OTAzZVx1OTA0MVx1OTExMlx1OTExN1x1OTE2Y1x1OTE2YVx1OTE2OVx1OTFjOVx1OTIzN1x1OTI1N1x1OTIzOFx1OTIzZFx1OTI0MFx1OTIzZVx1''@;'; put 'put ''OTI1Ylx1OTI0Ylx1OTI2NFx1OTI1MVx1OTIzNFx1OTI0OVx1OTI0ZFx1OTI0NVx1OTIzOVx1OTIzZlx1OTI1YVx1OTU5OFx1OTY5OFx1OTY5NFx1OTY5NVx1OTZjZFx1OTZjYlx1OTZjOVx1OTZjYVx1OTZmN1x1OTZmYlx1OTZmOVx1OTZmNlx1OTc1Nlx1OTc3NFx1OTc3Nlx1OTgxMFx1OTgx''@;'; put 'put ''MVx1OTgxM1x1OTgwYVx1OTgxMlx1OTgwY1x1OThmY1x1OThmNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OThmZFx1OThmZVx1OTliM1x1OTliMVx1OTliNFx1OWFlMVx1OWNlOVx1OWU4Mlx1OWYwZVx1OWYxM1x1OWYyMFx1NTBlN1x1NTBlZVx1NTBlNVx1NTBk''@;'; put 'put ''Nlx1NTBlZFx1NTBkYVx1NTBkNVx1NTBjZlx1NTBkMVx1NTBmMVx1NTBjZVx1NTBlOVx1NTE2Mlx1NTFmM1x1NTI4M1x1NTI4Mlx1NTMzMVx1NTNhZFx1NTVmZVx1NTYwMFx1NTYxYlx1NTYxN1x1NTVmZFx1NTYxNFx1NTYwNlx1NTYwOVx1NTYwZFx1NTYwZVx1NTVmN1x1NTYxNlx1NTYxZlx1''@;'; put 'put ''NTYwOFx1NTYxMFx1NTVmNlx1NTcxOFx1NTcxNlx1NTg3NVx1NTg3ZVx1NTg4M1x1NTg5M1x1NTg4YVx1NTg3OVx1NTg4NVx1NTg3ZFx1NThmZFx1NTkyNVx1NTkyMlx1NTkyNFx1NTk2YVx1NTk2OVx1NWFlMVx1NWFlNlx1NWFlOVx1NWFkN1x1NWFkNlx1NWFkOFx1NWFlM1x1NWI3NVx1NWJk''@;'; put 'put ''ZVx1NWJlN1x1NWJlMVx1NWJlNVx1NWJlNlx1NWJlOFx1NWJlMlx1NWJlNFx1NWJkZlx1NWMwZFx1NWM2Mlx1NWQ4NFx1NWQ4N1x1NWU1Ylx1NWU2M1x1NWU1NVx1NWU1N1x1NWU1NFx1NWVkM1x1NWVkNlx1NWYwYVx1NWY0Nlx1NWY3MFx1NWZiOVx1NjE0N1x1ZmZmZCIuc3BsaXQoIiIpLHA9''@;'; put 'put ''MDtwIT1fWzE4NV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTg1XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4NV1bcF1dPTQ3MzYwK3AsYls0NzM2MCtwXT1fWzE4NV1bcF0pO2ZvcihfWzE4Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1NjEzZlx1NjE0Ylx1NjE3N1x1NjE2Mlx1NjE2M1x1NjE1Zlx1NjE1YVx1NjE1OFx1NjE3NVx1NjIyYVx1NjQ4N1x1NjQ1OFx1NjQ1NFx1NjRhNFx1NjQ3OFx1NjQ1Zlx1NjQ3YVx1NjQ1MVx1NjQ2N1x1NjQzNFx1NjQ2ZFx1NjQ3Ylx1NjU3Mlx1NjVhMVx1NjVkN1x1NjVkNlx1NjZhMlx1''@;'; put 'put ''NjZhOFx1NjY5ZFx1Njk5Y1x1NjlhOFx1Njk5NVx1NjljMVx1NjlhZVx1NjlkM1x1NjljYlx1Njk5Ylx1NjliN1x1NjliYlx1NjlhYlx1NjliNFx1NjlkMFx1NjljZFx1NjlhZFx1NjljY1x1NjlhNlx1NjljM1x1NjlhM1x1NmI0OVx1NmI0Y1x1NmMzM1x1NmYzM1x1NmYxNFx1NmVmZVx1NmYx''@;'; put 'put ''M1x1NmVmNFx1NmYyOVx1NmYzZVx1NmYyMFx1NmYyY1x1NmYwZlx1NmYwMlx1NmYyMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmVmZlx1NmVlZlx1NmYwNlx1NmYzMVx1NmYzOFx1NmYzMlx1NmYyM1x1NmYxNVx1NmYyYlx1NmYyZlx1NmY4OFx1NmYyYVx1NmVl''@;'; put 'put ''Y1x1NmYwMVx1NmVmMlx1NmVjY1x1NmVmN1x1NzE5NFx1NzE5OVx1NzE3ZFx1NzE4YVx1NzE4NFx1NzE5Mlx1NzIzZVx1NzI5Mlx1NzI5Nlx1NzM0NFx1NzM1MFx1NzQ2NFx1NzQ2M1x1NzQ2YVx1NzQ3MFx1NzQ2ZFx1NzUwNFx1NzU5MVx1NzYyN1x1NzYwZFx1NzYwYlx1NzYwOVx1NzYxM1x1''@;'; put 'put ''NzZlMVx1NzZlM1x1Nzc4NFx1Nzc3ZFx1Nzc3Zlx1Nzc2MVx1NzhjMVx1Nzg5Zlx1NzhhN1x1NzhiM1x1NzhhOVx1NzhhM1x1Nzk4ZVx1Nzk4Zlx1Nzk4ZFx1N2EyZVx1N2EzMVx1N2FhYVx1N2FhOVx1N2FlZFx1N2FlZlx1N2JhMVx1N2I5NVx1N2I4Ylx1N2I3NVx1N2I5N1x1N2I5ZFx1N2I5''@;'; put 'put ''NFx1N2I4Zlx1N2JiOFx1N2I4N1x1N2I4NFx1N2NiOVx1N2NiZFx1N2NiZVx1N2RiYlx1N2RiMFx1N2Q5Y1x1N2RiZFx1N2RiZVx1N2RhMFx1N2RjYVx1N2RiNFx1N2RiMlx1N2RiMVx1N2RiYVx1N2RhMlx1N2RiZlx1N2RiNVx1N2RiOFx1N2RhZFx1N2RkMlx1N2RjN1x1N2RhY1x1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLHA9MDtwIT1fWzE4Nl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTg2XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4Nl1bcF1dPTQ3NjE2K3AsYls0NzYxNitwXT1fWzE4Nl1bcF0pO2ZvcihfWzE4N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1N2Y3MFx1N2ZlMFx1N2ZlMVx1N2ZkZlx1ODA1ZVx1ODA1YVx1ODA4N1x1ODE1MFx1ODE4MFx1ODE4Zlx1ODE4OFx1ODE4YVx1ODE3Zlx1ODE4Mlx1ODFlN1x1ODFmYVx1ODIwN1x1ODIxNFx1ODIxZVx1ODI0Ylx1ODRjOVx1ODRiZlx1ODRjNlx1ODRjNFx1ODQ5OVx1''@;'; put 'put ''ODQ5ZVx1ODRiMlx1ODQ5Y1x1ODRjYlx1ODRiOFx1ODRjMFx1ODRkM1x1ODQ5MFx1ODRiY1x1ODRkMVx1ODRjYVx1ODczZlx1ODcxY1x1ODczYlx1ODcyMlx1ODcyNVx1ODczNFx1ODcxOFx1ODc1NVx1ODczN1x1ODcyOVx1ODhmM1x1ODkwMlx1ODhmNFx1ODhmOVx1ODhmOFx1ODhmZFx1ODhl''@;'; put 'put ''OFx1ODkxYVx1ODhlZlx1OGFhNlx1OGE4Y1x1OGE5ZVx1OGFhM1x1OGE4ZFx1OGFhMVx1OGE5M1x1OGFhNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGFhYVx1OGFhNVx1OGFhOFx1OGE5OFx1OGE5MVx1OGE5YVx1OGFhN1x1OGM2YVx1OGM4ZFx1OGM4Y1x1OGNk''@;'; put 'put ''M1x1OGNkMVx1OGNkMlx1OGQ2Ylx1OGQ5OVx1OGQ5NVx1OGRmY1x1OGYxNFx1OGYxMlx1OGYxNVx1OGYxM1x1OGZhM1x1OTA2MFx1OTA1OFx1OTA1Y1x1OTA2M1x1OTA1OVx1OTA1ZVx1OTA2Mlx1OTA1ZFx1OTA1Ylx1OTExOVx1OTExOFx1OTExZVx1OTE3NVx1OTE3OFx1OTE3N1x1OTE3NFx1''@;'; put 'put ''OTI3OFx1OTI4MFx1OTI4NVx1OTI5OFx1OTI5Nlx1OTI3Ylx1OTI5M1x1OTI5Y1x1OTJhOFx1OTI3Y1x1OTI5MVx1OTVhMVx1OTVhOFx1OTVhOVx1OTVhM1x1OTVhNVx1OTVhNFx1OTY5OVx1OTY5Y1x1OTY5Ylx1OTZjY1x1OTZkMlx1OTcwMFx1OTc3Y1x1OTc4NVx1OTdmNlx1OTgxN1x1OTgx''@;'; put 'put ''OFx1OThhZlx1OThiMVx1OTkwM1x1OTkwNVx1OTkwY1x1OTkwOVx1OTljMVx1OWFhZlx1OWFiMFx1OWFlNlx1OWI0MVx1OWI0Mlx1OWNmNFx1OWNmNlx1OWNmM1x1OWViY1x1OWYzYlx1OWY0YVx1NTEwNFx1NTEwMFx1NTBmYlx1NTBmNVx1NTBmOVx1NTEwMlx1NTEwOFx1NTEwOVx1NTEwNVx1''@;'; put 'put ''NTFkY1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4N10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTg3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4N11bcF1dPTQ3ODcyK3AsYls0Nzg3MitwXT1fWzE4N11bcF0pO2ZvcihfWzE4OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTI4N1x1NTI4OFx1NTI4OVx1NTI4ZFx1NTI4YVx1NTJmMFx1NTNiMlx1NTYyZVx1NTYzYlx1NTYzOVx1NTYzMlx1NTYzZlx1NTYzNFx1NTYyOVx1NTY1M1x1NTY0ZVx1NTY1N1x1NTY3NFx1NTYzNlx1NTYyZlx1NTYzMFx1NTg4MFx1NTg5Zlx1''@;'; put 'put ''NTg5ZVx1NThiM1x1NTg5Y1x1NThhZVx1NThhOVx1NThhNlx1NTk2ZFx1NWIwOVx1NWFmYlx1NWIwYlx1NWFmNVx1NWIwY1x1NWIwOFx1NWJlZVx1NWJlY1x1NWJlOVx1NWJlYlx1NWM2NFx1NWM2NVx1NWQ5ZFx1NWQ5NFx1NWU2Mlx1NWU1Zlx1NWU2MVx1NWVlMlx1NWVkYVx1NWVkZlx1NWVk''@;'; put 'put ''ZFx1NWVlM1x1NWVlMFx1NWY0OFx1NWY3MVx1NWZiN1x1NWZiNVx1NjE3Nlx1NjE2N1x1NjE2ZVx1NjE1ZFx1NjE1NVx1NjE4Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjE3Y1x1NjE3MFx1NjE2Ylx1NjE3ZVx1NjFhN1x1NjE5MFx1NjFhYlx1NjE4ZVx1NjFh''@;'; put 'put ''Y1x1NjE5YVx1NjFhNFx1NjE5NFx1NjFhZVx1NjIyZVx1NjQ2OVx1NjQ2Zlx1NjQ3OVx1NjQ5ZVx1NjRiMlx1NjQ4OFx1NjQ5MFx1NjRiMFx1NjRhNVx1NjQ5M1x1NjQ5NVx1NjRhOVx1NjQ5Mlx1NjRhZVx1NjRhZFx1NjRhYlx1NjQ5YVx1NjRhY1x1NjQ5OVx1NjRhMlx1NjRiM1x1NjU3NVx1''@;'; put 'put ''NjU3N1x1NjU3OFx1NjZhZVx1NjZhYlx1NjZiNFx1NjZiMVx1NmEyM1x1NmExZlx1NjllOFx1NmEwMVx1NmExZVx1NmExOVx1NjlmZFx1NmEyMVx1NmExM1x1NmEwYVx1NjlmM1x1NmEwMlx1NmEwNVx1NjllZFx1NmExMVx1NmI1MFx1NmI0ZVx1NmJhNFx1NmJjNVx1NmJjNlx1NmYzZlx1NmY3''@;'; put 'put ''Y1x1NmY4NFx1NmY1MVx1NmY2Nlx1NmY1NFx1NmY4Nlx1NmY2ZFx1NmY1Ylx1NmY3OFx1NmY2ZVx1NmY4ZVx1NmY3YVx1NmY3MFx1NmY2NFx1NmY5N1x1NmY1OFx1NmVkNVx1NmY2Zlx1NmY2MFx1NmY1Zlx1NzE5Zlx1NzFhY1x1NzFiMVx1NzFhOFx1NzI1Nlx1NzI5Ylx1NzM0ZVx1NzM1N1x1''@;'; put 'put ''NzQ2OVx1NzQ4Ylx1NzQ4M1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4OF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTg4XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4OF1bcF1dPTQ4MTI4K3AsYls0ODEyOCtwXT1fWzE4OF1bcF0pO2ZvcihfWzE4OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzQ3ZVx1NzQ4MFx1NzU3Zlx1NzYyMFx1NzYyOVx1NzYxZlx1NzYyNFx1NzYyNlx1NzYyMVx1NzYyMlx1NzY5YVx1NzZiYVx1NzZlNFx1Nzc4ZVx1Nzc4N1x1Nzc4Y1x1Nzc5MVx1Nzc4Ylx1NzhjYlx1NzhjNVx1NzhiYVx1''@;'; put 'put ''NzhjYVx1NzhiZVx1NzhkNVx1NzhiY1x1NzhkMFx1N2EzZlx1N2EzY1x1N2E0MFx1N2EzZFx1N2EzN1x1N2EzYlx1N2FhZlx1N2FhZVx1N2JhZFx1N2JiMVx1N2JjNFx1N2JiNFx1N2JjNlx1N2JjN1x1N2JjMVx1N2JhMFx1N2JjY1x1N2NjYVx1N2RlMFx1N2RmNFx1N2RlZlx1N2RmYlx1N2Rk''@;'; put 'put ''OFx1N2RlY1x1N2RkZFx1N2RlOFx1N2RlM1x1N2RkYVx1N2RkZVx1N2RlOVx1N2Q5ZVx1N2RkOVx1N2RmMlx1N2RmOVx1N2Y3NVx1N2Y3N1x1N2ZhZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2ZlOVx1ODAyNlx1ODE5Ylx1ODE5Y1x1ODE5ZFx1ODFhMFx1ODE5''@;'; put 'put ''YVx1ODE5OFx1ODUxN1x1ODUzZFx1ODUxYVx1ODRlZVx1ODUyY1x1ODUyZFx1ODUxM1x1ODUxMVx1ODUyM1x1ODUyMVx1ODUxNFx1ODRlY1x1ODUyNVx1ODRmZlx1ODUwNlx1ODc4Mlx1ODc3NFx1ODc3Nlx1ODc2MFx1ODc2Nlx1ODc3OFx1ODc2OFx1ODc1OVx1ODc1N1x1ODc0Y1x1ODc1M1x1''@;'; put 'put ''ODg1Ylx1ODg1ZFx1ODkxMFx1ODkwN1x1ODkxMlx1ODkxM1x1ODkxNVx1ODkwYVx1OGFiY1x1OGFkMlx1OGFjN1x1OGFjNFx1OGE5NVx1OGFjYlx1OGFmOFx1OGFiMlx1OGFjOVx1OGFjMlx1OGFiZlx1OGFiMFx1OGFkNlx1OGFjZFx1OGFiNlx1OGFiOVx1OGFkYlx1OGM0Y1x1OGM0ZVx1OGM2''@;'; put 'put ''Y1x1OGNlMFx1OGNkZVx1OGNlNlx1OGNlNFx1OGNlY1x1OGNlZFx1OGNlMlx1OGNlM1x1OGNkY1x1OGNlYVx1OGNlMVx1OGQ2ZFx1OGQ5Zlx1OGRhM1x1OGUyYlx1OGUxMFx1OGUxZFx1OGUyMlx1OGUwZlx1OGUyOVx1OGUxZlx1OGUyMVx1OGUxZVx1OGViYVx1OGYxZFx1OGYxYlx1OGYxZlx1''@;'; put 'put ''OGYyOVx1OGYyNlx1OGYyYVx1OGYxY1x1OGYxZVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4OV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTg5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4OV1bcF1dPTQ4Mzg0K3AsYls0ODM4NCtwXT1fWzE4OV1bcF0pO2ZvcihfWzE5MF09Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGYyNVx1OTA2OVx1OTA2ZVx1OTA2OFx1OTA2ZFx1OTA3N1x1OTEzMFx1OTEyZFx1OTEyN1x1OTEzMVx1OTE4N1x1OTE4OVx1OTE4Ylx1OTE4M1x1OTJjNVx1OTJiYlx1OTJiN1x1OTJlYVx1OTJhY1x1''@;'; put 'put ''OTJlNFx1OTJjMVx1OTJiM1x1OTJiY1x1OTJkMlx1OTJjN1x1OTJmMFx1OTJiMlx1OTVhZFx1OTViMVx1OTcwNFx1OTcwNlx1OTcwN1x1OTcwOVx1OTc2MFx1OTc4ZFx1OTc4Ylx1OTc4Zlx1OTgyMVx1OTgyYlx1OTgxY1x1OThiM1x1OTkwYVx1OTkxM1x1OTkxMlx1OTkxOFx1OTlkZFx1OTlk''@;'; put 'put ''MFx1OTlkZlx1OTlkYlx1OTlkMVx1OTlkNVx1OTlkMlx1OTlkOVx1OWFiN1x1OWFlZVx1OWFlZlx1OWIyN1x1OWI0NVx1OWI0NFx1OWI3N1x1OWI2Zlx1OWQwNlx1OWQwOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWQwM1x1OWVhOVx1OWViZVx1OWVjZVx1NThh''@;'; put 'put ''OFx1OWY1Mlx1NTExMlx1NTExOFx1NTExNFx1NTExMFx1NTExNVx1NTE4MFx1NTFhYVx1NTFkZFx1NTI5MVx1NTI5M1x1NTJmM1x1NTY1OVx1NTY2Ylx1NTY3OVx1NTY2OVx1NTY2NFx1NTY3OFx1NTY2YVx1NTY2OFx1NTY2NVx1NTY3MVx1NTY2Zlx1NTY2Y1x1NTY2Mlx1NTY3Nlx1NThjMVx1''@;'; put 'put ''NThiZVx1NThjN1x1NThjNVx1NTk2ZVx1NWIxZFx1NWIzNFx1NWI3OFx1NWJmMFx1NWMwZVx1NWY0YVx1NjFiMlx1NjE5MVx1NjFhOVx1NjE4YVx1NjFjZFx1NjFiNlx1NjFiZVx1NjFjYVx1NjFjOFx1NjIzMFx1NjRjNVx1NjRjMVx1NjRjYlx1NjRiYlx1NjRiY1x1NjRkYVx1NjRjNFx1NjRj''@;'; put 'put ''N1x1NjRjMlx1NjRjZFx1NjRiZlx1NjRkMlx1NjRkNFx1NjRiZVx1NjU3NFx1NjZjNlx1NjZjOVx1NjZiOVx1NjZjNFx1NjZjN1x1NjZiOFx1NmEzZFx1NmEzOFx1NmEzYVx1NmE1OVx1NmE2Ylx1NmE1OFx1NmEzOVx1NmE0NFx1NmE2Mlx1NmE2MVx1NmE0Ylx1NmE0N1x1NmEzNVx1NmE1Zlx1''@;'; put 'put ''NmE0OFx1NmI1OVx1NmI3N1x1NmMwNVx1NmZjMlx1NmZiMVx1NmZhMVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5MF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTkwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5MF1bcF1dPTQ4NjQwK3AsYls0ODY0MCtwXT1fWzE5MF1bcF0pO2Zvcihf''@;'; put 'put ''WzE5MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZjM1x1NmZhNFx1NmZjMVx1NmZhN1x1NmZiM1x1NmZjMFx1NmZiOVx1NmZiNlx1NmZhNlx1NmZhMFx1NmZiNFx1NzFiZVx1NzFjOVx1NzFkMFx1NzFkMlx1NzFjOFx1NzFkNVx1''@;'; put 'put ''NzFiOVx1NzFjZVx1NzFkOVx1NzFkY1x1NzFjM1x1NzFjNFx1NzM2OFx1NzQ5Y1x1NzRhM1x1NzQ5OFx1NzQ5Zlx1NzQ5ZVx1NzRlMlx1NzUwY1x1NzUwZFx1NzYzNFx1NzYzOFx1NzYzYVx1NzZlN1x1NzZlNVx1NzdhMFx1Nzc5ZVx1Nzc5Zlx1NzdhNVx1NzhlOFx1NzhkYVx1NzhlY1x1Nzhl''@;'; put 'put ''N1x1NzlhNlx1N2E0ZFx1N2E0ZVx1N2E0Nlx1N2E0Y1x1N2E0Ylx1N2FiYVx1N2JkOVx1N2MxMVx1N2JjOVx1N2JlNFx1N2JkYlx1N2JlMVx1N2JlOVx1N2JlNlx1N2NkNVx1N2NkNlx1N2UwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2UxMVx1N2UwOFx1N2Ux''@;'; put 'put ''Ylx1N2UyM1x1N2UxZVx1N2UxZFx1N2UwOVx1N2UxMFx1N2Y3OVx1N2ZiMlx1N2ZmMFx1N2ZmMVx1N2ZlZVx1ODAyOFx1ODFiM1x1ODFhOVx1ODFhOFx1ODFmYlx1ODIwOFx1ODI1OFx1ODI1OVx1ODU0YVx1ODU1OVx1ODU0OFx1ODU2OFx1ODU2OVx1ODU0M1x1ODU0OVx1ODU2ZFx1ODU2YVx1''@;'; put 'put ''ODU1ZVx1ODc4M1x1ODc5Zlx1ODc5ZVx1ODdhMlx1ODc4ZFx1ODg2MVx1ODkyYVx1ODkzMlx1ODkyNVx1ODkyYlx1ODkyMVx1ODlhYVx1ODlhNlx1OGFlNlx1OGFmYVx1OGFlYlx1OGFmMVx1OGIwMFx1OGFkY1x1OGFlN1x1OGFlZVx1OGFmZVx1OGIwMVx1OGIwMlx1OGFmN1x1OGFlZFx1OGFm''@;'; put 'put ''M1x1OGFmNlx1OGFmY1x1OGM2Ylx1OGM2ZFx1OGM5M1x1OGNmNFx1OGU0NFx1OGUzMVx1OGUzNFx1OGU0Mlx1OGUzOVx1OGUzNVx1OGYzYlx1OGYyZlx1OGYzOFx1OGYzM1x1OGZhOFx1OGZhNlx1OTA3NVx1OTA3NFx1OTA3OFx1OTA3Mlx1OTA3Y1x1OTA3YVx1OTEzNFx1OTE5Mlx1OTMyMFx1''@;'; put 'put ''OTMzNlx1OTJmOFx1OTMzM1x1OTMyZlx1OTMyMlx1OTJmY1x1OTMyYlx1OTMwNFx1OTMxYVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5MV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTkxXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5MV1bcF1dPTQ4ODk2K3AsYls0ODg5NitwXT1fWzE5''@;'; put 'put ''MV1bcF0pO2ZvcihfWzE5Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTMxMFx1OTMyNlx1OTMyMVx1OTMxNVx1OTMyZVx1OTMxOVx1OTViYlx1OTZhN1x1OTZhOFx1OTZhYVx1OTZkNVx1OTcwZVx1OTcxMVx1OTcxNlx1OTcwZFx1''@;'; put 'put ''OTcxM1x1OTcwZlx1OTc1Ylx1OTc1Y1x1OTc2Nlx1OTc5OFx1OTgzMFx1OTgzOFx1OTgzYlx1OTgzN1x1OTgyZFx1OTgzOVx1OTgyNFx1OTkxMFx1OTkyOFx1OTkxZVx1OTkxYlx1OTkyMVx1OTkxYVx1OTllZFx1OTllMlx1OTlmMVx1OWFiOFx1OWFiY1x1OWFmYlx1OWFlZFx1OWIyOFx1OWI5''@;'; put 'put ''MVx1OWQxNVx1OWQyM1x1OWQyNlx1OWQyOFx1OWQxMlx1OWQxYlx1OWVkOFx1OWVkNFx1OWY4ZFx1OWY5Y1x1NTEyYVx1NTExZlx1NTEyMVx1NTEzMlx1NTJmNVx1NTY4ZVx1NTY4MFx1NTY5MFx1NTY4NVx1NTY4N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTY4''@;'; put 'put ''Zlx1NThkNVx1NThkM1x1NThkMVx1NThjZVx1NWIzMFx1NWIyYVx1NWIyNFx1NWI3YVx1NWMzN1x1NWM2OFx1NWRiY1x1NWRiYVx1NWRiZFx1NWRiOFx1NWU2Ylx1NWY0Y1x1NWZiZFx1NjFjOVx1NjFjMlx1NjFjN1x1NjFlNlx1NjFjYlx1NjIzMlx1NjIzNFx1NjRjZVx1NjRjYVx1NjRkOFx1''@;'; put 'put ''NjRlMFx1NjRmMFx1NjRlNlx1NjRlY1x1NjRmMVx1NjRlMlx1NjRlZFx1NjU4Mlx1NjU4M1x1NjZkOVx1NjZkNlx1NmE4MFx1NmE5NFx1NmE4NFx1NmFhMlx1NmE5Y1x1NmFkYlx1NmFhM1x1NmE3ZVx1NmE5N1x1NmE5MFx1NmFhMFx1NmI1Y1x1NmJhZVx1NmJkYVx1NmMwOFx1NmZkOFx1NmZm''@;'; put 'put ''MVx1NmZkZlx1NmZlMFx1NmZkYlx1NmZlNFx1NmZlYlx1NmZlZlx1NmY4MFx1NmZlY1x1NmZlMVx1NmZlOVx1NmZkNVx1NmZlZVx1NmZmMFx1NzFlN1x1NzFkZlx1NzFlZVx1NzFlNlx1NzFlNVx1NzFlZFx1NzFlY1x1NzFmNFx1NzFlMFx1NzIzNVx1NzI0Nlx1NzM3MFx1NzM3Mlx1NzRhOVx1''@;'; put 'put ''NzRiMFx1NzRhNlx1NzRhOFx1NzY0Nlx1NzY0Mlx1NzY0Y1x1NzZlYVx1NzdiM1x1NzdhYVx1NzdiMFx1NzdhY1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTkyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5Ml1bcF1dPTQ5MTUyK3AsYls0''@;'; put 'put ''OTE1MitwXT1fWzE5Ml1bcF0pO2ZvcihfWzE5M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdhN1x1NzdhZFx1NzdlZlx1NzhmN1x1NzhmYVx1NzhmNFx1NzhlZlx1NzkwMVx1NzlhN1x1NzlhYVx1N2E1N1x1N2FiZlx1N2MwN1x1''@;'; put 'put ''N2MwZFx1N2JmZVx1N2JmN1x1N2MwY1x1N2JlMFx1N2NlMFx1N2NkY1x1N2NkZVx1N2NlMlx1N2NkZlx1N2NkOVx1N2NkZFx1N2UyZVx1N2UzZVx1N2U0Nlx1N2UzN1x1N2UzMlx1N2U0M1x1N2UyYlx1N2UzZFx1N2UzMVx1N2U0NVx1N2U0MVx1N2UzNFx1N2UzOVx1N2U0OFx1N2UzNVx1N2Uz''@;'; put 'put ''Zlx1N2UyZlx1N2Y0NFx1N2ZmM1x1N2ZmY1x1ODA3MVx1ODA3Mlx1ODA3MFx1ODA2Zlx1ODA3M1x1ODFjNlx1ODFjM1x1ODFiYVx1ODFjMlx1ODFjMFx1ODFiZlx1ODFiZFx1ODFjOVx1ODFiZVx1ODFlOFx1ODIwOVx1ODI3MVx1ODVhYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ODU4NFx1ODU3ZVx1ODU5Y1x1ODU5MVx1ODU5NFx1ODVhZlx1ODU5Ylx1ODU4N1x1ODVhOFx1ODU4YVx1ODY2N1x1ODdjMFx1ODdkMVx1ODdiM1x1ODdkMlx1ODdjNlx1ODdhYlx1ODdiYlx1ODdiYVx1ODdjOFx1ODdjYlx1ODkzYlx1ODkzNlx1ODk0NFx1ODkzOFx1ODkzZFx1''@;'; put 'put ''ODlhY1x1OGIwZVx1OGIxN1x1OGIxOVx1OGIxYlx1OGIwYVx1OGIyMFx1OGIxZFx1OGIwNFx1OGIxMFx1OGM0MVx1OGMzZlx1OGM3M1x1OGNmYVx1OGNmZFx1OGNmY1x1OGNmOFx1OGNmYlx1OGRhOFx1OGU0OVx1OGU0Ylx1OGU0OFx1OGU0YVx1OGY0NFx1OGYzZVx1OGY0Mlx1OGY0NVx1OGYz''@;'; put 'put ''Zlx1OTA3Zlx1OTA3ZFx1OTA4NFx1OTA4MVx1OTA4Mlx1OTA4MFx1OTEzOVx1OTFhM1x1OTE5ZVx1OTE5Y1x1OTM0ZFx1OTM4Mlx1OTMyOFx1OTM3NVx1OTM0YVx1OTM2NVx1OTM0Ylx1OTMxOFx1OTM3ZVx1OTM2Y1x1OTM1Ylx1OTM3MFx1OTM1YVx1OTM1NFx1OTVjYVx1OTVjYlx1OTVjY1x1''@;'; put 'put ''OTVjOFx1OTVjNlx1OTZiMVx1OTZiOFx1OTZkNlx1OTcxY1x1OTcxZVx1OTdhMFx1OTdkM1x1OTg0Nlx1OThiNlx1OTkzNVx1OWEwMVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5M10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTkzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5M11bcF1d''@;'; put 'put ''PTQ5NDA4K3AsYls0OTQwOCtwXT1fWzE5M11bcF0pO2ZvcihfWzE5NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTlmZlx1OWJhZVx1OWJhYlx1OWJhYVx1OWJhZFx1OWQzYlx1OWQzZlx1OWU4Ylx1OWVjZlx1OWVkZVx1OWVkY1x1''@;'; put 'put ''OWVkZFx1OWVkYlx1OWYzZVx1OWY0Ylx1NTNlMlx1NTY5NVx1NTZhZVx1NThkOVx1NThkOFx1NWIzOFx1NWY1ZFx1NjFlM1x1NjIzM1x1NjRmNFx1NjRmMlx1NjRmZVx1NjUwNlx1NjRmYVx1NjRmYlx1NjRmN1x1NjViN1x1NjZkY1x1NjcyNlx1NmFiM1x1NmFhY1x1NmFjM1x1NmFiYlx1NmFi''@;'; put 'put ''OFx1NmFjMlx1NmFhZVx1NmFhZlx1NmI1Zlx1NmI3OFx1NmJhZlx1NzAwOVx1NzAwYlx1NmZmZVx1NzAwNlx1NmZmYVx1NzAxMVx1NzAwZlx1NzFmYlx1NzFmY1x1NzFmZVx1NzFmOFx1NzM3N1x1NzM3NVx1NzRhN1x1NzRiZlx1NzUxNVx1NzY1Nlx1NzY1OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzY1Mlx1NzdiZFx1NzdiZlx1NzdiYlx1NzdiY1x1NzkwZVx1NzlhZVx1N2E2MVx1N2E2Mlx1N2E2MFx1N2FjNFx1N2FjNVx1N2MyYlx1N2MyN1x1N2MyYVx1N2MxZVx1N2MyM1x1N2MyMVx1N2NlN1x1N2U1NFx1N2U1NVx1N2U1ZVx1N2U1YVx1N2U2MVx1''@;'; put 'put ''N2U1Mlx1N2U1OVx1N2Y0OFx1N2ZmOVx1N2ZmYlx1ODA3N1x1ODA3Nlx1ODFjZFx1ODFjZlx1ODIwYVx1ODVjZlx1ODVhOVx1ODVjZFx1ODVkMFx1ODVjOVx1ODViMFx1ODViYVx1ODViOVx1ODVhNlx1ODdlZlx1ODdlY1x1ODdmMlx1ODdlMFx1ODk4Nlx1ODliMlx1ODlmNFx1OGIyOFx1OGIz''@;'; put 'put ''OVx1OGIyY1x1OGIyYlx1OGM1MFx1OGQwNVx1OGU1OVx1OGU2M1x1OGU2Nlx1OGU2NFx1OGU1Zlx1OGU1NVx1OGVjMFx1OGY0OVx1OGY0ZFx1OTA4N1x1OTA4M1x1OTA4OFx1OTFhYlx1OTFhY1x1OTFkMFx1OTM5NFx1OTM4YVx1OTM5Nlx1OTNhMlx1OTNiM1x1OTNhZVx1OTNhY1x1OTNiMFx1''@;'; put 'put ''OTM5OFx1OTM5YVx1OTM5N1x1OTVkNFx1OTVkNlx1OTVkMFx1OTVkNVx1OTZlMlx1OTZkY1x1OTZkOVx1OTZkYlx1OTZkZVx1OTcyNFx1OTdhM1x1OTdhNlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5NF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTk0XVtwXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''SVtfWzE5NF1bcF1dPTQ5NjY0K3AsYls0OTY2NCtwXT1fWzE5NF1bcF0pO2ZvcihfWzE5NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTdhZFx1OTdmOVx1OTg0ZFx1OTg0Zlx1OTg0Y1x1OTg0ZVx1OTg1M1x1OThiYVx1OTkzZVx1''@;'; put 'put ''OTkzZlx1OTkzZFx1OTkyZVx1OTlhNVx1OWEwZVx1OWFjMVx1OWIwM1x1OWIwNlx1OWI0Zlx1OWI0ZVx1OWI0ZFx1OWJjYVx1OWJjOVx1OWJmZFx1OWJjOFx1OWJjMFx1OWQ1MVx1OWQ1ZFx1OWQ2MFx1OWVlMFx1OWYxNVx1OWYyY1x1NTEzM1x1NTZhNVx1NThkZVx1NThkZlx1NThlMlx1NWJm''@;'; put 'put ''NVx1OWY5MFx1NWVlY1x1NjFmMlx1NjFmN1x1NjFmNlx1NjFmNVx1NjUwMFx1NjUwZlx1NjZlMFx1NjZkZFx1NmFlNVx1NmFkZFx1NmFkYVx1NmFkM1x1NzAxYlx1NzAxZlx1NzAyOFx1NzAxYVx1NzAxZFx1NzAxNVx1NzAxOFx1NzIwNlx1NzIwZFx1NzI1OFx1NzJhMlx1NzM3OFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzM3YVx1NzRiZFx1NzRjYVx1NzRlM1x1NzU4N1x1NzU4Nlx1NzY1Zlx1NzY2MVx1NzdjN1x1NzkxOVx1NzliMVx1N2E2Ylx1N2E2OVx1N2MzZVx1N2MzZlx1N2MzOFx1N2MzZFx1N2MzN1x1N2M0MFx1N2U2Ylx1N2U2ZFx1N2U3OVx1''@;'; put 'put ''N2U2OVx1N2U2YVx1N2Y4NVx1N2U3M1x1N2ZiNlx1N2ZiOVx1N2ZiOFx1ODFkOFx1ODVlOVx1ODVkZFx1ODVlYVx1ODVkNVx1ODVlNFx1ODVlNVx1ODVmN1x1ODdmYlx1ODgwNVx1ODgwZFx1ODdmOVx1ODdmZVx1ODk2MFx1ODk1Zlx1ODk1Nlx1ODk1ZVx1OGI0MVx1OGI1Y1x1OGI1OFx1OGI0''@;'; put 'put ''OVx1OGI1YVx1OGI0ZVx1OGI0Zlx1OGI0Nlx1OGI1OVx1OGQwOFx1OGQwYVx1OGU3Y1x1OGU3Mlx1OGU4N1x1OGU3Nlx1OGU2Y1x1OGU3YVx1OGU3NFx1OGY1NFx1OGY0ZVx1OGZhZFx1OTA4YVx1OTA4Ylx1OTFiMVx1OTFhZVx1OTNlMVx1OTNkMVx1OTNkZlx1OTNjM1x1OTNjOFx1OTNkY1x1''@;'; put 'put ''OTNkZFx1OTNkNlx1OTNlMlx1OTNjZFx1OTNkOFx1OTNlNFx1OTNkN1x1OTNlOFx1OTVkY1x1OTZiNFx1OTZlM1x1OTcyYVx1OTcyN1x1OTc2MVx1OTdkY1x1OTdmYlx1OTg1ZVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5NV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTk1XVtwXS5jaGFy''@;'; put 'put ''Q29kZUF0KDApJiYoSVtfWzE5NV1bcF1dPTQ5OTIwK3AsYls0OTkyMCtwXT1fWzE5NV1bcF0pO2ZvcihfWzE5Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTg1OFx1OTg1Ylx1OThiY1x1OTk0NVx1OTk0OVx1OWExNlx1OWExOVx1''@;'; put 'put ''OWIwZFx1OWJlOFx1OWJlN1x1OWJkNlx1OWJkYlx1OWQ4OVx1OWQ2MVx1OWQ3Mlx1OWQ2YVx1OWQ2Y1x1OWU5Mlx1OWU5N1x1OWU5M1x1OWViNFx1NTJmOFx1NTZhOFx1NTZiN1x1NTZiNlx1NTZiNFx1NTZiY1x1NThlNFx1NWI0MFx1NWI0M1x1NWI3ZFx1NWJmNlx1NWRjOVx1NjFmOFx1NjFm''@;'; put 'put ''YVx1NjUxOFx1NjUxNFx1NjUxOVx1NjZlNlx1NjcyN1x1NmFlY1x1NzAzZVx1NzAzMFx1NzAzMlx1NzIxMFx1NzM3Ylx1NzRjZlx1NzY2Mlx1NzY2NVx1NzkyNlx1NzkyYVx1NzkyY1x1NzkyYlx1N2FjN1x1N2FmNlx1N2M0Y1x1N2M0M1x1N2M0ZFx1N2NlZlx1N2NmMFx1OGZhZVx1N2U3ZFx1''@;'; put 'put ''N2U3Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2U4Mlx1N2Y0Y1x1ODAwMFx1ODFkYVx1ODI2Nlx1ODVmYlx1ODVmOVx1ODYxMVx1ODVmYVx1ODYwNlx1ODYwYlx1ODYwN1x1ODYwYVx1ODgxNFx1ODgxNVx1ODk2NFx1ODliYVx1ODlmOFx1OGI3MFx1OGI2Y1x1''@;'; put 'put ''OGI2Nlx1OGI2Zlx1OGI1Zlx1OGI2Ylx1OGQwZlx1OGQwZFx1OGU4OVx1OGU4MVx1OGU4NVx1OGU4Mlx1OTFiNFx1OTFjYlx1OTQxOFx1OTQwM1x1OTNmZFx1OTVlMVx1OTczMFx1OThjNFx1OTk1Mlx1OTk1MVx1OTlhOFx1OWEyYlx1OWEzMFx1OWEzN1x1OWEzNVx1OWMxM1x1OWMwZFx1OWU3''@;'; put 'put ''OVx1OWViNVx1OWVlOFx1OWYyZlx1OWY1Zlx1OWY2M1x1OWY2MVx1NTEzN1x1NTEzOFx1NTZjMVx1NTZjMFx1NTZjMlx1NTkxNFx1NWM2Y1x1NWRjZFx1NjFmY1x1NjFmZVx1NjUxZFx1NjUxY1x1NjU5NVx1NjZlOVx1NmFmYlx1NmIwNFx1NmFmYVx1NmJiMlx1NzA0Y1x1NzIxYlx1NzJhN1x1''@;'; put 'put ''NzRkNlx1NzRkNFx1NzY2OVx1NzdkM1x1N2M1MFx1N2U4Zlx1N2U4Y1x1N2ZiY1x1ODYxN1x1ODYyZFx1ODYxYVx1ODgyM1x1ODgyMlx1ODgyMVx1ODgxZlx1ODk2YVx1ODk2Y1x1ODliZFx1OGI3NFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5Nl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9b''@;'; put 'put ''MTk2XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5Nl1bcF1dPTUwMTc2K3AsYls1MDE3NitwXT1fWzE5Nl1bcF0pO2ZvcihfWzE5N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI3N1x1OGI3ZFx1OGQxM1x1OGU4YVx1OGU4ZFx1''@;'; put 'put ''OGU4Ylx1OGY1Zlx1OGZhZlx1OTFiYVx1OTQyZVx1OTQzM1x1OTQzNVx1OTQzYVx1OTQzOFx1OTQzMlx1OTQyYlx1OTVlMlx1OTczOFx1OTczOVx1OTczMlx1OTdmZlx1OTg2N1x1OTg2NVx1OTk1N1x1OWE0NVx1OWE0M1x1OWE0MFx1OWEzZVx1OWFjZlx1OWI1NFx1OWI1MVx1OWMyZFx1OWMy''@;'; put 'put ''NVx1OWRhZlx1OWRiNFx1OWRjMlx1OWRiOFx1OWU5ZFx1OWVlZlx1OWYxOVx1OWY1Y1x1OWY2Nlx1OWY2N1x1NTEzY1x1NTEzYlx1NTZjOFx1NTZjYVx1NTZjOVx1NWI3Zlx1NWRkNFx1NWRkMlx1NWY0ZVx1NjFmZlx1NjUyNFx1NmIwYVx1NmI2MVx1NzA1MVx1NzA1OFx1NzM4MFx1NzRlNFx1''@;'; put 'put ''NzU4YVx1NzY2ZVx1NzY2Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzliM1x1N2M2MFx1N2M1Zlx1ODA3ZVx1ODA3ZFx1ODFkZlx1ODk3Mlx1ODk2Zlx1ODlmY1x1OGI4MFx1OGQxNlx1OGQxN1x1OGU5MVx1OGU5M1x1OGY2MVx1OTE0OFx1OTQ0NFx1OTQ1MVx1''@;'; put 'put ''OTQ1Mlx1OTczZFx1OTczZVx1OTdjM1x1OTdjMVx1OTg2Ylx1OTk1NVx1OWE1NVx1OWE0ZFx1OWFkMlx1OWIxYVx1OWM0OVx1OWMzMVx1OWMzZVx1OWMzYlx1OWRkM1x1OWRkN1x1OWYzNFx1OWY2Y1x1OWY2YVx1OWY5NFx1NTZjY1x1NWRkNlx1NjIwMFx1NjUyM1x1NjUyYlx1NjUyYVx1NjZl''@;'; put 'put ''Y1x1NmIxMFx1NzRkYVx1N2FjYVx1N2M2NFx1N2M2M1x1N2M2NVx1N2U5M1x1N2U5Nlx1N2U5NFx1ODFlMlx1ODYzOFx1ODYzZlx1ODgzMVx1OGI4YVx1OTA5MFx1OTA4Zlx1OTQ2M1x1OTQ2MFx1OTQ2NFx1OTc2OFx1OTg2Zlx1OTk1Y1x1OWE1YVx1OWE1Ylx1OWE1N1x1OWFkM1x1OWFkNFx1''@;'; put 'put ''OWFkMVx1OWM1NFx1OWM1N1x1OWM1Nlx1OWRlNVx1OWU5Zlx1OWVmNFx1NTZkMVx1NThlOVx1NjUyY1x1NzA1ZVx1NzY3MVx1NzY3Mlx1NzdkN1x1N2Y1MFx1N2Y4OFx1ODgzNlx1ODgzOVx1ODg2Mlx1OGI5M1x1OGI5Mlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5N10ubGVuZ3RoOysr''@;'; put 'put ''cCk2NTUzMyE9PV9bMTk3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5N11bcF1dPTUwNDMyK3AsYls1MDQzMitwXT1fWzE5N11bcF0pO2ZvcihfWzE5OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI5Nlx1ODI3N1x1OGQxYlx1''@;'; put 'put ''OTFjMFx1OTQ2YVx1OTc0Mlx1OTc0OFx1OTc0NFx1OTdjNlx1OTg3MFx1OWE1Zlx1OWIyMlx1OWI1OFx1OWM1Zlx1OWRmOVx1OWRmYVx1OWU3Y1x1OWU3ZFx1OWYwN1x1OWY3N1x1OWY3Mlx1NWVmM1x1NmIxNlx1NzA2M1x1N2M2Y1x1N2M2ZVx1ODgzYlx1ODljMFx1OGVhMVx1OTFjMVx1OTQ3''@;'; put 'put ''Mlx1OTQ3MFx1OTg3MVx1OTk1ZVx1OWFkNlx1OWIyM1x1OWVjY1x1NzA2NFx1NzdkYVx1OGI5YVx1OTQ3N1x1OTdjOVx1OWE2Mlx1OWE2NVx1N2U5Y1x1OGI5Y1x1OGVhYVx1OTFjNVx1OTQ3ZFx1OTQ3ZVx1OTQ3Y1x1OWM3N1x1OWM3OFx1OWVmN1x1OGM1NFx1OTQ3Zlx1OWUxYVx1NzIyOFx1''@;'; put 'put ''OWE2YVx1OWIzMVx1OWUxYlx1OWUxZVx1N2M3Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5''@;'; put 'put ''OF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTk4XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5OF1bcF1dPTUwNjg4K3AsYls1MDY4OCtwXT1fWzE5OF1bcF0pO2ZvcihfWzIwMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGU0Mlx1''@;'; put 'put ''NGU1Y1x1NTFmNVx1NTMxYVx1NTM4Mlx1NGUwN1x1NGUwY1x1NGU0N1x1NGU4ZFx1NTZkN1x1ZmEwY1x1NWM2ZVx1NWY3M1x1NGUwZlx1NTE4N1x1NGUwZVx1NGUyZVx1NGU5M1x1NGVjMlx1NGVjOVx1NGVjOFx1NTE5OFx1NTJmY1x1NTM2Y1x1NTNiOVx1NTcyMFx1NTkwM1x1NTkyY1x1NWMx''@;'; put 'put ''MFx1NWRmZlx1NjVlMVx1NmJiM1x1NmJjY1x1NmMxNFx1NzIzZlx1NGUzMVx1NGUzY1x1NGVlOFx1NGVkY1x1NGVlOVx1NGVlMVx1NGVkZFx1NGVkYVx1NTIwY1x1NTMxY1x1NTM0Y1x1NTcyMlx1NTcyM1x1NTkxN1x1NTkyZlx1NWI4MVx1NWI4NFx1NWMxMlx1NWMzYlx1NWM3NFx1NWM3M1x1''@;'; put 'put ''NWUwNFx1NWU4MFx1NWU4Mlx1NWZjOVx1NjIwOVx1NjI1MFx1NmMxNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmMzNlx1NmM0M1x1NmMzZlx1NmMzYlx1NzJhZVx1NzJiMFx1NzM4YVx1NzliOFx1ODA4YVx1OTYxZVx1NGYwZVx1NGYxOFx1NGYyY1x1NGVmNVx1''@;'; put 'put ''NGYxNFx1NGVmMVx1NGYwMFx1NGVmN1x1NGYwOFx1NGYxZFx1NGYwMlx1NGYwNVx1NGYyMlx1NGYxM1x1NGYwNFx1NGVmNFx1NGYxMlx1NTFiMVx1NTIxM1x1NTIwOVx1NTIxMFx1NTJhNlx1NTMyMlx1NTMxZlx1NTM0ZFx1NTM4YVx1NTQwN1x1NTZlMVx1NTZkZlx1NTcyZVx1NTcyYVx1NTcz''@;'; put 'put ''NFx1NTkzY1x1NTk4MFx1NTk3Y1x1NTk4NVx1NTk3Ylx1NTk3ZVx1NTk3N1x1NTk3Zlx1NWI1Nlx1NWMxNVx1NWMyNVx1NWM3Y1x1NWM3YVx1NWM3Ylx1NWM3ZVx1NWRkZlx1NWU3NVx1NWU4NFx1NWYwMlx1NWYxYVx1NWY3NFx1NWZkNVx1NWZkNFx1NWZjZlx1NjI1Y1x1NjI1ZVx1NjI2NFx1''@;'; put 'put ''NjI2MVx1NjI2Nlx1NjI2Mlx1NjI1OVx1NjI2MFx1NjI1YVx1NjI2NVx1NjVlZlx1NjVlZVx1NjczZVx1NjczOVx1NjczOFx1NjczYlx1NjczYVx1NjczZlx1NjczY1x1NjczM1x1NmMxOFx1NmM0Nlx1NmM1Mlx1NmM1Y1x1NmM0Zlx1NmM0YVx1NmM1NFx1NmM0Ylx1ZmZmZCIuc3BsaXQoIiIp''@;'; put 'put ''LHA9MDtwIT1fWzIwMV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjAxXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwMV1bcF1dPTUxNDU2K3AsYls1MTQ1NitwXT1fWzIwMV1bcF0pO2ZvcihfWzIwMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1NmM0Y1x1NzA3MVx1NzI1ZVx1NzJiNFx1NzJiNVx1NzM4ZVx1NzUyYVx1NzY3Zlx1N2E3NVx1N2Y1MVx1ODI3OFx1ODI3Y1x1ODI4MFx1ODI3ZFx1ODI3Zlx1ODY0ZFx1ODk3ZVx1OTA5OVx1OTA5N1x1OTA5OFx1OTA5Ylx1OTA5NFx1OTYyMlx1OTYyNFx1OTYyMFx1OTYyM1x1NGY1''@;'; put 'put ''Nlx1NGYzYlx1NGY2Mlx1NGY0OVx1NGY1M1x1NGY2NFx1NGYzZVx1NGY2N1x1NGY1Mlx1NGY1Zlx1NGY0MVx1NGY1OFx1NGYyZFx1NGYzM1x1NGYzZlx1NGY2MVx1NTE4Zlx1NTFiOVx1NTIxY1x1NTIxZVx1NTIyMVx1NTJhZFx1NTJhZVx1NTMwOVx1NTM2M1x1NTM3Mlx1NTM4ZVx1NTM4Zlx1''@;'; put 'put ''NTQzMFx1NTQzN1x1NTQyYVx1NTQ1NFx1NTQ0NVx1NTQxOVx1NTQxY1x1NTQyNVx1NTQxOFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTQzZFx1NTQ0Zlx1NTQ0MVx1NTQyOFx1NTQyNFx1NTQ0N1x1NTZlZVx1NTZlN1x1NTZlNVx1NTc0MVx1NTc0NVx1NTc0Y1x1''@;'; put 'put ''NTc0OVx1NTc0Ylx1NTc1Mlx1NTkwNlx1NTk0MFx1NTlhNlx1NTk5OFx1NTlhMFx1NTk5N1x1NTk4ZVx1NTlhMlx1NTk5MFx1NTk4Zlx1NTlhN1x1NTlhMVx1NWI4ZVx1NWI5Mlx1NWMyOFx1NWMyYVx1NWM4ZFx1NWM4Zlx1NWM4OFx1NWM4Ylx1NWM4OVx1NWM5Mlx1NWM4YVx1NWM4Nlx1NWM5''@;'; put 'put ''M1x1NWM5NVx1NWRlMFx1NWUwYVx1NWUwZVx1NWU4Ylx1NWU4OVx1NWU4Y1x1NWU4OFx1NWU4ZFx1NWYwNVx1NWYxZFx1NWY3OFx1NWY3Nlx1NWZkMlx1NWZkMVx1NWZkMFx1NWZlZFx1NWZlOFx1NWZlZVx1NWZmM1x1NWZlMVx1NWZlNFx1NWZlM1x1NWZmYVx1NWZlZlx1NWZmN1x1NWZmYlx1''@;'; put 'put ''NjAwMFx1NWZmNFx1NjIzYVx1NjI4M1x1NjI4Y1x1NjI4ZVx1NjI4Zlx1NjI5NFx1NjI4N1x1NjI3MVx1NjI3Ylx1NjI3YVx1NjI3MFx1NjI4MVx1NjI4OFx1NjI3N1x1NjI3ZFx1NjI3Mlx1NjI3NFx1NjUzN1x1NjVmMFx1NjVmNFx1NjVmM1x1NjVmMlx1NjVmNVx1Njc0NVx1Njc0N1x1ZmZm''@;'; put 'put ''ZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwMl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjAyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwMl1bcF1dPTUxNzEyK3AsYls1MTcxMitwXT1fWzIwMl1bcF0pO2ZvcihfWzIwM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1Njc1OVx1Njc1NVx1Njc0Y1x1Njc0OFx1Njc1ZFx1Njc0ZFx1Njc1YVx1Njc0Ylx1NmJkMFx1NmMxOVx1NmMxYVx1NmM3OFx1NmM2N1x1NmM2Ylx1NmM4NFx1NmM4Ylx1NmM4Zlx1NmM3MVx1NmM2Zlx1NmM2OVx1NmM5YVx1NmM2ZFx1NmM4N1x1NmM5NVx1NmM5''@;'; put 'put ''Y1x1NmM2Nlx1NmM3M1x1NmM2NVx1NmM3Ylx1NmM4ZVx1NzA3NFx1NzA3YVx1NzI2M1x1NzJiZlx1NzJiZFx1NzJjM1x1NzJjNlx1NzJjMVx1NzJiYVx1NzJjNVx1NzM5NVx1NzM5N1x1NzM5M1x1NzM5NFx1NzM5Mlx1NzUzYVx1NzUzOVx1NzU5NFx1NzU5NVx1NzY4MVx1NzkzZFx1ODAzNFx1''@;'; put 'put ''ODA5NVx1ODA5OVx1ODA5MFx1ODA5Mlx1ODA5Y1x1ODI5MFx1ODI4Zlx1ODI4NVx1ODI4ZVx1ODI5MVx1ODI5M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODI4YVx1ODI4M1x1ODI4NFx1OGM3OFx1OGZjOVx1OGZiZlx1OTA5Zlx1OTBhMVx1OTBhNVx1OTA5ZVx1''@;'; put 'put ''OTBhN1x1OTBhMFx1OTYzMFx1OTYyOFx1OTYyZlx1OTYyZFx1NGUzM1x1NGY5OFx1NGY3Y1x1NGY4NVx1NGY3ZFx1NGY4MFx1NGY4N1x1NGY3Nlx1NGY3NFx1NGY4OVx1NGY4NFx1NGY3N1x1NGY0Y1x1NGY5N1x1NGY2YVx1NGY5YVx1NGY3OVx1NGY4MVx1NGY3OFx1NGY5MFx1NGY5Y1x1NGY5''@;'; put 'put ''NFx1NGY5ZVx1NGY5Mlx1NGY4Mlx1NGY5NVx1NGY2Ylx1NGY2ZVx1NTE5ZVx1NTFiY1x1NTFiZVx1NTIzNVx1NTIzMlx1NTIzM1x1NTI0Nlx1NTIzMVx1NTJiY1x1NTMwYVx1NTMwYlx1NTMzY1x1NTM5Mlx1NTM5NFx1NTQ4N1x1NTQ3Zlx1NTQ4MVx1NTQ5MVx1NTQ4Mlx1NTQ4OFx1NTQ2Ylx1''@;'; put 'put ''NTQ3YVx1NTQ3ZVx1NTQ2NVx1NTQ2Y1x1NTQ3NFx1NTQ2Nlx1NTQ4ZFx1NTQ2Zlx1NTQ2MVx1NTQ2MFx1NTQ5OFx1NTQ2M1x1NTQ2N1x1NTQ2NFx1NTZmN1x1NTZmOVx1NTc2Zlx1NTc3Mlx1NTc2ZFx1NTc2Ylx1NTc3MVx1NTc3MFx1NTc3Nlx1NTc4MFx1NTc3NVx1NTc3Ylx1NTc3M1x1NTc3''@;'; put 'put ''NFx1NTc2Mlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwM10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjAzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwM11bcF1dPTUxOTY4K3AsYls1MTk2OCtwXT1fWzIwM11bcF0pO2ZvcihfWzIwNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTc2OFx1NTc3ZFx1NTkwY1x1NTk0NVx1NTliNVx1NTliYVx1NTljZlx1NTljZVx1NTliMlx1NTljY1x1NTljMVx1NTliNlx1NTliY1x1NTljM1x1NTlkNlx1NTliMVx1NTliZFx1NTljMFx1NTljOFx1NTliNFx1NTljN1x1NWI2Mlx1NWI2''@;'; put 'put ''NVx1NWI5M1x1NWI5NVx1NWM0NFx1NWM0N1x1NWNhZVx1NWNhNFx1NWNhMFx1NWNiNVx1NWNhZlx1NWNhOFx1NWNhY1x1NWM5Zlx1NWNhM1x1NWNhZFx1NWNhMlx1NWNhYVx1NWNhN1x1NWM5ZFx1NWNhNVx1NWNiNlx1NWNiMFx1NWNhNlx1NWUxN1x1NWUxNFx1NWUxOVx1NWYyOFx1NWYyMlx1''@;'; put 'put ''NWYyM1x1NWYyNFx1NWY1NFx1NWY4Mlx1NWY3ZVx1NWY3ZFx1NWZkZVx1NWZlNVx1NjAyZFx1NjAyNlx1NjAxOVx1NjAzMlx1NjAwYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjAzNFx1NjAwYVx1NjAxN1x1NjAzM1x1NjAxYVx1NjAxZVx1NjAyY1x1NjAyMlx1''@;'; put 'put ''NjAwZFx1NjAxMFx1NjAyZVx1NjAxM1x1NjAxMVx1NjAwY1x1NjAwOVx1NjAxY1x1NjIxNFx1NjIzZFx1NjJhZFx1NjJiNFx1NjJkMVx1NjJiZVx1NjJhYVx1NjJiNlx1NjJjYVx1NjJhZVx1NjJiM1x1NjJhZlx1NjJiYlx1NjJhOVx1NjJiMFx1NjJiOFx1NjUzZFx1NjVhOFx1NjViYlx1NjYw''@;'; put 'put ''OVx1NjVmY1x1NjYwNFx1NjYxMlx1NjYwOFx1NjVmYlx1NjYwM1x1NjYwYlx1NjYwZFx1NjYwNVx1NjVmZFx1NjYxMVx1NjYxMFx1NjZmNlx1NjcwYVx1Njc4NVx1Njc2Y1x1Njc4ZVx1Njc5Mlx1Njc3Nlx1Njc3Ylx1Njc5OFx1Njc4Nlx1Njc4NFx1Njc3NFx1Njc4ZFx1Njc4Y1x1Njc3YVx1''@;'; put 'put ''Njc5Zlx1Njc5MVx1Njc5OVx1Njc4M1x1Njc3ZFx1Njc4MVx1Njc3OFx1Njc3OVx1Njc5NFx1NmIyNVx1NmI4MFx1NmI3ZVx1NmJkZVx1NmMxZFx1NmM5M1x1NmNlY1x1NmNlYlx1NmNlZVx1NmNkOVx1NmNiNlx1NmNkNFx1NmNhZFx1NmNlN1x1NmNiN1x1NmNkMFx1NmNjMlx1NmNiYVx1NmNj''@;'; put 'put ''M1x1NmNjNlx1NmNlZFx1NmNmMlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwNF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjA0XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwNF1bcF1dPTUyMjI0K3AsYls1MjIyNCtwXT1fWzIwNF1bcF0pO2ZvcihfWzIwNV09Ilx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmNkMlx1NmNkZFx1NmNiNFx1NmM4YVx1NmM5ZFx1NmM4MFx1NmNkZVx1NmNjMFx1NmQzMFx1NmNjZFx1NmNjN1x1NmNiMFx1NmNmOVx1NmNjZlx1NmNlOVx1NmNkMVx1NzA5NFx1NzA5OFx1NzA4NVx1NzA5M1x1NzA4''@;'; put 'put ''Nlx1NzA4NFx1NzA5MVx1NzA5Nlx1NzA4Mlx1NzA5YVx1NzA4M1x1NzI2YVx1NzJkNlx1NzJjYlx1NzJkOFx1NzJjOVx1NzJkY1x1NzJkMlx1NzJkNFx1NzJkYVx1NzJjY1x1NzJkMVx1NzNhNFx1NzNhMVx1NzNhZFx1NzNhNlx1NzNhMlx1NzNhMFx1NzNhY1x1NzM5ZFx1NzRkZFx1NzRlOFx1''@;'; put 'put ''NzUzZlx1NzU0MFx1NzUzZVx1NzU4Y1x1NzU5OFx1NzZhZlx1NzZmM1x1NzZmMVx1NzZmMFx1NzZmNVx1NzdmOFx1NzdmY1x1NzdmOVx1NzdmYlx1NzdmYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdmN1x1Nzk0Mlx1NzkzZlx1NzljNVx1N2E3OFx1N2E3Ylx1''@;'; put 'put ''N2FmYlx1N2M3NVx1N2NmZFx1ODAzNVx1ODA4Zlx1ODBhZVx1ODBhM1x1ODBiOFx1ODBiNVx1ODBhZFx1ODIyMFx1ODJhMFx1ODJjMFx1ODJhYlx1ODI5YVx1ODI5OFx1ODI5Ylx1ODJiNVx1ODJhN1x1ODJhZVx1ODJiY1x1ODI5ZVx1ODJiYVx1ODJiNFx1ODJhOFx1ODJhMVx1ODJhOVx1ODJj''@;'; put 'put ''Mlx1ODJhNFx1ODJjM1x1ODJiNlx1ODJhMlx1ODY3MFx1ODY2Zlx1ODY2ZFx1ODY2ZVx1OGM1Nlx1OGZkMlx1OGZjYlx1OGZkM1x1OGZjZFx1OGZkNlx1OGZkNVx1OGZkN1x1OTBiMlx1OTBiNFx1OTBhZlx1OTBiM1x1OTBiMFx1OTYzOVx1OTYzZFx1OTYzY1x1OTYzYVx1OTY0M1x1NGZjZFx1''@;'; put 'put ''NGZjNVx1NGZkM1x1NGZiMlx1NGZjOVx1NGZjYlx1NGZjMVx1NGZkNFx1NGZkY1x1NGZkOVx1NGZiYlx1NGZiM1x1NGZkYlx1NGZjN1x1NGZkNlx1NGZiYVx1NGZjMFx1NGZiOVx1NGZlY1x1NTI0NFx1NTI0OVx1NTJjMFx1NTJjMlx1NTMzZFx1NTM3Y1x1NTM5N1x1NTM5Nlx1NTM5OVx1NTM5''@;'; put 'put ''OFx1NTRiYVx1NTRhMVx1NTRhZFx1NTRhNVx1NTRjZlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwNV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjA1XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwNV1bcF1dPTUyNDgwK3AsYls1MjQ4MCtwXT1fWzIwNV1bcF0pO2ZvcihfWzIwNl09Ilx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRjM1x1ODMwZFx1NTRiN1x1NTRhZVx1NTRkNlx1NTRiNlx1NTRjNVx1NTRjNlx1NTRhMFx1NTQ3MFx1NTRiY1x1NTRhMlx1NTRiZVx1NTQ3Mlx1NTRkZVx1NTRiMFx1NTdiNVx1NTc5ZVx1NTc5''@;'; put 'put ''Zlx1NTdhNFx1NTc4Y1x1NTc5N1x1NTc5ZFx1NTc5Ylx1NTc5NFx1NTc5OFx1NTc4Zlx1NTc5OVx1NTdhNVx1NTc5YVx1NTc5NVx1NThmNFx1NTkwZFx1NTk1M1x1NTllMVx1NTlkZVx1NTllZVx1NWEwMFx1NTlmMVx1NTlkZFx1NTlmYVx1NTlmZFx1NTlmY1x1NTlmNlx1NTllNFx1NTlmMlx1''@;'; put 'put ''NTlmN1x1NTlkYlx1NTllOVx1NTlmM1x1NTlmNVx1NTllMFx1NTlmZVx1NTlmNFx1NTllZFx1NWJhOFx1NWM0Y1x1NWNkMFx1NWNkOFx1NWNjY1x1NWNkN1x1NWNjYlx1NWNkYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWNkZVx1NWNkYVx1NWNjOVx1NWNjN1x1''@;'; put 'put ''NWNjYVx1NWNkNlx1NWNkM1x1NWNkNFx1NWNjZlx1NWNjOFx1NWNjNlx1NWNjZVx1NWNkZlx1NWNmOFx1NWRmOVx1NWUyMVx1NWUyMlx1NWUyM1x1NWUyMFx1NWUyNFx1NWViMFx1NWVhNFx1NWVhMlx1NWU5Ylx1NWVhM1x1NWVhNVx1NWYwN1x1NWYyZVx1NWY1Nlx1NWY4Nlx1NjAzN1x1NjAz''@;'; put 'put ''OVx1NjA1NFx1NjA3Mlx1NjA1ZVx1NjA0NVx1NjA1M1x1NjA0N1x1NjA0OVx1NjA1Ylx1NjA0Y1x1NjA0MFx1NjA0Mlx1NjA1Zlx1NjAyNFx1NjA0NFx1NjA1OFx1NjA2Nlx1NjA2ZVx1NjI0Mlx1NjI0M1x1NjJjZlx1NjMwZFx1NjMwYlx1NjJmNVx1NjMwZVx1NjMwM1x1NjJlYlx1NjJmOVx1''@;'; put 'put ''NjMwZlx1NjMwY1x1NjJmOFx1NjJmNlx1NjMwMFx1NjMxM1x1NjMxNFx1NjJmYVx1NjMxNVx1NjJmYlx1NjJmMFx1NjU0MVx1NjU0M1x1NjVhYVx1NjViZlx1NjYzNlx1NjYyMVx1NjYzMlx1NjYzNVx1NjYxY1x1NjYyNlx1NjYyMlx1NjYzM1x1NjYyYlx1NjYzYVx1NjYxZFx1NjYzNFx1NjYz''@;'; put 'put ''OVx1NjYyZVx1NjcwZlx1NjcxMFx1NjdjMVx1NjdmMlx1NjdjOFx1NjdiYVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwNl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjA2XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwNl1bcF1dPTUyNzM2K3AsYls1MjczNitwXT1fWzIwNl1bcF0pO2Zv''@;'; put 'put ''cihfWzIwN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjdkY1x1NjdiYlx1NjdmOFx1NjdkOFx1NjdjMFx1NjdiN1x1NjdjNVx1NjdlYlx1NjdlNFx1NjdkZlx1NjdiNVx1NjdjZFx1NjdiM1x1NjdmN1x1NjdmNlx1NjdlZVx1Njdl''@;'; put 'put ''M1x1NjdjMlx1NjdiOVx1NjdjZVx1NjdlN1x1NjdmMFx1NjdiMlx1NjdmY1x1NjdjNlx1NjdlZFx1NjdjY1x1NjdhZVx1NjdlNlx1NjdkYlx1NjdmYVx1NjdjOVx1NjdjYVx1NjdjM1x1NjdlYVx1NjdjYlx1NmIyOFx1NmI4Mlx1NmI4NFx1NmJiNlx1NmJkNlx1NmJkOFx1NmJlMFx1NmMyMFx1''@;'; put 'put ''NmMyMVx1NmQyOFx1NmQzNFx1NmQyZFx1NmQxZlx1NmQzY1x1NmQzZlx1NmQxMlx1NmQwYVx1NmNkYVx1NmQzM1x1NmQwNFx1NmQxOVx1NmQzYVx1NmQxYVx1NmQxMVx1NmQwMFx1NmQxZFx1NmQ0Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQwMVx1NmQxOFx1''@;'; put 'put ''NmQzN1x1NmQwM1x1NmQwZlx1NmQ0MFx1NmQwN1x1NmQyMFx1NmQyY1x1NmQwOFx1NmQyMlx1NmQwOVx1NmQxMFx1NzBiN1x1NzA5Zlx1NzBiZVx1NzBiMVx1NzBiMFx1NzBhMVx1NzBiNFx1NzBiNVx1NzBhOVx1NzI0MVx1NzI0OVx1NzI0YVx1NzI2Y1x1NzI3MFx1NzI3M1x1NzI2ZVx1NzJj''@;'; put 'put ''YVx1NzJlNFx1NzJlOFx1NzJlYlx1NzJkZlx1NzJlYVx1NzJlNlx1NzJlM1x1NzM4NVx1NzNjY1x1NzNjMlx1NzNjOFx1NzNjNVx1NzNiOVx1NzNiNlx1NzNiNVx1NzNiNFx1NzNlYlx1NzNiZlx1NzNjN1x1NzNiZVx1NzNjM1x1NzNjNlx1NzNiOFx1NzNjYlx1NzRlY1x1NzRlZVx1NzUyZVx1''@;'; put 'put ''NzU0N1x1NzU0OFx1NzVhN1x1NzVhYVx1NzY3OVx1NzZjNFx1NzcwOFx1NzcwM1x1NzcwNFx1NzcwNVx1NzcwYVx1NzZmN1x1NzZmYlx1NzZmYVx1NzdlN1x1NzdlOFx1NzgwNlx1NzgxMVx1NzgxMlx1NzgwNVx1NzgxMFx1NzgwZlx1NzgwZVx1NzgwOVx1NzgwM1x1NzgxM1x1Nzk0YVx1Nzk0''@;'; put 'put ''Y1x1Nzk0Ylx1Nzk0NVx1Nzk0NFx1NzlkNVx1NzljZFx1NzljZlx1NzlkNlx1NzljZVx1N2E4MFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwN10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjA3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwN11bcF1dPTUyOTkyK3AsYls1Mjk5MitwXT1f''@;'; put 'put ''WzIwN11bcF0pO2ZvcihfWzIwOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2E3ZVx1N2FkMVx1N2IwMFx1N2IwMVx1N2M3YVx1N2M3OFx1N2M3OVx1N2M3Zlx1N2M4MFx1N2M4MVx1N2QwM1x1N2QwOFx1N2QwMVx1N2Y1OFx1N2Y5''@;'; put 'put ''MVx1N2Y4ZFx1N2ZiZVx1ODAwN1x1ODAwZVx1ODAwZlx1ODAxNFx1ODAzN1x1ODBkOFx1ODBjN1x1ODBlMFx1ODBkMVx1ODBjOFx1ODBjMlx1ODBkMFx1ODBjNVx1ODBlM1x1ODBkOVx1ODBkY1x1ODBjYVx1ODBkNVx1ODBjOVx1ODBjZlx1ODBkN1x1ODBlNlx1ODBjZFx1ODFmZlx1ODIyMVx1''@;'; put 'put ''ODI5NFx1ODJkOVx1ODJmZVx1ODJmOVx1ODMwN1x1ODJlOFx1ODMwMFx1ODJkNVx1ODMzYVx1ODJlYlx1ODJkNlx1ODJmNFx1ODJlY1x1ODJlMVx1ODJmMlx1ODJmNVx1ODMwY1x1ODJmYlx1ODJmNlx1ODJmMFx1ODJlYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ODJlNFx1ODJlMFx1ODJmYVx1ODJmM1x1ODJlZFx1ODY3N1x1ODY3NFx1ODY3Y1x1ODY3M1x1ODg0MVx1ODg0ZVx1ODg2N1x1ODg2YVx1ODg2OVx1ODlkM1x1OGEwNFx1OGEwN1x1OGQ3Mlx1OGZlM1x1OGZlMVx1OGZlZVx1OGZlMFx1OTBmMVx1OTBiZFx1OTBiZlx1OTBkNVx1OTBjNVx1OTBi''@;'; put 'put ''ZVx1OTBjN1x1OTBjYlx1OTBjOFx1OTFkNFx1OTFkM1x1OTY1NFx1OTY0Zlx1OTY1MVx1OTY1M1x1OTY0YVx1OTY0ZVx1NTAxZVx1NTAwNVx1NTAwN1x1NTAxM1x1NTAyMlx1NTAzMFx1NTAxYlx1NGZmNVx1NGZmNFx1NTAzM1x1NTAzN1x1NTAyY1x1NGZmNlx1NGZmN1x1NTAxN1x1NTAxY1x1''@;'; put 'put ''NTAyMFx1NTAyN1x1NTAzNVx1NTAyZlx1NTAzMVx1NTAwZVx1NTE1YVx1NTE5NFx1NTE5M1x1NTFjYVx1NTFjNFx1NTFjNVx1NTFjOFx1NTFjZVx1NTI2MVx1NTI1YVx1NTI1Mlx1NTI1ZVx1NTI1Zlx1NTI1NVx1NTI2Mlx1NTJjZFx1NTMwZVx1NTM5ZVx1NTUyNlx1NTRlMlx1NTUxN1x1NTUx''@;'; put 'put ''Mlx1NTRlN1x1NTRmM1x1NTRlNFx1NTUxYVx1NTRmZlx1NTUwNFx1NTUwOFx1NTRlYlx1NTUxMVx1NTUwNVx1NTRmMVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwOF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjA4XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwOF1bcF1dPTUzMjQ4K3As''@;'; put 'put ''Yls1MzI0OCtwXT1fWzIwOF1bcF0pO2ZvcihfWzIwOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTUwYVx1NTRmYlx1NTRmN1x1NTRmOFx1NTRlMFx1NTUwZVx1NTUwM1x1NTUwYlx1NTcwMVx1NTcwMlx1NTdjY1x1NTgzMlx1NTdk''@;'; put 'put ''NVx1NTdkMlx1NTdiYVx1NTdjNlx1NTdiZFx1NTdiY1x1NTdiOFx1NTdiNlx1NTdiZlx1NTdjN1x1NTdkMFx1NTdiOVx1NTdjMVx1NTkwZVx1NTk0YVx1NWExOVx1NWExNlx1NWEyZFx1NWEyZVx1NWExNVx1NWEwZlx1NWExN1x1NWEwYVx1NWExZVx1NWEzM1x1NWI2Y1x1NWJhN1x1NWJhZFx1''@;'; put 'put ''NWJhY1x1NWMwM1x1NWM1Nlx1NWM1NFx1NWNlY1x1NWNmZlx1NWNlZVx1NWNmMVx1NWNmN1x1NWQwMFx1NWNmOVx1NWUyOVx1NWUyOFx1NWVhOFx1NWVhZVx1NWVhYVx1NWVhY1x1NWYzM1x1NWYzMFx1NWY2N1x1NjA1ZFx1NjA1YVx1NjA2N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1NjA0MVx1NjBhMlx1NjA4OFx1NjA4MFx1NjA5Mlx1NjA4MVx1NjA5ZFx1NjA4M1x1NjA5NVx1NjA5Ylx1NjA5N1x1NjA4N1x1NjA5Y1x1NjA4ZVx1NjIxOVx1NjI0Nlx1NjJmMlx1NjMxMFx1NjM1Nlx1NjMyY1x1NjM0NFx1NjM0NVx1NjMzNlx1NjM0M1x1NjNlNFx1NjMz''@;'; put 'put ''OVx1NjM0Ylx1NjM0YVx1NjMzY1x1NjMyOVx1NjM0MVx1NjMzNFx1NjM1OFx1NjM1NFx1NjM1OVx1NjMyZFx1NjM0N1x1NjMzM1x1NjM1YVx1NjM1MVx1NjMzOFx1NjM1N1x1NjM0MFx1NjM0OFx1NjU0YVx1NjU0Nlx1NjVjNlx1NjVjM1x1NjVjNFx1NjVjMlx1NjY0YVx1NjY1Zlx1NjY0N1x1''@;'; put 'put ''NjY1MVx1NjcxMlx1NjcxM1x1NjgxZlx1NjgxYVx1Njg0OVx1NjgzMlx1NjgzM1x1NjgzYlx1Njg0Ylx1Njg0Zlx1NjgxNlx1NjgzMVx1NjgxY1x1NjgzNVx1NjgyYlx1NjgyZFx1NjgyZlx1Njg0ZVx1Njg0NFx1NjgzNFx1NjgxZFx1NjgxMlx1NjgxNFx1NjgyNlx1NjgyOFx1NjgyZVx1Njg0''@;'; put 'put ''ZFx1NjgzYVx1NjgyNVx1NjgyMFx1NmIyY1x1NmIyZlx1NmIyZFx1NmIzMVx1NmIzNFx1NmI2ZFx1ODA4Mlx1NmI4OFx1NmJlNlx1NmJlNFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwOV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjA5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwOV1b''@;'; put 'put ''cF1dPTUzNTA0K3AsYls1MzUwNCtwXT1fWzIwOV1bcF0pO2ZvcihfWzIxMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmJlOFx1NmJlM1x1NmJlMlx1NmJlN1x1NmMyNVx1NmQ3YVx1NmQ2M1x1NmQ2NFx1NmQ3Nlx1NmQwZFx1NmQ2''@;'; put 'put ''MVx1NmQ5Mlx1NmQ1OFx1NmQ2Mlx1NmQ2ZFx1NmQ2Zlx1NmQ5MVx1NmQ4ZFx1NmRlZlx1NmQ3Zlx1NmQ4Nlx1NmQ1ZVx1NmQ2N1x1NmQ2MFx1NmQ5N1x1NmQ3MFx1NmQ3Y1x1NmQ1Zlx1NmQ4Mlx1NmQ5OFx1NmQyZlx1NmQ2OFx1NmQ4Ylx1NmQ3ZVx1NmQ4MFx1NmQ4NFx1NmQxNlx1NmQ4M1x1''@;'; put 'put ''NmQ3Ylx1NmQ3ZFx1NmQ3NVx1NmQ5MFx1NzBkY1x1NzBkM1x1NzBkMVx1NzBkZFx1NzBjYlx1N2YzOVx1NzBlMlx1NzBkN1x1NzBkMlx1NzBkZVx1NzBlMFx1NzBkNFx1NzBjZFx1NzBjNVx1NzBjNlx1NzBjN1x1NzBkYVx1NzBjZVx1NzBlMVx1NzI0Mlx1NzI3OFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzI3N1x1NzI3Nlx1NzMwMFx1NzJmYVx1NzJmNFx1NzJmZVx1NzJmNlx1NzJmM1x1NzJmYlx1NzMwMVx1NzNkM1x1NzNkOVx1NzNlNVx1NzNkNlx1NzNiY1x1NzNlN1x1NzNlM1x1NzNlOVx1NzNkY1x1NzNkMlx1NzNkYlx1NzNkNFx1NzNkZFx1NzNk''@;'; put 'put ''YVx1NzNkN1x1NzNkOFx1NzNlOFx1NzRkZVx1NzRkZlx1NzRmNFx1NzRmNVx1NzUyMVx1NzU1Ylx1NzU1Zlx1NzViMFx1NzVjMVx1NzViYlx1NzVjNFx1NzVjMFx1NzViZlx1NzViNlx1NzViYVx1NzY4YVx1NzZjOVx1NzcxZFx1NzcxYlx1NzcxMFx1NzcxM1x1NzcxMlx1NzcyM1x1NzcxMVx1''@;'; put 'put ''NzcxNVx1NzcxOVx1NzcxYVx1NzcyMlx1NzcyN1x1NzgyM1x1NzgyY1x1NzgyMlx1NzgzNVx1NzgyZlx1NzgyOFx1NzgyZVx1NzgyYlx1NzgyMVx1NzgyOVx1NzgzM1x1NzgyYVx1NzgzMVx1Nzk1NFx1Nzk1Ylx1Nzk0Zlx1Nzk1Y1x1Nzk1M1x1Nzk1Mlx1Nzk1MVx1NzllYlx1NzllY1x1Nzll''@;'; put 'put ''MFx1NzllZVx1NzllZFx1NzllYVx1NzlkY1x1NzlkZVx1NzlkZFx1N2E4Nlx1N2E4OVx1N2E4NVx1N2E4Ylx1N2E4Y1x1N2E4YVx1N2E4N1x1N2FkOFx1N2IxMFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxMF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjEwXVtwXS5jaGFyQ29kZUF0KDAp''@;'; put 'put ''JiYoSVtfWzIxMF1bcF1dPTUzNzYwK3AsYls1Mzc2MCtwXT1fWzIxMF1bcF0pO2ZvcihfWzIxMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2IwNFx1N2IxM1x1N2IwNVx1N2IwZlx1N2IwOFx1N2IwYVx1N2IwZVx1N2IwOVx1N2Ix''@;'; put 'put ''Mlx1N2M4NFx1N2M5MVx1N2M4YVx1N2M4Y1x1N2M4OFx1N2M4ZFx1N2M4NVx1N2QxZVx1N2QxZFx1N2QxMVx1N2QwZVx1N2QxOFx1N2QxNlx1N2QxM1x1N2QxZlx1N2QxMlx1N2QwZlx1N2QwY1x1N2Y1Y1x1N2Y2MVx1N2Y1ZVx1N2Y2MFx1N2Y1ZFx1N2Y1Ylx1N2Y5Nlx1N2Y5Mlx1N2ZjM1x1''@;'; put 'put ''N2ZjMlx1N2ZjMFx1ODAxNlx1ODAzZVx1ODAzOVx1ODBmYVx1ODBmMlx1ODBmOVx1ODBmNVx1ODEwMVx1ODBmYlx1ODEwMFx1ODIwMVx1ODIyZlx1ODIyNVx1ODMzM1x1ODMyZFx1ODM0NFx1ODMxOVx1ODM1MVx1ODMyNVx1ODM1Nlx1ODMzZlx1ODM0MVx1ODMyNlx1ODMxY1x1ODMyMlx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODM0Mlx1ODM0ZVx1ODMxYlx1ODMyYVx1ODMwOFx1ODMzY1x1ODM0ZFx1ODMxNlx1ODMyNFx1ODMyMFx1ODMzN1x1ODMyZlx1ODMyOVx1ODM0N1x1ODM0NVx1ODM0Y1x1ODM1M1x1ODMxZVx1ODMyY1x1ODM0Ylx1ODMyN1x1ODM0''@;'; put 'put ''OFx1ODY1M1x1ODY1Mlx1ODZhMlx1ODZhOFx1ODY5Nlx1ODY4ZFx1ODY5MVx1ODY5ZVx1ODY4N1x1ODY5N1x1ODY4Nlx1ODY4Ylx1ODY5YVx1ODY4NVx1ODZhNVx1ODY5OVx1ODZhMVx1ODZhN1x1ODY5NVx1ODY5OFx1ODY4ZVx1ODY5ZFx1ODY5MFx1ODY5NFx1ODg0M1x1ODg0NFx1ODg2ZFx1''@;'; put 'put ''ODg3NVx1ODg3Nlx1ODg3Mlx1ODg4MFx1ODg3MVx1ODg3Zlx1ODg2Zlx1ODg4M1x1ODg3ZVx1ODg3NFx1ODg3Y1x1OGExMlx1OGM0N1x1OGM1N1x1OGM3Ylx1OGNhNFx1OGNhM1x1OGQ3Nlx1OGQ3OFx1OGRiNVx1OGRiN1x1OGRiNlx1OGVkMVx1OGVkM1x1OGZmZVx1OGZmNVx1OTAwMlx1OGZm''@;'; put 'put ''Zlx1OGZmYlx1OTAwNFx1OGZmY1x1OGZmNlx1OTBkNlx1OTBlMFx1OTBkOVx1OTBkYVx1OTBlM1x1OTBkZlx1OTBlNVx1OTBkOFx1OTBkYlx1OTBkN1x1OTBkY1x1OTBlNFx1OTE1MFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxMV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjExXVtwXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApJiYoSVtfWzIxMV1bcF1dPTU0MDE2K3AsYls1NDAxNitwXT1fWzIxMV1bcF0pO2ZvcihfWzIxMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTE0ZVx1OTE0Zlx1OTFkNVx1OTFlMlx1OTFkYVx1OTY1Y1x1OTY1''@;'; put 'put ''Zlx1OTZiY1x1OThlM1x1OWFkZlx1OWIyZlx1NGU3Zlx1NTA3MFx1NTA2YVx1NTA2MVx1NTA1ZVx1NTA2MFx1NTA1M1x1NTA0Ylx1NTA1ZFx1NTA3Mlx1NTA0OFx1NTA0ZFx1NTA0MVx1NTA1Ylx1NTA0YVx1NTA2Mlx1NTAxNVx1NTA0NVx1NTA1Zlx1NTA2OVx1NTA2Ylx1NTA2M1x1NTA2NFx1''@;'; put 'put ''NTA0Nlx1NTA0MFx1NTA2ZVx1NTA3M1x1NTA1N1x1NTA1MVx1NTFkMFx1NTI2Ylx1NTI2ZFx1NTI2Y1x1NTI2ZVx1NTJkNlx1NTJkM1x1NTMyZFx1NTM5Y1x1NTU3NVx1NTU3Nlx1NTUzY1x1NTU0ZFx1NTU1MFx1NTUzNFx1NTUyYVx1NTU1MVx1NTU2Mlx1NTUzNlx1NTUzNVx1NTUzMFx1NTU1''@;'; put 'put ''Mlx1NTU0NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTUwY1x1NTUzMlx1NTU2NVx1NTU0ZVx1NTUzOVx1NTU0OFx1NTUyZFx1NTUzYlx1NTU0MFx1NTU0Ylx1NTcwYVx1NTcwN1x1NTdmYlx1NTgxNFx1NTdlMlx1NTdmNlx1NTdkY1x1NTdmNFx1NTgwMFx1NTdl''@;'; put 'put ''ZFx1NTdmZFx1NTgwOFx1NTdmOFx1NTgwYlx1NTdmM1x1NTdjZlx1NTgwN1x1NTdlZVx1NTdlM1x1NTdmMlx1NTdlNVx1NTdlY1x1NTdlMVx1NTgwZVx1NTdmY1x1NTgxMFx1NTdlN1x1NTgwMVx1NTgwY1x1NTdmMVx1NTdlOVx1NTdmMFx1NTgwZFx1NTgwNFx1NTk1Y1x1NWE2MFx1NWE1OFx1''@;'; put 'put ''NWE1NVx1NWE2N1x1NWE1ZVx1NWEzOFx1NWEzNVx1NWE2ZFx1NWE1MFx1NWE1Zlx1NWE2NVx1NWE2Y1x1NWE1M1x1NWE2NFx1NWE1N1x1NWE0M1x1NWE1ZFx1NWE1Mlx1NWE0NFx1NWE1Ylx1NWE0OFx1NWE4ZVx1NWEzZVx1NWE0ZFx1NWEzOVx1NWE0Y1x1NWE3MFx1NWE2OVx1NWE0N1x1NWE1''@;'; put 'put ''MVx1NWE1Nlx1NWE0Mlx1NWE1Y1x1NWI3Mlx1NWI2ZVx1NWJjMVx1NWJjMFx1NWM1OVx1NWQxZVx1NWQwYlx1NWQxZFx1NWQxYVx1NWQyMFx1NWQwY1x1NWQyOFx1NWQwZFx1NWQyNlx1NWQyNVx1NWQwZlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxMl0ubGVuZ3RoOysrcCk2NTUzMyE9''@;'; put 'put ''PV9bMjEyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxMl1bcF1dPTU0MjcyK3AsYls1NDI3MitwXT1fWzIxMl1bcF0pO2ZvcihfWzIxM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWQzMFx1NWQxMlx1NWQyM1x1NWQxZlx1NWQy''@;'; put 'put ''ZVx1NWUzZVx1NWUzNFx1NWViMVx1NWViNFx1NWViOVx1NWViMlx1NWViM1x1NWYzNlx1NWYzOFx1NWY5Ylx1NWY5Nlx1NWY5Zlx1NjA4YVx1NjA5MFx1NjA4Nlx1NjBiZVx1NjBiMFx1NjBiYVx1NjBkM1x1NjBkNFx1NjBjZlx1NjBlNFx1NjBkOVx1NjBkZFx1NjBjOFx1NjBiMVx1NjBkYlx1''@;'; put 'put ''NjBiN1x1NjBjYVx1NjBiZlx1NjBjM1x1NjBjZFx1NjBjMFx1NjMzMlx1NjM2NVx1NjM4YVx1NjM4Mlx1NjM3ZFx1NjNiZFx1NjM5ZVx1NjNhZFx1NjM5ZFx1NjM5N1x1NjNhYlx1NjM4ZVx1NjM2Zlx1NjM4N1x1NjM5MFx1NjM2ZVx1NjNhZlx1NjM3NVx1NjM5Y1x1NjM2ZFx1NjNhZVx1NjM3''@;'; put 'put ''Y1x1NjNhNFx1NjMzYlx1NjM5Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjM3OFx1NjM4NVx1NjM4MVx1NjM5MVx1NjM4ZFx1NjM3MFx1NjU1M1x1NjVjZFx1NjY2NVx1NjY2MVx1NjY1Ylx1NjY1OVx1NjY1Y1x1NjY2Mlx1NjcxOFx1Njg3OVx1Njg4N1x1Njg5''@;'; put 'put ''MFx1Njg5Y1x1Njg2ZFx1Njg2ZVx1NjhhZVx1NjhhYlx1Njk1Nlx1Njg2Zlx1NjhhM1x1NjhhY1x1NjhhOVx1Njg3NVx1Njg3NFx1NjhiMlx1Njg4Zlx1Njg3N1x1Njg5Mlx1Njg3Y1x1Njg2Ylx1Njg3Mlx1NjhhYVx1Njg4MFx1Njg3MVx1Njg3ZVx1Njg5Ylx1Njg5Nlx1Njg4Ylx1NjhhMFx1''@;'; put 'put ''Njg4OVx1NjhhNFx1Njg3OFx1Njg3Ylx1Njg5MVx1Njg4Y1x1Njg4YVx1Njg3ZFx1NmIzNlx1NmIzM1x1NmIzN1x1NmIzOFx1NmI5MVx1NmI4Zlx1NmI4ZFx1NmI4ZVx1NmI4Y1x1NmMyYVx1NmRjMFx1NmRhYlx1NmRiNFx1NmRiM1x1NmU3NFx1NmRhY1x1NmRlOVx1NmRlMlx1NmRiN1x1NmRm''@;'; put 'put ''Nlx1NmRkNFx1NmUwMFx1NmRjOFx1NmRlMFx1NmRkZlx1NmRkNlx1NmRiZVx1NmRlNVx1NmRkY1x1NmRkZFx1NmRkYlx1NmRmNFx1NmRjYVx1NmRiZFx1NmRlZFx1NmRmMFx1NmRiYVx1NmRkNVx1NmRjMlx1NmRjZlx1NmRjOVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxM10ubGVuZ3Ro''@;'; put 'put ''OysrcCk2NTUzMyE9PV9bMjEzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxM11bcF1dPTU0NTI4K3AsYls1NDUyOCtwXT1fWzIxM11bcF0pO2ZvcihfWzIxNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmRkMFx1NmRmMlx1NmRk''@;'; put 'put ''M1x1NmRmZFx1NmRkN1x1NmRjZFx1NmRlM1x1NmRiYlx1NzBmYVx1NzEwZFx1NzBmN1x1NzExN1x1NzBmNFx1NzEwY1x1NzBmMFx1NzEwNFx1NzBmM1x1NzExMFx1NzBmY1x1NzBmZlx1NzEwNlx1NzExM1x1NzEwMFx1NzBmOFx1NzBmNlx1NzEwYlx1NzEwMlx1NzEwZVx1NzI3ZVx1NzI3Ylx1''@;'; put 'put ''NzI3Y1x1NzI3Zlx1NzMxZFx1NzMxN1x1NzMwN1x1NzMxMVx1NzMxOFx1NzMwYVx1NzMwOFx1NzJmZlx1NzMwZlx1NzMxZVx1NzM4OFx1NzNmNlx1NzNmOFx1NzNmNVx1NzQwNFx1NzQwMVx1NzNmZFx1NzQwN1x1NzQwMFx1NzNmYVx1NzNmY1x1NzNmZlx1NzQwY1x1NzQwYlx1NzNmNFx1NzQw''@;'; put 'put ''OFx1NzU2NFx1NzU2M1x1NzVjZVx1NzVkMlx1NzVjZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzVjYlx1NzVjY1x1NzVkMVx1NzVkMFx1NzY4Zlx1NzY4OVx1NzZkM1x1NzczOVx1NzcyZlx1NzcyZFx1NzczMVx1NzczMlx1NzczNFx1NzczM1x1NzczZFx1Nzcy''@;'; put 'put ''NVx1NzczYlx1NzczNVx1Nzg0OFx1Nzg1Mlx1Nzg0OVx1Nzg0ZFx1Nzg0YVx1Nzg0Y1x1NzgyNlx1Nzg0NVx1Nzg1MFx1Nzk2NFx1Nzk2N1x1Nzk2OVx1Nzk2YVx1Nzk2M1x1Nzk2Ylx1Nzk2MVx1NzliYlx1NzlmYVx1NzlmOFx1NzlmNlx1NzlmN1x1N2E4Zlx1N2E5NFx1N2E5MFx1N2IzNVx1''@;'; put 'put ''N2I0N1x1N2IzNFx1N2IyNVx1N2IzMFx1N2IyMlx1N2IyNFx1N2IzM1x1N2IxOFx1N2IyYVx1N2IxZFx1N2IzMVx1N2IyYlx1N2IyZFx1N2IyZlx1N2IzMlx1N2IzOFx1N2IxYVx1N2IyM1x1N2M5NFx1N2M5OFx1N2M5Nlx1N2NhM1x1N2QzNVx1N2QzZFx1N2QzOFx1N2QzNlx1N2QzYVx1N2Q0''@;'; put 'put ''NVx1N2QyY1x1N2QyOVx1N2Q0MVx1N2Q0N1x1N2QzZVx1N2QzZlx1N2Q0YVx1N2QzYlx1N2QyOFx1N2Y2M1x1N2Y5NVx1N2Y5Y1x1N2Y5ZFx1N2Y5Ylx1N2ZjYVx1N2ZjYlx1N2ZjZFx1N2ZkMFx1N2ZkMVx1N2ZjN1x1N2ZjZlx1N2ZjOVx1ODAxZlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1f''@;'; put 'put ''WzIxNF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjE0XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxNF1bcF1dPTU0Nzg0K3AsYls1NDc4NCtwXT1fWzIxNF1bcF0pO2ZvcihfWzIxNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODAx''@;'; put 'put ''ZVx1ODAxYlx1ODA0N1x1ODA0M1x1ODA0OFx1ODExOFx1ODEyNVx1ODExOVx1ODExYlx1ODEyZFx1ODExZlx1ODEyY1x1ODExZVx1ODEyMVx1ODExNVx1ODEyN1x1ODExZFx1ODEyMlx1ODIxMVx1ODIzOFx1ODIzM1x1ODIzYVx1ODIzNFx1ODIzMlx1ODI3NFx1ODM5MFx1ODNhM1x1ODNhOFx1''@;'; put 'put ''ODM4ZFx1ODM3YVx1ODM3M1x1ODNhNFx1ODM3NFx1ODM4Zlx1ODM4MVx1ODM5NVx1ODM5OVx1ODM3NVx1ODM5NFx1ODNhOVx1ODM3ZFx1ODM4M1x1ODM4Y1x1ODM5ZFx1ODM5Ylx1ODNhYVx1ODM4Ylx1ODM3ZVx1ODNhNVx1ODNhZlx1ODM4OFx1ODM5N1x1ODNiMFx1ODM3Zlx1ODNhNlx1ODM4''@;'; put 'put ''N1x1ODNhZVx1ODM3Nlx1ODM5YVx1ODY1OVx1ODY1Nlx1ODZiZlx1ODZiN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODZjMlx1ODZjMVx1ODZjNVx1ODZiYVx1ODZiMFx1ODZjOFx1ODZiOVx1ODZiM1x1ODZiOFx1ODZjY1x1ODZiNFx1ODZiYlx1ODZiY1x1ODZj''@;'; put 'put ''M1x1ODZiZFx1ODZiZVx1ODg1Mlx1ODg4OVx1ODg5NVx1ODhhOFx1ODhhMlx1ODhhYVx1ODg5YVx1ODg5MVx1ODhhMVx1ODg5Zlx1ODg5OFx1ODhhN1x1ODg5OVx1ODg5Ylx1ODg5N1x1ODhhNFx1ODhhY1x1ODg4Y1x1ODg5M1x1ODg4ZVx1ODk4Mlx1ODlkNlx1ODlkOVx1ODlkNVx1OGEzMFx1''@;'; put 'put ''OGEyN1x1OGEyY1x1OGExZVx1OGMzOVx1OGMzYlx1OGM1Y1x1OGM1ZFx1OGM3ZFx1OGNhNVx1OGQ3ZFx1OGQ3Ylx1OGQ3OVx1OGRiY1x1OGRjMlx1OGRiOVx1OGRiZlx1OGRjMVx1OGVkOFx1OGVkZVx1OGVkZFx1OGVkY1x1OGVkN1x1OGVlMFx1OGVlMVx1OTAyNFx1OTAwYlx1OTAxMVx1OTAx''@;'; put 'put ''Y1x1OTAwY1x1OTAyMVx1OTBlZlx1OTBlYVx1OTBmMFx1OTBmNFx1OTBmMlx1OTBmM1x1OTBkNFx1OTBlYlx1OTBlY1x1OTBlOVx1OTE1Nlx1OTE1OFx1OTE1YVx1OTE1M1x1OTE1NVx1OTFlY1x1OTFmNFx1OTFmMVx1OTFmM1x1OTFmOFx1OTFlNFx1OTFmOVx1OTFlYVx1ZmZmZCIuc3BsaXQo''@;'; put 'put ''IiIpLHA9MDtwIT1fWzIxNV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjE1XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxNV1bcF1dPTU1MDQwK3AsYls1NTA0MCtwXT1fWzIxNV1bcF0pO2ZvcihfWzIxNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1OTFlYlx1OTFmN1x1OTFlOFx1OTFlZVx1OTU3YVx1OTU4Nlx1OTU4OFx1OTY3Y1x1OTY2ZFx1OTY2Ylx1OTY3MVx1OTY2Zlx1OTZiZlx1OTc2YVx1OTgwNFx1OThlNVx1OTk5N1x1NTA5Ylx1NTA5NVx1NTA5NFx1NTA5ZVx1NTA4Ylx1NTBhM1x1NTA4M1x1NTA4Y1x1NTA4ZVx1''@;'; put 'put ''NTA5ZFx1NTA2OFx1NTA5Y1x1NTA5Mlx1NTA4Mlx1NTA4N1x1NTE1Zlx1NTFkNFx1NTMxMlx1NTMxMVx1NTNhNFx1NTNhN1x1NTU5MVx1NTVhOFx1NTVhNVx1NTVhZFx1NTU3N1x1NTY0NVx1NTVhMlx1NTU5M1x1NTU4OFx1NTU4Zlx1NTViNVx1NTU4MVx1NTVhM1x1NTU5Mlx1NTVhNFx1NTU3''@;'; put 'put ''ZFx1NTU4Y1x1NTVhNlx1NTU3Zlx1NTU5NVx1NTVhMVx1NTU4ZVx1NTcwY1x1NTgyOVx1NTgzN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTgxOVx1NTgxZVx1NTgyN1x1NTgyM1x1NTgyOFx1NTdmNVx1NTg0OFx1NTgyNVx1NTgxY1x1NTgxYlx1NTgzM1x1NTgz''@;'; put 'put ''Zlx1NTgzNlx1NTgyZVx1NTgzOVx1NTgzOFx1NTgyZFx1NTgyY1x1NTgzYlx1NTk2MVx1NWFhZlx1NWE5NFx1NWE5Zlx1NWE3YVx1NWFhMlx1NWE5ZVx1NWE3OFx1NWFhNlx1NWE3Y1x1NWFhNVx1NWFhY1x1NWE5NVx1NWFhZVx1NWEzN1x1NWE4NFx1NWE4YVx1NWE5N1x1NWE4M1x1NWE4Ylx1''@;'; put 'put ''NWFhOVx1NWE3Ylx1NWE3ZFx1NWE4Y1x1NWE5Y1x1NWE4Zlx1NWE5M1x1NWE5ZFx1NWJlYVx1NWJjZFx1NWJjYlx1NWJkNFx1NWJkMVx1NWJjYVx1NWJjZVx1NWMwY1x1NWMzMFx1NWQzN1x1NWQ0M1x1NWQ2Ylx1NWQ0MVx1NWQ0Ylx1NWQzZlx1NWQzNVx1NWQ1MVx1NWQ0ZVx1NWQ1NVx1NWQz''@;'; put 'put ''M1x1NWQzYVx1NWQ1Mlx1NWQzZFx1NWQzMVx1NWQ1OVx1NWQ0Mlx1NWQzOVx1NWQ0OVx1NWQzOFx1NWQzY1x1NWQzMlx1NWQzNlx1NWQ0MFx1NWQ0NVx1NWU0NFx1NWU0MVx1NWY1OFx1NWZhNlx1NWZhNVx1NWZhYlx1NjBjOVx1NjBiOVx1NjBjY1x1NjBlMlx1NjBjZVx1NjBjNFx1NjExNFx1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxNl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjE2XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxNl1bcF1dPTU1Mjk2K3AsYls1NTI5NitwXT1fWzIxNl1bcF0pO2ZvcihfWzIxN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjBmMlx1NjEwYVx1NjExNlx1NjEwNVx1NjBmNVx1NjExM1x1NjBmOFx1NjBmY1x1NjBmZVx1NjBjMVx1NjEwM1x1NjExOFx1NjExZFx1NjExMFx1NjBmZlx1NjEwNFx1NjEwYlx1NjI0YVx1NjM5NFx1NjNiMVx1NjNiMFx1NjNjZVx1NjNlNVx1NjNlOFx1''@;'; put 'put ''NjNlZlx1NjNjM1x1NjQ5ZFx1NjNmM1x1NjNjYVx1NjNlMFx1NjNmNlx1NjNkNVx1NjNmMlx1NjNmNVx1NjQ2MVx1NjNkZlx1NjNiZVx1NjNkZFx1NjNkY1x1NjNjNFx1NjNkOFx1NjNkM1x1NjNjMlx1NjNjN1x1NjNjY1x1NjNjYlx1NjNjOFx1NjNmMFx1NjNkN1x1NjNkOVx1NjUzMlx1NjU2''@;'; put 'put ''N1x1NjU2YVx1NjU2NFx1NjU1Y1x1NjU2OFx1NjU2NVx1NjU4Y1x1NjU5ZFx1NjU5ZVx1NjVhZVx1NjVkMFx1NjVkMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjY3Y1x1NjY2Y1x1NjY3Ylx1NjY4MFx1NjY3MVx1NjY3OVx1NjY2YVx1NjY3Mlx1NjcwMVx1Njkw''@;'; put 'put ''Y1x1NjhkM1x1NjkwNFx1NjhkY1x1NjkyYVx1NjhlY1x1NjhlYVx1NjhmMVx1NjkwZlx1NjhkNlx1NjhmN1x1NjhlYlx1NjhlNFx1NjhmNlx1NjkxM1x1NjkxMFx1NjhmM1x1NjhlMVx1NjkwN1x1NjhjY1x1NjkwOFx1Njk3MFx1NjhiNFx1NjkxMVx1NjhlZlx1NjhjNlx1NjkxNFx1NjhmOFx1''@;'; put 'put ''NjhkMFx1NjhmZFx1NjhmY1x1NjhlOFx1NjkwYlx1NjkwYVx1NjkxN1x1NjhjZVx1NjhjOFx1NjhkZFx1NjhkZVx1NjhlNlx1NjhmNFx1NjhkMVx1NjkwNlx1NjhkNFx1NjhlOVx1NjkxNVx1NjkyNVx1NjhjN1x1NmIzOVx1NmIzYlx1NmIzZlx1NmIzY1x1NmI5NFx1NmI5N1x1NmI5OVx1NmI5''@;'; put 'put ''NVx1NmJiZFx1NmJmMFx1NmJmMlx1NmJmM1x1NmMzMFx1NmRmY1x1NmU0Nlx1NmU0N1x1NmUxZlx1NmU0OVx1NmU4OFx1NmUzY1x1NmUzZFx1NmU0NVx1NmU2Mlx1NmUyYlx1NmUzZlx1NmU0MVx1NmU1ZFx1NmU3M1x1NmUxY1x1NmUzM1x1NmU0Ylx1NmU0MFx1NmU1MVx1NmUzYlx1NmUwM1x1''@;'; put 'put ''NmUyZVx1NmU1ZVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxN10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjE3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxN11bcF1dPTU1NTUyK3AsYls1NTU1MitwXT1fWzIxN11bcF0pO2ZvcihfWzIxOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmU2OFx1NmU1Y1x1NmU2MVx1NmUzMVx1NmUyOFx1NmU2MFx1NmU3MVx1NmU2Ylx1NmUzOVx1NmUyMlx1NmUzMFx1NmU1M1x1NmU2NVx1NmUyN1x1NmU3OFx1NmU2NFx1NmU3N1x1NmU1NVx1NmU3OVx1NmU1Mlx1NmU2Nlx1NmUzNVx1''@;'; put 'put ''NmUzNlx1NmU1YVx1NzEyMFx1NzExZVx1NzEyZlx1NzBmYlx1NzEyZVx1NzEzMVx1NzEyM1x1NzEyNVx1NzEyMlx1NzEzMlx1NzExZlx1NzEyOFx1NzEzYVx1NzExYlx1NzI0Ylx1NzI1YVx1NzI4OFx1NzI4OVx1NzI4Nlx1NzI4NVx1NzI4Ylx1NzMxMlx1NzMwYlx1NzMzMFx1NzMyMlx1NzMz''@;'; put 'put ''MVx1NzMzM1x1NzMyN1x1NzMzMlx1NzMyZFx1NzMyNlx1NzMyM1x1NzMzNVx1NzMwY1x1NzQyZVx1NzQyY1x1NzQzMFx1NzQyYlx1NzQxNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzQxYVx1NzQyMVx1NzQyZFx1NzQzMVx1NzQyNFx1NzQyM1x1NzQxZFx1NzQy''@;'; put 'put ''OVx1NzQyMFx1NzQzMlx1NzRmYlx1NzUyZlx1NzU2Zlx1NzU2Y1x1NzVlN1x1NzVkYVx1NzVlMVx1NzVlNlx1NzVkZFx1NzVkZlx1NzVlNFx1NzVkN1x1NzY5NVx1NzY5Mlx1NzZkYVx1Nzc0Nlx1Nzc0N1x1Nzc0NFx1Nzc0ZFx1Nzc0NVx1Nzc0YVx1Nzc0ZVx1Nzc0Ylx1Nzc0Y1x1NzdkZVx1''@;'; put 'put ''NzdlY1x1Nzg2MFx1Nzg2NFx1Nzg2NVx1Nzg1Y1x1Nzg2ZFx1Nzg3MVx1Nzg2YVx1Nzg2ZVx1Nzg3MFx1Nzg2OVx1Nzg2OFx1Nzg1ZVx1Nzg2Mlx1Nzk3NFx1Nzk3M1x1Nzk3Mlx1Nzk3MFx1N2EwMlx1N2EwYVx1N2EwM1x1N2EwY1x1N2EwNFx1N2E5OVx1N2FlNlx1N2FlNFx1N2I0YVx1N2Iz''@;'; put 'put ''Ylx1N2I0NFx1N2I0OFx1N2I0Y1x1N2I0ZVx1N2I0MFx1N2I1OFx1N2I0NVx1N2NhMlx1N2M5ZVx1N2NhOFx1N2NhMVx1N2Q1OFx1N2Q2Zlx1N2Q2M1x1N2Q1M1x1N2Q1Nlx1N2Q2N1x1N2Q2YVx1N2Q0Zlx1N2Q2ZFx1N2Q1Y1x1N2Q2Ylx1N2Q1Mlx1N2Q1NFx1N2Q2OVx1N2Q1MVx1N2Q1Zlx1''@;'; put 'put ''N2Q0ZVx1N2YzZVx1N2YzZlx1N2Y2NVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxOF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjE4XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxOF1bcF1dPTU1ODA4K3AsYls1NTgwOCtwXT1fWzIxOF1bcF0pO2ZvcihfWzIxOV09Ilx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2Y2Nlx1N2ZhMlx1N2ZhMFx1N2ZhMVx1N2ZkN1x1ODA1MVx1ODA0Zlx1ODA1MFx1ODBmZVx1ODBkNFx1ODE0M1x1ODE0YVx1ODE1Mlx1ODE0Zlx1ODE0N1x1ODEzZFx1ODE0ZFx1ODEzYVx1ODFlNlx1ODFlZVx1''@;'; put 'put ''ODFmN1x1ODFmOFx1ODFmOVx1ODIwNFx1ODIzY1x1ODIzZFx1ODIzZlx1ODI3NVx1ODMzYlx1ODNjZlx1ODNmOVx1ODQyM1x1ODNjMFx1ODNlOFx1ODQxMlx1ODNlN1x1ODNlNFx1ODNmY1x1ODNmNlx1ODQxMFx1ODNjNlx1ODNjOFx1ODNlYlx1ODNlM1x1ODNiZlx1ODQwMVx1ODNkZFx1ODNl''@;'; put 'put ''NVx1ODNkOFx1ODNmZlx1ODNlMVx1ODNjYlx1ODNjZVx1ODNkNlx1ODNmNVx1ODNjOVx1ODQwOVx1ODQwZlx1ODNkZVx1ODQxMVx1ODQwNlx1ODNjMlx1ODNmM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODNkNVx1ODNmYVx1ODNjN1x1ODNkMVx1ODNlYVx1ODQx''@;'; put 'put ''M1x1ODNjM1x1ODNlY1x1ODNlZVx1ODNjNFx1ODNmYlx1ODNkN1x1ODNlMlx1ODQxYlx1ODNkYlx1ODNmZVx1ODZkOFx1ODZlMlx1ODZlNlx1ODZkM1x1ODZlM1x1ODZkYVx1ODZlYVx1ODZkZFx1ODZlYlx1ODZkY1x1ODZlY1x1ODZlOVx1ODZkN1x1ODZlOFx1ODZkMVx1ODg0OFx1ODg1Nlx1''@;'; put 'put ''ODg1NVx1ODhiYVx1ODhkN1x1ODhiOVx1ODhiOFx1ODhjMFx1ODhiZVx1ODhiNlx1ODhiY1x1ODhiN1x1ODhiZFx1ODhiMlx1ODkwMVx1ODhjOVx1ODk5NVx1ODk5OFx1ODk5N1x1ODlkZFx1ODlkYVx1ODlkYlx1OGE0ZVx1OGE0ZFx1OGEzOVx1OGE1OVx1OGE0MFx1OGE1N1x1OGE1OFx1OGE0''@;'; put 'put ''NFx1OGE0NVx1OGE1Mlx1OGE0OFx1OGE1MVx1OGE0YVx1OGE0Y1x1OGE0Zlx1OGM1Zlx1OGM4MVx1OGM4MFx1OGNiYVx1OGNiZVx1OGNiMFx1OGNiOVx1OGNiNVx1OGQ4NFx1OGQ4MFx1OGQ4OVx1OGRkOFx1OGRkM1x1OGRjZFx1OGRjN1x1OGRkNlx1OGRkY1x1OGRjZlx1OGRkNVx1OGRkOVx1''@;'; put 'put ''OGRjOFx1OGRkN1x1OGRjNVx1OGVlZlx1OGVmN1x1OGVmYVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxOV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjE5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxOV1bcF1dPTU2MDY0K3AsYls1NjA2NCtwXT1fWzIxOV1bcF0pO2ZvcihfWzIyMF09''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGVmOVx1OGVlNlx1OGVlZVx1OGVlNVx1OGVmNVx1OGVlN1x1OGVlOFx1OGVmNlx1OGVlYlx1OGVmMVx1OGVlY1x1OGVmNFx1OGVlOVx1OTAyZFx1OTAzNFx1OTAyZlx1OTEwNlx1OTEyY1x1''@;'; put 'put ''OTEwNFx1OTBmZlx1OTBmY1x1OTEwOFx1OTBmOVx1OTBmYlx1OTEwMVx1OTEwMFx1OTEwN1x1OTEwNVx1OTEwM1x1OTE2MVx1OTE2NFx1OTE1Zlx1OTE2Mlx1OTE2MFx1OTIwMVx1OTIwYVx1OTIyNVx1OTIwM1x1OTIxYVx1OTIyNlx1OTIwZlx1OTIwY1x1OTIwMFx1OTIxMlx1OTFmZlx1OTFm''@;'; put 'put ''ZFx1OTIwNlx1OTIwNFx1OTIyN1x1OTIwMlx1OTIxY1x1OTIyNFx1OTIxOVx1OTIxN1x1OTIwNVx1OTIxNlx1OTU3Ylx1OTU4ZFx1OTU4Y1x1OTU5MFx1OTY4N1x1OTY3ZVx1OTY4OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY4OVx1OTY4M1x1OTY4MFx1OTZj''@;'; put 'put ''Mlx1OTZjOFx1OTZjM1x1OTZmMVx1OTZmMFx1OTc2Y1x1OTc3MFx1OTc2ZVx1OTgwN1x1OThhOVx1OThlYlx1OWNlNlx1OWVmOVx1NGU4M1x1NGU4NFx1NGViNlx1NTBiZFx1NTBiZlx1NTBjNlx1NTBhZVx1NTBjNFx1NTBjYVx1NTBiNFx1NTBjOFx1NTBjMlx1NTBiMFx1NTBjMVx1NTBiYVx1''@;'; put 'put ''NTBiMVx1NTBjYlx1NTBjOVx1NTBiNlx1NTBiOFx1NTFkN1x1NTI3YVx1NTI3OFx1NTI3Ylx1NTI3Y1x1NTVjM1x1NTVkYlx1NTVjY1x1NTVkMFx1NTVjYlx1NTVjYVx1NTVkZFx1NTVjMFx1NTVkNFx1NTVjNFx1NTVlOVx1NTViZlx1NTVkMlx1NTU4ZFx1NTVjZlx1NTVkNVx1NTVlMlx1NTVk''@;'; put 'put ''Nlx1NTVjOFx1NTVmMlx1NTVjZFx1NTVkOVx1NTVjMlx1NTcxNFx1NTg1M1x1NTg2OFx1NTg2NFx1NTg0Zlx1NTg0ZFx1NTg0OVx1NTg2Zlx1NTg1NVx1NTg0ZVx1NTg1ZFx1NTg1OVx1NTg2NVx1NTg1Ylx1NTgzZFx1NTg2M1x1NTg3MVx1NThmY1x1NWFjN1x1NWFjNFx1NWFjYlx1NWFiYVx1''@;'; put 'put ''NWFiOFx1NWFiMVx1NWFiNVx1NWFiMFx1NWFiZlx1NWFjOFx1NWFiYlx1NWFjNlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyMF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjIwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyMF1bcF1dPTU2MzIwK3AsYls1NjMyMCtwXT1fWzIyMF1bcF0p''@;'; put 'put ''O2ZvcihfWzIyMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWFiN1x1NWFjMFx1NWFjYVx1NWFiNFx1NWFiNlx1NWFjZFx1NWFiOVx1NWE5MFx1NWJkNlx1NWJkOFx1NWJkOVx1NWMxZlx1NWMzM1x1NWQ3MVx1NWQ2M1x1NWQ0YVx1''@;'; put 'put ''NWQ2NVx1NWQ3Mlx1NWQ2Y1x1NWQ1ZVx1NWQ2OFx1NWQ2N1x1NWQ2Mlx1NWRmMFx1NWU0Zlx1NWU0ZVx1NWU0YVx1NWU0ZFx1NWU0Ylx1NWVjNVx1NWVjY1x1NWVjNlx1NWVjYlx1NWVjN1x1NWY0MFx1NWZhZlx1NWZhZFx1NjBmN1x1NjE0OVx1NjE0YVx1NjEyYlx1NjE0NVx1NjEzNlx1NjEz''@;'; put 'put ''Mlx1NjEyZVx1NjE0Nlx1NjEyZlx1NjE0Zlx1NjEyOVx1NjE0MFx1NjIyMFx1OTE2OFx1NjIyM1x1NjIyNVx1NjIyNFx1NjNjNVx1NjNmMVx1NjNlYlx1NjQxMFx1NjQxMlx1NjQwOVx1NjQyMFx1NjQyNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjQzM1x1NjQ0''@;'; put 'put ''M1x1NjQxZlx1NjQxNVx1NjQxOFx1NjQzOVx1NjQzN1x1NjQyMlx1NjQyM1x1NjQwY1x1NjQyNlx1NjQzMFx1NjQyOFx1NjQ0MVx1NjQzNVx1NjQyZlx1NjQwYVx1NjQxYVx1NjQ0MFx1NjQyNVx1NjQyN1x1NjQwYlx1NjNlN1x1NjQxYlx1NjQyZVx1NjQyMVx1NjQwZVx1NjU2Zlx1NjU5Mlx1''@;'; put 'put ''NjVkM1x1NjY4Nlx1NjY4Y1x1NjY5NVx1NjY5MFx1NjY4Ylx1NjY4YVx1NjY5OVx1NjY5NFx1NjY3OFx1NjcyMFx1Njk2Nlx1Njk1Zlx1NjkzOFx1Njk0ZVx1Njk2Mlx1Njk3MVx1NjkzZlx1Njk0NVx1Njk2YVx1NjkzOVx1Njk0Mlx1Njk1N1x1Njk1OVx1Njk3YVx1Njk0OFx1Njk0OVx1Njkz''@;'; put 'put ''NVx1Njk2Y1x1NjkzM1x1NjkzZFx1Njk2NVx1NjhmMFx1Njk3OFx1NjkzNFx1Njk2OVx1Njk0MFx1Njk2Zlx1Njk0NFx1Njk3Nlx1Njk1OFx1Njk0MVx1Njk3NFx1Njk0Y1x1NjkzYlx1Njk0Ylx1NjkzN1x1Njk1Y1x1Njk0Zlx1Njk1MVx1NjkzMlx1Njk1Mlx1NjkyZlx1Njk3Ylx1NjkzY1x1''@;'; put 'put ''NmI0Nlx1NmI0NVx1NmI0M1x1NmI0Mlx1NmI0OFx1NmI0MVx1NmI5Ylx1ZmEwZFx1NmJmYlx1NmJmY1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyMV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjIxXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyMV1bcF1dPTU2NTc2K3AsYls1NjU3Nitw''@;'; put 'put ''XT1fWzIyMV1bcF0pO2ZvcihfWzIyMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmJmOVx1NmJmN1x1NmJmOFx1NmU5Ylx1NmVkNlx1NmVjOFx1NmU4Zlx1NmVjMFx1NmU5Zlx1NmU5M1x1NmU5NFx1NmVhMFx1NmViMVx1NmViOVx1''@;'; put 'put ''NmVjNlx1NmVkMlx1NmViZFx1NmVjMVx1NmU5ZVx1NmVjOVx1NmViN1x1NmViMFx1NmVjZFx1NmVhNlx1NmVjZlx1NmViMlx1NmViZVx1NmVjM1x1NmVkY1x1NmVkOFx1NmU5OVx1NmU5Mlx1NmU4ZVx1NmU4ZFx1NmVhNFx1NmVhMVx1NmViZlx1NmViM1x1NmVkMFx1NmVjYVx1NmU5N1x1NmVh''@;'; put 'put ''ZVx1NmVhM1x1NzE0N1x1NzE1NFx1NzE1Mlx1NzE2M1x1NzE2MFx1NzE0MVx1NzE1ZFx1NzE2Mlx1NzE3Mlx1NzE3OFx1NzE2YVx1NzE2MVx1NzE0Mlx1NzE1OFx1NzE0M1x1NzE0Ylx1NzE3MFx1NzE1Zlx1NzE1MFx1NzE1M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1NzE0NFx1NzE0ZFx1NzE1YVx1NzI0Zlx1NzI4ZFx1NzI4Y1x1NzI5MVx1NzI5MFx1NzI4ZVx1NzMzY1x1NzM0Mlx1NzMzYlx1NzMzYVx1NzM0MFx1NzM0YVx1NzM0OVx1NzQ0NFx1NzQ0YVx1NzQ0Ylx1NzQ1Mlx1NzQ1MVx1NzQ1N1x1NzQ0MFx1NzQ0Zlx1NzQ1MFx1NzQ0ZVx1NzQ0Mlx1''@;'; put 'put ''NzQ0Nlx1NzQ0ZFx1NzQ1NFx1NzRlMVx1NzRmZlx1NzRmZVx1NzRmZFx1NzUxZFx1NzU3OVx1NzU3N1x1Njk4M1x1NzVlZlx1NzYwZlx1NzYwM1x1NzVmN1x1NzVmZVx1NzVmY1x1NzVmOVx1NzVmOFx1NzYxMFx1NzVmYlx1NzVmNlx1NzVlZFx1NzVmNVx1NzVmZFx1NzY5OVx1NzZiNVx1NzZk''@;'; put 'put ''ZFx1Nzc1NVx1Nzc1Zlx1Nzc2MFx1Nzc1Mlx1Nzc1Nlx1Nzc1YVx1Nzc2OVx1Nzc2N1x1Nzc1NFx1Nzc1OVx1Nzc2ZFx1NzdlMFx1Nzg4N1x1Nzg5YVx1Nzg5NFx1Nzg4Zlx1Nzg4NFx1Nzg5NVx1Nzg4NVx1Nzg4Nlx1NzhhMVx1Nzg4M1x1Nzg3OVx1Nzg5OVx1Nzg4MFx1Nzg5Nlx1Nzg3Ylx1''@;'; put 'put ''Nzk3Y1x1Nzk4Mlx1Nzk3ZFx1Nzk3OVx1N2ExMVx1N2ExOFx1N2ExOVx1N2ExMlx1N2ExN1x1N2ExNVx1N2EyMlx1N2ExM1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyMl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjIyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyMl1bcF1dPTU2ODMy''@;'; put 'put ''K3AsYls1NjgzMitwXT1fWzIyMl1bcF0pO2ZvcihfWzIyM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2ExYlx1N2ExMFx1N2FhM1x1N2FhMlx1N2E5ZVx1N2FlYlx1N2I2Nlx1N2I2NFx1N2I2ZFx1N2I3NFx1N2I2OVx1N2I3Mlx1''@;'; put 'put ''N2I2NVx1N2I3M1x1N2I3MVx1N2I3MFx1N2I2MVx1N2I3OFx1N2I3Nlx1N2I2M1x1N2NiMlx1N2NiNFx1N2NhZlx1N2Q4OFx1N2Q4Nlx1N2Q4MFx1N2Q4ZFx1N2Q3Zlx1N2Q4NVx1N2Q3YVx1N2Q4ZVx1N2Q3Ylx1N2Q4M1x1N2Q3Y1x1N2Q4Y1x1N2Q5NFx1N2Q4NFx1N2Q3ZFx1N2Q5Mlx1N2Y2''@;'; put 'put ''ZFx1N2Y2Ylx1N2Y2N1x1N2Y2OFx1N2Y2Y1x1N2ZhNlx1N2ZhNVx1N2ZhN1x1N2ZkYlx1N2ZkY1x1ODAyMVx1ODE2NFx1ODE2MFx1ODE3N1x1ODE1Y1x1ODE2OVx1ODE1Ylx1ODE2Mlx1ODE3Mlx1NjcyMVx1ODE1ZVx1ODE3Nlx1ODE2N1x1ODE2Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ODE0NFx1ODE2MVx1ODIxZFx1ODI0OVx1ODI0NFx1ODI0MFx1ODI0Mlx1ODI0NVx1ODRmMVx1ODQzZlx1ODQ1Nlx1ODQ3Nlx1ODQ3OVx1ODQ4Zlx1ODQ4ZFx1ODQ2NVx1ODQ1MVx1ODQ0MFx1ODQ4Nlx1ODQ2N1x1ODQzMFx1ODQ0ZFx1ODQ3ZFx1ODQ1YVx1ODQ1OVx1''@;'; put 'put ''ODQ3NFx1ODQ3M1x1ODQ1ZFx1ODUwN1x1ODQ1ZVx1ODQzN1x1ODQzYVx1ODQzNFx1ODQ3YVx1ODQ0M1x1ODQ3OFx1ODQzMlx1ODQ0NVx1ODQyOVx1ODNkOVx1ODQ0Ylx1ODQyZlx1ODQ0Mlx1ODQyZFx1ODQ1Zlx1ODQ3MFx1ODQzOVx1ODQ0ZVx1ODQ0Y1x1ODQ1Mlx1ODQ2Zlx1ODRjNVx1ODQ4''@;'; put 'put ''ZVx1ODQzYlx1ODQ0N1x1ODQzNlx1ODQzM1x1ODQ2OFx1ODQ3ZVx1ODQ0NFx1ODQyYlx1ODQ2MFx1ODQ1NFx1ODQ2ZVx1ODQ1MFx1ODcwYlx1ODcwNFx1ODZmN1x1ODcwY1x1ODZmYVx1ODZkNlx1ODZmNVx1ODc0ZFx1ODZmOFx1ODcwZVx1ODcwOVx1ODcwMVx1ODZmNlx1ODcwZFx1ODcwNVx1''@;'; put 'put ''ODhkNlx1ODhjYlx1ODhjZFx1ODhjZVx1ODhkZVx1ODhkYlx1ODhkYVx1ODhjY1x1ODhkMFx1ODk4NVx1ODk5Ylx1ODlkZlx1ODllNVx1ODllNFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyM10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjIzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIy''@;'; put 'put ''M11bcF1dPTU3MDg4K3AsYls1NzA4OCtwXT1fWzIyM11bcF0pO2ZvcihfWzIyNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODllMVx1ODllMFx1ODllMlx1ODlkY1x1ODllNlx1OGE3Nlx1OGE4Nlx1OGE3Zlx1OGE2MVx1OGEzZlx1''@;'; put 'put ''OGE3N1x1OGE4Mlx1OGE4NFx1OGE3NVx1OGE4M1x1OGE4MVx1OGE3NFx1OGE3YVx1OGMzY1x1OGM0Ylx1OGM0YVx1OGM2NVx1OGM2NFx1OGM2Nlx1OGM4Nlx1OGM4NFx1OGM4NVx1OGNjY1x1OGQ2OFx1OGQ2OVx1OGQ5MVx1OGQ4Y1x1OGQ4ZVx1OGQ4Zlx1OGQ4ZFx1OGQ5M1x1OGQ5NFx1OGQ5''@;'; put 'put ''MFx1OGQ5Mlx1OGRmMFx1OGRlMFx1OGRlY1x1OGRmMVx1OGRlZVx1OGRkMFx1OGRlOVx1OGRlM1x1OGRlMlx1OGRlN1x1OGRmMlx1OGRlYlx1OGRmNFx1OGYwNlx1OGVmZlx1OGYwMVx1OGYwMFx1OGYwNVx1OGYwN1x1OGYwOFx1OGYwMlx1OGYwYlx1OTA1Mlx1OTAzZlx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTA0NFx1OTA0OVx1OTAzZFx1OTExMFx1OTEwZFx1OTEwZlx1OTExMVx1OTExNlx1OTExNFx1OTEwYlx1OTEwZVx1OTE2ZVx1OTE2Zlx1OTI0OFx1OTI1Mlx1OTIzMFx1OTIzYVx1OTI2Nlx1OTIzM1x1OTI2NVx1OTI1ZVx1OTI4M1x1OTIyZVx1''@;'; put 'put ''OTI0YVx1OTI0Nlx1OTI2ZFx1OTI2Y1x1OTI0Zlx1OTI2MFx1OTI2N1x1OTI2Zlx1OTIzNlx1OTI2MVx1OTI3MFx1OTIzMVx1OTI1NFx1OTI2M1x1OTI1MFx1OTI3Mlx1OTI0ZVx1OTI1M1x1OTI0Y1x1OTI1Nlx1OTIzMlx1OTU5Zlx1OTU5Y1x1OTU5ZVx1OTU5Ylx1OTY5Mlx1OTY5M1x1OTY5''@;'; put 'put ''MVx1OTY5N1x1OTZjZVx1OTZmYVx1OTZmZFx1OTZmOFx1OTZmNVx1OTc3M1x1OTc3N1x1OTc3OFx1OTc3Mlx1OTgwZlx1OTgwZFx1OTgwZVx1OThhY1x1OThmNlx1OThmOVx1OTlhZlx1OTliMlx1OTliMFx1OTliNVx1OWFhZFx1OWFhYlx1OWI1Ylx1OWNlYVx1OWNlZFx1OWNlN1x1OWU4MFx1''@;'; put 'put ''OWVmZFx1NTBlNlx1NTBkNFx1NTBkN1x1NTBlOFx1NTBmM1x1NTBkYlx1NTBlYVx1NTBkZFx1NTBlNFx1NTBkM1x1NTBlY1x1NTBmMFx1NTBlZlx1NTBlM1x1NTBlMFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyNF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI0XVtwXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoSVtfWzIyNF1bcF1dPTU3MzQ0K3AsYls1NzM0NCtwXT1fWzIyNF1bcF0pO2ZvcihfWzIyNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTFkOFx1NTI4MFx1NTI4MVx1NTJlOVx1NTJlYlx1NTMzMFx1NTNhY1x1NTYyN1x1''@;'; put 'put ''NTYxNVx1NTYwY1x1NTYxMlx1NTVmY1x1NTYwZlx1NTYxY1x1NTYwMVx1NTYxM1x1NTYwMlx1NTVmYVx1NTYxZFx1NTYwNFx1NTVmZlx1NTVmOVx1NTg4OVx1NTg3Y1x1NTg5MFx1NTg5OFx1NTg4Nlx1NTg4MVx1NTg3Zlx1NTg3NFx1NTg4Ylx1NTg3YVx1NTg4N1x1NTg5MVx1NTg4ZVx1NTg3''@;'; put 'put ''Nlx1NTg4Mlx1NTg4OFx1NTg3Ylx1NTg5NFx1NTg4Zlx1NThmZVx1NTk2Ylx1NWFkY1x1NWFlZVx1NWFlNVx1NWFkNVx1NWFlYVx1NWFkYVx1NWFlZFx1NWFlYlx1NWFmM1x1NWFlMlx1NWFlMFx1NWFkYlx1NWFlY1x1NWFkZVx1NWFkZFx1NWFkOVx1NWFlOFx1NWFkZlx1NWI3N1x1NWJlMFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWJlM1x1NWM2M1x1NWQ4Mlx1NWQ4MFx1NWQ3ZFx1NWQ4Nlx1NWQ3YVx1NWQ4MVx1NWQ3N1x1NWQ4YVx1NWQ4OVx1NWQ4OFx1NWQ3ZVx1NWQ3Y1x1NWQ4ZFx1NWQ3OVx1NWQ3Zlx1NWU1OFx1NWU1OVx1NWU1M1x1NWVkOFx1''@;'; put 'put ''NWVkMVx1NWVkN1x1NWVjZVx1NWVkY1x1NWVkNVx1NWVkOVx1NWVkMlx1NWVkNFx1NWY0NFx1NWY0M1x1NWY2Zlx1NWZiNlx1NjEyY1x1NjEyOFx1NjE0MVx1NjE1ZVx1NjE3MVx1NjE3M1x1NjE1Mlx1NjE1M1x1NjE3Mlx1NjE2Y1x1NjE4MFx1NjE3NFx1NjE1NFx1NjE3YVx1NjE1Ylx1NjE2''@;'; put 'put ''NVx1NjEzYlx1NjE2YVx1NjE2MVx1NjE1Nlx1NjIyOVx1NjIyN1x1NjIyYlx1NjQyYlx1NjQ0ZFx1NjQ1Ylx1NjQ1ZFx1NjQ3NFx1NjQ3Nlx1NjQ3Mlx1NjQ3M1x1NjQ3ZFx1NjQ3NVx1NjQ2Nlx1NjRhNlx1NjQ0ZVx1NjQ4Mlx1NjQ1ZVx1NjQ1Y1x1NjQ0Ylx1NjQ1M1x1NjQ2MFx1NjQ1MFx1''@;'; put 'put ''NjQ3Zlx1NjQzZlx1NjQ2Y1x1NjQ2Ylx1NjQ1OVx1NjQ2NVx1NjQ3N1x1NjU3M1x1NjVhMFx1NjZhMVx1NjZhMFx1NjY5Zlx1NjcwNVx1NjcwNFx1NjcyMlx1NjliMVx1NjliNlx1NjljOVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyNV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI1XVtw''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyNV1bcF1dPTU3NjAwK3AsYls1NzYwMCtwXT1fWzIyNV1bcF0pO2ZvcihfWzIyNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjlhMFx1NjljZVx1Njk5Nlx1NjliMFx1NjlhY1x1NjliY1x1''@;'; put 'put ''Njk5MVx1Njk5OVx1Njk4ZVx1NjlhN1x1Njk4ZFx1NjlhOVx1NjliZVx1NjlhZlx1NjliZlx1NjljNFx1NjliZFx1NjlhNFx1NjlkNFx1NjliOVx1NjljYVx1Njk5YVx1NjljZlx1NjliM1x1Njk5M1x1NjlhYVx1NjlhMVx1Njk5ZVx1NjlkOVx1Njk5N1x1Njk5MFx1NjljMlx1NjliNVx1Njlh''@;'; put 'put ''NVx1NjljNlx1NmI0YVx1NmI0ZFx1NmI0Ylx1NmI5ZVx1NmI5Zlx1NmJhMFx1NmJjM1x1NmJjNFx1NmJmZVx1NmVjZVx1NmVmNVx1NmVmMVx1NmYwM1x1NmYyNVx1NmVmOFx1NmYzN1x1NmVmYlx1NmYyZVx1NmYwOVx1NmY0ZVx1NmYxOVx1NmYxYVx1NmYyN1x1NmYxOFx1NmYzYlx1NmYxMlx1''@;'; put 'put ''NmVlZFx1NmYwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmYzNlx1NmY3M1x1NmVmOVx1NmVlZVx1NmYyZFx1NmY0MFx1NmYzMFx1NmYzY1x1NmYzNVx1NmVlYlx1NmYwN1x1NmYwZVx1NmY0M1x1NmYwNVx1NmVmZFx1NmVmNlx1NmYzOVx1NmYxY1x1NmVmY1x1''@;'; put 'put ''NmYzYVx1NmYxZlx1NmYwZFx1NmYxZVx1NmYwOFx1NmYyMVx1NzE4N1x1NzE5MFx1NzE4OVx1NzE4MFx1NzE4NVx1NzE4Mlx1NzE4Zlx1NzE3Ylx1NzE4Nlx1NzE4MVx1NzE5N1x1NzI0NFx1NzI1M1x1NzI5N1x1NzI5NVx1NzI5M1x1NzM0M1x1NzM0ZFx1NzM1MVx1NzM0Y1x1NzQ2Mlx1NzQ3''@;'; put 'put ''M1x1NzQ3MVx1NzQ3NVx1NzQ3Mlx1NzQ2N1x1NzQ2ZVx1NzUwMFx1NzUwMlx1NzUwM1x1NzU3ZFx1NzU5MFx1NzYxNlx1NzYwOFx1NzYwY1x1NzYxNVx1NzYxMVx1NzYwYVx1NzYxNFx1NzZiOFx1Nzc4MVx1Nzc3Y1x1Nzc4NVx1Nzc4Mlx1Nzc2ZVx1Nzc4MFx1Nzc2Zlx1Nzc3ZVx1Nzc4M1x1''@;'; put 'put ''NzhiMlx1NzhhYVx1NzhiNFx1NzhhZFx1NzhhOFx1Nzg3ZVx1NzhhYlx1Nzg5ZVx1NzhhNVx1NzhhMFx1NzhhY1x1NzhhMlx1NzhhNFx1Nzk5OFx1Nzk4YVx1Nzk4Ylx1Nzk5Nlx1Nzk5NVx1Nzk5NFx1Nzk5M1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyNl0ubGVuZ3RoOysrcCk2NTUz''@;'; put 'put ''MyE9PV9bMjI2XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyNl1bcF1dPTU3ODU2K3AsYls1Nzg1NitwXT1fWzIyNl1bcF0pO2ZvcihfWzIyN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzk5N1x1Nzk4OFx1Nzk5Mlx1Nzk5MFx1''@;'; put 'put ''N2EyYlx1N2E0YVx1N2EzMFx1N2EyZlx1N2EyOFx1N2EyNlx1N2FhOFx1N2FhYlx1N2FhY1x1N2FlZVx1N2I4OFx1N2I5Y1x1N2I4YVx1N2I5MVx1N2I5MFx1N2I5Nlx1N2I4ZFx1N2I4Y1x1N2I5Ylx1N2I4ZVx1N2I4NVx1N2I5OFx1NTI4NFx1N2I5OVx1N2JhNFx1N2I4Mlx1N2NiYlx1N2Ni''@;'; put 'put ''Zlx1N2NiY1x1N2NiYVx1N2RhN1x1N2RiN1x1N2RjMlx1N2RhM1x1N2RhYVx1N2RjMVx1N2RjMFx1N2RjNVx1N2Q5ZFx1N2RjZVx1N2RjNFx1N2RjNlx1N2RjYlx1N2RjY1x1N2RhZlx1N2RiOVx1N2Q5Nlx1N2RiY1x1N2Q5Zlx1N2RhNlx1N2RhZVx1N2RhOVx1N2RhMVx1N2RjOVx1N2Y3M1x1''@;'; put 'put ''N2ZlMlx1N2ZlM1x1N2ZlNVx1N2ZkZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODAyNFx1ODA1ZFx1ODA1Y1x1ODE4OVx1ODE4Nlx1ODE4M1x1ODE4N1x1ODE4ZFx1ODE4Y1x1ODE4Ylx1ODIxNVx1ODQ5N1x1ODRhNFx1ODRhMVx1ODQ5Zlx1ODRiYVx1ODRjZVx1''@;'; put 'put ''ODRjMlx1ODRhY1x1ODRhZVx1ODRhYlx1ODRiOVx1ODRiNFx1ODRjMVx1ODRjZFx1ODRhYVx1ODQ5YVx1ODRiMVx1ODRkMFx1ODQ5ZFx1ODRhN1x1ODRiYlx1ODRhMlx1ODQ5NFx1ODRjN1x1ODRjY1x1ODQ5Ylx1ODRhOVx1ODRhZlx1ODRhOFx1ODRkNlx1ODQ5OFx1ODRiNlx1ODRjZlx1ODRh''@;'; put 'put ''MFx1ODRkN1x1ODRkNFx1ODRkMlx1ODRkYlx1ODRiMFx1ODQ5MVx1ODY2MVx1ODczM1x1ODcyM1x1ODcyOFx1ODc2Ylx1ODc0MFx1ODcyZVx1ODcxZVx1ODcyMVx1ODcxOVx1ODcxYlx1ODc0M1x1ODcyY1x1ODc0MVx1ODczZVx1ODc0Nlx1ODcyMFx1ODczMlx1ODcyYVx1ODcyZFx1ODczY1x1''@;'; put 'put ''ODcxMlx1ODczYVx1ODczMVx1ODczNVx1ODc0Mlx1ODcyNlx1ODcyN1x1ODczOFx1ODcyNFx1ODcxYVx1ODczMFx1ODcxMVx1ODhmN1x1ODhlN1x1ODhmMVx1ODhmMlx1ODhmYVx1ODhmZVx1ODhlZVx1ODhmY1x1ODhmNlx1ODhmYlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyN10ubGVu''@;'; put 'put ''Z3RoOysrcCk2NTUzMyE9PV9bMjI3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyN11bcF1dPTU4MTEyK3AsYls1ODExMitwXT1fWzIyN11bcF0pO2ZvcihfWzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODhmMFx1ODhlY1x1''@;'; put 'put ''ODhlYlx1ODk5ZFx1ODlhMVx1ODk5Zlx1ODk5ZVx1ODllOVx1ODllYlx1ODllOFx1OGFhYlx1OGE5OVx1OGE4Ylx1OGE5Mlx1OGE4Zlx1OGE5Nlx1OGMzZFx1OGM2OFx1OGM2OVx1OGNkNVx1OGNjZlx1OGNkN1x1OGQ5Nlx1OGUwOVx1OGUwMlx1OGRmZlx1OGUwZFx1OGRmZFx1OGUwYVx1OGUw''@;'; put 'put ''M1x1OGUwN1x1OGUwNlx1OGUwNVx1OGRmZVx1OGUwMFx1OGUwNFx1OGYxMFx1OGYxMVx1OGYwZVx1OGYwZFx1OTEyM1x1OTExY1x1OTEyMFx1OTEyMlx1OTExZlx1OTExZFx1OTExYVx1OTEyNFx1OTEyMVx1OTExYlx1OTE3YVx1OTE3Mlx1OTE3OVx1OTE3M1x1OTJhNVx1OTJhNFx1OTI3Nlx1''@;'; put 'put ''OTI5Ylx1OTI3YVx1OTJhMFx1OTI5NFx1OTJhYVx1OTI4ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTJhNlx1OTI5YVx1OTJhYlx1OTI3OVx1OTI5N1x1OTI3Zlx1OTJhM1x1OTJlZVx1OTI4ZVx1OTI4Mlx1OTI5NVx1OTJhMlx1OTI3ZFx1OTI4OFx1OTJhMVx1''@;'; put 'put ''OTI4YVx1OTI4Nlx1OTI4Y1x1OTI5OVx1OTJhN1x1OTI3ZVx1OTI4N1x1OTJhOVx1OTI5ZFx1OTI4Ylx1OTIyZFx1OTY5ZVx1OTZhMVx1OTZmZlx1OTc1OFx1OTc3ZFx1OTc3YVx1OTc3ZVx1OTc4M1x1OTc4MFx1OTc4Mlx1OTc3Ylx1OTc4NFx1OTc4MVx1OTc3Zlx1OTdjZVx1OTdjZFx1OTgx''@;'; put 'put ''Nlx1OThhZFx1OThhZVx1OTkwMlx1OTkwMFx1OTkwN1x1OTk5ZFx1OTk5Y1x1OTljM1x1OTliOVx1OTliYlx1OTliYVx1OTljMlx1OTliZFx1OTljN1x1OWFiMVx1OWFlM1x1OWFlN1x1OWIzZVx1OWIzZlx1OWI2MFx1OWI2MVx1OWI1Zlx1OWNmMVx1OWNmMlx1OWNmNVx1OWVhN1x1NTBmZlx1''@;'; put 'put ''NTEwM1x1NTEzMFx1NTBmOFx1NTEwNlx1NTEwN1x1NTBmNlx1NTBmZVx1NTEwYlx1NTEwY1x1NTBmZFx1NTEwYVx1NTI4Ylx1NTI4Y1x1NTJmMVx1NTJlZlx1NTY0OFx1NTY0Mlx1NTY0Y1x1NTYzNVx1NTY0MVx1NTY0YVx1NTY0OVx1NTY0Nlx1NTY1OFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtw''@;'; put 'put ''IT1fWzIyOF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI4XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyOF1bcF1dPTU4MzY4K3AsYls1ODM2OCtwXT1fWzIyOF1bcF0pO2ZvcihfWzIyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''NTY1YVx1NTY0MFx1NTYzM1x1NTYzZFx1NTYyY1x1NTYzZVx1NTYzOFx1NTYyYVx1NTYzYVx1NTcxYVx1NThhYlx1NTg5ZFx1NThiMVx1NThhMFx1NThhM1x1NThhZlx1NThhY1x1NThhNVx1NThhMVx1NThmZlx1NWFmZlx1NWFmNFx1NWFmZFx1NWFmN1x1NWFmNlx1NWIwM1x1NWFmOFx1NWIw''@;'; put 'put ''Mlx1NWFmOVx1NWIwMVx1NWIwN1x1NWIwNVx1NWIwZlx1NWM2N1x1NWQ5OVx1NWQ5N1x1NWQ5Zlx1NWQ5Mlx1NWRhMlx1NWQ5M1x1NWQ5NVx1NWRhMFx1NWQ5Y1x1NWRhMVx1NWQ5YVx1NWQ5ZVx1NWU2OVx1NWU1ZFx1NWU2MFx1NWU1Y1x1N2RmM1x1NWVkYlx1NWVkZVx1NWVlMVx1NWY0OVx1''@;'; put 'put ''NWZiMlx1NjE4Ylx1NjE4M1x1NjE3OVx1NjFiMVx1NjFiMFx1NjFhMlx1NjE4OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjE5Ylx1NjE5M1x1NjFhZlx1NjFhZFx1NjE5Zlx1NjE5Mlx1NjFhYVx1NjFhMVx1NjE4ZFx1NjE2Nlx1NjFiM1x1NjIyZFx1NjQ2ZVx1''@;'; put 'put ''NjQ3MFx1NjQ5Nlx1NjRhMFx1NjQ4NVx1NjQ5N1x1NjQ5Y1x1NjQ4Zlx1NjQ4Ylx1NjQ4YVx1NjQ4Y1x1NjRhM1x1NjQ5Zlx1NjQ2OFx1NjRiMVx1NjQ5OFx1NjU3Nlx1NjU3YVx1NjU3OVx1NjU3Ylx1NjViMlx1NjViM1x1NjZiNVx1NjZiMFx1NjZhOVx1NjZiMlx1NjZiN1x1NjZhYVx1NjZh''@;'; put 'put ''Zlx1NmEwMFx1NmEwNlx1NmExN1x1NjllNVx1NjlmOFx1NmExNVx1NjlmMVx1NjllNFx1NmEyMFx1NjlmZlx1NjllY1x1NjllMlx1NmExYlx1NmExZFx1NjlmZVx1NmEyN1x1NjlmMlx1NjllZVx1NmExNFx1NjlmN1x1NjllN1x1NmE0MFx1NmEwOFx1NjllNlx1NjlmYlx1NmEwZFx1NjlmY1x1''@;'; put 'put ''NjllYlx1NmEwOVx1NmEwNFx1NmExOFx1NmEyNVx1NmEwZlx1NjlmNlx1NmEyNlx1NmEwN1x1NjlmNFx1NmExNlx1NmI1MVx1NmJhNVx1NmJhM1x1NmJhMlx1NmJhNlx1NmMwMVx1NmMwMFx1NmJmZlx1NmMwMlx1NmY0MVx1NmYyNlx1NmY3ZVx1NmY4N1x1NmZjNlx1NmY5Mlx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLHA9MDtwIT1fWzIyOV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyOV1bcF1dPTU4NjI0K3AsYls1ODYyNCtwXT1fWzIyOV1bcF0pO2ZvcihfWzIzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1NmY4ZFx1NmY4OVx1NmY4Y1x1NmY2Mlx1NmY0Zlx1NmY4NVx1NmY1YVx1NmY5Nlx1NmY3Nlx1NmY2Y1x1NmY4Mlx1NmY1NVx1NmY3Mlx1NmY1Mlx1NmY1MFx1NmY1N1x1NmY5NFx1NmY5M1x1NmY1ZFx1NmYwMFx1NmY2MVx1NmY2Ylx1NmY3ZFx1NmY2N1x1NmY5MFx1NmY1''@;'; put 'put ''M1x1NmY4Ylx1NmY2OVx1NmY3Zlx1NmY5NVx1NmY2M1x1NmY3N1x1NmY2YVx1NmY3Ylx1NzFiMlx1NzFhZlx1NzE5Ylx1NzFiMFx1NzFhMFx1NzE5YVx1NzFhOVx1NzFiNVx1NzE5ZFx1NzFhNVx1NzE5ZVx1NzFhNFx1NzFhMVx1NzFhYVx1NzE5Y1x1NzFhN1x1NzFiM1x1NzI5OFx1NzI5YVx1''@;'; put 'put ''NzM1OFx1NzM1Mlx1NzM1ZVx1NzM1Zlx1NzM2MFx1NzM1ZFx1NzM1Ylx1NzM2MVx1NzM1YVx1NzM1OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzM2Mlx1NzQ4N1x1NzQ4OVx1NzQ4YVx1NzQ4Nlx1NzQ4MVx1NzQ3ZFx1NzQ4NVx1NzQ4OFx1NzQ3Y1x1NzQ3OVx1''@;'; put 'put ''NzUwOFx1NzUwN1x1NzU3ZVx1NzYyNVx1NzYxZVx1NzYxOVx1NzYxZFx1NzYxY1x1NzYyM1x1NzYxYVx1NzYyOFx1NzYxYlx1NzY5Y1x1NzY5ZFx1NzY5ZVx1NzY5Ylx1Nzc4ZFx1Nzc4Zlx1Nzc4OVx1Nzc4OFx1NzhjZFx1NzhiYlx1NzhjZlx1NzhjY1x1NzhkMVx1NzhjZVx1NzhkNFx1Nzhj''@;'; put 'put ''OFx1NzhjM1x1NzhjNFx1NzhjOVx1Nzk5YVx1NzlhMVx1NzlhMFx1Nzk5Y1x1NzlhMlx1Nzk5Ylx1NmI3Nlx1N2EzOVx1N2FiMlx1N2FiNFx1N2FiM1x1N2JiN1x1N2JjYlx1N2JiZVx1N2JhY1x1N2JjZVx1N2JhZlx1N2JiOVx1N2JjYVx1N2JiNVx1N2NjNVx1N2NjOFx1N2NjY1x1N2NjYlx1''@;'; put 'put ''N2RmN1x1N2RkYlx1N2RlYVx1N2RlN1x1N2RkN1x1N2RlMVx1N2UwM1x1N2RmYVx1N2RlNlx1N2RmNlx1N2RmMVx1N2RmMFx1N2RlZVx1N2RkZlx1N2Y3Nlx1N2ZhY1x1N2ZiMFx1N2ZhZFx1N2ZlZFx1N2ZlYlx1N2ZlYVx1N2ZlY1x1N2ZlNlx1N2ZlOFx1ODA2NFx1ODA2N1x1ODFhM1x1ODE5''@;'; put 'put ''Zlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzMF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjMwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzMF1bcF1dPTU4ODgwK3AsYls1ODg4MCtwXT1fWzIzMF1bcF0pO2ZvcihfWzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODE5ZVx1ODE5NVx1ODFhMlx1ODE5OVx1ODE5N1x1ODIxNlx1ODI0Zlx1ODI1M1x1ODI1Mlx1ODI1MFx1ODI0ZVx1ODI1MVx1ODUyNFx1ODUzYlx1ODUwZlx1ODUwMFx1ODUyOVx1ODUwZVx1ODUwOVx1ODUwZFx1ODUxZlx1ODUwYVx1ODUyN1x1ODUx''@;'; put 'put ''Y1x1ODRmYlx1ODUyYlx1ODRmYVx1ODUwOFx1ODUwY1x1ODRmNFx1ODUyYVx1ODRmMlx1ODUxNVx1ODRmN1x1ODRlYlx1ODRmM1x1ODRmY1x1ODUxMlx1ODRlYVx1ODRlOVx1ODUxNlx1ODRmZVx1ODUyOFx1ODUxZFx1ODUyZVx1ODUwMlx1ODRmZFx1ODUxZVx1ODRmNlx1ODUzMVx1ODUyNlx1''@;'; put 'put ''ODRlN1x1ODRlOFx1ODRmMFx1ODRlZlx1ODRmOVx1ODUxOFx1ODUyMFx1ODUzMFx1ODUwYlx1ODUxOVx1ODUyZlx1ODY2Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODc1Nlx1ODc2M1x1ODc2NFx1ODc3N1x1ODdlMVx1ODc3M1x1ODc1OFx1ODc1NFx1ODc1Ylx1''@;'; put 'put ''ODc1Mlx1ODc2MVx1ODc1YVx1ODc1MVx1ODc1ZVx1ODc2ZFx1ODc2YVx1ODc1MFx1ODc0ZVx1ODc1Zlx1ODc1ZFx1ODc2Zlx1ODc2Y1x1ODc3YVx1ODc2ZVx1ODc1Y1x1ODc2NVx1ODc0Zlx1ODc3Ylx1ODc3NVx1ODc2Mlx1ODc2N1x1ODc2OVx1ODg1YVx1ODkwNVx1ODkwY1x1ODkxNFx1ODkw''@;'; put 'put ''Ylx1ODkxN1x1ODkxOFx1ODkxOVx1ODkwNlx1ODkxNlx1ODkxMVx1ODkwZVx1ODkwOVx1ODlhMlx1ODlhNFx1ODlhM1x1ODllZFx1ODlmMFx1ODllY1x1OGFjZlx1OGFjNlx1OGFiOFx1OGFkM1x1OGFkMVx1OGFkNFx1OGFkNVx1OGFiYlx1OGFkN1x1OGFiZVx1OGFjMFx1OGFjNVx1OGFkOFx1''@;'; put 'put ''OGFjM1x1OGFiYVx1OGFiZFx1OGFkOVx1OGMzZVx1OGM0ZFx1OGM4Zlx1OGNlNVx1OGNkZlx1OGNkOVx1OGNlOFx1OGNkYVx1OGNkZFx1OGNlN1x1OGRhMFx1OGQ5Y1x1OGRhMVx1OGQ5Ylx1OGUyMFx1OGUyM1x1OGUyNVx1OGUyNFx1OGUyZVx1OGUxNVx1OGUxYlx1OGUxNlx1OGUxMVx1OGUx''@;'; put 'put ''OVx1OGUyNlx1OGUyN1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzMV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjMxXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzMV1bcF1dPTU5MTM2K3AsYls1OTEzNitwXT1fWzIzMV1bcF0pO2ZvcihfWzIzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGUxNFx1OGUxMlx1OGUxOFx1OGUxM1x1OGUxY1x1OGUxN1x1OGUxYVx1OGYyY1x1OGYyNFx1OGYxOFx1OGYxYVx1OGYyMFx1OGYyM1x1OGYxNlx1OGYxN1x1OTA3M1x1OTA3MFx1OTA2Zlx1OTA2N1x1OTA2Ylx1OTEyZlx1OTEy''@;'; put 'put ''Ylx1OTEyOVx1OTEyYVx1OTEzMlx1OTEyNlx1OTEyZVx1OTE4NVx1OTE4Nlx1OTE4YVx1OTE4MVx1OTE4Mlx1OTE4NFx1OTE4MFx1OTJkMFx1OTJjM1x1OTJjNFx1OTJjMFx1OTJkOVx1OTJiNlx1OTJjZlx1OTJmMVx1OTJkZlx1OTJkOFx1OTJlOVx1OTJkN1x1OTJkZFx1OTJjY1x1OTJlZlx1''@;'; put 'put ''OTJjMlx1OTJlOFx1OTJjYVx1OTJjOFx1OTJjZVx1OTJlNlx1OTJjZFx1OTJkNVx1OTJjOVx1OTJlMFx1OTJkZVx1OTJlN1x1OTJkMVx1OTJkM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTJiNVx1OTJlMVx1OTJjNlx1OTJiNFx1OTU3Y1x1OTVhY1x1OTVhYlx1''@;'; put 'put ''OTVhZVx1OTViMFx1OTZhNFx1OTZhMlx1OTZkM1x1OTcwNVx1OTcwOFx1OTcwMlx1OTc1YVx1OTc4YVx1OTc4ZVx1OTc4OFx1OTdkMFx1OTdjZlx1OTgxZVx1OTgxZFx1OTgyNlx1OTgyOVx1OTgyOFx1OTgyMFx1OTgxYlx1OTgyN1x1OThiMlx1OTkwOFx1OThmYVx1OTkxMVx1OTkxNFx1OTkx''@;'; put 'put ''Nlx1OTkxN1x1OTkxNVx1OTlkY1x1OTljZFx1OTljZlx1OTlkM1x1OTlkNFx1OTljZVx1OTljOVx1OTlkNlx1OTlkOFx1OTljYlx1OTlkN1x1OTljY1x1OWFiM1x1OWFlY1x1OWFlYlx1OWFmM1x1OWFmMlx1OWFmMVx1OWI0Nlx1OWI0M1x1OWI2N1x1OWI3NFx1OWI3MVx1OWI2Nlx1OWI3Nlx1''@;'; put 'put ''OWI3NVx1OWI3MFx1OWI2OFx1OWI2NFx1OWI2Y1x1OWNmY1x1OWNmYVx1OWNmZFx1OWNmZlx1OWNmN1x1OWQwN1x1OWQwMFx1OWNmOVx1OWNmYlx1OWQwOFx1OWQwNVx1OWQwNFx1OWU4M1x1OWVkM1x1OWYwZlx1OWYxMFx1NTExY1x1NTExM1x1NTExN1x1NTExYVx1NTExMVx1NTFkZVx1NTMz''@;'; put 'put ''NFx1NTNlMVx1NTY3MFx1NTY2MFx1NTY2ZVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzMl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjMyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzMl1bcF1dPTU5MzkyK3AsYls1OTM5MitwXT1fWzIzMl1bcF0pO2ZvcihfWzIzM109Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTY3M1x1NTY2Nlx1NTY2M1x1NTY2ZFx1NTY3Mlx1NTY1ZVx1NTY3N1x1NTcxY1x1NTcxYlx1NThjOFx1NThiZFx1NThjOVx1NThiZlx1NThiYVx1NThjMlx1NThiY1x1NThjNlx1NWIxN1x1NWIxOVx1NWIx''@;'; put 'put ''Ylx1NWIyMVx1NWIxNFx1NWIxM1x1NWIxMFx1NWIxNlx1NWIyOFx1NWIxYVx1NWIyMFx1NWIxZVx1NWJlZlx1NWRhY1x1NWRiMVx1NWRhOVx1NWRhN1x1NWRiNVx1NWRiMFx1NWRhZVx1NWRhYVx1NWRhOFx1NWRiMlx1NWRhZFx1NWRhZlx1NWRiNFx1NWU2N1x1NWU2OFx1NWU2Nlx1NWU2Zlx1''@;'; put 'put ''NWVlOVx1NWVlN1x1NWVlNlx1NWVlOFx1NWVlNVx1NWY0Ylx1NWZiY1x1NjE5ZFx1NjFhOFx1NjE5Nlx1NjFjNVx1NjFiNFx1NjFjNlx1NjFjMVx1NjFjY1x1NjFiYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjFiZlx1NjFiOFx1NjE4Y1x1NjRkN1x1NjRkNlx1''@;'; put 'put ''NjRkMFx1NjRjZlx1NjRjOVx1NjRiZFx1NjQ4OVx1NjRjM1x1NjRkYlx1NjRmM1x1NjRkOVx1NjUzM1x1NjU3Zlx1NjU3Y1x1NjVhMlx1NjZjOFx1NjZiZVx1NjZjMFx1NjZjYVx1NjZjYlx1NjZjZlx1NjZiZFx1NjZiYlx1NjZiYVx1NjZjY1x1NjcyM1x1NmEzNFx1NmE2Nlx1NmE0OVx1NmE2''@;'; put 'put ''N1x1NmEzMlx1NmE2OFx1NmEzZVx1NmE1ZFx1NmE2ZFx1NmE3Nlx1NmE1Ylx1NmE1MVx1NmEyOFx1NmE1YVx1NmEzYlx1NmEzZlx1NmE0MVx1NmE2YVx1NmE2NFx1NmE1MFx1NmE0Zlx1NmE1NFx1NmE2Zlx1NmE2OVx1NmE2MFx1NmEzY1x1NmE1ZVx1NmE1Nlx1NmE1NVx1NmE0ZFx1NmE0ZVx1''@;'; put 'put ''NmE0Nlx1NmI1NVx1NmI1NFx1NmI1Nlx1NmJhN1x1NmJhYVx1NmJhYlx1NmJjOFx1NmJjN1x1NmMwNFx1NmMwM1x1NmMwNlx1NmZhZFx1NmZjYlx1NmZhM1x1NmZjN1x1NmZiY1x1NmZjZVx1NmZjOFx1NmY1ZVx1NmZjNFx1NmZiZFx1NmY5ZVx1NmZjYVx1NmZhOFx1NzAwNFx1NmZhNVx1NmZh''@;'; put 'put ''ZVx1NmZiYVx1NmZhY1x1NmZhYVx1NmZjZlx1NmZiZlx1NmZiOFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzM10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjMzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzM11bcF1dPTU5NjQ4K3AsYls1OTY0OCtwXT1fWzIzM11bcF0pO2ZvcihfWzIz''@;'; put 'put ''NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZhMlx1NmZjOVx1NmZhYlx1NmZjZFx1NmZhZlx1NmZiMlx1NmZiMFx1NzFjNVx1NzFjMlx1NzFiZlx1NzFiOFx1NzFkNlx1NzFjMFx1NzFjMVx1NzFjYlx1NzFkNFx1NzFjYVx1NzFj''@;'; put 'put ''N1x1NzFjZlx1NzFiZFx1NzFkOFx1NzFiY1x1NzFjNlx1NzFkYVx1NzFkYlx1NzI5ZFx1NzI5ZVx1NzM2OVx1NzM2Nlx1NzM2N1x1NzM2Y1x1NzM2NVx1NzM2Ylx1NzM2YVx1NzQ3Zlx1NzQ5YVx1NzRhMFx1NzQ5NFx1NzQ5Mlx1NzQ5NVx1NzRhMVx1NzUwYlx1NzU4MFx1NzYyZlx1NzYyZFx1''@;'; put 'put ''NzYzMVx1NzYzZFx1NzYzM1x1NzYzY1x1NzYzNVx1NzYzMlx1NzYzMFx1NzZiYlx1NzZlNlx1Nzc5YVx1Nzc5ZFx1NzdhMVx1Nzc5Y1x1Nzc5Ylx1NzdhMlx1NzdhM1x1Nzc5NVx1Nzc5OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzc5N1x1NzhkZFx1NzhlOVx1''@;'; put 'put ''NzhlNVx1NzhlYVx1NzhkZVx1NzhlM1x1NzhkYlx1NzhlMVx1NzhlMlx1NzhlZFx1NzhkZlx1NzhlMFx1NzlhNFx1N2E0NFx1N2E0OFx1N2E0N1x1N2FiNlx1N2FiOFx1N2FiNVx1N2FiMVx1N2FiN1x1N2JkZVx1N2JlM1x1N2JlN1x1N2JkZFx1N2JkNVx1N2JlNVx1N2JkYVx1N2JlOFx1N2Jm''@;'; put 'put ''OVx1N2JkNFx1N2JlYVx1N2JlMlx1N2JkY1x1N2JlYlx1N2JkOFx1N2JkZlx1N2NkMlx1N2NkNFx1N2NkN1x1N2NkMFx1N2NkMVx1N2UxMlx1N2UyMVx1N2UxN1x1N2UwY1x1N2UxZlx1N2UyMFx1N2UxM1x1N2UwZVx1N2UxY1x1N2UxNVx1N2UxYVx1N2UyMlx1N2UwYlx1N2UwZlx1N2UxNlx1''@;'; put 'put ''N2UwZFx1N2UxNFx1N2UyNVx1N2UyNFx1N2Y0M1x1N2Y3Ylx1N2Y3Y1x1N2Y3YVx1N2ZiMVx1N2ZlZlx1ODAyYVx1ODAyOVx1ODA2Y1x1ODFiMVx1ODFhNlx1ODFhZVx1ODFiOVx1ODFiNVx1ODFhYlx1ODFiMFx1ODFhY1x1ODFiNFx1ODFiMlx1ODFiN1x1ODFhN1x1ODFmMlx1ODI1NVx1ODI1''@;'; put 'put ''Nlx1ODI1N1x1ODU1Nlx1ODU0NVx1ODU2Ylx1ODU0ZFx1ODU1M1x1ODU2MVx1ODU1OFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzNF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM0XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzNF1bcF1dPTU5OTA0K3AsYls1OTkwNCtwXT1fWzIzNF1b''@;'; put 'put ''cF0pO2ZvcihfWzIzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU0MFx1ODU0Nlx1ODU2NFx1ODU0MVx1ODU2Mlx1ODU0NFx1ODU1MVx1ODU0N1x1ODU2M1x1ODUzZVx1ODU1Ylx1ODU3MVx1ODU0ZVx1ODU2ZVx1ODU3NVx1ODU1''@;'; put 'put ''NVx1ODU2N1x1ODU2MFx1ODU4Y1x1ODU2Nlx1ODU1ZFx1ODU1NFx1ODU2NVx1ODU2Y1x1ODY2M1x1ODY2NVx1ODY2NFx1ODc5Ylx1ODc4Zlx1ODc5N1x1ODc5M1x1ODc5Mlx1ODc4OFx1ODc4MVx1ODc5Nlx1ODc5OFx1ODc3OVx1ODc4N1x1ODdhM1x1ODc4NVx1ODc5MFx1ODc5MVx1ODc5ZFx1''@;'; put 'put ''ODc4NFx1ODc5NFx1ODc5Y1x1ODc5YVx1ODc4OVx1ODkxZVx1ODkyNlx1ODkzMFx1ODkyZFx1ODkyZVx1ODkyN1x1ODkzMVx1ODkyMlx1ODkyOVx1ODkyM1x1ODkyZlx1ODkyY1x1ODkxZlx1ODlmMVx1OGFlMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGFlMlx1''@;'; put 'put ''OGFmMlx1OGFmNFx1OGFmNVx1OGFkZFx1OGIxNFx1OGFlNFx1OGFkZlx1OGFmMFx1OGFjOFx1OGFkZVx1OGFlMVx1OGFlOFx1OGFmZlx1OGFlZlx1OGFmYlx1OGM5MVx1OGM5Mlx1OGM5MFx1OGNmNVx1OGNlZVx1OGNmMVx1OGNmMFx1OGNmM1x1OGQ2Y1x1OGQ2ZVx1OGRhNVx1OGRhN1x1OGUz''@;'; put 'put ''M1x1OGUzZVx1OGUzOFx1OGU0MFx1OGU0NVx1OGUzNlx1OGUzY1x1OGUzZFx1OGU0MVx1OGUzMFx1OGUzZlx1OGViZFx1OGYzNlx1OGYyZVx1OGYzNVx1OGYzMlx1OGYzOVx1OGYzN1x1OGYzNFx1OTA3Nlx1OTA3OVx1OTA3Ylx1OTA4Nlx1OTBmYVx1OTEzM1x1OTEzNVx1OTEzNlx1OTE5M1x1''@;'; put 'put ''OTE5MFx1OTE5MVx1OTE4ZFx1OTE4Zlx1OTMyN1x1OTMxZVx1OTMwOFx1OTMxZlx1OTMwNlx1OTMwZlx1OTM3YVx1OTMzOFx1OTMzY1x1OTMxYlx1OTMyM1x1OTMxMlx1OTMwMVx1OTM0Nlx1OTMyZFx1OTMwZVx1OTMwZFx1OTJjYlx1OTMxZFx1OTJmYVx1OTMyNVx1OTMxM1x1OTJmOVx1OTJm''@;'; put 'put ''N1x1OTMzNFx1OTMwMlx1OTMyNFx1OTJmZlx1OTMyOVx1OTMzOVx1OTMzNVx1OTMyYVx1OTMxNFx1OTMwY1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzNV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM1XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzNV1bcF1dPTYwMTYwK3AsYls2MDE2''@;'; put 'put ''MCtwXT1fWzIzNV1bcF0pO2ZvcihfWzIzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTMwYlx1OTJmZVx1OTMwOVx1OTMwMFx1OTJmYlx1OTMxNlx1OTViY1x1OTVjZFx1OTViZVx1OTViOVx1OTViYVx1OTViNlx1OTViZlx1OTVi''@;'; put 'put ''NVx1OTViZFx1OTZhOVx1OTZkNFx1OTcwYlx1OTcxMlx1OTcxMFx1OTc5OVx1OTc5N1x1OTc5NFx1OTdmMFx1OTdmOFx1OTgzNVx1OTgyZlx1OTgzMlx1OTkyNFx1OTkxZlx1OTkyN1x1OTkyOVx1OTk5ZVx1OTllZVx1OTllY1x1OTllNVx1OTllNFx1OTlmMFx1OTllM1x1OTllYVx1OTllOVx1''@;'; put 'put ''OTllN1x1OWFiOVx1OWFiZlx1OWFiNFx1OWFiYlx1OWFmNlx1OWFmYVx1OWFmOVx1OWFmN1x1OWIzM1x1OWI4MFx1OWI4NVx1OWI4N1x1OWI3Y1x1OWI3ZVx1OWI3Ylx1OWI4Mlx1OWI5M1x1OWI5Mlx1OWI5MFx1OWI3YVx1OWI5NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1OWI3ZFx1OWI4OFx1OWQyNVx1OWQxN1x1OWQyMFx1OWQxZVx1OWQxNFx1OWQyOVx1OWQxZFx1OWQxOFx1OWQyMlx1OWQxMFx1OWQxOVx1OWQxZlx1OWU4OFx1OWU4Nlx1OWU4N1x1OWVhZVx1OWVhZFx1OWVkNVx1OWVkNlx1OWVmYVx1OWYxMlx1OWYzZFx1NTEyNlx1NTEyNVx1NTEy''@;'; put 'put ''Mlx1NTEyNFx1NTEyMFx1NTEyOVx1NTJmNFx1NTY5M1x1NTY4Y1x1NTY4ZFx1NTY4Nlx1NTY4NFx1NTY4M1x1NTY3ZVx1NTY4Mlx1NTY3Zlx1NTY4MVx1NThkNlx1NThkNFx1NThjZlx1NThkMlx1NWIyZFx1NWIyNVx1NWIzMlx1NWIyM1x1NWIyY1x1NWIyN1x1NWIyNlx1NWIyZlx1NWIyZVx1''@;'; put 'put ''NWI3Ylx1NWJmMVx1NWJmMlx1NWRiN1x1NWU2Y1x1NWU2YVx1NWZiZVx1NWZiYlx1NjFjM1x1NjFiNVx1NjFiY1x1NjFlN1x1NjFlMFx1NjFlNVx1NjFlNFx1NjFlOFx1NjFkZVx1NjRlZlx1NjRlOVx1NjRlM1x1NjRlYlx1NjRlNFx1NjRlOFx1NjU4MVx1NjU4MFx1NjViNlx1NjVkYVx1NjZk''@;'; put 'put ''Mlx1NmE4ZFx1NmE5Nlx1NmE4MVx1NmFhNVx1NmE4OVx1NmE5Zlx1NmE5Ylx1NmFhMVx1NmE5ZVx1NmE4N1x1NmE5M1x1NmE4ZVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzNl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM2XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzNl1bcF1dPTYw''@;'; put 'put ''NDE2K3AsYls2MDQxNitwXT1fWzIzNl1bcF0pO2ZvcihfWzIzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmE5NVx1NmE4M1x1NmFhOFx1NmFhNFx1NmE5MVx1NmE3Zlx1NmFhNlx1NmE5YVx1NmE4NVx1NmE4Y1x1NmE5Mlx1NmI1''@;'; put 'put ''Ylx1NmJhZFx1NmMwOVx1NmZjY1x1NmZhOVx1NmZmNFx1NmZkNFx1NmZlM1x1NmZkY1x1NmZlZFx1NmZlN1x1NmZlNlx1NmZkZVx1NmZmMlx1NmZkZFx1NmZlMlx1NmZlOFx1NzFlMVx1NzFmMVx1NzFlOFx1NzFmMlx1NzFlNFx1NzFmMFx1NzFlMlx1NzM3M1x1NzM2ZVx1NzM2Zlx1NzQ5N1x1''@;'; put 'put ''NzRiMlx1NzRhYlx1NzQ5MFx1NzRhYVx1NzRhZFx1NzRiMVx1NzRhNVx1NzRhZlx1NzUxMFx1NzUxMVx1NzUxMlx1NzUwZlx1NzU4NFx1NzY0M1x1NzY0OFx1NzY0OVx1NzY0N1x1NzZhNFx1NzZlOVx1NzdiNVx1NzdhYlx1NzdiMlx1NzdiN1x1NzdiNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdiNFx1NzdiMVx1NzdhOFx1NzdmMFx1NzhmM1x1NzhmZFx1NzkwMlx1NzhmYlx1NzhmY1x1NzhmMlx1NzkwNVx1NzhmOVx1NzhmZVx1NzkwNFx1NzlhYlx1NzlhOFx1N2E1Y1x1N2E1Ylx1N2E1Nlx1N2E1OFx1N2E1NFx1N2E1YVx1N2FiZVx1N2FjMFx1N2Fj''@;'; put 'put ''MVx1N2MwNVx1N2MwZlx1N2JmMlx1N2MwMFx1N2JmZlx1N2JmYlx1N2MwZVx1N2JmNFx1N2MwYlx1N2JmM1x1N2MwMlx1N2MwOVx1N2MwM1x1N2MwMVx1N2JmOFx1N2JmZFx1N2MwNlx1N2JmMFx1N2JmMVx1N2MxMFx1N2MwYVx1N2NlOFx1N2UyZFx1N2UzY1x1N2U0Mlx1N2UzM1x1OTg0OFx1''@;'; put 'put ''N2UzOFx1N2UyYVx1N2U0OVx1N2U0MFx1N2U0N1x1N2UyOVx1N2U0Y1x1N2UzMFx1N2UzYlx1N2UzNlx1N2U0NFx1N2UzYVx1N2Y0NVx1N2Y3Zlx1N2Y3ZVx1N2Y3ZFx1N2ZmNFx1N2ZmMlx1ODAyY1x1ODFiYlx1ODFjNFx1ODFjY1x1ODFjYVx1ODFjNVx1ODFjN1x1ODFiY1x1ODFlOVx1ODI1''@;'; put 'put ''Ylx1ODI1YVx1ODI1Y1x1ODU4M1x1ODU4MFx1ODU4Zlx1ODVhN1x1ODU5NVx1ODVhMFx1ODU4Ylx1ODVhM1x1ODU3Ylx1ODVhNFx1ODU5YVx1ODU5ZVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzN10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtf''@;'; put 'put ''WzIzN11bcF1dPTYwNjcyK3AsYls2MDY3MitwXT1fWzIzN11bcF0pO2ZvcihfWzIzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU3N1x1ODU3Y1x1ODU4OVx1ODVhMVx1ODU3YVx1ODU3OFx1ODU1N1x1ODU4ZVx1ODU5Nlx1ODU4''@;'; put 'put ''Nlx1ODU4ZFx1ODU5OVx1ODU5ZFx1ODU4MVx1ODVhMlx1ODU4Mlx1ODU4OFx1ODU4NVx1ODU3OVx1ODU3Nlx1ODU5OFx1ODU5MFx1ODU5Zlx1ODY2OFx1ODdiZVx1ODdhYVx1ODdhZFx1ODdjNVx1ODdiMFx1ODdhY1x1ODdiOVx1ODdiNVx1ODdiY1x1ODdhZVx1ODdjOVx1ODdjM1x1ODdjMlx1''@;'; put 'put ''ODdjY1x1ODdiN1x1ODdhZlx1ODdjNFx1ODdjYVx1ODdiNFx1ODdiNlx1ODdiZlx1ODdiOFx1ODdiZFx1ODdkZVx1ODdiMlx1ODkzNVx1ODkzM1x1ODkzY1x1ODkzZVx1ODk0MVx1ODk1Mlx1ODkzN1x1ODk0Mlx1ODlhZFx1ODlhZlx1ODlhZVx1ODlmMlx1ODlmM1x1OGIxZVx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGIxOFx1OGIxNlx1OGIxMVx1OGIwNVx1OGIwYlx1OGIyMlx1OGIwZlx1OGIxMlx1OGIxNVx1OGIwN1x1OGIwZFx1OGIwOFx1OGIwNlx1OGIxY1x1OGIxM1x1OGIxYVx1OGM0Zlx1OGM3MFx1OGM3Mlx1OGM3MVx1OGM2Zlx1OGM5NVx1OGM5''@;'; put 'put ''NFx1OGNmOVx1OGQ2Zlx1OGU0ZVx1OGU0ZFx1OGU1M1x1OGU1MFx1OGU0Y1x1OGU0N1x1OGY0M1x1OGY0MFx1OTA4NVx1OTA3ZVx1OTEzOFx1OTE5YVx1OTFhMlx1OTE5Ylx1OTE5OVx1OTE5Zlx1OTFhMVx1OTE5ZFx1OTFhMFx1OTNhMVx1OTM4M1x1OTNhZlx1OTM2NFx1OTM1Nlx1OTM0N1x1''@;'; put 'put ''OTM3Y1x1OTM1OFx1OTM1Y1x1OTM3Nlx1OTM0OVx1OTM1MFx1OTM1MVx1OTM2MFx1OTM2ZFx1OTM4Zlx1OTM0Y1x1OTM2YVx1OTM3OVx1OTM1N1x1OTM1NVx1OTM1Mlx1OTM0Zlx1OTM3MVx1OTM3N1x1OTM3Ylx1OTM2MVx1OTM1ZVx1OTM2M1x1OTM2N1x1OTM4MFx1OTM0ZVx1OTM1OVx1OTVj''@;'; put 'put ''N1x1OTVjMFx1OTVjOVx1OTVjM1x1OTVjNVx1OTViN1x1OTZhZVx1OTZiMFx1OTZhY1x1OTcyMFx1OTcxZlx1OTcxOFx1OTcxZFx1OTcxOVx1OTc5YVx1OTdhMVx1OTc5Y1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzOF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM4XVtwXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoSVtfWzIzOF1bcF1dPTYwOTI4K3AsYls2MDkyOCtwXT1fWzIzOF1bcF0pO2ZvcihfWzIzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTc5ZVx1OTc5ZFx1OTdkNVx1OTdkNFx1OTdmMVx1OTg0MVx1OTg0NFx1OTg0''@;'; put 'put ''YVx1OTg0OVx1OTg0NVx1OTg0M1x1OTkyNVx1OTkyYlx1OTkyY1x1OTkyYVx1OTkzM1x1OTkzMlx1OTkyZlx1OTkyZFx1OTkzMVx1OTkzMFx1OTk5OFx1OTlhM1x1OTlhMVx1OWEwMlx1OTlmYVx1OTlmNFx1OTlmN1x1OTlmOVx1OTlmOFx1OTlmNlx1OTlmYlx1OTlmZFx1OTlmZVx1OTlmY1x1''@;'; put 'put ''OWEwM1x1OWFiZVx1OWFmZVx1OWFmZFx1OWIwMVx1OWFmY1x1OWI0OFx1OWI5YVx1OWJhOFx1OWI5ZVx1OWI5Ylx1OWJhNlx1OWJhMVx1OWJhNVx1OWJhNFx1OWI4Nlx1OWJhMlx1OWJhMFx1OWJhZlx1OWQzM1x1OWQ0MVx1OWQ2N1x1OWQzNlx1OWQyZVx1OWQyZlx1OWQzMVx1OWQzOFx1OWQz''@;'; put 'put ''MFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWQ0NVx1OWQ0Mlx1OWQ0M1x1OWQzZVx1OWQzN1x1OWQ0MFx1OWQzZFx1N2ZmNVx1OWQyZFx1OWU4YVx1OWU4OVx1OWU4ZFx1OWViMFx1OWVjOFx1OWVkYVx1OWVmYlx1OWVmZlx1OWYyNFx1OWYyM1x1OWYyMlx1OWY1''@;'; put 'put ''NFx1OWZhMFx1NTEzMVx1NTEyZFx1NTEyZVx1NTY5OFx1NTY5Y1x1NTY5N1x1NTY5YVx1NTY5ZFx1NTY5OVx1NTk3MFx1NWIzY1x1NWM2OVx1NWM2YVx1NWRjMFx1NWU2ZFx1NWU2ZVx1NjFkOFx1NjFkZlx1NjFlZFx1NjFlZVx1NjFmMVx1NjFlYVx1NjFmMFx1NjFlYlx1NjFkNlx1NjFlOVx1''@;'; put 'put ''NjRmZlx1NjUwNFx1NjRmZFx1NjRmOFx1NjUwMVx1NjUwM1x1NjRmY1x1NjU5NFx1NjVkYlx1NjZkYVx1NjZkYlx1NjZkOFx1NmFjNVx1NmFiOVx1NmFiZFx1NmFlMVx1NmFjNlx1NmFiYVx1NmFiNlx1NmFiN1x1NmFjN1x1NmFiNFx1NmFhZFx1NmI1ZVx1NmJjOVx1NmMwYlx1NzAwN1x1NzAw''@;'; put 'put ''Y1x1NzAwZFx1NzAwMVx1NzAwNVx1NzAxNFx1NzAwZVx1NmZmZlx1NzAwMFx1NmZmYlx1NzAyNlx1NmZmY1x1NmZmN1x1NzAwYVx1NzIwMVx1NzFmZlx1NzFmOVx1NzIwM1x1NzFmZFx1NzM3Nlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzOV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM5''@;'; put 'put ''XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzOV1bcF1dPTYxMTg0K3AsYls2MTE4NCtwXT1fWzIzOV1bcF0pO2ZvcihfWzI0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzRiOFx1NzRjMFx1NzRiNVx1NzRjMVx1NzRiZVx1NzRi''@;'; put 'put ''Nlx1NzRiYlx1NzRjMlx1NzUxNFx1NzUxM1x1NzY1Y1x1NzY2NFx1NzY1OVx1NzY1MFx1NzY1M1x1NzY1N1x1NzY1YVx1NzZhNlx1NzZiZFx1NzZlY1x1NzdjMlx1NzdiYVx1NzhmZlx1NzkwY1x1NzkxM1x1NzkxNFx1NzkwOVx1NzkxMFx1NzkxMlx1NzkxMVx1NzlhZFx1NzlhY1x1N2E1Zlx1''@;'; put 'put ''N2MxY1x1N2MyOVx1N2MxOVx1N2MyMFx1N2MxZlx1N2MyZFx1N2MxZFx1N2MyNlx1N2MyOFx1N2MyMlx1N2MyNVx1N2MzMFx1N2U1Y1x1N2U1MFx1N2U1Nlx1N2U2M1x1N2U1OFx1N2U2Mlx1N2U1Zlx1N2U1MVx1N2U2MFx1N2U1N1x1N2U1M1x1N2ZiNVx1N2ZiM1x1N2ZmN1x1N2ZmOFx1ODA3''@;'; put 'put ''NVx1ODFkMVx1ODFkMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODFkMFx1ODI1Zlx1ODI1ZVx1ODViNFx1ODVjNlx1ODVjMFx1ODVjM1x1ODVjMlx1ODViM1x1ODViNVx1ODViZFx1ODVjN1x1ODVjNFx1ODViZlx1ODVjYlx1ODVjZVx1ODVjOFx1ODVjNVx1ODVi''@;'; put 'put ''MVx1ODViNlx1ODVkMlx1ODYyNFx1ODViOFx1ODViN1x1ODViZVx1ODY2OVx1ODdlN1x1ODdlNlx1ODdlMlx1ODdkYlx1ODdlYlx1ODdlYVx1ODdlNVx1ODdkZlx1ODdmM1x1ODdlNFx1ODdkNFx1ODdkY1x1ODdkM1x1ODdlZFx1ODdkOFx1ODdlM1x1ODdhNFx1ODdkN1x1ODdkOVx1ODgwMVx1''@;'; put 'put ''ODdmNFx1ODdlOFx1ODdkZFx1ODk1M1x1ODk0Ylx1ODk0Zlx1ODk0Y1x1ODk0Nlx1ODk1MFx1ODk1MVx1ODk0OVx1OGIyYVx1OGIyN1x1OGIyM1x1OGIzM1x1OGIzMFx1OGIzNVx1OGI0N1x1OGIyZlx1OGIzY1x1OGIzZVx1OGIzMVx1OGIyNVx1OGIzN1x1OGIyNlx1OGIzNlx1OGIyZVx1OGIy''@;'; put 'put ''NFx1OGIzYlx1OGIzZFx1OGIzYVx1OGM0Mlx1OGM3NVx1OGM5OVx1OGM5OFx1OGM5N1x1OGNmZVx1OGQwNFx1OGQwMlx1OGQwMFx1OGU1Y1x1OGU2Mlx1OGU2MFx1OGU1N1x1OGU1Nlx1OGU1ZVx1OGU2NVx1OGU2N1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0MF0ubGVuZ3RoOysrcCk2''@;'; put 'put ''NTUzMyE9PV9bMjQwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0MF1bcF1dPTYxNDQwK3AsYls2MTQ0MCtwXT1fWzI0MF1bcF0pO2ZvcihfWzI0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGU1Ylx1OGU1YVx1OGU2MVx1OGU1''@;'; put 'put ''ZFx1OGU2OVx1OGU1NFx1OGY0Nlx1OGY0N1x1OGY0OFx1OGY0Ylx1OTEyOFx1OTEzYVx1OTEzYlx1OTEzZVx1OTFhOFx1OTFhNVx1OTFhN1x1OTFhZlx1OTFhYVx1OTNiNVx1OTM4Y1x1OTM5Mlx1OTNiN1x1OTM5Ylx1OTM5ZFx1OTM4OVx1OTNhN1x1OTM4ZVx1OTNhYVx1OTM5ZVx1OTNhNlx1''@;'; put 'put ''OTM5NVx1OTM4OFx1OTM5OVx1OTM5Zlx1OTM4ZFx1OTNiMVx1OTM5MVx1OTNiMlx1OTNhNFx1OTNhOFx1OTNiNFx1OTNhM1x1OTNhNVx1OTVkMlx1OTVkM1x1OTVkMVx1OTZiM1x1OTZkN1x1OTZkYVx1NWRjMlx1OTZkZlx1OTZkOFx1OTZkZFx1OTcyM1x1OTcyMlx1OTcyNVx1OTdhY1x1OTdh''@;'; put 'put ''ZVx1OTdhOFx1OTdhYlx1OTdhNFx1OTdhYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTdhMlx1OTdhNVx1OTdkN1x1OTdkOVx1OTdkNlx1OTdkOFx1OTdmYVx1OTg1MFx1OTg1MVx1OTg1Mlx1OThiOFx1OTk0MVx1OTkzY1x1OTkzYVx1OWEwZlx1OWEwYlx1OWEw''@;'; put 'put ''OVx1OWEwZFx1OWEwNFx1OWExMVx1OWEwYVx1OWEwNVx1OWEwN1x1OWEwNlx1OWFjMFx1OWFkY1x1OWIwOFx1OWIwNFx1OWIwNVx1OWIyOVx1OWIzNVx1OWI0YVx1OWI0Y1x1OWI0Ylx1OWJjN1x1OWJjNlx1OWJjM1x1OWJiZlx1OWJjMVx1OWJiNVx1OWJiOFx1OWJkM1x1OWJiNlx1OWJjNFx1''@;'; put 'put ''OWJiOVx1OWJiZFx1OWQ1Y1x1OWQ1M1x1OWQ0Zlx1OWQ0YVx1OWQ1Ylx1OWQ0Ylx1OWQ1OVx1OWQ1Nlx1OWQ0Y1x1OWQ1N1x1OWQ1Mlx1OWQ1NFx1OWQ1Zlx1OWQ1OFx1OWQ1YVx1OWU4ZVx1OWU4Y1x1OWVkZlx1OWYwMVx1OWYwMFx1OWYxNlx1OWYyNVx1OWYyYlx1OWYyYVx1OWYyOVx1OWYy''@;'; put 'put ''OFx1OWY0Y1x1OWY1NVx1NTEzNFx1NTEzNVx1NTI5Nlx1NTJmN1x1NTNiNFx1NTZhYlx1NTZhZFx1NTZhNlx1NTZhN1x1NTZhYVx1NTZhY1x1NThkYVx1NThkZFx1NThkYlx1NTkxMlx1NWIzZFx1NWIzZVx1NWIzZlx1NWRjM1x1NWU3MFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0MV0u''@;'; put 'put ''bGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQxXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0MV1bcF1dPTYxNjk2K3AsYls2MTY5NitwXT1fWzI0MV1bcF0pO2ZvcihfWzI0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWZiZlx1NjFm''@;'; put 'put ''Ylx1NjUwN1x1NjUxMFx1NjUwZFx1NjUwOVx1NjUwY1x1NjUwZVx1NjU4NFx1NjVkZVx1NjVkZFx1NjZkZVx1NmFlN1x1NmFlMFx1NmFjY1x1NmFkMVx1NmFkOVx1NmFjYlx1NmFkZlx1NmFkY1x1NmFkMFx1NmFlYlx1NmFjZlx1NmFjZFx1NmFkZVx1NmI2MFx1NmJiMFx1NmMwY1x1NzAxOVx1''@;'; put 'put ''NzAyN1x1NzAyMFx1NzAxNlx1NzAyYlx1NzAyMVx1NzAyMlx1NzAyM1x1NzAyOVx1NzAxN1x1NzAyNFx1NzAxY1x1NzAyYVx1NzIwY1x1NzIwYVx1NzIwN1x1NzIwMlx1NzIwNVx1NzJhNVx1NzJhNlx1NzJhNFx1NzJhM1x1NzJhMVx1NzRjYlx1NzRjNVx1NzRiN1x1NzRjM1x1NzUxNlx1NzY2''@;'; put 'put ''MFx1NzdjOVx1NzdjYVx1NzdjNFx1NzdmMVx1NzkxZFx1NzkxYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzkyMVx1NzkxY1x1NzkxN1x1NzkxZVx1NzliMFx1N2E2N1x1N2E2OFx1N2MzM1x1N2MzY1x1N2MzOVx1N2MyY1x1N2MzYlx1N2NlY1x1N2NlYVx1N2U3''@;'; put 'put ''Nlx1N2U3NVx1N2U3OFx1N2U3MFx1N2U3N1x1N2U2Zlx1N2U3YVx1N2U3Mlx1N2U3NFx1N2U2OFx1N2Y0Ylx1N2Y0YVx1N2Y4M1x1N2Y4Nlx1N2ZiN1x1N2ZmZFx1N2ZmZVx1ODA3OFx1ODFkN1x1ODFkNVx1ODI2NFx1ODI2MVx1ODI2M1x1ODVlYlx1ODVmMVx1ODVlZFx1ODVkOVx1ODVlMVx1''@;'; put 'put ''ODVlOFx1ODVkYVx1ODVkN1x1ODVlY1x1ODVmMlx1ODVmOFx1ODVkOFx1ODVkZlx1ODVlM1x1ODVkY1x1ODVkMVx1ODVmMFx1ODVlNlx1ODVlZlx1ODVkZVx1ODVlMlx1ODgwMFx1ODdmYVx1ODgwM1x1ODdmNlx1ODdmN1x1ODgwOVx1ODgwY1x1ODgwYlx1ODgwNlx1ODdmY1x1ODgwOFx1ODdm''@;'; put 'put ''Zlx1ODgwYVx1ODgwMlx1ODk2Mlx1ODk1YVx1ODk1Ylx1ODk1N1x1ODk2MVx1ODk1Y1x1ODk1OFx1ODk1ZFx1ODk1OVx1ODk4OFx1ODliN1x1ODliNlx1ODlmNlx1OGI1MFx1OGI0OFx1OGI0YVx1OGI0MFx1OGI1M1x1OGI1Nlx1OGI1NFx1OGI0Ylx1OGI1NVx1ZmZmZCIuc3BsaXQoIiIpLHA9''@;'; put 'put ''MDtwIT1fWzI0Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0Ml1bcF1dPTYxOTUyK3AsYls2MTk1MitwXT1fWzI0Ml1bcF0pO2ZvcihfWzI0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1OGI1MVx1OGI0Mlx1OGI1Mlx1OGI1N1x1OGM0M1x1OGM3N1x1OGM3Nlx1OGM5YVx1OGQwNlx1OGQwN1x1OGQwOVx1OGRhY1x1OGRhYVx1OGRhZFx1OGRhYlx1OGU2ZFx1OGU3OFx1OGU3M1x1OGU2YVx1OGU2Zlx1OGU3Ylx1OGVjMlx1OGY1Mlx1OGY1MVx1OGY0Zlx1OGY1MFx1OGY1M1x1''@;'; put 'put ''OGZiNFx1OTE0MFx1OTEzZlx1OTFiMFx1OTFhZFx1OTNkZVx1OTNjN1x1OTNjZlx1OTNjMlx1OTNkYVx1OTNkMFx1OTNmOVx1OTNlY1x1OTNjY1x1OTNkOVx1OTNhOVx1OTNlNlx1OTNjYVx1OTNkNFx1OTNlZVx1OTNlM1x1OTNkNVx1OTNjNFx1OTNjZVx1OTNjMFx1OTNkMlx1OTNlN1x1OTU3''@;'; put 'put ''ZFx1OTVkYVx1OTVkYlx1OTZlMVx1OTcyOVx1OTcyYlx1OTcyY1x1OTcyOFx1OTcyNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTdiM1x1OTdiN1x1OTdiNlx1OTdkZFx1OTdkZVx1OTdkZlx1OTg1Y1x1OTg1OVx1OTg1ZFx1OTg1N1x1OThiZlx1OThiZFx1OThi''@;'; put 'put ''Ylx1OThiZVx1OTk0OFx1OTk0N1x1OTk0M1x1OTlhNlx1OTlhN1x1OWExYVx1OWExNVx1OWEyNVx1OWExZFx1OWEyNFx1OWExYlx1OWEyMlx1OWEyMFx1OWEyN1x1OWEyM1x1OWExZVx1OWExY1x1OWExNFx1OWFjMlx1OWIwYlx1OWIwYVx1OWIwZVx1OWIwY1x1OWIzN1x1OWJlYVx1OWJlYlx1''@;'; put 'put ''OWJlMFx1OWJkZVx1OWJlNFx1OWJlNlx1OWJlMlx1OWJmMFx1OWJkNFx1OWJkN1x1OWJlY1x1OWJkY1x1OWJkOVx1OWJlNVx1OWJkNVx1OWJlMVx1OWJkYVx1OWQ3N1x1OWQ4MVx1OWQ4YVx1OWQ4NFx1OWQ4OFx1OWQ3MVx1OWQ4MFx1OWQ3OFx1OWQ4Nlx1OWQ4Ylx1OWQ4Y1x1OWQ3ZFx1OWQ2''@;'; put 'put ''Ylx1OWQ3NFx1OWQ3NVx1OWQ3MFx1OWQ2OVx1OWQ4NVx1OWQ3M1x1OWQ3Ylx1OWQ4Mlx1OWQ2Zlx1OWQ3OVx1OWQ3Zlx1OWQ4N1x1OWQ2OFx1OWU5NFx1OWU5MVx1OWVjMFx1OWVmY1x1OWYyZFx1OWY0MFx1OWY0MVx1OWY0ZFx1OWY1Nlx1OWY1N1x1OWY1OFx1NTMzN1x1NTZiMlx1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLHA9MDtwIT1fWzI0M10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0M11bcF1dPTYyMjA4K3AsYls2MjIwOCtwXT1fWzI0M11bcF0pO2ZvcihfWzI0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1NTZiNVx1NTZiM1x1NThlM1x1NWI0NVx1NWRjNlx1NWRjN1x1NWVlZVx1NWVlZlx1NWZjMFx1NWZjMVx1NjFmOVx1NjUxN1x1NjUxNlx1NjUxNVx1NjUxM1x1NjVkZlx1NjZlOFx1NjZlM1x1NjZlNFx1NmFmM1x1NmFmMFx1NmFlYVx1NmFlOFx1NmFmOVx1NmFmMVx1''@;'; put 'put ''NmFlZVx1NmFlZlx1NzAzY1x1NzAzNVx1NzAyZlx1NzAzN1x1NzAzNFx1NzAzMVx1NzA0Mlx1NzAzOFx1NzAzZlx1NzAzYVx1NzAzOVx1NzA0MFx1NzAzYlx1NzAzM1x1NzA0MVx1NzIxM1x1NzIxNFx1NzJhOFx1NzM3ZFx1NzM3Y1x1NzRiYVx1NzZhYlx1NzZhYVx1NzZiZVx1NzZlZFx1Nzdj''@;'; put 'put ''Y1x1NzdjZVx1NzdjZlx1NzdjZFx1NzdmMlx1NzkyNVx1NzkyM1x1NzkyN1x1NzkyOFx1NzkyNFx1NzkyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzliMlx1N2E2ZVx1N2E2Y1x1N2E2ZFx1N2FmN1x1N2M0OVx1N2M0OFx1N2M0YVx1N2M0N1x1N2M0NVx1N2Nl''@;'; put 'put ''ZVx1N2U3Ylx1N2U3ZVx1N2U4MVx1N2U4MFx1N2ZiYVx1N2ZmZlx1ODA3OVx1ODFkYlx1ODFkOVx1ODIwYlx1ODI2OFx1ODI2OVx1ODYyMlx1ODVmZlx1ODYwMVx1ODVmZVx1ODYxYlx1ODYwMFx1ODVmNlx1ODYwNFx1ODYwOVx1ODYwNVx1ODYwY1x1ODVmZFx1ODgxOVx1ODgxMFx1ODgxMVx1''@;'; put 'put ''ODgxN1x1ODgxM1x1ODgxNlx1ODk2M1x1ODk2Nlx1ODliOVx1ODlmN1x1OGI2MFx1OGI2YVx1OGI1ZFx1OGI2OFx1OGI2M1x1OGI2NVx1OGI2N1x1OGI2ZFx1OGRhZVx1OGU4Nlx1OGU4OFx1OGU4NFx1OGY1OVx1OGY1Nlx1OGY1N1x1OGY1NVx1OGY1OFx1OGY1YVx1OTA4ZFx1OTE0M1x1OTE0''@;'; put 'put ''MVx1OTFiN1x1OTFiNVx1OTFiMlx1OTFiM1x1OTQwYlx1OTQxM1x1OTNmYlx1OTQyMFx1OTQwZlx1OTQxNFx1OTNmZVx1OTQxNVx1OTQxMFx1OTQyOFx1OTQxOVx1OTQwZFx1OTNmNVx1OTQwMFx1OTNmN1x1OTQwN1x1OTQwZVx1OTQxNlx1OTQxMlx1OTNmYVx1OTQwOVx1OTNmOFx1OTQwYVx1''@;'; put 'put ''OTNmZlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0NF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQ0XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0NF1bcF1dPTYyNDY0K3AsYls2MjQ2NCtwXT1fWzI0NF1bcF0pO2ZvcihfWzI0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTNmY1x1OTQwY1x1OTNmNlx1OTQxMVx1OTQwNlx1OTVkZVx1OTVlMFx1OTVkZlx1OTcyZVx1OTcyZlx1OTdiOVx1OTdiYlx1OTdmZFx1OTdmZVx1OTg2MFx1OTg2Mlx1OTg2M1x1OTg1Zlx1OThjMVx1OThjMlx1OTk1MFx1OTk0ZVx1OTk1OVx1''@;'; put 'put ''OTk0Y1x1OTk0Ylx1OTk1M1x1OWEzMlx1OWEzNFx1OWEzMVx1OWEyY1x1OWEyYVx1OWEzNlx1OWEyOVx1OWEyZVx1OWEzOFx1OWEyZFx1OWFjN1x1OWFjYVx1OWFjNlx1OWIxMFx1OWIxMlx1OWIxMVx1OWMwYlx1OWMwOFx1OWJmN1x1OWMwNVx1OWMxMlx1OWJmOFx1OWM0MFx1OWMwN1x1OWMw''@;'; put 'put ''ZVx1OWMwNlx1OWMxN1x1OWMxNFx1OWMwOVx1OWQ5Zlx1OWQ5OVx1OWRhNFx1OWQ5ZFx1OWQ5Mlx1OWQ5OFx1OWQ5MFx1OWQ5Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWRhMFx1OWQ5NFx1OWQ5Y1x1OWRhYVx1OWQ5N1x1OWRhMVx1OWQ5YVx1OWRhMlx1OWRh''@;'; put 'put ''OFx1OWQ5ZVx1OWRhM1x1OWRiZlx1OWRhOVx1OWQ5Nlx1OWRhNlx1OWRhN1x1OWU5OVx1OWU5Ylx1OWU5YVx1OWVlNVx1OWVlNFx1OWVlN1x1OWVlNlx1OWYzMFx1OWYyZVx1OWY1Ylx1OWY2MFx1OWY1ZVx1OWY1ZFx1OWY1OVx1OWY5MVx1NTEzYVx1NTEzOVx1NTI5OFx1NTI5N1x1NTZjM1x1''@;'; put 'put ''NTZiZFx1NTZiZVx1NWI0OFx1NWI0N1x1NWRjYlx1NWRjZlx1NWVmMVx1NjFmZFx1NjUxYlx1NmIwMlx1NmFmY1x1NmIwM1x1NmFmOFx1NmIwMFx1NzA0M1x1NzA0NFx1NzA0YVx1NzA0OFx1NzA0OVx1NzA0NVx1NzA0Nlx1NzIxZFx1NzIxYVx1NzIxOVx1NzM3ZVx1NzUxN1x1NzY2YVx1Nzdk''@;'; put 'put ''MFx1NzkyZFx1NzkzMVx1NzkyZlx1N2M1NFx1N2M1M1x1N2NmMlx1N2U4YVx1N2U4N1x1N2U4OFx1N2U4Ylx1N2U4Nlx1N2U4ZFx1N2Y0ZFx1N2ZiYlx1ODAzMFx1ODFkZFx1ODYxOFx1ODYyYVx1ODYyNlx1ODYxZlx1ODYyM1x1ODYxY1x1ODYxOVx1ODYyN1x1ODYyZVx1ODYyMVx1ODYyMFx1''@;'; put 'put ''ODYyOVx1ODYxZVx1ODYyNVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0NV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQ1XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0NV1bcF1dPTYyNzIwK3AsYls2MjcyMCtwXT1fWzI0NV1bcF0pO2ZvcihfWzI0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODgyOVx1ODgxZFx1ODgxYlx1ODgyMFx1ODgyNFx1ODgxY1x1ODgyYlx1ODg0YVx1ODk2ZFx1ODk2OVx1ODk2ZVx1ODk2Ylx1ODlmYVx1OGI3OVx1OGI3OFx1OGI0NVx1OGI3YVx1OGI3Ylx1OGQxMFx1OGQxNFx1OGRhZlx1''@;'; put 'put ''OGU4ZVx1OGU4Y1x1OGY1ZVx1OGY1Ylx1OGY1ZFx1OTE0Nlx1OTE0NFx1OTE0NVx1OTFiOVx1OTQzZlx1OTQzYlx1OTQzNlx1OTQyOVx1OTQzZFx1OTQzY1x1OTQzMFx1OTQzOVx1OTQyYVx1OTQzN1x1OTQyY1x1OTQ0MFx1OTQzMVx1OTVlNVx1OTVlNFx1OTVlM1x1OTczNVx1OTczYVx1OTdi''@;'; put 'put ''Zlx1OTdlMVx1OTg2NFx1OThjOVx1OThjNlx1OThjMFx1OTk1OFx1OTk1Nlx1OWEzOVx1OWEzZFx1OWE0Nlx1OWE0NFx1OWE0Mlx1OWE0MVx1OWEzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWEzZlx1OWFjZFx1OWIxNVx1OWIxN1x1OWIxOFx1OWIxNlx1OWIz''@;'; put 'put ''YVx1OWI1Mlx1OWMyYlx1OWMxZFx1OWMxY1x1OWMyY1x1OWMyM1x1OWMyOFx1OWMyOVx1OWMyNFx1OWMyMVx1OWRiN1x1OWRiNlx1OWRiY1x1OWRjMVx1OWRjN1x1OWRjYVx1OWRjZlx1OWRiZVx1OWRjNVx1OWRjM1x1OWRiYlx1OWRiNVx1OWRjZVx1OWRiOVx1OWRiYVx1OWRhY1x1OWRjOFx1''@;'; put 'put ''OWRiMVx1OWRhZFx1OWRjY1x1OWRiM1x1OWRjZFx1OWRiMlx1OWU3YVx1OWU5Y1x1OWVlYlx1OWVlZVx1OWVlZFx1OWYxYlx1OWYxOFx1OWYxYVx1OWYzMVx1OWY0ZVx1OWY2NVx1OWY2NFx1OWY5Mlx1NGViOVx1NTZjNlx1NTZjNVx1NTZjYlx1NTk3MVx1NWI0Ylx1NWI0Y1x1NWRkNVx1NWRk''@;'; put 'put ''MVx1NWVmMlx1NjUyMVx1NjUyMFx1NjUyNlx1NjUyMlx1NmIwYlx1NmIwOFx1NmIwOVx1NmMwZFx1NzA1NVx1NzA1Nlx1NzA1N1x1NzA1Mlx1NzIxZVx1NzIxZlx1NzJhOVx1NzM3Zlx1NzRkOFx1NzRkNVx1NzRkOVx1NzRkN1x1NzY2ZFx1NzZhZFx1NzkzNVx1NzliNFx1N2E3MFx1N2E3MVx1''@;'; put 'put ''N2M1N1x1N2M1Y1x1N2M1OVx1N2M1Ylx1N2M1YVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0Nl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQ2XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0Nl1bcF1dPTYyOTc2K3AsYls2Mjk3NitwXT1fWzI0Nl1bcF0pO2ZvcihfWzI0N109Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2NmNFx1N2NmMVx1N2U5MVx1N2Y0Zlx1N2Y4N1x1ODFkZVx1ODI2Ylx1ODYzNFx1ODYzNVx1ODYzM1x1ODYyY1x1ODYzMlx1ODYzNlx1ODgyY1x1ODgyOFx1ODgyNlx1ODgyYVx1ODgyNVx1ODk3MVx1''@;'; put 'put ''ODliZlx1ODliZVx1ODlmYlx1OGI3ZVx1OGI4NFx1OGI4Mlx1OGI4Nlx1OGI4NVx1OGI3Zlx1OGQxNVx1OGU5NVx1OGU5NFx1OGU5YVx1OGU5Mlx1OGU5MFx1OGU5Nlx1OGU5N1x1OGY2MFx1OGY2Mlx1OTE0N1x1OTQ0Y1x1OTQ1MFx1OTQ0YVx1OTQ0Ylx1OTQ0Zlx1OTQ0N1x1OTQ0NVx1OTQ0''@;'; put 'put ''OFx1OTQ0OVx1OTQ0Nlx1OTczZlx1OTdlM1x1OTg2YVx1OTg2OVx1OThjYlx1OTk1NFx1OTk1Ylx1OWE0ZVx1OWE1M1x1OWE1NFx1OWE0Y1x1OWE0Zlx1OWE0OFx1OWE0YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWE0OVx1OWE1Mlx1OWE1MFx1OWFkMFx1OWIx''@;'; put 'put ''OVx1OWIyYlx1OWIzYlx1OWI1Nlx1OWI1NVx1OWM0Nlx1OWM0OFx1OWMzZlx1OWM0NFx1OWMzOVx1OWMzM1x1OWM0MVx1OWMzY1x1OWMzN1x1OWMzNFx1OWMzMlx1OWMzZFx1OWMzNlx1OWRkYlx1OWRkMlx1OWRkZVx1OWRkYVx1OWRjYlx1OWRkMFx1OWRkY1x1OWRkMVx1OWRkZlx1OWRlOVx1''@;'; put 'put ''OWRkOVx1OWRkOFx1OWRkNlx1OWRmNVx1OWRkNVx1OWRkZFx1OWViNlx1OWVmMFx1OWYzNVx1OWYzM1x1OWYzMlx1OWY0Mlx1OWY2Ylx1OWY5NVx1OWZhMlx1NTEzZFx1NTI5OVx1NThlOFx1NThlN1x1NTk3Mlx1NWI0ZFx1NWRkOFx1ODgyZlx1NWY0Zlx1NjIwMVx1NjIwM1x1NjIwNFx1NjUy''@;'; put 'put ''OVx1NjUyNVx1NjU5Nlx1NjZlYlx1NmIxMVx1NmIxMlx1NmIwZlx1NmJjYVx1NzA1Ylx1NzA1YVx1NzIyMlx1NzM4Mlx1NzM4MVx1NzM4M1x1NzY3MFx1NzdkNFx1N2M2N1x1N2M2Nlx1N2U5NVx1ODI2Y1x1ODYzYVx1ODY0MFx1ODYzOVx1ODYzY1x1ODYzMVx1ODYzYlx1ODYzZVx1ODgzMFx1''@;'; put 'put ''ODgzMlx1ODgyZVx1ODgzM1x1ODk3Nlx1ODk3NFx1ODk3M1x1ODlmZVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0N10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQ3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0N11bcF1dPTYzMjMyK3AsYls2MzIzMitwXT1fWzI0N11bcF0pO2Zvcihf''@;'; put 'put ''WzI0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI4Y1x1OGI4ZVx1OGI4Ylx1OGI4OFx1OGM0NVx1OGQxOVx1OGU5OFx1OGY2NFx1OGY2M1x1OTFiY1x1OTQ2Mlx1OTQ1NVx1OTQ1ZFx1OTQ1N1x1OTQ1ZVx1OTdjNFx1OTdjNVx1''@;'; put 'put ''OTgwMFx1OWE1Nlx1OWE1OVx1OWIxZVx1OWIxZlx1OWIyMFx1OWM1Mlx1OWM1OFx1OWM1MFx1OWM0YVx1OWM0ZFx1OWM0Ylx1OWM1NVx1OWM1OVx1OWM0Y1x1OWM0ZVx1OWRmYlx1OWRmN1x1OWRlZlx1OWRlM1x1OWRlYlx1OWRmOFx1OWRlNFx1OWRmNlx1OWRlMVx1OWRlZVx1OWRlNlx1OWRm''@;'; put 'put ''Mlx1OWRmMFx1OWRlMlx1OWRlY1x1OWRmNFx1OWRmM1x1OWRlOFx1OWRlZFx1OWVjMlx1OWVkMFx1OWVmMlx1OWVmM1x1OWYwNlx1OWYxY1x1OWYzOFx1OWYzN1x1OWYzNlx1OWY0M1x1OWY0Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWY3MVx1OWY3MFx1OWY2''@;'; put 'put ''ZVx1OWY2Zlx1NTZkM1x1NTZjZFx1NWI0ZVx1NWM2ZFx1NjUyZFx1NjZlZFx1NjZlZVx1NmIxM1x1NzA1Zlx1NzA2MVx1NzA1ZFx1NzA2MFx1NzIyM1x1NzRkYlx1NzRlNVx1NzdkNVx1NzkzOFx1NzliN1x1NzliNlx1N2M2YVx1N2U5N1x1N2Y4OVx1ODI2ZFx1ODY0M1x1ODgzOFx1ODgzN1x1''@;'; put 'put ''ODgzNVx1ODg0Ylx1OGI5NFx1OGI5NVx1OGU5ZVx1OGU5Zlx1OGVhMFx1OGU5ZFx1OTFiZVx1OTFiZFx1OTFjMlx1OTQ2Ylx1OTQ2OFx1OTQ2OVx1OTZlNVx1OTc0Nlx1OTc0M1x1OTc0N1x1OTdjN1x1OTdlNVx1OWE1ZVx1OWFkNVx1OWI1OVx1OWM2M1x1OWM2N1x1OWM2Nlx1OWM2Mlx1OWM1''@;'; put 'put ''ZVx1OWM2MFx1OWUwMlx1OWRmZVx1OWUwN1x1OWUwM1x1OWUwNlx1OWUwNVx1OWUwMFx1OWUwMVx1OWUwOVx1OWRmZlx1OWRmZFx1OWUwNFx1OWVhMFx1OWYxZVx1OWY0Nlx1OWY3NFx1OWY3NVx1OWY3Nlx1NTZkNFx1NjUyZVx1NjViOFx1NmIxOFx1NmIxOVx1NmIxN1x1NmIxYVx1NzA2Mlx1''@;'; put 'put ''NzIyNlx1NzJhYVx1NzdkOFx1NzdkOVx1NzkzOVx1N2M2OVx1N2M2Ylx1N2NmNlx1N2U5YVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0OF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQ4XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0OF1bcF1dPTYzNDg4K3AsYls2MzQ4OCtwXT1fWzI0''@;'; put 'put ''OF1bcF0pO2ZvcihfWzI0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2U5OFx1N2U5Ylx1N2U5OVx1ODFlMFx1ODFlMVx1ODY0Nlx1ODY0N1x1ODY0OFx1ODk3OVx1ODk3YVx1ODk3Y1x1ODk3Ylx1ODlmZlx1OGI5OFx1OGI5OVx1''@;'; put 'put ''OGVhNVx1OGVhNFx1OGVhM1x1OTQ2ZVx1OTQ2ZFx1OTQ2Zlx1OTQ3MVx1OTQ3M1x1OTc0OVx1OTg3Mlx1OTk1Zlx1OWM2OFx1OWM2ZVx1OWM2ZFx1OWUwYlx1OWUwZFx1OWUxMFx1OWUwZlx1OWUxMlx1OWUxMVx1OWVhMVx1OWVmNVx1OWYwOVx1OWY0N1x1OWY3OFx1OWY3Ylx1OWY3YVx1OWY3''@;'; put 'put ''OVx1NTcxZVx1NzA2Nlx1N2M2Zlx1ODgzY1x1OGRiMlx1OGVhNlx1OTFjM1x1OTQ3NFx1OTQ3OFx1OTQ3Nlx1OTQ3NVx1OWE2MFx1OWM3NFx1OWM3M1x1OWM3MVx1OWM3NVx1OWUxNFx1OWUxM1x1OWVmNlx1OWYwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWZh''@;'; put 'put ''NFx1NzA2OFx1NzA2NVx1N2NmN1x1ODY2YVx1ODgzZVx1ODgzZFx1ODgzZlx1OGI5ZVx1OGM5Y1x1OGVhOVx1OGVjOVx1OTc0Ylx1OTg3M1x1OTg3NFx1OThjY1x1OTk2MVx1OTlhYlx1OWE2NFx1OWE2Nlx1OWE2N1x1OWIyNFx1OWUxNVx1OWUxN1x1OWY0OFx1NjIwN1x1NmIxZVx1NzIyN1x1''@;'; put 'put ''ODY0Y1x1OGVhOFx1OTQ4Mlx1OTQ4MFx1OTQ4MVx1OWE2OVx1OWE2OFx1OWIyZVx1OWUxOVx1NzIyOVx1ODY0Ylx1OGI5Zlx1OTQ4M1x1OWM3OVx1OWViN1x1NzY3NVx1OWE2Ylx1OWM3YVx1OWUxZFx1NzA2OVx1NzA2YVx1OWVhNFx1OWY3ZVx1OWY0OVx1OWY5OFx1Nzg4MVx1OTJiOVx1ODhj''@;'; put 'put ''Zlx1NThiYlx1NjA1Mlx1N2NhN1x1NWFmYVx1MjU1NFx1MjU2Nlx1MjU1N1x1MjU2MFx1MjU2Y1x1MjU2M1x1MjU1YVx1MjU2OVx1MjU1ZFx1MjU1Mlx1MjU2NFx1MjU1NVx1MjU1ZVx1MjU2YVx1MjU2MVx1MjU1OFx1MjU2N1x1MjU1Ylx1MjU1M1x1MjU2NVx1MjU1Nlx1MjU1Zlx1MjU2Ylx1''@;'; put 'put ''MjU2Mlx1MjU1OVx1MjU2OFx1MjU1Y1x1MjU1MVx1MjU1MFx1MjU2ZFx1MjU2ZVx1MjU3MFx1MjU2Zlx1MjU5M1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0OV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQ5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0OV1bcF1dPTYzNzQ0K3AsYls2''@;'; put 'put ''Mzc0NCtwXT1fWzI0OV1bcF0pO3JldHVybntlbmM6SSxkZWM6Yn19KCksWFsxMjUwXT1mdW5jdGlvbigpe2Zvcih2YXIgYj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgx''@;'; put 'put ''YVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdWZmZmRcdTIwMWVcdTIwMjZcdTIwMjBc''@;'; put 'put ''dTIwMjFcdWZmZmRcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNWFcdTAxNjRcdTAxN2RcdTAxNzlcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNWJcdTAxNjVcdTAxN2VcdTAxN2FceGEwXHUwMmM3XHUwMmQ4''@;'; put 'put ''XHUwMTQxXHhhNFx1MDEwNFx4YTZceGE3XHhhOFx4YTlcdTAxNWVceGFiXHhhY1x4YWRceGFlXHUwMTdiXHhiMFx4YjFcdTAyZGJcdTAxNDJceGI0XHhiNVx4YjZceGI3XHhiOFx1MDEwNVx1MDE1Zlx4YmJcdTAxM2RcdTAyZGRcdTAxM2VcdTAxN2NcdTAxNTRceGMxXHhjMlx1MDEwMlx4YzRc''@;'; put 'put ''dTAxMzlcdTAxMDZceGM3XHUwMTBjXHhjOVx1MDExOFx4Y2JcdTAxMWFceGNkXHhjZVx1MDEwZVx1MDExMFx1MDE0M1x1MDE0N1x4ZDNceGQ0XHUwMTUwXHhkNlx4ZDdcdTAxNThcdTAxNmVceGRhXHUwMTcwXHhkY1x4ZGRcdTAxNjJceGRmXHUwMTU1XHhlMVx4ZTJcdTAxMDNceGU0XHUwMTNh''@;'; put 'put ''XHUwMTA3XHhlN1x1MDEwZFx4ZTlcdTAxMTlceGViXHUwMTFiXHhlZFx4ZWVcdTAxMGZcdTAxMTFcdTAxNDRcdTAxNDhceGYzXHhmNFx1MDE1MVx4ZjZceGY3XHUwMTU5XHUwMTZmXHhmYVx1MDE3MVx4ZmNceGZkXHUwMTYzXHUwMmQ5IixJPVtdLF89e30scD0wOzI1NiE9cDsrK3ApNjU1MzMh''@;'; put 'put ''PT1iLmNoYXJDb2RlQXQocCkmJihfW2IuY2hhckF0KHApXT1wKSxJW3BdPWIuY2hhckF0KHApO3JldHVybntlbmM6XyxkZWM6SX19KCksWFsxMjUxXT1mdW5jdGlvbigpe2Zvcih2YXIgYj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgx''@;'; put 'put ''MVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTA0MDJc''@;'; put 'put ''dTA0MDNcdTIwMWFcdTA0NTNcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTIwYWNcdTIwMzBcdTA0MDlcdTIwMzlcdTA0MGFcdTA0MGNcdTA0MGJcdTA0MGZcdTA0NTJcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdTA0NTlcdTIwM2FcdTA0''@;'; put 'put ''NWFcdTA0NWNcdTA0NWJcdTA0NWZceGEwXHUwNDBlXHUwNDVlXHUwNDA4XHhhNFx1MDQ5MFx4YTZceGE3XHUwNDAxXHhhOVx1MDQwNFx4YWJceGFjXHhhZFx4YWVcdTA0MDdceGIwXHhiMVx1MDQwNlx1MDQ1Nlx1MDQ5MVx4YjVceGI2XHhiN1x1MDQ1MVx1MjExNlx1MDQ1NFx4YmJcdTA0NThc''@;'; put 'put ''dTA0MDVcdTA0NTVcdTA0NTdcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0''@;'; put 'put ''MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNc''@;'; put 'put ''dTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGYiLEk9W10sXz17fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9bYi5jaGFyQXQocCldPXApLElbcF09Yi5jaGFyQXQocCk7cmV0dXJu''@;'; put 'put ''e2VuYzpfLGRlYzpJfX0oKSxYWzEyNTJdPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwi''@;'; put 'put ''IyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDE2MFx1''@;'; put 'put ''MjAzOVx1MDE1Mlx1ZmZmZFx1MDE3ZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1MDE2MVx1MjAzYVx1MDE1M1x1ZmZmZFx1MDE3ZVx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlc''@;'; put 'put ''eGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhkMlx4''@;'; put 'put ''ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhm''@;'; put 'put ''Y1x4ZmRceGZlXHhmZiIsST1bXSxfPXt9LHA9MDsyNTYhPXA7KytwKTY1NTMzIT09Yi5jaGFyQ29kZUF0KHApJiYoX1tiLmNoYXJBdChwKV09cCksSVtwXT1iLmNoYXJBdChwKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbMTI1M109ZnVuY3Rpb24oKXtmb3IodmFyIGI9IlwwXHgwMVx4MDJc''@;'; put 'put ''eDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltc''@;'; put 'put ''XF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHVmZmZkXHUyMDM5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFk''@;'; put 'put ''XHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx1MDM4NVx1MDM4Nlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlcdWZmZmRceGFiXHhhY1x4YWRceGFlXHUyMDE1XHhiMFx4YjFceGIyXHhiM1x1MDM4NFx4YjVc''@;'; put 'put ''eGI2XHhiN1x1MDM4OFx1MDM4OVx1MDM4YVx4YmJcdTAzOGNceGJkXHUwMzhlXHUwMzhmXHUwMzkwXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHVmZmZk''@;'; put 'put ''XHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2FhXHUwM2FiXHUwM2FjXHUwM2FkXHUwM2FlXHUwM2FmXHUwM2IwXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUw''@;'; put 'put ''M2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MyXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHUwM2NhXHUwM2NiXHUwM2NjXHUwM2NkXHUwM2NlXHVmZmZkIixJPVtdLF89e30scD0wOzI1NiE9cDsrK3ApNjU1MzMhPT1iLmNoYXJDb2RlQXQocCkmJihfW2IuY2hh''@;'; put 'put ''ckF0KHApXT1wKSxJW3BdPWIuY2hhckF0KHApO3JldHVybntlbmM6XyxkZWM6SX19KCksWFsxMjU0XT1mdW5jdGlvbigpe2Zvcih2YXIgYj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4''@;'; put 'put ''MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIw''@;'; put 'put ''MjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNTNcdWZmZmRcdWZmZmRcdTAxNzhceGEwXHhh''@;'; put 'put ''MVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNh''@;'; put 'put ''XHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdTAxMWVceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxMzBcdTAxNWVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1MDExZlx4ZjFc''@;'; put 'put ''eGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDEzMVx1MDE1Zlx4ZmYiLEk9W10sXz17fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9bYi5jaGFyQXQocCldPXApLElbcF09Yi5jaGFyQXQocCk7cmV0dXJue2VuYzpfLGRlYzpJ''@;'; put 'put ''fX0oKSxYWzEyNTVdPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0u''@;'; put 'put ''LzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTBceGExXHhhMlx4YTNcdTIwYWFceGE1XHhhNlx4YTdceGE4XHhhOVx4ZDdceGFiXHhh''@;'; put 'put ''Y1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGY3XHhiYlx4YmNceGJkXHhiZVx4YmZcdTA1YjBcdTA1YjFcdTA1YjJcdTA1YjNcdTA1YjRcdTA1YjVcdTA1YjZcdTA1YjdcdTA1YjhcdTA1YjlcdWZmZmRcdTA1YmJcdTA1YmNcdTA1YmRcdTA1''@;'; put 'put ''YmVcdTA1YmZcdTA1YzBcdTA1YzFcdTA1YzJcdTA1YzNcdTA1ZjBcdTA1ZjFcdTA1ZjJcdTA1ZjNcdTA1ZjRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA1ZDBcdTA1ZDFcdTA1ZDJcdTA1ZDNcdTA1ZDRcdTA1ZDVcdTA1ZDZcdTA1ZDdcdTA1ZDhcdTA1ZDlc''@;'; put 'put ''dTA1ZGFcdTA1ZGJcdTA1ZGNcdTA1ZGRcdTA1ZGVcdTA1ZGZcdTA1ZTBcdTA1ZTFcdTA1ZTJcdTA1ZTNcdTA1ZTRcdTA1ZTVcdTA1ZTZcdTA1ZTdcdTA1ZThcdTA1ZTlcdTA1ZWFcdWZmZmRcdWZmZmRcdTIwMGVcdTIwMGZcdWZmZmQiLEk9W10sXz17fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9''@;'; put 'put ''PWIuY2hhckNvZGVBdChwKSYmKF9bYi5jaGFyQXQocCldPXApLElbcF09Yi5jaGFyQXQocCk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzEyNTZdPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDEx''@;'; put 'put ''XHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1''@;'; put 'put ''MDY3ZVx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDY3OVx1MjAzOVx1MDE1Mlx1MDY4Nlx1MDY5OFx1MDY4OFx1MDZhZlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDZhOVx1MjEyMlx1MDY5MVx1MjAzYVx1MDE1''@;'; put 'put ''M1x1MjAwY1x1MjAwZFx1MDZiYVx4YTBcdTA2MGNceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx1MDZiZVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx1MDYxYlx4YmJceGJjXHhiZFx4YmVcdTA2MWZcdTA2YzFcdTA2''@;'; put 'put ''MjFcdTA2MjJcdTA2MjNcdTA2MjRcdTA2MjVcdTA2MjZcdTA2MjdcdTA2MjhcdTA2MjlcdTA2MmFcdTA2MmJcdTA2MmNcdTA2MmRcdTA2MmVcdTA2MmZcdTA2MzBcdTA2MzFcdTA2MzJcdTA2MzNcdTA2MzRcdTA2MzVcdTA2MzZceGQ3XHUwNjM3XHUwNjM4XHUwNjM5XHUwNjNhXHUwNjQwXHUw''@;'; put 'put ''NjQxXHUwNjQyXHUwNjQzXHhlMFx1MDY0NFx4ZTJcdTA2NDVcdTA2NDZcdTA2NDdcdTA2NDhceGU3XHhlOFx4ZTlceGVhXHhlYlx1MDY0OVx1MDY0YVx4ZWVceGVmXHUwNjRiXHUwNjRjXHUwNjRkXHUwNjRlXHhmNFx1MDY0Zlx1MDY1MFx4ZjdcdTA2NTFceGY5XHUwNjUyXHhmYlx4ZmNcdTIw''@;'; put 'put ''MGVcdTIwMGZcdTA2ZDIiLEk9W10sXz17fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9bYi5jaGFyQXQocCldPXApLElbcF09Yi5jaGFyQXQocCk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzEyNTddPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJcMFx4MDFceDAy''@;'; put 'put ''XHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpb''@;'; put 'put ''XFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1ZmZmZFx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZmZFx4YThcdTAyYzdceGI4XHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUy''@;'; put 'put ''MDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHhhZlx1MDJkYlx1ZmZmZFx4YTBcdWZmZmRceGEyXHhhM1x4YTRcdWZmZmRceGE2XHhhN1x4ZDhceGE5XHUwMTU2XHhhYlx4YWNceGFkXHhhZVx4YzZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4''@;'; put 'put ''ZjhceGI5XHUwMTU3XHhiYlx4YmNceGJkXHhiZVx4ZTZcdTAxMDRcdTAxMmVcdTAxMDBcdTAxMDZceGM0XHhjNVx1MDExOFx1MDExMlx1MDEwY1x4YzlcdTAxNzlcdTAxMTZcdTAxMjJcdTAxMzZcdTAxMmFcdTAxM2JcdTAxNjBcdTAxNDNcdTAxNDVceGQzXHUwMTRjXHhkNVx4ZDZceGQ3XHUw''@;'; put 'put ''MTcyXHUwMTQxXHUwMTVhXHUwMTZhXHhkY1x1MDE3Ylx1MDE3ZFx4ZGZcdTAxMDVcdTAxMmZcdTAxMDFcdTAxMDdceGU0XHhlNVx1MDExOVx1MDExM1x1MDEwZFx4ZTlcdTAxN2FcdTAxMTdcdTAxMjNcdTAxMzdcdTAxMmJcdTAxM2NcdTAxNjFcdTAxNDRcdTAxNDZceGYzXHUwMTRkXHhmNVx4''@;'; put 'put ''ZjZceGY3XHUwMTczXHUwMTQyXHUwMTViXHUwMTZiXHhmY1x1MDE3Y1x1MDE3ZVx1MDJkOSIsST1bXSxfPXt9LHA9MDsyNTYhPXA7KytwKTY1NTMzIT09Yi5jaGFyQ29kZUF0KHApJiYoX1tiLmNoYXJBdChwKV09cCksSVtwXT1iLmNoYXJBdChwKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhb''@;'; put 'put ''MTI1OF09ZnVuY3Rpb24oKXtmb3IodmFyIGI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1''@;'; put 'put ''Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHVmZmZkXHUyMDM5XHUwMTUyXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHVmZmZkXHUyMDNhXHUwMTUzXHVmZmZkXHVmZmZkXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFl''@;'; put 'put ''XHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJcdTAxMDJceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx1MDMwMFx4Y2RceGNlXHhjZlx1MDExMFx4ZDFcdTAzMDlceGQzXHhkNFx1MDFh''@;'; put 'put ''MFx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxYWZcdTAzMDNceGRmXHhlMFx4ZTFceGUyXHUwMTAzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJcdTAzMDFceGVkXHhlZVx4ZWZcdTAxMTFceGYxXHUwMzIzXHhmM1x4ZjRcdTAxYTFceGY2XHhmN1x4ZjhceGY5XHhmYVx4''@;'; put 'put ''ZmJceGZjXHUwMWIwXHUyMGFiXHhmZiIsST1bXSxfPXt9LHA9MDsyNTYhPXA7KytwKTY1NTMzIT09Yi5jaGFyQ29kZUF0KHApJiYoX1tiLmNoYXJBdChwKV09cCksSVtwXT1iLmNoYXJBdChwKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbMWU0XT1mdW5jdGlvbigpe2Zvcih2YXIgYj0iXDBc''@;'; put 'put ''eDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNU''@;'; put 'put ''VVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4''@;'; put 'put ''ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4Zjhc''@;'; put 'put ''eGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRcdTIwMzlcdTIwM2FcdWZiMDFcdWZi''@;'; put 'put ''MDJcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzciLEk9W10s''@;'; put 'put ''Xz17fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9bYi5jaGFyQXQocCldPXApLElbcF09Yi5jaGFyQXQocCk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzEwMDA2XT1mdW5jdGlvbigpe2Zvcih2YXIgYj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3''@;'; put 'put ''XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1u''@;'; put 'put ''b3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM0XHhiOVx4YjJceGM5XHhiM1x4ZDZceGRjXHUwMzg1XHhlMFx4ZTJceGU0XHUwMzg0XHhhOFx4ZTdceGU5XHhlOFx4ZWFceGViXHhhM1x1MjEyMlx4ZWVceGVmXHUyMDIyXHhiZFx1MjAzMFx4ZjRceGY2XHhhNlx4YWRceGY5XHhmYlx4ZmNcdTIwMjBc''@;'; put 'put ''dTAzOTNcdTAzOTRcdTAzOThcdTAzOWJcdTAzOWVcdTAzYTBceGRmXHhhZVx4YTlcdTAzYTNcdTAzYWFceGE3XHUyMjYwXHhiMFx1MDM4N1x1MDM5MVx4YjFcdTIyNjRcdTIyNjVceGE1XHUwMzkyXHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk5XHUwMzlhXHUwMzljXHUwM2E2XHUwM2FiXHUwM2E4''@;'; put 'put ''XHUwM2E5XHUwM2FjXHUwMzlkXHhhY1x1MDM5Zlx1MDNhMVx1MjI0OFx1MDNhNFx4YWJceGJiXHUyMDI2XHhhMFx1MDNhNVx1MDNhN1x1MDM4Nlx1MDM4OFx1MDE1M1x1MjAxM1x1MjAxNVx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTAzODlcdTAzOGFcdTAzOGNcdTAzOGVcdTAzYWRc''@;'; put 'put ''dTAzYWVcdTAzYWZcdTAzY2NcdTAzOGZcdTAzY2RcdTAzYjFcdTAzYjJcdTAzYzhcdTAzYjRcdTAzYjVcdTAzYzZcdTAzYjNcdTAzYjdcdTAzYjlcdTAzYmVcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmZcdTAzYzBcdTAzY2VcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYjhcdTAzYzlcdTAz''@;'; put 'put ''YzJcdTAzYzdcdTAzYzVcdTAzYjZcdTAzY2FcdTAzY2JcdTAzOTBcdTAzYjBcdWZmZmQiLEk9W10sXz17fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9bYi5jaGFyQXQocCldPXApLElbcF09Yi5jaGFyQXQocCk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzEw''@;'; put 'put ''MDA3XT1mdW5jdGlvbigpe2Zvcih2YXIgYj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2''@;'; put 'put ''Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0''@;'; put 'put ''MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx1MDQwNlx4YWVceGE5XHUyMTIyXHUwNDAyXHUw''@;'; put 'put ''NDUyXHUyMjYwXHUwNDAzXHUwNDUzXHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx1MDQ1Nlx4YjVcdTIyMDJcdTA0MDhcdTA0MDRcdTA0NTRcdTA0MDdcdTA0NTdcdTA0MDlcdTA0NTlcdTA0MGFcdTA0NWFcdTA0NThcdTA0MDVceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIw''@;'; put 'put ''MjZceGEwXHUwNDBiXHUwNDViXHUwNDBjXHUwNDVjXHUwNDU1XHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjAxZVx1MDQwZVx1MDQ1ZVx1MDQwZlx1MDQ1Zlx1MjExNlx1MDQwMVx1MDQ1MVx1MDQ0Zlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQz''@;'; put 'put ''NVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx4YTQiLEk9W10sXz17''@;'; put 'put ''fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9bYi5jaGFyQXQocCldPXApLElbcF09Yi5jaGFyQXQocCk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzEwMDA4XT1mdW5jdGlvbigpe3ZhciBwLGI9W10sST17fSxfPVtdO2ZvcihfWzBdPSJcMFx4MDFceDAyXHgw''@;'; put 'put ''M1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxd''@;'; put 'put ''Xl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4ODBcdWY4ZDhcdWY4ZDlcdWY4ZGFcdWY4ZGJcdWY4ZGNcdWY4ZGRcdWY4ZGVcdWY4ZGZcdWY4ZTBcdWY4ZTFcdWY4ZTJcdWY4ZTNcdWY4ZTRcdWY4ZTVcdWY4ZTZcdWY4ZTdcdWY4ZThcdWY4ZTlcdWY4ZWFcdWY4ZWJcdWY4''@;'; put 'put ''ZWNcdWY4ZWRcdWY4ZWVcdWY4ZWZcdWY4ZjBcdWY4ZjFcdWY4ZjJcdWY4ZjNcdWY4ZjRcdWY4ZjVcdWY4ZjZcdWY4ZjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY4ZjhcdWY4ZjlcdWY4ZmFcdWY4ZmJcdWY4ZmNcdWY4ZmRcdWY4ZmVcdWY4ZmYiLnNwbGl0KCIiKSxwPTA7cCE9X1sw''@;'; put 'put ''XS5sZW5ndGg7KytwKTY1NTMzIT09X1swXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzBdW3BdXT0wK3AsYlswK3BdPV9bMF1bcF0pO2ZvcihfWzE2MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAwMFx1MzAwMVx1MzAwMlx1MzBmYlx1MDJjOVx1MDJjN1x4YThcdTMwMDNcdTMwMDVcdTIwMTVcdWZmNWVcdWZmZmRcdTIwMjZcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRc''@;'; put 'put ''dTMwMTRcdTMwMTVcdTMwMDhcdTMwMDlcdTMwMGFcdTMwMGJcdTMwMGNcdTMwMGRcdTMwMGVcdTMwMGZcdTMwMTZcdTMwMTdcdTMwMTBcdTMwMTFceGIxXHhkN1x4ZjdcdTIyMzZcdTIyMjdcdTIyMjhcdTIyMTFcdTIyMGZcdTIyMmFcdTIyMjlcdTIyMDhcdTIyMzdcdTIyMWFcdTIyYTVcdTIy''@;'; put 'put ''MjVcdTIyMjBcdTIzMTJcdTIyOTlcdTIyMmJcdTIyMmVcdTIyNjFcdTIyNGNcdTIyNDhcdTIyM2RcdTIyMWRcdTIyNjBcdTIyNmVcdTIyNmZcdTIyNjRcdTIyNjVcdTIyMWVcdTIyMzVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHVmZjA0XHhhNFx1ZmZlMFx1ZmZl''@;'; put 'put ''MVx1MjAzMFx4YTdcdTIxMTZcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1Y2VcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTIwM2JcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTMwMTNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjFdLmxlbmd0aDsrK3ApNjU1''@;'; put 'put ''MzMhPT1fWzE2MV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNjFdW3BdXT00MTIxNitwLGJbNDEyMTYrcF09X1sxNjFdW3BdKTtmb3IoX1sxNjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI0ODhc''@;'; put 'put ''dTI0ODlcdTI0OGFcdTI0OGJcdTI0OGNcdTI0OGRcdTI0OGVcdTI0OGZcdTI0OTBcdTI0OTFcdTI0OTJcdTI0OTNcdTI0OTRcdTI0OTVcdTI0OTZcdTI0OTdcdTI0OThcdTI0OTlcdTI0OWFcdTI0OWJcdTI0NzRcdTI0NzVcdTI0NzZcdTI0NzdcdTI0NzhcdTI0NzlcdTI0N2FcdTI0N2JcdTI0''@;'; put 'put ''N2NcdTI0N2RcdTI0N2VcdTI0N2ZcdTI0ODBcdTI0ODFcdTI0ODJcdTI0ODNcdTI0ODRcdTI0ODVcdTI0ODZcdTI0ODdcdTI0NjBcdTI0NjFcdTI0NjJcdTI0NjNcdTI0NjRcdTI0NjVcdTI0NjZcdTI0NjdcdTI0NjhcdTI0NjlcdWZmZmRcdWZmZmRcdTMyMjBcdTMyMjFcdTMyMjJcdTMyMjNc''@;'; put 'put ''dTMyMjRcdTMyMjVcdTMyMjZcdTMyMjdcdTMyMjhcdTMyMjlcdWZmZmRcdWZmZmRcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdTIxNmFcdTIxNmJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjJdLmxl''@;'; put 'put ''bmd0aDsrK3ApNjU1MzMhPT1fWzE2Ml1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNjJdW3BdXT00MTQ3MitwLGJbNDE0NzIrcF09X1sxNjJdW3BdKTtmb3IoX1sxNjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmMDFcdWZmMDJcdWZmMDNcdWZmZTVcdWZmMDVcdWZmMDZcdWZmMDdcdWZmMDhcdWZmMDlcdWZmMGFcdWZmMGJcdWZmMGNcdWZmMGRcdWZmMGVcdWZmMGZc''@;'; put 'put ''dWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdWZmMWFcdWZmMWJcdWZmMWNcdWZmMWRcdWZmMWVcdWZmMWZcdWZmMjBcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFcdWZm''@;'; put 'put ''MmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmM2JcdWZmM2NcdWZmM2RcdWZmM2VcdWZmM2ZcdWZmNDBcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZmNDZc''@;'; put 'put ''dWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmNWJcdWZmNWNcdWZmNWRcdWZmZTNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7''@;'; put 'put ''cCE9X1sxNjNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2M11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNjNdW3BdXT00MTcyOCtwLGJbNDE3MjgrcF09X1sxNjNdW3BdKTtmb3IoX1sxNjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwNDFcdTMwNDJcdTMwNDNcdTMwNDRcdTMwNDVcdTMwNDZcdTMwNDdcdTMwNDhcdTMwNDlcdTMwNGFcdTMwNGJcdTMwNGNcdTMwNGRc''@;'; put 'put ''dTMwNGVcdTMwNGZcdTMwNTBcdTMwNTFcdTMwNTJcdTMwNTNcdTMwNTRcdTMwNTVcdTMwNTZcdTMwNTdcdTMwNThcdTMwNTlcdTMwNWFcdTMwNWJcdTMwNWNcdTMwNWRcdTMwNWVcdTMwNWZcdTMwNjBcdTMwNjFcdTMwNjJcdTMwNjNcdTMwNjRcdTMwNjVcdTMwNjZcdTMwNjdcdTMwNjhcdTMw''@;'; put 'put ''NjlcdTMwNmFcdTMwNmJcdTMwNmNcdTMwNmRcdTMwNmVcdTMwNmZcdTMwNzBcdTMwNzFcdTMwNzJcdTMwNzNcdTMwNzRcdTMwNzVcdTMwNzZcdTMwNzdcdTMwNzhcdTMwNzlcdTMwN2FcdTMwN2JcdTMwN2NcdTMwN2RcdTMwN2VcdTMwN2ZcdTMwODBcdTMwODFcdTMwODJcdTMwODNcdTMwODRc''@;'; put 'put ''dTMwODVcdTMwODZcdTMwODdcdTMwODhcdTMwODlcdTMwOGFcdTMwOGJcdTMwOGNcdTMwOGRcdTMwOGVcdTMwOGZcdTMwOTBcdTMwOTFcdTMwOTJcdTMwOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxwPTA7cCE9X1sxNjRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2NF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNjRdW3BdXT00MTk4NCtwLGJbNDE5ODQrcF09X1sxNjRdW3BdKTtmb3IoX1sxNjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwYTFcdTMwYTJcdTMwYTNcdTMwYTRcdTMwYTVcdTMwYTZcdTMwYTdcdTMwYThcdTMwYTlcdTMwYWFcdTMwYWJc''@;'; put 'put ''dTMwYWNcdTMwYWRcdTMwYWVcdTMwYWZcdTMwYjBcdTMwYjFcdTMwYjJcdTMwYjNcdTMwYjRcdTMwYjVcdTMwYjZcdTMwYjdcdTMwYjhcdTMwYjlcdTMwYmFcdTMwYmJcdTMwYmNcdTMwYmRcdTMwYmVcdTMwYmZcdTMwYzBcdTMwYzFcdTMwYzJcdTMwYzNcdTMwYzRcdTMwYzVcdTMwYzZcdTMw''@;'; put 'put ''YzdcdTMwYzhcdTMwYzlcdTMwY2FcdTMwY2JcdTMwY2NcdTMwY2RcdTMwY2VcdTMwY2ZcdTMwZDBcdTMwZDFcdTMwZDJcdTMwZDNcdTMwZDRcdTMwZDVcdTMwZDZcdTMwZDdcdTMwZDhcdTMwZDlcdTMwZGFcdTMwZGJcdTMwZGNcdTMwZGRcdTMwZGVcdTMwZGZcdTMwZTBcdTMwZTFcdTMwZTJc''@;'; put 'put ''dTMwZTNcdTMwZTRcdTMwZTVcdTMwZTZcdTMwZTdcdTMwZThcdTMwZTlcdTMwZWFcdTMwZWJcdTMwZWNcdTMwZWRcdTMwZWVcdTMwZWZcdTMwZjBcdTMwZjFcdTMwZjJcdTMwZjNcdTMwZjRcdTMwZjVcdTMwZjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2NV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNjVdW3BdXT00MjI0MCtwLGJbNDIyNDArcF09X1sxNjVdW3BdKTtmb3IoX1sxNjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlc''@;'; put 'put ''dTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAz''@;'; put 'put ''YjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2Nl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNjZdW3BdXT00MjQ5NitwLGJbNDI0OTYrcF09X1sxNjZdW3BdKTtmb3IoX1sxNjddPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MDFc''@;'; put 'put ''dTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0NTFcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2Nc''@;'; put 'put ''dTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2N11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNjddW3BdXT00Mjc1MitwLGJbNDI3NTIrcF09X1sxNjddW3BdKTtmb3IoX1sxNjhdPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAxMDFceGUxXHUwMWNlXHhlMFx1MDExM1x4ZTlc''@;'; put 'put ''dTAxMWJceGU4XHUwMTJiXHhlZFx1MDFkMFx4ZWNcdTAxNGRceGYzXHUwMWQyXHhmMlx1MDE2Ylx4ZmFcdTAxZDRceGY5XHUwMWQ2XHUwMWQ4XHUwMWRhXHUwMWRjXHhmY1x4ZWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMx''@;'; put 'put ''MDVcdTMxMDZcdTMxMDdcdTMxMDhcdTMxMDlcdTMxMGFcdTMxMGJcdTMxMGNcdTMxMGRcdTMxMGVcdTMxMGZcdTMxMTBcdTMxMTFcdTMxMTJcdTMxMTNcdTMxMTRcdTMxMTVcdTMxMTZcdTMxMTdcdTMxMThcdTMxMTlcdTMxMWFcdTMxMWJcdTMxMWNcdTMxMWRcdTMxMWVcdTMxMWZcdTMxMjBc''@;'; put 'put ''dTMxMjFcdTMxMjJcdTMxMjNcdTMxMjRcdTMxMjVcdTMxMjZcdTMxMjdcdTMxMjhcdTMxMjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2OF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNjhdW3BdXT00MzAwOCtwLGJbNDMwMDgrcF09X1sxNjhdW3BdKTtmb3IoX1sxNjldPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1MDBcdTI1MDFcdTI1MDJcdTI1MDNc''@;'; put 'put ''dTI1MDRcdTI1MDVcdTI1MDZcdTI1MDdcdTI1MDhcdTI1MDlcdTI1MGFcdTI1MGJcdTI1MGNcdTI1MGRcdTI1MGVcdTI1MGZcdTI1MTBcdTI1MTFcdTI1MTJcdTI1MTNcdTI1MTRcdTI1MTVcdTI1MTZcdTI1MTdcdTI1MThcdTI1MTlcdTI1MWFcdTI1MWJcdTI1MWNcdTI1MWRcdTI1MWVcdTI1''@;'; put 'put ''MWZcdTI1MjBcdTI1MjFcdTI1MjJcdTI1MjNcdTI1MjRcdTI1MjVcdTI1MjZcdTI1MjdcdTI1MjhcdTI1MjlcdTI1MmFcdTI1MmJcdTI1MmNcdTI1MmRcdTI1MmVcdTI1MmZcdTI1MzBcdTI1MzFcdTI1MzJcdTI1MzNcdTI1MzRcdTI1MzVcdTI1MzZcdTI1MzdcdTI1MzhcdTI1MzlcdTI1M2Fc''@;'; put 'put ''dTI1M2JcdTI1M2NcdTI1M2RcdTI1M2VcdTI1M2ZcdTI1NDBcdTI1NDFcdTI1NDJcdTI1NDNcdTI1NDRcdTI1NDVcdTI1NDZcdTI1NDdcdTI1NDhcdTI1NDlcdTI1NGFcdTI1NGJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2OV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNjldW3BdXT00MzI2NCtwLGJbNDMyNjQrcF09X1sxNjldW3BdKTtmb3IoX1sxNzZdPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1NGFcdTk2M2ZcdTU3YzNcdTYzMjhcdTU0Y2Vc''@;'; put 'put ''dTU1MDlcdTU0YzBcdTc2OTFcdTc2NGNcdTg1M2NcdTc3ZWVcdTgyN2VcdTc4OGRcdTcyMzFcdTk2OThcdTk3OGRcdTZjMjhcdTViODlcdTRmZmFcdTYzMDlcdTY2OTdcdTVjYjhcdTgwZmFcdTY4NDhcdTgwYWVcdTY2MDJcdTc2Y2VcdTUxZjlcdTY1NTZcdTcxYWNcdTdmZjFcdTg4ODRcdTUw''@;'; put 'put ''YjJcdTU5NjVcdTYxY2FcdTZmYjNcdTgyYWRcdTYzNGNcdTYyNTJcdTUzZWRcdTU0MjdcdTdiMDZcdTUxNmJcdTc1YTRcdTVkZjRcdTYyZDRcdThkY2JcdTk3NzZcdTYyOGFcdTgwMTlcdTU3NWRcdTk3MzhcdTdmNjJcdTcyMzhcdTc2N2RcdTY3Y2ZcdTc2N2VcdTY0NDZcdTRmNzBcdThkMjVc''@;'; put 'put ''dTYyZGNcdTdhMTdcdTY1OTFcdTczZWRcdTY0MmNcdTYyNzNcdTgyMmNcdTk4ODFcdTY3N2ZcdTcyNDhcdTYyNmVcdTYyY2NcdTRmMzRcdTc0ZTNcdTUzNGFcdTUyOWVcdTdlY2FcdTkwYTZcdTVlMmVcdTY4ODZcdTY5OWNcdTgxODBcdTdlZDFcdTY4ZDJcdTc4YzVcdTg2OGNcdTk1NTFcdTUw''@;'; put 'put ''OGRcdThjMjRcdTgyZGVcdTgwZGVcdTUzMDVcdTg5MTJcdTUyNjVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3Nl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNzZdW3BdXT00NTA1NitwLGJbNDUwNTYrcF09X1sxNzZdW3BdKTtmb3IoX1sx''@;'; put 'put ''NzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1ODRcdTk2ZjlcdTRmZGRc''@;'; put 'put ''dTU4MjFcdTk5NzFcdTViOWRcdTYyYjFcdTYyYTVcdTY2YjRcdThjNzlcdTljOGRcdTcyMDZcdTY3NmZcdTc4OTFcdTYwYjJcdTUzNTFcdTUzMTdcdThmODhcdTgwY2NcdThkMWRcdTk0YTFcdTUwMGRcdTcyYzhcdTU5MDdcdTYwZWJcdTcxMTlcdTg4YWJcdTU5NTRcdTgyZWZcdTY3MmNcdTdi''@;'; put 'put ''MjhcdTVkMjlcdTdlZjdcdTc1MmRcdTZjZjVcdThlNjZcdThmZjhcdTkwM2NcdTlmM2JcdTZiZDRcdTkxMTlcdTdiMTRcdTVmN2NcdTc4YTdcdTg0ZDZcdTg1M2RcdTZiZDVcdTZiZDlcdTZiZDZcdTVlMDFcdTVlODdcdTc1ZjlcdTk1ZWRcdTY1NWRcdTVmMGFcdTVmYzVcdThmOWZcdTU4YzFc''@;'; put 'put ''dTgxYzJcdTkwN2ZcdTk2NWJcdTk3YWRcdThmYjlcdTdmMTZcdThkMmNcdTYyNDFcdTRmYmZcdTUzZDhcdTUzNWVcdThmYThcdThmYTlcdThmYWJcdTkwNGRcdTY4MDdcdTVmNmFcdTgxOThcdTg4NjhcdTljZDZcdTYxOGJcdTUyMmJcdTc2MmFcdTVmNmNcdTY1OGNcdTZmZDJcdTZlZThcdTVi''@;'; put 'put ''YmVcdTY0NDhcdTUxNzVcdTUxYjBcdTY3YzRcdTRlMTlcdTc5YzlcdTk5N2NcdTcwYjNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3N11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNzddW3BdXT00NTMxMitwLGJbNDUzMTIrcF09X1sxNzdd''@;'; put 'put ''W3BdKTtmb3IoX1sxNzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc1YzVc''@;'; put 'put ''dTVlNzZcdTczYmJcdTgzZTBcdTY0YWRcdTYyZThcdTk0YjVcdTZjZTJcdTUzNWFcdTUyYzNcdTY0MGZcdTk0YzJcdTdiOTRcdTRmMmZcdTVlMWJcdTgyMzZcdTgxMTZcdTgxOGFcdTZlMjRcdTZjY2FcdTlhNzNcdTYzNTVcdTUzNWNcdTU0ZmFcdTg4NjVcdTU3ZTBcdTRlMGRcdTVlMDNcdTZi''@;'; put 'put ''NjVcdTdjM2ZcdTkwZThcdTYwMTZcdTY0ZTZcdTczMWNcdTg4YzFcdTY3NTBcdTYyNGRcdThkMjJcdTc3NmNcdThlMjlcdTkxYzdcdTVmNjlcdTgzZGNcdTg1MjFcdTk5MTBcdTUzYzJcdTg2OTVcdTZiOGJcdTYwZWRcdTYwZThcdTcwN2ZcdTgyY2RcdTgyMzFcdTRlZDNcdTZjYTdcdTg1Y2Zc''@;'; put 'put ''dTY0Y2RcdTdjZDlcdTY5ZmRcdTY2ZjlcdTgzNDlcdTUzOTVcdTdiNTZcdTRmYTdcdTUxOGNcdTZkNGJcdTVjNDJcdThlNmRcdTYzZDJcdTUzYzlcdTgzMmNcdTgzMzZcdTY3ZTVcdTc4YjRcdTY0M2RcdTViZGZcdTVjOTRcdTVkZWVcdThiZTdcdTYyYzZcdTY3ZjRcdThjN2FcdTY0MDBcdTYz''@;'; put 'put ''YmFcdTg3NDlcdTk5OGJcdThjMTdcdTdmMjBcdTk0ZjJcdTRlYTdcdTk2MTBcdTk4YTRcdTY2MGNcdTczMTZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3OF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNzhdW3BdXT00NTU2OCtwLGJbNDU1''@;'; put 'put ''NjgrcF09X1sxNzhdW3BdKTtmb3IoX1sxNzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTU3M2FcdTVjMWRcdTVlMzhcdTk1N2ZcdTUwN2ZcdTgwYTBcdTUzODJcdTY1NWVcdTc1NDVcdTU1MzFcdTUwMjFcdThkODVcdTYyODRcdTk0OWVcdTY3MWRcdTU2MzJcdTZmNmVcdTVkZTJcdTU0MzVcdTcwOTJcdThmNjZcdTYyNmZcdTY0YTRcdTYzYTNcdTVmN2JcdTZmODhcdTkw''@;'; put 'put ''ZjRcdTgxZTNcdThmYjBcdTVjMThcdTY2NjhcdTVmZjFcdTZjODlcdTk2NDhcdThkODFcdTg4NmNcdTY0OTFcdTc5ZjBcdTU3Y2VcdTZhNTlcdTYyMTBcdTU0NDhcdTRlNThcdTdhMGJcdTYwZTlcdTZmODRcdThiZGFcdTYyN2ZcdTkwMWVcdTlhOGJcdTc5ZTRcdTU0MDNcdTc1ZjRcdTYzMDFc''@;'; put 'put ''dTUzMTlcdTZjNjBcdThmZGZcdTVmMWJcdTlhNzBcdTgwM2JcdTlmN2ZcdTRmODhcdTVjM2FcdThkNjRcdTdmYzVcdTY1YTVcdTcwYmRcdTUxNDVcdTUxYjJcdTg2NmJcdTVkMDdcdTViYTBcdTYyYmRcdTkxNmNcdTc1NzRcdThlMGNcdTdhMjBcdTYxMDFcdTdiNzlcdTRlYzdcdTdlZjhcdTc3''@;'; put 'put ''ODVcdTRlMTFcdTgxZWRcdTUyMWRcdTUxZmFcdTZhNzFcdTUzYThcdThlODdcdTk1MDRcdTk2Y2ZcdTZlYzFcdTk2NjRcdTY5NWFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3OV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNzldW3BdXT00''@;'; put 'put ''NTgyNCtwLGJbNDU4MjQrcF09X1sxNzldW3BdKTtmb3IoX1sxODBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTc4NDBcdTUwYThcdTc3ZDdcdTY0MTBcdTg5ZTZcdTU5MDRcdTYzZTNcdTVkZGRcdTdhN2ZcdTY5M2RcdTRmMjBcdTgyMzlcdTU1OThcdTRlMzJcdTc1YWVcdTdhOTdcdTVlNjJcdTVlOGFcdTk1ZWZcdTUyMWJcdTU0MzlcdTcwOGFcdTYzNzZcdTk1MjRcdTU3''@;'; put 'put ''ODJcdTY2MjVcdTY5M2ZcdTkxODdcdTU1MDdcdTZkZjNcdTdlYWZcdTg4MjJcdTYyMzNcdTdlZjBcdTc1YjVcdTgzMjhcdTc4YzFcdTk2Y2NcdThmOWVcdTYxNDhcdTc0ZjdcdThiY2RcdTZiNjRcdTUyM2FcdThkNTBcdTZiMjFcdTgwNmFcdTg0NzFcdTU2ZjFcdTUzMDZcdTRlY2VcdTRlMWJc''@;'; put 'put ''dTUxZDFcdTdjOTdcdTkxOGJcdTdjMDdcdTRmYzNcdThlN2ZcdTdiZTFcdTdhOWNcdTY0NjdcdTVkMTRcdTUwYWNcdTgxMDZcdTc2MDFcdTdjYjlcdTZkZWNcdTdmZTBcdTY3NTFcdTViNThcdTViZjhcdTc4Y2JcdTY0YWVcdTY0MTNcdTYzYWFcdTYzMmJcdTk1MTlcdTY0MmRcdThmYmVcdTdi''@;'; put 'put ''NTRcdTc2MjlcdTYyNTNcdTU5MjdcdTU0NDZcdTZiNzlcdTUwYTNcdTYyMzRcdTVlMjZcdTZiODZcdTRlZTNcdThkMzdcdTg4OGJcdTVmODVcdTkwMmVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4MF1bcF0uY2hhckNvZGVBdCgwKSYmKElb''@;'; put 'put ''X1sxODBdW3BdXT00NjA4MCtwLGJbNDYwODArcF09X1sxODBdW3BdKTtmb3IoX1sxODFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwMjBcdTgwM2RcdTYyYzVcdTRlMzlcdTUzNTVcdTkwZjhcdTYzYjhcdTgwYzZcdTY1ZTZcdTZjMmVcdTRmNDZcdTYwZWVcdTZkZTFcdThiZGVcdTVmMzlcdTg2Y2JcdTVmNTNcdTYzMjFcdTUxNWFcdTgzNjFcdTY4NjNcdTUyMDBcdTYz''@;'; put 'put ''NjNcdThlNDhcdTUwMTJcdTVjOWJcdTc5NzdcdTViZmNcdTUyMzBcdTdhM2JcdTYwYmNcdTkwNTNcdTc2ZDdcdTVmYjdcdTVmOTdcdTc2ODRcdThlNmNcdTcwNmZcdTc2N2JcdTdiNDlcdTc3YWFcdTUxZjNcdTkwOTNcdTU4MjRcdTRmNGVcdTZlZjRcdThmZWFcdTY1NGNcdTdiMWJcdTcyYzRc''@;'; put 'put ''dTZkYTRcdTdmZGZcdTVhZTFcdTYyYjVcdTVlOTVcdTU3MzBcdTg0ODJcdTdiMmNcdTVlMWRcdTVmMWZcdTkwMTJcdTdmMTRcdTk4YTBcdTYzODJcdTZlYzdcdTc4OThcdTcwYjlcdTUxNzhcdTk3NWJcdTU3YWJcdTc1MzVcdTRmNDNcdTc1MzhcdTVlOTdcdTYwZTZcdTU5NjBcdTZkYzBcdTZi''@;'; put 'put ''YmZcdTc4ODlcdTUzZmNcdTk2ZDVcdTUxY2JcdTUyMDFcdTYzODlcdTU0MGFcdTk0OTNcdThjMDNcdThkY2NcdTcyMzlcdTc4OWZcdTg3NzZcdThmZWRcdThjMGRcdTUzZTBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4MV1bcF0uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKElbX1sxODFdW3BdXT00NjMzNitwLGJbNDYzMzYrcF09X1sxODFdW3BdKTtmb3IoX1sxODJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMDFcdTc2ZWZcdTUzZWVcdTk0ODlcdTk4NzZcdTlmMGVcdTk1MmRcdTViOWFcdThiYTJcdTRlMjJcdTRlMWNcdTUxYWNcdTg0NjNcdTYxYzJcdTUyYThcdTY4MGJcdTRmOTdcdTYwNmJcdTUxYmJcdTZkMWVcdTUx''@;'; put 'put ''NWNcdTYyOTZcdTY1OTdcdTk2NjFcdThjNDZcdTkwMTdcdTc1ZDhcdTkwZmRcdTc3NjNcdTZiZDJcdTcyOGFcdTcyZWNcdThiZmJcdTU4MzVcdTc3NzlcdThkNGNcdTY3NWNcdTk1NDBcdTgwOWFcdTVlYTZcdTZlMjFcdTU5OTJcdTdhZWZcdTc3ZWRcdTk1M2JcdTZiYjVcdTY1YWRcdTdmMGVc''@;'; put 'put ''dTU4MDZcdTUxNTFcdTk2MWZcdTViZjlcdTU4YTlcdTU0MjhcdThlNzJcdTY1NjZcdTk4N2ZcdTU2ZTRcdTk0OWRcdTc2ZmVcdTkwNDFcdTYzODdcdTU0YzZcdTU5MWFcdTU5M2FcdTU3OWJcdThlYjJcdTY3MzVcdThkZmFcdTgyMzVcdTUyNDFcdTYwZjBcdTU4MTVcdTg2ZmVcdTVjZThcdTll''@;'; put 'put ''NDVcdTRmYzRcdTk4OWRcdThiYjlcdTVhMjVcdTYwNzZcdTUzODRcdTYyN2NcdTkwNGZcdTkxMDJcdTk5N2ZcdTYwNjlcdTgwMGNcdTUxM2ZcdTgwMzNcdTVjMTRcdTk5NzVcdTZkMzFcdTRlOGNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4''@;'; put 'put ''Ml1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxODJdW3BdXT00NjU5MitwLGJbNDY1OTIrcF09X1sxODJdW3BdKTtmb3IoX1sxODNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThkMzBcdTUzZDFcdTdmNWFcdTdiNGZcdTRmMTBcdTRlNGZcdTk2MDBcdTZjZDVcdTczZDBcdTg1ZTlcdTVlMDZcdTc1NmFcdTdmZmJcdTZhMGFcdTc3ZmVcdTk0OTJcdTdlNDFcdTUxZTFcdTcw''@;'; put 'put ''ZTZcdTUzY2RcdThmZDRcdTgzMDNcdThkMjlcdTcyYWZcdTk5NmRcdTZjZGJcdTU3NGFcdTgyYjNcdTY1YjlcdTgwYWFcdTYyM2ZcdTk2MzJcdTU5YThcdTRlZmZcdThiYmZcdTdlYmFcdTY1M2VcdTgzZjJcdTk3NWVcdTU1NjFcdTk4ZGVcdTgwYTVcdTUzMmFcdThiZmRcdTU0MjBcdTgwYmFc''@;'; put 'put ''dTVlOWZcdTZjYjhcdThkMzlcdTgyYWNcdTkxNWFcdTU0MjlcdTZjMWJcdTUyMDZcdTdlYjdcdTU3NWZcdTcxMWFcdTZjN2VcdTdjODlcdTU5NGJcdTRlZmRcdTVmZmZcdTYxMjRcdTdjYWFcdTRlMzBcdTVjMDFcdTY3YWJcdTg3MDJcdTVjZjBcdTk1MGJcdTk4Y2VcdTc1YWZcdTcwZmRcdTkw''@;'; put 'put ''MjJcdTUxYWZcdTdmMWRcdThiYmRcdTU5NDlcdTUxZTRcdTRmNWJcdTU0MjZcdTU5MmJcdTY1NzdcdTgwYTRcdTViNzVcdTYyNzZcdTYyYzJcdThmOTBcdTVlNDVcdTZjMWZcdTdiMjZcdTRmMGZcdTRmZDhcdTY3MGRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODNdLmxlbmd0aDsrK3Ap''@;'; put 'put ''NjU1MzMhPT1fWzE4M11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxODNdW3BdXT00Njg0OCtwLGJbNDY4NDgrcF09X1sxODNdW3BdKTtmb3IoX1sxODRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkNmVcdTZkYWFcdTc5OGZcdTg4YjFcdTVmMTdcdTc1MmJcdTYyOWFcdThmODVcdTRmZWZcdTkxZGNcdTY1YTdcdTgxMmZcdTgxNTFcdTVlOWNcdTgxNTBcdThkNzRcdTUy''@;'; put 'put ''NmZcdTg5ODZcdThkNGJcdTU5MGRcdTUwODVcdTRlZDhcdTk2MWNcdTcyMzZcdTgxNzlcdThkMWZcdTViY2NcdThiYTNcdTk2NDRcdTU5ODdcdTdmMWFcdTU0OTBcdTU2NzZcdTU2MGVcdThiZTVcdTY1MzlcdTY5ODJcdTk0OTlcdTc2ZDZcdTZlODlcdTVlNzJcdTc1MThcdTY3NDZcdTY3ZDFc''@;'; put 'put ''dTdhZmZcdTgwOWRcdThkNzZcdTYxMWZcdTc5YzZcdTY1NjJcdThkNjNcdTUxODhcdTUyMWFcdTk0YTJcdTdmMzhcdTgwOWJcdTdlYjJcdTVjOTdcdTZlMmZcdTY3NjBcdTdiZDlcdTc2OGJcdTlhZDhcdTgxOGZcdTdmOTRcdTdjZDVcdTY0MWVcdTk1NTBcdTdhM2ZcdTU0NGFcdTU0ZTVcdTZi''@;'; put 'put ''NGNcdTY0MDFcdTYyMDhcdTllM2RcdTgwZjNcdTc1OTlcdTUyNzJcdTk3NjlcdTg0NWJcdTY4M2NcdTg2ZTRcdTk2MDFcdTk2OTRcdTk0ZWNcdTRlMmFcdTU0MDRcdTdlZDlcdTY4MzlcdThkZGZcdTgwMTVcdTY2ZjRcdTVlOWFcdTdmYjlcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODRd''@;'; put 'put ''Lmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4NF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxODRdW3BdXT00NzEwNCtwLGJbNDcxMDQrcF09X1sxODRdW3BdKTtmb3IoX1sxODVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU3YzJcdTgwM2ZcdTY4OTdcdTVkZTVcdTY1M2JcdTUyOWZcdTYwNmRcdTlmOWFcdTRmOWJcdThlYWNcdTUxNmNcdTViYWJcdTVmMTNcdTVkZTlcdTZj''@;'; put 'put ''NWVcdTYyZjFcdThkMjFcdTUxNzFcdTk0YTlcdTUyZmVcdTZjOWZcdTgyZGZcdTcyZDdcdTU3YTJcdTY3ODRcdThkMmRcdTU5MWZcdThmOWNcdTgzYzdcdTU0OTVcdTdiOGRcdTRmMzBcdTZjYmRcdTViNjRcdTU5ZDFcdTlmMTNcdTUzZTRcdTg2Y2FcdTlhYThcdThjMzdcdTgwYTFcdTY1NDVc''@;'; put 'put ''dTk4N2VcdTU2ZmFcdTk2YzdcdTUyMmVcdTc0ZGNcdTUyNTBcdTViZTFcdTYzMDJcdTg5MDJcdTRlNTZcdTYyZDBcdTYwMmFcdTY4ZmFcdTUxNzNcdTViOThcdTUxYTBcdTg5YzJcdTdiYTFcdTk5ODZcdTdmNTBcdTYwZWZcdTcwNGNcdThkMmZcdTUxNDlcdTVlN2ZcdTkwMWJcdTc0NzBcdTg5''@;'; put 'put ''YzRcdTU3MmRcdTc4NDVcdTVmNTJcdTlmOWZcdTk1ZmFcdThmNjhcdTliM2NcdThiZTFcdTc2NzhcdTY4NDJcdTY3ZGNcdThkZWFcdThkMzVcdTUyM2RcdThmOGFcdTZlZGFcdTY4Y2RcdTk1MDVcdTkwZWRcdTU2ZmRcdTY3OWNcdTg4ZjlcdThmYzdcdTU0YzhcdWZmZmQiLnNwbGl0KCIiKSxw''@;'; put 'put ''PTA7cCE9X1sxODVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4NV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxODVdW3BdXT00NzM2MCtwLGJbNDczNjArcF09X1sxODVdW3BdKTtmb3IoX1sxODZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlhYjhcdTViNjlcdTZkNzdcdTZjMjZcdTRlYTVcdTViYjNcdTlhODdcdTkxNjNcdTYxYThcdTkwYWZcdTk3ZTlcdTU0MmJcdTZk''@;'; put 'put ''YjVcdTViZDJcdTUxZmRcdTU1OGFcdTdmNTVcdTdmZjBcdTY0YmNcdTYzNGRcdTY1ZjFcdTYxYmVcdTYwOGRcdTcxMGFcdTZjNTdcdTZjNDlcdTU5MmZcdTY3NmRcdTgyMmFcdTU4ZDVcdTU2OGVcdThjNmFcdTZiZWJcdTkwZGRcdTU5N2RcdTgwMTdcdTUzZjdcdTZkNjlcdTU0NzVcdTU1OWRc''@;'; put 'put ''dTgzNzdcdTgzY2ZcdTY4MzhcdTc5YmVcdTU0OGNcdTRmNTVcdTU0MDhcdTc2ZDJcdThjODlcdTk2MDJcdTZjYjNcdTZkYjhcdThkNmJcdTg5MTBcdTllNjRcdThkM2FcdTU2M2ZcdTllZDFcdTc1ZDVcdTVmODhcdTcyZTBcdTYwNjhcdTU0ZmNcdTRlYThcdTZhMmFcdTg4NjFcdTYwNTJcdThm''@;'; put 'put ''NzBcdTU0YzRcdTcwZDhcdTg2NzlcdTllM2ZcdTZkMmFcdTViOGZcdTVmMThcdTdlYTJcdTU1ODlcdTRmYWZcdTczMzRcdTU0M2NcdTUzOWFcdTUwMTlcdTU0MGVcdTU0N2NcdTRlNGVcdTVmZmRcdTc0NWFcdTU4ZjZcdTg0NmJcdTgwZTFcdTg3NzRcdTcyZDBcdTdjY2FcdTZlNTZcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxwPTA7cCE9X1sxODZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4Nl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxODZdW3BdXT00NzYxNitwLGJbNDc2MTYrcF09X1sxODZdW3BdKTtmb3IoX1sxODddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmMjdcdTg2NGVcdTU1MmNcdTYyYTRcdTRlOTJcdTZjYWFcdTYyMzdcdTgyYjFcdTU0ZDdcdTUzNGVcdTcz''@;'; put 'put ''M2VcdTZlZDFcdTc1M2JcdTUyMTJcdTUzMTZcdThiZGRcdTY5ZDBcdTVmOGFcdTYwMDBcdTZkZWVcdTU3NGZcdTZiMjJcdTczYWZcdTY4NTNcdThmZDhcdTdmMTNcdTYzNjJcdTYwYTNcdTU1MjRcdTc1ZWFcdThjNjJcdTcxMTVcdTZkYTNcdTViYTZcdTVlN2JcdTgzNTJcdTYxNGNcdTllYzRc''@;'; put 'put ''dTc4ZmFcdTg3NTdcdTdjMjdcdTc2ODdcdTUxZjBcdTYwZjZcdTcxNGNcdTY2NDNcdTVlNGNcdTYwNGRcdThjMGVcdTcwNzBcdTYzMjVcdThmODlcdTVmYmRcdTYwNjJcdTg2ZDRcdTU2ZGVcdTZiYzFcdTYwOTRcdTYxNjdcdTUzNDlcdTYwZTBcdTY2NjZcdThkM2ZcdTc5ZmRcdTRmMWFcdTcw''@;'; put 'put ''ZTlcdTZjNDdcdThiYjNcdThiZjJcdTdlZDhcdTgzNjRcdTY2MGZcdTVhNWFcdTliNDJcdTZkNTFcdTZkZjdcdThjNDFcdTZkM2JcdTRmMTlcdTcwNmJcdTgzYjdcdTYyMTZcdTYwZDFcdTk3MGRcdThkMjdcdTc5NzhcdTUxZmJcdTU3M2VcdTU3ZmFcdTY3M2FcdTc1NzhcdTdhM2RcdTc5ZWZc''@;'; put 'put ''dTdiOTVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4N11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxODddW3BdXT00Nzg3MitwLGJbNDc4NzIrcF09X1sxODddW3BdKTtmb3IoX1sxODhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwOGNcdTk5NjVcdThmZjlcdTZmYzBcdThiYTVcdTllMjFcdTU5ZWNcdTdlZTlcdTdm''@;'; put 'put ''MDlcdTU0MDlcdTY3ODFcdTY4ZDhcdThmOTFcdTdjNGRcdTk2YzZcdTUzY2FcdTYwMjVcdTc1YmVcdTZjNzJcdTUzNzNcdTVhYzlcdTdlYTdcdTYzMjRcdTUxZTBcdTgxMGFcdTVkZjFcdTg0ZGZcdTYyODBcdTUxODBcdTViNjNcdTRmMGVcdTc5NmRcdTUyNDJcdTYwYjhcdTZkNGVcdTViYzRc''@;'; put 'put ''dTViYzJcdThiYTFcdThiYjBcdTY1ZTJcdTVmY2NcdTk2NDVcdTU5OTNcdTdlZTdcdTdlYWFcdTU2MDlcdTY3YjdcdTU5MzlcdTRmNzNcdTViYjZcdTUyYTBcdTgzNWFcdTk4OGFcdThkM2VcdTc1MzJcdTk0YmVcdTUwNDdcdTdhM2NcdTRlZjdcdTY3YjZcdTlhN2VcdTVhYzFcdTZiN2NcdTc2''@;'; put 'put ''ZDFcdTU3NWFcdTVjMTZcdTdiM2FcdTk1ZjRcdTcxNGVcdTUxN2NcdTgwYTlcdTgyNzBcdTU5NzhcdTdmMDRcdTgzMjdcdTY4YzBcdTY3ZWNcdTc4YjFcdTc4NzdcdTYyZTNcdTYzNjFcdTdiODBcdTRmZWRcdTUyNmFcdTUxY2ZcdTgzNTBcdTY5ZGJcdTkyNzRcdThkZjVcdThkMzFcdTg5YzFc''@;'; put 'put ''dTk1MmVcdTdiYWRcdTRlZjZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4OF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxODhdW3BdXT00ODEyOCtwLGJbNDgxMjgrcF09X1sxODhdW3BdKTtmb3IoX1sxODldPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUwNjVcdTgyMzBcdTUyNTFcdTk5NmZcdTZlMTBcdTZlODVcdTZk''@;'; put 'put ''YTdcdTVlZmFcdTUwZjVcdTU5ZGNcdTVjMDZcdTZkNDZcdTZjNWZcdTc1ODZcdTg0OGJcdTY4NjhcdTU5NTZcdThiYjJcdTUzMjBcdTkxNzFcdTk2NGRcdTg1NDlcdTY5MTJcdTc5MDFcdTcxMjZcdTgwZjZcdTRlYTRcdTkwY2FcdTZkNDdcdTlhODRcdTVhMDdcdTU2YmNcdTY0MDVcdTk0ZjBc''@;'; put 'put ''dTc3ZWJcdTRmYTVcdTgxMWFcdTcyZTFcdTg5ZDJcdTk5N2FcdTdmMzRcdTdlZGVcdTUyN2ZcdTY1NTlcdTkxNzVcdThmN2ZcdThmODNcdTUzZWJcdTdhOTZcdTYzZWRcdTYzYTVcdTc2ODZcdTc5ZjhcdTg4NTdcdTk2MzZcdTYyMmFcdTUyYWJcdTgyODJcdTY4NTRcdTY3NzBcdTYzNzdcdTc3''@;'; put 'put ''NmJcdTdhZWRcdTZkMDFcdTdlZDNcdTg5ZTNcdTU5ZDBcdTYyMTJcdTg1YzlcdTgyYTVcdTc1NGNcdTUwMWZcdTRlY2JcdTc1YTVcdThiZWJcdTVjNGFcdTVkZmVcdTdiNGJcdTY1YTRcdTkxZDFcdTRlY2FcdTZkMjVcdTg5NWZcdTdkMjdcdTk1MjZcdTRlYzVcdThjMjhcdThmZGJcdTk3NzNc''@;'; put 'put ''dTY2NGJcdTc5ODFcdThmZDFcdTcwZWNcdTZkNzhcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4OV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxODldW3BdXT00ODM4NCtwLGJbNDgzODQrcF09X1sxODldW3BdKTtmb3IoX1sxOTBdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjM2RcdTUyYjJcdTgzNDZcdTUxNjJcdTgz''@;'; put 'put ''MGVcdTc3NWJcdTY2NzZcdTljYjhcdTRlYWNcdTYwY2FcdTdjYmVcdTdjYjNcdTdlY2ZcdTRlOTVcdThiNjZcdTY2NmZcdTk4ODhcdTk3NTlcdTU4ODNcdTY1NmNcdTk1NWNcdTVmODRcdTc1YzlcdTk3NTZcdTdhZGZcdTdhZGVcdTUxYzBcdTcwYWZcdTdhOThcdTYzZWFcdTdhNzZcdTdlYTBc''@;'; put 'put ''dTczOTZcdTk3ZWRcdTRlNDVcdTcwNzhcdTRlNWRcdTkxNTJcdTUzYTlcdTY1NTFcdTY1ZTdcdTgxZmNcdTgyMDVcdTU0OGVcdTVjMzFcdTc1OWFcdTk3YTBcdTYyZDhcdTcyZDlcdTc1YmRcdTVjNDVcdTlhNzlcdTgzY2FcdTVjNDBcdTU0ODBcdTc3ZTlcdTRlM2VcdTZjYWVcdTgwNWFcdTYy''@;'; put 'put ''ZDJcdTYzNmVcdTVkZThcdTUxNzdcdThkZGRcdThlMWVcdTk1MmZcdTRmZjFcdTUzZTVcdTYwZTdcdTcwYWNcdTUyNjdcdTYzNTBcdTllNDNcdTVhMWZcdTUwMjZcdTc3MzdcdTUzNzdcdTdlZTJcdTY0ODVcdTY1MmJcdTYyODlcdTYzOThcdTUwMTRcdTcyMzVcdTg5YzlcdTUxYjNcdThiYzBc''@;'; put 'put ''dTdlZGRcdTU3NDdcdTgzY2NcdTk0YTdcdTUxOWJcdTU0MWJcdTVjZmJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5MF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxOTBdW3BdXT00ODY0MCtwLGJbNDg2NDArcF09X1sxOTBdW3BdKTtmb3Io''@;'; put 'put ''X1sxOTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmY2FcdTdhZTNcdTZk''@;'; put 'put ''NWFcdTkwZTFcdTlhOGZcdTU1ODBcdTU0OTZcdTUzNjFcdTU0YWZcdTVmMDBcdTYzZTlcdTY5NzdcdTUxZWZcdTYxNjhcdTUyMGFcdTU4MmFcdTUyZDhcdTU3NGVcdTc4MGRcdTc3MGJcdTVlYjdcdTYxNzdcdTdjZTBcdTYyNWJcdTYyOTdcdTRlYTJcdTcwOTVcdTgwMDNcdTYyZjdcdTcwZTRc''@;'; put 'put ''dTk3NjBcdTU3NzdcdTgyZGJcdTY3ZWZcdTY4ZjVcdTc4ZDVcdTk4OTdcdTc5ZDFcdTU4ZjNcdTU0YjNcdTUzZWZcdTZlMzRcdTUxNGJcdTUyM2JcdTViYTJcdThiZmVcdTgwYWZcdTU1NDNcdTU3YTZcdTYwNzNcdTU3NTFcdTU0MmRcdTdhN2FcdTYwNTBcdTViNTRcdTYzYTdcdTYyYTBcdTUz''@;'; put 'put ''ZTNcdTYyNjNcdTViYzdcdTY3YWZcdTU0ZWRcdTdhOWZcdTgyZTZcdTkxNzdcdTVlOTNcdTg4ZTRcdTU5MzhcdTU3YWVcdTYzMGVcdThkZThcdTgwZWZcdTU3NTdcdTdiNzdcdTRmYTlcdTVmZWJcdTViYmRcdTZiM2VcdTUzMjFcdTdiNTBcdTcyYzJcdTY4NDZcdTc3ZmZcdTc3MzZcdTY1Zjdc''@;'; put 'put ''dTUxYjVcdTRlOGZcdTc2ZDRcdTVjYmZcdTdhYTVcdTg0NzVcdTU5NGVcdTliNDFcdTUwODBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5MV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxOTFdW3BdXT00ODg5NitwLGJbNDg4OTYrcF09X1sx''@;'; put 'put ''OTFdW3BdKTtmb3IoX1sxOTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk5''@;'; put 'put ''ODhcdTYxMjdcdTZlODNcdTU3NjRcdTY2MDZcdTYzNDZcdTU2ZjBcdTYyZWNcdTYyNjlcdTVlZDNcdTk2MTRcdTU3ODNcdTYyYzlcdTU1ODdcdTg3MjFcdTgxNGFcdThmYTNcdTU1NjZcdTgzYjFcdTY3NjVcdThkNTZcdTg0ZGRcdTVhNmFcdTY4MGZcdTYyZTZcdTdiZWVcdTk2MTFcdTUxNzBc''@;'; put 'put ''dTZmOWNcdThjMzBcdTYzZmRcdTg5YzhcdTYxZDJcdTdmMDZcdTcwYzJcdTZlZTVcdTc0MDVcdTY5OTRcdTcyZmNcdTVlY2FcdTkwY2VcdTY3MTdcdTZkNmFcdTYzNWVcdTUyYjNcdTcyNjJcdTgwMDFcdTRmNmNcdTU5ZTVcdTkxNmFcdTcwZDlcdTZkOWRcdTUyZDJcdTRlNTBcdTk2ZjdcdTk1''@;'; put 'put ''NmRcdTg1N2VcdTc4Y2FcdTdkMmZcdTUxMjFcdTU3OTJcdTY0YzJcdTgwOGJcdTdjN2JcdTZjZWFcdTY4ZjFcdTY5NWVcdTUxYjdcdTUzOThcdTY4YThcdTcyODFcdTllY2VcdTdiZjFcdTcyZjhcdTc5YmJcdTZmMTNcdTc0MDZcdTY3NGVcdTkxY2NcdTljYTRcdTc5M2NcdTgzODlcdTgzNTRc''@;'; put 'put ''dTU0MGZcdTY4MTdcdTRlM2RcdTUzODlcdTUyYjFcdTc4M2VcdTUzODZcdTUyMjlcdTUwODhcdTRmOGJcdTRmZDBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5Ml1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxOTJdW3BdXT00OTE1MitwLGJb''@;'; put 'put ''NDkxNTIrcF09X1sxOTJdW3BdKTtmb3IoX1sxOTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTc1ZTJcdTdhY2JcdTdjOTJcdTZjYTVcdTk2YjZcdTUyOWJcdTc0ODNcdTU0ZTlcdTRmZTlcdTgwNTRcdTgzYjJcdThmZGVcdTk1NzBcdTVlYzlcdTYwMWNcdTZkOWZcdTVlMThcdTY1NWJcdTgxMzhcdTk0ZmVcdTYwNGJcdTcwYmNcdTdlYzNcdTdjYWVcdTUxYzlcdTY4ODFc''@;'; put 'put ''dTdjYjFcdTgyNmZcdTRlMjRcdThmODZcdTkxY2ZcdTY2N2VcdTRlYWVcdThjMDVcdTY0YTlcdTgwNGFcdTUwZGFcdTc1OTdcdTcxY2VcdTViZTVcdThmYmRcdTZmNjZcdTRlODZcdTY0ODJcdTk1NjNcdTVlZDZcdTY1OTlcdTUyMTdcdTg4YzJcdTcwYzhcdTUyYTNcdTczMGVcdTc0MzNcdTY3''@;'; put 'put ''OTdcdTc4ZjdcdTk3MTZcdTRlMzRcdTkwYmJcdTljZGVcdTZkY2JcdTUxZGJcdThkNDFcdTU0MWRcdTYyY2VcdTczYjJcdTgzZjFcdTk2ZjZcdTlmODRcdTk0YzNcdTRmMzZcdTdmOWFcdTUxY2NcdTcwNzVcdTk2NzVcdTVjYWRcdTk4ODZcdTUzZTZcdTRlZTRcdTZlOWNcdTc0MDlcdTY5YjRc''@;'; put 'put ''dTc4NmJcdTk5OGZcdTc1NTlcdTUyMThcdTc2MjRcdTZkNDFcdTY3ZjNcdTUxNmRcdTlmOTlcdTgwNGJcdTU0OTlcdTdiM2NcdTdhYmZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5M11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxOTNdW3Bd''@;'; put 'put ''XT00OTQwOCtwLGJbNDk0MDgrcF09X1sxOTNdW3BdKTtmb3IoX1sxOTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2ODZcdTU3ODRcdTYyZTJcdTk2NDdcdTY5N2NcdTVhMDRcdTY0MDJcdTdiZDNcdTZmMGZcdTk2NGJcdTgyYTZcdTUzNjJcdTk4ODVcdTVlOTBcdTcwODlcdTYzYjNcdTUzNjRcdTg2NGZcdTljODFcdTllOTNcdTc4OGNcdTk3MzJcdThkZWZcdThkNDJc''@;'; put 'put ''dTllN2ZcdTZmNWVcdTc5ODRcdTVmNTVcdTk2NDZcdTYyMmVcdTlhNzRcdTU0MTVcdTk0ZGRcdTRmYTNcdTY1YzVcdTVjNjVcdTVjNjFcdTdmMTVcdTg2NTFcdTZjMmZcdTVmOGJcdTczODdcdTZlZTRcdTdlZmZcdTVjZTZcdTYzMWJcdTViNmFcdTZlZTZcdTUzNzVcdTRlNzFcdTYzYTBcdTc1''@;'; put 'put ''NjVcdTYyYTFcdThmNmVcdTRmMjZcdTRlZDFcdTZjYTZcdTdlYjZcdThiYmFcdTg0MWRcdTg3YmFcdTdmNTdcdTkwM2JcdTk1MjNcdTdiYTlcdTlhYTFcdTg4ZjhcdTg0M2RcdTZkMWJcdTlhODZcdTdlZGNcdTU5ODhcdTllYmJcdTczOWJcdTc4MDFcdTg2ODJcdTlhNmNcdTlhODJcdTU2MWJc''@;'; put 'put ''dTU0MTdcdTU3Y2JcdTRlNzBcdTllYTZcdTUzNTZcdThmYzhcdTgxMDlcdTc3OTJcdTk5OTJcdTg2ZWVcdTZlZTFcdTg1MTNcdTY2ZmNcdTYxNjJcdTZmMmJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5NF1bcF0uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KElbX1sxOTRdW3BdXT00OTY2NCtwLGJbNDk2NjQrcF09X1sxOTRdW3BdKTtmb3IoX1sxOTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThjMjlcdTgyOTJcdTgzMmJcdTc2ZjJcdTZjMTNcdTVmZDlcdTgzYmRcdTczMmJcdTgzMDVcdTk1MWFcdTZiZGJcdTc3ZGJcdTk0YzZcdTUzNmZcdTgzMDJcdTUxOTJcdTVlM2RcdThjOGNcdThkMzhcdTRlNDhcdTczYWJcdTY3OWFc''@;'; put 'put ''dTY4ODVcdTkxNzZcdTk3MDlcdTcxNjRcdTZjYTFcdTc3MDlcdTVhOTJcdTk1NDFcdTZiY2ZcdTdmOGVcdTY2MjdcdTViZDBcdTU5YjlcdTVhOWFcdTk1ZThcdTk1ZjdcdTRlZWNcdTg0MGNcdTg0OTlcdTZhYWNcdTc2ZGZcdTk1MzBcdTczMWJcdTY4YTZcdTViNWZcdTc3MmZcdTkxOWFcdTk3''@;'; put 'put ''NjFcdTdjZGNcdThmZjdcdThjMWNcdTVmMjVcdTdjNzNcdTc5ZDhcdTg5YzVcdTZjY2NcdTg3MWNcdTViYzZcdTVlNDJcdTY4YzlcdTc3MjBcdTdlZjVcdTUxOTVcdTUxNGRcdTUyYzlcdTVhMjlcdTdmMDVcdTk3NjJcdTgyZDdcdTYzY2ZcdTc3ODRcdTg1ZDBcdTc5ZDJcdTZlM2FcdTVlOTlc''@;'; put 'put ''dTU5OTlcdTg1MTFcdTcwNmRcdTZjMTFcdTYyYmZcdTc2YmZcdTY1NGZcdTYwYWZcdTk1ZmRcdTY2MGVcdTg3OWZcdTllMjNcdTk0ZWRcdTU0MGRcdTU0N2RcdThjMmNcdTY0NzhcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5NV1bcF0uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKElbX1sxOTVdW3BdXT00OTkyMCtwLGJbNDk5MjArcF09X1sxOTVdW3BdKTtmb3IoX1sxOTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0NzlcdTg2MTFcdTZhMjFcdTgxOWNcdTc4ZThcdTY0NjlcdTliNTRcdTYyYjlcdTY3MmJcdTgzYWJcdTU4YThcdTllZDhcdTZjYWJcdTZmMjBcdTViZGVcdTk2NGNcdThjMGJcdTcyNWZcdTY3ZDBcdTYyYzdc''@;'; put 'put ''dTcyNjFcdTRlYTlcdTU5YzZcdTZiY2RcdTU4OTNcdTY2YWVcdTVlNTVcdTUyZGZcdTYxNTVcdTY3MjhcdTc2ZWVcdTc3NjZcdTcyNjdcdTdhNDZcdTYyZmZcdTU0ZWFcdTU0NTBcdTk0YTBcdTkwYTNcdTVhMWNcdTdlYjNcdTZjMTZcdTRlNDNcdTU5NzZcdTgwMTBcdTU5NDhcdTUzNTdcdTc1''@;'; put 'put ''MzdcdTk2YmVcdTU2Y2FcdTYzMjBcdTgxMTFcdTYwN2NcdTk1ZjlcdTZkZDZcdTU0NjJcdTk5ODFcdTUxODVcdTVhZTlcdTgwZmRcdTU5YWVcdTk3MTNcdTUwMmFcdTZjZTVcdTVjM2NcdTYyZGZcdTRmNjBcdTUzM2ZcdTgxN2JcdTkwMDZcdTZlYmFcdTg1MmJcdTYyYzhcdTVlNzRcdTc4YmVc''@;'; put 'put ''dTY0YjVcdTYzN2JcdTVmZjVcdTVhMThcdTkxN2ZcdTllMWZcdTVjM2ZcdTYzNGZcdTgwNDJcdTViN2RcdTU1NmVcdTk1NGFcdTk1NGRcdTZkODVcdTYwYThcdTY3ZTBcdTcyZGVcdTUxZGRcdTViODFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTZdLmxlbmd0aDsrK3ApNjU1MzMhPT1f''@;'; put 'put ''WzE5Nl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxOTZdW3BdXT01MDE3NitwLGJbNTAxNzYrcF09X1sxOTZdW3BdKTtmb3IoX1sxOTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyZTdcdTZjZGVcdTcyNWJcdTYyNmRcdTk0YWVcdTdlYmRcdTgxMTNcdTZkNTNcdTUxOWNcdTVmMDRcdTU5NzRcdTUyYWFcdTYwMTJcdTU5NzNcdTY2OTZcdTg2NTBcdTc1OWZcdTYzMmFc''@;'; put 'put ''dTYxZTZcdTdjZWZcdThiZmFcdTU0ZTZcdTZiMjdcdTllMjVcdTZiYjRcdTg1ZDVcdTU0NTVcdTUwNzZcdTZjYTRcdTU1NmFcdThkYjRcdTcyMmNcdTVlMTVcdTYwMTVcdTc0MzZcdTYyY2RcdTYzOTJcdTcyNGNcdTVmOThcdTZlNDNcdTZkM2VcdTY1MDBcdTZmNThcdTc2ZDhcdTc4ZDBcdTc2''@;'; put 'put ''ZmNcdTc1NTRcdTUyMjRcdTUzZGJcdTRlNTNcdTVlOWVcdTY1YzFcdTgwMmFcdTgwZDZcdTYyOWJcdTU0ODZcdTUyMjhcdTcwYWVcdTg4OGRcdThkZDFcdTZjZTFcdTU0NzhcdTgwZGFcdTU3ZjlcdTg4ZjRcdThkNTRcdTk2NmFcdTkxNGRcdTRmNjlcdTZjOWJcdTU1YjdcdTc2YzZcdTc4MzBc''@;'; put 'put ''dTYyYThcdTcwZjlcdTZmOGVcdTVmNmRcdTg0ZWNcdTY4ZGFcdTc4N2NcdTdiZjdcdTgxYThcdTY3MGJcdTllNGZcdTYzNjdcdTc4YjBcdTU3NmZcdTc4MTJcdTk3MzlcdTYyNzlcdTYyYWJcdTUyODhcdTc0MzVcdTZiZDdcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTddLmxlbmd0aDsr''@;'; put 'put ''K3ApNjU1MzMhPT1fWzE5N11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxOTddW3BdXT01MDQzMitwLGJbNTA0MzIrcF09X1sxOTddW3BdKTtmb3IoX1sxOThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1NjRcdTgxM2VcdTc1YjJcdTc2YWVcdTUzMzlcdTc1ZGVcdTUwZmJcdTVjNDFcdThiNmNcdTdiYzdcdTUwNGZcdTcyNDdcdTlhOTdcdTk4ZDhcdTZmMDJcdTc0ZTJc''@;'; put 'put ''dTc5NjhcdTY0ODdcdTc3YTVcdTYyZmNcdTk4OTFcdThkMmJcdTU0YzFcdTgwNThcdTRlNTJcdTU3NmFcdTgyZjlcdTg0MGRcdTVlNzNcdTUxZWRcdTc0ZjZcdThiYzRcdTVjNGZcdTU3NjFcdTZjZmNcdTk4ODdcdTVhNDZcdTc4MzRcdTliNDRcdThmZWJcdTdjOTVcdTUyNTZcdTYyNTFcdTk0''@;'; put 'put ''ZmFcdTRlYzZcdTgzODZcdTg0NjFcdTgzZTlcdTg0YjJcdTU3ZDRcdTY3MzRcdTU3MDNcdTY2NmVcdTZkNjZcdThjMzFcdTY2ZGRcdTcwMTFcdTY3MWZcdTZiM2FcdTY4MTZcdTYyMWFcdTU5YmJcdTRlMDNcdTUxYzRcdTZmMDZcdTY3ZDJcdTZjOGZcdTUxNzZcdTY4Y2JcdTU5NDdcdTZiNjdc''@;'; put 'put ''dTc1NjZcdTVkMGVcdTgxMTBcdTlmNTBcdTY1ZDdcdTc5NDhcdTc5NDFcdTlhOTFcdThkNzdcdTVjODJcdTRlNWVcdTRmMDFcdTU0MmZcdTU5NTFcdTc4MGNcdTU2NjhcdTZjMTRcdThmYzRcdTVmMDNcdTZjN2RcdTZjZTNcdThiYWJcdTYzOTBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sx''@;'; put 'put ''OThdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5OF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxOThdW3BdXT01MDY4OCtwLGJbNTA2ODgrcF09X1sxOThdW3BdKTtmb3IoX1sxOTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNzBcdTZkM2RcdTcyNzVcdTYyNjZcdTk0OGVcdTk0YzVcdTUzNDNcdThmYzFcdTdiN2VcdTRlZGZcdThjMjZcdTRlN2VcdTllZDRcdTk0YjFc''@;'; put 'put ''dTk0YjNcdTUyNGRcdTZmNWNcdTkwNjNcdTZkNDVcdThjMzRcdTU4MTFcdTVkNGNcdTZiMjBcdTZiNDlcdTY3YWFcdTU0NWJcdTgxNTRcdTdmOGNcdTU4OTlcdTg1MzdcdTVmM2FcdTYyYTJcdTZhNDdcdTk1MzlcdTY1NzJcdTYwODRcdTY4NjVcdTc3YTdcdTRlNTRcdTRmYThcdTVkZTdcdTk3''@;'; put 'put ''OThcdTY0YWNcdTdmZDhcdTVjZWRcdTRmY2ZcdTdhOGRcdTUyMDdcdTgzMDRcdTRlMTRcdTYwMmZcdTdhODNcdTk0YTZcdTRmYjVcdTRlYjJcdTc5ZTZcdTc0MzRcdTUyZTRcdTgyYjlcdTY0ZDJcdTc5YmRcdTViZGRcdTZjODFcdTk3NTJcdThmN2JcdTZjMjJcdTUwM2VcdTUzN2ZcdTZlMDVc''@;'; put 'put ''dTY0Y2VcdTY2NzRcdTZjMzBcdTYwYzVcdTk4NzdcdThiZjdcdTVlODZcdTc0M2NcdTdhNzdcdTc5Y2JcdTRlMThcdTkwYjFcdTc0MDNcdTZjNDJcdTU2ZGFcdTkxNGJcdTZjYzVcdThkOGJcdTUzM2FcdTg2YzZcdTY2ZjJcdThlYWZcdTVjNDhcdTlhNzFcdTZlMjBcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxwPTA7cCE9X1sxOTldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5OV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxOTldW3BdXT01MDk0NCtwLGJbNTA5NDQrcF09X1sxOTldW3BdKTtmb3IoX1syMDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzZDZcdTVhMzZcdTlmOGJcdThkYTNcdTUzYmJcdTU3MDhcdTk4YTdcdTY3NDNcdTkxOWJcdTZjYzlcdTUxNjhcdTc1Y2Fc''@;'; put 'put ''dTYyZjNcdTcyYWNcdTUyMzhcdTUyOWRcdTdmM2FcdTcwOTRcdTc2MzhcdTUzNzRcdTllNGFcdTY5YjdcdTc4NmVcdTk2YzBcdTg4ZDlcdTdmYTRcdTcxMzZcdTcxYzNcdTUxODlcdTY3ZDNcdTc0ZTRcdTU4ZTRcdTY1MThcdTU2YjdcdThiYTlcdTk5NzZcdTYyNzBcdTdlZDVcdTYwZjlcdTcw''@;'; put 'put ''ZWRcdTU4ZWNcdTRlYzFcdTRlYmFcdTVmY2RcdTk3ZTdcdTRlZmJcdThiYTRcdTUyMDNcdTU5OGFcdTdlYWJcdTYyNTRcdTRlY2RcdTY1ZTVcdTYyMGVcdTgzMzhcdTg0YzlcdTgzNjNcdTg3OGRcdTcxOTRcdTZlYjZcdTViYjlcdTdlZDJcdTUxOTdcdTYzYzlcdTY3ZDRcdTgwODlcdTgzMzlc''@;'; put 'put ''dTg4MTVcdTUxMTJcdTViN2FcdTU5ODJcdThmYjFcdTRlNzNcdTZjNWRcdTUxNjVcdTg5MjVcdThmNmZcdTk2MmVcdTg1NGFcdTc0NWVcdTk1MTBcdTk1ZjBcdTZkYTZcdTgyZTVcdTVmMzFcdTY0OTJcdTZkMTJcdTg0MjhcdTgxNmVcdTljYzNcdTU4NWVcdThkNWJcdTRlMDlcdTUzYzFcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwMF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMDBdW3BdXT01MTIwMCtwLGJbNTEyMDArcF09X1syMDBdW3BdKTtmb3IoX1syMDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmMWVcdTY1NjNcdTY4NTFcdTU1ZDNcdTRlMjdcdTY0MTRcdTlhOWFcdTYyNmJcdTVhYzJcdTc0NWZc''@;'; put 'put ''dTgyNzJcdTZkYTlcdTY4ZWVcdTUwZTdcdTgzOGVcdTc4MDJcdTY3NDBcdTUyMzlcdTZjOTlcdTdlYjFcdTUwYmJcdTU1NjVcdTcxNWVcdTdiNWJcdTY2NTJcdTczY2FcdTgyZWJcdTY3NDlcdTVjNzFcdTUyMjBcdTcxN2RcdTg4NmJcdTk1ZWFcdTk2NTVcdTY0YzVcdThkNjFcdTgxYjNcdTU1''@;'; put 'put ''ODRcdTZjNTVcdTYyNDdcdTdmMmVcdTU4OTJcdTRmMjRcdTU1NDZcdThkNGZcdTY2NGNcdTRlMGFcdTVjMWFcdTg4ZjNcdTY4YTJcdTYzNGVcdTdhMGRcdTcwZTdcdTgyOGRcdTUyZmFcdTk3ZjZcdTVjMTFcdTU0ZThcdTkwYjVcdTdlY2RcdTU5NjJcdThkNGFcdTg2YzdcdTgyMGNcdTgyMGRc''@;'; put 'put ''dThkNjZcdTY0NDRcdTVjMDRcdTYxNTFcdTZkODlcdTc5M2VcdThiYmVcdTc4MzdcdTc1MzNcdTU0N2JcdTRmMzhcdThlYWJcdTZkZjFcdTVhMjBcdTdlYzVcdTc5NWVcdTZjODhcdTViYTFcdTVhNzZcdTc1MWFcdTgwYmVcdTYxNGVcdTZlMTdcdTU4ZjBcdTc1MWZcdTc1MjVcdTcyNzJcdTUz''@;'; put 'put ''NDdcdTdlZjNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwMV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMDFdW3BdXT01MTQ1NitwLGJbNTE0NTYrcF09X1syMDFdW3BdKTtmb3IoX1syMDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3MDFcdTc2ZGJcdTUyNjlcdTgwZGNcdTU3MjNcdTVlMDhcdTU5MzFcdTcyZWVc''@;'; put 'put ''dTY1YmRcdTZlN2ZcdThiZDdcdTVjMzhcdTg2NzFcdTUzNDFcdTc3ZjNcdTYyZmVcdTY1ZjZcdTRlYzBcdTk4ZGZcdTg2ODBcdTViOWVcdThiYzZcdTUzZjJcdTc3ZTJcdTRmN2ZcdTVjNGVcdTlhNzZcdTU5Y2JcdTVmMGZcdTc5M2FcdTU4ZWJcdTRlMTZcdTY3ZmZcdTRlOGJcdTYyZWRcdThh''@;'; put 'put ''OTNcdTkwMWRcdTUyYmZcdTY2MmZcdTU1ZGNcdTU2NmNcdTkwMDJcdTRlZDVcdTRmOGRcdTkxY2FcdTk5NzBcdTZjMGZcdTVlMDJcdTYwNDNcdTViYTRcdTg5YzZcdThiZDVcdTY1MzZcdTYyNGJcdTk5OTZcdTViODhcdTViZmZcdTYzODhcdTU1MmVcdTUzZDdcdTc2MjZcdTUxN2RcdTg1MmNc''@;'; put 'put ''dTY3YTJcdTY4YjNcdTZiOGFcdTYyOTJcdThmOTNcdTUzZDRcdTgyMTJcdTZkZDFcdTc1OGZcdTRlNjZcdThkNGVcdTViNzBcdTcxOWZcdTg1YWZcdTY2OTFcdTY2ZDlcdTdmNzJcdTg3MDBcdTllY2RcdTlmMjBcdTVjNWVcdTY3MmZcdThmZjBcdTY4MTFcdTY3NWZcdTYyMGRcdTdhZDZcdTU4''@;'; put 'put ''ODVcdTVlYjZcdTY1NzBcdTZmMzFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwMl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMDJdW3BdXT01MTcxMitwLGJbNTE3MTIrcF09X1syMDJdW3BdKTtmb3IoX1syMDNdPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNTVcdTUyMzdcdTgwMGRcdTY0NTRcdTg4NzBcdTc1Mjlc''@;'; put 'put ''dTVlMDVcdTY4MTNcdTYyZjRcdTk3MWNcdTUzY2NcdTcyM2RcdThjMDFcdTZjMzRcdTc3NjFcdTdhMGVcdTU0MmVcdTc3YWNcdTk4N2FcdTgyMWNcdThiZjRcdTc4NTVcdTY3MTRcdTcwYzFcdTY1YWZcdTY0OTVcdTU2MzZcdTYwMWRcdTc5YzFcdTUzZjhcdTRlMWRcdTZiN2JcdTgwODZcdTVi''@;'; put 'put ''ZmFcdTU1ZTNcdTU2ZGJcdTRmM2FcdTRmM2NcdTk5NzJcdTVkZjNcdTY3N2VcdTgwMzhcdTYwMDJcdTk4ODJcdTkwMDFcdTViOGJcdThiYmNcdThiZjVcdTY0MWNcdTgyNThcdTY0ZGVcdTU1ZmRcdTgyY2ZcdTkxNjVcdTRmZDdcdTdkMjBcdTkwMWZcdTdjOWZcdTUwZjNcdTU4NTFcdTZlYWZc''@;'; put 'put ''dTViYmZcdThiYzlcdTgwODNcdTkxNzhcdTg0OWNcdTdiOTdcdTg2N2RcdTk2OGJcdTk2OGZcdTdlZTVcdTlhZDNcdTc4OGVcdTVjODFcdTdhNTdcdTkwNDJcdTk2YTdcdTc5NWZcdTViNTlcdTYzNWZcdTdiMGJcdTg0ZDFcdTY4YWRcdTU1MDZcdTdmMjlcdTc0MTBcdTdkMjJcdTk1MDFcdTYy''@;'; put 'put ''NDBcdTU4NGNcdTRlZDZcdTViODNcdTU5NzlcdTU4NTRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwM11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMDNdW3BdXT01MTk2OCtwLGJbNTE5NjgrcF09X1syMDNdW3BdKTtmb3IoX1syMDRdPSJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTczNmRcdTYzMWVcdThlNGJcdThlMGZc''@;'; put 'put ''dTgwY2VcdTgyZDRcdTYyYWNcdTUzZjBcdTZjZjBcdTkxNWVcdTU5MmFcdTYwMDFcdTZjNzBcdTU3NGRcdTY0NGFcdThkMmFcdTc2MmJcdTZlZTlcdTU3NWJcdTZhODBcdTc1ZjBcdTZmNmRcdThjMmRcdThjMDhcdTU3NjZcdTZiZWZcdTg4OTJcdTc4YjNcdTYzYTJcdTUzZjlcdTcwYWRcdTZj''@;'; put 'put ''NjRcdTU4NThcdTY0MmFcdTU4MDJcdTY4ZTBcdTgxOWJcdTU1MTBcdTdjZDZcdTUwMThcdThlYmFcdTZkY2NcdThkOWZcdTcwZWJcdTYzOGZcdTZkOWJcdTZlZDRcdTdlZTZcdTg0MDRcdTY4NDNcdTkwMDNcdTZkZDhcdTk2NzZcdThiYThcdTU5NTdcdTcyNzlcdTg1ZTRcdTgxN2VcdTc1YmNc''@;'; put 'put ''dThhOGFcdTY4YWZcdTUyNTRcdThlMjJcdTk1MTFcdTYzZDBcdTk4OThcdThlNDRcdTU1N2NcdTRmNTNcdTY2ZmZcdTU2OGZcdTYwZDVcdTZkOTVcdTUyNDNcdTVjNDlcdTU5MjlcdTZkZmJcdTU4NmJcdTc1MzBcdTc1MWNcdTYwNmNcdTgyMTRcdTgxNDZcdTYzMTFcdTY3NjFcdThmZTJcdTc3''@;'; put 'put ''M2FcdThkZjNcdThkMzRcdTk0YzFcdTVlMTZcdTUzODVcdTU0MmNcdTcwYzNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwNF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMDRdW3BdXT01MjIyNCtwLGJbNTIyMjQrcF09X1syMDRdW3BdKTtm''@;'; put 'put ''b3IoX1syMDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjNDBcdTVlZjdc''@;'; put 'put ''dTUwNWNcdTRlYWRcdTVlYWRcdTYzM2FcdTgyNDdcdTkwMWFcdTY4NTBcdTkxNmVcdTc3YjNcdTU0MGNcdTk0ZGNcdTVmNjRcdTdhZTVcdTY4NzZcdTYzNDVcdTdiNTJcdTdlZGZcdTc1ZGJcdTUwNzdcdTYyOTVcdTU5MzRcdTkwMGZcdTUxZjhcdTc5YzNcdTdhODFcdTU2ZmVcdTVmOTJcdTkw''@;'; put 'put ''MTRcdTZkODJcdTVjNjBcdTU3MWZcdTU0MTBcdTUxNTRcdTZlNGRcdTU2ZTJcdTYzYThcdTk4OTNcdTgxN2ZcdTg3MTVcdTg5MmFcdTkwMDBcdTU0MWVcdTVjNmZcdTgxYzBcdTYyZDZcdTYyNThcdTgxMzFcdTllMzVcdTk2NDBcdTlhNmVcdTlhN2NcdTY5MmRcdTU5YTVcdTYyZDNcdTU1M2Vc''@;'; put 'put ''dTYzMTZcdTU0YzdcdTg2ZDlcdTZkM2NcdTVhMDNcdTc0ZTZcdTg4OWNcdTZiNmFcdTU5MTZcdThjNGNcdTVmMmZcdTZlN2VcdTczYTlcdTk4N2RcdTRlMzhcdTcwZjdcdTViOGNcdTc4OTdcdTYzM2RcdTY2NWFcdTc2OTZcdTYwY2JcdTViOWJcdTVhNDlcdTRlMDdcdTgxNTVcdTZjNmFcdTcz''@;'; put 'put ''OGJcdTRlYTFcdTY3ODlcdTdmNTFcdTVmODBcdTY1ZmFcdTY3MWJcdTVmZDhcdTU5ODRcdTVhMDFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwNV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMDVdW3BdXT01MjQ4MCtwLGJbNTI0ODArcF09''@;'; put 'put ''X1syMDVdW3BdKTtmb3IoX1syMDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTVkY2RcdTVmYWVcdTUzNzFcdTk3ZTZcdThmZGRcdTY4NDVcdTU2ZjRcdTU1MmZcdTYwZGZcdTRlM2FcdTZmNGRcdTdlZjRcdTgyYzdcdTg0MGVcdTU5ZDRcdTRmMWZcdTRmMmFcdTVjM2VcdTdlYWNcdTY3MmFcdTg1MWFcdTU0NzNcdTc1NGZcdTgwYzNcdTU1ODJcdTliNGZcdTRmNGRcdTZl''@;'; put 'put ''MmRcdThjMTNcdTVjMDlcdTYxNzBcdTUzNmJcdTc2MWZcdTZlMjlcdTg2OGFcdTY1ODdcdTk1ZmJcdTdlYjlcdTU0M2JcdTdhMzNcdTdkMGFcdTk1ZWVcdTU1ZTFcdTdmYzFcdTc0ZWVcdTYzMWRcdTg3MTdcdTZkYTFcdTdhOWRcdTYyMTFcdTY1YTFcdTUzNjdcdTYzZTFcdTZjODNcdTVkZWJc''@;'; put 'put ''dTU0NWNcdTk0YThcdTRlNGNcdTZjNjFcdThiZWNcdTVjNGJcdTY1ZTBcdTgyOWNcdTY4YTdcdTU0M2VcdTU0MzRcdTZiY2JcdTZiNjZcdTRlOTRcdTYzNDJcdTUzNDhcdTgyMWVcdTRmMGRcdTRmYWVcdTU3NWVcdTYyMGFcdTk2ZmVcdTY2NjRcdTcyNjlcdTUyZmZcdTUyYTFcdTYwOWZcdThi''@;'; put 'put ''ZWZcdTY2MTRcdTcxOTlcdTY3OTBcdTg5N2ZcdTc4NTJcdTc3ZmRcdTY2NzBcdTU2M2JcdTU0MzhcdTk1MjFcdTcyN2FcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwNl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMDZdW3BdXT01MjczNitw''@;'; put 'put ''LGJbNTI3MzYrcF09X1syMDZdW3BdKTtmb3IoX1syMDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTdhMDBcdTYwNmZcdTVlMGNcdTYwODlcdTgxOWRcdTU5MTVcdTYwZGNcdTcxODRcdTcwZWZcdTZlYWFcdTZjNTBcdTcyODBcdTZhODRcdTg4YWRcdTVlMmRcdTRlNjBcdTVhYjNcdTU1OWNcdTk0ZTNcdTZkMTdcdTdjZmJcdTk2OTlcdTYyMGZcdTdlYzZcdTc3OGVcdTg2''@;'; put 'put ''N2VcdTUzMjNcdTk3MWVcdThmOTZcdTY2ODdcdTVjZTFcdTRmYTBcdTcyZWRcdTRlMGJcdTUzYTZcdTU5MGZcdTU0MTNcdTYzODBcdTk1MjhcdTUxNDhcdTRlZDlcdTljOWNcdTdlYTRcdTU0YjhcdThkMjRcdTg4NTRcdTgyMzdcdTk1ZjJcdTZkOGVcdTVmMjZcdTVhY2NcdTY2M2VcdTk2Njlc''@;'; put 'put ''dTczYjBcdTczMmVcdTUzYmZcdTgxN2FcdTk5ODVcdTdmYTFcdTViYWFcdTk2NzdcdTk2NTBcdTdlYmZcdTc2ZjhcdTUzYTJcdTk1NzZcdTk5OTlcdTdiYjFcdTg5NDRcdTZlNThcdTRlNjFcdTdmZDRcdTc5NjVcdThiZTZcdTYwZjNcdTU0Y2RcdTRlYWJcdTk4NzlcdTVkZjdcdTZhNjFcdTUw''@;'; put 'put ''Y2ZcdTU0MTFcdThjNjFcdTg0MjdcdTc4NWRcdTk3MDRcdTUyNGFcdTU0ZWVcdTU2YTNcdTk1MDBcdTZkODhcdTViYjVcdTZkYzZcdTY2NTNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwN11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMDdd''@;'; put 'put ''W3BdXT01Mjk5MitwLGJbNTI5OTIrcF09X1syMDddW3BdKTtmb3IoX1syMDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjMGZcdTViNWRcdTY4MjFcdTgwOTZcdTU1NzhcdTdiMTFcdTY1NDhcdTY5NTRcdTRlOWJcdTZiNDdcdTg3NGVcdTk3OGJcdTUzNGZcdTYzMWZcdTY0M2FcdTkwYWFcdTY1OWNcdTgwYzFcdThjMTBcdTUxOTlcdTY4YjBcdTUzNzhcdTg3ZjlcdTYx''@;'; put 'put ''YzhcdTZjYzRcdTZjZmJcdThjMjJcdTVjNTFcdTg1YWFcdTgyYWZcdTk1MGNcdTZiMjNcdThmOWJcdTY1YjBcdTVmZmJcdTVmYzNcdTRmZTFcdTg4NDVcdTY2MWZcdTgxNjVcdTczMjlcdTYwZmFcdTUxNzRcdTUyMTFcdTU3OGJcdTVmNjJcdTkwYTJcdTg4NGNcdTkxOTJcdTVlNzhcdTY3NGZc''@;'; put 'put ''dTYwMjdcdTU5ZDNcdTUxNDRcdTUxZjZcdTgwZjhcdTUzMDhcdTZjNzlcdTk2YzRcdTcxOGFcdTRmMTFcdTRmZWVcdTdmOWVcdTY3M2RcdTU1YzVcdTk1MDhcdTc5YzBcdTg4OTZcdTdlZTNcdTU4OWZcdTYyMGNcdTk3MDBcdTg2NWFcdTU2MThcdTk4N2JcdTVmOTBcdThiYjhcdTg0YzRcdTkx''@;'; put 'put ''NTdcdTUzZDlcdTY1ZWRcdTVlOGZcdTc1NWNcdTYwNjRcdTdkNmVcdTVhN2ZcdTdlZWFcdTdlZWRcdThmNjlcdTU1YTdcdTViYTNcdTYwYWNcdTY1Y2JcdTczODRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwOF1bcF0uY2hhckNvZGVBdCgw''@;'; put 'put ''KSYmKElbX1syMDhdW3BdXT01MzI0OCtwLGJbNTMyNDgrcF09X1syMDhdW3BdKTtmb3IoX1syMDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwMDlcdTc2NjNcdTc3MjlcdTdlZGFcdTk3NzRcdTg1OWJcdTViNjZcdTdhNzRcdTk2ZWFcdTg4NDBcdTUyY2JcdTcxOGZcdTVmYWFcdTY1ZWNcdThiZTJcdTViZmJcdTlhNmZcdTVkZTFcdTZiODlcdTZjNWJcdThiYWRcdThi''@;'; put 'put ''YWZcdTkwMGFcdThmYzVcdTUzOGJcdTYyYmNcdTllMjZcdTllMmRcdTU0NDBcdTRlMmJcdTgyYmRcdTcyNTlcdTg2OWNcdTVkMTZcdTg4NTlcdTZkYWZcdTk2YzVcdTU0ZDFcdTRlOWFcdThiYjZcdTcxMDlcdTU0YmRcdTk2MDlcdTcwZGZcdTZkZjlcdTc2ZDBcdTRlMjVcdTc4MTRcdTg3MTJc''@;'; put 'put ''dTVjYTlcdTVlZjZcdThhMDBcdTk4OWNcdTk2MGVcdTcwOGVcdTZjYmZcdTU5NDRcdTYzYTlcdTc3M2NcdTg4NGRcdTZmMTRcdTgyNzNcdTU4MzBcdTcxZDVcdTUzOGNcdTc4MWFcdTk2YzFcdTU1MDFcdTVmNjZcdTcxMzBcdTViYjRcdThjMWFcdTlhOGNcdTZiODNcdTU5MmVcdTllMmZcdTc5''@;'; put 'put ''ZTdcdTY3NjhcdTYyNmNcdTRmNmZcdTc1YTFcdTdmOGFcdTZkMGJcdTk2MzNcdTZjMjdcdTRlZjBcdTc1ZDJcdTUxN2JcdTY4MzdcdTZmM2VcdTkwODBcdTgxNzBcdTU5OTZcdTc0NzZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwOV1bcF0u''@;'; put 'put ''Y2hhckNvZGVBdCgwKSYmKElbX1syMDldW3BdXT01MzUwNCtwLGJbNTM1MDQrcF09X1syMDldW3BdKTtmb3IoX1syMTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0NDdcdTVjMjdcdTkwNjVcdTdhOTFcdThjMjNcdTU5ZGFcdTU0YWNcdTgyMDBcdTgzNmZcdTg5ODFcdTgwMDBcdTY5MzBcdTU2NGVcdTgwMzZcdTcyMzdcdTkxY2VcdTUxYjZcdTRlNWZcdTk4NzVcdTYz''@;'; put 'put ''OTZcdTRlMWFcdTUzZjZcdTY2ZjNcdTgxNGJcdTU5MWNcdTZkYjJcdTRlMDBcdTU4ZjlcdTUzM2JcdTYzZDZcdTk0ZjFcdTRmOWRcdTRmMGFcdTg4NjNcdTk4OTBcdTU5MzdcdTkwNTdcdTc5ZmJcdTRlZWFcdTgwZjBcdTc1OTFcdTZjODJcdTViOWNcdTU5ZThcdTVmNWRcdTY5MDVcdTg2ODFc''@;'; put 'put ''dTUwMWFcdTVkZjJcdTRlNTlcdTc3ZTNcdTRlZTVcdTgyN2FcdTYyOTFcdTY2MTNcdTkwOTFcdTVjNzlcdTRlYmZcdTVmNzlcdTgxYzZcdTkwMzhcdTgwODRcdTc1YWJcdTRlYTZcdTg4ZDRcdTYxMGZcdTZiYzVcdTVmYzZcdTRlNDlcdTc2Y2FcdTZlYTJcdThiZTNcdThiYWVcdThjMGFcdThi''@;'; put 'put ''ZDFcdTVmMDJcdTdmZmNcdTdmY2NcdTdlY2VcdTgzMzVcdTgzNmJcdTU2ZTBcdTZiYjdcdTk3ZjNcdTk2MzRcdTU5ZmJcdTU0MWZcdTk0ZjZcdTZkZWJcdTViYzVcdTk5NmVcdTVjMzlcdTVmMTVcdTk2OTBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTBdLmxlbmd0aDsrK3ApNjU1MzMh''@;'; put 'put ''PT1fWzIxMF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMTBdW3BdXT01Mzc2MCtwLGJbNTM3NjArcF09X1syMTBdW3BdKTtmb3IoX1syMTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzNzBcdTgyZjFcdTZhMzFcdTVhNzRcdTllNzBcdTVlOTRcdTdmMjhcdTgzYjlcdTg0MjRcdTg0MjVcdTgzNjdcdTg3NDdcdThmY2VcdThkNjJcdTc2YzhcdTVmNzFcdTk4OTZcdTc4''@;'; put 'put ''NmNcdTY2MjBcdTU0ZGZcdTYyZTVcdTRmNjNcdTgxYzNcdTc1YzhcdTVlYjhcdTk2Y2RcdThlMGFcdTg2ZjlcdTU0OGZcdTZjZjNcdTZkOGNcdTZjMzhcdTYwN2ZcdTUyYzdcdTc1MjhcdTVlN2RcdTRmMThcdTYwYTBcdTVmZTdcdTVjMjRcdTc1MzFcdTkwYWVcdTk0YzBcdTcyYjlcdTZjYjlc''@;'; put 'put ''dTZlMzhcdTkxNDlcdTY3MDlcdTUzY2JcdTUzZjNcdTRmNTFcdTkxYzlcdThiZjFcdTUzYzhcdTVlN2NcdThmYzJcdTZkZTRcdTRlOGVcdTc2YzJcdTY5ODZcdTg2NWVcdTYxMWFcdTgyMDZcdTRmNTlcdTRmZGVcdTkwM2VcdTljN2NcdTYxMDlcdTZlMWRcdTZlMTRcdTk2ODVcdTRlODhcdTVh''@;'; put 'put ''MzFcdTk2ZThcdTRlMGVcdTVjN2ZcdTc5YjlcdTViODdcdThiZWRcdTdmYmRcdTczODlcdTU3ZGZcdTgyOGJcdTkwYzFcdTU0MDFcdTkwNDdcdTU1YmJcdTVjZWFcdTVmYTFcdTYxMDhcdTZiMzJcdTcyZjFcdTgwYjJcdThhODlcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTFdLmxlbmd0''@;'; put 'put ''aDsrK3ApNjU1MzMhPT1fWzIxMV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMTFdW3BdXT01NDAxNitwLGJbNTQwMTYrcF09X1syMTFdW3BdKTtmb3IoX1syMTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkNzRcdTViZDNcdTg4ZDVcdTk4ODRcdThjNmJcdTlhNmRcdTllMzNcdTZlMGFcdTUxYTRcdTUxNDNcdTU3YTNcdTg4ODFcdTUzOWZcdTYzZjRcdThmOTVcdTU2''@;'; put 'put ''ZWRcdTU0NThcdTU3MDZcdTczM2ZcdTZlOTBcdTdmMThcdThmZGNcdTgyZDFcdTYxM2ZcdTYwMjhcdTk2NjJcdTY2ZjBcdTdlYTZcdThkOGFcdThkYzNcdTk0YTVcdTVjYjNcdTdjYTRcdTY3MDhcdTYwYTZcdTk2MDVcdTgwMThcdTRlOTFcdTkwZTdcdTUzMDBcdTk2NjhcdTUxNDFcdThmZDBc''@;'; put 'put ''dTg1NzRcdTkxNWRcdTY2NTVcdTk3ZjVcdTViNTVcdTUzMWRcdTc4MzhcdTY3NDJcdTY4M2RcdTU0YzlcdTcwN2VcdTViYjBcdThmN2RcdTUxOGRcdTU3MjhcdTU0YjFcdTY1MTJcdTY2ODJcdThkNWVcdThkNDNcdTgxMGZcdTg0NmNcdTkwNmRcdTdjZGZcdTUxZmZcdTg1ZmJcdTY3YTNcdTY1''@;'; put 'put ''ZTlcdTZmYTFcdTg2YTRcdThlODFcdTU2NmFcdTkwMjBcdTc2ODJcdTcwNzZcdTcxZTVcdThkMjNcdTYyZTlcdTUyMTlcdTZjZmRcdThkM2NcdTYwMGVcdTU4OWVcdTYxOGVcdTY2ZmVcdThkNjBcdTYyNGVcdTU1YjNcdTZlMjNcdTY3MmRcdThmNjdcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9''@;'; put 'put ''X1syMTJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxMl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMTJdW3BdXT01NDI3MitwLGJbNTQyNzIrcF09X1syMTJdW3BdKTtmb3IoX1syMTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk0ZTFcdTk1ZjhcdTc3MjhcdTY4MDVcdTY5YThcdTU0OGJcdTRlNGRcdTcwYjhcdThiYzhcdTY0NThcdTY1OGJcdTViODVcdTdhODRcdTUw''@;'; put 'put ''M2FcdTViZThcdTc3YmJcdTZiZTFcdThhNzlcdTdjOThcdTZjYmVcdTc2Y2ZcdTY1YTlcdThmOTdcdTVkMmRcdTVjNTVcdTg2MzhcdTY4MDhcdTUzNjBcdTYyMThcdTdhZDlcdTZlNWJcdTdlZmRcdTZhMWZcdTdhZTBcdTVmNzBcdTZmMzNcdTVmMjBcdTYzOGNcdTZkYThcdTY3NTZcdTRlMDhc''@;'; put 'put ''dTVlMTBcdThkMjZcdTRlZDdcdTgwYzBcdTc2MzRcdTk2OWNcdTYyZGJcdTY2MmRcdTYyN2VcdTZjYmNcdThkNzVcdTcxNjdcdTdmNjlcdTUxNDZcdTgwODdcdTUzZWNcdTkwNmVcdTYyOThcdTU0ZjJcdTg2ZjBcdThmOTlcdTgwMDVcdTk1MTdcdTg1MTdcdThmZDlcdTZkNTlcdTczY2RcdTY1''@;'; put 'put ''OWZcdTc3MWZcdTc1MDRcdTc4MjdcdTgxZmJcdThkMWVcdTk0ODhcdTRmYTZcdTY3OTVcdTc1YjlcdThiY2FcdTk3MDdcdTYzMmZcdTk1NDdcdTk2MzVcdTg0YjhcdTYzMjNcdTc3NDFcdTVmODFcdTcyZjBcdTRlODlcdTYwMTRcdTY1NzRcdTYyZWZcdTZiNjNcdTY1M2ZcdWZmZmQiLnNwbGl0''@;'; put 'put ''KCIiKSxwPTA7cCE9X1syMTNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxM11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMTNdW3BdXT01NDUyOCtwLGJbNTQ1MjgrcF09X1syMTNdW3BdKTtmb3IoX1syMTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVlMjdcdTc1YzdcdTkwZDFcdThiYzFcdTgyOWRcdTY3OWRcdTY1MmZcdTU0MzFcdTg3MThcdTc3ZTVcdTgwYTJcdTgx''@;'; put 'put ''MDJcdTZjNDFcdTRlNGJcdTdlYzdcdTgwNGNcdTc2ZjRcdTY5MGRcdTZiOTZcdTYyNjdcdTUwM2NcdTRmODRcdTU3NDBcdTYzMDdcdTZiNjJcdThkYmVcdTUzZWFcdTY1ZThcdTdlYjhcdTVmZDdcdTYzMWFcdTYzYjdcdTgxZjNcdTgxZjRcdTdmNmVcdTVlMWNcdTVjZDlcdTUyMzZcdTY2N2Fc''@;'; put 'put ''dTc5ZTlcdTdhMWFcdThkMjhcdTcwOTlcdTc1ZDRcdTZlZGVcdTZjYmJcdTdhOTJcdTRlMmRcdTc2YzVcdTVmZTBcdTk0OWZcdTg4NzdcdTdlYzhcdTc5Y2RcdTgwYmZcdTkxY2RcdTRlZjJcdTRmMTdcdTgyMWZcdTU0NjhcdTVkZGVcdTZkMzJcdThiY2NcdTdjYTVcdThmNzRcdTgwOThcdTVl''@;'; put 'put ''MWFcdTU0OTJcdTc2YjFcdTViOTlcdTY2M2NcdTlhYTRcdTczZTBcdTY4MmFcdTg2ZGJcdTY3MzFcdTczMmFcdThiZjhcdThiZGJcdTkwMTBcdTdhZjlcdTcwZGJcdTcxNmVcdTYyYzRcdTc3YTlcdTU2MzFcdTRlM2JcdTg0NTdcdTY3ZjFcdTUyYTlcdTg2YzBcdThkMmVcdTk0ZjhcdTdiNTFc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxNF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMTRdW3BdXT01NDc4NCtwLGJbNTQ3ODQrcF09X1syMTRdW3BdKTtmb3IoX1syMTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmNGZcdTZjZThcdTc5NWRcdTlhN2JcdTYyOTNcdTcyMmFcdTYyZmRcdTRlMTNcdTc4MTZcdThm''@;'; put 'put ''NmNcdTY0YjBcdThkNWFcdTdiYzZcdTY4NjlcdTVlODRcdTg4YzVcdTU5ODZcdTY0OWVcdTU4ZWVcdTcyYjZcdTY5MGVcdTk1MjVcdThmZmRcdThkNThcdTU3NjBcdTdmMDBcdThjMDZcdTUxYzZcdTYzNDlcdTYyZDlcdTUzNTNcdTY4NGNcdTc0MjJcdTgzMDFcdTkxNGNcdTU1NDRcdTc3NDBc''@;'; put 'put ''dTcwN2NcdTZkNGFcdTUxNzlcdTU0YThcdThkNDRcdTU5ZmZcdTZlY2JcdTZkYzRcdTViNWNcdTdkMmJcdTRlZDRcdTdjN2RcdTZlZDNcdTViNTBcdTgxZWFcdTZlMGRcdTViNTdcdTliMDNcdTY4ZDVcdThlMmFcdTViOTdcdTdlZmNcdTYwM2JcdTdlYjVcdTkwYjlcdThkNzBcdTU5NGZcdTYz''@;'; put 'put ''Y2RcdTc5ZGZcdThkYjNcdTUzNTJcdTY1Y2ZcdTc5NTZcdThiYzVcdTk2M2JcdTdlYzRcdTk0YmJcdTdlODJcdTU2MzRcdTkxODlcdTY3MDBcdTdmNmFcdTVjMGFcdTkwNzVcdTY2MjhcdTVkZTZcdTRmNTBcdTY3ZGVcdTUwNWFcdTRmNWNcdTU3NTBcdTVlYTdcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxNV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMTVdW3BdXT01NTA0MCtwLGJbNTUwNDArcF09X1syMTVdW3BdKTtmb3IoX1syMTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlOGRcdTRlMGNcdTUxNDBcdTRlMTBcdTVlZmZcdTUzNDVcdTRlMTVcdTRl''@;'; put 'put ''OThcdTRlMWVcdTliMzJcdTViNmNcdTU2NjlcdTRlMjhcdTc5YmFcdTRlM2ZcdTUzMTVcdTRlNDdcdTU5MmRcdTcyM2JcdTUzNmVcdTZjMTBcdTU2ZGZcdTgwZTRcdTk5OTdcdTZiZDNcdTc3N2VcdTlmMTdcdTRlMzZcdTRlOWZcdTlmMTBcdTRlNWNcdTRlNjlcdTRlOTNcdTgyODhcdTViNWJc''@;'; put 'put ''dTU1NmNcdTU2MGZcdTRlYzRcdTUzOGRcdTUzOWRcdTUzYTNcdTUzYTVcdTUzYWVcdTk3NjVcdThkNWRcdTUzMWFcdTUzZjVcdTUzMjZcdTUzMmVcdTUzM2VcdThkNWNcdTUzNjZcdTUzNjNcdTUyMDJcdTUyMDhcdTUyMGVcdTUyMmRcdTUyMzNcdTUyM2ZcdTUyNDBcdTUyNGNcdTUyNWVcdTUy''@;'; put 'put ''NjFcdTUyNWNcdTg0YWZcdTUyN2RcdTUyODJcdTUyODFcdTUyOTBcdTUyOTNcdTUxODJcdTdmNTRcdTRlYmJcdTRlYzNcdTRlYzlcdTRlYzJcdTRlZThcdTRlZTFcdTRlZWJcdTRlZGVcdTRmMWJcdTRlZjNcdTRmMjJcdTRmNjRcdTRlZjVcdTRmMjVcdTRmMjdcdTRmMDlcdTRmMmJcdTRmNWVc''@;'; put 'put ''dTRmNjdcdTY1MzhcdTRmNWFcdTRmNWRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxNl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMTZdW3BdXT01NTI5NitwLGJbNTUyOTYrcF09X1syMTZdW3BdKTtmb3IoX1syMTddPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmNWZcdTRmNTdcdTRmMzJcdTRmM2RcdTRmNzZcdTRm''@;'; put 'put ''NzRcdTRmOTFcdTRmODlcdTRmODNcdTRmOGZcdTRmN2VcdTRmN2JcdTRmYWFcdTRmN2NcdTRmYWNcdTRmOTRcdTRmZTZcdTRmZThcdTRmZWFcdTRmYzVcdTRmZGFcdTRmZTNcdTRmZGNcdTRmZDFcdTRmZGZcdTRmZjhcdTUwMjlcdTUwNGNcdTRmZjNcdTUwMmNcdTUwMGZcdTUwMmVcdTUwMmRc''@;'; put 'put ''dTRmZmVcdTUwMWNcdTUwMGNcdTUwMjVcdTUwMjhcdTUwN2VcdTUwNDNcdTUwNTVcdTUwNDhcdTUwNGVcdTUwNmNcdTUwN2JcdTUwYTVcdTUwYTdcdTUwYTlcdTUwYmFcdTUwZDZcdTUxMDZcdTUwZWRcdTUwZWNcdTUwZTZcdTUwZWVcdTUxMDdcdTUxMGJcdTRlZGRcdTZjM2RcdTRmNThcdTRm''@;'; put 'put ''NjVcdTRmY2VcdTlmYTBcdTZjNDZcdTdjNzRcdTUxNmVcdTVkZmRcdTllYzlcdTk5OThcdTUxODFcdTU5MTRcdTUyZjlcdTUzMGRcdThhMDdcdTUzMTBcdTUxZWJcdTU5MTlcdTUxNTVcdTRlYTBcdTUxNTZcdTRlYjNcdTg4NmVcdTg4YTRcdTRlYjVcdTgxMTRcdTg4ZDJcdTc5ODBcdTViMzRc''@;'; put 'put ''dTg4MDNcdTdmYjhcdTUxYWJcdTUxYjFcdTUxYmRcdTUxYmNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxN11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMTddW3BdXT01NTU1MitwLGJbNTU1NTIrcF09X1syMTddW3BdKTtmb3IoX1syMThd''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUxYzdcdTUxOTZcdTUxYTJcdTUx''@;'; put 'put ''YTVcdThiYTBcdThiYTZcdThiYTdcdThiYWFcdThiYjRcdThiYjVcdThiYjdcdThiYzJcdThiYzNcdThiY2JcdThiY2ZcdThiY2VcdThiZDJcdThiZDNcdThiZDRcdThiZDZcdThiZDhcdThiZDlcdThiZGNcdThiZGZcdThiZTBcdThiZTRcdThiZThcdThiZTlcdThiZWVcdThiZjBcdThiZjNc''@;'; put 'put ''dThiZjZcdThiZjlcdThiZmNcdThiZmZcdThjMDBcdThjMDJcdThjMDRcdThjMDdcdThjMGNcdThjMGZcdThjMTFcdThjMTJcdThjMTRcdThjMTVcdThjMTZcdThjMTlcdThjMWJcdThjMThcdThjMWRcdThjMWZcdThjMjBcdThjMjFcdThjMjVcdThjMjdcdThjMmFcdThjMmJcdThjMmVcdThj''@;'; put 'put ''MmZcdThjMzJcdThjMzNcdThjMzVcdThjMzZcdTUzNjlcdTUzN2FcdTk2MWRcdTk2MjJcdTk2MjFcdTk2MzFcdTk2MmFcdTk2M2RcdTk2M2NcdTk2NDJcdTk2NDlcdTk2NTRcdTk2NWZcdTk2NjdcdTk2NmNcdTk2NzJcdTk2NzRcdTk2ODhcdTk2OGRcdTk2OTdcdTk2YjBcdTkwOTdcdTkwOWJc''@;'; put 'put ''dTkwOWRcdTkwOTlcdTkwYWNcdTkwYTFcdTkwYjRcdTkwYjNcdTkwYjZcdTkwYmFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMThdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxOF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMThdW3BdXT01NTgwOCtwLGJbNTU4MDgrcF09X1syMThdW3Bd''@;'; put 'put ''KTtmb3IoX1syMTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwYjhcdTkw''@;'; put 'put ''YjBcdTkwY2ZcdTkwYzVcdTkwYmVcdTkwZDBcdTkwYzRcdTkwYzdcdTkwZDNcdTkwZTZcdTkwZTJcdTkwZGNcdTkwZDdcdTkwZGJcdTkwZWJcdTkwZWZcdTkwZmVcdTkxMDRcdTkxMjJcdTkxMWVcdTkxMjNcdTkxMzFcdTkxMmZcdTkxMzlcdTkxNDNcdTkxNDZcdTUyMGRcdTU5NDJcdTUyYTJc''@;'; put 'put ''dTUyYWNcdTUyYWRcdTUyYmVcdTU0ZmZcdTUyZDBcdTUyZDZcdTUyZjBcdTUzZGZcdTcxZWVcdTc3Y2RcdTVlZjRcdTUxZjVcdTUxZmNcdTliMmZcdTUzYjZcdTVmMDFcdTc1NWFcdTVkZWZcdTU3NGNcdTU3YTlcdTU3YTFcdTU4N2VcdTU4YmNcdTU4YzVcdTU4ZDFcdTU3MjlcdTU3MmNcdTU3''@;'; put 'put ''MmFcdTU3MzNcdTU3MzlcdTU3MmVcdTU3MmZcdTU3NWNcdTU3M2JcdTU3NDJcdTU3NjlcdTU3ODVcdTU3NmJcdTU3ODZcdTU3N2NcdTU3N2JcdTU3NjhcdTU3NmRcdTU3NzZcdTU3NzNcdTU3YWRcdTU3YTRcdTU3OGNcdTU3YjJcdTU3Y2ZcdTU3YTdcdTU3YjRcdTU3OTNcdTU3YTBcdTU3ZDVc''@;'; put 'put ''dTU3ZDhcdTU3ZGFcdTU3ZDlcdTU3ZDJcdTU3YjhcdTU3ZjRcdTU3ZWZcdTU3ZjhcdTU3ZTRcdTU3ZGRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxOV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMTldW3BdXT01NjA2NCtwLGJbNTYwNjQr''@;'; put 'put ''cF09X1syMTldW3BdKTtmb3IoX1syMjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTU4MGJcdTU4MGRcdTU3ZmRcdTU3ZWRcdTU4MDBcdTU4MWVcdTU4MTlcdTU4NDRcdTU4MjBcdTU4NjVcdTU4NmNcdTU4ODFcdTU4ODlcdTU4OWFcdTU4ODBcdTk5YThcdTlmMTlcdTYxZmZcdTgyNzlcdTgyN2RcdTgyN2ZcdTgyOGZcdTgyOGFcdTgyYThcdTgyODRcdTgyOGVcdTgyOTFc''@;'; put 'put ''dTgyOTdcdTgyOTlcdTgyYWJcdTgyYjhcdTgyYmVcdTgyYjBcdTgyYzhcdTgyY2FcdTgyZTNcdTgyOThcdTgyYjdcdTgyYWVcdTgyY2JcdTgyY2NcdTgyYzFcdTgyYTlcdTgyYjRcdTgyYTFcdTgyYWFcdTgyOWZcdTgyYzRcdTgyY2VcdTgyYTRcdTgyZTFcdTgzMDlcdTgyZjdcdTgyZTRcdTgz''@;'; put 'put ''MGZcdTgzMDdcdTgyZGNcdTgyZjRcdTgyZDJcdTgyZDhcdTgzMGNcdTgyZmJcdTgyZDNcdTgzMTFcdTgzMWFcdTgzMDZcdTgzMTRcdTgzMTVcdTgyZTBcdTgyZDVcdTgzMWNcdTgzNTFcdTgzNWJcdTgzNWNcdTgzMDhcdTgzOTJcdTgzM2NcdTgzMzRcdTgzMzFcdTgzOWJcdTgzNWVcdTgzMmZc''@;'; put 'put ''dTgzNGZcdTgzNDdcdTgzNDNcdTgzNWZcdTgzNDBcdTgzMTdcdTgzNjBcdTgzMmRcdTgzM2FcdTgzMzNcdTgzNjZcdTgzNjVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyMF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMjBdW3BdXT01NjMy''@;'; put 'put ''MCtwLGJbNTYzMjArcF09X1syMjBdW3BdKTtmb3IoX1syMjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdTgzNjhcdTgzMWJcdTgzNjlcdTgzNmNcdTgzNmFcdTgzNmRcdTgzNmVcdTgzYjBcdTgzNzhcdTgzYjNcdTgzYjRcdTgzYTBcdTgzYWFcdTgzOTNcdTgzOWNcdTgzODVcdTgzN2NcdTgzYjZcdTgzYTlcdTgzN2RcdTgzYjhcdTgzN2JcdTgzOThcdTgzOWVcdTgzYThc''@;'; put 'put ''dTgzYmFcdTgzYmNcdTgzYzFcdTg0MDFcdTgzZTVcdTgzZDhcdTU4MDdcdTg0MThcdTg0MGJcdTgzZGRcdTgzZmRcdTgzZDZcdTg0MWNcdTg0MzhcdTg0MTFcdTg0MDZcdTgzZDRcdTgzZGZcdTg0MGZcdTg0MDNcdTgzZjhcdTgzZjlcdTgzZWFcdTgzYzVcdTgzYzBcdTg0MjZcdTgzZjBcdTgz''@;'; put 'put ''ZTFcdTg0NWNcdTg0NTFcdTg0NWFcdTg0NTlcdTg0NzNcdTg0ODdcdTg0ODhcdTg0N2FcdTg0ODlcdTg0NzhcdTg0M2NcdTg0NDZcdTg0NjlcdTg0NzZcdTg0OGNcdTg0OGVcdTg0MzFcdTg0NmRcdTg0YzFcdTg0Y2RcdTg0ZDBcdTg0ZTZcdTg0YmRcdTg0ZDNcdTg0Y2FcdTg0YmZcdTg0YmFc''@;'; put 'put ''dTg0ZTBcdTg0YTFcdTg0YjlcdTg0YjRcdTg0OTdcdTg0ZTVcdTg0ZTNcdTg1MGNcdTc1MGRcdTg1MzhcdTg0ZjBcdTg1MzlcdTg1MWZcdTg1M2FcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyMV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sy''@;'; put 'put ''MjFdW3BdXT01NjU3NitwLGJbNTY1NzYrcF09X1syMjFdW3BdKTtmb3IoX1syMjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1NTZcdTg1M2JcdTg0ZmZcdTg0ZmNcdTg1NTlcdTg1NDhcdTg1NjhcdTg1NjRcdTg1NWVcdTg1N2FcdTc3YTJcdTg1NDNcdTg1NzJcdTg1N2JcdTg1YTRcdTg1YThcdTg1ODdcdTg1OGZcdTg1NzlcdTg1YWVcdTg1OWNcdTg1ODVcdTg1Yjlc''@;'; put 'put ''dTg1YjdcdTg1YjBcdTg1ZDNcdTg1YzFcdTg1ZGNcdTg1ZmZcdTg2MjdcdTg2MDVcdTg2MjlcdTg2MTZcdTg2M2NcdTVlZmVcdTVmMDhcdTU5M2NcdTU5NDFcdTgwMzdcdTU5NTVcdTU5NWFcdTU5NThcdTUzMGZcdTVjMjJcdTVjMjVcdTVjMmNcdTVjMzRcdTYyNGNcdTYyNmFcdTYyOWZcdTYy''@;'; put 'put ''YmJcdTYyY2FcdTYyZGFcdTYyZDdcdTYyZWVcdTYzMjJcdTYyZjZcdTYzMzlcdTYzNGJcdTYzNDNcdTYzYWRcdTYzZjZcdTYzNzFcdTYzN2FcdTYzOGVcdTYzYjRcdTYzNmRcdTYzYWNcdTYzOGFcdTYzNjlcdTYzYWVcdTYzYmNcdTYzZjJcdTYzZjhcdTYzZTBcdTYzZmZcdTYzYzRcdTYzZGVc''@;'; put 'put ''dTYzY2VcdTY0NTJcdTYzYzZcdTYzYmVcdTY0NDVcdTY0NDFcdTY0MGJcdTY0MWJcdTY0MjBcdTY0MGNcdTY0MjZcdTY0MjFcdTY0NWVcdTY0ODRcdTY0NmRcdTY0OTZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyMl1bcF0uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKElbX1syMjJdW3BdXT01NjgzMitwLGJbNTY4MzIrcF09X1syMjJdW3BdKTtmb3IoX1syMjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0N2FcdTY0YjdcdTY0YjhcdTY0OTlcdTY0YmFcdTY0YzBcdTY0ZDBcdTY0ZDdcdTY0ZTRcdTY0ZTJcdTY1MDlcdTY1MjVcdTY1MmVcdTVmMGJcdTVmZDJcdTc1MTlcdTVmMTFcdTUzNWZcdTUzZjFcdTUzZmRcdTUzZTlc''@;'; put 'put ''dTUzZThcdTUzZmJcdTU0MTJcdTU0MTZcdTU0MDZcdTU0NGJcdTU0NTJcdTU0NTNcdTU0NTRcdTU0NTZcdTU0NDNcdTU0MjFcdTU0NTdcdTU0NTlcdTU0MjNcdTU0MzJcdTU0ODJcdTU0OTRcdTU0NzdcdTU0NzFcdTU0NjRcdTU0OWFcdTU0OWJcdTU0ODRcdTU0NzZcdTU0NjZcdTU0OWRcdTU0''@;'; put 'put ''ZDBcdTU0YWRcdTU0YzJcdTU0YjRcdTU0ZDJcdTU0YTdcdTU0YTZcdTU0ZDNcdTU0ZDRcdTU0NzJcdTU0YTNcdTU0ZDVcdTU0YmJcdTU0YmZcdTU0Y2NcdTU0ZDlcdTU0ZGFcdTU0ZGNcdTU0YTlcdTU0YWFcdTU0YTRcdTU0ZGRcdTU0Y2ZcdTU0ZGVcdTU1MWJcdTU0ZTdcdTU1MjBcdTU0ZmRc''@;'; put 'put ''dTU1MTRcdTU0ZjNcdTU1MjJcdTU1MjNcdTU1MGZcdTU1MTFcdTU1MjdcdTU1MmFcdTU1NjdcdTU1OGZcdTU1YjVcdTU1NDlcdTU1NmRcdTU1NDFcdTU1NTVcdTU1M2ZcdTU1NTBcdTU1M2NcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyM11b''@;'; put 'put ''cF0uY2hhckNvZGVBdCgwKSYmKElbX1syMjNdW3BdXT01NzA4OCtwLGJbNTcwODgrcF09X1syMjNdW3BdKTtmb3IoX1syMjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1MzdcdTU1NTZcdTU1NzVcdTU1NzZcdTU1NzdcdTU1MzNcdTU1MzBcdTU1NWNcdTU1OGJcdTU1ZDJcdTU1ODNcdTU1YjFcdTU1YjlcdTU1ODhcdTU1ODFcdTU1OWZcdTU1N2VcdTU1ZDZcdTU1OTFc''@;'; put 'put ''dTU1N2JcdTU1ZGZcdTU1YmRcdTU1YmVcdTU1OTRcdTU1OTlcdTU1ZWFcdTU1ZjdcdTU1YzlcdTU2MWZcdTU1ZDFcdTU1ZWJcdTU1ZWNcdTU1ZDRcdTU1ZTZcdTU1ZGRcdTU1YzRcdTU1ZWZcdTU1ZTVcdTU1ZjJcdTU1ZjNcdTU1Y2NcdTU1Y2RcdTU1ZThcdTU1ZjVcdTU1ZTRcdThmOTRcdTU2''@;'; put 'put ''MWVcdTU2MDhcdTU2MGNcdTU2MDFcdTU2MjRcdTU2MjNcdTU1ZmVcdTU2MDBcdTU2MjdcdTU2MmRcdTU2NThcdTU2MzlcdTU2NTdcdTU2MmNcdTU2NGRcdTU2NjJcdTU2NTlcdTU2NWNcdTU2NGNcdTU2NTRcdTU2ODZcdTU2NjRcdTU2NzFcdTU2NmJcdTU2N2JcdTU2N2NcdTU2ODVcdTU2OTNc''@;'; put 'put ''dTU2YWZcdTU2ZDRcdTU2ZDdcdTU2ZGRcdTU2ZTFcdTU2ZjVcdTU2ZWJcdTU2ZjlcdTU2ZmZcdTU3MDRcdTU3MGFcdTU3MDlcdTU3MWNcdTVlMGZcdTVlMTlcdTVlMTRcdTVlMTFcdTVlMzFcdTVlM2JcdTVlM2NcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjRdLmxlbmd0aDsrK3ApNjU1''@;'; put 'put ''MzMhPT1fWzIyNF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMjRdW3BdXT01NzM0NCtwLGJbNTczNDQrcF09X1syMjRdW3BdKTtmb3IoX1syMjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVlMzdcdTVlNDRcdTVlNTRcdTVlNWJcdTVlNWVcdTVlNjFcdTVjOGNcdTVjN2FcdTVjOGRcdTVjOTBcdTVjOTZcdTVjODhcdTVjOThcdTVjOTlcdTVjOTFcdTVjOWFcdTVjOWNc''@;'; put 'put ''dTVjYjVcdTVjYTJcdTVjYmRcdTVjYWNcdTVjYWJcdTVjYjFcdTVjYTNcdTVjYzFcdTVjYjdcdTVjYzRcdTVjZDJcdTVjZTRcdTVjY2JcdTVjZTVcdTVkMDJcdTVkMDNcdTVkMjdcdTVkMjZcdTVkMmVcdTVkMjRcdTVkMWVcdTVkMDZcdTVkMWJcdTVkNThcdTVkM2VcdTVkMzRcdTVkM2RcdTVk''@;'; put 'put ''NmNcdTVkNWJcdTVkNmZcdTVkNWRcdTVkNmJcdTVkNGJcdTVkNGFcdTVkNjlcdTVkNzRcdTVkODJcdTVkOTlcdTVkOWRcdThjNzNcdTVkYjdcdTVkYzVcdTVmNzNcdTVmNzdcdTVmODJcdTVmODdcdTVmODlcdTVmOGNcdTVmOTVcdTVmOTlcdTVmOWNcdTVmYThcdTVmYWRcdTVmYjVcdTVmYmNc''@;'; put 'put ''dTg4NjJcdTVmNjFcdTcyYWRcdTcyYjBcdTcyYjRcdTcyYjdcdTcyYjhcdTcyYzNcdTcyYzFcdTcyY2VcdTcyY2RcdTcyZDJcdTcyZThcdTcyZWZcdTcyZTlcdTcyZjJcdTcyZjRcdTcyZjdcdTczMDFcdTcyZjNcdTczMDNcdTcyZmFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjVdLmxl''@;'; put 'put ''bmd0aDsrK3ApNjU1MzMhPT1fWzIyNV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMjVdW3BdXT01NzYwMCtwLGJbNTc2MDArcF09X1syMjVdW3BdKTtmb3IoX1syMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcyZmJcdTczMTdcdTczMTNcdTczMjFcdTczMGFcdTczMWVcdTczMWRcdTczMTVcdTczMjJcdTczMzlcdTczMjVcdTczMmNcdTczMzhcdTczMzFcdTczNTBc''@;'; put 'put ''dTczNGRcdTczNTdcdTczNjBcdTczNmNcdTczNmZcdTczN2VcdTgyMWJcdTU5MjVcdTk4ZTdcdTU5MjRcdTU5MDJcdTk5NjNcdTk5NjdcdTk5NjhcdTk5NjlcdTk5NmFcdTk5NmJcdTk5NmNcdTk5NzRcdTk5NzdcdTk5N2RcdTk5ODBcdTk5ODRcdTk5ODdcdTk5OGFcdTk5OGRcdTk5OTBcdTk5''@;'; put 'put ''OTFcdTk5OTNcdTk5OTRcdTk5OTVcdTVlODBcdTVlOTFcdTVlOGJcdTVlOTZcdTVlYTVcdTVlYTBcdTVlYjlcdTVlYjVcdTVlYmVcdTVlYjNcdThkNTNcdTVlZDJcdTVlZDFcdTVlZGJcdTVlZThcdTVlZWFcdTgxYmFcdTVmYzRcdTVmYzlcdTVmZDZcdTVmY2ZcdTYwMDNcdTVmZWVcdTYwMDRc''@;'; put 'put ''dTVmZTFcdTVmZTRcdTVmZmVcdTYwMDVcdTYwMDZcdTVmZWFcdTVmZWRcdTVmZjhcdTYwMTlcdTYwMzVcdTYwMjZcdTYwMWJcdTYwMGZcdTYwMGRcdTYwMjlcdTYwMmJcdTYwMGFcdTYwM2ZcdTYwMjFcdTYwNzhcdTYwNzlcdTYwN2JcdTYwN2FcdTYwNDJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7''@;'; put 'put ''cCE9X1syMjZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyNl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMjZdW3BdXT01Nzg1NitwLGJbNTc4NTYrcF09X1syMjZdW3BdKTtmb3IoX1syMjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNmFcdTYwN2RcdTYwOTZcdTYwOWFcdTYwYWRcdTYwOWRcdTYwODNcdTYwOTJcdTYwOGNcdTYwOWJcdTYwZWNcdTYwYmJcdTYwYjFc''@;'; put 'put ''dTYwZGRcdTYwZDhcdTYwYzZcdTYwZGFcdTYwYjRcdTYxMjBcdTYxMjZcdTYxMTVcdTYxMjNcdTYwZjRcdTYxMDBcdTYxMGVcdTYxMmJcdTYxNGFcdTYxNzVcdTYxYWNcdTYxOTRcdTYxYTdcdTYxYjdcdTYxZDRcdTYxZjVcdTVmZGRcdTk2YjNcdTk1ZTlcdTk1ZWJcdTk1ZjFcdTk1ZjNcdTk1''@;'; put 'put ''ZjVcdTk1ZjZcdTk1ZmNcdTk1ZmVcdTk2MDNcdTk2MDRcdTk2MDZcdTk2MDhcdTk2MGFcdTk2MGJcdTk2MGNcdTk2MGRcdTk2MGZcdTk2MTJcdTk2MTVcdTk2MTZcdTk2MTdcdTk2MTlcdTk2MWFcdTRlMmNcdTcyM2ZcdTYyMTVcdTZjMzVcdTZjNTRcdTZjNWNcdTZjNGFcdTZjYTNcdTZjODVc''@;'; put 'put ''dTZjOTBcdTZjOTRcdTZjOGNcdTZjNjhcdTZjNjlcdTZjNzRcdTZjNzZcdTZjODZcdTZjYTlcdTZjZDBcdTZjZDRcdTZjYWRcdTZjZjdcdTZjZjhcdTZjZjFcdTZjZDdcdTZjYjJcdTZjZTBcdTZjZDZcdTZjZmFcdTZjZWJcdTZjZWVcdTZjYjFcdTZjZDNcdTZjZWZcdTZjZmVcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxwPTA7cCE9X1syMjddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyN11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMjddW3BdXT01ODExMitwLGJbNTgxMTIrcF09X1syMjddW3BdKTtmb3IoX1syMjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkMzlcdTZkMjdcdTZkMGNcdTZkNDNcdTZkNDhcdTZkMDdcdTZkMDRcdTZkMTlcdTZkMGVcdTZkMmJcdTZkNGRc''@;'; put 'put ''dTZkMmVcdTZkMzVcdTZkMWFcdTZkNGZcdTZkNTJcdTZkNTRcdTZkMzNcdTZkOTFcdTZkNmZcdTZkOWVcdTZkYTBcdTZkNWVcdTZkOTNcdTZkOTRcdTZkNWNcdTZkNjBcdTZkN2NcdTZkNjNcdTZlMWFcdTZkYzdcdTZkYzVcdTZkZGVcdTZlMGVcdTZkYmZcdTZkZTBcdTZlMTFcdTZkZTZcdTZk''@;'; put 'put ''ZGRcdTZkZDlcdTZlMTZcdTZkYWJcdTZlMGNcdTZkYWVcdTZlMmJcdTZlNmVcdTZlNGVcdTZlNmJcdTZlYjJcdTZlNWZcdTZlODZcdTZlNTNcdTZlNTRcdTZlMzJcdTZlMjVcdTZlNDRcdTZlZGZcdTZlYjFcdTZlOThcdTZlZTBcdTZmMmRcdTZlZTJcdTZlYTVcdTZlYTdcdTZlYmRcdTZlYmJc''@;'; put 'put ''dTZlYjdcdTZlZDdcdTZlYjRcdTZlY2ZcdTZlOGZcdTZlYzJcdTZlOWZcdTZmNjJcdTZmNDZcdTZmNDdcdTZmMjRcdTZmMTVcdTZlZjlcdTZmMmZcdTZmMzZcdTZmNGJcdTZmNzRcdTZmMmFcdTZmMDlcdTZmMjlcdTZmODlcdTZmOGRcdTZmOGNcdTZmNzhcdTZmNzJcdTZmN2NcdTZmN2FcdTZm''@;'; put 'put ''ZDFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyOF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMjhdW3BdXT01ODM2OCtwLGJbNTgzNjgrcF09X1syMjhdW3BdKTtmb3IoX1syMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmYzlcdTZmYTdcdTZmYjlcdTZmYjZcdTZmYzJcdTZmZTFcdTZmZWVcdTZmZGVcdTZmZTBc''@;'; put 'put ''dTZmZWZcdTcwMWFcdTcwMjNcdTcwMWJcdTcwMzlcdTcwMzVcdTcwNGZcdTcwNWVcdTViODBcdTViODRcdTViOTVcdTViOTNcdTViYTVcdTViYjhcdTc1MmZcdTlhOWVcdTY0MzRcdTViZTRcdTViZWVcdTg5MzBcdTViZjBcdThlNDdcdThiMDdcdThmYjZcdThmZDNcdThmZDVcdThmZTVcdThm''@;'; put 'put ''ZWVcdThmZTRcdThmZTlcdThmZTZcdThmZjNcdThmZThcdTkwMDVcdTkwMDRcdTkwMGJcdTkwMjZcdTkwMTFcdTkwMGRcdTkwMTZcdTkwMjFcdTkwMzVcdTkwMzZcdTkwMmRcdTkwMmZcdTkwNDRcdTkwNTFcdTkwNTJcdTkwNTBcdTkwNjhcdTkwNThcdTkwNjJcdTkwNWJcdTY2YjlcdTkwNzRc''@;'; put 'put ''dTkwN2RcdTkwODJcdTkwODhcdTkwODNcdTkwOGJcdTVmNTBcdTVmNTdcdTVmNTZcdTVmNThcdTVjM2JcdTU0YWJcdTVjNTBcdTVjNTlcdTViNzFcdTVjNjNcdTVjNjZcdTdmYmNcdTVmMmFcdTVmMjlcdTVmMmRcdTgyNzRcdTVmM2NcdTliM2JcdTVjNmVcdTU5ODFcdTU5ODNcdTU5OGRcdTU5''@;'; put 'put ''YTlcdTU5YWFcdTU5YTNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyOV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMjldW3BdXT01ODYyNCtwLGJbNTg2MjQrcF09X1syMjldW3BdKTtmb3IoX1syMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5OTdcdTU5Y2FcdTU5YWJcdTU5OWVcdTU5YTRcdTU5ZDJcdTU5YjJc''@;'; put 'put ''dTU5YWZcdTU5ZDdcdTU5YmVcdTVhMDVcdTVhMDZcdTU5ZGRcdTVhMDhcdTU5ZTNcdTU5ZDhcdTU5ZjlcdTVhMGNcdTVhMDlcdTVhMzJcdTVhMzRcdTVhMTFcdTVhMjNcdTVhMTNcdTVhNDBcdTVhNjdcdTVhNGFcdTVhNTVcdTVhM2NcdTVhNjJcdTVhNzVcdTgwZWNcdTVhYWFcdTVhOWJcdTVh''@;'; put 'put ''NzdcdTVhN2FcdTVhYmVcdTVhZWJcdTVhYjJcdTVhZDJcdTVhZDRcdTVhYjhcdTVhZTBcdTVhZTNcdTVhZjFcdTVhZDZcdTVhZTZcdTVhZDhcdTVhZGNcdTViMDlcdTViMTdcdTViMTZcdTViMzJcdTViMzdcdTViNDBcdTVjMTVcdTVjMWNcdTViNWFcdTViNjVcdTViNzNcdTViNTFcdTViNTNc''@;'; put 'put ''dTViNjJcdTlhNzVcdTlhNzdcdTlhNzhcdTlhN2FcdTlhN2ZcdTlhN2RcdTlhODBcdTlhODFcdTlhODVcdTlhODhcdTlhOGFcdTlhOTBcdTlhOTJcdTlhOTNcdTlhOTZcdTlhOThcdTlhOWJcdTlhOWNcdTlhOWRcdTlhOWZcdTlhYTBcdTlhYTJcdTlhYTNcdTlhYTVcdTlhYTdcdTdlOWZcdTdl''@;'; put 'put ''YTFcdTdlYTNcdTdlYTVcdTdlYThcdTdlYTlcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzMF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMzBdW3BdXT01ODg4MCtwLGJbNTg4ODArcF09X1syMzBdW3BdKTtmb3IoX1syMzFdPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlYWRcdTdlYjBcdTdlYmVcdTdlYzBcdTdlYzFc''@;'; put 'put ''dTdlYzJcdTdlYzlcdTdlY2JcdTdlY2NcdTdlZDBcdTdlZDRcdTdlZDdcdTdlZGJcdTdlZTBcdTdlZTFcdTdlZThcdTdlZWJcdTdlZWVcdTdlZWZcdTdlZjFcdTdlZjJcdTdmMGRcdTdlZjZcdTdlZmFcdTdlZmJcdTdlZmVcdTdmMDFcdTdmMDJcdTdmMDNcdTdmMDdcdTdmMDhcdTdmMGJcdTdm''@;'; put 'put ''MGNcdTdmMGZcdTdmMTFcdTdmMTJcdTdmMTdcdTdmMTlcdTdmMWNcdTdmMWJcdTdmMWZcdTdmMjFcdTdmMjJcdTdmMjNcdTdmMjRcdTdmMjVcdTdmMjZcdTdmMjdcdTdmMmFcdTdmMmJcdTdmMmNcdTdmMmRcdTdmMmZcdTdmMzBcdTdmMzFcdTdmMzJcdTdmMzNcdTdmMzVcdTVlN2FcdTc1N2Zc''@;'; put 'put ''dTVkZGJcdTc1M2VcdTkwOTVcdTczOGVcdTczOTFcdTczYWVcdTczYTJcdTczOWZcdTczY2ZcdTczYzJcdTczZDFcdTczYjdcdTczYjNcdTczYzBcdTczYzlcdTczYzhcdTczZTVcdTczZDlcdTk4N2NcdTc0MGFcdTczZTlcdTczZTdcdTczZGVcdTczYmFcdTczZjJcdTc0MGZcdTc0MmFcdTc0''@;'; put 'put ''NWJcdTc0MjZcdTc0MjVcdTc0MjhcdTc0MzBcdTc0MmVcdTc0MmNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzMV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMzFdW3BdXT01OTEzNitwLGJbNTkxMzYrcF09X1syMzFdW3BdKTtmb3IoX1sy''@;'; put 'put ''MzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0MWJcdTc0MWFcdTc0NDFc''@;'; put 'put ''dTc0NWNcdTc0NTdcdTc0NTVcdTc0NTlcdTc0NzdcdTc0NmRcdTc0N2VcdTc0OWNcdTc0OGVcdTc0ODBcdTc0ODFcdTc0ODdcdTc0OGJcdTc0OWVcdTc0YThcdTc0YTlcdTc0OTBcdTc0YTdcdTc0ZDJcdTc0YmFcdTk3ZWFcdTk3ZWJcdTk3ZWNcdTY3NGNcdTY3NTNcdTY3NWVcdTY3NDhcdTY3''@;'; put 'put ''NjlcdTY3YTVcdTY3ODdcdTY3NmFcdTY3NzNcdTY3OThcdTY3YTdcdTY3NzVcdTY3YThcdTY3OWVcdTY3YWRcdTY3OGJcdTY3NzdcdTY3N2NcdTY3ZjBcdTY4MDlcdTY3ZDhcdTY4MGFcdTY3ZTlcdTY3YjBcdTY4MGNcdTY3ZDlcdTY3YjVcdTY3ZGFcdTY3YjNcdTY3ZGRcdTY4MDBcdTY3YzNc''@;'; put 'put ''dTY3YjhcdTY3ZTJcdTY4MGVcdTY3YzFcdTY3ZmRcdTY4MzJcdTY4MzNcdTY4NjBcdTY4NjFcdTY4NGVcdTY4NjJcdTY4NDRcdTY4NjRcdTY4ODNcdTY4MWRcdTY4NTVcdTY4NjZcdTY4NDFcdTY4NjdcdTY4NDBcdTY4M2VcdTY4NGFcdTY4NDlcdTY4MjlcdTY4YjVcdTY4OGZcdTY4NzRcdTY4''@;'; put 'put ''NzdcdTY4OTNcdTY4NmJcdTY4YzJcdTY5NmVcdTY4ZmNcdTY5MWZcdTY5MjBcdTY4ZjlcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzMl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMzJdW3BdXT01OTM5MitwLGJbNTkzOTIrcF09X1syMzJd''@;'; put 'put ''W3BdKTtmb3IoX1syMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY5MjRc''@;'; put 'put ''dTY4ZjBcdTY5MGJcdTY5MDFcdTY5NTdcdTY4ZTNcdTY5MTBcdTY5NzFcdTY5MzlcdTY5NjBcdTY5NDJcdTY5NWRcdTY5ODRcdTY5NmJcdTY5ODBcdTY5OThcdTY5NzhcdTY5MzRcdTY5Y2NcdTY5ODdcdTY5ODhcdTY5Y2VcdTY5ODlcdTY5NjZcdTY5NjNcdTY5NzlcdTY5OWJcdTY5YTdcdTY5''@;'; put 'put ''YmJcdTY5YWJcdTY5YWRcdTY5ZDRcdTY5YjFcdTY5YzFcdTY5Y2FcdTY5ZGZcdTY5OTVcdTY5ZTBcdTY5OGRcdTY5ZmZcdTZhMmZcdTY5ZWRcdTZhMTdcdTZhMThcdTZhNjVcdTY5ZjJcdTZhNDRcdTZhM2VcdTZhYTBcdTZhNTBcdTZhNWJcdTZhMzVcdTZhOGVcdTZhNzlcdTZhM2RcdTZhMjhc''@;'; put 'put ''dTZhNThcdTZhN2NcdTZhOTFcdTZhOTBcdTZhYTlcdTZhOTdcdTZhYWJcdTczMzdcdTczNTJcdTZiODFcdTZiODJcdTZiODdcdTZiODRcdTZiOTJcdTZiOTNcdTZiOGRcdTZiOWFcdTZiOWJcdTZiYTFcdTZiYWFcdThmNmJcdThmNmRcdThmNzFcdThmNzJcdThmNzNcdThmNzVcdThmNzZcdThm''@;'; put 'put ''NzhcdThmNzdcdThmNzlcdThmN2FcdThmN2NcdThmN2VcdThmODFcdThmODJcdThmODRcdThmODdcdThmOGJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzM11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMzNdW3BdXT01OTY0OCtwLGJbNTk2''@;'; put 'put ''NDgrcF09X1syMzNdW3BdKTtmb3IoX1syMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdThmOGRcdThmOGVcdThmOGZcdThmOThcdThmOWFcdThlY2VcdTYyMGJcdTYyMTdcdTYyMWJcdTYyMWZcdTYyMjJcdTYyMjFcdTYyMjVcdTYyMjRcdTYyMmNcdTgxZTdcdTc0ZWZcdTc0ZjRcdTc0ZmZcdTc1MGZcdTc1MTFcdTc1MTNcdTY1MzRcdTY1ZWVcdTY1ZWZcdTY1ZjBcdTY2''@;'; put 'put ''MGFcdTY2MTlcdTY3NzJcdTY2MDNcdTY2MTVcdTY2MDBcdTcwODVcdTY2ZjdcdTY2MWRcdTY2MzRcdTY2MzFcdTY2MzZcdTY2MzVcdTgwMDZcdTY2NWZcdTY2NTRcdTY2NDFcdTY2NGZcdTY2NTZcdTY2NjFcdTY2NTdcdTY2NzdcdTY2ODRcdTY2OGNcdTY2YTdcdTY2OWRcdTY2YmVcdTY2ZGJc''@;'; put 'put ''dTY2ZGNcdTY2ZTZcdTY2ZTlcdThkMzJcdThkMzNcdThkMzZcdThkM2JcdThkM2RcdThkNDBcdThkNDVcdThkNDZcdThkNDhcdThkNDlcdThkNDdcdThkNGRcdThkNTVcdThkNTlcdTg5YzdcdTg5Y2FcdTg5Y2JcdTg5Y2NcdTg5Y2VcdTg5Y2ZcdTg5ZDBcdTg5ZDFcdTcyNmVcdTcyOWZcdTcy''@;'; put 'put ''NWRcdTcyNjZcdTcyNmZcdTcyN2VcdTcyN2ZcdTcyODRcdTcyOGJcdTcyOGRcdTcyOGZcdTcyOTJcdTYzMDhcdTYzMzJcdTYzYjBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzNF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMzRdW3BdXT01''@;'; put 'put ''OTkwNCtwLGJbNTk5MDQrcF09X1syMzRdW3BdKTtmb3IoX1syMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTY0M2ZcdTY0ZDhcdTgwMDRcdTZiZWFcdTZiZjNcdTZiZmRcdTZiZjVcdTZiZjlcdTZjMDVcdTZjMDdcdTZjMDZcdTZjMGRcdTZjMTVcdTZjMThcdTZjMTlcdTZjMWFcdTZjMjFcdTZjMjlcdTZjMjRcdTZjMmFcdTZjMzJcdTY1MzVcdTY1NTVcdTY1NmJcdTcy''@;'; put 'put ''NGRcdTcyNTJcdTcyNTZcdTcyMzBcdTg2NjJcdTUyMTZcdTgwOWZcdTgwOWNcdTgwOTNcdTgwYmNcdTY3MGFcdTgwYmRcdTgwYjFcdTgwYWJcdTgwYWRcdTgwYjRcdTgwYjdcdTgwZTdcdTgwZThcdTgwZTlcdTgwZWFcdTgwZGJcdTgwYzJcdTgwYzRcdTgwZDlcdTgwY2RcdTgwZDdcdTY3MTBc''@;'; put 'put ''dTgwZGRcdTgwZWJcdTgwZjFcdTgwZjRcdTgwZWRcdTgxMGRcdTgxMGVcdTgwZjJcdTgwZmNcdTY3MTVcdTgxMTJcdThjNWFcdTgxMzZcdTgxMWVcdTgxMmNcdTgxMThcdTgxMzJcdTgxNDhcdTgxNGNcdTgxNTNcdTgxNzRcdTgxNTlcdTgxNWFcdTgxNzFcdTgxNjBcdTgxNjlcdTgxN2NcdTgx''@;'; put 'put ''N2RcdTgxNmRcdTgxNjdcdTU4NGRcdTVhYjVcdTgxODhcdTgxODJcdTgxOTFcdTZlZDVcdTgxYTNcdTgxYWFcdTgxY2NcdTY3MjZcdTgxY2FcdTgxYmJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzNV1bcF0uY2hhckNvZGVBdCgwKSYmKElb''@;'; put 'put ''X1syMzVdW3BdXT02MDE2MCtwLGJbNjAxNjArcF09X1syMzVdW3BdKTtmb3IoX1syMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxYzFcdTgxYTZcdTZiMjRcdTZiMzdcdTZiMzlcdTZiNDNcdTZiNDZcdTZiNTlcdTk4ZDFcdTk4ZDJcdTk4ZDNcdTk4ZDVcdTk4ZDlcdTk4ZGFcdTZiYjNcdTVmNDBcdTZiYzJcdTg5ZjNcdTY1OTBcdTlmNTFcdTY1OTNcdTY1YmNcdTY1''@;'; put 'put ''YzZcdTY1YzRcdTY1YzNcdTY1Y2NcdTY1Y2VcdTY1ZDJcdTY1ZDZcdTcwODBcdTcwOWNcdTcwOTZcdTcwOWRcdTcwYmJcdTcwYzBcdTcwYjdcdTcwYWJcdTcwYjFcdTcwZThcdTcwY2FcdTcxMTBcdTcxMTNcdTcxMTZcdTcxMmZcdTcxMzFcdTcxNzNcdTcxNWNcdTcxNjhcdTcxNDVcdTcxNzJc''@;'; put 'put ''dTcxNGFcdTcxNzhcdTcxN2FcdTcxOThcdTcxYjNcdTcxYjVcdTcxYThcdTcxYTBcdTcxZTBcdTcxZDRcdTcxZTdcdTcxZjlcdTcyMWRcdTcyMjhcdTcwNmNcdTcxMThcdTcxNjZcdTcxYjlcdTYyM2VcdTYyM2RcdTYyNDNcdTYyNDhcdTYyNDlcdTc5M2JcdTc5NDBcdTc5NDZcdTc5NDlcdTc5''@;'; put 'put ''NWJcdTc5NWNcdTc5NTNcdTc5NWFcdTc5NjJcdTc5NTdcdTc5NjBcdTc5NmZcdTc5NjdcdTc5N2FcdTc5ODVcdTc5OGFcdTc5OWFcdTc5YTdcdTc5YjNcdTVmZDFcdTVmZDBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzNl1bcF0uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKElbX1syMzZdW3BdXT02MDQxNitwLGJbNjA0MTYrcF09X1syMzZdW3BdKTtmb3IoX1syMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwM2NcdTYwNWRcdTYwNWFcdTYwNjdcdTYwNDFcdTYwNTlcdTYwNjNcdTYwYWJcdTYxMDZcdTYxMGRcdTYxNWRcdTYxYTlcdTYxOWRcdTYxY2JcdTYxZDFcdTYyMDZcdTgwODBcdTgwN2ZcdTZjOTNcdTZjZjZcdTZk''@;'; put 'put ''ZmNcdTc3ZjZcdTc3ZjhcdTc4MDBcdTc4MDlcdTc4MTdcdTc4MThcdTc4MTFcdTY1YWJcdTc4MmRcdTc4MWNcdTc4MWRcdTc4MzlcdTc4M2FcdTc4M2JcdTc4MWZcdTc4M2NcdTc4MjVcdTc4MmNcdTc4MjNcdTc4MjlcdTc4NGVcdTc4NmRcdTc4NTZcdTc4NTdcdTc4MjZcdTc4NTBcdTc4NDdc''@;'; put 'put ''dTc4NGNcdTc4NmFcdTc4OWJcdTc4OTNcdTc4OWFcdTc4ODdcdTc4OWNcdTc4YTFcdTc4YTNcdTc4YjJcdTc4YjlcdTc4YTVcdTc4ZDRcdTc4ZDlcdTc4YzlcdTc4ZWNcdTc4ZjJcdTc5MDVcdTc4ZjRcdTc5MTNcdTc5MjRcdTc5MWVcdTc5MzRcdTlmOWJcdTllZjlcdTllZmJcdTllZmNcdTc2''@;'; put 'put ''ZjFcdTc3MDRcdTc3MGRcdTc2ZjlcdTc3MDdcdTc3MDhcdTc3MWFcdTc3MjJcdTc3MTlcdTc3MmRcdTc3MjZcdTc3MzVcdTc3MzhcdTc3NTBcdTc3NTFcdTc3NDdcdTc3NDNcdTc3NWFcdTc3NjhcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIz''@;'; put 'put ''N11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMzddW3BdXT02MDY3MitwLGJbNjA2NzIrcF09X1syMzddW3BdKTtmb3IoX1syMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3NjJcdTc3NjVcdTc3N2ZcdTc3OGRcdTc3N2RcdTc3ODBcdTc3OGNcdTc3OTFcdTc3OWZcdTc3YTBcdTc3YjBcdTc3YjVcdTc3YmRcdTc1M2FcdTc1NDBcdTc1NGVcdTc1NGJcdTc1NDhcdTc1''@;'; put 'put ''NWJcdTc1NzJcdTc1NzlcdTc1ODNcdTdmNThcdTdmNjFcdTdmNWZcdThhNDhcdTdmNjhcdTdmNzRcdTdmNzFcdTdmNzlcdTdmODFcdTdmN2VcdTc2Y2RcdTc2ZTVcdTg4MzJcdTk0ODVcdTk0ODZcdTk0ODdcdTk0OGJcdTk0OGFcdTk0OGNcdTk0OGRcdTk0OGZcdTk0OTBcdTk0OTRcdTk0OTdc''@;'; put 'put ''dTk0OTVcdTk0OWFcdTk0OWJcdTk0OWNcdTk0YTNcdTk0YTRcdTk0YWJcdTk0YWFcdTk0YWRcdTk0YWNcdTk0YWZcdTk0YjBcdTk0YjJcdTk0YjRcdTk0YjZcdTk0YjdcdTk0YjhcdTk0YjlcdTk0YmFcdTk0YmNcdTk0YmRcdTk0YmZcdTk0YzRcdTk0YzhcdTk0YzlcdTk0Y2FcdTk0Y2JcdTk0''@;'; put 'put ''Y2NcdTk0Y2RcdTk0Y2VcdTk0ZDBcdTk0ZDFcdTk0ZDJcdTk0ZDVcdTk0ZDZcdTk0ZDdcdTk0ZDlcdTk0ZDhcdTk0ZGJcdTk0ZGVcdTk0ZGZcdTk0ZTBcdTk0ZTJcdTk0ZTRcdTk0ZTVcdTk0ZTdcdTk0ZThcdTk0ZWFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzhdLmxlbmd0aDsrK3Ap''@;'; put 'put ''NjU1MzMhPT1fWzIzOF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMzhdW3BdXT02MDkyOCtwLGJbNjA5MjgrcF09X1syMzhdW3BdKTtmb3IoX1syMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk0ZTlcdTk0ZWJcdTk0ZWVcdTk0ZWZcdTk0ZjNcdTk0ZjRcdTk0ZjVcdTk0ZjdcdTk0ZjlcdTk0ZmNcdTk0ZmRcdTk0ZmZcdTk1MDNcdTk1MDJcdTk1MDZcdTk1MDdcdTk1''@;'; put 'put ''MDlcdTk1MGFcdTk1MGRcdTk1MGVcdTk1MGZcdTk1MTJcdTk1MTNcdTk1MTRcdTk1MTVcdTk1MTZcdTk1MThcdTk1MWJcdTk1MWRcdTk1MWVcdTk1MWZcdTk1MjJcdTk1MmFcdTk1MmJcdTk1MjlcdTk1MmNcdTk1MzFcdTk1MzJcdTk1MzRcdTk1MzZcdTk1MzdcdTk1MzhcdTk1M2NcdTk1M2Vc''@;'; put 'put ''dTk1M2ZcdTk1NDJcdTk1MzVcdTk1NDRcdTk1NDVcdTk1NDZcdTk1NDlcdTk1NGNcdTk1NGVcdTk1NGZcdTk1NTJcdTk1NTNcdTk1NTRcdTk1NTZcdTk1NTdcdTk1NThcdTk1NTlcdTk1NWJcdTk1NWVcdTk1NWZcdTk1NWRcdTk1NjFcdTk1NjJcdTk1NjRcdTk1NjVcdTk1NjZcdTk1NjdcdTk1''@;'; put 'put ''NjhcdTk1NjlcdTk1NmFcdTk1NmJcdTk1NmNcdTk1NmZcdTk1NzFcdTk1NzJcdTk1NzNcdTk1M2FcdTc3ZTdcdTc3ZWNcdTk2YzlcdTc5ZDVcdTc5ZWRcdTc5ZTNcdTc5ZWJcdTdhMDZcdTVkNDdcdTdhMDNcdTdhMDJcdTdhMWVcdTdhMTRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzld''@;'; put 'put ''Lmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzOV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMzldW3BdXT02MTE4NCtwLGJbNjExODQrcF09X1syMzldW3BdKTtmb3IoX1syNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhMzlcdTdhMzdcdTdhNTFcdTllY2ZcdTk5YTVcdTdhNzBcdTc2ODhcdTc2OGVcdTc2OTNcdTc2OTlcdTc2YTRcdTc0ZGVcdTc0ZTBcdTc1MmNcdTll''@;'; put 'put ''MjBcdTllMjJcdTllMjhcdTllMjlcdTllMmFcdTllMmJcdTllMmNcdTllMzJcdTllMzFcdTllMzZcdTllMzhcdTllMzdcdTllMzlcdTllM2FcdTllM2VcdTllNDFcdTllNDJcdTllNDRcdTllNDZcdTllNDdcdTllNDhcdTllNDlcdTllNGJcdTllNGNcdTllNGVcdTllNTFcdTllNTVcdTllNTdc''@;'; put 'put ''dTllNWFcdTllNWJcdTllNWNcdTllNWVcdTllNjNcdTllNjZcdTllNjdcdTllNjhcdTllNjlcdTllNmFcdTllNmJcdTllNmNcdTllNzFcdTllNmRcdTllNzNcdTc1OTJcdTc1OTRcdTc1OTZcdTc1YTBcdTc1OWRcdTc1YWNcdTc1YTNcdTc1YjNcdTc1YjRcdTc1YjhcdTc1YzRcdTc1YjFcdTc1''@;'; put 'put ''YjBcdTc1YzNcdTc1YzJcdTc1ZDZcdTc1Y2RcdTc1ZTNcdTc1ZThcdTc1ZTZcdTc1ZTRcdTc1ZWJcdTc1ZTdcdTc2MDNcdTc1ZjFcdTc1ZmNcdTc1ZmZcdTc2MTBcdTc2MDBcdTc2MDVcdTc2MGNcdTc2MTdcdTc2MGFcdTc2MjVcdTc2MThcdTc2MTVcdTc2MTlcdWZmZmQiLnNwbGl0KCIiKSxw''@;'; put 'put ''PTA7cCE9X1syNDBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0MF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syNDBdW3BdXT02MTQ0MCtwLGJbNjE0NDArcF09X1syNDBdW3BdKTtmb3IoX1syNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc2MWJcdTc2M2NcdTc2MjJcdTc2MjBcdTc2NDBcdTc2MmRcdTc2MzBcdTc2M2ZcdTc2MzVcdTc2NDNcdTc2M2VcdTc2MzNcdTc2''@;'; put 'put ''NGRcdTc2NWVcdTc2NTRcdTc2NWNcdTc2NTZcdTc2NmJcdTc2NmZcdTdmY2FcdTdhZTZcdTdhNzhcdTdhNzlcdTdhODBcdTdhODZcdTdhODhcdTdhOTVcdTdhYTZcdTdhYTBcdTdhYWNcdTdhYThcdTdhYWRcdTdhYjNcdTg4NjRcdTg4NjlcdTg4NzJcdTg4N2RcdTg4N2ZcdTg4ODJcdTg4YTJc''@;'; put 'put ''dTg4YzZcdTg4YjdcdTg4YmNcdTg4YzlcdTg4ZTJcdTg4Y2VcdTg4ZTNcdTg4ZTVcdTg4ZjFcdTg5MWFcdTg4ZmNcdTg4ZThcdTg4ZmVcdTg4ZjBcdTg5MjFcdTg5MTlcdTg5MTNcdTg5MWJcdTg5MGFcdTg5MzRcdTg5MmJcdTg5MzZcdTg5NDFcdTg5NjZcdTg5N2JcdTc1OGJcdTgwZTVcdTc2''@;'; put 'put ''YjJcdTc2YjRcdTc3ZGNcdTgwMTJcdTgwMTRcdTgwMTZcdTgwMWNcdTgwMjBcdTgwMjJcdTgwMjVcdTgwMjZcdTgwMjdcdTgwMjlcdTgwMjhcdTgwMzFcdTgwMGJcdTgwMzVcdTgwNDNcdTgwNDZcdTgwNGRcdTgwNTJcdTgwNjlcdTgwNzFcdTg5ODNcdTk4NzhcdTk4ODBcdTk4ODNcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxwPTA7cCE9X1syNDFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0MV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syNDFdW3BdXT02MTY5NitwLGJbNjE2OTYrcF09X1syNDFdW3BdKTtmb3IoX1syNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk4ODlcdTk4OGNcdTk4OGRcdTk4OGZcdTk4OTRcdTk4OWFcdTk4OWJcdTk4OWVcdTk4OWZcdTk4YTFcdTk4''@;'; put 'put ''YTJcdTk4YTVcdTk4YTZcdTg2NGRcdTg2NTRcdTg2NmNcdTg2NmVcdTg2N2ZcdTg2N2FcdTg2N2NcdTg2N2JcdTg2YThcdTg2OGRcdTg2OGJcdTg2YWNcdTg2OWRcdTg2YTdcdTg2YTNcdTg2YWFcdTg2OTNcdTg2YTlcdTg2YjZcdTg2YzRcdTg2YjVcdTg2Y2VcdTg2YjBcdTg2YmFcdTg2YjFc''@;'; put 'put ''dTg2YWZcdTg2YzlcdTg2Y2ZcdTg2YjRcdTg2ZTlcdTg2ZjFcdTg2ZjJcdTg2ZWRcdTg2ZjNcdTg2ZDBcdTg3MTNcdTg2ZGVcdTg2ZjRcdTg2ZGZcdTg2ZDhcdTg2ZDFcdTg3MDNcdTg3MDdcdTg2ZjhcdTg3MDhcdTg3MGFcdTg3MGRcdTg3MDlcdTg3MjNcdTg3M2JcdTg3MWVcdTg3MjVcdTg3''@;'; put 'put ''MmVcdTg3MWFcdTg3M2VcdTg3NDhcdTg3MzRcdTg3MzFcdTg3MjlcdTg3MzdcdTg3M2ZcdTg3ODJcdTg3MjJcdTg3N2RcdTg3N2VcdTg3N2JcdTg3NjBcdTg3NzBcdTg3NGNcdTg3NmVcdTg3OGJcdTg3NTNcdTg3NjNcdTg3N2NcdTg3NjRcdTg3NTlcdTg3NjVcdTg3OTNcdTg3YWZcdTg3YThc''@;'; put 'put ''dTg3ZDJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0Ml1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syNDJdW3BdXT02MTk1MitwLGJbNjE5NTIrcF09X1syNDJdW3BdKTtmb3IoX1syNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg3YzZcdTg3ODhcdTg3ODVcdTg3YWRcdTg3OTdcdTg3ODNcdTg3YWJcdTg3ZTVcdTg3''@;'; put 'put ''YWNcdTg3YjVcdTg3YjNcdTg3Y2JcdTg3ZDNcdTg3YmRcdTg3ZDFcdTg3YzBcdTg3Y2FcdTg3ZGJcdTg3ZWFcdTg3ZTBcdTg3ZWVcdTg4MTZcdTg4MTNcdTg3ZmVcdTg4MGFcdTg4MWJcdTg4MjFcdTg4MzlcdTg4M2NcdTdmMzZcdTdmNDJcdTdmNDRcdTdmNDVcdTgyMTBcdTdhZmFcdTdhZmRc''@;'; put 'put ''dTdiMDhcdTdiMDNcdTdiMDRcdTdiMTVcdTdiMGFcdTdiMmJcdTdiMGZcdTdiNDdcdTdiMzhcdTdiMmFcdTdiMTlcdTdiMmVcdTdiMzFcdTdiMjBcdTdiMjVcdTdiMjRcdTdiMzNcdTdiM2VcdTdiMWVcdTdiNThcdTdiNWFcdTdiNDVcdTdiNzVcdTdiNGNcdTdiNWRcdTdiNjBcdTdiNmVcdTdi''@;'; put 'put ''N2JcdTdiNjJcdTdiNzJcdTdiNzFcdTdiOTBcdTdiYTZcdTdiYTdcdTdiYjhcdTdiYWNcdTdiOWRcdTdiYThcdTdiODVcdTdiYWFcdTdiOWNcdTdiYTJcdTdiYWJcdTdiYjRcdTdiZDFcdTdiYzFcdTdiY2NcdTdiZGRcdTdiZGFcdTdiZTVcdTdiZTZcdTdiZWFcdTdjMGNcdTdiZmVcdTdiZmNc''@;'; put 'put ''dTdjMGZcdTdjMTZcdTdjMGJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0M11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syNDNdW3BdXT02MjIwOCtwLGJbNjIyMDgrcF09X1syNDNdW3BdKTtmb3IoX1syNDRdPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdjMWZcdTdjMmFcdTdjMjZcdTdjMzhcdTdjNDFcdTdjNDBcdTgx''@;'; put 'put ''ZmVcdTgyMDFcdTgyMDJcdTgyMDRcdTgxZWNcdTg4NDRcdTgyMjFcdTgyMjJcdTgyMjNcdTgyMmRcdTgyMmZcdTgyMjhcdTgyMmJcdTgyMzhcdTgyM2JcdTgyMzNcdTgyMzRcdTgyM2VcdTgyNDRcdTgyNDlcdTgyNGJcdTgyNGZcdTgyNWFcdTgyNWZcdTgyNjhcdTg4N2VcdTg4ODVcdTg4ODhc''@;'; put 'put ''dTg4ZDhcdTg4ZGZcdTg5NWVcdTdmOWRcdTdmOWZcdTdmYTdcdTdmYWZcdTdmYjBcdTdmYjJcdTdjN2NcdTY1NDlcdTdjOTFcdTdjOWRcdTdjOWNcdTdjOWVcdTdjYTJcdTdjYjJcdTdjYmNcdTdjYmRcdTdjYzFcdTdjYzdcdTdjY2NcdTdjY2RcdTdjYzhcdTdjYzVcdTdjZDdcdTdjZThcdTgy''@;'; put 'put ''NmVcdTY2YThcdTdmYmZcdTdmY2VcdTdmZDVcdTdmZTVcdTdmZTFcdTdmZTZcdTdmZTlcdTdmZWVcdTdmZjNcdTdjZjhcdTdkNzdcdTdkYTZcdTdkYWVcdTdlNDdcdTdlOWJcdTllYjhcdTllYjRcdThkNzNcdThkODRcdThkOTRcdThkOTFcdThkYjFcdThkNjdcdThkNmRcdThjNDdcdThjNDlc''@;'; put 'put ''dTkxNGFcdTkxNTBcdTkxNGVcdTkxNGZcdTkxNjRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0NF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syNDRdW3BdXT02MjQ2NCtwLGJbNjI0NjQrcF09X1syNDRdW3BdKTtmb3IoX1syNDVdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkxNjJcdTkxNjFcdTkxNzBcdTkxNjlcdTkx''@;'; put 'put ''NmZcdTkxN2RcdTkxN2VcdTkxNzJcdTkxNzRcdTkxNzlcdTkxOGNcdTkxODVcdTkxOTBcdTkxOGRcdTkxOTFcdTkxYTJcdTkxYTNcdTkxYWFcdTkxYWRcdTkxYWVcdTkxYWZcdTkxYjVcdTkxYjRcdTkxYmFcdThjNTVcdTllN2VcdThkYjhcdThkZWJcdThlMDVcdThlNTlcdThlNjlcdThkYjVc''@;'; put 'put ''dThkYmZcdThkYmNcdThkYmFcdThkYzRcdThkZDZcdThkZDdcdThkZGFcdThkZGVcdThkY2VcdThkY2ZcdThkZGJcdThkYzZcdThkZWNcdThkZjdcdThkZjhcdThkZTNcdThkZjlcdThkZmJcdThkZTRcdThlMDlcdThkZmRcdThlMTRcdThlMWRcdThlMWZcdThlMmNcdThlMmVcdThlMjNcdThl''@;'; put 'put ''MmZcdThlM2FcdThlNDBcdThlMzlcdThlMzVcdThlM2RcdThlMzFcdThlNDlcdThlNDFcdThlNDJcdThlNTFcdThlNTJcdThlNGFcdThlNzBcdThlNzZcdThlN2NcdThlNmZcdThlNzRcdThlODVcdThlOGZcdThlOTRcdThlOTBcdThlOWNcdThlOWVcdThjNzhcdThjODJcdThjOGFcdThjODVc''@;'; put 'put ''dThjOThcdThjOTRcdTY1OWJcdTg5ZDZcdTg5ZGVcdTg5ZGFcdTg5ZGNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0NV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syNDVdW3BdXT02MjcyMCtwLGJbNjI3MjArcF09X1syNDVdW3BdKTtmb3Io''@;'; put 'put ''X1syNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg5ZTVcdTg5ZWJcdTg5''@;'; put 'put ''ZWZcdThhM2VcdThiMjZcdTk3NTNcdTk2ZTlcdTk2ZjNcdTk2ZWZcdTk3MDZcdTk3MDFcdTk3MDhcdTk3MGZcdTk3MGVcdTk3MmFcdTk3MmRcdTk3MzBcdTk3M2VcdTlmODBcdTlmODNcdTlmODVcdTlmODZcdTlmODdcdTlmODhcdTlmODlcdTlmOGFcdTlmOGNcdTllZmVcdTlmMGJcdTlmMGRc''@;'; put 'put ''dTk2YjlcdTk2YmNcdTk2YmRcdTk2Y2VcdTk2ZDJcdTc3YmZcdTk2ZTBcdTkyOGVcdTkyYWVcdTkyYzhcdTkzM2VcdTkzNmFcdTkzY2FcdTkzOGZcdTk0M2VcdTk0NmJcdTljN2ZcdTljODJcdTljODVcdTljODZcdTljODdcdTljODhcdTdhMjNcdTljOGJcdTljOGVcdTljOTBcdTljOTFcdTlj''@;'; put 'put ''OTJcdTljOTRcdTljOTVcdTljOWFcdTljOWJcdTljOWVcdTljOWZcdTljYTBcdTljYTFcdTljYTJcdTljYTNcdTljYTVcdTljYTZcdTljYTdcdTljYThcdTljYTlcdTljYWJcdTljYWRcdTljYWVcdTljYjBcdTljYjFcdTljYjJcdTljYjNcdTljYjRcdTljYjVcdTljYjZcdTljYjdcdTljYmFc''@;'; put 'put ''dTljYmJcdTljYmNcdTljYmRcdTljYzRcdTljYzVcdTljYzZcdTljYzdcdTljY2FcdTljY2JcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0Nl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syNDZdW3BdXT02Mjk3NitwLGJbNjI5NzYrcF09X1sy''@;'; put 'put ''NDZdW3BdKTtmb3IoX1syNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlj''@;'; put 'put ''Y2NcdTljY2RcdTljY2VcdTljY2ZcdTljZDBcdTljZDNcdTljZDRcdTljZDVcdTljZDdcdTljZDhcdTljZDlcdTljZGNcdTljZGRcdTljZGZcdTljZTJcdTk3N2NcdTk3ODVcdTk3OTFcdTk3OTJcdTk3OTRcdTk3YWZcdTk3YWJcdTk3YTNcdTk3YjJcdTk3YjRcdTlhYjFcdTlhYjBcdTlhYjdc''@;'; put 'put ''dTllNThcdTlhYjZcdTlhYmFcdTlhYmNcdTlhYzFcdTlhYzBcdTlhYzVcdTlhYzJcdTlhY2JcdTlhY2NcdTlhZDFcdTliNDVcdTliNDNcdTliNDdcdTliNDlcdTliNDhcdTliNGRcdTliNTFcdTk4ZThcdTk5MGRcdTk5MmVcdTk5NTVcdTk5NTRcdTlhZGZcdTlhZTFcdTlhZTZcdTlhZWZcdTlh''@;'; put 'put ''ZWJcdTlhZmJcdTlhZWRcdTlhZjlcdTliMDhcdTliMGZcdTliMTNcdTliMWZcdTliMjNcdTllYmRcdTllYmVcdTdlM2JcdTllODJcdTllODdcdTllODhcdTllOGJcdTllOTJcdTkzZDZcdTllOWRcdTllOWZcdTllZGJcdTllZGNcdTllZGRcdTllZTBcdTllZGZcdTllZTJcdTllZTlcdTllZTdc''@;'; put 'put ''dTllZTVcdTllZWFcdTllZWZcdTlmMjJcdTlmMmNcdTlmMmZcdTlmMzlcdTlmMzdcdTlmM2RcdTlmM2VcdTlmNDRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0N11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syNDddW3BdXT02MzIzMitwLGJb''@;'; put 'put ''NjMyMzIrcF09X1syNDddW3BdKTtyZXR1cm57ZW5jOkksZGVjOmJ9fSgpLFhbMTAwMjldPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlc''@;'; put 'put ''eDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzRcdTAxMDBcdTAxMDFceGM5XHUwMTA0XHhkNlx4ZGNceGUxXHUw''@;'; put 'put ''MTA1XHUwMTBjXHhlNFx1MDEwZFx1MDEwNlx1MDEwN1x4ZTlcdTAxNzlcdTAxN2FcdTAxMGVceGVkXHUwMTBmXHUwMTEyXHUwMTEzXHUwMTE2XHhmM1x1MDExN1x4ZjRceGY2XHhmNVx4ZmFcdTAxMWFcdTAxMWJceGZjXHUyMDIwXHhiMFx1MDExOFx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFl''@;'; put 'put ''XHhhOVx1MjEyMlx1MDExOVx4YThcdTIyNjBcdTAxMjNcdTAxMmVcdTAxMmZcdTAxMmFcdTIyNjRcdTIyNjVcdTAxMmJcdTAxMzZcdTIyMDJcdTIyMTFcdTAxNDJcdTAxM2JcdTAxM2NcdTAxM2RcdTAxM2VcdTAxMzlcdTAxM2FcdTAxNDVcdTAxNDZcdTAxNDNceGFjXHUyMjFhXHUwMTQ0XHUw''@;'; put 'put ''MTQ3XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHUwMTQ4XHUwMTUwXHhkNVx1MDE1MVx1MDE0Y1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FcdTAxNGRcdTAxNTRcdTAxNTVcdTAxNThcdTIwMzlcdTIwM2FcdTAxNTlcdTAxNTZcdTAxNTdcdTAxNjBcdTIw''@;'; put 'put ''MWFcdTIwMWVcdTAxNjFcdTAxNWFcdTAxNWJceGMxXHUwMTY0XHUwMTY1XHhjZFx1MDE3ZFx1MDE3ZVx1MDE2YVx4ZDNceGQ0XHUwMTZiXHUwMTZlXHhkYVx1MDE2Zlx1MDE3MFx1MDE3MVx1MDE3Mlx1MDE3M1x4ZGRceGZkXHUwMTM3XHUwMTdiXHUwMTQxXHUwMTdjXHUwMTIyXHUwMmM3IixJ''@;'; put 'put ''PVtdLF89e30scD0wOzI1NiE9cDsrK3ApNjU1MzMhPT1iLmNoYXJDb2RlQXQocCkmJihfW2IuY2hhckF0KHApXT1wKSxJW3BdPWIuY2hhckF0KHApO3JldHVybntlbmM6XyxkZWM6SX19KCksWFsxMDA3OV09ZnVuY3Rpb24oKXtmb3IodmFyIGI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2''@;'; put 'put ''XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlq''@;'; put 'put ''a2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNceGRkXHhiMFx4YTJc''@;'; put 'put ''eGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1''@;'; put 'put ''MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUyMDQ0XHhhNFx4ZDBceGYwXHhkZVx4ZmVceGZkXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJc''@;'; put 'put ''eGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3IixJPVtdLF89e30scD0wOzI1NiE9cDsrK3ApNjU1MzMhPT1iLmNoYXJD''@;'; put 'put ''b2RlQXQocCkmJihfW2IuY2hhckF0KHApXT1wKSxJW3BdPWIuY2hhckF0KHApO3JldHVybntlbmM6XyxkZWM6SX19KCksWFsxMDA4MV09ZnVuY3Rpb24oKXtmb3IodmFyIGI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgx''@;'; put 'put ''M1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjNFx4YzVceGM3XHhj''@;'; put 'put ''OVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4''@;'; put 'put ''YjRceGE4XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNc''@;'; put 'put ''eGQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTAxMWVcdTAxMWZcdTAxMzBcdTAxMzFcdTAxNWVcdTAxNWZcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4''@;'; put 'put ''Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHVmZmZkXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzciLEk9W10sXz17fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9bYi5jaGFyQXQocCld''@;'; put 'put ''PXApLElbcF09Yi5jaGFyQXQocCk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzI4NTkxXT1mdW5jdGlvbigpe2Zvcih2YXIgYj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5''@;'; put 'put ''XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5''@;'; put 'put ''XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJc''@;'; put 'put ''eGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4''@;'; put 'put ''ZGNceGRkXHhkZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiIsST1bXSxfPXt9LHA9MDsyNTYhPXA7''@;'; put 'put ''KytwKTY1NTMzIT09Yi5jaGFyQ29kZUF0KHApJiYoX1tiLmNoYXJBdChwKV09cCksSVtwXT1iLmNoYXJBdChwKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLGNlLmV4cG9ydHMmJnR5cGVvZiBET19OT1RfRVhQT1JUX0NPREVQQUdFPiJ1IiYmKGNlLmV4cG9ydHM9WCksZnVuY3Rpb24oYixJKXsi''@;'; put 'put ''dXNlIHN0cmljdCI7aWYodHlwZW9mIFg+InUiKXt2YXIgXz1YO2NlLmV4cG9ydHMmJnR5cGVvZiBET19OT1RfRVhQT1JUX0NPREVQQUdFPiJ1Ij9jZS5leHBvcnRzPUkoXyk6Yi5jcHRhYmxlPUkoXyl9ZWxzZSBYPUkoWCl9KHRoaXMsZnVuY3Rpb24oYil7InVzZSBzdHJpY3QiO3ZhciBJPXsx''@;'; put 'put ''MjAwOiJ1dGYxNmxlIiwxMjAxOiJ1dGYxNmJlIiwxMmUzOiJ1dGYzMmxlIiwxMjAwMToidXRmMzJiZSIsMTY5Njk6InV0ZjY0bGUiLDIwMTI3OiJhc2NpaSIsNjVlMzoidXRmNyIsNjUwMDE6InV0ZjgifSxfPVs4NzQsMTI1MCwxMjUxLDEyNTIsMTI1MywxMjU0LDEyNTUsMTI1NiwxZTRdLHA9''@;'; put 'put ''WzkzMiw5MzYsOTQ5LDk1MF0sVj1bNjUwMDFdLHc9e30sUD17fSxGPXt9LFI9e30sej1mdW5jdGlvbihqKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShqKX0sTj1mdW5jdGlvbihqKXtyZXR1cm4gai5jaGFyQ29kZUF0KDApfSxPPXR5cGVvZiBCdWZmZXI8InUiLEs9ZnVuY3Rpb24oKXt9''@;'; put 'put ''O2lmKE8pe3ZhciBaPSFCdWZmZXIuZnJvbTtpZighWil0cnl7QnVmZmVyLmZyb20oImZvbyIsInV0ZjgiKX1jYXRjaHtaPSEwfUs9Wj9mdW5jdGlvbihILGope3JldHVybiBqP25ldyBCdWZmZXIoSCxqKTpuZXcgQnVmZmVyKEgpfTpCdWZmZXIuZnJvbS5iaW5kKEJ1ZmZlciksQnVmZmVyLmFs''@;'; put 'put ''bG9jVW5zYWZlfHwoQnVmZmVyLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKEgpe3JldHVybiBuZXcgQnVmZmVyKEgpfSk7dmFyIFk9MTAyNCxXPUJ1ZmZlci5hbGxvY1Vuc2FmZShZKSxlZT1mdW5jdGlvbihqKXt2YXIgRT1mdW5jdGlvbihqKXtmb3IodmFyIEU9QnVmZmVyLmFsbG9jVW5zYWZlKDY1''@;'; put 'put ''NTM2KSxtPTA7bTw2NTUzNjsrK20pRVttXT0wO2Zvcih2YXIgQT1PYmplY3Qua2V5cyhqKSxhZT1BLmxlbmd0aCxuZT0wLHNlPUFbbmVdO25lPGFlOysrbmUpKHNlPUFbbmVdKSYmKEVbc2UuY2hhckNvZGVBdCgwKV09altzZV0pO3JldHVybiBFfShiW2pdLmVuYyk7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''KEEsYWUpe3ZhciBzZSxuZT1BLmxlbmd0aCxDZT0wLFVlPTAsSmU9MCxpdD0wO2lmKCJzdHJpbmciPT10eXBlb2YgQSlmb3Ioc2U9QnVmZmVyLmFsbG9jVW5zYWZlKG5lKSxDZT0wO0NlPG5lOysrQ2Upc2VbQ2VdPUVbQS5jaGFyQ29kZUF0KENlKV07ZWxzZSBpZihCdWZmZXIuaXNCdWZmZXIo''@;'; put 'put ''QSkpe2ZvcihzZT1CdWZmZXIuYWxsb2NVbnNhZmUoMipuZSksVWU9MCxDZT0wO0NlPG5lOysrQ2UpKEplPUFbQ2VdKTwxMjg/c2VbVWUrK109RVtKZV06SmU8MjI0PyhzZVtVZSsrXT1FWygoMzEmSmUpPDw2KSsoNjMmQVtDZSsxXSldLCsrQ2UpOkplPDI0MD8oc2VbVWUrK109RVsoKDE1Jkpl''@;'; put 'put ''KTw8MTIpKygoNjMmQVtDZSsxXSk8PDYpKyg2MyZBW0NlKzJdKV0sQ2UrPTIpOihpdD0oKDcmSmUpPDwxOCkrKCg2MyZBW0NlKzFdKTw8MTIpKygoNjMmQVtDZSsyXSk8PDYpKyg2MyZBW0NlKzNdKSxDZSs9MyxpdDw2NTUzNj9zZVtVZSsrXT1FW2l0XTooc2VbVWUrK109RVs1NTI5NisoKGl0''@;'; put 'put ''LT02NTUzNik+PjEwJjEwMjMpXSxzZVtVZSsrXT1FWzU2MzIwKygxMDIzJml0KV0pKTtzZT1zZS5zbGljZSgwLFVlKX1lbHNlIGZvcihzZT1CdWZmZXIuYWxsb2NVbnNhZmUobmUpLENlPTA7Q2U8bmU7KytDZSlzZVtDZV09RVtBW0NlXS5jaGFyQ29kZUF0KDApXTtyZXR1cm4gYWUmJiJidWYi''@;'; put 'put ''IT09YWU/ImFyciIhPT1hZT9zZS50b1N0cmluZygiYmluYXJ5Iik6W10uc2xpY2UuY2FsbChzZSk6c2V9fSxKPWZ1bmN0aW9uKGope3ZhciBFPWJbal0uZGVjLG09QnVmZmVyLmFsbG9jVW5zYWZlKDEzMTA3MiksQT0wLGFlPSIiO2ZvcihBPTA7QTxFLmxlbmd0aDsrK0EpaWYoYWU9RVtBXSl7''@;'; put 'put ''dmFyIG5lPWFlLmNoYXJDb2RlQXQoMCk7bVsyKkFdPTI1NSZuZSxtWzIqQSsxXT1uZT4+OH1yZXR1cm4gZnVuY3Rpb24oQ2Upe3ZhciBVZT1DZS5sZW5ndGgsSmU9MCxpdD0wO2lmKDIqVWU+WSYmKFk9MipVZSxXPUJ1ZmZlci5hbGxvY1Vuc2FmZShZKSksQnVmZmVyLmlzQnVmZmVyKENlKSlm''@;'; put 'put ''b3IoSmU9MDtKZTxVZTtKZSsrKVdbMipKZV09bVtpdD0yKkNlW0plXV0sV1syKkplKzFdPW1baXQrMV07ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIENlKWZvcihKZT0wO0plPFVlO0plKyspaXQ9MipDZS5jaGFyQ29kZUF0KEplKSxXWzIqSmVdPW1baXRdLFdbMipKZSsxXT1tW2l0KzFdO2Vs''@;'; put 'put ''c2UgZm9yKEplPTA7SmU8VWU7SmUrKylXWzIqSmVdPW1baXQ9MipDZVtKZV1dLFdbMipKZSsxXT1tW2l0KzFdO3JldHVybiBXLnNsaWNlKDAsMipVZSkudG9TdHJpbmcoInVjczIiKX19LHJlPWZ1bmN0aW9uKGope2Zvcih2YXIgRT1iW2pdLmVuYyxtPUJ1ZmZlci5hbGxvY1Vuc2FmZSgxMzEw''@;'; put 'put ''NzIpLEE9MDtBPDEzMTA3MjsrK0EpbVtBXT0wO2Zvcih2YXIgYWU9T2JqZWN0LmtleXMoRSksbmU9MCxzZT1hZVtuZV07bmU8YWUubGVuZ3RoOysrbmUpaWYoc2U9YWVbbmVdKXt2YXIgQ2U9c2UuY2hhckNvZGVBdCgwKTttWzIqQ2VdPTI1NSZFW3NlXSxtWzIqQ2UrMV09RVtzZV0+Pjh9cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uKEplLGl0KXt2YXIgeGU9SmUubGVuZ3RoLHllPUJ1ZmZlci5hbGxvY1Vuc2FmZSgyKnhlKSxLZT0wLGplPTAsa2U9MCxIZT0wLExlPTA7aWYoInN0cmluZyI9PXR5cGVvZiBKZSl7Zm9yKEtlPUhlPTA7S2U8eGU7KytLZSlqZT0yKkplLmNoYXJDb2RlQXQoS2UpLHllW0hl''@;'; put 'put ''KytdPW1bamUrMV18fG1bamVdLG1bamUrMV0+MCYmKHllW0hlKytdPW1bamVdKTt5ZT15ZS5zbGljZSgwLEhlKX1lbHNlIGlmKEJ1ZmZlci5pc0J1ZmZlcihKZSkpe2ZvcihLZT1IZT0wO0tlPHhlOysrS2UpKExlPUplW0tlXSk8MTI4P2plPUxlOkxlPDIyND8oamU9KCgzMSZMZSk8PDYpKyg2''@;'; put 'put ''MyZKZVtLZSsxXSksKytLZSk6TGU8MjQwPyhqZT0oKDE1JkxlKTw8MTIpKygoNjMmSmVbS2UrMV0pPDw2KSsoNjMmSmVbS2UrMl0pLEtlKz0yKTooamU9KCg3JkxlKTw8MTgpKygoNjMmSmVbS2UrMV0pPDwxMikrKCg2MyZKZVtLZSsyXSk8PDYpKyg2MyZKZVtLZSszXSksS2UrPTMpLGplPDY1''@;'; put 'put ''NTM2Pyh5ZVtIZSsrXT1tWzErKGplKj0yKV18fG1bamVdLG1bamUrMV0+MCYmKHllW0hlKytdPW1bamVdKSk6KHllW0hlKytdPW1bMSsoamU9MiooNTUyOTYrKChrZT1qZS02NTUzNik+PjEwJjEwMjMpKSldfHxtW2plXSxtW2plKzFdPjAmJih5ZVtIZSsrXT1tW2plXSkseWVbSGUrK109bVsx''@;'; put 'put ''KyhqZT0yKig1NjMyMCsoMTAyMyZrZSkpKV18fG1bamVdLG1bamUrMV0+MCYmKHllW0hlKytdPW1bamVdKSk7eWU9eWUuc2xpY2UoMCxIZSl9ZWxzZSBmb3IoS2U9SGU9MDtLZTx4ZTtLZSsrKWplPTIqSmVbS2VdLmNoYXJDb2RlQXQoMCkseWVbSGUrK109bVtqZSsxXXx8bVtqZV0sbVtqZSsx''@;'; put 'put ''XT4wJiYoeWVbSGUrK109bVtqZV0pO3JldHVybiBpdCYmImJ1ZiIhPT1pdD8iYXJyIiE9PWl0P3llLnRvU3RyaW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKHllKTp5ZX19LGllPWZ1bmN0aW9uKGope3ZhciBhZSxFPWJbal0uZGVjLG09QnVmZmVyLmFsbG9jVW5zYWZlKDEzMTA3MiksQT0w''@;'; put 'put ''LG5lPTAsc2U9MCxDZT0wO2ZvcihDZT0wO0NlPDY1NTM2OysrQ2UpbVsyKkNlXT0yNTUsbVsyKkNlKzFdPTI1Mztmb3IoQT0wO0E8RS5sZW5ndGg7KytBKShhZT1FW0FdKSYmKG5lPWFlLmNoYXJDb2RlQXQoMCksbVtzZT0yKkFdPTI1NSZuZSxtW3NlKzFdPW5lPj44KTtyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24oSmUpe3ZhciBpdD1KZS5sZW5ndGgseGU9QnVmZmVyLmFsbG9jVW5zYWZlKDIqaXQpLHllPTAsS2U9MCxqZT0wO2lmKEJ1ZmZlci5pc0J1ZmZlcihKZSkpZm9yKHllPTA7eWU8aXQ7eWUrKykyNTU9PT1tW0tlPTIqSmVbeWVdXSYmMjUzPT09bVtLZSsxXSYmKEtlPTIqKChKZVt5ZV08PDgp''@;'; put 'put ''K0plW3llKzFdKSwrK3llKSx4ZVtqZSsrXT1tW0tlXSx4ZVtqZSsrXT1tW0tlKzFdO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBKZSlmb3IoeWU9MDt5ZTxpdDt5ZSsrKUtlPTIqSmUuY2hhckNvZGVBdCh5ZSksMjU1PT09bVtLZV0mJjI1Mz09PW1bS2UrMV0mJihLZT0yKigoSmUuY2hhckNv''@;'; put 'put ''ZGVBdCh5ZSk8PDgpK0plLmNoYXJDb2RlQXQoeWUrMSkpLCsreWUpLHhlW2plKytdPW1bS2VdLHhlW2plKytdPW1bS2UrMV07ZWxzZSBmb3IoeWU9MDt5ZTxpdDt5ZSsrKTI1NT09PW1bS2U9MipKZVt5ZV1dJiYyNTM9PT1tW0tlKzFdJiYoS2U9MiooKEplW3llXTw8OCkrSmVbeWUrMV0pLCsr''@;'; put 'put ''eWUpLHhlW2plKytdPW1bS2VdLHhlW2plKytdPW1bS2UrMV07cmV0dXJuIHhlLnNsaWNlKDAsamUpLnRvU3RyaW5nKCJ1Y3MyIil9fTt3WzY1MDAxXT1mdW5jdGlvbiBIKGope2lmKCJzdHJpbmciPT10eXBlb2YgailyZXR1cm4gSChqLnNwbGl0KCIiKS5tYXAoTikpO3ZhciBFPWoubGVuZ3Ro''@;'; put 'put ''LG09MCxBPTA7NCpFPlkmJihZPTQqRSxXPUJ1ZmZlci5hbGxvY1Vuc2FmZShZKSk7dmFyIGFlPTA7RT49MyYmMjM5PT1qWzBdJiYxODc9PWpbMV0mJjE5MT09alsyXSYmKGFlPTMpO2Zvcih2YXIgbmU9MSxzZT0wLENlPTA7YWU8RTthZSs9bmUpbmU9MSwoQ2U9althZV0pPDEyOD9tPUNlOkNl''@;'; put 'put ''PDIyND8obT02NCooMzEmQ2UpKyg2MyZqW2FlKzFdKSxuZT0yKTpDZTwyNDA/KG09KCgxNSZDZSk8PDEyKSs2NCooNjMmalthZSsxXSkrKDYzJmpbYWUrMl0pLG5lPTMpOihtPTI2MjE0NCooNyZDZSkrKCg2MyZqW2FlKzFdKTw8MTIpKzY0Kig2MyZqW2FlKzJdKSsoNjMmalthZSszXSksbmU9''@;'; put 'put ''NCksbTw2NTUzNj8oV1tzZSsrXT0yNTUmbSxXW3NlKytdPW0+PjgpOihBPTU1Mjk2KygobS09NjU1MzYpPj4xMCYxMDIzKSxtPTU2MzIwKygxMDIzJm0pLFdbc2UrK109MjU1JkEsV1tzZSsrXT1BPj4+OCxXW3NlKytdPTI1NSZtLFdbc2UrK109bT4+PjgmMjU1KTtyZXR1cm4gVy5zbGljZSgw''@;'; put 'put ''LHNlKS50b1N0cmluZygidWNzMiIpfSxQWzY1MDAxXT1mdW5jdGlvbihqLEUpe2lmKE8mJkJ1ZmZlci5pc0J1ZmZlcihqKSlyZXR1cm4gRSYmImJ1ZiIhPT1FPyJhcnIiIT09RT9qLnRvU3RyaW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKGopOmo7dmFyIG09ai5sZW5ndGgsQT0wLGFlPTAs''@;'; put 'put ''bmU9MCxzZT0ic3RyaW5nIj09dHlwZW9mIGo7NCptPlkmJihZPTQqbSxXPUJ1ZmZlci5hbGxvY1Vuc2FmZShZKSk7Zm9yKHZhciBDZT0wO0NlPG07KytDZSkoQT1zZT9qLmNoYXJDb2RlQXQoQ2UpOmpbQ2VdLmNoYXJDb2RlQXQoMCkpPD0xMjc/V1tuZSsrXT1BOkE8PTIwNDc/KFdbbmUrK109''@;'; put 'put ''MTkyKyhBPj42KSxXW25lKytdPTEyOCsoNjMmQSkpOkE+PTU1Mjk2JiZBPD01NzM0Mz8oQS09NTUyOTYsKytDZSxhZT0oc2U/ai5jaGFyQ29kZUF0KENlKTpqW0NlXS5jaGFyQ29kZUF0KDApKS01NjMyMCsoQTw8MTApLFdbbmUrK109MjQwKyhhZT4+PjE4JjcpLFdbbmUrK109MTQ0KyhhZT4+''@;'; put 'put ''PjEyJjYzKSxXW25lKytdPTEyOCsoYWU+Pj42JjYzKSxXW25lKytdPTEyOCsoNjMmYWUpKTooV1tuZSsrXT0yMjQrKEE+PjEyKSxXW25lKytdPTEyOCsoQT4+NiY2MyksV1tuZSsrXT0xMjgrKDYzJkEpKTtyZXR1cm4gRSYmImJ1ZiIhPT1FPyJhcnIiIT09RT9XLnNsaWNlKDAsbmUpLnRvU3Ry''@;'; put 'put ''aW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKFcsMCxuZSk6Vy5zbGljZSgwLG5lKX19dmFyIHVlPWZ1bmN0aW9uKCl7aWYoTyl7aWYoRltfWzBdXSlyZXR1cm47dmFyIGo9MCxFPTA7Zm9yKGo9MDtqPF8ubGVuZ3RoOysrailiW0U9X1tqXV0mJihGW0VdPUooRSksUltFXT1lZShFKSk7Zm9y''@;'; put 'put ''KGo9MDtqPHAubGVuZ3RoOysrailiW0U9cFtqXV0mJihGW0VdPWllKEUpLFJbRV09cmUoRSkpO2ZvcihqPTA7ajxWLmxlbmd0aDsrK2opd1tFPVZbal1dJiYoRltFXT13W0VdKSxQW0VdJiYoUltFXT1QW0VdKX19LGdlPWZ1bmN0aW9uKEgsail7cmV0dXJuIiJ9LF9lPWZ1bmN0aW9uKGope2Rl''@;'; put 'put ''bGV0ZSBGW2pdLGRlbGV0ZSBSW2pdfSxNZT17ZW5jYWNoZTp1ZSxkZWNhY2hlOmZ1bmN0aW9uKCl7aWYoTyl7aWYoIUZbX1swXV0pcmV0dXJuO18uZm9yRWFjaChfZSkscC5mb3JFYWNoKF9lKSxWLmZvckVhY2goX2UpfWc9Z2UseT0wfSxzYmNzOl8sZGJjczpwfTt1ZSgpO3ZhciBaZT0iQUJD''@;'; put 'put ''REVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsZz1nZSx5PTA7cmV0dXJuIGIudXRpbHM9e2RlY29kZTpmdW5jdGlvbiBIKGosRSl7dmFyIG07aWYobT1GW2pdKXJldHVybiBtKEUpO2lmKCJzdHJpbmciPT10eXBlb2YgRSlyZXR1''@;'; put 'put ''cm4gSChqLEUuc3BsaXQoIiIpLm1hcChOKSk7dmFyIHllLEE9RS5sZW5ndGgsYWU9bmV3IEFycmF5KEEpLG5lPSIiLHNlPTAsQ2U9MCxVZT0xLEplPTAsaXQ9MCx4ZT1iW2pdLEtlPSIiO2lmKHhlJiYoeWU9eGUuZGVjKSlmb3IoQ2U9MDtDZTxBO0NlKz1VZSl7aWYoVWU9MiwobmU9eWVbKEVb''@;'; put 'put ''Q2VdPDw4KStFW0NlKzFdXSl8fChVZT0xLG5lPXllW0VbQ2VdXSksIW5lKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIGNvZGU6ICIrRVtDZV0rIiAiK0VbQ2UrVWUtMV0rIiAiK0NlKyIgIitVZSsiICIreWVbRVtDZV1dKTthZVtKZSsrXT1uZX1lbHNle2lmKCEoS2U9SVtqXSkpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgQ1A6ICIraik7c3dpdGNoKEtlKXtjYXNlInV0ZjgiOmZvcihBPj0zJiYyMzk9PUVbMF0mJjE4Nz09RVsxXSYmMTkxPT1FWzJdJiYoQ2U9Myk7Q2U8QTtDZSs9VWUpVWU9MSxFW0NlXTwxMjg/c2U9RVtDZV06RVtDZV08MjI0PyhzZT02NCooMzEm''@;'; put 'put ''RVtDZV0pKyg2MyZFW0NlKzFdKSxVZT0yKTpFW0NlXTwyNDA/KHNlPSgoMTUmRVtDZV0pPDwxMikrNjQqKDYzJkVbQ2UrMV0pKyg2MyZFW0NlKzJdKSxVZT0zKTooc2U9MjYyMTQ0Kig3JkVbQ2VdKSsoKDYzJkVbQ2UrMV0pPDwxMikrNjQqKDYzJkVbQ2UrMl0pKyg2MyZFW0NlKzNdKSxVZT00''@;'; put 'put ''KSxzZTw2NTUzNnx8KGl0PTU1Mjk2Kygoc2UtPTY1NTM2KT4+MTAmMTAyMyksc2U9NTYzMjArKDEwMjMmc2UpLGFlW0plKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoaXQpKSxhZVtKZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHNlKTticmVhaztjYXNlImFzY2lpIjppZihPJiZCdWZmZXIuaXNC''@;'; put 'put ''dWZmZXIoRSkpcmV0dXJuIEUudG9TdHJpbmcoS2UpO2ZvcihDZT0wO0NlPEE7Q2UrKylhZVtDZV09U3RyaW5nLmZyb21DaGFyQ29kZShFW0NlXSk7SmU9QTticmVhaztjYXNlInV0ZjE2bGUiOmlmKEE+PTImJjI1NT09RVswXSYmMjU0PT1FWzFdJiYoQ2U9MiksTyYmQnVmZmVyLmlzQnVmZmVy''@;'; put 'put ''KEUpKXJldHVybiBFLnRvU3RyaW5nKEtlKTtmb3IoVWU9MjtDZSsxPEE7Q2UrPVVlKWFlW0plKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoKEVbQ2UrMV08PDgpK0VbQ2VdKTticmVhaztjYXNlInV0ZjE2YmUiOmZvcihBPj0yJiYyNTQ9PUVbMF0mJjI1NT09RVsxXSYmKENlPTIpLFVlPTI7Q2Ur''@;'; put 'put ''MTxBO0NlKz1VZSlhZVtKZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKChFW0NlXTw8OCkrRVtDZSsxXSk7YnJlYWs7Y2FzZSJ1dGYzMmxlIjpmb3IoQT49NCYmMjU1PT1FWzBdJiYyNTQ9PUVbMV0mJjA9PT1FWzJdJiYwPT09RVszXSYmKENlPTQpLFVlPTQ7Q2U8QTtDZSs9VWUpKHNlPShFW0Nl''@;'; put 'put ''KzNdPDwyNCkrKEVbQ2UrMl08PDE2KSsoRVtDZSsxXTw8OCkrRVtDZV0pPjY1NTM1PyhzZS09NjU1MzYsYWVbSmUrK109U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5Nisoc2U+PjEwJjEwMjMpKSxhZVtKZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU2MzIwKygxMDIzJnNlKSkpOmFlW0plKytd''@;'; put 'put ''PVN0cmluZy5mcm9tQ2hhckNvZGUoc2UpO2JyZWFrO2Nhc2UidXRmMzJiZSI6Zm9yKEE+PTQmJjI1NT09RVszXSYmMjU0PT1FWzJdJiYwPT09RVsxXSYmMD09PUVbMF0mJihDZT00KSxVZT00O0NlPEE7Q2UrPVVlKShzZT0oRVtDZV08PDI0KSsoRVtDZSsxXTw8MTYpKyhFW0NlKzJdPDw4KStF''@;'; put 'put ''W0NlKzNdKT42NTUzNT8oc2UtPTY1NTM2LGFlW0plKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKHNlPj4xMCYxMDIzKSksYWVbSmUrK109U3RyaW5nLmZyb21DaGFyQ29kZSg1NjMyMCsoMTAyMyZzZSkpKTphZVtKZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHNlKTticmVhaztjYXNl''@;'; put 'put ''InV0ZjciOmZvcihBPj00JiY0Mz09RVswXSYmNDc9PUVbMV0mJjExOD09RVsyXSYmKEE+PTUmJjU2PT1FWzNdJiY0NT09RVs0XT9DZT01Oig1Nj09RVszXXx8NTc9PUVbM118fDQzPT1FWzNdfHw0Nz09RVszXSkmJihDZT00KSk7Q2U8QTtDZSs9VWUpaWYoNDM9PT1FW0NlXSlpZihVZT0xLDQ1''@;'; put 'put ''IT09RVtDZSsxXSl7Zm9yKDtTdHJpbmcuZnJvbUNoYXJDb2RlKEVbQ2UrVWVdKS5tYXRjaCgvW0EtWmEtejAtOStcL10vKTspVWUrKzt2YXIgamU9MDs0NT09PUVbQ2UrVWVdJiYoKytVZSxqZT0xKTtmb3IodmFyIGtlPVtdLEhlPSIiLEFlPTAsRGU9MCxfdD0wLHJ0PTAsUWU9MTtRZTxVZS1q''@;'; put 'put ''ZSYmKEFlPVplLmluZGV4T2YoU3RyaW5nLmZyb21DaGFyQ29kZShFW0NlK1FlKytdKSksRGU9WmUuaW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKEVbQ2UrUWUrK10pKSxrZS5wdXNoKEFlPDwyfERlPj40KSwtMSE9PShfdD1aZS5pbmRleE9mKFN0cmluZy5mcm9tQ2hhckNvZGUoRVtDZStR''@;'; put 'put ''ZSsrXSkpKSYmKGtlLnB1c2goKDE1JkRlKTw8NHxfdD4+MiksLTEhPT0ocnQ9WmUuaW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKEVbQ2UrUWUrK10pKSkpKTspcnQ8NjQmJmtlLnB1c2goKDMmX3QpPDw2fHJ0KTtmb3IoSGU9SCgxMjAxLGtlKSxRZT0wO1FlPEhlLmxlbmd0aDsrK1FlKWFl''@;'; put 'put ''W0plKytdPUhlLmNoYXJBdChRZSl9ZWxzZSBVZT0yLGFlW0plKytdPSIrIjtlbHNlIFVlPTEsYWVbSmUrK109U3RyaW5nLmZyb21DaGFyQ29kZShFW0NlXSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIG1hZ2ljOiAiK2orIiAiK0lbal0pfX1yZXR1cm4gYWUu''@;'; put 'put ''c2xpY2UoMCxKZSkuam9pbigiIil9LGVuY29kZTpmdW5jdGlvbiBIKGosRSxtKXtpZihqPT09eSYmZylyZXR1cm4gZyhFLG0pO2lmKFJbal0pcmV0dXJuKGc9Ult5PWpdKShFLG0pO08mJkJ1ZmZlci5pc0J1ZmZlcihFKSYmKEU9RS50b1N0cmluZygidXRmOCIpKTt2YXIgaXQsQT1FLmxlbmd0''@;'; put 'put ''aCxhZT1PP0J1ZmZlci5hbGxvY1Vuc2FmZSg0KkEpOltdLG5lPTAsc2U9MCxDZT0wLFVlPTAsSmU9YltqXSx4ZT0iIix5ZT0ic3RyaW5nIj09dHlwZW9mIEU7aWYoSmUmJihpdD1KZS5lbmMpKWZvcihzZT0wO3NlPEE7KytzZSwrK0NlKShuZT1pdFt5ZT9FLmNoYXJBdChzZSk6RVtzZV1dKT4y''@;'; put 'put ''NTU/KGFlW0NlXT1uZT4+OCxhZVsrK0NlXT0yNTUmbmUpOmFlW0NlXT0yNTUmbmU7ZWxzZXtpZighKHhlPUlbal0pKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIENQOiAiK2opO3N3aXRjaCh4ZSl7Y2FzZSJ1dGY4IjppZihPJiZ5ZSl7Q2U9KGFlPUsoRSx4ZSkpLmxlbmd0aDticmVh''@;'; put 'put ''a31mb3Ioc2U9MDtzZTxBOysrc2UsKytDZSkobmU9eWU/RS5jaGFyQ29kZUF0KHNlKTpFW3NlXS5jaGFyQ29kZUF0KDApKTw9MTI3P2FlW0NlXT1uZTpuZTw9MjA0Nz8oYWVbQ2VdPTE5MisobmU+PjYpLGFlWysrQ2VdPTEyOCsoNjMmbmUpKTpuZT49NTUyOTYmJm5lPD01NzM0Mz8obmUtPTU1''@;'; put 'put ''Mjk2LFVlPSh5ZT9FLmNoYXJDb2RlQXQoKytzZSk6RVsrK3NlXS5jaGFyQ29kZUF0KDApKS01NjMyMCsobmU8PDEwKSxhZVtDZV09MjQwKyhVZT4+PjE4JjcpLGFlWysrQ2VdPTE0NCsoVWU+Pj4xMiY2MyksYWVbKytDZV09MTI4KyhVZT4+PjYmNjMpLGFlWysrQ2VdPTEyOCsoNjMmVWUpKToo''@;'; put 'put ''YWVbQ2VdPTIyNCsobmU+PjEyKSxhZVsrK0NlXT0xMjgrKG5lPj42JjYzKSxhZVsrK0NlXT0xMjgrKDYzJm5lKSk7YnJlYWs7Y2FzZSJhc2NpaSI6aWYoTyYmInN0cmluZyI9PXR5cGVvZiBFKXtDZT0oYWU9SyhFLHhlKSkubGVuZ3RoO2JyZWFrfWZvcihzZT0wO3NlPEE7KytzZSwrK0NlKXtp''@;'; put 'put ''ZighKChuZT15ZT9FLmNoYXJDb2RlQXQoc2UpOkVbc2VdLmNoYXJDb2RlQXQoMCkpPD0xMjcpKXRocm93IG5ldyBFcnJvcigiYmFkIGFzY2lpICIrbmUpO2FlW0NlXT1uZX1icmVhaztjYXNlInV0ZjE2bGUiOmlmKE8mJiJzdHJpbmciPT10eXBlb2YgRSl7Q2U9KGFlPUsoRSx4ZSkpLmxlbmd0''@;'; put 'put ''aDticmVha31mb3Ioc2U9MDtzZTxBOysrc2UpbmU9eWU/RS5jaGFyQ29kZUF0KHNlKTpFW3NlXS5jaGFyQ29kZUF0KDApLGFlW0NlKytdPTI1NSZuZSxhZVtDZSsrXT1uZT4+ODticmVhaztjYXNlInV0ZjE2YmUiOmZvcihzZT0wO3NlPEE7KytzZSluZT15ZT9FLmNoYXJDb2RlQXQoc2UpOkVb''@;'; put 'put ''c2VdLmNoYXJDb2RlQXQoMCksYWVbQ2UrK109bmU+PjgsYWVbQ2UrK109MjU1Jm5lO2JyZWFrO2Nhc2UidXRmMzJsZSI6Zm9yKHNlPTA7c2U8QTsrK3NlKShuZT15ZT9FLmNoYXJDb2RlQXQoc2UpOkVbc2VdLmNoYXJDb2RlQXQoMCkpPj01NTI5NiYmbmU8PTU3MzQzJiYobmU9NjU1MzYrKG5l''@;'; put 'put ''LTU1Mjk2PDwxMCkrKEVbKytzZV0uY2hhckNvZGVBdCgwKS01NjMyMCkpLGFlW0NlKytdPTI1NSZuZSxhZVtDZSsrXT0yNTUmKG5lPj49OCksYWVbQ2UrK109MjU1JihuZT4+PTgpLGFlW0NlKytdPTI1NSYobmU+Pj04KTticmVhaztjYXNlInV0ZjMyYmUiOmZvcihzZT0wO3NlPEE7KytzZSko''@;'; put 'put ''bmU9eWU/RS5jaGFyQ29kZUF0KHNlKTpFW3NlXS5jaGFyQ29kZUF0KDApKT49NTUyOTYmJm5lPD01NzM0MyYmKG5lPTY1NTM2KyhuZS01NTI5Njw8MTApKyhFWysrc2VdLmNoYXJDb2RlQXQoMCktNTYzMjApKSxhZVtDZSszXT0yNTUmbmUsYWVbQ2UrMl09MjU1JihuZT4+PTgpLGFlW0NlKzFd''@;'; put 'put ''PTI1NSYobmU+Pj04KSxhZVtDZV09MjU1JihuZT4+PTgpLENlKz00O2JyZWFrO2Nhc2UidXRmNyI6Zm9yKHNlPTA7c2U8QTtzZSsrKXt2YXIgS2U9eWU/RS5jaGFyQXQoc2UpOkVbc2VdLmNoYXJBdCgwKTtpZigiKyIhPT1LZSlpZigiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZn''@;'; put 'put ''aGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODknKCksLS4vOj8iLmluZGV4T2YoS2UpPi0xKWFlW0NlKytdPUtlLmNoYXJDb2RlQXQoMCk7ZWxzZXt2YXIgamU9SCgxMjAxLEtlKTthZVtDZSsrXT00MyxhZVtDZSsrXT1aZS5jaGFyQ29kZUF0KGplWzBdPj4yKSxhZVtDZSsrXT1aZS5jaGFy''@;'; put 'put ''Q29kZUF0KCgoMyZqZVswXSk8PDQpKygoamVbMV18fDApPj40KSksYWVbQ2UrK109WmUuY2hhckNvZGVBdCgoKDE1JmplWzFdKTw8MikrKChqZVsyXXx8MCk+PjYpKSxhZVtDZSsrXT00NX1lbHNlIGFlW0NlKytdPTQzLGFlW0NlKytdPTQ1fWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJVbnN1cHBvcnRlZCBtYWdpYzogIitqKyIgIitJW2pdKX19cmV0dXJuIGFlPWFlLnNsaWNlKDAsQ2UpLE8/bSYmImJ1ZiIhPT1tPyJhcnIiIT09bT9hZS50b1N0cmluZygiYmluYXJ5Iik6W10uc2xpY2UuY2FsbChhZSk6YWU6InN0ciI9PW0/YWUubWFwKHopLmpvaW4oIiIpOmFlfSxoYXNj''@;'; put 'put ''cDpmdW5jdGlvbihqKXtyZXR1cm4hKCFiW2pdJiYhSVtqXSl9LG1hZ2ljOkksY2FjaGU6TWV9LGJ9KX0sNDI5MjY6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigxMTA4KSxfPWIoNjY1NDIpO2NlLmV4cG9ydHM9ZnVuY3Rpb24ocCxWLHcsUCl7dHJ5e3JldHVybiBQP1YoSSh3KVsw''@;'; put 'put ''XSx3WzFdKTpWKHcpfWNhdGNoKEYpe18ocCwidGhyb3ciLEYpfX19LDQyOTU4OihjZSxYLGIpPT57dmFyIEk9YigyNTE3Mik7ZnVuY3Rpb24gcChWKXt2YXIgdyxQO2Z1bmN0aW9uIEYoeixOKXt0cnl7dmFyIE89Vlt6XShOKSxLPU8udmFsdWUsWj1LIGluc3RhbmNlb2YgSTtQcm9taXNlLnJl''@;'; put 'put ''c29sdmUoWj9LLnY6SykudGhlbihmdW5jdGlvbihZKXtpZihaKXt2YXIgVz0icmV0dXJuIj09PXo/InJldHVybiI6Im5leHQiO2lmKCFLLmt8fFkuZG9uZSlyZXR1cm4gRihXLFkpO1k9VltXXShZKS52YWx1ZX1SKE8uZG9uZT8icmV0dXJuIjoibm9ybWFsIixZKX0sZnVuY3Rpb24oWSl7Rigi''@;'; put 'put ''dGhyb3ciLFkpfSl9Y2F0Y2goWSl7UigidGhyb3ciLFkpfX1mdW5jdGlvbiBSKHosTil7c3dpdGNoKHope2Nhc2UicmV0dXJuIjp3LnJlc29sdmUoe3ZhbHVlOk4sZG9uZTohMH0pO2JyZWFrO2Nhc2UidGhyb3ciOncucmVqZWN0KE4pO2JyZWFrO2RlZmF1bHQ6dy5yZXNvbHZlKHt2YWx1ZTpO''@;'; put 'put ''LGRvbmU6ITF9KX0odz13Lm5leHQpP0Yody5rZXksdy5hcmcpOlA9bnVsbH10aGlzLl9pbnZva2U9ZnVuY3Rpb24oeixOKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oTyxLKXt2YXIgWj17a2V5OnosYXJnOk4scmVzb2x2ZTpPLHJlamVjdDpLLG5leHQ6bnVsbH07UD9QPVAubmV4dD1a''@;'; put 'put ''Oih3PVA9WixGKHosTikpfSl9LCJmdW5jdGlvbiIhPXR5cGVvZiBWLnJldHVybiYmKHRoaXMucmV0dXJuPXZvaWQgMCl9cC5wcm90b3R5cGVbImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiXT1mdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB0aGlzfSxwLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKFYpe3JldHVybiB0aGlzLl9pbnZva2UoIm5leHQiLFYpfSxwLnByb3RvdHlwZS50aHJvdz1mdW5jdGlvbihWKXtyZXR1cm4gdGhpcy5faW52b2tlKCJ0aHJvdyIsVil9LHAucHJvdG90eXBlLnJldHVybj1mdW5jdGlvbihWKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5faW52b2tlKCJyZXR1cm4iLFYpfSxjZS5leHBvcnRzPWZ1bmN0aW9uIF8oVil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBwKFYuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19LGNlLmV4cG9ydHMuX19lc01vZHVsZT0hMCxjZS5leHBvcnRzLmRlZmF1bHQ9Y2UuZXhwb3J0''@;'; put 'put ''c30sNDMwMjQ6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPVsiXHUwNjJjXHUwNjQ2XHUwNjQ4XHUwNjMxXHUwNmNjIiwiXHUwNjQxXHUwNjMxXHUwNjQ4XHUwNjMxXHUwNmNjIiwiXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjg2IiwiXHUwNjI3XHUwNjdl''@;'; put 'put ''XHUwNjMxXHUwNmNjXHUwNjQ0IiwiXHUwNjQ1XHUwNjI2XHUwNmNjIiwiXHUwNjJjXHUwNjQ4XHUwNjQ2IiwiXHUwNjJjXHUwNjQ4XHUwNjQ0XHUwNjI3XHUwNjI2XHUwNmNjIiwiXHUwNjI3XHUwNmFmXHUwNjMzXHUwNjJhIiwiXHUwNjMzXHUwNjJhXHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUw''@;'; put 'put ''NjI3XHUwNmE5XHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxIiwiXHUwNjQ2XHUwNjQ4XHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUwNjJmXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIl0scD1bIlx1MDYyN1x1MDYyYVx1MDY0OFx1MDYyN1x1MDYzMSIsIlx1MDY3ZVx1MDZjY1x1MDYzMSIsIlx1MDY0''@;'; put 'put ''NVx1MDY0Nlx1MDZhZlx1MDY0NCIsIlx1MDYyOFx1MDYyZlx1MDZiZSIsIlx1MDYyY1x1MDY0NVx1MDYzOVx1MDYzMVx1MDYyN1x1MDYyYSIsIlx1MDYyY1x1MDY0NVx1MDYzOVx1MDZjMSIsIlx1MDZjMVx1MDY0MVx1MDYyYVx1MDZjMSJdO0kuZGVmaW5lTG9jYWxlKCJ1ciIse21vbnRoczpf''@;'; put 'put ''LG1vbnRoc1Nob3J0Ol8sd2Vla2RheXM6cCx3ZWVrZGF5c1Nob3J0OnAsd2Vla2RheXNNaW46cCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGRc''@;'; put 'put ''dTA2MGMgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2MzVcdTA2MjhcdTA2MmR8XHUwNjM0XHUwNjI3XHUwNjQ1Lyxpc1BNOmZ1bmN0aW9uKHcpe3JldHVybiJcdTA2MzRcdTA2MjdcdTA2NDUiPT09d30sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDEy''@;'; put 'put ''PyJcdTA2MzVcdTA2MjhcdTA2MmQiOiJcdTA2MzRcdTA2MjdcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyMlx1MDYyYyBcdTA2MjhcdTA2NDhcdTA2NDJcdTA2MmFdIExUIixuZXh0RGF5OiJbXHUwNmE5XHUwNjQ0IFx1MDYyOFx1MDY0OFx1MDY0Mlx1MDYyYV0gTFQiLG5leHRX''@;'; put 'put ''ZWVrOiJkZGRkIFtcdTA2MjhcdTA2NDhcdTA2NDJcdTA2MmFdIExUIixsYXN0RGF5OiJbXHUwNmFmXHUwNjMwXHUwNjM0XHUwNjJhXHUwNmMxIFx1MDYzMVx1MDY0OFx1MDYzMiBcdTA2MjhcdTA2NDhcdTA2NDJcdTA2MmFdIExUIixsYXN0V2VlazoiW1x1MDZhZlx1MDYzMFx1MDYzNFx1MDYy''@;'; put 'put ''YVx1MDZjMV0gZGRkZCBbXHUwNjI4XHUwNjQ4XHUwNjQyXHUwNjJhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwNjI4XHUwNjM5XHUwNjJmIixwYXN0OiIlcyBcdTA2NDJcdTA2MjhcdTA2NDQiLHM6Ilx1MDY4Nlx1MDY0Nlx1MDYyZiBcdTA2MzNcdTA2''@;'; put 'put ''Y2NcdTA2YTlcdTA2NDZcdTA2ODgiLHNzOiIlZCBcdTA2MzNcdTA2Y2NcdTA2YTlcdTA2NDZcdTA2ODgiLG06Ilx1MDYyN1x1MDZjY1x1MDZhOSBcdTA2NDVcdTA2NDZcdTA2NzkiLG1tOiIlZCBcdTA2NDVcdTA2NDZcdTA2NzkiLGg6Ilx1MDYyN1x1MDZjY1x1MDZhOSBcdTA2YWZcdTA2YmVc''@;'; put 'put ''dTA2NDZcdTA2NzlcdTA2YzEiLGhoOiIlZCBcdTA2YWZcdTA2YmVcdTA2NDZcdTA2NzlcdTA2ZDIiLGQ6Ilx1MDYyN1x1MDZjY1x1MDZhOSBcdTA2MmZcdTA2NDYiLGRkOiIlZCBcdTA2MmZcdTA2NDYiLE06Ilx1MDYyN1x1MDZjY1x1MDZhOSBcdTA2NDVcdTA2MjdcdTA2YzEiLE1NOiIlZCBc''@;'; put 'put ''dTA2NDVcdTA2MjdcdTA2YzEiLHk6Ilx1MDYyN1x1MDZjY1x1MDZhOSBcdTA2MzNcdTA2MjdcdTA2NDQiLHl5OiIlZCBcdTA2MzNcdTA2MjdcdTA2NDQifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcp''@;'; put 'put ''e3JldHVybiB3LnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDQzMTUwOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMjcwNTQpLkJ1ZmZlcixfPWIoNTY0MzIpLHA9YigxNDEwNSksVj1iKDkwNTE4KS5lYyx3PWIoOTE3KSxQ''@;'; put 'put ''PWIoNjU2NjcpLEY9Yig2NDU4OSk7ZnVuY3Rpb24gWihKLHJlLGllLHVlKXtpZigoSj1JLmZyb20oSi50b0FycmF5KCkpKS5sZW5ndGg8cmUuYnl0ZUxlbmd0aCgpKXt2YXIgZ2U9SS5hbGxvYyhyZS5ieXRlTGVuZ3RoKCktSi5sZW5ndGgpO0o9SS5jb25jYXQoW2dlLEpdKX12YXIgX2U9aWUu''@;'; put 'put ''bGVuZ3RoLFRlPWZ1bmN0aW9uIFcoSixyZSl7Sj0oSj1ZKEoscmUpKS5tb2QocmUpO3ZhciBpZT1JLmZyb20oSi50b0FycmF5KCkpO2lmKGllLmxlbmd0aDxyZS5ieXRlTGVuZ3RoKCkpe3ZhciB1ZT1JLmFsbG9jKHJlLmJ5dGVMZW5ndGgoKS1pZS5sZW5ndGgpO2llPUkuY29uY2F0KFt1ZSxp''@;'; put 'put ''ZV0pfXJldHVybiBpZX0oaWUscmUpLE1lPUkuYWxsb2MoX2UpO01lLmZpbGwoMSk7dmFyIFplPUkuYWxsb2MoX2UpO3JldHVybiBaZT1fKHVlLFplKS51cGRhdGUoTWUpLnVwZGF0ZShJLmZyb20oWzBdKSkudXBkYXRlKEopLnVwZGF0ZShUZSkuZGlnZXN0KCksTWU9Xyh1ZSxaZSkudXBkYXRl''@;'; put 'put ''KE1lKS5kaWdlc3QoKSx7azpaZT1fKHVlLFplKS51cGRhdGUoTWUpLnVwZGF0ZShJLmZyb20oWzFdKSkudXBkYXRlKEopLnVwZGF0ZShUZSkuZGlnZXN0KCksdjpNZT1fKHVlLFplKS51cGRhdGUoTWUpLmRpZ2VzdCgpfX1mdW5jdGlvbiBZKEoscmUpe3ZhciBpZT1uZXcgdyhKKSx1ZT0oSi5s''@;'; put 'put ''ZW5ndGg8PDMpLXJlLmJpdExlbmd0aCgpO3JldHVybiB1ZT4wJiZpZS5pc2hybih1ZSksaWV9ZnVuY3Rpb24gcShKLHJlLGllKXt2YXIgdWUsZ2U7ZG97Zm9yKHVlPUkuYWxsb2MoMCk7OCp1ZS5sZW5ndGg8Si5iaXRMZW5ndGgoKTspcmUudj1fKGllLHJlLmspLnVwZGF0ZShyZS52KS5kaWdl''@;'; put 'put ''c3QoKSx1ZT1JLmNvbmNhdChbdWUscmUudl0pO2dlPVkodWUsSikscmUuaz1fKGllLHJlLmspLnVwZGF0ZShyZS52KS51cGRhdGUoSS5mcm9tKFswXSkpLmRpZ2VzdCgpLHJlLnY9XyhpZSxyZS5rKS51cGRhdGUocmUudikuZGlnZXN0KCl9d2hpbGUoLTEhPT1nZS5jbXAoSikpO3JldHVybiBn''@;'; put 'put ''ZX1mdW5jdGlvbiBlZShKLHJlLGllLHVlKXtyZXR1cm4gSi50b1JlZCh3Lm1vbnQoaWUpKS5yZWRQb3cocmUpLmZyb21SZWQoKS5tb2QodWUpfWNlLmV4cG9ydHM9ZnVuY3Rpb24geihKLHJlLGllLHVlLGdlKXt2YXIgX2U9UChyZSk7aWYoX2UuY3VydmUpe2lmKCJlY2RzYSIhPT11ZSYmImVj''@;'; put 'put ''ZHNhL3JzYSIhPT11ZSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24gTihKLHJlKXt2YXIgaWU9RltyZS5jdXJ2ZS5qb2luKCIuIildO2lmKCFpZSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gY3VydmUgIityZS5jdXJ2ZS5qb2luKCIu''@;'; put 'put ''IikpO3ZhciBfZT1uZXcgVihpZSkua2V5RnJvbVByaXZhdGUocmUucHJpdmF0ZUtleSkuc2lnbihKKTtyZXR1cm4gSS5mcm9tKF9lLnRvREVSKCkpfShKLF9lKX1pZigiZHNhIj09PV9lLnR5cGUpe2lmKCJkc2EiIT09dWUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBl''@;'; put 'put ''Iik7cmV0dXJuIGZ1bmN0aW9uIE8oSixyZSxpZSl7Zm9yKHZhciBaZSx1ZT1yZS5wYXJhbXMucHJpdl9rZXksZ2U9cmUucGFyYW1zLnAsX2U9cmUucGFyYW1zLnEsVGU9cmUucGFyYW1zLmcsTWU9bmV3IHcoMCksQj1ZKEosX2UpLm1vZChfZSksZz0hMSx5PVoodWUsX2UsSixpZSk7ITE9PT1n''@;'; put 'put ''OylNZT1lZShUZSxaZT1xKF9lLHksaWUpLGdlLF9lKSwwPT09KGc9WmUuaW52bShfZSkuaW11bChCLmFkZCh1ZS5tdWwoTWUpKSkubW9kKF9lKSkuY21wbigwKSYmKGc9ITEsTWU9bmV3IHcoMCkpO3JldHVybiBmdW5jdGlvbiBLKEoscmUpe0o9Si50b0FycmF5KCkscmU9cmUudG9BcnJheSgp''@;'; put 'put ''LDEyOCZKWzBdJiYoSj1bMF0uY29uY2F0KEopKSwxMjgmcmVbMF0mJihyZT1bMF0uY29uY2F0KHJlKSk7dmFyIHVlPVs0OCxKLmxlbmd0aCtyZS5sZW5ndGgrNCwyLEoubGVuZ3RoXTtyZXR1cm4gdWU9dWUuY29uY2F0KEosWzIscmUubGVuZ3RoXSxyZSksSS5mcm9tKHVlKX0oTWUsZyl9KEos''@;'; put 'put ''X2UsaWUpfWlmKCJyc2EiIT09dWUmJiJlY2RzYS9yc2EiIT09dWUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7aWYodm9pZCAwIT09cmUucGFkZGluZyYmMSE9PXJlLnBhZGRpbmcpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIG9yIHVuc3VwcG9ydGVkIHBhZGRp''@;'; put 'put ''bmcgbW9kZSIpO0o9SS5jb25jYXQoW2dlLEpdKTtmb3IodmFyIFRlPV9lLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLE1lPVswLDFdO0oubGVuZ3RoK01lLmxlbmd0aCsxPFRlOylNZS5wdXNoKDI1NSk7TWUucHVzaCgwKTtmb3IodmFyIFplPS0xOysrWmU8Si5sZW5ndGg7KU1lLnB1c2goSltaZV0p''@;'; put 'put ''O3JldHVybiBwKE1lLF9lKX0sY2UuZXhwb3J0cy5nZXRLZXk9WixjZS5leHBvcnRzLm1ha2VLZXk9cX0sNDMxOTU6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig3NTIxMiksXz1UeXBlRXJyb3I7Y2UuZXhwb3J0cz1mdW5jdGlvbihwLFYpe2lmKCFkZWxldGUgcFtWXSl0aHJvdyBu''@;'; put 'put ''ZXcgXygiQ2Fubm90IGRlbGV0ZSBwcm9wZXJ0eSAiK0koVikrIiBvZiAiK0kocCkpfX0sNDMyNDg6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF8oVix3LFAsRil7dmFyIFI9e206WyJlaW5lIE1pbnV0ZSIsImVpbmVyIE1pbnV0ZSJdLGg6WyJl''@;'; put 'put ''aW5lIFN0dW5kZSIsImVpbmVyIFN0dW5kZSJdLGQ6WyJlaW4gVGFnIiwiZWluZW0gVGFnIl0sZGQ6W1YrIiBUYWdlIixWKyIgVGFnZW4iXSx3OlsiZWluZSBXb2NoZSIsImVpbmVyIFdvY2hlIl0sTTpbImVpbiBNb25hdCIsImVpbmVtIE1vbmF0Il0sTU06W1YrIiBNb25hdGUiLFYrIiBNb25h''@;'; put 'put ''dGVuIl0seTpbImVpbiBKYWhyIiwiZWluZW0gSmFociJdLHl5OltWKyIgSmFocmUiLFYrIiBKYWhyZW4iXX07cmV0dXJuIHc/UltQXVswXTpSW1BdWzFdfUkuZGVmaW5lTG9jYWxlKCJkZS1hdCIse21vbnRoczoiSlx4ZTRubmVyX0ZlYnJ1YXJfTVx4ZTRyel9BcHJpbF9NYWlfSnVuaV9KdWxp''@;'; put 'put ''X0F1Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXplbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSlx4ZTRuLl9GZWIuX01ceGU0cnpfQXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEw''@;'; put 'put ''LHdlZWtkYXlzOiJTb25udGFnX01vbnRhZ19EaWVuc3RhZ19NaXR0d29jaF9Eb25uZXJzdGFnX0ZyZWl0YWdfU2Ftc3RhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTby5fTW8uX0RpLl9NaS5fRG8uX0ZyLl9TYS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNvX01vX0RpX01pX0Rv''@;'; put 'put ''X0ZyX1NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZ''@;'; put 'put ''IEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltoZXV0ZSB1bV0gTFQgW1Vocl0iLHNhbWVFbHNlOiJMIixuZXh0RGF5OiJbbW9yZ2VuIHVtXSBMVCBbVWhyXSIsbmV4dFdlZWs6ImRkZGQgW3VtXSBMVCBbVWhyXSIsbGFzdERheToiW2dlc3Rlcm4gdW1dIExUIFtVaHJdIixsYXN0V2Vlazoi''@;'; put 'put ''W2xldHp0ZW5dIGRkZGQgW3VtXSBMVCBbVWhyXSJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoidm9yICVzIixzOiJlaW4gcGFhciBTZWt1bmRlbiIsc3M6IiVkIFNla3VuZGVuIixtOl8sbW06IiVkIE1pbnV0ZW4iLGg6XyxoaDoiJWQgU3R1bmRlbiIsZDpfLGRkOl8sdzpf''@;'; put 'put ''LHd3OiIlZCBXb2NoZW4iLE06XyxNTTpfLHk6Xyx5eTpffSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sNDMyNDk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIE4sST1iKDMzOTYzKSxf''@;'; put 'put ''PWIoNDAyMjApLHA9YigxOTE1MCksVj1iKDQ3MDkyKSx3PWIoMjM1OCksUD1iKDc3NjM5KSxGPWIoMjc5NjcpLFI9SS5GdW5jdGlvbix6PS9NU0lFIC5cLi8udGVzdCh3KXx8IkJVTiI9PT1WJiYoKE49SS5CdW4udmVyc2lvbi5zcGxpdCgiLiIpKS5sZW5ndGg8M3x8IjAiPT09TlswXSYmKE5b''@;'; put 'put ''MV08M3x8IjMiPT09TlsxXSYmIjAiPT09TlsyXSkpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oTixPKXt2YXIgSz1PPzI6MTtyZXR1cm4gej9mdW5jdGlvbihaLFkpe3ZhciBXPUYoYXJndW1lbnRzLmxlbmd0aCwxKT5LLHE9cChaKT9aOlIoWiksZWU9Vz9QKGFyZ3VtZW50cyxLKTpbXSxKPVc/ZnVu''@;'; put 'put ''Y3Rpb24oKXtfKHEsdGhpcyxlZSl9OnE7cmV0dXJuIE8/TihKLFkpOk4oSil9Ok59fSw0MzI2NzpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPUpTT04ucGFyc2UoJ1tbIjg3NDAiLCJcdTQzZjBcdTRjMzJcdTQ2MDNcdTQ1YTZcdTQ1NzhcdXsyNzI2N31cdTRkNzdcdTQ1YjNcdXsyN2Ni''@;'; put 'put ''MX1cdTRjZTJcdXsyN2NjNX1cdTNiOTVcdTQ3MzZcdTQ3NDRcdTRjNDdcdTRjNDBcdXsyNDJiZn1cdXsyMzYxN31cdXsyNzM1Mn1cdXsyNmU4Yn1cdXsyNzBkMn1cdTRjNTdcdXsyYTM1MX1cdTQ3NGZcdTQ1ZGFcdTRjODVcdXsyN2M2Y31cdTRkMDdcdTRhYTRcdTQ2YTFcdXsyNmIyM31cdTcy''@;'; put 'put ''MjVcdXsyNWE1NH1cdXsyMWE2M31cdXsyM2UwNn1cdXsyM2Y2MX1cdTY2NGRcdTU2ZmIiXSxbIjg3NjciLCJcdTdkOTVcdTU5MWRcdXsyOGJiOX1cdTNkZjRcdTk3MzRcdXsyN2JlZn1cdTViZGJcdXsyMWQ1ZX1cdTVhYTRcdTM2MjVcdXsyOWViMH1cdTVhZDFcdTViYjdcdTVjZmNcdTY3NmVc''@;'; put 'put ''dTg1OTNcdXsyOTk0NX1cdTc0NjFcdTc0OWRcdTM4NzVcdXsyMWQ1M31cdXsyMzY5ZX1cdXsyNjAyMX1cdTNlZWMiXSxbIjg3YTEiLCJcdXsyNThkZX1cdTNhZjVcdTdhZmNcdTlmOTdcdXsyNDE2MX1cdXsyODkwZH1cdXsyMzFlYX1cdXsyMGE4YX1cdXsyMzI1ZX1cdTQzMGFcdTg0ODRcdTlm''@;'; put 'put ''OTZcdTk0MmZcdTQ5MzBcdTg2MTNcdTU4OTZcdTk3NGFcdTkyMThcdTc5ZDBcdTdhMzJcdTY2NjBcdTZhMjlcdTg4OWRcdTc0NGNcdTdiYzVcdTY3ODJcdTdhMmNcdTUyNGZcdTkwNDZcdTM0ZTZcdTczYzRcdXsyNWRiOX1cdTc0YzZcdTlmYzdcdTU3YjNcdTQ5MmZcdTU0NGNcdTQxMzFcdXsy''@;'; put 'put ''MzY4ZX1cdTU4MThcdTdhNzJcdXsyN2I2NX1cdThiOGZcdTQ2YWVcdXsyNmU4OH1cdTQxODFcdXsyNWQ5OX1cdTdiYWVcdXsyMjRiY31cdTlmYzhcdXsyMjRjMX1cdXsyMjRjOX1cdXsyMjRjY31cdTlmYzlcdTg1MDRcdXsyMzViYn1cdTQwYjRcdTlmY2FcdTQ0ZTFcdXsyYWRmZn1cdTYyYzFc''@;'; put 'put ''dTcwNmVcdTlmY2IiXSxbIjg4NDAiLCJcdTMxYzAiLDQsIlx1ezIwMTBjfVx1MzFjNVx1ezIwMGQxfVx1ezIwMGNkfVx1MzFjNlx1MzFjN1x1ezIwMGNifVx1ezIxZmU4fVx1MzFjOFx1ezIwMGNhfVx1MzFjOVx1MzFjYVx1MzFjYlx1MzFjY1x1ezIwMTBlfVx1MzFjZFx1MzFjZVx1MDEwMFx4''@;'; put 'put ''YzFcdTAxY2RceGMwXHUwMTEyXHhjOVx1MDExYVx4YzhcdTAxNGNceGQzXHUwMWQxXHhkMlx1MGZmZlx4Y2FcdTAzMDRcdTFlYmVcdTBmZmZceGNhXHUwMzBjXHUxZWMwXHhjYVx1MDEwMVx4ZTFcdTAxY2VceGUwXHUwMjUxXHUwMTEzXHhlOVx1MDExYlx4ZThcdTAxMmJceGVkXHUwMWQwXHhl''@;'; put 'put ''Y1x1MDE0ZFx4ZjNcdTAxZDJceGYyXHUwMTZiXHhmYVx1MDFkNFx4ZjlcdTAxZDZcdTAxZDhcdTAxZGEiXSxbIjg4YTEiLCJcdTAxZGNceGZjXHUwZmZmXHhlYVx1MDMwNFx1MWViZlx1MGZmZlx4ZWFcdTAzMGNcdTFlYzFceGVhXHUwMjYxXHUyM2RhXHUyM2RiIl0sWyI4OTQwIiwiXHV7MmEz''@;'; put 'put ''YTl9XHV7MjExNDV9Il0sWyI4OTQzIiwiXHU2NTBhIl0sWyI4OTQ2IiwiXHU0ZTNkXHU2ZWRkXHU5ZDRlXHU5MWRmIl0sWyI4OTRjIiwiXHV7Mjc3MzV9XHU2NDkxXHU0ZjFhXHU0ZjI4XHU0ZmE4XHU1MTU2XHU1MTc0XHU1MTljXHU1MWU0XHU1MmExXHU1MmE4XHU1MzNiXHU1MzRlXHU1M2Qx''@;'; put 'put ''XHU1M2Q4XHU1NmUyXHU1OGYwXHU1OTA0XHU1OTA3XHU1OTMyXHU1OTM0XHU1YjY2XHU1YjllXHU1YjlmXHU1YzlhXHU1ZTg2XHU2MDNiXHU2NTg5XHU2N2ZlXHU2ODA0XHU2ODY1XHU2ZDRlXHU3MGJjXHU3NTM1XHU3ZWE0XHU3ZWFjXHU3ZWJhXHU3ZWM3XHU3ZWNmXHU3ZWRmXHU3ZjA2XHU3''@;'; put 'put ''ZjM3XHU4MjdhXHU4MmNmXHU4MzZmXHU4OWM2XHU4YmJlXHU4YmUyXHU4ZjY2XHU4ZjY3XHU4ZjZlIl0sWyI4OWExIiwiXHU3NDExXHU3Y2ZjXHU3ZGNkXHU2OTQ2XHU3YWM5XHU1MjI3Il0sWyI4OWFiIiwiXHU5MThjXHU3OGI4XHU5MTVlXHU4MGJjIl0sWyI4OWIwIiwiXHU4ZDBiXHU4MGY2''@;'; put 'put ''XHV7MjA5ZTd9Il0sWyI4OWI1IiwiXHU4MDlmXHU5ZWM3XHU0Y2NkXHU5ZGM5XHU5ZTBjXHU0YzNlXHV7MjlkZjZ9XHV7MjcwMGV9XHU5ZTBhXHV7MmExMzN9XHUzNWMxIl0sWyI4OWMxIiwiXHU2ZTlhXHU4MjNlXHU3NTE5Il0sWyI4OWM1IiwiXHU0OTExXHU5YTZjXHU5YThmXHU5Zjk5XHU3''@;'; put 'put ''OTg3XHV7Mjg0NmN9XHV7MjFkY2F9XHV7MjA1ZDB9XHV7MjJhZTZ9XHU0ZTI0XHU0ZTgxXHU0ZTgwXHU0ZTg3XHU0ZWJmXHU0ZWViXHU0ZjM3XHUzNDRjXHU0ZmJkXHUzZTQ4XHU1MDAzXHU1MDg4XHUzNDdkXHUzNDkzXHUzNGE1XHU1MTg2XHU1OTA1XHU1MWRiXHU1MWZjXHU1MjA1XHU0ZTg5''@;'; put 'put ''XHU1Mjc5XHU1MjkwXHU1MzI3XHUzNWM3XHU1M2E5XHUzNTUxXHU1M2IwXHUzNTUzXHU1M2MyXHU1NDIzXHUzNTZkXHUzNTcyXHUzNjgxXHU1NDkzXHU1NGEzXHU1NGI0XHU1NGI5XHU1NGQwXHU1NGVmXHU1NTE4XHU1NTIzXHU1NTI4XHUzNTk4XHU1NTNmXHUzNWE1XHUzNWJmXHU1NWQ3XHUz''@;'; put 'put ''NWM1Il0sWyI4YTQwIiwiXHV7MjdkODR9XHU1NTI1Il0sWyI4YTQzIiwiXHV7MjBjNDJ9XHV7MjBkMTV9XHV7MjUxMmJ9XHU1NTkwXHV7MjJjYzZ9XHUzOWVjXHV7MjAzNDF9XHU4ZTQ2XHV7MjRkYjh9XHV7Mjk0ZTV9XHU0MDUzXHV7MjgwYmV9XHU3NzdhXHV7MjJjMzh9XHUzYTM0XHU0N2Q1''@;'; put 'put ''XHV7MjgxNWR9XHV7MjY5ZjJ9XHV7MjRkZWF9XHU2NGRkXHV7MjBkN2N9XHV7MjBmYjR9XHV7MjBjZDV9XHV7MjEwZjR9XHU2NDhkXHU4ZTdlXHV7MjBlOTZ9XHV7MjBjMGJ9XHV7MjBmNjR9XHV7MjJjYTl9XHV7MjgyNTZ9XHV7MjQ0ZDN9Il0sWyI4YTY0IiwiXHV7MjBkNDZ9XHV7MjlhNGR9''@;'; put 'put ''XHV7MjgwZTl9XHU0N2Y0XHV7MjRlYTd9XHV7MjJjYzJ9XHU5YWIyXHUzYTY3XHV7Mjk1ZjR9XHUzZmVkXHUzNTA2XHV7MjUyYzd9XHV7Mjk3ZDR9XHV7Mjc4Yzh9XHV7MjJkNDR9XHU5ZDZlXHU5ODE1Il0sWyI4YTc2IiwiXHU0M2Q5XHV7MjYwYTV9XHU2NGI0XHU1NGUzXHV7MjJkNGN9XHV7''@;'; put 'put ''MjJiY2F9XHV7MjEwNzd9XHUzOWZiXHV7MjEwNmZ9Il0sWyI4YWExIiwiXHV7MjY2ZGF9XHV7MjY3MTZ9XHV7Mjc5YTB9XHU2NGVhXHV7MjUwNTJ9XHV7MjBjNDN9XHU4ZTY4XHV7MjIxYTF9XHV7MjhiNGN9XHV7MjA3MzF9Il0sWyI4YWFjIiwiXHU0ODBiXHV7MjAxYTl9XHUzZmZhXHU1ODcz''@;'; put 'put ''XHV7MjJkOGR9Il0sWyI4YWIyIiwiXHV7MjQ1Yzh9XHV7MjA0ZmN9XHV7MjYwOTd9XHV7MjBmNGN9XHV7MjBkOTZ9XHU1NTc5XHU0MGJiXHU0M2JhIl0sWyI4YWJiIiwiXHU0YWI0XHV7MjJhNjZ9XHV7MjEwOWR9XHU4MWFhXHU5OGY1XHV7MjBkOWN9XHU2Mzc5XHUzOWZlXHV7MjI3NzV9XHU4''@;'; put 'put ''ZGMwXHU1NmExXHU2NDdjXHUzZTQzIl0sWyI4YWM5IiwiXHV7MmE2MDF9XHV7MjBlMDl9XHV7MjJhY2Z9XHV7MjJjYzl9Il0sWyI4YWNlIiwiXHV7MjEwYzh9XHV7MjM5YzJ9XHUzOTkyXHUzYTA2XHV7MjgyOWJ9XHUzNTc4XHV7MjVlNDl9XHV7MjIwYzd9XHU1NjUyXHV7MjBmMzF9XHV7MjJj''@;'; put 'put ''YjJ9XHV7Mjk3MjB9XHUzNGJjXHU2YzNkXHV7MjRlM2J9Il0sWyI4YWRmIiwiXHV7Mjc1NzR9XHV7MjJlOGJ9XHV7MjIyMDh9XHV7MmE2NWJ9XHV7MjhjY2R9XHV7MjBlN2F9XHV7MjBjMzR9XHV7MjY4MWN9XHU3ZjkzXHV7MjEwY2Z9XHV7MjI4MDN9XHV7MjI5Mzl9XHUzNWZiXHV7MjUxZTN9''@;'; put 'put ''XHV7MjBlOGN9XHV7MjBmOGR9XHV7MjBlYWF9XHUzZjkzXHV7MjBmMzB9XHV7MjBkNDd9XHV7MjExNGZ9XHV7MjBlNGN9Il0sWyI4YWY2IiwiXHV7MjBlYWJ9XHV7MjBiYTl9XHV7MjBkNDh9XHV7MjEwYzB9XHV7MjExM2R9XHUzZmY5XHV7MjI2OTZ9XHU2NDMyXHV7MjBmYWR9Il0sWyI4YjQw''@;'; put 'put ''IiwiXHV7MjMzZjR9XHV7Mjc2Mzl9XHV7MjJiY2V9XHV7MjBkN2V9XHV7MjBkN2Z9XHV7MjJjNTF9XHV7MjJjNTV9XHUzYTE4XHV7MjBlOTh9XHV7MjEwYzd9XHV7MjBmMmV9XHV7MmE2MzJ9XHV7MjZiNTB9XHV7MjhjZDJ9XHV7MjhkOTl9XHV7MjhjY2F9XHU5NWFhXHU1NGNjXHU4MmM0XHU1''@;'; put 'put ''NWI5Il0sWyI4YjU1IiwiXHV7MjllYzN9XHU5YzI2XHU5YWI2XHV7Mjc3NWV9XHV7MjJkZWV9XHU3MTQwXHU4MTZkXHU4MGVjXHU1YzFjXHV7MjY1NzJ9XHU4MTM0XHUzNzk3XHU1MzVmXHV7MjgwYmR9XHU5MWI2XHV7MjBlZmF9XHV7MjBlMGZ9XHV7MjBlNzd9XHV7MjBlZmJ9XHUzNWRkXHV7''@;'; put 'put ''MjRkZWJ9XHUzNjA5XHV7MjBjZDZ9XHU1NmFmXHV7MjI3YjV9XHV7MjEwYzl9XHV7MjBlMTB9XHV7MjBlNzh9XHV7MjEwNzh9XHV7MjExNDh9XHV7MjgyMDd9XHV7MjE0NTV9XHV7MjBlNzl9XHV7MjRlNTB9XHV7MjJkYTR9XHU1YTU0XHV7MjEwMWR9XHV7MjEwMWV9XHV7MjEwZjV9XHV7MjEw''@;'; put 'put ''ZjZ9XHU1NzljXHV7MjBlMTF9Il0sWyI4YmExIiwiXHV7Mjc2OTR9XHV7MjgyY2R9XHV7MjBmYjV9XHV7MjBlN2J9XHV7MjUxN2V9XHUzNzAzXHV7MjBmYjZ9XHV7MjExODB9XHV7MjUyZDh9XHV7MmEyYmR9XHV7MjQ5ZGF9XHV7MjE4M2F9XHV7MjQxNzd9XHV7MjgyN2N9XHU1ODk5XHU1MjY4''@;'; put 'put ''XHUzNjFhXHV7MjU3M2R9XHU3YmIyXHU1YjY4XHU0ODAwXHU0YjJjXHU5ZjI3XHU0OWU3XHU5YzFmXHU5YjhkXHV7MjViNzR9XHV7MjMxM2R9XHU1NWZiXHUzNWYyXHU1Njg5XHU0ZTI4XHU1OTAyXHV7MjFiYzF9XHV7MmY4Nzh9XHU5NzUxXHV7MjAwODZ9XHU0ZTViXHU0ZWJiXHUzNTNlXHU1''@;'; put 'put ''YzIzXHU1ZjUxXHU1ZmM0XHUzOGZhXHU2MjRjXHU2NTM1XHU2YjdhXHU2YzM1XHU2YzNhXHU3MDZjXHU3MjJiXHU0ZTJjXHU3MmFkXHV7MjQ4ZTl9XHU3ZjUyXHU3OTNiXHU3Y2Y5XHU3ZjUzXHV7MjYyNmF9XHUzNGMxIl0sWyI4YmRlIiwiXHV7MjYzNGJ9XHU4MDAyXHU4MDgwXHV7MjY2MTJ9''@;'; put 'put ''XHV7MjY5NTF9XHU1MzVkXHU4ODY0XHU4OWMxXHV7Mjc4YjJ9XHU4YmEwXHU4ZDFkXHU5NDg1XHU5NTc4XHU5NTdmXHU5NWU4XHV7MjhlMGZ9XHU5N2U2XHU5ODc1XHU5OGNlXHU5OGRlXHU5OTYzXHV7Mjk4MTB9XHU5YzdjXHU5ZTFmXHU5ZWM0XHU2YjZmXHVmOTA3XHU0ZTM3XHV7MjAwODd9''@;'; put 'put ''XHU5NjFkXHU2MjM3XHU5NGEyIl0sWyI4YzQwIiwiXHU1MDNiXHU2ZGZlXHV7MjljNzN9XHU5ZmE2XHUzZGM5XHU4ODhmXHV7MjQxNGV9XHU3MDc3XHU1Y2Y1XHU0YjIwXHV7MjUxY2R9XHUzNTU5XHV7MjVkMzB9XHU2MTIyXHV7MjhhMzJ9XHU4ZmE3XHU5MWY2XHU3MTkxXHU2NzE5XHU3M2Jh''@;'; put 'put ''XHV7MjMyODF9XHV7MmExMDd9XHUzYzhiXHV7MjE5ODB9XHU0YjEwXHU3OGU0XHU3NDAyXHU1MWFlXHV7Mjg3MGZ9XHU0MDA5XHU2YTYzXHV7MmEyYmF9XHU0MjIzXHU4NjBmXHV7MjBhNmZ9XHU3YTJhXHV7Mjk5NDd9XHV7MjhhZWF9XHU5NzU1XHU3MDRkXHU1MzI0XHV7MjIwN2V9XHU5M2Y0''@;'; put 'put ''XHU3NmQ5XHV7Mjg5ZTN9XHU5ZmE3XHU3N2RkXHU0ZWEzXHU0ZmYwXHU1MGJjXHU0ZTJmXHU0ZjE3XHU5ZmE4XHU1NDM0XHU3ZDhiXHU1ODkyXHU1OGQwXHV7MjFkYjZ9XHU1ZTkyXHU1ZTk5XHU1ZmMyXHV7MjI3MTJ9XHU2NThiIl0sWyI4Y2ExIiwiXHV7MjMzZjl9XHU2OTE5XHU2YTQzXHV7''@;'; put 'put ''MjNjNjN9XHU2Y2ZmIl0sWyI4Y2E3IiwiXHU3MjAwXHV7MjQ1MDV9XHU3MzhjXHUzZWRiXHV7MjRhMTN9XHU1YjE1XHU3NGI5XHU4YjgzXHV7MjVjYTR9XHV7MjU2OTV9XHU3YTkzXHU3YmVjXHU3Y2MzXHU3ZTZjXHU4MmY4XHU4NTk3XHU5ZmE5XHU4ODkwXHU5ZmFhXHU4ZWI5XHU5ZmFiXHU4''@;'; put 'put ''ZmNmXHU4NTVmXHU5OWUwXHU5MjIxXHU5ZmFjXHV7MjhkYjl9XHV7MjE0M2Z9XHU0MDcxXHU0MmEyXHU1YTFhIl0sWyI4Y2M5IiwiXHU5ODY4XHU2NzZiXHU0Mjc2XHU1NzNkIl0sWyI4Y2NlIiwiXHU4NWQ2XHV7MjQ5N2J9XHU4MmJmXHV7MjcxMGR9XHU0YzgxXHV7MjZkNzR9XHU1ZDdiXHV7''@;'; put 'put ''MjZiMTV9XHV7MjZmYmV9XHU5ZmFkXHU5ZmFlXHU1Yjk2XHU5ZmFmXHU2NmU3XHU3ZTViXHU2ZTU3XHU3OWNhXHUzZDg4XHU0NGMzXHV7MjMyNTZ9XHV7MjI3OTZ9XHU0MzlhXHU0NTM2Il0sWyI4Y2U2IiwiXHU1Y2Q1XHV7MjNiMWF9XHU4YWY5XHU1Yzc4XHUzZDEyXHV7MjM1NTF9XHU1ZDc4''@;'; put 'put ''XHU5ZmIyXHU3MTU3XHU0NTU4XHV7MjQwZWN9XHV7MjFlMjN9XHU0Yzc3XHUzOTc4XHUzNDRhXHV7MjAxYTR9XHV7MjZjNDF9XHU4YWNjXHU0ZmI0XHV7MjAyMzl9XHU1OWJmXHU4MTZjXHU5ODU2XHV7Mjk4ZmF9XHU1ZjNiIl0sWyI4ZDQwIiwiXHV7MjBiOWZ9Il0sWyI4ZDQyIiwiXHV7MjIx''@;'; put 'put ''YzF9XHV7Mjg5NmR9XHU0MTAyXHU0NmJiXHV7MjkwNzl9XHUzZjA3XHU5ZmIzXHV7MmExYjV9XHU0MGY4XHUzN2Q2XHU0NmY3XHV7MjZjNDZ9XHU0MTdjXHV7Mjg2YjJ9XHV7MjczZmZ9XHU0NTZkXHUzOGQ0XHV7MjU0OWF9XHU0NTYxXHU0NTFiXHU0ZDg5XHU0YzdiXHU0ZDc2XHU0NWVhXHUz''@;'; put 'put ''ZmM4XHV7MjRiMGZ9XHUzNjYxXHU0NGRlXHU0NGJkXHU0MWVkXHU1ZDNlXHU1ZDQ4XHU1ZDU2XHUzZGZjXHUzODBmXHU1ZGE0XHU1ZGI5XHUzODIwXHUzODM4XHU1ZTQyXHU1ZWJkXHU1ZjI1XHU1ZjgzXHUzOTA4XHUzOTE0XHUzOTNmXHUzOTRkXHU2MGQ3XHU2MTNkXHU1Y2U1XHUzOTg5XHU2''@;'; put 'put ''MWI3XHU2MWI5XHU2MWNmXHUzOWI4XHU2MjJjXHU2MjkwXHU2MmU1XHU2MzE4XHUzOWY4XHU1NmIxIl0sWyI4ZGExIiwiXHUzYTAzXHU2M2UyXHU2M2ZiXHU2NDA3XHU2NDVhXHUzYTRiXHU2NGMwXHU1ZDE1XHU1NjIxXHU5ZjlmXHUzYTk3XHU2NTg2XHUzYWJkXHU2NWZmXHU2NjUzXHUzYWYy''@;'; put 'put ''XHU2NjkyXHUzYjIyXHU2NzE2XHUzYjQyXHU2N2E0XHU2ODAwXHUzYjU4XHU2ODRhXHU2ODg0XHUzYjcyXHUzYjcxXHUzYjdiXHU2OTA5XHU2OTQzXHU3MjVjXHU2OTY0XHU2OTlmXHU2OTg1XHUzYmJjXHU2OWQ2XHUzYmRkXHU2YTY1XHU2YTc0XHU2YTcxXHU2YTgyXHUzYmVjXHU2YTk5XHUz''@;'; put 'put ''YmYyXHU2YWFiXHU2YWI1XHU2YWQ0XHU2YWY2XHU2YjgxXHU2YmMxXHU2YmVhXHU2Yzc1XHU2Y2FhXHUzY2NiXHU2ZDAyXHU2ZDA2XHU2ZDI2XHU2ZDgxXHUzY2VmXHU2ZGE0XHU2ZGIxXHU2ZTE1XHU2ZTE4XHU2ZTI5XHU2ZTg2XHV7Mjg5YzB9XHU2ZWJiXHU2ZWUyXHU2ZWRhXHU5ZjdmXHU2''@;'; put 'put ''ZWU4XHU2ZWU5XHU2ZjI0XHU2ZjM0XHUzZDQ2XHV7MjNmNDF9XHU2ZjgxXHU2ZmJlXHUzZDZhXHUzZDc1XHU3MWI3XHU1Yzk5XHUzZDhhXHU3MDJjXHUzZDkxXHU3MDUwXHU3MDU0XHU3MDZmXHU3MDdmXHU3MDg5XHV7MjAzMjV9XHU0M2MxXHUzNWYxXHV7MjBlZDh9Il0sWyI4ZTQwIiwiXHV7''@;'; put 'put ''MjNlZDd9XHU1N2JlXHV7MjZlZDN9XHU3MTNlXHV7MjU3ZTB9XHUzNjRlXHU2OWEyXHV7MjhiZTl9XHU1Yjc0XHU3YTQ5XHV7MjU4ZTF9XHV7Mjk0ZDl9XHU3YTY1XHU3YTdkXHV7MjU5YWN9XHU3YWJiXHU3YWIwXHU3YWMyXHU3YWMzXHU3MWQxXHV7MjY0OGR9XHU0MWNhXHU3YWRhXHU3YWRk''@;'; put 'put ''XHU3YWVhXHU0MWVmXHU1NGIyXHV7MjVjMDF9XHU3YjBiXHU3YjU1XHU3YjI5XHV7MjUzMGV9XHV7MjVjZmV9XHU3YmEyXHU3YjZmXHU4MzljXHV7MjViYjR9XHV7MjZjN2Z9XHU3YmQwXHU4NDIxXHU3YjkyXHU3YmI4XHV7MjVkMjB9XHUzZGFkXHV7MjVjNjV9XHU4NDkyXHU3YmZhXHU3YzA2''@;'; put 'put ''XHU3YzM1XHV7MjVjYzF9XHU3YzQ0XHU3YzgzXHV7MjQ4ODJ9XHU3Y2E2XHU2NjdkXHV7MjQ1Nzh9XHU3Y2M5XHU3Y2M3XHU3Y2U2XHU3Yzc0XHU3Y2YzXHU3Y2Y1XHU3Y2NlIl0sWyI4ZWExIiwiXHU3ZTY3XHU0NTFkXHV7MjZlNDR9XHU3ZDVkXHV7MjZlZDZ9XHU3NDhkXHU3ZDg5XHU3ZGFi''@;'; put 'put ''XHU3MTM1XHU3ZGIzXHU3ZGQyXHV7MjQwNTd9XHV7MjYwMjl9XHU3ZGU0XHUzZDEzXHU3ZGY1XHV7MjE3Zjl9XHU3ZGU1XHV7MjgzNmR9XHU3ZTFkXHV7MjYxMjF9XHV7MjYxNWF9XHU3ZTZlXHU3ZTkyXHU0MzJiXHU5NDZjXHU3ZTI3XHU3ZjQwXHU3ZjQxXHU3ZjQ3XHU3OTM2XHV7MjYyZDB9''@;'; put 'put ''XHU5OWUxXHU3Zjk3XHV7MjYzNTF9XHU3ZmEzXHV7MjE2NjF9XHV7MjAwNjh9XHU0NTVjXHV7MjM3NjZ9XHU0NTAzXHV7MjgzM2F9XHU3ZmZhXHV7MjY0ODl9XHU4MDA1XHU4MDA4XHU4MDFkXHU4MDI4XHU4MDJmXHV7MmEwODd9XHV7MjZjYzN9XHU4MDNiXHU4MDNjXHU4MDYxXHV7MjI3MTR9''@;'; put 'put ''XHU0OTg5XHV7MjY2MjZ9XHV7MjNkZTN9XHV7MjY2ZTh9XHU2NzI1XHU4MGE3XHV7MjhhNDh9XHU4MTA3XHU4MTFhXHU1OGIwXHV7MjI2ZjZ9XHU2YzdmXHV7MjY0OTh9XHV7MjRmYjh9XHU2NGU3XHV7MjE0OGF9XHU4MjE4XHV7MjE4NWV9XHU2YTUzXHV7MjRhNjV9XHV7MjRhOTV9XHU0NDdh''@;'; put 'put ''XHU4MjI5XHV7MjBiMGR9XHV7MjZhNTJ9XHV7MjNkN2V9XHU0ZmY5XHV7MjE0ZmR9XHU4NGUyXHU4MzYyXHV7MjZiMGF9XHV7MjQ5YTd9XHV7MjM1MzB9XHV7MjE3NzN9XHV7MjNkZjh9XHU4MmFhXHU2OTFiXHV7MmY5OTR9XHU0MWRiIl0sWyI4ZjQwIiwiXHU4NTRiXHU4MmQwXHU4MzFhXHV7''@;'; put 'put ''MjBlMTZ9XHV7MjE3YjR9XHUzNmMxXHV7MjMxN2R9XHV7MjM1NWF9XHU4MjdiXHU4MmUyXHU4MzE4XHV7MjNlOGJ9XHV7MjZkYTN9XHV7MjZiMDV9XHV7MjZiOTd9XHV7MjM1Y2V9XHUzZGJmXHU4MzFkXHU1NWVjXHU4Mzg1XHU0NTBiXHV7MjZkYTV9XHU4M2FjXHU4M2MxXHU4M2QzXHUzNDdl''@;'; put 'put ''XHV7MjZlZDR9XHU2YTU3XHU4NTVhXHUzNDk2XHV7MjZlNDJ9XHV7MjJlZWZ9XHU4NDU4XHV7MjViZTR9XHU4NDcxXHUzZGQzXHU0NGU0XHU2YWE3XHU4NDRhXHV7MjNjYjV9XHU3OTU4XHU4NGE4XHV7MjZiOTZ9XHV7MjZlNzd9XHV7MjZlNDN9XHU4NGRlXHU4NDBmXHU4MzkxXHU0NGEwXHU4''@;'; put 'put ''NDkzXHU4NGU0XHV7MjVjOTF9XHU0MjQwXHV7MjVjYzB9XHU0NTQzXHU4NTM0XHU1YWYyXHV7MjZlOTl9XHU0NTI3XHU4NTczXHU0NTE2XHU2N2JmXHU4NjE2Il0sWyI4ZmExIiwiXHV7Mjg2MjV9XHV7Mjg2M2J9XHU4NWMxXHV7MjcwODh9XHU4NjAyXHV7MjE1ODJ9XHV7MjcwY2R9XHV7MmY5''@;'; put 'put ''YjJ9XHU0NTZhXHU4NjI4XHUzNjQ4XHV7MjE4YTJ9XHU1M2Y3XHV7MjczOWF9XHU4NjdlXHU4NzcxXHV7MmEwZjh9XHU4N2VlXHV7MjJjMjd9XHU4N2IxXHU4N2RhXHU4ODBmXHU1NjYxXHU4NjZjXHU2ODU2XHU0NjBmXHU4ODQ1XHU4ODQ2XHV7Mjc1ZTB9XHV7MjNkYjl9XHV7Mjc1ZTR9XHU4''@;'; put 'put ''ODVlXHU4ODljXHU0NjViXHU4OGI0XHU4OGI1XHU2M2MxXHU4OGM1XHU3Nzc3XHV7Mjc3MGZ9XHU4OTg3XHU4OThhXHU4OWE2XHU4OWE5XHU4OWE3XHU4OWJjXHV7MjhhMjV9XHU4OWU3XHV7Mjc5MjR9XHV7MjdhYmR9XHU4YTljXHU3NzkzXHU5MWZlXHU4YTkwXHV7MjdhNTl9XHU3YWU5XHV7''@;'; put 'put ''MjdiM2F9XHV7MjNmOGZ9XHU0NzEzXHV7MjdiMzh9XHU3MTdjXHU4YjBjXHU4YjFmXHV7MjU0MzB9XHV7MjU1NjV9XHU4YjNmXHU4YjRjXHU4YjRkXHU4YWE5XHV7MjRhN2F9XHU4YjkwXHU4YjliXHU4YWFmXHV7MjE2ZGZ9XHU0NjE1XHU4ODRmXHU4YzliXHV7MjdkNTR9XHV7MjdkOGZ9XHV7''@;'; put 'put ''MmY5ZDR9XHUzNzI1XHV7MjdkNTN9XHU4Y2Q2XHV7MjdkOTh9XHV7MjdkYmR9XHU4ZDEyXHU4ZDAzXHV7MjE5MTB9XHU4Y2RiXHU3MDVjXHU4ZDExXHV7MjRjYzl9XHUzZWQwXHU4ZDc3Il0sWyI5MDQwIiwiXHU4ZGE5XHV7MjgwMDJ9XHV7MjEwMTR9XHV7MjQ5OGF9XHUzYjdjXHV7MjgxYmN9''@;'; put 'put ''XHV7MjcxMGN9XHU3YWU3XHU4ZWFkXHU4ZWI2XHU4ZWMzXHU5MmQ0XHU4ZjE5XHU4ZjJkXHV7MjgzNjV9XHV7Mjg0MTJ9XHU4ZmE1XHU5MzAzXHV7MmEyOWZ9XHV7MjBhNTB9XHU4ZmIzXHU0OTJhXHV7Mjg5ZGV9XHV7Mjg1M2R9XHV7MjNkYmJ9XHU1ZWY4XHV7MjMyNjJ9XHU4ZmY5XHV7MmEw''@;'; put 'put ''MTR9XHV7Mjg2YmN9XHV7Mjg1MDF9XHV7MjIzMjV9XHUzOTgwXHV7MjZlZDd9XHU5MDM3XHV7Mjg1M2N9XHV7MjdhYmV9XHU5MDYxXHV7Mjg1NmN9XHV7Mjg2MGJ9XHU5MGE4XHV7Mjg3MTN9XHU5MGM0XHV7Mjg2ZTZ9XHU5MGFlXHU5MGZkXHU5MTY3XHUzYWYwXHU5MWE5XHU5MWM0XHU3Y2Fj''@;'; put 'put ''XHV7Mjg5MzN9XHV7MjFlODl9XHU5MjBlXHU2YzlmXHU5MjQxXHU5MjYyXHV7MjU1Yjl9XHU5MmI5XHV7MjhhYzZ9XHV7MjNjOWJ9XHV7MjhiMGN9XHV7MjU1ZGJ9Il0sWyI5MGExIiwiXHV7MjBkMzF9XHU5MzJjXHU5MzZiXHV7MjhhZTF9XHV7MjhiZWJ9XHU3MDhmXHU1YWMzXHV7MjhhZTJ9''@;'; put 'put ''XHV7MjhhZTV9XHU0OTY1XHU5MjQ0XHV7MjhiZWN9XHV7MjhjMzl9XHV7MjhiZmZ9XHU5MzczXHU5NDViXHU4ZWJjXHU5NTg1XHU5NWE2XHU5NDI2XHU5NWEwXHU2ZmY2XHU0MmI5XHV7MjI2N2F9XHV7Mjg2ZDh9XHV7MjEyN2N9XHV7MjNlMmV9XHU0OWRmXHU2YzFjXHU5NjdiXHU5Njk2XHU0''@;'; put 'put ''MTZjXHU5NmEzXHV7MjZlZDV9XHU2MWRhXHU5NmI2XHU3OGY1XHV7MjhhZTB9XHU5NmJkXHU1M2NjXHU0OWExXHV7MjZjYjh9XHV7MjAyNzR9XHV7MjY0MTB9XHV7MjkwYWZ9XHV7MjkwZTV9XHV7MjRhZDF9XHV7MjE5MTV9XHV7MjMzMGF9XHU5NzMxXHU4NjQyXHU5NzM2XHU0YTBmXHU0NTNk''@;'; put 'put ''XHU0NTg1XHV7MjRhZTl9XHU3MDc1XHU1YjQxXHU5NzFiXHU5NzVjXHV7MjkxZDV9XHU5NzU3XHU1YjRhXHV7MjkxZWJ9XHU5NzVmXHU5NDI1XHU1MGQwXHV7MjMwYjd9XHV7MjMwYmN9XHU5Nzg5XHU5NzlmXHU5N2IxXHU5N2JlXHU5N2MwXHU5N2QyXHU5N2UwXHV7MjU0NmN9XHU5N2VlXHU3''@;'; put 'put ''NDFjXHV7Mjk0MzN9XHU5N2ZmXHU5N2Y1XHV7Mjk0MWR9XHV7Mjc5N2F9XHU0YWQxXHU5ODM0XHU5ODMzXHU5ODRiXHU5ODY2XHUzYjBlXHV7MjcxNzV9XHUzZDUxXHV7MjA2MzB9XHV7MjQxNWN9Il0sWyI5MTQwIiwiXHV7MjU3MDZ9XHU5OGNhXHU5OGI3XHU5OGM4XHU5OGM3XHU0YWZmXHV7''@;'; put 'put ''MjZkMjd9XHV7MjE2ZDN9XHU1NWIwXHU5OGUxXHU5OGU2XHU5OGVjXHU5Mzc4XHU5OTM5XHV7MjRhMjl9XHU0YjcyXHV7Mjk4NTd9XHV7Mjk5MDV9XHU5OWY1XHU5YTBjXHU5YTNiXHU5YTEwXHU5YTU4XHV7MjU3MjV9XHUzNmM0XHV7MjkwYjF9XHV7MjliZDV9XHU5YWUwXHU5YWUyXHV7Mjli''@;'; put 'put ''MDV9XHU5YWY0XHU0YzBlXHU5YjE0XHU5YjJkXHV7Mjg2MDB9XHU1MDM0XHU5YjM0XHV7MjY5YTh9XHUzOGMzXHV7MjMwN2R9XHU5YjUwXHU5YjQwXHV7MjlkM2V9XHU1YTQ1XHV7MjE4NjN9XHU5YjhlXHV7MjQyNGJ9XHU5YzAyXHU5YmZmXHU5YzBjXHV7MjllNjh9XHU5ZGQ0XHV7MjlmYjd9''@;'; put 'put ''XHV7MmExOTJ9XHV7MmExYWJ9XHV7MmEwZTF9XHV7MmExMjN9XHV7MmExZGZ9XHU5ZDdlXHU5ZDgzXHV7MmExMzR9XHU5ZTBlXHU2ODg4Il0sWyI5MWExIiwiXHU5ZGM0XHV7MjIxNWJ9XHV7MmExOTN9XHV7MmEyMjB9XHV7MjE5M2J9XHV7MmEyMzN9XHU5ZDM5XHV7MmEwYjl9XHV7MmEyYjR9''@;'; put 'put ''XHU5ZTkwXHU5ZTk1XHU5ZTllXHU5ZWEyXHU0ZDM0XHU5ZWFhXHU5ZWFmXHV7MjQzNjR9XHU5ZWMxXHUzYjYwXHUzOWU1XHUzZDFkXHU0ZjMyXHUzN2JlXHV7MjhjMmJ9XHU5ZjAyXHU5ZjA4XHU0Yjk2XHU5NDI0XHV7MjZkYTJ9XHU5ZjE3XHU5ZjE2XHU5ZjM5XHU1NjlmXHU1NjhhXHU5ZjQ1''@;'; put 'put ''XHU5OWI4XHV7MjkwOGJ9XHU5N2YyXHU4NDdmXHU5ZjYyXHU5ZjY5XHU3YWRjXHU5ZjhlXHU3MjE2XHU0YmJlXHV7MjQ5NzV9XHV7MjQ5YmJ9XHU3MTc3XHV7MjQ5Zjh9XHV7MjQzNDh9XHV7MjRhNTF9XHU3MzllXHV7MjhiZGF9XHV7MjE4ZmF9XHU3OTlmXHV7Mjg5N2V9XHV7MjhlMzZ9XHU5''@;'; put 'put ''MzY5XHU5M2YzXHV7MjhhNDR9XHU5MmVjXHU5MzgxXHU5M2NiXHV7Mjg5NmN9XHV7MjQ0Yjl9XHU3MjE3XHUzZWViXHU3NzcyXHU3YTQzXHU3MGQwXHV7MjQ0NzN9XHV7MjQzZjh9XHU3MTdlXHV7MjE3ZWZ9XHU3MGEzXHV7MjE4YmV9XHV7MjM1OTl9XHUzZWM3XHV7MjE4ODV9XHV7MjU0MmZ9''@;'; put 'put ''XHV7MjE3Zjh9XHUzNzIyXHV7MjE2ZmJ9XHV7MjE4Mzl9XHUzNmUxXHV7MjE3NzR9XHV7MjE4ZDF9XHV7MjVmNGJ9XHUzNzIzXHV7MjE2YzB9XHU1NzViXHV7MjRhMjV9XHV7MjEzZmV9XHV7MjEyYTh9Il0sWyI5MjQwIiwiXHV7MjEzYzZ9XHV7MjE0YjZ9XHU4NTAzXHV7MjM2YTZ9XHU4NTAz''@;'; put 'put ''XHU4NDU1XHV7MjQ5OTR9XHV7MjcxNjV9XHV7MjNlMzF9XHV7MjU1NWN9XHV7MjNlZmJ9XHV7MjcwNTJ9XHU0NGY0XHV7MjM2ZWV9XHV7Mjk5OWR9XHV7MjZmMjZ9XHU2N2Y5XHUzNzMzXHUzYzE1XHUzZGU3XHU1ODZjXHV7MjE5MjJ9XHU2ODEwXHU0MDU3XHV7MjM3M2Z9XHV7MjQwZTF9XHV7''@;'; put 'put ''MjQwOGJ9XHV7MjQxMGZ9XHV7MjZjMjF9XHU1NGNiXHU1NjllXHV7MjY2YjF9XHU1NjkyXHV7MjBmZGZ9XHV7MjBiYTh9XHV7MjBlMGR9XHU5M2M2XHV7MjhiMTN9XHU5MzljXHU0ZWY4XHU1MTJiXHUzODE5XHV7MjQ0MzZ9XHU0ZWJjXHV7MjA0NjV9XHV7MjAzN2Z9XHU0ZjRiXHU0ZjhhXHV7''@;'; put 'put ''MjU2NTF9XHU1YTY4XHV7MjAxYWJ9XHV7MjAzY2J9XHUzOTk5XHV7MjAzMGF9XHV7MjA0MTR9XHUzNDM1XHU0ZjI5XHV7MjAyYzB9XHV7MjhlYjN9XHV7MjAyNzV9XHU4YWRhXHV7MjAyMGN9XHU0ZTk4Il0sWyI5MmExIiwiXHU1MGNkXHU1MTBkXHU0ZmEyXHU0ZjAzXHV7MjRhMGV9XHV7MjNl''@;'; put 'put ''OGF9XHU0ZjQyXHU1MDJlXHU1MDZjXHU1MDgxXHU0ZmNjXHU0ZmU1XHU1MDU4XHU1MGZjXHU1MTU5XHU1MTViXHU1MTVkXHU1MTVlXHU2ZTc2XHV7MjM1OTV9XHV7MjNlMzl9XHV7MjNlYmZ9XHU2ZDcyXHV7MjE4ODR9XHV7MjNlODl9XHU1MWE4XHU1MWMzXHV7MjA1ZTB9XHU0NGRkXHV7MjA0''@;'; put 'put ''YTN9XHV7MjA0OTJ9XHV7MjA0OTF9XHU4ZDdhXHV7MjhhOWN9XHV7MjA3MGV9XHU1MjU5XHU1MmE0XHV7MjA4NzN9XHU1MmUxXHU5MzZlXHU0NjdhXHU3MThjXHV7MjQzOGN9XHV7MjBjMjB9XHV7MjQ5YWN9XHV7MjEwZTR9XHU2OWQxXHV7MjBlMWR9XHU3NDc5XHUzZWRlXHU3NDk5XHU3NDE0''@;'; put 'put ''XHU3NDU2XHU3Mzk4XHU0YjhlXHV7MjRhYmN9XHV7MjQwOGR9XHU1M2QwXHUzNTg0XHU3MjBmXHV7MjQwYzl9XHU1NWI0XHV7MjAzNDV9XHU1NGNkXHV7MjBiYzZ9XHU1NzFkXHU5MjVkXHU5NmY0XHU5MzY2XHU1N2RkXHU1NzhkXHU1NzdmXHUzNjNlXHU1OGNiXHU1YTk5XHV7MjhhNDZ9XHV7''@;'; put 'put ''MjE2ZmF9XHV7MjE3NmZ9XHV7MjE3MTB9XHU1YTJjXHU1OWI4XHU5MjhmXHU1YTdlXHU1YWNmXHU1YTEyXHV7MjU5NDZ9XHV7MjE5ZjN9XHV7MjE4NjF9XHV7MjQyOTV9XHUzNmY1XHU2ZDA1XHU3NDQzXHU1YTIxXHV7MjVlODN9Il0sWyI5MzQwIiwiXHU1YTgxXHV7MjhiZDd9XHV7MjA0MTN9''@;'; put 'put ''XHU5M2UwXHU3NDhjXHV7MjEzMDN9XHU3MTA1XHU0OTcyXHU5NDA4XHV7Mjg5ZmJ9XHU5M2JkXHUzN2EwXHU1YzFlXHU1YzllXHU1ZTVlXHU1ZTQ4XHV7MjE5OTZ9XHV7MjE5N2N9XHV7MjNhZWV9XHU1ZWNkXHU1YjRmXHV7MjE5MDN9XHV7MjE5MDR9XHUzNzAxXHV7MjE4YTB9XHUzNmRkXHV7''@;'; put 'put ''MjE2ZmV9XHUzNmQzXHU4MTJhXHV7MjhhNDd9XHV7MjFkYmF9XHV7MjM0NzJ9XHV7Mjg5YTh9XHU1ZjBjXHU1ZjBlXHV7MjE5Mjd9XHV7MjE3YWJ9XHU1YTZiXHV7MjE3M2J9XHU1YjQ0XHU4NjE0XHV7Mjc1ZmR9XHU4ODYwXHU2MDdlXHV7MjI4NjB9XHV7MjI2MmJ9XHU1ZmRiXHUzZWI4XHV7''@;'; put 'put ''MjI1YWZ9XHV7MjI1YmV9XHV7MjkwODh9XHV7MjZmNzN9XHU2MWMwXHV7MjAwM2V9XHV7MjAwNDZ9XHV7MjI2MWJ9XHU2MTk5XHU2MTk4XHU2MDc1XHV7MjJjOWJ9XHV7MjJkMDd9XHV7MjQ2ZDR9XHV7MjkxNGR9Il0sWyI5M2ExIiwiXHU2NDcxXHV7MjQ2NjV9XHV7MjJiNmF9XHUzYTI5XHV7''@;'; put 'put ''MjJiMjJ9XHV7MjM0NTB9XHV7Mjk4ZWF9XHV7MjJlNzh9XHU2MzM3XHV7MmE0NWJ9XHU2NGI2XHU2MzMxXHU2M2QxXHV7MjQ5ZTN9XHV7MjJkNjd9XHU2MmE0XHV7MjJjYTF9XHU2NDNiXHU2NTZiXHU2OTcyXHUzYmY0XHV7MjMwOGV9XHV7MjMyYWR9XHV7MjQ5ODl9XHV7MjMyYWJ9XHU1NTBk''@;'; put 'put ''XHV7MjMyZTB9XHV7MjE4ZDl9XHV7Mjk0M2Z9XHU2NmNlXHV7MjMyODl9XHV7MjMxYjN9XHUzYWUwXHU0MTkwXHV7MjU1ODR9XHV7MjhiMjJ9XHV7MjU1OGZ9XHV7MjE2ZmN9XHV7MjU1NWJ9XHV7MjU0MjV9XHU3OGVlXHV7MjMxMDN9XHV7MjE4MmF9XHV7MjMyMzR9XHUzNDY0XHV7MjMyMGZ9''@;'; put 'put ''XHV7MjMxODJ9XHV7MjQyYzl9XHU2NjhlXHV7MjZkMjR9XHU2NjZiXHU0YjkzXHU2NjMwXHV7Mjc4NzB9XHV7MjFkZWJ9XHU2NjYzXHV7MjMyZDJ9XHV7MjMyZTF9XHU2NjFlXHV7MjU4NzJ9XHUzOGQxXHV7MjM4M2F9XHV7MjM3YmN9XHUzYjk5XHV7MjM3YTJ9XHV7MjMzZmV9XHU3NGQwXHUz''@;'; put 'put ''Yjk2XHU2NzhmXHV7MjQ2MmF9XHU2OGI2XHU2ODFlXHUzYmM0XHU2YWJlXHUzODYzXHV7MjM3ZDV9XHV7MjQ0ODd9XHU2YTMzXHU2YTUyXHU2YWM5XHU2YjA1XHV7MjE5MTJ9XHU2NTExXHU2ODk4XHU2YTRjXHUzYmQ3XHU2YTdhXHU2YjU3XHV7MjNmYzB9XHV7MjNjOWF9XHU5M2EwXHU5MmYy''@;'; put 'put ''XHV7MjhiZWF9XHV7MjhhY2J9Il0sWyI5NDQwIiwiXHU5Mjg5XHV7MjgwMWV9XHV7Mjg5ZGN9XHU5NDY3XHU2ZGE1XHU2ZjBiXHV7MjQ5ZWN9XHU2ZDY3XHV7MjNmN2Z9XHUzZDhmXHU2ZTA0XHV7MjQwM2N9XHU1YTNkXHU2ZTBhXHU1ODQ3XHU2ZDI0XHU3ODQyXHU3MTNiXHV7MjQzMWF9XHV7''@;'; put 'put ''MjQyNzZ9XHU3MGYxXHU3MjUwXHU3Mjg3XHU3Mjk0XHV7MjQ3OGZ9XHV7MjQ3MjV9XHU1MTc5XHV7MjRhYTR9XHV7MjA1ZWJ9XHU3NDdhXHV7MjNlZjh9XHV7MjM2NWZ9XHV7MjRhNGF9XHV7MjQ5MTd9XHV7MjVmZTF9XHUzZjA2XHUzZWIxXHV7MjRhZGZ9XHV7MjhjMjN9XHV7MjNmMzV9XHU2''@;'; put 'put ''MGE3XHUzZWYzXHU3NGNjXHU3NDNjXHU5Mzg3XHU3NDM3XHU0NDlmXHV7MjZkZWF9XHU0NTUxXHU3NTgzXHUzZjYzXHV7MjRjZDl9XHV7MjRkMDZ9XHUzZjU4XHU3NTU1XHU3NjczXHV7MmE1YzZ9XHUzYjE5XHU3NDY4XHV7MjhhY2N9XHV7MjQ5YWJ9XHV7MjQ5OGV9XHUzYWZiIl0sWyI5NGEx''@;'; put 'put ''IiwiXHUzZGNkXHV7MjRhNGV9XHUzZWZmXHV7MjQ5YzV9XHV7MjQ4ZjN9XHU5MWZhXHU1NzMyXHU5MzQyXHV7MjhhZTN9XHV7MjE4NjR9XHU1MGRmXHV7MjUyMjF9XHV7MjUxZTd9XHU3Nzc4XHV7MjMyMzJ9XHU3NzBlXHU3NzBmXHU3NzdiXHV7MjQ2OTd9XHV7MjM3ODF9XHUzYTVlXHV7MjQ4''@;'; put 'put ''ZjB9XHU3NDM4XHU3NDliXHUzZWJmXHV7MjRhYmF9XHV7MjRhYzd9XHU0MGM4XHV7MjRhOTZ9XHV7MjYxYWV9XHU5MzA3XHV7MjU1ODF9XHU3ODFlXHU3ODhkXHU3ODg4XHU3OGQyXHU3M2QwXHU3OTU5XHV7Mjc3NDF9XHV7MjU2ZTN9XHU0MTBlXHU3OTliXHU4NDk2XHU3OWE1XHU2YTJkXHV7''@;'; put 'put ''MjNlZmF9XHU3YTNhXHU3OWY0XHU0MTZlXHV7MjE2ZTZ9XHU0MTMyXHU5MjM1XHU3OWYxXHV7MjBkNGN9XHV7MjQ5OGN9XHV7MjAyOTl9XHV7MjNkYmF9XHV7MjE3NmV9XHUzNTk3XHU1NTZiXHUzNTcwXHUzNmFhXHV7MjAxZDR9XHV7MjBjMGR9XHU3YWUyXHU1YTU5XHV7MjI2ZjV9XHV7MjVh''@;'; put 'put ''YWZ9XHV7MjVhOWN9XHU1YTBkXHV7MjAyNWJ9XHU3OGYwXHU1YTJhXHV7MjViYzZ9XHU3YWZlXHU0MWY5XHU3YzVkXHU3YzZkXHU0MjExXHV7MjViYjN9XHV7MjVlYmN9XHV7MjVlYTZ9XHU3Y2NkXHV7MjQ5Zjl9XHV7MjE3YjB9XHU3YzhlXHU3YzdjXHU3Y2FlXHU2YWIyXHU3ZGRjXHU3ZTA3''@;'; put 'put ''XHU3ZGQzXHU3ZjRlXHV7MjYyNjF9Il0sWyI5NTQwIiwiXHV7MjYxNWN9XHV7MjdiNDh9XHU3ZDk3XHV7MjVlODJ9XHU0MjZhXHV7MjZiNzV9XHV7MjA5MTZ9XHU2N2Q2XHV7MjAwNGV9XHV7MjM1Y2Z9XHU1N2M0XHV7MjY0MTJ9XHV7MjYzZjh9XHV7MjQ5NjJ9XHU3ZmRkXHU3YjI3XHV7MjA4''@;'; put 'put ''MmN9XHV7MjVhZTl9XHV7MjVkNDN9XHU3YjBjXHV7MjVlMGV9XHU5OWU2XHU4NjQ1XHU5YTYzXHU2YTFjXHV7MjM0M2Z9XHUzOWUyXHV7MjQ5Zjd9XHV7MjY1YWR9XHU5YTFmXHV7MjY1YTB9XHU4NDgwXHV7MjcxMjd9XHV7MjZjZDF9XHU0NGVhXHU4MTM3XHU0NDAyXHU4MGM2XHU4MTA5XHU4''@;'; put 'put ''MTQyXHV7MjY3YjR9XHU5OGMzXHV7MjZhNDJ9XHU4MjYyXHU4MjY1XHV7MjZhNTF9XHU4NDUzXHV7MjZkYTd9XHU4NjEwXHV7MjcyMWJ9XHU1YTg2XHU0MTdmXHV7MjE4NDB9XHU1YjJiXHV7MjE4YTF9XHU1YWU0XHV7MjE4ZDh9XHU4NmEwXHV7MmY5YmN9XHV7MjNkOGZ9XHU4ODJkXHV7Mjc0''@;'; put 'put ''MjJ9XHU1YTAyIl0sWyI5NWExIiwiXHU4ODZlXHU0ZjQ1XHU4ODg3XHU4OGJmXHU4OGU2XHU4OTY1XHU4OTRkXHV7MjU2ODN9XHU4OTU0XHV7Mjc3ODV9XHV7Mjc3ODR9XHV7MjhiZjV9XHV7MjhiZDl9XHV7MjhiOWN9XHV7Mjg5Zjl9XHUzZWFkXHU4NGEzXHU0NmY1XHU0NmNmXHUzN2YyXHU4''@;'; put 'put ''YTNkXHU4YTFjXHV7Mjk0NDh9XHU1ZjRkXHU5MjJiXHV7MjQyODR9XHU2NWQ0XHU3MTI5XHU3MGM0XHV7MjE4NDV9XHU5ZDZkXHU4YzlmXHU4Y2U5XHV7MjdkZGN9XHU1OTlhXHU3N2MzXHU1OWYwXHU0MzZlXHUzNmQ0XHU4ZTJhXHU4ZWE3XHV7MjRjMDl9XHU4ZjMwXHU4ZjRhXHU0MmY0XHU2''@;'; put 'put ''YzU4XHU2ZmJiXHV7MjIzMjF9XHU0ODliXHU2Zjc5XHU2ZThiXHV7MjE3ZGF9XHU5YmU5XHUzNmI1XHV7MjQ5MmZ9XHU5MGJiXHU5MDk3XHU1NTcxXHU0OTA2XHU5MWJiXHU5NDA0XHV7MjhhNGJ9XHU0MDYyXHV7MjhhZmN9XHU5NDI3XHV7MjhjMWR9XHV7MjhjM2J9XHU4NGU1XHU4YTJiXHU5''@;'; put 'put ''NTk5XHU5NWE3XHU5NTk3XHU5NTk2XHV7MjhkMzR9XHU3NDQ1XHUzZWMyXHV7MjQ4ZmZ9XHV7MjRhNDJ9XHV7MjQzZWF9XHUzZWU3XHV7MjMyMjV9XHU5NjhmXHV7MjhlZTd9XHV7MjhlNjZ9XHV7MjhlNjV9XHUzZWNjXHV7MjQ5ZWR9XHV7MjRhNzh9XHV7MjNmZWV9XHU3NDEyXHU3NDZiXHUz''@;'; put 'put ''ZWZjXHU5NzQxXHV7MjkwYjB9Il0sWyI5NjQwIiwiXHU2ODQ3XHU0YTFkXHV7MjkwOTN9XHV7MjU3ZGZ9XHU5NzVkXHU5MzY4XHV7Mjg5ODl9XHV7MjhjMjZ9XHV7MjhiMmZ9XHV7MjYzYmV9XHU5MmJhXHU1YjExXHU4YjY5XHU0OTNjXHU3M2Y5XHV7MjQyMWJ9XHU5NzliXHU5NzcxXHU5OTM4''@;'; put 'put ''XHV7MjBmMjZ9XHU1ZGMxXHV7MjhiYzV9XHV7MjRhYjJ9XHU5ODFmXHV7Mjk0ZGF9XHU5MmY2XHV7Mjk1ZDd9XHU5MWU1XHU0NGMwXHV7MjhiNTB9XHV7MjRhNjd9XHV7MjhiNjR9XHU5OGRjXHV7MjhhNDV9XHUzZjAwXHU5MjJhXHU0OTI1XHU4NDE0XHU5OTNiXHU5OTRkXHV7MjdiMDZ9XHUz''@;'; put 'put ''ZGZkXHU5OTliXHU0YjZmXHU5OWFhXHU5YTVjXHV7MjhiNjV9XHV7MjU4Yzh9XHU2YThmXHU5YTIxXHU1YWZlXHU5YTJmXHV7Mjk4ZjF9XHU0YjkwXHV7Mjk5NDh9XHU5OWJjXHU0YmJkXHU0Yjk3XHU5MzdkXHU1ODcyXHV7MjEzMDJ9XHU1ODIyXHV7MjQ5Yjh9Il0sWyI5NmExIiwiXHV7MjE0''@;'; put 'put ''ZTh9XHU3ODQ0XHV7MjI3MWZ9XHV7MjNkYjh9XHU2OGM1XHUzZDdkXHU5NDU4XHUzOTI3XHU2MTUwXHV7MjI3ODF9XHV7MjI5NmJ9XHU2MTA3XHU5YzRmXHU5YzUzXHU5YzdiXHU5YzM1XHU5YzEwXHU5YjdmXHU5YmNmXHV7MjllMmR9XHU5YjlmXHV7MmExZjV9XHV7MmEwZmV9XHU5ZDIxXHU0''@;'; put 'put ''Y2FlXHV7MjQxMDR9XHU5ZTE4XHU0Y2IwXHU5ZDBjXHV7MmExYjR9XHV7MmEwZWR9XHV7MmEwZjN9XHV7Mjk5MmZ9XHU5ZGE1XHU4NGJkXHV7MjZlMTJ9XHV7MjZmZGZ9XHV7MjZiODJ9XHU4NWZjXHU0NTMzXHV7MjZkYTR9XHV7MjZlODR9XHV7MjZkZjB9XHU4NDIwXHU4NWVlXHV7MjZlMDB9''@;'; put 'put ''XHV7MjM3ZDd9XHV7MjYwNjR9XHU3OWUyXHV7MjM1OWN9XHV7MjM2NDB9XHU0OTJkXHV7MjQ5ZGV9XHUzZDYyXHU5M2RiXHU5MmJlXHU5MzQ4XHV7MjAyYmZ9XHU3OGI5XHU5Mjc3XHU5NDRkXHU0ZmU0XHUzNDQwXHU5MDY0XHV7MjU1NWR9XHU3ODNkXHU3ODU0XHU3OGI2XHU3ODRiXHV7MjE3''@;'; put 'put ''NTd9XHV7MjMxYzl9XHV7MjQ5NDF9XHUzNjlhXHU0ZjcyXHU2ZmRhXHU2ZmQ5XHU3MDFlXHU3MDFlXHU1NDE0XHV7MjQxYjV9XHU1N2JiXHU1OGYzXHU1NzhhXHU5ZDE2XHU1N2Q3XHU3MTM0XHUzNGFmXHV7MjQxYWN9XHU3MWViXHV7MjZjNDB9XHV7MjRmOTd9XHU1YjI4XHV7MjE3YjV9XHV7''@;'; put 'put ''MjhhNDl9Il0sWyI5NzQwIiwiXHU2MTBjXHU1YWNlXHU1YTBiXHU0MmJjXHV7MjQ0ODh9XHUzNzJjXHU0YjdiXHV7Mjg5ZmN9XHU5M2JiXHU5M2I4XHV7MjE4ZDZ9XHV7MjBmMWR9XHU4NDcyXHV7MjZjYzB9XHV7MjE0MTN9XHV7MjQyZmF9XHV7MjJjMjZ9XHV7MjQzYzF9XHU1OTk0XHV7MjNk''@;'; put 'put ''Yjd9XHV7MjY3NDF9XHU3ZGE4XHV7MjYxNWJ9XHV7MjYwYTR9XHV7MjQ5Yjl9XHV7MjQ5OGJ9XHV7Mjg5ZmF9XHU5MmU1XHU3M2UyXHUzZWU5XHU3NGI0XHV7MjhiNjN9XHV7MjE4OWZ9XHUzZWUxXHV7MjRhYjN9XHU2YWQ4XHU3M2YzXHU3M2ZiXHUzZWQ2XHV7MjRhM2V9XHV7MjRhOTR9XHV7''@;'; put 'put ''MjE3ZDl9XHV7MjRhNjZ9XHV7MjAzYTd9XHV7MjE0MjR9XHV7MjQ5ZTV9XHU3NDQ4XHV7MjQ5MTZ9XHU3MGE1XHV7MjQ5NzZ9XHU5Mjg0XHU3M2U2XHU5MzVmXHV7MjA0ZmV9XHU5MzMxXHV7MjhhY2V9XHV7MjhhMTZ9XHU5Mzg2XHV7MjhiZTd9XHV7MjU1ZDV9XHU0OTM1XHV7MjhhODJ9XHU3''@;'; put 'put ''MTZiIl0sWyI5N2ExIiwiXHV7MjQ5NDN9XHV7MjBjZmZ9XHU1NmE0XHV7MjA2MWF9XHV7MjBiZWJ9XHV7MjBjYjh9XHU1NTAyXHU3OWM0XHV7MjE3ZmF9XHU3ZGZlXHV7MjE2YzJ9XHV7MjRhNTB9XHV7MjE4NTJ9XHU0NTJlXHU5NDAxXHUzNzBhXHV7MjhhYzB9XHV7MjQ5YWR9XHU1OWIwXHV7''@;'; put 'put ''MjE4YmZ9XHV7MjE4ODN9XHV7Mjc0ODR9XHU1YWExXHUzNmUyXHV7MjNkNWJ9XHUzNmIwXHU5MjVmXHU1YTc5XHV7MjhhODF9XHV7MjE4NjJ9XHU5Mzc0XHUzY2NkXHV7MjBhYjR9XHU0YTk2XHUzOThhXHU1MGY0XHUzZDY5XHUzZDRjXHV7MjEzOWN9XHU3MTc1XHU0MmZiXHV7MjgyMTh9XHU2''@;'; put 'put ''ZTBmXHV7MjkwZTR9XHU0NGViXHU2ZDU3XHV7MjdlNGZ9XHU3MDY3XHU2Y2FmXHUzY2Q2XHV7MjNmZWR9XHV7MjNlMmR9XHU2ZTAyXHU2ZjBjXHUzZDZmXHV7MjAzZjV9XHU3NTUxXHUzNmJjXHUzNGM4XHU0NjgwXHUzZWRhXHU0ODcxXHU1OWM0XHU5MjZlXHU0OTNlXHU4ZjQxXHV7MjhjMWN9''@;'; put 'put ''XHV7MjZiYzB9XHU1ODEyXHU1N2M4XHUzNmQ2XHV7MjE0NTJ9XHU3MGZlXHV7MjQzNjJ9XHV7MjRhNzF9XHV7MjJmZTN9XHV7MjEyYjB9XHV7MjIzYmR9XHU2OGI5XHU2OTY3XHV7MjEzOTh9XHV7MjM0ZTV9XHV7MjdiZjR9XHV7MjM2ZGZ9XHV7MjhhODN9XHV7MjM3ZDZ9XHV7MjMzZmF9XHV7''@;'; put 'put ''MjRjOWZ9XHU2YTFhXHV7MjM2YWR9XHV7MjZjYjd9XHU4NDNlXHU0NGRmXHU0NGNlIl0sWyI5ODQwIiwiXHV7MjZkMjZ9XHV7MjZkNTF9XHV7MjZjODJ9XHV7MjZmZGV9XHU2ZjE3XHV7MjcxMDl9XHU4MzNkXHV7MjE3M2F9XHU4M2VkXHV7MjZjODB9XHV7MjcwNTN9XHV7MjE3ZGJ9XHU1OTg5''@;'; put 'put ''XHU1YTgyXHV7MjE3YjN9XHU1YTYxXHU1YTcxXHV7MjE5MDV9XHV7MjQxZmN9XHUzNzJkXHU1OWVmXHV7MjE3M2N9XHUzNmM3XHU3MThlXHU5MzkwXHU2NjlhXHV7MjQyYTV9XHU1YTZlXHU1YTJiXHV7MjQyOTN9XHU2YTJiXHV7MjNlZjl9XHV7Mjc3MzZ9XHV7MjQ0NWJ9XHV7MjQyY2F9XHU3''@;'; put 'put ''MTFkXHV7MjQyNTl9XHV7Mjg5ZTF9XHU0ZmIwXHV7MjZkMjh9XHU1Y2MyXHV7MjQ0Y2V9XHV7MjdlNGR9XHV7MjQzYmR9XHU2YTBjXHV7MjQyNTZ9XHV7MjEzMDR9XHU3MGE2XHU3MTMzXHV7MjQzZTl9XHUzZGE1XHU2Y2RmXHV7MmY4MjV9XHV7MjRhNGZ9XHU3ZTY1XHU1OWViXHU1ZDJmXHUz''@;'; put 'put ''ZGYzXHU1ZjVjXHV7MjRhNWR9XHV7MjE3ZGZ9XHU3ZGE0XHU4NDI2Il0sWyI5OGExIiwiXHU1NDg1XHV7MjNhZmF9XHV7MjMzMDB9XHV7MjAyMTR9XHU1NzdlXHV7MjA4ZDV9XHV7MjA2MTl9XHUzZmU1XHV7MjFmOWV9XHV7MmEyYjZ9XHU3MDAzXHV7MjkxNWJ9XHU1ZDcwXHU3MzhmXHU3Y2Qz''@;'; put 'put ''XHV7MjhhNTl9XHV7Mjk0MjB9XHU0ZmM4XHU3ZmU3XHU3MmNkXHU3MzEwXHV7MjdhZjR9XHU3MzM4XHU3MzM5XHV7MjU2ZjZ9XHU3MzQxXHU3MzQ4XHUzZWE5XHV7MjdiMTh9XHU5MDZjXHU3MWY1XHV7MjQ4ZjJ9XHU3M2UxXHU4MWY2XHUzZWNhXHU3NzBjXHUzZWQxXHU2Y2EyXHU1NmZkXHU3''@;'; put 'put ''NDE5XHU3NDFlXHU3NDFmXHUzZWUyXHUzZWYwXHUzZWY0XHUzZWZhXHU3NGQzXHUzZjBlXHUzZjUzXHU3NTQyXHU3NTZkXHU3NTcyXHU3NThkXHUzZjdjXHU3NWM4XHU3NWRjXHUzZmMwXHU3NjRkXHUzZmQ3XHU3Njc0XHUzZmRjXHU3NjdhXHV7MjRmNWN9XHU3MTg4XHU1NjIzXHU4OTgwXHU1''@;'; put 'put ''ODY5XHU0MDFkXHU3NzQzXHU0MDM5XHU2NzYxXHU0MDQ1XHUzNWRiXHU3Nzk4XHU0MDZhXHU0MDZmXHU1YzVlXHU3N2JlXHU3N2NiXHU1OGYyXHU3ODE4XHU3MGI5XHU3ODFjXHU0MGE4XHU3ODM5XHU3ODQ3XHU3ODUxXHU3ODY2XHU4NDQ4XHV7MjU1MzV9XHU3OTMzXHU2ODAzXHU3OTMyXHU0''@;'; put 'put ''MTAzIl0sWyI5OTQwIiwiXHU0MTA5XHU3OTkxXHU3OTk5XHU4ZmJiXHU3YTA2XHU4ZmJjXHU0MTY3XHU3YTkxXHU0MWIyXHU3YWJjXHU4Mjc5XHU0MWM0XHU3YWNmXHU3YWRiXHU0MWNmXHU0ZTIxXHU3YjYyXHU3YjZjXHU3YjdiXHU3YzEyXHU3YzFiXHU0MjYwXHU0MjdhXHU3YzdiXHU3Yzlj''@;'; put 'put ''XHU0MjhjXHU3Y2I4XHU0Mjk0XHU3Y2VkXHU4ZjkzXHU3MGMwXHV7MjBjY2Z9XHU3ZGNmXHU3ZGQ0XHU3ZGQwXHU3ZGZkXHU3ZmFlXHU3ZmI0XHU3MjlmXHU0Mzk3XHU4MDIwXHU4MDI1XHU3YjM5XHU4MDJlXHU4MDMxXHU4MDU0XHUzZGNjXHU1N2I0XHU3MGEwXHU4MGI3XHU4MGU5XHU0M2Vk''@;'; put 'put ''XHU4MTBjXHU3MzJhXHU4MTBlXHU4MTEyXHU3NTYwXHU4MTE0XHU0NDAxXHUzYjM5XHU4MTU2XHU4MTU5XHU4MTVhIl0sWyI5OWExIiwiXHU0NDEzXHU1ODNhXHU4MTdjXHU4MTg0XHU0NDI1XHU4MTkzXHU0NDJkXHU4MWE1XHU1N2VmXHU4MWMxXHU4MWU0XHU4MjU0XHU0NDhmXHU4MmE2XHU4''@;'; put 'put ''Mjc2XHU4MmNhXHU4MmQ4XHU4MmZmXHU0NGIwXHU4MzU3XHU5NjY5XHU2OThhXHU4NDA1XHU3MGY1XHU4NDY0XHU2MGUzXHU4NDg4XHU0NTA0XHU4NGJlXHU4NGUxXHU4NGY4XHU4NTEwXHU4NTM4XHU4NTUyXHU0NTNiXHU4NTZmXHU4NTcwXHU4NWUwXHU0NTc3XHU4NjcyXHU4NjkyXHU4NmIy''@;'; put 'put ''XHU4NmVmXHU5NjQ1XHU4NzhiXHU0NjA2XHU0NjE3XHU4OGFlXHU4OGZmXHU4OTI0XHU4OTQ3XHU4OTkxXHV7Mjc5Njd9XHU4YTI5XHU4YTM4XHU4YTk0XHU4YWI0XHU4YzUxXHU4Y2Q0XHU4Y2YyXHU4ZDFjXHU0Nzk4XHU1ODVmXHU4ZGMzXHU0N2VkXHU0ZWVlXHU4ZTNhXHU1NWQ4XHU1NzU0''@;'; put 'put ''XHU4ZTcxXHU1NWY1XHU4ZWIwXHU0ODM3XHU4ZWNlXHU4ZWUyXHU4ZWU0XHU4ZWVkXHU4ZWYyXHU4ZmI3XHU4ZmMxXHU4ZmNhXHU4ZmNjXHU5MDMzXHU5OWM0XHU0OGFkXHU5OGUwXHU5MjEzXHU0OTFlXHU5MjI4XHU5MjU4XHU5MjZiXHU5MmIxXHU5MmFlXHU5MmJmIl0sWyI5YTQwIiwiXHU5''@;'; put 'put ''MmUzXHU5MmViXHU5MmYzXHU5MmY0XHU5MmZkXHU5MzQzXHU5Mzg0XHU5M2FkXHU0OTQ1XHU0OTUxXHU5ZWJmXHU5NDE3XHU1MzAxXHU5NDFkXHU5NDJkXHU5NDNlXHU0OTZhXHU5NDU0XHU5NDc5XHU5NTJkXHU5NWEyXHU0OWE3XHU5NWY0XHU5NjMzXHU0OWU1XHU2N2EwXHU0YTI0XHU5NzQw''@;'; put 'put ''XHU0YTM1XHU5N2IyXHU5N2MyXHU1NjU0XHU0YWU0XHU2MGU4XHU5OGI5XHU0YjE5XHU5OGYxXHU1ODQ0XHU5OTBlXHU5OTE5XHU1MWI0XHU5OTFjXHU5OTM3XHU5OTQyXHU5OTVkXHU5OTYyXHU0YjcwXHU5OWM1XHU0YjlkXHU5YTNjXHU5YjBmXHU3YTgzXHU5YjY5XHU5YjgxXHU5YmRkXHU5''@;'; put 'put ''YmYxXHU5YmY0XHU0YzZkXHU5YzIwXHUzNzZmXHV7MjFiYzJ9XHU5ZDQ5XHU5YzNhIl0sWyI5YWExIiwiXHU5ZWZlXHU1NjUwXHU5ZDkzXHU5ZGJkXHU5ZGMwXHU5ZGZjXHU5NGY2XHU4ZmI2XHU5ZTdiXHU5ZWFjXHU5ZWIxXHU5ZWJkXHU5ZWM2XHU5NGRjXHU5ZWUyXHU5ZWYxXHU5ZWY4XHU3''@;'; put 'put ''YWM4XHU5ZjQ0XHV7MjAwOTR9XHV7MjAyYjd9XHV7MjAzYTB9XHU2OTFhXHU5NGMzXHU1OWFjXHV7MjA0ZDd9XHU1ODQwXHU5NGMxXHUzN2I5XHV7MjA1ZDV9XHV7MjA2MTV9XHV7MjA2NzZ9XHV7MjE2YmF9XHU1NzU3XHU3MTczXHV7MjBhYzJ9XHV7MjBhY2R9XHV7MjBiYmZ9XHU1NDZhXHV7''@;'; put 'put ''MmY4M2J9XHV7MjBiY2J9XHU1NDllXHV7MjBiZmJ9XHV7MjBjM2J9XHV7MjBjNTN9XHV7MjBjNjV9XHV7MjBjN2N9XHU2MGU3XHV7MjBjOGR9XHU1NjdhXHV7MjBjYjV9XHV7MjBjZGR9XHV7MjBjZWR9XHV7MjBkNmZ9XHV7MjBkYjJ9XHV7MjBkYzh9XHU2OTU1XHU5YzJmXHU4N2E1XHV7MjBl''@;'; put 'put ''MDR9XHV7MjBlMGV9XHV7MjBlZDd9XHV7MjBmOTB9XHV7MjBmMmR9XHV7MjBlNzN9XHU1YzIwXHV7MjBmYmN9XHU1ZTBiXHV7MjEwNWN9XHV7MjEwNGZ9XHV7MjEwNzZ9XHU2NzFlXHV7MjEwN2J9XHV7MjEwODh9XHV7MjEwOTZ9XHUzNjQ3XHV7MjEwYmZ9XHV7MjEwZDN9XHV7MjExMmZ9XHV7''@;'; put 'put ''MjExM2J9XHU1MzY0XHU4NGFkXHV7MjEyZTN9XHV7MjEzNzV9XHV7MjEzMzZ9XHU4YjgxXHV7MjE1Nzd9XHV7MjE2MTl9XHV7MjE3YzN9XHV7MjE3Yzd9XHU0ZTc4XHU3MGJiXHV7MjE4MmR9XHV7MjE5NmF9Il0sWyI5YjQwIiwiXHV7MjFhMmR9XHV7MjFhNDV9XHV7MjFjMmF9XHV7MjFjNzB9''@;'; put 'put ''XHV7MjFjYWN9XHV7MjFlYzh9XHU2MmMzXHV7MjFlZDV9XHV7MjFmMTV9XHU3MTk4XHU2ODU1XHV7MjIwNDV9XHU2OWU5XHUzNmM4XHV7MjIyN2N9XHV7MjIzZDd9XHV7MjIzZmF9XHV7MjI3MmF9XHV7MjI4NzF9XHV7MjI5NGZ9XHU4MmZkXHV7MjI5Njd9XHV7MjI5OTN9XHV7MjJhZDV9XHU4''@;'; put 'put ''OWE1XHV7MjJhZTh9XHU4ZmEwXHV7MjJiMGV9XHU5N2I4XHV7MjJiM2Z9XHU5ODQ3XHU5YWJkXHV7MjJjNGN9Il0sWyI5YjYyIiwiXHV7MjJjODh9XHV7MjJjYjd9XHV7MjViZTh9XHV7MjJkMDh9XHV7MjJkMTJ9XHV7MjJkYjd9XHV7MjJkOTV9XHV7MjJlNDJ9XHV7MjJmNzR9XHV7MjJmY2N9''@;'; put 'put ''XHV7MjMwMzN9XHV7MjMwNjZ9XHV7MjMzMWZ9XHV7MjMzZGV9XHU1ZmIxXHU2NjQ4XHU2NmJmXHV7MjdhNzl9XHV7MjM1Njd9XHV7MjM1ZjN9XHU3MjAxXHV7MjQ5YmF9XHU3N2Q3XHV7MjM2MWF9XHV7MjM3MTZ9XHU3ZTg3XHV7MjAzNDZ9XHU1OGI1XHU2NzBlIl0sWyI5YmExIiwiXHU2OTE4''@;'; put 'put ''XHV7MjNhYTd9XHV7Mjc2NTd9XHV7MjVmZTJ9XHV7MjNlMTF9XHV7MjNlYjl9XHV7Mjc1ZmV9XHV7MjIwOWF9XHU0OGQwXHU0YWI4XHV7MjQxMTl9XHV7MjhhOWF9XHV7MjQyZWV9XHV7MjQzMGR9XHV7MjQwM2J9XHV7MjQzMzR9XHV7MjQzOTZ9XHV7MjRhNDV9XHV7MjA1Y2F9XHU1MWQyXHV7''@;'; put 'put ''MjA2MTF9XHU1OTlmXHV7MjFlYTh9XHUzYmJlXHV7MjNjZmZ9XHV7MjQ0MDR9XHV7MjQ0ZDZ9XHU1Nzg4XHV7MjQ2NzR9XHUzOTliXHV7MjQ3MmZ9XHV7Mjg1ZTh9XHV7Mjk5Yzl9XHUzNzYyXHV7MjIxYzN9XHU4YjVlXHV7MjhiNGV9XHU5OWQ2XHV7MjQ4MTJ9XHV7MjQ4ZmJ9XHV7MjRhMTV9''@;'; put 'put ''XHU3MjA5XHV7MjRhYzB9XHV7MjBjNzh9XHU1OTY1XHV7MjRlYTV9XHV7MjRmODZ9XHV7MjA3Nzl9XHU4ZWRhXHV7MjUwMmN9XHU1MjhmXHU1NzNmXHU3MTcxXHV7MjUyOTl9XHV7MjU0MTl9XHV7MjNmNGF9XHV7MjRhYTd9XHU1NWJjXHV7MjU0NDZ9XHV7MjU0NmV9XHV7MjZiNTJ9XHU5MWQ0''@;'; put 'put ''XHUzNDczXHV7MjU1M2Z9XHV7Mjc2MzJ9XHV7MjU1NWV9XHU0NzE4XHV7MjU1NjJ9XHV7MjU1NjZ9XHV7MjU3Yzd9XHV7MjQ5M2Z9XHV7MjU4NWR9XHU1MDY2XHUzNGZiXHV7MjMzY2N9XHU2MGRlXHV7MjU5MDN9XHU0NzdjXHV7Mjg5NDh9XHV7MjVhYWV9XHV7MjViODl9XHV7MjVjMDZ9XHV7''@;'; put 'put ''MjFkOTB9XHU1N2ExXHU3MTUxXHU2ZmI2XHV7MjYxMDJ9XHV7MjdjMTJ9XHU5MDU2XHV7MjYxYjJ9XHV7MjRmOWF9XHU4YjYyXHV7MjY0MDJ9XHV7MjY0NGF9Il0sWyI5YzQwIiwiXHU1ZDViXHV7MjZiZjd9XHU4ZjM2XHV7MjY0ODR9XHV7MjE5MWN9XHU4YWVhXHV7MjQ5ZjZ9XHV7MjY0ODh9''@;'; put 'put ''XHV7MjNmZWZ9XHV7MjY1MTJ9XHU0YmMwXHV7MjY1YmZ9XHV7MjY2YjV9XHV7MjI3MWJ9XHU5NDY1XHV7MjU3ZTF9XHU2MTk1XHU1YTI3XHV7MmY4Y2R9XHU0ZmJiXHU1NmI5XHV7MjQ1MjF9XHV7MjY2ZmN9XHU0ZTZhXHV7MjQ5MzR9XHU5NjU2XHU2ZDhmXHV7MjZjYmR9XHUzNjE4XHU4OTc3''@;'; put 'put ''XHV7MjY3OTl9XHV7MjY4NmV9XHV7MjY0MTF9XHV7MjY4NWV9XHU3MWRmXHV7MjY4Yzd9XHU3YjQyXHV7MjkwYzB9XHV7MjBhMTF9XHV7MjY5MjZ9XHU5MTA0XHV7MjY5Mzl9XHU3YTQ1XHU5ZGYwXHV7MjY5ZmF9XHU5YTI2XHV7MjZhMmR9XHUzNjVmXHV7MjY0Njl9XHV7MjAwMjF9XHU3OTgz''@;'; put 'put ''XHV7MjZhMzR9XHV7MjZiNWJ9XHU1ZDJjXHV7MjM1MTl9XHU4M2NmXHV7MjZiOWR9XHU0NmQwXHV7MjZjYTR9XHU3NTNiXHU4ODY1XHV7MjZkYWV9XHU1OGI2Il0sWyI5Y2ExIiwiXHUzNzFjXHV7MjI1OGR9XHV7MjcwNGJ9XHV7MjcxY2R9XHUzYzU0XHV7MjcyODB9XHV7MjcyODV9XHU5Mjgx''@;'; put 'put ''XHV7MjIxN2F9XHV7MjcyOGJ9XHU5MzMwXHV7MjcyZTZ9XHV7MjQ5ZDB9XHU2YzM5XHU5NDlmXHV7Mjc0NTB9XHV7MjBlZjh9XHU4ODI3XHU4OGY1XHV7MjI5MjZ9XHV7Mjg0NzN9XHV7MjE3YjF9XHU2ZWI4XHV7MjRhMmF9XHV7MjE4MjB9XHUzOWE0XHUzNmI5XHU1YzEwXHU3OWUzXHU0NTNm''@;'; put 'put ''XHU2NmI2XHV7MjljYWR9XHV7Mjk4YTR9XHU4OTQzXHV7Mjc3Y2N9XHV7Mjc4NTh9XHU1NmQ2XHU0MGRmXHV7MjE2MGF9XHUzOWExXHV7MjM3MmZ9XHV7MjgwZTh9XHV7MjEzYzV9XHU3MWFkXHU4MzY2XHV7Mjc5ZGR9XHV7MjkxYTh9XHU1YTY3XHU0Y2I3XHV7MjcwYWZ9XHV7Mjg5YWJ9XHV7''@;'; put 'put ''Mjc5ZmR9XHV7MjdhMGF9XHV7MjdiMGJ9XHV7MjdkNjZ9XHV7MjQxN2F9XHU3YjQzXHU3OTdlXHV7MjgwMDl9XHU2ZmI1XHV7MmEyZGZ9XHU2YTAzXHV7MjgzMTh9XHU1M2EyXHV7MjZlMDd9XHU5M2JmXHU2ODM2XHU5NzVkXHV7MjgxNmZ9XHV7MjgwMjN9XHV7MjY5YjV9XHV7MjEzZWR9XHV7''@;'; put 'put ''MjMyMmZ9XHV7MjgwNDh9XHU1ZDg1XHV7MjhjMzB9XHV7MjgwODN9XHU1NzE1XHU5ODIzXHV7Mjg5NDl9XHU1ZGFiXHV7MjQ5ODh9XHU2NWJlXHU2OWQ1XHU1M2QyXHV7MjRhYTV9XHV7MjNmODF9XHUzYzExXHU2NzM2XHV7MjgwOTB9XHV7MjgwZjR9XHV7MjgxMmV9XHV7MjFmYTF9XHV7Mjgx''@;'; put 'put ''NGZ9Il0sWyI5ZDQwIiwiXHV7MjgxODl9XHV7MjgxYWZ9XHV7MjgyMWF9XHV7MjgzMDZ9XHV7MjgzMmZ9XHV7MjgzOGF9XHUzNWNhXHV7Mjg0Njh9XHV7Mjg2YWF9XHU0OGZhXHU2M2U2XHV7Mjg5NTZ9XHU3ODA4XHU5MjU1XHV7Mjg5Yjh9XHU0M2YyXHV7Mjg5ZTd9XHU0M2RmXHV7Mjg5ZTh9''@;'; put 'put ''XHV7MjhiNDZ9XHV7MjhiZDR9XHU1OWY4XHV7MjhjMDl9XHU4ZjBiXHV7MjhmYzV9XHV7MjkwZWN9XHU3YjUxXHV7MjkxMTB9XHV7MjkxM2N9XHUzZGY3XHV7MjkxNWV9XHV7MjRhY2F9XHU4ZmQwXHU3MjhmXHU1NjhiXHV7Mjk0ZTd9XHV7Mjk1ZTl9XHV7Mjk1YjB9XHV7Mjk1Yjh9XHV7Mjk3''@;'; put 'put ''MzJ9XHV7Mjk4ZDF9XHV7Mjk5NDl9XHV7Mjk5NmF9XHV7Mjk5YzN9XHV7MjlhMjh9XHV7MjliMGV9XHV7MjlkNWF9XHV7MjlkOWJ9XHU3ZTlmXHV7MjllZjh9XHV7MjlmMjN9XHU0Y2E0XHU5NTQ3XHV7MmEyOTN9XHU3MWEyXHV7MmEyZmZ9XHU0ZDkxXHU5MDEyXHV7MmE1Y2J9XHU0ZDljXHV7''@;'; put 'put ''MjBjOWN9XHU4ZmJlXHU1NWMxIl0sWyI5ZGExIiwiXHU4ZmJhXHV7MjI0YjB9XHU4ZmI5XHV7MjRhOTN9XHU0NTA5XHU3ZTdmXHU2ZjU2XHU2YWIxXHU0ZWVhXHUzNGU0XHV7MjhiMmN9XHV7Mjc4OWR9XHUzNzNhXHU4ZTgwXHV7MjE3ZjV9XHV7MjgwMjR9XHV7MjhiNmN9XHV7MjhiOTl9XHV7''@;'; put 'put ''MjdhM2V9XHV7MjY2YWZ9XHUzZGViXHV7Mjc2NTV9XHV7MjNjYjd9XHV7MjU2MzV9XHV7MjU5NTZ9XHU0ZTlhXHV7MjVlODF9XHV7MjYyNTh9XHU1NmJmXHV7MjBlNmR9XHU4ZTBlXHU1YjZkXHV7MjNlODh9XHV7MjRjOWV9XHU2M2RlXHU2MmQwXHV7MjE3ZjZ9XHV7MjE4N2J9XHU2NTMwXHU1''@;'; put 'put ''NjJkXHV7MjVjNGF9XHU1NDFhXHV7MjUzMTF9XHUzZGM2XHV7MjlkOTh9XHU0YzdkXHU1NjIyXHU1NjFlXHU3ZjQ5XHV7MjVlZDh9XHU1OTc1XHV7MjNkNDB9XHU4NzcwXHU0ZTFjXHV7MjBmZWF9XHV7MjBkNDl9XHV7MjM2YmF9XHU4MTE3XHU5ZDVlXHU4ZDE4XHU3NjNiXHU5YzQ1XHU3NjRl''@;'; put 'put ''XHU3N2I5XHU5MzQ1XHU1NDMyXHU4MTQ4XHU4MmY3XHU1NjI1XHU4MTMyXHU4NDE4XHU4MGJkXHU1NWVhXHU3OTYyXHU1NjQzXHU1NDE2XHV7MjBlOWR9XHUzNWNlXHU1NjA1XHU1NWYxXHU2NmYxXHV7MjgyZTJ9XHUzNjJkXHU3NTM0XHU1NWYwXHU1NWJhXHU1NDk3XHU1NTcyXHV7MjBjNDF9''@;'; put 'put ''XHV7MjBjOTZ9XHU1ZWQwXHV7MjUxNDh9XHV7MjBlNzZ9XHV7MjJjNjJ9Il0sWyI5ZTQwIiwiXHV7MjBlYTJ9XHU5ZWFiXHU3ZDVhXHU1NWRlXHV7MjEwNzV9XHU2MjlkXHU5NzZkXHU1NDk0XHU4Y2NkXHU3MWY2XHU5MTc2XHU2M2ZjXHU2M2I5XHU2M2ZlXHU1NTY5XHV7MjJiNDN9XHU5Yzcy''@;'; put 'put ''XHV7MjJlYjN9XHU1MTlhXHUzNGRmXHV7MjBkYTd9XHU1MWE3XHU1NDRkXHU1NTFlXHU1NTEzXHU3NjY2XHU4ZTJkXHV7MjY4OGF9XHU3NWIxXHU4MGI2XHU4ODA0XHU4Nzg2XHU4OGM3XHU4MWI2XHU4NDFjXHV7MjEwYzF9XHU0NGVjXHU3MzA0XHV7MjQ3MDZ9XHU1YjkwXHU4MzBiXHV7MjY4''@;'; put 'put ''OTN9XHU1NjdiXHV7MjI2ZjR9XHV7MjdkMmZ9XHV7MjQxYTN9XHV7MjdkNzN9XHV7MjZlZDB9XHV7MjcyYjZ9XHU5MTcwXHV7MjExZDl9XHU5MjA4XHV7MjNjZmN9XHV7MmE2YTl9XHV7MjBlYWN9XHV7MjBlZjl9XHU3MjY2XHV7MjFjYTJ9XHU0NzRlXHV7MjRmYzJ9XHV7MjdmZjl9XHV7MjBm''@;'; put 'put ''ZWJ9XHU0MGZhIl0sWyI5ZWExIiwiXHU5YzVkXHU2NTFmXHV7MjJkYTB9XHU0OGYzXHV7MjQ3ZTB9XHV7MjlkN2N9XHV7MjBmZWN9XHV7MjBlMGF9XHU2MDYyXHV7Mjc1YTN9XHV7MjBmZWR9Il0sWyI5ZWFkIiwiXHV7MjYwNDh9XHV7MjExODd9XHU3MWEzXHU3ZThlXHU5ZDUwXHU0ZTFhXHU0''@;'; put 'put ''ZTA0XHUzNTc3XHU1YjBkXHU2Y2IyXHU1MzY3XHUzNmFjXHUzOWRjXHU1MzdkXHUzNmE1XHV7MjQ2MTh9XHU1ODlhXHV7MjRiNmV9XHU4MjJkXHU1NDRiXHU1N2FhXHV7MjVhOTV9XHV7MjA5Nzl9Il0sWyI5ZWM1IiwiXHUzYTUyXHV7MjI0NjV9XHU3Mzc0XHV7MjllYWN9XHU0ZDA5XHU5YmVk''@;'; put 'put ''XHV7MjNjZmV9XHV7MjlmMzB9XHU0YzViXHV7MjRmYTl9XHV7Mjk1OWV9XHV7MjlmZGV9XHU4NDVjXHV7MjNkYjZ9XHV7MjcyYjJ9XHV7MjY3YjN9XHV7MjM3MjB9XHU2MzJlXHU3ZDI1XHV7MjNlZjd9XHV7MjNlMmN9XHUzYTJhXHU5MDA4XHU1MmNjXHUzZTc0XHUzNjdhXHU0NWU5XHV7MjA0''@;'; put 'put ''OGV9XHU3NjQwXHU1YWYwXHV7MjBlYjZ9XHU3ODdhXHV7MjdmMmV9XHU1OGE3XHU0MGJmXHU1NjdjXHU5YjhiXHU1ZDc0XHU3NjU0XHV7MmE0MzR9XHU5ZTg1XHU0Y2UxXHU3NWY5XHUzN2ZiXHU2MTE5XHV7MjMwZGF9XHV7MjQzZjJ9Il0sWyI5ZWY1IiwiXHU1NjVkXHV7MjEyYTl9XHU1N2E3''@;'; put 'put ''XHV7MjQ5NjN9XHV7MjllMDZ9XHU1MjM0XHV7MjcwYWV9XHUzNWFkXHU2YzRhXHU5ZDdjIl0sWyI5ZjQwIiwiXHU3YzU2XHU5YjM5XHU1N2RlXHV7MjE3NmN9XHU1YzUzXHU2NGQzXHV7Mjk0ZDB9XHV7MjYzMzV9XHV7MjcxNjR9XHU4NmFkXHV7MjBkMjh9XHV7MjZkMjJ9XHV7MjRhZTJ9XHV7''@;'; put 'put ''MjBkNzF9Il0sWyI5ZjRmIiwiXHU1MWZlXHV7MjFmMGZ9XHU1ZDhlXHU5NzAzXHV7MjFkZDF9XHU5ZTgxXHU5MDRjXHU3YjFmXHU5YjAyXHU1Y2QxXHU3YmEzXHU2MjY4XHU2MzM1XHU5YWZmXHU3YmNmXHU5YjJhXHU3YzdlXHU5YjJlXHU3YzQyXHU3Yzg2XHU5YzE1XHU3YmZjXHU5YjA5XHU5''@;'; put 'put ''ZjE3XHU5YzFiXHV7MjQ5M2V9XHU5ZjVhXHU1NTczXHU1YmMzXHU0ZmZkXHU5ZTk4XHU0ZmYyXHU1MjYwXHUzZTA2XHU1MmQxXHU1NzY3XHU1MDU2XHU1OWI3XHU1ZTEyXHU5N2M4XHU5ZGFiXHU4ZjVjXHU1NDY5XHU5N2I0XHU5OTQwXHU5N2JhXHU1MzJjXHU2MTMwIl0sWyI5ZmExIiwiXHU2''@;'; put 'put ''OTJjXHU1M2RhXHU5YzBhXHU5ZDAyXHU0YzNiXHU5NjQxXHU2OTgwXHU1MGE2XHU3NTQ2XHV7MjE3NmR9XHU5OWRhXHU1MjczIl0sWyI5ZmFlIiwiXHU5MTU5XHU5NjgxXHU5MTVjIl0sWyI5ZmIyIiwiXHU5MTUxXHV7MjhlOTd9XHU2MzdmXHV7MjZkMjN9XHU2YWNhXHU1NjExXHU5MThlXHU3''@;'; put 'put ''NTdhXHU2Mjg1XHV7MjAzZmN9XHU3MzRmXHU3YzcwXHV7MjVjMjF9XHV7MjNjZmR9Il0sWyI5ZmMxIiwiXHV7MjQ5MTl9XHU3NmQ2XHU5YjlkXHU0ZTJhXHV7MjBjZDR9XHU4M2JlXHU4ODQyIl0sWyI5ZmM5IiwiXHU1YzRhXHU2OWMwXHU1MGVkXHU1NzdhXHU1MjFmXHU1ZGY1XHU0ZWNlXHU2''@;'; put 'put ''YzMxXHV7MjAxZjJ9XHU0ZjM5XHU1NDljXHU1NGRhXHU1MjlhXHU4ZDgyXHUzNWZlXHU1ZjBjXHUzNWYzIl0sWyI5ZmRiIiwiXHU2YjUyXHU5MTdjXHU5ZmE1XHU5Yjk3XHU5ODJlXHU5OGI0XHU5YWJhXHU5ZWE4XHU5ZTg0XHU3MTdhXHU3YjE0Il0sWyI5ZmU3IiwiXHU2YmZhXHU4ODE4XHU3''@;'; put 'put ''Zjc4Il0sWyI5ZmViIiwiXHU1NjIwXHV7MmE2NGF9XHU4ZTc3XHU5ZjUzIl0sWyI5ZmYwIiwiXHU4ZGQ0XHU4ZTRmXHU5ZTFjXHU4ZTAxXHU2MjgyXHV7MjgzN2R9XHU4ZTI4XHU4ZTc1XHU3YWQzXHV7MjRhNzd9XHU3YTNlXHU3OGQ4XHU2Y2VhXHU4YTY3XHU3NjA3Il0sWyJhMDQwIiwiXHV7''@;'; put 'put ''MjhhNWF9XHU5ZjI2XHU2Y2NlXHU4N2Q2XHU3NWMzXHV7MmEyYjJ9XHU3ODUzXHV7MmY4NDB9XHU4ZDBjXHU3MmUyXHU3MzcxXHU4YjJkXHU3MzAyXHU3NGYxXHU4Y2ViXHV7MjRhYmJ9XHU4NjJmXHU1ZmJhXHU4OGEwXHU0NGI3Il0sWyJhMDU1IiwiXHV7MjE4M2J9XHV7MjZlMDV9Il0sWyJh''@;'; put 'put ''MDU4IiwiXHU4YTdlXHV7MjI1MWJ9Il0sWyJhMDViIiwiXHU2MGZkXHU3NjY3XHU5YWQ3XHU5ZDQ0XHU5MzZlXHU5YjhmXHU4N2Y1Il0sWyJhMDYzIiwiXHU4ODBmXHU4Y2Y3XHU3MzJjXHU5NzIxXHU5YmIwXHUzNWQ2XHU3MmIyXHU0YzA3XHU3YzUxXHU5OTRhXHV7MjYxNTl9XHU2MTU5XHU0''@;'; put 'put ''YzA0XHU5ZTk2XHU2MTdkIl0sWyJhMDczIiwiXHU1NzVmXHU2MTZmXHU2MmE2XHU2MjM5XHU2MmNlXHUzYTVjXHU2MWUyXHU1M2FhXHV7MjMzZjV9XHU2MzY0XHU2ODAyXHUzNWQyIl0sWyJhMGExIiwiXHU1ZDU3XHV7MjhiYzJ9XHU4ZmRhXHV7MjhlMzl9Il0sWyJhMGE2IiwiXHU1MGQ5XHV7''@;'; put 'put ''MjFkNDZ9XHU3OTA2XHU1MzMyXHU5NjM4XHV7MjBmM2J9XHU0MDY1Il0sWyJhMGFlIiwiXHU3N2ZlIl0sWyJhMGIwIiwiXHU3Y2MyXHV7MjVmMWF9XHU3Y2RhXHU3YTJkXHU4MDY2XHU4MDYzXHU3ZDRkXHU3NTA1XHU3NGYyXHU4OTk0XHU4MjFhXHU2NzBjXHU4MDYyXHV7Mjc0ODZ9XHU4MDVi''@;'; put 'put ''XHU3NGYwXHU4MTAzXHU3NzI0XHU4OTg5XHV7MjY3Y2N9XHU3NTUzXHV7MjZlZDF9XHU4N2E5XHU4N2NlXHU4MWM4XHU4NzhjXHU4YTQ5XHU4Y2FkXHU4YjQzXHU3NzJiXHU3NGY4XHU4NGRhXHUzNjM1XHU2OWIyXHU4ZGE2Il0sWyJhMGQ0IiwiXHU4OWE5XHU3NDY4XHU2ZGI5XHU4N2MxXHV7''@;'; put 'put ''MjQwMTF9XHU3NGU3XHUzZGRiXHU3MTc2XHU2MGE0XHU2MTljXHUzY2QxXHU3MTYyXHU2MDc3Il0sWyJhMGUyIiwiXHU3ZjcxXHV7MjhiMmR9XHU3MjUwXHU2MGU5XHU0YjdlXHU1MjIwXHUzYzE4XHV7MjNjYzd9XHV7MjVlZDd9XHV7Mjc2NTZ9XHV7MjU1MzF9XHV7MjE5NDR9XHV7MjEyZmV9''@;'; put 'put ''XHV7Mjk5MDN9XHV7MjZkZGN9XHV7MjcwYWR9XHU1Y2MxXHV7MjYxYWR9XHV7MjhhMGZ9XHV7MjM2Nzd9XHV7MjAwZWV9XHV7MjY4NDZ9XHV7MjRmMGV9XHU0NTYyXHU1YjFmXHV7MjYzNGN9XHU5ZjUwXHU5ZWE2XHV7MjYyNmJ9Il0sWyJhM2MwIiwiXHUyNDAwIiwzMSwiXHUyNDIxIl0sWyJj''@;'; put 'put ''NmExIiwiXHUyNDYwIiw5LCJcdTI0NzQiLDksIlx1MjE3MCIsOSwiXHU0ZTM2XHU0ZTNmXHU0ZTg1XHU0ZWEwXHU1MTgyXHU1MTk2XHU1MWFiXHU1MmY5XHU1MzM4XHU1MzY5XHU1M2I2XHU1OTBhXHU1YjgwXHU1ZGRiXHUyZjMzXHU1ZTdmXHU1ZWY0XHU1ZjUwXHU1ZjYxXHU2NTM0XHU2NWUw''@;'; put 'put ''XHU3NTkyXHU3Njc2XHU4ZmI1XHU5NmI2XHhhOFx1MDJjNlx1MzBmZFx1MzBmZVx1MzA5ZFx1MzA5ZVx1MzAwM1x1NGVkZFx1MzAwNVx1MzAwNlx1MzAwN1x1MzBmY1x1ZmYzYlx1ZmYzZFx1MjczZFx1MzA0MSIsMjNdLFsiYzc0MCIsIlx1MzA1OSIsNTgsIlx1MzBhMVx1MzBhMlx1MzBhM1x1''@;'; put 'put ''MzBhNCJdLFsiYzdhMSIsIlx1MzBhNSIsODEsIlx1MDQxMCIsNSwiXHUwNDAxXHUwNDE2Iiw0XSxbImM4NDAiLCJcdTA0MWIiLDI2LCJcdTA0NTFcdTA0MzYiLDI1LCJcdTIxZTdcdTIxYjhcdTIxYjlcdTMxY2ZcdXsyMDBjY31cdTRlNWFcdXsyMDA4YX1cdTUyMDJcdTQ0OTEiXSxbImM4YTEi''@;'; put 'put ''LCJcdTlmYjBcdTUxODhcdTlmYjFcdXsyNzYwN30iXSxbImM4Y2QiLCJcdWZmZTJcdWZmZTRcdWZmMDdcdWZmMDJcdTMyMzFcdTIxMTZcdTIxMjFcdTMwOWJcdTMwOWNcdTJlODBcdTJlODRcdTJlODZcdTJlODdcdTJlODhcdTJlOGFcdTJlOGNcdTJlOGRcdTJlOTVcdTJlOWNcdTJlOWRcdTJl''@;'; put 'put ''YTVcdTJlYTdcdTJlYWFcdTJlYWNcdTJlYWVcdTJlYjZcdTJlYmNcdTJlYmVcdTJlYzZcdTJlY2FcdTJlY2NcdTJlY2RcdTJlY2ZcdTJlZDZcdTJlZDdcdTJlZGVcdTJlZTMiXSxbImM4ZjUiLCJcdTAyODNcdTAyNTBcdTAyNWJcdTAyNTRcdTAyNzVcdTAxNTNceGY4XHUwMTRiXHUwMjhhXHUw''@;'; put 'put ''MjZhIl0sWyJmOWZlIiwiXHVmZmVkIl0sWyJmYTQwIiwiXHV7MjA1NDd9XHU5MmRiXHV7MjA1ZGZ9XHV7MjNmYzV9XHU4NTRjXHU0MmI1XHU3M2VmXHU1MWI1XHUzNjQ5XHV7MjQ5NDJ9XHV7Mjg5ZTR9XHU5MzQ0XHV7MjE5ZGJ9XHU4MmVlXHV7MjNjYzh9XHU3ODNjXHU2NzQ0XHU2MmRmXHV7''@;'; put 'put ''MjQ5MzN9XHV7Mjg5YWF9XHV7MjAyYTB9XHV7MjZiYjN9XHV7MjEzMDV9XHU0ZmFiXHV7MjI0ZWR9XHU1MDA4XHV7MjZkMjl9XHV7MjdhODR9XHV7MjM2MDB9XHV7MjRhYjF9XHV7MjI1MTN9XHU1MDI5XHV7MjAzN2V9XHU1ZmE0XHV7MjAzODB9XHV7MjAzNDd9XHU2ZWRiXHV7MjA0MWZ9XHU1''@;'; put 'put ''MDdkXHU1MTAxXHUzNDdhXHU1MTBlXHU5ODZjXHUzNzQzXHU4NDE2XHV7MjQ5YTR9XHV7MjA0ODd9XHU1MTYwXHV7MjMzYjR9XHU1MTZhXHV7MjBiZmZ9XHV7MjIwZmN9XHV7MjAyZTV9XHV7MjI1MzB9XHV7MjA1OGV9XHV7MjMyMzN9XHV7MjE5ODN9XHU1YjgyXHU4NzdkXHV7MjA1YjN9XHV7''@;'; put 'put ''MjNjOTl9XHU1MWIyXHU1MWI4Il0sWyJmYWExIiwiXHU5ZDM0XHU1MWM5XHU1MWNmXHU1MWQxXHUzY2RjXHU1MWQzXHV7MjRhYTZ9XHU1MWIzXHU1MWUyXHU1MzQyXHU1MWVkXHU4M2NkXHU2OTNlXHV7MjM3MmR9XHU1ZjdiXHU1MjBiXHU1MjI2XHU1MjNjXHU1MmI1XHU1MjU3XHU1Mjk0XHU1''@;'; put 'put ''MmI5XHU1MmM1XHU3YzE1XHU4NTQyXHU1MmUwXHU4NjBkXHV7MjZiMTN9XHU1MzA1XHV7MjhhZGV9XHU1NTQ5XHU2ZWQ5XHV7MjNmODB9XHV7MjA5NTR9XHV7MjNmZWN9XHU1MzMzXHU1MzQ0XHV7MjBiZTJ9XHU2Y2NiXHV7MjE3MjZ9XHU2ODFiXHU3M2Q1XHU2MDRhXHUzZWFhXHUzOGNjXHV7''@;'; put 'put ''MjE2ZTh9XHU3MWRkXHU0NGEyXHU1MzZkXHU1Mzc0XHV7Mjg2YWJ9XHU1MzdlXHU1MzdmXHV7MjE1OTZ9XHV7MjE2MTN9XHU3N2U2XHU1MzkzXHV7MjhhOWJ9XHU1M2EwXHU1M2FiXHU1M2FlXHU3M2E3XHV7MjU3NzJ9XHUzZjU5XHU3MzljXHU1M2MxXHU1M2M1XHU2YzQ5XHU0ZTQ5XHU1N2Zl''@;'; put 'put ''XHU1M2Q5XHUzYWFiXHV7MjBiOGZ9XHU1M2UwXHV7MjNmZWJ9XHV7MjJkYTN9XHU1M2Y2XHV7MjBjNzd9XHU1NDEzXHU3MDc5XHU1NTJiXHU2NjU3XHU2ZDViXHU1NDZkXHV7MjZiNTN9XHV7MjBkNzR9XHU1NTVkXHU1NDhmXHU1NGE0XHU0N2E2XHV7MjE3MGR9XHV7MjBlZGR9XHUzZGI0XHV7''@;'; put 'put ''MjBkNGR9Il0sWyJmYjQwIiwiXHV7Mjg5YmN9XHV7MjI2OTh9XHU1NTQ3XHU0Y2VkXHU1NDJmXHU3NDE3XHU1NTg2XHU1NWE5XHU1NjA1XHV7MjE4ZDd9XHV7MjQwM2F9XHU0NTUyXHV7MjQ0MzV9XHU2NmIzXHV7MjEwYjR9XHU1NjM3XHU2NmNkXHV7MjMyOGF9XHU2NmE0XHU2NmFkXHU1NjRk''@;'; put 'put ''XHU1NjRmXHU3OGYxXHU1NmYxXHU5Nzg3XHU1M2ZlXHU1NzAwXHU1NmVmXHU1NmVkXHV7MjhiNjZ9XHUzNjIzXHV7MjEyNGZ9XHU1NzQ2XHV7MjQxYTV9XHU2YzZlXHU3MDhiXHU1NzQyXHUzNmIxXHV7MjZjN2V9XHU1N2U2XHV7MjE0MTZ9XHU1ODAzXHV7MjE0NTR9XHV7MjQzNjN9XHU1ODI2''@;'; put 'put ''XHV7MjRiZjV9XHU1ODVjXHU1OGFhXHUzNTYxXHU1OGUwXHU1OGRjXHV7MjEyM2N9XHU1OGZiXHU1YmZmXHU1NzQzXHV7MmExNTB9XHV7MjQyNzh9XHU5M2QzXHUzNWExXHU1OTFmXHU2OGE2XHUzNmMzXHU2ZTU5Il0sWyJmYmExIiwiXHV7MjE2M2V9XHU1YTI0XHU1NTUzXHV7MjE2OTJ9XHU4''@;'; put 'put ''NTA1XHU1OWM5XHV7MjBkNGV9XHV7MjZjODF9XHV7MjZkMmF9XHV7MjE3ZGN9XHU1OWQ5XHV7MjE3ZmJ9XHV7MjE3YjJ9XHV7MjZkYTZ9XHU2ZDcxXHV7MjE4Mjh9XHV7MjE2ZDV9XHU1OWY5XHV7MjZlNDV9XHU1YWFiXHU1YTYzXHUzNmU2XHV7MjQ5YTl9XHU1YTc3XHUzNzA4XHU1YTk2XHU3''@;'; put 'put ''NDY1XHU1YWQzXHV7MjZmYTF9XHV7MjI1NTR9XHUzZDg1XHV7MjE5MTF9XHUzNzMyXHV7MjE2Yjh9XHU1ZTgzXHU1MmQwXHU1Yjc2XHU2NTg4XHU1YjdjXHV7MjdhMGV9XHU0MDA0XHU0ODVkXHV7MjAyMDR9XHU1YmQ1XHU2MTYwXHV7MjFhMzR9XHV7MjU5Y2N9XHV7MjA1YTV9XHU1YmYzXHU1''@;'; put 'put ''YjlkXHU0ZDEwXHU1YzA1XHV7MjFiNDR9XHU1YzEzXHU3M2NlXHU1YzE0XHV7MjFjYTV9XHV7MjZiMjh9XHU1YzQ5XHU0OGRkXHU1Yzg1XHU1Y2U5XHU1Y2VmXHU1ZDhiXHV7MjFkZjl9XHV7MjFlMzd9XHU1ZDEwXHU1ZDE4XHU1ZDQ2XHV7MjFlYTR9XHU1Y2JhXHU1ZGQ3XHU4MmZjXHUzODJk''@;'; put 'put ''XHV7MjQ5MDF9XHV7MjIwNDl9XHV7MjIxNzN9XHU4Mjg3XHUzODM2XHUzYmMyXHU1ZTJlXHU2YThhXHU1ZTc1XHU1ZTdhXHV7MjQ0YmN9XHV7MjBjZDN9XHU1M2E2XHU0ZWI3XHU1ZWQwXHU1M2E4XHV7MjE3NzF9XHU1ZTA5XHU1ZWY0XHV7Mjg0ODJ9Il0sWyJmYzQwIiwiXHU1ZWY5XHU1ZWZi''@;'; put 'put ''XHUzOGEwXHU1ZWZjXHU2ODNlXHU5NDFiXHU1ZjBkXHV7MjAxYzF9XHV7MmY4OTR9XHUzYWRlXHU0OGFlXHV7MjEzM2F9XHU1ZjNhXHV7MjY4ODh9XHV7MjIzZDB9XHU1ZjU4XHV7MjI0NzF9XHU1ZjYzXHU5N2JkXHV7MjZlNmV9XHU1ZjcyXHU5MzQwXHV7MjhhMzZ9XHU1ZmE3XHU1ZGI2XHUz''@;'; put 'put ''ZDVmXHV7MjUyNTB9XHV7MjFmNmF9XHV7MjcwZjh9XHV7MjI2Njh9XHU5MWQ2XHV7MjAyOWV9XHV7MjhhMjl9XHU2MDMxXHU2Njg1XHV7MjE4Nzd9XHUzOTYzXHUzZGM3XHUzNjM5XHU1NzkwXHV7MjI3YjR9XHU3OTcxXHUzZTQwXHU2MDllXHU2MGE0XHU2MGIzXHV7MjQ5ODJ9XHV7MjQ5OGZ9''@;'; put 'put ''XHV7MjdhNTN9XHU3NGE0XHU1MGUxXHU1YWEwXHU2MTY0XHU4NDI0XHU2MTQyXHV7MmY4YTZ9XHV7MjZlZDJ9XHU2MTgxXHU1MWY0XHV7MjA2NTZ9XHU2MTg3XHU1YmFhXHV7MjNmYjd9Il0sWyJmY2ExIiwiXHV7MjI4NWZ9XHU2MWQzXHV7MjhiOWR9XHV7Mjk5NWR9XHU2MWQwXHUzOTMyXHV7''@;'; put 'put ''MjI5ODB9XHV7MjI4YzF9XHU2MDIzXHU2MTVjXHU2NTFlXHU2MzhiXHV7MjAxMTh9XHU2MmM1XHV7MjE3NzB9XHU2MmQ1XHV7MjJlMGR9XHU2MzZjXHV7MjQ5ZGZ9XHUzYTE3XHU2NDM4XHU2M2Y4XHV7MjEzOGV9XHV7MjE3ZmN9XHU2NDkwXHU2ZjhhXHV7MjJlMzZ9XHU5ODE0XHV7MjQwOGN9''@;'; put 'put ''XHV7MjU3MWR9XHU2NGUxXHU2NGU1XHU5NDdiXHUzYTY2XHU2NDNhXHUzYTU3XHU2NTRkXHU2ZjE2XHV7MjRhMjh9XHV7MjRhMjN9XHU2NTg1XHU2NTZkXHU2NTVmXHV7MjMwN2V9XHU2NWI1XHV7MjQ5NDB9XHU0YjM3XHU2NWQxXHU0MGQ4XHV7MjE4Mjl9XHU2NWUwXHU2NWUzXHU1ZmRmXHV7''@;'; put 'put ''MjM0MDB9XHU2NjE4XHV7MjMxZjd9XHV7MjMxZjh9XHU2NjQ0XHV7MjMxYTR9XHV7MjMxYTV9XHU2NjRiXHV7MjBlNzV9XHU2NjY3XHV7MjUxZTZ9XHU2NjczXHU2Njc0XHV7MjFlM2R9XHV7MjMyMzF9XHV7Mjg1ZjR9XHV7MjMxYzh9XHV7MjUzMTN9XHU3N2M1XHV7MjI4Zjd9XHU5OWE0XHU2''@;'; put 'put ''NzAyXHV7MjQzOWN9XHV7MjRhMjF9XHUzYjJiXHU2OWZhXHV7MjM3YzJ9XHU2NzVlXHU2NzY3XHU2NzYyXHV7MjQxY2R9XHV7MjkwZWR9XHU2N2Q3XHU0NGU5XHU2ODIyXHU2ZTUwXHU5MjNjXHU2ODAxXHV7MjMzZTZ9XHV7MjZkYTB9XHU2ODVkIl0sWyJmZDQwIiwiXHV7MjM0NmZ9XHU2OWUx''@;'; put 'put ''XHU2YTBiXHV7MjhhZGZ9XHU2OTczXHU2OGMzXHV7MjM1Y2R9XHU2OTAxXHU2OTAwXHUzZDMyXHUzYTAxXHV7MjM2M2N9XHUzYjgwXHU2N2FjXHU2OTYxXHV7MjhhNGF9XHU0MmZjXHU2OTM2XHU2OTk4XHUzYmExXHV7MjAzYzl9XHU4MzYzXHU1MDkwXHU2OWY5XHV7MjM2NTl9XHV7MjIxMmF9''@;'; put 'put ''XHU2YTQ1XHV7MjM3MDN9XHU2YTlkXHUzYmYzXHU2N2IxXHU2YWM4XHV7MjkxOWN9XHUzYzBkXHU2YjFkXHV7MjA5MjN9XHU2MGRlXHU2YjM1XHU2Yjc0XHV7MjI3Y2R9XHU2ZWI1XHV7MjNhZGJ9XHV7MjAzYjV9XHV7MjE5NTh9XHUzNzQwXHU1NDIxXHV7MjNiNWF9XHU2YmUxXHV7MjNlZmN9''@;'; put 'put ''XHU2YmRjXHU2YzM3XHV7MjI0OGJ9XHV7MjQ4ZjF9XHV7MjZiNTF9XHU2YzVhXHU4MjI2XHU2Yzc5XHV7MjNkYmN9XHU0NGM1XHV7MjNkYmR9XHV7MjQxYTR9XHV7MjQ5MGN9XHV7MjQ5MDB9Il0sWyJmZGExIiwiXHV7MjNjYzl9XHUzNmU1XHUzY2ViXHV7MjBkMzJ9XHU5YjgzXHV7MjMxZjl9''@;'; put 'put ''XHV7MjI0OTF9XHU3ZjhmXHU2ODM3XHV7MjZkMjV9XHV7MjZkYTF9XHV7MjZkZWJ9XHU2ZDk2XHU2ZDVjXHU2ZTdjXHU2ZjA0XHV7MjQ5N2Z9XHV7MjQwODV9XHV7MjZlNzJ9XHU4NTMzXHV7MjZmNzR9XHU1MWM3XHU2YzljXHU2ZTFkXHU4NDJlXHV7MjhiMjF9XHU2ZTJmXHV7MjNlMmZ9XHU3''@;'; put 'put ''NDUzXHV7MjNmODJ9XHU3OWNjXHU2ZTRmXHU1YTkxXHV7MjMwNGJ9XHU2ZmY4XHUzNzBkXHU2ZjlkXHV7MjNlMzB9XHU2ZWZhXHV7MjE0OTd9XHV7MjQwM2R9XHU0NTU1XHU5M2YwXHU2ZjQ0XHU2ZjVjXHUzZDRlXHU2Zjc0XHV7MjkxNzB9XHUzZDNiXHU2ZjlmXHV7MjQxNDR9XHU2ZmQzXHV7''@;'; put 'put ''MjQwOTF9XHV7MjQxNTV9XHV7MjQwMzl9XHV7MjNmZjB9XHV7MjNmYjR9XHV7MjQxM2Z9XHU1MWRmXHV7MjQxNTZ9XHV7MjQxNTd9XHV7MjQxNDB9XHV7MjYxZGR9XHU3MDRiXHU3MDdlXHU3MGE3XHU3MDgxXHU3MGNjXHU3MGQ1XHU3MGQ2XHU3MGRmXHU0MTA0XHUzZGU4XHU3MWI0XHU3MTk2''@;'; put 'put ''XHV7MjQyNzd9XHU3MTJiXHU3MTQ1XHU1YTg4XHU3MTRhXHU3MTZlXHU1YzljXHV7MjQzNjV9XHU3MTRmXHU5MzYyXHV7MjQyYzF9XHU3MTJjXHV7MjQ0NWF9XHV7MjRhMjd9XHV7MjRhMjJ9XHU3MWJhXHV7MjhiZTh9XHU3MGJkXHU3MjBlIl0sWyJmZTQwIiwiXHU5NDQyXHU3MjE1XHU1OTEx''@;'; put 'put ''XHU5NDQzXHU3MjI0XHU5MzQxXHV7MjU2MDV9XHU3MjJlXHU3MjQwXHV7MjQ5NzR9XHU2OGJkXHU3MjU1XHU3MjU3XHUzZTU1XHV7MjMwNDR9XHU2ODBkXHU2ZjNkXHU3MjgyXHU3MzJhXHU3MzJiXHV7MjQ4MjN9XHV7Mjg4MmJ9XHU0OGVkXHV7Mjg4MDR9XHU3MzI4XHU3MzJlXHU3M2NmXHU3''@;'; put 'put ''M2FhXHV7MjBjM2F9XHV7MjZhMmV9XHU3M2M5XHU3NDQ5XHV7MjQxZTJ9XHV7MjE2ZTd9XHV7MjRhMjR9XHU2NjIzXHUzNmM1XHV7MjQ5Yjd9XHV7MjQ5OGR9XHV7MjQ5ZmJ9XHU3M2Y3XHU3NDE1XHU2OTAzXHV7MjRhMjZ9XHU3NDM5XHV7MjA1YzN9XHUzZWQ3XHU3NDVjXHV7MjI4YWR9XHU3''@;'; put 'put ''NDYwXHV7MjhlYjJ9XHU3NDQ3XHU3M2U0XHU3NDc2XHU4M2I5XHU3NDZjXHUzNzMwXHU3NDc0XHU5M2YxXHU2YTJjXHU3NDgyXHU0OTUzXHV7MjRhOGN9Il0sWyJmZWExIiwiXHV7MjQxNWZ9XHV7MjRhNzl9XHV7MjhiOGZ9XHU1YjQ2XHV7MjhjMDN9XHV7MjE4OWV9XHU3NGM4XHV7MjE5ODh9''@;'; put 'put ''XHU3NTBlXHU3NGU5XHU3NTFlXHV7MjhlZDl9XHV7MjFhNGJ9XHU1YmQ3XHV7MjhlYWN9XHU5Mzg1XHU3NTRkXHU3NTRhXHU3NTY3XHU3NTZlXHV7MjRmODJ9XHUzZjA0XHV7MjRkMTN9XHU3NThlXHU3NDVkXHU3NTllXHU3NWI0XHU3NjAyXHU3NjJjXHU3NjUxXHU3NjRmXHU3NjZmXHU3Njc2''@;'; put 'put ''XHV7MjYzZjV9XHU3NjkwXHU4MWVmXHUzN2Y4XHV7MjY5MTF9XHV7MjY5MGV9XHU3NmExXHU3NmE1XHU3NmI3XHU3NmNjXHV7MjZmOWZ9XHU4NDYyXHV7MjUwOWR9XHV7MjUxN2R9XHV7MjFlMWN9XHU3NzFlXHU3NzI2XHU3NzQwXHU2NGFmXHV7MjUyMjB9XHU3NzU4XHV7MjMyYWN9XHU3N2Fm''@;'; put 'put ''XHV7Mjg5NjR9XHV7Mjg5Njh9XHV7MjE2YzF9XHU3N2Y0XHU3ODA5XHV7MjEzNzZ9XHV7MjRhMTJ9XHU2OGNhXHU3OGFmXHU3OGM3XHU3OGQzXHU5NmE1XHU3OTJlXHV7MjU1ZTB9XHU3OGQ3XHU3OTM0XHU3OGIxXHV7Mjc2MGN9XHU4ZmI4XHU4ODg0XHV7MjhiMmJ9XHV7MjYwODN9XHV7MjI2''@;'; put 'put ''MWN9XHU3OTg2XHU4OTAwXHU2OTAyXHU3OTgwXHV7MjU4NTd9XHU3OTlkXHV7MjdiMzl9XHU3OTNjXHU3OWE5XHU2ZTJhXHV7MjcxMjZ9XHUzZWE4XHU3OWM2XHV7MjkxMGR9XHU3OWQ0Il1dJyl9LDQzMjg3OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2IoOTYxODApfSw0MzM4ODooY2UsWCxi''@;'; put 'put ''KT0+e3ZhciBJPWIoMzUwKSxfPWIoNjAxMDIpLHA9YigzMjE5KTtYLmNyZWF0ZUNpcGhlcj1YLkNpcGhlcj1JLmNyZWF0ZUNpcGhlcixYLmNyZWF0ZUNpcGhlcml2PVguQ2lwaGVyaXY9SS5jcmVhdGVDaXBoZXJpdixYLmNyZWF0ZURlY2lwaGVyPVguRGVjaXBoZXI9Xy5jcmVhdGVEZWNpcGhl''@;'; put 'put ''cixYLmNyZWF0ZURlY2lwaGVyaXY9WC5EZWNpcGhlcml2PV8uY3JlYXRlRGVjaXBoZXJpdixYLmxpc3RDaXBoZXJzPVguZ2V0Q2lwaGVycz1mdW5jdGlvbiBWKCl7cmV0dXJuIE9iamVjdC5rZXlzKHApfX0sNDM0MDY6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigzMjYzMyk7Y2Uu''@;'; put 'put ''ZXhwb3J0cz1mdW5jdGlvbihfKXtyZXR1cm4gSShfKXx8bnVsbD09PV99fSw0MzQxMDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPVI7dmFyIEk9YigzMDQ2NCkuRixfPUkuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQscD1JLkVSUl9NVUxUSVBMRV9DQUxMQkFDSyxWPUku''@;'; put 'put ''RVJSX1RSQU5TRk9STV9BTFJFQURZX1RSQU5TRk9STUlORyx3PUkuRVJSX1RSQU5TRk9STV9XSVRIX0xFTkdUSF8wLFA9YigxMDMwKTtmdW5jdGlvbiBGKE8sSyl7dmFyIFo9dGhpcy5fdHJhbnNmb3JtU3RhdGU7Wi50cmFuc2Zvcm1pbmc9ITE7dmFyIFk9Wi53cml0ZWNiO2lmKG51bGw9PT1Z''@;'; put 'put ''KXJldHVybiB0aGlzLmVtaXQoImVycm9yIixuZXcgcCk7Wi53cml0ZWNodW5rPW51bGwsWi53cml0ZWNiPW51bGwsbnVsbCE9SyYmdGhpcy5wdXNoKEspLFkoTyk7dmFyIFc9dGhpcy5fcmVhZGFibGVTdGF0ZTtXLnJlYWRpbmc9ITEsKFcubmVlZFJlYWRhYmxlfHxXLmxlbmd0aDxXLmhpZ2hX''@;'; put 'put ''YXRlck1hcmspJiZ0aGlzLl9yZWFkKFcuaGlnaFdhdGVyTWFyayl9ZnVuY3Rpb24gUihPKXtpZighKHRoaXMgaW5zdGFuY2VvZiBSKSlyZXR1cm4gbmV3IFIoTyk7UC5jYWxsKHRoaXMsTyksdGhpcy5fdHJhbnNmb3JtU3RhdGU9e2FmdGVyVHJhbnNmb3JtOkYuYmluZCh0aGlzKSxuZWVkVHJh''@;'; put 'put ''bnNmb3JtOiExLHRyYW5zZm9ybWluZzohMSx3cml0ZWNiOm51bGwsd3JpdGVjaHVuazpudWxsLHdyaXRlZW5jb2Rpbmc6bnVsbH0sdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGU9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLE8mJigiZnVuY3Rpb24iPT10eXBlb2YgTy50''@;'; put 'put ''cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09Ty50cmFuc2Zvcm0pLCJmdW5jdGlvbiI9PXR5cGVvZiBPLmZsdXNoJiYodGhpcy5fZmx1c2g9Ty5mbHVzaCkpLHRoaXMub24oInByZWZpbmlzaCIseil9ZnVuY3Rpb24geigpe3ZhciBPPXRoaXM7ImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXMuX2Zs''@;'; put 'put ''dXNofHx0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD9OKHRoaXMsbnVsbCxudWxsKTp0aGlzLl9mbHVzaChmdW5jdGlvbihLLFope04oTyxLLFopfSl9ZnVuY3Rpb24gTihPLEssWil7aWYoSylyZXR1cm4gTy5lbWl0KCJlcnJvciIsSyk7aWYobnVsbCE9WiYmTy5wdXNoKFopLE8uX3dy''@;'; put 'put ''aXRhYmxlU3RhdGUubGVuZ3RoKXRocm93IG5ldyB3O2lmKE8uX3RyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybWluZyl0aHJvdyBuZXcgVjtyZXR1cm4gTy5wdXNoKG51bGwpfWIoNzE5OTMpKFIsUCksUi5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihPLEspe3JldHVybiB0aGlzLl90cmFuc2Zvcm1T''@;'; put 'put ''dGF0ZS5uZWVkVHJhbnNmb3JtPSExLFAucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLE8sSyl9LFIucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oTyxLLFope1oobmV3IF8oIl90cmFuc2Zvcm0oKSIpKX0sUi5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKE8sSyxaKXt2YXIgWT10aGlz''@;'; put 'put ''Ll90cmFuc2Zvcm1TdGF0ZTtpZihZLndyaXRlY2I9WixZLndyaXRlY2h1bms9TyxZLndyaXRlZW5jb2Rpbmc9SywhWS50cmFuc2Zvcm1pbmcpe3ZhciBXPXRoaXMuX3JlYWRhYmxlU3RhdGU7KFkubmVlZFRyYW5zZm9ybXx8Vy5uZWVkUmVhZGFibGV8fFcubGVuZ3RoPFcuaGlnaFdhdGVyTWFy''@;'; put 'put ''aykmJnRoaXMuX3JlYWQoVy5oaWdoV2F0ZXJNYXJrKX19LFIucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKE8pe3ZhciBLPXRoaXMuX3RyYW5zZm9ybVN0YXRlO251bGw9PT1LLndyaXRlY2h1bmt8fEsudHJhbnNmb3JtaW5nP0submVlZFRyYW5zZm9ybT0hMDooSy50cmFuc2Zvcm1pbmc9ITAs''@;'; put 'put ''dGhpcy5fdHJhbnNmb3JtKEsud3JpdGVjaHVuayxLLndyaXRlZW5jb2RpbmcsSy5hZnRlclRyYW5zZm9ybSkpfSxSLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihPLEspe1AucHJvdG90eXBlLl9kZXN0cm95LmNhbGwodGhpcyxPLGZ1bmN0aW9uKFope0soWil9KX19LDQzNDM4OmZ1bmN0''@;'; put 'put ''aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwOWU3IiwyOiJcdTA5ZTgiLDM6Ilx1MDllOSIsNDoiXHUwOWVhIiw1OiJcdTA5ZWIiLDY6Ilx1MDllYyIsNzoiXHUwOWVkIiw4OiJcdTA5ZWUiLDk6Ilx1MDllZiIsMDoiXHUwOWU2In0scD17Ilx1MDll''@;'; put 'put ''NyI6IjEiLCJcdTA5ZTgiOiIyIiwiXHUwOWU5IjoiMyIsIlx1MDllYSI6IjQiLCJcdTA5ZWIiOiI1IiwiXHUwOWVjIjoiNiIsIlx1MDllZCI6IjciLCJcdTA5ZWUiOiI4IiwiXHUwOWVmIjoiOSIsIlx1MDllNiI6IjAifTtJLmRlZmluZUxvY2FsZSgiYm4tYmQiLHttb250aHM6Ilx1MDk5Y1x1''@;'; put 'put ''MDliZVx1MDlhOFx1MDljMVx1MDlkZlx1MDliZVx1MDliMFx1MDliZl9cdTA5YWJcdTA5YzdcdTA5YWNcdTA5Y2RcdTA5YjBcdTA5YzFcdTA5ZGZcdTA5YmVcdTA5YjBcdTA5YmZfXHUwOWFlXHUwOWJlXHUwOWIwXHUwOWNkXHUwOTlhX1x1MDk4Zlx1MDlhYVx1MDljZFx1MDliMFx1MDliZlx1''@;'; put 'put ''MDliMl9cdTA5YWVcdTA5YzdfXHUwOTljXHUwOWMxXHUwOWE4X1x1MDk5Y1x1MDljMVx1MDliMlx1MDliZVx1MDk4N19cdTA5ODZcdTA5OTdcdTA5YjhcdTA5Y2RcdTA5OWZfXHUwOWI4XHUwOWM3XHUwOWFhXHUwOWNkXHUwOTlmXHUwOWM3XHUwOWFlXHUwOWNkXHUwOWFjXHUwOWIwX1x1MDk4''@;'; put 'put ''NVx1MDk5NVx1MDljZFx1MDk5Zlx1MDljYlx1MDlhY1x1MDliMF9cdTA5YThcdTA5YWRcdTA5YzdcdTA5YWVcdTA5Y2RcdTA5YWNcdTA5YjBfXHUwOWExXHUwOWJmXHUwOWI4XHUwOWM3XHUwOWFlXHUwOWNkXHUwOWFjXHUwOWIwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA5OWNcdTA5''@;'; put 'put ''YmVcdTA5YThcdTA5YzFfXHUwOWFiXHUwOWM3XHUwOWFjXHUwOWNkXHUwOWIwXHUwOWMxX1x1MDlhZVx1MDliZVx1MDliMFx1MDljZFx1MDk5YV9cdTA5OGZcdTA5YWFcdTA5Y2RcdTA5YjBcdTA5YmZcdTA5YjJfXHUwOWFlXHUwOWM3X1x1MDk5Y1x1MDljMVx1MDlhOF9cdTA5OWNcdTA5YzFc''@;'; put 'put ''dTA5YjJcdTA5YmVcdTA5ODdfXHUwOTg2XHUwOTk3XHUwOWI4XHUwOWNkXHUwOTlmX1x1MDliOFx1MDljN1x1MDlhYVx1MDljZFx1MDk5Zl9cdTA5ODVcdTA5OTVcdTA5Y2RcdTA5OWZcdTA5Y2JfXHUwOWE4XHUwOWFkXHUwOWM3X1x1MDlhMVx1MDliZlx1MDliOFx1MDljNyIuc3BsaXQoIl8i''@;'; put 'put ''KSx3ZWVrZGF5czoiXHUwOWIwXHUwOWFjXHUwOWJmXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDliOFx1MDljYlx1MDlhZVx1MDlhY1x1MDliZVx1MDliMF9cdTA5YWVcdTA5OTlcdTA5Y2RcdTA5OTdcdTA5YjJcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWFjXHUwOWMxXHUwOWE3XHUwOWFjXHUwOWJl''@;'; put 'put ''XHUwOWIwX1x1MDlhY1x1MDljM1x1MDliOVx1MDliOFx1MDljZFx1MDlhYVx1MDlhNFx1MDliZlx1MDlhY1x1MDliZVx1MDliMF9cdTA5YjZcdTA5YzFcdTA5OTVcdTA5Y2RcdTA5YjBcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWI2XHUwOWE4XHUwOWJmXHUwOWFjXHUwOWJlXHUwOWIwIi5zcGxp''@;'; put 'put ''dCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDliMFx1MDlhY1x1MDliZl9cdTA5YjhcdTA5Y2JcdTA5YWVfXHUwOWFlXHUwOTk5XHUwOWNkXHUwOTk3XHUwOWIyX1x1MDlhY1x1MDljMVx1MDlhN19cdTA5YWNcdTA5YzNcdTA5YjlcdTA5YjhcdTA5Y2RcdTA5YWFcdTA5YTRcdTA5YmZfXHUwOWI2''@;'; put 'put ''XHUwOWMxXHUwOTk1XHUwOWNkXHUwOWIwX1x1MDliNlx1MDlhOFx1MDliZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwOWIwXHUwOWFjXHUwOWJmX1x1MDliOFx1MDljYlx1MDlhZV9cdTA5YWVcdTA5OTlcdTA5Y2RcdTA5OTdcdTA5YjJfXHUwOWFjXHUwOWMxXHUwOWE3X1x1MDlhY1x1''@;'; put 'put ''MDljM1x1MDliOV9cdTA5YjZcdTA5YzFcdTA5OTVcdTA5Y2RcdTA5YjBfXHUwOWI2XHUwOWE4XHUwOWJmIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFx1MDliOFx1MDlhZVx1MDlkZiIsTFRTOiJBIGg6bW06c3MgXHUwOWI4XHUwOWFlXHUwOWRmIixMOiJERC9NTS9Z''@;'; put 'put ''WVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSBcdTA5YjhcdTA5YWVcdTA5ZGYiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOWI4XHUwOWFlXHUwOWRmIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA5ODZcdTA5OWNdIExUIixuZXh0RGF5''@;'; put 'put ''OiJbXHUwOTg2XHUwOTk3XHUwOWJlXHUwOWFlXHUwOWMwXHUwOTk1XHUwOWJlXHUwOWIyXSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwOTk3XHUwOWE0XHUwOTk1XHUwOWJlXHUwOWIyXSBMVCIsbGFzdFdlZWs6IltcdTA5OTdcdTA5YTRdIGRkZGQsIExUIixzYW1lRWxz''@;'; put 'put ''ZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA5YWFcdTA5YjBcdTA5YzciLHBhc3Q6IiVzIFx1MDk4Nlx1MDk5N1x1MDljNyIsczoiXHUwOTk1XHUwOWRmXHUwOWM3XHUwOTk1IFx1MDliOFx1MDljN1x1MDk5NVx1MDljN1x1MDlhOFx1MDljZFx1MDlhMSIsc3M6IiVkIFx1MDli''@;'; put 'put ''OFx1MDljN1x1MDk5NVx1MDljN1x1MDlhOFx1MDljZFx1MDlhMSIsbToiXHUwOThmXHUwOTk1IFx1MDlhZVx1MDliZlx1MDlhOFx1MDliZlx1MDk5ZiIsbW06IiVkIFx1MDlhZVx1MDliZlx1MDlhOFx1MDliZlx1MDk5ZiIsaDoiXHUwOThmXHUwOTk1IFx1MDk5OFx1MDlhOFx1MDljZFx1MDk5''@;'; put 'put ''Zlx1MDliZSIsaGg6IiVkIFx1MDk5OFx1MDlhOFx1MDljZFx1MDk5Zlx1MDliZSIsZDoiXHUwOThmXHUwOTk1IFx1MDlhNlx1MDliZlx1MDlhOCIsZGQ6IiVkIFx1MDlhNlx1MDliZlx1MDlhOCIsTToiXHUwOThmXHUwOTk1IFx1MDlhZVx1MDliZVx1MDliOCIsTU06IiVkIFx1MDlhZVx1MDli''@;'; put 'put ''ZVx1MDliOCIseToiXHUwOThmXHUwOTk1IFx1MDlhY1x1MDk5Ylx1MDliMCIseXk6IiVkIFx1MDlhY1x1MDk5Ylx1MDliMCJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTA5ZTdcdTA5ZThcdTA5ZTlcdTA5ZWFcdTA5ZWJcdTA5ZWNcdTA5ZWRcdTA5ZWVcdTA5''@;'; put 'put ''ZWZcdTA5ZTZdL2csZnVuY3Rpb24oUCl7cmV0dXJuIHBbUF19KX0scG9zdGZvcm1hdDpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKFApe3JldHVybiBfW1BdfSl9LG1lcmlkaWVtUGFyc2U6L1x1MDliMFx1MDliZVx1MDlhNHxcdTA5YWRcdTA5Y2JcdTA5YjB8''@;'; put 'put ''XHUwOWI4XHUwOTk1XHUwOWJlXHUwOWIyfFx1MDlhNlx1MDljMVx1MDlhYVx1MDljMVx1MDliMHxcdTA5YWNcdTA5YmZcdTA5OTVcdTA5YmVcdTA5YjJ8XHUwOWI4XHUwOWE4XHUwOWNkXHUwOWE3XHUwOWNkXHUwOWFmXHUwOWJlfFx1MDliMFx1MDliZVx1MDlhNC8sbWVyaWRpZW1Ib3VyOmZ1''@;'; put 'put ''bmN0aW9uKHcsUCl7cmV0dXJuIDEyPT09dyYmKHc9MCksIlx1MDliMFx1MDliZVx1MDlhNCI9PT1QP3c8ND93OncrMTI6Ilx1MDlhZFx1MDljYlx1MDliMCI9PT1QfHwiXHUwOWI4XHUwOTk1XHUwOWJlXHUwOWIyIj09PVA/dzoiXHUwOWE2XHUwOWMxXHUwOWFhXHUwOWMxXHUwOWIwIj09PVA/''@;'; put 'put ''dz49Mz93OncrMTI6Ilx1MDlhY1x1MDliZlx1MDk5NVx1MDliZVx1MDliMiI9PT1QfHwiXHUwOWI4XHUwOWE4XHUwOWNkXHUwOWE3XHUwOWNkXHUwOWFmXHUwOWJlIj09PVA/dysxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzw0PyJcdTA5YjBcdTA5YmVcdTA5''@;'; put 'put ''YTQiOnc8Nj8iXHUwOWFkXHUwOWNiXHUwOWIwIjp3PDEyPyJcdTA5YjhcdTA5OTVcdTA5YmVcdTA5YjIiOnc8MTU/Ilx1MDlhNlx1MDljMVx1MDlhYVx1MDljMVx1MDliMCI6dzwxOD8iXHUwOWFjXHUwOWJmXHUwOTk1XHUwOWJlXHUwOWIyIjp3PDIwPyJcdTA5YjhcdTA5YThcdTA5Y2RcdTA5''@;'; put 'put ''YTdcdTA5Y2RcdTA5YWZcdTA5YmUiOiJcdTA5YjBcdTA5YmVcdTA5YTQifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oYig5NzU4NikpfSw0MzU4NDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQ2OTI2KSxfPWIoMzE0ODMpLHA9YigxMTA4KSxWPWIoNzUyMTIpLHc9YigzNjkzMiks''@;'; put 'put ''UD1UeXBlRXJyb3I7Y2UuZXhwb3J0cz1mdW5jdGlvbihGLFIpe3ZhciB6PWFyZ3VtZW50cy5sZW5ndGg8Mj93KEYpOlI7aWYoXyh6KSlyZXR1cm4gcChJKHosRikpO3Rocm93IG5ldyBQKFYoRikrIiBpcyBub3QgaXRlcmFibGUiKX19LDQzNjMyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3Zh''@;'; put 'put ''ciBJPWIoMzE0ODMpLF89YigxMTA4KSxwPWIoNDY5MjYpLFY9Yig2NDU1MCksdz1iKDc1NDI0KSxQPSJJbnZhbGlkIHNpemUiLEY9UmFuZ2VFcnJvcixSPVR5cGVFcnJvcix6PU1hdGgubWF4LE49ZnVuY3Rpb24oTyxLKXt0aGlzLnNldD1PLHRoaXMuc2l6ZT16KEssMCksdGhpcy5oYXM9SShP''@;'; put 'put ''LmhhcyksdGhpcy5rZXlzPUkoTy5rZXlzKX07Ti5wcm90b3R5cGU9e2dldEl0ZXJhdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHcoXyhwKHRoaXMua2V5cyx0aGlzLnNldCkpKX0saW5jbHVkZXM6ZnVuY3Rpb24oTyl7cmV0dXJuIHAodGhpcy5oYXMsdGhpcy5zZXQsTyl9fSxjZS5leHBvcnRzPWZ1''@;'; put 'put ''bmN0aW9uKE8pe18oTyk7dmFyIEs9K08uc2l6ZTtpZihLIT1LKXRocm93IG5ldyBSKFApO3ZhciBaPVYoSyk7aWYoWjwwKXRocm93IG5ldyBGKFApO3JldHVybiBuZXcgTihPLFopfX0sNDQwMzk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigxNjk4MCksXz1iKDQ0NjQ4KTtjZS5l''@;'; put 'put ''eHBvcnRzPWZ1bmN0aW9uKHAsVix3KXtyZXR1cm4gdy5nZXQmJkkody5nZXQsVix7Z2V0dGVyOiEwfSksdy5zZXQmJkkody5zZXQsVix7c2V0dGVyOiEwfSksXy5mKHAsVix3KX19LDQ0MDY2OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBGLFIsST1iKDMzOTYzKSxfPWIoMjM1OCkscD1J''@;'; put 'put ''LnByb2Nlc3MsVj1JLkRlbm8sdz1wJiZwLnZlcnNpb25zfHxWJiZWLnZlcnNpb24sUD13JiZ3LnY4O1AmJihSPShGPVAuc3BsaXQoIi4iKSlbMF0+MCYmRlswXTw0PzE6KyhGWzBdK0ZbMV0pKSwhUiYmXyYmKCEoRj1fLm1hdGNoKC9FZGdlXC8oXGQrKS8pKXx8RlsxXT49NzQpJiYoRj1fLm1h''@;'; put 'put ''dGNoKC9DaHJvbWVcLyhcZCspLykpJiYoUj0rRlsxXSksY2UuZXhwb3J0cz1SfSw0NDA2ODooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDg5OTk5KSxfPWIoOTc1OTQpLHA9Yig0ODEyOCksVj1iKDEyNzczKSx3PWIoODM3OTgpLFA9Yig5MTYyNyksRj1WKCJPYmplY3QucHJvdG90''@;'; put 'put ''eXBlLnRvU3RyaW5nIiksUj1iKDg4Nzc5KSgpLHo9dHlwZW9mIGdsb2JhbFRoaXM+InUiP2dsb2JhbDpnbG9iYWxUaGlzLE49XygpLE89VigiU3RyaW5nLnByb3RvdHlwZS5zbGljZSIpLEs9VigiQXJyYXkucHJvdG90eXBlLmluZGV4T2YiLCEwKXx8ZnVuY3Rpb24oZWUsSil7Zm9yKHZhciBy''@;'; put 'put ''ZT0wO3JlPGVlLmxlbmd0aDtyZSs9MSlpZihlZVtyZV09PT1KKXJldHVybiByZTtyZXR1cm4tMX0sWj17X19wcm90b19fOm51bGx9O0koTixSJiZ3JiZQP2Z1bmN0aW9uKHEpe3ZhciBlZT1uZXcgeltxXTtpZihTeW1ib2wudG9TdHJpbmdUYWcgaW4gZWUmJlApe3ZhciBKPVAoZWUpLHJlPXco''@;'; put 'put ''SixTeW1ib2wudG9TdHJpbmdUYWcpO2lmKCFyZSYmSil7dmFyIGllPVAoSik7cmU9dyhpZSxTeW1ib2wudG9TdHJpbmdUYWcpfVpbIiQiK3FdPXAocmUuZ2V0KX19OmZ1bmN0aW9uKHEpe3ZhciBlZT1uZXcgeltxXSxKPWVlLnNsaWNlfHxlZS5zZXQ7SiYmKFpbIiQiK3FdPXAoSikpfSksY2Uu''@;'; put 'put ''ZXhwb3J0cz1mdW5jdGlvbihlZSl7aWYoIWVlfHwib2JqZWN0IiE9dHlwZW9mIGVlKXJldHVybiExO2lmKCFSKXt2YXIgSj1PKEYoZWUpLDgsLTEpO3JldHVybiBLKE4sSik+LTE/SjoiT2JqZWN0Ij09PUomJmZ1bmN0aW9uKGVlKXt2YXIgSj0hMTtyZXR1cm4gSShaLGZ1bmN0aW9uKHJlLGll''@;'; put 'put ''KXtpZighSil0cnl7cmUoZWUpLEo9TyhpZSwxKX1jYXRjaHt9fSksSn0oZWUpfXJldHVybiB3P2Z1bmN0aW9uKGVlKXt2YXIgSj0hMTtyZXR1cm4gSShaLGZ1bmN0aW9uKHJlLGllKXtpZighSil0cnl7IiQiK3JlKGVlKT09PWllJiYoSj1PKGllLDEpKX1jYXRjaHt9fSksSn0oZWUpOm51bGx9''@;'; put 'put ''fSw0NDEzNzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDIzNTgpO2NlLmV4cG9ydHM9Lyg/OmlwYWR8aXBob25lfGlwb2QpLiphcHBsZXdlYmtpdC9pLnRlc3QoSSl9LDQ0MjEzOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2IoNTMzNDgpfSw0NDM1NjpjZT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgSSxYPSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdD9SZWZsZWN0Om51bGwsYj1YJiYiZnVuY3Rpb24iPT10eXBlb2YgWC5hcHBseT9YLmFwcGx5OmZ1bmN0aW9uKGllLHVlLGdlKXtyZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoaWUsdWUsZ2UpfTtJPVgmJiJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBYLm93bktleXM/WC5vd25LZXlzOk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM/ZnVuY3Rpb24oaWUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpZSkuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaWUpKX06ZnVuY3Rpb24o''@;'; put 'put ''aWUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpZSl9O3ZhciBwPU51bWJlci5pc05hTnx8ZnVuY3Rpb24oaWUpe3JldHVybiBpZSE9aWV9O2Z1bmN0aW9uIFYoKXtWLmluaXQuY2FsbCh0aGlzKX1jZS5leHBvcnRzPVYsY2UuZXhwb3J0cy5vbmNlPWZ1bmN0aW9uIHEocmUs''@;'; put 'put ''aWUpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih1ZSxnZSl7ZnVuY3Rpb24gX2UoTWUpe3JlLnJlbW92ZUxpc3RlbmVyKGllLFRlKSxnZShNZSl9ZnVuY3Rpb24gVGUoKXsiZnVuY3Rpb24iPT10eXBlb2YgcmUucmVtb3ZlTGlzdGVuZXImJnJlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIs''@;'; put 'put ''X2UpLHVlKFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9SihyZSxpZSxUZSx7b25jZTohMH0pLCJlcnJvciIhPT1pZSYmZnVuY3Rpb24gZWUocmUsaWUsdWUpeyJmdW5jdGlvbiI9PXR5cGVvZiByZS5vbiYmSihyZSwiZXJyb3IiLGllLHVlKX0ocmUsX2Use29uY2U6ITB9KX0pfSxWLkV2ZW50''@;'; put 'put ''RW1pdHRlcj1WLFYucHJvdG90eXBlLl9ldmVudHM9dm9pZCAwLFYucHJvdG90eXBlLl9ldmVudHNDb3VudD0wLFYucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnM9dm9pZCAwO3ZhciB3PTEwO2Z1bmN0aW9uIFAocmUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiByZSl0aHJvdyBuZXcgVHlwZUVycm9y''@;'; put 'put ''KCdUaGUgImxpc3RlbmVyIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgcmUpfWZ1bmN0aW9uIEYocmUpe3JldHVybiB2b2lkIDA9PT1yZS5fbWF4TGlzdGVuZXJzP1YuZGVmYXVsdE1heExpc3RlbmVyczpyZS5fbWF4TGlzdGVuZXJz''@;'; put 'put ''fWZ1bmN0aW9uIFIocmUsaWUsdWUsZ2Upe3ZhciBfZSxUZSxNZTtpZihQKHVlKSx2b2lkIDA9PT0oVGU9cmUuX2V2ZW50cyk/KFRlPXJlLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxyZS5fZXZlbnRzQ291bnQ9MCk6KHZvaWQgMCE9PVRlLm5ld0xpc3RlbmVyJiYocmUuZW1pdCgibmV3''@;'; put 'put ''TGlzdGVuZXIiLGllLHVlLmxpc3RlbmVyP3VlLmxpc3RlbmVyOnVlKSxUZT1yZS5fZXZlbnRzKSxNZT1UZVtpZV0pLHZvaWQgMD09PU1lKU1lPVRlW2llXT11ZSwrK3JlLl9ldmVudHNDb3VudDtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBNZT9NZT1UZVtpZV09Z2U/W3VlLE1lXTpbTWUs''@;'; put 'put ''dWVdOmdlP01lLnVuc2hpZnQodWUpOk1lLnB1c2godWUpLChfZT1GKHJlKSk+MCYmTWUubGVuZ3RoPl9lJiYhTWUud2FybmVkKXtNZS53YXJuZWQ9ITA7dmFyIFplPW5ldyBFcnJvcigiUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAiK01lLmxlbmd0aCsiICIr''@;'; put 'put ''U3RyaW5nKGllKSsiIGxpc3RlbmVycyBhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQiKTtaZS5uYW1lPSJNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmciLFplLmVtaXR0ZXI9cmUsWmUudHlwZT1pZSxaZS5jb3VudD1NZS5sZW5ndGgsZnVu''@;'; put 'put ''Y3Rpb24gXyhyZSl7Y29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4ocmUpfShaZSl9cmV0dXJuIHJlfWZ1bmN0aW9uIHooKXtpZighdGhpcy5maXJlZClyZXR1cm4gdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLHRoaXMud3JhcEZuKSx0aGlzLmZpcmVkPSEw''@;'; put 'put ''LDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk6dGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCxhcmd1bWVudHMpfWZ1bmN0aW9uIE4ocmUsaWUsdWUpe3ZhciBnZT17ZmlyZWQ6ITEsd3JhcEZuOnZvaWQgMCx0YXJnZXQ6cmUsdHlwZTpp''@;'; put 'put ''ZSxsaXN0ZW5lcjp1ZX0sX2U9ei5iaW5kKGdlKTtyZXR1cm4gX2UubGlzdGVuZXI9dWUsZ2Uud3JhcEZuPV9lLF9lfWZ1bmN0aW9uIE8ocmUsaWUsdWUpe3ZhciBnZT1yZS5fZXZlbnRzO2lmKHZvaWQgMD09PWdlKXJldHVybltdO3ZhciBfZT1nZVtpZV07cmV0dXJuIHZvaWQgMD09PV9lP1td''@;'; put 'put ''OiJmdW5jdGlvbiI9PXR5cGVvZiBfZT91ZT9bX2UubGlzdGVuZXJ8fF9lXTpbX2VdOnVlP2Z1bmN0aW9uIFcocmUpe2Zvcih2YXIgaWU9bmV3IEFycmF5KHJlLmxlbmd0aCksdWU9MDt1ZTxpZS5sZW5ndGg7Kyt1ZSlpZVt1ZV09cmVbdWVdLmxpc3RlbmVyfHxyZVt1ZV07cmV0dXJuIGllfShf''@;'; put 'put ''ZSk6WihfZSxfZS5sZW5ndGgpfWZ1bmN0aW9uIEsocmUpe3ZhciBpZT10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09aWUpe3ZhciB1ZT1pZVtyZV07aWYoImZ1bmN0aW9uIj09dHlwZW9mIHVlKXJldHVybiAxO2lmKHZvaWQgMCE9PXVlKXJldHVybiB1ZS5sZW5ndGh9cmV0dXJuIDB9ZnVuY3Rp''@;'; put 'put ''b24gWihyZSxpZSl7Zm9yKHZhciB1ZT1uZXcgQXJyYXkoaWUpLGdlPTA7Z2U8aWU7KytnZSl1ZVtnZV09cmVbZ2VdO3JldHVybiB1ZX1mdW5jdGlvbiBKKHJlLGllLHVlLGdlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgcmUub24pZ2Uub25jZT9yZS5vbmNlKGllLHVlKTpyZS5vbihpZSx1ZSk7''@;'; put 'put ''ZWxzZXtpZigiZnVuY3Rpb24iIT10eXBlb2YgcmUuYWRkRXZlbnRMaXN0ZW5lcil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImVtaXR0ZXIiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgcmUpO3JlLmFkZEV2ZW50TGlzdGVu''@;'; put 'put ''ZXIoaWUsZnVuY3Rpb24gX2UoVGUpe2dlLm9uY2UmJnJlLnJlbW92ZUV2ZW50TGlzdGVuZXIoaWUsX2UpLHVlKFRlKX0pfX1PYmplY3QuZGVmaW5lUHJvcGVydHkoViwiZGVmYXVsdE1heExpc3RlbmVycyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHd9LHNldDpmdW5j''@;'; put 'put ''dGlvbihyZSl7aWYoIm51bWJlciIhPXR5cGVvZiByZXx8cmU8MHx8cChyZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiAiZGVmYXVsdE1heExpc3RlbmVycyIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyty''@;'; put 'put ''ZSsiLiIpO3c9cmV9fSksVi5pbml0PWZ1bmN0aW9uKCl7KHZvaWQgMD09PXRoaXMuX2V2ZW50c3x8dGhpcy5fZXZlbnRzPT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpJiYodGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCks''@;'; put 'put ''dGhpcy5fbWF4TGlzdGVuZXJzPXRoaXMuX21heExpc3RlbmVyc3x8dm9pZCAwfSxWLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oaWUpe2lmKCJudW1iZXIiIT10eXBlb2YgaWV8fGllPDB8fHAoaWUpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgIm4iIGlz''@;'; put 'put ''IG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcraWUrIi4iKTtyZXR1cm4gdGhpcy5fbWF4TGlzdGVuZXJzPWllLHRoaXN9LFYucHJvdG90eXBlLmdldE1heExpc3RlbmVycz1mdW5jdGlvbigpe3JldHVybiBGKHRoaXMpfSxWLnByb3Rv''@;'; put 'put ''dHlwZS5lbWl0PWZ1bmN0aW9uKGllKXtmb3IodmFyIHVlPVtdLGdlPTE7Z2U8YXJndW1lbnRzLmxlbmd0aDtnZSsrKXVlLnB1c2goYXJndW1lbnRzW2dlXSk7dmFyIF9lPSJlcnJvciI9PT1pZSxUZT10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09VGUpX2U9X2UmJnZvaWQgMD09PVRlLmVycm9y''@;'; put 'put ''O2Vsc2UgaWYoIV9lKXJldHVybiExO2lmKF9lKXt2YXIgTWU7aWYodWUubGVuZ3RoPjAmJihNZT11ZVswXSksTWUgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBNZTt2YXIgWmU9bmV3IEVycm9yKCJVbmhhbmRsZWQgZXJyb3IuIisoTWU/IiAoIitNZS5tZXNzYWdlKyIpIjoiIikpO3Rocm93IFpl''@;'; put 'put ''LmNvbnRleHQ9TWUsWmV9dmFyIEI9VGVbaWVdO2lmKHZvaWQgMD09PUIpcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEIpYihCLHRoaXMsdWUpO2Vsc2V7dmFyIGc9Qi5sZW5ndGgseT1aKEIsZyk7Zm9yKGdlPTA7Z2U8ZzsrK2dlKWIoeVtnZV0sdGhpcyx1ZSl9cmV0dXJuITB9LFYu''@;'; put 'put ''cHJvdG90eXBlLm9uPVYucHJvdG90eXBlLmFkZExpc3RlbmVyPWZ1bmN0aW9uKGllLHVlKXtyZXR1cm4gUih0aGlzLGllLHVlLCExKX0sVi5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyPWZ1bmN0aW9uKGllLHVlKXtyZXR1cm4gUih0aGlzLGllLHVlLCEwKX0sVi5wcm90b3R5cGUub25jZT1m''@;'; put 'put ''dW5jdGlvbihpZSx1ZSl7cmV0dXJuIFAodWUpLHRoaXMub24oaWUsTih0aGlzLGllLHVlKSksdGhpc30sVi5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lcj1mdW5jdGlvbihpZSx1ZSl7cmV0dXJuIFAodWUpLHRoaXMucHJlcGVuZExpc3RlbmVyKGllLE4odGhpcyxpZSx1ZSkpLHRoaXN9''@;'; put 'put ''LFYucHJvdG90eXBlLm9mZj1WLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbihpZSx1ZSl7dmFyIGdlLF9lLFRlLE1lLFplO2lmKFAodWUpLHZvaWQgMD09PShfZT10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKHZvaWQgMD09PShnZT1fZVtpZV0pKXJldHVybiB0aGlzO2lm''@;'; put 'put ''KGdlPT09dWV8fGdlLmxpc3RlbmVyPT09dWUpMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTooZGVsZXRlIF9lW2llXSxfZS5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsaWUsZ2UubGlzdGVuZXJ8fHVlKSk7''@;'; put 'put ''ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2YgZ2Upe2ZvcihUZT0tMSxNZT1nZS5sZW5ndGgtMTtNZT49MDtNZS0tKWlmKGdlW01lXT09PXVlfHxnZVtNZV0ubGlzdGVuZXI9PT11ZSl7WmU9Z2VbTWVdLmxpc3RlbmVyLFRlPU1lO2JyZWFrfWlmKFRlPDApcmV0dXJuIHRoaXM7MD09PVRlP2dl''@;'; put 'put ''LnNoaWZ0KCk6ZnVuY3Rpb24gWShyZSxpZSl7Zm9yKDtpZSsxPHJlLmxlbmd0aDtpZSsrKXJlW2llXT1yZVtpZSsxXTtyZS5wb3AoKX0oZ2UsVGUpLDE9PT1nZS5sZW5ndGgmJihfZVtpZV09Z2VbMF0pLHZvaWQgMCE9PV9lLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3Rl''@;'; put 'put ''bmVyIixpZSxaZXx8dWUpfXJldHVybiB0aGlzfSxWLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oaWUpe3ZhciB1ZSxnZSxfZTtpZih2b2lkIDA9PT0oZ2U9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT1nZS5yZW1vdmVMaXN0ZW5lcilyZXR1cm4g''@;'; put 'put ''MD09PWFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApOnZvaWQgMCE9PWdlW2llXSYmKDA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6ZGVsZXRlIGdlW2llXSks''@;'; put 'put ''dGhpcztpZigwPT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIE1lLFRlPU9iamVjdC5rZXlzKGdlKTtmb3IoX2U9MDtfZTxUZS5sZW5ndGg7KytfZSkicmVtb3ZlTGlzdGVuZXIiIT09KE1lPVRlW19lXSkmJnRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKE1lKTtyZXR1cm4gdGhpcy5yZW1vdmVBbGxM''@;'; put 'put ''aXN0ZW5lcnMoInJlbW92ZUxpc3RlbmVyIiksdGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCx0aGlzfWlmKCJmdW5jdGlvbiI9PXR5cGVvZih1ZT1nZVtpZV0pKXRoaXMucmVtb3ZlTGlzdGVuZXIoaWUsdWUpO2Vsc2UgaWYodm9pZCAwIT09dWUp''@;'; put 'put ''Zm9yKF9lPXVlLmxlbmd0aC0xO19lPj0wO19lLS0pdGhpcy5yZW1vdmVMaXN0ZW5lcihpZSx1ZVtfZV0pO3JldHVybiB0aGlzfSxWLnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24oaWUpe3JldHVybiBPKHRoaXMsaWUsITApfSxWLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnM9ZnVuY3Rpb24o''@;'; put 'put ''aWUpe3JldHVybiBPKHRoaXMsaWUsITEpfSxWLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24ocmUsaWUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiByZS5saXN0ZW5lckNvdW50P3JlLmxpc3RlbmVyQ291bnQoaWUpOksuY2FsbChyZSxpZSl9LFYucHJvdG90eXBlLmxpc3RlbmVyQ291bnQ9SyxW''@;'; put 'put ''LnByb3RvdHlwZS5ldmVudE5hbWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50PjA/SSh0aGlzLl9ldmVudHMpOltdfX0sNDQ2NDg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0NjM4NyksXz1iKDU3MjQ0KSxwPWIoMjY5MjkpLFY9YigxMTA4KSx3PWIoNTk0''@;'; put 'put ''MTApLFA9VHlwZUVycm9yLEY9T2JqZWN0LmRlZmluZVByb3BlcnR5LFI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcix6PSJlbnVtZXJhYmxlIixOPSJjb25maWd1cmFibGUiLE89IndyaXRhYmxlIjtYLmY9ST9wP2Z1bmN0aW9uKFosWSxXKXtpZihWKFopLFk9dyhZKSxWKFcpLCJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBaJiYicHJvdG90eXBlIj09PVkmJiJ2YWx1ZSJpbiBXJiZPIGluIFcmJiFXW09dKXt2YXIgcT1SKFosWSk7cSYmcVtPXSYmKFpbWV09Vy52YWx1ZSxXPXtjb25maWd1cmFibGU6TiBpbiBXP1dbTl06cVtOXSxlbnVtZXJhYmxlOnogaW4gVz9XW3pdOnFbel0sd3Jp''@;'; put 'put ''dGFibGU6ITF9KX1yZXR1cm4gRihaLFksVyl9OkY6ZnVuY3Rpb24oWixZLFcpe2lmKFYoWiksWT13KFkpLFYoVyksXyl0cnl7cmV0dXJuIEYoWixZLFcpfWNhdGNoe31pZigiZ2V0ImluIFd8fCJzZXQiaW4gVyl0aHJvdyBuZXcgUCgiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQiKTtyZXR1cm4i''@;'; put 'put ''dmFsdWUiaW4gVyYmKFpbWV09Vy52YWx1ZSksWn19LDQ0ODkyOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKFYsdyxQLEYpe3N3aXRjaChQKXtjYXNlInMiOnJldHVybiB3PyJcdTA0NDVcdTA0NGRcdTA0MzRcdTA0NDVcdTA0NGRcdTA0M2Qg''@;'; put 'put ''XHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IjoiXHUwNDQ1XHUwNDRkXHUwNDM0XHUwNDQ1XHUwNDRkXHUwNDNkIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0Ylx1MDQzZCI7Y2FzZSJzcyI6cmV0dXJuIFYrKHc/IiBcdTA0NDFcdTA0MzVcdTA0''@;'; put 'put ''M2FcdTA0NDNcdTA0M2RcdTA0MzQiOiIgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDRiXHUwNDNkIik7Y2FzZSJtIjpjYXNlIm1tIjpyZXR1cm4gVisodz8iIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiI6IiBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNc''@;'; put 'put ''dTA0NDJcdTA0NGJcdTA0M2QiKTtjYXNlImgiOmNhc2UiaGgiOnJldHVybiBWKyh3PyIgXHUwNDQ2XHUwNDMwXHUwNDMzIjoiIFx1MDQ0Nlx1MDQzMFx1MDQzM1x1MDQzOFx1MDQzOVx1MDQzZCIpO2Nhc2UiZCI6Y2FzZSJkZCI6cmV0dXJuIFYrKHc/IiBcdTA0ZTlcdTA0MzRcdTA0ZTlcdTA0''@;'; put 'put ''NDAiOiIgXHUwNGU5XHUwNDM0XHUwNDQwXHUwNDM4XHUwNDM5XHUwNDNkIik7Y2FzZSJNIjpjYXNlIk1NIjpyZXR1cm4gVisodz8iIFx1MDQ0MVx1MDQzMFx1MDQ0MCI6IiBcdTA0NDFcdTA0MzBcdTA0NDBcdTA0NGJcdTA0M2QiKTtjYXNlInkiOmNhc2UieXkiOnJldHVybiBWKyh3PyIgXHUw''@;'; put 'put ''NDM2XHUwNDM4XHUwNDNiIjoiIFx1MDQzNlx1MDQzOFx1MDQzYlx1MDQzOFx1MDQzOVx1MDQzZCIpO2RlZmF1bHQ6cmV0dXJuIFZ9fUkuZGVmaW5lTG9jYWxlKCJtbiIse21vbnRoczoiXHUwNDFkXHUwNDRkXHUwNDMzXHUwNDM0XHUwNGFmXHUwNDMzXHUwNDRkXHUwNDRkXHUwNDQwIFx1MDQ0''@;'; put 'put ''MVx1MDQzMFx1MDQ0MF9cdTA0MjVcdTA0M2VcdTA0NTFcdTA0NDBcdTA0MzRcdTA0NDNcdTA0MzNcdTA0MzBcdTA0MzBcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQxM1x1MDQ0M1x1MDQ0MFx1MDQzMFx1MDQzMlx1MDQzNFx1MDQ0M1x1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0MCBcdTA0''@;'; put 'put ''NDFcdTA0MzBcdTA0NDBfXHUwNDE0XHUwNGU5XHUwNDQwXHUwNGU5XHUwNDMyXHUwNDM0XHUwNGFmXHUwNDMzXHUwNDRkXHUwNDRkXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MjJcdTA0MzBcdTA0MzJcdTA0MzRcdTA0NDNcdTA0MzNcdTA0MzBcdTA0MzBcdTA0NDAgXHUwNDQxXHUw''@;'; put 'put ''NDMwXHUwNDQwX1x1MDQxN1x1MDQ0M1x1MDQ0MFx1MDQzM1x1MDQzMFx1MDQzNFx1MDQ0M1x1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDBfXHUwNDE0XHUwNDNlXHUwNDNiXHUwNDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMwXHUwNDQwIFx1MDQ0MVx1MDQzMFx1''@;'; put 'put ''MDQ0MF9cdTA0MWRcdTA0MzBcdTA0MzlcdTA0M2NcdTA0MzRcdTA0NDNcdTA0MzNcdTA0MzBcdTA0MzBcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQxNVx1MDQ0MVx1MDQzNFx1MDRhZlx1MDQzM1x1MDQ0ZFx1MDQ0ZFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDBfXHUwNDEwXHUwNDQw''@;'; put 'put ''XHUwNDMwXHUwNDMyXHUwNDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMwXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MTBcdTA0NDBcdTA0MzJcdTA0MzBcdTA0M2QgXHUwNDNkXHUwNDRkXHUwNDMzXHUwNDM0XHUwNGFmXHUwNDMzXHUwNDRkXHUwNDRkXHUwNDQwIFx1MDQ0MVx1MDQz''@;'; put 'put ''MFx1MDQ0MF9cdTA0MTBcdTA0NDBcdTA0MzJcdTA0MzBcdTA0M2QgXHUwNDQ1XHUwNDNlXHUwNDUxXHUwNDQwXHUwNDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMwXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMSBcdTA0NDFcdTA0MzBcdTA0NDBf''@;'; put 'put ''MiBcdTA0NDFcdTA0MzBcdTA0NDBfMyBcdTA0NDFcdTA0MzBcdTA0NDBfNCBcdTA0NDFcdTA0MzBcdTA0NDBfNSBcdTA0NDFcdTA0MzBcdTA0NDBfNiBcdTA0NDFcdTA0MzBcdTA0NDBfNyBcdTA0NDFcdTA0MzBcdTA0NDBfOCBcdTA0NDFcdTA0MzBcdTA0NDBfOSBcdTA0NDFcdTA0MzBcdTA0''@;'; put 'put ''NDBfMTAgXHUwNDQxXHUwNDMwXHUwNDQwXzExIFx1MDQ0MVx1MDQzMFx1MDQ0MF8xMiBcdTA0NDFcdTA0MzBcdTA0NDAiLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwNDFkXHUwNDRmXHUwNDNjX1x1MDQxNFx1MDQzMFx1MDQzMlx1MDQzMFx1MDQzMF9cdTA0''@;'; put 'put ''MWNcdTA0NGZcdTA0MzNcdTA0M2NcdTA0MzBcdTA0NDBfXHUwNDFiXHUwNDQ1XHUwNDMwXHUwNDMzXHUwNDMyXHUwNDMwX1x1MDQxZlx1MDRhZlx1MDQ0MFx1MDQ0ZFx1MDQzMl9cdTA0MTFcdTA0MzBcdTA0MzBcdTA0NDFcdTA0MzBcdTA0M2RfXHUwNDExXHUwNDRmXHUwNDNjXHUwNDMxXHUw''@;'; put 'put ''NDMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQxZFx1MDQ0Zlx1MDQzY19cdTA0MTRcdTA0MzBcdTA0MzJfXHUwNDFjXHUwNDRmXHUwNDMzX1x1MDQxYlx1MDQ0NVx1MDQzMF9cdTA0MWZcdTA0YWZcdTA0NDBfXHUwNDExXHUwNDMwXHUwNDMwX1x1MDQxMVx1MDQ0Zlx1MDQzYyIu''@;'; put 'put ''c3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDFkXHUwNDRmX1x1MDQxNFx1MDQzMF9cdTA0MWNcdTA0NGZfXHUwNDFiXHUwNDQ1X1x1MDQxZlx1MDRhZl9cdTA0MTFcdTA0MzBfXHUwNDExXHUwNDRmIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7''@;'; put 'put ''TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiWVlZWSBcdTA0M2VcdTA0M2RcdTA0NGIgTU1NTVx1MDQ0Ylx1MDQzZCBEIixMTEw6IllZWVkgXHUwNDNlXHUwNDNkXHUwNDRiIE1NTU1cdTA0NGJcdTA0M2QgRCBISDptbSIsTExMTDoiZGRkZCwgWVlZWSBcdTA0''@;'; put 'put ''M2VcdTA0M2RcdTA0NGIgTU1NTVx1MDQ0Ylx1MDQzZCBEIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNGFlXHUwNGU4fFx1MDRhZVx1MDQyNS9pLGlzUE06ZnVuY3Rpb24oVil7cmV0dXJuIlx1MDRhZVx1MDQyNSI9PT1WfSxtZXJpZGllbTpmdW5jdGlvbihWLHcsUCl7cmV0dXJuIFY8MTI/''@;'; put 'put ''Ilx1MDRhZVx1MDRlOCI6Ilx1MDRhZVx1MDQyNSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNGU4XHUwNDNkXHUwNGU5XHUwNGU5XHUwNDM0XHUwNGU5XHUwNDQwXSBMVCIsbmV4dERheToiW1x1MDQxY1x1MDQzMFx1MDQ0MFx1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0OF0gTFQiLG5leHRXZWVr''@;'; put 'put ''OiJbXHUwNDE4XHUwNDQwXHUwNDRkXHUwNDQ1XSBkZGRkIExUIixsYXN0RGF5OiJbXHUwNGU4XHUwNDQ3XHUwNDM4XHUwNDMzXHUwNDM0XHUwNGU5XHUwNDQwXSBMVCIsbGFzdFdlZWs6IltcdTA0ZThcdTA0M2RcdTA0MzNcdTA0ZTlcdTA0NDBcdTA0NDFcdTA0ZTlcdTA0M2RdIGRkZGQgTFQi''@;'; put 'put ''LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDQzNFx1MDQzMFx1MDQ0MFx1MDQzMFx1MDQzMCIscGFzdDoiJXMgXHUwNGU5XHUwNDNjXHUwNDNkXHUwNGU5IixzOl8sc3M6XyxtOl8sbW06XyxoOl8saGg6XyxkOl8sZGQ6XyxNOl8sTU06Xyx5Ol8seXk6X30sZGF5''@;'; put 'put ''T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfSBcdTA0ZTlcdTA0MzRcdTA0ZTlcdTA0NDAvLG9yZGluYWw6ZnVuY3Rpb24oVix3KXtzd2l0Y2godyl7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gVisiIFx1MDRlOVx1MDQzNFx1MDRlOVx1MDQ0MCI7ZGVmYXVsdDpyZXR1cm4g''@;'; put 'put ''Vn19fSl9KGIoOTc1ODYpKX0sNDUyNzg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz17c2hpZnRqaXM6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiBiKDQwNjc5KX0sZW5jb2RlQWRkOnsiXHhhNSI6OTIsIlx1MjAzZSI6MTI2fSxlbmNvZGVTa2lwVmFs''@;'; put 'put ''czpbe2Zyb206NjA3MzYsdG86NjM4MDh9XX0sY3NzaGlmdGppczoic2hpZnRqaXMiLG1za2Fuamk6InNoaWZ0amlzIixzamlzOiJzaGlmdGppcyIsd2luZG93czMxajoic2hpZnRqaXMiLG1zMzFqOiJzaGlmdGppcyIseHNqaXM6InNoaWZ0amlzIix3aW5kb3dzOTMyOiJzaGlmdGppcyIsbXM5''@;'; put 'put ''MzI6InNoaWZ0amlzIiw5MzI6InNoaWZ0amlzIixjcDkzMjoic2hpZnRqaXMiLGV1Y2pwOnt0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gYig1NjQwNil9LGVuY29kZUFkZDp7Ilx4YTUiOjkyLCJcdTIwM2UiOjEyNn19LGdiMjMxMjoiY3A5MzYiLGdiMjMxMjgwOiJjcDkz''@;'; put 'put ''NiIsZ2IyMzEyMTk4MDoiY3A5MzYiLGNzZ2IyMzEyOiJjcDkzNiIsY3Npc281OGdiMjMxMjgwOiJjcDkzNiIsZXVjY246ImNwOTM2Iix3aW5kb3dzOTM2OiJjcDkzNiIsbXM5MzY6ImNwOTM2Iiw5MzY6ImNwOTM2IixjcDkzNjp7dHlwZToiX2RiY3MiLHRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IGIoNzQ0ODgpfX0sZ2JrOnt0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gYig3NDQ4OCkuY29uY2F0KGIoNTU5MTQpKX19LHhnYms6ImdiayIsaXNvaXI1ODoiZ2JrIixnYjE4MDMwOnt0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gYig3NDQ4OCkuY29u''@;'; put 'put ''Y2F0KGIoNTU5MTQpKX0sZ2IxODAzMDpmdW5jdGlvbigpe3JldHVybiBiKDk5MTI5KX0sZW5jb2RlU2tpcFZhbHM6WzEyOF0sZW5jb2RlQWRkOnsiXHUyMGFjIjo0MTY5OX19LGNoaW5lc2U6ImdiMTgwMzAiLHdpbmRvd3M5NDk6ImNwOTQ5Iixtczk0OToiY3A5NDkiLDk0OToiY3A5NDkiLGNw''@;'; put 'put ''OTQ5Ont0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gYigyMTE2Nil9fSxjc2V1Y2tyOiJjcDk0OSIsY3Nrc2M1NjAxMTk4NzoiY3A5NDkiLGV1Y2tyOiJjcDk0OSIsaXNvaXIxNDk6ImNwOTQ5Iixrb3JlYW46ImNwOTQ5Iixrc2M1NjAxMTk4NzoiY3A5NDkiLGtzYzU2MDEx''@;'; put 'put ''OTg5OiJjcDk0OSIsa3NjNTYwMToiY3A5NDkiLHdpbmRvd3M5NTA6ImNwOTUwIixtczk1MDoiY3A5NTAiLDk1MDoiY3A5NTAiLGNwOTUwOnt0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gYig3MjMyNCl9fSxiaWc1OiJiaWc1aGtzY3MiLGJpZzVoa3Njczp7dHlwZToiX2Ri''@;'; put 'put ''Y3MiLHRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGIoNzIzMjQpLmNvbmNhdChiKDQzMjY3KSl9LGVuY29kZVNraXBWYWxzOls0MTY3Nl19LGNuYmlnNToiYmlnNWhrc2NzIixjc2JpZzU6ImJpZzVoa3NjcyIseHhiaWc1OiJiaWc1aGtzY3MifX0sNDUzMTA6Y2U9PnsidXNlIHN0cmljdCI7Y2Uu''@;'; put 'put ''ZXhwb3J0cz1mdW5jdGlvbigpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBTeW1ib2x8fCJmdW5jdGlvbiIhPXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXJldHVybiExO2lmKCJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yKXJldHVybiEwO3ZhciBiPXt9LEk9U3lt''@;'; put 'put ''Ym9sKCJ0ZXN0IiksXz1PYmplY3QoSSk7aWYoInN0cmluZyI9PXR5cGVvZiBJfHwiW29iamVjdCBTeW1ib2xdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChJKXx8IltvYmplY3QgU3ltYm9sXSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoXykpcmV0dXJuITE7''@;'; put 'put ''Zm9yKHZhciBWIGluIGJbSV09NDIsYilyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmtleXMmJjAhPT1PYmplY3Qua2V5cyhiKS5sZW5ndGh8fCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyYmMCE9PU9iamVjdC5nZXRPd25Qcm9wZXJ0''@;'; put 'put ''eU5hbWVzKGIpLmxlbmd0aClyZXR1cm4hMTt2YXIgdz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGIpO2lmKDEhPT13Lmxlbmd0aHx8d1swXSE9PUl8fCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoYixJKSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcil7dmFyIFA9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihiLEkpO2lmKDQyIT09UC52YWx1ZXx8ITAhPT1QLmVudW1lcmFibGUpcmV0dXJuITF9cmV0dXJuITB9fSw0NTM5MjpjZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''WDtYPWdsb2JhbC5wcm9jZXNzJiZnbG9iYWwucHJvY2Vzcy5icm93c2VyPyJ1dGYtOCI6Z2xvYmFsLnByb2Nlc3MmJmdsb2JhbC5wcm9jZXNzLnZlcnNpb24/cGFyc2VJbnQocHJvY2Vzcy52ZXJzaW9uLnNwbGl0KCIuIilbMF0uc2xpY2UoMSksMTApPj02PyJ1dGYtOCI6ImJpbmFyeSI6InV0''@;'; put 'put ''Zi04IixjZS5leHBvcnRzPVh9LDQ1OTMyOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKFYsdyxQLEYpe3ZhciBSPXttOlsiZWluZSBNaW51dGUiLCJlaW5lciBNaW51dGUiXSxoOlsiZWluZSBTdHVuZGUiLCJlaW5lciBTdHVuZGUiXSxkOlsi''@;'; put 'put ''ZWluIFRhZyIsImVpbmVtIFRhZyJdLGRkOltWKyIgVGFnZSIsVisiIFRhZ2VuIl0sdzpbImVpbmUgV29jaGUiLCJlaW5lciBXb2NoZSJdLE06WyJlaW4gTW9uYXQiLCJlaW5lbSBNb25hdCJdLE1NOltWKyIgTW9uYXRlIixWKyIgTW9uYXRlbiJdLHk6WyJlaW4gSmFociIsImVpbmVtIEphaHIi''@;'; put 'put ''XSx5eTpbVisiIEphaHJlIixWKyIgSmFocmVuIl19O3JldHVybiB3P1JbUF1bMF06UltQXVsxXX1JLmRlZmluZUxvY2FsZSgiZGUiLHttb250aHM6IkphbnVhcl9GZWJydWFyX01ceGU0cnpfQXByaWxfTWFpX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6''@;'; put 'put ''ZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbi5fRmViLl9NXHhlNHJ6X0Fwci5fTWFpX0p1bmlfSnVsaV9BdWcuX1NlcC5fT2t0Ll9Ob3YuX0Rlei4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiU29ubnRhZ19Nb250YWdfRGllbnN0YWdfTWl0dHdv''@;'; put 'put ''Y2hfRG9ubmVyc3RhZ19GcmVpdGFnX1NhbXN0YWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU28uX01vLl9EaS5fTWkuX0RvLl9Gci5fU2EuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTb19Nb19EaV9NaV9Eb19Gcl9TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAs''@;'; put 'put ''bG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaGV1dGUgdW1dIExU''@;'; put 'put ''IFtVaHJdIixzYW1lRWxzZToiTCIsbmV4dERheToiW21vcmdlbiB1bV0gTFQgW1Vocl0iLG5leHRXZWVrOiJkZGRkIFt1bV0gTFQgW1Vocl0iLGxhc3REYXk6IltnZXN0ZXJuIHVtXSBMVCBbVWhyXSIsbGFzdFdlZWs6IltsZXR6dGVuXSBkZGRkIFt1bV0gTFQgW1Vocl0ifSxyZWxhdGl2ZVRp''@;'; put 'put ''bWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6InZvciAlcyIsczoiZWluIHBhYXIgU2VrdW5kZW4iLHNzOiIlZCBTZWt1bmRlbiIsbTpfLG1tOiIlZCBNaW51dGVuIixoOl8saGg6IiVkIFN0dW5kZW4iLGQ6XyxkZDpfLHc6Xyx3dzoiJWQgV29jaGVuIixNOl8sTU06Xyx5Ol8seXk6X30sZGF5T2ZN''@;'; put 'put ''b250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDQ2MzYyOmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9ZnVuY3Rpb24oWCl7dHJ5e3ZhciBiPW5ldyBTZXQsST17c2l6ZTowLGhhczpmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiEwfSxrZXlzOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwibmV4dCIse2dldDpmdW5jdGlvbigpe3JldHVybiBiLmNsZWFyKCksYi5hZGQoNCksZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTohMH19fX0pfX0sXz1iW1hdKEkpO3JldHVybiAxPT09Xy5z''@;'; put 'put ''aXplJiY0PT09Xy52YWx1ZXMoKS5uZXh0KCkudmFsdWV9Y2F0Y2h7cmV0dXJuITF9fX0sNDYzODc6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig1NTU5Mik7Y2UuZXhwb3J0cz0hSShmdW5jdGlvbigpe3JldHVybiA3IT09T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LDEse2dldDpm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiA3fX0pWzFdfSl9LDQ2NTA4OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiLWluY2kiLDU6Ii1pbmNpIiw4OiItaW5jaSIsNzA6Ii1pbmNpIiw4MDoiLWluY2kiLDI6Ii1uY2kiLDc6Ii1uY2kiLDIwOiItbmNpIiw1''@;'; put 'put ''MDoiLW5jaSIsMzoiLVx4ZmNuY1x4ZmMiLDQ6Ii1ceGZjbmNceGZjIiwxMDA6Ii1ceGZjbmNceGZjIiw2OiItbmNcdTAxMzEiLDk6Ii11bmN1IiwxMDoiLXVuY3UiLDMwOiItdW5jdSIsNjA6Ii1cdTAxMzFuY1x1MDEzMSIsOTA6Ii1cdTAxMzFuY1x1MDEzMSJ9O0kuZGVmaW5lTG9jYWxlKCJh''@;'; put 'put ''eiIse21vbnRoczoieWFudmFyX2ZldnJhbF9tYXJ0X2FwcmVsX21heV9peXVuX2l5dWxfYXZxdXN0X3NlbnR5YWJyX29rdHlhYnJfbm95YWJyX2Rla2FiciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoieWFuX2Zldl9tYXJfYXByX21heV9peW5faXlsX2F2cV9zZW5fb2t0X25veV9kZWsiLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXM6IkJhemFyX0JhemFyIGVydFx1MDI1OXNpX1x4YzdcdTAyNTlyXHUwMTVmXHUwMjU5bmJcdTAyNTkgYXhcdTAxNWZhbVx1MDEzMV9ceGM3XHUwMjU5clx1MDE1Zlx1MDI1OW5iXHUwMjU5X0NceGZjbVx1MDI1OSBheFx1MDE1ZmFtXHUwMTMxX0NceGZjbVx1MDI1''@;'; put 'put ''OV9cdTAxNWVcdTAyNTluYlx1MDI1OSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJCYXpfQnpFX1x4YzdBeF9ceGM3XHUwMjU5cl9DQXhfQ1x4ZmNtX1x1MDE1ZVx1MDI1OW4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkJ6X0JFX1x4YzdBX1x4YzdcdTAyNTlfQ0FfQ1x4ZmNfXHUwMTVl''@;'; put 'put ''XHUwMjU5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhI''@;'; put 'put ''Om1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltidWdceGZjbiBzYWF0XSBMVCIsbmV4dERheToiW3NhYmFoIHNhYXRdIExUIixuZXh0V2VlazoiW2dcdTAyNTlsXHUwMjU5biBoXHUwMjU5ZnRcdTAyNTldIGRkZGQgW3NhYXRdIExUIixsYXN0RGF5OiJbZFx4ZmNuXHUwMjU5bl0gTFQiLGxhc3RX''@;'; put 'put ''ZWVrOiJba2VceGU3XHUwMjU5biBoXHUwMjU5ZnRcdTAyNTldIGRkZGQgW3NhYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBzb25yYSIscGFzdDoiJXMgXHUwMjU5dnZcdTAyNTlsIixzOiJiaXIgbmVceGU3XHUwMjU5IHNhbml5XHUwMjU5IixzczoiJWQg''@;'; put 'put ''c2FuaXlcdTAyNTkiLG06ImJpciBkXHUwMjU5cWlxXHUwMjU5IixtbToiJWQgZFx1MDI1OXFpcVx1MDI1OSIsaDoiYmlyIHNhYXQiLGhoOiIlZCBzYWF0IixkOiJiaXIgZ1x4ZmNuIixkZDoiJWQgZ1x4ZmNuIixNOiJiaXIgYXkiLE1NOiIlZCBheSIseToiYmlyIGlsIix5eToiJWQgaWwifSxt''@;'; put 'put ''ZXJpZGllbVBhcnNlOi9nZWNcdTAyNTl8c1x1MDI1OWhcdTAyNTlyfGdceGZjbmRceGZjenxheFx1MDE1ZmFtLyxpc1BNOmZ1bmN0aW9uKFYpe3JldHVybi9eKGdceGZjbmRceGZjenxheFx1MDE1ZmFtKSQvLnRlc3QoVil9LG1lcmlkaWVtOmZ1bmN0aW9uKFYsdyxQKXtyZXR1cm4gVjw0PyJn''@;'; put 'put ''ZWNcdTAyNTkiOlY8MTI/InNcdTAyNTloXHUwMjU5ciI6VjwxNz8iZ1x4ZmNuZFx4ZmN6IjoiYXhcdTAxNWZhbSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1MDEzMW5jXHUwMTMxfGluY2l8bmNpfFx4ZmNuY1x4ZmN8bmNcdTAxMzF8dW5jdSkvLG9yZGluYWw6ZnVuY3Rp''@;'; put 'put ''b24oVil7aWYoMD09PVYpcmV0dXJuIFYrIi1cdTAxMzFuY1x1MDEzMSI7dmFyIHc9ViUxMDtyZXR1cm4gVisoX1t3XXx8X1tWJTEwMC13XXx8X1tWPj0xMDA/MTAwOm51bGxdKX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGIoOTc1ODYpKX0sNDY2Nzk6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rp''@;'; put 'put ''b24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPSJlbmUuX2ZlYi5fbWFyLl9hYnIuX21heS5fanVuLl9qdWwuX2Fnby5fc2VwLl9vY3QuX25vdi5fZGljLiIuc3BsaXQoIl8iKSxwPSJlbmVfZmViX21hcl9hYnJfbWF5X2p1bl9qdWxfYWdvX3NlcF9vY3Rfbm92X2RpYyIuc3BsaXQoIl8iKSxWPVsv''@;'; put 'put ''XmVuZS9pLC9eZmViL2ksL15tYXIvaSwvXmFici9pLC9ebWF5L2ksL15qdW4vaSwvXmp1bC9pLC9eYWdvL2ksL15zZXAvaSwvXm9jdC9pLC9ebm92L2ksL15kaWMvaV0sdz0vXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0''@;'; put 'put ''dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlfGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pO0kuZGVmaW5lTG9jYWxlKCJlcyIse21vbnRoczoiZW5lcm9fZmVicmVyb19tYXJ6b19hYnJp''@;'; put 'put ''bF9tYXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDpmdW5jdGlvbihGLFIpe3JldHVybiBGPy8tTU1NLS8udGVzdChSKT9wW0YubW9udGgoKV06X1tGLm1vbnRoKCldOl99LG1vbnRoc1Jl''@;'; put 'put ''Z2V4OncsbW9udGhzU2hvcnRSZWdleDp3LG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihl''@;'; put 'put ''bmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaSxtb250aHNQYXJzZTpWLGxvbmdNb250aHNQYXJzZTpWLHNob3J0TW9udGhzUGFyc2U6Vix3ZWVrZGF5czoiZG9taW5nb19sdW5lc19tYXJ0''@;'; put 'put ''ZXNfbWlceGU5cmNvbGVzX2p1ZXZlc192aWVybmVzX3NceGUxYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb20uX2x1bi5fbWFyLl9taVx4ZTkuX2p1ZS5fdmllLl9zXHhlMWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9taV9qdV92aV9zXHhlMSIuc3BsaXQo''@;'; put 'put ''Il8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1N''@;'; put 'put ''IFtkZV0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2hveSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbbWFceGYxYW5hIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoi''@;'; put 'put ''IikrIl0gTFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFthIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbYXllciBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdFdlZWs6''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4iW2VsXSBkZGRkIFtwYXNhZG8gYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVuICVzIixwYXN0OiJoYWNlICVzIixzOiJ1bm9zIHNlZ3VuZG9zIixzczoiJWQgc2VndW5k''@;'; put 'put ''b3MiLG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0b3MiLGg6InVuYSBob3JhIixoaDoiJWQgaG9yYXMiLGQ6InVuIGRceGVkYSIsZGQ6IiVkIGRceGVkYXMiLHc6InVuYSBzZW1hbmEiLHd3OiIlZCBzZW1hbmFzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNlcyIseToidW4gYVx4ZjFvIix5eToi''@;'; put 'put ''JWQgYVx4ZjFvcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fSxpbnZhbGlkRGF0ZToiRmVjaGEgaW52XHhlMWxpZGEifSl9KGIoOTc1ODYpKX0sNDY3MjA6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24o''@;'; put 'put ''SSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJmaWwiLHttb250aHM6IkVuZXJvX1BlYnJlcm9fTWFyc29fQWJyaWxfTWF5b19IdW55b19IdWx5b19BZ29zdG9fU2V0eWVtYnJlX09rdHVicmVfTm9ieWVtYnJlX0Rpc3llbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiRW5lX1Bl''@;'; put 'put ''Yl9NYXJfQWJyX01heV9IdW5fSHVsX0Fnb19TZXRfT2t0X05vYl9EaXMiLnNwbGl0KCJfIiksd2Vla2RheXM6Ikxpbmdnb19MdW5lc19NYXJ0ZXNfTWl5ZXJrdWxlc19IdXdlYmVzX0JpeWVybmVzX1NhYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJMaW5fTHVuX01hcl9NaXlfSHV3''@;'; put 'put ''X0JpeV9TYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkxpX0x1X01hX01pX0h1X0JpX1NhYiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJNTS9EL1lZWVkiLExMOiJNTU1NIEQsIFlZWVkiLExMTDoiTU1NTSBELCBZWVlZIEhIOm1t''@;'; put 'put ''IixMTExMOiJkZGRkLCBNTU1NIERELCBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IkxUIFtuZ2F5b25nIGFyYXddIixuZXh0RGF5OiJbQnVrYXMgbmddIExUIixuZXh0V2VlazoiTFQgW3NhIHN1c3Vub2QgbmFdIGRkZGQiLGxhc3REYXk6IkxUIFtrYWhhcG9uXSIsbGFzdFdlZWs6''@;'; put 'put ''IkxUIFtub29uZyBuYWthcmFhbmddIGRkZGQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InNhIGxvb2IgbmcgJXMiLHBhc3Q6IiVzIGFuZyBuYWthbGlwYXMiLHM6ImlsYW5nIHNlZ3VuZG8iLHNzOiIlZCBzZWd1bmRvIixtOiJpc2FuZyBtaW51dG8iLG1tOiIlZCBtaW51''@;'; put 'put ''dG8iLGg6ImlzYW5nIG9yYXMiLGhoOiIlZCBvcmFzIixkOiJpc2FuZyBhcmF3IixkZDoiJWQgYXJhdyIsTToiaXNhbmcgYnV3YW4iLE1NOiIlZCBidXdhbiIseToiaXNhbmcgdGFvbiIseXk6IiVkIHRhb24ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LyxvcmRpbmFsOmZ1bmN0''@;'; put 'put ''aW9uKHApe3JldHVybiBwfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw0Njc1ODpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPVR5cGVFcnJvcn0sNDY4NTQ6KGNlLFgsYik9Pnt2YXIgST1iKDEzNTQ2KTtmdW5jdGlvbiBfKHApe3JldHVybiBwLl9wcmV2PXAuX2NpcGhl''@;'; put 'put ''ci5lbmNyeXB0QmxvY2socC5fcHJldikscC5fcHJldn1YLmVuY3J5cHQ9ZnVuY3Rpb24ocCxWKXtmb3IoO3AuX2NhY2hlLmxlbmd0aDxWLmxlbmd0aDspcC5fY2FjaGU9QnVmZmVyLmNvbmNhdChbcC5fY2FjaGUsXyhwKV0pO3ZhciB3PXAuX2NhY2hlLnNsaWNlKDAsVi5sZW5ndGgpO3JldHVy''@;'; put 'put ''biBwLl9jYWNoZT1wLl9jYWNoZS5zbGljZShWLmxlbmd0aCksSShWLHcpfX0sNDY4NjU6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJlbi1ueiIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9K''@;'; put 'put ''dWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9X''@;'; put 'put ''ZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xU''@;'; put 'put ''OiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9y''@;'; put 'put ''cm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNv''@;'; put 'put ''bmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3Jk''@;'; put 'put ''aW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihwKXt2YXIgVj1wJTEwO3JldHVybiBwKygxPT1+fihwJTEwMC8xMCk/InRoIjoxPT09Vj8ic3QiOjI9PT1WPyJuZCI6Mz09PVY/InJkIjoidGgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYp''@;'; put 'put ''KX0sNDY5MjY6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig3NTE1NyksXz1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtjZS5leHBvcnRzPUk/Xy5iaW5kKF8pOmZ1bmN0aW9uKCl7cmV0dXJuIF8uYXBwbHkoXyxhcmd1bWVudHMpfX0sNDcwOTI6KGNlLFgsYik9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIEk9YigzMzk2MyksXz1iKDIzNTgpLHA9Yig4NjY3NSksVj1mdW5jdGlvbih3KXtyZXR1cm4gXy5zbGljZSgwLHcubGVuZ3RoKT09PXd9O2NlLmV4cG9ydHM9VigiQnVuLyIpPyJCVU4iOlYoIkNsb3VkZmxhcmUtV29ya2VycyIpPyJDTE9VREZMQVJFIjpWKCJEZW5vLyIpPyJERU5P''@;'; put 'put ''IjpWKCJOb2RlLmpzLyIpPyJOT0RFIjpJLkJ1biYmInN0cmluZyI9PXR5cGVvZiBCdW4udmVyc2lvbj8iQlVOIjpJLkRlbm8mJiJvYmplY3QiPT10eXBlb2YgRGVuby52ZXJzaW9uPyJERU5PIjoicHJvY2VzcyI9PT1wKEkucHJvY2Vzcyk/Ik5PREUiOkkud2luZG93JiZJLmRvY3VtZW50PyJC''@;'; put 'put ''Uk9XU0VSIjoiUkVTVCJ9LDQ3NzQwOihjZSxYLGIpPT57dmFyIEk9WDtJLl9yZXZlcnNlPWZ1bmN0aW9uKHApe3ZhciBWPXt9O3JldHVybiBPYmplY3Qua2V5cyhwKS5mb3JFYWNoKGZ1bmN0aW9uKHcpeygwfHcpPT13JiYod3w9MCksVltwW3ddXT13fSksVn0sSS5kZXI9YigzNjI4Myl9LDQ3''@;'; put 'put ''NzY1OmNlPT57Y2UuZXhwb3J0cz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiUmVhZGFibGUuZnJvbSBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBicm93c2VyIil9fSw0Nzc5MDooKT0+e30sNDc4NDk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig5NjU2KTtmdW5jdGlvbiBw''@;'; put 'put ''KEUpe3ZhciBtPXRoaXM7dGhpcy5uZXh0PW51bGwsdGhpcy5lbnRyeT1udWxsLHRoaXMuZmluaXNoPWZ1bmN0aW9uKCl7IWZ1bmN0aW9uIGooRSxtLEEpe3ZhciBhZT1FLmVudHJ5O2ZvcihFLmVudHJ5PW51bGw7YWU7KXt2YXIgbmU9YWUuY2FsbGJhY2s7bS5wZW5kaW5nY2ItLSxuZShBKSxh''@;'; put 'put ''ZT1hZS5uZXh0fW0uY29ya2VkUmVxdWVzdHNGcmVlLm5leHQ9RX0obSxFKX19Y2UuZXhwb3J0cz1lZTt2YXIgdyxWPSFwcm9jZXNzLmJyb3dzZXImJlsidjAuMTAiLCJ2MC45LiJdLmluZGV4T2YocHJvY2Vzcy52ZXJzaW9uLnNsaWNlKDAsNSkpPi0xP3NldEltbWVkaWF0ZTpJLm5leHRUaWNr''@;'; put 'put ''O2VlLldyaXRhYmxlU3RhdGU9Vzt2YXIgUD1PYmplY3QuY3JlYXRlKGIoMjc2MzcpKTtQLmluaGVyaXRzPWIoNzE5OTMpO3ZhciBxLEY9e2RlcHJlY2F0ZTpiKDMzOTgpfSxSPWIoMTgzNDIpLHo9YigyNjU1KS5CdWZmZXIsTj0odHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiB3aW5k''@;'; put 'put ''b3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LFo9YigyMTUwOSk7ZnVuY3Rpb24gWSgpe31mdW5jdGlvbiBXKEUsbSl7dz13fHxiKDc0MDc1KTt2YXIgQT1tIGluc3RhbmNlb2Ygdzt0aGlzLm9iamVjdE1vZGU9ISEoRT1FfHx7''@;'; put 'put ''fSkub2JqZWN0TW9kZSxBJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFFLndyaXRhYmxlT2JqZWN0TW9kZSk7dmFyIGFlPUUuaGlnaFdhdGVyTWFyayxuZT1FLndyaXRhYmxlSGlnaFdhdGVyTWFyazt0aGlzLmhpZ2hXYXRlck1hcms9YWV8fDA9PT1hZT9hZTpBJiYobmV8''@;'; put 'put ''fDA9PT1uZSk/bmU6dGhpcy5vYmplY3RNb2RlPzE2OjE2Mzg0LHRoaXMuaGlnaFdhdGVyTWFyaz1NYXRoLmZsb29yKHRoaXMuaGlnaFdhdGVyTWFyayksdGhpcy5maW5hbENhbGxlZD0hMSx0aGlzLm5lZWREcmFpbj0hMSx0aGlzLmVuZGluZz0hMSx0aGlzLmVuZGVkPSExLHRoaXMuZmluaXNo''@;'; put 'put ''ZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWNvZGVTdHJpbmdzPSEoITE9PT1FLmRlY29kZVN0cmluZ3MpLHRoaXMuZGVmYXVsdEVuY29kaW5nPUUuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5sZW5ndGg9MCx0aGlzLndyaXRpbmc9ITEsdGhpcy5jb3JrZWQ9MCx0aGlzLnN5''@;'; put 'put ''bmM9ITAsdGhpcy5idWZmZXJQcm9jZXNzaW5nPSExLHRoaXMub253cml0ZT1mdW5jdGlvbihVZSl7IWZ1bmN0aW9uIE1lKEUsbSl7dmFyIEE9RS5fd3JpdGFibGVTdGF0ZSxhZT1BLnN5bmMsbmU9QS53cml0ZWNiO2lmKGZ1bmN0aW9uIFRlKEUpe0Uud3JpdGluZz0hMSxFLndyaXRlY2I9bnVs''@;'; put 'put ''bCxFLmxlbmd0aC09RS53cml0ZWxlbixFLndyaXRlbGVuPTB9KEEpLG0pIWZ1bmN0aW9uIF9lKEUsbSxBLGFlLG5lKXstLW0ucGVuZGluZ2NiLEE/KEkubmV4dFRpY2sobmUsYWUpLEkubmV4dFRpY2soVCxFLG0pLEUuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEUuZW1pdCgiZXJy''@;'; put 'put ''b3IiLGFlKSk6KG5lKGFlKSxFLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxFLmVtaXQoImVycm9yIixhZSksVChFLG0pKX0oRSxBLGFlLG0sbmUpO2Vsc2V7dmFyIHNlPXkoQSk7IXNlJiYhQS5jb3JrZWQmJiFBLmJ1ZmZlclByb2Nlc3NpbmcmJkEuYnVmZmVyZWRSZXF1ZXN0JiZn''@;'; put 'put ''KEUsQSksYWU/VihaZSxFLEEsc2UsbmUpOlplKEUsQSxzZSxuZSl9fShtLFVlKX0sdGhpcy53cml0ZWNiPW51bGwsdGhpcy53cml0ZWxlbj0wLHRoaXMuYnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5wZW5kaW5nY2I9MCx0aGlzLnByZWZp''@;'; put 'put ''bmlzaGVkPSExLHRoaXMuZXJyb3JFbWl0dGVkPSExLHRoaXMuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MCx0aGlzLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgcCh0aGlzKX1mdW5jdGlvbiBlZShFKXtpZih3PXd8fGIoNzQwNzUpLCEocS5jYWxsKGVlLHRoaXMpfHx0aGlzIGluc3RhbmNlb2Ygdykp''@;'; put 'put ''cmV0dXJuIG5ldyBlZShFKTt0aGlzLl93cml0YWJsZVN0YXRlPW5ldyBXKEUsdGhpcyksdGhpcy53cml0YWJsZT0hMCxFJiYoImZ1bmN0aW9uIj09dHlwZW9mIEUud3JpdGUmJih0aGlzLl93cml0ZT1FLndyaXRlKSwiZnVuY3Rpb24iPT10eXBlb2YgRS53cml0ZXYmJih0aGlzLl93cml0ZXY9''@;'; put 'put ''RS53cml0ZXYpLCJmdW5jdGlvbiI9PXR5cGVvZiBFLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PUUuZGVzdHJveSksImZ1bmN0aW9uIj09dHlwZW9mIEUuZmluYWwmJih0aGlzLl9maW5hbD1FLmZpbmFsKSksUi5jYWxsKHRoaXMpfWZ1bmN0aW9uIGdlKEUsbSxBLGFlLG5lLHNlLENlKXttLndy''@;'; put 'put ''aXRlbGVuPWFlLG0ud3JpdGVjYj1DZSxtLndyaXRpbmc9ITAsbS5zeW5jPSEwLEE/RS5fd3JpdGV2KG5lLG0ub253cml0ZSk6RS5fd3JpdGUobmUsc2UsbS5vbndyaXRlKSxtLnN5bmM9ITF9ZnVuY3Rpb24gWmUoRSxtLEEsYWUpe0F8fGZ1bmN0aW9uIEIoRSxtKXswPT09bS5sZW5ndGgmJm0u''@;'; put 'put ''bmVlZERyYWluJiYobS5uZWVkRHJhaW49ITEsRS5lbWl0KCJkcmFpbiIpKX0oRSxtKSxtLnBlbmRpbmdjYi0tLGFlKCksVChFLG0pfWZ1bmN0aW9uIGcoRSxtKXttLmJ1ZmZlclByb2Nlc3Npbmc9ITA7dmFyIEE9bS5idWZmZXJlZFJlcXVlc3Q7aWYoRS5fd3JpdGV2JiZBJiZBLm5leHQpe3Zh''@;'; put 'put ''ciBuZT1uZXcgQXJyYXkobS5idWZmZXJlZFJlcXVlc3RDb3VudCksc2U9bS5jb3JrZWRSZXF1ZXN0c0ZyZWU7c2UuZW50cnk9QTtmb3IodmFyIENlPTAsVWU9ITA7QTspbmVbQ2VdPUEsQS5pc0J1Znx8KFVlPSExKSxBPUEubmV4dCxDZSs9MTtuZS5hbGxCdWZmZXJzPVVlLGdlKEUsbSwhMCxt''@;'; put 'put ''Lmxlbmd0aCxuZSwiIixzZS5maW5pc2gpLG0ucGVuZGluZ2NiKyssbS5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsc2UubmV4dD8obS5jb3JrZWRSZXF1ZXN0c0ZyZWU9c2UubmV4dCxzZS5uZXh0PW51bGwpOm0uY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBwKG0pLG0uYnVmZmVyZWRSZXF1ZXN0''@;'; put 'put ''Q291bnQ9MH1lbHNle2Zvcig7QTspe3ZhciBKZT1BLmNodW5rO2lmKGdlKEUsbSwhMSxtLm9iamVjdE1vZGU/MTpKZS5sZW5ndGgsSmUsQS5lbmNvZGluZyxBLmNhbGxiYWNrKSxBPUEubmV4dCxtLmJ1ZmZlcmVkUmVxdWVzdENvdW50LS0sbS53cml0aW5nKWJyZWFrfW51bGw9PT1BJiYobS5s''@;'; put 'put ''YXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwpfW0uYnVmZmVyZWRSZXF1ZXN0PUEsbS5idWZmZXJQcm9jZXNzaW5nPSExfWZ1bmN0aW9uIHkoRSl7cmV0dXJuIEUuZW5kaW5nJiYwPT09RS5sZW5ndGgmJm51bGw9PT1FLmJ1ZmZlcmVkUmVxdWVzdCYmIUUuZmluaXNoZWQmJiFFLndyaXRpbmd9ZnVu''@;'; put 'put ''Y3Rpb24geChFLG0pe0UuX2ZpbmFsKGZ1bmN0aW9uKEEpe20ucGVuZGluZ2NiLS0sQSYmRS5lbWl0KCJlcnJvciIsQSksbS5wcmVmaW5pc2hlZD0hMCxFLmVtaXQoInByZWZpbmlzaCIpLFQoRSxtKX0pfWZ1bmN0aW9uIFQoRSxtKXt2YXIgQT15KG0pO3JldHVybiBBJiYoZnVuY3Rpb24gQyhF''@;'; put 'put ''LG0peyFtLnByZWZpbmlzaGVkJiYhbS5maW5hbENhbGxlZCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBFLl9maW5hbD8obS5wZW5kaW5nY2IrKyxtLmZpbmFsQ2FsbGVkPSEwLEkubmV4dFRpY2soeCxFLG0pKToobS5wcmVmaW5pc2hlZD0hMCxFLmVtaXQoInByZWZpbmlzaCIpKSl9KEUsbSksMD09''@;'; put 'put ''PW0ucGVuZGluZ2NiJiYobS5maW5pc2hlZD0hMCxFLmVtaXQoImZpbmlzaCIpKSksQX1QLmluaGVyaXRzKGVlLFIpLFcucHJvdG90eXBlLmdldEJ1ZmZlcj1mdW5jdGlvbigpe2Zvcih2YXIgbT10aGlzLmJ1ZmZlcmVkUmVxdWVzdCxBPVtdO207KUEucHVzaChtKSxtPW0ubmV4dDtyZXR1cm4g''@;'; put 'put ''QX0sZnVuY3Rpb24oKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFcucHJvdG90eXBlLCJidWZmZXIiLHtnZXQ6Ri5kZXByZWNhdGUoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCdWZmZXIoKX0sIl93cml0YWJsZVN0YXRlLmJ1ZmZlciBpcyBkZXByZWNhdGVkLiBVc2UgX3dyaXRhYmxl''@;'; put 'put ''U3RhdGUuZ2V0QnVmZmVyIGluc3RlYWQuIiwiREVQMDAwMyIpfSl9Y2F0Y2h7fX0oKSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaGFzSW5zdGFuY2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXT8ocT1GdW5jdGlv''@;'; put 'put ''bi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZWUsU3ltYm9sLmhhc0luc3RhbmNlLHt2YWx1ZTpmdW5jdGlvbihFKXtyZXR1cm4hIXEuY2FsbCh0aGlzLEUpfHx0aGlzPT09ZWUmJkUmJkUuX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiBXfX0p''@;'; put 'put ''KTpxPWZ1bmN0aW9uKEUpe3JldHVybiBFIGluc3RhbmNlb2YgdGhpc30sZWUucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXt0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIkNhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUiKSl9LGVlLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihFLG0sQSl7''@;'; put 'put ''dmFyIGFlPXRoaXMuX3dyaXRhYmxlU3RhdGUsbmU9ITEsc2U9IWFlLm9iamVjdE1vZGUmJmZ1bmN0aW9uIEsoRSl7cmV0dXJuIHouaXNCdWZmZXIoRSl8fEUgaW5zdGFuY2VvZiBOfShFKTtyZXR1cm4gc2UmJiF6LmlzQnVmZmVyKEUpJiYoRT1mdW5jdGlvbiBPKEUpe3JldHVybiB6LmZyb20o''@;'; put 'put ''RSl9KEUpKSwiZnVuY3Rpb24iPT10eXBlb2YgbSYmKEE9bSxtPW51bGwpLHNlP209ImJ1ZmZlciI6bXx8KG09YWUuZGVmYXVsdEVuY29kaW5nKSwiZnVuY3Rpb24iIT10eXBlb2YgQSYmKEE9WSksYWUuZW5kZWQ/ZnVuY3Rpb24gSihFLG0pe3ZhciBBPW5ldyBFcnJvcigid3JpdGUgYWZ0ZXIg''@;'; put 'put ''ZW5kIik7RS5lbWl0KCJlcnJvciIsQSksSS5uZXh0VGljayhtLEEpfSh0aGlzLEEpOihzZXx8ZnVuY3Rpb24gcmUoRSxtLEEsYWUpe3ZhciBuZT0hMCxzZT0hMTtyZXR1cm4gbnVsbD09PUE/c2U9bmV3IFR5cGVFcnJvcigiTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW0iKToi''@;'; put 'put ''c3RyaW5nIiE9dHlwZW9mIEEmJnZvaWQgMCE9PUEmJiFtLm9iamVjdE1vZGUmJihzZT1uZXcgVHlwZUVycm9yKCJJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rIikpLHNlJiYoRS5lbWl0KCJlcnJvciIsc2UpLEkubmV4dFRpY2soYWUsc2UpLG5lPSExKSxuZX0odGhpcyxhZSxFLEEp''@;'; put 'put ''KSYmKGFlLnBlbmRpbmdjYisrLG5lPWZ1bmN0aW9uIHVlKEUsbSxBLGFlLG5lLHNlKXtpZighQSl7dmFyIENlPWZ1bmN0aW9uIGllKEUsbSxBKXtyZXR1cm4hRS5vYmplY3RNb2RlJiYhMSE9PUUuZGVjb2RlU3RyaW5ncyYmInN0cmluZyI9PXR5cGVvZiBtJiYobT16LmZyb20obSxBKSksbX0o''@;'; put 'put ''bSxhZSxuZSk7YWUhPT1DZSYmKEE9ITAsbmU9ImJ1ZmZlciIsYWU9Q2UpfXZhciBVZT1tLm9iamVjdE1vZGU/MTphZS5sZW5ndGg7bS5sZW5ndGgrPVVlO3ZhciBKZT1tLmxlbmd0aDxtLmhpZ2hXYXRlck1hcms7aWYoSmV8fChtLm5lZWREcmFpbj0hMCksbS53cml0aW5nfHxtLmNvcmtlZCl7''@;'; put 'put ''dmFyIGl0PW0ubGFzdEJ1ZmZlcmVkUmVxdWVzdDttLmxhc3RCdWZmZXJlZFJlcXVlc3Q9e2NodW5rOmFlLGVuY29kaW5nOm5lLGlzQnVmOkEsY2FsbGJhY2s6c2UsbmV4dDpudWxsfSxpdD9pdC5uZXh0PW0ubGFzdEJ1ZmZlcmVkUmVxdWVzdDptLmJ1ZmZlcmVkUmVxdWVzdD1tLmxhc3RCdWZm''@;'; put 'put ''ZXJlZFJlcXVlc3QsbS5idWZmZXJlZFJlcXVlc3RDb3VudCs9MX1lbHNlIGdlKEUsbSwhMSxVZSxhZSxuZSxzZSk7cmV0dXJuIEplfSh0aGlzLGFlLHNlLEUsbSxBKSksbmV9LGVlLnByb3RvdHlwZS5jb3JrPWZ1bmN0aW9uKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrK30sZWUucHJv''@;'; put 'put ''dG90eXBlLnVuY29yaz1mdW5jdGlvbigpe3ZhciBFPXRoaXMuX3dyaXRhYmxlU3RhdGU7RS5jb3JrZWQmJihFLmNvcmtlZC0tLCFFLndyaXRpbmcmJiFFLmNvcmtlZCYmIUUuYnVmZmVyUHJvY2Vzc2luZyYmRS5idWZmZXJlZFJlcXVlc3QmJmcodGhpcyxFKSl9LGVlLnByb3RvdHlwZS5zZXRE''@;'; put 'put ''ZWZhdWx0RW5jb2Rpbmc9ZnVuY3Rpb24obSl7aWYoInN0cmluZyI9PXR5cGVvZiBtJiYobT1tLnRvTG93ZXJDYXNlKCkpLCEoWyJoZXgiLCJ1dGY4IiwidXRmLTgiLCJhc2NpaSIsImJpbmFyeSIsImJhc2U2NCIsInVjczIiLCJ1Y3MtMiIsInV0ZjE2bGUiLCJ1dGYtMTZsZSIsInJhdyJdLmlu''@;'; put 'put ''ZGV4T2YoKG0rIiIpLnRvTG93ZXJDYXNlKCkpPi0xKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK20pO3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZz1tLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlZS5wcm90b3R5cGUsIndy''@;'; put 'put ''aXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxlZS5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKEUsbSxBKXtBKG5ldyBFcnJvcigiX3dyaXRlKCkgaXMgbm90IGltcGxl''@;'; put 'put ''bWVudGVkIikpfSxlZS5wcm90b3R5cGUuX3dyaXRldj1udWxsLGVlLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oRSxtLEEpe3ZhciBhZT10aGlzLl93cml0YWJsZVN0YXRlOyJmdW5jdGlvbiI9PXR5cGVvZiBFPyhBPUUsRT1udWxsLG09bnVsbCk6ImZ1bmN0aW9uIj09dHlwZW9mIG0mJihBPW0s''@;'; put 'put ''bT1udWxsKSxudWxsIT1FJiZ0aGlzLndyaXRlKEUsbSksYWUuY29ya2VkJiYoYWUuY29ya2VkPTEsdGhpcy51bmNvcmsoKSksYWUuZW5kaW5nfHxmdW5jdGlvbiBIKEUsbSxBKXttLmVuZGluZz0hMCxUKEUsbSksQSYmKG0uZmluaXNoZWQ/SS5uZXh0VGljayhBKTpFLm9uY2UoImZpbmlzaCIs''@;'; put 'put ''QSkpLG0uZW5kZWQ9ITAsRS53cml0YWJsZT0hMX0odGhpcyxhZSxBKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGVlLnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVz''@;'; put 'put ''dHJveWVkfSxzZXQ6ZnVuY3Rpb24oRSl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPUUpfX0pLGVlLnByb3RvdHlwZS5kZXN0cm95PVouZGVzdHJveSxlZS5wcm90b3R5cGUuX3VuZGVzdHJveT1aLnVuZGVzdHJveSxlZS5wcm90b3R5cGUuX2Rl''@;'; put 'put ''c3Ryb3k9ZnVuY3Rpb24oRSxtKXt0aGlzLmVuZCgpLG0oRSl9fSw0ODEwNDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDMzOTYzKSxfPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtjZS5leHBvcnRzPWZ1bmN0aW9uKHAsVil7dHJ5e18oSSxwLHt2YWx1ZTpWLGNvbmZpZ3VyYWJsZToh''@;'; put 'put ''MCx3cml0YWJsZTohMH0pfWNhdGNoe0lbcF09Vn1yZXR1cm4gVn19LDQ4MTI4OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMzEzNTgpLF89Yig0NTcwKSxwPWIoNjE4ODUpLFY9Yig5ODkxMCk7Y2UuZXhwb3J0cz1mdW5jdGlvbihQKXt2YXIgRj1wKGFyZ3VtZW50cyksUj1QLmxl''@;'; put 'put ''bmd0aC0oYXJndW1lbnRzLmxlbmd0aC0xKTtyZXR1cm4gSShGLDErKFI+MD9SOjApLCEwKX0sXz9fKGNlLmV4cG9ydHMsImFwcGx5Iix7dmFsdWU6Vn0pOmNlLmV4cG9ydHMuYXBwbHk9Vn0sNDgzNTY6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig4ODc4OCksXz1iKDMzOTYzKSxw''@;'; put 'put ''PWIoNDgxMDQpLFY9Il9fY29yZS1qc19zaGFyZWRfXyIsdz1jZS5leHBvcnRzPV9bVl18fHAoVix7fSk7KHcudmVyc2lvbnN8fCh3LnZlcnNpb25zPVtdKSkucHVzaCh7dmVyc2lvbjoiMy40Ny4wIixtb2RlOkk/InB1cmUiOiJnbG9iYWwiLGNvcHlyaWdodDoiXHhhOSAyMDE0LTIwMjUgRGVu''@;'; put 'put ''aXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSksIDIwMjUgQ29yZUpTIENvbXBhbnkgKGNvcmUtanMuaW8pIixsaWNlbnNlOiJodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjQ3LjAvTElDRU5TRSIsc291cmNlOiJodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2sv''@;'; put 'put ''Y29yZS1qcyJ9KX0sNDg1ODU6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig3MTk5MyksXz1iKDcwNDYzKSxwPWIoMjcwNTQpLkJ1ZmZlcixWPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsLTE4OTQwMDc1ODgsLTg5OTQ5NzUxNF0sdz1uZXcgQXJyYXkoODApO2Z1bmN0aW9uIFAoKXt0''@;'; put 'put ''aGlzLmluaXQoKSx0aGlzLl93PXcsXy5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIEYoTil7cmV0dXJuIE48PDV8Tj4+PjI3fWZ1bmN0aW9uIFIoTil7cmV0dXJuIE48PDMwfE4+Pj4yfWZ1bmN0aW9uIHooTixPLEssWil7cmV0dXJuIDA9PT1OP08mS3x+TyZaOjI9PT1OP08mS3xPJlp8SyZa''@;'; put 'put ''Ok9eS15afUkoUCxfKSxQLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0aGlzfSxQLnByb3RvdHlwZS5fdXBk''@;'; put 'put ''YXRlPWZ1bmN0aW9uKE4pe2Zvcih2YXIgTz10aGlzLl93LEs9MHx0aGlzLl9hLFo9MHx0aGlzLl9iLFk9MHx0aGlzLl9jLFc9MHx0aGlzLl9kLHE9MHx0aGlzLl9lLGVlPTA7ZWU8MTY7KytlZSlPW2VlXT1OLnJlYWRJbnQzMkJFKDQqZWUpO2Zvcig7ZWU8ODA7KytlZSlPW2VlXT1PW2VlLTNd''@;'; put 'put ''Xk9bZWUtOF1eT1tlZS0xNF1eT1tlZS0xNl07Zm9yKHZhciBKPTA7Sjw4MDsrK0ope3ZhciByZT1+fihKLzIwKSxpZT1GKEspK3oocmUsWixZLFcpK3ErT1tKXStWW3JlXXwwO3E9VyxXPVksWT1SKFopLFo9SyxLPWllfXRoaXMuX2E9Syt0aGlzLl9hfDAsdGhpcy5fYj1aK3RoaXMuX2J8MCx0''@;'; put 'put ''aGlzLl9jPVkrdGhpcy5fY3wwLHRoaXMuX2Q9Vyt0aGlzLl9kfDAsdGhpcy5fZT1xK3RoaXMuX2V8MH0sUC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgTj1wLmFsbG9jVW5zYWZlKDIwKTtyZXR1cm4gTi53cml0ZUludDMyQkUoMHx0aGlzLl9hLDApLE4ud3JpdGVJbnQzMkJFKDB8''@;'; put 'put ''dGhpcy5fYiw0KSxOLndyaXRlSW50MzJCRSgwfHRoaXMuX2MsOCksTi53cml0ZUludDMyQkUoMHx0aGlzLl9kLDEyKSxOLndyaXRlSW50MzJCRSgwfHRoaXMuX2UsMTYpLE59LGNlLmV4cG9ydHM9UH0sNDg2Mzk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigzOGUzKSxfPWIoODgw''@;'; put 'put ''NzgpLHA9Yig1NDEyMiksVj1iKDQ0NjQ4KTtjZS5leHBvcnRzPWZ1bmN0aW9uKHcsUCxGKXtmb3IodmFyIFI9XyhQKSx6PVYuZixOPXAuZixPPTA7TzxSLmxlbmd0aDtPKyspe3ZhciBLPVJbT107IUkodyxLKSYmKCFGfHwhSShGLEspKSYmeih3LEssTihQLEspKX19fSw0ODY5MTooY2UsWCxi''@;'; put 'put ''KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDMzOTYzKSxfPWIoMTkxNTApLHA9SS5XZWFrTWFwO2NlLmV4cG9ydHM9XyhwKSYmL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhwKSl9LDQ4OTI4OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz0idmFzXHhl''@;'; put 'put ''MXJuYXAgaFx4ZTl0Zlx1MDE1MW4ga2VkZGVuIHN6ZXJkXHhlMW4gY3NceGZjdFx4ZjZydFx4ZjZrXHhmNm4gcFx4ZTludGVrZW4gc3pvbWJhdG9uIi5zcGxpdCgiICIpO2Z1bmN0aW9uIHAoUCxGLFIseil7dmFyIE49UDtzd2l0Y2goUil7Y2FzZSJzIjpyZXR1cm4genx8Rj8iblx4ZTloXHhl''@;'; put 'put ''MW55IG1ceGUxc29kcGVyYyI6Im5ceGU5aFx4ZTFueSBtXHhlMXNvZHBlcmNlIjtjYXNlInNzIjpyZXR1cm4gTisoenx8Rik/IiBtXHhlMXNvZHBlcmMiOiIgbVx4ZTFzb2RwZXJjZSI7Y2FzZSJtIjpyZXR1cm4iZWd5Iisoenx8Rj8iIHBlcmMiOiIgcGVyY2UiKTtjYXNlIm1tIjpyZXR1cm4g''@;'; put 'put ''Tisoenx8Rj8iIHBlcmMiOiIgcGVyY2UiKTtjYXNlImgiOnJldHVybiJlZ3kiKyh6fHxGPyIgXHhmM3JhIjoiIFx4ZjNyXHhlMWphIik7Y2FzZSJoaCI6cmV0dXJuIE4rKHp8fEY/IiBceGYzcmEiOiIgXHhmM3JceGUxamEiKTtjYXNlImQiOnJldHVybiJlZ3kiKyh6fHxGPyIgbmFwIjoiIG5h''@;'; put 'put ''cGphIik7Y2FzZSJkZCI6cmV0dXJuIE4rKHp8fEY/IiBuYXAiOiIgbmFwamEiKTtjYXNlIk0iOnJldHVybiJlZ3kiKyh6fHxGPyIgaFx4ZjNuYXAiOiIgaFx4ZjNuYXBqYSIpO2Nhc2UiTU0iOnJldHVybiBOKyh6fHxGPyIgaFx4ZjNuYXAiOiIgaFx4ZjNuYXBqYSIpO2Nhc2UieSI6cmV0dXJu''@;'; put 'put ''ImVneSIrKHp8fEY/IiBceGU5diI6IiBceGU5dmUiKTtjYXNlInl5IjpyZXR1cm4gTisoenx8Rj8iIFx4ZTl2IjoiIFx4ZTl2ZSIpfXJldHVybiIifWZ1bmN0aW9uIFYoUCl7cmV0dXJuKFA/IiI6IlttXHhmYWx0XSAiKSsiWyIrX1t0aGlzLmRheSgpXSsiXSBMVFsta29yXSJ9SS5kZWZpbmVM''@;'; put 'put ''b2NhbGUoImh1Iix7bW9udGhzOiJqYW51XHhlMXJfZmVicnVceGUxcl9tXHhlMXJjaXVzX1x4ZTFwcmlsaXNfbVx4ZTFqdXNfalx4ZmFuaXVzX2pceGZhbGl1c19hdWd1c3p0dXNfc3plcHRlbWJlcl9va3RceGYzYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0''@;'; put 'put ''OiJqYW4uX2ZlYi5fbVx4ZTFyYy5fXHhlMXByLl9tXHhlMWouX2pceGZhbi5falx4ZmFsLl9hdWcuX3N6ZXB0Ll9va3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJ2YXNceGUxcm5hcF9oXHhlOXRmXHUwMTUxX2tlZGRfc3plcmRhX2NzXHhm''@;'; put 'put ''Y3RceGY2cnRceGY2a19wXHhlOW50ZWtfc3pvbWJhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJ2YXNfaFx4ZTl0X2tlZGRfc3plX2NzXHhmY3RfcFx4ZTluX3N6byIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoidl9oX2tfc3plX2NzX3Bfc3pvIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9y''@;'; put 'put ''bWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJZWVlZLk1NLkRELiIsTEw6IllZWVkuIE1NTU0gRC4iLExMTDoiWVlZWS4gTU1NTSBELiBIOm1tIixMTExMOiJZWVlZLiBNTU1NIEQuLCBkZGRkIEg6bW0ifSxtZXJpZGllbVBhcnNlOi9kZXxkdS9pLGlzUE06ZnVuY3Rpb24oUCl7cmV0''@;'; put 'put ''dXJuInUiPT09UC5jaGFyQXQoMSkudG9Mb3dlckNhc2UoKX0sbWVyaWRpZW06ZnVuY3Rpb24oUCxGLFIpe3JldHVybiBQPDEyPyEwPT09Uj8iZGUiOiJERSI6ITA9PT1SPyJkdSI6IkRVIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlttYV0gTFRbLWtvcl0iLG5leHREYXk6Iltob2xuYXBdIExUWy1r''@;'; put 'put ''b3JdIixuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiBWLmNhbGwodGhpcywhMCl9LGxhc3REYXk6Ilt0ZWduYXBdIExUWy1rb3JdIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiBWLmNhbGwodGhpcywhMSl9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIG1ceGZh''@;'; put 'put ''bHZhIixwYXN0OiIlcyIsczpwLHNzOnAsbTpwLG1tOnAsaDpwLGhoOnAsZDpwLGRkOnAsTTpwLE1NOnAseTpwLHl5OnB9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw0OTA0MDpmdW5jdGlv''@;'; put 'put ''bihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInRsLXBoIix7bW9udGhzOiJFbmVyb19QZWJyZXJvX01hcnNvX0FicmlsX01heW9fSHVueW9fSHVseW9fQWdvc3RvX1NldHllbWJyZV9Pa3R1YnJlX05vYnllbWJyZV9EaXN5ZW1icmUiLnNwbGl0KCJf''@;'; put 'put ''IiksbW9udGhzU2hvcnQ6IkVuZV9QZWJfTWFyX0Ficl9NYXlfSHVuX0h1bF9BZ29fU2V0X09rdF9Ob2JfRGlzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJMaW5nZ29fTHVuZXNfTWFydGVzX01peWVya3VsZXNfSHV3ZWJlc19CaXllcm5lc19TYWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9y''@;'; put 'put ''dDoiTGluX0x1bl9NYXJfTWl5X0h1d19CaXlfU2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJMaV9MdV9NYV9NaV9IdV9CaV9TYWIiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiTU0vRC9ZWVlZIixMTDoiTU1NTSBELCBZWVlZIixM''@;'; put 'put ''TEw6Ik1NTU0gRCwgWVlZWSBISDptbSIsTExMTDoiZGRkZCwgTU1NTSBERCwgWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJMVCBbbmdheW9uZyBhcmF3XSIsbmV4dERheToiW0J1a2FzIG5nXSBMVCIsbmV4dFdlZWs6IkxUIFtzYSBzdXN1bm9kIG5hXSBkZGRkIixsYXN0RGF5OiJM''@;'; put 'put ''VCBba2FoYXBvbl0iLGxhc3RXZWVrOiJMVCBbbm9vbmcgbmFrYXJhYW5nXSBkZGRkIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJzYSBsb29iIG5nICVzIixwYXN0OiIlcyBhbmcgbmFrYWxpcGFzIixzOiJpbGFuZyBzZWd1bmRvIixzczoiJWQgc2VndW5kbyIsbToiaXNh''@;'; put 'put ''bmcgbWludXRvIixtbToiJWQgbWludXRvIixoOiJpc2FuZyBvcmFzIixoaDoiJWQgb3JhcyIsZDoiaXNhbmcgYXJhdyIsZGQ6IiVkIGFyYXciLE06ImlzYW5nIGJ1d2FuIixNTToiJWQgYnV3YW4iLHk6ImlzYW5nIHRhb24iLHl5OiIlZCB0YW9uIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTov''@;'; put 'put ''XGR7MSwyfS8sb3JkaW5hbDpmdW5jdGlvbihwKXtyZXR1cm4gcH0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sNDkxMzI6Y2U9PnsidXNlIHN0cmljdCI7dmFyIGI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxJPU1hdGgubWF4LHA9ZnVuY3Rpb24oRixSKXtmb3IodmFyIHo9''@;'; put 'put ''W10sTj0wO048Ri5sZW5ndGg7Tis9MSl6W05dPUZbTl07Zm9yKHZhciBPPTA7TzxSLmxlbmd0aDtPKz0xKXpbTytGLmxlbmd0aF09UltPXTtyZXR1cm4gen07Y2UuZXhwb3J0cz1mdW5jdGlvbihGKXt2YXIgUj10aGlzO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBSfHwiW29iamVjdCBGdW5jdGlv''@;'; put 'put ''bl0iIT09Yi5hcHBseShSKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICIrUik7Zm9yKHZhciBOLHo9ZnVuY3Rpb24oRil7Zm9yKHZhciB6PVtdLE49MSxPPTA7TjxGLmxlbmd0aDtOKz0xLE8rPTEpeltPXT1GW05d''@;'; put 'put ''O3JldHVybiB6fShhcmd1bWVudHMpLEs9SSgwLFIubGVuZ3RoLXoubGVuZ3RoKSxaPVtdLFk9MDtZPEs7WSsrKVpbWV09IiQiK1k7aWYoTj1GdW5jdGlvbigiYmluZGVyIiwicmV0dXJuIGZ1bmN0aW9uICgiK2Z1bmN0aW9uKFApe2Zvcih2YXIgUj0iIix6PTA7ejxQLmxlbmd0aDt6Kz0xKVIr''@;'; put 'put ''PVBbel0seisxPFAubGVuZ3RoJiYoUis9IiwiKTtyZXR1cm4gUn0oWikrIil7IHJldHVybiBiaW5kZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOyB9IikoZnVuY3Rpb24oKXtpZih0aGlzIGluc3RhbmNlb2YgTil7dmFyIHE9Ui5hcHBseSh0aGlzLHAoeixhcmd1bWVudHMpKTtyZXR1cm4gT2Jq''@;'; put 'put ''ZWN0KHEpPT09cT9xOnRoaXN9cmV0dXJuIFIuYXBwbHkoRixwKHosYXJndW1lbnRzKSl9KSxSLnByb3RvdHlwZSl7dmFyIFc9ZnVuY3Rpb24oKXt9O1cucHJvdG90eXBlPVIucHJvdG90eXBlLE4ucHJvdG90eXBlPW5ldyBXLFcucHJvdG90eXBlPW51bGx9cmV0dXJuIE59fSw0OTUzNzooY2Us''@;'; put 'put ''WCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDI4MzY3KSxfPWIoMzM5NjMpLHA9Yig0MDIyMCksVj1iKDMyOTMwKSx3PSJXZWJBc3NlbWJseSIsUD1fW3ddLEY9NyE9PW5ldyBFcnJvcigiZSIse2NhdXNlOjd9KS5jYXVzZSxSPWZ1bmN0aW9uKE4sTyl7dmFyIEs9e307S1tOXT1WKE4sTyxG''@;'; put 'put ''KSxJKHtnbG9iYWw6ITAsY29uc3RydWN0b3I6ITAsYXJpdHk6MSxmb3JjZWQ6Rn0sSyl9LHo9ZnVuY3Rpb24oTixPKXtpZihQJiZQW05dKXt2YXIgSz17fTtLW05dPVYodysiLiIrTixPLEYpLEkoe3RhcmdldDp3LHN0YXQ6ITAsY29uc3RydWN0b3I6ITAsYXJpdHk6MSxmb3JjZWQ6Rn0sSyl9''@;'; put 'put ''fTtSKCJFcnJvciIsZnVuY3Rpb24oTil7cmV0dXJuIGZ1bmN0aW9uKEspe3JldHVybiBwKE4sdGhpcyxhcmd1bWVudHMpfX0pLFIoIkV2YWxFcnJvciIsZnVuY3Rpb24oTil7cmV0dXJuIGZ1bmN0aW9uKEspe3JldHVybiBwKE4sdGhpcyxhcmd1bWVudHMpfX0pLFIoIlJhbmdlRXJyb3IiLGZ1''@;'; put 'put ''bmN0aW9uKE4pe3JldHVybiBmdW5jdGlvbihLKXtyZXR1cm4gcChOLHRoaXMsYXJndW1lbnRzKX19KSxSKCJSZWZlcmVuY2VFcnJvciIsZnVuY3Rpb24oTil7cmV0dXJuIGZ1bmN0aW9uKEspe3JldHVybiBwKE4sdGhpcyxhcmd1bWVudHMpfX0pLFIoIlN5bnRheEVycm9yIixmdW5jdGlvbihO''@;'; put 'put ''KXtyZXR1cm4gZnVuY3Rpb24oSyl7cmV0dXJuIHAoTix0aGlzLGFyZ3VtZW50cyl9fSksUigiVHlwZUVycm9yIixmdW5jdGlvbihOKXtyZXR1cm4gZnVuY3Rpb24oSyl7cmV0dXJuIHAoTix0aGlzLGFyZ3VtZW50cyl9fSksUigiVVJJRXJyb3IiLGZ1bmN0aW9uKE4pe3JldHVybiBmdW5jdGlv''@;'; put 'put ''bihLKXtyZXR1cm4gcChOLHRoaXMsYXJndW1lbnRzKX19KSx6KCJDb21waWxlRXJyb3IiLGZ1bmN0aW9uKE4pe3JldHVybiBmdW5jdGlvbihLKXtyZXR1cm4gcChOLHRoaXMsYXJndW1lbnRzKX19KSx6KCJMaW5rRXJyb3IiLGZ1bmN0aW9uKE4pe3JldHVybiBmdW5jdGlvbihLKXtyZXR1cm4g''@;'; put 'put ''cChOLHRoaXMsYXJndW1lbnRzKX19KSx6KCJSdW50aW1lRXJyb3IiLGZ1bmN0aW9uKE4pe3JldHVybiBmdW5jdGlvbihLKXtyZXR1cm4gcChOLHRoaXMsYXJndW1lbnRzKX19KX0sNDk2MDk6KGNlLFgsYik9Pnt2YXIgST1YO0kuYmlnbnVtPWIoOTY4NjcpLEkuZGVmaW5lPWIoMTY2MjYpLmRl''@;'; put 'put ''ZmluZSxJLmJhc2U9YigxNTA2NiksSS5jb25zdGFudHM9Yig0Nzc0MCksSS5kZWNvZGVycz1iKDkxNTU4KSxJLmVuY29kZXJzPWIoMjI3MTQpfSw1MDkyNzpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gXyhXLHEsZWUpe3JldHVybiBXKyIgIitm''@;'; put 'put ''dW5jdGlvbiB3KFcscSl7cmV0dXJuIDI9PT1xP2Z1bmN0aW9uIFAoVyl7dmFyIHE9e206InYiLGI6InYiLGQ6InoifTtyZXR1cm4gdm9pZCAwPT09cVtXLmNoYXJBdCgwKV0/VzpxW1cuY2hhckF0KDApXStXLnN1YnN0cmluZygxKX0oVyk6V30oe21tOiJtdW51dGVubiIsTU06Im1peiIsZGQ6''@;'; put 'put ''ImRldmV6aCJ9W2VlXSxXKX1mdW5jdGlvbiBWKFcpe3JldHVybiBXPjk/VihXJTEwKTpXfXZhciBGPVsvXmdlbi9pLC9eY1tcdTAyYmNcJ11od2UvaSwvXm1ldS9pLC9eZWJyL2ksL15tYWUvaSwvXihtZXp8ZXZlKS9pLC9eZ291L2ksL15lb3MvaSwvXmd3ZS9pLC9eaGVyL2ksL15kdS9pLC9e''@;'; put 'put ''a2VyL2ldLFI9L14oZ2VudmVyfGNbXHUwMmJjXCddaHdldnJlcnxtZXVyemh8ZWJyZWx8bWFlfG1lemhldmVufGdvdWVyZXxlb3N0fGd3ZW5nb2xvfGhlcmV8ZHV8a2VyenV8Z2VufGNbXHUwMmJjXCddaHdlfG1ldXxlYnJ8bWFlfGV2ZXxnb3V8ZW9zfGd3ZXxoZXJ8ZHV8a2VyKS9pLFo9Wy9e''@;'; put 'put ''U3UvaSwvXkx1L2ksL15NZShbXnJdfCQpL2ksL15NZXIvaSwvXllhL2ksL15Hdy9pLC9eU2EvaV07SS5kZWZpbmVMb2NhbGUoImJyIix7bW9udGhzOiJHZW52ZXJfQ1x1MDJiY2h3ZXZyZXJfTWV1cnpoX0VicmVsX01hZV9NZXpoZXZlbl9Hb3VlcmVfRW9zdF9Hd2VuZ29sb19IZXJlX0R1X0tl''@;'; put 'put ''cnp1Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJHZW5fQ1x1MDJiY2h3ZV9NZXVfRWJyX01hZV9FdmVfR291X0Vvc19Hd2VfSGVyX0R1X0tlciIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VsX0x1bl9NZXVyemhfTWVyY1x1MDJiY2hlcl9ZYW91X0d3ZW5lcl9TYWRvcm4iLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXNTaG9ydDoiU3VsX0x1bl9NZXVfTWVyX1lhb19Hd2VfU2FkIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9MdV9NZV9NZXJfWWFfR3dfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZTpaLGZ1bGxXZWVrZGF5c1BhcnNlOlsvXnN1bC9pLC9ebHVuL2ksL15tZXVyemgvaSwv''@;'; put 'put ''Xm1lcmNbXHUwMmJjXCddaGVyL2ksL155YW91L2ksL15nd2VuZXIvaSwvXnNhZG9ybi9pXSxzaG9ydFdlZWtkYXlzUGFyc2U6Wy9eU3VsL2ksL15MdW4vaSwvXk1ldS9pLC9eTWVyL2ksL15ZYW8vaSwvXkd3ZS9pLC9eU2FkL2ldLG1pbldlZWtkYXlzUGFyc2U6Wixtb250aHNSZWdleDpSLG1v''@;'; put 'put ''bnRoc1Nob3J0UmVnZXg6Uixtb250aHNTdHJpY3RSZWdleDovXihnZW52ZXJ8Y1tcdTAyYmNcJ11od2V2cmVyfG1ldXJ6aHxlYnJlbHxtYWV8bWV6aGV2ZW58Z291ZXJlfGVvc3R8Z3dlbmdvbG98aGVyZXxkdXxrZXJ6dSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGdlbnxjW1x1MDJi''@;'; put 'put ''Y1wnXWh3ZXxtZXV8ZWJyfG1hZXxldmV8Z291fGVvc3xnd2V8aGVyfGR1fGtlcikvaSxtb250aHNQYXJzZTpGLGxvbmdNb250aHNQYXJzZTpGLHNob3J0TW9udGhzUGFyc2U6Rixsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBb''@;'; put 'put ''YSB2aXpdIE1NTU0gWVlZWSIsTExMOiJEIFthIHZpel0gTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIFthIHZpel0gTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIaXppdiBkYV0gTFQiLG5leHREYXk6IltXYXJjXHUwMmJjaG9hemggZGFdIExUIixuZXh0V2Vl''@;'; put 'put ''azoiZGRkZCBbZGFdIExUIixsYXN0RGF5OiJbRGVjXHUwMmJjaCBkYV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtwYXNldCBkYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImEtYmVubiAlcyIscGFzdDoiJXMgXHUwMmJjem8iLHM6InVuIG5lYmV1ZCBzZWdvbmRlbm5v''@;'; put 'put ''XHhmOSIsc3M6IiVkIGVpbGVubiIsbToidXIgdnVudXRlbm4iLG1tOl8saDoidW4gZXVyIixoaDoiJWQgZXVyIixkOiJ1biBkZXZlemgiLGRkOl8sTToidXIgbWl6IixNTTpfLHk6InVyIGJsb2F6Iix5eTpmdW5jdGlvbiBwKFcpe3N3aXRjaChWKFcpKXtjYXNlIDE6Y2FzZSAzOmNhc2UgNDpj''@;'; put 'put ''YXNlIDU6Y2FzZSA5OnJldHVybiBXKyIgYmxvYXoiO2RlZmF1bHQ6cmV0dXJuIFcrIiB2bG9heiJ9fX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShhXHhmMXx2ZXQpLyxvcmRpbmFsOmZ1bmN0aW9uKFcpe3JldHVybiBXKygxPT09Vz8iYVx4ZjEiOiJ2ZXQiKX0sd2Vlazp7ZG93''@;'; put 'put ''OjEsZG95OjR9LG1lcmlkaWVtUGFyc2U6L2EubS58Zy5tLi8saXNQTTpmdW5jdGlvbihXKXtyZXR1cm4iZy5tLiI9PT1XfSxtZXJpZGllbTpmdW5jdGlvbihXLHEsZWUpe3JldHVybiBXPDEyPyJhLm0uIjoiZy5tLiJ9fSl9KGIoOTc1ODYpKX0sNTEwMDQ6ZnVuY3Rpb24oY2UsWCxiKXshZnVu''@;'; put 'put ''Y3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF8oVix3LFApe3ZhciBSPSIgIjtyZXR1cm4oViUxMDA+PTIwfHxWPj0xMDAmJlYlMTAwPT0wKSYmKFI9IiBkZSAiKSxWK1Ire3NzOiJzZWN1bmRlIixtbToibWludXRlIixoaDoib3JlIixkZDoiemlsZSIsd3c6InNcdTAxMDNwdFx1MDEw''@;'; put 'put ''M21ceGUybmkiLE1NOiJsdW5pIix5eToiYW5pIn1bUF19SS5kZWZpbmVMb2NhbGUoInJvIix7bW9udGhzOiJpYW51YXJpZV9mZWJydWFyaWVfbWFydGllX2FwcmlsaWVfbWFpX2l1bmllX2l1bGllX2F1Z3VzdF9zZXB0ZW1icmllX29jdG9tYnJpZV9ub2llbWJyaWVfZGVjZW1icmllIi5zcGxp''@;'; put 'put ''dCgiXyIpLG1vbnRoc1Nob3J0OiJpYW4uX2ZlYi5fbWFydC5fYXByLl9tYWlfaXVuLl9pdWwuX2F1Zy5fc2VwdC5fb2N0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiZHVtaW5pY1x1MDEwM19sdW5pX21hclx1MDIxYmlfbWllcmN1cmlfam9p''@;'; put 'put ''X3ZpbmVyaV9zXHhlMm1iXHUwMTAzdFx1MDEwMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJEdW1fTHVuX01hcl9NaWVfSm9pX1Zpbl9TXHhlMm0iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkR1X0x1X01hX01pX0pvX1ZpX1NceGUyIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntM''@;'; put 'put ''VDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbYXppIGxhXSBMVCIsbmV4dERheToiW21ceGUyaW5lIGxhXSBM''@;'; put 'put ''VCIsbmV4dFdlZWs6ImRkZGQgW2xhXSBMVCIsbGFzdERheToiW2llcmkgbGFdIExUIixsYXN0V2VlazoiW2Zvc3RhXSBkZGRkIFtsYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InBlc3RlICVzIixwYXN0OiIlcyBceGVlbiB1cm1cdTAxMDMiLHM6ImNceGUydGV2''@;'; put 'put ''YSBzZWN1bmRlIixzczpfLG06InVuIG1pbnV0IixtbTpfLGg6Im8gb3JcdTAxMDMiLGhoOl8sZDoibyB6aSIsZGQ6Xyx3OiJvIHNcdTAxMDNwdFx1MDEwM21ceGUyblx1MDEwMyIsd3c6XyxNOiJvIGx1blx1MDEwMyIsTU06Xyx5OiJ1biBhbiIseXk6X30sd2Vlazp7ZG93OjEsZG95Ojd9fSl9''@;'; put 'put ''KGIoOTc1ODYpKX0sNTEwNjk6KCk9Pnt9LDUxMzI2OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBwKFAsRixSKXtyZXR1cm4ibSI9PT1SP0Y/Ilx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzMCI6Ilx1MDQzY1x1MDQzOFx1MDQz''@;'; put 'put ''ZFx1MDQ0M1x1MDQ0Mlx1MDQ0MyI6UCsiICIrZnVuY3Rpb24gXyhQLEYpe3ZhciBSPVAuc3BsaXQoIl8iKTtyZXR1cm4gRiUxMD09MSYmRiUxMDAhPTExP1JbMF06RiUxMD49MiYmRiUxMDw9NCYmKEYlMTAwPDEwfHxGJTEwMD49MjApP1JbMV06UlsyXX0oe3NzOkY/Ilx1MDQ0MVx1MDQzNVx1''@;'; put 'put ''MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzMF9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0NGJfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IjoiXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDQzX1x1MDQ0MVx1MDQz''@;'; put 'put ''NVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0Yl9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLG1tOkY/Ilx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzMF9cdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0NGJfXHUwNDNjXHUwNDM4XHUw''@;'; put 'put ''NDNkXHUwNDQzXHUwNDQyIjoiXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDQzX1x1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQ0Yl9cdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDIiLGhoOiJcdTA0NDdcdTA0MzBcdTA0NDFfXHUwNDQ3XHUwNDMwXHUwNDQx''@;'; put 'put ''XHUwNDMwX1x1MDQ0N1x1MDQzMFx1MDQ0MVx1MDQzZVx1MDQzMiIsZGQ6Ilx1MDQzNFx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0MzRcdTA0M2RcdTA0NGZfXHUwNDM0XHUwNDNkXHUwNDM1XHUwNDM5Iix3dzoiXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDRmX1x1MDQzZFx1MDQz''@;'; put 'put ''NVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQzOF9cdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0NGMiLE1NOiJcdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDZfXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQ2XHUwNDMwX1x1MDQzY1x1MDQzNVx1MDQ0MVx1MDQ0Zlx1MDQ0''@;'; put 'put ''Nlx1MDQzNVx1MDQzMiIseXk6Ilx1MDQzM1x1MDQzZVx1MDQzNF9cdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzBfXHUwNDNiXHUwNDM1XHUwNDQyIn1bUl0sK1ApfXZhciBWPVsvXlx1MDQ0Zlx1MDQzZFx1MDQzMi9pLC9eXHUwNDQ0XHUwNDM1XHUwNDMyL2ksL15cdTA0M2NcdTA0MzBcdTA0NDAv''@;'; put 'put ''aSwvXlx1MDQzMFx1MDQzZlx1MDQ0MC9pLC9eXHUwNDNjXHUwNDMwW1x1MDQzOVx1MDQ0Zl0vaSwvXlx1MDQzOFx1MDQ0ZVx1MDQzZC9pLC9eXHUwNDM4XHUwNDRlXHUwNDNiL2ksL15cdTA0MzBcdTA0MzJcdTA0MzMvaSwvXlx1MDQ0MVx1MDQzNVx1MDQzZC9pLC9eXHUwNDNlXHUwNDNhXHUw''@;'; put 'put ''NDQyL2ksL15cdTA0M2RcdTA0M2VcdTA0NGYvaSwvXlx1MDQzNFx1MDQzNVx1MDQzYS9pXTtJLmRlZmluZUxvY2FsZSgicnUiLHttb250aHM6e2Zvcm1hdDoiXHUwNDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQwXHUwNDRmX1x1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQzMFx1MDQzYlx1''@;'; put 'put ''MDQ0Zl9cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJcdTA0MzBfXHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDNiXHUwNDRmX1x1MDQzY1x1MDQzMFx1MDQ0Zl9cdTA0MzhcdTA0NGVcdTA0M2RcdTA0NGZfXHUwNDM4XHUwNDRlXHUwNDNiXHUwNDRmX1x1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0''@;'; put 'put ''M1x1MDQ0MVx1MDQ0Mlx1MDQzMF9cdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBcdTA0NGZfXHUwNDNlXHUwNDNhXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDRmX1x1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Zl9cdTA0MzRcdTA0MzVcdTA0''@;'; put 'put ''M2FcdTA0MzBcdTA0MzFcdTA0NDBcdTA0NGYiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToiXHUwNDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQwXHUwNDRjX1x1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQzMFx1MDQzYlx1MDQ0Y19cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMwXHUw''@;'; put 'put ''NDNmXHUwNDQwXHUwNDM1XHUwNDNiXHUwNDRjX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0MzhcdTA0NGVcdTA0M2RcdTA0NGNfXHUwNDM4XHUwNDRlXHUwNDNiXHUwNDRjX1x1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Ml9cdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDJcdTA0NGZc''@;'; put 'put ''dTA0MzFcdTA0NDBcdTA0NGNfXHUwNDNlXHUwNDNhXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDRjX1x1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Y19cdTA0MzRcdTA0MzVcdTA0M2FcdTA0MzBcdTA0MzFcdTA0NDBcdTA0NGMiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0''@;'; put 'put ''Ontmb3JtYXQ6Ilx1MDQ0Zlx1MDQzZFx1MDQzMi5fXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwLl9cdTA0M2NcdTA0MzBcdTA0NDAuX1x1MDQzMFx1MDQzZlx1MDQ0MC5fXHUwNDNjXHUwNDMwXHUwNDRmX1x1MDQzOFx1MDQ0ZVx1MDQzZFx1MDQ0Zl9cdTA0MzhcdTA0NGVcdTA0M2JcdTA0NGZf''@;'; put 'put ''XHUwNDMwXHUwNDMyXHUwNDMzLl9cdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDIuX1x1MDQzZVx1MDQzYVx1MDQ0Mi5fXHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxLl9cdTA0MzRcdTA0MzVcdTA0M2EuIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1MDQ0Zlx1MDQzZFx1MDQzMi5fXHUwNDQ0XHUw''@;'; put 'put ''NDM1XHUwNDMyXHUwNDQwLl9cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMwXHUwNDNmXHUwNDQwLl9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDM4XHUwNDRlXHUwNDNkXHUwNDRjX1x1MDQzOFx1MDQ0ZVx1MDQzYlx1MDQ0Y19cdTA0MzBcdTA0MzJcdTA0MzMuX1x1MDQ0MVx1MDQzNVx1''@;'; put 'put ''MDQzZFx1MDQ0Mi5fXHUwNDNlXHUwNDNhXHUwNDQyLl9cdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzEuX1x1MDQzNFx1MDQzNVx1MDQzYS4iLnNwbGl0KCJfIil9LHdlZWtkYXlzOntzdGFuZGFsb25lOiJcdTA0MzJcdTA0M2VcdTA0NDFcdTA0M2FcdTA0NDBcdTA0MzVcdTA0NDFcdTA0MzVcdTA0''@;'; put 'put ''M2RcdTA0NGNcdTA0MzVfXHUwNDNmXHUwNDNlXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDRjXHUwNDNkXHUwNDM4XHUwNDNhX1x1MDQzMlx1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzZFx1MDQzOFx1MDQzYV9cdTA0NDFcdTA0NDBcdTA0MzVcdTA0MzRcdTA0MzBfXHUwNDQ3XHUw''@;'; put 'put ''NDM1XHUwNDQyXHUwNDMyXHUwNDM1XHUwNDQwXHUwNDMzX1x1MDQzZlx1MDQ0Zlx1MDQ0Mlx1MDQzZFx1MDQzOFx1MDQ0Nlx1MDQzMF9cdTA0NDFcdTA0NDNcdTA0MzFcdTA0MzFcdTA0M2VcdTA0NDJcdTA0MzAiLnNwbGl0KCJfIiksZm9ybWF0OiJcdTA0MzJcdTA0M2VcdTA0NDFcdTA0M2Fc''@;'; put 'put ''dTA0NDBcdTA0MzVcdTA0NDFcdTA0MzVcdTA0M2RcdTA0NGNcdTA0MzVfXHUwNDNmXHUwNDNlXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDRjXHUwNDNkXHUwNDM4XHUwNDNhX1x1MDQzMlx1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzZFx1MDQzOFx1MDQzYV9cdTA0NDFcdTA0NDBc''@;'; put 'put ''dTA0MzVcdTA0MzRcdTA0NDNfXHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDM1XHUwNDQwXHUwNDMzX1x1MDQzZlx1MDQ0Zlx1MDQ0Mlx1MDQzZFx1MDQzOFx1MDQ0Nlx1MDQ0M19cdTA0NDFcdTA0NDNcdTA0MzFcdTA0MzFcdTA0M2VcdTA0NDJcdTA0NDMiLnNwbGl0KCJfIiksaXNGb3Jt''@;'; put 'put ''YXQ6L1xbID9bXHUwNDEyXHUwNDMyXSA/KD86XHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQ4XHUwNDNiXHUwNDQzXHUwNDRlfFx1MDQ0MVx1MDQzYlx1MDQzNVx1MDQzNFx1MDQ0M1x1MDQ0ZVx1MDQ0OVx1MDQ0M1x1MDQ0ZXxcdTA0NGRcdTA0NDJcdTA0NDMpPyA/XSA/ZGRkZC99LHdlZWtkYXlz''@;'; put 'put ''U2hvcnQ6Ilx1MDQzMlx1MDQ0MV9cdTA0M2ZcdTA0M2RfXHUwNDMyXHUwNDQyX1x1MDQ0MVx1MDQ0MF9cdTA0NDdcdTA0NDJfXHUwNDNmXHUwNDQyX1x1MDQ0MVx1MDQzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDMyXHUwNDQxX1x1MDQzZlx1MDQzZF9cdTA0MzJcdTA0NDJfXHUw''@;'; put 'put ''NDQxXHUwNDQwX1x1MDQ0N1x1MDQ0Ml9cdTA0M2ZcdTA0NDJfXHUwNDQxXHUwNDMxIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlOlYsbG9uZ01vbnRoc1BhcnNlOlYsc2hvcnRNb250aHNQYXJzZTpWLG1vbnRoc1JlZ2V4Oi9eKFx1MDQ0Zlx1MDQzZFx1MDQzMlx1MDQzMFx1MDQ0MFtcdTA0NGNc''@;'; put 'put ''dTA0NGZdfFx1MDQ0Zlx1MDQzZFx1MDQzMlwuP3xcdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0MzBcdTA0M2JbXHUwNDRjXHUwNDRmXXxcdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDA/XC4/fFx1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Mlx1MDQzMD98XHUwNDNjXHUwNDMwXHUwNDQwXC4/fFx1''@;'; put 'put ''MDQzMFx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzYltcdTA0NGNcdTA0NGZdfFx1MDQzMFx1MDQzZlx1MDQ0MFwuP3xcdTA0M2NcdTA0MzBbXHUwNDM5XHUwNDRmXXxcdTA0MzhcdTA0NGVcdTA0M2RbXHUwNDRjXHUwNDRmXXxcdTA0MzhcdTA0NGVcdTA0M2RcLj98XHUwNDM4XHUwNDRlXHUwNDNi''@;'; put 'put ''W1x1MDQ0Y1x1MDQ0Zl18XHUwNDM4XHUwNDRlXHUwNDNiXC4/fFx1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Mlx1MDQzMD98XHUwNDMwXHUwNDMyXHUwNDMzXC4/fFx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFtcdTA0NGNcdTA0NGZdfFx1MDQ0''@;'; put 'put ''MVx1MDQzNVx1MDQzZFx1MDQ0Mj9cLj98XHUwNDNlXHUwNDNhXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDNlXHUwNDNhXHUwNDQyXC4/fFx1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMVx1MDQ0MFtcdTA0NGNcdTA0NGZdfFx1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQz''@;'; put 'put ''MT9cLj98XHUwNDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMxXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDM0XHUwNDM1XHUwNDNhXC4/KS9pLG1vbnRoc1Nob3J0UmVnZXg6L14oXHUwNDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDRmXHUwNDNkXHUwNDMy''@;'; put 'put ''XC4/fFx1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQzMFx1MDQzYltcdTA0NGNcdTA0NGZdfFx1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MD9cLj98XHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyXHUwNDMwP3xcdTA0M2NcdTA0MzBcdTA0NDBcLj98XHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM1XHUw''@;'; put 'put ''NDNiW1x1MDQ0Y1x1MDQ0Zl18XHUwNDMwXHUwNDNmXHUwNDQwXC4/fFx1MDQzY1x1MDQzMFtcdTA0MzlcdTA0NGZdfFx1MDQzOFx1MDQ0ZVx1MDQzZFtcdTA0NGNcdTA0NGZdfFx1MDQzOFx1MDQ0ZVx1MDQzZFwuP3xcdTA0MzhcdTA0NGVcdTA0M2JbXHUwNDRjXHUwNDRmXXxcdTA0MzhcdTA0''@;'; put 'put ''NGVcdTA0M2JcLj98XHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyXHUwNDMwP3xcdTA0MzBcdTA0MzJcdTA0MzNcLj98XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyP1wuP3xc''@;'; put 'put ''dTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0M2VcdTA0M2FcdTA0NDJcLj98XHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxP1wuP3xcdTA0MzRcdTA0MzVcdTA0M2Fc''@;'; put 'put ''dTA0MzBcdTA0MzFcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0MzRcdTA0MzVcdTA0M2FcLj8pL2ksbW9udGhzU3RyaWN0UmVnZXg6L14oXHUwNDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQwW1x1MDQ0Zlx1MDQ0Y118XHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiW1x1MDQ0''@;'; put 'put ''Zlx1MDQ0Y118XHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyXHUwNDMwP3xcdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JbXHUwNDRmXHUwNDRjXXxcdTA0M2NcdTA0MzBbXHUwNDRmXHUwNDM5XXxcdTA0MzhcdTA0NGVcdTA0M2RbXHUwNDRmXHUwNDRjXXxcdTA0MzhcdTA0NGVcdTA0M2Jb''@;'; put 'put ''XHUwNDRmXHUwNDRjXXxcdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJcdTA0MzA/fFx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFtcdTA0NGZcdTA0NGNdfFx1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFtcdTA0NGZcdTA0NGNd''@;'; put 'put ''fFx1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMVx1MDQ0MFtcdTA0NGZcdTA0NGNdfFx1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MFtcdTA0NGZcdTA0NGNdKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oXHUwNDRmXHUwNDNkXHUwNDMyXC58XHUwNDQ0XHUwNDM1XHUwNDMy''@;'; put 'put ''XHUwNDQwP1wufFx1MDQzY1x1MDQzMFx1MDQ0MFtcdTA0NDIuXXxcdTA0MzBcdTA0M2ZcdTA0NDBcLnxcdTA0M2NcdTA0MzBbXHUwNDRmXHUwNDM5XXxcdTA0MzhcdTA0NGVcdTA0M2RbXHUwNDRjXHUwNDRmLl18XHUwNDM4XHUwNDRlXHUwNDNiW1x1MDQ0Y1x1MDQ0Zi5dfFx1MDQzMFx1MDQz''@;'; put 'put ''Mlx1MDQzM1wufFx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mj9cLnxcdTA0M2VcdTA0M2FcdTA0NDJcLnxcdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzE/XC58XHUwNDM0XHUwNDM1XHUwNDNhXC4pL2ksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVki''@;'; put 'put ''LExMOiJEIE1NTU0gWVlZWSBcdTA0MzMuIixMTEw6IkQgTU1NTSBZWVlZIFx1MDQzMy4sIEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFx1MDQzMy4sIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQyMVx1MDQzNVx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzZFx1MDQ0ZiwgXHUw''@;'; put 'put ''NDMyXSBMVCIsbmV4dERheToiW1x1MDQxN1x1MDQzMFx1MDQzMlx1MDQ0Mlx1MDQ0MFx1MDQzMCwgXHUwNDMyXSBMVCIsbGFzdERheToiW1x1MDQxMlx1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMCwgXHUwNDMyXSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oUCl7aWYoUC53ZWVrKCk9PT10aGlzLndl''@;'; put 'put ''ZWsoKSlyZXR1cm4gMj09PXRoaXMuZGF5KCk/IltcdTA0MTJcdTA0M2VdIGRkZGQsIFtcdTA0MzJdIExUIjoiW1x1MDQxMl0gZGRkZCwgW1x1MDQzMl0gTFQiO3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIltcdTA0MTIgXHUwNDQxXHUwNDNiXHUwNDM1XHUwNDM0XHUwNDQzXHUw''@;'; put 'put ''NDRlXHUwNDQ5XHUwNDM1XHUwNDM1XSBkZGRkLCBbXHUwNDMyXSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6cmV0dXJuIltcdTA0MTIgXHUwNDQxXHUwNDNiXHUwNDM1XHUwNDM0XHUwNDQzXHUwNDRlXHUwNDQ5XHUwNDM4XHUwNDM5XSBkZGRkLCBbXHUwNDMyXSBMVCI7Y2FzZSAzOmNhc2Ug''@;'; put 'put ''NTpjYXNlIDY6cmV0dXJuIltcdTA0MTIgXHUwNDQxXHUwNDNiXHUwNDM1XHUwNDM0XHUwNDQzXHUwNDRlXHUwNDQ5XHUwNDQzXHUwNDRlXSBkZGRkLCBbXHUwNDMyXSBMVCJ9fSxsYXN0V2VlazpmdW5jdGlvbihQKXtpZihQLndlZWsoKT09PXRoaXMud2VlaygpKXJldHVybiAyPT09dGhpcy5k''@;'; put 'put ''YXkoKT8iW1x1MDQxMlx1MDQzZV0gZGRkZCwgW1x1MDQzMl0gTFQiOiJbXHUwNDEyXSBkZGRkLCBbXHUwNDMyXSBMVCI7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW1x1MDQxMiBcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0M2VcdTA0MzVdIGRkZGQsIFtcdTA0''@;'; put 'put ''MzJdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpyZXR1cm4iW1x1MDQxMiBcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0NGJcdTA0MzldIGRkZGQsIFtcdTA0MzJdIExUIjtjYXNlIDM6Y2FzZSA1OmNhc2UgNjpyZXR1cm4iW1x1MDQxMiBcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0''@;'; put 'put ''NDhcdTA0M2JcdTA0NDNcdTA0NGVdIGRkZGQsIFtcdTA0MzJdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzNVx1MDQzNyAlcyIscGFzdDoiJXMgXHUwNDNkXHUwNDMwXHUwNDM3XHUwNDMwXHUwNDM0IixzOiJcdTA0M2Rc''@;'; put 'put ''dTA0MzVcdTA0NDFcdTA0M2FcdTA0M2VcdTA0M2JcdTA0NGNcdTA0M2FcdTA0M2UgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixzczpwLG06cCxtbTpwLGg6Ilx1MDQ0N1x1MDQzMFx1MDQ0MSIsaGg6cCxkOiJcdTA0MzRcdTA0MzVcdTA0M2RcdTA0NGMiLGRkOnAsdzoi''@;'; put 'put ''XHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDRmIix3dzpwLE06Ilx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQ0Zlx1MDQ0NiIsTU06cCx5OiJcdTA0MzNcdTA0M2VcdTA0MzQiLHl5OnB9LG1lcmlkaWVtUGFyc2U6L1x1MDQzZFx1MDQzZVx1MDQ0N1x1MDQzOHxcdTA0NDNcdTA0NDJc''@;'; put 'put ''dTA0NDBcdTA0MzB8XHUwNDM0XHUwNDNkXHUwNDRmfFx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMC9pLGlzUE06ZnVuY3Rpb24oUCl7cmV0dXJuL14oXHUwNDM0XHUwNDNkXHUwNDRmfFx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMCkkLy50ZXN0KFApfSxt''@;'; put 'put ''ZXJpZGllbTpmdW5jdGlvbihQLEYsUil7cmV0dXJuIFA8ND8iXHUwNDNkXHUwNDNlXHUwNDQ3XHUwNDM4IjpQPDEyPyJcdTA0NDNcdTA0NDJcdTA0NDBcdTA0MzAiOlA8MTc/Ilx1MDQzNFx1MDQzZFx1MDQ0ZiI6Ilx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMCJ9LGRheU9m''@;'; put 'put ''TW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1MDQzOXxcdTA0MzNcdTA0M2V8XHUwNDRmKS8sb3JkaW5hbDpmdW5jdGlvbihQLEYpe3N3aXRjaChGKXtjYXNlIk0iOmNhc2UiZCI6Y2FzZSJEREQiOnJldHVybiBQKyItXHUwNDM5IjtjYXNlIkQiOnJldHVybiBQKyItXHUwNDMzXHUwNDNl''@;'; put 'put ''IjtjYXNlInciOmNhc2UiVyI6cmV0dXJuIFArIi1cdTA0NGYiO2RlZmF1bHQ6cmV0dXJuIFB9fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw1MTQxNjpjZT0+e2NlLmV4cG9ydHM9e2RvdWJsZXM6e3N0ZXA6NCxwb2ludHM6W1siZTYwZmNlOTNiNTllOWVjNTMwMTFhYWJjMjFj''@;'; put 'put ''MjNlOTdiMmEzMTM2OWI4N2E1YWU5YzQ0ZWU4OWUyYTZkZWMwYSIsImY3ZTM1MDczOTllNTk1OTI5ZGI5OWYzNGY1NzkzNzEwMTI5Njg5MWU0NGQyM2YwYmUxZjMyY2NlNjk2MTY4MjEiXSxbIjgyODIyNjMyMTJjNjA5ZDllYTJhNmUzZTE3MmRlMjM4ZDhjMzljYWJkNWFjMWNhMTA2NDZlMjNm''@;'; put 'put ''ZDVmNTE1MDgiLCIxMWY4YTgwOTg1NTdkZmU0NWU4MjU2ZTgzMGI2MGFjZTYyZDYxM2FjMmY3YjE3YmVkMzFiNmVhZmY2ZTI2Y2FmIl0sWyIxNzVlMTU5ZjcyOGI4NjVhNzJmOTljYzZjNmZjODQ2ZGUwYjkzODMzZmQyMjIyZWQ3M2ZjZTViNTUxZTViNzM5IiwiZDM1MDZlMGQ5ZTNjNzllYmE0''@;'; put 'put ''ZWY5N2E1MWZmNzFmNWVhY2I1OTU1YWRkMjQzNDVjNmVmYTZmZmVlOWZlZDY5NSJdLFsiMzYzZDkwZDQ0N2IwMGM5Yzk5Y2VhYzA1YjYyNjJlZTA1MzQ0MWM3ZTU1NTUyZmZlNTI2YmFkOGY4M2ZmNDY0MCIsIjRlMjczYWRmYzczMjIyMTk1M2I0NDUzOTdmMzM2MzE0NWI5YTg5MDA4MTk5ZWNi''@;'; put 'put ''NjIwMDNjN2YzYmVlOWRlOSJdLFsiOGI0YjVmMTY1ZGYzYzJiZThjNjI0NGI1Yjc0NTYzODg0M2U0YTc4MWExNWJjZDFiNjlmNzlhNTVkZmZkZjgwYyIsIjRhYWQwYTZmNjhkMzA4YjRiM2ZiZDc4MTNhYjBkYTA0ZjllMzM2NTQ2MTYyZWU1NmIzZWZmMGM2NWZkNGZkMzYiXSxbIjcyM2NiYWE2''@;'; put 'put ''ZTVkYjk5NmQ2YmY3NzFjMDBiZDU0OGM3YjcwMGRiZmZhNmMwZTc3YmNiNjExNTkyNTIzMmZjZGEiLCI5NmU4NjdiNTU5NWNjNDk4YTkyMTEzNzQ4ODgyNGQ2ZTI2NjBhMDY1Mzc3OTQ5NDgwMWRjMDY5ZDllYjM5ZjVmIl0sWyJlZWJmYTRkNDkzYmViZjk4YmE1ZmVlYzgxMmMyZDNiNTA5NDc5''@;'; put 'put ''NjEyMzdhOTE5ODM5YTUzM2VjYTBlN2RkN2ZhIiwiNWQ5YThjYTM5NzBlZjBmMjY5ZWU3ZWRhZjE3ODA4OWQ5YWU0Y2RjM2E3MTFmNzEyZGRmZDRmZGFlMWRlODk5OSJdLFsiMTAwZjQ0ZGE2OTZlNzE2NzI3OTFkMGEwOWI3YmRlNDU5ZjEyMTVhMjliM2MwM2JmZWZkNzgzNWIzOWE0OGRiMCIs''@;'; put 'put ''ImNkZDllMTMxOTJhMDBiNzcyZWM4ZjMzMDBjMDkwNjY2YjdmZjRhMThmZjUxOTVhYzBmYmQ1Y2Q2MmJjNjVhMDkiXSxbImUxMDMxYmUyNjJjN2VkMWIxZGM5MjI3YTRhMDRjMDE3YTc3ZjhkNDQ2NGYzYjM4NTJjOGFjZGU2ZTUzNGZkMmQiLCI5ZDcwNjE5Mjg5NDA0MDVlNmJiNmE0MTc2NTk3''@;'; put 'put ''NTM1YWYyOTJkZDQxOWUxY2VkNzlhNDRmMThmMjk0NTZhMDBkIl0sWyJmZWVhNmNhZTQ2ZDU1YjUzMGFjMjgzOWYxNDNiZDdlYzVjZjhiMjY2YTQxZDZhZjUyZDVlNjg4ZDkwOTQ2OTZkIiwiZTU3YzZiNmM5N2RjZTFiYWIwNmU0ZTEyYmYzZWNkNWM5ODFjODk1N2NjNDE0NDJkMzE1NWRlYmYx''@;'; put 'put ''ODA5MDA4OCJdLFsiZGE2N2E5MWQ5MTA0OWNkY2IzNjdiZTRiZTZmZmNhM2NmZWVkNjU3ZDgwODU4M2RlMzNmYTk3OGJjMWVjNmNiMSIsIjliYWNhYTM1NDgxNjQyYmM0MWY0NjNmN2VjOTc4MGU1ZGVjN2FkYzUwOGY3NDBhMTdlOWVhOGUyN2E2OGJlMWQiXSxbIjUzOTA0ZmFhMGIzMzRjZGRh''@;'; put 'put ''NmUwMDA5MzVlZjIyMTUxZWMwOGQwZjdiYjExMDY5ZjU3NTQ1Y2NjMWEzN2I3YzAiLCI1YmMwODdkMGJjODAxMDZkODhjOWVjY2FjMjBkM2MxYzEzOTk5OTgxZTE0NDM0Njk5ZGNiMDk2YjAyMjc3MWM4Il0sWyI4ZTdiY2QwYmQzNTk4M2E3NzE5Y2NhNzc2NGNhOTA2Nzc5YjUzYTA0M2E5Yjhi''@;'; put 'put ''Y2FlZmY5NTlmNDNhZDg2MDQ3IiwiMTBiNzc3MGIyYTNkYTRiMzk0MDMxMDQyMGNhOTUxNDU3OWU4OGUyZTQ3ZmQ2OGIzZWExMDA0N2U4NDYwMzcyYSJdLFsiMzg1ZWVkMzRjMWNkZmYyMWU2ZDA4MTg2ODliODFiZGU3MWE3ZjRmMTgzOTdlNjY5MGE4NDFlMTU5OWM0Mzg2MiIsIjI4M2JlYmMz''@;'; put 'put ''ZThlYTIzZjU2NzAxZGUxOWU5ZWJmNDU3NmIzMDRlZWMyMDg2ZGM4Y2MwNDU4ZmU1NTQyZTU0NTMiXSxbIjZmOWQ5YjgwM2VjZjE5MTYzN2M3M2E0NDEzZGZhMTgwZmRkZjg0YTU5NDdmYmM5YzYwNmVkODZjM2ZhYzNhNyIsIjdjODBjNjhlNjAzMDU5YmE2OWI4ZTJhMzBlNDVjNGQ0N2VhNGRk''@;'; put 'put ''MmY1YzI4MTAwMmQ4Njg5MDYwM2E4NDIxNjAiXSxbIjMzMjJkNDAxMjQzYzRlMjU4MmEyMTQ3YzEwNGQ2ZWNiZjc3NGQxNjNkYjBmNWU1MzEzYjdlMGU3NDJkMGU2YmQiLCI1NmU3MDc5N2U5NjY0ZWY1YmZiMDE5YmM0ZGRhZjliNzI4MDVmNjNlYTI4NzNhZjYyNGYzYTJlOTZjMjhiMmEwIl0s''@;'; put 'put ''WyI4NTY3MmM3ZDJkZTBiN2RhMmJkMTc3MGQ4OTY2NTg2ODc0MWIzZjlhZjc2NDMzOTc3MjFkNzRkMjgxMzRhYjgzIiwiN2M0ODFiOWI1YjQzYjJlYjYzNzQwNDliZmE2MmMyZTVlNzdmMTdmY2M1Mjk4ZjQ0YzhlMzA5NGY3OTAzMTNhNiJdLFsiOTQ4YmY4MDliMTk4OGE0NmIwNmM5ZjE5MTk0''@;'; put 'put ''MTNiMTBmOTIyNmM2MGY2Njg4MzJmZmQ5NTlhZjYwYzgyYTBhIiwiNTNhNTYyODU2ZGNiNjY0NmRjNmI3NGM1ZDFjMzQxOGM2ZDRkZmYwOGM5N2NkMmJlZDRjYjdmODhkOGM4ZTU4OSJdLFsiNjI2MGNlN2Y0NjE4MDFjMzRmMDY3Y2UwZjAyODczYThmMWIwZTQ0ZGZjNjk3NTJhY2NlY2Q4MTlm''@;'; put 'put ''MzhmZDhlOCIsImJjMmRhODJiNmZhNWI1NzFhN2YwOTA0OTc3NmExZWY3ZWNkMjkyMjM4MDUxYzE5OGMxYTg0ZTk1YjJiNGFlMTciXSxbImU1MDM3ZGUwYWZjMWQ4ZDQzZDgzNDg0MTRiYmY0MTAzMDQzZWM4ZjU3NWJmZGM0MzI5NTNjYzhkMjAzN2ZhMmQiLCI0NTcxNTM0YmFhOTRkM2I1Zjlm''@;'; put 'put ''OThkMDlmYjk5MGJkZGJkNWY1YjAzZWM0ODFmMTBlMGU1ZGM4NDFkNzU1YmRhIl0sWyJlMDYzNzJiMGY0YTIwN2FkZjVlYTkwNWU4ZjE3NzFiNGU3ZThkYmQxYzZhNmM1YjcyNTg2NmEwYWU0ZmNlNzI1IiwiN2E5MDg5NzRiY2UxOGNmZTEyYTI3YmIyYWQ1YTQ4OGNkNzQ4NGE3Nzg3MTA0ODcw''@;'; put 'put ''YjI3MDM0Zjk0ZWVlMzFkZCJdLFsiMjEzYzdhNzE1Y2Q1ZDQ1MzU4ZDBiYmY5ZGMwY2UwMjIwNGIxMGJkZGUyYTNmNTg1NDBhZDY5MDhkMDU1OTc1NCIsIjRiNmRhZDBiNWFlNDYyNTA3MDEzYWQwNjI0NWJhMTkwYmI0ODUwZjVmMzZhN2VlZGRmZjJjMjc1MzRiNDU4ZjIiXSxbIjRlN2MyNzJh''@;'; put 'put ''N2FmNGIzNGU4ZGJiOTM1MmE1NDE5YTg3ZTI4MzhjNzBhZGM2MmNkZGYwY2MzYTNiMDhmYmQ1M2MiLCIxNzc0OWM3NjZjOWQwYjE4ZTE2ZmQwOWY2ZGVmNjgxYjUzMGI5NjE0YmZmN2RkMzNlMGIzOTQxODE3ZGNhYWU2Il0sWyJmZWE3NGUzZGJlNzc4YjFiMTBmMjM4YWQ2MTY4NmFhNWM3NmUz''@;'; put 'put ''ZGIyYmU0MzA1NzYzMjQyN2UyODQwZmIyN2I2IiwiNmUwNTY4ZGI5YjBiMTMyOTdjZjY3NGRlY2NiNmFmOTMxMjZiNTk2Yjk3M2Y3Yjc3NzAxZDNkYjdmMjNjYjk2ZiJdLFsiNzZlNjQxMTNmNjc3Y2YwZTEwYTI1NzBkNTk5OTY4ZDMxNTQ0ZTE3OWI3NjA0MzI5NTJjMDJhNDQxN2JkZGUzOSIs''@;'; put 'put ''ImM5MGRkZjhkZWU0ZTk1Y2Y1NzcwNjZkNzA2ODFmMGQzNWUyYTMzZDJiNTZkMjAzMmI0YjE3NTJkMTkwMWFjMDEiXSxbImM3MzhjNTZiMDNiMmFiZTFlODI4MWJhYTc0M2Y4ZjlhOGY3Y2M2NDNkZjI2Y2JlZTNhYjE1MDI0MmJjYmI4OTEiLCI4OTNmYjU3ODk1MWFkMjUzN2Y3MThmMmVhY2Jm''@;'; put 'put ''YmJiYjgyMzE0ZWVmNzg4MGNmZTkxN2U3MzVkOTY5OWE4NGMzIl0sWyJkODk1NjI2NTQ4YjY1YjgxZTI2NGM3NjM3Yzk3Mjg3N2QxZDcyZTVmM2E5MjUwMTQzNzJlOWY2NTg4ZjZjMTRiIiwiZmViZmFhMzhmMmJjN2VhZTcyOGVjNjA4MThjMzQwZWIwMzQyOGQ2MzJiYjA2N2UxNzkzNjNlZDc1''@;'; put 'put ''ZDdkOTkxZiJdLFsiYjhkYTk0MDMyYTk1NzUxOGViMGY2NDMzNTcxZTg3NjFjZWZmYzczNjkzZTg0ZWRkNDkxNTBhNTY0ZjY3NmUwMyIsIjI4MDRkZmE0NDgwNWExZTRkN2M5OWNjOTc2MjgwOGIwOTJjYzU4NGQ5NWZmM2I1MTE0ODhlNGU3NGVmZGY2ZTciXSxbImU4MGZlYTE0NDQxZmIzM2E3''@;'; put 'put ''ZDhhZGFiOTQ3NWQ3ZmFiMjAxOWVmZmI1MTU2YTc5MmYxYTExNzc4ZTNjMGRmNWQiLCJlZWQxZGU3ZjYzOGUwMDc3MWU4OTc2OGNhM2NhOTQ0NzJkMTU1ZTgwYWYzMjJlYTlmY2I0MjkxYjZhYzllYzc4Il0sWyJhMzAxNjk3YmRmY2Q3MDQzMTNiYTQ4ZTUxZDU2NzU0M2YyYTE4MjAzMWVmZDY5''@;'; put 'put ''MTVkZGMwN2JiY2M0ZTE2MDcwIiwiNzM3MGY5MWNmYjY3ZTRmNTA4MTgwOWZhMjVkNDBmOWIxNzM1ZGJmN2MwYTExYTEzMGMwZDFhMDQxZTE3N2VhMSJdLFsiOTBhZDg1YjM4OWQ2YjkzNjQ2M2Y5ZDA1MTI2NzhkZTIwOGNjMzMwYjExMzA3ZmZmYWI3YWM2M2UzZmIwNGVkNCIsImU1MDdhMzYy''@;'; put 'put ''MGEzODI2MWFmZmRjYmQ5NDI3MjIyYjgzOWFlZmFiZTE1ODI4OTRkOTkxZDRkNDhjYjZlZjE1MCJdLFsiOGY2OGI5ZDJmNjNiNWYzMzkyMzljMWFkOTgxZjE2MmVlODhjNTY3ODcyM2VhMzM1MWI3YjQ0NGM5ZWM0YzBkYSIsIjY2MmE5ZjJkYmEwNjM5ODZkZTFkOTBjMmI2YmUyMTVkYmJlYTJj''@;'; put 'put ''ZmU5NTUxMGJmZGYyM2NiZjc5NTAxZmZmODIiXSxbImU0ZjNmYjAxNzZhZjg1ZDY1ZmY5OWZmOTE5OGMzNjA5MWY0OGU4NjUwMzY4MWUzZTY2ODZmZDUwNTMyMzFlMTEiLCIxZTYzNjMzYWQwZWY0ZjFjMTY2MWE2ZDBlYTAyYjcyODZjYzdlNzRlYzk1MWQxYzk4MjJjMzg1NzZmZWI3M2JjIl0s''@;'; put 'put ''WyI4YzAwZmE5YjE4ZWJmMzMxZWI5NjE1MzdhNDVhNDI2NmM3MDM0ZjJmMGQ0ZTFkMDcxNmZiNmVhZTIwZWFlMjllIiwiZWZhNDcyNjdmZWE1MjFhMWE5ZGMzNDNhMzczNmM5NzRjMmZhZGFmYTgxZTM2YzU0ZTdkMmE0YzY2NzAyNDE0YiJdLFsiZTdhMjZjZTY5ZGQ0ODI5ZjNlMTBjZWMwYTll''@;'; put 'put ''OThlZDMxNDNkMDg0ZjMwOGI5MmMwOTk3ZmRkZmM2MGNiM2U0MSIsIjJhNzU4ZTMwMGZhNzk4NGI0NzFiMDA2YTFhYWZiYjE4ZDBhNmIyYzA0MjBlODNlMjBlOGE5NDIxY2YyY2ZkNTEiXSxbImI2NDU5ZTBlZTM2NjJlYzhkMjM1NDBjMjIzYmNiZGM1NzFjYmNiOTY3ZDc5NDI0ZjNjZjI5ZWIz''@;'; put 'put ''ZGU2YjgwZWYiLCI2N2M4NzZkMDZmM2UwNmRlMWRhZGYxNmU1NjYxZGIzYzRiM2FlNmQ0OGUzNWIyZmYzMGJmMGI2MWE3MWJhNDUiXSxbImQ2OGE4MGM4MjgwYmI4NDA3OTMyMzRhYTExOGYwNjIzMWQ2ZjFmYzY3ZTczYzVhNWRlZGEwZjViNDk2OTQzZTgiLCJkYjhiYTlmZmY0YjU4NmQwMGM0''@;'; put 'put ''YjFmOTE3N2IwZTI4YjViMGU3YjhmNzg0NTI5NWEyOTRjODQyNjZiMTMzMTIwIl0sWyIzMjRhZWQ3ZGY2NWM4MDQyNTJkYzAyNzA5MDdhMzBiMDk2MTJhZWI5NzM0NDljZWE0MDk1OTgwZmMyOGQzZDVkIiwiNjQ4YTM2NTc3NGI2MWYyZmYxMzBjMGMzNWFlYzFmNGYxOTIxM2IwYzdlMzMyODQz''@;'; put 'put ''OTY3MjI0YWY5NmFiN2M4NCJdLFsiNGRmOWMxNDkxOWNkZTYxZjZkNTFkZmRiZTVmZWU1ZGNlZWM0MTQzYmE4ZDFjYTg4OGU4YmQzNzNmZDA1NGM5NiIsIjM1ZWM1MTA5MmQ4NzI4MDUwOTc0YzIzYTFkODVkNGI1ZDUwNmNkYzI4ODQ5MDE5MmViYWMwNmNhZDEwZDVkIl0sWyI5YzM5MTlhODRh''@;'; put 'put ''NDc0ODcwZmFlZDhhOWMxY2M2NjAyMTUyMzQ4OTA1NGQ3ZjAzMDhjYmZjOTljOGFjMWY5OGNkIiwiZGRiODRmMGY0YTRkZGQ1NzU4NGYwNDRiZjI2MGU2NDE5MDUzMjZmNzZjNjRjOGU2YmU3ZTVlMDNkNGZjNTk5ZCJdLFsiNjA1NzE3MGIxZGQxMmZkZjhkZTA1ZjI4MWQ4ZTA2YmI5MWUxNDkz''@;'; put 'put ''YThiOTFkNGNjNWEyMTM4MjEyMGE5NTllNSIsIjlhMWFmMGIyNmE2YTQ4MDdhZGQ5YTJkYWY3MWRmMjYyNDY1MTUyYmMzZWUyNGM2NWU4OTliZTkzMjM4NWEyYTgiXSxbImE1NzZkZjhlMjNhMDg0MTE0MjE0MzlhNDUxOGRhMzE4ODBjZWYwZmJhN2Q0ZGYxMmIxYTY5NzNlZWNiOTQyNjYiLCI0''@;'; put 'put ''MGE2YmYyMGU3NjY0MGIyYzkyYjk3YWZlNThjZDgyYzQzMmUxMGE3ZjUxNGQ5ZjNlZThiZTExYWUxYjI4ZWM4Il0sWyI3Nzc4YTc4YzI4ZGVjM2UzMGEwNWZlOTYyOWRlOGMzOGJiMzBkMWY1Y2Y5YTNhMjA4Zjc2Mzg4OWJlNThhZDcxIiwiMzQ2MjZkOWFiNWE1YjIyZmY3MDk4ZTEyZjJmZjU4''@;'; put 'put ''MDA4N2IzODQxMWZmMjRhYzU2M2I1MTNmYzFmZDlmNDNhYyJdLFsiOTI4OTU1ZWU2MzdhODQ0NjM3MjlmZDMwZTdhZmQyZWQ1Zjk2Mjc0ZTVhZDdlNWNiMDllZGE5YzA2ZDkwM2FjIiwiYzI1NjIxMDAzZDNmNDJhODI3Yjc4YTEzMDkzYTk1ZWVhYzNkMjZlZmE4YThkODNmYzUxODBlOTM1YmNk''@;'; put 'put ''MDkxZiJdLFsiODVkMGZlZjNlYzZkYjEwOTM5OTA2NGYzYTBlM2IyODU1NjQ1YjRhOTA3YWQzNTQ1MjdhYWU3NTE2M2Q4Mjc1MSIsIjFmMDM2NDg0MTNhMzhjMGJlMjlkNDk2ZTU4MmNmNTY2M2U4NzUxZTk2ODc3MzMxNTgyYzIzN2EyNGViMWY5NjIiXSxbImZmMmIwZGNlOTdlZWNlOTdjMWM5''@;'; put 'put ''YjYwNDE3OThiODVkZmRmYjZkODg4MmRhMjAzMDhmNTQwNDgyNDUyNjA4N2UiLCI0OTNkMTNmZWY1MjRiYTE4OGFmNGM0ZGM1NGQwNzkzNmM3YjdlZDZmYjkwZTJjZWIyYzk1MWUwMWYwYzI5OTA3Il0sWyI4MjdmYmJlNGIxZTg4MGVhOWVkMmIyZTYzMDFiMjEyYjU3ZjFlZTE0OGNkNmRkMjg3''@;'; put 'put ''ODBlNWUyY2Y4NTZlMjQxIiwiYzYwZjljOTIzYzcyN2IwYjcxYmVmMmM2N2QxZDEyNjg3ZmY3YTYzMTg2OTAzMTY2ZDYwNWI2OGJhZWMyOTNlYyJdLFsiZWFhNjQ5ZjIxZjUxYmRiYWU3YmU0YWUzNGNlNmU1MjE3YTU4ZmRjZTdmNDdmOWFhN2YzYjU4ZmEyMTIwZTJiMyIsImJlMzI3OWVkNWJi''@;'; put 'put ''YmIwM2FjNjlhODBmODk4NzlhYTVhMDFhNmI5NjVmMTNmN2U1OWQ0N2E1MzA1YmE1YWQ5M2QiXSxbImU0YTQyZDQzYzVjZjE2OWQ5MzkxZGY2ZGVjZjQyZWU1NDFiNmQ4ZjBjOWExMzc0MDFlMjM2MzJkZGEzNGQyNGYiLCI0ZDlmOTJlNzE2ZDFjNzM1MjZmYzk5Y2NmYjhhZDM0Y2U4ODZlZWRm''@;'; put 'put ''YThkOGU0ZjEzYTdmNzEzMWRlYmE5NDE0Il0sWyIxZWM4MGZlZjM2MGNiZGQ5NTQxNjBmYWRhYjM1MmI2YjkyYjUzNTc2YTg4ZmVhNDk0NzE3M2I5ZDQzMDBiZjE5IiwiYWVlZmU5Mzc1NmI1MzQwZDJmM2E0OTU4YTdhYmJmNWUwMTQ2ZTc3ZjYyOTVhMDdiNjcxY2RjMWNjMTA3Y2VmZCJdLFsi''@;'; put 'put ''MTQ2YTc3OGMwNDY3MGMyZjkxYjAwYWY0NjgwZGZhOGJjZTM0OTA3MTdkNThiYTg4OWRkYjU5MjgzNjY2NDJiZSIsImIzMThlMGVjMzM1NDAyOGFkZDY2OTgyN2Y5ZDRiMjg3MGFhYTk3MWQyZjdlNWVkMWQwYjI5NzQ4M2Q4M2VmZDAiXSxbImZhNTBjMGY2MWQyMmU1ZjA3ZTNhY2ViYjFhYTA3''@;'; put 'put ''YjEyOGQwMDEyMjA5YTI4Yjk3NzZkNzZhODc5MzE4MGVlZjkiLCI2Yjg0YzY5MjIzOTdlYmE5YjcyY2QyODcyMjgxYTY4YTVlNjgzMjkzYTU3YTIxM2IzOGNkOGQ3ZDNmNGYyODExIl0sWyJkYTFkNjFkMGNhNzIxYTExYjFhNWJmNmI3ZDg4ZTg0MjFhMjg4YWI1ZDViYmE1MjIwZTUzZDMyYjVm''@;'; put 'put ''MDY3ZWMyIiwiODE1N2Y1NWE3Yzk5MzA2Yzc5YzA3NjYxNjFjOTFlMjk2NmE3Mzg5OWQyNzliNDhhNjU1ZmJhMGYxYWQ4MzZmMSJdLFsiYThlMjgyZmYwYzk3MDY5MDcyMTVmZjk4ZThmZDQxNjYxNTMxMWRlMDQ0NmYxZTA2MmE3M2IwNjEwZDA2NGUxMyIsIjdmOTczNTViOGRiODFjMDlhYmZi''@;'; put 'put ''N2YzYzViMjUxNTg4OGI2NzlhM2U1MGRkNmJkNmNlZjdjNzMxMTFmNGNjMGMiXSxbIjE3NGE1M2I5YzlhMjg1ODcyZDM5ZTU2ZTY5MTNjYWIxNWQ1OWIxZmE1MTI1MDhjMDIyZjM4MmRlODMxOTQ5N2MiLCJjY2M5ZGMzN2FiZmM5YzE2NTdiNDE1NWYyYzQ3ZjllNjY0NmIzYTFkOGNiOTg1NDM4''@;'; put 'put ''M2RhMTNhYzA3OWFmYTczIl0sWyI5NTkzOTY5ODE5NDM3ODVjM2QzZTU3ZWRmNTAxOGNkYmUwMzllNzMwZTQ5MThiM2Q4ODRmZGZmMDk0NzViN2JhIiwiMmU3ZTU1Mjg4OGMzMzFkZDhiYTAzODZhNGI5Y2Q2ODQ5YzY1M2Y2NGM4NzA5Mzg1ZTliOGFiZjg3NTI0ZjJmZCJdLFsiZDJhNjNhNTBh''@;'; put 'put ''ZTQwMWU1NmQ2NDVhMTE1M2IxMDlhOGZjY2EwYTQzZDU2MWZiYTJkYmI1MTM0MGM5ZDgyYjE1MSIsImU4MmQ4NmZiNjQ0M2ZjYjc1NjVhZWU1OGIyOTQ4MjIwYTcwZjc1MGFmNDg0Y2E1MmQ0MTQyMTc0ZGNmODk0MDUiXSxbIjY0NTg3ZTIzMzU0NzFlYjg5MGVlNzg5NmQ3Y2ZkYzg2NmJhY2Jk''@;'; put 'put ''YmQzODM5MzE3YjM0MzZmOWI0NTYxN2UwNzMiLCJkOTlmY2RkNWJmNjkwMmUyYWU5NmRkNjQ0N2MyOTlhMTg1YjkwYTM5MTMzYWVhYjM1ODI5OWU1ZTlmYWY2NTg5Il0sWyI4NDgxYmRlMGU0ZTRkODg1YjNhNTQ2ZDNlNTQ5ZGUwNDJmMGFhNmNlYTI1MGU3ZmQzNThkNmM4NmRkNDVlNDU4Iiwi''@;'; put 'put ''MzhlZTdiOGNiYTU0MDRkZDg0YTI1YmYzOWNlY2IyY2E5MDBhNzljNDJiMjYyZTU1NmQ2NGIxYjU5Nzc5MDU3ZSJdLFsiMTM0NjRhNTdhNzgxMDJhYTYyYjY5NzlhZTgxN2Y0NjM3ZmZjZmVkM2M0YjFjZTMwYmNkNjMwM2Y2Y2FmNjY2YiIsIjY5YmUxNTkwMDQ2MTQ1ODBlZjdlNDMzNDUzY2Ni''@;'; put 'put ''MGNhNDhmMzAwYTgxZDA5NDJlMTNmNDk1YTkwN2Y2ZWNjMjciXSxbImJjNGE5ZGY1YjcxM2ZlMmU5YWVmNDMwYmNjMWRjOTdhMGNkOWNjZWRlMmYyODU4OGNhZGEzYTBkMmQ4M2YzNjYiLCJkM2E4MWNhNmU3ODVjMDYzODM5MzdhZGY0Yjc5OGNhYTZlOGE5ZmJmYTU0N2IxNmQ3NThkNjY2NTgx''@;'; put 'put ''ZjMzYzEiXSxbIjhjMjhhOTdiZjgyOThiYzBkMjNkOGM3NDk0NTJhMzJlNjk0YjY1ZTMwYTk0NzJhMzk1NGFiMzBmZTUzMjRjYWEiLCI0MGEzMDQ2M2EzMzA1MTkzMzc4ZmVkZjMxZjdjYzBlYjdhZTc4NGYwNDUxY2I5NDU5ZTcxZGM3M2NiZWY5NDgyIl0sWyI4ZWE5NjY2MTM5NTI3YThjMWRk''@;'; put 'put ''OTRjZTRmMDcxZmQyM2M4YjM1MGM1YTRiYjMzNzQ4YzRiYTExMWZhY2NhZTAiLCI2MjBlZmFiYmM4ZWUyNzgyZTI0ZTdjMGNmYjk1YzVkNzM1Yjc4M2JlOWNmMGY4ZTk1NWFmMzRhMzBlNjJiOTQ1Il0sWyJkZDM2MjVmYWVmNWJhMDYwNzQ2Njk3MTZiYmQzNzg4ZDg5YmRkZTgxNTk1OTk2ODA5''@;'; put 'put ''MmY3NmNjNGViOWE5Nzg3IiwiN2ExODhmYTM1MjBlMzBkNDYxZGEyNTAxMDQ1NzMxY2E5NDE0NjE5ODI4ODMzOTU5MzdmNjhkMDBjNjQ0YTU3MyJdLFsiZjcxMGQ3OWQ5ZWI5NjIyOTdlNGY2MjMyYjQwZThmN2ZlYjJiYzYzODE0NjE0ZDY5MmMxMmRlNzUyNDA4MjIxZSIsImVhOThlNjcyMzJk''@;'; put 'put ''M2IzMjk1ZDNiNTM1NTMyMTE1Y2NhYzg2MTJjNzIxODUxNjE3NTI2YWU0N2E5Yzc3YmZjODIiXV19LG5hZjp7d25kOjcscG9pbnRzOltbImY5MzA4YTAxOTI1OGMzMTA0OTM0NGY4NWY4OWQ1MjI5YjUzMWM4NDU4MzZmOTliMDg2MDFmMTEzYmNlMDM2ZjkiLCIzODhmN2IwZjYzMmRlODE0MGZl''@;'; put 'put ''MzM3ZTYyYTM3ZjM1NjY1MDBhOTk5MzRjMjIzMWI2Y2I5ZmQ3NTg0YjhlNjcyIl0sWyIyZjhiZGU0ZDFhMDcyMDkzNTViNGE3MjUwYTVjNTEyOGU4OGI4NGJkZGM2MTlhYjdjYmE4ZDU2OWIyNDBlZmU0IiwiZDhhYzIyMjYzNmU1ZTNkNmQ0ZGJhOWRkYTZjOWM0MjZmNzg4MjcxYmFiMGQ2ODQw''@;'; put 'put ''ZGNhODdkM2FhNmFjNjJkNiJdLFsiNWNiZGYwNjQ2ZTVkYjRlYWEzOThmMzY1ZjJlYTdhMGUzZDQxOWI3ZTAzMzBlMzljZTkyYmRkZWRjYWM0ZjliYyIsIjZhZWJjYTQwYmEyNTU5NjBhMzE3OGQ2ZDg2MWE1NGRiYTgxM2QwYjgxM2ZkZTdiNWE1MDgyNjI4MDg3MjY0ZGEiXSxbImFjZDQ4NGUy''@;'; put 'put ''ZjBjN2Y2NTMwOWFkMTc4YTlmNTU5YWJkZTA5Nzk2OTc0YzU3ZTcxNGMzNWYxMTBkZmMyN2NjYmUiLCJjYzMzODkyMWIwYTdkOWZkNjQzODA5NzE3NjNiNjFlOWFkZDg4OGE0Mzc1ZjhlMGYwNWNjMjYyYWM2NGY5YzM3Il0sWyI3NzRhZTdmODU4YTk0MTFlNWVmNDI0NmI3MGM2NWFhYzU2NDk5''@;'; put 'put ''ODBiZTVjMTc4OTFiYmVjMTc4OTVkYTAwOGNiIiwiZDk4NGEwMzJlYjZiNWUxOTAyNDNkZDU2ZDdiN2IzNjUzNzJkYjFlMmRmZjlkNmE4MzAxZDc0YzljOTUzYzYxYiJdLFsiZjI4NzczYzJkOTc1Mjg4YmM3ZDFkMjA1YzM3NDg2NTFiMDc1ZmJjNjYxMGU1OGNkZGVlZGRmOGYxOTQwNWFhOCIs''@;'; put 'put ''ImFiMDkwMmU4ZDg4MGE4OTc1ODIxMmViNjVjZGFmNDczYTFhMDZkYTUyMWZhOTFmMjliNWNiNTJkYjAzZWQ4MSJdLFsiZDc5MjRkNGY3ZDQzZWE5NjVhNDY1YWUzMDk1ZmY0MTEzMWU1OTQ2ZjNjODVmNzllNDRhZGJjZjhlMjdlMDgwZSIsIjU4MWUyODcyYTg2YzcyYTY4Mzg0MmVjMjI4Y2M2''@;'; put 'put ''ZGVmZWE0MGFmMmJkODk2ZDNhNWM1MDRkYzlmZjZhMjZiNTgiXSxbImRlZmRlYTRjZGI2Nzc3NTBhNDIwZmVlODA3ZWFjZjIxZWI5ODk4YWU3OWI5NzY4NzY2ZTRmYWEwNGEyZDRhMzQiLCI0MjExYWIwNjk0NjM1MTY4ZTk5N2IwZWFkMmE5M2RhZWNlZDFmNGEwNGE5NWMwZjZjZmIxOTlmNjll''@;'; put 'put ''NTZlYjc3Il0sWyIyYjRlYTBhNzk3YTQ0M2QyOTNlZjVjZmY0NDRmNDk3OWYwNmFjZmViZDdlODZkMjc3NDc1NjU2MTM4Mzg1YjZjIiwiODVlODliYzAzNzk0NWQ5M2IzNDMwODNiNWExYzg2MTMxYTAxZjYwYzUwMjY5NzYzYjU3MGM4NTRlNWMwOWI3YSJdLFsiMzUyYmJmNGE0Y2RkMTI1NjRm''@;'; put 'put ''OTNmYTMzMmNlMzMzMzAxZDlhZDQwMjcxZjgxMDcxODEzNDBhZWYyNWJlNTlkNSIsIjMyMWViNDA3NTM0OGY1MzRkNTljMTgyNTlkZGEzZTFmNGExYjNiMmU3MWIxMDM5YzY3YmQzZDhiY2Y4MTk5OGMiXSxbIjJmYTIxMDRkNmIzOGQxMWIwMjMwMDEwNTU5ODc5MTI0ZTQyYWI4ZGZlZmY1ZmYy''@;'; put 'put ''OWRjOWNkYWRkNGVjYWNjM2YiLCIyZGUxMDY4Mjk1ZGQ4NjViNjQ1NjkzMzViZDVkZDgwMTgxZDcwZWNmYzg4MjY0ODQyM2JhNzZiNTMyYjdkNjciXSxbIjkyNDgyNzliMDliNGQ2OGRhYjIxYTliMDY2ZWRkYTgzMjYzYzNkODRlMDk1NzJlMjY5Y2EwY2Q3ZjU0NTM3MTQiLCI3MzAxNmY3YmYy''@;'; put 'put ''MzRhYWRlNWQxYWE3MWJkZWEyYjFmZjNmYzBkZTJhODg3OTEyZmZlNTRhMzJjZTk3Y2IzNDAyIl0sWyJkYWVkNGYyYmUzYThiZjI3OGU3MDEzMmZiMGJlYjc1MjJmNTcwZTE0NGJmNjE1YzA3ZTk5NmQ0NDNkZWU4NzI5IiwiYTY5ZGNlNGE3ZDZjOThlOGQ0YTFhY2E4N2VmOGQ3MDAzZjgzYzIz''@;'; put 'put ''MGYzYWZhNzI2YWI0MGU1MjI5MGJlMWM1NSJdLFsiYzQ0ZDEyYzcwNjVkODEyZThhY2YyOGQ3Y2JiMTlmOTAxMWVjZDllOWZkZjI4MWIwZTZhM2I1ZTg3ZDIyZTdkYiIsIjIxMTlhNDYwY2UzMjZjZGM3NmM0NTkyNmM5ODJmZGFjMGUxMDZlODYxZWRmNjFjNWEwMzkwNjNmMGUwZTY0ODIiXSxb''@;'; put 'put ''IjZhMjQ1YmY2ZGM2OTg1MDRjODlhMjBjZmRlZDYwODUzMTUyYjY5NTMzNmMyODA2M2I2MWM2NWNiZDI2OWU2YjQiLCJlMDIyY2Y0MmMyYmQ0YTcwOGIzZjUxMjZmMTZhMjRhZDhiMzNiYTQ4ZDA0MjNiNmVmZDVlNjM0ODEwMGQ4YTgyIl0sWyIxNjk3ZmZhNmZkOWRlNjI3YzA3N2UzZDJmZTU0''@;'; put 'put ''MTA4NGNlMTMzMDBiMGJlYzExNDZmOTVhZTU3ZjBkMGJkNmE1IiwiYjljMzk4ZjE4NjgwNmY1ZDI3NTYxNTA2ZTQ1NTc0MzNhMmNmMTUwMDllNDk4YWU3YWRlZTlkNjNkMDFiMjM5NiJdLFsiNjA1YmRiMDE5OTgxNzE4Yjk4NmQwZjA3ZTgzNGNiMGQ5ZGViODM2MGZmYjdmNjFkZjk4MjM0NWVm''@;'; put 'put ''MjdhNzQ3OSIsIjI5NzJkMmRlNGY4ZDIwNjgxYTc4ZDkzZWM5NmZlMjNjMjZiZmFlODRmYjE0ZGI0M2IwMWUxZTkwNTZiOGM0OSJdLFsiNjJkMTRkYWI0MTUwYmY0OTc0MDJmZGM0NWEyMTVlMTBkY2IwMWMzNTQ5NTliMTBjZmUzMWM3ZTlkODdmZjMzZCIsIjgwZmMwNmJkOGNjNWIwMTA5ODA4''@;'; put 'put ''OGExOTUwZWVkMGRiMDFhYTEzMjk2N2FiNDcyMjM1ZjU2NDI0ODNiMjVlYWYiXSxbIjgwYzYwYWQwMDQwZjI3ZGFkZTViNGIwNmM0MDhlNTZiMmM1MGU5ZjU2YjliOGI0MjVlNTU1YzJmODYzMDhiNmYiLCIxYzM4MzAzZjFjYzVjMzBmMjZlNjZiYWQ3ZmU3MmY3MGE2NWVlZDRjYmU3MDI0ZWIx''@;'; put 'put ''YWEwMWY1NjQzMGJkNTdhIl0sWyI3YTkzNzVhZDYxNjdhZDU0YWE3NGM2MzQ4Y2M1NGQzNDRjYzVkYzk0ODdkODQ3MDQ5ZDVlYWJiMGZhMDNjOGZiIiwiZDBlM2ZhOWVjYTg3MjY5MDk1NTllMGQ3OTI2OTA0NmJkYzU5ZWExMGM3MGNlMmIwMmQ0OTllYzIyNGRjN2Y3Il0sWyJkNTI4ZWNkOWI2''@;'; put 'put ''OTZiNTRjOTA3YTllZDA0NTQ0N2E3OWJiNDA4ZWMzOWI2OGRmNTA0YmI1MWY0NTliYzNmZmM5IiwiZWVjZjQxMjUzMTM2ZTVmOTk5NjZmMjE4ODFmZDY1NmViYzQzNDU0MDVjNTIwZGJjMDYzNDY1YjUyMTQwOTkzMyJdLFsiNDkzNzBhNGI1ZjQzNDEyZWEyNWY1MTRlOGVjZGFkMDUyNjYxMTVl''@;'; put 'put ''NGE3ZWNiMTM4NzIzMTgwOGY4YjQ1OTYzIiwiNzU4ZjNmNDFhZmQ2ZWQ0MjhiMzA4MWIwNTEyZmQ2MmE1NGMzZjNhZmJiNWI2NzY0YjY1MzA1MmExMjk0OWM5YSJdLFsiNzdmMjMwOTM2ZWU4OGNiYmQ3M2RmOTMwZDY0NzAyZWY4ODFkODExZTBlMTQ5OGUyZjFjMTNlYjFmYzM0NWQ3NCIsIjk1''@;'; put 'put ''OGVmNDJhNzg4NmI2NDAwYTA4MjY2ZTliYTFiMzc4OTZjOTUzMzBkOTcwNzdjYmJlOGViM2M3NjcxYzYwZDYiXSxbImYyZGFjOTkxY2M0Y2U0YjllYTQ0ODg3ZTVjN2MwYmNlNThjODAwNzRhYjlkNGRiYWViMjg1MzFiNzczOWY1MzAiLCJlMGRlZGM5YjNiMmY4ZGFkNGRhMWYzMmRlYzI1MzFk''@;'; put 'put ''ZjllYjVmYmViMDU5OGU0ZmQxYTExN2RiYTcwM2EzYzM3Il0sWyI0NjNiM2Q5ZjY2MjYyMWZiMWI0YmU4ZmJiZTI1MjAxMjVhMjE2Y2RmYzlkYWUzZGViY2JhNDg1MGM2OTBkNDViIiwiNWVkNDMwZDc4YzI5NmMzNTQzMTE0MzA2ZGQ4NjIyZDdjNjIyZTI3Yzk3MGExZGUzMWNiMzc3YjAxYWY3''@;'; put 'put ''MzA3ZSJdLFsiZjE2ZjgwNDI0NGU0NmUyYTA5MjMyZDRhZmYzYjU5OTc2Yjk4ZmFjMTQzMjhhMmQxYTMyNDk2YjQ5OTk4ZjI0NyIsImNlZGFiZDliODIyMDNmN2UxM2QyMDZmY2RmNGUzM2Q5MmE2YzUzYzI2ZTVjY2UyNmQ2NTc5OTYyYzRlMzFkZjYiXSxbImNhZjc1NDI3MmRjODQ1NjNiMDM1''@;'; put 'put ''MmI3YTE0MzExYWY1NWQyNDUzMTVhY2UyN2M2NTM2OWUxNWY3MTUxZDQxZDEiLCJjYjQ3NDY2MGVmMzVmNWYyYTQxYjY0M2ZhNWU0NjA1NzVmNGZhOWI3OTYyMjMyYTVjMzJmOTA4MzE4YTA0NDc2Il0sWyIyNjAwY2E0YjI4MmNiOTg2Zjg1ZDBmMTcwOTk3OWQ4YjQ0YTA5YzA3Y2I4NmQ3YzEy''@;'; put 'put ''NDQ5N2JjODZmMDgyMTIwIiwiNDExOWI4ODc1M2MxNWJkNmE2OTNiMDNmY2RkYmI0NWQ1YWM2YmU3NGFiNWYwZWY0NGIwYmU5NDc1YTdlNGI0MCJdLFsiNzYzNWNhNzJkN2U4NDMyYzMzOGVjNTNjZDEyMjIwYmMwMWM0ODY4NWUyNGY3ZGM4YzYwMmE3NzQ2OTk4ZTQzNSIsIjkxYjY0OTYwOTQ4''@;'; put 'put ''OWQ2MTNkMWQ1ZTU5MGY3OGU2ZDc0ZWNmYzA2MWQ1NzA0OGJhZDllNzZmMzAyYzViOWM2MSJdLFsiNzU0ZTMyMzlmMzI1NTcwY2RiYmY0YTg3ZGVlZThhNjZiN2YyYjMzNDc5ZDQ2OGZiYzFhNTA3NDNiZjU2Y2MxOCIsIjY3M2ZiODZlNWJkYTMwZmIzY2QwZWQzMDRlYTQ5YTAyM2VlMzNkMDE5''@;'; put 'put ''N2E2OTVkMGM1ZDk4MDkzYzUzNjY4MyJdLFsiZTNlNmJkMTA3MWExZTk2YWZmNTc4NTljODJkNTcwZjAzMzA4MDA2NjFkMWM5NTJmOWZlMjY5NDY5MWQ5YjllOCIsIjU5YzllMGJiYTM5NGU3NmY0MGMwYWE1ODM3OWEzY2I2YTVhMjI4Mzk5M2U5MGM0MTY3MDAyYWY0OTIwZTM3ZjUiXSxbIjE4''@;'; put 'put ''NmI0ODNkMDU2YTAzMzgyNmFlNzNkODhmNzMyOTg1YzRjY2IxZjMyYmEzNWY0YjRjYzQ3ZmRjZjA0YWE2ZWIiLCIzYjk1MmQzMmM2N2NmNzdlMmUxNzQ0NmUyMDQxODBhYjIxZmI4MDkwODk1MTM4YjRhNGE3OTdmODZlODA4ODhiIl0sWyJkZjlkNzBhNmI5ODc2Y2U1NDRjOTg1NjFmNGJlNGY3''@;'; put 'put ''MjU0NDJlNmQyYjczN2Q5YzkxYTgzMjE3MjRjZTA5NjNmIiwiNTVlYjJkYWZkODRkNmNjZDVmODYyYjc4NWRjMzlkNGFiMTU3MjIyNzIwZWY5ZGEyMTdiOGM0NWNmMmJhMjQxNyJdLFsiNWVkZDVjYzIzYzUxZTg3YTQ5N2NhODE1ZDVkY2UwZjhhYjUyNTU0Zjg0OWVkODk5NWRlNjRjNWYzNGNl''@;'; put 'put ''NzE0MyIsImVmYWU5YzhkYmMxNDEzMDY2MWU4Y2VjMDMwYzg5YWQwYzEzYzY2YzBkMTdhMjkwNWNkYzcwNmFiNzM5OWE4NjgiXSxbIjI5MDc5OGMyYjY0NzY4MzBkYTEyZmUwMjI4N2U5ZTc3N2FhM2ZiYTFjMzU1YjE3YTcyMmQzNjJmODQ2MTRmYmEiLCJlMzhkYTc2ZGNkNDQwNjIxOTg4ZDAw''@;'; put 'put ''YmNmNzlhZjI1ZDViMjljMDk0ZGIyYTIzMTQ2ZDAwM2FmZDQxOTQzZTdhIl0sWyJhZjNjNDIzYTk1ZDlmNWIzMDU0NzU0ZWZhMTUwYWMzOWNkMjk1NTJmZTM2MDI1NzM2MmRmZGVjZWY0MDUzYjQ1IiwiZjk4YTNmZDgzMWViMmI3NDlhOTNiMGU2ZjM1Y2ZiNDBjOGNkNWFhNjY3YTE1NTgxYmMy''@;'; put 'put ''ZmVkZWQ0OThmZDljNiJdLFsiNzY2ZGJiMjRkMTM0ZTc0NWNjY2FhMjhjOTliZjI3NDkwNmJiNjZiMjZkY2Y5OGRmOGQyZmVkNTBkODg0MjQ5YSIsIjc0NGIxMTUyZWFjYmU1ZTM4ZGNjODg3OTgwZGEzOGI4OTc1ODRhNjVmYTA2Y2VkZDJjOTI0Zjk3Y2JhYzU5OTYiXSxbIjU5ZGJmNDZmOGM5''@;'; put 'put ''NDc1OWJhMjEyNzdjMzM3ODRmNDE2NDVmN2I0NGY2YzU5NmE1OGNlOTJlNjY2MTkxYWJlM2UiLCJjNTM0YWQ0NDE3NWZiYzMwMGY0ZWE2Y2U2NDgzMDlhMDQyY2U3MzlhNzkxOTc5OGNkODVlMjE2YzRhMzA3ZjZlIl0sWyJmMTNhZGE5NTEwM2M0NTM3MzA1ZTY5MWU3NGU5YTRhOGRkNjQ3ZTcx''@;'; put 'put ''MWE5NWU3M2NiNjJkYzYwMThjZmQ4N2I4IiwiZTEzODE3YjQ0ZWUxNGRlNjYzYmY0YmM4MDgzNDFmMzI2OTQ5ZTIxYTZhNzVjMjU3MDc3ODQxOWJkYWY1NzMzZCJdLFsiNzc1NGI0ZmEwZThhY2VkMDZkNDE2N2EyYzU5Y2NhNGNkYTE4NjljMDZlYmFkZmI2NDg4NTUwMDE1YTg4NTIyYyIsIjMw''@;'; put 'put ''ZTkzZTg2NGU2NjlkODIyMjRiOTY3YzMwMjBiOGZhOGQxZTRlMzUwYjZjYmNjNTM3YTQ4YjU3ODQxMTYzYTIiXSxbIjk0OGRjYWRmNTk5MGUwNDhhYTM4NzRkNDZhYmVmOWQ3MDE4NThmOTVkZTgwNDFkMmE2ODI4Yzk5ZTIyNjI1MTkiLCJlNDkxYTQyNTM3ZjZlNTk3ZDVkMjhhMzIyNGIxYmMy''@;'; put 'put ''NWRmOTE1NGVmYmQyZWYxZDJjYmJhMmNhZTUzNDdkNTdlIl0sWyI3OTYyNDE0NDUwYzc2YzE2ODljN2I0OGY4MjAyZWMzN2ZiMjI0Y2Y1YWMwYmZhMTU3MDMyOGE4YTNkN2M3N2FiIiwiMTAwYjYxMGVjNGZmYjQ3NjBkNWMxZmMxMzNlZjZmNmIxMjUwN2EwNTFmMDRhYzU3NjBhZmE1YjI5ZGI4''@;'; put 'put ''MzQzNyJdLFsiMzUxNDA4NzgzNDk2NGI1NGIxNWIxNjA2NDRkOTE1NDg1YTE2OTc3MjI1Yjg4NDdiYjBkZDA4NTEzN2VjNDdjYSIsImVmMGFmYmIyMDU2MjA1NDQ4ZTE2NTJjNDhlODEyN2ZjNjAzOWU3N2MxNWMyMzc4YjdlN2QxNWEwZGUyOTMzMTEiXSxbImQzY2MzMGFkNmI0ODNlNGJjNzlj''@;'; put 'put ''ZTJjOWRkOGJjNTQ5OTNlOTQ3ZWI4ZGY3ODdiNDQyOTQzZDNmN2I1MjdlYWYiLCI4YjM3OGEyMmQ4MjcyNzhkODljNWU5YmU4Zjk1MDhhZTNjMmFkNDYyOTAzNTg2MzBhZmIzNGRiMDRlZWRlMGE0Il0sWyIxNjI0ZDg0NzgwNzMyODYwY2UxYzc4ZmNiZmVmZTA4YjJiMjk4MjNkYjkxM2Y2NDkz''@;'; put 'put ''OTc1YmEwZmY0ODQ3NjEwIiwiNjg2NTFjZjliNmRhOTAzZTA5MTQ0NDhjNmNkOWQ0Y2E4OTY4NzhmNTI4MmJlNGM4Y2MwNmUyYTQwNDA3ODU3NSJdLFsiNzMzY2U4MGRhOTU1YThhMjY5MDJjOTU2MzNlNjJhOTg1MTkyNDc0YjVhZjIwN2RhNmRmN2I0ZmQ1ZmM2MWNkNCIsImY1NDM1YTJiZDJi''@;'; put 'put ''YWRmN2Q0ODVhNGQ4YjhkYjlmY2NlM2UxZWY4ZTAyMDFlNDU3OGM1NDY3M2JjMWRjNWVhMWQiXSxbIjE1ZDk0NDEyNTQ5NDUwNjRjZjFhMWMzM2JiZDNiNDlmODk2NmM1MDkyMTcxZTY5OWVmMjU4ZGZhYjgxYzA0NWMiLCJkNTZlYjMwYjY5NDYzZTcyMzRmNTEzN2I3M2I4NDE3NzQzNDgwMGJh''@;'; put 'put ''Y2ViZmM2ODVmYzM3YmJlOWVmZTQwNzBkIl0sWyJhMWQwZmNmMmVjOWRlNjc1YjYxMjEzNmU1Y2U3MGQyNzFjMjE0MTdjOWQyYjhhYWFhYzEzODU5OWQwNzE3OTQwIiwiZWRkNzdmNTBiY2I1YTNjYWIyZTkwNzM3MzA5NjY3ZjI2NDE0NjJhNTQwNzBmM2Q1MTkyMTJkMzljMTk3YTYyOSJdLFsi''@;'; put 'put ''ZTIyZmJlMTVjMGFmOGNjYzU3ODBjMDczNWY4NGRiZTlhNzkwYmFkZWU4MjQ1YzA2YzdjYTM3MzMxY2IzNjk4MCIsImE4NTViYWJhZDVjZDYwYzg4YjQzMGE2OWY1M2ExYTdhMzgyODkxNTQ5NjQ3OTliZTQzZDA2ZDc3ZDMxZGEwNiJdLFsiMzExMDkxZGQ5ODYwZThlMjBlZTEzNDczYzExNTVm''@;'; put 'put ''NWY2OTYzNWUzOTQ3MDRlYWE3NDAwOTQ1MjI0NmNmYTliMyIsIjY2ZGI2NTZmODdkMWYwNGZmZmQxZjA0Nzg4YzA2ODMwODcxZWM1YTY0ZmVlZTY4NWJkODBmMGIxMjg2ZDgzNzQiXSxbIjM0YzFmZDA0ZDMwMWJlODliMzFjMDQ0MmQzZTZhYzI0ODgzOTI4YjQ1YTkzNDA3ODE4NjdkNDIzMmVj''@;'; put 'put ''MmRiZGYiLCI5NDE0Njg1ZTk3YjFiNTk1NGJkNDZmNzMwMTc0MTM2ZDU3ZjFjZWViNDg3NDQzZGM1MzIxODU3YmE3M2FiZWUiXSxbImYyMTllYTVkNmI1NDcwMWMxYzE0ZGU1YjU1N2ViNDJhOGQxM2YzYWJiY2QwOGFmZmNjMmE1ZTZiMDQ5YjhkNjMiLCI0Y2I5NTk1N2U4M2Q0MGIwZjczYWY0''@;'; put 'put ''NTQ0Y2NjZjZiMWY0YjA4ZDNjMDdiMjdmYjhkOGMyOTYyYTQwMDc2NmQxIl0sWyJkN2I4NzQwZjc0YThmYmFhYjFmNjgzZGI4ZjQ1ZGUyNjU0M2E1NDkwYmNhNjI3MDg3MjM2OTEyNDY5YTBiNDQ4IiwiZmE3Nzk2ODEyOGQ5YzkyZWUxMDEwZjMzN2FkNDcxN2VmZjE1ZGI1ZWQzYzA0OWIzNDEx''@;'; put 'put ''ZTAzMTVlYWE0NTkzYiJdLFsiMzJkMzFjMjIyZjhmNmYwZWY4NmY3Yzk4ZDNhMzMzNWVhZDViY2QzMmFiZGQ5NDI4OWZlNGQzMDkxYWE4MjRiZiIsIjVmMzAzMmY1ODkyMTU2ZTM5Y2NkM2Q3OTE1YjllMWRhMmU2ZGFjOWU2ZjI2ZTk2MTExOGQxNGI4NDYyZTE2NjEiXSxbIjc0NjFmMzcxOTE0''@;'; put 'put ''YWIzMjY3MTA0NWExNTVkOTgzMWVhODc5M2Q3N2NkNTk1OTJjNDM0MGY4NmNiYzE4MzQ3YjUiLCI4ZWMwYmEyMzhiOTZiZWMwY2JkZGRjYWUwYWE0NDI1NDJlZWUxZmY1MGM5ODZlYTZiMzk4NDdiM2NjMDkyZmY2Il0sWyJlZTA3OWFkYjFkZjE4NjAwNzQzNTZhMjVhYTM4MjA2YTZkNzE2YjJj''@;'; put 'put ''M2U2NzQ1M2QyODc2OThiYWQ3YjJiMmQ2IiwiOGRjMjQxMmFhZmUzYmU1YzRjNWYzN2UwZWNjNWY5ZjZhNDQ2OTg5YWYwNGM0ZTI1ZWJhYWM0NzllYzFjOGMxZSJdLFsiMTZlYzkzZTQ0N2VjODNmMDQ2N2IxODMwMmVlNjIwZjdlNjVkZTMzMTg3NGM5ZGM3MmJmZDg2MTZiYTlkYTZiNSIsIjVl''@;'; put 'put ''NDYzMTE1MGU2MmZiNDBkMGU4YzJhN2NhNTgwNGEzOWQ1ODE4NmE1MGU0OTcxMzk2MjY3NzhlMjViMDY3NGQiXSxbImVhYTVmOTgwYzI0NWY2ZjAzODk3ODI5MGFmYTcwYjZiZDg4NTU4OTdmOThiNmFhNDg1Yjk2MDY1ZDUzN2JkOTkiLCJmNjVmNWQzZTI5MmMyZTA4MTlhNTI4MzkxYzk5NDYy''@;'; put 'put ''NGQ3ODQ4NjlkN2U2ZWE2N2ZiMTgwNDEwMjRlZGMwN2RjIl0sWyI3OGM5NDA3NTQ0YWMxMzI2OTJlZTE5MTBhMDI0Mzk5NThhZTA0ODc3MTUxMzQyZWE5NmM0YjZiMzVhNDlmNTEiLCJmM2UwMzE5MTY5ZWI5Yjg1ZDU0MDQ3OTU1MzlhNWU2OGZhMWZiZDU4M2MwNjRkMjQ2MmI2NzVmMTk0YTNk''@;'; put 'put ''ZGI0Il0sWyI0OTRmNGJlMjE5YTFhNzcwMTZkY2Q4Mzg0MzFhZWEwMDAxY2RjOGFlN2E2ZmM2ODg3MjY1NzhkOTcwMjg1N2E1IiwiNDIyNDJhOTY5MjgzYTVmMzM5YmE3ZjA3NWUzNmJhMmFmOTI1Y2UzMGQ3NjdlZDZlNTVmNGIwMzE4ODBkNTYyYyJdLFsiYTU5OGE4MDMwZGE2ZDg2YzZiYzdm''@;'; put 'put ''MmY1MTQ0ZWE1NDlkMjgyMTFlYTU4ZmFhNzBlYmY0YzFlNjY1YzFmZTliNSIsIjIwNGI1ZDZmODQ4MjJjMzA3ZTRiNGE3MTQwNzM3YWVjMjNmYzYzYjY1YjM1Zjg2YTEwMDI2ZGJkMmQ4NjRlNmIiXSxbImM0MTkxNjM2NWFiYjJiNWQwOTE5MmY1ZjJkYmVhZmVjMjA4ZjAyMGYxMjU3MGExODRk''@;'; put 'put ''YmFkYzNlNTg1OTU5OTciLCI0ZjE0MzUxZDAwODdlZmE0OWQyNDViMzI4OTg0OTg5ZDVjYWY5NDUwZjM0YmZjMGVkMTZlOTZiNThmYTk5MTMiXSxbIjg0MWQ2MDYzYTU4NmZhNDc1YTcyNDYwNGRhMDNiYzViOTJhMmUwZDJlMGEzNmFjZmU0YzczYTU1MTQ3NDI4ODEiLCI3Mzg2N2Y1OWMwNjU5''@;'; put 'put ''ZTgxOTA0ZjlhMWM3NTQzNjk4ZTYyNTYyZDY3NDRjMTY5Y2U3YTM2ZGUwMWE4ZDYxNTQiXSxbIjVlOTViYjM5OWE2OTcxZDM3NjAyNjk0N2Y4OWJkZTJmMjgyYjMzODEwOTI4YmU0ZGVkMTEyYWM0ZDcwZTIwZDUiLCIzOWYyM2YzNjY4MDkwODViZWViZmM3MTE4MTMxMzc3NWE5OWM5YWVkN2Q4''@;'; put 'put ''YmEzOGIxNjEzODRjNzQ2MDEyODY1Il0sWyIzNmU0NjQxYTUzOTQ4ZmQ0NzZjMzlmOGE5OWZkOTc0ZTVlYzA3NTY0YjUzMTVkOGJmOTk0NzFiY2EwZWYyZjY2IiwiZDI0MjRiMWIxYWJlNGViODE2NDIyN2IwODVjOWFhOTQ1NmVhMTM0OTNmZDU2M2UwNmZkNTFjZjU2OTRjNzhmYyJdLFsiMzM2''@;'; put 'put ''NTgxZWE3YmZiYmIyOTBjMTkxYTJmNTA3YTQxY2Y1NjQzODQyMTcwZTkxNGZhZWFiMjdjMmM1NzlmNzI2IiwiZWFkMTIxNjg1OTVmZTFiZTk5MjUyMTI5YjZlNTZiMzM5MWY3YWIxNDEwY2QxZTBlZjNkY2RjYWJkMmZkYTIyNCJdLFsiOGFiODk4MTZkYWRmZDZiNmExZjI2MzRmY2YwMGVjODQw''@;'; put 'put ''Mzc4MTAyNWVkNjg5MGM0ODQ5NzQyNzA2YmQ0M2VkZSIsIjZmZGNlZjA5ZjJmNmQwYTA0NGU2NTRhZWY2MjQxMzZmNTAzZDQ1OWMzZTg5ODQ1ODU4YTQ3YTkxMjljZGQyNGUiXSxbIjFlMzNmMWE3NDZjOWM1Nzc4MTMzMzQ0ZDkyOTlmY2FhMjBiMDkzOGU4YWNmZjI1NDRiYjQwMjg0YjhjNWZi''@;'; put 'put ''OTQiLCI2MDY2MDI1N2RkMTFiM2FhOWM4ZWQ2MThkMjRlZGZmMjMwNmQzMjBmMWQwMzAxMGUzM2E3ZDIwNTdmM2IzYjYiXSxbIjg1YjdjMWRjYjNjZWMxYjdlZTdmMzBkZWQ3OWRkMjBhMGVkMWY0Y2MxOGNiY2ZjZmE0MTAzNjFmZDhmMDhmMzEiLCIzZDk4YTljZGQwMjZkZDQzZjM5MDQ4ZjI1''@;'; put 'put ''YTg4NDdmNGZjYWZhZDE4OTVkN2E2MzNjNmZlZDNjMzVlOTk5NTExIl0sWyIyOWRmOWZiZDhkOWU0NjUwOTI3NWY0YjEyNWQ2ZDQ1ZDdmYmU5YTNiODc4YTdhZjg3MmEyODAwNjYxYWM1ZjUxIiwiYjRjNGZlOTljNzc1YTYwNmUyZDg4NjIxNzkxMzlmZmRhNjFkYzg2MWMwMTllNTVjZDI4NzZl''@;'; put 'put ''YjJhMjdkODRiIl0sWyJhMGIxY2FlMDZiMGE4NDdhM2ZlYTZlNjcxYWFmOGFkZmRmZTU4Y2EyZjc2ODEwNWM4MDgyYjJlNDQ5ZmNlMjUyIiwiYWU0MzQxMDJlZGRlMDk1OGVjNGIxOWQ5MTdhNmEyOGU2YjcyZGExODM0YWZmMGU2NTBmMDQ5NTAzYTI5NmNmMiJdLFsiNGU4Y2VhZmI5YjNlOWEx''@;'; put 'put ''MzZkYzdmZjY3ZTg0MDI5NWI0OTlkZmIzYjIxMzNlNGJhMTEzZjJlNGMwZTEyMWU1IiwiY2YyMTc0MTE4YzhiNmQ3YTRiNDhmNmQ1MzRjZTVjNzk0MjJjMDg2YTYzNDYwNTAyYjgyN2NlNjJhMzI2NjgzYyJdLFsiZDI0YTQ0ZTA0N2UxOWI2ZjVhZmI4MWM3Y2EyZjY5MDgwYTUwNzY2ODlhMDEw''@;'; put 'put ''OTE5ZjQyNzI1YzJiNzg5YTMzYiIsIjZmYjhkNTU5MWI0NjZmOGZjNjNkYjUwZjFjMGYxYzY5MDEzZjk5Njg4N2I4MjQ0ZDJjZGVjNDE3YWZlYThmYTMiXSxbImVhMDE2MDZhN2E2YzljZGQyNDlmZGZjZmFjYjk5NTg0MDAxZWRkMjhhYmJhYjc3YjUxMDRlOThlOGUzYjM1ZDQiLCIzMjJhZjQ5''@;'; put 'put ''MDhjNzMxMmIwY2ZiZmUzNjlmN2E3YjNjZGI3ZDQ0OTRiYzI4MjM3MDBjZmQ2NTIxODhhM2VhOThkIl0sWyJhZjhhZGRiZjJiNjYxYzhhNmM2MzI4NjU1ZWI5NjY1MTI1MjAwN2Q4YzVlYTMxYmU0YWQxOTZkZThjZTIxMzFmIiwiNjc0OWU2N2MwMjliODVmNTJhMDM0ZWFmZDA5NjgzNmIyNTIw''@;'; put 'put ''ODE4NjgwZTI2YWM4ZjNkZmJjZGI3MTc0OTcwMCJdLFsiZTNhZTE5NzQ1NjZjYTA2Y2M1MTZkNDdlMGZiMTY1YTY3NGEzZGFiY2ZjYTE1ZTcyMmYwZTM0NTBmNDU4ODkiLCIyYWVhYmU3ZTQ1MzE1MTAxMTYyMTdmMDdiZjRkMDczMDBkZTk3ZTQ4NzRmODFmNTMzNDIwYTcyZWViMGJkNmE0Il0s''@;'; put 'put ''WyI1OTFlZTM1NTMxM2Q5OTcyMWNmNjk5M2ZmZWQxZTNlMzAxOTkzZmYzZWQyNTg4MDIwNzVlYThjZWQzOTdlMjQ2IiwiYjBlYTU1OGExMTNjMzBiZWE2MGZjNDc3NTQ2MGM3OTAxZmYwYjA1M2QyNWNhMmJkZWVlOThmMWE0YmU1ZDE5NiJdLFsiMTEzOTZkNTVmZGE1NGM0OWYxOWFhOTczMThk''@;'; put 'put ''OGRhNjFmYTg1ODRlNDdiMDg0OTQ1MDc3Y2YwMzI1NWI1Mjk4NCIsIjk5OGM3NGE4Y2Q0NWFjMDEyODlkNTgzM2E3YmViNDc0NGZmNTM2YjAxYjI1N2JlNGM1NzY3YmVhOTNlYTU3YTQiXSxbIjNjNWQyYTFiYTM5YzVhMTc5MDAwMDczOGM5ZTBjNDBiOGRjZGZkNTQ2ODc1NGI2NDA1NTQwMTU3''@;'; put 'put ''ZTAxN2FhN2EiLCJiMjI4NDI3OTk5NWEzNGUyZjlkNGRlNzM5NmZjMThiODBmOWI4YjlmZGQyNzBmNjY2MWY3OWNhNGM4MWJkMjU3Il0sWyJjYzg3MDRiOGE2MGEwZGVmYTNhOTlhNzI5OWYyZTljM2ZiYzM5NWFmYjA0YWMwNzg0MjVlZjhhMTc5M2NjMDMwIiwiYmRkNDYwMzlmZWVkMTc4ODFk''@;'; put 'put ''MWUwODYyZGIzNDdmOGNmMzk1Yjc0ZmM0YmNkYzRlOTQwYjc0ZTNhYzFmMWIxMyJdLFsiYzUzM2U0ZjdlYTg1NTVhYWNkOTc3N2FjNWNhZDI5Yjk3ZGQ0ZGVmY2NjNTNlZTdlYTIwNDExOWIyODg5YjE5NyIsIjZmMGEyNTZiYzVlZmRmNDI5YTJmYjYyNDJmMWE0M2EyZDliOTI1YmI0YTRiM2Ey''@;'; put 'put ''NmJiOGUwZjQ1ZWI1OTYwOTYiXSxbImMxNGY4ZjJjY2IyN2Q2ZjEwOWY2ZDA4ZDAzY2M5NmE2OWJhOGMzNGVlYzA3YmJjZjU2NmQ0OGUzM2RhNjU5MyIsImMzNTlkNjkyM2JiMzk4ZjdmZDQ0NzNlMTZmZTFjMjg0NzViNzQwZGQwOTgwNzVlNmMwZTg2NDkxMTNkYzNhMzgiXSxbImE2Y2JjMzA0''@;'; put 'put ''NmJjNmE0NTBiYWMyNDc4OWZhMTcxMTVhNGM5NzM5ZWQ3NWY4ZjIxY2U0NDFmNzJlMGI5MGU2ZWYiLCIyMWFlN2Y0NjgwZTg4OWJiMTMwNjE5ZTJjMGY5NWEzNjBjZWI1NzNjNzA2MDMxMzk4NjJhZmQ2MTdmYTliOWYiXSxbIjM0N2Q2ZDlhMDJjNDg5MjdlYmZiODZjMTM1OWIxY2FmMTMwYTNj''@;'; put 'put ''MDI2N2QxMWNlNjM0NGIzOWY5OWQ0M2NjMzgiLCI2MGVhN2Y2MWEzNTM1MjRkMWM5ODdmNmVjZWM5MmYwODZkNTY1YWI2ODc4NzBjYjEyNjg5ZmYxZTMxYzc0NDQ4Il0sWyJkYTY1NDVkMjE4MWRiOGQ5ODNmN2RjYjM3NWVmNTg2NmQ0N2M2N2IxYmYzMWM4Y2Y4NTVlZjc0MzdiNzI2NTZhIiwi''@;'; put 'put ''NDliOTY3MTVhYjY4NzhhNzllNzhmMDdjZTU2ODBjNWQ2NjczMDUxYjQ5MzViZDg5N2ZlYTgyNGI3N2RjMjA4YSJdLFsiYzQwNzQ3Y2M5ZDAxMmNiMWExM2I4MTQ4MzA5YzZkZTdlYzI1ZDY5NDVkNjU3MTQ2YjlkNTk5NGI4ZmViMTExMSIsIjVjYTU2MDc1M2JlMmExMmZjNmRlNmNhZjJjYjQ4''@;'; put 'put ''OTU2NWRiOTM2MTU2Yjk1MTRlMWJiNWU4MzAzN2UwZmEyZDQiXSxbIjRlNDJjOGVjODJjOTk3OThjY2YzYTYxMGJlODcwZTc4MzM4YzdmNzEzMzQ4YmQzNGM4MjAzZWY0MDM3ZjM1MDIiLCI3NTcxZDc0ZWU1ZTBmYjkyYTdhOGIzM2EwNzc4MzM0MWE1NDkyMTQ0Y2M1NGJjYzQwYTk0NDczNjkz''@;'; put 'put ''NjA2NDM3Il0sWyIzNzc1YWI3MDg5YmM2YWY4MjNhYmEyZTFhZjcwYjIzNmQyNTFjYWRiMGM4Njc0MzI4NzUyMmExYjNiMGRlZGVhIiwiYmU1MmQxMDdiY2ZhMDlkOGJjYjk3MzZhODI4Y2ZhN2ZhYzhkYjE3YmY3YTc2YTJjNDJhZDk2MTQwOTAxOGNmNyJdLFsiY2VlMzFjYmY3ZTM0ZWMzNzlk''@;'; put 'put ''OTRmYjgxNGQzZDc3NWFkOTU0NTk1ZDEzMTRiYTg4NDY5NTllM2U4MmY3NGUyNiIsIjhmZDY0YTE0YzA2YjU4OWMyNmI5NDdhZTJiY2Y2YmZhMDE0OWVmMGJlMTRlZDRkODBmNDQ4YTAxYzQzYjFjNmQiXSxbImI0ZjllYWVhMDliNjkxNzYxOWY2ZWE2YTRlYjU0NjRlZmRkYjU4ZmQ0NWIxZWJl''@;'; put 'put ''ZmNkYzFhMDFkMDhiNDc5ODYiLCIzOWU1Yzk5MjViNWE1NGIwNzQzM2E0ZjE4YzYxNzI2ZjhiYjEzMWMwMTJjYTU0MmViMjRhOGFjMDcyMDA2ODJhIl0sWyJkNDI2M2RmYzNkMmRmOTIzYTAxNzlhNDg5NjZkMzBjZTg0ZTI1MTVhZmMzZGNjYzFiNzc5MDc3OTJlYmNjNjBlIiwiNjJkZmFmMDdh''@;'; put 'put ''MGY3OGZlYjMwZTMwZDYyOTU4NTNjZTE4OWUxMjc3NjBhZDZjZjdmYWUxNjRlMTIyYTIwOGQ1NCJdLFsiNDg0NTc1MjQ4MjBmYTY1YTRmOGQzNWViNjkzMDg1N2MwMDMyYWNjMGE0YTJkZTQyMjIzM2VlZGE4OTc2MTJjNCIsIjI1YTc0OGFiMzY3OTc5ZDk4NzMzYzM4YTFmYTFjMmU3ZGM2Y2Mw''@;'; put 'put ''N2RiMmQ2MGE5YWU3YTc2YWFhNDliZDBmNzciXSxbImRmZWVlZjE4ODExMDFmMmNiMTE2NDRmM2EyYWZkZmMyMDQ1ZTE5OTE5MTUyOTIzZjM2N2ExNzY3YzExY2NlZGEiLCJlY2ZiNzA1NmNmMWRlMDQyZjk0MjBiYWIzOTY3OTNjMGMzOTBiZGU3NGI0YmJkZmYxNmE4M2FlMDlhOWE3NTE3Il0s''@;'; put 'put ''WyI2ZDdlZjZiMTc1NDNmODM3M2M1NzNmNDRlMWYzODk4MzVkODliY2JjNjA2MmNlZDM2YzgyZGY4M2I4ZmFlODU5IiwiY2Q0NTBlYzMzNTQzODk4NmRmZWZhMTBjNTdmZWE5YmNjNTIxYTA5NTliMmQ4MGJiZjc0YjE5MGRjYTcxMmQxMCJdLFsiZTc1NjA1ZDU5MTAyYTVhMjY4NDUwMGQzYjk5''@;'; put 'put ''MWYyZTNmM2M4OGI5MzIyNTU0NzAzNWFmMjVhZjY2ZTA0NTQxZiIsImY1YzU0NzU0YThmNzFlZTU0MGI5YjQ4NzI4NDczZTMxNGY3MjlhYzUzMDhiMDY5MzgzNjA5OTBlMmJmYWQxMjUiXSxbImViOTg2NjBmNGM0ZGZhYTA2YTJiZTQ1M2Q1MDIwYmM5OWEwYzJlNjBhYmUzODg0NTdkZDQzZmVm''@;'; put 'put ''YjFlZDYyMGMiLCI2Y2I5YTg4NzZkOWNiODUyMDYwOWFmM2FkZDI2Y2QyMGEwYTdjZDhhOTQxMTEzMWNlODVmNDQxMDAwOTkyMjNlIl0sWyIxM2U4N2IwMjdkODUxNGQzNTkzOWYyZTY4OTJiMTk5MjIxNTQ1OTY5NDE4ODgzMzZkYzM1NjNlM2I4ZGJhOTQyIiwiZmVmNWEzYzY4MDU5YTZkZWM1''@;'; put 'put ''ZDYyNDExNGJmMWU5MWFhYzJiOWRhNTY4ZDZhYmViMjU3MGQ1NTY0NmI4YWRmMSJdLFsiZWUxNjMwMjZlOWZkNmZlMDE3YzM4ZjA2YTViZTZmYzEyNTQyNGIzNzFjZTI3MDhlN2JmNDQ5MTY5MWU1NzY0YSIsIjFhY2IyNTBmMjU1ZGQ2MWM0M2Q5NGNjYzY3MGQwZjU4ZjQ5YWUzZmExNWI5NjYy''@;'; put 'put ''M2U1NDMwZGEwYWQ2YzYyYjIiXSxbImIyNjhmNWVmOWFkNTFlNGQ3OGRlM2E3NTBjMmRjODliMWU2MjZkNDM1MDU4Njc5OTk5MzJlNWRiMzNhZjNkODAiLCI1ZjMxMGQ0YjNjOTliOWViYjE5Zjc3ZDQxYzFkZWUwMThjZjBkMzRmZDQxOTE2MTQwMDNlOTQ1YTEyMTZlNDIzIl0sWyJmZjA3ZjMx''@;'; put 'put ''MThhOWRmMDM1ZTlmYWQ4NWViNmM3YmZlNDJiMDJmMDFjYTk5Y2VlYTNiZjdmZmRiYTkzYzQ3NTBkIiwiNDM4MTM2ZDYwM2U4NThhM2E1YzQ0MGMzOGVjY2JhZGRjMWQyOTQyMTE0ZTJlZGRkNDc0MGQwOThjZWQxZjBkOCJdLFsiOGQ4Yjk4NTVjN2MwNTJhMzQxNDZmZDIwZmZiNjU4YmVhNGI5''@;'; put 'put ''ZjY5ZTBkODI1ZWJlYzE2ZThjM2NlMmI1MjZhMSIsImNkYjU1OWVlZGMyZDc5ZjkyNmJhZjQ0ZmI4NGVhNGQ0NGJjZjUwZmVlNTFkN2NlYjMwZTJlN2Y0NjMwMzY3NTgiXSxbIjUyZGIwYjUzODRkZmJmMDViZmE5ZDQ3MmQ3YWUyNmRmZTRiODUxY2VjYTkxYjFlYmE1NDI2MzE4MGRhMzJiNjMi''@;'; put 'put ''LCJjM2I5OTdkMDUwZWU1ZDQyM2ViYWY2NmE2ZGI5ZjU3YjMxODBjOTAyODc1Njc5ZGU5MjRiNjlkODRhN2IzNzUiXSxbImU2MmY5NDkwZDNkNTFkYTYzOTVlZmQyNGU4MDkxOWNjN2QwZjI5YzNmM2ZhNDhjNmZmZjU0M2JlY2JkNDMzNTIiLCI2ZDg5YWQ3YmE0ODc2YjBiMjJjMmNhMjgwYzY4''@;'; put 'put ''Mjg2MmYzNDJjODU5MWYxZGFmNTE3MGUwN2JmZDljY2FmYTdkIl0sWyI3ZjMwZWEyNDc2YjM5OWI0OTU3NTA5Yzg4Zjc3ZDAxOTFhZmEyZmY1Y2I3YjE0ZmQ2ZDhlN2Q2NWFhYWIxMTkzIiwiY2E1ZWY3ZDRiMjMxYzk0YzNiMTUzODlhNWY2MzExZTlkYWZmN2JiNjdiMTAzZTk4ODBlZjRiZmY2''@;'; put 'put ''MzdhY2FlYyJdLFsiNTA5OGZmMWUxZDlmMTRmYjQ2YTIxMGZhZGE2YzkwM2ZlZjBmYjdiNGExZGQxZDlhYzYwYTAzNjE4MDBiN2EwMCIsIjk3MzExNDFkODFmYzhmODA4NGQzN2M2ZTc1NDIwMDZiM2VlMWI0MGQ2MGRmZTUzNjJhNWIxMzJmZDE3ZGRjMCJdLFsiMzJiNzhjN2RlOWVlNTEyYTcy''@;'; put 'put ''ODk1YmU2YjljYmVmYTZlMmYzYzRjY2NlNDQ1Yzk2YjlmMmM4MWUyNzc4YWQ1OCIsImVlMTg0OWY1MTNkZjcxZTMyZWZjMzg5NmVlMjgyNjBjNzNiYjgwNTQ3YWUyMjc1YmE0OTcyMzc3OTRjODc1M2MiXSxbImUyY2I3NGZkZGM4ZTlmYmNkMDc2ZWVmMmE3YzcyYjBjZTM3ZDUwZjA4MjY5ZGZj''@;'; put 'put ''MDc0YjU4MTU1MDU0N2E0ZjciLCJkM2FhMmVkNzFjOWRkMjI0N2E2MmRmMDYyNzM2ZWIwYmFkZGVhOWUzNjEyMmQyYmU4NjQxYWJjYjAwNWNjNGE0Il0sWyI4NDM4NDQ3NTY2ZDRkN2JlZGFkYzI5OTQ5NmFiMzU3NDI2MDA5YTM1ZjIzNWNiMTQxYmUwZDk5Y2QxMGFlM2E4IiwiYzRlMTAyMDkx''@;'; put 'put ''Njk4MGE0ZGE1ZDAxYWM1ZTZhZDMzMDczNGVmMGQ3OTA2NjMxYzRmMjM5MDQyNmIyZWRkNzkxZiJdLFsiNDE2MmQ0ODhiODk0MDIwMzliNTg0YzZmYzZjMzA4ODcwNTg3ZDljNDZmNjYwYjg3OGFiNjVjODJjNzExZDY3ZSIsIjY3MTYzZTkwMzIzNjI4OWY3NzZmMjJjMjVmYjhhM2FmYzE3MzJm''@;'; put 'put ''MmI4NGI0ZTk1ZGJkYTQ3YWU1YTA4NTI2NDkiXSxbIjNmYWQzZmE4NGNhZjBmMzRmMGY4OWJmZDJkY2Y1NGZjMTc1ZDc2N2FlYzNlNTA2ODRmM2JhNGE0YmY1ZjY4M2QiLCJjZDFiYzdjYjZjYzQwN2JiMmYwY2E2NDdjNzE4YTczMGNmNzE4NzJlN2QwZDJhNTNmYTIwZWZjZGZlNjE4MjYiXSxb''@;'; put 'put ''IjY3NGYyNjAwYTMwMDdhMDA1NjhjMWE3Y2UwNWQwODE2YzFmYjg0YmYxMzcwNzk4ZjFjNjk1MzJmYWViMWE4NmIiLCIyOTlkMjFmOTQxM2YzM2IzZWRmNDNiMjU3MDA0NTgwYjcwZGI1N2RhMGIxODIyNTllMDllZWNjNjllMGQzOGE1Il0sWyJkMzJmNGRhNTRhZGU3NGFiYjgxYjgxNWFkMWZi''@;'; put 'put ''M2IyNjNkODJkNmM2OTI3MTRiY2ZmODdkMjliZDVlZTlmMDhmIiwiZjk0MjllNzM4YjhlNTNiOTY4ZTk5MDE2YzA1OTcwNzc4MmUxNGY0NTM1MzU5ZDU4MmZjNDE2OTEwYjNlZWE4NyJdLFsiMzBlNGU2NzA0MzUzODU1NTZlNTkzNjU3MTM1ODQ1ZDM2ZmJiNjkzMWY3MmIwOGNiMWVkOTU0ZjFl''@;'; put 'put ''M2NlM2ZmNiIsIjQ2MmY5YmNlNjE5ODk4NjM4NDk5MzUwMTEzYmJjOWIxMGE4NzhkMzVkYTcwNzQwZGM2OTVhNTU5ZWI4OGRiN2IiXSxbImJlMjA2MjAwM2M1MWNjMzAwNDY4MjkwNDMzMGU0ZGVlN2YzZGNkMTBiMDFlNTgwYmYxOTcxYjA0ZDRjYWQyOTciLCI2MjE4OGJjNDlkNjFlNTQyODU3''@;'; put 'put ''M2Q0OGE3NGUxYzY1NWIxYzYxMDkwOTA1NjgyYTBkNTU1OGVkNzJkY2NiOWJjIl0sWyI5MzE0NDQyM2FjZTM0NTFlZDI5ZTBmYjlhYzJhZjIxMWNiNmU4NGE2MDFkZjU5OTNjNDE5ODU5ZmZmNWRmMDRhIiwiN2MxMGRmYjE2NGMzNDI1ZjVjNzFhM2Y5ZDc5OTIwMzhmMTA2NTIyNGY3MmJiOWQx''@;'; put 'put ''ZDkwMmE2ZDEzMDM3YjQ3YyJdLFsiYjAxNWY4MDQ0ZjVmY2JkY2YyMWNhMjZkNmMzNGZiODE5NzgyOTIwNWM3YjdkMmE3Y2I2NjQxOGMxNTdiMTEyYyIsImFiOGMxZTA4NmQwNGU4MTM3NDRhNjU1YjJkZjhkNWY4M2IzY2RjNmZhYTMwODhjMWQzYWVhMTQ1NGUzYTFkNWYiXSxbImQ1ZTllMWRh''@;'; put 'put ''NjQ5ZDk3ZDg5ZTQ4NjgxMTdhNDY1YTNhNGY4YTE4ZGU1N2ExNDBkMzZiM2YyYWYzNDFhMjFiNTIiLCI0Y2IwNDQzN2YzOTFlZDczMTExYTEzY2MxZDRkZDBkYjE2OTM0NjVjMjI0MDQ4MGQ4OTU1ZTg1OTJmMjc0NDdhIl0sWyJkM2FlNDEwNDdkZDdjYTA2NWRiZjhlZDc3Yjk5MjQzOTk4MzAw''@;'; put 'put ''NWNkNzJlMTZkNmY5OTZhNTMxNmQzNjk2NmJiIiwiYmQxYWViMjFhZDIyZWJiMjJhMTBmMDMwMzQxN2M2ZDk2NGY4Y2RkN2RmMGFjYTYxNGIxMGRjMTRkMTI1YWM0NiJdLFsiNDYzZTI3NjNkODg1Zjk1OGZjNjZjZGQyMjgwMGYwYTQ4NzE5N2QwYTgyZTM3N2I0OWY4MGFmODdjODk3YjA2NSIs''@;'; put 'put ''ImJmZWZhY2RiMGU1ZDBmZDdkZjNhMzExYTk0ZGUwNjJiMjZiODBjNjFmYmM5NzUwOGI3OTk5MjY3MWVmN2NhN2YiXSxbIjc5ODVmZGZkMTI3YzA1NjdjNmY1M2VjMWJiNjNlYzMxNThlNTk3YzQwYmZlNzQ3YzgzY2RkZmM5MTA2NDE5MTciLCI2MDNjMTJkYWYzZDk4NjJlZjJiMjVmZTFkZTI4''@;'; put 'put ''OWFlZDI0ZWQyOTFlMGVjNjcwODcwM2E1YmQ1NjdmMzJlZDAzIl0sWyI3NGExYWQ2YjVmNzZlMzlkYjJkZDI0OTQxMGVhYzdmOTllNzRjNTljYjgzZDJkMGVkNWZmMTU0M2RhNzcwM2U5IiwiY2M2MTU3ZWYxOGM5YzYzY2Q2MTkzZDgzNjMxYmJlYTAwOTNlMDk2ODk0MmU4YzMzZDU3MzdmZDc5''@;'; put 'put ''MGUwZGIwOCJdLFsiMzA2ODJhNTA3MDMzNzVmNjAyZDQxNjY2NGJhMTliN2ZjOWJhYjQyYzcyNzQ3NDYzYTcxZDA4OTZiMjJmNmRhMyIsIjU1M2UwNGY2YjAxOGI0ZmE2YzhmMzllN2YzMTFkMzE3NjI5MGQwZTBmMTljYTczZjE3NzE0ZDk5NzdhMjJmZjgiXSxbIjllMjE1OGYwZDdjMGQ1ZjI2''@;'; put 'put ''YzM3OTFlZmVmYTc5NTk3NjU0ZTdhMmIyNDY0ZjUyYjFlZTZjMTM0Nzc2OWVmNTciLCI3MTJmY2RkMWI5MDUzZjA5MDAzYTM0ODFmYTc3NjJlOWZmZDdjOGVmMzVhMzg1MDllMmZiZjI2MjkwMDgzNzMiXSxbIjE3NmUyNjk4OWE0M2M5Y2ZlYmE0MDI5YzIwMjUzOGMyODE3MmU1NjZlM2M0ZmNl''@;'; put 'put ''NzMyMjg1N2YzYmUzMjdkNjYiLCJlZDhjYzlkMDRiMjllYjg3N2QyNzBiNDg3OGRjNDNjMTlhZWZkMzFmNGVlZTA5ZWU3YjQ3ODM0YzFmYTRiMWMzIl0sWyI3NWQ0NmVmZWEzNzcxZTZlNjhhYmI4OWExM2FkNzQ3ZWNmMTg5MjM5M2RmYzRmMWI3MDA0Nzg4YzUwMzc0ZGE4IiwiOTg1MjM5MGE5''@;'; put 'put ''OTUwNzY3OWZkMGI4NmZkMmIzOWE4NjhkN2VmYzIyMTUxMzQ2ZTFhM2NhNDcyNjU4NmE2YmVkOCJdLFsiODA5YTIwYzY3ZDY0OTAwZmZiNjk4YzRjODI1ZjZkNWYyMzEwZmIwNDUxYzg2OTM0NWI3MzE5ZjY0NTYwNTcyMSIsIjllOTk0OTgwZDk5MTdlMjJiNzZiMDYxOTI3ZmEwNDE0M2QwOTZj''@;'; put 'put ''Y2M1NDk2M2U2YTVlYmZhNWYzZjhlMjg2YzEiXSxbIjFiMzg5MDNhNDNmN2YxMTRlZDQ1MDBiNGVhYzcwODNmZGVmZWNlMWNmMjljNjM1MjhkNTYzNDQ2Zjk3MmMxODAiLCI0MDM2ZWRjOTMxYTYwYWU4ODkzNTNmNzdmZDUzZGU0YTI3MDhiMjZiNmY1ZGE3MmFkMzM5NDExOWRhZjQwOGY5Il1d''@;'; put 'put ''fX19LDUxNjI2OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiemgtbW8iLHttb250aHM6Ilx1NGUwMFx1NjcwOF9cdTRlOGNcdTY3MDhfXHU0ZTA5XHU2NzA4X1x1NTZkYlx1NjcwOF9cdTRlOTRcdTY3MDhfXHU1MTZkXHU2NzA4X1x1''@;'; put 'put ''NGUwM1x1NjcwOF9cdTUxNmJcdTY3MDhfXHU0ZTVkXHU2NzA4X1x1NTM0MVx1NjcwOF9cdTUzNDFcdTRlMDBcdTY3MDhfXHU1MzQxXHU0ZThjXHU2NzA4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiIxXHU2NzA4XzJcdTY3MDhfM1x1NjcwOF80XHU2NzA4XzVcdTY3MDhfNlx1NjcwOF83XHU2''@;'; put 'put ''NzA4XzhcdTY3MDhfOVx1NjcwOF8xMFx1NjcwOF8xMVx1NjcwOF8xMlx1NjcwOCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHU2NjFmXHU2NzFmXHU2NWU1X1x1NjYxZlx1NjcxZlx1NGUwMF9cdTY2MWZcdTY3MWZcdTRlOGNfXHU2NjFmXHU2NzFmXHU0ZTA5X1x1NjYxZlx1NjcxZlx1NTZkYl9c''@;'; put 'put ''dTY2MWZcdTY3MWZcdTRlOTRfXHU2NjFmXHU2NzFmXHU1MTZkIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1OTAzMVx1NjVlNV9cdTkwMzFcdTRlMDBfXHU5MDMxXHU0ZThjX1x1OTAzMVx1NGUwOV9cdTkwMzFcdTU2ZGJfXHU5MDMxXHU0ZTk0X1x1OTAzMVx1NTE2ZCIuc3BsaXQoIl8i''@;'; put 'put ''KSx3ZWVrZGF5c01pbjoiXHU2NWU1X1x1NGUwMF9cdTRlOGNfXHU0ZTA5X1x1NTZkYl9cdTRlOTRfXHU1MTZkIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLExM''@;'; put 'put ''TDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixMTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVkZGRkIEhIOm1tIixsOiJEL00vWVlZWSIsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0iLGxsbGw6IllZ''@;'; put 'put ''WVlcdTVlNzRNXHU2NzA4RFx1NjVlNWRkZGQgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTUxY2NcdTY2Njh8XHU2NWU5XHU0ZTBhfFx1NGUwYVx1NTM0OHxcdTRlMmRcdTUzNDh8XHU0ZTBiXHU1MzQ4fFx1NjY1YVx1NGUwYS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHAsVil7cmV0dXJuIDEy''@;'; put 'put ''PT09cCYmKHA9MCksIlx1NTFjY1x1NjY2OCI9PT1WfHwiXHU2NWU5XHU0ZTBhIj09PVZ8fCJcdTRlMGFcdTUzNDgiPT09Vj9wOiJcdTRlMmRcdTUzNDgiPT09Vj9wPj0xMT9wOnArMTI6Ilx1NGUwYlx1NTM0OCI9PT1WfHwiXHU2NjVhXHU0ZTBhIj09PVY/cCsxMjp2b2lkIDB9LG1lcmlkaWVt''@;'; put 'put ''OmZ1bmN0aW9uKHAsVix3KXt2YXIgUD0xMDAqcCtWO3JldHVybiBQPDYwMD8iXHU1MWNjXHU2NjY4IjpQPDkwMD8iXHU2NWU5XHU0ZTBhIjpQPDExMzA/Ilx1NGUwYVx1NTM0OCI6UDwxMjMwPyJcdTRlMmRcdTUzNDgiOlA8MTgwMD8iXHU0ZTBiXHU1MzQ4IjoiXHU2NjVhXHU0ZTBhIn0sY2Fs''@;'; put 'put ''ZW5kYXI6e3NhbWVEYXk6IltcdTRlY2FcdTU5MjldIExUIixuZXh0RGF5OiJbXHU2NjBlXHU1OTI5XSBMVCIsbmV4dFdlZWs6IltcdTRlMGJdZGRkZCBMVCIsbGFzdERheToiW1x1NjYyOFx1NTkyOV0gTFQiLGxhc3RXZWVrOiJbXHU0ZTBhXWRkZGQgTFQiLHNhbWVFbHNlOiJMIn0sZGF5T2ZN''@;'; put 'put ''b250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcdTY1ZTV8XHU2NzA4fFx1OTAzMSkvLG9yZGluYWw6ZnVuY3Rpb24ocCxWKXtzd2l0Y2goVil7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gcCsiXHU2NWU1IjtjYXNlIk0iOnJldHVybiBwKyJcdTY3MDgiO2Nhc2UidyI6Y2FzZSJX''@;'; put 'put ''IjpyZXR1cm4gcCsiXHU5MDMxIjtkZWZhdWx0OnJldHVybiBwfX0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHU1MTY3IixwYXN0OiIlc1x1NTI0ZCIsczoiXHU1ZTdlXHU3OWQyIixzczoiJWQgXHU3OWQyIixtOiIxIFx1NTIwNlx1OTQxOCIsbW06IiVkIFx1NTIwNlx1OTQxOCIsaDoiMSBc''@;'; put 'put ''dTVjMGZcdTY2NDIiLGhoOiIlZCBcdTVjMGZcdTY2NDIiLGQ6IjEgXHU1OTI5IixkZDoiJWQgXHU1OTI5IixNOiIxIFx1NTAwYlx1NjcwOCIsTU06IiVkIFx1NTAwYlx1NjcwOCIseToiMSBcdTVlNzQiLHl5OiIlZCBcdTVlNzQifX0pfShiKDk3NTg2KSl9LDUxODAwOmZ1bmN0aW9uKGNlLFgs''@;'; put 'put ''Yil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiZW4tZ2IiLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhz''@;'; put 'put ''U2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5f''@;'; put 'put ''TW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1N''@;'; put 'put ''TU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RX''@;'; put 'put ''ZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQg''@;'; put 'put ''aG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihwKXt2YXIgVj1wJTEwO3JldHVy''@;'; put 'put ''biBwKygxPT1+fihwJTEwMC8xMCk/InRoIjoxPT09Vj8ic3QiOjI9PT1WPyJuZCI6Mz09PVY/InJkIjoidGgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sNTE4NTY6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig3MTk5MyksXz1iKDMxMjEpLHA9Yig3MDQ2Myks''@;'; put 'put ''Vj1iKDI3MDU0KS5CdWZmZXIsdz1uZXcgQXJyYXkoMTYwKTtmdW5jdGlvbiBQKCl7dGhpcy5pbml0KCksdGhpcy5fdz13LHAuY2FsbCh0aGlzLDEyOCwxMTIpfUkoUCxfKSxQLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FoPTM0MTgwNzAzNjUsdGhpcy5fYmg9MTY1''@;'; put 'put ''NDI3MDI1MCx0aGlzLl9jaD0yNDM4NTI5MzcwLHRoaXMuX2RoPTM1NTQ2MjM2MCx0aGlzLl9laD0xNzMxNDA1NDE1LHRoaXMuX2ZoPTIzOTQxODAyMzEsdGhpcy5fZ2g9MzY3NTAwODUyNSx0aGlzLl9oaD0xMjAzMDYyODEzLHRoaXMuX2FsPTMyMzgzNzEwMzIsdGhpcy5fYmw9OTE0MTUwNjYz''@;'; put 'put ''LHRoaXMuX2NsPTgxMjcwMjk5OSx0aGlzLl9kbD00MTQ0OTEyNjk3LHRoaXMuX2VsPTQyOTA3NzU4NTcsdGhpcy5fZmw9MTc1MDYwMzAyNSx0aGlzLl9nbD0xNjk0MDc2ODM5LHRoaXMuX2hsPTMyMDQwNzU0MjgsdGhpc30sUC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgRj1WLmFs''@;'; put 'put ''bG9jVW5zYWZlKDQ4KTtmdW5jdGlvbiBSKHosTixPKXtGLndyaXRlSW50MzJCRSh6LE8pLEYud3JpdGVJbnQzMkJFKE4sTys0KX1yZXR1cm4gUih0aGlzLl9haCx0aGlzLl9hbCwwKSxSKHRoaXMuX2JoLHRoaXMuX2JsLDgpLFIodGhpcy5fY2gsdGhpcy5fY2wsMTYpLFIodGhpcy5fZGgsdGhp''@;'; put 'put ''cy5fZGwsMjQpLFIodGhpcy5fZWgsdGhpcy5fZWwsMzIpLFIodGhpcy5fZmgsdGhpcy5fZmwsNDApLEZ9LGNlLmV4cG9ydHM9UH0sNTIxNTU6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPWZ1bmN0aW9uKEYpe3JldHVybiAwPT09Rj8wOjE9PT1GPzE6''@;'; put 'put ''Mj09PUY/MjpGJTEwMD49MyYmRiUxMDA8PTEwPzM6RiUxMDA+PTExPzQ6NX0scD17czpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IiwiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYy''@;'; put 'put ''ZFx1MDYyZlx1MDYyOSIsWyJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IiwiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRh''@;'; put 'put ''XHUwNjI5IiwiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5Il0sbTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IiwiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1''@;'; put 'put ''MDYyZlx1MDYyOSIsWyJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIiwiJWQgXHUwNjJmXHUwNjQyXHUwNjRhXHUw''@;'; put 'put ''NjQyXHUwNjI5IiwiJWQgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5Il0saDpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYy''@;'; put 'put ''OSIsWyJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIiwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiJWQgXHUwNjMzXHUwNjI3''@;'; put 'put ''XHUwNjM5XHUwNjI5Il0sZDpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjRhXHUwNjQ4XHUwNjQ1IiwiXHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2NGFcdTA2NDhcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2NGFcdTA2NDhc''@;'; put 'put ''dTA2NDVcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IiwiJWQgXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjRhXHUwNjQ4XHUwNjQ1Il0sTTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjM0XHUwNjQ3XHUwNjMx''@;'; put 'put ''IiwiXHUwNjM0XHUwNjQ3XHUwNjMxIFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzRcdTA2NDdcdTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2MzRcdTA2NDdcdTA2MzFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIiwiJWQgXHUwNjM0XHUwNjQ3XHUw''@;'; put 'put ''NjMxXHUwNjI3IiwiJWQgXHUwNjM0XHUwNjQ3XHUwNjMxIl0seTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjM5XHUwNjI3XHUwNjQ1IiwiXHUwNjM5XHUwNjI3XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzlcdTA2MjdcdTA2NDVcdTA2Mjdc''@;'; put 'put ''dTA2NDYiLCJcdTA2MzlcdTA2MjdcdTA2NDVcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM5XHUwNjQ4XHUwNjI3XHUwNjQ1IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1Il19LFY9ZnVuY3Rpb24oRil7cmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uKFIseixOLE8pe3ZhciBLPV8oUiksWj1wW0ZdW18oUildO3JldHVybiAyPT09SyYmKFo9Wlt6PzA6MV0pLFoucmVwbGFjZSgvJWQvaSxSKX19LHc9WyJcdTA2MmNcdTA2MjdcdTA2NDZcdTA2NDFcdTA2NGEiLCJcdTA2NDFcdTA2NGFcdTA2NDFcdTA2MzFcdTA2NGEiLCJcdTA2NDVcdTA2''@;'; put 'put ''MjdcdTA2MzFcdTA2MzMiLCJcdTA2MjNcdTA2NDFcdTA2MzFcdTA2NGFcdTA2NDQiLCJcdTA2NDVcdTA2MjdcdTA2NGEiLCJcdTA2MmNcdTA2NDhcdTA2MjdcdTA2NDYiLCJcdTA2MmNcdTA2NDhcdTA2NGFcdTA2NDRcdTA2NGFcdTA2MjkiLCJcdTA2MjNcdTA2NDhcdTA2MmEiLCJcdTA2MzNc''@;'; put 'put ''dTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzEiLCJcdTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiXTtJLmRlZmluZUxvY2FsZSgi''@;'; put 'put ''YXItZHoiLHttb250aHM6dyxtb250aHNTaG9ydDp3LHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9c''@;'; put 'put ''dTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXNTaG9ydDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19c''@;'; put 'put ''dTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0''@;'; put 'put ''OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkQvXHUyMDBmTS9cdTIwMGZZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2MzV8XHUwNjQ1Lyxpc1BNOmZ1bmN0''@;'; put 'put ''aW9uKEYpe3JldHVybiJcdTA2NDUiPT09Rn0sbWVyaWRpZW06ZnVuY3Rpb24oRixSLHope3JldHVybiBGPDEyPyJcdTA2MzUiOiJcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0''@;'; put 'put ''XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDY0Ylx1MDYyNyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2''@;'; put 'put ''MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ2XHUwNjJmIFx1''@;'; put 'put ''MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDYyOFx1MDYzOVx1MDYyZiAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOlYoInMiKSxzczpWKCJzIiksbTpWKCJtIiksbW06VigibSIp''@;'; put 'put ''LGg6VigiaCIpLGhoOlYoImgiKSxkOlYoImQiKSxkZDpWKCJkIiksTTpWKCJNIiksTU06VigiTSIpLHk6VigieSIpLHl5OlYoInkiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihGKXtyZXR1cm4gRi5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6MCxkb3k6NH19KX0oYig5NzU4Nikp''@;'; put 'put ''fSw1MjUyOTooY2UsWCxiKT0+e3ZhciBJPVg7SS51dGlscz1iKDY4MjgzKSxJLmNvbW1vbj1iKDEyOTAxKSxJLnNoYT1iKDc4NTI4KSxJLnJpcGVtZD1iKDE1MjgzKSxJLmhtYWM9YigzNzE2MyksSS5zaGExPUkuc2hhLnNoYTEsSS5zaGEyNTY9SS5zaGEuc2hhMjU2LEkuc2hhMjI0PUkuc2hh''@;'; put 'put ''LnNoYTIyNCxJLnNoYTM4ND1JLnNoYS5zaGEzODQsSS5zaGE1MTI9SS5zaGEuc2hhNTEyLEkucmlwZW1kMTYwPUkucmlwZW1kLnJpcGVtZDE2MH0sNTI3ODY6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yfSw1MjkxMDpjZT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0IjtjZS5leHBvcnRzPXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdCYmUmVmbGVjdC5hcHBseX0sNTI5NjU6KGNlLFgsYik9PntYLnB1YmxpY0VuY3J5cHQ9Yig4NzI2NyksWC5wcml2YXRlRGVjcnlwdD1iKDk4NjEzKSxYLnByaXZhdGVFbmNyeXB0PWZ1bmN0aW9uKF8scCl7''@;'; put 'put ''cmV0dXJuIFgucHVibGljRW5jcnlwdChfLHAsITApfSxYLnB1YmxpY0RlY3J5cHQ9ZnVuY3Rpb24oXyxwKXtyZXR1cm4gWC5wcml2YXRlRGVjcnlwdChfLHAsITApfX0sNTMzNDQ6KGNlLFgsYik9Pnt2YXIgST1iKDI1MTcyKTtjZS5leHBvcnRzPWZ1bmN0aW9uIF8ocCl7cmV0dXJuIG5ldyBJ''@;'; put 'put ''KHAsMCl9LGNlLmV4cG9ydHMuX19lc01vZHVsZT0hMCxjZS5leHBvcnRzLmRlZmF1bHQ9Y2UuZXhwb3J0c30sNTMzNDg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigyODM2NyksXz1iKDMwNzg3KSxwPWIoMzE0ODMpLFY9YigxMTA4KSx3PWIoNzU0MjQpLFA9Yig2NjU0MiksRj1i''@;'; put 'put ''KDQxMjUyKSxSPWIoNDAyMjApLHo9Yig1NTU5MiksTj1UeXBlRXJyb3IsTz16KGZ1bmN0aW9uKCl7W10ua2V5cygpLnJlZHVjZShmdW5jdGlvbigpe30sdm9pZCAwKX0pLEs9IU8mJkYoInJlZHVjZSIsTik7SSh7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6T3x8''@;'; put 'put ''S30se3JlZHVjZTpmdW5jdGlvbihZKXtWKHRoaXMpO3RyeXtwKFkpfWNhdGNoKHJlKXtQKHRoaXMsInRocm93IixyZSl9dmFyIFc9YXJndW1lbnRzLmxlbmd0aDwyLHE9Vz92b2lkIDA6YXJndW1lbnRzWzFdO2lmKEspcmV0dXJuIFIoSyx0aGlzLFc/W1ldOltZLHFdKTt2YXIgZWU9dyh0aGlz''@;'; put 'put ''KSxKPTA7aWYoXyhlZSxmdW5jdGlvbihyZSl7Vz8oVz0hMSxxPXJlKTpxPVkocSxyZSxKKSxKKyt9LHtJU19SRUNPUkQ6ITB9KSxXKXRocm93IG5ldyBOKCJSZWR1Y2Ugb2YgZW1wdHkgaXRlcmF0b3Igd2l0aCBubyBpbml0aWFsIHZhbHVlIik7cmV0dXJuIHF9fSl9LDUzNDQ5OmZ1bmN0aW9u''@;'; put 'put ''KGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgic3ciLHttb250aHM6IkphbnVhcmlfRmVicnVhcmlfTWFjaGlfQXByaWxpX01laV9KdW5pX0p1bGFpX0Fnb3N0aV9TZXB0ZW1iYV9Pa3RvYmFfTm92ZW1iYV9EZXNlbWJhIi5zcGxpdCgiXyIpLG1vbnRo''@;'; put 'put ''c1Nob3J0OiJKYW5fRmViX01hY19BcHJfTWVpX0p1bl9KdWxfQWdvX1NlcF9Pa3RfTm92X0RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiSnVtYXBpbGlfSnVtYXRhdHVfSnVtYW5uZV9KdW1hdGFub19BbGhhbWlzaV9JanVtYWFfSnVtYW1vc2kiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi''@;'; put 'put ''SnBsX0p0YXRfSm5uZV9KdGFuX0FsaF9Jam1fSm1vcyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiSjJfSjNfSjRfSjVfQWxfSWpfSjEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiaGg6bW0gQSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0u''@;'; put 'put ''WVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbbGVvIHNhYV0gTFQiLG5leHREYXk6IltrZXNobyBzYWFdIExUIixuZXh0V2VlazoiW3dpa2kgaWpheW9dIGRkZGQg''@;'; put 'put ''W3NhYXRdIExUIixsYXN0RGF5OiJbamFuYV0gTFQiLGxhc3RXZWVrOiJbd2lraSBpbGl5b3BpdGFdIGRkZGQgW3NhYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBiYWFkYXllIixwYXN0OiJ0b2tlYSAlcyIsczoiaGl2aSBwdW5kZSIsc3M6InNla3VuZGUg''@;'; put 'put ''JWQiLG06ImRha2lrYSBtb2phIixtbToiZGFraWthICVkIixoOiJzYWEgbGltb2phIixoaDoibWFzYWEgJWQiLGQ6InNpa3UgbW9qYSIsZGQ6InNpa3UgJWQiLE06Im13ZXppIG1tb2phIixNTToibWllemkgJWQiLHk6Im13YWthIG1tb2phIix5eToibWlha2EgJWQifSx3ZWVrOntkb3c6MSxk''@;'; put 'put ''b3k6N319KX0oYig5NzU4NikpfSw1MzQ1OTooY2UsWCxiKT0+e3ZhciBJPWIoNTcyMjMpLF89YigzNTI5NCk7ZnVuY3Rpb24gcChWKXt0aGlzLnJhbmQ9Vnx8bmV3IF8uUmFuZH1jZS5leHBvcnRzPXAscC5jcmVhdGU9ZnVuY3Rpb24odyl7cmV0dXJuIG5ldyBwKHcpfSxwLnByb3RvdHlwZS5f''@;'; put 'put ''cmFuZGJlbG93PWZ1bmN0aW9uKHcpe3ZhciBQPXcuYml0TGVuZ3RoKCksRj1NYXRoLmNlaWwoUC84KTtkb3t2YXIgUj1uZXcgSSh0aGlzLnJhbmQuZ2VuZXJhdGUoRikpfXdoaWxlKFIuY21wKHcpPj0wKTtyZXR1cm4gUn0scC5wcm90b3R5cGUuX3JhbmRyYW5nZT1mdW5jdGlvbih3LFApe3Zh''@;'; put 'put ''ciBGPVAuc3ViKHcpO3JldHVybiB3LmFkZCh0aGlzLl9yYW5kYmVsb3coRikpfSxwLnByb3RvdHlwZS50ZXN0PWZ1bmN0aW9uKHcsUCxGKXt2YXIgUj13LmJpdExlbmd0aCgpLHo9SS5tb250KHcpLE49bmV3IEkoMSkudG9SZWQoeik7UHx8KFA9TWF0aC5tYXgoMSxSLzQ4fDApKTtmb3IodmFy''@;'; put 'put ''IE89dy5zdWJuKDEpLEs9MDshTy50ZXN0bihLKTtLKyspO2Zvcih2YXIgWj13LnNocm4oSyksWT1PLnRvUmVkKHopO1A+MDtQLS0pe3ZhciBxPXRoaXMuX3JhbmRyYW5nZShuZXcgSSgyKSxPKTtGJiZGKHEpO3ZhciBlZT1xLnRvUmVkKHopLnJlZFBvdyhaKTtpZigwIT09ZWUuY21wKE4pJiYw''@;'; put 'put ''IT09ZWUuY21wKFkpKXtmb3IodmFyIEo9MTtKPEs7SisrKXtpZigwPT09KGVlPWVlLnJlZFNxcigpKS5jbXAoTikpcmV0dXJuITE7aWYoMD09PWVlLmNtcChZKSlicmVha31pZihKPT09SylyZXR1cm4hMX19cmV0dXJuITB9LHAucHJvdG90eXBlLmdldERpdmlzb3I9ZnVuY3Rpb24odyxQKXt2''@;'; put 'put ''YXIgRj13LmJpdExlbmd0aCgpLFI9SS5tb250KHcpLHo9bmV3IEkoMSkudG9SZWQoUik7UHx8KFA9TWF0aC5tYXgoMSxGLzQ4fDApKTtmb3IodmFyIE49dy5zdWJuKDEpLE89MDshTi50ZXN0bihPKTtPKyspO2Zvcih2YXIgSz13LnNocm4oTyksWj1OLnRvUmVkKFIpO1A+MDtQLS0pe3ZhciBZ''@;'; put 'put ''PXRoaXMuX3JhbmRyYW5nZShuZXcgSSgyKSxOKSxXPXcuZ2NkKFkpO2lmKDAhPT1XLmNtcG4oMSkpcmV0dXJuIFc7dmFyIHE9WS50b1JlZChSKS5yZWRQb3coSyk7aWYoMCE9PXEuY21wKHopJiYwIT09cS5jbXAoWikpe2Zvcih2YXIgZWU9MTtlZTxPO2VlKyspe2lmKDA9PT0ocT1xLnJlZFNx''@;'; put 'put ''cigpKS5jbXAoeikpcmV0dXJuIHEuZnJvbVJlZCgpLnN1Ym4oMSkuZ2NkKHcpO2lmKDA9PT1xLmNtcChaKSlicmVha31pZihlZT09PU8pcmV0dXJuKHE9cS5yZWRTcXIoKSkuZnJvbVJlZCgpLnN1Ym4oMSkuZ2NkKHcpfX1yZXR1cm4hMX19LDUzNTA1OihjZSxYLGIpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBJPWIoMTIyMDIpLF89ZnVuY3Rpb24oVil7cmV0dXJue3NpemU6VixoYXM6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sa2V5czpmdW5jdGlvbigpe3JldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ITB9fX19fX0scD1mdW5jdGlvbihWKXtyZXR1cm57c2l6ZTpWLGhhczpmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiEwfSxrZXlzOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJlIil9fX07Y2UuZXhwb3J0cz1mdW5jdGlvbihWLHcpe3ZhciBQPUkoIlNldCIpO3RyeXsobmV3IFApW1ZdKF8oMCkpO3RyeXtyZXR1cm4obmV3IFApW1ZdKF8oLTEpKSwhMX1jYXRjaHtpZighdylyZXR1''@;'; put 'put ''cm4hMDt0cnl7cmV0dXJuKG5ldyBQKVtWXShwKC0xLzApKSwhMX1jYXRjaHtyZXR1cm4gdyhuZXcgUChbMSwyXSlbVl0ocCgxLzApKSl9fX1jYXRjaHtyZXR1cm4hMX19fSw1MzU4MzpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImFy''@;'; put 'put ''LWt3Iix7bW9udGhzOiJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDY0YVx1''@;'; put 'put ''MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDhcdTA2MzJfXHUwNjNhXHUwNjM0XHUwNjJhX1x1MDYzNFx1MDYyYVx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQ2''@;'; put 'put ''XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDYyY1x1MDY0Nlx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUw''@;'; put 'put ''NjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjMyX1x1MDYzYVx1MDYzNFx1MDYyYV9cdTA2MzRcdTA2MmFcdTA2NDZcdTA2MjhcdTA2MzFf''@;'; put 'put ''XHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2MmNcdTA2NDZcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRc''@;'; put 'put ''dTA2MjVcdTA2MmFcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNf''@;'; put 'put ''XHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjdcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjJhXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1''@;'; put 'put ''MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUw''@;'; put 'put ''NjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixM''@;'; put 'put ''TExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZc''@;'; put 'put ''dTA2MjcgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0''@;'; put 'put ''NVx1MDYzMyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0''@;'; put 'put ''aXZlVGltZTp7ZnV0dXJlOiJcdTA2NDFcdTA2NGEgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczoiXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IixtOiJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2Mjki''@;'; put 'put ''LG1tOiIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLGg6Ilx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsaGg6IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsZDoiXHUwNjRhXHUwNjQ4XHUwNjQ1IixkZDoiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IixN''@;'; put 'put ''OiJcdTA2MzRcdTA2NDdcdTA2MzEiLE1NOiIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLHk6Ilx1MDYzM1x1MDY0Nlx1MDYyOSIseXk6IiVkIFx1MDYzM1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDYyYSJ9LHdlZWs6e2RvdzowLGRveToxMn19KX0oYig5NzU4NikpfSw1NDEyMjooY2UsWCxi''@;'; put 'put ''KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQ2Mzg3KSxfPWIoNDY5MjYpLHA9YigzOTYyKSxWPWIoNzc3NzMpLHc9Yig5MzE2MiksUD1iKDU5NDEwKSxGPWIoMzhlMyksUj1iKDU3MjQ0KSx6PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7WC5mPUk/ejpmdW5jdGlvbihPLEspe2lm''@;'; put 'put ''KE89dyhPKSxLPVAoSyksUil0cnl7cmV0dXJuIHooTyxLKX1jYXRjaHt9aWYoRihPLEspKXJldHVybiBWKCFfKHAuZixPLEspLE9bS10pfX0sNTQyNzI6KGNlLFgsYik9Pnt2YXIgST1iKDgzODM4KSxfPUkuQnVmZmVyO2Z1bmN0aW9uIHAodyxQKXtmb3IodmFyIEYgaW4gdylQW0ZdPXdbRl19''@;'; put 'put ''ZnVuY3Rpb24gVih3LFAsRil7cmV0dXJuIF8odyxQLEYpfV8uZnJvbSYmXy5hbGxvYyYmXy5hbGxvY1Vuc2FmZSYmXy5hbGxvY1Vuc2FmZVNsb3c/Y2UuZXhwb3J0cz1JOihwKEksWCksWC5CdWZmZXI9VikscChfLFYpLFYuZnJvbT1mdW5jdGlvbih3LFAsRil7aWYoIm51bWJlciI9PXR5cGVv''@;'; put 'put ''ZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIF8odyxQLEYpfSxWLmFsbG9jPWZ1bmN0aW9uKHcsUCxGKXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJl''@;'; put 'put ''ciIpO3ZhciBSPV8odyk7cmV0dXJuIHZvaWQgMCE9PVA/InN0cmluZyI9PXR5cGVvZiBGP1IuZmlsbChQLEYpOlIuZmlsbChQKTpSLmZpbGwoMCksUn0sVi5hbGxvY1Vuc2FmZT1mdW5jdGlvbih3KXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQg''@;'; put 'put ''bXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBfKHcpfSxWLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih3KXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBJLlNsb3dCdWZmZXIodyl9fSw1NDY1OToo''@;'; put 'put ''Y2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST17fTtiLnIoSSksYi5kKEkse2FycmF5QXZnOigpPT5RbnQsYXJyYXlFYWNoOigpPT5LbixhcnJheUZpbHRlcjooKT0+UzYsYXJyYXlGbGF0dGVuOigpPT5PNGUsYXJyYXlNYXA6KCk9PlpzLGFycmF5TWF4OigpPT5xbnQsYXJyYXlNaW46KCk9''@;'; put 'put ''PkpudCxhcnJheVJlZHVjZTooKT0+YTAsYXJyYXlTdW06KCk9Pkw0ZSxhcnJheVVuaXF1ZTooKT0+UDRlLGV4dGVuZEFycmF5OigpPT5CcSxnZXREaWZmZXJlbmNlT2ZBcnJheXM6KCk9PmpxLGdldEludGVyc2VjdGlvbk9mQXJyYXlzOigpPT5lcnQsZ2V0VW5pb25PZkFycmF5czooKT0+dHJ0''@;'; put 'put ''LHBpdm90OigpPT5EQSxzdHJpbmdUb0FycmF5OigpPT56cSx0bzJkQXJyYXk6KCk9PlI0ZX0pO3ZhciBfPXt9O2IucihfKSxiLmQoXyx7X2luamVjdFByb2R1Y3RJbmZvOigpPT5qNGUsaXNEZWZpbmVkOigpPT5NYSxpc0VtcHR5OigpPT50dSxpc1JlZ0V4cDooKT0+RjRlLGlzVW5kZWZpbmVk''@;'; put 'put ''OigpPT5iYyxzdHJpbmdpZnk6KCk9PnJjfSk7dmFyIHA9e307Yi5yKHApLGIuZChwLHtlcXVhbHNJZ25vcmVDYXNlOigpPT5hcnQsaXNKU09OOigpPT56NGUsaXNQZXJjZW50VmFsdWU6KCk9PldxLHJhbmRvbVN0cmluZzooKT0+WnEsc2FuaXRpemU6KCk9PktILHN0cmlwVGFnczooKT0+QzQs''@;'; put 'put ''c3Vic3RpdHV0ZTooKT0+JEgsdG9VcHBlckNhc2VGaXJzdDooKT0+VjF9KTt2YXIgVj17fTtiLnIoViksYi5kKFYse2Fzc2lnbk9iamVjdERlZmF1bHRzOigpPT5IQSxjbG9uZTooKT0+SzMsY3JlYXRlT2JqZWN0UHJvcExpc3RlbmVyOigpPT52aCxkZWVwQ2xvbmU6KCk9PkIxLGRlZXBFeHRl''@;'; put 'put ''bmQ6KCk9PlBBLGRlZXBPYmplY3RTaXplOigpPT5RSCxkZWZpbmVHZXR0ZXI6KCk9PlM0LGR1Y2tTY2hlbWE6KCk9PlB3LGV4dGVuZDooKT0+UHUsZ2V0UHJvcGVydHk6KCk9PnFILGhhc093blByb3BlcnR5OigpPT5udSxpbmhlcml0OigpPT5KNGUsaXNPYmplY3Q6KCk9Pm1vLGlzT2JqZWN0''@;'; put 'put ''RXF1YWw6KCk9PkZBLG1peGluOigpPT5wbCxvYmplY3RFYWNoOigpPT5hcyxzZXRQcm9wZXJ0eTooKT0+Skh9KTt2YXIgdz17fTtiLnIodyksYi5kKHcse2NhbmNlbEFuaW1hdGlvbkZyYW1lOigpPT5WQSxnZXRDb21wYXJpc29uRnVuY3Rpb246KCk9PmVnZSxpc0NTUjooKT0+UTRlLGlzVG91''@;'; put 'put ''Y2hTdXBwb3J0ZWQ6KCk9PiRxLHJlcXVlc3RBbmltYXRpb25GcmFtZTooKT0+TkF9KTt2YXIgUD17fTtiLnIoUCksYi5kKFAse2lzQ2hyb21lOigpPT5LcSxpc0Nocm9tZVdlYktpdDooKT0+cmdlLGlzRWRnZTooKT0+YWdlLGlzRWRnZVdlYktpdDooKT0+T3J0LGlzRmlyZWZveDooKT0+ZU4s''@;'; put 'put ''aXNGaXJlZm94V2ViS2l0OigpPT5pZ2UsaXNJT1M6KCk9PlhxLGlzSXBhZE9TOigpPT50Tixpc0xpbnV4T1M6KCk9PlBydCxpc01hY09TOigpPT5yTixpc01vYmlsZUJyb3dzZXI6KCk9PlgzLGlzU2FmYXJpOigpPT5CQSxpc1dpbmRvd3NPUzooKT0+bk4sc2V0QnJvd3Nlck1ldGE6KCk9PnRn''@;'; put 'put ''ZSxzZXRQbGF0Zm9ybU1ldGE6KCk9Pm5nZX0pO3ZhciBGPXt9O2IucihGKSxiLmQoRix7SFRNTF9DSEFSQUNURVJTOigpPT5oZ2UsYWRkQ2xhc3M6KCk9PmlpLGFkZEV2ZW50OigpPT5OcnQsY2xlYXJUZXh0U2VsZWN0aW9uOigpPT5uSixjbG9zZXN0OigpPT5NNixjbG9zZXN0RG93bjooKT0+''@;'; put 'put ''ekEsZW1wdHk6KCk9Png0LGZhc3RJbm5lckhUTUw6KCk9PlQ2LGZhc3RJbm5lclRleHQ6KCk9PkE2LGZpbmRGaXJzdFBhcmVudFdpdGhDbGFzczooKT0+bGdlLGdldENhcmV0UG9zaXRpb246KCk9PnRKLGdldENzc1RyYW5zZm9ybTooKT0+enJ0LGdldEZyYWN0aW9uYWxTY2FsaW5nQ29tcGVu''@;'; put 'put ''c2F0aW9uOigpPT52Z2UsZ2V0RnJhbWVFbGVtZW50OigpPT5zZ2UsZ2V0TWF4aW11bVNjcm9sbExlZnQ6KCk9PmdnZSxnZXRNYXhpbXVtU2Nyb2xsVG9wOigpPT5wZ2UsZ2V0UGFyZW50OigpPT5vZ2UsZ2V0UGFyZW50V2luZG93OigpPT5nNSxnZXRTY3JvbGxMZWZ0OigpPT5RcSxnZXRTY3Jv''@;'; put 'put ''bGxUb3A6KCk9PmFOLGdldFNjcm9sbGFibGVFbGVtZW50OigpPT5VQSxnZXRTY3JvbGxiYXJXaWR0aDooKT0+d3UsZ2V0U2VsZWN0aW9uRW5kUG9zaXRpb246KCk9Pm1nZSxnZXRTZWxlY3Rpb25UZXh0OigpPT5CcnQsZ2V0U3R5bGU6KCk9PlpBLGdldFRyaW1taW5nQ29udGFpbmVyOigpPT5O''@;'; put 'put ''dyxnZXRXaW5kb3dTY3JvbGxMZWZ0OigpPT5pTixnZXRXaW5kb3dTY3JvbGxUb3A6KCk9PkpxLGhhc0FjY2Vzc1RvUGFyZW50V2luZG93OigpPT5GcnQsaGFzQ2xhc3M6KCk9PkNvLGhhc0hvcml6b250YWxTY3JvbGxiYXI6KCk9PmFKLGhhc1ZlcnRpY2FsU2Nyb2xsYmFyOigpPT5pSixoYXNa''@;'; put 'put ''ZXJvSGVpZ2h0OigpPT5mZ2UsaW5kZXg6KCk9PmNnZSxpbm5lckhlaWdodDooKT0+VncsaW5uZXJXaWR0aDooKT0+ZUosaXNDaGlsZE9mOigpPT54Nixpc0RldGFjaGVkOigpPT5vSixpc0hUTUxFbGVtZW50OigpPT5FNCxpc0lucHV0OigpPT5HQSxpc0ludGVybmFsRWxlbWVudDooKT0+akEs''@;'; put 'put ''aXNPdXRzaWRlSW5wdXQ6KCk9PnNOLGlzVmlzaWJsZTooKT0+azYsbWFrZUVsZW1lbnRDb250ZW50RWRpdGFibGVBbmRTZWxlY3RJdHNDb250ZW50OigpPT5zSixtYXRjaGVzQ1NTUnVsZXM6KCk9PkhydCxvYnNlcnZlVmlzaWJpbGl0eUNoYW5nZU9uY2U6KCk9PnlnZSxvZmZzZXQ6KCk9PmQx''@;'; put 'put ''LG91dGVySGVpZ2h0OigpPT5GdSxvdXRlcldpZHRoOigpPT5fdSxvdmVybGF5Q29udGFpbnNFbGVtZW50OigpPT5FNixyZW1vdmVBdHRyaWJ1dGU6KCk9Pk00LHJlbW92ZUNsYXNzOigpPT5WYSxyZW1vdmVDb250ZW50RWRpdGFibGVGcm9tRWxlbWVudEFuZERlc2VsZWN0OigpPT5sSixyZW1v''@;'; put 'put ''dmVFdmVudDooKT0+VnJ0LHJlbW92ZVRleHROb2RlczooKT0+cXEscmVzZXRDc3NUcmFuc2Zvcm06KCk9PllBLHJ1bldpdGhTZWxlY3RlZENvbnRlbmRFZGl0YWJsZUVsZW1lbnQ6KCk9PmJnZSxzZWxlY3RFbGVtZW50SWZBbGxvd2VkOigpPT5VcnQsc2V0QXR0cmlidXRlOigpPT5aYSxzZXRD''@;'; put 'put ''YXJldFBvc2l0aW9uOigpPT5XQSxzZXRPdmVybGF5UG9zaXRpb246KCk9Pm9OfSk7dmFyIFI9e307Yi5yKFIpLGIuZChSLHtjdXJyeTooKT0+d2dlLGN1cnJ5UmlnaHQ6KCk9PllydCxkZWJvdW5jZTooKT0+JEEsZmFzdENhbGw6KCk9PmxOLGlzRnVuY3Rpb246KCk9PmlsLHBhcnRpYWw6KCk9''@;'; put 'put ''PmNKLHBpcGU6KCk9PldydCx0aHJvdHRsZTooKT0+X2dlLHRocm90dGxlQWZ0ZXJIaXRzOigpPT5acnR9KTt2YXIgej17fTtiLnIoeiksYi5kKHose0tFWV9DT0RFUzooKT0+cm8saXNDdHJsS2V5OigpPT4kcnQsaXNDdHJsTWV0YUtleTooKT0+U2dlLGlzRnVuY3Rpb25LZXk6KCk9PnVKLGlz''@;'; put 'put ''S2V5OigpPT5xOSxpc1ByaW50YWJsZUNoYXI6KCk9PkNnZX0pO3ZhciBOPXt9O2IucihOKSxiLmQoTix7aXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6KCk9PkQ2LGlzTGVmdENsaWNrOigpPT5jTixpc1JpZ2h0Q2xpY2s6KCk9Pkk2LGlzVG91Y2hFdmVudDooKT0+TWdlLG9mZnNldFJl''@;'; put 'put ''bGF0aXZlVG86KCk9PnhnZSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246KCk9PkUyfSk7dmFyIE89e307Yi5yKE8pLGIuZChPLHtfZGF0YVRvSFRNTDooKT0+d0osaHRtbFRvR3JpZFNldHRpbmdzOigpPT5DSixpbnN0YW5jZVRvSFRNTDooKT0+X0p9KTt2YXIgSz17fTtiLnIoSyksYi5kKEss''@;'; put 'put ''e2NsYW1wOigpPT5ncyxnZXRQYXJzZWROdW1iZXI6KCk9Pk5nZSxpc051bWVyaWM6KCk9PmoxLGlzTnVtZXJpY0xpa2U6KCk9PkhnZSxpc1Vuc2lnbmVkTnVtYmVyOigpPT50dixyYW5nZUVhY2g6KCk9PlFhLHJhbmdlRWFjaFJldmVyc2U6KCk9PlNKLHZhbHVlQWNjb3JkaW5nUGVyY2VudDoo''@;'; put 'put ''KT0+TUp9KTt2YXIgWj17fTtiLnIoWiksYi5kKFose2NvdW50Rmlyc3RSb3dLZXlzOigpPT5vUSxjcmVhdGVFbXB0eVNwcmVhZHNoZWV0RGF0YTooKT0+WnN0LGNyZWF0ZVNwcmVhZHNoZWV0RGF0YTooKT0+enN0LGNyZWF0ZVNwcmVhZHNoZWV0T2JqZWN0RGF0YTooKT0+VXN0LGRhdGFSb3dU''@;'; put 'put ''b0NoYW5nZXNBcnJheTooKT0+YVEsaXNBcnJheU9mQXJyYXlzOigpPT56NWUsaXNBcnJheU9mT2JqZWN0czooKT0+VTVlLHNwcmVhZHNoZWV0Q29sdW1uSW5kZXg6KCk9PmpzdCxzcHJlYWRzaGVldENvbHVtbkxhYmVsOigpPT5UTn0pO3ZhciBZPXt9O2IucihZKSxiLmQoWSx7Q0FOQ0VMOigp''@;'; put 'put ''PT55USxDSEVDS0JPWF9DSEVDS0VEOigpPT5ZZWUsQ0hFQ0tCT1hfUkVOREVSRVJfTkFNRVNQQUNFOigpPT5XZWUsQ0hFQ0tCT1hfVU5DSEVDS0VEOigpPT5HZWUsQ09NTU9OX05BTUVTUEFDRTooKT0+dlEsQ09OVEVYVE1FTlVfSVRFTVNfQUREX0NPTU1FTlQ6KCk9Pk5RLENPTlRFWFRNRU5V''@;'; put 'put ''X0lURU1TX0FMSUdOTUVOVDooKT0+elEsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0JPVFRPTTooKT0+S1EsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0NFTlRFUjooKT0+WlEsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0pVU1RJRlk6KCk9PllRLENPTlRFWFRNRU5VX0lU''@;'; put 'put ''RU1TX0FMSUdOTUVOVF9MRUZUOigpPT5VUSxDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfTUlERExFOigpPT4kUSxDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfUklHSFQ6KCk9PldRLENPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9UT1A6KCk9PkdRLENPTlRFWFRNRU5VX0lURU1T''@;'; put 'put ''X0JPUkRFUlM6KCk9PlhRLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfQk9UVE9NOigpPT5RUSxDT05URVhUTUVOVV9JVEVNU19CT1JERVJTX0xFRlQ6KCk9PmVlZSxDT05URVhUTUVOVV9JVEVNU19CT1JERVJTX1JJR0hUOigpPT5KUSxDT05URVhUTUVOVV9JVEVNU19CT1JERVJTX1RPUDoo''@;'; put 'put ''KT0+cVEsQ09OVEVYVE1FTlVfSVRFTVNfQ0xFQVJfQ09MVU1OOigpPT5BUSxDT05URVhUTUVOVV9JVEVNU19DT1BZOigpPT5rUSxDT05URVhUTUVOVV9JVEVNU19DT1BZX0NPTFVNTl9IRUFERVJTX09OTFk6KCk9PlJRLENPTlRFWFRNRU5VX0lURU1TX0NPUFlfV0lUSF9DT0xVTU5fR1JPVVBf''@;'; put 'put ''SEVBREVSUzooKT0+SVEsQ09OVEVYVE1FTlVfSVRFTVNfQ09QWV9XSVRIX0NPTFVNTl9IRUFERVJTOigpPT5EUSxDT05URVhUTUVOVV9JVEVNU19DVVQ6KCk9PkxRLENPTlRFWFRNRU5VX0lURU1TX0VESVRfQ09NTUVOVDooKT0+VlEsQ09OVEVYVE1FTlVfSVRFTVNfRlJFRVpFX0NPTFVNTjoo''@;'; put 'put ''KT0+T1EsQ09OVEVYVE1FTlVfSVRFTVNfSElERV9DT0xVTU46KCk9PmllZSxDT05URVhUTUVOVV9JVEVNU19ISURFX1JPVzooKT0+b2VlLENPTlRFWFRNRU5VX0lURU1TX0lOU0VSVF9MRUZUOigpPT5DUSxDT05URVhUTUVOVV9JVEVNU19JTlNFUlRfUklHSFQ6KCk9PlNRLENPTlRFWFRNRU5V''@;'; put 'put ''X0lURU1TX01FUkdFX0NFTExTOigpPT5GUSxDT05URVhUTUVOVV9JVEVNU19ORVNURURfUk9XU19ERVRBQ0hfQ0hJTEQ6KCk9PnJlZSxDT05URVhUTUVOVV9JVEVNU19ORVNURURfUk9XU19JTlNFUlRfQ0hJTEQ6KCk9Pm5lZSxDT05URVhUTUVOVV9JVEVNU19OT19JVEVNUzooKT0+YlEsQ09O''@;'; put 'put ''VEVYVE1FTlVfSVRFTVNfUkVBRF9PTkxZOigpPT5GTixDT05URVhUTUVOVV9JVEVNU19SRUFEX09OTFlfQ09NTUVOVDooKT0+alEsQ09OVEVYVE1FTlVfSVRFTVNfUkVETzooKT0+VFEsQ09OVEVYVE1FTlVfSVRFTVNfUkVNT1ZFX0JPUkRFUlM6KCk9PnRlZSxDT05URVhUTUVOVV9JVEVNU19S''@;'; put 'put ''RU1PVkVfQ09MVU1OOigpPT54USxDT05URVhUTUVOVV9JVEVNU19SRU1PVkVfQ09NTUVOVDooKT0+QlEsQ09OVEVYVE1FTlVfSVRFTVNfUkVNT1ZFX1JPVzooKT0+TVEsQ09OVEVYVE1FTlVfSVRFTVNfUk9XX0FCT1ZFOigpPT5fUSxDT05URVhUTUVOVV9JVEVNU19ST1dfQkVMT1c6KCk9PndR''@;'; put 'put ''LENPTlRFWFRNRU5VX0lURU1TX1NIT1dfQ09MVU1OOigpPT5hZWUsQ09OVEVYVE1FTlVfSVRFTVNfU0hPV19ST1c6KCk9PnNlZSxDT05URVhUTUVOVV9JVEVNU19VTkRPOigpPT5FUSxDT05URVhUTUVOVV9JVEVNU19VTkZSRUVaRV9DT0xVTU46KCk9PlBRLENPTlRFWFRNRU5VX0lURU1TX1VO''@;'; put 'put ''TUVSR0VfQ0VMTFM6KCk9PkhRLENPTlRFWFRfTUVOVV9JVEVNU19OQU1FU1BBQ0U6KCk9PnJtZSxFTVBUWV9EQVRBX1NUQVRFX0JVVFRPTlNfRklMVEVSU19SRVNFVDooKT0+UWVlLEVNUFRZX0RBVEFfU1RBVEVfREVTQ1JJUFRJT046KCk9PlhlZSxFTVBUWV9EQVRBX1NUQVRFX0RFU0NSSVBU''@;'; put 'put ''SU9OX0ZJTFRFUlM6KCk9PkplZSxFTVBUWV9EQVRBX1NUQVRFX05BTUVTUEFDRTooKT0+SncsRU1QVFlfREFUQV9TVEFURV9USVRMRTooKT0+S2VlLEVNUFRZX0RBVEFfU1RBVEVfVElUTEVfRklMVEVSUzooKT0+cWVlLEZJTFRFUlNfQlVUVE9OU19DQU5DRUw6KCk9PkxlZSxGSUxURVJTX0JV''@;'; put 'put ''VFRPTlNfQ0xFQVI6KCk9PkllZSxGSUxURVJTX0JVVFRPTlNfT0s6KCk9PlJlZSxGSUxURVJTX0JVVFRPTlNfUExBQ0VIT0xERVJfU0VBUkNIOigpPT5PZWUsRklMVEVSU19CVVRUT05TX1BMQUNFSE9MREVSX1NFQ09ORF9WQUxVRTooKT0+RmVlLEZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERF''@;'; put 'put ''Ul9WQUxVRTooKT0+UGVlLEZJTFRFUlNfQlVUVE9OU19TRUxFQ1RfQUxMOigpPT5EZWUsRklMVEVSU19DT05ESVRJT05TX0FGVEVSOigpPT5DZWUsRklMVEVSU19DT05ESVRJT05TX0JFRk9SRTooKT0+U2VlLEZJTFRFUlNfQ09ORElUSU9OU19CRUdJTlNfV0lUSDooKT0+aGVlLEZJTFRFUlNf''@;'; put 'put ''Q09ORElUSU9OU19CRVRXRUVOOigpPT5fZWUsRklMVEVSU19DT05ESVRJT05TX0JZX1ZBTFVFOigpPT53bHQsRklMVEVSU19DT05ESVRJT05TX0NPTlRBSU5TOigpPT5wZWUsRklMVEVSU19DT05ESVRJT05TX0VNUFRZOigpPT5sZWUsRklMVEVSU19DT05ESVRJT05TX0VORFNfV0lUSDooKT0+''@;'; put 'put ''ZmVlLEZJTFRFUlNfQ09ORElUSU9OU19FUVVBTDooKT0+dWVlLEZJTFRFUlNfQ09ORElUSU9OU19HUkVBVEVSX1RIQU46KCk9Pm1lZSxGSUxURVJTX0NPTkRJVElPTlNfR1JFQVRFUl9USEFOX09SX0VRVUFMOigpPT52ZWUsRklMVEVSU19DT05ESVRJT05TX0xFU1NfVEhBTjooKT0+eWVlLEZJ''@;'; put 'put ''TFRFUlNfQ09ORElUSU9OU19MRVNTX1RIQU5fT1JfRVFVQUw6KCk9PmJlZSxGSUxURVJTX0NPTkRJVElPTlNfTkFNRVNQQUNFOigpPT5pdSxGSUxURVJTX0NPTkRJVElPTlNfTk9ORTooKT0+SE4sRklMVEVSU19DT05ESVRJT05TX05PVF9CRVRXRUVOOigpPT53ZWUsRklMVEVSU19DT05ESVRJ''@;'; put 'put ''T05TX05PVF9DT05UQUlOOigpPT5nZWUsRklMVEVSU19DT05ESVRJT05TX05PVF9FTVBUWTooKT0+Y2VlLEZJTFRFUlNfQ09ORElUSU9OU19OT1RfRVFVQUw6KCk9PmRlZSxGSUxURVJTX0NPTkRJVElPTlNfVE9EQVk6KCk9Pk1lZSxGSUxURVJTX0NPTkRJVElPTlNfVE9NT1JST1c6KCk9Pnhl''@;'; put 'put ''ZSxGSUxURVJTX0NPTkRJVElPTlNfWUVTVEVSREFZOigpPT5FZWUsRklMVEVSU19ESVZTX0ZJTFRFUl9CWV9DT05ESVRJT046KCk9PlRlZSxGSUxURVJTX0RJVlNfRklMVEVSX0JZX1ZBTFVFOigpPT5BZWUsRklMVEVSU19MQUJFTFNfQ09OSlVOQ1RJT046KCk9PmtlZSxGSUxURVJTX0xBQkVM''@;'; put 'put ''U19ESVNKVU5DVElPTjooKT0+Tk4sRklMVEVSU19OQU1FU1BBQ0U6KCk9PkRkLEZJTFRFUlNfVkFMVUVTX0JMQU5LX0NFTExTOigpPT5WTixMT0FESU5HX05BTUVTUEFDRTooKT0+aW1lLExPQURJTkdfVElUTEU6KCk9PiRlZSxPSzooKT0+UE4sUEFHSU5BVElPTl9DT1VOVEVSX1NFQ1RJT046''@;'; put 'put ''KCk9PlZlZSxQQUdJTkFUSU9OX0ZJUlNUX1BBR0U6KCk9PmplZSxQQUdJTkFUSU9OX0xBU1RfUEFHRTooKT0+WmVlLFBBR0lOQVRJT05fTkFNRVNQQUNFOigpPT5SNCxQQUdJTkFUSU9OX05BVl9TRUNUSU9OOigpPT5CZWUsUEFHSU5BVElPTl9ORVhUX1BBR0U6KCk9PlVlZSxQQUdJTkFUSU9O''@;'; put 'put ''X1BBR0VfU0laRV9BVVRPOigpPT5OZWUsUEFHSU5BVElPTl9QQUdFX1NJWkVfU0VDVElPTjooKT0+Qk4sUEFHSU5BVElPTl9QUkVWX1BBR0U6KCk9PnplZSxQQUdJTkFUSU9OX1NFQ1RJT046KCk9PkhlZX0pO3ZhciBXPXt9O2Z1bmN0aW9uIHEoYyxsLGEsZCxoLGYsdil7dHJ5e3ZhciBNPWNb''@;'; put 'put ''Zl0odiksRD1NLnZhbHVlfWNhdGNoKFUpe3JldHVybiB2b2lkIGEoVSl9TS5kb25lP2woRCk6UHJvbWlzZS5yZXNvbHZlKEQpLnRoZW4oZCxoKX1mdW5jdGlvbiBlZShjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD10aGlzLGE9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlv''@;'; put 'put ''bihkLGgpe3ZhciBmPWMuYXBwbHkobCxhKTtmdW5jdGlvbiB2KEQpe3EoZixkLGgsdixNLCJuZXh0IixEKX1mdW5jdGlvbiBNKEQpe3EoZixkLGgsdixNLCJ0aHJvdyIsRCl9dih2b2lkIDApfSl9fWZ1bmN0aW9uIEooYyxsKXtyZXR1cm4gT2JqZWN0LmlzKGMsbCl9Yi5yKFcpLGIuZChXLHtn''@;'; put 'put ''ZXROb3JtYWxpemVkRGF0ZTooKT0+ejZlfSk7bGV0IHJlPW51bGwsaWU9ITEsdWU9MTtjb25zdCBnZT1TeW1ib2woIlNJR05BTCIpO2Z1bmN0aW9uIF9lKGMpe2NvbnN0IGw9cmU7cmV0dXJuIHJlPWMsbH1jb25zdCBCPXt2ZXJzaW9uOjAsbGFzdENsZWFuRXBvY2g6MCxkaXJ0eTohMSxwcm9k''@;'; put 'put ''dWNlck5vZGU6dm9pZCAwLHByb2R1Y2VyTGFzdFJlYWRWZXJzaW9uOnZvaWQgMCxwcm9kdWNlckluZGV4T2ZUaGlzOnZvaWQgMCxuZXh0UHJvZHVjZXJJbmRleDowLGxpdmVDb25zdW1lck5vZGU6dm9pZCAwLGxpdmVDb25zdW1lckluZGV4T2ZUaGlzOnZvaWQgMCxjb25zdW1lckFsbG93U2ln''@;'; put 'put ''bmFsV3JpdGVzOiExLGNvbnN1bWVySXNBbHdheXNMaXZlOiExLGtpbmQ6InVua25vd24iLHByb2R1Y2VyTXVzdFJlY29tcHV0ZTooKT0+ITEscHJvZHVjZXJSZWNvbXB1dGVWYWx1ZTooKT0+e30sY29uc3VtZXJNYXJrZWREaXJ0eTooKT0+e30sY29uc3VtZXJPblNpZ25hbFJlYWQ6KCk9Pnt9''@;'; put 'put ''fTtmdW5jdGlvbiBnKGMpe2lmKGllKXRocm93IG5ldyBFcnJvcigiIik7aWYobnVsbD09PXJlKXJldHVybjtyZS5jb25zdW1lck9uU2lnbmFsUmVhZChjKTtjb25zdCBsPXJlLm5leHRQcm9kdWNlckluZGV4Kys7VWUocmUpLGw8cmUucHJvZHVjZXJOb2RlLmxlbmd0aCYmcmUucHJvZHVjZXJO''@;'; put 'put ''b2RlW2xdIT09YyYmQ2UocmUpJiZzZShyZS5wcm9kdWNlck5vZGVbbF0scmUucHJvZHVjZXJJbmRleE9mVGhpc1tsXSkscmUucHJvZHVjZXJOb2RlW2xdIT09YyYmKHJlLnByb2R1Y2VyTm9kZVtsXT1jLHJlLnByb2R1Y2VySW5kZXhPZlRoaXNbbF09Q2UocmUpP25lKGMscmUsbCk6MCkscmUu''@;'; put 'put ''cHJvZHVjZXJMYXN0UmVhZFZlcnNpb25bbF09Yy52ZXJzaW9ufWZ1bmN0aW9uIHgoYyl7aWYoKCFDZShjKXx8Yy5kaXJ0eSkmJihjLmRpcnR5fHxjLmxhc3RDbGVhbkVwb2NoIT09dWUpKXtpZighYy5wcm9kdWNlck11c3RSZWNvbXB1dGUoYykmJiFBKGMpKXJldHVybiB2b2lkIGooYyk7Yy5w''@;'; put 'put ''cm9kdWNlclJlY29tcHV0ZVZhbHVlKGMpLGooYyl9fWZ1bmN0aW9uIEMoYyl7aWYodm9pZCAwPT09Yy5saXZlQ29uc3VtZXJOb2RlKXJldHVybjtjb25zdCBsPWllO2llPSEwO3RyeXtmb3IoY29uc3QgYSBvZiBjLmxpdmVDb25zdW1lck5vZGUpYS5kaXJ0eXx8SChhKX1maW5hbGx5e2llPWx9''@;'; put 'put ''fWZ1bmN0aW9uIFQoKXtyZXR1cm4hMSE9PXJlPy5jb25zdW1lckFsbG93U2lnbmFsV3JpdGVzfWZ1bmN0aW9uIEgoYyl7Yy5kaXJ0eT0hMCxDKGMpLGMuY29uc3VtZXJNYXJrZWREaXJ0eT8uKGMpfWZ1bmN0aW9uIGooYyl7Yy5kaXJ0eT0hMSxjLmxhc3RDbGVhbkVwb2NoPXVlfWZ1bmN0aW9u''@;'; put 'put ''IEUoYyl7cmV0dXJuIGMmJihjLm5leHRQcm9kdWNlckluZGV4PTApLF9lKGMpfWZ1bmN0aW9uIG0oYyxsKXtpZihfZShsKSxjJiZ2b2lkIDAhPT1jLnByb2R1Y2VyTm9kZSYmdm9pZCAwIT09Yy5wcm9kdWNlckluZGV4T2ZUaGlzJiZ2b2lkIDAhPT1jLnByb2R1Y2VyTGFzdFJlYWRWZXJzaW9u''@;'; put 'put ''KXtpZihDZShjKSlmb3IobGV0IGE9Yy5uZXh0UHJvZHVjZXJJbmRleDthPGMucHJvZHVjZXJOb2RlLmxlbmd0aDthKyspc2UoYy5wcm9kdWNlck5vZGVbYV0sYy5wcm9kdWNlckluZGV4T2ZUaGlzW2FdKTtmb3IoO2MucHJvZHVjZXJOb2RlLmxlbmd0aD5jLm5leHRQcm9kdWNlckluZGV4Oylj''@;'; put 'put ''LnByb2R1Y2VyTm9kZS5wb3AoKSxjLnByb2R1Y2VyTGFzdFJlYWRWZXJzaW9uLnBvcCgpLGMucHJvZHVjZXJJbmRleE9mVGhpcy5wb3AoKX19ZnVuY3Rpb24gQShjKXtVZShjKTtmb3IobGV0IGw9MDtsPGMucHJvZHVjZXJOb2RlLmxlbmd0aDtsKyspe2NvbnN0IGE9Yy5wcm9kdWNlck5vZGVb''@;'; put 'put ''bF0sZD1jLnByb2R1Y2VyTGFzdFJlYWRWZXJzaW9uW2xdO2lmKGQhPT1hLnZlcnNpb258fCh4KGEpLGQhPT1hLnZlcnNpb24pKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIGFlKGMpe2lmKFVlKGMpLENlKGMpKWZvcihsZXQgbD0wO2w8Yy5wcm9kdWNlck5vZGUubGVuZ3RoO2wrKylzZShj''@;'; put 'put ''LnByb2R1Y2VyTm9kZVtsXSxjLnByb2R1Y2VySW5kZXhPZlRoaXNbbF0pO2MucHJvZHVjZXJOb2RlLmxlbmd0aD1jLnByb2R1Y2VyTGFzdFJlYWRWZXJzaW9uLmxlbmd0aD1jLnByb2R1Y2VySW5kZXhPZlRoaXMubGVuZ3RoPTAsYy5saXZlQ29uc3VtZXJOb2RlJiYoYy5saXZlQ29uc3VtZXJO''@;'; put 'put ''b2RlLmxlbmd0aD1jLmxpdmVDb25zdW1lckluZGV4T2ZUaGlzLmxlbmd0aD0wKX1mdW5jdGlvbiBuZShjLGwsYSl7aWYoSmUoYyksMD09PWMubGl2ZUNvbnN1bWVyTm9kZS5sZW5ndGgmJml0KGMpKWZvcihsZXQgZD0wO2Q8Yy5wcm9kdWNlck5vZGUubGVuZ3RoO2QrKyljLnByb2R1Y2VySW5k''@;'; put 'put ''ZXhPZlRoaXNbZF09bmUoYy5wcm9kdWNlck5vZGVbZF0sYyxkKTtyZXR1cm4gYy5saXZlQ29uc3VtZXJJbmRleE9mVGhpcy5wdXNoKGEpLGMubGl2ZUNvbnN1bWVyTm9kZS5wdXNoKGwpLTF9ZnVuY3Rpb24gc2UoYyxsKXtpZihKZShjKSwxPT09Yy5saXZlQ29uc3VtZXJOb2RlLmxlbmd0aCYm''@;'; put 'put ''aXQoYykpZm9yKGxldCBkPTA7ZDxjLnByb2R1Y2VyTm9kZS5sZW5ndGg7ZCsrKXNlKGMucHJvZHVjZXJOb2RlW2RdLGMucHJvZHVjZXJJbmRleE9mVGhpc1tkXSk7Y29uc3QgYT1jLmxpdmVDb25zdW1lck5vZGUubGVuZ3RoLTE7aWYoYy5saXZlQ29uc3VtZXJOb2RlW2xdPWMubGl2ZUNvbnN1''@;'; put 'put ''bWVyTm9kZVthXSxjLmxpdmVDb25zdW1lckluZGV4T2ZUaGlzW2xdPWMubGl2ZUNvbnN1bWVySW5kZXhPZlRoaXNbYV0sYy5saXZlQ29uc3VtZXJOb2RlLmxlbmd0aC0tLGMubGl2ZUNvbnN1bWVySW5kZXhPZlRoaXMubGVuZ3RoLS0sbDxjLmxpdmVDb25zdW1lck5vZGUubGVuZ3RoKXtjb25z''@;'; put 'put ''dCBkPWMubGl2ZUNvbnN1bWVySW5kZXhPZlRoaXNbbF0saD1jLmxpdmVDb25zdW1lck5vZGVbbF07VWUoaCksaC5wcm9kdWNlckluZGV4T2ZUaGlzW2RdPWx9fWZ1bmN0aW9uIENlKGMpe3JldHVybiBjLmNvbnN1bWVySXNBbHdheXNMaXZlfHwoYz8ubGl2ZUNvbnN1bWVyTm9kZT8ubGVuZ3Ro''@;'; put 'put ''Pz8wKT4wfWZ1bmN0aW9uIFVlKGMpe2MucHJvZHVjZXJOb2RlPz89W10sYy5wcm9kdWNlckluZGV4T2ZUaGlzPz89W10sYy5wcm9kdWNlckxhc3RSZWFkVmVyc2lvbj8/PVtdfWZ1bmN0aW9uIEplKGMpe2MubGl2ZUNvbnN1bWVyTm9kZT8/PVtdLGMubGl2ZUNvbnN1bWVySW5kZXhPZlRoaXM/''@;'; put 'put ''Pz1bXX1mdW5jdGlvbiBpdChjKXtyZXR1cm4gdm9pZCAwIT09Yy5wcm9kdWNlck5vZGV9Y29uc3QgeWU9U3ltYm9sKCJVTlNFVCIpLEtlPVN5bWJvbCgiQ09NUFVUSU5HIiksamU9U3ltYm9sKCJFUlJPUkVEIiksa2U9ey4uLkIsdmFsdWU6eWUsZGlydHk6ITAsZXJyb3I6bnVsbCxlcXVhbDpK''@;'; put 'put ''LGtpbmQ6ImNvbXB1dGVkIixwcm9kdWNlck11c3RSZWNvbXB1dGU6Yz0+Yy52YWx1ZT09PXllfHxjLnZhbHVlPT09S2UscHJvZHVjZXJSZWNvbXB1dGVWYWx1ZShjKXtpZihjLnZhbHVlPT09S2UpdGhyb3cgbmV3IEVycm9yKCJEZXRlY3RlZCBjeWNsZSBpbiBjb21wdXRhdGlvbnMuIik7Y29u''@;'; put 'put ''c3QgbD1jLnZhbHVlO2MudmFsdWU9S2U7Y29uc3QgYT1FKGMpO2xldCBkLGg9ITE7dHJ5e2Q9Yy5jb21wdXRhdGlvbigpLF9lKG51bGwpLGg9bCE9PXllJiZsIT09amUmJmQhPT1qZSYmYy5lcXVhbChsLGQpfWNhdGNoKGYpe2Q9amUsYy5lcnJvcj1mfWZpbmFsbHl7bShjLGEpfWg/Yy52YWx1''@;'; put 'put ''ZT1sOihjLnZhbHVlPWQsYy52ZXJzaW9uKyspfX07bGV0IExlPWZ1bmN0aW9uIEhlKCl7dGhyb3cgbmV3IEVycm9yfTtmdW5jdGlvbiBSZShjKXtMZShjKX1mdW5jdGlvbiBydChjLGwpe1QoKXx8UmUoYyksYy5lcXVhbChjLnZhbHVlLGwpfHwoYy52YWx1ZT1sLGZ1bmN0aW9uIFN0KGMpe2Mu''@;'; put 'put ''dmVyc2lvbisrLGZ1bmN0aW9uIHkoKXt1ZSsrfSgpLEMoYyl9KGMpKX1jb25zdCB2dD17Li4uQixlcXVhbDpKLHZhbHVlOnZvaWQgMCxraW5kOiJzaWduYWwifTtsZXQgdW47ZnVuY3Rpb24gSXQoKXtyZXR1cm4gdW59ZnVuY3Rpb24gUnQoYyl7Y29uc3QgbD11bjtyZXR1cm4gdW49YyxsfWNv''@;'; put 'put ''bnN0IHJpPVN5bWJvbCgiTm90Rm91bmQiKTtmdW5jdGlvbiBuaShjKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgY31mdW5jdGlvbiBobihjKXtjb25zdCBhPWMoZD0+e0Vycm9yLmNhbGwoZCksZC5zdGFjaz0obmV3IEVycm9yKS5zdGFja30pO3JldHVybiBhLnByb3RvdHlwZT1PYmplY3Qu''@;'; put 'put ''Y3JlYXRlKEVycm9yLnByb3RvdHlwZSksYS5wcm90b3R5cGUuY29uc3RydWN0b3I9YSxhfUVycm9yO2NvbnN0IGh0PWhuKGM9PmZ1bmN0aW9uKGEpe2ModGhpcyksdGhpcy5tZXNzYWdlPWE/YCR7YS5sZW5ndGh9IGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XG4ke2Eu''@;'; put 'put ''bWFwKChkLGgpPT5gJHtoKzF9KSAke2QudG9TdHJpbmcoKX1gKS5qb2luKCJcbiAgIil9YDoiIix0aGlzLm5hbWU9IlVuc3Vic2NyaXB0aW9uRXJyb3IiLHRoaXMuZXJyb3JzPWF9KTtmdW5jdGlvbiBScihjLGwpe2lmKGMpe2NvbnN0IGE9Yy5pbmRleE9mKGwpOzA8PWEmJmMuc3BsaWNlKGEs''@;'; put 'put ''MSl9fWNsYXNzIEJ0e2NvbnN0cnVjdG9yKGwpe3RoaXMuaW5pdGlhbFRlYXJkb3duPWwsdGhpcy5jbG9zZWQ9ITEsdGhpcy5fcGFyZW50YWdlPW51bGwsdGhpcy5fZmluYWxpemVycz1udWxsfXVuc3Vic2NyaWJlKCl7bGV0IGw7aWYoIXRoaXMuY2xvc2VkKXt0aGlzLmNsb3NlZD0hMDtjb25z''@;'; put 'put ''dHtfcGFyZW50YWdlOmF9PXRoaXM7aWYoYSlpZih0aGlzLl9wYXJlbnRhZ2U9bnVsbCxBcnJheS5pc0FycmF5KGEpKWZvcihjb25zdCBmIG9mIGEpZi5yZW1vdmUodGhpcyk7ZWxzZSBhLnJlbW92ZSh0aGlzKTtjb25zdHtpbml0aWFsVGVhcmRvd246ZH09dGhpcztpZihuaShkKSl0cnl7ZCgp''@;'; put 'put ''fWNhdGNoKGYpe2w9ZiBpbnN0YW5jZW9mIGh0P2YuZXJyb3JzOltmXX1jb25zdHtfZmluYWxpemVyczpofT10aGlzO2lmKGgpe3RoaXMuX2ZpbmFsaXplcnM9bnVsbDtmb3IoY29uc3QgZiBvZiBoKXRyeXtzdChmKX1jYXRjaCh2KXtsPWw/P1tdLHYgaW5zdGFuY2VvZiBodD9sPVsuLi5sLC4u''@;'; put 'put ''LnYuZXJyb3JzXTpsLnB1c2godil9fWlmKGwpdGhyb3cgbmV3IGh0KGwpfX1hZGQobCl7dmFyIGE7aWYobCYmbCE9PXRoaXMpaWYodGhpcy5jbG9zZWQpc3QobCk7ZWxzZXtpZihsIGluc3RhbmNlb2YgQnQpe2lmKGwuY2xvc2VkfHxsLl9oYXNQYXJlbnQodGhpcykpcmV0dXJuO2wuX2FkZFBh''@;'; put 'put ''cmVudCh0aGlzKX0odGhpcy5fZmluYWxpemVycz1udWxsIT09KGE9dGhpcy5fZmluYWxpemVycykmJnZvaWQgMCE9PWE/YTpbXSkucHVzaChsKX19X2hhc1BhcmVudChsKXtjb25zdHtfcGFyZW50YWdlOmF9PXRoaXM7cmV0dXJuIGE9PT1sfHxBcnJheS5pc0FycmF5KGEpJiZhLmluY2x1ZGVz''@;'; put 'put ''KGwpfV9hZGRQYXJlbnQobCl7Y29uc3R7X3BhcmVudGFnZTphfT10aGlzO3RoaXMuX3BhcmVudGFnZT1BcnJheS5pc0FycmF5KGEpPyhhLnB1c2gobCksYSk6YT9bYSxsXTpsfV9yZW1vdmVQYXJlbnQobCl7Y29uc3R7X3BhcmVudGFnZTphfT10aGlzO2E9PT1sP3RoaXMuX3BhcmVudGFnZT1u''@;'; put 'put ''dWxsOkFycmF5LmlzQXJyYXkoYSkmJlJyKGEsbCl9cmVtb3ZlKGwpe2NvbnN0e19maW5hbGl6ZXJzOmF9PXRoaXM7YSYmUnIoYSxsKSxsIGluc3RhbmNlb2YgQnQmJmwuX3JlbW92ZVBhcmVudCh0aGlzKX19QnQuRU1QVFk9KCgpPT57Y29uc3QgYz1uZXcgQnQ7cmV0dXJuIGMuY2xvc2VkPSEw''@;'; put 'put ''LGN9KSgpO2NvbnN0IEF0PUJ0LkVNUFRZO2Z1bmN0aW9uIEZuKGMpe3JldHVybiBjIGluc3RhbmNlb2YgQnR8fGMmJiJjbG9zZWQiaW4gYyYmbmkoYy5yZW1vdmUpJiZuaShjLmFkZCkmJm5pKGMudW5zdWJzY3JpYmUpfWZ1bmN0aW9uIHN0KGMpe25pKGMpP2MoKTpjLnVuc3Vic2NyaWJlKCl9''@;'; put 'put ''Y29uc3QgWnQ9e29uVW5oYW5kbGVkRXJyb3I6bnVsbCxvblN0b3BwZWROb3RpZmljYXRpb246bnVsbCxQcm9taXNlOnZvaWQgMCx1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiExLHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDohMX0sUXI9e3NldFRpbWVvdXQoYyxsLC4u''@;'; put 'put ''LmEpe2NvbnN0e2RlbGVnYXRlOmR9PVFyO3JldHVybiBkPy5zZXRUaW1lb3V0P2Quc2V0VGltZW91dChjLGwsLi4uYSk6c2V0VGltZW91dChjLGwsLi4uYSl9LGNsZWFyVGltZW91dChjKXtjb25zdHtkZWxlZ2F0ZTpsfT1RcjtyZXR1cm4obD8uY2xlYXJUaW1lb3V0fHxjbGVhclRpbWVvdXQp''@;'; put 'put ''KGMpfSxkZWxlZ2F0ZTp2b2lkIDB9O2Z1bmN0aW9uIFllKGMpe1FyLnNldFRpbWVvdXQoKCk9Pntjb25zdHtvblVuaGFuZGxlZEVycm9yOmx9PVp0O2lmKCFsKXRocm93IGM7bChjKX0pfWZ1bmN0aW9uIFR0KCl7fWNvbnN0IHJyPVpuKCJDIix2b2lkIDAsdm9pZCAwKTtmdW5jdGlvbiBabihj''@;'; put 'put ''LGwsYSl7cmV0dXJue2tpbmQ6Yyx2YWx1ZTpsLGVycm9yOmF9fWxldCBubj1udWxsO2Z1bmN0aW9uIFd0KGMpe2lmKFp0LnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpe2NvbnN0IGw9IW5uO2lmKGwmJihubj17ZXJyb3JUaHJvd246ITEsZXJyb3I6bnVsbH0pLGMoKSxs''@;'; put 'put ''KXtjb25zdHtlcnJvclRocm93bjphLGVycm9yOmR9PW5uO2lmKG5uPW51bGwsYSl0aHJvdyBkfX1lbHNlIGMoKX1jbGFzcyBkbiBleHRlbmRzIEJ0e2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5pc1N0b3BwZWQ9ITEsbD8odGhpcy5kZXN0aW5hdGlvbj1sLEZuKGwpJiZsLmFkZCh0aGlz''@;'; put 'put ''KSk6dGhpcy5kZXN0aW5hdGlvbj1YaX1zdGF0aWMgY3JlYXRlKGwsYSxkKXtyZXR1cm4gbmV3IHRuKGwsYSxkKX1uZXh0KGwpe3RoaXMuaXNTdG9wcGVkP3ZyKGZ1bmN0aW9uIE10KGMpe3JldHVybiBabigiTiIsYyx2b2lkIDApfShsKSx0aGlzKTp0aGlzLl9uZXh0KGwpfWVycm9yKGwpe3Ro''@;'; put 'put ''aXMuaXNTdG9wcGVkP3ZyKGZ1bmN0aW9uIGZ0KGMpe3JldHVybiBabigiRSIsdm9pZCAwLGMpfShsKSx0aGlzKToodGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5fZXJyb3IobCkpfWNvbXBsZXRlKCl7dGhpcy5pc1N0b3BwZWQ/dnIocnIsdGhpcyk6KHRoaXMuaXNTdG9wcGVkPSEwLHRoaXMuX2Nv''@;'; put 'put ''bXBsZXRlKCkpfXVuc3Vic2NyaWJlKCl7dGhpcy5jbG9zZWR8fCh0aGlzLmlzU3RvcHBlZD0hMCxzdXBlci51bnN1YnNjcmliZSgpLHRoaXMuZGVzdGluYXRpb249bnVsbCl9X25leHQobCl7dGhpcy5kZXN0aW5hdGlvbi5uZXh0KGwpfV9lcnJvcihsKXt0cnl7dGhpcy5kZXN0aW5hdGlvbi5l''@;'; put 'put ''cnJvcihsKX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19X2NvbXBsZXRlKCl7dHJ5e3RoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19fWNvbnN0IG1uPUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO2Z1bmN0aW9uIHBpKGMsbCl7cmV0dXJu''@;'; put 'put ''IG1uLmNhbGwoYyxsKX1jbGFzcyBmbntjb25zdHJ1Y3RvcihsKXt0aGlzLnBhcnRpYWxPYnNlcnZlcj1sfW5leHQobCl7Y29uc3R7cGFydGlhbE9ic2VydmVyOmF9PXRoaXM7aWYoYS5uZXh0KXRyeXthLm5leHQobCl9Y2F0Y2goZCl7Y2EoZCl9fWVycm9yKGwpe2NvbnN0e3BhcnRpYWxPYnNl''@;'; put 'put ''cnZlcjphfT10aGlzO2lmKGEuZXJyb3IpdHJ5e2EuZXJyb3IobCl9Y2F0Y2goZCl7Y2EoZCl9ZWxzZSBjYShsKX1jb21wbGV0ZSgpe2NvbnN0e3BhcnRpYWxPYnNlcnZlcjpsfT10aGlzO2lmKGwuY29tcGxldGUpdHJ5e2wuY29tcGxldGUoKX1jYXRjaChhKXtjYShhKX19fWNsYXNzIHRuIGV4''@;'; put 'put ''dGVuZHMgZG57Y29uc3RydWN0b3IobCxhLGQpe2xldCBoO2lmKHN1cGVyKCksbmkobCl8fCFsKWg9e25leHQ6bD8/dm9pZCAwLGVycm9yOmE/P3ZvaWQgMCxjb21wbGV0ZTpkPz92b2lkIDB9O2Vsc2V7bGV0IGY7dGhpcyYmWnQudXNlRGVwcmVjYXRlZE5leHRDb250ZXh0PyhmPU9iamVjdC5j''@;'; put 'put ''cmVhdGUobCksZi51bnN1YnNjcmliZT0oKT0+dGhpcy51bnN1YnNjcmliZSgpLGg9e25leHQ6bC5uZXh0JiZwaShsLm5leHQsZiksZXJyb3I6bC5lcnJvciYmcGkobC5lcnJvcixmKSxjb21wbGV0ZTpsLmNvbXBsZXRlJiZwaShsLmNvbXBsZXRlLGYpfSk6aD1sfXRoaXMuZGVzdGluYXRpb249''@;'; put 'put ''bmV3IGZuKGgpfX1mdW5jdGlvbiBjYShjKXtadC51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nP2Z1bmN0aW9uIGRpKGMpe1p0LnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJm5uJiYobm4uZXJyb3JUaHJvd249ITAsbm4uZXJyb3I9Yyl9KGMpOlll''@;'; put 'put ''KGMpfWZ1bmN0aW9uIHZyKGMsbCl7Y29uc3R7b25TdG9wcGVkTm90aWZpY2F0aW9uOmF9PVp0O2EmJlFyLnNldFRpbWVvdXQoKCk9PmEoYyxsKSl9Y29uc3QgWGk9e2Nsb3NlZDohMCxuZXh0OlR0LGVycm9yOmZ1bmN0aW9uIF9pKGMpe3Rocm93IGN9LGNvbXBsZXRlOlR0fSxRaT0iZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wub2JzZXJ2YWJsZXx8IkBAb2JzZXJ2YWJsZSI7ZnVuY3Rpb24gVmkoYyl7cmV0dXJuIGN9ZnVuY3Rpb24gdWEoYyl7cmV0dXJuIDA9PT1jLmxlbmd0aD9WaToxPT09Yy5sZW5ndGg/Y1swXTpmdW5jdGlvbihhKXtyZXR1cm4gYy5yZWR1Y2UoKGQs''@;'; put 'put ''aCk9PmgoZCksYSl9fWxldCBSaT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe2EmJih0aGlzLl9zdWJzY3JpYmU9YSl9bGlmdChhKXtjb25zdCBkPW5ldyBjO3JldHVybiBkLnNvdXJjZT10aGlzLGQub3BlcmF0b3I9YSxkfXN1YnNjcmliZShhLGQsaCl7Y29uc3QgZj1mdW5jdGlvbiBx''@;'; put 'put ''aShjKXtyZXR1cm4gYyYmYyBpbnN0YW5jZW9mIGRufHxmdW5jdGlvbiBoaShjKXtyZXR1cm4gYyYmbmkoYy5uZXh0KSYmbmkoYy5lcnJvcikmJm5pKGMuY29tcGxldGUpfShjKSYmRm4oYyl9KGEpP2E6bmV3IHRuKGEsZCxoKTtyZXR1cm4gV3QoKCk9Pntjb25zdHtvcGVyYXRvcjp2LHNvdXJj''@;'; put 'put ''ZTpNfT10aGlzO2YuYWRkKHY/di5jYWxsKGYsTSk6TT90aGlzLl9zdWJzY3JpYmUoZik6dGhpcy5fdHJ5U3Vic2NyaWJlKGYpKX0pLGZ9X3RyeVN1YnNjcmliZShhKXt0cnl7cmV0dXJuIHRoaXMuX3N1YnNjcmliZShhKX1jYXRjaChkKXthLmVycm9yKGQpfX1mb3JFYWNoKGEsZCl7cmV0dXJu''@;'; put 'put ''IG5ldyhkPURhKGQpKSgoaCxmKT0+e2NvbnN0IHY9bmV3IHRuKHtuZXh0Ok09Pnt0cnl7YShNKX1jYXRjaChEKXtmKEQpLHYudW5zdWJzY3JpYmUoKX19LGVycm9yOmYsY29tcGxldGU6aH0pO3RoaXMuc3Vic2NyaWJlKHYpfSl9X3N1YnNjcmliZShhKXt2YXIgZDtyZXR1cm4gbnVsbD09PShk''@;'; put 'put ''PXRoaXMuc291cmNlKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5zdWJzY3JpYmUoYSl9W1FpXSgpe3JldHVybiB0aGlzfXBpcGUoLi4uYSl7cmV0dXJuIHVhKGEpKHRoaXMpfXRvUHJvbWlzZShhKXtyZXR1cm4gbmV3KGE9RGEoYSkpKChkLGgpPT57bGV0IGY7dGhpcy5zdWJzY3JpYmUodj0+Zj12''@;'; put 'put ''LHY9PmgodiksKCk9PmQoZikpfSl9fXJldHVybiBjLmNyZWF0ZT1sPT5uZXcgYyhsKSxjfSkoKTtmdW5jdGlvbiBEYShjKXt2YXIgbDtyZXR1cm4gbnVsbCE9PShsPWM/P1p0LlByb21pc2UpJiZ2b2lkIDAhPT1sP2w6UHJvbWlzZX1jb25zdCBQYT1obihjPT5mdW5jdGlvbigpe2ModGhpcyks''@;'; put 'put ''dGhpcy5uYW1lPSJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsdGhpcy5tZXNzYWdlPSJvYmplY3QgdW5zdWJzY3JpYmVkIn0pO2xldCB1cj0oKCk9PntjbGFzcyBjIGV4dGVuZHMgUml7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuY2xvc2VkPSExLHRoaXMuY3VycmVudE9ic2VydmVycz1u''@;'; put 'put ''dWxsLHRoaXMub2JzZXJ2ZXJzPVtdLHRoaXMuaXNTdG9wcGVkPSExLHRoaXMuaGFzRXJyb3I9ITEsdGhpcy50aHJvd25FcnJvcj1udWxsfWxpZnQoYSl7Y29uc3QgZD1uZXcgYmEodGhpcyx0aGlzKTtyZXR1cm4gZC5vcGVyYXRvcj1hLGR9X3Rocm93SWZDbG9zZWQoKXtpZih0aGlzLmNsb3Nl''@;'; put 'put ''ZCl0aHJvdyBuZXcgUGF9bmV4dChhKXtXdCgoKT0+e2lmKHRoaXMuX3Rocm93SWZDbG9zZWQoKSwhdGhpcy5pc1N0b3BwZWQpe3RoaXMuY3VycmVudE9ic2VydmVyc3x8KHRoaXMuY3VycmVudE9ic2VydmVycz1BcnJheS5mcm9tKHRoaXMub2JzZXJ2ZXJzKSk7Zm9yKGNvbnN0IGQgb2YgdGhp''@;'; put 'put ''cy5jdXJyZW50T2JzZXJ2ZXJzKWQubmV4dChhKX19KX1lcnJvcihhKXtXdCgoKT0+e2lmKHRoaXMuX3Rocm93SWZDbG9zZWQoKSwhdGhpcy5pc1N0b3BwZWQpe3RoaXMuaGFzRXJyb3I9dGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy50aHJvd25FcnJvcj1hO2NvbnN0e29ic2VydmVyczpkfT10aGlz''@;'; put 'put ''O2Zvcig7ZC5sZW5ndGg7KWQuc2hpZnQoKS5lcnJvcihhKX19KX1jb21wbGV0ZSgpe1d0KCgpPT57aWYodGhpcy5fdGhyb3dJZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5pc1N0b3BwZWQ9ITA7Y29uc3R7b2JzZXJ2ZXJzOmF9PXRoaXM7Zm9yKDthLmxlbmd0aDspYS5zaGlmdCgp''@;'; put 'put ''LmNvbXBsZXRlKCl9fSl9dW5zdWJzY3JpYmUoKXt0aGlzLmlzU3RvcHBlZD10aGlzLmNsb3NlZD0hMCx0aGlzLm9ic2VydmVycz10aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbH1nZXQgb2JzZXJ2ZWQoKXt2YXIgYTtyZXR1cm4obnVsbD09PShhPXRoaXMub2JzZXJ2ZXJzKXx8dm9pZCAwPT09''@;'; put 'put ''YT92b2lkIDA6YS5sZW5ndGgpPjB9X3RyeVN1YnNjcmliZShhKXtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLHN1cGVyLl90cnlTdWJzY3JpYmUoYSl9X3N1YnNjcmliZShhKXtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoYSks''@;'; put 'put ''dGhpcy5faW5uZXJTdWJzY3JpYmUoYSl9X2lubmVyU3Vic2NyaWJlKGEpe2NvbnN0e2hhc0Vycm9yOmQsaXNTdG9wcGVkOmgsb2JzZXJ2ZXJzOmZ9PXRoaXM7cmV0dXJuIGR8fGg/QXQ6KHRoaXMuY3VycmVudE9ic2VydmVycz1udWxsLGYucHVzaChhKSxuZXcgQnQoKCk9Pnt0aGlzLmN1cnJl''@;'; put 'put ''bnRPYnNlcnZlcnM9bnVsbCxScihmLGEpfSkpfV9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKGEpe2NvbnN0e2hhc0Vycm9yOmQsdGhyb3duRXJyb3I6aCxpc1N0b3BwZWQ6Zn09dGhpcztkP2EuZXJyb3IoaCk6ZiYmYS5jb21wbGV0ZSgpfWFzT2JzZXJ2YWJsZSgpe2NvbnN0IGE9bmV3IFJpO3Jl''@;'; put 'put ''dHVybiBhLnNvdXJjZT10aGlzLGF9fXJldHVybiBjLmNyZWF0ZT0obCxhKT0+bmV3IGJhKGwsYSksY30pKCk7Y2xhc3MgYmEgZXh0ZW5kcyB1cntjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKCksdGhpcy5kZXN0aW5hdGlvbj1sLHRoaXMuc291cmNlPWF9bmV4dChsKXt2YXIgYSxkO251bGw9PT0o''@;'; put 'put ''ZD1udWxsPT09KGE9dGhpcy5kZXN0aW5hdGlvbil8fHZvaWQgMD09PWE/dm9pZCAwOmEubmV4dCl8fHZvaWQgMD09PWR8fGQuY2FsbChhLGwpfWVycm9yKGwpe3ZhciBhLGQ7bnVsbD09PShkPW51bGw9PT0oYT10aGlzLmRlc3RpbmF0aW9uKXx8dm9pZCAwPT09YT92b2lkIDA6YS5lcnJvcil8''@;'; put 'put ''fHZvaWQgMD09PWR8fGQuY2FsbChhLGwpfWNvbXBsZXRlKCl7dmFyIGwsYTtudWxsPT09KGE9bnVsbD09PShsPXRoaXMuZGVzdGluYXRpb24pfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmNvbXBsZXRlKXx8dm9pZCAwPT09YXx8YS5jYWxsKGwpfV9zdWJzY3JpYmUobCl7dmFyIGEsZDtyZXR1cm4g''@;'; put 'put ''bnVsbCE9PShkPW51bGw9PT0oYT10aGlzLnNvdXJjZSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuc3Vic2NyaWJlKGwpKSYmdm9pZCAwIT09ZD9kOkF0fX1jbGFzcyBNaSBleHRlbmRzIHVye2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5fdmFsdWU9bH1nZXQgdmFsdWUoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5nZXRWYWx1ZSgpfV9zdWJzY3JpYmUobCl7Y29uc3QgYT1zdXBlci5fc3Vic2NyaWJlKGwpO3JldHVybiFhLmNsb3NlZCYmbC5uZXh0KHRoaXMuX3ZhbHVlKSxhfWdldFZhbHVlKCl7Y29uc3R7aGFzRXJyb3I6bCx0aHJvd25FcnJvcjphLF92YWx1ZTpkfT10aGlzO2lmKGwpdGhyb3cgYTty''@;'; put 'put ''ZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLGR9bmV4dChsKXtzdXBlci5uZXh0KHRoaXMuX3ZhbHVlPWwpfX1mdW5jdGlvbiB3YShjKXtyZXR1cm4gbmkoYz8ubGlmdCl9ZnVuY3Rpb24gZWEoYyl7cmV0dXJuIGw9PntpZih3YShsKSlyZXR1cm4gbC5saWZ0KGZ1bmN0aW9uKGEpe3RyeXty''@;'; put 'put ''ZXR1cm4gYyhhLHRoaXMpfWNhdGNoKGQpe3RoaXMuZXJyb3IoZCl9fSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGUiKX19ZnVuY3Rpb24gRnIoYyxsLGEsZCxoKXtyZXR1cm4gbmV3IGNvKGMsbCxhLGQsaCl9Y2xhc3MgY28gZXh0''@;'; put 'put ''ZW5kcyBkbntjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdil7c3VwZXIobCksdGhpcy5vbkZpbmFsaXplPWYsdGhpcy5zaG91bGRVbnN1YnNjcmliZT12LHRoaXMuX25leHQ9YT9mdW5jdGlvbihNKXt0cnl7YShNKX1jYXRjaChEKXtsLmVycm9yKEQpfX06c3VwZXIuX25leHQsdGhpcy5fZXJyb3I9''@;'; put 'put ''aD9mdW5jdGlvbihNKXt0cnl7aChNKX1jYXRjaChEKXtsLmVycm9yKEQpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX06c3VwZXIuX2Vycm9yLHRoaXMuX2NvbXBsZXRlPWQ/ZnVuY3Rpb24oKXt0cnl7ZCgpfWNhdGNoKE0pe2wuZXJyb3IoTSl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJl''@;'; put 'put ''KCl9fTpzdXBlci5fY29tcGxldGV9dW5zdWJzY3JpYmUoKXt2YXIgbDtpZighdGhpcy5zaG91bGRVbnN1YnNjcmliZXx8dGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKXtjb25zdHtjbG9zZWQ6YX09dGhpcztzdXBlci51bnN1YnNjcmliZSgpLCFhJiYobnVsbD09PShsPXRoaXMub25GaW5hbGl6''@;'; put 'put ''ZSl8fHZvaWQgMD09PWx8fGwuY2FsbCh0aGlzKSl9fX1mdW5jdGlvbiBZYShjLGwpe3JldHVybiBlYSgoYSxkKT0+e2xldCBoPTA7YS5zdWJzY3JpYmUoRnIoZCxmPT57ZC5uZXh0KGMuY2FsbChsLGYsaCsrKSl9KSl9KX1jb25zdCB2MT0iaHR0cHM6Ly9hbmd1bGFyLmRldi9iZXN0LXByYWN0''@;'; put 'put ''aWNlcy9zZWN1cml0eSNwcmV2ZW50aW5nLWNyb3NzLXNpdGUtc2NyaXB0aW5nLXhzcyI7Y2xhc3MgUHIgZXh0ZW5kcyBFcnJvcntjb2RlO2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoZnVuY3Rpb24gbnIoYyxsKXtyZXR1cm5gJHtmdW5jdGlvbiBkMChjKXtyZXR1cm5gTkcwJHtNYXRoLmFicyhj''@;'; put 'put ''KX1gfShjKX0ke2w/IjogIitsOiIifWB9KGwsYSkpLHRoaXMuY29kZT1sfX1jb25zdCBSYT1TeW1ib2woIklucHV0U2lnbmFsTm9kZSNVTlNFVCIpLGFpPXsuLi52dCx0cmFuc2Zvcm1Gbjp2b2lkIDAsYXBwbHlWYWx1ZVRvSW5wdXRTaWduYWwoYyxsKXtydChjLGwpfX07ZnVuY3Rpb24gdGko''@;'; put 'put ''YyxsKXtjb25zdCBhPU9iamVjdC5jcmVhdGUoYWkpO2Z1bmN0aW9uIGQoKXtpZihnKGEpLGEudmFsdWU9PT1SYSl0aHJvdyBuZXcgUHIoLTk1MCxudWxsKTtyZXR1cm4gYS52YWx1ZX1yZXR1cm4gYS52YWx1ZT1jLGEudHJhbnNmb3JtRm49bD8udHJhbnNmb3JtLGRbZ2VdPWEsZH1mdW5jdGlv''@;'; put 'put ''biB1YyhjKXtyZXR1cm57dG9TdHJpbmc6Y30udG9TdHJpbmcoKX1jb25zdCBkYz0iX19wYXJhbWV0ZXJzX18iO2Z1bmN0aW9uIHkxKGMsbCxhKXtyZXR1cm4gdWMoKCk9Pntjb25zdCBkPWZ1bmN0aW9uIFpkKGMpe3JldHVybiBmdW5jdGlvbiguLi5hKXtpZihjKXtjb25zdCBkPWMoLi4uYSk7''@;'; put 'put ''Zm9yKGNvbnN0IGggaW4gZCl0aGlzW2hdPWRbaF19fX0obCk7ZnVuY3Rpb24gaCguLi5mKXtpZih0aGlzIGluc3RhbmNlb2YgaClyZXR1cm4gZC5hcHBseSh0aGlzLGYpLHRoaXM7Y29uc3Qgdj1uZXcgaCguLi5mKTtyZXR1cm4gTS5hbm5vdGF0aW9uPXYsTTtmdW5jdGlvbiBNKEQsVSx0ZSl7''@;'; put 'put ''Y29uc3Qgb2U9RC5oYXNPd25Qcm9wZXJ0eShkYyk/RFtkY106T2JqZWN0LmRlZmluZVByb3BlcnR5KEQsZGMse3ZhbHVlOltdfSlbZGNdO2Zvcig7b2UubGVuZ3RoPD10ZTspb2UucHVzaChudWxsKTtyZXR1cm4ob2VbdGVdPW9lW3RlXXx8W10pLnB1c2godiksRH19cmV0dXJuIGgucHJvdG90''@;'; put 'put ''eXBlLm5nTWV0YWRhdGFOYW1lPWMsaC5hbm5vdGF0aW9uQ2xzPWgsaH0pfWNvbnN0IEJhPWdsb2JhbFRoaXM7ZnVuY3Rpb24gSXMoYyl7Zm9yKGxldCBsIGluIGMpaWYoY1tsXT09PUlzKXJldHVybiBsO3Rocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCByZW5hbWVkIHByb3BlcnR5IG9uIHRh''@;'; put 'put ''cmdldCBvYmplY3QuIil9ZnVuY3Rpb24gTzAoYyxsKXtmb3IoY29uc3QgYSBpbiBsKWwuaGFzT3duUHJvcGVydHkoYSkmJiFjLmhhc093blByb3BlcnR5KGEpJiYoY1thXT1sW2FdKX1mdW5jdGlvbiAkbChjKXtpZigic3RyaW5nIj09dHlwZW9mIGMpcmV0dXJuIGM7aWYoQXJyYXkuaXNBcnJh''@;'; put 'put ''eShjKSlyZXR1cm5gWyR7Yy5tYXAoJGwpLmpvaW4oIiwgIil9XWA7aWYobnVsbD09YylyZXR1cm4iIitjO2NvbnN0IGw9Yy5vdmVycmlkZGVuTmFtZXx8Yy5uYW1lO2lmKGwpcmV0dXJuYCR7bH1gO2NvbnN0IGE9Yy50b1N0cmluZygpO2lmKG51bGw9PWEpcmV0dXJuIiIrYTtjb25zdCBkPWEu''@;'; put 'put ''aW5kZXhPZigiXG4iKTtyZXR1cm4gZD49MD9hLnNsaWNlKDAsZCk6YX1mdW5jdGlvbiBoYyhjLGwpe3JldHVybiBjP2w/YCR7Y30gJHtsfWA6YzpsfHwiIn1jb25zdCBIaD1Jcyh7X19mb3J3YXJkX3JlZl9fOklzfSk7ZnVuY3Rpb24gdXMoYyl7cmV0dXJuIGMuX19mb3J3YXJkX3JlZl9fPXVz''@;'; put 'put ''LGMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gJGwodGhpcygpKX0sY31mdW5jdGlvbiBxYShjKXtyZXR1cm4gV2QoYyk/YygpOmN9ZnVuY3Rpb24gV2QoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGMmJmMuaGFzT3duUHJvcGVydHkoSGgpJiZjLl9fZm9yd2FyZF9yZWZfXz09PXVz''@;'; put 'put ''fWZ1bmN0aW9uIGZyKGMpe3JldHVybnt0b2tlbjpjLnRva2VuLHByb3ZpZGVkSW46Yy5wcm92aWRlZElufHxudWxsLGZhY3Rvcnk6Yy5mYWN0b3J5LHZhbHVlOnZvaWQgMH19ZnVuY3Rpb24geWkoYyl7cmV0dXJue3Byb3ZpZGVyczpjLnByb3ZpZGVyc3x8W10saW1wb3J0czpjLmltcG9ydHN8''@;'; put 'put ''fFtdfX1mdW5jdGlvbiBLbChjKXtyZXR1cm4gSHQoYyxWdCl8fEh0KGMsbXIpfWZ1bmN0aW9uIEh0KGMsbCl7cmV0dXJuIGMuaGFzT3duUHJvcGVydHkobCk/Y1tsXTpudWxsfWZ1bmN0aW9uIHBuKGMpe3JldHVybiBjJiYoYy5oYXNPd25Qcm9wZXJ0eShEbil8fGMuaGFzT3duUHJvcGVydHko''@;'; put 'put ''TW4pKT9jW0RuXTpudWxsfWNvbnN0IFZ0PUlzKHtcdTAyNzVwcm92OklzfSksRG49SXMoe1x1MDI3NWluajpJc30pLG1yPUlzKHtuZ0luamVjdGFibGVEZWY6SXN9KSxNbj1Jcyh7bmdJbmplY3RvckRlZjpJc30pO2NsYXNzIGpue19kZXNjO25nTWV0YWRhdGFOYW1lPSJJbmplY3Rpb25Ub2tl''@;'; put 'put ''biI7XHUwMjc1cHJvdjtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX2Rlc2M9bCx0aGlzLlx1MDI3NXByb3Y9dm9pZCAwLCJudW1iZXIiPT10eXBlb2YgYT90aGlzLl9fTkdfRUxFTUVOVF9JRF9fPWE6dm9pZCAwIT09YSYmKHRoaXMuXHUwMjc1cHJvdj1mcih7dG9rZW46dGhpcyxwcm92aWRlZElu''@;'; put 'put ''OmEucHJvdmlkZWRJbnx8InJvb3QiLGZhY3Rvcnk6YS5mYWN0b3J5fSkpfWdldCBtdWx0aSgpe3JldHVybiB0aGlzfXRvU3RyaW5nKCl7cmV0dXJuYEluamVjdGlvblRva2VuICR7dGhpcy5fZGVzY31gfX1mdW5jdGlvbiBDYyhjKXtyZXR1cm4gYyYmISFjLlx1MDI3NXByb3ZpZGVyc31jb25z''@;'; put 'put ''dCBmYz1Jcyh7XHUwMjc1Y21wOklzfSksZTE9SXMoe1x1MDI3NWRpcjpJc30pLEFvPUlzKHtcdTAyNzVwaXBlOklzfSksR2k9SXMoe1x1MDI3NW1vZDpJc30pLFZvPUlzKHtcdTAyNzVmYWM6SXN9KSxvbz1Jcyh7X19OR19FTEVNRU5UX0lEX186SXN9KSx0bz1Jcyh7X19OR19FTlZfSURfXzpJ''@;'; put 'put ''c30pO2Z1bmN0aW9uIE1vKGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYz9jOm51bGw9PWM/IiI6U3RyaW5nKGMpfWZ1bmN0aW9uIGgwKGMsbCl7dGhyb3cgbmV3IFByKC0yMDAsYyl9ZnVuY3Rpb24gU2MoYyxsKXt0aHJvdyBuZXcgUHIoLTIwMSwhMSl9dmFyIHhvPWZ1bmN0aW9uKGMpe3Jl''@;'; put 'put ''dHVybiBjW2MuRGVmYXVsdD0wXT0iRGVmYXVsdCIsY1tjLkhvc3Q9MV09Ikhvc3QiLGNbYy5TZWxmPTJdPSJTZWxmIixjW2MuU2tpcFNlbGY9NF09IlNraXBTZWxmIixjW2MuT3B0aW9uYWw9OF09Ik9wdGlvbmFsIixjfSh4b3x8e30pO2xldCB4cDtmdW5jdGlvbiB5Zygpe3JldHVybiB4cH1m''@;'; put 'put ''dW5jdGlvbiBrbyhjKXtjb25zdCBsPXhwO3JldHVybiB4cD1jLGx9ZnVuY3Rpb24gVmgoYyxsLGEpe2NvbnN0IGQ9S2woYyk7cmV0dXJuIGQmJiJyb290Ij09ZC5wcm92aWRlZEluP3ZvaWQgMD09PWQudmFsdWU/ZC52YWx1ZT1kLmZhY3RvcnkoKTpkLnZhbHVlOmEmeG8uT3B0aW9uYWw/bnVs''@;'; put 'put ''bDp2b2lkIDAhPT1sP2w6dm9pZCBTYygpfWNvbnN0IE9jPXt9LEJoPSJfX05HX0RJX0ZMQUdfXyI7Y2xhc3MgSzJ7aW5qZWN0b3I7Y29uc3RydWN0b3IobCl7dGhpcy5pbmplY3Rvcj1sfXJldHJpZXZlKGwsYSl7cmV0dXJuIHRoaXMuaW5qZWN0b3IuZ2V0KGwsYS5vcHRpb25hbD9yaTpPYyxh''@;'; put 'put ''KX19Y29uc3QgUDA9Im5nVGVtcFRva2VuUGF0aCIsVHk9L1xuL2dtLFgyPSJfX3NvdXJjZSI7ZnVuY3Rpb24gdG0oYyxsPXhvLkRlZmF1bHQpe2lmKHZvaWQgMD09PUl0KCkpdGhyb3cgbmV3IFByKC0yMDMsITEpO2lmKG51bGw9PT1JdCgpKXJldHVybiBWaChjLHZvaWQgMCxsKTt7Y29uc3Qg''@;'; put 'put ''YT1JdCgpO2xldCBkO3JldHVybiBkPWEgaW5zdGFuY2VvZiBLMj9hLmluamVjdG9yOmEsZC5nZXQoYyxsJnhvLk9wdGlvbmFsP251bGw6dm9pZCAwLGwpfX1mdW5jdGlvbiBIcihjLGw9eG8uRGVmYXVsdCl7cmV0dXJuKHlnKCl8fHRtKShxYShjKSxsKX1mdW5jdGlvbiBKbihjLGw9eG8uRGVm''@;'; put 'put ''YXVsdCl7cmV0dXJuIEhyKGMsYmcobCkpfWZ1bmN0aW9uIGJnKGMpe3JldHVybiB0eXBlb2YgYz4idSJ8fCJudW1iZXIiPT10eXBlb2YgYz9jOihjLm9wdGlvbmFsJiY4KXwoYy5ob3N0JiYxKXwoYy5zZWxmJiYyKXwoYy5za2lwU2VsZiYmNCl9ZnVuY3Rpb24gVHAoYyl7Y29uc3QgbD1bXTtm''@;'; put 'put ''b3IobGV0IGE9MDthPGMubGVuZ3RoO2ErKyl7Y29uc3QgZD1xYShjW2FdKTtpZihBcnJheS5pc0FycmF5KGQpKXtpZigwPT09ZC5sZW5ndGgpdGhyb3cgbmV3IFByKDkwMCwhMSk7bGV0IGgsZj14by5EZWZhdWx0O2ZvcihsZXQgdj0wO3Y8ZC5sZW5ndGg7disrKXtjb25zdCBNPWRbdl0sRD1y''@;'; put 'put ''ZChNKTsibnVtYmVyIj09dHlwZW9mIEQ/LTE9PT1EP2g9TS50b2tlbjpmfD1EOmg9TX1sLnB1c2goSHIoaCxmKSl9ZWxzZSBsLnB1c2goSHIoZCkpfXJldHVybiBsfWZ1bmN0aW9uIHUzKGMsbCl7cmV0dXJuIGNbQmhdPWwsYy5wcm90b3R5cGVbQmhdPWwsY31mdW5jdGlvbiByZChjKXtyZXR1''@;'; put 'put ''cm4gY1tCaF19Y29uc3Qga3k9dTMoeTEoIkluamVjdCIsYz0+KHt0b2tlbjpjfSkpLC0xKSxXcz11Myh5MSgiT3B0aW9uYWwiKSw4KSxHZD11Myh5MSgiU2tpcFNlbGYiKSw0KTtmdW5jdGlvbiBxMihjLGwpe3JldHVybiBjLmhhc093blByb3BlcnR5KFZvKT9jW1ZvXTpudWxsfWZ1bmN0aW9u''@;'; put 'put ''IGgzKGMsbCl7Yy5mb3JFYWNoKGE9PkFycmF5LmlzQXJyYXkoYSk/aDMoYSxsKTpsKGEpKX1mdW5jdGlvbiBEeShjLGwsYSl7bD49Yy5sZW5ndGg/Yy5wdXNoKGEpOmMuc3BsaWNlKGwsMCxhKX1mdW5jdGlvbiBBcChjLGwpe3JldHVybiBsPj1jLmxlbmd0aC0xP2MucG9wKCk6Yy5zcGxpY2Uo''@;'; put 'put ''bCwxKVswXX1mdW5jdGlvbiBVdShjLGwsYSl7bGV0IGQ9amgoYyxsKTtyZXR1cm4gZD49MD9jWzF8ZF09YTooZD1+ZCxmdW5jdGlvbiB3ZyhjLGwsYSxkKXtsZXQgaD1jLmxlbmd0aDtpZihoPT1sKWMucHVzaChhLGQpO2Vsc2UgaWYoMT09PWgpYy5wdXNoKGQsY1swXSksY1swXT1hO2Vsc2V7''@;'; put 'put ''Zm9yKGgtLSxjLnB1c2goY1toLTFdLGNbaF0pO2g+bDspY1toXT1jW2gtMl0saC0tO2NbbF09YSxjW2wrMV09ZH19KGMsZCxsLGEpKSxkfWZ1bmN0aW9uIHJtKGMsbCl7Y29uc3QgYT1qaChjLGwpO2lmKGE+PTApcmV0dXJuIGNbMXxhXX1mdW5jdGlvbiBqaChjLGwpe3JldHVybiBmdW5jdGlv''@;'; put 'put ''biBBUyhjLGwsYSl7bGV0IGQ9MCxoPWMubGVuZ3RoPj5hO2Zvcig7aCE9PWQ7KXtjb25zdCBmPWQrKGgtZD4+MSksdj1jW2Y8PGFdO2lmKGw9PT12KXJldHVybiBmPDxhO3Y+bD9oPWY6ZD1mKzF9cmV0dXJufihoPDxhKX0oYyxsLDEpfWNvbnN0IGFkPXt9LEVzPVtdLFFzPW5ldyBqbigiIiks''@;'; put 'put ''azg9bmV3IGpuKCIiLC0xKSxEOD1uZXcgam4oIiIpO2NsYXNzIGtwe2dldChsLGE9T2Mpe2lmKGE9PT1PYyl7Y29uc3QgZD1uZXcgRXJyb3IoYE51bGxJbmplY3RvckVycm9yOiBObyBwcm92aWRlciBmb3IgJHskbChsKX0hYCk7dGhyb3cgZC5uYW1lPSJOdWxsSW5qZWN0b3JFcnJvciIsZH1y''@;'; put 'put ''ZXR1cm4gYX19ZnVuY3Rpb24gcDAoYyxsKXtjb25zdCBhPWNbR2ldfHxudWxsO2lmKCFhJiYhMD09PWwpdGhyb3cgbmV3IEVycm9yKGBUeXBlICR7JGwoYyl9IGRvZXMgbm90IGhhdmUgJ1x1MDI3NW1vZCcgcHJvcGVydHkuYCk7cmV0dXJuIGF9ZnVuY3Rpb24gS28oYyl7cmV0dXJuIGNbZmNd''@;'; put 'put ''fHxudWxsfWZ1bmN0aW9uIFhjKGMpe3JldHVybiBjW2UxXXx8bnVsbH1mdW5jdGlvbiBGMChjKXtyZXR1cm4gY1tBb118fG51bGx9ZnVuY3Rpb24gJGQoYyl7cmV0dXJue1x1MDI3NXByb3ZpZGVyczpjfX1mdW5jdGlvbiBnMCguLi5jKXtyZXR1cm57XHUwMjc1cHJvdmlkZXJzOkk4KDAsYyks''@;'; put 'put ''XHUwMjc1ZnJvbU5nTW9kdWxlOiEwfX1mdW5jdGlvbiBJOChjLC4uLmwpe2NvbnN0IGE9W10sZD1uZXcgU2V0O2xldCBoO2NvbnN0IGY9dj0+e2EucHVzaCh2KX07cmV0dXJuIGgzKGwsdj0+e2NvbnN0IE09djt6aChNLGYsW10sZCkmJihofHw9W10saC5wdXNoKE0pKX0pLHZvaWQgMCE9PWgm''@;'; put 'put ''Jm9kKGgsZiksYX1mdW5jdGlvbiBvZChjLGwpe2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7YSsrKXtjb25zdHtuZ01vZHVsZTpkLHByb3ZpZGVyczpofT1jW2FdO2ltKGgsZj0+e2woZixkKX0pfX1mdW5jdGlvbiB6aChjLGwsYSxkKXtpZighKGM9cWEoYykpKXJldHVybiExO2xldCBoPW51bGws''@;'; put 'put ''Zj1wbihjKTtjb25zdCB2PSFmJiZLbyhjKTtpZihmfHx2KXtpZih2JiYhdi5zdGFuZGFsb25lKXJldHVybiExO2g9Y31lbHNle2NvbnN0IEQ9Yy5uZ01vZHVsZTtpZihmPXBuKEQpLCFmKXJldHVybiExO2g9RH1jb25zdCBNPWQuaGFzKGgpO2lmKHYpe2lmKE0pcmV0dXJuITE7aWYoZC5hZGQo''@;'; put 'put ''aCksdi5kZXBlbmRlbmNpZXMpe2NvbnN0IEQ9ImZ1bmN0aW9uIj09dHlwZW9mIHYuZGVwZW5kZW5jaWVzP3YuZGVwZW5kZW5jaWVzKCk6di5kZXBlbmRlbmNpZXM7Zm9yKGNvbnN0IFUgb2YgRCl6aChVLGwsYSxkKX19ZWxzZXtpZighZilyZXR1cm4hMTt7aWYobnVsbCE9Zi5pbXBvcnRzJiYh''@;'; put 'put ''TSl7bGV0IFU7ZC5hZGQoaCk7dHJ5e2gzKGYuaW1wb3J0cyx0ZT0+e3poKHRlLGwsYSxkKSYmKFV8fD1bXSxVLnB1c2godGUpKX0pfWZpbmFsbHl7fXZvaWQgMCE9PVUmJm9kKFUsbCl9aWYoIU0pe2NvbnN0IFU9cTIoaCl8fCgoKT0+bmV3IGgpO2woe3Byb3ZpZGU6aCx1c2VGYWN0b3J5OlUs''@;'; put 'put ''ZGVwczpFc30saCksbCh7cHJvdmlkZTpEOCx1c2VWYWx1ZTpoLG11bHRpOiEwfSxoKSxsKHtwcm92aWRlOlFzLHVzZVZhbHVlOigpPT5IcihoKSxtdWx0aTohMH0saCl9Y29uc3QgRD1mLnByb3ZpZGVycztpZihudWxsIT1EJiYhTSl7Y29uc3QgVT1jO2ltKEQsdGU9PntsKHRlLFUpfSl9fX1y''@;'; put 'put ''ZXR1cm4gaCE9PWMmJnZvaWQgMCE9PWMucHJvdmlkZXJzfWZ1bmN0aW9uIGltKGMsbCl7Zm9yKGxldCBhIG9mIGMpQ2MoYSkmJihhPWEuXHUwMjc1cHJvdmlkZXJzKSxBcnJheS5pc0FycmF5KGEpP2ltKGEsbCk6bChhKX1jb25zdCBSeT1Jcyh7cHJvdmlkZTpTdHJpbmcsdXNlVmFsdWU6SXN9''@;'; put 'put ''KTtmdW5jdGlvbiBhbShjKXtyZXR1cm4gbnVsbCE9PWMmJiJvYmplY3QiPT10eXBlb2YgYyYmUnkgaW4gY31mdW5jdGlvbiBwMyhjKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgY31jb25zdCBLYT1uZXcgam4oIiIpLFVoPXt9LEoyPXt9O2xldCBEcDtmdW5jdGlvbiBIMCgpe3JldHVybiB2''@;'; put 'put ''b2lkIDA9PT1EcCYmKERwPW5ldyBrcCksRHB9Y2xhc3MgcWx7fWNsYXNzIFRzIGV4dGVuZHMgcWx7cGFyZW50O3NvdXJjZTtzY29wZXM7cmVjb3Jkcz1uZXcgTWFwO19uZ09uRGVzdHJveUhvb2tzPW5ldyBTZXQ7X29uRGVzdHJveUhvb2tzPVtdO2dldCBkZXN0cm95ZWQoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fZGVzdHJveWVkfV9kZXN0cm95ZWQ9ITE7aW5qZWN0b3JEZWZUeXBlcztjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcigpLHRoaXMucGFyZW50PWEsdGhpcy5zb3VyY2U9ZCx0aGlzLnNjb3Blcz1oLG9tKGwsdj0+dGhpcy5wcm9jZXNzUHJvdmlkZXIodikpLHRoaXMucmVjb3Jkcy5zZXQo''@;'; put 'put ''azgsSXAodm9pZCAwLHRoaXMpKSxoLmhhcygiZW52aXJvbm1lbnQiKSYmdGhpcy5yZWNvcmRzLnNldChxbCxJcCh2b2lkIDAsdGhpcykpO2NvbnN0IGY9dGhpcy5yZWNvcmRzLmdldChLYSk7bnVsbCE9ZiYmInN0cmluZyI9PXR5cGVvZiBmLnZhbHVlJiZ0aGlzLnNjb3Blcy5hZGQoZi52YWx1''@;'; put 'put ''ZSksdGhpcy5pbmplY3RvckRlZlR5cGVzPW5ldyBTZXQodGhpcy5nZXQoRDgsRXMseG8uU2VsZikpfXJldHJpZXZlKGwsYSl7cmV0dXJuIHRoaXMuZ2V0KGwsYS5vcHRpb25hbD9yaTpPYyxhKX1kZXN0cm95KCl7Q2codGhpcyksdGhpcy5fZGVzdHJveWVkPSEwO2NvbnN0IGw9X2UobnVsbCk7''@;'; put 'put ''dHJ5e2Zvcihjb25zdCBkIG9mIHRoaXMuX25nT25EZXN0cm95SG9va3MpZC5uZ09uRGVzdHJveSgpO2NvbnN0IGE9dGhpcy5fb25EZXN0cm95SG9va3M7dGhpcy5fb25EZXN0cm95SG9va3M9W107Zm9yKGNvbnN0IGQgb2YgYSlkKCl9ZmluYWxseXt0aGlzLnJlY29yZHMuY2xlYXIoKSx0aGlz''@;'; put 'put ''Ll9uZ09uRGVzdHJveUhvb2tzLmNsZWFyKCksdGhpcy5pbmplY3RvckRlZlR5cGVzLmNsZWFyKCksX2UobCl9fW9uRGVzdHJveShsKXtyZXR1cm4gQ2codGhpcyksdGhpcy5fb25EZXN0cm95SG9va3MucHVzaChsKSwoKT0+dGhpcy5yZW1vdmVPbkRlc3Ryb3kobCl9cnVuSW5Db250ZXh0KGwp''@;'; put 'put ''e0NnKHRoaXMpO2NvbnN0IGE9UnQodGhpcyksZD1rbyh2b2lkIDApO3RyeXtyZXR1cm4gbCgpfWZpbmFsbHl7UnQoYSksa28oZCl9fWdldChsLGE9T2MsZD14by5EZWZhdWx0KXtpZihDZyh0aGlzKSxsLmhhc093blByb3BlcnR5KHRvKSlyZXR1cm4gbFt0b10odGhpcyk7ZD1iZyhkKTtjb25z''@;'; put 'put ''dCBmPVJ0KHRoaXMpLHY9a28odm9pZCAwKTt0cnl7aWYoIShkJnhvLlNraXBTZWxmKSl7bGV0IEQ9dGhpcy5yZWNvcmRzLmdldChsKTtpZih2b2lkIDA9PT1EKXtjb25zdCBVPWZ1bmN0aW9uIERTKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjfHwib2JqZWN0Ij09dHlwZW9mIGMmJmMg''@;'; put 'put ''aW5zdGFuY2VvZiBqbn0obCkmJktsKGwpO0Q9VSYmdGhpcy5pbmplY3RhYmxlRGVmSW5TY29wZShVKT9JcChRMihsKSxVaCk6bnVsbCx0aGlzLnJlY29yZHMuc2V0KGwsRCl9aWYobnVsbCE9RClyZXR1cm4gdGhpcy5oeWRyYXRlKGwsRCxkKX1yZXR1cm4oZCZ4by5TZWxmP0gwKCk6dGhpcy5w''@;'; put 'put ''YXJlbnQpLmdldChsLGE9ZCZ4by5PcHRpb25hbCYmYT09PU9jP251bGw6YSl9Y2F0Y2goTSl7aWYoIk51bGxJbmplY3RvckVycm9yIj09PU0ubmFtZSl7aWYoKE1bUDBdPU1bUDBdfHxbXSkudW5zaGlmdCgkbChsKSksZil0aHJvdyBNO3JldHVybiBmdW5jdGlvbiBkMyhjLGwsYSxkKXtjb25z''@;'; put 'put ''dCBoPWNbUDBdO3Rocm93IGxbWDJdJiZoLnVuc2hpZnQobFtYMl0pLGMubWVzc2FnZT1mdW5jdGlvbiBBeShjLGwsYSxkPW51bGwpe2M9YyYmIlxuIj09PWMuY2hhckF0KDApJiYiXHUwMjc1Ij09Yy5jaGFyQXQoMSk/Yy5zbGljZSgyKTpjO2xldCBoPSRsKGwpO2lmKEFycmF5LmlzQXJyYXko''@;'; put 'put ''bCkpaD1sLm1hcCgkbCkuam9pbigiIC0+ICIpO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBsKXtsZXQgZj1bXTtmb3IobGV0IHYgaW4gbClpZihsLmhhc093blByb3BlcnR5KHYpKXtsZXQgTT1sW3ZdO2YucHVzaCh2KyI6IisoInN0cmluZyI9PXR5cGVvZiBNP0pTT04uc3RyaW5naWZ5KE0p''@;'; put 'put ''OiRsKE0pKSl9aD1geyR7Zi5qb2luKCIsICIpfX1gfXJldHVybmAke2F9JHtkPyIoIitkKyIpIjoiIn1bJHtofV06ICR7Yy5yZXBsYWNlKFR5LCJcbiAgIil9YH0oIlxuIitjLm1lc3NhZ2UsaCxhLGQpLGMubmdUb2tlblBhdGg9aCxjW1AwXT1udWxsLGN9KE0sbCwiUjNJbmplY3RvckVycm9y''@;'; put 'put ''Iix0aGlzLnNvdXJjZSl9dGhyb3cgTX1maW5hbGx5e2tvKHYpLFJ0KGYpfX1yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKXtjb25zdCBsPV9lKG51bGwpLGE9UnQodGhpcyksZD1rbyh2b2lkIDApO3RyeXtjb25zdCBmPXRoaXMuZ2V0KFFzLEVzLHhvLlNlbGYpO2Zvcihjb25zdCB2IG9m''@;'; put 'put ''IGYpdigpfWZpbmFsbHl7UnQoYSksa28oZCksX2UobCl9fXRvU3RyaW5nKCl7Y29uc3QgbD1bXSxhPXRoaXMucmVjb3Jkcztmb3IoY29uc3QgZCBvZiBhLmtleXMoKSlsLnB1c2goJGwoZCkpO3JldHVybmBSM0luamVjdG9yWyR7bC5qb2luKCIsICIpfV1gfXByb2Nlc3NQcm92aWRlcihsKXts''@;'; put 'put ''ZXQgYT1wMyhsPXFhKGwpKT9sOnFhKGwmJmwucHJvdmlkZSk7Y29uc3QgZD1mdW5jdGlvbiBGeShjKXtyZXR1cm4gYW0oYyk/SXAodm9pZCAwLGMudXNlVmFsdWUpOklwKEw4KGMpLFVoKX0obCk7aWYoIXAzKGwpJiYhMD09PWwubXVsdGkpe2xldCBoPXRoaXMucmVjb3Jkcy5nZXQoYSk7aHx8''@;'; put 'put ''KGg9SXAodm9pZCAwLFVoLCEwKSxoLmZhY3Rvcnk9KCk9PlRwKGgubXVsdGkpLHRoaXMucmVjb3Jkcy5zZXQoYSxoKSksYT1sLGgubXVsdGkucHVzaChsKX10aGlzLnJlY29yZHMuc2V0KGEsZCl9aHlkcmF0ZShsLGEsZCl7Y29uc3QgaD1fZShudWxsKTt0cnl7cmV0dXJuIGEudmFsdWU9PT1K''@;'; put 'put ''Mj9oMCgkbChsKSk6YS52YWx1ZT09PVVoJiYoYS52YWx1ZT1KMixhLnZhbHVlPWEuZmFjdG9yeSh2b2lkIDAsZCkpLCJvYmplY3QiPT10eXBlb2YgYS52YWx1ZSYmYS52YWx1ZSYmZnVuY3Rpb24gdzEoYyl7cmV0dXJuIG51bGwhPT1jJiYib2JqZWN0Ij09dHlwZW9mIGMmJiJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBjLm5nT25EZXN0cm95fShhLnZhbHVlKSYmdGhpcy5fbmdPbkRlc3Ryb3lIb29rcy5hZGQoYS52YWx1ZSksYS52YWx1ZX1maW5hbGx5e19lKGgpfX1pbmplY3RhYmxlRGVmSW5TY29wZShsKXtpZighbC5wcm92aWRlZEluKXJldHVybiExO2NvbnN0IGE9cWEobC5wcm92aWRlZElu''@;'; put 'put ''KTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGE/ImFueSI9PT1hfHx0aGlzLnNjb3Blcy5oYXMoYSk6dGhpcy5pbmplY3RvckRlZlR5cGVzLmhhcyhhKX1yZW1vdmVPbkRlc3Ryb3kobCl7Y29uc3QgYT10aGlzLl9vbkRlc3Ryb3lIb29rcy5pbmRleE9mKGwpOy0xIT09YSYmdGhpcy5fb25EZXN0''@;'; put 'put ''cm95SG9va3Muc3BsaWNlKGEsMSl9fWZ1bmN0aW9uIFEyKGMpe2NvbnN0IGw9S2woYyksYT1udWxsIT09bD9sLmZhY3Rvcnk6cTIoYyk7aWYobnVsbCE9PWEpcmV0dXJuIGE7aWYoYyBpbnN0YW5jZW9mIGpuKXRocm93IG5ldyBQcigyMDQsITEpO2lmKGMgaW5zdGFuY2VvZiBGdW5jdGlvbily''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24gUHkoYyl7aWYoYy5sZW5ndGg+MCl0aHJvdyBuZXcgUHIoMjA0LCExKTtjb25zdCBhPWZ1bmN0aW9uIGp0KGMpe3JldHVybiBjJiYoY1tWdF18fGNbbXJdKXx8bnVsbH0oYyk7cmV0dXJuIG51bGwhPT1hPygpPT5hLmZhY3RvcnkoYyk6KCk9Pm5ldyBjfShjKTt0aHJv''@;'; put 'put ''dyBuZXcgUHIoMjA0LCExKX1mdW5jdGlvbiBMOChjLGwsYSl7bGV0IGQ7aWYocDMoYykpe2NvbnN0IGg9cWEoYyk7cmV0dXJuIHEyKGgpfHxRMihoKX1pZihhbShjKSlkPSgpPT5xYShjLnVzZVZhbHVlKTtlbHNlIGlmKGZ1bmN0aW9uIE95KGMpe3JldHVybiEoIWN8fCFjLnVzZUZhY3Rvcnkp''@;'; put 'put ''fShjKSlkPSgpPT5jLnVzZUZhY3RvcnkoLi4uVHAoYy5kZXBzfHxbXSkpO2Vsc2UgaWYoZnVuY3Rpb24gTHkoYyl7cmV0dXJuISghY3x8IWMudXNlRXhpc3RpbmcpfShjKSlkPShoLGYpPT5IcihxYShjLnVzZUV4aXN0aW5nKSx2b2lkIDAhPT1mJiZmJnhvLk9wdGlvbmFsP3hvLk9wdGlvbmFs''@;'; put 'put ''OnZvaWQgMCk7ZWxzZXtjb25zdCBoPXFhKGMmJihjLnVzZUNsYXNzfHxjLnByb3ZpZGUpKTtpZighZnVuY3Rpb24gSHkoYyl7cmV0dXJuISFjLmRlcHN9KGMpKXJldHVybiBxMihoKXx8UTIoaCk7ZD0oKT0+bmV3IGgoLi4uVHAoYy5kZXBzKSl9cmV0dXJuIGR9ZnVuY3Rpb24gQ2coYyl7aWYo''@;'; put 'put ''Yy5kZXN0cm95ZWQpdGhyb3cgbmV3IFByKDIwNSwhMSl9ZnVuY3Rpb24gSXAoYyxsLGE9ITEpe3JldHVybntmYWN0b3J5OmMsdmFsdWU6bCxtdWx0aTphP1tdOnZvaWQgMH19ZnVuY3Rpb24gb20oYyxsKXtmb3IoY29uc3QgYSBvZiBjKUFycmF5LmlzQXJyYXkoYSk/b20oYSxsKTphJiZDYyhh''@;'; put 'put ''KT9vbShhLlx1MDI3NXByb3ZpZGVycyxsKTpsKGEpfWZ1bmN0aW9uIEMxKGMsbCl7bGV0IGE7YyBpbnN0YW5jZW9mIFRzPyhDZyhjKSxhPWMpOmE9bmV3IEsyKGMpO2NvbnN0IGg9UnQoYSksZj1rbyh2b2lkIDApO3RyeXtyZXR1cm4gbCgpfWZpbmFsbHl7UnQoaCksa28oZil9fWZ1bmN0aW9u''@;'; put 'put ''IFNnKCl7cmV0dXJuIHZvaWQgMCE9PXlnKCl8fG51bGwhPUl0KCl9Y29uc3QgQnk9RnVuY3Rpb247ZnVuY3Rpb24gZ2MoYyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYykmJiJvYmplY3QiPT10eXBlb2YgY1sxXX1mdW5jdGlvbiB2bChjKXtyZXR1cm4gQXJyYXkuaXNBcnJheShjKSYmITA9PT1j''@;'; put 'put ''WzFdfWZ1bmN0aW9uIEdoKGMpe3JldHVybiEhKDQmYy5mbGFncyl9ZnVuY3Rpb24gWnUoYyl7cmV0dXJuIGMuY29tcG9uZW50T2Zmc2V0Pi0xfWZ1bmN0aW9uIFhkKGMpe3JldHVybiEoMSZ+Yy5mbGFncyl9ZnVuY3Rpb24gVjAoYyl7cmV0dXJuISFjLnRlbXBsYXRlfWZ1bmN0aW9uIHFkKGMp''@;'; put 'put ''e3JldHVybiEhKDUxMiZjWzJdKX1mdW5jdGlvbiBjZChjKXtyZXR1cm4hKDI1NiZ+Y1syXSl9Y2xhc3MgQlN7cHJldmlvdXNWYWx1ZTtjdXJyZW50VmFsdWU7Zmlyc3RDaGFuZ2U7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMucHJldmlvdXNWYWx1ZT1sLHRoaXMuY3VycmVudFZhbHVlPWEsdGhp''@;'; put 'put ''cy5maXJzdENoYW5nZT1kfWlzRmlyc3RDaGFuZ2UoKXtyZXR1cm4gdGhpcy5maXJzdENoYW5nZX19ZnVuY3Rpb24gWnkoYyxsLGEsZCl7bnVsbCE9PWw/bC5hcHBseVZhbHVlVG9JbnB1dFNpZ25hbChsLGQpOmNbYV09ZH1jb25zdCBXbz0oKCk9Pntjb25zdCBjPSgpPT5XeTtyZXR1cm4gYy5u''@;'; put 'put ''Z0luaGVyaXQ9ITAsY30pKCk7ZnVuY3Rpb24gV3koYyl7cmV0dXJuIGMudHlwZS5wcm90b3R5cGUubmdPbkNoYW5nZXMmJihjLnNldElucHV0PXFoKSxYaH1mdW5jdGlvbiBYaCgpe2NvbnN0IGM9WXkodGhpcyksbD1jPy5jdXJyZW50O2lmKGwpe2NvbnN0IGE9Yy5wcmV2aW91cztpZihhPT09''@;'; put 'put ''YWQpYy5wcmV2aW91cz1sO2Vsc2UgZm9yKGxldCBkIGluIGwpYVtkXT1sW2RdO2MuY3VycmVudD1udWxsLHRoaXMubmdPbkNoYW5nZXMobCl9fWZ1bmN0aW9uIHFoKGMsbCxhLGQsaCl7Y29uc3QgZj10aGlzLmRlY2xhcmVkSW5wdXRzW2RdLHY9WXkoYyl8fGZ1bmN0aW9uIGpTKGMsbCl7cmV0''@;'; put 'put ''dXJuIGNbdW1dPWx9KGMse3ByZXZpb3VzOmFkLGN1cnJlbnQ6bnVsbH0pLE09di5jdXJyZW50fHwodi5jdXJyZW50PXt9KSxEPXYucHJldmlvdXMsVT1EW2ZdO01bZl09bmV3IEJTKFUmJlUuY3VycmVudFZhbHVlLGEsRD09PWFkKSxaeShjLGwsaCxhKX1jb25zdCB1bT0iX19uZ1NpbXBsZUNo''@;'; put 'put ''YW5nZXNfXyI7ZnVuY3Rpb24gWXkoYyl7cmV0dXJuIGNbdW1dfHxudWxsfWZ1bmN0aW9uIEhhKGMpe2Zvcig7QXJyYXkuaXNBcnJheShjKTspYz1jWzBdO3JldHVybiBjfWZ1bmN0aW9uICRlKGMsbCl7cmV0dXJuIEhhKGxbY10pfWZ1bmN0aW9uIHB0KGMsbCl7cmV0dXJuIEhhKGxbYy5pbmRl''@;'; put 'put ''eF0pfWZ1bmN0aW9uIG9uKGMsbCl7cmV0dXJuIGMuZGF0YVtsXX1mdW5jdGlvbiAkbihjLGwpe3JldHVybiBjW2xdfWZ1bmN0aW9uIGxhKGMsbCl7Y29uc3QgYT1sW2NdO3JldHVybiBnYyhhKT9hOmFbMF19ZnVuY3Rpb24gbnMoYyl7cmV0dXJuISgxMjgmfmNbMl0pfWZ1bmN0aW9uIEZjKGMs''@;'; put 'put ''bCl7cmV0dXJuIG51bGw9PWw/bnVsbDpjW2xdfWZ1bmN0aW9uIFFkKGMpe2NbMTddPTB9ZnVuY3Rpb24gVVMoYyl7MTAyNCZjWzJdfHwoY1syXXw9MTAyNCxucyhjKSYmZG0oYykpfWZ1bmN0aW9uIGo4KGMpe3JldHVybiEhKDkyMTYmY1syXXx8Y1syNF0/LmRpcnR5KX1mdW5jdGlvbiBaUyhj''@;'; put 'put ''KXtjWzEwXS5jaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXI/Lm5vdGlmeSg4KSw2NCZjWzJdJiYoY1syXXw9MTAyNCksajgoYykmJmRtKGMpfWZ1bmN0aW9uIGRtKGMpe2NbMTBdLmNoYW5nZURldGVjdGlvblNjaGVkdWxlcj8ubm90aWZ5KDApO2xldCBsPXkzKGMpO2Zvcig7bnVsbCE9PWwmJiEo''@;'; put 'put ''ODE5MiZsWzJdKSYmKGxbMl18PTgxOTIsbnMobCkpOylsPXkzKGwpfWZ1bmN0aW9uIEd5KGMsbCl7aWYoY2QoYykpdGhyb3cgbmV3IFByKDkxMSwhMSk7bnVsbD09PWNbMjFdJiYoY1syMV09W10pLGNbMjFdLnB1c2gobCl9ZnVuY3Rpb24geTMoYyl7Y29uc3QgbD1jWzNdO3JldHVybiB2bChs''@;'; put 'put ''KT9sWzNdOmx9ZnVuY3Rpb24gWVMoYyl7cmV0dXJuIGNbN10/Pz1bXX1mdW5jdGlvbiBHUyhjKXtyZXR1cm4gYy5jbGVhbnVwPz89W119Y29uc3QgSG89e2xGcmFtZTpBSShudWxsKSxiaW5kaW5nc0VuYWJsZWQ6ITAsc2tpcEh5ZHJhdGlvblJvb3RUTm9kZTpudWxsfTtsZXQgS1M9ITE7ZnVu''@;'; put 'put ''Y3Rpb24gWFMoKXtyZXR1cm4gSG8uYmluZGluZ3NFbmFibGVkfWZ1bmN0aW9uIEFnKCl7cmV0dXJuIG51bGwhPT1Iby5za2lwSHlkcmF0aW9uUm9vdFROb2RlfWZ1bmN0aW9uIEtyKCl7cmV0dXJuIEhvLmxGcmFtZS5sVmlld31mdW5jdGlvbiBEbygpe3JldHVybiBIby5sRnJhbWUudFZpZXd9''@;'; put 'put ''ZnVuY3Rpb24gd3QoYyl7cmV0dXJuIEhvLmxGcmFtZS5jb250ZXh0TFZpZXc9YyxjWzhdfWZ1bmN0aW9uIEN0KGMpe3JldHVybiBIby5sRnJhbWUuY29udGV4dExWaWV3PW51bGwsY31mdW5jdGlvbiBycygpe2xldCBjPXFTKCk7Zm9yKDtudWxsIT09YyYmNjQ9PT1jLnR5cGU7KWM9Yy5wYXJl''@;'; put 'put ''bnQ7cmV0dXJuIGN9ZnVuY3Rpb24gcVMoKXtyZXR1cm4gSG8ubEZyYW1lLmN1cnJlbnRUTm9kZX1mdW5jdGlvbiBlaChjLGwpe2NvbnN0IGE9SG8ubEZyYW1lO2EuY3VycmVudFROb2RlPWMsYS5pc1BhcmVudD1sfWZ1bmN0aW9uIEpTKCl7cmV0dXJuIEhvLmxGcmFtZS5pc1BhcmVudH1mdW5j''@;'; put 'put ''dGlvbiBLeSgpe0hvLmxGcmFtZS5pc1BhcmVudD0hMX1mdW5jdGlvbiBlTSgpe3JldHVybiBLU31mdW5jdGlvbiBYeShjKXtjb25zdCBsPUtTO3JldHVybiBLUz1jLGx9ZnVuY3Rpb24gbjEoKXtjb25zdCBjPUhvLmxGcmFtZTtsZXQgbD1jLmJpbmRpbmdSb290SW5kZXg7cmV0dXJuLTE9PT1s''@;'; put 'put ''JiYobD1jLmJpbmRpbmdSb290SW5kZXg9Yy50Vmlldy5iaW5kaW5nU3RhcnRJbmRleCksbH1mdW5jdGlvbiBiMygpe3JldHVybiBIby5sRnJhbWUuYmluZGluZ0luZGV4fWZ1bmN0aW9uIHRoKCl7cmV0dXJuIEhvLmxGcmFtZS5iaW5kaW5nSW5kZXgrK31mdW5jdGlvbiBfMyhjKXtjb25zdCBs''@;'; put 'put ''PUhvLmxGcmFtZSxhPWwuYmluZGluZ0luZGV4O3JldHVybiBsLmJpbmRpbmdJbmRleD1sLmJpbmRpbmdJbmRleCtjLGF9ZnVuY3Rpb24genooYyxsKXtjb25zdCBhPUhvLmxGcmFtZTthLmJpbmRpbmdJbmRleD1hLmJpbmRpbmdSb290SW5kZXg9Yyx0TShsKX1mdW5jdGlvbiB0TShjKXtIby5s''@;'; put 'put ''RnJhbWUuY3VycmVudERpcmVjdGl2ZUluZGV4PWN9ZnVuY3Rpb24gbk0oYyl7Y29uc3QgbD1Iby5sRnJhbWUuY3VycmVudERpcmVjdGl2ZUluZGV4O3JldHVybi0xPT09bD9udWxsOmNbbF19ZnVuY3Rpb24gck0oKXtyZXR1cm4gSG8ubEZyYW1lLmN1cnJlbnRRdWVyeUluZGV4fWZ1bmN0aW9u''@;'; put 'put ''IHF5KGMpe0hvLmxGcmFtZS5jdXJyZW50UXVlcnlJbmRleD1jfWZ1bmN0aW9uIFp6KGMpe2NvbnN0IGw9Y1sxXTtyZXR1cm4gMj09PWwudHlwZT9sLmRlY2xUTm9kZToxPT09bC50eXBlP2NbNV06bnVsbH1mdW5jdGlvbiBFSShjLGwsYSl7aWYoYSZ4by5Ta2lwU2VsZil7bGV0IGg9bCxmPWM7''@;'; put 'put ''Zm9yKDshKGg9aC5wYXJlbnQsbnVsbCE9PWh8fGEmeG8uSG9zdHx8KGg9WnooZiksbnVsbD09PWh8fChmPWZbMTRdLDEwJmgudHlwZSkpKTspO2lmKG51bGw9PT1oKXJldHVybiExO2w9aCxjPWZ9Y29uc3QgZD1Iby5sRnJhbWU9VEkoKTtyZXR1cm4gZC5jdXJyZW50VE5vZGU9bCxkLmxWaWV3''@;'; put 'put ''PWMsITB9ZnVuY3Rpb24gaU0oYyl7Y29uc3QgbD1USSgpLGE9Y1sxXTtIby5sRnJhbWU9bCxsLmN1cnJlbnRUTm9kZT1hLmZpcnN0Q2hpbGQsbC5sVmlldz1jLGwudFZpZXc9YSxsLmNvbnRleHRMVmlldz1jLGwuYmluZGluZ0luZGV4PWEuYmluZGluZ1N0YXJ0SW5kZXgsbC5pbkkxOG49ITF9''@;'; put 'put ''ZnVuY3Rpb24gVEkoKXtjb25zdCBjPUhvLmxGcmFtZSxsPW51bGw9PT1jP251bGw6Yy5jaGlsZDtyZXR1cm4gbnVsbD09PWw/QUkoYyk6bH1mdW5jdGlvbiBBSShjKXtjb25zdCBsPXtjdXJyZW50VE5vZGU6bnVsbCxpc1BhcmVudDohMCxsVmlldzpudWxsLHRWaWV3Om51bGwsc2VsZWN0ZWRJ''@;'; put 'put ''bmRleDotMSxjb250ZXh0TFZpZXc6bnVsbCxlbGVtZW50RGVwdGhDb3VudDowLGN1cnJlbnROYW1lc3BhY2U6bnVsbCxjdXJyZW50RGlyZWN0aXZlSW5kZXg6LTEsYmluZGluZ1Jvb3RJbmRleDotMSxiaW5kaW5nSW5kZXg6LTEsY3VycmVudFF1ZXJ5SW5kZXg6MCxwYXJlbnQ6YyxjaGlsZDpu''@;'; put 'put ''dWxsLGluSTE4bjohMX07cmV0dXJuIG51bGwhPT1jJiYoYy5jaGlsZD1sKSxsfWZ1bmN0aW9uIGFNKCl7Y29uc3QgYz1Iby5sRnJhbWU7cmV0dXJuIEhvLmxGcmFtZT1jLnBhcmVudCxjLmN1cnJlbnRUTm9kZT1udWxsLGMubFZpZXc9bnVsbCxjfWNvbnN0IGtJPWFNO2Z1bmN0aW9uIG9NKCl7''@;'; put 'put ''Y29uc3QgYz1hTSgpO2MuaXNQYXJlbnQ9ITAsYy50Vmlldz1udWxsLGMuc2VsZWN0ZWRJbmRleD0tMSxjLmNvbnRleHRMVmlldz1udWxsLGMuZWxlbWVudERlcHRoQ291bnQ9MCxjLmN1cnJlbnREaXJlY3RpdmVJbmRleD0tMSxjLmN1cnJlbnROYW1lc3BhY2U9bnVsbCxjLmJpbmRpbmdSb290''@;'; put 'put ''SW5kZXg9LTEsYy5iaW5kaW5nSW5kZXg9LTEsYy5jdXJyZW50UXVlcnlJbmRleD0wfWZ1bmN0aW9uIGIwKCl7cmV0dXJuIEhvLmxGcmFtZS5zZWxlY3RlZEluZGV4fWZ1bmN0aW9uIGtnKGMpe0hvLmxGcmFtZS5zZWxlY3RlZEluZGV4PWN9ZnVuY3Rpb24gRGwoKXtjb25zdCBjPUhvLmxGcmFt''@;'; put 'put ''ZTtyZXR1cm4gb24oYy50VmlldyxjLnNlbGVjdGVkSW5kZXgpfWxldCBJST0hMDtmdW5jdGlvbiBVOCgpe3JldHVybiBJSX1mdW5jdGlvbiB0ZihjKXtJST1jfWZ1bmN0aW9uIHNNKGMsbCl7Zm9yKGxldCBhPWwuZGlyZWN0aXZlU3RhcnQsZD1sLmRpcmVjdGl2ZUVuZDthPGQ7YSsrKXtjb25z''@;'; put 'put ''dCBmPWMuZGF0YVthXS50eXBlLnByb3RvdHlwZSx7bmdBZnRlckNvbnRlbnRJbml0OnYsbmdBZnRlckNvbnRlbnRDaGVja2VkOk0sbmdBZnRlclZpZXdJbml0OkQsbmdBZnRlclZpZXdDaGVja2VkOlUsbmdPbkRlc3Ryb3k6dGV9PWY7diYmKGMuY29udGVudEhvb2tzPz89W10pLnB1c2goLWEs''@;'; put 'put ''diksTSYmKChjLmNvbnRlbnRIb29rcz8/PVtdKS5wdXNoKGEsTSksKGMuY29udGVudENoZWNrSG9va3M/Pz1bXSkucHVzaChhLE0pKSxEJiYoYy52aWV3SG9va3M/Pz1bXSkucHVzaCgtYSxEKSxVJiYoKGMudmlld0hvb2tzPz89W10pLnB1c2goYSxVKSwoYy52aWV3Q2hlY2tIb29rcz8/PVtd''@;'; put 'put ''KS5wdXNoKGEsVSkpLG51bGwhPXRlJiYoYy5kZXN0cm95SG9va3M/Pz1bXSkucHVzaChhLHRlKX19ZnVuY3Rpb24gSnkoYyxsLGEpe2htKGMsbCwzLGEpfWZ1bmN0aW9uIFF5KGMsbCxhLGQpeygzJmNbMl0pPT09YSYmaG0oYyxsLGEsZCl9ZnVuY3Rpb24gbE0oYyxsKXtsZXQgYT1jWzJdOygz''@;'; put 'put ''JmEpPT09bCYmKGEmPTE2MzgzLGErPTEsY1syXT1hKX1mdW5jdGlvbiBobShjLGwsYSxkKXtjb25zdCBmPWQ/Py0xLHY9bC5sZW5ndGgtMTtsZXQgTT0wO2ZvcihsZXQgRD12b2lkIDAhPT1kPzY1NTM1JmNbMTddOjA7RDx2O0QrKylpZigibnVtYmVyIj09dHlwZW9mIGxbRCsxXSl7aWYoTT1s''@;'; put 'put ''W0RdLG51bGwhPWQmJk0+PWQpYnJlYWt9ZWxzZSBsW0RdPDAmJihjWzE3XSs9NjU1MzYpLChNPGZ8fC0xPT1mKSYmKGNNKGMsYSxsLEQpLGNbMTddPSg0Mjk0OTAxNzYwJmNbMTddKStEKzIpLEQrK31mdW5jdGlvbiBlYihjLGwpe2NvbnN0IGE9X2UobnVsbCk7dHJ5e2wuY2FsbChjKX1maW5h''@;'; put 'put ''bGx5e19lKGEpfX1mdW5jdGlvbiBjTShjLGwsYSxkKXtjb25zdCBoPWFbZF08MCxmPWFbZCsxXSxNPWNbaD8tYVtkXTphW2RdXTtoP2NbMl0+PjE0PGNbMTddPj4xNiYmKDMmY1syXSk9PT1sJiYoY1syXSs9MTYzODQsZWIoTSxmKSk6ZWIoTSxmKX1jbGFzcyBKaHtmYWN0b3J5O2luamVjdElt''@;'; put 'put ''cGw7cmVzb2x2aW5nPSExO2NhblNlZVZpZXdQcm92aWRlcnM7bXVsdGk7Y29tcG9uZW50UHJvdmlkZXJzO2luZGV4O3Byb3ZpZGVyRmFjdG9yeTtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5mYWN0b3J5PWwsdGhpcy5jYW5TZWVWaWV3UHJvdmlkZXJzPWEsdGhpcy5pbmplY3RJbXBsPWR9fWZ1''@;'; put 'put ''bmN0aW9uIExJKGMpe3JldHVybiAzPT09Y3x8ND09PWN8fDY9PT1jfWZ1bmN0aW9uIE9JKGMpe3JldHVybiA2ND09PWMuY2hhckNvZGVBdCgwKX1mdW5jdGlvbiBmbShjLGwpe2lmKG51bGwhPT1sJiYwIT09bC5sZW5ndGgpaWYobnVsbD09PWN8fDA9PT1jLmxlbmd0aCljPWwuc2xpY2UoKTtl''@;'; put 'put ''bHNle2xldCBhPS0xO2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGg7ZCsrKXtjb25zdCBoPWxbZF07Im51bWJlciI9PXR5cGVvZiBoP2E9aDowPT09YXx8bmIoYyxhLGgsMCwtMT09PWF8fDI9PT1hP2xbKytkXTpudWxsKX19cmV0dXJuIGN9ZnVuY3Rpb24gbmIoYyxsLGEsZCxoKXtsZXQgZj0wLHY9''@;'; put 'put ''Yy5sZW5ndGg7aWYoLTE9PT1sKXY9LTE7ZWxzZSBmb3IoO2Y8Yy5sZW5ndGg7KXtjb25zdCBNPWNbZisrXTtpZigibnVtYmVyIj09dHlwZW9mIE0pe2lmKE09PT1sKXt2PS0xO2JyZWFrfWlmKE0+bCl7dj1mLTE7YnJlYWt9fX1mb3IoO2Y8Yy5sZW5ndGg7KXtjb25zdCBNPWNbZl07aWYoIm51''@;'; put 'put ''bWJlciI9PXR5cGVvZiBNKWJyZWFrO2lmKE09PT1hKXJldHVybiB2b2lkKG51bGwhPT1oJiYoY1tmKzFdPWgpKTtmKyssbnVsbCE9PWgmJmYrK30tMSE9PXYmJihjLnNwbGljZSh2LDAsbCksZj12KzEpLGMuc3BsaWNlKGYrKywwLGEpLG51bGwhPT1oJiZjLnNwbGljZShmKyssMCxoKX1mdW5j''@;'; put 'put ''dGlvbiBkTShjKXtyZXR1cm4tMSE9PWN9ZnVuY3Rpb24gWTgoYyl7cmV0dXJuIDMyNzY3JmN9ZnVuY3Rpb24gRzgoYyxsKXtsZXQgYT1mdW5jdGlvbiBReihjKXtyZXR1cm4gYz4+MTZ9KGMpLGQ9bDtmb3IoO2E+MDspZD1kWzE0XSxhLS07cmV0dXJuIGR9bGV0IGhNPSEwO2Z1bmN0aW9uIHJi''@;'; put 'put ''KGMpe2NvbnN0IGw9aE07cmV0dXJuIGhNPWMsbH1sZXQgZVU9MDtjb25zdCBuZj17fTtmdW5jdGlvbiAkOChjLGwpe2NvbnN0IGE9SEkoYyxsKTtpZigtMSE9PWEpcmV0dXJuIGE7Y29uc3QgZD1sWzFdO2QuZmlyc3RDcmVhdGVQYXNzJiYoYy5pbmplY3RvckluZGV4PWwubGVuZ3RoLFFoKGQu''@;'; put 'put ''ZGF0YSxjKSxRaChsLG51bGwpLFFoKGQuYmx1ZXByaW50LG51bGwpKTtjb25zdCBoPWliKGMsbCksZj1jLmluamVjdG9ySW5kZXg7aWYoZE0oaCkpe2NvbnN0IHY9WTgoaCksTT1HOChoLGwpLEQ9TVsxXS5kYXRhO2ZvcihsZXQgVT0wO1U8ODtVKyspbFtmK1VdPU1bditVXXxEW3YrVV19cmV0''@;'; put 'put ''dXJuIGxbZis4XT1oLGZ9ZnVuY3Rpb24gUWgoYyxsKXtjLnB1c2goMCwwLDAsMCwwLDAsMCwwLGwpfWZ1bmN0aW9uIEhJKGMsbCl7cmV0dXJuLTE9PT1jLmluamVjdG9ySW5kZXh8fGMucGFyZW50JiZjLnBhcmVudC5pbmplY3RvckluZGV4PT09Yy5pbmplY3RvckluZGV4fHxudWxsPT09bFtj''@;'; put 'put ''LmluamVjdG9ySW5kZXgrOF0/LTE6Yy5pbmplY3RvckluZGV4fWZ1bmN0aW9uIGliKGMsbCl7aWYoYy5wYXJlbnQmJi0xIT09Yy5wYXJlbnQuaW5qZWN0b3JJbmRleClyZXR1cm4gYy5wYXJlbnQuaW5qZWN0b3JJbmRleDtsZXQgYT0wLGQ9bnVsbCxoPWw7Zm9yKDtudWxsIT09aDspe2lmKGQ9''@;'; put 'put ''b2IoaCksbnVsbD09PWQpcmV0dXJuLTE7aWYoYSsrLGg9aFsxNF0sLTEhPT1kLmluamVjdG9ySW5kZXgpcmV0dXJuIGQuaW5qZWN0b3JJbmRleHxhPDwxNn1yZXR1cm4tMX1mdW5jdGlvbiBmTShjLGwsYSl7IWZ1bmN0aW9uIHRVKGMsbCxhKXtsZXQgZDsic3RyaW5nIj09dHlwZW9mIGE/ZD1h''@;'; put 'put ''LmNoYXJDb2RlQXQoMCl8fDA6YS5oYXNPd25Qcm9wZXJ0eShvbykmJihkPWFbb29dKSxudWxsPT1kJiYoZD1hW29vXT1lVSsrKTtjb25zdCBoPTI1NSZkO2wuZGF0YVtjKyhoPj41KV18PTE8PGh9KGMsbCxhKX1mdW5jdGlvbiBOSShjLGwsYSl7aWYoYSZ4by5PcHRpb25hbHx8dm9pZCAwIT09''@;'; put 'put ''YylyZXR1cm4gYztTYygpfWZ1bmN0aW9uIFZJKGMsbCxhLGQpe2lmKGEmeG8uT3B0aW9uYWwmJnZvaWQgMD09PWQmJihkPW51bGwpLCEoYSYoeG8uU2VsZnx4by5Ib3N0KSkpe2NvbnN0IGg9Y1s5XSxmPWtvKHZvaWQgMCk7dHJ5e3JldHVybiBoP2guZ2V0KGwsZCxhJnhvLk9wdGlvbmFsKTpW''@;'; put 'put ''aChsLGQsYSZ4by5PcHRpb25hbCl9ZmluYWxseXtrbyhmKX19cmV0dXJuIE5JKGQsMCxhKX1mdW5jdGlvbiBwTShjLGwsYSxkPXhvLkRlZmF1bHQsaCl7aWYobnVsbCE9PWMpe2lmKDIwNDgmbFsyXSYmIShkJnhvLlNlbGYpKXtjb25zdCB2PWZ1bmN0aW9uIG9VKGMsbCxhLGQsaCl7bGV0IGY9''@;'; put 'put ''Yyx2PWw7Zm9yKDtudWxsIT09ZiYmbnVsbCE9PXYmJjIwNDgmdlsyXSYmIXFkKHYpOyl7Y29uc3QgTT1nTShmLHYsYSxkfHhvLlNlbGYsbmYpO2lmKE0hPT1uZilyZXR1cm4gTTtsZXQgRD1mLnBhcmVudDtpZighRCl7Y29uc3QgVT12WzIwXTtpZihVKXtjb25zdCB0ZT1VLmdldChhLG5mLGQp''@;'; put 'put ''O2lmKHRlIT09bmYpcmV0dXJuIHRlfUQ9b2Iodiksdj12WzE0XX1mPUR9cmV0dXJuIGh9KGMsbCxhLGQsbmYpO2lmKHYhPT1uZilyZXR1cm4gdn1jb25zdCBmPWdNKGMsbCxhLGQsbmYpO2lmKGYhPT1uZilyZXR1cm4gZn1yZXR1cm4gVkkobCxhLGQsaCl9ZnVuY3Rpb24gZ00oYyxsLGEsZCxo''@;'; put 'put ''KXtjb25zdCBmPWZ1bmN0aW9uIGlVKGMpe2lmKCJzdHJpbmciPT10eXBlb2YgYylyZXR1cm4gYy5jaGFyQ29kZUF0KDApfHwwO2NvbnN0IGw9Yy5oYXNPd25Qcm9wZXJ0eShvbyk/Y1tvb106dm9pZCAwO3JldHVybiJudW1iZXIiPT10eXBlb2YgbD9sPj0wPzI1NSZsOmFVOmx9KGEpO2lmKCJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBmKXtpZighRUkobCxjLGQpKXJldHVybiBkJnhvLkhvc3Q/TkkoaCwwLGQpOlZJKGwsYSxkLGgpO3RyeXtsZXQgdjtpZih2PWYoZCksbnVsbCE9dnx8ZCZ4by5PcHRpb25hbClyZXR1cm4gdjtTYygpfWZpbmFsbHl7a0koKX19ZWxzZSBpZigibnVtYmVyIj09dHlw''@;'; put 'put ''ZW9mIGYpe2xldCB2PW51bGwsTT1ISShjLGwpLEQ9LTEsVT1kJnhvLkhvc3Q/bFsxNV1bNV06bnVsbDtmb3IoKC0xPT09TXx8ZCZ4by5Ta2lwU2VsZikmJihEPS0xPT09TT9pYihjLGwpOmxbTSs4XSwtMSE9PUQmJmpJKGQsITEpPyh2PWxbMV0sTT1ZOChEKSxsPUc4KEQsbCkpOk09LTEpOy0x''@;'; put 'put ''IT09TTspe2NvbnN0IHRlPWxbMV07aWYoQkkoZixNLHRlLmRhdGEpKXtjb25zdCBvZT1yVShNLGwsYSx2LGQsVSk7aWYob2UhPT1uZilyZXR1cm4gb2V9RD1sW00rOF0sLTEhPT1EJiZqSShkLGxbMV0uZGF0YVtNKzhdPT09VSkmJkJJKGYsTSxsKT8odj10ZSxNPVk4KEQpLGw9RzgoRCxsKSk6''@;'; put 'put ''TT0tMX19cmV0dXJuIGh9ZnVuY3Rpb24gclUoYyxsLGEsZCxoLGYpe2NvbnN0IHY9bFsxXSxNPXYuZGF0YVtjKzhdLHRlPWFiKE0sdixhLG51bGw9PWQ/WnUoTSkmJmhNOmQhPXYmJiEhKDMmTS50eXBlKSxoJnhvLkhvc3QmJmY9PT1NKTtyZXR1cm4gbnVsbCE9PXRlP0s4KGwsdix0ZSxNLGgp''@;'; put 'put ''Om5mfWZ1bmN0aW9uIGFiKGMsbCxhLGQsaCl7Y29uc3QgZj1jLnByb3ZpZGVySW5kZXhlcyx2PWwuZGF0YSxNPTEwNDg1NzUmZixEPWMuZGlyZWN0aXZlU3RhcnQsdGU9Zj4+MjAsdmU9aD9NK3RlOmMuZGlyZWN0aXZlRW5kO2ZvcihsZXQgd2U9ZD9NOk0rdGU7d2U8dmU7d2UrKyl7Y29uc3Qg''@;'; put 'put ''RmU9dlt3ZV07aWYod2U8RCYmYT09PUZlfHx3ZT49RCYmRmUudHlwZT09PWEpcmV0dXJuIHdlfWlmKGgpe2NvbnN0IHdlPXZbRF07aWYod2UmJlYwKHdlKSYmd2UudHlwZT09PWEpcmV0dXJuIER9cmV0dXJuIG51bGx9ZnVuY3Rpb24gSzgoYyxsLGEsZCxoKXtsZXQgZj1jW2FdO2NvbnN0IHY9''@;'; put 'put ''bC5kYXRhO2lmKGYgaW5zdGFuY2VvZiBKaCl7Y29uc3QgTT1mO00ucmVzb2x2aW5nJiZoMChmdW5jdGlvbiBMbyhjKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYz9jLm5hbWV8fGMudG9TdHJpbmcoKToib2JqZWN0Ij09dHlwZW9mIGMmJm51bGwhPWMmJiJmdW5jdGlvbiI9PXR5cGVvZiBj''@;'; put 'put ''LnR5cGU/Yy50eXBlLm5hbWV8fGMudHlwZS50b1N0cmluZygpOk1vKGMpfSh2W2FdKSk7Y29uc3QgRD1yYihNLmNhblNlZVZpZXdQcm92aWRlcnMpO00ucmVzb2x2aW5nPSEwO2NvbnN0IHRlPU0uaW5qZWN0SW1wbD9rbyhNLmluamVjdEltcGwpOm51bGw7RUkoYyxkLHhvLkRlZmF1bHQpO3Ry''@;'; put 'put ''eXtmPWNbYV09TS5mYWN0b3J5KHZvaWQgMCxoLHYsYyxkKSxsLmZpcnN0Q3JlYXRlUGFzcyYmYT49ZC5kaXJlY3RpdmVTdGFydCYmZnVuY3Rpb24gWHooYyxsLGEpe2NvbnN0e25nT25DaGFuZ2VzOmQsbmdPbkluaXQ6aCxuZ0RvQ2hlY2s6Zn09bC50eXBlLnByb3RvdHlwZTtpZihkKXtjb25z''@;'; put 'put ''dCB2PVd5KGwpOyhhLnByZU9yZGVySG9va3M/Pz1bXSkucHVzaChjLHYpLChhLnByZU9yZGVyQ2hlY2tIb29rcz8/PVtdKS5wdXNoKGMsdil9aCYmKGEucHJlT3JkZXJIb29rcz8/PVtdKS5wdXNoKDAtYyxoKSxmJiYoKGEucHJlT3JkZXJIb29rcz8/PVtdKS5wdXNoKGMsZiksKGEucHJlT3Jk''@;'; put 'put ''ZXJDaGVja0hvb2tzPz89W10pLnB1c2goYyxmKSl9KGEsdlthXSxsKX1maW5hbGx5e251bGwhPT10ZSYma28odGUpLHJiKEQpLE0ucmVzb2x2aW5nPSExLGtJKCl9fXJldHVybiBmfWZ1bmN0aW9uIEJJKGMsbCxhKXtyZXR1cm4hIShhW2wrKGM+PjUpXSYxPDxjKX1mdW5jdGlvbiBqSShjLGwp''@;'; put 'put ''e3JldHVybiEoYyZ4by5TZWxmfHxjJnhvLkhvc3QmJmwpfWNsYXNzIEhje190Tm9kZTtfbFZpZXc7Y29uc3RydWN0b3IobCxhKXt0aGlzLl90Tm9kZT1sLHRoaXMuX2xWaWV3PWF9Z2V0KGwsYSxkKXtyZXR1cm4gcE0odGhpcy5fdE5vZGUsdGhpcy5fbFZpZXcsbCxiZyhkKSxhKX19ZnVuY3Rp''@;'; put 'put ''b24gYVUoKXtyZXR1cm4gbmV3IEhjKHJzKCksS3IoKSl9ZnVuY3Rpb24geWwoYyl7cmV0dXJuIHVjKCgpPT57Y29uc3QgbD1jLnByb3RvdHlwZS5jb25zdHJ1Y3RvcixhPWxbVm9dfHxtTShsKSxkPU9iamVjdC5wcm90b3R5cGU7bGV0IGg9T2JqZWN0LmdldFByb3RvdHlwZU9mKGMucHJvdG90''@;'; put 'put ''eXBlKS5jb25zdHJ1Y3Rvcjtmb3IoO2gmJmghPT1kOyl7Y29uc3QgZj1oW1ZvXXx8bU0oaCk7aWYoZiYmZiE9PWEpcmV0dXJuIGY7aD1PYmplY3QuZ2V0UHJvdG90eXBlT2YoaCl9cmV0dXJuIGY9Pm5ldyBmfSl9ZnVuY3Rpb24gbU0oYyl7cmV0dXJuIFdkKGMpPygpPT57Y29uc3QgbD1tTShx''@;'; put 'put ''YShjKSk7cmV0dXJuIGwmJmwoKX06cTIoYyl9ZnVuY3Rpb24gb2IoYyl7Y29uc3QgbD1jWzFdLGE9bC50eXBlO3JldHVybiAyPT09YT9sLmRlY2xUTm9kZToxPT09YT9jWzVdOm51bGx9ZnVuY3Rpb24gTnAoYyl7cmV0dXJuIGZ1bmN0aW9uIG5VKGMsbCl7aWYoImNsYXNzIj09PWwpcmV0dXJu''@;'; put 'put ''IGMuY2xhc3NlcztpZigic3R5bGUiPT09bClyZXR1cm4gYy5zdHlsZXM7Y29uc3QgYT1jLmF0dHJzO2lmKGEpe2NvbnN0IGQ9YS5sZW5ndGg7bGV0IGg9MDtmb3IoO2g8ZDspe2NvbnN0IGY9YVtoXTtpZihMSShmKSlicmVhaztpZigwPT09ZiloKz0yO2Vsc2UgaWYoIm51bWJlciI9PXR5cGVv''@;'; put 'put ''ZiBmKWZvcihoKys7aDxkJiYic3RyaW5nIj09dHlwZW9mIGFbaF07KWgrKztlbHNle2lmKGY9PT1sKXJldHVybiBhW2grMV07aCs9Mn19fXJldHVybiBudWxsfShycygpLGMpfWZ1bmN0aW9uIGxVKGMsbD1udWxsLGE9bnVsbCxkKXtjb25zdCBoPXIxKGMsbCxhLGQpO3JldHVybiBoLnJlc29s''@;'; put 'put ''dmVJbmplY3RvckluaXRpYWxpemVycygpLGh9ZnVuY3Rpb24gcjEoYyxsPW51bGwsYT1udWxsLGQsaD1uZXcgU2V0KXtjb25zdCBmPVthfHxFcyxnMChjKV07cmV0dXJuIGQ9ZHx8KCJvYmplY3QiPT10eXBlb2YgYz92b2lkIDA6JGwoYykpLG5ldyBUcyhmLGx8fEgwKCksZHx8bnVsbCxoKX1j''@;'; put 'put ''bGFzcyBZb3tzdGF0aWMgVEhST1dfSUZfTk9UX0ZPVU5EPU9jO3N0YXRpYyBOVUxMPW5ldyBrcDtzdGF0aWMgY3JlYXRlKGwsYSl7aWYoQXJyYXkuaXNBcnJheShsKSlyZXR1cm4gbFUoe25hbWU6IiJ9LGEsbCwiIik7e2NvbnN0IGQ9bC5uYW1lPz8iIjtyZXR1cm4gbFUoe25hbWU6ZH0sbC5w''@;'; put 'put ''YXJlbnQsbC5wcm92aWRlcnMsZCl9fXN0YXRpYyBcdTAyNzVwcm92PWZyKHt0b2tlbjpZbyxwcm92aWRlZEluOiJhbnkiLGZhY3Rvcnk6KCk9PkhyKGs4KX0pO3N0YXRpYyBfX05HX0VMRU1FTlRfSURfXz0tMX1uZXcgam4oIiIpLl9fTkdfRUxFTUVOVF9JRF9fPWM9Pntjb25zdCBsPXJzKCk7''@;'; put 'put ''aWYobnVsbD09PWwpdGhyb3cgbmV3IFByKDIwNCwhMSk7aWYoMiZsLnR5cGUpcmV0dXJuIGwudmFsdWU7aWYoYyZ4by5PcHRpb25hbClyZXR1cm4gbnVsbDt0aHJvdyBuZXcgUHIoMjA0LCExKX07Y29uc3QgSjg9ITE7bGV0IE0xPSgoKT0+Y2xhc3MgY3tzdGF0aWMgX19OR19FTEVNRU5UX0lE''@;'; put 'put ''X189Y1U7c3RhdGljIF9fTkdfRU5WX0lEX189YT0+YX0pKCk7Y2xhc3MgeU0gZXh0ZW5kcyBNMXtfbFZpZXc7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLl9sVmlldz1sfW9uRGVzdHJveShsKXtjb25zdCBhPXRoaXMuX2xWaWV3O3JldHVybiBjZChhKT8obCgpLCgpPT57fSk6KEd5KGEs''@;'; put 'put ''bCksKCk9PmZ1bmN0aW9uIFdTKGMsbCl7aWYobnVsbD09PWNbMjFdKXJldHVybjtjb25zdCBhPWNbMjFdLmluZGV4T2YobCk7LTEhPT1hJiZjWzIxXS5zcGxpY2UoYSwxKX0oYSxsKSl9fWZ1bmN0aW9uIGNVKCl7cmV0dXJuIG5ldyB5TShLcigpKX1jbGFzcyBzZnt9Y29uc3QgQzM9bmV3IGpu''@;'; put 'put ''KCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4hMX0pLGU3PW5ldyBqbigiIiksdDc9bmV3IGpuKCIiKTtsZXQgbGY9KCgpPT57Y2xhc3MgY3t0YXNrSWQ9MDtwZW5kaW5nVGFza3M9bmV3IFNldDtnZXQgX2hhc1BlbmRpbmdUYXNrcygpe3JldHVybiB0aGlzLmhhc1BlbmRpbmdU''@;'; put 'put ''YXNrcy52YWx1ZX1oYXNQZW5kaW5nVGFza3M9bmV3IE1pKCExKTthZGQoKXt0aGlzLl9oYXNQZW5kaW5nVGFza3N8fHRoaXMuaGFzUGVuZGluZ1Rhc2tzLm5leHQoITApO2NvbnN0IGE9dGhpcy50YXNrSWQrKztyZXR1cm4gdGhpcy5wZW5kaW5nVGFza3MuYWRkKGEpLGF9aGFzKGEpe3JldHVy''@;'; put 'put ''biB0aGlzLnBlbmRpbmdUYXNrcy5oYXMoYSl9cmVtb3ZlKGEpe3RoaXMucGVuZGluZ1Rhc2tzLmRlbGV0ZShhKSwwPT09dGhpcy5wZW5kaW5nVGFza3Muc2l6ZSYmdGhpcy5faGFzUGVuZGluZ1Rhc2tzJiZ0aGlzLmhhc1BlbmRpbmdUYXNrcy5uZXh0KCExKX1uZ09uRGVzdHJveSgpe3RoaXMu''@;'; put 'put ''cGVuZGluZ1Rhc2tzLmNsZWFyKCksdGhpcy5faGFzUGVuZGluZ1Rhc2tzJiZ0aGlzLmhhc1BlbmRpbmdUYXNrcy5uZXh0KCExKX1zdGF0aWMgXHUwMjc1cHJvdj1mcih7dG9rZW46Yyxwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5uZXcgY30pfXJldHVybiBjfSkoKTtjb25zdCBYcj1j''@;'; put 'put ''bGFzcyB1VSBleHRlbmRzIHVye19faXNBc3luYztkZXN0cm95UmVmPXZvaWQgMDtwZW5kaW5nVGFza3M9dm9pZCAwO2NvbnN0cnVjdG9yKGw9ITEpe3N1cGVyKCksdGhpcy5fX2lzQXN5bmM9bCxTZygpJiYodGhpcy5kZXN0cm95UmVmPUpuKE0xLHtvcHRpb25hbDohMH0pPz92b2lkIDAsdGhp''@;'; put 'put ''cy5wZW5kaW5nVGFza3M9Sm4obGYse29wdGlvbmFsOiEwfSk/P3ZvaWQgMCl9ZW1pdChsKXtjb25zdCBhPV9lKG51bGwpO3RyeXtzdXBlci5uZXh0KGwpfWZpbmFsbHl7X2UoYSl9fXN1YnNjcmliZShsLGEsZCl7bGV0IGg9bCxmPWF8fCgoKT0+bnVsbCksdj1kO2lmKGwmJiJvYmplY3QiPT10''@;'; put 'put ''eXBlb2YgbCl7Y29uc3QgRD1sO2g9RC5uZXh0Py5iaW5kKEQpLGY9RC5lcnJvcj8uYmluZChEKSx2PUQuY29tcGxldGU/LmJpbmQoRCl9dGhpcy5fX2lzQXN5bmMmJihmPXRoaXMud3JhcEluVGltZW91dChmKSxoJiYoaD10aGlzLndyYXBJblRpbWVvdXQoaCkpLHYmJih2PXRoaXMud3JhcElu''@;'; put 'put ''VGltZW91dCh2KSkpO2NvbnN0IE09c3VwZXIuc3Vic2NyaWJlKHtuZXh0OmgsZXJyb3I6Zixjb21wbGV0ZTp2fSk7cmV0dXJuIGwgaW5zdGFuY2VvZiBCdCYmbC5hZGQoTSksTX13cmFwSW5UaW1lb3V0KGwpe3JldHVybiBhPT57Y29uc3QgZD10aGlzLnBlbmRpbmdUYXNrcz8uYWRkKCk7c2V0''@;'; put 'put ''VGltZW91dCgoKT0+e3RyeXtsKGEpfWZpbmFsbHl7dm9pZCAwIT09ZCYmdGhpcy5wZW5kaW5nVGFza3M/LnJlbW92ZShkKX19KX19fTtmdW5jdGlvbiBqcCguLi5jKXt9ZnVuY3Rpb24gbGIoYyl7bGV0IGwsYTtmdW5jdGlvbiBkKCl7Yz1qcDt0cnl7dm9pZCAwIT09YSYmImZ1bmN0aW9uIj09''@;'; put 'put ''dHlwZW9mIGNhbmNlbEFuaW1hdGlvbkZyYW1lJiZjYW5jZWxBbmltYXRpb25GcmFtZShhKSx2b2lkIDAhPT1sJiZjbGVhclRpbWVvdXQobCl9Y2F0Y2h7fX1yZXR1cm4gbD1zZXRUaW1lb3V0KCgpPT57YygpLGQoKX0pLCJmdW5jdGlvbiI9PXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUm''@;'; put 'put ''JihhPXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e2MoKSxkKCl9KSksKCk9PmQoKX1mdW5jdGlvbiBiTShjKXtyZXR1cm4gcXVldWVNaWNyb3Rhc2soKCk9PmMoKSksKCk9PntjPWpwfX1jb25zdCBfTT0iaXNBbmd1bGFyWm9uZSIscjc9X00rIl9JRCI7bGV0IGRVPTA7Y2xhc3MgWGF7aGFz''@;'; put 'put ''UGVuZGluZ01hY3JvdGFza3M9ITE7aGFzUGVuZGluZ01pY3JvdGFza3M9ITE7aXNTdGFibGU9ITA7b25VbnN0YWJsZT1uZXcgWHIoITEpO29uTWljcm90YXNrRW1wdHk9bmV3IFhyKCExKTtvblN0YWJsZT1uZXcgWHIoITEpO29uRXJyb3I9bmV3IFhyKCExKTtjb25zdHJ1Y3RvcihsKXtjb25z''@;'; put 'put ''dHtlbmFibGVMb25nU3RhY2tUcmFjZTphPSExLHNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb246ZD0hMSxzaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbjpoPSExLHNjaGVkdWxlSW5Sb290Wm9uZTpmPUo4fT1sO2lmKHR5cGVvZiBab25lPiJ1Iil0aHJvdyBuZXcgUHIo''@;'; put 'put ''OTA4LCExKTtab25lLmFzc2VydFpvbmVQYXRjaGVkKCk7Y29uc3Qgdj10aGlzO3YuX25lc3Rpbmc9MCx2Ll9vdXRlcj12Ll9pbm5lcj1ab25lLmN1cnJlbnQsWm9uZS5UYXNrVHJhY2tpbmdab25lU3BlYyYmKHYuX2lubmVyPXYuX2lubmVyLmZvcmsobmV3IFpvbmUuVGFza1RyYWNraW5nWm9u''@;'; put 'put ''ZVNwZWMpKSxhJiZab25lLmxvbmdTdGFja1RyYWNlWm9uZVNwZWMmJih2Ll9pbm5lcj12Ll9pbm5lci5mb3JrKFpvbmUubG9uZ1N0YWNrVHJhY2Vab25lU3BlYykpLHYuc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbj0haCYmZCx2LnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0''@;'; put 'put ''ZWN0aW9uPWgsdi5jYWxsYmFja1NjaGVkdWxlZD0hMSx2LnNjaGVkdWxlSW5Sb290Wm9uZT1mLGZ1bmN0aW9uIGZVKGMpe2NvbnN0IGw9KCk9PnshZnVuY3Rpb24gaFUoYyl7ZnVuY3Rpb24gbCgpe2xiKCgpPT57Yy5jYWxsYmFja1NjaGVkdWxlZD0hMSxjZihjKSxjLmlzQ2hlY2tTdGFibGVS''@;'; put 'put ''dW5uaW5nPSEwLHdNKGMpLGMuaXNDaGVja1N0YWJsZVJ1bm5pbmc9ITF9KX1jLmlzQ2hlY2tTdGFibGVSdW5uaW5nfHxjLmNhbGxiYWNrU2NoZWR1bGVkfHwoYy5jYWxsYmFja1NjaGVkdWxlZD0hMCxjLnNjaGVkdWxlSW5Sb290Wm9uZT9ab25lLnJvb3QucnVuKCgpPT57bCgpfSk6Yy5fb3V0''@;'; put 'put ''ZXIucnVuKCgpPT57bCgpfSksY2YoYykpfShjKX0sYT1kVSsrO2MuX2lubmVyPWMuX2lubmVyLmZvcmsoe25hbWU6ImFuZ3VsYXIiLHByb3BlcnRpZXM6e1tfTV06ITAsW3I3XTphLFtyNythXTohMH0sb25JbnZva2VUYXNrOihkLGgsZix2LE0sRCk9PntpZihmdW5jdGlvbiBwVShjKXtyZXR1''@;'; put 'put ''cm4gJEkoYywiX19pZ25vcmVfbmdfem9uZV9fIil9KEQpKXJldHVybiBkLmludm9rZVRhc2soZix2LE0sRCk7dHJ5e3JldHVybiBTMyhjKSxkLmludm9rZVRhc2soZix2LE0sRCl9ZmluYWxseXsoYy5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uJiYiZXZlbnRUYXNrIj09PXYu''@;'; put 'put ''dHlwZXx8Yy5zaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbikmJmwoKSxHSShjKX19LG9uSW52b2tlOihkLGgsZix2LE0sRCxVKT0+e3RyeXtyZXR1cm4gUzMoYyksZC5pbnZva2UoZix2LE0sRCxVKX1maW5hbGx5e2Muc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24mJiFj''@;'; put 'put ''LmNhbGxiYWNrU2NoZWR1bGVkJiYhZnVuY3Rpb24gZ1UoYyl7cmV0dXJuICRJKGMsIl9fc2NoZWR1bGVyX3RpY2tfXyIpfShEKSYmbCgpLEdJKGMpfX0sb25IYXNUYXNrOihkLGgsZix2KT0+e2QuaGFzVGFzayhmLHYpLGg9PT1mJiYoIm1pY3JvVGFzayI9PXYuY2hhbmdlPyhjLl9oYXNQZW5k''@;'; put 'put ''aW5nTWljcm90YXNrcz12Lm1pY3JvVGFzayxjZihjKSx3TShjKSk6Im1hY3JvVGFzayI9PXYuY2hhbmdlJiYoYy5oYXNQZW5kaW5nTWFjcm90YXNrcz12Lm1hY3JvVGFzaykpfSxvbkhhbmRsZUVycm9yOihkLGgsZix2KT0+KGQuaGFuZGxlRXJyb3IoZix2KSxjLnJ1bk91dHNpZGVBbmd1bGFy''@;'; put 'put ''KCgpPT5jLm9uRXJyb3IuZW1pdCh2KSksITEpfSl9KHYpfXN0YXRpYyBpc0luQW5ndWxhclpvbmUoKXtyZXR1cm4gdHlwZW9mIFpvbmU8InUiJiYhMD09PVpvbmUuY3VycmVudC5nZXQoX00pfXN0YXRpYyBhc3NlcnRJbkFuZ3VsYXJab25lKCl7aWYoIVhhLmlzSW5Bbmd1bGFyWm9uZSgpKXRo''@;'; put 'put ''cm93IG5ldyBQcig5MDksITEpfXN0YXRpYyBhc3NlcnROb3RJbkFuZ3VsYXJab25lKCl7aWYoWGEuaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IFByKDkwOSwhMSl9cnVuKGwsYSxkKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuKGwsYSxkKX1ydW5UYXNrKGwsYSxkLGgpe2NvbnN0IGY9dGhp''@;'; put 'put ''cy5faW5uZXIsdj1mLnNjaGVkdWxlRXZlbnRUYXNrKCJOZ1pvbmVFdmVudDogIitoLGwsY2IsanAsanApO3RyeXtyZXR1cm4gZi5ydW5UYXNrKHYsYSxkKX1maW5hbGx5e2YuY2FuY2VsVGFzayh2KX19cnVuR3VhcmRlZChsLGEsZCl7cmV0dXJuIHRoaXMuX2lubmVyLnJ1bkd1YXJkZWQobCxh''@;'; put 'put ''LGQpfXJ1bk91dHNpZGVBbmd1bGFyKGwpe3JldHVybiB0aGlzLl9vdXRlci5ydW4obCl9fWNvbnN0IGNiPXt9O2Z1bmN0aW9uIHdNKGMpe2lmKDA9PWMuX25lc3RpbmcmJiFjLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYhYy5pc1N0YWJsZSl0cnl7Yy5fbmVzdGluZysrLGMub25NaWNyb3Rhc2tF''@;'; put 'put ''bXB0eS5lbWl0KG51bGwpfWZpbmFsbHl7aWYoYy5fbmVzdGluZy0tLCFjLmhhc1BlbmRpbmdNaWNyb3Rhc2tzKXRyeXtjLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5jLm9uU3RhYmxlLmVtaXQobnVsbCkpfWZpbmFsbHl7Yy5pc1N0YWJsZT0hMH19fWZ1bmN0aW9uIGNmKGMpe2MuaGFzUGVuZGlu''@;'; put 'put ''Z01pY3JvdGFza3M9ISEoYy5faGFzUGVuZGluZ01pY3JvdGFza3N8fChjLnNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb258fGMuc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24pJiYhMD09PWMuY2FsbGJhY2tTY2hlZHVsZWQpfWZ1bmN0aW9uIFMzKGMpe2MuX25lc3Rp''@;'; put 'put ''bmcrKyxjLmlzU3RhYmxlJiYoYy5pc1N0YWJsZT0hMSxjLm9uVW5zdGFibGUuZW1pdChudWxsKSl9ZnVuY3Rpb24gR0koYyl7Yy5fbmVzdGluZy0tLHdNKGMpfWNsYXNzIENNe2hhc1BlbmRpbmdNaWNyb3Rhc2tzPSExO2hhc1BlbmRpbmdNYWNyb3Rhc2tzPSExO2lzU3RhYmxlPSEwO29uVW5z''@;'; put 'put ''dGFibGU9bmV3IFhyO29uTWljcm90YXNrRW1wdHk9bmV3IFhyO29uU3RhYmxlPW5ldyBYcjtvbkVycm9yPW5ldyBYcjtydW4obCxhLGQpe3JldHVybiBsLmFwcGx5KGEsZCl9cnVuR3VhcmRlZChsLGEsZCl7cmV0dXJuIGwuYXBwbHkoYSxkKX1ydW5PdXRzaWRlQW5ndWxhcihsKXtyZXR1cm4g''@;'; put 'put ''bCgpfXJ1blRhc2sobCxhLGQsaCl7cmV0dXJuIGwuYXBwbHkoYSxkKX19ZnVuY3Rpb24gJEkoYyxsKXtyZXR1cm4hKCFBcnJheS5pc0FycmF5KGMpfHwxIT09Yy5sZW5ndGgpJiYhMD09PWNbMF0/LmRhdGE/LltsXX1jbGFzcyBlMntfY29uc29sZT1jb25zb2xlO2hhbmRsZUVycm9yKGwpe3Ro''@;'; put 'put ''aXMuX2NvbnNvbGUuZXJyb3IoIkVSUk9SIixsKX19Y29uc3QgS0k9bmV3IGpuKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT57Y29uc3QgYz1KbihYYSksbD1KbihlMik7cmV0dXJuIGE9PmMucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmwuaGFuZGxlRXJyb3IoYSkpfX0pO2Z1bmN0''@;'; put 'put ''aW9uIHFJKGMsbCl7cmV0dXJuIHRpKGMsbCl9Y29uc3QgeVU9KHFJLnJlcXVpcmVkPWZ1bmN0aW9uIHZVKGMpe3JldHVybiB0aShSYSxjKX0scUkpO2Z1bmN0aW9uIGJVKCl7cmV0dXJuIG1tKHJzKCksS3IoKSl9ZnVuY3Rpb24gbW0oYyxsKXtyZXR1cm4gbmV3IG5hKHB0KGMsbCkpfWxldCBu''@;'; put 'put ''YT0oKCk9PmNsYXNzIGN7bmF0aXZlRWxlbWVudDtjb25zdHJ1Y3RvcihhKXt0aGlzLm5hdGl2ZUVsZW1lbnQ9YX1zdGF0aWMgX19OR19FTEVNRU5UX0lEX189YlV9KSgpO2Z1bmN0aW9uIEpJKGMpe3JldHVybiBjIGluc3RhbmNlb2YgbmE/Yy5uYXRpdmVFbGVtZW50OmN9ZnVuY3Rpb24gbmgo''@;'; put 'put ''YyxsKXtjb25zdCBhPWZ1bmN0aW9uIERlKGMsbCl7Y29uc3QgYT1PYmplY3QuY3JlYXRlKHZ0KTthLnZhbHVlPWMsdm9pZCAwIT09bCYmKGEuZXF1YWw9bCk7Y29uc3QgZD0oKT0+KGcoYSksYS52YWx1ZSk7cmV0dXJuIGRbZ2VdPWEsZH0oYyxsPy5lcXVhbCksZD1hW2dlXTtyZXR1cm4gYS5z''@;'; put 'put ''ZXQ9aD0+cnQoZCxoKSxhLnVwZGF0ZT1oPT5mdW5jdGlvbiBRZShjLGwpe1QoKXx8UmUoYykscnQoYyxsKGMudmFsdWUpKX0oZCxoKSxhLmFzUmVhZG9ubHk9dWIuYmluZChhKSxhfWZ1bmN0aW9uIHViKCl7Y29uc3QgYz10aGlzW2dlXTtpZih2b2lkIDA9PT1jLnJlYWRvbmx5Rm4pe2NvbnN0''@;'; put 'put ''IGw9KCk9PnRoaXMoKTtsW2dlXT1jLGMucmVhZG9ubHlGbj1sfXJldHVybiBjLnJlYWRvbmx5Rm59ZnVuY3Rpb24gZVIoYyl7cmV0dXJuIGZ1bmN0aW9uIFFJKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjJiZ2b2lkIDAhPT1jW2dlXX0oYykmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLnNl''@;'; put 'put ''dH1mdW5jdGlvbiBfVSgpe3JldHVybiB0aGlzLl9yZXN1bHRzW1N5bWJvbC5pdGVyYXRvcl0oKX1jbGFzcyBEZ3tfZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk7ZGlydHk9ITA7X29uRGlydHk9dm9pZCAwO19yZXN1bHRzPVtdO19jaGFuZ2VzRGV0ZWN0ZWQ9ITE7X2NoYW5nZXM9dm9pZCAwO2xl''@;'; put 'put ''bmd0aD0wO2ZpcnN0PXZvaWQgMDtsYXN0PXZvaWQgMDtnZXQgY2hhbmdlcygpe3JldHVybiB0aGlzLl9jaGFuZ2VzPz89bmV3IHVyfWNvbnN0cnVjdG9yKGw9ITEpe3RoaXMuX2VtaXREaXN0aW5jdENoYW5nZXNPbmx5PWx9Z2V0KGwpe3JldHVybiB0aGlzLl9yZXN1bHRzW2xdfW1hcChsKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fcmVzdWx0cy5tYXAobCl9ZmlsdGVyKGwpe3JldHVybiB0aGlzLl9yZXN1bHRzLmZpbHRlcihsKX1maW5kKGwpe3JldHVybiB0aGlzLl9yZXN1bHRzLmZpbmQobCl9cmVkdWNlKGwsYSl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMucmVkdWNlKGwsYSl9Zm9yRWFjaChsKXt0aGlz''@;'; put 'put ''Ll9yZXN1bHRzLmZvckVhY2gobCl9c29tZShsKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5zb21lKGwpfXRvQXJyYXkoKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5zbGljZSgpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMudG9TdHJpbmcoKX1yZXNldChsLGEpe3RoaXMuZGlydHk9ITE7''@;'; put 'put ''Y29uc3QgZD1mdW5jdGlvbiBmMChjKXtyZXR1cm4gYy5mbGF0KE51bWJlci5QT1NJVElWRV9JTkZJTklUWSl9KGwpOyh0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWQ9IWZ1bmN0aW9uIFRTKGMsbCxhKXtpZihjLmxlbmd0aCE9PWwubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgZD0wO2Q8Yy5sZW5ndGg7''@;'; put 'put ''ZCsrKXtsZXQgaD1jW2RdLGY9bFtkXTtpZihhJiYoaD1hKGgpLGY9YShmKSksZiE9PWgpcmV0dXJuITF9cmV0dXJuITB9KHRoaXMuX3Jlc3VsdHMsZCxhKSkmJih0aGlzLl9yZXN1bHRzPWQsdGhpcy5sZW5ndGg9ZC5sZW5ndGgsdGhpcy5sYXN0PWRbdGhpcy5sZW5ndGgtMV0sdGhpcy5maXJz''@;'; put 'put ''dD1kWzBdKX1ub3RpZnlPbkNoYW5nZXMoKXt2b2lkIDAhPT10aGlzLl9jaGFuZ2VzJiYodGhpcy5fY2hhbmdlc0RldGVjdGVkfHwhdGhpcy5fZW1pdERpc3RpbmN0Q2hhbmdlc09ubHkpJiZ0aGlzLl9jaGFuZ2VzLm5leHQodGhpcyl9b25EaXJ0eShsKXt0aGlzLl9vbkRpcnR5PWx9c2V0RGly''@;'; put 'put ''dHkoKXt0aGlzLmRpcnR5PSEwLHRoaXMuX29uRGlydHk/LigpfWRlc3Ryb3koKXt2b2lkIDAhPT10aGlzLl9jaGFuZ2VzJiYodGhpcy5fY2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMuX2NoYW5nZXMudW5zdWJzY3JpYmUoKSl9W1N5bWJvbC5pdGVyYXRvcl09X1V9ZnVuY3Rpb24genAoYyl7cmV0''@;'; put 'put ''dXJuISgxMjgmfmMuZmxhZ3MpfXZhciB5bT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk9uUHVzaD0wXT0iT25QdXNoIixjW2MuRGVmYXVsdD0xXT0iRGVmYXVsdCIsY30oeW18fHt9KTtjb25zdCB0Mj1uZXcgTWFwO2xldCBpNz0wO2Z1bmN0aW9uIGRiKGMpe3QyLmRlbGV0ZShjWzE5XSl9Y29u''@;'; put 'put ''c3QgeE09Il9fbmdDb250ZXh0X18iO2Z1bmN0aW9uIEUxKGMsbCl7Z2MobCk/KGNbeE1dPWxbMTldLGZ1bmN0aW9uIENVKGMpe3QyLnNldChjWzE5XSxjKX0obCkpOmNbeE1dPWx9ZnVuY3Rpb24gY1IoYyl7cmV0dXJuIGRSKGNbMTJdKX1mdW5jdGlvbiB1UihjKXtyZXR1cm4gZFIoY1s0XSl9''@;'; put 'put ''ZnVuY3Rpb24gZFIoYyl7Zm9yKDtudWxsIT09YyYmIXZsKGMpOyljPWNbNF07cmV0dXJuIGN9bGV0IHBiO2Z1bmN0aW9uIG4yKCl7aWYodm9pZCAwIT09cGIpcmV0dXJuIHBiO2lmKHR5cGVvZiBkb2N1bWVudDwidSIpcmV0dXJuIGRvY3VtZW50O3Rocm93IG5ldyBQcigyMTAsITEpfWNvbnN0''@;'; put 'put ''IGRkPW5ldyBqbigiIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+Z2J9KSxnYj0ibmciLF9tPW5ldyBqbigiIiksdWw9bmV3IGpuKCIiLHtwcm92aWRlZEluOiJwbGF0Zm9ybSIsZmFjdG9yeTooKT0+InVua25vd24ifSksVDE9bmV3IGpuKCIiKSxyMj1uZXcgam4oIiIse3Byb3Zp''@;'; put 'put ''ZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pm4yKCkuYm9keT8ucXVlcnlTZWxlY3RvcigiW25nQ3NwTm9uY2VdIik/LmdldEF0dHJpYnV0ZSgibmdDc3BOb25jZSIpfHxudWxsfSksQ1I9bmV3IGpuKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4hMX0pO3ZhciBITT1mdW5jdGlv''@;'; put 'put ''bihjKXtyZXR1cm4gY1tjLkNIQU5HRV9ERVRFQ1RJT049MF09IkNIQU5HRV9ERVRFQ1RJT04iLGNbYy5BRlRFUl9ORVhUX1JFTkRFUj0xXT0iQUZURVJfTkVYVF9SRU5ERVIiLGN9KEhNfHx7fSk7Y29uc3QgQ209bmV3IGpuKCIiKSx4Uj1uZXcgU2V0O2Z1bmN0aW9uIEExKGMpe3hSLmhhcyhj''@;'; put 'put ''KXx8KHhSLmFkZChjKSxwZXJmb3JtYW5jZT8ubWFyaz8uKCJtYXJrX2ZlYXR1cmVfdXNhZ2UiLHtkZXRhaWw6e2ZlYXR1cmU6Y319KSl9bGV0IENiPSgoKT0+Y2xhc3MgY3t2aWV3O25vZGU7Y29uc3RydWN0b3IoYSxkKXt0aGlzLnZpZXc9YSx0aGlzLm5vZGU9ZH1zdGF0aWMgX19OR19FTEVN''@;'; put 'put ''RU5UX0lEX189TlV9KSgpO2Z1bmN0aW9uIE5VKCl7cmV0dXJuIG5ldyBDYihLcigpLHJzKCkpfXZhciBTbT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkVhcmx5UmVhZD0wXT0iRWFybHlSZWFkIixjW2MuV3JpdGU9MV09IldyaXRlIixjW2MuTWl4ZWRSZWFkV3JpdGU9Ml09Ik1peGVkUmVhZFdy''@;'; put 'put ''aXRlIixjW2MuUmVhZD0zXT0iUmVhZCIsY30oU218fHt9KTtsZXQgTk09KCgpPT57Y2xhc3MgY3tpbXBsPW51bGw7ZXhlY3V0ZSgpe3RoaXMuaW1wbD8uZXhlY3V0ZSgpfXN0YXRpYyBcdTAyNzVwcm92PWZyKHt0b2tlbjpjLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pm5ldyBjfSl9''@;'; put 'put ''cmV0dXJuIGN9KSgpO2NvbnN0IEVSPVtTbS5FYXJseVJlYWQsU20uV3JpdGUsU20uTWl4ZWRSZWFkV3JpdGUsU20uUmVhZF07bGV0IFRSPSgoKT0+e2NsYXNzIGN7bmdab25lPUpuKFhhKTtzY2hlZHVsZXI9Sm4oc2YpO2Vycm9ySGFuZGxlcj1KbihlMix7b3B0aW9uYWw6ITB9KTtzZXF1ZW5j''@;'; put 'put ''ZXM9bmV3IFNldDtkZWZlcnJlZFJlZ2lzdHJhdGlvbnM9bmV3IFNldDtleGVjdXRpbmc9ITE7Y29uc3RydWN0b3IoKXtKbihDbSx7b3B0aW9uYWw6ITB9KX1leGVjdXRlKCl7dGhpcy5leGVjdXRpbmc9ITA7Zm9yKGNvbnN0IGQgb2YgRVIpZm9yKGNvbnN0IGggb2YgdGhpcy5zZXF1ZW5jZXMp''@;'; put 'put ''aWYoIWguZXJyb3JlZE9yRGVzdHJveWVkJiZoLmhvb2tzW2RdKXRyeXtoLnBpcGVsaW5lZFZhbHVlPXRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT50aGlzLm1heWJlVHJhY2UoKCk9PigwLGguaG9va3NbZF0pKGgucGlwZWxpbmVkVmFsdWUpLGguc25hcHNob3QpKX1jYXRjaChm''@;'; put 'put ''KXtoLmVycm9yZWRPckRlc3Ryb3llZD0hMCx0aGlzLmVycm9ySGFuZGxlcj8uaGFuZGxlRXJyb3IoZil9dGhpcy5leGVjdXRpbmc9ITE7Zm9yKGNvbnN0IGQgb2YgdGhpcy5zZXF1ZW5jZXMpZC5hZnRlclJ1bigpLGQub25jZSYmKHRoaXMuc2VxdWVuY2VzLmRlbGV0ZShkKSxkLmRlc3Ryb3ko''@;'; put 'put ''KSk7Zm9yKGNvbnN0IGQgb2YgdGhpcy5kZWZlcnJlZFJlZ2lzdHJhdGlvbnMpdGhpcy5zZXF1ZW5jZXMuYWRkKGQpO3RoaXMuZGVmZXJyZWRSZWdpc3RyYXRpb25zLnNpemU+MCYmdGhpcy5zY2hlZHVsZXIubm90aWZ5KDcpLHRoaXMuZGVmZXJyZWRSZWdpc3RyYXRpb25zLmNsZWFyKCl9cmVn''@;'; put 'put ''aXN0ZXIoYSl7Y29uc3R7dmlldzpkfT1hO3ZvaWQgMCE9PWQ/KChkWzI1XT8/PVtdKS5wdXNoKGEpLGRtKGQpLGRbMl18PTgxOTIpOnRoaXMuZXhlY3V0aW5nP3RoaXMuZGVmZXJyZWRSZWdpc3RyYXRpb25zLmFkZChhKTp0aGlzLmFkZFNlcXVlbmNlKGEpfWFkZFNlcXVlbmNlKGEpe3RoaXMu''@;'; put 'put ''c2VxdWVuY2VzLmFkZChhKSx0aGlzLnNjaGVkdWxlci5ub3RpZnkoNyl9dW5yZWdpc3RlcihhKXt0aGlzLmV4ZWN1dGluZyYmdGhpcy5zZXF1ZW5jZXMuaGFzKGEpPyhhLmVycm9yZWRPckRlc3Ryb3llZD0hMCxhLnBpcGVsaW5lZFZhbHVlPXZvaWQgMCxhLm9uY2U9ITApOih0aGlzLnNlcXVl''@;'; put 'put ''bmNlcy5kZWxldGUoYSksdGhpcy5kZWZlcnJlZFJlZ2lzdHJhdGlvbnMuZGVsZXRlKGEpKX1tYXliZVRyYWNlKGEsZCl7cmV0dXJuIGQ/ZC5ydW4oSE0uQUZURVJfTkVYVF9SRU5ERVIsYSk6YSgpfXN0YXRpYyBcdTAyNzVwcm92PWZyKHt0b2tlbjpjLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rv''@;'; put 'put ''cnk6KCk9Pm5ldyBjfSl9cmV0dXJuIGN9KSgpO2NsYXNzIEFSe2ltcGw7aG9va3M7dmlldztvbmNlO3NuYXBzaG90O2Vycm9yZWRPckRlc3Ryb3llZD0hMTtwaXBlbGluZWRWYWx1ZT12b2lkIDA7dW5yZWdpc3Rlck9uRGVzdHJveTtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdj1udWxsKXt0aGlz''@;'; put 'put ''LmltcGw9bCx0aGlzLmhvb2tzPWEsdGhpcy52aWV3PWQsdGhpcy5vbmNlPWgsdGhpcy5zbmFwc2hvdD12LHRoaXMudW5yZWdpc3Rlck9uRGVzdHJveT1mPy5vbkRlc3Ryb3koKCk9PnRoaXMuZGVzdHJveSgpKX1hZnRlclJ1bigpe3RoaXMuZXJyb3JlZE9yRGVzdHJveWVkPSExLHRoaXMucGlw''@;'; put 'put ''ZWxpbmVkVmFsdWU9dm9pZCAwLHRoaXMuc25hcHNob3Q/LmRpc3Bvc2UoKSx0aGlzLnNuYXBzaG90PW51bGx9ZGVzdHJveSgpe3RoaXMuaW1wbC51bnJlZ2lzdGVyKHRoaXMpLHRoaXMudW5yZWdpc3Rlck9uRGVzdHJveT8uKCk7Y29uc3QgbD10aGlzLnZpZXc/LlsyNV07bCYmKHRoaXMudmll''@;'; put 'put ''d1syNV09bC5maWx0ZXIoYT0+YSE9PXRoaXMpKX19ZnVuY3Rpb24gTW0oYyxsKXshbD8uaW5qZWN0b3ImJmZ1bmN0aW9uIFJwKGMpe2lmKCFTZygpKXRocm93IG5ldyBQcigtMjAzLCExKX0oKTtjb25zdCBhPWw/LmluamVjdG9yPz9KbihZbyk7cmV0dXJuIEExKCJOZ0FmdGVyTmV4dFJlbmRl''@;'; put 'put ''ciIpLGZ1bmN0aW9uIERSKGMsbCxhLGQpe2NvbnN0IGg9bC5nZXQoTk0pO2guaW1wbD8/PWwuZ2V0KFRSKTtjb25zdCBmPWwuZ2V0KENtLG51bGwse29wdGlvbmFsOiEwfSksdj1hPy5waGFzZT8/U20uTWl4ZWRSZWFkV3JpdGUsTT0hMCE9PWE/Lm1hbnVhbENsZWFudXA/bC5nZXQoTTEpOm51''@;'; put 'put ''bGwsRD1sLmdldChDYixudWxsLHtvcHRpb25hbDohMH0pLFU9bmV3IEFSKGguaW1wbCxmdW5jdGlvbiBWVShjLGwpe2lmKGMgaW5zdGFuY2VvZiBGdW5jdGlvbil7Y29uc3QgYT1bdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwXTtyZXR1cm4gYVtsXT1jLGF9cmV0dXJuW2MuZWFybHlSZWFk''@;'; put 'put ''LGMud3JpdGUsYy5taXhlZFJlYWRXcml0ZSxjLnJlYWRdfShjLHYpLEQ/LnZpZXcsZCxNLGY/LnNuYXBzaG90KG51bGwpKTtyZXR1cm4gaC5pbXBsLnJlZ2lzdGVyKFUpLFV9KGMsYSxsLCEwKX1mdW5jdGlvbiBhTChjLGwpe2NvbnN0IGE9Yy5jb250ZW50UXVlcmllcztpZihudWxsIT09YSl7''@;'; put 'put ''Y29uc3QgZD1fZShudWxsKTt0cnl7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aDtoKz0yKXtjb25zdCB2PWFbaCsxXTtpZigtMSE9PXYpe2NvbnN0IE09Yy5kYXRhW3ZdO3F5KGFbaF0pLE0uY29udGVudFF1ZXJpZXMoMixsW3ZdLHYpfX19ZmluYWxseXtfZShkKX19fWZ1bmN0aW9uIE9iKGMsbCxh''@;'; put 'put ''KXtxeSgwKTtjb25zdCBkPV9lKG51bGwpO3RyeXtsKGMsYSl9ZmluYWxseXtfZShkKX19ZnVuY3Rpb24gcngoYyxsLGEpe2lmKEdoKGwpKXtjb25zdCBkPV9lKG51bGwpO3RyeXtjb25zdCBmPWwuZGlyZWN0aXZlRW5kO2ZvcihsZXQgdj1sLmRpcmVjdGl2ZVN0YXJ0O3Y8Zjt2Kyspe2NvbnN0''@;'; put 'put ''IE09Yy5kYXRhW3ZdO00uY29udGVudFF1ZXJpZXMmJk0uY29udGVudFF1ZXJpZXMoMSxhW3ZdLHYpfX1maW5hbGx5e19lKGQpfX19dmFyIGZkPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuRW11bGF0ZWQ9MF09IkVtdWxhdGVkIixjW2MuTm9uZT0yXT0iTm9uZSIsY1tjLlNoYWRvd0RvbT0zXT0i''@;'; put 'put ''U2hhZG93RG9tIixjfShmZHx8e30pO2xldCBIYixOYjtmdW5jdGlvbiBEbShjKXtyZXR1cm4gZnVuY3Rpb24gdUwoKXtpZih2b2lkIDA9PT1IYiYmKEhiPW51bGwsQmEudHJ1c3RlZFR5cGVzKSl0cnl7SGI9QmEudHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSgiYW5ndWxhciIse2NyZWF0ZUhU''@;'; put 'put ''TUw6Yz0+YyxjcmVhdGVTY3JpcHQ6Yz0+YyxjcmVhdGVTY3JpcHRVUkw6Yz0+Y30pfWNhdGNoe31yZXR1cm4gSGJ9KCk/LmNyZWF0ZUhUTUwoYyl8fGN9ZnVuY3Rpb24gYXgoKXtpZih2b2lkIDA9PT1OYiYmKE5iPW51bGwsQmEudHJ1c3RlZFR5cGVzKSl0cnl7TmI9QmEudHJ1c3RlZFR5cGVz''@;'; put 'put ''LmNyZWF0ZVBvbGljeSgiYW5ndWxhciN1bnNhZmUtYnlwYXNzIix7Y3JlYXRlSFRNTDpjPT5jLGNyZWF0ZVNjcmlwdDpjPT5jLGNyZWF0ZVNjcmlwdFVSTDpjPT5jfSl9Y2F0Y2h7fXJldHVybiBOYn1mdW5jdGlvbiBkTChjKXtyZXR1cm4gYXgoKT8uY3JlYXRlSFRNTChjKXx8Y31mdW5jdGlv''@;'; put 'put ''biBzeChjKXtyZXR1cm4gYXgoKT8uY3JlYXRlU2NyaXB0VVJMKGMpfHxjfWNsYXNzIGhMe2NoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk7Y29uc3RydWN0b3IobCl7dGhpcy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5PWx9dG9TdHJpbmcoKXtyZXR1''@;'; put 'put ''cm5gU2FmZVZhbHVlIG11c3QgdXNlIFtwcm9wZXJ0eV09YmluZGluZzogJHt0aGlzLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHl9IChzZWUgJHt2MX0pYH19ZnVuY3Rpb24gWHAoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBoTD9jLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxp''@;'; put 'put ''Y2F0aW9uU2VjdXJpdHk6Y31mdW5jdGlvbiB3NyhjLGwpe2NvbnN0IGE9ZnVuY3Rpb24geVooYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBoTCYmYy5nZXRUeXBlTmFtZSgpfHxudWxsfShjKTtpZihudWxsIT1hJiZhIT09bCl7aWYoIlJlc291cmNlVVJMIj09PWEmJiJVUkwiPT09bClyZXR1cm4h''@;'; put 'put ''MDt0aHJvdyBuZXcgRXJyb3IoYFJlcXVpcmVkIGEgc2FmZSAke2x9LCBnb3QgYSAke2F9IChzZWUgJHt2MX0pYCl9cmV0dXJuIGE9PT1sfWNsYXNzIGJae2luZXJ0RG9jdW1lbnRIZWxwZXI7Y29uc3RydWN0b3IobCl7dGhpcy5pbmVydERvY3VtZW50SGVscGVyPWx9Z2V0SW5lcnRCb2R5RWxl''@;'; put 'put ''bWVudChsKXtsPSI8Ym9keT48cmVtb3ZlPjwvcmVtb3ZlPiIrbDt0cnl7Y29uc3QgYT0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhEbShsKSwidGV4dC9odG1sIikuYm9keTtyZXR1cm4gbnVsbD09PWE/dGhpcy5pbmVydERvY3VtZW50SGVscGVyLmdldEluZXJ0Qm9k''@;'; put 'put ''eUVsZW1lbnQobCk6KGEuZmlyc3RDaGlsZD8ucmVtb3ZlKCksYSl9Y2F0Y2h7cmV0dXJuIG51bGx9fX1jbGFzcyBfWntkZWZhdWx0RG9jO2luZXJ0RG9jdW1lbnQ7Y29uc3RydWN0b3IobCl7dGhpcy5kZWZhdWx0RG9jPWwsdGhpcy5pbmVydERvY3VtZW50PXRoaXMuZGVmYXVsdERvYy5pbXBs''@;'; put 'put ''ZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoInNhbml0aXphdGlvbi1pbmVydCIpfWdldEluZXJ0Qm9keUVsZW1lbnQobCl7Y29uc3QgYT10aGlzLmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtyZXR1cm4gYS5pbm5lckhUTUw9RG0obCksYX19Y29uc3Qgd1o9''@;'; put 'put ''L14oPyFqYXZhc2NyaXB0OikoPzpbYS16MC05Ky4tXSs6fFteJjpcLz8jXSooPzpbXC8/I118JCkpL2k7ZnVuY3Rpb24gY3goYyl7cmV0dXJuKGM9U3RyaW5nKGMpKS5tYXRjaCh3Wik/YzoidW5zYWZlOiIrY31mdW5jdGlvbiB4MyhjKXtjb25zdCBsPXt9O2Zvcihjb25zdCBhIG9mIGMuc3Bs''@;'; put 'put ''aXQoIiwiKSlsW2FdPSEwO3JldHVybiBsfWZ1bmN0aW9uIEM3KC4uLmMpe2NvbnN0IGw9e307Zm9yKGNvbnN0IGEgb2YgYylmb3IoY29uc3QgZCBpbiBhKWEuaGFzT3duUHJvcGVydHkoZCkmJihsW2RdPSEwKTtyZXR1cm4gbH1jb25zdCBtTD14MygiYXJlYSxicixjb2wsaHIsaW1nLHdiciIp''@;'; put 'put ''LHV4PXgzKCJjb2xncm91cCxkZCxkdCxsaSxwLHRib2R5LHRkLHRmb290LHRoLHRoZWFkLHRyIiksZHg9eDMoInJwLHJ0IiksaHg9QzcobUwsQzcodXgseDMoImFkZHJlc3MsYXJ0aWNsZSxhc2lkZSxibG9ja3F1b3RlLGNhcHRpb24sY2VudGVyLGRlbCxkZXRhaWxzLGRpYWxvZyxkaXIsZGl2''@;'; put 'put ''LGRsLGZpZ3VyZSxmaWdjYXB0aW9uLGZvb3RlcixoMSxoMixoMyxoNCxoNSxoNixoZWFkZXIsaGdyb3VwLGhyLGlucyxtYWluLG1hcCxtZW51LG5hdixvbCxwcmUsc2VjdGlvbixzdW1tYXJ5LHRhYmxlLHVsIikpLEM3KGR4LHgzKCJhLGFiYnIsYWNyb255bSxhdWRpbyxiLGJkaSxiZG8sYmln''@;'; put 'put ''LGJyLGNpdGUsY29kZSxkZWwsZGZuLGVtLGZvbnQsaSxpbWcsaW5zLGtiZCxsYWJlbCxtYXAsbWFyayxwaWN0dXJlLHEscnVieSxycCxydCxzLHNhbXAsc21hbGwsc291cmNlLHNwYW4sc3RyaWtlLHN0cm9uZyxzdWIsc3VwLHRpbWUsdHJhY2ssdHQsdSx2YXIsdmlkZW8iKSksQzcoZHgsdXgp''@;'; put 'put ''KSxmeD14MygiYmFja2dyb3VuZCxjaXRlLGhyZWYsaXRlbXR5cGUsbG9uZ2Rlc2MscG9zdGVyLHNyYyx4bGluazpocmVmIiksdkw9QzcoZngseDMoImFiYnIsYWNjZXNza2V5LGFsaWduLGFsdCxhdXRvcGxheSxheGlzLGJnY29sb3IsYm9yZGVyLGNlbGxwYWRkaW5nLGNlbGxzcGFjaW5nLGNs''@;'; put 'put ''YXNzLGNsZWFyLGNvbG9yLGNvbHMsY29sc3Bhbixjb21wYWN0LGNvbnRyb2xzLGNvb3JkcyxkYXRldGltZSxkZWZhdWx0LGRpcixkb3dubG9hZCxmYWNlLGhlYWRlcnMsaGVpZ2h0LGhpZGRlbixocmVmbGFuZyxoc3BhY2UsaXNtYXAsaXRlbXNjb3BlLGl0ZW1wcm9wLGtpbmQsbGFiZWwsbGFu''@;'; put 'put ''ZyxsYW5ndWFnZSxsb29wLG1lZGlhLG11dGVkLG5vaHJlZixub3dyYXAsb3BlbixwcmVsb2FkLHJlbCxyZXYscm9sZSxyb3dzLHJvd3NwYW4scnVsZXMsc2NvcGUsc2Nyb2xsaW5nLHNoYXBlLHNpemUsc2l6ZXMsc3BhbixzcmNsYW5nLHNyY3NldCxzdGFydCxzdW1tYXJ5LHRhYmluZGV4LHRh''@;'; put 'put ''cmdldCx0aXRsZSx0cmFuc2xhdGUsdHlwZSx1c2VtYXAsdmFsaWduLHZhbHVlLHZzcGFjZSx3aWR0aCIpLHgzKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQsYXJpYS1hdG9taWMsYXJpYS1hdXRvY29tcGxldGUsYXJpYS1idXN5LGFyaWEtY2hlY2tlZCxhcmlhLWNvbGNvdW50LGFyaWEtY29saW5k''@;'; put 'put ''ZXgsYXJpYS1jb2xzcGFuLGFyaWEtY29udHJvbHMsYXJpYS1jdXJyZW50LGFyaWEtZGVzY3JpYmVkYnksYXJpYS1kZXRhaWxzLGFyaWEtZGlzYWJsZWQsYXJpYS1kcm9wZWZmZWN0LGFyaWEtZXJyb3JtZXNzYWdlLGFyaWEtZXhwYW5kZWQsYXJpYS1mbG93dG8sYXJpYS1ncmFiYmVkLGFyaWEt''@;'; put 'put ''aGFzcG9wdXAsYXJpYS1oaWRkZW4sYXJpYS1pbnZhbGlkLGFyaWEta2V5c2hvcnRjdXRzLGFyaWEtbGFiZWwsYXJpYS1sYWJlbGxlZGJ5LGFyaWEtbGV2ZWwsYXJpYS1saXZlLGFyaWEtbW9kYWwsYXJpYS1tdWx0aWxpbmUsYXJpYS1tdWx0aXNlbGVjdGFibGUsYXJpYS1vcmllbnRhdGlvbixh''@;'; put 'put ''cmlhLW93bnMsYXJpYS1wbGFjZWhvbGRlcixhcmlhLXBvc2luc2V0LGFyaWEtcHJlc3NlZCxhcmlhLXJlYWRvbmx5LGFyaWEtcmVsZXZhbnQsYXJpYS1yZXF1aXJlZCxhcmlhLXJvbGVkZXNjcmlwdGlvbixhcmlhLXJvd2NvdW50LGFyaWEtcm93aW5kZXgsYXJpYS1yb3dzcGFuLGFyaWEtc2Vs''@;'; put 'put ''ZWN0ZWQsYXJpYS1zZXRzaXplLGFyaWEtc29ydCxhcmlhLXZhbHVlbWF4LGFyaWEtdmFsdWVtaW4sYXJpYS12YWx1ZW5vdyxhcmlhLXZhbHVldGV4dCIpKSx4Wj14Mygic2NyaXB0LHN0eWxlLHRlbXBsYXRlIik7Y2xhc3MgRVp7c2FuaXRpemVkU29tZXRoaW5nPSExO2J1Zj1bXTtzYW5pdGl6''@;'; put 'put ''ZUNoaWxkcmVuKGwpe2xldCBhPWwuZmlyc3RDaGlsZCxkPSEwLGg9W107Zm9yKDthOylpZihhLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREU/ZD10aGlzLnN0YXJ0RWxlbWVudChhKTphLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREU/dGhpcy5jaGFycyhhLm5vZGVWYWx1ZSk6dGhpcy5z''@;'; put 'put ''YW5pdGl6ZWRTb21ldGhpbmc9ITAsZCYmYS5maXJzdENoaWxkKWgucHVzaChhKSxhPWJMKGEpO2Vsc2UgZm9yKDthOyl7YS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZ0aGlzLmVuZEVsZW1lbnQoYSk7bGV0IGY9eUwoYSk7aWYoZil7YT1mO2JyZWFrfWE9aC5wb3AoKX1yZXR1cm4g''@;'; put 'put ''dGhpcy5idWYuam9pbigiIil9c3RhcnRFbGVtZW50KGwpe2NvbnN0IGE9X0wobCkudG9Mb3dlckNhc2UoKTtpZighaHguaGFzT3duUHJvcGVydHkoYSkpcmV0dXJuIHRoaXMuc2FuaXRpemVkU29tZXRoaW5nPSEwLCF4Wi5oYXNPd25Qcm9wZXJ0eShhKTt0aGlzLmJ1Zi5wdXNoKCI8IiksdGhp''@;'; put 'put ''cy5idWYucHVzaChhKTtjb25zdCBkPWwuYXR0cmlidXRlcztmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grKyl7Y29uc3QgZj1kLml0ZW0oaCksdj1mLm5hbWUsTT12LnRvTG93ZXJDYXNlKCk7aWYoIXZMLmhhc093blByb3BlcnR5KE0pKXt0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMDtjb250''@;'; put 'put ''aW51ZX1sZXQgRD1mLnZhbHVlO2Z4W01dJiYoRD1jeChEKSksdGhpcy5idWYucHVzaCgiICIsdiwnPSInLFNMKEQpLCciJyl9cmV0dXJuIHRoaXMuYnVmLnB1c2goIj4iKSwhMH1lbmRFbGVtZW50KGwpe2NvbnN0IGE9X0wobCkudG9Mb3dlckNhc2UoKTtoeC5oYXNPd25Qcm9wZXJ0eShhKSYm''@;'; put 'put ''IW1MLmhhc093blByb3BlcnR5KGEpJiYodGhpcy5idWYucHVzaCgiPC8iKSx0aGlzLmJ1Zi5wdXNoKGEpLHRoaXMuYnVmLnB1c2goIj4iKSl9Y2hhcnMobCl7dGhpcy5idWYucHVzaChTTChsKSl9fWZ1bmN0aW9uIHlMKGMpe2NvbnN0IGw9Yy5uZXh0U2libGluZztpZihsJiZjIT09bC5wcmV2''@;'; put 'put ''aW91c1NpYmxpbmcpdGhyb3cgd0wobCk7cmV0dXJuIGx9ZnVuY3Rpb24gYkwoYyl7Y29uc3QgbD1jLmZpcnN0Q2hpbGQ7aWYobCYmZnVuY3Rpb24gVFooYyxsKXtyZXR1cm4oYy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihsKSZOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWSkh''@;'; put 'put ''PT1Ob2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWX0oYyxsKSl0aHJvdyB3TChsKTtyZXR1cm4gbH1mdW5jdGlvbiBfTChjKXtjb25zdCBsPWMubm9kZU5hbWU7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBsP2w6IkZPUk0ifWZ1bmN0aW9uIHdMKGMpe3JldHVybiBuZXcgRXJyb3Io''@;'; put 'put ''YEZhaWxlZCB0byBzYW5pdGl6ZSBodG1sIGJlY2F1c2UgdGhlIGVsZW1lbnQgaXMgY2xvYmJlcmVkOiAke2Mub3V0ZXJIVE1MfWApfWNvbnN0IEFaPS9bXHVEODAwLVx1REJGRl1bXHVEQzAwLVx1REZGRl0vZyxDTD0vKFteXCMtfiB8IV0pL2c7ZnVuY3Rpb24gU0woYyl7cmV0dXJuIGMucmVw''@;'; put 'put ''bGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoQVosZnVuY3Rpb24obCl7cmV0dXJuIiYjIisoMTAyNCoobC5jaGFyQ29kZUF0KDApLTU1Mjk2KSsobC5jaGFyQ29kZUF0KDEpLTU2MzIwKSs2NTUzNikrIjsifSkucmVwbGFjZShDTCxmdW5jdGlvbihsKXtyZXR1cm4iJiMiK2wuY2hhckNvZGVB''@;'; put 'put ''dCgwKSsiOyJ9KS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKX1sZXQgVmI7ZnVuY3Rpb24gcHgoYyl7cmV0dXJuImNvbnRlbnQiaW4gYyYmZnVuY3Rpb24gRFooYyl7cmV0dXJuIGMubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmIlRFTVBMQVRFIj09PWMu''@;'; put 'put ''bm9kZU5hbWV9KGMpP2MuY29udGVudDpudWxsfWNvbnN0IElaPS9ePnxeLT58PCEtLXwtLT58LS0hPnw8IS0kL2csUlo9Lyg8fD4pL2c7ZnVuY3Rpb24gQmIoYyxsKXtyZXR1cm4gYy5jcmVhdGVDb21tZW50KGZ1bmN0aW9uIHhMKGMpe3JldHVybiBjLnJlcGxhY2UoSVosbD0+bC5yZXBsYWNl''@;'; put 'put ''KFJaLCJcdTIwMGIkMVx1MjAwYiIpKX0obCkpfWZ1bmN0aW9uIGpiKGMsbCxhKXtyZXR1cm4gYy5jcmVhdGVFbGVtZW50KGwsYSl9ZnVuY3Rpb24gcXAoYyxsLGEsZCxoKXtjLmluc2VydEJlZm9yZShsLGEsZCxoKX1mdW5jdGlvbiBteChjLGwsYSl7Yy5hcHBlbmRDaGlsZChsLGEpfWZ1bmN0''@;'; put 'put ''aW9uIHZ4KGMsbCxhLGQsaCl7bnVsbCE9PWQ/cXAoYyxsLGEsZCxoKTpteChjLGwsYSl9ZnVuY3Rpb24gRUwoYyxsLGEpe2NvbnN0e21lcmdlZEF0dHJzOmQsY2xhc3NlczpoLHN0eWxlczpmfT1hO251bGwhPT1kJiZmdW5jdGlvbiBXOChjLGwsYSl7bGV0IGQ9MDtmb3IoO2Q8YS5sZW5ndGg7''@;'; put 'put ''KXtjb25zdCBoPWFbZF07aWYoIm51bWJlciI9PXR5cGVvZiBoKXtpZigwIT09aClicmVhaztkKys7Y29uc3QgZj1hW2QrK10sdj1hW2QrK10sTT1hW2QrK107Yy5zZXRBdHRyaWJ1dGUobCx2LE0sZil9ZWxzZXtjb25zdCBmPWgsdj1hWysrZF07T0koZik/Yy5zZXRQcm9wZXJ0eShsLGYsdik6''@;'; put 'put ''Yy5zZXRBdHRyaWJ1dGUobCxmLHYpLGQrK319fShjLGwsZCksbnVsbCE9PWgmJmZ1bmN0aW9uIHl4KGMsbCxhKXsiIj09PWE/Yy5yZW1vdmVBdHRyaWJ1dGUobCwiY2xhc3MiKTpjLnNldEF0dHJpYnV0ZShsLCJjbGFzcyIsYSl9KGMsbCxoKSxudWxsIT09ZiYmZnVuY3Rpb24gUm0oYyxsLGEp''@;'; put 'put ''e2Muc2V0QXR0cmlidXRlKGwsInN0eWxlIixhKX0oYyxsLGYpfXZhciBMbT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5PTkU9MF09Ik5PTkUiLGNbYy5IVE1MPTFdPSJIVE1MIixjW2MuU1RZTEU9Ml09IlNUWUxFIixjW2MuU0NSSVBUPTNdPSJTQ1JJUFQiLGNbYy5VUkw9NF09IlVSTCIsY1tj''@;'; put 'put ''LlJFU09VUkNFX1VSTD01XT0iUkVTT1VSQ0VfVVJMIixjfShMbXx8e30pO2Z1bmN0aW9uIE9nKGMpe2NvbnN0IGw9eDcoKTtyZXR1cm4gbD9kTChsLnNhbml0aXplKExtLkhUTUwsYyl8fCIiKTp3NyhjLCJIVE1MIik/ZEwoWHAoYykpOmZ1bmN0aW9uIGtaKGMsbCl7bGV0IGE9bnVsbDt0cnl7''@;'; put 'put ''VmI9VmJ8fGZ1bmN0aW9uIGdMKGMpe2NvbnN0IGw9bmV3IF9aKGMpO3JldHVybiBmdW5jdGlvbiBseCgpe3RyeXtyZXR1cm4hIShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKERtKCIiKSwidGV4dC9odG1sIil9Y2F0Y2h7cmV0dXJuITF9fSgpP25ldyBiWihsKTpsfShj''@;'; put 'put ''KTtsZXQgZD1sP1N0cmluZyhsKToiIjthPVZiLmdldEluZXJ0Qm9keUVsZW1lbnQoZCk7bGV0IGg9NSxmPWQ7ZG97aWYoMD09PWgpdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBpbnB1dCBpcyB1bnN0YWJsZSIpO2gtLSxkPWYsZj1hLmlubmVy''@;'; put 'put ''SFRNTCxhPVZiLmdldEluZXJ0Qm9keUVsZW1lbnQoZCl9d2hpbGUoZCE9PWYpO3JldHVybiBEbSgobmV3IEVaKS5zYW5pdGl6ZUNoaWxkcmVuKHB4KGEpfHxhKSl9ZmluYWxseXtpZihhKXtjb25zdCBkPXB4KGEpfHxhO2Zvcig7ZC5maXJzdENoaWxkOylkLmZpcnN0Q2hpbGQucmVtb3ZlKCl9''@;'; put 'put ''fX0objIoKSxNbyhjKSl9ZnVuY3Rpb24gYngoYyl7Y29uc3QgbD14NygpO3JldHVybiBsP2wuc2FuaXRpemUoTG0uVVJMLGMpfHwiIjp3NyhjLCJVUkwiKT9YcChjKTpjeChNbyhjKSl9ZnVuY3Rpb24gQUwoYyl7Y29uc3QgbD14NygpO2lmKGwpcmV0dXJuIHN4KGwuc2FuaXRpemUoTG0uUkVT''@;'; put 'put ''T1VSQ0VfVVJMLGMpfHwiIik7aWYodzcoYywiUmVzb3VyY2VVUkwiKSlyZXR1cm4gc3goWHAoYykpO3Rocm93IG5ldyBQcig5MDQsITEpfWZ1bmN0aW9uIHg3KCl7Y29uc3QgYz1LcigpO3JldHVybiBjJiZjWzEwXS5zYW5pdGl6ZXJ9ZnVuY3Rpb24gX3goYyl7cmV0dXJuIGMub3duZXJEb2N1''@;'; put 'put ''bWVudC5kZWZhdWx0Vmlld31mdW5jdGlvbiBPbShjKXtyZXR1cm4gYy5vd25lckRvY3VtZW50fWZ1bmN0aW9uIGhmKGMpe3JldHVybiBjIGluc3RhbmNlb2YgRnVuY3Rpb24/YygpOmN9ZnVuY3Rpb24gWlooYyxsLGEpe2xldCBkPWMubGVuZ3RoO2Zvcig7Oyl7Y29uc3QgaD1jLmluZGV4T2Yo''@;'; put 'put ''bCxhKTtpZigtMT09PWgpcmV0dXJuIGg7aWYoMD09PWh8fGMuY2hhckNvZGVBdChoLTEpPD0zMil7Y29uc3QgZj1sLmxlbmd0aDtpZihoK2Y9PT1kfHxjLmNoYXJDb2RlQXQoaCtmKTw9MzIpcmV0dXJuIGh9YT1oKzF9fWNvbnN0IE9MPSJuZy10ZW1wbGF0ZSI7ZnVuY3Rpb24gV1ooYyxsLGEs''@;'; put 'put ''ZCl7bGV0IGg9MDtpZihkKXtmb3IoO2g8bC5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YgbFtoXTtoKz0yKWlmKCJjbGFzcyI9PT1sW2hdJiYtMSE9PVpaKGxbaCsxXS50b0xvd2VyQ2FzZSgpLGEsMCkpcmV0dXJuITB9ZWxzZSBpZih3eChjKSlyZXR1cm4hMTtpZihoPWwuaW5kZXhPZigxLGgp''@;'; put 'put ''LGg+LTEpe2xldCBmO2Zvcig7KytoPGwubGVuZ3RoJiYic3RyaW5nIj09dHlwZW9mKGY9bFtoXSk7KWlmKGYudG9Mb3dlckNhc2UoKT09PWEpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gd3goYyl7cmV0dXJuIDQ9PT1jLnR5cGUmJmMudmFsdWUhPT1PTH1mdW5jdGlvbiBQTChjLGwsYSl7''@;'; put 'put ''cmV0dXJuIGw9PT0oNCE9PWMudHlwZXx8YT9jLnZhbHVlOk9MKX1mdW5jdGlvbiBZWihjLGwsYSl7bGV0IGQ9NDtjb25zdCBoPWMuYXR0cnMsZj1udWxsIT09aD9mdW5jdGlvbiBLWihjKXtmb3IobGV0IGw9MDtsPGMubGVuZ3RoO2wrKylpZihMSShjW2xdKSlyZXR1cm4gbDtyZXR1cm4gYy5s''@;'; put 'put ''ZW5ndGh9KGgpOjA7bGV0IHY9ITE7Zm9yKGxldCBNPTA7TTxsLmxlbmd0aDtNKyspe2NvbnN0IEQ9bFtNXTtpZigibnVtYmVyIiE9dHlwZW9mIEQpe2lmKCF2KWlmKDQmZCl7aWYoZD0yfDEmZCwiIiE9PUQmJiFQTChjLEQsYSl8fCIiPT09RCYmMT09PWwubGVuZ3RoKXtpZihpMihkKSlyZXR1''@;'; put 'put ''cm4hMTt2PSEwfX1lbHNlIGlmKDgmZCl7aWYobnVsbD09PWh8fCFXWihjLGgsRCxhKSl7aWYoaTIoZCkpcmV0dXJuITE7dj0hMH19ZWxzZXtjb25zdCBVPWxbKytNXSx0ZT1HWihELGgsd3goYyksYSk7aWYoLTE9PT10ZSl7aWYoaTIoZCkpcmV0dXJuITE7dj0hMDtjb250aW51ZX1pZigiIiE9''@;'; put 'put ''PVUpe2xldCBvZTtpZihvZT10ZT5mPyIiOmhbdGUrMV0udG9Mb3dlckNhc2UoKSwyJmQmJlUhPT1vZSl7aWYoaTIoZCkpcmV0dXJuITE7dj0hMH19fX1lbHNle2lmKCF2JiYhaTIoZCkmJiFpMihEKSlyZXR1cm4hMTtpZih2JiZpMihEKSljb250aW51ZTt2PSExLGQ9RHwxJmR9fXJldHVybiBp''@;'; put 'put ''MihkKXx8dn1mdW5jdGlvbiBpMihjKXtyZXR1cm4hKDEmYyl9ZnVuY3Rpb24gR1ooYyxsLGEsZCl7aWYobnVsbD09PWwpcmV0dXJuLTE7bGV0IGg9MDtpZihkfHwhYSl7bGV0IGY9ITE7Zm9yKDtoPGwubGVuZ3RoOyl7Y29uc3Qgdj1sW2hdO2lmKHY9PT1jKXJldHVybiBoO2lmKDM9PT12fHw2''@;'; put 'put ''PT09dilmPSEwO2Vsc2V7aWYoMT09PXZ8fDI9PT12KXtsZXQgTT1sWysraF07Zm9yKDsic3RyaW5nIj09dHlwZW9mIE07KU09bFsrK2hdO2NvbnRpbnVlfWlmKDQ9PT12KWJyZWFrO2lmKDA9PT12KXtoKz00O2NvbnRpbnVlfX1oKz1mPzE6Mn1yZXR1cm4tMX1yZXR1cm4gZnVuY3Rpb24gWFoo''@;'; put 'put ''YyxsKXtsZXQgYT1jLmluZGV4T2YoNCk7aWYoYT4tMSlmb3IoYSsrO2E8Yy5sZW5ndGg7KXtjb25zdCBkPWNbYV07aWYoIm51bWJlciI9PXR5cGVvZiBkKXJldHVybi0xO2lmKGQ9PT1sKXJldHVybiBhO2ErK31yZXR1cm4tMX0obCxjKX1mdW5jdGlvbiBGTChjLGwsYT0hMSl7Zm9yKGxldCBk''@;'; put 'put ''PTA7ZDxsLmxlbmd0aDtkKyspaWYoWVooYyxsW2RdLGEpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHFaKGMsbCl7ZTpmb3IobGV0IGE9MDthPGwubGVuZ3RoO2ErKyl7Y29uc3QgZD1sW2FdO2lmKGMubGVuZ3RoPT09ZC5sZW5ndGgpe2ZvcihsZXQgaD0wO2g8Yy5sZW5ndGg7aCsrKWlm''@;'; put 'put ''KGNbaF0hPT1kW2hdKWNvbnRpbnVlIGU7cmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIEhMKGMsbCl7cmV0dXJuIGM/Ijpub3QoIitsLnRyaW0oKSsiKSI6bH1mdW5jdGlvbiBKWihjKXtsZXQgbD1jWzBdLGE9MSxkPTIsaD0iIixmPSExO2Zvcig7YTxjLmxlbmd0aDspe2xldCB2PWNbYV07''@;'; put 'put ''aWYoInN0cmluZyI9PXR5cGVvZiB2KWlmKDImZCl7Y29uc3QgTT1jWysrYV07aCs9IlsiK3YrKE0ubGVuZ3RoPjA/Jz0iJytNKyciJzoiIikrIl0ifWVsc2UgOCZkP2grPSIuIit2OjQmZCYmKGgrPSIgIit2KTtlbHNlIiIhPT1oJiYhaTIodikmJihsKz1ITChmLGgpLGg9IiIpLGQ9dixmPWZ8''@;'; put 'put ''fCFpMihkKTthKyt9cmV0dXJuIiIhPT1oJiYobCs9SEwoZixoKSksbH1jb25zdCBqbz17fTtmdW5jdGlvbiBDeChjLGwsYSxkLGgsZix2LE0sRCxVLHRlKXtjb25zdCBvZT0yNitkLHZlPW9lK2gsd2U9ZnVuY3Rpb24gdFcoYyxsKXtjb25zdCBhPVtdO2ZvcihsZXQgZD0wO2Q8bDtkKyspYS5w''@;'; put 'put ''dXNoKGQ8Yz9udWxsOmpvKTtyZXR1cm4gYX0ob2UsdmUpLEZlPSJmdW5jdGlvbiI9PXR5cGVvZiBVP1UoKTpVO3JldHVybiB3ZVsxXT17dHlwZTpjLGJsdWVwcmludDp3ZSx0ZW1wbGF0ZTphLHF1ZXJpZXM6bnVsbCx2aWV3UXVlcnk6TSxkZWNsVE5vZGU6bCxkYXRhOndlLnNsaWNlKCkuZmls''@;'; put 'put ''bChudWxsLG9lKSxiaW5kaW5nU3RhcnRJbmRleDpvZSxleHBhbmRvU3RhcnRJbmRleDp2ZSxob3N0QmluZGluZ09wQ29kZXM6bnVsbCxmaXJzdENyZWF0ZVBhc3M6ITAsZmlyc3RVcGRhdGVQYXNzOiEwLHN0YXRpY1ZpZXdRdWVyaWVzOiExLHN0YXRpY0NvbnRlbnRRdWVyaWVzOiExLHByZU9y''@;'; put 'put ''ZGVySG9va3M6bnVsbCxwcmVPcmRlckNoZWNrSG9va3M6bnVsbCxjb250ZW50SG9va3M6bnVsbCxjb250ZW50Q2hlY2tIb29rczpudWxsLHZpZXdIb29rczpudWxsLHZpZXdDaGVja0hvb2tzOm51bGwsZGVzdHJveUhvb2tzOm51bGwsY2xlYW51cDpudWxsLGNvbnRlbnRRdWVyaWVzOm51bGws''@;'; put 'put ''Y29tcG9uZW50czpudWxsLGRpcmVjdGl2ZVJlZ2lzdHJ5OiJmdW5jdGlvbiI9PXR5cGVvZiBmP2YoKTpmLHBpcGVSZWdpc3RyeToiZnVuY3Rpb24iPT10eXBlb2Ygdj92KCk6dixmaXJzdENoaWxkOm51bGwsc2NoZW1hczpELGNvbnN0czpGZSxpbmNvbXBsZXRlRmlyc3RQYXNzOiExLHNzcklk''@;'; put 'put ''OnRlfX1mdW5jdGlvbiBaYihjLGwsYSxkLGgsZix2LE0sRCxVLHRlKXtjb25zdCBvZT1sLmJsdWVwcmludC5zbGljZSgpO3JldHVybiBvZVswXT1oLG9lWzJdPTEyMjh8ZCwobnVsbCE9PVV8fGMmJjIwNDgmY1syXSkmJihvZVsyXXw9MjA0OCksUWQob2UpLG9lWzNdPW9lWzE0XT1jLG9lWzhd''@;'; put 'put ''PWEsb2VbMTBdPXZ8fGMmJmNbMTBdLG9lWzExXT1NfHxjJiZjWzExXSxvZVs5XT1EfHxjJiZjWzldfHxudWxsLG9lWzVdPWYsb2VbMTldPWZ1bmN0aW9uIGE3KCl7cmV0dXJuIGk3Kyt9KCksb2VbNl09dGUsb2VbMjBdPVUsb2VbMTVdPTI9PWwudHlwZT9jWzE1XTpvZSxvZX1mdW5jdGlvbiBT''@;'; put 'put ''eChjKXtsZXQgbD0xNjtyZXR1cm4gYy5zaWduYWxzP2w9NDA5NjpjLm9uUHVzaCYmKGw9NjQpLGx9ZnVuY3Rpb24gRTcoYyxsLGEsZCl7aWYoMD09PWEpcmV0dXJuLTE7Y29uc3QgaD1sLmxlbmd0aDtmb3IobGV0IGY9MDtmPGE7ZisrKWwucHVzaChkKSxjLmJsdWVwcmludC5wdXNoKGQpLGMu''@;'; put 'put ''ZGF0YS5wdXNoKG51bGwpO3JldHVybiBofWZ1bmN0aW9uIE14KGMsbCl7cmV0dXJuIGNbMTJdP2NbMTNdWzRdPWw6Y1sxMl09bCxjWzEzXT1sLGx9ZnVuY3Rpb24gZmUoYz0xKXtWTChEbygpLEtyKCksYjAoKStjLCExKX1mdW5jdGlvbiBWTChjLGwsYSxkKXtpZighZClpZigzJn5sWzJdKXtj''@;'; put 'put ''b25zdCBmPWMucHJlT3JkZXJIb29rcztudWxsIT09ZiYmUXkobCxmLDAsYSl9ZWxzZXtjb25zdCBmPWMucHJlT3JkZXJDaGVja0hvb2tzO251bGwhPT1mJiZKeShsLGYsYSl9a2coYSl9dmFyIFdiPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTm9uZT0wXT0iTm9uZSIsY1tjLlNpZ25hbEJhc2Vk''@;'; put 'put ''PTFdPSJTaWduYWxCYXNlZCIsY1tjLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtPTJdPSJIYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSIsY30oV2J8fHt9KTtmdW5jdGlvbiB4eChjLGwsYSxkKXtjb25zdCBoPV9lKG51bGwpO3RyeXtjb25zdFtmLHYsTV09Yy5pbnB1dHNbYV07bGV0IEQ9''@;'; put 'put ''bnVsbDshISh2JldiLlNpZ25hbEJhc2VkKSYmKEQ9bFtmXVtnZV0pLG51bGwhPT1EJiZ2b2lkIDAhPT1ELnRyYW5zZm9ybUZuP2Q9RC50cmFuc2Zvcm1GbihkKTpudWxsIT09TSYmKGQ9TS5jYWxsKGwsZCkpLG51bGwhPT1jLnNldElucHV0P2Muc2V0SW5wdXQobCxELGQsYSxmKTpaeShsLEQs''@;'; put 'put ''ZixkKX1maW5hbGx5e19lKGgpfX1mdW5jdGlvbiBFeChjLGwsYSxkLGgpe2NvbnN0IGY9YjAoKSx2PTImZDt0cnl7a2coLTEpLHYmJmwubGVuZ3RoPjI2JiZWTChjLGwsMjYsITEpLGEoZCxoKX1maW5hbGx5e2tnKGYpfX1mdW5jdGlvbiBZYihjLGwsYSl7KGZ1bmN0aW9uIGxXKGMsbCxhKXtj''@;'; put 'put ''b25zdCBkPWEuZGlyZWN0aXZlU3RhcnQsaD1hLmRpcmVjdGl2ZUVuZDtadShhKSYmZnVuY3Rpb24gblcoYyxsLGEpe2NvbnN0IGQ9cHQobCxjKSxoPWZ1bmN0aW9uIE5MKGMpe2NvbnN0IGw9Yy50VmlldztyZXR1cm4gbnVsbD09PWx8fGwuaW5jb21wbGV0ZUZpcnN0UGFzcz9jLnRWaWV3PUN4''@;'; put 'put ''KDEsbnVsbCxjLnRlbXBsYXRlLGMuZGVjbHMsYy52YXJzLGMuZGlyZWN0aXZlRGVmcyxjLnBpcGVEZWZzLGMudmlld1F1ZXJ5LGMuc2NoZW1hcyxjLmNvbnN0cyxjLmlkKTpsfShhKSxmPWNbMTBdLnJlbmRlcmVyRmFjdG9yeSx2PU14KGMsWmIoYyxoLG51bGwsU3goYSksZCxsLG51bGwsZi5j''@;'; put 'put ''cmVhdGVSZW5kZXJlcihkLGEpLG51bGwsbnVsbCxudWxsKSk7Y1tsLmluZGV4XT12fShsLGEsYy5kYXRhW2QrYS5jb21wb25lbnRPZmZzZXRdKSxjLmZpcnN0Q3JlYXRlUGFzc3x8JDgoYSxsKTtjb25zdCBmPWEuaW5pdGlhbElucHV0cztmb3IobGV0IHY9ZDt2PGg7disrKXtjb25zdCBNPWMu''@;'; put 'put ''ZGF0YVt2XSxEPUs4KGwsYyx2LGEpO0UxKEQsbCksbnVsbCE9PWYmJmRXKDAsdi1kLEQsTSwwLGYpLFYwKE0pJiYobGEoYS5pbmRleCxsKVs4XT1LOChsLGMsdixhKSl9fSkoYyxsLGEpLCEoNjQmfmEuZmxhZ3MpJiZmdW5jdGlvbiBjVyhjLGwsYSl7Y29uc3QgZD1hLmRpcmVjdGl2ZVN0YXJ0''@;'; put 'put ''LGg9YS5kaXJlY3RpdmVFbmQsZj1hLmluZGV4LHY9ZnVuY3Rpb24gVXooKXtyZXR1cm4gSG8ubEZyYW1lLmN1cnJlbnREaXJlY3RpdmVJbmRleH0oKTt0cnl7a2coZik7Zm9yKGxldCBNPWQ7TTxoO00rKyl7Y29uc3QgRD1jLmRhdGFbTV0sVT1sW01dO3RNKE0pLChudWxsIT09RC5ob3N0Qmlu''@;'; put 'put ''ZGluZ3N8fDAhPT1ELmhvc3RWYXJzfHxudWxsIT09RC5ob3N0QXR0cnMpJiZ1VyhELFUpfX1maW5hbGx5e2tnKC0xKSx0TSh2KX19KGMsbCxhKX1mdW5jdGlvbiBUeChjLGwsYT1wdCl7Y29uc3QgZD1sLmxvY2FsTmFtZXM7aWYobnVsbCE9PWQpe2xldCBoPWwuaW5kZXgrMTtmb3IobGV0IGY9''@;'; put 'put ''MDtmPGQubGVuZ3RoO2YrPTIpe2NvbnN0IHY9ZFtmKzFdLE09LTE9PT12P2EobCxjKTpjW3ZdO2NbaCsrXT1NfX19bGV0IEJMPSgpPT5udWxsO2Z1bmN0aW9uIEIwKGMsbCxhLGQsaCxmLHYsTSl7aWYoTXx8IVJ4KGwsYyxhLGQsaCkpe2lmKDMmbC50eXBlKXtjb25zdCBEPXB0KGwsYSk7ZD1m''@;'; put 'put ''dW5jdGlvbiBBeChjKXtyZXR1cm4iY2xhc3MiPT09Yz8iY2xhc3NOYW1lIjoiZm9yIj09PWM/Imh0bWxGb3IiOiJmb3JtYWN0aW9uIj09PWM/ImZvcm1BY3Rpb24iOiJpbm5lckh0bWwiPT09Yz8iaW5uZXJIVE1MIjoicmVhZG9ubHkiPT09Yz8icmVhZE9ubHkiOiJ0YWJpbmRleCI9PT1jPyJ0''@;'; put 'put ''YWJJbmRleCI6Y30oZCksaD1udWxsIT12P3YoaCxsLnZhbHVlfHwiIixkKTpoLGYuc2V0UHJvcGVydHkoRCxkLGgpfX1lbHNlIFp1KGwpJiZmdW5jdGlvbiBzVyhjLGwpe2NvbnN0IGE9bGEobCxjKTsxNiZhWzJdfHwoYVsyXXw9NjQpfShhLGwuaW5kZXgpfWZ1bmN0aW9uIHVXKGMsbCl7bnVs''@;'; put 'put ''bCE9PWMuaG9zdEJpbmRpbmdzJiZjLmhvc3RCaW5kaW5ncygxLGwpfWZ1bmN0aW9uIGt4KGMsbCl7Y29uc3QgYT1jLmRpcmVjdGl2ZVJlZ2lzdHJ5O2xldCBkPW51bGw7aWYoYSlmb3IobGV0IGg9MDtoPGEubGVuZ3RoO2grKyl7Y29uc3QgZj1hW2hdO0ZMKGwsZi5zZWxlY3RvcnMsITEpJiYo''@;'; put 'put ''ZD8/PVtdLFYwKGYpP2QudW5zaGlmdChmKTpkLnB1c2goZikpfXJldHVybiBkfWZ1bmN0aW9uIGZmKGMsbCxhLGQsaCxmKXtjb25zdCB2PXB0KGMsbCk7IWZ1bmN0aW9uIER4KGMsbCxhLGQsaCxmLHYpe2lmKG51bGw9PWYpYy5yZW1vdmVBdHRyaWJ1dGUobCxoLGEpO2Vsc2V7Y29uc3QgTT1u''@;'; put 'put ''dWxsPT12P01vKGYpOnYoZixkfHwiIixoKTtjLnNldEF0dHJpYnV0ZShsLGgsTSxhKX19KGxbMTFdLHYsZixjLnZhbHVlLGEsZCxoKX1mdW5jdGlvbiBkVyhjLGwsYSxkLGgsZil7Y29uc3Qgdj1mW2xdO2lmKG51bGwhPT12KWZvcihsZXQgTT0wO008di5sZW5ndGg7TSs9Mil4eChkLGEsdltN''@;'; put 'put ''XSx2W00rMV0pfWZ1bmN0aW9uIHpMKGMsbCxhKXtyZXR1cm4obnVsbD09PWN8fFYwKGMpKSYmKGE9ZnVuY3Rpb24gU2UoYyl7Zm9yKDtBcnJheS5pc0FycmF5KGMpOyl7aWYoIm9iamVjdCI9PXR5cGVvZiBjWzFdKXJldHVybiBjO2M9Y1swXX1yZXR1cm4gbnVsbH0oYVtsLmluZGV4XSkpLGFb''@;'; put 'put ''MTFdfWZ1bmN0aW9uIFJ4KGMsbCxhLGQsaCl7Y29uc3QgZj1jLmlucHV0cz8uW2RdLHY9Yy5ob3N0RGlyZWN0aXZlSW5wdXRzPy5bZF07bGV0IE09ITE7aWYodilmb3IobGV0IEQ9MDtEPHYubGVuZ3RoO0QrPTIpe2NvbnN0IFU9dltEXTt4eChsLmRhdGFbVV0sYVtVXSx2W0QrMV0saCksTT0h''@;'; put 'put ''MH1pZihmKWZvcihjb25zdCBEIG9mIGYpeHgobC5kYXRhW0RdLGFbRF0sZCxoKSxNPSEwO3JldHVybiBNfWZ1bmN0aW9uIFVvZShjLGwpe2NvbnN0IGE9bGEobCxjKSxkPWFbMV07IWZ1bmN0aW9uIGhXKGMsbCl7Zm9yKGxldCBhPWwubGVuZ3RoO2E8Yy5ibHVlcHJpbnQubGVuZ3RoO2ErKyls''@;'; put 'put ''LnB1c2goYy5ibHVlcHJpbnRbYV0pfShkLGEpO2NvbnN0IGg9YVswXTtudWxsIT09aCYmbnVsbD09PWFbNl0mJihhWzZdPW51bGwpLEdiKGQsYSxhWzhdKX1mdW5jdGlvbiBHYihjLGwsYSl7aU0obCk7dHJ5e2NvbnN0IGQ9Yy52aWV3UXVlcnk7bnVsbCE9PWQmJk9iKDEsZCxhKTtjb25zdCBo''@;'; put 'put ''PWMudGVtcGxhdGU7bnVsbCE9PWgmJkV4KGMsbCxoLDEsYSksYy5maXJzdENyZWF0ZVBhc3MmJihjLmZpcnN0Q3JlYXRlUGFzcz0hMSksbFsxOF0/LmZpbmlzaFZpZXdDcmVhdGlvbihjKSxjLnN0YXRpY0NvbnRlbnRRdWVyaWVzJiZhTChjLGwpLGMuc3RhdGljVmlld1F1ZXJpZXMmJk9iKDIs''@;'; put 'put ''Yy52aWV3UXVlcnksYSk7Y29uc3QgZj1jLmNvbXBvbmVudHM7bnVsbCE9PWYmJmZ1bmN0aW9uIGZXKGMsbCl7Zm9yKGxldCBhPTA7YTxsLmxlbmd0aDthKyspVW9lKGMsbFthXSl9KGwsZil9Y2F0Y2goZCl7dGhyb3cgYy5maXJzdENyZWF0ZVBhc3MmJihjLmluY29tcGxldGVGaXJzdFBhc3M9''@;'; put 'put ''ITAsYy5maXJzdENyZWF0ZVBhc3M9ITEpLGR9ZmluYWxseXtsWzJdJj0tNSxvTSgpfX1mdW5jdGlvbiBQZyhjLGwsYSxkKXtjb25zdCBoPV9lKG51bGwpO3RyeXtjb25zdCBmPWwudFZpZXcsRD1aYihjLGYsYSw0MDk2JmNbMl0/NDA5NjoxNixudWxsLGwsbnVsbCxudWxsLGQ/LmluamVjdG9y''@;'; put 'put ''Pz9udWxsLGQ/LmVtYmVkZGVkVmlld0luamVjdG9yPz9udWxsLGQ/LmRlaHlkcmF0ZWRWaWV3Pz9udWxsKTtEWzE2XT1jW2wuaW5kZXhdO2NvbnN0IHRlPWNbMThdO3JldHVybiBudWxsIT09dGUmJihEWzE4XT10ZS5jcmVhdGVFbWJlZGRlZFZpZXcoZikpLEdiKGYsRCxhKSxEfWZpbmFsbHl7''@;'; put 'put ''X2UoaCl9fWZ1bmN0aW9uIEZnKGMsbCl7cmV0dXJuIWx8fG51bGw9PT1sLmZpcnN0Q2hpbGR8fHpwKGMpfWZ1bmN0aW9uIE94KGMsbCl7cmV0dXJuIHVuZGVmaW5lZChjLGwpfXZhciBKcD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkltcG9ydGFudD0xXT0iSW1wb3J0YW50IixjW2MuRGFzaENh''@;'; put 'put ''c2U9Ml09IkRhc2hDYXNlIixjfShKcHx8e30pO2Z1bmN0aW9uIFFwKGMpe3JldHVybiEoMzImfmMuZmxhZ3MpfWZ1bmN0aW9uIEZtKGMsbCxhLGQsaCl7aWYobnVsbCE9ZCl7bGV0IGYsdj0hMTt2bChkKT9mPWQ6Z2MoZCkmJih2PSEwLGQ9ZFswXSk7Y29uc3QgTT1IYShkKTswPT09YyYmbnVs''@;'; put 'put ''bCE9PWE/bnVsbD09aD9teChsLGEsTSk6cXAobCxhLE0saHx8bnVsbCwhMCk6MT09PWMmJm51bGwhPT1hP3FwKGwsYSxNLGh8fG51bGwsITApOjI9PT1jP2Z1bmN0aW9uIFM3KGMsbCxhKXtjLnJlbW92ZUNoaWxkKG51bGwsbCxhKX0obCxNLHYpOjM9PT1jJiZsLmRlc3Ryb3lOb2RlKE0pLG51''@;'; put 'put ''bGwhPWYmJmZ1bmN0aW9uIF9XKGMsbCxhLGQsaCl7Y29uc3QgZj1hWzddO2YhPT1IYShhKSYmRm0obCxjLGQsZixoKTtmb3IobGV0IE09MTA7TTxhLmxlbmd0aDtNKyspe2NvbnN0IEQ9YVtNXTtYYihEWzFdLEQsYyxsLGQsZil9fShsLGMsZixhLGgpfX1mdW5jdGlvbiBaTChjLGwpe2xbMTBd''@;'; put 'put ''LmNoYW5nZURldGVjdGlvblNjaGVkdWxlcj8ubm90aWZ5KDkpLFhiKGMsbCxsWzExXSwyLG51bGwsbnVsbCl9ZnVuY3Rpb24gUHgoYyxsKXtjb25zdCBhPWNbOV0sZD1hLmluZGV4T2YobCk7YS5zcGxpY2UoZCwxKX1mdW5jdGlvbiBUNyhjLGwpe2lmKGNkKGwpKXJldHVybjtjb25zdCBhPWxb''@;'; put 'put ''MTFdO2EuZGVzdHJveU5vZGUmJlhiKGMsbCxhLDMsbnVsbCxudWxsKSxmdW5jdGlvbiBtVyhjKXtsZXQgbD1jWzEyXTtpZighbClyZXR1cm4gRngoY1sxXSxjKTtmb3IoO2w7KXtsZXQgYT1udWxsO2lmKGdjKGwpKWE9bFsxMl07ZWxzZXtjb25zdCBkPWxbMTBdO2QmJihhPWQpfWlmKCFhKXtm''@;'; put 'put ''b3IoO2wmJiFsWzRdJiZsIT09YzspZ2MobCkmJkZ4KGxbMV0sbCksbD1sWzNdO251bGw9PT1sJiYobD1jKSxnYyhsKSYmRngobFsxXSxsKSxhPWwmJmxbNF19bD1hfX0obCl9ZnVuY3Rpb24gRngoYyxsKXtpZihjZChsKSlyZXR1cm47Y29uc3QgYT1fZShudWxsKTt0cnl7bFsyXSY9LTEyOSxs''@;'; put 'put ''WzJdfD0yNTYsbFsyNF0mJmFlKGxbMjRdKSxmdW5jdGlvbiB5VyhjLGwpe2xldCBhO2lmKG51bGwhPWMmJm51bGwhPShhPWMuZGVzdHJveUhvb2tzKSlmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrPTIpe2NvbnN0IGg9bFthW2RdXTtpZighKGggaW5zdGFuY2VvZiBKaCkpe2NvbnN0IGY9YVtk''@;'; put 'put ''KzFdO2lmKEFycmF5LmlzQXJyYXkoZikpZm9yKGxldCB2PTA7djxmLmxlbmd0aDt2Kz0yKXtjb25zdCBNPWhbZlt2XV0sRD1mW3YrMV07dHJ5e0QuY2FsbChNKX1maW5hbGx5e319ZWxzZSB0cnl7Zi5jYWxsKGgpfWZpbmFsbHl7fX19fShjLGwpLGZ1bmN0aW9uIHZXKGMsbCl7Y29uc3QgYT1j''@;'; put 'put ''LmNsZWFudXAsZD1sWzddO2lmKG51bGwhPT1hKWZvcihsZXQgdj0wO3Y8YS5sZW5ndGgtMTt2Kz0yKWlmKCJzdHJpbmciPT10eXBlb2YgYVt2XSl7Y29uc3QgTT1hW3YrM107TT49MD9kW01dKCk6ZFstTV0udW5zdWJzY3JpYmUoKSx2Kz0yfWVsc2UgYVt2XS5jYWxsKGRbYVt2KzFdXSk7bnVs''@;'; put 'put ''bCE9PWQmJihsWzddPW51bGwpO2NvbnN0IGg9bFsyMV07aWYobnVsbCE9PWgpe2xbMjFdPW51bGw7Zm9yKGxldCB2PTA7djxoLmxlbmd0aDt2KyspKDAsaFt2XSkoKX1jb25zdCBmPWxbMjNdO2lmKG51bGwhPT1mKXtsWzIzXT1udWxsO2Zvcihjb25zdCB2IG9mIGYpdi5kZXN0cm95KCl9fShj''@;'; put 'put ''LGwpLDE9PT1sWzFdLnR5cGUmJmxbMTFdLmRlc3Ryb3koKTtjb25zdCBkPWxbMTZdO2lmKG51bGwhPT1kJiZ2bChsWzNdKSl7ZCE9PWxbM10mJlB4KGQsbCk7Y29uc3QgaD1sWzE4XTtudWxsIT09aCYmaC5kZXRhY2hWaWV3KGMpfWRiKGwpfWZpbmFsbHl7X2UoYSl9fWZ1bmN0aW9uIEE3KGMs''@;'; put 'put ''bCxhKXtyZXR1cm4gZnVuY3Rpb24gV0woYyxsLGEpe2xldCBkPWw7Zm9yKDtudWxsIT09ZCYmMTY4JmQudHlwZTspZD0obD1kKS5wYXJlbnQ7aWYobnVsbD09PWQpcmV0dXJuIGFbMF07aWYoWnUoZCkpe2NvbnN0e2VuY2Fwc3VsYXRpb246aH09Yy5kYXRhW2QuZGlyZWN0aXZlU3RhcnQrZC5j''@;'; put 'put ''b21wb25lbnRPZmZzZXRdO2lmKGg9PT1mZC5Ob25lfHxoPT09ZmQuRW11bGF0ZWQpcmV0dXJuIG51bGx9cmV0dXJuIHB0KGQsYSl9KGMsbC5wYXJlbnQsYSl9ZnVuY3Rpb24gWUwoYyxsLGEpe3JldHVybiBIeChjLGwsYSl9bGV0IEh4PWZ1bmN0aW9uIEdMKGMsbCxhKXtyZXR1cm4gNDAmYy50''@;'; put 'put ''eXBlP3B0KGMsYSk6bnVsbH07ZnVuY3Rpb24gS2IoYyxsLGEsZCl7Y29uc3QgaD1BNyhjLGQsbCksZj1sWzExXSxNPVlMKGQucGFyZW50fHxsWzVdLGQsbCk7aWYobnVsbCE9aClpZihBcnJheS5pc0FycmF5KGEpKWZvcihsZXQgRD0wO0Q8YS5sZW5ndGg7RCsrKXZ4KGYsaCxhW0RdLE0sITEp''@;'; put 'put ''O2Vsc2UgdngoZixoLGEsTSwhMSl9ZnVuY3Rpb24gSGcoYyxsKXtpZihudWxsIT09bCl7Y29uc3QgYT1sLnR5cGU7aWYoMyZhKXJldHVybiBwdChsLGMpO2lmKDQmYSlyZXR1cm4gQngoLTEsY1tsLmluZGV4XSk7aWYoOCZhKXtjb25zdCBkPWwuY2hpbGQ7aWYobnVsbCE9PWQpcmV0dXJuIEhn''@;'; put 'put ''KGMsZCk7e2NvbnN0IGg9Y1tsLmluZGV4XTtyZXR1cm4gdmwoaCk/QngoLTEsaCk6SGEoaCl9fWlmKDEyOCZhKXJldHVybiBIZyhjLGwubmV4dCk7aWYoMzImYSlyZXR1cm4gT3gobCxjKSgpfHxIYShjW2wuaW5kZXhdKTt7Y29uc3QgZD1WeChjLGwpO3JldHVybiBudWxsIT09ZD9BcnJheS5p''@;'; put 'put ''c0FycmF5KGQpP2RbMF06SGcoeTMoY1sxNV0pLGQpOkhnKGMsbC5uZXh0KX19cmV0dXJuIG51bGx9ZnVuY3Rpb24gVngoYyxsKXtyZXR1cm4gbnVsbCE9PWw/Y1sxNV1bNV0ucHJvamVjdGlvbltsLnByb2plY3Rpb25dOm51bGx9ZnVuY3Rpb24gQngoYyxsKXtjb25zdCBhPTEwK2MrMTtpZihh''@;'; put 'put ''PGwubGVuZ3RoKXtjb25zdCBkPWxbYV0saD1kWzFdLmZpcnN0Q2hpbGQ7aWYobnVsbCE9PWgpcmV0dXJuIEhnKGQsaCl9cmV0dXJuIGxbN119ZnVuY3Rpb24gangoYyxsLGEsZCxoLGYsdil7Zm9yKDtudWxsIT1hOyl7aWYoMTI4PT09YS50eXBlKXthPWEubmV4dDtjb250aW51ZX1jb25zdCBN''@;'; put 'put ''PWRbYS5pbmRleF0sRD1hLnR5cGU7aWYodiYmMD09PWwmJihNJiZFMShIYShNKSxkKSxhLmZsYWdzfD0yKSwhUXAoYSkpaWYoOCZEKWp4KGMsbCxhLmNoaWxkLGQsaCxmLCExKSxGbShsLGMsaCxNLGYpO2Vsc2UgaWYoMzImRCl7Y29uc3QgVT1PeChhLGQpO2xldCB0ZTtmb3IoO3RlPVUoKTsp''@;'; put 'put ''Rm0obCxjLGgsdGUsZik7Rm0obCxjLGgsTSxmKX1lbHNlIDE2JkQ/JEwoYyxsLGQsYSxoLGYpOkZtKGwsYyxoLE0sZik7YT12P2EucHJvamVjdGlvbk5leHQ6YS5uZXh0fX1mdW5jdGlvbiBYYihjLGwsYSxkLGgsZil7angoYSxkLGMuZmlyc3RDaGlsZCxsLGgsZiwhMSl9ZnVuY3Rpb24gJEwo''@;'; put 'put ''YyxsLGEsZCxoLGYpe2NvbnN0IHY9YVsxNV0sRD12WzVdLnByb2plY3Rpb25bZC5wcm9qZWN0aW9uXTtpZihBcnJheS5pc0FycmF5KEQpKWZvcihsZXQgVT0wO1U8RC5sZW5ndGg7VSsrKUZtKGwsYyxoLERbVV0sZik7ZWxzZXtsZXQgVT1EO2NvbnN0IHRlPXZbM107enAoZCkmJihVLmZsYWdz''@;'; put 'put ''fD0xMjgpLGp4KGMsbCxVLHRlLGgsZiwhMCl9fWZ1bmN0aW9uIEhtKGMsbCxhLGQsaD0hMSl7Zm9yKDtudWxsIT09YTspe2lmKDEyOD09PWEudHlwZSl7YT1oP2EucHJvamVjdGlvbk5leHQ6YS5uZXh0O2NvbnRpbnVlfWNvbnN0IGY9bFthLmluZGV4XTtudWxsIT09ZiYmZC5wdXNoKEhhKGYp''@;'; put 'put ''KSx2bChmKSYmengoZixkKTtjb25zdCB2PWEudHlwZTtpZig4JnYpSG0oYyxsLGEuY2hpbGQsZCk7ZWxzZSBpZigzMiZ2KXtjb25zdCBNPU94KGEsbCk7bGV0IEQ7Zm9yKDtEPU0oKTspZC5wdXNoKEQpfWVsc2UgaWYoMTYmdil7Y29uc3QgTT1WeChsLGEpO2lmKEFycmF5LmlzQXJyYXkoTSkp''@;'; put 'put ''ZC5wdXNoKC4uLk0pO2Vsc2V7Y29uc3QgRD15MyhsWzE1XSk7SG0oRFsxXSxELE0sZCwhMCl9fWE9aD9hLnByb2plY3Rpb25OZXh0OmEubmV4dH1yZXR1cm4gZH1mdW5jdGlvbiB6eChjLGwpe2ZvcihsZXQgYT0xMDthPGMubGVuZ3RoO2ErKyl7Y29uc3QgZD1jW2FdLGg9ZFsxXS5maXJzdENo''@;'; put 'put ''aWxkO251bGwhPT1oJiZIbShkWzFdLGQsaCxsKX1jWzddIT09Y1swXSYmbC5wdXNoKGNbN10pfWZ1bmN0aW9uIEtMKGMpe2lmKG51bGwhPT1jWzI1XSl7Zm9yKGNvbnN0IGwgb2YgY1syNV0pbC5pbXBsLmFkZFNlcXVlbmNlKGwpO2NbMjVdLmxlbmd0aD0wfX1sZXQgWEw9W107Y29uc3QgeFc9''@;'; put 'put ''ey4uLkIsY29uc3VtZXJJc0Fsd2F5c0xpdmU6ITAsa2luZDoidGVtcGxhdGUiLGNvbnN1bWVyTWFya2VkRGlydHk6Yz0+e2RtKGMubFZpZXcpfSxjb25zdW1lck9uU2lnbmFsUmVhZCgpe3RoaXMubFZpZXdbMjRdPXRoaXN9fSxUVz17Li4uQixjb25zdW1lcklzQWx3YXlzTGl2ZTohMCxraW5k''@;'; put 'put ''OiJ0ZW1wbGF0ZSIsY29uc3VtZXJNYXJrZWREaXJ0eTpjPT57bGV0IGw9eTMoYy5sVmlldyk7Zm9yKDtsJiYhcUwobFsxXSk7KWw9eTMobCk7bCYmVVMobCl9LGNvbnN1bWVyT25TaWduYWxSZWFkKCl7dGhpcy5sVmlld1syNF09dGhpc319O2Z1bmN0aW9uIHFMKGMpe3JldHVybiAyIT09Yy50''@;'; put 'put ''eXBlfWZ1bmN0aW9uIEpMKGMpe2lmKG51bGw9PT1jWzIzXSlyZXR1cm47bGV0IGw9ITA7Zm9yKDtsOyl7bGV0IGE9ITE7Zm9yKGNvbnN0IGQgb2YgY1syM10pZC5kaXJ0eSYmKGE9ITAsbnVsbD09PWQuem9uZXx8Wm9uZS5jdXJyZW50PT09ZC56b25lP2QucnVuKCk6ZC56b25lLnJ1bigoKT0+''@;'; put 'put ''ZC5ydW4oKSkpO2w9YSYmISEoODE5MiZjWzJdKX19ZnVuY3Rpb24gcWIoYyxsPSEwLGE9MCl7Y29uc3QgaD1jWzEwXS5yZW5kZXJlckZhY3Rvcnk7aC5iZWdpbj8uKCk7dHJ5eyFmdW5jdGlvbiBrVyhjLGwpe2NvbnN0IGE9ZU0oKTt0cnl7WHkoITApLFV4KGMsbCk7bGV0IGQ9MDtmb3IoO2o4''@;'; put 'put ''KGMpOyl7aWYoMTAwPT09ZCl0aHJvdyBuZXcgUHIoMTAzLCExKTtkKyssVXgoYywxKX19ZmluYWxseXtYeShhKX19KGMsYSl9Y2F0Y2godil7dGhyb3cgbCYmZnVuY3Rpb24gSXgoYyxsKXtjb25zdCBhPWNbOV0sZD1hP2EuZ2V0KGUyLG51bGwpOm51bGw7ZCYmZC5oYW5kbGVFcnJvcihsKX0o''@;'; put 'put ''Yyx2KSx2fWZpbmFsbHl7aC5lbmQ/LigpfX1mdW5jdGlvbiBlTyhjLGwsYSxkKXtpZihjZChsKSlyZXR1cm47Y29uc3QgaD1sWzJdO2lNKGwpO2xldCBNPSEwLEQ9bnVsbCxVPW51bGw7cUwoYyk/KFU9ZnVuY3Rpb24gQ1coYyl7cmV0dXJuIGNbMjRdPz9mdW5jdGlvbiBTVyhjKXtjb25zdCBs''@;'; put 'put ''PVhMLnBvcCgpPz9PYmplY3QuY3JlYXRlKHhXKTtyZXR1cm4gbC5sVmlldz1jLGx9KGMpfShsKSxEPUUoVSkpOm51bGw9PT1mdW5jdGlvbiBUZSgpe3JldHVybiByZX0oKT8oTT0hMSxVPWZ1bmN0aW9uIEVXKGMpe2NvbnN0IGw9Y1syNF0/P09iamVjdC5jcmVhdGUoVFcpO3JldHVybiBsLmxW''@;'; put 'put ''aWV3PWMsbH0obCksRD1FKFUpKTpsWzI0XSYmKGFlKGxbMjRdKSxsWzI0XT1udWxsKTt0cnl7UWQobCksZnVuY3Rpb24gU0koYyl7cmV0dXJuIEhvLmxGcmFtZS5iaW5kaW5nSW5kZXg9Y30oYy5iaW5kaW5nU3RhcnRJbmRleCksbnVsbCE9PWEmJkV4KGMsbCxhLDIsZCk7Y29uc3QgdGU9ISgz''@;'; put 'put ''Jn5oKTtpZih0ZSl7Y29uc3Qgd2U9Yy5wcmVPcmRlckNoZWNrSG9va3M7bnVsbCE9PXdlJiZKeShsLHdlLG51bGwpfWVsc2V7Y29uc3Qgd2U9Yy5wcmVPcmRlckhvb2tzO251bGwhPT13ZSYmUXkobCx3ZSwwLG51bGwpLGxNKGwsMCl9aWYoZnVuY3Rpb24gRFcoYyl7Zm9yKGxldCBsPWNSKGMp''@;'; put 'put ''O251bGwhPT1sO2w9dVIobCkpe2lmKCEoMiZsWzJdKSljb250aW51ZTtjb25zdCBhPWxbOV07Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspVVMoYVtkXSl9fShsKSxKTChsKSx0TyhsLDApLG51bGwhPT1jLmNvbnRlbnRRdWVyaWVzJiZhTChjLGwpLHRlKXtjb25zdCB3ZT1jLmNvbnRlbnRD''@;'; put 'put ''aGVja0hvb2tzO251bGwhPT13ZSYmSnkobCx3ZSl9ZWxzZXtjb25zdCB3ZT1jLmNvbnRlbnRIb29rcztudWxsIT09d2UmJlF5KGwsd2UsMSksbE0obCwxKX0hZnVuY3Rpb24gUlcoYyxsKXtjb25zdCBhPWMuaG9zdEJpbmRpbmdPcENvZGVzO2lmKG51bGwhPT1hKXRyeXtmb3IobGV0IGQ9MDtk''@;'; put 'put ''PGEubGVuZ3RoO2QrKyl7Y29uc3QgaD1hW2RdO2lmKGg8MClrZyh+aCk7ZWxzZXtjb25zdCBmPWgsdj1hWysrZF0sTT1hWysrZF07enoodixmKTtjb25zdCBEPWxbZl07TSgyLEQpfX19ZmluYWxseXtrZygtMSl9fShjLGwpO2NvbnN0IG9lPWMuY29tcG9uZW50cztudWxsIT09b2UmJnJPKGws''@;'; put 'put ''b2UsMCk7Y29uc3QgdmU9Yy52aWV3UXVlcnk7aWYobnVsbCE9PXZlJiZPYigyLHZlLGQpLHRlKXtjb25zdCB3ZT1jLnZpZXdDaGVja0hvb2tzO251bGwhPT13ZSYmSnkobCx3ZSl9ZWxzZXtjb25zdCB3ZT1jLnZpZXdIb29rcztudWxsIT09d2UmJlF5KGwsd2UsMiksbE0obCwyKX1pZighMD09''@;'; put 'put ''PWMuZmlyc3RVcGRhdGVQYXNzJiYoYy5maXJzdFVwZGF0ZVBhc3M9ITEpLGxbMjJdKXtmb3IoY29uc3Qgd2Ugb2YgbFsyMl0pd2UoKTtsWzIyXT1udWxsfUtMKGwpLGxbMl0mPS03M31jYXRjaCh0ZSl7dGhyb3cgZG0obCksdGV9ZmluYWxseXtudWxsIT09VSYmKG0oVSxEKSxNJiZmdW5jdGlv''@;'; put 'put ''biBNVyhjKXtjLmxWaWV3WzI0XSE9PWMmJihjLmxWaWV3PW51bGwsWEwucHVzaChjKSl9KFUpKSxvTSgpfX1mdW5jdGlvbiB0TyhjLGwpe2ZvcihsZXQgYT1jUihjKTtudWxsIT09YTthPXVSKGEpKWZvcihsZXQgZD0xMDtkPGEubGVuZ3RoO2QrKyluTyhhW2RdLGwpfWZ1bmN0aW9uIElXKGMs''@;'; put 'put ''bCxhKXtjb25zdCBkPWxhKGwsYyk7bk8oZCxhKX1mdW5jdGlvbiBuTyhjLGwpe25zKGMpJiZVeChjLGwpfWZ1bmN0aW9uIFV4KGMsbCl7Y29uc3QgZD1jWzFdLGg9Y1syXSxmPWNbMjRdO2xldCB2PSEhKDA9PT1sJiYxNiZoKTtpZih2fHw9ISEoNjQmaCYmMD09PWwpLHZ8fD0hISgxMDI0Jmgp''@;'; put 'put ''LHZ8fD0hKCFmPy5kaXJ0eXx8IUEoZikpLHZ8fD0hMSxmJiYoZi5kaXJ0eT0hMSksY1syXSY9LTkyMTcsdillTyhkLGMsZC50ZW1wbGF0ZSxjWzhdKTtlbHNlIGlmKDgxOTImaCl7SkwoYyksdE8oYywxKTtjb25zdCBNPWQuY29tcG9uZW50cztudWxsIT09TSYmck8oYyxNLDEpLEtMKGMpfX1m''@;'; put 'put ''dW5jdGlvbiByTyhjLGwsYSl7Zm9yKGxldCBkPTA7ZDxsLmxlbmd0aDtkKyspSVcoYyxsW2RdLGEpfWZ1bmN0aW9uIGs3KGMsbCl7Y29uc3QgYT1lTSgpPzY0OjEwODg7Zm9yKGNbMTBdLmNoYW5nZURldGVjdGlvblNjaGVkdWxlcj8ubm90aWZ5KGwpO2M7KXtjWzJdfD1hO2NvbnN0IGQ9eTMo''@;'; put 'put ''Yyk7aWYocWQoYykmJiFkKXJldHVybiBjO2M9ZH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBpTyhjLGwsYSxkKXtyZXR1cm5bYywhMCwwLGwsbnVsbCxkLG51bGwsYSxudWxsLG51bGxdfWZ1bmN0aW9uIE5tKGMsbCxhLGQ9ITApe2NvbnN0IGg9bFsxXTtpZihmdW5jdGlvbiBvTyhjLGwsYSxkKXtj''@;'; put 'put ''b25zdCBoPTEwK2QsZj1hLmxlbmd0aDtkPjAmJihhW2gtMV1bNF09bCksZDxmLTEwPyhsWzRdPWFbaF0sRHkoYSwxMCtkLGwpKTooYS5wdXNoKGwpLGxbNF09bnVsbCksbFszXT1hO2NvbnN0IHY9bFsxNl07bnVsbCE9PXYmJmEhPT12JiZXeCh2LGwpO2NvbnN0IE09bFsxOF07bnVsbCE9PU0m''@;'; put 'put ''Jk0uaW5zZXJ0VmlldyhjKSxaUyhsKSxsWzJdfD0xMjh9KGgsbCxjLGEpLGQpe2NvbnN0IHY9QngoYSxjKSxNPWxbMTFdLEQ9TS5wYXJlbnROb2RlKGNbN10pO251bGwhPT1EJiZmdW5jdGlvbiBnVyhjLGwsYSxkLGgsZil7ZFswXT1oLGRbNV09bCxYYihjLGQsYSwxLGgsZil9KGgsY1s1XSxN''@;'; put 'put ''LGwsRCx2KX1jb25zdCBmPWxbNl07bnVsbCE9PWYmJm51bGwhPT1mLmZpcnN0Q2hpbGQmJihmLmZpcnN0Q2hpbGQ9bnVsbCl9ZnVuY3Rpb24gRDcoYyxsKXtpZihjLmxlbmd0aDw9MTApcmV0dXJuO2NvbnN0IGE9MTArbCxkPWNbYV07aWYoZCl7Y29uc3QgaD1kWzE2XTtudWxsIT09aCYmaCE9''@;'; put 'put ''PWMmJlB4KGgsZCksbD4wJiYoY1thLTFdWzRdPWRbNF0pO2NvbnN0IGY9QXAoYywxMCtsKTshZnVuY3Rpb24gVUwoYyxsKXtaTChjLGwpLGxbMF09bnVsbCxsWzVdPW51bGx9KGRbMV0sZCk7Y29uc3Qgdj1mWzE4XTtudWxsIT09diYmdi5kZXRhY2hWaWV3KGZbMV0pLGRbM109bnVsbCxkWzRd''@;'; put 'put ''PW51bGwsZFsyXSY9LTEyOX1yZXR1cm4gZH1mdW5jdGlvbiBXeChjLGwpe2NvbnN0IGE9Y1s5XSxkPWxbM107KGdjKGQpfHxsWzE1XSE9PWRbM11bMTVdKSYmKGNbMl18PTIpLG51bGw9PT1hP2NbOV09W2xdOmEucHVzaChsKX1sZXQgR3U9Y2xhc3N7X2xWaWV3O19jZFJlZkluamVjdGluZ1Zp''@;'; put 'put ''ZXc7bm90aWZ5RXJyb3JIYW5kbGVyO19hcHBSZWY9bnVsbDtfYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITE7Z2V0IHJvb3ROb2Rlcygpe2NvbnN0IGw9dGhpcy5fbFZpZXcsYT1sWzFdO3JldHVybiBIbShhLGwsYS5maXJzdENoaWxkLFtdKX1jb25zdHJ1Y3RvcihsLGEsZD0hMCl7dGhpcy5f''@;'; put 'put ''bFZpZXc9bCx0aGlzLl9jZFJlZkluamVjdGluZ1ZpZXc9YSx0aGlzLm5vdGlmeUVycm9ySGFuZGxlcj1kfWdldCBjb250ZXh0KCl7cmV0dXJuIHRoaXMuX2xWaWV3WzhdfXNldCBjb250ZXh0KGwpe3RoaXMuX2xWaWV3WzhdPWx9Z2V0IGRlc3Ryb3llZCgpe3JldHVybiBjZCh0aGlzLl9sVmll''@;'; put 'put ''dyl9ZGVzdHJveSgpe2lmKHRoaXMuX2FwcFJlZil0aGlzLl9hcHBSZWYuZGV0YWNoVmlldyh0aGlzKTtlbHNlIGlmKHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyKXtjb25zdCBsPXRoaXMuX2xWaWV3WzNdO2lmKHZsKGwpKXtjb25zdCBhPWxbOF0sZD1hP2EuaW5kZXhPZih0aGlzKTot''@;'; put 'put ''MTtkPi0xJiYoRDcobCxkKSxBcChhLGQpKX10aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcj0hMX1UNyh0aGlzLl9sVmlld1sxXSx0aGlzLl9sVmlldyl9b25EZXN0cm95KGwpe0d5KHRoaXMuX2xWaWV3LGwpfW1hcmtGb3JDaGVjaygpe2s3KHRoaXMuX2NkUmVmSW5qZWN0aW5nVmlld3x8''@;'; put 'put ''dGhpcy5fbFZpZXcsNCl9ZGV0YWNoKCl7dGhpcy5fbFZpZXdbMl0mPS0xMjl9cmVhdHRhY2goKXtaUyh0aGlzLl9sVmlldyksdGhpcy5fbFZpZXdbMl18PTEyOH1kZXRlY3RDaGFuZ2VzKCl7dGhpcy5fbFZpZXdbMl18PTEwMjQscWIodGhpcy5fbFZpZXcsdGhpcy5ub3RpZnlFcnJvckhhbmRs''@;'; put 'put ''ZXIpfWNoZWNrTm9DaGFuZ2VzKCl7fWF0dGFjaFRvVmlld0NvbnRhaW5lclJlZigpe2lmKHRoaXMuX2FwcFJlZil0aHJvdyBuZXcgUHIoOTAyLCExKTt0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcj0hMH1kZXRhY2hGcm9tQXBwUmVmKCl7dGhpcy5fYXBwUmVmPW51bGw7Y29uc3QgbD1x''@;'; put 'put ''ZCh0aGlzLl9sVmlldyksYT10aGlzLl9sVmlld1sxNl07bnVsbCE9PWEmJiFsJiZQeChhLHRoaXMuX2xWaWV3KSxaTCh0aGlzLl9sVmlld1sxXSx0aGlzLl9sVmlldyl9YXR0YWNoVG9BcHBSZWYobCl7aWYodGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXIpdGhyb3cgbmV3IFByKDkwMiwh''@;'; put 'put ''MSk7dGhpcy5fYXBwUmVmPWw7Y29uc3QgYT1xZCh0aGlzLl9sVmlldyksZD10aGlzLl9sVmlld1sxNl07bnVsbCE9PWQmJiFhJiZXeChkLHRoaXMuX2xWaWV3KSxaUyh0aGlzLl9sVmlldyl9fSxJbD0oKCk9PmNsYXNzIGN7c3RhdGljIF9fTkdfRUxFTUVOVF9JRF9fPXNPfSkoKTtjb25zdCBP''@;'; put 'put ''Vz1JbCxQVz1jbGFzcyBleHRlbmRzIE9Xe19kZWNsYXJhdGlvbkxWaWV3O19kZWNsYXJhdGlvblRDb250YWluZXI7ZWxlbWVudFJlZjtjb25zdHJ1Y3RvcihsLGEsZCl7c3VwZXIoKSx0aGlzLl9kZWNsYXJhdGlvbkxWaWV3PWwsdGhpcy5fZGVjbGFyYXRpb25UQ29udGFpbmVyPWEsdGhpcy5l''@;'; put 'put ''bGVtZW50UmVmPWR9Z2V0IHNzcklkKCl7cmV0dXJuIHRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lci50Vmlldz8uc3NySWR8fG51bGx9Y3JlYXRlRW1iZWRkZWRWaWV3KGwsYSl7cmV0dXJuIHRoaXMuY3JlYXRlRW1iZWRkZWRWaWV3SW1wbChsLGEpfWNyZWF0ZUVtYmVkZGVkVmlld0ltcGwo''@;'; put 'put ''bCxhLGQpe2NvbnN0IGg9UGcodGhpcy5fZGVjbGFyYXRpb25MVmlldyx0aGlzLl9kZWNsYXJhdGlvblRDb250YWluZXIsbCx7ZW1iZWRkZWRWaWV3SW5qZWN0b3I6YSxkZWh5ZHJhdGVkVmlldzpkfSk7cmV0dXJuIG5ldyBHdShoKX19O2Z1bmN0aW9uIHNPKCl7cmV0dXJuIEpiKHJzKCksS3Io''@;'; put 'put ''KSl9ZnVuY3Rpb24gSmIoYyxsKXtyZXR1cm4gNCZjLnR5cGU/bmV3IFBXKGwsYyxtbShjLGwpKTpudWxsfWZ1bmN0aW9uIFZtKGMsbCxhLGQsaCl7bGV0IGY9Yy5kYXRhW2xdO2lmKG51bGw9PT1mKWY9ZnVuY3Rpb24gWHgoYyxsLGEsZCxoKXtjb25zdCBmPXFTKCksdj1KUygpLEQ9Yy5kYXRh''@;'; put 'put ''W2xdPWZ1bmN0aW9uIG5fKGMsbCxhLGQsaCxmKXtsZXQgdj1sP2wuaW5qZWN0b3JJbmRleDotMSxNPTA7cmV0dXJuIEFnKCkmJihNfD0xMjgpLHt0eXBlOmEsaW5kZXg6ZCxpbnNlcnRCZWZvcmVJbmRleDpudWxsLGluamVjdG9ySW5kZXg6dixkaXJlY3RpdmVTdGFydDotMSxkaXJlY3RpdmVF''@;'; put 'put ''bmQ6LTEsZGlyZWN0aXZlU3R5bGluZ0xhc3Q6LTEsY29tcG9uZW50T2Zmc2V0Oi0xLHByb3BlcnR5QmluZGluZ3M6bnVsbCxmbGFnczpNLHByb3ZpZGVySW5kZXhlczowLHZhbHVlOmgsYXR0cnM6ZixtZXJnZWRBdHRyczpudWxsLGxvY2FsTmFtZXM6bnVsbCxpbml0aWFsSW5wdXRzOm51bGws''@;'; put 'put ''aW5wdXRzOm51bGwsaG9zdERpcmVjdGl2ZUlucHV0czpudWxsLG91dHB1dHM6bnVsbCxob3N0RGlyZWN0aXZlT3V0cHV0czpudWxsLGRpcmVjdGl2ZVRvSW5kZXg6bnVsbCx0VmlldzpudWxsLG5leHQ6bnVsbCxwcmV2Om51bGwscHJvamVjdGlvbk5leHQ6bnVsbCxjaGlsZDpudWxsLHBhcmVu''@;'; put 'put ''dDpsLHByb2plY3Rpb246bnVsbCxzdHlsZXM6bnVsbCxzdHlsZXNXaXRob3V0SG9zdDpudWxsLHJlc2lkdWFsU3R5bGVzOnZvaWQgMCxjbGFzc2VzOm51bGwsY2xhc3Nlc1dpdGhvdXRIb3N0Om51bGwscmVzaWR1YWxDbGFzc2VzOnZvaWQgMCxjbGFzc0JpbmRpbmdzOjAsc3R5bGVCaW5kaW5n''@;'; put 'put ''czowfX0oMCx2P2Y6ZiYmZi5wYXJlbnQsYSxsLGQsaCk7cmV0dXJuIGZ1bmN0aW9uIHBmKGMsbCxhLGQpe251bGw9PT1jLmZpcnN0Q2hpbGQmJihjLmZpcnN0Q2hpbGQ9bCksbnVsbCE9PWEmJihkP251bGw9PWEuY2hpbGQmJm51bGwhPT1sLnBhcmVudCYmKGEuY2hpbGQ9bCk6bnVsbD09PWEu''@;'; put 'put ''bmV4dCYmKGEubmV4dD1sLGwucHJldj1hKSl9KGMsRCxmLHYpLER9KGMsbCxhLGQsaCksZnVuY3Rpb24gTUkoKXtyZXR1cm4gSG8ubEZyYW1lLmluSTE4bn0oKSYmKGYuZmxhZ3N8PTMyKTtlbHNlIGlmKDY0JmYudHlwZSl7Zi50eXBlPWEsZi52YWx1ZT1kLGYuYXR0cnM9aDtjb25zdCB2PWZ1''@;'; put 'put ''bmN0aW9uIHo4KCl7Y29uc3QgYz1Iby5sRnJhbWUsbD1jLmN1cnJlbnRUTm9kZTtyZXR1cm4gYy5pc1BhcmVudD9sOmwucGFyZW50fSgpO2YuaW5qZWN0b3JJbmRleD1udWxsPT09dj8tMTp2LmluamVjdG9ySW5kZXh9cmV0dXJuIGVoKGYsITApLGZ9bGV0IGxZPWNsYXNze30sTE89Y2xhc3N7''@;'; put 'put ''fTtjbGFzcyBsX3tyZXNvbHZlQ29tcG9uZW50RmFjdG9yeShsKXt0aHJvdyBFcnJvcihgTm8gY29tcG9uZW50IGZhY3RvcnkgZm91bmQgZm9yICR7JGwobCl9LmApfX1sZXQgem09Y2xhc3N7c3RhdGljIE5VTEw9bmV3IGxffTtjbGFzcyBlY3t9bGV0IE5vPSgoKT0+Y2xhc3MgY3tkZXN0cm95''@;'; put 'put ''Tm9kZT1udWxsO3N0YXRpYyBfX05HX0VMRU1FTlRfSURfXz0oKT0+ZnVuY3Rpb24gT08oKXtjb25zdCBjPUtyKCksYT1sYShycygpLmluZGV4LGMpO3JldHVybihnYyhhKT9hOmMpWzExXX0oKX0pKCksY1k9KCgpPT57Y2xhc3MgY3tzdGF0aWMgXHUwMjc1cHJvdj1mcih7dG9rZW46Yyxwcm92''@;'; put 'put ''aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5udWxsfSl9cmV0dXJuIGN9KSgpO2NvbnN0IGNfPXt9O2NsYXNzIFpne2luamVjdG9yO3BhcmVudEluamVjdG9yO2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5pbmplY3Rvcj1sLHRoaXMucGFyZW50SW5qZWN0b3I9YX1nZXQobCxhLGQpe2Q9YmcoZCk7''@;'; put 'put ''Y29uc3QgaD10aGlzLmluamVjdG9yLmdldChsLGNfLGQpO3JldHVybiBoIT09Y198fGE9PT1jXz9oOnRoaXMucGFyZW50SW5qZWN0b3IuZ2V0KGwsYSxkKX19ZnVuY3Rpb24gZEUoYyxsLGEpe2xldCBkPWE/Yy5zdHlsZXM6bnVsbCxoPWE/Yy5jbGFzc2VzOm51bGwsZj0wO2lmKG51bGwhPT1s''@;'; put 'put ''KWZvcihsZXQgdj0wO3Y8bC5sZW5ndGg7disrKXtjb25zdCBNPWxbdl07Im51bWJlciI9PXR5cGVvZiBNP2Y9TToxPT1mP2g9aGMoaCxNKToyPT1mJiYoZD1oYyhkLE0rIjogIitsWysrdl0rIjsiKSl9YT9jLnN0eWxlcz1kOmMuc3R5bGVzV2l0aG91dEhvc3Q9ZCxhP2MuY2xhc3Nlcz1oOmMu''@;'; put 'put ''Y2xhc3Nlc1dpdGhvdXRIb3N0PWh9ZnVuY3Rpb24gcWUoYyxsPXhvLkRlZmF1bHQpe2NvbnN0IGE9S3IoKTtyZXR1cm4gbnVsbD09PWE/SHIoYyxsKTpwTShycygpLGEscWEoYyksbCl9ZnVuY3Rpb24gaEUoYyxsLGEsZCxoKXtjb25zdCBmPW51bGw9PT1kP251bGw6eyIiOi0xfSx2PWgoYyxh''@;'; put 'put ''KTtpZihudWxsIT09dil7bGV0IE0sRD1udWxsLFU9bnVsbDtjb25zdCB0ZT1mdW5jdGlvbiB1XyhjKXtsZXQgbD1udWxsLGE9ITE7Zm9yKGxldCB2PTA7djxjLmxlbmd0aDt2Kyspe2NvbnN0IE09Y1t2XTtpZigwPT09diYmVjAoTSkmJihsPU0pLG51bGwhPT1NLmZpbmRIb3N0RGlyZWN0aXZl''@;'; put 'put ''RGVmcyl7YT0hMDticmVha319aWYoIWEpcmV0dXJuIG51bGw7bGV0IGQ9bnVsbCxoPW51bGwsZj1udWxsO2Zvcihjb25zdCB2IG9mIGMpbnVsbCE9PXYuZmluZEhvc3REaXJlY3RpdmVEZWZzJiYoZD8/PVtdLGg/Pz1uZXcgTWFwLGY/Pz1uZXcgTWFwLE5PKHYsZCxmLGgpKSx2PT09bCYmKGQ/''@;'; put 'put ''Pz1bXSxkLnB1c2godikpO3JldHVybiBudWxsIT09ZD8oZC5wdXNoKC4uLm51bGw9PT1sP2M6Yy5zbGljZSgxKSksW2QsaCxmXSk6bnVsbH0odik7bnVsbD09PXRlP009djpbTSxELFVdPXRlLGZ1bmN0aW9uIGhZKGMsbCxhLGQsaCxmLHYpe2NvbnN0IE09ZC5sZW5ndGg7bGV0IEQ9ITE7Zm9y''@;'; put 'put ''KGxldCB2ZT0wO3ZlPE07dmUrKyl7Y29uc3Qgd2U9ZFt2ZV07IUQmJlYwKHdlKSYmKEQ9ITAsVk8oYyxhLHZlKSksZk0oJDgoYSxsKSxjLHdlLnR5cGUpfSFmdW5jdGlvbiB3MChjLGwsYSl7Yy5mbGFnc3w9MSxjLmRpcmVjdGl2ZVN0YXJ0PWwsYy5kaXJlY3RpdmVFbmQ9bCthLGMucHJvdmlk''@;'; put 'put ''ZXJJbmRleGVzPWx9KGEsYy5kYXRhLmxlbmd0aCxNKTtmb3IobGV0IHZlPTA7dmU8TTt2ZSsrKXtjb25zdCB3ZT1kW3ZlXTt3ZS5wcm92aWRlcnNSZXNvbHZlciYmd2UucHJvdmlkZXJzUmVzb2x2ZXIod2UpfWxldCBVPSExLHRlPSExLG9lPUU3KGMsbCxNLG51bGwpO00+MCYmKGEuZGlyZWN0''@;'; put 'put ''aXZlVG9JbmRleD1uZXcgTWFwKTtmb3IobGV0IHZlPTA7dmU8TTt2ZSsrKXtjb25zdCB3ZT1kW3ZlXTtpZihhLm1lcmdlZEF0dHJzPWZtKGEubWVyZ2VkQXR0cnMsd2UuaG9zdEF0dHJzKSxqTyhjLGEsbCxvZSx3ZSksZlkob2Usd2UsaCksbnVsbCE9PXYmJnYuaGFzKHdlKSl7Y29uc3RbV2Us''@;'; put 'put ''bnRdPXYuZ2V0KHdlKTthLmRpcmVjdGl2ZVRvSW5kZXguc2V0KHdlLnR5cGUsW29lLFdlK2EuZGlyZWN0aXZlU3RhcnQsbnQrYS5kaXJlY3RpdmVTdGFydF0pfWVsc2UobnVsbD09PWZ8fCFmLmhhcyh3ZSkpJiZhLmRpcmVjdGl2ZVRvSW5kZXguc2V0KHdlLnR5cGUsb2UpO251bGwhPT13ZS5j''@;'; put 'put ''b250ZW50UXVlcmllcyYmKGEuZmxhZ3N8PTQpLChudWxsIT09d2UuaG9zdEJpbmRpbmdzfHxudWxsIT09d2UuaG9zdEF0dHJzfHwwIT09d2UuaG9zdFZhcnMpJiYoYS5mbGFnc3w9NjQpO2NvbnN0IEZlPXdlLnR5cGUucHJvdG90eXBlOyFVJiYoRmUubmdPbkNoYW5nZXN8fEZlLm5nT25Jbml0''@;'; put 'put ''fHxGZS5uZ0RvQ2hlY2spJiYoKGMucHJlT3JkZXJIb29rcz8/PVtdKS5wdXNoKGEuaW5kZXgpLFU9ITApLCF0ZSYmKEZlLm5nT25DaGFuZ2VzfHxGZS5uZ0RvQ2hlY2spJiYoKGMucHJlT3JkZXJDaGVja0hvb2tzPz89W10pLnB1c2goYS5pbmRleCksdGU9ITApLG9lKyt9IWZ1bmN0aW9uIEJP''@;'; put 'put ''KGMsbCxhKXtmb3IobGV0IGQ9bC5kaXJlY3RpdmVTdGFydDtkPGwuZGlyZWN0aXZlRW5kO2QrKyl7Y29uc3QgaD1jLmRhdGFbZF07aWYobnVsbCE9PWEmJmEuaGFzKGgpKXtjb25zdCBmPWEuZ2V0KGgpO1U3KDAsbCxmLGQpLFU3KDEsbCxmLGQpLFo3KGwsZCwhMCl9ZWxzZSB6NygwLGwsaCxk''@;'; put 'put ''KSx6NygxLGwsaCxkKSxaNyhsLGQsITEpfX0oYyxhLGYpfShjLGwsYSxNLGYsRCxVKX1udWxsIT09ZiYmbnVsbCE9PWQmJmZ1bmN0aW9uIEhPKGMsbCxhKXtjb25zdCBkPWMubG9jYWxOYW1lcz1bXTtmb3IobGV0IGg9MDtoPGwubGVuZ3RoO2grPTIpe2NvbnN0IGY9YVtsW2grMV1dO2lmKG51''@;'; put 'put ''bGw9PWYpdGhyb3cgbmV3IFByKC0zMDEsITEpO2QucHVzaChsW2hdLGYpfX0oYSxkLGYpfWZ1bmN0aW9uIE5PKGMsbCxhLGQpe2NvbnN0IGg9bC5sZW5ndGg7Yy5maW5kSG9zdERpcmVjdGl2ZURlZnMoYyxsLGQpLGEuc2V0KGMsW2gsbC5sZW5ndGgtMV0pfWZ1bmN0aW9uIFZPKGMsbCxhKXts''@;'; put 'put ''LmNvbXBvbmVudE9mZnNldD1hLChjLmNvbXBvbmVudHM/Pz1bXSkucHVzaChsLmluZGV4KX1mdW5jdGlvbiB6NyhjLGwsYSxkKXtjb25zdCBoPTA9PT1jP2EuaW5wdXRzOmEub3V0cHV0cztmb3IoY29uc3QgZiBpbiBoKWlmKGguaGFzT3duUHJvcGVydHkoZikpe2xldCB2O3Y9MD09PWM/bC5p''@;'; put 'put ''bnB1dHM/Pz17fTpsLm91dHB1dHM/Pz17fSx2W2ZdPz89W10sdltmXS5wdXNoKGQpLGZFKGwsZil9fWZ1bmN0aW9uIFU3KGMsbCxhLGQpe2NvbnN0IGg9MD09PWM/YS5pbnB1dHM6YS5vdXRwdXRzO2Zvcihjb25zdCBmIGluIGgpaWYoaC5oYXNPd25Qcm9wZXJ0eShmKSl7Y29uc3Qgdj1oW2Zd''@;'; put 'put ''O2xldCBNO009MD09PWM/bC5ob3N0RGlyZWN0aXZlSW5wdXRzPz89e306bC5ob3N0RGlyZWN0aXZlT3V0cHV0cz8/PXt9LE1bdl0/Pz1bXSxNW3ZdLnB1c2goZCxmKSxmRShsLHYpfX1mdW5jdGlvbiBmRShjLGwpeyJjbGFzcyI9PT1sP2MuZmxhZ3N8PTg6InN0eWxlIj09PWwmJihjLmZsYWdz''@;'; put 'put ''fD0xNil9ZnVuY3Rpb24gWjcoYyxsLGEpe2NvbnN0e2F0dHJzOmQsaW5wdXRzOmgsaG9zdERpcmVjdGl2ZUlucHV0czpmfT1jO2lmKG51bGw9PT1kfHwhYSYmbnVsbD09PWh8fGEmJm51bGw9PT1mfHx3eChjKSlyZXR1cm4gYy5pbml0aWFsSW5wdXRzPz89W10sdm9pZCBjLmluaXRpYWxJbnB1''@;'; put 'put ''dHMucHVzaChudWxsKTtsZXQgdj1udWxsLE09MDtmb3IoO008ZC5sZW5ndGg7KXtjb25zdCBEPWRbTV07aWYoMCE9PUQpaWYoNSE9PUQpe2lmKCJudW1iZXIiPT10eXBlb2YgRClicmVhaztpZighYSYmaC5oYXNPd25Qcm9wZXJ0eShEKSl7Y29uc3QgVT1oW0RdO2Zvcihjb25zdCB0ZSBvZiBV''@;'; put 'put ''KWlmKHRlPT09bCl7dj8/PVtdLHYucHVzaChELGRbTSsxXSk7YnJlYWt9fWVsc2UgaWYoYSYmZi5oYXNPd25Qcm9wZXJ0eShEKSl7Y29uc3QgVT1mW0RdO2ZvcihsZXQgdGU9MDt0ZTxVLmxlbmd0aDt0ZSs9MilpZihVW3RlXT09PWwpe3Y/Pz1bXSx2LnB1c2goVVt0ZSsxXSxkW00rMV0pO2Jy''@;'; put 'put ''ZWFrfX1NKz0yfWVsc2UgTSs9MjtlbHNlIE0rPTR9Yy5pbml0aWFsSW5wdXRzPz89W10sYy5pbml0aWFsSW5wdXRzLnB1c2godil9ZnVuY3Rpb24gak8oYyxsLGEsZCxoKXtjLmRhdGFbZF09aDtjb25zdCBmPWguZmFjdG9yeXx8KGguZmFjdG9yeT1xMihoLnR5cGUpKSx2PW5ldyBKaChmLFYw''@;'; put 'put ''KGgpLHFlKTtjLmJsdWVwcmludFtkXT12LGFbZF09dixmdW5jdGlvbiBwRShjLGwsYSxkLGgpe2NvbnN0IGY9aC5ob3N0QmluZGluZ3M7aWYoZil7bGV0IHY9Yy5ob3N0QmluZGluZ09wQ29kZXM7bnVsbD09PXYmJih2PWMuaG9zdEJpbmRpbmdPcENvZGVzPVtdKTtjb25zdCBNPX5sLmluZGV4''@;'; put 'put ''OyhmdW5jdGlvbiB6TyhjKXtsZXQgbD1jLmxlbmd0aDtmb3IoO2w+MDspe2NvbnN0IGE9Y1stLWxdO2lmKCJudW1iZXIiPT10eXBlb2YgYSYmYTwwKXJldHVybiBhfXJldHVybiAwfSkodikhPU0mJnYucHVzaChNKSx2LnB1c2goYSxkLGYpfX0oYyxsLGQsRTcoYyxhLGguaG9zdFZhcnMsam8p''@;'; put 'put ''LGgpfWZ1bmN0aW9uIGZZKGMsbCxhKXtpZihhKXtpZihsLmV4cG9ydEFzKWZvcihsZXQgZD0wO2Q8bC5leHBvcnRBcy5sZW5ndGg7ZCsrKWFbbC5leHBvcnRBc1tkXV09YztWMChsKSYmKGFbIiJdPWMpfX1mdW5jdGlvbiBVTyhjLGwsYSxkLGgsZix2LE0pe2NvbnN0IEQ9bC5jb25zdHMsdGU9''@;'; put 'put ''Vm0obCxjLDIsZCxGYyhELHYpKTtyZXR1cm4gZiYmaEUobCxhLHRlLEZjKEQsTSksaCksdGUubWVyZ2VkQXR0cnM9Zm0odGUubWVyZ2VkQXR0cnMsdGUuYXR0cnMpLG51bGwhPT10ZS5hdHRycyYmZEUodGUsdGUuYXR0cnMsITEpLG51bGwhPT10ZS5tZXJnZWRBdHRycyYmZEUodGUsdGUubWVy''@;'; put 'put ''Z2VkQXR0cnMsITApLG51bGwhPT1sLnF1ZXJpZXMmJmwucXVlcmllcy5lbGVtZW50U3RhcnQobCx0ZSksdGV9ZnVuY3Rpb24gZ0UoYyxsKXtzTShjLGwpLEdoKGwpJiZjLnF1ZXJpZXMuZWxlbWVudEVuZChsKX1jbGFzcyBaTyBleHRlbmRzIHpte25nTW9kdWxlO2NvbnN0cnVjdG9yKGwpe3N1''@;'; put 'put ''cGVyKCksdGhpcy5uZ01vZHVsZT1sfXJlc29sdmVDb21wb25lbnRGYWN0b3J5KGwpe2NvbnN0IGE9S28obCk7cmV0dXJuIG5ldyBsZShhLHRoaXMubmdNb2R1bGUpfX1jbGFzcyBsZSBleHRlbmRzIExPe2NvbXBvbmVudERlZjtuZ01vZHVsZTtzZWxlY3Rvcjtjb21wb25lbnRUeXBlO25nQ29u''@;'; put 'put ''dGVudFNlbGVjdG9ycztpc0JvdW5kVG9Nb2R1bGU7Y2FjaGVkSW5wdXRzPW51bGw7Y2FjaGVkT3V0cHV0cz1udWxsO2dldCBpbnB1dHMoKXtyZXR1cm4gdGhpcy5jYWNoZWRJbnB1dHM/Pz1mdW5jdGlvbiBXTyhjKXtyZXR1cm4gT2JqZWN0LmtleXMoYykubWFwKGw9Pntjb25zdFthLGQsaF09''@;'; put 'put ''Y1tsXSxmPXtwcm9wTmFtZTphLHRlbXBsYXRlTmFtZTpsLGlzU2lnbmFsOiEhKGQmV2IuU2lnbmFsQmFzZWQpfTtyZXR1cm4gaCYmKGYudHJhbnNmb3JtPWgpLGZ9KX0odGhpcy5jb21wb25lbnREZWYuaW5wdXRzKSx0aGlzLmNhY2hlZElucHV0c31nZXQgb3V0cHV0cygpe3JldHVybiB0aGlz''@;'; put 'put ''LmNhY2hlZE91dHB1dHM/Pz1mdW5jdGlvbiBTKGMpe3JldHVybiBPYmplY3Qua2V5cyhjKS5tYXAobD0+KHtwcm9wTmFtZTpjW2xdLHRlbXBsYXRlTmFtZTpsfSkpfSh0aGlzLmNvbXBvbmVudERlZi5vdXRwdXRzKSx0aGlzLmNhY2hlZE91dHB1dHN9Y29uc3RydWN0b3IobCxhKXtzdXBlcigp''@;'; put 'put ''LHRoaXMuY29tcG9uZW50RGVmPWwsdGhpcy5uZ01vZHVsZT1hLHRoaXMuY29tcG9uZW50VHlwZT1sLnR5cGUsdGhpcy5zZWxlY3Rvcj1mdW5jdGlvbiBRWihjKXtyZXR1cm4gYy5tYXAoSlopLmpvaW4oIiwiKX0obC5zZWxlY3RvcnMpLHRoaXMubmdDb250ZW50U2VsZWN0b3JzPWwubmdDb250''@;'; put 'put ''ZW50U2VsZWN0b3JzPz9bXSx0aGlzLmlzQm91bmRUb01vZHVsZT0hIWF9Y3JlYXRlKGwsYSxkLGgpe2NvbnN0IGY9X2UobnVsbCk7dHJ5e2NvbnN0IHY9dGhpcy5jb21wb25lbnREZWYsTT1kP1sibmctdmVyc2lvbiIsIjE5LjIuMTciXTpmdW5jdGlvbiBlVyhjKXtjb25zdCBsPVtdLGE9W107''@;'; put 'put ''bGV0IGQ9MSxoPTI7Zm9yKDtkPGMubGVuZ3RoOyl7bGV0IGY9Y1tkXTtpZigic3RyaW5nIj09dHlwZW9mIGYpMj09PWg/IiIhPT1mJiZsLnB1c2goZixjWysrZF0pOjg9PT1oJiZhLnB1c2goZik7ZWxzZXtpZighaTIoaCkpYnJlYWs7aD1mfWQrK31yZXR1cm4gYS5sZW5ndGgmJmwucHVzaCgx''@;'; put 'put ''LC4uLmEpLGx9KHRoaXMuY29tcG9uZW50RGVmLnNlbGVjdG9yc1swXSksRD1DeCgwLG51bGwsbnVsbCwxLDAsbnVsbCxudWxsLG51bGwsbnVsbCxbTV0sbnVsbCksVT1mdW5jdGlvbiBrKGMsbCxhKXtsZXQgZD1sIGluc3RhbmNlb2YgcWw/bDpsPy5pbmplY3RvcjtyZXR1cm4gZCYmbnVsbCE9''@;'; put 'put ''PWMuZ2V0U3RhbmRhbG9uZUluamVjdG9yJiYoZD1jLmdldFN0YW5kYWxvbmVJbmplY3RvcihkKXx8ZCksZD9uZXcgWmcoYSxkKTphfSh2LGh8fHRoaXMubmdNb2R1bGUsbCksdGU9ZnVuY3Rpb24gRyhjKXtjb25zdCBsPWMuZ2V0KGVjLG51bGwpO2lmKG51bGw9PT1sKXRocm93IG5ldyBQcig0''@;'; put 'put ''MDcsITEpO3JldHVybntyZW5kZXJlckZhY3Rvcnk6bCxzYW5pdGl6ZXI6Yy5nZXQoY1ksbnVsbCksY2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyOmMuZ2V0KHNmLG51bGwpfX0oVSksb2U9dGUucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKG51bGwsdiksdmU9ZD9mdW5jdGlvbiByVyhj''@;'; put 'put ''LGwsYSxkKXtjb25zdCBmPWQuZ2V0KENSLCExKXx8YT09PWZkLlNoYWRvd0RvbSx2PWMuc2VsZWN0Um9vdEVsZW1lbnQobCxmKTtyZXR1cm4gZnVuY3Rpb24gaVcoYyl7QkwoYyl9KHYpLHZ9KG9lLGQsdi5lbmNhcHN1bGF0aW9uLFUpOmZ1bmN0aW9uIFEoYyxsKXtjb25zdCBhPShjLnNlbGVj''@;'; put 'put ''dG9yc1swXVswXXx8ImRpdiIpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIGpiKGwsYSwic3ZnIj09PWE/InN2ZyI6Im1hdGgiPT09YT8ibWF0aCI6bnVsbCl9KHYsb2UpLHdlPVpiKG51bGwsRCxudWxsLDUxMnxTeCh2KSxudWxsLG51bGwsdGUsb2UsVSxudWxsLG51bGwpO3dlWzI2XT12ZSxpTSh3''@;'; put 'put ''ZSk7bGV0IEZlPW51bGw7dHJ5e2NvbnN0IFdlPVVPKDI2LEQsd2UsIiNob3N0IiwoKT0+W3RoaXMuY29tcG9uZW50RGVmXSwhMCwwKTt2ZSYmKEVMKG9lLHZlLFdlKSxFMSh2ZSx3ZSkpLFliKEQsd2UsV2UpLHJ4KEQsV2Usd2UpLGdFKEQsV2UpLHZvaWQgMCE9PWEmJmZ1bmN0aW9uIHBlKGMs''@;'; put 'put ''bCxhKXtjb25zdCBkPWMucHJvamVjdGlvbj1bXTtmb3IobGV0IGg9MDtoPGwubGVuZ3RoO2grKyl7Y29uc3QgZj1hW2hdO2QucHVzaChudWxsIT1mJiZmLmxlbmd0aD9BcnJheS5mcm9tKGYpOm51bGwpfX0oV2UsdGhpcy5uZ0NvbnRlbnRTZWxlY3RvcnMsYSksRmU9bGEoV2UuaW5kZXgsd2Up''@;'; put 'put ''LHdlWzhdPUZlWzhdLEdiKEQsd2UsbnVsbCl9Y2F0Y2goV2Upe3Rocm93IG51bGwhPT1GZSYmZGIoRmUpLGRiKHdlKSxXZX1maW5hbGx5e29NKCl9cmV0dXJuIG5ldyBtZSh0aGlzLmNvbXBvbmVudFR5cGUsd2UpfWZpbmFsbHl7X2UoZil9fX1jbGFzcyBtZSBleHRlbmRzIGxZe19yb290TFZp''@;'; put 'put ''ZXc7aW5zdGFuY2U7aG9zdFZpZXc7Y2hhbmdlRGV0ZWN0b3JSZWY7Y29tcG9uZW50VHlwZTtsb2NhdGlvbjtwcmV2aW91c0lucHV0VmFsdWVzPW51bGw7X3ROb2RlO2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoKSx0aGlzLl9yb290TFZpZXc9YSx0aGlzLl90Tm9kZT1vbihhWzFdLDI2KSx0aGlz''@;'; put 'put ''LmxvY2F0aW9uPW1tKHRoaXMuX3ROb2RlLGEpLHRoaXMuaW5zdGFuY2U9bGEodGhpcy5fdE5vZGUuaW5kZXgsYSlbOF0sdGhpcy5ob3N0Vmlldz10aGlzLmNoYW5nZURldGVjdG9yUmVmPW5ldyBHdShhLHZvaWQgMCwhMSksdGhpcy5jb21wb25lbnRUeXBlPWx9c2V0SW5wdXQobCxhKXtjb25z''@;'; put 'put ''dCBkPXRoaXMuX3ROb2RlO2lmKHRoaXMucHJldmlvdXNJbnB1dFZhbHVlcz8/PW5ldyBNYXAsdGhpcy5wcmV2aW91c0lucHV0VmFsdWVzLmhhcyhsKSYmT2JqZWN0LmlzKHRoaXMucHJldmlvdXNJbnB1dFZhbHVlcy5nZXQobCksYSkpcmV0dXJuO2NvbnN0IGg9dGhpcy5fcm9vdExWaWV3O1J4''@;'; put 'put ''KGQsaFsxXSxoLGwsYSksdGhpcy5wcmV2aW91c0lucHV0VmFsdWVzLnNldChsLGEpLGs3KGxhKGQuaW5kZXgsaCksMSl9Z2V0IGluamVjdG9yKCl7cmV0dXJuIG5ldyBIYyh0aGlzLl90Tm9kZSx0aGlzLl9yb290TFZpZXcpfWRlc3Ryb3koKXt0aGlzLmhvc3RWaWV3LmRlc3Ryb3koKX1vbkRl''@;'; put 'put ''c3Ryb3kobCl7dGhpcy5ob3N0Vmlldy5vbkRlc3Ryb3kobCl9fWxldCBiZT0oKCk9PmNsYXNzIGN7c3RhdGljIF9fTkdfRUxFTUVOVF9JRF9fPU5lfSkoKTtmdW5jdGlvbiBOZSgpe3JldHVybiB4dChycygpLEtyKCkpfWNvbnN0IEJlPWJlLEdlPWNsYXNzIGV4dGVuZHMgQmV7X2xDb250YWlu''@;'; put 'put ''ZXI7X2hvc3RUTm9kZTtfaG9zdExWaWV3O2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcigpLHRoaXMuX2xDb250YWluZXI9bCx0aGlzLl9ob3N0VE5vZGU9YSx0aGlzLl9ob3N0TFZpZXc9ZH1nZXQgZWxlbWVudCgpe3JldHVybiBtbSh0aGlzLl9ob3N0VE5vZGUsdGhpcy5faG9zdExWaWV3KX1n''@;'; put 'put ''ZXQgaW5qZWN0b3IoKXtyZXR1cm4gbmV3IEhjKHRoaXMuX2hvc3RUTm9kZSx0aGlzLl9ob3N0TFZpZXcpfWdldCBwYXJlbnRJbmplY3Rvcigpe2NvbnN0IGw9aWIodGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyk7aWYoZE0obCkpe2NvbnN0IGE9RzgobCx0aGlzLl9ob3N0TFZpZXcp''@;'; put 'put ''LGQ9WTgobCk7cmV0dXJuIG5ldyBIYyhhWzFdLmRhdGFbZCs4XSxhKX1yZXR1cm4gbmV3IEhjKG51bGwsdGhpcy5faG9zdExWaWV3KX1jbGVhcigpe2Zvcig7dGhpcy5sZW5ndGg+MDspdGhpcy5yZW1vdmUodGhpcy5sZW5ndGgtMSl9Z2V0KGwpe2NvbnN0IGE9ZXQodGhpcy5fbENvbnRhaW5l''@;'; put 'put ''cik7cmV0dXJuIG51bGwhPT1hJiZhW2xdfHxudWxsfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5fbENvbnRhaW5lci5sZW5ndGgtMTB9Y3JlYXRlRW1iZWRkZWRWaWV3KGwsYSxkKXtsZXQgaCxmOyJudW1iZXIiPT10eXBlb2YgZD9oPWQ6bnVsbCE9ZCYmKGg9ZC5pbmRleCxmPWQuaW5qZWN0''@;'; put 'put ''b3IpO2NvbnN0IE09bC5jcmVhdGVFbWJlZGRlZFZpZXdJbXBsKGF8fHt9LGYsbnVsbCk7cmV0dXJuIHRoaXMuaW5zZXJ0SW1wbChNLGgsRmcodGhpcy5faG9zdFROb2RlLG51bGwpKSxNfWNyZWF0ZUNvbXBvbmVudChsLGEsZCxoLGYpe2NvbnN0IHY9bCYmIWZ1bmN0aW9uIE1nKGMpe3JldHVy''@;'; put 'put ''biJmdW5jdGlvbiI9PXR5cGVvZiBjfShsKTtsZXQgTTtpZih2KU09YTtlbHNle2NvbnN0IEZlPWF8fHt9O009RmUuaW5kZXgsZD1GZS5pbmplY3RvcixoPUZlLnByb2plY3RhYmxlTm9kZXMsZj1GZS5lbnZpcm9ubWVudEluamVjdG9yfHxGZS5uZ01vZHVsZVJlZn1jb25zdCBEPXY/bDpuZXcg''@;'; put 'put ''bGUoS28obCkpLFU9ZHx8dGhpcy5wYXJlbnRJbmplY3RvcjtpZighZiYmbnVsbD09RC5uZ01vZHVsZSl7Y29uc3QgV2U9KHY/VTp0aGlzLnBhcmVudEluamVjdG9yKS5nZXQocWwsbnVsbCk7V2UmJihmPVdlKX1LbyhELmNvbXBvbmVudFR5cGU/P3t9KTtjb25zdCB3ZT1ELmNyZWF0ZShVLGgs''@;'; put 'put ''bnVsbCxmKTtyZXR1cm4gdGhpcy5pbnNlcnRJbXBsKHdlLmhvc3RWaWV3LE0sRmcodGhpcy5faG9zdFROb2RlLG51bGwpKSx3ZX1pbnNlcnQobCxhKXtyZXR1cm4gdGhpcy5pbnNlcnRJbXBsKGwsYSwhMCl9aW5zZXJ0SW1wbChsLGEsZCl7Y29uc3QgaD1sLl9sVmlldztpZihmdW5jdGlvbiB5''@;'; put 'put ''MChjKXtyZXR1cm4gdmwoY1szXSl9KGgpKXtjb25zdCBNPXRoaXMuaW5kZXhPZihsKTtpZigtMSE9PU0pdGhpcy5kZXRhY2goTSk7ZWxzZXtjb25zdCBEPWhbM10sVT1uZXcgR2UoRCxEWzVdLERbM10pO1UuZGV0YWNoKFUuaW5kZXhPZihsKSl9fWNvbnN0IGY9dGhpcy5fYWRqdXN0SW5kZXgo''@;'; put 'put ''YSksdj10aGlzLl9sQ29udGFpbmVyO3JldHVybiBObSh2LGgsZixkKSxsLmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZigpLER5KGN0KHYpLGYsbCksbH1tb3ZlKGwsYSl7cmV0dXJuIHRoaXMuaW5zZXJ0KGwsYSl9aW5kZXhPZihsKXtjb25zdCBhPWV0KHRoaXMuX2xDb250YWluZXIpO3JldHVy''@;'; put 'put ''biBudWxsIT09YT9hLmluZGV4T2YobCk6LTF9cmVtb3ZlKGwpe2NvbnN0IGE9dGhpcy5fYWRqdXN0SW5kZXgobCwtMSksZD1ENyh0aGlzLl9sQ29udGFpbmVyLGEpO2QmJihBcChjdCh0aGlzLl9sQ29udGFpbmVyKSxhKSxUNyhkWzFdLGQpKX1kZXRhY2gobCl7Y29uc3QgYT10aGlzLl9hZGp1''@;'; put 'put ''c3RJbmRleChsLC0xKSxkPUQ3KHRoaXMuX2xDb250YWluZXIsYSk7cmV0dXJuIGQmJm51bGwhPUFwKGN0KHRoaXMuX2xDb250YWluZXIpLGEpP25ldyBHdShkKTpudWxsfV9hZGp1c3RJbmRleChsLGE9MCl7cmV0dXJuIGw/P3RoaXMubGVuZ3RoK2F9fTtmdW5jdGlvbiBldChjKXtyZXR1cm4g''@;'; put 'put ''Y1s4XX1mdW5jdGlvbiBjdChjKXtyZXR1cm4gY1s4XXx8KGNbOF09W10pfWZ1bmN0aW9uIHh0KGMsbCl7bGV0IGE7Y29uc3QgZD1sW2MuaW5kZXhdO3JldHVybiB2bChkKT9hPWQ6KGE9aU8oZCxsLG51bGwsYyksbFtjLmluZGV4XT1hLE14KGwsYSkpLGJ0KGEsbCxjLGQpLG5ldyBHZShhLGMs''@;'; put 'put ''bCl9bGV0IGJ0PWZ1bmN0aW9uIEx0KGMsbCxhLGQpe2lmKGNbN10pcmV0dXJuO2xldCBoO2g9OCZhLnR5cGU/SGEoZCk6ZnVuY3Rpb24gb3QoYyxsKXtjb25zdCBhPWNbMTFdLGQ9YS5jcmVhdGVDb21tZW50KCIiKSxoPXB0KGwsYyksZj1hLnBhcmVudE5vZGUoaCk7cmV0dXJuIHFwKGEsZixk''@;'; put 'put ''LGEubmV4dFNpYmxpbmcoaCksITEpLGR9KGwsYSksY1s3XT1ofTtjbGFzcyBDbntxdWVyeUxpc3Q7bWF0Y2hlcz1udWxsO2NvbnN0cnVjdG9yKGwpe3RoaXMucXVlcnlMaXN0PWx9Y2xvbmUoKXtyZXR1cm4gbmV3IENuKHRoaXMucXVlcnlMaXN0KX1zZXREaXJ0eSgpe3RoaXMucXVlcnlMaXN0''@;'; put 'put ''LnNldERpcnR5KCl9fWNsYXNzIGxye3F1ZXJpZXM7Y29uc3RydWN0b3IobD1bXSl7dGhpcy5xdWVyaWVzPWx9Y3JlYXRlRW1iZWRkZWRWaWV3KGwpe2NvbnN0IGE9bC5xdWVyaWVzO2lmKG51bGwhPT1hKXtjb25zdCBkPW51bGwhPT1sLmNvbnRlbnRRdWVyaWVzP2wuY29udGVudFF1ZXJpZXNb''@;'; put 'put ''MF06YS5sZW5ndGgsaD1bXTtmb3IobGV0IGY9MDtmPGQ7ZisrKXtjb25zdCB2PWEuZ2V0QnlJbmRleChmKTtoLnB1c2godGhpcy5xdWVyaWVzW3YuaW5kZXhJbkRlY2xhcmF0aW9uVmlld10uY2xvbmUoKSl9cmV0dXJuIG5ldyBscihoKX1yZXR1cm4gbnVsbH1pbnNlcnRWaWV3KGwpe3RoaXMu''@;'; put 'put ''ZGlydHlRdWVyaWVzV2l0aE1hdGNoZXMobCl9ZGV0YWNoVmlldyhsKXt0aGlzLmRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKGwpfWZpbmlzaFZpZXdDcmVhdGlvbihsKXt0aGlzLmRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKGwpfWRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKGwpe2ZvcihsZXQgYT0w''@;'; put 'put ''O2E8dGhpcy5xdWVyaWVzLmxlbmd0aDthKyspbnVsbCE9PVppKGwsYSkubWF0Y2hlcyYmdGhpcy5xdWVyaWVzW2FdLnNldERpcnR5KCl9fWNsYXNzIHFue2ZsYWdzO3JlYWQ7cHJlZGljYXRlO2NvbnN0cnVjdG9yKGwsYSxkPW51bGwpe3RoaXMuZmxhZ3M9YSx0aGlzLnJlYWQ9ZCx0aGlzLnBy''@;'; put 'put ''ZWRpY2F0ZT0ic3RyaW5nIj09dHlwZW9mIGw/ZnVuY3Rpb24gd3IoYyl7cmV0dXJuIGMuc3BsaXQoIiwiKS5tYXAobD0+bC50cmltKCkpfShsKTpsfX1jbGFzcyBXbntxdWVyaWVzO2NvbnN0cnVjdG9yKGw9W10pe3RoaXMucXVlcmllcz1sfWVsZW1lbnRTdGFydChsLGEpe2ZvcihsZXQgZD0w''@;'; put 'put ''O2Q8dGhpcy5xdWVyaWVzLmxlbmd0aDtkKyspdGhpcy5xdWVyaWVzW2RdLmVsZW1lbnRTdGFydChsLGEpfWVsZW1lbnRFbmQobCl7Zm9yKGxldCBhPTA7YTx0aGlzLnF1ZXJpZXMubGVuZ3RoO2ErKyl0aGlzLnF1ZXJpZXNbYV0uZWxlbWVudEVuZChsKX1lbWJlZGRlZFRWaWV3KGwpe2xldCBh''@;'; put 'put ''PW51bGw7Zm9yKGxldCBkPTA7ZDx0aGlzLmxlbmd0aDtkKyspe2NvbnN0IGg9bnVsbCE9PWE/YS5sZW5ndGg6MCxmPXRoaXMuZ2V0QnlJbmRleChkKS5lbWJlZGRlZFRWaWV3KGwsaCk7ZiYmKGYuaW5kZXhJbkRlY2xhcmF0aW9uVmlldz1kLG51bGwhPT1hP2EucHVzaChmKTphPVtmXSl9cmV0''@;'; put 'put ''dXJuIG51bGwhPT1hP25ldyBXbihhKTpudWxsfXRlbXBsYXRlKGwsYSl7Zm9yKGxldCBkPTA7ZDx0aGlzLnF1ZXJpZXMubGVuZ3RoO2QrKyl0aGlzLnF1ZXJpZXNbZF0udGVtcGxhdGUobCxhKX1nZXRCeUluZGV4KGwpe3JldHVybiB0aGlzLnF1ZXJpZXNbbF19Z2V0IGxlbmd0aCgpe3JldHVy''@;'; put 'put ''biB0aGlzLnF1ZXJpZXMubGVuZ3RofXRyYWNrKGwpe3RoaXMucXVlcmllcy5wdXNoKGwpfX1jbGFzcyBwcnttZXRhZGF0YTttYXRjaGVzPW51bGw7aW5kZXhJbkRlY2xhcmF0aW9uVmlldz0tMTtjcm9zc2VzTmdUZW1wbGF0ZT0hMTtfZGVjbGFyYXRpb25Ob2RlSW5kZXg7X2FwcGxpZXNUb05l''@;'; put 'put ''eHROb2RlPSEwO2NvbnN0cnVjdG9yKGwsYT0tMSl7dGhpcy5tZXRhZGF0YT1sLHRoaXMuX2RlY2xhcmF0aW9uTm9kZUluZGV4PWF9ZWxlbWVudFN0YXJ0KGwsYSl7dGhpcy5pc0FwcGx5aW5nVG9Ob2RlKGEpJiZ0aGlzLm1hdGNoVE5vZGUobCxhKX1lbGVtZW50RW5kKGwpe3RoaXMuX2RlY2xh''@;'; put 'put ''cmF0aW9uTm9kZUluZGV4PT09bC5pbmRleCYmKHRoaXMuX2FwcGxpZXNUb05leHROb2RlPSExKX10ZW1wbGF0ZShsLGEpe3RoaXMuZWxlbWVudFN0YXJ0KGwsYSl9ZW1iZWRkZWRUVmlldyhsLGEpe3JldHVybiB0aGlzLmlzQXBwbHlpbmdUb05vZGUobCk/KHRoaXMuY3Jvc3Nlc05nVGVtcGxh''@;'; put 'put ''dGU9ITAsdGhpcy5hZGRNYXRjaCgtbC5pbmRleCxhKSxuZXcgcHIodGhpcy5tZXRhZGF0YSkpOm51bGx9aXNBcHBseWluZ1RvTm9kZShsKXtpZih0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZSYmMSZ+dGhpcy5tZXRhZGF0YS5mbGFncyl7Y29uc3QgYT10aGlzLl9kZWNsYXJhdGlvbk5vZGVJbmRl''@;'; put 'put ''eDtsZXQgZD1sLnBhcmVudDtmb3IoO251bGwhPT1kJiY4JmQudHlwZSYmZC5pbmRleCE9PWE7KWQ9ZC5wYXJlbnQ7cmV0dXJuIGE9PT0obnVsbCE9PWQ/ZC5pbmRleDotMSl9cmV0dXJuIHRoaXMuX2FwcGxpZXNUb05leHROb2RlfW1hdGNoVE5vZGUobCxhKXtjb25zdCBkPXRoaXMubWV0YWRh''@;'; put 'put ''dGEucHJlZGljYXRlO2lmKEFycmF5LmlzQXJyYXkoZCkpZm9yKGxldCBoPTA7aDxkLmxlbmd0aDtoKyspe2NvbnN0IGY9ZFtoXTt0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbihsLGEseXIoYSxmKSksdGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24obCxhLGFiKGEsbCxmLCExLCEx''@;'; put 'put ''KSl9ZWxzZSBkPT09SWw/NCZhLnR5cGUmJnRoaXMubWF0Y2hUTm9kZVdpdGhSZWFkT3B0aW9uKGwsYSwtMSk6dGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24obCxhLGFiKGEsbCxkLCExLCExKSl9bWF0Y2hUTm9kZVdpdGhSZWFkT3B0aW9uKGwsYSxkKXtpZihudWxsIT09ZCl7Y29uc3Qg''@;'; put 'put ''aD10aGlzLm1ldGFkYXRhLnJlYWQ7aWYobnVsbCE9PWgpaWYoaD09PW5hfHxoPT09YmV8fGg9PT1JbCYmNCZhLnR5cGUpdGhpcy5hZGRNYXRjaChhLmluZGV4LC0yKTtlbHNle2NvbnN0IGY9YWIoYSxsLGgsITEsITEpO251bGwhPT1mJiZ0aGlzLmFkZE1hdGNoKGEuaW5kZXgsZil9ZWxzZSB0''@;'; put 'put ''aGlzLmFkZE1hdGNoKGEuaW5kZXgsZCl9fWFkZE1hdGNoKGwsYSl7bnVsbD09PXRoaXMubWF0Y2hlcz90aGlzLm1hdGNoZXM9W2wsYV06dGhpcy5tYXRjaGVzLnB1c2gobCxhKX19ZnVuY3Rpb24geXIoYyxsKXtjb25zdCBhPWMubG9jYWxOYW1lcztpZihudWxsIT09YSlmb3IobGV0IGQ9MDtk''@;'; put 'put ''PGEubGVuZ3RoO2QrPTIpaWYoYVtkXT09PWwpcmV0dXJuIGFbZCsxXTtyZXR1cm4gbnVsbH1mdW5jdGlvbiB3aShjLGwsYSxkKXtyZXR1cm4tMT09PWE/ZnVuY3Rpb24gdHIoYyxsKXtyZXR1cm4gMTEmYy50eXBlP21tKGMsbCk6NCZjLnR5cGU/SmIoYyxsKTpudWxsfShsLGMpOi0yPT09YT9m''@;'; put 'put ''dW5jdGlvbiBGaShjLGwsYSl7cmV0dXJuIGE9PT1uYT9tbShsLGMpOmE9PT1JbD9KYihsLGMpOmE9PT1iZT94dChsLGMpOnZvaWQgMH0oYyxsLGQpOks4KGMsY1sxXSxhLGwpfWZ1bmN0aW9uIHJhKGMsbCxhLGQpe2NvbnN0IGg9bFsxOF0ucXVlcmllc1tkXTtpZihudWxsPT09aC5tYXRjaGVz''@;'; put 'put ''KXtjb25zdCBmPWMuZGF0YSx2PWEubWF0Y2hlcyxNPVtdO2ZvcihsZXQgRD0wO251bGwhPT12JiZEPHYubGVuZ3RoO0QrPTIpe2NvbnN0IFU9dltEXTtNLnB1c2goVTwwP251bGw6d2kobCxmW1VdLHZbRCsxXSxhLm1ldGFkYXRhLnJlYWQpKX1oLm1hdGNoZXM9TX1yZXR1cm4gaC5tYXRjaGVz''@;'; put 'put ''fWZ1bmN0aW9uIG9hKGMsbCxhLGQpe2NvbnN0IGg9Yy5xdWVyaWVzLmdldEJ5SW5kZXgoYSksZj1oLm1hdGNoZXM7aWYobnVsbCE9PWYpe2NvbnN0IHY9cmEoYyxsLGgsYSk7Zm9yKGxldCBNPTA7TTxmLmxlbmd0aDtNKz0yKXtjb25zdCBEPWZbTV07aWYoRD4wKWQucHVzaCh2W00vMl0pO2Vs''@;'; put 'put ''c2V7Y29uc3QgVT1mW00rMV0sdGU9bFstRF07Zm9yKGxldCBvZT0xMDtvZTx0ZS5sZW5ndGg7b2UrKyl7Y29uc3QgdmU9dGVbb2VdO3ZlWzE2XT09PXZlWzNdJiZvYSh2ZVsxXSx2ZSxVLGQpfWlmKG51bGwhPT10ZVs5XSl7Y29uc3Qgb2U9dGVbOV07Zm9yKGxldCB2ZT0wO3ZlPG9lLmxlbmd0''@;'; put 'put ''aDt2ZSsrKXtjb25zdCB3ZT1vZVt2ZV07b2Eod2VbMV0sd2UsVSxkKX19fX19cmV0dXJuIGR9ZnVuY3Rpb24ga3IoYyxsLGEpe2NvbnN0IGQ9bmV3IERnKCEoNCZ+YSkpO3JldHVybiBmdW5jdGlvbiBQeihjLGwsYSxkKXtjb25zdCBoPVlTKGwpO2gucHVzaChhKSxjLmZpcnN0Q3JlYXRlUGFz''@;'; put 'put ''cyYmR1MoYykucHVzaChkLGgubGVuZ3RoLTEpfShjLGwsZCxkLmRlc3Ryb3kpLChsWzE4XT8/PW5ldyBscikucXVlcmllcy5wdXNoKG5ldyBDbihkKSktMX1mdW5jdGlvbiBWbihjLGwsYSl7bnVsbD09PWMucXVlcmllcyYmKGMucXVlcmllcz1uZXcgV24pLGMucXVlcmllcy50cmFjayhuZXcg''@;'; put 'put ''cHIobCxhKSl9ZnVuY3Rpb24gWmkoYyxsKXtyZXR1cm4gYy5xdWVyaWVzLmdldEJ5SW5kZXgobCl9ZnVuY3Rpb24gQ2koYyxsKXtjb25zdCBhPWNbMV0sZD1aaShhLGwpO3JldHVybiBkLmNyb3NzZXNOZ1RlbXBsYXRlP29hKGEsYyxsLFtdKTpyYShhLGMsZCxsKX1sZXQgVW49Y2xhc3N7fSxi''@;'; put 'put ''cj1jbGFzc3t9O2NsYXNzIEpyIGV4dGVuZHMgVW57bmdNb2R1bGVUeXBlO19wYXJlbnQ7X2Jvb3RzdHJhcENvbXBvbmVudHM9W107X3IzSW5qZWN0b3I7aW5zdGFuY2U7ZGVzdHJveUNicz1bXTtjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9bmV3IFpPKHRoaXMpO2NvbnN0cnVjdG9yKGwsYSxk''@;'; put 'put ''LGg9ITApe3N1cGVyKCksdGhpcy5uZ01vZHVsZVR5cGU9bCx0aGlzLl9wYXJlbnQ9YTtjb25zdCBmPXAwKGwpO3RoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHM9aGYoZi5ib290c3RyYXApLHRoaXMuX3IzSW5qZWN0b3I9cjEobCxhLFt7cHJvdmlkZTpVbix1c2VWYWx1ZTp0aGlzfSx7cHJvdmlk''@;'; put 'put ''ZTp6bSx1c2VWYWx1ZTp0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcn0sLi4uZF0sJGwobCksbmV3IFNldChbImVudmlyb25tZW50Il0pKSxoJiZ0aGlzLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpfXJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpe3RoaXMuX3IzSW5qZWN0''@;'; put 'put ''b3IucmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCksdGhpcy5pbnN0YW5jZT10aGlzLl9yM0luamVjdG9yLmdldCh0aGlzLm5nTW9kdWxlVHlwZSl9Z2V0IGluamVjdG9yKCl7cmV0dXJuIHRoaXMuX3IzSW5qZWN0b3J9ZGVzdHJveSgpe2NvbnN0IGw9dGhpcy5fcjNJbmplY3RvcjshbC5k''@;'; put 'put ''ZXN0cm95ZWQmJmwuZGVzdHJveSgpLHRoaXMuZGVzdHJveUNicy5mb3JFYWNoKGE9PmEoKSksdGhpcy5kZXN0cm95Q2JzPW51bGx9b25EZXN0cm95KGwpe3RoaXMuZGVzdHJveUNicy5wdXNoKGwpfX1jbGFzcyBKaSBleHRlbmRzIGJye21vZHVsZVR5cGU7Y29uc3RydWN0b3IobCl7c3VwZXIo''@;'; put 'put ''KSx0aGlzLm1vZHVsZVR5cGU9bH1jcmVhdGUobCl7cmV0dXJuIG5ldyBKcih0aGlzLm1vZHVsZVR5cGUsbCxbXSl9fWNsYXNzIHVvIGV4dGVuZHMgVW57aW5qZWN0b3I7Y29tcG9uZW50RmFjdG9yeVJlc29sdmVyPW5ldyBaTyh0aGlzKTtpbnN0YW5jZT1udWxsO2NvbnN0cnVjdG9yKGwpe3N1''@;'; put 'put ''cGVyKCk7Y29uc3QgYT1uZXcgVHMoWy4uLmwucHJvdmlkZXJzLHtwcm92aWRlOlVuLHVzZVZhbHVlOnRoaXN9LHtwcm92aWRlOnptLHVzZVZhbHVlOnRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyfV0sbC5wYXJlbnR8fEgwKCksbC5kZWJ1Z05hbWUsbmV3IFNldChbImVudmlyb25tZW50''@;'; put 'put ''Il0pKTt0aGlzLmluamVjdG9yPWEsbC5ydW5FbnZpcm9ubWVudEluaXRpYWxpemVycyYmYS5yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKX1kZXN0cm95KCl7dGhpcy5pbmplY3Rvci5kZXN0cm95KCl9b25EZXN0cm95KGwpe3RoaXMuaW5qZWN0b3Iub25EZXN0cm95KGwpfX1mdW5jdGlv''@;'; put 'put ''biB6YShjLGwsYT1udWxsKXtyZXR1cm4gbmV3IHVvKHtwcm92aWRlcnM6YyxwYXJlbnQ6bCxkZWJ1Z05hbWU6YSxydW5FbnZpcm9ubWVudEluaXRpYWxpemVyczohMH0pLmluamVjdG9yfWxldCBTYT0oKCk9PntjbGFzcyBje19pbmplY3RvcjtjYWNoZWRJbmplY3RvcnM9bmV3IE1hcDtjb25z''@;'; put 'put ''dHJ1Y3RvcihhKXt0aGlzLl9pbmplY3Rvcj1hfWdldE9yQ3JlYXRlU3RhbmRhbG9uZUluamVjdG9yKGEpe2lmKCFhLnN0YW5kYWxvbmUpcmV0dXJuIG51bGw7aWYoIXRoaXMuY2FjaGVkSW5qZWN0b3JzLmhhcyhhKSl7Y29uc3QgZD1JOCgwLGEudHlwZSksaD1kLmxlbmd0aD4wP3phKFtkXSx0''@;'; put 'put ''aGlzLl9pbmplY3RvcixgU3RhbmRhbG9uZVske2EudHlwZS5uYW1lfV1gKTpudWxsO3RoaXMuY2FjaGVkSW5qZWN0b3JzLnNldChhLGgpfXJldHVybiB0aGlzLmNhY2hlZEluamVjdG9ycy5nZXQoYSl9bmdPbkRlc3Ryb3koKXt0cnl7Zm9yKGNvbnN0IGEgb2YgdGhpcy5jYWNoZWRJbmplY3Rv''@;'; put 'put ''cnMudmFsdWVzKCkpbnVsbCE9PWEmJmEuZGVzdHJveSgpfWZpbmFsbHl7dGhpcy5jYWNoZWRJbmplY3RvcnMuY2xlYXIoKX19c3RhdGljIFx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMscHJvdmlkZWRJbjoiZW52aXJvbm1lbnQiLGZhY3Rvcnk6KCk9Pm5ldyBjKEhyKHFsKSl9KX1yZXR1cm4gY30p''@;'; put 'put ''KCk7ZnVuY3Rpb24gYXIoYyl7cmV0dXJuIHVjKCgpPT57Y29uc3QgbD1kXyhjKSxhPXsuLi5sLGRlY2xzOmMuZGVjbHMsdmFyczpjLnZhcnMsdGVtcGxhdGU6Yy50ZW1wbGF0ZSxjb25zdHM6Yy5jb25zdHN8fG51bGwsbmdDb250ZW50U2VsZWN0b3JzOmMubmdDb250ZW50U2VsZWN0b3JzLG9u''@;'; put 'put ''UHVzaDpjLmNoYW5nZURldGVjdGlvbj09PXltLk9uUHVzaCxkaXJlY3RpdmVEZWZzOm51bGwscGlwZURlZnM6bnVsbCxkZXBlbmRlbmNpZXM6bC5zdGFuZGFsb25lJiZjLmRlcGVuZGVuY2llc3x8bnVsbCxnZXRTdGFuZGFsb25lSW5qZWN0b3I6bC5zdGFuZGFsb25lP2g9PmguZ2V0KFNhKS5n''@;'; put 'put ''ZXRPckNyZWF0ZVN0YW5kYWxvbmVJbmplY3RvcihhKTpudWxsLGdldEV4dGVybmFsU3R5bGVzOm51bGwsc2lnbmFsczpjLnNpZ25hbHM/PyExLGRhdGE6Yy5kYXRhfHx7fSxlbmNhcHN1bGF0aW9uOmMuZW5jYXBzdWxhdGlvbnx8ZmQuRW11bGF0ZWQsc3R5bGVzOmMuc3R5bGVzfHxFcyxfOm51''@;'; put 'put ''bGwsc2NoZW1hczpjLnNjaGVtYXN8fG51bGwsdFZpZXc6bnVsbCxpZDoiIn07bC5zdGFuZGFsb25lJiZBMSgiTmdTdGFuZGFsb25lIiksdmYoYSk7Y29uc3QgZD1jLmRlcGVuZGVuY2llcztyZXR1cm4gYS5kaXJlY3RpdmVEZWZzPVlPKGQsITEpLGEucGlwZURlZnM9WU8oZCwhMCksYS5pZD1m''@;'; put 'put ''dW5jdGlvbiAkX2UoYyl7bGV0IGw9MDtjb25zdCBkPVtjLnNlbGVjdG9ycyxjLm5nQ29udGVudFNlbGVjdG9ycyxjLmhvc3RWYXJzLGMuaG9zdEF0dHJzLCJmdW5jdGlvbiI9PXR5cGVvZiBjLmNvbnN0cz8iIjpjLmNvbnN0cyxjLnZhcnMsYy5kZWNscyxjLmVuY2Fwc3VsYXRpb24sYy5zdGFu''@;'; put 'put ''ZGFsb25lLGMuc2lnbmFscyxjLmV4cG9ydEFzLEpTT04uc3RyaW5naWZ5KGMuaW5wdXRzKSxKU09OLnN0cmluZ2lmeShjLm91dHB1dHMpLE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGMudHlwZS5wcm90b3R5cGUpLCEhYy5jb250ZW50UXVlcmllcywhIWMudmlld1F1ZXJ5XTtmb3IoY29u''@;'; put 'put ''c3QgZiBvZiBkLmpvaW4oInwiKSlsPU1hdGguaW11bCgzMSxsKStmLmNoYXJDb2RlQXQoMCl8MDtyZXR1cm4gbCs9MjE0NzQ4MzY0OCwiYyIrbH0oYSksYX0pfWZ1bmN0aW9uIF9sKGMpe3JldHVybiBLbyhjKXx8WGMoYyl9ZnVuY3Rpb24gazEoYyl7cmV0dXJuIG51bGwhPT1jfWZ1bmN0aW9u''@;'; put 'put ''IEVpKGMpe3JldHVybiB1YygoKT0+KHt0eXBlOmMudHlwZSxib290c3RyYXA6Yy5ib290c3RyYXB8fEVzLGRlY2xhcmF0aW9uczpjLmRlY2xhcmF0aW9uc3x8RXMsaW1wb3J0czpjLmltcG9ydHN8fEVzLGV4cG9ydHM6Yy5leHBvcnRzfHxFcyx0cmFuc2l0aXZlQ29tcGlsZVNjb3BlczpudWxs''@;'; put 'put ''LHNjaGVtYXM6Yy5zY2hlbWFzfHxudWxsLGlkOmMuaWR8fG51bGx9KSl9ZnVuY3Rpb24gcGQoYyxsKXtpZihudWxsPT1jKXJldHVybiBhZDtjb25zdCBhPXt9O2Zvcihjb25zdCBkIGluIGMpaWYoYy5oYXNPd25Qcm9wZXJ0eShkKSl7Y29uc3QgaD1jW2RdO2xldCBmLHYsTSxEO0FycmF5Lmlz''@;'; put 'put ''QXJyYXkoaCk/KE09aFswXSxmPWhbMV0sdj1oWzJdPz9mLEQ9aFszXXx8bnVsbCk6KGY9aCx2PWgsTT1XYi5Ob25lLEQ9bnVsbCksYVtmXT1bZCxNLERdLGxbZl09dn1yZXR1cm4gYX1mdW5jdGlvbiBXNyhjKXtpZihudWxsPT1jKXJldHVybiBhZDtjb25zdCBsPXt9O2Zvcihjb25zdCBhIGlu''@;'; put 'put ''IGMpYy5oYXNPd25Qcm9wZXJ0eShhKSYmKGxbY1thXV09YSk7cmV0dXJuIGx9ZnVuY3Rpb24gWXIoYyl7cmV0dXJuIHVjKCgpPT57Y29uc3QgbD1kXyhjKTtyZXR1cm4gdmYobCksbH0pfWZ1bmN0aW9uIExsKGMpe3JldHVybnt0eXBlOmMudHlwZSxuYW1lOmMubmFtZSxmYWN0b3J5Om51bGws''@;'; put 'put ''cHVyZTohMSE9PWMucHVyZSxzdGFuZGFsb25lOmMuc3RhbmRhbG9uZT8/ITAsb25EZXN0cm95OmMudHlwZS5wcm90b3R5cGUubmdPbkRlc3Ryb3l8fG51bGx9fWZ1bmN0aW9uIGRfKGMpe2NvbnN0IGw9e307cmV0dXJue3R5cGU6Yy50eXBlLHByb3ZpZGVyc1Jlc29sdmVyOm51bGwsZmFjdG9y''@;'; put 'put ''eTpudWxsLGhvc3RCaW5kaW5nczpjLmhvc3RCaW5kaW5nc3x8bnVsbCxob3N0VmFyczpjLmhvc3RWYXJzfHwwLGhvc3RBdHRyczpjLmhvc3RBdHRyc3x8bnVsbCxjb250ZW50UXVlcmllczpjLmNvbnRlbnRRdWVyaWVzfHxudWxsLGRlY2xhcmVkSW5wdXRzOmwsaW5wdXRDb25maWc6Yy5pbnB1''@;'; put 'put ''dHN8fGFkLGV4cG9ydEFzOmMuZXhwb3J0QXN8fG51bGwsc3RhbmRhbG9uZTpjLnN0YW5kYWxvbmU/PyEwLHNpZ25hbHM6ITA9PT1jLnNpZ25hbHMsc2VsZWN0b3JzOmMuc2VsZWN0b3JzfHxFcyx2aWV3UXVlcnk6Yy52aWV3UXVlcnl8fG51bGwsZmVhdHVyZXM6Yy5mZWF0dXJlc3x8bnVsbCxz''@;'; put 'put ''ZXRJbnB1dDpudWxsLGZpbmRIb3N0RGlyZWN0aXZlRGVmczpudWxsLGhvc3REaXJlY3RpdmVzOm51bGwsaW5wdXRzOnBkKGMuaW5wdXRzLGwpLG91dHB1dHM6VzcoYy5vdXRwdXRzKSxkZWJ1Z0luZm86bnVsbH19ZnVuY3Rpb24gdmYoYyl7Yy5mZWF0dXJlcz8uZm9yRWFjaChsPT5sKGMpKX1m''@;'; put 'put ''dW5jdGlvbiBZTyhjLGwpe2lmKCFjKXJldHVybiBudWxsO2NvbnN0IGE9bD9GMDpfbDtyZXR1cm4oKT0+KCJmdW5jdGlvbiI9PXR5cGVvZiBjP2MoKTpjKS5tYXAoZD0+YShkKSkuZmlsdGVyKGsxKX1mdW5jdGlvbiBMYShjKXtsZXQgbD1mdW5jdGlvbiAkb2UoYyl7cmV0dXJuIE9iamVjdC5n''@;'; put 'put ''ZXRQcm90b3R5cGVPZihjLnByb3RvdHlwZSkuY29uc3RydWN0b3J9KGMudHlwZSksYT0hMDtjb25zdCBkPVtjXTtmb3IoO2w7KXtsZXQgaDtpZihWMChjKSloPWwuXHUwMjc1Y21wfHxsLlx1MDI3NWRpcjtlbHNle2lmKGwuXHUwMjc1Y21wKXRocm93IG5ldyBQcig5MDMsITEpO2g9bC5cdTAy''@;'; put 'put ''NzVkaXJ9aWYoaCl7aWYoYSl7ZC5wdXNoKGgpO2NvbnN0IHY9Yzt2LmlucHV0cz1wWShjLmlucHV0cyksdi5kZWNsYXJlZElucHV0cz1wWShjLmRlY2xhcmVkSW5wdXRzKSx2Lm91dHB1dHM9cFkoYy5vdXRwdXRzKTtjb25zdCBNPWguaG9zdEJpbmRpbmdzO00mJlFfZShjLE0pO2NvbnN0IEQ9''@;'; put 'put ''aC52aWV3UXVlcnksVT1oLmNvbnRlbnRRdWVyaWVzO2lmKEQmJnFfZShjLEQpLFUmJkpfZShjLFUpLEtfZShjLGgpLE8wKGMub3V0cHV0cyxoLm91dHB1dHMpLFYwKGgpJiZoLmRhdGEuYW5pbWF0aW9uKXtjb25zdCB0ZT1jLmRhdGE7dGUuYW5pbWF0aW9uPSh0ZS5hbmltYXRpb258fFtdKS5j''@;'; put 'put ''b25jYXQoaC5kYXRhLmFuaW1hdGlvbil9fWNvbnN0IGY9aC5mZWF0dXJlcztpZihmKWZvcihsZXQgdj0wO3Y8Zi5sZW5ndGg7disrKXtjb25zdCBNPWZbdl07TSYmTS5uZ0luaGVyaXQmJk0oYyksTT09PUxhJiYoYT0hMSl9fWw9T2JqZWN0LmdldFByb3RvdHlwZU9mKGwpfSFmdW5jdGlvbiBY''@;'; put 'put ''X2UoYyl7bGV0IGw9MCxhPW51bGw7Zm9yKGxldCBkPWMubGVuZ3RoLTE7ZD49MDtkLS0pe2NvbnN0IGg9Y1tkXTtoLmhvc3RWYXJzPWwrPWguaG9zdFZhcnMsaC5ob3N0QXR0cnM9Zm0oaC5ob3N0QXR0cnMsYT1mbShhLGguaG9zdEF0dHJzKSl9fShkKX1mdW5jdGlvbiBLX2UoYyxsKXtmb3Io''@;'; put 'put ''Y29uc3QgYSBpbiBsLmlucHV0cyl7aWYoIWwuaW5wdXRzLmhhc093blByb3BlcnR5KGEpfHxjLmlucHV0cy5oYXNPd25Qcm9wZXJ0eShhKSljb250aW51ZTtjb25zdCBkPWwuaW5wdXRzW2FdO3ZvaWQgMCE9PWQmJihjLmlucHV0c1thXT1kLGMuZGVjbGFyZWRJbnB1dHNbYV09bC5kZWNsYXJl''@;'; put 'put ''ZElucHV0c1thXSl9fWZ1bmN0aW9uIHBZKGMpe3JldHVybiBjPT09YWQ/e306Yz09PUVzP1tdOmN9ZnVuY3Rpb24gcV9lKGMsbCl7Y29uc3QgYT1jLnZpZXdRdWVyeTtjLnZpZXdRdWVyeT1hPyhkLGgpPT57bChkLGgpLGEoZCxoKX06bH1mdW5jdGlvbiBKX2UoYyxsKXtjb25zdCBhPWMuY29u''@;'; put 'put ''dGVudFF1ZXJpZXM7Yy5jb250ZW50UXVlcmllcz1hPyhkLGgsZik9PntsKGQsaCxmKSxhKGQsaCxmKX06bH1mdW5jdGlvbiBRX2UoYyxsKXtjb25zdCBhPWMuaG9zdEJpbmRpbmdzO2MuaG9zdEJpbmRpbmdzPWE/KGQsaCk9PntsKGQsaCksYShkLGgpfTpsfWZ1bmN0aW9uIHlmKGMpe2NvbnN0''@;'; put 'put ''IGw9YT0+e2NvbnN0IGQ9QXJyYXkuaXNBcnJheShjKTtudWxsPT09YS5ob3N0RGlyZWN0aXZlcz8oYS5maW5kSG9zdERpcmVjdGl2ZURlZnM9S29lLGEuaG9zdERpcmVjdGl2ZXM9ZD9jLm1hcChnWSk6W2NdKTpkP2EuaG9zdERpcmVjdGl2ZXMudW5zaGlmdCguLi5jLm1hcChnWSkpOmEuaG9z''@;'; put 'put ''dERpcmVjdGl2ZXMudW5zaGlmdChjKX07cmV0dXJuIGwubmdJbmhlcml0PSEwLGx9ZnVuY3Rpb24gS29lKGMsbCxhKXtpZihudWxsIT09Yy5ob3N0RGlyZWN0aXZlcylmb3IoY29uc3QgZCBvZiBjLmhvc3REaXJlY3RpdmVzKWlmKCJmdW5jdGlvbiI9PXR5cGVvZiBkKXtjb25zdCBoPWQoKTtm''@;'; put 'put ''b3IoY29uc3QgZiBvZiBoKVhvZShnWShmKSxsLGEpfWVsc2UgWG9lKGQsbCxhKX1mdW5jdGlvbiBYb2UoYyxsLGEpe2NvbnN0IGQ9WGMoYy5kaXJlY3RpdmUpOyhmdW5jdGlvbiByd2UoYyxsKXtmb3IoY29uc3QgYSBpbiBsKWwuaGFzT3duUHJvcGVydHkoYSkmJihjW2xbYV1dPWNbYV0pfSko''@;'; put 'put ''ZC5kZWNsYXJlZElucHV0cyxjLmlucHV0cyksS29lKGQsbCxhKSxhLnNldChkLGMpLGwucHVzaChkKX1mdW5jdGlvbiBnWShjKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYz97ZGlyZWN0aXZlOnFhKGMpLGlucHV0czphZCxvdXRwdXRzOmFkfTp7ZGlyZWN0aXZlOnFhKGMuZGlyZWN0aXZl''@;'; put 'put ''KSxpbnB1dHM6cW9lKGMuaW5wdXRzKSxvdXRwdXRzOnFvZShjLm91dHB1dHMpfX1mdW5jdGlvbiBxb2UoYyl7aWYodm9pZCAwPT09Y3x8MD09PWMubGVuZ3RoKXJldHVybiBhZDtjb25zdCBsPXt9O2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7YSs9MilsW2NbYV1dPWNbYSsxXTtyZXR1cm4gbH1m''@;'; put 'put ''dW5jdGlvbiBHTyhjKXtyZXR1cm4hIW1ZKGMpJiYoQXJyYXkuaXNBcnJheShjKXx8IShjIGluc3RhbmNlb2YgTWFwKSYmU3ltYm9sLml0ZXJhdG9yIGluIGMpfWZ1bmN0aW9uIG1ZKGMpe3JldHVybiBudWxsIT09YyYmKCJmdW5jdGlvbiI9PXR5cGVvZiBjfHwib2JqZWN0Ij09dHlwZW9mIGMp''@;'; put 'put ''fWZ1bmN0aW9uIHQ0KGMsbCxhKXtyZXR1cm4gY1tsXT1hfWZ1bmN0aW9uIGd1KGMsbCxhKXtyZXR1cm4hT2JqZWN0LmlzKGNbbF0sYSkmJihjW2xdPWEsITApfWZ1bmN0aW9uIFk3KGMsbCxhLGQpe2NvbnN0IGg9Z3UoYyxsLGEpO3JldHVybiBndShjLGwrMSxkKXx8aH1mdW5jdGlvbiAkTyhj''@;'; put 'put ''LGwsYSxkLGgpe2NvbnN0IGY9WTcoYyxsLGEsZCk7cmV0dXJuIGd1KGMsbCsyLGgpfHxmfWZ1bmN0aW9uIGJmKGMsbCxhLGQsaCxmKXtjb25zdCB2PVk3KGMsbCxhLGQpO3JldHVybiBZNyhjLGwrMixoLGYpfHx2fWZ1bmN0aW9uIHZFKGMsbCxhLGQsaCxmLHYsTSxELFUpe2NvbnN0IHRlPWEr''@;'; put 'put ''MjYsb2U9bC5maXJzdENyZWF0ZVBhc3M/ZnVuY3Rpb24gc3dlKGMsbCxhLGQsaCxmLHYsTSxEKXtjb25zdCBVPWwuY29uc3RzLHRlPVZtKGwsYyw0LHZ8fG51bGwsTXx8bnVsbCk7WFMoKSYmaEUobCxhLHRlLEZjKFUsRCksa3gpLHRlLm1lcmdlZEF0dHJzPWZtKHRlLm1lcmdlZEF0dHJzLHRl''@;'; put 'put ''LmF0dHJzKSxzTShsLHRlKTtjb25zdCBvZT10ZS50Vmlldz1DeCgyLHRlLGQsaCxmLGwuZGlyZWN0aXZlUmVnaXN0cnksbC5waXBlUmVnaXN0cnksbnVsbCxsLnNjaGVtYXMsVSxudWxsKTtyZXR1cm4gbnVsbCE9PWwucXVlcmllcyYmKGwucXVlcmllcy50ZW1wbGF0ZShsLHRlKSxvZS5xdWVy''@;'; put 'put ''aWVzPWwucXVlcmllcy5lbWJlZGRlZFRWaWV3KHRlKSksdGV9KHRlLGwsYyxkLGgsZix2LE0sRCk6bC5kYXRhW3RlXTtlaChvZSwhMSk7Y29uc3QgdmU9UW9lKGwsYyxvZSxhKTtVOCgpJiZLYihsLGMsdmUsb2UpLEUxKHZlLGMpO2NvbnN0IHdlPWlPKHZlLGMsdmUsb2UpO3JldHVybiBjW3Rl''@;'; put 'put ''XT13ZSxNeChjLHdlKSxYZChvZSkmJlliKGwsYyxvZSksbnVsbCE9RCYmVHgoYyxvZSxVKSxvZX1mdW5jdGlvbiBndChjLGwsYSxkLGgsZix2LE0pe2NvbnN0IEQ9S3IoKSxVPURvKCk7cmV0dXJuIHZFKEQsVSxjLGwsYSxkLGgsRmMoVS5jb25zdHMsZiksdixNKSxndH1sZXQgUW9lPWZ1bmN0''@;'; put 'put ''aW9uIGVzZShjLGwsYSxkKXtyZXR1cm4gdGYoITApLGxbMTFdLmNyZWF0ZUNvbW1lbnQoIiIpfTtsZXQgYlk9KCgpPT57Y2xhc3MgY3tsb2coYSl7Y29uc29sZS5sb2coYSl9d2FybihhKXtjb25zb2xlLndhcm4oYSl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8''@;'; put 'put ''fGMpfTtzdGF0aWMgXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pfXJldHVybiBjfSkoKTtjb25zdCBmc2U9bmV3IGpuKCIiKSxKTz1uZXcgam4oIiIpO2xldCB4WSxTWT0oKCk9PntjbGFzcyBje19uZ1pvbmU7cmVnaXN0''@;'; put 'put ''cnk7X2lzWm9uZVN0YWJsZT0hMDtfY2FsbGJhY2tzPVtdO190YXNrVHJhY2tpbmdab25lPW51bGw7X2Rlc3Ryb3lSZWY7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX25nWm9uZT1hLHRoaXMucmVnaXN0cnk9ZCxTZygpJiYodGhpcy5fZGVzdHJveVJlZj1KbihNMSx7b3B0aW9uYWw6ITB9KT8/''@;'; put 'put ''dm9pZCAwKSx4WXx8KGZ1bmN0aW9uIGFDZShjKXt4WT1jfShoKSxoLmFkZFRvV2luZG93KGQpKSx0aGlzLl93YXRjaEFuZ3VsYXJFdmVudHMoKSxhLnJ1bigoKT0+e3RoaXMuX3Rhc2tUcmFja2luZ1pvbmU9dHlwZW9mIFpvbmU+InUiP251bGw6Wm9uZS5jdXJyZW50LmdldCgiVGFza1RyYWNr''@;'; put 'put ''aW5nWm9uZSIpfSl9X3dhdGNoQW5ndWxhckV2ZW50cygpe2NvbnN0IGE9dGhpcy5fbmdab25lLm9uVW5zdGFibGUuc3Vic2NyaWJlKHtuZXh0OigpPT57dGhpcy5faXNab25lU3RhYmxlPSExfX0pLGQ9dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT50aGlzLl9uZ1pvbmUub25T''@;'; put 'put ''dGFibGUuc3Vic2NyaWJlKHtuZXh0OigpPT57WGEuYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpLHF1ZXVlTWljcm90YXNrKCgpPT57dGhpcy5faXNab25lU3RhYmxlPSEwLHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHkoKX0pfX0pKTt0aGlzLl9kZXN0cm95UmVmPy5vbkRlc3Ryb3koKCk9Pnth''@;'; put 'put ''LnVuc3Vic2NyaWJlKCksZC51bnN1YnNjcmliZSgpfSl9aXNTdGFibGUoKXtyZXR1cm4gdGhpcy5faXNab25lU3RhYmxlJiYhdGhpcy5fbmdab25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzfV9ydW5DYWxsYmFja3NJZlJlYWR5KCl7aWYodGhpcy5pc1N0YWJsZSgpKXF1ZXVlTWljcm90YXNrKCgp''@;'; put 'put ''PT57Zm9yKDswIT09dGhpcy5fY2FsbGJhY2tzLmxlbmd0aDspe2xldCBhPXRoaXMuX2NhbGxiYWNrcy5wb3AoKTtjbGVhclRpbWVvdXQoYS50aW1lb3V0SWQpLGEuZG9uZUNiKCl9fSk7ZWxzZXtsZXQgYT10aGlzLmdldFBlbmRpbmdUYXNrcygpO3RoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxs''@;'; put 'put ''YmFja3MuZmlsdGVyKGQ9PiFkLnVwZGF0ZUNifHwhZC51cGRhdGVDYihhKXx8KGNsZWFyVGltZW91dChkLnRpbWVvdXRJZCksITEpKX19Z2V0UGVuZGluZ1Rhc2tzKCl7cmV0dXJuIHRoaXMuX3Rhc2tUcmFja2luZ1pvbmU/dGhpcy5fdGFza1RyYWNraW5nWm9uZS5tYWNyb1Rhc2tzLm1hcChh''@;'; put 'put ''PT4oe3NvdXJjZTphLnNvdXJjZSxjcmVhdGlvbkxvY2F0aW9uOmEuY3JlYXRpb25Mb2NhdGlvbixkYXRhOmEuZGF0YX0pKTpbXX1hZGRDYWxsYmFjayhhLGQsaCl7bGV0IGY9LTE7ZCYmZD4wJiYoZj1zZXRUaW1lb3V0KCgpPT57dGhpcy5fY2FsbGJhY2tzPXRoaXMuX2NhbGxiYWNrcy5maWx0''@;'; put 'put ''ZXIodj0+di50aW1lb3V0SWQhPT1mKSxhKCl9LGQpKSx0aGlzLl9jYWxsYmFja3MucHVzaCh7ZG9uZUNiOmEsdGltZW91dElkOmYsdXBkYXRlQ2I6aH0pfXdoZW5TdGFibGUoYSxkLGgpe2lmKGgmJiF0aGlzLl90YXNrVHJhY2tpbmdab25lKXRocm93IG5ldyBFcnJvcignVGFzayB0cmFja2lu''@;'; put 'put ''ZyB6b25lIGlzIHJlcXVpcmVkIHdoZW4gcGFzc2luZyBhbiB1cGRhdGUgY2FsbGJhY2sgdG8gd2hlblN0YWJsZSgpLiBJcyAiem9uZS5qcy9wbHVnaW5zL3Rhc2stdHJhY2tpbmciIGxvYWRlZD8nKTt0aGlzLmFkZENhbGxiYWNrKGEsZCxoKSx0aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCl9''@;'; put 'put ''cmVnaXN0ZXJBcHBsaWNhdGlvbihhKXt0aGlzLnJlZ2lzdHJ5LnJlZ2lzdGVyQXBwbGljYXRpb24oYSx0aGlzKX11bnJlZ2lzdGVyQXBwbGljYXRpb24oYSl7dGhpcy5yZWdpc3RyeS51bnJlZ2lzdGVyQXBwbGljYXRpb24oYSl9ZmluZFByb3ZpZGVycyhhLGQsaCl7cmV0dXJuW119c3RhdGlj''@;'; put 'put ''IFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEhyKFhhKSxIcihNWSksSHIoSk8pKX07c3RhdGljIFx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfXJldHVybiBjfSkoKSxNWT0oKCk9PntjbGFzcyBje19hcHBsaWNhdGlvbnM9bmV3IE1h''@;'; put 'put ''cDtyZWdpc3RlckFwcGxpY2F0aW9uKGEsZCl7dGhpcy5fYXBwbGljYXRpb25zLnNldChhLGQpfXVucmVnaXN0ZXJBcHBsaWNhdGlvbihhKXt0aGlzLl9hcHBsaWNhdGlvbnMuZGVsZXRlKGEpfXVucmVnaXN0ZXJBbGxBcHBsaWNhdGlvbnMoKXt0aGlzLl9hcHBsaWNhdGlvbnMuY2xlYXIoKX1n''@;'; put 'put ''ZXRUZXN0YWJpbGl0eShhKXtyZXR1cm4gdGhpcy5fYXBwbGljYXRpb25zLmdldChhKXx8bnVsbH1nZXRBbGxUZXN0YWJpbGl0aWVzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRpb25zLnZhbHVlcygpKX1nZXRBbGxSb290RWxlbWVudHMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0''@;'; put 'put ''aGlzLl9hcHBsaWNhdGlvbnMua2V5cygpKX1maW5kVGVzdGFiaWxpdHlJblRyZWUoYSxkPSEwKXtyZXR1cm4geFk/LmZpbmRUZXN0YWJpbGl0eUluVHJlZSh0aGlzLGEsZCk/P251bGx9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1''@;'; put 'put ''cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pfXJldHVybiBjfSkoKSxwc2U9KCgpPT57Y2xhc3MgY3tzdGF0aWMgXHUwMjc1cHJvdj1mcih7dG9rZW46Yyxwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5uZXcgb0NlfSl9cmV0''@;'; put 'put ''dXJuIGN9KSgpO2NsYXNzIG9DZXtxdWV1ZWRFZmZlY3RDb3VudD0wO3F1ZXVlcz1uZXcgTWFwO3NjaGVkdWxlKGwpe3RoaXMuZW5xdWV1ZShsKX1yZW1vdmUobCl7Y29uc3QgZD10aGlzLnF1ZXVlcy5nZXQobC56b25lKTtkLmhhcyhsKSYmKGQuZGVsZXRlKGwpLHRoaXMucXVldWVkRWZmZWN0''@;'; put 'put ''Q291bnQtLSl9ZW5xdWV1ZShsKXtjb25zdCBhPWwuem9uZTt0aGlzLnF1ZXVlcy5oYXMoYSl8fHRoaXMucXVldWVzLnNldChhLG5ldyBTZXQpO2NvbnN0IGQ9dGhpcy5xdWV1ZXMuZ2V0KGEpO2QuaGFzKGwpfHwodGhpcy5xdWV1ZWRFZmZlY3RDb3VudCsrLGQuYWRkKGwpKX1mbHVzaCgpe2Zv''@;'; put 'put ''cig7dGhpcy5xdWV1ZWRFZmZlY3RDb3VudD4wOylmb3IoY29uc3RbbCxhXW9mIHRoaXMucXVldWVzKW51bGw9PT1sP3RoaXMuZmx1c2hRdWV1ZShhKTpsLnJ1bigoKT0+dGhpcy5mbHVzaFF1ZXVlKGEpKX1mbHVzaFF1ZXVlKGwpe2Zvcihjb25zdCBhIG9mIGwpbC5kZWxldGUoYSksdGhpcy5x''@;'; put 'put ''dWV1ZWRFZmZlY3RDb3VudC0tLGEucnVuKCl9fWZ1bmN0aW9uIGJFKGMpe3JldHVybiEhYyYmImZ1bmN0aW9uIj09dHlwZW9mIGMudGhlbn1mdW5jdGlvbiBnc2UoYyl7cmV0dXJuISFjJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5zdWJzY3JpYmV9Y29uc3QgbXNlPW5ldyBqbigiIik7ZnVuY3Rp''@;'; put 'put ''b24gdnNlKGMpe3JldHVybiAkZChbe3Byb3ZpZGU6bXNlLG11bHRpOiEwLHVzZVZhbHVlOmN9XSl9bGV0IHlzZT0oKCk9PntjbGFzcyBje3Jlc29sdmU7cmVqZWN0O2luaXRpYWxpemVkPSExO2RvbmU9ITE7ZG9uZVByb21pc2U9bmV3IFByb21pc2UoKGEsZCk9Pnt0aGlzLnJlc29sdmU9YSx0''@;'; put 'put ''aGlzLnJlamVjdD1kfSk7YXBwSW5pdHM9Sm4obXNlLHtvcHRpb25hbDohMH0pPz9bXTtpbmplY3Rvcj1KbihZbyk7Y29uc3RydWN0b3IoKXt9cnVuSW5pdGlhbGl6ZXJzKCl7aWYodGhpcy5pbml0aWFsaXplZClyZXR1cm47Y29uc3QgYT1bXTtmb3IoY29uc3QgaCBvZiB0aGlzLmFwcEluaXRz''@;'; put 'put ''KXtjb25zdCBmPUMxKHRoaXMuaW5qZWN0b3IsaCk7aWYoYkUoZikpYS5wdXNoKGYpO2Vsc2UgaWYoZ3NlKGYpKXtjb25zdCB2PW5ldyBQcm9taXNlKChNLEQpPT57Zi5zdWJzY3JpYmUoe2NvbXBsZXRlOk0sZXJyb3I6RH0pfSk7YS5wdXNoKHYpfX1jb25zdCBkPSgpPT57dGhpcy5kb25lPSEw''@;'; put 'put ''LHRoaXMucmVzb2x2ZSgpfTtQcm9taXNlLmFsbChhKS50aGVuKCgpPT57ZCgpfSkuY2F0Y2goaD0+e3RoaXMucmVqZWN0KGgpfSksMD09PWEubGVuZ3RoJiZkKCksdGhpcy5pbml0aWFsaXplZD0hMH1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRp''@;'; put 'put ''YyBcdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gY30pKCk7Y29uc3QgX0U9bmV3IGpuKCIiKTtmdW5jdGlvbiBfc2UoYyxsKXtyZXR1cm4gQXJyYXkuaXNBcnJheShsKT9sLnJlZHVjZShfc2UsYyk6ey4uLmMsLi4u''@;'; put 'put ''bH19bGV0IGdkPSgoKT0+e2NsYXNzIGN7X3J1bm5pbmdUaWNrPSExO19kZXN0cm95ZWQ9ITE7X2Rlc3Ryb3lMaXN0ZW5lcnM9W107X3ZpZXdzPVtdO2ludGVybmFsRXJyb3JIYW5kbGVyPUpuKEtJKTthZnRlclJlbmRlck1hbmFnZXI9Sm4oTk0pO3pvbmVsZXNzRW5hYmxlZD1KbihDMyk7cm9v''@;'; put 'put ''dEVmZmVjdFNjaGVkdWxlcj1Kbihwc2UpO2RpcnR5RmxhZ3M9MDt0cmFjaW5nU25hcHNob3Q9bnVsbDtleHRlcm5hbFRlc3RWaWV3cz1uZXcgU2V0O2FmdGVyVGljaz1uZXcgdXI7Z2V0IGFsbFZpZXdzKCl7cmV0dXJuWy4uLnRoaXMuZXh0ZXJuYWxUZXN0Vmlld3Mua2V5cygpLC4uLnRoaXMu''@;'; put 'put ''X3ZpZXdzXX1nZXQgZGVzdHJveWVkKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZH1jb21wb25lbnRUeXBlcz1bXTtjb21wb25lbnRzPVtdO2lzU3RhYmxlPUpuKGxmKS5oYXNQZW5kaW5nVGFza3MucGlwZShZYShhPT4hYSkpO2NvbnN0cnVjdG9yKCl7Sm4oQ20se29wdGlvbmFsOiEwfSl9d2hl''@;'; put 'put ''blN0YWJsZSgpe2xldCBhO3JldHVybiBuZXcgUHJvbWlzZShkPT57YT10aGlzLmlzU3RhYmxlLnN1YnNjcmliZSh7bmV4dDpoPT57aCYmZCgpfX0pfSkuZmluYWxseSgoKT0+e2EudW5zdWJzY3JpYmUoKX0pfV9pbmplY3Rvcj1KbihxbCk7X3JlbmRlcmVyRmFjdG9yeT1udWxsO2dldCBpbmpl''@;'; put 'put ''Y3Rvcigpe3JldHVybiB0aGlzLl9pbmplY3Rvcn1ib290c3RyYXAoYSxkKXtyZXR1cm4gdGhpcy5ib290c3RyYXBJbXBsKGEsZCl9Ym9vdHN0cmFwSW1wbChhLGQsaD1Zby5OVUxMKXtjb25zdCBmPWEgaW5zdGFuY2VvZiBMTztpZighdGhpcy5faW5qZWN0b3IuZ2V0KHlzZSkuZG9uZSl0aHJv''@;'; put 'put ''dyBuZXcgUHIoNDA1LCIiKTtsZXQgTTtNPWY/YTp0aGlzLl9pbmplY3Rvci5nZXQoem0pLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGEpLHRoaXMuY29tcG9uZW50VHlwZXMucHVzaChNLmNvbXBvbmVudFR5cGUpO2NvbnN0IEQ9ZnVuY3Rpb24gc0NlKGMpe3JldHVybiBjLmlzQm91bmRUb01v''@;'; put 'put ''ZHVsZX0oTSk/dm9pZCAwOnRoaXMuX2luamVjdG9yLmdldChVbiksdGU9TS5jcmVhdGUoaCxbXSxkfHxNLnNlbGVjdG9yLEQpLG9lPXRlLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQsdmU9dGUuaW5qZWN0b3IuZ2V0KGZzZSxudWxsKTtyZXR1cm4gdmU/LnJlZ2lzdGVyQXBwbGljYXRpb24ob2Up''@;'; put 'put ''LHRlLm9uRGVzdHJveSgoKT0+e3RoaXMuZGV0YWNoVmlldyh0ZS5ob3N0VmlldyksUU8odGhpcy5jb21wb25lbnRzLHRlKSx2ZT8udW5yZWdpc3RlckFwcGxpY2F0aW9uKG9lKX0pLHRoaXMuX2xvYWRDb21wb25lbnQodGUpLHRlfXRpY2soKXt0aGlzLnpvbmVsZXNzRW5hYmxlZHx8KHRoaXMu''@;'; put 'put ''ZGlydHlGbGFnc3w9MSksdGhpcy5fdGljaygpfV90aWNrKCl7bnVsbCE9PXRoaXMudHJhY2luZ1NuYXBzaG90P3RoaXMudHJhY2luZ1NuYXBzaG90LnJ1bihITS5DSEFOR0VfREVURUNUSU9OLHRoaXMudGlja0ltcGwpOnRoaXMudGlja0ltcGwoKX10aWNrSW1wbD0oKT0+e2lmKHRoaXMuX3J1''@;'; put 'put ''bm5pbmdUaWNrKXRocm93IG5ldyBQcigxMDEsITEpO2NvbnN0IGE9X2UobnVsbCk7dHJ5e3RoaXMuX3J1bm5pbmdUaWNrPSEwLHRoaXMuc3luY2hyb25pemUoKX1jYXRjaChkKXt0aGlzLmludGVybmFsRXJyb3JIYW5kbGVyKGQpfWZpbmFsbHl7dGhpcy5fcnVubmluZ1RpY2s9ITEsdGhpcy50''@;'; put 'put ''cmFjaW5nU25hcHNob3Q/LmRpc3Bvc2UoKSx0aGlzLnRyYWNpbmdTbmFwc2hvdD1udWxsLF9lKGEpLHRoaXMuYWZ0ZXJUaWNrLm5leHQoKX19O3N5bmNocm9uaXplKCl7bnVsbD09PXRoaXMuX3JlbmRlcmVyRmFjdG9yeSYmIXRoaXMuX2luamVjdG9yLmRlc3Ryb3llZCYmKHRoaXMuX3JlbmRl''@;'; put 'put ''cmVyRmFjdG9yeT10aGlzLl9pbmplY3Rvci5nZXQoZWMsbnVsbCx7b3B0aW9uYWw6ITB9KSk7bGV0IGE9MDtmb3IoOzAhPT10aGlzLmRpcnR5RmxhZ3MmJmErKzwxMDspdGhpcy5zeW5jaHJvbml6ZU9uY2UoKX1zeW5jaHJvbml6ZU9uY2UoKXtpZigxNiZ0aGlzLmRpcnR5RmxhZ3MmJih0aGlz''@;'; put 'put ''LmRpcnR5RmxhZ3MmPS0xNyx0aGlzLnJvb3RFZmZlY3RTY2hlZHVsZXIuZmx1c2goKSksNyZ0aGlzLmRpcnR5RmxhZ3Mpe2NvbnN0IGE9ISEoMSZ0aGlzLmRpcnR5RmxhZ3MpO3RoaXMuZGlydHlGbGFncyY9LTgsdGhpcy5kaXJ0eUZsYWdzfD04O2ZvcihsZXR7X2xWaWV3OmQsbm90aWZ5RXJy''@;'; put 'put ''b3JIYW5kbGVyOmh9b2YgdGhpcy5hbGxWaWV3cyljQ2UoZCxoLGEsdGhpcy56b25lbGVzc0VuYWJsZWQpO2lmKHRoaXMuZGlydHlGbGFncyY9LTUsdGhpcy5zeW5jRGlydHlGbGFnc1dpdGhWaWV3cygpLDIzJnRoaXMuZGlydHlGbGFncylyZXR1cm59ZWxzZSB0aGlzLl9yZW5kZXJlckZhY3Rv''@;'; put 'put ''cnk/LmJlZ2luPy4oKSx0aGlzLl9yZW5kZXJlckZhY3Rvcnk/LmVuZD8uKCk7OCZ0aGlzLmRpcnR5RmxhZ3MmJih0aGlzLmRpcnR5RmxhZ3MmPS05LHRoaXMuYWZ0ZXJSZW5kZXJNYW5hZ2VyLmV4ZWN1dGUoKSksdGhpcy5zeW5jRGlydHlGbGFnc1dpdGhWaWV3cygpfXN5bmNEaXJ0eUZsYWdz''@;'; put 'put ''V2l0aFZpZXdzKCl7dGhpcy5hbGxWaWV3cy5zb21lKCh7X2xWaWV3OmF9KT0+ajgoYSkpP3RoaXMuZGlydHlGbGFnc3w9Mjp0aGlzLmRpcnR5RmxhZ3MmPS04fWF0dGFjaFZpZXcoYSl7Y29uc3QgZD1hO3RoaXMuX3ZpZXdzLnB1c2goZCksZC5hdHRhY2hUb0FwcFJlZih0aGlzKX1kZXRhY2hW''@;'; put 'put ''aWV3KGEpe2NvbnN0IGQ9YTtRTyh0aGlzLl92aWV3cyxkKSxkLmRldGFjaEZyb21BcHBSZWYoKX1fbG9hZENvbXBvbmVudChhKXt0aGlzLmF0dGFjaFZpZXcoYS5ob3N0VmlldyksdGhpcy50aWNrKCksdGhpcy5jb21wb25lbnRzLnB1c2goYSksdGhpcy5faW5qZWN0b3IuZ2V0KF9FLFtdKS5m''@;'; put 'put ''b3JFYWNoKGg9PmgoYSkpfW5nT25EZXN0cm95KCl7aWYoIXRoaXMuX2Rlc3Ryb3llZCl0cnl7dGhpcy5fZGVzdHJveUxpc3RlbmVycy5mb3JFYWNoKGE9PmEoKSksdGhpcy5fdmlld3Muc2xpY2UoKS5mb3JFYWNoKGE9PmEuZGVzdHJveSgpKX1maW5hbGx5e3RoaXMuX2Rlc3Ryb3llZD0hMCx0''@;'; put 'put ''aGlzLl92aWV3cz1bXSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdfX1vbkRlc3Ryb3koYSl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMucHVzaChhKSwoKT0+UU8odGhpcy5fZGVzdHJveUxpc3RlbmVycyxhKX1kZXN0cm95KCl7aWYodGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyBQ''@;'; put 'put ''cig0MDYsITEpO2NvbnN0IGE9dGhpcy5faW5qZWN0b3I7YS5kZXN0cm95JiYhYS5kZXN0cm95ZWQmJmEuZGVzdHJveSgpfWdldCB2aWV3Q291bnQoKXtyZXR1cm4gdGhpcy5fdmlld3MubGVuZ3RofXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGlj''@;'; put 'put ''IFx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKTtmdW5jdGlvbiBRTyhjLGwpe2NvbnN0IGE9Yy5pbmRleE9mKGwpO2E+LTEmJmMuc3BsaWNlKGEsMSl9ZnVuY3Rpb24gY0NlKGMsbCxhLGQpeyhhfHxqOChj''@;'; put 'put ''KSkmJnFiKGMsbCxhJiYhZD8wOjEpfWZ1bmN0aW9uIE5yKGMsbCxhLGQpe2NvbnN0IGg9S3IoKTtyZXR1cm4gZ3UoaCx0aCgpLGwpJiYoRG8oKSxmZihEbCgpLGgsYyxsLGEsZCkpLE5yfWZ1bmN0aW9uIGdfKGMsbCxhLGQpe3JldHVybiBndShjLHRoKCksYSk/bCtNbyhhKStkOmpvfWZ1bmN0''@;'; put 'put ''aW9uIGVQKGMsbCl7cmV0dXJuIGM8PDE3fGw8PDJ9ZnVuY3Rpb24gJDcoYyl7cmV0dXJuIGM+PjE3JjMyNzY3fWZ1bmN0aW9uIERZKGMpe3JldHVybiAyfGN9ZnVuY3Rpb24gU18oYyl7cmV0dXJuKDEzMTA2OCZjKT4+Mn1mdW5jdGlvbiBJWShjLGwpe3JldHVybi0xMzEwNjkmY3xsPDwyfWZ1''@;'; put 'put ''bmN0aW9uIFJZKGMpe3JldHVybiAxfGN9ZnVuY3Rpb24gTnNlKGMsbCxhLGQpe2NvbnN0IGg9Y1thKzFdLGY9bnVsbD09PWw7bGV0IHY9ZD8kNyhoKTpTXyhoKSxNPSExO2Zvcig7MCE9PXYmJighMT09PU18fGYpOyl7Y29uc3QgVT1jW3YrMV07S0NlKGNbdl0sbCkmJihNPSEwLGNbdisxXT1k''@;'; put 'put ''P1JZKFUpOkRZKFUpKSx2PWQ/JDcoVSk6U18oVSl9TSYmKGNbYSsxXT1kP0RZKGgpOlJZKGgpKX1mdW5jdGlvbiBLQ2UoYyxsKXtyZXR1cm4gbnVsbD09PWN8fG51bGw9PWx8fChBcnJheS5pc0FycmF5KGMpP2NbMV06Yyk9PT1sfHwhKCFBcnJheS5pc0FycmF5KGMpfHwic3RyaW5nIiE9dHlw''@;'; put 'put ''ZW9mIGwpJiZqaChjLGwpPj0wfWNvbnN0IEMwPXt0ZXh0RW5kOjAsa2V5OjAsa2V5RW5kOjAsdmFsdWU6MCx2YWx1ZUVuZDowfTtmdW5jdGlvbiBWc2UoYyl7cmV0dXJuIGMuc3Vic3RyaW5nKEMwLmtleSxDMC5rZXlFbmQpfWZ1bmN0aW9uIEJzZShjLGwpe2NvbnN0IGE9QzAudGV4dEVuZDty''@;'; put 'put ''ZXR1cm4gYT09PWw/LTE6KGw9QzAua2V5RW5kPWZ1bmN0aW9uIFFDZShjLGwsYSl7Zm9yKDtsPGEmJmMuY2hhckNvZGVBdChsKT4zMjspbCsrO3JldHVybiBsfShjLEMwLmtleT1sLGEpLE1fKGMsbCxhKSl9ZnVuY3Rpb24gTV8oYyxsLGEpe2Zvcig7bDxhJiZjLmNoYXJDb2RlQXQobCk8PTMy''@;'; put 'put ''OylsKys7cmV0dXJuIGx9ZnVuY3Rpb24gRWUoYyxsLGEpe2NvbnN0IGQ9S3IoKTtyZXR1cm4gZ3UoZCx0aCgpLGwpJiZCMChEbygpLERsKCksZCxjLGwsZFsxMV0sYSwhMSksRWV9ZnVuY3Rpb24gTFkoYyxsLGEsZCxoKXtSeChsLGMsYSxoPyJjbGFzcyI6InN0eWxlIixkKX1mdW5jdGlvbiBt''@;'; put 'put ''ZChjLGwsYSl7cmV0dXJuIFQzKGMsbCxhLCExKSxtZH1mdW5jdGlvbiB4cihjLGwpe3JldHVybiBUMyhjLGwsbnVsbCwhMCkseHJ9ZnVuY3Rpb24gcjQoYyxsKXtmb3IobGV0IGE9ZnVuY3Rpb24gcUNlKGMpe3JldHVybiBmdW5jdGlvbiB6c2UoYyl7QzAua2V5PTAsQzAua2V5RW5kPTAsQzAu''@;'; put 'put ''dmFsdWU9MCxDMC52YWx1ZUVuZD0wLEMwLnRleHRFbmQ9Yy5sZW5ndGh9KGMpLEJzZShjLE1fKGMsMCxDMC50ZXh0RW5kKSl9KGwpO2E+PTA7YT1Cc2UobCxhKSlVdShjLFZzZShsKSwhMCl9ZnVuY3Rpb24gVDMoYyxsLGEsZCl7Y29uc3QgaD1LcigpLGY9RG8oKSx2PV8zKDIpO2YuZmlyc3RV''@;'; put 'put ''cGRhdGVQYXNzJiZHc2UoZixjLHYsZCksbCE9PWpvJiZndShoLHYsbCkmJktzZShmLGYuZGF0YVtiMCgpXSxoLGhbMTFdLGMsaFt2KzFdPWZ1bmN0aW9uIHVTZShjLGwpe3JldHVybiBudWxsPT1jfHwiIj09PWN8fCgic3RyaW5nIj09dHlwZW9mIGw/Yys9bDoib2JqZWN0Ij09dHlwZW9mIGMm''@;'; put 'put ''JihjPSRsKFhwKGMpKSkpLGN9KGwsYSksZCx2KX1mdW5jdGlvbiBZc2UoYyxsKXtyZXR1cm4gbD49Yy5leHBhbmRvU3RhcnRJbmRleH1mdW5jdGlvbiBHc2UoYyxsLGEsZCl7Y29uc3QgaD1jLmRhdGE7aWYobnVsbD09PWhbYSsxXSl7Y29uc3QgZj1oW2IwKCldLHY9WXNlKGMsYSk7cXNlKGYs''@;'; put 'put ''ZCkmJm51bGw9PT1sJiYhdiYmKGw9ITEpLGw9ZnVuY3Rpb24gclNlKGMsbCxhLGQpe2NvbnN0IGg9bk0oYyk7bGV0IGY9ZD9sLnJlc2lkdWFsQ2xhc3NlczpsLnJlc2lkdWFsU3R5bGVzO2lmKG51bGw9PT1oKTA9PT0oZD9sLmNsYXNzQmluZGluZ3M6bC5zdHlsZUJpbmRpbmdzKSYmKGE9Q0Uo''@;'; put 'put ''YT1PWShudWxsLGMsbCxhLGQpLGwuYXR0cnMsZCksZj1udWxsKTtlbHNle2NvbnN0IHY9bC5kaXJlY3RpdmVTdHlsaW5nTGFzdDtpZigtMT09PXZ8fGNbdl0hPT1oKWlmKGE9T1koaCxjLGwsYSxkKSxudWxsPT09Zil7bGV0IEQ9ZnVuY3Rpb24gaVNlKGMsbCxhKXtjb25zdCBkPWE/bC5jbGFz''@;'; put 'put ''c0JpbmRpbmdzOmwuc3R5bGVCaW5kaW5ncztpZigwIT09U18oZCkpcmV0dXJuIGNbJDcoZCldfShjLGwsZCk7dm9pZCAwIT09RCYmQXJyYXkuaXNBcnJheShEKSYmKEQ9T1kobnVsbCxjLGwsRFsxXSxkKSxEPUNFKEQsbC5hdHRycyxkKSxmdW5jdGlvbiBhU2UoYyxsLGEsZCl7Y1skNyhhP2wu''@;'; put 'put ''Y2xhc3NCaW5kaW5nczpsLnN0eWxlQmluZGluZ3MpXT1kfShjLGwsZCxEKSl9ZWxzZSBmPWZ1bmN0aW9uIG9TZShjLGwsYSl7bGV0IGQ7Y29uc3QgaD1sLmRpcmVjdGl2ZUVuZDtmb3IobGV0IGY9MStsLmRpcmVjdGl2ZVN0eWxpbmdMYXN0O2Y8aDtmKyspZD1DRShkLGNbZl0uaG9zdEF0dHJz''@;'; put 'put ''LGEpO3JldHVybiBDRShkLGwuYXR0cnMsYSl9KGMsbCxkKX1yZXR1cm4gdm9pZCAwIT09ZiYmKGQ/bC5yZXNpZHVhbENsYXNzZXM9ZjpsLnJlc2lkdWFsU3R5bGVzPWYpLGF9KGgsZixsLGQpLGZ1bmN0aW9uIEdDZShjLGwsYSxkLGgsZil7bGV0IHY9Zj9sLmNsYXNzQmluZGluZ3M6bC5zdHls''@;'; put 'put ''ZUJpbmRpbmdzLE09JDcodiksRD1TXyh2KTtjW2RdPWE7bGV0IHRlLFU9ITE7aWYoQXJyYXkuaXNBcnJheShhKT8odGU9YVsxXSwobnVsbD09PXRlfHxqaChhLHRlKT4wKSYmKFU9ITApKTp0ZT1hLGgpaWYoMCE9PUQpe2NvbnN0IHZlPSQ3KGNbTSsxXSk7Y1tkKzFdPWVQKHZlLE0pLDAhPT12''@;'; put 'put ''ZSYmKGNbdmUrMV09SVkoY1t2ZSsxXSxkKSksY1tNKzFdPWZ1bmN0aW9uIFdDZShjLGwpe3JldHVybiAxMzEwNzEmY3xsPDwxN30oY1tNKzFdLGQpfWVsc2UgY1tkKzFdPWVQKE0sMCksMCE9PU0mJihjW00rMV09SVkoY1tNKzFdLGQpKSxNPWQ7ZWxzZSBjW2QrMV09ZVAoRCwwKSwwPT09TT9N''@;'; put 'put ''PWQ6Y1tEKzFdPUlZKGNbRCsxXSxkKSxEPWQ7VSYmKGNbZCsxXT1EWShjW2QrMV0pKSxOc2UoYyx0ZSxkLCEwKSxOc2UoYyx0ZSxkLCExKSxmdW5jdGlvbiAkQ2UoYyxsLGEsZCxoKXtjb25zdCBmPWg/Yy5yZXNpZHVhbENsYXNzZXM6Yy5yZXNpZHVhbFN0eWxlcztudWxsIT1mJiYic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mIGwmJmpoKGYsbCk+PTAmJihhW2QrMV09UlkoYVtkKzFdKSl9KGwsdGUsYyxkLGYpLHY9ZVAoTSxEKSxmP2wuY2xhc3NCaW5kaW5ncz12Omwuc3R5bGVCaW5kaW5ncz12fShoLGYsbCxhLHYsZCl9fWZ1bmN0aW9uIE9ZKGMsbCxhLGQsaCl7bGV0IGY9bnVsbDtjb25zdCB2PWEu''@;'; put 'put ''ZGlyZWN0aXZlRW5kO2xldCBNPWEuZGlyZWN0aXZlU3R5bGluZ0xhc3Q7Zm9yKC0xPT09TT9NPWEuZGlyZWN0aXZlU3RhcnQ6TSsrO008diYmKGY9bFtNXSxkPUNFKGQsZi5ob3N0QXR0cnMsaCksZiE9PWMpOylNKys7cmV0dXJuIG51bGwhPT1jJiYoYS5kaXJlY3RpdmVTdHlsaW5nTGFzdD1N''@;'; put 'put ''KSxkfWZ1bmN0aW9uIENFKGMsbCxhKXtjb25zdCBkPWE/MToyO2xldCBoPS0xO2lmKG51bGwhPT1sKWZvcihsZXQgZj0wO2Y8bC5sZW5ndGg7ZisrKXtjb25zdCB2PWxbZl07Im51bWJlciI9PXR5cGVvZiB2P2g9djpoPT09ZCYmKEFycmF5LmlzQXJyYXkoYyl8fChjPXZvaWQgMD09PWM/W106''@;'; put 'put ''WyIiLGNdKSxVdShjLHYsISFhfHxsWysrZl0pKX1yZXR1cm4gdm9pZCAwPT09Yz9udWxsOmN9ZnVuY3Rpb24gS3NlKGMsbCxhLGQsaCxmLHYsTSl7aWYoISgzJmwudHlwZSkpcmV0dXJuO2NvbnN0IEQ9Yy5kYXRhLFU9RFtNKzFdLHRlPWZ1bmN0aW9uIFlDZShjKXtyZXR1cm4hKDEmfmMpfShV''@;'; put 'put ''KT9Yc2UoRCxsLGEsaCxTXyhVKSx2KTp2b2lkIDA7dFAodGUpfHwodFAoZil8fGZ1bmN0aW9uIFpDZShjKXtyZXR1cm4hKDImfmMpfShVKSYmKGY9WHNlKEQsbnVsbCxhLGgsTSx2KSksZnVuY3Rpb24gd1coYyxsLGEsZCxoKXtpZihsKWg/Yy5hZGRDbGFzcyhhLGQpOmMucmVtb3ZlQ2xhc3Mo''@;'; put 'put ''YSxkKTtlbHNle2xldCBmPS0xPT09ZC5pbmRleE9mKCItIik/dm9pZCAwOkpwLkRhc2hDYXNlO251bGw9PWg/Yy5yZW1vdmVTdHlsZShhLGQsZik6KCJzdHJpbmciPT10eXBlb2YgaCYmaC5lbmRzV2l0aCgiIWltcG9ydGFudCIpJiYoaD1oLnNsaWNlKDAsLTEwKSxmfD1KcC5JbXBvcnRhbnQp''@;'; put 'put ''LGMuc2V0U3R5bGUoYSxkLGgsZikpfX0oZCx2LCRlKGIwKCksYSksaCxmKSl9ZnVuY3Rpb24gWHNlKGMsbCxhLGQsaCxmKXtjb25zdCB2PW51bGw9PT1sO2xldCBNO2Zvcig7aD4wOyl7Y29uc3QgRD1jW2hdLFU9QXJyYXkuaXNBcnJheShEKSx0ZT1VP0RbMV06RCxvZT1udWxsPT09dGU7bGV0''@;'; put 'put ''IHZlPWFbaCsxXTt2ZT09PWpvJiYodmU9b2U/RXM6dm9pZCAwKTtsZXQgd2U9b2U/cm0odmUsZCk6dGU9PT1kP3ZlOnZvaWQgMDtpZihVJiYhdFAod2UpJiYod2U9cm0oRCxkKSksdFAod2UpJiYoTT13ZSx2KSlyZXR1cm4gTTtjb25zdCBGZT1jW2grMV07aD12PyQ3KEZlKTpTXyhGZSl9aWYo''@;'; put 'put ''bnVsbCE9PWwpe2xldCBEPWY/bC5yZXNpZHVhbENsYXNzZXM6bC5yZXNpZHVhbFN0eWxlcztudWxsIT1EJiYoTT1ybShELGQpKX1yZXR1cm4gTX1mdW5jdGlvbiB0UChjKXtyZXR1cm4gdm9pZCAwIT09Y31mdW5jdGlvbiBxc2UoYyxsKXtyZXR1cm4hIShjLmZsYWdzJihsPzg6MTYpKX1mdW5j''@;'; put 'put ''dGlvbiBKc2UoYyxsLGEpeyFmdW5jdGlvbiBBMyhjLGwsYSxkKXtjb25zdCBoPURvKCksZj1fMygyKTtoLmZpcnN0VXBkYXRlUGFzcyYmR3NlKGgsbnVsbCxmLGQpO2NvbnN0IHY9S3IoKTtpZihhIT09am8mJmd1KHYsZixhKSl7Y29uc3QgTT1oLmRhdGFbYjAoKV07aWYocXNlKE0sZCkmJiFZ''@;'; put 'put ''c2UoaCxmKSl7bGV0IEQ9ZD9NLmNsYXNzZXNXaXRob3V0SG9zdDpNLnN0eWxlc1dpdGhvdXRIb3N0O251bGwhPT1EJiYoYT1oYyhELGF8fCIiKSksTFkoaCxNLHYsYSxkKX1lbHNlIWZ1bmN0aW9uIGNTZShjLGwsYSxkLGgsZix2LE0pe2g9PT1qbyYmKGg9RXMpO2xldCBEPTAsVT0wLHRlPTA8''@;'; put 'put ''aC5sZW5ndGg/aFswXTpudWxsLG9lPTA8Zi5sZW5ndGg/ZlswXTpudWxsO2Zvcig7bnVsbCE9PXRlfHxudWxsIT09b2U7KXtjb25zdCB2ZT1EPGgubGVuZ3RoP2hbRCsxXTp2b2lkIDAsd2U9VTxmLmxlbmd0aD9mW1UrMV06dm9pZCAwO2xldCBXZSxGZT1udWxsO3RlPT09b2U/KEQrPTIsVSs9''@;'; put 'put ''Mix2ZSE9PXdlJiYoRmU9b2UsV2U9d2UpKTpudWxsPT09b2V8fG51bGwhPT10ZSYmdGU8b2U/KEQrPTIsRmU9dGUpOihVKz0yLEZlPW9lLFdlPXdlKSxudWxsIT09RmUmJktzZShjLGwsYSxkLEZlLFdlLHYsTSksdGU9RDxoLmxlbmd0aD9oW0RdOm51bGwsb2U9VTxmLmxlbmd0aD9mW1VdOm51''@;'; put 'put ''bGx9fShoLE0sdix2WzExXSx2W2YrMV0sdltmKzFdPWZ1bmN0aW9uIHNTZShjLGwsYSl7aWYobnVsbD09YXx8IiI9PT1hKXJldHVybiBFcztjb25zdCBkPVtdLGg9WHAoYSk7aWYoQXJyYXkuaXNBcnJheShoKSlmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKyljKGQsaFtmXSwhMCk7ZWxzZSBp''@;'; put 'put ''Zigib2JqZWN0Ij09dHlwZW9mIGgpZm9yKGNvbnN0IGYgaW4gaCloLmhhc093blByb3BlcnR5KGYpJiZjKGQsZixoW2ZdKTtlbHNlInN0cmluZyI9PXR5cGVvZiBoJiZsKGQsaCk7cmV0dXJuIGR9KGMsbCxhKSxkLGYpfX0oVXUscjQsZ18oS3IoKSxjLGwsYSksITApfWZ1bmN0aW9uIGRlKGMs''@;'; put 'put ''bCxhLGQpe2NvbnN0IGg9S3IoKSxmPURvKCksdj0yNitjLE09aFsxMV0sRD1mLmZpcnN0Q3JlYXRlUGFzcz9VTyh2LGYsaCxsLGt4LFhTKCksYSxkKTpmLmRhdGFbdl0sVT1ubGUoZixoLEQsTSxsLGMpO2hbdl09VTtjb25zdCB0ZT1YZChEKTtyZXR1cm4gZWgoRCwhMCksRUwoTSxVLEQpLCFR''@;'; put 'put ''cChEKSYmVTgoKSYmS2IoZixoLFUsRCksKDA9PT1mdW5jdGlvbiBfSSgpe3JldHVybiBIby5sRnJhbWUuZWxlbWVudERlcHRoQ291bnR9KCl8fHRlKSYmRTEoVSxoKSxmdW5jdGlvbiBGeigpe0hvLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudCsrfSgpLHRlJiYoWWIoZixoLEQpLHJ4KGYsRCxo''@;'; put 'put ''KSksbnVsbCE9PWQmJlR4KGgsRCksZGV9ZnVuY3Rpb24gaGUoKXtsZXQgYz1ycygpO0pTKCk/S3koKTooYz1jLnBhcmVudCxlaChjLCExKSk7Y29uc3QgbD1jOyhmdW5jdGlvbiBOeihjKXtyZXR1cm4gSG8uc2tpcEh5ZHJhdGlvblJvb3RUTm9kZT09PWN9KShsKSYmZnVuY3Rpb24ganooKXtI''@;'; put 'put ''by5za2lwSHlkcmF0aW9uUm9vdFROb2RlPW51bGx9KCksZnVuY3Rpb24gSHooKXtIby5sRnJhbWUuZWxlbWVudERlcHRoQ291bnQtLX0oKTtjb25zdCBhPURvKCk7cmV0dXJuIGEuZmlyc3RDcmVhdGVQYXNzJiZnRShhLGwpLG51bGwhPWwuY2xhc3Nlc1dpdGhvdXRIb3N0JiZmdW5jdGlvbiB0''@;'; put 'put ''YihjKXtyZXR1cm4hISg4JmMuZmxhZ3MpfShsKSYmTFkoYSxsLEtyKCksbC5jbGFzc2VzV2l0aG91dEhvc3QsITApLG51bGwhPWwuc3R5bGVzV2l0aG91dEhvc3QmJmZ1bmN0aW9uIEp6KGMpe3JldHVybiEhKDE2JmMuZmxhZ3MpfShsKSYmTFkoYSxsLEtyKCksbC5zdHlsZXNXaXRob3V0SG9z''@;'; put 'put ''dCwhMSksaGV9ZnVuY3Rpb24gR3QoYyxsLGEsZCl7cmV0dXJuIGRlKGMsbCxhLGQpLGhlKCksR3R9bGV0IG5sZT0oYyxsLGEsZCxoLGYpPT4odGYoITApLGpiKGQsaCxmdW5jdGlvbiBESSgpe3JldHVybiBIby5sRnJhbWUuY3VycmVudE5hbWVzcGFjZX0oKSkpO2Z1bmN0aW9uIG9pKGMsbCxh''@;'; put 'put ''KXtjb25zdCBkPUtyKCksaD1EbygpLGY9YysyNix2PWguZmlyc3RDcmVhdGVQYXNzP2Z1bmN0aW9uIE9TZShjLGwsYSxkLGgpe2NvbnN0IGY9bC5jb25zdHMsdj1GYyhmLGQpLE09Vm0obCxjLDgsIm5nLWNvbnRhaW5lciIsdik7bnVsbCE9PXYmJmRFKE0sdiwhMCk7Y29uc3QgRD1GYyhmLGgp''@;'; put 'put ''O3JldHVybiBYUygpJiZoRShsLGEsTSxELGt4KSxNLm1lcmdlZEF0dHJzPWZtKE0ubWVyZ2VkQXR0cnMsTS5hdHRycyksbnVsbCE9PWwucXVlcmllcyYmbC5xdWVyaWVzLmVsZW1lbnRTdGFydChsLE0pLE19KGYsaCxkLGwsYSk6aC5kYXRhW2ZdO2VoKHYsITApO2NvbnN0IE09cmxlKGgsZCx2''@;'; put 'put ''LGMpO3JldHVybiBkW2ZdPU0sVTgoKSYmS2IoaCxkLE0sdiksRTEoTSxkKSxYZCh2KSYmKFliKGgsZCx2KSxyeChoLHYsZCkpLG51bGwhPWEmJlR4KGQsdiksb2l9ZnVuY3Rpb24gc2koKXtsZXQgYz1ycygpO2NvbnN0IGw9RG8oKTtyZXR1cm4gSlMoKT9LeSgpOihjPWMucGFyZW50LGVoKGMs''@;'; put 'put ''ITEpKSxsLmZpcnN0Q3JlYXRlUGFzcyYmKHNNKGwsYyksR2goYykmJmwucXVlcmllcy5lbGVtZW50RW5kKGMpKSxzaX1mdW5jdGlvbiB6bChjLGwsYSl7cmV0dXJuIG9pKGMsbCxhKSxzaSgpLHpsfWxldCBybGU9KGMsbCxhLGQpPT4odGYoITApLEJiKGxbMTFdLCIiKSk7ZnVuY3Rpb24gT24o''@;'; put 'put ''KXtyZXR1cm4gS3IoKX1mdW5jdGlvbiBpNChjLGwsYSl7Y29uc3QgZD1LcigpO3JldHVybiBndShkLHRoKCksbCkmJkIwKERvKCksRGwoKSxkLGMsbCxkWzExXSxhLCEwKSxpNH1mdW5jdGlvbiBOWShjLGwsYSl7Y29uc3QgZD1LcigpO2lmKGd1KGQsdGgoKSxsKSl7Y29uc3QgZj1EbygpLHY9''@;'; put 'put ''RGwoKTtCMChmLHYsZCxjLGwsekwobk0oZi5kYXRhKSx2LGQpLGEsITApfXJldHVybiBOWX1jb25zdCBLNz12b2lkIDA7dmFyIE5TZT1bImVuIixbWyJhIiwicCJdLFsiQU0iLCJQTSJdLEs3XSxbWyJBTSIsIlBNIl0sSzcsSzddLFtbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSxbIlN1''@;'; put 'put ''biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLFsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl1dLEs3LFtbIkoiLCJGIiwi''@;'; put 'put ''TSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdLFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sWyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIs''@;'; put 'put ''Ikp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdXSxLNyxbWyJCIiwiQSJdLFsiQkMiLCJBRCJdLFsiQmVmb3JlIENocmlzdCIsIkFubm8gRG9taW5pIl1dLDAsWzYsMF0sWyJNL2QveXkiLCJNTU0gZCwgeSIsIk1NTU0gZCwgeSIsIkVF''@;'; put 'put ''RUUsIE1NTU0gZCwgeSJdLFsiaDptbSBhIiwiaDptbTpzcyBhIiwiaDptbTpzcyBhIHoiLCJoOm1tOnNzIGEgenp6eiJdLFsiezF9LCB7MH0iLEs3LCJ7MX0gJ2F0JyB7MH0iLEs3XSxbIi4iLCIsIiwiOyIsIiUiLCIrIiwiLSIsIkUiLCJceGQ3IiwiXHUyMDMwIiwiXHUyMjFlIiwiTmFOIiwi''@;'; put 'put ''OiJdLFsiIywjIzAuIyMjIiwiIywjIzAlIiwiXHhhNCMsIyMwLjAwIiwiI0UwIl0sIlVTRCIsIiQiLCJVUyBEb2xsYXIiLHt9LCJsdHIiLGZ1bmN0aW9uIEhTZShjKXtjb25zdCBsPU1hdGguZmxvb3IoTWF0aC5hYnMoYykpLGE9Yy50b1N0cmluZygpLnJlcGxhY2UoL15bXi5dKlwuPy8sIiIp''@;'; put 'put ''Lmxlbmd0aDtyZXR1cm4gMT09PWwmJjA9PT1hPzE6NX1dO2xldCB4Xz17fTtmdW5jdGlvbiBEMShjKXtjb25zdCBsPWZ1bmN0aW9uIEJTZShjKXtyZXR1cm4gYy50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywiLSIpfShjKTtsZXQgYT1hbGUobCk7aWYoYSlyZXR1cm4gYTtjb25zdCBkPWwu''@;'; put 'put ''c3BsaXQoIi0iKVswXTtpZihhPWFsZShkKSxhKXJldHVybiBhO2lmKCJlbiI9PT1kKXJldHVybiBOU2U7dGhyb3cgbmV3IFByKDcwMSwhMSl9ZnVuY3Rpb24gYWxlKGMpe3JldHVybiBjIGluIHhffHwoeF9bY109QmEubmcmJkJhLm5nLmNvbW1vbiYmQmEubmcuY29tbW9uLmxvY2FsZXMmJkJh''@;'; put 'put ''Lm5nLmNvbW1vbi5sb2NhbGVzW2NdKSx4X1tjXX12YXIgYWM9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5Mb2NhbGVJZD0wXT0iTG9jYWxlSWQiLGNbYy5EYXlQZXJpb2RzRm9ybWF0PTFdPSJEYXlQZXJpb2RzRm9ybWF0IixjW2MuRGF5UGVyaW9kc1N0YW5kYWxvbmU9Ml09IkRheVBlcmlvZHNT''@;'; put 'put ''dGFuZGFsb25lIixjW2MuRGF5c0Zvcm1hdD0zXT0iRGF5c0Zvcm1hdCIsY1tjLkRheXNTdGFuZGFsb25lPTRdPSJEYXlzU3RhbmRhbG9uZSIsY1tjLk1vbnRoc0Zvcm1hdD01XT0iTW9udGhzRm9ybWF0IixjW2MuTW9udGhzU3RhbmRhbG9uZT02XT0iTW9udGhzU3RhbmRhbG9uZSIsY1tjLkVy''@;'; put 'put ''YXM9N109IkVyYXMiLGNbYy5GaXJzdERheU9mV2Vlaz04XT0iRmlyc3REYXlPZldlZWsiLGNbYy5XZWVrZW5kUmFuZ2U9OV09IldlZWtlbmRSYW5nZSIsY1tjLkRhdGVGb3JtYXQ9MTBdPSJEYXRlRm9ybWF0IixjW2MuVGltZUZvcm1hdD0xMV09IlRpbWVGb3JtYXQiLGNbYy5EYXRlVGltZUZv''@;'; put 'put ''cm1hdD0xMl09IkRhdGVUaW1lRm9ybWF0IixjW2MuTnVtYmVyU3ltYm9scz0xM109Ik51bWJlclN5bWJvbHMiLGNbYy5OdW1iZXJGb3JtYXRzPTE0XT0iTnVtYmVyRm9ybWF0cyIsY1tjLkN1cnJlbmN5Q29kZT0xNV09IkN1cnJlbmN5Q29kZSIsY1tjLkN1cnJlbmN5U3ltYm9sPTE2XT0iQ3Vy''@;'; put 'put ''cmVuY3lTeW1ib2wiLGNbYy5DdXJyZW5jeU5hbWU9MTddPSJDdXJyZW5jeU5hbWUiLGNbYy5DdXJyZW5jaWVzPTE4XT0iQ3VycmVuY2llcyIsY1tjLkRpcmVjdGlvbmFsaXR5PTE5XT0iRGlyZWN0aW9uYWxpdHkiLGNbYy5QbHVyYWxDYXNlPTIwXT0iUGx1cmFsQ2FzZSIsY1tjLkV4dHJhRGF0''@;'; put 'put ''YT0yMV09IkV4dHJhRGF0YSIsY30oYWN8fHt9KTtjb25zdCByUD0iZW4tVVMiO2xldCBvbGU9clA7ZnVuY3Rpb24gTWxlKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gZChoKXtpZihoPT09RnVuY3Rpb24pcmV0dXJuIGE7azcoWnUoYyk/bGEoYy5pbmRleCxsKTpsLDUpO2NvbnN0IHY9bFs4XTts''@;'; put 'put ''ZXQgTT14bGUobCx2LGEsaCksRD1kLl9fbmdOZXh0TGlzdGVuZXJGbl9fO2Zvcig7RDspTT14bGUobCx2LEQsaCkmJk0sRD1ELl9fbmdOZXh0TGlzdGVuZXJGbl9fO3JldHVybiBNfX1mdW5jdGlvbiB4bGUoYyxsLGEsZCl7Y29uc3QgaD1fZShudWxsKTt0cnl7cmV0dXJuITEhPT1hKGQpfWNh''@;'; put 'put ''dGNoKGYpe3JldHVybiBmdW5jdGlvbiBBTWUoYyxsKXtjb25zdCBhPWNbOV0sZD1hP2EuZ2V0KGUyLG51bGwpOm51bGw7ZCYmZC5oYW5kbGVFcnJvcihsKX0oYyxmKSwhMX1maW5hbGx5e19lKGgpfX1mdW5jdGlvbiBFbGUoYyxsLGEsZCxoLGYpe2NvbnN0IE09bFsxXSx0ZT1sW2FdW00uZGF0''@;'; put 'put ''YVthXS5vdXRwdXRzW2RdXSxvZT1NLmZpcnN0Q3JlYXRlUGFzcz9HUyhNKTpudWxsLHZlPVlTKGwpLHdlPXRlLnN1YnNjcmliZShmKSxGZT12ZS5sZW5ndGg7dmUucHVzaChmLHdlKSxvZSYmb2UucHVzaChoLGMuaW5kZXgsRmUsLShGZSsxKSl9ZnVuY3Rpb24gT3QoYyxsLGEsZCl7Y29uc3Qg''@;'; put 'put ''aD1LcigpLGY9RG8oKSx2PXJzKCk7cmV0dXJuIHpZKGYsaCxoWzExXSx2LGMsbCxkKSxPdH1mdW5jdGlvbiBqWShjLGwpe2NvbnN0IGE9cnMoKSxkPUtyKCksaD1EbygpO3JldHVybiB6WShoLGQsekwobk0oaC5kYXRhKSxhLGQpLGEsYyxsKSxqWX1mdW5jdGlvbiB6WShjLGwsYSxkLGgsZix2''@;'; put 'put ''KXtjb25zdCBNPVhkKGQpLFU9Yy5maXJzdENyZWF0ZVBhc3M/R1MoYyk6bnVsbCx0ZT1ZUyhsKTtsZXQgb2U9ITA7aWYoMyZkLnR5cGV8fHYpe2NvbnN0IHZlPXB0KGQsbCksd2U9dj92KHZlKTp2ZSxGZT10ZS5sZW5ndGgsV2U9dj9kdD0+dihIYShkdFtkLmluZGV4XSkpOmQuaW5kZXg7bGV0''@;'; put 'put ''IG50PW51bGw7aWYoIXYmJk0mJihudD1mdW5jdGlvbiBrTWUoYyxsLGEsZCl7Y29uc3QgaD1jLmNsZWFudXA7aWYobnVsbCE9aClmb3IobGV0IGY9MDtmPGgubGVuZ3RoLTE7Zis9Mil7Y29uc3Qgdj1oW2ZdO2lmKHY9PT1hJiZoW2YrMV09PT1kKXtjb25zdCBNPWxbN10sRD1oW2YrMl07cmV0''@;'; put 'put ''dXJuIE0ubGVuZ3RoPkQ/TVtEXTpudWxsfSJzdHJpbmciPT10eXBlb2YgdiYmKGYrPTIpfXJldHVybiBudWxsfShjLGwsaCxkLmluZGV4KSksbnVsbCE9PW50KShudC5fX25nTGFzdExpc3RlbmVyRm5fX3x8bnQpLl9fbmdOZXh0TGlzdGVuZXJGbl9fPWYsbnQuX19uZ0xhc3RMaXN0ZW5lckZu''@;'; put 'put ''X189ZixvZT0hMTtlbHNle2Y9TWxlKGQsbCxmKTtjb25zdCBkdD1hLmxpc3Rlbih3ZSxoLGYpO3RlLnB1c2goZixkdCksVSYmVS5wdXNoKGgsV2UsRmUsRmUrMSl9fWVsc2UgZj1NbGUoZCxsLGYpO2lmKG9lKXtjb25zdCB2ZT1kLm91dHB1dHM/LltoXSx3ZT1kLmhvc3REaXJlY3RpdmVPdXRw''@;'; put 'put ''dXRzPy5baF07aWYod2UmJndlLmxlbmd0aClmb3IobGV0IEZlPTA7RmU8d2UubGVuZ3RoO0ZlKz0yKUVsZShkLGwsd2VbRmVdLHdlW0ZlKzFdLGgsZik7aWYodmUmJnZlLmxlbmd0aClmb3IoY29uc3QgRmUgb2YgdmUpRWxlKGQsbCxGZSxoLGgsZil9fWZ1bmN0aW9uIE9lKGM9MSl7cmV0dXJu''@;'; put 'put ''IGZ1bmN0aW9uIFd6KGMpe3JldHVybihIby5sRnJhbWUuY29udGV4dExWaWV3PWZ1bmN0aW9uIGJJKGMsbCl7Zm9yKDtjPjA7KWw9bFsxNF0sYy0tO3JldHVybiBsfShjLEhvLmxGcmFtZS5jb250ZXh0TFZpZXcpKVs4XX0oYyl9ZnVuY3Rpb24gRE1lKGMsbCl7bGV0IGE9bnVsbDtjb25zdCBk''@;'; put 'put ''PWZ1bmN0aW9uICRaKGMpe2NvbnN0IGw9Yy5hdHRycztpZihudWxsIT1sKXtjb25zdCBhPWwuaW5kZXhPZig1KTtpZighKDEmYSkpcmV0dXJuIGxbYSsxXX1yZXR1cm4gbnVsbH0oYyk7Zm9yKGxldCBoPTA7aDxsLmxlbmd0aDtoKyspe2NvbnN0IGY9bFtoXTtpZigiKiIhPT1mKXtpZihudWxs''@;'; put 'put ''PT09ZD9GTChjLGYsITApOnFaKGQsZikpcmV0dXJuIGh9ZWxzZSBhPWh9cmV0dXJuIGF9ZnVuY3Rpb24gc2EoYyl7Y29uc3QgbD1LcigpWzE1XVs1XTtpZighbC5wcm9qZWN0aW9uKXtjb25zdCBkPWwucHJvamVjdGlvbj1mdW5jdGlvbiBtbChjLGwpe2NvbnN0IGE9W107Zm9yKGxldCBkPTA7''@;'; put 'put ''ZDxjO2QrKylhLnB1c2gobCk7cmV0dXJuIGF9KGM/Yy5sZW5ndGg6MSxudWxsKSxoPWQuc2xpY2UoKTtsZXQgZj1sLmNoaWxkO2Zvcig7bnVsbCE9PWY7KXtpZigxMjghPT1mLnR5cGUpe2NvbnN0IHY9Yz9ETWUoZixjKTowO251bGwhPT12JiYoaFt2XT9oW3ZdLnByb2plY3Rpb25OZXh0PWY6''@;'; put 'put ''ZFt2XT1mLGhbdl09Zil9Zj1mLm5leHR9fX1mdW5jdGlvbiBXcihjLGw9MCxhLGQsaCxmKXtjb25zdCB2PUtyKCksTT1EbygpLEQ9ZD9jKzE6bnVsbDtudWxsIT09RCYmdkUodixNLEQsZCxoLGYsbnVsbCxhKTtjb25zdCBVPVZtKE0sMjYrYywxNixudWxsLGF8fG51bGwpO251bGw9PT1VLnBy''@;'; put 'put ''b2plY3Rpb24mJihVLnByb2plY3Rpb249bCksS3koKTtjb25zdCBvZT0hdls2XXx8QWcoKTtudWxsPT09dlsxNV1bNV0ucHJvamVjdGlvbltVLnByb2plY3Rpb25dJiZudWxsIT09RD9mdW5jdGlvbiBJTWUoYyxsLGEpe2NvbnN0IGQ9MjYrYSxoPWwuZGF0YVtkXSxmPWNbZF07Tm0oZixQZyhj''@;'; put 'put ''LGgsdm9pZCAwLHtkZWh5ZHJhdGVkVmlldzpudWxsfSksMCxGZyhoLG51bGwpKX0odixNLEQpOm9lJiYhUXAoVSkmJmZ1bmN0aW9uIGJXKGMsbCxhKXskTChsWzExXSwwLGwsYSxBNyhjLGEsbCksWUwoYS5wYXJlbnR8fGxbNV0sYSxsKSl9KE0sdixVKX1mdW5jdGlvbiBBRShjLGwsYSl7cmV0''@;'; put 'put ''dXJuIFVZKGMsIiIsbCwiIixhKSxBRX1mdW5jdGlvbiBVWShjLGwsYSxkLGgpe2NvbnN0IGY9S3IoKSx2PWdfKGYsbCxhLGQpO3JldHVybiB2IT09am8mJkIwKERvKCksRGwoKSxmLGMsdixmWzExXSxoLCExKSxVWX1mdW5jdGlvbiBwbyhjLGwsYSxkKXshZnVuY3Rpb24gVnIoYyxsLGEsZCl7''@;'; put 'put ''Y29uc3QgaD1EbygpO2lmKGguZmlyc3RDcmVhdGVQYXNzKXtjb25zdCBmPXJzKCk7Vm4oaCxuZXcgcW4obCxhLGQpLGYuaW5kZXgpLGZ1bmN0aW9uIHpyKGMsbCl7Y29uc3QgYT1jLmNvbnRlbnRRdWVyaWVzfHwoYy5jb250ZW50UXVlcmllcz1bXSk7bCE9PShhLmxlbmd0aD9hW2EubGVuZ3Ro''@;'; put 'put ''LTFdOi0xKSYmYS5wdXNoKGMucXVlcmllcy5sZW5ndGgtMSxsKX0oaCxjKSwhKDImfmEpJiYoaC5zdGF0aWNDb250ZW50UXVlcmllcz0hMCl9cmV0dXJuIGtyKGgsS3IoKSxhKX0oYyxsLGEsZCl9ZnVuY3Rpb24gVWEoYyxsLGEpeyFmdW5jdGlvbiBZbihjLGwsYSl7Y29uc3QgZD1EbygpO3Jl''@;'; put 'put ''dHVybiBkLmZpcnN0Q3JlYXRlUGFzcyYmKFZuKGQsbmV3IHFuKGMsbCxhKSwtMSksISgyJn5sKSYmKGQuc3RhdGljVmlld1F1ZXJpZXM9ITApKSxrcihkLEtyKCksbCl9KGMsbCxhKX1mdW5jdGlvbiBnaShjKXtjb25zdCBsPUtyKCksYT1EbygpLGQ9ck0oKTtxeShkKzEpO2NvbnN0IGg9Wmko''@;'; put 'put ''YSxkKTtpZihjLmRpcnR5JiZmdW5jdGlvbiBPbyhjKXtyZXR1cm4hKDQmfmNbMl0pfShsKT09PSEoMiZ+aC5tZXRhZGF0YS5mbGFncykpe2lmKG51bGw9PT1oLm1hdGNoZXMpYy5yZXNldChbXSk7ZWxzZXtjb25zdCBmPUNpKGwsZCk7Yy5yZXNldChmLEpJKSxjLm5vdGlmeU9uQ2hhbmdlcygp''@;'; put 'put ''fXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIG1pKCl7cmV0dXJuIGZ1bmN0aW9uIGtpKGMsbCl7cmV0dXJuIGNbMThdLnF1ZXJpZXNbbF0ucXVlcnlMaXN0fShLcigpLHJNKCkpfWZ1bmN0aW9uIGZhKGMpe3JldHVybiAkbihmdW5jdGlvbiBRUygpe3JldHVybiBIby5sRnJhbWUuY29udGV4''@;'; put 'put ''dExWaWV3fSgpLDI2K2MpfWZ1bmN0aW9uIFBlKGMsbD0iIil7Y29uc3QgYT1LcigpLGQ9RG8oKSxoPWMrMjYsZj1kLmZpcnN0Q3JlYXRlUGFzcz9WbShkLGgsMSxsLG51bGwpOmQuZGF0YVtoXSx2PVpsZShkLGEsZixsLGMpO2FbaF09dixVOCgpJiZLYihkLGEsdixmKSxlaChmLCExKX1sZXQg''@;'; put 'put ''WmxlPShjLGwsYSxkLGgpPT4odGYoITApLGZ1bmN0aW9uIEltKGMsbCl7cmV0dXJuIGMuY3JlYXRlVGV4dChsKX0obFsxMV0sZCkpO2Z1bmN0aW9uIENyKGMpe3JldHVybiBJcigiIixjLCIiKSxDcn1mdW5jdGlvbiBJcihjLGwsYSl7Y29uc3QgZD1LcigpLGg9Z18oZCxjLGwsYSk7cmV0dXJu''@;'; put 'put ''IGghPT1qbyYmWWcoZCxiMCgpLGgpLElyfWZ1bmN0aW9uIFh1KGMsbCxhLGQsaCl7Y29uc3QgZj1LcigpLHY9ZnVuY3Rpb24gbV8oYyxsLGEsZCxoLGYpe2NvbnN0IE09WTcoYyxiMygpLGEsaCk7cmV0dXJuIF8zKDIpLE0/bCtNbyhhKStkK01vKGgpK2Y6am99KGYsYyxsLGEsZCxoKTtyZXR1''@;'; put 'put ''cm4gdiE9PWpvJiZZZyhmLGIwKCksdiksWHV9ZnVuY3Rpb24gazMoYyxsLGEsZCxoLGYsdil7Y29uc3QgTT1LcigpLEQ9ZnVuY3Rpb24gdl8oYyxsLGEsZCxoLGYsdixNKXtjb25zdCBVPSRPKGMsYjMoKSxhLGgsdik7cmV0dXJuIF8zKDMpLFU/bCtNbyhhKStkK01vKGgpK2YrTW8odikrTTpq''@;'; put 'put ''b30oTSxjLGwsYSxkLGgsZix2KTtyZXR1cm4gRCE9PWpvJiZZZyhNLGIwKCksRCksazN9ZnVuY3Rpb24gc1AoYyxsLGEsZCxoLGYsdixNLEQpe2NvbnN0IFU9S3IoKSx0ZT1mdW5jdGlvbiB5XyhjLGwsYSxkLGgsZix2LE0sRCxVKXtjb25zdCBvZT1iZihjLGIzKCksYSxoLHYsRCk7cmV0dXJu''@;'; put 'put ''IF8zKDQpLG9lP2wrTW8oYSkrZCtNbyhoKStmK01vKHYpK00rTW8oRCkrVTpqb30oVSxjLGwsYSxkLGgsZix2LE0sRCk7cmV0dXJuIHRlIT09am8mJllnKFUsYjAoKSx0ZSksc1B9ZnVuY3Rpb24gWWcoYyxsLGEpe2NvbnN0IGQ9JGUobCxjKTshZnVuY3Rpb24gZ3goYyxsLGEpe2Muc2V0VmFs''@;'; put 'put ''dWUobCxhKX0oY1sxMV0sZCxhKX1mdW5jdGlvbiBsaShjLGwsYSl7ZVIobCkmJihsPWwoKSk7Y29uc3QgZD1LcigpO3JldHVybiBndShkLHRoKCksbCkmJkIwKERvKCksRGwoKSxkLGMsbCxkWzExXSxhLCExKSxsaX1mdW5jdGlvbiBmaShjLGwpe2NvbnN0IGE9ZVIoYyk7cmV0dXJuIGEmJmMu''@;'; put 'put ''c2V0KGwpLGF9ZnVuY3Rpb24gY2koYyxsKXtjb25zdCBhPUtyKCksZD1EbygpLGg9cnMoKTtyZXR1cm4gelkoZCxhLGFbMTFdLGgsYyxsKSxjaX1mdW5jdGlvbiBaWShjLGwsYSxkLGgpe2lmKGM9cWEoYyksQXJyYXkuaXNBcnJheShjKSlmb3IobGV0IGY9MDtmPGMubGVuZ3RoO2YrKylaWShj''@;'; put 'put ''W2ZdLGwsYSxkLGgpO2Vsc2V7Y29uc3QgZj1EbygpLHY9S3IoKSxNPXJzKCk7bGV0IEQ9cDMoYyk/YzpxYShjLnByb3ZpZGUpO2NvbnN0IFU9TDgoYyksdGU9MTA0ODU3NSZNLnByb3ZpZGVySW5kZXhlcyxvZT1NLmRpcmVjdGl2ZVN0YXJ0LHZlPU0ucHJvdmlkZXJJbmRleGVzPj4yMDtpZihw''@;'; put 'put ''MyhjKXx8IWMubXVsdGkpe2NvbnN0IHdlPW5ldyBKaChVLGgscWUpLEZlPVlZKEQsbCxoP3RlOnRlK3ZlLG9lKTstMT09PUZlPyhmTSgkOChNLHYpLGYsRCksV1koZixjLGwubGVuZ3RoKSxsLnB1c2goRCksTS5kaXJlY3RpdmVTdGFydCsrLE0uZGlyZWN0aXZlRW5kKyssaCYmKE0ucHJvdmlk''@;'; put 'put ''ZXJJbmRleGVzKz0xMDQ4NTc2KSxhLnB1c2god2UpLHYucHVzaCh3ZSkpOihhW0ZlXT13ZSx2W0ZlXT13ZSl9ZWxzZXtjb25zdCB3ZT1ZWShELGwsdGUrdmUsb2UpLEZlPVlZKEQsbCx0ZSx0ZSt2ZSksbnQ9RmU+PTAmJmFbRmVdO2lmKGgmJiFudHx8IWgmJiEod2U+PTAmJmFbd2VdKSl7Zk0o''@;'; put 'put ''JDgoTSx2KSxmLEQpO2NvbnN0IGR0PWZ1bmN0aW9uIEpNZShjLGwsYSxkLGgpe2NvbnN0IGY9bmV3IEpoKGMsYSxxZSk7cmV0dXJuIGYubXVsdGk9W10sZi5pbmRleD1sLGYuY29tcG9uZW50UHJvdmlkZXJzPTAsSmxlKGYsaCxkJiYhYSksZn0oaD9xTWU6WE1lLGEubGVuZ3RoLGgsZCxVKTsh''@;'; put 'put ''aCYmbnQmJihhW0ZlXS5wcm92aWRlckZhY3Rvcnk9ZHQpLFdZKGYsYyxsLmxlbmd0aCwwKSxsLnB1c2goRCksTS5kaXJlY3RpdmVTdGFydCsrLE0uZGlyZWN0aXZlRW5kKyssaCYmKE0ucHJvdmlkZXJJbmRleGVzKz0xMDQ4NTc2KSxhLnB1c2goZHQpLHYucHVzaChkdCl9ZWxzZSBXWShmLGMs''@;'; put 'put ''d2U+LTE/d2U6RmUsSmxlKGFbaD9GZTp3ZV0sVSwhaCYmZCkpOyFoJiZkJiZudCYmYVtGZV0uY29tcG9uZW50UHJvdmlkZXJzKyt9fX1mdW5jdGlvbiBXWShjLGwsYSxkKXtjb25zdCBoPXAzKGwpLGY9ZnVuY3Rpb24ga1MoYyl7cmV0dXJuISFjLnVzZUNsYXNzfShsKTtpZihofHxmKXtjb25z''@;'; put 'put ''dCBEPShmP3FhKGwudXNlQ2xhc3MpOmwpLnByb3RvdHlwZS5uZ09uRGVzdHJveTtpZihEKXtjb25zdCBVPWMuZGVzdHJveUhvb2tzfHwoYy5kZXN0cm95SG9va3M9W10pO2lmKCFoJiZsLm11bHRpKXtjb25zdCB0ZT1VLmluZGV4T2YoYSk7LTE9PT10ZT9VLnB1c2goYSxbZCxEXSk6VVt0ZSsx''@;'; put 'put ''XS5wdXNoKGQsRCl9ZWxzZSBVLnB1c2goYSxEKX19fWZ1bmN0aW9uIEpsZShjLGwsYSl7cmV0dXJuIGEmJmMuY29tcG9uZW50UHJvdmlkZXJzKyssYy5tdWx0aS5wdXNoKGwpLTF9ZnVuY3Rpb24gWVkoYyxsLGEsZCl7Zm9yKGxldCBoPWE7aDxkO2grKylpZihsW2hdPT09YylyZXR1cm4gaDty''@;'; put 'put ''ZXR1cm4tMX1mdW5jdGlvbiBYTWUoYyxsLGEsZCxoKXtyZXR1cm4gR1kodGhpcy5tdWx0aSxbXSl9ZnVuY3Rpb24gcU1lKGMsbCxhLGQsaCl7Y29uc3QgZj10aGlzLm11bHRpO2xldCB2O2lmKHRoaXMucHJvdmlkZXJGYWN0b3J5KXtjb25zdCBNPXRoaXMucHJvdmlkZXJGYWN0b3J5LmNvbXBv''@;'; put 'put ''bmVudFByb3ZpZGVycyxEPUs4KGQsZFsxXSx0aGlzLnByb3ZpZGVyRmFjdG9yeS5pbmRleCxoKTt2PUQuc2xpY2UoMCxNKSxHWShmLHYpO2ZvcihsZXQgVT1NO1U8RC5sZW5ndGg7VSsrKXYucHVzaChEW1VdKX1lbHNlIHY9W10sR1koZix2KTtyZXR1cm4gdn1mdW5jdGlvbiBHWShjLGwpe2Zv''@;'; put 'put ''cihsZXQgYT0wO2E8Yy5sZW5ndGg7YSsrKWwucHVzaCgoMCxjW2FdKSgpKTtyZXR1cm4gbH1mdW5jdGlvbiBoYShjLGw9W10pe3JldHVybiBhPT57YS5wcm92aWRlcnNSZXNvbHZlcj0oZCxoKT0+ZnVuY3Rpb24gS01lKGMsbCxhKXtjb25zdCBkPURvKCk7aWYoZC5maXJzdENyZWF0ZVBhc3Mp''@;'; put 'put ''e2NvbnN0IGg9VjAoYyk7WlkoYSxkLmRhdGEsZC5ibHVlcHJpbnQsaCwhMCksWlkobCxkLmRhdGEsZC5ibHVlcHJpbnQsaCwhMSl9fShkLGg/aChjKTpjLGwpfX1mdW5jdGlvbiB0bChjLGwsYSl7Y29uc3QgZD1uMSgpK2MsaD1LcigpO3JldHVybiBoW2RdPT09am8/dDQoaCxkLGE/bC5jYWxs''@;'; put 'put ''KGEpOmwoKSk6ZnVuY3Rpb24gbUUoYyxsKXtyZXR1cm4gY1tsXX0oaCxkKX1mdW5jdGlvbiBhNChjLGwsYSxkKXtyZXR1cm4gZWNlKEtyKCksbjEoKSxjLGwsYSxkKX1mdW5jdGlvbiBvNChjLGwsYSxkLGgpe3JldHVybiB0Y2UoS3IoKSxuMSgpLGMsbCxhLGQsaCl9ZnVuY3Rpb24ga0UoYyxs''@;'; put 'put ''LGEsZCxoLGYpe3JldHVybiBuY2UoS3IoKSxuMSgpLGMsbCxhLGQsaCxmKX1mdW5jdGlvbiBjUChjLGwsYSxkLGgsZix2KXtyZXR1cm4gZnVuY3Rpb24gcmNlKGMsbCxhLGQsaCxmLHYsTSxEKXtjb25zdCBVPWwrYTtyZXR1cm4gYmYoYyxVLGgsZix2LE0pP3Q0KGMsVSs0LEQ/ZC5jYWxsKEQs''@;'; put 'put ''aCxmLHYsTSk6ZChoLGYsdixNKSk6REUoYyxVKzQpfShLcigpLG4xKCksYyxsLGEsZCxoLGYsdil9ZnVuY3Rpb24gREUoYyxsKXtjb25zdCBhPWNbbF07cmV0dXJuIGE9PT1qbz92b2lkIDA6YX1mdW5jdGlvbiBlY2UoYyxsLGEsZCxoLGYpe2NvbnN0IHY9bCthO3JldHVybiBndShjLHYsaCk/''@;'; put 'put ''dDQoYyx2KzEsZj9kLmNhbGwoZixoKTpkKGgpKTpERShjLHYrMSl9ZnVuY3Rpb24gdGNlKGMsbCxhLGQsaCxmLHYpe2NvbnN0IE09bCthO3JldHVybiBZNyhjLE0saCxmKT90NChjLE0rMix2P2QuY2FsbCh2LGgsZik6ZChoLGYpKTpERShjLE0rMil9ZnVuY3Rpb24gbmNlKGMsbCxhLGQsaCxm''@;'; put 'put ''LHYsTSl7Y29uc3QgRD1sK2E7cmV0dXJuICRPKGMsRCxoLGYsdik/dDQoYyxEKzMsTT9kLmNhbGwoTSxoLGYsdik6ZChoLGYsdikpOkRFKGMsRCszKX1mdW5jdGlvbiBkbChjLGwpe2NvbnN0IGE9RG8oKTtsZXQgZDtjb25zdCBoPWMrMjY7YS5maXJzdENyZWF0ZVBhc3M/KGQ9ZnVuY3Rpb24g''@;'; put 'put ''c3hlKGMsbCl7aWYobClmb3IobGV0IGE9bC5sZW5ndGgtMTthPj0wO2EtLSl7Y29uc3QgZD1sW2FdO2lmKGM9PT1kLm5hbWUpcmV0dXJuIGR9fShsLGEucGlwZVJlZ2lzdHJ5KSxhLmRhdGFbaF09ZCxkLm9uRGVzdHJveSYmKGEuZGVzdHJveUhvb2tzPz89W10pLnB1c2goaCxkLm9uRGVzdHJv''@;'; put 'put ''eSkpOmQ9YS5kYXRhW2hdO2NvbnN0IGY9ZC5mYWN0b3J5fHwoZC5mYWN0b3J5PXEyKGQudHlwZSkpLE09a28ocWUpO3RyeXtjb25zdCBEPXJiKCExKSxVPWYoKTtyZXR1cm4gcmIoRCksZnVuY3Rpb24gcXIoYyxsLGEsZCl7YT49Yy5kYXRhLmxlbmd0aCYmKGMuZGF0YVthXT1udWxsLGMuYmx1''@;'; put 'put ''ZXByaW50W2FdPW51bGwpLGxbYV09ZH0oYSxLcigpLGgsVSksVX1maW5hbGx5e2tvKE0pfX1mdW5jdGlvbiBqYyhjLGwsYSl7Y29uc3QgZD1jKzI2LGg9S3IoKSxmPSRuKGgsZCk7cmV0dXJuIElFKGgsZCk/ZWNlKGgsbjEoKSxsLGYudHJhbnNmb3JtLGEsZik6Zi50cmFuc2Zvcm0oYSl9ZnVu''@;'; put 'put ''Y3Rpb24gWDcoYyxsLGEsZCl7Y29uc3QgaD1jKzI2LGY9S3IoKSx2PSRuKGYsaCk7cmV0dXJuIElFKGYsaCk/dGNlKGYsbjEoKSxsLHYudHJhbnNmb3JtLGEsZCx2KTp2LnRyYW5zZm9ybShhLGQpfWZ1bmN0aW9uICRZKGMsbCxhLGQsaCl7Y29uc3QgZj1jKzI2LHY9S3IoKSxNPSRuKHYsZik7''@;'; put 'put ''cmV0dXJuIElFKHYsZik/bmNlKHYsbjEoKSxsLE0udHJhbnNmb3JtLGEsZCxoLE0pOk0udHJhbnNmb3JtKGEsZCxoKX1mdW5jdGlvbiBJRShjLGwpe3JldHVybiBjWzFdLmRhdGFbbF0ucHVyZX1mdW5jdGlvbiB4YyhjLGwpe3JldHVybiBKYihjLGwpfWNsYXNzIGhQe2Z1bGw7bWFqb3I7bWlu''@;'; put 'put ''b3I7cGF0Y2g7Y29uc3RydWN0b3IobCl7dGhpcy5mdWxsPWw7Y29uc3QgYT1sLnNwbGl0KCIuIik7dGhpcy5tYWpvcj1hWzBdLHRoaXMubWlub3I9YVsxXSx0aGlzLnBhdGNoPWEuc2xpY2UoMikuam9pbigiLiIpfX1jb25zdCBmUD1uZXcgaFAoIjE5LjIuMTciKTtjbGFzcyBIeGV7bmdNb2R1''@;'; put 'put ''bGVGYWN0b3J5O2NvbXBvbmVudEZhY3Rvcmllcztjb25zdHJ1Y3RvcihsLGEpe3RoaXMubmdNb2R1bGVGYWN0b3J5PWwsdGhpcy5jb21wb25lbnRGYWN0b3JpZXM9YX19bGV0IE54ZT0oKCk9PntjbGFzcyBje2NvbXBpbGVNb2R1bGVTeW5jKGEpe3JldHVybiBuZXcgSmkoYSl9Y29tcGlsZU1v''@;'; put 'put ''ZHVsZUFzeW5jKGEpe3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5jb21waWxlTW9kdWxlU3luYyhhKSl9Y29tcGlsZU1vZHVsZUFuZEFsbENvbXBvbmVudHNTeW5jKGEpe2NvbnN0IGQ9dGhpcy5jb21waWxlTW9kdWxlU3luYyhhKSxmPWhmKHAwKGEpLmRlY2xhcmF0aW9ucykucmVkdWNl''@;'; put 'put ''KCh2LE0pPT57Y29uc3QgRD1LbyhNKTtyZXR1cm4gRCYmdi5wdXNoKG5ldyBsZShEKSksdn0sW10pO3JldHVybiBuZXcgSHhlKGQsZil9Y29tcGlsZU1vZHVsZUFuZEFsbENvbXBvbmVudHNBc3luYyhhKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuY29tcGlsZU1vZHVsZUFuZEFsbENv''@;'; put 'put ''bXBvbmVudHNTeW5jKGEpKX1jbGVhckNhY2hlKCl7fWNsZWFyQ2FjaGVGb3IoYSl7fWdldE1vZHVsZUlkKGEpe31zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJv''@;'; put 'put ''dmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gY30pKCksanhlPSgoKT0+e2NsYXNzIGN7em9uZT1KbihYYSk7Y2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyPUpuKHNmKTthcHBsaWNhdGlvblJlZj1KbihnZCk7X29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb247aW5pdGlhbGl6ZSgpe3RoaXMuX29u''@;'; put 'put ''TWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb258fCh0aGlzLl9vbk1pY3JvdGFza0VtcHR5U3Vic2NyaXB0aW9uPXRoaXMuem9uZS5vbk1pY3JvdGFza0VtcHR5LnN1YnNjcmliZSh7bmV4dDooKT0+e3RoaXMuY2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyLnJ1bm5pbmdUaWNrfHx0aGlzLnpvbmUu''@;'; put 'put ''cnVuKCgpPT57dGhpcy5hcHBsaWNhdGlvblJlZi50aWNrKCl9KX19KSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9vbk1pY3JvdGFza0VtcHR5U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3''@;'; put 'put ''NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKTtmdW5jdGlvbiBRWSh7bmdab25lRmFjdG9yeTpjLGlnbm9yZUNoYW5nZXNPdXRzaWRlWm9uZTpsLHNjaGVkdWxlSW5Sb290Wm9uZTphfSl7cmV0dXJuIGM/Pz0oKT0+''@;'; put 'put ''bmV3IFhhKHsuLi5lRygpLHNjaGVkdWxlSW5Sb290Wm9uZTphfSksW3twcm92aWRlOlhhLHVzZUZhY3Rvcnk6Y30se3Byb3ZpZGU6UXMsbXVsdGk6ITAsdXNlRmFjdG9yeTooKT0+e2NvbnN0IGQ9Sm4oanhlLHtvcHRpb25hbDohMH0pO3JldHVybigpPT5kLmluaXRpYWxpemUoKX19LHtwcm92''@;'; put 'put ''aWRlOlFzLG11bHRpOiEwLHVzZUZhY3Rvcnk6KCk9Pntjb25zdCBkPUpuKFV4ZSk7cmV0dXJuKCk9PntkLmluaXRpYWxpemUoKX19fSwhMD09PWw/e3Byb3ZpZGU6ZTcsdXNlVmFsdWU6ITB9OltdLHtwcm92aWRlOnQ3LHVzZVZhbHVlOmE/P0o4fV19ZnVuY3Rpb24gZUcoYyl7cmV0dXJue2Vu''@;'; put 'put ''YWJsZUxvbmdTdGFja1RyYWNlOiExLHNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb246Yz8uZXZlbnRDb2FsZXNjaW5nPz8hMSxzaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbjpjPy5ydW5Db2FsZXNjaW5nPz8hMX19bGV0IFV4ZT0oKCk9PntjbGFzcyBje3N1YnNjcmlw''@;'; put 'put ''dGlvbj1uZXcgQnQ7aW5pdGlhbGl6ZWQ9ITE7em9uZT1KbihYYSk7cGVuZGluZ1Rhc2tzPUpuKGxmKTtpbml0aWFsaXplKCl7aWYodGhpcy5pbml0aWFsaXplZClyZXR1cm47dGhpcy5pbml0aWFsaXplZD0hMDtsZXQgYT1udWxsOyF0aGlzLnpvbmUuaXNTdGFibGUmJiF0aGlzLnpvbmUuaGFz''@;'; put 'put ''UGVuZGluZ01hY3JvdGFza3MmJiF0aGlzLnpvbmUuaGFzUGVuZGluZ01pY3JvdGFza3MmJihhPXRoaXMucGVuZGluZ1Rhc2tzLmFkZCgpKSx0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy56b25lLm9uU3RhYmxlLnN1YnNjcmliZSgo''@;'; put 'put ''KT0+e1hhLmFzc2VydE5vdEluQW5ndWxhclpvbmUoKSxxdWV1ZU1pY3JvdGFzaygoKT0+e251bGwhPT1hJiYhdGhpcy56b25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzJiYhdGhpcy56b25lLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYodGhpcy5wZW5kaW5nVGFza3MucmVtb3ZlKGEpLGE9bnVsbCl9''@;'; put 'put ''KX0pKX0pLHRoaXMuc3Vic2NyaXB0aW9uLmFkZCh0aGlzLnpvbmUub25VbnN0YWJsZS5zdWJzY3JpYmUoKCk9PntYYS5hc3NlcnRJbkFuZ3VsYXJab25lKCksYT8/PXRoaXMucGVuZGluZ1Rhc2tzLmFkZCgpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUo''@;'; put 'put ''KX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gY30pKCksTEU9KCgpPT57Y2xhc3MgY3thcHBSZWY9Sm4oZ2QpO3Rh''@;'; put 'put ''c2tTZXJ2aWNlPUpuKGxmKTtuZ1pvbmU9Sm4oWGEpO3pvbmVsZXNzRW5hYmxlZD1KbihDMyk7dHJhY2luZz1KbihDbSx7b3B0aW9uYWw6ITB9KTtkaXNhYmxlU2NoZWR1bGluZz1KbihlNyx7b3B0aW9uYWw6ITB9KT8/ITE7em9uZUlzRGVmaW5lZD10eXBlb2YgWm9uZTwidSImJiEhWm9uZS5y''@;'; put 'put ''b290LnJ1bjtzY2hlZHVsZXJUaWNrQXBwbHlBcmdzPVt7ZGF0YTp7X19zY2hlZHVsZXJfdGlja19fOiEwfX1dO3N1YnNjcmlwdGlvbnM9bmV3IEJ0O2FuZ3VsYXJab25lSWQ9dGhpcy56b25lSXNEZWZpbmVkP3RoaXMubmdab25lLl9pbm5lcj8uZ2V0KHI3KTpudWxsO3NjaGVkdWxlSW5Sb290''@;'; put 'put ''Wm9uZT0hdGhpcy56b25lbGVzc0VuYWJsZWQmJnRoaXMuem9uZUlzRGVmaW5lZCYmKEpuKHQ3LHtvcHRpb25hbDohMH0pPz8hMSk7Y2FuY2VsU2NoZWR1bGVkQ2FsbGJhY2s9bnVsbDt1c2VNaWNyb3Rhc2tTY2hlZHVsZXI9ITE7cnVubmluZ1RpY2s9ITE7cGVuZGluZ1JlbmRlclRhc2tJZD1u''@;'; put 'put ''dWxsO2NvbnN0cnVjdG9yKCl7dGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmFwcFJlZi5hZnRlclRpY2suc3Vic2NyaWJlKCgpPT57dGhpcy5ydW5uaW5nVGlja3x8dGhpcy5jbGVhbnVwKCl9KSksdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLm5nWm9uZS5vblVuc3RhYmxlLnN1YnNj''@;'; put 'put ''cmliZSgoKT0+e3RoaXMucnVubmluZ1RpY2t8fHRoaXMuY2xlYW51cCgpfSkpLHRoaXMuZGlzYWJsZVNjaGVkdWxpbmd8fD0hdGhpcy56b25lbGVzc0VuYWJsZWQmJih0aGlzLm5nWm9uZSBpbnN0YW5jZW9mIENNfHwhdGhpcy56b25lSXNEZWZpbmVkKX1ub3RpZnkoYSl7aWYoIXRoaXMuem9u''@;'; put 'put ''ZWxlc3NFbmFibGVkJiY1PT09YSlyZXR1cm47bGV0IGQ9ITE7c3dpdGNoKGEpe2Nhc2UgMDp0aGlzLmFwcFJlZi5kaXJ0eUZsYWdzfD0yO2JyZWFrO2Nhc2UgMzpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpjYXNlIDE6dGhpcy5hcHBSZWYuZGlydHlGbGFnc3w9NDticmVhaztjYXNlIDY6Y2FzZSAx''@;'; put 'put ''Mzp0aGlzLmFwcFJlZi5kaXJ0eUZsYWdzfD0yLGQ9ITA7YnJlYWs7Y2FzZSAxMjp0aGlzLmFwcFJlZi5kaXJ0eUZsYWdzfD0xNixkPSEwO2JyZWFrO2Nhc2UgMTE6ZD0hMDticmVhaztkZWZhdWx0OnRoaXMuYXBwUmVmLmRpcnR5RmxhZ3N8PTh9aWYodGhpcy5hcHBSZWYudHJhY2luZ1NuYXBz''@;'; put 'put ''aG90PXRoaXMudHJhY2luZz8uc25hcHNob3QodGhpcy5hcHBSZWYudHJhY2luZ1NuYXBzaG90KT8/bnVsbCwhdGhpcy5zaG91bGRTY2hlZHVsZVRpY2soZCkpcmV0dXJuO2NvbnN0IGg9dGhpcy51c2VNaWNyb3Rhc2tTY2hlZHVsZXI/Yk06bGI7dGhpcy5wZW5kaW5nUmVuZGVyVGFza0lkPXRo''@;'; put 'put ''aXMudGFza1NlcnZpY2UuYWRkKCksdGhpcy5jYW5jZWxTY2hlZHVsZWRDYWxsYmFjaz10aGlzLnNjaGVkdWxlSW5Sb290Wm9uZT9ab25lLnJvb3QucnVuKCgpPT5oKCgpPT50aGlzLnRpY2soKSkpOnRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5oKCgpPT50aGlzLnRpY2soKSkp''@;'; put 'put ''fXNob3VsZFNjaGVkdWxlVGljayhhKXtyZXR1cm4hKHRoaXMuZGlzYWJsZVNjaGVkdWxpbmcmJiFhfHx0aGlzLmFwcFJlZi5kZXN0cm95ZWR8fG51bGwhPT10aGlzLnBlbmRpbmdSZW5kZXJUYXNrSWR8fHRoaXMucnVubmluZ1RpY2t8fHRoaXMuYXBwUmVmLl9ydW5uaW5nVGlja3x8IXRoaXMu''@;'; put 'put ''em9uZWxlc3NFbmFibGVkJiZ0aGlzLnpvbmVJc0RlZmluZWQmJlpvbmUuY3VycmVudC5nZXQocjcrdGhpcy5hbmd1bGFyWm9uZUlkKSl9dGljaygpe2lmKHRoaXMucnVubmluZ1RpY2t8fHRoaXMuYXBwUmVmLmRlc3Ryb3llZClyZXR1cm47aWYoMD09PXRoaXMuYXBwUmVmLmRpcnR5RmxhZ3Mp''@;'; put 'put ''cmV0dXJuIHZvaWQgdGhpcy5jbGVhbnVwKCk7IXRoaXMuem9uZWxlc3NFbmFibGVkJiY3JnRoaXMuYXBwUmVmLmRpcnR5RmxhZ3MmJih0aGlzLmFwcFJlZi5kaXJ0eUZsYWdzfD0xKTtjb25zdCBhPXRoaXMudGFza1NlcnZpY2UuYWRkKCk7dHJ5e3RoaXMubmdab25lLnJ1bigoKT0+e3RoaXMu''@;'; put 'put ''cnVubmluZ1RpY2s9ITAsdGhpcy5hcHBSZWYuX3RpY2soKX0sdm9pZCAwLHRoaXMuc2NoZWR1bGVyVGlja0FwcGx5QXJncyl9Y2F0Y2goZCl7dGhyb3cgdGhpcy50YXNrU2VydmljZS5yZW1vdmUoYSksZH1maW5hbGx5e3RoaXMuY2xlYW51cCgpfXRoaXMudXNlTWljcm90YXNrU2NoZWR1bGVy''@;'; put 'put ''PSEwLGJNKCgpPT57dGhpcy51c2VNaWNyb3Rhc2tTY2hlZHVsZXI9ITEsdGhpcy50YXNrU2VydmljZS5yZW1vdmUoYSl9KX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpLHRoaXMuY2xlYW51cCgpfWNsZWFudXAoKXtpZih0aGlzLnJ1bm5pbmdUaWNrPSEx''@;'; put 'put ''LHRoaXMuY2FuY2VsU2NoZWR1bGVkQ2FsbGJhY2s/LigpLHRoaXMuY2FuY2VsU2NoZWR1bGVkQ2FsbGJhY2s9bnVsbCxudWxsIT09dGhpcy5wZW5kaW5nUmVuZGVyVGFza0lkKXtjb25zdCBhPXRoaXMucGVuZGluZ1JlbmRlclRhc2tJZDt0aGlzLnBlbmRpbmdSZW5kZXJUYXNrSWQ9bnVsbCx0''@;'; put 'put ''aGlzLnRhc2tTZXJ2aWNlLnJlbW92ZShhKX19c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpO2NvbnN0IHM0''@;'; put 'put ''PW5ldyBqbigiIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+Sm4oczQseG8uT3B0aW9uYWx8eG8uU2tpcFNlbGYpfHxmdW5jdGlvbiBaeGUoKXtyZXR1cm4gdHlwZW9mICRsb2NhbGl6ZTwidSImJiRsb2NhbGl6ZS5sb2NhbGV8fHJQfSgpfSkscFA9bmV3IGpuKCIiKSxYeGU9bmV3''@;'; put 'put ''IGpuKCIiKTtmdW5jdGlvbiBPRShjKXtyZXR1cm4hYy5tb2R1bGVSZWZ9bGV0IFRjZT0oKCk9PntjbGFzcyBje19pbmplY3RvcjtfbW9kdWxlcz1bXTtfZGVzdHJveUxpc3RlbmVycz1bXTtfZGVzdHJveWVkPSExO2NvbnN0cnVjdG9yKGEpe3RoaXMuX2luamVjdG9yPWF9Ym9vdHN0cmFwTW9k''@;'; put 'put ''dWxlRmFjdG9yeShhLGQpe2NvbnN0IGg9ZD8uc2NoZWR1bGVJblJvb3Rab25lLHY9ZD8uaWdub3JlQ2hhbmdlc091dHNpZGVab25lLE09W1FZKHtuZ1pvbmVGYWN0b3J5OigpPT5mdW5jdGlvbiBtVShjPSJ6b25lLmpzIixsKXtyZXR1cm4ibm9vcCI9PT1jP25ldyBDTToiem9uZS5qcyI9PT1j''@;'; put 'put ''P25ldyBYYShsKTpjfShkPy5uZ1pvbmUsey4uLmVHKHtldmVudENvYWxlc2Npbmc6ZD8ubmdab25lRXZlbnRDb2FsZXNjaW5nLHJ1bkNvYWxlc2Npbmc6ZD8ubmdab25lUnVuQ29hbGVzY2luZ30pLHNjaGVkdWxlSW5Sb290Wm9uZTpofSksaWdub3JlQ2hhbmdlc091dHNpZGVab25lOnZ9KSx7''@;'; put 'put ''cHJvdmlkZTpzZix1c2VFeGlzdGluZzpMRX1dLEQ9ZnVuY3Rpb24gamkoYyxsLGEpe3JldHVybiBuZXcgSnIoYyxsLGEsITEpfShhLm1vZHVsZVR5cGUsdGhpcy5pbmplY3RvcixNKTtyZXR1cm4gZnVuY3Rpb24gRWNlKGMpe2NvbnN0IGw9T0UoYyk/Yy5yM0luamVjdG9yOmMubW9kdWxlUmVm''@;'; put 'put ''LmluamVjdG9yLGE9bC5nZXQoWGEpO3JldHVybiBhLnJ1bigoKT0+e09FKGMpP2MucjNJbmplY3Rvci5yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKTpjLm1vZHVsZVJlZi5yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKTtjb25zdCBkPWwuZ2V0KGUyLG51bGwpO2xldCBoO2lmKGEu''@;'; put 'put ''cnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntoPWEub25FcnJvci5zdWJzY3JpYmUoe25leHQ6Zj0+e2QuaGFuZGxlRXJyb3IoZil9fSl9KSxPRShjKSl7Y29uc3QgZj0oKT0+bC5kZXN0cm95KCksdj1jLnBsYXRmb3JtSW5qZWN0b3IuZ2V0KHBQKTt2LmFkZChmKSxsLm9uRGVzdHJveSgoKT0+e2gu''@;'; put 'put ''dW5zdWJzY3JpYmUoKSx2LmRlbGV0ZShmKX0pfWVsc2V7Y29uc3QgZj0oKT0+Yy5tb2R1bGVSZWYuZGVzdHJveSgpLHY9Yy5wbGF0Zm9ybUluamVjdG9yLmdldChwUCk7di5hZGQoZiksYy5tb2R1bGVSZWYub25EZXN0cm95KCgpPT57UU8oYy5hbGxQbGF0Zm9ybU1vZHVsZXMsYy5tb2R1bGVS''@;'; put 'put ''ZWYpLGgudW5zdWJzY3JpYmUoKSx2LmRlbGV0ZShmKX0pfXJldHVybiBmdW5jdGlvbiBKeGUoYyxsLGEpe3RyeXtjb25zdCBkPWEoKTtyZXR1cm4gYkUoZCk/ZC5jYXRjaChoPT57dGhyb3cgbC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+Yy5oYW5kbGVFcnJvcihoKSksaH0pOmR9Y2F0Y2goZCl7''@;'; put 'put ''dGhyb3cgbC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+Yy5oYW5kbGVFcnJvcihkKSksZH19KGQsYSwoKT0+e2NvbnN0IGY9bC5nZXQoeXNlKTtyZXR1cm4gZi5ydW5Jbml0aWFsaXplcnMoKSxmLmRvbmVQcm9taXNlLnRoZW4oKCk9PntpZihmdW5jdGlvbiBaU2UoYyl7InN0cmluZyI9PXR5cGVv''@;'; put 'put ''ZiBjJiYob2xlPWMudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKSl9KGwuZ2V0KHM0LHJQKXx8clApLCFsLmdldChYeGUsITApKXJldHVybiBPRShjKT9sLmdldChnZCk6KGMuYWxsUGxhdGZvcm1Nb2R1bGVzLnB1c2goYy5tb2R1bGVSZWYpLGMubW9kdWxlUmVmKTtpZihPRShjKSl7''@;'; put 'put ''Y29uc3QgRD1sLmdldChnZCk7cmV0dXJuIHZvaWQgMCE9PWMucm9vdENvbXBvbmVudCYmRC5ib290c3RyYXAoYy5yb290Q29tcG9uZW50KSxEfXJldHVybiBmdW5jdGlvbiBxeGUoYyxsKXtjb25zdCBhPWMuaW5qZWN0b3IuZ2V0KGdkKTtpZihjLl9ib290c3RyYXBDb21wb25lbnRzLmxlbmd0''@;'; put 'put ''aD4wKWMuX2Jvb3RzdHJhcENvbXBvbmVudHMuZm9yRWFjaChkPT5hLmJvb3RzdHJhcChkKSk7ZWxzZXtpZighYy5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKXRocm93IG5ldyBQcigtNDAzLCExKTtjLmluc3RhbmNlLm5nRG9Cb290c3RyYXAoYSl9bC5wdXNoKGMpfShjLm1vZHVsZVJlZixjLmFs''@;'; put 'put ''bFBsYXRmb3JtTW9kdWxlcyksYy5tb2R1bGVSZWZ9KX0pfSl9KHttb2R1bGVSZWY6RCxhbGxQbGF0Zm9ybU1vZHVsZXM6dGhpcy5fbW9kdWxlcyxwbGF0Zm9ybUluamVjdG9yOnRoaXMuaW5qZWN0b3J9KX1ib290c3RyYXBNb2R1bGUoYSxkPVtdKXtjb25zdCBoPV9zZSh7fSxkKTtyZXR1cm4g''@;'; put 'put ''ZnVuY3Rpb24gQnhlKGMsbCxhKXtjb25zdCBkPW5ldyBKaShhKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGQpfSgwLDAsYSkudGhlbihmPT50aGlzLmJvb3RzdHJhcE1vZHVsZUZhY3RvcnkoZixoKSl9b25EZXN0cm95KGEpe3RoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMucHVzaChhKX1nZXQgaW5q''@;'; put 'put ''ZWN0b3IoKXtyZXR1cm4gdGhpcy5faW5qZWN0b3J9ZGVzdHJveSgpe2lmKHRoaXMuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgUHIoNDA0LCExKTt0aGlzLl9tb2R1bGVzLnNsaWNlKCkuZm9yRWFjaChkPT5kLmRlc3Ryb3koKSksdGhpcy5fZGVzdHJveUxpc3RlbmVycy5mb3JFYWNoKGQ9PmQoKSk7''@;'; put 'put ''Y29uc3QgYT10aGlzLl9pbmplY3Rvci5nZXQocFAsbnVsbCk7YSYmKGEuZm9yRWFjaChkPT5kKCkpLGEuY2xlYXIoKSksdGhpcy5fZGVzdHJveWVkPSEwfWdldCBkZXN0cm95ZWQoKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5l''@;'; put 'put ''dyhkfHxjKShIcihZbykpfTtzdGF0aWMgXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pfXJldHVybiBjfSkoKSxUXz1udWxsO2Z1bmN0aW9uIEFjZShjLGwsYT1bXSl7Y29uc3QgZD1gUGxhdGZvcm06ICR7bH1gLGg9bmV3''@;'; put 'put ''IGpuKGQpO3JldHVybihmPVtdKT0+e2xldCB2PWdQKCk7aWYoIXYpe2NvbnN0IE09Wy4uLmEsLi4uZix7cHJvdmlkZTpoLHVzZVZhbHVlOiEwfV07dj1jPy4oTSk/P2Z1bmN0aW9uIFF4ZShjKXtpZihnUCgpKXRocm93IG5ldyBQcig0MDAsITEpOyhmdW5jdGlvbiBic2UoKXshZnVuY3Rpb24g''@;'; put 'put ''VmUoYyl7TGU9Y30oKCk9Pnt0aHJvdyBuZXcgUHIoNjAwLCExKX0pfSkoKSxUXz1jO2NvbnN0IGw9Yy5nZXQoVGNlKTtyZXR1cm4gZnVuY3Rpb24gRGNlKGMpe2NvbnN0IGw9Yy5nZXQoX20sbnVsbCk7QzEoYywoKT0+e2w/LmZvckVhY2goYT0+YSgpKX0pfShjKSxsfShmdW5jdGlvbiBrY2Uo''@;'; put 'put ''Yz1bXSxsKXtyZXR1cm4gWW8uY3JlYXRlKHtuYW1lOmwscHJvdmlkZXJzOlt7cHJvdmlkZTpLYSx1c2VWYWx1ZToicGxhdGZvcm0ifSx7cHJvdmlkZTpwUCx1c2VWYWx1ZTpuZXcgU2V0KFsoKT0+VF89bnVsbF0pfSwuLi5jXX0pfShNLGQpKX1yZXR1cm4gZnVuY3Rpb24gZUVlKCl7Y29uc3Qg''@;'; put 'put ''bD1nUCgpO2lmKCFsKXRocm93IG5ldyBQcig0MDEsITEpO3JldHVybiBsfSgpfX1mdW5jdGlvbiBnUCgpe3JldHVybiBUXz8uZ2V0KFRjZSk/P251bGx9bGV0IEhzPSgoKT0+Y2xhc3MgY3tzdGF0aWMgX19OR19FTEVNRU5UX0lEX189bkVlfSkoKTtmdW5jdGlvbiBuRWUoYyl7cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uIHJFZShjLGwsYSl7aWYoWnUoYykmJiFhKXtjb25zdCBkPWxhKGMuaW5kZXgsbCk7cmV0dXJuIG5ldyBHdShkLGQpfXJldHVybiAxNzUmYy50eXBlP25ldyBHdShsWzE1XSxsKTpudWxsfShycygpLEtyKCksISgxNiZ+YykpfWNsYXNzIFBjZXtjb25zdHJ1Y3Rvcigpe31zdXBwb3J0''@;'; put 'put ''cyhsKXtyZXR1cm4gR08obCl9Y3JlYXRlKGwpe3JldHVybiBuZXcgbEVlKGwpfX1jb25zdCBzRWU9KGMsbCk9Pmw7Y2xhc3MgbEVle2xlbmd0aD0wO2NvbGxlY3Rpb247X2xpbmtlZFJlY29yZHM9bnVsbDtfdW5saW5rZWRSZWNvcmRzPW51bGw7X3ByZXZpb3VzSXRIZWFkPW51bGw7X2l0SGVh''@;'; put 'put ''ZD1udWxsO19pdFRhaWw9bnVsbDtfYWRkaXRpb25zSGVhZD1udWxsO19hZGRpdGlvbnNUYWlsPW51bGw7X21vdmVzSGVhZD1udWxsO19tb3Zlc1RhaWw9bnVsbDtfcmVtb3ZhbHNIZWFkPW51bGw7X3JlbW92YWxzVGFpbD1udWxsO19pZGVudGl0eUNoYW5nZXNIZWFkPW51bGw7X2lkZW50aXR5''@;'; put 'put ''Q2hhbmdlc1RhaWw9bnVsbDtfdHJhY2tCeUZuO2NvbnN0cnVjdG9yKGwpe3RoaXMuX3RyYWNrQnlGbj1sfHxzRWV9Zm9yRWFjaEl0ZW0obCl7bGV0IGE7Zm9yKGE9dGhpcy5faXRIZWFkO251bGwhPT1hO2E9YS5fbmV4dClsKGEpfWZvckVhY2hPcGVyYXRpb24obCl7bGV0IGE9dGhpcy5faXRI''@;'; put 'put ''ZWFkLGQ9dGhpcy5fcmVtb3ZhbHNIZWFkLGg9MCxmPW51bGw7Zm9yKDthfHxkOyl7Y29uc3Qgdj0hZHx8YSYmYS5jdXJyZW50SW5kZXg8SGNlKGQsaCxmKT9hOmQsTT1IY2UodixoLGYpLEQ9di5jdXJyZW50SW5kZXg7aWYodj09PWQpaC0tLGQ9ZC5fbmV4dFJlbW92ZWQ7ZWxzZSBpZihhPWEu''@;'; put 'put ''X25leHQsbnVsbD09di5wcmV2aW91c0luZGV4KWgrKztlbHNle2Z8fChmPVtdKTtjb25zdCBVPU0taCx0ZT1ELWg7aWYoVSE9dGUpe2ZvcihsZXQgdmU9MDt2ZTxVO3ZlKyspe2NvbnN0IHdlPXZlPGYubGVuZ3RoP2ZbdmVdOmZbdmVdPTAsRmU9d2UrdmU7dGU8PUZlJiZGZTxVJiYoZlt2ZV09''@;'; put 'put ''d2UrMSl9Zlt2LnByZXZpb3VzSW5kZXhdPXRlLVV9fU0hPT1EJiZsKHYsTSxEKX19Zm9yRWFjaFByZXZpb3VzSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9wcmV2aW91c0l0SGVhZDtudWxsIT09YTthPWEuX25leHRQcmV2aW91cylsKGEpfWZvckVhY2hBZGRlZEl0ZW0obCl7bGV0IGE7Zm9y''@;'; put 'put ''KGE9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT09YTthPWEuX25leHRBZGRlZClsKGEpfWZvckVhY2hNb3ZlZEl0ZW0obCl7bGV0IGE7Zm9yKGE9dGhpcy5fbW92ZXNIZWFkO251bGwhPT1hO2E9YS5fbmV4dE1vdmVkKWwoYSl9Zm9yRWFjaFJlbW92ZWRJdGVtKGwpe2xldCBhO2ZvcihhPXRo''@;'; put 'put ''aXMuX3JlbW92YWxzSGVhZDtudWxsIT09YTthPWEuX25leHRSZW1vdmVkKWwoYSl9Zm9yRWFjaElkZW50aXR5Q2hhbmdlKGwpe2xldCBhO2ZvcihhPXRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0SWRlbnRpdHlDaGFuZ2UpbChhKX1kaWZmKGwpe2lmKG51bGw9''@;'; put 'put ''PWwmJihsPVtdKSwhR08obCkpdGhyb3cgbmV3IFByKDkwMCwhMSk7cmV0dXJuIHRoaXMuY2hlY2sobCk/dGhpczpudWxsfW9uRGVzdHJveSgpe31jaGVjayhsKXt0aGlzLl9yZXNldCgpO2xldCBoLGYsdixhPXRoaXMuX2l0SGVhZCxkPSExO2lmKEFycmF5LmlzQXJyYXkobCkpe3RoaXMubGVu''@;'; put 'put ''Z3RoPWwubGVuZ3RoO2ZvcihsZXQgTT0wO008dGhpcy5sZW5ndGg7TSsrKWY9bFtNXSx2PXRoaXMuX3RyYWNrQnlGbihNLGYpLG51bGwhPT1hJiZPYmplY3QuaXMoYS50cmFja0J5SWQsdik/KGQmJihhPXRoaXMuX3ZlcmlmeVJlaW5zZXJ0aW9uKGEsZix2LE0pKSxPYmplY3QuaXMoYS5pdGVt''@;'; put 'put ''LGYpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZShhLGYpKTooYT10aGlzLl9taXNtYXRjaChhLGYsdixNKSxkPSEwKSxhPWEuX25leHR9ZWxzZSBoPTAsZnVuY3Rpb24gYXdlKGMsbCl7aWYoQXJyYXkuaXNBcnJheShjKSlmb3IobGV0IGE9MDthPGMubGVuZ3RoO2ErKylsKGNbYV0pO2Vsc2V7''@;'; put 'put ''Y29uc3QgYT1jW1N5bWJvbC5pdGVyYXRvcl0oKTtsZXQgZDtmb3IoOyEoZD1hLm5leHQoKSkuZG9uZTspbChkLnZhbHVlKX19KGwsTT0+e3Y9dGhpcy5fdHJhY2tCeUZuKGgsTSksbnVsbCE9PWEmJk9iamVjdC5pcyhhLnRyYWNrQnlJZCx2KT8oZCYmKGE9dGhpcy5fdmVyaWZ5UmVpbnNlcnRp''@;'; put 'put ''b24oYSxNLHYsaCkpLE9iamVjdC5pcyhhLml0ZW0sTSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKGEsTSkpOihhPXRoaXMuX21pc21hdGNoKGEsTSx2LGgpLGQ9ITApLGE9YS5fbmV4dCxoKyt9KSx0aGlzLmxlbmd0aD1oO3JldHVybiB0aGlzLl90cnVuY2F0ZShhKSx0aGlzLmNvbGxlY3Rp''@;'; put 'put ''b249bCx0aGlzLmlzRGlydHl9Z2V0IGlzRGlydHkoKXtyZXR1cm4gbnVsbCE9PXRoaXMuX2FkZGl0aW9uc0hlYWR8fG51bGwhPT10aGlzLl9tb3Zlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR8fG51bGwhPT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkfV9yZXNldCgpe2lmKHRo''@;'; put 'put ''aXMuaXNEaXJ0eSl7bGV0IGw7Zm9yKGw9dGhpcy5fcHJldmlvdXNJdEhlYWQ9dGhpcy5faXRIZWFkO251bGwhPT1sO2w9bC5fbmV4dClsLl9uZXh0UHJldmlvdXM9bC5fbmV4dDtmb3IobD10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1sO2w9bC5fbmV4dEFkZGVkKWwucHJldmlvdXNJbmRl''@;'; put 'put ''eD1sLmN1cnJlbnRJbmRleDtmb3IodGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsbD10aGlzLl9tb3Zlc0hlYWQ7bnVsbCE9PWw7bD1sLl9uZXh0TW92ZWQpbC5wcmV2aW91c0luZGV4PWwuY3VycmVudEluZGV4O3RoaXMuX21vdmVzSGVhZD10aGlzLl9tb3Zl''@;'; put 'put ''c1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9dGhpcy5fcmVtb3ZhbHNUYWlsPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGx9fV9taXNtYXRjaChsLGEsZCxoKXtsZXQgZjtyZXR1cm4gbnVsbD09PWw/Zj10aGlzLl9pdFRh''@;'; put 'put ''aWw6KGY9bC5fcHJldix0aGlzLl9yZW1vdmUobCkpLG51bGwhPT0obD1udWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChkLG51bGwpKT8oT2JqZWN0LmlzKGwuaXRlbSxhKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UobCxhKSx0aGlz''@;'; put 'put ''Ll9yZWluc2VydEFmdGVyKGwsZixoKSk6bnVsbCE9PShsPW51bGw9PT10aGlzLl9saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fbGlua2VkUmVjb3Jkcy5nZXQoZCxoKSk/KE9iamVjdC5pcyhsLml0ZW0sYSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKGwsYSksdGhpcy5fbW92ZUFmdGVyKGws''@;'; put 'put ''ZixoKSk6bD10aGlzLl9hZGRBZnRlcihuZXcgY0VlKGEsZCksZixoKSxsfV92ZXJpZnlSZWluc2VydGlvbihsLGEsZCxoKXtsZXQgZj1udWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChkLG51bGwpO3JldHVybiBudWxsIT09Zj9sPXRo''@;'; put 'put ''aXMuX3JlaW5zZXJ0QWZ0ZXIoZixsLl9wcmV2LGgpOmwuY3VycmVudEluZGV4IT1oJiYobC5jdXJyZW50SW5kZXg9aCx0aGlzLl9hZGRUb01vdmVzKGwsaCkpLGx9X3RydW5jYXRlKGwpe2Zvcig7bnVsbCE9PWw7KXtjb25zdCBhPWwuX25leHQ7dGhpcy5fYWRkVG9SZW1vdmFscyh0aGlzLl91''@;'; put 'put ''bmxpbmsobCkpLGw9YX1udWxsIT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiZ0aGlzLl91bmxpbmtlZFJlY29yZHMuY2xlYXIoKSxudWxsIT09dGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSxudWxsIT09dGhpcy5fbW92ZXNUYWlsJiYo''@;'; put 'put ''dGhpcy5fbW92ZXNUYWlsLl9uZXh0TW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2l0VGFpbCYmKHRoaXMuX2l0VGFpbC5fbmV4dD1udWxsKSxudWxsIT09dGhpcy5fcmVtb3ZhbHNUYWlsJiYodGhpcy5fcmVtb3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZD1udWxsKSxudWxsIT09dGhpcy5faWRlbnRp''@;'; put 'put ''dHlDaGFuZ2VzVGFpbCYmKHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwuX25leHRJZGVudGl0eUNoYW5nZT1udWxsKX1fcmVpbnNlcnRBZnRlcihsLGEsZCl7bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLnJlbW92ZShsKTtjb25zdCBoPWwuX3By''@;'; put 'put ''ZXZSZW1vdmVkLGY9bC5fbmV4dFJlbW92ZWQ7cmV0dXJuIG51bGw9PT1oP3RoaXMuX3JlbW92YWxzSGVhZD1mOmguX25leHRSZW1vdmVkPWYsbnVsbD09PWY/dGhpcy5fcmVtb3ZhbHNUYWlsPWg6Zi5fcHJldlJlbW92ZWQ9aCx0aGlzLl9pbnNlcnRBZnRlcihsLGEsZCksdGhpcy5fYWRkVG9N''@;'; put 'put ''b3ZlcyhsLGQpLGx9X21vdmVBZnRlcihsLGEsZCl7cmV0dXJuIHRoaXMuX3VubGluayhsKSx0aGlzLl9pbnNlcnRBZnRlcihsLGEsZCksdGhpcy5fYWRkVG9Nb3ZlcyhsLGQpLGx9X2FkZEFmdGVyKGwsYSxkKXtyZXR1cm4gdGhpcy5faW5zZXJ0QWZ0ZXIobCxhLGQpLHRoaXMuX2FkZGl0aW9u''@;'; put 'put ''c1RhaWw9bnVsbD09PXRoaXMuX2FkZGl0aW9uc1RhaWw/dGhpcy5fYWRkaXRpb25zSGVhZD1sOnRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1sLGx9X2luc2VydEFmdGVyKGwsYSxkKXtjb25zdCBoPW51bGw9PT1hP3RoaXMuX2l0SGVhZDphLl9uZXh0O3JldHVybiBsLl9uZXh0PWgs''@;'; put 'put ''bC5fcHJldj1hLG51bGw9PT1oP3RoaXMuX2l0VGFpbD1sOmguX3ByZXY9bCxudWxsPT09YT90aGlzLl9pdEhlYWQ9bDphLl9uZXh0PWwsbnVsbD09PXRoaXMuX2xpbmtlZFJlY29yZHMmJih0aGlzLl9saW5rZWRSZWNvcmRzPW5ldyBGY2UpLHRoaXMuX2xpbmtlZFJlY29yZHMucHV0KGwpLGwu''@;'; put 'put ''Y3VycmVudEluZGV4PWQsbH1fcmVtb3ZlKGwpe3JldHVybiB0aGlzLl9hZGRUb1JlbW92YWxzKHRoaXMuX3VubGluayhsKSl9X3VubGluayhsKXtudWxsIT09dGhpcy5fbGlua2VkUmVjb3JkcyYmdGhpcy5fbGlua2VkUmVjb3Jkcy5yZW1vdmUobCk7Y29uc3QgYT1sLl9wcmV2LGQ9bC5fbmV4''@;'; put 'put ''dDtyZXR1cm4gbnVsbD09PWE/dGhpcy5faXRIZWFkPWQ6YS5fbmV4dD1kLG51bGw9PT1kP3RoaXMuX2l0VGFpbD1hOmQuX3ByZXY9YSxsfV9hZGRUb01vdmVzKGwsYSl7cmV0dXJuIGwucHJldmlvdXNJbmRleD09PWF8fCh0aGlzLl9tb3Zlc1RhaWw9bnVsbD09PXRoaXMuX21vdmVzVGFpbD90''@;'; put 'put ''aGlzLl9tb3Zlc0hlYWQ9bDp0aGlzLl9tb3Zlc1RhaWwuX25leHRNb3ZlZD1sKSxsfV9hZGRUb1JlbW92YWxzKGwpe3JldHVybiBudWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiYodGhpcy5fdW5saW5rZWRSZWNvcmRzPW5ldyBGY2UpLHRoaXMuX3VubGlua2VkUmVjb3Jkcy5wdXQobCks''@;'; put 'put ''bC5jdXJyZW50SW5kZXg9bnVsbCxsLl9uZXh0UmVtb3ZlZD1udWxsLG51bGw9PT10aGlzLl9yZW1vdmFsc1RhaWw/KHRoaXMuX3JlbW92YWxzVGFpbD10aGlzLl9yZW1vdmFsc0hlYWQ9bCxsLl9wcmV2UmVtb3ZlZD1udWxsKToobC5fcHJldlJlbW92ZWQ9dGhpcy5fcmVtb3ZhbHNUYWlsLHRo''@;'; put 'put ''aXMuX3JlbW92YWxzVGFpbD10aGlzLl9yZW1vdmFsc1RhaWwuX25leHRSZW1vdmVkPWwpLGx9X2FkZElkZW50aXR5Q2hhbmdlKGwsYSl7cmV0dXJuIGwuaXRlbT1hLHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw9bnVsbD09PXRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw/dGhpcy5faWRlbnRp''@;'; put 'put ''dHlDaGFuZ2VzSGVhZD1sOnRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwuX25leHRJZGVudGl0eUNoYW5nZT1sLGx9fWNsYXNzIGNFZXtpdGVtO3RyYWNrQnlJZDtjdXJyZW50SW5kZXg9bnVsbDtwcmV2aW91c0luZGV4PW51bGw7X25leHRQcmV2aW91cz1udWxsO19wcmV2PW51bGw7X25leHQ9''@;'; put 'put ''bnVsbDtfcHJldkR1cD1udWxsO19uZXh0RHVwPW51bGw7X3ByZXZSZW1vdmVkPW51bGw7X25leHRSZW1vdmVkPW51bGw7X25leHRBZGRlZD1udWxsO19uZXh0TW92ZWQ9bnVsbDtfbmV4dElkZW50aXR5Q2hhbmdlPW51bGw7Y29uc3RydWN0b3IobCxhKXt0aGlzLml0ZW09bCx0aGlzLnRyYWNr''@;'; put 'put ''QnlJZD1hfX1jbGFzcyB1RWV7X2hlYWQ9bnVsbDtfdGFpbD1udWxsO2FkZChsKXtudWxsPT09dGhpcy5faGVhZD8odGhpcy5faGVhZD10aGlzLl90YWlsPWwsbC5fbmV4dER1cD1udWxsLGwuX3ByZXZEdXA9bnVsbCk6KHRoaXMuX3RhaWwuX25leHREdXA9bCxsLl9wcmV2RHVwPXRoaXMuX3Rh''@;'; put 'put ''aWwsbC5fbmV4dER1cD1udWxsLHRoaXMuX3RhaWw9bCl9Z2V0KGwsYSl7bGV0IGQ7Zm9yKGQ9dGhpcy5faGVhZDtudWxsIT09ZDtkPWQuX25leHREdXApaWYoKG51bGw9PT1hfHxhPD1kLmN1cnJlbnRJbmRleCkmJk9iamVjdC5pcyhkLnRyYWNrQnlJZCxsKSlyZXR1cm4gZDtyZXR1cm4gbnVs''@;'; put 'put ''bH1yZW1vdmUobCl7Y29uc3QgYT1sLl9wcmV2RHVwLGQ9bC5fbmV4dER1cDtyZXR1cm4gbnVsbD09PWE/dGhpcy5faGVhZD1kOmEuX25leHREdXA9ZCxudWxsPT09ZD90aGlzLl90YWlsPWE6ZC5fcHJldkR1cD1hLG51bGw9PT10aGlzLl9oZWFkfX1jbGFzcyBGY2V7bWFwPW5ldyBNYXA7cHV0''@;'; put 'put ''KGwpe2NvbnN0IGE9bC50cmFja0J5SWQ7bGV0IGQ9dGhpcy5tYXAuZ2V0KGEpO2R8fChkPW5ldyB1RWUsdGhpcy5tYXAuc2V0KGEsZCkpLGQuYWRkKGwpfWdldChsLGEpe2NvbnN0IGg9dGhpcy5tYXAuZ2V0KGwpO3JldHVybiBoP2guZ2V0KGwsYSk6bnVsbH1yZW1vdmUobCl7Y29uc3QgYT1s''@;'; put 'put ''LnRyYWNrQnlJZDtyZXR1cm4gdGhpcy5tYXAuZ2V0KGEpLnJlbW92ZShsKSYmdGhpcy5tYXAuZGVsZXRlKGEpLGx9Z2V0IGlzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMubWFwLnNpemV9Y2xlYXIoKXt0aGlzLm1hcC5jbGVhcigpfX1mdW5jdGlvbiBIY2UoYyxsLGEpe2NvbnN0IGQ9Yy5wcmV2''@;'; put 'put ''aW91c0luZGV4O2lmKG51bGw9PT1kKXJldHVybiBkO2xldCBoPTA7cmV0dXJuIGEmJmQ8YS5sZW5ndGgmJihoPWFbZF0pLGQrbCtofWNsYXNzIE5jZXtjb25zdHJ1Y3Rvcigpe31zdXBwb3J0cyhsKXtyZXR1cm4gbCBpbnN0YW5jZW9mIE1hcHx8bVkobCl9Y3JlYXRlKCl7cmV0dXJuIG5ldyBk''@;'; put 'put ''RWV9fWNsYXNzIGRFZXtfcmVjb3Jkcz1uZXcgTWFwO19tYXBIZWFkPW51bGw7X2FwcGVuZEFmdGVyPW51bGw7X3ByZXZpb3VzTWFwSGVhZD1udWxsO19jaGFuZ2VzSGVhZD1udWxsO19jaGFuZ2VzVGFpbD1udWxsO19hZGRpdGlvbnNIZWFkPW51bGw7X2FkZGl0aW9uc1RhaWw9bnVsbDtfcmVt''@;'; put 'put ''b3ZhbHNIZWFkPW51bGw7X3JlbW92YWxzVGFpbD1udWxsO2dldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fY2hhbmdlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR9Zm9yRWFjaEl0ZW0obCl7bGV0IGE7Zm9yKGE9dGhp''@;'; put 'put ''cy5fbWFwSGVhZDtudWxsIT09YTthPWEuX25leHQpbChhKX1mb3JFYWNoUHJldmlvdXNJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09YTthPWEuX25leHRQcmV2aW91cylsKGEpfWZvckVhY2hDaGFuZ2VkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9j''@;'; put 'put ''aGFuZ2VzSGVhZDtudWxsIT09YTthPWEuX25leHRDaGFuZ2VkKWwoYSl9Zm9yRWFjaEFkZGVkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1hO2E9YS5fbmV4dEFkZGVkKWwoYSl9Zm9yRWFjaFJlbW92ZWRJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX3Jl''@;'; put 'put ''bW92YWxzSGVhZDtudWxsIT09YTthPWEuX25leHRSZW1vdmVkKWwoYSl9ZGlmZihsKXtpZihsKXtpZighKGwgaW5zdGFuY2VvZiBNYXB8fG1ZKGwpKSl0aHJvdyBuZXcgUHIoOTAwLCExKX1lbHNlIGw9bmV3IE1hcDtyZXR1cm4gdGhpcy5jaGVjayhsKT90aGlzOm51bGx9b25EZXN0cm95KCl7''@;'; put 'put ''fWNoZWNrKGwpe3RoaXMuX3Jlc2V0KCk7bGV0IGE9dGhpcy5fbWFwSGVhZDtpZih0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX2ZvckVhY2gobCwoZCxoKT0+e2lmKGEmJmEua2V5PT09aCl0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhhLGQpLHRoaXMuX2FwcGVuZEFmdGVyPWEsYT1hLl9u''@;'; put 'put ''ZXh0O2Vsc2V7Y29uc3QgZj10aGlzLl9nZXRPckNyZWF0ZVJlY29yZEZvcktleShoLGQpO2E9dGhpcy5faW5zZXJ0QmVmb3JlT3JBcHBlbmQoYSxmKX19KSxhKXthLl9wcmV2JiYoYS5fcHJldi5fbmV4dD1udWxsKSx0aGlzLl9yZW1vdmFsc0hlYWQ9YTtmb3IobGV0IGQ9YTtudWxsIT09ZDtk''@;'; put 'put ''PWQuX25leHRSZW1vdmVkKWQ9PT10aGlzLl9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1udWxsKSx0aGlzLl9yZWNvcmRzLmRlbGV0ZShkLmtleSksZC5fbmV4dFJlbW92ZWQ9ZC5fbmV4dCxkLnByZXZpb3VzVmFsdWU9ZC5jdXJyZW50VmFsdWUsZC5jdXJyZW50VmFsdWU9bnVsbCxkLl9wcmV2''@;'; put 'put ''PW51bGwsZC5fbmV4dD1udWxsfXJldHVybiB0aGlzLl9jaGFuZ2VzVGFpbCYmKHRoaXMuX2NoYW5nZXNUYWlsLl9uZXh0Q2hhbmdlZD1udWxsKSx0aGlzLl9hZGRpdGlvbnNUYWlsJiYodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPW51bGwpLHRoaXMuaXNEaXJ0eX1faW5zZXJ0QmVm''@;'; put 'put ''b3JlT3JBcHBlbmQobCxhKXtpZihsKXtjb25zdCBkPWwuX3ByZXY7cmV0dXJuIGEuX25leHQ9bCxhLl9wcmV2PWQsbC5fcHJldj1hLGQmJihkLl9uZXh0PWEpLGw9PT10aGlzLl9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1hKSx0aGlzLl9hcHBlbmRBZnRlcj1sLGx9cmV0dXJuIHRoaXMuX2Fw''@;'; put 'put ''cGVuZEFmdGVyPyh0aGlzLl9hcHBlbmRBZnRlci5fbmV4dD1hLGEuX3ByZXY9dGhpcy5fYXBwZW5kQWZ0ZXIpOnRoaXMuX21hcEhlYWQ9YSx0aGlzLl9hcHBlbmRBZnRlcj1hLG51bGx9X2dldE9yQ3JlYXRlUmVjb3JkRm9yS2V5KGwsYSl7aWYodGhpcy5fcmVjb3Jkcy5oYXMobCkpe2NvbnN0''@;'; put 'put ''IGg9dGhpcy5fcmVjb3Jkcy5nZXQobCk7dGhpcy5fbWF5YmVBZGRUb0NoYW5nZXMoaCxhKTtjb25zdCBmPWguX3ByZXYsdj1oLl9uZXh0O3JldHVybiBmJiYoZi5fbmV4dD12KSx2JiYodi5fcHJldj1mKSxoLl9uZXh0PW51bGwsaC5fcHJldj1udWxsLGh9Y29uc3QgZD1uZXcgaEVlKGwpO3Jl''@;'; put 'put ''dHVybiB0aGlzLl9yZWNvcmRzLnNldChsLGQpLGQuY3VycmVudFZhbHVlPWEsdGhpcy5fYWRkVG9BZGRpdGlvbnMoZCksZH1fcmVzZXQoKXtpZih0aGlzLmlzRGlydHkpe2xldCBsO2Zvcih0aGlzLl9wcmV2aW91c01hcEhlYWQ9dGhpcy5fbWFwSGVhZCxsPXRoaXMuX3ByZXZpb3VzTWFwSGVh''@;'; put 'put ''ZDtudWxsIT09bDtsPWwuX25leHQpbC5fbmV4dFByZXZpb3VzPWwuX25leHQ7Zm9yKGw9dGhpcy5fY2hhbmdlc0hlYWQ7bnVsbCE9PWw7bD1sLl9uZXh0Q2hhbmdlZClsLnByZXZpb3VzVmFsdWU9bC5jdXJyZW50VmFsdWU7Zm9yKGw9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT1sO2w9bC5f''@;'; put 'put ''bmV4dEFkZGVkKWwucHJldmlvdXNWYWx1ZT1sLmN1cnJlbnRWYWx1ZTt0aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsfX1fbWF5YmVBZGRUb0No''@;'; put 'put ''YW5nZXMobCxhKXtPYmplY3QuaXMoYSxsLmN1cnJlbnRWYWx1ZSl8fChsLnByZXZpb3VzVmFsdWU9bC5jdXJyZW50VmFsdWUsbC5jdXJyZW50VmFsdWU9YSx0aGlzLl9hZGRUb0NoYW5nZXMobCkpfV9hZGRUb0FkZGl0aW9ucyhsKXtudWxsPT09dGhpcy5fYWRkaXRpb25zSGVhZD90aGlzLl9h''@;'; put 'put ''ZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9bDoodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPWwsdGhpcy5fYWRkaXRpb25zVGFpbD1sKX1fYWRkVG9DaGFuZ2VzKGwpe251bGw9PT10aGlzLl9jaGFuZ2VzSGVhZD90aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2Vz''@;'; put 'put ''VGFpbD1sOih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9bCx0aGlzLl9jaGFuZ2VzVGFpbD1sKX1fZm9yRWFjaChsLGEpe2wgaW5zdGFuY2VvZiBNYXA/bC5mb3JFYWNoKGEpOk9iamVjdC5rZXlzKGwpLmZvckVhY2goZD0+YShsW2RdLGQpKX19Y2xhc3MgaEVle2tleTtwcmV2aW91''@;'; put 'put ''c1ZhbHVlPW51bGw7Y3VycmVudFZhbHVlPW51bGw7X25leHRQcmV2aW91cz1udWxsO19uZXh0PW51bGw7X3ByZXY9bnVsbDtfbmV4dEFkZGVkPW51bGw7X25leHRSZW1vdmVkPW51bGw7X25leHRDaGFuZ2VkPW51bGw7Y29uc3RydWN0b3IobCl7dGhpcy5rZXk9bH19ZnVuY3Rpb24gVmNlKCl7''@;'; put 'put ''cmV0dXJuIG5ldyAkbShbbmV3IFBjZV0pfWxldCAkbT0oKCk9PntjbGFzcyBje2ZhY3RvcmllcztzdGF0aWMgXHUwMjc1cHJvdj1mcih7dG9rZW46Yyxwcm92aWRlZEluOiJyb290IixmYWN0b3J5OlZjZX0pO2NvbnN0cnVjdG9yKGEpe3RoaXMuZmFjdG9yaWVzPWF9c3RhdGljIGNyZWF0ZShh''@;'; put 'put ''LGQpe2lmKG51bGwhPWQpe2NvbnN0IGg9ZC5mYWN0b3JpZXMuc2xpY2UoKTthPWEuY29uY2F0KGgpfXJldHVybiBuZXcgYyhhKX1zdGF0aWMgZXh0ZW5kKGEpe3JldHVybntwcm92aWRlOmMsdXNlRmFjdG9yeTpkPT5jLmNyZWF0ZShhLGR8fFZjZSgpKSxkZXBzOltbYyxuZXcgR2QsbmV3IFdz''@;'; put 'put ''XV19fWZpbmQoYSl7Y29uc3QgZD10aGlzLmZhY3Rvcmllcy5maW5kKGg9Pmguc3VwcG9ydHMoYSkpO2lmKG51bGwhPWQpcmV0dXJuIGQ7dGhyb3cgbmV3IFByKDkwMSwhMSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBCY2UoKXtyZXR1cm4gbmV3IFBFKFtuZXcgTmNlXSl9bGV0IFBFPSgoKT0+''@;'; put 'put ''e2NsYXNzIGN7c3RhdGljIFx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpCY2V9KTtmYWN0b3JpZXM7Y29uc3RydWN0b3IoYSl7dGhpcy5mYWN0b3JpZXM9YX1zdGF0aWMgY3JlYXRlKGEsZCl7aWYoZCl7Y29uc3QgaD1kLmZhY3Rvcmllcy5zbGljZSgp''@;'; put 'put ''O2E9YS5jb25jYXQoaCl9cmV0dXJuIG5ldyBjKGEpfXN0YXRpYyBleHRlbmQoYSl7cmV0dXJue3Byb3ZpZGU6Yyx1c2VGYWN0b3J5OmQ9PmMuY3JlYXRlKGEsZHx8QmNlKCkpLGRlcHM6W1tjLG5ldyBHZCxuZXcgV3NdXX19ZmluZChhKXtjb25zdCBkPXRoaXMuZmFjdG9yaWVzLmZpbmQoaD0+''@;'; put 'put ''aC5zdXBwb3J0cyhhKSk7aWYoZClyZXR1cm4gZDt0aHJvdyBuZXcgUHIoOTAxLCExKX19cmV0dXJuIGN9KSgpO2NvbnN0IGdFZT1BY2UobnVsbCwiY29yZSIsW10pO2xldCBtRWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1''@;'; put 'put ''cm4gbmV3KGR8fGMpKEhyKGdkKSl9O3N0YXRpYyBcdTAyNzVtb2Q9RWkoe3R5cGU6Y30pO3N0YXRpYyBcdTAyNzVpbmo9eWkoe30pfXJldHVybiBjfSkoKTtmdW5jdGlvbiBJMShjKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBjP2M6bnVsbCE9YyYmImZhbHNlIiE9PWN9ZnVuY3Rpb24gTkVl''@;'; put 'put ''KGMsbD1OYU4pe3JldHVybiBpc05hTihwYXJzZUZsb2F0KGMpKXx8aXNOYU4oTnVtYmVyKGMpKT9sOk51bWJlcihjKX1mdW5jdGlvbiBxdShjKXtyZXR1cm4gZnVuY3Rpb24gYXQoYyl7Y29uc3QgbD1fZShudWxsKTt0cnl7cmV0dXJuIGMoKX1maW5hbGx5e19lKGwpfX0oYyl9ZnVuY3Rpb24g''@;'; put 'put ''R2coYyxsKXtyZXR1cm4gZnVuY3Rpb24geGUoYyxsKXtjb25zdCBhPU9iamVjdC5jcmVhdGUoa2UpO2EuY29tcHV0YXRpb249Yyx2b2lkIDAhPT1sJiYoYS5lcXVhbD1sKTtjb25zdCBkPSgpPT57aWYoeChhKSxnKGEpLGEudmFsdWU9PT1qZSl0aHJvdyBhLmVycm9yO3JldHVybiBhLnZhbHVl''@;'; put 'put ''fTtyZXR1cm4gZFtnZV09YSxkfShjLGw/LmVxdWFsKX1mdW5jdGlvbiBDUChjLGwpe2NvbnN0IGE9S28oYyksZD1sLmVsZW1lbnRJbmplY3Rvcnx8SDAoKTtyZXR1cm4gbmV3IGxlKGEpLmNyZWF0ZShkLGwucHJvamVjdGFibGVOb2RlcyxsLmhvc3RFbGVtZW50LGwuZW52aXJvbm1lbnRJbmpl''@;'; put 'put ''Y3Rvcil9Y29uc3QgR3M9bmV3IGpuKCIiKTtsZXQgb3VlPW51bGw7ZnVuY3Rpb24gS20oKXtyZXR1cm4gb3VlfWNsYXNzIHNUZXt9bGV0IGxHPSgoKT0+e2NsYXNzIGN7aGlzdG9yeUdvKGEpe3Rocm93IG5ldyBFcnJvcigiIil9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4g''@;'; put 'put ''bmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OigpPT5KbihjVGUpLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pfXJldHVybiBjfSkoKTtjb25zdCBsVGU9bmV3IGpuKCIiKTtsZXQgY1RlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBsR3tfbG9jYXRpb247X2hp''@;'; put 'put ''c3Rvcnk7X2RvYz1KbihHcyk7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX2xvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbix0aGlzLl9oaXN0b3J5PXdpbmRvdy5oaXN0b3J5fWdldEJhc2VIcmVmRnJvbURPTSgpe3JldHVybiBLbSgpLmdldEJhc2VIcmVmKHRoaXMuX2RvYyl9b25Qb3BTdGF0''@;'; put 'put ''ZShhKXtjb25zdCBkPUttKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKTtyZXR1cm4gZC5hZGRFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsYSwhMSksKCk9PmQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLGEpfW9uSGFzaENoYW5nZShhKXtjb25zdCBk''@;'; put 'put ''PUttKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKTtyZXR1cm4gZC5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixhLCExKSwoKT0+ZC5yZW1vdmVFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixhKX1nZXQgaHJlZigpe3JldHVybiB0aGlzLl9sb2NhdGlv''@;'; put 'put ''bi5ocmVmfWdldCBwcm90b2NvbCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5wcm90b2NvbH1nZXQgaG9zdG5hbWUoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24uaG9zdG5hbWV9Z2V0IHBvcnQoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24ucG9ydH1nZXQgcGF0aG5hbWUoKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''bG9jYXRpb24ucGF0aG5hbWV9Z2V0IHNlYXJjaCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5zZWFyY2h9Z2V0IGhhc2goKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24uaGFzaH1zZXQgcGF0aG5hbWUoYSl7dGhpcy5fbG9jYXRpb24ucGF0aG5hbWU9YX1wdXNoU3RhdGUoYSxkLGgpe3RoaXMuX2hp''@;'; put 'put ''c3RvcnkucHVzaFN0YXRlKGEsZCxoKX1yZXBsYWNlU3RhdGUoYSxkLGgpe3RoaXMuX2hpc3RvcnkucmVwbGFjZVN0YXRlKGEsZCxoKX1mb3J3YXJkKCl7dGhpcy5faGlzdG9yeS5mb3J3YXJkKCl9YmFjaygpe3RoaXMuX2hpc3RvcnkuYmFjaygpfWhpc3RvcnlHbyhhPTApe3RoaXMuX2hpc3Rv''@;'; put 'put ''cnkuZ28oYSl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5faGlzdG9yeS5zdGF0ZX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6KCk9Pm5ldyBjLHByb3ZpZGVkSW46InBsYXRmb3JtIn0p''@;'; put 'put ''fXJldHVybiBjfSkoKTtmdW5jdGlvbiBjRyhjLGwpe3JldHVybiBjP2w/Yy5lbmRzV2l0aCgiLyIpP2wuc3RhcnRzV2l0aCgiLyIpP2MrbC5zbGljZSgxKTpjK2w6bC5zdGFydHNXaXRoKCIvIik/YytsOmAke2N9LyR7bH1gOmM6bH1mdW5jdGlvbiBzdWUoYyl7Y29uc3QgbD1jLnNlYXJjaCgv''@;'; put 'put ''I3xcP3wkLyk7cmV0dXJuIi8iPT09Y1tsLTFdP2Muc2xpY2UoMCxsLTEpK2Muc2xpY2UobCk6Y31mdW5jdGlvbiAkZyhjKXtyZXR1cm4gYyYmIj8iIT09Y1swXT9gPyR7Y31gOmN9bGV0IEo3PSgoKT0+e2NsYXNzIGN7aGlzdG9yeUdvKGEpe3Rocm93IG5ldyBFcnJvcigiIil9c3RhdGljIFx1''@;'; put 'put ''MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OigpPT5KbihjdWUpLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpO2NvbnN0IGx1ZT1uZXcgam4oIiIpO2xldCBjdWU9KCgpPT57Y2xhc3MgYyBl''@;'; put 'put ''eHRlbmRzIEo3e19wbGF0Zm9ybUxvY2F0aW9uO19iYXNlSHJlZjtfcmVtb3ZlTGlzdGVuZXJGbnM9W107Y29uc3RydWN0b3IoYSxkKXtzdXBlcigpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb249YSx0aGlzLl9iYXNlSHJlZj1kPz90aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmdldEJhc2VIcmVmRnJv''@;'; put 'put ''bURPTSgpPz9KbihHcykubG9jYXRpb24/Lm9yaWdpbj8/IiJ9bmdPbkRlc3Ryb3koKXtmb3IoO3RoaXMuX3JlbW92ZUxpc3RlbmVyRm5zLmxlbmd0aDspdGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMucG9wKCkoKX1vblBvcFN0YXRlKGEpe3RoaXMuX3JlbW92ZUxpc3RlbmVyRm5zLnB1c2godGhp''@;'; put 'put ''cy5fcGxhdGZvcm1Mb2NhdGlvbi5vblBvcFN0YXRlKGEpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25IYXNoQ2hhbmdlKGEpKX1nZXRCYXNlSHJlZigpe3JldHVybiB0aGlzLl9iYXNlSHJlZn1wcmVwYXJlRXh0ZXJuYWxVcmwoYSl7cmV0dXJuIGNHKHRoaXMuX2Jhc2VIcmVmLGEpfXBhdGgo''@;'; put 'put ''YT0hMSl7Y29uc3QgZD10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnBhdGhuYW1lKyRnKHRoaXMuX3BsYXRmb3JtTG9jYXRpb24uc2VhcmNoKSxoPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24uaGFzaDtyZXR1cm4gaCYmYT9gJHtkfSR7aH1gOmR9cHVzaFN0YXRlKGEsZCxoLGYpe2NvbnN0IHY9dGhp''@;'; put 'put ''cy5wcmVwYXJlRXh0ZXJuYWxVcmwoaCskZyhmKSk7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wdXNoU3RhdGUoYSxkLHYpfXJlcGxhY2VTdGF0ZShhLGQsaCxmKXtjb25zdCB2PXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKGgrJGcoZikpO3RoaXMuX3BsYXRmb3JtTG9jYXRpb24ucmVwbGFjZVN0''@;'; put 'put ''YXRlKGEsZCx2KX1mb3J3YXJkKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5mb3J3YXJkKCl9YmFjaygpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uYmFjaygpfWdldFN0YXRlKCl7cmV0dXJuIHRoaXMuX3BsYXRmb3JtTG9jYXRpb24uZ2V0U3RhdGUoKX1oaXN0b3J5R28oYT0wKXt0aGlzLl9w''@;'; put 'put ''bGF0Zm9ybUxvY2F0aW9uLmhpc3RvcnlHbz8uKGEpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShIcihsRyksSHIobHVlLDgpKX07c3RhdGljIFx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0p''@;'; put 'put ''fXJldHVybiBjfSkoKSxzMj0oKCk9PntjbGFzcyBje19zdWJqZWN0PW5ldyB1cjtfYmFzZVBhdGg7X2xvY2F0aW9uU3RyYXRlZ3k7X3VybENoYW5nZUxpc3RlbmVycz1bXTtfdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPW51bGw7Y29uc3RydWN0b3IoYSl7dGhpcy5fbG9jYXRpb25TdHJhdGVneT1h''@;'; put 'put ''O2NvbnN0IGQ9dGhpcy5fbG9jYXRpb25TdHJhdGVneS5nZXRCYXNlSHJlZigpO3RoaXMuX2Jhc2VQYXRoPWZ1bmN0aW9uIGhUZShjKXtpZihuZXcgUmVnRXhwKCJeKGh0dHBzPzopPy8vIikudGVzdChjKSl7Y29uc3RbLGFdPWMuc3BsaXQoL1wvXC9bXlwvXSsvKTtyZXR1cm4gYX1yZXR1cm4g''@;'; put 'put ''Y30oc3VlKHV1ZShkKSkpLHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kub25Qb3BTdGF0ZShoPT57dGhpcy5fc3ViamVjdC5uZXh0KHt1cmw6dGhpcy5wYXRoKCEwKSxwb3A6ITAsc3RhdGU6aC5zdGF0ZSx0eXBlOmgudHlwZX0pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLl91cmxDaGFuZ2VTdWJzY3Jp''@;'; put 'put ''cHRpb24/LnVuc3Vic2NyaWJlKCksdGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzPVtdfXBhdGgoYT0hMSl7cmV0dXJuIHRoaXMubm9ybWFsaXplKHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucGF0aChhKSl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb25TdHJhdGVneS5nZXRTdGF0ZSgp''@;'; put 'put ''fWlzQ3VycmVudFBhdGhFcXVhbFRvKGEsZD0iIil7cmV0dXJuIHRoaXMucGF0aCgpPT10aGlzLm5vcm1hbGl6ZShhKyRnKGQpKX1ub3JtYWxpemUoYSl7cmV0dXJuIGMuc3RyaXBUcmFpbGluZ1NsYXNoKGZ1bmN0aW9uIGRUZShjLGwpe2lmKCFjfHwhbC5zdGFydHNXaXRoKGMpKXJldHVybiBs''@;'; put 'put ''O2NvbnN0IGE9bC5zdWJzdHJpbmcoYy5sZW5ndGgpO3JldHVybiIiPT09YXx8WyIvIiwiOyIsIj8iLCIjIl0uaW5jbHVkZXMoYVswXSk/YTpsfSh0aGlzLl9iYXNlUGF0aCx1dWUoYSkpKX1wcmVwYXJlRXh0ZXJuYWxVcmwoYSl7cmV0dXJuIGEmJiIvIiE9PWFbMF0mJihhPSIvIithKSx0aGlz''@;'; put 'put ''Ll9sb2NhdGlvblN0cmF0ZWd5LnByZXBhcmVFeHRlcm5hbFVybChhKX1nbyhhLGQ9IiIsaD1udWxsKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LnB1c2hTdGF0ZShoLCIiLGEsZCksdGhpcy5fbm90aWZ5VXJsQ2hhbmdlTGlzdGVuZXJzKHRoaXMucHJlcGFyZUV4dGVybmFsVXJsKGErJGcoZCkp''@;'; put 'put ''LGgpfXJlcGxhY2VTdGF0ZShhLGQ9IiIsaD1udWxsKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LnJlcGxhY2VTdGF0ZShoLCIiLGEsZCksdGhpcy5fbm90aWZ5VXJsQ2hhbmdlTGlzdGVuZXJzKHRoaXMucHJlcGFyZUV4dGVybmFsVXJsKGErJGcoZCkpLGgpfWZvcndhcmQoKXt0aGlzLl9sb2Nh''@;'; put 'put ''dGlvblN0cmF0ZWd5LmZvcndhcmQoKX1iYWNrKCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5iYWNrKCl9aGlzdG9yeUdvKGE9MCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5oaXN0b3J5R28/LihhKX1vblVybENoYW5nZShhKXtyZXR1cm4gdGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLnB1c2go''@;'; put 'put ''YSksdGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPz89dGhpcy5zdWJzY3JpYmUoZD0+e3RoaXMuX25vdGlmeVVybENoYW5nZUxpc3RlbmVycyhkLnVybCxkLnN0YXRlKX0pLCgpPT57Y29uc3QgZD10aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMuaW5kZXhPZihhKTt0aGlzLl91cmxDaGFuZ2VM''@;'; put 'put ''aXN0ZW5lcnMuc3BsaWNlKGQsMSksMD09PXRoaXMuX3VybENoYW5nZUxpc3RlbmVycy5sZW5ndGgmJih0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCksdGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPW51bGwpfX1fbm90aWZ5VXJsQ2hhbmdlTGlzdGVuZXJzKGE9''@;'; put 'put ''IiIsZCl7dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLmZvckVhY2goaD0+aChhLGQpKX1zdWJzY3JpYmUoYSxkLGgpe3JldHVybiB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7bmV4dDphLGVycm9yOmQ/P3ZvaWQgMCxjb21wbGV0ZTpoPz92b2lkIDB9KX1zdGF0aWMgbm9ybWFsaXplUXVlcnlQ''@;'; put 'put ''YXJhbXM9JGc7c3RhdGljIGpvaW5XaXRoU2xhc2g9Y0c7c3RhdGljIHN0cmlwVHJhaWxpbmdTbGFzaD1zdWU7c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEhyKEo3KSl9O3N0YXRpYyBcdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6KCk9PmZ1bmN0''@;'; put 'put ''aW9uIHVUZSgpe3JldHVybiBuZXcgczIoSHIoSjcpKX0oKSxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKTtmdW5jdGlvbiB1dWUoYyl7cmV0dXJuIGMucmVwbGFjZSgvXC9pbmRleC5odG1sJC8sIiIpfWZ1bmN0aW9uIGR1ZShjLGwpe2w9ZW5jb2RlVVJJQ29tcG9uZW50KGwpO2Zv''@;'; put 'put ''cihjb25zdCBhIG9mIGMuc3BsaXQoIjsiKSl7Y29uc3QgZD1hLmluZGV4T2YoIj0iKSxbaCxmXT0tMT09ZD9bYSwiIl06W2Euc2xpY2UoMCxkKSxhLnNsaWNlKGQrMSldO2lmKGgudHJpbSgpPT09bClyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGYpfXJldHVybiBudWxsfWZ1bmN0aW9uIHds''@;'; put 'put ''KGMpe3JldHVybiJicm93c2VyIj09PWN9ZnVuY3Rpb24gZnVlKGMpe3JldHVybiJzZXJ2ZXIiPT09Y31jbGFzcyBwdWV7fWxldCBwVGU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEo3e19wbGF0Zm9ybUxvY2F0aW9uO19iYXNlSHJlZj0iIjtfcmVtb3ZlTGlzdGVuZXJGbnM9W107Y29uc3RydWN0''@;'; put 'put ''b3IoYSxkKXtzdXBlcigpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb249YSxudWxsIT1kJiYodGhpcy5fYmFzZUhyZWY9ZCl9bmdPbkRlc3Ryb3koKXtmb3IoO3RoaXMuX3JlbW92ZUxpc3RlbmVyRm5zLmxlbmd0aDspdGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMucG9wKCkoKX1vblBvcFN0YXRlKGEp''@;'; put 'put ''e3RoaXMuX3JlbW92ZUxpc3RlbmVyRm5zLnB1c2godGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vblBvcFN0YXRlKGEpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25IYXNoQ2hhbmdlKGEpKX1nZXRCYXNlSHJlZigpe3JldHVybiB0aGlzLl9iYXNlSHJlZn1wYXRoKGE9ITEpe2NvbnN0IGQ9dGhp''@;'; put 'put ''cy5fcGxhdGZvcm1Mb2NhdGlvbi5oYXNoPz8iIyI7cmV0dXJuIGQubGVuZ3RoPjA/ZC5zdWJzdHJpbmcoMSk6ZH1wcmVwYXJlRXh0ZXJuYWxVcmwoYSl7Y29uc3QgZD1jRyh0aGlzLl9iYXNlSHJlZixhKTtyZXR1cm4gZC5sZW5ndGg+MD8iIyIrZDpkfXB1c2hTdGF0ZShhLGQsaCxmKXtjb25z''@;'; put 'put ''dCB2PXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKGgrJGcoZikpfHx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnBhdGhuYW1lO3RoaXMuX3BsYXRmb3JtTG9jYXRpb24ucHVzaFN0YXRlKGEsZCx2KX1yZXBsYWNlU3RhdGUoYSxkLGgsZil7Y29uc3Qgdj10aGlzLnByZXBhcmVFeHRlcm5hbFVybCho''@;'; put 'put ''KyRnKGYpKXx8dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wYXRobmFtZTt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnJlcGxhY2VTdGF0ZShhLGQsdil9Zm9yd2FyZCgpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZm9yd2FyZCgpfWJhY2soKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmJhY2soKX1n''@;'; put 'put ''ZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmdldFN0YXRlKCl9aGlzdG9yeUdvKGE9MCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oaXN0b3J5R28/LihhKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoSHIobEcpLEhyKGx1ZSw4''@;'; put 'put ''KSl9O3N0YXRpYyBcdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX1yZXR1cm4gY30pKCk7dmFyIFMwPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuRm9ybWF0PTBdPSJGb3JtYXQiLGNbYy5TdGFuZGFsb25lPTFdPSJTdGFuZGFsb25lIixjfShTMHx8e30pLENsPWZ1''@;'; put 'put ''bmN0aW9uKGMpe3JldHVybiBjW2MuTmFycm93PTBdPSJOYXJyb3ciLGNbYy5BYmJyZXZpYXRlZD0xXT0iQWJicmV2aWF0ZWQiLGNbYy5XaWRlPTJdPSJXaWRlIixjW2MuU2hvcnQ9M109IlNob3J0IixjfShDbHx8e30pLGloPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuU2hvcnQ9MF09IlNob3J0''@;'; put 'put ''IixjW2MuTWVkaXVtPTFdPSJNZWRpdW0iLGNbYy5Mb25nPTJdPSJMb25nIixjW2MuRnVsbD0zXT0iRnVsbCIsY30oaWh8fHt9KTtmdW5jdGlvbiB1RyhjLGwsYSl7Y29uc3QgZD1EMShjKSxmPXdmKFtkW2FjLkRheXNGb3JtYXRdLGRbYWMuRGF5c1N0YW5kYWxvbmVdXSxsKTtyZXR1cm4gd2Yo''@;'; put 'put ''ZixhKX1mdW5jdGlvbiBkRyhjLGwsYSl7Y29uc3QgZD1EMShjKSxmPXdmKFtkW2FjLk1vbnRoc0Zvcm1hdF0sZFthYy5Nb250aHNTdGFuZGFsb25lXV0sbCk7cmV0dXJuIHdmKGYsYSl9ZnVuY3Rpb24gd2YoYyxsKXtmb3IobGV0IGE9bDthPi0xO2EtLSlpZih0eXBlb2YgY1thXTwidSIpcmV0''@;'; put 'put ''dXJuIGNbYV07dGhyb3cgbmV3IEVycm9yKCJMb2NhbGUgZGF0YSBBUEk6IGxvY2FsZSBkYXRhIHVuZGVmaW5lZCIpfWNvbnN0IHdHPS9ccysvLFN1ZT1bXTtsZXQgUnU9KCgpPT57Y2xhc3MgY3tfbmdFbDtfcmVuZGVyZXI7aW5pdGlhbENsYXNzZXM9U3VlO3Jhd0NsYXNzO3N0YXRlTWFwPW5l''@;'; put 'put ''dyBNYXA7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9uZ0VsPWEsdGhpcy5fcmVuZGVyZXI9ZH1zZXQga2xhc3MoYSl7dGhpcy5pbml0aWFsQ2xhc3Nlcz1udWxsIT1hP2EudHJpbSgpLnNwbGl0KHdHKTpTdWV9c2V0IG5nQ2xhc3MoYSl7dGhpcy5yYXdDbGFzcz0ic3RyaW5nIj09dHlwZW9mIGE/''@;'; put 'put ''YS50cmltKCkuc3BsaXQod0cpOmF9bmdEb0NoZWNrKCl7Zm9yKGNvbnN0IGQgb2YgdGhpcy5pbml0aWFsQ2xhc3Nlcyl0aGlzLl91cGRhdGVTdGF0ZShkLCEwKTtjb25zdCBhPXRoaXMucmF3Q2xhc3M7aWYoQXJyYXkuaXNBcnJheShhKXx8YSBpbnN0YW5jZW9mIFNldClmb3IoY29uc3QgZCBv''@;'; put 'put ''ZiBhKXRoaXMuX3VwZGF0ZVN0YXRlKGQsITApO2Vsc2UgaWYobnVsbCE9YSlmb3IoY29uc3QgZCBvZiBPYmplY3Qua2V5cyhhKSl0aGlzLl91cGRhdGVTdGF0ZShkLCEhYVtkXSk7dGhpcy5fYXBwbHlTdGF0ZURpZmYoKX1fdXBkYXRlU3RhdGUoYSxkKXtjb25zdCBoPXRoaXMuc3RhdGVNYXAu''@;'; put 'put ''Z2V0KGEpO3ZvaWQgMCE9PWg/KGguZW5hYmxlZCE9PWQmJihoLmNoYW5nZWQ9ITAsaC5lbmFibGVkPWQpLGgudG91Y2hlZD0hMCk6dGhpcy5zdGF0ZU1hcC5zZXQoYSx7ZW5hYmxlZDpkLGNoYW5nZWQ6ITAsdG91Y2hlZDohMH0pfV9hcHBseVN0YXRlRGlmZigpe2Zvcihjb25zdCBhIG9mIHRo''@;'; put 'put ''aXMuc3RhdGVNYXApe2NvbnN0IGQ9YVswXSxoPWFbMV07aC5jaGFuZ2VkPyh0aGlzLl90b2dnbGVDbGFzcyhkLGguZW5hYmxlZCksaC5jaGFuZ2VkPSExKTpoLnRvdWNoZWR8fChoLmVuYWJsZWQmJnRoaXMuX3RvZ2dsZUNsYXNzKGQsITEpLHRoaXMuc3RhdGVNYXAuZGVsZXRlKGQpKSxoLnRv''@;'; put 'put ''dWNoZWQ9ITF9fV90b2dnbGVDbGFzcyhhLGQpeyhhPWEudHJpbSgpKS5sZW5ndGg+MCYmYS5zcGxpdCh3RykuZm9yRWFjaChoPT57ZD90aGlzLl9yZW5kZXJlci5hZGRDbGFzcyh0aGlzLl9uZ0VsLm5hdGl2ZUVsZW1lbnQsaCk6dGhpcy5fcmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5fbmdF''@;'; put 'put ''bC5uYXRpdmVFbGVtZW50LGgpfSl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHFlKG5hKSxxZShObykpfTtzdGF0aWMgXHUwMjc1ZGlyPVlyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nQ2xhc3MiLCIiXV0saW5wdXRzOntrbGFzczpbMCwiY2xhc3Mi''@;'; put 'put ''LCJrbGFzcyJdLG5nQ2xhc3M6Im5nQ2xhc3MifX0pfXJldHVybiBjfSkoKTtjbGFzcyBKVGV7JGltcGxpY2l0O25nRm9yT2Y7aW5kZXg7Y291bnQ7Y29uc3RydWN0b3IobCxhLGQsaCl7dGhpcy4kaW1wbGljaXQ9bCx0aGlzLm5nRm9yT2Y9YSx0aGlzLmluZGV4PWQsdGhpcy5jb3VudD1ofWdl''@;'; put 'put ''dCBmaXJzdCgpe3JldHVybiAwPT09dGhpcy5pbmRleH1nZXQgbGFzdCgpe3JldHVybiB0aGlzLmluZGV4PT09dGhpcy5jb3VudC0xfWdldCBldmVuKCl7cmV0dXJuIHRoaXMuaW5kZXglMj09MH1nZXQgb2RkKCl7cmV0dXJuIXRoaXMuZXZlbn19bGV0IGhzPSgoKT0+e2NsYXNzIGN7X3ZpZXdD''@;'; put 'put ''b250YWluZXI7X3RlbXBsYXRlO19kaWZmZXJzO3NldCBuZ0Zvck9mKGEpe3RoaXMuX25nRm9yT2Y9YSx0aGlzLl9uZ0Zvck9mRGlydHk9ITB9c2V0IG5nRm9yVHJhY2tCeShhKXt0aGlzLl90cmFja0J5Rm49YX1nZXQgbmdGb3JUcmFja0J5KCl7cmV0dXJuIHRoaXMuX3RyYWNrQnlGbn1fbmdG''@;'; put 'put ''b3JPZj1udWxsO19uZ0Zvck9mRGlydHk9ITA7X2RpZmZlcj1udWxsO190cmFja0J5Rm47Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX3ZpZXdDb250YWluZXI9YSx0aGlzLl90ZW1wbGF0ZT1kLHRoaXMuX2RpZmZlcnM9aH1zZXQgbmdGb3JUZW1wbGF0ZShhKXthJiYodGhpcy5fdGVtcGxhdGU9''@;'; put 'put ''YSl9bmdEb0NoZWNrKCl7aWYodGhpcy5fbmdGb3JPZkRpcnR5KXt0aGlzLl9uZ0Zvck9mRGlydHk9ITE7Y29uc3QgYT10aGlzLl9uZ0Zvck9mOyF0aGlzLl9kaWZmZXImJmEmJih0aGlzLl9kaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKGEpLmNyZWF0ZSh0aGlzLm5nRm9yVHJhY2tCeSkpfWlm''@;'; put 'put ''KHRoaXMuX2RpZmZlcil7Y29uc3QgYT10aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9uZ0Zvck9mKTthJiZ0aGlzLl9hcHBseUNoYW5nZXMoYSl9fV9hcHBseUNoYW5nZXMoYSl7Y29uc3QgZD10aGlzLl92aWV3Q29udGFpbmVyO2EuZm9yRWFjaE9wZXJhdGlvbigoaCxmLHYpPT57aWYobnVsbD09''@;'; put 'put ''aC5wcmV2aW91c0luZGV4KWQuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RlbXBsYXRlLG5ldyBKVGUoaC5pdGVtLHRoaXMuX25nRm9yT2YsLTEsLTEpLG51bGw9PT12P3ZvaWQgMDp2KTtlbHNlIGlmKG51bGw9PXYpZC5yZW1vdmUobnVsbD09PWY/dm9pZCAwOmYpO2Vsc2UgaWYobnVsbCE9''@;'; put 'put ''PWYpe2NvbnN0IE09ZC5nZXQoZik7ZC5tb3ZlKE0sdikseHVlKE0saCl9fSk7Zm9yKGxldCBoPTAsZj1kLmxlbmd0aDtoPGY7aCsrKXtjb25zdCBNPWQuZ2V0KGgpLmNvbnRleHQ7TS5pbmRleD1oLE0uY291bnQ9ZixNLm5nRm9yT2Y9dGhpcy5fbmdGb3JPZn1hLmZvckVhY2hJZGVudGl0eUNo''@;'; put 'put ''YW5nZShoPT57eHVlKGQuZ2V0KGguY3VycmVudEluZGV4KSxoKX0pfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGEsZCl7cmV0dXJuITB9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHFlKGJlKSxxZShJbCkscWUoJG0pKX07c3RhdGljIFx1MDI3''@;'; put 'put ''NWRpcj1Zcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ0ZvciIsIiIsIm5nRm9yT2YiLCIiXV0saW5wdXRzOntuZ0Zvck9mOiJuZ0Zvck9mIixuZ0ZvclRyYWNrQnk6Im5nRm9yVHJhY2tCeSIsbmdGb3JUZW1wbGF0ZToibmdGb3JUZW1wbGF0ZSJ9fSl9cmV0dXJuIGN9KSgpO2Z1bmN0aW9u''@;'; put 'put ''IHh1ZShjLGwpe2MuY29udGV4dC4kaW1wbGljaXQ9bC5pdGVtfWxldCBDYT0oKCk9PntjbGFzcyBje192aWV3Q29udGFpbmVyO19jb250ZXh0PW5ldyBRVGU7X3RoZW5UZW1wbGF0ZVJlZj1udWxsO19lbHNlVGVtcGxhdGVSZWY9bnVsbDtfdGhlblZpZXdSZWY9bnVsbDtfZWxzZVZpZXdSZWY9''@;'; put 'put ''bnVsbDtjb25zdHJ1Y3RvcihhLGQpe3RoaXMuX3ZpZXdDb250YWluZXI9YSx0aGlzLl90aGVuVGVtcGxhdGVSZWY9ZH1zZXQgbmdJZihhKXt0aGlzLl9jb250ZXh0LiRpbXBsaWNpdD10aGlzLl9jb250ZXh0Lm5nSWY9YSx0aGlzLl91cGRhdGVWaWV3KCl9c2V0IG5nSWZUaGVuKGEpe0V1ZShh''@;'; put 'put ''KSx0aGlzLl90aGVuVGVtcGxhdGVSZWY9YSx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX1zZXQgbmdJZkVsc2UoYSl7RXVlKGEpLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZj1hLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdXBkYXRlVmlldygpfV91cGRhdGVW''@;'; put 'put ''aWV3KCl7dGhpcy5fY29udGV4dC4kaW1wbGljaXQ/dGhpcy5fdGhlblZpZXdSZWZ8fCh0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5fZWxzZVZpZXdSZWY9bnVsbCx0aGlzLl90aGVuVGVtcGxhdGVSZWYmJih0aGlzLl90aGVuVmlld1JlZj10aGlzLl92aWV3Q29udGFpbmVyLmNy''@;'; put 'put ''ZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90aGVuVGVtcGxhdGVSZWYsdGhpcy5fY29udGV4dCkpKTp0aGlzLl9lbHNlVmlld1JlZnx8KHRoaXMuX3ZpZXdDb250YWluZXIuY2xlYXIoKSx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZiYmKHRoaXMuX2Vsc2VWaWV3''@;'; put 'put ''UmVmPXRoaXMuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZix0aGlzLl9jb250ZXh0KSkpfXN0YXRpYyBuZ0lmVXNlSWZUeXBlR3VhcmQ7c3RhdGljIG5nVGVtcGxhdGVHdWFyZF9uZ0lmO3N0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJk''@;'; put 'put ''KGEsZCl7cmV0dXJuITB9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHFlKGJlKSxxZShJbCkpfTtzdGF0aWMgXHUwMjc1ZGlyPVlyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nSWYiLCIiXV0saW5wdXRzOntuZ0lmOiJuZ0lmIixuZ0lmVGhlbjoibmdJ''@;'; put 'put ''ZlRoZW4iLG5nSWZFbHNlOiJuZ0lmRWxzZSJ9fSl9cmV0dXJuIGN9KSgpO2NsYXNzIFFUZXskaW1wbGljaXQ9bnVsbDtuZ0lmPW51bGx9ZnVuY3Rpb24gRXVlKGMsbCl7aWYoYyYmIWMuY3JlYXRlRW1iZWRkZWRWaWV3KXRocm93IG5ldyBQcigyMDIwLCExKX1jbGFzcyBDR3tfdmlld0NvbnRh''@;'; put 'put ''aW5lclJlZjtfdGVtcGxhdGVSZWY7X2NyZWF0ZWQ9ITE7Y29uc3RydWN0b3IobCxhKXt0aGlzLl92aWV3Q29udGFpbmVyUmVmPWwsdGhpcy5fdGVtcGxhdGVSZWY9YX1jcmVhdGUoKXt0aGlzLl9jcmVhdGVkPSEwLHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRo''@;'; put 'put ''aXMuX3RlbXBsYXRlUmVmKX1kZXN0cm95KCl7dGhpcy5fY3JlYXRlZD0hMSx0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNsZWFyKCl9ZW5mb3JjZVN0YXRlKGwpe2wmJiF0aGlzLl9jcmVhdGVkP3RoaXMuY3JlYXRlKCk6IWwmJnRoaXMuX2NyZWF0ZWQmJnRoaXMuZGVzdHJveSgpfX1sZXQgQ2Y9''@;'; put 'put ''KCgpPT57Y2xhc3MgY3tfZGVmYXVsdFZpZXdzPVtdO19kZWZhdWx0VXNlZD0hMTtfY2FzZUNvdW50PTA7X2xhc3RDYXNlQ2hlY2tJbmRleD0wO19sYXN0Q2FzZXNNYXRjaGVkPSExO19uZ1N3aXRjaDtzZXQgbmdTd2l0Y2goYSl7dGhpcy5fbmdTd2l0Y2g9YSwwPT09dGhpcy5fY2FzZUNvdW50''@;'; put 'put ''JiZ0aGlzLl91cGRhdGVEZWZhdWx0Q2FzZXMoITApfV9hZGRDYXNlKCl7cmV0dXJuIHRoaXMuX2Nhc2VDb3VudCsrfV9hZGREZWZhdWx0KGEpe3RoaXMuX2RlZmF1bHRWaWV3cy5wdXNoKGEpfV9tYXRjaENhc2UoYSl7Y29uc3QgZD1hPT09dGhpcy5fbmdTd2l0Y2g7cmV0dXJuIHRoaXMuX2xh''@;'; put 'put ''c3RDYXNlc01hdGNoZWR8fD1kLHRoaXMuX2xhc3RDYXNlQ2hlY2tJbmRleCsrLHRoaXMuX2xhc3RDYXNlQ2hlY2tJbmRleD09PXRoaXMuX2Nhc2VDb3VudCYmKHRoaXMuX3VwZGF0ZURlZmF1bHRDYXNlcyghdGhpcy5fbGFzdENhc2VzTWF0Y2hlZCksdGhpcy5fbGFzdENhc2VDaGVja0luZGV4''@;'; put 'put ''PTAsdGhpcy5fbGFzdENhc2VzTWF0Y2hlZD0hMSksZH1fdXBkYXRlRGVmYXVsdENhc2VzKGEpe2lmKHRoaXMuX2RlZmF1bHRWaWV3cy5sZW5ndGg+MCYmYSE9PXRoaXMuX2RlZmF1bHRVc2VkKXt0aGlzLl9kZWZhdWx0VXNlZD1hO2Zvcihjb25zdCBkIG9mIHRoaXMuX2RlZmF1bHRWaWV3cylk''@;'; put 'put ''LmVuZm9yY2VTdGF0ZShhKX19c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1ZGlyPVlyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoIiwiIl1dLGlucHV0czp7bmdTd2l0Y2g6Im5nU3dpdGNoIn19KX1yZXR1cm4gY30p''@;'; put 'put ''KCksbDQ9KCgpPT57Y2xhc3MgY3tuZ1N3aXRjaDtfdmlldztuZ1N3aXRjaENhc2U7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMubmdTd2l0Y2g9aCxoLl9hZGRDYXNlKCksdGhpcy5fdmlldz1uZXcgQ0coYSxkKX1uZ0RvQ2hlY2soKXt0aGlzLl92aWV3LmVuZm9yY2VTdGF0ZSh0aGlzLm5nU3dp''@;'; put 'put ''dGNoLl9tYXRjaENhc2UodGhpcy5uZ1N3aXRjaENhc2UpKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUoYmUpLHFlKElsKSxxZShDZiw5KSl9O3N0YXRpYyBcdTAyNzVkaXI9WXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdTd2l0Y2hDYXNlIiwi''@;'; put 'put ''Il1dLGlucHV0czp7bmdTd2l0Y2hDYXNlOiJuZ1N3aXRjaENhc2UifX0pfXJldHVybiBjfSkoKSxBdWU9KCgpPT57Y2xhc3MgY3tfbmdFbDtfZGlmZmVycztfcmVuZGVyZXI7X25nU3R5bGU9bnVsbDtfZGlmZmVyPW51bGw7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX25nRWw9YSx0aGlzLl9k''@;'; put 'put ''aWZmZXJzPWQsdGhpcy5fcmVuZGVyZXI9aH1zZXQgbmdTdHlsZShhKXt0aGlzLl9uZ1N0eWxlPWEsIXRoaXMuX2RpZmZlciYmYSYmKHRoaXMuX2RpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQoYSkuY3JlYXRlKCkpfW5nRG9DaGVjaygpe2lmKHRoaXMuX2RpZmZlcil7Y29uc3QgYT10aGlzLl9k''@;'; put 'put ''aWZmZXIuZGlmZih0aGlzLl9uZ1N0eWxlKTthJiZ0aGlzLl9hcHBseUNoYW5nZXMoYSl9fV9zZXRTdHlsZShhLGQpe2NvbnN0W2gsZl09YS5zcGxpdCgiLiIpLHY9LTE9PT1oLmluZGV4T2YoIi0iKT92b2lkIDA6SnAuRGFzaENhc2U7bnVsbCE9ZD90aGlzLl9yZW5kZXJlci5zZXRTdHlsZSh0''@;'; put 'put ''aGlzLl9uZ0VsLm5hdGl2ZUVsZW1lbnQsaCxmP2Ake2R9JHtmfWA6ZCx2KTp0aGlzLl9yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLl9uZ0VsLm5hdGl2ZUVsZW1lbnQsaCx2KX1fYXBwbHlDaGFuZ2VzKGEpe2EuZm9yRWFjaFJlbW92ZWRJdGVtKGQ9PnRoaXMuX3NldFN0eWxlKGQua2V5LG51''@;'; put 'put ''bGwpKSxhLmZvckVhY2hBZGRlZEl0ZW0oZD0+dGhpcy5fc2V0U3R5bGUoZC5rZXksZC5jdXJyZW50VmFsdWUpKSxhLmZvckVhY2hDaGFuZ2VkSXRlbShkPT50aGlzLl9zZXRTdHlsZShkLmtleSxkLmN1cnJlbnRWYWx1ZSkpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5l''@;'; put 'put ''dyhkfHxjKShxZShuYSkscWUoUEUpLHFlKE5vKSl9O3N0YXRpYyBcdTAyNzVkaXI9WXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdTdHlsZSIsIiJdXSxpbnB1dHM6e25nU3R5bGU6Im5nU3R5bGUifX0pfXJldHVybiBjfSkoKSx5ZD0oKCk9PntjbGFzcyBje192aWV3Q29udGFpbmVyUmVm''@;'; put 'put ''O192aWV3UmVmPW51bGw7bmdUZW1wbGF0ZU91dGxldENvbnRleHQ9bnVsbDtuZ1RlbXBsYXRlT3V0bGV0PW51bGw7bmdUZW1wbGF0ZU91dGxldEluamVjdG9yPW51bGw7Y29uc3RydWN0b3IoYSl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj1hfW5nT25DaGFuZ2VzKGEpe2lmKHRoaXMuX3Nob3Vs''@;'; put 'put ''ZFJlY3JlYXRlVmlldyhhKSl7Y29uc3QgZD10aGlzLl92aWV3Q29udGFpbmVyUmVmO2lmKHRoaXMuX3ZpZXdSZWYmJmQucmVtb3ZlKGQuaW5kZXhPZih0aGlzLl92aWV3UmVmKSksIXRoaXMubmdUZW1wbGF0ZU91dGxldClyZXR1cm4gdm9pZCh0aGlzLl92aWV3UmVmPW51bGwpO2NvbnN0IGg9''@;'; put 'put ''dGhpcy5fY3JlYXRlQ29udGV4dEZvcndhcmRQcm94eSgpO3RoaXMuX3ZpZXdSZWY9ZC5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5uZ1RlbXBsYXRlT3V0bGV0LGgse2luamVjdG9yOnRoaXMubmdUZW1wbGF0ZU91dGxldEluamVjdG9yPz92b2lkIDB9KX19X3Nob3VsZFJlY3JlYXRlVmlldyhh''@;'; put 'put ''KXtyZXR1cm4hIWEubmdUZW1wbGF0ZU91dGxldHx8ISFhLm5nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcn1fY3JlYXRlQ29udGV4dEZvcndhcmRQcm94eSgpe3JldHVybiBuZXcgUHJveHkoe30se3NldDooYSxkLGgpPT4hIXRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQmJlJlZmxlY3Quc2V0''@;'; put 'put ''KHRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQsZCxoKSxnZXQ6KGEsZCxoKT0+e2lmKHRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQpcmV0dXJuIFJlZmxlY3QuZ2V0KHRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQsZCxoKX19KX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQp''@;'; put 'put ''e3JldHVybiBuZXcoZHx8YykocWUoYmUpKX07c3RhdGljIFx1MDI3NWRpcj1Zcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ1RlbXBsYXRlT3V0bGV0IiwiIl1dLGlucHV0czp7bmdUZW1wbGF0ZU91dGxldENvbnRleHQ6Im5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixuZ1RlbXBsYXRlT3V0''@;'; put 'put ''bGV0OiJuZ1RlbXBsYXRlT3V0bGV0IixuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3I6Im5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJ9LGZlYXR1cmVzOltXb119KX1yZXR1cm4gY30pKCk7Y2xhc3MgbkFle2NyZWF0ZVN1YnNjcmlwdGlvbihsLGEpe3JldHVybiBxdSgoKT0+bC5zdWJzY3JpYmUo''@;'; put 'put ''e25leHQ6YSxlcnJvcjpkPT57dGhyb3cgZH19KSl9ZGlzcG9zZShsKXtxdSgoKT0+bC51bnN1YnNjcmliZSgpKX19Y2xhc3MgckFle2NyZWF0ZVN1YnNjcmlwdGlvbihsLGEpe3JldHVybiBsLnRoZW4oZD0+YT8uKGQpLGQ9Pnt0aHJvdyBkfSkse3Vuc3Vic2NyaWJlOigpPT57YT1udWxsfX19''@;'; put 'put ''ZGlzcG9zZShsKXtsLnVuc3Vic2NyaWJlKCl9fWNvbnN0IGlBZT1uZXcgckFlLGFBZT1uZXcgbkFlO2xldCBWRT0oKCk9PntjbGFzcyBje19yZWY7X2xhdGVzdFZhbHVlPW51bGw7bWFya0ZvckNoZWNrT25WYWx1ZVVwZGF0ZT0hMDtfc3Vic2NyaXB0aW9uPW51bGw7X29iaj1udWxsO19zdHJh''@;'; put 'put ''dGVneT1udWxsO2NvbnN0cnVjdG9yKGEpe3RoaXMuX3JlZj1hfW5nT25EZXN0cm95KCl7dGhpcy5fc3Vic2NyaXB0aW9uJiZ0aGlzLl9kaXNwb3NlKCksdGhpcy5fcmVmPW51bGx9dHJhbnNmb3JtKGEpe2lmKCF0aGlzLl9vYmope2lmKGEpdHJ5e3RoaXMubWFya0ZvckNoZWNrT25WYWx1ZVVw''@;'; put 'put ''ZGF0ZT0hMSx0aGlzLl9zdWJzY3JpYmUoYSl9ZmluYWxseXt0aGlzLm1hcmtGb3JDaGVja09uVmFsdWVVcGRhdGU9ITB9cmV0dXJuIHRoaXMuX2xhdGVzdFZhbHVlfXJldHVybiBhIT09dGhpcy5fb2JqPyh0aGlzLl9kaXNwb3NlKCksdGhpcy50cmFuc2Zvcm0oYSkpOnRoaXMuX2xhdGVzdFZh''@;'; put 'put ''bHVlfV9zdWJzY3JpYmUoYSl7dGhpcy5fb2JqPWEsdGhpcy5fc3RyYXRlZ3k9dGhpcy5fc2VsZWN0U3RyYXRlZ3koYSksdGhpcy5fc3Vic2NyaXB0aW9uPXRoaXMuX3N0cmF0ZWd5LmNyZWF0ZVN1YnNjcmlwdGlvbihhLGQ9PnRoaXMuX3VwZGF0ZUxhdGVzdFZhbHVlKGEsZCkpfV9zZWxlY3RT''@;'; put 'put ''dHJhdGVneShhKXtpZihiRShhKSlyZXR1cm4gaUFlO2lmKGdzZShhKSlyZXR1cm4gYUFlO3Rocm93IGZ1bmN0aW9uIEkzKGMsbCl7cmV0dXJuIG5ldyBQcigyMTAwLCExKX0oKX1fZGlzcG9zZSgpe3RoaXMuX3N0cmF0ZWd5LmRpc3Bvc2UodGhpcy5fc3Vic2NyaXB0aW9uKSx0aGlzLl9sYXRl''@;'; put 'put ''c3RWYWx1ZT1udWxsLHRoaXMuX3N1YnNjcmlwdGlvbj1udWxsLHRoaXMuX29iaj1udWxsfV91cGRhdGVMYXRlc3RWYWx1ZShhLGQpe2E9PT10aGlzLl9vYmomJih0aGlzLl9sYXRlc3RWYWx1ZT1kLHRoaXMubWFya0ZvckNoZWNrT25WYWx1ZVVwZGF0ZSYmdGhpcy5fcmVmPy5tYXJrRm9yQ2hl''@;'; put 'put ''Y2soKSl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHFlKEhzLDE2KSl9O3N0YXRpYyBcdTAyNzVwaXBlPUxsKHtuYW1lOiJhc3luYyIsdHlwZTpjLHB1cmU6ITF9KX1yZXR1cm4gY30pKCksU0c9KCgpPT57Y2xhc3MgY3t0cmFuc2Zvcm0oYSl7cmV0dXJu''@;'; put 'put ''IEpTT04uc3RyaW5naWZ5KGEsbnVsbCwyKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVwaXBlPUxsKHtuYW1lOiJqc29uIix0eXBlOmMscHVyZTohMX0pfXJldHVybiBjfSkoKSxMUD0oKCk9PntjbGFzcyBje2RpZmZlcnM7Y29u''@;'; put 'put ''c3RydWN0b3IoYSl7dGhpcy5kaWZmZXJzPWF9ZGlmZmVyO2tleVZhbHVlcz1bXTtjb21wYXJlRm49a3VlO3RyYW5zZm9ybShhLGQ9a3VlKXtpZighYXx8IShhIGluc3RhbmNlb2YgTWFwKSYmIm9iamVjdCIhPXR5cGVvZiBhKXJldHVybiBudWxsO3RoaXMuZGlmZmVyPz89dGhpcy5kaWZmZXJz''@;'; put 'put ''LmZpbmQoYSkuY3JlYXRlKCk7Y29uc3QgaD10aGlzLmRpZmZlci5kaWZmKGEpLGY9ZCE9PXRoaXMuY29tcGFyZUZuO3JldHVybiBoJiYodGhpcy5rZXlWYWx1ZXM9W10saC5mb3JFYWNoSXRlbSh2PT57dGhpcy5rZXlWYWx1ZXMucHVzaChmdW5jdGlvbiB2QWUoYyxsKXtyZXR1cm57a2V5OmMs''@;'; put 'put ''dmFsdWU6bH19KHYua2V5LHYuY3VycmVudFZhbHVlKSl9KSksKGh8fGYpJiYoZCYmdGhpcy5rZXlWYWx1ZXMuc29ydChkKSx0aGlzLmNvbXBhcmVGbj1kKSx0aGlzLmtleVZhbHVlc31zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUoUEUsMTYpKX07c3Rh''@;'; put 'put ''dGljIFx1MDI3NXBpcGU9TGwoe25hbWU6ImtleXZhbHVlIix0eXBlOmMscHVyZTohMX0pfXJldHVybiBjfSkoKTtmdW5jdGlvbiBrdWUoYyxsKXtjb25zdCBhPWMua2V5LGQ9bC5rZXk7aWYoYT09PWQpcmV0dXJuIDA7aWYobnVsbD09YSlyZXR1cm4gMTtpZihudWxsPT1kKXJldHVybi0xO2lm''@;'; put 'put ''KCJzdHJpbmciPT10eXBlb2YgYSYmInN0cmluZyI9PXR5cGVvZiBkKXJldHVybiBhPGQ/LTE6MTtpZigibnVtYmVyIj09dHlwZW9mIGEmJiJudW1iZXIiPT10eXBlb2YgZClyZXR1cm4gYS1kO2lmKCJib29sZWFuIj09dHlwZW9mIGEmJiJib29sZWFuIj09dHlwZW9mIGQpcmV0dXJuIGE8ZD8t''@;'; put 'put ''MToxO2NvbnN0IGg9U3RyaW5nKGEpLGY9U3RyaW5nKGQpO3JldHVybiBoPT1mPzA6aDxmPy0xOjF9bGV0IE5hPSgoKT0+e2NsYXNzIGN7c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1bW9kPUVpKHt0eXBlOmN9KTtzdGF0aWMgXHUw''@;'; put 'put ''Mjc1aW5qPXlpKHt9KX1yZXR1cm4gY30pKCk7Y29uc3QgRUc9bmV3IGpuKCIiKTtsZXQgRHVlPSgoKT0+e2NsYXNzIGN7X3pvbmU7X3BsdWdpbnM7X2V2ZW50TmFtZVRvUGx1Z2luPW5ldyBNYXA7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl96b25lPWQsYS5mb3JFYWNoKGg9PntoLm1hbmFnZXI9''@;'; put 'put ''dGhpc30pLHRoaXMuX3BsdWdpbnM9YS5zbGljZSgpLnJldmVyc2UoKX1hZGRFdmVudExpc3RlbmVyKGEsZCxoLGYpe3JldHVybiB0aGlzLl9maW5kUGx1Z2luRm9yKGQpLmFkZEV2ZW50TGlzdGVuZXIoYSxkLGgsZil9Z2V0Wm9uZSgpe3JldHVybiB0aGlzLl96b25lfV9maW5kUGx1Z2luRm9y''@;'; put 'put ''KGEpe2xldCBkPXRoaXMuX2V2ZW50TmFtZVRvUGx1Z2luLmdldChhKTtpZihkKXJldHVybiBkO2lmKGQ9dGhpcy5fcGx1Z2lucy5maW5kKGY9PmYuc3VwcG9ydHMoYSkpLCFkKXRocm93IG5ldyBQcig1MTAxLCExKTtyZXR1cm4gdGhpcy5fZXZlbnROYW1lVG9QbHVnaW4uc2V0KGEsZCksZH1z''@;'; put 'put ''dGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoSHIoRUcpLEhyKFhhKSl9O3N0YXRpYyBcdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX1yZXR1cm4gY30pKCk7Y2xhc3MgSXVle19kb2M7Y29uc3RydWN0b3IobCl7dGhpcy5fZG9j''@;'; put 'put ''PWx9bWFuYWdlcn1jb25zdCBPUD0ibmctYXBwLWlkIjtmdW5jdGlvbiBSdWUoYyl7Zm9yKGNvbnN0IGwgb2YgYylsLnJlbW92ZSgpfWZ1bmN0aW9uIEx1ZShjLGwpe2NvbnN0IGE9bC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3JldHVybiBhLnRleHRDb250ZW50PWMsYX1mdW5jdGlvbiBURyhj''@;'; put 'put ''LGwpe2NvbnN0IGE9bC5jcmVhdGVFbGVtZW50KCJsaW5rIik7cmV0dXJuIGEuc2V0QXR0cmlidXRlKCJyZWwiLCJzdHlsZXNoZWV0IiksYS5zZXRBdHRyaWJ1dGUoImhyZWYiLGMpLGF9bGV0IE91ZT0oKCk9PntjbGFzcyBje2RvYzthcHBJZDtub25jZTtpbmxpbmU9bmV3IE1hcDtleHRlcm5h''@;'; put 'put ''bD1uZXcgTWFwO2hvc3RzPW5ldyBTZXQ7aXNTZXJ2ZXI7Y29uc3RydWN0b3IoYSxkLGgsZj17fSl7dGhpcy5kb2M9YSx0aGlzLmFwcElkPWQsdGhpcy5ub25jZT1oLHRoaXMuaXNTZXJ2ZXI9ZnVlKGYpLGZ1bmN0aW9uIHdBZShjLGwsYSxkKXtjb25zdCBoPWMuaGVhZD8ucXVlcnlTZWxlY3Rv''@;'; put 'put ''ckFsbChgc3R5bGVbJHtPUH09IiR7bH0iXSxsaW5rWyR7T1B9PSIke2x9Il1gKTtpZihoKWZvcihjb25zdCBmIG9mIGgpZi5yZW1vdmVBdHRyaWJ1dGUoT1ApLGYgaW5zdGFuY2VvZiBIVE1MTGlua0VsZW1lbnQ/ZC5zZXQoZi5ocmVmLnNsaWNlKGYuaHJlZi5sYXN0SW5kZXhPZigiLyIpKzEp''@;'; put 'put ''LHt1c2FnZTowLGVsZW1lbnRzOltmXX0pOmYudGV4dENvbnRlbnQmJmEuc2V0KGYudGV4dENvbnRlbnQse3VzYWdlOjAsZWxlbWVudHM6W2ZdfSl9KGEsZCx0aGlzLmlubGluZSx0aGlzLmV4dGVybmFsKSx0aGlzLmhvc3RzLmFkZChhLmhlYWQpfWFkZFN0eWxlcyhhLGQpe2Zvcihjb25zdCBo''@;'; put 'put ''IG9mIGEpdGhpcy5hZGRVc2FnZShoLHRoaXMuaW5saW5lLEx1ZSk7ZD8uZm9yRWFjaChoPT50aGlzLmFkZFVzYWdlKGgsdGhpcy5leHRlcm5hbCxURykpfXJlbW92ZVN0eWxlcyhhLGQpe2Zvcihjb25zdCBoIG9mIGEpdGhpcy5yZW1vdmVVc2FnZShoLHRoaXMuaW5saW5lKTtkPy5mb3JFYWNo''@;'; put 'put ''KGg9PnRoaXMucmVtb3ZlVXNhZ2UoaCx0aGlzLmV4dGVybmFsKSl9YWRkVXNhZ2UoYSxkLGgpe2NvbnN0IGY9ZC5nZXQoYSk7Zj9mLnVzYWdlKys6ZC5zZXQoYSx7dXNhZ2U6MSxlbGVtZW50czpbLi4udGhpcy5ob3N0c10ubWFwKHY9PnRoaXMuYWRkRWxlbWVudCh2LGgoYSx0aGlzLmRvYykp''@;'; put 'put ''KX0pfXJlbW92ZVVzYWdlKGEsZCl7Y29uc3QgaD1kLmdldChhKTtoJiYoaC51c2FnZS0tLGgudXNhZ2U8PTAmJihSdWUoaC5lbGVtZW50cyksZC5kZWxldGUoYSkpKX1uZ09uRGVzdHJveSgpe2Zvcihjb25zdFsse2VsZW1lbnRzOmF9XW9mWy4uLnRoaXMuaW5saW5lLC4uLnRoaXMuZXh0ZXJu''@;'; put 'put ''YWxdKVJ1ZShhKTt0aGlzLmhvc3RzLmNsZWFyKCl9YWRkSG9zdChhKXt0aGlzLmhvc3RzLmFkZChhKTtmb3IoY29uc3RbZCx7ZWxlbWVudHM6aH1db2YgdGhpcy5pbmxpbmUpaC5wdXNoKHRoaXMuYWRkRWxlbWVudChhLEx1ZShkLHRoaXMuZG9jKSkpO2Zvcihjb25zdFtkLHtlbGVtZW50czpo''@;'; put 'put ''fV1vZiB0aGlzLmV4dGVybmFsKWgucHVzaCh0aGlzLmFkZEVsZW1lbnQoYSxURyhkLHRoaXMuZG9jKSkpfXJlbW92ZUhvc3QoYSl7dGhpcy5ob3N0cy5kZWxldGUoYSl9YWRkRWxlbWVudChhLGQpe3JldHVybiB0aGlzLm5vbmNlJiZkLnNldEF0dHJpYnV0ZSgibm9uY2UiLHRoaXMubm9uY2Up''@;'; put 'put ''LHRoaXMuaXNTZXJ2ZXImJmQuc2V0QXR0cmlidXRlKE9QLHRoaXMuYXBwSWQpLGEuYXBwZW5kQ2hpbGQoZCl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEhyKEdzKSxIcihkZCksSHIocjIsOCksSHIodWwpKX07c3RhdGljIFx1MDI3NXByb3Y9ZnIoe3Rv''@;'; put 'put ''a2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfXJldHVybiBjfSkoKTtjb25zdCBBRz17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0''@;'; put 'put ''dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIixtYXRoOiJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIn0sa0c9LyVDT01QJS9nLFRBZT1uZXcgam4oIiIse3Byb3ZpZGVkSW46InJvb3QiLGZh''@;'; put 'put ''Y3Rvcnk6KCk9PiEwfSk7ZnVuY3Rpb24gRnVlKGMsbCl7cmV0dXJuIGwubWFwKGE9PmEucmVwbGFjZShrRyxjKSl9bGV0IERHPSgoKT0+e2NsYXNzIGN7ZXZlbnRNYW5hZ2VyO3NoYXJlZFN0eWxlc0hvc3Q7YXBwSWQ7cmVtb3ZlU3R5bGVzT25Db21wRGVzdHJveTtkb2M7cGxhdGZvcm1JZDtu''@;'; put 'put ''Z1pvbmU7bm9uY2U7dHJhY2luZ1NlcnZpY2U7cmVuZGVyZXJCeUNvbXBJZD1uZXcgTWFwO2RlZmF1bHRSZW5kZXJlcjtwbGF0Zm9ybUlzU2VydmVyO2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQsVT1udWxsLHRlPW51bGwpe3RoaXMuZXZlbnRNYW5hZ2VyPWEsdGhpcy5zaGFyZWRTdHlsZXNI''@;'; put 'put ''b3N0PWQsdGhpcy5hcHBJZD1oLHRoaXMucmVtb3ZlU3R5bGVzT25Db21wRGVzdHJveT1mLHRoaXMuZG9jPXYsdGhpcy5wbGF0Zm9ybUlkPU0sdGhpcy5uZ1pvbmU9RCx0aGlzLm5vbmNlPVUsdGhpcy50cmFjaW5nU2VydmljZT10ZSx0aGlzLnBsYXRmb3JtSXNTZXJ2ZXI9ZnVlKE0pLHRoaXMu''@;'; put 'put ''ZGVmYXVsdFJlbmRlcmVyPW5ldyBJRyhhLHYsRCx0aGlzLnBsYXRmb3JtSXNTZXJ2ZXIsdGhpcy50cmFjaW5nU2VydmljZSl9Y3JlYXRlUmVuZGVyZXIoYSxkKXtpZighYXx8IWQpcmV0dXJuIHRoaXMuZGVmYXVsdFJlbmRlcmVyO3RoaXMucGxhdGZvcm1Jc1NlcnZlciYmZC5lbmNhcHN1bGF0''@;'; put 'put ''aW9uPT09ZmQuU2hhZG93RG9tJiYoZD17Li4uZCxlbmNhcHN1bGF0aW9uOmZkLkVtdWxhdGVkfSk7Y29uc3QgaD10aGlzLmdldE9yQ3JlYXRlUmVuZGVyZXIoYSxkKTtyZXR1cm4gaCBpbnN0YW5jZW9mIE51ZT9oLmFwcGx5VG9Ib3N0KGEpOmggaW5zdGFuY2VvZiBSRyYmaC5hcHBseVN0eWxl''@;'; put 'put ''cygpLGh9Z2V0T3JDcmVhdGVSZW5kZXJlcihhLGQpe2NvbnN0IGg9dGhpcy5yZW5kZXJlckJ5Q29tcElkO2xldCBmPWguZ2V0KGQuaWQpO2lmKCFmKXtjb25zdCB2PXRoaXMuZG9jLE09dGhpcy5uZ1pvbmUsRD10aGlzLmV2ZW50TWFuYWdlcixVPXRoaXMuc2hhcmVkU3R5bGVzSG9zdCx0ZT10''@;'; put 'put ''aGlzLnJlbW92ZVN0eWxlc09uQ29tcERlc3Ryb3ksb2U9dGhpcy5wbGF0Zm9ybUlzU2VydmVyLHZlPXRoaXMudHJhY2luZ1NlcnZpY2U7c3dpdGNoKGQuZW5jYXBzdWxhdGlvbil7Y2FzZSBmZC5FbXVsYXRlZDpmPW5ldyBOdWUoRCxVLGQsdGhpcy5hcHBJZCx0ZSx2LE0sb2UsdmUpO2JyZWFr''@;'; put 'put ''O2Nhc2UgZmQuU2hhZG93RG9tOnJldHVybiBuZXcgSUFlKEQsVSxhLGQsdixNLHRoaXMubm9uY2Usb2UsdmUpO2RlZmF1bHQ6Zj1uZXcgUkcoRCxVLGQsdGUsdixNLG9lLHZlKX1oLnNldChkLmlkLGYpfXJldHVybiBmfW5nT25EZXN0cm95KCl7dGhpcy5yZW5kZXJlckJ5Q29tcElkLmNsZWFy''@;'; put 'put ''KCl9Y29tcG9uZW50UmVwbGFjZWQoYSl7dGhpcy5yZW5kZXJlckJ5Q29tcElkLmRlbGV0ZShhKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoSHIoRHVlKSxIcihPdWUpLEhyKGRkKSxIcihUQWUpLEhyKEdzKSxIcih1bCksSHIoWGEpLEhyKHIyKSxIcihD''@;'; put 'put ''bSw4KSl9O3N0YXRpYyBcdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX1yZXR1cm4gY30pKCk7Y2xhc3MgSUd7ZXZlbnRNYW5hZ2VyO2RvYztuZ1pvbmU7cGxhdGZvcm1Jc1NlcnZlcjt0cmFjaW5nU2VydmljZTtkYXRhPU9iamVjdC5jcmVhdGUobnVsbCk7dGhy''@;'; put 'put ''b3dPblN5bnRoZXRpY1Byb3BzPSEwO2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7dGhpcy5ldmVudE1hbmFnZXI9bCx0aGlzLmRvYz1hLHRoaXMubmdab25lPWQsdGhpcy5wbGF0Zm9ybUlzU2VydmVyPWgsdGhpcy50cmFjaW5nU2VydmljZT1mfWRlc3Ryb3koKXt9ZGVzdHJveU5vZGU9bnVsbDtj''@;'; put 'put ''cmVhdGVFbGVtZW50KGwsYSl7cmV0dXJuIGE/dGhpcy5kb2MuY3JlYXRlRWxlbWVudE5TKEFHW2FdfHxhLGwpOnRoaXMuZG9jLmNyZWF0ZUVsZW1lbnQobCl9Y3JlYXRlQ29tbWVudChsKXtyZXR1cm4gdGhpcy5kb2MuY3JlYXRlQ29tbWVudChsKX1jcmVhdGVUZXh0KGwpe3JldHVybiB0aGlz''@;'; put 'put ''LmRvYy5jcmVhdGVUZXh0Tm9kZShsKX1hcHBlbmRDaGlsZChsLGEpeyhIdWUobCk/bC5jb250ZW50OmwpLmFwcGVuZENoaWxkKGEpfWluc2VydEJlZm9yZShsLGEsZCl7bCYmKEh1ZShsKT9sLmNvbnRlbnQ6bCkuaW5zZXJ0QmVmb3JlKGEsZCl9cmVtb3ZlQ2hpbGQobCxhKXthLnJlbW92ZSgp''@;'; put 'put ''fXNlbGVjdFJvb3RFbGVtZW50KGwsYSl7bGV0IGQ9InN0cmluZyI9PXR5cGVvZiBsP3RoaXMuZG9jLnF1ZXJ5U2VsZWN0b3IobCk6bDtpZighZCl0aHJvdyBuZXcgUHIoLTUxMDQsITEpO3JldHVybiBhfHwoZC50ZXh0Q29udGVudD0iIiksZH1wYXJlbnROb2RlKGwpe3JldHVybiBsLnBhcmVu''@;'; put 'put ''dE5vZGV9bmV4dFNpYmxpbmcobCl7cmV0dXJuIGwubmV4dFNpYmxpbmd9c2V0QXR0cmlidXRlKGwsYSxkLGgpe2lmKGgpe2E9aCsiOiIrYTtjb25zdCBmPUFHW2hdO2Y/bC5zZXRBdHRyaWJ1dGVOUyhmLGEsZCk6bC5zZXRBdHRyaWJ1dGUoYSxkKX1lbHNlIGwuc2V0QXR0cmlidXRlKGEsZCl9''@;'; put 'put ''cmVtb3ZlQXR0cmlidXRlKGwsYSxkKXtpZihkKXtjb25zdCBoPUFHW2RdO2g/bC5yZW1vdmVBdHRyaWJ1dGVOUyhoLGEpOmwucmVtb3ZlQXR0cmlidXRlKGAke2R9OiR7YX1gKX1lbHNlIGwucmVtb3ZlQXR0cmlidXRlKGEpfWFkZENsYXNzKGwsYSl7bC5jbGFzc0xpc3QuYWRkKGEpfXJlbW92''@;'; put 'put ''ZUNsYXNzKGwsYSl7bC5jbGFzc0xpc3QucmVtb3ZlKGEpfXNldFN0eWxlKGwsYSxkLGgpe2gmKEpwLkRhc2hDYXNlfEpwLkltcG9ydGFudCk/bC5zdHlsZS5zZXRQcm9wZXJ0eShhLGQsaCZKcC5JbXBvcnRhbnQ/ImltcG9ydGFudCI6IiIpOmwuc3R5bGVbYV09ZH1yZW1vdmVTdHlsZShsLGEs''@;'; put 'put ''ZCl7ZCZKcC5EYXNoQ2FzZT9sLnN0eWxlLnJlbW92ZVByb3BlcnR5KGEpOmwuc3R5bGVbYV09IiJ9c2V0UHJvcGVydHkobCxhLGQpe251bGwhPWwmJihsW2FdPWQpfXNldFZhbHVlKGwsYSl7bC5ub2RlVmFsdWU9YX1saXN0ZW4obCxhLGQsaCl7aWYoInN0cmluZyI9PXR5cGVvZiBsJiYhKGw9''@;'; put 'put ''S20oKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLmRvYyxsKSkpdGhyb3cgbmV3IFByKDUxMDIsITEpO2xldCBmPXRoaXMuZGVjb3JhdGVQcmV2ZW50RGVmYXVsdChkKTtyZXR1cm4gdGhpcy50cmFjaW5nU2VydmljZT8ud3JhcEV2ZW50TGlzdGVuZXImJihmPXRoaXMudHJhY2luZ1NlcnZp''@;'; put 'put ''Y2Uud3JhcEV2ZW50TGlzdGVuZXIobCxhLGYpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsYSxmLGgpfWRlY29yYXRlUHJldmVudERlZmF1bHQobCl7cmV0dXJuIGE9PntpZigiX19uZ1Vud3JhcF9fIj09PWEpcmV0dXJuIGw7ITE9PT0odGhpcy5wbGF0Zm9ybUlzU2Vy''@;'; put 'put ''dmVyP3RoaXMubmdab25lLnJ1bkd1YXJkZWQoKCk9PmwoYSkpOmwoYSkpJiZhLnByZXZlbnREZWZhdWx0KCl9fX1mdW5jdGlvbiBIdWUoYyl7cmV0dXJuIlRFTVBMQVRFIj09PWMudGFnTmFtZSYmdm9pZCAwIT09Yy5jb250ZW50fWNsYXNzIElBZSBleHRlbmRzIElHe3NoYXJlZFN0eWxlc0hv''@;'; put 'put ''c3Q7aG9zdEVsO3NoYWRvd1Jvb3Q7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYsTSxELFUpe3N1cGVyKGwsZix2LEQsVSksdGhpcy5zaGFyZWRTdHlsZXNIb3N0PWEsdGhpcy5ob3N0RWw9ZCx0aGlzLnNoYWRvd1Jvb3Q9ZC5hdHRhY2hTaGFkb3coe21vZGU6Im9wZW4ifSksdGhpcy5zaGFyZWRT''@;'; put 'put ''dHlsZXNIb3N0LmFkZEhvc3QodGhpcy5zaGFkb3dSb290KTtsZXQgdGU9aC5zdHlsZXM7dGU9RnVlKGguaWQsdGUpO2Zvcihjb25zdCB2ZSBvZiB0ZSl7Y29uc3Qgd2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtNJiZ3ZS5zZXRBdHRyaWJ1dGUoIm5vbmNlIixNKSx3ZS50ZXh0''@;'; put 'put ''Q29udGVudD12ZSx0aGlzLnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQod2UpfWNvbnN0IG9lPWguZ2V0RXh0ZXJuYWxTdHlsZXM/LigpO2lmKG9lKWZvcihjb25zdCB2ZSBvZiBvZSl7Y29uc3Qgd2U9VEcodmUsZik7TSYmd2Uuc2V0QXR0cmlidXRlKCJub25jZSIsTSksdGhpcy5zaGFkb3dSb290''@;'; put 'put ''LmFwcGVuZENoaWxkKHdlKX19bm9kZU9yU2hhZG93Um9vdChsKXtyZXR1cm4gbD09PXRoaXMuaG9zdEVsP3RoaXMuc2hhZG93Um9vdDpsfWFwcGVuZENoaWxkKGwsYSl7cmV0dXJuIHN1cGVyLmFwcGVuZENoaWxkKHRoaXMubm9kZU9yU2hhZG93Um9vdChsKSxhKX1pbnNlcnRCZWZvcmUobCxh''@;'; put 'put ''LGQpe3JldHVybiBzdXBlci5pbnNlcnRCZWZvcmUodGhpcy5ub2RlT3JTaGFkb3dSb290KGwpLGEsZCl9cmVtb3ZlQ2hpbGQobCxhKXtyZXR1cm4gc3VwZXIucmVtb3ZlQ2hpbGQobnVsbCxhKX1wYXJlbnROb2RlKGwpe3JldHVybiB0aGlzLm5vZGVPclNoYWRvd1Jvb3Qoc3VwZXIucGFyZW50''@;'; put 'put ''Tm9kZSh0aGlzLm5vZGVPclNoYWRvd1Jvb3QobCkpKX1kZXN0cm95KCl7dGhpcy5zaGFyZWRTdHlsZXNIb3N0LnJlbW92ZUhvc3QodGhpcy5zaGFkb3dSb290KX19Y2xhc3MgUkcgZXh0ZW5kcyBJR3tzaGFyZWRTdHlsZXNIb3N0O3JlbW92ZVN0eWxlc09uQ29tcERlc3Ryb3k7c3R5bGVzO3N0''@;'; put 'put ''eWxlVXJscztjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdixNLEQsVSl7c3VwZXIobCxmLHYsTSxEKSx0aGlzLnNoYXJlZFN0eWxlc0hvc3Q9YSx0aGlzLnJlbW92ZVN0eWxlc09uQ29tcERlc3Ryb3k9aDtsZXQgdGU9ZC5zdHlsZXM7dGhpcy5zdHlsZXM9VT9GdWUoVSx0ZSk6dGUsdGhpcy5zdHls''@;'; put 'put ''ZVVybHM9ZC5nZXRFeHRlcm5hbFN0eWxlcz8uKFUpfWFwcGx5U3R5bGVzKCl7dGhpcy5zaGFyZWRTdHlsZXNIb3N0LmFkZFN0eWxlcyh0aGlzLnN0eWxlcyx0aGlzLnN0eWxlVXJscyl9ZGVzdHJveSgpe3RoaXMucmVtb3ZlU3R5bGVzT25Db21wRGVzdHJveSYmdGhpcy5zaGFyZWRTdHlsZXNI''@;'; put 'put ''b3N0LnJlbW92ZVN0eWxlcyh0aGlzLnN0eWxlcyx0aGlzLnN0eWxlVXJscyl9fWNsYXNzIE51ZSBleHRlbmRzIFJHe2NvbnRlbnRBdHRyO2hvc3RBdHRyO2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0sRCxVKXtjb25zdCB0ZT1oKyItIitkLmlkO3N1cGVyKGwsYSxkLGYsdixNLEQsVSx0ZSks''@;'; put 'put ''dGhpcy5jb250ZW50QXR0cj1mdW5jdGlvbiBBQWUoYyl7cmV0dXJuIl9uZ2NvbnRlbnQtJUNPTVAlIi5yZXBsYWNlKGtHLGMpfSh0ZSksdGhpcy5ob3N0QXR0cj1mdW5jdGlvbiBrQWUoYyl7cmV0dXJuIl9uZ2hvc3QtJUNPTVAlIi5yZXBsYWNlKGtHLGMpfSh0ZSl9YXBwbHlUb0hvc3QobCl7''@;'; put 'put ''dGhpcy5hcHBseVN0eWxlcygpLHRoaXMuc2V0QXR0cmlidXRlKGwsdGhpcy5ob3N0QXR0ciwiIil9Y3JlYXRlRWxlbWVudChsLGEpe2NvbnN0IGQ9c3VwZXIuY3JlYXRlRWxlbWVudChsLGEpO3JldHVybiBzdXBlci5zZXRBdHRyaWJ1dGUoZCx0aGlzLmNvbnRlbnRBdHRyLCIiKSxkfX1jbGFz''@;'; put 'put ''cyBMRyBleHRlbmRzIHNUZXtzdXBwb3J0c0RPTUV2ZW50cz0hMDtzdGF0aWMgbWFrZUN1cnJlbnQoKXshZnVuY3Rpb24gb1RlKGMpe291ZT8/PWN9KG5ldyBMRyl9b25BbmRDYW5jZWwobCxhLGQsaCl7cmV0dXJuIGwuYWRkRXZlbnRMaXN0ZW5lcihhLGQsaCksKCk9PntsLnJlbW92ZUV2ZW50''@;'; put 'put ''TGlzdGVuZXIoYSxkLGgpfX1kaXNwYXRjaEV2ZW50KGwsYSl7bC5kaXNwYXRjaEV2ZW50KGEpfXJlbW92ZShsKXtsLnJlbW92ZSgpfWNyZWF0ZUVsZW1lbnQobCxhKXtyZXR1cm4oYT1hfHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50KGwpfWNyZWF0ZUh0bWxEb2N1''@;'; put 'put ''bWVudCgpe3JldHVybiBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoImZha2VUaXRsZSIpfWdldERlZmF1bHREb2N1bWVudCgpe3JldHVybiBkb2N1bWVudH1pc0VsZW1lbnROb2RlKGwpe3JldHVybiBsLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREV9aXNT''@;'; put 'put ''aGFkb3dSb290KGwpe3JldHVybiBsIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudH1nZXRHbG9iYWxFdmVudFRhcmdldChsLGEpe3JldHVybiJ3aW5kb3ciPT09YT93aW5kb3c6ImRvY3VtZW50Ij09PWE/bDoiYm9keSI9PT1hP2wuYm9keTpudWxsfWdldEJhc2VIcmVmKGwpe2NvbnN0IGE9''@;'; put 'put ''ZnVuY3Rpb24gUkFlKCl7cmV0dXJuIEJFPUJFfHxkb2N1bWVudC5oZWFkLnF1ZXJ5U2VsZWN0b3IoImJhc2UiKSxCRT9CRS5nZXRBdHRyaWJ1dGUoImhyZWYiKTpudWxsfSgpO3JldHVybiBudWxsPT1hP251bGw6ZnVuY3Rpb24gTEFlKGMpe3JldHVybiBuZXcgVVJMKGMsZG9jdW1lbnQuYmFz''@;'; put 'put ''ZVVSSSkucGF0aG5hbWV9KGEpfXJlc2V0QmFzZUVsZW1lbnQoKXtCRT1udWxsfWdldFVzZXJBZ2VudCgpe3JldHVybiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudH1nZXRDb29raWUobCl7cmV0dXJuIGR1ZShkb2N1bWVudC5jb29raWUsbCl9fWxldCBCRT1udWxsLFBBZT0oKCk9PntjbGFz''@;'; put 'put ''cyBje2J1aWxkKCl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdH1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX1yZXR1cm4gY30pKCksRkFlPSgoKT0+e2NsYXNz''@;'; put 'put ''IGMgZXh0ZW5kcyBJdWV7Y29uc3RydWN0b3IoYSl7c3VwZXIoYSl9c3VwcG9ydHMoYSl7cmV0dXJuITB9YWRkRXZlbnRMaXN0ZW5lcihhLGQsaCxmKXtyZXR1cm4gYS5hZGRFdmVudExpc3RlbmVyKGQsaCxmKSwoKT0+dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGEsZCxoLGYpfXJlbW92ZUV2''@;'; put 'put ''ZW50TGlzdGVuZXIoYSxkLGgsZil7cmV0dXJuIGEucmVtb3ZlRXZlbnRMaXN0ZW5lcihkLGgsZil9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEhyKEdzKSl9O3N0YXRpYyBcdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX1y''@;'; put 'put ''ZXR1cm4gY30pKCk7Y29uc3QgVnVlPVsiYWx0IiwiY29udHJvbCIsIm1ldGEiLCJzaGlmdCJdLEhBZT17IlxiIjoiQmFja3NwYWNlIiwiXHQiOiJUYWIiLCJceDdmIjoiRGVsZXRlIiwiXHgxYiI6IkVzY2FwZSIsRGVsOiJEZWxldGUiLEVzYzoiRXNjYXBlIixMZWZ0OiJBcnJvd0xlZnQiLFJp''@;'; put 'put ''Z2h0OiJBcnJvd1JpZ2h0IixVcDoiQXJyb3dVcCIsRG93bjoiQXJyb3dEb3duIixNZW51OiJDb250ZXh0TWVudSIsU2Nyb2xsOiJTY3JvbGxMb2NrIixXaW46Ik9TIn0sTkFlPXthbHQ6Yz0+Yy5hbHRLZXksY29udHJvbDpjPT5jLmN0cmxLZXksbWV0YTpjPT5jLm1ldGFLZXksc2hpZnQ6Yz0+''@;'; put 'put ''Yy5zaGlmdEtleX07bGV0IFZBZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgSXVle2NvbnN0cnVjdG9yKGEpe3N1cGVyKGEpfXN1cHBvcnRzKGEpe3JldHVybiBudWxsIT1jLnBhcnNlRXZlbnROYW1lKGEpfWFkZEV2ZW50TGlzdGVuZXIoYSxkLGgsZil7Y29uc3Qgdj1jLnBhcnNlRXZlbnROYW1l''@;'; put 'put ''KGQpLE09Yy5ldmVudENhbGxiYWNrKHYuZnVsbEtleSxoLHRoaXMubWFuYWdlci5nZXRab25lKCkpO3JldHVybiB0aGlzLm1hbmFnZXIuZ2V0Wm9uZSgpLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5LbSgpLm9uQW5kQ2FuY2VsKGEsdi5kb21FdmVudE5hbWUsTSxmKSl9c3RhdGljIHBhcnNlRXZl''@;'; put 'put ''bnROYW1lKGEpe2NvbnN0IGQ9YS50b0xvd2VyQ2FzZSgpLnNwbGl0KCIuIiksaD1kLnNoaWZ0KCk7aWYoMD09PWQubGVuZ3RofHwia2V5ZG93biIhPT1oJiYia2V5dXAiIT09aClyZXR1cm4gbnVsbDtjb25zdCBmPWMuX25vcm1hbGl6ZUtleShkLnBvcCgpKTtsZXQgdj0iIixNPWQuaW5kZXhP''@;'; put 'put ''ZigiY29kZSIpO2lmKE0+LTEmJihkLnNwbGljZShNLDEpLHY9ImNvZGUuIiksVnVlLmZvckVhY2goVT0+e2NvbnN0IHRlPWQuaW5kZXhPZihVKTt0ZT4tMSYmKGQuc3BsaWNlKHRlLDEpLHYrPVUrIi4iKX0pLHYrPWYsMCE9ZC5sZW5ndGh8fDA9PT1mLmxlbmd0aClyZXR1cm4gbnVsbDtjb25z''@;'; put 'put ''dCBEPXt9O3JldHVybiBELmRvbUV2ZW50TmFtZT1oLEQuZnVsbEtleT12LER9c3RhdGljIG1hdGNoRXZlbnRGdWxsS2V5Q29kZShhLGQpe2xldCBoPUhBZVthLmtleV18fGEua2V5LGY9IiI7cmV0dXJuIGQuaW5kZXhPZigiY29kZS4iKT4tMSYmKGg9YS5jb2RlLGY9ImNvZGUuIiksIShudWxs''@;'; put 'put ''PT1ofHwhaCkmJihoPWgudG9Mb3dlckNhc2UoKSwiICI9PT1oP2g9InNwYWNlIjoiLiI9PT1oJiYoaD0iZG90IiksVnVlLmZvckVhY2godj0+e3YhPT1oJiYoMCxOQWVbdl0pKGEpJiYoZis9disiLiIpfSksZis9aCxmPT09ZCl9c3RhdGljIGV2ZW50Q2FsbGJhY2soYSxkLGgpe3JldHVybiBm''@;'; put 'put ''PT57Yy5tYXRjaEV2ZW50RnVsbEtleUNvZGUoZixhKSYmaC5ydW5HdWFyZGVkKCgpPT5kKGYpKX19c3RhdGljIF9ub3JtYWxpemVLZXkoYSl7cmV0dXJuImVzYyI9PT1hPyJlc2NhcGUiOmF9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEhyKEdzKSl9O3N0''@;'; put 'put ''YXRpYyBcdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX1yZXR1cm4gY30pKCk7Y29uc3QganVlPVt7cHJvdmlkZTp1bCx1c2VWYWx1ZToiYnJvd3NlciJ9LHtwcm92aWRlOl9tLHVzZVZhbHVlOmZ1bmN0aW9uIEJBZSgpe0xHLm1ha2VDdXJyZW50KCl9LG11bHRp''@;'; put 'put ''OiEwfSx7cHJvdmlkZTpHcyx1c2VGYWN0b3J5OmZ1bmN0aW9uIHpBZSgpe3JldHVybiBmdW5jdGlvbiBnUihjKXtwYj1jfShkb2N1bWVudCksZG9jdW1lbnR9fV0sVUFlPUFjZShnRWUsImJyb3dzZXIiLGp1ZSksenVlPVt7cHJvdmlkZTpKTyx1c2VDbGFzczpjbGFzcyBPQWV7YWRkVG9XaW5k''@;'; put 'put ''b3cobCl7QmEuZ2V0QW5ndWxhclRlc3RhYmlsaXR5PShkLGg9ITApPT57Y29uc3QgZj1sLmZpbmRUZXN0YWJpbGl0eUluVHJlZShkLGgpO2lmKG51bGw9PWYpdGhyb3cgbmV3IFByKDUxMDMsITEpO3JldHVybiBmfSxCYS5nZXRBbGxBbmd1bGFyVGVzdGFiaWxpdGllcz0oKT0+bC5nZXRBbGxU''@;'; put 'put ''ZXN0YWJpbGl0aWVzKCksQmEuZ2V0QWxsQW5ndWxhclJvb3RFbGVtZW50cz0oKT0+bC5nZXRBbGxSb290RWxlbWVudHMoKSxCYS5mcmFtZXdvcmtTdGFiaWxpemVyc3x8KEJhLmZyYW1ld29ya1N0YWJpbGl6ZXJzPVtdKSxCYS5mcmFtZXdvcmtTdGFiaWxpemVycy5wdXNoKGQ9Pntjb25zdCBo''@;'; put 'put ''PUJhLmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzKCk7bGV0IGY9aC5sZW5ndGg7Y29uc3Qgdj1mdW5jdGlvbigpe2YtLSwwPT1mJiZkKCl9O2guZm9yRWFjaChNPT57TS53aGVuU3RhYmxlKHYpfSl9KX1maW5kVGVzdGFiaWxpdHlJblRyZWUobCxhLGQpe3JldHVybiBudWxsPT1hP251bGw6''@;'; put 'put ''bC5nZXRUZXN0YWJpbGl0eShhKT8/KGQ/S20oKS5pc1NoYWRvd1Jvb3QoYSk/dGhpcy5maW5kVGVzdGFiaWxpdHlJblRyZWUobCxhLmhvc3QsITApOnRoaXMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKGwsYS5wYXJlbnRFbGVtZW50LCEwKTpudWxsKX19fSx7cHJvdmlkZTpmc2UsdXNlQ2xhc3M6''@;'; put 'put ''U1ksZGVwczpbWGEsTVksSk9dfSx7cHJvdmlkZTpTWSx1c2VDbGFzczpTWSxkZXBzOltYYSxNWSxKT119XSxVdWU9W3twcm92aWRlOkthLHVzZVZhbHVlOiJyb290In0se3Byb3ZpZGU6ZTIsdXNlRmFjdG9yeTpmdW5jdGlvbiBqQWUoKXtyZXR1cm4gbmV3IGUyfX0se3Byb3ZpZGU6RUcsdXNl''@;'; put 'put ''Q2xhc3M6RkFlLG11bHRpOiEwLGRlcHM6W0dzXX0se3Byb3ZpZGU6RUcsdXNlQ2xhc3M6VkFlLG11bHRpOiEwLGRlcHM6W0dzXX0sREcsT3VlLER1ZSx7cHJvdmlkZTplYyx1c2VFeGlzdGluZzpER30se3Byb3ZpZGU6cHVlLHVzZUNsYXNzOlBBZX0sW11dO2xldCBadWU9KCgpPT57Y2xhc3Mg''@;'; put 'put ''Y3tjb25zdHJ1Y3Rvcigpe31zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVtb2Q9RWkoe3R5cGU6Y30pO3N0YXRpYyBcdTAyNzVpbmo9eWkoe3Byb3ZpZGVyczpbLi4uVXVlLC4uLnp1ZV0saW1wb3J0czpbTmEsbUVlXX0pfXJldHVy''@;'; put 'put ''biBjfSkoKTtiKDM3NDgyKSxiKDgwNjg1KTtjb25zdCBPRz17ZmlsdGVyOntjb2xzOltdLHZhbHM6W10sZ3JvdXBMb2dpYzoiIix3aGVyZUNsYXVzZToiIixsaWJkczoiIixjbGF1c2VzOltdLHF1ZXJ5OltdfX0sWG49e3Jvb3RQYXJhbToiIixkY0xpYjoiIix4bG1hcHM6W10sZWRpdG9yOntz''@;'; put 'put ''dGFydHVwU2V0OiExLHRyZWVOb2RlTGlicmFyaWVzOltdLGxpYnNBbmRUYWJsZXM6W10sbGlicmFyaWVzOltdLGxpYnJhcnk6IiIsdGFibGU6IiIsZmlsdGVyOntjb2xzOltdLHZhbHM6W10sZ3JvdXBMb2dpYzoiIix3aGVyZUNsYXVzZToiIixsaWJkczoiIixjbGF1c2VzOltdLHF1ZXJ5Oltd''@;'; put 'put ''fX0sdmlld2VyOntzdGFydHVwU2V0OiExLHRhYmxlc1NldDohMSxsaWJyYXJpZXM6W10sdGFibGVzOm51bGwsbGlicmFyeToiIix0YWJsZToiIixsaWJpbmZvOltdLGxpYnJhcmllc1NlYXJjaDoiIixmaWx0ZXI6e2NvbHM6W10sdmFsczpbXSxncm91cExvZ2ljOiIiLHdoZXJlQ2xhdXNlOiIi''@;'; put 'put ''LGxpYmRzOiIiLGNsYXVzZXM6W10scXVlcnk6W119LGN1cnJlbnRTZWxlY3Rpb246IiJ9LHZpZXdib3hlczp7fSxsaW5lYWdlOntsaWJyYXJ5TGlzdDpbXSx0YWJsZXNMaXN0OltdLGNvbHVtbnNMaXN0OltdLGxpYnJhcmllc1NlYXJjaDoiIixsaWI6IiIsdGFibGU6IiIsY29sdW1uOiIiLGN1''@;'; put 'put ''cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlOiIiLGN1cnJlbnRMaW5lYWdlUGF0aENvbHVtbjoiIn0sbWV0YWRhdGE6e21ldGFEYXRhTGlzdDp2b2lkIDAsbWV0YURhdGFTZWFyY2g6IiIsbWV0YU9iamVjdExpc3Q6W10sbWV0YU9iamVjdFNlYXJjaDoiIixtZXRhUmVwb3NpdG9yaWVzOnZvaWQg''@;'; put 'put ''MCxzZWxlY3RlZFJlcG9zaXRvcnk6IiJ9LHZpeWFBcGk6e2NvbGxlY3Rpb25zTGlzdDp2b2lkIDAsY29sbGVjdGlvbnNTZWFyY2g6IiIsc2VsZWN0ZWRSZXBvc2l0b3J5OiIifSx1c2VybmF2Ont1c2VyTGlzdDp2b2lkIDAsdXNlclNlYXJjaDoiIixncm91cExpc3Q6dm9pZCAwLGdyb3VwU2Vh''@;'; put 'put ''cmNoOiIiLHJvbGVMaXN0OnZvaWQgMCxyb2xlU2VhcmNoOiIifSxvcGVyYXRvcnM6e251bU9wZXJhdG9yczpbIj0iLCI8IiwiPiIsIjw9IiwiPj0iLCJCRVRXRUVOIiwiSU4iLCJOT1QgSU4iLCJORSJdLGNoYXJPcGVyYXRvcnM6WyI9IiwiPCIsIj4iLCI8PSIsIj49IiwiQ09OVEFJTlMiLCJJ''@;'; put 'put ''TiIsIk5PVCBJTiIsIk5FIl19LGhhbmRzb250YWJsZTp7ZGFya1RhYmxlSGVhZGVyQ2xhc3M6ImRhcmtUSCJ9LHVzZXJEcm9wZG93bkNvbmZpZzp7Y2xvc2VPbkRlYnVnQ2xpY2s6ITF9fTt2YXIgJHM9Yig5NzU4NiksYWg9Yi5uKCRzKTtmdW5jdGlvbiBXdWUoYyxsKXtzd2l0Y2goYyl7Y2Fz''@;'; put 'put ''ZSAwOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSAxOnJldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24oYSxkKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3Vt''@;'; put 'put ''ZW50cyl9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24oYSxkLGgpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA0OnJldHVybiBmdW5jdGlvbihhLGQsaCxmKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgNTpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZix2''@;'; put 'put ''KXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgNjpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZix2LE0pe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA3OnJldHVybiBmdW5jdGlvbihhLGQsaCxmLHYsTSxEKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3Vt''@;'; put 'put ''ZW50cyl9O2Nhc2UgODpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZix2LE0sRCxVKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgOTpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZix2LE0sRCxVLHRlKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgMTA6cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uKGEsZCxoLGYsdixNLEQsVSx0ZSxvZSl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiRmlyc3QgYXJndW1lbnQgdG8gX2FyaXR5IG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlciBubyBncmVhdGVyIHRoYW4g''@;'; put 'put ''dGVuIil9fWZ1bmN0aW9uIFhtKGMpe3JldHVybiBudWxsIT1jJiYib2JqZWN0Ij09dHlwZW9mIGMmJiEwPT09Y1siQEBmdW5jdGlvbmFsL3BsYWNlaG9sZGVyIl19ZnVuY3Rpb24gWGcoYyl7cmV0dXJuIGZ1bmN0aW9uIGwoYSl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RofHxYbShhKT9s''@;'; put 'put ''OmMuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBrXyhjKXtyZXR1cm4gZnVuY3Rpb24gbChhLGQpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIGw7Y2FzZSAxOnJldHVybiBYbShhKT9sOlhnKGZ1bmN0aW9uKGgpe3JldHVybiBjKGEsaCl9KTtkZWZhdWx0''@;'; put 'put ''OnJldHVybiBYbShhKSYmWG0oZCk/bDpYbShhKT9YZyhmdW5jdGlvbihoKXtyZXR1cm4gYyhoLGQpfSk6WG0oZCk/WGcoZnVuY3Rpb24oaCl7cmV0dXJuIGMoYSxoKX0pOmMoYSxkKX19fWZ1bmN0aW9uIFl1ZShjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBkPVtdLGg9MCxmPWMs''@;'; put 'put ''dj0wLE09ITE7djxsLmxlbmd0aHx8aDxhcmd1bWVudHMubGVuZ3RoOyl7dmFyIEQ7djxsLmxlbmd0aCYmKCFYbShsW3ZdKXx8aD49YXJndW1lbnRzLmxlbmd0aCk/RD1sW3ZdOihEPWFyZ3VtZW50c1toXSxoKz0xKSxkW3ZdPUQsWG0oRCk/TT0hMDpmLT0xLHYrPTF9cmV0dXJuIU0mJmY8PTA/''@;'; put 'put ''YS5hcHBseSh0aGlzLGQpOld1ZShNYXRoLm1heCgwLGYpLFl1ZShjLGQsYSkpfX1jb25zdCBHdWU9a18oZnVuY3Rpb24obCxhKXtyZXR1cm4gMT09PWw/WGcoYSk6V3VlKGwsWXVlKGwsW10sYSkpfSksJHVlPWtfKGZ1bmN0aW9uKGwsYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBsfHxudWxsIT1h''@;'; put 'put ''JiYoYS5jb25zdHJ1Y3Rvcj09PWx8fCJPYmplY3QiPT09bC5uYW1lJiYib2JqZWN0Ij09dHlwZW9mIGEpfSk7ZnVuY3Rpb24gUFAoYyxsKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGwsYyl9dmFyIEt1ZT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Nv''@;'; put 'put ''bnN0IFh1ZT1mdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEFyZ3VtZW50c10iPT09S3VlLmNhbGwoYXJndW1lbnRzKT9mdW5jdGlvbihsKXtyZXR1cm4iW29iamVjdCBBcmd1bWVudHNdIj09PUt1ZS5jYWxsKGwpfTpmdW5jdGlvbihsKXtyZXR1cm4gUFAoImNhbGxlZSIsbCl9fSgpLEdBZT1B''@;'; put 'put ''cnJheS5pc0FycmF5fHxmdW5jdGlvbihsKXtyZXR1cm4gbnVsbCE9bCYmbC5sZW5ndGg+PTAmJiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobCl9O2Z1bmN0aW9uIHF1ZShjKXtyZXR1cm4iW29iamVjdCBTdHJpbmddIj09PU9iamVjdC5wcm90b3R5''@;'; put 'put ''cGUudG9TdHJpbmcuY2FsbChjKX12YXIgWEFlPVhnKGZ1bmN0aW9uKGwpe3JldHVybiBudWxsIT1sJiYiZnVuY3Rpb24iPT10eXBlb2YgbFsiZmFudGFzeS1sYW5kL2VtcHR5Il0/bFsiZmFudGFzeS1sYW5kL2VtcHR5Il0oKTpudWxsIT1sJiZudWxsIT1sLmNvbnN0cnVjdG9yJiYiZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgbC5jb25zdHJ1Y3RvclsiZmFudGFzeS1sYW5kL2VtcHR5Il0/bC5jb25zdHJ1Y3RvclsiZmFudGFzeS1sYW5kL2VtcHR5Il0oKTpudWxsIT1sJiYiZnVuY3Rpb24iPT10eXBlb2YgbC5lbXB0eT9sLmVtcHR5KCk6bnVsbCE9bCYmbnVsbCE9bC5jb25zdHJ1Y3RvciYmImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIGwuY29uc3RydWN0b3IuZW1wdHk/bC5jb25zdHJ1Y3Rvci5lbXB0eSgpOkdBZShsKT9bXTpxdWUobCk/IiI6ZnVuY3Rpb24gJEFlKGMpe3JldHVybiJbb2JqZWN0IE9iamVjdF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMpfShsKT97fTpYdWUo''@;'; put 'put ''bCk/ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpOmZ1bmN0aW9uIEtBZShjKXt2YXIgbD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYyk7cmV0dXJuIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIj09PWx8fCJbb2JqZWN0IEludDhBcnJheV0iPT09bHx8IltvYmplY3Qg''@;'; put 'put ''VWludDhBcnJheV0iPT09bHx8IltvYmplY3QgSW50MTZBcnJheV0iPT09bHx8IltvYmplY3QgVWludDE2QXJyYXldIj09PWx8fCJbb2JqZWN0IEludDMyQXJyYXldIj09PWx8fCJbb2JqZWN0IFVpbnQzMkFycmF5XSI9PT1sfHwiW29iamVjdCBGbG9hdDMyQXJyYXldIj09PWx8fCJbb2JqZWN0''@;'; put 'put ''IEZsb2F0NjRBcnJheV0iPT09bHx8IltvYmplY3QgQmlnSW50NjRBcnJheV0iPT09bHx8IltvYmplY3QgQmlnVWludDY0QXJyYXldIj09PWx9KGwpP2wuY29uc3RydWN0b3IuZnJvbSgiIik6dm9pZCAwfSk7Y29uc3QgcUFlPVhBZTtmdW5jdGlvbiBKdWUoYyl7Zm9yKHZhciBhLGw9W107IShh''@;'; put 'put ''PWMubmV4dCgpKS5kb25lOylsLnB1c2goYS52YWx1ZSk7cmV0dXJuIGx9ZnVuY3Rpb24gUXVlKGMsbCxhKXtmb3IodmFyIGQ9MCxoPWEubGVuZ3RoO2Q8aDspe2lmKGMobCxhW2RdKSlyZXR1cm4hMDtkKz0xfXJldHVybiExfWNvbnN0IFBHPSJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuaXM/''@;'; put 'put ''T2JqZWN0LmlzOmZ1bmN0aW9uIFFBZShjLGwpe3JldHVybiBjPT09bD8wIT09Y3x8MS9jPT0xL2w6YyE9YyYmbCE9bH07dmFyIGVrZT0he3RvU3RyaW5nOm51bGx9LnByb3BlcnR5SXNFbnVtZXJhYmxlKCJ0b1N0cmluZyIpLGUwZT1bImNvbnN0cnVjdG9yIiwidmFsdWVPZiIsImlzUHJvdG90''@;'; put 'put ''eXBlT2YiLCJ0b1N0cmluZyIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiaGFzT3duUHJvcGVydHkiLCJ0b0xvY2FsZVN0cmluZyJdLHQwZT1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMucHJvcGVydHlJc0VudW1lcmFibGUoImxlbmd0aCIpfSgpLHRrZT1mdW5jdGlvbihsLGEpe2Zvcih2''@;'; put 'put ''YXIgZD0wO2Q8bC5sZW5ndGg7KXtpZihsW2RdPT09YSlyZXR1cm4hMDtkKz0xfXJldHVybiExfTtjb25zdCBuMGU9WGcoImZ1bmN0aW9uIiE9dHlwZW9mIE9iamVjdC5rZXlzfHx0MGU/ZnVuY3Rpb24obCl7aWYoT2JqZWN0KGwpIT09bClyZXR1cm5bXTt2YXIgYSxkLGg9W10sZj10MGUmJlh1''@;'; put 'put ''ZShsKTtmb3IoYSBpbiBsKVBQKGEsbCkmJighZnx8Imxlbmd0aCIhPT1hKSYmKGhbaC5sZW5ndGhdPWEpO2lmKGVrZSlmb3IoZD1lMGUubGVuZ3RoLTE7ZD49MDspUFAoYT1lMGVbZF0sbCkmJiF0a2UoaCxhKSYmKGhbaC5sZW5ndGhdPWEpLGQtPTE7cmV0dXJuIGh9OmZ1bmN0aW9uKGwpe3Jl''@;'; put 'put ''dHVybiBPYmplY3QobCkhPT1sP1tdOk9iamVjdC5rZXlzKGwpfSkscjBlPVhnKGZ1bmN0aW9uKGwpe3JldHVybiBudWxsPT09bD8iTnVsbCI6dm9pZCAwPT09bD8iVW5kZWZpbmVkIjpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobCkuc2xpY2UoOCwtMSl9KTtmdW5jdGlvbiBpMGUo''@;'; put 'put ''YyxsLGEsZCl7dmFyIGg9SnVlKGMpO2Z1bmN0aW9uIHYoTSxEKXtyZXR1cm4gRkcoTSxELGEuc2xpY2UoKSxkLnNsaWNlKCkpfXJldHVybiFRdWUoZnVuY3Rpb24oTSxEKXtyZXR1cm4hUXVlKHYsRCxNKX0sSnVlKGwpLGgpfWZ1bmN0aW9uIEZHKGMsbCxhLGQpe2lmKFBHKGMsbCkpcmV0dXJu''@;'; put 'put ''ITA7dmFyIGg9cjBlKGMpO2lmKGghPT1yMGUobCkpcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGNbImZhbnRhc3ktbGFuZC9lcXVhbHMiXXx8ImZ1bmN0aW9uIj09dHlwZW9mIGxbImZhbnRhc3ktbGFuZC9lcXVhbHMiXSlyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgY1siZmFudGFz''@;'; put 'put ''eS1sYW5kL2VxdWFscyJdJiZjWyJmYW50YXN5LWxhbmQvZXF1YWxzIl0obCkmJiJmdW5jdGlvbiI9PXR5cGVvZiBsWyJmYW50YXN5LWxhbmQvZXF1YWxzIl0mJmxbImZhbnRhc3ktbGFuZC9lcXVhbHMiXShjKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYy5lcXVhbHN8fCJmdW5jdGlvbiI9PXR5''@;'; put 'put ''cGVvZiBsLmVxdWFscylyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYy5lcXVhbHMmJmMuZXF1YWxzKGwpJiYiZnVuY3Rpb24iPT10eXBlb2YgbC5lcXVhbHMmJmwuZXF1YWxzKGMpO3N3aXRjaChoKXtjYXNlIkFyZ3VtZW50cyI6Y2FzZSJBcnJheSI6Y2FzZSJPYmplY3QiOmlmKCJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiBjLmNvbnN0cnVjdG9yJiYiUHJvbWlzZSI9PT1mdW5jdGlvbiBKQWUoYyl7dmFyIGw9U3RyaW5nKGMpLm1hdGNoKC9eZnVuY3Rpb24gKFx3KikvKTtyZXR1cm4gbnVsbD09bD8iIjpsWzFdfShjLmNvbnN0cnVjdG9yKSlyZXR1cm4gYz09PWw7YnJlYWs7Y2FzZSJCb29sZWFu''@;'; put 'put ''IjpjYXNlIk51bWJlciI6Y2FzZSJTdHJpbmciOmlmKHR5cGVvZiBjIT10eXBlb2YgbHx8IVBHKGMudmFsdWVPZigpLGwudmFsdWVPZigpKSlyZXR1cm4hMTticmVhaztjYXNlIkRhdGUiOmlmKCFQRyhjLnZhbHVlT2YoKSxsLnZhbHVlT2YoKSkpcmV0dXJuITE7YnJlYWs7Y2FzZSJFcnJvciI6''@;'; put 'put ''cmV0dXJuIGMubmFtZT09PWwubmFtZSYmYy5tZXNzYWdlPT09bC5tZXNzYWdlO2Nhc2UiUmVnRXhwIjppZihjLnNvdXJjZSE9PWwuc291cmNlfHxjLmdsb2JhbCE9PWwuZ2xvYmFsfHxjLmlnbm9yZUNhc2UhPT1sLmlnbm9yZUNhc2V8fGMubXVsdGlsaW5lIT09bC5tdWx0aWxpbmV8fGMuc3Rp''@;'; put 'put ''Y2t5IT09bC5zdGlja3l8fGMudW5pY29kZSE9PWwudW5pY29kZSlyZXR1cm4hMX1mb3IodmFyIGY9YS5sZW5ndGgtMTtmPj0wOyl7aWYoYVtmXT09PWMpcmV0dXJuIGRbZl09PT1sO2YtPTF9c3dpdGNoKGgpe2Nhc2UiTWFwIjpyZXR1cm4gYy5zaXplPT09bC5zaXplJiZpMGUoYy5lbnRyaWVz''@;'; put 'put ''KCksbC5lbnRyaWVzKCksYS5jb25jYXQoW2NdKSxkLmNvbmNhdChbbF0pKTtjYXNlIlNldCI6cmV0dXJuIGMuc2l6ZT09PWwuc2l6ZSYmaTBlKGMudmFsdWVzKCksbC52YWx1ZXMoKSxhLmNvbmNhdChbY10pLGQuY29uY2F0KFtsXSkpO2Nhc2UiQXJndW1lbnRzIjpjYXNlIkFycmF5IjpjYXNl''@;'; put 'put ''Ik9iamVjdCI6Y2FzZSJCb29sZWFuIjpjYXNlIk51bWJlciI6Y2FzZSJTdHJpbmciOmNhc2UiRGF0ZSI6Y2FzZSJFcnJvciI6Y2FzZSJSZWdFeHAiOmNhc2UiSW50OEFycmF5IjpjYXNlIlVpbnQ4QXJyYXkiOmNhc2UiVWludDhDbGFtcGVkQXJyYXkiOmNhc2UiSW50MTZBcnJheSI6Y2FzZSJV''@;'; put 'put ''aW50MTZBcnJheSI6Y2FzZSJJbnQzMkFycmF5IjpjYXNlIlVpbnQzMkFycmF5IjpjYXNlIkZsb2F0MzJBcnJheSI6Y2FzZSJGbG9hdDY0QXJyYXkiOmNhc2UiQXJyYXlCdWZmZXIiOmJyZWFrO2RlZmF1bHQ6cmV0dXJuITF9dmFyIHY9bjBlKGMpO2lmKHYubGVuZ3RoIT09bjBlKGwpLmxlbmd0''@;'; put 'put ''aClyZXR1cm4hMTt2YXIgTT1hLmNvbmNhdChbY10pLEQ9ZC5jb25jYXQoW2xdKTtmb3IoZj12Lmxlbmd0aC0xO2Y+PTA7KXt2YXIgVT12W2ZdO2lmKCFQUChVLGwpfHwhRkcobFtVXSxjW1VdLE0sRCkpcmV0dXJuITE7Zi09MX1yZXR1cm4hMH1jb25zdCBha2U9a18oZnVuY3Rpb24obCxhKXty''@;'; put 'put ''ZXR1cm4gRkcobCxhLFtdLFtdKX0pLGEwZT1YZyhmdW5jdGlvbihsKXtyZXR1cm4gbnVsbCE9bCYmYWtlKGwscUFlKGwpKX0pO2Z1bmN0aW9uIGpFKGMpe3JldHVybiBudWxsPT1jfWZ1bmN0aW9uIHpFKGMpe3JldHVybiBqRShjKXx8YTBlKGMpfWZ1bmN0aW9uIEhHKGMpe3JldHVybiAkdWUo''@;'; put 'put ''U3RyaW5nLGMpfWZ1bmN0aW9uIGwwZShjLGwpe3JldHVybiBjIT09bH1mdW5jdGlvbiBoMGUoYz13aW5kb3cpe3JldHVybiFqRShjKX1jb25zdCBna2U9TnVtYmVyLmlzSW50ZWdlcnx8ZnVuY3Rpb24obCl7cmV0dXJuKDB8bCk9PT1sfSx2a2U9a18oZnVuY3Rpb24obCxhKXt2YXIgZD1sPDA/''@;'; put 'put ''YS5sZW5ndGgrbDpsO3JldHVybiBxdWUoYSk/YS5jaGFyQXQoZCk6YVtkXX0pLGJrZT1rXyhmdW5jdGlvbihsLGEpe3JldHVybiBsLm1hcChmdW5jdGlvbihkKXtmb3IodmFyIHYsaD1hLGY9MDtmPGQubGVuZ3RoOyl7aWYobnVsbD09aClyZXR1cm47aD1na2Uodj1kW2ZdKT92a2UodixoKTpo''@;'; put 'put ''W3ZdLGYrPTF9cmV0dXJuIGh9KX0pLHdrZT1rXyhmdW5jdGlvbihsLGEpe3JldHVybiBia2UoW2xdLGEpWzBdfSksU2tlPUd1ZSgyLChjLGwpPT52b2lkIDAhPT13a2UoYyxsKSksZjBlPVNrZSh7IkBAZnVuY3Rpb25hbC9wbGFjZWhvbGRlciI6ITB9LHdpbmRvdyk7bGV0IEhQLHAwZSxORyxW''@;'; put 'put ''RztmdW5jdGlvbiBnMGUoYz0hMCl7aWYoIWN8fCFIUCl7Y29uc3QgbD1kb2N1bWVudCYmZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiW25nLXZlcnNpb25dIik7SFA9bD8iIitsLmdldEF0dHJpYnV0ZSgibmctdmVyc2lvbiIpOnZvaWQgMH1yZXR1cm4gSFB9ZnVuY3Rpb24geGtlKGM9ITApe3Jl''@;'; put 'put ''dHVybiBjJiZIUHx8KHAwZT13aW5kb3c/LmFuZ3VsYXI/LnZlcnNpb24/LmZ1bGwpLHAwZX1mdW5jdGlvbiBtMGUoYz0hMCl7cmV0dXJuIGMmJk5HfHwoTkc9d2luZG93Py5DRFM/Ll9yZWFjdD8udmVyc2lvbj93aW5kb3cuQ0RTLl9yZWFjdC52ZXJzaW9uOmRvY3VtZW50LnF1ZXJ5U2VsZWN0''@;'; put 'put ''b3IoIltkYXRhLXJlYWN0cm9vdF0sIFtkYXRhLXJlYWN0aWRdIik/InVua25vd24gdmVyc2lvbiI6dm9pZCAwKSxOR31mdW5jdGlvbiB2MGUoYz0hMCl7aWYoIWN8fCFWRyl7Y29uc3QgbD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIqIik7bGV0IGE7Zm9yKGxldCBkPTA7ZDxsLmxlbmd0''@;'; put 'put ''aDtkKyspaWYobFtkXS5fX3Z1ZV9fKXthPWxbZF07YnJlYWt9Vkc9YT8idW5rbm93biB2ZXJzaW9uIjp2b2lkIDB9cmV0dXJuIFZHfWZ1bmN0aW9uIFE3KGMpe3JldHVybiBjLnJlcGxhY2UoL1tBLVpdL2csbD0+Ii0iK2wudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gXzBlKGMpe3JldHVybiBj''@;'; put 'put ''LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Muc2xpY2UoMSl9Y29uc3QgSWtlPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe2lmKHRoaXMuc3VwcG9ydHM9e2pzOiEwfSwhZG9jdW1lbnQuYm9keS5oYXNBdHRyaWJ1dGUoImNkcy1zdXBwb3J0cyIpfHwibm8tanMiPT09ZG9jdW1lbnQuYm9keS5n''@;'; put 'put ''ZXRBdHRyaWJ1dGUoImNkcy1zdXBwb3J0cyIpKXtjb25zdCBjPVE3KE9iamVjdC5rZXlzKHRoaXMuc3VwcG9ydHMpLnJlZHVjZSgobCxhKT0+YCR7bH0gJHt0aGlzLnN1cHBvcnRzW2FdP2E6Im5vLSIrYX1gLCIiKSkudHJpbSgpO2RvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKCJjZHMtc3Vw''@;'; put 'put ''cG9ydHMiLGMpfX19O2NsYXNzIFVFe3N0YXRpYyBsb2coLi4ubCl7ekcoKSYmakcoKSYmY29uc29sZS5sb2coLi4ubCl9c3RhdGljIHdhcm4oLi4ubCl7ekcoKSYmakcoKSYmY29uc29sZS53YXJuKC4uLmwpfXN0YXRpYyBlcnJvciguLi5sKXt6RygpJiZqRygpJiZjb25zb2xlLmVycm9yKC4u''@;'; put 'put ''LmwpfX1mdW5jdGlvbiBqRygpe3JldHVybiFmMGUoWyJqYXNtaW5lIl0pfWZ1bmN0aW9uIHpHKCl7cmV0dXJuIXdpbmRvdy5DRFMuZW52aXJvbm1lbnQucHJvZHVjdGlvbn1mdW5jdGlvbiBTMGUoKXtoMGUoKSYmKHdpbmRvdy5DRFM9d2luZG93LkNEU3x8e192ZXJzaW9uOltdLF9yZWFjdDp7''@;'; put 'put ''dmVyc2lvbjp2b2lkIDB9LF9zdXBwb3J0czpJa2Uuc3VwcG9ydHMsX2lzU3RhdGVQcm94aWVkOiExLF9zdGF0ZTp7Zm9jdXNUcmFwSXRlbXM6W10sbGF5ZXJFbGVtZW50czpbXSxpMThuUmVnaXN0cnk6e30sZWxlbWVudFJlZ2lzdHJ5Ont9LGljb25SZWdpc3RyeTp7fSxtb3Rpb25SZWdpc3Ry''@;'; put 'put ''eTp7fX0sZW52aXJvbm1lbnQ6e3Byb2R1Y3Rpb246ITF9LGdldERldGFpbHM6TTBlLGxvZ0RldGFpbHM6UmtlfSxmdW5jdGlvbigpe2NvbnN0IGM9IjYuMTYuMSI7d2luZG93LkNEUy5fdmVyc2lvbi5pbmRleE9mKGMpPDAmJih3aW5kb3cuQ0RTLl92ZXJzaW9uLnB1c2goYyksZG9jdW1lbnQu''@;'; put 'put ''cXVlcnlTZWxlY3RvcigiYm9keSIpPy5zZXRBdHRyaWJ1dGUoImNkcy12ZXJzaW9uIix3aW5kb3cuQ0RTLl92ZXJzaW9uLmpvaW4oIiAiKSkpLHdpbmRvdy5DRFMuX3ZlcnNpb24ubGVuZ3RoPjEmJlVFLndhcm4oIlJ1bm5pbmcgbW9yZSB0aGFuIG9uZSB2ZXJzaW9uIG9mIENsYXJpdHkgY2Fu''@;'; put 'put ''IGNhdXNlIHVuZXhwZWN0ZWQgaXNzdWVzLiBQbGVhc2UgZW5zdXJlIG9ubHkgb25lIHZlcnNpb24gaXMgbG9hZGVkLiIpfSgpLHdpbmRvdy5DRFMuX2lzU3RhdGVQcm94aWVkfHwod2luZG93LkNEUy5faXNTdGF0ZVByb3hpZWQ9ITAsd2luZG93LkNEUy5fc3RhdGU9bmV3IFByb3h5KHdpbmRv''@;'; put 'put ''dy5DRFMuX3N0YXRlLHtzZXQ6KGMsbCxhKT0+e2NvbnN0IGQ9e2tleTpsLHByZXY6d2luZG93LkNEUy5fc3RhdGVbbF0sY3VycmVudDphfTtyZXR1cm4gY1tsXT1hLGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJDRFNfU1RBVEVfVVBEQVRFIix7ZGV0YWlsOmR9KSks''@;'; put 'put ''ITB9fSkpKX1mdW5jdGlvbiBNMGUoKXtyZXR1cm57dmVyc2lvbnM6d2luZG93LkNEUy5fdmVyc2lvbixlbnZpcm9ubWVudDp3aW5kb3cuQ0RTLmVudmlyb25tZW50LHVzZXJBZ2VudDpuYXZpZ2F0b3IudXNlckFnZW50LHN1cHBvcnRzOndpbmRvdy5DRFMuX3N1cHBvcnRzLGFuZ3VsYXJWZXJz''@;'; put 'put ''aW9uOmcwZSghMSksYW5ndWxhckpTVmVyc2lvbjp4a2UoITEpLHJlYWN0VmVyc2lvbjptMGUoITEpLHZ1ZVZlcnNpb246djBlKCExKSxzdGF0ZTp7Li4ud2luZG93LkNEUy5fc3RhdGUsaWNvblJlZ2lzdHJ5Ok9iamVjdC5rZXlzKHdpbmRvdy5DRFMuX3N0YXRlLmljb25SZWdpc3RyeSksbW90''@;'; put 'put ''aW9uUmVnaXN0cnk6T2JqZWN0LmtleXMod2luZG93LkNEUy5fc3RhdGUubW90aW9uUmVnaXN0cnkpLGZvY3VzVHJhcFJlZ2lzdHJ5Ok9iamVjdC5rZXlzKHdpbmRvdy5DRFMuX3N0YXRlLmZvY3VzVHJhcEl0ZW1zLm1hcChjPT5jLmZvY3VzVHJhcElkKSl9fX1mdW5jdGlvbiBSa2UoKXtVRS5s''@;'; put 'put ''b2coSlNPTi5zdHJpbmdpZnkoTTBlKCksbnVsbCwyKSl9Y29uc3QgTGtlPUd1ZSgzLChjLGwsYSk9PnshZnVuY3Rpb24gTWtlKGMsbCl7cmV0dXJuIGx8fChsPXdpbmRvdyYmd2luZG93LmN1c3RvbUVsZW1lbnRzKSwhbHx8ISFsLmdldChjKX0oYyl8fGZ1bmN0aW9uIEVrZSgpe3JldHVybiB3''@;'; put 'put ''aW5kb3c/LmxvY2F0aW9uPy5ocmVmPy5pbmNsdWRlcygibG9jYWxob3N0OjYwMDYiKX0oKT8oYS5kZWZpbmUoYyxsKSxTMGUoKSx3aW5kb3cmJiFPYmplY3Qua2V5cyh3aW5kb3cuQ0RTLl9zdGF0ZS5lbGVtZW50UmVnaXN0cnkpLnNvbWUoZD0+ZD09PWMpJiYod2luZG93LkNEUy5fc3RhdGUu''@;'; put 'put ''ZWxlbWVudFJlZ2lzdHJ5PXsuLi53aW5kb3cuQ0RTLl9zdGF0ZS5lbGVtZW50UmVnaXN0cnksW2NdOnt9fSkpOlVFLndhcm4oYysiIGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZCIpfSk7ZnVuY3Rpb24gUjMoYyxsLGEsZCl7dmFyIHYsaD1hcmd1bWVudHMubGVuZ3RoLGY9aDwzP2w6bnVs''@;'; put 'put ''bD09PWQ/ZD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGwsYSk6ZDtpZigib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKWY9UmVmbGVjdC5kZWNvcmF0ZShjLGwsYSxkKTtlbHNlIGZvcih2YXIgTT1jLmxlbmd0aC0x''@;'; put 'put ''O00+PTA7TS0tKSh2PWNbTV0pJiYoZj0oaDwzP3YoZik6aD4zP3YobCxhLGYpOnYobCxhKSl8fGYpO3JldHVybiBoPjMmJmYmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGEsZiksZn1mdW5jdGlvbiBxbShjKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIHFtPyh0aGlzLnY9Yyx0aGlzKTpuZXcg''@;'; put 'put ''cW0oYyl9ZnVuY3Rpb24gQTBlKGMpe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgYSxsPWNbU3ltYm9sLmFzeW5jSXRlcmF0b3JdO3JldHVybiBsP2wuY2FsbChjKTooYz1mdW5j''@;'; put 'put ''dGlvbiBZRyhjKXt2YXIgbD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3IsYT1sJiZjW2xdLGQ9MDtpZihhKXJldHVybiBhLmNhbGwoYyk7aWYoYyYmIm51bWJlciI9PXR5cGVvZiBjLmxlbmd0aClyZXR1cm57bmV4dDpmdW5jdGlvbigpe3JldHVybiBjJiZkPj1j''@;'; put 'put ''Lmxlbmd0aCYmKGM9dm9pZCAwKSx7dmFsdWU6YyYmY1tkKytdLGRvbmU6IWN9fX07dGhyb3cgbmV3IFR5cGVFcnJvcihsPyJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLiI6IlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKX0oYyksYT17fSxkKCJuZXh0IiksZCgidGhyb3ciKSxkKCJy''@;'; put 'put ''ZXR1cm4iKSxhW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxhKTtmdW5jdGlvbiBkKGYpe2FbZl09Y1tmXSYmZnVuY3Rpb24odil7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKE0sRCl7IWZ1bmN0aW9uIGgoZix2LE0sRCl7UHJvbWlzZS5yZXNvbHZl''@;'; put 'put ''KEQpLnRoZW4oZnVuY3Rpb24oVSl7Zih7dmFsdWU6VSxkb25lOk19KX0sdil9KE0sRCwodj1jW2ZdKHYpKS5kb25lLHYudmFsdWUpfSl9fX0iZnVuY3Rpb24iPT10eXBlb2YgU3VwcHJlc3NlZEVycm9yJiZTdXBwcmVzc2VkRXJyb3I7bGV0IGswZT0hMTtmdW5jdGlvbiBvRGUoYyl7aWYoKGM9''@;'; put 'put ''TWF0aC50cnVuYyhjKXx8MCk8MCYmKGMrPXRoaXMubGVuZ3RoKSwhKGM8MHx8Yz49dGhpcy5sZW5ndGgpKXJldHVybiB0aGlzW2NdfWlmKCFrMGUpe2swZT0hMDtjb25zdCBjPVJlZmxlY3QuZ2V0UHJvdG90eXBlT2YoSW50OEFycmF5KTtmb3IoY29uc3QgbCBvZltBcnJheSxTdHJpbmcsY10p''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KGwucHJvdG90eXBlLCJhdCIse3ZhbHVlOm9EZSx3cml0YWJsZTohMCxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pfWxldCBEMGU9ITEsSTBlPSExO2Z1bmN0aW9uIFIwZShjLGwsYSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsYSx7Y29uZmln''@;'; put 'put ''dXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKGwpP3RoaXMuZ2V0QXR0cmlidXRlKGwpOm51bGx9LHNldDpmdW5jdGlvbihkKXtudWxsIT09ZD90aGlzLnNldEF0dHJpYnV0ZShsLGQpOnRoaXMucmVtb3ZlQXR0cmlidXRlKGwp''@;'; put 'put ''fX0pfUQwZXx8RWxlbWVudC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoInJvbGUiKXx8KFIwZShFbGVtZW50LnByb3RvdHlwZSwicm9sZSIsInJvbGUiKSxEMGU9ITApLEkwZXx8RWxlbWVudC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoImFyaWFMYWJlbCIpfHwoSTBlPSEwLFsiQWN0aXZl''@;'; put 'put ''RGVzY2VuZGFudCIsIkF0b21pYyIsIkF1dG9Db21wbGV0ZSIsIkJ1c3kiLCJDaGVja2VkIiwiQ29sQ291bnQiLCJDb2xJbmRleCIsIkNvbFNwYW4iLCJDb250cm9scyIsIkN1cnJlbnQiLCJEZXNjcmliZWRCeSIsIkRldGFpbHMiLCJEaXNhYmxlZCIsIkVycm9yTWVzc2FnZSIsIkV4cGFuZGVk''@;'; put 'put ''IiwiRmxvd1RvIiwiSGFzUG9wdXAiLCJIaWRkZW4iLCJJbnZhbGlkIiwiS2V5U2hvcnRjdXRzIiwiTGFiZWwiLCJMYWJlbGxlZEJ5IiwiTGV2ZWwiLCJMaXZlIiwiTW9kYWwiLCJNdWx0aUxpbmUiLCJNdWx0aVNlbGVjdGFibGUiLCJPcmllbnRhdGlvbiIsIk93bnMiLCJQbGFjZWhvbGRlciIs''@;'; put 'put ''IlBvc0luU2V0IiwiUHJlc3NlZCIsIlJlYWRPbmx5IiwiUmVsZXZhbnQiLCJSZXF1aXJlZCIsIlJvbGVEZXNjcmlwdGlvbiIsIlJvd0NvdW50IiwiUm93SW5kZXgiLCJSb3dTcGFuIiwiU2VsZWN0ZWQiLCJTZXRTaXplIiwiU29ydCIsIlZhbHVlTWF4IiwiVmFsdWVNaW4iLCJWYWx1ZU5vdyIs''@;'; put 'put ''IlZhbHVlVGV4dCJdLmZvckVhY2goYz0+UjBlKEVsZW1lbnQucHJvdG90eXBlLCJhcmlhLSIrYy50b0xvd2VyQ2FzZSgpLCJhcmlhIitjKSkpO2NvbnN0IE5QPXdpbmRvdywkRz1OUC5TaGFkb3dSb290JiYodm9pZCAwPT09TlAuU2hhZHlDU1N8fE5QLlNoYWR5Q1NTLm5hdGl2ZVNoYWRvdykm''@;'; put 'put ''JiJhZG9wdGVkU3R5bGVTaGVldHMiaW4gRG9jdW1lbnQucHJvdG90eXBlJiYicmVwbGFjZSJpbiBDU1NTdHlsZVNoZWV0LnByb3RvdHlwZSxLRz1TeW1ib2woKSxMMGU9bmV3IFdlYWtNYXA7Y2xhc3MgTzBle2NvbnN0cnVjdG9yKGwsYSxkKXtpZih0aGlzLl8kY3NzUmVzdWx0JD0hMCxkIT09''@;'; put 'put ''S0cpdGhyb3cgRXJyb3IoIkNTU1Jlc3VsdCBpcyBub3QgY29uc3RydWN0YWJsZS4gVXNlIGB1bnNhZmVDU1NgIG9yIGBjc3NgIGluc3RlYWQuIik7dGhpcy5jc3NUZXh0PWwsdGhpcy50PWF9Z2V0IHN0eWxlU2hlZXQoKXtsZXQgbD10aGlzLm87Y29uc3QgYT10aGlzLnQ7aWYoJEcmJnZvaWQg''@;'; put 'put ''MD09PWwpe2NvbnN0IGQ9dm9pZCAwIT09YSYmMT09PWEubGVuZ3RoO2QmJihsPUwwZS5nZXQoYSkpLHZvaWQgMD09PWwmJigodGhpcy5vPWw9bmV3IENTU1N0eWxlU2hlZXQpLnJlcGxhY2VTeW5jKHRoaXMuY3NzVGV4dCksZCYmTDBlLnNldChhLGwpKX1yZXR1cm4gbH10b1N0cmluZygpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmNzc1RleHR9fWNvbnN0IFAwZT0oYywuLi5sKT0+e2NvbnN0IGE9MT09PWMubGVuZ3RoP2NbMF06bC5yZWR1Y2UoKGQsaCxmKT0+ZCsodj0+e2lmKCEwPT09di5fJGNzc1Jlc3VsdCQpcmV0dXJuIHYuY3NzVGV4dDtpZigibnVtYmVyIj09dHlwZW9mIHYpcmV0dXJuIHY7dGhy''@;'; put 'put ''b3cgRXJyb3IoIlZhbHVlIHBhc3NlZCB0byAnY3NzJyBmdW5jdGlvbiBtdXN0IGJlIGEgJ2NzcycgZnVuY3Rpb24gcmVzdWx0OiAiK3YrIi4gVXNlICd1bnNhZmVDU1MnIHRvIHBhc3Mgbm9uLWxpdGVyYWwgdmFsdWVzLCBidXQgdGFrZSBjYXJlIHRvIGVuc3VyZSBwYWdlIHNlY3VyaXR5LiIp''@;'; put 'put ''fSkoaCkrY1tmKzFdLGNbMF0pO3JldHVybiBuZXcgTzBlKGEsYyxLRyl9LEYwZT0kRz9jPT5jOmM9PmMgaW5zdGFuY2VvZiBDU1NTdHlsZVNoZWV0PyhsPT57bGV0IGE9IiI7Zm9yKGNvbnN0IGQgb2YgbC5jc3NSdWxlcylhKz1kLmNzc1RleHQ7cmV0dXJuKGM9Pm5ldyBPMGUoInN0cmluZyI9''@;'; put 'put ''PXR5cGVvZiBjP2M6YysiIix2b2lkIDAsS0cpKShhKX0pKGMpOmM7dmFyIFhHO2NvbnN0IFZQPXdpbmRvdyxIMGU9VlAudHJ1c3RlZFR5cGVzLGNEZT1IMGU/SDBlLmVtcHR5U2NyaXB0OiIiLE4wZT1WUC5yZWFjdGl2ZUVsZW1lbnRQb2x5ZmlsbFN1cHBvcnQscUc9e3RvQXR0cmlidXRlKGMs''@;'; put 'put ''bCl7c3dpdGNoKGwpe2Nhc2UgQm9vbGVhbjpjPWM/Y0RlOm51bGw7YnJlYWs7Y2FzZSBPYmplY3Q6Y2FzZSBBcnJheTpjPW51bGw9PWM/YzpKU09OLnN0cmluZ2lmeShjKX1yZXR1cm4gY30sZnJvbUF0dHJpYnV0ZShjLGwpe2xldCBhPWM7c3dpdGNoKGwpe2Nhc2UgQm9vbGVhbjphPW51bGwh''@;'; put 'put ''PT1jO2JyZWFrO2Nhc2UgTnVtYmVyOmE9bnVsbD09PWM/bnVsbDpOdW1iZXIoYyk7YnJlYWs7Y2FzZSBPYmplY3Q6Y2FzZSBBcnJheTp0cnl7YT1KU09OLnBhcnNlKGMpfWNhdGNoe2E9bnVsbH19cmV0dXJuIGF9fSxWMGU9KGMsbCk9PmwhPT1jJiYobD09bHx8Yz09YyksSkc9e2F0dHJpYnV0''@;'; put 'put ''ZTohMCx0eXBlOlN0cmluZyxjb252ZXJ0ZXI6cUcscmVmbGVjdDohMSxoYXNDaGFuZ2VkOlYwZX0sUUc9ImZpbmFsaXplZCI7Y2xhc3MgRF8gZXh0ZW5kcyBIVE1MRWxlbWVudHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fJEVpPW5ldyBNYXAsdGhpcy5pc1VwZGF0ZVBlbmRpbmc9ITEs''@;'; put 'put ''dGhpcy5oYXNVcGRhdGVkPSExLHRoaXMuXyRFbD1udWxsLHRoaXMuXyRFdSgpfXN0YXRpYyBhZGRJbml0aWFsaXplcihsKXt2YXIgYTt0aGlzLmZpbmFsaXplKCksKG51bGwhPT0oYT10aGlzLmgpJiZ2b2lkIDAhPT1hP2E6dGhpcy5oPVtdKS5wdXNoKGwpfXN0YXRpYyBnZXQgb2JzZXJ2ZWRB''@;'; put 'put ''dHRyaWJ1dGVzKCl7dGhpcy5maW5hbGl6ZSgpO2NvbnN0IGw9W107cmV0dXJuIHRoaXMuZWxlbWVudFByb3BlcnRpZXMuZm9yRWFjaCgoYSxkKT0+e2NvbnN0IGg9dGhpcy5fJEVwKGQsYSk7dm9pZCAwIT09aCYmKHRoaXMuXyRFdi5zZXQoaCxkKSxsLnB1c2goaCkpfSksbH1zdGF0aWMgY3Jl''@;'; put 'put ''YXRlUHJvcGVydHkobCxhPUpHKXtpZihhLnN0YXRlJiYoYS5hdHRyaWJ1dGU9ITEpLHRoaXMuZmluYWxpemUoKSx0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzLnNldChsLGEpLCFhLm5vQWNjZXNzb3ImJiF0aGlzLnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShsKSl7Y29uc3QgZD0ic3ltYm9sIj09''@;'; put 'put ''dHlwZW9mIGw/U3ltYm9sKCk6Il9fIitsLGg9dGhpcy5nZXRQcm9wZXJ0eURlc2NyaXB0b3IobCxkLGEpO3ZvaWQgMCE9PWgmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLnByb3RvdHlwZSxsLGgpfX1zdGF0aWMgZ2V0UHJvcGVydHlEZXNjcmlwdG9yKGwsYSxkKXtyZXR1cm57Z2V0KCl7''@;'; put 'put ''cmV0dXJuIHRoaXNbYV19LHNldChoKXtjb25zdCBmPXRoaXNbbF07dGhpc1thXT1oLHRoaXMucmVxdWVzdFVwZGF0ZShsLGYsZCl9LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfX1zdGF0aWMgZ2V0UHJvcGVydHlPcHRpb25zKGwpe3JldHVybiB0aGlzLmVsZW1lbnRQcm9wZXJ0aWVz''@;'; put 'put ''LmdldChsKXx8Skd9c3RhdGljIGZpbmFsaXplKCl7aWYodGhpcy5oYXNPd25Qcm9wZXJ0eShRRykpcmV0dXJuITE7dGhpc1tRR109ITA7Y29uc3QgbD1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7aWYobC5maW5hbGl6ZSgpLHZvaWQgMCE9PWwuaCYmKHRoaXMuaD1bLi4ubC5oXSksdGhp''@;'; put 'put ''cy5lbGVtZW50UHJvcGVydGllcz1uZXcgTWFwKGwuZWxlbWVudFByb3BlcnRpZXMpLHRoaXMuXyRFdj1uZXcgTWFwLHRoaXMuaGFzT3duUHJvcGVydHkoInByb3BlcnRpZXMiKSl7Y29uc3QgYT10aGlzLnByb3BlcnRpZXMsZD1bLi4uT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSksLi4u''@;'; put 'put ''T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhhKV07Zm9yKGNvbnN0IGggb2YgZCl0aGlzLmNyZWF0ZVByb3BlcnR5KGgsYVtoXSl9cmV0dXJuIHRoaXMuZWxlbWVudFN0eWxlcz10aGlzLmZpbmFsaXplU3R5bGVzKHRoaXMuc3R5bGVzKSwhMH1zdGF0aWMgZmluYWxpemVTdHlsZXMobCl7''@;'; put 'put ''Y29uc3QgYT1bXTtpZihBcnJheS5pc0FycmF5KGwpKXtjb25zdCBkPW5ldyBTZXQobC5mbGF0KDEvMCkucmV2ZXJzZSgpKTtmb3IoY29uc3QgaCBvZiBkKWEudW5zaGlmdChGMGUoaCkpfWVsc2Ugdm9pZCAwIT09bCYmYS5wdXNoKEYwZShsKSk7cmV0dXJuIGF9c3RhdGljIF8kRXAobCxhKXtj''@;'; put 'put ''b25zdCBkPWEuYXR0cmlidXRlO3JldHVybiExPT09ZD92b2lkIDA6InN0cmluZyI9PXR5cGVvZiBkP2Q6InN0cmluZyI9PXR5cGVvZiBsP2wudG9Mb3dlckNhc2UoKTp2b2lkIDB9XyRFdSgpe3ZhciBsO3RoaXMuXyRFXz1uZXcgUHJvbWlzZShhPT50aGlzLmVuYWJsZVVwZGF0aW5nPWEpLHRo''@;'; put 'put ''aXMuXyRBTD1uZXcgTWFwLHRoaXMuXyRFZygpLHRoaXMucmVxdWVzdFVwZGF0ZSgpLG51bGw9PT0obD10aGlzLmNvbnN0cnVjdG9yLmgpfHx2b2lkIDA9PT1sfHxsLmZvckVhY2goYT0+YSh0aGlzKSl9YWRkQ29udHJvbGxlcihsKXt2YXIgYSxkOyhudWxsIT09KGE9dGhpcy5fJEVTKSYmdm9p''@;'; put 'put ''ZCAwIT09YT9hOnRoaXMuXyRFUz1bXSkucHVzaChsKSx2b2lkIDAhPT10aGlzLnJlbmRlclJvb3QmJnRoaXMuaXNDb25uZWN0ZWQmJihudWxsPT09KGQ9bC5ob3N0Q29ubmVjdGVkKXx8dm9pZCAwPT09ZHx8ZC5jYWxsKGwpKX1yZW1vdmVDb250cm9sbGVyKGwpe3ZhciBhO251bGw9PT0oYT10''@;'; put 'put ''aGlzLl8kRVMpfHx2b2lkIDA9PT1hfHxhLnNwbGljZSh0aGlzLl8kRVMuaW5kZXhPZihsKT4+PjAsMSl9XyRFZygpe3RoaXMuY29uc3RydWN0b3IuZWxlbWVudFByb3BlcnRpZXMuZm9yRWFjaCgobCxhKT0+e3RoaXMuaGFzT3duUHJvcGVydHkoYSkmJih0aGlzLl8kRWkuc2V0KGEsdGhpc1th''@;'; put 'put ''XSksZGVsZXRlIHRoaXNbYV0pfSl9Y3JlYXRlUmVuZGVyUm9vdCgpe3ZhciBsO2NvbnN0IGE9bnVsbCE9PShsPXRoaXMuc2hhZG93Um9vdCkmJnZvaWQgMCE9PWw/bDp0aGlzLmF0dGFjaFNoYWRvdyh0aGlzLmNvbnN0cnVjdG9yLnNoYWRvd1Jvb3RPcHRpb25zKTtyZXR1cm4oKGMsbCk9Pnsk''@;'; put 'put ''Rz9jLmFkb3B0ZWRTdHlsZVNoZWV0cz1sLm1hcChhPT5hIGluc3RhbmNlb2YgQ1NTU3R5bGVTaGVldD9hOmEuc3R5bGVTaGVldCk6bC5mb3JFYWNoKGE9Pntjb25zdCBkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIiksaD1OUC5saXROb25jZTt2b2lkIDAhPT1oJiZkLnNldEF0dHJp''@;'; put 'put ''YnV0ZSgibm9uY2UiLGgpLGQudGV4dENvbnRlbnQ9YS5jc3NUZXh0LGMuYXBwZW5kQ2hpbGQoZCl9KX0pKGEsdGhpcy5jb25zdHJ1Y3Rvci5lbGVtZW50U3R5bGVzKSxhfWNvbm5lY3RlZENhbGxiYWNrKCl7dmFyIGw7dm9pZCAwPT09dGhpcy5yZW5kZXJSb290JiYodGhpcy5yZW5kZXJSb290''@;'; put 'put ''PXRoaXMuY3JlYXRlUmVuZGVyUm9vdCgpKSx0aGlzLmVuYWJsZVVwZGF0aW5nKCEwKSxudWxsPT09KGw9dGhpcy5fJEVTKXx8dm9pZCAwPT09bHx8bC5mb3JFYWNoKGE9Pnt2YXIgZDtyZXR1cm4gbnVsbD09PShkPWEuaG9zdENvbm5lY3RlZCl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuY2FsbChh''@;'; put 'put ''KX0pfWVuYWJsZVVwZGF0aW5nKGwpe31kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3ZhciBsO251bGw9PT0obD10aGlzLl8kRVMpfHx2b2lkIDA9PT1sfHxsLmZvckVhY2goYT0+e3ZhciBkO3JldHVybiBudWxsPT09KGQ9YS5ob3N0RGlzY29ubmVjdGVkKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5j''@;'; put 'put ''YWxsKGEpfSl9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKGwsYSxkKXt0aGlzLl8kQUsobCxkKX1fJEVPKGwsYSxkPUpHKXt2YXIgaDtjb25zdCBmPXRoaXMuY29uc3RydWN0b3IuXyRFcChsLGQpO2lmKHZvaWQgMCE9PWYmJiEwPT09ZC5yZWZsZWN0KXtjb25zdCB2PSh2b2lkIDAhPT0obnVs''@;'; put 'put ''bD09PShoPWQuY29udmVydGVyKXx8dm9pZCAwPT09aD92b2lkIDA6aC50b0F0dHJpYnV0ZSk/ZC5jb252ZXJ0ZXI6cUcpLnRvQXR0cmlidXRlKGEsZC50eXBlKTt0aGlzLl8kRWw9bCxudWxsPT12P3RoaXMucmVtb3ZlQXR0cmlidXRlKGYpOnRoaXMuc2V0QXR0cmlidXRlKGYsdiksdGhpcy5f''@;'; put 'put ''JEVsPW51bGx9fV8kQUsobCxhKXt2YXIgZDtjb25zdCBoPXRoaXMuY29uc3RydWN0b3IsZj1oLl8kRXYuZ2V0KGwpO2lmKHZvaWQgMCE9PWYmJnRoaXMuXyRFbCE9PWYpe2NvbnN0IHY9aC5nZXRQcm9wZXJ0eU9wdGlvbnMoZiksTT0iZnVuY3Rpb24iPT10eXBlb2Ygdi5jb252ZXJ0ZXI/e2Zy''@;'; put 'put ''b21BdHRyaWJ1dGU6di5jb252ZXJ0ZXJ9OnZvaWQgMCE9PShudWxsPT09KGQ9di5jb252ZXJ0ZXIpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmZyb21BdHRyaWJ1dGUpP3YuY29udmVydGVyOnFHO3RoaXMuXyRFbD1mLHRoaXNbZl09TS5mcm9tQXR0cmlidXRlKGEsdi50eXBlKSx0aGlzLl8kRWw9''@;'; put 'put ''bnVsbH19cmVxdWVzdFVwZGF0ZShsLGEsZCl7bGV0IGg9ITA7dm9pZCAwIT09bCYmKCgoZD1kfHx0aGlzLmNvbnN0cnVjdG9yLmdldFByb3BlcnR5T3B0aW9ucyhsKSkuaGFzQ2hhbmdlZHx8VjBlKSh0aGlzW2xdLGEpPyh0aGlzLl8kQUwuaGFzKGwpfHx0aGlzLl8kQUwuc2V0KGwsYSksITA9''@;'; put 'put ''PT1kLnJlZmxlY3QmJnRoaXMuXyRFbCE9PWwmJih2b2lkIDA9PT10aGlzLl8kRUMmJih0aGlzLl8kRUM9bmV3IE1hcCksdGhpcy5fJEVDLnNldChsLGQpKSk6aD0hMSksIXRoaXMuaXNVcGRhdGVQZW5kaW5nJiZoJiYodGhpcy5fJEVfPXRoaXMuXyRFaigpKX1fJEVqKCl7dmFyIGw9dGhpczty''@;'; put 'put ''ZXR1cm4gZWUoZnVuY3Rpb24qKCl7bC5pc1VwZGF0ZVBlbmRpbmc9ITA7dHJ5e3lpZWxkIGwuXyRFX31jYXRjaChkKXtQcm9taXNlLnJlamVjdChkKX1jb25zdCBhPWwuc2NoZWR1bGVVcGRhdGUoKTtyZXR1cm4gbnVsbCE9YSYmKHlpZWxkIGEpLCFsLmlzVXBkYXRlUGVuZGluZ30pKCl9c2No''@;'; put 'put ''ZWR1bGVVcGRhdGUoKXtyZXR1cm4gdGhpcy5wZXJmb3JtVXBkYXRlKCl9cGVyZm9ybVVwZGF0ZSgpe3ZhciBsO2lmKCF0aGlzLmlzVXBkYXRlUGVuZGluZylyZXR1cm47dGhpcy5fJEVpJiYodGhpcy5fJEVpLmZvckVhY2goKGgsZik9PnRoaXNbZl09aCksdGhpcy5fJEVpPXZvaWQgMCk7bGV0''@;'; put 'put ''IGE9ITE7Y29uc3QgZD10aGlzLl8kQUw7dHJ5e2E9dGhpcy5zaG91bGRVcGRhdGUoZCksYT8odGhpcy53aWxsVXBkYXRlKGQpLG51bGw9PT0obD10aGlzLl8kRVMpfHx2b2lkIDA9PT1sfHxsLmZvckVhY2goaD0+e3ZhciBmO3JldHVybiBudWxsPT09KGY9aC5ob3N0VXBkYXRlKXx8dm9pZCAw''@;'; put 'put ''PT09Zj92b2lkIDA6Zi5jYWxsKGgpfSksdGhpcy51cGRhdGUoZCkpOnRoaXMuXyRFaygpfWNhdGNoKGgpe3Rocm93IGE9ITEsdGhpcy5fJEVrKCksaH1hJiZ0aGlzLl8kQUUoZCl9d2lsbFVwZGF0ZShsKXt9XyRBRShsKXt2YXIgYTtudWxsPT09KGE9dGhpcy5fJEVTKXx8dm9pZCAwPT09YXx8''@;'; put 'put ''YS5mb3JFYWNoKGQ9Pnt2YXIgaDtyZXR1cm4gbnVsbD09PShoPWQuaG9zdFVwZGF0ZWQpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmNhbGwoZCl9KSx0aGlzLmhhc1VwZGF0ZWR8fCh0aGlzLmhhc1VwZGF0ZWQ9ITAsdGhpcy5maXJzdFVwZGF0ZWQobCkpLHRoaXMudXBkYXRlZChsKX1fJEVrKCl7''@;'; put 'put ''dGhpcy5fJEFMPW5ldyBNYXAsdGhpcy5pc1VwZGF0ZVBlbmRpbmc9ITF9Z2V0IHVwZGF0ZUNvbXBsZXRlKCl7cmV0dXJuIHRoaXMuZ2V0VXBkYXRlQ29tcGxldGUoKX1nZXRVcGRhdGVDb21wbGV0ZSgpe3JldHVybiB0aGlzLl8kRV99c2hvdWxkVXBkYXRlKGwpe3JldHVybiEwfXVwZGF0ZShs''@;'; put 'put ''KXt2b2lkIDAhPT10aGlzLl8kRUMmJih0aGlzLl8kRUMuZm9yRWFjaCgoYSxkKT0+dGhpcy5fJEVPKGQsdGhpc1tkXSxhKSksdGhpcy5fJEVDPXZvaWQgMCksdGhpcy5fJEVrKCl9dXBkYXRlZChsKXt9Zmlyc3RVcGRhdGVkKGwpe319dmFyIGUkO0RfW1FHXT0hMCxEXy5lbGVtZW50UHJvcGVy''@;'; put 'put ''dGllcz1uZXcgTWFwLERfLmVsZW1lbnRTdHlsZXM9W10sRF8uc2hhZG93Um9vdE9wdGlvbnM9e21vZGU6Im9wZW4ifSxOMGU/Lih7UmVhY3RpdmVFbGVtZW50OkRffSksKG51bGwhPT0oWEc9VlAucmVhY3RpdmVFbGVtZW50VmVyc2lvbnMpJiZ2b2lkIDAhPT1YRz9YRzpWUC5yZWFjdGl2ZUVs''@;'; put 'put ''ZW1lbnRWZXJzaW9ucz1bXSkucHVzaCgiMS42LjMiKTtjb25zdCBCUD13aW5kb3csSV89QlAudHJ1c3RlZFR5cGVzLEIwZT1JXz9JXy5jcmVhdGVQb2xpY3koImxpdC1odG1sIix7Y3JlYXRlSFRNTDpjPT5jfSk6dm9pZCAwLGpQPSIkbGl0JCIscWc9YGxpdCQkeyhNYXRoLnJhbmRvbSgpKyIi''@;'; put 'put ''KS5zbGljZSg5KX0kYCx0JD0iPyIrcWcsdURlPWA8JHt0JH0+YCxlOT1kb2N1bWVudCxaRT0oKT0+ZTkuY3JlYXRlQ29tbWVudCgiIiksV0U9Yz0+bnVsbD09PWN8fCJvYmplY3QiIT10eXBlb2YgYyYmImZ1bmN0aW9uIiE9dHlwZW9mIGMsajBlPUFycmF5LmlzQXJyYXksbiQ9IlsgXHRcblxm''@;'; put 'put ''XHJdIixZRT0vPCg/OighLS18XC9bXmEtekEtWl0pfChcLz9bYS16QS1aXVtePlxzXSopfChcLz8kKSkvZyxVMGU9Ly0tPi9nLFowZT0vPi9nLHQ5PVJlZ0V4cChgPnwke24kfSg/OihbXlxccyInPj0vXSspKCR7biR9Kj0ke24kfSooPzpbXiBcdFxuXGZcciInXGA8Pj1dfCgifCcpfCkpfCQp''@;'; put 'put ''YCwiZyIpLFcwZT0vJy9nLFkwZT0vIi9nLEcwZT0vXig/OnNjcmlwdHxzdHlsZXx0ZXh0YXJlYXx0aXRsZSkkL2ksJDBlPWM9PihsLC4uLmEpPT4oe18kbGl0VHlwZSQ6YyxzdHJpbmdzOmwsdmFsdWVzOmF9KSxkRGU9JDBlKDEpLGhEZT0kMGUoMiksUl89U3ltYm9sLmZvcigibGl0LW5vQ2hh''@;'; put 'put ''bmdlIiksajA9U3ltYm9sLmZvcigibGl0LW5vdGhpbmciKSxLMGU9bmV3IFdlYWtNYXAsbjk9ZTkuY3JlYXRlVHJlZVdhbGtlcihlOSwxMjksbnVsbCwhMSk7ZnVuY3Rpb24gWDBlKGMsbCl7aWYoIUFycmF5LmlzQXJyYXkoYyl8fCFjLmhhc093blByb3BlcnR5KCJyYXciKSl0aHJvdyBFcnJv''@;'; put 'put ''cigiaW52YWxpZCB0ZW1wbGF0ZSBzdHJpbmdzIGFycmF5Iik7cmV0dXJuIHZvaWQgMCE9PUIwZT9CMGUuY3JlYXRlSFRNTChsKTpsfWNsYXNzIEdFe2NvbnN0cnVjdG9yKHtzdHJpbmdzOmwsXyRsaXRUeXBlJDphfSxkKXtsZXQgaDt0aGlzLnBhcnRzPVtdO2xldCBmPTAsdj0wO2NvbnN0IE09''@;'; put 'put ''bC5sZW5ndGgtMSxEPXRoaXMucGFydHMsW1UsdGVdPSgoYyxsKT0+e2NvbnN0IGE9Yy5sZW5ndGgtMSxkPVtdO2xldCBoLGY9Mj09PWw/Ijxzdmc+IjoiIix2PVlFO2ZvcihsZXQgTT0wO008YTtNKyspe2NvbnN0IEQ9Y1tNXTtsZXQgVSx0ZSxvZT0tMSx2ZT0wO2Zvcig7dmU8RC5sZW5ndGgm''@;'; put 'put ''Jih2Lmxhc3RJbmRleD12ZSx0ZT12LmV4ZWMoRCksbnVsbCE9PXRlKTspdmU9di5sYXN0SW5kZXgsdj09PVlFPyIhLS0iPT09dGVbMV0/dj1VMGU6dm9pZCAwIT09dGVbMV0/dj1aMGU6dm9pZCAwIT09dGVbMl0/KEcwZS50ZXN0KHRlWzJdKSYmKGg9UmVnRXhwKCI8LyIrdGVbMl0sImciKSks''@;'; put 'put ''dj10OSk6dm9pZCAwIT09dGVbM10mJih2PXQ5KTp2PT09dDk/Ij4iPT09dGVbMF0/KHY9aD8/WUUsb2U9LTEpOnZvaWQgMD09PXRlWzFdP29lPS0yOihvZT12Lmxhc3RJbmRleC10ZVsyXS5sZW5ndGgsVT10ZVsxXSx2PXZvaWQgMD09PXRlWzNdP3Q5OiciJz09PXRlWzNdP1kwZTpXMGUpOnY9''@;'; put 'put ''PT1ZMGV8fHY9PT1XMGU/dj10OTp2PT09VTBlfHx2PT09WjBlP3Y9WUU6KHY9dDksaD12b2lkIDApO2NvbnN0IHdlPXY9PT10OSYmY1tNKzFdLnN0YXJ0c1dpdGgoIi8+Iik/IiAiOiIiO2YrPXY9PT1ZRT9EK3VEZTpvZT49MD8oZC5wdXNoKFUpLEQuc2xpY2UoMCxvZSkralArRC5zbGljZShv''@;'; put 'put ''ZSkrcWcrd2UpOkQrcWcrKC0yPT09b2U/KGQucHVzaCh2b2lkIDApLE0pOndlKX1yZXR1cm5bWDBlKGMsZisoY1thXXx8Ijw/PiIpKygyPT09bD8iPC9zdmc+IjoiIikpLGRdfSkobCxhKTtpZih0aGlzLmVsPUdFLmNyZWF0ZUVsZW1lbnQoVSxkKSxuOS5jdXJyZW50Tm9kZT10aGlzLmVsLmNv''@;'; put 'put ''bnRlbnQsMj09PWEpe2NvbnN0IG9lPXRoaXMuZWwuY29udGVudCx2ZT1vZS5maXJzdENoaWxkO3ZlLnJlbW92ZSgpLG9lLmFwcGVuZCguLi52ZS5jaGlsZE5vZGVzKX1mb3IoO251bGwhPT0oaD1uOS5uZXh0Tm9kZSgpKSYmRC5sZW5ndGg8TTspe2lmKDE9PT1oLm5vZGVUeXBlKXtpZihoLmhh''@;'; put 'put ''c0F0dHJpYnV0ZXMoKSl7Y29uc3Qgb2U9W107Zm9yKGNvbnN0IHZlIG9mIGguZ2V0QXR0cmlidXRlTmFtZXMoKSlpZih2ZS5lbmRzV2l0aChqUCl8fHZlLnN0YXJ0c1dpdGgocWcpKXtjb25zdCB3ZT10ZVt2KytdO2lmKG9lLnB1c2godmUpLHZvaWQgMCE9PXdlKXtjb25zdCBGZT1oLmdldEF0''@;'; put 'put ''dHJpYnV0ZSh3ZS50b0xvd2VyQ2FzZSgpK2pQKS5zcGxpdChxZyksV2U9LyhbLj9AXSk/KC4qKS8uZXhlYyh3ZSk7RC5wdXNoKHt0eXBlOjEsaW5kZXg6ZixuYW1lOldlWzJdLHN0cmluZ3M6RmUsY3RvcjoiLiI9PT1XZVsxXT9RMGU6Ij8iPT09V2VbMV0/ZTFlOiJAIj09PVdlWzFdP3QxZTok''@;'; put 'put ''RX0pfWVsc2UgRC5wdXNoKHt0eXBlOjYsaW5kZXg6Zn0pfWZvcihjb25zdCB2ZSBvZiBvZSloLnJlbW92ZUF0dHJpYnV0ZSh2ZSl9aWYoRzBlLnRlc3QoaC50YWdOYW1lKSl7Y29uc3Qgb2U9aC50ZXh0Q29udGVudC5zcGxpdChxZyksdmU9b2UubGVuZ3RoLTE7aWYodmU+MCl7aC50ZXh0Q29u''@;'; put 'put ''dGVudD1JXz9JXy5lbXB0eVNjcmlwdDoiIjtmb3IobGV0IHdlPTA7d2U8dmU7d2UrKyloLmFwcGVuZChvZVt3ZV0sWkUoKSksbjkubmV4dE5vZGUoKSxELnB1c2goe3R5cGU6MixpbmRleDorK2Z9KTtoLmFwcGVuZChvZVt2ZV0sWkUoKSl9fX1lbHNlIGlmKDg9PT1oLm5vZGVUeXBlKWlmKGgu''@;'; put 'put ''ZGF0YT09PXQkKUQucHVzaCh7dHlwZToyLGluZGV4OmZ9KTtlbHNle2xldCBvZT0tMTtmb3IoOy0xIT09KG9lPWguZGF0YS5pbmRleE9mKHFnLG9lKzEpKTspRC5wdXNoKHt0eXBlOjcsaW5kZXg6Zn0pLG9lKz1xZy5sZW5ndGgtMX1mKyt9fXN0YXRpYyBjcmVhdGVFbGVtZW50KGwsYSl7Y29u''@;'; put 'put ''c3QgZD1lOS5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO3JldHVybiBkLmlubmVySFRNTD1sLGR9fWZ1bmN0aW9uIHI5KGMsbCxhPWMsZCl7dmFyIGgsZix2LE07aWYobD09PVJfKXJldHVybiBsO2xldCBEPXZvaWQgMCE9PWQ/bnVsbD09PShoPWEuXyRDbyl8fHZvaWQgMD09PWg/dm9pZCAw''@;'; put 'put ''OmhbZF06YS5fJENsO2NvbnN0IFU9V0UobCk/dm9pZCAwOmwuXyRsaXREaXJlY3RpdmUkO3JldHVybiBEPy5jb25zdHJ1Y3RvciE9PVUmJihudWxsPT09KGY9RD8uXyRBTyl8fHZvaWQgMD09PWZ8fGYuY2FsbChELCExKSx2b2lkIDA9PT1VP0Q9dm9pZCAwOihEPW5ldyBVKGMpLEQuXyRBVChj''@;'; put 'put ''LGEsZCkpLHZvaWQgMCE9PWQ/KG51bGwhPT0odj0oTT1hKS5fJENvKSYmdm9pZCAwIT09dj92Ok0uXyRDbz1bXSlbZF09RDphLl8kQ2w9RCksdm9pZCAwIT09RCYmKGw9cjkoYyxELl8kQVMoYyxsLnZhbHVlcyksRCxkKSksbH1jbGFzcyBKMGV7Y29uc3RydWN0b3IobCxhKXt0aGlzLl8kQVY9''@;'; put 'put ''W10sdGhpcy5fJEFOPXZvaWQgMCx0aGlzLl8kQUQ9bCx0aGlzLl8kQU09YX1nZXQgcGFyZW50Tm9kZSgpe3JldHVybiB0aGlzLl8kQU0ucGFyZW50Tm9kZX1nZXQgXyRBVSgpe3JldHVybiB0aGlzLl8kQU0uXyRBVX11KGwpe3ZhciBhO2NvbnN0e2VsOntjb250ZW50OmR9LHBhcnRzOmh9PXRo''@;'; put 'put ''aXMuXyRBRCxmPShudWxsIT09KGE9bD8uY3JlYXRpb25TY29wZSkmJnZvaWQgMCE9PWE/YTplOSkuaW1wb3J0Tm9kZShkLCEwKTtuOS5jdXJyZW50Tm9kZT1mO2xldCB2PW45Lm5leHROb2RlKCksTT0wLEQ9MCxVPWhbMF07Zm9yKDt2b2lkIDAhPT1VOyl7aWYoTT09PVUuaW5kZXgpe2xldCB0''@;'; put 'put ''ZTsyPT09VS50eXBlP3RlPW5ldyBMXyh2LHYubmV4dFNpYmxpbmcsdGhpcyxsKToxPT09VS50eXBlP3RlPW5ldyBVLmN0b3IodixVLm5hbWUsVS5zdHJpbmdzLHRoaXMsbCk6Nj09PVUudHlwZSYmKHRlPW5ldyBuMWUodix0aGlzLGwpKSx0aGlzLl8kQVYucHVzaCh0ZSksVT1oWysrRF19TSE9''@;'; put 'put ''PVU/LmluZGV4JiYodj1uOS5uZXh0Tm9kZSgpLE0rKyl9cmV0dXJuIG45LmN1cnJlbnROb2RlPWU5LGZ9dihsKXtsZXQgYT0wO2Zvcihjb25zdCBkIG9mIHRoaXMuXyRBVil2b2lkIDAhPT1kJiYodm9pZCAwIT09ZC5zdHJpbmdzPyhkLl8kQUkobCxkLGEpLGErPWQuc3RyaW5ncy5sZW5ndGgt''@;'; put 'put ''Mik6ZC5fJEFJKGxbYV0pKSxhKyt9fWNsYXNzIExfe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3ZhciBmO3RoaXMudHlwZT0yLHRoaXMuXyRBSD1qMCx0aGlzLl8kQU49dm9pZCAwLHRoaXMuXyRBQT1sLHRoaXMuXyRBQj1hLHRoaXMuXyRBTT1kLHRoaXMub3B0aW9ucz1oLHRoaXMuXyRDcD1udWxs''@;'; put 'put ''PT09KGY9aD8uaXNDb25uZWN0ZWQpfHx2b2lkIDA9PT1mfHxmfWdldCBfJEFVKCl7dmFyIGwsYTtyZXR1cm4gbnVsbCE9PShhPW51bGw9PT0obD10aGlzLl8kQU0pfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLl8kQVUpJiZ2b2lkIDAhPT1hP2E6dGhpcy5fJENwfWdldCBwYXJlbnROb2RlKCl7bGV0''@;'; put 'put ''IGw9dGhpcy5fJEFBLnBhcmVudE5vZGU7Y29uc3QgYT10aGlzLl8kQU07cmV0dXJuIHZvaWQgMCE9PWEmJjExPT09bD8ubm9kZVR5cGUmJihsPWEucGFyZW50Tm9kZSksbH1nZXQgc3RhcnROb2RlKCl7cmV0dXJuIHRoaXMuXyRBQX1nZXQgZW5kTm9kZSgpe3JldHVybiB0aGlzLl8kQUJ9XyRB''@;'; put 'put ''SShsLGE9dGhpcyl7bD1yOSh0aGlzLGwsYSksV0UobCk/bD09PWowfHxudWxsPT1sfHwiIj09PWw/KHRoaXMuXyRBSCE9PWowJiZ0aGlzLl8kQVIoKSx0aGlzLl8kQUg9ajApOmwhPT10aGlzLl8kQUgmJmwhPT1SXyYmdGhpcy5fKGwpOnZvaWQgMCE9PWwuXyRsaXRUeXBlJD90aGlzLmcobCk6''@;'; put 'put ''dm9pZCAwIT09bC5ub2RlVHlwZT90aGlzLiQobCk6KGM9PmowZShjKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGM/LltTeW1ib2wuaXRlcmF0b3JdKShsKT90aGlzLlQobCk6dGhpcy5fKGwpfWsobCl7cmV0dXJuIHRoaXMuXyRBQS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShsLHRoaXMuXyRBQil9''@;'; put 'put ''JChsKXt0aGlzLl8kQUghPT1sJiYodGhpcy5fJEFSKCksdGhpcy5fJEFIPXRoaXMuayhsKSl9XyhsKXt0aGlzLl8kQUghPT1qMCYmV0UodGhpcy5fJEFIKT90aGlzLl8kQUEubmV4dFNpYmxpbmcuZGF0YT1sOnRoaXMuJChlOS5jcmVhdGVUZXh0Tm9kZShsKSksdGhpcy5fJEFIPWx9ZyhsKXt2''@;'; put 'put ''YXIgYTtjb25zdHt2YWx1ZXM6ZCxfJGxpdFR5cGUkOmh9PWwsZj0ibnVtYmVyIj09dHlwZW9mIGg/dGhpcy5fJEFDKGwpOih2b2lkIDA9PT1oLmVsJiYoaC5lbD1HRS5jcmVhdGVFbGVtZW50KFgwZShoLmgsaC5oWzBdKSx0aGlzLm9wdGlvbnMpKSxoKTtpZigobnVsbD09PShhPXRoaXMuXyRB''@;'; put 'put ''SCl8fHZvaWQgMD09PWE/dm9pZCAwOmEuXyRBRCk9PT1mKXRoaXMuXyRBSC52KGQpO2Vsc2V7Y29uc3Qgdj1uZXcgSjBlKGYsdGhpcyksTT12LnUodGhpcy5vcHRpb25zKTt2LnYoZCksdGhpcy4kKE0pLHRoaXMuXyRBSD12fX1fJEFDKGwpe2xldCBhPUswZS5nZXQobC5zdHJpbmdzKTtyZXR1''@;'; put 'put ''cm4gdm9pZCAwPT09YSYmSzBlLnNldChsLnN0cmluZ3MsYT1uZXcgR0UobCkpLGF9VChsKXtqMGUodGhpcy5fJEFIKXx8KHRoaXMuXyRBSD1bXSx0aGlzLl8kQVIoKSk7Y29uc3QgYT10aGlzLl8kQUg7bGV0IGQsaD0wO2Zvcihjb25zdCBmIG9mIGwpaD09PWEubGVuZ3RoP2EucHVzaChkPW5l''@;'; put 'put ''dyBMXyh0aGlzLmsoWkUoKSksdGhpcy5rKFpFKCkpLHRoaXMsdGhpcy5vcHRpb25zKSk6ZD1hW2hdLGQuXyRBSShmKSxoKys7aDxhLmxlbmd0aCYmKHRoaXMuXyRBUihkJiZkLl8kQUIubmV4dFNpYmxpbmcsaCksYS5sZW5ndGg9aCl9XyRBUihsPXRoaXMuXyRBQS5uZXh0U2libGluZyxhKXt2''@;'; put 'put ''YXIgZDtmb3IobnVsbD09PShkPXRoaXMuXyRBUCl8fHZvaWQgMD09PWR8fGQuY2FsbCh0aGlzLCExLCEwLGEpO2wmJmwhPT10aGlzLl8kQUI7KXtjb25zdCBoPWwubmV4dFNpYmxpbmc7bC5yZW1vdmUoKSxsPWh9fXNldENvbm5lY3RlZChsKXt2YXIgYTt2b2lkIDA9PT10aGlzLl8kQU0mJih0''@;'; put 'put ''aGlzLl8kQ3A9bCxudWxsPT09KGE9dGhpcy5fJEFQKXx8dm9pZCAwPT09YXx8YS5jYWxsKHRoaXMsbCkpfX1jbGFzcyAkRXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3RoaXMudHlwZT0xLHRoaXMuXyRBSD1qMCx0aGlzLl8kQU49dm9pZCAwLHRoaXMuZWxlbWVudD1sLHRoaXMubmFtZT1hLHRo''@;'; put 'put ''aXMuXyRBTT1oLHRoaXMub3B0aW9ucz1mLGQubGVuZ3RoPjJ8fCIiIT09ZFswXXx8IiIhPT1kWzFdPyh0aGlzLl8kQUg9QXJyYXkoZC5sZW5ndGgtMSkuZmlsbChuZXcgU3RyaW5nKSx0aGlzLnN0cmluZ3M9ZCk6dGhpcy5fJEFIPWowfWdldCB0YWdOYW1lKCl7cmV0dXJuIHRoaXMuZWxlbWVu''@;'; put 'put ''dC50YWdOYW1lfWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFVfV8kQUkobCxhPXRoaXMsZCxoKXtjb25zdCBmPXRoaXMuc3RyaW5ncztsZXQgdj0hMTtpZih2b2lkIDA9PT1mKWw9cjkodGhpcyxsLGEsMCksdj0hV0UobCl8fGwhPT10aGlzLl8kQUgmJmwhPT1SXyx2JiYodGhpcy5f''@;'; put 'put ''JEFIPWwpO2Vsc2V7Y29uc3QgTT1sO2xldCBELFU7Zm9yKGw9ZlswXSxEPTA7RDxmLmxlbmd0aC0xO0QrKylVPXI5KHRoaXMsTVtkK0RdLGEsRCksVT09PVJfJiYoVT10aGlzLl8kQUhbRF0pLHZ8fCh2PSFXRShVKXx8VSE9PXRoaXMuXyRBSFtEXSksVT09PWowP2w9ajA6bCE9PWowJiYobCs9''@;'; put 'put ''KFU/PyIiKStmW0QrMV0pLHRoaXMuXyRBSFtEXT1VfXYmJiFoJiZ0aGlzLmoobCl9aihsKXtsPT09ajA/dGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSh0aGlzLm5hbWUpOnRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUodGhpcy5uYW1lLGw/PyIiKX19Y2xhc3MgUTBlIGV4dGVuZHMgJEV7''@;'; put 'put ''Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudHlwZT0zfWoobCl7dGhpcy5lbGVtZW50W3RoaXMubmFtZV09bD09PWowP3ZvaWQgMDpsfX1jb25zdCBmRGU9SV8/SV8uZW1wdHlTY3JpcHQ6IiI7Y2xhc3MgZTFlIGV4dGVuZHMgJEV7Y29uc3RydWN0b3IoKXtzdXBlcigu''@;'; put 'put ''Li5hcmd1bWVudHMpLHRoaXMudHlwZT00fWoobCl7bCYmbCE9PWowP3RoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUodGhpcy5uYW1lLGZEZSk6dGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSh0aGlzLm5hbWUpfX1jbGFzcyB0MWUgZXh0ZW5kcyAkRXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYp''@;'; put 'put ''e3N1cGVyKGwsYSxkLGgsZiksdGhpcy50eXBlPTV9XyRBSShsLGE9dGhpcyl7dmFyIGQ7aWYoKGw9bnVsbCE9PShkPXI5KHRoaXMsbCxhLDApKSYmdm9pZCAwIT09ZD9kOmowKT09PVJfKXJldHVybjtjb25zdCBoPXRoaXMuXyRBSCxmPWw9PT1qMCYmaCE9PWowfHxsLmNhcHR1cmUhPT1oLmNh''@;'; put 'put ''cHR1cmV8fGwub25jZSE9PWgub25jZXx8bC5wYXNzaXZlIT09aC5wYXNzaXZlLHY9bCE9PWowJiYoaD09PWowfHxmKTtmJiZ0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLm5hbWUsdGhpcyxoKSx2JiZ0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLm5hbWUs''@;'; put 'put ''dGhpcyxsKSx0aGlzLl8kQUg9bH1oYW5kbGVFdmVudChsKXt2YXIgYSxkOyJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl8kQUg/dGhpcy5fJEFILmNhbGwobnVsbCE9PShkPW51bGw9PT0oYT10aGlzLm9wdGlvbnMpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmhvc3QpJiZ2b2lkIDAhPT1kP2Q6dGhp''@;'; put 'put ''cy5lbGVtZW50LGwpOnRoaXMuXyRBSC5oYW5kbGVFdmVudChsKX19Y2xhc3MgbjFle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLmVsZW1lbnQ9bCx0aGlzLnR5cGU9Nix0aGlzLl8kQU49dm9pZCAwLHRoaXMuXyRBTT1hLHRoaXMub3B0aW9ucz1kfWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRB''@;'; put 'put ''TS5fJEFVfV8kQUkobCl7cjkodGhpcyxsKX19Y29uc3QgcjFlPUJQLmxpdEh0bWxQb2x5ZmlsbFN1cHBvcnQ7dmFyIHIkLGkkO3IxZT8uKEdFLExfKSwobnVsbCE9PShlJD1CUC5saXRIdG1sVmVyc2lvbnMpJiZ2b2lkIDAhPT1lJD9lJDpCUC5saXRIdG1sVmVyc2lvbnM9W10pLnB1c2goIjIu''@;'; put 'put ''OC4wIik7Y2xhc3MgS0UgZXh0ZW5kcyBEX3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZW5kZXJPcHRpb25zPXtob3N0OnRoaXN9LHRoaXMuXyREbz12b2lkIDB9Y3JlYXRlUmVuZGVyUm9vdCgpe3ZhciBsLGE7Y29uc3QgZD1zdXBlci5jcmVhdGVSZW5kZXJSb290''@;'; put 'put ''KCk7cmV0dXJuIG51bGwhPT0obD0oYT10aGlzLnJlbmRlck9wdGlvbnMpLnJlbmRlckJlZm9yZSkmJnZvaWQgMCE9PWx8fChhLnJlbmRlckJlZm9yZT1kLmZpcnN0Q2hpbGQpLGR9dXBkYXRlKGwpe2NvbnN0IGE9dGhpcy5yZW5kZXIoKTt0aGlzLmhhc1VwZGF0ZWR8fCh0aGlzLnJlbmRlck9w''@;'; put 'put ''dGlvbnMuaXNDb25uZWN0ZWQ9dGhpcy5pc0Nvbm5lY3RlZCksc3VwZXIudXBkYXRlKGwpLHRoaXMuXyREbz0oKGMsbCxhKT0+e3ZhciBkLGg7Y29uc3QgZj1udWxsIT09KGQ9YT8ucmVuZGVyQmVmb3JlKSYmdm9pZCAwIT09ZD9kOmw7bGV0IHY9Zi5fJGxpdFBhcnQkO2lmKHZvaWQgMD09PXYp''@;'; put 'put ''e2NvbnN0IE09bnVsbCE9PShoPWE/LnJlbmRlckJlZm9yZSkmJnZvaWQgMCE9PWg/aDpudWxsO2YuXyRsaXRQYXJ0JD12PW5ldyBMXyhsLmluc2VydEJlZm9yZShaRSgpLE0pLE0sdm9pZCAwLGE/P3t9KX1yZXR1cm4gdi5fJEFJKGMpLHZ9KShhLHRoaXMucmVuZGVyUm9vdCx0aGlzLnJlbmRl''@;'; put 'put ''ck9wdGlvbnMpfWNvbm5lY3RlZENhbGxiYWNrKCl7dmFyIGw7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSxudWxsPT09KGw9dGhpcy5fJERvKXx8dm9pZCAwPT09bHx8bC5zZXRDb25uZWN0ZWQoITApfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dmFyIGw7c3VwZXIuZGlzY29ubmVjdGVkQ2Fs''@;'; put 'put ''bGJhY2soKSxudWxsPT09KGw9dGhpcy5fJERvKXx8dm9pZCAwPT09bHx8bC5zZXRDb25uZWN0ZWQoITEpfXJlbmRlcigpe3JldHVybiBSX319S0UuZmluYWxpemVkPSEwLEtFLl8kbGl0RWxlbWVudCQ9ITAsbnVsbD09PShyJD1nbG9iYWxUaGlzLmxpdEVsZW1lbnRIeWRyYXRlU3VwcG9ydCl8''@;'; put 'put ''fHZvaWQgMD09PXIkfHxyJC5jYWxsKGdsb2JhbFRoaXMse0xpdEVsZW1lbnQ6S0V9KTtjb25zdCBpMWU9Z2xvYmFsVGhpcy5saXRFbGVtZW50UG9seWZpbGxTdXBwb3J0O2kxZT8uKHtMaXRFbGVtZW50OktFfSksKG51bGwhPT0oaSQ9Z2xvYmFsVGhpcy5saXRFbGVtZW50VmVyc2lvbnMpJiZ2''@;'; put 'put ''b2lkIDAhPT1pJD9pJDpnbG9iYWxUaGlzLmxpdEVsZW1lbnRWZXJzaW9ucz1bXSkucHVzaCgiMy4zLjMiKTtjb25zdCBtRGU9UDBlYEBjaGFyc2V0ICJVVEYtOCI7Omhvc3QsOnJvb3R7LS3OtDI6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UteHhzLCBjYWxjKDQgKiAxcmVtIC8gdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLc60Mzp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14cywgY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS3OtDQ6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2Utc20sIGNhbGMoMTIgKiAxcmVt''@;'; put 'put ''IC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLc60NTp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS1tZCwgY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0tzrQ2OnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLWxnLCBjYWxjKDI0''@;'; put 'put ''ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS3OtDc6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UteGwsIGNhbGMoMzIgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKX1bY2RzLWxheW91dH49IndyYXA6bm9uZSJde2ZsZXgtd3JhcDpub3dy''@;'; put 'put ''YXAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJde2ZsZXgtZ3JvdzoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImFsaWduOnNocmluayJde2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50O2ZsZXgtZ3JvdzowIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF17''@;'; put 'put ''ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6d3JhcDtqdXN0aWZ5LWl0ZW1zOmZsZXgtc3RhcnQ7YWxpZ24taXRlbXM6ZmxleC1zdGFydDt3aWR0aDoxMDAlO21hcmdpbjowO21pbi1oZWlnaHQ6MH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXR+''@;'; put 'put ''PWhvcml6b250YWxdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dH49dmVydGljYWxdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLXRleHRde3dpZHRoOmluaXRpYWwhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246''@;'; put 'put ''dG9wIl17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17anVzdGlm''@;'; put 'put ''eS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246''@;'; put 'put ''aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJvcmRlcjpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaDtm''@;'; put 'put ''bGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDth''@;'; put 'put ''bGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSxbY2RzLWxheW91''@;'; put 'put ''dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJh''@;'; put 'put ''bGlnbjpob3Jpem9udGFsLWNlbnRlciJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0''@;'; put 'put ''aWNhbF17d2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSxbY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXtqdXN0aWZ5LWNvbnRlbnQ6Zmxl''@;'; put 'put ''eC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12''@;'; put 'put ''ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZl''@;'; put 'put ''cnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0ib3JkZXI6cmV2ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfVtjZHMt''@;'; put 'put ''bGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50''@;'; put 'put ''OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJh''@;'; put 'put ''bGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1j''@;'; put 'put ''ZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXXttYXJnaW4tbGVm''@;'; put 'put ''dDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG99W2Nkcy1sYXlvdXR+PWdyaWRde2Rpc3BsYXk6Z3JpZDthbGlnbi1pdGVtczpzdGFydDthbGlnbi1jb250ZW50OnN0YXJ0O2dyaWQtdGVtcGxhdGUtY29sdW1u''@;'; put 'put ''czpyZXBlYXQodmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtZ3JpZC1jb2xzLDEyKSwxZnIpO3dpZHRoOjEwMCV9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPXJvd3Nde2dyaWQtdGVtcGxhdGUtcm93czpyZXBlYXQoMTIsYXV0byl9W2Nkcy1sYXlvdXR+PWdyaWRdPltjZHMtbGF5b3V0''@;'; put 'put ''Kj1yb3dde2FsaWduLXNlbGY6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2FsaWduLWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde2p1c3RpZnktY29udGVudDplbmR9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17anVzdGlmeS1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtj''@;'; put 'put ''ZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9''@;'; put 'put ''ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRl''@;'; put 'put ''cn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfTo6c2xvdHRlZChbY2RzLWxheW91dH49ImRpc3BsYXk6''@;'; put 'put ''c2NyZWVuLXJlYWRlci1vbmx5Il0pLFtjZHMtbGF5b3V0fj0iZGlzcGxheTpzY3JlZW4tcmVhZGVyLW9ubHkiXXtwb3NpdGlvbjphYnNvbHV0ZSFpbXBvcnRhbnQ7Y2xpcDpyZWN0KDFweCwxcHgsMXB4LDFweCk7Y2xpcC1wYXRoOmluc2V0KDUwJSk7cGFkZGluZzowO2JvcmRlcjowO2hlaWdo''@;'; put 'put ''dDoxcHg7d2lkdGg6MXB4O292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dG9wOjA7bGVmdDowO2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iZ2FwOm5vbmUiXXtnYXA6MH1bY2RzLWxheW91dCo9ImdhcDp4eHMiXXtnYXA6dmFyKC0tzrQyKX1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImdhcDp4cyJde2dhcDp2YXIoLS3OtDMpfVtjZHMtbGF5b3V0Kj0iZ2FwOnNtIl17Z2FwOnZhcigtLc60NCl9W2Nkcy1sYXlvdXQqPSJnYXA6bWQiXXtnYXA6dmFyKC0tzrQ1KX1bY2RzLWxheW91dCo9ImdhcDpsZyJde2dhcDp2YXIoLS3OtDYpfVtjZHMtbGF5b3V0fj0icDpub25l''@;'; put 'put ''Il17cGFkZGluZzowIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6eHhzIl17cGFkZGluZzp2YXIoLS3OtDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6eHMiXXtwYWRkaW5nOnZhcigtLc60MykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icDpzbSJde3BhZGRpbmc6dmFyKC0tzrQ0KSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOm1kIl17cGFkZGluZzp2YXIoLS3OtDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im06bWQiXXttYXJnaW46dmFyKC0tzrQ1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOmxnIl17cGFkZGluZzp2YXIoLS3OtDYpIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49InAteTp4cyJde3BhZGRpbmctdG9wOnZhcigtLc60MykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLc60MykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14OmxnIl17cGFkZGluZy1sZWZ0OnZhcigtLc60NikhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tzrQ2''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6bGciXXtwYWRkaW5nLXRvcDp2YXIoLS3OtDYpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS3OtDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbDptZCJde3BhZGRpbmctbGVmdDp2YXIoLS3OtDUpIWltcG9ydGFudH1AbWVk''@;'; put 'put ''aWEgKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXQqPSJnYXBAbWQ6bGciXXtnYXA6dmFyKC0tzrQ2KX1bY2RzLWxheW91dH49InBAbWQ6bGciXXtwYWRkaW5nOnZhcigtLc60NikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDp4bCJde21hcmdpbjp2YXIoLS3OtDcpIWltcG9ydGFu''@;'; put 'put ''dH19W2Nkcy1sYXlvdXR+PWZpbGxde3dpZHRoOjEwMCUhaW1wb3J0YW50fSosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl0+OjpzbG90dGVkKCopLFtjZHMt''@;'; put 'put ''bGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJdPjo6c2xvdHRlZCgqKSxbY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+OjpzbG90dGVkKCope2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpz''@;'; put 'put ''bG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2Fs''@;'; put 'put ''XSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRl''@;'; put 'put ''ZChbY2RzLWxheW91dCo9ImFsaWduOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRp''@;'; put 'put ''Y2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJdKSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246''@;'; put 'put ''bGVmdCJde21hcmdpbi1yaWdodDphdXRvfUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXtbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFs''@;'; put 'put ''aWduQHhzOnZlcnRpY2FsLWNlbnRlciJdKXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMt''@;'; put 'put ''bGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp0b3AiXSl7bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVy''@;'; put 'put ''dGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxh''@;'; put 'put ''eW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXtbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmNlbnRlciJd''@;'; put 'put ''KSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnZlcnRpY2FsLWNlbnRlciJdKXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25A''@;'; put 'put ''c206Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp0''@;'; put 'put ''b3AiXSl7bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMt''@;'; put 'put ''bGF5b3V0Kj0iYWxpZ25Ac206cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dH49''@;'; put 'put ''dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOnZlcnRpY2FsLWNlbnRlciJdKXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtj''@;'; put 'put ''ZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp0b3AiXSl7bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1''@;'; put 'put ''dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmxlZnQiXSl7bWFyZ2lu''@;'; put 'put ''LXJpZ2h0OmF1dG99fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp2ZXJ0''@;'; put 'put ''aWNhbC1jZW50ZXIiXSl7bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFs''@;'; put 'put ''aWduQGxnOmhvcml6b250YWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dG9wIl0pe21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNs''@;'; put 'put ''b3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpib3R0b20iXSl7bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRp''@;'; put 'put ''Y2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvfX1AbWVkaWEgKG1pbi13aWR0aDoxNDQwcHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Y2VudGVyIl0pLFtjZHMtbGF5''@;'; put 'put ''b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIi''@;'; put 'put ''XSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOnRvcCJdKXttYXJn''@;'; put 'put ''aW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJh''@;'; put 'put ''bGlnbkB4bDpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0b319W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9''@;'; put 'put ''ImFsaWduOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpj''@;'; put 'put ''ZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0g''@;'; put 'put ''OjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl0pe2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250''@;'; put 'put ''YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1AbWVk''@;'; put 'put ''aWEgKG1pbi13aWR0aDo1NzZweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtY2VudGVyIl0p''@;'; put 'put ''e2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmhvcml6b250YWwtY2VudGVyIl0p''@;'; put 'put ''e21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dG9wIl0pe2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRh''@;'; put 'put ''bF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpe1tjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJh''@;'; put 'put ''bGlnbkBzbTpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnZlcnRpY2FsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxp''@;'; put 'put ''Z25Ac206Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLWNlbnRlciJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhv''@;'; put 'put ''cml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnRvcCJdKXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmJvdHRvbSJdKXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMt''@;'; put 'put ''bGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206bGVmdCJdKXttYXJnaW4tcmln''@;'; put 'put ''aHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGln''@;'; put 'put ''bkBtZDp2ZXJ0aWNhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25A''@;'; put 'put ''bWQ6aG9yaXpvbnRhbC1jZW50ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp0b3AiXSl7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0''@;'; put 'put ''fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpib3R0b20iXSl7YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6cmlnaHQiXSl7bWFyZ2luLWxl''@;'; put 'put ''ZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpe1tjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6''@;'; put 'put ''OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpz''@;'; put 'put ''bG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpob3Jpem9udGFsLWNlbnRlciJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnRvcCJdKXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmJvdHRvbSJdKXth''@;'; put 'put ''bGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxp''@;'; put 'put ''Z25AbGc6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjE0NDBweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpz''@;'; put 'put ''bG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xv''@;'; put 'put ''dHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dG9w''@;'; put 'put ''Il0pe2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFs''@;'; put 'put ''aWduQHhsOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19W2Nkcy10ZXh0XXtmb250LWZhbWlseTp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowfVtjZHMtdGV4dF1bY2RzLWxheW91dH49Z3JpZF06OmFmdGVyLFtjZHMtdGV4dF1bY2RzLWxheW91''@;'; put 'put ''dH49Z3JpZF06OmJlZm9yZSxbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdOjphZnRlcixbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdOjpiZWZvcmUsW2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF06OmFmdGVyLFtjZHMtdGV4dF1bY2RzLWxheW91dH49''@;'; put 'put ''dmVydGljYWxdOjpiZWZvcmV7ZGlzcGxheTpub25lfVtjZHMtdGV4dCo9ZGlzcGxheV0sW2Nkcy10ZXh0Kj1zZWN0aW9uXSxbY2RzLXRleHQqPXN1YnNlY3Rpb25dLFtjZHMtdGV4dCo9dGl0bGVde2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkZXItZm9udC1m''@;'; put 'put ''YW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNDAwLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTkwMCwjMjEzMzNiKSl9W2Nkcy10ZXh0Kj1ib2R5XSxbY2Rz''@;'; put 'put ''LXRleHQqPW1lc3NhZ2VdLFtjZHMtdGV4dCo9c2Vjb25kYXJ5XXtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNTAwLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmxhY2ssIzAwMCkpfVtjZHMtdGV4dCo9aW5saW5lXXt3aWR0aDphdXRvIWltcG9ydGFudDtkaXNwbGF5''@;'; put 'put ''OmlubGluZS1ibG9jayFpbXBvcnRhbnR9W2Nkcy10ZXh0Kj1kaXNwbGF5XXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC1zaXplLGNhbGMoNDAgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2ZvbnQtd2VpZ2h0OnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWZvbnQtd2VpZ2h0LDUwMCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQsMS4xZW0pO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWxl''@;'; put 'put ''dHRlci1zcGFjaW5nLC0uMDEyNWVtKX1bY2RzLXRleHQqPWRpc3BsYXldOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0p''@;'; put 'put ''ICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQsMS4xZW0pIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1kaXNwbGF5XTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2lu''@;'; put 'put ''LXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQs''@;'; put 'put ''LjUxN2VtKSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1saW5lLWhlaWdodCwxLjFlbSkgLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXRpdGxlXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWZvbnQt''@;'; put 'put ''c2l6ZSxjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtZm9udC13ZWlnaHQsNTAwKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGluZS1o''@;'; put 'put ''ZWlnaHQsMS4zMzMzMzNlbSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWxldHRlci1zcGFjaW5nLC0uMDA4MzMzMzNlbSl9W2Nkcy10ZXh0Kj10aXRsZV06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDtt''@;'; put 'put ''YXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQsMS4zMzMzMzNlbSkgLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1b''@;'; put 'put ''Y2RzLXRleHQqPXRpdGxlXTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlw''@;'; put 'put ''b2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQsMS4zMzMzMzNlbSkgLSAxZW0pLyAyKSkqLTEpIC0g''@;'; put 'put ''LjA0NGVtKX1bY2RzLXRleHQqPXNlY3Rpb25de2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemUsY2FsYygyMCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3Jh''@;'; put 'put ''cGh5LXNlY3Rpb24tZm9udC13ZWlnaHQsNTAwKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCwxLjJlbSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmcsLS4w''@;'; put 'put ''MWVtKX1bY2RzLXRleHQqPXNlY3Rpb25dOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygodmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQsMS4yZW0pIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1zZWN0aW9uXTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAt''@;'; put 'put ''IHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCh2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCwxLjJlbSkgLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXN1YnNlY3Rpb25de2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXNpemUsY2Fs''@;'; put 'put ''YygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC13ZWlnaHQsNTAwKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1saW5l''@;'; put 'put ''LWhlaWdodCwxLjVlbSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGV0dGVyLXNwYWNpbmcsLS4wMTI1ZW0pfVtjZHMtdGV4dCo9c3Vic2VjdGlvbl06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6''@;'; put 'put ''MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1saW5lLWhlaWdodCwxLjVlbSkgLSAxZW0pLyAyKSkqLTEpICsgLjAzN2Vt''@;'; put 'put ''KX1bY2RzLXRleHQqPXN1YnNlY3Rpb25dOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0LDEuNWVtKSAtIDFlbSkvIDIp''@;'; put 'put ''KSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9Ym9keV17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQsNDAwKTtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplLGNhbGMoMTQgKiAxcmVtIC8g''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nLC0uMDA3MTQyODZlbSk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQsMS40''@;'; put 'put ''Mjg1NzE0ZW0pfVtjZHMtdGV4dCo9Ym9keV06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCwxLjQyODU3MTRlbSkgLSAxZW0pLyAyKSkqLTEpICsgLjFlbSl9W2Nkcy10ZXh0Kj1ib2R5XTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAt''@;'; put 'put ''IHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCh2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCwxLjQyODU3MTRlbSkgLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX1ib2R5W2Nkcy10ZXh0Kj1ib2R5XTo6YWZ0ZXIsYm9keVtjZHMtdGV4dCo9Ym9keV06OmJlZm9yZXtjb250ZW50Om5vbmV9W2Nkcy10ZXh0Kj1t''@;'; put 'put ''ZXNzYWdlXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtZm9udC1zaXplLGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWZvbnQtd2Vp''@;'; put 'put ''Z2h0LGNhbGMoNDAwICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1saW5lLWhlaWdodCwxLjVlbSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3Nh''@;'; put 'put ''Z2UtbGV0dGVyLXNwYWNpbmcsLS4wMTI1ZW0pfVtjZHMtdGV4dCo9bWVzc2FnZV06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0''@;'; put 'put ''NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1saW5lLWhlaWdodCwxLjVlbSkgLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPW1lc3NhZ2VdOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDtt''@;'; put 'put ''YXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhl''@;'; put 'put ''aWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0LDEuNWVtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9c2Vjb25kYXJ5XXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNl''@;'; put 'put ''Y29uZGFyeS1mb250LXNpemUsY2FsYygxMyAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCw0MDApO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dy''@;'; put 'put ''YXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQsMS4yMzA3N2VtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nLC0uMDA3NjkyZW0pfVtjZHMtdGV4dCo9c2Vjb25kYXJ5XTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxh''@;'; put 'put ''eTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQsMS4yMzA3N2Vt''@;'; put 'put ''KSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9c2Vjb25kYXJ5XTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdo''@;'; put 'put ''dCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUt''@;'; put 'put ''aGVpZ2h0LDEuMjMwNzdlbSkgLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHR+PWxpbmtde2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDAsIzAwNzlhZCkpIWltcG9ydGFudDt0ZXh0LWRl''@;'; put 'put ''Y29yYXRpb246dW5kZXJsaW5lIWltcG9ydGFudDtsaW5lLWhlaWdodDppbmhlcml0IWltcG9ydGFudDtmb250LXNpemU6aW5oZXJpdCFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1saW5rXTpmb2N1c3tvdXRsaW5lOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZSxIaWdo''@;'; put 'put ''bGlnaHQgc29saWQgMnB4KTtvdXRsaW5lLW9mZnNldDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUtb2Zmc2V0LDFweCl9W2Nkcy10ZXh0fj1saW5rXTpob3Zlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci1ob3Zlcix2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtODAwLCMwMDYwOGEpKSFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1saW5rXTp2aXNpdGVkOm5vdChbY2RzLXRleHR+PXN0YXRpY10pe2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQsdmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci12aW9sZXQtNzAwLCM3YzEyYTUpKSFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1saW5rXTp2aXNpdGVkOm5vdChbY2RzLXRleHR+PXN0YXRpY10pOmhvdmVye2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQtaG92ZXIsdmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci12aW9sZXQtMTAwMCwjMzIwMDQ3KSkhaW1wb3J0YW50fUBtZWRpYSAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjApe1tjZHMtdGV4dD1saW5rXTpmb2N1c3tvdXRsaW5lOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZS13ZWJraXQs''@;'; put 'put ''NXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yKX19W2Nkcy10ZXh0fj1jb2RlXXtjb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcix2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDAsI2UwMjIwMCkpO2ZvbnQtZmFtaWx5Om1vbm9zcGFjZX1bY2RzLWRpdmlkZXJd''@;'; put 'put ''e2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCxjYWxjKDEgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO292ZXJmbG93OmhpZGRlbjtib3gtc2hhZG93OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNv''@;'; put 'put ''bG9yLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCwjY2JkNGQ4KSkgMCAwIDAgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwLGNhbGMoMSAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkgaW5zZXR9W2Nkcy10ZXh0fj1saWdo''@;'; put 'put ''dF17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWxpZ2h0LDMwMCkhaW1wb3J0YW50fVtjZHMtdGV4dH49anVzdGlmeV17dGV4dC1hbGlnbjpqdXN0aWZ5IWltcG9ydGFudH1bY2RzLXRleHR+PWxlZnRde3RleHQtYWxpZ246bGVmdCFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy10ZXh0fj1yaWdodF17dGV4dC1hbGlnbjpyaWdodCFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1jZW50ZXJde3RleHQtYWxpZ246Y2VudGVyIWltcG9ydGFudH1bY2RzLXRleHR+PWxoZV17cGFkZGluZzouMDVweCAwfVtjZHMtdGV4dH49bGhlXTo6YmVmb3Jle2NvbnRlbnQ6IiI7bWFy''@;'; put 'put ''Z2luLXRvcDotLjEyNGVtO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjB9W2Nkcy10ZXh0fj1saGVdOjphZnRlcntjb250ZW50OiIiO21hcmdpbi1ib3R0b206LS4yMjFlbTtkaXNwbGF5OmJsb2NrO2hlaWdodDowfVtjZHMtdGV4dCo9aDJdLFtjZHMtdGV4dCo9aDNde2ZvbnQtZmFtaWx5OnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkZXItZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtmb250LXNpemU6MS40cmVtO2ZvbnQtd2VpZ2h0OjIwMDtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNDAwKTts''@;'; put 'put ''aW5lLWhlaWdodDoxLjcxNDNlbTtsZXR0ZXItc3BhY2luZzotLjAxNzg1N2VtfVtjZHMtdGV4dCo9aDJdOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1n''@;'; put 'put ''YXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygoMS43MTQzZW0gLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWgyXTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCgxLjcxNDNlbSAtIDFlbSkv''@;'; put 'put ''IDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9aDNde2ZvbnQtc2l6ZToxLjFyZW07bGluZS1oZWlnaHQ6MS4wOTA5ZW07bGV0dGVyLXNwYWNpbmc6LS4wMTM2MzZlbX1bY2RzLXRleHQqPWgzXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21h''@;'; put 'put ''cmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKDEuMDkwOWVtIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1oM106OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWln''@;'; put 'put ''aHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10''@;'; put 'put ''eXBvZ3JhcGh5LXgtaGVpZ2h0LC41MTdlbSkpICsgY2FsYygoMS4wOTA5ZW0gLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX06aG9zdHthbGw6aW5pdGlhbDtkaXNwbGF5OmJsb2NrO3Zpc2liaWxpdHk6aW5oZXJpdDtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9u''@;'; put 'put ''dC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtjb250YWluOmxheW91dDtib3gtc2l6aW5nOmJvcmRlci1ib3ghaW1wb3J0YW50Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lIWltcG9ydGFudH0qLDphZnRlciw6YmVmb3Jle2JveC1zaXppbmc6aW5o''@;'; put 'put ''ZXJpdCFpbXBvcnRhbnR9c2xvdHtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtkaXNwbGF5OmNvbnRlbnRzIWltcG9ydGFudH06OnNsb3R0ZWQoKil7Zm9udC1mYW1p''@;'; put 'put ''bHk6aW5oZXJpdDtib3gtc2l6aW5nOmluaGVyaXR9OjpzbG90dGVkKCopOjpwbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItMjAwLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCwjNGY2MTY5KSl9Omhvc3QoW19pcy1hbmNo''@;'; put 'put ''b3JdKSw6aG9zdChbcm9sZT1idXR0b25dKXtjdXJzb3I6cG9pbnRlciFpbXBvcnRhbnR9Omhvc3QoW19pcy1hbmNob3JdKSA6OnNsb3R0ZWQoKiksOmhvc3QoW3JvbGU9YnV0dG9uXSkgOjpzbG90dGVkKCope2N1cnNvcjpwb2ludGVyIWltcG9ydGFudH06aG9zdChbcm9sZT1idXR0b25dW2Rp''@;'; put 'put ''c2FibGVkXSl7Y3Vyc29yOm5vdC1hbGxvd2VkIWltcG9ydGFudH06aG9zdChbcm9sZT1idXR0b25dW2Rpc2FibGVkXSkgOjpzbG90dGVkKCope2N1cnNvcjpub3QtYWxsb3dlZCFpbXBvcnRhbnQ7cG9pbnRlci1ldmVudHM6bm9uZX06aG9zdChbaGlkZGVuXSksW2hpZGRlbl17ZGlzcGxheTpu''@;'; put 'put ''b25lIWltcG9ydGFudH06aG9zdChbaGlkZGVuKj1mYWxzZV0pe2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fTpob3N0KFtyb2xlPWRpYWxvZ11baGlkZGVuXSksOmhvc3QoW3JvbGU9ZGlhbG9nXVtoaWRkZW5dKSA6OnNsb3R0ZWQoKil7ZGlzcGxheTpibG9jayFpbXBvcnRhbnQ7dmlzaWJpbGl0''@;'; put 'put ''eTpoaWRkZW4haW1wb3J0YW50fTpob3N0KFtyb2xlPWRpYWxvZ11baGlkZGVuKj1mYWxzZV0pLDpob3N0KFtyb2xlPWRpYWxvZ11baGlkZGVuKj1mYWxzZV0pIDo6c2xvdHRlZCgqKXt2aXNpYmlsaXR5OnZpc2libGUhaW1wb3J0YW50fTpob3N0KFtfZm9jdXNlZF0pIC5pbnB1dCw6aG9zdChb''@;'; put 'put ''X2ZvY3VzZWRdKSBbZm9jdXNhYmxlXSw6aG9zdChbdGFiaW5kZXg9IjAiXTpmb2N1cyksOmhvc3QoW3RhYmluZGV4PSIwIl06Zm9jdXMpIFtmb2N1c2FibGVdLFt0YWJpbmRleD0iMCJdW2ZvY3VzYWJsZV06Zm9jdXN7b3V0bGluZTpIaWdobGlnaHQgc29saWQgMnB4O291dGxpbmU6NXB4IGF1''@;'; put 'put ''dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZS1vZmZzZXQsMXB4KX1gO2Z1bmN0aW9uIGEkKGMpe3JldHVybmBjYWxjKCgke2N9IC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkgKiAxcmVt''@;'; put 'put ''KWB9Y2xhc3MgX0Rle2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5mbj1sLHRoaXMuc3Vic2NyaXB0aW9ucz1hfXVuc3Vic2NyaWJlKCl7Y29uc3QgbD10aGlzLnN1YnNjcmlwdGlvbnMuaW5kZXhPZih0aGlzKTstMSE9PWwmJnRoaXMuc3Vic2NyaXB0aW9ucy5zcGxpY2UobCwxKX19Y29uc3QgbyQ9''@;'; put 'put ''bmV3IGNsYXNzIHdEZXtjb25zdHJ1Y3Rvcigpe3RoaXMuc3Vic2NyaXB0aW9ucz1bXX1zdWJzY3JpYmUobCl7Y29uc3QgYT1uZXcgX0RlKGwsdGhpcy5zdWJzY3JpcHRpb25zKTtyZXR1cm4gdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goYSksYX1lbWl0KGwpe3RoaXMuc3Vic2NyaXB0aW9ucy5m''@;'; put 'put ''b3JFYWNoKGE9PmEuZm4obCkpfXRvRXZlbnRPYnNlcnZhYmxlKCl7cmV0dXJuIHRoaXN9fTtvJC5saXN0ZW5lcj1kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJDRFNfU1RBVEVfVVBEQVRFIixjPT5vJC5lbWl0KGMuZGV0YWlsKSk7Y2xhc3MgTDN7c3RhdGljIGdldCBzdGF0ZSgpe3JldHVy''@;'; put 'put ''biBTMGUoKSx3aW5kb3cuQ0RTLl9zdGF0ZX1zdGF0aWMgZ2V0VmFsdWUobCl7cmV0dXJuIEwzLnN0YXRlW2xdfXN0YXRpYyBzZXRWYWx1ZShsLGEpe0wzLnN0YXRlW2xdPWF9c3RhdGljIGxvZygpe1VFLmxvZyhKU09OLnN0cmluZ2lmeShMMy5zdGF0ZSxudWxsLDIpKX19TDMuc3RhdGVVcGRh''@;'; put 'put ''dGVzPW8kLnRvRXZlbnRPYnNlcnZhYmxlKCk7Y29uc3QgQ0RlPShjLGwpPT4ibWV0aG9kIj09PWwua2luZCYmbC5kZXNjcmlwdG9yJiYhKCJ2YWx1ZSJpbiBsLmRlc2NyaXB0b3IpP3suLi5sLGZpbmlzaGVyKGEpe2EuY3JlYXRlUHJvcGVydHkobC5rZXksYyl9fTp7a2luZDoiZmllbGQiLGtl''@;'; put 'put ''eTpTeW1ib2woKSxwbGFjZW1lbnQ6Im93biIsZGVzY3JpcHRvcjp7fSxvcmlnaW5hbEtleTpsLmtleSxpbml0aWFsaXplcigpeyJmdW5jdGlvbiI9PXR5cGVvZiBsLmluaXRpYWxpemVyJiYodGhpc1tsLmtleV09bC5pbml0aWFsaXplci5jYWxsKHRoaXMpKX0sZmluaXNoZXIoYSl7YS5jcmVh''@;'; put 'put ''dGVQcm9wZXJ0eShsLmtleSxjKX19O2Z1bmN0aW9uIGExZShjKXtyZXR1cm4obCxhKT0+dm9pZCAwIT09YT8oKGMsbCxhKT0+e2wuY29uc3RydWN0b3IuY3JlYXRlUHJvcGVydHkoYSxjKX0pKGMsbCxhKTpDRGUoYyxsKX1mdW5jdGlvbiBsMWUoYyxsKXtzd2l0Y2gobCYmbC50eXBlKXtjYXNl''@;'; put 'put ''IEFycmF5OmNhc2UgT2JqZWN0OnJldHVybntyZWZsZWN0OiExLC4uLmx9O2Nhc2UgU3RyaW5nOnJldHVybntyZWZsZWN0OiEwLGF0dHJpYnV0ZTpRNyhjKSxjb252ZXJ0ZXI6e3RvQXR0cmlidXRlOmE9PmF8fG51bGx9LC4uLmx9O2Nhc2UgTnVtYmVyOnJldHVybntyZWZsZWN0OiEwLGF0dHJp''@;'; put 'put ''YnV0ZTpRNyhjKSwuLi5sfTtjYXNlIEJvb2xlYW46cmV0dXJue3JlZmxlY3Q6ITAsYXR0cmlidXRlOlE3KGMpLGNvbnZlcnRlcjp7dG9BdHRyaWJ1dGU6YT0+YT8iIjpudWxsLGZyb21BdHRyaWJ1dGU6YT0+ZnVuY3Rpb24gQURlKGMpe3JldHVybiBudWxsIT1jJiYiIitjIT0iZmFsc2UifShh''@;'; put 'put ''KX0sLi4ubH07Y2FzZSBEYXRlOnJldHVybntyZWZsZWN0OiExLGNvbnZlcnRlcjp7ZnJvbUF0dHJpYnV0ZTphPT5uZXcgRGF0ZShhKX0sLi4ubH07ZGVmYXVsdDpyZXR1cm57Li4ubH19fWZ1bmN0aW9uIEptKGMpe3JldHVybihsLGEpPT4oYz8ucmVxdWlyZWQmJmZ1bmN0aW9uIGtEZShjLGws''@;'; put 'put ''YSl7Y29uc3QgZD1jLmZpcnN0VXBkYXRlZDtjLmZpcnN0VXBkYXRlZD1mdW5jdGlvbihoKXtpZihhJiZhLnJlcXVpcmVkJiZ6RSh0aGlzW2xdKSl7Y29uc3QgZj1hLnJlcXVpcmVkTWVzc2FnZXx8ZnVuY3Rpb24odj0id2FybmluZyIsTSxEKXtjb25zdCBVPUQudG9Mb2NhbGVMb3dlckNhc2Uo''@;'; put 'put ''KTtyZXR1cm5gJHtfMGUodil9OiAke019IGlzIHJlcXVpcmVkIHRvIHVzZSAke1V9IGNvbXBvbmVudC4gU2V0IHRoZSBKUyBQcm9wZXJ0eSBvciBIVE1MIEF0dHJpYnV0ZS5cblxuYCsoZzBlKCk/YEFuZ3VsYXI6IDwke1V9IFske019XT0iLi4uIj48LyR7VX0+XG5gOiIiKSsodjBlKCk/YFZ1''@;'; put 'put ''ZTogPCR7VX0gOiR7TX09Ii4uLiI+PC8ke1V9PlxuYDoiIikrKG0wZSgpP2BSZWFjdDogPCR7ZnVuY3Rpb24gQWtlKGMpe3JldHVybiBfMGUoZnVuY3Rpb24gVGtlKGMpe3JldHVybiBjLnNwbGl0KCItIikubWFwKChsLGEpPT5hP2wuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrbC5zbGljZSgx''@;'; put 'put ''KS50b0xvd2VyQ2FzZSgpOmwpLmpvaW4oIiIpfShjKSl9KFUpfSAke3RlPU0sdGUuc3RhcnRzV2l0aCgiYXJpYSIpP1E3KHRlKTp0ZX09ey4uLn0gLz5cbmA6IiIpK2BIVE1MOiA8JHtVfSAke1E3KE0pfT0iLi4uIj48LyR7VX0+XG5KYXZhU2NyaXB0OiBkb2N1bWVudC5xdWVyeVNlbGVjdG9y''@;'; put 'put ''KCcke1V9JykuJHtNfSA9ICcuLi4nO1xuXG5gO3ZhciB0ZX0oYS5yZXF1aXJlZCxsLHRoaXMudGFnTmFtZSk7aWYoImVycm9yIj09PWEucmVxdWlyZWQpdGhyb3cgRXJyb3IoZik7VUUud2FybihmLHRoaXMpfWQmJmQuY2FsbCh0aGlzLGgpfX0obCxhLGMpLGExZShsMWUoYSxjKSkobCxhKSl9''@;'; put 'put ''dmFyIExEZT1QMGVgQGtleWZyYW1lcyBmYWRlSW5BbmRPdXR7MCUsdG97b3BhY2l0eTowfTc1JXtvcGFjaXR5OjF9fTpob3N0ey0tY29sb3I6Y3VycmVudENvbG9yO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1iYXNlLDIwKSkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWFyZ2luOjA7dmVydGljYWwtYWxpZ246bWlkZGxlO2ZpbGw6dmFyKC0tY29sb3IpO2NvbG9yOnZhcigtLWNvbG9y''@;'; put 'put ''KTtjb250YWluOnN0cmljdDtjdXJzb3I6aW5oZXJpdH1zdmd7ZGlzcGxheTpibG9ja306aG9zdChbc2l6ZSo9eHNdKXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3QoW3NpemUqPXNtXSl7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKX06aG9zdChbc2l6ZSo9bWRdKXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05LGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO3dpZHRoOnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtOSxjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSxjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1z''@;'; put 'put ''cGFjZS05LGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpfTpob3N0KFtzaXplKj1sZ10pe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExLGNhbGMoMzYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO3dpZHRoOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtMTEsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExLGNhbGMoMzYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTExLGNhbGMoMzYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpfTpob3N0KFtzaXplKj14bF0pe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyLGNhbGMoNDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO3dpZHRoOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtMTIsY2FsYyg0OCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyLGNhbGMoNDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13aWR0aDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTEyLGNhbGMoNDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpfTpob3N0KFtzaXplKj14eGxdKXtoZWlnaHQ6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzLGNhbGMoNjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkp''@;'; put 'put ''IC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkpO3dpZHRoOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyxjYWxjKDY0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKSAtIHZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtNSxjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpKTttaW4taGVpZ2h0OmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyxjYWxjKDY0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKSAtIHZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtNSxjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpKTttaW4td2lkdGg6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzLGNhbGMoNjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkpfTpob3N0KFtzaXplKj1maXRdKXtoZWlnaHQ6YXV0bzt3aWR0aDphdXRvO2NvbnRhaW46bGF5b3V0fTpob3N0KFtzdGF0dXM9c3VjY2Vzc10pey0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNj''@;'; put 'put ''ZXNzLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTcwMCwgIzQyODEwZSkpfTpob3N0KFtzdGF0dXM9ZGFuZ2VyXSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlciwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwLCAjZTAyMjAwKSl9Omhvc3QoW3N0YXR1''@;'; put 'put ''cz13YXJuaW5nXSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyaywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS04MDAsICNhMzY1MDApKX06aG9zdChbc3RhdHVzPWluZm9dKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mbywgdmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCwgIzAwNzlhZCkpfTpob3N0KFtzdGF0dXM9bmV1dHJhbF0pey0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDAsICM0ZjYxNjkpKX06aG9zdChbaW52ZXJz''@;'; put 'put ''ZV0pey0tY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwLCAjY2JkNGQ4KX06aG9zdChbZGlyZWN0aW9uPXVwXSl7dHJhbnNmb3JtOnJvdGF0ZSgwKX06aG9zdChbZGlyZWN0aW9uPWRvd25dKXt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZyl9Omhvc3QoW2RpcmVj''@;'; put 'put ''dGlvbj1yaWdodF0pe3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfTpob3N0KFtkaXJlY3Rpb249bGVmdF0pe3RyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKX06aG9zdChbZmxpcD1ob3Jpem9udGFsXSl7dHJhbnNmb3JtOnNjYWxlKC0xKSByb3RhdGVYKDE4MGRlZyl9Omhvc3QoW2ZsaXA9dmVydGlj''@;'; put 'put ''YWxdKXt0cmFuc2Zvcm06c2NhbGUoLTEpIHJvdGF0ZVkoMTgwZGVnKX0uYWxlcnQsLmJhZGdle2ZpbGw6dmFyKC0tYmFkZ2UtY29sb3IsdmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwLCNlMDIyMDApKSl9Omhvc3QoW2JhZGdlPXN1''@;'; put 'put ''Y2Nlc3NdKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2VzcywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi03MDAsICM0MjgxMGUpKX06aG9zdChbYmFkZ2U9ZGFuZ2VyXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlciwg''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwLCAjZTAyMjAwKSl9Omhvc3QoW2JhZGdlKj13YXJuaW5nXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyaywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS04MDAsICNhMzY1MDApKX06aG9z''@;'; put 'put ''dChbYmFkZ2U9aW5oZXJpdF0pey0tYmFkZ2UtY29sb3I6Y3VycmVudENvbG9yfTpob3N0KFtiYWRnZT1pbmZvXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8sIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDAsICMwMDc5YWQpKX06aG9zdChbYmFkZ2U9''@;'; put 'put ''bmV1dHJhbF0pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDAsICM0ZjYxNjkpKX06aG9zdChbYmFkZ2U9aW5oZXJpdC10cmlhbmdsZV0pey0tYmFkZ2UtY29sb3I6Y3VycmVudENvbG9y''@;'; put 'put ''fTpob3N0KFtiYWRnZV1baW52ZXJzZV0pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCwgI2UwMjIwMCkpfTpob3N0KFtiYWRnZT1zdWNjZXNzXVtpbnZlcnNlXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwLCAjNDI4MTBlKSl9Omhvc3QoW2JhZGdlKj13YXJuaW5nXVtpbnZlcnNlXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyaywgdmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1vY2hyZS04MDAsICNhMzY1MDApKX06aG9zdChbYmFkZ2UqPWluaGVyaXRdW2ludmVyc2VdKXstLWJhZGdlLWNvbG9yOmN1cnJlbnRDb2xvcn06aG9zdChbYmFkZ2U9aW5mb11baW52ZXJzZV0pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvLCB2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwLCAjMDA3OWFkKSl9LmNkcy1pbnRlcm5hbC1kb3QtMXthbmltYXRpb246ZmFkZUluQW5kT3V0IDEuOHMgZWFzZS1pbiAwcyBpbmZpbml0ZX0uY2RzLWludGVybmFsLWRvdC0ye2FuaW1hdGlvbjpmYWRlSW5BbmRPdXQgMS44cyBlYXNlLW91''@;'; put 'put ''dCAuNDIycyBpbmZpbml0ZX0uY2RzLWludGVybmFsLWRvdC0ze2FuaW1hdGlvbjpmYWRlSW5BbmRPdXQgMS44cyBlYXNlLW91dCAuNjc1cyBpbmZpbml0ZX1AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb24pey5jZHMtaW50ZXJuYWwtZG90LTEsLmNkcy1pbnRlcm5hbC1kb3QtMiwuY2Rz''@;'; put 'put ''LWludGVybmFsLWRvdC0ze2FuaW1hdGlvbjpub25lfX1gO2NvbnN0IE9EZT1bInVua25vd24iLHtvdXRsaW5lOic8Y2lyY2xlIGNsYXNzPSJjZHMtaW50ZXJuYWwtZG90LTMiIGN4PSIzMS4xIiBjeT0iMTgiIHI9IjIuOSIvPjxjaXJjbGUgY2xhc3M9ImNkcy1pbnRlcm5hbC1kb3QtMiIgY3g9''@;'; put 'put ''IjE4IiBjeT0iMTgiIHI9IjIuOSIvPjxjaXJjbGUgY2xhc3M9ImNkcy1pbnRlcm5hbC1kb3QtMSIgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiLz4nfV07Y2xhc3MgTnN7c3RhdGljIGdldCByZWdpc3RyeSgpe3JldHVybnt1bmtub3duOk9EZVsxXSwuLi5MMy5zdGF0ZS5pY29uUmVnaXN0cnl9''@;'; put 'put ''fXN0YXRpYyBhZGRJY29ucyguLi5sKXtMMy5zdGF0ZS5pY29uUmVnaXN0cnk9ey4uLkwzLnN0YXRlLmljb25SZWdpc3RyeSwuLi5PYmplY3QuZnJvbUVudHJpZXMobC5maWx0ZXIoKFthXSk9PiFOcy5yZWdpc3RyeVthXSkpfX1zdGF0aWMgYWRkQWxpYXNlcyguLi5sKXtjb25zdCBhPWwuZmls''@;'; put 'put ''dGVyKChbZF0pPT5Ocy5yZWdpc3RyeVtkXSkuZmxhdE1hcCgoW2QsaF0pPT5oLm1hcChmPT5bZixOcy5yZWdpc3RyeVtkXV0pKTtMMy5zdGF0ZS5pY29uUmVnaXN0cnk9ey4uLkwzLnN0YXRlLmljb25SZWdpc3RyeSwuLi5PYmplY3QuZnJvbUVudHJpZXMoYSl9fXN0YXRpYyBnZXRJY29uTmFt''@;'; put 'put ''ZUZyb21TaGFwZShsKXtyZXR1cm4gbFswXX19dmFyIHU0LGM7ZnVuY3Rpb24gTkRlKGMsbCl7bGV0IGE9IiI7c3dpdGNoKGZ1bmN0aW9uIFBEZShjKXtzd2l0Y2goITApe2Nhc2UgekUoYyk6cmV0dXJuIHU0Lk5pbFNpemVWYWx1ZTtjYXNlIGZ1bmN0aW9uIGMxZShjKXtyZXR1cm5bInh4cyIs''@;'; put 'put ''InhzIiwic20iLCJtZCIsImxnIiwieGwiLCJ4eGwiXS5pbmRleE9mKGMpPi0xfShjKTpyZXR1cm4gdTQuVmFsaWRTaXplU3RyaW5nO2Nhc2UgZnVuY3Rpb24gbzBlKGMpe3JldHVybiBIRyhjKSYmIWEwZShjLnRyaW0oKSkmJitjPT0rY30oYyk6cmV0dXJuIHU0LlZhbGlkTnVtZXJpY1N0cmlu''@;'; put 'put ''ZztkZWZhdWx0OnJldHVybiB1NC5CYWRTaXplVmFsdWV9fShmdW5jdGlvbiBGRGUoYyl7cmV0dXJuIHpFKGMpPyIiOmZ1bmN0aW9uIGtrZShjLGwsYT0iIil7Y29uc3QgZD1jLnNwbGl0KCIgIiksaD0iIj09PWE/ZC5maWx0ZXIoZj0+ZiE9PWwpOmQubWFwKGY9PmY9PT1sP2E6Zik7cmV0dXJu''@;'; put 'put ''IGgubGVuZ3RoPjA/aC5qb2luKCIgIik6IiJ9KGMsImZpdCIpfShsKSkpe2Nhc2UgdTQuVmFsaWROdW1lcmljU3RyaW5nOnJldHVybiBhPWEkKHBhcnNlSW50KGwpKSx2b2lkIGZ1bmN0aW9uIHlEZShjLC4uLmwpe2wuZm9yRWFjaCgoW2EsZF0pPT57Yy5zdHlsZVthXT1kfSl9KGMsLi4uZnVu''@;'; put 'put ''Y3Rpb24gSERlKGMsbCl7cmV0dXJuIWpFKGMpJiZjLmluZGV4T2YoImZpdCIpPi0xP1tbIndpZHRoIiwiYXV0byJdLFsiaGVpZ2h0IiwiYXV0byJdLFsibWluLXdpZHRoIixsXSxbIm1pbi1oZWlnaHQiLGxdXTpbWyJ3aWR0aCIsbF0sWyJoZWlnaHQiLGxdLFsibWluLXdpZHRoIixsXSxbIm1p''@;'; put 'put ''bi1oZWlnaHQiLGxdXX0obCxhKSk7Y2FzZSB1NC5WYWxpZFNpemVTdHJpbmc6Y2FzZSB1NC5OaWxTaXplVmFsdWU6cmV0dXJuIHZvaWQgZnVuY3Rpb24gYkRlKGMsLi4ubCl7bC5mb3JFYWNoKGE9PntjLnN0eWxlW2FdPSIifSl9KGMsIndpZHRoIiwiaGVpZ2h0IiwibWluLXdpZHRoIiwibWlu''@;'; put 'put ''LWhlaWdodCIpO2RlZmF1bHQ6cmV0dXJufX1mdW5jdGlvbiBzJChjKXtyZXR1cm4gYy5iYWRnZSYmKCJpbmhlcml0LXRyaWFuZ2xlIj09PWMuYmFkZ2V8fCJ3YXJuaW5nLXRyaWFuZ2xlIj09PWMuYmFkZ2UpfShjPXU0fHwodTQ9e30pKS5CYWRTaXplVmFsdWU9ImJhZC12YWx1ZSIsYy5WYWxp''@;'; put 'put ''ZFNpemVTdHJpbmc9InZhbHVlLWlzLXN0cmluZyIsYy5WYWxpZE51bWVyaWNTdHJpbmc9InZhbHVlLWlzLW51bWVyaWMiLGMuTmlsU2l6ZVZhbHVlPSJ2YWx1ZS1pcy1uaWwiO2NsYXNzIE8zIGV4dGVuZHMgS0V7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3NoYXBl''@;'; put 'put ''PSJ1bmtub3duIix0aGlzLnNvbGlkPSExLHRoaXMuaW52ZXJzZT0hMX1zdGF0aWMgZ2V0IHN0eWxlcygpe3JldHVyblttRGUsTERlXX1nZXQgc2hhcGUoKXtyZXR1cm4gdGhpcy5fc2hhcGV9c2V0IHNoYXBlKGwpe2lmKGZ1bmN0aW9uIGNrZShjLGwpe3JldHVybiF6RShjKSYmbDBlKGMsbCl9''@;'; put 'put ''KGwsdGhpcy5fc2hhcGUpKXtjb25zdCBhPXRoaXMuX3NoYXBlO3RoaXMuX3NoYXBlPWwsdGhpcy5yZXF1ZXN0VXBkYXRlKCJzaGFwZSIsYSl9fWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3NpemV9c2V0IHNpemUobCl7aWYoZnVuY3Rpb24gbGtlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uIHNrZShj''@;'; put 'put ''KXtyZXR1cm4gJHVlKFN0cmluZyxjKXx8akUoYyl9KGMpJiZsMGUoYyxsKX0obCx0aGlzLl9zaXplKSl7Y29uc3QgYT10aGlzLl9zaXplO3RoaXMuX3NpemU9bCxORGUodGhpcyxsKSx0aGlzLnJlcXVlc3RVcGRhdGUoInNpemUiLGEpfX11cGRhdGVkKGwpe2lmKGwuaGFzKCJpbm5lck9mZnNl''@;'; put 'put ''dCIpJiZ0aGlzLmlubmVyT2Zmc2V0PjApe2NvbnN0IGE9YSQoLTEqdGhpcy5pbm5lck9mZnNldCksZD1gY2FsYygxMDAlICsgJHthJCgyKnRoaXMuaW5uZXJPZmZzZXQpfSlgO3RoaXMuc3ZnLnN0eWxlLndpZHRoPWQsdGhpcy5zdmcuc3R5bGUuaGVpZ2h0PWQsdGhpcy5zdmcuc3R5bGUubWFy''@;'; put 'put ''Z2luPWAke2F9IDAgMCAke2F9YH19Zmlyc3RVcGRhdGVkKGwpe2lmKHN1cGVyLmZpcnN0VXBkYXRlZChsKSx0aGlzLmlzQ29ubmVjdGVkKXtsZXQgYT0idW5rbm93biI7dGhpcy5zdWJzY3JpcHRpb249TDMuc3RhdGVVcGRhdGVzLnN1YnNjcmliZShkPT57Imljb25SZWdpc3RyeSI9PT1kLmtl''@;'; put 'put ''eSYmTnMucmVnaXN0cnlbdGhpcy5zaGFwZV0mJmEhPT10aGlzLnNoYXBlJiYoYT10aGlzLnNoYXBlLHRoaXMucmVxdWVzdFVwZGF0ZSgic2hhcGUiKSl9KX19ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuc3Vic2NyaXB0aW9uPy51bnN1''@;'; put 'put ''YnNjcmliZSgpfXJlbmRlcigpe3JldHVybiBIRyhOcy5yZWdpc3RyeVt0aGlzLnNoYXBlXSk/ZERlYDxzcGFuIC5pbm5lckhUTUw9IiR7TnMucmVnaXN0cnlbdGhpcy5zaGFwZV19Ij48L3NwYW4+YDpoRGVgPHN2ZyAuaW5uZXJIVE1MPSIke2Z1bmN0aW9uIEJEZShjKXtjb25zdCBsPU5zLnJl''@;'; put 'put ''Z2lzdHJ5W2Muc2hhcGVdPz9Ocy5yZWdpc3RyeS51bmtub3duO2xldCBhPWMuc29saWQmJmwuc29saWQ/bC5zb2xpZDpsLm91dGxpbmU7cmV0dXJuIGMuYmFkZ2UmJiFzJChjKSYmKGE9Yy5zb2xpZD9sLnNvbGlkQmFkZ2VkPz9hOmwub3V0bGluZUJhZGdlZD8/YSkscyQoYykmJihhPWMuc29s''@;'; put 'put ''aWQ/bC5zb2xpZEFsZXJ0ZWQ/P2E6bC5vdXRsaW5lQWxlcnRlZD8/YSksYX0odGhpcykrZnVuY3Rpb24gVkRlKGMpe2xldCBsPSIiO3JldHVybiBjLmJhZGdlJiZzJChjKT9sPSc8cGF0aCBkPSJNMjYuODUgMS4xNEwyMS4xMyAxMWExLjI4IDEuMjggMCAwMDEuMSAyaDExLjQ1YTEuMjggMS4y''@;'; put 'put ''OCAwIDAwMS4xLTJsLTUuNzItOS44NmExLjI4IDEuMjggMCAwMC0yLjIxIDB6IiBjbGFzcz0iYWxlcnQiIC8+JzpjLmJhZGdlJiYobD0nPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iYmFkZ2UiIC8+JyksbH0odGhpcyl9IiB2aWV3Qm94PSIwIDAgMzYgMzYiIHhtbG5zPSJo''@;'; put 'put ''dHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgYXJpYS1oaWRkZW49InRydWUiPjwvc3ZnPmB9fWZ1bmN0aW9uIFhFKGMpe3JldHVybiEhYyYmKGMgaW5zdGFuY2VvZiBSaXx8bmkoYy5saWZ0KSYmbmkoYy5zdWJzY3JpYmUpKX1SMyhbSm0oe3R5cGU6U3RyaW5nfSldLE8zLnByb3RvdHlwZSwi''@;'; put 'put ''c2hhcGUiLG51bGwpLFIzKFtKbSh7dHlwZTpTdHJpbmd9KV0sTzMucHJvdG90eXBlLCJzaXplIixudWxsKSxSMyhbSm0oe3R5cGU6U3RyaW5nfSldLE8zLnByb3RvdHlwZSwiZGlyZWN0aW9uIix2b2lkIDApLFIzKFtKbSh7dHlwZTpTdHJpbmd9KV0sTzMucHJvdG90eXBlLCJmbGlwIix2b2lk''@;'; put 'put ''IDApLFIzKFtKbSh7dHlwZTpCb29sZWFufSldLE8zLnByb3RvdHlwZSwic29saWQiLHZvaWQgMCksUjMoW0ptKHt0eXBlOlN0cmluZ30pXSxPMy5wcm90b3R5cGUsInN0YXR1cyIsdm9pZCAwKSxSMyhbSm0oe3R5cGU6Qm9vbGVhbn0pXSxPMy5wcm90b3R5cGUsImludmVyc2UiLHZvaWQgMCks''@;'; put 'put ''UjMoW0ptKHt0eXBlOlN0cmluZ30pXSxPMy5wcm90b3R5cGUsImJhZGdlIix2b2lkIDApLFIzKFtmdW5jdGlvbiBERGUoYyl7cmV0dXJuKGwsYSk9Pntjb25zdCBkPWwxZShhLGMpO3JldHVybiBkJiYoZC5yZWZsZWN0PSEhYz8ucmVmbGVjdCYmYy5yZWZsZWN0LGQucmVmbGVjdCYmIWM/LmF0''@;'; put 'put ''dHJpYnV0ZSYmKGQuYXR0cmlidXRlPSJfIitRNyhhKSkpLGExZShkKShsLGEpfX0oe3R5cGU6TnVtYmVyfSldLE8zLnByb3RvdHlwZSwiaW5uZXJPZmZzZXQiLHZvaWQgMCksUjMoW2Z1bmN0aW9uIFJEZShjLGwpe3JldHVybigoe2ZpbmlzaGVyOmMsZGVzY3JpcHRvcjpsfSk9PihhLGQpPT57''@;'; put 'put ''dmFyIGg7aWYodm9pZCAwPT09ZCl7Y29uc3QgZj1udWxsIT09KGg9YS5vcmlnaW5hbEtleSkmJnZvaWQgMCE9PWg/aDphLmtleSx2PW51bGwhPWw/e2tpbmQ6Im1ldGhvZCIscGxhY2VtZW50OiJwcm90b3R5cGUiLGtleTpmLGRlc2NyaXB0b3I6bChhLmtleSl9OnsuLi5hLGtleTpmfTtyZXR1''@;'; put 'put ''cm4gbnVsbCE9YyYmKHYuZmluaXNoZXI9ZnVuY3Rpb24oTSl7YyhNLGYpfSksdn17Y29uc3QgZj1hLmNvbnN0cnVjdG9yO3ZvaWQgMCE9PWwmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGQsbChkKSksYz8uKGYsZCl9fSkoe2Rlc2NyaXB0b3I6YT0+e2NvbnN0IGQ9e2dldCgpe3ZhciBoLGY7''@;'; put 'put ''cmV0dXJuIG51bGwhPT0oZj1udWxsPT09KGg9dGhpcy5yZW5kZXJSb290KXx8dm9pZCAwPT09aD92b2lkIDA6aC5xdWVyeVNlbGVjdG9yKGMpKSYmdm9pZCAwIT09Zj9mOm51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfTtpZihsKXtjb25zdCBoPSJzeW1ib2wiPT10eXBlb2Yg''@;'; put 'put ''YT9TeW1ib2woKToiX18iK2E7ZC5nZXQ9ZnVuY3Rpb24oKXt2YXIgZix2O3JldHVybiB2b2lkIDA9PT10aGlzW2hdJiYodGhpc1toXT1udWxsIT09KHY9bnVsbD09PShmPXRoaXMucmVuZGVyUm9vdCl8fHZvaWQgMD09PWY/dm9pZCAwOmYucXVlcnlTZWxlY3RvcihjKSkmJnZvaWQgMCE9PXY/''@;'; put 'put ''djpudWxsKSx0aGlzW2hdfX1yZXR1cm4gZH19KX0oInN2ZyIpXSxPMy5wcm90b3R5cGUsInN2ZyIsdm9pZCAwKSxmdW5jdGlvbiBPa2UoYyxsKXtoMGUoKSYmZjBlKFsiY3VzdG9tRWxlbWVudHMiXSkmJkxrZShjLGwsd2luZG93LmN1c3RvbUVsZW1lbnRzKX0oImNkcy1pY29uIixPMyk7Y29u''@;'; put 'put ''c3QgbCQ9Yz0+YyYmIm51bWJlciI9PXR5cGVvZiBjLmxlbmd0aCYmImZ1bmN0aW9uIiE9dHlwZW9mIGM7ZnVuY3Rpb24gdTFlKGMpe3JldHVybiBuaShjPy50aGVuKX1mdW5jdGlvbiBkMWUoYyl7cmV0dXJuIG5pKGNbUWldKX1mdW5jdGlvbiBoMWUoYyl7cmV0dXJuIFN5bWJvbC5hc3luY0l0''@;'; put 'put ''ZXJhdG9yJiZuaShjPy5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKX1mdW5jdGlvbiBmMWUoYyl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoYFlvdSBwcm92aWRlZCAke251bGwhPT1jJiYib2JqZWN0Ij09dHlwZW9mIGM/ImFuIGludmFsaWQgb2JqZWN0IjpgJyR7Y30nYH0gd2hlcmUgYSBzdHJlYW0g''@;'; put 'put ''d2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgUmVhZGFibGVTdHJlYW0sIEFycmF5LCBBc3luY0l0ZXJhYmxlLCBvciBJdGVyYWJsZS5gKX1jb25zdCBwMWU9ZnVuY3Rpb24gR0RlKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYm''@;'; put 'put ''U3ltYm9sLml0ZXJhdG9yP1N5bWJvbC5pdGVyYXRvcjoiQEBpdGVyYXRvciJ9KCk7ZnVuY3Rpb24gZzFlKGMpe3JldHVybiBuaShjPy5bcDFlXSl9ZnVuY3Rpb24gbTFlKGMpe3JldHVybiBmdW5jdGlvbiBUMGUoYyxsLGEpe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlw''@;'; put 'put ''ZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgaCxkPWEuYXBwbHkoYyxsfHxbXSksZj1bXTtyZXR1cm4gaD1PYmplY3QuY3JlYXRlKCgiZnVuY3Rpb24iPT10eXBlb2YgQXN5bmNJdGVyYXRvcj9Bc3luY0l0ZXJhdG9yOk9iamVjdCkucHJvdG90eXBl''@;'; put 'put ''KSxNKCJuZXh0IiksTSgidGhyb3ciKSxNKCJyZXR1cm4iLGZ1bmN0aW9uIHYod2Upe3JldHVybiBmdW5jdGlvbihGZSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZShGZSkudGhlbih3ZSxvZSl9fSksaFtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30saDtmdW5j''@;'; put 'put ''dGlvbiBNKHdlLEZlKXtkW3dlXSYmKGhbd2VdPWZ1bmN0aW9uKFdlKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obnQsZHQpe2YucHVzaChbd2UsV2UsbnQsZHRdKT4xfHxEKHdlLFdlKX0pfSxGZSYmKGhbd2VdPUZlKGhbd2VdKSkpfWZ1bmN0aW9uIEQod2UsRmUpe3RyeXshZnVuY3Rp''@;'; put 'put ''b24gVSh3ZSl7d2UudmFsdWUgaW5zdGFuY2VvZiBxbT9Qcm9taXNlLnJlc29sdmUod2UudmFsdWUudikudGhlbih0ZSxvZSk6dmUoZlswXVsyXSx3ZSl9KGRbd2VdKEZlKSl9Y2F0Y2goV2Upe3ZlKGZbMF1bM10sV2UpfX1mdW5jdGlvbiB0ZSh3ZSl7RCgibmV4dCIsd2UpfWZ1bmN0aW9uIG9l''@;'; put 'put ''KHdlKXtEKCJ0aHJvdyIsd2UpfWZ1bmN0aW9uIHZlKHdlLEZlKXt3ZShGZSksZi5zaGlmdCgpLGYubGVuZ3RoJiZEKGZbMF1bMF0sZlswXVsxXSl9fSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbiooKXtjb25zdCBhPWMuZ2V0UmVhZGVyKCk7dHJ5e2Zvcig7Oyl7Y29uc3R7dmFsdWU6ZCxkb25l''@;'; put 'put ''Omh9PXlpZWxkIHFtKGEucmVhZCgpKTtpZihoKXJldHVybiB5aWVsZCBxbSh2b2lkIDApO3lpZWxkIHlpZWxkIHFtKGQpfX1maW5hbGx5e2EucmVsZWFzZUxvY2soKX19KX1mdW5jdGlvbiB2MWUoYyl7cmV0dXJuIG5pKGM/LmdldFJlYWRlcil9ZnVuY3Rpb24gUjEoYyl7aWYoYyBpbnN0YW5j''@;'; put 'put ''ZW9mIFJpKXJldHVybiBjO2lmKG51bGwhPWMpe2lmKGQxZShjKSlyZXR1cm4gZnVuY3Rpb24gJERlKGMpe3JldHVybiBuZXcgUmkobD0+e2NvbnN0IGE9Y1tRaV0oKTtpZihuaShhLnN1YnNjcmliZSkpcmV0dXJuIGEuc3Vic2NyaWJlKGwpO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByb3ZpZGVk''@;'; put 'put ''IG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlIil9KX0oYyk7aWYobCQoYykpcmV0dXJuIGZ1bmN0aW9uIEtEZShjKXtyZXR1cm4gbmV3IFJpKGw9Pntmb3IobGV0IGE9MDthPGMubGVuZ3RoJiYhbC5jbG9zZWQ7YSsrKWwubmV4dChjW2FdKTts''@;'; put 'put ''LmNvbXBsZXRlKCl9KX0oYyk7aWYodTFlKGMpKXJldHVybiBmdW5jdGlvbiBYRGUoYyl7cmV0dXJuIG5ldyBSaShsPT57Yy50aGVuKGE9PntsLmNsb3NlZHx8KGwubmV4dChhKSxsLmNvbXBsZXRlKCkpfSxhPT5sLmVycm9yKGEpKS50aGVuKG51bGwsWWUpfSl9KGMpO2lmKGgxZShjKSlyZXR1''@;'; put 'put ''cm4geTFlKGMpO2lmKGcxZShjKSlyZXR1cm4gZnVuY3Rpb24gcURlKGMpe3JldHVybiBuZXcgUmkobD0+e2Zvcihjb25zdCBhIG9mIGMpaWYobC5uZXh0KGEpLGwuY2xvc2VkKXJldHVybjtsLmNvbXBsZXRlKCl9KX0oYyk7aWYodjFlKGMpKXJldHVybiBmdW5jdGlvbiBKRGUoYyl7cmV0dXJu''@;'; put 'put ''IHkxZShtMWUoYykpfShjKX10aHJvdyBmMWUoYyl9ZnVuY3Rpb24geTFlKGMpe3JldHVybiBuZXcgUmkobD0+eyhmdW5jdGlvbiBRRGUoYyxsKXt2YXIgYSxkLGgsZjtyZXR1cm4gZnVuY3Rpb24geDBlKGMsbCxhLGQpe3JldHVybiBuZXcoYXx8KGE9UHJvbWlzZSkpKGZ1bmN0aW9uKGYsdil7''@;'; put 'put ''ZnVuY3Rpb24gTSh0ZSl7dHJ5e1UoZC5uZXh0KHRlKSl9Y2F0Y2gob2Upe3Yob2UpfX1mdW5jdGlvbiBEKHRlKXt0cnl7VShkLnRocm93KHRlKSl9Y2F0Y2gob2Upe3Yob2UpfX1mdW5jdGlvbiBVKHRlKXt0ZS5kb25lP2YodGUudmFsdWUpOmZ1bmN0aW9uIGgoZil7cmV0dXJuIGYgaW5zdGFu''@;'; put 'put ''Y2VvZiBhP2Y6bmV3IGEoZnVuY3Rpb24odil7dihmKX0pfSh0ZS52YWx1ZSkudGhlbihNLEQpfVUoKGQ9ZC5hcHBseShjLGx8fFtdKSkubmV4dCgpKX0pfSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dHJ5e2ZvcihhPUEwZShjKTshKGQ9eWllbGQgYS5uZXh0KCkpLmRvbmU7KWlm''@;'; put 'put ''KGwubmV4dChkLnZhbHVlKSxsLmNsb3NlZClyZXR1cm59Y2F0Y2godil7aD17ZXJyb3I6dn19ZmluYWxseXt0cnl7ZCYmIWQuZG9uZSYmKGY9YS5yZXR1cm4pJiYoeWllbGQgZi5jYWxsKGEpKX1maW5hbGx5e2lmKGgpdGhyb3cgaC5lcnJvcn19bC5jb21wbGV0ZSgpfSl9KShjLGwpLmNhdGNo''@;'; put 'put ''KGE9PmwuZXJyb3IoYSkpfSl9ZnVuY3Rpb24gSmcoYyxsLGEsZD0wLGg9ITEpe2NvbnN0IGY9bC5zY2hlZHVsZShmdW5jdGlvbigpe2EoKSxoP2MuYWRkKHRoaXMuc2NoZWR1bGUobnVsbCxkKSk6dGhpcy51bnN1YnNjcmliZSgpfSxkKTtpZihjLmFkZChmKSwhaClyZXR1cm4gZn1mdW5jdGlv''@;'; put 'put ''biBiMWUoYyxsPTApe3JldHVybiBlYSgoYSxkKT0+e2Euc3Vic2NyaWJlKEZyKGQsaD0+SmcoZCxjLCgpPT5kLm5leHQoaCksbCksKCk9PkpnKGQsYywoKT0+ZC5jb21wbGV0ZSgpLGwpLGg9PkpnKGQsYywoKT0+ZC5lcnJvcihoKSxsKSkpfSl9ZnVuY3Rpb24gXzFlKGMsbD0wKXtyZXR1cm4g''@;'; put 'put ''ZWEoKGEsZCk9PntkLmFkZChjLnNjaGVkdWxlKCgpPT5hLnN1YnNjcmliZShkKSxsKSl9KX1mdW5jdGlvbiB3MWUoYyxsKXtpZighYyl0aHJvdyBuZXcgRXJyb3IoIkl0ZXJhYmxlIGNhbm5vdCBiZSBudWxsIik7cmV0dXJuIG5ldyBSaShhPT57SmcoYSxsLCgpPT57Y29uc3QgZD1jW1N5bWJv''@;'; put 'put ''bC5hc3luY0l0ZXJhdG9yXSgpO0pnKGEsbCwoKT0+e2QubmV4dCgpLnRoZW4oaD0+e2guZG9uZT9hLmNvbXBsZXRlKCk6YS5uZXh0KGgudmFsdWUpfSl9LDAsITApfSl9KX1mdW5jdGlvbiBlMChjLGwpe3JldHVybiBsP2Z1bmN0aW9uIGFJZShjLGwpe2lmKG51bGwhPWMpe2lmKGQxZShjKSly''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24gZUllKGMsbCl7cmV0dXJuIFIxKGMpLnBpcGUoXzFlKGwpLGIxZShsKSl9KGMsbCk7aWYobCQoYykpcmV0dXJuIGZ1bmN0aW9uIG5JZShjLGwpe3JldHVybiBuZXcgUmkoYT0+e2xldCBkPTA7cmV0dXJuIGwuc2NoZWR1bGUoZnVuY3Rpb24oKXtkPT09Yy5sZW5ndGg/''@;'; put 'put ''YS5jb21wbGV0ZSgpOihhLm5leHQoY1tkKytdKSxhLmNsb3NlZHx8dGhpcy5zY2hlZHVsZSgpKX0pfSl9KGMsbCk7aWYodTFlKGMpKXJldHVybiBmdW5jdGlvbiB0SWUoYyxsKXtyZXR1cm4gUjEoYykucGlwZShfMWUobCksYjFlKGwpKX0oYyxsKTtpZihoMWUoYykpcmV0dXJuIHcxZShjLGwp''@;'; put 'put ''O2lmKGcxZShjKSlyZXR1cm4gZnVuY3Rpb24gckllKGMsbCl7cmV0dXJuIG5ldyBSaShhPT57bGV0IGQ7cmV0dXJuIEpnKGEsbCwoKT0+e2Q9Y1twMWVdKCksSmcoYSxsLCgpPT57bGV0IGgsZjt0cnl7KHt2YWx1ZTpoLGRvbmU6Zn09ZC5uZXh0KCkpfWNhdGNoKHYpe3JldHVybiB2b2lkIGEu''@;'; put 'put ''ZXJyb3Iodil9Zj9hLmNvbXBsZXRlKCk6YS5uZXh0KGgpfSwwLCEwKX0pLCgpPT5uaShkPy5yZXR1cm4pJiZkLnJldHVybigpfSl9KGMsbCk7aWYodjFlKGMpKXJldHVybiBmdW5jdGlvbiBpSWUoYyxsKXtyZXR1cm4gdzFlKG0xZShjKSxsKX0oYyxsKX10aHJvdyBmMWUoYyl9KGMsbCk6UjEo''@;'; put 'put ''Yyl9ZnVuY3Rpb24gQzFlKGMpe3JldHVybiBjJiZuaShjLnNjaGVkdWxlKX1mdW5jdGlvbiBjJChjKXtyZXR1cm4gY1tjLmxlbmd0aC0xXX1mdW5jdGlvbiBTMWUoYyl7cmV0dXJuIG5pKGMkKGMpKT9jLnBvcCgpOnZvaWQgMH1mdW5jdGlvbiBxRShjKXtyZXR1cm4gQzFlKGMkKGMpKT9jLnBv''@;'; put 'put ''cCgpOnZvaWQgMH1mdW5jdGlvbiBfbyguLi5jKXtyZXR1cm4gZTAoYyxxRShjKSl9Y29uc3R7aXNBcnJheTpzSWV9PUFycmF5LHtnZXRQcm90b3R5cGVPZjpsSWUscHJvdG90eXBlOmNJZSxrZXlzOnVJZX09T2JqZWN0O2Z1bmN0aW9uIE0xZShjKXtpZigxPT09Yy5sZW5ndGgpe2NvbnN0IGw9''@;'; put 'put ''Y1swXTtpZihzSWUobCkpcmV0dXJue2FyZ3M6bCxrZXlzOm51bGx9O2lmKGZ1bmN0aW9uIGRJZShjKXtyZXR1cm4gYyYmIm9iamVjdCI9PXR5cGVvZiBjJiZsSWUoYyk9PT1jSWV9KGwpKXtjb25zdCBhPXVJZShsKTtyZXR1cm57YXJnczphLm1hcChkPT5sW2RdKSxrZXlzOmF9fX1yZXR1cm57''@;'; put 'put ''YXJnczpjLGtleXM6bnVsbH19Y29uc3R7aXNBcnJheTpoSWV9PUFycmF5O2Z1bmN0aW9uIHUkKGMpe3JldHVybiBZYShsPT5mdW5jdGlvbiBmSWUoYyxsKXtyZXR1cm4gaEllKGwpP2MoLi4ubCk6YyhsKX0oYyxsKSl9ZnVuY3Rpb24geDFlKGMsbCl7cmV0dXJuIGMucmVkdWNlKChhLGQsaCk9''@;'; put 'put ''PihhW2RdPWxbaF0sYSkse30pfWZ1bmN0aW9uIGk5KC4uLmMpe2NvbnN0IGw9cUUoYyksYT1TMWUoYykse2FyZ3M6ZCxrZXlzOmh9PU0xZShjKTtpZigwPT09ZC5sZW5ndGgpcmV0dXJuIGUwKFtdLGwpO2NvbnN0IGY9bmV3IFJpKGZ1bmN0aW9uIHBJZShjLGwsYT1WaSl7cmV0dXJuIGQ9PntF''@;'; put 'put ''MWUobCwoKT0+e2NvbnN0e2xlbmd0aDpofT1jLGY9bmV3IEFycmF5KGgpO2xldCB2PWgsTT1oO2ZvcihsZXQgRD0wO0Q8aDtEKyspRTFlKGwsKCk9Pntjb25zdCBVPWUwKGNbRF0sbCk7bGV0IHRlPSExO1Uuc3Vic2NyaWJlKEZyKGQsb2U9PntmW0RdPW9lLHRlfHwodGU9ITAsTS0tKSxNfHxk''@;'; put 'put ''Lm5leHQoYShmLnNsaWNlKCkpKX0sKCk9PnstLXZ8fGQuY29tcGxldGUoKX0pKX0sZCl9LGQpfX0oZCxsLGg/dj0+eDFlKGgsdik6VmkpKTtyZXR1cm4gYT9mLnBpcGUodSQoYSkpOmZ9ZnVuY3Rpb24gRTFlKGMsbCxhKXtjP0pnKGEsYyxsKTpsKCl9Y29uc3QgelA9aG4oYz0+ZnVuY3Rpb24o''@;'; put 'put ''KXtjKHRoaXMpLHRoaXMubmFtZT0iRW1wdHlFcnJvciIsdGhpcy5tZXNzYWdlPSJubyBlbGVtZW50cyBpbiBzZXF1ZW5jZSJ9KTtmdW5jdGlvbiBzMShjLGwsYT0xLzApe3JldHVybiBuaShsKT9zMSgoZCxoKT0+WWEoKGYsdik9PmwoZCxmLGgsdikpKFIxKGMoZCxoKSkpLGEpOigibnVtYmVy''@;'; put 'put ''Ij09dHlwZW9mIGwmJihhPWwpLGVhKChkLGgpPT5mdW5jdGlvbiBnSWUoYyxsLGEsZCxoLGYsdixNKXtjb25zdCBEPVtdO2xldCBVPTAsdGU9MCxvZT0hMTtjb25zdCB2ZT0oKT0+e29lJiYhRC5sZW5ndGgmJiFVJiZsLmNvbXBsZXRlKCl9LHdlPVdlPT5VPGQ/RmUoV2UpOkQucHVzaChXZSks''@;'; put 'put ''RmU9V2U9PntmJiZsLm5leHQoV2UpLFUrKztsZXQgbnQ9ITE7UjEoYShXZSx0ZSsrKSkuc3Vic2NyaWJlKEZyKGwsZHQ9PntoPy4oZHQpLGY/d2UoZHQpOmwubmV4dChkdCl9LCgpPT57bnQ9ITB9LHZvaWQgMCwoKT0+e2lmKG50KXRyeXtmb3IoVS0tO0QubGVuZ3RoJiZVPGQ7KXtjb25zdCBk''@;'; put 'put ''dD1ELnNoaWZ0KCk7dj9KZyhsLHYsKCk9PkZlKGR0KSk6RmUoZHQpfXZlKCl9Y2F0Y2goZHQpe2wuZXJyb3IoZHQpfX0pKX07cmV0dXJuIGMuc3Vic2NyaWJlKEZyKGwsd2UsKCk9PntvZT0hMCx2ZSgpfSkpLCgpPT57TT8uKCl9fShkLGgsYyxhKSkpfWZ1bmN0aW9uIE9fKGM9MS8wKXtyZXR1''@;'; put 'put ''cm4gczEoVmksYyl9ZnVuY3Rpb24gZCQoLi4uYyl7cmV0dXJuIGZ1bmN0aW9uIG1JZSgpe3JldHVybiBPXygxKX0oKShlMChjLHFFKGMpKSl9ZnVuY3Rpb24gVDFlKGMpe3JldHVybiBuZXcgUmkobD0+e1IxKGMoKSkuc3Vic2NyaWJlKGwpfSl9ZnVuY3Rpb24gSkUoYyxsKXtjb25zdCBhPW5p''@;'; put 'put ''KGMpP2M6KCk9PmMsZD1oPT5oLmVycm9yKGEoKSk7cmV0dXJuIG5ldyBSaShsP2g9Pmwuc2NoZWR1bGUoZCwwLGgpOmQpfWNvbnN0IGwyPW5ldyBSaShjPT5jLmNvbXBsZXRlKCkpO2Z1bmN0aW9uIGgkKCl7cmV0dXJuIGVhKChjLGwpPT57bGV0IGE9bnVsbDtjLl9yZWZDb3VudCsrO2NvbnN0''@;'; put 'put ''IGQ9RnIobCx2b2lkIDAsdm9pZCAwLHZvaWQgMCwoKT0+e2lmKCFjfHxjLl9yZWZDb3VudDw9MHx8MDwtLWMuX3JlZkNvdW50KXJldHVybiB2b2lkKGE9bnVsbCk7Y29uc3QgaD1jLl9jb25uZWN0aW9uLGY9YTthPW51bGwsaCYmKCFmfHxoPT09ZikmJmgudW5zdWJzY3JpYmUoKSxsLnVuc3Vi''@;'; put 'put ''c2NyaWJlKCl9KTtjLnN1YnNjcmliZShkKSxkLmNsb3NlZHx8KGE9Yy5jb25uZWN0KCkpfSl9Y2xhc3MgZiQgZXh0ZW5kcyBSaXtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKCksdGhpcy5zb3VyY2U9bCx0aGlzLnN1YmplY3RGYWN0b3J5PWEsdGhpcy5fc3ViamVjdD1udWxsLHRoaXMuX3JlZkNv''@;'; put 'put ''dW50PTAsdGhpcy5fY29ubmVjdGlvbj1udWxsLHdhKGwpJiYodGhpcy5saWZ0PWwubGlmdCl9X3N1YnNjcmliZShsKXtyZXR1cm4gdGhpcy5nZXRTdWJqZWN0KCkuc3Vic2NyaWJlKGwpfWdldFN1YmplY3QoKXtjb25zdCBsPXRoaXMuX3N1YmplY3Q7cmV0dXJuKCFsfHxsLmlzU3RvcHBlZCkm''@;'; put 'put ''Jih0aGlzLl9zdWJqZWN0PXRoaXMuc3ViamVjdEZhY3RvcnkoKSksdGhpcy5fc3ViamVjdH1fdGVhcmRvd24oKXt0aGlzLl9yZWZDb3VudD0wO2NvbnN0e19jb25uZWN0aW9uOmx9PXRoaXM7dGhpcy5fc3ViamVjdD10aGlzLl9jb25uZWN0aW9uPW51bGwsbD8udW5zdWJzY3JpYmUoKX1jb25u''@;'; put 'put ''ZWN0KCl7bGV0IGw9dGhpcy5fY29ubmVjdGlvbjtpZighbCl7bD10aGlzLl9jb25uZWN0aW9uPW5ldyBCdDtjb25zdCBhPXRoaXMuZ2V0U3ViamVjdCgpO2wuYWRkKHRoaXMuc291cmNlLnN1YnNjcmliZShGcihhLHZvaWQgMCwoKT0+e3RoaXMuX3RlYXJkb3duKCksYS5jb21wbGV0ZSgpfSxk''@;'; put 'put ''PT57dGhpcy5fdGVhcmRvd24oKSxhLmVycm9yKGQpfSwoKT0+dGhpcy5fdGVhcmRvd24oKSkpKSxsLmNsb3NlZCYmKHRoaXMuX2Nvbm5lY3Rpb249bnVsbCxsPUJ0LkVNUFRZKX1yZXR1cm4gbH1yZWZDb3VudCgpe3JldHVybiBoJCgpKHRoaXMpfX1mdW5jdGlvbiBiZChjLGwpe3JldHVybiBl''@;'; put 'put ''YSgoYSxkKT0+e2xldCBoPW51bGwsZj0wLHY9ITE7Y29uc3QgTT0oKT0+diYmIWgmJmQuY29tcGxldGUoKTthLnN1YnNjcmliZShGcihkLEQ9PntoPy51bnN1YnNjcmliZSgpO2xldCBVPTA7Y29uc3QgdGU9ZisrO1IxKGMoRCx0ZSkpLnN1YnNjcmliZShoPUZyKGQsb2U9PmQubmV4dChsP2wo''@;'; put 'put ''RCxvZSx0ZSxVKyspOm9lKSwoKT0+e2g9bnVsbCxNKCl9KSl9LCgpPT57dj0hMCxNKCl9KSl9KX1mdW5jdGlvbiBQMyhjKXtyZXR1cm4gYzw9MD8oKT0+bDI6ZWEoKGwsYSk9PntsZXQgZD0wO2wuc3Vic2NyaWJlKEZyKGEsaD0+eysrZDw9YyYmKGEubmV4dChoKSxjPD1kJiZhLmNvbXBsZXRl''@;'; put 'put ''KCkpfSkpfSl9ZnVuY3Rpb24gU2YoLi4uYyl7Y29uc3QgbD1xRShjKTtyZXR1cm4gZWEoKGEsZCk9PnsobD9kJChjLGEsbCk6ZCQoYyxhKSkuc3Vic2NyaWJlKGQpfSl9ZnVuY3Rpb24gb2MoYyxsKXtyZXR1cm4gZWEoKGEsZCk9PntsZXQgaD0wO2Euc3Vic2NyaWJlKEZyKGQsZj0+Yy5jYWxs''@;'; put 'put ''KGwsZixoKyspJiZkLm5leHQoZikpKX0pfWZ1bmN0aW9uIFVQKGMpe3JldHVybiBlYSgobCxhKT0+e2xldCBkPSExO2wuc3Vic2NyaWJlKEZyKGEsaD0+e2Q9ITAsYS5uZXh0KGgpfSwoKT0+e2R8fGEubmV4dChjKSxhLmNvbXBsZXRlKCl9KSl9KX1mdW5jdGlvbiBBMWUoYz15SWUpe3JldHVy''@;'; put 'put ''biBlYSgobCxhKT0+e2xldCBkPSExO2wuc3Vic2NyaWJlKEZyKGEsaD0+e2Q9ITAsYS5uZXh0KGgpfSwoKT0+ZD9hLmNvbXBsZXRlKCk6YS5lcnJvcihjKCkpKSl9KX1mdW5jdGlvbiB5SWUoKXtyZXR1cm4gbmV3IHpQfWZ1bmN0aW9uIFFtKGMsbCl7Y29uc3QgYT1hcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''Pj0yO3JldHVybiBkPT5kLnBpcGUoYz9vYygoaCxmKT0+YyhoLGYsZCkpOlZpLFAzKDEpLGE/VVAobCk6QTFlKCgpPT5uZXcgelApKX1mdW5jdGlvbiBQXyhjLGwpe3JldHVybiBuaShsKT9zMShjLGwsMSk6czEoYywxKX1mdW5jdGlvbiBNMChjLGwsYSl7Y29uc3QgZD1uaShjKXx8bHx8YT97''@;'; put 'put ''bmV4dDpjLGVycm9yOmwsY29tcGxldGU6YX06YztyZXR1cm4gZD9lYSgoaCxmKT0+e3ZhciB2O251bGw9PT0odj1kLnN1YnNjcmliZSl8fHZvaWQgMD09PXZ8fHYuY2FsbChkKTtsZXQgTT0hMDtoLnN1YnNjcmliZShGcihmLEQ9Pnt2YXIgVTtudWxsPT09KFU9ZC5uZXh0KXx8dm9pZCAwPT09''@;'; put 'put ''VXx8VS5jYWxsKGQsRCksZi5uZXh0KEQpfSwoKT0+e3ZhciBEO009ITEsbnVsbD09PShEPWQuY29tcGxldGUpfHx2b2lkIDA9PT1EfHxELmNhbGwoZCksZi5jb21wbGV0ZSgpfSxEPT57dmFyIFU7TT0hMSxudWxsPT09KFU9ZC5lcnJvcil8fHZvaWQgMD09PVV8fFUuY2FsbChkLEQpLGYuZXJy''@;'; put 'put ''b3IoRCl9LCgpPT57dmFyIEQsVTtNJiYobnVsbD09PShEPWQudW5zdWJzY3JpYmUpfHx2b2lkIDA9PT1EfHxELmNhbGwoZCkpLG51bGw9PT0oVT1kLmZpbmFsaXplKXx8dm9pZCAwPT09VXx8VS5jYWxsKGQpfSkpfSk6Vml9ZnVuY3Rpb24gYTkoYyl7cmV0dXJuIGVhKChsLGEpPT57bGV0IGYs''@;'; put 'put ''ZD1udWxsLGg9ITE7ZD1sLnN1YnNjcmliZShGcihhLHZvaWQgMCx2b2lkIDAsdj0+e2Y9UjEoYyh2LGE5KGMpKGwpKSksZD8oZC51bnN1YnNjcmliZSgpLGQ9bnVsbCxmLnN1YnNjcmliZShhKSk6aD0hMH0pKSxoJiYoZC51bnN1YnNjcmliZSgpLGQ9bnVsbCxmLnN1YnNjcmliZShhKSl9KX1m''@;'; put 'put ''dW5jdGlvbiBwJChjKXtyZXR1cm4gYzw9MD8oKT0+bDI6ZWEoKGwsYSk9PntsZXQgZD1bXTtsLnN1YnNjcmliZShGcihhLGg9PntkLnB1c2goaCksYzxkLmxlbmd0aCYmZC5zaGlmdCgpfSwoKT0+e2Zvcihjb25zdCBoIG9mIGQpYS5uZXh0KGgpO2EuY29tcGxldGUoKX0sdm9pZCAwLCgpPT57''@;'; put 'put ''ZD1udWxsfSkpfSl9ZnVuY3Rpb24gUUUoYyl7cmV0dXJuIGVhKChsLGEpPT57dHJ5e2wuc3Vic2NyaWJlKGEpfWZpbmFsbHl7YS5hZGQoYyl9fSl9ZnVuY3Rpb24gTDEoYyl7cmV0dXJuIGVhKChsLGEpPT57UjEoYykuc3Vic2NyaWJlKEZyKGEsKCk9PmEuY29tcGxldGUoKSxUdCkpLCFhLmNs''@;'; put 'put ''b3NlZCYmbC5zdWJzY3JpYmUoYSl9KX1sZXQgQ0llPSgoKT0+e2NsYXNzIGN7X2RvYztjb25zdHJ1Y3RvcihhKXt0aGlzLl9kb2M9YX1nZXRUaXRsZSgpe3JldHVybiB0aGlzLl9kb2MudGl0bGV9c2V0VGl0bGUoYSl7dGhpcy5fZG9jLnRpdGxlPWF8fCIifXN0YXRpYyBcdTAyNzVmYWM9ZnVu''@;'; put 'put ''Y3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShIcihHcykpfTtzdGF0aWMgXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpO2NvbnN0IGlzPSJwcmltYXJ5Iix0VD1TeW1ib2woIlJvdXRlVGl0bGUiKTtjbGFz''@;'; put 'put ''cyBFSWV7cGFyYW1zO2NvbnN0cnVjdG9yKGwpe3RoaXMucGFyYW1zPWx8fHt9fWhhcyhsKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMucGFyYW1zLGwpfWdldChsKXtpZih0aGlzLmhhcyhsKSl7Y29uc3QgYT10aGlzLnBhcmFtc1tsXTtyZXR1cm4g''@;'; put 'put ''QXJyYXkuaXNBcnJheShhKT9hWzBdOmF9cmV0dXJuIG51bGx9Z2V0QWxsKGwpe2lmKHRoaXMuaGFzKGwpKXtjb25zdCBhPXRoaXMucGFyYW1zW2xdO3JldHVybiBBcnJheS5pc0FycmF5KGEpP2E6W2FdfXJldHVybltdfWdldCBrZXlzKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucGFyYW1z''@;'; put 'put ''KX19ZnVuY3Rpb24gRl8oYyl7cmV0dXJuIG5ldyBFSWUoYyl9ZnVuY3Rpb24gVEllKGMsbCxhKXtjb25zdCBkPWEucGF0aC5zcGxpdCgiLyIpO2lmKGQubGVuZ3RoPmMubGVuZ3RofHwiZnVsbCI9PT1hLnBhdGhNYXRjaCYmKGwuaGFzQ2hpbGRyZW4oKXx8ZC5sZW5ndGg8Yy5sZW5ndGgpKXJl''@;'; put 'put ''dHVybiBudWxsO2NvbnN0IGg9e307Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKyspe2NvbnN0IHY9ZFtmXSxNPWNbZl07aWYoIjoiPT09dlswXSloW3Yuc3Vic3RyaW5nKDEpXT1NO2Vsc2UgaWYodiE9PU0ucGF0aClyZXR1cm4gbnVsbH1yZXR1cm57Y29uc3VtZWQ6Yy5zbGljZSgwLGQubGVu''@;'; put 'put ''Z3RoKSxwb3NQYXJhbXM6aH19ZnVuY3Rpb24gZDQoYyxsKXtjb25zdCBhPWM/ZyQoYyk6dm9pZCAwLGQ9bD9nJChsKTp2b2lkIDA7aWYoIWF8fCFkfHxhLmxlbmd0aCE9ZC5sZW5ndGgpcmV0dXJuITE7bGV0IGg7Zm9yKGxldCBmPTA7ZjxhLmxlbmd0aDtmKyspaWYoaD1hW2ZdLCFJMWUoY1to''@;'; put 'put ''XSxsW2hdKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBnJChjKXtyZXR1cm5bLi4uT2JqZWN0LmtleXMoYyksLi4uT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhjKV19ZnVuY3Rpb24gSTFlKGMsbCl7aWYoQXJyYXkuaXNBcnJheShjKSYmQXJyYXkuaXNBcnJheShsKSl7aWYoYy5s''@;'; put 'put ''ZW5ndGghPT1sLmxlbmd0aClyZXR1cm4hMTtjb25zdCBhPVsuLi5jXS5zb3J0KCksZD1bLi4ubF0uc29ydCgpO3JldHVybiBhLmV2ZXJ5KChoLGYpPT5kW2ZdPT09aCl9cmV0dXJuIGM9PT1sfWZ1bmN0aW9uIFIxZShjKXtyZXR1cm4gYy5sZW5ndGg+MD9jW2MubGVuZ3RoLTFdOm51bGx9ZnVu''@;'; put 'put ''Y3Rpb24gdDYoYyl7cmV0dXJuIFhFKGMpP2M6YkUoYyk/ZTAoUHJvbWlzZS5yZXNvbHZlKGMpKTpfbyhjKX1jb25zdCBrSWU9e2V4YWN0OmZ1bmN0aW9uIFAxZShjLGwsYSl7aWYoIXM5KGMuc2VnbWVudHMsbC5zZWdtZW50cyl8fCFaUChjLnNlZ21lbnRzLGwuc2VnbWVudHMsYSl8fGMubnVt''@;'; put 'put ''YmVyT2ZDaGlsZHJlbiE9PWwubnVtYmVyT2ZDaGlsZHJlbilyZXR1cm4hMTtmb3IoY29uc3QgZCBpbiBsLmNoaWxkcmVuKWlmKCFjLmNoaWxkcmVuW2RdfHwhUDFlKGMuY2hpbGRyZW5bZF0sbC5jaGlsZHJlbltkXSxhKSlyZXR1cm4hMTtyZXR1cm4hMH0sc3Vic2V0OkYxZX0sTDFlPXtleGFj''@;'; put 'put ''dDpmdW5jdGlvbiBESWUoYyxsKXtyZXR1cm4gZDQoYyxsKX0sc3Vic2V0OmZ1bmN0aW9uIElJZShjLGwpe3JldHVybiBPYmplY3Qua2V5cyhsKS5sZW5ndGg8PU9iamVjdC5rZXlzKGMpLmxlbmd0aCYmT2JqZWN0LmtleXMobCkuZXZlcnkoYT0+STFlKGNbYV0sbFthXSkpfSxpZ25vcmVkOigp''@;'; put 'put ''PT4hMH07ZnVuY3Rpb24gTzFlKGMsbCxhKXtyZXR1cm4ga0llW2EucGF0aHNdKGMucm9vdCxsLnJvb3QsYS5tYXRyaXhQYXJhbXMpJiZMMWVbYS5xdWVyeVBhcmFtc10oYy5xdWVyeVBhcmFtcyxsLnF1ZXJ5UGFyYW1zKSYmISgiZXhhY3QiPT09YS5mcmFnbWVudCYmYy5mcmFnbWVudCE9PWwu''@;'; put 'put ''ZnJhZ21lbnQpfWZ1bmN0aW9uIEYxZShjLGwsYSl7cmV0dXJuIEgxZShjLGwsbC5zZWdtZW50cyxhKX1mdW5jdGlvbiBIMWUoYyxsLGEsZCl7aWYoYy5zZWdtZW50cy5sZW5ndGg+YS5sZW5ndGgpe2NvbnN0IGg9Yy5zZWdtZW50cy5zbGljZSgwLGEubGVuZ3RoKTtyZXR1cm4hKCFzOShoLGEp''@;'; put 'put ''fHxsLmhhc0NoaWxkcmVuKCl8fCFaUChoLGEsZCkpfWlmKGMuc2VnbWVudHMubGVuZ3RoPT09YS5sZW5ndGgpe2lmKCFzOShjLnNlZ21lbnRzLGEpfHwhWlAoYy5zZWdtZW50cyxhLGQpKXJldHVybiExO2Zvcihjb25zdCBoIGluIGwuY2hpbGRyZW4paWYoIWMuY2hpbGRyZW5baF18fCFGMWUo''@;'; put 'put ''Yy5jaGlsZHJlbltoXSxsLmNoaWxkcmVuW2hdLGQpKXJldHVybiExO3JldHVybiEwfXtjb25zdCBoPWEuc2xpY2UoMCxjLnNlZ21lbnRzLmxlbmd0aCksZj1hLnNsaWNlKGMuc2VnbWVudHMubGVuZ3RoKTtyZXR1cm4hIShzOShjLnNlZ21lbnRzLGgpJiZaUChjLnNlZ21lbnRzLGgsZCkmJmMu''@;'; put 'put ''Y2hpbGRyZW5baXNdKSYmSDFlKGMuY2hpbGRyZW5baXNdLGwsZixkKX19ZnVuY3Rpb24gWlAoYyxsLGEpe3JldHVybiBsLmV2ZXJ5KChkLGgpPT5MMWVbYV0oY1toXS5wYXJhbWV0ZXJzLGQucGFyYW1ldGVycykpfWNsYXNzIG85e3Jvb3Q7cXVlcnlQYXJhbXM7ZnJhZ21lbnQ7X3F1ZXJ5UGFy''@;'; put 'put ''YW1NYXA7Y29uc3RydWN0b3IobD1uZXcgdGMoW10se30pLGE9e30sZD1udWxsKXt0aGlzLnJvb3Q9bCx0aGlzLnF1ZXJ5UGFyYW1zPWEsdGhpcy5mcmFnbWVudD1kfWdldCBxdWVyeVBhcmFtTWFwKCl7cmV0dXJuIHRoaXMuX3F1ZXJ5UGFyYW1NYXA/Pz1GXyh0aGlzLnF1ZXJ5UGFyYW1zKSx0''@;'; put 'put ''aGlzLl9xdWVyeVBhcmFtTWFwfXRvU3RyaW5nKCl7cmV0dXJuIE9JZS5zZXJpYWxpemUodGhpcyl9fWNsYXNzIHRje3NlZ21lbnRzO2NoaWxkcmVuO3BhcmVudD1udWxsO2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5zZWdtZW50cz1sLHRoaXMuY2hpbGRyZW49YSxPYmplY3QudmFsdWVzKGEpLmZv''@;'; put 'put ''ckVhY2goZD0+ZC5wYXJlbnQ9dGhpcyl9aGFzQ2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5udW1iZXJPZkNoaWxkcmVuPjB9Z2V0IG51bWJlck9mQ2hpbGRyZW4oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5jaGlsZHJlbikubGVuZ3RofXRvU3RyaW5nKCl7cmV0dXJuIFlQKHRoaXMpfX1jbGFz''@;'; put 'put ''cyBuVHtwYXRoO3BhcmFtZXRlcnM7X3BhcmFtZXRlck1hcDtjb25zdHJ1Y3RvcihsLGEpe3RoaXMucGF0aD1sLHRoaXMucGFyYW1ldGVycz1hfWdldCBwYXJhbWV0ZXJNYXAoKXtyZXR1cm4gdGhpcy5fcGFyYW1ldGVyTWFwPz89Rl8odGhpcy5wYXJhbWV0ZXJzKSx0aGlzLl9wYXJhbWV0ZXJN''@;'; put 'put ''YXB9dG9TdHJpbmcoKXtyZXR1cm4gQjFlKHRoaXMpfX1mdW5jdGlvbiBzOShjLGwpe3JldHVybiBjLmxlbmd0aD09PWwubGVuZ3RoJiZjLmV2ZXJ5KChhLGQpPT5hLnBhdGg9PT1sW2RdLnBhdGgpfWxldCByVD0oKCk9PntjbGFzcyBje3N0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0''@;'; put 'put ''dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTooKT0+bmV3IFdQLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpO2NsYXNzIFdQe3BhcnNlKGwpe2NvbnN0IGE9bmV3IFdJZShsKTtyZXR1cm4gbmV3IG85KGEucGFyc2VSb290U2VnbWVu''@;'; put 'put ''dCgpLGEucGFyc2VRdWVyeVBhcmFtcygpLGEucGFyc2VGcmFnbWVudCgpKX1zZXJpYWxpemUobCl7Y29uc3QgYT1gLyR7aVQobC5yb290LCEwKX1gLGQ9ZnVuY3Rpb24gSEllKGMpe2NvbnN0IGw9T2JqZWN0LmVudHJpZXMoYykubWFwKChbYSxkXSk9PkFycmF5LmlzQXJyYXkoZCk/ZC5tYXAo''@;'; put 'put ''aD0+YCR7R1AoYSl9PSR7R1AoaCl9YCkuam9pbigiJiIpOmAke0dQKGEpfT0ke0dQKGQpfWApLmZpbHRlcihhPT5hKTtyZXR1cm4gbC5sZW5ndGg/YD8ke2wuam9pbigiJiIpfWA6IiJ9KGwucXVlcnlQYXJhbXMpLGg9InN0cmluZyI9PXR5cGVvZiBsLmZyYWdtZW50P2AjJHtmdW5jdGlvbiBQ''@;'; put 'put ''SWUoYyl7cmV0dXJuIGVuY29kZVVSSShjKX0obC5mcmFnbWVudCl9YDoiIjtyZXR1cm5gJHthfSR7ZH0ke2h9YH19Y29uc3QgT0llPW5ldyBXUDtmdW5jdGlvbiBZUChjKXtyZXR1cm4gYy5zZWdtZW50cy5tYXAobD0+QjFlKGwpKS5qb2luKCIvIil9ZnVuY3Rpb24gaVQoYyxsKXtpZighYy5o''@;'; put 'put ''YXNDaGlsZHJlbigpKXJldHVybiBZUChjKTtpZihsKXtjb25zdCBhPWMuY2hpbGRyZW5baXNdP2lUKGMuY2hpbGRyZW5baXNdLCExKToiIixkPVtdO3JldHVybiBPYmplY3QuZW50cmllcyhjLmNoaWxkcmVuKS5mb3JFYWNoKChbaCxmXSk9PntoIT09aXMmJmQucHVzaChgJHtofToke2lUKGYs''@;'; put 'put ''ITEpfWApfSksZC5sZW5ndGg+MD9gJHthfSgke2Quam9pbigiLy8iKX0pYDphfXtjb25zdCBhPWZ1bmN0aW9uIExJZShjLGwpe2xldCBhPVtdO3JldHVybiBPYmplY3QuZW50cmllcyhjLmNoaWxkcmVuKS5mb3JFYWNoKChbZCxoXSk9PntkPT09aXMmJihhPWEuY29uY2F0KGwoaCxkKSkpfSks''@;'; put 'put ''T2JqZWN0LmVudHJpZXMoYy5jaGlsZHJlbikuZm9yRWFjaCgoW2QsaF0pPT57ZCE9PWlzJiYoYT1hLmNvbmNhdChsKGgsZCkpKX0pLGF9KGMsKGQsaCk9Pmg9PT1pcz9baVQoYy5jaGlsZHJlbltpc10sITEpXTpbYCR7aH06JHtpVChkLCExKX1gXSk7cmV0dXJuIDE9PT1PYmplY3Qua2V5cyhj''@;'; put 'put ''LmNoaWxkcmVuKS5sZW5ndGgmJm51bGwhPWMuY2hpbGRyZW5baXNdP2Ake1lQKGMpfS8ke2FbMF19YDpgJHtZUChjKX0vKCR7YS5qb2luKCIvLyIpfSlgfX1mdW5jdGlvbiBOMWUoYyl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChjKS5yZXBsYWNlKC8lNDAvZywiQCIpLnJlcGxhY2UoLyUz''@;'; put 'put ''QS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIil9ZnVuY3Rpb24gR1AoYyl7cmV0dXJuIE4xZShjKS5yZXBsYWNlKC8lM0IvZ2ksIjsiKX1mdW5jdGlvbiBtJChjKXtyZXR1cm4gTjFlKGMpLnJlcGxhY2UoL1woL2csIiUyOCIpLnJlcGxhY2UoL1wpL2cs''@;'; put 'put ''IiUyOSIpLnJlcGxhY2UoLyUyNi9naSwiJiIpfWZ1bmN0aW9uICRQKGMpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoYyl9ZnVuY3Rpb24gVjFlKGMpe3JldHVybiAkUChjLnJlcGxhY2UoL1wrL2csIiUyMCIpKX1mdW5jdGlvbiBCMWUoYyl7cmV0dXJuYCR7bSQoYy5wYXRoKX0ke2Z1bmN0''@;'; put 'put ''aW9uIEZJZShjKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYykubWFwKChbbCxhXSk9PmA7JHttJChsKX09JHttJChhKX1gKS5qb2luKCIiKX0oYy5wYXJhbWV0ZXJzKX1gfWNvbnN0IE5JZT0vXlteXC8oKT87I10rLztmdW5jdGlvbiB2JChjKXtjb25zdCBsPWMubWF0Y2goTkllKTtyZXR1cm4g''@;'; put 'put ''bD9sWzBdOiIifWNvbnN0IFZJZT0vXlteXC8oKT87PSNdKy8sakllPS9eW149PyYjXSsvLFVJZT0vXlteJiNdKy87Y2xhc3MgV0lle3VybDtyZW1haW5pbmc7Y29uc3RydWN0b3IobCl7dGhpcy51cmw9bCx0aGlzLnJlbWFpbmluZz1sfXBhcnNlUm9vdFNlZ21lbnQoKXtyZXR1cm4gdGhpcy5j''@;'; put 'put ''b25zdW1lT3B0aW9uYWwoIi8iKSwiIj09PXRoaXMucmVtYWluaW5nfHx0aGlzLnBlZWtTdGFydHNXaXRoKCI/Iil8fHRoaXMucGVla1N0YXJ0c1dpdGgoIiMiKT9uZXcgdGMoW10se30pOm5ldyB0YyhbXSx0aGlzLnBhcnNlQ2hpbGRyZW4oKSl9cGFyc2VRdWVyeVBhcmFtcygpe2NvbnN0IGw9''@;'; put 'put ''e307aWYodGhpcy5jb25zdW1lT3B0aW9uYWwoIj8iKSlkb3t0aGlzLnBhcnNlUXVlcnlQYXJhbShsKX13aGlsZSh0aGlzLmNvbnN1bWVPcHRpb25hbCgiJiIpKTtyZXR1cm4gbH1wYXJzZUZyYWdtZW50KCl7cmV0dXJuIHRoaXMuY29uc3VtZU9wdGlvbmFsKCIjIik/ZGVjb2RlVVJJQ29tcG9u''@;'; put 'put ''ZW50KHRoaXMucmVtYWluaW5nKTpudWxsfXBhcnNlQ2hpbGRyZW4oKXtpZigiIj09PXRoaXMucmVtYWluaW5nKXJldHVybnt9O3RoaXMuY29uc3VtZU9wdGlvbmFsKCIvIik7Y29uc3QgbD1bXTtmb3IodGhpcy5wZWVrU3RhcnRzV2l0aCgiKCIpfHxsLnB1c2godGhpcy5wYXJzZVNlZ21lbnQo''@;'; put 'put ''KSk7dGhpcy5wZWVrU3RhcnRzV2l0aCgiLyIpJiYhdGhpcy5wZWVrU3RhcnRzV2l0aCgiLy8iKSYmIXRoaXMucGVla1N0YXJ0c1dpdGgoIi8oIik7KXRoaXMuY2FwdHVyZSgiLyIpLGwucHVzaCh0aGlzLnBhcnNlU2VnbWVudCgpKTtsZXQgYT17fTt0aGlzLnBlZWtTdGFydHNXaXRoKCIvKCIp''@;'; put 'put ''JiYodGhpcy5jYXB0dXJlKCIvIiksYT10aGlzLnBhcnNlUGFyZW5zKCEwKSk7bGV0IGQ9e307cmV0dXJuIHRoaXMucGVla1N0YXJ0c1dpdGgoIigiKSYmKGQ9dGhpcy5wYXJzZVBhcmVucyghMSkpLChsLmxlbmd0aD4wfHxPYmplY3Qua2V5cyhhKS5sZW5ndGg+MCkmJihkW2lzXT1uZXcgdGMo''@;'; put 'put ''bCxhKSksZH1wYXJzZVNlZ21lbnQoKXtjb25zdCBsPXYkKHRoaXMucmVtYWluaW5nKTtpZigiIj09PWwmJnRoaXMucGVla1N0YXJ0c1dpdGgoIjsiKSl0aHJvdyBuZXcgUHIoNDAwOSwhMSk7cmV0dXJuIHRoaXMuY2FwdHVyZShsKSxuZXcgblQoJFAobCksdGhpcy5wYXJzZU1hdHJpeFBhcmFt''@;'; put 'put ''cygpKX1wYXJzZU1hdHJpeFBhcmFtcygpe2NvbnN0IGw9e307Zm9yKDt0aGlzLmNvbnN1bWVPcHRpb25hbCgiOyIpOyl0aGlzLnBhcnNlUGFyYW0obCk7cmV0dXJuIGx9cGFyc2VQYXJhbShsKXtjb25zdCBhPWZ1bmN0aW9uIEJJZShjKXtjb25zdCBsPWMubWF0Y2goVkllKTtyZXR1cm4gbD9s''@;'; put 'put ''WzBdOiIifSh0aGlzLnJlbWFpbmluZyk7aWYoIWEpcmV0dXJuO3RoaXMuY2FwdHVyZShhKTtsZXQgZD0iIjtpZih0aGlzLmNvbnN1bWVPcHRpb25hbCgiPSIpKXtjb25zdCBoPXYkKHRoaXMucmVtYWluaW5nKTtoJiYoZD1oLHRoaXMuY2FwdHVyZShkKSl9bFskUChhKV09JFAoZCl9cGFyc2VR''@;'; put 'put ''dWVyeVBhcmFtKGwpe2NvbnN0IGE9ZnVuY3Rpb24gekllKGMpe2NvbnN0IGw9Yy5tYXRjaChqSWUpO3JldHVybiBsP2xbMF06IiJ9KHRoaXMucmVtYWluaW5nKTtpZighYSlyZXR1cm47dGhpcy5jYXB0dXJlKGEpO2xldCBkPSIiO2lmKHRoaXMuY29uc3VtZU9wdGlvbmFsKCI9Iikpe2NvbnN0''@;'; put 'put ''IHY9ZnVuY3Rpb24gWkllKGMpe2NvbnN0IGw9Yy5tYXRjaChVSWUpO3JldHVybiBsP2xbMF06IiJ9KHRoaXMucmVtYWluaW5nKTt2JiYoZD12LHRoaXMuY2FwdHVyZShkKSl9Y29uc3QgaD1WMWUoYSksZj1WMWUoZCk7aWYobC5oYXNPd25Qcm9wZXJ0eShoKSl7bGV0IHY9bFtoXTtBcnJheS5p''@;'; put 'put ''c0FycmF5KHYpfHwodj1bdl0sbFtoXT12KSx2LnB1c2goZil9ZWxzZSBsW2hdPWZ9cGFyc2VQYXJlbnMobCl7Y29uc3QgYT17fTtmb3IodGhpcy5jYXB0dXJlKCIoIik7IXRoaXMuY29uc3VtZU9wdGlvbmFsKCIpIikmJnRoaXMucmVtYWluaW5nLmxlbmd0aD4wOyl7Y29uc3QgZD12JCh0aGlz''@;'; put 'put ''LnJlbWFpbmluZyksaD10aGlzLnJlbWFpbmluZ1tkLmxlbmd0aF07aWYoIi8iIT09aCYmIikiIT09aCYmIjsiIT09aCl0aHJvdyBuZXcgUHIoNDAxMCwhMSk7bGV0IGY7ZC5pbmRleE9mKCI6Iik+LTE/KGY9ZC5zbGljZSgwLGQuaW5kZXhPZigiOiIpKSx0aGlzLmNhcHR1cmUoZiksdGhpcy5j''@;'; put 'put ''YXB0dXJlKCI6IikpOmwmJihmPWlzKTtjb25zdCB2PXRoaXMucGFyc2VDaGlsZHJlbigpO2FbZl09MT09PU9iamVjdC5rZXlzKHYpLmxlbmd0aD92W2lzXTpuZXcgdGMoW10sdiksdGhpcy5jb25zdW1lT3B0aW9uYWwoIi8vIil9cmV0dXJuIGF9cGVla1N0YXJ0c1dpdGgobCl7cmV0dXJuIHRo''@;'; put 'put ''aXMucmVtYWluaW5nLnN0YXJ0c1dpdGgobCl9Y29uc3VtZU9wdGlvbmFsKGwpe3JldHVybiEhdGhpcy5wZWVrU3RhcnRzV2l0aChsKSYmKHRoaXMucmVtYWluaW5nPXRoaXMucmVtYWluaW5nLnN1YnN0cmluZyhsLmxlbmd0aCksITApfWNhcHR1cmUobCl7aWYoIXRoaXMuY29uc3VtZU9wdGlv''@;'; put 'put ''bmFsKGwpKXRocm93IG5ldyBQcig0MDExLCExKX19ZnVuY3Rpb24gajFlKGMpe3JldHVybiBjLnNlZ21lbnRzLmxlbmd0aD4wP25ldyB0YyhbXSx7W2lzXTpjfSk6Y31mdW5jdGlvbiB6MWUoYyl7Y29uc3QgbD17fTtmb3IoY29uc3RbZCxoXW9mIE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4p''@;'; put 'put ''KXtjb25zdCBmPXoxZShoKTtpZihkPT09aXMmJjA9PT1mLnNlZ21lbnRzLmxlbmd0aCYmZi5oYXNDaGlsZHJlbigpKWZvcihjb25zdFt2LE1db2YgT2JqZWN0LmVudHJpZXMoZi5jaGlsZHJlbikpbFt2XT1NO2Vsc2UoZi5zZWdtZW50cy5sZW5ndGg+MHx8Zi5oYXNDaGlsZHJlbigpKSYmKGxb''@;'; put 'put ''ZF09Zil9cmV0dXJuIGZ1bmN0aW9uIFlJZShjKXtpZigxPT09Yy5udW1iZXJPZkNoaWxkcmVuJiZjLmNoaWxkcmVuW2lzXSl7Y29uc3QgbD1jLmNoaWxkcmVuW2lzXTtyZXR1cm4gbmV3IHRjKGMuc2VnbWVudHMuY29uY2F0KGwuc2VnbWVudHMpLGwuY2hpbGRyZW4pfXJldHVybiBjfShuZXcg''@;'; put 'put ''dGMoYy5zZWdtZW50cyxsKSl9ZnVuY3Rpb24gbDkoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBvOX1mdW5jdGlvbiBVMWUoYyl7bGV0IGw7Y29uc3QgaD1qMWUoZnVuY3Rpb24gYShmKXtjb25zdCB2PXt9O2Zvcihjb25zdCBEIG9mIGYuY2hpbGRyZW4pe2NvbnN0IFU9YShEKTt2W0Qub3V0bGV0''@;'; put 'put ''XT1VfWNvbnN0IE09bmV3IHRjKGYudXJsLHYpO3JldHVybiBmPT09YyYmKGw9TSksTX0oYy5yb290KSk7cmV0dXJuIGw/P2h9ZnVuY3Rpb24gWjFlKGMsbCxhLGQpe2xldCBoPWM7Zm9yKDtoLnBhcmVudDspaD1oLnBhcmVudDtpZigwPT09bC5sZW5ndGgpcmV0dXJuIHkkKGgsaCxoLGEsZCk7''@;'; put 'put ''Y29uc3QgZj1mdW5jdGlvbiAkSWUoYyl7aWYoInN0cmluZyI9PXR5cGVvZiBjWzBdJiYxPT09Yy5sZW5ndGgmJiIvIj09PWNbMF0pcmV0dXJuIG5ldyBZMWUoITAsMCxjKTtsZXQgbD0wLGE9ITE7Y29uc3QgZD1jLnJlZHVjZSgoaCxmLHYpPT57aWYoIm9iamVjdCI9PXR5cGVvZiBmJiZudWxs''@;'; put 'put ''IT1mKXtpZihmLm91dGxldHMpe2NvbnN0IE09e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKGYub3V0bGV0cykuZm9yRWFjaCgoW0QsVV0pPT57TVtEXT0ic3RyaW5nIj09dHlwZW9mIFU/VS5zcGxpdCgiLyIpOlV9KSxbLi4uaCx7b3V0bGV0czpNfV19aWYoZi5zZWdtZW50UGF0aClyZXR1cm5b''@;'; put 'put ''Li4uaCxmLnNlZ21lbnRQYXRoXX1yZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGY/Wy4uLmgsZl06MD09PXY/KGYuc3BsaXQoIi8iKS5mb3JFYWNoKChNLEQpPT57MD09RCYmIi4iPT09TXx8KDA9PUQmJiIiPT09TT9hPSEwOiIuLiI9PT1NP2wrKzoiIiE9TSYmaC5wdXNoKE0pKX0pLGgpOlsuLi5o''@;'; put 'put ''LGZdfSxbXSk7cmV0dXJuIG5ldyBZMWUoYSxsLGQpfShsKTtpZihmLnRvUm9vdCgpKXJldHVybiB5JChoLGgsbmV3IHRjKFtdLHt9KSxhLGQpO2NvbnN0IHY9ZnVuY3Rpb24gS0llKGMsbCxhKXtpZihjLmlzQWJzb2x1dGUpcmV0dXJuIG5ldyBYUChsLCEwLDApO2lmKCFhKXJldHVybiBuZXcg''@;'; put 'put ''WFAobCwhMSxOYU4pO2lmKG51bGw9PT1hLnBhcmVudClyZXR1cm4gbmV3IFhQKGEsITAsMCk7Y29uc3QgZD1LUChjLmNvbW1hbmRzWzBdKT8wOjE7cmV0dXJuIGZ1bmN0aW9uIFhJZShjLGwsYSl7bGV0IGQ9YyxoPWwsZj1hO2Zvcig7Zj5oOyl7aWYoZi09aCxkPWQucGFyZW50LCFkKXRocm93''@;'; put 'put ''IG5ldyBQcig0MDA1LCExKTtoPWQuc2VnbWVudHMubGVuZ3RofXJldHVybiBuZXcgWFAoZCwhMSxoLWYpfShhLGEuc2VnbWVudHMubGVuZ3RoLTErZCxjLm51bWJlck9mRG91YmxlRG90cyl9KGYsaCxjKSxNPXYucHJvY2Vzc0NoaWxkcmVuP29UKHYuc2VnbWVudEdyb3VwLHYuaW5kZXgsZi5j''@;'; put 'put ''b21tYW5kcyk6RzFlKHYuc2VnbWVudEdyb3VwLHYuaW5kZXgsZi5jb21tYW5kcyk7cmV0dXJuIHkkKGgsdi5zZWdtZW50R3JvdXAsTSxhLGQpfWZ1bmN0aW9uIEtQKGMpe3JldHVybiJvYmplY3QiPT10eXBlb2YgYyYmbnVsbCE9YyYmIWMub3V0bGV0cyYmIWMuc2VnbWVudFBhdGh9ZnVuY3Rp''@;'; put 'put ''b24gYVQoYyl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBjJiZudWxsIT1jJiZjLm91dGxldHN9ZnVuY3Rpb24geSQoYyxsLGEsZCxoKXtsZXQgdixmPXt9O2QmJk9iamVjdC5lbnRyaWVzKGQpLmZvckVhY2goKFtELFVdKT0+e2ZbRF09QXJyYXkuaXNBcnJheShVKT9VLm1hcCh0ZT0+YCR7dGV9''@;'; put 'put ''YCk6YCR7VX1gfSksdj1jPT09bD9hOlcxZShjLGwsYSk7Y29uc3QgTT1qMWUoejFlKHYpKTtyZXR1cm4gbmV3IG85KE0sZixoKX1mdW5jdGlvbiBXMWUoYyxsLGEpe2NvbnN0IGQ9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4pLmZvckVhY2goKFtoLGZdKT0+e2RbaF09Zj09''@;'; put 'put ''PWw/YTpXMWUoZixsLGEpfSksbmV3IHRjKGMuc2VnbWVudHMsZCl9Y2xhc3MgWTFle2lzQWJzb2x1dGU7bnVtYmVyT2ZEb3VibGVEb3RzO2NvbW1hbmRzO2NvbnN0cnVjdG9yKGwsYSxkKXtpZih0aGlzLmlzQWJzb2x1dGU9bCx0aGlzLm51bWJlck9mRG91YmxlRG90cz1hLHRoaXMuY29tbWFu''@;'; put 'put ''ZHM9ZCxsJiZkLmxlbmd0aD4wJiZLUChkWzBdKSl0aHJvdyBuZXcgUHIoNDAwMywhMSk7Y29uc3QgaD1kLmZpbmQoYVQpO2lmKGgmJmghPT1SMWUoZCkpdGhyb3cgbmV3IFByKDQwMDQsITEpfXRvUm9vdCgpe3JldHVybiB0aGlzLmlzQWJzb2x1dGUmJjE9PT10aGlzLmNvbW1hbmRzLmxlbmd0''@;'; put 'put ''aCYmIi8iPT10aGlzLmNvbW1hbmRzWzBdfX1jbGFzcyBYUHtzZWdtZW50R3JvdXA7cHJvY2Vzc0NoaWxkcmVuO2luZGV4O2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnNlZ21lbnRHcm91cD1sLHRoaXMucHJvY2Vzc0NoaWxkcmVuPWEsdGhpcy5pbmRleD1kfX1mdW5jdGlvbiBHMWUoYyxsLGEp''@;'; put 'put ''e2lmKGM/Pz1uZXcgdGMoW10se30pLDA9PT1jLnNlZ21lbnRzLmxlbmd0aCYmYy5oYXNDaGlsZHJlbigpKXJldHVybiBvVChjLGwsYSk7Y29uc3QgZD1mdW5jdGlvbiBKSWUoYyxsLGEpe2xldCBkPTAsaD1sO2NvbnN0IGY9e21hdGNoOiExLHBhdGhJbmRleDowLGNvbW1hbmRJbmRleDowfTtm''@;'; put 'put ''b3IoO2g8Yy5zZWdtZW50cy5sZW5ndGg7KXtpZihkPj1hLmxlbmd0aClyZXR1cm4gZjtjb25zdCB2PWMuc2VnbWVudHNbaF0sTT1hW2RdO2lmKGFUKE0pKWJyZWFrO2NvbnN0IEQ9YCR7TX1gLFU9ZDxhLmxlbmd0aC0xP2FbZCsxXTpudWxsO2lmKGg+MCYmdm9pZCAwPT09RClicmVhaztpZihE''@;'; put 'put ''JiZVJiYib2JqZWN0Ij09dHlwZW9mIFUmJnZvaWQgMD09PVUub3V0bGV0cyl7aWYoIUsxZShELFUsdikpcmV0dXJuIGY7ZCs9Mn1lbHNle2lmKCFLMWUoRCx7fSx2KSlyZXR1cm4gZjtkKyt9aCsrfXJldHVybnttYXRjaDohMCxwYXRoSW5kZXg6aCxjb21tYW5kSW5kZXg6ZH19KGMsbCxhKSxo''@;'; put 'put ''PWEuc2xpY2UoZC5jb21tYW5kSW5kZXgpO2lmKGQubWF0Y2gmJmQucGF0aEluZGV4PGMuc2VnbWVudHMubGVuZ3RoKXtjb25zdCBmPW5ldyB0YyhjLnNlZ21lbnRzLnNsaWNlKDAsZC5wYXRoSW5kZXgpLHt9KTtyZXR1cm4gZi5jaGlsZHJlbltpc109bmV3IHRjKGMuc2VnbWVudHMuc2xpY2Uo''@;'; put 'put ''ZC5wYXRoSW5kZXgpLGMuY2hpbGRyZW4pLG9UKGYsMCxoKX1yZXR1cm4gZC5tYXRjaCYmMD09PWgubGVuZ3RoP25ldyB0YyhjLnNlZ21lbnRzLHt9KTpkLm1hdGNoJiYhYy5oYXNDaGlsZHJlbigpP2IkKGMsbCxhKTpkLm1hdGNoP29UKGMsMCxoKTpiJChjLGwsYSl9ZnVuY3Rpb24gb1QoYyxs''@;'; put 'put ''LGEpe2lmKDA9PT1hLmxlbmd0aClyZXR1cm4gbmV3IHRjKGMuc2VnbWVudHMse30pO3tjb25zdCBkPWZ1bmN0aW9uIHFJZShjKXtyZXR1cm4gYVQoY1swXSk/Y1swXS5vdXRsZXRzOntbaXNdOmN9fShhKSxoPXt9O2lmKE9iamVjdC5rZXlzKGQpLnNvbWUoZj0+ZiE9PWlzKSYmYy5jaGlsZHJl''@;'; put 'put ''bltpc10mJjE9PT1jLm51bWJlck9mQ2hpbGRyZW4mJjA9PT1jLmNoaWxkcmVuW2lzXS5zZWdtZW50cy5sZW5ndGgpe2NvbnN0IGY9b1QoYy5jaGlsZHJlbltpc10sbCxhKTtyZXR1cm4gbmV3IHRjKGMuc2VnbWVudHMsZi5jaGlsZHJlbil9cmV0dXJuIE9iamVjdC5lbnRyaWVzKGQpLmZvckVh''@;'; put 'put ''Y2goKFtmLHZdKT0+eyJzdHJpbmciPT10eXBlb2YgdiYmKHY9W3ZdKSxudWxsIT09diYmKGhbZl09RzFlKGMuY2hpbGRyZW5bZl0sbCx2KSl9KSxPYmplY3QuZW50cmllcyhjLmNoaWxkcmVuKS5mb3JFYWNoKChbZix2XSk9Pnt2b2lkIDA9PT1kW2ZdJiYoaFtmXT12KX0pLG5ldyB0YyhjLnNl''@;'; put 'put ''Z21lbnRzLGgpfX1mdW5jdGlvbiBiJChjLGwsYSl7Y29uc3QgZD1jLnNlZ21lbnRzLnNsaWNlKDAsbCk7bGV0IGg9MDtmb3IoO2g8YS5sZW5ndGg7KXtjb25zdCBmPWFbaF07aWYoYVQoZikpe2NvbnN0IEQ9UUllKGYub3V0bGV0cyk7cmV0dXJuIG5ldyB0YyhkLEQpfWlmKDA9PT1oJiZLUChh''@;'; put 'put ''WzBdKSl7ZC5wdXNoKG5ldyBuVChjLnNlZ21lbnRzW2xdLnBhdGgsJDFlKGFbMF0pKSksaCsrO2NvbnRpbnVlfWNvbnN0IHY9YVQoZik/Zi5vdXRsZXRzW2lzXTpgJHtmfWAsTT1oPGEubGVuZ3RoLTE/YVtoKzFdOm51bGw7diYmTSYmS1AoTSk/KGQucHVzaChuZXcgblQodiwkMWUoTSkpKSxo''@;'; put 'put ''Kz0yKTooZC5wdXNoKG5ldyBuVCh2LHt9KSksaCsrKX1yZXR1cm4gbmV3IHRjKGQse30pfWZ1bmN0aW9uIFFJZShjKXtjb25zdCBsPXt9O3JldHVybiBPYmplY3QuZW50cmllcyhjKS5mb3JFYWNoKChbYSxkXSk9Pnsic3RyaW5nIj09dHlwZW9mIGQmJihkPVtkXSksbnVsbCE9PWQmJihsW2Fd''@;'; put 'put ''PWIkKG5ldyB0YyhbXSx7fSksMCxkKSl9KSxsfWZ1bmN0aW9uICQxZShjKXtjb25zdCBsPXt9O3JldHVybiBPYmplY3QuZW50cmllcyhjKS5mb3JFYWNoKChbYSxkXSk9PmxbYV09YCR7ZH1gKSxsfWZ1bmN0aW9uIEsxZShjLGwsYSl7cmV0dXJuIGM9PWEucGF0aCYmZDQobCxhLnBhcmFtZXRl''@;'; put 'put ''cnMpfWNvbnN0IHFQPSJpbXBlcmF0aXZlIjt2YXIgenM9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5OYXZpZ2F0aW9uU3RhcnQ9MF09Ik5hdmlnYXRpb25TdGFydCIsY1tjLk5hdmlnYXRpb25FbmQ9MV09Ik5hdmlnYXRpb25FbmQiLGNbYy5OYXZpZ2F0aW9uQ2FuY2VsPTJdPSJOYXZpZ2F0aW9u''@;'; put 'put ''Q2FuY2VsIixjW2MuTmF2aWdhdGlvbkVycm9yPTNdPSJOYXZpZ2F0aW9uRXJyb3IiLGNbYy5Sb3V0ZXNSZWNvZ25pemVkPTRdPSJSb3V0ZXNSZWNvZ25pemVkIixjW2MuUmVzb2x2ZVN0YXJ0PTVdPSJSZXNvbHZlU3RhcnQiLGNbYy5SZXNvbHZlRW5kPTZdPSJSZXNvbHZlRW5kIixjW2MuR3Vh''@;'; put 'put ''cmRzQ2hlY2tTdGFydD03XT0iR3VhcmRzQ2hlY2tTdGFydCIsY1tjLkd1YXJkc0NoZWNrRW5kPThdPSJHdWFyZHNDaGVja0VuZCIsY1tjLlJvdXRlQ29uZmlnTG9hZFN0YXJ0PTldPSJSb3V0ZUNvbmZpZ0xvYWRTdGFydCIsY1tjLlJvdXRlQ29uZmlnTG9hZEVuZD0xMF09IlJvdXRlQ29uZmln''@;'; put 'put ''TG9hZEVuZCIsY1tjLkNoaWxkQWN0aXZhdGlvblN0YXJ0PTExXT0iQ2hpbGRBY3RpdmF0aW9uU3RhcnQiLGNbYy5DaGlsZEFjdGl2YXRpb25FbmQ9MTJdPSJDaGlsZEFjdGl2YXRpb25FbmQiLGNbYy5BY3RpdmF0aW9uU3RhcnQ9MTNdPSJBY3RpdmF0aW9uU3RhcnQiLGNbYy5BY3RpdmF0aW9u''@;'; put 'put ''RW5kPTE0XT0iQWN0aXZhdGlvbkVuZCIsY1tjLlNjcm9sbD0xNV09IlNjcm9sbCIsY1tjLk5hdmlnYXRpb25Ta2lwcGVkPTE2XT0iTmF2aWdhdGlvblNraXBwZWQiLGN9KHpzfHx7fSk7Y2xhc3MgaDR7aWQ7dXJsO2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5pZD1sLHRoaXMudXJsPWF9fWNsYXNz''@;'; put 'put ''IEpQIGV4dGVuZHMgaDR7dHlwZT16cy5OYXZpZ2F0aW9uU3RhcnQ7bmF2aWdhdGlvblRyaWdnZXI7cmVzdG9yZWRTdGF0ZTtjb25zdHJ1Y3RvcihsLGEsZD0iaW1wZXJhdGl2ZSIsaD1udWxsKXtzdXBlcihsLGEpLHRoaXMubmF2aWdhdGlvblRyaWdnZXI9ZCx0aGlzLnJlc3RvcmVkU3RhdGU9''@;'; put 'put ''aH10b1N0cmluZygpe3JldHVybmBOYXZpZ2F0aW9uU3RhcnQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JylgfX1jbGFzcyBmNCBleHRlbmRzIGg0e3VybEFmdGVyUmVkaXJlY3RzO3R5cGU9enMuTmF2aWdhdGlvbkVuZDtjb25zdHJ1Y3RvcihsLGEsZCl7c3VwZXIobCxhKSx0''@;'; put 'put ''aGlzLnVybEFmdGVyUmVkaXJlY3RzPWR9dG9TdHJpbmcoKXtyZXR1cm5gTmF2aWdhdGlvbkVuZChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nKWB9fXZhciBjMj1mdW5jdGlvbihjKXtyZXR1''@;'; put 'put ''cm4gY1tjLlJlZGlyZWN0PTBdPSJSZWRpcmVjdCIsY1tjLlN1cGVyc2VkZWRCeU5ld05hdmlnYXRpb249MV09IlN1cGVyc2VkZWRCeU5ld05hdmlnYXRpb24iLGNbYy5Ob0RhdGFGcm9tUmVzb2x2ZXI9Ml09Ik5vRGF0YUZyb21SZXNvbHZlciIsY1tjLkd1YXJkUmVqZWN0ZWQ9M109Ikd1YXJk''@;'; put 'put ''UmVqZWN0ZWQiLGN9KGMyfHx7fSksUVA9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5JZ25vcmVkU2FtZVVybE5hdmlnYXRpb249MF09Iklnbm9yZWRTYW1lVXJsTmF2aWdhdGlvbiIsY1tjLklnbm9yZWRCeVVybEhhbmRsaW5nU3RyYXRlZ3k9MV09Iklnbm9yZWRCeVVybEhhbmRsaW5nU3RyYXRl''@;'; put 'put ''Z3kiLGN9KFFQfHx7fSk7Y2xhc3MgYzkgZXh0ZW5kcyBoNHtyZWFzb247Y29kZTt0eXBlPXpzLk5hdmlnYXRpb25DYW5jZWw7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhKSx0aGlzLnJlYXNvbj1kLHRoaXMuY29kZT1ofXRvU3RyaW5nKCl7cmV0dXJuYE5hdmlnYXRpb25DYW5jZWwo''@;'; put 'put ''aWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JylgfX1jbGFzcyBIXyBleHRlbmRzIGg0e3JlYXNvbjtjb2RlO3R5cGU9enMuTmF2aWdhdGlvblNraXBwZWQ7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhKSx0aGlzLnJlYXNvbj1kLHRoaXMuY29kZT1ofX1jbGFzcyBfJCBl''@;'; put 'put ''eHRlbmRzIGg0e2Vycm9yO3RhcmdldDt0eXBlPXpzLk5hdmlnYXRpb25FcnJvcjtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEpLHRoaXMuZXJyb3I9ZCx0aGlzLnRhcmdldD1ofXRvU3RyaW5nKCl7cmV0dXJuYE5hdmlnYXRpb25FcnJvcihpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0''@;'; put 'put ''aGlzLnVybH0nLCBlcnJvcjogJHt0aGlzLmVycm9yfSlgfX1jbGFzcyBYMWUgZXh0ZW5kcyBoNHt1cmxBZnRlclJlZGlyZWN0cztzdGF0ZTt0eXBlPXpzLlJvdXRlc1JlY29nbml6ZWQ7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhKSx0aGlzLnVybEFmdGVyUmVkaXJlY3RzPWQsdGhp''@;'; put 'put ''cy5zdGF0ZT1ofXRvU3RyaW5nKCl7cmV0dXJuYFJvdXRlc1JlY29nbml6ZWQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcke3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9Jywgc3RhdGU6ICR7dGhpcy5zdGF0ZX0pYH19Y2xhc3MgZVJlIGV4''@;'; put 'put ''dGVuZHMgaDR7dXJsQWZ0ZXJSZWRpcmVjdHM7c3RhdGU7dHlwZT16cy5HdWFyZHNDaGVja1N0YXJ0O2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1kLHRoaXMuc3RhdGU9aH10b1N0cmluZygpe3JldHVybmBHdWFyZHNDaGVja1N0YXJ0KGlk''@;'; put 'put ''OiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScsIHN0YXRlOiAke3RoaXMuc3RhdGV9KWB9fWNsYXNzIHRSZSBleHRlbmRzIGg0e3VybEFmdGVyUmVkaXJlY3RzO3N0YXRlO3Nob3VsZEFjdGl2YXRl''@;'; put 'put ''O3R5cGU9enMuR3VhcmRzQ2hlY2tFbmQ7Y29uc3RydWN0b3IobCxhLGQsaCxmKXtzdXBlcihsLGEpLHRoaXMudXJsQWZ0ZXJSZWRpcmVjdHM9ZCx0aGlzLnN0YXRlPWgsdGhpcy5zaG91bGRBY3RpdmF0ZT1mfXRvU3RyaW5nKCl7cmV0dXJuYEd1YXJkc0NoZWNrRW5kKGlkOiAke3RoaXMuaWR9''@;'; put 'put ''LCB1cmw6ICcke3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScsIHN0YXRlOiAke3RoaXMuc3RhdGV9LCBzaG91bGRBY3RpdmF0ZTogJHt0aGlzLnNob3VsZEFjdGl2YXRlfSlgfX1jbGFzcyBuUmUgZXh0ZW5kcyBoNHt1cmxBZnRlclJl''@;'; put 'put ''ZGlyZWN0cztzdGF0ZTt0eXBlPXpzLlJlc29sdmVTdGFydDtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEpLHRoaXMudXJsQWZ0ZXJSZWRpcmVjdHM9ZCx0aGlzLnN0YXRlPWh9dG9TdHJpbmcoKXtyZXR1cm5gUmVzb2x2ZVN0YXJ0KGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMu''@;'; put 'put ''dXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScsIHN0YXRlOiAke3RoaXMuc3RhdGV9KWB9fWNsYXNzIHJSZSBleHRlbmRzIGg0e3VybEFmdGVyUmVkaXJlY3RzO3N0YXRlO3R5cGU9enMuUmVzb2x2ZUVuZDtjb25zdHJ1Y3RvcihsLGEsZCxoKXtz''@;'; put 'put ''dXBlcihsLGEpLHRoaXMudXJsQWZ0ZXJSZWRpcmVjdHM9ZCx0aGlzLnN0YXRlPWh9dG9TdHJpbmcoKXtyZXR1cm5gUmVzb2x2ZUVuZChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0''@;'; put 'put ''ZTogJHt0aGlzLnN0YXRlfSlgfX1jbGFzcyBpUmV7cm91dGU7dHlwZT16cy5Sb3V0ZUNvbmZpZ0xvYWRTdGFydDtjb25zdHJ1Y3RvcihsKXt0aGlzLnJvdXRlPWx9dG9TdHJpbmcoKXtyZXR1cm5gUm91dGVDb25maWdMb2FkU3RhcnQocGF0aDogJHt0aGlzLnJvdXRlLnBhdGh9KWB9fWNsYXNz''@;'; put 'put ''IGFSZXtyb3V0ZTt0eXBlPXpzLlJvdXRlQ29uZmlnTG9hZEVuZDtjb25zdHJ1Y3RvcihsKXt0aGlzLnJvdXRlPWx9dG9TdHJpbmcoKXtyZXR1cm5gUm91dGVDb25maWdMb2FkRW5kKHBhdGg6ICR7dGhpcy5yb3V0ZS5wYXRofSlgfX1jbGFzcyBvUmV7c25hcHNob3Q7dHlwZT16cy5DaGlsZEFj''@;'; put 'put ''dGl2YXRpb25TdGFydDtjb25zdHJ1Y3RvcihsKXt0aGlzLnNuYXBzaG90PWx9dG9TdHJpbmcoKXtyZXR1cm5gQ2hpbGRBY3RpdmF0aW9uU3RhcnQocGF0aDogJyR7dGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZyYmdGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRofHwiIn0nKWB9fWNsYXNz''@;'; put 'put ''IHNSZXtzbmFwc2hvdDt0eXBlPXpzLkNoaWxkQWN0aXZhdGlvbkVuZDtjb25zdHJ1Y3RvcihsKXt0aGlzLnNuYXBzaG90PWx9dG9TdHJpbmcoKXtyZXR1cm5gQ2hpbGRBY3RpdmF0aW9uRW5kKHBhdGg6ICcke3RoaXMuc25hcHNob3Qucm91dGVDb25maWcmJnRoaXMuc25hcHNob3Qucm91dGVD''@;'; put 'put ''b25maWcucGF0aHx8IiJ9JylgfX1jbGFzcyBsUmV7c25hcHNob3Q7dHlwZT16cy5BY3RpdmF0aW9uU3RhcnQ7Y29uc3RydWN0b3IobCl7dGhpcy5zbmFwc2hvdD1sfXRvU3RyaW5nKCl7cmV0dXJuYEFjdGl2YXRpb25TdGFydChwYXRoOiAnJHt0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0''@;'; put 'put ''aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIifScpYH19Y2xhc3MgY1Jle3NuYXBzaG90O3R5cGU9enMuQWN0aXZhdGlvbkVuZDtjb25zdHJ1Y3RvcihsKXt0aGlzLnNuYXBzaG90PWx9dG9TdHJpbmcoKXtyZXR1cm5gQWN0aXZhdGlvbkVuZChwYXRoOiAnJHt0aGlzLnNuYXBzaG90''@;'; put 'put ''LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIifScpYH19Y2xhc3MgcTFle3JvdXRlckV2ZW50O3Bvc2l0aW9uO2FuY2hvcjt0eXBlPXpzLlNjcm9sbDtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5yb3V0ZXJFdmVudD1sLHRoaXMucG9zaXRpb249YSx0aGlz''@;'; put 'put ''LmFuY2hvcj1kfXRvU3RyaW5nKCl7cmV0dXJuYFNjcm9sbChhbmNob3I6ICcke3RoaXMuYW5jaG9yfScsIHBvc2l0aW9uOiAnJHt0aGlzLnBvc2l0aW9uP2Ake3RoaXMucG9zaXRpb25bMF19LCAke3RoaXMucG9zaXRpb25bMV19YDpudWxsfScpYH19Y2xhc3MgdyR7fWNsYXNzIGVGe3VybDtu''@;'; put 'put ''YXZpZ2F0aW9uQmVoYXZpb3JPcHRpb25zO2NvbnN0cnVjdG9yKGwsYSl7dGhpcy51cmw9bCx0aGlzLm5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnM9YX19ZnVuY3Rpb24gRjMoYyl7cmV0dXJuIGMub3V0bGV0fHxpc31mdW5jdGlvbiBzVChjKXtpZighYylyZXR1cm4gbnVsbDtpZihjLnJvdXRl''@;'; put 'put ''Q29uZmlnPy5faW5qZWN0b3IpcmV0dXJuIGMucm91dGVDb25maWcuX2luamVjdG9yO2ZvcihsZXQgbD1jLnBhcmVudDtsO2w9bC5wYXJlbnQpe2NvbnN0IGE9bC5yb3V0ZUNvbmZpZztpZihhPy5fbG9hZGVkSW5qZWN0b3IpcmV0dXJuIGEuX2xvYWRlZEluamVjdG9yO2lmKGE/Ll9pbmplY3Rv''@;'; put 'put ''cilyZXR1cm4gYS5faW5qZWN0b3J9cmV0dXJuIG51bGx9Y2xhc3MgZ1Jle3Jvb3RJbmplY3RvcjtvdXRsZXQ9bnVsbDtyb3V0ZT1udWxsO2NoaWxkcmVuO2F0dGFjaFJlZj1udWxsO2dldCBpbmplY3Rvcigpe3JldHVybiBzVCh0aGlzLnJvdXRlPy5zbmFwc2hvdCk/P3RoaXMucm9vdEluamVj''@;'; put 'put ''dG9yfWNvbnN0cnVjdG9yKGwpe3RoaXMucm9vdEluamVjdG9yPWwsdGhpcy5jaGlsZHJlbj1uZXcgbFQodGhpcy5yb290SW5qZWN0b3IpfX1sZXQgbFQ9KCgpPT57Y2xhc3MgY3tyb290SW5qZWN0b3I7Y29udGV4dHM9bmV3IE1hcDtjb25zdHJ1Y3RvcihhKXt0aGlzLnJvb3RJbmplY3Rvcj1h''@;'; put 'put ''fW9uQ2hpbGRPdXRsZXRDcmVhdGVkKGEsZCl7Y29uc3QgaD10aGlzLmdldE9yQ3JlYXRlQ29udGV4dChhKTtoLm91dGxldD1kLHRoaXMuY29udGV4dHMuc2V0KGEsaCl9b25DaGlsZE91dGxldERlc3Ryb3llZChhKXtjb25zdCBkPXRoaXMuZ2V0Q29udGV4dChhKTtkJiYoZC5vdXRsZXQ9bnVs''@;'; put 'put ''bCxkLmF0dGFjaFJlZj1udWxsKX1vbk91dGxldERlYWN0aXZhdGVkKCl7Y29uc3QgYT10aGlzLmNvbnRleHRzO3JldHVybiB0aGlzLmNvbnRleHRzPW5ldyBNYXAsYX1vbk91dGxldFJlQXR0YWNoZWQoYSl7dGhpcy5jb250ZXh0cz1hfWdldE9yQ3JlYXRlQ29udGV4dChhKXtsZXQgZD10aGlz''@;'; put 'put ''LmdldENvbnRleHQoYSk7cmV0dXJuIGR8fChkPW5ldyBnUmUodGhpcy5yb290SW5qZWN0b3IpLHRoaXMuY29udGV4dHMuc2V0KGEsZCkpLGR9Z2V0Q29udGV4dChhKXtyZXR1cm4gdGhpcy5jb250ZXh0cy5nZXQoYSl8fG51bGx9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4g''@;'; put 'put ''bmV3KGR8fGMpKEhyKHFsKSl9O3N0YXRpYyBcdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gY30pKCk7Y2xhc3MgSjFle19yb290O2NvbnN0cnVjdG9yKGwpe3RoaXMuX3Jvb3Q9bH1nZXQgcm9vdCgpe3JldHVybiB0''@;'; put 'put ''aGlzLl9yb290LnZhbHVlfXBhcmVudChsKXtjb25zdCBhPXRoaXMucGF0aEZyb21Sb290KGwpO3JldHVybiBhLmxlbmd0aD4xP2FbYS5sZW5ndGgtMl06bnVsbH1jaGlsZHJlbihsKXtjb25zdCBhPUMkKGwsdGhpcy5fcm9vdCk7cmV0dXJuIGE/YS5jaGlsZHJlbi5tYXAoZD0+ZC52YWx1ZSk6''@;'; put 'put ''W119Zmlyc3RDaGlsZChsKXtjb25zdCBhPUMkKGwsdGhpcy5fcm9vdCk7cmV0dXJuIGEmJmEuY2hpbGRyZW4ubGVuZ3RoPjA/YS5jaGlsZHJlblswXS52YWx1ZTpudWxsfXNpYmxpbmdzKGwpe2NvbnN0IGE9UyQobCx0aGlzLl9yb290KTtyZXR1cm4gYS5sZW5ndGg8Mj9bXTphW2EubGVuZ3Ro''@;'; put 'put ''LTJdLmNoaWxkcmVuLm1hcChoPT5oLnZhbHVlKS5maWx0ZXIoaD0+aCE9PWwpfXBhdGhGcm9tUm9vdChsKXtyZXR1cm4gUyQobCx0aGlzLl9yb290KS5tYXAoYT0+YS52YWx1ZSl9fWZ1bmN0aW9uIEMkKGMsbCl7aWYoYz09PWwudmFsdWUpcmV0dXJuIGw7Zm9yKGNvbnN0IGEgb2YgbC5jaGls''@;'; put 'put ''ZHJlbil7Y29uc3QgZD1DJChjLGEpO2lmKGQpcmV0dXJuIGR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gUyQoYyxsKXtpZihjPT09bC52YWx1ZSlyZXR1cm5bbF07Zm9yKGNvbnN0IGEgb2YgbC5jaGlsZHJlbil7Y29uc3QgZD1TJChjLGEpO2lmKGQubGVuZ3RoKXJldHVybiBkLnVuc2hpZnQobCks''@;'; put 'put ''ZH1yZXR1cm5bXX1jbGFzcyBIM3t2YWx1ZTtjaGlsZHJlbjtjb25zdHJ1Y3RvcihsLGEpe3RoaXMudmFsdWU9bCx0aGlzLmNoaWxkcmVuPWF9dG9TdHJpbmcoKXtyZXR1cm5gVHJlZU5vZGUoJHt0aGlzLnZhbHVlfSlgfX1mdW5jdGlvbiBOXyhjKXtjb25zdCBsPXt9O3JldHVybiBjJiZjLmNo''@;'; put 'put ''aWxkcmVuLmZvckVhY2goYT0+bFthLnZhbHVlLm91dGxldF09YSksbH1jbGFzcyBRMWUgZXh0ZW5kcyBKMWV7c25hcHNob3Q7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsKSx0aGlzLnNuYXBzaG90PWEsTSQodGhpcyxsKX10b1N0cmluZygpe3JldHVybiB0aGlzLnNuYXBzaG90LnRvU3RyaW5n''@;'; put 'put ''KCl9fWZ1bmN0aW9uIGVkZShjKXtjb25zdCBsPWZ1bmN0aW9uIG1SZShjKXtjb25zdCBmPW5ldyBuRihbXSx7fSx7fSwiIix7fSxpcyxjLG51bGwse30pO3JldHVybiBuZXcgdGRlKCIiLG5ldyBIMyhmLFtdKSl9KGMpLGE9bmV3IE1pKFtuZXcgblQoIiIse30pXSksZD1uZXcgTWkoe30pLGg9''@;'; put 'put ''bmV3IE1pKHt9KSxmPW5ldyBNaSh7fSksdj1uZXcgTWkoIiIpLE09bmV3IHQwKGEsZCxmLHYsaCxpcyxjLGwucm9vdCk7cmV0dXJuIE0uc25hcHNob3Q9bC5yb290LG5ldyBRMWUobmV3IEgzKE0sW10pLGwpfWNsYXNzIHQwe3VybFN1YmplY3Q7cGFyYW1zU3ViamVjdDtxdWVyeVBhcmFtc1N1''@;'; put 'put ''YmplY3Q7ZnJhZ21lbnRTdWJqZWN0O2RhdGFTdWJqZWN0O291dGxldDtjb21wb25lbnQ7c25hcHNob3Q7X2Z1dHVyZVNuYXBzaG90O19yb3V0ZXJTdGF0ZTtfcGFyYW1NYXA7X3F1ZXJ5UGFyYW1NYXA7dGl0bGU7dXJsO3BhcmFtcztxdWVyeVBhcmFtcztmcmFnbWVudDtkYXRhO2NvbnN0cnVj''@;'; put 'put ''dG9yKGwsYSxkLGgsZix2LE0sRCl7dGhpcy51cmxTdWJqZWN0PWwsdGhpcy5wYXJhbXNTdWJqZWN0PWEsdGhpcy5xdWVyeVBhcmFtc1N1YmplY3Q9ZCx0aGlzLmZyYWdtZW50U3ViamVjdD1oLHRoaXMuZGF0YVN1YmplY3Q9Zix0aGlzLm91dGxldD12LHRoaXMuY29tcG9uZW50PU0sdGhpcy5f''@;'; put 'put ''ZnV0dXJlU25hcHNob3Q9RCx0aGlzLnRpdGxlPXRoaXMuZGF0YVN1YmplY3Q/LnBpcGUoWWEoVT0+VVt0VF0pKT8/X28odm9pZCAwKSx0aGlzLnVybD1sLHRoaXMucGFyYW1zPWEsdGhpcy5xdWVyeVBhcmFtcz1kLHRoaXMuZnJhZ21lbnQ9aCx0aGlzLmRhdGE9Zn1nZXQgcm91dGVDb25maWco''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fZnV0dXJlU25hcHNob3Qucm91dGVDb25maWd9Z2V0IHJvb3QoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucm9vdH1nZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhcmVudCh0aGlzKX1nZXQgZmlyc3RDaGlsZCgpe3JldHVybiB0aGlzLl9y''@;'; put 'put ''b3V0ZXJTdGF0ZS5maXJzdENoaWxkKHRoaXMpfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5jaGlsZHJlbih0aGlzKX1nZXQgcGF0aEZyb21Sb290KCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhdGhGcm9tUm9vdCh0aGlzKX1nZXQgcGFyYW1NYXAoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fcGFyYW1NYXA/Pz10aGlzLnBhcmFtcy5waXBlKFlhKGw9PkZfKGwpKSksdGhpcy5fcGFyYW1NYXB9Z2V0IHF1ZXJ5UGFyYW1NYXAoKXtyZXR1cm4gdGhpcy5fcXVlcnlQYXJhbU1hcD8/PXRoaXMucXVlcnlQYXJhbXMucGlwZShZYShsPT5GXyhsKSkpLHRoaXMuX3F1ZXJ5UGFy''@;'; put 'put ''YW1NYXB9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5zbmFwc2hvdD90aGlzLnNuYXBzaG90LnRvU3RyaW5nKCk6YEZ1dHVyZSgke3RoaXMuX2Z1dHVyZVNuYXBzaG90fSlgfX1mdW5jdGlvbiB0RihjLGwsYT0iZW1wdHlPbmx5Iil7bGV0IGQ7Y29uc3R7cm91dGVDb25maWc6aH09YztyZXR1cm4g''@;'; put 'put ''ZD1udWxsPT09bHx8ImFsd2F5cyIhPT1hJiYiIiE9PWg/LnBhdGgmJihsLmNvbXBvbmVudHx8bC5yb3V0ZUNvbmZpZz8ubG9hZENvbXBvbmVudCk/e3BhcmFtczp7Li4uYy5wYXJhbXN9LGRhdGE6ey4uLmMuZGF0YX0scmVzb2x2ZTp7Li4uYy5kYXRhLC4uLmMuX3Jlc29sdmVkRGF0YT8/e319''@;'; put 'put ''fTp7cGFyYW1zOnsuLi5sLnBhcmFtcywuLi5jLnBhcmFtc30sZGF0YTp7Li4ubC5kYXRhLC4uLmMuZGF0YX0scmVzb2x2ZTp7Li4uYy5kYXRhLC4uLmwuZGF0YSwuLi5oPy5kYXRhLC4uLmMuX3Jlc29sdmVkRGF0YX19LGgmJnJkZShoKSYmKGQucmVzb2x2ZVt0VF09aC50aXRsZSksZH1jbGFz''@;'; put 'put ''cyBuRnt1cmw7cGFyYW1zO3F1ZXJ5UGFyYW1zO2ZyYWdtZW50O2RhdGE7b3V0bGV0O2NvbXBvbmVudDtyb3V0ZUNvbmZpZztfcmVzb2x2ZTtfcmVzb2x2ZWREYXRhO19yb3V0ZXJTdGF0ZTtfcGFyYW1NYXA7X3F1ZXJ5UGFyYW1NYXA7Z2V0IHRpdGxlKCl7cmV0dXJuIHRoaXMuZGF0YT8uW3RU''@;'; put 'put ''XX1jb25zdHJ1Y3RvcihsLGEsZCxoLGYsdixNLEQsVSl7dGhpcy51cmw9bCx0aGlzLnBhcmFtcz1hLHRoaXMucXVlcnlQYXJhbXM9ZCx0aGlzLmZyYWdtZW50PWgsdGhpcy5kYXRhPWYsdGhpcy5vdXRsZXQ9dix0aGlzLmNvbXBvbmVudD1NLHRoaXMucm91dGVDb25maWc9RCx0aGlzLl9yZXNv''@;'; put 'put ''bHZlPVV9Z2V0IHJvb3QoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucm9vdH1nZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhcmVudCh0aGlzKX1nZXQgZmlyc3RDaGlsZCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5maXJzdENoaWxkKHRoaXMpfWdldCBjaGls''@;'; put 'put ''ZHJlbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5jaGlsZHJlbih0aGlzKX1nZXQgcGF0aEZyb21Sb290KCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhdGhGcm9tUm9vdCh0aGlzKX1nZXQgcGFyYW1NYXAoKXtyZXR1cm4gdGhpcy5fcGFyYW1NYXA/Pz1GXyh0aGlzLnBhcmFtcyks''@;'; put 'put ''dGhpcy5fcGFyYW1NYXB9Z2V0IHF1ZXJ5UGFyYW1NYXAoKXtyZXR1cm4gdGhpcy5fcXVlcnlQYXJhbU1hcD8/PUZfKHRoaXMucXVlcnlQYXJhbXMpLHRoaXMuX3F1ZXJ5UGFyYW1NYXB9dG9TdHJpbmcoKXtyZXR1cm5gUm91dGUodXJsOicke3RoaXMudXJsLm1hcChkPT5kLnRvU3RyaW5nKCkp''@;'; put 'put ''LmpvaW4oIi8iKX0nLCBwYXRoOicke3RoaXMucm91dGVDb25maWc/dGhpcy5yb3V0ZUNvbmZpZy5wYXRoOiIifScpYH19Y2xhc3MgdGRlIGV4dGVuZHMgSjFle3VybDtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGEpLHRoaXMudXJsPWwsTSQodGhpcyxhKX10b1N0cmluZygpe3JldHVybiBuZGUo''@;'; put 'put ''dGhpcy5fcm9vdCl9fWZ1bmN0aW9uIE0kKGMsbCl7bC52YWx1ZS5fcm91dGVyU3RhdGU9YyxsLmNoaWxkcmVuLmZvckVhY2goYT0+TSQoYyxhKSl9ZnVuY3Rpb24gbmRlKGMpe2NvbnN0IGw9Yy5jaGlsZHJlbi5sZW5ndGg+MD9gIHsgJHtjLmNoaWxkcmVuLm1hcChuZGUpLmpvaW4oIiwgIil9''@;'; put 'put ''IH0gYDoiIjtyZXR1cm5gJHtjLnZhbHVlfSR7bH1gfWZ1bmN0aW9uIHgkKGMpe2lmKGMuc25hcHNob3Qpe2NvbnN0IGw9Yy5zbmFwc2hvdCxhPWMuX2Z1dHVyZVNuYXBzaG90O2Muc25hcHNob3Q9YSxkNChsLnF1ZXJ5UGFyYW1zLGEucXVlcnlQYXJhbXMpfHxjLnF1ZXJ5UGFyYW1zU3ViamVj''@;'; put 'put ''dC5uZXh0KGEucXVlcnlQYXJhbXMpLGwuZnJhZ21lbnQhPT1hLmZyYWdtZW50JiZjLmZyYWdtZW50U3ViamVjdC5uZXh0KGEuZnJhZ21lbnQpLGQ0KGwucGFyYW1zLGEucGFyYW1zKXx8Yy5wYXJhbXNTdWJqZWN0Lm5leHQoYS5wYXJhbXMpLGZ1bmN0aW9uIEFJZShjLGwpe2lmKGMubGVuZ3Ro''@;'; put 'put ''IT09bC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBhPTA7YTxjLmxlbmd0aDsrK2EpaWYoIWQ0KGNbYV0sbFthXSkpcmV0dXJuITE7cmV0dXJuITB9KGwudXJsLGEudXJsKXx8Yy51cmxTdWJqZWN0Lm5leHQoYS51cmwpLGQ0KGwuZGF0YSxhLmRhdGEpfHxjLmRhdGFTdWJqZWN0Lm5leHQoYS5k''@;'; put 'put ''YXRhKX1lbHNlIGMuc25hcHNob3Q9Yy5fZnV0dXJlU25hcHNob3QsYy5kYXRhU3ViamVjdC5uZXh0KGMuX2Z1dHVyZVNuYXBzaG90LmRhdGEpfWZ1bmN0aW9uIEUkKGMsbCl7Y29uc3QgYT1kNChjLnBhcmFtcyxsLnBhcmFtcykmJmZ1bmN0aW9uIFJJZShjLGwpe3JldHVybiBzOShjLGwpJiZj''@;'; put 'put ''LmV2ZXJ5KChhLGQpPT5kNChhLnBhcmFtZXRlcnMsbFtkXS5wYXJhbWV0ZXJzKSl9KGMudXJsLGwudXJsKTtyZXR1cm4gYSYmISghYy5wYXJlbnQhPSFsLnBhcmVudCkmJighYy5wYXJlbnR8fEUkKGMucGFyZW50LGwucGFyZW50KSl9ZnVuY3Rpb24gcmRlKGMpe3JldHVybiJzdHJpbmciPT10''@;'; put 'put ''eXBlb2YgYy50aXRsZXx8bnVsbD09PWMudGl0bGV9Y29uc3QgdlJlPW5ldyBqbigiIik7bGV0IFFnPSgoKT0+e2NsYXNzIGN7YWN0aXZhdGVkPW51bGw7Z2V0IGFjdGl2YXRlZENvbXBvbmVudFJlZigpe3JldHVybiB0aGlzLmFjdGl2YXRlZH1fYWN0aXZhdGVkUm91dGU9bnVsbDtuYW1lPWlz''@;'; put 'put ''O2FjdGl2YXRlRXZlbnRzPW5ldyBYcjtkZWFjdGl2YXRlRXZlbnRzPW5ldyBYcjthdHRhY2hFdmVudHM9bmV3IFhyO2RldGFjaEV2ZW50cz1uZXcgWHI7cm91dGVyT3V0bGV0RGF0YT15VSh2b2lkIDApO3BhcmVudENvbnRleHRzPUpuKGxUKTtsb2NhdGlvbj1KbihiZSk7Y2hhbmdlRGV0ZWN0''@;'; put 'put ''b3I9Sm4oSHMpO2lucHV0QmluZGVyPUpuKHJGLHtvcHRpb25hbDohMH0pO3N1cHBvcnRzQmluZGluZ1RvQ29tcG9uZW50SW5wdXRzPSEwO25nT25DaGFuZ2VzKGEpe2lmKGEubmFtZSl7Y29uc3R7Zmlyc3RDaGFuZ2U6ZCxwcmV2aW91c1ZhbHVlOmh9PWEubmFtZTtpZihkKXJldHVybjt0aGlz''@;'; put 'put ''LmlzVHJhY2tlZEluUGFyZW50Q29udGV4dHMoaCkmJih0aGlzLmRlYWN0aXZhdGUoKSx0aGlzLnBhcmVudENvbnRleHRzLm9uQ2hpbGRPdXRsZXREZXN0cm95ZWQoaCkpLHRoaXMuaW5pdGlhbGl6ZU91dGxldFdpdGhOYW1lKCl9fW5nT25EZXN0cm95KCl7dGhpcy5pc1RyYWNrZWRJblBhcmVu''@;'; put 'put ''dENvbnRleHRzKHRoaXMubmFtZSkmJnRoaXMucGFyZW50Q29udGV4dHMub25DaGlsZE91dGxldERlc3Ryb3llZCh0aGlzLm5hbWUpLHRoaXMuaW5wdXRCaW5kZXI/LnVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YSh0aGlzKX1pc1RyYWNrZWRJblBhcmVudENvbnRleHRzKGEpe3JldHVybiB0aGlz''@;'; put 'put ''LnBhcmVudENvbnRleHRzLmdldENvbnRleHQoYSk/Lm91dGxldD09PXRoaXN9bmdPbkluaXQoKXt0aGlzLmluaXRpYWxpemVPdXRsZXRXaXRoTmFtZSgpfWluaXRpYWxpemVPdXRsZXRXaXRoTmFtZSgpe2lmKHRoaXMucGFyZW50Q29udGV4dHMub25DaGlsZE91dGxldENyZWF0ZWQodGhpcy5u''@;'; put 'put ''YW1lLHRoaXMpLHRoaXMuYWN0aXZhdGVkKXJldHVybjtjb25zdCBhPXRoaXMucGFyZW50Q29udGV4dHMuZ2V0Q29udGV4dCh0aGlzLm5hbWUpO2E/LnJvdXRlJiYoYS5hdHRhY2hSZWY/dGhpcy5hdHRhY2goYS5hdHRhY2hSZWYsYS5yb3V0ZSk6dGhpcy5hY3RpdmF0ZVdpdGgoYS5yb3V0ZSxh''@;'; put 'put ''LmluamVjdG9yKSl9Z2V0IGlzQWN0aXZhdGVkKCl7cmV0dXJuISF0aGlzLmFjdGl2YXRlZH1nZXQgY29tcG9uZW50KCl7aWYoIXRoaXMuYWN0aXZhdGVkKXRocm93IG5ldyBQcig0MDEyLCExKTtyZXR1cm4gdGhpcy5hY3RpdmF0ZWQuaW5zdGFuY2V9Z2V0IGFjdGl2YXRlZFJvdXRlKCl7aWYo''@;'; put 'put ''IXRoaXMuYWN0aXZhdGVkKXRocm93IG5ldyBQcig0MDEyLCExKTtyZXR1cm4gdGhpcy5fYWN0aXZhdGVkUm91dGV9Z2V0IGFjdGl2YXRlZFJvdXRlRGF0YSgpe3JldHVybiB0aGlzLl9hY3RpdmF0ZWRSb3V0ZT90aGlzLl9hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5kYXRhOnt9fWRldGFjaCgp''@;'; put 'put ''e2lmKCF0aGlzLmFjdGl2YXRlZCl0aHJvdyBuZXcgUHIoNDAxMiwhMSk7dGhpcy5sb2NhdGlvbi5kZXRhY2goKTtjb25zdCBhPXRoaXMuYWN0aXZhdGVkO3JldHVybiB0aGlzLmFjdGl2YXRlZD1udWxsLHRoaXMuX2FjdGl2YXRlZFJvdXRlPW51bGwsdGhpcy5kZXRhY2hFdmVudHMuZW1pdChh''@;'; put 'put ''Lmluc3RhbmNlKSxhfWF0dGFjaChhLGQpe3RoaXMuYWN0aXZhdGVkPWEsdGhpcy5fYWN0aXZhdGVkUm91dGU9ZCx0aGlzLmxvY2F0aW9uLmluc2VydChhLmhvc3RWaWV3KSx0aGlzLmlucHV0QmluZGVyPy5iaW5kQWN0aXZhdGVkUm91dGVUb091dGxldENvbXBvbmVudCh0aGlzKSx0aGlzLmF0''@;'; put 'put ''dGFjaEV2ZW50cy5lbWl0KGEuaW5zdGFuY2UpfWRlYWN0aXZhdGUoKXtpZih0aGlzLmFjdGl2YXRlZCl7Y29uc3QgYT10aGlzLmNvbXBvbmVudDt0aGlzLmFjdGl2YXRlZC5kZXN0cm95KCksdGhpcy5hY3RpdmF0ZWQ9bnVsbCx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1udWxsLHRoaXMuZGVhY3Rp''@;'; put 'put ''dmF0ZUV2ZW50cy5lbWl0KGEpfX1hY3RpdmF0ZVdpdGgoYSxkKXtpZih0aGlzLmlzQWN0aXZhdGVkKXRocm93IG5ldyBQcig0MDEzLCExKTt0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1hO2NvbnN0IGg9dGhpcy5sb2NhdGlvbix2PWEuc25hcHNob3QuY29tcG9uZW50LE09dGhpcy5wYXJlbnRDb250''@;'; put 'put ''ZXh0cy5nZXRPckNyZWF0ZUNvbnRleHQodGhpcy5uYW1lKS5jaGlsZHJlbixEPW5ldyB5UmUoYSxNLGguaW5qZWN0b3IsdGhpcy5yb3V0ZXJPdXRsZXREYXRhKTt0aGlzLmFjdGl2YXRlZD1oLmNyZWF0ZUNvbXBvbmVudCh2LHtpbmRleDpoLmxlbmd0aCxpbmplY3RvcjpELGVudmlyb25tZW50''@;'; put 'put ''SW5qZWN0b3I6ZH0pLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCksdGhpcy5pbnB1dEJpbmRlcj8uYmluZEFjdGl2YXRlZFJvdXRlVG9PdXRsZXRDb21wb25lbnQodGhpcyksdGhpcy5hY3RpdmF0ZUV2ZW50cy5lbWl0KHRoaXMuYWN0aXZhdGVkLmluc3RhbmNlKX1zdGF0aWMg''@;'; put 'put ''XHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVkaXI9WXIoe3R5cGU6YyxzZWxlY3RvcnM6W1sicm91dGVyLW91dGxldCJdXSxpbnB1dHM6e25hbWU6Im5hbWUiLHJvdXRlck91dGxldERhdGE6WzEsInJvdXRlck91dGxldERhdGEiXX0sb3V0cHV0''@;'; put 'put ''czp7YWN0aXZhdGVFdmVudHM6ImFjdGl2YXRlIixkZWFjdGl2YXRlRXZlbnRzOiJkZWFjdGl2YXRlIixhdHRhY2hFdmVudHM6ImF0dGFjaCIsZGV0YWNoRXZlbnRzOiJkZXRhY2gifSxleHBvcnRBczpbIm91dGxldCJdLGZlYXR1cmVzOltXb119KX1yZXR1cm4gY30pKCk7Y2xhc3MgeVJle3Jv''@;'; put 'put ''dXRlO2NoaWxkQ29udGV4dHM7cGFyZW50O291dGxldERhdGE7Y29uc3RydWN0b3IobCxhLGQsaCl7dGhpcy5yb3V0ZT1sLHRoaXMuY2hpbGRDb250ZXh0cz1hLHRoaXMucGFyZW50PWQsdGhpcy5vdXRsZXREYXRhPWh9Z2V0KGwsYSl7cmV0dXJuIGw9PT10MD90aGlzLnJvdXRlOmw9PT1sVD90''@;'; put 'put ''aGlzLmNoaWxkQ29udGV4dHM6bD09PXZSZT90aGlzLm91dGxldERhdGE6dGhpcy5wYXJlbnQuZ2V0KGwsYSl9fWNvbnN0IHJGPW5ldyBqbigiIik7bGV0IGlkZT0oKCk9PntjbGFzcyBje291dGxldERhdGFTdWJzY3JpcHRpb25zPW5ldyBNYXA7YmluZEFjdGl2YXRlZFJvdXRlVG9PdXRsZXRD''@;'; put 'put ''b21wb25lbnQoYSl7dGhpcy51bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEoYSksdGhpcy5zdWJzY3JpYmVUb1JvdXRlRGF0YShhKX11bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEoYSl7dGhpcy5vdXRsZXREYXRhU3Vic2NyaXB0aW9ucy5nZXQoYSk/LnVuc3Vic2NyaWJlKCksdGhpcy5vdXRsZXRE''@;'; put 'put ''YXRhU3Vic2NyaXB0aW9ucy5kZWxldGUoYSl9c3Vic2NyaWJlVG9Sb3V0ZURhdGEoYSl7Y29uc3R7YWN0aXZhdGVkUm91dGU6ZH09YSxoPWk5KFtkLnF1ZXJ5UGFyYW1zLGQucGFyYW1zLGQuZGF0YV0pLnBpcGUoYmQoKFtmLHYsTV0sRCk9PihNPXsuLi5mLC4uLnYsLi4uTX0sMD09PUQ/X28o''@;'; put 'put ''TSk6UHJvbWlzZS5yZXNvbHZlKE0pKSkpLnN1YnNjcmliZShmPT57aWYoIWEuaXNBY3RpdmF0ZWR8fCFhLmFjdGl2YXRlZENvbXBvbmVudFJlZnx8YS5hY3RpdmF0ZWRSb3V0ZSE9PWR8fG51bGw9PT1kLmNvbXBvbmVudClyZXR1cm4gdm9pZCB0aGlzLnVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0''@;'; put 'put ''YShhKTtjb25zdCB2PWZ1bmN0aW9uIGFUZShjKXtjb25zdCBsPUtvKGMpO2lmKCFsKXJldHVybiBudWxsO2NvbnN0IGE9bmV3IGxlKGwpO3JldHVybntnZXQgc2VsZWN0b3IoKXtyZXR1cm4gYS5zZWxlY3Rvcn0sZ2V0IHR5cGUoKXtyZXR1cm4gYS5jb21wb25lbnRUeXBlfSxnZXQgaW5wdXRz''@;'; put 'put ''KCl7cmV0dXJuIGEuaW5wdXRzfSxnZXQgb3V0cHV0cygpe3JldHVybiBhLm91dHB1dHN9LGdldCBuZ0NvbnRlbnRTZWxlY3RvcnMoKXtyZXR1cm4gYS5uZ0NvbnRlbnRTZWxlY3RvcnN9LGdldCBpc1N0YW5kYWxvbmUoKXtyZXR1cm4gbC5zdGFuZGFsb25lfSxnZXQgaXNTaWduYWwoKXtyZXR1''@;'; put 'put ''cm4gbC5zaWduYWxzfX19KGQuY29tcG9uZW50KTtpZih2KWZvcihjb25zdHt0ZW1wbGF0ZU5hbWU6TX1vZiB2LmlucHV0cylhLmFjdGl2YXRlZENvbXBvbmVudFJlZi5zZXRJbnB1dChNLGZbTV0pO2Vsc2UgdGhpcy51bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEoYSl9KTt0aGlzLm91dGxldERh''@;'; put 'put ''dGFTdWJzY3JpcHRpb25zLnNldChhLGgpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfXJldHVybiBjfSkoKSxhZGU9KCgpPT57Y2xhc3MgY3tzdGF0aWMgXHUw''@;'; put 'put ''Mjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1sibmctY29tcG9uZW50Il1dLGV4cG9ydEFzOlsiZW1wdHlSb3V0ZXJPdXRsZXQiXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEm''@;'; put 'put ''ZCYmR3QoMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W1FnXSxlbmNhcHN1bGF0aW9uOjJ9KX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gVCQoYyl7Y29uc3QgbD1jLmNoaWxkcmVuJiZjLmNoaWxkcmVuLm1hcChUJCksYT1sP3suLi5jLGNoaWxkcmVuOmx9OnsuLi5jfTtyZXR1cm4h''@;'; put 'put ''YS5jb21wb25lbnQmJiFhLmxvYWRDb21wb25lbnQmJihsfHxhLmxvYWRDaGlsZHJlbikmJmEub3V0bGV0JiZhLm91dGxldCE9PWlzJiYoYS5jb21wb25lbnQ9YWRlKSxhfWZ1bmN0aW9uIGNUKGMsbCxhKXtpZihhJiZjLnNob3VsZFJldXNlUm91dGUobC52YWx1ZSxhLnZhbHVlLnNuYXBzaG90''@;'; put 'put ''KSl7Y29uc3QgZD1hLnZhbHVlO2QuX2Z1dHVyZVNuYXBzaG90PWwudmFsdWU7Y29uc3QgaD1mdW5jdGlvbiBfUmUoYyxsLGEpe3JldHVybiBsLmNoaWxkcmVuLm1hcChkPT57Zm9yKGNvbnN0IGggb2YgYS5jaGlsZHJlbilpZihjLnNob3VsZFJldXNlUm91dGUoZC52YWx1ZSxoLnZhbHVlLnNu''@;'; put 'put ''YXBzaG90KSlyZXR1cm4gY1QoYyxkLGgpO3JldHVybiBjVChjLGQpfSl9KGMsbCxhKTtyZXR1cm4gbmV3IEgzKGQsaCl9e2lmKGMuc2hvdWxkQXR0YWNoKGwudmFsdWUpKXtjb25zdCBmPWMucmV0cmlldmUobC52YWx1ZSk7aWYobnVsbCE9PWYpe2NvbnN0IHY9Zi5yb3V0ZTtyZXR1cm4gdi52''@;'; put 'put ''YWx1ZS5fZnV0dXJlU25hcHNob3Q9bC52YWx1ZSx2LmNoaWxkcmVuPWwuY2hpbGRyZW4ubWFwKE09PmNUKGMsTSkpLHZ9fWNvbnN0IGQ9ZnVuY3Rpb24gd1JlKGMpe3JldHVybiBuZXcgdDAobmV3IE1pKGMudXJsKSxuZXcgTWkoYy5wYXJhbXMpLG5ldyBNaShjLnF1ZXJ5UGFyYW1zKSxuZXcg''@;'; put 'put ''TWkoYy5mcmFnbWVudCksbmV3IE1pKGMuZGF0YSksYy5vdXRsZXQsYy5jb21wb25lbnQsYyl9KGwudmFsdWUpLGg9bC5jaGlsZHJlbi5tYXAoZj0+Y1QoYyxmKSk7cmV0dXJuIG5ldyBIMyhkLGgpfX1jbGFzcyBBJHtyZWRpcmVjdFRvO25hdmlnYXRpb25CZWhhdmlvck9wdGlvbnM7Y29uc3Ry''@;'; put 'put ''dWN0b3IobCxhKXt0aGlzLnJlZGlyZWN0VG89bCx0aGlzLm5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnM9YX19Y29uc3Qgb2RlPSJuZ05hdmlnYXRpb25DYW5jZWxpbmdFcnJvciI7ZnVuY3Rpb24gaUYoYyxsKXtjb25zdHtyZWRpcmVjdFRvOmEsbmF2aWdhdGlvbkJlaGF2aW9yT3B0aW9uczpk''@;'; put 'put ''fT1sOShsKT97cmVkaXJlY3RUbzpsLG5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnM6dm9pZCAwfTpsLGg9c2RlKCExLGMyLlJlZGlyZWN0KTtyZXR1cm4gaC51cmw9YSxoLm5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnM9ZCxofWZ1bmN0aW9uIHNkZShjLGwpe2NvbnN0IGE9bmV3IEVycm9yKGBO''@;'; put 'put ''YXZpZ2F0aW9uQ2FuY2VsaW5nRXJyb3I6ICR7Y3x8IiJ9YCk7cmV0dXJuIGFbb2RlXT0hMCxhLmNhbmNlbGxhdGlvbkNvZGU9bCxhfWZ1bmN0aW9uIGxkZShjKXtyZXR1cm4hIWMmJmNbb2RlXX1jbGFzcyBNUmV7cm91dGVSZXVzZVN0cmF0ZWd5O2Z1dHVyZVN0YXRlO2N1cnJTdGF0ZTtmb3J3''@;'; put 'put ''YXJkRXZlbnQ7aW5wdXRCaW5kaW5nRW5hYmxlZDtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5PWwsdGhpcy5mdXR1cmVTdGF0ZT1hLHRoaXMuY3VyclN0YXRlPWQsdGhpcy5mb3J3YXJkRXZlbnQ9aCx0aGlzLmlucHV0QmluZGluZ0VuYWJsZWQ9Zn1hY3Rp''@;'; put 'put ''dmF0ZShsKXtjb25zdCBhPXRoaXMuZnV0dXJlU3RhdGUuX3Jvb3QsZD10aGlzLmN1cnJTdGF0ZT90aGlzLmN1cnJTdGF0ZS5fcm9vdDpudWxsO3RoaXMuZGVhY3RpdmF0ZUNoaWxkUm91dGVzKGEsZCxsKSx4JCh0aGlzLmZ1dHVyZVN0YXRlLnJvb3QpLHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRl''@;'; put 'put ''cyhhLGQsbCl9ZGVhY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSxkKXtjb25zdCBoPU5fKGEpO2wuY2hpbGRyZW4uZm9yRWFjaChmPT57Y29uc3Qgdj1mLnZhbHVlLm91dGxldDt0aGlzLmRlYWN0aXZhdGVSb3V0ZXMoZixoW3ZdLGQpLGRlbGV0ZSBoW3ZdfSksT2JqZWN0LnZhbHVlcyhoKS5mb3JF''@;'; put 'put ''YWNoKGY9Pnt0aGlzLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKGYsZCl9KX1kZWFjdGl2YXRlUm91dGVzKGwsYSxkKXtjb25zdCBoPWwudmFsdWUsZj1hP2EudmFsdWU6bnVsbDtpZihoPT09ZilpZihoLmNvbXBvbmVudCl7Y29uc3Qgdj1kLmdldENvbnRleHQoaC5vdXRsZXQpO3Ym''@;'; put 'put ''JnRoaXMuZGVhY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSx2LmNoaWxkcmVuKX1lbHNlIHRoaXMuZGVhY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSxkKTtlbHNlIGYmJnRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4oYSxkKX1kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihsLGEp''@;'; put 'put ''e2wudmFsdWUuY29tcG9uZW50JiZ0aGlzLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGREZXRhY2gobC52YWx1ZS5zbmFwc2hvdCk/dGhpcy5kZXRhY2hBbmRTdG9yZVJvdXRlU3VidHJlZShsLGEpOnRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kT3V0bGV0KGwsYSl9ZGV0YWNoQW5kU3RvcmVSb3V0''@;'; put 'put ''ZVN1YnRyZWUobCxhKXtjb25zdCBkPWEuZ2V0Q29udGV4dChsLnZhbHVlLm91dGxldCksaD1kJiZsLnZhbHVlLmNvbXBvbmVudD9kLmNoaWxkcmVuOmEsZj1OXyhsKTtmb3IoY29uc3QgdiBvZiBPYmplY3QudmFsdWVzKGYpKXRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4odixo''@;'; put 'put ''KTtpZihkJiZkLm91dGxldCl7Y29uc3Qgdj1kLm91dGxldC5kZXRhY2goKSxNPWQuY2hpbGRyZW4ub25PdXRsZXREZWFjdGl2YXRlZCgpO3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnN0b3JlKGwudmFsdWUuc25hcHNob3Qse2NvbXBvbmVudFJlZjp2LHJvdXRlOmwsY29udGV4dHM6TX0pfX1k''@;'; put 'put ''ZWFjdGl2YXRlUm91dGVBbmRPdXRsZXQobCxhKXtjb25zdCBkPWEuZ2V0Q29udGV4dChsLnZhbHVlLm91dGxldCksaD1kJiZsLnZhbHVlLmNvbXBvbmVudD9kLmNoaWxkcmVuOmEsZj1OXyhsKTtmb3IoY29uc3QgdiBvZiBPYmplY3QudmFsdWVzKGYpKXRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5k''@;'; put 'put ''SXRzQ2hpbGRyZW4odixoKTtkJiYoZC5vdXRsZXQmJihkLm91dGxldC5kZWFjdGl2YXRlKCksZC5jaGlsZHJlbi5vbk91dGxldERlYWN0aXZhdGVkKCkpLGQuYXR0YWNoUmVmPW51bGwsZC5yb3V0ZT1udWxsKX1hY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSxkKXtjb25zdCBoPU5fKGEpO2wuY2hp''@;'; put 'put ''bGRyZW4uZm9yRWFjaChmPT57dGhpcy5hY3RpdmF0ZVJvdXRlcyhmLGhbZi52YWx1ZS5vdXRsZXRdLGQpLHRoaXMuZm9yd2FyZEV2ZW50KG5ldyBjUmUoZi52YWx1ZS5zbmFwc2hvdCkpfSksbC5jaGlsZHJlbi5sZW5ndGgmJnRoaXMuZm9yd2FyZEV2ZW50KG5ldyBzUmUobC52YWx1ZS5zbmFw''@;'; put 'put ''c2hvdCkpfWFjdGl2YXRlUm91dGVzKGwsYSxkKXtjb25zdCBoPWwudmFsdWUsZj1hP2EudmFsdWU6bnVsbDtpZih4JChoKSxoPT09ZilpZihoLmNvbXBvbmVudCl7Y29uc3Qgdj1kLmdldE9yQ3JlYXRlQ29udGV4dChoLm91dGxldCk7dGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSx2LmNo''@;'; put 'put ''aWxkcmVuKX1lbHNlIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhsLGEsZCk7ZWxzZSBpZihoLmNvbXBvbmVudCl7Y29uc3Qgdj1kLmdldE9yQ3JlYXRlQ29udGV4dChoLm91dGxldCk7aWYodGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkQXR0YWNoKGguc25hcHNob3QpKXtjb25zdCBN''@;'; put 'put ''PXRoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnJldHJpZXZlKGguc25hcHNob3QpO3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnN0b3JlKGguc25hcHNob3QsbnVsbCksdi5jaGlsZHJlbi5vbk91dGxldFJlQXR0YWNoZWQoTS5jb250ZXh0cyksdi5hdHRhY2hSZWY9TS5jb21wb25lbnRSZWYsdi5y''@;'; put 'put ''b3V0ZT1NLnJvdXRlLnZhbHVlLHYub3V0bGV0JiZ2Lm91dGxldC5hdHRhY2goTS5jb21wb25lbnRSZWYsTS5yb3V0ZS52YWx1ZSkseCQoTS5yb3V0ZS52YWx1ZSksdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGwsbnVsbCx2LmNoaWxkcmVuKX1lbHNlIHYuYXR0YWNoUmVmPW51bGwsdi5yb3V0''@;'; put 'put ''ZT1oLHYub3V0bGV0JiZ2Lm91dGxldC5hY3RpdmF0ZVdpdGgoaCx2LmluamVjdG9yKSx0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMobCxudWxsLHYuY2hpbGRyZW4pfWVsc2UgdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGwsbnVsbCxkKX19Y2xhc3MgY2Rle3BhdGg7cm91dGU7Y29uc3RydWN0''@;'; put 'put ''b3IobCl7dGhpcy5wYXRoPWwsdGhpcy5yb3V0ZT10aGlzLnBhdGhbdGhpcy5wYXRoLmxlbmd0aC0xXX19Y2xhc3MgYUZ7Y29tcG9uZW50O3JvdXRlO2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5jb21wb25lbnQ9bCx0aGlzLnJvdXRlPWF9fWZ1bmN0aW9uIHhSZShjLGwsYSl7Y29uc3QgZD1jLl9y''@;'; put 'put ''b290O3JldHVybiB1VChkLGw/bC5fcm9vdDpudWxsLGEsW2QudmFsdWVdKX1mdW5jdGlvbiBWXyhjLGwpe2NvbnN0IGE9U3ltYm9sKCksZD1sLmdldChjLGEpO3JldHVybiBkPT09YT8iZnVuY3Rpb24iIT10eXBlb2YgY3x8ZnVuY3Rpb24gX3MoYyl7cmV0dXJuIG51bGwhPT1LbChjKX0oYyk/''@;'; put 'put ''bC5nZXQoYyk6YzpkfWZ1bmN0aW9uIHVUKGMsbCxhLGQsaD17Y2FuRGVhY3RpdmF0ZUNoZWNrczpbXSxjYW5BY3RpdmF0ZUNoZWNrczpbXX0pe2NvbnN0IGY9Tl8obCk7cmV0dXJuIGMuY2hpbGRyZW4uZm9yRWFjaCh2PT57KGZ1bmN0aW9uIFRSZShjLGwsYSxkLGg9e2NhbkRlYWN0aXZhdGVD''@;'; put 'put ''aGVja3M6W10sY2FuQWN0aXZhdGVDaGVja3M6W119KXtjb25zdCBmPWMudmFsdWUsdj1sP2wudmFsdWU6bnVsbCxNPWE/YS5nZXRDb250ZXh0KGMudmFsdWUub3V0bGV0KTpudWxsO2lmKHYmJmYucm91dGVDb25maWc9PT12LnJvdXRlQ29uZmlnKXtjb25zdCBEPWZ1bmN0aW9uIEFSZShjLGws''@;'; put 'put ''YSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGEpcmV0dXJuIGEoYyxsKTtzd2l0Y2goYSl7Y2FzZSJwYXRoUGFyYW1zQ2hhbmdlIjpyZXR1cm4hczkoYy51cmwsbC51cmwpO2Nhc2UicGF0aFBhcmFtc09yUXVlcnlQYXJhbXNDaGFuZ2UiOnJldHVybiFzOShjLnVybCxsLnVybCl8fCFkNChjLnF1''@;'; put 'put ''ZXJ5UGFyYW1zLGwucXVlcnlQYXJhbXMpO2Nhc2UiYWx3YXlzIjpyZXR1cm4hMDtjYXNlInBhcmFtc09yUXVlcnlQYXJhbXNDaGFuZ2UiOnJldHVybiFFJChjLGwpfHwhZDQoYy5xdWVyeVBhcmFtcyxsLnF1ZXJ5UGFyYW1zKTtkZWZhdWx0OnJldHVybiFFJChjLGwpfX0odixmLGYucm91dGVD''@;'; put 'put ''b25maWcucnVuR3VhcmRzQW5kUmVzb2x2ZXJzKTtEP2guY2FuQWN0aXZhdGVDaGVja3MucHVzaChuZXcgY2RlKGQpKTooZi5kYXRhPXYuZGF0YSxmLl9yZXNvbHZlZERhdGE9di5fcmVzb2x2ZWREYXRhKSx1VChjLGwsZi5jb21wb25lbnQ/TT9NLmNoaWxkcmVuOm51bGw6YSxkLGgpLEQmJk0m''@;'; put 'put ''Jk0ub3V0bGV0JiZNLm91dGxldC5pc0FjdGl2YXRlZCYmaC5jYW5EZWFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IGFGKE0ub3V0bGV0LmNvbXBvbmVudCx2KSl9ZWxzZSB2JiZkVChsLE0saCksaC5jYW5BY3RpdmF0ZUNoZWNrcy5wdXNoKG5ldyBjZGUoZCkpLHVUKGMsbnVsbCxmLmNvbXBvbmVu''@;'; put 'put ''dD9NP00uY2hpbGRyZW46bnVsbDphLGQsaCl9KSh2LGZbdi52YWx1ZS5vdXRsZXRdLGEsZC5jb25jYXQoW3YudmFsdWVdKSxoKSxkZWxldGUgZlt2LnZhbHVlLm91dGxldF19KSxPYmplY3QuZW50cmllcyhmKS5mb3JFYWNoKChbdixNXSk9PmRUKE0sYS5nZXRDb250ZXh0KHYpLGgpKSxofWZ1''@;'; put 'put ''bmN0aW9uIGRUKGMsbCxhKXtjb25zdCBkPU5fKGMpLGg9Yy52YWx1ZTtPYmplY3QuZW50cmllcyhkKS5mb3JFYWNoKChbZix2XSk9PntkVCh2LGguY29tcG9uZW50P2w/bC5jaGlsZHJlbi5nZXRDb250ZXh0KGYpOm51bGw6bCxhKX0pLGEuY2FuRGVhY3RpdmF0ZUNoZWNrcy5wdXNoKG5ldyBh''@;'; put 'put ''RihoLmNvbXBvbmVudCYmbCYmbC5vdXRsZXQmJmwub3V0bGV0LmlzQWN0aXZhdGVkP2wub3V0bGV0LmNvbXBvbmVudDpudWxsLGgpKX1mdW5jdGlvbiBoVChjKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgY31mdW5jdGlvbiB1ZGUoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiB6UHx8IkVtcHR5''@;'; put 'put ''RXJyb3IiPT09Yz8ubmFtZX1jb25zdCBvRj1TeW1ib2woIklOSVRJQUxfVkFMVUUiKTtmdW5jdGlvbiBCXygpe3JldHVybiBiZChjPT5pOShjLm1hcChsPT5sLnBpcGUoUDMoMSksU2Yob0YpKSkpLnBpcGUoWWEobD0+e2Zvcihjb25zdCBhIG9mIGwpaWYoITAhPT1hKXtpZihhPT09b0YpcmV0''@;'; put 'put ''dXJuIG9GO2lmKCExPT09YXx8UFJlKGEpKXJldHVybiBhfXJldHVybiEwfSksb2MobD0+bCE9PW9GKSxQMygxKSkpfWZ1bmN0aW9uIFBSZShjKXtyZXR1cm4gbDkoYyl8fGMgaW5zdGFuY2VvZiBBJH1mdW5jdGlvbiBkZGUoYyl7cmV0dXJuIGZ1bmN0aW9uIGVpKC4uLmMpe3JldHVybiB1YShj''@;'; put 'put ''KX0oTTAobD0+e2lmKCJib29sZWFuIiE9dHlwZW9mIGwpdGhyb3cgaUYoMCxsKX0pLFlhKGw9PiEwPT09bCkpfWNsYXNzIGske3NlZ21lbnRHcm91cDtjb25zdHJ1Y3RvcihsKXt0aGlzLnNlZ21lbnRHcm91cD1sfHxudWxsfX1jbGFzcyBEJCBleHRlbmRzIEVycm9ye3VybFRyZWU7Y29uc3Ry''@;'; put 'put ''dWN0b3IobCl7c3VwZXIoKSx0aGlzLnVybFRyZWU9bH19ZnVuY3Rpb24gal8oYyl7cmV0dXJuIEpFKG5ldyBrJChjKSl9Y2xhc3MgJFJle3VybFNlcmlhbGl6ZXI7dXJsVHJlZTtjb25zdHJ1Y3RvcihsLGEpe3RoaXMudXJsU2VyaWFsaXplcj1sLHRoaXMudXJsVHJlZT1hfWxpbmVyYWxpemVT''@;'; put 'put ''ZWdtZW50cyhsLGEpe2xldCBkPVtdLGg9YS5yb290O2Zvcig7Oyl7aWYoZD1kLmNvbmNhdChoLnNlZ21lbnRzKSwwPT09aC5udW1iZXJPZkNoaWxkcmVuKXJldHVybiBfbyhkKTtpZihoLm51bWJlck9mQ2hpbGRyZW4+MXx8IWguY2hpbGRyZW5baXNdKXJldHVybiBKRShuZXcgUHIoNGUzLCEx''@;'; put 'put ''KSk7aD1oLmNoaWxkcmVuW2lzXX19YXBwbHlSZWRpcmVjdENvbW1hbmRzKGwsYSxkLGgsZil7aWYoInN0cmluZyIhPXR5cGVvZiBhKXtjb25zdCBNPWEse3F1ZXJ5UGFyYW1zOkQsZnJhZ21lbnQ6VSxyb3V0ZUNvbmZpZzp0ZSx1cmw6b2Usb3V0bGV0OnZlLHBhcmFtczp3ZSxkYXRhOkZlLHRp''@;'; put 'put ''dGxlOldlfT1oLG50PUMxKGYsKCk9Pk0oe3BhcmFtczp3ZSxkYXRhOkZlLHF1ZXJ5UGFyYW1zOkQsZnJhZ21lbnQ6VSxyb3V0ZUNvbmZpZzp0ZSx1cmw6b2Usb3V0bGV0OnZlLHRpdGxlOldlfSkpO2lmKG50IGluc3RhbmNlb2YgbzkpdGhyb3cgbmV3IEQkKG50KTthPW50fWNvbnN0IHY9dGhp''@;'; put 'put ''cy5hcHBseVJlZGlyZWN0Q3JlYXRlVXJsVHJlZShhLHRoaXMudXJsU2VyaWFsaXplci5wYXJzZShhKSxsLGQpO2lmKCIvIj09PWFbMF0pdGhyb3cgbmV3IEQkKHYpO3JldHVybiB2fWFwcGx5UmVkaXJlY3RDcmVhdGVVcmxUcmVlKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5jcmVhdGVTZWdtZW50''@;'; put 'put ''R3JvdXAobCxhLnJvb3QsZCxoKTtyZXR1cm4gbmV3IG85KGYsdGhpcy5jcmVhdGVRdWVyeVBhcmFtcyhhLnF1ZXJ5UGFyYW1zLHRoaXMudXJsVHJlZS5xdWVyeVBhcmFtcyksYS5mcmFnbWVudCl9Y3JlYXRlUXVlcnlQYXJhbXMobCxhKXtjb25zdCBkPXt9O3JldHVybiBPYmplY3QuZW50cmll''@;'; put 'put ''cyhsKS5mb3JFYWNoKChbaCxmXSk9PntpZigic3RyaW5nIj09dHlwZW9mIGYmJiI6Ij09PWZbMF0pe2NvbnN0IE09Zi5zdWJzdHJpbmcoMSk7ZFtoXT1hW01dfWVsc2UgZFtoXT1mfSksZH1jcmVhdGVTZWdtZW50R3JvdXAobCxhLGQsaCl7Y29uc3QgZj10aGlzLmNyZWF0ZVNlZ21lbnRzKGws''@;'; put 'put ''YS5zZWdtZW50cyxkLGgpO2xldCB2PXt9O3JldHVybiBPYmplY3QuZW50cmllcyhhLmNoaWxkcmVuKS5mb3JFYWNoKChbTSxEXSk9Pnt2W01dPXRoaXMuY3JlYXRlU2VnbWVudEdyb3VwKGwsRCxkLGgpfSksbmV3IHRjKGYsdil9Y3JlYXRlU2VnbWVudHMobCxhLGQsaCl7cmV0dXJuIGEubWFw''@;'; put 'put ''KGY9PiI6Ij09PWYucGF0aFswXT90aGlzLmZpbmRQb3NQYXJhbShsLGYsaCk6dGhpcy5maW5kT3JSZXR1cm4oZixkKSl9ZmluZFBvc1BhcmFtKGwsYSxkKXtjb25zdCBoPWRbYS5wYXRoLnN1YnN0cmluZygxKV07aWYoIWgpdGhyb3cgbmV3IFByKDQwMDEsITEpO3JldHVybiBofWZpbmRPclJl''@;'; put 'put ''dHVybihsLGEpe2xldCBkPTA7Zm9yKGNvbnN0IGggb2YgYSl7aWYoaC5wYXRoPT09bC5wYXRoKXJldHVybiBhLnNwbGljZShkKSxoO2QrK31yZXR1cm4gbH19Y29uc3QgSSQ9e21hdGNoZWQ6ITEsY29uc3VtZWRTZWdtZW50czpbXSxyZW1haW5pbmdTZWdtZW50czpbXSxwYXJhbWV0ZXJzOnt9''@;'; put 'put ''LHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOnt9fTtmdW5jdGlvbiBLUmUoYyxsLGEsZCxoKXtjb25zdCBmPWhkZShjLGwsYSk7cmV0dXJuIGYubWF0Y2hlZD8oZD1mdW5jdGlvbiB1UmUoYyxsKXtyZXR1cm4gYy5wcm92aWRlcnMmJiFjLl9pbmplY3RvciYmKGMuX2luamVjdG9yPXphKGMucHJv''@;'; put 'put ''dmlkZXJzLGwsYFJvdXRlOiAke2MucGF0aH1gKSksYy5faW5qZWN0b3I/P2x9KGwsZCksZnVuY3Rpb24gV1JlKGMsbCxhLGQpe2NvbnN0IGg9bC5jYW5NYXRjaDtyZXR1cm4gaCYmMCE9PWgubGVuZ3RoP19vKGgubWFwKHY9Pntjb25zdCBNPVZfKHYsYyk7cmV0dXJuIHQ2KGZ1bmN0aW9uIE9S''@;'; put 'put ''ZShjKXtyZXR1cm4gYyYmaFQoYy5jYW5NYXRjaCl9KE0pP00uY2FuTWF0Y2gobCxhKTpDMShjLCgpPT5NKGwsYSkpKX0pKS5waXBlKEJfKCksZGRlKCkpOl9vKCEwKX0oZCxsLGEpLnBpcGUoWWEodj0+ITA9PT12P2Y6ey4uLkkkfSkpKTpfbyhmKX1mdW5jdGlvbiBoZGUoYyxsLGEpe2lmKCIq''@;'; put 'put ''KiI9PT1sLnBhdGgpcmV0dXJuIGZ1bmN0aW9uIFhSZShjKXtyZXR1cm57bWF0Y2hlZDohMCxwYXJhbWV0ZXJzOmMubGVuZ3RoPjA/UjFlKGMpLnBhcmFtZXRlcnM6e30sY29uc3VtZWRTZWdtZW50czpjLHJlbWFpbmluZ1NlZ21lbnRzOltdLHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOnt9fX0o''@;'; put 'put ''YSk7aWYoIiI9PT1sLnBhdGgpcmV0dXJuImZ1bGwiPT09bC5wYXRoTWF0Y2gmJihjLmhhc0NoaWxkcmVuKCl8fGEubGVuZ3RoPjApP3suLi5JJH06e21hdGNoZWQ6ITAsY29uc3VtZWRTZWdtZW50czpbXSxyZW1haW5pbmdTZWdtZW50czphLHBhcmFtZXRlcnM6e30scG9zaXRpb25hbFBhcmFt''@;'; put 'put ''U2VnbWVudHM6e319O2NvbnN0IGg9KGwubWF0Y2hlcnx8VEllKShhLGMsbCk7aWYoIWgpcmV0dXJuey4uLkkkfTtjb25zdCBmPXt9O09iamVjdC5lbnRyaWVzKGgucG9zUGFyYW1zPz97fSkuZm9yRWFjaCgoW00sRF0pPT57ZltNXT1ELnBhdGh9KTtjb25zdCB2PWguY29uc3VtZWQubGVuZ3Ro''@;'; put 'put ''PjA/ey4uLmYsLi4uaC5jb25zdW1lZFtoLmNvbnN1bWVkLmxlbmd0aC0xXS5wYXJhbWV0ZXJzfTpmO3JldHVybnttYXRjaGVkOiEwLGNvbnN1bWVkU2VnbWVudHM6aC5jb25zdW1lZCxyZW1haW5pbmdTZWdtZW50czphLnNsaWNlKGguY29uc3VtZWQubGVuZ3RoKSxwYXJhbWV0ZXJzOnYscG9z''@;'; put 'put ''aXRpb25hbFBhcmFtU2VnbWVudHM6aC5wb3NQYXJhbXM/P3t9fX1mdW5jdGlvbiBmZGUoYyxsLGEsZCl7cmV0dXJuIGEubGVuZ3RoPjAmJmZ1bmN0aW9uIFFSZShjLGwsYSl7cmV0dXJuIGEuc29tZShkPT5zRihjLGwsZCkmJkYzKGQpIT09aXMpfShjLGEsZCk/e3NlZ21lbnRHcm91cDpuZXcg''@;'; put 'put ''dGMobCxKUmUoZCxuZXcgdGMoYSxjLmNoaWxkcmVuKSkpLHNsaWNlZFNlZ21lbnRzOltdfTowPT09YS5sZW5ndGgmJmZ1bmN0aW9uIGVMZShjLGwsYSl7cmV0dXJuIGEuc29tZShkPT5zRihjLGwsZCkpfShjLGEsZCk/e3NlZ21lbnRHcm91cDpuZXcgdGMoYy5zZWdtZW50cyxxUmUoYyxhLGQs''@;'; put 'put ''Yy5jaGlsZHJlbikpLHNsaWNlZFNlZ21lbnRzOmF9OntzZWdtZW50R3JvdXA6bmV3IHRjKGMuc2VnbWVudHMsYy5jaGlsZHJlbiksc2xpY2VkU2VnbWVudHM6YX19ZnVuY3Rpb24gcVJlKGMsbCxhLGQpe2NvbnN0IGg9e307Zm9yKGNvbnN0IGYgb2YgYSlpZihzRihjLGwsZikmJiFkW0YzKGYp''@;'; put 'put ''XSl7Y29uc3Qgdj1uZXcgdGMoW10se30pO2hbRjMoZildPXZ9cmV0dXJuey4uLmQsLi4uaH19ZnVuY3Rpb24gSlJlKGMsbCl7Y29uc3QgYT17fTthW2lzXT1sO2Zvcihjb25zdCBkIG9mIGMpaWYoIiI9PT1kLnBhdGgmJkYzKGQpIT09aXMpe2NvbnN0IGg9bmV3IHRjKFtdLHt9KTthW0YzKGQp''@;'; put 'put ''XT1ofXJldHVybiBhfWZ1bmN0aW9uIHNGKGMsbCxhKXtyZXR1cm4oIShjLmhhc0NoaWxkcmVuKCl8fGwubGVuZ3RoPjApfHwiZnVsbCIhPT1hLnBhdGhNYXRjaCkmJiIiPT09YS5wYXRofWNsYXNzIG5MZXt9Y2xhc3MgYUxle2luamVjdG9yO2NvbmZpZ0xvYWRlcjtyb290Q29tcG9uZW50VHlw''@;'; put 'put ''ZTtjb25maWc7dXJsVHJlZTtwYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5O3VybFNlcmlhbGl6ZXI7YXBwbHlSZWRpcmVjdHM7YWJzb2x1dGVSZWRpcmVjdENvdW50PTA7YWxsb3dSZWRpcmVjdHM9ITA7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYsTSl7dGhpcy5pbmplY3Rvcj1sLHRoaXMuY29u''@;'; put 'put ''ZmlnTG9hZGVyPWEsdGhpcy5yb290Q29tcG9uZW50VHlwZT1kLHRoaXMuY29uZmlnPWgsdGhpcy51cmxUcmVlPWYsdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5PXYsdGhpcy51cmxTZXJpYWxpemVyPU0sdGhpcy5hcHBseVJlZGlyZWN0cz1uZXcgJFJlKHRoaXMudXJsU2VyaWFsaXpl''@;'; put 'put ''cix0aGlzLnVybFRyZWUpfW5vTWF0Y2hFcnJvcihsKXtyZXR1cm4gbmV3IFByKDQwMDIsYCcke2wuc2VnbWVudEdyb3VwfSdgKX1yZWNvZ25pemUoKXtjb25zdCBsPWZkZSh0aGlzLnVybFRyZWUucm9vdCxbXSxbXSx0aGlzLmNvbmZpZykuc2VnbWVudEdyb3VwO3JldHVybiB0aGlzLm1hdGNo''@;'; put 'put ''KGwpLnBpcGUoWWEoKHtjaGlsZHJlbjphLHJvb3RTbmFwc2hvdDpkfSk9Pntjb25zdCBoPW5ldyBIMyhkLGEpLGY9bmV3IHRkZSgiIixoKSx2PWZ1bmN0aW9uIEdJZShjLGwsYT1udWxsLGQ9bnVsbCl7cmV0dXJuIFoxZShVMWUoYyksbCxhLGQpfShkLFtdLHRoaXMudXJsVHJlZS5xdWVyeVBh''@;'; put 'put ''cmFtcyx0aGlzLnVybFRyZWUuZnJhZ21lbnQpO3JldHVybiB2LnF1ZXJ5UGFyYW1zPXRoaXMudXJsVHJlZS5xdWVyeVBhcmFtcyxmLnVybD10aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHYpLHtzdGF0ZTpmLHRyZWU6dn19KSl9bWF0Y2gobCl7Y29uc3QgYT1uZXcgbkYoW10sT2JqZWN0''@;'; put 'put ''LmZyZWV6ZSh7fSksT2JqZWN0LmZyZWV6ZSh7Li4udGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zfSksdGhpcy51cmxUcmVlLmZyYWdtZW50LE9iamVjdC5mcmVlemUoe30pLGlzLHRoaXMucm9vdENvbXBvbmVudFR5cGUsbnVsbCx7fSk7cmV0dXJuIHRoaXMucHJvY2Vzc1NlZ21lbnRHcm91cCh0''@;'; put 'put ''aGlzLmluamVjdG9yLHRoaXMuY29uZmlnLGwsaXMsYSkucGlwZShZYShkPT4oe2NoaWxkcmVuOmQscm9vdFNuYXBzaG90OmF9KSksYTkoZD0+e2lmKGQgaW5zdGFuY2VvZiBEJClyZXR1cm4gdGhpcy51cmxUcmVlPWQudXJsVHJlZSx0aGlzLm1hdGNoKGQudXJsVHJlZS5yb290KTt0aHJvdyBk''@;'; put 'put ''IGluc3RhbmNlb2YgayQ/dGhpcy5ub01hdGNoRXJyb3IoZCk6ZH0pKX1wcm9jZXNzU2VnbWVudEdyb3VwKGwsYSxkLGgsZil7cmV0dXJuIDA9PT1kLnNlZ21lbnRzLmxlbmd0aCYmZC5oYXNDaGlsZHJlbigpP3RoaXMucHJvY2Vzc0NoaWxkcmVuKGwsYSxkLGYpOnRoaXMucHJvY2Vzc1NlZ21l''@;'; put 'put ''bnQobCxhLGQsZC5zZWdtZW50cyxoLCEwLGYpLnBpcGUoWWEodj0+diBpbnN0YW5jZW9mIEgzP1t2XTpbXSkpfXByb2Nlc3NDaGlsZHJlbihsLGEsZCxoKXtjb25zdCBmPVtdO2Zvcihjb25zdCB2IG9mIE9iamVjdC5rZXlzKGQuY2hpbGRyZW4pKSJwcmltYXJ5Ij09PXY/Zi51bnNoaWZ0KHYp''@;'; put 'put ''OmYucHVzaCh2KTtyZXR1cm4gZTAoZikucGlwZShQXyh2PT57Y29uc3QgTT1kLmNoaWxkcmVuW3ZdLEQ9ZnVuY3Rpb24gcFJlKGMsbCl7Y29uc3QgYT1jLmZpbHRlcihkPT5GMyhkKT09PWwpO3JldHVybiBhLnB1c2goLi4uYy5maWx0ZXIoZD0+RjMoZCkhPT1sKSksYX0oYSx2KTtyZXR1cm4g''@;'; put 'put ''dGhpcy5wcm9jZXNzU2VnbWVudEdyb3VwKGwsRCxNLHYsaCl9KSxmdW5jdGlvbiBfSWUoYyxsKXtyZXR1cm4gZWEoZnVuY3Rpb24gYkllKGMsbCxhLGQsaCl7cmV0dXJuKGYsdik9PntsZXQgTT1hLEQ9bCxVPTA7Zi5zdWJzY3JpYmUoRnIodix0ZT0+e2NvbnN0IG9lPVUrKztEPU0/YyhELHRl''@;'; put 'put ''LG9lKTooTT0hMCx0ZSksZCYmdi5uZXh0KEQpfSxoJiYoKCk9PntNJiZ2Lm5leHQoRCksdi5jb21wbGV0ZSgpfSkpKX19KGMsbCxhcmd1bWVudHMubGVuZ3RoPj0yLCEwKSl9KCh2LE0pPT4odi5wdXNoKC4uLk0pLHYpKSxVUChudWxsKSxmdW5jdGlvbiB3SWUoYyxsKXtjb25zdCBhPWFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGg+PTI7cmV0dXJuIGQ9PmQucGlwZShjP29jKChoLGYpPT5jKGgsZixkKSk6VmkscCQoMSksYT9VUChsKTpBMWUoKCk9Pm5ldyB6UCkpfSgpLHMxKHY9PntpZihudWxsPT09dilyZXR1cm4gal8oZCk7Y29uc3QgTT1wZGUodik7cmV0dXJuIGZ1bmN0aW9uIG9MZShjKXtjLnNv''@;'; put 'put ''cnQoKGwsYSk9PmwudmFsdWUub3V0bGV0PT09aXM/LTE6YS52YWx1ZS5vdXRsZXQ9PT1pcz8xOmwudmFsdWUub3V0bGV0LmxvY2FsZUNvbXBhcmUoYS52YWx1ZS5vdXRsZXQpKX0oTSksX28oTSl9KSl9cHJvY2Vzc1NlZ21lbnQobCxhLGQsaCxmLHYsTSl7cmV0dXJuIGUwKGEpLnBpcGUoUF8o''@;'; put 'put ''RD0+dGhpcy5wcm9jZXNzU2VnbWVudEFnYWluc3RSb3V0ZShELl9pbmplY3Rvcj8/bCxhLEQsZCxoLGYsdixNKS5waXBlKGE5KFU9PntpZihVIGluc3RhbmNlb2YgayQpcmV0dXJuIF9vKG51bGwpO3Rocm93IFV9KSkpLFFtKEQ9PiEhRCksYTkoRD0+e2lmKHVkZShEKSlyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24gdExlKGMsbCxhKXtyZXR1cm4gMD09PWwubGVuZ3RoJiYhYy5jaGlsZHJlblthXX0oZCxoLGYpP19vKG5ldyBuTGUpOmpfKGQpO3Rocm93IER9KSl9cHJvY2Vzc1NlZ21lbnRBZ2FpbnN0Um91dGUobCxhLGQsaCxmLHYsTSxEKXtyZXR1cm4gRjMoZCk9PT12fHx2IT09aXMmJnNGKGgsZixk''@;'; put 'put ''KT92b2lkIDA9PT1kLnJlZGlyZWN0VG8/dGhpcy5tYXRjaFNlZ21lbnRBZ2FpbnN0Um91dGUobCxoLGQsZix2LEQpOnRoaXMuYWxsb3dSZWRpcmVjdHMmJk0/dGhpcy5leHBhbmRTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdChsLGgsYSxkLGYsdixEKTpqXyhoKTpqXyhoKX1leHBh''@;'; put 'put ''bmRTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdChsLGEsZCxoLGYsdixNKXtjb25zdHttYXRjaGVkOkQscGFyYW1ldGVyczpVLGNvbnN1bWVkU2VnbWVudHM6dGUscG9zaXRpb25hbFBhcmFtU2VnbWVudHM6b2UscmVtYWluaW5nU2VnbWVudHM6dmV9PWhkZShhLGgsZik7aWYoIUQp''@;'; put 'put ''cmV0dXJuIGpfKGEpOyJzdHJpbmciPT10eXBlb2YgaC5yZWRpcmVjdFRvJiYiLyI9PT1oLnJlZGlyZWN0VG9bMF0mJih0aGlzLmFic29sdXRlUmVkaXJlY3RDb3VudCsrLHRoaXMuYWJzb2x1dGVSZWRpcmVjdENvdW50PjMxJiYodGhpcy5hbGxvd1JlZGlyZWN0cz0hMSkpO2NvbnN0IHdlPW5l''@;'; put 'put ''dyBuRihmLFUsT2JqZWN0LmZyZWV6ZSh7Li4udGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zfSksdGhpcy51cmxUcmVlLmZyYWdtZW50LGdkZShoKSxGMyhoKSxoLmNvbXBvbmVudD8/aC5fbG9hZGVkQ29tcG9uZW50Pz9udWxsLGgsbWRlKGgpKSxGZT10Rih3ZSxNLHRoaXMucGFyYW1zSW5oZXJp''@;'; put 'put ''dGFuY2VTdHJhdGVneSk7d2UucGFyYW1zPU9iamVjdC5mcmVlemUoRmUucGFyYW1zKSx3ZS5kYXRhPU9iamVjdC5mcmVlemUoRmUuZGF0YSk7Y29uc3QgV2U9dGhpcy5hcHBseVJlZGlyZWN0cy5hcHBseVJlZGlyZWN0Q29tbWFuZHModGUsaC5yZWRpcmVjdFRvLG9lLHdlLGwpO3JldHVybiB0''@;'; put 'put ''aGlzLmFwcGx5UmVkaXJlY3RzLmxpbmVyYWxpemVTZWdtZW50cyhoLFdlKS5waXBlKHMxKG50PT50aGlzLnByb2Nlc3NTZWdtZW50KGwsZCxhLG50LmNvbmNhdCh2ZSksdiwhMSxNKSkpfW1hdGNoU2VnbWVudEFnYWluc3RSb3V0ZShsLGEsZCxoLGYsdil7Y29uc3QgTT1LUmUoYSxkLGgsbCk7''@;'; put 'put ''cmV0dXJuIioqIj09PWQucGF0aCYmKGEuY2hpbGRyZW49e30pLE0ucGlwZShiZChEPT5ELm1hdGNoZWQ/dGhpcy5nZXRDaGlsZENvbmZpZyhsPWQuX2luamVjdG9yPz9sLGQsaCkucGlwZShiZCgoe3JvdXRlczpVfSk9Pntjb25zdCB0ZT1kLl9sb2FkZWRJbmplY3Rvcj8/bCx7cGFyYW1ldGVy''@;'; put 'put ''czpvZSxjb25zdW1lZFNlZ21lbnRzOnZlLHJlbWFpbmluZ1NlZ21lbnRzOndlfT1ELEZlPW5ldyBuRih2ZSxvZSxPYmplY3QuZnJlZXplKHsuLi50aGlzLnVybFRyZWUucXVlcnlQYXJhbXN9KSx0aGlzLnVybFRyZWUuZnJhZ21lbnQsZ2RlKGQpLEYzKGQpLGQuY29tcG9uZW50Pz9kLl9sb2Fk''@;'; put 'put ''ZWRDb21wb25lbnQ/P251bGwsZCxtZGUoZCkpLFdlPXRGKEZlLHYsdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5KTtGZS5wYXJhbXM9T2JqZWN0LmZyZWV6ZShXZS5wYXJhbXMpLEZlLmRhdGE9T2JqZWN0LmZyZWV6ZShXZS5kYXRhKTtjb25zdHtzZWdtZW50R3JvdXA6bnQsc2xpY2Vk''@;'; put 'put ''U2VnbWVudHM6ZHR9PWZkZShhLHZlLHdlLFUpO2lmKDA9PT1kdC5sZW5ndGgmJm50Lmhhc0NoaWxkcmVuKCkpcmV0dXJuIHRoaXMucHJvY2Vzc0NoaWxkcmVuKHRlLFUsbnQsRmUpLnBpcGUoWWEoJHQ9Pm5ldyBIMyhGZSwkdCkpKTtpZigwPT09VS5sZW5ndGgmJjA9PT1kdC5sZW5ndGgpcmV0''@;'; put 'put ''dXJuIF9vKG5ldyBIMyhGZSxbXSkpO2NvbnN0IG10PUYzKGQpPT09ZjtyZXR1cm4gdGhpcy5wcm9jZXNzU2VnbWVudCh0ZSxVLG50LGR0LG10P2lzOmYsITAsRmUpLnBpcGUoWWEoJHQ9Pm5ldyBIMyhGZSwkdCBpbnN0YW5jZW9mIEgzP1skdF06W10pKSl9KSk6al8oYSkpKX1nZXRDaGlsZENv''@;'; put 'put ''bmZpZyhsLGEsZCl7cmV0dXJuIGEuY2hpbGRyZW4/X28oe3JvdXRlczphLmNoaWxkcmVuLGluamVjdG9yOmx9KTphLmxvYWRDaGlsZHJlbj92b2lkIDAhPT1hLl9sb2FkZWRSb3V0ZXM/X28oe3JvdXRlczphLl9sb2FkZWRSb3V0ZXMsaW5qZWN0b3I6YS5fbG9hZGVkSW5qZWN0b3J9KTpmdW5j''@;'; put 'put ''dGlvbiBaUmUoYyxsLGEsZCl7Y29uc3QgaD1sLmNhbkxvYWQ7cmV0dXJuIHZvaWQgMD09PWh8fDA9PT1oLmxlbmd0aD9fbyghMCk6X28oaC5tYXAodj0+e2NvbnN0IE09Vl8odixjKTtyZXR1cm4gdDYoZnVuY3Rpb24gRFJlKGMpe3JldHVybiBjJiZoVChjLmNhbkxvYWQpfShNKT9NLmNhbkxv''@;'; put 'put ''YWQobCxhKTpDMShjLCgpPT5NKGwsYSkpKX0pKS5waXBlKEJfKCksZGRlKCkpfShsLGEsZCkucGlwZShzMShoPT5oP3RoaXMuY29uZmlnTG9hZGVyLmxvYWRDaGlsZHJlbihsLGEpLnBpcGUoTTAoZj0+e2EuX2xvYWRlZFJvdXRlcz1mLnJvdXRlcyxhLl9sb2FkZWRJbmplY3Rvcj1mLmluamVj''@;'; put 'put ''dG9yfSkpOmZ1bmN0aW9uIEdSZSgpe3JldHVybiBKRShzZGUoITEsYzIuR3VhcmRSZWplY3RlZCkpfSgpKSk6X28oe3JvdXRlczpbXSxpbmplY3RvcjpsfSl9fWZ1bmN0aW9uIHNMZShjKXtjb25zdCBsPWMudmFsdWUucm91dGVDb25maWc7cmV0dXJuIGwmJiIiPT09bC5wYXRofWZ1bmN0aW9u''@;'; put 'put ''IHBkZShjKXtjb25zdCBsPVtdLGE9bmV3IFNldDtmb3IoY29uc3QgZCBvZiBjKXtpZighc0xlKGQpKXtsLnB1c2goZCk7Y29udGludWV9Y29uc3QgaD1sLmZpbmQoZj0+ZC52YWx1ZS5yb3V0ZUNvbmZpZz09PWYudmFsdWUucm91dGVDb25maWcpO3ZvaWQgMCE9PWg/KGguY2hpbGRyZW4ucHVz''@;'; put 'put ''aCguLi5kLmNoaWxkcmVuKSxhLmFkZChoKSk6bC5wdXNoKGQpfWZvcihjb25zdCBkIG9mIGEpe2NvbnN0IGg9cGRlKGQuY2hpbGRyZW4pO2wucHVzaChuZXcgSDMoZC52YWx1ZSxoKSl9cmV0dXJuIGwuZmlsdGVyKGQ9PiFhLmhhcyhkKSl9ZnVuY3Rpb24gZ2RlKGMpe3JldHVybiBjLmRhdGF8''@;'; put 'put ''fHt9fWZ1bmN0aW9uIG1kZShjKXtyZXR1cm4gYy5yZXNvbHZlfHx7fX1mdW5jdGlvbiB2ZGUoYyl7Y29uc3QgbD1jLmNoaWxkcmVuLm1hcChhPT52ZGUoYSkpLmZsYXQoKTtyZXR1cm5bYywuLi5sXX1mdW5jdGlvbiBSJChjKXtyZXR1cm4gYmQobD0+e2NvbnN0IGE9YyhsKTtyZXR1cm4gYT9l''@;'; put 'put ''MChhKS5waXBlKFlhKCgpPT5sKSk6X28obCl9KX1sZXQgeWRlPSgoKT0+e2NsYXNzIGN7YnVpbGRUaXRsZShhKXtsZXQgZCxoPWEucm9vdDtmb3IoO3ZvaWQgMCE9PWg7KWQ9dGhpcy5nZXRSZXNvbHZlZFRpdGxlRm9yUm91dGUoaCk/P2QsaD1oLmNoaWxkcmVuLmZpbmQoZj0+Zi5vdXRsZXQ9''@;'; put 'put ''PT1pcyk7cmV0dXJuIGR9Z2V0UmVzb2x2ZWRUaXRsZUZvclJvdXRlKGEpe3JldHVybiBhLmRhdGFbdFRdfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTooKT0+Sm4oZkxlKSxwcm92aWRl''@;'; put 'put ''ZEluOiJyb290In0pfXJldHVybiBjfSkoKSxmTGU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIHlkZXt0aXRsZTtjb25zdHJ1Y3RvcihhKXtzdXBlcigpLHRoaXMudGl0bGU9YX11cGRhdGVUaXRsZShhKXtjb25zdCBkPXRoaXMuYnVpbGRUaXRsZShhKTt2b2lkIDAhPT1kJiZ0aGlzLnRpdGxlLnNl''@;'; put 'put ''dFRpdGxlKGQpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShIcihDSWUpKX07c3RhdGljIFx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKTtjb25zdCBmVD1uZXcgam4o''@;'; put 'put ''IiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pih7fSl9KSxsRj1uZXcgam4oIiIpO2xldCBMJD0oKCk9PntjbGFzcyBje2NvbXBvbmVudExvYWRlcnM9bmV3IFdlYWtNYXA7Y2hpbGRyZW5Mb2FkZXJzPW5ldyBXZWFrTWFwO29uTG9hZFN0YXJ0TGlzdGVuZXI7b25Mb2FkRW5kTGlz''@;'; put 'put ''dGVuZXI7Y29tcGlsZXI9Sm4oTnhlKTtsb2FkQ29tcG9uZW50KGEpe2lmKHRoaXMuY29tcG9uZW50TG9hZGVycy5nZXQoYSkpcmV0dXJuIHRoaXMuY29tcG9uZW50TG9hZGVycy5nZXQoYSk7aWYoYS5fbG9hZGVkQ29tcG9uZW50KXJldHVybiBfbyhhLl9sb2FkZWRDb21wb25lbnQpO3RoaXMu''@;'; put 'put ''b25Mb2FkU3RhcnRMaXN0ZW5lciYmdGhpcy5vbkxvYWRTdGFydExpc3RlbmVyKGEpO2NvbnN0IGQ9dDYoYS5sb2FkQ29tcG9uZW50KCkpLnBpcGUoWWEoYmRlKSxNMChmPT57dGhpcy5vbkxvYWRFbmRMaXN0ZW5lciYmdGhpcy5vbkxvYWRFbmRMaXN0ZW5lcihhKSxhLl9sb2FkZWRDb21wb25l''@;'; put 'put ''bnQ9Zn0pLFFFKCgpPT57dGhpcy5jb21wb25lbnRMb2FkZXJzLmRlbGV0ZShhKX0pKSxoPW5ldyBmJChkLCgpPT5uZXcgdXIpLnBpcGUoaCQoKSk7cmV0dXJuIHRoaXMuY29tcG9uZW50TG9hZGVycy5zZXQoYSxoKSxofWxvYWRDaGlsZHJlbihhLGQpe2lmKHRoaXMuY2hpbGRyZW5Mb2FkZXJz''@;'; put 'put ''LmdldChkKSlyZXR1cm4gdGhpcy5jaGlsZHJlbkxvYWRlcnMuZ2V0KGQpO2lmKGQuX2xvYWRlZFJvdXRlcylyZXR1cm4gX28oe3JvdXRlczpkLl9sb2FkZWRSb3V0ZXMsaW5qZWN0b3I6ZC5fbG9hZGVkSW5qZWN0b3J9KTt0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXImJnRoaXMub25Mb2FkU3Rh''@;'; put 'put ''cnRMaXN0ZW5lcihkKTtjb25zdCBmPWZ1bmN0aW9uIHBMZShjLGwsYSxkKXtyZXR1cm4gdDYoYy5sb2FkQ2hpbGRyZW4oKSkucGlwZShZYShiZGUpLHMxKGg9PmggaW5zdGFuY2VvZiBicnx8QXJyYXkuaXNBcnJheShoKT9fbyhoKTplMChsLmNvbXBpbGVNb2R1bGVBc3luYyhoKSkpLFlhKGg9''@;'; put 'put ''PntkJiZkKGMpO2xldCBmLHYsTT0hMTtyZXR1cm4gQXJyYXkuaXNBcnJheShoKT8odj1oLCEwKTooZj1oLmNyZWF0ZShhKS5pbmplY3Rvcix2PWYuZ2V0KGxGLFtdLHtvcHRpb25hbDohMCxzZWxmOiEwfSkuZmxhdCgpKSx7cm91dGVzOnYubWFwKFQkKSxpbmplY3RvcjpmfX0pKX0oZCx0aGlz''@;'; put 'put ''LmNvbXBpbGVyLGEsdGhpcy5vbkxvYWRFbmRMaXN0ZW5lcikucGlwZShRRSgoKT0+e3RoaXMuY2hpbGRyZW5Mb2FkZXJzLmRlbGV0ZShkKX0pKSx2PW5ldyBmJChmLCgpPT5uZXcgdXIpLnBpcGUoaCQoKSk7cmV0dXJuIHRoaXMuY2hpbGRyZW5Mb2FkZXJzLnNldChkLHYpLHZ9c3RhdGljIFx1''@;'; put 'put ''MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIGJkZShjKXtyZXR1cm4gZnVuY3Rpb24gZ0xlKGMpe3JldHVy''@;'; put 'put ''biBjJiYib2JqZWN0Ij09dHlwZW9mIGMmJiJkZWZhdWx0ImluIGN9KGMpP2MuZGVmYXVsdDpjfWxldCBPJD0oKCk9PntjbGFzcyBje3N0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTooKT0+''@;'; put 'put ''Sm4obUxlKSxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKSxtTGU9KCgpPT57Y2xhc3MgY3tzaG91bGRQcm9jZXNzVXJsKGEpe3JldHVybiEwfWV4dHJhY3QoYSl7cmV0dXJuIGF9bWVyZ2UoYSxkKXtyZXR1cm4gYX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBu''@;'; put 'put ''ZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gY30pKCk7Y29uc3QgX2RlPW5ldyBqbigiIiksd2RlPW5ldyBqbigiIik7ZnVuY3Rpb24gdkxlKGMsbCxhKXtjb25zdCBkPWMuZ2V0KHdk''@;'; put 'put ''ZSksaD1jLmdldChHcyk7cmV0dXJuIGMuZ2V0KFhhKS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2lmKCFoLnN0YXJ0Vmlld1RyYW5zaXRpb258fGQuc2tpcE5leHRUcmFuc2l0aW9uKXJldHVybiBkLnNraXBOZXh0VHJhbnNpdGlvbj0hMSxuZXcgUHJvbWlzZShVPT5zZXRUaW1lb3V0KFUpKTts''@;'; put 'put ''ZXQgZjtjb25zdCB2PW5ldyBQcm9taXNlKFU9PntmPVV9KSxNPWguc3RhcnRWaWV3VHJhbnNpdGlvbigoKT0+KGYoKSxmdW5jdGlvbiB5TGUoYyl7cmV0dXJuIG5ldyBQcm9taXNlKGw9PntNbSh7cmVhZDooKT0+c2V0VGltZW91dChsKX0se2luamVjdG9yOmN9KX0pfShjKSkpLHtvblZpZXdU''@;'; put 'put ''cmFuc2l0aW9uQ3JlYXRlZDpEfT1kO3JldHVybiBEJiZDMShjLCgpPT5EKHt0cmFuc2l0aW9uOk0sZnJvbTpsLHRvOmF9KSksdn0pfWNvbnN0IENkZT1uZXcgam4oIiIpO2xldCBQJD0oKCk9PntjbGFzcyBje2N1cnJlbnROYXZpZ2F0aW9uPW51bGw7Y3VycmVudFRyYW5zaXRpb249bnVsbDts''@;'; put 'put ''YXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb249bnVsbDtldmVudHM9bmV3IHVyO3RyYW5zaXRpb25BYm9ydFN1YmplY3Q9bmV3IHVyO2NvbmZpZ0xvYWRlcj1KbihMJCk7ZW52aXJvbm1lbnRJbmplY3Rvcj1KbihxbCk7ZGVzdHJveVJlZj1KbihNMSk7dXJsU2VyaWFsaXplcj1KbihyVCk7cm9vdENv''@;'; put 'put ''bnRleHRzPUpuKGxUKTtsb2NhdGlvbj1KbihzMik7aW5wdXRCaW5kaW5nRW5hYmxlZD1udWxsIT09Sm4ockYse29wdGlvbmFsOiEwfSk7dGl0bGVTdHJhdGVneT1Kbih5ZGUpO29wdGlvbnM9Sm4oZlQse29wdGlvbmFsOiEwfSl8fHt9O3BhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3k9dGhpcy5v''@;'; put 'put ''cHRpb25zLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3l8fCJlbXB0eU9ubHkiO3VybEhhbmRsaW5nU3RyYXRlZ3k9Sm4oTyQpO2NyZWF0ZVZpZXdUcmFuc2l0aW9uPUpuKF9kZSx7b3B0aW9uYWw6ITB9KTtuYXZpZ2F0aW9uRXJyb3JIYW5kbGVyPUpuKENkZSx7b3B0aW9uYWw6ITB9KTtuYXZp''@;'; put 'put ''Z2F0aW9uSWQ9MDtnZXQgaGFzUmVxdWVzdGVkTmF2aWdhdGlvbigpe3JldHVybiAwIT09dGhpcy5uYXZpZ2F0aW9uSWR9dHJhbnNpdGlvbnM7YWZ0ZXJQcmVhY3RpdmF0aW9uPSgpPT5fbyh2b2lkIDApO3Jvb3RDb21wb25lbnRUeXBlPW51bGw7ZGVzdHJveWVkPSExO2NvbnN0cnVjdG9yKCl7''@;'; put 'put ''dGhpcy5jb25maWdMb2FkZXIub25Mb2FkRW5kTGlzdGVuZXI9aD0+dGhpcy5ldmVudHMubmV4dChuZXcgYVJlKGgpKSx0aGlzLmNvbmZpZ0xvYWRlci5vbkxvYWRTdGFydExpc3RlbmVyPWg9PnRoaXMuZXZlbnRzLm5leHQobmV3IGlSZShoKSksdGhpcy5kZXN0cm95UmVmLm9uRGVzdHJveSgo''@;'; put 'put ''KT0+e3RoaXMuZGVzdHJveWVkPSEwfSl9Y29tcGxldGUoKXt0aGlzLnRyYW5zaXRpb25zPy5jb21wbGV0ZSgpfWhhbmRsZU5hdmlnYXRpb25SZXF1ZXN0KGEpe2NvbnN0IGQ9Kyt0aGlzLm5hdmlnYXRpb25JZDt0aGlzLnRyYW5zaXRpb25zPy5uZXh0KHsuLi5hLGV4dHJhY3RlZFVybDp0aGlz''@;'; put 'put ''LnVybEhhbmRsaW5nU3RyYXRlZ3kuZXh0cmFjdChhLnJhd1VybCksdGFyZ2V0U25hcHNob3Q6bnVsbCx0YXJnZXRSb3V0ZXJTdGF0ZTpudWxsLGd1YXJkczp7Y2FuQWN0aXZhdGVDaGVja3M6W10sY2FuRGVhY3RpdmF0ZUNoZWNrczpbXX0sZ3VhcmRzUmVzdWx0Om51bGwsaWQ6ZH0pfXNldHVw''@;'; put 'put ''TmF2aWdhdGlvbnMoYSl7cmV0dXJuIHRoaXMudHJhbnNpdGlvbnM9bmV3IE1pKG51bGwpLHRoaXMudHJhbnNpdGlvbnMucGlwZShvYyhkPT5udWxsIT09ZCksYmQoZD0+e2xldCBoPSExLGY9ITE7cmV0dXJuIF9vKGQpLnBpcGUoYmQodj0+e2lmKHRoaXMubmF2aWdhdGlvbklkPmQuaWQpcmV0''@;'; put 'put ''dXJuIHRoaXMuY2FuY2VsTmF2aWdhdGlvblRyYW5zaXRpb24oZCwiIixjMi5TdXBlcnNlZGVkQnlOZXdOYXZpZ2F0aW9uKSxsMjt0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPWQsdGhpcy5jdXJyZW50TmF2aWdhdGlvbj17aWQ6di5pZCxpbml0aWFsVXJsOnYucmF3VXJsLGV4dHJhY3RlZFVybDp2''@;'; put 'put ''LmV4dHJhY3RlZFVybCx0YXJnZXRCcm93c2VyVXJsOiJzdHJpbmciPT10eXBlb2Ygdi5leHRyYXMuYnJvd3NlclVybD90aGlzLnVybFNlcmlhbGl6ZXIucGFyc2Uodi5leHRyYXMuYnJvd3NlclVybCk6di5leHRyYXMuYnJvd3NlclVybCx0cmlnZ2VyOnYuc291cmNlLGV4dHJhczp2LmV4dHJh''@;'; put 'put ''cyxwcmV2aW91c05hdmlnYXRpb246dGhpcy5sYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb24/ey4uLnRoaXMubGFzdFN1Y2Nlc3NmdWxOYXZpZ2F0aW9uLHByZXZpb3VzTmF2aWdhdGlvbjpudWxsfTpudWxsfTtjb25zdCBNPSFhLm5hdmlnYXRlZHx8dGhpcy5pc1VwZGF0aW5nSW50ZXJuYWxTdGF0''@;'; put 'put ''ZSgpfHx0aGlzLmlzVXBkYXRlZEJyb3dzZXJVcmwoKTtpZighTSYmInJlbG9hZCIhPT0odi5leHRyYXMub25TYW1lVXJsTmF2aWdhdGlvbj8/YS5vblNhbWVVcmxOYXZpZ2F0aW9uKSl7Y29uc3QgVT0iIjtyZXR1cm4gdGhpcy5ldmVudHMubmV4dChuZXcgSF8odi5pZCx0aGlzLnVybFNlcmlh''@;'; put 'put ''bGl6ZXIuc2VyaWFsaXplKHYucmF3VXJsKSxVLFFQLklnbm9yZWRTYW1lVXJsTmF2aWdhdGlvbikpLHYucmVzb2x2ZSghMSksbDJ9aWYodGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5LnNob3VsZFByb2Nlc3NVcmwodi5yYXdVcmwpKXJldHVybiBfbyh2KS5waXBlKGJkKFU9Pih0aGlzLmV2ZW50''@;'; put 'put ''cy5uZXh0KG5ldyBKUChVLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoVS5leHRyYWN0ZWRVcmwpLFUuc291cmNlLFUucmVzdG9yZWRTdGF0ZSkpLFUuaWQhPT10aGlzLm5hdmlnYXRpb25JZD9sMjpQcm9taXNlLnJlc29sdmUoVSkpKSxmdW5jdGlvbiBsTGUoYyxsLGEsZCxoLGYp''@;'; put 'put ''e3JldHVybiBzMSh2PT5mdW5jdGlvbiByTGUoYyxsLGEsZCxoLGYsdj0iZW1wdHlPbmx5Iil7cmV0dXJuIG5ldyBhTGUoYyxsLGEsZCxoLHYsZikucmVjb2duaXplKCl9KGMsbCxhLGQsdi5leHRyYWN0ZWRVcmwsaCxmKS5waXBlKFlhKCh7c3RhdGU6TSx0cmVlOkR9KT0+KHsuLi52LHRhcmdl''@;'; put 'put ''dFNuYXBzaG90Ok0sdXJsQWZ0ZXJSZWRpcmVjdHM6RH0pKSkpfSh0aGlzLmVudmlyb25tZW50SW5qZWN0b3IsdGhpcy5jb25maWdMb2FkZXIsdGhpcy5yb290Q29tcG9uZW50VHlwZSxhLmNvbmZpZyx0aGlzLnVybFNlcmlhbGl6ZXIsdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5KSxN''@;'; put 'put ''MChVPT57ZC50YXJnZXRTbmFwc2hvdD1VLnRhcmdldFNuYXBzaG90LGQudXJsQWZ0ZXJSZWRpcmVjdHM9VS51cmxBZnRlclJlZGlyZWN0cyx0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPXsuLi50aGlzLmN1cnJlbnROYXZpZ2F0aW9uLGZpbmFsVXJsOlUudXJsQWZ0ZXJSZWRpcmVjdHN9O2NvbnN0''@;'; put 'put ''IHRlPW5ldyBYMWUoVS5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKFUuZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKFUudXJsQWZ0ZXJSZWRpcmVjdHMpLFUudGFyZ2V0U25hcHNob3QpO3RoaXMuZXZlbnRzLm5leHQodGUpfSkpO2lmKE0mJnRoaXMu''@;'; put 'put ''dXJsSGFuZGxpbmdTdHJhdGVneS5zaG91bGRQcm9jZXNzVXJsKHYuY3VycmVudFJhd1VybCkpe2NvbnN0e2lkOlUsZXh0cmFjdGVkVXJsOnRlLHNvdXJjZTpvZSxyZXN0b3JlZFN0YXRlOnZlLGV4dHJhczp3ZX09dixGZT1uZXcgSlAoVSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHRl''@;'; put 'put ''KSxvZSx2ZSk7dGhpcy5ldmVudHMubmV4dChGZSk7Y29uc3QgV2U9ZWRlKHRoaXMucm9vdENvbXBvbmVudFR5cGUpLnNuYXBzaG90O3JldHVybiB0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPWQ9ey4uLnYsdGFyZ2V0U25hcHNob3Q6V2UsdXJsQWZ0ZXJSZWRpcmVjdHM6dGUsZXh0cmFzOnsuLi53''@;'; put 'put ''ZSxza2lwTG9jYXRpb25DaGFuZ2U6ITEscmVwbGFjZVVybDohMX19LHRoaXMuY3VycmVudE5hdmlnYXRpb24uZmluYWxVcmw9dGUsX28oZCl9e2NvbnN0IFU9IiI7cmV0dXJuIHRoaXMuZXZlbnRzLm5leHQobmV3IEhfKHYuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZSh2LmV4dHJh''@;'; put 'put ''Y3RlZFVybCksVSxRUC5JZ25vcmVkQnlVcmxIYW5kbGluZ1N0cmF0ZWd5KSksdi5yZXNvbHZlKCExKSxsMn19KSxNMCh2PT57Y29uc3QgTT1uZXcgZVJlKHYuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZSh2LmV4dHJhY3RlZFVybCksdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6''@;'; put 'put ''ZSh2LnVybEFmdGVyUmVkaXJlY3RzKSx2LnRhcmdldFNuYXBzaG90KTt0aGlzLmV2ZW50cy5uZXh0KE0pfSksWWEodj0+KHRoaXMuY3VycmVudFRyYW5zaXRpb249ZD17Li4udixndWFyZHM6eFJlKHYudGFyZ2V0U25hcHNob3Qsdi5jdXJyZW50U25hcHNob3QsdGhpcy5yb290Q29udGV4dHMp''@;'; put 'put ''fSxkKSksZnVuY3Rpb24gRlJlKGMsbCl7cmV0dXJuIHMxKGE9Pntjb25zdHt0YXJnZXRTbmFwc2hvdDpkLGN1cnJlbnRTbmFwc2hvdDpoLGd1YXJkczp7Y2FuQWN0aXZhdGVDaGVja3M6ZixjYW5EZWFjdGl2YXRlQ2hlY2tzOnZ9fT1hO3JldHVybiAwPT09di5sZW5ndGgmJjA9PT1mLmxlbmd0''@;'; put 'put ''aD9fbyh7Li4uYSxndWFyZHNSZXN1bHQ6ITB9KTpmdW5jdGlvbiBIUmUoYyxsLGEsZCl7cmV0dXJuIGUwKGMpLnBpcGUoczEoaD0+ZnVuY3Rpb24gVVJlKGMsbCxhLGQsaCl7Y29uc3QgZj1sJiZsLnJvdXRlQ29uZmlnP2wucm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZTpudWxsO3JldHVybiBm''@;'; put 'put ''JiYwIT09Zi5sZW5ndGg/X28oZi5tYXAoTT0+e2NvbnN0IEQ9c1QobCk/P2gsVT1WXyhNLEQpO3JldHVybiB0NihmdW5jdGlvbiBMUmUoYyl7cmV0dXJuIGMmJmhUKGMuY2FuRGVhY3RpdmF0ZSl9KFUpP1UuY2FuRGVhY3RpdmF0ZShjLGwsYSxkKTpDMShELCgpPT5VKGMsbCxhLGQpKSkucGlw''@;'; put 'put ''ZShRbSgpKX0pKS5waXBlKEJfKCkpOl9vKCEwKX0oaC5jb21wb25lbnQsaC5yb3V0ZSxhLGwsZCkpLFFtKGg9PiEwIT09aCwhMCkpfSh2LGQsaCxjKS5waXBlKHMxKE09Pk0mJmZ1bmN0aW9uIGtSZShjKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBjfShNKT9mdW5jdGlvbiBOUmUoYyxsLGEs''@;'; put 'put ''ZCl7cmV0dXJuIGUwKGwpLnBpcGUoUF8oaD0+ZCQoZnVuY3Rpb24gQlJlKGMsbCl7cmV0dXJuIG51bGwhPT1jJiZsJiZsKG5ldyBvUmUoYykpLF9vKCEwKX0oaC5yb3V0ZS5wYXJlbnQsZCksZnVuY3Rpb24gVlJlKGMsbCl7cmV0dXJuIG51bGwhPT1jJiZsJiZsKG5ldyBsUmUoYykpLF9vKCEw''@;'; put 'put ''KX0oaC5yb3V0ZSxkKSxmdW5jdGlvbiB6UmUoYyxsLGEpe2NvbnN0IGQ9bFtsLmxlbmd0aC0xXSxmPWwuc2xpY2UoMCxsLmxlbmd0aC0xKS5yZXZlcnNlKCkubWFwKHY9PmZ1bmN0aW9uIEVSZShjKXtjb25zdCBsPWMucm91dGVDb25maWc/Yy5yb3V0ZUNvbmZpZy5jYW5BY3RpdmF0ZUNoaWxk''@;'; put 'put ''Om51bGw7cmV0dXJuIGwmJjAhPT1sLmxlbmd0aD97bm9kZTpjLGd1YXJkczpsfTpudWxsfSh2KSkuZmlsdGVyKHY9Pm51bGwhPT12KS5tYXAodj0+VDFlKCgpPT5fbyh2Lmd1YXJkcy5tYXAoRD0+e2NvbnN0IFU9c1Qodi5ub2RlKT8/YSx0ZT1WXyhELFUpO3JldHVybiB0NihmdW5jdGlvbiBS''@;'; put 'put ''UmUoYyl7cmV0dXJuIGMmJmhUKGMuY2FuQWN0aXZhdGVDaGlsZCl9KHRlKT90ZS5jYW5BY3RpdmF0ZUNoaWxkKGQsYyk6QzEoVSwoKT0+dGUoZCxjKSkpLnBpcGUoUW0oKSl9KSkucGlwZShCXygpKSkpO3JldHVybiBfbyhmKS5waXBlKEJfKCkpfShjLGgucGF0aCxhKSxmdW5jdGlvbiBqUmUo''@;'; put 'put ''YyxsLGEpe2NvbnN0IGQ9bC5yb3V0ZUNvbmZpZz9sLnJvdXRlQ29uZmlnLmNhbkFjdGl2YXRlOm51bGw7aWYoIWR8fDA9PT1kLmxlbmd0aClyZXR1cm4gX28oITApO2NvbnN0IGg9ZC5tYXAoZj0+VDFlKCgpPT57Y29uc3Qgdj1zVChsKT8/YSxNPVZfKGYsdik7cmV0dXJuIHQ2KGZ1bmN0aW9u''@;'; put 'put ''IElSZShjKXtyZXR1cm4gYyYmaFQoYy5jYW5BY3RpdmF0ZSl9KE0pP00uY2FuQWN0aXZhdGUobCxjKTpDMSh2LCgpPT5NKGwsYykpKS5waXBlKFFtKCkpfSkpO3JldHVybiBfbyhoKS5waXBlKEJfKCkpfShjLGgucm91dGUsYSkpKSxRbShoPT4hMCE9PWgsITApKX0oZCxmLGMsbCk6X28oTSkp''@;'; put 'put ''LFlhKE09Pih7Li4uYSxndWFyZHNSZXN1bHQ6TX0pKSl9KX0odGhpcy5lbnZpcm9ubWVudEluamVjdG9yLHY9PnRoaXMuZXZlbnRzLm5leHQodikpLE0wKHY9PntpZihkLmd1YXJkc1Jlc3VsdD12Lmd1YXJkc1Jlc3VsdCx2Lmd1YXJkc1Jlc3VsdCYmImJvb2xlYW4iIT10eXBlb2Ygdi5ndWFy''@;'; put 'put ''ZHNSZXN1bHQpdGhyb3cgaUYoMCx2Lmd1YXJkc1Jlc3VsdCk7Y29uc3QgTT1uZXcgdFJlKHYuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZSh2LmV4dHJhY3RlZFVybCksdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZSh2LnVybEFmdGVyUmVkaXJlY3RzKSx2LnRhcmdldFNuYXBz''@;'; put 'put ''aG90LCEhdi5ndWFyZHNSZXN1bHQpO3RoaXMuZXZlbnRzLm5leHQoTSl9KSxvYyh2PT4hIXYuZ3VhcmRzUmVzdWx0fHwodGhpcy5jYW5jZWxOYXZpZ2F0aW9uVHJhbnNpdGlvbih2LCIiLGMyLkd1YXJkUmVqZWN0ZWQpLCExKSksUiQodj0+e2lmKDAhPT12Lmd1YXJkcy5jYW5BY3RpdmF0ZUNo''@;'; put 'put ''ZWNrcy5sZW5ndGgpcmV0dXJuIF9vKHYpLnBpcGUoTTAoTT0+e2NvbnN0IEQ9bmV3IG5SZShNLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoTS5leHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoTS51cmxBZnRlclJlZGlyZWN0cyksTS50YXJnZXRTbmFw''@;'; put 'put ''c2hvdCk7dGhpcy5ldmVudHMubmV4dChEKX0pLGJkKE09PntsZXQgRD0hMTtyZXR1cm4gX28oTSkucGlwZShmdW5jdGlvbiBjTGUoYyxsKXtyZXR1cm4gczEoYT0+e2NvbnN0e3RhcmdldFNuYXBzaG90OmQsZ3VhcmRzOntjYW5BY3RpdmF0ZUNoZWNrczpofX09YTtpZighaC5sZW5ndGgpcmV0''@;'; put 'put ''dXJuIF9vKGEpO2NvbnN0IGY9bmV3IFNldChoLm1hcChEPT5ELnJvdXRlKSksdj1uZXcgU2V0O2Zvcihjb25zdCBEIG9mIGYpaWYoIXYuaGFzKEQpKWZvcihjb25zdCBVIG9mIHZkZShEKSl2LmFkZChVKTtsZXQgTT0wO3JldHVybiBlMCh2KS5waXBlKFBfKEQ9PmYuaGFzKEQpP2Z1bmN0aW9u''@;'; put 'put ''IHVMZShjLGwsYSxkKXtjb25zdCBoPWMucm91dGVDb25maWcsZj1jLl9yZXNvbHZlO3JldHVybiB2b2lkIDAhPT1oPy50aXRsZSYmIXJkZShoKSYmKGZbdFRdPWgudGl0bGUpLGZ1bmN0aW9uIGRMZShjLGwsYSxkKXtjb25zdCBoPWckKGMpO2lmKDA9PT1oLmxlbmd0aClyZXR1cm4gX28oe30p''@;'; put 'put ''O2NvbnN0IGY9e307cmV0dXJuIGUwKGgpLnBpcGUoczEodj0+ZnVuY3Rpb24gaExlKGMsbCxhLGQpe2NvbnN0IGg9c1QobCk/P2QsZj1WXyhjLGgpO3JldHVybiB0NihmLnJlc29sdmU/Zi5yZXNvbHZlKGwsYSk6QzEoaCwoKT0+ZihsLGEpKSl9KGNbdl0sbCxhLGQpLnBpcGUoUW0oKSxNMChN''@;'; put 'put ''PT57aWYoTSBpbnN0YW5jZW9mIEEkKXRocm93IGlGKG5ldyBXUCxNKTtmW3ZdPU19KSkpLHAkKDEpLFlhKCgpPT5mKSxhOSh2PT51ZGUodik/bDI6SkUodikpKX0oZixjLGwsZCkucGlwZShZYSh2PT4oYy5fcmVzb2x2ZWREYXRhPXYsYy5kYXRhPXRGKGMsYy5wYXJlbnQsYSkucmVzb2x2ZSxu''@;'; put 'put ''dWxsKSkpfShELGQsYyxsKTooRC5kYXRhPXRGKEQsRC5wYXJlbnQsYykucmVzb2x2ZSxfbyh2b2lkIDApKSksTTAoKCk9Pk0rKykscCQoMSksczEoRD0+TT09PXYuc2l6ZT9fbyhhKTpsMikpfSl9KHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSx0aGlzLmVudmlyb25tZW50SW5qZWN0''@;'; put 'put ''b3IpLE0wKHtuZXh0OigpPT5EPSEwLGNvbXBsZXRlOigpPT57RHx8dGhpcy5jYW5jZWxOYXZpZ2F0aW9uVHJhbnNpdGlvbihNLCIiLGMyLk5vRGF0YUZyb21SZXNvbHZlcil9fSkpfSksTTAoTT0+e2NvbnN0IEQ9bmV3IHJSZShNLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoTS5l''@;'; put 'put ''eHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoTS51cmxBZnRlclJlZGlyZWN0cyksTS50YXJnZXRTbmFwc2hvdCk7dGhpcy5ldmVudHMubmV4dChEKX0pKX0pLFIkKHY9Pntjb25zdCBNPUQ9Pntjb25zdCBVPVtdO0Qucm91dGVDb25maWc/LmxvYWRDb21wb25lbnQm''@;'; put 'put ''JiFELnJvdXRlQ29uZmlnLl9sb2FkZWRDb21wb25lbnQmJlUucHVzaCh0aGlzLmNvbmZpZ0xvYWRlci5sb2FkQ29tcG9uZW50KEQucm91dGVDb25maWcpLnBpcGUoTTAodGU9PntELmNvbXBvbmVudD10ZX0pLFlhKCgpPT57fSkpKTtmb3IoY29uc3QgdGUgb2YgRC5jaGlsZHJlbilVLnB1c2go''@;'; put 'put ''Li4uTSh0ZSkpO3JldHVybiBVfTtyZXR1cm4gaTkoTSh2LnRhcmdldFNuYXBzaG90LnJvb3QpKS5waXBlKFVQKG51bGwpLFAzKDEpKX0pLFIkKCgpPT50aGlzLmFmdGVyUHJlYWN0aXZhdGlvbigpKSxiZCgoKT0+e2NvbnN0e2N1cnJlbnRTbmFwc2hvdDp2LHRhcmdldFNuYXBzaG90Ok19PWQs''@;'; put 'put ''RD10aGlzLmNyZWF0ZVZpZXdUcmFuc2l0aW9uPy4odGhpcy5lbnZpcm9ubWVudEluamVjdG9yLHYucm9vdCxNLnJvb3QpO3JldHVybiBEP2UwKEQpLnBpcGUoWWEoKCk9PmQpKTpfbyhkKX0pLFlhKHY9Pntjb25zdCBNPWZ1bmN0aW9uIGJSZShjLGwsYSl7Y29uc3QgZD1jVChjLGwuX3Jvb3Qs''@;'; put 'put ''YT9hLl9yb290OnZvaWQgMCk7cmV0dXJuIG5ldyBRMWUoZCxsKX0oYS5yb3V0ZVJldXNlU3RyYXRlZ3ksdi50YXJnZXRTbmFwc2hvdCx2LmN1cnJlbnRSb3V0ZXJTdGF0ZSk7cmV0dXJuIHRoaXMuY3VycmVudFRyYW5zaXRpb249ZD17Li4udix0YXJnZXRSb3V0ZXJTdGF0ZTpNfSx0aGlzLmN1''@;'; put 'put ''cnJlbnROYXZpZ2F0aW9uLnRhcmdldFJvdXRlclN0YXRlPU0sZH0pLE0wKCgpPT57dGhpcy5ldmVudHMubmV4dChuZXcgdyQpfSksKChjLGwsYSxkKT0+WWEoaD0+KG5ldyBNUmUobCxoLnRhcmdldFJvdXRlclN0YXRlLGguY3VycmVudFJvdXRlclN0YXRlLGEsZCkuYWN0aXZhdGUoYyksaCkp''@;'; put 'put ''KSh0aGlzLnJvb3RDb250ZXh0cyxhLnJvdXRlUmV1c2VTdHJhdGVneSx2PT50aGlzLmV2ZW50cy5uZXh0KHYpLHRoaXMuaW5wdXRCaW5kaW5nRW5hYmxlZCksUDMoMSksTTAoe25leHQ6dj0+e2g9ITAsdGhpcy5sYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb249dGhpcy5jdXJyZW50TmF2aWdhdGlv''@;'; put 'put ''bix0aGlzLmV2ZW50cy5uZXh0KG5ldyBmNCh2LmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUodi5leHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUodi51cmxBZnRlclJlZGlyZWN0cykpKSx0aGlzLnRpdGxlU3RyYXRlZ3k/LnVwZGF0ZVRpdGxlKHYudGFy''@;'; put 'put ''Z2V0Um91dGVyU3RhdGUuc25hcHNob3QpLHYucmVzb2x2ZSghMCl9LGNvbXBsZXRlOigpPT57aD0hMH19KSxMMSh0aGlzLnRyYW5zaXRpb25BYm9ydFN1YmplY3QucGlwZShNMCh2PT57dGhyb3cgdn0pKSksUUUoKCk9PnshaCYmIWYmJnRoaXMuY2FuY2VsTmF2aWdhdGlvblRyYW5zaXRpb24o''@;'; put 'put ''ZCwiIixjMi5TdXBlcnNlZGVkQnlOZXdOYXZpZ2F0aW9uKSx0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPy5pZD09PWQuaWQmJih0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPW51bGwsdGhpcy5jdXJyZW50VHJhbnNpdGlvbj1udWxsKX0pLGE5KHY9PntpZih0aGlzLmRlc3Ryb3llZClyZXR1cm4gZC5y''@;'; put 'put ''ZXNvbHZlKCExKSxsMjtpZihmPSEwLGxkZSh2KSl0aGlzLmV2ZW50cy5uZXh0KG5ldyBjOShkLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoZC5leHRyYWN0ZWRVcmwpLHYubWVzc2FnZSx2LmNhbmNlbGxhdGlvbkNvZGUpKSxmdW5jdGlvbiBDUmUoYyl7cmV0dXJuIGxkZShjKSYm''@;'; put 'put ''bDkoYy51cmwpfSh2KT90aGlzLmV2ZW50cy5uZXh0KG5ldyBlRih2LnVybCx2Lm5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnMpKTpkLnJlc29sdmUoITEpO2Vsc2V7Y29uc3QgTT1uZXcgXyQoZC5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGQuZXh0cmFjdGVkVXJsKSx2LGQudGFy''@;'; put 'put ''Z2V0U25hcHNob3Q/P3ZvaWQgMCk7dHJ5e2NvbnN0IEQ9QzEodGhpcy5lbnZpcm9ubWVudEluamVjdG9yLCgpPT50aGlzLm5hdmlnYXRpb25FcnJvckhhbmRsZXI/LihNKSk7aWYoIShEIGluc3RhbmNlb2YgQSQpKXRocm93IHRoaXMuZXZlbnRzLm5leHQoTSksdjt7Y29uc3R7bWVzc2FnZTpV''@;'; put 'put ''LGNhbmNlbGxhdGlvbkNvZGU6dGV9PWlGKDAsRCk7dGhpcy5ldmVudHMubmV4dChuZXcgYzkoZC5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGQuZXh0cmFjdGVkVXJsKSxVLHRlKSksdGhpcy5ldmVudHMubmV4dChuZXcgZUYoRC5yZWRpcmVjdFRvLEQubmF2aWdhdGlvbkJlaGF2''@;'; put 'put ''aW9yT3B0aW9ucykpfX1jYXRjaChEKXt0aGlzLm9wdGlvbnMucmVzb2x2ZU5hdmlnYXRpb25Qcm9taXNlT25FcnJvcj9kLnJlc29sdmUoITEpOmQucmVqZWN0KEQpfX1yZXR1cm4gbDJ9KSl9KSl9Y2FuY2VsTmF2aWdhdGlvblRyYW5zaXRpb24oYSxkLGgpe2NvbnN0IGY9bmV3IGM5KGEuaWQs''@;'; put 'put ''dGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShhLmV4dHJhY3RlZFVybCksZCxoKTt0aGlzLmV2ZW50cy5uZXh0KGYpLGEucmVzb2x2ZSghMSl9aXNVcGRhdGluZ0ludGVybmFsU3RhdGUoKXtyZXR1cm4gdGhpcy5jdXJyZW50VHJhbnNpdGlvbj8uZXh0cmFjdGVkVXJsLnRvU3RyaW5nKCkh''@;'; put 'put ''PT10aGlzLmN1cnJlbnRUcmFuc2l0aW9uPy5jdXJyZW50VXJsVHJlZS50b1N0cmluZygpfWlzVXBkYXRlZEJyb3dzZXJVcmwoKXtjb25zdCBhPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5leHRyYWN0KHRoaXMudXJsU2VyaWFsaXplci5wYXJzZSh0aGlzLmxvY2F0aW9uLnBhdGgoITApKSks''@;'; put 'put ''ZD10aGlzLmN1cnJlbnROYXZpZ2F0aW9uPy50YXJnZXRCcm93c2VyVXJsPz90aGlzLmN1cnJlbnROYXZpZ2F0aW9uPy5leHRyYWN0ZWRVcmw7cmV0dXJuIGEudG9TdHJpbmcoKSE9PWQ/LnRvU3RyaW5nKCkmJiF0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPy5leHRyYXMuc2tpcExvY2F0aW9uQ2hh''@;'; put 'put ''bmdlfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKTtmdW5jdGlvbiBiTGUoYyl7cmV0dXJuIGMhPT1xUH1s''@;'; put 'put ''ZXQgX0xlPSgoKT0+e2NsYXNzIGN7c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OigpPT5KbihDTGUpLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpO2NsYXNzIHdMZXtzaG91''@;'; put 'put ''bGREZXRhY2gobCl7cmV0dXJuITF9c3RvcmUobCxhKXt9c2hvdWxkQXR0YWNoKGwpe3JldHVybiExfXJldHJpZXZlKGwpe3JldHVybiBudWxsfXNob3VsZFJldXNlUm91dGUobCxhKXtyZXR1cm4gbC5yb3V0ZUNvbmZpZz09PWEucm91dGVDb25maWd9fWxldCBDTGU9KCgpPT57Y2xhc3MgYyBl''@;'; put 'put ''eHRlbmRzIHdMZXtzdGF0aWMgXHUwMjc1ZmFjPSgoKT0+e2xldCBhO3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4oYXx8KGE9eWwoYykpKShofHxjKX19KSgpO3N0YXRpYyBcdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1''@;'; put 'put ''cm4gY30pKCksU2RlPSgoKT0+e2NsYXNzIGN7dXJsU2VyaWFsaXplcj1KbihyVCk7b3B0aW9ucz1KbihmVCx7b3B0aW9uYWw6ITB9KXx8e307Y2FuY2VsZWROYXZpZ2F0aW9uUmVzb2x1dGlvbj10aGlzLm9wdGlvbnMuY2FuY2VsZWROYXZpZ2F0aW9uUmVzb2x1dGlvbnx8InJlcGxhY2UiO2xv''@;'; put 'put ''Y2F0aW9uPUpuKHMyKTt1cmxIYW5kbGluZ1N0cmF0ZWd5PUpuKE8kKTt1cmxVcGRhdGVTdHJhdGVneT10aGlzLm9wdGlvbnMudXJsVXBkYXRlU3RyYXRlZ3l8fCJkZWZlcnJlZCI7Y3VycmVudFVybFRyZWU9bmV3IG85O2dldEN1cnJlbnRVcmxUcmVlKCl7cmV0dXJuIHRoaXMuY3VycmVudFVy''@;'; put 'put ''bFRyZWV9cmF3VXJsVHJlZT10aGlzLmN1cnJlbnRVcmxUcmVlO2dldFJhd1VybFRyZWUoKXtyZXR1cm4gdGhpcy5yYXdVcmxUcmVlfWNyZWF0ZUJyb3dzZXJQYXRoKHtmaW5hbFVybDphLGluaXRpYWxVcmw6ZCx0YXJnZXRCcm93c2VyVXJsOmh9KXtjb25zdCBmPXZvaWQgMCE9PWE/dGhpcy51''@;'; put 'put ''cmxIYW5kbGluZ1N0cmF0ZWd5Lm1lcmdlKGEsZCk6ZCx2PWg/P2Y7cmV0dXJuIHYgaW5zdGFuY2VvZiBvOT90aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHYpOnZ9Y29tbWl0VHJhbnNpdGlvbih7dGFyZ2V0Um91dGVyU3RhdGU6YSxmaW5hbFVybDpkLGluaXRpYWxVcmw6aH0pe2QmJmE/''@;'; put 'put ''KHRoaXMuY3VycmVudFVybFRyZWU9ZCx0aGlzLnJhd1VybFRyZWU9dGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5Lm1lcmdlKGQsaCksdGhpcy5yb3V0ZXJTdGF0ZT1hKTp0aGlzLnJhd1VybFRyZWU9aH1yb3V0ZXJTdGF0ZT1lZGUobnVsbCk7Z2V0Um91dGVyU3RhdGUoKXtyZXR1cm4gdGhpcy5y''@;'; put 'put ''b3V0ZXJTdGF0ZX1zdGF0ZU1lbWVudG89dGhpcy5jcmVhdGVTdGF0ZU1lbWVudG8oKTt1cGRhdGVTdGF0ZU1lbWVudG8oKXt0aGlzLnN0YXRlTWVtZW50bz10aGlzLmNyZWF0ZVN0YXRlTWVtZW50bygpfWNyZWF0ZVN0YXRlTWVtZW50bygpe3JldHVybntyYXdVcmxUcmVlOnRoaXMucmF3VXJs''@;'; put 'put ''VHJlZSxjdXJyZW50VXJsVHJlZTp0aGlzLmN1cnJlbnRVcmxUcmVlLHJvdXRlclN0YXRlOnRoaXMucm91dGVyU3RhdGV9fXJlc2V0SW50ZXJuYWxTdGF0ZSh7ZmluYWxVcmw6YX0pe3RoaXMucm91dGVyU3RhdGU9dGhpcy5zdGF0ZU1lbWVudG8ucm91dGVyU3RhdGUsdGhpcy5jdXJyZW50VXJs''@;'; put 'put ''VHJlZT10aGlzLnN0YXRlTWVtZW50by5jdXJyZW50VXJsVHJlZSx0aGlzLnJhd1VybFRyZWU9dGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5Lm1lcmdlKHRoaXMuY3VycmVudFVybFRyZWUsYT8/dGhpcy5yYXdVcmxUcmVlKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXco''@;'; put 'put ''ZHx8Yyl9O3N0YXRpYyBcdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6KCk9PkpuKFNMZSkscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gY30pKCksU0xlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBTZGV7Y3VycmVudFBhZ2VJZD0wO2xhc3RTdWNjZXNzZnVsSWQ9LTE7cmVzdG9yZWRT''@;'; put 'put ''dGF0ZSgpe3JldHVybiB0aGlzLmxvY2F0aW9uLmdldFN0YXRlKCl9Z2V0IGJyb3dzZXJQYWdlSWQoKXtyZXR1cm4iY29tcHV0ZWQiIT09dGhpcy5jYW5jZWxlZE5hdmlnYXRpb25SZXNvbHV0aW9uP3RoaXMuY3VycmVudFBhZ2VJZDp0aGlzLnJlc3RvcmVkU3RhdGUoKT8uXHUwMjc1cm91dGVy''@;'; put 'put ''UGFnZUlkPz90aGlzLmN1cnJlbnRQYWdlSWR9cmVnaXN0ZXJOb25Sb3V0ZXJDdXJyZW50RW50cnlDaGFuZ2VMaXN0ZW5lcihhKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5zdWJzY3JpYmUoZD0+eyJwb3BzdGF0ZSI9PT1kLnR5cGUmJnNldFRpbWVvdXQoKCk9PnthKGQudXJsLGQuc3RhdGUsInBv''@;'; put 'put ''cHN0YXRlIil9KX0pfWhhbmRsZVJvdXRlckV2ZW50KGEsZCl7YSBpbnN0YW5jZW9mIEpQP3RoaXMudXBkYXRlU3RhdGVNZW1lbnRvKCk6YSBpbnN0YW5jZW9mIEhfP3RoaXMuY29tbWl0VHJhbnNpdGlvbihkKTphIGluc3RhbmNlb2YgWDFlPyJlYWdlciI9PT10aGlzLnVybFVwZGF0ZVN0cmF0''@;'; put 'put ''ZWd5JiYoZC5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlfHx0aGlzLnNldEJyb3dzZXJVcmwodGhpcy5jcmVhdGVCcm93c2VyUGF0aChkKSxkKSk6YSBpbnN0YW5jZW9mIHckPyh0aGlzLmNvbW1pdFRyYW5zaXRpb24oZCksImRlZmVycmVkIj09PXRoaXMudXJsVXBkYXRlU3RyYXRlZ3kmJiFk''@;'; put 'put ''LmV4dHJhcy5za2lwTG9jYXRpb25DaGFuZ2UmJnRoaXMuc2V0QnJvd3NlclVybCh0aGlzLmNyZWF0ZUJyb3dzZXJQYXRoKGQpLGQpKTphIGluc3RhbmNlb2YgYzkmJihhLmNvZGU9PT1jMi5HdWFyZFJlamVjdGVkfHxhLmNvZGU9PT1jMi5Ob0RhdGFGcm9tUmVzb2x2ZXIpP3RoaXMucmVzdG9y''@;'; put 'put ''ZUhpc3RvcnkoZCk6YSBpbnN0YW5jZW9mIF8kP3RoaXMucmVzdG9yZUhpc3RvcnkoZCwhMCk6YSBpbnN0YW5jZW9mIGY0JiYodGhpcy5sYXN0U3VjY2Vzc2Z1bElkPWEuaWQsdGhpcy5jdXJyZW50UGFnZUlkPXRoaXMuYnJvd3NlclBhZ2VJZCl9c2V0QnJvd3NlclVybChhLHtleHRyYXM6ZCxp''@;'; put 'put ''ZDpofSl7Y29uc3R7cmVwbGFjZVVybDpmLHN0YXRlOnZ9PWQ7aWYodGhpcy5sb2NhdGlvbi5pc0N1cnJlbnRQYXRoRXF1YWxUbyhhKXx8Zil7Y29uc3QgTT10aGlzLmJyb3dzZXJQYWdlSWQsRD17Li4udiwuLi50aGlzLmdlbmVyYXRlTmdSb3V0ZXJTdGF0ZShoLE0pfTt0aGlzLmxvY2F0aW9u''@;'; put 'put ''LnJlcGxhY2VTdGF0ZShhLCIiLEQpfWVsc2V7Y29uc3QgTT17Li4udiwuLi50aGlzLmdlbmVyYXRlTmdSb3V0ZXJTdGF0ZShoLHRoaXMuYnJvd3NlclBhZ2VJZCsxKX07dGhpcy5sb2NhdGlvbi5nbyhhLCIiLE0pfX1yZXN0b3JlSGlzdG9yeShhLGQ9ITEpe2lmKCJjb21wdXRlZCI9PT10aGlz''@;'; put 'put ''LmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb24pe2NvbnN0IGY9dGhpcy5jdXJyZW50UGFnZUlkLXRoaXMuYnJvd3NlclBhZ2VJZDswIT09Zj90aGlzLmxvY2F0aW9uLmhpc3RvcnlHbyhmKTp0aGlzLmdldEN1cnJlbnRVcmxUcmVlKCk9PT1hLmZpbmFsVXJsJiYwPT09ZiYmKHRoaXMucmVz''@;'; put 'put ''ZXRJbnRlcm5hbFN0YXRlKGEpLHRoaXMucmVzZXRVcmxUb0N1cnJlbnRVcmxUcmVlKCkpfWVsc2UicmVwbGFjZSI9PT10aGlzLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb24mJihkJiZ0aGlzLnJlc2V0SW50ZXJuYWxTdGF0ZShhKSx0aGlzLnJlc2V0VXJsVG9DdXJyZW50VXJsVHJlZSgp''@;'; put 'put ''KX1yZXNldFVybFRvQ3VycmVudFVybFRyZWUoKXt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHRoaXMuZ2V0UmF3VXJsVHJlZSgpKSwiIix0aGlzLmdlbmVyYXRlTmdSb3V0ZXJTdGF0ZSh0aGlzLmxhc3RTdWNjZXNzZnVsSWQsdGhpcy5j''@;'; put 'put ''dXJyZW50UGFnZUlkKSl9Z2VuZXJhdGVOZ1JvdXRlclN0YXRlKGEsZCl7cmV0dXJuImNvbXB1dGVkIj09PXRoaXMuY2FuY2VsZWROYXZpZ2F0aW9uUmVzb2x1dGlvbj97bmF2aWdhdGlvbklkOmEsXHUwMjc1cm91dGVyUGFnZUlkOmR9OntuYXZpZ2F0aW9uSWQ6YX19c3RhdGljIFx1MDI3NWZh''@;'; put 'put ''Yz0oKCk9PntsZXQgYTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuKGF8fChhPXlsKGMpKSkoaHx8Yyl9fSkoKTtzdGF0aWMgXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIE1kZShjLGwp''@;'; put 'put ''e2MuZXZlbnRzLnBpcGUob2MoYT0+YSBpbnN0YW5jZW9mIGY0fHxhIGluc3RhbmNlb2YgYzl8fGEgaW5zdGFuY2VvZiBfJHx8YSBpbnN0YW5jZW9mIEhfKSxZYShhPT5hIGluc3RhbmNlb2YgZjR8fGEgaW5zdGFuY2VvZiBIXz8wOmEgaW5zdGFuY2VvZiBjOSYmKGEuY29kZT09PWMyLlJlZGly''@;'; put 'put ''ZWN0fHxhLmNvZGU9PT1jMi5TdXBlcnNlZGVkQnlOZXdOYXZpZ2F0aW9uKT8yOjEpLG9jKGE9PjIhPT1hKSxQMygxKSkuc3Vic2NyaWJlKCgpPT57bCgpfSl9Y29uc3QgTUxlPXtwYXRoczoiZXhhY3QiLGZyYWdtZW50OiJpZ25vcmVkIixtYXRyaXhQYXJhbXM6Imlnbm9yZWQiLHF1ZXJ5UGFy''@;'; put 'put ''YW1zOiJleGFjdCJ9LHhMZT17cGF0aHM6InN1YnNldCIsZnJhZ21lbnQ6Imlnbm9yZWQiLG1hdHJpeFBhcmFtczoiaWdub3JlZCIscXVlcnlQYXJhbXM6InN1YnNldCJ9O2xldCBubD0oKCk9PntjbGFzcyBje2dldCBjdXJyZW50VXJsVHJlZSgpe3JldHVybiB0aGlzLnN0YXRlTWFuYWdlci5n''@;'; put 'put ''ZXRDdXJyZW50VXJsVHJlZSgpfWdldCByYXdVcmxUcmVlKCl7cmV0dXJuIHRoaXMuc3RhdGVNYW5hZ2VyLmdldFJhd1VybFRyZWUoKX1kaXNwb3NlZD0hMTtub25Sb3V0ZXJDdXJyZW50RW50cnlDaGFuZ2VTdWJzY3JpcHRpb247Y29uc29sZT1KbihiWSk7c3RhdGVNYW5hZ2VyPUpuKFNkZSk7''@;'; put 'put ''b3B0aW9ucz1KbihmVCx7b3B0aW9uYWw6ITB9KXx8e307cGVuZGluZ1Rhc2tzPUpuKGxmKTt1cmxVcGRhdGVTdHJhdGVneT10aGlzLm9wdGlvbnMudXJsVXBkYXRlU3RyYXRlZ3l8fCJkZWZlcnJlZCI7bmF2aWdhdGlvblRyYW5zaXRpb25zPUpuKFAkKTt1cmxTZXJpYWxpemVyPUpuKHJUKTts''@;'; put 'put ''b2NhdGlvbj1KbihzMik7dXJsSGFuZGxpbmdTdHJhdGVneT1KbihPJCk7X2V2ZW50cz1uZXcgdXI7Z2V0IGV2ZW50cygpe3JldHVybiB0aGlzLl9ldmVudHN9Z2V0IHJvdXRlclN0YXRlKCl7cmV0dXJuIHRoaXMuc3RhdGVNYW5hZ2VyLmdldFJvdXRlclN0YXRlKCl9bmF2aWdhdGVkPSExO3Jv''@;'; put 'put ''dXRlUmV1c2VTdHJhdGVneT1KbihfTGUpO29uU2FtZVVybE5hdmlnYXRpb249dGhpcy5vcHRpb25zLm9uU2FtZVVybE5hdmlnYXRpb258fCJpZ25vcmUiO2NvbmZpZz1KbihsRix7b3B0aW9uYWw6ITB9KT8uZmxhdCgpPz9bXTtjb21wb25lbnRJbnB1dEJpbmRpbmdFbmFibGVkPSEhSm4ockYs''@;'; put 'put ''e29wdGlvbmFsOiEwfSk7Y29uc3RydWN0b3IoKXt0aGlzLnJlc2V0Q29uZmlnKHRoaXMuY29uZmlnKSx0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5zZXR1cE5hdmlnYXRpb25zKHRoaXMpLnN1YnNjcmliZSh7ZXJyb3I6YT0+e3RoaXMuY29uc29sZS53YXJuKGEpfX0pLHRoaXMuc3Vic2Ny''@;'; put 'put ''aWJlVG9OYXZpZ2F0aW9uRXZlbnRzKCl9ZXZlbnRzU3Vic2NyaXB0aW9uPW5ldyBCdDtzdWJzY3JpYmVUb05hdmlnYXRpb25FdmVudHMoKXtjb25zdCBhPXRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLmV2ZW50cy5zdWJzY3JpYmUoZD0+e3RyeXtjb25zdCBoPXRoaXMubmF2aWdhdGlvblRy''@;'; put 'put ''YW5zaXRpb25zLmN1cnJlbnRUcmFuc2l0aW9uLGY9dGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuY3VycmVudE5hdmlnYXRpb247aWYobnVsbCE9PWgmJm51bGwhPT1mKWlmKHRoaXMuc3RhdGVNYW5hZ2VyLmhhbmRsZVJvdXRlckV2ZW50KGQsZiksZCBpbnN0YW5jZW9mIGM5JiZkLmNvZGUh''@;'; put 'put ''PT1jMi5SZWRpcmVjdCYmZC5jb2RlIT09YzIuU3VwZXJzZWRlZEJ5TmV3TmF2aWdhdGlvbil0aGlzLm5hdmlnYXRlZD0hMDtlbHNlIGlmKGQgaW5zdGFuY2VvZiBmNCl0aGlzLm5hdmlnYXRlZD0hMDtlbHNlIGlmKGQgaW5zdGFuY2VvZiBlRil7Y29uc3Qgdj1kLm5hdmlnYXRpb25CZWhhdmlv''@;'; put 'put ''ck9wdGlvbnMsTT10aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UoZC51cmwsaC5jdXJyZW50UmF3VXJsKSxEPXticm93c2VyVXJsOmguZXh0cmFzLmJyb3dzZXJVcmwsaW5mbzpoLmV4dHJhcy5pbmZvLHNraXBMb2NhdGlvbkNoYW5nZTpoLmV4dHJhcy5za2lwTG9jYXRpb25DaGFuZ2Us''@;'; put 'put ''cmVwbGFjZVVybDpoLmV4dHJhcy5yZXBsYWNlVXJsfHwiZWFnZXIiPT09dGhpcy51cmxVcGRhdGVTdHJhdGVneXx8YkxlKGguc291cmNlKSwuLi52fTt0aGlzLnNjaGVkdWxlTmF2aWdhdGlvbihNLHFQLG51bGwsRCx7cmVzb2x2ZTpoLnJlc29sdmUscmVqZWN0OmgucmVqZWN0LHByb21pc2U6''@;'; put 'put ''aC5wcm9taXNlfSl9KGZ1bmN0aW9uIFRMZShjKXtyZXR1cm4hKGMgaW5zdGFuY2VvZiB3JHx8YyBpbnN0YW5jZW9mIGVGKX0pKGQpJiZ0aGlzLl9ldmVudHMubmV4dChkKX1jYXRjaChoKXt0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy50cmFuc2l0aW9uQWJvcnRTdWJqZWN0Lm5leHQoaCl9''@;'; put 'put ''fSk7dGhpcy5ldmVudHNTdWJzY3JpcHRpb24uYWRkKGEpfXJlc2V0Um9vdENvbXBvbmVudFR5cGUoYSl7dGhpcy5yb3V0ZXJTdGF0ZS5yb290LmNvbXBvbmVudD1hLHRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLnJvb3RDb21wb25lbnRUeXBlPWF9aW5pdGlhbE5hdmlnYXRpb24oKXt0aGlz''@;'; put 'put ''LnNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpLHRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLmhhc1JlcXVlc3RlZE5hdmlnYXRpb258fHRoaXMubmF2aWdhdGVUb1N5bmNXaXRoQnJvd3Nlcih0aGlzLmxvY2F0aW9uLnBhdGgoITApLHFQLHRoaXMuc3RhdGVNYW5hZ2VyLnJlc3RvcmVk''@;'; put 'put ''U3RhdGUoKSl9c2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyKCl7dGhpcy5ub25Sb3V0ZXJDdXJyZW50RW50cnlDaGFuZ2VTdWJzY3JpcHRpb24/Pz10aGlzLnN0YXRlTWFuYWdlci5yZWdpc3Rlck5vblJvdXRlckN1cnJlbnRFbnRyeUNoYW5nZUxpc3RlbmVyKChhLGQsaCk9Pnt0aGlzLm5h''@;'; put 'put ''dmlnYXRlVG9TeW5jV2l0aEJyb3dzZXIoYSxoLGQpfSl9bmF2aWdhdGVUb1N5bmNXaXRoQnJvd3NlcihhLGQsaCl7Y29uc3QgZj17cmVwbGFjZVVybDohMH0sdj1oPy5uYXZpZ2F0aW9uSWQ/aDpudWxsO2lmKGgpe2NvbnN0IEQ9ey4uLmh9O2RlbGV0ZSBELm5hdmlnYXRpb25JZCxkZWxldGUg''@;'; put 'put ''RC5cdTAyNzVyb3V0ZXJQYWdlSWQsMCE9PU9iamVjdC5rZXlzKEQpLmxlbmd0aCYmKGYuc3RhdGU9RCl9Y29uc3QgTT10aGlzLnBhcnNlVXJsKGEpO3RoaXMuc2NoZWR1bGVOYXZpZ2F0aW9uKE0sZCx2LGYpfWdldCB1cmwoKXtyZXR1cm4gdGhpcy5zZXJpYWxpemVVcmwodGhpcy5jdXJyZW50''@;'; put 'put ''VXJsVHJlZSl9Z2V0Q3VycmVudE5hdmlnYXRpb24oKXtyZXR1cm4gdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuY3VycmVudE5hdmlnYXRpb259Z2V0IGxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbigpe3JldHVybiB0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5sYXN0U3VjY2Vzc2Z1bE5h''@;'; put 'put ''dmlnYXRpb259cmVzZXRDb25maWcoYSl7dGhpcy5jb25maWc9YS5tYXAoVCQpLHRoaXMubmF2aWdhdGVkPSExfW5nT25EZXN0cm95KCl7dGhpcy5kaXNwb3NlKCl9ZGlzcG9zZSgpe3RoaXMuX2V2ZW50cy51bnN1YnNjcmliZSgpLHRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLmNvbXBsZXRl''@;'; put 'put ''KCksdGhpcy5ub25Sb3V0ZXJDdXJyZW50RW50cnlDaGFuZ2VTdWJzY3JpcHRpb24mJih0aGlzLm5vblJvdXRlckN1cnJlbnRFbnRyeUNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMubm9uUm91dGVyQ3VycmVudEVudHJ5Q2hhbmdlU3Vic2NyaXB0aW9uPXZvaWQgMCksdGhp''@;'; put 'put ''cy5kaXNwb3NlZD0hMCx0aGlzLmV2ZW50c1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfWNyZWF0ZVVybFRyZWUoYSxkPXt9KXtjb25zdHtyZWxhdGl2ZVRvOmgscXVlcnlQYXJhbXM6ZixmcmFnbWVudDp2LHF1ZXJ5UGFyYW1zSGFuZGxpbmc6TSxwcmVzZXJ2ZUZyYWdtZW50OkR9PWQsVT1E''@;'; put 'put ''P3RoaXMuY3VycmVudFVybFRyZWUuZnJhZ21lbnQ6djtsZXQgb2UsdGU9bnVsbDtzd2l0Y2goTT8/dGhpcy5vcHRpb25zLmRlZmF1bHRRdWVyeVBhcmFtc0hhbmRsaW5nKXtjYXNlIm1lcmdlIjp0ZT17Li4udGhpcy5jdXJyZW50VXJsVHJlZS5xdWVyeVBhcmFtcywuLi5mfTticmVhaztjYXNl''@;'; put 'put ''InByZXNlcnZlIjp0ZT10aGlzLmN1cnJlbnRVcmxUcmVlLnF1ZXJ5UGFyYW1zO2JyZWFrO2RlZmF1bHQ6dGU9Znx8bnVsbH1udWxsIT09dGUmJih0ZT10aGlzLnJlbW92ZUVtcHR5UHJvcHModGUpKTt0cnl7b2U9VTFlKGg/aC5zbmFwc2hvdDp0aGlzLnJvdXRlclN0YXRlLnNuYXBzaG90LnJv''@;'; put 'put ''b3QpfWNhdGNoeygic3RyaW5nIiE9dHlwZW9mIGFbMF18fCIvIiE9PWFbMF1bMF0pJiYoYT1bXSksb2U9dGhpcy5jdXJyZW50VXJsVHJlZS5yb290fXJldHVybiBaMWUob2UsYSx0ZSxVPz9udWxsKX1uYXZpZ2F0ZUJ5VXJsKGEsZD17c2tpcExvY2F0aW9uQ2hhbmdlOiExfSl7Y29uc3QgaD1s''@;'; put 'put ''OShhKT9hOnRoaXMucGFyc2VVcmwoYSksZj10aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UoaCx0aGlzLnJhd1VybFRyZWUpO3JldHVybiB0aGlzLnNjaGVkdWxlTmF2aWdhdGlvbihmLHFQLG51bGwsZCl9bmF2aWdhdGUoYSxkPXtza2lwTG9jYXRpb25DaGFuZ2U6ITF9KXtyZXR1cm4g''@;'; put 'put ''ZnVuY3Rpb24gRUxlKGMpe2ZvcihsZXQgbD0wO2w8Yy5sZW5ndGg7bCsrKWlmKG51bGw9PWNbbF0pdGhyb3cgbmV3IFByKDQwMDgsITEpfShhKSx0aGlzLm5hdmlnYXRlQnlVcmwodGhpcy5jcmVhdGVVcmxUcmVlKGEsZCksZCl9c2VyaWFsaXplVXJsKGEpe3JldHVybiB0aGlzLnVybFNlcmlh''@;'; put 'put ''bGl6ZXIuc2VyaWFsaXplKGEpfXBhcnNlVXJsKGEpe3RyeXtyZXR1cm4gdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGEpfWNhdGNoe3JldHVybiB0aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UoIi8iKX19aXNBY3RpdmUoYSxkKXtsZXQgaDtpZihoPSEwPT09ZD97Li4uTUxlfTohMT09PWQ/ey4u''@;'; put 'put ''LnhMZX06ZCxsOShhKSlyZXR1cm4gTzFlKHRoaXMuY3VycmVudFVybFRyZWUsYSxoKTtjb25zdCBmPXRoaXMucGFyc2VVcmwoYSk7cmV0dXJuIE8xZSh0aGlzLmN1cnJlbnRVcmxUcmVlLGYsaCl9cmVtb3ZlRW1wdHlQcm9wcyhhKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYSkucmVkdWNlKChk''@;'; put 'put ''LFtoLGZdKT0+KG51bGwhPWYmJihkW2hdPWYpLGQpLHt9KX1zY2hlZHVsZU5hdmlnYXRpb24oYSxkLGgsZix2KXtpZih0aGlzLmRpc3Bvc2VkKXJldHVybiBQcm9taXNlLnJlc29sdmUoITEpO2xldCBNLEQsVTt2PyhNPXYucmVzb2x2ZSxEPXYucmVqZWN0LFU9di5wcm9taXNlKTpVPW5ldyBQ''@;'; put 'put ''cm9taXNlKChvZSx2ZSk9PntNPW9lLEQ9dmV9KTtjb25zdCB0ZT10aGlzLnBlbmRpbmdUYXNrcy5hZGQoKTtyZXR1cm4gTWRlKHRoaXMsKCk9PntxdWV1ZU1pY3JvdGFzaygoKT0+dGhpcy5wZW5kaW5nVGFza3MucmVtb3ZlKHRlKSl9KSx0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5oYW5k''@;'; put 'put ''bGVOYXZpZ2F0aW9uUmVxdWVzdCh7c291cmNlOmQscmVzdG9yZWRTdGF0ZTpoLGN1cnJlbnRVcmxUcmVlOnRoaXMuY3VycmVudFVybFRyZWUsY3VycmVudFJhd1VybDp0aGlzLmN1cnJlbnRVcmxUcmVlLHJhd1VybDphLGV4dHJhczpmLHJlc29sdmU6TSxyZWplY3Q6RCxwcm9taXNlOlUsY3Vy''@;'; put 'put ''cmVudFNuYXBzaG90OnRoaXMucm91dGVyU3RhdGUuc25hcHNob3QsY3VycmVudFJvdXRlclN0YXRlOnRoaXMucm91dGVyU3RhdGV9KSxVLmNhdGNoKG9lPT5Qcm9taXNlLnJlamVjdChvZSkpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1''@;'; put 'put ''MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKTt2YXIgel89ZnVuY3Rpb24oYyl7cmV0dXJuIGMubGlnaHQ9ImxpZ2h0IixjLmRhcms9ImRhcmsiLGN9KHpffHx7fSkseGRlPWIoNTUxODgpLEFMZT1iKDc4NzU1''@;'; put 'put ''KTtjb25zdCBGJD17dXNlcnNfYWxsb3dlZDoxLHZpZXdlcl9yb3dzX2FsbG93ZWQ6MTUsZWRpdG9yX3Jvd3NfYWxsb3dlZDoxNSxzdGFnZV9yb3dzX2FsbG93ZWQ6MS8wLGhpc3Rvcnlfcm93c19hbGxvd2VkOjE1LHN1Ym1pdF9yb3dzX2xpbWl0OjUsdmlld2JveF9saW1pdDoxLGxpbmVhZ2Vf''@;'; put 'put ''ZGFpbHlfbGltaXQ6Myx0YWJsZXNfaW5fbGlicmFyeV9saW1pdDozNSx2aWV3Ym94OiEwLGZpbGVVcGxvYWQ6ITAsZWRpdFJlY29yZDohMCxhZGRSZWNvcmQ6ITB9O3ZhciB1Mj1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLnZpZXdlcl9yb3dzX2FsbG93ZWQ9MF09InZpZXdlcl9yb3dzX2FsbG93''@;'; put 'put ''ZWQiLGNbYy5lZGl0b3Jfcm93c19hbGxvd2VkPTFdPSJlZGl0b3Jfcm93c19hbGxvd2VkIixjW2Muc3RhZ2Vfcm93c19hbGxvd2VkPTJdPSJzdGFnZV9yb3dzX2FsbG93ZWQiLGNbYy5oaXN0b3J5X3Jvd3NfYWxsb3dlZD0zXT0iaGlzdG9yeV9yb3dzX2FsbG93ZWQiLGNbYy5zdWJtaXRfcm93''@;'; put 'put ''c19saW1pdD00XT0ic3VibWl0X3Jvd3NfbGltaXQiLGNbYy50YWJsZXNfaW5fbGlicmFyeV9saW1pdD01XT0idGFibGVzX2luX2xpYnJhcnlfbGltaXQiLGNbYy52aWV3Ym94PTZdPSJ2aWV3Ym94IixjW2Mudmlld2JveF9saW1pdD03XT0idmlld2JveF9saW1pdCIsY1tjLmxpbmVhZ2VfZGFp''@;'; put 'put ''bHlfbGltaXQ9OF09ImxpbmVhZ2VfZGFpbHlfbGltaXQiLGNbYy5maWxlVXBsb2FkPTldPSJmaWxlVXBsb2FkIixjW2MuZWRpdFJlY29yZD0xMF09ImVkaXRSZWNvcmQiLGNbYy5hZGRSZWNvcmQ9MTFdPSJhZGRSZWNvcmQiLGN9KHUyfHx7fSksZDI9YigzNzM0KSxFZGU9Yi5uKGQyKSxsMT1i''@;'; put 'put ''KDEzMjQ3KTtsZXQgdTk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31zZXREY0FkYXB0ZXJTZXR0aW5ncyhhKXt0aGlzLmRjQWRhcHRlclNldHRpbmdzPWF9Z2V0RGNBZGFwdGVyU2V0dGluZ3MoKXtyZXR1cm4gdGhpcy5kY0FkYXB0ZXJTZXR0aW5nc31zdGF0aWN7dGhpcy5cdTAyNzVm''@;'; put 'put ''YWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKSxIJD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy51c2VyQ2hh''@;'; put 'put ''bmdlPW5ldyB1cn1zZXQgdXNlcihhKXt0aGlzLl91c2VyPWEsdGhpcy51c2VyQ2hhbmdlLm5leHQoYSl9Z2V0IHVzZXIoKXtyZXR1cm4gdGhpcy5fdXNlcn1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1m''@;'; put 'put ''cih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtjbGFzcyBjRntjb25zdHJ1Y3Rvcigpe3RoaXMuZGVmYXVsdFNldHRpbmdzPXtwZXJzaXN0U2VsZWN0ZWRUaGVtZTohMCxzZWxlY3RlZFRoZW1lOnpfLmxpZ2h0fSx0aGlzLnNldHRpbmdzPW5ldyBNaSh0aGlz''@;'; put 'put ''LmRlZmF1bHRTZXR0aW5ncyksdGhpcy5yZXN0b3JlQXBwU2V0dGluZ3MoKX1yZXN0b3JlQXBwU2V0dGluZ3MoKXt0cnl7Y29uc3QgbD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiYXBwLXNldHRpbmdzIik7aWYobCl7Y29uc3QgYT1KU09OLnBhcnNlKGwpO3RoaXMuc2V0QXBwU2V0dGluZ3MoYSl9''@;'; put 'put ''ZWxzZSBjb25zb2xlLmluZm8oIk5vIGFwcCBzZXR0aW5ncyBzdG9yZWQgaW4gdGhlIGxvY2FsU3RvcmFnZSwgd2Ugd2lsbCBzZXQgdG8gZGVmYXVsdCB2YWx1ZXMuIil9Y2F0Y2gobCl7Y29uc29sZS53YXJuKCJFcnJvciByZXN0b3Jpbmcgc2V0dGluZ3MgZnJvbSBsb2NhbCBzdG9yZ2FlLiIs''@;'; put 'put ''bCl9fXN0b3JlQXBwU2V0dGluZ3MoKXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiYXBwLXNldHRpbmdzIixKU09OLnN0cmluZ2lmeSh0aGlzLnNldHRpbmdzLnZhbHVlKSl9c2V0QXBwU2V0dGluZ3MobCl7dGhpcy5zZXR0aW5ncy5uZXh0KHsuLi50aGlzLnNldHRpbmdzLnZhbHVlLC4uLmx9KSx0''@;'; put 'put ''aGlzLnN0b3JlQXBwU2V0dGluZ3MoKX19bGV0IEVjPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5hcHBTZXR0aW5nc1NlcnZpY2U9YSx0aGlzLm9uU2lkZWJhclRvZ2dsZT1uZXcgWHIsdGhpcy5vblN0YXJ0dXBEYXRhTG9hZGVkPW5ldyBYcix0aGlzLm9uU2hvd0Fib3J0TW9k''@;'; put 'put ''YWw9bmV3IFhyLHRoaXMub25SZXF1ZXN0c01vZGFsT3Blbj1uZXcgWHIsdGhpcy5vbkRlbW9MaW1pdE1vZGFsU2hvdz1uZXcgWHIsdGhpcy52aWV3TGFzdFVybD1udWxsLHRoaXMuc2lkZWJhckNsb3NlTGltaXQ9MTI4MCx0aGlzLmRhcmtNb2RlPW5ldyBNaSghMSl9dG9nZ2xlRGFya01vZGUo''@;'; put 'put ''YSl7dGhpcy5kYXJrTW9kZS5uZXh0KGEpLGE/ZG9jdW1lbnQuYm9keS5zZXRBdHRyaWJ1dGUoImNkcy10aGVtZSIsImRhcmsiKTpkb2N1bWVudC5ib2R5LnNldEF0dHJpYnV0ZSgiY2RzLXRoZW1lIiwibGlnaHQiKSx0aGlzLmFwcFNldHRpbmdzU2VydmljZS5zZXRBcHBTZXR0aW5ncyh7c2Vs''@;'; put 'put ''ZWN0ZWRUaGVtZTphP3pfLmRhcms6el8ubGlnaHR9KX1zaG93RGVtb0xpbWl0TW9kYWwoYSl7dGhpcy5vbkRlbW9MaW1pdE1vZGFsU2hvdy5lbWl0KGEpfXNob3dJbmZvTW9kYWwoYT0iSW5mbyIsZCl7dGhpcy5vblNob3dBYm9ydE1vZGFsLmVtaXQoe21vZGFsVGl0bGU6YSxtZXNzYWdlOmQs''@;'; put 'put ''c2FzU2VydmljZToiIixkZXRhaWxzOm51bGx9KX1zaG93QWJvcnRNb2RhbChhLGQsaCxmPXZvaWQgMCl7aHx8KGg9bnVsbCk7bGV0IHY9e3Nhc1NlcnZpY2U6YSxtZXNzYWdlOmQsZGV0YWlsczpofTtmJiYodi5tb2RhbFRpdGxlPWYpLHRoaXMub25TaG93QWJvcnRNb2RhbC5lbWl0KHYpfW9w''@;'; put 'put ''ZW5SZXF1ZXN0c01vZGFsKCl7dGhpcy5vblJlcXVlc3RzTW9kYWxPcGVuLmVtaXQoITApfWNhdGNoUmVzcG9uc2VFcnJvcihhLGQpe2xldCBoPSJTQVMgU2VydmljZSBlcnJvciBvY3VycmVkIjtpZihkLmVycm9yKXtsZXQgZjtoPWQuZXJyb3IubWVzc2FnZSxkLmVycm9yLmRldGFpbHMmJmQu''@;'; put 'put ''ZXJyb3IuZGV0YWlscy5sb2cmJihmPWQuZXJyb3IuZGV0YWlscy5sb2cpLCghaHx8aC50cmltKCkubGVuZ3RoPDEpJiYoaD0iU0FTIFNlcnZpY2UgZXJyb3Igb2N1cnJlZCIpLHRoaXMuc2hvd0Fib3J0TW9kYWwoYSxoLHtMT0c6Zn0sIlJlcXVlc3QgZXJyb3IiKX1lbHNlIHRoaXMuc2hvd0Fi''@;'; put 'put ''b3J0TW9kYWwoYSxoKX10b2dnbGVTaWRlYmFyKCl7dGhpcy5vblNpZGViYXJUb2dnbGUuZW1pdCgpfWNsb3NlU2lkZWJhcigpe3dpbmRvdy5pbm5lcldpZHRoPHRoaXMuc2lkZWJhckNsb3NlTGltaXQmJnRoaXMub25TaWRlYmFyVG9nZ2xlLmVtaXQoe29wZW46ITF9KX1vcGVuU2lkZWJhcigp''@;'; put 'put ''e3RoaXMub25TaWRlYmFyVG9nZ2xlLmVtaXQoe29wZW46ITB9KX1zdGFydHVwRGF0YUxvYWRlZCgpe3RoaXMub25TdGFydHVwRGF0YUxvYWRlZC5lbWl0KCl9ZGlzcGF0Y2hFdmVudChhKXtsZXQgZDsiZnVuY3Rpb24iPT10eXBlb2YgRXZlbnQ/ZD1uZXcgRXZlbnQoYSk6KGQ9ZG9jdW1lbnQu''@;'; put 'put ''Y3JlYXRlRXZlbnQoIkV2ZW50IiksZC5pbml0RXZlbnQoYSwhMCwhMCkpLHdpbmRvdy5kaXNwYXRjaEV2ZW50KGQpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEhyKGNGKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFj''@;'; put 'put ''dG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y2xhc3MgdUZ7fWNsYXNzIGRGe31jbGFzcyBOM3toZWFkZXJzO25vcm1hbGl6ZWROYW1lcz1uZXcgTWFwO2xhenlJbml0O2xhenlVcGRhdGU9bnVsbDtjb25zdHJ1Y3RvcihsKXtsPyJzdHJpbmciPT10''@;'; put 'put ''eXBlb2YgbD90aGlzLmxhenlJbml0PSgpPT57dGhpcy5oZWFkZXJzPW5ldyBNYXAsbC5zcGxpdCgiXG4iKS5mb3JFYWNoKGE9Pntjb25zdCBkPWEuaW5kZXhPZigiOiIpO2lmKGQ+MCl7Y29uc3QgaD1hLnNsaWNlKDAsZCksZj1hLnNsaWNlKGQrMSkudHJpbSgpO3RoaXMuYWRkSGVhZGVyRW50''@;'; put 'put ''cnkoaCxmKX19KX06dHlwZW9mIEhlYWRlcnM8InUiJiZsIGluc3RhbmNlb2YgSGVhZGVycz8odGhpcy5oZWFkZXJzPW5ldyBNYXAsbC5mb3JFYWNoKChhLGQpPT57dGhpcy5hZGRIZWFkZXJFbnRyeShkLGEpfSkpOnRoaXMubGF6eUluaXQ9KCk9Pnt0aGlzLmhlYWRlcnM9bmV3IE1hcCxPYmpl''@;'; put 'put ''Y3QuZW50cmllcyhsKS5mb3JFYWNoKChbYSxkXSk9Pnt0aGlzLnNldEhlYWRlckVudHJpZXMoYSxkKX0pfTp0aGlzLmhlYWRlcnM9bmV3IE1hcH1oYXMobCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMuaGVhZGVycy5oYXMobC50b0xvd2VyQ2FzZSgpKX1nZXQobCl7dGhpcy5pbml0KCk7Y29u''@;'; put 'put ''c3QgYT10aGlzLmhlYWRlcnMuZ2V0KGwudG9Mb3dlckNhc2UoKSk7cmV0dXJuIGEmJmEubGVuZ3RoPjA/YVswXTpudWxsfWtleXMoKXtyZXR1cm4gdGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm5vcm1hbGl6ZWROYW1lcy52YWx1ZXMoKSl9Z2V0QWxsKGwpe3JldHVybiB0aGlzLmluaXQo''@;'; put 'put ''KSx0aGlzLmhlYWRlcnMuZ2V0KGwudG9Mb3dlckNhc2UoKSl8fG51bGx9YXBwZW5kKGwsYSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6bCx2YWx1ZTphLG9wOiJhIn0pfXNldChsLGEpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOmwsdmFsdWU6YSxvcDoicyJ9KX1kZWxldGUobCxhKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5jbG9uZSh7bmFtZTpsLHZhbHVlOmEsb3A6ImQifSl9bWF5YmVTZXROb3JtYWxpemVkTmFtZShsLGEpe3RoaXMubm9ybWFsaXplZE5hbWVzLmhhcyhhKXx8dGhpcy5ub3JtYWxpemVkTmFtZXMuc2V0KGEsbCl9aW5pdCgpe3RoaXMubGF6eUluaXQmJih0aGlzLmxhenlJbml0IGlu''@;'; put 'put ''c3RhbmNlb2YgTjM/dGhpcy5jb3B5RnJvbSh0aGlzLmxhenlJbml0KTp0aGlzLmxhenlJbml0KCksdGhpcy5sYXp5SW5pdD1udWxsLHRoaXMubGF6eVVwZGF0ZSYmKHRoaXMubGF6eVVwZGF0ZS5mb3JFYWNoKGw9PnRoaXMuYXBwbHlVcGRhdGUobCkpLHRoaXMubGF6eVVwZGF0ZT1udWxsKSl9''@;'; put 'put ''Y29weUZyb20obCl7bC5pbml0KCksQXJyYXkuZnJvbShsLmhlYWRlcnMua2V5cygpKS5mb3JFYWNoKGE9Pnt0aGlzLmhlYWRlcnMuc2V0KGEsbC5oZWFkZXJzLmdldChhKSksdGhpcy5ub3JtYWxpemVkTmFtZXMuc2V0KGEsbC5ub3JtYWxpemVkTmFtZXMuZ2V0KGEpKX0pfWNsb25lKGwpe2Nv''@;'; put 'put ''bnN0IGE9bmV3IE4zO3JldHVybiBhLmxhenlJbml0PXRoaXMubGF6eUluaXQmJnRoaXMubGF6eUluaXQgaW5zdGFuY2VvZiBOMz90aGlzLmxhenlJbml0OnRoaXMsYS5sYXp5VXBkYXRlPSh0aGlzLmxhenlVcGRhdGV8fFtdKS5jb25jYXQoW2xdKSxhfWFwcGx5VXBkYXRlKGwpe2NvbnN0IGE9''@;'; put 'put ''bC5uYW1lLnRvTG93ZXJDYXNlKCk7c3dpdGNoKGwub3Ape2Nhc2UiYSI6Y2FzZSJzIjpsZXQgZD1sLnZhbHVlO2lmKCJzdHJpbmciPT10eXBlb2YgZCYmKGQ9W2RdKSwwPT09ZC5sZW5ndGgpcmV0dXJuO3RoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZShsLm5hbWUsYSk7Y29uc3QgaD0oImEi''@;'; put 'put ''PT09bC5vcD90aGlzLmhlYWRlcnMuZ2V0KGEpOnZvaWQgMCl8fFtdO2gucHVzaCguLi5kKSx0aGlzLmhlYWRlcnMuc2V0KGEsaCk7YnJlYWs7Y2FzZSJkIjpjb25zdCBmPWwudmFsdWU7aWYoZil7bGV0IHY9dGhpcy5oZWFkZXJzLmdldChhKTtpZighdilyZXR1cm47dj12LmZpbHRlcihNPT4t''@;'; put 'put ''MT09PWYuaW5kZXhPZihNKSksMD09PXYubGVuZ3RoPyh0aGlzLmhlYWRlcnMuZGVsZXRlKGEpLHRoaXMubm9ybWFsaXplZE5hbWVzLmRlbGV0ZShhKSk6dGhpcy5oZWFkZXJzLnNldChhLHYpfWVsc2UgdGhpcy5oZWFkZXJzLmRlbGV0ZShhKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5kZWxldGUo''@;'; put 'put ''YSl9fWFkZEhlYWRlckVudHJ5KGwsYSl7Y29uc3QgZD1sLnRvTG93ZXJDYXNlKCk7dGhpcy5tYXliZVNldE5vcm1hbGl6ZWROYW1lKGwsZCksdGhpcy5oZWFkZXJzLmhhcyhkKT90aGlzLmhlYWRlcnMuZ2V0KGQpLnB1c2goYSk6dGhpcy5oZWFkZXJzLnNldChkLFthXSl9c2V0SGVhZGVyRW50''@;'; put 'put ''cmllcyhsLGEpe2NvbnN0IGQ9KEFycmF5LmlzQXJyYXkoYSk/YTpbYV0pLm1hcChmPT5mLnRvU3RyaW5nKCkpLGg9bC50b0xvd2VyQ2FzZSgpO3RoaXMuaGVhZGVycy5zZXQoaCxkKSx0aGlzLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUobCxoKX1mb3JFYWNoKGwpe3RoaXMuaW5pdCgpLEFycmF5''@;'; put 'put ''LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMua2V5cygpKS5mb3JFYWNoKGE9PmwodGhpcy5ub3JtYWxpemVkTmFtZXMuZ2V0KGEpLHRoaXMuaGVhZGVycy5nZXQoYSkpKX19Y2xhc3Mga0xle2VuY29kZUtleShsKXtyZXR1cm4gVGRlKGwpfWVuY29kZVZhbHVlKGwpe3JldHVybiBUZGUobCl9''@;'; put 'put ''ZGVjb2RlS2V5KGwpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQobCl9ZGVjb2RlVmFsdWUobCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChsKX19Y29uc3QgSUxlPS8lKFxkW2EtZjAtOV0pL2dpLFJMZT17NDA6IkAiLCIzQSI6IjoiLDI0OiIkIiwiMkMiOiIsIiwiM0IiOiI7IiwiM0Qi''@;'; put 'put ''OiI9IiwiM0YiOiI/IiwiMkYiOiIvIn07ZnVuY3Rpb24gVGRlKGMpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoYykucmVwbGFjZShJTGUsKGwsYSk9PlJMZVthXT8/bCl9ZnVuY3Rpb24gaEYoYyl7cmV0dXJuYCR7Y31gfWNsYXNzIG42e21hcDtlbmNvZGVyO3VwZGF0ZXM9bnVsbDtjbG9u''@;'; put 'put ''ZUZyb209bnVsbDtjb25zdHJ1Y3RvcihsPXt9KXtpZih0aGlzLmVuY29kZXI9bC5lbmNvZGVyfHxuZXcga0xlLGwuZnJvbVN0cmluZyl7aWYobC5mcm9tT2JqZWN0KXRocm93IG5ldyBQcigyODA1LCExKTt0aGlzLm1hcD1mdW5jdGlvbiBETGUoYyxsKXtjb25zdCBhPW5ldyBNYXA7cmV0dXJu''@;'; put 'put ''IGMubGVuZ3RoPjAmJmMucmVwbGFjZSgvXlw/LywiIikuc3BsaXQoIiYiKS5mb3JFYWNoKGg9Pntjb25zdCBmPWguaW5kZXhPZigiPSIpLFt2LE1dPS0xPT1mP1tsLmRlY29kZUtleShoKSwiIl06W2wuZGVjb2RlS2V5KGguc2xpY2UoMCxmKSksbC5kZWNvZGVWYWx1ZShoLnNsaWNlKGYrMSkp''@;'; put 'put ''XSxEPWEuZ2V0KHYpfHxbXTtELnB1c2goTSksYS5zZXQodixEKX0pLGF9KGwuZnJvbVN0cmluZyx0aGlzLmVuY29kZXIpfWVsc2UgbC5mcm9tT2JqZWN0Pyh0aGlzLm1hcD1uZXcgTWFwLE9iamVjdC5rZXlzKGwuZnJvbU9iamVjdCkuZm9yRWFjaChhPT57Y29uc3QgZD1sLmZyb21PYmplY3Rb''@;'; put 'put ''YV0saD1BcnJheS5pc0FycmF5KGQpP2QubWFwKGhGKTpbaEYoZCldO3RoaXMubWFwLnNldChhLGgpfSkpOnRoaXMubWFwPW51bGx9aGFzKGwpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLm1hcC5oYXMobCl9Z2V0KGwpe3RoaXMuaW5pdCgpO2NvbnN0IGE9dGhpcy5tYXAuZ2V0KGwpO3JldHVy''@;'; put 'put ''biBhP2FbMF06bnVsbH1nZXRBbGwobCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMubWFwLmdldChsKXx8bnVsbH1rZXlzKCl7cmV0dXJuIHRoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5tYXAua2V5cygpKX1hcHBlbmQobCxhKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06bCx2YWx1ZTph''@;'; put 'put ''LG9wOiJhIn0pfWFwcGVuZEFsbChsKXtjb25zdCBhPVtdO3JldHVybiBPYmplY3Qua2V5cyhsKS5mb3JFYWNoKGQ9Pntjb25zdCBoPWxbZF07QXJyYXkuaXNBcnJheShoKT9oLmZvckVhY2goZj0+e2EucHVzaCh7cGFyYW06ZCx2YWx1ZTpmLG9wOiJhIn0pfSk6YS5wdXNoKHtwYXJhbTpkLHZh''@;'; put 'put ''bHVlOmgsb3A6ImEifSl9KSx0aGlzLmNsb25lKGEpfXNldChsLGEpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTpsLHZhbHVlOmEsb3A6InMifSl9ZGVsZXRlKGwsYSl7cmV0dXJuIHRoaXMuY2xvbmUoe3BhcmFtOmwsdmFsdWU6YSxvcDoiZCJ9KX10b1N0cmluZygpe3JldHVybiB0aGlzLmlu''@;'; put 'put ''aXQoKSx0aGlzLmtleXMoKS5tYXAobD0+e2NvbnN0IGE9dGhpcy5lbmNvZGVyLmVuY29kZUtleShsKTtyZXR1cm4gdGhpcy5tYXAuZ2V0KGwpLm1hcChkPT5hKyI9Iit0aGlzLmVuY29kZXIuZW5jb2RlVmFsdWUoZCkpLmpvaW4oIiYiKX0pLmZpbHRlcihsPT4iIiE9PWwpLmpvaW4oIiYiKX1j''@;'; put 'put ''bG9uZShsKXtjb25zdCBhPW5ldyBuNih7ZW5jb2Rlcjp0aGlzLmVuY29kZXJ9KTtyZXR1cm4gYS5jbG9uZUZyb209dGhpcy5jbG9uZUZyb218fHRoaXMsYS51cGRhdGVzPSh0aGlzLnVwZGF0ZXN8fFtdKS5jb25jYXQobCksYX1pbml0KCl7bnVsbD09PXRoaXMubWFwJiYodGhpcy5tYXA9bmV3''@;'; put 'put ''IE1hcCksbnVsbCE9PXRoaXMuY2xvbmVGcm9tJiYodGhpcy5jbG9uZUZyb20uaW5pdCgpLHRoaXMuY2xvbmVGcm9tLmtleXMoKS5mb3JFYWNoKGw9PnRoaXMubWFwLnNldChsLHRoaXMuY2xvbmVGcm9tLm1hcC5nZXQobCkpKSx0aGlzLnVwZGF0ZXMuZm9yRWFjaChsPT57c3dpdGNoKGwub3Ap''@;'; put 'put ''e2Nhc2UiYSI6Y2FzZSJzIjpjb25zdCBhPSgiYSI9PT1sLm9wP3RoaXMubWFwLmdldChsLnBhcmFtKTp2b2lkIDApfHxbXTthLnB1c2goaEYobC52YWx1ZSkpLHRoaXMubWFwLnNldChsLnBhcmFtLGEpO2JyZWFrO2Nhc2UiZCI6aWYodm9pZCAwPT09bC52YWx1ZSl7dGhpcy5tYXAuZGVsZXRl''@;'; put 'put ''KGwucGFyYW0pO2JyZWFrfXtsZXQgZD10aGlzLm1hcC5nZXQobC5wYXJhbSl8fFtdO2NvbnN0IGg9ZC5pbmRleE9mKGhGKGwudmFsdWUpKTstMSE9PWgmJmQuc3BsaWNlKGgsMSksZC5sZW5ndGg+MD90aGlzLm1hcC5zZXQobC5wYXJhbSxkKTp0aGlzLm1hcC5kZWxldGUobC5wYXJhbSl9fX0p''@;'; put 'put ''LHRoaXMuY2xvbmVGcm9tPXRoaXMudXBkYXRlcz1udWxsKX19Y2xhc3MgTExle21hcD1uZXcgTWFwO3NldChsLGEpe3JldHVybiB0aGlzLm1hcC5zZXQobCxhKSx0aGlzfWdldChsKXtyZXR1cm4gdGhpcy5tYXAuaGFzKGwpfHx0aGlzLm1hcC5zZXQobCxsLmRlZmF1bHRWYWx1ZSgpKSx0aGlz''@;'; put 'put ''Lm1hcC5nZXQobCl9ZGVsZXRlKGwpe3JldHVybiB0aGlzLm1hcC5kZWxldGUobCksdGhpc31oYXMobCl7cmV0dXJuIHRoaXMubWFwLmhhcyhsKX1rZXlzKCl7cmV0dXJuIHRoaXMubWFwLmtleXMoKX19ZnVuY3Rpb24gQWRlKGMpe3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZjIGlu''@;'; put 'put ''c3RhbmNlb2YgQXJyYXlCdWZmZXJ9ZnVuY3Rpb24ga2RlKGMpe3JldHVybiB0eXBlb2YgQmxvYjwidSImJmMgaW5zdGFuY2VvZiBCbG9ifWZ1bmN0aW9uIERkZShjKXtyZXR1cm4gdHlwZW9mIEZvcm1EYXRhPCJ1IiYmYyBpbnN0YW5jZW9mIEZvcm1EYXRhfWNvbnN0IHBUPSJDb250ZW50LVR5''@;'; put 'put ''cGUiLE4kPSJYLVJlcXVlc3QtVVJMIixJZGU9InRleHQvcGxhaW4iLFJkZT0iYXBwbGljYXRpb24vanNvbiIsTGRlPWAke1JkZX0sICR7SWRlfSwgKi8qYDtjbGFzcyBnVHt1cmw7Ym9keT1udWxsO2hlYWRlcnM7Y29udGV4dDtyZXBvcnRQcm9ncmVzcz0hMTt3aXRoQ3JlZGVudGlhbHM9ITE7''@;'; put 'put ''cmVzcG9uc2VUeXBlPSJqc29uIjttZXRob2Q7cGFyYW1zO3VybFdpdGhQYXJhbXM7dHJhbnNmZXJDYWNoZTtjb25zdHJ1Y3RvcihsLGEsZCxoKXtsZXQgZjtpZih0aGlzLnVybD1hLHRoaXMubWV0aG9kPWwudG9VcHBlckNhc2UoKSxmdW5jdGlvbiBPTGUoYyl7c3dpdGNoKGMpe2Nhc2UiREVM''@;'; put 'put ''RVRFIjpjYXNlIkdFVCI6Y2FzZSJIRUFEIjpjYXNlIk9QVElPTlMiOmNhc2UiSlNPTlAiOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fSh0aGlzLm1ldGhvZCl8fGg/KHRoaXMuYm9keT12b2lkIDAhPT1kP2Q6bnVsbCxmPWgpOmY9ZCxmJiYodGhpcy5yZXBvcnRQcm9ncmVzcz0hIWYucmVw''@;'; put 'put ''b3J0UHJvZ3Jlc3MsdGhpcy53aXRoQ3JlZGVudGlhbHM9ISFmLndpdGhDcmVkZW50aWFscyxmLnJlc3BvbnNlVHlwZSYmKHRoaXMucmVzcG9uc2VUeXBlPWYucmVzcG9uc2VUeXBlKSxmLmhlYWRlcnMmJih0aGlzLmhlYWRlcnM9Zi5oZWFkZXJzKSxmLmNvbnRleHQmJih0aGlzLmNvbnRleHQ9''@;'; put 'put ''Zi5jb250ZXh0KSxmLnBhcmFtcyYmKHRoaXMucGFyYW1zPWYucGFyYW1zKSx0aGlzLnRyYW5zZmVyQ2FjaGU9Zi50cmFuc2ZlckNhY2hlKSx0aGlzLmhlYWRlcnM/Pz1uZXcgTjMsdGhpcy5jb250ZXh0Pz89bmV3IExMZSx0aGlzLnBhcmFtcyl7Y29uc3Qgdj10aGlzLnBhcmFtcy50b1N0cmlu''@;'; put 'put ''ZygpO2lmKDA9PT12Lmxlbmd0aCl0aGlzLnVybFdpdGhQYXJhbXM9YTtlbHNle2NvbnN0IE09YS5pbmRleE9mKCI/Iik7dGhpcy51cmxXaXRoUGFyYW1zPWErKC0xPT09TT8iPyI6TTxhLmxlbmd0aC0xPyImIjoiIikrdn19ZWxzZSB0aGlzLnBhcmFtcz1uZXcgbjYsdGhpcy51cmxXaXRoUGFy''@;'; put 'put ''YW1zPWF9c2VyaWFsaXplQm9keSgpe3JldHVybiBudWxsPT09dGhpcy5ib2R5P251bGw6InN0cmluZyI9PXR5cGVvZiB0aGlzLmJvZHl8fEFkZSh0aGlzLmJvZHkpfHxrZGUodGhpcy5ib2R5KXx8RGRlKHRoaXMuYm9keSl8fGZ1bmN0aW9uIFBMZShjKXtyZXR1cm4gdHlwZW9mIFVSTFNlYXJj''@;'; put 'put ''aFBhcmFtczwidSImJmMgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXN9KHRoaXMuYm9keSk/dGhpcy5ib2R5OnRoaXMuYm9keSBpbnN0YW5jZW9mIG42P3RoaXMuYm9keS50b1N0cmluZygpOiJvYmplY3QiPT10eXBlb2YgdGhpcy5ib2R5fHwiYm9vbGVhbiI9PXR5cGVvZiB0aGlzLmJvZHl8''@;'; put 'put ''fEFycmF5LmlzQXJyYXkodGhpcy5ib2R5KT9KU09OLnN0cmluZ2lmeSh0aGlzLmJvZHkpOnRoaXMuYm9keS50b1N0cmluZygpfWRldGVjdENvbnRlbnRUeXBlSGVhZGVyKCl7cmV0dXJuIG51bGw9PT10aGlzLmJvZHl8fERkZSh0aGlzLmJvZHkpP251bGw6a2RlKHRoaXMuYm9keSk/dGhpcy5i''@;'; put 'put ''b2R5LnR5cGV8fG51bGw6QWRlKHRoaXMuYm9keSk/bnVsbDoic3RyaW5nIj09dHlwZW9mIHRoaXMuYm9keT9JZGU6dGhpcy5ib2R5IGluc3RhbmNlb2YgbjY/ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04Ijoib2JqZWN0Ij09dHlwZW9mIHRoaXMuYm9k''@;'; put 'put ''eXx8Im51bWJlciI9PXR5cGVvZiB0aGlzLmJvZHl8fCJib29sZWFuIj09dHlwZW9mIHRoaXMuYm9keT9SZGU6bnVsbH1jbG9uZShsPXt9KXtjb25zdCBhPWwubWV0aG9kfHx0aGlzLm1ldGhvZCxkPWwudXJsfHx0aGlzLnVybCxoPWwucmVzcG9uc2VUeXBlfHx0aGlzLnJlc3BvbnNlVHlwZSxm''@;'; put 'put ''PWwudHJhbnNmZXJDYWNoZT8/dGhpcy50cmFuc2ZlckNhY2hlLHY9dm9pZCAwIT09bC5ib2R5P2wuYm9keTp0aGlzLmJvZHksTT1sLndpdGhDcmVkZW50aWFscz8/dGhpcy53aXRoQ3JlZGVudGlhbHMsRD1sLnJlcG9ydFByb2dyZXNzPz90aGlzLnJlcG9ydFByb2dyZXNzO2xldCBVPWwuaGVh''@;'; put 'put ''ZGVyc3x8dGhpcy5oZWFkZXJzLHRlPWwucGFyYW1zfHx0aGlzLnBhcmFtcztjb25zdCBvZT1sLmNvbnRleHQ/P3RoaXMuY29udGV4dDtyZXR1cm4gdm9pZCAwIT09bC5zZXRIZWFkZXJzJiYoVT1PYmplY3Qua2V5cyhsLnNldEhlYWRlcnMpLnJlZHVjZSgodmUsd2UpPT52ZS5zZXQod2UsbC5z''@;'; put 'put ''ZXRIZWFkZXJzW3dlXSksVSkpLGwuc2V0UGFyYW1zJiYodGU9T2JqZWN0LmtleXMobC5zZXRQYXJhbXMpLnJlZHVjZSgodmUsd2UpPT52ZS5zZXQod2UsbC5zZXRQYXJhbXNbd2VdKSx0ZSkpLG5ldyBnVChhLGQsdix7cGFyYW1zOnRlLGhlYWRlcnM6VSxjb250ZXh0Om9lLHJlcG9ydFByb2dy''@;'; put 'put ''ZXNzOkQscmVzcG9uc2VUeXBlOmgsd2l0aENyZWRlbnRpYWxzOk0sdHJhbnNmZXJDYWNoZTpmfSl9fXZhciByNj1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlNlbnQ9MF09IlNlbnQiLGNbYy5VcGxvYWRQcm9ncmVzcz0xXT0iVXBsb2FkUHJvZ3Jlc3MiLGNbYy5SZXNwb25zZUhlYWRlcj0yXT0i''@;'; put 'put ''UmVzcG9uc2VIZWFkZXIiLGNbYy5Eb3dubG9hZFByb2dyZXNzPTNdPSJEb3dubG9hZFByb2dyZXNzIixjW2MuUmVzcG9uc2U9NF09IlJlc3BvbnNlIixjW2MuVXNlcj01XT0iVXNlciIsY30ocjZ8fHt9KTtjbGFzcyBWJHtoZWFkZXJzO3N0YXR1cztzdGF0dXNUZXh0O3VybDtvazt0eXBlO2Nv''@;'; put 'put ''bnN0cnVjdG9yKGwsYT0yMDAsZD0iT0siKXt0aGlzLmhlYWRlcnM9bC5oZWFkZXJzfHxuZXcgTjMsdGhpcy5zdGF0dXM9dm9pZCAwIT09bC5zdGF0dXM/bC5zdGF0dXM6YSx0aGlzLnN0YXR1c1RleHQ9bC5zdGF0dXNUZXh0fHxkLHRoaXMudXJsPWwudXJsfHxudWxsLHRoaXMub2s9dGhpcy5z''@;'; put 'put ''dGF0dXM+PTIwMCYmdGhpcy5zdGF0dXM8MzAwfX1jbGFzcyBwRiBleHRlbmRzIFYke2NvbnN0cnVjdG9yKGw9e30pe3N1cGVyKGwpfXR5cGU9cjYuUmVzcG9uc2VIZWFkZXI7Y2xvbmUobD17fSl7cmV0dXJuIG5ldyBwRih7aGVhZGVyczpsLmhlYWRlcnN8fHRoaXMuaGVhZGVycyxzdGF0dXM6''@;'; put 'put ''dm9pZCAwIT09bC5zdGF0dXM/bC5zdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDpsLnN0YXR1c1RleHR8fHRoaXMuc3RhdHVzVGV4dCx1cmw6bC51cmx8fHRoaXMudXJsfHx2b2lkIDB9KX19Y2xhc3MgbVQgZXh0ZW5kcyBWJHtib2R5O2NvbnN0cnVjdG9yKGw9e30pe3N1cGVyKGwpLHRo''@;'; put 'put ''aXMuYm9keT12b2lkIDAhPT1sLmJvZHk/bC5ib2R5Om51bGx9dHlwZT1yNi5SZXNwb25zZTtjbG9uZShsPXt9KXtyZXR1cm4gbmV3IG1UKHtib2R5OnZvaWQgMCE9PWwuYm9keT9sLmJvZHk6dGhpcy5ib2R5LGhlYWRlcnM6bC5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsc3RhdHVzOnZvaWQgMCE9''@;'; put 'put ''PWwuc3RhdHVzP2wuc3RhdHVzOnRoaXMuc3RhdHVzLHN0YXR1c1RleHQ6bC5zdGF0dXNUZXh0fHx0aGlzLnN0YXR1c1RleHQsdXJsOmwudXJsfHx0aGlzLnVybHx8dm9pZCAwfSl9fWNsYXNzIFVfIGV4dGVuZHMgViR7bmFtZT0iSHR0cEVycm9yUmVzcG9uc2UiO21lc3NhZ2U7ZXJyb3I7b2s9''@;'; put 'put ''ITE7Y29uc3RydWN0b3IobCl7c3VwZXIobCwwLCJVbmtub3duIEVycm9yIiksdGhpcy5tZXNzYWdlPXRoaXMuc3RhdHVzPj0yMDAmJnRoaXMuc3RhdHVzPDMwMD9gSHR0cCBmYWlsdXJlIGR1cmluZyBwYXJzaW5nIGZvciAke2wudXJsfHwiKHVua25vd24gdXJsKSJ9YDpgSHR0cCBmYWlsdXJl''@;'; put 'put ''IHJlc3BvbnNlIGZvciAke2wudXJsfHwiKHVua25vd24gdXJsKSJ9OiAke2wuc3RhdHVzfSAke2wuc3RhdHVzVGV4dH1gLHRoaXMuZXJyb3I9bC5lcnJvcnx8bnVsbH19ZnVuY3Rpb24gQiQoYyxsKXtyZXR1cm57Ym9keTpsLGhlYWRlcnM6Yy5oZWFkZXJzLGNvbnRleHQ6Yy5jb250ZXh0LG9i''@;'; put 'put ''c2VydmU6Yy5vYnNlcnZlLHBhcmFtczpjLnBhcmFtcyxyZXBvcnRQcm9ncmVzczpjLnJlcG9ydFByb2dyZXNzLHJlc3BvbnNlVHlwZTpjLnJlc3BvbnNlVHlwZSx3aXRoQ3JlZGVudGlhbHM6Yy53aXRoQ3JlZGVudGlhbHMsdHJhbnNmZXJDYWNoZTpjLnRyYW5zZmVyQ2FjaGV9fWxldCBqJD0o''@;'; put 'put ''KCk9PntjbGFzcyBje2hhbmRsZXI7Y29uc3RydWN0b3IoYSl7dGhpcy5oYW5kbGVyPWF9cmVxdWVzdChhLGQsaD17fSl7bGV0IGY7aWYoYSBpbnN0YW5jZW9mIGdUKWY9YTtlbHNle2xldCBELFU7RD1oLmhlYWRlcnMgaW5zdGFuY2VvZiBOMz9oLmhlYWRlcnM6bmV3IE4zKGguaGVhZGVycyks''@;'; put 'put ''aC5wYXJhbXMmJihVPWgucGFyYW1zIGluc3RhbmNlb2YgbjY/aC5wYXJhbXM6bmV3IG42KHtmcm9tT2JqZWN0OmgucGFyYW1zfSkpLGY9bmV3IGdUKGEsZCx2b2lkIDAhPT1oLmJvZHk/aC5ib2R5Om51bGwse2hlYWRlcnM6RCxjb250ZXh0OmguY29udGV4dCxwYXJhbXM6VSxyZXBvcnRQcm9n''@;'; put 'put ''cmVzczpoLnJlcG9ydFByb2dyZXNzLHJlc3BvbnNlVHlwZTpoLnJlc3BvbnNlVHlwZXx8Impzb24iLHdpdGhDcmVkZW50aWFsczpoLndpdGhDcmVkZW50aWFscyx0cmFuc2ZlckNhY2hlOmgudHJhbnNmZXJDYWNoZX0pfWNvbnN0IHY9X28oZikucGlwZShQXyhEPT50aGlzLmhhbmRsZXIuaGFu''@;'; put 'put ''ZGxlKEQpKSk7aWYoYSBpbnN0YW5jZW9mIGdUfHwiZXZlbnRzIj09PWgub2JzZXJ2ZSlyZXR1cm4gdjtjb25zdCBNPXYucGlwZShvYyhEPT5EIGluc3RhbmNlb2YgbVQpKTtzd2l0Y2goaC5vYnNlcnZlfHwiYm9keSIpe2Nhc2UiYm9keSI6c3dpdGNoKGYucmVzcG9uc2VUeXBlKXtjYXNlImFy''@;'; put 'put ''cmF5YnVmZmVyIjpyZXR1cm4gTS5waXBlKFlhKEQ9PntpZihudWxsIT09RC5ib2R5JiYhKEQuYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSl0aHJvdyBuZXcgUHIoMjgwNiwhMSk7cmV0dXJuIEQuYm9keX0pKTtjYXNlImJsb2IiOnJldHVybiBNLnBpcGUoWWEoRD0+e2lmKG51bGwhPT1E''@;'; put 'put ''LmJvZHkmJiEoRC5ib2R5IGluc3RhbmNlb2YgQmxvYikpdGhyb3cgbmV3IFByKDI4MDcsITEpO3JldHVybiBELmJvZHl9KSk7Y2FzZSJ0ZXh0IjpyZXR1cm4gTS5waXBlKFlhKEQ9PntpZihudWxsIT09RC5ib2R5JiYic3RyaW5nIiE9dHlwZW9mIEQuYm9keSl0aHJvdyBuZXcgUHIoMjgwOCwh''@;'; put 'put ''MSk7cmV0dXJuIEQuYm9keX0pKTtkZWZhdWx0OnJldHVybiBNLnBpcGUoWWEoRD0+RC5ib2R5KSl9Y2FzZSJyZXNwb25zZSI6cmV0dXJuIE07ZGVmYXVsdDp0aHJvdyBuZXcgUHIoMjgwOSwhMSl9fWRlbGV0ZShhLGQ9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIkRFTEVURSIsYSxkKX1nZXQo''@;'; put 'put ''YSxkPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJHRVQiLGEsZCl9aGVhZChhLGQ9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIkhFQUQiLGEsZCl9anNvbnAoYSxkKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJKU09OUCIsYSx7cGFyYW1zOihuZXcgbjYpLmFwcGVuZChkLCJKU09OUF9DQUxMQkFD''@;'; put 'put ''SyIpLG9ic2VydmU6ImJvZHkiLHJlc3BvbnNlVHlwZToianNvbiJ9KX1vcHRpb25zKGEsZD17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiT1BUSU9OUyIsYSxkKX1wYXRjaChhLGQsaD17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiUEFUQ0giLGEsQiQoaCxkKSl9cG9zdChhLGQsaD17fSl7cmV0''@;'; put 'put ''dXJuIHRoaXMucmVxdWVzdCgiUE9TVCIsYSxCJChoLGQpKX1wdXQoYSxkLGg9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBVVCIsYSxCJChoLGQpKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoSHIodUYpKX07c3RhdGljIFx1MDI3NXByb3Y9ZnIoe3Rv''@;'; put 'put ''a2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfXJldHVybiBjfSkoKTtjb25zdCBGZGU9bmV3IGpuKCIiKTtmdW5jdGlvbiBIZGUoYyxsKXtyZXR1cm4gbChjKX1mdW5jdGlvbiBqTGUoYyxsKXtyZXR1cm4oYSxkKT0+bC5pbnRlcmNlcHQoYSx7aGFuZGxlOmg9PmMoaCxkKX0pfWNvbnN0IFVM''@;'; put 'put ''ZT1uZXcgam4oIiIpLHZUPW5ldyBqbigiIiksWkxlPW5ldyBqbigiIiksTmRlPW5ldyBqbigiIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+ITB9KTtmdW5jdGlvbiBXTGUoKXtsZXQgYz1udWxsO3JldHVybihsLGEpPT57bnVsbD09PWMmJihjPShKbihVTGUse29wdGlvbmFsOiEw''@;'; put 'put ''fSk/P1tdKS5yZWR1Y2VSaWdodChqTGUsSGRlKSk7Y29uc3QgZD1KbihsZik7aWYoSm4oTmRlKSl7Y29uc3QgZj1kLmFkZCgpO3JldHVybiBjKGwsYSkucGlwZShRRSgoKT0+ZC5yZW1vdmUoZikpKX1yZXR1cm4gYyhsLGEpfX1sZXQgVmRlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB1RntiYWNr''@;'; put 'put ''ZW5kO2luamVjdG9yO2NoYWluPW51bGw7cGVuZGluZ1Rhc2tzPUpuKGxmKTtjb250cmlidXRlVG9TdGFiaWxpdHk9Sm4oTmRlKTtjb25zdHJ1Y3RvcihhLGQpe3N1cGVyKCksdGhpcy5iYWNrZW5kPWEsdGhpcy5pbmplY3Rvcj1kfWhhbmRsZShhKXtpZihudWxsPT09dGhpcy5jaGFpbil7Y29u''@;'; put 'put ''c3QgZD1BcnJheS5mcm9tKG5ldyBTZXQoWy4uLnRoaXMuaW5qZWN0b3IuZ2V0KHZUKSwuLi50aGlzLmluamVjdG9yLmdldChaTGUsW10pXSkpO3RoaXMuY2hhaW49ZC5yZWR1Y2VSaWdodCgoaCxmKT0+ZnVuY3Rpb24gekxlKGMsbCxhKXtyZXR1cm4oZCxoKT0+QzEoYSwoKT0+bChkLGY9PmMo''@;'; put 'put ''ZixoKSkpfShoLGYsdGhpcy5pbmplY3RvciksSGRlKX1pZih0aGlzLmNvbnRyaWJ1dGVUb1N0YWJpbGl0eSl7Y29uc3QgZD10aGlzLnBlbmRpbmdUYXNrcy5hZGQoKTtyZXR1cm4gdGhpcy5jaGFpbihhLGg9PnRoaXMuYmFja2VuZC5oYW5kbGUoaCkpLnBpcGUoUUUoKCk9PnRoaXMucGVuZGlu''@;'; put 'put ''Z1Rhc2tzLnJlbW92ZShkKSkpfXJldHVybiB0aGlzLmNoYWluKGEsZD0+dGhpcy5iYWNrZW5kLmhhbmRsZShkKSl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEhyKGRGKSxIcihxbCkpfTtzdGF0aWMgXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5''@;'; put 'put ''OmMuXHUwMjc1ZmFjfSl9cmV0dXJuIGN9KSgpO2NvbnN0IEtMZT0vXlwpXF1cfScsP1xuLyxYTGU9UmVnRXhwKGBeJHtOJH06YCwibSIpO2xldCBqZGU9KCgpPT57Y2xhc3MgY3t4aHJGYWN0b3J5O2NvbnN0cnVjdG9yKGEpe3RoaXMueGhyRmFjdG9yeT1hfWhhbmRsZShhKXtpZigiSlNPTlAi''@;'; put 'put ''PT09YS5tZXRob2QpdGhyb3cgbmV3IFByKC0yODAwLCExKTtjb25zdCBkPXRoaXMueGhyRmFjdG9yeTtyZXR1cm4oZC5cdTAyNzVsb2FkSW1wbD9lMChkLlx1MDI3NWxvYWRJbXBsKCkpOl9vKG51bGwpKS5waXBlKGJkKCgpPT5uZXcgUmkoZj0+e2NvbnN0IHY9ZC5idWlsZCgpO2lmKHYub3Bl''@;'; put 'put ''bihhLm1ldGhvZCxhLnVybFdpdGhQYXJhbXMpLGEud2l0aENyZWRlbnRpYWxzJiYodi53aXRoQ3JlZGVudGlhbHM9ITApLGEuaGVhZGVycy5mb3JFYWNoKChXZSxudCk9PnYuc2V0UmVxdWVzdEhlYWRlcihXZSxudC5qb2luKCIsIikpKSxhLmhlYWRlcnMuaGFzKCJBY2NlcHQiKXx8di5zZXRS''@;'; put 'put ''ZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLExkZSksIWEuaGVhZGVycy5oYXMocFQpKXtjb25zdCBXZT1hLmRldGVjdENvbnRlbnRUeXBlSGVhZGVyKCk7bnVsbCE9PVdlJiZ2LnNldFJlcXVlc3RIZWFkZXIocFQsV2UpfWlmKGEucmVzcG9uc2VUeXBlKXtjb25zdCBXZT1hLnJlc3BvbnNlVHlwZS50''@;'; put 'put ''b0xvd2VyQ2FzZSgpO3YucmVzcG9uc2VUeXBlPSJqc29uIiE9PVdlP1dlOiJ0ZXh0In1jb25zdCBNPWEuc2VyaWFsaXplQm9keSgpO2xldCBEPW51bGw7Y29uc3QgVT0oKT0+e2lmKG51bGwhPT1EKXJldHVybiBEO2NvbnN0IFdlPXYuc3RhdHVzVGV4dHx8Ik9LIixudD1uZXcgTjModi5nZXRB''@;'; put 'put ''bGxSZXNwb25zZUhlYWRlcnMoKSksZHQ9ZnVuY3Rpb24gcUxlKGMpe3JldHVybiJyZXNwb25zZVVSTCJpbiBjJiZjLnJlc3BvbnNlVVJMP2MucmVzcG9uc2VVUkw6WExlLnRlc3QoYy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk/Yy5nZXRSZXNwb25zZUhlYWRlcihOJCk6bnVsbH0odil8fGEu''@;'; put 'put ''dXJsO3JldHVybiBEPW5ldyBwRih7aGVhZGVyczpudCxzdGF0dXM6di5zdGF0dXMsc3RhdHVzVGV4dDpXZSx1cmw6ZHR9KSxEfSx0ZT0oKT0+e2xldHtoZWFkZXJzOldlLHN0YXR1czpudCxzdGF0dXNUZXh0OmR0LHVybDptdH09VSgpLCR0PW51bGw7MjA0IT09bnQmJigkdD10eXBlb2Ygdi5y''@;'; put 'put ''ZXNwb25zZT4idSI/di5yZXNwb25zZVRleHQ6di5yZXNwb25zZSksMD09PW50JiYobnQ9JHQ/MjAwOjApO2xldCB6dD1udD49MjAwJiZudDwzMDA7aWYoImpzb24iPT09YS5yZXNwb25zZVR5cGUmJiJzdHJpbmciPT10eXBlb2YgJHQpe2NvbnN0IHluPSR0OyR0PSR0LnJlcGxhY2UoS0xlLCIi''@;'; put 'put ''KTt0cnl7JHQ9IiIhPT0kdD9KU09OLnBhcnNlKCR0KTpudWxsfWNhdGNoKGduKXskdD15bix6dCYmKHp0PSExLCR0PXtlcnJvcjpnbix0ZXh0OiR0fSl9fXp0PyhmLm5leHQobmV3IG1UKHtib2R5OiR0LGhlYWRlcnM6V2Usc3RhdHVzOm50LHN0YXR1c1RleHQ6ZHQsdXJsOm10fHx2b2lkIDB9''@;'; put 'put ''KSksZi5jb21wbGV0ZSgpKTpmLmVycm9yKG5ldyBVXyh7ZXJyb3I6JHQsaGVhZGVyczpXZSxzdGF0dXM6bnQsc3RhdHVzVGV4dDpkdCx1cmw6bXR8fHZvaWQgMH0pKX0sb2U9V2U9Pntjb25zdHt1cmw6bnR9PVUoKSxkdD1uZXcgVV8oe2Vycm9yOldlLHN0YXR1czp2LnN0YXR1c3x8MCxzdGF0''@;'; put 'put ''dXNUZXh0OnYuc3RhdHVzVGV4dHx8IlVua25vd24gRXJyb3IiLHVybDpudHx8dm9pZCAwfSk7Zi5lcnJvcihkdCl9O2xldCB2ZT0hMTtjb25zdCB3ZT1XZT0+e3ZlfHwoZi5uZXh0KFUoKSksdmU9ITApO2xldCBudD17dHlwZTpyNi5Eb3dubG9hZFByb2dyZXNzLGxvYWRlZDpXZS5sb2FkZWR9''@;'; put 'put ''O1dlLmxlbmd0aENvbXB1dGFibGUmJihudC50b3RhbD1XZS50b3RhbCksInRleHQiPT09YS5yZXNwb25zZVR5cGUmJnYucmVzcG9uc2VUZXh0JiYobnQucGFydGlhbFRleHQ9di5yZXNwb25zZVRleHQpLGYubmV4dChudCl9LEZlPVdlPT57bGV0IG50PXt0eXBlOnI2LlVwbG9hZFByb2dyZXNz''@;'; put 'put ''LGxvYWRlZDpXZS5sb2FkZWR9O1dlLmxlbmd0aENvbXB1dGFibGUmJihudC50b3RhbD1XZS50b3RhbCksZi5uZXh0KG50KX07cmV0dXJuIHYuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsdGUpLHYuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLG9lKSx2LmFkZEV2ZW50TGlzdGVuZXIoInRpbWVv''@;'; put 'put ''dXQiLG9lKSx2LmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixvZSksYS5yZXBvcnRQcm9ncmVzcyYmKHYuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHdlKSxudWxsIT09TSYmdi51cGxvYWQmJnYudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixGZSkpLHYuc2VuZChNKSxm''@;'; put 'put ''Lm5leHQoe3R5cGU6cjYuU2VudH0pLCgpPT57di5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsb2UpLHYucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLG9lKSx2LnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLHRlKSx2LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRpbWVvdXQiLG9lKSxh''@;'; put 'put ''LnJlcG9ydFByb2dyZXNzJiYodi5yZW1vdmVFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsd2UpLG51bGwhPT1NJiZ2LnVwbG9hZCYmdi51cGxvYWQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLEZlKSksdi5yZWFkeVN0YXRlIT09di5ET05FJiZ2LmFib3J0KCl9fSkpKX1zdGF0aWMg''@;'; put 'put ''XHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoSHIocHVlKSl9O3N0YXRpYyBcdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX1yZXR1cm4gY30pKCk7Y29uc3QgWiQ9bmV3IGpuKCIiKSx6ZGU9bmV3IGpuKCIiLHtwcm92aWRlZEluOiJyb290''@;'; put 'put ''IixmYWN0b3J5OigpPT4iWFNSRi1UT0tFTiJ9KSxVZGU9bmV3IGpuKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4iWC1YU1JGLVRPS0VOIn0pO2NsYXNzIFpkZXt9bGV0IGVPZT0oKCk9PntjbGFzcyBje2RvYztjb29raWVOYW1lO2xhc3RDb29raWVTdHJpbmc9IiI7bGFzdFRv''@;'; put 'put ''a2VuPW51bGw7cGFyc2VDb3VudD0wO2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5kb2M9YSx0aGlzLmNvb2tpZU5hbWU9ZH1nZXRUb2tlbigpe2NvbnN0IGE9dGhpcy5kb2MuY29va2llfHwiIjtyZXR1cm4gYSE9PXRoaXMubGFzdENvb2tpZVN0cmluZyYmKHRoaXMucGFyc2VDb3VudCsrLHRoaXMu''@;'; put 'put ''bGFzdFRva2VuPWR1ZShhLHRoaXMuY29va2llTmFtZSksdGhpcy5sYXN0Q29va2llU3RyaW5nPWEpLHRoaXMubGFzdFRva2VufXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShIcihHcyksSHIoemRlKSl9O3N0YXRpYyBcdTAyNzVwcm92PWZyKHt0b2tlbjpj''@;'; put 'put ''LGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX1yZXR1cm4gY30pKCk7Y29uc3QgdE9lPS9eKD86aHR0cHM/Oik/XC9cLy9pO2Z1bmN0aW9uIG5PZShjLGwpe2lmKCFKbihaJCl8fCJHRVQiPT09Yy5tZXRob2R8fCJIRUFEIj09PWMubWV0aG9kfHx0T2UudGVzdChjLnVybCkpcmV0dXJuIGwoYyk7Y29u''@;'; put 'put ''c3QgYT1KbihaZGUpLmdldFRva2VuKCksZD1KbihVZGUpO3JldHVybiBudWxsIT1hJiYhYy5oZWFkZXJzLmhhcyhkKSYmKGM9Yy5jbG9uZSh7aGVhZGVyczpjLmhlYWRlcnMuc2V0KGQsYSl9KSksbChjKX12YXIgaTY9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5JbnRlcmNlcHRvcnM9MF09Iklu''@;'; put 'put ''dGVyY2VwdG9ycyIsY1tjLkxlZ2FjeUludGVyY2VwdG9ycz0xXT0iTGVnYWN5SW50ZXJjZXB0b3JzIixjW2MuQ3VzdG9tWHNyZkNvbmZpZ3VyYXRpb249Ml09IkN1c3RvbVhzcmZDb25maWd1cmF0aW9uIixjW2MuTm9Yc3JmUHJvdGVjdGlvbj0zXT0iTm9Yc3JmUHJvdGVjdGlvbiIsY1tjLkpz''@;'; put 'put ''b25wU3VwcG9ydD00XT0iSnNvbnBTdXBwb3J0IixjW2MuUmVxdWVzdHNNYWRlVmlhUGFyZW50PTVdPSJSZXF1ZXN0c01hZGVWaWFQYXJlbnQiLGNbYy5GZXRjaD02XT0iRmV0Y2giLGN9KGk2fHx7fSk7ZnVuY3Rpb24gZDkoYyxsKXtyZXR1cm57XHUwMjc1a2luZDpjLFx1MDI3NXByb3ZpZGVy''@;'; put 'put ''czpsfX1mdW5jdGlvbiByT2UoLi4uYyl7Y29uc3QgbD1baiQsamRlLFZkZSx7cHJvdmlkZTp1Rix1c2VFeGlzdGluZzpWZGV9LHtwcm92aWRlOmRGLHVzZUZhY3Rvcnk6KCk9PkpuKEZkZSx7b3B0aW9uYWw6ITB9KT8/Sm4oamRlKX0se3Byb3ZpZGU6dlQsdXNlVmFsdWU6bk9lLG11bHRpOiEw''@;'; put 'put ''fSx7cHJvdmlkZTpaJCx1c2VWYWx1ZTohMH0se3Byb3ZpZGU6WmRlLHVzZUNsYXNzOmVPZX1dO2Zvcihjb25zdCBhIG9mIGMpbC5wdXNoKC4uLmEuXHUwMjc1cHJvdmlkZXJzKTtyZXR1cm4gJGQobCl9Y29uc3QgV2RlPW5ldyBqbigiIik7bGV0IFlkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVj''@;'; put 'put ''dG9yKGEsZCl7dGhpcy5odHRwPWEsdGhpcy5hcHBTdG9yZVNlcnZpY2U9ZCx0aGlzLnVybD0iIix0aGlzLmRyaXZlVXJsPSIiLHRoaXMuaHR0cE9wdGlvbnM9e3dpdGhDcmVkZW50aWFsczohMH19c2V0dXAoKXtjb25zdCBhPXRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRp''@;'; put 'put ''bmdzKCk7dGhpcy51cmw9YCR7YT8uc2VydmVyVXJsfHwiIn0vU0FTanNBcGlgLHRoaXMuZHJpdmVVcmw9YCR7dGhpcy51cmx9L2RyaXZlYH1nZXRTZXJ2ZXJJbmZvKCl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy51cmx9L2luZm9gKX1nZXRGaWxlRnJvbURyaXZlKGEpe3JldHVybiB0''@;'; put 'put ''aGlzLmh0dHAuZ2V0KGAke3RoaXMuZHJpdmVVcmx9L2ZpbGUvP19maWxlUGF0aD0ke2F9YCx0aGlzLmh0dHBPcHRpb25zKX1nZXRGb2xkZXJDb250ZW50c0Zyb21Ecml2ZShhKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmRyaXZlVXJsfS9mb2xkZXI/X2ZvbGRlclBhdGg9JHthfWAs''@;'; put 'put ''dGhpcy5odHRwT3B0aW9ucyl9Z2V0RmlsZVRyZWVGcm9tRHJpdmUoKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmRyaXZlVXJsfS9maWxldHJlZWAsdGhpcy5odHRwT3B0aW9ucyl9Z2V0RmlsZUZyb21GaWxlVHJlZShhKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9Pnt0aGlzLmdl''@;'; put 'put ''dEZpbGVUcmVlRnJvbURyaXZlKCkuc3Vic2NyaWJlKGY9Pntjb25zdCBNPXRoaXMuZmluZEluVHJlZShmLnRyZWUsYSk7ZChNKX0pfSl9ZmluZEluVHJlZShhLGQpe2lmKGEucmVsYXRpdmVQYXRoPT09ZClyZXR1cm4gYTtmb3IobGV0IGggb2YgYS5jaGlsZHJlbil7Y29uc3QgZj10aGlzLmZp''@;'; put 'put ''bmRJblRyZWUoaCxkKTtpZihmKXJldHVybiBmfX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShIcihqJCksSHIodTkpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJv''@;'; put 'put ''b3QifSl9fXJldHVybiBjfSkoKSxXJD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5odHRwPWEsdGhpcy5hcHBTdG9yZVNlcnZpY2U9ZCx0aGlzLnZpeWFBcGlzPXtBbmFseXRpY3NfSW5zaWdodHM6e2luc2lnaHRzOiIvaW5zaWdodHMifSxWaXN1YWxpc2F0aW9uOntyZXBv''@;'; put 'put ''cnRzOiIvcmVwb3J0cyIscmVwb3J0SW1hZ2VzOiIvcmVwb3J0SW1hZ2VzIixyZXBvcnRUcmFuc2Zvcm1zOiIvcmVwb3J0VHJhbnNmb3JtcyIsdmlzdWFsQW5hbHl0aWNzOiIvdmlzdWFsQW5hbHl0aWNzIn0sQ29tcHV0ZTp7am9iczoiL2pvYkRlZmluaXRpb25zIixqb2JFeGVjdXRpb246Ii9q''@;'; put 'put ''b2JFeGVjdXRpb24iLGNvbnRleHRzOiIvY29tcHV0ZS9jb250ZXh0cyJ9LERlY2lzaW9uX01hbmFnZW1lbnQ6e21vZGVsTWFuYWdlbWVudDoiL21vZGVsTWFuYWdlbWVudCIsbW9kZWxSZXBvc2l0b3J5OiIvbW9kZWxSZXBvc2l0b3J5Iixtb2RlbFB1Ymxpc2g6Ii9tb2RlbFB1Ymxpc2giLG1p''@;'; put 'put ''Y3JvYW5hbHl0aWNTY29yZToiL21pY3JvYW5hbHl0aWNTY29yZSIsZGF0YU1pbmluZzoiL2RhdGFNaW5pbmciLGJ1c2luZXNzUnVsZXM6Ii9idXNpbmVzc1J1bGVzIixyZWZlcmVuY2VEYXRhOiIvcmVmZXJlbmNlRGF0YSIsdHJlYXRtZW50RGVmaW5pdGlvbnM6Ii90cmVhdG1lbnREZWZpbml0''@;'; put 'put ''aW9ucyIsc3ViamVjdENvbnRhY3RzOiIvc3ViamVjdENvbnRhY3RzIixkZWNpc2lvbnNSdW50aW1lQnVpbGRlcjoiL2RlY2lzaW9uc1J1bnRpbWVCdWlsZGVyIn0sQ29yZV9TZXJ2aWNlczp7Zm9sZGVyczoiL2ZvbGRlcnMiLGZpbGVzOiIvZmlsZXMiLGFubm90YXRpb25zOiIvYW5ub3RhdGlv''@;'; put 'put ''bnMiLGF1dGhvcml6YXRpb246Ii9hdXRob3JpemF0aW9uIixyZWxhdGlvbnNoaXBzOiIvcmVsYXRpb25zaGlwcyIsU0FTTG9nb246Ii9TQVNMb2dvbiJ9LEF1dG9tYXRlZF9NYWNoaW5lX0xlYXJuaW5nOnttbFBpcGVsaW5lQXV0b21hdGlvbjoiL21sUGlwZWxpbmVBdXRvbWF0aW9uIn0sT3Ro''@;'; put 'put ''ZXI6e2lkZW50aXRpZXM6Ii9pZGVudGl0aWVzIn19LHRoaXMuc2VydmVyVXJsPSIifXNldHVwKCl7Y29uc3QgYT10aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpO3RoaXMuc2VydmVyVXJsPWE/LnNlcnZlclVybHx8IiJ9Z2V0QWxsQ29sbGVjdGlvbnMoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy52aXlhQXBpc31nZXRCeVVybChhKXtyZXR1cm4gdGhpcy5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHthfWAse3dpdGhDcmVkZW50aWFsczohMH0pfWdldEJ5Q29sbGVjdGlvbihhKXtyZXR1cm4gdGhpcy5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHthfWAse3dpdGhDcmVkZW50aWFs''@;'; put 'put ''czohMH0pfWdldENvbXB1dGVDb250ZXh0cygpe3JldHVybiB0aGlzLmdldChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0c2Ase3dpdGhDcmVkZW50aWFsczohMH0pfWdldENvbXB1dGVDb250ZXh0QnlJZChhKXtyZXR1cm4gdGhpcy5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2Nv''@;'; put 'put ''bXB1dGUvY29udGV4dHMvJHthfWAse3dpdGhDcmVkZW50aWFsczohMH0pfWdldEZvbGRlckJ5UGF0aChhKXtyZXR1cm4gdGhpcy5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2ZvbGRlcnMvZm9sZGVycy9AaXRlbT9wYXRoPSR7YX1gLHt3aXRoQ3JlZGVudGlhbHM6ITB9KX1nZXRGb2xkZXJNZW1i''@;'; put 'put ''ZXJzKGEpe3JldHVybiB0aGlzLmdldChgJHt0aGlzLnNlcnZlclVybH0vZm9sZGVycy9mb2xkZXJzLyR7YX0vbWVtYmVyc2Ase3dpdGhDcmVkZW50aWFsczohMH0pfWdldEFkbWluR3JvdXBzKGE9NWUzKXtyZXR1cm4gdGhpcy5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2lkZW50aXRpZXMvZ3Jv''@;'; put 'put ''dXBzP3NvcnRCeT1uYW1lJmxpbWl0PSR7YX1gLHt3aXRoQ3JlZGVudGlhbHM6ITB9KX1nZXRDdXJyZW50VXNlcigpe3JldHVybiB0aGlzLmdldChgJHt0aGlzLnNlcnZlclVybH0vaWRlbnRpdGllcy91c2Vycy9AY3VycmVudFVzZXJgLHt3aXRoQ3JlZGVudGlhbHM6ITB9KX1nZXQoYSxkKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5odHRwLmdldChhLGQpLnBpcGUoYTkoaD0+KGNvbnNvbGUubG9nKCJ1cmwiLGEpLGNvbnNvbGUubG9nKCJlcnIuc3RhdHVzIixoLnN0YXR1cyksNDQ5PT09aC5zdGF0dXN8fDQwMT09PWguc3RhdHVzP3RoaXMuaHR0cC5nZXQoYSxkKTpKRSgoKT0+aCkpKSl9c3RhdGlje3Ro''@;'; put 'put ''aXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoSHIoaiQpLEhyKHU5KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksS3M9KCgpPT57Y2xhc3MgY3tj''@;'; put 'put ''b25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxEKXt0aGlzLmFwcFN0b3JlU2VydmljZT1hLHRoaXMudXNlclNlcnZpY2U9ZCx0aGlzLmV2ZW50U2VydmljZT1oLHRoaXMuc2FzanNTZXJ2aWNlPWYsdGhpcy5zYXNWaXlhU2VydmljZT12LHRoaXMubG9nZ2VyU2VydmljZT1NLHRoaXMucm91dGVyPUQs''@;'; put 'put ''dGhpcy5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyPW5ldyBYcix0aGlzLmluY29ycmVjdFNpdGVJZEVtaXR0ZXI9bmV3IFhyLHRoaXMucmVxdWVzdFNpdGVJZEVtaXR0ZXI9bmV3IFhyLHRoaXMuc2FzanNBZGFwdGVyPW5ldyhFZGUoKSksdGhpcy5hcHBMb2NDaGVja1BlbmRpbmc9ITEsdGhp''@;'; put 'put ''cy5zaG91bGRMb2dpbj1uZXcgTWkoITEpLHRoaXMubGljZW5zZV9zaXRlX2lkPW5ldyBNaShudWxsKX1zYXNTZXJ2aWNlSW5pdCgpe2lmKHRoaXMuZGNBZGFwdGVyU2V0dGluZ3M9dGhpcy5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKSx0aGlzLnNhc2pzU2VydmljZS5z''@;'; put 'put ''ZXR1cCgpLHRoaXMuc2FzVml5YVNlcnZpY2Uuc2V0dXAoKSx0aGlzLmRjQWRhcHRlclNldHRpbmdzKXtzd2l0Y2godGhpcy5zYXNqc0FkYXB0ZXI9bmV3KEVkZSgpKSh0aGlzLmRjQWRhcHRlclNldHRpbmdzKSx0aGlzLmRjQWRhcHRlclNldHRpbmdzLnNlcnZlclR5cGUpe2Nhc2UgbDEuWS5T''@;'; put 'put ''YXNWaXlhOnRoaXMuY2hlY2tWaXlhRGVwbG95KHRoaXMuZGNBZGFwdGVyU2V0dGluZ3MuYXBwTG9jfHwiIik7YnJlYWs7Y2FzZSBsMS5ZLlNhczk6dGhpcy5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyLmVtaXQoKTticmVhaztjYXNlIGwxLlkuU2FzanM6dGhpcy5jaGVja1Nhc2pzRGVwbG95''@;'; put 'put ''KCl9IlJlZGlyZWN0ZWQiPT09dGhpcy5nZXRTYXNqc0NvbmZpZygpLmxvZ2luTWVjaGFuaXNtJiZ0aGlzLnNob3VsZExvZ2luLnN1YnNjcmliZShhPT57YSYmdGhpcy5zYXNqc0FkYXB0ZXIubG9nSW4oKS50aGVuKGQ9Pntjb25zb2xlLmxvZygicmVzIixkKX0pfSl9ZWxzZSB0aGlzLmV2ZW50''@;'; put 'put ''U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIkFkYXB0ZXIgc2V0dGluZ3MgKGluZGV4Lmh0bWwpIGFyZSBub3QgcHJlc2VudC4iKX1yZXF1ZXN0KGEsZCxoLGYpe3JldHVybiBmfHwoZj17fSksdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZ1JlcXVlc3REYXRhKGE9InNlcnZpY2VzLyIrYSxk''@;'; put 'put ''KSxuZXcgUHJvbWlzZSgodixNKT0+e3RoaXMuc2FzanNBZGFwdGVyLnJlcXVlc3QoYSxkLGgsKCk9Pnt0aGlzLnNob3VsZExvZ2luLm5leHQoITApfSkudGhlbihEPT57Y29uc3QgVT10aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNSZXF1ZXN0cygpLmZpbmQodGU9PnRlLnNlcnZpY2VMaW5rPT09''@;'; put 'put ''YSk7aWYoITE9PT1ELmxvZ2luJiYodGhpcy5zaG91bGRMb2dpbi5uZXh0KCEwKSxNKHthZGFwdGVyUmVzcG9uc2U6ITEsbG9nOlU/LmxvZ0ZpbGV9KSksIXRoaXMudXNlclNlcnZpY2UudXNlciYmRC5NRl9HRVRVU0VSJiYodGhpcy51c2VyU2VydmljZS51c2VyPXt1c2VybmFtZTpELk1GX0dF''@;'; put 'put ''VFVTRVJ9KSxELlNZU1NJVEUmJih0aGlzLnJlcXVlc3RTaXRlSWRFbWl0dGVyLmVtaXQoRC5TWVNTSVRFKSx0aGlzLmdldExpY2Vuc2VTaXRlSWQoKS5sZW5ndGg+MCYmKHRoaXMuZ2V0TGljZW5zZVNpdGVJZCgpLmluY2x1ZGVzKEQuU1lTU0lURSl8fHRoaXMuaW5jb3JyZWN0U2l0ZUlkRW1p''@;'; put 'put ''dHRlci5lbWl0KEQuU1lTU0lURSkpKSw0MDQ9PT1ELnN0YXR1cyYmTSh7YWRhcHRlclJlc3BvbnNlOntNRVNTQUdFOkQuYm9keXx8IlNBUyBSZXNwb25kZWQgd2l0aCBlcnJvciJ9LGxvZzpVPy5sb2dGaWxlfSksdHlwZW9mIEQuc2FzanNBYm9ydDwidSIpe2NvbnN0IHRlPUQsb2U9dGUuc2Fz''@;'; put 'put ''anNBYm9ydFswXS5NU0csdmU9dGUuc2FzanNBYm9ydFswXS5NQUM7aWYob2UuaW5jbHVkZXMoIkRhdGFfQ29udHJvbGxlcl9TZXR0aW5ncyhTdG9yZWRQcm9jZXNzKSBub3QgZm91bmQiKSlyZXR1cm4gdGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKSx0aGlzLnJvdXRlci5u''@;'; put 'put ''YXZpZ2F0ZUJ5VXJsKCIvZGVwbG95Iiksdm9pZCBNKHthZGFwdGVyUmVzcG9uc2U6e2Vycm9yOm9lfSxsb2c6VT8ubG9nRmlsZX0pO2Y/LnN1cHByZXNzU3VjY2Vzc0Fib3J0TW9kYWx8fHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKGEucmVwbGFjZSgic2VydmljZXMvIiwiIiks''@;'; put 'put ''b2Use1NZU1dBUk5JTkdURVhUOnRlLlNZU1dBUk5JTkdURVhULFNZU0VSUk9SVEVYVDp0ZS5TWVNFUlJPUlRFWFQsTUFDOnZlfSksTSh7YWRhcHRlclJlc3BvbnNlOntlcnJvcjpvZX0sbG9nOlU/LmxvZ0ZpbGV9KX12KHthZGFwdGVyUmVzcG9uc2U6RCxsb2c6VT8ubG9nRmlsZX0pfSxEPT57''@;'; put 'put ''Y29uc29sZS5lcnJvcihEKTtjb25zdCBVPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc1JlcXVlc3RzKCkuZmluZCh0ZT0+dGUuc2VydmljZUxpbms9PT1hKTtpZihELmVycm9yKXtsZXQgb2UsdGU9RC5lcnJvci5tZXNzYWdlO0QuZXJyb3IuZGV0YWlscyYmRC5lcnJvci5kZXRhaWxzLmxvZyYm''@;'; put 'put ''KG9lPUQuZXJyb3IuZGV0YWlscy5sb2cpLCghdGV8fHRlLnRyaW0oKS5sZW5ndGg8MSkmJih0ZT0iU0FTIFNlcnZpY2UgZXJyb3Igb2N1cnJlZCIpLGY/LnN1cHByZXNzRXJyb3JBYm9ydE1vZGFsfHx0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChhLHRlLHtMT0c6b2V9LCJSZXF1''@;'; put 'put ''ZXN0IGVycm9yIiksTSh7YWRhcHRlclJlc3BvbnNlOntlcnJvcjp0ZX0sbG9nOlU/LmxvZ0ZpbGV9KX1NKHthZGFwdGVyUmVzcG9uc2U6RCxsb2c6VT8ubG9nRmlsZX0pfSl9KX11cGxvYWRGaWxlKGEsZCxoKXtyZXR1cm4gbmV3IFByb21pc2UoKGYsdik9Pnt0aGlzLnNhc2pzQWRhcHRlci51''@;'; put 'put ''cGxvYWRGaWxlKGEsZCxoKS50aGVuKE09Pntjb25zdCBEPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc1JlcXVlc3RzKCkuZmluZChVPT4ic2VydmljZXMvZWRpdG9ycy9sb2FkZmlsZSI9PT1VLnNlcnZpY2VMaW5rKTtmKHthZGFwdGVyUmVzcG9uc2U6TSxsb2c6RD8ubG9nRmlsZX0pfSxNPT57''@;'; put 'put ''Y29uc3QgRD10aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNSZXF1ZXN0cygpLmZpbmQoVT0+InNlcnZpY2VzL2VkaXRvcnMvbG9hZGZpbGUiPT09VS5zZXJ2aWNlTGluayk7dih7cmVzcG9uc2U6TSxsb2c6RD8ubG9nRmlsZX0pfSl9KX1sb2dpbihhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1''@;'; put 'put ''bmN0aW9uKigpe2NvbnN0IGY9aC5nZXRTZXJ2ZXJUeXBlKCk9PT1sMS5ZLlNhc2pzPyJjbGllbnRJRDEiOnZvaWQgMDtyZXR1cm4gaC5zYXNqc0FkYXB0ZXIubG9nSW4oYSxkLGYpLnRoZW4odj0+KHYuaXNMb2dnZWRJbiYmKGgudXNlclNlcnZpY2UudXNlcj17dXNlcm5hbWU6di51c2VyTmFt''@;'; put 'put ''ZX0saC5hcHBMb2NDaGVja1BlbmRpbmcmJihoLmNoZWNrVml5YURlcGxveShoLmRjQWRhcHRlclNldHRpbmdzPy5hcHBMb2N8fCIiKSxoLmFwcExvY0NoZWNrUGVuZGluZz0hMSkpLGguc2hvdWxkTG9naW4ubmV4dCghdi5pc0xvZ2dlZEluKSx2LmlzTG9nZ2VkSW4pLHY9Pihjb25zb2xlLmVy''@;'; put 'put ''cm9yKHYpLGguc2hvdWxkTG9naW4ubmV4dCghMCksITEpKS5jYXRjaCh2PT4oNDAzPT09diYmY29uc29sZS5lcnJvcigiSW52YWxpZCBob3N0IiksITEpKX0pKCl9cmVsb2FkU3RhcnR1cERhdGEoKXt0aGlzLmxvYWRTdGFydHVwU2VydmljZUVtaXR0ZXIuZW1pdCgpfWdldExpY2Vuc2VTaXRl''@;'; put 'put ''SWQoKXtyZXR1cm4gdGhpcy5saWNlbnNlX3NpdGVfaWQudmFsdWV8fFtdfXNldExpY2Vuc2VTaXRlSWQoYSl7dGhpcy5saWNlbnNlX3NpdGVfaWQubmV4dCgib2JqZWN0Ij09dHlwZW9mIGE/YTpbYV0pfWNoZWNrU2FzanNEZXBsb3koKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbioo''@;'; put 'put ''KXtjb25zdCBoPWAke2EuZ2V0U2FzanNDb25maWcoKS5hcHBMb2N9L3NlcnZpY2VzL2FkbWluYDthLnNhc2pzU2VydmljZS5nZXRGb2xkZXJDb250ZW50c0Zyb21Ecml2ZShoKS5zdWJzY3JpYmUoZj0+e2YuZmlsZXMuaW5jbHVkZXMoIm1ha2VkYXRhLnNhcyIpPyhhLmV2ZW50U2VydmljZS5z''@;'; put 'put ''dGFydHVwRGF0YUxvYWRlZCgpLGEucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSk6KGEubG9hZFN0YXJ0dXBTZXJ2aWNlRW1pdHRlci5lbWl0KCksYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJkZXBsb3kiKSYmYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiLyIpKX0sZj0+e2NvbnN0IHY9''@;'; put 'put ''InN0cmluZyI9PXR5cGVvZiBmLmVycm9yP2YuZXJyb3I6SlNPTi5zdHJpbmdpZnkoZi5lcnJvcnx8Zik7di5pbmNsdWRlcygiVW5hdXRob3JpemVkIik/KGEuc2hvdWxkTG9naW4ubmV4dCghMCksYS5zaG91bGRMb2dpbi5zdWJzY3JpYmUoTT0+eyExPT09TSYmbG9jYXRpb24ucmVsb2FkKCl9''@;'; put 'put ''KSk6di5pbmNsdWRlcygiRm9sZGVyIGRvZXNuJ3QgZXhpc3QuIikmJihjb25zb2xlLndhcm4oIlNBU2pzIFNBUyBzZXJ2aWNlcyBhcmUgbm90IHByZXNlbnQgb24gdGhlIGN1cnJlbnQgYXBwTG9jLiIpLGEuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksYS5yb3V0ZXIubmF2aWdh''@;'; put 'put ''dGVCeVVybCgiL2RlcGxveSIpKX0pfSkoKX1zYXNqc01ha2VkYXRhQ2hlY2tpbmcoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgZD1lZShmdW5jdGlvbiooaCxmKXthLmNoZWNraW5nSW50ZXJ2YWw9c2V0SW50ZXJ2''@;'; put 'put ''YWwoZWUoZnVuY3Rpb24qKCl7YS5zYXNqc01ha2VkYXRhU3VjY2Vzc2Z1bGwoKS50aGVuKHY9Pnt2JiYoY2xlYXJJbnRlcnZhbChhLmNoZWNraW5nSW50ZXJ2YWwpLGgodikpfSkuY2F0Y2godj0+e2NsZWFySW50ZXJ2YWwoYS5jaGVja2luZ0ludGVydmFsKSxmKHYpfSl9KSwxZTMpfSk7cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uKGgsZil7cmV0dXJuIGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9KSgpfXNhc2pzTWFrZWRhdGFTdWNjZXNzZnVsbCgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2NvbnN0IHY9YCR7YS5nZXRTYXNq''@;'; put 'put ''c0NvbmZpZygpLmFwcExvY30vc2VydmljZXMvYWRtaW5gO2Euc2FzanNTZXJ2aWNlLmdldEZvbGRlckNvbnRlbnRzRnJvbURyaXZlKHYpLnN1YnNjcmliZShNPT57TS5maWxlcy5pbmNsdWRlcygibWFrZWRhdGEuc2FzIik/ZCghMSk6ZCghMCl9LE09PnsoInN0cmluZyI9PXR5cGVvZiBNLmVy''@;'; put 'put ''cm9yP00uZXJyb3I6SlNPTi5zdHJpbmdpZnkoTS5lcnJvcnx8TSkpLmluY2x1ZGVzKCJGb2xkZXIgZG9lc24ndCBleGlzdC4iKSYmaCgpfSl9KX0pKCl9Y2hlY2tWaXlhRGVwbG95KGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCB2LGY9ITE7aWYodHlwZW9mIGQuc2Fz''@;'; put 'put ''anNBZGFwdGVyLmdldEZvbGRlcjwidSIpe2NvbnN0IE09eWllbGQgZC5hcHBMb2NDaGVjayhhKTtmPU0uZm91bmQsdj1NLmVycm9yTWVzc2FnZX1lbHNlIGY9eWllbGQgZC5hcHBMb2NDaGVja1ByZUF4aW9zZEFkYXB0ZXIoYSk7Zj9kLnZpeWFNYWtlZGF0YVN1Y2Nlc3NmdWxsKCkudGhlbihN''@;'; put 'put ''PT57TT9kLmxvYWRTdGFydHVwU2VydmljZUVtaXR0ZXIuZW1pdCgpOihkLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpLGQucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSl9LE09Pntjb25zb2xlLmVycm9yKCJFcnJvciB3aGlsZSBsb29raW5nIGZvciB0aGUgZmlsZTog''@;'; put 'put ''bWFrZWRhdGEuc2FzIixNKX0pOmQuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkVycm9yIiwodnx8IlZpeWEgc2VydmljZXMgYXJlIG5vdCBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGFwcExvYywgb3IgQVBJIG5vdCByZWFjaGFibGUuIENoZWNrIHRoZSBBREFQVEVSIGNvbmZpZ3VyYXRp''@;'; put 'put ''b24uIikrYFxuQXBwTG9jOiAke2F9YCl9KSgpfXZpeWFNYWtlZGF0YVN1Y2Nlc3NmdWxsKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChkLGgpPT57Y29uc3QgZj1hLmdldFNhc2pzQ29uZmlnKCksdj1gJHtmLmFwcExvY30vc2VydmljZXMv''@;'; put 'put ''YWRtaW5gO2Euc2FzVml5YVNlcnZpY2UuZ2V0Rm9sZGVyQnlQYXRoKHYpLnN1YnNjcmliZShNPT57Y29uc3QgRD1NLmlkO0R8fChjb25zb2xlLmVycm9yKGBGb2xkZXIgSUQgaXMgbm90IHByZXNlbnQuICR7dn1gLGYpLGQoITEpKSxhLnNhc1ZpeWFTZXJ2aWNlLmdldEZvbGRlck1lbWJlcnMo''@;'; put 'put ''RCkuc3Vic2NyaWJlKFU9PntVLml0ZW1zLnNvbWUodGU9PiJtYWtlZGF0YSI9PT10ZS5uYW1lKT9kKCExKTpkKCEwKX0sVT0+e2NvbnNvbGUuZXJyb3IoIkVycm9yIGdldHRpbmcgZm9sZGVyIGNvbnRlbnRzIixVKSxoKCl9KX0sTT0+e2NvbnNvbGUud2FybigiRXJyb3IgZ2V0dGluZyBmb2xk''@;'; put 'put ''ZXIgaW5mbyIsTSksaChNKX0pfSl9KSgpfWFwcExvY0NoZWNrKGEpe3ZhciBkPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGg9ZWUoZnVuY3Rpb24qKGYsdil7bGV0IEQsTT0iIjt0cnl7RD15aWVsZCBkLnNhc2pzQWRhcHRlci5nZXRGb2xkZXIoYSl9Y2F0Y2goVSl7''@;'; put 'put ''IkxvZ2luUmVxdWlyZWRFcnJvciI9PT1VLm5hbWU/KGQuYXBwTG9jQ2hlY2tQZW5kaW5nPSEwLGQuc2hvdWxkTG9naW4ubmV4dCghMCksZih7Zm91bmQ6ITF9KSk6TT0iTm90Rm91bmRlRXJyb3IiPT09VS5uYW1lP1UubWVzc2FnZToiVml5YSBzZXJ2aWNlcyBhcmUgbm90IHByZXNlbnQgb24g''@;'; put 'put ''dGhlIGN1cnJlbnQgYXBwTG9jLCBvciBBUEkgbm90IHJlYWNoYWJsZS4gQ2hlY2sgdGhlIEFEQVBURVIgY29uZmlndXJhdGlvbi4ifWlmKE0ubGVuZ3RoKXJldHVybiBjb25zb2xlLndhcm4oTSksZih7Zm91bmQ6ITEsZXJyb3JNZXNzYWdlOk19KTtmKHtmb3VuZDohMH0pfSk7cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uKGYsdil7cmV0dXJuIGguYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9YXBwTG9jQ2hlY2tQcmVBeGlvc2RBZGFwdGVyKGEpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2xldCB2PSExO3JldHVybiBmZXRjaChgL2ZvbGRlcnMvZm9sZGVycy9AaXRlbT9wYXRoPSR7YX1gKS50''@;'; put 'put ''aGVuKE09Pig0MDQ9PT1NLnN0YXR1cyYmKHY9ITApLE0udGV4dCgpKSkudGhlbihNPT57aWYodGhpcy5pc0xvZ2luUmVxdWlyZWQoTSkpdGhpcy5hcHBMb2NDaGVja1BlbmRpbmc9ITAsdGhpcy5zaG91bGRMb2dpbi5uZXh0KCEwKTtlbHNle2lmKHYpcmV0dXJuIGNvbnNvbGUud2FybigiVml5''@;'; put 'put ''YSBzZXJ2aWNlcyBhcmUgbm90IHByZXNlbnQgb24gdGhlIGN1cnJlbnQgYXBwTG9jLiIpLHRoaXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLGQoITEpO2xldCBEPW51bGw7dHJ5e0Q9SlNPTi5wYXJzZShNKX1j''@;'; put 'put ''YXRjaHt9aWYoRCYmRC5odHRwU3RhdHVzQ29kZSYmNDA0PT09RC5odHRwU3RhdHVzQ29kZSlyZXR1cm4gY29uc29sZS53YXJuKCJWaXlhIHNlcnZpY2VzIGFyZSBub3QgcHJlc2VudCBvbiB0aGUgY3VycmVudCBhcHBMb2MuIiksdGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQo''@;'; put 'put ''KSx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95IiksZCghMSk7ZCghMCl9fSkuY2F0Y2goTT0+e2QoITEpfSl9KX1pc0xvZ2luUmVxdWlyZWQoYSl7cmV0dXJuLzxmb3JtLithY3Rpb249IiguKkxvZ29uW14iXSopLio+L2dtLnRlc3QoYSl9bG9nb3V0KCl7dGhpcy5zYXNqc0Fk''@;'; put 'put ''YXB0ZXIubG9nT3V0KCkudGhlbigoKT0+e2xvY2F0aW9uLnJlbG9hZCgpfSl9Z2V0U2FzanNDb25maWcoKXtyZXR1cm4gdGhpcy5zYXNqc0FkYXB0ZXIuZ2V0U2FzanNDb25maWcoKX1nZXRTYXNSZXF1ZXN0cygpe3JldHVybiB0aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNSZXF1ZXN0cygpfXNl''@;'; put 'put ''dERlYnVnU3RhdGUoYSl7dGhpcy5zYXNqc0FkYXB0ZXIuc2V0RGVidWdTdGF0ZShhKX1nZXRTYXNqc0luc3RhbmNlKCl7cmV0dXJuIHRoaXMuc2FzanNBZGFwdGVyfWdldFNlcnZlclR5cGUoKXtjb25zdCBhPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc2pzQ29uZmlnKCk7cmV0dXJuIGEuc2Vy''@;'; put 'put ''dmVyVHlwZT9hLnNlcnZlclR5cGU6IlNBU1ZJWUEifWdldEV4ZWN1dGlvblBhdGgoKXtjb25zdCBhPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc2pzQ29uZmlnKCk7c3dpdGNoKGEuc2VydmVyVHlwZSl7Y2FzZSBsMS5ZLlNhc1ZpeWE6cmV0dXJuIGEucGF0aFNBU1ZpeWE7Y2FzZSBsMS5ZLlNh''@;'; put 'put ''czk6cmV0dXJuIGEucGF0aFNBUzk7Y2FzZSBsMS5ZLlNhc2pzOnJldHVybiBhLnBhdGhTQVNKU319Z2V0RmlsZUNvbnRlbnQoYSxkKXtyZXR1cm4gdGhpcy5zYXNqc0FkYXB0ZXIuZ2V0RmlsZUNvbnRlbnQoYSxkKX11cGRhdGVGaWxlQ29udGVudChhLGQsaCl7cmV0dXJuIHRoaXMuc2FzanNB''@;'; put 'put ''ZGFwdGVyLnVwZGF0ZUZpbGVDb250ZW50KGEsZCxoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShIcih1OSksSHIoSCQpLEhyKEVjKSxIcihZZGUpLEhyKFckKSxIcihvaCksSHIobmwpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1mcih7dG9r''@;'; put 'put ''ZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKSxvaD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaW5qZWN0b3I9YX1sb2coYSxkKXt0aGlzLmluamVjdFNhc1NlcnZpY2UoKSx0aGlzLnNhc2pzQ29uZmlnPy5kZWJ1ZyYm''@;'; put 'put ''KGQ/Y29uc29sZS5sb2coYSxkKTpjb25zb2xlLmxvZyhhKSl9ZXJyb3IoYSxkKXtjb25zb2xlLmVycm9yKGEsZCl9bG9nUmVxdWVzdERhdGEoYSxkKXtpZih0aGlzLmxvZygiLS0tIEFkYXB0ZXIgUmVxdWVzdCBJbnB1dCAtLS0iKSx0aGlzLmxvZyhhKSxkKXtmb3IobGV0IGggb2YgT2JqZWN0''@;'; put 'put ''LmtleXMoZCkpdGhpcy5sb2coaCxkW2hdKTt0aGlzLmxvZygiLS0tLS0tIil9ZWxzZSB0aGlzLmxvZygibm8gZGF0YSBzZW50Iil9aW5qZWN0U2FzU2VydmljZSgpe2lmKCF0aGlzLnNhc2pzQ29uZmlnKXtjb25zdCBhPXRoaXMuaW5qZWN0b3IuZ2V0KEtzKTt0aGlzLnNhc2pzQ29uZmlnPWEu''@;'; put 'put ''Z2V0U2FzanNDb25maWcoKX19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoSHIoWW8pKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSko''@;'; put 'put ''KTtjb25zdCBHZGU9ZnVuY3Rpb24gc09lKGMsbCl7cmV0dXJuIGM9PT1sfHxjIT1jJiZsIT1sfSxnRj1mdW5jdGlvbiBsT2UoYyxsKXtmb3IodmFyIGE9Yy5sZW5ndGg7YS0tOylpZihHZGUoY1thXVswXSxsKSlyZXR1cm4gYTtyZXR1cm4tMX07dmFyIHVPZT1BcnJheS5wcm90b3R5cGUuc3Bs''@;'; put 'put ''aWNlO2Z1bmN0aW9uIFpfKGMpe3ZhciBsPS0xLGE9bnVsbD09Yz8wOmMubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytsPGE7KXt2YXIgZD1jW2xdO3RoaXMuc2V0KGRbMF0sZFsxXSl9fVpfLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBhT2UoKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6''@;'; put 'put ''ZT0wfSxaXy5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIGRPZShjKXt2YXIgbD10aGlzLl9fZGF0YV9fLGE9Z0YobCxjKTtyZXR1cm4hKGE8MHx8KGE9PWwubGVuZ3RoLTE/bC5wb3AoKTp1T2UuY2FsbChsLGEsMSksLS10aGlzLnNpemUsMCkpfSxaXy5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9u''@;'; put 'put ''IGZPZShjKXt2YXIgbD10aGlzLl9fZGF0YV9fLGE9Z0YobCxjKTtyZXR1cm4gYTwwP3ZvaWQgMDpsW2FdWzFdfSxaXy5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIGdPZShjKXtyZXR1cm4gZ0YodGhpcy5fX2RhdGFfXyxjKT4tMX0sWl8ucHJvdG90eXBlLnNldD1mdW5jdGlvbiB2T2UoYyxsKXt2''@;'; put 'put ''YXIgYT10aGlzLl9fZGF0YV9fLGQ9Z0YoYSxjKTtyZXR1cm4gZDwwPygrK3RoaXMuc2l6ZSxhLnB1c2goW2MsbF0pKTphW2RdWzFdPWwsdGhpc307Y29uc3QgbUY9Wl8sJGRlPSJvYmplY3QiPT10eXBlb2YgZ2xvYmFsJiZnbG9iYWwmJmdsb2JhbC5PYmplY3Q9PT1PYmplY3QmJmdsb2JhbDt2''@;'; put 'put ''YXIgQU9lPSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGY7Y29uc3QgcDQ9JGRlfHxBT2V8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksYTY9cDQuU3ltYm9sO3ZhciBLZGU9T2JqZWN0LnByb3RvdHlwZSxJT2U9S2RlLmhhc093blByb3Bl''@;'; put 'put ''cnR5LFJPZT1LZGUudG9TdHJpbmcseVQ9YTY/YTYudG9TdHJpbmdUYWc6dm9pZCAwO3ZhciBGT2U9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzt2YXIgWGRlPWE2P2E2LnRvU3RyaW5nVGFnOnZvaWQgMDtjb25zdCBXXz1mdW5jdGlvbiBqT2UoYyl7cmV0dXJuIG51bGw9PWM/dm9pZCAwPT09''@;'; put 'put ''Yz8iW29iamVjdCBVbmRlZmluZWRdIjoiW29iamVjdCBOdWxsXSI6WGRlJiZYZGUgaW4gT2JqZWN0KGMpP2Z1bmN0aW9uIExPZShjKXt2YXIgbD1JT2UuY2FsbChjLHlUKSxhPWNbeVRdO3RyeXtjW3lUXT12b2lkIDA7dmFyIGQ9ITB9Y2F0Y2h7fXZhciBoPVJPZS5jYWxsKGMpO3JldHVybiBk''@;'; put 'put ''JiYobD9jW3lUXT1hOmRlbGV0ZSBjW3lUXSksaH0oYyk6ZnVuY3Rpb24gSE9lKGMpe3JldHVybiBGT2UuY2FsbChjKX0oYyl9LGJUPWZ1bmN0aW9uIHpPZShjKXt2YXIgbD10eXBlb2YgYztyZXR1cm4gbnVsbCE9YyYmKCJvYmplY3QiPT1sfHwiZnVuY3Rpb24iPT1sKX0scWRlPWZ1bmN0aW9u''@;'; put 'put ''IEdPZShjKXtpZighYlQoYykpcmV0dXJuITE7dmFyIGw9V18oYyk7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09bHx8IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIj09bHx8IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iPT1sfHwiW29iamVjdCBQcm94eV0iPT1sfSxZJD1wNFsiX19jb3Jl''@;'; put 'put ''LWpzX3NoYXJlZF9fIl07dmFyIEpkZT1mdW5jdGlvbigpe3ZhciBjPS9bXi5dKyQvLmV4ZWMoWSQmJlkkLmtleXMmJlkkLmtleXMuSUVfUFJPVE98fCIiKTtyZXR1cm4gYz8iU3ltYm9sKHNyYylfMS4iK2M6IiJ9KCk7dmFyIEpPZT1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7Y29uc3Qg''@;'; put 'put ''aDk9ZnVuY3Rpb24gUU9lKGMpe2lmKG51bGwhPWMpe3RyeXtyZXR1cm4gSk9lLmNhbGwoYyl9Y2F0Y2h7fXRyeXtyZXR1cm4gYysiIn1jYXRjaHt9fXJldHVybiIifTt2YXIgdFBlPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLG9QZT1SZWdFeHAoIl4iK0Z1bmN0aW9uLnByb3RvdHlw''@;'; put 'put ''ZS50b1N0cmluZy5jYWxsKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpLnJlcGxhY2UoL1tcXF4kLiorPygpW1xde318XS9nLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIp''@;'; put 'put ''O2NvbnN0IGxQZT1mdW5jdGlvbiBzUGUoYyl7cmV0dXJuISghYlQoYyl8fGZ1bmN0aW9uIEtPZShjKXtyZXR1cm4hIUpkZSYmSmRlIGluIGN9KGMpKSYmKHFkZShjKT9vUGU6dFBlKS50ZXN0KGg5KGMpKX0sZjk9ZnVuY3Rpb24gZFBlKGMsbCl7dmFyIGE9ZnVuY3Rpb24gY1BlKGMsbCl7cmV0''@;'; put 'put ''dXJuIGM/LltsXX0oYyxsKTtyZXR1cm4gbFBlKGEpP2E6dm9pZCAwfSxfVD1mOShwNCwiTWFwIiksd1Q9ZjkoT2JqZWN0LCJjcmVhdGUiKTt2YXIgX1BlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dmFyIE1QZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0''@;'; put 'put ''aW9uIFlfKGMpe3ZhciBsPS0xLGE9bnVsbD09Yz8wOmMubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytsPGE7KXt2YXIgZD1jW2xdO3RoaXMuc2V0KGRbMF0sZFsxXSl9fVlfLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBwUGUoKXt0aGlzLl9fZGF0YV9fPXdUP3dUKG51bGwpOnt9LHRoaXMu''@;'; put 'put ''c2l6ZT0wfSxZXy5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIG1QZShjKXt2YXIgbD10aGlzLmhhcyhjKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bY107cmV0dXJuIHRoaXMuc2l6ZS09bD8xOjAsbH0sWV8ucHJvdG90eXBlLmdldD1mdW5jdGlvbiB3UGUoYyl7dmFyIGw9dGhpcy5fX2RhdGFf''@;'; put 'put ''XztpZih3VCl7dmFyIGE9bFtjXTtyZXR1cm4iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI9PT1hP3ZvaWQgMDphfXJldHVybiBfUGUuY2FsbChsLGMpP2xbY106dm9pZCAwfSxZXy5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIHhQZShjKXt2YXIgbD10aGlzLl9fZGF0YV9fO3JldHVybiB3VD92''@;'; put 'put ''b2lkIDAhPT1sW2NdOk1QZS5jYWxsKGwsYyl9LFlfLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gQVBlKGMsbCl7dmFyIGE9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyhjKT8wOjEsYVtjXT13VCYmdm9pZCAwPT09bD8iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI6''@;'; put 'put ''bCx0aGlzfTtjb25zdCBRZGU9WV8sdkY9ZnVuY3Rpb24gT1BlKGMsbCl7dmFyIGE9Yy5fX2RhdGFfXztyZXR1cm4gZnVuY3Rpb24gUlBlKGMpe3ZhciBsPXR5cGVvZiBjO3JldHVybiJzdHJpbmciPT1sfHwibnVtYmVyIj09bHx8InN5bWJvbCI9PWx8fCJib29sZWFuIj09bD8iX19wcm90b19f''@;'; put 'put ''IiE9PWM6bnVsbD09PWN9KGwpP2FbInN0cmluZyI9PXR5cGVvZiBsPyJzdHJpbmciOiJoYXNoIl06YS5tYXB9O2Z1bmN0aW9uIEdfKGMpe3ZhciBsPS0xLGE9bnVsbD09Yz8wOmMubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytsPGE7KXt2YXIgZD1jW2xdO3RoaXMuc2V0KGRbMF0sZFsxXSl9''@;'; put 'put ''fUdfLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBEUGUoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBRZGUsbWFwOm5ldyhfVHx8bUYpLHN0cmluZzpuZXcgUWRlfX0sR18ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBQUGUoYyl7dmFyIGw9dkYodGhpcyxjKS5kZWxl''@;'; put 'put ''dGUoYyk7cmV0dXJuIHRoaXMuc2l6ZS09bD8xOjAsbH0sR18ucHJvdG90eXBlLmdldD1mdW5jdGlvbiBIUGUoYyl7cmV0dXJuIHZGKHRoaXMsYykuZ2V0KGMpfSxHXy5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIFZQZShjKXtyZXR1cm4gdkYodGhpcyxjKS5oYXMoYyl9LEdfLnByb3RvdHlwZS5z''@;'; put 'put ''ZXQ9ZnVuY3Rpb24galBlKGMsbCl7dmFyIGE9dkYodGhpcyxjKSxkPWEuc2l6ZTtyZXR1cm4gYS5zZXQoYyxsKSx0aGlzLnNpemUrPWEuc2l6ZT09ZD8wOjEsdGhpc307Y29uc3QgRyQ9R187ZnVuY3Rpb24gJF8oYyl7dmFyIGw9dGhpcy5fX2RhdGFfXz1uZXcgbUYoYyk7dGhpcy5zaXplPWwu''@;'; put 'put ''c2l6ZX0kXy5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gYk9lKCl7dGhpcy5fX2RhdGFfXz1uZXcgbUYsdGhpcy5zaXplPTB9LCRfLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gd09lKGMpe3ZhciBsPXRoaXMuX19kYXRhX18sYT1sLmRlbGV0ZShjKTtyZXR1cm4gdGhpcy5zaXplPWwuc2l6''@;'; put 'put ''ZSxhfSwkXy5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uIFNPZShjKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoYyl9LCRfLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24geE9lKGMpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhjKX0sJF8ucHJvdG90eXBlLnNldD1mdW5jdGlvbiBaUGUoYyxsKXt2''@;'; put 'put ''YXIgYT10aGlzLl9fZGF0YV9fO2lmKGEgaW5zdGFuY2VvZiBtRil7dmFyIGQ9YS5fX2RhdGFfXztpZighX1R8fGQubGVuZ3RoPDE5OSlyZXR1cm4gZC5wdXNoKFtjLGxdKSx0aGlzLnNpemU9KythLnNpemUsdGhpczthPXRoaXMuX19kYXRhX189bmV3IEckKGQpfXJldHVybiBhLnNldChjLGwp''@;'; put 'put ''LHRoaXMuc2l6ZT1hLnNpemUsdGhpc307Y29uc3QgWVBlPSRfO3ZhciBLUGU9ZnVuY3Rpb24oKXt0cnl7dmFyIGM9ZjkoT2JqZWN0LCJkZWZpbmVQcm9wZXJ0eSIpO3JldHVybiBjKHt9LCIiLHt9KSxjfWNhdGNoe319KCk7Y29uc3QgZWhlPUtQZSx0aGU9ZnVuY3Rpb24gWFBlKGMsbCxhKXsi''@;'; put 'put ''X19wcm90b19fIj09bCYmZWhlP2VoZShjLGwse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmEsd3JpdGFibGU6ITB9KTpjW2xdPWF9O3ZhciBKUGU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtjb25zdCBuaGU9ZnVuY3Rpb24gUVBlKGMsbCxhKXt2YXIgZD1j''@;'; put 'put ''W2xdOyghSlBlLmNhbGwoYyxsKXx8IUdkZShkLGEpfHx2b2lkIDA9PT1hJiYhKGwgaW4gYykpJiZ0aGUoYyxsLGEpfSx5Rj1mdW5jdGlvbiBlRmUoYyxsLGEsZCl7dmFyIGg9IWE7YXx8KGE9e30pO2Zvcih2YXIgZj0tMSx2PWwubGVuZ3RoOysrZjx2Oyl7dmFyIE09bFtmXSxEPWQ/ZChhW01d''@;'; put 'put ''LGNbTV0sTSxhLGMpOnZvaWQgMDt2b2lkIDA9PT1EJiYoRD1jW01dKSxoP3RoZShhLE0sRCk6bmhlKGEsTSxEKX1yZXR1cm4gYX0sS189ZnVuY3Rpb24gckZlKGMpe3JldHVybiBudWxsIT1jJiYib2JqZWN0Ij09dHlwZW9mIGN9LHJoZT1mdW5jdGlvbiBhRmUoYyl7cmV0dXJuIEtfKGMpJiYi''@;'; put 'put ''W29iamVjdCBBcmd1bWVudHNdIj09V18oYyl9O3ZhciBpaGU9T2JqZWN0LnByb3RvdHlwZSxvRmU9aWhlLmhhc093blByb3BlcnR5LHNGZT1paGUucHJvcGVydHlJc0VudW1lcmFibGUsbEZlPXJoZShmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP3JoZTpmdW5jdGlvbihjKXtyZXR1''@;'; put 'put ''cm4gS18oYykmJm9GZS5jYWxsKGMsImNhbGxlZSIpJiYhc0ZlLmNhbGwoYywiY2FsbGVlIil9O2NvbnN0IGNGZT1sRmUsWF89QXJyYXkuaXNBcnJheTt2YXIgYWhlPSJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsb2hlPWFoZSYm''@;'; put 'put ''Im9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLHNoZT1vaGUmJm9oZS5leHBvcnRzPT09YWhlP3A0LkJ1ZmZlcjp2b2lkIDA7Y29uc3QgbGhlPShzaGU/c2hlLmlzQnVmZmVyOnZvaWQgMCl8fGZ1bmN0aW9uIGRGZSgpe3JldHVybiExfTt2''@;'; put 'put ''YXIgdkZlPS9eKD86MHxbMS05XVxkKikkLztjb25zdCBiRmU9ZnVuY3Rpb24geUZlKGMsbCl7dmFyIGE9dHlwZW9mIGM7cmV0dXJuISEobD1sPz85MDA3MTk5MjU0NzQwOTkxKSYmKCJudW1iZXIiPT1hfHwic3ltYm9sIiE9YSYmdkZlLnRlc3QoYykpJiZjPi0xJiZjJTE9PTAmJmM8bH0sY2hl''@;'; put 'put ''PWZ1bmN0aW9uIHdGZShjKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGMmJmM+LTEmJmMlMT09MCYmYzw9OTAwNzE5OTI1NDc0MDk5MX07dmFyIFRjPXt9O1RjWyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1UY1siW29iamVjdCBGbG9hdDY0QXJyYXldIl09VGNbIltvYmplY3QgSW50OEFycmF5''@;'; put 'put ''XSJdPVRjWyJbb2JqZWN0IEludDE2QXJyYXldIl09VGNbIltvYmplY3QgSW50MzJBcnJheV0iXT1UY1siW29iamVjdCBVaW50OEFycmF5XSJdPVRjWyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPVRjWyJbb2JqZWN0IFVpbnQxNkFycmF5XSJdPVRjWyJbb2JqZWN0IFVpbnQzMkFycmF5''@;'; put 'put ''XSJdPSEwLFRjWyJbb2JqZWN0IEFyZ3VtZW50c10iXT1UY1siW29iamVjdCBBcnJheV0iXT1UY1siW29iamVjdCBBcnJheUJ1ZmZlcl0iXT1UY1siW29iamVjdCBCb29sZWFuXSJdPVRjWyJbb2JqZWN0IERhdGFWaWV3XSJdPVRjWyJbb2JqZWN0IERhdGVdIl09VGNbIltvYmplY3QgRXJyb3Jd''@;'; put 'put ''Il09VGNbIltvYmplY3QgRnVuY3Rpb25dIl09VGNbIltvYmplY3QgTWFwXSJdPVRjWyJbb2JqZWN0IE51bWJlcl0iXT1UY1siW29iamVjdCBPYmplY3RdIl09VGNbIltvYmplY3QgUmVnRXhwXSJdPVRjWyJbb2JqZWN0IFNldF0iXT1UY1siW29iamVjdCBTdHJpbmddIl09VGNbIltvYmplY3Qg''@;'; put 'put ''V2Vha01hcF0iXT0hMTtjb25zdCAkJD1mdW5jdGlvbiAkRmUoYyl7cmV0dXJuIGZ1bmN0aW9uKGwpe3JldHVybiBjKGwpfX07dmFyIHVoZT0ib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLENUPXVoZSYmIm9iamVjdCI9PXR5cGVv''@;'; put 'put ''ZiBtb2R1bGUmJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLEskPUNUJiZDVC5leHBvcnRzPT09dWhlJiYkZGUucHJvY2Vzcztjb25zdCBxXz1mdW5jdGlvbigpe3RyeXtyZXR1cm4gQ1QmJkNULnJlcXVpcmUmJkNULnJlcXVpcmUoInV0aWwiKS50eXBlc3x8SyQmJkskLmJpbmRp''@;'; put 'put ''bmcmJkskLmJpbmRpbmcoInV0aWwiKX1jYXRjaHt9fSgpO3ZhciBkaGU9cV8mJnFfLmlzVHlwZWRBcnJheTtjb25zdCBKRmU9ZGhlPyQkKGRoZSk6ZnVuY3Rpb24gWUZlKGMpe3JldHVybiBLXyhjKSYmY2hlKGMubGVuZ3RoKSYmISFUY1tXXyhjKV19O3ZhciBlSGU9T2JqZWN0LnByb3RvdHlw''@;'; put 'put ''ZS5oYXNPd25Qcm9wZXJ0eTtjb25zdCBoaGU9ZnVuY3Rpb24gdEhlKGMsbCl7dmFyIGE9WF8oYyksZD0hYSYmY0ZlKGMpLGg9IWEmJiFkJiZsaGUoYyksZj0hYSYmIWQmJiFoJiZKRmUoYyksdj1hfHxkfHxofHxmLE09dj9mdW5jdGlvbiB0RmUoYyxsKXtmb3IodmFyIGE9LTEsZD1BcnJheShj''@;'; put 'put ''KTsrK2E8YzspZFthXT1sKGEpO3JldHVybiBkfShjLmxlbmd0aCxTdHJpbmcpOltdLEQ9TS5sZW5ndGg7Zm9yKHZhciBVIGluIGMpKGx8fGVIZS5jYWxsKGMsVSkpJiYoIXZ8fCEoImxlbmd0aCI9PVV8fGgmJigib2Zmc2V0Ij09VXx8InBhcmVudCI9PVUpfHxmJiYoImJ1ZmZlciI9PVV8fCJi''@;'; put 'put ''eXRlTGVuZ3RoIj09VXx8ImJ5dGVPZmZzZXQiPT1VKXx8YkZlKFUsRCkpKSYmTS5wdXNoKFUpO3JldHVybiBNfTt2YXIgbkhlPU9iamVjdC5wcm90b3R5cGU7Y29uc3QgWCQ9ZnVuY3Rpb24gckhlKGMpe3ZhciBsPWMmJmMuY29uc3RydWN0b3I7cmV0dXJuIGM9PT0oImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIGwmJmwucHJvdG90eXBlfHxuSGUpfSxmaGU9ZnVuY3Rpb24gaUhlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBjKGwoYSkpfX0sb0hlPWZoZShPYmplY3Qua2V5cyxPYmplY3QpO3ZhciBsSGU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtjb25zdCBwaGU9ZnVu''@;'; put 'put ''Y3Rpb24gZEhlKGMpe3JldHVybiBudWxsIT1jJiZjaGUoYy5sZW5ndGgpJiYhcWRlKGMpfSxxJD1mdW5jdGlvbiBoSGUoYyl7cmV0dXJuIHBoZShjKT9oaGUoYyk6ZnVuY3Rpb24gY0hlKGMpe2lmKCFYJChjKSlyZXR1cm4gb0hlKGMpO3ZhciBsPVtdO2Zvcih2YXIgYSBpbiBPYmplY3QoYykp''@;'; put 'put ''bEhlLmNhbGwoYyxhKSYmImNvbnN0cnVjdG9yIiE9YSYmbC5wdXNoKGEpO3JldHVybiBsfShjKX07dmFyIHlIZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2NvbnN0IF9IZT1mdW5jdGlvbiBiSGUoYyl7aWYoIWJUKGMpKXJldHVybiBmdW5jdGlvbiBnSGUoYyl7dmFyIGw9W107''@;'; put 'put ''aWYobnVsbCE9Yylmb3IodmFyIGEgaW4gT2JqZWN0KGMpKWwucHVzaChhKTtyZXR1cm4gbH0oYyk7dmFyIGw9WCQoYyksYT1bXTtmb3IodmFyIGQgaW4gYykiY29uc3RydWN0b3IiPT1kJiYobHx8IXlIZS5jYWxsKGMsZCkpfHxhLnB1c2goZCk7cmV0dXJuIGF9LEokPWZ1bmN0aW9uIHdIZShj''@;'; put 'put ''KXtyZXR1cm4gcGhlKGMpP2hoZShjLCEwKTpfSGUoYyl9O3ZhciBnaGU9Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZleHBvcnRzJiYhZXhwb3J0cy5ub2RlVHlwZSYmZXhwb3J0cyxtaGU9Z2hlJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmbW9kdWxlJiYhbW9kdWxlLm5vZGVUeXBlJiZt''@;'; put 'put ''b2R1bGUsdmhlPW1oZSYmbWhlLmV4cG9ydHM9PT1naGU/cDQuQnVmZmVyOnZvaWQgMCx5aGU9dmhlP3ZoZS5hbGxvY1Vuc2FmZTp2b2lkIDA7Y29uc3QgYmhlPWZ1bmN0aW9uIElIZSgpe3JldHVybltdfTt2YXIgTEhlPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUsX2hl''@;'; put 'put ''PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsT0hlPV9oZT9mdW5jdGlvbihjKXtyZXR1cm4gbnVsbD09Yz9bXTooYz1PYmplY3QoYyksZnVuY3Rpb24ga0hlKGMsbCl7Zm9yKHZhciBhPS0xLGQ9bnVsbD09Yz8wOmMubGVuZ3RoLGg9MCxmPVtdOysrYTxkOyl7dmFyIHY9Y1thXTtsKHYs''@;'; put 'put ''YSxjKSYmKGZbaCsrXT12KX1yZXR1cm4gZn0oX2hlKGMpLGZ1bmN0aW9uKGwpe3JldHVybiBMSGUuY2FsbChjLGwpfSkpfTpiaGU7Y29uc3QgUSQ9T0hlLHdoZT1mdW5jdGlvbiBISGUoYyxsKXtmb3IodmFyIGE9LTEsZD1sLmxlbmd0aCxoPWMubGVuZ3RoOysrYTxkOyljW2grYV09bFthXTty''@;'; put 'put ''ZXR1cm4gY30sQ2hlPWZoZShPYmplY3QuZ2V0UHJvdG90eXBlT2YsT2JqZWN0KTt2YXIgQkhlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM/ZnVuY3Rpb24oYyl7Zm9yKHZhciBsPVtdO2M7KXdoZShsLFEkKGMpKSxjPUNoZShjKTtyZXR1cm4gbH06YmhlO2NvbnN0IFNoZT1CSGUsTWhl''@;'; put 'put ''PWZ1bmN0aW9uIFVIZShjLGwsYSl7dmFyIGQ9bChjKTtyZXR1cm4gWF8oYyk/ZDp3aGUoZCxhKGMpKX0sV0hlPWZ1bmN0aW9uIFpIZShjKXtyZXR1cm4gTWhlKGMscSQsUSQpfSxHSGU9ZnVuY3Rpb24gWUhlKGMpe3JldHVybiBNaGUoYyxKJCxTaGUpfSxlSz1mOShwNCwiRGF0YVZpZXciKSx0''@;'; put 'put ''Sz1mOShwNCwiUHJvbWlzZSIpLG5LPWY5KHA0LCJTZXQiKSxySz1mOShwNCwiV2Vha01hcCIpO3ZhciB4aGU9IltvYmplY3QgTWFwXSIsRWhlPSJbb2JqZWN0IFByb21pc2VdIixUaGU9IltvYmplY3QgU2V0XSIsQWhlPSJbb2JqZWN0IFdlYWtNYXBdIixraGU9IltvYmplY3QgRGF0YVZpZXdd''@;'; put 'put ''IixRSGU9aDkoZUspLGVOZT1oOShfVCksdE5lPWg5KHRLKSxuTmU9aDkobkspLHJOZT1oOShySykscDk9V187KGVLJiZwOShuZXcgZUsobmV3IEFycmF5QnVmZmVyKDEpKSkhPWtoZXx8X1QmJnA5KG5ldyBfVCkhPXhoZXx8dEsmJnA5KHRLLnJlc29sdmUoKSkhPUVoZXx8bksmJnA5KG5ldyBu''@;'; put 'put ''SykhPVRoZXx8cksmJnA5KG5ldyBySykhPUFoZSkmJihwOT1mdW5jdGlvbihjKXt2YXIgbD1XXyhjKSxhPSJbb2JqZWN0IE9iamVjdF0iPT1sP2MuY29uc3RydWN0b3I6dm9pZCAwLGQ9YT9oOShhKToiIjtpZihkKXN3aXRjaChkKXtjYXNlIFFIZTpyZXR1cm4ga2hlO2Nhc2UgZU5lOnJldHVy''@;'; put 'put ''biB4aGU7Y2FzZSB0TmU6cmV0dXJuIEVoZTtjYXNlIG5OZTpyZXR1cm4gVGhlO2Nhc2Ugck5lOnJldHVybiBBaGV9cmV0dXJuIGx9KTtjb25zdCBpSz1wOTt2YXIgYU5lPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7Y29uc3QgRGhlPXA0LlVpbnQ4QXJyYXksYUs9ZnVuY3Rpb24g''@;'; put 'put ''Y05lKGMpe3ZhciBsPW5ldyBjLmNvbnN0cnVjdG9yKGMuYnl0ZUxlbmd0aCk7cmV0dXJuIG5ldyBEaGUobCkuc2V0KG5ldyBEaGUoYykpLGx9O3ZhciBoTmU9L1x3KiQvO3ZhciBJaGU9YTY/YTYucHJvdG90eXBlOnZvaWQgMCxSaGU9SWhlP0loZS52YWx1ZU9mOnZvaWQgMDtjb25zdCBWTmU9''@;'; put 'put ''ZnVuY3Rpb24gTk5lKGMsbCxhKXt2YXIgZD1jLmNvbnN0cnVjdG9yO3N3aXRjaChsKXtjYXNlIltvYmplY3QgQXJyYXlCdWZmZXJdIjpyZXR1cm4gYUsoYyk7Y2FzZSJbb2JqZWN0IEJvb2xlYW5dIjpjYXNlIltvYmplY3QgRGF0ZV0iOnJldHVybiBuZXcgZCgrYyk7Y2FzZSJbb2JqZWN0IERh''@;'; put 'put ''dGFWaWV3XSI6cmV0dXJuIGZ1bmN0aW9uIHVOZShjLGwpe3ZhciBhPWw/YUsoYy5idWZmZXIpOmMuYnVmZmVyO3JldHVybiBuZXcgYy5jb25zdHJ1Y3RvcihhLGMuYnl0ZU9mZnNldCxjLmJ5dGVMZW5ndGgpfShjLGEpO2Nhc2UiW29iamVjdCBGbG9hdDMyQXJyYXldIjpjYXNlIltvYmplY3Qg''@;'; put 'put ''RmxvYXQ2NEFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDhBcnJheV0iOmNhc2UiW29iamVjdCBJbnQxNkFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDMyQXJyYXldIjpjYXNlIltvYmplY3QgVWludDhBcnJheV0iOmNhc2UiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iOmNhc2UiW29iamVjdCBV''@;'; put 'put ''aW50MTZBcnJheV0iOmNhc2UiW29iamVjdCBVaW50MzJBcnJheV0iOnJldHVybiBmdW5jdGlvbiB2TmUoYyxsKXt2YXIgYT1sP2FLKGMuYnVmZmVyKTpjLmJ1ZmZlcjtyZXR1cm4gbmV3IGMuY29uc3RydWN0b3IoYSxjLmJ5dGVPZmZzZXQsYy5sZW5ndGgpfShjLGEpO2Nhc2UiW29iamVjdCBN''@;'; put 'put ''YXBdIjpjYXNlIltvYmplY3QgU2V0XSI6cmV0dXJuIG5ldyBkO2Nhc2UiW29iamVjdCBOdW1iZXJdIjpjYXNlIltvYmplY3QgU3RyaW5nXSI6cmV0dXJuIG5ldyBkKGMpO2Nhc2UiW29iamVjdCBSZWdFeHBdIjpyZXR1cm4gZnVuY3Rpb24gZk5lKGMpe3ZhciBsPW5ldyBjLmNvbnN0cnVjdG9y''@;'; put 'put ''KGMuc291cmNlLGhOZS5leGVjKGMpKTtyZXR1cm4gbC5sYXN0SW5kZXg9Yy5sYXN0SW5kZXgsbH0oYyk7Y2FzZSJbb2JqZWN0IFN5bWJvbF0iOnJldHVybiBmdW5jdGlvbiBnTmUoYyl7cmV0dXJuIFJoZT9PYmplY3QoUmhlLmNhbGwoYykpOnt9fShjKX19O3ZhciBMaGU9T2JqZWN0LmNyZWF0''@;'; put 'put ''ZSxCTmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBjKCl7fXJldHVybiBmdW5jdGlvbihsKXtpZighYlQobCkpcmV0dXJue307aWYoTGhlKXJldHVybiBMaGUobCk7Yy5wcm90b3R5cGU9bDt2YXIgYT1uZXcgYztyZXR1cm4gYy5wcm90b3R5cGU9dm9pZCAwLGF9fSgpO2NvbnN0IGpOZT1CTmU7dmFy''@;'; put 'put ''IE9oZT1xXyYmcV8uaXNNYXA7Y29uc3QgJE5lPU9oZT8kJChPaGUpOmZ1bmN0aW9uIFdOZShjKXtyZXR1cm4gS18oYykmJiJbb2JqZWN0IE1hcF0iPT1pSyhjKX07dmFyIFBoZT1xXyYmcV8uaXNTZXQ7Y29uc3QgUU5lPVBoZT8kJChQaGUpOmZ1bmN0aW9uIFhOZShjKXtyZXR1cm4gS18oYykm''@;'; put 'put ''JiJbb2JqZWN0IFNldF0iPT1pSyhjKX07dmFyIEZoZT0iW29iamVjdCBBcmd1bWVudHNdIixIaGU9IltvYmplY3QgRnVuY3Rpb25dIixOaGU9IltvYmplY3QgT2JqZWN0XSIsdmM9e307dmNbRmhlXT12Y1siW29iamVjdCBBcnJheV0iXT12Y1siW29iamVjdCBBcnJheUJ1ZmZlcl0iXT12Y1si''@;'; put 'put ''W29iamVjdCBEYXRhVmlld10iXT12Y1siW29iamVjdCBCb29sZWFuXSJdPXZjWyJbb2JqZWN0IERhdGVdIl09dmNbIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPXZjWyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT12Y1siW29iamVjdCBJbnQ4QXJyYXldIl09dmNbIltvYmplY3QgSW50MTZBcnJh''@;'; put 'put ''eV0iXT12Y1siW29iamVjdCBJbnQzMkFycmF5XSJdPXZjWyJbb2JqZWN0IE1hcF0iXT12Y1siW29iamVjdCBOdW1iZXJdIl09dmNbTmhlXT12Y1siW29iamVjdCBSZWdFeHBdIl09dmNbIltvYmplY3QgU2V0XSJdPXZjWyJbb2JqZWN0IFN0cmluZ10iXT12Y1siW29iamVjdCBTeW1ib2xdIl09''@;'; put 'put ''dmNbIltvYmplY3QgVWludDhBcnJheV0iXT12Y1siW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iXT12Y1siW29iamVjdCBVaW50MTZBcnJheV0iXT12Y1siW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCx2Y1siW29iamVjdCBFcnJvcl0iXT12Y1tIaGVdPXZjWyJbb2JqZWN0IFdlYWtNYXBd''@;'; put 'put ''Il09ITE7Y29uc3QgRVZlPWZ1bmN0aW9uIGJGKGMsbCxhLGQsaCxmKXt2YXIgdixNPTEmbCxEPTImbCxVPTQmbDtpZihhJiYodj1oP2EoYyxkLGgsZik6YShjKSksdm9pZCAwIT09dilyZXR1cm4gdjtpZighYlQoYykpcmV0dXJuIGM7dmFyIHRlPVhfKGMpO2lmKHRlKXtpZih2PWZ1bmN0aW9u''@;'; put 'put ''IG9OZShjKXt2YXIgbD1jLmxlbmd0aCxhPW5ldyBjLmNvbnN0cnVjdG9yKGwpO3JldHVybiBsJiYic3RyaW5nIj09dHlwZW9mIGNbMF0mJmFOZS5jYWxsKGMsImluZGV4IikmJihhLmluZGV4PWMuaW5kZXgsYS5pbnB1dD1jLmlucHV0KSxhfShjKSwhTSlyZXR1cm4gZnVuY3Rpb24gVEhlKGMs''@;'; put 'put ''bCl7dmFyIGE9LTEsZD1jLmxlbmd0aDtmb3IobHx8KGw9QXJyYXkoZCkpOysrYTxkOylsW2FdPWNbYV07cmV0dXJuIGx9KGMsdil9ZWxzZXt2YXIgb2U9aUsoYyksdmU9b2U9PUhoZXx8IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIj09b2U7aWYobGhlKGMpKXJldHVybiBmdW5jdGlvbiB4''@;'; put 'put ''SGUoYyxsKXtpZihsKXJldHVybiBjLnNsaWNlKCk7dmFyIGE9Yy5sZW5ndGgsZD15aGU/eWhlKGEpOm5ldyBjLmNvbnN0cnVjdG9yKGEpO3JldHVybiBjLmNvcHkoZCksZH0oYyxNKTtpZihvZT09TmhlfHxvZT09RmhlfHx2ZSYmIWgpe2lmKHY9RHx8dmU/e306ZnVuY3Rpb24gek5lKGMpe3Jl''@;'; put 'put ''dHVybiJmdW5jdGlvbiIhPXR5cGVvZiBjLmNvbnN0cnVjdG9yfHxYJChjKT97fTpqTmUoQ2hlKGMpKX0oYyksIU0pcmV0dXJuIEQ/ZnVuY3Rpb24gakhlKGMsbCl7cmV0dXJuIHlGKGMsU2hlKGMpLGwpfShjLGZ1bmN0aW9uIENIZShjLGwpe3JldHVybiBjJiZ5RihsLEokKGwpLGMpfSh2LGMp''@;'; put 'put ''KTpmdW5jdGlvbiBQSGUoYyxsKXtyZXR1cm4geUYoYyxRJChjKSxsKX0oYyxmdW5jdGlvbiBmSGUoYyxsKXtyZXR1cm4gYyYmeUYobCxxJChsKSxjKX0odixjKSl9ZWxzZXtpZighdmNbb2VdKXJldHVybiBoP2M6e307dj1WTmUoYyxvZSxNKX19Znx8KGY9bmV3IFlQZSk7dmFyIHdlPWYuZ2V0''@;'; put 'put ''KGMpO2lmKHdlKXJldHVybiB3ZTtmLnNldChjLHYpLFFOZShjKT9jLmZvckVhY2goZnVuY3Rpb24obnQpe3YuYWRkKGJGKG50LGwsYSxudCxjLGYpKX0pOiROZShjKSYmYy5mb3JFYWNoKGZ1bmN0aW9uKG50LGR0KXt2LnNldChkdCxiRihudCxsLGEsZHQsYyxmKSl9KTt2YXIgV2U9dGU/dm9p''@;'; put 'put ''ZCAwOihVP0Q/R0hlOldIZTpEP0okOnEkKShjKTtyZXR1cm4gZnVuY3Rpb24gR1BlKGMsbCl7Zm9yKHZhciBhPS0xLGQ9bnVsbD09Yz8wOmMubGVuZ3RoOysrYTxkJiYhMSE9PWwoY1thXSxhLGMpOyk7fShXZXx8YyxmdW5jdGlvbihudCxkdCl7V2UmJihudD1jW2R0PW50XSksbmhlKHYsZHQs''@;'; put 'put ''YkYobnQsbCxhLGR0LGMsZikpfSksdn0sX0Y9ZnVuY3Rpb24ga1ZlKGMpe3JldHVybiBFVmUoYyw1KX07dmFyIERWZT1iKDc4ODU1KSxJVmU9Yi5uKERWZSk7bGV0IEx1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5zaG93bkxpYnJhcmllcz01''@;'; put 'put ''MCx0aGlzLmxvYWRNb3JlQ291bnQ9NTAsdGhpcy5pc01pY3Jvc29mdD0hMSx0aGlzLmlzTWljcm9zb2Z0PXRoaXMuaXNJRW9yRURHRSgpLGNvbnNvbGUubG9nKCJJcyBJRSBvciBFZGdlPyIsdGhpcy5pc01pY3Jvc29mdCl9Y29udmVydEpzRGF0ZVRvU2FzRGF0ZShhLGQ9ImRheXMiKXtsZXQg''@;'; put 'put ''aCxmPTA7aD1hIGluc3RhbmNlb2YgRGF0ZT9hOm5ldyBEYXRlKGEpLGY9bmV3IERhdGUoRGF0ZS5VVEMoaC5nZXRGdWxsWWVhcigpLGguZ2V0TW9udGgoKSxoLmdldERhdGUoKSxoLmdldEhvdXJzKCksaC5nZXRNaW51dGVzKCksaC5nZXRTZWNvbmRzKCkpKS52YWx1ZU9mKCk7Y29uc3QgRD1m''@;'; put 'put ''KzMxNTYxOTJlNTtzd2l0Y2goZCl7Y2FzZSJkYXlzIjp7bGV0IFU9RC84NjRlNTtyZXR1cm4gVT1NYXRoLmFicyhVKSxVPU1hdGguZmxvb3IoVSksVX1jYXNlInNlY29uZHMiOnJldHVybiBELzFlM31yZXR1cm4gMH1jb252ZXJ0U2FzRGF5c1RvSnNEYXRlKGEsZD0iZGF5cyIpe2lmKCJudW1i''@;'; put 'put ''ZXIiIT10eXBlb2YgYSYmKGE9cGFyc2VGbG9hdChhKSksInNlY29uZHMiPT09ZCl7bGV0IE09MWUzKmEtMzE1NjE5MmU1O3JldHVybiBNKz02MCpuZXcgRGF0ZShNKS5nZXRUaW1lem9uZU9mZnNldCgpKjFlMyxuZXcgRGF0ZShNKX1yZXR1cm4gbmV3IERhdGUoODY0ZTUqYS0zMTU2MTkyZTUp''@;'; put 'put ''fXRyZWVPbkZpbHRlcihhLGQpe2xldCBoPWEuc2VhcmNoU3RyaW5nP2Euc2VhcmNoU3RyaW5nOiIiLGY9ZC5zcGxpdCgiLiIpWzBdLHY9ZC5zcGxpdCgiLiIpWzFdLE09ZisiQWxsIjthW2ZdJiYoYVtNXXx8KGFbTV09dGhpcy5kZWVwQ2xvbmUoYVtmXSkpLGFbZl09dGhpcy5kZWVwQ2xvbmUo''@;'; put 'put ''YVtNXSksaC5sZW5ndGg+MCYmKGFbZl09YVtmXS5maWx0ZXIodj9EPT5EW3ZdLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoaC50b0xvd2VyQ2FzZSgpKTpEPT5ELnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoaC50b0xvd2VyQ2FzZSgpKSkpKX1saWJyYXJ5T25GaWx0ZXIoYSxkLGgpe2QubGVuZ3Ro''@;'; put 'put ''PjA/YS5mb3JFYWNoKGY9PntmW2hdLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZC50b0xvd2VyQ2FzZSgpKT8oZi5oaWRkZW49ITEsZi5pbkZvcmVncm91bmQ9ITApOihmLmhpZGRlbj0hMCxmLmluRm9yZWdyb3VuZD0hMSl9KToodGhpcy5yZXNldEFycmF5RmlsdGVyKGEpLHRoaXMuZGlzcGxh''@;'; put 'put ''eUxpYnJhcmllcyhhKSl9ZGlzcGxheUxpYnJhcmllcyhhLGQpe2Q/dGhpcy5zaG93bkxpYnJhcmllcys9dGhpcy5sb2FkTW9yZUNvdW50Oih0aGlzLnNob3duTGlicmFyaWVzPTUwLHRoaXMucmVzZXRMaWJyYXJ5Rm9yZWdyb3VuZChhKSk7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aCYmaCE9PXRo''@;'; put 'put ''aXMuc2hvd25MaWJyYXJpZXM7aCsrKWFbaF0uaW5Gb3JlZ3JvdW5kPSEwfXJlc2V0TGlicmFyeUZvcmVncm91bmQoYSl7Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspYVtkXS5pbkZvcmVncm91bmQ9ITF9bWV0YU9iamVjdE9uRmlsdGVyKGEsZCxoKXtkLmxlbmd0aD4wPyh0aGlzLnJlc2V0''@;'; put 'put ''QXJyYXlGaWx0ZXIoYSksYS5mb3JFYWNoKGY9PntmW2hdLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZC50b0xvd2VyQ2FzZSgpKXx8KGYuaGlkZGVuPSEwKX0pKTp0aGlzLnJlc2V0QXJyYXlGaWx0ZXIoYSl9cmVzZXRBcnJheUZpbHRlcihhKXthLmZvckVhY2goZD0+e2QuaGlkZGVuPSExLGQu''@;'; put 'put ''aW5Gb3JlZ3JvdW5kJiZkZWxldGUgZC5pbkZvcmVncm91bmR9KX1pc0lFb3JFREdFKCl7dmFyIGE9d2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7cmV0dXJuIGEuaW5kZXhPZigiTVNJRSAiKT4wfHwoYS5pbmRleE9mKCJUcmlkZW50LyIpPjA/KGEuaW5kZXhPZigicnY6IiksITApOmEuaW5k''@;'; put 'put ''ZXhPZigiRWRnZS8iKT4wKX1jb252ZXJ0T2JqZWN0c1RvQXJyYXkoYSxkPSExKXtyZXR1cm4gZCYmKGE9dGhpcy5kZWVwQ2xvbmUoYSkpLGEubWFwKGg9Pk9iamVjdC5rZXlzKGgpLm1hcChmPT5oW2ZdKSl9YWRkTGVhZGluZ1plcm8oYSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBhJiYoYT1h''@;'; put 'put ''LnRvU3RyaW5nKCkpLGEubGVuZ3RoPDI/IjAiK2E6YX1kZWxldGVLZXlzQW5kSGFzaChhLGQsaD0hMCl7Y29uc3QgZj1oP3RoaXMuZGVlcENsb25lKGEpOmE7Zm9yKGxldCB2IG9mIGQpZGVsZXRlIGZbdl07cmV0dXJuIElWZSgpKEpTT04uc3RyaW5naWZ5KGYpKS50b1N0cmluZygpfWRvd25s''@;'; put 'put ''b2FkVGV4dEZpbGUoYSxkKXtjb25zdCBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtoLnNldEF0dHJpYnV0ZSgiaHJlZiIsImRhdGE6dGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04LCIrZW5jb2RlVVJJQ29tcG9uZW50KGQpKSxoLnNldEF0dHJpYnV0ZSgiZG93bmxvYWQiLGErIi50eHQi''@;'; put 'put ''KSxoLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaCksaC5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaCl9Y29udmVydEFycmF5VmFsdWVzKGEsZCl7aWYoYS5sZW5ndGg8MSlyZXR1cm5bXTtzd2l0Y2goZCl7Y2FzZSJudW1iZXIiOnJl''@;'; put 'put ''dHVybiBhLm1hcChoPT4xKmgpO2Nhc2Uic3RyaW5nIjpyZXR1cm4gYS50b1N0cmluZygpLnNwbGl0KCIsIil9fWlzU3RyZWFtaW5nVml5YSgpe3JldHVybiJTQVNWSVlBIj09PXRoaXMuc2FzU2VydmljZS5nZXRTZXJ2ZXJUeXBlKCkmJiEoIWxvY2F0aW9uLnNlYXJjaC50b0xvd2VyQ2FzZSgp''@;'; put 'put ''LmluY2x1ZGVzKCI/X2ZpbGU9Iil8fCFsb2NhdGlvbi5wYXRobmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCIvc2Fzam9iZXhlY3V0aW9uIikpfWRlYm91bmNlQ2FsbChhLGQpe2NsZWFyVGltZW91dCh0aGlzLmRlYm91bmNlVGltZW91dCksdGhpcy5kZWJvdW5jZVRpbWVvdXQ9c2V0VGlt''@;'; put 'put ''ZW91dChkLGEpfWRlZXBDbG9uZShhKXtyZXR1cm4gX0YoYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoSHIoS3MpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJv''@;'; put 'put ''b3QifSl9fXJldHVybiBjfSkoKSxPMT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXt0aGlzLmxvZ2dlclNlcnZpY2U9YSx0aGlzLmFwcFN0b3JlU2VydmljZT1kLHRoaXMuZXZlbnRTZXJ2aWNlPWgsdGhpcy5zYXNTZXJ2aWNlPWYsdGhpcy5oZWxwZXJTZXJ2aWNlPXYs''@;'; put 'put ''dGhpcy5yb3V0ZXI9TSx0aGlzLnVzZXJDb3VudExpbWl0YXRpb249ITEsdGhpcy5saWNlbnNlS2V5RGF0YT1udWxsLHRoaXMuX2xpY2VuY2VTdGF0ZT1GJCx0aGlzLmFsbEZlYXR1cmVzT249e3ZpZXdlcl9yb3dzX2FsbG93ZWQ6MS8wLGVkaXRvcl9yb3dzX2FsbG93ZWQ6MS8wLHN0YWdlX3Jv''@;'; put 'put ''d3NfYWxsb3dlZDoxLzAsaGlzdG9yeV9yb3dzX2FsbG93ZWQ6MS8wLHN1Ym1pdF9yb3dzX2xpbWl0OjEvMCx0YWJsZXNfaW5fbGlicmFyeV9saW1pdDoxLzAsdmlld2JveF9saW1pdDoxLzAsbGluZWFnZV9kYWlseV9saW1pdDoxLzAsdmlld2JveDohMCxmaWxlVXBsb2FkOiEwLGVkaXRSZWNv''@;'; put 'put ''cmQ6ITAsYWRkUmVjb3JkOiEwfSx0aGlzLmZyZWVUaWVyTGljZW5jZURhdGE9e2RlbW86ITAsaG90X2xpY2Vuc2Vfa2V5OnRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRpbmdzKCk/LmhvdExpY2VuY2VLZXksdXNlcnNfYWxsb3dlZDp0aGlzLl9saWNlbmNlU3RhdGUudXNl''@;'; put 'put ''cnNfYWxsb3dlZHx8MSx2YWxpZF91bnRpbDphaCgpKCkuYWRkKDEsInllYXIiKS5mb3JtYXQoIllZWVktTU0tREQiKSxzaXRlX2lkOiIiLHNpdGVfaWRfbXVsdGlwbGU6W119LHRoaXMuaXNBcHBBY3RpdmF0ZWQ9bmV3IE1pKG51bGwpLHRoaXMuaXNBcHBPdmVyQ2FwYWNpdHk9bmV3IE1pKCEx''@;'; put 'put ''KSx0aGlzLmN1cnJlbnRVc2VyQ2FuUmVnaXN0ZXI9bmV3IE1pKCExKSx0aGlzLmFwcExvY2tlZD1uZXcgTWkoITEpLHRoaXMubGljZW5zZUV4cGlyZXNJbkRheXM9bmV3IE1pKG51bGwpLHRoaXMuaXNBcHBGcmVlVGllcj1uZXcgTWkoITEpLHRoaXMubGljZW5jZVByb2JsZW09bmV3IE1pKG51''@;'; put 'put ''bGwpLHRoaXMuaG90X2xpY2Vuc2Vfa2V5PW5ldyBNaSh2b2lkIDApLHRoaXMubGljZW5jZVN0YXRlPW5ldyBNaSh0aGlzLl9saWNlbmNlU3RhdGUpLHRoaXMuc2FzU2VydmljZS5pbmNvcnJlY3RTaXRlSWRFbWl0dGVyLnN1YnNjcmliZShEPT57aWYobnVsbCE9PXRoaXMuaXNBcHBBY3RpdmF0''@;'; put 'put ''ZWQudmFsdWUmJiF0aGlzLmlzQXBwRnJlZVRpZXIudmFsdWUpe2NvbnN0IFU9YC9saWNlbnNpbmcva2V5P2Vycm9yPW1pc3NtYXRjaCZtaXNzbWF0Y2hJZD0ke0R9JmZvcmNlPXRydWVgO3RoaXMubGljZW5jZVByb2JsZW0ubmV4dChVKSx0aGlzLmRlYWN0aXZhdGVBcHAoVSl9fSl9YWN0aXZh''@;'; put 'put ''dGlvbihhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtkLmZyZWVUaWVyTGljZW5jZURhdGEuaG90X2xpY2Vuc2Vfa2V5PWQuYXBwU3RvcmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRpbmdzKCk/LmhvdExpY2VuY2VLZXkseWllbGQgZC5zZXRTdGFydHVwc2VydmljZVJ1bGVz''@;'; put 'put ''KGEpLHlpZWxkIGQubGljZW5zaW5nKGEuZ2xvYnZhcnMsYS5TWVNTSVRFKX0pKCl9c2V0U3RhcnR1cHNlcnZpY2VSdWxlcyhhKXt0aGlzLl9saWNlbmNlU3RhdGUuZWRpdFJlY29yZD0iWUVTIiE9PWEuZ2xvYnZhcnNbMF0uRENfUkVTVFJJQ1RfRURJVFJFQ09SRH1saWNlbnNpbmcoYSxkKXt2''@;'; put 'put ''YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtpZighYXx8IWFbMF0pe2NvbnN0IHY9J0Vycm9yIGdldHRpbmcgIkdsb2J2YXJzIiBmcm9tIHN0YXJ0dXBzZXJ2aWNlIHJlc3BvbnNlLic7cmV0dXJuIGNvbnNvbGUuZXJyb3IodiksaC5pc0FwcEFjdGl2YXRlZC5uZXh0KCExKSx2b2lk''@;'; put 'put ''IGgucm91dGVyLm5hdmlnYXRlQnlVcmwoYC9saWNlbnNpbmcva2V5P2Vycm9yPWludmFsaWQmZGV0YWlscz0ke2J0b2Eodil9YCl9bGV0IGY9YVswXTtyZXR1cm4gdm9pZCAwPT09Zi5MSUNFTkNFX0tFWXx8dm9pZCAwPT09Zi5BQ1RJVkFUSU9OX0tFWXx8bnVsbD09Zi5SRUdJU1RFUkNPVU5U''@;'; put 'put ''fHxudWxsPT1mLklTUkVHSVNURVJFRD8oY29uc29sZS5lcnJvcigiU29tZSBvZiBnbG9idmFycyBhcmUgbm90IHByZXNlbnQiKSxoLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpLHZvaWQgaC5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3IiLCJTb21lIG9mIHRoZSBnbG9idmFycyBh''@;'; put 'put ''cmUgbm90IHByZXNlbnQgaW4gdGhlIHN0YXJ0dXBzZXJ2aWNlIikpOmYuTElDRU5DRV9LRVkmJmYuQUNUSVZBVElPTl9LRVk/KGgubGljZW5jZUtleT1mLkxJQ0VOQ0VfS0VZLGguYWN0aXZhdGlvbktleT1mLkFDVElWQVRJT05fS0VZLHZvaWQoeWllbGQgaC5kZWNyeXB0TGljZW5zZUtleShm''@;'; put 'put ''LkxJQ0VOQ0VfS0VZLGYuQUNUSVZBVElPTl9LRVkpLnRoZW4oZnVuY3Rpb24oKXt2YXIgdj1lZShmdW5jdGlvbiooTSl7eWllbGQgaC5hcHBsaWNhdGlvbkFjdGl2YXRpb24oTSxmLGQpfSk7cmV0dXJuIGZ1bmN0aW9uKE0pe3JldHVybiB2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksZnVu''@;'; put 'put ''Y3Rpb24oKXt2YXIgdj1lZShmdW5jdGlvbiooTSl7Y29uc3QgRD1gRXJyb3IgZGVjcnlwdGluZyBsaWNlbnNlIGtleS4gJHtNfWA7Y29uc29sZS5lcnJvcihEKTtjb25zdCBVPWAvbGljZW5zaW5nL2tleT9lcnJvcj1pbnZhbGlkJmRldGFpbHM9JHtidG9hKEQpfSZmb3JjZT10cnVlYDtoLmxp''@;'; put 'put ''Y2VuY2VQcm9ibGVtLm5leHQoVSksaC5yb3V0ZXIubmF2aWdhdGVCeVVybChVKSxzZXRUaW1lb3V0KCgpPT5oLmFwcGxpY2F0aW9uQWN0aXZhdGlvbihoLmZyZWVUaWVyTGljZW5jZURhdGEsZixkLCEwKSl9KTtyZXR1cm4gZnVuY3Rpb24oTSl7cmV0dXJuIHYuYXBwbHkodGhpcyxhcmd1bWVu''@;'; put 'put ''dHMpfX0oKSkpKTp5aWVsZCBoLmFwcGxpY2F0aW9uQWN0aXZhdGlvbihoLmZyZWVUaWVyTGljZW5jZURhdGEsZixkKX0pKCl9YXBwbGljYXRpb25BY3RpdmF0aW9uKGEsZCxoLGYpe2Z8fChmPSExKSx0aGlzLnNldFNpdGVJZChhKSwhYS5kZW1vJiZkJiZoJiZ0aGlzLmhhbmRsZVNpdGVJZE1p''@;'; put 'put ''c3NtYXRjaChhLGQsaCxmKTtsZXQgdj12b2lkIDAhPT1hLmhvdF9saWNlbnNlX2tleT9hLmhvdF9saWNlbnNlX2tleTp0aGlzLmhvdF9saWNlbnNlX2tleS52YWx1ZTt2fHwodj10aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpPy5ob3RMaWNlbmNlS2V5KSx0aGlz''@;'; put 'put ''LmhvdF9saWNlbnNlX2tleS5uZXh0KHYpLHRoaXMudXNlckNvdW50TGltaXRhdGlvbiYmdGhpcy5oYW5kbGVVc2Vyc0FsbG93ZWQoYSksdGhpcy5saWNlbnNlS2V5RGF0YT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGEpLHdpbmRvdy5hcHBpbmZvKCk7Y29uc3R7ZXhwaXJ5X2RhdGU6''@;'; put 'put ''TSxkYXlzVG9FeHBpcnk6RH09dGhpcy5jYWxjdWxhdGVFeHBpcnkoYSk7aWYod2luZG93LmxpY2Vuc2VFeHBpcmVzSW49RCx0aGlzLmxpY2Vuc2VFeHBpcmVzSW5EYXlzLm5leHQoRCksRDw9MClyZXR1cm4gY29uc29sZS5lcnJvcigiTGljZW5zZSBrZXkgaGFzIGV4cGlyZWQiKSx2b2lkKGQm''@;'; put 'put ''JmgmJnRoaXMuaGFuZGxlRXhwaXJ5KE0sZCxoLGYpKTt0aGlzLmlzQXBwRnJlZVRpZXIubmV4dCghIWEuZGVtbyksZCYmdGhpcy5oYW5kbGVVc2VyUmVnaXN0cmF0aW9uKGEsZCxmKSx0aGlzLmRlY29kZUxpY2VuY2VGZWF0dXJlcyhhKSx0aGlzLmxpY2VuY2VTdGF0ZS5uZXh0KHRoaXMuX2xp''@;'; put 'put ''Y2VuY2VTdGF0ZSl9ZGVjb2RlTGljZW5jZUZlYXR1cmVzKGEpe2lmKCFhLmZlYXR1cmVzKXtpZihhLmRlbW8pcmV0dXJuO3JldHVybiB2b2lkKHRoaXMuX2xpY2VuY2VTdGF0ZT10aGlzLmFsbEZlYXR1cmVzT24pfWNvbnN0IGQ9YS5mZWF0dXJlcy5zcGxpdCgiLCIpO3RoaXMuX2xpY2VuY2VT''@;'; put 'put ''dGF0ZT17Li4udGhpcy5fbGljZW5jZVN0YXRlLHZpZXdlcl9yb3dzX2FsbG93ZWQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW3UyLnZpZXdlcl9yb3dzX2FsbG93ZWRdKSxlZGl0b3Jfcm93c19hbGxvd2VkOnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFt1Mi5lZGl0b3Jfcm93c19hbGxvd2Vk''@;'; put 'put ''XSksc3RhZ2Vfcm93c19hbGxvd2VkOnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFt1Mi5zdGFnZV9yb3dzX2FsbG93ZWRdKSxoaXN0b3J5X3Jvd3NfYWxsb3dlZDp0aGlzLnBhcnNlRmVhdHVyZVZhbHVlKGRbdTIuaGlzdG9yeV9yb3dzX2FsbG93ZWRdKSxzdWJtaXRfcm93c19saW1pdDp0aGlz''@;'; put 'put ''LnBhcnNlRmVhdHVyZVZhbHVlKGRbdTIuc3VibWl0X3Jvd3NfbGltaXRdKSx0YWJsZXNfaW5fbGlicmFyeV9saW1pdDp0aGlzLnBhcnNlRmVhdHVyZVZhbHVlKGRbdTIudGFibGVzX2luX2xpYnJhcnlfbGltaXRdKSx2aWV3Ym94X2xpbWl0OnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFt1Mi52''@;'; put 'put ''aWV3Ym94X2xpbWl0XSksbGluZWFnZV9kYWlseV9saW1pdDp0aGlzLnBhcnNlRmVhdHVyZVZhbHVlKGRbdTIubGluZWFnZV9kYWlseV9saW1pdF0pLHZpZXdib3g6dGhpcy5wYXJzZUZlYXR1cmVUb2dnbGUoZFt1Mi52aWV3Ym94XSksZmlsZVVwbG9hZDp0aGlzLnBhcnNlRmVhdHVyZVRvZ2ds''@;'; put 'put ''ZShkW3UyLmZpbGVVcGxvYWRdKSxlZGl0UmVjb3JkOnRoaXMucGFyc2VGZWF0dXJlVG9nZ2xlKGRbdTIuZWRpdFJlY29yZF0pLGFkZFJlY29yZDp0aGlzLnBhcnNlRmVhdHVyZVRvZ2dsZShkW3UyLmFkZFJlY29yZF0pfSx0aGlzLmxvZ2dlclNlcnZpY2UubG9nKCJMaWNlbmNlIHN0YXRlOiIs''@;'; put 'put ''dGhpcy5fbGljZW5jZVN0YXRlKX1wYXJzZUZlYXR1cmVWYWx1ZShhKXtyZXR1cm4iLSI9PT1hPzEvMDpwYXJzZUludChhKX1wYXJzZUZlYXR1cmVUb2dnbGUoYSl7cmV0dXJuISFwYXJzZUludChhKX1kZWNyeXB0TGljZW5zZUtleShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNl''@;'; put 'put ''KGZ1bmN0aW9uKCl7dmFyIGY9ZWUoZnVuY3Rpb24qKHYsTSl7aWYoIXdpbmRvdy5jcnlwdG98fCF3aW5kb3cuY3J5cHRvLnN1YnRsZSl0cnl7bGV0IHZlPWF0b2IoYS5zcGxpdCgiIikucmV2ZXJzZSgpLmpvaW4oIiIpKTt2KEpTT04ucGFyc2UodmUpKX1jYXRjaCh2ZSl7TSgiRXJyb3IgcGFy''@;'; put 'put ''c2luZyBodHRwIGxpY2Vuc2Uga2V5IGRhdGEuICIrdmUpfWxldCBVLEQ9eWllbGQgaC5iYXNlNjRUb0FycmF5QnVmZmVyKGEpLmNhdGNoKHZlPT57TSh2ZSl9KTtjb25zdCB0ZT15aWVsZCBoLmJhc2U2NFRvQXJyYXlCdWZmZXIoZCkuY2F0Y2godmU9PntNKHZlKX0pO2lmKCF0ZSlyZXR1cm4g''@;'; put 'put ''dm9pZCBNKCJNaXNzaW5nIGFjdGl2YXRpb24ga2V5Iik7bGV0IG9lO1U9dGU7dHJ5e29lPXlpZWxkIHdpbmRvdy5jcnlwdG8uc3VidGxlLmltcG9ydEtleSgicGtjczgiLFUse25hbWU6IlJTQS1PQUVQIixoYXNoOiJTSEEtMjU2In0sITAsWyJkZWNyeXB0Il0pfWNhdGNoKHZlKXtNKCJVbmFi''@;'; put 'put ''bGUgdG8gaW1wb3J0IGRlY3J5cHRpb24ga2V5OiAiK3ZlKX1pZihvZSlpZihEKXRyeXt3aW5kb3cuY3J5cHRvLnN1YnRsZS5kZWNyeXB0KHtuYW1lOiJSU0EtT0FFUCIsaGFzaDp7bmFtZToiU0hBLTI1NiJ9fSxvZSxEKS50aGVuKHZlPT57bGV0IHdlPShuZXcgQUxlLlRleHREZWNvZGVyKS5k''@;'; put 'put ''ZWNvZGUodmUpO3RyeXt2KEpTT04ucGFyc2Uod2UpKX1jYXRjaChGZSl7TSgiRXJyb3IgcGFyc2luZyBsaWNlbnNlIGtleSBkYXRhLiAiK0ZlKX19LHZlPT57TSh2ZSl9KX1jYXRjaCh2ZSl7TSh2ZSl9ZWxzZSBNKCJMaWNlbnNlIGtleSBieXRlcyBtaXNzaW5nIik7ZWxzZSBNKCJVbmFibGUg''@;'; put 'put ''dG8gaW1wb3J0IGRlY3J5cHRpb24ga2V5Iil9KTtyZXR1cm4gZnVuY3Rpb24odixNKXtyZXR1cm4gZi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKX1nZXRIb3RMaWNlbnNlS2V5KCl7cmV0dXJuIHRoaXMuaG90X2xpY2Vuc2Vfa2V5LnZhbHVlfWdldExpY2Vuc2VLZXlEYXRhKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMubGljZW5zZUtleURhdGF9ZGVhY3RpdmF0ZUFwcChhKXt0aGlzLl9saWNlbmNlU3RhdGU9RiQsdGhpcy5hcHBsaWNhdGlvbkFjdGl2YXRpb24odGhpcy5mcmVlVGllckxpY2VuY2VEYXRhKSxhJiZ0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGEpfWNoZWNrTGluZWFnZUxpbWl0KGEp''@;'; put 'put ''e2lmKHRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmxpbmVhZ2VfZGFpbHlfbGltaXQ9PT0xLzApcmV0dXJuITE7Y29uc3QgZD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgibGluZWFnZV9yZW5kZXJzIiksaD1haCgpKCkudmFsdWVPZigpO2lmKCFkKXJldHVybiBhfHx0aGlzLnNldExpbmVhZ2VSZW5k''@;'; put 'put ''ZXIoaCwxKSwhMTtjb25zdCBmPXBhcnNlSW50KGQuc3BsaXQoIiwiKVswXSksdj1wYXJzZUludChkLnNwbGl0KCIsIilbMV0pO3JldHVybiBhaCgpKGYpLmlzU2FtZShhaCgpKCksImRheSIpP3Y+PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmxpbmVhZ2VfZGFpbHlfbGltaXR8fChhfHx0aGlz''@;'; put 'put ''LnNldExpbmVhZ2VSZW5kZXIoaCx2KzEpLCExKTooYXx8dGhpcy5zZXRMaW5lYWdlUmVuZGVyKGgsMSksITEpfXNldExpbmVhZ2VSZW5kZXIoYSxkKXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgibGluZWFnZV9yZW5kZXJzIixgJHthfSwke2R9YCl9YmFzZTY0VG9BcnJheUJ1ZmZlcihhKXtyZXR1''@;'; put 'put ''cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgZD1lZShmdW5jdGlvbiooaCxmKXtoKHhkZS5EKGEpKX0pO3JldHVybiBmdW5jdGlvbihoLGYpe3JldHVybiBkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpfWFycmF5QnVmZmVyVG9CYXNlNjQoYSl7cmV0dXJuIG5ldyBQcm9taXNlKChk''@;'; put 'put ''LGgpPT57ZCh4ZGUubChhKSl9KX1zZXRTaXRlSWQoYSl7YS5zaXRlX2lkX211bHRpcGxlP3RoaXMuc2FzU2VydmljZS5zZXRMaWNlbnNlU2l0ZUlkKGEuc2l0ZV9pZF9tdWx0aXBsZSk6YS5zaXRlX2lkJiZ0aGlzLnNhc1NlcnZpY2Uuc2V0TGljZW5zZVNpdGVJZChhLnNpdGVfaWQpfWhhbmRs''@;'; put 'put ''ZVNpdGVJZE1pc3NtYXRjaChhLGQsaCxmKXtsZXQgdj0hMSxNPSExO2lmKCghYS5zaXRlX2lkfHxhLnNpdGVfaWQhPT1oKSYmKHY9ITApLCghYS5zaXRlX2lkX211bHRpcGxlfHwhYS5zaXRlX2lkX211bHRpcGxlLmluY2x1ZGVzKGgpKSYmKE09ITApLHYmJk0pcmV0dXJuIGNvbnNvbGUuZXJy''@;'; put 'put ''b3IoIlRoZSBrZXkgcHJvdmlkZWQgaXMgZm9yIGRpZmZlcmVudCBvcmdhbml6YXRpb24uIiksdm9pZCBzZXRUaW1lb3V0KCgpPT57Y29uc3QgRD0iL2xpY2Vuc2luZy9rZXk/ZXJyb3I9bWlzc21hdGNoJmZvcmNlPXRydWUiO3RoaXMubGljZW5jZVByb2JsZW0ubmV4dChEKSx0aGlzLl9saWNl''@;'; put 'put ''bmNlU3RhdGU9RiQsdGhpcy5hcHBsaWNhdGlvbkFjdGl2YXRpb24odGhpcy5mcmVlVGllckxpY2VuY2VEYXRhLGQsaCwhMCksZnx8dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChEKX0pfWNhbGN1bGF0ZUV4cGlyeShhKXtsZXQgZD1haCgpKGEudmFsaWRfdW50aWwsIllZWVktTU0tREQiKS5z''@;'; put 'put ''dGFydE9mKCJkYXkiKSxoPWFoKCkoKS5zdGFydE9mKCJkYXkiKSxmPWQuZGlmZihoLCJkYXlzIik7cmV0dXJue2V4cGlyeV9kYXRlOmQsZGF5c1RvRXhwaXJ5OmZ9fWhhbmRsZUV4cGlyeShhLGQsaCxmKXtzZXRUaW1lb3V0KCgpPT57Y29uc3Qgdj1gL2xpY2Vuc2luZy9rZXk/Zm9yY2U9dHJ1''@;'; put 'put ''ZSZlcnJvcj1leHBpcmVkJmRldGFpbHM9JHtidG9hKCJFeHBpcnkgZGF0ZTogIithLmZvcm1hdCgiREQvTU0vWVlZWSIpKX1gO3RoaXMubGljZW5jZVByb2JsZW0ubmV4dCh2KSx0aGlzLmFwcGxpY2F0aW9uQWN0aXZhdGlvbih0aGlzLmZyZWVUaWVyTGljZW5jZURhdGEsZCxoLCEwKSxmfHx0''@;'; put 'put ''aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHYpfSl9aGFuZGxlVXNlcnNBbGxvd2VkKGEpe2EuZGVtbyYmdm9pZCAwIT09dGhpcy5fbGljZW5jZVN0YXRlLnVzZXJzX2FsbG93ZWQmJihhLnVzZXJzX2FsbG93ZWQ9YS51c2Vyc19hbGxvd2VkPjA/YS51c2Vyc19hbGxvd2VkOnRoaXMuX2xpY2Vu''@;'; put 'put ''Y2VTdGF0ZS51c2Vyc19hbGxvd2VkKSx0aGlzLl9saWNlbmNlU3RhdGUudXNlcnNfYWxsb3dlZD1hLnVzZXJzX2FsbG93ZWR9aGFuZGxlVXNlclJlZ2lzdHJhdGlvbihhLGQsaCl7aWYodGhpcy51c2VyQ291bnRMaW1pdGF0aW9uJiYoZC5SRUdJU1RFUkNPVU5UPmEudXNlcnNfYWxsb3dlZD8o''@;'; put 'put ''Y29uc29sZS53YXJuKCJBcHAgaGFzIG1vcmUgdXNlcnMgcmVnaXN0ZXJlZCB0aGVuIGxpY2Vuc2VkLiIpLHRoaXMuaXNBcHBPdmVyQ2FwYWNpdHkubmV4dCghMCkpOmQuUkVHSVNURVJDT1VOVD09PWEudXNlcnNfYWxsb3dlZCYmY29uc29sZS53YXJuKCJBcHAgaGFzIGhpdCBsaW1pdCBvZiB1''@;'; put 'put ''c2VycyByZWdpc3RlcmVkLiIpKSwxIT09ZC5JU1JFR0lTVEVSRUQpcmV0dXJuIGQuUkVHSVNURVJDT1VOVDxhLnVzZXJzX2FsbG93ZWR8fCF0aGlzLnVzZXJDb3VudExpbWl0YXRpb24/KGNvbnNvbGUubG9nKCJVc2VyIGNhbiByZWdpc3RlciIpLHRoaXMuY3VycmVudFVzZXJDYW5SZWdpc3Rl''@;'; put 'put ''ci5uZXh0KCEwKSx0aGlzLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpLHZvaWQoaHx8dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2xpY2Vuc2luZy9yZWdpc3RlciIpKSk6KHRoaXMuY3VycmVudFVzZXJDYW5SZWdpc3Rlci5uZXh0KCExKSx0aGlzLmlzQXBwQWN0aXZhdGVkLm5leHQoITEp''@;'; put 'put ''LHZvaWQoaHx8dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2xpY2Vuc2luZy9saW1pdCIpKSk7dGhpcy5pc0FwcEFjdGl2YXRlZC5uZXh0KCEwKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShIcihvaCksSHIodTkpLEhyKEVjKSxIcihLcyks''@;'; put 'put ''SHIoTHUpLEhyKG5sKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksd0Y9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxEKXt0aGlzLmxpY2VuY2VTZXJ2''@;'; put 'put ''aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLnNhc1NlcnZpY2U9aCx0aGlzLmxvZ2dlclNlcnZpY2U9Zix0aGlzLmFwcFNldHRpbmdzU2VydmljZT12LHRoaXMucm91dGVyPU0sdGhpcy5hcHBTdG9yZVNlcnZpY2U9RCx0aGlzLnN5c3NpdGU9bmV3IE1pKG51bGwpLHRoaXMuZW52aXJv''@;'; put 'put ''bm1lbnRJbmZvPXt9LHRoaXMuc3Vic2NyaWJlKCksdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZSh0ZT0+e3RlIGluc3RhbmNlb2YgZjQmJiIvZGVwbG95Ij09PXRlLnVybCYmdGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKX0pO2NvbnN0IFU9dGhpcy5hcHBTZXR0aW5n''@;'; put 'put ''c1NlcnZpY2Uuc2V0dGluZ3MudmFsdWU7VS5wZXJzaXN0U2VsZWN0ZWRUaGVtZSYmdGhpcy5ldmVudFNlcnZpY2UudG9nZ2xlRGFya01vZGUoVS5zZWxlY3RlZFRoZW1lIT09el8ubGlnaHQmJlUuc2VsZWN0ZWRUaGVtZT09PXpfLmRhcmspfXNhc1NlcnZpY2VJbml0KCl7dGhpcy5zYXNTZXJ2''@;'; put 'put ''aWNlLnNhc1NlcnZpY2VJbml0KCl9c3Vic2NyaWJlKCl7dGhpcy5zYXNTZXJ2aWNlLmxvYWRTdGFydHVwU2VydmljZUVtaXR0ZXIuc3Vic2NyaWJlKCgpPT57dGhpcy5zdGFydFVwRGF0YSgpfSksdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3RTaXRlSWRFbWl0dGVyLnN1YnNjcmliZShhPT57dGhp''@;'; put 'put ''cy5wYXRjaFN5c3NpdGUoYSl9KX1nZXRFbnZpcm9ubWVudEluZm8oKXtyZXR1cm4gdGhpcy5lbnZpcm9ubWVudEluZm99cGF0Y2hTeXNzaXRlKGEpe2xldCBkPXRoaXMuc3lzc2l0ZS5nZXRWYWx1ZSgpO2QmJihkLmluY2x1ZGVzKGEpfHwoZC5wdXNoKGEpLHRoaXMuc3lzc2l0ZS5uZXh0KGQp''@;'; put 'put ''KSl9c3RhcnRVcERhdGEoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgZD0hMTt5aWVsZCBhLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3N0YXJ0dXBzZXJ2aWNlIixudWxsKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGg9ZWUoZnVuY3Rpb24qKGYpe2Euc3lzc2l0ZS5u''@;'; put 'put ''ZXh0KFtmLmFkYXB0ZXJSZXNwb25zZS5TWVNTSVRFXSk7bGV0IHY9W107aWYoKCFmLmFkYXB0ZXJSZXNwb25zZS5nbG9idmFyc3x8Zi5hZGFwdGVyUmVzcG9uc2UuZ2xvYnZhcnMmJiFmLmFkYXB0ZXJSZXNwb25zZS5nbG9idmFyc1swXSkmJnYucHVzaCgiR2xvYnZhcnMiKSxmLmFkYXB0ZXJS''@;'; put 'put ''ZXNwb25zZS5zYXNkYXRhc2V0c3x8di5wdXNoKCJTYXNkYXRhc2V0cyIpLGYuYWRhcHRlclJlc3BvbnNlLnNhc2xpYnN8fHYucHVzaCgiU2FzbGlicyIpLGYuYWRhcHRlclJlc3BvbnNlLnhsbWFwc3x8di5wdXNoKCJYTE1hcHMiKSx2Lmxlbmd0aD4wKXJldHVybiBkPSEwLGEuZXZlbnRTZXJ2''@;'; put 'put ''aWNlLnNob3dJbmZvTW9kYWwoIkVycm9yIixgJHt2LmpvaW4oIiwgIil9IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgc3RhcnR1cHNlcnZpY2VgKSx2b2lkIGEubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQubmV4dCghMSk7Y29uc3QgTT1hLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0''@;'; put 'put ''ZXJTZXR0aW5ncygpO2EuZW52aXJvbm1lbnRJbmZvPXtTWVNTSVRFOmYuYWRhcHRlclJlc3BvbnNlLlNZU1NJVEUsU1lTU0NQTDpmLmFkYXB0ZXJSZXNwb25zZS5TWVNTQ1BMLFNZU1RDUElQSE9TVE5BTUU6Zi5hZGFwdGVyUmVzcG9uc2UuU1lTVENQSVBIT1NUTkFNRSxTWVNWTE9ORzpmLmFk''@;'; put 'put ''YXB0ZXJSZXNwb25zZS5TWVNWTE9ORyxNRU1TSVpFOmYuYWRhcHRlclJlc3BvbnNlLk1FTVNJWkUsU1lTUFJPQ0VTU01PREU6Zi5hZGFwdGVyUmVzcG9uc2UuU1lTUFJPQ0VTU01PREUsU1lTSE9TVE5BTUU6Zi5hZGFwdGVyUmVzcG9uc2UuU1lTSE9TVE5BTUUsU1lTVVNFUklEOmYuYWRhcHRl''@;'; put 'put ''clJlc3BvbnNlLlNZU1VTRVJJRCxTWVNIT1NUSU5GT0xPTkc6Zi5hZGFwdGVyUmVzcG9uc2UuU1lTSE9TVElORk9MT05HLFNZU0VOQ09ESU5HOmYuYWRhcHRlclJlc3BvbnNlLlNZU0VOQ09ESU5HLEFVVE9FWEVDOmYuYWRhcHRlclJlc3BvbnNlLkFVVE9FWEVDLElTQURNSU46Zi5hZGFwdGVy''@;'; put 'put ''UmVzcG9uc2UuZ2xvYnZhcnNbMF0uSVNBRE1JTixEQ19BRE1JTl9HUk9VUDpmLmFkYXB0ZXJSZXNwb25zZS5nbG9idmFyc1swXS5EQ19BRE1JTl9HUk9VUCxBUFBfTE9DOk0/LmFwcExvY307bGV0IHRlLG9lLEQ9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzZGF0YXNldHMsVT17fTtmb3IobGV0IFdl''@;'; put 'put ''IG9mIEQpVVtXZS5MSUJSRUZdfHwoVVtXZS5MSUJSRUZdPVtdKSxVW1dlLkxJQlJFRl0ucHVzaChXZS5EU04pO2xldCB2ZT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KFUpKSx3ZT1bXTtmb3IobGV0IFdlIG9mIE9iamVjdC5rZXlzKHZlKSl3ZS5wdXNoKHtMSUJSQVJZUkVGOldlLHRhYmxl''@;'; put 'put ''czp2ZVtXZV19KTtsZXQgRmU9d2U7dGU9VSxvZT1PYmplY3Qua2V5cyhVKSx2b2lkIDAhPT10ZSYmKFhuLmVkaXRvci5saWJzQW5kVGFibGVzPXRlKSxYbi54bG1hcHM9Zi5hZGFwdGVyUmVzcG9uc2UueGxtYXBzLm1hcChXZT0+KHtpZDpXZVswXSxkZXNjcmlwdGlvbjpXZVsxXSx0YXJnZXRE''@;'; put 'put ''UzpXZVsyXX0pKSxYbi5lZGl0b3IudHJlZU5vZGVMaWJyYXJpZXM9RmUsWG4uZWRpdG9yLmxpYnJhcmllcz1vZSxYbi5lZGl0b3Iuc3RhcnR1cFNldD0hMCxYbi5kY0xpYj1mLmFkYXB0ZXJSZXNwb25zZS5nbG9idmFyc1swXS5EQ0xJQix5aWVsZCBhLmxpY2VuY2VTZXJ2aWNlLmFjdGl2YXRp''@;'; put 'put ''b24oZi5hZGFwdGVyUmVzcG9uc2UpfSk7cmV0dXJuIGZ1bmN0aW9uKGYpe3JldHVybiBoLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLmNhdGNoKGg9PntkPSEwLGEuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkVycm9yIiwiVGhlcmUgaXMgYW4gaXNzdWUgd2l0aCBzdGFydHVwc2Vy''@;'; put 'put ''dmljZSByZXNwb25zZSIpLGEubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQubmV4dCghMSl9KSxhLmxvZ2dlclNlcnZpY2UubG9nKCJBY3RpdmF0ZWQ6IixhLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLnZhbHVlKSxkfHwoYS5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2Fk''@;'; put 'put ''ZWQoKSxhLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLnZhbHVlP2Eucm91dGVyLnVybC5pbmNsdWRlcygibGljZW5zaW5nIikmJmEucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9ob21lIik6IWEucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95IikmJiFhLnJvdXRlci51cmwuaW5jbHVk''@;'; put 'put ''ZXMoImxpY2Vuc2luZyIpJiZhLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvbGljZW5zaW5nL2tleT9lcnJvcj1taXNzaW5nJmZvcmNlPXRydWUiKSl9KSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEhyKE8xKSxIcihFYyksSHIoS3MpLEhyKG9o''@;'; put 'put ''KSxIcihjRiksSHIobmwpLEhyKHU5KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCksTFZlPSgoKT0+e2NsYXNzIGN7c3RhdGljIFx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFj''@;'; put 'put ''dG9yeTooKT0+bmV3IE9WZShKbihHcyksd2luZG93KX0pfXJldHVybiBjfSkoKTtjbGFzcyBPVmV7ZG9jdW1lbnQ7d2luZG93O29mZnNldD0oKT0+WzAsMF07Y29uc3RydWN0b3IobCxhKXt0aGlzLmRvY3VtZW50PWwsdGhpcy53aW5kb3c9YX1zZXRPZmZzZXQobCl7dGhpcy5vZmZzZXQ9QXJy''@;'; put 'put ''YXkuaXNBcnJheShsKT8oKT0+bDpsfWdldFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuW3RoaXMud2luZG93LnNjcm9sbFgsdGhpcy53aW5kb3cuc2Nyb2xsWV19c2Nyb2xsVG9Qb3NpdGlvbihsKXt0aGlzLndpbmRvdy5zY3JvbGxUbyhsWzBdLGxbMV0pfXNjcm9sbFRvQW5jaG9yKGwpe2NvbnN0''@;'; put 'put ''IGE9ZnVuY3Rpb24gUFZlKGMsbCl7Y29uc3QgYT1jLmdldEVsZW1lbnRCeUlkKGwpfHxjLmdldEVsZW1lbnRzQnlOYW1lKGwpWzBdO2lmKGEpcmV0dXJuIGE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMuY3JlYXRlVHJlZVdhbGtlciYmYy5ib2R5JiYiZnVuY3Rpb24iPT10eXBlb2YgYy5ib2R5''@;'; put 'put ''LmF0dGFjaFNoYWRvdyl7Y29uc3QgZD1jLmNyZWF0ZVRyZWVXYWxrZXIoYy5ib2R5LE5vZGVGaWx0ZXIuU0hPV19FTEVNRU5UKTtsZXQgaD1kLmN1cnJlbnROb2RlO2Zvcig7aDspe2NvbnN0IGY9aC5zaGFkb3dSb290O2lmKGYpe2NvbnN0IHY9Zi5nZXRFbGVtZW50QnlJZChsKXx8Zi5xdWVy''@;'; put 'put ''eVNlbGVjdG9yKGBbbmFtZT0iJHtsfSJdYCk7aWYodilyZXR1cm4gdn1oPWQubmV4dE5vZGUoKX19cmV0dXJuIG51bGx9KHRoaXMuZG9jdW1lbnQsbCk7YSYmKHRoaXMuc2Nyb2xsVG9FbGVtZW50KGEpLGEuZm9jdXMoKSl9c2V0SGlzdG9yeVNjcm9sbFJlc3RvcmF0aW9uKGwpe3RoaXMud2lu''@;'; put 'put ''ZG93Lmhpc3Rvcnkuc2Nyb2xsUmVzdG9yYXRpb249bH1zY3JvbGxUb0VsZW1lbnQobCl7Y29uc3QgYT1sLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGQ9YS5sZWZ0K3RoaXMud2luZG93LnBhZ2VYT2Zmc2V0LGg9YS50b3ArdGhpcy53aW5kb3cucGFnZVlPZmZzZXQsZj10aGlzLm9mZnNldCgp''@;'; put 'put ''O3RoaXMud2luZG93LnNjcm9sbFRvKGQtZlswXSxoLWZbMV0pfX1sZXQgUDE9KCgpPT57Y2xhc3MgY3tyb3V0ZXI7cm91dGU7dGFiSW5kZXhBdHRyaWJ1dGU7cmVuZGVyZXI7ZWw7bG9jYXRpb25TdHJhdGVneTtocmVmPW51bGw7dGFyZ2V0O3F1ZXJ5UGFyYW1zO2ZyYWdtZW50O3F1ZXJ5UGFy''@;'; put 'put ''YW1zSGFuZGxpbmc7c3RhdGU7aW5mbztyZWxhdGl2ZVRvO2lzQW5jaG9yRWxlbWVudDtzdWJzY3JpcHRpb247b25DaGFuZ2VzPW5ldyB1cjtjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhpcy5yb3V0ZXI9YSx0aGlzLnJvdXRlPWQsdGhpcy50YWJJbmRleEF0dHJpYnV0ZT1oLHRoaXMucmVu''@;'; put 'put ''ZGVyZXI9Zix0aGlzLmVsPXYsdGhpcy5sb2NhdGlvblN0cmF0ZWd5PU07Y29uc3QgRD12Lm5hdGl2ZUVsZW1lbnQudGFnTmFtZT8udG9Mb3dlckNhc2UoKTt0aGlzLmlzQW5jaG9yRWxlbWVudD0iYSI9PT1EfHwiYXJlYSI9PT1ELHRoaXMuaXNBbmNob3JFbGVtZW50P3RoaXMuc3Vic2NyaXB0''@;'; put 'put ''aW9uPWEuZXZlbnRzLnN1YnNjcmliZShVPT57VSBpbnN0YW5jZW9mIGY0JiZ0aGlzLnVwZGF0ZUhyZWYoKX0pOnRoaXMuc2V0VGFiSW5kZXhJZk5vdE9uTmF0aXZlRWwoIjAiKX1wcmVzZXJ2ZUZyYWdtZW50PSExO3NraXBMb2NhdGlvbkNoYW5nZT0hMTtyZXBsYWNlVXJsPSExO3NldFRhYklu''@;'; put 'put ''ZGV4SWZOb3RPbk5hdGl2ZUVsKGEpe251bGwhPXRoaXMudGFiSW5kZXhBdHRyaWJ1dGV8fHRoaXMuaXNBbmNob3JFbGVtZW50fHx0aGlzLmFwcGx5QXR0cmlidXRlVmFsdWUoInRhYmluZGV4IixhKX1uZ09uQ2hhbmdlcyhhKXt0aGlzLmlzQW5jaG9yRWxlbWVudCYmdGhpcy51cGRhdGVIcmVm''@;'; put 'put ''KCksdGhpcy5vbkNoYW5nZXMubmV4dCh0aGlzKX1yb3V0ZXJMaW5rSW5wdXQ9bnVsbDtzZXQgcm91dGVyTGluayhhKXtudWxsPT1hPyh0aGlzLnJvdXRlckxpbmtJbnB1dD1udWxsLHRoaXMuc2V0VGFiSW5kZXhJZk5vdE9uTmF0aXZlRWwobnVsbCkpOih0aGlzLnJvdXRlckxpbmtJbnB1dD1s''@;'; put 'put ''OShhKXx8QXJyYXkuaXNBcnJheShhKT9hOlthXSx0aGlzLnNldFRhYkluZGV4SWZOb3RPbk5hdGl2ZUVsKCIwIikpfW9uQ2xpY2soYSxkLGgsZix2KXtjb25zdCBNPXRoaXMudXJsVHJlZTtyZXR1cm4hIShudWxsPT09TXx8dGhpcy5pc0FuY2hvckVsZW1lbnQmJigwIT09YXx8ZHx8aHx8Znx8''@;'; put 'put ''dnx8InN0cmluZyI9PXR5cGVvZiB0aGlzLnRhcmdldCYmIl9zZWxmIiE9dGhpcy50YXJnZXQpKXx8KHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoTSx7c2tpcExvY2F0aW9uQ2hhbmdlOnRoaXMuc2tpcExvY2F0aW9uQ2hhbmdlLHJlcGxhY2VVcmw6dGhpcy5yZXBsYWNlVXJsLHN0YXRlOnRo''@;'; put 'put ''aXMuc3RhdGUsaW5mbzp0aGlzLmluZm99KSwhdGhpcy5pc0FuY2hvckVsZW1lbnQpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCl9dXBkYXRlSHJlZigpe2NvbnN0IGE9dGhpcy51cmxUcmVlO3RoaXMuaHJlZj1udWxsIT09YSYmdGhpcy5sb2NhdGlvblN0''@;'; put 'put ''cmF0ZWd5P3RoaXMubG9jYXRpb25TdHJhdGVneT8ucHJlcGFyZUV4dGVybmFsVXJsKHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybChhKSk6bnVsbDtjb25zdCBkPW51bGw9PT10aGlzLmhyZWY/bnVsbDpmdW5jdGlvbiBrTChjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uIEZaKGMsbCl7cmV0dXJuInNy''@;'; put 'put ''YyI9PT1sJiYoImVtYmVkIj09PWN8fCJmcmFtZSI9PT1jfHwiaWZyYW1lIj09PWN8fCJtZWRpYSI9PT1jfHwic2NyaXB0Ij09PWMpfHwiaHJlZiI9PT1sJiYoImJhc2UiPT09Y3x8ImxpbmsiPT09Yyk/QUw6Ynh9KGwsYSkoYyl9KHRoaXMuaHJlZix0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudGFn''@;'; put 'put ''TmFtZS50b0xvd2VyQ2FzZSgpLCJocmVmIik7dGhpcy5hcHBseUF0dHJpYnV0ZVZhbHVlKCJocmVmIixkKX1hcHBseUF0dHJpYnV0ZVZhbHVlKGEsZCl7Y29uc3QgaD10aGlzLnJlbmRlcmVyLGY9dGhpcy5lbC5uYXRpdmVFbGVtZW50O251bGwhPT1kP2guc2V0QXR0cmlidXRlKGYsYSxkKTpo''@;'; put 'put ''LnJlbW92ZUF0dHJpYnV0ZShmLGEpfWdldCB1cmxUcmVlKCl7cmV0dXJuIG51bGw9PT10aGlzLnJvdXRlckxpbmtJbnB1dD9udWxsOmw5KHRoaXMucm91dGVyTGlua0lucHV0KT90aGlzLnJvdXRlckxpbmtJbnB1dDp0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKHRoaXMucm91dGVyTGlua0lu''@;'; put 'put ''cHV0LHtyZWxhdGl2ZVRvOnZvaWQgMCE9PXRoaXMucmVsYXRpdmVUbz90aGlzLnJlbGF0aXZlVG86dGhpcy5yb3V0ZSxxdWVyeVBhcmFtczp0aGlzLnF1ZXJ5UGFyYW1zLGZyYWdtZW50OnRoaXMuZnJhZ21lbnQscXVlcnlQYXJhbXNIYW5kbGluZzp0aGlzLnF1ZXJ5UGFyYW1zSGFuZGxpbmcs''@;'; put 'put ''cHJlc2VydmVGcmFnbWVudDp0aGlzLnByZXNlcnZlRnJhZ21lbnR9KX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUobmwpLHFlKHQwKSxOcCgidGFiaW5kZXgiKSxxZShObykscWUobmEpLHFlKEo3KSl9O3N0YXRpYyBcdTAyNzVkaXI9WXIoe3R5cGU6''@;'; put 'put ''YyxzZWxlY3RvcnM6W1siIiwicm91dGVyTGluayIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmT3QoImNsaWNrIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkNsaWNrKHYuYnV0dG9uLHYuY3RybEtleSx2LnNoaWZ0S2V5LHYuYWx0S2V5LHYubWV0YUtl''@;'; put 'put ''eSl9KSwyJmQmJk5yKCJ0YXJnZXQiLGgudGFyZ2V0KX0saW5wdXRzOnt0YXJnZXQ6InRhcmdldCIscXVlcnlQYXJhbXM6InF1ZXJ5UGFyYW1zIixmcmFnbWVudDoiZnJhZ21lbnQiLHF1ZXJ5UGFyYW1zSGFuZGxpbmc6InF1ZXJ5UGFyYW1zSGFuZGxpbmciLHN0YXRlOiJzdGF0ZSIsaW5mbzoi''@;'; put 'put ''aW5mbyIscmVsYXRpdmVUbzoicmVsYXRpdmVUbyIscHJlc2VydmVGcmFnbWVudDpbMiwicHJlc2VydmVGcmFnbWVudCIsInByZXNlcnZlRnJhZ21lbnQiLEkxXSxza2lwTG9jYXRpb25DaGFuZ2U6WzIsInNraXBMb2NhdGlvbkNoYW5nZSIsInNraXBMb2NhdGlvbkNoYW5nZSIsSTFdLHJlcGxh''@;'; put 'put ''Y2VVcmw6WzIsInJlcGxhY2VVcmwiLCJyZXBsYWNlVXJsIixJMV0scm91dGVyTGluazoicm91dGVyTGluayJ9LGZlYXR1cmVzOltXb119KX1yZXR1cm4gY30pKCksSl89KCgpPT57Y2xhc3MgY3tyb3V0ZXI7ZWxlbWVudDtyZW5kZXJlcjtjZHI7bGluaztsaW5rcztjbGFzc2VzPVtdO3JvdXRl''@;'; put 'put ''ckV2ZW50c1N1YnNjcmlwdGlvbjtsaW5rSW5wdXRDaGFuZ2VzU3Vic2NyaXB0aW9uO19pc0FjdGl2ZT0hMTtnZXQgaXNBY3RpdmUoKXtyZXR1cm4gdGhpcy5faXNBY3RpdmV9cm91dGVyTGlua0FjdGl2ZU9wdGlvbnM9e2V4YWN0OiExfTthcmlhQ3VycmVudFdoZW5BY3RpdmU7aXNBY3RpdmVD''@;'; put 'put ''aGFuZ2U9bmV3IFhyO2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5yb3V0ZXI9YSx0aGlzLmVsZW1lbnQ9ZCx0aGlzLnJlbmRlcmVyPWgsdGhpcy5jZHI9Zix0aGlzLmxpbms9dix0aGlzLnJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbj1hLmV2ZW50cy5zdWJzY3JpYmUoTT0+e00gaW5zdGFu''@;'; put 'put ''Y2VvZiBmNCYmdGhpcy51cGRhdGUoKX0pfW5nQWZ0ZXJDb250ZW50SW5pdCgpe19vKHRoaXMubGlua3MuY2hhbmdlcyxfbyhudWxsKSkucGlwZShPXygpKS5zdWJzY3JpYmUoYT0+e3RoaXMudXBkYXRlKCksdGhpcy5zdWJzY3JpYmVUb0VhY2hMaW5rT25DaGFuZ2VzKCl9KX1zdWJzY3JpYmVU''@;'; put 'put ''b0VhY2hMaW5rT25DaGFuZ2VzKCl7dGhpcy5saW5rSW5wdXRDaGFuZ2VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO2NvbnN0IGE9Wy4uLnRoaXMubGlua3MudG9BcnJheSgpLHRoaXMubGlua10uZmlsdGVyKGQ9PiEhZCkubWFwKGQ9PmQub25DaGFuZ2VzKTt0aGlzLmxpbmtJbnB1dENo''@;'; put 'put ''YW5nZXNTdWJzY3JpcHRpb249ZTAoYSkucGlwZShPXygpKS5zdWJzY3JpYmUoZD0+e3RoaXMuX2lzQWN0aXZlIT09dGhpcy5pc0xpbmtBY3RpdmUodGhpcy5yb3V0ZXIpKGQpJiZ0aGlzLnVwZGF0ZSgpfSl9c2V0IHJvdXRlckxpbmtBY3RpdmUoYSl7Y29uc3QgZD1BcnJheS5pc0FycmF5KGEp''@;'; put 'put ''P2E6YS5zcGxpdCgiICIpO3RoaXMuY2xhc3Nlcz1kLmZpbHRlcihoPT4hIWgpfW5nT25DaGFuZ2VzKGEpe3RoaXMudXBkYXRlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLnJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMubGlua0lucHV0Q2hhbmdlc1N1YnNjcmlwdGlv''@;'; put 'put ''bj8udW5zdWJzY3JpYmUoKX11cGRhdGUoKXshdGhpcy5saW5rc3x8IXRoaXMucm91dGVyLm5hdmlnYXRlZHx8cXVldWVNaWNyb3Rhc2soKCk9Pntjb25zdCBhPXRoaXMuaGFzQWN0aXZlTGlua3MoKTt0aGlzLmNsYXNzZXMuZm9yRWFjaChkPT57YT90aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRo''@;'; put 'put ''aXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LGQpOnRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsZCl9KSxhJiZ2b2lkIDAhPT10aGlzLmFyaWFDdXJyZW50V2hlbkFjdGl2ZT90aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnQu''@;'; put 'put ''bmF0aXZlRWxlbWVudCwiYXJpYS1jdXJyZW50Iix0aGlzLmFyaWFDdXJyZW50V2hlbkFjdGl2ZS50b1N0cmluZygpKTp0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwiYXJpYS1jdXJyZW50IiksdGhpcy5faXNBY3RpdmUhPT1hJiYodGhp''@;'; put 'put ''cy5faXNBY3RpdmU9YSx0aGlzLmNkci5tYXJrRm9yQ2hlY2soKSx0aGlzLmlzQWN0aXZlQ2hhbmdlLmVtaXQoYSkpfSl9aXNMaW5rQWN0aXZlKGEpe2NvbnN0IGQ9ZnVuY3Rpb24gY0JlKGMpe3JldHVybiEhYy5wYXRoc30odGhpcy5yb3V0ZXJMaW5rQWN0aXZlT3B0aW9ucyk/dGhpcy5yb3V0''@;'; put 'put ''ZXJMaW5rQWN0aXZlT3B0aW9uczp0aGlzLnJvdXRlckxpbmtBY3RpdmVPcHRpb25zLmV4YWN0fHwhMTtyZXR1cm4gaD0+e2NvbnN0IGY9aC51cmxUcmVlO3JldHVybiEhZiYmYS5pc0FjdGl2ZShmLGQpfX1oYXNBY3RpdmVMaW5rcygpe2NvbnN0IGE9dGhpcy5pc0xpbmtBY3RpdmUodGhpcy5y''@;'; put 'put ''b3V0ZXIpO3JldHVybiB0aGlzLmxpbmsmJmEodGhpcy5saW5rKXx8dGhpcy5saW5rcy5zb21lKGEpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShubCkscWUobmEpLHFlKE5vKSxxZShIcykscWUoUDEsOCkpfTtzdGF0aWMgXHUwMjc1ZGlyPVlyKHt0''@;'; put 'put ''eXBlOmMsc2VsZWN0b3JzOltbIiIsInJvdXRlckxpbmtBY3RpdmUiLCIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZCxoLGYpe2lmKDEmZCYmcG8oZixQMSw1KSwyJmQpe2xldCB2O2dpKHY9bWkoKSkmJihoLmxpbmtzPXYpfX0saW5wdXRzOntyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uczoi''@;'; put 'put ''cm91dGVyTGlua0FjdGl2ZU9wdGlvbnMiLGFyaWFDdXJyZW50V2hlbkFjdGl2ZToiYXJpYUN1cnJlbnRXaGVuQWN0aXZlIixyb3V0ZXJMaW5rQWN0aXZlOiJyb3V0ZXJMaW5rQWN0aXZlIn0sb3V0cHV0czp7aXNBY3RpdmVDaGFuZ2U6ImlzQWN0aXZlQ2hhbmdlIn0sZXhwb3J0QXM6WyJyb3V0''@;'; put 'put ''ZXJMaW5rQWN0aXZlIl0sZmVhdHVyZXM6W1dvXX0pfXJldHVybiBjfSkoKTtjbGFzcyBLaGV7fWxldCB1QmU9KCgpPT57Y2xhc3MgY3tyb3V0ZXI7aW5qZWN0b3I7cHJlbG9hZGluZ1N0cmF0ZWd5O2xvYWRlcjtzdWJzY3JpcHRpb247Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5yb3V0ZXI9''@;'; put 'put ''YSx0aGlzLmluamVjdG9yPWQsdGhpcy5wcmVsb2FkaW5nU3RyYXRlZ3k9aCx0aGlzLmxvYWRlcj1mfXNldFVwUHJlbG9hZGluZygpe3RoaXMuc3Vic2NyaXB0aW9uPXRoaXMucm91dGVyLmV2ZW50cy5waXBlKG9jKGE9PmEgaW5zdGFuY2VvZiBmNCksUF8oKCk9PnRoaXMucHJlbG9hZCgpKSku''@;'; put 'put ''c3Vic2NyaWJlKCgpPT57fSl9cHJlbG9hZCgpe3JldHVybiB0aGlzLnByb2Nlc3NSb3V0ZXModGhpcy5pbmplY3Rvcix0aGlzLnJvdXRlci5jb25maWcpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24mJnRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9cHJvY2Vzc1JvdXRl''@;'; put 'put ''cyhhLGQpe2NvbnN0IGg9W107Zm9yKGNvbnN0IGYgb2YgZCl7Zi5wcm92aWRlcnMmJiFmLl9pbmplY3RvciYmKGYuX2luamVjdG9yPXphKGYucHJvdmlkZXJzLGEsYFJvdXRlOiAke2YucGF0aH1gKSk7Y29uc3Qgdj1mLl9pbmplY3Rvcj8/YSxNPWYuX2xvYWRlZEluamVjdG9yPz92OyhmLmxv''@;'; put 'put ''YWRDaGlsZHJlbiYmIWYuX2xvYWRlZFJvdXRlcyYmdm9pZCAwPT09Zi5jYW5Mb2FkfHxmLmxvYWRDb21wb25lbnQmJiFmLl9sb2FkZWRDb21wb25lbnQpJiZoLnB1c2godGhpcy5wcmVsb2FkQ29uZmlnKHYsZikpLChmLmNoaWxkcmVufHxmLl9sb2FkZWRSb3V0ZXMpJiZoLnB1c2godGhpcy5w''@;'; put 'put ''cm9jZXNzUm91dGVzKE0sZi5jaGlsZHJlbj8/Zi5fbG9hZGVkUm91dGVzKSl9cmV0dXJuIGUwKGgpLnBpcGUoT18oKSl9cHJlbG9hZENvbmZpZyhhLGQpe3JldHVybiB0aGlzLnByZWxvYWRpbmdTdHJhdGVneS5wcmVsb2FkKGQsKCk9PntsZXQgaDtoPWQubG9hZENoaWxkcmVuJiZ2b2lkIDA9''@;'; put 'put ''PT1kLmNhbkxvYWQ/dGhpcy5sb2FkZXIubG9hZENoaWxkcmVuKGEsZCk6X28obnVsbCk7Y29uc3QgZj1oLnBpcGUoczEodj0+bnVsbD09PXY/X28odm9pZCAwKTooZC5fbG9hZGVkUm91dGVzPXYucm91dGVzLGQuX2xvYWRlZEluamVjdG9yPXYuaW5qZWN0b3IsdGhpcy5wcm9jZXNzUm91dGVz''@;'; put 'put ''KHYuaW5qZWN0b3I/P2Esdi5yb3V0ZXMpKSkpO3JldHVybiBkLmxvYWRDb21wb25lbnQmJiFkLl9sb2FkZWRDb21wb25lbnQ/ZTAoW2YsdGhpcy5sb2FkZXIubG9hZENvbXBvbmVudChkKV0pLnBpcGUoT18oKSk6Zn0pfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhk''@;'; put 'put ''fHxjKShIcihubCksSHIocWwpLEhyKEtoZSksSHIoTCQpKX07c3RhdGljIFx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKTtjb25zdCB1Sz1uZXcgam4oIiIpO2xldCBYaGU9KCgpPT57Y2xhc3MgY3t1cmxT''@;'; put 'put ''ZXJpYWxpemVyO3RyYW5zaXRpb25zO3ZpZXdwb3J0U2Nyb2xsZXI7em9uZTtvcHRpb25zO3JvdXRlckV2ZW50c1N1YnNjcmlwdGlvbjtzY3JvbGxFdmVudHNTdWJzY3JpcHRpb247bGFzdElkPTA7bGFzdFNvdXJjZT0iaW1wZXJhdGl2ZSI7cmVzdG9yZWRJZD0wO3N0b3JlPXt9O2NvbnN0cnVj''@;'; put 'put ''dG9yKGEsZCxoLGYsdj17fSl7dGhpcy51cmxTZXJpYWxpemVyPWEsdGhpcy50cmFuc2l0aW9ucz1kLHRoaXMudmlld3BvcnRTY3JvbGxlcj1oLHRoaXMuem9uZT1mLHRoaXMub3B0aW9ucz12LHYuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbnx8PSJkaXNhYmxlZCIsdi5hbmNob3JTY3JvbGxp''@;'; put 'put ''bmd8fD0iZGlzYWJsZWQifWluaXQoKXsiZGlzYWJsZWQiIT09dGhpcy5vcHRpb25zLnNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb24mJnRoaXMudmlld3BvcnRTY3JvbGxlci5zZXRIaXN0b3J5U2Nyb2xsUmVzdG9yYXRpb24oIm1hbnVhbCIpLHRoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9u''@;'; put 'put ''PXRoaXMuY3JlYXRlU2Nyb2xsRXZlbnRzKCksdGhpcy5zY3JvbGxFdmVudHNTdWJzY3JpcHRpb249dGhpcy5jb25zdW1lU2Nyb2xsRXZlbnRzKCl9Y3JlYXRlU2Nyb2xsRXZlbnRzKCl7cmV0dXJuIHRoaXMudHJhbnNpdGlvbnMuZXZlbnRzLnN1YnNjcmliZShhPT57YSBpbnN0YW5jZW9mIEpQ''@;'; put 'put ''Pyh0aGlzLnN0b3JlW3RoaXMubGFzdElkXT10aGlzLnZpZXdwb3J0U2Nyb2xsZXIuZ2V0U2Nyb2xsUG9zaXRpb24oKSx0aGlzLmxhc3RTb3VyY2U9YS5uYXZpZ2F0aW9uVHJpZ2dlcix0aGlzLnJlc3RvcmVkSWQ9YS5yZXN0b3JlZFN0YXRlP2EucmVzdG9yZWRTdGF0ZS5uYXZpZ2F0aW9uSWQ6''@;'; put 'put ''MCk6YSBpbnN0YW5jZW9mIGY0Pyh0aGlzLmxhc3RJZD1hLmlkLHRoaXMuc2NoZWR1bGVTY3JvbGxFdmVudChhLHRoaXMudXJsU2VyaWFsaXplci5wYXJzZShhLnVybEFmdGVyUmVkaXJlY3RzKS5mcmFnbWVudCkpOmEgaW5zdGFuY2VvZiBIXyYmYS5jb2RlPT09UVAuSWdub3JlZFNhbWVVcmxO''@;'; put 'put ''YXZpZ2F0aW9uJiYodGhpcy5sYXN0U291cmNlPXZvaWQgMCx0aGlzLnJlc3RvcmVkSWQ9MCx0aGlzLnNjaGVkdWxlU2Nyb2xsRXZlbnQoYSx0aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UoYS51cmwpLmZyYWdtZW50KSl9KX1jb25zdW1lU2Nyb2xsRXZlbnRzKCl7cmV0dXJuIHRoaXMudHJhbnNp''@;'; put 'put ''dGlvbnMuZXZlbnRzLnN1YnNjcmliZShhPT57YSBpbnN0YW5jZW9mIHExZSYmKGEucG9zaXRpb24/InRvcCI9PT10aGlzLm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbj90aGlzLnZpZXdwb3J0U2Nyb2xsZXIuc2Nyb2xsVG9Qb3NpdGlvbihbMCwwXSk6ImVuYWJsZWQiPT09dGhp''@;'; put 'put ''cy5vcHRpb25zLnNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb24mJnRoaXMudmlld3BvcnRTY3JvbGxlci5zY3JvbGxUb1Bvc2l0aW9uKGEucG9zaXRpb24pOmEuYW5jaG9yJiYiZW5hYmxlZCI9PT10aGlzLm9wdGlvbnMuYW5jaG9yU2Nyb2xsaW5nP3RoaXMudmlld3BvcnRTY3JvbGxlci5zY3Jv''@;'; put 'put ''bGxUb0FuY2hvcihhLmFuY2hvcik6ImRpc2FibGVkIiE9PXRoaXMub3B0aW9ucy5zY3JvbGxQb3NpdGlvblJlc3RvcmF0aW9uJiZ0aGlzLnZpZXdwb3J0U2Nyb2xsZXIuc2Nyb2xsVG9Qb3NpdGlvbihbMCwwXSkpfSl9c2NoZWR1bGVTY3JvbGxFdmVudChhLGQpe3RoaXMuem9uZS5ydW5PdXRz''@;'; put 'put ''aWRlQW5ndWxhcigoKT0+e3NldFRpbWVvdXQoKCk9Pnt0aGlzLnpvbmUucnVuKCgpPT57dGhpcy50cmFuc2l0aW9ucy5ldmVudHMubmV4dChuZXcgcTFlKGEsInBvcHN0YXRlIj09PXRoaXMubGFzdFNvdXJjZT90aGlzLnN0b3JlW3RoaXMucmVzdG9yZWRJZF06bnVsbCxkKSl9KX0sMCl9KX1u''@;'; put 'put ''Z09uRGVzdHJveSgpe3RoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpLHRoaXMuc2Nyb2xsRXZlbnRzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7IWZ1bmN0aW9uIG8yKCl7dGhyb3cgbmV3IEVycm9yKCJp''@;'; put 'put ''bnZhbGlkIil9KCl9O3N0YXRpYyBcdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gZzQoYyxsKXtyZXR1cm57XHUwMjc1a2luZDpjLFx1MDI3NXByb3ZpZGVyczpsfX1mdW5jdGlvbiBKaGUoKXtjb25zdCBjPUpuKFlvKTty''@;'; put 'put ''ZXR1cm4gbD0+e2NvbnN0IGE9Yy5nZXQoZ2QpO2lmKGwhPT1hLmNvbXBvbmVudHNbMF0pcmV0dXJuO2NvbnN0IGQ9Yy5nZXQobmwpLGg9Yy5nZXQoUWhlKTsxPT09Yy5nZXQoZEspJiZkLmluaXRpYWxOYXZpZ2F0aW9uKCksYy5nZXQoZTJlLG51bGwseG8uT3B0aW9uYWwpPy5zZXRVcFByZWxv''@;'; put 'put ''YWRpbmcoKSxjLmdldCh1SyxudWxsLHhvLk9wdGlvbmFsKT8uaW5pdCgpLGQucmVzZXRSb290Q29tcG9uZW50VHlwZShhLmNvbXBvbmVudFR5cGVzWzBdKSxoLmNsb3NlZHx8KGgubmV4dCgpLGguY29tcGxldGUoKSxoLnVuc3Vic2NyaWJlKCkpfX1jb25zdCBRaGU9bmV3IGpuKCIiLHtmYWN0''@;'; put 'put ''b3J5OigpPT5uZXcgdXJ9KSxkSz1uZXcgam4oIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PjF9KSxlMmU9bmV3IGpuKCIiKTtmdW5jdGlvbiBwQmUoYyl7cmV0dXJuIGc0KDAsW3twcm92aWRlOmUyZSx1c2VFeGlzdGluZzp1QmV9LHtwcm92aWRlOktoZSx1c2VFeGlzdGluZzpj''@;'; put 'put ''fV0pfWZ1bmN0aW9uIG1CZShjKXtyZXR1cm4gQTEoIk5nUm91dGVyVmlld1RyYW5zaXRpb25zIiksZzQoOSxbe3Byb3ZpZGU6X2RlLHVzZVZhbHVlOnZMZX0se3Byb3ZpZGU6d2RlLHVzZVZhbHVlOntza2lwTmV4dFRyYW5zaXRpb246ISFjPy5za2lwSW5pdGlhbFRyYW5zaXRpb24sLi4uY319''@;'; put 'put ''XSl9Y29uc3QgdkJlPVtzMix7cHJvdmlkZTpyVCx1c2VDbGFzczpXUH0sbmwsbFQse3Byb3ZpZGU6dDAsdXNlRmFjdG9yeTpmdW5jdGlvbiBxaGUoYyl7cmV0dXJuIGMucm91dGVyU3RhdGUucm9vdH0sZGVwczpbbmxdfSxMJCxbXV07bGV0IGV1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3Io''@;'; put 'put ''KXt9c3RhdGljIGZvclJvb3QoYSxkKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6W3ZCZSxbXSx7cHJvdmlkZTpsRixtdWx0aTohMCx1c2VWYWx1ZTphfSxbXSxkPy5lcnJvckhhbmRsZXI/e3Byb3ZpZGU6Q2RlLHVzZVZhbHVlOmQuZXJyb3JIYW5kbGVyfTpbXSx7cHJvdmlkZTpmVCx1''@;'; put 'put ''c2VWYWx1ZTpkfHx7fX0sZD8udXNlSGFzaD97cHJvdmlkZTpKNyx1c2VDbGFzczpwVGV9Ontwcm92aWRlOko3LHVzZUNsYXNzOmN1ZX0se3Byb3ZpZGU6dUssdXNlRmFjdG9yeTooKT0+e2NvbnN0IGM9Sm4oTFZlKSxsPUpuKFhhKSxhPUpuKGZUKSxkPUpuKFAkKSxoPUpuKHJUKTtyZXR1cm4g''@;'; put 'put ''YS5zY3JvbGxPZmZzZXQmJmMuc2V0T2Zmc2V0KGEuc2Nyb2xsT2Zmc2V0KSxuZXcgWGhlKGgsZCxjLGwsYSl9fSxkPy5wcmVsb2FkaW5nU3RyYXRlZ3k/cEJlKGQucHJlbG9hZGluZ1N0cmF0ZWd5KS5cdTAyNzVwcm92aWRlcnM6W10sZD8uaW5pdGlhbE5hdmlnYXRpb24/d0JlKGQpOltdLGQ/''@;'; put 'put ''LmJpbmRUb0NvbXBvbmVudElucHV0cz9nNCg4LFtpZGUse3Byb3ZpZGU6ckYsdXNlRXhpc3Rpbmc6aWRlfV0pLlx1MDI3NXByb3ZpZGVyczpbXSxkPy5lbmFibGVWaWV3VHJhbnNpdGlvbnM/bUJlKCkuXHUwMjc1cHJvdmlkZXJzOltdLFt7cHJvdmlkZTp0MmUsdXNlRmFjdG9yeTpKaGV9LHtw''@;'; put 'put ''cm92aWRlOl9FLG11bHRpOiEwLHVzZUV4aXN0aW5nOnQyZX1dXX19c3RhdGljIGZvckNoaWxkKGEpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbe3Byb3ZpZGU6bEYsbXVsdGk6ITAsdXNlVmFsdWU6YX1dfX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8''@;'; put 'put ''Yyl9O3N0YXRpYyBcdTAyNzVtb2Q9RWkoe3R5cGU6Y30pO3N0YXRpYyBcdTAyNzVpbmo9eWkoe30pfXJldHVybiBjfSkoKTtmdW5jdGlvbiB3QmUoYyl7cmV0dXJuWyJkaXNhYmxlZCI9PT1jLmluaXRpYWxOYXZpZ2F0aW9uP2c0KDMsW3ZzZSgoKT0+e0puKG5sKS5zZXRVcExvY2F0aW9uQ2hh''@;'; put 'put ''bmdlTGlzdGVuZXIoKX0pLHtwcm92aWRlOmRLLHVzZVZhbHVlOjJ9XSkuXHUwMjc1cHJvdmlkZXJzOltdLCJlbmFibGVkQmxvY2tpbmciPT09Yy5pbml0aWFsTmF2aWdhdGlvbj9nNCgyLFt7cHJvdmlkZTpkSyx1c2VWYWx1ZTowfSx2c2UoKCk9Pntjb25zdCBsPUpuKFlvKTtyZXR1cm4gbC5n''@;'; put 'put ''ZXQobFRlLFByb21pc2UucmVzb2x2ZSgpKS50aGVuKCgpPT5uZXcgUHJvbWlzZShkPT57Y29uc3QgaD1sLmdldChubCksZj1sLmdldChRaGUpO01kZShoLCgpPT57ZCghMCl9KSxsLmdldChQJCkuYWZ0ZXJQcmVhY3RpdmF0aW9uPSgpPT4oZCghMCksZi5jbG9zZWQ/X28odm9pZCAwKTpmKSxo''@;'; put 'put ''LmluaXRpYWxOYXZpZ2F0aW9uKCl9KSl9KV0pLlx1MDI3NXByb3ZpZGVyczpbXV19Y29uc3QgdDJlPW5ldyBqbigiIik7bGV0IG4yZT0oKCk9PntjbGFzcyBje19yZW5kZXJlcjtfZWxlbWVudFJlZjtvbkNoYW5nZT1hPT57fTtvblRvdWNoZWQ9KCk9Pnt9O2NvbnN0cnVjdG9yKGEsZCl7dGhp''@;'; put 'put ''cy5fcmVuZGVyZXI9YSx0aGlzLl9lbGVtZW50UmVmPWR9c2V0UHJvcGVydHkoYSxkKXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsYSxkKX1yZWdpc3Rlck9uVG91Y2hlZChhKXt0aGlzLm9uVG91Y2hlZD1hfXJlZ2lzdGVyT25DaGFu''@;'; put 'put ''Z2UoYSl7dGhpcy5vbkNoYW5nZT1hfXNldERpc2FibGVkU3RhdGUoYSl7dGhpcy5zZXRQcm9wZXJ0eSgiZGlzYWJsZWQiLGEpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShObykscWUobmEpKX07c3RhdGljIFx1MDI3NWRpcj1Zcih7dHlwZTpjfSl9''@;'; put 'put ''cmV0dXJuIGN9KSgpLGc5PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBuMmV7c3RhdGljIFx1MDI3NWZhYz0oKCk9PntsZXQgYTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuKGF8fChhPXlsKGMpKSkoaHx8Yyl9fSkoKTtzdGF0aWMgXHUwMjc1ZGlyPVlyKHt0eXBlOmMsZmVhdHVyZXM6W0xhXX0p''@;'; put 'put ''fXJldHVybiBjfSkoKTtjb25zdCBtND1uZXcgam4oIiIpLE1CZT17cHJvdmlkZTptNCx1c2VFeGlzdGluZzp1cygoKT0+c2gpLG11bHRpOiEwfTtsZXQgc2g9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGc5e3dyaXRlVmFsdWUoYSl7dGhpcy5zZXRQcm9wZXJ0eSgiY2hlY2tlZCIsYSl9c3RhdGlj''@;'; put 'put ''IFx1MDI3NWZhYz0oKCk9PntsZXQgYTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuKGF8fChhPXlsKGMpKSkoaHx8Yyl9fSkoKTtzdGF0aWMgXHUwMjc1ZGlyPVlyKHt0eXBlOmMsc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJp''@;'; put 'put ''bnB1dCIsInR5cGUiLCJjaGVja2JveCIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsIm5nTW9kZWwiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZPdCgiY2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkNoYW5nZSh2LnRhcmdl''@;'; put 'put ''dC5jaGVja2VkKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBoLm9uVG91Y2hlZCgpfSl9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hhKFtNQmVdKSxMYV19KX1yZXR1cm4gY30pKCk7Y29uc3QgeEJlPXtwcm92aWRlOm00LHVzZUV4aXN0aW5nOnVzKCgpPT5uYyksbXVsdGk6ITB9LFRC''@;'; put 'put ''ZT1uZXcgam4oIiIpO2xldCBuYz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgbjJle19jb21wb3NpdGlvbk1vZGU7X2NvbXBvc2luZz0hMTtjb25zdHJ1Y3RvcihhLGQsaCl7c3VwZXIoYSxkKSx0aGlzLl9jb21wb3NpdGlvbk1vZGU9aCxudWxsPT10aGlzLl9jb21wb3NpdGlvbk1vZGUmJih0aGlz''@;'; put 'put ''Ll9jb21wb3NpdGlvbk1vZGU9IWZ1bmN0aW9uIEVCZSgpe2NvbnN0IGM9S20oKT9LbSgpLmdldFVzZXJBZ2VudCgpOiIiO3JldHVybi9hbmRyb2lkIChcZCspLy50ZXN0KGMudG9Mb3dlckNhc2UoKSl9KCkpfXdyaXRlVmFsdWUoYSl7dGhpcy5zZXRQcm9wZXJ0eSgidmFsdWUiLGE/PyIiKX1f''@;'; put 'put ''aGFuZGxlSW5wdXQoYSl7KCF0aGlzLl9jb21wb3NpdGlvbk1vZGV8fHRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmIXRoaXMuX2NvbXBvc2luZykmJnRoaXMub25DaGFuZ2UoYSl9X2NvbXBvc2l0aW9uU3RhcnQoKXt0aGlzLl9jb21wb3Npbmc9ITB9X2NvbXBvc2l0aW9uRW5kKGEpe3RoaXMuX2Nv''@;'; put 'put ''bXBvc2luZz0hMSx0aGlzLl9jb21wb3NpdGlvbk1vZGUmJnRoaXMub25DaGFuZ2UoYSl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHFlKE5vKSxxZShuYSkscWUoVEJlLDgpKX07c3RhdGljIFx1MDI3NWRpcj1Zcih7dHlwZTpjLHNlbGVjdG9yczpbWyJp''@;'; put 'put ''bnB1dCIsImZvcm1Db250cm9sTmFtZSIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJmb3JtQ29udHJvbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1''@;'; put 'put ''dCIsIm5nTW9kZWwiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsidGV4dGFyZWEiLCJuZ01vZGVsIiwiIl0sWyIiLCJuZ0RlZmF1bHRDb250cm9sIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmT3QoImlucHV0IixmdW5jdGlvbih2KXtyZXR1cm4gaC5faGFuZGxlSW5w''@;'; put 'put ''dXQodi50YXJnZXQudmFsdWUpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25Ub3VjaGVkKCl9KSgiY29tcG9zaXRpb25zdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gaC5fY29tcG9zaXRpb25TdGFydCgpfSkoImNvbXBvc2l0aW9uZW5kIixmdW5jdGlvbih2KXtyZXR1cm4gaC5fY29t''@;'; put 'put ''cG9zaXRpb25FbmQodi50YXJnZXQudmFsdWUpfSl9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hhKFt4QmVdKSxMYV19KX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gaEsoYyl7cmV0dXJuIG51bGw9PWN8fDA9PT1mdW5jdGlvbiBmSyhjKXtyZXR1cm4gbnVsbD09Yz9udWxsOkFycmF5LmlzQXJy''@;'; put 'put ''YXkoYyl8fCJzdHJpbmciPT10eXBlb2YgYz9jLmxlbmd0aDpjIGluc3RhbmNlb2YgU2V0P2Muc2l6ZTpudWxsfShjKX1jb25zdCB4MD1uZXcgam4oIiIpLG82PW5ldyBqbigiIik7ZnVuY3Rpb24gYTJlKGMpe3JldHVybiBoSyhjLnZhbHVlKT97cmVxdWlyZWQ6ITB9Om51bGx9ZnVuY3Rpb24g''@;'; put 'put ''bzJlKGMpe3JldHVybiEwPT09Yy52YWx1ZT9udWxsOntyZXF1aXJlZDohMH19ZnVuY3Rpb24geEYoYyl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gZDJlKGMpe3JldHVybiBudWxsIT1jfWZ1bmN0aW9uIGgyZShjKXtyZXR1cm4gYkUoYyk/ZTAoYyk6Y31mdW5jdGlvbiBmMmUoYyl7bGV0IGw9e307''@;'; put 'put ''cmV0dXJuIGMuZm9yRWFjaChhPT57bD1udWxsIT1hP3suLi5sLC4uLmF9Omx9KSwwPT09T2JqZWN0LmtleXMobCkubGVuZ3RoP251bGw6bH1mdW5jdGlvbiBwMmUoYyxsKXtyZXR1cm4gbC5tYXAoYT0+YShjKSl9ZnVuY3Rpb24gZzJlKGMpe3JldHVybiBjLm1hcChsPT5mdW5jdGlvbiBrQmUo''@;'; put 'put ''Yyl7cmV0dXJuIWMudmFsaWRhdGV9KGwpP2w6YT0+bC52YWxpZGF0ZShhKSl9ZnVuY3Rpb24gcEsoYyl7cmV0dXJuIG51bGwhPWM/ZnVuY3Rpb24gbTJlKGMpe2lmKCFjKXJldHVybiBudWxsO2NvbnN0IGw9Yy5maWx0ZXIoZDJlKTtyZXR1cm4gMD09bC5sZW5ndGg/bnVsbDpmdW5jdGlvbihh''@;'; put 'put ''KXtyZXR1cm4gZjJlKHAyZShhLGwpKX19KGcyZShjKSk6bnVsbH1mdW5jdGlvbiBnSyhjKXtyZXR1cm4gbnVsbCE9Yz9mdW5jdGlvbiB2MmUoYyl7aWYoIWMpcmV0dXJuIG51bGw7Y29uc3QgbD1jLmZpbHRlcihkMmUpO3JldHVybiAwPT1sLmxlbmd0aD9udWxsOmZ1bmN0aW9uKGEpe3JldHVy''@;'; put 'put ''biBmdW5jdGlvbiBTQmUoLi4uYyl7Y29uc3QgbD1TMWUoYykse2FyZ3M6YSxrZXlzOmR9PU0xZShjKSxoPW5ldyBSaShmPT57Y29uc3R7bGVuZ3RoOnZ9PWE7aWYoIXYpcmV0dXJuIHZvaWQgZi5jb21wbGV0ZSgpO2NvbnN0IE09bmV3IEFycmF5KHYpO2xldCBEPXYsVT12O2ZvcihsZXQgdGU9''@;'; put 'put ''MDt0ZTx2O3RlKyspe2xldCBvZT0hMTtSMShhW3RlXSkuc3Vic2NyaWJlKEZyKGYsdmU9PntvZXx8KG9lPSEwLFUtLSksTVt0ZV09dmV9LCgpPT5ELS0sdm9pZCAwLCgpPT57KCFEfHwhb2UpJiYoVXx8Zi5uZXh0KGQ/eDFlKGQsTSk6TSksZi5jb21wbGV0ZSgpKX0pKX19KTtyZXR1cm4gbD9o''@;'; put 'put ''LnBpcGUodSQobCkpOmh9KHAyZShhLGwpLm1hcChoMmUpKS5waXBlKFlhKGYyZSkpfX0oZzJlKGMpKTpudWxsfWZ1bmN0aW9uIHkyZShjLGwpe3JldHVybiBudWxsPT09Yz9bbF06QXJyYXkuaXNBcnJheShjKT9bLi4uYyxsXTpbYyxsXX1mdW5jdGlvbiBtSyhjKXtyZXR1cm4gYz9BcnJheS5p''@;'; put 'put ''c0FycmF5KGMpP2M6W2NdOltdfWZ1bmN0aW9uIEVGKGMsbCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYyk/Yy5pbmNsdWRlcyhsKTpjPT09bH1mdW5jdGlvbiB3MmUoYyxsKXtjb25zdCBhPW1LKGwpO3JldHVybiBtSyhjKS5mb3JFYWNoKGg9PntFRihhLGgpfHxhLnB1c2goaCl9KSxhfWZ1bmN0''@;'; put 'put ''aW9uIEMyZShjLGwpe3JldHVybiBtSyhsKS5maWx0ZXIoYT0+IUVGKGMsYSkpfWNsYXNzIFMyZXtnZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC52YWx1ZTpudWxsfWdldCB2YWxpZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbGlkOm51''@;'; put 'put ''bGx9Z2V0IGludmFsaWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5pbnZhbGlkOm51bGx9Z2V0IHBlbmRpbmcoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5wZW5kaW5nOm51bGx9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNv''@;'; put 'put ''bnRyb2wuZGlzYWJsZWQ6bnVsbH1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmVuYWJsZWQ6bnVsbH1nZXQgZXJyb3JzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZXJyb3JzOm51bGx9Z2V0IHByaXN0aW5lKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''Y29udHJvbD90aGlzLmNvbnRyb2wucHJpc3RpbmU6bnVsbH1nZXQgZGlydHkoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5kaXJ0eTpudWxsfWdldCB0b3VjaGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudG91Y2hlZDpudWxsfWdldCBzdGF0dXMoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5zdGF0dXM6bnVsbH1nZXQgdW50b3VjaGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudW50b3VjaGVkOm51bGx9Z2V0IHN0YXR1c0NoYW5nZXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5zdGF0''@;'; put 'put ''dXNDaGFuZ2VzOm51bGx9Z2V0IHZhbHVlQ2hhbmdlcygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlczpudWxsfWdldCBwYXRoKCl7cmV0dXJuIG51bGx9X2NvbXBvc2VkVmFsaWRhdG9yRm47X2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbjtfcmF3VmFsaWRh''@;'; put 'put ''dG9ycz1bXTtfcmF3QXN5bmNWYWxpZGF0b3JzPVtdO19zZXRWYWxpZGF0b3JzKGwpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9bHx8W10sdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbj1wSyh0aGlzLl9yYXdWYWxpZGF0b3JzKX1fc2V0QXN5bmNWYWxpZGF0b3JzKGwpe3RoaXMuX3Jhd0FzeW5jVmFs''@;'; put 'put ''aWRhdG9ycz1sfHxbXSx0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm49Z0sodGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzKX1nZXQgdmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm58fG51bGx9Z2V0IGFzeW5jVmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMuX2Nv''@;'; put 'put ''bXBvc2VkQXN5bmNWYWxpZGF0b3JGbnx8bnVsbH1fb25EZXN0cm95Q2FsbGJhY2tzPVtdO19yZWdpc3Rlck9uRGVzdHJveShsKXt0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3MucHVzaChsKX1faW52b2tlT25EZXN0cm95Q2FsbGJhY2tzKCl7dGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzLmZvckVh''@;'; put 'put ''Y2gobD0+bCgpKSx0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3M9W119cmVzZXQobD12b2lkIDApe3RoaXMuY29udHJvbCYmdGhpcy5jb250cm9sLnJlc2V0KGwpfWhhc0Vycm9yKGwsYSl7cmV0dXJuISF0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5oYXNFcnJvcihsLGEpfWdldEVycm9yKGws''@;'; put 'put ''YSl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZ2V0RXJyb3IobCxhKTpudWxsfX1jbGFzcyBfZCBleHRlbmRzIFMyZXtuYW1lO2dldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIG51bGx9Z2V0IHBhdGgoKXtyZXR1cm4gbnVsbH19Y2xhc3MgRjEgZXh0ZW5kcyBTMmV7X3BhcmVu''@;'; put 'put ''dD1udWxsO25hbWU9bnVsbDt2YWx1ZUFjY2Vzc29yPW51bGx9Y2xhc3MgTTJle19jZDtjb25zdHJ1Y3RvcihsKXt0aGlzLl9jZD1sfWdldCBpc1RvdWNoZWQoKXtyZXR1cm4gdGhpcy5fY2Q/LmNvbnRyb2w/Ll90b3VjaGVkPy4oKSwhIXRoaXMuX2NkPy5jb250cm9sPy50b3VjaGVkfWdldCBp''@;'; put 'put ''c1VudG91Y2hlZCgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnVudG91Y2hlZH1nZXQgaXNQcmlzdGluZSgpe3JldHVybiB0aGlzLl9jZD8uY29udHJvbD8uX3ByaXN0aW5lPy4oKSwhIXRoaXMuX2NkPy5jb250cm9sPy5wcmlzdGluZX1nZXQgaXNEaXJ0eSgpe3JldHVybiEhdGhpcy5f''@;'; put 'put ''Y2Q/LmNvbnRyb2w/LmRpcnR5fWdldCBpc1ZhbGlkKCl7cmV0dXJuIHRoaXMuX2NkPy5jb250cm9sPy5fc3RhdHVzPy4oKSwhIXRoaXMuX2NkPy5jb250cm9sPy52YWxpZH1nZXQgaXNJbnZhbGlkKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8uaW52YWxpZH1nZXQgaXNQZW5kaW5nKCl7''@;'; put 'put ''cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8ucGVuZGluZ31nZXQgaXNTdWJtaXR0ZWQoKXtyZXR1cm4gdGhpcy5fY2Q/Ll9zdWJtaXR0ZWQ/LigpLCEhdGhpcy5fY2Q/LnN1Ym1pdHRlZH19bGV0IGhsPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBNMmV7Y29uc3RydWN0b3IoYSl7c3VwZXIoYSl9''@;'; put 'put ''c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHFlKEYxLDIpKX07c3RhdGljIFx1MDI3NWRpcj1Zcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbIiIsIm5nTW9kZWwiLCIiXSxbIiIsImZvcm1Db250cm9sIiwiIl1dLGhv''@;'; put 'put ''c3RWYXJzOjE0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezImZCYmeHIoIm5nLXVudG91Y2hlZCIsaC5pc1VudG91Y2hlZCkoIm5nLXRvdWNoZWQiLGguaXNUb3VjaGVkKSgibmctcHJpc3RpbmUiLGguaXNQcmlzdGluZSkoIm5nLWRpcnR5IixoLmlzRGlydHkpKCJuZy12YWxpZCIsaC5p''@;'; put 'put ''c1ZhbGlkKSgibmctaW52YWxpZCIsaC5pc0ludmFsaWQpKCJuZy1wZW5kaW5nIixoLmlzUGVuZGluZyl9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W0xhXX0pfXJldHVybiBjfSkoKSxtOT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgTTJle2NvbnN0cnVjdG9yKGEpe3N1cGVyKGEpfXN0YXRpYyBc''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShfZCwxMCkpfTtzdGF0aWMgXHUwMjc1ZGlyPVlyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImZvcm1Hcm91cE5hbWUiLCIiXSxbIiIsImZvcm1BcnJheU5hbWUiLCIiXSxbIiIsIm5nTW9kZWxHcm91cCIsIiJdLFsiIiwi''@;'; put 'put ''Zm9ybUdyb3VwIiwiIl0sWyJmb3JtIiwzLCJuZ05vRm9ybSIsIiJdLFsiIiwibmdGb3JtIiwiIl1dLGhvc3RWYXJzOjE2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezImZCYmeHIoIm5nLXVudG91Y2hlZCIsaC5pc1VudG91Y2hlZCkoIm5nLXRvdWNoZWQiLGguaXNUb3VjaGVkKSgibmct''@;'; put 'put ''cHJpc3RpbmUiLGguaXNQcmlzdGluZSkoIm5nLWRpcnR5IixoLmlzRGlydHkpKCJuZy12YWxpZCIsaC5pc1ZhbGlkKSgibmctaW52YWxpZCIsaC5pc0ludmFsaWQpKCJuZy1wZW5kaW5nIixoLmlzUGVuZGluZykoIm5nLXN1Ym1pdHRlZCIsaC5pc1N1Ym1pdHRlZCl9LHN0YW5kYWxvbmU6ITEs''@;'; put 'put ''ZmVhdHVyZXM6W0xhXX0pfXJldHVybiBjfSkoKTtjb25zdCBFVD0iVkFMSUQiLEFGPSJJTlZBTElEIixRXz0iUEVORElORyIsVFQ9IkRJU0FCTEVEIjtjbGFzcyBld3t9Y2xhc3MgRTJlIGV4dGVuZHMgZXd7dmFsdWU7c291cmNlO2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoKSx0aGlzLnZhbHVl''@;'; put 'put ''PWwsdGhpcy5zb3VyY2U9YX19Y2xhc3MgYksgZXh0ZW5kcyBld3twcmlzdGluZTtzb3VyY2U7Y29uc3RydWN0b3IobCxhKXtzdXBlcigpLHRoaXMucHJpc3RpbmU9bCx0aGlzLnNvdXJjZT1hfX1jbGFzcyBfSyBleHRlbmRzIGV3e3RvdWNoZWQ7c291cmNlO2NvbnN0cnVjdG9yKGwsYSl7c3Vw''@;'; put 'put ''ZXIoKSx0aGlzLnRvdWNoZWQ9bCx0aGlzLnNvdXJjZT1hfX1jbGFzcyBrRiBleHRlbmRzIGV3e3N0YXR1cztzb3VyY2U7Y29uc3RydWN0b3IobCxhKXtzdXBlcigpLHRoaXMuc3RhdHVzPWwsdGhpcy5zb3VyY2U9YX19Y2xhc3MgVDJlIGV4dGVuZHMgZXd7c291cmNlO2NvbnN0cnVjdG9yKGwp''@;'; put 'put ''e3N1cGVyKCksdGhpcy5zb3VyY2U9bH19Y2xhc3MgQTJlIGV4dGVuZHMgZXd7c291cmNlO2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5zb3VyY2U9bH19ZnVuY3Rpb24gd0soYyl7cmV0dXJuKERGKGMpP2MudmFsaWRhdG9yczpjKXx8bnVsbH1mdW5jdGlvbiBDSyhjLGwpe3JldHVybihE''@;'; put 'put ''RihsKT9sLmFzeW5jVmFsaWRhdG9yczpjKXx8bnVsbH1mdW5jdGlvbiBERihjKXtyZXR1cm4gbnVsbCE9YyYmIUFycmF5LmlzQXJyYXkoYykmJiJvYmplY3QiPT10eXBlb2YgY31jbGFzcyBTS3tfcGVuZGluZ0RpcnR5PSExO19oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9bnVsbDtfcGVu''@;'; put 'put ''ZGluZ1RvdWNoZWQ9ITE7X29uQ29sbGVjdGlvbkNoYW5nZT0oKT0+e307X3VwZGF0ZU9uO19wYXJlbnQ9bnVsbDtfYXN5bmNWYWxpZGF0aW9uU3Vic2NyaXB0aW9uO19jb21wb3NlZFZhbGlkYXRvckZuO19jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm47X3Jhd1ZhbGlkYXRvcnM7X3Jhd0FzeW5j''@;'; put 'put ''VmFsaWRhdG9yczt2YWx1ZTtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX2Fzc2lnblZhbGlkYXRvcnMobCksdGhpcy5fYXNzaWduQXN5bmNWYWxpZGF0b3JzKGEpfWdldCB2YWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbn1zZXQgdmFsaWRhdG9yKGwpe3RoaXMuX3Jh''@;'; put 'put ''d1ZhbGlkYXRvcnM9dGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbj1sfWdldCBhc3luY1ZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm59c2V0IGFzeW5jVmFsaWRhdG9yKGwpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz10aGlzLl9jb21wb3NlZEFzeW5j''@;'; put 'put ''VmFsaWRhdG9yRm49bH1nZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMuX3BhcmVudH1nZXQgc3RhdHVzKCl7cmV0dXJuIHF1KHRoaXMuc3RhdHVzUmVhY3RpdmUpfXNldCBzdGF0dXMobCl7cXUoKCk9PnRoaXMuc3RhdHVzUmVhY3RpdmUuc2V0KGwpKX1fc3RhdHVzPUdnKCgpPT50aGlzLnN0YXR1''@;'; put 'put ''c1JlYWN0aXZlKCkpO3N0YXR1c1JlYWN0aXZlPW5oKHZvaWQgMCk7Z2V0IHZhbGlkKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT09RVR9Z2V0IGludmFsaWQoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PT1BRn1nZXQgcGVuZGluZygpe3JldHVybiB0aGlzLnN0YXR1cz09UV99Z2V0IGRpc2FibGVkKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuc3RhdHVzPT09VFR9Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5zdGF0dXMhPT1UVH1lcnJvcnM7Z2V0IHByaXN0aW5lKCl7cmV0dXJuIHF1KHRoaXMucHJpc3RpbmVSZWFjdGl2ZSl9c2V0IHByaXN0aW5lKGwpe3F1KCgpPT50aGlzLnByaXN0aW5lUmVhY3RpdmUuc2V0''@;'; put 'put ''KGwpKX1fcHJpc3RpbmU9R2coKCk9PnRoaXMucHJpc3RpbmVSZWFjdGl2ZSgpKTtwcmlzdGluZVJlYWN0aXZlPW5oKCEwKTtnZXQgZGlydHkoKXtyZXR1cm4hdGhpcy5wcmlzdGluZX1nZXQgdG91Y2hlZCgpe3JldHVybiBxdSh0aGlzLnRvdWNoZWRSZWFjdGl2ZSl9c2V0IHRvdWNoZWQobCl7''@;'; put 'put ''cXUoKCk9PnRoaXMudG91Y2hlZFJlYWN0aXZlLnNldChsKSl9X3RvdWNoZWQ9R2coKCk9PnRoaXMudG91Y2hlZFJlYWN0aXZlKCkpO3RvdWNoZWRSZWFjdGl2ZT1uaCghMSk7Z2V0IHVudG91Y2hlZCgpe3JldHVybiF0aGlzLnRvdWNoZWR9X2V2ZW50cz1uZXcgdXI7ZXZlbnRzPXRoaXMuX2V2''@;'; put 'put ''ZW50cy5hc09ic2VydmFibGUoKTt2YWx1ZUNoYW5nZXM7c3RhdHVzQ2hhbmdlcztnZXQgdXBkYXRlT24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlT24/dGhpcy5fdXBkYXRlT246dGhpcy5wYXJlbnQ/dGhpcy5wYXJlbnQudXBkYXRlT246ImNoYW5nZSJ9c2V0VmFsaWRhdG9ycyhsKXt0aGlzLl9h''@;'; put 'put ''c3NpZ25WYWxpZGF0b3JzKGwpfXNldEFzeW5jVmFsaWRhdG9ycyhsKXt0aGlzLl9hc3NpZ25Bc3luY1ZhbGlkYXRvcnMobCl9YWRkVmFsaWRhdG9ycyhsKXt0aGlzLnNldFZhbGlkYXRvcnModzJlKGwsdGhpcy5fcmF3VmFsaWRhdG9ycykpfWFkZEFzeW5jVmFsaWRhdG9ycyhsKXt0aGlzLnNl''@;'; put 'put ''dEFzeW5jVmFsaWRhdG9ycyh3MmUobCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1yZW1vdmVWYWxpZGF0b3JzKGwpe3RoaXMuc2V0VmFsaWRhdG9ycyhDMmUobCx0aGlzLl9yYXdWYWxpZGF0b3JzKSl9cmVtb3ZlQXN5bmNWYWxpZGF0b3JzKGwpe3RoaXMuc2V0QXN5bmNWYWxpZGF0b3Jz''@;'; put 'put ''KEMyZShsLHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycykpfWhhc1ZhbGlkYXRvcihsKXtyZXR1cm4gRUYodGhpcy5fcmF3VmFsaWRhdG9ycyxsKX1oYXNBc3luY1ZhbGlkYXRvcihsKXtyZXR1cm4gRUYodGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzLGwpfWNsZWFyVmFsaWRhdG9ycygpe3RoaXMu''@;'; put 'put ''dmFsaWRhdG9yPW51bGx9Y2xlYXJBc3luY1ZhbGlkYXRvcnMoKXt0aGlzLmFzeW5jVmFsaWRhdG9yPW51bGx9bWFya0FzVG91Y2hlZChsPXt9KXtjb25zdCBhPSExPT09dGhpcy50b3VjaGVkO3RoaXMudG91Y2hlZD0hMDtjb25zdCBkPWwuc291cmNlQ29udHJvbD8/dGhpczt0aGlzLl9wYXJl''@;'; put 'put ''bnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzVG91Y2hlZCh7Li4ubCxzb3VyY2VDb250cm9sOmR9KSxhJiYhMSE9PWwuZW1pdEV2ZW50JiZ0aGlzLl9ldmVudHMubmV4dChuZXcgX0soITAsZCkpfW1hcmtBbGxBc1RvdWNoZWQobD17fSl7dGhpcy5tYXJrQXNUb3VjaGVkKHtv''@;'; put 'put ''bmx5U2VsZjohMCxlbWl0RXZlbnQ6bC5lbWl0RXZlbnQsc291cmNlQ29udHJvbDp0aGlzfSksdGhpcy5fZm9yRWFjaENoaWxkKGE9PmEubWFya0FsbEFzVG91Y2hlZChsKSl9bWFya0FzVW50b3VjaGVkKGw9e30pe2NvbnN0IGE9ITA9PT10aGlzLnRvdWNoZWQ7dGhpcy50b3VjaGVkPSExLHRo''@;'; put 'put ''aXMuX3BlbmRpbmdUb3VjaGVkPSExO2NvbnN0IGQ9bC5zb3VyY2VDb250cm9sPz90aGlzO3RoaXMuX2ZvckVhY2hDaGlsZChoPT57aC5tYXJrQXNVbnRvdWNoZWQoe29ubHlTZWxmOiEwLGVtaXRFdmVudDpsLmVtaXRFdmVudCxzb3VyY2VDb250cm9sOmR9KX0pLHRoaXMuX3BhcmVudCYmIWwu''@;'; put 'put ''b25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlVG91Y2hlZChsLGQpLGEmJiExIT09bC5lbWl0RXZlbnQmJnRoaXMuX2V2ZW50cy5uZXh0KG5ldyBfSyghMSxkKSl9bWFya0FzRGlydHkobD17fSl7Y29uc3QgYT0hMD09PXRoaXMucHJpc3RpbmU7dGhpcy5wcmlzdGluZT0hMTtjb25zdCBk''@;'; put 'put ''PWwuc291cmNlQ29udHJvbD8/dGhpczt0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzRGlydHkoey4uLmwsc291cmNlQ29udHJvbDpkfSksYSYmITEhPT1sLmVtaXRFdmVudCYmdGhpcy5fZXZlbnRzLm5leHQobmV3IGJLKCExLGQpKX1tYXJrQXNQcmlzdGlu''@;'; put 'put ''ZShsPXt9KXtjb25zdCBhPSExPT09dGhpcy5wcmlzdGluZTt0aGlzLnByaXN0aW5lPSEwLHRoaXMuX3BlbmRpbmdEaXJ0eT0hMTtjb25zdCBkPWwuc291cmNlQ29udHJvbD8/dGhpczt0aGlzLl9mb3JFYWNoQ2hpbGQoaD0+e2gubWFya0FzUHJpc3RpbmUoe29ubHlTZWxmOiEwLGVtaXRFdmVu''@;'; put 'put ''dDpsLmVtaXRFdmVudH0pfSksdGhpcy5fcGFyZW50JiYhbC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZShsLGQpLGEmJiExIT09bC5lbWl0RXZlbnQmJnRoaXMuX2V2ZW50cy5uZXh0KG5ldyBiSyghMCxkKSl9bWFya0FzUGVuZGluZyhsPXt9KXt0aGlzLnN0YXR1cz1R''@;'; put 'put ''Xztjb25zdCBhPWwuc291cmNlQ29udHJvbD8/dGhpczshMSE9PWwuZW1pdEV2ZW50JiYodGhpcy5fZXZlbnRzLm5leHQobmV3IGtGKHRoaXMuc3RhdHVzLGEpKSx0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cykpLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3Bh''@;'; put 'put ''cmVudC5tYXJrQXNQZW5kaW5nKHsuLi5sLHNvdXJjZUNvbnRyb2w6YX0pfWRpc2FibGUobD17fSl7Y29uc3QgYT10aGlzLl9wYXJlbnRNYXJrZWREaXJ0eShsLm9ubHlTZWxmKTt0aGlzLnN0YXR1cz1UVCx0aGlzLmVycm9ycz1udWxsLHRoaXMuX2ZvckVhY2hDaGlsZChoPT57aC5kaXNhYmxl''@;'; put 'put ''KHsuLi5sLG9ubHlTZWxmOiEwfSl9KSx0aGlzLl91cGRhdGVWYWx1ZSgpO2NvbnN0IGQ9bC5zb3VyY2VDb250cm9sPz90aGlzOyExIT09bC5lbWl0RXZlbnQmJih0aGlzLl9ldmVudHMubmV4dChuZXcgRTJlKHRoaXMudmFsdWUsZCkpLHRoaXMuX2V2ZW50cy5uZXh0KG5ldyBrRih0aGlzLnN0''@;'; put 'put ''YXR1cyxkKSksdGhpcy52YWx1ZUNoYW5nZXMuZW1pdCh0aGlzLnZhbHVlKSx0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cykpLHRoaXMuX3VwZGF0ZUFuY2VzdG9ycyh7Li4ubCxza2lwUHJpc3RpbmVDaGVjazphfSx0aGlzKSx0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLmZvckVh''@;'; put 'put ''Y2goaD0+aCghMCkpfWVuYWJsZShsPXt9KXtjb25zdCBhPXRoaXMuX3BhcmVudE1hcmtlZERpcnR5KGwub25seVNlbGYpO3RoaXMuc3RhdHVzPUVULHRoaXMuX2ZvckVhY2hDaGlsZChkPT57ZC5lbmFibGUoey4uLmwsb25seVNlbGY6ITB9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0''@;'; put 'put ''eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OmwuZW1pdEV2ZW50fSksdGhpcy5fdXBkYXRlQW5jZXN0b3JzKHsuLi5sLHNraXBQcmlzdGluZUNoZWNrOmF9LHRoaXMpLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UuZm9yRWFjaChkPT5kKCExKSl9X3VwZGF0ZUFuY2VzdG9ycyhsLGEpe3RoaXMuX3Bh''@;'; put 'put ''cmVudCYmIWwub25seVNlbGYmJih0aGlzLl9wYXJlbnQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShsKSxsLnNraXBQcmlzdGluZUNoZWNrfHx0aGlzLl9wYXJlbnQuX3VwZGF0ZVByaXN0aW5lKHt9LGEpLHRoaXMuX3BhcmVudC5fdXBkYXRlVG91Y2hlZCh7fSxhKSl9c2V0UGFyZW50KGwpe3Ro''@;'; put 'put ''aXMuX3BhcmVudD1sfWdldFJhd1ZhbHVlKCl7cmV0dXJuIHRoaXMudmFsdWV9dXBkYXRlVmFsdWVBbmRWYWxpZGl0eShsPXt9KXtpZih0aGlzLl9zZXRJbml0aWFsU3RhdHVzKCksdGhpcy5fdXBkYXRlVmFsdWUoKSx0aGlzLmVuYWJsZWQpe2NvbnN0IGQ9dGhpcy5fY2FuY2VsRXhpc3RpbmdT''@;'; put 'put ''dWJzY3JpcHRpb24oKTt0aGlzLmVycm9ycz10aGlzLl9ydW5WYWxpZGF0b3IoKSx0aGlzLnN0YXR1cz10aGlzLl9jYWxjdWxhdGVTdGF0dXMoKSwodGhpcy5zdGF0dXM9PT1FVHx8dGhpcy5zdGF0dXM9PT1RXykmJnRoaXMuX3J1bkFzeW5jVmFsaWRhdG9yKGQsbC5lbWl0RXZlbnQpfWNvbnN0''@;'; put 'put ''IGE9bC5zb3VyY2VDb250cm9sPz90aGlzOyExIT09bC5lbWl0RXZlbnQmJih0aGlzLl9ldmVudHMubmV4dChuZXcgRTJlKHRoaXMudmFsdWUsYSkpLHRoaXMuX2V2ZW50cy5uZXh0KG5ldyBrRih0aGlzLnN0YXR1cyxhKSksdGhpcy52YWx1ZUNoYW5nZXMuZW1pdCh0aGlzLnZhbHVlKSx0aGlz''@;'; put 'put ''LnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cykpLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsuLi5sLHNvdXJjZUNvbnRyb2w6YX0pfV91cGRhdGVUcmVlVmFsaWRpdHkobD17ZW1pdEV2ZW50OiEwfSl7dGhpcy5f''@;'; put 'put ''Zm9yRWFjaENoaWxkKGE9PmEuX3VwZGF0ZVRyZWVWYWxpZGl0eShsKSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6bC5lbWl0RXZlbnR9KX1fc2V0SW5pdGlhbFN0YXR1cygpe3RoaXMuc3RhdHVzPXRoaXMuX2FsbENvbnRyb2xzRGlzYWJsZWQo''@;'; put 'put ''KT9UVDpFVH1fcnVuVmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMudmFsaWRhdG9yP3RoaXMudmFsaWRhdG9yKHRoaXMpOm51bGx9X3J1bkFzeW5jVmFsaWRhdG9yKGwsYSl7aWYodGhpcy5hc3luY1ZhbGlkYXRvcil7dGhpcy5zdGF0dXM9UV8sdGhpcy5faGFzT3duUGVuZGluZ0FzeW5jVmFsaWRh''@;'; put 'put ''dG9yPXtlbWl0RXZlbnQ6ITEhPT1hfTtjb25zdCBkPWgyZSh0aGlzLmFzeW5jVmFsaWRhdG9yKHRoaXMpKTt0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb249ZC5zdWJzY3JpYmUoaD0+e3RoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj1udWxsLHRoaXMuc2V0RXJyb3Jz''@;'; put 'put ''KGgse2VtaXRFdmVudDphLHNob3VsZEhhdmVFbWl0dGVkOmx9KX0pfX1fY2FuY2VsRXhpc3RpbmdTdWJzY3JpcHRpb24oKXtpZih0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb24pe3RoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO2NvbnN0IGw9''@;'; put 'put ''dGhpcy5faGFzT3duUGVuZGluZ0FzeW5jVmFsaWRhdG9yPy5lbWl0RXZlbnQ/PyExO3JldHVybiB0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9bnVsbCxsfXJldHVybiExfXNldEVycm9ycyhsLGE9e30pe3RoaXMuZXJyb3JzPWwsdGhpcy5fdXBkYXRlQ29udHJvbHNFcnJvcnMo''@;'; put 'put ''ITEhPT1hLmVtaXRFdmVudCx0aGlzLGEuc2hvdWxkSGF2ZUVtaXR0ZWQpfWdldChsKXtsZXQgYT1sO3JldHVybiBudWxsPT1hfHwoQXJyYXkuaXNBcnJheShhKXx8KGE9YS5zcGxpdCgiLiIpKSwwPT09YS5sZW5ndGgpP251bGw6YS5yZWR1Y2UoKGQsaCk9PmQmJmQuX2ZpbmQoaCksdGhpcyl9''@;'; put 'put ''Z2V0RXJyb3IobCxhKXtjb25zdCBkPWE/dGhpcy5nZXQoYSk6dGhpcztyZXR1cm4gZCYmZC5lcnJvcnM/ZC5lcnJvcnNbbF06bnVsbH1oYXNFcnJvcihsLGEpe3JldHVybiEhdGhpcy5nZXRFcnJvcihsLGEpfWdldCByb290KCl7bGV0IGw9dGhpcztmb3IoO2wuX3BhcmVudDspbD1sLl9wYXJl''@;'; put 'put ''bnQ7cmV0dXJuIGx9X3VwZGF0ZUNvbnRyb2xzRXJyb3JzKGwsYSxkKXt0aGlzLnN0YXR1cz10aGlzLl9jYWxjdWxhdGVTdGF0dXMoKSxsJiZ0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cyksKGx8fGQpJiZ0aGlzLl9ldmVudHMubmV4dChuZXcga0YodGhpcy5zdGF0dXMsYSkp''@;'; put 'put ''LHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Ll91cGRhdGVDb250cm9sc0Vycm9ycyhsLGEsZCl9X2luaXRPYnNlcnZhYmxlcygpe3RoaXMudmFsdWVDaGFuZ2VzPW5ldyBYcix0aGlzLnN0YXR1c0NoYW5nZXM9bmV3IFhyfV9jYWxjdWxhdGVTdGF0dXMoKXtyZXR1cm4gdGhpcy5fYWxsQ29u''@;'; put 'put ''dHJvbHNEaXNhYmxlZCgpP1RUOnRoaXMuZXJyb3JzP0FGOnRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcnx8dGhpcy5fYW55Q29udHJvbHNIYXZlU3RhdHVzKFFfKT9RXzp0aGlzLl9hbnlDb250cm9sc0hhdmVTdGF0dXMoQUYpP0FGOkVUfV9hbnlDb250cm9sc0hhdmVTdGF0dXMo''@;'; put 'put ''bCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGE9PmEuc3RhdHVzPT09bCl9X2FueUNvbnRyb2xzRGlydHkoKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHMobD0+bC5kaXJ0eSl9X2FueUNvbnRyb2xzVG91Y2hlZCgpe3JldHVybiB0aGlzLl9hbnlDb250cm9scyhsPT5sLnRvdWNoZWQpfV91''@;'; put 'put ''cGRhdGVQcmlzdGluZShsLGEpe2NvbnN0IGQ9IXRoaXMuX2FueUNvbnRyb2xzRGlydHkoKSxoPXRoaXMucHJpc3RpbmUhPT1kO3RoaXMucHJpc3RpbmU9ZCx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZVByaXN0aW5lKGwsYSksaCYmdGhpcy5fZXZlbnRz''@;'; put 'put ''Lm5leHQobmV3IGJLKHRoaXMucHJpc3RpbmUsYSkpfV91cGRhdGVUb3VjaGVkKGw9e30sYSl7dGhpcy50b3VjaGVkPXRoaXMuX2FueUNvbnRyb2xzVG91Y2hlZCgpLHRoaXMuX2V2ZW50cy5uZXh0KG5ldyBfSyh0aGlzLnRvdWNoZWQsYSkpLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRo''@;'; put 'put ''aXMuX3BhcmVudC5fdXBkYXRlVG91Y2hlZChsLGEpfV9vbkRpc2FibGVkQ2hhbmdlPVtdO19yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZShsKXt0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9bH1fc2V0VXBkYXRlU3RyYXRlZ3kobCl7REYobCkmJm51bGwhPWwudXBkYXRlT24mJih0aGlzLl91''@;'; put 'put ''cGRhdGVPbj1sLnVwZGF0ZU9uKX1fcGFyZW50TWFya2VkRGlydHkobCl7cmV0dXJuIWwmJiEoIXRoaXMuX3BhcmVudHx8IXRoaXMuX3BhcmVudC5kaXJ0eSkmJiF0aGlzLl9wYXJlbnQuX2FueUNvbnRyb2xzRGlydHkoKX1fZmluZChsKXtyZXR1cm4gbnVsbH1fYXNzaWduVmFsaWRhdG9ycyhs''@;'; put 'put ''KXt0aGlzLl9yYXdWYWxpZGF0b3JzPUFycmF5LmlzQXJyYXkobCk/bC5zbGljZSgpOmwsdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbj1mdW5jdGlvbiBGQmUoYyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYyk/cEsoYyk6Y3x8bnVsbH0odGhpcy5fcmF3VmFsaWRhdG9ycyl9X2Fzc2lnbkFzeW5j''@;'; put 'put ''VmFsaWRhdG9ycyhsKXt0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9QXJyYXkuaXNBcnJheShsKT9sLnNsaWNlKCk6bCx0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm49ZnVuY3Rpb24gSEJlKGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpP2dLKGMpOmN8fG51bGx9KHRoaXMuX3Jhd0Fz''@;'; put 'put ''eW5jVmFsaWRhdG9ycyl9fWNsYXNzIElGIGV4dGVuZHMgU0t7Y29uc3RydWN0b3IobCxhLGQpe3N1cGVyKHdLKGEpLENLKGQsYSkpLHRoaXMuY29udHJvbHM9bCx0aGlzLl9pbml0T2JzZXJ2YWJsZXMoKSx0aGlzLl9zZXRVcGRhdGVTdHJhdGVneShhKSx0aGlzLl9zZXRVcENvbnRyb2xzKCks''@;'; put 'put ''dGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ISF0aGlzLmFzeW5jVmFsaWRhdG9yfSl9Y29udHJvbHM7cmVnaXN0ZXJDb250cm9sKGwsYSl7cmV0dXJuIHRoaXMuY29udHJvbHNbbF0/dGhpcy5jb250cm9sc1tsXToodGhpcy5jb250cm9sc1tsXT1h''@;'; put 'put ''LGEuc2V0UGFyZW50KHRoaXMpLGEuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSksYSl9YWRkQ29udHJvbChsLGEsZD17fSl7dGhpcy5yZWdpc3RlckNvbnRyb2wobCxhKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDpk''@;'; put 'put ''LmVtaXRFdmVudH0pLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfXJlbW92ZUNvbnRyb2wobCxhPXt9KXt0aGlzLmNvbnRyb2xzW2xdJiZ0aGlzLmNvbnRyb2xzW2xdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKT0+e30pLGRlbGV0ZSB0aGlzLmNvbnRyb2xzW2xdLHRoaXMudXBk''@;'; put 'put ''YXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OmEuZW1pdEV2ZW50fSksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9c2V0Q29udHJvbChsLGEsZD17fSl7dGhpcy5jb250cm9sc1tsXSYmdGhpcy5jb250cm9sc1tsXS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCk9Pnt9KSxk''@;'; put 'put ''ZWxldGUgdGhpcy5jb250cm9sc1tsXSxhJiZ0aGlzLnJlZ2lzdGVyQ29udHJvbChsLGEpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OmQuZW1pdEV2ZW50fSksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9Y29udGFpbnMobCl7cmV0dXJuIHRoaXMuY29udHJvbHMu''@;'; put 'put ''aGFzT3duUHJvcGVydHkobCkmJnRoaXMuY29udHJvbHNbbF0uZW5hYmxlZH1zZXRWYWx1ZShsLGE9e30peyhmdW5jdGlvbiBEMmUoYyxsLGEpe2MuX2ZvckVhY2hDaGlsZCgoZCxoKT0+e2lmKHZvaWQgMD09PWFbaF0pdGhyb3cgbmV3IFByKDEwMDIsIiIpfSl9KSh0aGlzLDAsbCksT2JqZWN0''@;'; put 'put ''LmtleXMobCkuZm9yRWFjaChkPT57KGZ1bmN0aW9uIGsyZShjLGwsYSl7Y29uc3QgZD1jLmNvbnRyb2xzO2lmKCEobD9PYmplY3Qua2V5cyhkKTpkKS5sZW5ndGgpdGhyb3cgbmV3IFByKDFlMywiIik7aWYoIWRbYV0pdGhyb3cgbmV3IFByKDEwMDEsIiIpfSkodGhpcywhMCxkKSx0aGlzLmNv''@;'; put 'put ''bnRyb2xzW2RdLnNldFZhbHVlKGxbZF0se29ubHlTZWxmOiEwLGVtaXRFdmVudDphLmVtaXRFdmVudH0pfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGEpfXBhdGNoVmFsdWUobCxhPXt9KXtudWxsIT1sJiYoT2JqZWN0LmtleXMobCkuZm9yRWFjaChkPT57Y29uc3QgaD10aGlzLmNv''@;'; put 'put ''bnRyb2xzW2RdO2gmJmgucGF0Y2hWYWx1ZShsW2RdLHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6YS5lbWl0RXZlbnR9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShhKSl9cmVzZXQobD17fSxhPXt9KXt0aGlzLl9mb3JFYWNoQ2hpbGQoKGQsaCk9PntkLnJlc2V0KGw/bFtoXTpudWxs''@;'; put 'put ''LHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6YS5lbWl0RXZlbnR9KX0pLHRoaXMuX3VwZGF0ZVByaXN0aW5lKGEsdGhpcyksdGhpcy5fdXBkYXRlVG91Y2hlZChhLHRoaXMpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShhKX1nZXRSYXdWYWx1ZSgpe3JldHVybiB0aGlzLl9yZWR1Y2VDaGls''@;'; put 'put ''ZHJlbih7fSwobCxhLGQpPT4obFtkXT1hLmdldFJhd1ZhbHVlKCksbCkpfV9zeW5jUGVuZGluZ0NvbnRyb2xzKCl7bGV0IGw9dGhpcy5fcmVkdWNlQ2hpbGRyZW4oITEsKGEsZCk9PiEhZC5fc3luY1BlbmRpbmdDb250cm9scygpfHxhKTtyZXR1cm4gbCYmdGhpcy51cGRhdGVWYWx1ZUFuZFZh''@;'; put 'put ''bGlkaXR5KHtvbmx5U2VsZjohMH0pLGx9X2ZvckVhY2hDaGlsZChsKXtPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKS5mb3JFYWNoKGE9Pntjb25zdCBkPXRoaXMuY29udHJvbHNbYV07ZCYmbChkLGEpfSl9X3NldFVwQ29udHJvbHMoKXt0aGlzLl9mb3JFYWNoQ2hpbGQobD0+e2wuc2V0UGFy''@;'; put 'put ''ZW50KHRoaXMpLGwuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSl9KX1fdXBkYXRlVmFsdWUoKXt0aGlzLnZhbHVlPXRoaXMuX3JlZHVjZVZhbHVlKCl9X2FueUNvbnRyb2xzKGwpe2Zvcihjb25zdFthLGRdb2YgT2JqZWN0LmVudHJpZXModGhp''@;'; put 'put ''cy5jb250cm9scykpaWYodGhpcy5jb250YWlucyhhKSYmbChkKSlyZXR1cm4hMDtyZXR1cm4hMX1fcmVkdWNlVmFsdWUoKXtyZXR1cm4gdGhpcy5fcmVkdWNlQ2hpbGRyZW4oe30sKGEsZCxoKT0+KChkLmVuYWJsZWR8fHRoaXMuZGlzYWJsZWQpJiYoYVtoXT1kLnZhbHVlKSxhKSl9X3JlZHVj''@;'; put 'put ''ZUNoaWxkcmVuKGwsYSl7bGV0IGQ9bDtyZXR1cm4gdGhpcy5fZm9yRWFjaENoaWxkKChoLGYpPT57ZD1hKGQsaCxmKX0pLGR9X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtmb3IoY29uc3QgbCBvZiBPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKSlpZih0aGlzLmNvbnRyb2xzW2xdLmVuYWJsZWQp''@;'; put 'put ''cmV0dXJuITE7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpLmxlbmd0aD4wfHx0aGlzLmRpc2FibGVkfV9maW5kKGwpe3JldHVybiB0aGlzLmNvbnRyb2xzLmhhc093blByb3BlcnR5KGwpP3RoaXMuY29udHJvbHNbbF06bnVsbH19Y29uc3Qgdjk9bmV3IGpuKCIiLHtwcm92aWRl''@;'; put 'put ''ZEluOiJyb290IixmYWN0b3J5OigpPT5BVH0pLEFUPSJhbHdheXMiO2Z1bmN0aW9uIGtUKGMsbCxhPUFUKXtNSyhjLGwpLGwudmFsdWVBY2Nlc3Nvci53cml0ZVZhbHVlKGMudmFsdWUpLChjLmRpc2FibGVkfHwiYWx3YXlzIj09PWEpJiZsLnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0''@;'; put 'put ''ZT8uKGMuZGlzYWJsZWQpLGZ1bmN0aW9uIEJCZShjLGwpe2wudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uQ2hhbmdlKGE9PntjLl9wZW5kaW5nVmFsdWU9YSxjLl9wZW5kaW5nQ2hhbmdlPSEwLGMuX3BlbmRpbmdEaXJ0eT0hMCwiY2hhbmdlIj09PWMudXBkYXRlT24mJkkyZShjLGwpfSl9KGMs''@;'; put 'put ''bCksZnVuY3Rpb24gekJlKGMsbCl7Y29uc3QgYT0oZCxoKT0+e2wudmFsdWVBY2Nlc3Nvci53cml0ZVZhbHVlKGQpLGgmJmwudmlld1RvTW9kZWxVcGRhdGUoZCl9O2MucmVnaXN0ZXJPbkNoYW5nZShhKSxsLl9yZWdpc3Rlck9uRGVzdHJveSgoKT0+e2MuX3VucmVnaXN0ZXJPbkNoYW5nZShh''@;'; put 'put ''KX0pfShjLGwpLGZ1bmN0aW9uIGpCZShjLGwpe2wudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uVG91Y2hlZCgoKT0+e2MuX3BlbmRpbmdUb3VjaGVkPSEwLCJibHVyIj09PWMudXBkYXRlT24mJmMuX3BlbmRpbmdDaGFuZ2UmJkkyZShjLGwpLCJzdWJtaXQiIT09Yy51cGRhdGVPbiYmYy5tYXJr''@;'; put 'put ''QXNUb3VjaGVkKCl9KX0oYyxsKSxmdW5jdGlvbiBWQmUoYyxsKXtpZihsLnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZSl7Y29uc3QgYT1kPT57bC52YWx1ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGUoZCl9O2MucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKGEpLGwuX3JlZ2lzdGVy''@;'; put 'put ''T25EZXN0cm95KCgpPT57Yy5fdW5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UoYSl9KX19KGMsbCl9ZnVuY3Rpb24gT0YoYyxsKXtjLmZvckVhY2goYT0+e2EucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSYmYS5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGwpfSl9ZnVuY3Rpb24gTUsoYyxs''@;'; put 'put ''KXtjb25zdCBhPWZ1bmN0aW9uIGIyZShjKXtyZXR1cm4gYy5fcmF3VmFsaWRhdG9yc30oYyk7bnVsbCE9PWwudmFsaWRhdG9yP2Muc2V0VmFsaWRhdG9ycyh5MmUoYSxsLnZhbGlkYXRvcikpOiJmdW5jdGlvbiI9PXR5cGVvZiBhJiZjLnNldFZhbGlkYXRvcnMoW2FdKTtjb25zdCBkPWZ1bmN0''@;'; put 'put ''aW9uIF8yZShjKXtyZXR1cm4gYy5fcmF3QXN5bmNWYWxpZGF0b3JzfShjKTtudWxsIT09bC5hc3luY1ZhbGlkYXRvcj9jLnNldEFzeW5jVmFsaWRhdG9ycyh5MmUoZCxsLmFzeW5jVmFsaWRhdG9yKSk6ImZ1bmN0aW9uIj09dHlwZW9mIGQmJmMuc2V0QXN5bmNWYWxpZGF0b3JzKFtkXSk7Y29u''@;'; put 'put ''c3QgaD0oKT0+Yy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7T0YobC5fcmF3VmFsaWRhdG9ycyxoKSxPRihsLl9yYXdBc3luY1ZhbGlkYXRvcnMsaCl9ZnVuY3Rpb24gSTJlKGMsbCl7Yy5fcGVuZGluZ0RpcnR5JiZjLm1hcmtBc0RpcnR5KCksYy5zZXRWYWx1ZShjLl9wZW5kaW5nVmFsdWUs''@;'; put 'put ''e2VtaXRNb2RlbFRvVmlld0NoYW5nZTohMX0pLGwudmlld1RvTW9kZWxVcGRhdGUoYy5fcGVuZGluZ1ZhbHVlKSxjLl9wZW5kaW5nQ2hhbmdlPSExfWNvbnN0IEdCZT17cHJvdmlkZTpfZCx1c2VFeGlzdGluZzp1cygoKT0+VjMpfSxEVD1Qcm9taXNlLnJlc29sdmUoKTtsZXQgVjM9KCgpPT57''@;'; put 'put ''Y2xhc3MgYyBleHRlbmRzIF9ke2NhbGxTZXREaXNhYmxlZFN0YXRlO2dldCBzdWJtaXR0ZWQoKXtyZXR1cm4gcXUodGhpcy5zdWJtaXR0ZWRSZWFjdGl2ZSl9X3N1Ym1pdHRlZD1HZygoKT0+dGhpcy5zdWJtaXR0ZWRSZWFjdGl2ZSgpKTtzdWJtaXR0ZWRSZWFjdGl2ZT1uaCghMSk7X2RpcmVj''@;'; put 'put ''dGl2ZXM9bmV3IFNldDtmb3JtO25nU3VibWl0PW5ldyBYcjtvcHRpb25zO2NvbnN0cnVjdG9yKGEsZCxoKXtzdXBlcigpLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGU9aCx0aGlzLmZvcm09bmV3IElGKHt9LHBLKGEpLGdLKGQpKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9zZXRVcGRhdGVT''@;'; put 'put ''dHJhdGVneSgpfWdldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIHRoaXN9Z2V0IGNvbnRyb2woKXtyZXR1cm4gdGhpcy5mb3JtfWdldCBwYXRoKCl7cmV0dXJuW119Z2V0IGNvbnRyb2xzKCl7cmV0dXJuIHRoaXMuZm9ybS5jb250cm9sc31hZGRDb250cm9sKGEpe0RULnRoZW4oKCk9Pntjb25z''@;'; put 'put ''dCBkPXRoaXMuX2ZpbmRDb250YWluZXIoYS5wYXRoKTthLmNvbnRyb2w9ZC5yZWdpc3RlckNvbnRyb2woYS5uYW1lLGEuY29udHJvbCksa1QoYS5jb250cm9sLGEsdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZSksYS5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDoh''@;'; put 'put ''MX0pLHRoaXMuX2RpcmVjdGl2ZXMuYWRkKGEpfSl9Z2V0Q29udHJvbChhKXtyZXR1cm4gdGhpcy5mb3JtLmdldChhLnBhdGgpfXJlbW92ZUNvbnRyb2woYSl7RFQudGhlbigoKT0+e2NvbnN0IGQ9dGhpcy5fZmluZENvbnRhaW5lcihhLnBhdGgpO2QmJmQucmVtb3ZlQ29udHJvbChhLm5hbWUp''@;'; put 'put ''LHRoaXMuX2RpcmVjdGl2ZXMuZGVsZXRlKGEpfSl9YWRkRm9ybUdyb3VwKGEpe0RULnRoZW4oKCk9Pntjb25zdCBkPXRoaXMuX2ZpbmRDb250YWluZXIoYS5wYXRoKSxoPW5ldyBJRih7fSk7KGZ1bmN0aW9uIFIyZShjLGwpe01LKGMsbCl9KShoLGEpLGQucmVnaXN0ZXJDb250cm9sKGEubmFt''@;'; put 'put ''ZSxoKSxoLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSl9cmVtb3ZlRm9ybUdyb3VwKGEpe0RULnRoZW4oKCk9Pntjb25zdCBkPXRoaXMuX2ZpbmRDb250YWluZXIoYS5wYXRoKTtkJiZkLnJlbW92ZUNvbnRyb2woYS5uYW1lKX0pfWdldEZvcm1Hcm91cChhKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5mb3JtLmdldChhLnBhdGgpfXVwZGF0ZU1vZGVsKGEsZCl7RFQudGhlbigoKT0+e3RoaXMuZm9ybS5nZXQoYS5wYXRoKS5zZXRWYWx1ZShkKX0pfXNldFZhbHVlKGEpe3RoaXMuY29udHJvbC5zZXRWYWx1ZShhKX1vblN1Ym1pdChhKXtyZXR1cm4gdGhpcy5zdWJtaXR0ZWRSZWFj''@;'; put 'put ''dGl2ZS5zZXQoITApLGZ1bmN0aW9uIEwyZShjLGwpe2MuX3N5bmNQZW5kaW5nQ29udHJvbHMoKSxsLmZvckVhY2goYT0+e2NvbnN0IGQ9YS5jb250cm9sOyJzdWJtaXQiPT09ZC51cGRhdGVPbiYmZC5fcGVuZGluZ0NoYW5nZSYmKGEudmlld1RvTW9kZWxVcGRhdGUoZC5fcGVuZGluZ1ZhbHVl''@;'; put 'put ''KSxkLl9wZW5kaW5nQ2hhbmdlPSExKX0pfSh0aGlzLmZvcm0sdGhpcy5fZGlyZWN0aXZlcyksdGhpcy5uZ1N1Ym1pdC5lbWl0KGEpLHRoaXMuZm9ybS5fZXZlbnRzLm5leHQobmV3IFQyZSh0aGlzLmNvbnRyb2wpKSwiZGlhbG9nIj09PWE/LnRhcmdldD8ubWV0aG9kfW9uUmVzZXQoKXt0aGlz''@;'; put 'put ''LnJlc2V0Rm9ybSgpfXJlc2V0Rm9ybShhPXZvaWQgMCl7dGhpcy5mb3JtLnJlc2V0KGEpLHRoaXMuc3VibWl0dGVkUmVhY3RpdmUuc2V0KCExKSx0aGlzLmZvcm0uX2V2ZW50cy5uZXh0KG5ldyBBMmUodGhpcy5mb3JtKSl9X3NldFVwZGF0ZVN0cmF0ZWd5KCl7dGhpcy5vcHRpb25zJiZudWxs''@;'; put 'put ''IT10aGlzLm9wdGlvbnMudXBkYXRlT24mJih0aGlzLmZvcm0uX3VwZGF0ZU9uPXRoaXMub3B0aW9ucy51cGRhdGVPbil9X2ZpbmRDb250YWluZXIoYSl7cmV0dXJuIGEucG9wKCksYS5sZW5ndGg/dGhpcy5mb3JtLmdldChhKTp0aGlzLmZvcm19c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihk''@;'; put 'put ''KXtyZXR1cm4gbmV3KGR8fGMpKHFlKHgwLDEwKSxxZShvNiwxMCkscWUodjksOCkpfTtzdGF0aWMgXHUwMjc1ZGlyPVlyKHt0eXBlOmMsc2VsZWN0b3JzOltbImZvcm0iLDMsIm5nTm9Gb3JtIiwiIiwzLCJmb3JtR3JvdXAiLCIiXSxbIm5nLWZvcm0iXSxbIiIsIm5nRm9ybSIsIiJdXSxob3N0''@;'; put 'put ''QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJk90KCJzdWJtaXQiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uU3VibWl0KHYpfSkoInJlc2V0IixmdW5jdGlvbigpe3JldHVybiBoLm9uUmVzZXQoKX0pfSxpbnB1dHM6e29wdGlvbnM6WzAsIm5nRm9ybU9wdGlvbnMiLCJvcHRpb25zIl19LG91''@;'; put 'put ''dHB1dHM6e25nU3VibWl0OiJuZ1N1Ym1pdCJ9LGV4cG9ydEFzOlsibmdGb3JtIl0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbaGEoW0dCZV0pLExhXX0pfXJldHVybiBjfSkoKTtmdW5jdGlvbiBPMmUoYyxsKXtjb25zdCBhPWMuaW5kZXhPZihsKTthPi0xJiZjLnNwbGljZShhLDEpfWZ1bmN0''@;'; put 'put ''aW9uIFAyZShjKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGMmJm51bGwhPT1jJiYyPT09T2JqZWN0LmtleXMoYykubGVuZ3RoJiYidmFsdWUiaW4gYyYmImRpc2FibGVkImluIGN9Y29uc3QgQUs9Y2xhc3MgZXh0ZW5kcyBTS3tkZWZhdWx0VmFsdWU9bnVsbDtfb25DaGFuZ2U9W107X3BlbmRp''@;'; put 'put ''bmdWYWx1ZTtfcGVuZGluZ0NoYW5nZT0hMTtjb25zdHJ1Y3RvcihsPW51bGwsYSxkKXtzdXBlcih3SyhhKSxDSyhkLGEpKSx0aGlzLl9hcHBseUZvcm1TdGF0ZShsKSx0aGlzLl9zZXRVcGRhdGVTdHJhdGVneShhKSx0aGlzLl9pbml0T2JzZXJ2YWJsZXMoKSx0aGlzLnVwZGF0ZVZhbHVlQW5k''@;'; put 'put ''VmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohIXRoaXMuYXN5bmNWYWxpZGF0b3J9KSxERihhKSYmKGEubm9uTnVsbGFibGV8fGEuaW5pdGlhbFZhbHVlSXNEZWZhdWx0KSYmKHRoaXMuZGVmYXVsdFZhbHVlPVAyZShsKT9sLnZhbHVlOmwpfXNldFZhbHVlKGwsYT17fSl7dGhpcy52''@;'; put 'put ''YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9bCx0aGlzLl9vbkNoYW5nZS5sZW5ndGgmJiExIT09YS5lbWl0TW9kZWxUb1ZpZXdDaGFuZ2UmJnRoaXMuX29uQ2hhbmdlLmZvckVhY2goZD0+ZCh0aGlzLnZhbHVlLCExIT09YS5lbWl0Vmlld1RvTW9kZWxDaGFuZ2UpKSx0aGlzLnVwZGF0ZVZhbHVl''@;'; put 'put ''QW5kVmFsaWRpdHkoYSl9cGF0Y2hWYWx1ZShsLGE9e30pe3RoaXMuc2V0VmFsdWUobCxhKX1yZXNldChsPXRoaXMuZGVmYXVsdFZhbHVlLGE9e30pe3RoaXMuX2FwcGx5Rm9ybVN0YXRlKGwpLHRoaXMubWFya0FzUHJpc3RpbmUoYSksdGhpcy5tYXJrQXNVbnRvdWNoZWQoYSksdGhpcy5zZXRW''@;'; put 'put ''YWx1ZSh0aGlzLnZhbHVlLGEpLHRoaXMuX3BlbmRpbmdDaGFuZ2U9ITF9X3VwZGF0ZVZhbHVlKCl7fV9hbnlDb250cm9scyhsKXtyZXR1cm4hMX1fYWxsQ29udHJvbHNEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfXJlZ2lzdGVyT25DaGFuZ2UobCl7dGhpcy5fb25DaGFuZ2UucHVz''@;'; put 'put ''aChsKX1fdW5yZWdpc3Rlck9uQ2hhbmdlKGwpe08yZSh0aGlzLl9vbkNoYW5nZSxsKX1yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UobCl7dGhpcy5fb25EaXNhYmxlZENoYW5nZS5wdXNoKGwpfV91bnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZShsKXtPMmUodGhpcy5fb25EaXNhYmxlZENoYW5n''@;'; put 'put ''ZSxsKX1fZm9yRWFjaENoaWxkKGwpe31fc3luY1BlbmRpbmdDb250cm9scygpe3JldHVybiEoInN1Ym1pdCIhPT10aGlzLnVwZGF0ZU9ufHwodGhpcy5fcGVuZGluZ0RpcnR5JiZ0aGlzLm1hcmtBc0RpcnR5KCksdGhpcy5fcGVuZGluZ1RvdWNoZWQmJnRoaXMubWFya0FzVG91Y2hlZCgpLCF0''@;'; put 'put ''aGlzLl9wZW5kaW5nQ2hhbmdlKXx8KHRoaXMuc2V0VmFsdWUodGhpcy5fcGVuZGluZ1ZhbHVlLHtvbmx5U2VsZjohMCxlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6ITF9KSwwKSl9X2FwcGx5Rm9ybVN0YXRlKGwpe1AyZShsKT8odGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9bC52YWx1ZSxs''@;'; put 'put ''LmRpc2FibGVkP3RoaXMuZGlzYWJsZSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiExfSk6dGhpcy5lbmFibGUoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohMX0pKTp0aGlzLnZhbHVlPXRoaXMuX3BlbmRpbmdWYWx1ZT1sfX0sSkJlPXtwcm92aWRlOkYxLHVzZUV4aXN0aW5nOnVzKCgpPT5ybCl9''@;'; put 'put ''LEYyZT1Qcm9taXNlLnJlc29sdmUoKTtsZXQgcmw9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEYxe19jaGFuZ2VEZXRlY3RvclJlZjtjYWxsU2V0RGlzYWJsZWRTdGF0ZTtjb250cm9sPW5ldyBBSztzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfaXNEaXNhYmxlZDtfcmVnaXN0ZXJlZD0hMTt2aWV3''@;'; put 'put ''TW9kZWw7bmFtZT0iIjtpc0Rpc2FibGVkO21vZGVsO29wdGlvbnM7dXBkYXRlPW5ldyBYcjtjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7c3VwZXIoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj12LHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGU9TSx0aGlzLl9wYXJlbnQ9YSx0aGlzLl9zZXRW''@;'; put 'put ''YWxpZGF0b3JzKGQpLHRoaXMuX3NldEFzeW5jVmFsaWRhdG9ycyhoKSx0aGlzLnZhbHVlQWNjZXNzb3I9ZnVuY3Rpb24gVEsoYyxsKXtpZighbClyZXR1cm4gbnVsbDtsZXQgYSxkLGg7cmV0dXJuIEFycmF5LmlzQXJyYXkobCksbC5mb3JFYWNoKGY9PntmLmNvbnN0cnVjdG9yPT09bmM/YT1m''@;'; put 'put ''OmZ1bmN0aW9uIFdCZShjKXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKGMuY29uc3RydWN0b3IpPT09Zzl9KGYpP2Q9ZjpoPWZ9KSxofHxkfHxhfHxudWxsfSgwLGYpfW5nT25DaGFuZ2VzKGEpe2lmKHRoaXMuX2NoZWNrRm9yRXJyb3JzKCksIXRoaXMuX3JlZ2lzdGVyZWR8fCJuYW1l''@;'; put 'put ''ImluIGEpe2lmKHRoaXMuX3JlZ2lzdGVyZWQmJih0aGlzLl9jaGVja05hbWUoKSx0aGlzLmZvcm1EaXJlY3RpdmUpKXtjb25zdCBkPWEubmFtZS5wcmV2aW91c1ZhbHVlO3RoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVDb250cm9sKHtuYW1lOmQscGF0aDp0aGlzLl9nZXRQYXRoKGQpfSl9dGhp''@;'; put 'put ''cy5fc2V0VXBDb250cm9sKCl9ImlzRGlzYWJsZWQiaW4gYSYmdGhpcy5fdXBkYXRlRGlzYWJsZWQoYSksZnVuY3Rpb24gRUsoYyxsKXtpZighYy5oYXNPd25Qcm9wZXJ0eSgibW9kZWwiKSlyZXR1cm4hMTtjb25zdCBhPWMubW9kZWw7cmV0dXJuISFhLmlzRmlyc3RDaGFuZ2UoKXx8IU9iamVj''@;'; put 'put ''dC5pcyhsLGEuY3VycmVudFZhbHVlKX0oYSx0aGlzLnZpZXdNb2RlbCkmJih0aGlzLl91cGRhdGVWYWx1ZSh0aGlzLm1vZGVsKSx0aGlzLnZpZXdNb2RlbD10aGlzLm1vZGVsKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybURpcmVjdGl2ZSYmdGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUNvbnRy''@;'; put 'put ''b2wodGhpcyl9Z2V0IHBhdGgoKXtyZXR1cm4gdGhpcy5fZ2V0UGF0aCh0aGlzLm5hbWUpfWdldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIHRoaXMuX3BhcmVudD90aGlzLl9wYXJlbnQuZm9ybURpcmVjdGl2ZTpudWxsfXZpZXdUb01vZGVsVXBkYXRlKGEpe3RoaXMudmlld01vZGVsPWEsdGhp''@;'; put 'put ''cy51cGRhdGUuZW1pdChhKX1fc2V0VXBDb250cm9sKCl7dGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koKSx0aGlzLl9pc1N0YW5kYWxvbmUoKT90aGlzLl9zZXRVcFN0YW5kYWxvbmUoKTp0aGlzLmZvcm1EaXJlY3RpdmUuYWRkQ29udHJvbCh0aGlzKSx0aGlzLl9yZWdpc3RlcmVkPSEwfV9zZXRV''@;'; put 'put ''cGRhdGVTdHJhdGVneSgpe3RoaXMub3B0aW9ucyYmbnVsbCE9dGhpcy5vcHRpb25zLnVwZGF0ZU9uJiYodGhpcy5jb250cm9sLl91cGRhdGVPbj10aGlzLm9wdGlvbnMudXBkYXRlT24pfV9pc1N0YW5kYWxvbmUoKXtyZXR1cm4hdGhpcy5fcGFyZW50fHwhKCF0aGlzLm9wdGlvbnN8fCF0aGlz''@;'; put 'put ''Lm9wdGlvbnMuc3RhbmRhbG9uZSl9X3NldFVwU3RhbmRhbG9uZSgpe2tUKHRoaXMuY29udHJvbCx0aGlzLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGUpLHRoaXMuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX1fY2hlY2tGb3JFcnJvcnMoKXt0aGlzLl9j''@;'; put 'put ''aGVja05hbWUoKX1fY2hlY2tOYW1lKCl7dGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMubmFtZSYmKHRoaXMubmFtZT10aGlzLm9wdGlvbnMubmFtZSksdGhpcy5faXNTdGFuZGFsb25lKCl9X3VwZGF0ZVZhbHVlKGEpe0YyZS50aGVuKCgpPT57dGhpcy5jb250cm9sLnNldFZhbHVlKGEse2Vt''@;'; put 'put ''aXRWaWV3VG9Nb2RlbENoYW5nZTohMX0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPy5tYXJrRm9yQ2hlY2soKX0pfV91cGRhdGVEaXNhYmxlZChhKXtjb25zdCBkPWEuaXNEaXNhYmxlZC5jdXJyZW50VmFsdWUsaD0wIT09ZCYmSTEoZCk7RjJlLnRoZW4oKCk9PntoJiYhdGhpcy5jb250cm9s''@;'; put 'put ''LmRpc2FibGVkP3RoaXMuY29udHJvbC5kaXNhYmxlKCk6IWgmJnRoaXMuY29udHJvbC5kaXNhYmxlZCYmdGhpcy5jb250cm9sLmVuYWJsZSgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPy5tYXJrRm9yQ2hlY2soKX0pfV9nZXRQYXRoKGEpe3JldHVybiB0aGlzLl9wYXJlbnQ/ZnVuY3Rpb24g''@;'; put 'put ''UkYoYyxsKXtyZXR1cm5bLi4ubC5wYXRoLGNdfShhLHRoaXMuX3BhcmVudCk6W2FdfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShfZCw5KSxxZSh4MCwxMCkscWUobzYsMTApLHFlKG00LDEwKSxxZShIcyw4KSxxZSh2OSw4KSl9O3N0YXRpYyBcdTAy''@;'; put 'put ''NzVkaXI9WXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdNb2RlbCIsIiIsMywiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJmb3JtQ29udHJvbCIsIiJdXSxpbnB1dHM6e25hbWU6Im5hbWUiLGlzRGlzYWJsZWQ6WzAsImRpc2FibGVkIiwiaXNEaXNhYmxlZCJdLG1vZGVsOlswLCJuZ01vZGVs''@;'; put 'put ''IiwibW9kZWwiXSxvcHRpb25zOlswLCJuZ01vZGVsT3B0aW9ucyIsIm9wdGlvbnMiXX0sb3V0cHV0czp7dXBkYXRlOiJuZ01vZGVsQ2hhbmdlIn0sZXhwb3J0QXM6WyJuZ01vZGVsIl0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbaGEoW0pCZV0pLExhLFdvXX0pfXJldHVybiBjfSkoKSx5OT0o''@;'; put 'put ''KCk9PntjbGFzcyBje3N0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NWRpcj1Zcih7dHlwZTpjLHNlbGVjdG9yczpbWyJmb3JtIiwzLCJuZ05vRm9ybSIsIiIsMywibmdOYXRpdmVWYWxpZGF0ZSIsIiJdXSxob3N0QXR0cnM6WyJub3Zh''@;'; put 'put ''bGlkYXRlIiwiIl0sc3RhbmRhbG9uZTohMX0pfXJldHVybiBjfSkoKTtjb25zdCBRQmU9e3Byb3ZpZGU6bTQsdXNlRXhpc3Rpbmc6dXMoKCk9PkhGKSxtdWx0aTohMH07bGV0IEhGPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBnOXt3cml0ZVZhbHVlKGEpe3RoaXMuc2V0UHJvcGVydHkoInZhbHVl''@;'; put 'put ''IixhPz8iIil9cmVnaXN0ZXJPbkNoYW5nZShhKXt0aGlzLm9uQ2hhbmdlPWQ9PnthKCIiPT1kP251bGw6cGFyc2VGbG9hdChkKSl9fXN0YXRpYyBcdTAyNzVmYWM9KCgpPT57bGV0IGE7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybihhfHwoYT15bChjKSkpKGh8fGMpfX0pKCk7c3RhdGljIFx1''@;'; put 'put ''MDI3NWRpcj1Zcih7dHlwZTpjLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJuZ01vZGVsIiwiIl1dLGhvc3RC''@;'; put 'put ''aW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmT3QoImlucHV0IixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkNoYW5nZSh2LnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vblRvdWNoZWQoKX0pfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltoYShbUUJlXSksTGFd''@;'; put 'put ''fSl9cmV0dXJuIGN9KSgpO2NvbnN0IGVqZT17cHJvdmlkZTptNCx1c2VFeGlzdGluZzp1cygoKT0+TkYpLG11bHRpOiEwfTtsZXQgdGplPSgoKT0+e2NsYXNzIGN7X2FjY2Vzc29ycz1bXTthZGQoYSxkKXt0aGlzLl9hY2Nlc3NvcnMucHVzaChbYSxkXSl9cmVtb3ZlKGEpe2ZvcihsZXQgZD10''@;'; put 'put ''aGlzLl9hY2Nlc3NvcnMubGVuZ3RoLTE7ZD49MDstLWQpaWYodGhpcy5fYWNjZXNzb3JzW2RdWzFdPT09YSlyZXR1cm4gdm9pZCB0aGlzLl9hY2Nlc3NvcnMuc3BsaWNlKGQsMSl9c2VsZWN0KGEpe3RoaXMuX2FjY2Vzc29ycy5mb3JFYWNoKGQ9Pnt0aGlzLl9pc1NhbWVHcm91cChkLGEpJiZk''@;'; put 'put ''WzFdIT09YSYmZFsxXS5maXJlVW5jaGVjayhhLnZhbHVlKX0pfV9pc1NhbWVHcm91cChhLGQpe3JldHVybiEhYVswXS5jb250cm9sJiZhWzBdLl9wYXJlbnQ9PT1kLl9jb250cm9sLl9wYXJlbnQmJmFbMV0ubmFtZT09PWQubmFtZX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVy''@;'; put 'put ''biBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gY30pKCksTkY9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGc5e19yZWdpc3RyeTtfaW5qZWN0b3I7X3N0YXRlO19jb250cm9sO19mbjtz''@;'; put 'put ''ZXREaXNhYmxlZFN0YXRlRmlyZWQ9ITE7b25DaGFuZ2U9KCk9Pnt9O25hbWU7Zm9ybUNvbnRyb2xOYW1lO3ZhbHVlO2NhbGxTZXREaXNhYmxlZFN0YXRlPUpuKHY5LHtvcHRpb25hbDohMH0pPz9BVDtjb25zdHJ1Y3RvcihhLGQsaCxmKXtzdXBlcihhLGQpLHRoaXMuX3JlZ2lzdHJ5PWgsdGhp''@;'; put 'put ''cy5faW5qZWN0b3I9Zn1uZ09uSW5pdCgpe3RoaXMuX2NvbnRyb2w9dGhpcy5faW5qZWN0b3IuZ2V0KEYxKSx0aGlzLl9jaGVja05hbWUoKSx0aGlzLl9yZWdpc3RyeS5hZGQodGhpcy5fY29udHJvbCx0aGlzKX1uZ09uRGVzdHJveSgpe3RoaXMuX3JlZ2lzdHJ5LnJlbW92ZSh0aGlzKX13cml0''@;'; put 'put ''ZVZhbHVlKGEpe3RoaXMuX3N0YXRlPWE9PT10aGlzLnZhbHVlLHRoaXMuc2V0UHJvcGVydHkoImNoZWNrZWQiLHRoaXMuX3N0YXRlKX1yZWdpc3Rlck9uQ2hhbmdlKGEpe3RoaXMuX2ZuPWEsdGhpcy5vbkNoYW5nZT0oKT0+e2EodGhpcy52YWx1ZSksdGhpcy5fcmVnaXN0cnkuc2VsZWN0KHRo''@;'; put 'put ''aXMpfX1zZXREaXNhYmxlZFN0YXRlKGEpeyh0aGlzLnNldERpc2FibGVkU3RhdGVGaXJlZHx8YXx8IndoZW5EaXNhYmxlZEZvckxlZ2FjeUNvZGUiPT09dGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZSkmJnRoaXMuc2V0UHJvcGVydHkoImRpc2FibGVkIixhKSx0aGlzLnNldERpc2FibGVkU3Rh''@;'; put 'put ''dGVGaXJlZD0hMH1maXJlVW5jaGVjayhhKXt0aGlzLndyaXRlVmFsdWUoYSl9X2NoZWNrTmFtZSgpeyF0aGlzLm5hbWUmJnRoaXMuZm9ybUNvbnRyb2xOYW1lJiYodGhpcy5uYW1lPXRoaXMuZm9ybUNvbnRyb2xOYW1lKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXco''@;'; put 'put ''ZHx8YykocWUoTm8pLHFlKG5hKSxxZSh0amUpLHFlKFlvKSl9O3N0YXRpYyBcdTAyNzVkaXI9WXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsInJhZGlvIiwiZm9ybUNvbnRyb2wiLCIiXSxb''@;'; put 'put ''ImlucHV0IiwidHlwZSIsInJhZGlvIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJk90KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25DaGFuZ2UoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBoLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7''@;'; put 'put ''bmFtZToibmFtZSIsZm9ybUNvbnRyb2xOYW1lOiJmb3JtQ29udHJvbE5hbWUiLHZhbHVlOiJ2YWx1ZSJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hhKFtlamVdKSxMYV19KX1yZXR1cm4gY30pKCk7Y29uc3Qga0s9bmV3IGpuKCIiKSxsamU9e3Byb3ZpZGU6bTQsdXNlRXhpc3Rpbmc6dXMo''@;'; put 'put ''KCk9Pk1mKSxtdWx0aTohMH07ZnVuY3Rpb24gajJlKGMsbCl7cmV0dXJuIG51bGw9PWM/YCR7bH1gOihsJiYib2JqZWN0Ij09dHlwZW9mIGwmJihsPSJPYmplY3QiKSxgJHtjfTogJHtsfWAuc2xpY2UoMCw1MCkpfWxldCBNZj0oKCk9PntjbGFzcyBjIGV4dGVuZHMgZzl7dmFsdWU7X29wdGlv''@;'; put 'put ''bk1hcD1uZXcgTWFwO19pZENvdW50ZXI9MDtzZXQgY29tcGFyZVdpdGgoYSl7dGhpcy5fY29tcGFyZVdpdGg9YX1fY29tcGFyZVdpdGg9T2JqZWN0LmlzO3dyaXRlVmFsdWUoYSl7dGhpcy52YWx1ZT1hO2NvbnN0IGg9ajJlKHRoaXMuX2dldE9wdGlvbklkKGEpLGEpO3RoaXMuc2V0UHJvcGVy''@;'; put 'put ''dHkoInZhbHVlIixoKX1yZWdpc3Rlck9uQ2hhbmdlKGEpe3RoaXMub25DaGFuZ2U9ZD0+e3RoaXMudmFsdWU9dGhpcy5fZ2V0T3B0aW9uVmFsdWUoZCksYSh0aGlzLnZhbHVlKX19X3JlZ2lzdGVyT3B0aW9uKCl7cmV0dXJuKHRoaXMuX2lkQ291bnRlcisrKS50b1N0cmluZygpfV9nZXRPcHRp''@;'; put 'put ''b25JZChhKXtmb3IoY29uc3QgZCBvZiB0aGlzLl9vcHRpb25NYXAua2V5cygpKWlmKHRoaXMuX2NvbXBhcmVXaXRoKHRoaXMuX29wdGlvbk1hcC5nZXQoZCksYSkpcmV0dXJuIGQ7cmV0dXJuIG51bGx9X2dldE9wdGlvblZhbHVlKGEpe2NvbnN0IGQ9ZnVuY3Rpb24gY2plKGMpe3JldHVybiBj''@;'; put 'put ''LnNwbGl0KCI6IilbMF19KGEpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuaGFzKGQpP3RoaXMuX29wdGlvbk1hcC5nZXQoZCk6YX1zdGF0aWMgXHUwMjc1ZmFjPSgoKT0+e2xldCBhO3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4oYXx8KGE9eWwoYykpKShofHxjKX19KSgpO3N0YXRpYyBcdTAy''@;'; put 'put ''NzVkaXI9WXIoe3R5cGU6YyxzZWxlY3RvcnM6W1sic2VsZWN0IiwiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJtdWx0aXBsZSIsIiJdLFsic2VsZWN0IiwiZm9ybUNvbnRyb2wiLCIiLDMsIm11bHRpcGxlIiwiIl0sWyJzZWxlY3QiLCJuZ01vZGVsIiwiIiwzLCJtdWx0aXBsZSIsIiJdXSxob3N0''@;'; put 'put ''QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJk90KCJjaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uQ2hhbmdlKHYudGFyZ2V0LnZhbHVlKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBoLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7Y29tcGFyZVdpdGg6ImNvbXBhcmVXaXRoIn0s''@;'; put 'put ''c3RhbmRhbG9uZTohMSxmZWF0dXJlczpbaGEoW2xqZV0pLExhXX0pfXJldHVybiBjfSkoKSx4Zj0oKCk9PntjbGFzcyBje19lbGVtZW50O19yZW5kZXJlcjtfc2VsZWN0O2lkO2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9lbGVtZW50PWEsdGhpcy5fcmVuZGVyZXI9ZCx0aGlzLl9zZWxlY3Q9''@;'; put 'put ''aCx0aGlzLl9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJPcHRpb24oKSl9c2V0IG5nVmFsdWUoYSl7bnVsbCE9dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuc2V0KHRoaXMuaWQsYSksdGhpcy5fc2V0RWxlbWVudFZhbHVlKGoyZSh0aGlzLmlk''@;'; put 'put ''LGEpKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX1zZXQgdmFsdWUoYSl7dGhpcy5fc2V0RWxlbWVudFZhbHVlKGEpLHRoaXMuX3NlbGVjdCYmdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKX1fc2V0RWxlbWVudFZhbHVlKGEp''@;'; put 'put ''e3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwidmFsdWUiLGEpfW5nT25EZXN0cm95KCl7dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuZGVsZXRlKHRoaXMuaWQpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMu''@;'; put 'put ''X3NlbGVjdC52YWx1ZSkpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShuYSkscWUoTm8pLHFlKE1mLDkpKX07c3RhdGljIFx1MDI3NWRpcj1Zcih7dHlwZTpjLHNlbGVjdG9yczpbWyJvcHRpb24iXV0saW5wdXRzOntuZ1ZhbHVlOiJuZ1ZhbHVlIix2''@;'; put 'put ''YWx1ZToidmFsdWUifSxzdGFuZGFsb25lOiExfSl9cmV0dXJuIGN9KSgpO2NvbnN0IHVqZT17cHJvdmlkZTptNCx1c2VFeGlzdGluZzp1cygoKT0+TFQpLG11bHRpOiEwfTtmdW5jdGlvbiB6MmUoYyxsKXtyZXR1cm4gbnVsbD09Yz9gJHtsfWA6KCJzdHJpbmciPT10eXBlb2YgbCYmKGw9YCck''@;'; put 'put ''e2x9J2ApLGwmJiJvYmplY3QiPT10eXBlb2YgbCYmKGw9Ik9iamVjdCIpLGAke2N9OiAke2x9YC5zbGljZSgwLDUwKSl9bGV0IExUPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBnOXt2YWx1ZTtfb3B0aW9uTWFwPW5ldyBNYXA7X2lkQ291bnRlcj0wO3NldCBjb21wYXJlV2l0aChhKXt0aGlzLl9j''@;'; put 'put ''b21wYXJlV2l0aD1hfV9jb21wYXJlV2l0aD1PYmplY3QuaXM7d3JpdGVWYWx1ZShhKXtsZXQgZDtpZih0aGlzLnZhbHVlPWEsQXJyYXkuaXNBcnJheShhKSl7Y29uc3QgaD1hLm1hcChmPT50aGlzLl9nZXRPcHRpb25JZChmKSk7ZD0oZix2KT0+e2YuX3NldFNlbGVjdGVkKGguaW5kZXhPZih2''@;'; put 'put ''LnRvU3RyaW5nKCkpPi0xKX19ZWxzZSBkPShoLGYpPT57aC5fc2V0U2VsZWN0ZWQoITEpfTt0aGlzLl9vcHRpb25NYXAuZm9yRWFjaChkKX1yZWdpc3Rlck9uQ2hhbmdlKGEpe3RoaXMub25DaGFuZ2U9ZD0+e2NvbnN0IGg9W10sZj1kLnNlbGVjdGVkT3B0aW9ucztpZih2b2lkIDAhPT1mKXtj''@;'; put 'put ''b25zdCB2PWY7Zm9yKGxldCBNPTA7TTx2Lmxlbmd0aDtNKyspe2NvbnN0IFU9dGhpcy5fZ2V0T3B0aW9uVmFsdWUodltNXS52YWx1ZSk7aC5wdXNoKFUpfX1lbHNle2NvbnN0IHY9ZC5vcHRpb25zO2ZvcihsZXQgTT0wO008di5sZW5ndGg7TSsrKXtjb25zdCBEPXZbTV07aWYoRC5zZWxlY3Rl''@;'; put 'put ''ZCl7Y29uc3QgVT10aGlzLl9nZXRPcHRpb25WYWx1ZShELnZhbHVlKTtoLnB1c2goVSl9fX10aGlzLnZhbHVlPWgsYShoKX19X3JlZ2lzdGVyT3B0aW9uKGEpe2NvbnN0IGQ9KHRoaXMuX2lkQ291bnRlcisrKS50b1N0cmluZygpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuc2V0KGQsYSksZH1f''@;'; put 'put ''Z2V0T3B0aW9uSWQoYSl7Zm9yKGNvbnN0IGQgb2YgdGhpcy5fb3B0aW9uTWFwLmtleXMoKSlpZih0aGlzLl9jb21wYXJlV2l0aCh0aGlzLl9vcHRpb25NYXAuZ2V0KGQpLl92YWx1ZSxhKSlyZXR1cm4gZDtyZXR1cm4gbnVsbH1fZ2V0T3B0aW9uVmFsdWUoYSl7Y29uc3QgZD1mdW5jdGlvbiBk''@;'; put 'put ''amUoYyl7cmV0dXJuIGMuc3BsaXQoIjoiKVswXX0oYSk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5oYXMoZCk/dGhpcy5fb3B0aW9uTWFwLmdldChkKS5fdmFsdWU6YX1zdGF0aWMgXHUwMjc1ZmFjPSgoKT0+e2xldCBhO3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4oYXx8KGE9eWwoYykpKSho''@;'; put 'put ''fHxjKX19KSgpO3N0YXRpYyBcdTAyNzVkaXI9WXIoe3R5cGU6YyxzZWxlY3RvcnM6W1sic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbInNlbGVjdCIsIm11bHRpcGxlIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbInNlbGVjdCIsIm11bHRpcGxlIiwiIiwibmdN''@;'; put 'put ''b2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJk90KCJjaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uQ2hhbmdlKHYudGFyZ2V0KX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBoLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7Y29tcGFyZVdpdGg6ImNvbXBh''@;'; put 'put ''cmVXaXRoIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbaGEoW3VqZV0pLExhXX0pfXJldHVybiBjfSkoKSxFZj0oKCk9PntjbGFzcyBje19lbGVtZW50O19yZW5kZXJlcjtfc2VsZWN0O2lkO192YWx1ZTtjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fZWxlbWVudD1hLHRoaXMuX3JlbmRlcmVy''@;'; put 'put ''PWQsdGhpcy5fc2VsZWN0PWgsdGhpcy5fc2VsZWN0JiYodGhpcy5pZD10aGlzLl9zZWxlY3QuX3JlZ2lzdGVyT3B0aW9uKHRoaXMpKX1zZXQgbmdWYWx1ZShhKXtudWxsIT10aGlzLl9zZWxlY3QmJih0aGlzLl92YWx1ZT1hLHRoaXMuX3NldEVsZW1lbnRWYWx1ZSh6MmUodGhpcy5pZCxhKSks''@;'; put 'put ''dGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9c2V0IHZhbHVlKGEpe3RoaXMuX3NlbGVjdD8odGhpcy5fdmFsdWU9YSx0aGlzLl9zZXRFbGVtZW50VmFsdWUoejJlKHRoaXMuaWQsYSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1''@;'; put 'put ''ZSkpOnRoaXMuX3NldEVsZW1lbnRWYWx1ZShhKX1fc2V0RWxlbWVudFZhbHVlKGEpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwidmFsdWUiLGEpfV9zZXRTZWxlY3RlZChhKXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9l''@;'; put 'put ''bGVtZW50Lm5hdGl2ZUVsZW1lbnQsInNlbGVjdGVkIixhKX1uZ09uRGVzdHJveSgpe3RoaXMuX3NlbGVjdCYmKHRoaXMuX3NlbGVjdC5fb3B0aW9uTWFwLmRlbGV0ZSh0aGlzLmlkKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX1zdGF0aWMgXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUobmEpLHFlKE5vKSxxZShMVCw5KSl9O3N0YXRpYyBcdTAyNzVkaXI9WXIoe3R5cGU6YyxzZWxlY3RvcnM6W1sib3B0aW9uIl1dLGlucHV0czp7bmdWYWx1ZToibmdWYWx1ZSIsdmFsdWU6InZhbHVlIn0sc3RhbmRhbG9uZTohMX0pfXJl''@;'; put 'put ''dHVybiBjfSkoKSxiOT0oKCk9PntjbGFzcyBje192YWxpZGF0b3I9eEY7X29uQ2hhbmdlO19lbmFibGVkO25nT25DaGFuZ2VzKGEpe2lmKHRoaXMuaW5wdXROYW1lIGluIGEpe2NvbnN0IGQ9dGhpcy5ub3JtYWxpemVJbnB1dChhW3RoaXMuaW5wdXROYW1lXS5jdXJyZW50VmFsdWUpO3RoaXMu''@;'; put 'put ''X2VuYWJsZWQ9dGhpcy5lbmFibGVkKGQpLHRoaXMuX3ZhbGlkYXRvcj10aGlzLl9lbmFibGVkP3RoaXMuY3JlYXRlVmFsaWRhdG9yKGQpOnhGLHRoaXMuX29uQ2hhbmdlJiZ0aGlzLl9vbkNoYW5nZSgpfX12YWxpZGF0ZShhKXtyZXR1cm4gdGhpcy5fdmFsaWRhdG9yKGEpfXJlZ2lzdGVyT25W''@;'; put 'put ''YWxpZGF0b3JDaGFuZ2UoYSl7dGhpcy5fb25DaGFuZ2U9YX1lbmFibGVkKGEpe3JldHVybiBudWxsIT1hfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NWRpcj1Zcih7dHlwZTpjLGZlYXR1cmVzOltXb119KX1yZXR1cm4gY30pKCk7''@;'; put 'put ''Y29uc3QgcGplPXtwcm92aWRlOngwLHVzZUV4aXN0aW5nOnVzKCgpPT5ESyksbXVsdGk6ITB9LGdqZT17cHJvdmlkZTp4MCx1c2VFeGlzdGluZzp1cygoKT0+SUspLG11bHRpOiEwfTtsZXQgREs9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGI5e3JlcXVpcmVkO2lucHV0TmFtZT0icmVxdWlyZWQi''@;'; put 'put ''O25vcm1hbGl6ZUlucHV0PUkxO2NyZWF0ZVZhbGlkYXRvcj1hPT5hMmU7ZW5hYmxlZChhKXtyZXR1cm4gYX1zdGF0aWMgXHUwMjc1ZmFjPSgoKT0+e2xldCBhO3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4oYXx8KGE9eWwoYykpKShofHxjKX19KSgpO3N0YXRpYyBcdTAyNzVkaXI9WXIoe3R5''@;'; put 'put ''cGU6YyxzZWxlY3RvcnM6W1siIiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsiIiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyIiLCJyZXF1aXJlZCIsIiIsIm5nTW9kZWwiLCIiLDMs''@;'; put 'put ''InR5cGUiLCJjaGVja2JveCJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezImZCYmTnIoInJlcXVpcmVkIixoLl9lbmFibGVkPyIiOm51bGwpfSxpbnB1dHM6e3JlcXVpcmVkOiJyZXF1aXJlZCJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hhKFtwamVdKSxMYV19''@;'; put 'put ''KX1yZXR1cm4gY30pKCksSUs9KCgpPT57Y2xhc3MgYyBleHRlbmRzIERLe2NyZWF0ZVZhbGlkYXRvcj1hPT5vMmU7c3RhdGljIFx1MDI3NWZhYz0oKCk9PntsZXQgYTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuKGF8fChhPXlsKGMpKSkoaHx8Yyl9fSkoKTtzdGF0aWMgXHUwMjc1ZGlyPVly''@;'; put 'put ''KHt0eXBlOmMsc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2ti''@;'; put 'put ''b3giLCJyZXF1aXJlZCIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsyJmQmJk5yKCJyZXF1aXJlZCIsaC5fZW5hYmxlZD8iIjpudWxsKX0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbaGEoW2dqZV0pLExhXX0pfXJldHVybiBjfSkoKSxx''@;'; put 'put ''MmU9KCgpPT57Y2xhc3MgY3tzdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVtb2Q9RWkoe3R5cGU6Y30pO3N0YXRpYyBcdTAyNzVpbmo9eWkoe30pfXJldHVybiBjfSkoKSxVYz0oKCk9PntjbGFzcyBje3N0YXRpYyB3aXRoQ29uZmln''@;'; put 'put ''KGEpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbe3Byb3ZpZGU6djksdXNlVmFsdWU6YS5jYWxsU2V0RGlzYWJsZWRTdGF0ZT8/QVR9XX19c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1bW9kPUVpKHt0eXBlOmN9KTtzdGF0''@;'; put 'put ''aWMgXHUwMjc1aW5qPXlpKHtpbXBvcnRzOltxMmVdfSl9cmV0dXJuIGN9KSgpLHdqZT0oKCk9PntjbGFzcyBje3N0YXRpYyB3aXRoQ29uZmlnKGEpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbe3Byb3ZpZGU6a0ssdXNlVmFsdWU6YS53YXJuT25OZ01vZGVsV2l0aEZvcm1Db250cm9s''@;'; put 'put ''Pz8iYWx3YXlzIn0se3Byb3ZpZGU6djksdXNlVmFsdWU6YS5jYWxsU2V0RGlzYWJsZWRTdGF0ZT8/QVR9XX19c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1bW9kPUVpKHt0eXBlOmN9KTtzdGF0aWMgXHUwMjc1aW5qPXlpKHtpbXBv''@;'; put 'put ''cnRzOltxMmVdfSl9cmV0dXJuIGN9KSgpO2NvbnN0IG53PVsiYW5nbGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjkuNTIsMjIuNTIsMTgsMTAuNiw2LjQ4LDIyLjUyYTEuNywxLjcsMCwwLDAsMi40NSwyLjM2TDE4LDE1LjQ5bDkuMDgsOS4zOWExLjcsMS43LDAsMCwwLDIuNDUtMi4zNloiLz4n''@;'; put 'put ''fV0saDI9WyJleGNsYW1hdGlvbi1jaXJjbGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTggMTkuOEMxOC41NSAxOS44IDE5IDE5LjM1IDE5IDE4LjhWMTNDMTkgMTIuNDUgMTguNTUgMTIgMTggMTJDMTcuNDUgMTIgMTcgMTIuNDUgMTcgMTNWMTguOEMxNyAxOS4zNSAxNy40NSAxOS44IDE4IDE5''@;'; put 'put ''LjhaTTE4Ljg1IDIxLjk1QzE4LjczIDIxLjg0IDE4LjYgMjEuNzUgMTguNDYgMjEuNjlDMTguMTcgMjEuNTcgMTcuODMgMjEuNTcgMTcuNTQgMjEuNjlDMTcuNCAyMS43NSAxNy4yNyAyMS44NCAxNy4xNSAyMS45NUMxNi45MyAyMi4xOCAxNi44IDIyLjQ4IDE2LjggMjIuOEMxNi44IDIzLjEy''@;'; put 'put ''IDE2LjkzIDIzLjQyIDE3LjE1IDIzLjY1QzE3LjI3IDIzLjc2IDE3LjQgMjMuODUgMTcuNTQgMjMuOTFDMTcuNjkgMjMuOTcgMTcuODQgMjQgMTggMjRDMTguMTYgMjQgMTguMzEgMjMuOTcgMTguNDYgMjMuOTFDMTguNiAyMy44NSAxOC43MyAyMy43NiAxOC44NSAyMy42NUMxOS4wNyAyMy40''@;'; put 'put ''MiAxOS4yIDIzLjEyIDE5LjIgMjIuOEMxOS4yIDIyLjY0IDE5LjE3IDIyLjQ5IDE5LjExIDIyLjM0QzE5LjA1IDIyLjIgMTguOTYgMjIuMDYgMTguODUgMjEuOTVaTTE4IDZDMTEuMzggNiA2IDExLjM4IDYgMThDNiAyNC42MiAxMS4zOCAzMCAxOCAzMEMyNC42MiAzMCAzMCAyNC42MiAzMCAx''@;'; put 'put ''OEMzMCAxMS4zOCAyNC42MiA2IDE4IDZaTTE4IDI4QzEyLjQ5IDI4IDggMjMuNTEgOCAxOEM4IDEyLjQ5IDEyLjQ5IDggMTggOEMyMy41MSA4IDI4IDEyLjQ5IDI4IDE4QzI4IDIzLjUxIDIzLjUxIDI4IDE4IDI4WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOCA2QzExLjM4IDYgNiAxMS4zOCA2''@;'; put 'put ''IDE4QzYgMjQuNjIgMTEuMzggMzAgMTggMzBDMjQuNjIgMzAgMzAgMjQuNjIgMzAgMThDMzAgMTEuMzggMjQuNjIgNiAxOCA2Wk0xNi44IDEyLjY1QzE2LjggMTEuOTkgMTcuMzQgMTEuNDUgMTggMTEuNDVDMTguNjYgMTEuNDUgMTkuMiAxMS45OSAxOS4yIDEyLjY1VjE4LjQ1QzE5LjIgMTku''@;'; put 'put ''MTEgMTguNjYgMTkuNjUgMTggMTkuNjVDMTcuMzQgMTkuNjUgMTYuOCAxOS4xMSAxNi44IDE4LjQ1VjEyLjY1Wk0xOC45OCAyNC4xNUMxOC44NCAyNC4yOCAxOC42OSAyNC4zOCAxOC41MyAyNC40NUMxOC4zNSAyNC41MiAxOC4xOCAyNC41NiAxOCAyNC41NkMxNy44MiAyNC41NiAxNy42NCAy''@;'; put 'put ''NC41MyAxNy40NiAyNC40NUMxNy4zMSAyNC4zOCAxNy4xNiAyNC4yOSAxNyAyNC4xNEMxNi43NCAyMy44NyAxNi41OSAyMy41MiAxNi41OSAyMy4xNUMxNi41OSAyMi43OCAxNi43MyAyMi40NCAxNyAyMi4xNUMxNy4xNCAyMi4wMiAxNy4yOSAyMS45MiAxNy40NSAyMS44NUMxNy42MiAyMS43''@;'; put 'put ''OCAxNy44IDIxLjc0IDE3Ljk5IDIxLjc0QzE4LjE4IDIxLjc0IDE4LjM2IDIxLjc4IDE4LjUzIDIxLjg1QzE4LjY4IDIxLjkyIDE4LjgzIDIyLjAyIDE4Ljk4IDIyLjE1QzE5LjEgMjIuMjcgMTkuMjEgMjIuNDMgMTkuMjggMjIuNjFDMTkuMzUgMjIuNzkgMTkuMzkgMjIuOTYgMTkuMzkgMjMu''@;'; put 'put ''MTRDMTkuMzkgMjMuNSAxOS4yNSAyMy44NSAxOC45NyAyNC4xNEwxOC45OCAyNC4xNVoiLz4nfV0sZjI9WyJjaGVjay1jaXJjbGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjIuNjEgMTQuMjJMMTYuMjUgMjAuNThMMTIuNzEgMTcuMDRDMTIuMzIgMTYuNjUgMTEuNjkgMTYuNjUgMTEuMyAxNy4w''@;'; put 'put ''NEMxMC45MSAxNy40MyAxMC45MSAxOC4wNiAxMS4zIDE4LjQ1TDE2LjI1IDIzLjRMMjQuMDMgMTUuNjJDMjQuNDIgMTUuMjMgMjQuNDIgMTQuNiAyNC4wMyAxNC4yMUMyMy42NCAxMy44MiAyMy4wMSAxMy44MiAyMi42MiAxNC4yMUwyMi42MSAxNC4yMlpNMTggNkMxMS4zOCA2IDYgMTEuMzgg''@;'; put 'put ''NiAxOEM2IDI0LjYyIDExLjM4IDMwIDE4IDMwQzI0LjYyIDMwIDMwIDI0LjYyIDMwIDE4QzMwIDExLjM4IDI0LjYyIDYgMTggNlpNMTggMjhDMTIuNDkgMjggOCAyMy41MSA4IDE4QzggMTIuNDkgMTIuNDkgOCAxOCA4QzIzLjUxIDggMjggMTIuNDkgMjggMThDMjggMjMuNTEgMjMuNTEgMjgg''@;'; put 'put ''MTggMjhaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4IDZDMTEuMzggNiA2IDExLjM4IDYgMThDNiAyNC42MiAxMS4zOCAzMCAxOCAzMEMyNC42MiAzMCAzMCAyNC42MiAzMCAxOEMzMCAxMS4zOCAyNC42MiA2IDE4IDZaTTI0LjE2IDE1Ljc4TDE2LjI0IDIzLjdMMTEuMTUgMTguNjFDMTAuNjgg''@;'; put 'put ''MTguMTQgMTAuNjggMTcuMzggMTEuMTUgMTYuOTFDMTEuNjIgMTYuNDQgMTIuMzggMTYuNDQgMTIuODUgMTYuOTFMMTYuMjQgMjAuM0wyMi40NiAxNC4wOEMyMi45MyAxMy42MSAyMy42OSAxMy42MSAyNC4xNiAxNC4wOEMyNC42MyAxNC41NSAyNC42MyAxNS4zMSAyNC4xNiAxNS43OFoiLz4n''@;'; put 'put ''fV0sSjJlPVsiZWxsaXBzaXMtaG9yaXpvbnRhbCIse291dGxpbmU6JzxwYXRoIGQ9Ik03LjggMTguMUM3LjggMTkuNzU2OCA2LjUwMTYzIDIxLjEgNC45IDIxLjFDMy4yOTgzNyAyMS4xIDIgMTkuNzU2OCAyIDE4LjFDMiAxNi40NDMxIDMuMjk4MzcgMTUuMSA0LjkgMTUuMUM2LjUwMTYzIDE1''@;'; put 'put ''LjEgNy44IDE2LjQ0MzEgNy44IDE4LjFaIi8+PHBhdGggZD0iTTE4IDIxLjFDMTkuNjAxNiAyMS4xIDIwLjkgMTkuNzU2OCAyMC45IDE4LjFDMjAuOSAxNi40NDMxIDE5LjYwMTYgMTUuMSAxOCAxNS4xQzE2LjM5ODQgMTUuMSAxNS4xIDE2LjQ0MzEgMTUuMSAxOC4xQzE1LjEgMTkuNzU2OCAx''@;'; put 'put ''Ni4zOTg0IDIxLjEgMTggMjEuMVoiLz48cGF0aCBkPSJNMzEuMSAyMS4xQzMyLjcwMTYgMjEuMSAzNCAxOS43NTY4IDM0IDE4LjFDMzQgMTYuNDQzMSAzMi43MDE2IDE1LjEgMzEuMSAxNS4xQzI5LjQ5ODQgMTUuMSAyOC4yIDE2LjQ0MzEgMjguMiAxOC4xQzI4LjIgMTkuNzU2OCAyOS40OTg0''@;'; put 'put ''IDIxLjEgMzEuMSAyMS4xWiIvPicsb3V0bGluZUJhZGdlZDonPHBhdGggZD0iTTQuOSAyMS4xQzYuNTAxNjMgMjEuMSA3LjggMTkuNzU2OCA3LjggMTguMUM3LjggMTYuNDQzMSA2LjUwMTYzIDE1LjEgNC45IDE1LjFDMy4yOTgzNyAxNS4xIDIgMTYuNDQzMSAyIDE4LjFDMiAxOS43NTY4IDMu''@;'; put 'put ''Mjk4MzcgMjEuMSA0LjkgMjEuMVoiLz48cGF0aCBkPSJNMTggMjEuMUMxOS42MDE2IDIxLjEgMjAuOSAxOS43NTY4IDIwLjkgMTguMUMyMC45IDE2LjQ0MzEgMTkuNjAxNiAxNS4xIDE4IDE1LjFDMTYuMzk4NCAxNS4xIDE1LjEgMTYuNDQzMSAxNS4xIDE4LjFDMTUuMSAxOS43NTY4IDE2LjM5''@;'; put 'put ''ODQgMjEuMSAxOCAyMS4xWiIvPjxwYXRoIGQ9Ik0zNCAxOC4xQzM0IDE5Ljc1NjggMzIuNzAxNiAyMS4xIDMxLjEgMjEuMUMyOS40OTg0IDIxLjEgMjguMiAxOS43NTY4IDI4LjIgMTguMUMyOC4yIDE2LjQ0MzEgMjkuNDk4NCAxNS4xIDMxLjEgMTUuMUMzMi43MDE2IDE1LjEgMzQgMTYuNDQz''@;'; put 'put ''MSAzNCAxOC4xWiIvPjxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2MTQgMSAzMCAxQzI3LjIzODYgMSAyNSAzLjIzODU4IDI1IDZDMjUgOC43NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPid9XSxPVD1bIndpbmRvdy1jbG9zZSIse291''@;'; put 'put ''dGxpbmU6JzxwYXRoIGQ9Ik0xOS40MSAxOC4wMDAzTDI2LjcgMTAuNzEwM0MyNy4wMzk4IDEwLjMxMzUgMjcuMDE2OSA5LjcyMjA3IDI2LjY0NzYgOS4zNTI3QzI2LjI3ODIgOC45ODMzMyAyNS42ODY4IDguOTYwNDkgMjUuMjkgOS4zMDAyNkwxOCAxNi41OTAzTDEwLjcxIDkuMjkwMjZDMTAu''@;'; put 'put ''MzEzMiA4Ljk1MDQ5IDkuNzIxODEgOC45NzMzMyA5LjM1MjQ0IDkuMzQyN0M4Ljk4MzA3IDkuNzEyMDcgOC45NjAyMyAxMC4zMDM1IDkuMzAwMDEgMTAuNzAwM0wxNi41OSAxOC4wMDAzTDkuMjkwMDEgMjUuMjkwM0M5LjAwNDYzIDI1LjUzNDcgOC44ODAzMiAyNS45MTg0IDguOTY4MTkgMjYu''@;'; put 'put ''MjgzN0M5LjA1NjA3IDI2LjY0OSA5LjM0MTI5IDI2LjkzNDIgOS43MDY1OSAyNy4wMjIxQzEwLjA3MTkgMjcuMTA5OSAxMC40NTU2IDI2Ljk4NTYgMTAuNyAyNi43MDAzTDE4IDE5LjQxMDNMMjUuMjkgMjYuNzAwM0MyNS42ODY4IDI3LjA0IDI2LjI3ODIgMjcuMDE3MiAyNi42NDc2IDI2LjY0''@;'; put 'put ''NzhDMjcuMDE2OSAyNi4yNzg1IDI3LjAzOTggMjUuNjg3IDI2LjcgMjUuMjkwM0wxOS40MSAxOC4wMDAzWiIvPid9XSxDamU9WyJpbmZvLWNpcmNsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0yMSAyM0gxOVYxNUgxNkMxNS40NSAxNSAxNSAxNS40NSAxNSAxNkMxNSAxNi41NSAxNS40NSAxNyAx''@;'; put 'put ''NiAxN0gxN1YyM0gxNUMxNC40NSAyMyAxNCAyMy40NSAxNCAyNEMxNCAyNC41NSAxNC40NSAyNSAxNSAyNUgyMUMyMS41NSAyNSAyMiAyNC41NSAyMiAyNEMyMiAyMy40NSAyMS41NSAyMyAyMSAyM1pNMTcuOTMgMTMuM0MxOC43IDEzLjMgMTkuMzMgMTIuNjcgMTkuMzMgMTEuOUMxOS4zMyAx''@;'; put 'put ''MS4xMyAxOC43IDEwLjUgMTcuOTMgMTAuNUMxNy4xNiAxMC41IDE2LjUzIDExLjEzIDE2LjUzIDExLjlDMTYuNTMgMTIuNjcgMTcuMTYgMTMuMyAxNy45MyAxMy4zWk0xOCA2QzExLjM4IDYgNiAxMS4zOCA2IDE4QzYgMjQuNjIgMTEuMzggMzAgMTggMzBDMjQuNjIgMzAgMzAgMjQuNjIgMzAg''@;'; put 'put ''MThDMzAgMTEuMzggMjQuNjIgNiAxOCA2Wk0xOCAyOEMxMi40OSAyOCA4IDIzLjUxIDggMThDOCAxMi40OSAxMi40OSA4IDE4IDhDMjMuNTEgOCAyOCAxMi40OSAyOCAxOEMyOCAyMy41MSAyMy41MSAyOCAxOCAyOFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTggNkMxMS4zOCA2IDYgMTEuMzgg''@;'; put 'put ''NiAxOEM2IDI0LjYyIDExLjM4IDMwIDE4IDMwQzI0LjYyIDMwIDMwIDI0LjYyIDMwIDE4QzMwIDExLjM4IDI0LjYyIDYgMTggNlpNMTcuOTMgMTAuM0MxOC44MSAxMC4zIDE5LjUzIDExLjAyIDE5LjUzIDExLjlDMTkuNTMgMTIuNzggMTguODEgMTMuNSAxNy45MyAxMy41QzE3LjA1IDEzLjUg''@;'; put 'put ''MTYuMzMgMTIuNzggMTYuMzMgMTEuOUMxNi4zMyAxMS4wMiAxNy4wNSAxMC4zIDE3LjkzIDEwLjNaTTIxIDI1LjJIMTVDMTQuMzQgMjUuMiAxMy44IDI0LjY2IDEzLjggMjRDMTMuOCAyMy4zNCAxNC4zNCAyMi44IDE1IDIyLjhIMTYuOFYxNy4ySDE2QzE1LjM0IDE3LjIgMTQuOCAxNi42NiAx''@;'; put 'put ''NC44IDE2QzE0LjggMTUuMzQgMTUuMzQgMTQuOCAxNiAxNC44SDE5LjJWMjIuOEgyMUMyMS42NiAyMi44IDIyLjIgMjMuMzQgMjIuMiAyNEMyMi4yIDI0LjY2IDIxLjY2IDI1LjIgMjEgMjUuMloiLz4nfV0sUTJlPVsidGltZXMiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTkuNDY5NiAxNy45NzMy''@;'; put 'put ''TDI3Ljc1OTYgOS43MDU0MkMyOC4wOTk0IDkuMzA5NzIgMjguMDc2NSA4LjcxOTg3IDI3LjcwNzEgOC4zNTE0OEMyNy4zMzc4IDcuOTgzMSAyNi43NDYzIDcuOTYwMzIgMjYuMzQ5NiA4LjI5OTE5TDE4LjA1OTYgMTYuNTY3TDkuNzY5NTggOC4yODkyMkM5LjM3NzQ1IDcuODk4MTQgOC43NDE3''@;'; put 'put ''IDcuODk4MTQgOC4zNDk1OCA4LjI4OTIyQzcuOTU3NDUgOC42ODAyOSA3Ljk1NzQ1IDkuMzE0MzQgOC4zNDk1OCA5LjcwNTQyTDE2LjY0OTYgMTcuOTczMkw4LjM0OTU4IDI2LjI0MUM4LjA2NDIgMjYuNDg0OCA3LjkzOTg5IDI2Ljg2NzUgOC4wMjc3NyAyNy4yMzE4QzguMTE1NjQgMjcuNTk2''@;'; put 'put ''MSA4LjQwMDg2IDI3Ljg4MDYgOC43NjYxNiAyNy45NjgyQzkuMTMxNDYgMjguMDU1OSA5LjUxNTE5IDI3LjkzMTkgOS43NTk1OCAyNy42NDczTDE4LjA1OTYgMTkuMzc5NUwyNi4zNDk2IDI3LjY0NzNDMjYuNzQ2MyAyNy45ODYxIDI3LjMzNzggMjcuOTYzNCAyNy43MDcxIDI3LjU5NUMyOC4w''@;'; put 'put ''NzY1IDI3LjIyNjYgMjguMDk5NCAyNi42MzY3IDI3Ljc1OTYgMjYuMjQxTDE5LjQ2OTYgMTcuOTczMloiLz4nfV0sZWZlPVsiYW5nbGUtZG91YmxlIix7b3V0bGluZTonPHBhdGggZD0iTTI4LjM0OTEgMTcuODk5NkMyOC41Mzg0IDE4LjA4MzcgMjguNzk0NSAxOC4xODYzIDI5LjA2MSAxOC4x''@;'; put 'put ''ODQ4QzI5LjQ2NCAxOC4xODMxIDI5LjgyNjggMTcuOTQ1MSAyOS45ODIxIDE3LjU4MDVDMzAuMTM3NCAxNy4yMTU4IDMwLjA1NSAxNi43OTU1IDI5Ljc3MjkgMTYuNTEzM0wxOC4wMzE4IDVMNi4zMDA2NyAxNi41MTMzQzUuOTU5OTkgMTYuOTAzNCA1Ljk4Mjg5IDE3LjQ4NDkgNi4zNTMyNSAx''@;'; put 'put ''Ny44NDgxQzYuNzIzNiAxOC4yMTEyIDcuMzE2NiAxOC4yMzM3IDcuNzE0NDIgMTcuODk5NkwxOC4wMzE4IDcuNzgyNDZMMjguMzQ5MSAxNy44OTk2WiIvPjxwYXRoIGQ9Ik0yOC4zNDkxIDI4LjcxNDlDMjguNTM4NCAyOC44OTg5IDI4Ljc5NDUgMjkuMDAxNSAyOS4wNjEgMjlDMjkuNDY0IDI4''@;'; put 'put ''Ljk5ODQgMjkuODI2OCAyOC43NjAzIDI5Ljk4MjEgMjguMzk1N0MzMC4xMzc0IDI4LjAzMTEgMzAuMDU1IDI3LjYxMDcgMjkuNzcyOSAyNy4zMjg1TDE4LjAzMTggMTUuODE1Mkw2LjMwMDY3IDI3LjMyODVDNS45NTk5OSAyNy43MTg2IDUuOTgyODkgMjguMzAwMSA2LjM1MzI1IDI4LjY2MzND''@;'; put 'put ''Ni43MjM2IDI5LjAyNjUgNy4zMTY2IDI5LjA0ODkgNy43MTQ0MiAyOC43MTQ5TDE4LjAzMTggMTguNTk3N0wyOC4zNDkxIDI4LjcxNDlaIi8+J31dLFNqZT1bImV2ZW50Iix7b3V0bGluZTonPHBhdGggZD0iTTE2LjE3IDI1Ljg2TDEwLjgxIDIwLjVDMTAuNjQ2MiAyMC4zMDg3IDEwLjU2MDYg''@;'; put 'put ''MjAuMDYyNiAxMC41NzAzIDE5LjgxMDlDMTAuNTggMTkuNTU5MyAxMC42ODQ0IDE5LjMyMDUgMTAuODYyNCAxOS4xNDI0QzExLjA0MDUgMTguOTY0MyAxMS4yNzkzIDE4Ljg2IDExLjUzMSAxOC44NTAzQzExLjc4MjYgMTguODQwNiAxMi4wMjg3IDE4LjkyNjIgMTIuMjIgMTkuMDlMMTYuMTcg''@;'; put 'put ''MjNMMjQuODEgMTQuMzZDMjUuMDAxMyAxNC4xOTYyIDI1LjI0NzQgMTQuMTEwNiAyNS40OTkxIDE0LjEyMDNDMjUuNzUwNyAxNC4xMyAyNS45ODk1IDE0LjIzNDMgMjYuMTY3NiAxNC40MTI0QzI2LjM0NTcgMTQuNTkwNSAyNi40NSAxNC44MjkzIDI2LjQ1OTcgMTUuMDgwOUMyNi40Njk0IDE1''@;'; put 'put ''LjMzMjYgMjYuMzgzOCAxNS41Nzg3IDI2LjIyIDE1Ljc3TDE2LjE3IDI1Ljg2WiIvPjxwYXRoIGQ9Ik0zMi4yNSA2SDI5VjhIMzJWMzBINC4wMDAwMVY4SDcuMDAwMDFWNkgzLjc1MDAxQzMuNTE2MjUgNi4wMDM5MSAzLjI4NTU1IDYuMDUzODMgMy4wNzEwOCA2LjE0NjkxQzIuODU2NjEgNi4y''@;'; put 'put ''Mzk5OSAyLjY2MjU4IDYuMzc0NDEgMi41MDAwNyA2LjU0MjQ5QzIuMzM3NTcgNi43MTA1NyAyLjIwOTc2IDYuOTA5MDIgMi4xMjM5NiA3LjEyNjVDMi4wMzgxNiA3LjM0Mzk4IDEuOTk2MDQgNy41NzYyNCAyLjAwMDAxIDcuODFWMzAuMTlDMS45OTYwNCAzMC40MjM4IDIuMDM4MTYgMzAuNjU2''@;'; put 'put ''IDIuMTIzOTYgMzAuODczNUMyLjIwOTc2IDMxLjA5MSAyLjMzNzU3IDMxLjI4OTQgMi41MDAwNyAzMS40NTc1QzIuNjYyNTggMzEuNjI1NiAyLjg1NjYxIDMxLjc2IDMuMDcxMDggMzEuODUzMUMzLjI4NTU1IDMxLjk0NjIgMy41MTYyNSAzMS45OTYxIDMuNzUwMDEgMzJIMzIuMjVDMzIuNDgz''@;'; put 'put ''OCAzMS45OTYxIDMyLjcxNDUgMzEuOTQ2MiAzMi45Mjg5IDMxLjg1MzFDMzMuMTQzNCAzMS43NiAzMy4zMzc0IDMxLjYyNTYgMzMuNSAzMS40NTc1QzMzLjY2MjUgMzEuMjg5NCAzMy43OTAzIDMxLjA5MSAzMy44NzYxIDMwLjg3MzVDMzMuOTYxOSAzMC42NTYgMzQuMDA0IDMwLjQyMzggMzQg''@;'; put 'put ''MzAuMTlWNy44MUMzNC4wMDQgNy41NzYyNCAzMy45NjE5IDcuMzQzOTggMzMuODc2MSA3LjEyNjVDMzMuNzkwMyA2LjkwOTAyIDMzLjY2MjUgNi43MTA1NyAzMy41IDYuNTQyNDlDMzMuMzM3NCA2LjM3NDQxIDMzLjE0MzQgNi4yMzk5OSAzMi45Mjg5IDYuMTQ2OTFDMzIuNzE0NSA2LjA1Mzgz''@;'; put 'put ''IDMyLjQ4MzggNi4wMDM5MSAzMi4yNSA2WiIvPjxwYXRoIGQ9Ik0xMCAxMEMxMC4yNjUyIDEwIDEwLjUxOTYgOS44OTQ2NCAxMC43MDcxIDkuNzA3MTFDMTAuODk0NyA5LjUxOTU3IDExIDkuMjY1MjIgMTEgOVYzQzExIDIuNzM0NzggMTAuODk0NyAyLjQ4MDQzIDEwLjcwNzEgMi4yOTI4OUMx''@;'; put 'put ''MC41MTk2IDIuMTA1MzYgMTAuMjY1MiAyIDEwIDJDOS43MzQ4IDIgOS40ODA0NCAyLjEwNTM2IDkuMjkyOTEgMi4yOTI4OUM5LjEwNTM3IDIuNDgwNDMgOS4wMDAwMSAyLjczNDc4IDkuMDAwMDEgM1Y5QzkuMDAwMDEgOS4yNjUyMiA5LjEwNTM3IDkuNTE5NTcgOS4yOTI5MSA5LjcwNzExQzku''@;'; put 'put ''NDgwNDQgOS44OTQ2NCA5LjczNDggMTAgMTAgMTBaIi8+PHBhdGggZD0iTTI2IDEwQzI2LjI2NTIgMTAgMjYuNTE5NiA5Ljg5NDY0IDI2LjcwNzEgOS43MDcxMUMyNi44OTQ3IDkuNTE5NTcgMjcgOS4yNjUyMiAyNyA5VjNDMjcgMi43MzQ3OCAyNi44OTQ3IDIuNDgwNDMgMjYuNzA3MSAyLjI5''@;'; put 'put ''Mjg5QzI2LjUxOTYgMi4xMDUzNiAyNi4yNjUyIDIgMjYgMkMyNS43MzQ4IDIgMjUuNDgwNCAyLjEwNTM2IDI1LjI5MjkgMi4yOTI4OUMyNS4xMDU0IDIuNDgwNDMgMjUgMi43MzQ3OCAyNSAzVjlDMjUgOS4yNjUyMiAyNS4xMDU0IDkuNTE5NTcgMjUuMjkyOSA5LjcwNzExQzI1LjQ4MDQgOS44''@;'; put 'put ''OTQ2NCAyNS43MzQ4IDEwIDI2IDEwWiIvPjxwYXRoIGQ9Ik0yMyA2SDEzVjhIMjNWNloiLz4nLG91dGxpbmVBbGVydGVkOic8cGF0aCBkPSJNMjYuOTAzOSAxLjY0NjIxTDIxLjIyMjIgMTEuMTE1OUMyMC45NTI2IDExLjQ5ODQgMjAuOTI4MSAxMS45OTQ5IDIxLjE1ODggMTIuNDAwNUMyMS4z''@;'; put 'put ''ODk2IDEyLjgwNiAyMS44MzYzIDEzLjA1MTkgMjIuMzE0OCAxMy4wMzY3SDMzLjY4ODFDMzQuMTY2NiAxMy4wNTE5IDM0LjYxMzQgMTIuODA2IDM0Ljg0NDEgMTIuNDAwNUMzNS4wNzQ4IDExLjk5NDkgMzUuMDUwMyAxMS40OTg0IDM0Ljc4MDggMTEuMTE1OUwyOS4wOTkxIDEuNjQ2MjFDMjgu''@;'; put 'put ''ODcxMSAxLjI2OTEzIDI4LjQ1MzIgMS4wMzczNSAyOC4wMDE1IDEuMDM3MzVDMjcuNTQ5NyAxLjAzNzM1IDI3LjEzMTkgMS4yNjkxMyAyNi45MDM5IDEuNjQ2MjFaIi8+PHBhdGggZD0iTTMyIDE1LjAzNjdIMzMuNjYzN0MzMy43NzY0IDE1LjAzODkgMzMuODg4NiAxNS4wMzU0IDM0IDE1LjAy''@;'; put 'put ''NjNWMzAuMTlDMzQuMDA0IDMwLjQyMzggMzMuOTYxOSAzMC42NTYgMzMuODc2MSAzMC44NzM1QzMzLjc5MDMgMzEuMDkxIDMzLjY2MjUgMzEuMjg5NCAzMy41IDMxLjQ1NzVDMzMuMzM3NCAzMS42MjU2IDMzLjE0MzQgMzEuNzYgMzIuOTI4OSAzMS44NTMxQzMyLjcxNDUgMzEuOTQ2MiAzMi40''@;'; put 'put ''ODM4IDMxLjk5NjEgMzIuMjUgMzJIMy43NTAwMUMzLjUxNjI1IDMxLjk5NjEgMy4yODU1NSAzMS45NDYyIDMuMDcxMDggMzEuODUzMUMyLjg1NjYxIDMxLjc2IDIuNjYyNTggMzEuNjI1NiAyLjUwMDA3IDMxLjQ1NzVDMi4zMzc1NyAzMS4yODk0IDIuMjA5NzYgMzEuMDkxIDIuMTIzOTYgMzAu''@;'; put 'put ''ODczNUMyLjAzODE2IDMwLjY1NiAxLjk5NjA0IDMwLjQyMzggMi4wMDAwMSAzMC4xOVY3LjgxQzEuOTk2MDQgNy41NzYyNCAyLjAzODE2IDcuMzQzOTggMi4xMjM5NiA3LjEyNjVDMi4yMDk3NiA2LjkwOTAyIDIuMzM3NTcgNi43MTA1NyAyLjUwMDA3IDYuNTQyNDlDMi42NjI1OCA2LjM3NDQx''@;'; put 'put ''IDIuODU2NjEgNi4yMzk5OSAzLjA3MTA4IDYuMTQ2OTFDMy4yODU1NSA2LjA1MzgzIDMuNTE2MjUgNi4wMDM5MSAzLjc1MDAxIDZINy4wMDAwMVY4SDQuMDAwMDFWMzBIMzJWMTUuMDM2N1oiLz48cGF0aCBkPSJNMjQuMTMzMyAxNS4wMzY3SDI2LjQ1N0MyNi40NTgzIDE1LjA1MTQgMjYuNDU5''@;'; put 'put ''MiAxNS4wNjYxIDI2LjQ1OTcgMTUuMDgwOUMyNi40Njk0IDE1LjMzMjYgMjYuMzgzOCAxNS41Nzg3IDI2LjIyIDE1Ljc3TDE2LjE3IDI1Ljg2TDEwLjgxIDIwLjVDMTAuNjQ2MiAyMC4zMDg3IDEwLjU2MDYgMjAuMDYyNiAxMC41NzAzIDE5LjgxMDlDMTAuNTggMTkuNTU5MyAxMC42ODQ0IDE5''@;'; put 'put ''LjMyMDUgMTAuODYyNCAxOS4xNDI0QzExLjA0MDUgMTguOTY0MyAxMS4yNzkzIDE4Ljg2IDExLjUzMSAxOC44NTAzQzExLjc4MjYgMTguODQwNiAxMi4wMjg3IDE4LjkyNjIgMTIuMjIgMTkuMDlMMTYuMTcgMjNMMjQuMTMzMyAxNS4wMzY3WiIvPjxwYXRoIGQ9Ik0yMS45NTk0IDZMMjAuNzU5''@;'; put 'put ''NCA4SDEzVjZIMjEuOTU5NFoiLz48cGF0aCBkPSJNMTAuNzA3MSA5LjcwNzExQzEwLjUxOTYgOS44OTQ2NCAxMC4yNjUyIDEwIDEwIDEwQzkuNzM0OCAxMCA5LjQ4MDQ0IDkuODk0NjQgOS4yOTI5MSA5LjcwNzExQzkuMTA1MzcgOS41MTk1NyA5LjAwMDAxIDkuMjY1MjIgOS4wMDAwMSA5VjND''@;'; put 'put ''OS4wMDAwMSAyLjczNDc4IDkuMTA1MzcgMi40ODA0MyA5LjI5MjkxIDIuMjkyODlDOS40ODA0NCAyLjEwNTM2IDkuNzM0OCAyIDEwIDJDMTAuMjY1MiAyIDEwLjUxOTYgMi4xMDUzNiAxMC43MDcxIDIuMjkyODlDMTAuODk0NyAyLjQ4MDQzIDExIDIuNzM0NzggMTEgM1Y5QzExIDkuMjY1MjIg''@;'; put 'put ''MTAuODk0NyA5LjUxOTU3IDEwLjcwNzEgOS43MDcxMVoiLz4nLG91dGxpbmVCYWRnZWQ6JzxwYXRoIGQ9Ik0xMC44MSAyMC41TDE2LjE3IDI1Ljg2TDI2LjIyIDE1LjgxQzI2LjM4MzggMTUuNjE4NyAyNi40Njk0IDE1LjM3MjYgMjYuNDU5NyAxNS4xMjA5QzI2LjQ1IDE0Ljg2OTMgMjYuMzQ1''@;'; put 'put ''NyAxNC42MzA1IDI2LjE2NzYgMTQuNDUyNEMyNS45ODk1IDE0LjI3NDMgMjUuNzUwNyAxNC4xNyAyNS40OTkxIDE0LjE2MDNDMjUuMjQ3NCAxNC4xNTA2IDI1LjAwMTMgMTQuMjM2MiAyNC44MSAxNC40TDE2LjE3IDIzTDEyLjIzIDE5LjA2QzEyLjAzODcgMTguODk2MiAxMS43OTI2IDE4Ljgx''@;'; put 'put ''MDYgMTEuNTQxIDE4LjgyMDNDMTEuMjg5MyAxOC44MyAxMS4wNTA1IDE4LjkzNDMgMTAuODcyNCAxOS4xMTI0QzEwLjY5NDQgMTkuMjkwNSAxMC41OSAxOS41MjkzIDEwLjU4MDMgMTkuNzgwOUMxMC41NzA2IDIwLjAzMjYgMTAuNjU2MiAyMC4yNzg3IDEwLjgyIDIwLjQ3TDEwLjgxIDIwLjVa''@;'; put 'put ''Ii8+PHBhdGggZD0iTTEwIDEwQzEwLjI2NTIgMTAgMTAuNTE5NiA5Ljg5NDY0IDEwLjcwNzEgOS43MDcxMUMxMC44OTQ3IDkuNTE5NTcgMTEgOS4yNjUyMiAxMSA5VjNDMTEgMi43MzQ3OCAxMC44OTQ3IDIuNDgwNDMgMTAuNzA3MSAyLjI5Mjg5QzEwLjUxOTYgMi4xMDUzNiAxMC4yNjUyIDIg''@;'; put 'put ''MTAgMkM5LjczNDggMiA5LjQ4MDQ0IDIuMTA1MzYgOS4yOTI5MSAyLjI5Mjg5QzkuMTA1MzcgMi40ODA0MyA5LjAwMDAxIDIuNzM0NzggOS4wMDAwMSAzVjlDOS4wMDAwMSA5LjI2NTIyIDkuMTA1MzcgOS41MTk1NyA5LjI5MjkxIDkuNzA3MTFDOS40ODA0NCA5Ljg5NDY0IDkuNzM0OCAxMCAx''@;'; put 'put ''MCAxMFoiLz48cGF0aCBkPSJNMzIgMTMuMjJWMzBINC4wMDAwMVY4SDcuMDAwMDFWNkgzLjc1MDAxQzMuNTE2MjUgNi4wMDM5MSAzLjI4NTU1IDYuMDUzODMgMy4wNzEwOCA2LjE0NjkxQzIuODU2NjEgNi4yMzk5OSAyLjY2MjU4IDYuMzc0NDEgMi41MDAwNyA2LjU0MjQ5QzIuMzM3NTcgNi43''@;'; put 'put ''MTA1NyAyLjIwOTc2IDYuOTA5MDIgMi4xMjM5NiA3LjEyNjVDMi4wMzgxNiA3LjM0Mzk4IDEuOTk2MDQgNy41NzYyNCAyLjAwMDAxIDcuODFWMzAuMTlDMS45OTYwNCAzMC40MjM4IDIuMDM4MTYgMzAuNjU2IDIuMTIzOTYgMzAuODczNUMyLjIwOTc2IDMxLjA5MSAyLjMzNzU3IDMxLjI4OTQg''@;'; put 'put ''Mi41MDAwNyAzMS40NTc1QzIuNjYyNTggMzEuNjI1NiAyLjg1NjYxIDMxLjc2IDMuMDcxMDggMzEuODUzMUMzLjI4NTU1IDMxLjk0NjIgMy41MTYyNSAzMS45OTYxIDMuNzUwMDEgMzJIMzIuMjVDMzIuNDgzOCAzMS45OTYxIDMyLjcxNDUgMzEuOTQ2MiAzMi45Mjg5IDMxLjg1MzFDMzMuMTQz''@;'; put 'put ''NCAzMS43NiAzMy4zMzc0IDMxLjYyNTYgMzMuNSAzMS40NTc1QzMzLjY2MjUgMzEuMjg5NCAzMy43OTAzIDMxLjA5MSAzMy44NzYxIDMwLjg3MzVDMzMuOTYxOSAzMC42NTYgMzQuMDA0IDMwLjQyMzggMzQgMzAuMTlWMTIuMzRDMzMuMzgwMiAxMi43MyAzMi43MDYzIDEzLjAyNjYgMzIgMTMu''@;'; put 'put ''MjJaIi8+PHBhdGggZD0iTTIyLjUgNkgxM1Y4SDIyLjc4QzIyLjU5NjggNy4zNDkwMyAyMi41MDI2IDYuNjc2MjUgMjIuNSA2WiIvPjxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2MTQgMSAzMCAxQzI3LjIzODYgMSAyNSAzLjIzODU4''@;'; put 'put ''IDI1IDZDMjUgOC43NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xMCAxMEMxMC4yNjUyIDEwIDEwLjUxOTYgOS44OTQ2NCAxMC43MDcxIDkuNzA3MTFDMTAuODk0NyA5LjUxOTU3IDExIDkuMjY1MjIgMTEgOVYzQzExIDIuNzM0NzggMTAuODk0NyAyLjQ4MDQz''@;'; put 'put ''IDEwLjcwNzEgMi4yOTI4OUMxMC41MTk2IDIuMTA1MzYgMTAuMjY1MiAyIDEwIDJDOS43MzQ4IDIgOS40ODA0NCAyLjEwNTM2IDkuMjkyOTEgMi4yOTI4OUM5LjEwNTM3IDIuNDgwNDMgOS4wMDAwMSAyLjczNDc4IDkuMDAwMDEgM1Y5QzkuMDAwMDEgOS4yNjUyMiA5LjEwNTM3IDkuNTE5NTcg''@;'; put 'put ''OS4yOTI5MSA5LjcwNzExQzkuNDgwNDQgOS44OTQ2NCA5LjczNDggMTAgMTAgMTBaIi8+PHBhdGggZD0iTTI2IDEwQzI2LjI2NTIgMTAgMjYuNTE5NiA5Ljg5NDY0IDI2LjcwNzEgOS43MDcxMUMyNi44OTQ3IDkuNTE5NTcgMjcgOS4yNjUyMiAyNyA5VjNDMjcgMi43MzQ3OCAyNi44OTQ3IDIu''@;'; put 'put ''NDgwNDMgMjYuNzA3MSAyLjI5Mjg5QzI2LjUxOTYgMi4xMDUzNiAyNi4yNjUyIDIgMjYgMkMyNS43MzQ4IDIgMjUuNDgwNCAyLjEwNTM2IDI1LjI5MjkgMi4yOTI4OUMyNS4xMDU0IDIuNDgwNDMgMjUgMi43MzQ3OCAyNSAzVjlDMjUgOS4yNjUyMiAyNS4xMDU0IDkuNTE5NTcgMjUuMjkyOSA5''@;'; put 'put ''LjcwNzExQzI1LjQ4MDQgOS44OTQ2NCAyNS43MzQ4IDEwIDI2IDEwWiIvPjxwYXRoIGQ9Ik0zMi4yNSA2SDI4LjI1VjlDMjguMjUgOS41ODM0OCAyOC4wMTgyIDEwLjE0MzEgMjcuNjA1NiAxMC41NTU2QzI3LjE5MzEgMTAuOTY4MiAyNi42MzM1IDExLjIgMjYuMDUgMTEuMkMyNS40NjY1IDEx''@;'; put 'put ''LjIgMjQuOTA3IDEwLjk2ODIgMjQuNDk0NCAxMC41NTU2QzI0LjA4MTggMTAuMTQzMSAyMy44NSA5LjU4MzQ4IDIzLjg1IDlWNkgxMi4yVjlDMTIuMiA5LjU4MzQ4IDExLjk2ODIgMTAuMTQzMSAxMS41NTU2IDEwLjU1NTZDMTEuMTQzMSAxMC45NjgyIDEwLjU4MzUgMTEuMiAxMCAxMS4yQzku''@;'; put 'put ''NDE2NTQgMTEuMiA4Ljg1Njk2IDEwLjk2ODIgOC40NDQzOCAxMC41NTU2QzguMDMxOCAxMC4xNDMxIDcuODAwMDEgOS41ODM0OCA3LjgwMDAxIDlWNkgzLjgwMDAxQzMuNTYyMDQgNS45OTcyOSAzLjMyNTkzIDYuMDQyMzMgMy4xMDU2NyA2LjEzMjQ2QzIuODg1NCA2LjIyMjU5IDIuNjg1NDUg''@;'; put 'put ''Ni4zNTU5NyAyLjUxNzYzIDYuNTI0NzNDMi4zNDk4MSA2LjY5MzQ4IDIuMjE3NTMgNi44OTQxNyAyLjEyODYzIDcuMTE0OTNDMi4wMzk3MiA3LjMzNTY5IDEuOTk1OTkgNy41NzIwNCAyLjAwMDAxIDcuODFWMzAuMTlDMS45OTYwNCAzMC40MjM4IDIuMDM4MTYgMzAuNjU2IDIuMTIzOTYgMzAu''@;'; put 'put ''ODczNUMyLjIwOTc2IDMxLjA5MSAyLjMzNzU3IDMxLjI4OTQgMi41MDAwNyAzMS40NTc1QzIuNjYyNTggMzEuNjI1NiAyLjg1NjYxIDMxLjc2IDMuMDcxMDggMzEuODUzMUMzLjI4NTU1IDMxLjk0NjIgMy41MTYyNSAzMS45OTYxIDMuNzUwMDEgMzJIMzIuMjVDMzIuNDgzOCAzMS45OTYxIDMy''@;'; put 'put ''LjcxNDUgMzEuOTQ2MiAzMi45Mjg5IDMxLjg1MzFDMzMuMTQzNCAzMS43NiAzMy4zMzc0IDMxLjYyNTYgMzMuNSAzMS40NTc1QzMzLjY2MjUgMzEuMjg5NCAzMy43OTAzIDMxLjA5MSAzMy44NzYxIDMwLjg3MzVDMzMuOTYxOSAzMC42NTYgMzQuMDA0IDMwLjQyMzggMzQgMzAuMTlWNy44MUMz''@;'; put 'put ''NC4wMDQgNy41NzYyNCAzMy45NjE5IDcuMzQzOTggMzMuODc2MSA3LjEyNjVDMzMuNzkwMyA2LjkwOTAyIDMzLjY2MjUgNi43MTA1NyAzMy41IDYuNTQyNDlDMzMuMzM3NCA2LjM3NDQxIDMzLjE0MzQgNi4yMzk5OSAzMi45Mjg5IDYuMTQ2OTFDMzIuNzE0NSA2LjA1MzgzIDMyLjQ4MzggNi4w''@;'; put 'put ''MDM5MSAzMi4yNSA2Wk0yNS45NCAxNi41OEwxNi4yNyAyNi4yNUwxMSAyMC45NEMxMC43NjY1IDIwLjY4MzIgMTAuNjQwMSAyMC4zNDY5IDEwLjY0NjUgMTkuOTk5OUMxMC42NTI5IDE5LjY1MjkgMTAuNzkxOCAxOS4zMjE1IDExLjAzNDYgMTkuMDczNUMxMS4yNzc1IDE4LjgyNTUgMTEuNjA1''@;'; put 'put ''OSAxOC42Nzk4IDExLjk1MjcgMTguNjY2MUMxMi4yOTk1IDE4LjY1MjUgMTIuNjM4NCAxOC43NzE5IDEyLjkgMTlMMTYuMjggMjIuMzhMMjQgMTQuNjZDMjQuMTI2NyAxNC41MzMzIDI0LjI3NzIgMTQuNDMyNyAyNC40NDI4IDE0LjM2NDJDMjQuNjA4MyAxNC4yOTU2IDI0Ljc4NTggMTQuMjYw''@;'; put 'put ''MyAyNC45NjUgMTQuMjYwM0MyNS4xNDQyIDE0LjI2MDMgMjUuMzIxNyAxNC4yOTU2IDI1LjQ4NzMgMTQuMzY0MkMyNS42NTI4IDE0LjQzMjcgMjUuODAzMyAxNC41MzMzIDI1LjkzIDE0LjY2QzI2LjA1NjcgMTQuNzg2NyAyNi4xNTczIDE0LjkzNzIgMjYuMjI1OCAxNS4xMDI3QzI2LjI5NDQg''@;'; put 'put ''MTUuMjY4MyAyNi4zMjk3IDE1LjQ0NTggMjYuMzI5NyAxNS42MjVDMjYuMzI5NyAxNS44MDQyIDI2LjI5NDQgMTUuOTgxNyAyNi4yMjU4IDE2LjE0NzNDMjYuMTU3MyAxNi4zMTI4IDI2LjA1NjcgMTYuNDYzMyAyNS45MyAxNi41OUwyNS45NCAxNi41OFoiLz4nLHNvbGlkQWxlcnRlZDonPHBh''@;'; put 'put ''dGggZD0iTTI2LjkwMzkgMS42NDYyMUwyMS4yMjIyIDExLjExNTlDMjAuOTUyNiAxMS40OTg0IDIwLjkyODEgMTEuOTk0OSAyMS4xNTg4IDEyLjQwMDVDMjEuMzg5NiAxMi44MDYgMjEuODM2MyAxMy4wNTE5IDIyLjMxNDggMTMuMDM2N0gzMy42ODgxQzM0LjE2NjYgMTMuMDUxOSAzNC42MTM0''@;'; put 'put ''IDEyLjgwNiAzNC44NDQxIDEyLjQwMDVDMzUuMDc0OCAxMS45OTQ5IDM1LjA1MDMgMTEuNDk4NCAzNC43ODA4IDExLjExNTlMMjkuMDk5MSAxLjY0NjIxQzI4Ljg3MTEgMS4yNjkxMyAyOC40NTMyIDEuMDM3MzUgMjguMDAxNSAxLjAzNzM1QzI3LjU0OTcgMS4wMzczNSAyNy4xMzE5IDEuMjY5''@;'; put 'put ''MTMgMjYuOTAzOSAxLjY0NjIxWiIvPjxwYXRoIGQ9Ik0yMS45NTk0IDZIMTIuMlY5QzEyLjIgOS41ODM0OCAxMS45NjgyIDEwLjE0MzEgMTEuNTU1NiAxMC41NTU2QzExLjE0MzEgMTAuOTY4MiAxMC41ODM1IDExLjIgMTAgMTEuMkM5LjQxNjU0IDExLjIgOC44NTY5NiAxMC45NjgyIDguNDQ0''@;'; put 'put ''MzggMTAuNTU1NkM4LjAzMTggMTAuMTQzMSA3LjgwMDAxIDkuNTgzNDggNy44MDAwMSA5VjZIMy44MDAwMUMzLjU2MjA0IDUuOTk3MjkgMy4zMjU5MyA2LjA0MjMzIDMuMTA1NjcgNi4xMzI0NkMyLjg4NTQgNi4yMjI1OSAyLjY4NTQ1IDYuMzU1OTcgMi41MTc2MyA2LjUyNDczQzIuMzQ5ODEg''@;'; put 'put ''Ni42OTM0OCAyLjIxNzUzIDYuODk0MTcgMi4xMjg2MyA3LjExNDkzQzIuMDM5NzIgNy4zMzU2OSAxLjk5NTk5IDcuNTcyMDQgMi4wMDAwMSA3LjgxVjMwLjE5QzEuOTk2MDQgMzAuNDIzOCAyLjAzODE2IDMwLjY1NiAyLjEyMzk2IDMwLjg3MzVDMi4yMDk3NiAzMS4wOTEgMi4zMzc1NyAzMS4y''@;'; put 'put ''ODk0IDIuNTAwMDcgMzEuNDU3NUMyLjY2MjU4IDMxLjYyNTYgMi44NTY2MSAzMS43NiAzLjA3MTA4IDMxLjg1MzFDMy4yODU1NSAzMS45NDYyIDMuNTE2MjUgMzEuOTk2MSAzLjc1MDAxIDMySDMyLjI1QzMyLjQ4MzggMzEuOTk2MSAzMi43MTQ1IDMxLjk0NjIgMzIuOTI4OSAzMS44NTMxQzMz''@;'; put 'put ''LjE0MzQgMzEuNzYgMzMuMzM3NCAzMS42MjU2IDMzLjUgMzEuNDU3NUMzMy42NjI1IDMxLjI4OTQgMzMuNzkwMyAzMS4wOTEgMzMuODc2MSAzMC44NzM1QzMzLjk2MTkgMzAuNjU2IDM0LjAwNCAzMC40MjM4IDM0IDMwLjE5VjE1LjAyNjNDMzMuODg4NiAxNS4wMzU0IDMzLjc3NjQgMTUuMDM4''@;'; put 'put ''OSAzMy42NjM3IDE1LjAzNjdIMjYuMTk2NEMyNi4yMDY4IDE1LjA1ODQgMjYuMjE2NiAxNS4wODA0IDI2LjIyNTggMTUuMTAyN0MyNi4yOTQ0IDE1LjI2ODMgMjYuMzI5NyAxNS40NDU4IDI2LjMyOTcgMTUuNjI1QzI2LjMyOTcgMTUuODA0MiAyNi4yOTQ0IDE1Ljk4MTcgMjYuMjI1OCAxNi4x''@;'; put 'put ''NDczQzI2LjE1NzMgMTYuMzEyOCAyNi4wNTY3IDE2LjQ2MzMgMjUuOTMgMTYuNTlMMTYuMjcgMjYuMjVMMTEgMjAuOTRDMTAuNzY2NSAyMC42ODMyIDEwLjY0MDEgMjAuMzQ2OSAxMC42NDY1IDE5Ljk5OTlDMTAuNjUyOSAxOS42NTI5IDEwLjc5MTggMTkuMzIxNSAxMS4wMzQ2IDE5LjA3MzVD''@;'; put 'put ''MTEuMjc3NSAxOC44MjU1IDExLjYwNTkgMTguNjc5OCAxMS45NTI3IDE4LjY2NjFDMTIuMjk5NSAxOC42NTI1IDEyLjYzODQgMTguNzcxOSAxMi45IDE5TDE2LjI4IDIyLjM4TDIzLjYyMzMgMTUuMDM2N0gyMi4zMzk1QzIxLjE1NzcgMTUuMDYwNCAyMC4wMjMzIDE0LjQ0ODkgMTkuNDIwNiAx''@;'; put 'put ''My4zODkzQzE4LjgyMDQgMTIuMzM0MiAxOC44NzAzIDExLjA0MjMgMTkuNTM2MiAxMC4wMzg3TDIxLjk1OTQgNloiLz48cGF0aCBkPSJNMTAgMTBDMTAuMjY1MiAxMCAxMC41MTk2IDkuODk0NjQgMTAuNzA3MSA5LjcwNzExQzEwLjg5NDcgOS41MTk1NyAxMSA5LjI2NTIyIDExIDlWM0MxMSAy''@;'; put 'put ''LjczNDc4IDEwLjg5NDcgMi40ODA0MyAxMC43MDcxIDIuMjkyODlDMTAuNTE5NiAyLjEwNTM2IDEwLjI2NTIgMiAxMCAyQzkuNzM0OCAyIDkuNDgwNDQgMi4xMDUzNiA5LjI5MjkxIDIuMjkyODlDOS4xMDUzNyAyLjQ4MDQzIDkuMDAwMDEgMi43MzQ3OCA5LjAwMDAxIDNWOUM5LjAwMDAxIDku''@;'; put 'put ''MjY1MjIgOS4xMDUzNyA5LjUxOTU3IDkuMjkyOTEgOS43MDcxMUM5LjQ4MDQ0IDkuODk0NjQgOS43MzQ4IDEwIDEwIDEwWiIvPicsc29saWRCYWRnZWQ6JzxwYXRoIGQ9Ik0xMCAxMEMxMC4yNjUyIDEwIDEwLjUxOTYgOS44OTQ2NCAxMC43MDcxIDkuNzA3MTFDMTAuODk0NyA5LjUxOTU3IDEx''@;'; put 'put ''IDkuMjY1MjIgMTEgOVYzQzExIDIuNzM0NzggMTAuODk0NyAyLjQ4MDQzIDEwLjcwNzEgMi4yOTI4OUMxMC41MTk2IDIuMTA1MzYgMTAuMjY1MiAyIDEwIDJDOS43MzQ4IDIgOS40ODA0NCAyLjEwNTM2IDkuMjkyOTEgMi4yOTI4OUM5LjEwNTM3IDIuNDgwNDMgOS4wMDAwMSAyLjczNDc4IDku''@;'; put 'put ''MDAwMDEgM1Y5QzkuMDAwMDEgOS4yNjUyMiA5LjEwNTM3IDkuNTE5NTcgOS4yOTI5MSA5LjcwNzExQzkuNDgwNDQgOS44OTQ2NCA5LjczNDggMTAgMTAgMTBaIi8+PHBhdGggZD0iTTMwIDEzLjVDMjguMDEwOSAxMy41IDI2LjEwMzIgMTIuNzA5OCAyNC42OTY3IDExLjMwMzNDMjMuMjkwMiA5''@;'; put 'put ''Ljg5Njc4IDIyLjUgNy45ODkxMiAyMi41IDZIMTIuMlY5QzEyLjIgOS41ODM0OCAxMS45NjgyIDEwLjE0MzEgMTEuNTU1NiAxMC41NTU2QzExLjE0MzEgMTAuOTY4MiAxMC41ODM1IDExLjIgMTAgMTEuMkM5LjQxNjU0IDExLjIgOC44NTY5NiAxMC45NjgyIDguNDQ0MzggMTAuNTU1NkM4LjAz''@;'; put 'put ''MTggMTAuMTQzMSA3LjgwMDAxIDkuNTgzNDggNy44MDAwMSA5VjZIMy44MDAwMUMzLjU2MjA0IDUuOTk3MjkgMy4zMjU5MyA2LjA0MjMzIDMuMTA1NjcgNi4xMzI0NkMyLjg4NTQgNi4yMjI1OSAyLjY4NTQ1IDYuMzU1OTcgMi41MTc2MyA2LjUyNDczQzIuMzQ5ODEgNi42OTM0OCAyLjIxNzUz''@;'; put 'put ''IDYuODk0MTcgMi4xMjg2MyA3LjExNDkzQzIuMDM5NzIgNy4zMzU2OSAxLjk5NTk5IDcuNTcyMDQgMi4wMDAwMSA3LjgxVjMwLjE5QzEuOTk2MDQgMzAuNDIzOCAyLjAzODE2IDMwLjY1NiAyLjEyMzk2IDMwLjg3MzVDMi4yMDk3NiAzMS4wOTEgMi4zMzc1NyAzMS4yODk0IDIuNTAwMDcgMzEu''@;'; put 'put ''NDU3NUMyLjY2MjU4IDMxLjYyNTYgMi44NTY2MSAzMS43NiAzLjA3MTA4IDMxLjg1MzFDMy4yODU1NSAzMS45NDYyIDMuNTE2MjUgMzEuOTk2MSAzLjc1MDAxIDMySDMyLjI1QzMyLjQ4MzggMzEuOTk2MSAzMi43MTQ1IDMxLjk0NjIgMzIuOTI4OSAzMS44NTMxQzMzLjE0MzQgMzEuNzYgMzMu''@;'; put 'put ''MzM3NCAzMS42MjU2IDMzLjUgMzEuNDU3NUMzMy42NjI1IDMxLjI4OTQgMzMuNzkwMyAzMS4wOTEgMzMuODc2MSAzMC44NzM1QzMzLjk2MTkgMzAuNjU2IDM0LjAwNCAzMC40MjM4IDM0IDMwLjE5VjEyLjM0QzMyLjgwNDEgMTMuMDk5MSAzMS40MTY1IDEzLjUwMTUgMzAgMTMuNVpNMjUuOTQg''@;'; put 'put ''MTYuNThMMTYuMjcgMjYuMjVMMTEgMjAuOTRDMTAuNzY2NSAyMC42ODMyIDEwLjY0MDEgMjAuMzQ2OSAxMC42NDY1IDE5Ljk5OTlDMTAuNjUyOSAxOS42NTI5IDEwLjc5MTggMTkuMzIxNSAxMS4wMzQ2IDE5LjA3MzVDMTEuMjc3NSAxOC44MjU1IDExLjYwNTkgMTguNjc5OCAxMS45NTI3IDE4''@;'; put 'put ''LjY2NjFDMTIuMjk5NSAxOC42NTI1IDEyLjYzODQgMTguNzcxOSAxMi45IDE5TDE2LjI4IDIyLjM4TDI0IDE0LjY2QzI0LjEyNjcgMTQuNTMzMyAyNC4yNzcyIDE0LjQzMjcgMjQuNDQyOCAxNC4zNjQyQzI0LjYwODMgMTQuMjk1NiAyNC43ODU4IDE0LjI2MDMgMjQuOTY1IDE0LjI2MDNDMjUu''@;'; put 'put ''MTQ0MiAxNC4yNjAzIDI1LjMyMTcgMTQuMjk1NiAyNS40ODczIDE0LjM2NDJDMjUuNjUyOCAxNC40MzI3IDI1LjgwMzMgMTQuNTMzMyAyNS45MyAxNC42NkMyNi4wNTY3IDE0Ljc4NjcgMjYuMTU3MyAxNC45MzcyIDI2LjIyNTggMTUuMTAyN0MyNi4yOTQ0IDE1LjI2ODMgMjYuMzI5NyAxNS40''@;'; put 'put ''NDU4IDI2LjMyOTcgMTUuNjI1QzI2LjMyOTcgMTUuODA0MiAyNi4yOTQ0IDE1Ljk4MTcgMjYuMjI1OCAxNi4xNDczQzI2LjE1NzMgMTYuMzEyOCAyNi4wNTY3IDE2LjQ2MzMgMjUuOTMgMTYuNTlMMjUuOTQgMTYuNThaIi8+PHBhdGggZD0iTTMwIDExQzMyLjc2MTQgMTEgMzUgOC43NjE0MiAz''@;'; put 'put ''NSA2QzM1IDMuMjM4NTggMzIuNzYxNCAxIDMwIDFDMjcuMjM4NiAxIDI1IDMuMjM4NTggMjUgNkMyNSA4Ljc2MTQyIDI3LjIzODYgMTEgMzAgMTFaIi8+J31dLE1qZT1bImNhbGVuZGFyIix7b3V0bGluZTonPHBhdGggZD0iTTIyIDIwSDIwVjIySDIyVjIwWk0yMCAyNkgyMlYyNEgyMFYyNlpN''@;'; put 'put ''MjggMjRIMjZWMjZIMjhWMjRaTTI4IDIwSDI2VjIySDI4VjIwWk0yNyAxMkMyNy41NSAxMiAyOCAxMS41NSAyOCAxMVY1QzI4IDQuNDUgMjcuNTUgNCAyNyA0QzI2LjQ1IDQgMjYgNC40NSAyNiA1VjExQzI2IDExLjU1IDI2LjQ1IDEyIDI3IDEyWk0yMiAxNkgyMFYxOEgyMlYxNlpNMjggMTZI''@;'; put 'put ''MjZWMThIMjhWMTZaTTI0IDhIMTJWMTBIMjRWOFpNMTAgMTZIOFYxOEgxMFYxNlpNMTAgMjBIOFYyMkgxMFYyMFpNMTAgMjRIOFYyNkgxMFYyNFpNMzMuNSA4LjU0QzMzLjE3IDguMiAzMi43MiA4LjAxIDMyLjI1IDhIMzBWMTBIMzJWMzBINFYxMEg2VjhIMy43NUMzLjI4IDggMi44MyA4LjIg''@;'; put 'put ''Mi41IDguNTRDMi4xNyA4Ljg4IDIgOS4zNCAyIDkuODFWMzAuMTlDMiAzMC42NiAyLjE3IDMxLjEyIDIuNSAzMS40NkMyLjgzIDMxLjggMy4yOCAzMS45OSAzLjc1IDMySDMyLjI1QzMyLjcyIDMyIDMzLjE3IDMxLjggMzMuNSAzMS40NkMzMy44MyAzMS4xMiAzNC4wMSAzMC42NiAzNCAzMC4x''@;'; put 'put ''OVY5LjgxQzM0IDkuMzQgMzMuODMgOC44OCAzMy41IDguNTRaTTE0IDI2SDE2VjI0SDE0VjI2Wk0xNiAyMEgxNFYyMkgxNlYyMFpNMTYgMTZIMTRWMThIMTZWMTZaTTkgMTJDOS41NSAxMiAxMCAxMS41NSAxMCAxMVY1QzEwIDQuNDUgOS41NSA0IDkgNEM4LjQ1IDQgOCA0LjQ1IDggNVYxMUM4''@;'; put 'put ''IDExLjU1IDguNDUgMTIgOSAxMloiLz4nLG91dGxpbmVBbGVydGVkOic8cGF0aCBkPSJNMjYuOTAzOSAxLjY0NjIxTDIxLjIyMjIgMTEuMTE1OUMyMC45NTI2IDExLjQ5ODQgMjAuOTI4MSAxMS45OTQ5IDIxLjE1ODggMTIuNDAwNUMyMS4zODk2IDEyLjgwNiAyMS44MzYzIDEzLjA1MTkgMjIu''@;'; put 'put ''MzE0OCAxMy4wMzY3SDMzLjY4ODFDMzQuMTY2NiAxMy4wNTE5IDM0LjYxMzQgMTIuODA2IDM0Ljg0NDEgMTIuNDAwNUMzNS4wNzQ4IDExLjk5NDkgMzUuMDUwMyAxMS40OTg0IDM0Ljc4MDggMTEuMTE1OUwyOS4wOTkxIDEuNjQ2MjFDMjguODcxMSAxLjI2OTEzIDI4LjQ1MzIgMS4wMzczNSAy''@;'; put 'put ''OC4wMDE1IDEuMDM3MzVDMjcuNTQ5NyAxLjAzNzM1IDI3LjEzMTkgMS4yNjkxMyAyNi45MDM5IDEuNjQ2MjFaIi8+PHBhdGggZD0iTTMyIDE1LjAzNjdIMzMuNjYzN0MzMy43NzYzIDE1LjAzODkgMzMuODg4NiAxNS4wMzU0IDM0IDE1LjAyNjNWMzAuMTlDMzQuMDEgMzAuNjYgMzMuODMgMzEu''@;'; put 'put ''MTIgMzMuNSAzMS40NkMzMy4xNyAzMS44IDMyLjcyIDMyIDMyLjI1IDMySDMuNzVDMy4yOCAzMS45OSAyLjgzIDMxLjggMi41IDMxLjQ2QzIuMTcgMzEuMTIgMiAzMC42NiAyIDMwLjE5VjkuODFDMiA5LjM0IDIuMTcgOC44OCAyLjUgOC41NEMyLjgzIDguMiAzLjI4IDggMy43NSA4SDZWMTBI''@;'; put 'put ''NFYzMEgzMlYxNS4wMzY3WiIvPjxwYXRoIGQ9Ik0yMC43NTk0IDhMMTkuNTU5NCAxMEgxMlY4SDIwLjc1OTRaIi8+PHBhdGggZD0iTTIwIDIwSDIyVjIySDIwVjIwWiIvPjxwYXRoIGQ9Ik0yMiAyNkgyMFYyNEgyMlYyNloiLz48cGF0aCBkPSJNMjYgMjZWMjRIMjhWMjZIMjZaIi8+PHBhdGgg''@;'; put 'put ''ZD0iTTI2IDIyVjIwSDI4VjIySDI2WiIvPjxwYXRoIGQ9Ik0yMCAxNkgyMlYxOEgyMFYxNloiLz48cGF0aCBkPSJNMjYgMThWMTZIMjhWMThIMjZaIi8+PHBhdGggZD0iTTggMTZIMTBWMThIOFYxNloiLz48cGF0aCBkPSJNOCAyMEgxMFYyMkg4VjIwWiIvPjxwYXRoIGQ9Ik04IDI0SDEwVjI2''@;'; put 'put ''SDhWMjRaIi8+PHBhdGggZD0iTTE2IDI2SDE0VjI0SDE2VjI2WiIvPjxwYXRoIGQ9Ik0xNCAyMEgxNlYyMkgxNFYyMFoiLz48cGF0aCBkPSJNMTQgMTZIMTZWMThIMTRWMTZaIi8+PHBhdGggZD0iTTEwIDExQzEwIDExLjU1IDkuNTUgMTIgOSAxMkM4LjQ1IDEyIDggMTEuNTUgOCAxMVY1Qzgg''@;'; put 'put ''NC40NSA4LjQ1IDQgOSA0QzkuNTUgNCAxMCA0LjQ1IDEwIDVWMTFaIi8+JyxvdXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJNMzAgMTFDMzIuNzYxNCAxMSAzNSA4Ljc2MTQyIDM1IDZDMzUgMy4yMzg1OCAzMi43NjE0IDEgMzAgMUMyNy4yMzg2IDEgMjUgMy4yMzg1OCAyNSA2QzI1IDguNzYxNDIg''@;'; put 'put ''MjcuMjM4NiAxMSAzMCAxMVoiLz48cGF0aCBkPSJNMjMuMjg5OSA4QzIzLjQ1OTQgOC41Njk2MyAyMy42OTk1IDkuMTA4ODcgMjQgOS42MDc1OVYxMEgxMlY4SDIzLjI4OTlaIi8+PHBhdGggZD0iTTM0IDExLjc0NTNDMzMuMzk2IDEyLjE2NjYgMzIuNzIyNCAxMi40OTUxIDMyIDEyLjcxMDFW''@;'; put 'put ''MzBINFYxMEg2VjhIMy43NUMzLjI4IDggMi44MyA4LjIgMi41IDguNTRDMi4xNyA4Ljg4IDIgOS4zNCAyIDkuODFWMzAuMTlDMiAzMC42NiAyLjE3IDMxLjEyIDIuNSAzMS40NkMyLjgzIDMxLjggMy4yOCAzMS45OSAzLjc1IDMySDMyLjI1QzMyLjcyIDMyIDMzLjE3IDMxLjggMzMuNSAzMS40''@;'; put 'put ''NkMzMy44MyAzMS4xMiAzNC4wMSAzMC42NiAzNCAzMC4xOVYxMS43NDUzWiIvPjxwYXRoIGQ9Ik0yMCAyMEgyMlYyMkgyMFYyMFoiLz48cGF0aCBkPSJNMjIgMjZIMjBWMjRIMjJWMjZaIi8+PHBhdGggZD0iTTI2IDI2VjI0SDI4VjI2SDI2WiIvPjxwYXRoIGQ9Ik0yNiAyMlYyMEgyOFYyMkgy''@;'; put 'put ''NloiLz48cGF0aCBkPSJNMjAgMTZIMjJWMThIMjBWMTZaIi8+PHBhdGggZD0iTTI2IDE4VjE2SDI4VjE4SDI2WiIvPjxwYXRoIGQ9Ik04IDE2SDEwVjE4SDhWMTZaIi8+PHBhdGggZD0iTTggMjBIMTBWMjJIOFYyMFoiLz48cGF0aCBkPSJNOCAyNEgxMFYyNkg4VjI0WiIvPjxwYXRoIGQ9Ik0x''@;'; put 'put ''NiAyNkgxNFYyNEgxNlYyNloiLz48cGF0aCBkPSJNMTQgMjBIMTZWMjJIMTRWMjBaIi8+PHBhdGggZD0iTTE0IDE2SDE2VjE4SDE0VjE2WiIvPjxwYXRoIGQ9Ik0xMCAxMUMxMCAxMS41NSA5LjU1IDEyIDkgMTJDOC40NSAxMiA4IDExLjU1IDggMTFWNUM4IDQuNDUgOC40NSA0IDkgNEM5LjU1''@;'; put 'put ''IDQgMTAgNC40NSAxMCA1VjExWiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0yNyAxMkMyNy41NSAxMiAyOCAxMS41NSAyOCAxMVY1QzI4IDQuNDUgMjcuNTUgNCAyNyA0QzI2LjQ1IDQgMjYgNC40NSAyNiA1VjExQzI2IDExLjU1IDI2LjQ1IDEyIDI3IDEyWk0zMy41IDguNTRDMzMuMTcgOC4yIDMy''@;'; put 'put ''LjcyIDguMDEgMzIuMjUgOEgyOS4yVjExQzI5LjIgMTIuMjEgMjguMjEgMTMuMiAyNyAxMy4yQzI1Ljc5IDEzLjIgMjQuOCAxMi4yMSAyNC44IDExVjhIMTEuMlYxMUMxMS4yIDEyLjIxIDEwLjIxIDEzLjIgOSAxMy4yQzcuNzkgMTMuMiA2LjggMTIuMjEgNi44IDExVjhIMy43NUMzLjI4IDgg''@;'; put 'put ''Mi44MyA4LjIgMi41IDguNTRDMi4xNyA4Ljg4IDIgOS4zNCAyIDkuODFWMzAuMTlDMiAzMC42NiAyLjE3IDMxLjEyIDIuNSAzMS40NkMyLjgzIDMxLjggMy4yOCAzMS45OSAzLjc1IDMySDMyLjI1QzMyLjcyIDMyIDMzLjE3IDMxLjggMzMuNSAzMS40NkMzMy44MyAzMS4xMiAzNC4wMSAzMC42''@;'; put 'put ''NiAzNCAzMC4xOVY5LjgxQzM0IDkuMzQgMzMuODMgOC44OCAzMy41IDguNTRaTTEwLjEgMjYuMUg3LjlWMjMuOUgxMC4xVjI2LjFaTTEwLjEgMjIuMUg3LjlWMTkuOUgxMC4xVjIyLjFaTTEwLjEgMTguMUg3LjlWMTUuOUgxMC4xVjE4LjFaTTE2LjEgMjYuMUgxMy45VjIzLjlIMTYuMVYyNi4x''@;'; put 'put ''Wk0xNi4xIDIyLjFIMTMuOVYxOS45SDE2LjFWMjIuMVpNMTYuMSAxOC4xSDEzLjlWMTUuOUgxNi4xVjE4LjFaTTIyLjEgMjYuMUgxOS45VjIzLjlIMjIuMVYyNi4xWk0yMi4xIDIyLjFIMTkuOVYxOS45SDIyLjFWMjIuMVpNMjIuMSAxOC4xSDE5LjlWMTUuOUgyMi4xVjE4LjFaTTI4LjEgMjYu''@;'; put 'put ''MUgyNS45VjIzLjlIMjguMVYyNi4xWk0yOC4xIDIyLjFIMjUuOVYxOS45SDI4LjFWMjIuMVpNMjguMSAxOC4xSDI1LjlWMTUuOUgyOC4xVjE4LjFaTTkgMTJDOS41NSAxMiAxMCAxMS41NSAxMCAxMVY1QzEwIDQuNDUgOS41NSA0IDkgNEM4LjQ1IDQgOCA0LjQ1IDggNVYxMUM4IDExLjU1IDgu''@;'; put 'put ''NDUgMTIgOSAxMloiLz4nLHNvbGlkQWxlcnRlZDonPHBhdGggZD0iTTI2LjkwMzkgMS42NDYyMUwyMS4yMjIyIDExLjExNTlDMjAuOTUyNiAxMS40OTg0IDIwLjkyODEgMTEuOTk0OSAyMS4xNTg4IDEyLjQwMDVDMjEuMzg5NiAxMi44MDYgMjEuODM2MyAxMy4wNTE5IDIyLjMxNDggMTMuMDM2''@;'; put 'put ''N0gzMy42ODgxQzM0LjE2NjYgMTMuMDUxOSAzNC42MTM0IDEyLjgwNiAzNC44NDQxIDEyLjQwMDVDMzUuMDc0OCAxMS45OTQ5IDM1LjA1MDMgMTEuNDk4NCAzNC43ODA4IDExLjExNTlMMjkuMDk5MSAxLjY0NjIxQzI4Ljg3MTEgMS4yNjkxMyAyOC40NTMyIDEuMDM3MzUgMjguMDAxNSAxLjAz''@;'; put 'put ''NzM1QzI3LjU0OTcgMS4wMzczNSAyNy4xMzE5IDEuMjY5MTMgMjYuOTAzOSAxLjY0NjIxWiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjAuNzU5NCA4TDE5LjUzNjIgMTAuMDM4N0MxOC44NzAzIDExLjA0MjMgMTguODIwNCAxMi4zMzQyIDE5''@;'; put 'put ''LjQyMDYgMTMuMzg5M0MyMC4wMjMzIDE0LjQ0ODkgMjEuMTU3NyAxNS4wNjA0IDIyLjMzOTUgMTUuMDM2N0gzMy42NjM3QzMzLjc3NjMgMTUuMDM4OSAzMy44ODg2IDE1LjAzNTQgMzQgMTUuMDI2M1YzMC4xOUMzNC4wMSAzMC42NiAzMy44MyAzMS4xMiAzMy41IDMxLjQ2QzMzLjE3IDMxLjgg''@;'; put 'put ''MzIuNzIgMzIgMzIuMjUgMzJIMy43NUMzLjI4IDMxLjk5IDIuODMgMzEuOCAyLjUgMzEuNDZDMi4xNyAzMS4xMiAyIDMwLjY2IDIgMzAuMTlWOS44MUMyIDkuMzQgMi4xNyA4Ljg4IDIuNSA4LjU0QzIuODMgOC4yIDMuMjggOCAzLjc1IDhINi44VjExQzYuOCAxMi4yMSA3Ljc5IDEzLjIgOSAx''@;'; put 'put ''My4yQzEwLjIxIDEzLjIgMTEuMiAxMi4yMSAxMS4yIDExVjhIMjAuNzU5NFpNNy45IDIzLjlWMjYuMUgxMC4xVjIzLjlINy45Wk03LjkgMTkuOVYyMi4xSDEwLjFWMTkuOUg3LjlaTTcuOSAxNS45VjE4LjFIMTAuMVYxNS45SDcuOVpNMTMuOSAyNi4xSDE2LjFWMjMuOUgxMy45VjI2LjFaTTEz''@;'; put 'put ''LjkgMjIuMUgxNi4xVjE5LjlIMTMuOVYyMi4xWk0xMy45IDE4LjFIMTYuMVYxNS45SDEzLjlWMTguMVpNMTkuOSAyNi4xSDIyLjFWMjMuOUgxOS45VjI2LjFaTTE5LjkgMjIuMUgyMi4xVjE5LjlIMTkuOVYyMi4xWk0xOS45IDE4LjFIMjIuMVYxNS45SDE5LjlWMTguMVpNMjUuOSAyMy45VjI2''@;'; put 'put ''LjFIMjguMVYyMy45SDI1LjlaTTI1LjkgMTkuOVYyMi4xSDI4LjFWMTkuOUgyNS45Wk0yNS45IDE1LjlWMTguMUgyOC4xVjE1LjlIMjUuOVoiLz48cGF0aCBkPSJNMTAgMTFDMTAgMTEuNTUgOS41NSAxMiA5IDEyQzguNDUgMTIgOCAxMS41NSA4IDExVjVDOCA0LjQ1IDguNDUgNCA5IDRDOS41''@;'; put 'put ''NSA0IDEwIDQuNDUgMTAgNVYxMVoiLz4nLHNvbGlkQmFkZ2VkOic8cGF0aCBkPSJNMzAgMTFDMzIuNzYxNCAxMSAzNSA4Ljc2MTQyIDM1IDZDMzUgMy4yMzg1OCAzMi43NjE0IDEgMzAgMUMyNy4yMzg2IDEgMjUgMy4yMzg1OCAyNSA2QzI1IDguNzYxNDIgMjcuMjM4NiAxMSAzMCAxMVoiLz48''@;'; put 'put ''cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTM0IDExLjc0NTNDMzIuODY2MiAxMi41MzYyIDMxLjQ4NzIgMTMgMzAgMTNDMjkuNDA2MyAxMyAyOC44Mjk5IDEyLjkyNjEgMjguMjc5NCAxMi43ODdDMjcuOTE4MyAxMy4wNDY3IDI3LjQ3NjIgMTMuMiAy''@;'; put 'put ''NyAxMy4yQzI1Ljc5IDEzLjIgMjQuOCAxMi4yMSAyNC44IDExVjEwLjY4NjJDMjQuMTEyNiA5LjkyMzkzIDIzLjU5MDQgOS4wMDk3IDIzLjI4OTkgOEgxMS4yVjExQzExLjIgMTIuMjEgMTAuMjEgMTMuMiA5IDEzLjJDNy43OSAxMy4yIDYuOCAxMi4yMSA2LjggMTFWOEgzLjc1QzMuMjggOCAy''@;'; put 'put ''LjgzIDguMiAyLjUgOC41NEMyLjE3IDguODggMiA5LjM0IDIgOS44MVYzMC4xOUMyIDMwLjY2IDIuMTcgMzEuMTIgMi41IDMxLjQ2QzIuODMgMzEuOCAzLjI4IDMxLjk5IDMuNzUgMzJIMzIuMjVDMzIuNzIgMzIgMzMuMTcgMzEuOCAzMy41IDMxLjQ2QzMzLjgzIDMxLjEyIDM0LjAxIDMwLjY2''@;'; put 'put ''IDM0IDMwLjE5VjExLjc0NTNaTTcuOSAyMy45VjI2LjFIMTAuMVYyMy45SDcuOVpNNy45IDE5LjlWMjIuMUgxMC4xVjE5LjlINy45Wk03LjkgMTUuOVYxOC4xSDEwLjFWMTUuOUg3LjlaTTEzLjkgMjYuMUgxNi4xVjIzLjlIMTMuOVYyNi4xWk0xMy45IDIyLjFIMTYuMVYxOS45SDEzLjlWMjIu''@;'; put 'put ''MVpNMTMuOSAxOC4xSDE2LjFWMTUuOUgxMy45VjE4LjFaTTE5LjkgMjYuMUgyMi4xVjIzLjlIMTkuOVYyNi4xWk0xOS45IDIyLjFIMjIuMVYxOS45SDE5LjlWMjIuMVpNMTkuOSAxOC4xSDIyLjFWMTUuOUgxOS45VjE4LjFaTTI1LjkgMjMuOVYyNi4xSDI4LjFWMjMuOUgyNS45Wk0yNS45IDE5''@;'; put 'put ''LjlWMjIuMUgyOC4xVjE5LjlIMjUuOVpNMjUuOSAxNS45VjE4LjFIMjguMVYxNS45SDI1LjlaIi8+PHBhdGggZD0iTTEwIDExQzEwIDExLjU1IDkuNTUgMTIgOSAxMkM4LjQ1IDEyIDggMTEuNTUgOCAxMVY1QzggNC40NSA4LjQ1IDQgOSA0QzkuNTUgNCAxMCA0LjQ1IDEwIDVWMTFaIi8+J31d''@;'; put 'put ''LHhqZT1bImZvbGRlci1vcGVuIix7b3V0bGluZTonPHBhdGggZD0iTTMzLjI2IDEzQzMzLjg0IDEyLjk5IDM0LjM4IDEzLjI2IDM0LjcxIDEzLjc0QzM1IDE0LjE2IDM1LjA4IDE0LjY5IDM0LjkyIDE1LjE4TDMwLjczIDMwLjI4QzMwLjYgMzAuNzIgMzAuMTkgMzEuMDIgMjkuNzMgMzFINC40''@;'; put 'put ''MUMzLjY2IDMxLjAyIDMuMDMgMzAuNDQgMyAyOS42OVY3QzMgNS45IDMuOSA1IDUgNUgxMS40OUMxMi4xMyA1IDEyLjczIDUuMyAxMy4xMSA1LjgyTDE1LjQyIDlIMjkuMzlDMzAuNDkgOSAzMS4zOSA5LjkgMzEuMzkgMTFIMTQuOTFDMTQuNTkgMTEgMTQuMjkgMTAuODUgMTQuMSAxMC41OUwx''@;'; put 'put ''MS40OSA3SDVWMjVMNy45MiAxNC42NkM3LjkyIDE0LjY2IDcuOTIgMTQuNTcgNy45MiAxNC41MkM4LjMyIDEzLjYzIDkuMTkgMTMuMDQgMTAuMTcgMTNIMzMuMjZaTTUuOSAyOUgyOC45NEwzMi44OCAxNC45NUgxMC4xNkMxMC4wMSAxNC45OCA5Ljg3IDE1LjA3IDkuNzggMTUuMTlMNS45IDI5''@;'; put 'put ''WiIvPicsb3V0bGluZUFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0yNy45MDQxIDEuNjQ2MjFMMjIuMjIyNCAxMS4xMTU5QzIxLjk1MjkgMTEuNDk4NCAyMS45Mjg0IDExLjk5NDkgMjIuMTU5MSAxMi40MDA1QzIyLjM4OTggMTIuODA2IDIyLjgzNjYgMTMuMDUxOSAyMy4zMTUgMTMuMDM2N0gzNC42ODg0''@;'; put 'put ''QzM1LjE2NjkgMTMuMDUxOSAzNS42MTM2IDEyLjgwNiAzNS44NDQzIDEyLjQwMDVDMzYuMDc1IDExLjk5NDkgMzYuMDUwNiAxMS40OTg0IDM1Ljc4MSAxMS4xMTU5TDMwLjA5OTMgMS42NDYyMUMyOS44NzEzIDEuMjY5MTMgMjkuNDUzNSAxLjAzNzM1IDI5LjAwMTcgMS4wMzczNUMyOC41NSAx''@;'; put 'put ''LjAzNzM1IDI4LjEzMjEgMS4yNjkxMyAyNy45MDQxIDEuNjQ2MjFaIi8+PHBhdGggZD0iTTIwLjEwNTggMTFIMTQuOTEwMkMxNC41OTAyIDExIDE0LjI5MDIgMTAuODUgMTQuMTAwMiAxMC41OUwxMS40OTAyIDdINS4wMDAyNFYyNUw3LjkyMDI0IDE0LjY2VjE0LjUyQzguMzIwMjQgMTMuNjMg''@;'; put 'put ''OS4xOTAyNCAxMy4wNCAxMC4xNzAyIDEzSDIwLjIzMjdDMjAuMjg2MSAxMy4xMzI2IDIwLjM0ODggMTMuMjYyNyAyMC40MjA4IDEzLjM4OTNDMjAuODgxNSAxNC4xOTkxIDIxLjY1MjcgMTQuNzQ3MiAyMi41MTgzIDE0Ljk1SDEwLjE2MDJDMTAuMDEwMiAxNC45OCA5Ljg3MDI0IDE1LjA3IDku''@;'; put 'put ''NzgwMjQgMTUuMTlMNS45MDAyNCAyOUgyOC45NDAyTDMyLjg1NTkgMTUuMDM2N0gzNC42NjM5QzM0Ljc2MzYgMTUuMDM4NyAzNC44NjMgMTUuMDM2MiAzNC45NjE3IDE1LjAyOTJDMzQuOTUwMyAxNS4wNzk4IDM0LjkzNjUgMTUuMTMwMSAzNC45MjAyIDE1LjE4TDMwLjczMDIgMzAuMjhDMzAu''@;'; put 'put ''NjAwMiAzMC43MiAzMC4xOTAyIDMxLjAyIDI5LjczMDIgMzFINC40MTAyNEMzLjY2MDI0IDMxLjAyIDMuMDMwMjQgMzAuNDQgMy4wMDAyNCAyOS42OVY3QzMuMDAwMjQgNS45IDMuOTAwMjQgNSA1LjAwMDI0IDVIMTEuNDkwMkMxMi4xMzAyIDUgMTIuNzMwMiA1LjMgMTMuMTEwMiA1LjgyTDE1''@;'; put 'put ''LjQyMDIgOUgyMS4xNTk3TDIwLjUzNjQgMTAuMDM4N0MyMC4zMzc4IDEwLjMzODEgMjAuMTkzOSAxMC42NjMyIDIwLjEwNTggMTFaIi8+JyxvdXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJNMzEgMTFDMzMuNzYxNCAxMSAzNiA4Ljc2MTQyIDM2IDZDMzYgMy4yMzg1OCAzMy43NjE0IDEgMzEgMUMy''@;'; put 'put ''OC4yMzg2IDEgMjYgMy4yMzg1OCAyNiA2QzI2IDguNzYxNDIgMjguMjM4NiAxMSAzMSAxMVoiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTI2LjEwMSAxMUgxNC45MUMxNC41OSAxMSAxNC4yOSAxMC44NSAxNC4xIDEwLjU5TDExLjQ5IDdINVYy''@;'; put 'put ''NUw3LjkyIDE0LjY2VjE0LjUyQzguMzIgMTMuNjMgOS4xOSAxMy4wNCAxMC4xNyAxM0gzMy4yNkMzMy44NCAxMi45OSAzNC4zOCAxMy4yNiAzNC43MSAxMy43NEMzNSAxNC4xNiAzNS4wOCAxNC42OSAzNC45MiAxNS4xOEwzMC43MyAzMC4yOEMzMC42IDMwLjcyIDMwLjE5IDMxLjAyIDI5Ljcz''@;'; put 'put ''IDMxSDQuNDFDMy42NiAzMS4wMiAzLjAzIDMwLjQ0IDMgMjkuNjlWN0MzIDUuOSAzLjkgNSA1IDVIMTEuNDlDMTIuMTMgNSAxMi43MyA1LjMgMTMuMTEgNS44MkwxNS40MiA5SDI0LjY3MzZDMjUuMDI5NyA5Ljc0OTYgMjUuNTE1MSAxMC40MjU5IDI2LjEwMSAxMVpNMjguOTQgMjlINS45TDku''@;'; put 'put ''NzggMTUuMTlDOS44NyAxNS4wNyAxMC4wMSAxNC45OCAxMC4xNiAxNC45NUgzMi44OEwyOC45NCAyOVoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMzQuNzA1OCAxMy43NEMzNC4zNzQ0IDEzLjI2NDMgMzMuODIyMyAxMi45ODYgMzMuMjM3OSAxM0gxMC4yNTgzQzkuMjY5NTIgMTMuMDQxNCA4LjM4''@;'; put 'put ''ODU4IDEzLjYyOTMgNy45ODA2IDE0LjUyQzcuOTc3MjkgMTQuNTY2NiA3Ljk3NzI5IDE0LjYxMzQgNy45ODA2IDE0LjY2TDUuMDI0NjMgMjVWNy4wMDAwMUgxMS41OTQ2TDE0LjIzNjcgMTAuNTlDMTQuNDI3OSAxMC44NDg0IDE0LjczMjcgMTEuMDAwOCAxNS4wNTY3IDExSDMxLjM0NDlDMzEu''@;'; put 'put ''MzQ0OSA5Ljg5NTQ0IDMwLjQzODQgOS4wMDAwMSAyOS4zMjAzIDkuMDAwMDFIMTUuNTczTDEzLjIzNDUgNS44MjAwMUMxMi44NTIyIDUuMzAzMTggMTIuMjQyNiA0Ljk5ODM1IDExLjU5NDYgNS4wMDAwMUg1LjAyNDYzQzMuOTA2NDYgNS4wMDAwMSAzIDUuODk1NDQgMyA3LjAwMDAxVjI5LjY5''@;'; put 'put ''QzMuMDMyODkgMzAuNDM4OSAzLjY2ODkxIDMxLjAyMjYgNC40MjczNyAzMUgyOS42NjQ0QzMwLjEyOTMgMzEuMDE4MyAzMC41NDY5IDMwLjcyMTMgMzAuNjc2OCAzMC4yOEwzNC45MTg0IDE1LjE4QzM1LjA3ODggMTQuNjkzNSAzNS4wMDAxIDE0LjE2MSAzNC43MDU4IDEzLjc0WiIvPicsc29s''@;'; put 'put ''aWRBbGVydGVkOic8cGF0aCBkPSJNMjcuOTA0MSAxLjY0NjIxTDIyLjIyMjQgMTEuMTE1OUMyMS45NTI5IDExLjQ5ODQgMjEuOTI4NCAxMS45OTQ5IDIyLjE1OTEgMTIuNDAwNUMyMi4zODk4IDEyLjgwNiAyMi44MzY2IDEzLjA1MTkgMjMuMzE1IDEzLjAzNjdIMzQuNjg4NEMzNS4xNjY5IDEz''@;'; put 'put ''LjA1MTkgMzUuNjEzNiAxMi44MDYgMzUuODQ0MyAxMi40MDA1QzM2LjA3NSAxMS45OTQ5IDM2LjA1MDYgMTEuNDk4NCAzNS43ODEgMTEuMTE1OUwzMC4wOTkzIDEuNjQ2MjFDMjkuODcxMyAxLjI2OTEzIDI5LjQ1MzUgMS4wMzczNSAyOS4wMDE3IDEuMDM3MzVDMjguNTUgMS4wMzczNSAyOC4x''@;'; put 'put ''MzIxIDEuMjY5MTMgMjcuOTA0MSAxLjY0NjIxWiIvPjxwYXRoIGQ9Ik0yMC4yMzI1IDEzQzIwLjI4NTggMTMuMTMyNiAyMC4zNDg1IDEzLjI2MjcgMjAuNDIwNiAxMy4zODkzQzIxLjAyMzMgMTQuNDQ4OSAyMi4xNTc3IDE1LjA2MDQgMjMuMzM5NSAxNS4wMzY3SDM0LjY2MzdDMzQuNzYyOSAx''@;'; put 'put ''NS4wMzg3IDM0Ljg2MTggMTUuMDM2MiAzNC45NjAxIDE1LjAyOTNDMzQuOTQ4NyAxNS4wNzk5IDM0LjkzNDggMTUuMTMwMiAzNC45MTg0IDE1LjE4TDMwLjY3NjggMzAuMjhDMzAuNTQ2OSAzMC43MjEzIDMwLjEyOTMgMzEuMDE4MyAyOS42NjQ0IDMxSDQuNDI3MzdDMy42Njg5MSAzMS4wMjI2''@;'; put 'put ''IDMuMDMyODkgMzAuNDM4OSAzIDI5LjY5VjcuMDAwMDFDMyA1Ljg5NTQ0IDMuOTA2NDYgNS4wMDAwMSA1LjAyNDYzIDUuMDAwMDFIMTEuNTk0NkMxMi4yNDI2IDQuOTk4MzUgMTIuODUyMiA1LjMwMzE4IDEzLjIzNDUgNS44MjAwMUwxNS41NzMgOS4wMDAwMUgyMS4xNTk0TDIwLjUzNjIgMTAu''@;'; put 'put ''MDM4N0MyMC4zMzc1IDEwLjMzODEgMjAuMTkzNyAxMC42NjMyIDIwLjEwNTYgMTFIMTUuMDU2N0MxNC43MzI3IDExLjAwMDggMTQuNDI3OSAxMC44NDg0IDE0LjIzNjcgMTAuNTlMMTEuNTk0NiA3LjAwMDAxSDUuMDI0NjNWMjVMNy45ODA2IDE0LjY2QzcuOTc3MjkgMTQuNjEzNCA3Ljk3NzI5''@;'; put 'put ''IDE0LjU2NjYgNy45ODA2IDE0LjUyQzguMzg4NTggMTMuNjI5MyA5LjI2OTUyIDEzLjA0MTQgMTAuMjU4MyAxM0gyMC4yMzI1WiIvPicsc29saWRCYWRnZWQ6JzxwYXRoIGQ9Ik0zMSAxMUMzMy43NjE0IDExIDM2IDguNzYxNDIgMzYgNkMzNiAzLjIzODU4IDMzLjc2MTQgMSAzMSAxQzI4LjIz''@;'; put 'put ''ODYgMSAyNiAzLjIzODU4IDI2IDZDMjYgOC43NjE0MiAyOC4yMzg2IDExIDMxIDExWiIvPjxwYXRoIGQ9Ik0yNC42NzM2IDkuMDAwMDFDMjUuMDI5NyA5Ljc0OTYxIDI1LjUxNTEgMTAuNDI1OSAyNi4xMDEgMTFIMTUuMDU2N0MxNC43MzI3IDExLjAwMDggMTQuNDI3OSAxMC44NDg0IDE0LjIz''@;'; put 'put ''NjcgMTAuNTlMMTEuNTk0NiA3LjAwMDAxSDUuMDI0NjNWMjVMNy45ODA2IDE0LjY2QzcuOTc3MjkgMTQuNjEzNCA3Ljk3NzI5IDE0LjU2NjYgNy45ODA2IDE0LjUyQzguMzg4NTggMTMuNjI5MyA5LjI2OTUyIDEzLjA0MTQgMTAuMjU4MyAxM0gzMy4yMzc5QzMzLjgyMjMgMTIuOTg2IDM0LjM3''@;'; put 'put ''NDQgMTMuMjY0MyAzNC43MDU4IDEzLjc0QzM1LjAwMDEgMTQuMTYxIDM1LjA3ODggMTQuNjkzNSAzNC45MTg0IDE1LjE4TDMwLjY3NjggMzAuMjhDMzAuNTQ2OSAzMC43MjEzIDMwLjEyOTMgMzEuMDE4MyAyOS42NjQ0IDMxSDQuNDI3MzdDMy42Njg5MSAzMS4wMjI2IDMuMDMyODkgMzAuNDM4''@;'; put 'put ''OSAzIDI5LjY5VjcuMDAwMDFDMyA1Ljg5NTQ0IDMuOTA2NDYgNS4wMDAwMSA1LjAyNDYzIDUuMDAwMDFIMTEuNTk0NkMxMi4yNDI2IDQuOTk4MzUgMTIuODUyMiA1LjMwMzE4IDEzLjIzNDUgNS44MjAwMUwxNS41NzMgOS4wMDAwMUgyNC42NzM2WiIvPid9XSxFamU9WyJtaW51cyIse291dGxp''@;'; put 'put ''bmU6JzxwYXRoIGQ9Ik0yNiAxN0gxMEM5LjQ0NzcyIDE3IDkgMTcuNDQ3NyA5IDE4QzkgMTguNTUyMyA5LjQ0NzcyIDE5IDEwIDE5SDI2QzI2LjU1MjMgMTkgMjcgMTguNTUyMyAyNyAxOEMyNyAxNy40NDc3IDI2LjU1MjMgMTcgMjYgMTdaIi8+J31dLFRqZT1bInBsdXMiLHtvdXRsaW5lOic8''@;'; put 'put ''cGF0aCBkPSJNMjkuOTk5OSAxN0gxOC45OTk5VjZDMTguOTk5OSA1LjQ0NzcyIDE4LjU1MjIgNSAxNy45OTk5IDVDMTcuNDQ3NiA1IDE2Ljk5OTkgNS40NDc3MiAxNi45OTk5IDZWMTdINS45OTk5MkM1LjQ0NzY0IDE3IDQuOTk5OTIgMTcuNDQ3NyA0Ljk5OTkyIDE4QzQuOTg5OTQgMTguMjYz''@;'; put 'put ''IDUuMDk0MjcgMTguNTE3NCA1LjI4NiAxOC42OTc2QzUuNDc3NzMgMTguODc3OCA1LjczODA5IDE4Ljk2NjIgNS45OTk5MiAxOC45NEgxNi45OTk5VjMwQzE2Ljk5OTkgMzAuNTUyMyAxNy40NDc2IDMxIDE3Ljk5OTkgMzFDMTguNTUyMiAzMSAxOC45OTk5IDMwLjU1MjMgMTguOTk5OSAzMFYx''@;'; put 'put ''OUgyOS45OTk5QzMwLjU1MjIgMTkgMzAuOTk5OSAxOC41NTIzIDMwLjk5OTkgMThDMzAuOTk5OSAxNy40NDc3IDMwLjU1MjIgMTcgMjkuOTk5OSAxN1oiLz4nfV0sQWplPVsiZXllLWhpZGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjQuNTQ5NSAyMC40MzAxQzI0LjgyOTQgMTkuNjcwMSAyNC45''@;'; put 'put ''ODkzIDE4Ljg2MDEgMjQuOTg5MyAxOC4wMDAxQzI0Ljk4OTMgMTQuMTQwMSAyMS44NTA4IDExLjAwMDEgMTcuOTkyNiAxMS4wMDAxQzE3LjEzMyAxMS4wMDAxIDE2LjMyMzMgMTEuMTYwMSAxNS41NjM3IDExLjQ0MDFMMTcuMjAyOSAxMy4wODAxQzE3LjQ2MjggMTMuMDQwMSAxNy43MjI3IDEz''@;'; put 'put ''LjAwMDEgMTcuOTkyNiAxMy4wMDAxQzIwLjc1MTMgMTMuMDAwMSAyMi45OTAyIDE1LjI0MDEgMjIuOTkwMiAxOC4wMDAxQzIyLjk5MDIgMTguMjcwMSAyMi45NTAyIDE4LjUzMDEgMjIuOTEwMyAxOC43OTAxTDI0LjU0OTUgMjAuNDMwMVpNMTcuOTkyNiA5LjAwMDA2QzIzLjk4OTggOS4wMDAw''@;'; put 'put ''NiAyOS4zOTcyIDEyLjUyMDEgMzEuODk2IDE4LjAwMDFDMzAuODk2NSAyMC4xOTAxIDI5LjQyNzIgMjIuMDYwMSAyNy42NDggMjMuNTMwMUwyOS4wNjc0IDI0Ljk1MDFDMzEuMTI2NCAyMy4yMjAxIDMyLjgwNTYgMjAuOTkwMSAzMy45MTUxIDE4LjM5MDFDMzQuMDI1IDE4LjE0MDEgMzQuMDI1''@;'; put 'put ''IDE3Ljg2MDEgMzMuOTE1MSAxNy42MTAxQzMxLjE4NjQgMTEuMTYwMSAyNC45MzkzIDcuMDAwMDYgMTguMDAyNiA3LjAwMDA2QzE1Ljk3MzUgNy4wMDAwNiAxNC4wMDQ0IDcuMzcwMDYgMTIuMTY1MyA4LjAzMDA2TDEzLjc0NDYgOS42MTAwNkMxNS4xMDM5IDkuMjEwMDYgMTYuNTMzMiA5LjAw''@;'; put 'put ''MDA2IDE4LjAwMjYgOS4wMDAwNkgxNy45OTI2Wk0zLjcwOTI2IDIuMjkwMDZDMy4zMTk0NCAxLjkwMDA2IDIuNjc5NzQgMS45MDAwNiAyLjI4OTkyIDIuMjkwMDZDMS45MDAxIDIuNjgwMDYgMS45MDAxIDMuMzIwMDYgMi4yODk5MiAzLjcxMDA2TDguNDc3MDIgOS45MDAwNkM1LjcwODMyIDEx''@;'; put 'put ''Ljc0MDEgMy40NDkzOCAxNC4zODAxIDIuMDgwMDIgMTcuNjEwMUMxLjk3MDA3IDE3Ljg2MDEgMS45NzAwNyAxOC4xNDAxIDIuMDgwMDIgMTguMzkwMUM0LjgwODc0IDI0Ljg0MDEgMTEuMDU1OCAyOS4wMDAxIDE3Ljk5MjYgMjkuMDAwMUMyMC43NDEzIDI5LjAwMDEgMjMuMzcgMjguMzQwMSAy''@;'; put 'put ''NS43MTg5IDI3LjE1MDFMMzIuMjc1OSAzMy43MTAxQzMyLjQ3NTggMzMuOTEwMSAzMi43MjU3IDM0LjAwMDEgMzIuOTg1NSAzNC4wMDAxQzMzLjI0NTQgMzQuMDAwMSAzMy40OTUzIDMzLjkwMDEgMzMuNjk1MiAzMy43MTAxQzM0LjA4NSAzMy4zMjAxIDM0LjA4NSAzMi42OTAxIDMzLjY5NTIg''@;'; put 'put ''MzIuMzAwMUwzLjcwOTI2IDIuMjkwMDZaTTEzLjgzNDUgMTUuMjUwMUwyMC43NDEzIDIyLjE2MDFDMTkuOTUxNiAyMi42ODAxIDE5LjAxMjEgMjMuMDAwMSAxNy45OTI2IDIzLjAwMDFDMTUuMjMzOSAyMy4wMDAxIDEyLjk5NDkgMjAuNzYwMSAxMi45OTQ5IDE4LjAwMDFDMTIuOTk0OSAxNi45''@;'; put 'put ''ODAxIDEzLjMwNDggMTYuMDQwMSAxMy44MzQ1IDE1LjI1MDFaTTE3Ljk5MjYgMjcuMDAwMUMxMS45OTU0IDI3LjAwMDEgNi41ODc5MSAyMy40ODAxIDQuMDg5MDggMTguMDAwMUM1LjM2ODQ4IDE1LjE5MDEgNy40Mjc1MSAxMi45MTAxIDkuOTI2MzQgMTEuMzQwMUwxMi40MDUyIDEzLjgyMDFD''@;'; put 'put ''MTEuNTI1NiAxNC45OTAxIDEwLjk5NTggMTYuNDMwMSAxMC45OTU4IDE4LjAwMDFDMTAuOTk1OCAyMS44NjAxIDE0LjEzNDQgMjUuMDAwMSAxNy45OTI2IDI1LjAwMDFDMTkuNTYxOCAyNS4wMDAxIDIxLjAwMTIgMjQuNDcwMSAyMi4xNzA2IDIzLjU5MDFMMjQuMjI5NiAyNS42NTAxQzIyLjMx''@;'; put 'put ''MDUgMjYuNTIwMSAyMC4xOTE1IDI3LjAwMDEgMTcuOTkyNiAyNy4wMDAxWiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xNy45OTI2IDkuMDAwMDZDMjMuOTg5OCA5LjAwMDA2IDI5LjM5NzIgMTIuNTIwMSAzMS44OTYgMTguMDAwMUMzMC44OTY1IDIwLjE5MDEgMjkuNDI3MiAyMi4wNjAxIDI3LjY0''@;'; put 'put ''OCAyMy41MzAxTDI5LjA2NzQgMjQuOTUwMUMzMS4xMjY0IDIzLjIyMDEgMzIuODA1NiAyMC45OTAxIDMzLjkxNTEgMTguMzkwMUMzNC4wMjUgMTguMTQwMSAzNC4wMjUgMTcuODYwMSAzMy45MTUxIDE3LjYxMDFDMzEuMTg2NCAxMS4xNjAxIDI0LjkzOTMgNy4wMDAwNiAxOC4wMDI2IDcuMDAw''@;'; put 'put ''MDZDMTUuOTczNSA3LjAwMDA2IDE0LjAwNDQgNy4zNzAwNiAxMi4xNjUzIDguMDMwMDZMMTMuNzQ0NiA5LjYxMDA2QzE1LjEwMzkgOS4yMTAwNiAxNi41MzMyIDkuMDAwMDYgMTguMDAyNiA5LjAwMDA2SDE3Ljk5MjZaTTMuNzA5MjYgMi4yOTAwNkMzLjMxOTQ0IDEuOTAwMDYgMi42Nzk3NCAx''@;'; put 'put ''LjkwMDA2IDIuMjg5OTIgMi4yOTAwNkMxLjkwMDEgMi42ODAwNiAxLjkwMDEgMy4zMjAwNiAyLjI4OTkyIDMuNzEwMDZMOC40NzcwMiA5LjkwMDA2QzUuNzA4MzIgMTEuNzQwMSAzLjQ0OTM4IDE0LjM4MDEgMi4wODAwMiAxNy42MTAxQzEuOTcwMDcgMTcuODYwMSAxLjk3MDA3IDE4LjE0MDEg''@;'; put 'put ''Mi4wODAwMiAxOC4zOTAxQzQuODA4NzQgMjQuODQwMSAxMS4wNTU4IDI5LjAwMDEgMTcuOTkyNiAyOS4wMDAxQzIwLjc0MTMgMjkuMDAwMSAyMy4zNyAyOC4zNDAxIDI1LjcxODkgMjcuMTUwMUwzMi4yNzU5IDMzLjcxMDFDMzIuNDc1OCAzMy45MTAxIDMyLjcyNTcgMzQuMDAwMSAzMi45ODU1''@;'; put 'put ''IDM0LjAwMDFDMzMuMjQ1NCAzNC4wMDAxIDMzLjQ5NTMgMzMuOTAwMSAzMy42OTUyIDMzLjcxMDFDMzQuMDg1IDMzLjMyMDEgMzQuMDg1IDMyLjY5MDEgMzMuNjk1MiAzMi4zMDAxTDMuNzA5MjYgMi4yOTAwNlpNMTcuOTkyNiAyNy4wMDAxQzExLjk5NTQgMjcuMDAwMSA2LjU4NzkxIDIzLjQ4''@;'; put 'put ''MDEgNC4wODkwOCAxOC4wMDAxQzUuMzY4NDggMTUuMTkwMSA3LjQyNzUxIDEyLjkxMDEgOS45MjYzNCAxMS4zNDAxTDEyLjQwNTIgMTMuODIwMUMxMS41MjU2IDE0Ljk5MDEgMTAuOTk1OCAxNi40MzAxIDEwLjk5NTggMTguMDAwMUMxMC45OTU4IDIxLjg2MDEgMTQuMTM0NCAyNS4wMDAxIDE3''@;'; put 'put ''Ljk5MjYgMjUuMDAwMUMxOS41NjE4IDI1LjAwMDEgMjEuMDAxMiAyNC40NzAxIDIyLjE3MDYgMjMuNTkwMUwyNC4yMjk2IDI1LjY1MDFDMjIuMzEwNSAyNi41MjAxIDIwLjE5MTUgMjcuMDAwMSAxNy45OTI2IDI3LjAwMDFaTTE1LjU2MzcgMTEuNDQwMUwyNC41NDk1IDIwLjQzMDFDMjQuODI5''@;'; put 'put ''NCAxOS42NzAxIDI0Ljk4OTMgMTguODYwMSAyNC45ODkzIDE4LjAwMDFDMjQuOTg5MyAxNC4xNDAxIDIxLjg1MDggMTEuMDAwMSAxNy45OTI2IDExLjAwMDFDMTcuMTMzIDExLjAwMDEgMTYuMzIzMyAxMS4xNjAxIDE1LjU2MzcgMTEuNDQwMVoiLz4nfV0sa2plPVsiZXllIix7b3V0bGluZTon''@;'; put 'put ''PHBhdGggZD0iTTE3Ljk5NzYgMTFDMTQuMTM4MiAxMSAxMC45OTg3IDE0LjE0IDEwLjk5ODcgMThDMTAuOTk4NyAyMS44NiAxNC4xMzgyIDI1IDE3Ljk5NzYgMjVDMjEuODU3IDI1IDI0Ljk5NjUgMjEuODYgMjQuOTk2NSAxOEMyNC45OTY1IDE0LjE0IDIxLjg1NyAxMSAxNy45OTc2IDExWk0x''@;'; put 'put ''Ny45OTc2IDIzQzE1LjIzOCAyMyAxMi45OTgzIDIwLjc2IDEyLjk5ODMgMThDMTIuOTk4MyAxNS4yNCAxNS4yMzggMTMgMTcuOTk3NiAxM0MyMC43NTcxIDEzIDIyLjk5NjggMTUuMjQgMjIuOTk2OCAxOEMyMi45OTY4IDIwLjc2IDIwLjc1NzEgMjMgMTcuOTk3NiAyM1pNMzMuOTE1MSAxNy42''@;'; put 'put ''MUMzMS4xODU1IDExLjE3IDI0LjkzNjUgNyAxNy45OTc2IDdDMTEuMDU4NiA3IDQuODA5NjIgMTEuMTcgMi4wODAwNSAxNy42MUMxLjk3MDA2IDE3Ljg2IDEuOTcwMDYgMTguMTQgMi4wODAwNSAxOC4zOUM0LjgwOTYyIDI0Ljg0IDExLjA1ODYgMjkgMTcuOTk3NiAyOUMyNC45MzY1IDI5IDMx''@;'; put 'put ''LjE4NTUgMjQuODMgMzMuOTE1MSAxOC4zOUMzNC4wMjUxIDE4LjE0IDM0LjAyNTEgMTcuODYgMzMuOTE1MSAxNy42MVpNMTcuOTk3NiAyN0MxMS45OTg1IDI3IDYuNTg5MzQgMjMuNDggNC4wODk3MyAxOEM2LjU4OTM0IDEyLjUyIDExLjk5ODUgOSAxNy45OTc2IDlDMjMuOTk2NiA5IDI5LjQw''@;'; put 'put ''NTggMTIuNTIgMzEuOTA1NCAxOEMyOS40MDU4IDIzLjQ4IDIzLjk5NjYgMjcgMTcuOTk3NiAyN1oiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTcuOTk3NiAxMUMxNC4xMzgyIDExIDEwLjk5ODcgMTQuMTQgMTAuOTk4NyAxOEMxMC45OTg3IDIxLjg2IDE0LjEzODIgMjUgMTcuOTk3NiAyNUMyMS44''@;'; put 'put ''NTcgMjUgMjQuOTk2NSAyMS44NiAyNC45OTY1IDE4QzI0Ljk5NjUgMTQuMTQgMjEuODU3IDExIDE3Ljk5NzYgMTFaTTMzLjkxNTEgMTcuNjFDMzEuMTg1NSAxMS4xNyAyNC45MzY1IDcgMTcuOTk3NiA3QzExLjA1ODYgNyA0LjgwOTYyIDExLjE3IDIuMDgwMDUgMTcuNjFDMS45NzAwNiAxNy44''@;'; put 'put ''NiAxLjk3MDA2IDE4LjE0IDIuMDgwMDUgMTguMzlDNC44MDk2MiAyNC44NCAxMS4wNTg2IDI5IDE3Ljk5NzYgMjlDMjQuOTM2NSAyOSAzMS4xODU1IDI0LjgzIDMzLjkxNTEgMTguMzlDMzQuMDI1MSAxOC4xNCAzNC4wMjUxIDE3Ljg2IDMzLjkxNTEgMTcuNjFaTTE3Ljk5NzYgMjdDMTEuOTk4''@;'; put 'put ''NSAyNyA2LjU4OTM0IDIzLjQ4IDQuMDg5NzMgMThDNi41ODkzNCAxMi41MiAxMS45OTg1IDkgMTcuOTk3NiA5QzIzLjk5NjYgOSAyOS40MDU4IDEyLjUyIDMxLjkwNTQgMThDMjkuNDA1OCAyMy40OCAyMy45OTY2IDI3IDE3Ljk5NzYgMjdaIi8+J31dLERqZT1bImVsbGlwc2lzLXZlcnRpY2Fs''@;'; put 'put ''Iix7b3V0bGluZTonPHBhdGggZD0iTTIxLjEwMDEgNC45QzIxLjEwMDEgNi41MDE2MyAxOS43NTcgNy44IDE4LjEwMDEgNy44QzE2LjQ0MzIgNy44IDE1LjEwMDEgNi41MDE2MyAxNS4xMDAxIDQuOUMxNS4xMDAxIDMuMjk4MzcgMTYuNDQzMiAyIDE4LjEwMDEgMkMxOS43NTcgMiAyMS4xMDAx''@;'; put 'put ''IDMuMjk4MzcgMjEuMTAwMSA0LjlaIi8+PHBhdGggZD0iTTE4LjEwMDEgMjAuOUMxOS43NTcgMjAuOSAyMS4xMDAxIDE5LjYwMTYgMjEuMTAwMSAxOEMyMS4xMDAxIDE2LjM5ODQgMTkuNzU3IDE1LjEgMTguMTAwMSAxNS4xQzE2LjQ0MzIgMTUuMSAxNS4xMDAxIDE2LjM5ODQgMTUuMTAwMSAx''@;'; put 'put ''OEMxNS4xMDAxIDE5LjYwMTYgMTYuNDQzMiAyMC45IDE4LjEwMDEgMjAuOVoiLz48cGF0aCBkPSJNMTguMTAwMSAzNEMxOS43NTcgMzQgMjEuMTAwMSAzMi43MDE2IDIxLjEwMDEgMzEuMUMyMS4xMDAxIDI5LjQ5ODQgMTkuNzU3IDI4LjIgMTguMTAwMSAyOC4yQzE2LjQ0MzIgMjguMiAxNS4x''@;'; put 'put ''MDAxIDI5LjQ5ODQgMTUuMTAwMSAzMS4xQzE1LjEwMDEgMzIuNzAxNiAxNi40NDMyIDM0IDE4LjEwMDEgMzRaIi8+JyxvdXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJNMjEuMTAwMSA0LjlDMjEuMTAwMSA2LjUwMTYzIDE5Ljc1NyA3LjggMTguMTAwMSA3LjhDMTYuNDQzMiA3LjggMTUuMTAwMSA2''@;'; put 'put ''LjUwMTYzIDE1LjEwMDEgNC45QzE1LjEwMDEgMy4yOTgzNyAxNi40NDMyIDIgMTguMTAwMSAyQzE5Ljc1NyAyIDIxLjEwMDEgMy4yOTgzNyAyMS4xMDAxIDQuOVoiLz48cGF0aCBkPSJNMTguMTAwMSAyMC45QzE5Ljc1NyAyMC45IDIxLjEwMDEgMTkuNjAxNiAyMS4xMDAxIDE4QzIxLjEwMDEg''@;'; put 'put ''MTYuMzk4NCAxOS43NTcgMTUuMSAxOC4xMDAxIDE1LjFDMTYuNDQzMiAxNS4xIDE1LjEwMDEgMTYuMzk4NCAxNS4xMDAxIDE4QzE1LjEwMDEgMTkuNjAxNiAxNi40NDMyIDIwLjkgMTguMTAwMSAyMC45WiIvPjxwYXRoIGQ9Ik0xOC4xMDAxIDM0QzE5Ljc1NyAzNCAyMS4xMDAxIDMyLjcwMTYg''@;'; put 'put ''MjEuMTAwMSAzMS4xQzIxLjEwMDEgMjkuNDk4NCAxOS43NTcgMjguMiAxOC4xMDAxIDI4LjJDMTYuNDQzMiAyOC4yIDE1LjEwMDEgMjkuNDk4NCAxNS4xMDAxIDMxLjFDMTUuMTAwMSAzMi43MDE2IDE2LjQ0MzIgMzQgMTguMTAwMSAzNFoiLz48cGF0aCBkPSJNMzAgMTFDMzIuNzYxNCAxMSAz''@;'; put 'put ''NSA4Ljc2MTQyIDM1IDZDMzUgMy4yMzg1OCAzMi43NjE0IDEgMzAgMUMyNy4yMzg2IDEgMjUgMy4yMzg1OCAyNSA2QzI1IDguNzYxNDIgMjcuMjM4NiAxMSAzMCAxMVoiLz4nfV0sSWplPVsidmlldy1jb2x1bW5zIix7b3V0bGluZTonPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1''@;'; put 'put ''bGU9ImV2ZW5vZGQiIGQ9Ik0zMSA1SDVDMy44OTU0MyA1IDMgNS44OTU0MyAzIDdWMjlDMyAzMC4xMDQ2IDMuODk1NDMgMzEgNSAzMUgzMUMzMi4xMDQ2IDMxIDMzIDMwLjEwNDYgMzMgMjlWN0MzMyA1Ljg5NTQzIDMyLjEwNDYgNSAzMSA1Wk0xMyAyOUg1VjdIMTNWMjlaTTE1IDI5SDIzVjdI''@;'; put 'put ''MTVWMjlaIi8+J31dLFJqZT1bImFycm93Iix7b3V0bGluZTonPHBhdGggZD0iTTI3LjY1MDQgMTUuNjM0MUwxNy45OTUxIDZMOC4zMzk4MSAxNS42MzQxQzguMDI4NjkgMTUuODcxNyA3Ljg4NDMyIDE2LjI2OTUgNy45NzAzIDE2LjY1MjFDOC4wNTYyOSAxNy4wMzQ3IDguMzU2ODUgMTcuMzMx''@;'; put 'put ''OSA4LjczOTUyIDE3LjQxMjdDOS4xMjIxOSAxNy40OTM1IDkuNTE2NjcgMTcuMzQzIDkuNzQ5MTIgMTcuMDI3NkwxNi45OTU2IDkuODE5NTVWMjguOTk3NUMxNi45OTU2IDI5LjU1MTIgMTcuNDQzMSAzMCAxNy45OTUxIDMwQzE4LjU0NzEgMzAgMTguOTk0NiAyOS41NTEyIDE4Ljk5NDYgMjgu''@;'; put 'put ''OTk3NVY5LjgxOTU1TDI2LjI0MTEgMTcuMDI3NkMyNi42MzMgMTcuNDE3OSAyNy4yNjYyIDE3LjQxNTcgMjcuNjU1NCAxNy4wMjI2QzI4LjA0NDUgMTYuNjI5NSAyOC4wNDIzIDE1Ljk5NDMgMjcuNjUwNCAxNS42MDRWMTUuNjM0MVoiLz4nfV0sTGplPVsic3RlcC1mb3J3YXJkLTIiLHtvdXRs''@;'; put 'put ''aW5lOic8cGF0aCBkPSJNNy4wODg5MyA2LjUyMDAzQzYuOTI2NDMgNi42NzY0NSA2Ljc5NzM0IDYuODYzMTUgNi43MDkyMSA3LjA2OTIxQzYuNjIxMDggNy4yNzUyNiA2LjU3NTY4IDcuNDk2NTIgNi41NzU2OCA3LjcyMDAzQzYuNTc1NjggNy45NDM1MyA2LjYyMTA4IDguMTY0NzkgNi43MDky''@;'; put 'put ''MSA4LjM3MDg1QzYuNzk3MzQgOC41NzY5IDYuOTI2NDMgOC43NjM2MSA3LjA4ODkzIDguOTIwMDNMMTYuNjg3MiAxOEw3LjEyOTY0IDI3LjA4QzYuODI5NzcgMjcuMzk5MSA2LjY2NTU0IDI3LjgxODggNi42NzA2NSAyOC4yNTNDNi42NzU3NiAyOC42ODcyIDYuODQ5ODIgMjkuMTAzMSA3LjE1''@;'; put 'put ''NzEyIDI5LjQxNTJDNy40NjQ0MiAyOS43Mjc0IDcuODgxNjYgMjkuOTEyMSA4LjMyMzIzIDI5LjkzMTZDOC43NjQ4IDI5Ljk1MTEgOS4xOTcyMSAyOS44MDM4IDkuNTMxNzYgMjkuNTJMMjEuNjY0NSAxOEw5LjUzMTc2IDYuNDcwMDNDOS4zNjg1MSA2LjMxNDgyIDkuMTc1NTkgNi4xOTI5MyA4''@;'; put 'put ''Ljk2NDEzIDYuMTExMzdDOC43NTI2NyA2LjAyOTgyIDguNTI2ODYgNS45OTAyMiA4LjI5OTc0IDUuOTk0ODdDOC4wNzI2MiA1Ljk5OTUyIDcuODQ4NjkgNi4wNDgzMiA3LjY0MDg3IDYuMTM4NDZDNy40MzMwNSA2LjIyODU5IDcuMjQ1NDYgNi4zNTgyOCA3LjA4ODkzIDYuNTIwMDNaIi8+PHBh''@;'; put 'put ''dGggZD0iTTI2Ljg0NTMgNUMyNi4zODY0IDUgMjUuOTQ2MyA1LjE3OTExIDI1LjYyMTggNS40OTc5MkMyNS4yOTczIDUuODE2NzMgMjUuMTE1IDYuMjQ5MTMgMjUuMTE1IDYuN1YyOS4zQzI1LjExNSAyOS43NTA5IDI1LjI5NzMgMzAuMTgzMyAyNS42MjE4IDMwLjUwMjFDMjUuOTQ2MyAzMC44''@;'; put 'put ''MjA5IDI2LjM4NjQgMzEgMjYuODQ1MyAzMUMyNy4zMDQzIDMxIDI3Ljc0NDQgMzAuODIwOSAyOC4wNjg5IDMwLjUwMjFDMjguMzkzNCAzMC4xODMzIDI4LjU3NTcgMjkuNzUwOSAyOC41NzU3IDI5LjNWNi43QzI4LjU3NTcgNi4yNDkxMyAyOC4zOTM0IDUuODE2NzMgMjguMDY4OSA1LjQ5Nzky''@;'; put 'put ''QzI3Ljc0NDQgNS4xNzkxMSAyNy4zMDQzIDUgMjYuODQ1MyA1WiIvPid9XSxPamU9WyJmaWx0ZXItZ3JpZC1jaXJjbGUiLHtvdXRsaW5lOic8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTE4IDJDOS4xNjM0NCAyIDIgOS4xNjM0NCAyIDE4QzIgMjYu''@;'; put 'put ''ODM2NiA5LjE2MzQ0IDM0IDE4IDM0QzI2LjgzNjYgMzQgMzQgMjYuODM2NiAzNCAxOEMzNCAxMy43NTY1IDMyLjMxNDMgOS42ODY4NyAyOS4zMTM3IDYuNjg2MjlDMjYuMzEzMSAzLjY4NTcxIDIyLjI0MzUgMiAxOCAyWk0xOCAzMkMxMC4yNjggMzIgNCAyNS43MzIgNCAxOEM0IDEwLjI2OCAx''@;'; put 'put ''MC4yNjggNCAxOCA0QzI1LjczMiA0IDMyIDEwLjI2OCAzMiAxOEMzMiAyMS43MTMgMzAuNTI1IDI1LjI3NCAyNy44OTk1IDI3Ljg5OTVDMjUuMjc0IDMwLjUyNSAyMS43MTMgMzIgMTggMzJaTTE3IDI2Ljg2TDE1IDI1Ljg2VjIwLjY4TDguNDIgMTRDOC4xNTY3OSAxMy43MzMgOC4wMDY0IDEz''@;'; put 'put ''LjM3NDkgOCAxM1YxMkM4IDExLjQ0NzcgOC40NDc3MiAxMSA5IDExSDI3QzI3LjU1MjMgMTEgMjggMTEuNDQ3NyAyOCAxMlYxM0MyNy45OTM2IDEzLjM3NDkgMjcuODQzMiAxMy43MzMgMjcuNTggMTRMMjEgMjAuNjhWMjlMMTkgMjhMMTkuMDMgMjAuMjdDMTkuMDMxMSAyMC4wMDc3IDE5LjEz''@;'; put 'put ''NTMgMTkuNzU2MyAxOS4zMiAxOS41N0wyNS43OSAxM0gxMC4yM0wxNi43MSAxOS41N0MxNi44OTQ3IDE5Ljc1NjMgMTYuOTk4OSAyMC4wMDc3IDE3IDIwLjI3VjI2Ljg2WiIvPicsc29saWQ6JzxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTggMkM5''@;'; put 'put ''LjE2MzQ0IDIgMiA5LjE2MzQ0IDIgMThDMiAyNi44MzY2IDkuMTYzNDQgMzQgMTggMzRDMjYuODM2NiAzNCAzNCAyNi44MzY2IDM0IDE4QzM0IDEzLjc1NjUgMzIuMzE0MyA5LjY4Njg3IDI5LjMxMzcgNi42ODYyOUMyNi4zMTMxIDMuNjg1NzEgMjIuMjQzNSAyIDE4IDJaTTE4IDMyQzEwLjI2''@;'; put 'put ''OCAzMiA0IDI1LjczMiA0IDE4QzQgMTAuMjY4IDEwLjI2OCA0IDE4IDRDMjUuNzMyIDQgMzIgMTAuMjY4IDMyIDE4QzMyIDIxLjcxMyAzMC41MjUgMjUuMjc0IDI3Ljg5OTUgMjcuODk5NUMyNS4yNzQgMzAuNTI1IDIxLjcxMyAzMiAxOCAzMlpNOCAxMi4xMlYxMUgyNy45OFYxMi4xNEMyNy45''@;'; put 'put ''NzgxIDEyLjI3MTkgMjcuOTI0MiAxMi4zOTc3IDI3LjgzIDEyLjQ5TDIwLjcxIDE5Ljc0QzIwLjYwODEgMTkuODI5OSAyMC41NDM4IDE5Ljk1NDggMjAuNTMgMjAuMDlWMjguNDhDMjAuNTMwMyAyOC42NTI4IDIwLjQ0MTUgMjguODEzNCAyMC4yOTUgMjguOTA1QzIwLjE0ODUgMjguOTk2NiAx''@;'; put 'put ''OS45NjUxIDI5LjAwNiAxOS44MSAyOC45M0wxNS44NiAyNy41MkMxNS42ODgzIDI3LjQzNTkgMTUuNTc5NiAyNy4yNjEyIDE1LjU4IDI3LjA3VjIwLjE4QzE1LjU3ODEgMjAuMDQ4MSAxNS41MjQyIDE5LjkyMjMgMTUuNDMgMTkuODNMOC4xNSAxMi40N0M4LjA1NTc5IDEyLjM3NzcgOC4wMDE4''@;'; put 'put ''OCAxMi4yNTE5IDggMTIuMTJaIi8+J31dLFBqZT1bImZpbHRlci1ncmlkIix7b3V0bGluZTonPHBhdGggZD0iTTE1IDIzLjg2TDE3IDI0Ljg2VjE4LjI3QzE2Ljk5ODkgMTguMDA3NyAxNi44OTQ3IDE3Ljc1NjMgMTYuNzEgMTcuNTdMMTAuMjMgMTFIMjUuNzlMMTkuMzIgMTcuNTdDMTkuMTM1''@;'; put 'put ''MyAxNy43NTYzIDE5LjAzMTEgMTguMDA3NyAxOS4wMyAxOC4yN0wxOSAyNkwyMSAyN1YxOC42OEwyNy41OCAxMkMyNy44NDMyIDExLjczMyAyNy45OTM2IDExLjM3NDkgMjggMTFWMTBDMjggOS40NDc3MiAyNy41NTIzIDkgMjcgOUg5QzguNDQ3NzIgOSA4IDkuNDQ3NzIgOCAxMFYxMUM4LjAw''@;'; put 'put ''NjQgMTEuMzc0OSA4LjE1Njc5IDExLjczMyA4LjQyIDEyTDE1IDE4LjY4VjIzLjg2WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik04IDlWMTAuMTIxMkM4LjAwMTg4IDEwLjI1MzIgOC4wNTU4NSAxMC4zNzkxIDguMTUwMTUgMTAuNDcxNkwxNS40Mzc0IDE3LjgzOTNDMTUuNTMxNyAxNy45MzE3IDE1''@;'; put 'put ''LjU4NTcgMTguMDU3NyAxNS41ODc2IDE4LjE4OTdWMjUuMDg3QzE1LjU4NzIgMjUuMjc4NCAxNS42OTYgMjUuNDUzMiAxNS44Njc5IDI1LjUzNzVMMTkuODIxOCAyNi45NDg5QzE5Ljk3NzEgMjcuMDI1IDIwLjE2MDcgMjcuMDE1NiAyMC4zMDczIDI2LjkyMzlDMjAuNDUzOSAyNi44MzIzIDIw''@;'; put 'put ''LjU0MjkgMjYuNjcxNCAyMC41NDI1IDI2LjQ5ODVWMTguMDk5NkMyMC41NTY0IDE3Ljk2NDMgMjAuNjIwNyAxNy44MzkyIDIwLjcyMjcgMTcuNzQ5MkwyNy44NDk4IDEwLjQ5MTZDMjcuOTQ0MiAxMC4zOTkyIDI3Ljk5ODEgMTAuMjczMiAyOCAxMC4xNDEyVjlIOFoiLz4nfV0sUks9WyJlcnJv''@;'; put 'put ''ci1zdGFuZGFyZCIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOCAyMi42MUMxNy40NDc3IDIyLjYxIDE3IDIyLjE2MjMgMTcgMjEuNjFWOS42MUMxNyA5LjA1NzcyIDE3LjQ0NzcgOC42MSAxOCA4LjYxQzE4LjU1MjMgOC42MSAxOSA5LjA1NzcyIDE5IDkuNjFWMjEuNjFDMTkgMjIuMTYyMyAxOC41''@;'; put 'put ''NTIzIDIyLjYxIDE4IDIyLjYxWiIvPjxwYXRoIGQ9Ik0xOS4zMyAyNi4wNkMxOS4zMyAyNi43OTQ1IDE4LjczNDUgMjcuMzkgMTggMjcuMzlDMTcuMjY1NSAyNy4zOSAxNi42NyAyNi43OTQ1IDE2LjY3IDI2LjA2QzE2LjY3IDI1LjMyNTUgMTcuMjY1NSAyNC43MyAxOCAyNC43M0MxOC43MzQ1''@;'; put 'put ''IDI0LjczIDE5LjMzIDI1LjMyNTUgMTkuMzMgMjYuMDZaIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yIDE4QzIgMjYuODM2NiA5LjE2MzQ0IDM0IDE4IDM0QzIyLjI0MzUgMzQgMjYuMzEzMSAzMi4zMTQzIDI5LjMxMzcgMjkuMzEzN0MzMi4z''@;'; put 'put ''MTQzIDI2LjMxMzEgMzQgMjIuMjQzNSAzNCAxOEMzNCA5LjE2MzQ0IDI2LjgzNjYgMiAxOCAyQzkuMTYzNDQgMiAyIDkuMTYzNDQgMiAxOFpNNCAxOEM0IDEwLjI2OCAxMC4yNjggNCAxOCA0QzI1LjczMiA0IDMyIDEwLjI2OCAzMiAxOEMzMiAyNS43MzIgMjUuNzMyIDMyIDE4IDMyQzEwLjI2''@;'; put 'put ''OCAzMiA0IDI1LjczMiA0IDE4WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOCAyQzkuMTYgMiAyIDkuMTYgMiAxOEMyIDI2Ljg0IDkuMTYgMzQgMTggMzRDMjIuMjQgMzQgMjYuMzEgMzIuMzEgMjkuMzEgMjkuMzFDMzIuMzEgMjYuMzEgMzQgMjIuMjQgMzQgMThDMzQgOS4xNiAyNi44NCAyIDE4''@;'; put 'put ''IDJaTTE3IDkuNjFDMTcgOS4wNiAxNy40NSA4LjYxIDE4IDguNjFDMTguNTUgOC42MSAxOSA5LjA2IDE5IDkuNjFWMjEuNjFDMTkgMjIuMTYgMTguNTUgMjIuNjEgMTggMjIuNjFDMTcuNDUgMjIuNjEgMTcgMjIuMTYgMTcgMjEuNjFWOS42MVpNMTggMjcuMjZDMTcuMzQgMjcuMjYgMTYuOCAy''@;'; put 'put ''Ni43MiAxNi44IDI2LjA2QzE2LjggMjUuNCAxNy4zNCAyNC44NiAxOCAyNC44NkMxOC42NiAyNC44NiAxOS4yIDI1LjQgMTkuMiAyNi4wNkMxOS4yIDI2LjcyIDE4LjY2IDI3LjI2IDE4IDI3LjI2WiIvPid9XSxGamU9WyJoZWxwIix7b3V0bGluZTonPHBhdGggZmlsbC1ydWxlPSJldmVub2Rk''@;'; put 'put ''IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yIDE4QzIgOS4xNjM0NCA5LjE2MzQ0IDIgMTggMkMyMi4yNDM1IDIgMjYuMzEzMSAzLjY4NTcxIDI5LjMxMzcgNi42ODYyOUMzMi4zMTQzIDkuNjg2ODcgMzQgMTMuNzU2NSAzNCAxOEMzNCAyNi44MzY2IDI2LjgzNjYgMzQgMTggMzRDOS4xNjM0''@;'; put 'put ''NCAzNCAyIDI2LjgzNjYgMiAxOFpNNCAxOEM0IDI1LjczMiAxMC4yNjggMzIgMTggMzJDMjEuNzEzIDMyIDI1LjI3NCAzMC41MjUgMjcuODk5NSAyNy44OTk1QzMwLjUyNSAyNS4yNzQgMzIgMjEuNzEzIDMyIDE4QzMyIDEwLjI2OCAyNS43MzIgNCAxOCA0QzEwLjI2OCA0IDQgMTAuMjY4IDQg''@;'; put 'put ''MThaTTE4LjI5IDguOTJDMTYuMDk2MSA4Ljg4Mzc0IDEzLjk5OTggOS44MjU2IDEyLjU3IDExLjQ5QzEyLjM3MTggMTEuNjczNyAxMi4yNTYzIDExLjkyOTggMTIuMjUgMTIuMkMxMi4yNDk5IDEyLjQ0OTMgMTIuMzUwOSAxMi42ODggMTIuNTMgMTIuODYxNEMxMi43MDkxIDEzLjAzNDggMTIu''@;'; put 'put ''OTUwOCAxMy4xMjgxIDEzLjIgMTMuMTJDMTMuNDY0MiAxMy4xMTM1IDEzLjcxNjggMTMuMDEwMyAxMy45MSAxMi44M0MxNC45OTE2IDExLjU2MjUgMTYuNTczNyAxMC44MzE3IDE4LjI0IDEwLjgzQzIwLjYgMTAuODMgMjIuMDcgMTIuMzUgMjIuMDcgMTQuMjRWMTQuMjlDMjIuMDcgMTYuNSAy''@;'; put 'put ''MC4zMSAxNy43MyAxNy41MyAxNy45NEMxNy4zMDIzIDE3Ljk0ODggMTcuMDg5MiAxOC4wNTQyIDE2Ljk0NDEgMTguMjI5OUMxNi43OTkgMTguNDA1NiAxNi43MzU3IDE4LjYzNDggMTYuNzcgMTguODZWMjEuNjFDMTYuODIxNSAyMi4xMjI5IDE3LjI1NDUgMjIuNTEyNiAxNy43NyAyMi41MUgx''@;'; put 'put ''Ny44OEMxOC4zOTI5IDIyLjQ1ODUgMTguNzgyNiAyMi4wMjU1IDE4Ljc4IDIxLjUxVjE5LjQ1QzIxLjc4IDE5LjAzIDI0LjIxIDE3LjQ1IDI0LjIxIDE0LjE3VjE0LjEyQzI0LjE4IDExLjEyIDIxLjg0IDguOTIgMTguMjkgOC45MlpNMTkuMDMgMjYuMkMxOS4wMyAyNi44OTA0IDE4LjQ3MDQg''@;'; put 'put ''MjcuNDUgMTcuNzggMjcuNDVDMTcuMDg5NiAyNy40NSAxNi41MyAyNi44OTA0IDE2LjUzIDI2LjJDMTYuNTMgMjUuNTA5NiAxNy4wODk2IDI0Ljk1IDE3Ljc4IDI0Ljk1QzE4LjQ3MDQgMjQuOTUgMTkuMDMgMjUuNTA5NiAxOS4wMyAyNi4yWiIvPicsb3V0bGluZUJhZGdlZDonPHBhdGggZD0i''@;'; put 'put ''TTMzLjAwMTMgMTIuNzY4OUMzMi4zOTU5IDEzLjA0NjIgMzEuNzU1OSAxMy4yNDA2IDMxLjA5ODYgMTMuMzQ2N0MzMy4yNjM2IDE5LjUxMDggMzAuODc2MyAyNi4zNTI4IDI1LjM0NjUgMjkuODMyQzE5LjgxNjcgMzMuMzExMiAxMi42MTU0IDMyLjUwMiA3Ljk5NTY5IDI3Ljg4MjJDMy4zNzU5''@;'; put 'put ''NyAyMy4yNjI1IDIuNTY2NzQgMTYuMDYxMyA2LjA0NTkyIDEwLjUzMTVDOS41MjUwOSA1LjAwMTYyIDE2LjM2NzEgMi42MTQyOSAyMi41MzEyIDQuNzc5MzhDMjIuNjM3NSA0LjEyMjA1IDIyLjgzMTggMy40ODIwNCAyMy4xMDkgMi44NzY2M0MxNi4wNjQ5IDAuNDQwOTQ2IDguMjcxOTkgMy4x''@;'; put 'put ''OTIwNSA0LjMxODIzIDkuNTEwMjlDMC4zNjQ0NzYgMTUuODI4NSAxLjI5NzM2IDI0LjAzOTkgNi41Njc2NyAyOS4zMTAzQzExLjgzOCAzNC41ODA2IDIwLjA0OTQgMzUuNTEzNSAyNi4zNjc2IDMxLjU1OTdDMzIuNjg1OSAyNy42MDU5IDM1LjQzNyAxOS44MTMxIDMzLjAwMTMgMTIuNzY4OVoi''@;'; put 'put ''Lz48cGF0aCBkPSJNMTcuNzE5NiAyNy4zNTMzQzE4LjQwNzMgMjcuMzUzMyAxOC45NjQ4IDI2Ljc5NTggMTguOTY0OCAyNi4xMDgxQzE4Ljk2NDggMjUuNDIwMyAxOC40MDczIDI0Ljg2MjggMTcuNzE5NiAyNC44NjI4QzE3LjAzMTggMjQuODYyOCAxNi40NzQzIDI1LjQyMDMgMTYuNDc0MyAy''@;'; put 'put ''Ni4xMDgxQzE2LjQ3NDMgMjYuNzk1OCAxNy4wMzE4IDI3LjM1MzMgMTcuNzE5NiAyNy4zNTMzWiIvPjxwYXRoIGQ9Ik0yNC4wOTUzIDE0LjA3MzlWMTQuMTIzOEMyNC4wOTUzIDE3LjM5MTMgMjEuNjc0NSAxOC45MzU0IDE4LjcyNTcgMTkuMzgzN1YyMS40MzU5QzE4LjcyODMgMjEuOTQ5NCAx''@;'; put 'put ''OC4zNDAxIDIyLjM4MDcgMTcuODI5MSAyMi40MzIxSDE3LjcxOTZDMTcuMjA2IDIyLjQzNDcgMTYuNzc0NyAyMi4wNDY1IDE2LjcyMzMgMjEuNTM1NVYxOC43OTU5QzE2LjY4OTEgMTguNTcxNiAxNi43NTIyIDE4LjM0MzIgMTYuODk2OCAxOC4xNjgyQzE3LjA0MTMgMTcuOTkzMiAxNy4yNTM3''@;'; put 'put ''IDE3Ljg4ODIgMTcuNDgwNSAxNy44Nzk0QzIwLjI0OTkgMTcuNjcwMiAyMi4wMDMyIDE2LjQ0NDkgMjIuMDAzMiAxNC4yNDMzVjE0LjE5MzVDMjIuMDAzMiAxMi4zMTA3IDIwLjUzODggMTAuNzk2NCAxOC4xODc4IDEwLjc5NjRDMTYuNTI3OCAxMC43OTgyIDE0Ljk1MTcgMTEuNTI2MSAxMy44''@;'; put 'put ''NzQyIDEyLjc4ODhDMTMuNjgxNyAxMi45Njg0IDEzLjQzMDEgMTMuMDcxMiAxMy4xNjY5IDEzLjA3NzdDMTIuOTE4NyAxMy4wODU4IDEyLjY3NzggMTIuOTkyOSAxMi40OTk0IDEyLjgyMDFDMTIuMzIxIDEyLjY0NzMgMTIuMjIwNCAxMi40MDk2IDEyLjIyMDUgMTIuMTYxMkMxMi4yMjY4IDEx''@;'; put 'put ''Ljg5MjEgMTIuMzQxOCAxMS42MzY5IDEyLjUzOTMgMTEuNDUzOUMxMy45NjM3IDkuNzk1ODUgMTYuMDUyIDguODU3NTcgMTguMjM3NiA4Ljg5MzY5QzIxLjc2NDEgOC44OTM2OSAyNC4wOTUzIDExLjA4NTMgMjQuMDk1MyAxNC4wNzM5WiIvPjxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1''@;'; put 'put ''IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2MTQgMSAzMCAxQzI3LjIzODYgMSAyNSAzLjIzODU4IDI1IDZDMjUgOC43NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPicsc29saWQ6JzxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTggMkM5LjE2''@;'; put 'put ''MzQ0IDIgMiA5LjE2MzQ0IDIgMThDMiAyNi44MzY2IDkuMTYzNDQgMzQgMTggMzRDMjYuODM2NiAzNCAzNCAyNi44MzY2IDM0IDE4QzM0IDEzLjc1NjUgMzIuMzE0MyA5LjY4Njg3IDI5LjMxMzcgNi42ODYyOUMyNi4zMTMxIDMuNjg1NzEgMjIuMjQzNSAyIDE4IDJaTTE3Ljc4IDI3Ljg1QzE3''@;'; put 'put ''LjExMjYgMjcuODUgMTYuNTExIDI3LjQ0OCAxNi4yNTU2IDI2LjgzMTRDMTYuMDAwMiAyNi4yMTQ5IDE2LjE0MTQgMjUuNTA1MiAxNi42MTMzIDI1LjAzMzNDMTcuMDg1MiAyNC41NjE0IDE3Ljc5NDkgMjQuNDIwMiAxOC40MTE0IDI0LjY3NTZDMTkuMDI4IDI0LjkzMSAxOS40MyAyNS41MzI2''@;'; put 'put ''IDE5LjQzIDI2LjJDMTkuNDMgMjcuMTExMyAxOC42OTEzIDI3Ljg1IDE3Ljc4IDI3Ljg1Wk0xOS4xNSAyMS41MVYxOS43OUMyMi42MSAxOS4yIDI0LjU4IDE3LjE2IDI0LjU4IDE0LjExQzI0LjU4IDEwLjgxIDIyIDguNTEgMTguMyA4LjUxQzE2LjAwMDUgOC40NzQ1MiAxMy44MDMzIDkuNDU5''@;'; put 'put ''NTYgMTIuMyAxMS4yQzEyLjAzMDQgMTEuNDYzNiAxMS44NzU5IDExLjgyMyAxMS44NyAxMi4yQzExLjg4MyAxMi43NTE2IDEyLjIyOCAxMy4yNDA2IDEyLjc0MzIgMTMuNDM4QzEzLjI1ODUgMTMuNjM1MyAxMy44NDE5IDEzLjUwMTggMTQuMjIgMTMuMUMxNS4yMDkyIDExLjkwNjkgMTYuNjcw''@;'; put 'put ''NCAxMS4yMDU2IDE4LjIyIDExLjE4QzIwLjI0IDExLjE4IDIxLjY1IDEyLjQyIDIxLjY1IDE0LjI1QzIxLjY1IDE2LjggMTkuMDQgMTcuMzggMTcuNDcgMTcuNUMxNy4xNDQ4IDE3LjUxNzUgMTYuODQwOSAxNy42Njc0IDE2LjYyOTMgMTcuOTE1QzE2LjQxNzYgMTguMTYyNSAxNi4zMTY3IDE4''@;'; put 'put ''LjQ4NiAxNi4zNSAxOC44MVYyMS41N0MxNi4zNjA0IDIxLjkyNzIgMTYuNTEzMSAyMi4yNjU1IDE2Ljc3NDEgMjIuNTA5NkMxNy4wMzUxIDIyLjc1MzcgMTcuMzgyOSAyMi44ODM1IDE3Ljc0IDIyLjg3SDE3Ljg1QzE4LjU3NTMgMjIuODMyOSAxOS4xNDU2IDIyLjIzNjIgMTkuMTUgMjEuNTFa''@;'; put 'put ''Ii8+Jyxzb2xpZEJhZGdlZDonPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zMy4wMDEzIDEyLjc2ODlDMzAuMTY1OSAxNC4wNjg4IDI2LjgyMTIgMTMuNDY3OSAyNC42MTU2IDExLjI2MjNDMjIuNDEwMSA5LjA1Njc0IDIxLjgwOTEgNS43MTIgMjMu''@;'; put 'put ''MTA5IDIuODc2NjNDMTYuMDY0OSAwLjQ0MDk0NiA4LjI3MTk5IDMuMTkyMDUgNC4zMTgyMyA5LjUxMDI5QzAuMzY0NDc2IDE1LjgyODUgMS4yOTczNiAyNC4wMzk5IDYuNTY3NjcgMjkuMzEwM0MxMS44MzggMzQuNTgwNiAyMC4wNDk0IDM1LjUxMzUgMjYuMzY3NiAzMS41NTk3QzMyLjY4NTkg''@;'; put 'put ''MjcuNjA1OSAzNS40MzcgMTkuODEzMSAzMy4wMDEzIDEyLjc2ODlaTTE3LjcxOTYgMjcuNzEyQzE3LjA1NDcgMjcuNzEyIDE2LjQ1NTQgMjcuMzExNSAxNi4yMDA5IDI2LjY5NzNDMTUuOTQ2NSAyNi4wODMgMTYuMDg3MiAyNS4zNzYgMTYuNTU3MyAyNC45MDU5QzE3LjAyNzQgMjQuNDM1OCAx''@;'; put 'put ''Ny43MzQ0IDI0LjI5NTIgMTguMzQ4NiAyNC41NDk2QzE4Ljk2MjggMjQuODA0IDE5LjM2MzMgMjUuNDAzNCAxOS4zNjMzIDI2LjA2ODJDMTkuMzc0IDI2LjUxMSAxOS4yMDU2IDI2LjkzOTQgMTguODk2MiAyNy4yNTY0QzE4LjU4NjcgMjcuNTczMyAxOC4xNjI1IDI3Ljc1MTkgMTcuNzE5NiAy''@;'; put 'put ''Ny43NTE4VjI3LjcxMlpNMTkuMDg0NCAyMS4zOTZWMTkuNzIyNEMyMi41MzEyIDE5LjEzNDcgMjQuNDkzNyAxNy4xMDI0IDI0LjQ5MzcgMTQuMDI0MUMyNC40OTM3IDEwLjczNjcgMjEuOTIzNSA4LjQ0NTQgMTguMjM3NiA4LjQ0NTRDMTUuOTQ2OCA4LjQxMDA2IDEzLjc1OCA5LjM5MTM2IDEy''@;'; put 'put ''LjI2MDQgMTEuMTI1MkMxMS45OTE4IDExLjM4NzggMTEuODM3OSAxMS43NDU4IDExLjgzMiAxMi4xMjE0QzExLjg0NSAxMi42NzA5IDEyLjE4ODYgMTMuMTU4MSAxMi43MDE5IDEzLjM1NDdDMTMuMjE1MiAxMy41NTEyIDEzLjc5NjQgMTMuNDE4MiAxNC4xNzMxIDEzLjAxOEMxNS4xNTg2IDEx''@;'; put 'put ''LjgyOTQgMTYuNjE0MSAxMS4xMzA3IDE4LjE1NzkgMTEuMTA1M0MyMC4xNzAyIDExLjEwNTMgMjEuNTc0OSAxMi4zNDA2IDIxLjU3NDkgMTQuMTYzNkMyMS41NzQ5IDE2LjcwMzkgMTguOTc0OCAxNy4yODE3IDE3LjQxMDcgMTcuNDAxM0MxNy4wODY3IDE3LjQxODYgMTYuNzg0IDE3LjU2ODEg''@;'; put 'put ''MTYuNTczMiAxNy44MTQ3QzE2LjM2MjMgMTguMDYxMyAxNi4yNjE4IDE4LjM4MzUgMTYuMjk1IDE4LjcwNjNWMjEuNDU1OEMxNi4zMDU0IDIxLjgxMTcgMTYuNDU3NSAyMi4xNDg3IDE2LjcxNzUgMjIuMzkxOUMxNi45Nzc1IDIyLjYzNTEgMTcuMzIzOSAyMi43NjQzIDE3LjY3OTcgMjIuNzUw''@;'; put 'put ''OUgxNy43ODkzQzE4LjUxMTggMjIuNzEzOSAxOS4wOCAyMi4xMTk1IDE5LjA4NDQgMjEuMzk2WiIvPjxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2MTQgMSAzMCAxQzI3LjIzODYgMSAyNSAzLjIzODU4IDI1IDZDMjUgOC43NjE0MiAy''@;'; put 'put ''Ny4yMzg2IDExIDMwIDExWiIvPid9XSxIamU9WyJpbmZvLXN0YW5kYXJkIix7b3V0bGluZTonPHBhdGggZD0iTTIgMThDMiAyNi44NCA5LjE2IDM0IDE4IDM0QzIyLjI0IDM0IDI2LjMxIDMyLjMxIDI5LjMxIDI5LjMxQzMyLjMxIDI2LjMxIDM0IDIyLjI0IDM0IDE4QzM0IDkuMTYgMjYuODQg''@;'; put 'put ''MiAxOCAyQzkuMTYgMiAyIDkuMTYgMiAxOFpNNCAxOEM0IDEwLjI3IDEwLjI3IDQgMTggNEMyNS43MyA0IDMyIDEwLjI3IDMyIDE4QzMyIDI1LjczIDI1LjczIDMyIDE4IDMyQzEwLjI3IDMyIDQgMjUuNzMgNCAxOFpNMjEgMjVIMTlWMTRIMTZDMTUuNDUgMTQgMTUgMTQuNDUgMTUgMTVDMTUg''@;'; put 'put ''MTUuNTUgMTUuNDUgMTYgMTYgMTZIMTdWMjVIMTVDMTQuNDUgMjUgMTQgMjUuNDUgMTQgMjZDMTQgMjYuNTUgMTQuNDUgMjcgMTUgMjdIMjFDMjEuNTUgMjcgMjIgMjYuNTUgMjIgMjZDMjIgMjUuNDUgMjEuNTUgMjUgMjEgMjVaTTE5LjM3IDEwLjQ1QzE5LjM3IDExLjIyIDE4Ljc0IDExLjg1''@;'; put 'put ''IDE3Ljk3IDExLjg1QzE3LjIgMTEuODUgMTYuNTcgMTEuMjIgMTYuNTcgMTAuNDVDMTYuNTcgOS42OCAxNy4yIDkuMDUgMTcuOTcgOS4wNUMxOC43NCA5LjA1IDE5LjM3IDkuNjggMTkuMzcgMTAuNDVaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4IDJDOS4xNiAyIDIgOS4xNiAyIDE4QzIgMjYu''@;'; put 'put ''ODQgOS4xNiAzNCAxOCAzNEMyMi4yNCAzNCAyNi4zMSAzMi4zMSAyOS4zMSAyOS4zMUMzMi4zMSAyNi4zMSAzNCAyMi4yNCAzNCAxOEMzNCA5LjE2IDI2Ljg0IDIgMTggMlpNMTcuOTcgOC44NUMxOC44NSA4Ljg1IDE5LjU3IDkuNTcgMTkuNTcgMTAuNDVDMTkuNTcgMTEuMzMgMTguODUgMTIu''@;'; put 'put ''MDUgMTcuOTcgMTIuMDVDMTcuMDkgMTIuMDUgMTYuMzcgMTEuMzMgMTYuMzcgMTAuNDVDMTYuMzcgOS41NyAxNy4wOSA4Ljg1IDE3Ljk3IDguODVaTTIxIDI3LjJIMTVDMTQuMzQgMjcuMiAxMy44IDI2LjY2IDEzLjggMjZDMTMuOCAyNS4zNCAxNC4zNCAyNC44IDE1IDI0LjhIMTYuOFYxNi4y''@;'; put 'put ''SDE2QzE1LjM0IDE2LjIgMTQuOCAxNS42NiAxNC44IDE1QzE0LjggMTQuMzQgMTUuMzQgMTMuOCAxNiAxMy44SDE5LjJWMjQuOEgyMUMyMS42NiAyNC44IDIyLjIgMjUuMzQgMjIuMiAyNkMyMi4yIDI2LjY2IDIxLjY2IDI3LjIgMjEgMjcuMloiLz4nfV0sTmplPVsibm90ZSIse291dGxpbmU6''@;'; put 'put ''JzxwYXRoIGQ9Ik0yOCwzMEg2VjhIMTkuMjJsMi0ySDZBMiwyLDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTVsLTIsMloiLz48cGF0aCBkPSJNMzMuNTMsNS44NCwzMC4xNiwyLjQ3YTEuNjEsMS42MSwwLDAsMC0yLjI4LDBMMTQuMTcsMTYuMjZsLTEuMTEs''@;'; put 'put ''NC44MUExLjYxLDEuNjEsMCwwLDAsMTQuNjMsMjMsMS42OSwxLjY5LDAsMCwwLDE1LDIzbDQuODUtMS4wN0wzMy41Myw4LjEyQTEuNjEsMS42MSwwLDAsMCwzMy41Myw1Ljg0Wk0xOC44MSwyMC4wOGwtMy42Ni44MUwxNiwxNy4yNiwyNi4zMiw2Ljg3bDIuODIsMi44MlpNMzAuMjcsOC41Niwy''@;'; put 'put ''Ny40NSw1Ljc0LDI5LDQuMTYsMzEuODQsN1oiLz4nLHNvbGlkOic8cGF0aCBkPSJNMzMsNi40LDI5LjMsMi43YTEuNzEsMS43MSwwLDAsMC0yLjM2LDBMMjMuNjUsNkg2QTIsMiwwLDAsMCw0LDhWMzBhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjExLjc2bDMtM0ExLjY3LDEuNjcs''@;'; put 'put ''MCwwLDAsMzMsNi40Wk0xOC44MywyMC4xM2wtNC4xOS45MywxLTQuMTUsOS41NS05LjU3LDMuMjMsMy4yM1pNMjkuNSw5LjQzLDI2LjI3LDYuMmwxLjg1LTEuODUsMy4yMywzLjIzWiIvPid9XSxMSz1bInN1Y2Nlc3Mtc3RhbmRhcmQiLHtvdXRsaW5lOic8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5v''@;'; put 'put ''ZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTE4IDJDOS4xNjM0NCAyIDIgOS4xNjM0NCAyIDE4QzIgMjYuODM2NiA5LjE2MzQ0IDM0IDE4IDM0QzI2LjgzNjYgMzQgMzQgMjYuODM2NiAzNCAxOEMzNCAxMy43NTY1IDMyLjMxNDMgOS42ODY4NyAyOS4zMTM3IDYuNjg2MjlDMjYuMzEzMSAz''@;'; put 'put ''LjY4NTcxIDIyLjI0MzUgMiAxOCAyWk0xOCAzMkMxMC4yNjggMzIgNCAyNS43MzIgNCAxOEM0IDEwLjI2OCAxMC4yNjggNCAxOCA0QzI1LjczMiA0IDMyIDEwLjI2OCAzMiAxOEMzMiAyMS43MTMgMzAuNTI1IDI1LjI3NCAyNy44OTk1IDI3Ljg5OTVDMjUuMjc0IDMwLjUyNSAyMS43MTMgMzIg''@;'; put 'put ''MTggMzJaTTI2LjU5IDEyLjFDMjYuOTggMTEuNzEyMyAyNy42MSAxMS43MTIzIDI4IDEyLjFDMjguMTg5MyAxMi4yODc4IDI4LjI5NTggMTIuNTQzNCAyOC4yOTU4IDEyLjgxQzI4LjI5NTggMTMuMDc2NiAyOC4xODkzIDEzLjMzMjIgMjggMTMuNTJMMTUuNDkgMjZMOCAxOC41M0M3LjYxODky''@;'; put 'put ''IDE4LjExODUgNy42NDM1NSAxNy40NzYxIDguMDU1IDE3LjA5NUM4LjQ2NjQ1IDE2LjcxMzkgOS4xMDg5MiAxNi43Mzg1IDkuNDkgMTcuMTVMMTUuNDkgMjMuMTVMMjYuNTkgMTIuMVoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMjkuMzEgNi42OUMyNi4zMSAzLjY5IDIyLjI0IDIgMTggMkM5LjE2''@;'; put 'put ''IDIgMiA5LjE2IDIgMThDMiAyNi44NCA5LjE2IDM0IDE4IDM0QzI2Ljg0IDM0IDM0IDI2Ljg0IDM0IDE4QzM0IDEzLjc2IDMyLjMxIDkuNjkgMjkuMzEgNi42OVpNMjguMTQgMTMuNjRMMTUuNjMgMjYuMTJMMTUuNDkgMjYuMjZMMTUuMzUgMjYuMTJMNy44NSAxOC42NEM3LjM5IDE4LjE1IDcu''@;'; put 'put ''NDIgMTcuMzggNy45MiAxNi45MkM4LjE1IDE2LjcxIDguNDQgMTYuNiA4Ljc1IDE2LjZDOS4wOSAxNi42IDkuNDEgMTYuNzQgOS42NCAxNi45OEwxNS41IDIyLjg0TDI2LjQ2IDExLjkzQzI2LjY5IDExLjcgMjYuOTkgMTEuNTggMjcuMzEgMTEuNThDMjcuNjMgMTEuNTggMjcuOTMgMTEuNyAy''@;'; put 'put ''OC4xNiAxMS45M0MyOC4zOSAxMi4xNSAyOC41MSAxMi40NiAyOC41MSAxMi43OEMyOC41MSAxMy4xIDI4LjM4IDEzLjQxIDI4LjE2IDEzLjYzTDI4LjE0IDEzLjY0WiIvPid9XSxWamU9WyJ3YXJuaW5nLXN0YW5kYXJkIix7b3V0bGluZTonPHBhdGggZD0iTTE4LjAwMDEgMjIuOTkzMkMxOC41''@;'; put 'put ''NTAxIDIyLjk5MzIgMTkuMDAwMSAyMi41NDM0IDE5LjAwMDEgMjEuOTkzNlYxMC45OTc1QzE5LjAwMDEgMTAuNDQ3NyAxOC41NTAxIDkuOTk3ODYgMTguMDAwMSA5Ljk5Nzg2QzE3LjQ1MDEgOS45OTc4NiAxNy4wMDAxIDEwLjQ0NzcgMTcuMDAwMSAxMC45OTc1VjIxLjk5MzZDMTcuMDAwMSAy''@;'; put 'put ''Mi41NDM0IDE3LjQ1MDEgMjIuOTkzMiAxOC4wMDAxIDIyLjk5MzJaTTMzLjU2MDEgMjcuMjExN0wyMC43ODAxIDUuNTc5NDRDMjAuMjAwMSA0LjU4OTc5IDE5LjE2MDEgNCAxOC4wMDAxIDRDMTYuODQwMSA0IDE1LjgwMDEgNC41ODk3OSAxNS4yMjAxIDUuNTc5NDRMMi40NDAxIDI3LjIxMTdD''@;'; put 'put ''MS44NTAxIDI4LjIxMTQgMS44NTAxIDI5LjQwMDkgMi40MzAxIDMwLjQwMDZDMy4wMTAxIDMxLjQwMDIgNC4wNjAxIDMyIDUuMjIwMSAzMkgzMC43NzAxQzMxLjk0MDEgMzIgMzIuOTgwMSAzMS40MDAyIDMzLjU2MDEgMzAuNDAwNkMzNC4xNDAxIDI5LjQwMDkgMzQuMTQwMSAyOC4yMTE0IDMz''@;'; put 'put ''LjU1MDEgMjcuMjExN0gzMy41NjAxWk0zMS44MTAxIDI5LjQwMDlDMzEuNzEwMSAyOS41ODA5IDMxLjQwMDEgMjkuOTkwNyAzMC43ODAxIDI5Ljk5MDdINS4yMzAxQzQuNjEwMSAyOS45OTA3IDQuMzAwMSAyOS41ODA5IDQuMjAwMSAyOS40MDA5QzQuMTAwMSAyOS4yMjEgMy44OTAxIDI4Ljc1''@;'; put 'put ''MTIgNC4yMDAxIDI4LjIzMTNMMTYuOTgwMSA2LjU4OTA4QzE3LjI5MDEgNi4wNjkyNiAxNy44MDAxIDYuMDA5MjggMTguMDAwMSA2LjAwOTI4QzE4LjIwMDEgNi4wMDkyOCAxOC43MTAxIDYuMDY5MjYgMTkuMDIwMSA2LjU4OTA4TDMxLjc5MDEgMjguMjIxM0MzMi4xMDAxIDI4Ljc1MTIgMzEu''@;'; put 'put ''OTAwMSAyOS4yMjEgMzEuNzkwMSAyOS4zOTA5TDMxLjgxMDEgMjkuNDAwOVpNMTguMDEwMSAyNS4wMDI1QzE3LjI4MDEgMjUuMDAyNSAxNi42ODAxIDI1LjYwMjMgMTYuNjgwMSAyNi4zMzJDMTYuNjgwMSAyNy4wNjE4IDE3LjI4MDEgMjcuNjYxNSAxOC4wMTAxIDI3LjY2MTVDMTguNzQwMSAy''@;'; put 'put ''Ny42NjE1IDE5LjM0MDEgMjcuMDYxOCAxOS4zNDAxIDI2LjMzMkMxOS4zNDAxIDI1LjYwMjMgMTguNzQwMSAyNS4wMDI1IDE4LjAxMDEgMjUuMDAyNVoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMzMuNTYwMSAyNy4yMkwyMC43ODAxIDUuNThDMjAuMjAwMSA0LjU5IDE5LjE2MDEgNCAxOC4wMDAx''@;'; put 'put ''IDRDMTYuODQwMSA0IDE1LjgwMDEgNC41OSAxNS4yMjAxIDUuNThMMi40NDAwNiAyNy4yMkMxLjg1MDA2IDI4LjIyIDEuODUwMDYgMjkuNDEgMi40NDAwNiAzMC40MUMzLjAyMDA2IDMxLjQxIDQuMDcwMDYgMzIuMDEgNS4yMzAwNiAzMi4wMUgzMC43ODAxQzMxLjk1MDEgMzIuMDEgMzIuOTkw''@;'; put 'put ''MSAzMS40MSAzMy41NzAxIDMwLjQxQzM0LjE1MDEgMjkuNDEgMzQuMTUwMSAyOC4yMiAzMy41NjAxIDI3LjIyWk0xNi45MDAxIDExQzE2LjkwMDEgMTAuMzkgMTcuMzkwMSA5LjkgMTguMDAwMSA5LjlDMTguNjEwMSA5LjkgMTkuMTAwMSAxMC4zOSAxOS4xMDAxIDExVjIyQzE5LjEwMDEgMjIu''@;'; put 'put ''NjEgMTguNjEwMSAyMy4xIDE4LjAwMDEgMjMuMUMxNy4zOTAxIDIzLjEgMTYuOTAwMSAyMi42MSAxNi45MDAxIDIyVjExWk0xOC4wMDAxIDI3Ljc2QzE3LjIxMDEgMjcuNzYgMTYuNTcwMSAyNy4xMiAxNi41NzAxIDI2LjMzQzE2LjU3MDEgMjUuNTQgMTcuMjEwMSAyNC45IDE4LjAwMDEgMjQu''@;'; put 'put ''OUMxOC43OTAxIDI0LjkgMTkuNDMwMSAyNS41NCAxOS40MzAxIDI2LjMzQzE5LjQzMDEgMjcuMTIgMTguNzkwMSAyNy43NiAxOC4wMDAxIDI3Ljc2WiIvPid9XSxCamU9WyJjaXJjbGUiLHtvdXRsaW5lOic8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0i''@;'; put 'put ''TTQgMThDNCAxMC4yNjggMTAuMjY4IDQgMTggNEMyNS43MzIgNCAzMiAxMC4yNjggMzIgMThDMzIgMjUuNzMyIDI1LjczMiAzMiAxOCAzMkMxMC4yNjggMzIgNCAyNS43MzIgNCAxOFpNNiAxOEM2IDI0LjYyNzQgMTEuMzcyNiAzMCAxOCAzMEMyMS4xODI2IDMwIDI0LjIzNDggMjguNzM1NyAy''@;'; put 'put ''Ni40ODUzIDI2LjQ4NTNDMjguNzM1NyAyNC4yMzQ4IDMwIDIxLjE4MjYgMzAgMThDMzAgMTEuMzcyNiAyNC42Mjc0IDYgMTggNkMxMS4zNzI2IDYgNiAxMS4zNzI2IDYgMThaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4IDRDMTAuMjY4IDQgNCAxMC4yNjggNCAxOEM0IDI1LjczMiAxMC4yNjgg''@;'; put 'put ''MzIgMTggMzJDMjUuNzMyIDMyIDMyIDI1LjczMiAzMiAxOEMzMiAxMC4yNjggMjUuNzMyIDQgMTggNFoiLz4nfV0samplPVsiZG90LWNpcmNsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOCAxMUMxOS4zODQ1IDExIDIwLjczNzkgMTEuNDEwNSAyMS44ODkgMTIuMTc5N0MyMy4wNDAxIDEyLjk0''@;'; put 'put ''ODkgMjMuOTM3NCAxNC4wNDIxIDI0LjQ2NzIgMTUuMzIxMkMyNC45OTcgMTYuNjAwMyAyNS4xMzU2IDE4LjAwNzggMjQuODY1NSAxOS4zNjU2QzI0LjU5NTQgMjAuNzIzNSAyMy45Mjg3IDIxLjk3MDggMjIuOTQ5OCAyMi45NDk4QzIxLjk3MDggMjMuOTI4NyAyMC43MjM1IDI0LjU5NTQgMTku''@;'; put 'put ''MzY1NiAyNC44NjU1QzE4LjAwNzggMjUuMTM1NiAxNi42MDAzIDI0Ljk5NyAxNS4zMjEyIDI0LjQ2NzJDMTQuMDQyMSAyMy45Mzc0IDEyLjk0ODkgMjMuMDQwMSAxMi4xNzk3IDIxLjg4OUMxMS40MTA1IDIwLjczNzkgMTEgMTkuMzg0NSAxMSAxOEMxMSAxNi4xNDM1IDExLjczNzUgMTQuMzYz''@;'; put 'put ''IDEzLjA1MDMgMTMuMDUwM0MxNC4zNjMgMTEuNzM3NSAxNi4xNDM1IDExIDE4IDExWiIvPjxwYXRoIGQ9Ik0xOCAzNEMxNC44MzU1IDM0IDExLjc0MjEgMzMuMDYxNiA5LjExMDg4IDMxLjMwMzVDNi40Nzk3IDI5LjU0NTQgNC40Mjg5NCAyNy4wNDY2IDMuMjE3OTMgMjQuMTIyOUMyLjAwNjkz''@;'; put 'put ''IDIxLjE5OTMgMS42OTAwOCAxNy45ODIzIDIuMzA3NDQgMTQuODc4NkMyLjkyNDgxIDExLjc3NDkgNC40NDg2NiA4LjkyMzk0IDYuNjg2MyA2LjY4NjNDOC45MjM5NCA0LjQ0ODY2IDExLjc3NDkgMi45MjQ4MSAxNC44Nzg2IDIuMzA3NDRDMTcuOTgyMyAxLjY5MDA4IDIxLjE5OTMgMi4wMDY5''@;'; put 'put ''MyAyNC4xMjI5IDMuMjE3OTNDMjcuMDQ2NiA0LjQyODk0IDI5LjU0NTQgNi40Nzk3IDMxLjMwMzUgOS4xMTA4OEMzMy4wNjE2IDExLjc0MjEgMzQgMTQuODM1NSAzNCAxOEMzNCAyMi4yNDM1IDMyLjMxNDMgMjYuMzEzMSAyOS4zMTM3IDI5LjMxMzdDMjYuMzEzMSAzMi4zMTQzIDIyLjI0MzUg''@;'; put 'put ''MzQgMTggMzRaTTE4IDQuMDAwMDFDMTUuMjMxMSA0LjAwMDAxIDEyLjUyNDMgNC44MjEwOSAxMC4yMjIgNi4zNTk0M0M3LjkxOTc0IDcuODk3NzcgNi4xMjUzMiAxMC4wODQzIDUuMDY1NjkgMTIuNjQyNEM0LjAwNjA3IDE1LjIwMDYgMy43Mjg4MiAxOC4wMTU1IDQuMjY5MDEgMjAuNzMxM0M0''@;'; put 'put ''LjgwOTIxIDIzLjQ0NyA2LjE0MjU4IDI1Ljk0MTYgOC4xMDA1MSAyNy44OTk1QzEwLjA1ODQgMjkuODU3NCAxMi41NTMgMzEuMTkwOCAxNS4yNjg3IDMxLjczMUMxNy45ODQ1IDMyLjI3MTIgMjAuNzk5NCAzMS45OTM5IDIzLjM1NzYgMzAuOTM0M0MyNS45MTU3IDI5Ljg3NDcgMjguMTAyMiAy''@;'; put 'put ''OC4wODAzIDI5LjY0MDYgMjUuNzc4QzMxLjE3ODkgMjMuNDc1NyAzMiAyMC43Njg5IDMyIDE4QzMyIDE0LjI4NyAzMC41MjUgMTAuNzI2IDI3Ljg5OTUgOC4xMDA1MUMyNS4yNzQgNS40NzUgMjEuNzEzIDQuMDAwMDEgMTggNC4wMDAwMVoiLz4nfV07ZnVuY3Rpb24gT0soYyxsPVZpKXtyZXR1''@;'; put 'put ''cm4gYz1jPz96amUsZWEoKGEsZCk9PntsZXQgaCxmPSEwO2Euc3Vic2NyaWJlKEZyKGQsdj0+e2NvbnN0IE09bCh2KTsoZnx8IWMoaCxNKSkmJihmPSExLGg9TSxkLm5leHQodikpfSkpfSl9ZnVuY3Rpb24gemplKGMsbCl7cmV0dXJuIGM9PT1sfWNsYXNzIFpqZSBleHRlbmRzIEJ0e2NvbnN0''@;'; put 'put ''cnVjdG9yKGwsYSl7c3VwZXIoKX1zY2hlZHVsZShsLGE9MCl7cmV0dXJuIHRoaXN9fWNvbnN0IEJGPXtzZXRJbnRlcnZhbChjLGwsLi4uYSl7Y29uc3R7ZGVsZWdhdGU6ZH09QkY7cmV0dXJuIGQ/LnNldEludGVydmFsP2Quc2V0SW50ZXJ2YWwoYyxsLC4uLmEpOnNldEludGVydmFsKGMsbCwu''@;'; put 'put ''Li5hKX0sY2xlYXJJbnRlcnZhbChjKXtjb25zdHtkZWxlZ2F0ZTpsfT1CRjtyZXR1cm4obD8uY2xlYXJJbnRlcnZhbHx8Y2xlYXJJbnRlcnZhbCkoYyl9LGRlbGVnYXRlOnZvaWQgMH07Y2xhc3MgUEsgZXh0ZW5kcyBaamV7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLGEpLHRoaXMuc2NoZWR1''@;'; put 'put ''bGVyPWwsdGhpcy53b3JrPWEsdGhpcy5wZW5kaW5nPSExfXNjaGVkdWxlKGwsYT0wKXt2YXIgZDtpZih0aGlzLmNsb3NlZClyZXR1cm4gdGhpczt0aGlzLnN0YXRlPWw7Y29uc3QgaD10aGlzLmlkLGY9dGhpcy5zY2hlZHVsZXI7cmV0dXJuIG51bGwhPWgmJih0aGlzLmlkPXRoaXMucmVjeWNs''@;'; put 'put ''ZUFzeW5jSWQoZixoLGEpKSx0aGlzLnBlbmRpbmc9ITAsdGhpcy5kZWxheT1hLHRoaXMuaWQ9bnVsbCE9PShkPXRoaXMuaWQpJiZ2b2lkIDAhPT1kP2Q6dGhpcy5yZXF1ZXN0QXN5bmNJZChmLHRoaXMuaWQsYSksdGhpc31yZXF1ZXN0QXN5bmNJZChsLGEsZD0wKXtyZXR1cm4gQkYuc2V0SW50''@;'; put 'put ''ZXJ2YWwobC5mbHVzaC5iaW5kKGwsdGhpcyksZCl9cmVjeWNsZUFzeW5jSWQobCxhLGQ9MCl7aWYobnVsbCE9ZCYmdGhpcy5kZWxheT09PWQmJiExPT09dGhpcy5wZW5kaW5nKXJldHVybiBhO251bGwhPWEmJkJGLmNsZWFySW50ZXJ2YWwoYSl9ZXhlY3V0ZShsLGEpe2lmKHRoaXMuY2xvc2Vk''@;'; put 'put ''KXJldHVybiBuZXcgRXJyb3IoImV4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24iKTt0aGlzLnBlbmRpbmc9ITE7Y29uc3QgZD10aGlzLl9leGVjdXRlKGwsYSk7aWYoZClyZXR1cm4gZDshMT09PXRoaXMucGVuZGluZyYmbnVsbCE9dGhpcy5pZCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5''@;'; put 'put ''bmNJZCh0aGlzLnNjaGVkdWxlcix0aGlzLmlkLG51bGwpKX1fZXhlY3V0ZShsLGEpe2xldCBoLGQ9ITE7dHJ5e3RoaXMud29yayhsKX1jYXRjaChmKXtkPSEwLGg9Znx8bmV3IEVycm9yKCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yIil9aWYoZClyZXR1cm4gdGhpcy51bnN1''@;'; put 'put ''YnNjcmliZSgpLGh9dW5zdWJzY3JpYmUoKXtpZighdGhpcy5jbG9zZWQpe2NvbnN0e2lkOmwsc2NoZWR1bGVyOmF9PXRoaXMse2FjdGlvbnM6ZH09YTt0aGlzLndvcms9dGhpcy5zdGF0ZT10aGlzLnNjaGVkdWxlcj1udWxsLHRoaXMucGVuZGluZz0hMSxScihkLHRoaXMpLG51bGwhPWwmJih0''@;'; put 'put ''aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQoYSxsLG51bGwpKSx0aGlzLmRlbGF5PW51bGwsc3VwZXIudW5zdWJzY3JpYmUoKX19fWNvbnN0IEZLPXtub3c6KCk9PihGSy5kZWxlZ2F0ZXx8RGF0ZSkubm93KCksZGVsZWdhdGU6dm9pZCAwfTtjbGFzcyBQVHtjb25zdHJ1Y3RvcihsLGE9UFQu''@;'; put 'put ''bm93KXt0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3I9bCx0aGlzLm5vdz1hfXNjaGVkdWxlKGwsYT0wLGQpe3JldHVybiBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsbCkuc2NoZWR1bGUoZCxhKX19UFQubm93PUZLLm5vdztjbGFzcyBISyBleHRlbmRzIFBUe2NvbnN0cnVjdG9y''@;'; put 'put ''KGwsYT1QVC5ub3cpe3N1cGVyKGwsYSksdGhpcy5hY3Rpb25zPVtdLHRoaXMuX2FjdGl2ZT0hMX1mbHVzaChsKXtjb25zdHthY3Rpb25zOmF9PXRoaXM7aWYodGhpcy5fYWN0aXZlKXJldHVybiB2b2lkIGEucHVzaChsKTtsZXQgZDt0aGlzLl9hY3RpdmU9ITA7ZG97aWYoZD1sLmV4ZWN1dGUo''@;'; put 'put ''bC5zdGF0ZSxsLmRlbGF5KSlicmVha313aGlsZShsPWEuc2hpZnQoKSk7aWYodGhpcy5fYWN0aXZlPSExLGQpe2Zvcig7bD1hLnNoaWZ0KCk7KWwudW5zdWJzY3JpYmUoKTt0aHJvdyBkfX19Y29uc3QgakY9bmV3IEhLKFBLKSxXamU9akY7ZnVuY3Rpb24gXzkoYyxsPWpGKXtyZXR1cm4gZWEo''@;'; put 'put ''KGEsZCk9PntsZXQgaD1udWxsLGY9bnVsbCx2PW51bGw7Y29uc3QgTT0oKT0+e2lmKGgpe2gudW5zdWJzY3JpYmUoKSxoPW51bGw7Y29uc3QgVT1mO2Y9bnVsbCxkLm5leHQoVSl9fTtmdW5jdGlvbiBEKCl7Y29uc3QgVT12K2MsdGU9bC5ub3coKTtpZih0ZTxVKXJldHVybiBoPXRoaXMuc2No''@;'; put 'put ''ZWR1bGUodm9pZCAwLFUtdGUpLHZvaWQgZC5hZGQoaCk7TSgpfWEuc3Vic2NyaWJlKEZyKGQsVT0+e2Y9VSx2PWwubm93KCksaHx8KGg9bC5zY2hlZHVsZShELGMpLGQuYWRkKGgpKX0sKCk9PntNKCksZC5jb21wbGV0ZSgpfSx2b2lkIDAsKCk9PntmPWg9bnVsbH0pKX0pfWNvbnN0IFlqZT1b''@;'; put 'put ''ImFkZExpc3RlbmVyIiwicmVtb3ZlTGlzdGVuZXIiXSxHamU9WyJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciJdLCRqZT1bIm9uIiwib2ZmIl07ZnVuY3Rpb24gVGYoYyxsLGEsZCl7aWYobmkoYSkmJihkPWEsYT12b2lkIDApLGQpcmV0dXJuIFRmKGMsbCxhKS5waXBl''@;'; put 'put ''KHUkKGQpKTtjb25zdFtoLGZdPWZ1bmN0aW9uIHFqZShjKXtyZXR1cm4gbmkoYy5hZGRFdmVudExpc3RlbmVyKSYmbmkoYy5yZW1vdmVFdmVudExpc3RlbmVyKX0oYyk/R2plLm1hcCh2PT5NPT5jW3ZdKGwsTSxhKSk6ZnVuY3Rpb24gS2plKGMpe3JldHVybiBuaShjLmFkZExpc3RlbmVyKSYm''@;'; put 'put ''bmkoYy5yZW1vdmVMaXN0ZW5lcil9KGMpP1lqZS5tYXAodGZlKGMsbCkpOmZ1bmN0aW9uIFhqZShjKXtyZXR1cm4gbmkoYy5vbikmJm5pKGMub2ZmKX0oYyk/JGplLm1hcCh0ZmUoYyxsKSk6W107aWYoIWgmJmwkKGMpKXJldHVybiBzMSh2PT5UZih2LGwsYSkpKFIxKGMpKTtpZighaCl0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGV2ZW50IHRhcmdldCIpO3JldHVybiBuZXcgUmkodj0+e2NvbnN0IE09KC4uLkQpPT52Lm5leHQoMTxELmxlbmd0aD9EOkRbMF0pO3JldHVybiBoKE0pLCgpPT5mKE0pfSl9ZnVuY3Rpb24gdGZlKGMsbCl7cmV0dXJuIGE9PmQ9PmNbYV0obCxkKX1j''@;'; put 'put ''bGFzcyBGVCBleHRlbmRzIHVye2NvbnN0cnVjdG9yKGw9MS8wLGE9MS8wLGQ9Rkspe3N1cGVyKCksdGhpcy5fYnVmZmVyU2l6ZT1sLHRoaXMuX3dpbmRvd1RpbWU9YSx0aGlzLl90aW1lc3RhbXBQcm92aWRlcj1kLHRoaXMuX2J1ZmZlcj1bXSx0aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3c9ITAs''@;'; put 'put ''dGhpcy5faW5maW5pdGVUaW1lV2luZG93PWE9PT0xLzAsdGhpcy5fYnVmZmVyU2l6ZT1NYXRoLm1heCgxLGwpLHRoaXMuX3dpbmRvd1RpbWU9TWF0aC5tYXgoMSxhKX1uZXh0KGwpe2NvbnN0e2lzU3RvcHBlZDphLF9idWZmZXI6ZCxfaW5maW5pdGVUaW1lV2luZG93OmgsX3RpbWVzdGFtcFBy''@;'; put 'put ''b3ZpZGVyOmYsX3dpbmRvd1RpbWU6dn09dGhpczthfHwoZC5wdXNoKGwpLCFoJiZkLnB1c2goZi5ub3coKSt2KSksdGhpcy5fdHJpbUJ1ZmZlcigpLHN1cGVyLm5leHQobCl9X3N1YnNjcmliZShsKXt0aGlzLl90aHJvd0lmQ2xvc2VkKCksdGhpcy5fdHJpbUJ1ZmZlcigpO2NvbnN0IGE9dGhp''@;'; put 'put ''cy5faW5uZXJTdWJzY3JpYmUobCkse19pbmZpbml0ZVRpbWVXaW5kb3c6ZCxfYnVmZmVyOmh9PXRoaXMsZj1oLnNsaWNlKCk7Zm9yKGxldCB2PTA7djxmLmxlbmd0aCYmIWwuY2xvc2VkO3YrPWQ/MToyKWwubmV4dChmW3ZdKTtyZXR1cm4gdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhs''@;'; put 'put ''KSxhfV90cmltQnVmZmVyKCl7Y29uc3R7X2J1ZmZlclNpemU6bCxfdGltZXN0YW1wUHJvdmlkZXI6YSxfYnVmZmVyOmQsX2luZmluaXRlVGltZVdpbmRvdzpofT10aGlzLGY9KGg/MToyKSpsO2lmKGw8MS8wJiZmPGQubGVuZ3RoJiZkLnNwbGljZSgwLGQubGVuZ3RoLWYpLCFoKXtjb25zdCB2''@;'; put 'put ''PWEubm93KCk7bGV0IE09MDtmb3IobGV0IEQ9MTtEPGQubGVuZ3RoJiZkW0RdPD12O0QrPTIpTT1EO00mJmQuc3BsaWNlKDAsTSsxKX19fWZ1bmN0aW9uIE5LKGMsbCwuLi5hKXtpZighMD09PWwpcmV0dXJuIHZvaWQgYygpO2lmKCExPT09bClyZXR1cm47Y29uc3QgZD1uZXcgdG4oe25leHQ6''@;'; put 'put ''KCk9PntkLnVuc3Vic2NyaWJlKCksYygpfX0pO3JldHVybiBSMShsKC4uLmEpKS5zdWJzY3JpYmUoZCl9ZnVuY3Rpb24gbmZlKGMsbCxhKXtsZXQgZCxoPSExO3JldHVybiBjJiYib2JqZWN0Ij09dHlwZW9mIGM/KHtidWZmZXJTaXplOmQ9MS8wLHdpbmRvd1RpbWU6bD0xLzAscmVmQ291bnQ6''@;'; put 'put ''aD0hMSxzY2hlZHVsZXI6YX09Yyk6ZD1jPz8xLzAsZnVuY3Rpb24gSmplKGM9e30pe2NvbnN0e2Nvbm5lY3RvcjpsPSgpPT5uZXcgdXIscmVzZXRPbkVycm9yOmE9ITAscmVzZXRPbkNvbXBsZXRlOmQ9ITAscmVzZXRPblJlZkNvdW50WmVybzpoPSEwfT1jO3JldHVybiBmPT57bGV0IHYsTSxE''@;'; put 'put ''LFU9MCx0ZT0hMSxvZT0hMTtjb25zdCB2ZT0oKT0+e00/LnVuc3Vic2NyaWJlKCksTT12b2lkIDB9LHdlPSgpPT57dmUoKSx2PUQ9dm9pZCAwLHRlPW9lPSExfSxGZT0oKT0+e2NvbnN0IFdlPXY7d2UoKSxXZT8udW5zdWJzY3JpYmUoKX07cmV0dXJuIGVhKChXZSxudCk9PntVKyssIW9lJiYh''@;'; put 'put ''dGUmJnZlKCk7Y29uc3QgZHQ9RD1EPz9sKCk7bnQuYWRkKCgpPT57VS0tLDA9PT1VJiYhb2UmJiF0ZSYmKE09TksoRmUsaCkpfSksZHQuc3Vic2NyaWJlKG50KSwhdiYmVT4wJiYodj1uZXcgdG4oe25leHQ6bXQ9PmR0Lm5leHQobXQpLGVycm9yOm10PT57b2U9ITAsdmUoKSxNPU5LKHdlLGEs''@;'; put 'put ''bXQpLGR0LmVycm9yKG10KX0sY29tcGxldGU6KCk9Pnt0ZT0hMCx2ZSgpLE09Tksod2UsZCksZHQuY29tcGxldGUoKX19KSxSMShXZSkuc3Vic2NyaWJlKHYpKX0pKGYpfX0oe2Nvbm5lY3RvcjooKT0+bmV3IEZUKGQsbCxhKSxyZXNldE9uRXJyb3I6ITAscmVzZXRPbkNvbXBsZXRlOiExLHJl''@;'; put 'put ''c2V0T25SZWZDb3VudFplcm86aH0pfWZ1bmN0aW9uIEhUKC4uLmMpe2NvbnN0IGw9cUUoYyksYT1mdW5jdGlvbiBvSWUoYyxsKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGMkKGMpP2MucG9wKCk6bH0oYywxLzApLGQ9YztyZXR1cm4gZC5sZW5ndGg/MT09PWQubGVuZ3RoP1IxKGRbMF0pOk9f''@;'; put 'put ''KGEpKGUwKGQsbCkpOmwyfXZhciBCbz1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlN0YXRlPTBdPSJTdGF0ZSIsY1tjLlRyYW5zaXRpb249MV09IlRyYW5zaXRpb24iLGNbYy5TZXF1ZW5jZT0yXT0iU2VxdWVuY2UiLGNbYy5Hcm91cD0zXT0iR3JvdXAiLGNbYy5BbmltYXRlPTRdPSJBbmltYXRl''@;'; put 'put ''IixjW2MuS2V5ZnJhbWVzPTVdPSJLZXlmcmFtZXMiLGNbYy5TdHlsZT02XT0iU3R5bGUiLGNbYy5UcmlnZ2VyPTddPSJUcmlnZ2VyIixjW2MuUmVmZXJlbmNlPThdPSJSZWZlcmVuY2UiLGNbYy5BbmltYXRlQ2hpbGQ9OV09IkFuaW1hdGVDaGlsZCIsY1tjLkFuaW1hdGVSZWY9MTBdPSJBbmlt''@;'; put 'put ''YXRlUmVmIixjW2MuUXVlcnk9MTFdPSJRdWVyeSIsY1tjLlN0YWdnZXI9MTJdPSJTdGFnZ2VyIixjfShCb3x8e30pO2NvbnN0IGU1PSIqIjtmdW5jdGlvbiBwMihjLGwpe3JldHVybnt0eXBlOkJvLlRyaWdnZXIsbmFtZTpjLGRlZmluaXRpb25zOmwsb3B0aW9uczp7fX19ZnVuY3Rpb24gejAo''@;'; put 'put ''YyxsPW51bGwpe3JldHVybnt0eXBlOkJvLkFuaW1hdGUsc3R5bGVzOmwsdGltaW5nczpjfX1mdW5jdGlvbiB3cyhjKXtyZXR1cm57dHlwZTpCby5TdHlsZSxzdHlsZXM6YyxvZmZzZXQ6bnVsbH19ZnVuY3Rpb24gekYoYyxsLGEpe3JldHVybnt0eXBlOkJvLlN0YXRlLG5hbWU6YyxzdHlsZXM6''@;'; put 'put ''bCxvcHRpb25zOmF9fWZ1bmN0aW9uIGV6ZShjKXtyZXR1cm57dHlwZTpCby5LZXlmcmFtZXMsc3RlcHM6Y319ZnVuY3Rpb24gdnUoYyxsLGE9bnVsbCl7cmV0dXJue3R5cGU6Qm8uVHJhbnNpdGlvbixleHByOmMsYW5pbWF0aW9uOmwsb3B0aW9uczphfX1jbGFzcyBOVHtfb25Eb25lRm5zPVtd''@;'; put 'put ''O19vblN0YXJ0Rm5zPVtdO19vbkRlc3Ryb3lGbnM9W107X29yaWdpbmFsT25Eb25lRm5zPVtdO19vcmlnaW5hbE9uU3RhcnRGbnM9W107X3N0YXJ0ZWQ9ITE7X2Rlc3Ryb3llZD0hMTtfZmluaXNoZWQ9ITE7X3Bvc2l0aW9uPTA7cGFyZW50UGxheWVyPW51bGw7dG90YWxUaW1lO2NvbnN0cnVj''@;'; put 'put ''dG9yKGw9MCxhPTApe3RoaXMudG90YWxUaW1lPWwrYX1fb25GaW5pc2goKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25Eb25lRm5zPVtdKX1vblN0YXJ0KGwpe3RoaXMuX29yaWdpbmFsT25TdGFydEZu''@;'; put 'put ''cy5wdXNoKGwpLHRoaXMuX29uU3RhcnRGbnMucHVzaChsKX1vbkRvbmUobCl7dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnMucHVzaChsKSx0aGlzLl9vbkRvbmVGbnMucHVzaChsKX1vbkRlc3Ryb3kobCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2gobCl9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlz''@;'; put 'put ''Ll9zdGFydGVkfWluaXQoKXt9cGxheSgpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fb25TdGFydCgpLHRoaXMudHJpZ2dlck1pY3JvdGFzaygpKSx0aGlzLl9zdGFydGVkPSEwfXRyaWdnZXJNaWNyb3Rhc2soKXtxdWV1ZU1pY3JvdGFzaygoKT0+dGhpcy5fb25GaW5pc2goKSl9X29uU3Rh''@;'; put 'put ''cnQoKXt0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdfXBhdXNlKCl7fXJlc3RhcnQoKXt9ZmluaXNoKCl7dGhpcy5fb25GaW5pc2goKX1kZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuaGFzU3RhcnRl''@;'; put 'put ''ZCgpfHx0aGlzLl9vblN0YXJ0KCksdGhpcy5maW5pc2goKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9cmVzZXQoKXt0aGlzLl9zdGFydGVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX29uU3RhcnRGbnM9dGhpcy5fb3JpZ2lu''@;'; put 'put ''YWxPblN0YXJ0Rm5zLHRoaXMuX29uRG9uZUZucz10aGlzLl9vcmlnaW5hbE9uRG9uZUZuc31zZXRQb3NpdGlvbihsKXt0aGlzLl9wb3NpdGlvbj10aGlzLnRvdGFsVGltZT9sKnRoaXMudG90YWxUaW1lOjF9Z2V0UG9zaXRpb24oKXtyZXR1cm4gdGhpcy50b3RhbFRpbWU/dGhpcy5fcG9zaXRp''@;'; put 'put ''b24vdGhpcy50b3RhbFRpbWU6MX10cmlnZ2VyQ2FsbGJhY2sobCl7Y29uc3QgYT0ic3RhcnQiPT1sP3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2EuZm9yRWFjaChkPT5kKCkpLGEubGVuZ3RoPTB9fWNsYXNzIHJmZXtfb25Eb25lRm5zPVtdO19vblN0YXJ0Rm5zPVtdO19maW5p''@;'; put 'put ''c2hlZD0hMTtfc3RhcnRlZD0hMTtfZGVzdHJveWVkPSExO19vbkRlc3Ryb3lGbnM9W107cGFyZW50UGxheWVyPW51bGw7dG90YWxUaW1lPTA7cGxheWVycztjb25zdHJ1Y3RvcihsKXt0aGlzLnBsYXllcnM9bDtsZXQgYT0wLGQ9MCxoPTA7Y29uc3QgZj10aGlzLnBsYXllcnMubGVuZ3RoOzA9''@;'; put 'put ''PWY/cXVldWVNaWNyb3Rhc2soKCk9PnRoaXMuX29uRmluaXNoKCkpOnRoaXMucGxheWVycy5mb3JFYWNoKHY9Pnt2Lm9uRG9uZSgoKT0+eysrYT09ZiYmdGhpcy5fb25GaW5pc2goKX0pLHYub25EZXN0cm95KCgpPT57KytkPT1mJiZ0aGlzLl9vbkRlc3Ryb3koKX0pLHYub25TdGFydCgoKT0+''@;'; put 'put ''eysraD09ZiYmdGhpcy5fb25TdGFydCgpfSl9KSx0aGlzLnRvdGFsVGltZT10aGlzLnBsYXllcnMucmVkdWNlKCh2LE0pPT5NYXRoLm1heCh2LE0udG90YWxUaW1lKSwwKX1fb25GaW5pc2goKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JF''@;'; put 'put ''YWNoKGw9PmwoKSksdGhpcy5fb25Eb25lRm5zPVtdKX1pbml0KCl7dGhpcy5wbGF5ZXJzLmZvckVhY2gobD0+bC5pbml0KCkpfW9uU3RhcnQobCl7dGhpcy5fb25TdGFydEZucy5wdXNoKGwpfV9vblN0YXJ0KCl7dGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9zdGFydGVkPSEwLHRoaXMuX29u''@;'; put 'put ''U3RhcnRGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uU3RhcnRGbnM9W10pfW9uRG9uZShsKXt0aGlzLl9vbkRvbmVGbnMucHVzaChsKX1vbkRlc3Ryb3kobCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2gobCl9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfXBsYXkoKXt0aGlz''@;'; put 'put ''LnBhcmVudFBsYXllcnx8dGhpcy5pbml0KCksdGhpcy5fb25TdGFydCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGw9PmwucGxheSgpKX1wYXVzZSgpe3RoaXMucGxheWVycy5mb3JFYWNoKGw9PmwucGF1c2UoKSl9cmVzdGFydCgpe3RoaXMucGxheWVycy5mb3JFYWNoKGw9PmwucmVzdGFydCgp''@;'; put 'put ''KX1maW5pc2goKXt0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGw9PmwuZmluaXNoKCkpfWRlc3Ryb3koKXt0aGlzLl9vbkRlc3Ryb3koKX1fb25EZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuX29uRmluaXNoKCksdGhpcy5w''@;'; put 'put ''bGF5ZXJzLmZvckVhY2gobD0+bC5kZXN0cm95KCkpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX1yZXNldCgpe3RoaXMucGxheWVycy5mb3JFYWNoKGw9PmwucmVzZXQoKSksdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVk''@;'; put 'put ''PSExLHRoaXMuX3N0YXJ0ZWQ9ITF9c2V0UG9zaXRpb24obCl7Y29uc3QgYT1sKnRoaXMudG90YWxUaW1lO3RoaXMucGxheWVycy5mb3JFYWNoKGQ9Pntjb25zdCBoPWQudG90YWxUaW1lP01hdGgubWluKDEsYS9kLnRvdGFsVGltZSk6MTtkLnNldFBvc2l0aW9uKGgpfSl9Z2V0UG9zaXRpb24o''@;'; put 'put ''KXtjb25zdCBsPXRoaXMucGxheWVycy5yZWR1Y2UoKGEsZCk9Pm51bGw9PT1hfHxkLnRvdGFsVGltZT5hLnRvdGFsVGltZT9kOmEsbnVsbCk7cmV0dXJuIG51bGwhPWw/bC5nZXRQb3NpdGlvbigpOjB9YmVmb3JlRGVzdHJveSgpe3RoaXMucGxheWVycy5mb3JFYWNoKGw9PntsLmJlZm9yZURl''@;'; put 'put ''c3Ryb3kmJmwuYmVmb3JlRGVzdHJveSgpfSl9dHJpZ2dlckNhbGxiYWNrKGwpe2NvbnN0IGE9InN0YXJ0Ij09bD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZuczthLmZvckVhY2goZD0+ZCgpKSxhLmxlbmd0aD0wfX1sZXQgQks7dHJ5e0JLPXR5cGVvZiBJbnRsPCJ1IiYmSW50bC52''@;'; put 'put ''OEJyZWFrSXRlcmF0b3J9Y2F0Y2h7Qks9ITF9bGV0IGpLLFZUPSgoKT0+e2NsYXNzIGN7X3BsYXRmb3JtSWQ9Sm4odWwpO2lzQnJvd3Nlcj10aGlzLl9wbGF0Zm9ybUlkP3dsKHRoaXMuX3BsYXRmb3JtSWQpOiJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQmJiEhZG9jdW1lbnQ7RURHRT10aGlz''@;'; put 'put ''LmlzQnJvd3NlciYmLyhlZGdlKS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7VFJJREVOVD10aGlzLmlzQnJvd3NlciYmLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtCTElOSz10aGlzLmlzQnJvd3NlciYmISghd2luZG93LmNocm9tZSYmIUJLKSYmdHlw''@;'; put 'put ''ZW9mIENTUzwidSImJiF0aGlzLkVER0UmJiF0aGlzLlRSSURFTlQ7V0VCS0lUPXRoaXMuaXNCcm93c2VyJiYvQXBwbGVXZWJLaXQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhdGhpcy5CTElOSyYmIXRoaXMuRURHRSYmIXRoaXMuVFJJREVOVDtJT1M9dGhpcy5pc0Jyb3dzZXImJi9p''@;'; put 'put ''UGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhKCJNU1N0cmVhbSJpbiB3aW5kb3cpO0ZJUkVGT1g9dGhpcy5pc0Jyb3dzZXImJi8oZmlyZWZveHxtaW5lZmllbGQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtBTkRST0lEPXRoaXMuaXNCcm93c2VyJiYv''@;'; put 'put ''YW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF0aGlzLlRSSURFTlQ7U0FGQVJJPXRoaXMuaXNCcm93c2VyJiYvc2FmYXJpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmdGhpcy5XRUJLSVQ7Y29uc3RydWN0b3IoKXt9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihk''@;'; put 'put ''KXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHpLKGMpe2lmKGZ1bmN0aW9uIHR6ZSgpe2lmKG51bGw9PWpLKXtjb25zdCBjPXR5cGVvZiBk''@;'; put 'put ''b2N1bWVudDwidSI/ZG9jdW1lbnQuaGVhZDpudWxsO2pLPSEoIWN8fCFjLmNyZWF0ZVNoYWRvd1Jvb3QmJiFjLmF0dGFjaFNoYWRvdyl9cmV0dXJuIGpLfSgpKXtjb25zdCBsPWMuZ2V0Um9vdE5vZGU/Yy5nZXRSb290Tm9kZSgpOm51bGw7aWYodHlwZW9mIFNoYWRvd1Jvb3Q8InUiJiZTaGFk''@;'; put 'put ''b3dSb290JiZsIGluc3RhbmNlb2YgU2hhZG93Um9vdClyZXR1cm4gbH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBVRihjKXtyZXR1cm4gYy5jb21wb3NlZFBhdGg/Yy5jb21wb3NlZFBhdGgoKVswXTpjLnRhcmdldH1jb25zdCBaRj1uZXcgV2Vha01hcDtsZXQgaWZlPSgoKT0+e2NsYXNzIGN7X2Fw''@;'; put 'put ''cFJlZjtfaW5qZWN0b3I9Sm4oWW8pO19lbnZpcm9ubWVudEluamVjdG9yPUpuKHFsKTtsb2FkKGEpe2NvbnN0IGQ9dGhpcy5fYXBwUmVmPXRoaXMuX2FwcFJlZnx8dGhpcy5faW5qZWN0b3IuZ2V0KGdkKTtsZXQgaD1aRi5nZXQoZCk7aHx8KGg9e2xvYWRlcnM6bmV3IFNldCxyZWZzOltdfSxa''@;'; put 'put ''Ri5zZXQoZCxoKSxkLm9uRGVzdHJveSgoKT0+e1pGLmdldChkKT8ucmVmcy5mb3JFYWNoKGY9PmYuZGVzdHJveSgpKSxaRi5kZWxldGUoZCl9KSksaC5sb2FkZXJzLmhhcyhhKXx8KGgubG9hZGVycy5hZGQoYSksaC5yZWZzLnB1c2goQ1AoYSx7ZW52aXJvbm1lbnRJbmplY3Rvcjp0aGlzLl9l''@;'; put 'put ''bnZpcm9ubWVudEluamVjdG9yfSkpKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gY30pKCkscnplPSgoKT0+e2Ns''@;'; put 'put ''YXNzIGN7c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1Y21wPWFyKHt0eXBlOmMsc2VsZWN0b3JzOltbIm5nLWNvbXBvbmVudCJdXSxleHBvcnRBczpbImNka1Zpc3VhbGx5SGlkZGVuIl0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6''@;'; put 'put ''ZnVuY3Rpb24oZCxoKXt9LHN0eWxlczpbIi5jZGstdmlzdWFsbHktaGlkZGVue2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5v''@;'; put 'put ''d3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7bGVmdDowfVtkaXI9cnRsXSAuY2RrLXZpc3VhbGx5LWhpZGRlbntsZWZ0OmF1dG87cmlnaHQ6MH1cbiJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pfXJldHVybiBj''@;'; put 'put ''fSkoKSxpemU9KCgpPT57Y2xhc3MgY3tfcGxhdGZvcm09Sm4oVlQpO2NvbnN0cnVjdG9yKCl7fWlzRGlzYWJsZWQoYSl7cmV0dXJuIGEuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfWlzVmlzaWJsZShhKXtyZXR1cm4gZnVuY3Rpb24gb3plKGMpe3JldHVybiEhKGMub2Zmc2V0V2lkdGh8fGMu''@;'; put 'put ''b2Zmc2V0SGVpZ2h0fHwiZnVuY3Rpb24iPT10eXBlb2YgYy5nZXRDbGllbnRSZWN0cyYmYy5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCl9KGEpJiYidmlzaWJsZSI9PT1nZXRDb21wdXRlZFN0eWxlKGEpLnZpc2liaWxpdHl9aXNUYWJiYWJsZShhKXtpZighdGhpcy5fcGxhdGZvcm0uaXNCcm93''@;'; put 'put ''c2VyKXJldHVybiExO2NvbnN0IGQ9ZnVuY3Rpb24gYXplKGMpe3RyeXtyZXR1cm4gYy5mcmFtZUVsZW1lbnR9Y2F0Y2h7cmV0dXJuIG51bGx9fShmdW5jdGlvbiBwemUoYyl7cmV0dXJuIGMub3duZXJEb2N1bWVudCYmYy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9KGEpKTtp''@;'; put 'put ''ZihkJiYoLTE9PT1vZmUoZCl8fCF0aGlzLmlzVmlzaWJsZShkKSkpcmV0dXJuITE7bGV0IGg9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLGY9b2ZlKGEpO3JldHVybiBhLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIik/LTEhPT1mOiEoImlmcmFtZSI9PT1ofHwib2JqZWN0Ij09PWh8''@;'; put 'put ''fHRoaXMuX3BsYXRmb3JtLldFQktJVCYmdGhpcy5fcGxhdGZvcm0uSU9TJiYhZnVuY3Rpb24gaHplKGMpe2xldCBsPWMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxhPSJpbnB1dCI9PT1sJiZjLnR5cGU7cmV0dXJuInRleHQiPT09YXx8InBhc3N3b3JkIj09PWF8fCJzZWxlY3QiPT09bHx8InRl''@;'; put 'put ''eHRhcmVhIj09PWx9KGEpKSYmKCJhdWRpbyI9PT1oPyEhYS5oYXNBdHRyaWJ1dGUoImNvbnRyb2xzIikmJi0xIT09ZjoidmlkZW8iPT09aD8tMSE9PWYmJihudWxsIT09Znx8dGhpcy5fcGxhdGZvcm0uRklSRUZPWHx8YS5oYXNBdHRyaWJ1dGUoImNvbnRyb2xzIikpOmEudGFiSW5kZXg+PTAp''@;'; put 'put ''fWlzRm9jdXNhYmxlKGEsZCl7cmV0dXJuIGZ1bmN0aW9uIGZ6ZShjKXtyZXR1cm4hZnVuY3Rpb24gbHplKGMpe3JldHVybiBmdW5jdGlvbiB1emUoYyl7cmV0dXJuImlucHV0Ij09Yy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfShjKSYmImhpZGRlbiI9PWMudHlwZX0oYykmJihmdW5jdGlvbiBz''@;'; put 'put ''emUoYyl7bGV0IGw9Yy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT1sfHwic2VsZWN0Ij09PWx8fCJidXR0b24iPT09bHx8InRleHRhcmVhIj09PWx9KGMpfHxmdW5jdGlvbiBjemUoYyl7cmV0dXJuIGZ1bmN0aW9uIGR6ZShjKXtyZXR1cm4iYSI9PWMubm9kZU5hbWUu''@;'; put 'put ''dG9Mb3dlckNhc2UoKX0oYykmJmMuaGFzQXR0cmlidXRlKCJocmVmIil9KGMpfHxjLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil8fGFmZShjKSl9KGEpJiYhdGhpcy5pc0Rpc2FibGVkKGEpJiYoZD8uaWdub3JlVmlzaWJpbGl0eXx8dGhpcy5pc1Zpc2libGUoYSkpfXN0YXRpYyBc''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKTtmdW5jdGlvbiBhZmUoYyl7aWYoIWMuaGFzQXR0cmlidXRlKCJ0YWJpbmRl''@;'; put 'put ''eCIpfHx2b2lkIDA9PT1jLnRhYkluZGV4KXJldHVybiExO2xldCBsPWMuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpO3JldHVybiEoIWx8fGlzTmFOKHBhcnNlSW50KGwsMTApKSl9ZnVuY3Rpb24gb2ZlKGMpe2lmKCFhZmUoYykpcmV0dXJuIG51bGw7Y29uc3QgbD1wYXJzZUludChjLmdldEF0''@;'; put 'put ''dHJpYnV0ZSgidGFiaW5kZXgiKXx8IiIsMTApO3JldHVybiBpc05hTihsKT8tMTpsfWNsYXNzIGd6ZXtfZWxlbWVudDtfY2hlY2tlcjtfbmdab25lO19kb2N1bWVudDtfaW5qZWN0b3I7X3N0YXJ0QW5jaG9yO19lbmRBbmNob3I7X2hhc0F0dGFjaGVkPSExO3N0YXJ0QW5jaG9yTGlzdGVuZXI9''@;'; put 'put ''KCk9PnRoaXMuZm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KCk7ZW5kQW5jaG9yTGlzdGVuZXI9KCk9PnRoaXMuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCgpO2dldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9c2V0IGVuYWJsZWQobCl7dGhpcy5fZW5hYmxlZD1sLHRoaXMuX3N0''@;'; put 'put ''YXJ0QW5jaG9yJiZ0aGlzLl9lbmRBbmNob3ImJih0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleChsLHRoaXMuX3N0YXJ0QW5jaG9yKSx0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleChsLHRoaXMuX2VuZEFuY2hvcikpfV9lbmFibGVkPSEwO2NvbnN0cnVjdG9yKGwsYSxkLGgsZj0hMSx2KXt0''@;'; put 'put ''aGlzLl9lbGVtZW50PWwsdGhpcy5fY2hlY2tlcj1hLHRoaXMuX25nWm9uZT1kLHRoaXMuX2RvY3VtZW50PWgsdGhpcy5faW5qZWN0b3I9dixmfHx0aGlzLmF0dGFjaEFuY2hvcnMoKX1kZXN0cm95KCl7Y29uc3QgbD10aGlzLl9zdGFydEFuY2hvcixhPXRoaXMuX2VuZEFuY2hvcjtsJiYobC5y''@;'; put 'put ''ZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5zdGFydEFuY2hvckxpc3RlbmVyKSxsLnJlbW92ZSgpKSxhJiYoYS5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5lbmRBbmNob3JMaXN0ZW5lciksYS5yZW1vdmUoKSksdGhpcy5fc3RhcnRBbmNob3I9dGhpcy5fZW5kQW5j''@;'; put 'put ''aG9yPW51bGwsdGhpcy5faGFzQXR0YWNoZWQ9ITF9YXR0YWNoQW5jaG9ycygpe3JldHVybiEhdGhpcy5faGFzQXR0YWNoZWR8fCh0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9zdGFydEFuY2hvcnx8KHRoaXMuX3N0YXJ0QW5jaG9yPXRoaXMuX2NyZWF0ZUFuY2hv''@;'; put 'put ''cigpLHRoaXMuX3N0YXJ0QW5jaG9yLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLnN0YXJ0QW5jaG9yTGlzdGVuZXIpKSx0aGlzLl9lbmRBbmNob3J8fCh0aGlzLl9lbmRBbmNob3I9dGhpcy5fY3JlYXRlQW5jaG9yKCksdGhpcy5fZW5kQW5jaG9yLmFkZEV2ZW50TGlzdGVuZXIoImZv''@;'; put 'put ''Y3VzIix0aGlzLmVuZEFuY2hvckxpc3RlbmVyKSl9KSx0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUmJih0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuX3N0YXJ0QW5jaG9yLHRoaXMuX2VsZW1lbnQpLHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZv''@;'; put 'put ''cmUodGhpcy5fZW5kQW5jaG9yLHRoaXMuX2VsZW1lbnQubmV4dFNpYmxpbmcpLHRoaXMuX2hhc0F0dGFjaGVkPSEwKSx0aGlzLl9oYXNBdHRhY2hlZCl9Zm9jdXNJbml0aWFsRWxlbWVudFdoZW5SZWFkeShsKXtyZXR1cm4gbmV3IFByb21pc2UoYT0+e3RoaXMuX2V4ZWN1dGVPblN0YWJsZSgo''@;'; put 'put ''KT0+YSh0aGlzLmZvY3VzSW5pdGlhbEVsZW1lbnQobCkpKX0pfWZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnRXaGVuUmVhZHkobCl7cmV0dXJuIG5ldyBQcm9taXNlKGE9Pnt0aGlzLl9leGVjdXRlT25TdGFibGUoKCk9PmEodGhpcy5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KGwpKSl9KX1m''@;'; put 'put ''b2N1c0xhc3RUYWJiYWJsZUVsZW1lbnRXaGVuUmVhZHkobCl7cmV0dXJuIG5ldyBQcm9taXNlKGE9Pnt0aGlzLl9leGVjdXRlT25TdGFibGUoKCk9PmEodGhpcy5mb2N1c0xhc3RUYWJiYWJsZUVsZW1lbnQobCkpKX0pfV9nZXRSZWdpb25Cb3VuZGFyeShsKXtjb25zdCBhPXRoaXMuX2VsZW1l''@;'; put 'put ''bnQucXVlcnlTZWxlY3RvckFsbChgW2Nkay1mb2N1cy1yZWdpb24tJHtsfV0sIFtjZGtGb2N1c1JlZ2lvbiR7bH1dLCBbY2RrLWZvY3VzLSR7bH1dYCk7cmV0dXJuInN0YXJ0Ij09bD9hLmxlbmd0aD9hWzBdOnRoaXMuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50KHRoaXMuX2VsZW1lbnQpOmEu''@;'; put 'put ''bGVuZ3RoP2FbYS5sZW5ndGgtMV06dGhpcy5fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudCh0aGlzLl9lbGVtZW50KX1mb2N1c0luaXRpYWxFbGVtZW50KGwpe2NvbnN0IGE9dGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKCJbY2RrLWZvY3VzLWluaXRpYWxdLCBbY2RrRm9jdXNJbml0aWFsXSIp''@;'; put 'put ''O2lmKGEpe2lmKCF0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKGEpKXtjb25zdCBkPXRoaXMuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50KGEpO3JldHVybiBkPy5mb2N1cyhsKSwhIWR9cmV0dXJuIGEuZm9jdXMobCksITB9cmV0dXJuIHRoaXMuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudChs''@;'; put 'put ''KX1mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KGwpe2NvbnN0IGE9dGhpcy5fZ2V0UmVnaW9uQm91bmRhcnkoInN0YXJ0Iik7cmV0dXJuIGEmJmEuZm9jdXMobCksISFhfWZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudChsKXtjb25zdCBhPXRoaXMuX2dldFJlZ2lvbkJvdW5kYXJ5KCJlbmQiKTty''@;'; put 'put ''ZXR1cm4gYSYmYS5mb2N1cyhsKSwhIWF9aGFzQXR0YWNoZWQoKXtyZXR1cm4gdGhpcy5faGFzQXR0YWNoZWR9X2dldEZpcnN0VGFiYmFibGVFbGVtZW50KGwpe2lmKHRoaXMuX2NoZWNrZXIuaXNGb2N1c2FibGUobCkmJnRoaXMuX2NoZWNrZXIuaXNUYWJiYWJsZShsKSlyZXR1cm4gbDtjb25z''@;'; put 'put ''dCBhPWwuY2hpbGRyZW47Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspe2NvbnN0IGg9YVtkXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudChhW2RdKTpudWxsO2lmKGgpcmV0dXJuIGh9cmV0dXJuIG51bGx9X2dl''@;'; put 'put ''dExhc3RUYWJiYWJsZUVsZW1lbnQobCl7aWYodGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZShsKSYmdGhpcy5fY2hlY2tlci5pc1RhYmJhYmxlKGwpKXJldHVybiBsO2NvbnN0IGE9bC5jaGlsZHJlbjtmb3IobGV0IGQ9YS5sZW5ndGgtMTtkPj0wO2QtLSl7Y29uc3QgaD1hW2RdLm5vZGVUeXBl''@;'; put 'put ''PT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFP3RoaXMuX2dldExhc3RUYWJiYWJsZUVsZW1lbnQoYVtkXSk6bnVsbDtpZihoKXJldHVybiBofXJldHVybiBudWxsfV9jcmVhdGVBbmNob3IoKXtjb25zdCBsPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0''@;'; put 'put ''aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleCh0aGlzLl9lbmFibGVkLGwpLGwuY2xhc3NMaXN0LmFkZCgiY2RrLXZpc3VhbGx5LWhpZGRlbiIpLGwuY2xhc3NMaXN0LmFkZCgiY2RrLWZvY3VzLXRyYXAtYW5jaG9yIiksbC5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLGx9X3Rv''@;'; put 'put ''Z2dsZUFuY2hvclRhYkluZGV4KGwsYSl7bD9hLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIik6YS5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4Iil9dG9nZ2xlQW5jaG9ycyhsKXt0aGlzLl9zdGFydEFuY2hvciYmdGhpcy5fZW5kQW5jaG9yJiYodGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5k''@;'; put 'put ''ZXgobCx0aGlzLl9zdGFydEFuY2hvciksdGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgobCx0aGlzLl9lbmRBbmNob3IpKX1fZXhlY3V0ZU9uU3RhYmxlKGwpe3RoaXMuX2luamVjdG9yP01tKGwse2luamVjdG9yOnRoaXMuX2luamVjdG9yfSk6c2V0VGltZW91dChsKX19bGV0IFVLPSgoKT0+''@;'; put 'put ''e2NsYXNzIGN7X2NoZWNrZXI9Sm4oaXplKTtfbmdab25lPUpuKFhhKTtfZG9jdW1lbnQ9Sm4oR3MpO19pbmplY3Rvcj1KbihZbyk7Y29uc3RydWN0b3IoKXtKbihpZmUpLmxvYWQocnplKX1jcmVhdGUoYSxkPSExKXtyZXR1cm4gbmV3IGd6ZShhLHRoaXMuX2NoZWNrZXIsdGhpcy5fbmdab25l''@;'; put 'put ''LHRoaXMuX2RvY3VtZW50LGQsdGhpcy5faW5qZWN0b3IpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKSxz''@;'; put 'put ''ZmU9KCgpPT57Y2xhc3MgY3tfZWxlbWVudFJlZj1KbihuYSk7X2ZvY3VzVHJhcEZhY3Rvcnk9Sm4oVUspO2ZvY3VzVHJhcDtfcHJldmlvdXNseUZvY3VzZWRFbGVtZW50PW51bGw7Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5mb2N1c1RyYXA/LmVuYWJsZWR8fCExfXNldCBlbmFibGVkKGEp''@;'; put 'put ''e3RoaXMuZm9jdXNUcmFwJiYodGhpcy5mb2N1c1RyYXAuZW5hYmxlZD1hKX1hdXRvQ2FwdHVyZTtjb25zdHJ1Y3Rvcigpe0puKFZUKS5pc0Jyb3dzZXImJih0aGlzLmZvY3VzVHJhcD10aGlzLl9mb2N1c1RyYXBGYWN0b3J5LmNyZWF0ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQs''@;'; put 'put ''ITApKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9jdXNUcmFwPy5kZXN0cm95KCksdGhpcy5fcHJldmlvdXNseUZvY3VzZWRFbGVtZW50JiYodGhpcy5fcHJldmlvdXNseUZvY3VzZWRFbGVtZW50LmZvY3VzKCksdGhpcy5fcHJldmlvdXNseUZvY3VzZWRFbGVtZW50PW51bGwpfW5nQWZ0ZXJDb250''@;'; put 'put ''ZW50SW5pdCgpe3RoaXMuZm9jdXNUcmFwPy5hdHRhY2hBbmNob3JzKCksdGhpcy5hdXRvQ2FwdHVyZSYmdGhpcy5fY2FwdHVyZUZvY3VzKCl9bmdEb0NoZWNrKCl7dGhpcy5mb2N1c1RyYXAmJiF0aGlzLmZvY3VzVHJhcC5oYXNBdHRhY2hlZCgpJiZ0aGlzLmZvY3VzVHJhcC5hdHRhY2hBbmNo''@;'; put 'put ''b3JzKCl9bmdPbkNoYW5nZXMoYSl7Y29uc3QgZD1hLmF1dG9DYXB0dXJlO2QmJiFkLmZpcnN0Q2hhbmdlJiZ0aGlzLmF1dG9DYXB0dXJlJiZ0aGlzLmZvY3VzVHJhcD8uaGFzQXR0YWNoZWQoKSYmdGhpcy5fY2FwdHVyZUZvY3VzKCl9X2NhcHR1cmVGb2N1cygpe3RoaXMuX3ByZXZpb3VzbHlG''@;'; put 'put ''b2N1c2VkRWxlbWVudD1mdW5jdGlvbiBuemUoKXtsZXQgYz10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudD9kb2N1bWVudC5hY3RpdmVFbGVtZW50Om51bGw7Zm9yKDtjJiZjLnNoYWRvd1Jvb3Q7KXtjb25zdCBsPWMuc2hhZG93Um9vdC5hY3RpdmVFbGVtZW50O2lmKGw9PT1jKWJyZWFr''@;'; put 'put ''O2M9bH1yZXR1cm4gY30oKSx0aGlzLmZvY3VzVHJhcD8uZm9jdXNJbml0aWFsRWxlbWVudFdoZW5SZWFkeSgpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NWRpcj1Zcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtUcmFwRm9j''@;'; put 'put ''dXMiLCIiXV0saW5wdXRzOntlbmFibGVkOlsyLCJjZGtUcmFwRm9jdXMiLCJlbmFibGVkIixJMV0sYXV0b0NhcHR1cmU6WzIsImNka1RyYXBGb2N1c0F1dG9DYXB0dXJlIiwiYXV0b0NhcHR1cmUiLEkxXX0sZXhwb3J0QXM6WyJjZGtUcmFwRm9jdXMiXSxmZWF0dXJlczpbV29dfSl9cmV0dXJu''@;'; put 'put ''IGN9KSgpO2Z1bmN0aW9uIGxmZShjPTAsbCxhPVdqZSl7bGV0IGQ9LTE7cmV0dXJuIG51bGwhPWwmJihDMWUobCk/YT1sOmQ9bCksbmV3IFJpKGg9PntsZXQgZj1mdW5jdGlvbiB5emUoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBEYXRlJiYhaXNOYU4oYyl9KGMpPytjLWEubm93KCk6YztmPDAm''@;'; put 'put ''JihmPTApO2xldCB2PTA7cmV0dXJuIGEuc2NoZWR1bGUoZnVuY3Rpb24oKXtoLmNsb3NlZHx8KGgubmV4dCh2KyspLDA8PWQ/dGhpcy5zY2hlZHVsZSh2b2lkIDAsZCk6aC5jb21wbGV0ZSgpKX0sZil9KX1jb25zdCBCVD17c2NoZWR1bGUoYyl7bGV0IGw9cmVxdWVzdEFuaW1hdGlvbkZyYW1l''@;'; put 'put ''LGE9Y2FuY2VsQW5pbWF0aW9uRnJhbWU7Y29uc3R7ZGVsZWdhdGU6ZH09QlQ7ZCYmKGw9ZC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUsYT1kLmNhbmNlbEFuaW1hdGlvbkZyYW1lKTtjb25zdCBoPWwoZj0+e2E9dm9pZCAwLGMoZil9KTtyZXR1cm4gbmV3IEJ0KCgpPT5hPy4oaCkpfSxyZXF1ZXN0''@;'; put 'put ''QW5pbWF0aW9uRnJhbWUoLi4uYyl7Y29uc3R7ZGVsZWdhdGU6bH09QlQ7cmV0dXJuKGw/LnJlcXVlc3RBbmltYXRpb25GcmFtZXx8cmVxdWVzdEFuaW1hdGlvbkZyYW1lKSguLi5jKX0sY2FuY2VsQW5pbWF0aW9uRnJhbWUoLi4uYyl7Y29uc3R7ZGVsZWdhdGU6bH09QlQ7cmV0dXJuKGw/LmNh''@;'; put 'put ''bmNlbEFuaW1hdGlvbkZyYW1lfHxjYW5jZWxBbmltYXRpb25GcmFtZSkoLi4uYyl9LGRlbGVnYXRlOnZvaWQgMH0sY2ZlPW5ldyBjbGFzcyB3emUgZXh0ZW5kcyBIS3tmbHVzaChsKXtsZXQgYTt0aGlzLl9hY3RpdmU9ITAsbD9hPWwuaWQ6KGE9dGhpcy5fc2NoZWR1bGVkLHRoaXMuX3NjaGVk''@;'; put 'put ''dWxlZD12b2lkIDApO2NvbnN0e2FjdGlvbnM6ZH09dGhpcztsZXQgaDtsPWx8fGQuc2hpZnQoKTtkb3tpZihoPWwuZXhlY3V0ZShsLnN0YXRlLGwuZGVsYXkpKWJyZWFrfXdoaWxlKChsPWRbMF0pJiZsLmlkPT09YSYmZC5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEsaCl7Zm9yKDsobD1k''@;'; put 'put ''WzBdKSYmbC5pZD09PWEmJmQuc2hpZnQoKTspbC51bnN1YnNjcmliZSgpO3Rocm93IGh9fX0oY2xhc3MgX3plIGV4dGVuZHMgUEt7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLGEpLHRoaXMuc2NoZWR1bGVyPWwsdGhpcy53b3JrPWF9cmVxdWVzdEFzeW5jSWQobCxhLGQ9MCl7cmV0dXJuIG51''@;'; put 'put ''bGwhPT1kJiZkPjA/c3VwZXIucmVxdWVzdEFzeW5jSWQobCxhLGQpOihsLmFjdGlvbnMucHVzaCh0aGlzKSxsLl9zY2hlZHVsZWR8fChsLl9zY2hlZHVsZWQ9QlQucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT5sLmZsdXNoKHZvaWQgMCkpKSl9cmVjeWNsZUFzeW5jSWQobCxhLGQ9MCl7dmFy''@;'; put 'put ''IGg7aWYobnVsbCE9ZD9kPjA6dGhpcy5kZWxheT4wKXJldHVybiBzdXBlci5yZWN5Y2xlQXN5bmNJZChsLGEsZCk7Y29uc3R7YWN0aW9uczpmfT1sO251bGwhPWEmJmE9PT1sLl9zY2hlZHVsZWQmJihudWxsPT09KGg9ZltmLmxlbmd0aC0xXSl8fHZvaWQgMD09PWg/dm9pZCAwOmguaWQpIT09''@;'; put 'put ''YSYmKEJULmNhbmNlbEFuaW1hdGlvbkZyYW1lKGEpLGwuX3NjaGVkdWxlZD12b2lkIDApfX0pO2Z1bmN0aW9uIHc5KGMsbD0wKXtyZXR1cm4gZnVuY3Rpb24gTXplKGMpe3JldHVybiFpc05hTihwYXJzZUZsb2F0KGMpKSYmIWlzTmFOKE51bWJlcihjKSl9KGMpP051bWJlcihjKToyPT09YXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aD9sOjB9ZnVuY3Rpb24gczYoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBuYT9jLm5hdGl2ZUVsZW1lbnQ6Y31mdW5jdGlvbiBDOShjLGwsYSxkLGgpe2NvbnN0IGY9cGFyc2VJbnQoZlAubWFqb3IpLHY9cGFyc2VJbnQoZlAubWlub3IpO3JldHVybiBmPjE5fHwxOT09PWYm''@;'; put 'put ''JnY+MHx8MD09PWYmJjA9PT12P2MubGlzdGVuKGwsYSxkLGgpOihsLmFkZEV2ZW50TGlzdGVuZXIoYSxkLGgpLCgpPT57bC5yZW1vdmVFdmVudExpc3RlbmVyKGEsZCxoKX0pfWxldCBaSyx4emU9MTtjb25zdCBXRj17fTtmdW5jdGlvbiB1ZmUoYyl7cmV0dXJuIGMgaW4gV0YmJihkZWxldGUg''@;'; put 'put ''V0ZbY10sITApfWNvbnN0IEV6ZT17c2V0SW1tZWRpYXRlKGMpe2NvbnN0IGw9eHplKys7cmV0dXJuIFdGW2xdPSEwLFpLfHwoWks9UHJvbWlzZS5yZXNvbHZlKCkpLFpLLnRoZW4oKCk9PnVmZShsKSYmYygpKSxsfSxjbGVhckltbWVkaWF0ZShjKXt1ZmUoYyl9fSx7c2V0SW1tZWRpYXRlOlR6''@;'; put 'put ''ZSxjbGVhckltbWVkaWF0ZTpBemV9PUV6ZSxZRj17c2V0SW1tZWRpYXRlKC4uLmMpe2NvbnN0e2RlbGVnYXRlOmx9PVlGO3JldHVybihsPy5zZXRJbW1lZGlhdGV8fFR6ZSkoLi4uYyl9LGNsZWFySW1tZWRpYXRlKGMpe2NvbnN0e2RlbGVnYXRlOmx9PVlGO3JldHVybihsPy5jbGVhckltbWVk''@;'; put 'put ''aWF0ZXx8QXplKShjKX0sZGVsZWdhdGU6dm9pZCAwfSxJemU9bmV3IGNsYXNzIER6ZSBleHRlbmRzIEhLe2ZsdXNoKGwpe3RoaXMuX2FjdGl2ZT0hMDtjb25zdCBhPXRoaXMuX3NjaGVkdWxlZDt0aGlzLl9zY2hlZHVsZWQ9dm9pZCAwO2NvbnN0e2FjdGlvbnM6ZH09dGhpcztsZXQgaDtsPWx8''@;'; put 'put ''fGQuc2hpZnQoKTtkb3tpZihoPWwuZXhlY3V0ZShsLnN0YXRlLGwuZGVsYXkpKWJyZWFrfXdoaWxlKChsPWRbMF0pJiZsLmlkPT09YSYmZC5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEsaCl7Zm9yKDsobD1kWzBdKSYmbC5pZD09PWEmJmQuc2hpZnQoKTspbC51bnN1YnNjcmliZSgpO3Ro''@;'; put 'put ''cm93IGh9fX0oY2xhc3Mga3plIGV4dGVuZHMgUEt7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLGEpLHRoaXMuc2NoZWR1bGVyPWwsdGhpcy53b3JrPWF9cmVxdWVzdEFzeW5jSWQobCxhLGQ9MCl7cmV0dXJuIG51bGwhPT1kJiZkPjA/c3VwZXIucmVxdWVzdEFzeW5jSWQobCxhLGQpOihsLmFj''@;'; put 'put ''dGlvbnMucHVzaCh0aGlzKSxsLl9zY2hlZHVsZWR8fChsLl9zY2hlZHVsZWQ9WUYuc2V0SW1tZWRpYXRlKGwuZmx1c2guYmluZChsLHZvaWQgMCkpKSl9cmVjeWNsZUFzeW5jSWQobCxhLGQ9MCl7dmFyIGg7aWYobnVsbCE9ZD9kPjA6dGhpcy5kZWxheT4wKXJldHVybiBzdXBlci5yZWN5Y2xl''@;'; put 'put ''QXN5bmNJZChsLGEsZCk7Y29uc3R7YWN0aW9uczpmfT1sO251bGwhPWEmJihudWxsPT09KGg9ZltmLmxlbmd0aC0xXSl8fHZvaWQgMD09PWg/dm9pZCAwOmguaWQpIT09YSYmKFlGLmNsZWFySW1tZWRpYXRlKGEpLGwuX3NjaGVkdWxlZD09PWEmJihsLl9zY2hlZHVsZWQ9dm9pZCAwKSl9fSk7''@;'; put 'put ''ZnVuY3Rpb24gV0soYyxsPWpGKXtyZXR1cm4gZnVuY3Rpb24gUnplKGMpe3JldHVybiBlYSgobCxhKT0+e2xldCBkPSExLGg9bnVsbCxmPW51bGwsdj0hMTtjb25zdCBNPSgpPT57aWYoZj8udW5zdWJzY3JpYmUoKSxmPW51bGwsZCl7ZD0hMTtjb25zdCBVPWg7aD1udWxsLGEubmV4dChVKX12''@;'; put 'put ''JiZhLmNvbXBsZXRlKCl9LEQ9KCk9PntmPW51bGwsdiYmYS5jb21wbGV0ZSgpfTtsLnN1YnNjcmliZShGcihhLFU9PntkPSEwLGg9VSxmfHxSMShjKFUpKS5zdWJzY3JpYmUoZj1GcihhLE0sRCkpfSwoKT0+e3Y9ITAsKCFkfHwhZnx8Zi5jbG9zZWQpJiZhLmNvbXBsZXRlKCl9KSl9KX0oKCk9''@;'; put 'put ''PmxmZShjLGwpKX1jb25zdCBPemU9bmV3IGpuKCJjZGstZGlyLWRvYyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24gUHplKCl7cmV0dXJuIEpuKEdzKX19KSxGemU9L14oYXJ8Y2tifGR2fGhlfGl3fGZhfG5xb3xwc3xzZHx1Z3x1cnx5aXwuKlstX10oQWRsbXxBcmFifEhl''@;'; put 'put ''YnJ8Tmtvb3xSb2hnfFRoYWEpKSg/IS4qWy1fXShMYXRufEN5cmwpKCR8LXxfKSkoJHwtfF8pL2k7bGV0IHJ3PSgoKT0+e2NsYXNzIGN7dmFsdWU9Imx0ciI7Y2hhbmdlPW5ldyBYcjtjb25zdHJ1Y3Rvcigpe2NvbnN0IGE9Sm4oT3plLHtvcHRpb25hbDohMH0pO2EmJih0aGlzLnZhbHVlPWZ1''@;'; put 'put ''bmN0aW9uIEh6ZShjKXtjb25zdCBsPWM/LnRvTG93ZXJDYXNlKCl8fCIiO3JldHVybiJhdXRvIj09PWwmJnR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3I/Lmxhbmd1YWdlP0Z6ZS50ZXN0KG5hdmlnYXRvci5sYW5ndWFnZSk/InJ0bCI6Imx0ciI6InJ0bCI9PT1sPyJydGwiOiJsdHIi''@;'; put 'put ''fSgoYS5ib2R5P2EuYm9keS5kaXI6bnVsbCl8fChhLmRvY3VtZW50RWxlbWVudD9hLmRvY3VtZW50RWxlbWVudC5kaXI6bnVsbCl8fCJsdHIiKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmNoYW5nZS5jb21wbGV0ZSgpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxj''@;'; put 'put ''KX07c3RhdGljIFx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKTt2YXIgdjQ9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5OT1JNQUw9MF09Ik5PUk1BTCIsY1tjLk5FR0FURUQ9MV09Ik5FR0FURUQiLGNbYy5J''@;'; put 'put ''TlZFUlRFRD0yXT0iSU5WRVJURUQiLGN9KHY0fHx7fSk7bGV0IEdGLFM5O2Z1bmN0aW9uIGpUKCl7aWYoIm9iamVjdCIhPXR5cGVvZiBkb2N1bWVudHx8IWRvY3VtZW50KXJldHVybiB2NC5OT1JNQUw7aWYobnVsbD09R0Ype2NvbnN0IGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iiks''@;'; put 'put ''bD1jLnN0eWxlO2MuZGlyPSJydGwiLGwud2lkdGg9IjFweCIsbC5vdmVyZmxvdz0iYXV0byIsbC52aXNpYmlsaXR5PSJoaWRkZW4iLGwucG9pbnRlckV2ZW50cz0ibm9uZSIsbC5wb3NpdGlvbj0iYWJzb2x1dGUiO2NvbnN0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksZD1hLnN0''@;'; put 'put ''eWxlO2Qud2lkdGg9IjJweCIsZC5oZWlnaHQ9IjFweCIsYy5hcHBlbmRDaGlsZChhKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGMpLEdGPXY0Lk5PUk1BTCwwPT09Yy5zY3JvbGxMZWZ0JiYoYy5zY3JvbGxMZWZ0PTEsR0Y9MD09PWMuc2Nyb2xsTGVmdD92NC5ORUdBVEVEOnY0LklOVkVS''@;'; put 'put ''VEVEKSxjLnJlbW92ZSgpfXJldHVybiBHRn1jbGFzcyBWemV7fWNsYXNzIGp6ZSBleHRlbmRzIFZ6ZXtfZGF0YTtjb25zdHJ1Y3RvcihsKXtzdXBlcigpLHRoaXMuX2RhdGE9bH1jb25uZWN0KCl7cmV0dXJuIFhFKHRoaXMuX2RhdGEpP3RoaXMuX2RhdGE6X28odGhpcy5fZGF0YSl9ZGlzY29u''@;'; put 'put ''bmVjdCgpe319dmFyIHpUPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuUkVQTEFDRUQ9MF09IlJFUExBQ0VEIixjW2MuSU5TRVJURUQ9MV09IklOU0VSVEVEIixjW2MuTU9WRUQ9Ml09Ik1PVkVEIixjW2MuUkVNT1ZFRD0zXT0iUkVNT1ZFRCIsY30oelR8fHt9KTtjb25zdCBZSz1uZXcgam4oIl9W''@;'; put 'put ''aWV3UmVwZWF0ZXIiKTtjbGFzcyBkZmV7dmlld0NhY2hlU2l6ZT0yMDtfdmlld0NhY2hlPVtdO2FwcGx5Q2hhbmdlcyhsLGEsZCxoLGYpe2wuZm9yRWFjaE9wZXJhdGlvbigodixNLEQpPT57bGV0IFUsdGU7bnVsbD09di5wcmV2aW91c0luZGV4PyhVPXRoaXMuX2luc2VydFZpZXcoKCk9PmQo''@;'; put 'put ''dixNLEQpLEQsYSxoKHYpKSx0ZT1VP3pULklOU0VSVEVEOnpULlJFUExBQ0VEKTpudWxsPT1EPyh0aGlzLl9kZXRhY2hBbmRDYWNoZVZpZXcoTSxhKSx0ZT16VC5SRU1PVkVEKTooVT10aGlzLl9tb3ZlVmlldyhNLEQsYSxoKHYpKSx0ZT16VC5NT1ZFRCksZiYmZih7Y29udGV4dDpVPy5jb250''@;'; put 'put ''ZXh0LG9wZXJhdGlvbjp0ZSxyZWNvcmQ6dn0pfSl9ZGV0YWNoKCl7Zm9yKGNvbnN0IGwgb2YgdGhpcy5fdmlld0NhY2hlKWwuZGVzdHJveSgpO3RoaXMuX3ZpZXdDYWNoZT1bXX1faW5zZXJ0VmlldyhsLGEsZCxoKXtjb25zdCBmPXRoaXMuX2luc2VydFZpZXdGcm9tQ2FjaGUoYSxkKTtpZihm''@;'; put 'put ''KXJldHVybiB2b2lkKGYuY29udGV4dC4kaW1wbGljaXQ9aCk7Y29uc3Qgdj1sKCk7cmV0dXJuIGQuY3JlYXRlRW1iZWRkZWRWaWV3KHYudGVtcGxhdGVSZWYsdi5jb250ZXh0LHYuaW5kZXgpfV9kZXRhY2hBbmRDYWNoZVZpZXcobCxhKXtjb25zdCBkPWEuZGV0YWNoKGwpO3RoaXMuX21heWJl''@;'; put 'put ''Q2FjaGVWaWV3KGQsYSl9X21vdmVWaWV3KGwsYSxkLGgpe2NvbnN0IGY9ZC5nZXQobCk7cmV0dXJuIGQubW92ZShmLGEpLGYuY29udGV4dC4kaW1wbGljaXQ9aCxmfV9tYXliZUNhY2hlVmlldyhsLGEpe2lmKHRoaXMuX3ZpZXdDYWNoZS5sZW5ndGg8dGhpcy52aWV3Q2FjaGVTaXplKXRoaXMu''@;'; put 'put ''X3ZpZXdDYWNoZS5wdXNoKGwpO2Vsc2V7Y29uc3QgZD1hLmluZGV4T2YobCk7LTE9PT1kP2wuZGVzdHJveSgpOmEucmVtb3ZlKGQpfX1faW5zZXJ0Vmlld0Zyb21DYWNoZShsLGEpe2NvbnN0IGQ9dGhpcy5fdmlld0NhY2hlLnBvcCgpO3JldHVybiBkJiZhLmluc2VydChkLGwpLGR8fG51bGx9''@;'; put 'put ''fWNvbnN0IHp6ZT1bImNvbnRlbnRXcmFwcGVyIl0sVXplPVsiKiJdLGhmZT1uZXcgam4oIlZJUlRVQUxfU0NST0xMX1NUUkFURUdZIik7Y2xhc3MgWnple19zY3JvbGxlZEluZGV4Q2hhbmdlPW5ldyB1cjtzY3JvbGxlZEluZGV4Q2hhbmdlPXRoaXMuX3Njcm9sbGVkSW5kZXhDaGFuZ2UucGlw''@;'; put 'put ''ZShPSygpKTtfdmlld3BvcnQ9bnVsbDtfaXRlbVNpemU7X21pbkJ1ZmZlclB4O19tYXhCdWZmZXJQeDtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5faXRlbVNpemU9bCx0aGlzLl9taW5CdWZmZXJQeD1hLHRoaXMuX21heEJ1ZmZlclB4PWR9YXR0YWNoKGwpe3RoaXMuX3ZpZXdwb3J0PWwsdGhp''@;'; put 'put ''cy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1kZXRhY2goKXt0aGlzLl9zY3JvbGxlZEluZGV4Q2hhbmdlLmNvbXBsZXRlKCksdGhpcy5fdmlld3BvcnQ9bnVsbH11cGRhdGVJdGVtQW5kQnVmZmVyU2l6ZShsLGEsZCl7dGhpcy5faXRlbVNp''@;'; put 'put ''emU9bCx0aGlzLl9taW5CdWZmZXJQeD1hLHRoaXMuX21heEJ1ZmZlclB4PWQsdGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkNvbnRlbnRTY3JvbGxlZCgpe3RoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkRhdGFMZW5ndGhD''@;'; put 'put ''aGFuZ2VkKCl7dGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkNvbnRlbnRSZW5kZXJlZCgpe31vblJlbmRlcmVkT2Zmc2V0Q2hhbmdlZCgpe31zY3JvbGxUb0luZGV4KGwsYSl7dGhpcy5fdmlld3BvcnQmJnRoaXMuX3ZpZXdwb3J0''@;'; put 'put ''LnNjcm9sbFRvT2Zmc2V0KGwqdGhpcy5faXRlbVNpemUsYSl9X3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKXt0aGlzLl92aWV3cG9ydCYmdGhpcy5fdmlld3BvcnQuc2V0VG90YWxDb250ZW50U2l6ZSh0aGlzLl92aWV3cG9ydC5nZXREYXRhTGVuZ3RoKCkqdGhpcy5faXRlbVNpemUpfV91cGRh''@;'; put 'put ''dGVSZW5kZXJlZFJhbmdlKCl7aWYoIXRoaXMuX3ZpZXdwb3J0KXJldHVybjtjb25zdCBsPXRoaXMuX3ZpZXdwb3J0LmdldFJlbmRlcmVkUmFuZ2UoKSxhPXtzdGFydDpsLnN0YXJ0LGVuZDpsLmVuZH0sZD10aGlzLl92aWV3cG9ydC5nZXRWaWV3cG9ydFNpemUoKSxoPXRoaXMuX3ZpZXdwb3J0''@;'; put 'put ''LmdldERhdGFMZW5ndGgoKTtsZXQgZj10aGlzLl92aWV3cG9ydC5tZWFzdXJlU2Nyb2xsT2Zmc2V0KCksdj10aGlzLl9pdGVtU2l6ZT4wP2YvdGhpcy5faXRlbVNpemU6MDtpZihhLmVuZD5oKXtjb25zdCBEPU1hdGguY2VpbChkL3RoaXMuX2l0ZW1TaXplKSxVPU1hdGgubWF4KDAsTWF0aC5t''@;'; put 'put ''aW4odixoLUQpKTt2IT1VJiYodj1VLGY9VSp0aGlzLl9pdGVtU2l6ZSxhLnN0YXJ0PU1hdGguZmxvb3IodikpLGEuZW5kPU1hdGgubWF4KDAsTWF0aC5taW4oaCxhLnN0YXJ0K0QpKX1jb25zdCBNPWYtYS5zdGFydCp0aGlzLl9pdGVtU2l6ZTtpZihNPHRoaXMuX21pbkJ1ZmZlclB4JiYwIT1h''@;'; put 'put ''LnN0YXJ0KXtjb25zdCBEPU1hdGguY2VpbCgodGhpcy5fbWF4QnVmZmVyUHgtTSkvdGhpcy5faXRlbVNpemUpO2Euc3RhcnQ9TWF0aC5tYXgoMCxhLnN0YXJ0LUQpLGEuZW5kPU1hdGgubWluKGgsTWF0aC5jZWlsKHYrKGQrdGhpcy5fbWluQnVmZmVyUHgpL3RoaXMuX2l0ZW1TaXplKSl9ZWxz''@;'; put 'put ''ZXtjb25zdCBEPWEuZW5kKnRoaXMuX2l0ZW1TaXplLShmK2QpO2lmKEQ8dGhpcy5fbWluQnVmZmVyUHgmJmEuZW5kIT1oKXtjb25zdCBVPU1hdGguY2VpbCgodGhpcy5fbWF4QnVmZmVyUHgtRCkvdGhpcy5faXRlbVNpemUpO1U+MCYmKGEuZW5kPU1hdGgubWluKGgsYS5lbmQrVSksYS5zdGFy''@;'; put 'put ''dD1NYXRoLm1heCgwLE1hdGguZmxvb3Iodi10aGlzLl9taW5CdWZmZXJQeC90aGlzLl9pdGVtU2l6ZSkpKX19dGhpcy5fdmlld3BvcnQuc2V0UmVuZGVyZWRSYW5nZShhKSx0aGlzLl92aWV3cG9ydC5zZXRSZW5kZXJlZENvbnRlbnRPZmZzZXQodGhpcy5faXRlbVNpemUqYS5zdGFydCksdGhp''@;'; put 'put ''cy5fc2Nyb2xsZWRJbmRleENoYW5nZS5uZXh0KE1hdGguZmxvb3IodikpfX1sZXQgJEY9KCgpPT57Y2xhc3MgY3tfbmdab25lPUpuKFhhKTtfcGxhdGZvcm09Sm4oVlQpO19yZW5kZXJlcj1KbihlYykuY3JlYXRlUmVuZGVyZXIobnVsbCxudWxsKTtfY2xlYW51cEdsb2JhbExpc3RlbmVyO2Nv''@;'; put 'put ''bnN0cnVjdG9yKCl7fV9zY3JvbGxlZD1uZXcgdXI7X3Njcm9sbGVkQ291bnQ9MDtzY3JvbGxDb250YWluZXJzPW5ldyBNYXA7cmVnaXN0ZXIoYSl7dGhpcy5zY3JvbGxDb250YWluZXJzLmhhcyhhKXx8dGhpcy5zY3JvbGxDb250YWluZXJzLnNldChhLGEuZWxlbWVudFNjcm9sbGVkKCkuc3Vi''@;'; put 'put ''c2NyaWJlKCgpPT50aGlzLl9zY3JvbGxlZC5uZXh0KGEpKSl9ZGVyZWdpc3RlcihhKXtjb25zdCBkPXRoaXMuc2Nyb2xsQ29udGFpbmVycy5nZXQoYSk7ZCYmKGQudW5zdWJzY3JpYmUoKSx0aGlzLnNjcm9sbENvbnRhaW5lcnMuZGVsZXRlKGEpKX1zY3JvbGxlZChhPTIwKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fcGxhdGZvcm0uaXNCcm93c2VyP25ldyBSaShkPT57dGhpcy5fY2xlYW51cEdsb2JhbExpc3RlbmVyfHwodGhpcy5fY2xlYW51cEdsb2JhbExpc3RlbmVyPXRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+dGhpcy5fcmVuZGVyZXIubGlzdGVuKCJkb2N1bWVudCIsInNjcm9s''@;'; put 'put ''bCIsKCk9PnRoaXMuX3Njcm9sbGVkLm5leHQoKSkpKTtjb25zdCBoPWE+MD90aGlzLl9zY3JvbGxlZC5waXBlKFdLKGEpKS5zdWJzY3JpYmUoZCk6dGhpcy5fc2Nyb2xsZWQuc3Vic2NyaWJlKGQpO3JldHVybiB0aGlzLl9zY3JvbGxlZENvdW50KyssKCk9PntoLnVuc3Vic2NyaWJlKCksdGhp''@;'; put 'put ''cy5fc2Nyb2xsZWRDb3VudC0tLHRoaXMuX3Njcm9sbGVkQ291bnR8fCh0aGlzLl9jbGVhbnVwR2xvYmFsTGlzdGVuZXI/LigpLHRoaXMuX2NsZWFudXBHbG9iYWxMaXN0ZW5lcj12b2lkIDApfX0pOl9vKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9jbGVhbnVwR2xvYmFsTGlzdGVuZXI/LigpLHRo''@;'; put 'put ''aXMuX2NsZWFudXBHbG9iYWxMaXN0ZW5lcj12b2lkIDAsdGhpcy5zY3JvbGxDb250YWluZXJzLmZvckVhY2goKGEsZCk9PnRoaXMuZGVyZWdpc3RlcihkKSksdGhpcy5fc2Nyb2xsZWQuY29tcGxldGUoKX1hbmNlc3RvclNjcm9sbGVkKGEsZCl7Y29uc3QgaD10aGlzLmdldEFuY2VzdG9yU2Ny''@;'; put 'put ''b2xsQ29udGFpbmVycyhhKTtyZXR1cm4gdGhpcy5zY3JvbGxlZChkKS5waXBlKG9jKGY9PiFmfHxoLmluZGV4T2YoZik+LTEpKX1nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnMoYSl7Y29uc3QgZD1bXTtyZXR1cm4gdGhpcy5zY3JvbGxDb250YWluZXJzLmZvckVhY2goKGgsZik9Pnt0aGlz''@;'; put 'put ''Ll9zY3JvbGxhYmxlQ29udGFpbnNFbGVtZW50KGYsYSkmJmQucHVzaChmKX0pLGR9X3Njcm9sbGFibGVDb250YWluc0VsZW1lbnQoYSxkKXtsZXQgaD1zNihkKSxmPWEuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQ7ZG97aWYoaD09ZilyZXR1cm4hMH13aGlsZShoPWgucGFyZW50RWxl''@;'; put 'put ''bWVudCk7cmV0dXJuITF9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpLGZmZT0oKCk9PntjbGFzcyBje2Vs''@;'; put 'put ''ZW1lbnRSZWY9Sm4obmEpO3Njcm9sbERpc3BhdGNoZXI9Sm4oJEYpO25nWm9uZT1KbihYYSk7ZGlyPUpuKHJ3LHtvcHRpb25hbDohMH0pO19zY3JvbGxFbGVtZW50PXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O19kZXN0cm95ZWQ9bmV3IHVyO19yZW5kZXJlcj1KbihObyk7X2NsZWFu''@;'; put 'put ''dXBTY3JvbGw7X2VsZW1lbnRTY3JvbGxlZD1uZXcgdXI7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt0aGlzLl9jbGVhbnVwU2Nyb2xsPXRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT50aGlzLl9yZW5kZXJlci5saXN0ZW4odGhpcy5fc2Nyb2xsRWxlbWVudCwic2Nyb2xsIixh''@;'; put 'put ''PT50aGlzLl9lbGVtZW50U2Nyb2xsZWQubmV4dChhKSkpLHRoaXMuc2Nyb2xsRGlzcGF0Y2hlci5yZWdpc3Rlcih0aGlzKX1uZ09uRGVzdHJveSgpe3RoaXMuX2NsZWFudXBTY3JvbGw/LigpLHRoaXMuX2VsZW1lbnRTY3JvbGxlZC5jb21wbGV0ZSgpLHRoaXMuc2Nyb2xsRGlzcGF0Y2hlci5k''@;'; put 'put ''ZXJlZ2lzdGVyKHRoaXMpLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCl9ZWxlbWVudFNjcm9sbGVkKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRTY3JvbGxlZH1nZXRFbGVtZW50UmVmKCl7cmV0dXJuIHRoaXMuZWxlbWVudFJlZn1zY3JvbGxUbyhhKXtj''@;'; put 'put ''b25zdCBkPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGg9dGhpcy5kaXImJiJydGwiPT10aGlzLmRpci52YWx1ZTtudWxsPT1hLmxlZnQmJihhLmxlZnQ9aD9hLmVuZDphLnN0YXJ0KSxudWxsPT1hLnJpZ2h0JiYoYS5yaWdodD1oP2Euc3RhcnQ6YS5lbmQpLG51bGwhPWEuYm90dG9t''@;'; put 'put ''JiYoYS50b3A9ZC5zY3JvbGxIZWlnaHQtZC5jbGllbnRIZWlnaHQtYS5ib3R0b20pLGgmJmpUKCkhPXY0Lk5PUk1BTD8obnVsbCE9YS5sZWZ0JiYoYS5yaWdodD1kLnNjcm9sbFdpZHRoLWQuY2xpZW50V2lkdGgtYS5sZWZ0KSxqVCgpPT12NC5JTlZFUlRFRD9hLmxlZnQ9YS5yaWdodDpqVCgp''@;'; put 'put ''PT12NC5ORUdBVEVEJiYoYS5sZWZ0PWEucmlnaHQ/LWEucmlnaHQ6YS5yaWdodCkpOm51bGwhPWEucmlnaHQmJihhLmxlZnQ9ZC5zY3JvbGxXaWR0aC1kLmNsaWVudFdpZHRoLWEucmlnaHQpLHRoaXMuX2FwcGx5U2Nyb2xsVG9PcHRpb25zKGEpfV9hcHBseVNjcm9sbFRvT3B0aW9ucyhhKXtj''@;'; put 'put ''b25zdCBkPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50OyFmdW5jdGlvbiBOemUoKXtpZihudWxsPT1TOSl7aWYoIm9iamVjdCIhPXR5cGVvZiBkb2N1bWVudHx8IWRvY3VtZW50fHwiZnVuY3Rpb24iIT10eXBlb2YgRWxlbWVudHx8IUVsZW1lbnQpcmV0dXJuIFM5PSExLFM5O2lmKCJz''@;'; put 'put ''Y3JvbGxCZWhhdmlvciJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUpUzk9ITA7ZWxzZXtjb25zdCBjPUVsZW1lbnQucHJvdG90eXBlLnNjcm9sbFRvO1M5PSEhYyYmIS9ce1xzKlxbbmF0aXZlIGNvZGVcXVxzKlx9Ly50ZXN0KGMudG9TdHJpbmcoKSl9fXJldHVybiBTOX0oKT8o''@;'; put 'put ''bnVsbCE9YS50b3AmJihkLnNjcm9sbFRvcD1hLnRvcCksbnVsbCE9YS5sZWZ0JiYoZC5zY3JvbGxMZWZ0PWEubGVmdCkpOmQuc2Nyb2xsVG8oYSl9bWVhc3VyZVNjcm9sbE9mZnNldChhKXtjb25zdCBkPSJsZWZ0IixoPSJyaWdodCIsZj10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtp''@;'; put 'put ''ZigidG9wIj09YSlyZXR1cm4gZi5zY3JvbGxUb3A7aWYoImJvdHRvbSI9PWEpcmV0dXJuIGYuc2Nyb2xsSGVpZ2h0LWYuY2xpZW50SGVpZ2h0LWYuc2Nyb2xsVG9wO2NvbnN0IHY9dGhpcy5kaXImJiJydGwiPT10aGlzLmRpci52YWx1ZTtyZXR1cm4ic3RhcnQiPT1hP2E9dj9oOmQ6ImVuZCI9''@;'; put 'put ''PWEmJihhPXY/ZDpoKSx2JiZqVCgpPT12NC5JTlZFUlRFRD9hPT1kP2Yuc2Nyb2xsV2lkdGgtZi5jbGllbnRXaWR0aC1mLnNjcm9sbExlZnQ6Zi5zY3JvbGxMZWZ0OnYmJmpUKCk9PXY0Lk5FR0FURUQ/YT09ZD9mLnNjcm9sbExlZnQrZi5zY3JvbGxXaWR0aC1mLmNsaWVudFdpZHRoOi1mLnNj''@;'; put 'put ''cm9sbExlZnQ6YT09ZD9mLnNjcm9sbExlZnQ6Zi5zY3JvbGxXaWR0aC1mLmNsaWVudFdpZHRoLWYuc2Nyb2xsTGVmdH1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVkaXI9WXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrLXNj''@;'; put 'put ''cm9sbGFibGUiLCIiXSxbIiIsImNka1Njcm9sbGFibGUiLCIiXV19KX1yZXR1cm4gY30pKCksS0Y9KCgpPT57Y2xhc3MgY3tfcGxhdGZvcm09Sm4oVlQpO19saXN0ZW5lcnM7X3ZpZXdwb3J0U2l6ZTtfY2hhbmdlPW5ldyB1cjtfZG9jdW1lbnQ9Sm4oR3Mse29wdGlvbmFsOiEwfSk7Y29uc3Ry''@;'; put 'put ''dWN0b3IoKXtjb25zdCBhPUpuKFhhKSxkPUpuKGVjKS5jcmVhdGVSZW5kZXJlcihudWxsLG51bGwpO2EucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntpZih0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpe2NvbnN0IGg9Zj0+dGhpcy5fY2hhbmdlLm5leHQoZik7dGhpcy5fbGlzdGVuZXJzPVtkLmxp''@;'; put 'put ''c3Rlbigid2luZG93IiwicmVzaXplIixoKSxkLmxpc3Rlbigid2luZG93Iiwib3JpZW50YXRpb25jaGFuZ2UiLGgpXX10aGlzLmNoYW5nZSgpLnN1YnNjcmliZSgoKT0+dGhpcy5fdmlld3BvcnRTaXplPW51bGwpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9saXN0ZW5lcnM/LmZvckVhY2goYT0+''@;'; put 'put ''YSgpKSx0aGlzLl9jaGFuZ2UuY29tcGxldGUoKX1nZXRWaWV3cG9ydFNpemUoKXt0aGlzLl92aWV3cG9ydFNpemV8fHRoaXMuX3VwZGF0ZVZpZXdwb3J0U2l6ZSgpO2NvbnN0IGE9e3dpZHRoOnRoaXMuX3ZpZXdwb3J0U2l6ZS53aWR0aCxoZWlnaHQ6dGhpcy5fdmlld3BvcnRTaXplLmhlaWdo''@;'; put 'put ''dH07cmV0dXJuIHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8KHRoaXMuX3ZpZXdwb3J0U2l6ZT1udWxsKSxhfWdldFZpZXdwb3J0UmVjdCgpe2NvbnN0IGE9dGhpcy5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkse3dpZHRoOmQsaGVpZ2h0Omh9PXRoaXMuZ2V0Vmlld3BvcnRTaXplKCk7''@;'; put 'put ''cmV0dXJue3RvcDphLnRvcCxsZWZ0OmEubGVmdCxib3R0b206YS50b3AraCxyaWdodDphLmxlZnQrZCxoZWlnaHQ6aCx3aWR0aDpkfX1nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm57dG9wOjAsbGVmdDowfTtjb25zdCBhPXRo''@;'; put 'put ''aXMuX2RvY3VtZW50LGQ9dGhpcy5fZ2V0V2luZG93KCksaD1hLmRvY3VtZW50RWxlbWVudCxmPWguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3RvcDotZi50b3B8fGEuYm9keS5zY3JvbGxUb3B8fGQuc2Nyb2xsWXx8aC5zY3JvbGxUb3B8fDAsbGVmdDotZi5sZWZ0fHxhLmJvZHku''@;'; put 'put ''c2Nyb2xsTGVmdHx8ZC5zY3JvbGxYfHxoLnNjcm9sbExlZnR8fDB9fWNoYW5nZShhPTIwKXtyZXR1cm4gYT4wP3RoaXMuX2NoYW5nZS5waXBlKFdLKGEpKTp0aGlzLl9jaGFuZ2V9X2dldFdpbmRvdygpe3JldHVybiB0aGlzLl9kb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93fV91cGRhdGVW''@;'; put 'put ''aWV3cG9ydFNpemUoKXtjb25zdCBhPXRoaXMuX2dldFdpbmRvdygpO3RoaXMuX3ZpZXdwb3J0U2l6ZT10aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXI/e3dpZHRoOmEuaW5uZXJXaWR0aCxoZWlnaHQ6YS5pbm5lckhlaWdodH06e3dpZHRoOjAsaGVpZ2h0OjB9fXN0YXRpYyBcdTAyNzVmYWM9ZnVu''@;'; put 'put ''Y3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKTtjb25zdCBwZmU9bmV3IGpuKCJWSVJUVUFMX1NDUk9MTEFCTEUiKTtsZXQgZ2ZlPSgoKT0+e2Ns''@;'; put 'put ''YXNzIGMgZXh0ZW5kcyBmZmV7Y29uc3RydWN0b3IoKXtzdXBlcigpfW1lYXN1cmVWaWV3cG9ydFNpemUoYSl7Y29uc3QgZD10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtyZXR1cm4iaG9yaXpvbnRhbCI9PT1hP2QuY2xpZW50V2lkdGg6ZC5jbGllbnRIZWlnaHR9c3RhdGljIFx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1ZGlyPVlyKHt0eXBlOmMsZmVhdHVyZXM6W0xhXX0pfXJldHVybiBjfSkoKTtjb25zdCAkemU9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZTwidSI/Y2ZlOkl6ZTtsZXQgaXc9KCgpPT57Y2xhc3MgYyBl''@;'; put 'put ''eHRlbmRzIGdmZXtlbGVtZW50UmVmPUpuKG5hKTtfY2hhbmdlRGV0ZWN0b3JSZWY9Sm4oSHMpO19zY3JvbGxTdHJhdGVneT1KbihoZmUse29wdGlvbmFsOiEwfSk7c2Nyb2xsYWJsZT1KbihwZmUse29wdGlvbmFsOiEwfSk7X3BsYXRmb3JtPUpuKFZUKTtfZGV0YWNoZWRTdWJqZWN0PW5ldyB1''@;'; put 'put ''cjtfcmVuZGVyZWRSYW5nZVN1YmplY3Q9bmV3IHVyO2dldCBvcmllbnRhdGlvbigpe3JldHVybiB0aGlzLl9vcmllbnRhdGlvbn1zZXQgb3JpZW50YXRpb24oYSl7dGhpcy5fb3JpZW50YXRpb24hPT1hJiYodGhpcy5fb3JpZW50YXRpb249YSx0aGlzLl9jYWxjdWxhdGVTcGFjZXJTaXplKCkp''@;'; put 'put ''fV9vcmllbnRhdGlvbj0idmVydGljYWwiO2FwcGVuZE9ubHk9ITE7c2Nyb2xsZWRJbmRleENoYW5nZT1uZXcgUmkoYT0+dGhpcy5fc2Nyb2xsU3RyYXRlZ3kuc2Nyb2xsZWRJbmRleENoYW5nZS5zdWJzY3JpYmUoZD0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dGhpcy5uZ1pvbmUucnVu''@;'; put 'put ''KCgpPT5hLm5leHQoZCkpKSkpO19jb250ZW50V3JhcHBlcjtyZW5kZXJlZFJhbmdlU3RyZWFtPXRoaXMuX3JlbmRlcmVkUmFuZ2VTdWJqZWN0O190b3RhbENvbnRlbnRTaXplPTA7X3RvdGFsQ29udGVudFdpZHRoPSIiO190b3RhbENvbnRlbnRIZWlnaHQ9IiI7X3JlbmRlcmVkQ29udGVudFRy''@;'; put 'put ''YW5zZm9ybTtfcmVuZGVyZWRSYW5nZT17c3RhcnQ6MCxlbmQ6MH07X2RhdGFMZW5ndGg9MDtfdmlld3BvcnRTaXplPTA7X2Zvck9mO19yZW5kZXJlZENvbnRlbnRPZmZzZXQ9MDtfcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlPSExO19pc0NoYW5nZURldGVjdGlvblBlbmRpbmc9''@;'; put 'put ''ITE7X3J1bkFmdGVyQ2hhbmdlRGV0ZWN0aW9uPVtdO192aWV3cG9ydENoYW5nZXM9QnQuRU1QVFk7X2luamVjdG9yPUpuKFlvKTtfaXNEZXN0cm95ZWQ9ITE7Y29uc3RydWN0b3IoKXtzdXBlcigpO2NvbnN0IGE9Sm4oS0YpO3RoaXMuX3ZpZXdwb3J0Q2hhbmdlcz1hLmNoYW5nZSgpLnN1YnNj''@;'; put 'put ''cmliZSgoKT0+e3RoaXMuY2hlY2tWaWV3cG9ydFNpemUoKX0pLHRoaXMuc2Nyb2xsYWJsZXx8KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoImNkay12aXJ0dWFsLXNjcm9sbGFibGUiKSx0aGlzLnNjcm9sbGFibGU9dGhpcyl9bmdPbkluaXQoKXt0aGlzLl9w''@;'; put 'put ''bGF0Zm9ybS5pc0Jyb3dzZXImJih0aGlzLnNjcm9sbGFibGU9PT10aGlzJiZzdXBlci5uZ09uSW5pdCgpLHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5fbWVhc3VyZVZpZXdwb3J0U2l6ZSgpLHRoaXMuX3Njcm9sbFN0''@;'; put 'put ''cmF0ZWd5LmF0dGFjaCh0aGlzKSx0aGlzLnNjcm9sbGFibGUuZWxlbWVudFNjcm9sbGVkKCkucGlwZShTZihudWxsKSxXSygwLCR6ZSksTDEodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT50aGlzLl9zY3JvbGxTdHJhdGVneS5vbkNvbnRlbnRTY3JvbGxlZCgpKSx0aGlzLl9tYXJr''@;'; put 'put ''Q2hhbmdlRGV0ZWN0aW9uTmVlZGVkKCl9KSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXRhY2goKSx0aGlzLl9zY3JvbGxTdHJhdGVneS5kZXRhY2goKSx0aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdC5jb21wbGV0ZSgpLHRoaXMuX2RldGFjaGVkU3ViamVjdC5jb21wbGV0ZSgpLHRoaXMuX3Zp''@;'; put 'put ''ZXdwb3J0Q2hhbmdlcy51bnN1YnNjcmliZSgpLHRoaXMuX2lzRGVzdHJveWVkPSEwLHN1cGVyLm5nT25EZXN0cm95KCl9YXR0YWNoKGEpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fZm9yT2Y9YSx0aGlzLl9mb3JPZi5kYXRhU3RyZWFtLnBpcGUoTDEodGhpcy5f''@;'; put 'put ''ZGV0YWNoZWRTdWJqZWN0KSkuc3Vic2NyaWJlKGQ9Pntjb25zdCBoPWQubGVuZ3RoO2ghPT10aGlzLl9kYXRhTGVuZ3RoJiYodGhpcy5fZGF0YUxlbmd0aD1oLHRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uRGF0YUxlbmd0aENoYW5nZWQoKSksdGhpcy5fZG9DaGFuZ2VEZXRlY3Rpb24oKX0pfSl9''@;'; put 'put ''ZGV0YWNoKCl7dGhpcy5fZm9yT2Y9bnVsbCx0aGlzLl9kZXRhY2hlZFN1YmplY3QubmV4dCgpfWdldERhdGFMZW5ndGgoKXtyZXR1cm4gdGhpcy5fZGF0YUxlbmd0aH1nZXRWaWV3cG9ydFNpemUoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRTaXplfWdldFJlbmRlcmVkUmFuZ2UoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fcmVuZGVyZWRSYW5nZX1tZWFzdXJlQm91bmRpbmdDbGllbnRSZWN0V2l0aFNjcm9sbE9mZnNldChhKXtyZXR1cm4gdGhpcy5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVthXX1zZXRUb3RhbENvbnRlbnRTaXplKGEpe3RoaXMuX3Rv''@;'; put 'put ''dGFsQ29udGVudFNpemUhPT1hJiYodGhpcy5fdG90YWxDb250ZW50U2l6ZT1hLHRoaXMuX2NhbGN1bGF0ZVNwYWNlclNpemUoKSx0aGlzLl9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKCkpfXNldFJlbmRlcmVkUmFuZ2UoYSl7KGZ1bmN0aW9uIEd6ZShjLGwpe3JldHVybiBjLnN0YXJ0PT1s''@;'; put 'put ''LnN0YXJ0JiZjLmVuZD09bC5lbmR9KSh0aGlzLl9yZW5kZXJlZFJhbmdlLGEpfHwodGhpcy5hcHBlbmRPbmx5JiYoYT17c3RhcnQ6MCxlbmQ6TWF0aC5tYXgodGhpcy5fcmVuZGVyZWRSYW5nZS5lbmQsYS5lbmQpfSksdGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3QubmV4dCh0aGlzLl9yZW5k''@;'; put 'put ''ZXJlZFJhbmdlPWEpLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKCk9PnRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uQ29udGVudFJlbmRlcmVkKCkpKX1nZXRPZmZzZXRUb1JlbmRlcmVkQ29udGVudFN0YXJ0KCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRz''@;'; put 'put ''UmV3cml0ZT9udWxsOnRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldH1zZXRSZW5kZXJlZENvbnRlbnRPZmZzZXQoYSxkPSJ0by1zdGFydCIpe2E9dGhpcy5hcHBlbmRPbmx5JiYidG8tc3RhcnQiPT09ZD8wOmE7Y29uc3QgZj0iaG9yaXpvbnRhbCI9PXRoaXMub3JpZW50YXRpb24sdj1mPyJY''@;'; put 'put ''IjoiWSI7bGV0IEQ9YHRyYW5zbGF0ZSR7dn0oJHtOdW1iZXIoKGYmJnRoaXMuZGlyJiYicnRsIj09dGhpcy5kaXIudmFsdWU/LTE6MSkqYSl9cHgpYDt0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQ9YSwidG8tZW5kIj09PWQmJihEKz1gIHRyYW5zbGF0ZSR7dn0oLTEwMCUpYCx0aGlzLl9y''@;'; put 'put ''ZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU9ITApLHRoaXMuX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybSE9RCYmKHRoaXMuX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybT1ELHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKCk9Pnt0aGlzLl9yZW5kZXJlZENvbnRlbnRP''@;'; put 'put ''ZmZzZXROZWVkc1Jld3JpdGU/KHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldC09dGhpcy5tZWFzdXJlUmVuZGVyZWRDb250ZW50U2l6ZSgpLHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT0hMSx0aGlzLnNldFJlbmRlcmVkQ29udGVudE9mZnNldCh0aGlzLl9yZW5k''@;'; put 'put ''ZXJlZENvbnRlbnRPZmZzZXQpKTp0aGlzLl9zY3JvbGxTdHJhdGVneS5vblJlbmRlcmVkT2Zmc2V0Q2hhbmdlZCgpfSkpfXNjcm9sbFRvT2Zmc2V0KGEsZD0iYXV0byIpe2NvbnN0IGg9e2JlaGF2aW9yOmR9OyJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/aC5zdGFydD1hOmgudG9w''@;'; put 'put ''PWEsdGhpcy5zY3JvbGxhYmxlLnNjcm9sbFRvKGgpfXNjcm9sbFRvSW5kZXgoYSxkPSJhdXRvIil7dGhpcy5fc2Nyb2xsU3RyYXRlZ3kuc2Nyb2xsVG9JbmRleChhLGQpfW1lYXN1cmVTY3JvbGxPZmZzZXQoYSl7bGV0IGQ7cmV0dXJuIGQ9dGhpcy5zY3JvbGxhYmxlPT10aGlzP2g9PnN1cGVy''@;'; put 'put ''Lm1lYXN1cmVTY3JvbGxPZmZzZXQoaCk6aD0+dGhpcy5zY3JvbGxhYmxlLm1lYXN1cmVTY3JvbGxPZmZzZXQoaCksTWF0aC5tYXgoMCxkKGE/PygiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uPyJzdGFydCI6InRvcCIpKS10aGlzLm1lYXN1cmVWaWV3cG9ydE9mZnNldCgpKX1tZWFz''@;'; put 'put ''dXJlVmlld3BvcnRPZmZzZXQoYSl7bGV0IGQ7Y29uc3QgaD0ibGVmdCIsZj0icmlnaHQiLHY9InJ0bCI9PXRoaXMuZGlyPy52YWx1ZTtkPSJzdGFydCI9PWE/dj9mOmg6ImVuZCI9PWE/dj9oOmY6YXx8KCJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/ImxlZnQiOiJ0b3AiKTtjb25z''@;'; put 'put ''dCBNPXRoaXMuc2Nyb2xsYWJsZS5tZWFzdXJlQm91bmRpbmdDbGllbnRSZWN0V2l0aFNjcm9sbE9mZnNldChkKTtyZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbZF0tTX1tZWFzdXJlUmVuZGVyZWRDb250ZW50U2l6ZSgpe2NvbnN0''@;'; put 'put ''IGE9dGhpcy5fY29udGVudFdyYXBwZXIubmF0aXZlRWxlbWVudDtyZXR1cm4iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP2Eub2Zmc2V0V2lkdGg6YS5vZmZzZXRIZWlnaHR9bWVhc3VyZVJhbmdlU2l6ZShhKXtyZXR1cm4gdGhpcy5fZm9yT2Y/dGhpcy5fZm9yT2YubWVhc3VyZVJh''@;'; put 'put ''bmdlU2l6ZShhLHRoaXMub3JpZW50YXRpb24pOjB9Y2hlY2tWaWV3cG9ydFNpemUoKXt0aGlzLl9tZWFzdXJlVmlld3BvcnRTaXplKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25EYXRhTGVuZ3RoQ2hhbmdlZCgpfV9tZWFzdXJlVmlld3BvcnRTaXplKCl7dGhpcy5fdmlld3BvcnRTaXplPXRo''@;'; put 'put ''aXMuc2Nyb2xsYWJsZS5tZWFzdXJlVmlld3BvcnRTaXplKHRoaXMub3JpZW50YXRpb24pfV9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKGEpe2EmJnRoaXMuX3J1bkFmdGVyQ2hhbmdlRGV0ZWN0aW9uLnB1c2goYSksdGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nfHwodGhpcy5faXND''@;'; put 'put ''aGFuZ2VEZXRlY3Rpb25QZW5kaW5nPSEwLHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5fZG9DaGFuZ2VEZXRlY3Rpb24oKX0pKSl9X2RvQ2hhbmdlRGV0ZWN0aW9uKCl7dGhpcy5faXNEZXN0cm95ZWR8fHRoaXMubmda''@;'; put 'put ''b25lLnJ1bigoKT0+e3RoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX2NvbnRlbnRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtPXRoaXMuX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybSxNbSgoKT0+e3RoaXMuX2lzQ2hhbmdlRGV0ZWN0aW9u''@;'; put 'put ''UGVuZGluZz0hMTtjb25zdCBhPXRoaXMuX3J1bkFmdGVyQ2hhbmdlRGV0ZWN0aW9uO3RoaXMuX3J1bkFmdGVyQ2hhbmdlRGV0ZWN0aW9uPVtdO2Zvcihjb25zdCBkIG9mIGEpZCgpfSx7aW5qZWN0b3I6dGhpcy5faW5qZWN0b3J9KX0pfV9jYWxjdWxhdGVTcGFjZXJTaXplKCl7dGhpcy5fdG90''@;'; put 'put ''YWxDb250ZW50SGVpZ2h0PSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/IiI6YCR7dGhpcy5fdG90YWxDb250ZW50U2l6ZX1weGAsdGhpcy5fdG90YWxDb250ZW50V2lkdGg9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj9gJHt0aGlzLl90b3RhbENvbnRlbnRTaXplfXB4''@;'; put 'put ''YDoiIn1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmVWEoenplLDcp''@;'; put 'put ''LDImZCl7bGV0IGY7Z2koZj1taSgpKSYmKGguX2NvbnRlbnRXcmFwcGVyPWYuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezImZCYmeHIoImNkay12aXJ0dWFsLXNjcm9sbC1v''@;'; put 'put ''cmllbnRhdGlvbi1ob3Jpem9udGFsIiwiaG9yaXpvbnRhbCI9PT1oLm9yaWVudGF0aW9uKSgiY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIiwiaG9yaXpvbnRhbCIhPT1oLm9yaWVudGF0aW9uKX0saW5wdXRzOntvcmllbnRhdGlvbjoib3JpZW50YXRpb24iLGFwcGVu''@;'; put 'put ''ZE9ubHk6WzIsImFwcGVuZE9ubHkiLCJhcHBlbmRPbmx5IixJMV19LG91dHB1dHM6e3Njcm9sbGVkSW5kZXhDaGFuZ2U6InNjcm9sbGVkSW5kZXhDaGFuZ2UifSxmZWF0dXJlczpbaGEoW3twcm92aWRlOmZmZSx1c2VGYWN0b3J5OihhLGQpPT5hfHxkLGRlcHM6W1tuZXcgV3MsbmV3IGt5KHBm''@;'; put 'put ''ZSldLGNdfV0pLExhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6VXplLGRlY2xzOjQsdmFyczo0LGNvbnN0czpbWyJjb250ZW50V3JhcHBlciIsIiJdLFsxLCJjZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyIl0sWzEsImNkay12aXJ0dWFsLXNjcm9sbC1zcGFjZXIiXV0sdGVtcGxhdGU6''@;'; put 'put ''ZnVuY3Rpb24oZCxoKXsxJmQmJihzYSgpLGRlKDAsImRpdiIsMSwwKSxXcigyKSxoZSgpLEd0KDMsImRpdiIsMikpLDImZCYmKGZlKDMpLG1kKCJ3aWR0aCIsaC5fdG90YWxDb250ZW50V2lkdGgpKCJoZWlnaHQiLGguX3RvdGFsQ29udGVudEhlaWdodCkpfSxzdHlsZXM6WyJjZGstdmlydHVh''@;'; put 'put ''bC1zY3JvbGwtdmlld3BvcnR7ZGlzcGxheTpibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0uY2RrLXZpcnR1YWwtc2Nyb2xsYWJsZXtvdmVyZmxvdzphdXRvO3dpbGwtY2hhbmdlOnNjcm9sbC1wb3NpdGlvbjtjb250YWluOnN0cmljdH0uY2RrLXZpcnR1''@;'; put 'put ''YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7Y29udGFpbjpjb250ZW50fVtkaXI9cnRsXSAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcntyaWdodDowO2xlZnQ6YXV0b30uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0''@;'; put 'put ''aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7bWluLWhlaWdodDoxMDAlfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5kbDpub3QoW2Nka1ZpcnR1YWxG''@;'; put 'put ''b3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+b2w6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1z''@;'; put 'put ''Y3JvbGwtY29udGVudC13cmFwcGVyPnRhYmxlOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj51bDpub3QoW2Nka1ZpcnR1YWxGb3JdKXtwYWRkaW5nLWxlZnQ6''@;'; put 'put ''MDtwYWRkaW5nLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDtib3JkZXItbGVmdC13aWR0aDowO2JvcmRlci1yaWdodC13aWR0aDowO291dGxpbmU6bm9uZX0uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29u''@;'; put 'put ''dGVudC13cmFwcGVye21pbi13aWR0aDoxMDAlfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+ZGw6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0''@;'; put 'put ''aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5vbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnRhYmxlOm5vdChbY2RrVmlydHVhbEZv''@;'; put 'put ''cl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dWw6bm90KFtjZGtWaXJ0dWFsRm9yXSl7cGFkZGluZy10b3A6MDtwYWRkaW5nLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjA7''@;'; put 'put ''Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1ib3R0b20td2lkdGg6MDtvdXRsaW5lOm5vbmV9LmNkay12aXJ0dWFsLXNjcm9sbC1zcGFjZXJ7aGVpZ2h0OjFweDt0cmFuc2Zvcm0tb3JpZ2luOjAgMDtmbGV4OjAgMCBhdXRvfVtkaXI9cnRsXSAuY2RrLXZpcnR1YWwtc2Nyb2xsLXNwYWNlcnt0''@;'; put 'put ''cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMH1cbiJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pfXJldHVybiBjfSkoKTtmdW5jdGlvbiBtZmUoYyxsLGEpe2lmKCFhLmdldEJvdW5kaW5nQ2xpZW50UmVjdClyZXR1cm4gMDtjb25zdCBoPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0''@;'; put 'put ''KCk7cmV0dXJuImhvcml6b250YWwiPT09Yz8ic3RhcnQiPT09bD9oLmxlZnQ6aC5yaWdodDoic3RhcnQiPT09bD9oLnRvcDpoLmJvdHRvbX1sZXQgWEY9KCgpPT57Y2xhc3MgY3tfdmlld0NvbnRhaW5lclJlZj1KbihiZSk7X3RlbXBsYXRlPUpuKElsKTtfZGlmZmVycz1KbigkbSk7X3ZpZXdS''@;'; put 'put ''ZXBlYXRlcj1KbihZSyk7X3ZpZXdwb3J0PUpuKGl3LHtza2lwU2VsZjohMH0pO3ZpZXdDaGFuZ2U9bmV3IHVyO19kYXRhU291cmNlQ2hhbmdlcz1uZXcgdXI7Z2V0IGNka1ZpcnR1YWxGb3JPZigpe3JldHVybiB0aGlzLl9jZGtWaXJ0dWFsRm9yT2Z9c2V0IGNka1ZpcnR1YWxGb3JPZihhKXt0''@;'; put 'put ''aGlzLl9jZGtWaXJ0dWFsRm9yT2Y9YSxmdW5jdGlvbiBCemUoYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLmNvbm5lY3QmJiEoYyBpbnN0YW5jZW9mIGYkKX0oYSk/dGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMubmV4dChhKTp0aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5uZXh0KG5l''@;'; put 'put ''dyBqemUoWEUoYSk/YTpBcnJheS5mcm9tKGF8fFtdKSkpfV9jZGtWaXJ0dWFsRm9yT2Y7Z2V0IGNka1ZpcnR1YWxGb3JUcmFja0J5KCl7cmV0dXJuIHRoaXMuX2Nka1ZpcnR1YWxGb3JUcmFja0J5fXNldCBjZGtWaXJ0dWFsRm9yVHJhY2tCeShhKXt0aGlzLl9uZWVkc1VwZGF0ZT0hMCx0aGlz''@;'; put 'put ''Ll9jZGtWaXJ0dWFsRm9yVHJhY2tCeT1hPyhkLGgpPT5hKGQrKHRoaXMuX3JlbmRlcmVkUmFuZ2U/dGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydDowKSxoKTp2b2lkIDB9X2Nka1ZpcnR1YWxGb3JUcmFja0J5O3NldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGUoYSl7YSYmKHRoaXMuX25lZWRzVXBk''@;'; put 'put ''YXRlPSEwLHRoaXMuX3RlbXBsYXRlPWEpfWdldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUoKXtyZXR1cm4gdGhpcy5fdmlld1JlcGVhdGVyLnZpZXdDYWNoZVNpemV9c2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZShhKXt0aGlzLl92aWV3UmVwZWF0ZXIudmlld0Nh''@;'; put 'put ''Y2hlU2l6ZT13OShhKX1kYXRhU3RyZWFtPXRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLnBpcGUoU2YobnVsbCksZnVuY3Rpb24gTHplKCl7cmV0dXJuIGVhKChjLGwpPT57bGV0IGEsZD0hMTtjLnN1YnNjcmliZShGcihsLGg9Pntjb25zdCBmPWE7YT1oLGQmJmwubmV4dChbZixoXSksZD0hMH0p''@;'; put 'put ''KX0pfSgpLGJkKChbYSxkXSk9PnRoaXMuX2NoYW5nZURhdGFTb3VyY2UoYSxkKSksbmZlKDEpKTtfZGlmZmVyPW51bGw7X2RhdGE7X3JlbmRlcmVkSXRlbXM7X3JlbmRlcmVkUmFuZ2U7X25lZWRzVXBkYXRlPSExO19kZXN0cm95ZWQ9bmV3IHVyO2NvbnN0cnVjdG9yKCl7Y29uc3QgYT1KbihY''@;'; put 'put ''YSk7dGhpcy5kYXRhU3RyZWFtLnN1YnNjcmliZShkPT57dGhpcy5fZGF0YT1kLHRoaXMuX29uUmVuZGVyZWREYXRhQ2hhbmdlKCl9KSx0aGlzLl92aWV3cG9ydC5yZW5kZXJlZFJhbmdlU3RyZWFtLnBpcGUoTDEodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKGQ9Pnt0aGlzLl9yZW5kZXJl''@;'; put 'put ''ZFJhbmdlPWQsdGhpcy52aWV3Q2hhbmdlLm9ic2VydmVycy5sZW5ndGgmJmEucnVuKCgpPT50aGlzLnZpZXdDaGFuZ2UubmV4dCh0aGlzLl9yZW5kZXJlZFJhbmdlKSksdGhpcy5fb25SZW5kZXJlZERhdGFDaGFuZ2UoKX0pLHRoaXMuX3ZpZXdwb3J0LmF0dGFjaCh0aGlzKX1tZWFzdXJlUmFu''@;'; put 'put ''Z2VTaXplKGEsZCl7aWYoYS5zdGFydD49YS5lbmQpcmV0dXJuIDA7Y29uc3QgaD1hLnN0YXJ0LXRoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnQsZj1hLmVuZC1hLnN0YXJ0O2xldCB2LE07Zm9yKGxldCBEPTA7RDxmO0QrKyl7Y29uc3QgVT10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChEK2gp''@;'; put 'put ''O2lmKFUmJlUucm9vdE5vZGVzLmxlbmd0aCl7dj1NPVUucm9vdE5vZGVzWzBdO2JyZWFrfX1mb3IobGV0IEQ9Zi0xO0Q+LTE7RC0tKXtjb25zdCBVPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KEQraCk7aWYoVSYmVS5yb290Tm9kZXMubGVuZ3RoKXtNPVUucm9vdE5vZGVzW1Uucm9vdE5v''@;'; put 'put ''ZGVzLmxlbmd0aC0xXTticmVha319cmV0dXJuIHYmJk0/bWZlKGQsImVuZCIsTSktbWZlKGQsInN0YXJ0Iix2KTowfW5nRG9DaGVjaygpe2lmKHRoaXMuX2RpZmZlciYmdGhpcy5fbmVlZHNVcGRhdGUpe2NvbnN0IGE9dGhpcy5fZGlmZmVyLmRpZmYodGhpcy5fcmVuZGVyZWRJdGVtcyk7YT90''@;'; put 'put ''aGlzLl9hcHBseUNoYW5nZXMoYSk6dGhpcy5fdXBkYXRlQ29udGV4dCgpLHRoaXMuX25lZWRzVXBkYXRlPSExfX1uZ09uRGVzdHJveSgpe3RoaXMuX3ZpZXdwb3J0LmRldGFjaCgpLHRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLm5leHQodm9pZCAwKSx0aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5j''@;'; put 'put ''b21wbGV0ZSgpLHRoaXMudmlld0NoYW5nZS5jb21wbGV0ZSgpLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCksdGhpcy5fdmlld1JlcGVhdGVyLmRldGFjaCgpfV9vblJlbmRlcmVkRGF0YUNoYW5nZSgpe3RoaXMuX3JlbmRlcmVkUmFuZ2UmJih0aGlz''@;'; put 'put ''Ll9yZW5kZXJlZEl0ZW1zPXRoaXMuX2RhdGEuc2xpY2UodGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydCx0aGlzLl9yZW5kZXJlZFJhbmdlLmVuZCksdGhpcy5fZGlmZmVyfHwodGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZCh0aGlzLl9yZW5kZXJlZEl0ZW1zKS5jcmVhdGUoKGEsZCk9''@;'; put 'put ''PnRoaXMuY2RrVmlydHVhbEZvclRyYWNrQnk/dGhpcy5jZGtWaXJ0dWFsRm9yVHJhY2tCeShhLGQpOmQpKSx0aGlzLl9uZWVkc1VwZGF0ZT0hMCl9X2NoYW5nZURhdGFTb3VyY2UoYSxkKXtyZXR1cm4gYSYmYS5kaXNjb25uZWN0KHRoaXMpLHRoaXMuX25lZWRzVXBkYXRlPSEwLGQ/ZC5jb25u''@;'; put 'put ''ZWN0KHRoaXMpOl9vKCl9X3VwZGF0ZUNvbnRleHQoKXtjb25zdCBhPXRoaXMuX2RhdGEubGVuZ3RoO2xldCBkPXRoaXMuX3ZpZXdDb250YWluZXJSZWYubGVuZ3RoO2Zvcig7ZC0tOyl7Y29uc3QgaD10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChkKTtoLmNvbnRleHQuaW5kZXg9dGhpcy5f''@;'; put 'put ''cmVuZGVyZWRSYW5nZS5zdGFydCtkLGguY29udGV4dC5jb3VudD1hLHRoaXMuX3VwZGF0ZUNvbXB1dGVkQ29udGV4dFByb3BlcnRpZXMoaC5jb250ZXh0KSxoLmRldGVjdENoYW5nZXMoKX19X2FwcGx5Q2hhbmdlcyhhKXt0aGlzLl92aWV3UmVwZWF0ZXIuYXBwbHlDaGFuZ2VzKGEsdGhpcy5f''@;'; put 'put ''dmlld0NvbnRhaW5lclJlZiwoZix2LE0pPT50aGlzLl9nZXRFbWJlZGRlZFZpZXdBcmdzKGYsTSksZj0+Zi5pdGVtKSxhLmZvckVhY2hJZGVudGl0eUNoYW5nZShmPT57dGhpcy5fdmlld0NvbnRhaW5lclJlZi5nZXQoZi5jdXJyZW50SW5kZXgpLmNvbnRleHQuJGltcGxpY2l0PWYuaXRlbX0p''@;'; put 'put ''O2NvbnN0IGQ9dGhpcy5fZGF0YS5sZW5ndGg7bGV0IGg9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5sZW5ndGg7Zm9yKDtoLS07KXtjb25zdCBmPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KGgpO2YuY29udGV4dC5pbmRleD10aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0K2gsZi5jb250ZXh0''@;'; put 'put ''LmNvdW50PWQsdGhpcy5fdXBkYXRlQ29tcHV0ZWRDb250ZXh0UHJvcGVydGllcyhmLmNvbnRleHQpfX1fdXBkYXRlQ29tcHV0ZWRDb250ZXh0UHJvcGVydGllcyhhKXthLmZpcnN0PTA9PT1hLmluZGV4LGEubGFzdD1hLmluZGV4PT09YS5jb3VudC0xLGEuZXZlbj1hLmluZGV4JTI9PTAsYS5v''@;'; put 'put ''ZGQ9IWEuZXZlbn1fZ2V0RW1iZWRkZWRWaWV3QXJncyhhLGQpe3JldHVybnt0ZW1wbGF0ZVJlZjp0aGlzLl90ZW1wbGF0ZSxjb250ZXh0OnskaW1wbGljaXQ6YS5pdGVtLGNka1ZpcnR1YWxGb3JPZjp0aGlzLl9jZGtWaXJ0dWFsRm9yT2YsaW5kZXg6LTEsY291bnQ6LTEsZmlyc3Q6ITEsbGFz''@;'; put 'put ''dDohMSxvZGQ6ITEsZXZlbjohMX0saW5kZXg6ZH19c3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoYSxkKXtyZXR1cm4hMH1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVkaXI9WXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwi''@;'; put 'put ''Y2RrVmlydHVhbEZvciIsIiIsImNka1ZpcnR1YWxGb3JPZiIsIiJdXSxpbnB1dHM6e2Nka1ZpcnR1YWxGb3JPZjoiY2RrVmlydHVhbEZvck9mIixjZGtWaXJ0dWFsRm9yVHJhY2tCeToiY2RrVmlydHVhbEZvclRyYWNrQnkiLGNka1ZpcnR1YWxGb3JUZW1wbGF0ZToiY2RrVmlydHVhbEZvclRl''@;'; put 'put ''bXBsYXRlIixjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemU6ImNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZSJ9LGZlYXR1cmVzOltoYShbe3Byb3ZpZGU6WUssdXNlQ2xhc3M6ZGZlfV0pXX0pfXJldHVybiBjfSkoKSxLemU9KCgpPT57Y2xhc3MgY3tzdGF0aWMgXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVtb2Q9RWkoe3R5cGU6Y30pO3N0YXRpYyBcdTAyNzVpbmo9eWkoe30pfXJldHVybiBjfSkoKTtjb25zdCBHSz17fTtsZXQgWHplPSgoKT0+e2NsYXNzIGN7X2FwcElkPUpuKGRkKTtnZXRJZChhKXtyZXR1cm4ibmci''@;'; put 'put ''IT09dGhpcy5fYXBwSWQmJihhKz10aGlzLl9hcHBJZCksR0suaGFzT3duUHJvcGVydHkoYSl8fChHS1thXT0wKSxgJHthfSR7R0tbYV0rK31gfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9y''@;'; put 'put ''eTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKTtmdW5jdGlvbiB2ZmUoYyl7Y29uc3QgbD1jLmNsb25lTm9kZSghMCksYT1sLnF1ZXJ5U2VsZWN0b3JBbGwoIltpZF0iKSxkPWMubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtsLnJlbW92ZUF0dHJpYnV0ZSgiaWQi''@;'; put 'put ''KTtmb3IobGV0IGg9MDtoPGEubGVuZ3RoO2grKylhW2hdLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKTtyZXR1cm4iY2FudmFzIj09PWQ/X2ZlKGMsbCk6KCJpbnB1dCI9PT1kfHwic2VsZWN0Ij09PWR8fCJ0ZXh0YXJlYSI9PT1kKSYmYmZlKGMsbCkseWZlKCJjYW52YXMiLGMsbCxfZmUpLHlmZSgi''@;'; put 'put ''aW5wdXQsIHRleHRhcmVhLCBzZWxlY3QiLGMsbCxiZmUpLGx9ZnVuY3Rpb24geWZlKGMsbCxhLGQpe2NvbnN0IGg9bC5xdWVyeVNlbGVjdG9yQWxsKGMpO2lmKGgubGVuZ3RoKXtjb25zdCBmPWEucXVlcnlTZWxlY3RvckFsbChjKTtmb3IobGV0IHY9MDt2PGgubGVuZ3RoO3YrKylkKGhbdl0s''@;'; put 'put ''Zlt2XSl9fWxldCBKemU9MDtmdW5jdGlvbiBiZmUoYyxsKXsiZmlsZSIhPT1sLnR5cGUmJihsLnZhbHVlPWMudmFsdWUpLCJyYWRpbyI9PT1sLnR5cGUmJmwubmFtZSYmKGwubmFtZT1gbWF0LWNsb25lLSR7bC5uYW1lfS0ke0p6ZSsrfWApfWZ1bmN0aW9uIF9mZShjLGwpe2NvbnN0IGE9bC5n''@;'; put 'put ''ZXRDb250ZXh0KCIyZCIpO2lmKGEpdHJ5e2EuZHJhd0ltYWdlKGMsMCwwKX1jYXRjaHt9fWZ1bmN0aW9uICRLKGMpe2NvbnN0IGw9Yy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57dG9wOmwudG9wLHJpZ2h0OmwucmlnaHQsYm90dG9tOmwuYm90dG9tLGxlZnQ6bC5sZWZ0LHdpZHRo''@;'; put 'put ''Omwud2lkdGgsaGVpZ2h0OmwuaGVpZ2h0LHg6bC54LHk6bC55fX1mdW5jdGlvbiBLSyhjLGwsYSl7Y29uc3R7dG9wOmQsYm90dG9tOmgsbGVmdDpmLHJpZ2h0OnZ9PWM7cmV0dXJuIGE+PWQmJmE8PWgmJmw+PWYmJmw8PXZ9ZnVuY3Rpb24gVVQoYyxsLGEpe2MudG9wKz1sLGMuYm90dG9tPWMu''@;'; put 'put ''dG9wK2MuaGVpZ2h0LGMubGVmdCs9YSxjLnJpZ2h0PWMubGVmdCtjLndpZHRofWZ1bmN0aW9uIHdmZShjLGwsYSxkKXtjb25zdHt0b3A6aCxyaWdodDpmLGJvdHRvbTp2LGxlZnQ6TSx3aWR0aDpELGhlaWdodDpVfT1jLHRlPUQqbCxvZT1VKmw7cmV0dXJuIGQ+aC1vZSYmZDx2K29lJiZhPk0t''@;'; put 'put ''dGUmJmE8Zit0ZX1jbGFzcyBDZmV7X2RvY3VtZW50O3Bvc2l0aW9ucz1uZXcgTWFwO2NvbnN0cnVjdG9yKGwpe3RoaXMuX2RvY3VtZW50PWx9Y2xlYXIoKXt0aGlzLnBvc2l0aW9ucy5jbGVhcigpfWNhY2hlKGwpe3RoaXMuY2xlYXIoKSx0aGlzLnBvc2l0aW9ucy5zZXQodGhpcy5fZG9jdW1l''@;'; put 'put ''bnQse3Njcm9sbFBvc2l0aW9uOnRoaXMuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpfSksbC5mb3JFYWNoKGE9Pnt0aGlzLnBvc2l0aW9ucy5zZXQoYSx7c2Nyb2xsUG9zaXRpb246e3RvcDphLnNjcm9sbFRvcCxsZWZ0OmEuc2Nyb2xsTGVmdH0sY2xpZW50UmVjdDokSyhhKX0pfSl9aGFu''@;'; put 'put ''ZGxlU2Nyb2xsKGwpe2NvbnN0IGE9VUYobCksZD10aGlzLnBvc2l0aW9ucy5nZXQoYSk7aWYoIWQpcmV0dXJuIG51bGw7Y29uc3QgaD1kLnNjcm9sbFBvc2l0aW9uO2xldCBmLHY7aWYoYT09PXRoaXMuX2RvY3VtZW50KXtjb25zdCBVPXRoaXMuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigp''@;'; put 'put ''O2Y9VS50b3Asdj1VLmxlZnR9ZWxzZSBmPWEuc2Nyb2xsVG9wLHY9YS5zY3JvbGxMZWZ0O2NvbnN0IE09aC50b3AtZixEPWgubGVmdC12O3JldHVybiB0aGlzLnBvc2l0aW9ucy5mb3JFYWNoKChVLHRlKT0+e1UuY2xpZW50UmVjdCYmYSE9PXRlJiZhLmNvbnRhaW5zKHRlKSYmVVQoVS5jbGll''@;'; put 'put ''bnRSZWN0LE0sRCl9KSxoLnRvcD1mLGgubGVmdD12LHt0b3A6TSxsZWZ0OkR9fWdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm57dG9wOndpbmRvdy5zY3JvbGxZLGxlZnQ6d2luZG93LnNjcm9sbFh9fX1mdW5jdGlvbiBTZmUoYyxsKXtjb25zdCBhPWMucm9vdE5vZGVzO2lmKDE9''@;'; put 'put ''PT1hLmxlbmd0aCYmYVswXS5ub2RlVHlwZT09PWwuRUxFTUVOVF9OT0RFKXJldHVybiBhWzBdO2NvbnN0IGQ9bC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gYS5mb3JFYWNoKGg9PmQuYXBwZW5kQ2hpbGQoaCkpLGR9ZnVuY3Rpb24gWEsoYyxsLGEpe2ZvcihsZXQgZCBpbiBsKWlmKGwu''@;'; put 'put ''aGFzT3duUHJvcGVydHkoZCkpe2NvbnN0IGg9bFtkXTtoP2Muc2V0UHJvcGVydHkoZCxoLGE/LmhhcyhkKT8iaW1wb3J0YW50IjoiIik6Yy5yZW1vdmVQcm9wZXJ0eShkKX1yZXR1cm4gY31mdW5jdGlvbiBhdyhjLGwpe2NvbnN0IGE9bD8iIjoibm9uZSI7WEsoYy5zdHlsZSx7InRvdWNoLWFj''@;'; put 'put ''dGlvbiI6bD8iIjoibm9uZSIsIi13ZWJraXQtdXNlci1kcmFnIjpsPyIiOiJub25lIiwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIjpsPyIiOiJ0cmFuc3BhcmVudCIsInVzZXItc2VsZWN0IjphLCItbXMtdXNlci1zZWxlY3QiOmEsIi13ZWJraXQtdXNlci1zZWxlY3QiOmEsIi1tb3ot''@;'; put 'put ''dXNlci1zZWxlY3QiOmF9KX1mdW5jdGlvbiBNZmUoYyxsLGEpe1hLKGMuc3R5bGUse3Bvc2l0aW9uOmw/IiI6ImZpeGVkIix0b3A6bD8iIjoiMCIsb3BhY2l0eTpsPyIiOiIwIixsZWZ0Omw/IiI6Ii05OTllbSJ9LGEpfWZ1bmN0aW9uIHFGKGMsbCl7cmV0dXJuIGwmJiJub25lIiE9bD9jKyIg''@;'; put 'put ''IitsOmN9ZnVuY3Rpb24geGZlKGMsbCl7Yy5zdHlsZS53aWR0aD1gJHtsLndpZHRofXB4YCxjLnN0eWxlLmhlaWdodD1gJHtsLmhlaWdodH1weGAsYy5zdHlsZS50cmFuc2Zvcm09SkYobC5sZWZ0LGwudG9wKX1mdW5jdGlvbiBKRihjLGwpe3JldHVybmB0cmFuc2xhdGUzZCgke01hdGgucm91''@;'; put 'put ''bmQoYyl9cHgsICR7TWF0aC5yb3VuZChsKX1weCwgMClgfWZ1bmN0aW9uIEVmZShjKXtjb25zdCBsPWMudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJtcyIpPi0xPzE6MWUzO3JldHVybiBwYXJzZUZsb2F0KGMpKmx9ZnVuY3Rpb24gcUsoYyxsKXtyZXR1cm4gYy5nZXRQcm9wZXJ0eVZhbHVlKGwp''@;'; put 'put ''LnNwbGl0KCIsIikubWFwKGQ9PmQudHJpbSgpKX1jb25zdCBlVWU9bmV3IFNldChbInBvc2l0aW9uIl0pO2NsYXNzIHRVZXtfZG9jdW1lbnQ7X3Jvb3RFbGVtZW50O19kaXJlY3Rpb247X2luaXRpYWxEb21SZWN0O19wcmV2aWV3VGVtcGxhdGU7X3ByZXZpZXdDbGFzcztfcGlja3VwUG9zaXRp''@;'; put 'put ''b25PblBhZ2U7X2luaXRpYWxUcmFuc2Zvcm07X3pJbmRleDtfcmVuZGVyZXI7X3ByZXZpZXdFbWJlZGRlZFZpZXc7X3ByZXZpZXc7Z2V0IGVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fcHJldmlld31jb25zdHJ1Y3RvcihsLGEsZCxoLGYsdixNLEQsVSx0ZSl7dGhpcy5fZG9jdW1lbnQ9bCx0aGlz''@;'; put 'put ''Ll9yb290RWxlbWVudD1hLHRoaXMuX2RpcmVjdGlvbj1kLHRoaXMuX2luaXRpYWxEb21SZWN0PWgsdGhpcy5fcHJldmlld1RlbXBsYXRlPWYsdGhpcy5fcHJldmlld0NsYXNzPXYsdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2U9TSx0aGlzLl9pbml0aWFsVHJhbnNmb3JtPUQsdGhpcy5feklu''@;'; put 'put ''ZGV4PVUsdGhpcy5fcmVuZGVyZXI9dGV9YXR0YWNoKGwpe3RoaXMuX3ByZXZpZXc9dGhpcy5fY3JlYXRlUHJldmlldygpLGwuYXBwZW5kQ2hpbGQodGhpcy5fcHJldmlldyksVGZlKHRoaXMuX3ByZXZpZXcpJiZ0aGlzLl9wcmV2aWV3LnNob3dQb3BvdmVyKCl9ZGVzdHJveSgpe3RoaXMuX3By''@;'; put 'put ''ZXZpZXcucmVtb3ZlKCksdGhpcy5fcHJldmlld0VtYmVkZGVkVmlldz8uZGVzdHJveSgpLHRoaXMuX3ByZXZpZXc9dGhpcy5fcHJldmlld0VtYmVkZGVkVmlldz1udWxsfXNldFRyYW5zZm9ybShsKXt0aGlzLl9wcmV2aWV3LnN0eWxlLnRyYW5zZm9ybT1sfWdldEJvdW5kaW5nQ2xpZW50UmVj''@;'; put 'put ''dCgpe3JldHVybiB0aGlzLl9wcmV2aWV3LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfWFkZENsYXNzKGwpe3RoaXMuX3ByZXZpZXcuY2xhc3NMaXN0LmFkZChsKX1nZXRUcmFuc2l0aW9uRHVyYXRpb24oKXtyZXR1cm4gZnVuY3Rpb24gUXplKGMpe2NvbnN0IGw9Z2V0Q29tcHV0ZWRTdHlsZShj''@;'; put 'put ''KSxhPXFLKGwsInRyYW5zaXRpb24tcHJvcGVydHkiKSxkPWEuZmluZChNPT4idHJhbnNmb3JtIj09PU18fCJhbGwiPT09TSk7aWYoIWQpcmV0dXJuIDA7Y29uc3QgaD1hLmluZGV4T2YoZCksZj1xSyhsLCJ0cmFuc2l0aW9uLWR1cmF0aW9uIiksdj1xSyhsLCJ0cmFuc2l0aW9uLWRlbGF5Iik7''@;'; put 'put ''cmV0dXJuIEVmZShmW2hdKStFZmUodltoXSl9KHRoaXMuX3ByZXZpZXcpfWFkZEV2ZW50TGlzdGVuZXIobCxhKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIubGlzdGVuKHRoaXMuX3ByZXZpZXcsbCxhKX1fY3JlYXRlUHJldmlldygpe2NvbnN0IGw9dGhpcy5fcHJldmlld1RlbXBsYXRlLGE9dGhp''@;'; put 'put ''cy5fcHJldmlld0NsYXNzLGQ9bD9sLnRlbXBsYXRlOm51bGw7bGV0IGg7aWYoZCYmbCl7Y29uc3QgZj1sLm1hdGNoU2l6ZT90aGlzLl9pbml0aWFsRG9tUmVjdDpudWxsLHY9bC52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhkLGwuY29udGV4dCk7di5kZXRlY3RDaGFuZ2VzKCks''@;'; put 'put ''aD1TZmUodix0aGlzLl9kb2N1bWVudCksdGhpcy5fcHJldmlld0VtYmVkZGVkVmlldz12LGwubWF0Y2hTaXplP3hmZShoLGYpOmguc3R5bGUudHJhbnNmb3JtPUpGKHRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLngsdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueSl9ZWxzZSBoPXZmZSh0''@;'; put 'put ''aGlzLl9yb290RWxlbWVudCkseGZlKGgsdGhpcy5faW5pdGlhbERvbVJlY3QpLHRoaXMuX2luaXRpYWxUcmFuc2Zvcm0mJihoLnN0eWxlLnRyYW5zZm9ybT10aGlzLl9pbml0aWFsVHJhbnNmb3JtKTtyZXR1cm4gWEsoaC5zdHlsZSx7InBvaW50ZXItZXZlbnRzIjoibm9uZSIsbWFyZ2luOlRm''@;'; put 'put ''ZShoKT8iMCBhdXRvIDAgMCI6IjAiLHBvc2l0aW9uOiJmaXhlZCIsdG9wOiIwIixsZWZ0OiIwIiwiei1pbmRleCI6dGhpcy5fekluZGV4KyIifSxlVWUpLGF3KGgsITEpLGguY2xhc3NMaXN0LmFkZCgiY2RrLWRyYWctcHJldmlldyIpLGguc2V0QXR0cmlidXRlKCJwb3BvdmVyIiwibWFudWFs''@;'; put 'put ''IiksaC5zZXRBdHRyaWJ1dGUoImRpciIsdGhpcy5fZGlyZWN0aW9uKSxhJiYoQXJyYXkuaXNBcnJheShhKT9hLmZvckVhY2goZj0+aC5jbGFzc0xpc3QuYWRkKGYpKTpoLmNsYXNzTGlzdC5hZGQoYSkpLGh9fWZ1bmN0aW9uIFRmZShjKXtyZXR1cm4ic2hvd1BvcG92ZXIiaW4gY31jb25zdCBu''@;'; put 'put ''VWU9e3Bhc3NpdmU6ITB9LEFmZT17cGFzc2l2ZTohMX0sclVlPXtwYXNzaXZlOiExLGNhcHR1cmU6ITB9LGtmZT1uZXcgU2V0KFsicG9zaXRpb24iXSk7Y2xhc3MgYVVle19jb25maWc7X2RvY3VtZW50O19uZ1pvbmU7X3ZpZXdwb3J0UnVsZXI7X2RyYWdEcm9wUmVnaXN0cnk7X3JlbmRlcmVy''@;'; put 'put ''O19yb290RWxlbWVudENsZWFudXBzO19jbGVhbnVwU2hhZG93Um9vdFNlbGVjdFN0YXJ0O19wcmV2aWV3O19wcmV2aWV3Q29udGFpbmVyO19wbGFjZWhvbGRlclJlZjtfcGxhY2Vob2xkZXI7X3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50O19waWNrdXBQb3NpdGlvbk9uUGFnZTtfYW5jaG9yO19w''@;'; put 'put ''YXNzaXZlVHJhbnNmb3JtPXt4OjAseTowfTtfYWN0aXZlVHJhbnNmb3JtPXt4OjAseTowfTtfaW5pdGlhbFRyYW5zZm9ybTtfaGFzU3RhcnRlZERyYWdnaW5nPW5oKCExKTtfaGFzTW92ZWQ7X2luaXRpYWxDb250YWluZXI7X2luaXRpYWxJbmRleDtfcGFyZW50UG9zaXRpb25zO19tb3ZlRXZl''@;'; put 'put ''bnRzPW5ldyB1cjtfcG9pbnRlckRpcmVjdGlvbkRlbHRhO19wb2ludGVyUG9zaXRpb25BdExhc3REaXJlY3Rpb25DaGFuZ2U7X2xhc3RLbm93blBvaW50ZXJQb3NpdGlvbjtfcm9vdEVsZW1lbnQ7X293bmVyU1ZHRWxlbWVudDtfcm9vdEVsZW1lbnRUYXBIaWdobGlnaHQ7X3BvaW50ZXJNb3Zl''@;'; put 'put ''U3Vic2NyaXB0aW9uPUJ0LkVNUFRZO19wb2ludGVyVXBTdWJzY3JpcHRpb249QnQuRU1QVFk7X3Njcm9sbFN1YnNjcmlwdGlvbj1CdC5FTVBUWTtfcmVzaXplU3Vic2NyaXB0aW9uPUJ0LkVNUFRZO19sYXN0VG91Y2hFdmVudFRpbWU7X2RyYWdTdGFydFRpbWU7X2JvdW5kYXJ5RWxlbWVudD1u''@;'; put 'put ''dWxsO19uYXRpdmVJbnRlcmFjdGlvbnNFbmFibGVkPSEwO19pbml0aWFsRG9tUmVjdDtfcHJldmlld1JlY3Q7X2JvdW5kYXJ5UmVjdDtfcHJldmlld1RlbXBsYXRlO19wbGFjZWhvbGRlclRlbXBsYXRlO19oYW5kbGVzPVtdO19kaXNhYmxlZEhhbmRsZXM9bmV3IFNldDtfZHJvcENvbnRhaW5l''@;'; put 'put ''cjtfZGlyZWN0aW9uPSJsdHIiO19wYXJlbnREcmFnUmVmO19jYWNoZWRTaGFkb3dSb290O2xvY2tBeGlzO2RyYWdTdGFydERlbGF5PTA7cHJldmlld0NsYXNzO3NjYWxlPTE7Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfHwhKCF0aGlzLl9kcm9wQ29udGFpbmVyfHwhdGhp''@;'; put 'put ''cy5fZHJvcENvbnRhaW5lci5kaXNhYmxlZCl9c2V0IGRpc2FibGVkKGwpe2whPT10aGlzLl9kaXNhYmxlZCYmKHRoaXMuX2Rpc2FibGVkPWwsdGhpcy5fdG9nZ2xlTmF0aXZlRHJhZ0ludGVyYWN0aW9ucygpLHRoaXMuX2hhbmRsZXMuZm9yRWFjaChhPT5hdyhhLGwpKSl9X2Rpc2FibGVkPSEx''@;'; put 'put ''O2JlZm9yZVN0YXJ0ZWQ9bmV3IHVyO3N0YXJ0ZWQ9bmV3IHVyO3JlbGVhc2VkPW5ldyB1cjtlbmRlZD1uZXcgdXI7ZW50ZXJlZD1uZXcgdXI7ZXhpdGVkPW5ldyB1cjtkcm9wcGVkPW5ldyB1cjttb3ZlZD10aGlzLl9tb3ZlRXZlbnRzO2RhdGE7Y29uc3RyYWluUG9zaXRpb247Y29uc3RydWN0''@;'; put 'put ''b3IobCxhLGQsaCxmLHYsTSl7dGhpcy5fY29uZmlnPWEsdGhpcy5fZG9jdW1lbnQ9ZCx0aGlzLl9uZ1pvbmU9aCx0aGlzLl92aWV3cG9ydFJ1bGVyPWYsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeT12LHRoaXMuX3JlbmRlcmVyPU0sdGhpcy53aXRoUm9vdEVsZW1lbnQobCkud2l0aFBhcmVudChh''@;'; put 'put ''LnBhcmVudERyYWdSZWZ8fG51bGwpLHRoaXMuX3BhcmVudFBvc2l0aW9ucz1uZXcgQ2ZlKGQpLHYucmVnaXN0ZXJEcmFnSXRlbSh0aGlzKX1nZXRQbGFjZWhvbGRlckVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXJ9Z2V0Um9vdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fcm9vdEVs''@;'; put 'put ''ZW1lbnR9Z2V0VmlzaWJsZUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5pc0RyYWdnaW5nKCk/dGhpcy5nZXRQbGFjZWhvbGRlckVsZW1lbnQoKTp0aGlzLmdldFJvb3RFbGVtZW50KCl9d2l0aEhhbmRsZXMobCl7dGhpcy5faGFuZGxlcz1sLm1hcChkPT5zNihkKSksdGhpcy5faGFuZGxlcy5mb3JF''@;'; put 'put ''YWNoKGQ9PmF3KGQsdGhpcy5kaXNhYmxlZCkpLHRoaXMuX3RvZ2dsZU5hdGl2ZURyYWdJbnRlcmFjdGlvbnMoKTtjb25zdCBhPW5ldyBTZXQ7cmV0dXJuIHRoaXMuX2Rpc2FibGVkSGFuZGxlcy5mb3JFYWNoKGQ9Pnt0aGlzLl9oYW5kbGVzLmluZGV4T2YoZCk+LTEmJmEuYWRkKGQpfSksdGhp''@;'; put 'put ''cy5fZGlzYWJsZWRIYW5kbGVzPWEsdGhpc313aXRoUHJldmlld1RlbXBsYXRlKGwpe3JldHVybiB0aGlzLl9wcmV2aWV3VGVtcGxhdGU9bCx0aGlzfXdpdGhQbGFjZWhvbGRlclRlbXBsYXRlKGwpe3JldHVybiB0aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlPWwsdGhpc313aXRoUm9vdEVsZW1l''@;'; put 'put ''bnQobCl7Y29uc3QgYT1zNihsKTtyZXR1cm4gYSE9PXRoaXMuX3Jvb3RFbGVtZW50JiYodGhpcy5fcmVtb3ZlUm9vdEVsZW1lbnRMaXN0ZW5lcnMoKSx0aGlzLl9yb290RWxlbWVudENsZWFudXBzPXRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+W0M5KHRoaXMuX3JlbmRlcmVy''@;'; put 'put ''LGEsIm1vdXNlZG93biIsdGhpcy5fcG9pbnRlckRvd24sQWZlKSxDOSh0aGlzLl9yZW5kZXJlcixhLCJ0b3VjaHN0YXJ0Iix0aGlzLl9wb2ludGVyRG93bixuVWUpLEM5KHRoaXMuX3JlbmRlcmVyLGEsImRyYWdzdGFydCIsdGhpcy5fbmF0aXZlRHJhZ1N0YXJ0LEFmZSldKSx0aGlzLl9pbml0''@;'; put 'put ''aWFsVHJhbnNmb3JtPXZvaWQgMCx0aGlzLl9yb290RWxlbWVudD1hKSx0eXBlb2YgU1ZHRWxlbWVudDwidSImJnRoaXMuX3Jvb3RFbGVtZW50IGluc3RhbmNlb2YgU1ZHRWxlbWVudCYmKHRoaXMuX293bmVyU1ZHRWxlbWVudD10aGlzLl9yb290RWxlbWVudC5vd25lclNWR0VsZW1lbnQpLHRo''@;'; put 'put ''aXN9d2l0aEJvdW5kYXJ5RWxlbWVudChsKXtyZXR1cm4gdGhpcy5fYm91bmRhcnlFbGVtZW50PWw/czYobCk6bnVsbCx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSxsJiYodGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uPXRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKDEw''@;'; put 'put ''KS5zdWJzY3JpYmUoKCk9PnRoaXMuX2NvbnRhaW5JbnNpZGVCb3VuZGFyeU9uUmVzaXplKCkpKSx0aGlzfXdpdGhQYXJlbnQobCl7cmV0dXJuIHRoaXMuX3BhcmVudERyYWdSZWY9bCx0aGlzfWRpc3Bvc2UoKXt0aGlzLl9yZW1vdmVSb290RWxlbWVudExpc3RlbmVycygpLHRoaXMuaXNEcmFn''@;'; put 'put ''Z2luZygpJiZ0aGlzLl9yb290RWxlbWVudD8ucmVtb3ZlKCksdGhpcy5fYW5jaG9yPy5yZW1vdmUoKSx0aGlzLl9kZXN0cm95UHJldmlldygpLHRoaXMuX2Rlc3Ryb3lQbGFjZWhvbGRlcigpLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkucmVtb3ZlRHJhZ0l0ZW0odGhpcyksdGhpcy5fcmVtb3Zl''@;'; put 'put ''TGlzdGVuZXJzKCksdGhpcy5iZWZvcmVTdGFydGVkLmNvbXBsZXRlKCksdGhpcy5zdGFydGVkLmNvbXBsZXRlKCksdGhpcy5yZWxlYXNlZC5jb21wbGV0ZSgpLHRoaXMuZW5kZWQuY29tcGxldGUoKSx0aGlzLmVudGVyZWQuY29tcGxldGUoKSx0aGlzLmV4aXRlZC5jb21wbGV0ZSgpLHRoaXMu''@;'; put 'put ''ZHJvcHBlZC5jb21wbGV0ZSgpLHRoaXMuX21vdmVFdmVudHMuY29tcGxldGUoKSx0aGlzLl9oYW5kbGVzPVtdLHRoaXMuX2Rpc2FibGVkSGFuZGxlcy5jbGVhcigpLHRoaXMuX2Ryb3BDb250YWluZXI9dm9pZCAwLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMu''@;'; put 'put ''X3BhcmVudFBvc2l0aW9ucy5jbGVhcigpLHRoaXMuX2JvdW5kYXJ5RWxlbWVudD10aGlzLl9yb290RWxlbWVudD10aGlzLl9vd25lclNWR0VsZW1lbnQ9dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZT10aGlzLl9wcmV2aWV3VGVtcGxhdGU9dGhpcy5fYW5jaG9yPXRoaXMuX3BhcmVudERyYWdS''@;'; put 'put ''ZWY9bnVsbH1pc0RyYWdnaW5nKCl7cmV0dXJuIHRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZygpJiZ0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LmlzRHJhZ2dpbmcodGhpcyl9cmVzZXQoKXt0aGlzLl9yb290RWxlbWVudC5zdHlsZS50cmFuc2Zvcm09dGhpcy5faW5pdGlhbFRyYW5zZm9ybXx8IiIs''@;'; put 'put ''dGhpcy5fYWN0aXZlVHJhbnNmb3JtPXt4OjAseTowfSx0aGlzLl9wYXNzaXZlVHJhbnNmb3JtPXt4OjAseTowfX1kaXNhYmxlSGFuZGxlKGwpeyF0aGlzLl9kaXNhYmxlZEhhbmRsZXMuaGFzKGwpJiZ0aGlzLl9oYW5kbGVzLmluZGV4T2YobCk+LTEmJih0aGlzLl9kaXNhYmxlZEhhbmRsZXMu''@;'; put 'put ''YWRkKGwpLGF3KGwsITApKX1lbmFibGVIYW5kbGUobCl7dGhpcy5fZGlzYWJsZWRIYW5kbGVzLmhhcyhsKSYmKHRoaXMuX2Rpc2FibGVkSGFuZGxlcy5kZWxldGUobCksYXcobCx0aGlzLmRpc2FibGVkKSl9d2l0aERpcmVjdGlvbihsKXtyZXR1cm4gdGhpcy5fZGlyZWN0aW9uPWwsdGhpc31f''@;'; put 'put ''d2l0aERyb3BDb250YWluZXIobCl7dGhpcy5fZHJvcENvbnRhaW5lcj1sfWdldEZyZWVEcmFnUG9zaXRpb24oKXtjb25zdCBsPXRoaXMuaXNEcmFnZ2luZygpP3RoaXMuX2FjdGl2ZVRyYW5zZm9ybTp0aGlzLl9wYXNzaXZlVHJhbnNmb3JtO3JldHVybnt4OmwueCx5OmwueX19c2V0RnJlZURy''@;'; put 'put ''YWdQb3NpdGlvbihsKXtyZXR1cm4gdGhpcy5fYWN0aXZlVHJhbnNmb3JtPXt4OjAseTowfSx0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLng9bC54LHRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueT1sLnksdGhpcy5fZHJvcENvbnRhaW5lcnx8dGhpcy5fYXBwbHlSb290RWxlbWVudFRyYW5zZm9ybShs''@;'; put 'put ''LngsbC55KSx0aGlzfXdpdGhQcmV2aWV3Q29udGFpbmVyKGwpe3JldHVybiB0aGlzLl9wcmV2aWV3Q29udGFpbmVyPWwsdGhpc31fc29ydEZyb21MYXN0UG9pbnRlclBvc2l0aW9uKCl7Y29uc3QgbD10aGlzLl9sYXN0S25vd25Qb2ludGVyUG9zaXRpb247bCYmdGhpcy5fZHJvcENvbnRhaW5l''@;'; put 'put ''ciYmdGhpcy5fdXBkYXRlQWN0aXZlRHJvcENvbnRhaW5lcih0aGlzLl9nZXRDb25zdHJhaW5lZFBvaW50ZXJQb3NpdGlvbihsKSxsKX1fcmVtb3ZlTGlzdGVuZXJzKCl7dGhpcy5fcG9pbnRlck1vdmVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9wb2ludGVyVXBTdWJzY3JpcHRp''@;'; put 'put ''b24udW5zdWJzY3JpYmUoKSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9jbGVhbnVwU2hhZG93Um9vdFNlbGVjdFN0YXJ0Py4oKSx0aGlzLl9jbGVhbnVwU2hhZG93Um9vdFNlbGVjdFN0YXJ0PXZvaWQgMH1fZGVzdHJveVByZXZpZXcoKXt0aGlzLl9wcmV2''@;'; put 'put ''aWV3Py5kZXN0cm95KCksdGhpcy5fcHJldmlldz1udWxsfV9kZXN0cm95UGxhY2Vob2xkZXIoKXt0aGlzLl9wbGFjZWhvbGRlcj8ucmVtb3ZlKCksdGhpcy5fcGxhY2Vob2xkZXJSZWY/LmRlc3Ryb3koKSx0aGlzLl9wbGFjZWhvbGRlcj10aGlzLl9wbGFjZWhvbGRlclJlZj1udWxsfV9wb2lu''@;'; put 'put ''dGVyRG93bj1sPT57aWYodGhpcy5iZWZvcmVTdGFydGVkLm5leHQoKSx0aGlzLl9oYW5kbGVzLmxlbmd0aCl7Y29uc3QgYT10aGlzLl9nZXRUYXJnZXRIYW5kbGUobCk7YSYmIXRoaXMuX2Rpc2FibGVkSGFuZGxlcy5oYXMoYSkmJiF0aGlzLmRpc2FibGVkJiZ0aGlzLl9pbml0aWFsaXplRHJh''@;'; put 'put ''Z1NlcXVlbmNlKGEsbCl9ZWxzZSB0aGlzLmRpc2FibGVkfHx0aGlzLl9pbml0aWFsaXplRHJhZ1NlcXVlbmNlKHRoaXMuX3Jvb3RFbGVtZW50LGwpfTtfcG9pbnRlck1vdmU9bD0+e2NvbnN0IGE9dGhpcy5fZ2V0UG9pbnRlclBvc2l0aW9uT25QYWdlKGwpO2lmKCF0aGlzLl9oYXNTdGFydGVk''@;'; put 'put ''RHJhZ2dpbmcoKSl7aWYoTWF0aC5hYnMoYS54LXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLngpK01hdGguYWJzKGEueS10aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS55KT49dGhpcy5fY29uZmlnLmRyYWdTdGFydFRocmVzaG9sZCl7Y29uc3QgTT1EYXRlLm5vdygpPj10aGlzLl9kcmFn''@;'; put 'put ''U3RhcnRUaW1lK3RoaXMuX2dldERyYWdTdGFydERlbGF5KGwpLEQ9dGhpcy5fZHJvcENvbnRhaW5lcjtpZighTSlyZXR1cm4gdm9pZCB0aGlzLl9lbmREcmFnU2VxdWVuY2UobCk7KCFEfHwhRC5pc0RyYWdnaW5nKCkmJiFELmlzUmVjZWl2aW5nKCkpJiYobC5jYW5jZWxhYmxlJiZsLnByZXZl''@;'; put 'put ''bnREZWZhdWx0KCksdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nLnNldCghMCksdGhpcy5fbmdab25lLnJ1bigoKT0+dGhpcy5fc3RhcnREcmFnU2VxdWVuY2UobCkpKX1yZXR1cm59bC5jYW5jZWxhYmxlJiZsLnByZXZlbnREZWZhdWx0KCk7Y29uc3QgZD10aGlzLl9nZXRDb25zdHJhaW5lZFBv''@;'; put 'put ''aW50ZXJQb3NpdGlvbihhKTtpZih0aGlzLl9oYXNNb3ZlZD0hMCx0aGlzLl9sYXN0S25vd25Qb2ludGVyUG9zaXRpb249YSx0aGlzLl91cGRhdGVQb2ludGVyRGlyZWN0aW9uRGVsdGEoZCksdGhpcy5fZHJvcENvbnRhaW5lcil0aGlzLl91cGRhdGVBY3RpdmVEcm9wQ29udGFpbmVyKGQsYSk7''@;'; put 'put ''ZWxzZXtjb25zdCBoPXRoaXMuY29uc3RyYWluUG9zaXRpb24/dGhpcy5faW5pdGlhbERvbVJlY3Q6dGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UsZj10aGlzLl9hY3RpdmVUcmFuc2Zvcm07Zi54PWQueC1oLngrdGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS54LGYueT1kLnktaC55K3RoaXMuX3Bh''@;'; put 'put ''c3NpdmVUcmFuc2Zvcm0ueSx0aGlzLl9hcHBseVJvb3RFbGVtZW50VHJhbnNmb3JtKGYueCxmLnkpfXRoaXMuX21vdmVFdmVudHMub2JzZXJ2ZXJzLmxlbmd0aCYmdGhpcy5fbmdab25lLnJ1bigoKT0+e3RoaXMuX21vdmVFdmVudHMubmV4dCh7c291cmNlOnRoaXMscG9pbnRlclBvc2l0aW9u''@;'; put 'put ''OmQsZXZlbnQ6bCxkaXN0YW5jZTp0aGlzLl9nZXREcmFnRGlzdGFuY2UoZCksZGVsdGE6dGhpcy5fcG9pbnRlckRpcmVjdGlvbkRlbHRhfSl9KX07X3BvaW50ZXJVcD1sPT57dGhpcy5fZW5kRHJhZ1NlcXVlbmNlKGwpfTtfZW5kRHJhZ1NlcXVlbmNlKGwpe2lmKHRoaXMuX2RyYWdEcm9wUmVn''@;'; put 'put ''aXN0cnkuaXNEcmFnZ2luZyh0aGlzKSYmKHRoaXMuX3JlbW92ZUxpc3RlbmVycygpLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc3RvcERyYWdnaW5nKHRoaXMpLHRoaXMuX3RvZ2dsZU5hdGl2ZURyYWdJbnRlcmFjdGlvbnMoKSx0aGlzLl9oYW5kbGVzJiYodGhpcy5fcm9vdEVsZW1lbnQuc3R5''@;'; put 'put ''bGUud2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I9dGhpcy5fcm9vdEVsZW1lbnRUYXBIaWdobGlnaHQpLHRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZygpKSlpZih0aGlzLnJlbGVhc2VkLm5leHQoe3NvdXJjZTp0aGlzLGV2ZW50Omx9KSx0aGlzLl9kcm9wQ29udGFpbmVyKXRoaXMuX2Ryb3BDb250''@;'; put 'put ''YWluZXIuX3N0b3BTY3JvbGxpbmcoKSx0aGlzLl9hbmltYXRlUHJldmlld1RvUGxhY2Vob2xkZXIoKS50aGVuKCgpPT57dGhpcy5fY2xlYW51cERyYWdBcnRpZmFjdHMobCksdGhpcy5fY2xlYW51cENhY2hlZERpbWVuc2lvbnMoKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnN0b3BEcmFnZ2lu''@;'; put 'put ''Zyh0aGlzKX0pO2Vsc2V7dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS54PXRoaXMuX2FjdGl2ZVRyYW5zZm9ybS54O2NvbnN0IGE9dGhpcy5fZ2V0UG9pbnRlclBvc2l0aW9uT25QYWdlKGwpO3RoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueT10aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueSx0aGlzLl9uZ1pv''@;'; put 'put ''bmUucnVuKCgpPT57dGhpcy5lbmRlZC5uZXh0KHtzb3VyY2U6dGhpcyxkaXN0YW5jZTp0aGlzLl9nZXREcmFnRGlzdGFuY2UoYSksZHJvcFBvaW50OmEsZXZlbnQ6bH0pfSksdGhpcy5fY2xlYW51cENhY2hlZERpbWVuc2lvbnMoKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnN0b3BEcmFnZ2lu''@;'; put 'put ''Zyh0aGlzKX19X3N0YXJ0RHJhZ1NlcXVlbmNlKGwpe1pUKGwpJiYodGhpcy5fbGFzdFRvdWNoRXZlbnRUaW1lPURhdGUubm93KCkpLHRoaXMuX3RvZ2dsZU5hdGl2ZURyYWdJbnRlcmFjdGlvbnMoKTtjb25zdCBhPXRoaXMuX2dldFNoYWRvd1Jvb3QoKSxkPXRoaXMuX2Ryb3BDb250YWluZXI7''@;'; put 'put ''aWYoYSYmdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fY2xlYW51cFNoYWRvd1Jvb3RTZWxlY3RTdGFydD1DOSh0aGlzLl9yZW5kZXJlcixhLCJzZWxlY3RzdGFydCIsb1VlLHJVZSl9KSxkKXtjb25zdCBoPXRoaXMuX3Jvb3RFbGVtZW50LGY9aC5wYXJlbnROb2Rl''@;'; put 'put ''LHY9dGhpcy5fcGxhY2Vob2xkZXI9dGhpcy5fY3JlYXRlUGxhY2Vob2xkZXJFbGVtZW50KCksTT10aGlzLl9hbmNob3I9dGhpcy5fYW5jaG9yfHx0aGlzLl9kb2N1bWVudC5jcmVhdGVDb21tZW50KCIiKTtmLmluc2VydEJlZm9yZShNLGgpLHRoaXMuX2luaXRpYWxUcmFuc2Zvcm09aC5zdHls''@;'; put 'put ''ZS50cmFuc2Zvcm18fCIiLHRoaXMuX3ByZXZpZXc9bmV3IHRVZSh0aGlzLl9kb2N1bWVudCx0aGlzLl9yb290RWxlbWVudCx0aGlzLl9kaXJlY3Rpb24sdGhpcy5faW5pdGlhbERvbVJlY3QsdGhpcy5fcHJldmlld1RlbXBsYXRlfHxudWxsLHRoaXMucHJldmlld0NsYXNzfHxudWxsLHRoaXMu''@;'; put 'put ''X3BpY2t1cFBvc2l0aW9uT25QYWdlLHRoaXMuX2luaXRpYWxUcmFuc2Zvcm0sdGhpcy5fY29uZmlnLnpJbmRleHx8MWUzLHRoaXMuX3JlbmRlcmVyKSx0aGlzLl9wcmV2aWV3LmF0dGFjaCh0aGlzLl9nZXRQcmV2aWV3SW5zZXJ0aW9uUG9pbnQoZixhKSksTWZlKGgsITEsa2ZlKSx0aGlzLl9k''@;'; put 'put ''b2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGYucmVwbGFjZUNoaWxkKHYsaCkpLHRoaXMuc3RhcnRlZC5uZXh0KHtzb3VyY2U6dGhpcyxldmVudDpsfSksZC5zdGFydCgpLHRoaXMuX2luaXRpYWxDb250YWluZXI9ZCx0aGlzLl9pbml0aWFsSW5kZXg9ZC5nZXRJdGVtSW5kZXgodGhpcyl9ZWxz''@;'; put 'put ''ZSB0aGlzLnN0YXJ0ZWQubmV4dCh7c291cmNlOnRoaXMsZXZlbnQ6bH0pLHRoaXMuX2luaXRpYWxDb250YWluZXI9dGhpcy5faW5pdGlhbEluZGV4PXZvaWQgMDt0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2FjaGUoZD9kLmdldFNjcm9sbGFibGVQYXJlbnRzKCk6W10pfV9pbml0aWFsaXplRHJh''@;'; put 'put ''Z1NlcXVlbmNlKGwsYSl7dGhpcy5fcGFyZW50RHJhZ1JlZiYmYS5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBkPXRoaXMuaXNEcmFnZ2luZygpLGg9WlQoYSksZj0haCYmMCE9PWEuYnV0dG9uLHY9dGhpcy5fcm9vdEVsZW1lbnQsTT1VRihhKSxEPSFoJiZ0aGlzLl9sYXN0VG91Y2hFdmVudFRp''@;'; put 'put ''bWUmJnRoaXMuX2xhc3RUb3VjaEV2ZW50VGltZSs4MDA+RGF0ZS5ub3coKSxVPWg/ZnVuY3Rpb24gU3plKGMpe2NvbnN0IGw9Yy50b3VjaGVzJiZjLnRvdWNoZXNbMF18fGMuY2hhbmdlZFRvdWNoZXMmJmMuY2hhbmdlZFRvdWNoZXNbMF07cmV0dXJuISghbHx8LTEhPT1sLmlkZW50aWZpZXJ8''@;'; put 'put ''fG51bGwhPWwucmFkaXVzWCYmMSE9PWwucmFkaXVzWHx8bnVsbCE9bC5yYWRpdXNZJiYxIT09bC5yYWRpdXNZKX0oYSk6ZnVuY3Rpb24gQ3plKGMpe3JldHVybiAwPT09Yy5idXR0b25zfHwwPT09Yy5kZXRhaWx9KGEpO2lmKE0mJk0uZHJhZ2dhYmxlJiYibW91c2Vkb3duIj09PWEudHlwZSYm''@;'; put 'put ''YS5wcmV2ZW50RGVmYXVsdCgpLGR8fGZ8fER8fFUpcmV0dXJuO2lmKHRoaXMuX2hhbmRsZXMubGVuZ3RoKXtjb25zdCB2ZT12LnN0eWxlO3RoaXMuX3Jvb3RFbGVtZW50VGFwSGlnaGxpZ2h0PXZlLndlYmtpdFRhcEhpZ2hsaWdodENvbG9yfHwiIix2ZS53ZWJraXRUYXBIaWdobGlnaHRDb2xv''@;'; put 'put ''cj0idHJhbnNwYXJlbnQifXRoaXMuX2hhc01vdmVkPSExLHRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZy5zZXQodGhpcy5faGFzTW92ZWQpLHRoaXMuX3JlbW92ZUxpc3RlbmVycygpLHRoaXMuX2luaXRpYWxEb21SZWN0PXRoaXMuX3Jvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgp''@;'; put 'put ''LHRoaXMuX3BvaW50ZXJNb3ZlU3Vic2NyaXB0aW9uPXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkucG9pbnRlck1vdmUuc3Vic2NyaWJlKHRoaXMuX3BvaW50ZXJNb3ZlKSx0aGlzLl9wb2ludGVyVXBTdWJzY3JpcHRpb249dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5wb2ludGVyVXAuc3Vic2NyaWJl''@;'; put 'put ''KHRoaXMuX3BvaW50ZXJVcCksdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc2Nyb2xsZWQodGhpcy5fZ2V0U2hhZG93Um9vdCgpKS5zdWJzY3JpYmUodmU9PnRoaXMuX3VwZGF0ZU9uU2Nyb2xsKHZlKSksdGhpcy5fYm91bmRhcnlFbGVtZW50JiYodGhp''@;'; put 'put ''cy5fYm91bmRhcnlSZWN0PSRLKHRoaXMuX2JvdW5kYXJ5RWxlbWVudCkpO2NvbnN0IHRlPXRoaXMuX3ByZXZpZXdUZW1wbGF0ZTt0aGlzLl9waWNrdXBQb3NpdGlvbkluRWxlbWVudD10ZSYmdGUudGVtcGxhdGUmJiF0ZS5tYXRjaFNpemU/e3g6MCx5OjB9OnRoaXMuX2dldFBvaW50ZXJQb3Np''@;'; put 'put ''dGlvbkluRWxlbWVudCh0aGlzLl9pbml0aWFsRG9tUmVjdCxsLGEpO2NvbnN0IG9lPXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlPXRoaXMuX2xhc3RLbm93blBvaW50ZXJQb3NpdGlvbj10aGlzLl9nZXRQb2ludGVyUG9zaXRpb25PblBhZ2UoYSk7dGhpcy5fcG9pbnRlckRpcmVjdGlvbkRl''@;'; put 'put ''bHRhPXt4OjAseTowfSx0aGlzLl9wb2ludGVyUG9zaXRpb25BdExhc3REaXJlY3Rpb25DaGFuZ2U9e3g6b2UueCx5Om9lLnl9LHRoaXMuX2RyYWdTdGFydFRpbWU9RGF0ZS5ub3coKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnN0YXJ0RHJhZ2dpbmcodGhpcyxhKX1fY2xlYW51cERyYWdBcnRp''@;'; put 'put ''ZmFjdHMobCl7TWZlKHRoaXMuX3Jvb3RFbGVtZW50LCEwLGtmZSksdGhpcy5fYW5jaG9yLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHRoaXMuX3Jvb3RFbGVtZW50LHRoaXMuX2FuY2hvciksdGhpcy5fZGVzdHJveVByZXZpZXcoKSx0aGlzLl9kZXN0cm95UGxhY2Vob2xkZXIoKSx0aGlzLl9p''@;'; put 'put ''bml0aWFsRG9tUmVjdD10aGlzLl9ib3VuZGFyeVJlY3Q9dGhpcy5fcHJldmlld1JlY3Q9dGhpcy5faW5pdGlhbFRyYW5zZm9ybT12b2lkIDAsdGhpcy5fbmdab25lLnJ1bigoKT0+e2NvbnN0IGE9dGhpcy5fZHJvcENvbnRhaW5lcixkPWEuZ2V0SXRlbUluZGV4KHRoaXMpLGg9dGhpcy5fZ2V0''@;'; put 'put ''UG9pbnRlclBvc2l0aW9uT25QYWdlKGwpLGY9dGhpcy5fZ2V0RHJhZ0Rpc3RhbmNlKGgpLHY9YS5faXNPdmVyQ29udGFpbmVyKGgueCxoLnkpO3RoaXMuZW5kZWQubmV4dCh7c291cmNlOnRoaXMsZGlzdGFuY2U6Zixkcm9wUG9pbnQ6aCxldmVudDpsfSksdGhpcy5kcm9wcGVkLm5leHQoe2l0''@;'; put 'put ''ZW06dGhpcyxjdXJyZW50SW5kZXg6ZCxwcmV2aW91c0luZGV4OnRoaXMuX2luaXRpYWxJbmRleCxjb250YWluZXI6YSxwcmV2aW91c0NvbnRhaW5lcjp0aGlzLl9pbml0aWFsQ29udGFpbmVyLGlzUG9pbnRlck92ZXJDb250YWluZXI6dixkaXN0YW5jZTpmLGRyb3BQb2ludDpoLGV2ZW50Omx9''@;'; put 'put ''KSxhLmRyb3AodGhpcyxkLHRoaXMuX2luaXRpYWxJbmRleCx0aGlzLl9pbml0aWFsQ29udGFpbmVyLHYsZixoLGwpLHRoaXMuX2Ryb3BDb250YWluZXI9dGhpcy5faW5pdGlhbENvbnRhaW5lcn0pfV91cGRhdGVBY3RpdmVEcm9wQ29udGFpbmVyKHt4OmwseTphfSx7eDpkLHk6aH0pe2xldCBm''@;'; put 'put ''PXRoaXMuX2luaXRpYWxDb250YWluZXIuX2dldFNpYmxpbmdDb250YWluZXJGcm9tUG9zaXRpb24odGhpcyxsLGEpOyFmJiZ0aGlzLl9kcm9wQ29udGFpbmVyIT09dGhpcy5faW5pdGlhbENvbnRhaW5lciYmdGhpcy5faW5pdGlhbENvbnRhaW5lci5faXNPdmVyQ29udGFpbmVyKGwsYSkmJihm''@;'; put 'put ''PXRoaXMuX2luaXRpYWxDb250YWluZXIpLGYmJmYhPT10aGlzLl9kcm9wQ29udGFpbmVyJiZ0aGlzLl9uZ1pvbmUucnVuKCgpPT57dGhpcy5leGl0ZWQubmV4dCh7aXRlbTp0aGlzLGNvbnRhaW5lcjp0aGlzLl9kcm9wQ29udGFpbmVyfSksdGhpcy5fZHJvcENvbnRhaW5lci5leGl0KHRoaXMp''@;'; put 'put ''LHRoaXMuX2Ryb3BDb250YWluZXI9Zix0aGlzLl9kcm9wQ29udGFpbmVyLmVudGVyKHRoaXMsbCxhLGY9PT10aGlzLl9pbml0aWFsQ29udGFpbmVyJiZmLnNvcnRpbmdEaXNhYmxlZD90aGlzLl9pbml0aWFsSW5kZXg6dm9pZCAwKSx0aGlzLmVudGVyZWQubmV4dCh7aXRlbTp0aGlzLGNvbnRh''@;'; put 'put ''aW5lcjpmLGN1cnJlbnRJbmRleDpmLmdldEl0ZW1JbmRleCh0aGlzKX0pfSksdGhpcy5pc0RyYWdnaW5nKCkmJih0aGlzLl9kcm9wQ29udGFpbmVyLl9zdGFydFNjcm9sbGluZ0lmTmVjZXNzYXJ5KGQsaCksdGhpcy5fZHJvcENvbnRhaW5lci5fc29ydEl0ZW0odGhpcyxsLGEsdGhpcy5fcG9p''@;'; put 'put ''bnRlckRpcmVjdGlvbkRlbHRhKSx0aGlzLmNvbnN0cmFpblBvc2l0aW9uP3RoaXMuX2FwcGx5UHJldmlld1RyYW5zZm9ybShsLGEpOnRoaXMuX2FwcGx5UHJldmlld1RyYW5zZm9ybShsLXRoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50LngsYS10aGlzLl9waWNrdXBQb3NpdGlvbkluRWxl''@;'; put 'put ''bWVudC55KSl9X2FuaW1hdGVQcmV2aWV3VG9QbGFjZWhvbGRlcigpe2lmKCF0aGlzLl9oYXNNb3ZlZClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Y29uc3QgbD10aGlzLl9wbGFjZWhvbGRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLl9wcmV2aWV3LmFkZENsYXNzKCJjZGstZHJh''@;'; put 'put ''Zy1hbmltYXRpbmciKSx0aGlzLl9hcHBseVByZXZpZXdUcmFuc2Zvcm0obC5sZWZ0LGwudG9wKTtjb25zdCBhPXRoaXMuX3ByZXZpZXcuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uKCk7cmV0dXJuIDA9PT1hP1Byb21pc2UucmVzb2x2ZSgpOnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigo''@;'; put 'put ''KT0+bmV3IFByb21pc2UoZD0+e2NvbnN0IGg9TT0+eyghTXx8dGhpcy5fcHJldmlldyYmVUYoTSk9PT10aGlzLl9wcmV2aWV3LmVsZW1lbnQmJiJ0cmFuc2Zvcm0iPT09TS5wcm9wZXJ0eU5hbWUpJiYodigpLGQoKSxjbGVhclRpbWVvdXQoZikpfSxmPXNldFRpbWVvdXQoaCwxLjUqYSksdj10''@;'; put 'put ''aGlzLl9wcmV2aWV3LmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLGgpfSkpfV9jcmVhdGVQbGFjZWhvbGRlckVsZW1lbnQoKXtjb25zdCBsPXRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGUsYT1sP2wudGVtcGxhdGU6bnVsbDtsZXQgZDtyZXR1cm4gYT8odGhpcy5fcGxhY2Vob2xk''@;'; put 'put ''ZXJSZWY9bC52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhhLGwuY29udGV4dCksdGhpcy5fcGxhY2Vob2xkZXJSZWYuZGV0ZWN0Q2hhbmdlcygpLGQ9U2ZlKHRoaXMuX3BsYWNlaG9sZGVyUmVmLHRoaXMuX2RvY3VtZW50KSk6ZD12ZmUodGhpcy5fcm9vdEVsZW1lbnQpLGQuc3R5''@;'; put 'put ''bGUucG9pbnRlckV2ZW50cz0ibm9uZSIsZC5jbGFzc0xpc3QuYWRkKCJjZGstZHJhZy1wbGFjZWhvbGRlciIpLGR9X2dldFBvaW50ZXJQb3NpdGlvbkluRWxlbWVudChsLGEsZCl7Y29uc3QgaD1hPT09dGhpcy5fcm9vdEVsZW1lbnQ/bnVsbDphLGY9aD9oLmdldEJvdW5kaW5nQ2xpZW50UmVj''@;'; put 'put ''dCgpOmwsdj1aVChkKT9kLnRhcmdldFRvdWNoZXNbMF06ZCxNPXRoaXMuX2dldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKTtyZXR1cm57eDpmLmxlZnQtbC5sZWZ0Kyh2LnBhZ2VYLWYubGVmdC1NLmxlZnQpLHk6Zi50b3AtbC50b3ArKHYucGFnZVktZi50b3AtTS50b3ApfX1fZ2V0UG9pbnRl''@;'; put 'put ''clBvc2l0aW9uT25QYWdlKGwpe2NvbnN0IGE9dGhpcy5fZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLGQ9WlQobCk/bC50b3VjaGVzWzBdfHxsLmNoYW5nZWRUb3VjaGVzWzBdfHx7cGFnZVg6MCxwYWdlWTowfTpsLGg9ZC5wYWdlWC1hLmxlZnQsZj1kLnBhZ2VZLWEudG9wO2lmKHRoaXMu''@;'; put 'put ''X293bmVyU1ZHRWxlbWVudCl7Y29uc3Qgdj10aGlzLl9vd25lclNWR0VsZW1lbnQuZ2V0U2NyZWVuQ1RNKCk7aWYodil7Y29uc3QgTT10aGlzLl9vd25lclNWR0VsZW1lbnQuY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gTS54PWgsTS55PWYsTS5tYXRyaXhUcmFuc2Zvcm0odi5pbnZlcnNlKCkp''@;'; put 'put ''fX1yZXR1cm57eDpoLHk6Zn19X2dldENvbnN0cmFpbmVkUG9pbnRlclBvc2l0aW9uKGwpe2NvbnN0IGE9dGhpcy5fZHJvcENvbnRhaW5lcj90aGlzLl9kcm9wQ29udGFpbmVyLmxvY2tBeGlzOm51bGw7bGV0e3g6ZCx5Omh9PXRoaXMuY29uc3RyYWluUG9zaXRpb24/dGhpcy5jb25zdHJhaW5Q''@;'; put 'put ''b3NpdGlvbihsLHRoaXMsdGhpcy5faW5pdGlhbERvbVJlY3QsdGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQpOmw7aWYoIngiPT09dGhpcy5sb2NrQXhpc3x8IngiPT09YT9oPXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLnktKHRoaXMuY29uc3RyYWluUG9zaXRpb24/dGhpcy5fcGlj''@;'; put 'put ''a3VwUG9zaXRpb25JbkVsZW1lbnQueTowKTooInkiPT09dGhpcy5sb2NrQXhpc3x8InkiPT09YSkmJihkPXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLngtKHRoaXMuY29uc3RyYWluUG9zaXRpb24/dGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQueDowKSksdGhpcy5fYm91bmRhcnlS''@;'; put 'put ''ZWN0KXtjb25zdHt4OmYseTp2fT10aGlzLmNvbnN0cmFpblBvc2l0aW9uP3t4OjAseTowfTp0aGlzLl9waWNrdXBQb3NpdGlvbkluRWxlbWVudCxNPXRoaXMuX2JvdW5kYXJ5UmVjdCx7d2lkdGg6RCxoZWlnaHQ6VX09dGhpcy5fZ2V0UHJldmlld1JlY3QoKSx0ZT1NLnRvcCt2LG9lPU0uYm90''@;'; put 'put ''dG9tLShVLXYpO2Q9RGZlKGQsTS5sZWZ0K2YsTS5yaWdodC0oRC1mKSksaD1EZmUoaCx0ZSxvZSl9cmV0dXJue3g6ZCx5Omh9fV91cGRhdGVQb2ludGVyRGlyZWN0aW9uRGVsdGEobCl7Y29uc3R7eDphLHk6ZH09bCxoPXRoaXMuX3BvaW50ZXJEaXJlY3Rpb25EZWx0YSxmPXRoaXMuX3BvaW50''@;'; put 'put ''ZXJQb3NpdGlvbkF0TGFzdERpcmVjdGlvbkNoYW5nZSx2PU1hdGguYWJzKGEtZi54KSxNPU1hdGguYWJzKGQtZi55KTtyZXR1cm4gdj50aGlzLl9jb25maWcucG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZCYmKGgueD1hPmYueD8xOi0xLGYueD1hKSxNPnRoaXMuX2NvbmZpZy5wb2lu''@;'; put 'put ''dGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkJiYoaC55PWQ+Zi55PzE6LTEsZi55PWQpLGh9X3RvZ2dsZU5hdGl2ZURyYWdJbnRlcmFjdGlvbnMoKXtpZighdGhpcy5fcm9vdEVsZW1lbnR8fCF0aGlzLl9oYW5kbGVzKXJldHVybjtjb25zdCBsPXRoaXMuX2hhbmRsZXMubGVuZ3RoPjB8fCF0''@;'; put 'put ''aGlzLmlzRHJhZ2dpbmcoKTtsIT09dGhpcy5fbmF0aXZlSW50ZXJhY3Rpb25zRW5hYmxlZCYmKHRoaXMuX25hdGl2ZUludGVyYWN0aW9uc0VuYWJsZWQ9bCxhdyh0aGlzLl9yb290RWxlbWVudCxsKSl9X3JlbW92ZVJvb3RFbGVtZW50TGlzdGVuZXJzKCl7dGhpcy5fcm9vdEVsZW1lbnRDbGVh''@;'; put 'put ''bnVwcz8uZm9yRWFjaChsPT5sKCkpLHRoaXMuX3Jvb3RFbGVtZW50Q2xlYW51cHM9dm9pZCAwfV9hcHBseVJvb3RFbGVtZW50VHJhbnNmb3JtKGwsYSl7Y29uc3QgZD0xL3RoaXMuc2NhbGUsaD1KRihsKmQsYSpkKSxmPXRoaXMuX3Jvb3RFbGVtZW50LnN0eWxlO251bGw9PXRoaXMuX2luaXRp''@;'; put 'put ''YWxUcmFuc2Zvcm0mJih0aGlzLl9pbml0aWFsVHJhbnNmb3JtPWYudHJhbnNmb3JtJiYibm9uZSIhPWYudHJhbnNmb3JtP2YudHJhbnNmb3JtOiIiKSxmLnRyYW5zZm9ybT1xRihoLHRoaXMuX2luaXRpYWxUcmFuc2Zvcm0pfV9hcHBseVByZXZpZXdUcmFuc2Zvcm0obCxhKXtjb25zdCBkPXRo''@;'; put 'put ''aXMuX3ByZXZpZXdUZW1wbGF0ZT8udGVtcGxhdGU/dm9pZCAwOnRoaXMuX2luaXRpYWxUcmFuc2Zvcm0saD1KRihsLGEpO3RoaXMuX3ByZXZpZXcuc2V0VHJhbnNmb3JtKHFGKGgsZCkpfV9nZXREcmFnRGlzdGFuY2UobCl7Y29uc3QgYT10aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZTtyZXR1''@;'; put 'put ''cm4gYT97eDpsLngtYS54LHk6bC55LWEueX06e3g6MCx5OjB9fV9jbGVhbnVwQ2FjaGVkRGltZW5zaW9ucygpe3RoaXMuX2JvdW5kYXJ5UmVjdD10aGlzLl9wcmV2aWV3UmVjdD12b2lkIDAsdGhpcy5fcGFyZW50UG9zaXRpb25zLmNsZWFyKCl9X2NvbnRhaW5JbnNpZGVCb3VuZGFyeU9uUmVz''@;'; put 'put ''aXplKCl7bGV0e3g6bCx5OmF9PXRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm07aWYoMD09PWwmJjA9PT1hfHx0aGlzLmlzRHJhZ2dpbmcoKXx8IXRoaXMuX2JvdW5kYXJ5RWxlbWVudClyZXR1cm47Y29uc3QgZD10aGlzLl9yb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoPXRoaXMu''@;'; put 'put ''X2JvdW5kYXJ5RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZigwPT09aC53aWR0aCYmMD09PWguaGVpZ2h0fHwwPT09ZC53aWR0aCYmMD09PWQuaGVpZ2h0KXJldHVybjtjb25zdCBmPWgubGVmdC1kLmxlZnQsdj1kLnJpZ2h0LWgucmlnaHQsTT1oLnRvcC1kLnRvcCxEPWQuYm90''@;'; put 'put ''dG9tLWguYm90dG9tO2gud2lkdGg+ZC53aWR0aD8oZj4wJiYobCs9Ziksdj4wJiYobC09dikpOmw9MCxoLmhlaWdodD5kLmhlaWdodD8oTT4wJiYoYSs9TSksRD4wJiYoYS09RCkpOmE9MCwobCE9PXRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueHx8YSE9PXRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0u''@;'; put 'put ''eSkmJnRoaXMuc2V0RnJlZURyYWdQb3NpdGlvbih7eTphLHg6bH0pfV9nZXREcmFnU3RhcnREZWxheShsKXtjb25zdCBhPXRoaXMuZHJhZ1N0YXJ0RGVsYXk7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBhP2E6WlQobCk/YS50b3VjaDphP2EubW91c2U6MH1fdXBkYXRlT25TY3JvbGwobCl7Y29u''@;'; put 'put ''c3QgYT10aGlzLl9wYXJlbnRQb3NpdGlvbnMuaGFuZGxlU2Nyb2xsKGwpO2lmKGEpe2NvbnN0IGQ9VUYobCk7dGhpcy5fYm91bmRhcnlSZWN0JiZkIT09dGhpcy5fYm91bmRhcnlFbGVtZW50JiZkLmNvbnRhaW5zKHRoaXMuX2JvdW5kYXJ5RWxlbWVudCkmJlVUKHRoaXMuX2JvdW5kYXJ5UmVj''@;'; put 'put ''dCxhLnRvcCxhLmxlZnQpLHRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLngrPWEubGVmdCx0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS55Kz1hLnRvcCx0aGlzLl9kcm9wQ29udGFpbmVyfHwodGhpcy5fYWN0aXZlVHJhbnNmb3JtLngtPWEubGVmdCx0aGlzLl9hY3RpdmVUcmFuc2Zvcm0u''@;'; put 'put ''eS09YS50b3AsdGhpcy5fYXBwbHlSb290RWxlbWVudFRyYW5zZm9ybSh0aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueCx0aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueSkpfX1fZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpe3JldHVybiB0aGlzLl9wYXJlbnRQb3NpdGlvbnMucG9zaXRpb25zLmdldCh0''@;'; put 'put ''aGlzLl9kb2N1bWVudCk/LnNjcm9sbFBvc2l0aW9ufHx0aGlzLl9wYXJlbnRQb3NpdGlvbnMuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpfV9nZXRTaGFkb3dSb290KCl7cmV0dXJuIHZvaWQgMD09PXRoaXMuX2NhY2hlZFNoYWRvd1Jvb3QmJih0aGlzLl9jYWNoZWRTaGFkb3dSb290PXpL''@;'; put 'put ''KHRoaXMuX3Jvb3RFbGVtZW50KSksdGhpcy5fY2FjaGVkU2hhZG93Um9vdH1fZ2V0UHJldmlld0luc2VydGlvblBvaW50KGwsYSl7Y29uc3QgZD10aGlzLl9wcmV2aWV3Q29udGFpbmVyfHwiZ2xvYmFsIjtpZigicGFyZW50Ij09PWQpcmV0dXJuIGw7aWYoImdsb2JhbCI9PT1kKXtjb25zdCBo''@;'; put 'put ''PXRoaXMuX2RvY3VtZW50O3JldHVybiBhfHxoLmZ1bGxzY3JlZW5FbGVtZW50fHxoLndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50fHxoLm1vekZ1bGxTY3JlZW5FbGVtZW50fHxoLm1zRnVsbHNjcmVlbkVsZW1lbnR8fGguYm9keX1yZXR1cm4gczYoZCl9X2dldFByZXZpZXdSZWN0KCl7cmV0dXJu''@;'; put 'put ''KCF0aGlzLl9wcmV2aWV3UmVjdHx8IXRoaXMuX3ByZXZpZXdSZWN0LndpZHRoJiYhdGhpcy5fcHJldmlld1JlY3QuaGVpZ2h0KSYmKHRoaXMuX3ByZXZpZXdSZWN0PXRoaXMuX3ByZXZpZXc/dGhpcy5fcHJldmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTp0aGlzLl9pbml0aWFsRG9tUmVj''@;'; put 'put ''dCksdGhpcy5fcHJldmlld1JlY3R9X25hdGl2ZURyYWdTdGFydD1sPT57aWYodGhpcy5faGFuZGxlcy5sZW5ndGgpe2NvbnN0IGE9dGhpcy5fZ2V0VGFyZ2V0SGFuZGxlKGwpO2EmJiF0aGlzLl9kaXNhYmxlZEhhbmRsZXMuaGFzKGEpJiYhdGhpcy5kaXNhYmxlZCYmbC5wcmV2ZW50RGVmYXVs''@;'; put 'put ''dCgpfWVsc2UgdGhpcy5kaXNhYmxlZHx8bC5wcmV2ZW50RGVmYXVsdCgpfTtfZ2V0VGFyZ2V0SGFuZGxlKGwpe3JldHVybiB0aGlzLl9oYW5kbGVzLmZpbmQoYT0+bC50YXJnZXQmJihsLnRhcmdldD09PWF8fGEuY29udGFpbnMobC50YXJnZXQpKSl9fWZ1bmN0aW9uIERmZShjLGwsYSl7cmV0''@;'; put 'put ''dXJuIE1hdGgubWF4KGwsTWF0aC5taW4oYSxjKSl9ZnVuY3Rpb24gWlQoYyl7cmV0dXJuInQiPT09Yy50eXBlWzBdfWZ1bmN0aW9uIG9VZShjKXtjLnByZXZlbnREZWZhdWx0KCl9ZnVuY3Rpb24gSksoYyxsLGEpe2NvbnN0IGQ9V1QobCxjLmxlbmd0aC0xKSxoPVdUKGEsYy5sZW5ndGgtMSk7''@;'; put 'put ''aWYoZD09PWgpcmV0dXJuO2NvbnN0IGY9Y1tkXSx2PWg8ZD8tMToxO2ZvcihsZXQgTT1kO00hPT1oO00rPXYpY1tNXT1jW00rdl07Y1toXT1mfWZ1bmN0aW9uIFdUKGMsbCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4obCxjKSl9Y2xhc3MgSWZle19kcmFnRHJvcFJlZ2lzdHJ5O19lbGVt''@;'; put 'put ''ZW50O19zb3J0UHJlZGljYXRlO19pdGVtUG9zaXRpb25zPVtdO19hY3RpdmVEcmFnZ2FibGVzO29yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI7ZGlyZWN0aW9uO2NvbnN0cnVjdG9yKGwpe3RoaXMuX2RyYWdEcm9wUmVnaXN0cnk9bH1fcHJldmlvdXNTd2FwPXtkcmFnOm51bGwsZGVsdGE6MCxvdmVy''@;'; put 'put ''bGFwczohMX07c3RhcnQobCl7dGhpcy53aXRoSXRlbXMobCl9c29ydChsLGEsZCxoKXtjb25zdCBmPXRoaXMuX2l0ZW1Qb3NpdGlvbnMsdj10aGlzLl9nZXRJdGVtSW5kZXhGcm9tUG9pbnRlclBvc2l0aW9uKGwsYSxkLGgpO2lmKC0xPT09diYmZi5sZW5ndGg+MClyZXR1cm4gbnVsbDtjb25z''@;'; put 'put ''dCBNPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24sRD1mLmZpbmRJbmRleChudD0+bnQuZHJhZz09PWwpLFU9Zlt2XSxvZT1VLmNsaWVudFJlY3QsdmU9RD52PzE6LTEsd2U9dGhpcy5fZ2V0SXRlbU9mZnNldFB4KGZbRF0uY2xpZW50UmVjdCxvZSx2ZSksRmU9dGhpcy5fZ2V0U2li''@;'; put 'put ''bGluZ09mZnNldFB4KEQsZix2ZSksV2U9Zi5zbGljZSgpO3JldHVybiBKSyhmLEQsdiksZi5mb3JFYWNoKChudCxkdCk9PntpZihXZVtkdF09PT1udClyZXR1cm47Y29uc3QgbXQ9bnQuZHJhZz09PWwsJHQ9bXQ/d2U6RmUsenQ9bXQ/bC5nZXRQbGFjZWhvbGRlckVsZW1lbnQoKTpudC5kcmFn''@;'; put 'put ''LmdldFJvb3RFbGVtZW50KCk7bnQub2Zmc2V0Kz0kdDtjb25zdCB5bj1NYXRoLnJvdW5kKG50Lm9mZnNldCooMS9udC5kcmFnLnNjYWxlKSk7TT8oenQuc3R5bGUudHJhbnNmb3JtPXFGKGB0cmFuc2xhdGUzZCgke3lufXB4LCAwLCAwKWAsbnQuaW5pdGlhbFRyYW5zZm9ybSksVVQobnQuY2xp''@;'; put 'put ''ZW50UmVjdCwwLCR0KSk6KHp0LnN0eWxlLnRyYW5zZm9ybT1xRihgdHJhbnNsYXRlM2QoMCwgJHt5bn1weCwgMClgLG50LmluaXRpYWxUcmFuc2Zvcm0pLFVUKG50LmNsaWVudFJlY3QsJHQsMCkpfSksdGhpcy5fcHJldmlvdXNTd2FwLm92ZXJsYXBzPUtLKG9lLGEsZCksdGhpcy5fcHJldmlv''@;'; put 'put ''dXNTd2FwLmRyYWc9VS5kcmFnLHRoaXMuX3ByZXZpb3VzU3dhcC5kZWx0YT1NP2gueDpoLnkse3ByZXZpb3VzSW5kZXg6RCxjdXJyZW50SW5kZXg6dn19ZW50ZXIobCxhLGQsaCl7Y29uc3QgZj1udWxsPT1ofHxoPDA/dGhpcy5fZ2V0SXRlbUluZGV4RnJvbVBvaW50ZXJQb3NpdGlvbihsLGEs''@;'; put 'put ''ZCk6aCx2PXRoaXMuX2FjdGl2ZURyYWdnYWJsZXMsTT12LmluZGV4T2YobCksRD1sLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpO2xldCBVPXZbZl07aWYoVT09PWwmJihVPXZbZisxXSksIVUmJihudWxsPT1mfHwtMT09PWZ8fGY8di5sZW5ndGgtMSkmJnRoaXMuX3Nob3VsZEVudGVyQXNGaXJz''@;'; put 'put ''dENoaWxkKGEsZCkmJihVPXZbMF0pLE0+LTEmJnYuc3BsaWNlKE0sMSksVSYmIXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuaXNEcmFnZ2luZyhVKSl7Y29uc3QgdGU9VS5nZXRSb290RWxlbWVudCgpO3RlLnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKEQsdGUpLHYuc3BsaWNlKGYsMCxsKX1l''@;'; put 'put ''bHNlIHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoRCksdi5wdXNoKGwpO0Quc3R5bGUudHJhbnNmb3JtPSIiLHRoaXMuX2NhY2hlSXRlbVBvc2l0aW9ucygpfXdpdGhJdGVtcyhsKXt0aGlzLl9hY3RpdmVEcmFnZ2FibGVzPWwuc2xpY2UoKSx0aGlzLl9jYWNoZUl0ZW1Qb3NpdGlvbnMoKX13''@;'; put 'put ''aXRoU29ydFByZWRpY2F0ZShsKXt0aGlzLl9zb3J0UHJlZGljYXRlPWx9cmVzZXQoKXt0aGlzLl9hY3RpdmVEcmFnZ2FibGVzPy5mb3JFYWNoKGw9Pntjb25zdCBhPWwuZ2V0Um9vdEVsZW1lbnQoKTtpZihhKXtjb25zdCBkPXRoaXMuX2l0ZW1Qb3NpdGlvbnMuZmluZChoPT5oLmRyYWc9PT1s''@;'; put 'put ''KT8uaW5pdGlhbFRyYW5zZm9ybTthLnN0eWxlLnRyYW5zZm9ybT1kfHwiIn19KSx0aGlzLl9pdGVtUG9zaXRpb25zPVtdLHRoaXMuX2FjdGl2ZURyYWdnYWJsZXM9W10sdGhpcy5fcHJldmlvdXNTd2FwLmRyYWc9bnVsbCx0aGlzLl9wcmV2aW91c1N3YXAuZGVsdGE9MCx0aGlzLl9wcmV2aW91''@;'; put 'put ''c1N3YXAub3ZlcmxhcHM9ITF9Z2V0QWN0aXZlSXRlbXNTbmFwc2hvdCgpe3JldHVybiB0aGlzLl9hY3RpdmVEcmFnZ2FibGVzfWdldEl0ZW1JbmRleChsKXtyZXR1cm4oImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbiYmInJ0bCI9PT10aGlzLmRpcmVjdGlvbj90aGlzLl9pdGVtUG9z''@;'; put 'put ''aXRpb25zLnNsaWNlKCkucmV2ZXJzZSgpOnRoaXMuX2l0ZW1Qb3NpdGlvbnMpLmZpbmRJbmRleChkPT5kLmRyYWc9PT1sKX11cGRhdGVPblNjcm9sbChsLGEpe3RoaXMuX2l0ZW1Qb3NpdGlvbnMuZm9yRWFjaCgoe2NsaWVudFJlY3Q6ZH0pPT57VVQoZCxsLGEpfSksdGhpcy5faXRlbVBvc2l0''@;'; put 'put ''aW9ucy5mb3JFYWNoKCh7ZHJhZzpkfSk9Pnt0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LmlzRHJhZ2dpbmcoZCkmJmQuX3NvcnRGcm9tTGFzdFBvaW50ZXJQb3NpdGlvbigpfSl9d2l0aEVsZW1lbnRDb250YWluZXIobCl7dGhpcy5fZWxlbWVudD1sfV9jYWNoZUl0ZW1Qb3NpdGlvbnMoKXtjb25z''@;'; put 'put ''dCBsPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb247dGhpcy5faXRlbVBvc2l0aW9ucz10aGlzLl9hY3RpdmVEcmFnZ2FibGVzLm1hcChhPT57Y29uc3QgZD1hLmdldFZpc2libGVFbGVtZW50KCk7cmV0dXJue2RyYWc6YSxvZmZzZXQ6MCxpbml0aWFsVHJhbnNmb3JtOmQuc3R5bGUu''@;'; put 'put ''dHJhbnNmb3JtfHwiIixjbGllbnRSZWN0OiRLKGQpfX0pLnNvcnQoKGEsZCk9Pmw/YS5jbGllbnRSZWN0LmxlZnQtZC5jbGllbnRSZWN0LmxlZnQ6YS5jbGllbnRSZWN0LnRvcC1kLmNsaWVudFJlY3QudG9wKX1fZ2V0SXRlbU9mZnNldFB4KGwsYSxkKXtjb25zdCBoPSJob3Jpem9udGFsIj09''@;'; put 'put ''PXRoaXMub3JpZW50YXRpb247bGV0IGY9aD9hLmxlZnQtbC5sZWZ0OmEudG9wLWwudG9wO3JldHVybi0xPT09ZCYmKGYrPWg/YS53aWR0aC1sLndpZHRoOmEuaGVpZ2h0LWwuaGVpZ2h0KSxmfV9nZXRTaWJsaW5nT2Zmc2V0UHgobCxhLGQpe2NvbnN0IGg9Imhvcml6b250YWwiPT09dGhpcy5v''@;'; put 'put ''cmllbnRhdGlvbixmPWFbbF0uY2xpZW50UmVjdCx2PWFbbCstMSpkXTtsZXQgTT1mW2g/IndpZHRoIjoiaGVpZ2h0Il0qZDtpZih2KXtjb25zdCBEPWg/ImxlZnQiOiJ0b3AiLFU9aD8icmlnaHQiOiJib3R0b20iOy0xPT09ZD9NLT12LmNsaWVudFJlY3RbRF0tZltVXTpNKz1mW0RdLXYuY2xp''@;'; put 'put ''ZW50UmVjdFtVXX1yZXR1cm4gTX1fc2hvdWxkRW50ZXJBc0ZpcnN0Q2hpbGQobCxhKXtpZighdGhpcy5fYWN0aXZlRHJhZ2dhYmxlcy5sZW5ndGgpcmV0dXJuITE7Y29uc3QgZD10aGlzLl9pdGVtUG9zaXRpb25zLGg9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbjtpZihkWzBdLmRy''@;'; put 'put ''YWchPT10aGlzLl9hY3RpdmVEcmFnZ2FibGVzWzBdKXtjb25zdCB2PWRbZC5sZW5ndGgtMV0uY2xpZW50UmVjdDtyZXR1cm4gaD9sPj12LnJpZ2h0OmE+PXYuYm90dG9tfXtjb25zdCB2PWRbMF0uY2xpZW50UmVjdDtyZXR1cm4gaD9sPD12LmxlZnQ6YTw9di50b3B9fV9nZXRJdGVtSW5kZXhG''@;'; put 'put ''cm9tUG9pbnRlclBvc2l0aW9uKGwsYSxkLGgpe2NvbnN0IGY9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbix2PXRoaXMuX2l0ZW1Qb3NpdGlvbnMuZmluZEluZGV4KCh7ZHJhZzpNLGNsaWVudFJlY3Q6RH0pPT5NIT09bCYmKCghaHx8TSE9PXRoaXMuX3ByZXZpb3VzU3dhcC5kcmFn''@;'; put 'put ''fHwhdGhpcy5fcHJldmlvdXNTd2FwLm92ZXJsYXBzfHwoZj9oLng6aC55KSE9PXRoaXMuX3ByZXZpb3VzU3dhcC5kZWx0YSkmJihmP2E+PU1hdGguZmxvb3IoRC5sZWZ0KSYmYTxNYXRoLmZsb29yKEQucmlnaHQpOmQ+PU1hdGguZmxvb3IoRC50b3ApJiZkPE1hdGguZmxvb3IoRC5ib3R0b20p''@;'; put 'put ''KSkpO3JldHVybi0xIT09diYmdGhpcy5fc29ydFByZWRpY2F0ZSh2LGwpP3Y6LTF9fWNsYXNzIGxVZXtfZG9jdW1lbnQ7X2RyYWdEcm9wUmVnaXN0cnk7X2VsZW1lbnQ7X3NvcnRQcmVkaWNhdGU7X3Jvb3ROb2RlO19hY3RpdmVJdGVtcztfcHJldmlvdXNTd2FwPXtkcmFnOm51bGwsZGVsdGFY''@;'; put 'put ''OjAsZGVsdGFZOjAsb3ZlcmxhcHM6ITF9O19yZWxhdGVkTm9kZXM9W107Y29uc3RydWN0b3IobCxhKXt0aGlzLl9kb2N1bWVudD1sLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnk9YX1zdGFydChsKXtjb25zdCBhPXRoaXMuX2VsZW1lbnQuY2hpbGROb2Rlczt0aGlzLl9yZWxhdGVkTm9kZXM9W107''@;'; put 'put ''Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspe2NvbnN0IGg9YVtkXTt0aGlzLl9yZWxhdGVkTm9kZXMucHVzaChbaCxoLm5leHRTaWJsaW5nXSl9dGhpcy53aXRoSXRlbXMobCl9c29ydChsLGEsZCxoKXtjb25zdCBmPXRoaXMuX2dldEl0ZW1JbmRleEZyb21Qb2ludGVyUG9zaXRpb24obCxh''@;'; put 'put ''LGQpLHY9dGhpcy5fcHJldmlvdXNTd2FwO2lmKC0xPT09Znx8dGhpcy5fYWN0aXZlSXRlbXNbZl09PT1sKXJldHVybiBudWxsO2NvbnN0IE09dGhpcy5fYWN0aXZlSXRlbXNbZl07aWYodi5kcmFnPT09TSYmdi5vdmVybGFwcyYmdi5kZWx0YVg9PT1oLngmJnYuZGVsdGFZPT09aC55KXJldHVy''@;'; put 'put ''biBudWxsO2NvbnN0IEQ9dGhpcy5nZXRJdGVtSW5kZXgobCksVT1sLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpLHRlPU0uZ2V0Um9vdEVsZW1lbnQoKTtmPkQ/dGUuYWZ0ZXIoVSk6dGUuYmVmb3JlKFUpLEpLKHRoaXMuX2FjdGl2ZUl0ZW1zLEQsZik7Y29uc3Qgb2U9dGhpcy5fZ2V0Um9vdE5v''@;'; put 'put ''ZGUoKS5lbGVtZW50RnJvbVBvaW50KGEsZCk7cmV0dXJuIHYuZGVsdGFYPWgueCx2LmRlbHRhWT1oLnksdi5kcmFnPU0sdi5vdmVybGFwcz10ZT09PW9lfHx0ZS5jb250YWlucyhvZSkse3ByZXZpb3VzSW5kZXg6RCxjdXJyZW50SW5kZXg6Zn19ZW50ZXIobCxhLGQsaCl7bGV0IGY9bnVsbD09''@;'; put 'put ''aHx8aDwwP3RoaXMuX2dldEl0ZW1JbmRleEZyb21Qb2ludGVyUG9zaXRpb24obCxhLGQpOmg7LTE9PT1mJiYoZj10aGlzLl9nZXRDbG9zZXN0SXRlbUluZGV4VG9Qb2ludGVyKGwsYSxkKSk7Y29uc3Qgdj10aGlzLl9hY3RpdmVJdGVtc1tmXSxNPXRoaXMuX2FjdGl2ZUl0ZW1zLmluZGV4T2Yo''@;'; put 'put ''bCk7TT4tMSYmdGhpcy5fYWN0aXZlSXRlbXMuc3BsaWNlKE0sMSksdiYmIXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuaXNEcmFnZ2luZyh2KT8odGhpcy5fYWN0aXZlSXRlbXMuc3BsaWNlKGYsMCxsKSx2LmdldFJvb3RFbGVtZW50KCkuYmVmb3JlKGwuZ2V0UGxhY2Vob2xkZXJFbGVtZW50KCkp''@;'; put 'put ''KToodGhpcy5fYWN0aXZlSXRlbXMucHVzaChsKSx0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGwuZ2V0UGxhY2Vob2xkZXJFbGVtZW50KCkpKX13aXRoSXRlbXMobCl7dGhpcy5fYWN0aXZlSXRlbXM9bC5zbGljZSgpfXdpdGhTb3J0UHJlZGljYXRlKGwpe3RoaXMuX3NvcnRQcmVkaWNhdGU9''@;'; put 'put ''bH1yZXNldCgpe2NvbnN0IGw9dGhpcy5fZWxlbWVudCxhPXRoaXMuX3ByZXZpb3VzU3dhcDtmb3IobGV0IGQ9dGhpcy5fcmVsYXRlZE5vZGVzLmxlbmd0aC0xO2Q+LTE7ZC0tKXtjb25zdFtoLGZdPXRoaXMuX3JlbGF0ZWROb2Rlc1tkXTtoLnBhcmVudE5vZGU9PT1sJiZoLm5leHRTaWJsaW5n''@;'; put 'put ''IT09ZiYmKG51bGw9PT1mP2wuYXBwZW5kQ2hpbGQoaCk6Zi5wYXJlbnROb2RlPT09bCYmbC5pbnNlcnRCZWZvcmUoaCxmKSl9dGhpcy5fcmVsYXRlZE5vZGVzPVtdLHRoaXMuX2FjdGl2ZUl0ZW1zPVtdLGEuZHJhZz1udWxsLGEuZGVsdGFYPWEuZGVsdGFZPTAsYS5vdmVybGFwcz0hMX1nZXRB''@;'; put 'put ''Y3RpdmVJdGVtc1NuYXBzaG90KCl7cmV0dXJuIHRoaXMuX2FjdGl2ZUl0ZW1zfWdldEl0ZW1JbmRleChsKXtyZXR1cm4gdGhpcy5fYWN0aXZlSXRlbXMuaW5kZXhPZihsKX11cGRhdGVPblNjcm9sbCgpe3RoaXMuX2FjdGl2ZUl0ZW1zLmZvckVhY2gobD0+e3RoaXMuX2RyYWdEcm9wUmVnaXN0''@;'; put 'put ''cnkuaXNEcmFnZ2luZyhsKSYmbC5fc29ydEZyb21MYXN0UG9pbnRlclBvc2l0aW9uKCl9KX13aXRoRWxlbWVudENvbnRhaW5lcihsKXtsIT09dGhpcy5fZWxlbWVudCYmKHRoaXMuX2VsZW1lbnQ9bCx0aGlzLl9yb290Tm9kZT12b2lkIDApfV9nZXRJdGVtSW5kZXhGcm9tUG9pbnRlclBvc2l0''@;'; put 'put ''aW9uKGwsYSxkKXtjb25zdCBoPXRoaXMuX2dldFJvb3ROb2RlKCkuZWxlbWVudEZyb21Qb2ludChNYXRoLmZsb29yKGEpLE1hdGguZmxvb3IoZCkpLGY9aD90aGlzLl9hY3RpdmVJdGVtcy5maW5kSW5kZXgodj0+e2NvbnN0IE09di5nZXRSb290RWxlbWVudCgpO3JldHVybiBoPT09TXx8TS5j''@;'; put 'put ''b250YWlucyhoKX0pOi0xO3JldHVybi0xIT09ZiYmdGhpcy5fc29ydFByZWRpY2F0ZShmLGwpP2Y6LTF9X2dldFJvb3ROb2RlKCl7cmV0dXJuIHRoaXMuX3Jvb3ROb2RlfHwodGhpcy5fcm9vdE5vZGU9eksodGhpcy5fZWxlbWVudCl8fHRoaXMuX2RvY3VtZW50KSx0aGlzLl9yb290Tm9kZX1f''@;'; put 'put ''Z2V0Q2xvc2VzdEl0ZW1JbmRleFRvUG9pbnRlcihsLGEsZCl7aWYoMD09PXRoaXMuX2FjdGl2ZUl0ZW1zLmxlbmd0aClyZXR1cm4tMTtpZigxPT09dGhpcy5fYWN0aXZlSXRlbXMubGVuZ3RoKXJldHVybiAwO2xldCBoPTEvMCxmPS0xO2ZvcihsZXQgdj0wO3Y8dGhpcy5fYWN0aXZlSXRlbXMu''@;'; put 'put ''bGVuZ3RoO3YrKyl7Y29uc3QgTT10aGlzLl9hY3RpdmVJdGVtc1t2XTtpZihNIT09bCl7Y29uc3R7eDpELHk6VX09TS5nZXRSb290RWxlbWVudCgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRlPU1hdGguaHlwb3QoYS1ELGQtVSk7dGU8aCYmKGg9dGUsZj12KX19cmV0dXJuIGZ9fXZhciBB''@;'; put 'put ''Zj1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5PTkU9MF09Ik5PTkUiLGNbYy5VUD0xXT0iVVAiLGNbYy5ET1dOPTJdPSJET1dOIixjfShBZnx8e30pLHdkPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTk9ORT0wXT0iTk9ORSIsY1tjLkxFRlQ9MV09IkxFRlQiLGNbYy5SSUdIVD0yXT0iUklHSFQi''@;'; put 'put ''LGN9KHdkfHx7fSk7Y2xhc3MgY1Vle19kcmFnRHJvcFJlZ2lzdHJ5O19uZ1pvbmU7X3ZpZXdwb3J0UnVsZXI7ZWxlbWVudDtkaXNhYmxlZD0hMTtzb3J0aW5nRGlzYWJsZWQ9ITE7bG9ja0F4aXM7YXV0b1Njcm9sbERpc2FibGVkPSExO2F1dG9TY3JvbGxTdGVwPTI7ZW50ZXJQcmVkaWNhdGU9''@;'; put 'put ''KCk9PiEwO3NvcnRQcmVkaWNhdGU9KCk9PiEwO2JlZm9yZVN0YXJ0ZWQ9bmV3IHVyO2VudGVyZWQ9bmV3IHVyO2V4aXRlZD1uZXcgdXI7ZHJvcHBlZD1uZXcgdXI7c29ydGVkPW5ldyB1cjtyZWNlaXZpbmdTdGFydGVkPW5ldyB1cjtyZWNlaXZpbmdTdG9wcGVkPW5ldyB1cjtkYXRhO19jb250''@;'; put 'put ''YWluZXI7X2lzRHJhZ2dpbmc9ITE7X3BhcmVudFBvc2l0aW9ucztfc29ydFN0cmF0ZWd5O19kb21SZWN0O19kcmFnZ2FibGVzPVtdO19zaWJsaW5ncz1bXTtfYWN0aXZlU2libGluZ3M9bmV3IFNldDtfdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb249QnQuRU1QVFk7X3ZlcnRpY2FsU2Nyb2xs''@;'; put 'put ''RGlyZWN0aW9uPUFmLk5PTkU7X2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb249d2QuTk9ORTtfc2Nyb2xsTm9kZTtfc3RvcFNjcm9sbFRpbWVycz1uZXcgdXI7X2NhY2hlZFNoYWRvd1Jvb3Q9bnVsbDtfZG9jdW1lbnQ7X3Njcm9sbGFibGVFbGVtZW50cz1bXTtfaW5pdGlhbFNjcm9sbFNuYXA7''@;'; put 'put ''X2RpcmVjdGlvbj0ibHRyIjtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3RoaXMuX2RyYWdEcm9wUmVnaXN0cnk9YSx0aGlzLl9uZ1pvbmU9aCx0aGlzLl92aWV3cG9ydFJ1bGVyPWY7Y29uc3Qgdj10aGlzLmVsZW1lbnQ9czYobCk7dGhpcy5fZG9jdW1lbnQ9ZCx0aGlzLndpdGhPcmllbnRhdGlv''@;'; put 'put ''bigidmVydGljYWwiKS53aXRoRWxlbWVudENvbnRhaW5lcih2KSxhLnJlZ2lzdGVyRHJvcENvbnRhaW5lcih0aGlzKSx0aGlzLl9wYXJlbnRQb3NpdGlvbnM9bmV3IENmZShkKX1kaXNwb3NlKCl7dGhpcy5fc3RvcFNjcm9sbGluZygpLHRoaXMuX3N0b3BTY3JvbGxUaW1lcnMuY29tcGxldGUo''@;'; put 'put ''KSx0aGlzLl92aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuYmVmb3JlU3RhcnRlZC5jb21wbGV0ZSgpLHRoaXMuZW50ZXJlZC5jb21wbGV0ZSgpLHRoaXMuZXhpdGVkLmNvbXBsZXRlKCksdGhpcy5kcm9wcGVkLmNvbXBsZXRlKCksdGhpcy5zb3J0ZWQuY29t''@;'; put 'put ''cGxldGUoKSx0aGlzLnJlY2VpdmluZ1N0YXJ0ZWQuY29tcGxldGUoKSx0aGlzLnJlY2VpdmluZ1N0b3BwZWQuY29tcGxldGUoKSx0aGlzLl9hY3RpdmVTaWJsaW5ncy5jbGVhcigpLHRoaXMuX3Njcm9sbE5vZGU9bnVsbCx0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2xlYXIoKSx0aGlzLl9kcmFn''@;'; put 'put ''RHJvcFJlZ2lzdHJ5LnJlbW92ZURyb3BDb250YWluZXIodGhpcyl9aXNEcmFnZ2luZygpe3JldHVybiB0aGlzLl9pc0RyYWdnaW5nfXN0YXJ0KCl7dGhpcy5fZHJhZ2dpbmdTdGFydGVkKCksdGhpcy5fbm90aWZ5UmVjZWl2aW5nU2libGluZ3MoKX1lbnRlcihsLGEsZCxoKXt0aGlzLl9kcmFn''@;'; put 'put ''Z2luZ1N0YXJ0ZWQoKSxudWxsPT1oJiZ0aGlzLnNvcnRpbmdEaXNhYmxlZCYmKGg9dGhpcy5fZHJhZ2dhYmxlcy5pbmRleE9mKGwpKSx0aGlzLl9zb3J0U3RyYXRlZ3kuZW50ZXIobCxhLGQsaCksdGhpcy5fY2FjaGVQYXJlbnRQb3NpdGlvbnMoKSx0aGlzLl9ub3RpZnlSZWNlaXZpbmdTaWJs''@;'; put 'put ''aW5ncygpLHRoaXMuZW50ZXJlZC5uZXh0KHtpdGVtOmwsY29udGFpbmVyOnRoaXMsY3VycmVudEluZGV4OnRoaXMuZ2V0SXRlbUluZGV4KGwpfSl9ZXhpdChsKXt0aGlzLl9yZXNldCgpLHRoaXMuZXhpdGVkLm5leHQoe2l0ZW06bCxjb250YWluZXI6dGhpc30pfWRyb3AobCxhLGQsaCxmLHYs''@;'; put 'put ''TSxEPXt9KXt0aGlzLl9yZXNldCgpLHRoaXMuZHJvcHBlZC5uZXh0KHtpdGVtOmwsY3VycmVudEluZGV4OmEscHJldmlvdXNJbmRleDpkLGNvbnRhaW5lcjp0aGlzLHByZXZpb3VzQ29udGFpbmVyOmgsaXNQb2ludGVyT3ZlckNvbnRhaW5lcjpmLGRpc3RhbmNlOnYsZHJvcFBvaW50Ok0sZXZl''@;'; put 'put ''bnQ6RH0pfXdpdGhJdGVtcyhsKXtjb25zdCBhPXRoaXMuX2RyYWdnYWJsZXM7cmV0dXJuIHRoaXMuX2RyYWdnYWJsZXM9bCxsLmZvckVhY2goZD0+ZC5fd2l0aERyb3BDb250YWluZXIodGhpcykpLHRoaXMuaXNEcmFnZ2luZygpJiYoYS5maWx0ZXIoaD0+aC5pc0RyYWdnaW5nKCkpLmV2ZXJ5''@;'; put 'put ''KGg9Pi0xPT09bC5pbmRleE9mKGgpKT90aGlzLl9yZXNldCgpOnRoaXMuX3NvcnRTdHJhdGVneS53aXRoSXRlbXModGhpcy5fZHJhZ2dhYmxlcykpLHRoaXN9d2l0aERpcmVjdGlvbihsKXtyZXR1cm4gdGhpcy5fZGlyZWN0aW9uPWwsdGhpcy5fc29ydFN0cmF0ZWd5IGluc3RhbmNlb2YgSWZl''@;'; put 'put ''JiYodGhpcy5fc29ydFN0cmF0ZWd5LmRpcmVjdGlvbj1sKSx0aGlzfWNvbm5lY3RlZFRvKGwpe3JldHVybiB0aGlzLl9zaWJsaW5ncz1sLnNsaWNlKCksdGhpc313aXRoT3JpZW50YXRpb24obCl7aWYoIm1peGVkIj09PWwpdGhpcy5fc29ydFN0cmF0ZWd5PW5ldyBsVWUodGhpcy5fZG9jdW1l''@;'; put 'put ''bnQsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeSk7ZWxzZXtjb25zdCBhPW5ldyBJZmUodGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeSk7YS5kaXJlY3Rpb249dGhpcy5fZGlyZWN0aW9uLGEub3JpZW50YXRpb249bCx0aGlzLl9zb3J0U3RyYXRlZ3k9YX1yZXR1cm4gdGhpcy5fc29ydFN0cmF0ZWd5Lndp''@;'; put 'put ''dGhFbGVtZW50Q29udGFpbmVyKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fc29ydFN0cmF0ZWd5LndpdGhTb3J0UHJlZGljYXRlKChhLGQpPT50aGlzLnNvcnRQcmVkaWNhdGUoYSxkLHRoaXMpKSx0aGlzfXdpdGhTY3JvbGxhYmxlUGFyZW50cyhsKXtjb25zdCBhPXRoaXMuX2NvbnRhaW5lcjty''@;'; put 'put ''ZXR1cm4gdGhpcy5fc2Nyb2xsYWJsZUVsZW1lbnRzPS0xPT09bC5pbmRleE9mKGEpP1thLC4uLmxdOmwuc2xpY2UoKSx0aGlzfXdpdGhFbGVtZW50Q29udGFpbmVyKGwpe2lmKGw9PT10aGlzLl9jb250YWluZXIpcmV0dXJuIHRoaXM7czYodGhpcy5lbGVtZW50KTtjb25zdCBkPXRoaXMuX3Nj''@;'; put 'put ''cm9sbGFibGVFbGVtZW50cy5pbmRleE9mKHRoaXMuX2NvbnRhaW5lciksaD10aGlzLl9zY3JvbGxhYmxlRWxlbWVudHMuaW5kZXhPZihsKTtyZXR1cm4gZD4tMSYmdGhpcy5fc2Nyb2xsYWJsZUVsZW1lbnRzLnNwbGljZShkLDEpLGg+LTEmJnRoaXMuX3Njcm9sbGFibGVFbGVtZW50cy5zcGxp''@;'; put 'put ''Y2UoaCwxKSx0aGlzLl9zb3J0U3RyYXRlZ3kmJnRoaXMuX3NvcnRTdHJhdGVneS53aXRoRWxlbWVudENvbnRhaW5lcihsKSx0aGlzLl9jYWNoZWRTaGFkb3dSb290PW51bGwsdGhpcy5fc2Nyb2xsYWJsZUVsZW1lbnRzLnVuc2hpZnQobCksdGhpcy5fY29udGFpbmVyPWwsdGhpc31nZXRTY3Jv''@;'; put 'put ''bGxhYmxlUGFyZW50cygpe3JldHVybiB0aGlzLl9zY3JvbGxhYmxlRWxlbWVudHN9Z2V0SXRlbUluZGV4KGwpe3JldHVybiB0aGlzLl9pc0RyYWdnaW5nP3RoaXMuX3NvcnRTdHJhdGVneS5nZXRJdGVtSW5kZXgobCk6dGhpcy5fZHJhZ2dhYmxlcy5pbmRleE9mKGwpfWlzUmVjZWl2aW5nKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuX2FjdGl2ZVNpYmxpbmdzLnNpemU+MH1fc29ydEl0ZW0obCxhLGQsaCl7aWYodGhpcy5zb3J0aW5nRGlzYWJsZWR8fCF0aGlzLl9kb21SZWN0fHwhd2ZlKHRoaXMuX2RvbVJlY3QsLjA1LGEsZCkpcmV0dXJuO2NvbnN0IGY9dGhpcy5fc29ydFN0cmF0ZWd5LnNvcnQobCxh''@;'; put 'put ''LGQsaCk7ZiYmdGhpcy5zb3J0ZWQubmV4dCh7cHJldmlvdXNJbmRleDpmLnByZXZpb3VzSW5kZXgsY3VycmVudEluZGV4OmYuY3VycmVudEluZGV4LGNvbnRhaW5lcjp0aGlzLGl0ZW06bH0pfV9zdGFydFNjcm9sbGluZ0lmTmVjZXNzYXJ5KGwsYSl7aWYodGhpcy5hdXRvU2Nyb2xsRGlzYWJs''@;'; put 'put ''ZWQpcmV0dXJuO2xldCBkLGg9QWYuTk9ORSxmPXdkLk5PTkU7aWYodGhpcy5fcGFyZW50UG9zaXRpb25zLnBvc2l0aW9ucy5mb3JFYWNoKCh2LE0pPT57TT09PXRoaXMuX2RvY3VtZW50fHwhdi5jbGllbnRSZWN0fHxkfHx3ZmUodi5jbGllbnRSZWN0LC4wNSxsLGEpJiYoW2gsZl09ZnVuY3Rp''@;'; put 'put ''b24gdVVlKGMsbCxhLGQsaCl7Y29uc3QgZj1PZmUobCxoKSx2PVBmZShsLGQpO2xldCBNPUFmLk5PTkUsRD13ZC5OT05FO2lmKGYpe2NvbnN0IFU9Yy5zY3JvbGxUb3A7Zj09PUFmLlVQP1U+MCYmKE09QWYuVVApOmMuc2Nyb2xsSGVpZ2h0LVU+Yy5jbGllbnRIZWlnaHQmJihNPUFmLkRPV04p''@;'; put 'put ''fWlmKHYpe2NvbnN0IFU9Yy5zY3JvbGxMZWZ0OyJydGwiPT09YT92PT09d2QuUklHSFQ/VTwwJiYoRD13ZC5SSUdIVCk6Yy5zY3JvbGxXaWR0aCtVPmMuY2xpZW50V2lkdGgmJihEPXdkLkxFRlQpOnY9PT13ZC5MRUZUP1U+MCYmKEQ9d2QuTEVGVCk6Yy5zY3JvbGxXaWR0aC1VPmMuY2xpZW50''@;'; put 'put ''V2lkdGgmJihEPXdkLlJJR0hUKX1yZXR1cm5bTSxEXX0oTSx2LmNsaWVudFJlY3QsdGhpcy5fZGlyZWN0aW9uLGwsYSksKGh8fGYpJiYoZD1NKSl9KSwhaCYmIWYpe2NvbnN0e3dpZHRoOnYsaGVpZ2h0Ok19PXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTaXplKCksRD17d2lkdGg6''@;'; put 'put ''dixoZWlnaHQ6TSx0b3A6MCxyaWdodDp2LGJvdHRvbTpNLGxlZnQ6MH07aD1PZmUoRCxhKSxmPVBmZShELGwpLGQ9d2luZG93fWQmJihoIT09dGhpcy5fdmVydGljYWxTY3JvbGxEaXJlY3Rpb258fGYhPT10aGlzLl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9ufHxkIT09dGhpcy5fc2Nyb2xs''@;'; put 'put ''Tm9kZSkmJih0aGlzLl92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbj1oLHRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb249Zix0aGlzLl9zY3JvbGxOb2RlPWQsKGh8fGYpJiZkP3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcih0aGlzLl9zdGFydFNjcm9sbEludGVydmFsKTp0aGlz''@;'; put 'put ''Ll9zdG9wU2Nyb2xsaW5nKCkpfV9zdG9wU2Nyb2xsaW5nKCl7dGhpcy5fc3RvcFNjcm9sbFRpbWVycy5uZXh0KCl9X2RyYWdnaW5nU3RhcnRlZCgpe2NvbnN0IGw9dGhpcy5fY29udGFpbmVyLnN0eWxlO3RoaXMuYmVmb3JlU3RhcnRlZC5uZXh0KCksdGhpcy5faXNEcmFnZ2luZz0hMCx0aGlz''@;'; put 'put ''Ll9pbml0aWFsU2Nyb2xsU25hcD1sLm1zU2Nyb2xsU25hcFR5cGV8fGwuc2Nyb2xsU25hcFR5cGV8fCIiLGwuc2Nyb2xsU25hcFR5cGU9bC5tc1Njcm9sbFNuYXBUeXBlPSJub25lIix0aGlzLl9zb3J0U3RyYXRlZ3kuc3RhcnQodGhpcy5fZHJhZ2dhYmxlcyksdGhpcy5fY2FjaGVQYXJlbnRQ''@;'; put 'put ''b3NpdGlvbnMoKSx0aGlzLl92aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2xpc3RlblRvU2Nyb2xsRXZlbnRzKCl9X2NhY2hlUGFyZW50UG9zaXRpb25zKCl7dGhpcy5fcGFyZW50UG9zaXRpb25zLmNhY2hlKHRoaXMuX3Njcm9sbGFibGVFbGVtZW50cyks''@;'; put 'put ''dGhpcy5fZG9tUmVjdD10aGlzLl9wYXJlbnRQb3NpdGlvbnMucG9zaXRpb25zLmdldCh0aGlzLl9jb250YWluZXIpLmNsaWVudFJlY3R9X3Jlc2V0KCl7dGhpcy5faXNEcmFnZ2luZz0hMTtjb25zdCBsPXRoaXMuX2NvbnRhaW5lci5zdHlsZTtsLnNjcm9sbFNuYXBUeXBlPWwubXNTY3JvbGxT''@;'; put 'put ''bmFwVHlwZT10aGlzLl9pbml0aWFsU2Nyb2xsU25hcCx0aGlzLl9zaWJsaW5ncy5mb3JFYWNoKGE9PmEuX3N0b3BSZWNlaXZpbmcodGhpcykpLHRoaXMuX3NvcnRTdHJhdGVneS5yZXNldCgpLHRoaXMuX3N0b3BTY3JvbGxpbmcoKSx0aGlzLl92aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbi51''@;'; put 'put ''bnN1YnNjcmliZSgpLHRoaXMuX3BhcmVudFBvc2l0aW9ucy5jbGVhcigpfV9zdGFydFNjcm9sbEludGVydmFsPSgpPT57dGhpcy5fc3RvcFNjcm9sbGluZygpLGZ1bmN0aW9uIGJ6ZShjPTAsbD1qRil7cmV0dXJuIGM8MCYmKGM9MCksbGZlKGMsYyxsKX0oMCxjZmUpLnBpcGUoTDEodGhpcy5f''@;'; put 'put ''c3RvcFNjcm9sbFRpbWVycykpLnN1YnNjcmliZSgoKT0+e2NvbnN0IGw9dGhpcy5fc2Nyb2xsTm9kZSxhPXRoaXMuYXV0b1Njcm9sbFN0ZXA7dGhpcy5fdmVydGljYWxTY3JvbGxEaXJlY3Rpb249PT1BZi5VUD9sLnNjcm9sbEJ5KDAsLWEpOnRoaXMuX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9u''@;'; put 'put ''PT09QWYuRE9XTiYmbC5zY3JvbGxCeSgwLGEpLHRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb249PT13ZC5MRUZUP2wuc2Nyb2xsQnkoLWEsMCk6dGhpcy5faG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbj09PXdkLlJJR0hUJiZsLnNjcm9sbEJ5KGEsMCl9KX07X2lzT3ZlckNvbnRhaW5l''@;'; put 'put ''cihsLGEpe3JldHVybiBudWxsIT10aGlzLl9kb21SZWN0JiZLSyh0aGlzLl9kb21SZWN0LGwsYSl9X2dldFNpYmxpbmdDb250YWluZXJGcm9tUG9zaXRpb24obCxhLGQpe3JldHVybiB0aGlzLl9zaWJsaW5ncy5maW5kKGg9PmguX2NhblJlY2VpdmUobCxhLGQpKX1fY2FuUmVjZWl2ZShsLGEs''@;'; put 'put ''ZCl7aWYoIXRoaXMuX2RvbVJlY3R8fCFLSyh0aGlzLl9kb21SZWN0LGEsZCl8fCF0aGlzLmVudGVyUHJlZGljYXRlKGwsdGhpcykpcmV0dXJuITE7Y29uc3QgaD10aGlzLl9nZXRTaGFkb3dSb290KCkuZWxlbWVudEZyb21Qb2ludChhLGQpO3JldHVybiEhaCYmKGg9PT10aGlzLl9jb250YWlu''@;'; put 'put ''ZXJ8fHRoaXMuX2NvbnRhaW5lci5jb250YWlucyhoKSl9X3N0YXJ0UmVjZWl2aW5nKGwsYSl7Y29uc3QgZD10aGlzLl9hY3RpdmVTaWJsaW5nczshZC5oYXMobCkmJmEuZXZlcnkoaD0+dGhpcy5lbnRlclByZWRpY2F0ZShoLHRoaXMpfHx0aGlzLl9kcmFnZ2FibGVzLmluZGV4T2YoaCk+LTEp''@;'; put 'put ''JiYoZC5hZGQobCksdGhpcy5fY2FjaGVQYXJlbnRQb3NpdGlvbnMoKSx0aGlzLl9saXN0ZW5Ub1Njcm9sbEV2ZW50cygpLHRoaXMucmVjZWl2aW5nU3RhcnRlZC5uZXh0KHtpbml0aWF0b3I6bCxyZWNlaXZlcjp0aGlzLGl0ZW1zOmF9KSl9X3N0b3BSZWNlaXZpbmcobCl7dGhpcy5fYWN0aXZl''@;'; put 'put ''U2libGluZ3MuZGVsZXRlKGwpLHRoaXMuX3ZpZXdwb3J0U2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5yZWNlaXZpbmdTdG9wcGVkLm5leHQoe2luaXRpYXRvcjpsLHJlY2VpdmVyOnRoaXN9KX1fbGlzdGVuVG9TY3JvbGxFdmVudHMoKXt0aGlzLl92aWV3cG9ydFNjcm9s''@;'; put 'put ''bFN1YnNjcmlwdGlvbj10aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnNjcm9sbGVkKHRoaXMuX2dldFNoYWRvd1Jvb3QoKSkuc3Vic2NyaWJlKGw9PntpZih0aGlzLmlzRHJhZ2dpbmcoKSl7Y29uc3QgYT10aGlzLl9wYXJlbnRQb3NpdGlvbnMuaGFuZGxlU2Nyb2xsKGwpO2EmJnRoaXMuX3NvcnRT''@;'; put 'put ''dHJhdGVneS51cGRhdGVPblNjcm9sbChhLnRvcCxhLmxlZnQpfWVsc2UgdGhpcy5pc1JlY2VpdmluZygpJiZ0aGlzLl9jYWNoZVBhcmVudFBvc2l0aW9ucygpfSl9X2dldFNoYWRvd1Jvb3QoKXtpZighdGhpcy5fY2FjaGVkU2hhZG93Um9vdCl7Y29uc3QgbD16Syh0aGlzLl9jb250YWluZXIp''@;'; put 'put ''O3RoaXMuX2NhY2hlZFNoYWRvd1Jvb3Q9bHx8dGhpcy5fZG9jdW1lbnR9cmV0dXJuIHRoaXMuX2NhY2hlZFNoYWRvd1Jvb3R9X25vdGlmeVJlY2VpdmluZ1NpYmxpbmdzKCl7Y29uc3QgbD10aGlzLl9zb3J0U3RyYXRlZ3kuZ2V0QWN0aXZlSXRlbXNTbmFwc2hvdCgpLmZpbHRlcihhPT5hLmlz''@;'; put 'put ''RHJhZ2dpbmcoKSk7dGhpcy5fc2libGluZ3MuZm9yRWFjaChhPT5hLl9zdGFydFJlY2VpdmluZyh0aGlzLGwpKX19ZnVuY3Rpb24gT2ZlKGMsbCl7Y29uc3R7dG9wOmEsYm90dG9tOmQsaGVpZ2h0Omh9PWMsZj0uMDUqaDtyZXR1cm4gbD49YS1mJiZsPD1hK2Y/QWYuVVA6bD49ZC1mJiZsPD1k''@;'; put 'put ''K2Y/QWYuRE9XTjpBZi5OT05FfWZ1bmN0aW9uIFBmZShjLGwpe2NvbnN0e2xlZnQ6YSxyaWdodDpkLHdpZHRoOmh9PWMsZj0uMDUqaDtyZXR1cm4gbD49YS1mJiZsPD1hK2Y/d2QuTEVGVDpsPj1kLWYmJmw8PWQrZj93ZC5SSUdIVDp3ZC5OT05FfWNvbnN0IFlUPXtjYXB0dXJlOiEwfSxRSz17''@;'; put 'put ''cGFzc2l2ZTohMSxjYXB0dXJlOiEwfTtsZXQgZFVlPSgoKT0+e2NsYXNzIGN7c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1Y21wPWFyKHt0eXBlOmMsc2VsZWN0b3JzOltbIm5nLWNvbXBvbmVudCJdXSxob3N0QXR0cnM6WyJjZGst''@;'; put 'put ''ZHJhZy1yZXNldHMtY29udGFpbmVyIiwiIl0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXt9LHN0eWxlczpbIkBsYXllciBjZGstcmVzZXRzey5jZGstZHJhZy1wcmV2aWV3e2JhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtwYWRkaW5nOjA7Y29sb3I6aW5oZXJpdDtp''@;'; put 'put ''bnNldDphdXRvfX0uY2RrLWRyYWctcGxhY2Vob2xkZXIgKiwuY2RrLWRyYWctcHJldmlldyAqe3BvaW50ZXItZXZlbnRzOm5vbmUgIWltcG9ydGFudH1cbiJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pfXJldHVybiBjfSkoKSxlWD0oKCk9PntjbGFzcyBje19uZ1pvbmU9''@;'; put 'put ''Sm4oWGEpO19kb2N1bWVudD1KbihHcyk7X3N0eWxlTG9hZGVyPUpuKGlmZSk7X3JlbmRlcmVyPUpuKGVjKS5jcmVhdGVSZW5kZXJlcihudWxsLG51bGwpO19jbGVhbnVwRG9jdW1lbnRUb3VjaG1vdmU7X2Ryb3BJbnN0YW5jZXM9bmV3IFNldDtfZHJhZ0luc3RhbmNlcz1uZXcgU2V0O19hY3Rp''@;'; put 'put ''dmVEcmFnSW5zdGFuY2VzPW5oKFtdKTtfZ2xvYmFsTGlzdGVuZXJzO19kcmFnZ2luZ1ByZWRpY2F0ZT1hPT5hLmlzRHJhZ2dpbmcoKTtfZG9tTm9kZXNUb0RpcmVjdGl2ZXM9bnVsbDtwb2ludGVyTW92ZT1uZXcgdXI7cG9pbnRlclVwPW5ldyB1cjtzY3JvbGw9bmV3IHVyO2NvbnN0cnVjdG9y''@;'; put 'put ''KCl7fXJlZ2lzdGVyRHJvcENvbnRhaW5lcihhKXt0aGlzLl9kcm9wSW5zdGFuY2VzLmhhcyhhKXx8dGhpcy5fZHJvcEluc3RhbmNlcy5hZGQoYSl9cmVnaXN0ZXJEcmFnSXRlbShhKXt0aGlzLl9kcmFnSW5zdGFuY2VzLmFkZChhKSwxPT09dGhpcy5fZHJhZ0luc3RhbmNlcy5zaXplJiZ0aGlz''@;'; put 'put ''Ll9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9jbGVhbnVwRG9jdW1lbnRUb3VjaG1vdmU/LigpLHRoaXMuX2NsZWFudXBEb2N1bWVudFRvdWNobW92ZT1DOSh0aGlzLl9yZW5kZXJlcix0aGlzLl9kb2N1bWVudCwidG91Y2htb3ZlIix0aGlzLl9wZXJzaXN0ZW50VG91Y2ht''@;'; put 'put ''b3ZlTGlzdGVuZXIsUUspfSl9cmVtb3ZlRHJvcENvbnRhaW5lcihhKXt0aGlzLl9kcm9wSW5zdGFuY2VzLmRlbGV0ZShhKX1yZW1vdmVEcmFnSXRlbShhKXt0aGlzLl9kcmFnSW5zdGFuY2VzLmRlbGV0ZShhKSx0aGlzLnN0b3BEcmFnZ2luZyhhKSwwPT09dGhpcy5fZHJhZ0luc3RhbmNlcy5z''@;'; put 'put ''aXplJiZ0aGlzLl9jbGVhbnVwRG9jdW1lbnRUb3VjaG1vdmU/LigpfXN0YXJ0RHJhZ2dpbmcoYSxkKXtpZighKHRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMoKS5pbmRleE9mKGEpPi0xKSYmKHRoaXMuX3N0eWxlTG9hZGVyLmxvYWQoZFVlKSx0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLnVw''@;'; put 'put ''ZGF0ZShoPT5bLi4uaCxhXSksMT09PXRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMoKS5sZW5ndGgpKXtjb25zdCBoPWQudHlwZS5zdGFydHNXaXRoKCJ0b3VjaCIpLGY9TT0+dGhpcy5wb2ludGVyVXAubmV4dChNKSx2PVtbInNjcm9sbCIsTT0+dGhpcy5zY3JvbGwubmV4dChNKSxZVF0sWyJz''@;'; put 'put ''ZWxlY3RzdGFydCIsdGhpcy5fcHJldmVudERlZmF1bHRXaGlsZURyYWdnaW5nLFFLXV07aD92LnB1c2goWyJ0b3VjaGVuZCIsZixZVF0sWyJ0b3VjaGNhbmNlbCIsZixZVF0pOnYucHVzaChbIm1vdXNldXAiLGYsWVRdKSxofHx2LnB1c2goWyJtb3VzZW1vdmUiLE09PnRoaXMucG9pbnRlck1v''@;'; put 'put ''dmUubmV4dChNKSxRS10pLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2dsb2JhbExpc3RlbmVycz12Lm1hcCgoW00sRCxVXSk9PkM5KHRoaXMuX3JlbmRlcmVyLHRoaXMuX2RvY3VtZW50LE0sRCxVKSl9KX19c3RvcERyYWdnaW5nKGEpe3RoaXMuX2FjdGl2ZURy''@;'; put 'put ''YWdJbnN0YW5jZXMudXBkYXRlKGQ9Pntjb25zdCBoPWQuaW5kZXhPZihhKTtyZXR1cm4gaD4tMT8oZC5zcGxpY2UoaCwxKSxbLi4uZF0pOmR9KSwwPT09dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcygpLmxlbmd0aCYmdGhpcy5fY2xlYXJHbG9iYWxMaXN0ZW5lcnMoKX1pc0RyYWdnaW5nKGEp''@;'; put 'put ''e3JldHVybiB0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzKCkuaW5kZXhPZihhKT4tMX1zY3JvbGxlZChhKXtjb25zdCBkPVt0aGlzLnNjcm9sbF07cmV0dXJuIGEmJmEhPT10aGlzLl9kb2N1bWVudCYmZC5wdXNoKG5ldyBSaShoPT50aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9''@;'; put 'put ''Pntjb25zdCBmPUM5KHRoaXMuX3JlbmRlcmVyLGEsInNjcm9sbCIsdj0+e3RoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMoKS5sZW5ndGgmJmgubmV4dCh2KX0sWVQpO3JldHVybigpPT57ZigpfX0pKSksSFQoLi4uZCl9cmVnaXN0ZXJEaXJlY3RpdmVOb2RlKGEsZCl7dGhpcy5fZG9tTm9kZXNU''@;'; put 'put ''b0RpcmVjdGl2ZXM/Pz1uZXcgV2Vha01hcCx0aGlzLl9kb21Ob2Rlc1RvRGlyZWN0aXZlcy5zZXQoYSxkKX1yZW1vdmVEaXJlY3RpdmVOb2RlKGEpe3RoaXMuX2RvbU5vZGVzVG9EaXJlY3RpdmVzPy5kZWxldGUoYSl9Z2V0RHJhZ0RpcmVjdGl2ZUZvck5vZGUoYSl7cmV0dXJuIHRoaXMuX2Rv''@;'; put 'put ''bU5vZGVzVG9EaXJlY3RpdmVzPy5nZXQoYSl8fG51bGx9bmdPbkRlc3Ryb3koKXt0aGlzLl9kcmFnSW5zdGFuY2VzLmZvckVhY2goYT0+dGhpcy5yZW1vdmVEcmFnSXRlbShhKSksdGhpcy5fZHJvcEluc3RhbmNlcy5mb3JFYWNoKGE9PnRoaXMucmVtb3ZlRHJvcENvbnRhaW5lcihhKSksdGhp''@;'; put 'put ''cy5fZG9tTm9kZXNUb0RpcmVjdGl2ZXM9bnVsbCx0aGlzLl9jbGVhckdsb2JhbExpc3RlbmVycygpLHRoaXMucG9pbnRlck1vdmUuY29tcGxldGUoKSx0aGlzLnBvaW50ZXJVcC5jb21wbGV0ZSgpfV9wcmV2ZW50RGVmYXVsdFdoaWxlRHJhZ2dpbmc9YT0+e3RoaXMuX2FjdGl2ZURyYWdJbnN0''@;'; put 'put ''YW5jZXMoKS5sZW5ndGg+MCYmYS5wcmV2ZW50RGVmYXVsdCgpfTtfcGVyc2lzdGVudFRvdWNobW92ZUxpc3RlbmVyPWE9Pnt0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzKCkubGVuZ3RoPjAmJih0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzKCkuc29tZSh0aGlzLl9kcmFnZ2luZ1ByZWRpY2F0''@;'; put 'put ''ZSkmJmEucHJldmVudERlZmF1bHQoKSx0aGlzLnBvaW50ZXJNb3ZlLm5leHQoYSkpfTtfY2xlYXJHbG9iYWxMaXN0ZW5lcnMoKXt0aGlzLl9nbG9iYWxMaXN0ZW5lcnM/LmZvckVhY2goYT0+YSgpKSx0aGlzLl9nbG9iYWxMaXN0ZW5lcnM9dm9pZCAwfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKTtjb25zdCBoVWU9e2RyYWdTdGFydFRocmVzaG9sZDo1LHBvaW50ZXJEaXJlY3Rpb25DaGFuZ2VUaHJl''@;'; put 'put ''c2hvbGQ6NX07bGV0IFFGPSgoKT0+e2NsYXNzIGN7X2RvY3VtZW50PUpuKEdzKTtfbmdab25lPUpuKFhhKTtfdmlld3BvcnRSdWxlcj1KbihLRik7X2RyYWdEcm9wUmVnaXN0cnk9Sm4oZVgpO19yZW5kZXJlcj1KbihlYykuY3JlYXRlUmVuZGVyZXIobnVsbCxudWxsKTtjb25zdHJ1Y3Rvcigp''@;'; put 'put ''e31jcmVhdGVEcmFnKGEsZD1oVWUpe3JldHVybiBuZXcgYVVlKGEsZCx0aGlzLl9kb2N1bWVudCx0aGlzLl9uZ1pvbmUsdGhpcy5fdmlld3BvcnRSdWxlcix0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LHRoaXMuX3JlbmRlcmVyKX1jcmVhdGVEcm9wTGlzdChhKXtyZXR1cm4gbmV3IGNVZShhLHRo''@;'; put 'put ''aXMuX2RyYWdEcm9wUmVnaXN0cnksdGhpcy5fZG9jdW1lbnQsdGhpcy5fbmdab25lLHRoaXMuX3ZpZXdwb3J0UnVsZXIpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZh''@;'; put 'put ''Yyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKTtjb25zdCBHVD1uZXcgam4oIkNES19EUkFHX1BBUkVOVCIpLEZmZT1uZXcgam4oIkNka0RyYWdIYW5kbGUiKTtsZXQgSGZlPSgoKT0+e2NsYXNzIGN7ZWxlbWVudD1KbihuYSk7X3BhcmVudERyYWc9Sm4oR1Qse29wdGlvbmFsOiEw''@;'; put 'put ''LHNraXBTZWxmOiEwfSk7X2RyYWdEcm9wUmVnaXN0cnk9Sm4oZVgpO19zdGF0ZUNoYW5nZXM9bmV3IHVyO2dldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoYSl7dGhpcy5fZGlzYWJsZWQ9YSx0aGlzLl9zdGF0ZUNoYW5nZXMubmV4dCh0aGlzKX1fZGlz''@;'; put 'put ''YWJsZWQ9ITE7Y29uc3RydWN0b3IoKXt0aGlzLl9wYXJlbnREcmFnPy5fYWRkSGFuZGxlKHRoaXMpfW5nQWZ0ZXJWaWV3SW5pdCgpe2lmKCF0aGlzLl9wYXJlbnREcmFnKXtsZXQgYT10aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50O2Zvcig7YTspe2NvbnN0IGQ9dGhp''@;'; put 'put ''cy5fZHJhZ0Ryb3BSZWdpc3RyeS5nZXREcmFnRGlyZWN0aXZlRm9yTm9kZShhKTtpZihkKXt0aGlzLl9wYXJlbnREcmFnPWQsZC5fYWRkSGFuZGxlKHRoaXMpO2JyZWFrfWE9YS5wYXJlbnRFbGVtZW50fX19bmdPbkRlc3Ryb3koKXt0aGlzLl9wYXJlbnREcmFnPy5fcmVtb3ZlSGFuZGxlKHRo''@;'; put 'put ''aXMpLHRoaXMuX3N0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NWRpcj1Zcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtEcmFnSGFuZGxlIiwiIl1dLGhvc3RBdHRyczpbMSwiY2RrLWRy''@;'; put 'put ''YWctaGFuZGxlIl0saW5wdXRzOntkaXNhYmxlZDpbMiwiY2RrRHJhZ0hhbmRsZURpc2FibGVkIiwiZGlzYWJsZWQiLEkxXX0sZmVhdHVyZXM6W2hhKFt7cHJvdmlkZTpGZmUsdXNlRXhpc3Rpbmc6Y31dKV19KX1yZXR1cm4gY30pKCk7Y29uc3QgdFg9bmV3IGpuKCJDREtfRFJBR19DT05GSUci''@;'; put 'put ''KSxuWD1uZXcgam4oIkNka0Ryb3BMaXN0Iik7bGV0IHJYPSgoKT0+e2NsYXNzIGN7ZWxlbWVudD1KbihuYSk7ZHJvcENvbnRhaW5lcj1KbihuWCx7b3B0aW9uYWw6ITAsc2tpcFNlbGY6ITB9KTtfbmdab25lPUpuKFhhKTtfdmlld0NvbnRhaW5lclJlZj1KbihiZSk7X2Rpcj1Kbihydyx7b3B0''@;'; put 'put ''aW9uYWw6ITB9KTtfY2hhbmdlRGV0ZWN0b3JSZWY9Sm4oSHMpO19zZWxmSGFuZGxlPUpuKEZmZSx7b3B0aW9uYWw6ITAsc2VsZjohMH0pO19wYXJlbnREcmFnPUpuKEdULHtvcHRpb25hbDohMCxza2lwU2VsZjohMH0pO19kcmFnRHJvcFJlZ2lzdHJ5PUpuKGVYKTtfZGVzdHJveWVkPW5ldyB1''@;'; put 'put ''cjtfaGFuZGxlcz1uZXcgTWkoW10pO19wcmV2aWV3VGVtcGxhdGU7X3BsYWNlaG9sZGVyVGVtcGxhdGU7X2RyYWdSZWY7ZGF0YTtsb2NrQXhpcztyb290RWxlbWVudFNlbGVjdG9yO2JvdW5kYXJ5RWxlbWVudDtkcmFnU3RhcnREZWxheTtmcmVlRHJhZ1Bvc2l0aW9uO2dldCBkaXNhYmxlZCgp''@;'; put 'put ''e3JldHVybiB0aGlzLl9kaXNhYmxlZHx8ISghdGhpcy5kcm9wQ29udGFpbmVyfHwhdGhpcy5kcm9wQ29udGFpbmVyLmRpc2FibGVkKX1zZXQgZGlzYWJsZWQoYSl7dGhpcy5fZGlzYWJsZWQ9YSx0aGlzLl9kcmFnUmVmLmRpc2FibGVkPXRoaXMuX2Rpc2FibGVkfV9kaXNhYmxlZDtjb25zdHJh''@;'; put 'put ''aW5Qb3NpdGlvbjtwcmV2aWV3Q2xhc3M7cHJldmlld0NvbnRhaW5lcjtzY2FsZT0xO3N0YXJ0ZWQ9bmV3IFhyO3JlbGVhc2VkPW5ldyBYcjtlbmRlZD1uZXcgWHI7ZW50ZXJlZD1uZXcgWHI7ZXhpdGVkPW5ldyBYcjtkcm9wcGVkPW5ldyBYcjttb3ZlZD1uZXcgUmkoYT0+e2NvbnN0IGQ9dGhp''@;'; put 'put ''cy5fZHJhZ1JlZi5tb3ZlZC5waXBlKFlhKGg9Pih7c291cmNlOnRoaXMscG9pbnRlclBvc2l0aW9uOmgucG9pbnRlclBvc2l0aW9uLGV2ZW50OmguZXZlbnQsZGVsdGE6aC5kZWx0YSxkaXN0YW5jZTpoLmRpc3RhbmNlfSkpKS5zdWJzY3JpYmUoYSk7cmV0dXJuKCk9PntkLnVuc3Vic2NyaWJl''@;'; put 'put ''KCl9fSk7X2luamVjdG9yPUpuKFlvKTtjb25zdHJ1Y3Rvcigpe2NvbnN0IGE9dGhpcy5kcm9wQ29udGFpbmVyLGQ9Sm4odFgse29wdGlvbmFsOiEwfSksaD1KbihRRik7dGhpcy5fZHJhZ1JlZj1oLmNyZWF0ZURyYWcodGhpcy5lbGVtZW50LHtkcmFnU3RhcnRUaHJlc2hvbGQ6ZCYmbnVsbCE9''@;'; put 'put ''ZC5kcmFnU3RhcnRUaHJlc2hvbGQ/ZC5kcmFnU3RhcnRUaHJlc2hvbGQ6NSxwb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkOmQmJm51bGwhPWQucG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZD9kLnBvaW50ZXJEaXJlY3Rpb25DaGFuZ2VUaHJlc2hvbGQ6NSx6SW5kZXg6ZD8u''@;'; put 'put ''ekluZGV4fSksdGhpcy5fZHJhZ1JlZi5kYXRhPXRoaXMsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5yZWdpc3RlckRpcmVjdGl2ZU5vZGUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsdGhpcyksZCYmdGhpcy5fYXNzaWduRGVmYXVsdHMoZCksYSYmKHRoaXMuX2RyYWdSZWYuX3dpdGhEcm9w''@;'; put 'put ''Q29udGFpbmVyKGEuX2Ryb3BMaXN0UmVmKSxhLmFkZEl0ZW0odGhpcyksYS5fZHJvcExpc3RSZWYuYmVmb3JlU3RhcnRlZC5waXBlKEwxKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX2RyYWdSZWYuc2NhbGU9dGhpcy5zY2FsZX0pKSx0aGlzLl9zeW5jSW5wdXRzKHRo''@;'; put 'put ''aXMuX2RyYWdSZWYpLHRoaXMuX2hhbmRsZUV2ZW50cyh0aGlzLl9kcmFnUmVmKX1nZXRQbGFjZWhvbGRlckVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZHJhZ1JlZi5nZXRQbGFjZWhvbGRlckVsZW1lbnQoKX1nZXRSb290RWxlbWVudCgpe3JldHVybiB0aGlzLl9kcmFnUmVmLmdldFJvb3RFbGVt''@;'; put 'put ''ZW50KCl9cmVzZXQoKXt0aGlzLl9kcmFnUmVmLnJlc2V0KCl9Z2V0RnJlZURyYWdQb3NpdGlvbigpe3JldHVybiB0aGlzLl9kcmFnUmVmLmdldEZyZWVEcmFnUG9zaXRpb24oKX1zZXRGcmVlRHJhZ1Bvc2l0aW9uKGEpe3RoaXMuX2RyYWdSZWYuc2V0RnJlZURyYWdQb3NpdGlvbihhKX1uZ0Fm''@;'; put 'put ''dGVyVmlld0luaXQoKXtNbSgoKT0+e3RoaXMuX3VwZGF0ZVJvb3RFbGVtZW50KCksdGhpcy5fc2V0dXBIYW5kbGVzTGlzdGVuZXIoKSx0aGlzLl9kcmFnUmVmLnNjYWxlPXRoaXMuc2NhbGUsdGhpcy5mcmVlRHJhZ1Bvc2l0aW9uJiZ0aGlzLl9kcmFnUmVmLnNldEZyZWVEcmFnUG9zaXRpb24o''@;'; put 'put ''dGhpcy5mcmVlRHJhZ1Bvc2l0aW9uKX0se2luamVjdG9yOnRoaXMuX2luamVjdG9yfSl9bmdPbkNoYW5nZXMoYSl7Y29uc3QgZD1hLnJvb3RFbGVtZW50U2VsZWN0b3IsaD1hLmZyZWVEcmFnUG9zaXRpb247ZCYmIWQuZmlyc3RDaGFuZ2UmJnRoaXMuX3VwZGF0ZVJvb3RFbGVtZW50KCksdGhp''@;'; put 'put ''cy5fZHJhZ1JlZi5zY2FsZT10aGlzLnNjYWxlLGgmJiFoLmZpcnN0Q2hhbmdlJiZ0aGlzLmZyZWVEcmFnUG9zaXRpb24mJnRoaXMuX2RyYWdSZWYuc2V0RnJlZURyYWdQb3NpdGlvbih0aGlzLmZyZWVEcmFnUG9zaXRpb24pfW5nT25EZXN0cm95KCl7dGhpcy5kcm9wQ29udGFpbmVyJiZ0aGlz''@;'; put 'put ''LmRyb3BDb250YWluZXIucmVtb3ZlSXRlbSh0aGlzKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnJlbW92ZURpcmVjdGl2ZU5vZGUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2hhbmRsZXMuY29tcGxldGUoKSx0''@;'; put 'put ''aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpLHRoaXMuX2RyYWdSZWYuZGlzcG9zZSgpfSl9X2FkZEhhbmRsZShhKXtjb25zdCBkPXRoaXMuX2hhbmRsZXMuZ2V0VmFsdWUoKTtkLnB1c2goYSksdGhpcy5faGFuZGxlcy5uZXh0KGQpfV9yZW1vdmVIYW5k''@;'; put 'put ''bGUoYSl7Y29uc3QgZD10aGlzLl9oYW5kbGVzLmdldFZhbHVlKCksaD1kLmluZGV4T2YoYSk7aD4tMSYmKGQuc3BsaWNlKGgsMSksdGhpcy5faGFuZGxlcy5uZXh0KGQpKX1fc2V0UHJldmlld1RlbXBsYXRlKGEpe3RoaXMuX3ByZXZpZXdUZW1wbGF0ZT1hfV9yZXNldFByZXZpZXdUZW1wbGF0''@;'; put 'put ''ZShhKXthPT09dGhpcy5fcHJldmlld1RlbXBsYXRlJiYodGhpcy5fcHJldmlld1RlbXBsYXRlPW51bGwpfV9zZXRQbGFjZWhvbGRlclRlbXBsYXRlKGEpe3RoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGU9YX1fcmVzZXRQbGFjZWhvbGRlclRlbXBsYXRlKGEpe2E9PT10aGlzLl9wbGFjZWhvbGRl''@;'; put 'put ''clRlbXBsYXRlJiYodGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZT1udWxsKX1fdXBkYXRlUm9vdEVsZW1lbnQoKXtjb25zdCBhPXRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O2xldCBkPWE7dGhpcy5yb290RWxlbWVudFNlbGVjdG9yJiYoZD12b2lkIDAhPT1hLmNsb3Nlc3Q/YS5jbG9zZXN0''@;'; put 'put ''KHRoaXMucm9vdEVsZW1lbnRTZWxlY3Rvcik6YS5wYXJlbnRFbGVtZW50Py5jbG9zZXN0KHRoaXMucm9vdEVsZW1lbnRTZWxlY3RvcikpLHRoaXMuX2RyYWdSZWYud2l0aFJvb3RFbGVtZW50KGR8fGEpfV9nZXRCb3VuZGFyeUVsZW1lbnQoKXtjb25zdCBhPXRoaXMuYm91bmRhcnlFbGVtZW50''@;'; put 'put ''O3JldHVybiBhPyJzdHJpbmciPT10eXBlb2YgYT90aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5jbG9zZXN0KGEpOnM2KGEpOm51bGx9X3N5bmNJbnB1dHMoYSl7YS5iZWZvcmVTdGFydGVkLnN1YnNjcmliZSgoKT0+e2lmKCFhLmlzRHJhZ2dpbmcoKSl7Y29uc3QgZD10aGlzLl9kaXIsaD10''@;'; put 'put ''aGlzLmRyYWdTdGFydERlbGF5LGY9dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZT97dGVtcGxhdGU6dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZS50ZW1wbGF0ZVJlZixjb250ZXh0OnRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGUuZGF0YSx2aWV3Q29udGFpbmVyOnRoaXMuX3ZpZXdDb250YWlu''@;'; put 'put ''ZXJSZWZ9Om51bGwsdj10aGlzLl9wcmV2aWV3VGVtcGxhdGU/e3RlbXBsYXRlOnRoaXMuX3ByZXZpZXdUZW1wbGF0ZS50ZW1wbGF0ZVJlZixjb250ZXh0OnRoaXMuX3ByZXZpZXdUZW1wbGF0ZS5kYXRhLG1hdGNoU2l6ZTp0aGlzLl9wcmV2aWV3VGVtcGxhdGUubWF0Y2hTaXplLHZpZXdDb250''@;'; put 'put ''YWluZXI6dGhpcy5fdmlld0NvbnRhaW5lclJlZn06bnVsbDthLmRpc2FibGVkPXRoaXMuZGlzYWJsZWQsYS5sb2NrQXhpcz10aGlzLmxvY2tBeGlzLGEuc2NhbGU9dGhpcy5zY2FsZSxhLmRyYWdTdGFydERlbGF5PSJvYmplY3QiPT10eXBlb2YgaCYmaD9oOnc5KGgpLGEuY29uc3RyYWluUG9z''@;'; put 'put ''aXRpb249dGhpcy5jb25zdHJhaW5Qb3NpdGlvbixhLnByZXZpZXdDbGFzcz10aGlzLnByZXZpZXdDbGFzcyxhLndpdGhCb3VuZGFyeUVsZW1lbnQodGhpcy5fZ2V0Qm91bmRhcnlFbGVtZW50KCkpLndpdGhQbGFjZWhvbGRlclRlbXBsYXRlKGYpLndpdGhQcmV2aWV3VGVtcGxhdGUodikud2l0''@;'; put 'put ''aFByZXZpZXdDb250YWluZXIodGhpcy5wcmV2aWV3Q29udGFpbmVyfHwiZ2xvYmFsIiksZCYmYS53aXRoRGlyZWN0aW9uKGQudmFsdWUpfX0pLGEuYmVmb3JlU3RhcnRlZC5waXBlKFAzKDEpKS5zdWJzY3JpYmUoKCk9PntpZih0aGlzLl9wYXJlbnREcmFnKXJldHVybiB2b2lkIGEud2l0aFBh''@;'; put 'put ''cmVudCh0aGlzLl9wYXJlbnREcmFnLl9kcmFnUmVmKTtsZXQgZD10aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50O2Zvcig7ZDspe2NvbnN0IGg9dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5nZXREcmFnRGlyZWN0aXZlRm9yTm9kZShkKTtpZihoKXthLndpdGhQYXJlbnQo''@;'; put 'put ''aC5fZHJhZ1JlZik7YnJlYWt9ZD1kLnBhcmVudEVsZW1lbnR9fSl9X2hhbmRsZUV2ZW50cyhhKXthLnN0YXJ0ZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLnN0YXJ0ZWQuZW1pdCh7c291cmNlOnRoaXMsZXZlbnQ6ZC5ldmVudH0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygp''@;'; put 'put ''fSksYS5yZWxlYXNlZC5zdWJzY3JpYmUoZD0+e3RoaXMucmVsZWFzZWQuZW1pdCh7c291cmNlOnRoaXMsZXZlbnQ6ZC5ldmVudH0pfSksYS5lbmRlZC5zdWJzY3JpYmUoZD0+e3RoaXMuZW5kZWQuZW1pdCh7c291cmNlOnRoaXMsZGlzdGFuY2U6ZC5kaXN0YW5jZSxkcm9wUG9pbnQ6ZC5kcm9w''@;'; put 'put ''UG9pbnQsZXZlbnQ6ZC5ldmVudH0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksYS5lbnRlcmVkLnN1YnNjcmliZShkPT57dGhpcy5lbnRlcmVkLmVtaXQoe2NvbnRhaW5lcjpkLmNvbnRhaW5lci5kYXRhLGl0ZW06dGhpcyxjdXJyZW50SW5kZXg6ZC5jdXJyZW50''@;'; put 'put ''SW5kZXh9KX0pLGEuZXhpdGVkLnN1YnNjcmliZShkPT57dGhpcy5leGl0ZWQuZW1pdCh7Y29udGFpbmVyOmQuY29udGFpbmVyLmRhdGEsaXRlbTp0aGlzfSl9KSxhLmRyb3BwZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLmRyb3BwZWQuZW1pdCh7cHJldmlvdXNJbmRleDpkLnByZXZpb3VzSW5kZXgs''@;'; put 'put ''Y3VycmVudEluZGV4OmQuY3VycmVudEluZGV4LHByZXZpb3VzQ29udGFpbmVyOmQucHJldmlvdXNDb250YWluZXIuZGF0YSxjb250YWluZXI6ZC5jb250YWluZXIuZGF0YSxpc1BvaW50ZXJPdmVyQ29udGFpbmVyOmQuaXNQb2ludGVyT3ZlckNvbnRhaW5lcixpdGVtOnRoaXMsZGlzdGFuY2U6''@;'; put 'put ''ZC5kaXN0YW5jZSxkcm9wUG9pbnQ6ZC5kcm9wUG9pbnQsZXZlbnQ6ZC5ldmVudH0pfSl9X2Fzc2lnbkRlZmF1bHRzKGEpe2NvbnN0e2xvY2tBeGlzOmQsZHJhZ1N0YXJ0RGVsYXk6aCxjb25zdHJhaW5Qb3NpdGlvbjpmLHByZXZpZXdDbGFzczp2LGJvdW5kYXJ5RWxlbWVudDpNLGRyYWdnaW5n''@;'; put 'put ''RGlzYWJsZWQ6RCxyb290RWxlbWVudFNlbGVjdG9yOlUscHJldmlld0NvbnRhaW5lcjp0ZX09YTt0aGlzLmRpc2FibGVkPUQ/PyExLHRoaXMuZHJhZ1N0YXJ0RGVsYXk9aHx8MCxkJiYodGhpcy5sb2NrQXhpcz1kKSxmJiYodGhpcy5jb25zdHJhaW5Qb3NpdGlvbj1mKSx2JiYodGhpcy5wcmV2''@;'; put 'put ''aWV3Q2xhc3M9diksTSYmKHRoaXMuYm91bmRhcnlFbGVtZW50PU0pLFUmJih0aGlzLnJvb3RFbGVtZW50U2VsZWN0b3I9VSksdGUmJih0aGlzLnByZXZpZXdDb250YWluZXI9dGUpfV9zZXR1cEhhbmRsZXNMaXN0ZW5lcigpe3RoaXMuX2hhbmRsZXMucGlwZShNMChhPT57Y29uc3QgZD1hLm1h''@;'; put 'put ''cChoPT5oLmVsZW1lbnQpO3RoaXMuX3NlbGZIYW5kbGUmJnRoaXMucm9vdEVsZW1lbnRTZWxlY3RvciYmZC5wdXNoKHRoaXMuZWxlbWVudCksdGhpcy5fZHJhZ1JlZi53aXRoSGFuZGxlcyhkKX0pLGJkKGE9PkhUKC4uLmEubWFwKGQ9PmQuX3N0YXRlQ2hhbmdlcy5waXBlKFNmKGQpKSkpKSxM''@;'; put 'put ''MSh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoYT0+e2NvbnN0IGQ9dGhpcy5fZHJhZ1JlZixoPWEuZWxlbWVudC5uYXRpdmVFbGVtZW50O2EuZGlzYWJsZWQ/ZC5kaXNhYmxlSGFuZGxlKGgpOmQuZW5hYmxlSGFuZGxlKGgpfSl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1''@;'; put 'put ''cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1ZGlyPVlyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNka0RyYWciLCIiXV0saG9zdEF0dHJzOlsxLCJjZGstZHJhZyJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MiZkJiZ4cigiY2RrLWRyYWctZGlzYWJsZWQiLGgu''@;'; put 'put ''ZGlzYWJsZWQpKCJjZGstZHJhZy1kcmFnZ2luZyIsaC5fZHJhZ1JlZi5pc0RyYWdnaW5nKCkpfSxpbnB1dHM6e2RhdGE6WzAsImNka0RyYWdEYXRhIiwiZGF0YSJdLGxvY2tBeGlzOlswLCJjZGtEcmFnTG9ja0F4aXMiLCJsb2NrQXhpcyJdLHJvb3RFbGVtZW50U2VsZWN0b3I6WzAsImNka0Ry''@;'; put 'put ''YWdSb290RWxlbWVudCIsInJvb3RFbGVtZW50U2VsZWN0b3IiXSxib3VuZGFyeUVsZW1lbnQ6WzAsImNka0RyYWdCb3VuZGFyeSIsImJvdW5kYXJ5RWxlbWVudCJdLGRyYWdTdGFydERlbGF5OlswLCJjZGtEcmFnU3RhcnREZWxheSIsImRyYWdTdGFydERlbGF5Il0sZnJlZURyYWdQb3NpdGlv''@;'; put 'put ''bjpbMCwiY2RrRHJhZ0ZyZWVEcmFnUG9zaXRpb24iLCJmcmVlRHJhZ1Bvc2l0aW9uIl0sZGlzYWJsZWQ6WzIsImNka0RyYWdEaXNhYmxlZCIsImRpc2FibGVkIixJMV0sY29uc3RyYWluUG9zaXRpb246WzAsImNka0RyYWdDb25zdHJhaW5Qb3NpdGlvbiIsImNvbnN0cmFpblBvc2l0aW9uIl0s''@;'; put 'put ''cHJldmlld0NsYXNzOlswLCJjZGtEcmFnUHJldmlld0NsYXNzIiwicHJldmlld0NsYXNzIl0scHJldmlld0NvbnRhaW5lcjpbMCwiY2RrRHJhZ1ByZXZpZXdDb250YWluZXIiLCJwcmV2aWV3Q29udGFpbmVyIl0sc2NhbGU6WzIsImNka0RyYWdTY2FsZSIsInNjYWxlIixORWVdfSxvdXRwdXRz''@;'; put 'put ''OntzdGFydGVkOiJjZGtEcmFnU3RhcnRlZCIscmVsZWFzZWQ6ImNka0RyYWdSZWxlYXNlZCIsZW5kZWQ6ImNka0RyYWdFbmRlZCIsZW50ZXJlZDoiY2RrRHJhZ0VudGVyZWQiLGV4aXRlZDoiY2RrRHJhZ0V4aXRlZCIsZHJvcHBlZDoiY2RrRHJhZ0Ryb3BwZWQiLG1vdmVkOiJjZGtEcmFnTW92''@;'; put 'put ''ZWQifSxleHBvcnRBczpbImNka0RyYWciXSxmZWF0dXJlczpbaGEoW3twcm92aWRlOkdULHVzZUV4aXN0aW5nOmN9XSksV29dfSl9cmV0dXJuIGN9KSgpO2NvbnN0IGlYPW5ldyBqbigiQ2RrRHJvcExpc3RHcm91cCIpO2xldCBOZmU9KCgpPT57Y2xhc3MgY3tfaXRlbXM9bmV3IFNldDtkaXNh''@;'; put 'put ''YmxlZD0hMTtuZ09uRGVzdHJveSgpe3RoaXMuX2l0ZW1zLmNsZWFyKCl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1ZGlyPVlyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNka0Ryb3BMaXN0R3JvdXAiLCIiXV0saW5wdXRzOntk''@;'; put 'put ''aXNhYmxlZDpbMiwiY2RrRHJvcExpc3RHcm91cERpc2FibGVkIiwiZGlzYWJsZWQiLEkxXX0sZXhwb3J0QXM6WyJjZGtEcm9wTGlzdEdyb3VwIl0sZmVhdHVyZXM6W2hhKFt7cHJvdmlkZTppWCx1c2VFeGlzdGluZzpjfV0pXX0pfXJldHVybiBjfSkoKSxWZmU9KCgpPT57Y2xhc3MgY3tlbGVt''@;'; put 'put ''ZW50PUpuKG5hKTtfY2hhbmdlRGV0ZWN0b3JSZWY9Sm4oSHMpO19zY3JvbGxEaXNwYXRjaGVyPUpuKCRGKTtfZGlyPUpuKHJ3LHtvcHRpb25hbDohMH0pO19ncm91cD1KbihpWCx7b3B0aW9uYWw6ITAsc2tpcFNlbGY6ITB9KTtfbGF0ZXN0U29ydGVkUmVmcztfZGVzdHJveWVkPW5ldyB1cjtf''@;'; put 'put ''c2Nyb2xsYWJsZVBhcmVudHNSZXNvbHZlZDtzdGF0aWMgX2Ryb3BMaXN0cz1bXTtfZHJvcExpc3RSZWY7Y29ubmVjdGVkVG89W107ZGF0YTtvcmllbnRhdGlvbjtpZD1KbihYemUpLmdldElkKCJjZGstZHJvcC1saXN0LSIpO2xvY2tBeGlzO2dldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9k''@;'; put 'put ''aXNhYmxlZHx8ISF0aGlzLl9ncm91cCYmdGhpcy5fZ3JvdXAuZGlzYWJsZWR9c2V0IGRpc2FibGVkKGEpe3RoaXMuX2Ryb3BMaXN0UmVmLmRpc2FibGVkPXRoaXMuX2Rpc2FibGVkPWF9X2Rpc2FibGVkO3NvcnRpbmdEaXNhYmxlZDtlbnRlclByZWRpY2F0ZT0oKT0+ITA7c29ydFByZWRpY2F0''@;'; put 'put ''ZT0oKT0+ITA7YXV0b1Njcm9sbERpc2FibGVkO2F1dG9TY3JvbGxTdGVwO2VsZW1lbnRDb250YWluZXJTZWxlY3Rvcjtkcm9wcGVkPW5ldyBYcjtlbnRlcmVkPW5ldyBYcjtleGl0ZWQ9bmV3IFhyO3NvcnRlZD1uZXcgWHI7X3Vuc29ydGVkSXRlbXM9bmV3IFNldDtjb25zdHJ1Y3Rvcigpe2Nv''@;'; put 'put ''bnN0IGE9Sm4oUUYpLGQ9Sm4odFgse29wdGlvbmFsOiEwfSk7dGhpcy5fZHJvcExpc3RSZWY9YS5jcmVhdGVEcm9wTGlzdCh0aGlzLmVsZW1lbnQpLHRoaXMuX2Ryb3BMaXN0UmVmLmRhdGE9dGhpcyxkJiZ0aGlzLl9hc3NpZ25EZWZhdWx0cyhkKSx0aGlzLl9kcm9wTGlzdFJlZi5lbnRlclBy''@;'; put 'put ''ZWRpY2F0ZT0oaCxmKT0+dGhpcy5lbnRlclByZWRpY2F0ZShoLmRhdGEsZi5kYXRhKSx0aGlzLl9kcm9wTGlzdFJlZi5zb3J0UHJlZGljYXRlPShoLGYsdik9PnRoaXMuc29ydFByZWRpY2F0ZShoLGYuZGF0YSx2LmRhdGEpLHRoaXMuX3NldHVwSW5wdXRTeW5jU3Vic2NyaXB0aW9uKHRoaXMu''@;'; put 'put ''X2Ryb3BMaXN0UmVmKSx0aGlzLl9oYW5kbGVFdmVudHModGhpcy5fZHJvcExpc3RSZWYpLGMuX2Ryb3BMaXN0cy5wdXNoKHRoaXMpLHRoaXMuX2dyb3VwJiZ0aGlzLl9ncm91cC5faXRlbXMuYWRkKHRoaXMpfWFkZEl0ZW0oYSl7dGhpcy5fdW5zb3J0ZWRJdGVtcy5hZGQoYSksdGhpcy5fZHJv''@;'; put 'put ''cExpc3RSZWYuaXNEcmFnZ2luZygpJiZ0aGlzLl9zeW5jSXRlbXNXaXRoUmVmKHRoaXMuZ2V0U29ydGVkSXRlbXMoKS5tYXAoZD0+ZC5fZHJhZ1JlZikpfXJlbW92ZUl0ZW0oYSl7aWYodGhpcy5fdW5zb3J0ZWRJdGVtcy5kZWxldGUoYSksdGhpcy5fbGF0ZXN0U29ydGVkUmVmcyl7Y29uc3Qg''@;'; put 'put ''ZD10aGlzLl9sYXRlc3RTb3J0ZWRSZWZzLmluZGV4T2YoYS5fZHJhZ1JlZik7ZD4tMSYmKHRoaXMuX2xhdGVzdFNvcnRlZFJlZnMuc3BsaWNlKGQsMSksdGhpcy5fc3luY0l0ZW1zV2l0aFJlZih0aGlzLl9sYXRlc3RTb3J0ZWRSZWZzKSl9fWdldFNvcnRlZEl0ZW1zKCl7cmV0dXJuIEFycmF5''@;'; put 'put ''LmZyb20odGhpcy5fdW5zb3J0ZWRJdGVtcykuc29ydCgoYSxkKT0+YS5fZHJhZ1JlZi5nZXRWaXNpYmxlRWxlbWVudCgpLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGQuX2RyYWdSZWYuZ2V0VmlzaWJsZUVsZW1lbnQoKSkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkc/LTE6MSl9''@;'; put 'put ''bmdPbkRlc3Ryb3koKXtjb25zdCBhPWMuX2Ryb3BMaXN0cy5pbmRleE9mKHRoaXMpO2E+LTEmJmMuX2Ryb3BMaXN0cy5zcGxpY2UoYSwxKSx0aGlzLl9ncm91cCYmdGhpcy5fZ3JvdXAuX2l0ZW1zLmRlbGV0ZSh0aGlzKSx0aGlzLl9sYXRlc3RTb3J0ZWRSZWZzPXZvaWQgMCx0aGlzLl91bnNv''@;'; put 'put ''cnRlZEl0ZW1zLmNsZWFyKCksdGhpcy5fZHJvcExpc3RSZWYuZGlzcG9zZSgpLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCl9X3NldHVwSW5wdXRTeW5jU3Vic2NyaXB0aW9uKGEpe3RoaXMuX2RpciYmdGhpcy5fZGlyLmNoYW5nZS5waXBlKFNmKHRo''@;'; put 'put ''aXMuX2Rpci52YWx1ZSksTDEodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKGQ9PmEud2l0aERpcmVjdGlvbihkKSksYS5iZWZvcmVTdGFydGVkLnN1YnNjcmliZSgoKT0+e2NvbnN0IGQ9ZnVuY3Rpb24gcXplKGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpP2M6W2NdfSh0aGlzLmNvbm5l''@;'; put 'put ''Y3RlZFRvKS5tYXAoaD0+InN0cmluZyI9PXR5cGVvZiBoP2MuX2Ryb3BMaXN0cy5maW5kKHY9PnYuaWQ9PT1oKTpoKTtpZih0aGlzLl9ncm91cCYmdGhpcy5fZ3JvdXAuX2l0ZW1zLmZvckVhY2goaD0+ey0xPT09ZC5pbmRleE9mKGgpJiZkLnB1c2goaCl9KSwhdGhpcy5fc2Nyb2xsYWJsZVBh''@;'; put 'put ''cmVudHNSZXNvbHZlZCl7Y29uc3QgaD10aGlzLl9zY3JvbGxEaXNwYXRjaGVyLmdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVycyh0aGlzLmVsZW1lbnQpLm1hcChmPT5mLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50KTt0aGlzLl9kcm9wTGlzdFJlZi53aXRoU2Nyb2xsYWJsZVBhcmVu''@;'; put 'put ''dHMoaCksdGhpcy5fc2Nyb2xsYWJsZVBhcmVudHNSZXNvbHZlZD0hMH1pZih0aGlzLmVsZW1lbnRDb250YWluZXJTZWxlY3Rvcil7Y29uc3QgaD10aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZWxlbWVudENvbnRhaW5lclNlbGVjdG9yKTthLndpdGhFbGVt''@;'; put 'put ''ZW50Q29udGFpbmVyKGgpfWEuZGlzYWJsZWQ9dGhpcy5kaXNhYmxlZCxhLmxvY2tBeGlzPXRoaXMubG9ja0F4aXMsYS5zb3J0aW5nRGlzYWJsZWQ9dGhpcy5zb3J0aW5nRGlzYWJsZWQsYS5hdXRvU2Nyb2xsRGlzYWJsZWQ9dGhpcy5hdXRvU2Nyb2xsRGlzYWJsZWQsYS5hdXRvU2Nyb2xsU3Rl''@;'; put 'put ''cD13OSh0aGlzLmF1dG9TY3JvbGxTdGVwLDIpLGEuY29ubmVjdGVkVG8oZC5maWx0ZXIoaD0+aCYmaCE9PXRoaXMpLm1hcChoPT5oLl9kcm9wTGlzdFJlZikpLndpdGhPcmllbnRhdGlvbih0aGlzLm9yaWVudGF0aW9uKX0pfV9oYW5kbGVFdmVudHMoYSl7YS5iZWZvcmVTdGFydGVkLnN1YnNj''@;'; put 'put ''cmliZSgoKT0+e3RoaXMuX3N5bmNJdGVtc1dpdGhSZWYodGhpcy5nZXRTb3J0ZWRJdGVtcygpLm1hcChkPT5kLl9kcmFnUmVmKSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSxhLmVudGVyZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLmVudGVyZWQuZW1pdCh7Y29udGFp''@;'; put 'put ''bmVyOnRoaXMsaXRlbTpkLml0ZW0uZGF0YSxjdXJyZW50SW5kZXg6ZC5jdXJyZW50SW5kZXh9KX0pLGEuZXhpdGVkLnN1YnNjcmliZShkPT57dGhpcy5leGl0ZWQuZW1pdCh7Y29udGFpbmVyOnRoaXMsaXRlbTpkLml0ZW0uZGF0YX0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JD''@;'; put 'put ''aGVjaygpfSksYS5zb3J0ZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLnNvcnRlZC5lbWl0KHtwcmV2aW91c0luZGV4OmQucHJldmlvdXNJbmRleCxjdXJyZW50SW5kZXg6ZC5jdXJyZW50SW5kZXgsY29udGFpbmVyOnRoaXMsaXRlbTpkLml0ZW0uZGF0YX0pfSksYS5kcm9wcGVkLnN1YnNjcmliZShk''@;'; put 'put ''PT57dGhpcy5kcm9wcGVkLmVtaXQoe3ByZXZpb3VzSW5kZXg6ZC5wcmV2aW91c0luZGV4LGN1cnJlbnRJbmRleDpkLmN1cnJlbnRJbmRleCxwcmV2aW91c0NvbnRhaW5lcjpkLnByZXZpb3VzQ29udGFpbmVyLmRhdGEsY29udGFpbmVyOmQuY29udGFpbmVyLmRhdGEsaXRlbTpkLml0ZW0uZGF0''@;'; put 'put ''YSxpc1BvaW50ZXJPdmVyQ29udGFpbmVyOmQuaXNQb2ludGVyT3ZlckNvbnRhaW5lcixkaXN0YW5jZTpkLmRpc3RhbmNlLGRyb3BQb2ludDpkLmRyb3BQb2ludCxldmVudDpkLmV2ZW50fSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSxIVChhLnJlY2VpdmluZ1N0''@;'; put 'put ''YXJ0ZWQsYS5yZWNlaXZpbmdTdG9wcGVkKS5zdWJzY3JpYmUoKCk9PnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1fYXNzaWduRGVmYXVsdHMoYSl7Y29uc3R7bG9ja0F4aXM6ZCxkcmFnZ2luZ0Rpc2FibGVkOmgsc29ydGluZ0Rpc2FibGVkOmYsbGlzdEF1dG9TY3Jv''@;'; put 'put ''bGxEaXNhYmxlZDp2LGxpc3RPcmllbnRhdGlvbjpNfT1hO3RoaXMuZGlzYWJsZWQ9aD8/ITEsdGhpcy5zb3J0aW5nRGlzYWJsZWQ9Zj8/ITEsdGhpcy5hdXRvU2Nyb2xsRGlzYWJsZWQ9dj8/ITEsdGhpcy5vcmllbnRhdGlvbj1NfHwidmVydGljYWwiLGQmJih0aGlzLmxvY2tBeGlzPWQpfV9z''@;'; put 'put ''eW5jSXRlbXNXaXRoUmVmKGEpe3RoaXMuX2xhdGVzdFNvcnRlZFJlZnM9YSx0aGlzLl9kcm9wTGlzdFJlZi53aXRoSXRlbXMoYSl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1ZGlyPVlyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIs''@;'; put 'put ''ImNka0Ryb3BMaXN0IiwiIl0sWyJjZGstZHJvcC1saXN0Il1dLGhvc3RBdHRyczpbMSwiY2RrLWRyb3AtbGlzdCJdLGhvc3RWYXJzOjcsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MiZkJiYoTnIoImlkIixoLmlkKSx4cigiY2RrLWRyb3AtbGlzdC1kaXNhYmxlZCIsaC5kaXNhYmxlZCko''@;'; put 'put ''ImNkay1kcm9wLWxpc3QtZHJhZ2dpbmciLGguX2Ryb3BMaXN0UmVmLmlzRHJhZ2dpbmcoKSkoImNkay1kcm9wLWxpc3QtcmVjZWl2aW5nIixoLl9kcm9wTGlzdFJlZi5pc1JlY2VpdmluZygpKSl9LGlucHV0czp7Y29ubmVjdGVkVG86WzAsImNka0Ryb3BMaXN0Q29ubmVjdGVkVG8iLCJjb25u''@;'; put 'put ''ZWN0ZWRUbyJdLGRhdGE6WzAsImNka0Ryb3BMaXN0RGF0YSIsImRhdGEiXSxvcmllbnRhdGlvbjpbMCwiY2RrRHJvcExpc3RPcmllbnRhdGlvbiIsIm9yaWVudGF0aW9uIl0saWQ6ImlkIixsb2NrQXhpczpbMCwiY2RrRHJvcExpc3RMb2NrQXhpcyIsImxvY2tBeGlzIl0sZGlzYWJsZWQ6WzIs''@;'; put 'put ''ImNka0Ryb3BMaXN0RGlzYWJsZWQiLCJkaXNhYmxlZCIsSTFdLHNvcnRpbmdEaXNhYmxlZDpbMiwiY2RrRHJvcExpc3RTb3J0aW5nRGlzYWJsZWQiLCJzb3J0aW5nRGlzYWJsZWQiLEkxXSxlbnRlclByZWRpY2F0ZTpbMCwiY2RrRHJvcExpc3RFbnRlclByZWRpY2F0ZSIsImVudGVyUHJlZGlj''@;'; put 'put ''YXRlIl0sc29ydFByZWRpY2F0ZTpbMCwiY2RrRHJvcExpc3RTb3J0UHJlZGljYXRlIiwic29ydFByZWRpY2F0ZSJdLGF1dG9TY3JvbGxEaXNhYmxlZDpbMiwiY2RrRHJvcExpc3RBdXRvU2Nyb2xsRGlzYWJsZWQiLCJhdXRvU2Nyb2xsRGlzYWJsZWQiLEkxXSxhdXRvU2Nyb2xsU3RlcDpbMCwi''@;'; put 'put ''Y2RrRHJvcExpc3RBdXRvU2Nyb2xsU3RlcCIsImF1dG9TY3JvbGxTdGVwIl0sZWxlbWVudENvbnRhaW5lclNlbGVjdG9yOlswLCJjZGtEcm9wTGlzdEVsZW1lbnRDb250YWluZXIiLCJlbGVtZW50Q29udGFpbmVyU2VsZWN0b3IiXX0sb3V0cHV0czp7ZHJvcHBlZDoiY2RrRHJvcExpc3REcm9w''@;'; put 'put ''cGVkIixlbnRlcmVkOiJjZGtEcm9wTGlzdEVudGVyZWQiLGV4aXRlZDoiY2RrRHJvcExpc3RFeGl0ZWQiLHNvcnRlZDoiY2RrRHJvcExpc3RTb3J0ZWQifSxleHBvcnRBczpbImNka0Ryb3BMaXN0Il0sZmVhdHVyZXM6W2hhKFt7cHJvdmlkZTppWCx1c2VWYWx1ZTp2b2lkIDB9LHtwcm92aWRl''@;'; put 'put ''Om5YLHVzZUV4aXN0aW5nOmN9XSldfSl9cmV0dXJuIGN9KSgpLEJmZT0oKCk9PntjbGFzcyBje3N0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NW1vZD1FaSh7dHlwZTpjfSk7c3RhdGljIFx1MDI3NWluaj15aSh7cHJvdmlkZXJzOltR''@;'; put 'put ''Rl0saW1wb3J0czpbS3plXX0pfXJldHVybiBjfSkoKTtjb25zdCBUbz1bIioiXSxtVWU9W1tbImNsci1hY2NvcmRpb24tdGl0bGUiXSxbImNsci1zdGVwLXRpdGxlIl1dLFtbImNsci1hY2NvcmRpb24tZGVzY3JpcHRpb24iXSxbImNsci1zdGVwLWRlc2NyaXB0aW9uIl1dLCIqIl0sdlVlPVsi''@;'; put 'put ''Y2xyLWFjY29yZGlvbi10aXRsZSwgY2xyLXN0ZXAtdGl0bGUiLCJjbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uLCBjbHItc3RlcC1kZXNjcmlwdGlvbiIsIioiXTtmdW5jdGlvbiB5VWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDkpLE90KCJAdG9nZ2xlLmRvbmUiLGZ1''@;'; put 'put ''bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoKS5jb2xsYXBzZVBhbmVsT25BbmltYXRpb25Eb25lKGgpKX0pLGRlKDEsImRpdiIsMTApLFdyKDIsMiksaGUoKSgpfTImYyYmRWUoIkB0b2dnbGUiLHZvaWQgMCl9ZnVuY3Rpb24gYlVlKGMsbCl7aWYo''@;'; put 'put ''MSZjKXtjb25zdCBhPU9uKCk7b2koMCksZGUoMSwiZGl2IiwyKSgyLCJkaXYiLDMpKDMsImJ1dHRvbiIsNCwwKSxkbCg1LCJhc3luYyIpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS50b2dnbGVQYW5lbCgpKX0pLGRlKDYsInNwYW4iLDUpLEd0KDcsImNkcy1p''@;'; put 'put ''Y29uIiw2KSxoZSgpLFdyKDgpLFdyKDksMSksaGUoKSgpLGRlKDEwLCJkaXYiLDcpLGd0KDExLHlVZSwzLDEsImRpdiIsOCksaGUoKSgpLHNpKCl9aWYoMiZjKXtsZXQgYTtjb25zdCBkPWwuJGltcGxpY2l0LGg9T2UoKTtmZSgpLEVlKCJuZ0NsYXNzIixoLmdldFBhbmVsU3RhdGVDbGFzc2Vz''@;'; put 'put ''KGQpKSxmZSgpLE5yKCJyb2xlIixoLmhlYWRpbmdFbmFibGVkfHxoLmV4cGxpY2l0SGVhZGluZ0xldmVsPyJoZWFkaW5nIjpudWxsKSgiYXJpYS1sZXZlbCIsaC5oZWFkaW5nRW5hYmxlZHx8aC5leHBsaWNpdEhlYWRpbmdMZXZlbD9oLmhlYWRpbmdMZXZlbDpudWxsKSxmZSgpLHhyKCJjbHIt''@;'; put 'put ''YWNjb3JkaW9uLWhlYWRlci1oYXMtZGVzY3JpcHRpb24iLChudWxsPT0oYT1qYyg1LDE0LGguYWNjb3JkaW9uRGVzY3JpcHRpb24uY2hhbmdlcykpP251bGw6YS5sZW5ndGgpfHxoLmFjY29yZGlvbkRlc2NyaXB0aW9uLmxlbmd0aCksRWUoImlkIixoLmdldEFjY29yZGlvbkhlYWRlcklkKGQu''@;'; put 'put ''dGVtcGxhdGVJZCkpKCJkaXNhYmxlZCIsZC5kaXNhYmxlZCksTnIoImFyaWEtY29udHJvbHMiLCFkLmRpc2FibGVkJiZkLm9wZW4/aC5nZXRBY2NvcmRpb25Db250ZW50SWQoZC50ZW1wbGF0ZUlkKTpudWxsKSgiYXJpYS1leHBhbmRlZCIsZC5vcGVuKSxmZSg3KSxFZSgiQHNraXBJbml0aWFs''@;'; put 'put ''UmVuZGVyIix2b2lkIDApKCJpZCIsaC5nZXRBY2NvcmRpb25Db250ZW50SWQoZC50ZW1wbGF0ZUlkKSksTnIoImFyaWEtaGlkZGVuIiwhZC5vcGVuKSgiYXJpYS1sYWJlbGxlZGJ5IixoLmdldEFjY29yZGlvbkhlYWRlcklkKGQudGVtcGxhdGVJZCkpLGZlKCksRWUoIm5nSWYiLGQub3Blbil9''@;'; put 'put ''fWNvbnN0IGpVZT1bImNsckxvYWRpbmciLCIiXTtmdW5jdGlvbiB6VWUoYyxsKXsxJmMmJihvaSgwKSxHdCgxLCJzcGFuIiwzKSxzaSgpKSwyJmMmJihmZSgpLEVlKCJAc3Bpbm5lciIsdm9pZCAwKSl9ZnVuY3Rpb24gVVVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7b2koMCksZGUoMSwi''@;'; put 'put ''c3BhbiIsNCksT3QoIkB2YWxpZGF0ZWQuZG9uZSIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCk7cmV0dXJuIEN0KGgubG9hZGluZ1N0YXRlQ2hhbmdlKGguYnV0dG9uU3RhdGUuREVGQVVMVCkpfSksaGUoKSxzaSgpfTImYyYmKGZlKCksRWUoIkB2YWxpZGF0ZWQiLHZvaWQgMCkpfWZ1''@;'; put 'put ''bmN0aW9uIFpVZShjLGwpezEmYyYmKGRlKDAsInNwYW4iLDUpLFdyKDEpLGhlKCkpLDImYyYmRWUoIkBkZWZhdWx0QnV0dG9uIix2b2lkIDApfWZ1bmN0aW9uIFdVZShjLGwpe2lmKDEmYyYmKG9pKDApLGRlKDEsImJ1dHRvbiIsMSksR3QoMiwiY2RzLWljb24iLDIpLGhlKCksc2koKSksMiZj''@;'; put 'put ''KXtjb25zdCBhPU9lKCk7ZmUoKSxOcigiYXJpYS1sYWJlbCIsYS5zaWducG9zdFRyaWdnZXJBcmlhTGFiZWx8fGEuY29tbW9uU3RyaW5ncy5rZXlzLnNpZ25wb3N0VG9nZ2xlKSxmZSgpLE5yKCJ0aXRsZSIsYS5jb21tb25TdHJpbmdzLmtleXMuaW5mbyl9fWNvbnN0IFlVZT1bW1siY2xyLXNp''@;'; put 'put ''Z25wb3N0LXRpdGxlIl1dLCIqIl0sR1VlPVsiY2xyLXNpZ25wb3N0LXRpdGxlIiwiKiJdLCRVZT1bW1siIiwiY2xyQ2hlY2tib3giLCIiXSxbIiIsImNsclRvZ2dsZSIsIiJdXSxbWyJsYWJlbCJdXV0sS1VlPVsiW2NsckNoZWNrYm94XSxbY2xyVG9nZ2xlXSIsImxhYmVsIl07ZnVuY3Rpb24g''@;'; put 'put ''WFVlKGMsbCl7MSZjJiZHdCgwLCJsYWJlbCIpfWNvbnN0IHFVZT1bW1sibGFiZWwiXV0sW1siY2xyLWNoZWNrYm94LXdyYXBwZXIiXSxbImNsci10b2dnbGUtd3JhcHBlciJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wt''@;'; put 'put ''c3VjY2VzcyJdXV0sSlVlPVsibGFiZWwiLCJjbHItY2hlY2tib3gtd3JhcHBlcixjbHItdG9nZ2xlLXdyYXBwZXIiLCJjbHItY29udHJvbC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiBRVWUoYyxsKXsxJmMmJkd0KDAsImxhYmVs''@;'; put 'put ''Iil9ZnVuY3Rpb24gZVplKGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwzKSxXcigxLDIpLGhlKCkpfWZ1bmN0aW9uIHRaZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDYpfWZ1bmN0aW9uIG5aZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDcpfWZ1bmN0aW9uIHJaZShjLGwpezEmYyYmV3Io''@;'; put 'put ''MCwzLFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1mdW5jdGlvbiBpWmUoYyxsKXsxJmMmJldyKDAsNCxbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWZ1bmN0aW9uIGFaZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMyksZ3QoMSx0WmUsMSwwLCJjZHMtaWNvbiIsNCkoMixuWmUsMSwwLCJjZHMt''@;'; put 'put ''aWNvbiIsNSkoMyxyWmUsMSwwLCJuZy1jb250ZW50IiwwKSg0LGlaZSwxLDAsIm5nLWNvbnRlbnQiLDApLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCksRWUoIm5nSWYiLGEuc2hvd0ludmFsaWQpLGZlKCksRWUoIm5nSWYiLGEuc2hvd1ZhbGlkKSxmZSgpLEVlKCJuZ0lmIixhLnNob3dJ''@;'; put 'put ''bnZhbGlkKSxmZSgpLEVlKCJuZ0lmIixhLnNob3dWYWxpZCl9fWNvbnN0IG9aZT1bImNscktleUZvY3VzIiwiIl0sZFplPVtbWyJsYWJlbCJdXSxbWyIiLCJjbHJJbnB1dFByZWZpeCIsIiJdXSxbWyIiLCJjbHJJbnB1dCIsIiJdXSxbWyIiLCJjbHJJbnB1dFN1ZmZpeCIsIiJdXSxbWyJjbHIt''@;'; put 'put ''Y29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0saFplPVsibGFiZWwiLCJbY2xySW5wdXRQcmVmaXhdIiwiW2NscklucHV0XSIsIltjbHJJbnB1dFN1ZmZpeF0iLCJjbHItY29udHJvbC1oZWxwZXIiLCJjbHItY29udHJv''@;'; put 'put ''bC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiBmWmUoYyxsKXsxJmMmJkd0KDAsImxhYmVsIil9ZnVuY3Rpb24gcFplKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsNil9ZnVuY3Rpb24gZ1plKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsNyl9ZnVuY3Rpb24gbVpl''@;'; put 'put ''KGMsbCl7MSZjJiZXcigwLDQsWyIqbmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gdlplKGMsbCl7MSZjJiZXcigwLDUsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIHlaZShjLGwpezEmYyYmV3IoMCw2LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9ZnVuY3Rpb24gVFplKGMs''@;'; put 'put ''bCl7MSZjJiZXcigwKX1jb25zdCBBWmU9WyJ0YWJDb250ZW50UHJvamVjdGVkUmVmIl07ZnVuY3Rpb24ga1plKGMsbCl7aWYoMSZjJiYoZGUoMCwic2VjdGlvbiIsMSksV3IoMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7eHIoImFjdGl2ZSIsYS5hY3RpdmUpLEVlKCJpZCIsYS50YWJDb250''@;'; put 'put ''ZW50SWQpKCJoaWRkZW4iLCFhLmFjdGl2ZSksTnIoImFyaWEtbGFiZWxsZWRieSIsYS5hcmlhTGFiZWxsZWRCeSkoImFyaWEtaGlkZGVuIiwhYS5hY3RpdmUpfX1jb25zdCBEWmU9WyJ0YWJDb250ZW50Vmlld0NvbnRhaW5lciJdLElaZT1bW1siY2xyLXRhYnMtYWN0aW9ucyJdXV0sUlplPVsi''@;'; put 'put ''Y2xyLXRhYnMtYWN0aW9ucyJdO2Z1bmN0aW9uIExaZShjLGwpe2lmKDEmYyYmKG9pKDApLGRlKDEsImxpIiw1KSx6bCgyLDYpLGhlKCksc2koKSksMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O2ZlKDIpLEVlKCJuZ1RlbXBsYXRlT3V0bGV0IixhLnRlbXBsYXRlUmVmQ29udGFpbmVyLnRl''@;'; put 'put ''bXBsYXRlKX19ZnVuY3Rpb24gT1plKGMsbCl7aWYoMSZjJiYob2koMCksZ3QoMSxMWmUsMywxLCJuZy1jb250YWluZXIiLDQpLHNpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPU9lKCk7ZmUoKSxFZSgibmdJZiIsYS50YWJzSWQ9PT1kLnRhYnNJZCYmIWEuaW5PdmVyZmxvdyl9fWZ1''@;'; put 'put ''bmN0aW9uIFBaZShjLGwpezEmYyYmemwoMCw2KSwyJmMmJkVlKCJuZ1RlbXBsYXRlT3V0bGV0IixPZSgpLiRpbXBsaWNpdC50ZW1wbGF0ZVJlZkNvbnRhaW5lci50ZW1wbGF0ZSl9ZnVuY3Rpb24gRlplKGMsbCl7aWYoMSZjJiYob2koMCksZ3QoMSxQWmUsMSwxLCJuZy1jb250YWluZXIiLDEz''@;'; put 'put ''KSxzaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1PZSgzKTtmZSgpLEVlKCJuZ0lmIixhLnRhYnNJZD09PWQudGFic0lkJiZhLmluT3ZlcmZsb3cpfX1mdW5jdGlvbiBIWmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdGFiLW92ZXJmbG93LWNvbnRlbnQiLDEy''@;'; put 'put ''KSxPdCgia2V5ZG93bi5lc2NhcGUiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDIpLmNsb3NlT25Fc2NhcGVLZXkoKSl9LDAsT20pKCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSksT2UoKTtjb25zdCBmPWZhKDQpO3JldHVybiBDdChPZSgpLmNsb3NlT25PdXRzaWRlQ2xpY2soaCxm''@;'; put 'put ''KSl9LCExLE9tKSgiZm9jdXNvdXQiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgyKS5jbG9zZU9uRm9jdXNPdXQoaCkpfSksZ3QoMSxGWmUsMiwxLCJuZy1jb250YWluZXIiLDMpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKDIpO2ZlKCksRWUoIm5nRm9yT2YiLGEudGFiTGlua0Rp''@;'; put 'put ''cmVjdGl2ZXMpfX1mdW5jdGlvbiBOWmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtvaSgwKSxkZSgxLCJkaXYiLDcpKDIsImxpIiw4KSgzLCJidXR0b24iLDksMSksT3QoIm1vdXNlZG93biIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5fbW91c2Vkb3duPSEwKX0pKCJmb2N1''@;'; put 'put ''cyIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5vcGVuT3ZlcmZsb3dPbkZvY3VzKCkpfSkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLnRvZ2dsZU92ZXJmbG93T25DbGljaygpKX0pLEd0KDUsImNkcy1pY29uIiwxMCksaGUoKSgpLGd0KDYsSFplLDIs''@;'; put 'put ''MSwiY2xyLXRhYi1vdmVyZmxvdy1jb250ZW50IiwxMSksaGUoKSxzaSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO2ZlKCkseHIoIm9wZW4iLGEudG9nZ2xlU2VydmljZS5vcGVuKSxmZSgyKSx4cigiYWN0aXZlIixhLmFjdGl2ZVRhYkluT3ZlcmZsb3cpKCJvcGVuIixhLnRvZ2dsZVNlcnZpY2Uu''@;'; put 'put ''b3BlbiksTnIoInRhYmluZGV4IixhLmFjdGl2ZVRhYkluT3ZlcmZsb3cmJiFhLnRvZ2dsZVNlcnZpY2Uub3Blbj8wOi0xKSgidGl0bGUiLGEuY29tbW9uU3RyaW5ncy5rZXlzLm1vcmUpLGZlKDIpLE5yKCJzdGF0dXMiLGEudG9nZ2xlU2VydmljZS5vcGVuPyJpbmZvIjpudWxsKSgidGl0bGUi''@;'; put 'put ''LGEuY29tbW9uU3RyaW5ncy5rZXlzLm1vcmUpLGZlKCksRWUoIm5nSWYiLGEudG9nZ2xlU2VydmljZS5vcGVuKX19ZnVuY3Rpb24gVlplKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiYnV0dG9uIiwzKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCku''@;'; put 'put ''dG9nZ2xlQnlCdXR0b24oKSl9KSxHdCgxLCJjZHMtaWNvbiIsNCksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoKTt4cigib24tY29sbGFwc2UiLGEuY29sbGFwc2VkKSxOcigiYXJpYS1jb250cm9scyIsYS5jb250ZW50SWQpKCJhcmlhLWV4cGFuZGVkIixhLmFyaWFFeHBhbmRlZCkoImFyaWEt''@;'; put 'put ''bGFiZWwiLGEudG9nZ2xlTGFiZWx8fGEuY29tbW9uU3RyaW5ncy5rZXlzLnZlcnRpY2FsTmF2VG9nZ2xlKSxmZSgpLE5yKCJkaXJlY3Rpb24iLGEuY29sbGFwc2VkPyJyaWdodCI6ImxlZnQiKX19ZnVuY3Rpb24gQlplKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiYnV0dG9uIiw1''@;'; put 'put ''KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuY29sbGFwc2VkPSExKX0pLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKCk7TnIoImFyaWEtY29udHJvbHMiLGEuY29udGVudElkKSgiYXJpYS1sYWJlbCIsYS50b2dnbGVMYWJlbHx8YS5jb21tb25TdHJpbmdzLmtl''@;'; put 'put ''eXMudmVydGljYWxOYXZUb2dnbGUpfX1jb25zdCBVWmU9WyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiXSxaWmU9W1tbIiIsImNsclZlcnRpY2FsTmF2SWNvbiIsIiJdXSwiKiJdLFdaZT1bIltjbHJWZXJ0aWNhbE5hdkljb25dIiwiKiJdO2Z1bmN0aW9uIFlaZShjLGwpe2lmKDEmYyYmKGRlKDAs''@;'; put 'put ''InRoIiw0KSgxLCJzcGFuIiksUGUoMiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxOcigiYXJpYS1sYWJlbCIsYS5kYXkpLGZlKCksQ3IoYS5uYXJyb3cpfX1mdW5jdGlvbiBHWmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJ0ZCIsNykoMSwiY2xyLWRh''@;'; put 'put ''eSIsOCksT3QoInNlbGVjdERheSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KE9lKDIpLnNldFNlbGVjdGVkRGF5KGgpKX0pLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxFZSgiY2xyRGF5VmlldyIsYSl9fWZ1bmN0aW9uICRaZShjLGwpe2lmKDEmYyYmKGRl''@;'; put 'put ''KDAsInRyIiw1KSxndCgxLEdaZSwyLDEsInRkIiw2KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxFZSgibmdGb3JPZiIsYSl9fWZ1bmN0aW9uIEtaZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImJ1dHRvbiIsMTApLE90KCJjbGljayIsZnVuY3Rpb24oKXtj''@;'; put 'put ''b25zdCBoPXd0KGEpLmluZGV4O3JldHVybiBDdChPZSgpLmNoYW5nZU1vbnRoKGgpKX0pKCJtb3VzZWVudGVyIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuaW5kZXg7cmV0dXJuIEN0KE9lKCkub25Ib3ZlcihoKSl9KSxQZSgxKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxk''@;'; put 'put ''PWwuaW5kZXgsaD1PZSgpO3hyKCJpcy1zZWxlY3RlZCIsaC5pc1NlbGVjdGVkKGQpKSgiaXMtc3RhcnQtcmFuZ2UiLGguZ2V0SXNSYW5nZVN0YXJ0TW9udGgoZCkpKCJpcy1lbmQtcmFuZ2UiLGguZ2V0SXNSYW5nZUVuZE1vbnRoKGQpKSgiaW4tcmFuZ2UiLGguaXNJblJhbmdlKGQpKSgiaXMt''@;'; put 'put ''dG9kYXkiLGguY2FsZW5kYXJZZWFyPT09aC5jdXJyZW50Q2FsZW5kYXJZZWFyJiZkPT09aC5jdXJyZW50Q2FsZW5kYXJNb250aCksTnIoInRhYmluZGV4IixoLmdldFRhYkluZGV4KGQpKSxmZSgpLElyKCIgIixhLCIgIil9fWZ1bmN0aW9uIFhaZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1Pbigp''@;'; put 'put ''O2RlKDAsImJ1dHRvbiIsMTApLE90KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoKS5jaGFuZ2VZZWFyKGgpKX0pKCJtb3VzZWVudGVyIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLm9uSG92''@;'; put 'put ''ZXIoaCkpfSksUGUoMSksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1PZSgpO3hyKCJpcy1zZWxlY3RlZCIsYT09PWQuc2VsZWN0ZWRTdGFydFllYXJ8fGE9PT1kLnNlbGVjdGVkRW5kWWVhcikoImlzLXN0YXJ0LXJhbmdlIixkLmdldElzUmFuZ2VTdGFydFllYXIoYSkpKCJp''@;'; put 'put ''cy1lbmQtcmFuZ2UiLGQuZ2V0SXNSYW5nZUVuZFllYXIoYSkpKCJpbi1yYW5nZSIsZC5pc0luUmFuZ2UoYSkpKCJpcy10b2RheSIsZC5pc0N1cnJlbnRDYWxlbmRhclllYXIoYSkpLE5yKCJ0YWJpbmRleCIsZC5nZXRUYWJJbmRleChhKSksZmUoKSxJcigiICIsYSwiICIpfX1mdW5jdGlvbiBx''@;'; put 'put ''WmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtvaSgwKSxkZSgxLCJhIiw2KSxPdCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKDIpLm9uUmFuZ2VPcHRpb25TZWxlY3QoaCkpfSkoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0''@;'; put 'put ''IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChPZSgyKS5vblJhbmdlT3B0aW9uU2VsZWN0KGgpKX0pLFBlKDIpLGhlKCksc2koKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxOcigiYXJpYS1sYWJlbCIsbnVsbD09YT9udWxsOmEubGFiZWwpLGZlKCksSXIoIiAiLGEubGFi''@;'; put 'put ''ZWwsIiAiKX19ZnVuY3Rpb24gSlplKGMsbCl7MSZjJiZ6bCgwKX1mdW5jdGlvbiBRWmUoYyxsKXtpZigxJmMmJihvaSgwKSxkZSgxLCJjbHItdmVydGljYWwtbmF2IiwyKSxndCgyLHFaZSwzLDIsIm5nLWNvbnRhaW5lciIsMyksaGUoKSxkZSgzLCJkaXYiLDQpLGd0KDQsSlplLDEsMCwibmct''@;'; put 'put ''Y29udGFpbmVyIiw1KSxoZSgpLHNpKCkpLDImYyl7Y29uc3QgYT1PZSgpLGQ9ZmEoMik7ZmUoMiksRWUoIm5nRm9yT2YiLGEuZGF0ZVJhbmdlT3B0aW9ucyksZmUoMiksRWUoIm5nVGVtcGxhdGVPdXRsZXQiLGQpfX1mdW5jdGlvbiBlV2UoYyxsKXsxJmMmJkd0KDAsImNsci1tb250aHBpY2tl''@;'; put 'put ''ciIpfWZ1bmN0aW9uIHRXZShjLGwpezEmYyYmR3QoMCwiY2xyLXllYXJwaWNrZXIiKX1mdW5jdGlvbiBuV2UoYyxsKXsxJmMmJkd0KDAsImNsci1kYXlwaWNrZXIiKX1mdW5jdGlvbiByV2UoYyxsKXsxJmMmJkd0KDAsImNsci1kYXRlcGlja2VyLWFjdGlvbnMiKX1mdW5jdGlvbiBpV2UoYyxs''@;'; put 'put ''KXtpZigxJmMmJmd0KDAsZVdlLDEsMCwiY2xyLW1vbnRocGlja2VyIiw3KSgxLHRXZSwxLDAsImNsci15ZWFycGlja2VyIiw3KSgyLG5XZSwxLDAsImNsci1kYXlwaWNrZXIiLDcpKDMscldlLDEsMCwiY2xyLWRhdGVwaWNrZXItYWN0aW9ucyIsNyksMiZjKXtjb25zdCBhPU9lKCk7RWUoIm5n''@;'; put 'put ''SWYiLGEuaXNNb250aFZpZXcpLGZlKCksRWUoIm5nSWYiLGEuaXNZZWFyVmlldyksZmUoKSxFZSgibmdJZiIsYS5pc0RheVZpZXcpLGZlKCksRWUoIm5nSWYiLGEuaGFzQWN0aW9uQnV0dG9ucyl9fWNvbnN0IGFXZT1bImFjdGlvbkJ1dHRvbiJdLG9XZT1bW1sibGFiZWwiXV0sW1siIiwiY2xy''@;'; put 'put ''RGF0ZSIsIiJdXSxbWyIiLCJjbHJTdGFydERhdGUiLCIiXV0sW1siIiwiY2xyRW5kRGF0ZSIsIiJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sc1dlPVsibGFiZWwiLCJbY2xyRGF0ZV0iLCJbY2xy''@;'; put 'put ''U3RhcnREYXRlXSIsIltjbHJFbmREYXRlXSIsImNsci1jb250cm9sLWhlbHBlciIsImNsci1jb250cm9sLWVycm9yIiwiY2xyLWNvbnRyb2wtc3VjY2VzcyJdO2Z1bmN0aW9uIGxXZShjLGwpezEmYyYmR3QoMCwibGFiZWwiKX1mdW5jdGlvbiBjV2UoYyxsKXsxJmMmJihvaSgwKSxXcigxLDIp''@;'; put 'put ''LGRlKDIsInNwYW4iLDkpLFBlKDMsIi0iKSxoZSgpLFdyKDQsMyksc2koKSl9ZnVuY3Rpb24gdVdlKGMsbCl7MSZjJiYoZGUoMCwiYnV0dG9uIiwxMCwwKSxHdCgyLCJjZHMtaWNvbiIsMTEpLGhlKCkpLDImYyYmRWUoImRpc2FibGVkIixPZSgpLmlzSW5wdXREYXRlRGlzYWJsZWQpfWZ1bmN0''@;'; put 'put ''aW9uIGRXZShjLGwpezEmYyYmR3QoMCwiY2xyLWRhdGVwaWNrZXItdmlldy1tYW5hZ2VyIiwxMil9ZnVuY3Rpb24gaFdlKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsMTMpfWZ1bmN0aW9uIGZXZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDE0KX1mdW5jdGlvbiBwV2UoYyxsKXsxJmMm''@;'; put 'put ''JldyKDAsNCxbIipuZ0lmIiwic2hvd0hlbHBlciJdKX1mdW5jdGlvbiBnV2UoYyxsKXsxJmMmJldyKDAsNSxbIipuZ0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24gbVdlKGMsbCl7MSZjJiZXcigwLDYsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1jb25zdCBfV2U9W1tbImxhYmVsIl1dLFtb''@;'; put 'put ''IiIsImNsck51bWJlcklucHV0IiwiIl1dLFtbImNsci1jb250cm9sLWhlbHBlciJdXSxbWyJjbHItY29udHJvbC1lcnJvciJdXSxbWyJjbHItY29udHJvbC1zdWNjZXNzIl1dXSx3V2U9WyJsYWJlbCIsIltjbHJOdW1iZXJJbnB1dF0iLCJjbHItY29udHJvbC1oZWxwZXIiLCJjbHItY29udHJv''@;'; put 'put ''bC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiBDV2UoYyxsKXsxJmMmJkd0KDAsImxhYmVsIil9ZnVuY3Rpb24gU1dlKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsMTEpfWZ1bmN0aW9uIE1XZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDEyKX1mdW5jdGlvbiB4''@;'; put 'put ''V2UoYyxsKXsxJmMmJldyKDAsMixbIipuZ0lmIiwic2hvd0hlbHBlciJdKX1mdW5jdGlvbiBFV2UoYyxsKXsxJmMmJldyKDAsMyxbIipuZ0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24gVFdlKGMsbCl7MSZjJiZXcigwLDQsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1jb25zdCBBV2U9W1tb''@;'; put 'put ''IiIsImNsclJhZGlvIiwiIl1dLFtbImxhYmVsIl1dXSxrV2U9WyJbY2xyUmFkaW9dIiwibGFiZWwiXTtmdW5jdGlvbiBEV2UoYyxsKXsxJmMmJkd0KDAsImxhYmVsIil9Y29uc3QgSVdlPVtbWyJsYWJlbCJdXSxbWyJjbHItcmFkaW8td3JhcHBlciJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIi''@;'; put 'put ''XV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sUldlPVsibGFiZWwiLCJjbHItcmFkaW8td3JhcHBlciIsImNsci1jb250cm9sLWhlbHBlciIsImNsci1jb250cm9sLWVycm9yIiwiY2xyLWNvbnRyb2wtc3VjY2VzcyJdO2Z1bmN0aW9uIExXZShj''@;'; put 'put ''LGwpezEmYyYmR3QoMCwibGFiZWwiKX1mdW5jdGlvbiBPV2UoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDMpLFdyKDEsMiksaGUoKSl9ZnVuY3Rpb24gUFdlKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsNil9ZnVuY3Rpb24gRldlKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsNyl9ZnVuY3Rp''@;'; put 'put ''b24gSFdlKGMsbCl7MSZjJiZXcigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIE5XZShjLGwpezEmYyYmV3IoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9ZnVuY3Rpb24gVldlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzKSxndCgxLFBXZSwxLDAsImNkcy1pY29u''@;'; put 'put ''Iiw0KSgyLEZXZSwxLDAsImNkcy1pY29uIiw1KSgzLEhXZSwxLDAsIm5nLWNvbnRlbnQiLDApKDQsTldlLDEsMCwibmctY29udGVudCIsMCksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSxFZSgibmdJZiIsYS5zaG93SW52YWxpZCksZmUoKSxFZSgibmdJZiIsYS5zaG93VmFsaWQpLGZl''@;'; put 'put ''KCksRWUoIm5nSWYiLGEuc2hvd0ludmFsaWQpLGZlKCksRWUoIm5nSWYiLGEuc2hvd1ZhbGlkKX19Y29uc3QgQldlPVtbWyJsYWJlbCJdXSxbWyIiLCJjbHJTZWxlY3QiLCIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9s''@;'; put 'put ''LXN1Y2Nlc3MiXV1dLGpXZT1bImxhYmVsIiwiW2NsclNlbGVjdF0iLCJjbHItY29udHJvbC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiB6V2UoYyxsKXsxJmMmJkd0KDAsImxhYmVsIil9ZnVuY3Rpb24gVVdlKGMsbCl7MSZjJiZH''@;'; put 'put ''dCgwLCJjZHMtaWNvbiIsNSl9ZnVuY3Rpb24gWldlKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsNil9ZnVuY3Rpb24gV1dlKGMsbCl7MSZjJiZXcigwLDIsWyIqbmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gWVdlKGMsbCl7MSZjJiZXcigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlk''@;'; put 'put ''Il0pfWZ1bmN0aW9uIEdXZShjLGwpezEmYyYmV3IoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9Y29uc3QgJFdlPVtbWyJsYWJlbCJdXSxbWyIiLCJjbHJUZXh0YXJlYSIsIiJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRy''@;'; put 'put ''b2wtc3VjY2VzcyJdXV0sS1dlPVsibGFiZWwiLCJbY2xyVGV4dGFyZWFdIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rpb24gWFdlKGMsbCl7MSZjJiZHdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIHFXZShjLGwpezEm''@;'; put 'put ''YyYmR3QoMCwiY2RzLWljb24iLDUpfWZ1bmN0aW9uIEpXZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDYpfWZ1bmN0aW9uIFFXZShjLGwpezEmYyYmV3IoMCwyLFsiKm5nSWYiLCJzaG93SGVscGVyIl0pfWZ1bmN0aW9uIGVZZShjLGwpezEmYyYmV3IoMCwzLFsiKm5nSWYiLCJzaG93SW52''@;'; put 'put ''YWxpZCJdKX1mdW5jdGlvbiB0WWUoYyxsKXsxJmMmJldyKDAsNCxbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWNvbnN0IG5ZZT1bImFuY2hvciJdO2Z1bmN0aW9uIHJZZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNCkoMSwiZGl2Iiw1KSgyLCJidXR0b24iLDYpLEd0KDMsImNkcy1pY29uIiw3''@;'; put 'put ''KSxoZSgpKCksV3IoNCksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7RWUoImlkIixhLnBvcG92ZXJJZCksTnIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGFncmlkRmlsdGVyRGlhbG9nQXJpYUxhYmVsKSxmZSgzKSxOcigidGl0bGUiLGEuY29tbW9uU3RyaW5ncy5rZXlz''@;'; put 'put ''LmNsb3NlKX19Y29uc3QgaVllPVsiaW5wdXRfbG93Il0sYVllPVsiaW5wdXQiXSxvWWU9WyJjb2x1bW5Qb3J0YWwiXTtmdW5jdGlvbiBzWWUoYyxsKXsxJmMmJldyKDApfWNvbnN0IGxZZT1bInJlc2l6ZVRyYWNrZXIiXSxjWWU9WyJjb2x1bW5IYW5kbGUiXSx1WWU9W1tbImNsci1kZy1maWx0''@;'; put 'put ''ZXIiXSxbImNsci1kZy1zdHJpbmctZmlsdGVyIl0sWyJjbHItZGctbnVtZXJpYy1maWx0ZXIiXV0sIioiXSxkWWU9WyJjbHItZGctZmlsdGVyLCBjbHItZGctc3RyaW5nLWZpbHRlciwgY2xyLWRnLW51bWVyaWMtZmlsdGVyIiwiKiJdO2Z1bmN0aW9uIGhZZShjLGwpezEmYyYmemwoMCl9ZnVu''@;'; put 'put ''Y3Rpb24gZlllKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsMTApLDImYyYmTnIoImRpcmVjdGlvbiIsT2UoMikuc29ydERpcmVjdGlvbil9ZnVuY3Rpb24gcFllKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiYnV0dG9uIiw3KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHd0KGEpLEN0KE9lKCkuc29ydCgpKX0pLGd0KDEsaFllLDEsMCwibmctY29udGFpbmVyIiw4KSgyLGZZZSwxLDEsImNkcy1pY29uIiw5KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpLGQ9ZmEoNik7ZmUoKSxFZSgibmdUZW1wbGF0ZU91dGxldCIsZCksZmUoKSxFZSgibmdJZiIsYS5zb3J0''@;'; put 'put ''RGlyZWN0aW9uKX19ZnVuY3Rpb24gZ1llKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDExKSxjaSgiY2xyRmlsdGVyVmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKTtyZXR1cm4gZmkoZi5maWx0ZXJWYWx1ZSxo''@;'; put 'put ''KXx8KGYuZmlsdGVyVmFsdWU9aCksQ3QoaCl9KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO0VlKCJjbHJGaWx0ZXJQbGFjZWhvbGRlciIsYS5maWx0ZXJTdHJpbmdQbGFjZWhvbGRlcikoImNsckRnU3RyaW5nRmlsdGVyIixhLnJlZ2lzdGVyZWQpLGxpKCJjbHJGaWx0ZXJWYWx1ZSIsYS5m''@;'; put 'put ''aWx0ZXJWYWx1ZSl9fWZ1bmN0aW9uIG1ZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1kZy1udW1lcmljLWZpbHRlciIsMTIpLGNpKCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpO3JldHVybiBmaShmLmZpbHRlclZhbHVl''@;'; put 'put ''LGgpfHwoZi5maWx0ZXJWYWx1ZT1oKSxDdChoKX0pLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKCk7RWUoImNsckZpbHRlck1heFBsYWNlaG9sZGVyIixhLmZpbHRlck51bWJlck1heFBsYWNlaG9sZGVyKSgiY2xyRmlsdGVyTWluUGxhY2Vob2xkZXIiLGEuZmlsdGVyTnVtYmVyTWluUGxhY2Vo''@;'; put 'put ''b2xkZXIpKCJjbHJEZ051bWVyaWNGaWx0ZXIiLGEucmVnaXN0ZXJlZCksbGkoImNsckZpbHRlclZhbHVlIixhLmZpbHRlclZhbHVlKX19ZnVuY3Rpb24gdlllKGMsbCl7MSZjJiZXcigwLDEpfWZ1bmN0aW9uIHlZZShjLGwpezEmYyYmemwoMCl9ZnVuY3Rpb24gYlllKGMsbCl7aWYoMSZjJiYo''@;'; put 'put ''ZGUoMCwic3BhbiIsMTMpLGd0KDEseVllLDEsMCwibmctY29udGFpbmVyIiw4KSxoZSgpKSwyJmMpe09lKCk7Y29uc3QgYT1mYSg2KTtmZSgpLEVlKCJuZ1RlbXBsYXRlT3V0bGV0IixhKX19ZnVuY3Rpb24gX1llKGMsbCl7MSZjJiZHdCgwLCJjbHItZGctY29sdW1uLXNlcGFyYXRvciIpfWZ1''@;'; put 'put ''bmN0aW9uIHdZZShjLGwpezEmYyYmR3QoMCwiZGl2Iiw0KX1mdW5jdGlvbiBDWWUoYyxsKXsxJmMmJldyKDAsMCxbIipuZ0lmIiwiZW1wdHlEYXRhZ3JpZCJdKX1jb25zdCBTWWU9WyJjZWxsUG9ydGFsIl07ZnVuY3Rpb24gTVllKGMsbCl7MSZjJiZXcigwKX1jb25zdCB4WWU9WyJyb3dQb3J0''@;'; put 'put ''YWwiXTtmdW5jdGlvbiBFWWUoYyxsKXsxJmMmJldyKDApfWNvbnN0IFRZZT1bImRldGFpbEJ1dHRvbiJdLEFZZT1bInN0aWNreUNlbGxzIl0sa1llPVsic2Nyb2xsYWJsZUNlbGxzIl0sRFllPVsiY2FsY3VsYXRlZENlbGxzIl0sSVllPVtbWyJjbHItZGctcm93LWRldGFpbCJdXSxbWyJjbHIt''@;'; put 'put ''ZGctY2VsbCJdXSxbWyJjbHItZGctYWN0aW9uLW92ZXJmbG93Il1dXSxSWWU9WyJjbHItZGctcm93LWRldGFpbCIsImNsci1kZy1jZWxsIiwiY2xyLWRnLWFjdGlvbi1vdmVyZmxvdyJdLExZZT1jPT4oeyJpcy1yZXBsYWNlZCI6Y30pLGpmZT1jPT4oeyJjbHItZm9ybS1jb250cm9sLWRpc2Fi''@;'; put 'put ''bGVkIjpjfSk7ZnVuY3Rpb24gT1llKGMsbCl7fWZ1bmN0aW9uIFBZZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsMTApLGd0KDEsT1llLDAsMCwibmctdGVtcGxhdGUiLDExKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMiksZD1mYSg2KTtFZSgiY2xyRXhw''@;'; put 'put ''YW5kVHJpZ2dlciIsYS5leHBhbmRBbmltYXRpb25UcmlnZ2VyKSxmZSgpLEVlKCJuZ1RlbXBsYXRlT3V0bGV0IixkKX19ZnVuY3Rpb24gRlllKGMsbCl7fWZ1bmN0aW9uIEhZZShjLGwpezEmYyYmZ3QoMCxGWWUsMCwwLCJuZy10ZW1wbGF0ZSIsMTEpLDImYyYmKE9lKDIpLEVlKCJuZ1RlbXBs''@;'; put 'put ''YXRlT3V0bGV0IixmYSg2KSkpfWZ1bmN0aW9uIE5ZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsOSksT3QoIm1vdXNlZG93biIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuY2xlYXJSYW5nZXMoaCkpfSkoImNsaWNrIixmdW5jdGlvbihoKXt3dChhKTtj''@;'; put 'put ''b25zdCBmPU9lKCk7cmV0dXJuIEN0KGYuc2VsZWN0Um93KCFmLnNlbGVjdGVkLGgpKX0pLGd0KDEsUFllLDIsMiwiY2xyLWV4cGFuZGFibGUtYW5pbWF0aW9uIiw3KSgyLEhZZSwxLDEsbnVsbCw4KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO2ZlKCksRWUoIm5nSWYiLGEuZXhwYW5kLmV4''@;'; put 'put ''cGFuZGFibGUpLGZlKCksRWUoIm5nSWYiLCFhLmV4cGFuZC5leHBhbmRhYmxlKX19ZnVuY3Rpb24gVlllKGMsbCl7fWZ1bmN0aW9uIEJZZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsMTApLGd0KDEsVlllLDAsMCwibmctdGVtcGxhdGUiLDExKSxoZSgp''@;'; put 'put ''KSwyJmMpe2NvbnN0IGE9T2UoKSxkPWZhKDYpO0VlKCJjbHJFeHBhbmRUcmlnZ2VyIixhLmV4cGFuZEFuaW1hdGlvblRyaWdnZXIpLGZlKCksRWUoIm5nVGVtcGxhdGVPdXRsZXQiLGQpfX1mdW5jdGlvbiBqWWUoYyxsKXt9ZnVuY3Rpb24gelllKGMsbCl7MSZjJiZndCgwLGpZZSwwLDAsIm5n''@;'; put 'put ''LXRlbXBsYXRlIiwxMSksMiZjJiYoT2UoKSxFZSgibmdUZW1wbGF0ZU91dGxldCIsZmEoNikpKX1mdW5jdGlvbiBVWWUoYyxsKXsxJmMmJldyKDApfWZ1bmN0aW9uIFpZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsMjEpKDEsImRpdiIsMjIpKDIsImlucHV0IiwyMyks''@;'; put 'put ''T3QoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgyKS50b2dnbGUoaCkpfSksaGUoKSxkZSgzLCJsYWJlbCIsMjQpLE90KCJjbGljayIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KE9lKDIpLmNsZWFyUmFuZ2VzKGgpKX0pLGRlKDQsInNwYW4iLDI1''@;'; put 'put ''KSxQZSg1KSxoZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgyKTtFZSgibmdDbGFzcyIsYTQoNyxqZmUsIWEuY2xyRGdTZWxlY3RhYmxlKSksZmUoMiksRWUoIm5nTW9kZWwiLGEuc2VsZWN0ZWQpKCJpZCIsYS5jaGVja2JveElkKSgiZGlzYWJsZWQiLCFhLmNsckRnU2VsZWN0YWJsZXx8''@;'; put 'put ''bnVsbCksTnIoImFyaWEtZGlzYWJsZWQiLCFhLmNsckRnU2VsZWN0YWJsZXx8bnVsbCksZmUoKSxFZSgiZm9yIixhLmNoZWNrYm94SWQpLGZlKDIpLENyKGEuY2xyRGdSb3dTZWxlY3Rpb25MYWJlbHx8YS5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0KX19ZnVuY3Rpb24gV1llKGMsbCl7aWYo''@;'; put 'put ''MSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2IiwyMSkoMSwiY2xyLXJhZGlvLXdyYXBwZXIiKSgyLCJpbnB1dCIsMjYpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDIpO3JldHVybiBmaShmLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlLGgpfHwoZi5z''@;'; put 'put ''ZWxlY3Rpb24uY3VycmVudFNpbmdsZT1oKSxDdChoKX0pLGhlKCksZGUoMywibGFiZWwiLDI3KSg0LCJzcGFuIiwyNSksUGUoNSksaGUoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7RWUoIm5nQ2xhc3MiLGE0KDEwLGpmZSwhYS5jbHJEZ1NlbGVjdGFibGUpKSxmZSgyKSxFZSgiaWQi''@;'; put 'put ''LGEucmFkaW9JZCkoIm5hbWUiLGEuc2VsZWN0aW9uLmlkKyItcmFkaW8iKSgidmFsdWUiLGEuaXRlbSksbGkoIm5nTW9kZWwiLGEuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGUpLEVlKCJjaGVja2VkIixhLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlPT09YS5pdGVtKSgiZGlzYWJsZWQiLCFhLmNs''@;'; put 'put ''ckRnU2VsZWN0YWJsZXx8bnVsbCksTnIoImFyaWEtZGlzYWJsZWQiLCFhLmNsckRnU2VsZWN0YWJsZXx8bnVsbCksZmUoKSxFZSgiZm9yIixhLnJhZGlvSWQpLGZlKDIpLENyKGEuY2xyRGdSb3dTZWxlY3Rpb25MYWJlbHx8YS5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0KX19ZnVuY3Rpb24g''@;'; put 'put ''WVllKGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwyOCksV3IoMSwyKSxoZSgpKX1mdW5jdGlvbiBHWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJidXR0b24iLDMyKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDQpLnRvZ2dsZUV4cGFuZCgpKX0pLEd0''@;'; put 'put ''KDEsImNkcy1pY29uIiwzMyksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoNCk7TnIoImFyaWEtZXhwYW5kZWQiLGEuZXhwYW5kLmV4cGFuZGVkKSgiYXJpYS1sYWJlbCIsYS5leHBhbmQuZXhwYW5kZWQ/YS5jbHJEZ0RldGFpbENsb3NlTGFiZWw6YS5jbHJEZ0RldGFpbE9wZW5MYWJlbCkoImFy''@;'; put 'put ''aWEtY29udHJvbHMiLGEuZXhwYW5kLmhhc0V4cGFuZFRlbXBsYXRlJiYhYS5leHBhbmQuZXhwYW5kZWQ/bnVsbDphLmV4cGFuZGFibGVJZCksZmUoKSxOcigiZGlyZWN0aW9uIixhLmV4cGFuZC5leHBhbmRlZD8iZG93biI6InJpZ2h0IikoInRpdGxlIixhLmV4cGFuZC5leHBhbmRlZD9hLmNv''@;'; put 'put ''bW1vblN0cmluZ3Mua2V5cy5jb2xsYXBzZTphLmNvbW1vblN0cmluZ3Mua2V5cy5leHBhbmQpfX1mdW5jdGlvbiAkWWUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItc3Bpbm5lciIsMzQpLFBlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSg0KTtmZSgpLENyKGEuY29tbW9uU3RyaW5ncy5rZXlz''@;'; put 'put ''LmxvYWRpbmcpfX1mdW5jdGlvbiBLWWUoYyxsKXtpZigxJmMmJihvaSgwKSxndCgxLEdZZSwyLDUsImJ1dHRvbiIsMzApKDIsJFllLDIsMSwiY2xyLXNwaW5uZXIiLDMxKSxzaSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoKSxFZSgibmdJZiIsIWEuZXhwYW5kLmxvYWRpbmcpLGZlKCksRWUo''@;'; put 'put ''Im5nSWYiLGEuZXhwYW5kLmxvYWRpbmcpfX1mdW5jdGlvbiBYWWUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDI5KSxndCgxLEtZZSwzLDIsIm5nLWNvbnRhaW5lciIsOCksaGUoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKCksRWUoIm5nSWYiLGEuZXhwYW5kLmV4cGFuZGFibGUpfX1mdW5j''@;'; put 'put ''dGlvbiBxWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJidXR0b24iLDM3LDUpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPWZhKDEpLGY9T2UoMyk7cmV0dXJuIEN0KGYuZGV0YWlsU2VydmljZS50b2dnbGUoZi5pdGVtLGgpKX0pLEd0KDIsImNkcy1pY29u''@;'; put 'put ''IiwzOCksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoMyk7eHIoImlzLW9wZW4iLGEuZGV0YWlsU2VydmljZS5pc1Jvd09wZW4oYS5pdGVtKSksRWUoImRpc2FibGVkIixhLmRldGFpbERpc2FibGVkKSxOcigiYXJpYS1sYWJlbCIsYS5kZXRhaWxTZXJ2aWNlLmlzUm93T3BlbihhLml0ZW0pP2Eu''@;'; put 'put ''Y2xyRGdEZXRhaWxDbG9zZUxhYmVsOmEuY2xyRGdEZXRhaWxPcGVuTGFiZWwpKCJhcmlhLWV4cGFuZGVkIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSkpKCJhcmlhLWNvbnRyb2xzIixhLmRldGFpbFNlcnZpY2UuaWQpLGZlKDIpLE5yKCJkaXJlY3Rpb24iLGEuZGV0YWlsU2Vy''@;'; put 'put ''dmljZS5pc1Jvd09wZW4oYS5pdGVtKT8ibGVmdCI6InJpZ2h0IikoInRpdGxlIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSk/YS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2U6YS5jb21tb25TdHJpbmdzLmtleXMub3Blbil9fWZ1bmN0aW9uIEpZZShjLGwpe2lmKDEmYyYmKGRl''@;'; put 'put ''KDAsImRpdiIsMzUpLGd0KDEscVllLDMsOCwiYnV0dG9uIiwzNiksaGUoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKCksRWUoIm5nSWYiLCFhLmRldGFpbEhpZGRlbil9fWZ1bmN0aW9uIFFZZShjLGwpe31mdW5jdGlvbiBlR2UoYyxsKXsxJmMmJmd0KDAsUVllLDAsMCwibmctdGVtcGxhdGUi''@;'; put 'put ''LDExKSwyJmMmJihPZSgyKSxFZSgibmdUZW1wbGF0ZU91dGxldCIsZmEoNCkpKX1mdW5jdGlvbiB0R2UoYyxsKXt9ZnVuY3Rpb24gbkdlKGMsbCl7MSZjJiZndCgwLHRHZSwwLDAsIm5nLXRlbXBsYXRlIiwxMSksMiZjJiYoT2UoMiksRWUoIm5nVGVtcGxhdGVPdXRsZXQiLGZhKDQpKSl9ZnVu''@;'; put 'put ''Y3Rpb24gckdlKGMsbCl7MSZjJiZHdCgwLCJjbHItZGctY2VsbCIsMzkpfWZ1bmN0aW9uIGlHZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTIpKDEsImRpdiIsMTMpLG9pKDIsbnVsbCwzKSxndCg0LFpZZSw2LDksImRpdiIsMTQpKDUsV1llLDYsMTIsImRpdiIsMTQpKDYsWVllLDIsMCwi''@;'; put 'put ''ZGl2IiwxNSkoNyxYWWUsMiwxLCJkaXYiLDE2KSg4LEpZZSwyLDEsImRpdiIsMTcpLHNpKCksaGUoKSxkZSg5LCJkaXYiLDE4KSgxMCwiZGl2IiwxOSksV3IoMTEsMSksemwoMTIsbnVsbCw0KSxoZSgpLGd0KDE0LGVHZSwxLDEsbnVsbCw4KSgxNSxuR2UsMSwxLG51bGwsOCksaGUoKSxndCgx''@;'; put 'put ''NixyR2UsMSwwLCJjbHItZGctY2VsbCIsMjApLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO3hyKCJkYXRhZ3JpZC1yb3ctZGV0YWlsLW9wZW4iLGEuZGV0YWlsU2VydmljZS5pc1Jvd09wZW4oYS5pdGVtKSksRWUoImlkIixhLmlkKSxmZSg0KSxFZSgibmdJZiIsYS5zZWxlY3Rpb24uc2VsZWN0''@;'; put 'put ''aW9uVHlwZT09PWEuU0VMRUNUSU9OX1RZUEUuTXVsdGkpLGZlKCksRWUoIm5nSWYiLGEuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1hLlNFTEVDVElPTl9UWVBFLlNpbmdsZSksZmUoKSxFZSgibmdJZiIsYS5yb3dBY3Rpb25TZXJ2aWNlLmhhc0FjdGlvbmFibGVSb3cpLGZlKCksRWUoIm5n''@;'; put 'put ''SWYiLGEuZ2xvYmFsRXhwYW5kYWJsZS5oYXNFeHBhbmRhYmxlUm93KSxmZSgpLEVlKCJuZ0lmIixhLmRldGFpbFNlcnZpY2UuZW5hYmxlZCksZmUoKSxFZSgibmdDbGFzcyIsYTQoMTIsTFllLGEucmVwbGFjZWQmJmEuZXhwYW5kZWQpKSxmZSg1KSxFZSgibmdJZiIsYS5yZXBsYWNlZCYmIWEu''@;'; put 'put ''ZXhwYW5kLmxvYWRpbmcpLGZlKCksRWUoIm5nSWYiLCFhLnJlcGxhY2VkJiYhYS5leHBhbmQubG9hZGluZyksZmUoKSxFZSgibmdJZiIsYS5za2VsZXRvbkxvYWRpbmcpfX1jb25zdCBhR2U9WyJkYXRhZ3JpZCJdLG9HZT1bImRhdGFncmlkVGFibGUiXSxzR2U9WyJzY3JvbGxhYmxlQ29sdW1u''@;'; put 'put ''cyJdLGxHZT1bInByb2plY3RlZERpc3BsYXlDb2x1bW5zIl0sY0dlPVsicHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zIl0sdUdlPVsiZGlzcGxheWVkUm93cyJdLGRHZT1bImNhbGN1bGF0aW9uUm93cyJdLGhHZT1bInNlbGVjdEFsbENoZWNrYm94Il0sZkdlPVtbWyJjbHItZGctYWN0aW9u''@;'; put 'put ''LWJhciJdXSxbWyJjbHItZGctcGxhY2Vob2xkZXIiXV0sW1siY2xyLWRnLWZvb3RlciJdXSxbWyIiLCJjbHJJZkRldGFpbCIsIiJdLFsiY2xyLWRnLWRldGFpbCJdXV0scEdlPVsiY2xyLWRnLWFjdGlvbi1iYXIiLCJjbHItZGctcGxhY2Vob2xkZXIiLCJjbHItZGctZm9vdGVyIiwiW2Nscklm''@;'; put 'put ''RGV0YWlsXSxjbHItZGctZGV0YWlsIl07ZnVuY3Rpb24gZ0dlKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2IiwzMCkoMSwiaW5wdXQiLDMxLDYpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDIpO3JldHVybiBmaShmLmFsbFNlbGVj''@;'; put 'put ''dGVkLGgpfHwoZi5hbGxTZWxlY3RlZD1oKSxDdChoKX0pLGhlKCksZGUoMywibGFiZWwiLDMyKSg0LCJzcGFuIiwzMyksUGUoNSksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPU9lKDIpO2ZlKCksRWUoImlkIixhLnNlbGVjdEFsbElkKSxsaSgibmdNb2RlbCIsYS5hbGxTZWxlY3RlZCksTnIo''@;'; put 'put ''ImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdEFsbCksZmUoMiksRWUoImZvciIsYS5zZWxlY3RBbGxJZCksZmUoMiksQ3IoYS5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0QWxsKX19ZnVuY3Rpb24gbUdlKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2''@;'; put 'put ''IiwyNyksT3QoImtleWRvd24uc3BhY2UiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgpLnRvZ2dsZUFsbFNlbGVjdGVkKGgpKX0pLGd0KDEsZ0dlLDYsNSwiZGl2IiwyOCksR3QoMiwiZGl2IiwyOSksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLEVlKCJuZ0lmIiwhYS52''@;'; put 'put ''aXJ0dWFsU2Nyb2xsfHxhLmN1c3RvbVNlbGVjdEFsbEVuYWJsZWQpfX1mdW5jdGlvbiB2R2UoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDM0KSgxLCJkaXYiLDMzKSxQZSgyKSxoZSgpLEd0KDMsImRpdiIsMjkpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDIpLENyKGEuY2xyRGdTaW5n''@;'; put 'put ''bGVTZWxlY3Rpb25BcmlhTGFiZWwpfX1mdW5jdGlvbiB5R2UoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDM1KSgxLCJkaXYiLDMzKSxQZSgyKSxoZSgpLEd0KDMsImRpdiIsMjkpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDIpLENyKGEuY2xyRGdTaW5nbGVBY3Rpb25hYmxlQXJpYUxh''@;'; put 'put ''YmVsKX19ZnVuY3Rpb24gYkdlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzNikoMSwiZGl2IiwzMyksUGUoMiksaGUoKSxHdCgzLCJkaXYiLDI5KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgyKSxDcihhLmNsckRldGFpbEV4cGFuZGFibGVBcmlhTGFiZWwpfX1mdW5jdGlvbiBfR2Uo''@;'; put 'put ''YyxsKXtpZigxJmMmJihkZSgwLCJjbHItZGctcm93IiwzNykoMSwiY2xyLWRnLWNlbGwiKSxHdCgyLCJjbHItc3Bpbm5lciIsMzgpLGRlKDMsInNwYW4iKSxQZSg0KSxoZSgpKCkoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoNCksQ3IoYS5jb21tb25TdHJpbmdzLmtleXMubG9hZGluZyl9fWZ1''@;'; put 'put ''bmN0aW9uIHdHZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1kZy1yb3ciLDM3KSgxLCJjbHItZGctY2VsbCIpLEd0KDIsImNsci1zcGlubmVyIiwzOCksZGUoMywic3BhbiIpLFBlKDQpLGhlKCkoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSg0KSxDcihhLmNvbW1vblN0cmluZ3Mua2V5cy5s''@;'; put 'put ''b2FkaW5nKX19ZnVuY3Rpb24gQ0dlKGMsbCl7MSZjJiZHdCgwLCJjbHItZGctcGxhY2Vob2xkZXIiKX1mdW5jdGlvbiBTR2UoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDM5KSgxLCJjbHItc3Bpbm5lciIsMzgpLFBlKDIsIkxvYWRpbmciKSxoZSgpKCkpfWNvbnN0IHhHZT1bImFsbFNlbGVjdGVk''@;'; put 'put ''Il07ZnVuY3Rpb24gRUdlKGMsbCl7fWZ1bmN0aW9uIFRHZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImxpIikoMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgyLCJpbnB1dCIsMTMpLE90KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNp''@;'; put 'put ''dDtyZXR1cm4gQ3QoT2UoMikudG9nZ2xlQ29sdW1uU3RhdGUoZiwhaCkpfSksaGUoKSxkZSgzLCJsYWJlbCIpLGd0KDQsRUdlLDAsMCwibmctdGVtcGxhdGUiLDE0KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1PZSgyKTtmZSgyKSxFZSgiZGlzYWJsZWQiLGQuaGFz''@;'; put 'put ''T25seU9uZVZpc2libGVDb2x1bW4mJiFhLmhpZGRlbikoIm5nTW9kZWwiLCFhLmhpZGRlbiksZmUoMiksRWUoIm5nVGVtcGxhdGVPdXRsZXQiLGEudGl0bGVUZW1wbGF0ZVJlZil9fWZ1bmN0aW9uIEFHZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsMykoMSwiZGl2Iiw0''@;'; put 'put ''KSgyLCJkaXYiLDUsMCksUGUoNCksaGUoKSxkZSg1LCJoMiIpLFBlKDYpLGhlKCksZGUoNywiYnV0dG9uIiw2KSxHdCg4LCJjZHMtaWNvbiIsNyksZGUoOSwic3BhbiIsOCksUGUoMTApLGhlKCkoKSgpLGRlKDExLCJ1bCIsOSksZ3QoMTIsVEdlLDUsMywibGkiLDEwKSxoZSgpLGRlKDEzLCJk''@;'; put 'put ''aXYiLDExKSgxNCwiY2xyLWRnLWNvbHVtbi10b2dnbGUtYnV0dG9uIiwxMiksT3QoImNsckFsbFNlbGVjdGVkIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmFsbENvbHVtbnNTZWxlY3RlZCgpKX0pLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO0VlKCJpZCIsYS5wb3Bv''@;'; put 'put ''dmVySWQpLE5yKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5zaG93Q29sdW1uc01lbnVEZXNjcmlwdGlvbiksZmUoNCksQ3IoYS5jb21tb25TdHJpbmdzLmtleXMuYWxsQ29sdW1uc1NlbGVjdGVkKSxmZSgyKSxDcihhLmNvbW1vblN0cmluZ3Mua2V5cy5zaG93Q29sdW1ucyks''@;'; put 'put ''ZmUoKSxOcigiYXJpYS1sYWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpLGZlKCksTnIoInRpdGxlIixhLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSksZmUoMiksQ3IoYS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpLGZlKDIpLEVlKCJuZ0Zvck9mIixhLmhpZGVhYmxlQ29sdW1u''@;'; put 'put ''U3RhdGVzKSgibmdGb3JUcmFja0J5IixhLnRyYWNrQnlGbil9fWNvbnN0IHpmZT1bInRpdGxlIl0sREdlPVtbWyJjbHItZGctcGFnaW5hdGlvbiJdXSwiKiJdLElHZT1bImNsci1kZy1wYWdpbmF0aW9uIiwiKiJdO2Z1bmN0aW9uIFJHZShjLGwpe2lmKDEmYyYmKG9pKDApLGRlKDEsImRpdiIs''@;'; put 'put ''MSkoMiwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDIpLEd0KDMsImlucHV0IiwzKSxkZSg0LCJsYWJlbCIpLFBlKDUpLGhlKCksZGUoNiwic3BhbiIsNCksUGUoNyksaGUoKSgpKCksc2koKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoNSksQ3IoYS5zZWxlY3Rpb24uY3VycmVudC5sZW5ndGgpLGZl''@;'; put 'put ''KDIpLENyKGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdGVkUm93cyl9fWZ1bmN0aW9uIExHZShjLGwpezEmYyYmR3QoMCwiY2xyLWRnLWNvbHVtbi10b2dnbGUiKX1mdW5jdGlvbiBPR2UoYyxsKXtpZigxJmMmJihvaSgwKSxndCgxLExHZSwxLDAsImNsci1kZy1jb2x1bW4tdG9nZ2xlIiww''@;'; put 'put ''KSxkZSgyLCJkaXYiLDUpLFdyKDMsMSksaGUoKSxzaSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLEVlKCJuZ0lmIixhLmhhc0hpZGVhYmxlQ29sdW1ucyl9fWZ1bmN0aW9uIFBHZShjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsNCksUGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGlt''@;'; put 'put ''cGxpY2l0O0VlKCJuZ1ZhbHVlIixhKSxmZSgpLENyKGEpfX1jb25zdCBGR2U9WyJjdXJyZW50UGFnZUlucHV0Il0sSEdlPVsiKiIsW1siY2xyLWRnLXBhZ2Utc2l6ZSJdXV0sTkdlPVsiKiIsImNsci1kZy1wYWdlLXNpemUiXTtmdW5jdGlvbiBWR2UoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDYp''@;'; put 'put ''LFdyKDEsMSksaGUoKSl9ZnVuY3Rpb24gQkdlKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiaW5wdXQiLDE4LDEpLE90KCJrZXlkb3duLmVudGVyIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoMykudXBkYXRlQ3VycmVudFBhZ2UoaCkpfSkoImJsdXIiLGZ1bmN0aW9u''@;'; put 'put ''KGgpe3JldHVybiB3dChhKSxDdChPZSgzKS52ZXJpZnlDdXJyZW50UGFnZShoKSl9KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1PZSgzKTtFZSgic2l6ZSIsYS5wYWdlLmxhc3QudG9TdHJpbmcoKS5sZW5ndGgpKCJ2YWx1ZSIsYS5wYWdlLmN1cnJlbnQpLE5yKCJhcmlhLWxhYmVsIixhLmNvbW1v''@;'; put 'put ''blN0cmluZ3Mua2V5cy5jdXJyZW50UGFnZSl9fWZ1bmN0aW9uIGpHZShjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoKSxDcihhLnBhZ2UuY3VycmVudCl9fWZ1bmN0aW9uIHpHZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2Rl''@;'; put 'put ''KDAsImRpdiIsNykoMSwiYnV0dG9uIiw4KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDIpLnBhZ2UuY3VycmVudD0xKX0pLGRlKDIsInNwYW4iLDkpLFBlKDMpLGhlKCksR3QoNCwiY2RzLWljb24iLDEwKSxoZSgpLGRlKDUsImJ1dHRvbiIsMTEpLE90KCJjbGlj''@;'; put 'put ''ayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpO3JldHVybiBDdChoLnBhZ2UuY3VycmVudD1oLnBhZ2UuY3VycmVudC0xKX0pLGRlKDYsInNwYW4iLDkpLFBlKDcpLGhlKCksR3QoOCwiY2RzLWljb24iLDEyKSxoZSgpLGd0KDksQkdlLDIsMywiaW5wdXQiLDEzKSgxMCxqR2UsMiwx''@;'; put 'put ''LCJuZy10ZW1wbGF0ZSIsbnVsbCwwLHhjKSxQZSgxMiwiIFx4YTAvXHhhMCIpLGRlKDEzLCJzcGFuIiksUGUoMTQpLGhlKCksZGUoMTUsImJ1dHRvbiIsMTQpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpO3JldHVybiBDdChoLnBhZ2UuY3VycmVudD1oLnBhZ2Uu''@;'; put 'put ''Y3VycmVudCsxKX0pLGRlKDE2LCJzcGFuIiw5KSxQZSgxNyksaGUoKSxHdCgxOCwiY2RzLWljb24iLDE1KSxoZSgpLGRlKDE5LCJidXR0b24iLDE2KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgyKTtyZXR1cm4gQ3QoaC5wYWdlLmN1cnJlbnQ9aC5wYWdlLmxhc3Qp''@;'; put 'put ''fSksZGUoMjAsInNwYW4iLDkpLFBlKDIxKSxoZSgpLEd0KDIyLCJjZHMtaWNvbiIsMTcpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9ZmEoMTEpLGQ9T2UoMik7ZmUoKSxFZSgiZGlzYWJsZWQiLGQucGFnZS5jdXJyZW50PD0xKSxOcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMu''@;'; put 'put ''Zmlyc3RQYWdlKSxmZSgyKSxDcihkLmNvbW1vblN0cmluZ3Mua2V5cy5maXJzdFBhZ2UpLGZlKDIpLEVlKCJkaXNhYmxlZCIsZC5wYWdlLmN1cnJlbnQ8PTEpLE5yKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5wcmV2aW91c1BhZ2UpLGZlKDIpLENyKGQuY29tbW9uU3RyaW5n''@;'; put 'put ''cy5rZXlzLnByZXZpb3VzUGFnZSksZmUoMiksRWUoIm5nSWYiLCFkLmRpc2FibGVDdXJyZW50UGFnZUlucHV0KSgibmdJZkVsc2UiLGEpLGZlKDQpLE5yKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy50b3RhbFBhZ2VzKSxmZSgpLENyKGQucGFnZS5sYXN0KSxmZSgpLEVlKCJk''@;'; put 'put ''aXNhYmxlZCIsZC5wYWdlLmN1cnJlbnQ+PWQucGFnZS5sYXN0KSxOcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMubmV4dFBhZ2UpLGZlKDIpLENyKGQuY29tbW9uU3RyaW5ncy5rZXlzLm5leHRQYWdlKSxmZSgyKSxFZSgiZGlzYWJsZWQiLGQucGFnZS5jdXJyZW50Pj1kLnBh''@;'; put 'put ''Z2UubGFzdCksTnIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmxhc3RQYWdlKSxmZSgyKSxDcihkLmNvbW1vblN0cmluZ3Mua2V5cy5sYXN0UGFnZSl9fWZ1bmN0aW9uIFVHZShjLGwpe2lmKDEmYyYmKG9pKDApLGd0KDEsVkdlLDIsMCwiZGl2IiwzKSxkZSgyLCJkaXYiLDQp''@;'; put 'put ''LFdyKDMpLGhlKCksZ3QoNCx6R2UsMjMsMTYsImRpdiIsNSksc2koKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSxFZSgibmdJZiIsYS5fcGFnZVNpemVDb21wb25lbnQpLGZlKDMpLEVlKCJuZ0lmIixhLnBhZ2UubGFzdD4xKX19ZnVuY3Rpb24gWkdlKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9u''@;'; put 'put ''KCk7b2koMCksZGUoMSwiZGl2IiwxOSksUGUoMiksaGUoKSxkZSgzLCJkaXYiLDcpKDQsImJ1dHRvbiIsMTEpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCk7cmV0dXJuIEN0KGgucGFnZS5jdXJyZW50PWgucGFnZS5jdXJyZW50LTEpfSksZGUoNSwic3BhbiIsOSks''@;'; put 'put ''UGUoNiksaGUoKSxHdCg3LCJjZHMtaWNvbiIsMTIpLGhlKCksZGUoOCwic3BhbiIpLFBlKDkpLGhlKCksZGUoMTAsImJ1dHRvbiIsMTQpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCk7cmV0dXJuIEN0KGgucGFnZS5jdXJyZW50PWgucGFnZS5jdXJyZW50KzEpfSks''@;'; put 'put ''ZGUoMTEsInNwYW4iLDkpLFBlKDEyKSxoZSgpLEd0KDEzLCJjZHMtaWNvbiIsMTUpLGhlKCkoKSxzaSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO2ZlKDIpLGszKCIgIixhLnBhZ2UuZmlyc3RJdGVtKzEsIi0iLGEucGFnZS5sYXN0SXRlbSsxLCIgLyAiLGEucGFnZS50b3RhbEl0ZW1zLCIgIiks''@;'; put 'put ''ZmUoMiksRWUoImRpc2FibGVkIixhLnBhZ2UuY3VycmVudDw9MSksTnIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLnByZXZpb3VzUGFnZSksZmUoMiksQ3IoYS5jb21tb25TdHJpbmdzLmtleXMucHJldmlvdXNQYWdlKSxmZSgzKSxDcihhLnBhZ2UuY3VycmVudCksZmUoKSxF''@;'; put 'put ''ZSgiZGlzYWJsZWQiLGEucGFnZS5jdXJyZW50Pj1hLnBhZ2UubGFzdCksTnIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLm5leHRQYWdlKSxmZSgyKSxDcihhLmNvbW1vblN0cmluZ3Mua2V5cy5uZXh0UGFnZSl9fWNvbnN0ICRHZT1bW1siY2xyLXN0YWNrLWxhYmVsIl1dLCIq''@;'; put 'put ''IixbWyJjbHItc3RhY2stYmxvY2siXV1dLEtHZT1bImNsci1zdGFjay1sYWJlbCIsIioiLCJjbHItc3RhY2stYmxvY2siXTtmdW5jdGlvbiBYR2UoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiw3KSwyJmMmJk5yKCJkaXJlY3Rpb24iLE9lKCkuY2FyZXREaXJlY3Rpb24pfWZ1bmN0aW9uIHFH''@;'; put 'put ''ZShjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDgpLFBlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCksQ3IoYS5jb21tb25TdHJpbmdzLmtleXMuc3RhY2tWaWV3Q2hhbmdlZCl9fWZ1bmN0aW9uIEpHZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsOSksV3IoMSwyKSxoZSgpKSwy''@;'; put 'put ''JmMpe2NvbnN0IGE9T2UoKTttZCgiaGVpZ2h0IixhLmV4cGFuZGVkPyJhdXRvIjowKSxOcigiaWQiLGEuZ2V0U3RhY2tDaGlsZHJlbklkKCkpKCJhcmlhLWxhYmVsbGVkYnkiLGEubGFiZWxsZWRCeUlkKX19Y29uc3QgUUdlPVtbWyJjbHItc3RhY2staGVhZGVyIl1dLCIqIl0sZSRlPVsiY2xy''@;'; put 'put ''LXN0YWNrLWhlYWRlciIsIioiXTtmdW5jdGlvbiByJGUoYyxsKXsxJmMmJnpsKDApfWZ1bmN0aW9uIGkkZShjLGwpe2lmKDEmYyYmKG9pKDApLGd0KDEsciRlLDEsMCwibmctY29udGFpbmVyIiwyKSxzaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1PZSgyKTtmZSgpLEVlKCJuZ1Rl''@;'; put 'put ''bXBsYXRlT3V0bGV0IixkLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb24udGVtcGxhdGUpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsZC5nZXRDb250ZXh0KGEpKX19ZnVuY3Rpb24gYSRlKGMsbCl7aWYoMSZjJiYob2koMCksZ3QoMSxpJGUsMiwyLCJuZy1jb250YWluZXIiLDEpLHNpKCkp''@;'; put 'put ''LDImYyl7Y29uc3QgYT1PZSgpO2ZlKCksRWUoIm5nRm9yT2YiLChudWxsPT1hLnBhcmVudD9udWxsOmEucGFyZW50LmNoaWxkcmVuKXx8YS5jaGlsZHJlbil9fWNvbnN0IG8kZT1bImNvbnRlbnRDb250YWluZXIiXSxzJGU9W1tbImNsci10cmVlLW5vZGUiXV0sW1siIiwiY2xySWZFeHBhbmRl''@;'; put 'put ''ZCIsIiJdXSwiKiJdLGwkZT1bImNsci10cmVlLW5vZGUiLCJbY2xySWZFeHBhbmRlZF0iLCIqIl07ZnVuY3Rpb24gYyRlKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiYnV0dG9uIiw5KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuZXhwYW5kU2Vy''@;'; put 'put ''dmljZS50b2dnbGUoKSl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuZm9jdXNUcmVlTm9kZSgpKX0pLEd0KDEsImNkcy1pY29uIiwxMCksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoKTtFZSgiZGlzYWJsZWQiLGEuZGlzYWJsZWQpLGZlKCksTnIoImRpcmVjdGlv''@;'; put 'put ''biIsYS5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkPyJkb3duIjoicmlnaHQiKX19ZnVuY3Rpb24gdSRlKGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwxMSksR3QoMSwic3BhbiIsMTIpLGhlKCkpfWZ1bmN0aW9uIGQkZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsMTMpKDEsImlu''@;'; put 'put ''cHV0IiwxNCksT3QoImNoYW5nZSIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCk7cmV0dXJuIEN0KGguX21vZGVsLnRvZ2dsZVNlbGVjdGlvbihoLmZlYXR1cmVzU2VydmljZS5lYWdlcikpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmZvY3VzVHJlZU5v''@;'; put 'put ''ZGUoKSl9KSxoZSgpLGRlKDIsImxhYmVsIiwxNSksemwoMywxNiksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpLGQ9ZmEoNyk7ZmUoKSxFZSgiaWQiLGEubm9kZUlkKyItY2hlY2siKSgiZGlzYWJsZWQiLGEuZGlzYWJsZWQpKCJjaGVja2VkIixhLl9tb2RlbC5zZWxlY3RlZC52YWx1ZT09''@;'; put 'put ''PWEuU1RBVEVTLlNFTEVDVEVEKSgiaW5kZXRlcm1pbmF0ZSIsYS5fbW9kZWwuc2VsZWN0ZWQudmFsdWU9PT1hLlNUQVRFUy5JTkRFVEVSTUlOQVRFKSxmZSgpLEVlKCJmb3IiLGEubm9kZUlkKyItY2hlY2siKSxmZSgpLEVlKCJuZ1RlbXBsYXRlT3V0bGV0IixkKX19ZnVuY3Rpb24gaCRlKGMs''@;'; put 'put ''bCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2IiwxNyksT3QoIm1vdXNldXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuZm9jdXNUcmVlTm9kZSgpKX0pLHpsKDEsMTYpLGhlKCl9aWYoMiZjKXtPZSgpO2NvbnN0IGE9ZmEoNyk7ZmUoKSxFZSgibmdUZW1wbGF0ZU91''@;'; put 'put ''dGxldCIsYSl9fWZ1bmN0aW9uIGYkZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTkpKDEsInNwYW4iKSxQZSgyKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgyKSxJcigiICIsYS5hcmlhU2VsZWN0ZWQ/YS5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0ZWRUcmVlTm9kZTphLmNv''@;'; put 'put ''bW1vblN0cmluZ3Mua2V5cy51bnNlbGVjdGVkVHJlZU5vZGUsIiIpfX1mdW5jdGlvbiBwJGUoYyxsKXtpZigxJmMmJihXcigwLDIpLGd0KDEsZiRlLDMsMSwiZGl2IiwxOCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCksRWUoIm5nSWYiLGEuZmVhdHVyZXNTZXJ2aWNlLnNlbGVjdGFibGV8fGEu''@;'; put 'put ''YXJpYVNlbGVjdGVkKX19ZnVuY3Rpb24gZyRlKGMsbCl7MSZjJiZHdCgwLCJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIiwxKSwyJmMmJkVlKCJjaGlsZHJlbiIsT2UoKS5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uLnJvb3QpfWZ1bmN0aW9uIG0kZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1Pbigp''@;'; put 'put ''O2RlKDAsImJ1dHRvbiIsNCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5jbG9zZSgpKX0pLEd0KDEsImNkcy1pY29uIiw1KSxoZSgpfTImYyYmTnIoImFyaWEtbGFiZWwiLE9lKDIpLmNsckNsb3NlQnV0dG9uQXJpYUxhYmVsKX1mdW5jdGlvbiB2JGUoYyxs''@;'; put 'put ''KXtpZigxJmMmJihkZSgwLCJkaXYiLDEpKDEsImRpdiIsMiksV3IoMiksaGUoKSxndCgzLG0kZSwyLDEsImJ1dHRvbiIsMyksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7eHIoImFsZXJ0LXNtIixhLmlzU21hbGwpKCJhbGVydC1saWdodHdlaWdodCIsYS5pc0xpZ2h0d2VpZ2h0KSgiYWxlcnQt''@;'; put 'put ''YXBwLWxldmVsIixhLmlzQXBwTGV2ZWwpLEVlKCJuZ0NsYXNzIixhLmFsZXJ0Q2xhc3MpLGZlKDMpLEVlKCJuZ0lmIixhLmNsb3NhYmxlKX19ZnVuY3Rpb24geSRlKGMsbCl7MSZjJiZHdCgwLCJjbHItc3Bpbm5lciIsMyl9ZnVuY3Rpb24gYiRlKGMsbCl7aWYoMSZjJiZHdCgwLCJjZHMtaWNv''@;'; put 'put ''biIsNCksMiZjKXtjb25zdCBhPU9lKCk7TnIoInNoYXBlIixhLmljb25TZXJ2aWNlLmFsZXJ0SWNvblNoYXBlKSgiYXJpYS1sYWJlbCIsYS5pY29uU2VydmljZS5hbGVydEljb25UaXRsZSl9fWNvbnN0IF8kZT1bW1siY2xyLWFsZXJ0Il1dXSx3JGU9WyJjbHItYWxlcnQiXTtmdW5jdGlvbiBD''@;'; put 'put ''JGUoYyxsKXsxJmMmJkd0KDAsImNsci1hbGVydHMtcGFnZXIiLDIpLDImYyYmRWUoImNsckN1cnJlbnRBbGVydEluZGV4IixPZSgpLmN1cnJlbnRBbGVydEluZGV4KX1jb25zdCBTJGU9WyJjbHJJbnRlcm5hbE1vZGFsQ29udGVudFRlbXBsYXRlIl0sVWZlPVsiYm9keSJdLE0kZT1bW1siIiw4''@;'; put 'put ''LCJsZWFkaW5nLWJ1dHRvbiJdXSxbWyIiLDgsIm1vZGFsLXRpdGxlIl1dLFtbIiIsOCwibW9kYWwtYm9keSJdXSxbWyIiLDgsIm1vZGFsLWZvb3RlciJdXV0seCRlPVsiLmxlYWRpbmctYnV0dG9uIiwiLm1vZGFsLXRpdGxlIiwiLm1vZGFsLWJvZHkiLCIubW9kYWwtZm9vdGVyIl07ZnVuY3Rp''@;'; put 'put ''b24gRSRlKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiYnV0dG9uIiwxNCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgzKS5jbG9zZSgpKX0pLEd0KDEsImNkcy1pY29uIiwxNSksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoMyk7TnIoImFyaWEtbGFi''@;'; put 'put ''ZWwiLGEuY2xvc2VCdXR0b25BcmlhTGFiZWx8fGEuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlKX19ZnVuY3Rpb24gVCRlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw4KSgxLCJkaXYiLDkpKDIsImRpdiIsMTApLFdyKDMpLGRlKDQsImRpdiIsMTEsMCksV3IoNiwxKSxoZSgpLGd0KDcsRSRl''@;'; put 'put ''LDIsMSwiYnV0dG9uIiwxMiksaGUoKSxkZSg4LCJkaXYiLDEzLDEpLFdyKDEwLDIpLGhlKCksV3IoMTEsMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoNCksRWUoImlkIixhLm1vZGFsSWQpLGZlKDMpLEVlKCJuZ0lmIixhLmNsb3NhYmxlKX19ZnVuY3Rpb24gQSRlKGMsbCl7aWYo''@;'; put 'put ''MSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2Iiw0KSgxLCJkaXYiLDUpLE90KCJAZmFkZU1vdmUuZG9uZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuZmFkZURvbmUoaCkpfSksZGUoMiwiZGl2Iiw2KSxQZSgzKSxoZSgpLGd0KDQsVCRlLDEyLDIsImRpdiIsNyksZGUoNSwi''@;'; put 'put ''ZGl2Iiw2KSxQZSg2KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoKTt4cigibW9kYWwtZnVsbC1zY3JlZW4iLCJmdWxsLXNjcmVlbiI9PWEuc2l6ZSksZmUoKSx4cigibW9kYWwtc20iLCJzbSI9PWEuc2l6ZSkoIm1vZGFsLWxnIiwibGciPT1hLnNpemUpKCJtb2RhbC14bCIsInhsIj09''@;'; put 'put ''YS5zaXplKSxFZSgiY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmUiLCEwKSgiQGZhZGVNb3ZlIixhLmZhZGVNb3ZlKSxOcigiYXJpYS1oaWRkZW4iLCFhLl9vcGVuKSgiYXJpYS1sYWJlbGxlZGJ5IixhLmxhYmVsbGVkQnl8fGEubW9kYWxJZCksZmUoMiksQ3IoYS5jb21tb25TdHJpbmdzLmtleXMu''@;'; put 'put ''bW9kYWxDb250ZW50U3RhcnQpLGZlKCksRWUoIm5nSWYiLCFhLm1vZGFsQ29udGVudFRlbXBsYXRlKSgibmdJZkVsc2UiLGEubW9kYWxDb250ZW50VGVtcGxhdGUpLGZlKDIpLENyKGEuY29tbW9uU3RyaW5ncy5rZXlzLm1vZGFsQ29udGVudEVuZCl9fWZ1bmN0aW9uIGskZShjLGwpe2lmKDEm''@;'; put 'put ''Yyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsMTYpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5iYWNrZHJvcENsaWNrKCkpfSksaGUoKX0yJmMmJkVlKCJAZmFkZSIsdm9pZCAwKX1sZXQgVWw9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1''@;'; put 'put ''bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPVlyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1pY29uIl1dLHN0YW5kYWxvbmU6ITF9KSxjfSkoKSxmcz0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0s''@;'; put 'put ''Yy5cdTAyNzVkaXI9WXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2RzLWljb24iXV0sc3RhbmRhbG9uZTohMX0pLGN9KSgpLFZzPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1FaSh7dHlwZTpjfSksYy5c''@;'; put 'put ''dTAyNzVpbmo9eWkoe2ltcG9ydHM6W05hXX0pLGN9KSgpO2NsYXNzICRUe312YXIgQ2Q9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5ERUZBVUxUPTBdPSJERUZBVUxUIixjW2MuTE9BRElORz0xXT0iTE9BRElORyIsY1tjLlNVQ0NFU1M9Ml09IlNVQ0NFU1MiLGNbYy5FUlJPUj0zXT0iRVJST1Ii''@;'; put 'put ''LGN9KENkfHx7fSk7bGV0IGMxPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5saXN0ZW5lcj1hLHRoaXMuX2xvYWRpbmdTdGF0ZT1DZC5ERUZBVUxUfWdldCBsb2FkaW5nU3RhdGUoKXtyZXR1cm4gdGhpcy5fbG9hZGluZ1N0YXRlfXNldCBsb2FkaW5nU3RhdGUoYSl7ITA9PT1h''@;'; put 'put ''P2E9Q2QuTE9BRElORzphfHwoYT1DZC5ERUZBVUxUKSxhIT09dGhpcy5fbG9hZGluZ1N0YXRlJiYodGhpcy5fbG9hZGluZ1N0YXRlPWEsdGhpcy5saXN0ZW5lciYmdGhpcy5saXN0ZW5lci5sb2FkaW5nU3RhdGVDaGFuZ2UoYSkpfW5nT25EZXN0cm95KCl7dGhpcy5sb2FkaW5nU3RhdGU9Q2Qu''@;'; put 'put ''REVGQVVMVH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoJFQsOCkpfSxjLlx1MDI3NWRpcj1Zcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJMb2FkaW5nIiwiIl1dLGlucHV0czp7bG9hZGluZ1N0YXRlOlswLCJjbHJMb2FkaW5nIiwibG9h''@;'; put 'put ''ZGluZ1N0YXRlIl19LHN0YW5kYWxvbmU6ITF9KSxjfSkoKSxTZD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5leHBhbmRhYmxlPTAsdGhpcy5oYXNFeHBhbmRUZW1wbGF0ZT0hMSx0aGlzLl9sb2FkaW5nPSExLHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX2V4cGFuZENoYW5nZT1u''@;'; put 'put ''ZXcgdXJ9Z2V0IGxvYWRpbmcoKXtyZXR1cm4gdGhpcy5fbG9hZGluZ31zZXQgbG9hZGluZyhhKXsoYT0hIWEpIT09dGhpcy5fbG9hZGluZyYmKHRoaXMuX2xvYWRpbmc9YSl9Z2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuX2V4cGFuZGVkfXNldCBleHBhbmRlZChhKXsoYT0hIWEpIT09dGhp''@;'; put 'put ''cy5fZXhwYW5kZWQmJih0aGlzLl9leHBhbmRlZD1hLHRoaXMuX2V4cGFuZENoYW5nZS5uZXh0KGEpKX1nZXQgZXhwYW5kQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2V4cGFuZENoYW5nZS5hc09ic2VydmFibGUoKX10b2dnbGUoKXt0aGlzLmV4cGFuZGVkPSF0aGlzLl9leHBhbmRlZH1sb2FkaW5n''@;'; put 'put ''U3RhdGVDaGFuZ2UoYSl7dGhpcy5sb2FkaW5nPWE9PT1DZC5MT0FESU5HfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxhS2U9MDtmdW5jdGlvbiBPdSgp''@;'; put 'put ''e3JldHVybiJjbHItaWQtIithS2UrK31sZXQgWmZlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uIl0sWyJjbHIt''@;'; put 'put ''c3RlcC1kZXNjcmlwdGlvbiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmeHIoImNsci1hY2NvcmRpb24tZGVzY3JpcHRpb24iLCEwKX0sc3RhbmRhbG9uZTohMSxuZ0NvbnRlbnRTZWxlY3RvcnM6VG8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rp''@;'; put 'put ''b24oYSxkKXsxJmEmJihzYSgpLFdyKDApKX0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksY30pKCk7Y29uc3QgQjM9IjAuMnMgZWFzZS1pbi1vdXQiLG9LZT1bcDIoInNraXBJbml0aWFsUmVuZGVyIixbdnUoIjplbnRlciIsW10pXSkscDIoInRvZ2dsZSIsW3Z1KCJ2b2lk''@;'; put 'put ''ID0+ICoiLFt3cyh7ZGlzcGxheToiYmxvY2siLGhlaWdodDowfSksejAoQjMsd3Moe2hlaWdodDoiKiJ9KSldKV0pXSxhWD0ocDIoInNraXBJbml0aWFsUmVuZGVyIixbdnUoIjplbnRlciIsW10pXSkscDIoInRvZ2dsZSIsW3Z1KCJ2b2lkID0+ICoiLFt3cyh7ZGlzcGxheToiYmxvY2siLGhl''@;'; put 'put ''aWdodDowfSksejAoQjMsd3Moe2hlaWdodDoiKiJ9KSldKSx2dSgiKiA9PiB2b2lkIixbd3Moe2Rpc3BsYXk6ImJsb2NrIn0pLHowKEIzLHdzKHtoZWlnaHQ6MCxkaXNwbGF5OiJub25lIn0pKV0pXSkse29wZW46Ik9wZW4iLGNsb3NlOiJDbG9zZSIsc2hvdzoiU2hvdyIsaGlkZToiSGlkZSIs''@;'; put 'put ''YXBwbHk6IkFwcGx5IixjYW5jZWw6IkNhbmNlbCIsZXhwYW5kOiJFeHBhbmQiLGNvbGxhcHNlOiJDb2xsYXBzZSIsbW9yZToiTW9yZSIsc2VsZWN0OiJTZWxlY3QiLHNlbGVjdEFsbDoiU2VsZWN0IEFsbCIscHJldmlvdXM6IlByZXZpb3VzIixuZXh0OiJOZXh0IixjdXJyZW50OiJKdW1wIHRv''@;'; put 'put ''IGN1cnJlbnQiLGluZm86IkluZm8iLHN1Y2Nlc3M6IlN1Y2Nlc3MiLHdhcm5pbmc6Ildhcm5pbmciLGRhbmdlcjoiRXJyb3IiLG5ldXRyYWw6Ik5ldXRyYWwiLHVua25vd246IlVua25vd24iLHJvd0FjdGlvbnM6IkF2YWlsYWJsZSBhY3Rpb25zIixwaWNrQ29sdW1uczoiTWFuYWdlIENvbHVt''@;'; put 'put ''bnMiLHNob3dDb2x1bW5zOiJTaG93IENvbHVtbnMiLHNvcnRDb2x1bW46IlNvcnQgQ29sdW1uIixmaXJzdFBhZ2U6IkZpcnN0IFBhZ2UiLGxhc3RQYWdlOiJMYXN0IFBhZ2UiLG5leHRQYWdlOiJOZXh0IFBhZ2UiLHByZXZpb3VzUGFnZToiUHJldmlvdXMgUGFnZSIsY3VycmVudFBhZ2U6IkN1''@;'; put 'put ''cnJlbnQgUGFnZSIsdG90YWxQYWdlczoiVG90YWwgUGFnZXMiLGZpbHRlckl0ZW1zOiJGaWx0ZXIgaXRlbXMiLG1pblZhbHVlOiJNaW4gdmFsdWUiLG1heFZhbHVlOiJNYXggdmFsdWUiLG1vZGFsQ29udGVudFN0YXJ0OiJCZWdpbm5pbmcgb2YgTW9kYWwgQ29udGVudCIsbW9kYWxDb250ZW50''@;'; put 'put ''RW5kOiJFbmQgb2YgTW9kYWwgQ29udGVudCIsc2lkZVBhbmVsUGluOiJQaW4gU2lkZSBQYW5lbCIsc2hvd0NvbHVtbnNNZW51RGVzY3JpcHRpb246IlNob3cgb3IgaGlkZSBjb2x1bW5zIG1lbnUiLGFsbENvbHVtbnNTZWxlY3RlZDoiQWxsIGNvbHVtbnMgc2VsZWN0ZWQiLHNpZ25wb3N0VG9n''@;'; put 'put ''Z2xlOiJTaWducG9zdCBUb2dnbGUiLHNpZ25wb3N0Q2xvc2U6IkNsb3NlIixsb2FkaW5nOiJMb2FkaW5nIixkZXRhaWxQYW5lU3RhcnQ6IlN0YXJ0IG9mIHJvdyBkZXRhaWxzIixkZXRhaWxQYW5lRW5kOiJFbmQgb2Ygcm93IGRldGFpbHMiLHNpbmdsZVNlbGVjdGlvbkFyaWFMYWJlbDoiU2lu''@;'; put 'put ''Z2xlIHNlbGVjdGlvbiBoZWFkZXIiLHNpbmdsZUFjdGlvbmFibGVBcmlhTGFiZWw6IlNpbmdsZSBhY3Rpb25hYmxlIGhlYWRlciIsZGV0YWlsRXhwYW5kYWJsZUFyaWFMYWJlbDoiVG9nZ2xlIG1vcmUgcm93IGNvbnRlbnQiLGRhdGFncmlkRmlsdGVyQXJpYUxhYmVsOiJ7Q09MVU1OfSBmaWx0''@;'; put 'put ''ZXIiLGRhdGFncmlkRmlsdGVyTGFiZWw6IntDT0xVTU59IGZpbHRlciIsZGF0YWdyaWRGaWx0ZXJEaWFsb2dBcmlhTGFiZWw6IkZpbHRlciBkaWFsb2ciLGNvbHVtblNlcGFyYXRvckFyaWFMYWJlbDoiQ29sdW1uIHJlc2l6ZSBoYW5kbGUiLGNvbHVtblNlcGFyYXRvckRlc2NyaXB0aW9uOiJV''@;'; put 'put ''c2UgbGVmdCBvciByaWdodCBrZXkgdG8gcmVzaXplIHRoZSBjb2x1bW4iLGZyb21MYWJlbDoiRnJvbSIsdG9MYWJlbDoiVG8iLGFsZXJ0Q2xvc2VCdXR0b25BcmlhTGFiZWw6IkNsb3NlIGFsZXJ0IixhbGVydE5leHRBbGVydEFyaWFMYWJlbDoiTmV4dCBhbGVydCBtZXNzYWdlLCB7Q1VSUkVO''@;'; put 'put ''VH0gb2Yge0NPVU5UfSIsYWxlcnRQcmV2aW91c0FsZXJ0QXJpYUxhYmVsOiJQcmV2aW91cyBhbGVydCBtZXNzYWdlLCB7Q1VSUkVOVH0gb2Yge0NPVU5UfSIsZGF0ZXBpY2tlckRpYWxvZ0xhYmVsOiJDaG9vc2UgZGF0ZSIsZGF0ZXBpY2tlclRvZ2dsZUNob29zZURhdGVMYWJlbDoiQ2hvb3Nl''@;'; put 'put ''IGRhdGUiLGRhdGVwaWNrZXJUb2dnbGVDaGFuZ2VEYXRlTGFiZWw6IkNoYW5nZSBkYXRlLCB7U0VMRUNURURfREFURX0iLGRhdGVwaWNrZXJQcmV2aW91c01vbnRoOiJQcmV2aW91cyBtb250aCIsZGF0ZXBpY2tlckN1cnJlbnRNb250aDoiQ3VycmVudCBtb250aCIsZGF0ZXBpY2tlck5leHRN''@;'; put 'put ''b250aDoiTmV4dCBtb250aCIsZGF0ZXBpY2tlclByZXZpb3VzRGVjYWRlOiJQcmV2aW91cyBkZWNhZGUiLGRhdGVwaWNrZXJOZXh0RGVjYWRlOiJOZXh0IGRlY2FkZSIsZGF0ZXBpY2tlckN1cnJlbnREZWNhZGU6IkN1cnJlbnQgZGVjYWRlIixkYXRlcGlja2VyU2VsZWN0TW9udGhUZXh0OiJT''@;'; put 'put ''ZWxlY3QgbW9udGgsIHRoZSBjdXJyZW50IG1vbnRoIGlzIHtDQUxFTkRBUl9NT05USH0iLGRhdGVwaWNrZXJTZWxlY3RZZWFyVGV4dDoiU2VsZWN0IHllYXIsIHRoZSBjdXJyZW50IHllYXIgaXMge0NBTEVOREFSX1lFQVJ9IixkYXRlcGlja2VyU2VsZWN0ZWRMYWJlbDoie0ZVTExfREFURX0g''@;'; put 'put ''LSBTZWxlY3RlZCIsc3RhY2tWaWV3Q2hhbmdlZDoiVmFsdWUgY2hhbmdlZC4iLHJlc3BvbnNpdmVOYXZUb2dnbGVPcGVuOiJPcGVuIG5hdmlnYXRpb24gbWVudSIscmVzcG9uc2l2ZU5hdlRvZ2dsZUNsb3NlOiJDbG9zZSBuYXZpZ2F0aW9uIG1lbnUiLHJlc3BvbnNpdmVOYXZPdmVyZmxvd09w''@;'; put 'put ''ZW46Ik9wZW4gbmF2aWdhdGlvbiBvdmVyZmxvdyBtZW51IixyZXNwb25zaXZlTmF2T3ZlcmZsb3dDbG9zZToiQ2xvc2UgbmF2aWdhdGlvbiBvdmVyZmxvdyBtZW51Iix2ZXJ0aWNhbE5hdlRvZ2dsZToiVG9nZ2xlIHZlcnRpY2FsIG5hdmlnYXRpb24iLHRpbWVsaW5lU3RlcE5vdFN0YXJ0ZWQ6''@;'; put 'put ''Ik5vdCBzdGFydGVkIix0aW1lbGluZVN0ZXBDdXJyZW50OiJDdXJyZW50Iix0aW1lbGluZVN0ZXBTdWNjZXNzOiJDb21wbGV0ZWQiLHRpbWVsaW5lU3RlcEVycm9yOiJFcnJvciIsdGltZWxpbmVTdGVwUHJvY2Vzc2luZzoiSW4gcHJvZ3Jlc3MiLGNvbWJvYm94RGVsZXRlOiJEZWxldGUgc2Vs''@;'; put 'put ''ZWN0ZWQgb3B0aW9uIixjb21ib2JveFNlYXJjaGluZzonU2VhcmNoaW5nIGZvciBtYXRjaGVzIGZvciAie0lOUFVUfSInLGNvbWJvYm94U2VsZWN0aW9uOiJTZWxlY3Rpb24iLGNvbWJvYm94U2VsZWN0ZWQ6IlNlbGVjdGVkIixjb21ib2JveE5vUmVzdWx0czoiTm8gcmVzdWx0cyIsY29tYm9i''@;'; put 'put ''b3hPcGVuOiJTaG93IG9wdGlvbnMiLGRhdGFncmlkRXhwYW5kYWJsZUJlZ2lubmluZ09mOiJCZWdpbm5pbmcgb2YiLGRhdGFncmlkRXhwYW5kYWJsZUVuZE9mOiJFbmQgb2YiLGRhdGFncmlkRXhwYW5kYWJsZVJvd0NvbnRlbnQ6IkV4cGFuZGFibGUgcm93IGNvbnRlbnQiLGRhdGFncmlkRXhw''@;'; put 'put ''YW5kYWJsZVJvd3NIZWxwZXJUZXh0OiJTY3JlZW4gcmVhZGVyIHRhYmxlIGNvbW1hbmRzIG1heSBub3Qgd29yayBmb3Igdmlld2luZyBleHBhbmRlZCBjb250ZW50LCBwbGVhc2UgdXNlIHlvdXIgc2NyZWVuIHJlYWRlcidzIGJyb3dzZSBtb2RlIHRvIHJlYWQgdGhlIGNvbnRlbnQgZXhwb3Nl''@;'; put 'put ''ZCBieSB0aGlzIGJ1dHRvbiIsd2l6YXJkU3RlcDoiU3RlcCIsd2l6YXJkU3RlcFN1Y2Nlc3M6IkNvbXBsZXRlZCIsd2l6YXJkU3RlcEVycm9yOiJFcnJvciIsd2l6YXJkU3RlcG5hdkFyaWFMYWJlbDoiV2l6YXJkIHN0ZXBzIixwYXNzd29yZEhpZGU6IkhpZGUgcGFzc3dvcmQgZm9yIHtMQUJF''@;'; put 'put ''TH0iLHBhc3N3b3JkU2hvdzoiU2hvdyBwYXNzd29yZCBmb3Ige0xBQkVMfSIsc2VsZWN0ZWRSb3dzOiJTZWxlY3RlZCByb3dzIixzdGVwQ29tcGxldGU6IlN0ZXAge1NURVB9IGNvbXBsZXRlIixzdGVwRXJyb3I6IkVycm9yIGluIHN0ZXAge1NURVB9Iixicm93c2U6IkJyb3dzZSIsZmlsZUNv''@;'; put 'put ''dW50OiJ7Q09VTlR9IGZpbGVzIixjbGVhckZpbGU6IkNsZWFyIHtGSUxFfSIsY2xlYXJGaWxlczoiQ2xlYXIge0NPVU5UfSBmaWxlcyIsc2VsZWN0ZWRUcmVlTm9kZToic2VsZWN0ZWQiLHVuc2VsZWN0ZWRUcmVlTm9kZToidW5zZWxlY3RlZCIsYnJlYWRjcnVtYnNMYWJlbDoiYnJlYWRjcnVt''@;'; put 'put ''YnMiLGV4cGFuZEJyZWFkY3J1bWJzTGFiZWw6IkV4cGFuZCBicmVhZGNydW1icyJ9KTtsZXQgcHM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3N0cmluZ3M9YVh9Z2V0IGtleXMoKXtyZXR1cm4gdGhpcy5fc3RyaW5nc31sb2NhbGl6ZShhKXt0aGlzLl9zdHJpbmdzPXsuLi50''@;'; put 'put ''aGlzLl9zdHJpbmdzLC4uLmF9fXBhcnNlKGEsZD17fSl7Y29uc3QgaD1PYmplY3Qua2V5cyhkKTtsZXQgZj1hO3JldHVybiBoLmxlbmd0aCYmaC5mb3JFYWNoKHY9PntmPWYucmVwbGFjZShgeyR7dn19YCxkW3ZdKX0pLGZ9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4g''@;'; put 'put ''bmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO3ZhciBqMz1mdW5jdGlvbihjKXtyZXR1cm4gYy5JbmFjdGl2ZT0iaW5hY3RpdmUiLGMuRXJyb3I9ImVycm9yIixjLkNvbXBsZXRlPSJjb21wbGV0''@;'; put 'put ''ZSIsY30oajN8fHt9KSxLVD1mdW5jdGlvbihjKXtyZXR1cm4gYy5EZWZhdWx0PSJkZWZhdWx0IixjLk11bHRpPSJtdWx0aSIsY30oS1R8fHt9KTtsZXQgbEtlPTA7Y2xhc3MgY0tle2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5pZD1sLHRoaXMuYWNjb3JkaW9uSWQ9YSx0aGlzLnN0YXR1cz1qMy5J''@;'; put 'put ''bmFjdGl2ZSx0aGlzLmluZGV4PW51bGwsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLm9wZW49ITEsdGhpcy50ZW1wbGF0ZUlkPWAke3RoaXMuaWR9LSR7dGhpcy5hY2NvcmRpb25JZH1gfX1jbGFzcyBXZmV7Y29uc3RydWN0b3IoKXt0aGlzLnN0cmF0ZWd5PUtULkRlZmF1bHQsdGhpcy5hY2NvcmRp''@;'; put 'put ''b25Db3VudD1sS2UrKyx0aGlzLl9wYW5lbHM9e319Z2V0IHBhbmVscygpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9wYW5lbHMpLm1hcChsPT50aGlzLl9wYW5lbHNbbF0pfXNldFN0cmF0ZWd5KGwpe3RoaXMuc3RyYXRlZ3k9bH11cGRhdGVQYW5lbE9yZGVyKGwpe2wuZm9yRWFjaCgoYSxk''@;'; put 'put ''KT0+dGhpcy5fcGFuZWxzW2FdLmluZGV4PWQpLHRoaXMucmVtb3ZlT2xkUGFuZWxzKGwpfWFkZFBhbmVsKGwsYT0hMSl7dGhpcy5fcGFuZWxzW2xdPW5ldyBjS2UobCx0aGlzLmFjY29yZGlvbkNvdW50KSx0aGlzLl9wYW5lbHNbbF0ub3Blbj1hfXRvZ2dsZVBhbmVsKGwsYSl7Y29uc3QgaD12''@;'; put 'put ''b2lkIDAhPT1hP2E6IXRoaXMuX3BhbmVsc1tsXS5vcGVuO2gmJnRoaXMuc3RyYXRlZ3k9PT1LVC5EZWZhdWx0JiZ0aGlzLmNsb3NlQWxsUGFuZWxzKCksdGhpcy5fcGFuZWxzW2xdLm9wZW49aH1kaXNhYmxlUGFuZWwobCxhKXt0aGlzLl9wYW5lbHNbbF0uZGlzYWJsZWQ9YX1jbG9zZUFsbFBh''@;'; put 'put ''bmVscygpe3RoaXMucGFuZWxzLmZvckVhY2gobD0+dGhpcy5fcGFuZWxzW2wuaWRdLm9wZW49ITEpfXJlbW92ZU9sZFBhbmVscyhsKXt0aGlzLnBhbmVscy5maWx0ZXIoYT0+dm9pZCAwPT09bC5maW5kKGQ9PmQ9PT1hLmlkKSkuZm9yRWFjaChhPT5kZWxldGUgdGhpcy5fcGFuZWxzW2EuaWRd''@;'; put 'put ''KX19bGV0IFhUPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmFjY29yZGlvbj1uZXcgV2ZlLHRoaXMuX3BhbmVsc0NoYW5nZXM9bmV3IE1pKHRoaXMuYWNjb3JkaW9uLnBhbmVscyl9Z2V0UGFuZWxDaGFuZ2VzKGEpe3JldHVybiB0aGlzLl9wYW5lbHNDaGFuZ2VzLnBpcGUoWWEo''@;'; put 'put ''ZD0+ZC5maW5kKGg9PmguaWQ9PT1hKSkpfXNldFN0cmF0ZWd5KGEpe3RoaXMuYWNjb3JkaW9uLnNldFN0cmF0ZWd5KGEpfWFkZFBhbmVsKGEsZD0hMSl7dGhpcy5hY2NvcmRpb24uYWRkUGFuZWwoYSxkKSx0aGlzLmVtaXRVcGRhdGVkUGFuZWxzKCl9dG9nZ2xlUGFuZWwoYSxkKXt0aGlzLmFj''@;'; put 'put ''Y29yZGlvbi50b2dnbGVQYW5lbChhLGQpLHRoaXMuZW1pdFVwZGF0ZWRQYW5lbHMoKX1kaXNhYmxlUGFuZWwoYSxkKXt0aGlzLmFjY29yZGlvbi5kaXNhYmxlUGFuZWwoYSxkKSx0aGlzLmVtaXRVcGRhdGVkUGFuZWxzKCl9dXBkYXRlUGFuZWxPcmRlcihhKXt0aGlzLmFjY29yZGlvbi51cGRh''@;'; put 'put ''dGVQYW5lbE9yZGVyKGEpLHRoaXMuZW1pdFVwZGF0ZWRQYW5lbHMoKX1lbWl0VXBkYXRlZFBhbmVscygpe3RoaXMuX3BhbmVsc0NoYW5nZXMubmV4dCh0aGlzLmFjY29yZGlvbi5wYW5lbHMpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAy''@;'; put 'put ''NzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxlSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5wYXJlbnQ9YSx0aGlzLmNvbW1vblN0cmluZ3M9ZCx0aGlzLmFjY29yZGlvblNlcnZpY2U9aCx0aGlzLmlmRXhwYW5kU2Vydmlj''@;'; put 'put ''ZT1mLHRoaXMuY2RyPXYsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnBhbmVsT3Blbj0hMSx0aGlzLmhlYWRpbmdFbmFibGVkPSExLHRoaXMucGFuZWxPcGVuQ2hhbmdlPW5ldyBYcix0aGlzLl9pZD1PdSgpfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZH1zZXQgaWQoYSl7dGhpcy5faWQ9YX1nZXQg''@;'; put 'put ''cGFuZWxOdW1iZXIoKXtyZXR1cm4gdGhpcy5fcGFuZWxJbmRleCsxfWdldCBoZWFkaW5nTGV2ZWwoKXtyZXR1cm4gdGhpcy5leHBsaWNpdEhlYWRpbmdMZXZlbD90aGlzLmV4cGxpY2l0SGVhZGluZ0xldmVsOnRoaXMucGFyZW50PzQ6M31uZ09uSW5pdCgpe3RoaXMucGFuZWw9dGhpcy5hY2Nv''@;'; put 'put ''cmRpb25TZXJ2aWNlLmdldFBhbmVsQ2hhbmdlcyh0aGlzLmlkKS5waXBlKE0wKGE9PnRoaXMuZW1pdFBhbmVsQ2hhbmdlKGEpKSksdGhpcy5hY2NvcmRpb25TZXJ2aWNlLmFkZFBhbmVsKHRoaXMuaWQsdGhpcy5wYW5lbE9wZW4pLHRoaXMuYWNjb3JkaW9uU2VydmljZS50b2dnbGVQYW5lbCh0''@;'; put 'put ''aGlzLmlkLHRoaXMucGFuZWxPcGVuKSx0aGlzLmFjY29yZGlvblNlcnZpY2UuZGlzYWJsZVBhbmVsKHRoaXMuaWQsdGhpcy5kaXNhYmxlZCl9bmdPbkNoYW5nZXMoYSl7dGhpcy5wYW5lbCYmYS5wYW5lbE9wZW4mJmEucGFuZWxPcGVuLmN1cnJlbnRWYWx1ZSE9PWEucGFuZWxPcGVuLnByZXZp''@;'; put 'put ''b3VzVmFsdWUmJnRoaXMuYWNjb3JkaW9uU2VydmljZS50b2dnbGVQYW5lbCh0aGlzLmlkLGEucGFuZWxPcGVuLmN1cnJlbnRWYWx1ZSksdGhpcy5wYW5lbCYmYS5kaXNhYmxlZCYmYS5kaXNhYmxlZC5jdXJyZW50VmFsdWUhPT1hLmRpc2FibGVkLnByZXZpb3VzVmFsdWUmJnRoaXMuYWNjb3Jk''@;'; put 'put ''aW9uU2VydmljZS5kaXNhYmxlUGFuZWwodGhpcy5pZCxhLmRpc2FibGVkLmN1cnJlbnRWYWx1ZSl9dG9nZ2xlUGFuZWwoKXt0aGlzLmFjY29yZGlvblNlcnZpY2UudG9nZ2xlUGFuZWwodGhpcy5pZCl9Y29sbGFwc2VQYW5lbE9uQW5pbWF0aW9uRG9uZShhKXthLm9wZW58fCh0aGlzLmlmRXhw''@;'; put 'put ''YW5kU2VydmljZS5leHBhbmRlZD0hMSl9Z2V0UGFuZWxTdGF0ZUNsYXNzZXMoYSl7cmV0dXJuYGNsci1hY2NvcmRpb24tcGFuZWwtJHthLnN0YXR1c30gJHthLm9wZW4/ImNsci1hY2NvcmRpb24tcGFuZWwtb3BlbiI6IiJ9YH1nZXRBY2NvcmRpb25Db250ZW50SWQoYSl7cmV0dXJuYGNsci1h''@;'; put 'put ''Y2NvcmRpb24tY29udGVudC0ke2F9J2B9Z2V0QWNjb3JkaW9uSGVhZGVySWQoYSl7cmV0dXJuYGNsci1hY2NvcmRpb24taGVhZGVyLSR7YX1gfXN0ZXBDb21wbGV0ZVRleHQoYSl7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5zdGVwQ29t''@;'; put 'put ''cGxldGUse1NURVA6YS50b1N0cmluZygpfSl9c3RlcEVycm9yVGV4dChhKXtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnN0ZXBFcnJvcix7U1RFUDphLnRvU3RyaW5nKCl9KX1lbWl0UGFuZWxDaGFuZ2UoYSl7YS5pbmRleCE9PXRoaXMu''@;'; put 'put ''X3BhbmVsSW5kZXgmJih0aGlzLl9wYW5lbEluZGV4PWEuaW5kZXgsdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpKSxhLm9wZW4hPT10aGlzLnBhbmVsT3BlbiYmKHRoaXMucGFuZWxPcGVuQ2hhbmdlLmVtaXQoYS5vcGVuKSx0aGlzLnBhbmVsT3Blbj1hLm9wZW4pLGEub3BlbiYmKHRoaXMuaWZF''@;'; put 'put ''eHBhbmRTZXJ2aWNlLmV4cGFuZGVkPSEwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoYywxMikscWUocHMpLHFlKFhUKSxxZShTZCkscWUoSHMpKX0sYy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbi1w''@;'; put 'put ''YW5lbCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZwbyhoLFpmZSw0KSwyJmEpe2xldCBmO2dpKGY9bWkoKSkmJihkLmFjY29yZGlvbkRlc2NyaXB0aW9uPWYpfX0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJnhyKCJjbHItYWNj''@;'; put 'put ''b3JkaW9uLXBhbmVsIiwhMCkoImNsci1hY2NvcmRpb24tcGFuZWwtZGlzYWJsZWQiLGQuZGlzYWJsZWQpfSxpbnB1dHM6e2Rpc2FibGVkOlswLCJjbHJBY2NvcmRpb25QYW5lbERpc2FibGVkIiwiZGlzYWJsZWQiXSxwYW5lbE9wZW46WzAsImNsckFjY29yZGlvblBhbmVsT3BlbiIsInBhbmVs''@;'; put 'put ''T3BlbiJdLGhlYWRpbmdFbmFibGVkOlswLCJjbHJBY2NvcmRpb25QYW5lbEhlYWRpbmdFbmFibGVkIiwiaGVhZGluZ0VuYWJsZWQiXSxleHBsaWNpdEhlYWRpbmdMZXZlbDpbMCwiY2xyQWNjb3JkaW9uUGFuZWxIZWFkaW5nTGV2ZWwiLCJleHBsaWNpdEhlYWRpbmdMZXZlbCJdfSxvdXRwdXRz''@;'; put 'put ''OntwYW5lbE9wZW5DaGFuZ2U6ImNsckFjY29yZGlvblBhbmVsT3BlbkNoYW5nZSJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hhKFtTZF0pLFdvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6dlVlLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWyJoZWFkZXJCdXR0b24iLCIiXSxbNCwibmdJZiJdLFsz''@;'; put 'put ''LCJuZ0NsYXNzIl0sWzEsImNsci1hY2NvcmRpb24taGVhZGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b24iLDMsImNsaWNrIiwiaWQiLCJkaXNhYmxlZCJdLFsxLCJjbHItYWNjb3JkaW9uLXN0YXR1cyJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVj''@;'; put 'put ''dGlvbiIsInJpZ2h0IiwxLCJjbHItYWNjb3JkaW9uLWFuZ2xlIl0sWyJyb2xlIiwicmVnaW9uIiwxLCJjbHItYWNjb3JkaW9uLWNvbnRlbnQtcmVnaW9uIiwzLCJpZCJdLFsiY2xhc3MiLCJjbHItYWNjb3JkaW9uLWNvbnRlbnQiLDQsIm5nSWYiXSxbMSwiY2xyLWFjY29yZGlvbi1jb250ZW50''@;'; put 'put ''Il0sWzEsImNsci1hY2NvcmRpb24taW5uZXItY29udGVudCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKG1VZSksZ3QoMCxiVWUsMTIsMTYsIm5nLWNvbnRhaW5lciIsMSksZGwoMSwiYXN5bmMiKSksMiZhJiZFZSgibmdJZiIsamMoMSwxLGQucGFuZWwpKX0sZGVwZW5kZW5j''@;'; put 'put ''aWVzOltSdSxDYSxmcyxWRV0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpvS2V9LGNoYW5nZURldGVjdGlvbjowfSksY30pKCksWWZlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5hY2NvcmRpb25TZXJ2aWNlPWEsdGhpcy5tdWx0aVBhbmVsPSExLHRoaXMuc3Vi''@;'; put 'put ''c2NyaXB0aW9ucz1bXX1uZ09uSW5pdCgpe3RoaXMuc2V0QWNjb3JkaW9uU3RyYXRlZ3koKX1uZ09uQ2hhbmdlcyhhKXthLm11bHRpUGFuZWwuY3VycmVudFZhbHVlIT09YS5tdWx0aVBhbmVsLnByZXZpb3VzVmFsdWUmJnRoaXMuc2V0QWNjb3JkaW9uU3RyYXRlZ3koKX1uZ0FmdGVyVmlld0lu''@;'; put 'put ''aXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvckRPTUNoYW5nZXMoKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNldEFjY29yZGlvblN0cmF0ZWd5KCl7dGhpcy5hY2NvcmRpb25TZXJ2aWNlLnNl''@;'; put 'put ''dFN0cmF0ZWd5KHRoaXMubXVsdGlQYW5lbD9LVC5NdWx0aTpLVC5EZWZhdWx0KX1saXN0ZW5Gb3JET01DaGFuZ2VzKCl7cmV0dXJuIHRoaXMucGFuZWxzLmNoYW5nZXMucGlwZShTZih0aGlzLnBhbmVscykpLnN1YnNjcmliZShhPT50aGlzLmFjY29yZGlvblNlcnZpY2UudXBkYXRlUGFuZWxP''@;'; put 'put ''cmRlcihhLnRvQXJyYXkoKS5tYXAoZD0+ZC5pZCkpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoWFQpKX0sYy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlv''@;'; put 'put ''bihhLGQsaCl7aWYoMSZhJiZwbyhoLGVILDQpLDImYSl7bGV0IGY7Z2koZj1taSgpKSYmKGQucGFuZWxzPWYpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJnhyKCJjbHItYWNjb3JkaW9uIiwhMCl9LGlucHV0czp7bXVsdGlQYW5lbDpbMCwiY2xyQWNjb3Jk''@;'; put 'put ''aW9uTXVsdGlQYW5lbCIsIm11bHRpUGFuZWwiXX0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbaGEoW1hUXSksV29dLG5nQ29udGVudFNlbGVjdG9yczpUbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksV3IoMCkpfSxlbmNhcHN1bGF0aW9uOjIsY2hh''@;'; put 'put ''bmdlRGV0ZWN0aW9uOjB9KSxjfSkoKSxHZmU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPWFyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24tY29udGVudCJdLFsiY2xyLXN0ZXAtY29u''@;'; put 'put ''dGVudCJdXSxzdGFuZGFsb25lOiExLG5nQ29udGVudFNlbGVjdG9yczpUbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksV3IoMCkpfSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxjfSkoKSwkZmU9KCgpPT57Y2xhc3MgY3t9cmV0''@;'; put 'put ''dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPWFyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24tdGl0bGUiXSxbImNsci1zdGVwLXRpdGxlIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZh''@;'; put 'put ''JiZ4cigiY2xyLWFjY29yZGlvbi10aXRsZSIsITApfSxzdGFuZGFsb25lOiExLG5nQ29udGVudFNlbGVjdG9yczpUbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksV3IoMCkpfSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxjfSko''@;'; put 'put ''KSxvdz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5kaXNhYmxlQ2hvY29sYXRlQ2hlY2s9ITEsdGhpcy5fY2hvY29sYXRlPW5ldyB1cn1nZXQgY2hvY29sYXRlKCl7cmV0dXJuIHRoaXMuX2Nob2NvbGF0ZS5hc09ic2VydmFibGUoKX1uZ0FmdGVyVmlld0NoZWNrZWQoKXt0aGlz''@;'; put 'put ''LmRpc2FibGVDaG9jb2xhdGVDaGVja3x8dGhpcy5fY2hvY29sYXRlLm5leHQoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPVlyKHt0eXBlOmMsc3RhbmRhbG9uZTohMX0pLGN9KSgpLHN3PSgoKT0+e2NsYXNzIGN7Y29uc3Ry''@;'; put 'put ''dWN0b3IoYSxkKXt0aGlzLnN1YnNjcmlwdGlvbj1kLmNob2NvbGF0ZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmxhdGVzdEZsYXZvciE9PXRoaXMuZmxhdm9yJiYoZC5kaXNhYmxlQ2hvY29sYXRlQ2hlY2s9ITAsYS5kZXRlY3RDaGFuZ2VzKCksZC5kaXNhYmxlQ2hvY29sYXRlQ2hlY2s9ITEpfSl9''@;'; put 'put ''bmdBZnRlckNvbnRlbnRDaGVja2VkKCl7dGhpcy5sYXRlc3RGbGF2b3I9dGhpcy5mbGF2b3J9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShIcykscWUob3cpKX0s''@;'; put 'put ''Yy5cdTAyNzVkaXI9WXIoe3R5cGU6YyxzdGFuZGFsb25lOiExfSksY30pKCksb1g9KCgpPT57Y2xhc3MgYyBleHRlbmRzIG93e31yZXR1cm4gYy5cdTAyNzVmYWM9KCgpPT57bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD15bChjKSkpKGR8fGMpfX0pKCksYy5cdTAyNzVk''@;'; put 'put ''aXI9WXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbiJdXSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltMYV19KSxjfSkoKSxLZmU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIHN3e2NvbnN0cnVjdG9yKGEsZCxoKXtpZighZCl0aHJvdyBuZXcgRXJyb3IoImNsci1hY2NvcmRpb24t''@;'; put 'put ''cGFuZWwgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgY2xyLWFjY29yZGlvbiIpO3N1cGVyKGEsZCksdGhpcy5leHBhbmQ9aH1nZXQgZmxhdm9yKCl7cmV0dXJuIHRoaXMuZXhwYW5kLmV4cGFuZGVkfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj''@;'; put 'put ''KShxZShIcykscWUob1gsOCkscWUoU2QpKX0sYy5cdTAyNzVkaXI9WXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbi1wYW5lbCJdXSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltMYV19KSxjfSkoKSxYZmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe05zLmFkZEljb25z''@;'; put 'put ''KG53LGgyLGYyKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUVpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj15aSh7aW1wb3J0czpbTmEsVnNdfSksY30pKCkscEtlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1FaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9eWkoe2ltcG9ydHM6W05hLFZzLFhmZSxYZmVdfSksY30pKCk7dmFyIG1hPWZ1bmN0aW9uKGMpe3JldHVybiBjLkFycm93TGVmdD0iQXJyb3dMZWZ0IixjLkFycm93VXA9IkFy''@;'; put 'put ''cm93VXAiLGMuQXJyb3dSaWdodD0iQXJyb3dSaWdodCIsYy5BcnJvd0Rvd249IkFycm93RG93biIsYy5CYWNrc3BhY2U9IkJhY2tzcGFjZSIsYy5UYWI9IlRhYiIsYy5FbnRlcj0iRW50ZXIiLGMuRXNjYXBlPSJFc2NhcGUiLGMuU3BhY2U9IlNwYWNlIixjLlNwYWNlYmFyPSIgIixjLkhvbWU9''@;'; put 'put ''IkhvbWUiLGMuRW5kPSJFbmQiLGMuUGFnZURvd249IlBhZ2VEb3duIixjLlBhZ2VVcD0iUGFnZVVwIixjfShtYXx8e30pLE05PWZ1bmN0aW9uKGMpe3JldHVybiBjLkFycm93VXA9IlVwIixjLkFycm93RG93bj0iRG93biIsYy5BcnJvd1JpZ2h0PSJSaWdodCIsYy5BcnJvd0xlZnQ9IkxlZnQi''@;'; put 'put ''LGMuU3BhY2U9IlNwYWNlYmFyIixjLkVzY2FwZT0iRXNjIixjfShNOXx8e30pO2Z1bmN0aW9uIGtmKGMpe3JldHVybiBjPT09bWEuQXJyb3dVcHx8Yz09PU05LkFycm93VXA/bWEuQXJyb3dVcDpjPT09bWEuQXJyb3dEb3dufHxjPT09TTkuQXJyb3dEb3duP21hLkFycm93RG93bjpjPT09bWEu''@;'; put 'put ''QXJyb3dSaWdodHx8Yz09PU05LkFycm93UmlnaHQ/bWEuQXJyb3dSaWdodDpjPT09bWEuQXJyb3dMZWZ0fHxjPT09TTkuQXJyb3dMZWZ0P21hLkFycm93TGVmdDpjPT09bWEuU3BhY2V8fGM9PT1NOS5TcGFjZT9tYS5TcGFjZTpjPT09bWEuRXNjYXBlfHxjPT09TTkuRXNjYXBlP21hLkVzY2Fw''@;'; put 'put ''ZTpjfWZ1bmN0aW9uIGxYKGMpe2NvbnN0IGw9a2YoYy5rZXkpOyhsPT09bWEuQXJyb3dVcHx8bD09PW1hLkFycm93RG93bnx8bD09PW1hLkFycm93TGVmdHx8bD09PW1hLkFycm93UmlnaHQpJiZjLnByZXZlbnREZWZhdWx0KCl9bGV0IHljPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0''@;'; put 'put ''aGlzLl9vcGVuPSExLHRoaXMuX29wZW5DaGFuZ2U9bmV3IHVyLHRoaXMuX29wZW5FdmVudENoYW5nZT1uZXcgdXIsdGhpcy5fcG9wb3ZlckFsaWduZWQ9bmV3IHVyLHRoaXMuX3BvcG92ZXJWaXNpYmxlPW5ldyB1cn1nZXQgb3BlbkNoYW5nZSgpe3JldHVybiB0aGlzLl9vcGVuQ2hhbmdlLmFz''@;'; put 'put ''T2JzZXJ2YWJsZSgpfWdldCBwb3BvdmVyVmlzaWJsZSgpe3JldHVybiB0aGlzLl9wb3BvdmVyVmlzaWJsZS5hc09ic2VydmFibGUoKX1nZXQgb3BlbkV2ZW50KCl7cmV0dXJuIHRoaXMuX29wZW5FdmVudH1zZXQgb3BlbkV2ZW50KGEpe3RoaXMuX29wZW5FdmVudD1hLHRoaXMuX29wZW5FdmVu''@;'; put 'put ''dENoYW5nZS5uZXh0KGEpfWdldCBvcGVuKCl7cmV0dXJuIHRoaXMuX29wZW59c2V0IG9wZW4oYSl7dGhpcy5fb3BlbiE9PShhPSEhYSkmJih0aGlzLl9vcGVuPWEsdGhpcy5fb3BlbkNoYW5nZS5uZXh0KGEpKX1nZXQgb3JpZ2luYWxFdmVudCgpe3JldHVybiB0aGlzLl9vcGVuRXZlbnR9Z2V0''@;'; put 'put ''IHBvcG92ZXJBbGlnbmVkKCl7cmV0dXJuIHRoaXMuX3BvcG92ZXJBbGlnbmVkLmFzT2JzZXJ2YWJsZSgpfWdldEV2ZW50Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX29wZW5FdmVudENoYW5nZS5hc09ic2VydmFibGUoKX10b2dnbGVXaXRoRXZlbnQoYSl7bFgoYSksdGhpcy5vcGVuRXZlbnQ9YSx0''@;'; put 'put ''aGlzLm9wZW49IXRoaXMub3Blbn1wb3BvdmVyVmlzaWJsZUVtaXQoYSl7dGhpcy5fcG9wb3ZlclZpc2libGUubmV4dChhKX1wb3BvdmVyQWxpZ25lZEVtaXQoYSl7dGhpcy5fcG9wb3ZlckFsaWduZWQubmV4dChhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco''@;'; put 'put ''YXx8Yyl9LGMuXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksSlQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5yZW5kZXJlcj1hLHRoaXMuc21hcnRPcGVuU2VydmljZT1kLHRoaXMuZG9jdW1lbnQ9aCx0aGlzLm91dHNpZGVD''@;'; put 'put ''bGlja0Nsb3NlPSEwLHRoaXMuc2Nyb2xsVG9DbG9zZT0hMCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZC5vcGVuQ2hhbmdlLnN1YnNjcmliZShmPT57Zj8odGhpcy5hZGRFc2NhcGVMaXN0ZW5lcigpLHRoaXMuYWRkQ2xpY2tMaXN0ZW5lcigpLHRoaXMu''@;'; put 'put ''YWRkU2Nyb2xsTGlzdGVuZXIoKSk6dGhpcy5yZW1vdmVBbGxFdmVudExpc3RlbmVycygpfSksZC5nZXRFdmVudENoYW5nZSgpLnN1YnNjcmliZShmPT57dGhpcy5pZ25vcmVkRXZlbnQ9Zn0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3Jp''@;'; put 'put ''YmUoKSksdGhpcy5yZW1vdmVBbGxFdmVudExpc3RlbmVycygpfWFkZFNjcm9sbExpc3RlbmVyKCl7dGhpcy5zY3JvbGxUb0Nsb3NlJiYodGhpcy5kb2N1bWVudFNjcm9sbGVyPVRmKHRoaXMuZG9jdW1lbnQsInNjcm9sbCIse2NhcHR1cmU6ITB9KSx0aGlzLnNjcm9sbFN1YnNjcmlwdGlvbj10''@;'; put 'put ''aGlzLmRvY3VtZW50U2Nyb2xsZXIucGlwZShvYyh0aGlzLnRlc3RGb3JTbWFydFBvcG92ZXJDb250ZW50Q29udGFpbmVyKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW49ITEsdGhpcy5zZXRBbmNob3JGb2N1cygpfSkpfXJlbW92ZVNjcm9sbExpc3RlbmVyKCl7''@;'; put 'put ''dGhpcy5kb2N1bWVudFNjcm9sbGVyJiYodGhpcy5zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSxkZWxldGUgdGhpcy5kb2N1bWVudFNjcm9sbGVyKX1hZGRDbGlja0xpc3RlbmVyKCl7dGhpcy5vdXRzaWRlQ2xpY2tDbG9zZSYmKHRoaXMuZG9jdW1lbnRDbGlja0xpc3RlbmVyPXRo''@;'; put 'put ''aXMucmVuZGVyZXIubGlzdGVuKHRoaXMuZG9jdW1lbnQsImNsaWNrIixhPT57YT09PXRoaXMuaWdub3JlZEV2ZW50P2RlbGV0ZSB0aGlzLmlnbm9yZWRFdmVudDoodGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW49ITEsYS50YXJnZXQuZm9jdXMoKSl9KSl9cmVtb3ZlQ2xpY2tMaXN0ZW5lcigp''@;'; put 'put ''e3RoaXMub3V0c2lkZUNsaWNrQ2xvc2UmJihkZWxldGUgdGhpcy5pZ25vcmVkRXZlbnQsdGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXImJih0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lcigpLGRlbGV0ZSB0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lcikpfWFkZEVzY2FwZUxpc3RlbmVyKCl7''@;'; put 'put ''dGhpcy5lc2NhcGVMaXN0ZW5lcj10aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmRvY3VtZW50LCJrZXlkb3duLmVzY2FwZSIsKCk9Pnt0aGlzLnNtYXJ0T3BlblNlcnZpY2Uub3Blbj0hMSx0aGlzLnNldEFuY2hvckZvY3VzKCl9KX1yZW1vdmVFc2NhcGVMaXN0ZW5lcigpe3RoaXMuZXNjYXBl''@;'; put 'put ''TGlzdGVuZXImJih0aGlzLmVzY2FwZUxpc3RlbmVyKCksZGVsZXRlIHRoaXMuZXNjYXBlTGlzdGVuZXIpfXNldENsb3NlRm9jdXMoKXt0aGlzLmNsb3NlQnV0dG9uUmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX1zZXRBbmNob3JGb2N1cygpe3RoaXMuYW5jaG9yQnV0dG9uUmVmLm5hdGl2ZUVs''@;'; put 'put ''ZW1lbnQuZm9jdXMoKX10ZXN0Rm9yU21hcnRQb3BvdmVyQ29udGVudENvbnRhaW5lcihhKXtsZXQgZD1hLnRhcmdldDtmb3IoO2QuY2xhc3NMaXN0JiYiYm9keSIhPT1kLnBhcmVudEVsZW1lbnQubG9jYWxOYW1lOylkPWQucGFyZW50RWxlbWVudDtyZXR1cm4hIWQuY2xhc3NMaXN0JiYhZC5j''@;'; put 'put ''bGFzc0xpc3QuY29udGFpbnMoImNsci1wb3BvdmVyLWNvbnRlbnQiKX1yZW1vdmVBbGxFdmVudExpc3RlbmVycygpe3RoaXMucmVtb3ZlU2Nyb2xsTGlzdGVuZXIoKSx0aGlzLnJlbW92ZUNsaWNrTGlzdGVuZXIoKSx0aGlzLnJlbW92ZUVzY2FwZUxpc3RlbmVyKCl9fXJldHVybiBjLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEhyKE5vKSxIcih5YyksSHIoR3MpKX0sYy5cdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxRVD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7YS5hbmNob3JCdXR0b25SZWY9ZH19''@;'; put 'put ''cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoSlQpLHFlKG5hKSl9LGMuXHUwMjc1ZGlyPVlyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclBvcG92ZXJBbmNob3IiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsy''@;'; put 'put ''JmEmJnhyKCJjbHItYW5jaG9yIiwhMCl9LHN0YW5kYWxvbmU6ITF9KSxjfSkoKSxRZmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5lbGVtZW50UmVmPWEsdGhpcy5zbWFydEV2ZW50c1NlcnZpY2U9ZCx0aGlzLnNtYXJ0T3BlblNlcnZpY2U9aCx0aGlzLmNsb3NlQ2hh''@;'; put 'put ''bmdlPW5ldyBYcix0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goaC5vcGVuQ2hhbmdlLnBpcGUob2MoZj0+IWYpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmNsb3NlQ2hhbmdlLm5leHQoKX0pKX1oYW5kbGVDbGljayhhKXt0aGlzLnNtYXJ0T3BlblNlcnZpY2Uu''@;'; put 'put ''dG9nZ2xlV2l0aEV2ZW50KGEpLHRoaXMuc21hcnRFdmVudHNTZXJ2aWNlLnNldEFuY2hvckZvY3VzKCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zbWFydEV2ZW50c1NlcnZpY2UuY2xvc2VCdXR0b25SZWY9dGhpcy5lbGVtZW50UmVmLHRoaXMuc21hcnRFdmVudHNTZXJ2aWNlLnNldENsb3Nl''@;'; put 'put ''Rm9jdXMoKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKG5hKSxxZShKVCkscWUoeWMpKX0sYy5cdTAyNzVkaXI9WXIoe3R5cGU6Yyxz''@;'; put 'put ''ZWxlY3RvcnM6W1siIiwiY2xyUG9wb3ZlckNsb3NlQnV0dG9uIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZPdCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLmhhbmRsZUNsaWNrKGYpfSksMiZhJiZ4cigiY2xyLXNtYXJ0LWNsb3NlLWJ1dHRv''@;'; put 'put ''biIsITApfSxvdXRwdXRzOntjbG9zZUNoYW5nZToiY2xyUG9wb3Zlck9uQ2xvc2VDaGFuZ2UifSxzdGFuZGFsb25lOiExfSksY30pKCk7dmFyIEgxPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuVkVSVElDQUw9MF09IlZFUlRJQ0FMIixjW2MuSE9SSVpPTlRBTD0xXT0iSE9SSVpPTlRBTCIsY30o''@;'; put 'put ''SDF8fHt9KSxVcz1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlNUQVJUPTBdPSJTVEFSVCIsY1tjLkNFTlRFUj0uNV09IkNFTlRFUiIsY1tjLkVORD0xXT0iRU5EIixjfShVc3x8e30pLGVBPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuQk9UVE9NPTBdPSJCT1RUT00iLGNbYy5MRUZUPTFdPSJMRUZU''@;'; put 'put ''IixjW2MuUklHSFQ9Ml09IlJJR0hUIixjW2MuVE9QPTNdPSJUT1AiLGN9KGVBfHx7fSk7Y29uc3QgbDY9Yz0+KHsuLi5jLHNpZGU6LTEqYy5zaWRlfSksdDU9KGMsbCk9Pntjb25zdCBhPWMuY29udGVudCsobD8uNTotLjUpO3JldHVybiBhPDB8fGE+MT9jOnsuLi5jLGNvbnRlbnQ6YX19O2Z1''@;'; put 'put ''bmN0aW9uIGx3KGMsbCxhKXtyZXR1cm4gZD0+bChjKGQpLGEpfWZ1bmN0aW9uIGcyKGMsbCxhKXtsZXQgZD1sLmxlZnQsaD1sLnRvcDtzd2l0Y2goYy5heGlzK2Muc2lkZSl7Y2FzZS0xOmQrPWUzZShjLGwsYSksaC09YS5oZWlnaHQ7YnJlYWs7Y2FzZSAxOmQrPWUzZShjLGwsYSksaCs9bC5o''@;'; put 'put ''ZWlnaHQ7YnJlYWs7Y2FzZSAwOmQtPWEud2lkdGgsaCs9dDNlKGMsbCxhKTticmVhaztjYXNlIDI6ZCs9bC53aWR0aCxoKz10M2UoYyxsLGEpfXJldHVybnt4T2Zmc2V0OmQseU9mZnNldDpofX1mdW5jdGlvbiBlM2UoYyxsLGEpe2xldCBkPTA7c3dpdGNoKGMuYW5jaG9yKXtjYXNlIFVzLlNU''@;'; put 'put ''QVJUOmJyZWFrO2Nhc2UgVXMuQ0VOVEVSOmQrPWwud2lkdGgvMjticmVhaztjYXNlIFVzLkVORDpkKz1sLndpZHRofXN3aXRjaChjLmNvbnRlbnQpe2Nhc2UgVXMuU1RBUlQ6YnJlYWs7Y2FzZSBVcy5DRU5URVI6ZC09YS53aWR0aC8yO2JyZWFrO2Nhc2UgVXMuRU5EOmQtPWEud2lkdGh9cmV0''@;'; put 'put ''dXJuIGR9ZnVuY3Rpb24gdDNlKGMsbCxhKXtsZXQgZD0wO3N3aXRjaChjLmFuY2hvcil7Y2FzZSBVcy5TVEFSVDpicmVhaztjYXNlIFVzLkNFTlRFUjpkKz1sLmhlaWdodC8yO2JyZWFrO2Nhc2UgVXMuRU5EOmQrPWwuaGVpZ2h0fXN3aXRjaChjLmNvbnRlbnQpe2Nhc2UgVXMuU1RBUlQ6YnJl''@;'; put 'put ''YWs7Y2FzZSBVcy5DRU5URVI6ZC09YS5oZWlnaHQvMjticmVhaztjYXNlIFVzLkVORDpkLT1hLmhlaWdodH1yZXR1cm4gZH1sZXQgbjNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmV2ZW50U2VydmljZT1hLHRoaXMucGxhdGZvcm1JZD1kLHRoaXMuX3Nob3VsZFJlYWxp''@;'; put 'put ''Z249bmV3IHVyLHRoaXMuc2hvdWxkUmVhbGlnbj10aGlzLl9zaG91bGRSZWFsaWduLmFzT2JzZXJ2YWJsZSgpfXJlYWxpZ24oKXt0aGlzLl9zaG91bGRSZWFsaWduLm5leHQoKX1hbGlnbkNvbnRlbnQoYSl7aWYoIXdsKHRoaXMucGxhdGZvcm1JZCkpcmV0dXJue3hPZmZzZXQ6MCx5T2Zmc2V0''@;'; put 'put ''OjB9O3RoaXMuY3VycmVudEFuY2hvckNvb3Jkcz10aGlzLmV2ZW50U2VydmljZS5hbmNob3JCdXR0b25SZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5jb250ZW50''@;'; put 'put ''T2Zmc2V0cz1nMih0aGlzLnBvc2l0aW9uLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTtjb25zdCBkPWZ1bmN0aW9uIG1LZShjLGwpe2NvbnN0IGE9W10sZF9ib3R0b209Yy55T2Zmc2V0K2wuaGVpZ2h0LGRfbGVmdD1jLnhPZmZzZXQsZF9yaWdo''@;'; put 'put ''dD1jLnhPZmZzZXQrbC53aWR0aDtyZXR1cm4gYy55T2Zmc2V0Pj0wfHxhLnB1c2goZUEuVE9QKSxkX2xlZnQ+PTB8fGEucHVzaChlQS5MRUZUKSxkX2JvdHRvbTw9KHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCl8fGEucHVzaChlQS5C''@;'; put 'put ''T1RUT00pLGRfcmlnaHQ8PSh3aW5kb3cuaW5uZXJXaWR0aHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKXx8YS5wdXNoKGVBLlJJR0hUKSxhfSh0aGlzLmNvbnRlbnRPZmZzZXRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpLGg9ZC5yZWR1Y2UoKGYsdik9PmYrdiww''@;'; put 'put ''KTtyZXR1cm4gMT09PWQubGVuZ3RoJiZ0aGlzLnBvc2l0aW9uLmF4aXM9PT1IMS5WRVJUSUNBTD90aGlzLmhhbmRsZVZlcnRpY2FsQXhpc09uZVZpb2xhdGlvbihoKToxPT09ZC5sZW5ndGgmJnRoaXMucG9zaXRpb24uYXhpcz09PUgxLkhPUklaT05UQUw/dGhpcy5oYW5kbGVIb3Jpem9udGFs''@;'; put 'put ''QXhpc09uZVZpb2xhdGlvbihoKToyPT09ZC5sZW5ndGgmJnRoaXMucG9zaXRpb24uYXhpcz09PUgxLlZFUlRJQ0FMP3RoaXMuaGFuZGxlVmVydGljYWxBeGlzVHdvVmlvbGF0aW9ucyhoKToyPT09ZC5sZW5ndGgmJnRoaXMucG9zaXRpb24uYXhpcz09PUgxLkhPUklaT05UQUwmJnRoaXMuaGFu''@;'; put 'put ''ZGxlSG9yaXpvbnRhbEF4aXNUd29WaW9sYXRpb25zKGgpLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMudG9wPDAmJih0aGlzLmNvbnRlbnRPZmZzZXRzLnlPZmZzZXQrPU1hdGguYWJzKHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMudG9wKSksdGhpcy5jb250ZW50T2Zmc2V0cy55T2Zmc2V0''@;'; put 'put ''K3RoaXMuY3VycmVudEFuY2hvckNvb3Jkcy55PDAmJih0aGlzLmNvbnRlbnRPZmZzZXRzLnlPZmZzZXQ9MC10aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzLnRvcCksdGhpcy5jb250ZW50T2Zmc2V0c31oYW5kbGVWZXJ0aWNhbEF4aXNPbmVWaW9sYXRpb24oYSl7c3dpdGNoKGEpe2Nhc2UgMDpj''@;'; put 'put ''YXNlIDM6dGhpcy5jb250ZW50T2Zmc2V0cz1nMihsNih0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWs7Y2FzZSAxOnRoaXMuY29udGVudE9mZnNldHM9ZzIodGhpcy5wb3NpdGlvbix0aGlzLmN1cnJlbnRBbmNo''@;'; put 'put ''b3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3JkcyksdGhpcy5jb250ZW50T2Zmc2V0cy54T2Zmc2V0PDAmJih0aGlzLmNvbnRlbnRPZmZzZXRzLnhPZmZzZXQ9MTApO2JyZWFrO2Nhc2UgMjp0aGlzLmNvbnRlbnRPZmZzZXRzPWcyKHQ1KHRoaXMucG9zaXRpb24sITApLHRoaXMuY3Vy''@;'; put 'put ''cmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKX19aGFuZGxlVmVydGljYWxBeGlzVHdvVmlvbGF0aW9ucyhhKXtzd2l0Y2goYSl7Y2FzZSA1Ontjb25zdCBkPWx3KGw2LHQ1LCEwKTt0aGlzLmNvbnRlbnRPZmZzZXRzPWcyKGQodGhpcy5wb3NpdGlvbiksdGhpcy5j''@;'; put 'put ''dXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2JyZWFrfWNhc2UgNDp7Y29uc3QgZD1sdyhsNix0NSwhMSk7dGhpcy5jb250ZW50T2Zmc2V0cz1nMihkKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50''@;'; put 'put ''Q29vcmRzKTticmVha31jYXNlIDM6ZGVmYXVsdDpicmVhaztjYXNlIDI6e2NvbnN0IGQ9bHcobDYsdDUsITApO3RoaXMuY29udGVudE9mZnNldHM9ZzIoZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWt9Y2Fz''@;'; put 'put ''ZSAxOntjb25zdCBkPWx3KGw2LHQ1LCExKTt0aGlzLmNvbnRlbnRPZmZzZXRzPWcyKGQodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2JyZWFrfX19aGFuZGxlSG9yaXpvbnRhbEF4aXNPbmVWaW9sYXRpb24oYSl7c3dp''@;'; put 'put ''dGNoKGEpe2Nhc2UgMTpjYXNlIDI6dGhpcy5jb250ZW50T2Zmc2V0cz1nMihsNih0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWs7Y2FzZSAwOnRoaXMuY29udGVudE9mZnNldHM9ZzIodDUodGhpcy5wb3NpdGlv''@;'; put 'put ''biwhMCksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2JyZWFrO2Nhc2UgMzp0aGlzLmNvbnRlbnRPZmZzZXRzPWcyKHQ1KHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKX19''@;'; put 'put ''aGFuZGxlSG9yaXpvbnRhbEF4aXNUd29WaW9sYXRpb25zKGEpe3N3aXRjaChhKXtjYXNlIDU6Y2FzZSA0Ontjb25zdCBkPWx3KGw2LHQ1LCExKTt0aGlzLmNvbnRlbnRPZmZzZXRzPWcyKGQodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRl''@;'; put 'put ''bnRDb29yZHMpO2JyZWFrfWNhc2UgMzpkZWZhdWx0OmJyZWFrO2Nhc2UgMjpjYXNlIDE6e2NvbnN0IGQ9bHcobDYsdDUsITApO3RoaXMuY29udGVudE9mZnNldHM9ZzIoZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7''@;'; put 'put ''YnJlYWt9fX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoSHIoSlQpLEhyKHVsKSl9LGMuXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksdEE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYs''@;'; put 'put ''TSxEKXt0aGlzLmRvY3VtZW50PWEsdGhpcy5jb250YWluZXI9ZCx0aGlzLnRlbXBsYXRlPWgsdGhpcy5yZW5kZXJlcj1mLHRoaXMuc21hcnRQb3NpdGlvblNlcnZpY2U9dix0aGlzLnNtYXJ0RXZlbnRzU2VydmljZT1NLHRoaXMuc21hcnRPcGVuU2VydmljZT1ELHRoaXMuc3Vic2NyaXB0aW9u''@;'; put 'put ''cz1bXSx0aGlzLnJlbW92ZUNsaWNrTGlzdGVuZXJGbj1udWxsLHRoaXMuc2hvdWxkUmVhbGlnbj0hMSx0aGlzLnByZXZpb3VzQ29udGVudEhlaWdodD1udWxsLHRoaXMuY2hlY2tDb2xsZWN0b3I9bmV3IFhyfXNldCBvcGVuKGEpe3RoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuPSEhYX1zZXQg''@;'; put 'put ''Y29udGVudEF0KGEpe3RoaXMuc21hcnRQb3NpdGlvblNlcnZpY2UucG9zaXRpb249YX1zZXQgb3V0c2lkZUNsaWNrQ2xvc2UoYSl7dGhpcy5zbWFydEV2ZW50c1NlcnZpY2Uub3V0c2lkZUNsaWNrQ2xvc2U9ISFhfXNldCBzY3JvbGxUb0Nsb3NlKGEpe3RoaXMuc21hcnRFdmVudHNTZXJ2aWNl''@;'; put 'put ''LnNjcm9sbFRvQ2xvc2U9ISFhfW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe2lmKHRoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuJiZ0aGlzLnZpZXcpe2NvbnN0IGE9dGhpcy52aWV3LnJvb3ROb2Rlc1swXS5vZmZzZXRIZWlnaHQ7KHRoaXMuc2hvdWxkUmVhbGlnbnx8bnVsbCE9PXRoaXMucHJl''@;'; put 'put ''dmlvdXNDb250ZW50SGVpZ2h0JiZ0aGlzLnByZXZpb3VzQ29udGVudEhlaWdodCE9PWEpJiYodGhpcy5wcmV2aW91c0NvbnRlbnRIZWlnaHQ9YSx0aGlzLmNoZWNrQ29sbGVjdG9yLmVtaXQoKSl9fW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuc21hcnRP''@;'; put 'put ''cGVuU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57YT90aGlzLmFkZENvbnRlbnQoKTp0aGlzLnJlbW92ZUNvbnRlbnQoKX0pLHRoaXMuc21hcnRQb3NpdGlvblNlcnZpY2Uuc2hvdWxkUmVhbGlnbi5zdWJzY3JpYmUoKCk9Pnt0aGlzLnNob3VsZFJlYWxpZ249ITB9KSx0aGlzLmNo''@;'; put 'put ''ZWNrQ29sbGVjdG9yLnBpcGUoXzkoMCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuYWxpZ25Db250ZW50KCksdGhpcy5zaG91bGRSZWFsaWduPSExLHRoaXMudmlldyYmKHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy52aWV3LnJvb3ROb2Rlc1swXSwib3BhY2l0eSIsIjEiKSx0aGlzLnNtYXJ0''@;'; put 'put ''T3BlblNlcnZpY2UucG9wb3ZlclZpc2libGVFbWl0KCEwKSl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJlbW92ZUNvbnRlbnQoKSx0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfWFkZENvbnRlbnQoKXt0aGlzLnZpZXc9dGhpcy5jb250YWluZXIuY3JlYXRl''@;'; put 'put ''RW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUpO2NvbnN0W2FdPXRoaXMudmlldy5yb290Tm9kZXM7dGhpcy5zbWFydEV2ZW50c1NlcnZpY2UuY29udGVudFJlZj1hLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoYSwiY2xyLXBvcG92ZXItY29udGVudCIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUo''@;'; put 'put ''YSwidG9wIiwiMHB4IiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJsZWZ0IiwiMHB4IiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJvcGFjaXR5IiwiMCIpLHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuPXRoaXMucmVuZGVyZXIubGlzdGVuKGEsImNsaWNrIixkPT57dGhpcy5zbWFy''@;'; put 'put ''dE9wZW5TZXJ2aWNlLm9wZW5FdmVudD1kfSksdGhpcy52aWV3LnJvb3ROb2Rlcy5mb3JFYWNoKGQ9Pnt0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZG9jdW1lbnQuYm9keSxkKX0pLHRoaXMuc2hvdWxkUmVhbGlnbj0hMH1yZW1vdmVDb250ZW50KCl7dGhpcy52aWV3JiYodGhpcy5y''@;'; put 'put ''ZW1vdmVDbGlja0xpc3RlbmVyRm4mJih0aGlzLnJlbW92ZUNsaWNrTGlzdGVuZXJGbigpLHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuPW51bGwpLHRoaXMudmlldy5yb290Tm9kZXMuZm9yRWFjaChhPT50aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKHRoaXMuZG9jdW1lbnQuYm9keSxhKSks''@;'; put 'put ''dGhpcy5jb250YWluZXIuY2xlYXIoKSxkZWxldGUgdGhpcy52aWV3LHRoaXMuc21hcnRPcGVuU2VydmljZS5wb3BvdmVyVmlzaWJsZUVtaXQoITEpKX1hbGlnbkNvbnRlbnQoKXtpZighdGhpcy52aWV3KXJldHVybjtjb25zdCBhPXRoaXMuc21hcnRQb3NpdGlvblNlcnZpY2UuYWxpZ25Db250''@;'; put 'put ''ZW50KHRoaXMudmlldy5yb290Tm9kZXNbMF0pO3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy52aWV3LnJvb3ROb2Rlc1swXSwidG9wIixgJHthLnlPZmZzZXR9cHhgKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudmlldy5yb290Tm9kZXNbMF0sImxlZnQiLGAke2EueE9mZnNldH1w''@;'; put 'put ''eGApLHRoaXMuc21hcnRPcGVuU2VydmljZS5wb3BvdmVyQWxpZ25lZEVtaXQodGhpcy52aWV3LnJvb3ROb2Rlc1swXSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKEdzKSxxZShiZSkscWUoSWwpLHFlKE5vKSxxZShuM2UpLHFlKEpUKSxxZSh5''@;'; put 'put ''YykpfSxjLlx1MDI3NWRpcj1Zcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJQb3BvdmVyQ29udGVudCIsIiJdXSxpbnB1dHM6e29wZW46WzAsImNsclBvcG92ZXJDb250ZW50Iiwib3BlbiJdLGNvbnRlbnRBdDpbMCwiY2xyUG9wb3ZlckNvbnRlbnRBdCIsImNvbnRlbnRBdCJdLG91dHNp''@;'; put 'put ''ZGVDbGlja0Nsb3NlOlswLCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCJvdXRzaWRlQ2xpY2tDbG9zZSJdLHNjcm9sbFRvQ2xvc2U6WzAsImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSIsInNjcm9sbFRvQ2xvc2UiXX0sc3RhbmRhbG9uZTohMX0pLGN9KSgp''@;'; put 'put ''LG5BPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5zbWFydE9wZW5TZXJ2aWNlPWEsdGhpcy5vcGVuQ2xvc2VDaGFuZ2U9bmV3IFhyLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChhLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGQ9Pnt0aGlzLm9w''@;'; put 'put ''ZW5DbG9zZUNoYW5nZS5uZXh0KGQpfSkpfWhhbmRsZUNsaWNrKGEpe3RoaXMuc21hcnRPcGVuU2VydmljZS50b2dnbGVXaXRoRXZlbnQoYSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVu''@;'; put 'put ''Y3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZSh5YykpfSxjLlx1MDI3NWRpcj1Zcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZPdCgiY2xpY2siLGZ1bmN0''@;'; put 'put ''aW9uKGYpe3JldHVybiBkLmhhbmRsZUNsaWNrKGYpfSksMiZhJiZ4cigiY2xyLXNtYXJ0LW9wZW4tY2xvc2UiLCEwKX0sb3V0cHV0czp7b3BlbkNsb3NlQ2hhbmdlOiJjbHJQb3BvdmVyT3BlbkNsb3NlQ2hhbmdlIn0sc3RhbmRhbG9uZTohMX0pLGN9KSgpLHJBPSgoKT0+e2NsYXNzIGN7fXJl''@;'; put 'put ''dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1FaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9eWkoe30pLGN9KSgpO3ZhciBtMj1mdW5jdGlvbihjKXtyZXR1cm4gYy5VUD0idXAiLGMuRE9XTj0iZG93biIsYy5MRUZUPSJsZWZ0IixjLlJJ''@;'; put 'put ''R0hUPSJyaWdodCIsY30obTJ8fHt9KTtsZXQgaUE9KCgpPT57bGV0IGM9Y2xhc3N7Y29uc3RydWN0b3IoYSl7dGhpcy5yZW5kZXJlcj1hLHRoaXMuX3VubGlzdGVuRnVuY3M9W119Z2V0IGN1cnJlbnQoKXtyZXR1cm4gdGhpcy5fY3VycmVudH1yZXNldChhKXt0aGlzLl9jdXJyZW50PWF9bGlz''@;'; put 'put ''dGVuVG9BcnJvd0tleXMoYSl7dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uYXJyb3d1cCIsKCk9PiF0aGlzLm1vdmUobTIuVVApKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24u''@;'; put 'put ''YXJyb3dkb3duIiwoKT0+IXRoaXMubW92ZShtMi5ET1dOKSkpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJrZXlkb3duLmFycm93bGVmdCIsKCk9PiF0aGlzLm1vdmUobTIuTEVGVCkpKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5k''@;'; put 'put ''ZXJlci5saXN0ZW4oYSwia2V5ZG93bi5hcnJvd3JpZ2h0IiwoKT0+IXRoaXMubW92ZShtMi5SSUdIVCkpKX1yZWdpc3RlckNvbnRhaW5lcihhLGQ9IjAiKXt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShhLCJ0YWJpbmRleCIsZCksdGhpcy5saXN0ZW5Ub0Fycm93S2V5cyhhKSx0aGlzLl91''@;'; put 'put ''bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5zcGFjZSIsKCk9PiF0aGlzLmFjdGl2YXRlQ3VycmVudCgpKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uZW50ZXIiLCgpPT4hdGhpcy5hY3Rp''@;'; put 'put ''dmF0ZUN1cnJlbnQoKSkpfW1vdmVUbyhhKXt2b2lkIDAhPT1hJiYodGhpcy5jdXJyZW50JiZ0aGlzLmN1cnJlbnQuYmx1cigpLGEuZm9jdXMoKSx0aGlzLl9jdXJyZW50PWEpfW1vdmUoYSl7bGV0IGQ9ITE7aWYodGhpcy5jdXJyZW50KXtjb25zdCBoPXRoaXMuY3VycmVudFthXTtoJiYoWEUo''@;'; put 'put ''aCk/aDpfbyhoKSkuc3Vic2NyaWJlKHY9Pnt2JiYodGhpcy5tb3ZlVG8odiksZD0hMCl9KX1yZXR1cm4gZH1hY3RpdmF0ZUN1cnJlbnQoKXtyZXR1cm4hKCF0aGlzLmN1cnJlbnR8fCF0aGlzLmN1cnJlbnQuYWN0aXZhdGV8fCh0aGlzLmN1cnJlbnQuYWN0aXZhdGUoKSwwKSl9ZGV0YWNoTGlz''@;'; put 'put ''dGVuZXJzKCl7dGhpcy5fdW5saXN0ZW5GdW5jcy5mb3JFYWNoKGE9PmEoKSl9fTtyZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShIcihObykpfSxjLlx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IGEz''@;'; put 'put ''ZT17cHJvdmlkZTppQSx1c2VGYWN0b3J5OmZ1bmN0aW9uIHZLZShjLGwpe3JldHVybiBjfHxuZXcgaUEobCl9LGRlcHM6W1tuZXcgV3MsbmV3IEdkLGlBXSxOb119O3ZhciBEZj1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkJFRk9SRT0tMV09IkJFRk9SRSIsY1tjLkFGVEVSPTFdPSJBRlRFUiIs''@;'; put 'put ''Y30oRGZ8fHt9KTtjbGFzcyBsaHt9bGhbInRvcC1yaWdodCJdPXtheGlzOkgxLlZFUlRJQ0FMLHNpZGU6RGYuQkVGT1JFLGFuY2hvcjpVcy5FTkQsY29udGVudDpVcy5FTkR9LGxoWyJ0b3AtbGVmdCJdPXtheGlzOkgxLlZFUlRJQ0FMLHNpZGU6RGYuQkVGT1JFLGFuY2hvcjpVcy5TVEFSVCxj''@;'; put 'put ''b250ZW50OlVzLlNUQVJUfSxsaFsiYm90dG9tLXJpZ2h0Il09e2F4aXM6SDEuVkVSVElDQUwsc2lkZTpEZi5BRlRFUixhbmNob3I6VXMuRU5ELGNvbnRlbnQ6VXMuRU5EfSxsaFsiYm90dG9tLWxlZnQiXT17YXhpczpIMS5WRVJUSUNBTCxzaWRlOkRmLkFGVEVSLGFuY2hvcjpVcy5TVEFSVCxj''@;'; put 'put ''b250ZW50OlVzLlNUQVJUfSxsaFsicmlnaHQtdG9wIl09e2F4aXM6SDEuSE9SSVpPTlRBTCxzaWRlOkRmLkFGVEVSLGFuY2hvcjpVcy5DRU5URVIsY29udGVudDpVcy5FTkR9LGxoWyJyaWdodC1ib3R0b20iXT17YXhpczpIMS5IT1JJWk9OVEFMLHNpZGU6RGYuQUZURVIsYW5jaG9yOlVzLlNU''@;'; put 'put ''QVJULGNvbnRlbnQ6VXMuU1RBUlR9LGxoWyJsZWZ0LXRvcCJdPXtheGlzOkgxLkhPUklaT05UQUwsc2lkZTpEZi5CRUZPUkUsYW5jaG9yOlVzLkNFTlRFUixjb250ZW50OlVzLkVORH0sbGhbImxlZnQtYm90dG9tIl09e2F4aXM6SDEuSE9SSVpPTlRBTCxzaWRlOkRmLkJFRk9SRSxhbmNob3I6''@;'; put 'put ''VXMuU1RBUlQsY29udGVudDpVcy5TVEFSVH07Y29uc3Qgbkg9bmV3IGpuKCJQT1BPVkVSX0hPU1RfQU5DSE9SIik7bGV0IHlLZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMudG9nZ2xlU2VydmljZT1hLHRoaXMubGFzdE9wZW5DaGFuZ2U9bnVsbH1uZ09uSW5pdCgpe3RoaXMu''@;'; put 'put ''c3Vic2NyaXB0aW9uPXRoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5sYXN0T3BlbkNoYW5nZT1hfSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKX1vbkVzY2FwZUtleShhKXtudWxsIT09dGhpcy5sYXN0T3BlbkNo''@;'; put 'put ''YW5nZSYmKCExPT09dGhpcy5sYXN0T3BlbkNoYW5nZSYmYS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmxhc3RPcGVuQ2hhbmdlPW51bGwpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZSh5YykpfSxjLlx1MDI3NWRpcj1Zcih7dHlwZTpjLGhvc3RC''@;'; put 'put ''aW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmT3QoImtleXVwLmVzY2FwZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25Fc2NhcGVLZXkoZil9KX19KSxjfSkoKSxuNT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAy''@;'; put 'put ''NzVkaXI9WXIoe3R5cGU6YyxmZWF0dXJlczpbaGEoW3ljLEpULG4zZSx7cHJvdmlkZTpuSCx1c2VFeGlzdGluZzpuYX1dKSx5ZihbeUtlXSldfSksY30pKCk7Y2xhc3MgdVh7c3RhdGljIGxpbmtQYXJlbnQobCxhLGQpe2wuZm9yRWFjaChoPT5oW2RdPWEpfXN0YXRpYyBsaW5rVmVydGljYWwo''@;'; put 'put ''bCxhPSEwKXtsLmZvckVhY2goKGQsaCk9PntoPjAmJihkLnVwPWxbaC0xXSksaDxsLmxlbmd0aC0xJiYoZC5kb3duPWxbaCsxXSl9KSxhJiZsLmxlbmd0aD4xJiYobFswXS51cD1sW2wubGVuZ3RoLTFdLGxbbC5sZW5ndGgtMV0uZG93bj1sWzBdKX19bGV0IGM2PSgoKT0+e2NsYXNzIGN7dXNl''@;'; put 'put ''ckRlZmluZWRXaWR0aChhKXtjb25zdCBkPWEuY2xvbmVOb2RlKCEwKTtkLmlkJiYoZC5pZD1kLmlkKyItY2xvbmUiKSxkLmNsYXNzTGlzdC5hZGQoImRhdGFncmlkLWNlbGwtd2lkdGgtemVybyIpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZCk7Y29uc3QgaD10aGlzLmNsaWVudFJlY3Qo''@;'; put 'put ''ZCkud2lkdGg7cmV0dXJuIGQucmVtb3ZlKCksaH1zY3JvbGxCYXJXaWR0aChhKXtyZXR1cm4gYS5vZmZzZXRXaWR0aC1hLmNsaWVudFdpZHRofXNjcm9sbFdpZHRoKGEpe3JldHVybiBhLnNjcm9sbFdpZHRofHwwfWNvbXB1dGVkSGVpZ2h0KGEpe3JldHVybiBwYXJzZUludChnZXRDb21wdXRl''@;'; put 'put ''ZFN0eWxlKGEpLmdldFByb3BlcnR5VmFsdWUoImhlaWdodCIpLDEwKX1jbGllbnRSZWN0KGEpe2NvbnN0IGQ9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57dG9wOnBhcnNlSW50KGQudG9wLDEwKSxib3R0b206cGFyc2VJbnQoZC5ib3R0b20sMTApLGxlZnQ6cGFyc2VJbnQoZC5s''@;'; put 'put ''ZWZ0LDEwKSxyaWdodDpwYXJzZUludChkLnJpZ2h0LDEwKSx3aWR0aDpwYXJzZUludChkLndpZHRoLDEwKSxoZWlnaHQ6cGFyc2VJbnQoZC5oZWlnaHQsMTApfX1taW5XaWR0aChhKXtyZXR1cm4gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShhKS5nZXRQcm9wZXJ0eVZhbHVlKCJtaW4td2lk''@;'; put 'put ''dGgiKSwxMCl9Zm9jdXMoYSl7YS5mb2N1cygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxySD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxo''@;'; put 'put ''KXt0aGlzLmVsZW1lbnQ9YSx0aGlzLmRvbUFkYXB0ZXI9ZCx0aGlzLnJlbmRlcmVyPWgsdGhpcy5jbHJFeHBhbmRUcmlnZ2VyPSExLHRoaXMuc3RhcnRIZWlnaHQ9MH1nZXQgZXhwYW5kQW5pbWF0aW9uKCl7cmV0dXJue3ZhbHVlOnRoaXMuY2xyRXhwYW5kVHJpZ2dlcixwYXJhbXM6e3N0YXJ0''@;'; put 'put ''SGVpZ2h0OnRoaXMuc3RhcnRIZWlnaHR9fX1hbmltYXRpb25TdGFydChhKXsidm9pZCIhPT1hLmZyb21TdGF0ZSYmdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwib3ZlcmZsb3ciLCJoaWRkZW4iKX1hbmltYXRpb25Eb25lKGEpeyJ2b2lkIiE9PWEu''@;'; put 'put ''ZnJvbVN0YXRlJiYodGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwib3ZlcmZsb3ciKSx0aGlzLnVwZGF0ZVN0YXJ0SGVpZ2h0KCkpfXVwZGF0ZVN0YXJ0SGVpZ2h0KCl7dGhpcy5zdGFydEhlaWdodD10aGlzLmRvbUFkYXB0ZXIuY29tcHV0ZWRI''@;'; put 'put ''ZWlnaHQodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpfHwwfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShuYSkscWUoYzYpLHFlKE5vKSl9LGMuXHUwMjc1Y21wPWFyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1leHBhbmRhYmxlLWFuaW1h''@;'; put 'put ''dGlvbiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmalkoIkBleHBhbmRBbmltYXRpb24uc3RhcnQiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmFuaW1hdGlvblN0YXJ0KGYpfSkoIkBleHBhbmRBbmltYXRpb24uZG9uZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQu''@;'; put 'put ''YW5pbWF0aW9uRG9uZShmKX0pLDImYSYmTlkoIkBleHBhbmRBbmltYXRpb24iLGQuZXhwYW5kQW5pbWF0aW9uKX0saW5wdXRzOntjbHJFeHBhbmRUcmlnZ2VyOiJjbHJFeHBhbmRUcmlnZ2VyIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbaGEoW2M2XSldLG5nQ29udGVudFNlbGVjdG9yczpU''@;'; put 'put ''byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksV3IoMCkpfSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOltwMigiZXhwYW5kQW5pbWF0aW9uIixbdnUoInRydWUgPD0+IGZhbHNlIixbd3Moe2hlaWdodDoie3tzdGFydEhlaWdodH19cHgi''@;'; put 'put ''fSksejAoIjAuMnMgZWFzZS1pbi1vdXQiLHdzKHtoZWlnaHQ6IioifSkpXSldKV19fSksY30pKCksZFg9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUVpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj15aSh7''@;'; put 'put ''aW1wb3J0czpbTmFdfSksY30pKCksYktlPTA7Y29uc3QgdXc9bmV3IGpuKCJJRl9BQ1RJVkVfSUQiKSx3S2U9e3Byb3ZpZGU6dXcsdXNlRmFjdG9yeTpmdW5jdGlvbiBfS2UoKXtyZXR1cm4rK2JLZX19O2xldCB4OT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fY3VycmVudENo''@;'; put 'put ''YW5nZT1uZXcgdXJ9Z2V0IGN1cnJlbnRDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY3VycmVudENoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KGEpe3RoaXMuX2N1cnJlbnQhPT1hJiYodGhpcy5fY3VycmVudD1hLHRoaXMu''@;'; put 'put ''X2N1cnJlbnRDaGFuZ2UubmV4dChhKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGR3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7''@;'; put 'put ''dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLmlkPWQsdGhpcy50ZW1wbGF0ZT1oLHRoaXMuY29udGFpbmVyPWYsdGhpcy5hY3RpdmVDaGFuZ2U9bmV3IFhyKCExKSx0aGlzLndhc0FjdGl2ZT0hMSx0aGlzLmNoZWNrQW5kVXBkYXRlVmlldyhhLmN1cnJlbnQpLHRoaXMuc3Vic2NyaXB0aW9u''@;'; put 'put ''PWEuY3VycmVudENoYW5nZS5zdWJzY3JpYmUodj0+e3RoaXMuY2hlY2tBbmRVcGRhdGVWaWV3KHYpfSl9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PT09dGhpcy5pZH1zZXQgYWN0aXZlKGEpe2EmJih0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50''@;'; put 'put ''PXRoaXMuaWQpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX11cGRhdGVWaWV3KGEpe2E/dGhpcy5jb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUpOnRoaXMuY29udGFpbmVyLmNsZWFyKCl9Y2hlY2tBbmRVcGRhdGVWaWV3KGEp''@;'; put 'put ''e2NvbnN0IGQ9YT09PXRoaXMuaWQ7ZCE9PXRoaXMud2FzQWN0aXZlJiYodGhpcy51cGRhdGVWaWV3KGQpLHRoaXMuYWN0aXZlQ2hhbmdlLmVtaXQoZCksdGhpcy53YXNBY3RpdmU9ZCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKHg5KSxxZSh1''@;'; put 'put ''dykscWUoSWwpLHFlKGJlKSl9LGMuXHUwMjc1ZGlyPVlyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNscklmQWN0aXZlIiwiIl1dLGlucHV0czp7YWN0aXZlOlswLCJjbHJJZkFjdGl2ZSIsImFjdGl2ZSJdfSxvdXRwdXRzOnthY3RpdmVDaGFuZ2U6ImNscklmQWN0aXZlQ2hhbmdlIn0sc3Rh''@;'; put 'put ''bmRhbG9uZTohMX0pLGN9KSgpLElmPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMudG9nZ2xlU2VydmljZT1hLHRoaXMudGVtcGxhdGU9ZCx0aGlzLmNvbnRhaW5lcj1oLHRoaXMub3BlbkNoYW5nZT1uZXcgWHIoITEpLHRoaXMuc3Vic2NyaXB0aW9uPWEub3BlbkNoYW5n''@;'; put 'put ''ZS5zdWJzY3JpYmUoZj0+e3RoaXMudXBkYXRlVmlldyhmKSx0aGlzLm9wZW5DaGFuZ2UuZW1pdChmKX0pfWdldCBvcGVuKCl7cmV0dXJuIHRoaXMudG9nZ2xlU2VydmljZS5vcGVufXNldCBvcGVuKGEpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPWF9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNj''@;'; put 'put ''cmlwdGlvbi51bnN1YnNjcmliZSgpfXVwZGF0ZVZpZXcoYSl7YT90aGlzLmNvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZSk6dGhpcy5jb250YWluZXIuY2xlYXIoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoeWMp''@;'; put 'put ''LHFlKElsKSxxZShiZSkpfSxjLlx1MDI3NWRpcj1Zcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJJZk9wZW4iLCIiXV0saW5wdXRzOntvcGVuOlswLCJjbHJJZk9wZW4iLCJvcGVuIl19LG91dHB1dHM6e29wZW5DaGFuZ2U6ImNscklmT3BlbkNoYW5nZSJ9LHN0YW5kYWxvbmU6ITF9KSxj''@;'; put 'put ''fSkoKSxvM2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMudGVtcGxhdGU9YSx0aGlzLmNvbnRhaW5lcj1kLHRoaXMuZWw9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5leHBhbmQ9dix0aGlzLmV4cGFuZGVkQ2hhbmdlPW5ldyBYcighMCksdGhpcy5fZXhwYW5kZWQ9''@;'; put 'put ''ITEsdGhpcy5fc3Vic2NyaXB0aW9ucz1bXSx0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2godi5leHBhbmRDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy51cGRhdGVWaWV3KCksdGhpcy5leHBhbmRlZENoYW5nZS5lbWl0KHYuZXhwYW5kZWQpfSkpLHYuaGFzRXhwYW5kVGVtcGxhdGU9ISFhfWdl''@;'; put 'put ''dCBleHBhbmRlZCgpe3JldHVybiB0aGlzLl9leHBhbmRlZH1zZXQgZXhwYW5kZWQoYSl7ImJvb2xlYW4iPT10eXBlb2YgYSYmKHRoaXMuZXhwYW5kLmV4cGFuZGVkPWEsdGhpcy5fZXhwYW5kZWQ9YSl9bmdPbkluaXQoKXt0aGlzLmV4cGFuZC5leHBhbmRhYmxlKyssdGhpcy51cGRhdGVWaWV3''@;'; put 'put ''KCl9bmdPbkRlc3Ryb3koKXt0aGlzLmV4cGFuZC5leHBhbmRhYmxlLS0sdGhpcy5fc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9dXBkYXRlVmlldygpe2lmKCF0aGlzLmV4cGFuZC5leHBhbmRlZHx8MD09PXRoaXMuY29udGFpbmVyLmxlbmd0aClpZih0aGlzLnRl''@;'; put 'put ''bXBsYXRlKXRoaXMuZXhwYW5kLmV4cGFuZGVkP3RoaXMuY29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlKTp0aGlzLmNvbnRhaW5lci5jbGVhcigpO2Vsc2UgdHJ5e3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJkaXNwbGF5Iix0''@;'; put 'put ''aGlzLmV4cGFuZC5leHBhbmRlZD9udWxsOiJub25lIil9Y2F0Y2h7fX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoSWwsOCkscWUoYmUpLHFlKG5hKSxxZShObykscWUoU2QpKX0sYy5cdTAyNzVkaXI9WXIoe3R5cGU6YyxzZWxlY3RvcnM6W1si''@;'; put 'put ''IiwiY2xySWZFeHBhbmRlZCIsIiJdXSxpbnB1dHM6e2V4cGFuZGVkOlswLCJjbHJJZkV4cGFuZGVkIiwiZXhwYW5kZWQiXX0sb3V0cHV0czp7ZXhwYW5kZWRDaGFuZ2U6ImNscklmRXhwYW5kZWRDaGFuZ2UifSxzdGFuZGFsb25lOiExfSksY30pKCksUmY9KCgpPT57Y2xhc3MgY3t9cmV0dXJu''@;'; put 'put ''IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUVpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj15aSh7aW1wb3J0czpbTmFdfSksY30pKCk7Y29uc3QgQ0tlPXtwcm92aWRlOm5ldyBqbigiRk9DVVNfT05fVklFV19JTklUIiksdXNlVmFsdWU6ITB9''@;'; put 'put ''O2xldCBpSD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9RWkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPXlpKHtwcm92aWRlcnM6W0NLZV0saW1wb3J0czpbTmFdfSksY30pKCksTUtlPSgoKT0+e2NsYXNz''@;'; put 'put ''IGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1FaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9eWkoe2ltcG9ydHM6W05hLFZzLHJBXX0pLGN9KSgpLExmPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmVsPWEs''@;'; put 'put ''dGhpcy5yZW5kZXJlcj1kLHRoaXMuY2xyTG9hZGluZ0NoYW5nZT1uZXcgWHIoITEpLHRoaXMuYnV0dG9uU3RhdGU9Q2QsdGhpcy5zdGF0ZT1DZC5ERUZBVUxUfWxvYWRpbmdTdGF0ZUNoYW5nZShhKXtpZihhIT09dGhpcy5zdGF0ZSl7c3dpdGNoKHRoaXMuc3RhdGU9YSxhKXtjYXNlIENkLkRF''@;'; put 'put ''RkFVTFQ6dGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIiksdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsInRyYW5zZm9ybSIpLHRoaXMuZGlzYWJsZWR8fHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmli''@;'; put 'put ''dXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGlzYWJsZWQiKTticmVhaztjYXNlIENkLkxPQURJTkc6dGhpcy5zZXRFeHBsaWNpdEJ1dHRvbldpZHRoKCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsInRyYW5zZm9ybSIsInRyYW5zbGF0ZXooMCkiKSx0''@;'; put 'put ''aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImRpc2FibGVkIiwiIik7YnJlYWs7Y2FzZSBDZC5TVUNDRVNTOnRoaXMuc2V0RXhwbGljaXRCdXR0b25XaWR0aCgpO2JyZWFrO2Nhc2UgQ2QuRVJST1I6dGhpcy5sb2FkaW5nU3RhdGVDaGFuZ2UoQ2QuREVG''@;'; put 'put ''QVVMVCl9dGhpcy5jbHJMb2FkaW5nQ2hhbmdlLmVtaXQoYSl9fXNldEV4cGxpY2l0QnV0dG9uV2lkdGgoKXtpZih0aGlzLmVsLm5hdGl2ZUVsZW1lbnQmJnRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3Qpe2NvbnN0IGE9dGhpcy5lbC5uYXRpdmVFbGVtZW50Lmdl''@;'; put 'put ''dEJvdW5kaW5nQ2xpZW50UmVjdCgpLGQ9TWF0aC5tYXgoNDIsYS53aWR0aCk7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixgJHtkfXB4YCl9fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShuYSks''@;'; put 'put ''cWUoTm8pKX0sYy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYnV0dG9uIiwiY2xyTG9hZGluZyIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmTnIoImRpc2FibGVkIixkLmRpc2FibGVkPyIiOm51bGwpfSxpbnB1dHM6e2Rpc2FibGVk''@;'; put 'put ''OiJkaXNhYmxlZCJ9LG91dHB1dHM6e2NsckxvYWRpbmdDaGFuZ2U6ImNsckxvYWRpbmdDaGFuZ2UifSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltoYShbe3Byb3ZpZGU6JFQsdXNlRXhpc3Rpbmc6Y31dKV0sYXR0cnM6alVlLG5nQ29udGVudFNlbGVjdG9yczpUbyxkZWNsczo0LHZhcnM6NSxj''@;'; put 'put ''b25zdHM6W1szLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwiY2xyLWxvYWRpbmctYnRuLWNvbnRlbnQiLDQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItaW5saW5lIiwic3Bpbm5lci1j''@;'; put 'put ''aGVjayJdLFsxLCJjbHItbG9hZGluZy1idG4tY29udGVudCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksZGUoMCwic3BhbiIsMCksZ3QoMSx6VWUsMiwxLCJuZy1jb250YWluZXIiLDEpKDIsVVVlLDIsMSwibmctY29udGFpbmVyIiwxKSgzLFpVZSwyLDEsInNwYW4iLDIp''@;'; put 'put ''LGhlKCkpLDImYSYmKEVlKCJAcGFyZW50Iix2b2lkIDApKCJuZ1N3aXRjaCIsZC5zdGF0ZSksZmUoKSxFZSgibmdTd2l0Y2hDYXNlIixkLmJ1dHRvblN0YXRlLkxPQURJTkcpLGZlKCksRWUoIm5nU3dpdGNoQ2FzZSIsZC5idXR0b25TdGF0ZS5TVUNDRVNTKSxmZSgpLEVlKCJuZ1N3aXRjaENh''@;'; put 'put ''c2UiLGQuYnV0dG9uU3RhdGUuREVGQVVMVCkpfSxkZXBlbmRlbmNpZXM6W0NmLGw0XSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOltwMigicGFyZW50IixbdnUoIjplbnRlciIsW10pXSkscDIoImRlZmF1bHRCdXR0b24iLFt2dSgiOmVudGVyIixbd3Moe29wYWNpdHk6MH0pLHow''@;'; put 'put ''KCIyMDBtcyAxMDBtcyBlYXNlLWluIix3cyh7b3BhY2l0eToxfSkpXSksdnUoIjpsZWF2ZSIsW3dzKHtvcGFjaXR5OjB9KV0pXSkscDIoInNwaW5uZXIiLFt2dSgiOmVudGVyIixbd3Moe29wYWNpdHk6MH0pLHowKCIyMDBtcyAxMDBtcyBlYXNlLWluIix3cyh7b3BhY2l0eToxfSkpXSksdnUo''@;'; put 'put ''IjpsZWF2ZSIsW3dzKHtvcGFjaXR5OjF9KSx6MCgiMTAwbXMgZWFzZS1vdXQiLHdzKHtvcGFjaXR5OjB9KSldKV0pLHAyKCJ2YWxpZGF0ZWQiLFt2dSgiOmVudGVyIixbejAoIjYwMG1zIixlemUoW3dzKHt0cmFuc2Zvcm06InNjYWxlKDAsMCkiLG9mZnNldDowfSksd3Moe29wYWNpdHk6MSxv''@;'; put 'put ''ZmZzZXQ6LjJ9KSx3cyh7dHJhbnNmb3JtOiJzY2FsZSgxLjIsMS4yKSIsb2Zmc2V0Oi40fSksd3Moe3RyYW5zZm9ybToic2NhbGUoLjksLjkpIixvZmZzZXQ6LjZ9KSx3cyh7dHJhbnNmb3JtOiJzY2FsZSgxLDEpIixvZmZzZXQ6MX0pXSkpXSksdnUoIjpsZWF2ZSIsW3dzKHtvcGFjaXR5OjF9''@;'; put 'put ''KSx6MCgiMTAwbXMgZWFzZS1vdXQiLHdzKHtvcGFjaXR5OjB9KSldKV0pXX19KSxjfSkoKSxFS2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUVpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj15aSh7aW1w''@;'; put 'put ''b3J0czpbTmFdfSksY30pKCksVEtlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtOcy5hZGRJY29ucyhKMmUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9RWkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPXlpKHtpbXBvcnRz''@;'; put 'put ''OltFS2UsTUtlXX0pLGN9KSgpLEFLZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1sibmctY29tcG9uZW50Il1dLHN0YW5kYWxvbmU6ITEsZGVjbHM6MCx2YXJz''@;'; put 'put ''OjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXt9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGFBPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1FaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9eWkoe30pLGN9''@;'; put 'put ''KSgpLGtLZT0wLHYyPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9pZD0iY2xyLWZvcm0tY29udHJvbC0iKyArK2tLZSx0aGlzLl9pZENoYW5nZT1uZXcgTWkodGhpcy5faWQpfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZH1zZXQgaWQoYSl7dGhpcy5faWQ9YSx0aGlzLl9pZENo''@;'; put 'put ''YW5nZS5uZXh0KGEpfWdldCBpZENoYW5nZSgpe3JldHVybiB0aGlzLl9pZENoYW5nZS5hc09ic2VydmFibGUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30p''@;'; put 'put ''KCksREtlPTAsRTk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2lkPSJjbHItZm9ybS1jb250YWluZXItIisgKytES2UsdGhpcy5faWRDaGFuZ2U9bmV3IE1pKHRoaXMuX2lkKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGEpe3RoaXMuX2lkPWEsdGhpcy5faWRD''@;'; put 'put ''aGFuZ2UubmV4dChhKX1nZXQgaWRDaGFuZ2UoKXtyZXR1cm4gdGhpcy5faWRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9''@;'; put 'put ''KSgpO2xldCBoWD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5jb250cm9sSWRTZXJ2aWNlPWEsdGhpcy5jb250YWluZXJJZFNlcnZpY2U9ZCx0aGlzLmNvbnRyb2xJZFN1ZmZpeD0iYWJzdHJhY3QifWdldCBpZCgpe3JldHVybiB0aGlzLmNvbnRhaW5lcklkU2VydmljZT9g''@;'; put 'put ''JHt0aGlzLmNvbnRhaW5lcklkU2VydmljZS5pZH0tJHt0aGlzLmNvbnRyb2xJZFN1ZmZpeH1gOnRoaXMuY29udHJvbElkU2VydmljZT9gJHt0aGlzLmNvbnRyb2xJZFNlcnZpY2UuaWR9LSR7dGhpcy5jb250cm9sSWRTdWZmaXh9YDpudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o''@;'; put 'put ''YSl7cmV0dXJuIG5ldyhhfHxjKShxZSh2Miw4KSxxZShFOSw4KSl9LGMuXHUwMjc1ZGlyPVlyKHt0eXBlOmMsc3RhbmRhbG9uZTohMX0pLGN9KSgpLElLZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgaFh7Y29uc3RydWN0b3IoYSxkKXtzdXBlcihhLGQpLHRoaXMuY29udHJvbElkU2VydmljZT1h''@;'; put 'put ''LHRoaXMuY29udGFpbmVySWRTZXJ2aWNlPWQsdGhpcy5jb250cm9sSWRTdWZmaXg9ImVycm9yIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUodjIsOCkscWUoRTksOCkpfSxjLlx1MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHIt''@;'; put 'put ''Y29udHJvbC1lcnJvciJdXSxob3N0VmFyczo1LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKE5yKCJpZCIsZC5pZCkseHIoImNsci1zdWJ0ZXh0IiwhMCkoImVycm9yIiwhMCkpfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltMYV0sbmdDb250ZW50U2VsZWN0b3JzOlRvLGRlY2xz''@;'; put 'put ''OjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxXcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGFIPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBoWHtjb25zdHJ1Y3RvcihhLGQpe3N1cGVyKGEsZCksdGhpcy5jb250cm9sSWRTZXJ2aWNlPWEsdGhpcy5jb250''@;'; put 'put ''YWluZXJJZFNlcnZpY2U9ZCx0aGlzLmNvbnRyb2xJZFN1ZmZpeD0iaGVscGVyIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUodjIsOCkscWUoRTksOCkpfSxjLlx1MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItY29udHJvbC1o''@;'; put 'put ''ZWxwZXIiXV0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihOcigiaWQiLGQuaWQpLHhyKCJjbHItc3VidGV4dCIsITApKX0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbTGFdLG5nQ29udGVudFNlbGVjdG9yczpUbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpm''@;'; put 'put ''dW5jdGlvbihhLGQpezEmYSYmKHNhKCksV3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxOMT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fYWRkaXRpb25hbENvbnRyb2xzPVtdLHRoaXMuX2NvbnRyb2xDaGFuZ2VzPW5ldyB1cix0aGlzLl9hZGRpdGlvbmFsQ29udHJv''@;'; put 'put ''bHNDaGFuZ2VzPW5ldyB1cix0aGlzLl9oZWxwZXJzPW5ldyB1cn1nZXQgY29udHJvbCgpe3JldHVybiB0aGlzLl9jb250cm9sfWdldCBjb250cm9sQ2hhbmdlcygpe3JldHVybiB0aGlzLl9jb250cm9sQ2hhbmdlcy5hc09ic2VydmFibGUoKX1nZXQgYWRkaXRpb25hbENvbnRyb2xzKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuX2FkZGl0aW9uYWxDb250cm9sc31nZXQgYWRkaXRpb25hbENvbnRyb2xzQ2hhbmdlcygpe3JldHVybiB0aGlzLl9hZGRpdGlvbmFsQ29udHJvbHNDaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWdldCBoYXNBZGRpdGlvbmFsQ29udHJvbHMoKXtyZXR1cm4hIXRoaXMuX2FkZGl0aW9u''@;'; put 'put ''YWxDb250cm9scz8ubGVuZ3RofWdldCBoZWxwZXJzQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2hlbHBlcnMuYXNPYnNlcnZhYmxlKCl9c2V0Q29udHJvbChhKXt0aGlzLl9jb250cm9sPWEsdGhpcy5fY29udHJvbENoYW5nZXMubmV4dChhKX1hZGRBZGRpdGlvbmFsQ29udHJvbChhKXt0aGlzLl9h''@;'; put 'put ''ZGRpdGlvbmFsQ29udHJvbHMucHVzaChhKSx0aGlzLl9hZGRpdGlvbmFsQ29udHJvbHNDaGFuZ2VzLm5leHQodGhpcy5fYWRkaXRpb25hbENvbnRyb2xzKX1zZXRIZWxwZXJzKGEpe3RoaXMuX2hlbHBlcnMubmV4dChhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBu''@;'; put 'put ''ZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7dmFyIGNoPWZ1bmN0aW9uKGMpe3JldHVybiBjLk5PTkU9Ik5PTkUiLGMuVkFMSUQ9IlZBTElEIixjLklOVkFMSUQ9IklOVkFMSUQiLGN9KGNofHx7fSk7bGV0IHVoPSgoKT0+e2Ns''@;'; put 'put ''YXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy50cmlnZ2VyU3RhdHVzQ2hhbmdlU3ViamVjdD1uZXcgdXIsdGhpcy5zdGF0dXNDaGFuZ2VzPXRoaXMuZ2V0U3RhdHVzQ2hhbmdlcyhhKS5waXBlKG5mZSgxKSl9dHJpZ2dlclN0YXR1c0NoYW5nZSgpe3RoaXMudHJpZ2dlclN0YXR1c0NoYW5nZVN1''@;'; put 'put ''YmplY3QubmV4dCgpfWdldFN0YXR1c0NoYW5nZXMoYSl7cmV0dXJuIGk5KFthLmNvbnRyb2xDaGFuZ2VzLGEuYWRkaXRpb25hbENvbnRyb2xzQ2hhbmdlcy5waXBlKFNmKFtdKSldKS5waXBlKGJkKChbZCxoXSk9PntpZihkKXtjb25zdCBmPVtkLC4uLmhdO3JldHVybiBIVChpOShmLm1hcCh2''@;'; put 'put ''PT52LnN0YXR1c0NoYW5nZXMpKSx0aGlzLnRyaWdnZXJTdGF0dXNDaGFuZ2VTdWJqZWN0LnBpcGUoWWEoKCk9PmYubWFwKHY9PnYuc3RhdHVzKSkpKX1yZXR1cm4gbDJ9KSxZYShkPT5kLmluY2x1ZGVzKGNoLklOVkFMSUQpP2NoLklOVkFMSUQ6ZC5pbmNsdWRlcyhjaC5WQUxJRCk/Y2guVkFM''@;'; put 'put ''SUQ6Y2guTk9ORSksU2YoY2guTk9ORSkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShIcihOMSkpfSxjLlx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NsYXNzIG9Ie31mdW5jdGlvbiB1M2UoYyl7cmV0''@;'; put 'put ''dXJuW2Mse3Byb3ZpZGU6b0gsdXNlRXhpc3Rpbmc6Y31dfWZ1bmN0aW9uIGQzZShjLGwsYSl7cmV0dXJuIFJpLmNyZWF0ZShkPT57bChkKTtjb25zdCBoPWMuc3Vic2NyaWJlKGQpO3JldHVybigpPT57aC51bnN1YnNjcmliZSgpLGEmJmEoZCl9fSl9bGV0IHNIPSgoKT0+e2NsYXNzIGN7Y29u''@;'; put 'put ''c3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLnJlbmRlcmVyPWEsdGhpcy5wYXJlbnQ9ZCx0aGlzLnRvZ2dsZVNlcnZpY2U9aCx0aGlzLmZvY3VzU2VydmljZT1mLHRoaXMucGxhdGZvcm1JZD12LHRoaXMuaWQ9T3UoKSx0aGlzLmZvY3VzQmFja09uVHJpZ2dlcldoZW5DbG9zZWQ9ITEsdGhpcy5f''@;'; put 'put ''dW5saXN0ZW5GdW5jcz1bXSx0aGlzLnJlc2V0Q2hpbGRyZW4oKSx0aGlzLm1vdmVUb0ZpcnN0SXRlbVdoZW5PcGVuKCksZHx8dGhpcy5oYW5kbGVSb290Rm9jdXMoKX1nZXQgdHJpZ2dlcigpe3JldHVybiB0aGlzLl90cmlnZ2VyfXNldCB0cmlnZ2VyKGEpe3RoaXMuX3RyaWdnZXI9YSx0aGlz''@;'; put 'put ''LnBhcmVudD90aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5hcnJvd3JpZ2h0IixkPT50aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSk6KHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3Rl''@;'; put 'put ''bihhLCJrZXlkb3duLmFycm93dXAiLGQ9PnRoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQoZCkpKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5hcnJvd2Rvd24iLGQ9PnRoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRo''@;'; put 'put ''RXZlbnQoZCkpKSx0aGlzLmZvY3VzU2VydmljZS5saXN0ZW5Ub0Fycm93S2V5cyhhKSl9Z2V0IGNvbnRhaW5lcigpe3JldHVybiB0aGlzLl9jb250YWluZXJ9c2V0IGNvbnRhaW5lcihhKXt0aGlzLl9jb250YWluZXI9YSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5s''@;'; put 'put ''aXN0ZW4oYSwia2V5ZG93bi50YWIiLGQ9PnRoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQoZCkpKSx0aGlzLnBhcmVudD90aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5lc2NhcGUiLGQ9Pnt0aGlzLmZvY3VzU2VydmljZS5t''@;'; put 'put ''b3ZlKG0yLkxFRlQpLGQuc3RvcFByb3BhZ2F0aW9uKCl9KSk6KHRoaXMuZm9jdXNTZXJ2aWNlLnJlZ2lzdGVyQ29udGFpbmVyKGEpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJrZXlkb3duLmVzY2FwZSIsZD0+dGhpcy50b2dnbGVTZXJ2aWNlLnRv''@;'; put 'put ''Z2dsZVdpdGhFdmVudChkKSkpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJibHVyIixkPT57dGhpcy5jaGlsZHJlbi5waXBlKFAzKDEpKS5zdWJzY3JpYmUoZj0+Zi5mb3JFYWNoKHY9PnYuYmx1cigpKSk7Y29uc3QgaD1kLnJlbGF0ZWRUYXJnZXR8''@;'; put 'put ''fGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7aCYmd2wodGhpcy5wbGF0Zm9ybUlkKSYmKGEuY29udGFpbnMoaCl8fGg9PT10aGlzLnRyaWdnZXIpfHwodGhpcy5mb2N1c0JhY2tPblRyaWdnZXJXaGVuQ2xvc2VkPSExLHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExKX0pKSl9bmdPbkRlc3Ryb3ko''@;'; put 'put ''KXt0aGlzLl91bmxpc3RlbkZ1bmNzLmZvckVhY2goYT0+YSgpKSx0aGlzLmZvY3VzU2VydmljZS5kZXRhY2hMaXN0ZW5lcnMoKX1tb3ZlVG9GaXJzdEl0ZW1XaGVuT3Blbigpe2NvbnN0IGE9dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGQ9PntkJiZ0aGlzLnRvZ2ds''@;'; put 'put ''ZVNlcnZpY2Uub3JpZ2luYWxFdmVudCYmc2V0VGltZW91dCgoKT0+e3RoaXMuZm9jdXNTZXJ2aWNlLm1vdmVUbyh0aGlzKSx0aGlzLmZvY3VzU2VydmljZS5tb3ZlKHRoaXMucGFyZW50P20yLlJJR0hUOm0yLkRPV04pfSl9KTt0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2goKCk9PmEudW5zdWJz''@;'; put 'put ''Y3JpYmUoKSl9aGFuZGxlUm9vdEZvY3VzKCl7Y29uc3QgYT10aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoZD0+e2R8fCh0aGlzLmZvY3VzU2VydmljZS5yZXNldCh0aGlzKSx0aGlzLmZvY3VzQmFja09uVHJpZ2dlcldoZW5DbG9zZWQmJnRoaXMuZm9jdXMoKSksdGhp''@;'; put 'put ''cy5mb2N1c0JhY2tPblRyaWdnZXJXaGVuQ2xvc2VkPWR9KTt0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2goKCk9PmEudW5zdWJzY3JpYmUoKSl9Zm9jdXMoKXt0aGlzLnRyaWdnZXImJndsKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMudHJpZ2dlci5mb2N1cygpfWJsdXIoKXt0aGlzLnRyaWdnZXIm''@;'; put 'put ''JndsKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMudHJpZ2dlci5ibHVyKCl9YWN0aXZhdGUoKXt3bCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRyaWdnZXIuY2xpY2soKX1yZXNldENoaWxkcmVuKCl7dGhpcy5jaGlsZHJlbj1uZXcgRlQoMSksdGhpcy5wYXJlbnQ/dGhpcy5yaWdodD10aGlzLm9w''@;'; put 'put ''ZW5BbmRHZXRDaGlsZHJlbigpLnBpcGUoWWEoYT0+YVswXSkpOih0aGlzLmRvd249dGhpcy5vcGVuQW5kR2V0Q2hpbGRyZW4oKS5waXBlKFlhKGE9PmFbMF0pKSx0aGlzLnVwPXRoaXMub3BlbkFuZEdldENoaWxkcmVuKCkucGlwZShZYShhPT5hW2EubGVuZ3RoLTFdKSkpfWFkZENoaWxkcmVu''@;'; put 'put ''KGEpe3VYLmxpbmtWZXJ0aWNhbChhKSx0aGlzLnBhcmVudCYmdVgubGlua1BhcmVudChhLHRoaXMuY2xvc2VBbmRHZXRUaGlzKCksbTIuTEVGVCksdGhpcy5jaGlsZHJlbi5uZXh0KGEpfW9wZW5BbmRHZXRDaGlsZHJlbigpe3JldHVybiBkM2UodGhpcy5jaGlsZHJlbiwoKT0+dGhpcy50b2dn''@;'; put 'put ''bGVTZXJ2aWNlLm9wZW49ITApfWNsb3NlQW5kR2V0VGhpcygpe3JldHVybiBkM2UoX28odGhpcyksKCk9PnRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoSHIoTm8pLEhyKGMsMTIpLEhyKHljKSxIcihp''@;'; put 'put ''QSksSHIodWwpKX0sYy5cdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjb25zdCBSS2U9dTNlKHNIKTtsZXQgb0E9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2NoYW5nZXM9bmV3IHVyfWdldCBjaGFuZ2VzKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''X2NoYW5nZXMuYXNPYnNlcnZhYmxlKCl9Y2xvc2VNZW51cygpe3RoaXMuX2NoYW5nZXMubmV4dCghMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2Nv''@;'; put 'put ''bnN0IE9LZT17cHJvdmlkZTpvQSx1c2VGYWN0b3J5OmZ1bmN0aW9uIExLZShjKXtyZXR1cm4gY3x8bmV3IG9BfSxkZXBzOltbbmV3IFdzLG5ldyBHZCxvQV1dfTtsZXQgcjU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMucGFyZW50PWEsdGhpcy50b2dnbGVTZXJ2''@;'; put 'put ''aWNlPWQsdGhpcy5mb2N1c0hhbmRsZXI9aCx0aGlzLmlzTWVudUNsb3NhYmxlPSEwLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh2LmNoYW5nZXMuc3Vic2NyaWJlKE09PmQub3Blbj1NKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZC5vcGVuQ2hhbmdl''@;'; put 'put ''LnN1YnNjcmliZSgoKT0+Zi5tYXJrRm9yQ2hlY2soKSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoYywxMikscWUoeWMpLHFlKHNI''@;'; put 'put ''KSxxZShIcykscWUob0EpKX0sYy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRyb3Bkb3duIl1dLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZ4cigiZHJvcGRvd24iLCEwKSgib3BlbiIsZC50b2dnbGVTZXJ2aWNlLm9wZW4pfSxpbnB1''@;'; put 'put ''dHM6e2lzTWVudUNsb3NhYmxlOlswLCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayIsImlzTWVudUNsb3NhYmxlIl19LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hhKFtPS2UsYTNlLFJLZV0pLHlmKFtuNV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6VG8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6''@;'; put 'put ''ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFdyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7dmFyIFRpPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuUklHSFRfQ0VOVEVSPTBdPSJSSUdIVF9DRU5URVIiLGNbYy5SSUdIVF9UT1A9MV09IlJJR0hUX1RPUCIsY1tjLlJJR0hUX0JPVFRPTT0y''@;'; put 'put ''XT0iUklHSFRfQk9UVE9NIixjW2MuVE9QX0NFTlRFUj0zXT0iVE9QX0NFTlRFUiIsY1tjLlRPUF9SSUdIVD00XT0iVE9QX1JJR0hUIixjW2MuVE9QX0xFRlQ9NV09IlRPUF9MRUZUIixjW2MuQk9UVE9NX0NFTlRFUj02XT0iQk9UVE9NX0NFTlRFUiIsY1tjLkJPVFRPTV9SSUdIVD03XT0iQk9U''@;'; put 'put ''VE9NX1JJR0hUIixjW2MuQk9UVE9NX0xFRlQ9OF09IkJPVFRPTV9MRUZUIixjW2MuTEVGVF9DRU5URVI9OV09IkxFRlRfQ0VOVEVSIixjW2MuTEVGVF9UT1A9MTBdPSJMRUZUX1RPUCIsY1tjLkxFRlRfQk9UVE9NPTExXT0iTEVGVF9CT1RUT00iLGN9KFRpfHx7fSk7Y2xhc3MgSEtle2NvbnN0''@;'; put 'put ''cnVjdG9yKGwpe3RoaXMuZWxlbWVudD1sLHRoaXMuYm91bmRPblNjcm9sbExpc3RlbmVyPXRoaXMuZW1pdFNjcm9sbEV2ZW50LmJpbmQodGhpcyksdGhpcy5zY3JvbGxhYmxlRWxlbWVudHM9W10sbC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGwuc3R5bGUudG9wPTAsbC5zdHlsZS5ib3R0''@;'; put 'put ''b209ImF1dG8iLGwuc3R5bGUubGVmdD0wLGwuc3R5bGUucmlnaHQ9ImF1dG8ifWFuY2hvcihsLGEsZCx7b2Zmc2V0WDpoPTAsb2Zmc2V0WTpmPTAsdXNlQW5jaG9yUGFyZW50OnY9ITF9PXt9KXt0aGlzLmFkZFNjcm9sbEV2ZW50TGlzdGVuZXJzKGwpLHYmJihsPWwucGFyZW50Tm9kZSksbC5z''@;'; put 'put ''dHlsZS5wb3NpdGlvbj0ic3RhdGljIjtjb25zdCBNPWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksRD10aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bGV0IFU9TS5sZWZ0LUQubGVmdCtoLHRlPU0udG9wLUQudG9wK2Y7c3dpdGNoKGEpe2Nhc2UgVGkuTEVGVF9UT1A6Y2Fz''@;'; put 'put ''ZSBUaS5UT1BfTEVGVDpicmVhaztjYXNlIFRpLlRPUF9DRU5URVI6VSs9TS53aWR0aC8yO2JyZWFrO2Nhc2UgVGkuVE9QX1JJR0hUOmNhc2UgVGkuUklHSFRfVE9QOlUrPU0ud2lkdGg7YnJlYWs7Y2FzZSBUaS5MRUZUX0JPVFRPTTpjYXNlIFRpLkJPVFRPTV9MRUZUOnRlKz1NLmhlaWdodDti''@;'; put 'put ''cmVhaztjYXNlIFRpLkJPVFRPTV9DRU5URVI6dGUrPU0uaGVpZ2h0LFUrPU0ud2lkdGgvMjticmVhaztjYXNlIFRpLkJPVFRPTV9SSUdIVDpjYXNlIFRpLlJJR0hUX0JPVFRPTTp0ZSs9TS5oZWlnaHQsVSs9TS53aWR0aDticmVhaztjYXNlIFRpLkxFRlRfQ0VOVEVSOnRlKz1NLmhlaWdodC8y''@;'; put 'put ''O2JyZWFrO2Nhc2UgVGkuUklHSFRfQ0VOVEVSOnRlKz1NLmhlaWdodC8yLFUrPU0ud2lkdGh9c3dpdGNoKGQpe2Nhc2UgVGkuTEVGVF9UT1A6Y2FzZSBUaS5UT1BfTEVGVDpicmVhaztjYXNlIFRpLlRPUF9DRU5URVI6VS09RC53aWR0aC8yO2JyZWFrO2Nhc2UgVGkuVE9QX1JJR0hUOmNhc2Ug''@;'; put 'put ''VGkuUklHSFRfVE9QOlUtPUQud2lkdGg7YnJlYWs7Y2FzZSBUaS5MRUZUX0JPVFRPTTpjYXNlIFRpLkJPVFRPTV9MRUZUOnRlLT1ELmhlaWdodDticmVhaztjYXNlIFRpLkJPVFRPTV9DRU5URVI6dGUtPUQuaGVpZ2h0LFUtPUQud2lkdGgvMjticmVhaztjYXNlIFRpLkJPVFRPTV9SSUdIVDpj''@;'; put 'put ''YXNlIFRpLlJJR0hUX0JPVFRPTTp0ZS09RC5oZWlnaHQsVS09RC53aWR0aDticmVhaztjYXNlIFRpLkxFRlRfQ0VOVEVSOnRlLT1ELmhlaWdodC8yO2JyZWFrO2Nhc2UgVGkuUklHSFRfQ0VOVEVSOnRlLT1ELmhlaWdodC8yLFUtPUQud2lkdGh9Y29uc3Qgb2U9Z2V0Q29tcHV0ZWRTdHlsZSh0''@;'; put 'put ''aGlzLmVsZW1lbnQpLHZlPXBhcnNlSW50KG9lLm1hcmdpbkxlZnQsMTApLHdlPXBhcnNlSW50KG9lLm1hcmdpblJpZ2h0LDEwKSxGZT1wYXJzZUludChvZS5tYXJnaW5Ub3AsMTApLFdlPXBhcnNlSW50KG9lLm1hcmdpbkJvdHRvbSwxMCk7c3dpdGNoKGEpe2Nhc2UgVGkuTEVGVF9UT1A6Y2Fz''@;'; put 'put ''ZSBUaS5UT1BfTEVGVDpjYXNlIFRpLlRPUF9SSUdIVDpjYXNlIFRpLlJJR0hUX1RPUDooZD09PVRpLkJPVFRPTV9SSUdIVHx8ZD09PVRpLlJJR0hUX0JPVFRPTSkmJih0ZS09V2UsVS09d2UpLChkPT09VGkuQk9UVE9NX0xFRlR8fGQ9PT1UaS5MRUZUX0JPVFRPTSkmJih0ZS09RmUsVSs9dmUp''@;'; put 'put ''LChkPT09VGkuVE9QX0xFRlR8fGQ9PT1UaS5MRUZUX1RPUCkmJih0ZSs9RmUsVSs9dmUpLChkPT09VGkuVE9QX1JJR0hUfHxkPT09VGkuUklHSFRfVE9QKSYmKHRlKz1GZSxVLT13ZSk7YnJlYWs7Y2FzZSBUaS5MRUZUX0JPVFRPTTpjYXNlIFRpLkJPVFRPTV9MRUZUOmNhc2UgVGkuQk9UVE9N''@;'; put 'put ''X1JJR0hUOmNhc2UgVGkuUklHSFRfQk9UVE9NOihkPT09VGkuQk9UVE9NX0xFRlR8fGQ9PT1UaS5MRUZUX0JPVFRPTSkmJih0ZS09V2UsVSs9dmUpLChkPT09VGkuQk9UVE9NX1JJR0hUfHxkPT09VGkuUklHSFRfQk9UVE9NKSYmKHRlLT1XZSxVLT13ZSksKGQ9PT1UaS5UT1BfTEVGVHx8ZD09''@;'; put 'put ''PVRpLkxFRlRfVE9QKSYmKHRlKz1GZSxVKz12ZSksKGQ9PT1UaS5UT1BfUklHSFR8fGQ9PT1UaS5SSUdIVF9UT1ApJiYodGUrPUZlLFUtPXdlKTticmVhaztjYXNlIFRpLlRPUF9DRU5URVI6dGUtPVdlLFUrPXZlLFUtPXdlO2JyZWFrO2Nhc2UgVGkuQk9UVE9NX0NFTlRFUjp0ZSs9RmUsVSs9''@;'; put 'put ''dmUsVS09d2U7YnJlYWs7Y2FzZSBUaS5MRUZUX0NFTlRFUjp0ZSs9RmUsdGUtPVdlLFUtPXdlO2JyZWFrO2Nhc2UgVGkuUklHSFRfQ0VOVEVSOnRlKz1GZSx0ZS09V2UsVSs9dmV9cmV0dXJuIHRoaXMuZWxlbWVudC5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZVgoJHtNYXRoLnJvdW5kKFUp''@;'; put 'put ''fXB4KSB0cmFuc2xhdGVZKCR7TWF0aC5yb3VuZCh0ZSl9cHgpYCx0aGlzLl9zY3JvbGwuYXNPYnNlcnZhYmxlKCl9cmVsZWFzZSgpe3RoaXMuZWxlbWVudC5zdHlsZS50cmFuc2Zvcm09IiIsdGhpcy5yZW1vdmVTY3JvbGxFdmVudExpc3RlbmVycygpfWlzUG9zaXRpb25lZChsKXtjb25zdCBh''@;'; put 'put ''PWdldENvbXB1dGVkU3R5bGUobCkucG9zaXRpb247cmV0dXJuInJlbGF0aXZlIj09PWF8fCJhYnNvbHV0ZSI9PT1hfHwiZml4ZWQiPT09YX1lbWl0U2Nyb2xsRXZlbnQoKXt0aGlzLl9zY3JvbGwubmV4dCgpfWFkZFNjcm9sbEV2ZW50TGlzdGVuZXJzKGwpe3RoaXMuX3Njcm9sbD1uZXcgdXI7''@;'; put 'put ''Y29uc3QgYT1sO2xldCBkPWw7Zm9yKDtkJiZkIT09ZG9jdW1lbnQmJih0aGlzLnNjcm9sbHMoZCkmJihkLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5ib3VuZE9uU2Nyb2xsTGlzdGVuZXIpLHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnRzLnB1c2goZCkpLGQ9PT1hfHwhdGhpcy5pc1Bv''@;'; put 'put ''c2l0aW9uZWQoZCkpOylkPWQucGFyZW50Tm9kZX1yZW1vdmVTY3JvbGxFdmVudExpc3RlbmVycygpe2Zvcihjb25zdCBsIG9mIHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnRzKWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLmJvdW5kT25TY3JvbGxMaXN0ZW5lcik7dGhpcy5zY3Jv''@;'; put 'put ''bGxhYmxlRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5fc2Nyb2xsJiYodGhpcy5fc2Nyb2xsLmNvbXBsZXRlKCksZGVsZXRlIHRoaXMuX3Njcm9sbCl9c2Nyb2xscyhsKXtjb25zdCBhPWdldENvbXB1dGVkU3R5bGUobCk7cmV0dXJuInNjcm9sbCI9PT1hLm92ZXJmbG93WHx8ImF1dG8iPT09YS5v''@;'; put 'put ''dmVyZmxvd1h8fCJzY3JvbGwiPT09YS5vdmVyZmxvd1l8fCJhdXRvIj09PWEub3ZlcmZsb3dZfX1jb25zdCBnM2U9ImlzLW9mZi1zY3JlZW4iO2xldCBmWD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5wYXJlbnRIb3N0PWQsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrPSEx''@;'; put 'put ''LHRoaXMucG9wb3Zlck9wdGlvbnM9e30sdGhpcy51cGRhdGVBbmNob3I9ITEsdGhpcy5kb2N1bWVudEVTQ0xpc3RlbmVyPW51bGwsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrQ2FsbGJhY2s9aD0+e3RoaXMuYW5jaG9yRWxlbS5jb250YWlucyhoLnRhcmdldCl8fCh0aGlzLnRvZ2dsZVNlcnZp''@;'; put 'put ''Y2Uub3Blbj0hMSl9LHRoaXMuZWw9YS5nZXQobmEpLHRoaXMudG9nZ2xlU2VydmljZT1hLmdldCh5YyksdGhpcy5yZW5kZXJlcj1hLmdldChObyksdGhpcy5uZ1pvbmU9YS5nZXQoWGEpLHRoaXMucmVmPWEuZ2V0KEhzKSx0aGlzLmFuY2hvckVsZW09ZC5uYXRpdmVFbGVtZW50LHRoaXMucG9w''@;'; put 'put ''b3Zlckluc3RhbmNlPW5ldyBIS2UodGhpcy5lbC5uYXRpdmVFbGVtZW50KSx0aGlzLnN1YnNjcmlwdGlvbj10aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5waXBlKFNmKHRoaXMudG9nZ2xlU2VydmljZS5vcGVuKSkuc3Vic2NyaWJlKGg9PntoPyh0aGlzLmFuY2hvcigpLHRoaXMuYXR0''@;'; put 'put ''YWNoRVNDTGlzdGVuZXIoKSx0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxnM2UpKToodGhpcy5yZWxlYXNlKCksdGhpcy5kZXRhY2hFU0NMaXN0ZW5lcigpLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LGczZSkpfSks''@;'; put 'put ''dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJih0aGlzLmFuY2hvcigpLHRoaXMuYXR0YWNoRVNDTGlzdGVuZXIoKSl9bmdBZnRlclZpZXdDaGVja2VkKCl7dGhpcy51cGRhdGVBbmNob3ImJih0aGlzLnVwZGF0ZUFuY2hvcj0hMSx0aGlzLnBvcG92ZXJJbnN0YW5jZS5hbmNob3IodGhpcy5hbmNo''@;'; put 'put ''b3JFbGVtLHRoaXMuYW5jaG9yUG9pbnQsdGhpcy5wb3BvdmVyUG9pbnQsdGhpcy5wb3BvdmVyT3B0aW9ucykuc3Vic2NyaWJlKCgpPT57dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITF9KSx0aGlzLmF0dGFjaE91dHNpZGVDbGlja0xpc3RlbmVyKCkpfW5nT25EZXN0cm95KCl7dGhpcy5yZWxl''@;'; put 'put ''YXNlKCksdGhpcy5kZXRhY2hFU0NMaXN0ZW5lcigpLHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9YW5jaG9yKCl7dGhpcy51cGRhdGVBbmNob3I9ITB9cmVsZWFzZSgpe3RoaXMuZGV0YWNoT3V0c2lkZUNsaWNrTGlzdGVuZXIoKSx0aGlzLnBvcG92ZXJJbnN0YW5jZS5yZWxlYXNl''@;'; put 'put ''KCl9YXR0YWNoRVNDTGlzdGVuZXIoKXt0aGlzLnBvcG92ZXJPcHRpb25zLmlnbm9yZUdsb2JhbEVTQ0xpc3RlbmVyfHx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lcj10aGlzLnJlbmRlcmVyLmxpc3RlbigiZG9jdW1lbnQiLCJrZXlk''@;'; put 'put ''b3duIixhPT57YSYmYS5rZXkmJmtmKGEua2V5KT09PW1hLkVzY2FwZSYmdGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEsdGhpcy5yZWYubWFya0ZvckNoZWNrKCl9KX0pfSl9ZGV0YWNoRVNDTGlzdGVuZXIoKXt0aGlzLmRvY3VtZW50RVNDTGlzdGVuZXIm''@;'; put 'put ''Jih0aGlzLmRvY3VtZW50RVNDTGlzdGVuZXIoKSx0aGlzLmRvY3VtZW50RVNDTGlzdGVuZXI9bnVsbCl9YXR0YWNoT3V0c2lkZUNsaWNrTGlzdGVuZXIoKXt0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2smJnRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiZkb2N1bWVudCYmZG9jdW1lbnQuYWRkRXZl''@;'; put 'put ''bnRMaXN0ZW5lciYmZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuY2xvc2VPbk91dHNpZGVDbGlja0NhbGxiYWNrLCEwKX1kZXRhY2hPdXRzaWRlQ2xpY2tMaXN0ZW5lcigpe3RoaXMuY2xvc2VPbk91dHNpZGVDbGljayYmZG9jdW1lbnQmJmRvY3VtZW50LnJlbW92ZUV2''@;'; put 'put ''ZW50TGlzdGVuZXImJmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2tDYWxsYmFjaywhMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKFlvKSxxZShuYSw0KSl9LGMuXHUwMjc1ZGly''@;'; put 'put ''PVlyKHt0eXBlOmMsc3RhbmRhbG9uZTohMX0pLGN9KSgpLFQ5PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBmWHtjb25zdHJ1Y3RvcihhLGQsaCxmKXtpZighZCl0aHJvdyBuZXcgRXJyb3IoImNsci1kcm9wZG93bi1tZW51IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLWRyb3Bk''@;'; put 'put ''b3duIik7c3VwZXIoYSxkKSxoPyh0aGlzLmFuY2hvclBvaW50PVRpLlJJR0hUX1RPUCx0aGlzLnBvcG92ZXJQb2ludD1UaS5MRUZUX1RPUCk6KHRoaXMuYW5jaG9yUG9pbnQ9VGkuQk9UVE9NX0xFRlQsdGhpcy5wb3BvdmVyUG9pbnQ9VGkuTEVGVF9UT1ApLHRoaXMucG9wb3Zlck9wdGlvbnMu''@;'; put 'put ''YWxsb3dNdWx0aXBsZU9wZW49ITAsdGhpcy5wb3BvdmVyT3B0aW9ucy5pZ25vcmVHbG9iYWxFU0NMaXN0ZW5lcj0hMCx0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2s9ITAsdGhpcy5mb2N1c0hhbmRsZXI9Zn1zZXQgcG9zaXRpb24oYSl7c3dpdGNoKGEpe2Nhc2UidG9wLXJpZ2h0Ijp0aGlzLmFu''@;'; put 'put ''Y2hvclBvaW50PVRpLlRPUF9SSUdIVCx0aGlzLnBvcG92ZXJQb2ludD1UaS5SSUdIVF9CT1RUT007YnJlYWs7Y2FzZSJ0b3AtbGVmdCI6dGhpcy5hbmNob3JQb2ludD1UaS5UT1BfTEVGVCx0aGlzLnBvcG92ZXJQb2ludD1UaS5MRUZUX0JPVFRPTTticmVhaztjYXNlImJvdHRvbS1yaWdodCI6''@;'; put 'put ''dGhpcy5hbmNob3JQb2ludD1UaS5CT1RUT01fUklHSFQsdGhpcy5wb3BvdmVyUG9pbnQ9VGkuUklHSFRfVE9QO2JyZWFrO2Nhc2UiYm90dG9tLWxlZnQiOmRlZmF1bHQ6dGhpcy5hbmNob3JQb2ludD1UaS5CT1RUT01fTEVGVCx0aGlzLnBvcG92ZXJQb2ludD1UaS5MRUZUX1RPUDticmVhaztj''@;'; put 'put ''YXNlInJpZ2h0LXRvcCI6dGhpcy5hbmNob3JQb2ludD1UaS5SSUdIVF9UT1AsdGhpcy5wb3BvdmVyUG9pbnQ9VGkuTEVGVF9UT1A7YnJlYWs7Y2FzZSJyaWdodC1ib3R0b20iOnRoaXMuYW5jaG9yUG9pbnQ9VGkuUklHSFRfQk9UVE9NLHRoaXMucG9wb3ZlclBvaW50PVRpLkxFRlRfQk9UVE9N''@;'; put 'put ''O2JyZWFrO2Nhc2UibGVmdC10b3AiOnRoaXMuYW5jaG9yUG9pbnQ9VGkuTEVGVF9UT1AsdGhpcy5wb3BvdmVyUG9pbnQ9VGkuUklHSFRfVE9QO2JyZWFrO2Nhc2UibGVmdC1ib3R0b20iOnRoaXMuYW5jaG9yUG9pbnQ9VGkuTEVGVF9CT1RUT00sdGhpcy5wb3BvdmVyUG9pbnQ9VGkuUklHSFRf''@;'; put 'put ''Qk9UVE9NfX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLmZvY3VzSGFuZGxlci5jb250YWluZXI9dGhpcy5lbC5uYXRpdmVFbGVtZW50LHRoaXMuaXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9PnRoaXMuZm9jdXNIYW5kbGVyLmFkZENoaWxkcmVuKHRoaXMuaXRlbXMudG9BcnJheSgpKSks''@;'; put 'put ''dGhpcy5pdGVtcy5ub3RpZnlPbkNoYW5nZXMoKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5mb2N1c0hhbmRsZXIucmVzZXRDaGlsZHJlbigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShZbykscWUobkgsOCkscWUo''@;'; put 'put ''YywxMikscWUoc0gpKX0sYy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRyb3Bkb3duLW1lbnUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmcG8oaCxvSCw0KSwyJmEpe2xldCBmO2dpKGY9bWkoKSkmJihkLml0ZW1zPWYpfX0saG9zdFZh''@;'; put 'put ''cnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihOcigicm9sZSIsIm1lbnUiKSx4cigiZHJvcGRvd24tbWVudSIsITApKX0saW5wdXRzOntwb3NpdGlvbjpbMCwiY2xyUG9zaXRpb24iLCJwb3NpdGlvbiJdfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltMYV0sbmdDb250ZW50''@;'; put 'put ''U2VsZWN0b3JzOlRvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxXcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLEE5PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy50b2dnbGVTZXJ2aWNlPWQsdGhpcy5pc1Jvb3RM''@;'; put 'put ''ZXZlbFRvZ2dsZT0hMCxhLnBhcmVudCYmKHRoaXMuaXNSb290TGV2ZWxUb2dnbGU9ITEpLGYudHJpZ2dlcj1oLm5hdGl2ZUVsZW1lbnR9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbn1vbkRyb3Bkb3duVHJpZ2dlckNsaWNrKGEpe3RoaXMudG9nZ2xlU2Vydmlj''@;'; put 'put ''ZS50b2dnbGVXaXRoRXZlbnQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKHI1KSxxZSh5YykscWUobmEpLHFlKHNIKSl9LGMuXHUwMjc1ZGlyPVlyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckRyb3Bkb3duVHJpZ2dlciIsIiJdLFsi''@;'; put 'put ''IiwiY2xyRHJvcGRvd25Ub2dnbGUiLCIiXV0saG9zdFZhcnM6MTAsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZPdCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uRHJvcGRvd25UcmlnZ2VyQ2xpY2soZil9KSwyJmEmJihOcigiYXJpYS1oYXNwb3B1cCIsIm1lbnUiKSgi''@;'; put 'put ''YXJpYS1leHBhbmRlZCIsZC5hY3RpdmUpLHhyKCJkcm9wZG93bi10b2dnbGUiLGQuaXNSb290TGV2ZWxUb2dnbGUpKCJkcm9wZG93bi1pdGVtIiwhZC5pc1Jvb3RMZXZlbFRvZ2dsZSkoImV4cGFuZGFibGUiLCFkLmlzUm9vdExldmVsVG9nZ2xlKSgiYWN0aXZlIixkLmFjdGl2ZSkpfSxzdGFu''@;'; put 'put ''ZGFsb25lOiExfSksY30pKCk7Y29uc3QgTktlPVt7cHJvdmlkZTpvSCx1c2VDbGFzczooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmVsPWEsdGhpcy5yZW5kZXJlcj1kLHRoaXMucGxhdGZvcm1JZD1oLHRoaXMuaWQ9T3UoKSx0aGlzLmRpc2FibGVkPSExLGQuc2V0QXR0''@;'; put 'put ''cmlidXRlKGEubmF0aXZlRWxlbWVudCwiaWQiLHRoaXMuaWQpLGQuc2V0QXR0cmlidXRlKGEubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLCItMSIpfWZvY3VzKCl7d2wodGhpcy5wbGF0Zm9ybUlkKSYmKHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwi''@;'; put 'put ''dGFiaW5kZXgiLCIwIiksdGhpcy5lbC5uYXRpdmVFbGVtZW50LmZvY3VzKCksdGhpcy5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjoic21vb3RoIixibG9jazoibmVhcmVzdCIsaW5saW5lOiJuZWFyZXN0In0pKX1ibHVyKCl7d2wodGhpcy5wbGF0Zm9ybUlkKSYm''@;'; put 'put ''KHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLCItMSIpLHRoaXMuZWwubmF0aXZlRWxlbWVudC5ibHVyKCkpfWFjdGl2YXRlKCl7d2wodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsaWNrKCl9fXJldHVy''@;'; put 'put ''biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEhyKG5hKSxIcihObyksSHIodWwpKX0sYy5cdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKX1dO2xldCBmdz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlz''@;'; put 'put ''LmRyb3Bkb3duPWEsdGhpcy5fZHJvcGRvd25TZXJ2aWNlPWQsdGhpcy5mb2N1c2FibGVJdGVtPWh9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuZm9jdXNhYmxlSXRlbS5kaXNhYmxlZH1zZXQgZGlzYWJsZWQoYSl7dGhpcy5mb2N1c2FibGVJdGVtLmRpc2FibGVkPSEhYXx8IiI9PT1hfWdl''@;'; put 'put ''dCBkcm9wZG93bkl0ZW1JZCgpe3JldHVybiB0aGlzLmZvY3VzYWJsZUl0ZW0uaWR9c2V0IGRyb3Bkb3duSXRlbUlkKGEpe3RoaXMuZm9jdXNhYmxlSXRlbS5pZD1hfW9uRHJvcGRvd25JdGVtQ2xpY2soKXtpZih0aGlzLmRyb3Bkb3duLmlzTWVudUNsb3NhYmxlJiYhdGhpcy5kaXNhYmxlZCYm''@;'; put 'put ''dGhpcy5kcm9wZG93bi50b2dnbGVTZXJ2aWNlLm9wZW4pe2NvbnN0IGE9dGhpcy5maW5kUm9vdERyb3Bkb3duKCk7YS5mb2N1c0hhbmRsZXIuZm9jdXMoKSxhLmZvY3VzSGFuZGxlci5mb2N1c0JhY2tPblRyaWdnZXJXaGVuQ2xvc2VkPSExfXNldFRpbWVvdXQoKCk9Pnt0aGlzLmRyb3Bkb3du''@;'; put 'put ''LmlzTWVudUNsb3NhYmxlJiYhdGhpcy5kaXNhYmxlZCYmdGhpcy5fZHJvcGRvd25TZXJ2aWNlLmNsb3NlTWVudXMoKX0pfW9uU3BhY2VLZXlkb3duKGEpe3RoaXMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uSWZEaXNhYmxlZChhKX1vbkVudGVyS2V5ZG93bihhKXt0aGlzLnN0b3BJbW1lZGlh''@;'; put 'put ''dGVQcm9wYWdhdGlvbklmRGlzYWJsZWQoYSl9c3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uSWZEaXNhYmxlZChhKXt0aGlzLmRpc2FibGVkJiYoYS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkpfWZpbmRSb290RHJvcGRvd24oKXtsZXQgYT10aGlzLmRyb3Bk''@;'; put 'put ''b3duO2Zvcig7YS5wYXJlbnQ7KWE9YS5wYXJlbnQ7cmV0dXJuIGF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKHI1KSxxZShvQSkscWUob0gpKX0sYy5cdTAyNzVkaXI9WXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRHJvcGRvd25JdGVt''@;'; put 'put ''IiwiIl1dLGhvc3RWYXJzOjcsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Ecm9wZG93bkl0ZW1DbGljaygpfSkoImtleWRvd24uc3BhY2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uU3BhY2VLZXlkb3duKGYpfSkoImtl''@;'; put 'put ''eWRvd24uZW50ZXIiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uRW50ZXJLZXlkb3duKGYpfSksMiZhJiYoTnIoInJvbGUiLCJtZW51aXRlbSIpKCJhcmlhLWRpc2FibGVkIixkLmRpc2FibGVkKSgiaWQiLGQuZHJvcGRvd25JdGVtSWQpLHhyKCJkaXNhYmxlZCIsZC5kaXNhYmxlZCkoImRyb3Bk''@;'; put 'put ''b3duLWl0ZW0iLCEwKSl9LGlucHV0czp7ZGlzYWJsZWQ6WzAsImNsckRpc2FibGVkIiwiZGlzYWJsZWQiXSxkcm9wZG93bkl0ZW1JZDpbMCwiaWQiLCJkcm9wZG93bkl0ZW1JZCJdfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltoYShbTktlXSldfSksY30pKCkscFg9KCgpPT57Y2xhc3MgY3t9''@;'; put 'put ''cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUVpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj15aSh7aW1wb3J0czpbTmEsUmYsVnNdfSksY30pKCksZ1g9KCgpPT57Y2xhc3MgY3tzZXQgdHJpZ2dlckVsKGEpe3RoaXMuX3RyaWdnZXJF''@;'; put 'put ''bD1hfWZvY3VzVHJpZ2dlcigpe3RoaXMuX3RyaWdnZXJFbCYmdGhpcy5fdHJpZ2dlckVsLmZvY3VzKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLG1Y''@;'; put 'put ''PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9pZD1uZXcgdXJ9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkLmFzT2JzZXJ2YWJsZSgpfXNldElkKGEpe3RoaXMuX2lkLm5leHQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1''@;'; put 'put ''MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGxIPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMudG9nZ2xlU2VydmljZT1hLHRoaXMuZWw9ZCx0aGlzLnNpZ25wb3N0SWRTZXJ2aWNlPWgsdGhpcy5zaWducG9zdEZvY3Vz''@;'; put 'put ''TWFuYWdlcj1mLHRoaXMucGxhdGZvcm1JZD1NLHRoaXMuYXJpYUV4cGFuZGVkPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmRvY3VtZW50PXZ9bmdPbkluaXQoKXt0aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2VyLnRyaWdnZXJFbD10aGlzLmVsLm5hdGl2ZUVsZW1lbnQsdGhpcy5zdWJz''@;'; put 'put ''Y3JpcHRpb25zLnB1c2godGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLmFyaWFFeHBhbmRlZD1hO2NvbnN0IGQ9dGhpcy5pc09wZW47dGhpcy5pc09wZW49YSwhdGhpcy5pc09wZW4mJmQmJnRoaXMuZm9jdXNPbkNsb3NlKCl9KSx0aGlzLnNpZ25wb3N0''@;'; put 'put ''SWRTZXJ2aWNlLmlkLnN1YnNjcmliZShhPT50aGlzLmFyaWFDb250cm9sPWEpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9b25TaWducG9zdFRyaWdnZXJDbGljayhhKXt0aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2''@;'; put 'put ''ZW50KGEpfWZvY3VzT25DbG9zZSgpe3dsKHRoaXMucGxhdGZvcm1JZCkmJiF0aGlzLmlzT3BlbiYmdGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50PT09dGhpcy5kb2N1bWVudC5ib2R5JiZ0aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2VyLmZvY3VzVHJpZ2dlcigpfX1yZXR1cm4gYy5cdTAyNzVm''@;'; put 'put ''YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZSh5YykscWUobmEpLHFlKG1YKSxxZShnWCkscWUoR3MpLHFlKHVsKSl9LGMuXHUwMjc1ZGlyPVlyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclNpZ25wb3N0VHJpZ2dlciIsIiJdXSxob3N0QXR0cnM6WzEsInNpZ25wb3N0LXRy''@;'; put 'put ''aWdnZXIiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmT3QoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vblNpZ25wb3N0VHJpZ2dlckNsaWNrKGYpfSksMiZhJiYoTnIoImFyaWEtZXhwYW5kZWQiLGQuYXJpYUV4cGFuZGVkKSgiYXJpYS1jb250cm9s''@;'; put 'put ''cyIsZC5hcmlhQ29udHJvbCkseHIoImFjdGl2ZSIsZC5pc09wZW4pKX0sc3RhbmRhbG9uZTohMX0pLGN9KSgpLGNIPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy51c2VDdXN0b21UcmlnZ2VyPSExfXNldCBjdXN0b21UcmlnZ2VyKGEpe3Ro''@;'; put 'put ''aXMudXNlQ3VzdG9tVHJpZ2dlcj0hIWF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKHBzKSl9LGMuXHUwMjc1Y21wPWFyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1zaWducG9zdCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7''@;'; put 'put ''aWYoMSZhJiZwbyhoLGxILDUpLDImYSl7bGV0IGY7Z2koZj1taSgpKSYmKGQuY3VzdG9tVHJpZ2dlcj1mLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZ4cigic2lnbnBvc3QiLCEwKX0saW5wdXRzOntzaWducG9zdFRyaWdnZXJBcmlhTGFiZWw6''@;'; put 'put ''WzAsImNsclNpZ25wb3N0VHJpZ2dlckFyaWFMYWJlbCIsInNpZ25wb3N0VHJpZ2dlckFyaWFMYWJlbCJdfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltoYShbZ1gsbVhdKSx5ZihbbjVdKV0sbmdDb250ZW50U2VsZWN0b3JzOlRvLGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWzQsIm5nSWYiXSxb''@;'; put 'put ''InR5cGUiLCJidXR0b24iLCJjbHJTaWducG9zdFRyaWdnZXIiLCIiLDEsInNpZ25wb3N0LWFjdGlvbiIsImJ0biIsImJ0bi1zbSIsImJ0bi1pY29uIiwiYnRuLWxpbmsiXSxbInNoYXBlIiwiaW5mby1jaXJjbGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLGd0KDAsV1Vl''@;'; put 'put ''LDMsMiwibmctY29udGFpbmVyIiwwKSxXcigxKSksMiZhJiZFZSgibmdJZiIsIWQudXNlQ3VzdG9tVHJpZ2dlcil9LGRlcGVuZGVuY2llczpbQ2EsZnMsbEhdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NvbnN0IFZLZT17InRvcC1sZWZ0Ijp7YW5jaG9yUG9pbnQ6VGkuVE9QX0NFTlRFUixw''@;'; put 'put ''b3BvdmVyUG9pbnQ6VGkuQk9UVE9NX1JJR0hULG9mZnNldFk6LTE2LG9mZnNldFg6MH0sInRvcC1taWRkbGUiOnthbmNob3JQb2ludDpUaS5UT1BfQ0VOVEVSLHBvcG92ZXJQb2ludDpUaS5CT1RUT01fQ0VOVEVSLG9mZnNldFk6LTE2LG9mZnNldFg6MH0sInRvcC1yaWdodCI6e2FuY2hvclBv''@;'; put 'put ''aW50OlRpLlRPUF9DRU5URVIscG9wb3ZlclBvaW50OlRpLkJPVFRPTV9MRUZULG9mZnNldFk6LTE2LG9mZnNldFg6MH0sInJpZ2h0LXRvcCI6e2FuY2hvclBvaW50OlRpLlJJR0hUX0NFTlRFUixwb3BvdmVyUG9pbnQ6VGkuTEVGVF9CT1RUT00sb2Zmc2V0WTowLG9mZnNldFg6MTZ9LCJyaWdo''@;'; put 'put ''dC1taWRkbGUiOnthbmNob3JQb2ludDpUaS5SSUdIVF9DRU5URVIscG9wb3ZlclBvaW50OlRpLkxFRlRfQ0VOVEVSLG9mZnNldFk6MCxvZmZzZXRYOjE2fSwicmlnaHQtYm90dG9tIjp7YW5jaG9yUG9pbnQ6VGkuUklHSFRfQ0VOVEVSLHBvcG92ZXJQb2ludDpUaS5MRUZUX1RPUCxvZmZzZXRZ''@;'; put 'put ''OjAsb2Zmc2V0WDoxNn0sImJvdHRvbS1yaWdodCI6e2FuY2hvclBvaW50OlRpLkJPVFRPTV9DRU5URVIscG9wb3ZlclBvaW50OlRpLlRPUF9MRUZULG9mZnNldFk6MTYsb2Zmc2V0WDowfSwiYm90dG9tLW1pZGRsZSI6e2FuY2hvclBvaW50OlRpLkJPVFRPTV9DRU5URVIscG9wb3ZlclBvaW50''@;'; put 'put ''OlRpLlRPUF9DRU5URVIsb2Zmc2V0WToxNixvZmZzZXRYOjB9LCJib3R0b20tbGVmdCI6e2FuY2hvclBvaW50OlRpLkJPVFRPTV9DRU5URVIscG9wb3ZlclBvaW50OlRpLlRPUF9SSUdIVCxvZmZzZXRZOjE2LG9mZnNldFg6MH0sImxlZnQtYm90dG9tIjp7YW5jaG9yUG9pbnQ6VGkuTEVGVF9D''@;'; put 'put ''RU5URVIscG9wb3ZlclBvaW50OlRpLlJJR0hUX1RPUCxvZmZzZXRZOjAsb2Zmc2V0WDotMTZ9LCJsZWZ0LW1pZGRsZSI6e2FuY2hvclBvaW50OlRpLkxFRlRfQ0VOVEVSLHBvcG92ZXJQb2ludDpUaS5SSUdIVF9DRU5URVIsb2Zmc2V0WTowLG9mZnNldFg6LTE2fSwibGVmdC10b3AiOnthbmNo''@;'; put 'put ''b3JQb2ludDpUaS5MRUZUX0NFTlRFUixwb3BvdmVyUG9pbnQ6VGkuUklHSFRfQk9UVE9NLG9mZnNldFk6MCxvZmZzZXRYOi0xNn0sZGVmYXVsdDp7YW5jaG9yUG9pbnQ6VGkuUklHSFRfQ0VOVEVSLHBvcG92ZXJQb2ludDpUaS5MRUZUX0NFTlRFUixvZmZzZXRZOjAsb2Zmc2V0WDoxNn19LEJL''@;'; put 'put ''ZT1bInRvcC1sZWZ0IiwidG9wLW1pZGRsZSIsInRvcC1yaWdodCIsInJpZ2h0LXRvcCIsInJpZ2h0LW1pZGRsZSIsInJpZ2h0LWJvdHRvbSIsImJvdHRvbS1yaWdodCIsImJvdHRvbS1taWRkbGUiLCJib3R0b20tbGVmdCIsImxlZnQtYm90dG9tIiwibGVmdC1taWRkbGUiLCJsZWZ0LXRvcCJd''@;'; put 'put ''O2xldCBtM2U9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGZYe2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQpe2lmKHN1cGVyKGEsZCksdGhpcy5jb21tb25TdHJpbmdzPWgsdGhpcy5zaWducG9zdEZvY3VzTWFuYWdlcj12LHRoaXMucGxhdGZvcm1JZD1NLHRoaXMuc2lnbnBvc3RDb250ZW50SWQ9''@;'; put 'put ''T3UoKSwhZCl0aHJvdyBuZXcgRXJyb3IoImNsci1zaWducG9zdC1jb250ZW50IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLXNpZ25wb3N0Iik7dGhpcy5wb3NpdGlvbj0icmlnaHQtbWlkZGxlIix0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2s9ITAsZi5zZXRJZCh0aGlzLnNp''@;'; put 'put ''Z25wb3N0Q29udGVudElkKSx0aGlzLmRvY3VtZW50PUR9Z2V0IHBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9ufXNldCBwb3NpdGlvbihhKXt0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCx0aGlzLnBvc2l0aW9uKSx0aGlzLl9wb3NpdGlvbj1h''@;'; put 'put ''JiZCS2UuaW5kZXhPZihhKT4tMT9hOiJyaWdodC1taWRkbGUiLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LHRoaXMucG9zaXRpb24pO2NvbnN0IGQ9VktlW3RoaXMucG9zaXRpb25dO3RoaXMuYW5jaG9yUG9pbnQ9ZC5hbmNob3JQb2ludCx0aGlzLnBvcG92''@;'; put 'put ''ZXJQb2ludD1kLnBvcG92ZXJQb2ludCx0aGlzLnBvcG92ZXJPcHRpb25zLm9mZnNldFk9ZC5vZmZzZXRZLHRoaXMucG9wb3Zlck9wdGlvbnMub2Zmc2V0WD1kLm9mZnNldFh9Y2xvc2UoKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95''@;'; put 'put ''KCksd2wodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkmJnRoaXMuc2lnbnBvc3RGb2N1c01hbmFnZXIuZm9jdXNUcmlnZ2VyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4g''@;'; put 'put ''bmV3KGF8fGMpKHFlKFlvKSxxZShuSCw4KSxxZShwcykscWUobVgpLHFlKGdYKSxxZSh1bCkscWUoR3MpKX0sYy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXNpZ25wb3N0LWNvbnRlbnQiXV0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEm''@;'; put 'put ''JihpNCgiaWQiLGQuc2lnbnBvc3RDb250ZW50SWQpLHhyKCJzaWducG9zdC1jb250ZW50IiwhMCkpfSxpbnB1dHM6e3NpZ25wb3N0Q2xvc2VBcmlhTGFiZWw6WzAsImNsclNpZ25wb3N0Q2xvc2VBcmlhTGFiZWwiLCJzaWducG9zdENsb3NlQXJpYUxhYmVsIl0scG9zaXRpb246WzAsImNsclBv''@;'; put 'put ''c2l0aW9uIiwicG9zaXRpb24iXX0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbTGFdLG5nQ29udGVudFNlbGVjdG9yczpHVWUsZGVjbHM6OCx2YXJzOjMsY29uc3RzOltbMSwic2lnbnBvc3Qtd3JhcCJdLFsxLCJwb3BvdmVyLXBvaW50ZXIiXSxbMSwic2lnbnBvc3QtY29udGVudC1oZWFkZXIi''@;'; put 'put ''XSxbInR5cGUiLCJidXR0b24iLDEsInNpZ25wb3N0LWFjdGlvbiIsImNsb3NlIiwzLCJjbGljayJdLFsic2hhcGUiLCJ3aW5kb3ctY2xvc2UiXSxbInRhYmluZGV4IiwiMCIsMSwic2lnbnBvc3QtY29udGVudC1ib2R5Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoWVVlKSxk''@;'; put 'put ''ZSgwLCJkaXYiLDApLEd0KDEsImRpdiIsMSksZGUoMiwiZGl2IiwyKSxXcigzKSxkZSg0LCJidXR0b24iLDMpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jbG9zZSgpfSksR3QoNSwiY2RzLWljb24iLDQpLGhlKCkoKSxkZSg2LCJkaXYiLDUpLFdyKDcsMSksaGUoKSgpKSwyJmEm''@;'; put 'put ''JihmZSg0KSxOcigiYXJpYS1sYWJlbCIsZC5zaWducG9zdENsb3NlQXJpYUxhYmVsfHxkLmNvbW1vblN0cmluZ3Mua2V5cy5zaWducG9zdENsb3NlKSgiYXJpYS1jb250cm9scyIsZC5zaWducG9zdENvbnRlbnRJZCksZmUoKSxOcigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3Nl''@;'; put 'put ''KSl9LGRlcGVuZGVuY2llczpbZnNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGpLZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7TnMuYWRkSWNvbnMoT1QsQ2plKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUVpKHt0''@;'; put 'put ''eXBlOmN9KSxjLlx1MDI3NWluaj15aSh7aW1wb3J0czpbTmEsVnMsaUgsUmZdfSksY30pKCksdlg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2lkPW5ldyB1cn1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWQuYXNPYnNlcnZhYmxlKCl9dXBkYXRlSWQoYSl7dGhpcy5faWQubmV4''@;'; put 'put ''dChhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCkseVg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnRvZ2dsZVNlcnZpY2U9YX1vbk1v''@;'; put 'put ''dXNlRW50ZXJUcmlnZ2VyKCl7dGhpcy5tb3VzZU92ZXJUcmlnZ2VyPSEwLHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEwfW9uTW91c2VMZWF2ZVRyaWdnZXIoKXt0aGlzLm1vdXNlT3ZlclRyaWdnZXI9ITEsdGhpcy5oaWRlSWZNb3VzZU91dCgpfW9uTW91c2VFbnRlckNvbnRlbnQoKXt0aGlz''@;'; put 'put ''Lm1vdXNlT3ZlckNvbnRlbnQ9ITB9b25Nb3VzZUxlYXZlQ29udGVudCgpe3RoaXMubW91c2VPdmVyQ29udGVudD0hMSx0aGlzLmhpZGVJZk1vdXNlT3V0KCl9aGlkZUlmTW91c2VPdXQoKXtzZXRUaW1lb3V0KCgpPT57IXRoaXMubW91c2VPdmVyVHJpZ2dlciYmIXRoaXMubW91c2VPdmVyQ29u''@;'; put 'put ''dGVudCYmKHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExKX0sMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEhyKHljKSl9LGMuXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksazk9KCgpPT57Y2xhc3Mg''@;'; put 'put ''Y3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPWFyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci10b29sdGlwIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZ4cigidG9vbHRpcCIsITApfSxz''@;'; put 'put ''dGFuZGFsb25lOiExLGZlYXR1cmVzOltoYShbdlgseVhdKSx5ZihbbjVdKV0sbmdDb250ZW50U2VsZWN0b3JzOlRvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxXcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NvbnN0IFVLZT1bImJvdHRv''@;'; put 'put ''bS1sZWZ0IiwiYm90dG9tLXJpZ2h0IiwidG9wLWxlZnQiLCJ0b3AtcmlnaHQiLCJyaWdodCIsImxlZnQiXSxaS2U9WyJ4cyIsInNtIiwibWQiLCJsZyJdO2xldCBEOT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgZlh7Y29uc3RydWN0b3IoYSxkLGgsZil7aWYoc3VwZXIoYSxkKSx0aGlzLnRvb2x0''@;'; put 'put ''aXBJZFNlcnZpY2U9aCx0aGlzLnRvb2x0aXBNb3VzZVNlcnZpY2U9ZiwhZCl0aHJvdyBuZXcgRXJyb3IoImNsci10b29sdGlwLWNvbnRlbnQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHItdG9vbHRpcCIpO3RoaXMuaWQ9T3UoKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9''@;'; put 'put ''c2V0IGlkKGEpe2NvbnN0IGQ9YXx8IiI7dGhpcy5faWQ9ZCx0aGlzLnRvb2x0aXBJZFNlcnZpY2UudXBkYXRlSWQoZCl9Z2V0IHBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9ufXNldCBwb3NpdGlvbihhKXtjb25zdCBkPXRoaXMuX3Bvc2l0aW9uLGg9VUtlLmluY2x1ZGVzKGEpP2E6''@;'; put 'put ''InJpZ2h0Ijtzd2l0Y2godGhpcy5fcG9zaXRpb249aCx0aGlzLnVwZGF0ZUNzc0NsYXNzKHtvbGRDbGFzczpgdG9vbHRpcC0ke2R9YCxuZXdDbGFzczpgdG9vbHRpcC0ke2h9YH0pLGgpe2Nhc2UidG9wLXJpZ2h0Ijp0aGlzLmFuY2hvclBvaW50PVRpLlRPUF9DRU5URVIsdGhpcy5wb3BvdmVy''@;'; put 'put ''UG9pbnQ9VGkuTEVGVF9CT1RUT007YnJlYWs7Y2FzZSJ0b3AtbGVmdCI6dGhpcy5hbmNob3JQb2ludD1UaS5UT1BfQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50PVRpLlJJR0hUX0JPVFRPTTticmVhaztjYXNlImJvdHRvbS1yaWdodCI6dGhpcy5hbmNob3JQb2ludD1UaS5CT1RUT01fQ0VOVEVS''@;'; put 'put ''LHRoaXMucG9wb3ZlclBvaW50PVRpLkxFRlRfVE9QO2JyZWFrO2Nhc2UiYm90dG9tLWxlZnQiOnRoaXMuYW5jaG9yUG9pbnQ9VGkuQk9UVE9NX0NFTlRFUix0aGlzLnBvcG92ZXJQb2ludD1UaS5SSUdIVF9UT1A7YnJlYWs7Y2FzZSJyaWdodCI6dGhpcy5hbmNob3JQb2ludD1UaS5SSUdIVF9D''@;'; put 'put ''RU5URVIsdGhpcy5wb3BvdmVyUG9pbnQ9VGkuTEVGVF9UT1A7YnJlYWs7Y2FzZSJsZWZ0Ijp0aGlzLmFuY2hvclBvaW50PVRpLkxFRlRfQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50PVRpLlJJR0hUX1RPUDticmVhaztkZWZhdWx0OiFmdW5jdGlvbiB6S2UoYyl7dGhyb3cgbmV3IEVycm9yKGBV''@;'; put 'put ''bmhhbmRsZWQgdmFsdWU6ICR7Y31gKX0oaCl9fWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3NpemV9c2V0IHNpemUoYSl7Y29uc3QgZD10aGlzLl9zaXplLGg9WktlLmluY2x1ZGVzKGEpP2E6InNtIjt0aGlzLl9zaXplPWgsdGhpcy51cGRhdGVDc3NDbGFzcyh7b2xkQ2xhc3M6YHRvb2x0aXAt''@;'; put 'put ''JHtkfWAsbmV3Q2xhc3M6YHRvb2x0aXAtJHtofWB9KX1uZ09uSW5pdCgpe3RoaXMuc2l6ZT10aGlzLnNpemV8fCJzbSIsdGhpcy5wb3NpdGlvbj10aGlzLnBvc2l0aW9ufHwicmlnaHQifW9uTW91c2VFbnRlcigpe3RoaXMudG9vbHRpcE1vdXNlU2VydmljZS5vbk1vdXNlRW50ZXJDb250ZW50''@;'; put 'put ''KCl9b25Nb3VzZUxlYXZlKCl7dGhpcy50b29sdGlwTW91c2VTZXJ2aWNlLm9uTW91c2VMZWF2ZUNvbnRlbnQoKX11cGRhdGVDc3NDbGFzcyh7b2xkQ2xhc3M6YSxuZXdDbGFzczpkfSl7dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsYSksdGhpcy5yZW5k''@;'; put 'put ''ZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsZCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKFlvKSxxZShuSCw4KSxxZSh2WCkscWUoeVgpKX0sYy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRvb2x0''@;'; put 'put ''aXAtY29udGVudCJdXSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmT3QoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Nb3VzZUVudGVyKCl9KSgibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbk1vdXNlTGVhdmUoKX0pLDImYSYm''@;'; put 'put ''KGk0KCJpZCIsZC5pZCksTnIoInJvbGUiLCJ0b29sdGlwIiksbWQoIm9wYWNpdHkiLDEpLHhyKCJ0b29sdGlwLWNvbnRlbnQiLCEwKSl9LGlucHV0czp7aWQ6ImlkIixwb3NpdGlvbjpbMCwiY2xyUG9zaXRpb24iLCJwb3NpdGlvbiJdLHNpemU6WzAsImNsclNpemUiLCJzaXplIl19LHN0YW5k''@;'; put 'put ''YWxvbmU6ITEsZmVhdHVyZXM6W0xhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6VG8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFdyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksSTk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhp''@;'; put 'put ''cy50b2dnbGVTZXJ2aWNlPWEsdGhpcy50b29sdGlwTW91c2VTZXJ2aWNlPWgsdGhpcy5zdWJzPVtdLHRoaXMuc3Vicy5wdXNoKGQuaWQuc3Vic2NyaWJlKGY9PnRoaXMuYXJpYURlc2NyaWJlZEJ5PWYpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vicy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUo''@;'; put 'put ''KSl9c2hvd1Rvb2x0aXAoKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMH1oaWRlVG9vbHRpcCgpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExfW9uTW91c2VFbnRlcigpe3RoaXMudG9vbHRpcE1vdXNlU2VydmljZS5vbk1vdXNlRW50ZXJUcmlnZ2VyKCl9b25Nb3VzZUxlYXZlKCl7dGhp''@;'; put 'put ''cy50b29sdGlwTW91c2VTZXJ2aWNlLm9uTW91c2VMZWF2ZVRyaWdnZXIoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoeWMpLHFlKHZYKSxxZSh5WCkpfSxjLlx1MDI3NWRpcj1Zcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJUb29sdGlw''@;'; put 'put ''VHJpZ2dlciIsIiJdXSxob3N0QXR0cnM6WyJ0YWJpbmRleCIsIjAiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmT3QoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBkLnNob3dUb29sdGlwKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC5oaWRlVG9v''@;'; put 'put ''bHRpcCgpfSkoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Nb3VzZUVudGVyKCl9KSgibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbk1vdXNlTGVhdmUoKX0pLDImYSYmKE5yKCJhcmlhLWRlc2NyaWJlZGJ5IixkLmFyaWFEZXNjcmliZWRCeSkoInJvbGUiLCJi''@;'; put 'put ''dXR0b24iKSx4cigidG9vbHRpcC10cmlnZ2VyIiwhMCkpfSxzdGFuZGFsb25lOiExfSksY30pKCksV0tlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1FaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9eWko''@;'; put 'put ''e2ltcG9ydHM6W05hLFJmLFZzXX0pLGN9KSgpLFlLZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9RWkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPXlpKHtpbXBvcnRzOltwWCxqS2UsV0tlXX0pLGN9KSgp''@;'; put 'put ''O3ZhciBSOT1mdW5jdGlvbihjKXtyZXR1cm4gYy5WRVJUSUNBTD0idmVydGljYWwiLGMuSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCIsYy5DT01QQUNUPSJjb21wYWN0IixjfShSOXx8e30pO2xldCB5ND0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5taW5MYWJlbFNpemU9MSx0aGlz''@;'; put 'put ''Lm1heExhYmVsU2l6ZT0xMix0aGlzLmxheW91dD1SOS5IT1JJWk9OVEFMLHRoaXMubGF5b3V0VmFsdWVzPU9iamVjdC5rZXlzKFI5KS5tYXAoYT0+UjlbYV0pLHRoaXMuX2xhYmVsU2l6ZT0yfWdldCBsYWJlbFNpemUoKXtyZXR1cm4gdGhpcy5fbGFiZWxTaXplfXNldCBsYWJlbFNpemUoYSl7''@;'; put 'put ''dGhpcy5sYWJlbFNpemVJc1ZhbGlkKGEpJiYodGhpcy5fbGFiZWxTaXplPWEpfWdldCBsYXlvdXRDbGFzcygpe3JldHVybmBjbHItZm9ybS0ke3RoaXMubGF5b3V0fWB9aXNWZXJ0aWNhbCgpe3JldHVybiB0aGlzLmxheW91dD09PVI5LlZFUlRJQ0FMfWlzSG9yaXpvbnRhbCgpe3JldHVybiB0''@;'; put 'put ''aGlzLmxheW91dD09PVI5LkhPUklaT05UQUx9aXNDb21wYWN0KCl7cmV0dXJuIHRoaXMubGF5b3V0PT09UjkuQ09NUEFDVH1pc1ZhbGlkKGEpe3JldHVybiB0aGlzLmxheW91dFZhbHVlcy5pbmRleE9mKGEpPi0xfWxhYmVsU2l6ZUlzVmFsaWQoYSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIo''@;'; put 'put ''YSkmJmE+PXRoaXMubWluTGFiZWxTaXplJiZhPD10aGlzLm1heExhYmVsU2l6ZX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksQ3M9KCgpPT57Y2xhc3Mg''@;'; put 'put ''Y3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuY29udHJvbElkU2VydmljZT1hLHRoaXMubGF5b3V0U2VydmljZT1kLHRoaXMubmdDb250cm9sU2VydmljZT1oLHRoaXMucmVuZGVyZXI9Zix0aGlzLmVsPXYsdGhpcy5lbmFibGVHcmlkPSEwLHRoaXMuc3Vic2NyaXB0aW9ucz1bXX1nZXQg''@;'; put 'put ''bGFiZWxUZXh0KCl7cmV0dXJuIHRoaXMuZWwubmF0aXZlRWxlbWVudCYmdGhpcy5lbC5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50fW5nT25Jbml0KCl7dGhpcy5pZEF0dHI9dGhpcy5pZElucHV0LCh0aGlzLmNvbnRyb2xJZFNlcnZpY2V8fHRoaXMubmdDb250cm9sU2VydmljZSkmJnRoaXMu''@;'; put 'put ''cmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCJjbHItY29udHJvbC1sYWJlbCIpLHRoaXMuZW5hYmxlR3JpZCYmdGhpcy5sYXlvdXRTZXJ2aWNlJiYhdGhpcy5sYXlvdXRTZXJ2aWNlLmlzVmVydGljYWwoKSYmdGhpcy5lbC5uYXRpdmVFbGVtZW50JiZ0aGlzLmVsLm5h''@;'; put 'put ''dGl2ZUVsZW1lbnQuY2xhc3NOYW1lLmluZGV4T2YoImNsci1jb2wiKTwwJiYodGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImNsci1jb2wtMTIiKSx0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxgY2xyLWNvbC1tZC0ke3Ro''@;'; put 'put ''aXMubGF5b3V0U2VydmljZS5sYWJlbFNpemV9YCkpLHRoaXMuY29udHJvbElkU2VydmljZSYmIXRoaXMuZm9yQXR0ciYmdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5jb250cm9sSWRTZXJ2aWNlLmlkQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5mb3JBdHRyPWEsdGhpcy5pZEF0dHI9''@;'; put 'put ''dGhpcy5pZElucHV0fHxgJHthfS1sYWJlbGB9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfWRpc2FibGVHcmlkKCl7dGhpcy5lbmFibGVHcmlkPSExfW9uQ2xpY2soYSl7dGhpcy5wcmV2ZW50RGVmYXVsdE9uU2lnbnBvc3RU''@;'; put 'put ''YXJnZXQoYSl9cHJldmVudERlZmF1bHRPblNpZ25wb3N0VGFyZ2V0KGEpe3RoaXMuc2lnbnBvc3QmJnRoaXMuc2lnbnBvc3QubmF0aXZlRWxlbWVudCYmdGhpcy5zaWducG9zdC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGEudGFyZ2V0KSYmYS5wcmV2ZW50RGVmYXVsdCgpfX1yZXR1cm4gYy5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZSh2Miw4KSxxZSh5NCw4KSxxZShOMSw4KSxxZShObykscWUobmEpKX0sYy5cdTAyNzVkaXI9WXIoe3R5cGU6YyxzZWxlY3RvcnM6W1sibGFiZWwiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYm''@;'; put 'put ''cG8oaCxjSCw1LG5hKSwyJmEpe2xldCBmO2dpKGY9bWkoKSkmJihkLnNpZ25wb3N0PWYuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJk90KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25DbGljayhmKX0pLDImYSYmTnIoImlkIixkLmlk''@;'; put 'put ''QXR0cikoImZvciIsZC5mb3JBdHRyKX0saW5wdXRzOntpZElucHV0OlswLCJpZCIsImlkSW5wdXQiXSxmb3JBdHRyOlswLCJmb3IiLCJmb3JBdHRyIl19LHN0YW5kYWxvbmU6ITF9KSxjfSkoKSxHS2U9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGhYe2NvbnN0cnVjdG9yKGEsZCl7c3VwZXIoYSxk''@;'; put 'put ''KSx0aGlzLmNvbnRyb2xJZFNlcnZpY2U9YSx0aGlzLmNvbnRhaW5lcklkU2VydmljZT1kLHRoaXMuY29udHJvbElkU3VmZml4PSJzdWNjZXNzIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUodjIsOCkscWUoRTksOCkpfSxjLlx1MDI3NWNtcD1h''@;'; put 'put ''cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItY29udHJvbC1zdWNjZXNzIl1dLGhvc3RWYXJzOjUsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoTnIoImlkIixkLmlkKSx4cigiY2xyLXN1YnRleHQiLCEwKSgic3VjY2VzcyIsITApKX0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpb''@;'; put 'put ''TGFdLG5nQ29udGVudFNlbGVjdG9yczpUbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksV3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxkaD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMubGF5b3V0U2VydmljZT1hLHRoaXMu''@;'; put 'put ''Y2xhc3NOYW1lPSIifWNvbnRyb2xDbGFzcyhhPWNoLk5PTkUsZD0hMSxoPSIiKXtjb25zdCBmPVt0aGlzLmNsYXNzTmFtZSxoXTtzd2l0Y2goYSl7Y2FzZSBjaC5WQUxJRDpmLnB1c2goImNsci1zdWNjZXNzIik7YnJlYWs7Y2FzZSBjaC5JTlZBTElEOmYucHVzaCgiY2xyLWVycm9yIil9cmV0''@;'; put 'put ''dXJuIGQmJnRoaXMubGF5b3V0U2VydmljZSYmLTE9PT10aGlzLmNsYXNzTmFtZS5pbmRleE9mKCJjbHItY29sIikmJmYucHVzaChgY2xyLWNvbC1tZC0ke3RoaXMubGF5b3V0U2VydmljZS5tYXhMYWJlbFNpemUtdGhpcy5sYXlvdXRTZXJ2aWNlLmxhYmVsU2l6ZX0gY2xyLWNvbC0xMmApLGYu''@;'; put 'put ''am9pbigiICIpLnRyaW0oKX1pbml0Q29udHJvbENsYXNzKGEsZCl7ZCYmZC5jbGFzc05hbWUmJih0aGlzLmNsYXNzTmFtZT1kLmNsYXNzTmFtZSxkLmNsYXNzTmFtZS5zcGxpdCgiICIpLmZvckVhY2goZj0+e2Yuc3RhcnRzV2l0aCgiY2xyLWNvbCIpJiZhLnJlbW92ZUNsYXNzKGQsZil9KSl9''@;'; put 'put ''fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEhyKHk0LDgpKX0sYy5cdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxMOT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuaWZDb250cm9s''@;'; put 'put ''U3RhdGVTZXJ2aWNlPWEsdGhpcy5sYXlvdXRTZXJ2aWNlPWQsdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlPWgsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWYsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGEuc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUodj0+e3Ro''@;'; put 'put ''aXMuc3RhdGU9dixzZXRUaW1lb3V0KCgpPT57dGhpcy51cGRhdGVIZWxwZXJzKCl9KX0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChmLmNvbnRyb2xDaGFuZ2VzLnN1YnNjcmliZSh2PT57dGhpcy5jb250cm9sPXZ9KSxmLmFkZGl0aW9uYWxDb250cm9sc0NoYW5nZXMuc3Vic2NyaWJlKHY9''@;'; put 'put ''Pnt0aGlzLmFkZGl0aW9uYWxDb250cm9scz12fSkpfWdldCBzaG93SGVscGVyKCl7cmV0dXJuISF0aGlzLmNvbnRyb2xIZWxwZXJDb21wb25lbnR9Z2V0IHNob3dWYWxpZCgpe3JldHVybiB0aGlzLnRvdWNoZWQmJnRoaXMuc3RhdGU9PT1jaC5WQUxJRCYmdGhpcy5zdWNjZXNzTWVzc2FnZVBy''@;'; put 'put ''ZXNlbnR9Z2V0IHNob3dJbnZhbGlkKCl7cmV0dXJuIHRoaXMudG91Y2hlZCYmdGhpcy5zdGF0ZT09PWNoLklOVkFMSUQmJnRoaXMuZXJyb3JNZXNzYWdlUHJlc2VudH1nZXQgc3VjY2Vzc01lc3NhZ2VQcmVzZW50KCl7cmV0dXJuISF0aGlzLmNvbnRyb2xTdWNjZXNzQ29tcG9uZW50fWdldCBl''@;'; put 'put ''cnJvck1lc3NhZ2VQcmVzZW50KCl7cmV0dXJuISF0aGlzLmNvbnRyb2xFcnJvckNvbXBvbmVudH1nZXQgdG91Y2hlZCgpe3JldHVybiEoIXRoaXMuY29udHJvbD8udG91Y2hlZCYmIXRoaXMuYWRkaXRpb25hbENvbnRyb2xzPy5zb21lKGE9PmEudG91Y2hlZCkpfW5nQWZ0ZXJDb250ZW50SW5p''@;'; put 'put ''dCgpe3RoaXMudXBkYXRlSGVscGVycygpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1jb250cm9sQ2xhc3MoKXtyZXR1cm4gdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlLmNvbnRyb2xDbGFzcyghdGhpcy5jb250cm9sU3VjY2Vz''@;'; put 'put ''c0NvbXBvbmVudCYmdGhpcy5zdGF0ZT09PWNoLlZBTElEfHwhdGhpcy50b3VjaGVkP2NoLk5PTkU6dGhpcy5zdGF0ZSx0aGlzLmFkZEdyaWQoKSl9YWRkR3JpZCgpe3JldHVybiB0aGlzLmxheW91dFNlcnZpY2UmJiF0aGlzLmxheW91dFNlcnZpY2UuaXNWZXJ0aWNhbCgpfXVwZGF0ZUhlbHBl''@;'; put 'put ''cnMoKXt0aGlzLm5nQ29udHJvbFNlcnZpY2UmJnRoaXMubmdDb250cm9sU2VydmljZS5zZXRIZWxwZXJzKHtzaG93OnRoaXMuc2hvd0ludmFsaWR8fHRoaXMuc2hvd0hlbHBlcnx8dGhpcy5zaG93VmFsaWQsc2hvd0ludmFsaWQ6dGhpcy5zaG93SW52YWxpZCxzaG93SGVscGVyOnRoaXMuc2hv''@;'; put 'put ''d0hlbHBlcixzaG93VmFsaWQ6dGhpcy5zaG93VmFsaWR9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUodWgpLHFlKHk0LDgpLHFlKGRoKSxxZShOMSkpfSxjLlx1MDI3NWRpcj1Zcih7dHlwZTpjLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEs''@;'; put 'put ''ZCxoKXtpZigxJmEmJihwbyhoLENzLDUpLHBvKGgsR0tlLDUpLHBvKGgsSUtlLDUpLHBvKGgsYUgsNSkpLDImYSl7bGV0IGY7Z2koZj1taSgpKSYmKGQubGFiZWw9Zi5maXJzdCksZ2koZj1taSgpKSYmKGQuY29udHJvbFN1Y2Nlc3NDb21wb25lbnQ9Zi5maXJzdCksZ2koZj1taSgpKSYmKGQu''@;'; put 'put ''Y29udHJvbEVycm9yQ29tcG9uZW50PWYuZmlyc3QpLGdpKGY9bWkoKSkmJihkLmNvbnRyb2xIZWxwZXJDb21wb25lbnQ9Zi5maXJzdCl9fSxzdGFuZGFsb25lOiExfSksY30pKCk7Y2xhc3MgdUh7Y29uc3RydWN0b3IobCxhLGQ9MCl7aWYodGhpcy5pbmplY3Rvcj1hLmluamVjdG9yLCF0aGlz''@;'; put 'put ''LmluamVjdG9yLmdldChsLG51bGwpKXtjb25zdCBoPXRoaXMuaW5qZWN0b3IuZ2V0KHptKSxmPXRoaXMuaW5qZWN0b3IuZ2V0KG5hKTthLmNyZWF0ZUNvbXBvbmVudChoLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KEFLZSkpO2NvbnN0IHY9aC5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShsKSxN''@;'; put 'put ''PVtdO01bZF09W2YubmF0aXZlRWxlbWVudF07Y29uc3QgRD1hLmNyZWF0ZUNvbXBvbmVudCh2LHZvaWQgMCx2b2lkIDAsTSk7YS5yZW1vdmUoMCksdGhpcy5pbmplY3Rvcj1ELmluamVjdG9yfX1nZXQobCxhKXtyZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQobCxhKX19bGV0IGJYPSgoKT0+e2Ns''@;'; put 'put ''YXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl90b3VjaGVkPW5ldyB1cn1nZXQgdG91Y2hlZENoYW5nZSgpe3JldHVybiB0aGlzLl90b3VjaGVkLmFzT2JzZXJ2YWJsZSgpfW1hcmtBc1RvdWNoZWQoKXt0aGlzLl90b3VjaGVkLm5leHQoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp''@;'; put 'put ''e3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7dmFyIF9YPWZ1bmN0aW9uKGMpe3JldHVybiBjLkZPUk09ImZvcm0iLGMuTU9ERUw9Im1vZGVsIixjfShfWHx8e30pO2xldCBPOT0oKCk9PntjbGFzcyBje2NvbnN0''@;'; put 'put ''cnVjdG9yKGEsZCxoLGYsdixNKXt0aGlzLnZjcj1hLHRoaXMud3JhcHBlclR5cGU9ZCx0aGlzLl9uZ0NvbnRyb2w9Zix0aGlzLnJlbmRlcmVyPXYsdGhpcy5lbD1NLHRoaXMuaW5kZXg9MCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5hZGRpdGlvbmFsRGlmZmVyPW5ldyBNYXAsaCYmKHRo''@;'; put 'put ''aXMubmdDb250cm9sU2VydmljZT1oLmdldChOMSxudWxsKSx0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZT1oLmdldCh1aCxudWxsKSx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9aC5nZXQoZGgsbnVsbCksdGhpcy5tYXJrQ29udHJvbFNlcnZpY2U9aC5nZXQoYlgsbnVsbCksdGhpcy5kaWZm''@;'; put 'put ''ZXJzPWguZ2V0KFBFLG51bGwpKSx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2UmJnRoaXMuY29udHJvbENsYXNzU2VydmljZS5pbml0Q29udHJvbENsYXNzKHYsTS5uYXRpdmVFbGVtZW50KSx0aGlzLm1hcmtDb250cm9sU2VydmljZSYmdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5tYXJr''@;'; put 'put ''Q29udHJvbFNlcnZpY2UudG91Y2hlZENoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLm1hcmtBc1RvdWNoZWQoKX0pKSx0aGlzLm5nQ29udHJvbFNlcnZpY2UmJnRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubmdDb250cm9sU2VydmljZS5oZWxwZXJzQ2hhbmdlLnN1YnNjcmliZShEPT57''@;'; put 'put ''dGhpcy5zZXRBcmlhRGVzY3JpYmVkQnkoRCl9KSl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChhKXt0aGlzLl9pZD1hLHRoaXMuY29udHJvbElkU2VydmljZSYmKHRoaXMuY29udHJvbElkU2VydmljZS5pZD1hKX1nZXQgaGFzQWRkaXRpb25hbENvbnRyb2xzKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuYWRkaXRpb25hbERpZmZlci5zaXplPjB9bmdPbkluaXQoKXt0aGlzLl9jb250YWluZXJJbmplY3Rvcj1uZXcgdUgodGhpcy53cmFwcGVyVHlwZSx0aGlzLnZjcix0aGlzLmluZGV4KSx0aGlzLmNvbnRyb2xJZFNlcnZpY2U9dGhpcy5fY29udGFpbmVySW5qZWN0b3IuZ2V0KHYyKSx0aGlz''@;'; put 'put ''LmNvbnRhaW5lcklkU2VydmljZT10aGlzLl9jb250YWluZXJJbmplY3Rvci5nZXQoRTksbnVsbCksdGhpcy5faWQ/dGhpcy5jb250cm9sSWRTZXJ2aWNlLmlkPXRoaXMuX2lkOnRoaXMuX2lkPXRoaXMuY29udHJvbElkU2VydmljZS5pZCx0aGlzLm5nQ29udHJvbFNlcnZpY2UmJnRoaXMuX25n''@;'; put 'put ''Q29udHJvbCYmKHRoaXMubmdDb250cm9sU2VydmljZS5jb250cm9sPyh0aGlzLm5nQ29udHJvbD10aGlzLm5nQ29udHJvbFNlcnZpY2UuY29udHJvbCx0aGlzLm5nQ29udHJvbFNlcnZpY2UuYWRkQWRkaXRpb25hbENvbnRyb2wodGhpcy5fbmdDb250cm9sKSx0aGlzLmFkZGl0aW9uYWxEaWZm''@;'; put 'put ''ZXIuc2V0KHRoaXMuX25nQ29udHJvbCx0aGlzLmRpZmZlcnMuZmluZCh0aGlzLl9uZ0NvbnRyb2wpLmNyZWF0ZSgpKSk6KHRoaXMubmdDb250cm9sPXRoaXMuX25nQ29udHJvbCx0aGlzLm5nQ29udHJvbFNlcnZpY2Uuc2V0Q29udHJvbCh0aGlzLm5nQ29udHJvbCksdGhpcy5kaWZmZXI9dGhp''@;'; put 'put ''cy5kaWZmZXJzLmZpbmQodGhpcy5fbmdDb250cm9sKS5jcmVhdGUoKSkpfW5nRG9DaGVjaygpe2lmKHRoaXMudHJpZ2dlckRvQ2hlY2sodGhpcy5kaWZmZXIsdGhpcy5uZ0NvbnRyb2wpLHRoaXMuaGFzQWRkaXRpb25hbENvbnRyb2xzKWZvcihjb25zdFthLGRdb2YgdGhpcy5hZGRpdGlvbmFs''@;'; put 'put ''RGlmZmVyKXRoaXMudHJpZ2dlckRvQ2hlY2soZCxhKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmE/LnVuc3Vic2NyaWJlKCkpfXRyaWdnZXJWYWxpZGF0aW9uKCl7dGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2UmJnRoaXMuaWZDb250cm9sU3RhdGVTZXJ2''@;'; put 'put ''aWNlLnRyaWdnZXJTdGF0dXNDaGFuZ2UoKX1nZXRQcm92aWRlckZyb21Db250YWluZXIoYSxkKXt0cnl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lckluamVjdG9yLmdldChhLGQpfWNhdGNoe3JldHVybiBkfX10cmlnZ2VyRG9DaGVjayhhLGQpe2lmKGEpe2NvbnN0IGg9YS5kaWZmKGQpO2gmJmgu''@;'; put 'put ''Zm9yRWFjaENoYW5nZWRJdGVtKGY9PnsoZi5rZXk9PT1fWC5GT1JNfHxmLmtleT09PV9YLk1PREVMKSYmZi5jdXJyZW50VmFsdWUhPT1mLnByZXZpb3VzVmFsdWUmJnRoaXMudHJpZ2dlclZhbGlkYXRpb24oKX0pfX1tYXJrQXNUb3VjaGVkKCl7dGhpcy5uZ0NvbnRyb2wmJih0aGlzLm5nQ29u''@;'; put 'put ''dHJvbC5jb250cm9sLm1hcmtBc1RvdWNoZWQoKSx0aGlzLm5nQ29udHJvbC5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKSksdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlJiZ0aGlzLm5nQ29udHJvbFNlcnZpY2UuaGFzQWRkaXRpb25hbENvbnRyb2xzJiZ0aGlzLm5nQ29udHJvbFNlcnZp''@;'; put 'put ''Y2UuYWRkaXRpb25hbENvbnRyb2xzPy5mb3JFYWNoKGE9PnthLmNvbnRyb2wubWFya0FzVG91Y2hlZCgpLGEuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCl9KX1zZXRBcmlhRGVzY3JpYmVkQnkoYSl7aWYoYS5zaG93KXtjb25zdCBkPXRoaXMuZ2V0QXJpYURlc2NyaWJlZEJ5SWQo''@;'; put 'put ''YSk7aWYobnVsbCE9PWQpcmV0dXJuIHZvaWQgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJhcmlhLWRlc2NyaWJlZGJ5IixkKX10aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImFyaWEtZGVzY3JpYmVk''@;'; put 'put ''YnkiKX1nZXRBcmlhRGVzY3JpYmVkQnlJZChhKXtjb25zdCBkPXRoaXMuY29udGFpbmVySWRTZXJ2aWNlPy5pZHx8dGhpcy5jb250cm9sSWRTZXJ2aWNlPy5pZDtpZighZClyZXR1cm4gbnVsbDtjb25zdCBoPVtgJHtkfS1oZWxwZXJgXTtyZXR1cm4gYS5zaG93SW52YWxpZD9oLnB1c2goYCR7''@;'; put 'put ''ZH0tZXJyb3JgKTphLnNob3dWYWxpZCYmaC5wdXNoKGAke2R9LXN1Y2Nlc3NgKSxoLmpvaW4oIiAiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoYmUpLHFlKEJ5KSxxZShZbykscWUoRjEpLHFlKE5vKSxxZShuYSkpfSxjLlx1MDI3NWRpcj1Z''@;'; put 'put ''cih7dHlwZTpjLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZPdCgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC50cmlnZ2VyVmFsaWRhdGlvbigpfSksMiZhJiZpNCgiaWQiLGQuaWQpfSxpbnB1dHM6e2lkOiJpZCJ9LHN0YW5kYWxvbmU6ITF9KSxjfSkoKSxi''@;'; put 'put ''M2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMubGF5b3V0U2VydmljZT1hLHRoaXMubWFya0NvbnRyb2xTZXJ2aWNlPWR9c2V0IGxhYmVsU2l6ZShhKXtjb25zdCBkPXBhcnNlSW50KGEsMTApfHwyO3RoaXMubGF5b3V0U2VydmljZS5sYWJlbFNpemU9ZH1vbkZvcm1TdWJt''@;'; put 'put ''aXQoKXt0aGlzLm1hcmtBc1RvdWNoZWQoKX1tYXJrQXNUb3VjaGVkKCl7dGhpcy5tYXJrQ29udHJvbFNlcnZpY2UubWFya0FzVG91Y2hlZCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZSh5NCkscWUoYlgpKX0sYy5cdTAyNzVkaXI9WXIoe3R5''@;'; put 'put ''cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRm9ybSIsIiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZwbyhoLENzLDUpLDImYSl7bGV0IGY7Z2koZj1taSgpKSYmKGQubGFiZWxzPWYpfX0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEm''@;'; put 'put ''Jk90KCJzdWJtaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Gb3JtU3VibWl0KCl9KSwyJmEmJnhyKCJjbHItZm9ybSIsITApKCJjbHItZm9ybS1ob3Jpem9udGFsIixkLmxheW91dFNlcnZpY2UuaXNIb3Jpem9udGFsKCkpKCJjbHItZm9ybS1jb21wYWN0IixkLmxheW91dFNlcnZpY2UuaXND''@;'; put 'put ''b21wYWN0KCkpfSxpbnB1dHM6e2xhYmVsU2l6ZTpbMCwiY2xyTGFiZWxTaXplIiwibGFiZWxTaXplIl19LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hhKFt5NCxiWF0pXX0pLGN9KSgpLHl1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtOcy5hZGRJY29ucyhoMixmMil9fXJldHVybiBj''@;'; put 'put ''Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1FaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9eWkoe2ltcG9ydHM6W05hLFZzXX0pLGN9KSgpO2NvbnN0IHdYPW5ldyBqbigiSVNfVE9HR0xFIikscUtlPXtwcm92aWRlOndYLHVzZUZhY3Rvcnk6ZnVu''@;'; put 'put ''Y3Rpb24gWEtlKCl7cmV0dXJuIG5ldyBNaSghMSl9fTtsZXQgeTI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnRvZ2dsZT0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goYS5zdWJzY3JpYmUoZD0+e3RoaXMudG9nZ2xlPWR9KSl9bmdP''@;'; put 'put ''bkluaXQoKXt0aGlzLmxhYmVsJiZ0aGlzLmxhYmVsLmRpc2FibGVHcmlkKCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZSh3WCkpfSxj''@;'; put 'put ''Llx1MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItY2hlY2tib3gtd3JhcHBlciJdLFsiY2xyLXRvZ2dsZS13cmFwcGVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihwbyhoLENzLDcpLHBvKGgsaGgsNykpLDImYSl7bGV0IGY7Z2koZj1taSgp''@;'; put 'put ''KSYmKGQubGFiZWw9Zi5maXJzdCksZ2koZj1taSgpKSYmKGQuY2hlY2tib3g9Zi5maXJzdCl9fSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmeHIoImNsci1jaGVja2JveC13cmFwcGVyIiwhZC50b2dnbGUpKCJjbHItY2hlY2tib3gtd3JhcHBlci1kaXNhYmxl''@;'; put 'put ''ZCIsbnVsbD09ZC5jaGVja2JveD9udWxsOmQuY2hlY2tib3guY29udHJvbERpc2FibGVkKSgiY2xyLXRvZ2dsZS13cmFwcGVyIixkLnRvZ2dsZSl9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hhKFt2MixxS2VdKV0sbmdDb250ZW50U2VsZWN0b3JzOktVZSxkZWNsczozLHZhcnM6MSxjb25z''@;'; put 'put ''dHM6W1s0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoJFVlKSxXcigwKSxXcigxLDEpLGd0KDIsWFVlLDEsMCwibGFiZWwiLDApKSwyJmEmJihmZSgyKSxFZSgibmdJZiIsIWQubGFiZWwpKX0sZGVwZW5kZW5jaWVzOltDYSxDc10sZW5jYXBzdWxhdGlvbjoyfSks''@;'; put 'put ''Y30pKCksaGg9KCgpPT57Y2xhc3MgYyBleHRlbmRzIE85e2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXtzdXBlcihhLHkyLGQsaCxmLHYpLHRoaXMuY29udHJvbD1oLHRoaXMudG9nZ2xlPU19Z2V0IGNvbnRyb2xEaXNhYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/LmRpc2FibGVkfW5nT25J''@;'; put 'put ''bml0KCl7c3VwZXIubmdPbkluaXQoKTtjb25zdCBhPXRoaXMuZ2V0UHJvdmlkZXJGcm9tQ29udGFpbmVyKHdYLG51bGwpO2EmJm51bGwhPT10aGlzLnRvZ2dsZSYmYS5uZXh0KCEwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoYmUpLHFlKFlv''@;'; put 'put ''KSxxZShGMSwxMCkscWUoTm8pLHFlKG5hKSxOcCgiY2xyVG9nZ2xlIikpfSxjLlx1MDI3NWRpcj1Zcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJDaGVja2JveCIsIiJdLFsiIiwiY2xyVG9nZ2xlIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZO''@;'; put 'put ''cigicm9sZSIsbnVsbCE9PWQudG9nZ2xlPyJzd2l0Y2giOm51bGwpfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltMYV19KSxjfSkoKSxwdz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgTDl7Y29uc3RydWN0b3IoYSxkLGgsZil7c3VwZXIoZixhLGQsaCksdGhpcy5sYXlvdXRTZXJ2aWNlPWEsdGhp''@;'; put 'put ''cy5jb250cm9sQ2xhc3NTZXJ2aWNlPWQsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWgsdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9Zix0aGlzLmlubGluZT0hMX1nZXQgY2xySW5saW5lKCl7cmV0dXJuIHRoaXMuaW5saW5lfXNldCBjbHJJbmxpbmUoYSl7dGhpcy5pbmxpbmU9InN0cmluZyI9''@;'; put 'put ''PXR5cGVvZiBhPyJmYWxzZSIhPT1hOiEhYX1nZXQgYWxsQ2hlY2tib3hlc0Rpc2FibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD8uZGlzYWJsZWQmJighdGhpcy5hZGRpdGlvbmFsQ29udHJvbHM/Lmxlbmd0aHx8dGhpcy5hZGRpdGlvbmFsQ29udHJvbHMuZXZlcnkoYT0+YS5kaXNhYmxlZCkp''@;'; put 'put ''fW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc2V0QXJpYVJvbGVzKCl9c2V0QXJpYVJvbGVzKCl7dGhpcy5yb2xlPXRoaXMuY2hlY2tib3hlcy5sZW5ndGg/Imdyb3VwIjpudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZSh5NCw4KSxxZShk''@;'; put 'put ''aCkscWUoTjEpLHFlKHVoKSl9LGMuXHUwMjc1Y21wPWFyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1jaGVja2JveC1jb250YWluZXIiXSxbImNsci10b2dnbGUtY29udGFpbmVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJnBvKGgsaGgsNSksMiZhKXtsZXQg''@;'; put 'put ''ZjtnaShmPW1pKCkpJiYoZC5jaGVja2JveGVzPWYpfX0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihOcigicm9sZSIsZC5yb2xlKSx4cigiY2xyLWZvcm0tY29udHJvbCIsITApKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixkLmFsbENoZWNrYm94ZXNE''@;'; put 'put ''aXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKSl9LGlucHV0czp7Y2xySW5saW5lOiJjbHJJbmxpbmUifSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltoYShbdWgsTjEsZGgsRTldKSxMYV0sbmdDb250ZW50U2VsZWN0b3JzOkpVZSxkZWNsczo2LHZhcnM6Nixjb25zdHM6W1s0LCJuZ0lm''@;'; put 'put ''Il0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJjbHItc3VidGV4dC13cmFwcGVyIiw0LCJuZ0lmIl0sWzEsImNsci1zdWJ0ZXh0LXdyYXBwZXIiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNs''@;'; put 'put ''ZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJl''@;'; put 'put ''eGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29u''@;'; put 'put ''Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EocVVlKSxXcigwKSxndCgxLFFVZSwxLDAsImxhYmVsIiwwKSxkZSgyLCJkaXYiLDEpLFdyKDMsMSksZ3QoNCxlWmUsMiwwLCJkaXYiLDIpKDUsYVplLDUsNCwiZGl2IiwyKSxoZSgpKSwyJmEmJihmZSgpLEVlKCJuZ0lmIiwhZC5s''@;'; put 'put ''YWJlbCYmZC5hZGRHcmlkKCkpLGZlKCkseHIoImNsci1jb250cm9sLWlubGluZSIsZC5jbHJJbmxpbmUpLEVlKCJuZ0NsYXNzIixkLmNvbnRyb2xDbGFzcygpKSxmZSgyKSxFZSgibmdJZiIsZC5zaG93SGVscGVyKSxmZSgpLEVlKCJuZ0lmIixkLnNob3dJbnZhbGlkfHxkLnNob3dWYWxpZCkp''@;'; put 'put ''fSxkZXBlbmRlbmNpZXM6W1J1LENhLGZzLENzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxKS2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe05zLmFkZEljb25zKGgyLGYyKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9k''@;'; put 'put ''PUVpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj15aSh7aW1wb3J0czpbTmEsVnMseXUsYUEseXVdfSksY30pKCk7ZnVuY3Rpb24gejMoYyl7cmV0dXJuIG51bGwhPT1jJiYoInN0cmluZyI9PXR5cGVvZiBjP2MubGVuZ3RoPj0wOiJib29sZWFuIj09dHlwZW9mIGMmJmMpfWxldCBmaD0oKCk9Pntj''@;'; put 'put ''bGFzcyBje2dldCBzcGlubmVyQ2xhc3MoKXtyZXR1cm4hMH1nZXQgaW5saW5lQ2xhc3MoKXtyZXR1cm4gdGhpcy5faW5saW5lfXNldCBjbHJJbmxpbmUoYSl7dGhpcy5faW5saW5lPXozKGEpfWdldCBpbnZlcnNlQ2xhc3MoKXtyZXR1cm4gdGhpcy5faW52ZXJzZX1zZXQgY2xySW52ZXJzZShh''@;'; put 'put ''KXt0aGlzLl9pbnZlcnNlPXozKGEpfWdldCBzbWFsbENsYXNzKCl7cmV0dXJuIHRoaXMuX3NtYWxsfXNldCBjbHJTbWFsbChhKXt0aGlzLl9zbWFsbD16MyhhKX1nZXQgbWVkaXVtQ2xhc3MoKXtyZXR1cm4hdGhpcy5fc21hbGwmJnRoaXMuX21lZGl1bX1zZXQgY2xyTWVkaXVtKGEpe3RoaXMu''@;'; put 'put ''X21lZGl1bT16MyhhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPWFyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1zcGlubmVyIl1dLGhvc3RWYXJzOjExLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKE5yKCJh''@;'; put 'put ''cmlhLWJ1c3kiLCEwKSx4cigic3Bpbm5lciIsZC5zcGlubmVyQ2xhc3MpKCJzcGlubmVyLWlubGluZSIsZC5pbmxpbmVDbGFzcykoInNwaW5uZXItaW52ZXJzZSIsZC5pbnZlcnNlQ2xhc3MpKCJzcGlubmVyLXNtIixkLnNtYWxsQ2xhc3MpKCJzcGlubmVyLW1kIixkLm1lZGl1bUNsYXNzKSl9''@;'; put 'put ''LGlucHV0czp7Y2xySW5saW5lOiJjbHJJbmxpbmUiLGNsckludmVyc2U6ImNsckludmVyc2UiLGNsclNtYWxsOiJjbHJTbWFsbCIsY2xyTWVkaXVtOiJjbHJNZWRpdW0ifSxzdGFuZGFsb25lOiExLG5nQ29udGVudFNlbGVjdG9yczpUbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlv''@;'; put 'put ''bihhLGQpezEmYSYmKHNhKCksV3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxndz0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9RWkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPXlpKHtpbXBvcnRz''@;'; put 'put ''OltOYV19KSxjfSkoKTt2YXIgdTY9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuVkVSVElDQUw9InZlcnRpY2FsIixjLkhPUklaT05UQUw9Imhvcml6b250YWwiLGMuQk9USD0iYm90aCIsY30odTZ8fHt9KTtsZXQgXzNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmVsZW1lbnRS''@;'; put 'put ''ZWY9YSx0aGlzLnBsYXRmb3JtSWQ9ZH1nZXQgbmF0aXZlRWxlbWVudCgpe3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudH1mb2N1cygpe3dsKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCl9fXJldHVybiBjLlx1MDI3NWZh''@;'; put 'put ''Yz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKG5hKSxxZSh1bCkpfSxjLlx1MDI3NWRpcj1Zcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJLZXlGb2N1c0l0ZW0iLCIiXV0sc3RhbmRhbG9uZTohMX0pLGN9KSgpLG13PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhp''@;'; put 'put ''cy5lbGVtZW50UmVmPWEsdGhpcy5kaXJlY3Rpb249dTYuVkVSVElDQUwsdGhpcy5mb2N1c09uTG9hZD0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5mb2N1c0NoYW5nZT1uZXcgWHIsdGhpcy5fY3VycmVudD0wfWdldCBmb2N1c2FibGVJdGVtcygpe3JldHVybiB0aGlzLl9mb2N1c2Fi''@;'; put 'put ''bGVJdGVtcz90aGlzLl9mb2N1c2FibGVJdGVtczp0aGlzLmNscktleUZvY3VzSXRlbXM/dGhpcy5jbHJLZXlGb2N1c0l0ZW1zLnRvQXJyYXkoKTpbXX1zZXQgZm9jdXNhYmxlSXRlbXMoYSl7QXJyYXkuaXNBcnJheShhKSYmYS5sZW5ndGgmJih0aGlzLl9mb2N1c2FibGVJdGVtcz1hLHRoaXMu''@;'; put 'put ''aW5pdGlhbGl6ZUZvY3VzKCkpfWdldCBuYXRpdmVFbGVtZW50KCl7cmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7dGhpcy5fY3VycmVudCE9PWEmJih0aGlzLl9jdXJyZW50PWEpfWdl''@;'; put 'put ''dCBjdXJyZW50SXRlbSgpe3JldHVybiB0aGlzLmZvY3VzYWJsZUl0ZW1zW3RoaXMuX2N1cnJlbnRdfWdldCBjdXJyZW50SXRlbUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5jdXJyZW50SXRlbS5uYXRpdmVFbGVtZW50P3RoaXMuY3VycmVudEl0ZW0ubmF0aXZlRWxlbWVudDp0aGlzLmN1cnJlbnRJ''@;'; put 'put ''dGVtfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9ySXRlbVVwZGF0ZXMoKSksdGhpcy5pbml0aWFsaXplRm9jdXMoKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9aGFu''@;'; put 'put ''ZGxlS2V5Ym9hcmRFdmVudChhKXtpZih0aGlzLmN1cnJlbnRJdGVtRWxlbWVudCE9PWEudGFyZ2V0KXtjb25zdCBkPXRoaXMuZ2V0SXRlbVBvc2l0aW9uKGEudGFyZ2V0KTt0aGlzLnBvc2l0aW9uSW5SYW5nZShkKSYmKHRoaXMuY3VycmVudD1kKX10aGlzLnByZXZLZXlQcmVzc2VkKGEpJiZ0''@;'; put 'put ''aGlzLmN1cnJlbnRGb2N1c0lzTm90Rmlyc3RJdGVtKCk/dGhpcy5tb3ZlVG8odGhpcy5jdXJyZW50LTEpOnRoaXMubmV4dEtleVByZXNzZWQoYSkmJnRoaXMuY3VycmVudEZvY3VzSXNOb3RMYXN0SXRlbSgpP3RoaXMubW92ZVRvKHRoaXMuY3VycmVudCsxKTphLmNvZGU9PT1tYS5Ib21lP3Ro''@;'; put 'put ''aXMubW92ZVRvKDApOmEuY29kZT09PW1hLkVuZCYmdGhpcy5tb3ZlVG8odGhpcy5mb2N1c2FibGVJdGVtcy5sZW5ndGgtMSksbFgoYSl9c2V0Q2xpY2tlZEl0ZW1DdXJyZW50KGEpe2NvbnN0IGQ9dGhpcy5nZXRJdGVtUG9zaXRpb24oYS50YXJnZXQpO2Q+LTEmJnRoaXMubW92ZVRvKGQpfWZv''@;'; put 'put ''Y3VzQ3VycmVudCgpe3RoaXMuY3VycmVudEl0ZW0uZm9jdXMoKSx0aGlzLmZvY3VzQ2hhbmdlLm5leHQodGhpcy5fY3VycmVudCl9bW92ZVRvKGEpe3RoaXMucG9zaXRpb25JblJhbmdlKGEpJiYodGhpcy5jdXJyZW50PWEsdGhpcy5mb2N1c0N1cnJlbnQoKSl9cG9zaXRpb25JblJhbmdlKGEp''@;'; put 'put ''e3JldHVybiBhPj0wJiZhPHRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RofWN1cnJlbnRGb2N1c0lzTm90Rmlyc3RJdGVtKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnQtMT49MH1jdXJyZW50Rm9jdXNJc05vdExhc3RJdGVtKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnQrMTx0aGlzLmZvY3VzYWJsZUl0''@;'; put 'put ''ZW1zLmxlbmd0aH1pbml0aWFsaXplRm9jdXMoKXt0aGlzLmZvY3VzYWJsZUl0ZW1zJiZ0aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aCYmKHRoaXMuX2N1cnJlbnQ+PXRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RoJiYodGhpcy5fY3VycmVudD10aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aC0x''@;'; put 'put ''KSx0aGlzLmZvY3VzT25Mb2FkJiYodGhpcy5jdXJyZW50SXRlbS5mb2N1cygpLHRoaXMuZm9jdXNDaGFuZ2UuZW1pdCgpKSl9bmV4dEtleVByZXNzZWQoYSl7Y29uc3QgZD1rZihhLmtleSk7c3dpdGNoKHRoaXMuZGlyZWN0aW9uKXtjYXNlIHU2LlZFUlRJQ0FMOnJldHVybiBkPT09bWEuQXJy''@;'; put 'put ''b3dEb3duO2Nhc2UgdTYuSE9SSVpPTlRBTDpyZXR1cm4gZD09PW1hLkFycm93UmlnaHQ7Y2FzZSB1Ni5CT1RIOnJldHVybiBkPT09bWEuQXJyb3dEb3dufHxkPT09bWEuQXJyb3dSaWdodDtkZWZhdWx0OnJldHVybiExfX1wcmV2S2V5UHJlc3NlZChhKXtjb25zdCBkPWtmKGEua2V5KTtzd2l0''@;'; put 'put ''Y2godGhpcy5kaXJlY3Rpb24pe2Nhc2UgdTYuVkVSVElDQUw6cmV0dXJuIGQ9PT1tYS5BcnJvd1VwO2Nhc2UgdTYuSE9SSVpPTlRBTDpyZXR1cm4gZD09PW1hLkFycm93TGVmdDtjYXNlIHU2LkJPVEg6cmV0dXJuIGQ9PT1tYS5BcnJvd1VwfHxkPT09bWEuQXJyb3dMZWZ0O2RlZmF1bHQ6cmV0''@;'; put 'put ''dXJuITF9fWdldEl0ZW1Qb3NpdGlvbihhKXtyZXR1cm4gdGhpcy5fZm9jdXNhYmxlSXRlbXM/dGhpcy5mb2N1c2FibGVJdGVtcy5pbmRleE9mKGEpOnRoaXMuZm9jdXNhYmxlSXRlbXMubWFwKGQ9PmQubmF0aXZlRWxlbWVudCkuaW5kZXhPZihhKX1saXN0ZW5Gb3JJdGVtVXBkYXRlcygpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmNscktleUZvY3VzSXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLmluaXRpYWxpemVGb2N1cygpfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKG5hKSl9LGMuXHUwMjc1Y21wPWFyKHt0eXBlOmMsc2VsZWN0b3Jz''@;'; put 'put ''OltbIiIsImNscktleUZvY3VzIiwiIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJnBvKGgsXzNlLDUpLDImYSl7bGV0IGY7Z2koZj1taSgpKSYmKGQuY2xyS2V5Rm9jdXNJdGVtcz1mKX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmT3QoImtleWRv''@;'; put 'put ''d24iLGZ1bmN0aW9uKGYpe3JldHVybiBkLmhhbmRsZUtleWJvYXJkRXZlbnQoZil9KSgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLnNldENsaWNrZWRJdGVtQ3VycmVudChmKX0pfSxpbnB1dHM6e2RpcmVjdGlvbjpbMCwiY2xyRGlyZWN0aW9uIiwiZGlyZWN0aW9uIl0sZm9jdXNPbkxv''@;'; put 'put ''YWQ6WzAsImNsckZvY3VzT25Mb2FkIiwiZm9jdXNPbkxvYWQiXSxmb2N1c2FibGVJdGVtczpbMCwiY2xyS2V5Rm9jdXMiLCJmb2N1c2FibGVJdGVtcyJdfSxvdXRwdXRzOntmb2N1c0NoYW5nZToiY2xyRm9jdXNDaGFuZ2UifSxzdGFuZGFsb25lOiExLGF0dHJzOm9aZSxuZ0NvbnRlbnRTZWxl''@;'; put 'put ''Y3RvcnM6VG8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFdyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksQ1g9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1''@;'; put 'put ''bW9kPUVpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj15aSh7aW1wb3J0czpbTmFdfSksY30pKCk7Y2xhc3MgUUtle2NvbnRhaW5zSXRlbShsKXtyZXR1cm4hIXRoaXMubW9kZWwmJnRoaXMubW9kZWwuaW5jbHVkZXMobCl9c2VsZWN0KGwpe3RoaXMuYWRkSXRlbShsKX11bnNlbGVjdChsKXt0aGlz''@;'; put 'put ''LnJlbW92ZUl0ZW0obCl9aXNFbXB0eSgpe3JldHVybiEodGhpcy5tb2RlbCYmdGhpcy5tb2RlbC5sZW5ndGg+MCl9cG9wKCl7bGV0IGw7cmV0dXJuIHRoaXMubW9kZWwmJnRoaXMubW9kZWwubGVuZ3RoPjAmJihsPXRoaXMubW9kZWxbdGhpcy5tb2RlbC5sZW5ndGgtMV0sdGhpcy5yZW1vdmVJ''@;'; put 'put ''dGVtKGwpKSxsfXRvU3RyaW5nKGwsYT0tMSl7bGV0IGQ9IiI7cmV0dXJuIHRoaXMubW9kZWwmJihhPi0xP3RoaXMubW9kZWxbYV0mJihkKz1sJiZ0aGlzLm1vZGVsW2FdW2xdP3RoaXMubW9kZWxbYV1bbF06dGhpcy5tb2RlbFthXS50b1N0cmluZygpKTp0aGlzLm1vZGVsLmZvckVhY2goaD0+''@;'; put 'put ''e2QrPWwmJmhbbF0/aFtsXTpoLnRvU3RyaW5nKCksZCs9IiAifSkpLGQudHJpbSgpfWFkZEl0ZW0obCl7dGhpcy5jb250YWluc0l0ZW0obCl8fCh0aGlzLm1vZGVsPXRoaXMubW9kZWx8fFtdLHRoaXMubW9kZWwucHVzaChsKSl9cmVtb3ZlSXRlbShsKXtpZihudWxsPT10aGlzLm1vZGVsKXJl''@;'; put 'put ''dHVybjtjb25zdCBhPXRoaXMubW9kZWwuaW5kZXhPZihsKTthPi0xJiZ0aGlzLm1vZGVsLnNwbGljZShhLDEpLDA9PT10aGlzLm1vZGVsLmxlbmd0aCYmKHRoaXMubW9kZWw9bnVsbCl9fWNsYXNzIGVYZXtjb250YWluc0l0ZW0obCl7cmV0dXJuIHRoaXMubW9kZWw9PT1sfXNlbGVjdChsKXt0''@;'; put 'put ''aGlzLm1vZGVsPWx9dW5zZWxlY3QobCl7dGhpcy5jb250YWluc0l0ZW0obCkmJih0aGlzLm1vZGVsPW51bGwpfWlzRW1wdHkoKXtyZXR1cm4hdGhpcy5tb2RlbH1wb3AoKXtjb25zdCBsPXRoaXMubW9kZWw7cmV0dXJuIHRoaXMubW9kZWw9bnVsbCxsfXRvU3RyaW5nKGwpe3JldHVybiB0aGlz''@;'; put 'put ''Lm1vZGVsP2wmJnRoaXMubW9kZWxbbF0/dGhpcy5tb2RlbFtsXTp0aGlzLm1vZGVsLnRvU3RyaW5nKCk6IiJ9fWNsYXNzIHRYZSBleHRlbmRzIGVYZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fZm9jdXNDaGFuZ2VkPW5ldyBNaShudWxsKX1nZXQgZm9jdXNDaGFu''@;'; put 'put ''Z2VkKCl7cmV0dXJuIHRoaXMuX2ZvY3VzQ2hhbmdlZC5hc09ic2VydmFibGUoKX1zZWxlY3QobCl7dGhpcy5tb2RlbCE9PWwmJih0aGlzLm1vZGVsPWwsdGhpcy5fZm9jdXNDaGFuZ2VkLm5leHQobCkpfX1sZXQgblhlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmxvYWRpbmc9''@;'; put 'put ''ITEsdGhpcy5zaG93QWxsT3B0aW9ucz0hMCx0aGlzLl9jdXJyZW50SW5wdXQ9IiIsdGhpcy5faW5wdXRDaGFuZ2VkPW5ldyBNaSgiIiksdGhpcy5fc2VsZWN0aW9uQ2hhbmdlZD1uZXcgRlQoMSksdGhpcy5pbnB1dENoYW5nZWQ9dGhpcy5faW5wdXRDaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpfWdl''@;'; put 'put ''dCBjdXJyZW50SW5wdXQoKXtyZXR1cm4gdGhpcy5fY3VycmVudElucHV0fXNldCBjdXJyZW50SW5wdXQoYSl7IiI9PT1hJiYhdGhpcy5tdWx0aXNlbGVjdGFibGUmJnRoaXMuc2V0U2VsZWN0aW9uVmFsdWUobnVsbCksdGhpcy5fY3VycmVudElucHV0PWEsdGhpcy5faW5wdXRDaGFuZ2VkLm5l''@;'; put 'put ''eHQoYSl9Z2V0IHNlbGVjdGlvbkNoYW5nZWQoKXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uQ2hhbmdlZC5hc09ic2VydmFibGUoKX1nZXQgbXVsdGlzZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uTW9kZWwgaW5zdGFuY2VvZiBRS2V9c2VsZWN0KGEpe251bGw9PWF8fHRoaXMuc2Vs''@;'; put 'put ''ZWN0aW9uTW9kZWwuY29udGFpbnNJdGVtKGEpfHwodGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoYSksdGhpcy5fc2VsZWN0aW9uQ2hhbmdlZC5uZXh0KHRoaXMuc2VsZWN0aW9uTW9kZWwpKX10b2dnbGUoYSl7bnVsbCE9YSYmKHRoaXMuc2VsZWN0aW9uTW9kZWwuY29udGFpbnNJdGVtKGEp''@;'; put 'put ''P3RoaXMuc2VsZWN0aW9uTW9kZWwudW5zZWxlY3QoYSk6dGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoYSksdGhpcy5fc2VsZWN0aW9uQ2hhbmdlZC5uZXh0KHRoaXMuc2VsZWN0aW9uTW9kZWwpKX11bnNlbGVjdChhKXtudWxsPT1hfHwhdGhpcy5zZWxlY3Rpb25Nb2RlbC5jb250YWluc0l0''@;'; put 'put ''ZW0oYSl8fCh0aGlzLnNlbGVjdGlvbk1vZGVsLnVuc2VsZWN0KGEpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9c2V0U2VsZWN0aW9uVmFsdWUoYSl7IXRoaXMuc2VsZWN0aW9uTW9kZWx8fHRoaXMuc2VsZWN0aW9uTW9kZWwubW9kZWw9PT1hfHwh''@;'; put 'put ''dGhpcy5zZWxlY3Rpb25Nb2RlbC5tb2RlbCYmIWF8fCh0aGlzLnNlbGVjdGlvbk1vZGVsLm1vZGVsPWEsdGhpcy5fc2VsZWN0aW9uQ2hhbmdlZC5uZXh0KHRoaXMuc2VsZWN0aW9uTW9kZWwpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUw''@;'; put 'put ''Mjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7dTNlKCgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy50b2dnbGVTZXJ2aWNlPWQsdGhpcy5zZWxlY3Rpb25TZXJ2aWNlPWgsdGhpcy5wbGF0Zm9ybUlkPWYsdGhpcy5wc2V1ZG9Gb2N1''@;'; put 'put ''cz1uZXcgdFhlLHRoaXMub3B0aW9uRGF0YT1bXSx0aGlzLmhhbmRsZUZvY3VzU3Vic2NyaXB0aW9uKCksdGhpcy5yZW5kZXJlcj1hLmNyZWF0ZVJlbmRlcmVyKG51bGwsbnVsbCl9Z2V0IHRyaWdnZXIoKXtyZXR1cm4gdGhpcy5fdHJpZ2dlcn1zZXQgdHJpZ2dlcihhKXt0aGlzLl90cmlnZ2Vy''@;'; put 'put ''PWEsdGhpcy5hZGRGb2N1c09uQmx1ckxpc3RlbmVyKGEpfWdldCBsaXN0Ym94KCl7cmV0dXJuIHRoaXMuX2xpc3Rib3h9c2V0IGxpc3Rib3goYSl7dGhpcy5fbGlzdGJveD1hLHRoaXMuYWRkRm9jdXNPbkJsdXJMaXN0ZW5lcihhKX1nZXQgdGV4dElucHV0KCl7cmV0dXJuIHRoaXMuX3RleHRJ''@;'; put 'put ''bnB1dH1zZXQgdGV4dElucHV0KGEpe3RoaXMuX3RleHRJbnB1dD1hLHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24iLGQ9PiF0aGlzLmhhbmRsZVRleHRJbnB1dChkKSksdGhpcy5hZGRGb2N1c09uQmx1ckxpc3RlbmVyKGEpfWZvY3VzSW5wdXQoKXt0aGlzLnRleHRJbnB1dCYmd2wo''@;'; put 'put ''dGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy50ZXh0SW5wdXQuZm9jdXMoKX1mb2N1c0ZpcnN0QWN0aXZlKCl7aWYodGhpcy5vcHRpb25EYXRhLmxlbmd0aD4wKWlmKHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3Rpb25Nb2RlbC5pc0VtcHR5KCkpdGhpcy5wc2V1ZG9Gb2N1cy5zZWxlY3QodGhp''@;'; put 'put ''cy5vcHRpb25EYXRhWzBdKTtlbHNle2xldCBhO2E9dGhpcy5zZWxlY3Rpb25TZXJ2aWNlLm11bHRpc2VsZWN0YWJsZT90aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwubW9kZWxbMF06dGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLm1vZGVsO2NvbnN0IGQ9''@;'; put 'put ''dGhpcy5vcHRpb25EYXRhLmZpbmQoaD0+aC52YWx1ZT09PWEpO3RoaXMucHNldWRvRm9jdXMuc2VsZWN0KGR8fHRoaXMub3B0aW9uRGF0YVswXSksdGhpcy5zY3JvbGxJbnRvU2VsZWN0ZWRNb2RlbCgiYXV0byIpfX1hZGRPcHRpb25WYWx1ZXMoYSl7dGhpcy5vcHRpb25EYXRhPWF9aGFuZGxl''@;'; put 'put ''Rm9jdXNTdWJzY3JpcHRpb24oKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoYT0+e2F8fCh0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsPW51bGwpfSl9bW92ZUZvY3VzVG8oYSl7bGV0IGQ9dGhpcy5vcHRpb25EYXRhLmZpbmRJbmRleChoPT5oLmVxdWFscyh0aGlzLnBz''@;'; put 'put ''ZXVkb0ZvY3VzLm1vZGVsKSk7YT09PW0yLlVQPy0xPT09ZHx8MD09PWQ/ZD10aGlzLm9wdGlvbkRhdGEubGVuZ3RoLTE6ZC0tOmE9PT1tMi5ET1dOJiYoLTE9PT1kfHxkPT09dGhpcy5vcHRpb25EYXRhLmxlbmd0aC0xP2Q9MDpkKyspLHRoaXMucHNldWRvRm9jdXMuc2VsZWN0KHRoaXMub3B0''@;'; put 'put ''aW9uRGF0YVtkXSksdGhpcy5zY3JvbGxJbnRvU2VsZWN0ZWRNb2RlbCgpfW9wZW5BbmRNb3ZlVG8oYSl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4/dGhpcy5tb3ZlRm9jdXNUbyhhKToodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2UucGlwZShQMygxKSkuc3Vic2NyaWJlKGQ9PntkJiZ0''@;'; put 'put ''aGlzLm1vdmVGb2N1c1RvKGEpfSksdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITApfWhhbmRsZVRleHRJbnB1dChhKXtsZXQgZD0hMTtjb25zdCBoPWtmKGEua2V5KTtpZihhKXN3aXRjaChoKXtjYXNlIG1hLkVudGVyOnRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiZ0aGlzLnBzZXVkb0ZvY3Vz''@;'; put 'put ''Lm1vZGVsJiYodGhpcy5zZWxlY3Rpb25TZXJ2aWNlLm11bHRpc2VsZWN0YWJsZT90aGlzLnNlbGVjdGlvblNlcnZpY2UudG9nZ2xlKHRoaXMucHNldWRvRm9jdXMubW9kZWwudmFsdWUpOnRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3QodGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbC52YWx1ZSks''@;'; put 'put ''ZD0hMCk7YnJlYWs7Y2FzZSBtYS5TcGFjZTp0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbnx8KHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEwLGQ9ITApO2JyZWFrO2Nhc2UgbWEuQXJyb3dVcDp0aGlzLnByZXZlbnRWaWV3cG9ydFNjcm9sbGluZyhhKSx0aGlzLm9wZW5BbmRNb3ZlVG8obTIuVVAp''@;'; put 'put ''LGQ9ITA7YnJlYWs7Y2FzZSBtYS5BcnJvd0Rvd246dGhpcy5wcmV2ZW50Vmlld3BvcnRTY3JvbGxpbmcoYSksdGhpcy5vcGVuQW5kTW92ZVRvKG0yLkRPV04pLGQ9ITA7YnJlYWs7ZGVmYXVsdDphLmtleSE9PW1hLlRhYiYmKCF0aGlzLnNlbGVjdGlvblNlcnZpY2UubXVsdGlzZWxlY3RhYmxl''@;'; put 'put ''fHxhLmtleSE9PW1hLkJhY2tzcGFjZSkmJmEua2V5IT09bWEuRXNjYXBlJiYhdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJih0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMCl9cmV0dXJuIGR9c2Nyb2xsSW50b1NlbGVjdGVkTW9kZWwoYT0ic21vb3RoIil7dGhpcy5wc2V1ZG9Gb2N1cy5tb2Rl''@;'; put 'put ''bCYmdGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbC5lbCYmdGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbC5lbC5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6YSxibG9jazoiY2VudGVyIixpbmxpbmU6Im5lYXJlc3QifSl9cHJldmVudFZpZXdwb3J0U2Nyb2xsaW5nKGEpe2EucHJldmVudERlZmF1bHQoKSxh''@;'; put 'put ''LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWFkZEZvY3VzT25CbHVyTGlzdGVuZXIoYSl7d2wodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5yZW5kZXJlci5saXN0ZW4oYSwiYmx1ciIsZD0+e3RoaXMuZm9jdXNPdXRPZkNvbXBvbmVudChkKSYmKHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEx''@;'; put 'put ''LHRoaXMuY29tcG9uZW50Q2RSZWYmJnRoaXMuY29tcG9uZW50Q2RSZWYuZGV0ZWN0Q2hhbmdlcygpKX0pfWZvY3VzT3V0T2ZDb21wb25lbnQoYSl7Y29uc3QgZD1hLnJlbGF0ZWRUYXJnZXR8fGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7cmV0dXJuISh0aGlzLnRleHRJbnB1dC5jb250YWlucyhk''@;'; put 'put ''KXx8dGhpcy50cmlnZ2VyLmNvbnRhaW5zKGQpfHx0aGlzLmxpc3Rib3guY29udGFpbnMoZCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShIcihlYyksSHIoeWMpLEhyKG5YZSksSHIodWwpKX0sYy5cdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rv''@;'; put 'put ''cnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSk7bGV0IHJYZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7TnMuYWRkSWNvbnMoaDIsZjIsbncsT1QpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9RWkoe3R5cGU6Y30pLGMuXHUw''@;'; put 'put ''Mjc1aW5qPXlpKHtpbXBvcnRzOltOYSxVYyxWcyxDWCx5dSxSZixyQSxndyx5dSxSZl19KSxjfSkoKSxkSD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgTDl7fXJldHVybiBjLlx1MDI3NWZhYz0oKCk9PntsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPXlsKGMpKSkoZHx8Yyl9''@;'; put 'put ''fSkoKSxjLlx1MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItaW5wdXQtY29udGFpbmVyIl1dLGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZ4cigiY2xyLWZvcm0tY29udHJvbCIsITApKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixudWxs''@;'; put 'put ''PT1kLmNvbnRyb2w/bnVsbDpkLmNvbnRyb2wuZGlzYWJsZWQpKCJjbHItcm93IixkLmFkZEdyaWQoKSl9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hhKFt1aCxOMSx2MixkaF0pLExhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6aFplLGRlY2xzOjEzLHZhcnM6Nyxjb25zdHM6W1s0LCJuZ0lmIl0s''@;'; put 'put ''WzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsxLCJjbHItaW5wdXQtd3JhcHBlciJdLFsxLCJjbHItaW5wdXQtZ3JvdXAiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFy''@;'; put 'put ''aWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0''@;'; put 'put ''dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEs''@;'; put 'put ''ZCl7MSZhJiYoc2EoZFplKSxXcigwKSxndCgxLGZaZSwxLDAsImxhYmVsIiwwKSxkZSgyLCJkaXYiLDEpKDMsImRpdiIsMikoNCwiZGl2IiwzKSxXcig1LDEpLFdyKDYsMiksV3IoNywzKSxoZSgpLGd0KDgscFplLDEsMCwiY2RzLWljb24iLDQpKDksZ1plLDEsMCwiY2RzLWljb24iLDUpLGhl''@;'; put 'put ''KCksZ3QoMTAsbVplLDEsMCwibmctY29udGVudCIsMCkoMTEsdlplLDEsMCwibmctY29udGVudCIsMCkoMTIseVplLDEsMCwibmctY29udGVudCIsMCksaGUoKSksMiZhJiYoZmUoKSxFZSgibmdJZiIsIWQubGFiZWwmJmQuYWRkR3JpZCgpKSxmZSgpLEVlKCJuZ0NsYXNzIixkLmNvbnRyb2xD''@;'; put 'put ''bGFzcygpKSxmZSg2KSxFZSgibmdJZiIsZC5zaG93SW52YWxpZCksZmUoKSxFZSgibmdJZiIsZC5zaG93VmFsaWQpLGZlKCksRWUoIm5nSWYiLGQuc2hvd0hlbHBlciksZmUoKSxFZSgibmdJZiIsZC5zaG93SW52YWxpZCksZmUoKSxFZSgibmdJZiIsZC5zaG93VmFsaWQpKX0sZGVwZW5kZW5j''@;'; put 'put ''aWVzOltSdSxDYSxmcyxDc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksTWQ9KCgpPT57Y2xhc3MgYyBleHRlbmRzIE85e2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7c3VwZXIoYSxkSCxkLGgsZix2KSx0aGlzLmluZGV4PTEsIm51bWJlciI9PT10aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0''@;'; put 'put ''cmlidXRlKCJ0eXBlIikmJmNvbnNvbGUud2FybignV2FybmluZzogSW5wdXRzIG9mIHR5cGUgIm51bWJlciIgc2hvdWxkIHV0aWxpemUgdGhlIG51bWJlci1pbnB1dCBjb21wb25lbnQgZm9yIHByb3BlciBoYW5kbGluZy5cblxuICBFeGFtcGxlIHVzYWdlOlxuICA8Y2xyLW51bWJlci1pbnB1''@;'; put 'put ''dC1jb250YWluZXI+XG4gICAgPGxhYmVsPk51bWJlciBJbnB1dDwvbGFiZWw+XG4gICAgPGlucHV0IGNsck51bWJlcklucHV0IHR5cGU9Im51bWJlciIvPlxuICA8L2Nsci1udW1iZXItaW5wdXQtY29udGFpbmVyPlxuICAgICAgJyl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXty''@;'; put 'put ''ZXR1cm4gbmV3KGF8fGMpKHFlKGJlKSxxZShZbykscWUoRjEsMTApLHFlKE5vKSxxZShuYSkpfSxjLlx1MDI3NWRpcj1Zcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJJbnB1dCIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmeHIoImNsci1pbnB1''@;'; put 'put ''dCIsITApfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltMYV19KSxjfSkoKSx3M2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe05zLmFkZEljb25zKGgyLGYyKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUVpKHt0eXBl''@;'; put 'put ''OmN9KSxjLlx1MDI3NWluaj15aSh7aW1wb3J0czpbTmEsVWMsVnMseXUseXVdfSksY30pKCksdnc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ZvY3VzZWQ9bmV3IE1pKCExKX1nZXQgZm9jdXNDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZm9jdXNlZC5hc09ic2VydmFibGUoKX1z''@;'; put 'put ''ZXQgZm9jdXNlZChhKXt0aGlzLl9mb2N1c2VkLm5leHQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGlYZT0oKCk9PntjbGFzcyBje2NvbnN0cnVj''@;'; put 'put ''dG9yKCl7TnMuYWRkSWNvbnMoaDIsZjIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9RWkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPXlpKHtpbXBvcnRzOltOYSx3M2UsVnNdfSksY30pKCksYVhlPSgoKT0+e2NsYXNzIGN7fXJl''@;'; put 'put ''dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1FaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9eWkoe2ltcG9ydHM6W05hLFZzLGFBLGV1XX0pLGN9KSgpLG9YZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o''@;'; put 'put ''YSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9RWkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPXlpKHtpbXBvcnRzOltOYSxWc119KSxjfSkoKSxoWGU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9k''@;'; put 'put ''PUVpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj15aSh7aW1wb3J0czpbTmEsVnMscFhdfSksY30pKCksTTNlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9yczpbWyJuZy1j''@;'; put 'put ''b21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZVYShJbCw1KSwyJmEpe2xldCBoO2dpKGg9bWkoKSkmJihkLnRlbXBsYXRlPWguZmlyc3QpfX0sc3RhbmRhbG9uZTohMSxuZ0NvbnRlbnRTZWxlY3RvcnM6VG8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rp''@;'; put 'put ''b24oYSxkKXsxJmEmJihzYSgpLGd0KDAsVFplLDEsMCwibmctdGVtcGxhdGUiKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGZYZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9RWkoe3R5cGU6Y30p''@;'; put 'put ''LGMuXHUwMjc1aW5qPXlpKHtpbXBvcnRzOltOYV19KSxjfSkoKSxkNj0oKCk9PntjbGFzcyBjIGV4dGVuZHMgb3d7fXJldHVybiBjLlx1MDI3NWZhYz0oKCk9PntsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPXlsKGMpKSkoZHx8Yyl9fSkoKSxjLlx1MDI3NWRpcj1Zcih7''@;'; put 'put ''dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFicyJdXSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltMYV19KSxjfSkoKSxQOT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgc3d7Y29uc3RydWN0b3IoYSxkLGgsZil7aWYoIWQpdGhyb3cgbmV3IEVycm9yKCJjbHJUYWJMaW5rIGFuZCBjbHItdGFiLWNv''@;'; put 'put ''bnRlbnQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHItdGFicyIpO3N1cGVyKGEsZCksdGhpcy5pZkFjdGl2ZT1mLHRoaXMuaWQ9aH1nZXQgZmxhdm9yKCl7cmV0dXJuIHRoaXMuaWZBY3RpdmUuY3VycmVudD09PXRoaXMuaWR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlv''@;'; put 'put ''bihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKEhzKSxxZShkNiw4KSxxZSh1dykscWUoeDkpKX0sYy5cdTAyNzVkaXI9WXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVGFiTGluayIsIiJdLFsiY2xyLXRhYi1jb250ZW50Il1dLHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W0xhXX0pLGN9KSgp''@;'; put 'put ''O3ZhciBGOT1mdW5jdGlvbihjKXtyZXR1cm4gYy5IT1JJWk9OVEFMPSJob3Jpem9udGFsIixjLlZFUlRJQ0FMPSJ2ZXJ0aWNhbCIsY30oRjl8fHt9KTtsZXQgc0E9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMubGF5b3V0PUY5LkhPUklaT05UQUwsdGhpcy5fY2hpbGRyZW49W119''@;'; put 'put ''Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuX2NoaWxkcmVufWdldCBhY3RpdmVUYWIoKXtyZXR1cm4gdGhpcy5jaGlsZHJlbi5maW5kKGE9PmEuYWN0aXZlKX1nZXQgb3ZlcmZsb3dUYWJzKCl7cmV0dXJuIHRoaXMubGF5b3V0PT09RjkuVkVSVElDQUw/W106dGhpcy5jaGlsZHJlbi5maWx0''@;'; put 'put ''ZXIoYT0+ITA9PT1hLnRhYkxpbmsuaW5PdmVyZmxvdyl9cmVnaXN0ZXIoYSl7dGhpcy5fY2hpbGRyZW4ucHVzaChhKX11bnJlZ2lzdGVyKGEpe2NvbnN0IGQ9dGhpcy5jaGlsZHJlbi5pbmRleE9mKGEpO2Q+LTEmJnRoaXMuY2hpbGRyZW4uc3BsaWNlKGQsMSl9fXJldHVybiBjLlx1MDI3NWZh''@;'; put 'put ''Yz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHBYZT0wLGg2PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlPWEsdGhpcy5pZD1kLHRoaXMu''@;'; put 'put ''dGFic1NlcnZpY2U9aCx0aGlzLnRhYkNvbnRlbnRJZHx8KHRoaXMudGFiQ29udGVudElkPSJjbHItdGFiLWNvbnRlbnQtIitwWGUrKyl9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PT09dGhpcy5pZH1nZXQgYXJpYUxhYmVsbGVkQnkoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy50YWJzU2VydmljZS5jaGlsZHJlbi5maW5kKGE9PmEudGFiTGluay5pZD09PXRoaXMuaWQpPy50YWJMaW5rPy50YWJMaW5rSWR9c2V0IHRlbXBsYXRlUmVmKGEpe3RoaXMudmlld1JlZj10aGlzLnRhYnNTZXJ2aWNlLnRhYkNvbnRlbnRWaWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVk''@;'; put 'put ''VmlldyhhKX1uZ09uRGVzdHJveSgpe2NvbnN0IGE9dGhpcy50YWJzU2VydmljZS50YWJDb250ZW50Vmlld0NvbnRhaW5lci5pbmRleE9mKHRoaXMudmlld1JlZik7YT4tMSYmdGhpcy50YWJzU2VydmljZS50YWJDb250ZW50Vmlld0NvbnRhaW5lci5yZW1vdmUoYSl9fXJldHVybiBjLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKHg5KSxxZSh1dykscWUoc0EpKX0sYy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRhYi1jb250ZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmVWEoQVplLDcpLDImYSl7bGV0IGg7''@;'; put 'put ''Z2koaD1taSgpKSYmKGQudGVtcGxhdGVSZWY9aC5maXJzdCl9fSxpbnB1dHM6e3RhYkNvbnRlbnRJZDpbMCwiaWQiLCJ0YWJDb250ZW50SWQiXX0sc3RhbmRhbG9uZTohMSxuZ0NvbnRlbnRTZWxlY3RvcnM6VG8sZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbInRhYkNvbnRlbnRQcm9qZWN0ZWRS''@;'; put 'put ''ZWYiLCIiXSxbInJvbGUiLCJ0YWJwYW5lbCIsMSwidGFiLWNvbnRlbnQiLDMsImlkIiwiaGlkZGVuIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxndCgwLGtaZSwyLDYsIm5nLXRlbXBsYXRlIixudWxsLDAseGMpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksZ1hlPTA7''@;'; put 'put ''Y29uc3QgTVg9bmV3IGpuKCJUQUJTX0lEIiksdlhlPXtwcm92aWRlOk1YLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gbVhlKCl7cmV0dXJuImNsci10YWJzLSIrZ1hlKyt9fTtsZXQgeVhlPTAsZjY9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxEKXt0aGlzLmlmQWN0aXZlU2Vy''@;'; put 'put ''dmljZT1hLHRoaXMuaWQ9ZCx0aGlzLmVsPWgsdGhpcy50YWJzU2VydmljZT1NLHRoaXMudGFic0lkPUQsdGhpcy50YWJMaW5rSWR8fCh0aGlzLnRhYkxpbmtJZD0iY2xyLXRhYi1saW5rLSIreVhlKyspO2NvbnN0IFU9Zi5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShNM2UpO3RoaXMudGVtcGxh''@;'; put 'put ''dGVSZWZDb250YWluZXI9di5jcmVhdGVDb21wb25lbnQoVSx2b2lkIDAsdm9pZCAwLFtbaC5uYXRpdmVFbGVtZW50XV0pLmluc3RhbmNlfWdldCBpbk92ZXJmbG93KCl7cmV0dXJuIHRoaXMuX2luT3ZlcmZsb3cmJnRoaXMudGFic1NlcnZpY2UubGF5b3V0IT09RjkuVkVSVElDQUx9c2V0IGlu''@;'; put 'put ''T3ZlcmZsb3coYSl7dGhpcy5faW5PdmVyZmxvdz1hfWdldCBhZGRMaW5rQ2xhc3Nlcygpe3JldHVybiF0aGlzLmluT3ZlcmZsb3d9Z2V0IGFyaWFDb250cm9scygpe3JldHVybiB0aGlzLnRhYnNTZXJ2aWNlLmNoaWxkcmVuLmZpbmQoYT0+YS50YWJMaW5rPT09dGhpcyk/LnRhYkNvbnRlbnQ/''@;'; put 'put ''LnRhYkNvbnRlbnRJZH1nZXQgYWN0aXZlKCl7cmV0dXJuIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9PT10aGlzLmlkfWdldCB0YWJpbmRleCgpe3JldHVybiB0aGlzLmFjdGl2ZT8wOi0xfWFjdGl2YXRlKCl7dGhpcy5pZkFjdGl2ZVNlcnZpY2UuY3VycmVudD10aGlzLmlkfX1yZXR1''@;'; put 'put ''cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZSh4OSkscWUodXcpLHFlKG5hKSxxZSh6bSkscWUoYmUpLHFlKHNBKSxxZShNWCkpfSxjLlx1MDI3NWRpcj1Zcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJUYWJMaW5rIiwiIl1dLGhvc3RBdHRyczpbInJv''@;'; put 'put ''bGUiLCJ0YWIiLCJ0eXBlIiwiYnV0dG9uIl0saG9zdFZhcnM6MTIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuYWN0aXZhdGUoKX0pLDImYSYmKGk0KCJpZCIsZC50YWJMaW5rSWQpLE5yKCJhcmlhLWNvbnRyb2xzIixkLmFy''@;'; put 'put ''aWFDb250cm9scykoImFyaWEtc2VsZWN0ZWQiLGQuYWN0aXZlKSgidGFiaW5kZXgiLGQudGFiaW5kZXgpLHhyKCJidG4iLCEwKSgiYnRuLWxpbmsiLGQuYWRkTGlua0NsYXNzZXMpKCJuYXYtbGluayIsZC5hZGRMaW5rQ2xhc3NlcykoImFjdGl2ZSIsZC5hY3RpdmUpKX0saW5wdXRzOnt0YWJM''@;'; put 'put ''aW5rSWQ6WzAsImlkIiwidGFiTGlua0lkIl0saW5PdmVyZmxvdzpbMCwiY2xyVGFiTGlua0luT3ZlcmZsb3ciLCJpbk92ZXJmbG93Il19LHN0YW5kYWxvbmU6ITF9KSxjfSkoKSxwNj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmlmQWN0aXZlU2VydmljZT1hLHRoaXMu''@;'; put 'put ''aWQ9ZCx0aGlzLnRhYnNTZXJ2aWNlPWgsaC5yZWdpc3Rlcih0aGlzKX1nZXQgYWN0aXZlKCl7cmV0dXJuIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9PT10aGlzLmlkfW5nT25EZXN0cm95KCl7dGhpcy50YWJzU2VydmljZS51bnJlZ2lzdGVyKHRoaXMpfX1yZXR1cm4gYy5cdTAyNzVm''@;'; put 'put ''YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZSh4OSkscWUodXcpLHFlKHNBKSl9LGMuXHUwMjc1Y21wPWFyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci10YWIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKHBvKGgsZjYsNykscG8oaCxoNiw3KSks''@;'; put 'put ''MiZhKXtsZXQgZjtnaShmPW1pKCkpJiYoZC50YWJMaW5rPWYuZmlyc3QpLGdpKGY9bWkoKSkmJihkLnRhYkNvbnRlbnQ9Zi5maXJzdCl9fSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltoYShbd0tlXSldLG5nQ29udGVudFNlbGVjdG9yczpUbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5j''@;'; put 'put ''dGlvbihhLGQpezEmYSYmKHNhKCksV3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSx4M2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPVlyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclRh''@;'; put 'put ''YkFjdGlvbiIsIiJdXSxob3N0QXR0cnM6WyJ0YWJpbmRleCIsIjAiXSxzdGFuZGFsb25lOiExfSksY30pKCkseFg9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPWFyKHt0eXBlOmMsc2VsZWN0b3JzOltb''@;'; put 'put ''ImNsci10YWItb3ZlcmZsb3ctY29udGVudCJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmeHIoImRyb3Bkb3duLW1lbnUiLCEwKX0sc3RhbmRhbG9uZTohMSxuZ0NvbnRlbnRTZWxlY3RvcnM6VG8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24o''@;'; put 'put ''YSxkKXsxJmEmJihzYSgpLFdyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksSDk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlPWEsdGhpcy50b2dnbGVTZXJ2aWNlPWQsdGhpcy50YWJzU2VydmljZT1oLHRoaXMudGFic0lkPWYs''@;'; put 'put ''dGhpcy5jb21tb25TdHJpbmdzPXYsdGhpcy50YWJMaW5rRWxlbWVudHM9W10sdGhpcy5fbW91c2Vkb3duPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLl90YWJMaW5rRGlyZWN0aXZlcz1bXX1nZXQgbGF5b3V0KCl7cmV0dXJuIHRoaXMudGFic1NlcnZpY2UubGF5b3V0fXNldCBsYXlv''@;'; put 'put ''dXQoYSl7T2JqZWN0LmtleXMoRjkpLm1hcChkPT5GOVtkXSkuaW5kZXhPZihhKT49MCYmKHRoaXMudGFic1NlcnZpY2UubGF5b3V0PWEpfWdldCB0YWJMaW5rRGlyZWN0aXZlcygpe3JldHVybiB0aGlzLl90YWJMaW5rRGlyZWN0aXZlc31nZXQgYWN0aXZlVGFiSW5PdmVyZmxvdygpe3JldHVy''@;'; put 'put ''biB0aGlzLnRhYnNTZXJ2aWNlLm92ZXJmbG93VGFicy5pbmRleE9mKHRoaXMudGFic1NlcnZpY2UuYWN0aXZlVGFiKT4tMX1nZXQgYWN0aXZlVGFiUG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fdGFiTGlua0RpcmVjdGl2ZXMuZmluZEluZGV4KGE9PmEuYWN0aXZlKX1nZXQgaXNDdXJyZW50SW5P''@;'; put 'put ''dmVyZmxvdygpe3JldHVybiB0aGlzLmtleUZvY3VzLmN1cnJlbnQ+PXRoaXMub3ZlcmZsb3dQb3NpdGlvbn1nZXQgaXNWZXJ0aWNhbCgpe3JldHVybiB0aGlzLmxheW91dD09PUY5LlZFUlRJQ0FMfXNldCB0YWJPdmVyZmxvd0VsKGEpe3RoaXMuX3RhYk92ZXJmbG93RWw9YSYmYS5uYXRpdmVF''@;'; put 'put ''bGVtZW50LHRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiZhJiZ0aGlzLmtleUZvY3VzLmZvY3VzQ3VycmVudCgpfWdldCBvdmVyZmxvd1Bvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3RhYkxpbmtEaXJlY3RpdmVzLmZpbHRlcihhPT4hYS5pbk92ZXJmbG93KS5sZW5ndGh9c2V0IHRhYkNvbnRlbnRW''@;'; put 'put ''aWV3Q29udGFpbmVyKGEpe3RoaXMudGFic1NlcnZpY2UudGFiQ29udGVudFZpZXdDb250YWluZXI9YX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvclRhYkxpbmtDaGFuZ2VzKCkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMu''@;'; put 'put ''bGlzdGVkRm9yVGFic0FjdGlvbnNDaGFuZ2VzKCkpLHR5cGVvZiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PiJ1IiYmdGhpcy50YWJMaW5rRGlyZWN0aXZlc1swXSYmdGhpcy50YWJMaW5rRGlyZWN0aXZlc1swXS5hY3RpdmF0ZSgpLHRoaXMua2V5Rm9jdXMuY3VycmVudD10aGlzLmFj''@;'; put 'put ''dGl2ZVRhYlBvc2l0aW9ufW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+e2EudW5zdWJzY3JpYmUoKX0pfXRvZ2dsZU92ZXJmbG93T25Qb3NpdGlvbihhKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj1hPj10aGlzLm92ZXJmbG93UG9zaXRpb259cmVzZXRLZXlG''@;'; put 'put ''b2N1c0N1cnJlbnRUb0FjdGl2ZShhKXshdGhpcy5rZXlGb2N1cy5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGEucmVsYXRlZFRhcmdldCkmJnRoaXMua2V5Rm9jdXMuY3VycmVudCE9PXRoaXMuYWN0aXZlVGFiUG9zaXRpb24mJih0aGlzLmtleUZvY3VzLmN1cnJlbnQ9dGhpcy5hY3RpdmVUYWJQ''@;'; put 'put ''b3NpdGlvbil9dG9nZ2xlT3ZlcmZsb3dPbkNsaWNrKCl7dGhpcy5rZXlGb2N1cy5tb3ZlVG8odGhpcy5pc0N1cnJlbnRJbk92ZXJmbG93JiZ0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj90aGlzLm92ZXJmbG93UG9zaXRpb24tMTp0aGlzLm92ZXJmbG93UG9zaXRpb24pLHRoaXMuX21vdXNlZG93''@;'; put 'put ''bj0hMX1vcGVuT3ZlcmZsb3dPbkZvY3VzKCl7IXRoaXMuX21vdXNlZG93biYmIXRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiZ0aGlzLmtleUZvY3VzLm1vdmVUbyh0aGlzLmFjdGl2ZVRhYlBvc2l0aW9uKX1jbG9zZU9uRm9jdXNPdXQoYSl7IXRoaXMuX3RhYk92ZXJmbG93RWwuY29udGFpbnMo''@;'; put 'put ''YS5yZWxhdGVkVGFyZ2V0KSYmdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJiF0aGlzLl9tb3VzZWRvd24mJih0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSx0aGlzLnRhYkxpbmtFbGVtZW50c1t0aGlzLmFjdGl2ZVRhYlBvc2l0aW9uXT09PWEucmVsYXRlZFRhcmdldCYmKHRoaXMua2V5Rm9j''@;'; put 'put ''dXMuY3VycmVudD10aGlzLmFjdGl2ZVRhYlBvc2l0aW9uKSl9Y2xvc2VPbkVzY2FwZUtleSgpe3RoaXMua2V5Rm9jdXMubW92ZVRvKHRoaXMub3ZlcmZsb3dQb3NpdGlvbi0xKX1jbG9zZU9uT3V0c2lkZUNsaWNrKGEsZCl7Y29uc3QgaD10aGlzLnRhYnNBY3Rpb25zLnNvbWUoZj0+Zi5uYXRp''@;'; put 'put ''dmVFbGVtZW50LmNvbnRhaW5zKGEudGFyZ2V0KSk7YS50YXJnZXQ9PT1kfHxkLmNvbnRhaW5zKGEudGFyZ2V0KXx8aHx8IXRoaXMuX3RhYk92ZXJmbG93RWwuY29udGFpbnMoYS50YXJnZXQpJiZ0aGlzLmlzQ3VycmVudEluT3ZlcmZsb3cmJnRoaXMua2V5Rm9jdXMubW92ZVRvKHRoaXMub3Zl''@;'; put 'put ''cmZsb3dQb3NpdGlvbi0xKX1zZXRUYWJMaW5rRWxlbWVudHMoKXt0aGlzLl90YWJMaW5rRGlyZWN0aXZlcz10aGlzLnRhYnMubWFwKGE9PmEudGFiTGluayksdGhpcy50YWJMaW5rRWxlbWVudHM9dGhpcy5fdGFiTGlua0RpcmVjdGl2ZXMubWFwKGE9PmEuZWwubmF0aXZlRWxlbWVudCksdGhp''@;'; put 'put ''cy50YWJzQWN0aW9ucyYmdGhpcy50YWJzQWN0aW9ucyYmdGhpcy50YWJMaW5rRWxlbWVudHMucHVzaCguLi50aGlzLnRhYnNBY3Rpb25zLm1hcChhPT5hLm5hdGl2ZUVsZW1lbnQpKX1saXN0ZW5Gb3JUYWJMaW5rQ2hhbmdlcygpe3JldHVybiB0aGlzLnRhYnMuY2hhbmdlcy5waXBlKFNmKHRo''@;'; put 'put ''aXMudGFicy5tYXAoYT0+YS50YWJMaW5rKSkpLnN1YnNjcmliZSgoKT0+dGhpcy5zZXRUYWJMaW5rRWxlbWVudHMoKSl9bGlzdGVkRm9yVGFic0FjdGlvbnNDaGFuZ2VzKCl7cmV0dXJuIHRoaXMudGFic0FjdGlvbnMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9PnRoaXMuc2V0VGFiTGlua0VsZW1l''@;'; put 'put ''bnRzKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZSh4OSkscWUoeWMpLHFlKHNBKSxxZShNWCkscWUocHMpKX0sYy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRhYnMiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24o''@;'; put 'put ''YSxkLGgpe2lmKDEmYSYmKHBvKGgseDNlLDUsbmEpLHBvKGgscDYsNCkpLDImYSl7bGV0IGY7Z2koZj1taSgpKSYmKGQudGFic0FjdGlvbnM9ZiksZ2koZj1taSgpKSYmKGQudGFicz1mKX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKFVhKG13LDcpLFVhKHhYLDUsbmEpLFVh''@;'; put 'put ''KERaZSw3LGJlKSksMiZhKXtsZXQgaDtnaShoPW1pKCkpJiYoZC5rZXlGb2N1cz1oLmZpcnN0KSxnaShoPW1pKCkpJiYoZC50YWJPdmVyZmxvd0VsPWguZmlyc3QpLGdpKGg9bWkoKSkmJihkLnRhYkNvbnRlbnRWaWV3Q29udGFpbmVyPWguZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGlu''@;'; put 'put ''Z3M6ZnVuY3Rpb24oYSxkKXsyJmEmJnhyKCJ0YWJzLXZlcnRpY2FsIixkLmlzVmVydGljYWwpfSxpbnB1dHM6e2xheW91dDpbMCwiY2xyTGF5b3V0IiwibGF5b3V0Il19LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hhKFt4OSxzQSx2WGVdKSx5ZihbbjVdKV0sbmdDb250ZW50U2VsZWN0b3Jz''@;'; put 'put ''OlJaZSxkZWNsczo2LHZhcnM6Myxjb25zdHM6W1sidGFiQ29udGVudFZpZXdDb250YWluZXIiLCIiXSxbInRhYk92ZXJmbG93VHJpZ2dlciIsIiJdLFsicm9sZSIsInRhYmxpc3QiLCJjbHJEaXJlY3Rpb24iLCJib3RoIiwxLCJuYXYiLDMsImNsckZvY3VzQ2hhbmdlIiwiZm9jdXNvdXQiLCJj''@;'; put 'put ''bHJLZXlGb2N1cyJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbNCwibmdJZiJdLFsicm9sZSIsInByZXNlbnRhdGlvbiIsMSwibmF2LWl0ZW0iXSxbMywibmdUZW1wbGF0ZU91dGxldCJdLFsicm9sZSIsInByZXNlbnRhdGlvbiIsMSwidGFicy1vdmVyZmxvdyIsImJvdHRvbS1yaWdodCJdLFsi''@;'; put 'put ''cm9sZSIsImFwcGxpY2F0aW9uIiwxLCJuYXYtaXRlbSJdLFsidHlwZSIsImJ1dHRvbiIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiYnRuIiwiYnRuLWxpbmsiLCJuYXYtbGluayIsImRyb3Bkb3duLXRvZ2dsZSIsMywibW91c2Vkb3duIiwiZm9jdXMiLCJjbGljayJdLFsic2hhcGUiLCJlbGxp''@;'; put 'put ''cHNpcy1ob3Jpem9udGFsIl0sWzMsImtleWRvd24uZXNjYXBlIiwiY2xpY2siLCJmb2N1c291dCIsNCwibmdJZiJdLFszLCJrZXlkb3duLmVzY2FwZSIsImNsaWNrIiwiZm9jdXNvdXQiXSxbMywibmdUZW1wbGF0ZU91dGxldCIsNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe2lm''@;'; put 'put ''KDEmYSl7Y29uc3QgaD1PbigpO3NhKElaZSksZGUoMCwidWwiLDIpLE90KCJjbHJGb2N1c0NoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLEN0KGQudG9nZ2xlT3ZlcmZsb3dPblBvc2l0aW9uKHYpKX0pKCJmb2N1c291dCIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLEN0KGQucmVz''@;'; put 'put ''ZXRLZXlGb2N1c0N1cnJlbnRUb0FjdGl2ZSh2KSl9KSxndCgxLE9aZSwyLDEsIm5nLWNvbnRhaW5lciIsMykoMixOWmUsNywxMSwibmctY29udGFpbmVyIiw0KSxXcigzKSxoZSgpLHpsKDQsbnVsbCwwKX0yJmEmJihFZSgiY2xyS2V5Rm9jdXMiLGQudGFiTGlua0VsZW1lbnRzKSxmZSgpLEVl''@;'; put 'put ''KCJuZ0Zvck9mIixkLnRhYkxpbmtEaXJlY3RpdmVzKSxmZSgpLEVlKCJuZ0lmIixkLnRhYnNTZXJ2aWNlLm92ZXJmbG93VGFicy5sZW5ndGg+MCkpfSxkZXBlbmRlbmNpZXM6W2hzLENhLHlkLGZzLG13LHhYXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxiWGU9KCgpPT57Y2xhc3MgY3tjb25z''@;'; put 'put ''dHJ1Y3Rvcigpe05zLmFkZEljb25zKEoyZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1FaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9eWkoe2ltcG9ydHM6W05hLFJmLFZzLGZYZSxDWCxSZl19KSxjfSkoKSxFWD0oKCk9Pntj''@;'; put 'put ''bGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5uYXZHcm91cENvdW50PTB9cmVnaXN0ZXJOYXZHcm91cCgpe3RoaXMubmF2R3JvdXBDb3VudCsrfXVucmVnaXN0ZXJOYXZHcm91cCgpe3RoaXMubmF2R3JvdXBDb3VudC0tfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5l''@;'; put 'put ''dyhhfHxjKX0sYy5cdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxUWD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5faWNvbnM9MH1nZXQgaGFzSWNvbnMoKXtyZXR1cm4gdGhpcy5faWNvbnM+MH1yZWdpc3Rlckljb24oKXt0aGlzLl9p''@;'; put 'put ''Y29ucysrfXVucmVnaXN0ZXJJY29uKCl7dGhpcy5faWNvbnMtLX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksQVg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1''@;'; put 'put ''Y3Rvcigpe3RoaXMuX2FuaW1hdGVPbkNvbGxhcHNlZD1uZXcgdXIsdGhpcy5fY29sbGFwc2VkQ2hhbmdlZD1uZXcgdXIsdGhpcy5fY29sbGFwc2VkPSExLHRoaXMuX2NvbGxhcHNpYmxlPSExfWdldCBhbmltYXRlT25Db2xsYXBzZWQoKXtyZXR1cm4gdGhpcy5fYW5pbWF0ZU9uQ29sbGFwc2Vk''@;'; put 'put ''LmFzT2JzZXJ2YWJsZSgpfWdldCBjb2xsYXBzZWRDaGFuZ2VkKCl7cmV0dXJuIHRoaXMuX2NvbGxhcHNlZENoYW5nZWQuYXNPYnNlcnZhYmxlKCl9Z2V0IGNvbGxhcHNlZCgpe3JldHVybiB0aGlzLl9jb2xsYXBzZWR9c2V0IGNvbGxhcHNlZChhKXthPSEhYSx0aGlzLmNvbGxhcHNpYmxlJiZ0''@;'; put 'put ''aGlzLl9jb2xsYXBzZWQhPT1hJiZ0aGlzLnVwZGF0ZUNvbGxhcHNlQmVoYXZpb3IoYSl9Z2V0IGNvbGxhcHNpYmxlKCl7cmV0dXJuIHRoaXMuX2NvbGxhcHNpYmxlfXNldCBjb2xsYXBzaWJsZShhKXt0aGlzLl9jb2xsYXBzaWJsZSE9PShhPSEhYSkmJighYSYmdGhpcy5jb2xsYXBzZWQmJnRo''@;'; put 'put ''aXMudXBkYXRlQ29sbGFwc2VCZWhhdmlvcighMSksdGhpcy5fY29sbGFwc2libGU9YSl9dXBkYXRlQ29sbGFwc2VCZWhhdmlvcihhKXt0aGlzLl9hbmltYXRlT25Db2xsYXBzZWQubmV4dChhKSx0aGlzLl9jb2xsYXBzZWQ9YSx0aGlzLl9jb2xsYXBzZWRDaGFuZ2VkLm5leHQoYSl9fXJldHVy''@;'; put 'put ''biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGtYPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5fbmF2U2VydmljZT1hLHRoaXMuX25hdklj''@;'; put 'put ''b25TZXJ2aWNlPWQsdGhpcy5fbmF2R3JvdXBSZWdpc3RyYXRpb25TZXJ2aWNlPWgsdGhpcy5jb21tb25TdHJpbmdzPWYsdGhpcy5jb250ZW50SWQ9T3UoKSx0aGlzLl9jb2xsYXBzZWRDaGFuZ2VkPW5ldyBYcighMCksdGhpcy5fc3ViPWEuY29sbGFwc2VkQ2hhbmdlZC5zdWJzY3JpYmUodj0+''@;'; put 'put ''e3RoaXMuX2NvbGxhcHNlZENoYW5nZWQuZW1pdCh2KX0pfWdldCBjb2xsYXBzaWJsZSgpe3JldHVybiB0aGlzLl9uYXZTZXJ2aWNlLmNvbGxhcHNpYmxlfXNldCBjb2xsYXBzaWJsZShhKXt0aGlzLl9uYXZTZXJ2aWNlLmNvbGxhcHNpYmxlPWF9Z2V0IGNvbGxhcHNlZCgpe3JldHVybiB0aGlz''@;'; put 'put ''Ll9uYXZTZXJ2aWNlLmNvbGxhcHNlZH1zZXQgY29sbGFwc2VkKGEpe3RoaXMuX25hdlNlcnZpY2UuY29sbGFwc2VkPWF9Z2V0IGhhc05hdkdyb3Vwcygpe3JldHVybiB0aGlzLl9uYXZHcm91cFJlZ2lzdHJhdGlvblNlcnZpY2UubmF2R3JvdXBDb3VudD4wfWdldCBoYXNJY29ucygpe3JldHVy''@;'; put 'put ''biB0aGlzLl9uYXZJY29uU2VydmljZS5oYXNJY29uc31nZXQgYXJpYUV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuY29sbGFwc2libGU/dGhpcy5jb2xsYXBzZWQ/ImZhbHNlIjoidHJ1ZSI6bnVsbH1uZ09uRGVzdHJveSgpe3RoaXMuX3N1Yi51bnN1YnNjcmliZSgpfXRvZ2dsZUJ5QnV0dG9uKCl7''@;'; put 'put ''dGhpcy5jb2xsYXBzZWQ9IXRoaXMuY29sbGFwc2VkfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShBWCkscWUoVFgpLHFlKEVYKSxxZShwcykpfSxjLlx1MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdmVydGljYWwtbmF2Il1d''@;'; put 'put ''LGhvc3RBdHRyczpbMSwiY2xyLXZlcnRpY2FsLW5hdiJdLGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZ4cigiaXMtY29sbGFwc2VkIixkLmNvbGxhcHNlZCkoImhhcy1uYXYtZ3JvdXBzIixkLmhhc05hdkdyb3VwcykoImhhcy1pY29ucyIsZC5oYXNJY29ucyl9''@;'; put 'put ''LGlucHV0czp7dG9nZ2xlTGFiZWw6WzAsImNsclZlcnRpY2FsTmF2VG9nZ2xlTGFiZWwiLCJ0b2dnbGVMYWJlbCJdLGNvbGxhcHNpYmxlOlswLCJjbHJWZXJ0aWNhbE5hdkNvbGxhcHNpYmxlIiwiY29sbGFwc2libGUiXSxjb2xsYXBzZWQ6WzAsImNsclZlcnRpY2FsTmF2Q29sbGFwc2VkIiwi''@;'; put 'put ''Y29sbGFwc2VkIl19LG91dHB1dHM6e19jb2xsYXBzZWRDaGFuZ2VkOiJjbHJWZXJ0aWNhbE5hdkNvbGxhcHNlZENoYW5nZSJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hhKFtBWCxUWCxFWF0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6VG8sZGVjbHM6NCx2YXJzOjMsY29uc3RzOltbInR5cGUi''@;'; put 'put ''LCJidXR0b24iLCJjbGFzcyIsIm5hdi10cmlnZ2VyIiwzLCJvbi1jb2xsYXBzZSIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsIm5hdi1jb250ZW50IiwzLCJpZCJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwibmF2LWJ0biIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsInRhYmluZGV4IiwiLTEiLDMs''@;'; put 'put ''ImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJuYXYtdHJpZ2dlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUtZG91YmxlIiwxLCJuYXYtdHJpZ2dlci1pY29uIl0sWyJ0eXBlIiwiYnV0dG9uIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwidGFiaW5kZXgiLCItMSIsMSwi''@;'; put 'put ''bmF2LWJ0biIsMywiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLGd0KDAsVlplLDIsNiwiYnV0dG9uIiwwKSxkZSgxLCJkaXYiLDEpLFdyKDIpLGd0KDMsQlplLDEsMiwiYnV0dG9uIiwyKSxoZSgpKSwyJmEmJihFZSgibmdJZiIsZC5jb2xsYXBzaWJsZSksZmUo''@;'; put 'put ''KSxFZSgiaWQiLGQuY29udGVudElkKSxmZSgyKSxFZSgibmdJZiIsZC5jb2xsYXBzaWJsZSYmZC5jb2xsYXBzZWQpKX0sZGVwZW5kZW5jaWVzOltDYSxmc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksRFg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2V4cGFuZENoYW5nZT1u''@;'; put 'put ''ZXcgdXJ9Z2V0IGV4cGFuZENoYW5nZSgpe3JldHVybiB0aGlzLl9leHBhbmRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9ZXhwYW5kKCl7dGhpcy5fZXhwYW5kQ2hhbmdlLm5leHQoITApfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92''@;'; put 'put ''PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxJWD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmRlc3Ryb3kkPW5ldyB1cixoJiZUZihhLm5hdGl2ZUVsZW1lbnQsImNsaWNrIikucGlwZShMMSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgp''@;'; put 'put ''PT57aC5leHBhbmQoKSxkLm1hcmtGb3JDaGVjaygpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUobmEpLHFlKEhzKSxxZShEWCw4KSl9LGMuXHUwMjc1Y21wPWFyKHt0eXBlOmMs''@;'; put 'put ''c2VsZWN0b3JzOltbIiIsImNsclZlcnRpY2FsTmF2TGluayIsIiJdXSxob3N0QXR0cnM6WzEsIm5hdi1saW5rIl0sc3RhbmRhbG9uZTohMSxhdHRyczpVWmUsbmdDb250ZW50U2VsZWN0b3JzOldaZSxkZWNsczozLHZhcnM6MCxjb25zdHM6W1sxLCJuYXYtdGV4dCJdXSx0ZW1wbGF0ZTpmdW5j''@;'; put 'put ''dGlvbihhLGQpezEmYSYmKHNhKFpaZSksV3IoMCksZGUoMSwic3BhbiIsMCksV3IoMiwxKSxoZSgpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksRTNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtOcy5hZGRJY29ucyhudyxlZmUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o''@;'; put 'put ''YSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9RWkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPXlpKHtpbXBvcnRzOltOYSxWcyxSZixpSCxSZixWcyxpSF19KSxjfSkoKSxTWGU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8''@;'; put 'put ''Yyl9LGMuXHUwMjc1bW9kPUVpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj15aSh7aW1wb3J0czpbb1hlLGhYZSxiWGUsRTNlLGFYZV19KSxjfSkoKSx5dz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgc2Zle2NvbnN0cnVjdG9yKGEsZCxoKXtzdXBlcihhLGQsaCl9fXJldHVybiBjLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKG5hKSxxZShVSykscWUoR3MsOCkpfSxjLlx1MDI3NWRpcj1Zcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtUcmFwRm9jdXMiLCIiXV0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbTGFdfSksY30pKCksZkg9KCgpPT57Y2xhc3MgY3t9''@;'; put 'put ''cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUVpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj15aSh7fSksY30pKCk7Y29uc3QgeFhlPS9kKy4rbSsuK3krL2ksRVhlPS9tKy4rZCsuK3krL2ksVFhlPS9kK3xtK3x5Ky9pLEFYZT0vXGQr''@;'; put 'put ''L2csa1hlPS9Nb2JpL2ksRFhlPS9cdTIwMGYvZyxSWD0iWVlZWSIscEg9e25hbWU6IkxJVFRMRV9FTkRJQU4iLGZvcm1hdDpbIkREIiwiTU0iLFJYXX0sUFg9e25hbWU6Ik1JRERMRV9FTkRJQU4iLGZvcm1hdDpbIk1NIiwiREQiLFJYXX0sSVhlPXtuYW1lOiJCSUdfRU5ESUFOIixmb3JtYXQ6''@;'; put 'put ''W1JYLCJNTSIsIkREIl19O2Z1bmN0aW9uIEEzZShjLGwpe3JldHVybiBuZXcgRGF0ZShjLGwrMSwwKS5nZXREYXRlKCl9Y2xhc3MgRlhle2NvbnN0cnVjdG9yKGwsYT0hMSxkPSExLGg9ITEsZj0hMSx2PSExLE09ITEsRD0hMSl7dGhpcy5kYXlNb2RlbD1sLHRoaXMuaXNUb2RheXNEYXRlPWEs''@;'; put 'put ''dGhpcy5pc0V4Y2x1ZGVkPWQsdGhpcy5pc0Rpc2FibGVkPWgsdGhpcy5pc1NlbGVjdGVkPWYsdGhpcy5pc0ZvY3VzYWJsZT12LHRoaXMuaXNSYW5nZVN0YXJ0RGF5PU0sdGhpcy5pc1JhbmdlRW5kRGF5PUR9Z2V0IHRhYkluZGV4KCl7cmV0dXJuIHRoaXMuaXNGb2N1c2FibGU/MDotMX19Y2xh''@;'; put 'put ''c3MgcGh7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMueWVhcj1sLHRoaXMubW9udGg9YSx0aGlzLmRhdGU9ZH1pc0VxdWFsKGwpe3JldHVybiEhbCYmdGhpcy55ZWFyPT09bC55ZWFyJiZ0aGlzLm1vbnRoPT09bC5tb250aCYmdGhpcy5kYXRlPT09bC5kYXRlfXRvRGF0ZSgpe3JldHVybiBuZXcg''@;'; put 'put ''RGF0ZSh0aGlzLnllYXIsdGhpcy5tb250aCx0aGlzLmRhdGUpfWluY3JlbWVudEJ5KGwpe2NvbnN0IGE9bmV3IERhdGUodGhpcy55ZWFyLHRoaXMubW9udGgsdGhpcy5kYXRlK2wpO3JldHVybiBuZXcgcGgoYS5nZXRGdWxsWWVhcigpLGEuZ2V0TW9udGgoKSxhLmdldERhdGUoKSl9Y2xvbmUo''@;'; put 'put ''KXtyZXR1cm4gbmV3IHBoKHRoaXMueWVhcix0aGlzLm1vbnRoLHRoaXMuZGF0ZSl9dG9Db21wYXJpc29uU3RyaW5nKCl7cmV0dXJuYCR7dGhpcy55ZWFyfSR7dGhpcy5wYWQodGhpcy5tb250aCl9JHt0aGlzLnBhZCh0aGlzLmRhdGUpfWB9dG9EYXRlU3RyaW5nKCl7cmV0dXJuIHRoaXMudG9E''@;'; put 'put ''YXRlKCkudG9Mb2NhbGVEYXRlU3RyaW5nKHZvaWQgMCx7d2Vla2RheToibG9uZyIsbW9udGg6ImxvbmciLGRheToibnVtZXJpYyIseWVhcjoibnVtZXJpYyJ9KX1pc0JlZm9yZShsLGE9ITEpe3JldHVybiBhP3RoaXMudG9EYXRlKCkuZ2V0VGltZSgpPD1sPy50b0RhdGUoKS5nZXRUaW1lKCk6''@;'; put 'put ''dGhpcy50b0RhdGUoKS5nZXRUaW1lKCk8bD8udG9EYXRlKCkuZ2V0VGltZSgpfWlzQWZ0ZXIobCxhPSExKXtyZXR1cm4gYT90aGlzLnRvRGF0ZSgpLmdldFRpbWUoKT49bD8udG9EYXRlKCkuZ2V0VGltZSgpOnRoaXMudG9EYXRlKCkuZ2V0VGltZSgpPmw/LnRvRGF0ZSgpLmdldFRpbWUoKX1w''@;'; put 'put ''YWQobCl7cmV0dXJuIGw8MTA/YDAke2x9YDpgJHtsfWB9fWNsYXNzIEhYZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdixNKXt0aGlzLmNhbGVuZGFyPWwsdGhpcy5zZWxlY3RlZERheT1hLHRoaXMuc2VsZWN0ZWRFbmREYXk9ZCx0aGlzLmZvY3VzYWJsZURheT1oLHRoaXMudG9kYXk9Zix0aGlz''@;'; put 'put ''LmZpcnN0RGF5T2ZXZWVrPXYsdGhpcy5leGNsdWRlZERhdGVzPU0sdGhpcy5jdXJyTW9udGhEYXlWaWV3cz1bXSx0aGlzLmluaXRpYWxpemVDYWxlbmRhclZpZXcoKX1nZXQgY2FsZW5kYXJWaWV3KCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyVmlld311cGRhdGVGb2N1c2FibGVEYXkobCl7dGhp''@;'; put 'put ''cy5zZXRGb2N1c2FibGVGbGFnKHRoaXMuZm9jdXNhYmxlRGF5LCExKSx0aGlzLnNldEZvY3VzYWJsZUZsYWcobCwhMCksdGhpcy5mb2N1c2FibGVEYXk9bH11cGRhdGVTZWxlY3RlZERheShsKXt0aGlzLnNldFNlbGVjdGVkRGF5KHRoaXMuc2VsZWN0ZWREYXksITEpLHRoaXMuc2VsZWN0ZWRE''@;'; put 'put ''YXk9bCx0aGlzLnNldFNlbGVjdGVkRGF5KGwsITApfXVwZGF0ZVNlbGVjdGVkRW5kRGF5KGwpe3RoaXMuc2V0U2VsZWN0ZWREYXkodGhpcy5zZWxlY3RlZEVuZERheSwhMSksdGhpcy5zZWxlY3RlZEVuZERheT1sLHRoaXMuc2V0U2VsZWN0ZWREYXkobCwhMCl9aW5pdGlhbGl6ZUNhbGVuZGFy''@;'; put 'put ''Vmlldygpe2NvbnN0IGw9dGhpcy5jYWxlbmRhci5wcmV2aW91c01vbnRoKCksYT10aGlzLmNhbGVuZGFyLm5leHRNb250aCgpLGQ9dGhpcy5udW1EYXlzRnJvbVByZXZNb250aEluQ2FsVmlldyh0aGlzLmNhbGVuZGFyLnllYXIsdGhpcy5jYWxlbmRhci5tb250aCksaD00Mi0odGhpcy5jYWxl''@;'; put 'put ''bmRhci5kYXlzLmxlbmd0aCtkKTtsZXQgZj1bXSx2PVtdO2Q+MCYmKGY9dGhpcy5nZW5lcmF0ZURheVZpZXdNb2RlbHMobC5kYXlzLnNsaWNlKC0xKmQpLCEwLCExKSksdGhpcy5jdXJyTW9udGhEYXlWaWV3cz10aGlzLmdlbmVyYXRlRGF5Vmlld01vZGVscyh0aGlzLmNhbGVuZGFyLmRheXMs''@;'; put 'put ''ITEsITApLGg+MCYmKHY9dGhpcy5nZW5lcmF0ZURheVZpZXdNb2RlbHMoYS5kYXlzLnNsaWNlKDAsaCksITAsITEpKSx0aGlzLl9jYWxlbmRhclZpZXc9dGhpcy5nZW5lcmF0ZUNhbGVuZGFyVmlldyhmLHRoaXMuY3Vyck1vbnRoRGF5Vmlld3MsdiksdGhpcy5pbml0aWFsaXplU2VsZWN0ZWRE''@;'; put 'put ''YXkoKSx0aGlzLmluaXRpYWxpemVGb2N1c2FibGVEYXkoKX1pc0RhdGVFeGNsdWRlZChsKXtjb25zdHttaW5EYXRlOmEsbWF4RGF0ZTpkfT10aGlzLmV4Y2x1ZGVkRGF0ZXMsaD1hLnRvQ29tcGFyaXNvblN0cmluZygpLGY9ZC50b0NvbXBhcmlzb25TdHJpbmcoKSx2PWwudG9Db21wYXJpc29u''@;'; put 'put ''U3RyaW5nKCk7cmV0dXJuISh2Pj1oJiZ2PD1mKX1nZW5lcmF0ZURheVZpZXdNb2RlbHMobCxhLGQpe2NvbnN0IGg9bC5tYXAoZj0+bmV3IEZYZShmLCExLGEsdGhpcy5pc0RhdGVFeGNsdWRlZChmKSwhMSwhMSkpO3JldHVybiBkJiZ0aGlzLmNhbGVuZGFyLmlzRGF5SW5DYWxlbmRhcih0aGlz''@;'; put 'put ''LnRvZGF5KSYmKGhbdGhpcy50b2RheS5kYXRlLTFdLmlzVG9kYXlzRGF0ZT0hMCksaH1udW1EYXlzRnJvbVByZXZNb250aEluQ2FsVmlldyhsLGEpe2NvbnN0IGQ9ZnVuY3Rpb24gTFhlKGMsbCxhKXtyZXR1cm4gbmV3IERhdGUoYyxsLGEpLmdldERheSgpfShsLGEsMSk7cmV0dXJuIGQ+PXRo''@;'; put 'put ''aXMuZmlyc3REYXlPZldlZWs/ZC10aGlzLmZpcnN0RGF5T2ZXZWVrOjcrZC10aGlzLmZpcnN0RGF5T2ZXZWVrfWlzRGF5SW5DYWxlbmRhclZpZXcobCl7cmV0dXJuISF0aGlzLmNhbGVuZGFyLmlzRGF5SW5DYWxlbmRhcihsKX1nZW5lcmF0ZUNhbGVuZGFyVmlldyhsLGEsZCl7Y29uc3QgaD1b''@;'; put 'put ''Li4ubCwuLi5hLC4uLmRdLGY9W107Zm9yKGxldCB2PTA7djw2O3YrKylmW3ZdPWguc2xpY2UoNyp2LDcqKHYrMSkpO3JldHVybiBmfWluaXRpYWxpemVTZWxlY3RlZERheSgpe3RoaXMuc2V0U2VsZWN0ZWREYXkodGhpcy5zZWxlY3RlZERheSwhMCksdGhpcy5zZXRTZWxlY3RlZERheSh0aGlz''@;'; put 'put ''LnNlbGVjdGVkRW5kRGF5LCEwKX1pbml0aWFsaXplRm9jdXNhYmxlRGF5KCl7dGhpcy5mb2N1c2FibGVEYXkmJnRoaXMuaXNEYXlJbkNhbGVuZGFyVmlldyh0aGlzLmZvY3VzYWJsZURheSk/dGhpcy5zZXRGb2N1c2FibGVGbGFnKHRoaXMuZm9jdXNhYmxlRGF5LCEwKTp0aGlzLnNlbGVjdGVk''@;'; put 'put ''RGF5JiZ0aGlzLmlzRGF5SW5DYWxlbmRhclZpZXcodGhpcy5zZWxlY3RlZERheSk/KHRoaXMuc2V0Rm9jdXNhYmxlRmxhZyh0aGlzLnNlbGVjdGVkRGF5LCEwKSx0aGlzLmZvY3VzYWJsZURheT10aGlzLnNlbGVjdGVkRGF5LmNsb25lKCkpOnRoaXMuc2VsZWN0ZWRFbmREYXkmJnRoaXMuaXNE''@;'; put 'put ''YXlJbkNhbGVuZGFyVmlldyh0aGlzLnNlbGVjdGVkRW5kRGF5KT8odGhpcy5zZXRGb2N1c2FibGVGbGFnKHRoaXMuc2VsZWN0ZWRFbmREYXksITApLHRoaXMuZm9jdXNhYmxlRGF5PXRoaXMuc2VsZWN0ZWRFbmREYXkuY2xvbmUoKSk6dGhpcy5pc0RheUluQ2FsZW5kYXJWaWV3KHRoaXMudG9k''@;'; put 'put ''YXkpPyh0aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy50b2RheSwhMCksdGhpcy5mb2N1c2FibGVEYXk9dGhpcy50b2RheS5jbG9uZSgpKToodGhpcy5mb2N1c2FibGVEYXk9bmV3IHBoKHRoaXMuY2FsZW5kYXIueWVhcix0aGlzLmNhbGVuZGFyLm1vbnRoLDE1KSx0aGlzLnNldEZvY3VzYWJs''@;'; put 'put ''ZUZsYWcodGhpcy5mb2N1c2FibGVEYXksITApKX1zZXRGb2N1c2FibGVGbGFnKGwsYSl7bCYmKHRoaXMuY3Vyck1vbnRoRGF5Vmlld3NbbC5kYXRlLTFdLmlzRm9jdXNhYmxlPWEpfXNldFNlbGVjdGVkRGF5KGwsYSl7bCYmdGhpcy5pc0RheUluQ2FsZW5kYXJWaWV3KGwpJiYodGhpcy5jdXJy''@;'; put 'put ''TW9udGhEYXlWaWV3c1tsPy5kYXRlLTFdLmlzU2VsZWN0ZWQ9YSl9fWxldCBjQT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMubG9jYWxlPWEsdGhpcy5fZmlyc3REYXlPZldlZWs9MCx0aGlzLmluaXRpYWxpemVMb2NhbGVEYXRhKCl9Z2V0IGZpcnN0RGF5T2ZXZWVrKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuX2ZpcnN0RGF5T2ZXZWVrfWdldCBsb2NhbGVEYXlzKCl7cmV0dXJuIHRoaXMuX2xvY2FsZURheXN9Z2V0IGxvY2FsZURheXNOYXJyb3coKXtyZXR1cm4gdGhpcy5fbG9jYWxlRGF5cy5tYXAoYT0+YS5uYXJyb3cpfWdldCBsb2NhbGVNb250aHNBYmJyZXZpYXRlZCgpe3JldHVy''@;'; put 'put ''biB0aGlzLl9sb2NhbGVNb250aHNBYmJyZXZpYXRlZH1nZXQgbG9jYWxlTW9udGhzV2lkZSgpe3JldHVybiB0aGlzLl9sb2NhbGVNb250aHNXaWRlfWdldCBsb2NhbGVEYXRlRm9ybWF0KCl7cmV0dXJuIHRoaXMuX2xvY2FsZURhdGVGb3JtYXR9aW5pdGlhbGl6ZUxvY2FsZURhdGEoKXt0aGlz''@;'; put 'put ''LmluaXRpYWxpemVGaXJzdERheU9mV2VlaygpLHRoaXMuaW5pdGlhbGl6ZUxvY2FsZURhdGVGb3JtYXQoKSx0aGlzLmluaXRpYWxpemVMb2NhbGVNb250aHNBYmJyZXZpYXRlZCgpLHRoaXMuaW5pdGlhbGl6ZUxvY2FsZU1vbnRoc1dpZGUoKSx0aGlzLmluaXRpYWxpemVMb2NhbGVEYXlzKCl9''@;'; put 'put ''aW5pdGlhbGl6ZUxvY2FsZURheXMoKXtjb25zdCBhPVtdLGQ9dUcodGhpcy5sb2NhbGUsUzAuU3RhbmRhbG9uZSxDbC5XaWRlKS5zbGljZSgpLGg9dUcodGhpcy5sb2NhbGUsUzAuU3RhbmRhbG9uZSxDbC5OYXJyb3cpLnNsaWNlKCksZj10aGlzLmZpcnN0RGF5T2ZXZWVrO2ZvcihsZXQgdj0w''@;'; put 'put ''O3Y8Nzt2KyspYS5wdXNoKHtkYXk6ZFt2XSxuYXJyb3c6aFt2XX0pO2lmKGY+MCl7Y29uc3Qgdj1hLnNwbGljZSgwLGYpO2EucHVzaCguLi52KX10aGlzLl9sb2NhbGVEYXlzPWF9aW5pdGlhbGl6ZUxvY2FsZU1vbnRoc0FiYnJldmlhdGVkKCl7dGhpcy5fbG9jYWxlTW9udGhzQWJicmV2aWF0''@;'; put 'put ''ZWQ9ZEcodGhpcy5sb2NhbGUsUzAuU3RhbmRhbG9uZSxDbC5BYmJyZXZpYXRlZCkuc2xpY2UoKX1pbml0aWFsaXplTG9jYWxlTW9udGhzV2lkZSgpe3RoaXMuX2xvY2FsZU1vbnRoc1dpZGU9ZEcodGhpcy5sb2NhbGUsUzAuU3RhbmRhbG9uZSxDbC5XaWRlKS5zbGljZSgpfWluaXRpYWxpemVG''@;'; put 'put ''aXJzdERheU9mV2Vlaygpe3RoaXMuX2ZpcnN0RGF5T2ZXZWVrPWZ1bmN0aW9uIGJUZShjKXtyZXR1cm4gRDEoYylbYWMuRmlyc3REYXlPZldlZWtdfSh0aGlzLmxvY2FsZSl9aW5pdGlhbGl6ZUxvY2FsZURhdGVGb3JtYXQoKXt0aGlzLl9sb2NhbGVEYXRlRm9ybWF0PWZ1bmN0aW9uIEhFKGMs''@;'; put 'put ''bCl7cmV0dXJuIHdmKEQxKGMpW2FjLkRhdGVGb3JtYXRdLGwpfSh0aGlzLmxvY2FsZSxpaC5TaG9ydCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEhyKHM0KSl9LGMuXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSks''@;'; put 'put ''Y30pKCk7Y2xhc3MgZ2h7Y29uc3RydWN0b3IobCxhKXt0aGlzLnllYXI9bCx0aGlzLm1vbnRoPWEsdGhpcy5pbml0aWFsaXplRGF5c0luQ2FsZW5kYXIoKX1pc0VxdWFsKGwpe3JldHVybiEhbCYmdGhpcy55ZWFyPT09bC55ZWFyJiZ0aGlzLm1vbnRoPT09bC5tb250aH1pc0RheUluQ2FsZW5k''@;'; put 'put ''YXIobCl7cmV0dXJuISFsJiZ0aGlzLnllYXI9PT1sLnllYXImJnRoaXMubW9udGg9PT1sLm1vbnRofXByZXZpb3VzTW9udGgoKXtyZXR1cm4gMD09PXRoaXMubW9udGg/bmV3IGdoKHRoaXMueWVhci0xLDExKTpuZXcgZ2godGhpcy55ZWFyLHRoaXMubW9udGgtMSl9bmV4dE1vbnRoKCl7cmV0''@;'; put 'put ''dXJuIDExPT09dGhpcy5tb250aD9uZXcgZ2godGhpcy55ZWFyKzEsMCk6bmV3IGdoKHRoaXMueWVhcix0aGlzLm1vbnRoKzEpfXByZXZpb3VzWWVhcigpe3JldHVybiBuZXcgZ2godGhpcy55ZWFyLTEsdGhpcy5tb250aCl9bmV4dFllYXIoKXtyZXR1cm4gbmV3IGdoKHRoaXMueWVhcisxLHRo''@;'; put 'put ''aXMubW9udGgpfWluaXRpYWxpemVEYXlzSW5DYWxlbmRhcigpe2NvbnN0IGw9QTNlKHRoaXMueWVhcix0aGlzLm1vbnRoKTt0aGlzLmRheXM9QXJyYXkobCkuZmlsbChudWxsKS5tYXAoKGEsZCk9Pm5ldyBwaCh0aGlzLnllYXIsdGhpcy5tb250aCxkKzEpKX19bGV0IGIyPSgoKT0+e2NsYXNz''@;'; put 'put ''IGN7Y29uc3RydWN0b3IoKXt0aGlzLmlzUmFuZ2VQaWNrZXI9ITEsdGhpcy5oYXNBY3Rpb25CdXR0b25zPSExLHRoaXMuX3RvZGF5c0Z1bGxEYXRlPW5ldyBEYXRlLHRoaXMuX3NlbGVjdGVkRGF5Q2hhbmdlPW5ldyB1cix0aGlzLl9zZWxlY3RlZEVuZERheUNoYW5nZT1uZXcgdXIsdGhpcy5f''@;'; put 'put ''ZGlzcGxheWVkQ2FsZW5kYXJDaGFuZ2U9bmV3IHVyLHRoaXMuX2ZvY3VzT25DYWxlbmRhckNoYW5nZT1uZXcgdXIsdGhpcy5fcmVmcmVzaENhbGVuZGFyVmlldz1uZXcgdXIsdGhpcy5fZm9jdXNlZERheUNoYW5nZT1uZXcgdXJ9Z2V0IHRvZGF5KCl7cmV0dXJuIHRoaXMuX3RvZGF5fWdldCBk''@;'; put 'put ''aXNwbGF5ZWRDYWxlbmRhcigpe3JldHVybiB0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcn1nZXQgc2VsZWN0ZWREYXlDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWREYXlDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IHNlbGVjdGVkRW5kRGF5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX3NlbGVj''@;'; put 'put ''dGVkRW5kRGF5Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBkaXNwbGF5ZWRDYWxlbmRhckNoYW5nZSgpe3JldHVybiB0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhckNoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgZm9jdXNPbkNhbGVuZGFyQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2ZvY3VzT25DYWxl''@;'; put 'put ''bmRhckNoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgZm9jdXNlZERheUNoYW5nZSgpe3JldHVybiB0aGlzLl9mb2N1c2VkRGF5Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoTTAoYT0+dGhpcy5mb2N1c2VkRGF5PWEpKX1nZXQgcmVmcmVzaENhbGVuZGFyVmlldygpe3JldHVybiB0aGlzLl9y''@;'; put 'put ''ZWZyZXNoQ2FsZW5kYXJWaWV3LmFzT2JzZXJ2YWJsZSgpfW5vdGlmeVNlbGVjdGVkRGF5Q2hhbmdlZChhLHtlbWl0RXZlbnQ6ZH09e2VtaXRFdmVudDohMH0pe2lmKHRoaXMuaXNSYW5nZVBpY2tlcil7Y29uc3R7c3RhcnREYXRlOmgsZW5kRGF0ZTpmfT1hO2gmJmY/KHRoaXMuc2V0U2VsZWN0''@;'; put 'put ''ZWREYXkoaCxkKSx0aGlzLnNldFNlbGVjdGVkRW5kRGF5KGYsZCkpOihudWxsIT09ZiYmdGhpcy5zZXRTZWxlY3RlZEVuZERheShmLGQpLG51bGwhPT1oJiZ0aGlzLnNldFNlbGVjdGVkRGF5KGgsZCkpfWVsc2UgdGhpcy5zZXRTZWxlY3RlZERheShhLGQpO3RoaXMuX3JlZnJlc2hDYWxlbmRh''@;'; put 'put ''clZpZXcubmV4dCgpfWluaXRpYWxpemVDYWxlbmRhcigpe3RoaXMuZm9jdXNlZERheT1udWxsLHRoaXMuaW5pdGlhbGl6ZVRvZGF5c0RhdGUoKSx0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcj10aGlzLnNlbGVjdGVkRGF5P25ldyBnaCh0aGlzLnNlbGVjdGVkRGF5LnllYXIsdGhpcy5zZWxlY3Rl''@;'; put 'put ''ZERheS5tb250aCk6bmV3IGdoKHRoaXMudG9kYXkueWVhcix0aGlzLnRvZGF5Lm1vbnRoKX1jaGFuZ2VNb250aChhKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKG5ldyBnaCh0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci55ZWFyLGEpKX1jaGFuZ2VZZWFyKGEpe3RoaXMuc2V0RGlzcGxheWVk''@;'; put 'put ''Q2FsZW5kYXIobmV3IGdoKGEsdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIubW9udGgpKX1tb3ZlVG9OZXh0TW9udGgoKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyLm5leHRNb250aCgpKX1tb3ZlVG9QcmV2aW91c01vbnRoKCl7dGhpcy5zZXREaXNw''@;'; put 'put ''bGF5ZWRDYWxlbmRhcih0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5wcmV2aW91c01vbnRoKCkpfW1vdmVUb05leHRZZWFyKCl7dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcih0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5uZXh0WWVhcigpKX1tb3ZlVG9QcmV2aW91c1llYXIoKXt0aGlzLnNldERp''@;'; put 'put ''c3BsYXllZENhbGVuZGFyKHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyLnByZXZpb3VzWWVhcigpKX1tb3ZlVG9DdXJyZW50TW9udGgoKXt0aGlzLmRpc3BsYXllZENhbGVuZGFyLmlzRGF5SW5DYWxlbmRhcih0aGlzLnRvZGF5KXx8dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcihuZXcgZ2godGhp''@;'; put 'put ''cy50b2RheS55ZWFyLHRoaXMudG9kYXkubW9udGgpKSx0aGlzLl9mb2N1c09uQ2FsZW5kYXJDaGFuZ2UubmV4dCgpfW1vdmVUb1NwZWNpZmljTW9udGgoYSl7dGhpcy5kaXNwbGF5ZWRDYWxlbmRhci5pc0RheUluQ2FsZW5kYXIoYSl8fHRoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIobmV3IGdo''@;'; put 'put ''KGEueWVhcixhLm1vbnRoKSl9aW5jcmVtZW50Rm9jdXNEYXkoYSl7dGhpcy5ob3ZlcmVkRGF5PXRoaXMuZm9jdXNlZERheT10aGlzLmZvY3VzZWREYXkuaW5jcmVtZW50QnkoYSksdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIuaXNEYXlJbkNhbGVuZGFyKHRoaXMuZm9jdXNlZERheSk/dGhpcy5f''@;'; put 'put ''Zm9jdXNlZERheUNoYW5nZS5uZXh0KHRoaXMuZm9jdXNlZERheSk6dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcihuZXcgZ2godGhpcy5mb2N1c2VkRGF5LnllYXIsdGhpcy5mb2N1c2VkRGF5Lm1vbnRoKSksdGhpcy5fZm9jdXNPbkNhbGVuZGFyQ2hhbmdlLm5leHQoKX1yZXNldFNlbGVjdGVk''@;'; put 'put ''RGF5KCl7dGhpcy5zZWxlY3RlZERheT10aGlzLnBlcnNpc3RlZERhdGUsdGhpcy5zZWxlY3RlZEVuZERheT10aGlzLnBlcnNpc3RlZEVuZERhdGV9Y29udmVydERhdGVUb0RheU1vZGVsKGEpe3JldHVybiBuZXcgcGgoYS5nZXRGdWxsWWVhcigpLGEuZ2V0TW9udGgoKSxhLmdldERhdGUoKSl9''@;'; put 'put ''c2V0U2VsZWN0ZWREYXkoYSxkKXt0aGlzLnNlbGVjdGVkRGF5PWEsZCYmdGhpcy5fc2VsZWN0ZWREYXlDaGFuZ2UubmV4dChhKX1zZXRTZWxlY3RlZEVuZERheShhLGQpe3RoaXMuc2VsZWN0ZWRFbmREYXk9YSxkJiZ0aGlzLl9zZWxlY3RlZEVuZERheUNoYW5nZS5uZXh0KGEpfXNldERpc3Bs''@;'; put 'put ''YXllZENhbGVuZGFyKGEpe3RoaXMuX2Rpc3BsYXllZENhbGVuZGFyLmlzRXF1YWwoYSl8fCh0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcj1hLHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyQ2hhbmdlLm5leHQoKSl9aW5pdGlhbGl6ZVRvZGF5c0RhdGUoKXt0aGlzLl90b2RheXNGdWxsRGF0ZT1uZXcg''@;'; put 'put ''RGF0ZSx0aGlzLl90b2RheT1uZXcgcGgodGhpcy5fdG9kYXlzRnVsbERhdGUuZ2V0RnVsbFllYXIoKSx0aGlzLl90b2RheXNGdWxsRGF0ZS5nZXRNb250aCgpLHRoaXMuX3RvZGF5c0Z1bGxEYXRlLmdldERhdGUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3''@;'; put 'put ''KGF8fGMpfSxjLlx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGc2PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9uZ1pvbmU9YSx0aGlzLnBsYXRmb3JtSWQ9ZH1mb2N1c0NlbGwoYSl7dGhpcy5fbmdab25lLnJ1bk91dHNpZGVB''@;'; put 'put ''bmd1bGFyKCgpPT57dGhpcy5uZ1pvbmVJc1N0YWJsZUluQnJvd3NlcigpLnN1YnNjcmliZSgoKT0+e2NvbnN0IGQ9YS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1t0YWJpbmRleD0iMCJdJyk7ZCYmZC5mb2N1cygpfSl9KX1mb2N1c0lucHV0KGEpe3RoaXMuX25nWm9uZS5ydW5PdXRz''@;'; put 'put ''aWRlQW5ndWxhcigoKT0+dGhpcy5uZ1pvbmVJc1N0YWJsZUluQnJvd3NlcigpLnN1YnNjcmliZSgoKT0+YS5mb2N1cygpKSl9ZWxlbWVudElzRm9jdXNlZChhKXtyZXR1cm4gd2wodGhpcy5wbGF0Zm9ybUlkKSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PWF9bmdab25lSXNTdGFibGVJbkJy''@;'; put 'put ''b3dzZXIoKXtyZXR1cm4gdGhpcy5fbmdab25lLm9uU3RhYmxlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoUW0oKSxvYygoKT0+d2wodGhpcy5wbGF0Zm9ybUlkKSkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShIcihYYSksSHIodWwpKX0sYy5cdTAyNzVw''@;'; put 'put ''cm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxvNT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZGlzYWJsZWREYXRlcz17bWluRGF0ZTpuZXcgcGgoMCwwLDEpLG1heERhdGU6bmV3IHBoKDk5OTksMTEsMzEpfSx0aGlzLmNsZHJMb2NhbGVEYXRl''@;'; put 'put ''Rm9ybWF0PSJkZC9NTS95Iix0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQ9cEgsdGhpcy5kZWxpbWl0ZXJzPVsiLyIsIi8iXSx0aGlzLmNsZHJMb2NhbGVEYXRlRm9ybWF0PWEubG9jYWxlRGF0ZUZvcm1hdCx0aGlzLmluaXRpYWxpemVMb2NhbGVEaXNwbGF5Rm9ybWF0KCl9Z2V0IHBsYWNlaG9s''@;'; put 'put ''ZGVyVGV4dCgpe2NvbnN0IGE9dGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0LmZvcm1hdDtyZXR1cm4gYVswXSt0aGlzLmRlbGltaXRlcnNbMF0rYVsxXSt0aGlzLmRlbGltaXRlcnNbMV0rYVsyXX1zZXRNaW5EYXRlKGEpe2lmKGEpe2NvbnN0W2QsaCxmXT1hLnNwbGl0KCItIikubWFwKHY9PnBh''@;'; put 'put ''cnNlSW50KHYsMTApKTt0aGlzLmRpc2FibGVkRGF0ZXMubWluRGF0ZT1uZXcgcGgoZCxoLTEsZil9ZWxzZSB0aGlzLmRpc2FibGVkRGF0ZXMubWluRGF0ZT1uZXcgcGgoMCwwLDEpfXNldE1heERhdGUoYSl7aWYoYSl7Y29uc3RbZCxoLGZdPWEuc3BsaXQoIi0iKS5tYXAodj0+cGFyc2VJbnQo''@;'; put 'put ''diwxMCkpO3RoaXMuZGlzYWJsZWREYXRlcy5tYXhEYXRlPW5ldyBwaChkLGgtMSxmKX1lbHNlIHRoaXMuZGlzYWJsZWREYXRlcy5tYXhEYXRlPW5ldyBwaCg5OTk5LDExLDMxKX1zZXRSYW5nZU9wdGlvbnMoYSl7Y29uc3QgZD10aGlzLnZhbGlkYXRlRGF0ZVJhbmdlT3B0aW9ucyhhKTt0aGlz''@;'; put 'put ''LmRhdGVSYW5nZU9wdGlvbnM9ZHx8W119Z2V0UmFuZ2VPcHRpb25zKCl7cmV0dXJuIHRoaXMuZGF0ZVJhbmdlT3B0aW9uc310b0xvY2FsZURpc3BsYXlGb3JtYXRTdHJpbmcoYSl7aWYoYSl7aWYoaXNOYU4oYS5nZXRUaW1lKCkpKXJldHVybiIiO2NvbnN0IGQ9YS5nZXREYXRlKCksaD1hLmdl''@;'; put 'put ''dE1vbnRoKCkrMSxmPWQ+OT9kLnRvU3RyaW5nKCk6IjAiK2Qsdj1oPjk/aC50b1N0cmluZygpOiIwIitoO3JldHVybiB0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQ9PT1wSD9mK3RoaXMuZGVsaW1pdGVyc1swXSt2K3RoaXMuZGVsaW1pdGVyc1sxXSthLmdldEZ1bGxZZWFyKCk6dGhpcy5sb2Nh''@;'; put 'put ''bGVEaXNwbGF5Rm9ybWF0PT09UFg/dit0aGlzLmRlbGltaXRlcnNbMF0rZit0aGlzLmRlbGltaXRlcnNbMV0rYS5nZXRGdWxsWWVhcigpOmEuZ2V0RnVsbFllYXIoKSt0aGlzLmRlbGltaXRlcnNbMF0rdit0aGlzLmRlbGltaXRlcnNbMV0rZn1yZXR1cm4iIn1nZXREYXRlVmFsdWVGcm9tRGF0''@;'; put 'put ''ZVN0cmluZyhhKXtpZighYXx8InN0cmluZyIhPXR5cGVvZiBhKXJldHVybiBudWxsO2NvbnN0IGQ9YS5tYXRjaChBWGUpO2lmKCFkfHwzIT09ZC5sZW5ndGgpcmV0dXJuIG51bGw7Y29uc3RbaCxmLHZdPWQ7cmV0dXJuIHRoaXMubG9jYWxlRGlzcGxheUZvcm1hdD09PXBIP3RoaXMudmFsaWRh''@;'; put 'put ''dGVBbmRHZXREYXRlKHYsZixoKTp0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQ9PT1QWD90aGlzLnZhbGlkYXRlQW5kR2V0RGF0ZSh2LGgsZik6dGhpcy52YWxpZGF0ZUFuZEdldERhdGUoaCxmLHYpfXZhbGlkYXRlRGF0ZVJhbmdlT3B0aW9ucyhhKXtjb25zdCBkPVtdO3JldHVybiBhPy5mb3JF''@;'; put 'put ''YWNoKGg9PnsyIT09aD8udmFsdWU/Lmxlbmd0aHx8IltvYmplY3QgRGF0ZV0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGg/LnZhbHVlWzBdKXx8IltvYmplY3QgRGF0ZV0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGg/LnZhbHVlWzFdKXx8ZC5wdXNoKGgp''@;'; put 'put ''fSksZH1pbml0aWFsaXplTG9jYWxlRGlzcGxheUZvcm1hdCgpe2NvbnN0IGE9dGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdC50b0xvY2FsZUxvd2VyQ2FzZSgpO3RoaXMubG9jYWxlRGlzcGxheUZvcm1hdD14WGUudGVzdChhKT9wSDpFWGUudGVzdChhKT9QWDpJWGUsdGhpcy5leHRyYWN0RGVs''@;'; put 'put ''aW1pdGVycygpfWV4dHJhY3REZWxpbWl0ZXJzKCl7aWYodGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdCl7Y29uc3QgZD10aGlzLmNsZHJMb2NhbGVEYXRlRm9ybWF0LnJlcGxhY2UoRFhlLCIiKS5zcGxpdChUWGUpO2QmJjQ9PT1kLmxlbmd0aD90aGlzLmRlbGltaXRlcnM9W2RbMV0sZFsyXV06''@;'; put 'put ''Y29uc29sZS5lcnJvcigiVW5leHBlY3RlZCBkYXRlIGZvcm1hdCByZWNlaXZlZC4gRGVsaW1pdGVycyBleHRyYWN0ZWQ6ICIsZCl9fWlzVmFsaWRNb250aChhKXtyZXR1cm4gYT4tMSYmYTwxMn1pc1ZhbGlkRGF0ZShhLGQsaCl7cmV0dXJuIGg+MCYmaDw9QTNlKGEsZCl9dmFsaWRhdGVBbmRH''@;'; put 'put ''ZXREYXRlKGEsZCxoKXtjb25zdCBmPSthLHY9K2QtMSxNPStoO2lmKCF0aGlzLmlzVmFsaWRNb250aCh2KXx8IXRoaXMuaXNWYWxpZERhdGUoZix2LE0pKXJldHVybiBudWxsO2NvbnN0IEQ9ZnVuY3Rpb24gT1hlKGMpe2lmKGM+OTk5OXx8Yz4xMDAmJmM8OTk5fHxjPDEwKXJldHVybi0xO2lm''@;'; put 'put ''KGM+OTk5KXJldHVybiBjO2NvbnN0IGw9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpO2xldCBkPWMrMTAwKk1hdGguZmxvb3IobC8xMDApO3JldHVybiBkPmwrMjAmJihkLT0xMDApLGR9KGYpO3JldHVybi0xIT09RD9uZXcgRGF0ZShELHYsTSk6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1''@;'; put 'put ''bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoSHIoY0EpKX0sYy5cdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxfdz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fdG91Y2hlZENoYW5nZT1uZXcgdXIsdGhpcy5fZGlydHlDaGFuZ2U9''@;'; put 'put ''bmV3IHVyfWdldCB0b3VjaGVkQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX3RvdWNoZWRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGRpcnR5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX2RpcnR5Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfW1hcmtBc1RvdWNoZWQoKXt0aGlzLl90b3VjaGVkQ2hhbmdlLm5l''@;'; put 'put ''eHQoKX1tYXJrQXNEaXJ0eSgpe3RoaXMuX2RpcnR5Q2hhbmdlLm5leHQoKX1zZXREaXNhYmxlZChhKXt0aGlzLmRpc2FibGVkPWF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3''@;'; put 'put ''NWZhY30pLGN9KSgpLGszZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5vblNlbGVjdERheT1uZXcgWHJ9Z2V0IGRheVZpZXcoKXtyZXR1cm4gdGhpcy5fZGF5Vmlld31zZXQgZGF5''@;'; put 'put ''VmlldyhhKXt0aGlzLl9kYXlWaWV3PWF9Z2V0IGRheVN0cmluZygpe3JldHVybiB0aGlzLmRheVZpZXcuaXNTZWxlY3RlZD90aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclNlbGVjdGVkTGFiZWwse0ZVTExfREFURTp0aGlzLl9kYXlW''@;'; put 'put ''aWV3LmRheU1vZGVsLnRvRGF0ZVN0cmluZygpfSk6dGhpcy5fZGF5Vmlldy5kYXlNb2RlbC50b0RhdGVTdHJpbmcoKX1nZXQgaXNSYW5nZVN0YXJ0RGF5KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLmRheVZpZXc/LmRheU1vZGVsPy50''@;'; put 'put ''b0NvbXBhcmlzb25TdHJpbmcoKT09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8udG9Db21wYXJpc29uU3RyaW5nKCl9Z2V0IGlzUmFuZ2VFbmREYXkoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJnRoaXMuZGF5Vmll''@;'; put 'put ''dz8uZGF5TW9kZWw/LnRvQ29tcGFyaXNvblN0cmluZygpPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Py50b0NvbXBhcmlzb25TdHJpbmcoKX1ob3Zlckxpc3RlbmVyKCl7dGhpcy5kYXlWaWV3LmlzRGlzYWJsZWR8fCh0aGlzLl9kYXRlTmF2aWdhdGlvblNl''@;'; put 'put ''cnZpY2UuaG92ZXJlZERheT10aGlzLmRheVZpZXcuZGF5TW9kZWwpfW9uRGF5Vmlld0ZvY3VzKCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmZvY3VzZWREYXk9dGhpcy5kYXlWaWV3LmRheU1vZGVsfXNlbGVjdERheSgpe3RoaXMuZGF5Vmlldy5pc0Rpc2FibGVkfHx0aGlzLm9uU2Vs''@;'; put 'put ''ZWN0RGF5LmVtaXQodGhpcy5kYXlWaWV3LmRheU1vZGVsKX1pc0luUmFuZ2UoKXtyZXR1cm4hIXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiYodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5JiZ0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZp''@;'; put 'put ''Y2Uuc2VsZWN0ZWRFbmREYXk/dGhpcy5fZGF5Vmlldy5kYXlNb2RlbD8uaXNBZnRlcih0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkpJiZ0aGlzLl9kYXlWaWV3LmRheU1vZGVsPy5pc0JlZm9yZSh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmRE''@;'; put 'put ''YXkpOiEoIXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheXx8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5KSYmdGhpcy5fZGF5Vmlldy5kYXlNb2RlbD8uaXNBZnRlcih0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkp''@;'; put 'put ''JiZ0aGlzLl9kYXlWaWV3LmRheU1vZGVsPy5pc0JlZm9yZSh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaG92ZXJlZERheSwhMCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShiMikscWUocHMpKX0sYy5cdTAyNzVjbXA9YXIoe3R5cGU6''@;'; put 'put ''YyxzZWxlY3RvcnM6W1siY2xyLWRheSJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmT3QoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuaG92ZXJMaXN0ZW5lcigpfSksMiZhJiZ4cigiZGF5IiwhMCl9LGlucHV0czp7ZGF5VmlldzpbMCwiY2xy''@;'; put 'put ''RGF5VmlldyIsImRheVZpZXciXX0sb3V0cHV0czp7b25TZWxlY3REYXk6InNlbGVjdERheSJ9LHN0YW5kYWxvbmU6ITEsZGVjbHM6Mix2YXJzOjE5LGNvbnN0czpbWyJ0eXBlIiwiYnV0dG9uIiwxLCJkYXktYnRuIiwzLCJjbGljayIsImZvY3VzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7''@;'; put 'put ''MSZhJiYoZGUoMCwiYnV0dG9uIiwwKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuc2VsZWN0RGF5KCl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25EYXlWaWV3Rm9jdXMoKX0pLFBlKDEpLGhlKCkpLDImYSYmKHhyKCJpcy10b2RheSIsZC5kYXlWaWV3LmlzVG9kYXlz''@;'; put 'put ''RGF0ZSkoImlzLWV4Y2x1ZGVkIixkLmRheVZpZXcuaXNFeGNsdWRlZCkoImlzLWRpc2FibGVkIixkLmRheVZpZXcuaXNEaXNhYmxlZCkoImlzLXNlbGVjdGVkIixkLmRheVZpZXcuaXNTZWxlY3RlZCkoImluLXJhbmdlIixkLmlzSW5SYW5nZSgpKSgiaXMtc3RhcnQtcmFuZ2UiLGQuaXNSYW5n''@;'; put 'put ''ZVN0YXJ0RGF5KSgiaXMtZW5kLXJhbmdlIixkLmlzUmFuZ2VFbmREYXkpLE5yKCJ0YWJpbmRleCIsZC5kYXlWaWV3LnRhYkluZGV4KSgiYXJpYS1jdXJyZW50IixkLmRheVZpZXcuaXNUb2RheXNEYXRlPyJkYXRlIjoiZmFsc2UiKSgiYXJpYS1sYWJlbCIsZC5kYXlTdHJpbmcpKCJhcmlhLXNl''@;'; put 'put ''bGVjdGVkIixkLmRheVZpZXcuaXNTZWxlY3RlZCksZmUoKSxJcigiICIsZC5kYXlWaWV3LmRheU1vZGVsLmRhdGUsIiAiKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLEQzZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQpe3RoaXMuX2xvY2FsZUhlbHBlclNlcnZp''@;'; put 'put ''Y2U9YSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9ZCx0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlPWgsdGhpcy5fZGF0ZUlPU2VydmljZT1mLHRoaXMuX2VsUmVmPXYsdGhpcy5fZGF0ZUZvcm1Db250cm9sU2VydmljZT1NLHRoaXMuX3RvZ2dsZVNlcnZpY2U9RCx0aGlzLl9zdWJz''@;'; put 'put ''PVtdLHRoaXMuZ2VuZXJhdGVDYWxlbmRhclZpZXcoKSx0aGlzLmluaXRpYWxpemVTdWJzY3JpcHRpb25zKCl9Z2V0IGxvY2FsZURheXMoKXtyZXR1cm4gdGhpcy5fbG9jYWxlSGVscGVyU2VydmljZS5sb2NhbGVEYXlzfWdldCBjYWxlbmRhcigpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlv''@;'; put 'put ''blNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXJ9Z2V0IHNlbGVjdGVkRGF5KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheX1nZXQgc2VsZWN0ZWRFbmREYXkoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5fWdl''@;'; put 'put ''dCBmb2N1c2VkRGF5KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5mb2N1c2VkRGF5fWdldCB0b2RheSgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UudG9kYXl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1''@;'; put 'put ''c0NlbGwodGhpcy5fZWxSZWYpfW5nT25EZXN0cm95KCl7dGhpcy5fc3Vicy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9b25LZXlEb3duKGEpe2lmKGEmJnRoaXMuZm9jdXNlZERheSlzd2l0Y2goa2YoYS5rZXkpKXtjYXNlIG1hLkFycm93VXA6YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMu''@;'; put 'put ''X2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pbmNyZW1lbnRGb2N1c0RheSgtNyk7YnJlYWs7Y2FzZSBtYS5BcnJvd0Rvd246YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pbmNyZW1lbnRGb2N1c0RheSg3KTticmVhaztjYXNlIG1hLkFycm93TGVmdDphLnBy''@;'; put 'put ''ZXZlbnREZWZhdWx0KCksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5KC0xKTticmVhaztjYXNlIG1hLkFycm93UmlnaHQ6YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pbmNyZW1lbnRGb2N1c0RheSgxKX19c2V0U2Vs''@;'; put 'put ''ZWN0ZWREYXkoYSl7Y29uc3QgZD10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaGFzQWN0aW9uQnV0dG9ucyxoPXRoaXMudXBkYXRlQ2FsZW5kYXJWaWV3TW9kYWwoYSk7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm5vdGlmeVNlbGVjdGVkRGF5Q2hhbmdlZChoLHtlbWl0RXZlbnQ6''@;'; put 'put ''IWR9KSxkfHwodGhpcy5fZGF0ZUZvcm1Db250cm9sU2VydmljZS5tYXJrQXNEaXJ0eSgpLHRoaXMudmFsaWRhdGVBbmRDbG9zZURhdGVQaWNrZXIoKSl9aW5pdGlhbGl6ZVN1YnNjcmlwdGlvbnMoKXt0aGlzLl9zdWJzLnB1c2godGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXll''@;'; put 'put ''ZENhbGVuZGFyQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMuZ2VuZXJhdGVDYWxlbmRhclZpZXcoKX0pKSx0aGlzLl9zdWJzLnB1c2godGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmZvY3VzZWREYXlDaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLmNhbGVuZGFyVmlld01vZGVsLnVwZGF0''@;'; put 'put ''ZUZvY3VzYWJsZURheShhKX0pKSx0aGlzLl9zdWJzLnB1c2godGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmZvY3VzT25DYWxlbmRhckNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9KSksdGhpcy5fc3Vi''@;'; put 'put ''cy5wdXNoKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5yZWZyZXNoQ2FsZW5kYXJWaWV3LnN1YnNjcmliZSgoKT0+e3RoaXMucmVmcmVzaENhbGVuZGFyVmlld01vZGFsKCl9KSl9dmFsaWRhdGVBbmRDbG9zZURhdGVQaWNrZXIoKXsodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlz''@;'; put 'put ''UmFuZ2VQaWNrZXImJnRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheSYmdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5fHwhdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJnRoaXMuX2RhdGVOYXZpZ2F0aW9uU2Vy''@;'; put 'put ''dmljZS5zZWxlY3RlZERheSkmJih0aGlzLl90b2dnbGVTZXJ2aWNlLm9wZW49ITEpfXVwZGF0ZUNhbGVuZGFyVmlld01vZGFsKGEpe2NvbnN0IGQ9dGhpcy5jYWxlbmRhclZpZXdNb2RlbC5zZWxlY3RlZERheXx8bnVsbCxoPXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlj''@;'; put 'put ''a2VyO2xldCBmPXRoaXMuY2FsZW5kYXJWaWV3TW9kZWwuc2VsZWN0ZWRFbmREYXl8fG51bGw7cmV0dXJuIGg/IWR8fGQmJmZ8fGQmJmE/LmlzQmVmb3JlKGQpPyh0aGlzLmNhbGVuZGFyVmlld01vZGVsLnVwZGF0ZVNlbGVjdGVkRGF5KGEpLGYmJihmPXZvaWQgMCx0aGlzLmNhbGVuZGFyVmll''@;'; put 'put ''d01vZGVsLnVwZGF0ZVNlbGVjdGVkRW5kRGF5KGYpKSk6dGhpcy5jYWxlbmRhclZpZXdNb2RlbC51cGRhdGVTZWxlY3RlZEVuZERheShhKTp0aGlzLmNhbGVuZGFyVmlld01vZGVsLnVwZGF0ZVNlbGVjdGVkRGF5KGEpLGg/e3N0YXJ0RGF0ZTp0aGlzLmNhbGVuZGFyVmlld01vZGVsLnNlbGVj''@;'; put 'put ''dGVkRGF5LGVuZERhdGU6dGhpcy5jYWxlbmRhclZpZXdNb2RlbC5zZWxlY3RlZEVuZERheX06dGhpcy5jYWxlbmRhclZpZXdNb2RlbC5zZWxlY3RlZERheX1yZWZyZXNoQ2FsZW5kYXJWaWV3TW9kYWwoKXt0aGlzLmNhbGVuZGFyVmlld01vZGVsLnVwZGF0ZVNlbGVjdGVkRGF5KHRoaXMuX2Rh''@;'; put 'put ''dGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheSksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJnRoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlU2VsZWN0ZWRFbmREYXkodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5KX1n''@;'; put 'put ''ZW5lcmF0ZUNhbGVuZGFyVmlldygpe3RoaXMuY2FsZW5kYXJWaWV3TW9kZWw9bmV3IEhYZSh0aGlzLmNhbGVuZGFyLHRoaXMuc2VsZWN0ZWREYXksdGhpcy5zZWxlY3RlZEVuZERheSx0aGlzLmZvY3VzZWREYXksdGhpcy50b2RheSx0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlLmZpcnN0RGF5''@;'; put 'put ''T2ZXZWVrLHRoaXMuX2RhdGVJT1NlcnZpY2UuZGlzYWJsZWREYXRlcyl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKGNBKSxxZShiMikscWUoZzYpLHFlKG81KSxxZShuYSkscWUoX3cpLHFlKHljKSl9LGMuXHUwMjc1Y21wPWFyKHt0eXBlOmMs''@;'; put 'put ''c2VsZWN0b3JzOltbImNsci1jYWxlbmRhciJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJk90KCJrZXlkb3duIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbktleURvd24oZil9KX0sc3RhbmRhbG9uZTohMSxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1sicm9sZSIsInByZXNlbnRh''@;'; put 'put ''dGlvbiIsMSwiY2FsZW5kYXItdGFibGUiXSxbMSwiY2FsZW5kYXItcm93Iiwid2Vla2RheXMiXSxbImNsYXNzIiwiY2FsZW5kYXItY2VsbCB3ZWVrZGF5Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwiY2FsZW5kYXItcm93Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY2FsZW5k''@;'; put 'put ''YXItY2VsbCIsIndlZWtkYXkiXSxbMSwiY2FsZW5kYXItcm93Il0sWyJjbGFzcyIsImNhbGVuZGFyLWNlbGwiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjYWxlbmRhci1jZWxsIl0sWzMsInNlbGVjdERheSIsImNsckRheVZpZXciXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihk''@;'; put 'put ''ZSgwLCJ0YWJsZSIsMCkoMSwidHIiLDEpLGd0KDIsWVplLDMsMiwidGgiLDIpLGhlKCksZ3QoMywkWmUsMiwxLCJ0ciIsMyksaGUoKSksMiZhJiYoZmUoMiksRWUoIm5nRm9yT2YiLGQubG9jYWxlRGF5cyksZmUoKSxFZSgibmdGb3JPZiIsZC5jYWxlbmRhclZpZXdNb2RlbC5jYWxlbmRhclZp''@;'; put 'put ''ZXcpKX0sZGVwZW5kZW5jaWVzOltocyxrM2VdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGdIPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fZG9jdW1lbnQ9YSx0aGlzLl9pc1VzZXJBZ2VudE1vYmlsZT0hMSxhJiYodGhpcy5faXNVc2VyQWdlbnRNb2JpbGU9a1hlLnRlc3Qo''@;'; put 'put ''YS5kZWZhdWx0Vmlldy5uYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLl9pbm5lcldpZHRoPWEuZGVmYXVsdFZpZXcuaW5uZXJXaWR0aCl9Z2V0IGlzRW5hYmxlZCgpe3JldHVybiEodGhpcy5fZG9jdW1lbnQmJnRoaXMuX2lubmVyV2lkdGg8NzY4JiZ0aGlzLl9pc1VzZXJBZ2VudE1vYmlsZSl9''@;'; put 'put ''fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEhyKEdzKSl9LGMuXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksRlg9KCgpPT57Y2xhc3MgYyBleHRlbmRzIE85e2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQs''@;'; put 'put ''VSx0ZSxvZSx2ZSx3ZSxGZSl7c3VwZXIoYSxkQSxkLHYsZixoKSx0aGlzLmVsPWgsdGhpcy5yZW5kZXJlcj1mLHRoaXMuY29udHJvbD12LHRoaXMuY29udGFpbmVyPU0sdGhpcy5kYXRlSU9TZXJ2aWNlPUQsdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2U9VSx0aGlzLmRhdGVwaWNrZXJFbmFi''@;'; put 'put ''bGVkU2VydmljZT10ZSx0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2U9b2UsdGhpcy5wbGF0Zm9ybUlkPXZlLHRoaXMuZm9jdXNTZXJ2aWNlPXdlLHRoaXMuZGF0ZXBpY2tlckZvY3VzU2VydmljZT1GZSx0aGlzLmluZGV4PTF9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuZGF0ZUZvcm1D''@;'; put 'put ''b250cm9sU2VydmljZT90aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UuZGlzYWJsZWR8fCEhdGhpcy5jb250cm9sPy5jb250cm9sPy5kaXNhYmxlZDpudWxsfXNldCBkaXNhYmxlZChhKXt0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UmJnRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5z''@;'; put 'put ''ZXREaXNhYmxlZCh6MyhhKSl9Z2V0IHBsYWNlaG9sZGVyVGV4dCgpe3JldHVybiB0aGlzLnBsYWNlaG9sZGVyP3RoaXMucGxhY2Vob2xkZXI6dGhpcy5kYXRlSU9TZXJ2aWNlLnBsYWNlaG9sZGVyVGV4dH1nZXQgaW5wdXRUeXBlKCl7cmV0dXJuIHdsKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMu''@;'; put 'put ''dXNpbmdOYXRpdmVEYXRlcGlja2VyKCk/ImRhdGUiOiJ0ZXh0In1uZ09uSW5pdCgpe3N1cGVyLm5nT25Jbml0KCksdGhpcy5wb3B1bGF0ZVNlcnZpY2VzRnJvbUNvbnRhaW5lckNvbXBvbmVudCgpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yVXNlclNlbGVjdGVkRGF5''@;'; put 'put ''Q2hhbmdlcygpLHRoaXMubGlzdGVuRm9yQ29udHJvbFZhbHVlQ2hhbmdlcygpLHRoaXMubGlzdGVuRm9yVG91Y2hDaGFuZ2VzKCksdGhpcy5saXN0ZW5Gb3JEaXJ0eUNoYW5nZXMoKSx0aGlzLmxpc3RlbkZvcklucHV0UmVmb2N1cygpKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnByb2Nlc3NJ''@;'; put 'put ''bml0aWFsSW5wdXRzKCl9c2V0Rm9jdXNTdGF0ZXMoKXt0aGlzLnNldEZvY3VzKCEwKX10cmlnZ2VyVmFsaWRhdGlvbigpe3N1cGVyLnRyaWdnZXJWYWxpZGF0aW9uKCksdGhpcy5zZXRGb2N1cyghMSl9b25WYWx1ZUNoYW5nZShhKXtjb25zdCBkPXRoaXMuZGF0ZUlPU2VydmljZS5nZXREYXRl''@;'; put 'put ''VmFsdWVGcm9tRGF0ZVN0cmluZyhhLnZhbHVlKTtpZih0aGlzLnVzaW5nQ2xhcml0eURhdGVwaWNrZXIoKSYmZCl0aGlzLnVwZGF0ZURhdGUoZCwhMCk7ZWxzZSBpZih0aGlzLnVzaW5nTmF0aXZlRGF0ZXBpY2tlcigpKXtjb25zdFtoLGYsdl09YS52YWx1ZS5zcGxpdCgiLSIpO3RoaXMudXBk''@;'; put 'put ''YXRlRGF0ZShuZXcgRGF0ZSgraCwrZi0xLCt2KSwhMCl9ZWxzZSB0aGlzLmVtaXREYXRlT3V0cHV0KG51bGwpfWRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpe3JldHVybiEhdGhpcy5jb250cm9sfXNldERhdGUoYSl7InN0cmluZyI9PXR5cGVvZiBhJiYoYT1uZXcgRGF0ZShhKSksdGhpcy5w''@;'; put 'put ''cmV2aW91c0RhdGVDaGFuZ2UhPT1hJiZ0aGlzLnVwZGF0ZURhdGUoYSksdGhpcy5pbml0aWFsQ2xyRGF0ZUlucHV0VmFsdWV8fCh0aGlzLmluaXRpYWxDbHJEYXRlSW5wdXRWYWx1ZT1hKX11c2luZ0NsYXJpdHlEYXRlcGlja2VyKCl7cmV0dXJuIHRoaXMuZGF0ZXBpY2tlckVuYWJsZWRTZXJ2''@;'; put 'put ''aWNlLmlzRW5hYmxlZH11c2luZ05hdGl2ZURhdGVwaWNrZXIoKXtyZXR1cm4hdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2UuaXNFbmFibGVkfXNldEZvY3VzKGEpe3RoaXMuZm9jdXNTZXJ2aWNlJiYodGhpcy5mb2N1c1NlcnZpY2UuZm9jdXNlZD1hKX1wb3B1bGF0ZVNlcnZpY2VzRnJv''@;'; put 'put ''bUNvbnRhaW5lckNvbXBvbmVudCgpe3RoaXMuY29udGFpbmVyfHwodGhpcy5kYXRlSU9TZXJ2aWNlPXRoaXMuZ2V0UHJvdmlkZXJGcm9tQ29udGFpbmVyKG81KSx0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZT10aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihiMiksdGhpcy5kYXRlcGlj''@;'; put 'put ''a2VyRW5hYmxlZFNlcnZpY2U9dGhpcy5nZXRQcm92aWRlckZyb21Db250YWluZXIoZ0gpLHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZT10aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihfdykpfXByb2Nlc3NJbml0aWFsSW5wdXRzKCl7dGhpcy5kYXRlcGlja2VySGFzRm9ybUNvbnRy''@;'; put 'put ''b2woKT90aGlzLnVwZGF0ZURhdGUodGhpcy5kYXRlSU9TZXJ2aWNlLmdldERhdGVWYWx1ZUZyb21EYXRlU3RyaW5nKHRoaXMuY29udHJvbC52YWx1ZSkpOnRoaXMudXBkYXRlRGF0ZSh0aGlzLmluaXRpYWxDbHJEYXRlSW5wdXRWYWx1ZSl9dXBkYXRlRGF0ZShhLGQ9ITEpe2NvbnN0IGg9dGhp''@;'; put 'put ''cy5nZXRWYWxpZERhdGVWYWx1ZUZyb21EYXRlKGEpO2lmKGQ/dGhpcy5lbWl0RGF0ZU91dHB1dChoKTp0aGlzLnByZXZpb3VzRGF0ZUNoYW5nZT1oLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlKXtjb25zdCBmPWg/bmV3IHBoKGguZ2V0RnVsbFllYXIoKSxoLmdldE1vbnRoKCksaC5nZXRE''@;'; put 'put ''YXRlKCkpOm51bGw7dGhpcy51cGRhdGVEYXlNb2RlbChmKX10aGlzLnVwZGF0ZUlucHV0KGgpfXVwZGF0ZUlucHV0KGEpe2lmKGEpe2NvbnN0IGQ9dGhpcy5kYXRlSU9TZXJ2aWNlLnRvTG9jYWxlRGlzcGxheUZvcm1hdFN0cmluZyhhKTt0aGlzLnVzaW5nTmF0aXZlRGF0ZXBpY2tlcigpPyhh''@;'; put 'put ''LnNldE1pbnV0ZXMoYS5nZXRNaW51dGVzKCktYS5nZXRUaW1lem9uZU9mZnNldCgpKSx0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuZWwubmF0aXZlRWxlbWVudCwidmFsdWVBc0RhdGUiLGEpKTp0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpJiZkIT09dGhpcy5jb250cm9s''@;'; put 'put ''LnZhbHVlP3RoaXMuY29udHJvbC5jb250cm9sLnNldFZhbHVlKGQpOnRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsZCksdGhpcy52YWxpZGF0ZURhdGVSYW5nZSgpfWVsc2UgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsLm5h''@;'; put 'put ''dGl2ZUVsZW1lbnQsInZhbHVlIiwiIil9Z2V0VmFsaWREYXRlVmFsdWVGcm9tRGF0ZShhKXtpZih0aGlzLmRhdGVJT1NlcnZpY2Upe2NvbnN0IGQ9dGhpcy5kYXRlSU9TZXJ2aWNlLnRvTG9jYWxlRGlzcGxheUZvcm1hdFN0cmluZyhhKTtyZXR1cm4gdGhpcy5kYXRlSU9TZXJ2aWNlLmdldERh''@;'; put 'put ''dGVWYWx1ZUZyb21EYXRlU3RyaW5nKGQpfXJldHVybiBudWxsfWVtaXREYXRlT3V0cHV0KGEpeyFmdW5jdGlvbiBQWGUoYyxsKXtyZXR1cm4gYyBpbnN0YW5jZW9mIERhdGUmJmwgaW5zdGFuY2VvZiBEYXRlJiZjLmdldEZ1bGxZZWFyKCk9PT1sLmdldEZ1bGxZZWFyKCkmJmMuZ2V0TW9udGgo''@;'; put 'put ''KT09PWwuZ2V0TW9udGgoKSYmYy5nZXREYXRlKCk9PT1sLmdldERhdGUoKX0oYSx0aGlzLnByZXZpb3VzRGF0ZUNoYW5nZSk/KHRoaXMuZGF0ZUNoYW5nZS5lbWl0KGEpLHRoaXMucHJldmlvdXNEYXRlQ2hhbmdlPWEpOiFhJiZ0aGlzLnByZXZpb3VzRGF0ZUNoYW5nZSYmKHRoaXMuZGF0ZUNo''@;'; put 'put ''YW5nZS5lbWl0KG51bGwpLHRoaXMucHJldmlvdXNEYXRlQ2hhbmdlPW51bGwpfWxpc3RlbkZvckNvbnRyb2xWYWx1ZUNoYW5nZXMoKXtyZXR1cm4gdGhpcy5kYXRlcGlja2VySGFzRm9ybUNvbnRyb2woKT90aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUob2MoKCk9PiF0aGlzLmRhdGVw''@;'; put 'put ''aWNrZXJGb2N1c1NlcnZpY2UuZWxlbWVudElzRm9jdXNlZCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpKSkuc3Vic2NyaWJlKGE9PnRoaXMudXBkYXRlRGF0ZSh0aGlzLmRhdGVJT1NlcnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcoYSkpKTpudWxsfWxpc3RlbkZvclVzZXJTZWxlY3Rl''@;'; put 'put ''ZERheUNoYW5nZXMoKXtyZXR1cm4gdGhpcy51c2VyU2VsZWN0ZWREYXlDaGFuZ2Uuc3Vic2NyaWJlKGE9PnRoaXMudXBkYXRlRGF0ZShhPy50b0RhdGUoKSwhMCkpfWxpc3RlbkZvclRvdWNoQ2hhbmdlcygpe3JldHVybiB0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UudG91Y2hlZENoYW5n''@;'; put 'put ''ZS5waXBlKG9jKCgpPT50aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpKSkuc3Vic2NyaWJlKCgpPT50aGlzLmNvbnRyb2wuY29udHJvbC5tYXJrQXNUb3VjaGVkKCkpfWxpc3RlbkZvckRpcnR5Q2hhbmdlcygpe3JldHVybiB0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UuZGlydHlD''@;'; put 'put ''aGFuZ2UucGlwZShvYygoKT0+dGhpcy5kYXRlcGlja2VySGFzRm9ybUNvbnRyb2woKSkpLnN1YnNjcmliZSgoKT0+dGhpcy5jb250cm9sLmNvbnRyb2wubWFya0FzRGlydHkoKSl9bGlzdGVuRm9ySW5wdXRSZWZvY3VzKCl7cmV0dXJuIHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVj''@;'; put 'put ''dGVkRGF5Q2hhbmdlLnBpcGUob2MoYT0+ISFhJiYhdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlcikpLnN1YnNjcmliZSgoKT0+dGhpcy5kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzSW5wdXQodGhpcy5lbC5uYXRpdmVFbGVtZW50KSl9dmFsaWRhdGVEYXRlUmFu''@;'; put 'put ''Z2UoKXtpZih0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyKXtjb25zdCBhPXRoaXMubmdDb250cm9sU2VydmljZT8uY29udHJvbCxkPXRoaXMubmdDb250cm9sU2VydmljZT8uYWRkaXRpb25hbENvbnRyb2xzO3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVj''@;'; put 'put ''dGVkRGF5Py5pc0JlZm9yZSh0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheSwhMCkmJihhPy5oYXNFcnJvcigicmFuZ2UiKXx8ZD8uc29tZShmPT5mLmhhc0Vycm9yKCJyYW5nZSIpKSkmJihhLmNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVu''@;'; put 'put ''dDohMX0pLGQuZm9yRWFjaChmPT57Zj8uY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9KSl9fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShiZSkscWUoWW8pLHFlKG5hKSxxZShObykscWUoRjEsMTApLHFl''@;'; put 'put ''KHVzKCgpPT5kQSksOCkscWUobzUsOCkscWUoYjIsOCkscWUoZ0gsOCkscWUoX3csOCkscWUodWwpLHFlKHZ3LDgpLHFlKGc2KSl9LGMuXHUwMjc1ZGlyPVlyKHt0eXBlOmMsaG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJk90KCJmb2N1cyIsZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gZC5zZXRGb2N1c1N0YXRlcygpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQudHJpZ2dlclZhbGlkYXRpb24oKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uVmFsdWVDaGFuZ2UoZi50YXJnZXQpfSksMiZhJiYoaTQoImRpc2FibGVkIixkLmRpc2FibGVkKSxO''@;'; put 'put ''cigicGxhY2Vob2xkZXIiLGQucGxhY2Vob2xkZXJUZXh0KSgidHlwZSIsZC5pbnB1dFR5cGUpKX0saW5wdXRzOntwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIiLGRpc2FibGVkOiJkaXNhYmxlZCJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W0xhXX0pLGN9KSgpLEkzZT0oKCk9PntjbGFzcyBj''@;'; put 'put ''IGV4dGVuZHMgRlh7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZGF0ZUNoYW5nZT1uZXcgWHIoITEpLHRoaXMuaW5wdXRXaWR0aD0xM31zZXQgZGF0ZShhKXt0aGlzLnNldERhdGUoYSl9Z2V0IGlucHV0U2l6ZSgpe3JldHVybiB0aGlzLmlucHV0V2lkdGh9Z2V0IHVz''@;'; put 'put ''ZXJTZWxlY3RlZERheUNoYW5nZSgpe3JldHVybiB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheUNoYW5nZX10cmlnZ2VyQ29udHJvbElucHV0VmFsaWRhdGlvbigpe3RoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkmJih0aGlzLmNvbnRyb2wuY29udHJvbD8u''@;'; put 'put ''dXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksdGhpcy5jb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh0aGlzLmNvbnRyb2wuY29udHJvbC5lcnJvcnMpKX11cGRhdGVEYXlNb2RlbChhKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5wZXJzaXN0ZWRFbmREYXRlPXRo''@;'; put 'put ''aXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5PWF9fXJldHVybiBjLlx1MDI3NWZhYz0oKCk9PntsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPXlsKGMpKSkoZHx8Yyl9fSkoKSxjLlx1MDI3NWRpcj1Zcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJj''@;'; put 'put ''bHJFbmREYXRlIiwiIl1dLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoTnIoInNpemUiLGQuaW5wdXRTaXplKSx4cigiY2xyLWlucHV0IiwhMCkpfSxpbnB1dHM6e2lucHV0V2lkdGg6ImlucHV0V2lkdGgiLGRhdGU6WzAsImNsckVuZERhdGUiLCJkYXRlIl19''@;'; put 'put ''LG91dHB1dHM6e2RhdGVDaGFuZ2U6ImNsckVuZERhdGVDaGFuZ2UifSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltoYShbZzZdKSxMYV19KSxjfSkoKSxtSD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgRlh7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZGF0ZUNoYW5nZT1u''@;'; put 'put ''ZXcgWHIoITEpfXNldCBkYXRlKGEpe3RoaXMuc2V0RGF0ZShhKX1zZXQgbWluKGEpe3RoaXMuZGF0ZUlPU2VydmljZS5zZXRNaW5EYXRlKGEpLHRoaXMudHJpZ2dlckNvbnRyb2xWYWxpZGF0aW9uKCl9c2V0IG1heChhKXt0aGlzLmRhdGVJT1NlcnZpY2Uuc2V0TWF4RGF0ZShhKSx0aGlzLnRy''@;'; put 'put ''aWdnZXJDb250cm9sVmFsaWRhdGlvbigpfWdldCB1c2VyU2VsZWN0ZWREYXlDaGFuZ2UoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXlDaGFuZ2V9dXBkYXRlRGF5TW9kZWwoYSl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UucGVyc2lzdGVkRGF0ZT10''@;'; put 'put ''aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT1hfXRyaWdnZXJDb250cm9sVmFsaWRhdGlvbigpe3RoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkmJih0aGlzLmNvbnRyb2wuY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksdGhp''@;'; put 'put ''cy5jb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh0aGlzLmNvbnRyb2wuY29udHJvbC5lcnJvcnMpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPSgoKT0+e2xldCBsO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4obHx8KGw9eWwoYykpKShkfHxjKX19KSgpLGMuXHUwMjc1ZGlyPVlyKHt0eXBlOmMs''@;'; put 'put ''c2VsZWN0b3JzOltbIiIsImNsckRhdGUiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJnhyKCJjbHItaW5wdXQiLCEwKX0saW5wdXRzOntkYXRlOlswLCJjbHJEYXRlIiwiZGF0ZSJdLG1pbjoibWluIixtYXg6Im1heCJ9LG91dHB1dHM6e2RhdGVDaGFu''@;'; put 'put ''Z2U6ImNsckRhdGVDaGFuZ2UifSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltoYShbZzZdKSxMYV19KSxjfSkoKSxSM2U9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEZYe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmRhdGVDaGFuZ2U9bmV3IFhyKCExKSx0aGlzLmlucHV0''@;'; put 'put ''V2lkdGg9MTN9c2V0IGRhdGUoYSl7dGhpcy5zZXREYXRlKGEpfWdldCBpbnB1dFNpemUoKXtyZXR1cm4gdGhpcy5pbnB1dFdpZHRofWdldCB1c2VyU2VsZWN0ZWREYXlDaGFuZ2UoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXlDaGFuZ2V9dHJpZ2dlckNv''@;'; put 'put ''bnRyb2xJbnB1dFZhbGlkYXRpb24oKXt0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpJiYodGhpcy5jb250cm9sLmNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pLHRoaXMuY29udHJvbC5jb250cm9sPy5zZXRFcnJvcnModGhpcy5jb250cm9sLmNv''@;'; put 'put ''bnRyb2wuZXJyb3JzKSl9dXBkYXRlRGF5TW9kZWwoYSl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UucGVyc2lzdGVkRGF0ZT10aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT1hfX1yZXR1cm4gYy5cdTAyNzVmYWM9KCgpPT57bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQp''@;'; put 'put ''e3JldHVybihsfHwobD15bChjKSkpKGR8fGMpfX0pKCksYy5cdTAyNzVkaXI9WXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyU3RhcnREYXRlIiwiIl1dLGhvc3RWYXJzOjUsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoTnIoInNpemUiLGQuaW5wdXRTaXplKSxtZCgidGV4''@;'; put 'put ''dC1hbGlnbiIsInJpZ2h0IikseHIoImNsci1pbnB1dCIsITApKX0saW5wdXRzOntpbnB1dFdpZHRoOiJpbnB1dFdpZHRoIixkYXRlOlswLCJjbHJTdGFydERhdGUiLCJkYXRlIl19LG91dHB1dHM6e2RhdGVDaGFuZ2U6ImNsclN0YXJ0RGF0ZUNoYW5nZSJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVy''@;'; put 'put ''ZXM6W2hhKFtnNl0pLExhXX0pLGN9KSgpLHd3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLnBvc2l0aW9uPWxoWyJib3R0b20tbGVmdCJdLHRoaXMuX2N1cnJlbnRWaWV3PSJEQVlWSUVXIn1nZXQgaXNEYXlWaWV3KCl7cmV0dXJuIkRBWVZJRVciPT09dGhpcy5fY3VycmVudFZp''@;'; put 'put ''ZXd9Z2V0IGlzWWVhclZpZXcoKXtyZXR1cm4iWUVBUlZJRVciPT09dGhpcy5fY3VycmVudFZpZXd9Z2V0IGlzTW9udGhWaWV3KCl7cmV0dXJuIk1PTlRIVklFVyI9PT10aGlzLl9jdXJyZW50Vmlld31jaGFuZ2VUb01vbnRoVmlldygpe3RoaXMuX2N1cnJlbnRWaWV3PSJNT05USFZJRVcifWNo''@;'; put 'put ''YW5nZVRvWWVhclZpZXcoKXt0aGlzLl9jdXJyZW50Vmlldz0iWUVBUlZJRVcifWNoYW5nZVRvRGF5Vmlldygpe3RoaXMuX2N1cnJlbnRWaWV3PSJEQVlWSUVXIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1mcih7dG9rZW46''@;'; put 'put ''YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksTDNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9YSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9ZCx0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlPWgsdGhp''@;'; put 'put ''cy5fZWxSZWY9Zix0aGlzLl92aWV3TWFuYWdlclNlcnZpY2U9dix0aGlzLmNvbW1vblN0cmluZ3M9TSx0aGlzLl9mb2N1c2VkTW9udGhJbmRleD10aGlzLmNhbGVuZGFyTW9udGhJbmRleH1nZXQgbW9udGhOYW1lcygpe3JldHVybiB0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlLmxvY2FsZU1v''@;'; put 'put ''bnRoc1dpZGV9Z2V0IGNhbGVuZGFyTW9udGhJbmRleCgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXIubW9udGh9Z2V0IGNhbGVuZGFyRW5kTW9udGhJbmRleCgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRF''@;'; put 'put ''bmREYXk/Lm1vbnRofWdldCB5ZWFyQXR0clN0cmluZygpe3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclNlbGVjdFllYXJUZXh0LHtDQUxFTkRBUl9ZRUFSOnRoaXMuY2FsZW5kYXJZZWFyLnRvU3RyaW5nKCl9KX1nZXQg''@;'; put 'put ''Y2FsZW5kYXJZZWFyKCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5kaXNwbGF5ZWRDYWxlbmRhci55ZWFyfWdldCBjdXJyZW50Q2FsZW5kYXJZZWFyKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpfWdldCBjdXJyZW50Q2FsZW5kYXJNb250aCgpe3JldHVybihu''@;'; put 'put ''ZXcgRGF0ZSkuZ2V0TW9udGgoKX1nZXRJc1JhbmdlU3RhcnRNb250aChhKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJnRoaXMuY2FsZW5kYXJZZWFyPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py55ZWFyJiZhPT09''@;'; put 'put ''dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py5tb250aH1nZXRJc1JhbmdlRW5kTW9udGgoYSl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLmNhbGVuZGFyWWVhcj09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2Vydmlj''@;'; put 'put ''ZS5zZWxlY3RlZEVuZERheT8ueWVhciYmYT09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT8ubW9udGh9Y2hhbmdlVG9ZZWFyVmlldygpe3RoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZS5jaGFuZ2VUb1llYXJWaWV3KCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5f''@;'; put 'put ''ZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfW9uS2V5RG93bihhKXtpZihhKXtjb25zdCBkPWtmKGEua2V5KTtkPT09bWEuQXJyb3dVcCYmdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg+MT8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRNb250aElu''@;'; put 'put ''ZGV4LT0yLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKSk6ZD09PW1hLkFycm93RG93biYmdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg8MTA/KGEucHJldmVudERlZmF1bHQoKSx0aGlzLl9mb2N1c2VkTW9udGhJbmRleCs9Mix0aGlzLl9kYXRlcGlj''@;'; put 'put ''a2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZikpOmQ9PT1tYS5BcnJvd1JpZ2h0JiZ0aGlzLl9mb2N1c2VkTW9udGhJbmRleDwxMT8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRNb250aEluZGV4KyssdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1''@;'; put 'put ''c0NlbGwodGhpcy5fZWxSZWYpKTpkPT09bWEuQXJyb3dMZWZ0JiZ0aGlzLl9mb2N1c2VkTW9udGhJbmRleD4wJiYoYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRNb250aEluZGV4LS0sdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKX19''@;'; put 'put ''aXNTZWxlY3RlZChhKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py55ZWFyPT09dGhpcy5jYWxlbmRhclllYXImJmE9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/Lm1vbnRofHx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZp''@;'; put 'put ''Y2Uuc2VsZWN0ZWRFbmREYXk/LnllYXI9PT10aGlzLmNhbGVuZGFyWWVhciYmYT09PXRoaXMuY2FsZW5kYXJFbmRNb250aEluZGV4fW9uSG92ZXIoYSl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhvdmVyZWRNb250aD1hfWNoYW5nZU1vbnRoKGEpe3RoaXMuX2RhdGVOYXZpZ2F0aW9u''@;'; put 'put ''U2VydmljZS5jaGFuZ2VNb250aChhKSx0aGlzLl92aWV3TWFuYWdlclNlcnZpY2UuY2hhbmdlVG9EYXlWaWV3KCl9Z2V0VGFiSW5kZXgoYSl7cmV0dXJuIGE9PT10aGlzLl9mb2N1c2VkTW9udGhJbmRleD8wOi0xfW5leHRZZWFyKCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1vdmVU''@;'; put 'put ''b05leHRZZWFyKCl9cHJldmlvdXNZZWFyKCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1vdmVUb1ByZXZpb3VzWWVhcigpfWN1cnJlbnRZZWFyKCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1vdmVUb0N1cnJlbnRNb250aCgpfWlzSW5SYW5nZShhKXtyZXR1cm4hIXRoaXMu''@;'; put 'put ''X2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiYodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5JiZ0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/dGhpcy5jYWxlbmRhclllYXI9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNl''@;'; put 'put ''cnZpY2Uuc2VsZWN0ZWREYXkueWVhciYmYT50aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkubW9udGgmJnRoaXMuY2FsZW5kYXJZZWFyPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5LnllYXImJmE8dGhpcy5fZGF0ZU5hdmlnYXRpb25T''@;'; put 'put ''ZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Lm1vbnRofHx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkueWVhciE9PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheS55ZWFyJiZ0aGlzLmNhbGVuZGFyWWVhcj09PXRoaXMuX2RhdGVOYXZpZ2F0aW9u''@;'; put 'put ''U2VydmljZS5zZWxlY3RlZERheS55ZWFyJiZhPnRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS5tb250aHx8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5LnllYXIhPT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXku''@;'; put 'put ''eWVhciYmdGhpcy5jYWxlbmRhclllYXI9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkueWVhciYmYTx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkubW9udGh8fHRoaXMuY2FsZW5kYXJZZWFyPnRoaXMuX2RhdGVOYXZpZ2F0aW9u''@;'; put 'put ''U2VydmljZS5zZWxlY3RlZERheS55ZWFyJiZ0aGlzLmNhbGVuZGFyWWVhcjx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkueWVhcjohKCF0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXl8fHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5z''@;'; put 'put ''ZWxlY3RlZEVuZERheSkmJih0aGlzLmNhbGVuZGFyWWVhcj09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS55ZWFyJiZhPnRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS5tb250aCYmYTx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaG92''@;'; put 'put ''ZXJlZE1vbnRofHx0aGlzLmNhbGVuZGFyWWVhcj50aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkueWVhciYmYTx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaG92ZXJlZE1vbnRoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8''@;'; put 'put ''fGMpKHFlKGNBKSxxZShiMikscWUoZzYpLHFlKG5hKSxxZSh3dykscWUocHMpKX0sYy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLW1vbnRocGlja2VyIl1dLGhvc3RBdHRyczpbInJvbGUiLCJhcHBsaWNhdGlvbiJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0''@;'; put 'put ''aW9uKGEsZCl7MSZhJiZPdCgia2V5ZG93biIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25LZXlEb3duKGYpfSksMiZhJiZ4cigibW9udGhwaWNrZXIiLCEwKX0sc3RhbmRhbG9uZTohMSxkZWNsczoxMyx2YXJzOjEwLGNvbnN0czpbWzEsImNhbGVuZGFyLWhlYWRlciIsImluLW1vbnRocGlja2Vy''@;'; put 'put ''Il0sWzEsInllYXItdmlldy1zd2l0Y2hlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRuIiwieWVhcnBpY2tlci10cmlnZ2VyIiwzLCJjbGljayJdLFsxLCJjYWxlbmRhci1zd2l0Y2hlcnMiXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsInN3aXRjaGVyIiwz''@;'; put 'put ''LCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsImxlZnQiXSxbInNoYXBlIiwiZXZlbnQiXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJyaWdodCJdLFsxLCJtb250aHMiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImNhbGVuZGFyLWJ0biBtb250aCIsMywi''@;'; put 'put ''aXMtc2VsZWN0ZWQiLCJpcy1zdGFydC1yYW5nZSIsImlzLWVuZC1yYW5nZSIsImluLXJhbmdlIiwiaXMtdG9kYXkiLCJjbGljayIsIm1vdXNlZW50ZXIiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRuIiwibW9udGgiLDMsImNsaWNrIiwibW91''@;'; put 'put ''c2VlbnRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGRlKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJidXR0b24iLDIpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jaGFuZ2VUb1llYXJWaWV3KCl9KSxQZSgzKSxoZSgpKCksZGUoNCwiZGl2IiwzKSg1LCJidXR0''@;'; put 'put ''b24iLDQpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5wcmV2aW91c1llYXIoKX0pLEd0KDYsImNkcy1pY29uIiw1KSxoZSgpLGRlKDcsImJ1dHRvbiIsNCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmN1cnJlbnRZZWFyKCl9KSxHdCg4LCJjZHMtaWNvbiIsNiksaGUo''@;'; put 'put ''KSxkZSg5LCJidXR0b24iLDQpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5uZXh0WWVhcigpfSksR3QoMTAsImNkcy1pY29uIiw3KSxoZSgpKCkoKSxkZSgxMSwiZGl2Iiw4KSxndCgxMixLWmUsMiwxMiwiYnV0dG9uIiw5KSxoZSgpKSwyJmEmJihmZSgyKSxOcigiYXJpYS1sYWJl''@;'; put 'put ''bCIsZC55ZWFyQXR0clN0cmluZykoInRpdGxlIixkLnllYXJBdHRyU3RyaW5nKSxmZSgpLElyKCIgIixkLmNhbGVuZGFyWWVhciwiICIpLGZlKDIpLE5yKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyUHJldmlvdXNNb250aCksZmUoKSxOcigidGl0bGUiLGQu''@;'; put 'put ''Y29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c01vbnRoKSxmZSgpLE5yKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyQ3VycmVudE1vbnRoKSxmZSgpLE5yKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckN1cnJlbnRN''@;'; put 'put ''b250aCksZmUoKSxOcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHRNb250aCksZmUoKSxOcigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJOZXh0TW9udGgpLGZlKDIpLEVlKCJuZ0Zvck9mIixkLm1vbnRoTmFtZXMpKX0sZGVw''@;'; put 'put ''ZW5kZW5jaWVzOltocyxmc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7Y2xhc3MgdUF7Y29uc3RydWN0b3IobCl7dGhpcy55ZWFyPWwsdGhpcy55ZWFyUmFuZ2U9W10sdGhpcy5nZW5lcmF0ZVllYXJSYW5nZSgpfWdldCBtaWRkbGVZZWFyKCl7cmV0dXJuIHRoaXMueWVhclJhbmdlW01hdGgu''@;'; put 'put ''Zmxvb3IodGhpcy55ZWFyUmFuZ2UubGVuZ3RoLzIpXX1uZXh0RGVjYWRlKCl7cmV0dXJuIG5ldyB1QSh0aGlzLnllYXIrMTApfXByZXZpb3VzRGVjYWRlKCl7cmV0dXJuIG5ldyB1QSh0aGlzLnllYXItMTApfWN1cnJlbnREZWNhZGUoKXtyZXR1cm4gbmV3IHVBKChuZXcgRGF0ZSkuZ2V0RnVs''@;'; put 'put ''bFllYXIoKSl9aW5SYW5nZShsKXtyZXR1cm4gdGhpcy55ZWFyUmFuZ2UuaW5kZXhPZihsKT4tMX1nZW5lcmF0ZVllYXJSYW5nZSgpe2NvbnN0IGE9dGhpcy55ZWFyLXRoaXMueWVhciUxMDt0aGlzLnllYXJSYW5nZT10aGlzLmdlbmVyYXRlUmFuZ2UoYSxhKzEwKX1nZW5lcmF0ZVJhbmdlKGws''@;'; put 'put ''YSl7cmV0dXJuIEFycmF5LmZyb20oe2xlbmd0aDphLWx9LChkLGgpPT5oK2wpfX1sZXQgUDNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9YSx0aGlzLl92aWV3TWFuYWdlclNlcnZpY2U9ZCx0aGlzLl9kYXRlcGlja2Vy''@;'; put 'put ''Rm9jdXNTZXJ2aWNlPWgsdGhpcy5fZWxSZWY9Zix0aGlzLmNvbW1vblN0cmluZ3M9dix0aGlzLnllYXJSYW5nZU1vZGVsPW5ldyB1QSh0aGlzLmNhbGVuZGFyWWVhciksdGhpcy5fZm9jdXNlZFllYXI9dGhpcy5jYWxlbmRhclllYXJ9Z2V0IHNlbGVjdGVkU3RhcnRZZWFyKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8ueWVhcn1nZXQgc2VsZWN0ZWRFbmRZZWFyKCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT8ueWVhcn1nZXQgY2FsZW5kYXJZZWFyKCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0''@;'; put 'put ''aW9uU2VydmljZS5kaXNwbGF5ZWRDYWxlbmRhci55ZWFyfWlzQ3VycmVudENhbGVuZGFyWWVhcihhKXtyZXR1cm4gYT09PShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKX1nZXRJc1JhbmdlU3RhcnRZZWFyKGEpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tl''@;'; put 'put ''ciYmYT09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8ueWVhcn1nZXRJc1JhbmdlRW5kWWVhcihhKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJmE9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRF''@;'; put 'put ''bmREYXk/LnllYXJ9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfW9uS2V5RG93bihhKXtpZihhKXtjb25zdCBkPWtmKGEua2V5KTtkPT09bWEuQXJyb3dVcD8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaW5jcmVt''@;'; put 'put ''ZW50Rm9jdXNZZWFyQnkoLTIpKTpkPT09bWEuQXJyb3dEb3duPyhhLnByZXZlbnREZWZhdWx0KCksdGhpcy5pbmNyZW1lbnRGb2N1c1llYXJCeSgyKSk6ZD09PW1hLkFycm93UmlnaHQ/KGEucHJldmVudERlZmF1bHQoKSx0aGlzLmluY3JlbWVudEZvY3VzWWVhckJ5KDEpKTpkPT09bWEuQXJy''@;'; put 'put ''b3dMZWZ0JiYoYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaW5jcmVtZW50Rm9jdXNZZWFyQnkoLTEpKX19Y2hhbmdlWWVhcihhKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuY2hhbmdlWWVhcihhKSx0aGlzLl92aWV3TWFuYWdlclNlcnZpY2UuY2hhbmdlVG9EYXlWaWV3KCl9b25Ib3Zl''@;'; put 'put ''cihhKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaG92ZXJlZFllYXI9YX1wcmV2aW91c0RlY2FkZSgpe3RoaXMueWVhclJhbmdlTW9kZWw9dGhpcy55ZWFyUmFuZ2VNb2RlbC5wcmV2aW91c0RlY2FkZSgpfWN1cnJlbnREZWNhZGUoKXt0aGlzLnllYXJSYW5nZU1vZGVsLmluUmFuZ2Uo''@;'; put 'put ''dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnRvZGF5LnllYXIpfHwodGhpcy55ZWFyUmFuZ2VNb2RlbD10aGlzLnllYXJSYW5nZU1vZGVsLmN1cnJlbnREZWNhZGUoKSksdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfW5leHREZWNhZGUoKXt0''@;'; put 'put ''aGlzLnllYXJSYW5nZU1vZGVsPXRoaXMueWVhclJhbmdlTW9kZWwubmV4dERlY2FkZSgpfWdldFRhYkluZGV4KGEpe3JldHVybiB0aGlzLnllYXJSYW5nZU1vZGVsLmluUmFuZ2UodGhpcy5fZm9jdXNlZFllYXIpfHwodGhpcy5fZm9jdXNlZFllYXI9dGhpcy55ZWFyUmFuZ2VNb2RlbC5pblJh''@;'; put 'put ''bmdlKHRoaXMuY2FsZW5kYXJZZWFyKT90aGlzLmNhbGVuZGFyWWVhcjp0aGlzLnllYXJSYW5nZU1vZGVsLmluUmFuZ2UodGhpcy5zZWxlY3RlZEVuZFllYXIpP3RoaXMuc2VsZWN0ZWRFbmRZZWFyOnRoaXMueWVhclJhbmdlTW9kZWwubWlkZGxlWWVhciksdGhpcy5fZm9jdXNlZFllYXI9PT1h''@;'; put 'put ''PzA6LTF9aXNJblJhbmdlKGEpe3JldHVybiEhdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJih0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/LnllYXImJnRoaXMuc2VsZWN0ZWRFbmRZZWFyP2E+dGhpcy5zZWxlY3RlZFN0YXJ0WWVhciYm''@;'; put 'put ''YTx0aGlzLnNlbGVjdGVkRW5kWWVhcjohKCF0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/LnllYXJ8fHRoaXMuc2VsZWN0ZWRFbmRZZWFyKSYmYT50aGlzLnNlbGVjdGVkU3RhcnRZZWFyJiZhPHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5ob3ZlcmVkWWVhcil9''@;'; put 'put ''Y2hhbmdlVG9EYXlWaWV3KCl7dGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlLmNoYW5nZVRvRGF5VmlldygpfWluY3JlbWVudEZvY3VzWWVhckJ5KGEpe3RoaXMuX2ZvY3VzZWRZZWFyPXRoaXMuX2ZvY3VzZWRZZWFyK2EsdGhpcy55ZWFyUmFuZ2VNb2RlbC5pblJhbmdlKHRoaXMuX2ZvY3VzZWRZ''@;'; put 'put ''ZWFyKXx8KHRoaXMueWVhclJhbmdlTW9kZWw9YT4wP3RoaXMueWVhclJhbmdlTW9kZWwubmV4dERlY2FkZSgpOnRoaXMueWVhclJhbmdlTW9kZWwucHJldmlvdXNEZWNhZGUoKSksdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfX1yZXR1cm4gYy5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShiMikscWUod3cpLHFlKGc2KSxxZShuYSkscWUocHMpKX0sYy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXllYXJwaWNrZXIiXV0saG9zdEF0dHJzOlsicm9sZSIsImFwcGxpY2F0aW9uIl0saG9z''@;'; put 'put ''dFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJk90KCJrZXlkb3duIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbktleURvd24oZil9KSwyJmEmJnhyKCJ5ZWFycGlja2VyIiwhMCl9LHN0YW5kYWxvbmU6ITEsZGVjbHM6MTMsdmFyczo5LGNvbnN0czpbWzEsImNhbGVuZGFy''@;'; put 'put ''LWhlYWRlciJdLFsxLCJjYWxlbmRhci1waWNrZXJzIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJ5ZWFycGlja2VyLXRyaWdnZXIiLCJ5ZWFyLXJhbmdlIiwzLCJjbGljayJdLFsxLCJ5ZWFyLXN3aXRjaGVycyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRu''@;'; put 'put ''Iiwic3dpdGNoZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVmdCJdLFsic2hhcGUiLCJldmVudCJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il0sWzEsInllYXJzIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJjYWxlbmRhci1i''@;'; put 'put ''dG4geWVhciIsMywiaXMtc2VsZWN0ZWQiLCJpcy1zdGFydC1yYW5nZSIsImlzLWVuZC1yYW5nZSIsImluLXJhbmdlIiwiaXMtdG9kYXkiLCJjbGljayIsIm1vdXNlZW50ZXIiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRuIiwieWVhciIsMywi''@;'; put 'put ''Y2xpY2siLCJtb3VzZWVudGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoZGUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImJ1dHRvbiIsMiksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmNoYW5nZVRvRGF5VmlldygpfSksUGUoMyksaGUoKSgpLGRlKDQsImRpdiIs''@;'; put 'put ''MykoNSwiYnV0dG9uIiw0KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucHJldmlvdXNEZWNhZGUoKX0pLEd0KDYsImNkcy1pY29uIiw1KSxoZSgpLGRlKDcsImJ1dHRvbiIsNCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmN1cnJlbnREZWNhZGUoKX0pLEd0KDgsImNk''@;'; put 'put ''cy1pY29uIiw2KSxoZSgpLGRlKDksImJ1dHRvbiIsNCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLm5leHREZWNhZGUoKX0pLEd0KDEwLCJjZHMtaWNvbiIsNyksaGUoKSgpKCksZGUoMTEsImRpdiIsOCksZ3QoMTIsWFplLDIsMTIsImJ1dHRvbiIsOSksaGUoKSksMiZhJiYoZmUo''@;'; put 'put ''MyksWHUoIiAiLGQueWVhclJhbmdlTW9kZWwueWVhclJhbmdlWzBdLCIgLSAiLGQueWVhclJhbmdlTW9kZWwueWVhclJhbmdlW2QueWVhclJhbmdlTW9kZWwueWVhclJhbmdlLmxlbmd0aC0xXSwiICIpLGZlKDIpLE5yKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlj''@;'; put 'put ''a2VyUHJldmlvdXNEZWNhZGUpLGZlKCksTnIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyUHJldmlvdXNEZWNhZGUpLGZlKCksTnIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJDdXJyZW50RGVjYWRlKSxmZSgpLE5yKCJ0aXRsZSIs''@;'; put 'put ''ZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckN1cnJlbnREZWNhZGUpLGZlKCksTnIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJOZXh0RGVjYWRlKSxmZSgpLE5yKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHREZWNh''@;'; put 'put ''ZGUpLGZlKDIpLEVlKCJuZ0Zvck9mIixkLnllYXJSYW5nZU1vZGVsLnllYXJSYW5nZSkpfSxkZXBlbmRlbmNpZXM6W2hzLGZzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxGM2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLl92aWV3TWFuYWdlclNlcnZpY2U9YSx0''@;'; put 'put ''aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9ZCx0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlPWgsdGhpcy5jb21tb25TdHJpbmdzPWZ9Z2V0IG1vbnRoQXR0clN0cmluZygpe3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tl''@;'; put 'put ''clNlbGVjdE1vbnRoVGV4dCx7Q0FMRU5EQVJfTU9OVEg6dGhpcy5jYWxlbmRhck1vbnRofSl9Z2V0IHllYXJBdHRyU3RyaW5nKCl7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyU2VsZWN0WWVhclRleHQse0NBTEVOREFS''@;'; put 'put ''X1lFQVI6dGhpcy5jYWxlbmRhclllYXIudG9TdHJpbmcoKX0pfWdldCBjYWxlbmRhck1vbnRoKCl7cmV0dXJuIHRoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2UubG9jYWxlTW9udGhzQWJicmV2aWF0ZWRbdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyLm1vbnRo''@;'; put 'put ''XX1nZXQgY2FsZW5kYXJZZWFyKCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5kaXNwbGF5ZWRDYWxlbmRhci55ZWFyfWNoYW5nZVRvTW9udGhWaWV3KCl7dGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlLmNoYW5nZVRvTW9udGhWaWV3KCl9Y2hhbmdlVG9ZZWFyVmlldygpe3Ro''@;'; put 'put ''aXMuX3ZpZXdNYW5hZ2VyU2VydmljZS5jaGFuZ2VUb1llYXJWaWV3KCl9bmV4dE1vbnRoKCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1vdmVUb05leHRNb250aCgpfXByZXZpb3VzTW9udGgoKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92ZVRvUHJldmlvdXNNb250aCgp''@;'; put 'put ''fWN1cnJlbnRNb250aCgpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5tb3ZlVG9DdXJyZW50TW9udGgoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUod3cpLHFlKGIyKSxxZShjQSkscWUocHMpKX0sYy5cdTAyNzVjbXA9YXIoe3R5cGU6''@;'; put 'put ''YyxzZWxlY3RvcnM6W1siY2xyLWRheXBpY2tlciJdXSxob3N0QXR0cnM6WyJyb2xlIiwiYXBwbGljYXRpb24iXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmeHIoImRheXBpY2tlciIsITApfSxzdGFuZGFsb25lOiExLGRlY2xzOjE4LHZhcnM6MTQsY29uc3Rz''@;'; put 'put ''OltbMSwiY2xyLXNyLW9ubHkiXSxbMSwiY2FsZW5kYXItaGVhZGVyIl0sWzEsImNhbGVuZGFyLXBpY2tlcnMiXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsIm1vbnRocGlja2VyLXRyaWdnZXIiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4i''@;'; put 'put ''LCJ5ZWFycGlja2VyLXRyaWdnZXIiLDMsImNsaWNrIl0sWzEsImNhbGVuZGFyLXN3aXRjaGVycyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRuIiwic3dpdGNoZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVmdCJdLFsic2hhcGUiLCJldmVu''@;'; put 'put ''dCJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoZGUoMCwiZGl2IiwwKSxQZSgxKSxoZSgpLGRlKDIsImRpdiIsMSkoMywiZGl2IiwyKSg0LCJidXR0b24iLDMpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''ZC5jaGFuZ2VUb01vbnRoVmlldygpfSksUGUoNSksaGUoKSxkZSg2LCJidXR0b24iLDQpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jaGFuZ2VUb1llYXJWaWV3KCl9KSxQZSg3KSxoZSgpKCksZGUoOCwiZGl2Iiw1KSg5LCJidXR0b24iLDYpLE90KCJjbGljayIsZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gZC5wcmV2aW91c01vbnRoKCl9KSxHdCgxMCwiY2RzLWljb24iLDcpLGhlKCksZGUoMTEsImJ1dHRvbiIsNiksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmN1cnJlbnRNb250aCgpfSksR3QoMTIsImNkcy1pY29uIiw4KSxoZSgpLGRlKDEzLCJidXR0b24iLDYpLE90''@;'; put 'put ''KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5uZXh0TW9udGgoKX0pLEd0KDE0LCJjZHMtaWNvbiIsOSksaGUoKSgpKCksR3QoMTUsImNsci1jYWxlbmRhciIpLGRlKDE2LCJkaXYiLDApLFBlKDE3KSxoZSgpKSwyJmEmJihmZSgpLENyKGQuY29tbW9uU3RyaW5ncy5rZXlzLm1vZGFsQ29u''@;'; put 'put ''dGVudFN0YXJ0KSxmZSgzKSxOcigiYXJpYS1sYWJlbCIsZC5tb250aEF0dHJTdHJpbmcpKCJ0aXRsZSIsZC5tb250aEF0dHJTdHJpbmcpLGZlKCksSXIoIiAiLGQuY2FsZW5kYXJNb250aCwiICIpLGZlKCksTnIoImFyaWEtbGFiZWwiLGQueWVhckF0dHJTdHJpbmcpKCJ0aXRsZSIsZC55ZWFy''@;'; put 'put ''QXR0clN0cmluZyksZmUoKSxJcigiICIsZC5jYWxlbmRhclllYXIsIiAiKSxmZSgyKSxOcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclByZXZpb3VzTW9udGgpLGZlKCksTnIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyUHJldmlv''@;'; put 'put ''dXNNb250aCksZmUoKSxOcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckN1cnJlbnRNb250aCksZmUoKSxOcigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJDdXJyZW50TW9udGgpLGZlKCksTnIoImFyaWEtbGFiZWwiLGQuY29tbW9u''@;'; put 'put ''U3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJOZXh0TW9udGgpLGZlKCksTnIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyTmV4dE1vbnRoKSxmZSgzKSxDcihkLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRFbmQpKX0sZGVwZW5kZW5jaWVzOltmcyxEM2VdLGVu''@;'; put 'put ''Y2Fwc3VsYXRpb246Mn0pLGN9KSgpLEgzZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuY29tbW9uU3RyaW5ncz1hLHRoaXMudG9nZ2xlU2VydmljZT1kLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWgsdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlPWZ9YXBw''@;'; put 'put ''bHkoKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheSYmdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/KHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm5vdGlmeVNl''@;'; put 'put ''bGVjdGVkRGF5Q2hhbmdlZCh7c3RhcnREYXRlOnRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5LGVuZERhdGU6dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXl9KSx0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UubWFya0FzRGlydHkoKSk6IXRo''@;'; put 'put ''aXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJnRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5JiYodGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uubm90aWZ5U2VsZWN0ZWREYXlDaGFuZ2VkKHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVj''@;'; put 'put ''dGVkRGF5KSx0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UubWFya0FzRGlydHkoKSksdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITF9Y2FuY2VsKCl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UucmVzZXRTZWxlY3RlZERheSgpLHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExfX1yZXR1''@;'; put 'put ''cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShwcykscWUoeWMpLHFlKGIyKSxxZShfdykpfSxjLlx1MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0ZXBpY2tlci1hY3Rpb25zIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0''@;'; put 'put ''aW9uKGEsZCl7MiZhJiZ4cigiZGF0ZXBpY2tlci1hY3Rpb25zIiwhMCl9LHN0YW5kYWxvbmU6ITEsZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlv''@;'; put 'put ''bihhLGQpezEmYSYmKGRlKDAsImJ1dHRvbiIsMCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmNhbmNlbCgpfSksUGUoMSksaGUoKSxkZSgyLCJidXR0b24iLDEpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5hcHBseSgpfSksUGUoMyksaGUoKSksMiZhJiYoZmUoKSxD''@;'; put 'put ''cihkLmNvbW1vblN0cmluZ3Mua2V5cy5jYW5jZWwpLGZlKDIpLENyKGQuY29tbW9uU3RyaW5ncy5rZXlzLmFwcGx5KSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLE4zZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuY29tbW9uU3RyaW5ncz1hLHRoaXMudmlld01h''@;'; put 'put ''bmFnZXJTZXJ2aWNlPWQsdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2U9aCx0aGlzLmRhdGVJT1NlcnZpY2U9Zn1nZXQgaXNNb250aFZpZXcoKXtyZXR1cm4gdGhpcy52aWV3TWFuYWdlclNlcnZpY2UuaXNNb250aFZpZXd9Z2V0IGlzWWVhclZpZXcoKXtyZXR1cm4gdGhpcy52aWV3TWFuYWdl''@;'; put 'put ''clNlcnZpY2UuaXNZZWFyVmlld31nZXQgaXNEYXlWaWV3KCl7cmV0dXJuIHRoaXMudmlld01hbmFnZXJTZXJ2aWNlLmlzRGF5Vmlld31nZXQgaGFzUmFuZ2VPcHRpb25zKCl7cmV0dXJuISF0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZT8uaXNSYW5nZVBpY2tlciYmISF0aGlzLmRhdGVSYW5n''@;'; put 'put ''ZU9wdGlvbnM/Lmxlbmd0aH1nZXQgaGFzQWN0aW9uQnV0dG9ucygpe3JldHVybiB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5oYXNBY3Rpb25CdXR0b25zfWdldCBkYXRlUmFuZ2VPcHRpb25zKCl7cmV0dXJuIHRoaXMuZGF0ZUlPU2VydmljZS5nZXRSYW5nZU9wdGlvbnMoKX1vblJhbmdl''@;'; put 'put ''T3B0aW9uU2VsZWN0KGEpe2NvbnN0IGQ9dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuY29udmVydERhdGVUb0RheU1vZGVsKGE/LnZhbHVlWzBdKSxoPXRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmNvbnZlcnREYXRlVG9EYXlNb2RlbChhPy52YWx1ZVsxXSk7dGhpcy5kYXRlTmF2aWdh''@;'; put 'put ''dGlvblNlcnZpY2Uubm90aWZ5U2VsZWN0ZWREYXlDaGFuZ2VkKHtzdGFydERhdGU6ZCxlbmREYXRlOmh9LHtlbWl0RXZlbnQ6IXRoaXMuaGFzQWN0aW9uQnV0dG9uc30pLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1vdmVUb1NwZWNpZmljTW9udGgoZCl9fXJldHVybiBjLlx1MDI3NWZh''@;'; put 'put ''Yz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKHBzKSxxZSh3dykscWUoYjIpLHFlKG81KSl9LGMuXHUwMjc1Y21wPWFyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRlcGlja2VyLXZpZXctbWFuYWdlciJdXSxob3N0QXR0cnM6WyJyb2xlIiwiZGlhbG9nIl0saG9zdFZhcnM6''@;'; put 'put ''OCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihOcigiYXJpYS1tb2RhbCIsITApKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyRGlhbG9nTGFiZWwpLHhyKCJkYXRlcGlja2VyIiwhMCkoImhhcy1yYW5nZS1vcHRpb24iLGQuaGFzUmFuZ2VPcHRp''@;'; put 'put ''b25zKSgiaGFzLWFjdGlvbi1idXR0b25zIixkLmhhc0FjdGlvbkJ1dHRvbnMpKX0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbaGEoW2c2XSldLGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWyJjYWxlbmRhclZpZXciLCIiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWzEsImNsci1kYXRlLXJhbmdl''@;'; put 'put ''LXBpY2tlci1uYXYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImRhdGVwaWNrZXItdmlldy1tYW5hZ2VyIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsImhyZWYiLCJqYXZhc2NyaXB0OnZvaWQoMCkiLCJ0YWJpbmRleCIsIjAiLDMsImtleXVw''@;'; put 'put ''LmVudGVyIiwiY2xpY2siXSxbNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmZ3QoMCxRWmUsNSwyLCJuZy1jb250YWluZXIiLDEpKDEsaVdlLDQsNCwibmctdGVtcGxhdGUiLG51bGwsMCx4YyksMiZhKXtjb25zdCBoPWZhKDIpO0VlKCJuZ0lmIixkLmhhc1Jhbmdl''@;'; put 'put ''T3B0aW9ucykoIm5nSWZFbHNlIixoKX19LGRlcGVuZGVuY2llczpbaHMsQ2EseWQsa1gsSVgsTDNlLFAzZSxGM2UsSDNlXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxkQT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgTDl7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxVLHRlLG9lLHZlLHdlLEZl''@;'; put 'put ''LFdlKXtpZihzdXBlcihXZSx3ZSx2ZSxGZSksdGhpcy5yZW5kZXJlcj1hLHRoaXMuZWxlbT1kLHRoaXMudG9nZ2xlU2VydmljZT1oLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWYsdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2U9dix0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2U9''@;'; put 'put ''TSx0aGlzLmRhdGVJT1NlcnZpY2U9RCx0aGlzLmNvbW1vblN0cmluZ3M9VSx0aGlzLnZpZXdNYW5hZ2VyU2VydmljZT1vZSx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9dmUsdGhpcy5sYXlvdXRTZXJ2aWNlPXdlLHRoaXMubmdDb250cm9sU2VydmljZT1GZSx0aGlzLmlmQ29udHJvbFN0YXRl''@;'; put 'put ''U2VydmljZT1XZSx0aGlzLmZvY3VzPSExLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRlLmZvY3VzQ2hhbmdlLnN1YnNjcmliZShudD0+e3RoaXMuZm9jdXM9bnR9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goaC5vcGVuQ2hhbmdlLnN1YnNjcmliZSgoKT0+e00ubWFya0FzVG91Y2hlZCgp''@;'; put 'put ''fSkpLGYpe2NvbnN0IG50PWQubmF0aXZlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7Zi5oYXNBY3Rpb25CdXR0b25zPWYuaXNSYW5nZVBpY2tlcj0iY2xyLWRhdGUtcmFuZ2UtY29udGFpbmVyIj09PW50fX1zZXQgc2hvd0FjdGlvbkJ1dHRvbnMoYSl7dGhpcy5kYXRlTmF2aWdhdGlv''@;'; put 'put ''blNlcnZpY2UuaXNSYW5nZVBpY2tlciYmIWE/Y29uc29sZS5lcnJvcigiRXJyb3IhIFRoZSBkYXRlIHJhbmdlIHBpY2tlciByZXF1aXJlcyBhY3Rpb24gYnV0dG9ucywgW3Nob3dBY3Rpb25CdXR0b25zXSBjYW5ub3QgYmUgdHVybmVkIG9mZi4iKTp0aGlzLmRhdGVOYXZpZ2F0aW9uU2Vydmlj''@;'; put 'put ''ZS5oYXNBY3Rpb25CdXR0b25zPWF9c2V0IGNsclBvc2l0aW9uKGEpe2EmJmxoW2FdJiYodGhpcy52aWV3TWFuYWdlclNlcnZpY2UucG9zaXRpb249bGhbYV0pfXNldCByYW5nZU9wdGlvbnMoYSl7dGhpcy5kYXRlSU9TZXJ2aWNlLnNldFJhbmdlT3B0aW9ucyhhKX1zZXQgbWluKGEpe3RoaXMu''@;'; put 'put ''ZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXI/KHRoaXMuZGF0ZUlPU2VydmljZS5zZXRNaW5EYXRlKGEpLHRoaXMuY2xyU3RhcnREYXRlSW5wdXQ/LnRyaWdnZXJDb250cm9sSW5wdXRWYWxpZGF0aW9uKCksdGhpcy5jbHJFbmREYXRlSW5wdXQ/LnRyaWdnZXJDb250cm9sSW5w''@;'; put 'put ''dXRWYWxpZGF0aW9uKCkpOmNvbnNvbGUuZXJyb3IoIkVycm9yISBUaGUgZGF0ZSBjb250YWluZXIgW21pbl0gaW5wdXQgb25seSB3b3JrcyBmb3IgZGF0ZSByYW5nZSBwaWNrZXJzLiBVc2UgdGhlIG5hdGl2ZSBgbWluYCBhdHRyaWJ1dGUvcHJvcGVydHkgZm9yIHNpbmdsZS1kYXRlIGlucHV0''@;'; put 'put ''cy4iKX1zZXQgbWF4KGEpe3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXI/KHRoaXMuZGF0ZUlPU2VydmljZS5zZXRNYXhEYXRlKGEpLHRoaXMuY2xyU3RhcnREYXRlSW5wdXQ/LnRyaWdnZXJDb250cm9sSW5wdXRWYWxpZGF0aW9uKCksdGhpcy5jbHJFbmREYXRlSW5w''@;'; put 'put ''dXQ/LnRyaWdnZXJDb250cm9sSW5wdXRWYWxpZGF0aW9uKCkpOmNvbnNvbGUuZXJyb3IoIkVycm9yISBUaGUgZGF0ZSBjb250YWluZXIgW21heF0gaW5wdXQgb25seSB3b3JrcyBmb3IgZGF0ZSByYW5nZSBwaWNrZXJzLiBVc2UgdGhlIG5hdGl2ZSBgbWF4YCBhdHRyaWJ1dGUvcHJvcGVydHkg''@;'; put 'put ''Zm9yIHNpbmdsZS1kYXRlIGlucHV0cy4iKX1zZXQgYWN0aW9uQnV0dG9uKGEpe3RoaXMudG9nZ2xlQnV0dG9uPWF9Z2V0IHBvcG92ZXJQb3NpdGlvbigpe3JldHVybiB0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5wb3NpdGlvbn1nZXQgb3Blbigpe3JldHVybiB0aGlzLnRvZ2dsZVNlcnZpY2Uu''@;'; put 'put ''b3Blbn1nZXQgaXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuZGF0ZXBpY2tlckVuYWJsZWRTZXJ2aWNlLmlzRW5hYmxlZH1nZXQgaXNJbnB1dERhdGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5kaXNhYmxlZHx8dGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNl''@;'; put 'put ''JiZ0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UuZGlzYWJsZWR9Z2V0IGlzUmFuZ2VQaWNrZXIoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlcn1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmRhdGVSYW5nZVN0cnVjdHVyYWxDaGVja3MoKSx0aGlzLnN1''@;'; put 'put ''YnNjcmlwdGlvbnMucHVzaCh0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoYT0+e2E/dGhpcy5pbml0aWFsaXplQ2FsZW5kYXIoKToodGhpcy50b2dnbGVCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnJlc2V0U2Vs''@;'; put 'put ''ZWN0ZWREYXkoKSl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JEYXRlQ2hhbmdlcygpKX1nZXRUb2dnbGVCdXR0b25MYWJlbChhKXtpZihhKXtjb25zdCBkPXRoaXMuZGF0ZUlPU2VydmljZS50b0xvY2FsZURpc3BsYXlGb3JtYXRTdHJpbmcoYS50b0RhdGUoKSk7''@;'; put 'put ''cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyVG9nZ2xlQ2hhbmdlRGF0ZUxhYmVsLHtTRUxFQ1RFRF9EQVRFOmR9KX1yZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclRvZ2dsZUNob29zZURhdGVM''@;'; put 'put ''YWJlbH1saXN0ZW5Gb3JEYXRlQ2hhbmdlcygpe3JldHVybiB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheUNoYW5nZS5waXBlKFNmKHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5KSkuc3Vic2NyaWJlKGE9PntpZih0aGlzLmlzRW5hYmxlZCl7Y29u''@;'; put 'put ''c3QgZD10aGlzLmdldFRvZ2dsZUJ1dHRvbkxhYmVsKGEpLGg9dGhpcy50b2dnbGVCdXR0b24ubmF0aXZlRWxlbWVudDt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShoLCJhcmlhLWxhYmVsIixkKSx0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShoLCJ0aXRsZSIsZCl9fSl9aW5pdGlhbGl6''@;'; put 'put ''ZUNhbGVuZGFyKCl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaW5pdGlhbGl6ZUNhbGVuZGFyKCl9ZGF0ZVJhbmdlU3RydWN0dXJhbENoZWNrcygpe3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJih0aGlzLmNsckRhdGVJbnB1dCYmY29uc29sZS5lcnJvcigi''@;'; put 'put ''RXJyb3IhIGNsci1kYXRlLXJhbmdlLWNvbnRhaW5lciBtdXN0IGNvbnRhaW4gY2xyU3RhcnREYXRlIGFuZCBjbHJFbmREYXRlIGlucHV0cyIpLHRoaXMuY2xyU3RhcnREYXRlSW5wdXR8fGNvbnNvbGUuZXJyb3IoIkVycm9yISBjbHItZGF0ZS1yYW5nZS1jb250YWluZXIgbXVzdCBjb250YWlu''@;'; put 'put ''IGNsclN0YXJ0RGF0ZSBpbnB1dCIpLHRoaXMuY2xyRW5kRGF0ZUlucHV0fHxjb25zb2xlLmVycm9yKCJFcnJvciEgY2xyLWRhdGUtcmFuZ2UtY29udGFpbmVyIG11c3QgY29udGFpbiBjbHJFbmREYXRlIGlucHV0IikpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5l''@;'; put 'put ''dyhhfHxjKShxZShObykscWUobmEpLHFlKHljKSxxZShiMikscWUoZ0gpLHFlKF93KSxxZShvNSkscWUocHMpLHFlKHZ3KSxxZSh3dykscWUoZGgpLHFlKHk0LDgpLHFlKE4xKSxxZSh1aCkpfSxjLlx1MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0ZS1jb250YWluZXIi''@;'; put 'put ''XSxbImNsci1kYXRlLXJhbmdlLWNvbnRhaW5lciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYocG8oaCxtSCw1KSxwbyhoLFIzZSw1KSxwbyhoLEkzZSw1KSksMiZhKXtsZXQgZjtnaShmPW1pKCkpJiYoZC5jbHJEYXRlSW5wdXQ9Zi5maXJzdCksZ2koZj1taSgp''@;'; put 'put ''KSYmKGQuY2xyU3RhcnREYXRlSW5wdXQ9Zi5maXJzdCksZ2koZj1taSgpKSYmKGQuY2xyRW5kRGF0ZUlucHV0PWYuZmlyc3QpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZVYShhV2UsNSksMiZhKXtsZXQgaDtnaShoPW1pKCkpJiYoZC5hY3Rpb25CdXR0b249aC5maXJzdCl9''@;'; put 'put ''fSxob3N0VmFyczo4LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmeHIoImNsci1kYXRlLWNvbnRhaW5lciIsITApKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixkLmlzSW5wdXREYXRlRGlzYWJsZWQpKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1yb3ciLGQuYWRkR3Jp''@;'; put 'put ''ZCgpKX0saW5wdXRzOntzaG93QWN0aW9uQnV0dG9uczoic2hvd0FjdGlvbkJ1dHRvbnMiLGNsclBvc2l0aW9uOiJjbHJQb3NpdGlvbiIscmFuZ2VPcHRpb25zOiJyYW5nZU9wdGlvbnMiLG1pbjoibWluIixtYXg6Im1heCJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hhKFt2MixjQSxkaCx2''@;'; put 'put ''dyxOMSxvNSxiMixnSCxfdyx3dyx1aF0pLHlmKFtuNV0pLExhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6c1dlLGRlY2xzOjE0LHZhcnM6MTUsY29uc3RzOltbImFjdGlvbkJ1dHRvbiIsIiJdLFs0LCJuZ0lmIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsiY2xyUG9w''@;'; put 'put ''b3ZlckFuY2hvciIsIiIsMSwiY2xyLWlucHV0LXdyYXBwZXIiXSxbMSwiY2xyLWlucHV0LWdyb3VwIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyUG9wb3Zlck9wZW5DbG9zZUJ1dHRvbiIsIiIsImNsYXNzIiwiY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9uIiwzLCJkaXNhYmxlZCIsNCwibmdJ''@;'; put 'put ''ZiJdLFsiY2RrVHJhcEZvY3VzIiwiIiw0LCJjbHJQb3BvdmVyQ29udGVudCIsImNsclBvcG92ZXJDb250ZW50QXQiLCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWlj''@;'; put 'put ''b24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVu''@;'; put 'put ''IiwidHJ1ZSIsNCwibmdJZiJdLFsxLCJkYXRlLXJhbmdlLXNlcGFyYXRvciJdLFsidHlwZSIsImJ1dHRvbiIsImNsclBvcG92ZXJPcGVuQ2xvc2VCdXR0b24iLCIiLDEsImNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiIsMywiZGlzYWJsZWQiXSxbInN0YXR1cyIsImluZm8iLCJzaGFwZSIs''@;'; put 'put ''ImNhbGVuZGFyIl0sWyJjZGtUcmFwRm9jdXMiLCIiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNz''@;'; put 'put ''IiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKG9XZSksV3IoMCksZ3QoMSxsV2UsMSwwLCJsYWJlbCIsMSksZGUoMiwiZGl2IiwyKSgzLCJkaXYiLDMpKDQsImRpdiIsNCksZ3QoNSxjV2UsNSwwLCJu''@;'; put 'put ''Zy1jb250YWluZXIiLDEpLFdyKDYsMSksZ3QoNyx1V2UsMywxLCJidXR0b24iLDUpKDgsZFdlLDEsMCwiY2xyLWRhdGVwaWNrZXItdmlldy1tYW5hZ2VyIiw2KSxoZSgpLGd0KDksaFdlLDEsMCwiY2RzLWljb24iLDcpKDEwLGZXZSwxLDAsImNkcy1pY29uIiw4KSxoZSgpLGd0KDExLHBXZSwx''@;'; put 'put ''LDAsIm5nLWNvbnRlbnQiLDEpKDEyLGdXZSwxLDAsIm5nLWNvbnRlbnQiLDEpKDEzLG1XZSwxLDAsIm5nLWNvbnRlbnQiLDEpLGhlKCkpLDImYSYmKGZlKCksRWUoIm5nSWYiLCFkLmxhYmVsJiZkLmFkZEdyaWQoKSksZmUoKSxFZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksZmUoMiks''@;'; put 'put ''eHIoImNsci1mb2N1cyIsZC5mb2N1cyksZmUoKSxFZSgibmdJZiIsZC5pc1JhbmdlUGlja2VyKSxmZSgyKSxFZSgibmdJZiIsZC5pc0VuYWJsZWQpLGZlKCksRWUoImNsclBvcG92ZXJDb250ZW50IixkLm9wZW4pKCJjbHJQb3BvdmVyQ29udGVudEF0IixkLnBvcG92ZXJQb3NpdGlvbikoImNs''@;'; put 'put ''clBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsITApKCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiLCEwKSxmZSgpLEVlKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLEVlKCJuZ0lmIixkLnNob3dWYWxpZCksZmUoKSxFZSgibmdJZiIsZC5zaG93SGVscGVyKSxm''@;'; put 'put ''ZSgpLEVlKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLEVlKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W1J1LENhLHl3LFFULG5BLHRBLGZzLENzLE4zZV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksSFg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmRh''@;'; put 'put ''dGVJT1NlcnZpY2U9YX12YWxpZGF0ZShhKXtpZih0aGlzLmRhdGVJT1NlcnZpY2Upe2NvbnN0IGQ9dGhpcy5kYXRlSU9TZXJ2aWNlLmdldERhdGVWYWx1ZUZyb21EYXRlU3RyaW5nKGEudmFsdWUpLGg9dGhpcy5kYXRlSU9TZXJ2aWNlLmRpc2FibGVkRGF0ZXMubWluRGF0ZS50b0RhdGUoKSxm''@;'; put 'put ''PXRoaXMuZGF0ZUlPU2VydmljZS5kaXNhYmxlZERhdGVzLm1heERhdGUudG9EYXRlKCk7aWYoZCYmZDxoKXJldHVybnttaW46e21pbjpoLnRvTG9jYWxlRGF0ZVN0cmluZygpLGFjdHVhbDpkLnRvTG9jYWxlRGF0ZVN0cmluZygpfX07aWYoZCYmZD5mKXJldHVybnttYXg6e21heDpmLnRvTG9j''@;'; put 'put ''YWxlRGF0ZVN0cmluZygpLGFjdHVhbDpkLnRvTG9jYWxlRGF0ZVN0cmluZygpfX19cmV0dXJuIG51bGx9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKG81LDgpKX0sYy5cdTAyNzVkaXI9WXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRGF0''@;'; put 'put ''ZSIsIiJdLFsiIiwiY2xyU3RhcnREYXRlIiwiIl0sWyIiLCJjbHJFbmREYXRlIiwiIl1dLHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hhKFt7cHJvdmlkZTp4MCx1c2VFeGlzdGluZzpjLG11bHRpOiEwfV0pXX0pLGN9KSgpLE5YZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7TnMuYWRk''@;'; put 'put ''SWNvbnMoaDIsZjIsbncsU2plLE1qZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1FaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9eWkoe2ltcG9ydHM6W05hLGZILGFBLFJmLHJBLFZzLHl1LEUzZV19KSxjfSkoKTtuZXcgam4o''@;'; put 'put ''IkNsckZpbGVNZXNzYWdlc1RlbXBsYXRlQ29udGV4dCIpO2xldCBCWGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe05zLmFkZEljb25zKHhqZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1FaSh7dHlwZTpjfSksYy5c''@;'; put 'put ''dTAyNzVpbmo9eWkoe2ltcG9ydHM6W05hLFZzLHl1LHl1XX0pLGN9KSgpLFYzZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgTDl7Y29uc3RydWN0b3IoYSxkLGgsZix2KXtzdXBlcih2LGQsYSxoKSx0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZT12LHRoaXMuZm9jdXM9ITEsdGhpcy5zdWJzY3Jp''@;'; put 'put ''cHRpb25zLnB1c2goZi5mb2N1c0NoYW5nZS5zdWJzY3JpYmUoTT0+dGhpcy5mb2N1cz1NKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKGRoKSxxZSh5NCw4KSxxZShOMSkscWUodncpLHFlKHVoKSl9LGMuXHUwMjc1Y21wPWFyKHt0eXBlOmMs''@;'; put 'put ''c2VsZWN0b3JzOltbImNsci1udW1iZXItaW5wdXQtY29udGFpbmVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJnBvKGgsQjNlLDUpLDImYSl7bGV0IGY7Z2koZj1taSgpKSYmKGQuaW5wdXQ9Zi5maXJzdCl9fSxob3N0VmFyczo4LGhvc3RCaW5kaW5nczpmdW5j''@;'; put 'put ''dGlvbihhLGQpezImYSYmeHIoImNsci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsbnVsbD09ZC5jb250cm9sP251bGw6ZC5jb250cm9sLmRpc2FibGVkKSgiY2xyLWZvcm0tY29udHJvbC1yZWFkb25seSIsZC5pbnB1dC5yZWFkb25seSkoImNsci1yb3ci''@;'; put 'put ''LGQuYWRkR3JpZCgpKX0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbaGEoW3Z3LHVoLE4xLHYyLGRoXSksTGFdLG5nQ29udGVudFNlbGVjdG9yczp3V2UsZGVjbHM6MTcsdmFyczoxMSxjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsx''@;'; put 'put ''LCJjbHItbnVtYmVyLWlucHV0LXdyYXBwZXIiXSxbMSwiY2xyLWlucHV0LWdyb3VwIl0sWzEsImNsci1pbnB1dC1ncm91cC1hY3Rpb25zIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb24iLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwibWlu''@;'; put 'put ''dXMiLCJzaXplIiwic20iXSxbMSwiY2xyLW51bWJlci1pbnB1dC1zZXBhcmF0b3IiXSxbInNoYXBlIiwicGx1cyIsInNpemUiLCJzbSJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRk''@;'; put 'put ''ZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRh''@;'; put 'put ''bmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEm''@;'; put 'put ''JihzYShfV2UpLFdyKDApLGd0KDEsQ1dlLDEsMCwibGFiZWwiLDApLGRlKDIsImRpdiIsMSkoMywiZGl2IiwyKSg0LCJkaXYiLDMpLFdyKDUsMSksZGUoNiwiZGl2Iiw0KSg3LCJidXR0b24iLDUpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5pbnB1dC5zdGVwRG93bigpfSksR3Qo''@;'; put 'put ''OCwiY2RzLWljb24iLDYpLGhlKCksR3QoOSwiZGl2Iiw3KSxkZSgxMCwiYnV0dG9uIiw1KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuaW5wdXQuc3RlcFVwKCl9KSxHdCgxMSwiY2RzLWljb24iLDgpLGhlKCkoKSgpLGd0KDEyLFNXZSwxLDAsImNkcy1pY29uIiw5KSgxMyxNV2Us''@;'; put 'put ''MSwwLCJjZHMtaWNvbiIsMTApLGhlKCksZ3QoMTQseFdlLDEsMCwibmctY29udGVudCIsMCkoMTUsRVdlLDEsMCwibmctY29udGVudCIsMCkoMTYsVFdlLDEsMCwibmctY29udGVudCIsMCksaGUoKSksMiZhJiYoZmUoKSxFZSgibmdJZiIsIWQubGFiZWwmJmQuYWRkR3JpZCgpKSxmZSgpLEVl''@;'; put 'put ''KCJuZ0NsYXNzIixkLmNvbnRyb2xDbGFzcygpKSxmZSgyKSx4cigiY2xyLWZvY3VzIixkLmZvY3VzKSxmZSgzKSxFZSgiZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCksZmUoMyksRWUoImRpc2FibGVkIixudWxsPT1kLmNvbnRyb2w/bnVsbDpkLmNv''@;'; put 'put ''bnRyb2wuZGlzYWJsZWQpLGZlKDIpLEVlKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLEVlKCJuZ0lmIixkLnNob3dWYWxpZCksZmUoKSxFZSgibmdJZiIsZC5zaG93SGVscGVyKSxmZSgpLEVlKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLEVlKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxk''@;'; put 'put ''ZXBlbmRlbmNpZXM6W1J1LENhLGZzLENzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxCM2U9KCgpPT57Y2xhc3MgYyBleHRlbmRzIE85e2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXtpZihzdXBlcihkLFYzZSxoLGYsdixNKSx0aGlzLmZvY3VzU2VydmljZT1hLHRoaXMuY29udHJvbD1mLHRo''@;'; put 'put ''aXMuZWw9TSx0aGlzLmluZGV4PTEsIWEpdGhyb3cgbmV3IEVycm9yKCJjbHJOdW1iZXJJbnB1dCByZXF1aXJlcyBiZWluZyB3cmFwcGVkIGluIDxjbHItbnVtYmVyLWlucHV0LWNvbnRhaW5lcj4iKX1nZXQgcmVhZG9ubHkoKXtyZXR1cm4gbnVsbCE9PXRoaXMuZWwubmF0aXZlRWxlbWVudC5n''@;'; put 'put ''ZXRBdHRyaWJ1dGUoInJlYWRvbmx5Iil9dHJpZ2dlckZvY3VzKCl7IXRoaXMucmVhZG9ubHkmJnRoaXMuZm9jdXNTZXJ2aWNlJiYodGhpcy5mb2N1c1NlcnZpY2UuZm9jdXNlZD0hMCl9dHJpZ2dlclZhbGlkYXRpb24oKXt0aGlzLnJlYWRvbmx5fHwoc3VwZXIudHJpZ2dlclZhbGlkYXRpb24o''@;'; put 'put ''KSx0aGlzLmZvY3VzU2VydmljZSYmKHRoaXMuZm9jdXNTZXJ2aWNlLmZvY3VzZWQ9ITEpKX1zdGVwVXAoKXt0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3RlcFVwKCksdGhpcy5lbC5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCJpbnB1dCIse2J1YmJsZXM6ITAsY2FuY2Vs''@;'; put 'put ''YWJsZTohMH0pKSx0aGlzLmNvbnRyb2wuY29udHJvbC5tYXJrQWxsQXNUb3VjaGVkKCl9c3RlcERvd24oKXt0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3RlcERvd24oKSx0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoImlucHV0Iix7YnViYmxlczohMCxjYW5j''@;'; put 'put ''ZWxhYmxlOiEwfSkpLHRoaXMuY29udHJvbC5jb250cm9sLm1hcmtBbGxBc1RvdWNoZWQoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUodncsOCkscWUoYmUpLHFlKFlvKSxxZShGMSwxMCkscWUoTm8pLHFlKG5hKSl9LGMuXHUwMjc1ZGlyPVly''@;'; put 'put ''KHt0eXBlOmMsc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsIm51bWJlciIsImNsck51bWJlcklucHV0IiwiIl1dLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZPdCgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGQudHJpZ2dlckZvY3VzKCl9KSgiYmx1ciIs''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gZC50cmlnZ2VyVmFsaWRhdGlvbigpfSksMiZhJiZ4cigiY2xyLWlucHV0IiwhMCkoImNsci1udW1iZXItaW5wdXQiLCEwKX0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbTGFdfSksY30pKCksalhlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtOcy5hZGRJ''@;'; put 'put ''Y29ucyhoMixmMixFamUsVGplKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUVpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj15aSh7aW1wb3J0czpbTmEsVWMsVnMseXUseXVdfSksY30pKCk7bmV3IGpuKHZvaWQgMCk7bGV0IFpY''@;'; put 'put ''ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7TnMuYWRkSWNvbnMoQWplLGtqZSxoMixmMil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1FaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9eWkoe2ltcG9ydHM6W05hLFVjLFZz''@;'; put 'put ''LHl1LHl1XX0pLGN9KSgpLE5YPSgoKT0+e2NsYXNzIGN7bmdPbkluaXQoKXt0aGlzLmxhYmVsJiZ0aGlzLmxhYmVsLmRpc2FibGVHcmlkKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9yczpb''@;'; put 'put ''WyJjbHItcmFkaW8td3JhcHBlciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZwbyhoLENzLDcpLDImYSl7bGV0IGY7Z2koZj1taSgpKSYmKGQubGFiZWw9Zi5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmeHIoImNs''@;'; put 'put ''ci1yYWRpby13cmFwcGVyIiwhMCl9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hhKFt2Ml0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6a1dlLGRlY2xzOjMsdmFyczoxLGNvbnN0czpbWzQsIm5nSWYiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShBV2UpLFdyKDApLFdyKDEsMSks''@;'; put 'put ''Z3QoMixEV2UsMSwwLCJsYWJlbCIsMCkpLDImYSYmKGZlKDIpLEVlKCJuZ0lmIiwhZC5sYWJlbCkpfSxkZXBlbmRlbmNpZXM6W0NhLENzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxWWD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgTzl7Y29uc3RydWN0b3IoYSxkLGgsZix2KXtzdXBlcihhLE5Y''@;'; put 'put ''LGQsaCxmLHYpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShiZSkscWUoWW8pLHFlKEYxLDEwKSxxZShObykscWUobmEpKX0sYy5cdTAyNzVkaXI9WXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyUmFkaW8iLCIiXV0sc3RhbmRhbG9uZToh''@;'; put 'put ''MSxmZWF0dXJlczpbTGFdfSksY30pKCksV1hlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBMOXtjb25zdHJ1Y3RvcihhLGQsaCxmKXtzdXBlcihmLGEsZCxoKSx0aGlzLmxheW91dFNlcnZpY2U9YSx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9ZCx0aGlzLm5nQ29udHJvbFNlcnZpY2U9aCx0aGlz''@;'; put 'put ''LmlmQ29udHJvbFN0YXRlU2VydmljZT1mLHRoaXMuaW5saW5lPSExLHRoaXMuX2dlbmVyYXRlZElkPU91KCl9Z2V0IGNscklubGluZSgpe3JldHVybiB0aGlzLmlubGluZX1zZXQgY2xySW5saW5lKGEpe3RoaXMuaW5saW5lPSJzdHJpbmciPT10eXBlb2YgYT8iZmFsc2UiIT09YTohIWF9bmdB''@;'; put 'put ''ZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXRBcmlhUm9sZXMoKSx0aGlzLnNldEFyaWFMYWJlbGxlZEJ5KCl9c2V0QXJpYVJvbGVzKCl7dGhpcy5yb2xlPXRoaXMucmFkaW9zLmxlbmd0aD8icmFkaW9ncm91cCI6bnVsbH1zZXRBcmlhTGFiZWxsZWRCeSgpe2NvbnN0IGE9dGhpcy5ncm91cExh''@;'; put 'put ''YmVsPy5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKTthP3RoaXMuYXJpYUxhYmVsbGVkQnk9dGhpcy5yYWRpb3MubGVuZ3RoP2E6bnVsbDoodGhpcy5ncm91cExhYmVsPy5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiaWQiLHRoaXMuX2dlbmVyYXRlZElkKSx0aGlzLmFyaWFM''@;'; put 'put ''YWJlbGxlZEJ5PXRoaXMucmFkaW9zLmxlbmd0aD90aGlzLl9nZW5lcmF0ZWRJZDpudWxsKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoeTQsOCkscWUoZGgpLHFlKE4xKSxxZSh1aCkpfSxjLlx1MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9y''@;'; put 'put ''czpbWyJjbHItcmFkaW8tY29udGFpbmVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihwbyhoLENzLDcsbmEpLHBvKGgsVlgsNSkpLDImYSl7bGV0IGY7Z2koZj1taSgpKSYmKGQuZ3JvdXBMYWJlbD1mLmZpcnN0KSxnaShmPW1pKCkpJiYoZC5yYWRpb3M9Zil9''@;'; put 'put ''fSxob3N0VmFyczo4LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKE5yKCJyb2xlIixkLnJvbGUpKCJhcmlhLWxhYmVsbGVkYnkiLGQuYXJpYUxhYmVsbGVkQnkpLHhyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29u''@;'; put 'put ''dHJvbD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKSl9LGlucHV0czp7Y2xySW5saW5lOiJjbHJJbmxpbmUifSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltoYShbTjEsdWgsZGgsRTldKSxMYV0sbmdDb250ZW50U2VsZWN0b3JzOlJXZSxkZWNsczo2LHZh''@;'; put 'put ''cnM6Nixjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJjbHItc3VidGV4dC13cmFwcGVyIiw0LCJuZ0lmIl0sWzEsImNsci1zdWJ0ZXh0LXdyYXBwZXIiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFw''@;'; put 'put ''ZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIs''@;'; put 'put ''NCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUi''@;'; put 'put ''LDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoSVdlKSxXcigwKSxndCgxLExXZSwxLDAsImxhYmVsIiwwKSxkZSgyLCJkaXYiLDEpLFdyKDMsMSksZ3QoNCxPV2UsMiwwLCJkaXYiLDIpKDUsVldlLDUsNCwiZGl2IiwyKSxoZSgpKSwyJmEm''@;'; put 'put ''JihmZSgpLEVlKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLGZlKCkseHIoImNsci1jb250cm9sLWlubGluZSIsZC5jbHJJbmxpbmUpLEVlKCJuZ0NsYXNzIixkLmNvbnRyb2xDbGFzcygpKSxmZSgyKSxFZSgibmdJZiIsZC5zaG93SGVscGVyKSxmZSgpLEVlKCJuZ0lmIixkLnNob3dW''@;'; put 'put ''YWxpZHx8ZC5zaG93SW52YWxpZCkpfSxkZXBlbmRlbmNpZXM6W1J1LENhLENzLGZzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxZWGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe05zLmFkZEljb25zKGgyLGYyKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBu''@;'; put 'put ''ZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUVpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj15aSh7aW1wb3J0czpbTmEseXUsYUEsVnMseXVdfSksY30pKCksR1hlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtOcy5hZGRJY29ucyhoMixmMil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihh''@;'; put 'put ''KXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1FaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9eWkoe2ltcG9ydHM6W05hLHl1LGFBLFZzLHl1XX0pLGN9KSgpLEN3PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBMOXtjb25zdHJ1Y3RvcihhLGQsaCxmKXtzdXBlcihmLGEsZCxoKSx0aGlzLmxh''@;'; put 'put ''eW91dFNlcnZpY2U9YSx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9ZCx0aGlzLm5nQ29udHJvbFNlcnZpY2U9aCx0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZT1mLHRoaXMubXVsdGk9ITF9bmdPbkluaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLm5nQ29udHJvbFNlcnZpY2Uu''@;'; put 'put ''Y29udHJvbENoYW5nZXMuc3Vic2NyaWJlKGE9PnthJiYodGhpcy5tdWx0aT1hLnZhbHVlQWNjZXNzb3IgaW5zdGFuY2VvZiBMVCx0aGlzLmNvbnRyb2w9YSl9KSl9d3JhcHBlckNsYXNzKCl7cmV0dXJuIHRoaXMubXVsdGk/ImNsci1tdWx0aXNlbGVjdC13cmFwcGVyIjoiY2xyLXNlbGVjdC13''@;'; put 'put ''cmFwcGVyIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoeTQsOCkscWUoZGgpLHFlKE4xKSxxZSh1aCkpfSxjLlx1MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc2VsZWN0LWNvbnRhaW5lciJdXSxjb250ZW50UXVlcmllczpm''@;'; put 'put ''dW5jdGlvbihhLGQsaCl7aWYoMSZhJiZwbyhoLExULDUpLDImYSl7bGV0IGY7Z2koZj1taSgpKSYmKGQubXVsdGlwbGU9Zi5maXJzdCl9fSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmeHIoImNsci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLWZvcm0tY29udHJv''@;'; put 'put ''bC1kaXNhYmxlZCIsbnVsbD09ZC5jb250cm9sP251bGw6ZC5jb250cm9sLmRpc2FibGVkKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltoYShbdWgsTjEsdjIsZGhdKSxMYV0sbmdDb250ZW50U2VsZWN0b3JzOmpXZSxkZWNsczoxMCx2YXJzOjgsY29u''@;'; put 'put ''c3RzOltbNCwibmdJZiJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxbMywibmdDbGFzcyJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVl''@;'; put 'put ''Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFy''@;'; put 'put ''aWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShCV2Up''@;'; put 'put ''LFdyKDApLGd0KDEseldlLDEsMCwibGFiZWwiLDApLGRlKDIsImRpdiIsMSkoMywiZGl2IiwyKSxXcig0LDEpLGd0KDUsVVdlLDEsMCwiY2RzLWljb24iLDMpKDYsWldlLDEsMCwiY2RzLWljb24iLDQpLGhlKCksZ3QoNyxXV2UsMSwwLCJuZy1jb250ZW50IiwwKSg4LFlXZSwxLDAsIm5nLWNv''@;'; put 'put ''bnRlbnQiLDApKDksR1dlLDEsMCwibmctY29udGVudCIsMCksaGUoKSksMiZhJiYoZmUoKSxFZSgibmdJZiIsIWQubGFiZWwmJmQuYWRkR3JpZCgpKSxmZSgpLEVlKCJuZ0NsYXNzIixkLmNvbnRyb2xDbGFzcygpKSxmZSgpLEVlKCJuZ0NsYXNzIixkLndyYXBwZXJDbGFzcygpKSxmZSgyKSxF''@;'; put 'put ''ZSgibmdJZiIsZC5zaG93SW52YWxpZCksZmUoKSxFZSgibmdJZiIsZC5zaG93VmFsaWQpLGZlKCksRWUoIm5nSWYiLGQuc2hvd0hlbHBlciksZmUoKSxFZSgibmdJZiIsZC5zaG93SW52YWxpZCksZmUoKSxFZSgibmdJZiIsZC5zaG93VmFsaWQpKX0sZGVwZW5kZW5jaWVzOltSdSxDYSxmcyxD''@;'; put 'put ''c10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksTjk9KCgpPT57Y2xhc3MgYyBleHRlbmRzIE85e2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7c3VwZXIoYSxDdyxkLGgsZix2KSx0aGlzLmluZGV4PTF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKGJl''@;'; put 'put ''KSxxZShZbykscWUoRjEsMTApLHFlKE5vKSxxZShuYSkpfSxjLlx1MDI3NWRpcj1Zcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJTZWxlY3QiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJnhyKCJjbHItc2VsZWN0IiwhMCl9LHN0YW5kYWxvbmU6''@;'; put 'put ''ITEsZmVhdHVyZXM6W0xhXX0pLGN9KSgpLCRYZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7TnMuYWRkSWNvbnMoaDIsZjIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9RWkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPXlp''@;'; put 'put ''KHtpbXBvcnRzOltOYSxVYyxWcyx5dSx5dV19KSxjfSkoKSxqM2U9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEw5e31yZXR1cm4gYy5cdTAyNzVmYWM9KCgpPT57bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD15bChjKSkpKGR8fGMpfX0pKCksYy5cdTAyNzVjbXA9YXIoe3R5''@;'; put 'put ''cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRleHRhcmVhLWNvbnRhaW5lciJdXSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmeHIoImNsci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsbnVsbD09ZC5jb250cm9sP251bGw6ZC5j''@;'; put 'put ''b250cm9sLmRpc2FibGVkKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltoYShbdWgsTjEsdjIsZGhdKSxMYV0sbmdDb250ZW50U2VsZWN0b3JzOktXZSxkZWNsczoxMCx2YXJzOjcsY29uc3RzOltbNCwibmdJZiJdLFsxLCJjbHItY29udHJvbC1jb250''@;'; put 'put ''YWluZXIiLDMsIm5nQ2xhc3MiXSxbMSwiY2xyLXRleHRhcmVhLXdyYXBwZXIiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJj''@;'; put 'put ''bHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNs''@;'; put 'put ''ci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoJFdlKSxXcigwKSxndCgxLFhXZSwxLDAsImxh''@;'; put 'put ''YmVsIiwwKSxkZSgyLCJkaXYiLDEpKDMsImRpdiIsMiksV3IoNCwxKSxndCg1LHFXZSwxLDAsImNkcy1pY29uIiwzKSg2LEpXZSwxLDAsImNkcy1pY29uIiw0KSxoZSgpLGd0KDcsUVdlLDEsMCwibmctY29udGVudCIsMCkoOCxlWWUsMSwwLCJuZy1jb250ZW50IiwwKSg5LHRZZSwxLDAsIm5n''@;'; put 'put ''LWNvbnRlbnQiLDApLGhlKCkpLDImYSYmKGZlKCksRWUoIm5nSWYiLCFkLmxhYmVsJiZkLmFkZEdyaWQoKSksZmUoKSxFZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksZmUoMyksRWUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLGZlKCksRWUoIm5nSWYiLGQuc2hvd1ZhbGlkKSxmZSgpLEVl''@;'; put 'put ''KCJuZ0lmIixkLnNob3dIZWxwZXIpLGZlKCksRWUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLGZlKCksRWUoIm5nSWYiLGQuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbUnUsQ2EsZnMsQ3NdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHZIPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBPOXtjb25z''@;'; put 'put ''dHJ1Y3RvcihhLGQsaCxmLHYpe3N1cGVyKGEsajNlLGQsaCxmLHYpLHRoaXMuaW5kZXg9MX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoYmUpLHFlKFlvKSxxZShGMSwxMCkscWUoTm8pLHFlKG5hKSl9LGMuXHUwMjc1ZGlyPVlyKHt0eXBlOmMs''@;'; put 'put ''c2VsZWN0b3JzOltbIiIsImNsclRleHRhcmVhIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZ4cigiY2xyLXRleHRhcmVhIiwhMCl9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W0xhXX0pLGN9KSgpLEtYZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9y''@;'; put 'put ''KCl7TnMuYWRkSWNvbnMoaDIsZjIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9RWkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPXlpKHtpbXBvcnRzOltOYSxVYyxWcyx5dSx5dV19KSxjfSkoKSx6M2U9KCgpPT57Y2xhc3MgY3t9''@;'; put 'put ''cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUVpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj15aSh7aW1wb3J0czpbTmEseXUsSktlLHJYZSxOWGUsQlhlLHczZSxaWGUsWVhlLCRYZSxLWGUsR1hlLGlYZSxqWGVdfSksY30pKCksVTNl''@;'; put 'put ''PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1FaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9eWkoe2ltcG9ydHM6W05hXX0pLGN9KSgpLFhYZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgclh7Y29uc3RydWN0''@;'; put 'put ''b3IoYSxkLGgsZix2LE0sRCxVLHRlKXtzdXBlcihhLGQsaCxmLHYsTSxELFUsdGUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShuYSkscWUoblgsOCkscWUoR3MsOCkscWUoWGEpLHFlKGJlKSxxZSh0WCw4KSxxZShydykscWUoUUYpLHFlKEhz''@;'; put 'put ''KSl9LGMuXHUwMjc1ZGlyPVlyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNka0RyYWciLCIiXV0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbTGFdfSksY30pKCkscVhlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1''@;'; put 'put ''MDI3NW1vZD1FaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9eWkoe30pLGN9KSgpLEpYZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9RWkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPXlpKHtpbXBvcnRzOltO''@;'; put 'put ''YV19KSxjfSkoKTtjbGFzcyB5SHt9bGV0IGhBPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLm5iQ2hhbmdlcz0wLHRoaXMuX2NoYW5nZT1uZXcgdXJ9Z2V0IGNoYW5nZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Y2hhbmdlU3RhcnQoKXt0aGlzLm5iQ2hh''@;'; put 'put ''bmdlcysrfWNoYW5nZURvbmUoKXswPT0tLXRoaXMubmJDaGFuZ2VzJiZ0aGlzLl9jaGFuZ2UubmV4dCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxt''@;'; put 'put ''Nj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuc3RhdGVEZWJvdW5jZXI9YSx0aGlzLmFjdGl2YXRlZD0hMSx0aGlzLl9zaXplPTAsdGhpcy5fY3VycmVudD0xLHRoaXMuX2NoYW5nZT1uZXcgdXIsdGhpcy5wcmV2ZW50RW1pdD0hMSx0aGlzLl9zaXplQ2hhbmdlPW5ldyB1cn1n''@;'; put 'put ''ZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfXNldCBzaXplKGEpe2NvbnN0IGQ9dGhpcy5fc2l6ZTthIT09ZCYmKHRoaXMucHJldmVudEVtaXR8fHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlU3RhcnQoKSx0aGlzLl9zaXplPWEsdGhpcy5fY3VycmVudD0wPT09YT8xOk1hdGguZmxvb3Io''@;'; put 'put ''ZC9hKih0aGlzLl9jdXJyZW50LTEpKSsxLHRoaXMucHJldmVudEVtaXR8fCh0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KSx0aGlzLl9zaXplQ2hhbmdlLm5leHQodGhpcy5fc2l6ZSksdGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VEb25lKCkpKSx0aGlzLnByZXZlbnRFbWl0PSEx''@;'; put 'put ''fWdldCB0b3RhbEl0ZW1zKCl7cmV0dXJuIHRoaXMuX3RvdGFsSXRlbXN8fDB9c2V0IHRvdGFsSXRlbXMoYSl7dGhpcy5fdG90YWxJdGVtcz1hLHRoaXMuY3VycmVudD50aGlzLmxhc3QmJih0aGlzLmN1cnJlbnQ9dGhpcy5sYXN0KX1nZXQgbGFzdCgpe3JldHVybiB0aGlzLl9sYXN0P3RoaXMu''@;'; put 'put ''X2xhc3Q6dGhpcy5zaXplPjAmJnRoaXMudG90YWxJdGVtcz9NYXRoLmNlaWwodGhpcy50b3RhbEl0ZW1zL3RoaXMuc2l6ZSk6MX1zZXQgbGFzdChhKXt0aGlzLl9sYXN0PWF9Z2V0IGNoYW5nZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IHNpemVDaGFuZ2UoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fc2l6ZUNoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KGEpe2EhPT10aGlzLl9jdXJyZW50JiYodGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX2N1cnJlbnQ9YSx0aGlzLl9j''@;'; put 'put ''aGFuZ2UubmV4dChhKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKSl9Z2V0IGZpcnN0SXRlbSgpe3JldHVybiAwPT09dGhpcy5fdG90YWxJdGVtcz8tMTowPT09dGhpcy5zaXplPzA6KHRoaXMuY3VycmVudC0xKSp0aGlzLnNpemV9Z2V0IGxhc3RJdGVtKCl7aWYoMD09PXRoaXMu''@;'; put 'put ''X3RvdGFsSXRlbXMpcmV0dXJuLTE7aWYoMD09PXRoaXMuc2l6ZSlyZXR1cm4gdGhpcy50b3RhbEl0ZW1zLTE7bGV0IGE9dGhpcy5jdXJyZW50KnRoaXMuc2l6ZS0xO3JldHVybiB0aGlzLnRvdGFsSXRlbXMmJihhPU1hdGgubWluKGEsdGhpcy50b3RhbEl0ZW1zLTEpKSxhfXByZXZpb3VzKCl7''@;'; put 'put ''dGhpcy5jdXJyZW50PjEmJnRoaXMuY3VycmVudC0tfW5leHQoKXt0aGlzLmN1cnJlbnQ8dGhpcy5sYXN0JiZ0aGlzLmN1cnJlbnQrK31yZXNldFBhZ2VTaXplKGE9ITEpe3RoaXMucHJldmVudEVtaXQ9YSx0aGlzLnNpemU9MH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy''@;'; put 'put ''biBuZXcoYXx8YykoSHIoaEEpKX0sYy5cdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxzNT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5fcGFnZT1hLHRoaXMuc3RhdGVEZWJvdW5jZXI9ZCx0aGlzLl9jaGFuZ2U9bmV3IHVyLHRo''@;'; put 'put ''aXMuX2FsbD1bXX1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1oYXNBY3RpdmVGaWx0ZXJzKCl7Zm9yKGNvbnN0e2ZpbHRlcjphfW9mIHRoaXMuX2FsbClpZihhJiZhLmlzQWN0aXZlKCkpcmV0dXJuITA7cmV0dXJuITF9Z2V0QWN0aXZlRmlsdGVycygp''@;'; put 'put ''e2NvbnN0IGE9W107Zm9yKGNvbnN0e2ZpbHRlcjpkfW9mIHRoaXMuX2FsbClkJiZkLmlzQWN0aXZlKCkmJmEucHVzaChkKTtyZXR1cm4gYX1hZGQoYSl7Y29uc3QgZD1hLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT50aGlzLnJlc2V0UGFnZUFuZEVtaXRGaWx0ZXJDaGFuZ2UoW2FdKSk7bGV0IGg9''@;'; put 'put ''ITE7Y29uc3QgZj1uZXcgYkgoYSwoKT0+e2lmKGgpcmV0dXJuO2QudW5zdWJzY3JpYmUoKTtjb25zdCB2PXRoaXMuX2FsbC5maW5kSW5kZXgoTT0+TS5maWx0ZXI9PT1hKTt2Pj0wJiZ0aGlzLl9hbGwuc3BsaWNlKHYsMSksYS5pc0FjdGl2ZSgpJiZ0aGlzLnJlc2V0UGFnZUFuZEVtaXRGaWx0''@;'; put 'put ''ZXJDaGFuZ2UoW10pLGg9ITB9KTtyZXR1cm4gdGhpcy5fYWxsLnB1c2goZiksYS5pc0FjdGl2ZSgpJiZ0aGlzLnJlc2V0UGFnZUFuZEVtaXRGaWx0ZXJDaGFuZ2UoW2FdKSxmfWFjY2VwdHMoYSl7Zm9yKGNvbnN0e2ZpbHRlcjpkfW9mIHRoaXMuX2FsbClpZihkJiZkLmlzQWN0aXZlKCkmJiFk''@;'; put 'put ''LmFjY2VwdHMoYSkpcmV0dXJuITE7cmV0dXJuITB9cmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShhKXt0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCksdGhpcy5fcGFnZS5jdXJyZW50PTEsdGhpcy5fY2hhbmdlLm5leHQoYSksdGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VE''@;'; put 'put ''b25lKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEhyKG02KSxIcihoQSkpfSxjLlx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NsYXNzIGJIe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5maWx0ZXI9bCx0''@;'; put 'put ''aGlzLnVucmVnaXN0ZXI9YX19bGV0IF9IPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5maWx0ZXJzPWF9Z2V0IGZpbHRlcigpe3JldHVybiB0aGlzLnJlZ2lzdGVyZWQmJnRoaXMucmVnaXN0ZXJlZC5maWx0ZXJ9bmdPbkRlc3Ryb3koKXt0aGlzLmRlbGV0ZUZpbHRlcigpfXNl''@;'; put 'put ''dEZpbHRlcihhKXt0aGlzLmRlbGV0ZUZpbHRlcigpLGEgaW5zdGFuY2VvZiBiSD90aGlzLnJlZ2lzdGVyZWQ9YTphJiYodGhpcy5yZWdpc3RlcmVkPXRoaXMuZmlsdGVycy5hZGQoYSkpfWRlbGV0ZUZpbHRlcigpe3RoaXMucmVnaXN0ZXJlZCYmKHRoaXMucmVnaXN0ZXJlZC51bnJlZ2lzdGVy''@;'; put 'put ''KCksZGVsZXRlIHRoaXMucmVnaXN0ZXJlZCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKHM1KSl9LGMuXHUwMjc1ZGlyPVlyKHt0eXBlOmMsc3RhbmRhbG9uZTohMX0pLGN9KSgpO2NsYXNzIFozZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnV0aWxz''@;'; put 'put ''PWx9a2V5VXAobCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpO2lmKDA9PT1sLnkpcmV0dXJuIGE7YS55PWwueS0xO2NvbnN0IGQ9dGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCk7cmV0dXJuIHRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3coYS55''@;'; put 'put ''KSYmIWQmJnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk/YS54PTA6dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYmKGQ/YS55PWEueS0xOmEueD1hLngtdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQobC55KSksYX1rZXlEb3duKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVO''@;'; put 'put ''ZXh0Q2VsbENvb3JkcyhsKTtpZihsLnk+PSh0aGlzLnV0aWxzLnJvd3M/dGhpcy51dGlscy5yb3dzLmxlbmd0aC0xOjApKXJldHVybiBhO2NvbnN0IGg9dGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCk7cmV0dXJuIGEueT1sLnkrMSwhaCYmdGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGEueSkm''@;'; put 'put ''JihhLnk9YS55KzEsYS54PXRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3coYS55KT8wOmEueC10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChsLnkpKSxhfWtleUxlZnQobCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpO3JldHVybiAwPT09bC54''@;'; put 'put ''fHwoYS54PWwueC0xKSxhfWtleVJpZ2h0KGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKSxkPXRoaXMudXRpbHMucm93cz8ubGVuZ3RoLTE/dGhpcy51dGlscy5nZXRDZWxsc0ZvclJvdygwKS5sZW5ndGgtMTowO3JldHVybiBhLng9bC54PGQ/YS54KzE6YS54''@;'; put 'put ''LGF9a2V5RW5kKGwsYSl7Y29uc3QgZD10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpLGg9dGhpcy51dGlscy5yb3dzP3RoaXMudXRpbHMucm93cy5sZW5ndGgtMTowO3JldHVybiBkLng9aD90aGlzLnV0aWxzLmdldENlbGxzRm9yUm93KDApLmxlbmd0aC0xOjAsYSYmKGQueT1o''@;'; put 'put ''LHRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGQueSkmJihkLng9dGhpcy51dGlscy5nZXRDZWxsc0ZvclJvdyhkLnkpLmxlbmd0aC0xKSksZH1rZXlIb21lKGwsYSl7Y29uc3QgZD10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpO3JldHVybiBkLng9MCxhJiYoZC55PTApLGR9a2V5''@;'; put 'put ''UGFnZVVwKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKSxkPXRoaXMudXRpbHMuaXRlbXNQZXJQYWdlO3JldHVybiBhLnk9bC55LWQ+MD9sLnktZCsxOjEsdGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCk/dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYm''@;'; put 'put ''KGEueT1hLnktMSk6dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KT9hLng9dGhpcy51dGlscy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhhLnkpPzA6YS54LXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGwueSk6dGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGEueSkmJihhLnk9YS55KzEs''@;'; put 'put ''YS54PXRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3coYS55KT8wOmEueC10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChsLnkpKSxhfWtleVBhZ2VEb3duKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKSxkPXRoaXMudXRpbHMucm93cz90aGlz''@;'; put 'put ''LnV0aWxzLnJvd3MubGVuZ3RoLTE6MCxoPXRoaXMudXRpbHMuaXRlbXNQZXJQYWdlO3JldHVybiBhLnk9bC55K2g+PWQ/ZDpsLnkraCx0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChsKSYmdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KT9hLnk9YS55LTE6dGhpcy51dGlscy5pc0RldGFpbHNS''@;'; put 'put ''b3coYS55KSYmdGhpcy51dGlscy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhhLnkpP2EueD0wOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk/YS54PWEueC10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChsLnkpOnRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChhLnkpJiYoYS55PWEueSsx''@;'; put 'put ''LGEueD10aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGEueSk/MDphLngtdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQobC55KSksYX19Y2xhc3MgVzNlIGV4dGVuZHMgWjNle2NvbnN0cnVjdG9yKGwpe3N1cGVyKGwpfWtleVVwKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVh''@;'; put 'put ''dGVOZXh0Q2VsbENvb3JkcyhsKTtpZigwPT09bC55KXJldHVybiBhO2lmKGEueT1sLnktMSx0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChsKSl0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiZhLnk+MCYmKGEueT1hLnktMSk7ZWxzZSBzd2l0Y2godGhpcy51dGlscy5pc1Jvd1JlcGxhY2Vk''@;'; put 'put ''KGwueSkmJihhLnk9YS55LTEpLCEwKXtjYXNlIHRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk6YS54PTA7YnJlYWs7Y2FzZSExPT09dGhpcy51dGlscy5pc0RldGFpbHNSb3cobC55KTphLng9bC54O2JyZWFrO2RlZmF1bHQ6YS54PXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGEueSl9''@;'; put 'put ''cmV0dXJuIGF9a2V5RG93bihsKXtjb25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCksZD10aGlzLnV0aWxzLnJvd3M/dGhpcy51dGlscy5yb3dzLmxlbmd0aC0xOjA7cmV0dXJuIGwueT49ZHx8KGEueT1sLnkrMSx0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChsKT9hLnk9''@;'; put 'put ''YS55PGQ/YS55KzE6YS55Oih0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQoYS55KSYmKGEueT1hLnkrMSksYS54PXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk/MDp0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChhLnkpKSksYX1rZXlMZWZ0KGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVh''@;'; put 'put ''dGVOZXh0Q2VsbENvb3JkcyhsKTtyZXR1cm4gdGhpcy51dGlscy5pc0RldGFpbHNSb3cobC55KXx8dGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGwueSk/KDAhPT1sLng/YS54PWwueC0xOnRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGwpfHwoYS55PWwueS0xLGEueD10aGlzLnV0aWxzLmFjdGlv''@;'; put 'put ''bkNlbGxDb3VudChhLnkpLTEpLGEpOnN1cGVyLmtleUxlZnQobCl9a2V5UmlnaHQobCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpO2lmKCF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhsLnkpJiYhdGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGwueSkpcmV0dXJu''@;'; put 'put ''IHN1cGVyLmtleVJpZ2h0KGwpO2NvbnN0IGQ9dGhpcy51dGlscy5yb3dzPy5sZW5ndGgtMT90aGlzLnV0aWxzLmdldENlbGxzRm9yUm93KDApLmxlbmd0aC0xOjA7cmV0dXJuIGwueD49ZHx8KHRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGwpJiZsLng9PT10aGlzLnV0aWxzLmFjdGlvbkNlbGxD''@;'; put 'put ''b3VudChsLngpLTEmJnRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChsLnkpJiYhdGhpcy51dGlscy5pc0RldGFpbHNSb3cobC55KT8oYS55PWwueSsxLGEueD0wKTphLng9bC54KzEpLGF9a2V5RW5kKGwsYSl7Y29uc3QgZD10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpO3JldHVy''@;'; put 'put ''biF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhsLnkpJiYhdGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGwueSl8fGE/c3VwZXIua2V5RW5kKGwsYSk6KGQueD10aGlzLnV0aWxzLmdldENlbGxzRm9yUm93KGwueSkubGVuZ3RoLTEsZCl9a2V5SG9tZShsLGEpe2NvbnN0IGQ9dGhpcy51dGlscy5j''@;'; put 'put ''cmVhdGVOZXh0Q2VsbENvb3JkcyhsKTtyZXR1cm4gdGhpcy51dGlscy5pc0RldGFpbHNSb3cobC55KXx8dGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGwueSk/KGQueD0wLGQueT1sLnktMSxhJiYoZC55PTApLGQpOnN1cGVyLmtleUhvbWUobCxhKX1rZXlQYWdlVXAobCl7Y29uc3QgYT10aGlz''@;'; put 'put ''LnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpLGQ9dGhpcy51dGlscy5pdGVtc1BlclBhZ2U7cmV0dXJuIGEueT1sLnktZD4wP2wueS1kKzE6MSx0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChsKT90aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiYoYS55PWEueS0xKTp0aGlzLnV0aWxz''@;'; put 'put ''LmlzUm93UmVwbGFjZWQoYS55KT90aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpfHwoYS55PWEueSsxLGEueD0wKTp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhsLnkpP3RoaXMudXRpbHMuaXNEZXRhaWxzUm93KGwueSkmJih0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpfHwoYS54PXRo''@;'; put 'put ''aXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGEueSkpKTp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiYoYS54PTApLGF9a2V5UGFnZURvd24obCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpLGQ9dGhpcy51dGlscy5yb3dzP3RoaXMudXRpbHMucm93cy5s''@;'; put 'put ''ZW5ndGgtMTowLGg9dGhpcy51dGlscy5pdGVtc1BlclBhZ2U7cmV0dXJuIGEueT1sLnkraD49ZD9kOmwueStoLHRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGwpP3RoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkmJihhLnk9YS55LTEpOnRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChhLnkpP2Eu''@;'; put 'put ''eTxkJiYhdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYmKGEueT1hLnkrMSk6dGhpcy51dGlscy5pc0RldGFpbHNSb3cobC55KSYmIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk/YS54PWwueCt0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChhLnkpOnRoaXMudXRpbHMuaXNEZXRh''@;'; put 'put ''aWxzUm93KGEueSkmJihhLng9MCksYX19Y2xhc3MgUVhlIGV4dGVuZHMgVzNle2NvbnN0cnVjdG9yKGwpe3N1cGVyKGwpfWtleVVwKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKTtpZigwPT09bC55KXJldHVybiBhO2lmKGEueT1sLnktMSx0aGlzLnV0aWxz''@;'; put 'put ''LmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGEueSkpcmV0dXJuIHN1cGVyLmtleVVwKGwpO2NvbnN0IGQ9dGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCk7cmV0dXJuIGQmJnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk/YS55PWEueS0xOnRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChhLnkp''@;'; put 'put ''PyhhLnk9YS55LTEsdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KXx8KGEueD1sLngrdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoYS55KSkpOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGwueSkmJiF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpP2EueD1sLngrdGhpcy51dGlscy5h''@;'; put 'put ''Y3Rpb25DZWxsQ291bnQoYS55KTohZCYmdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYmKGEueD1sLngtdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQobC55KSksYX1rZXlEb3duKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKSxkPXRoaXMudXRpbHMu''@;'; put 'put ''cm93cz90aGlzLnV0aWxzLnJvd3MubGVuZ3RoLTE6MCxoPWQ/dGhpcy51dGlscy5nZXRDZWxsc0ZvclJvdygwKS5sZW5ndGgtMTowO3JldHVybiBsLnk+PWQ/YTooYS55PWwueSsxLHRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3coYS55KT9zdXBlci5rZXlEb3duKGwpOih0aGlz''@;'; put 'put ''LnV0aWxzLmlzQWN0aW9uQ2VsbChsKXx8dGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGEueSk/YS55PWEueTxkP2EueSsxOmEueS0xOmEueD10aGlzLnV0aWxzLmdldENlbGxzRm9yUm93KGwueSkubGVuZ3RoPmg/bC54LXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGwueSk6bC54K3RoaXMu''@;'; put 'put ''dXRpbHMuYWN0aW9uQ2VsbENvdW50KGEueSksYSkpfWtleUxlZnQobCl7cmV0dXJuIHN1cGVyLmtleUxlZnQobCl9a2V5UmlnaHQobCl7cmV0dXJuIHN1cGVyLmtleVJpZ2h0KGwpfWtleUVuZChsLGEpe3JldHVybiBzdXBlci5rZXlFbmQobCxhKX1rZXlIb21lKGwsYSl7cmV0dXJuIHN1cGVy''@;'; put 'put ''LmtleUhvbWUobCxhKX1rZXlQYWdlVXAobCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpLGQ9dGhpcy51dGlscy5pdGVtc1BlclBhZ2U7cmV0dXJuIGEueT1sLnktZD4wP2wueS1kKzE6MSx0aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGEueSk/''@;'; put 'put ''c3VwZXIua2V5UGFnZVVwKGwpOih0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChsKT90aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiYoYS55PWEueS0xKTp0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQoYS55KT90aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpfHwoYS55PWEueSsxLGEueD1s''@;'; put 'put ''LngrdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoYS55KSk6dGhpcy51dGlscy5pc0RldGFpbHNSb3cobC55KSYmIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk/YS54PWwueCt0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChhLnkpOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkm''@;'; put 'put ''JihhLng9bC54LXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGwueSkpLGEpfWtleVBhZ2VEb3duKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKSxkPXRoaXMudXRpbHMucm93cz90aGlzLnV0aWxzLnJvd3MubGVuZ3RoLTE6MCxoPXRoaXMudXRpbHMuaXRl''@;'; put 'put ''bXNQZXJQYWdlO3JldHVybiBhLnk9bC55K2g+PWQ/ZDpsLnkraCx0aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGEueSk/c3VwZXIua2V5UGFnZURvd24obCk6KHRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGwpP3RoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkmJihhLnk9YS55''@;'; put 'put ''LTEpOnRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChhLnkpJiYhdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KT9hLnk8ZCYmKGEueT1hLnkrMSxhLng9bC54K3RoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGEueSkpOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGwueSkmJiF0aGlzLnV0aWxz''@;'; put 'put ''LmlzRGV0YWlsc1JvdyhhLnkpP2EueD1sLngrdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoYS55KTp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiYoYS54PWwueC10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChsLnkpKSxhKX19Y2xhc3MgZXFle2NvbnN0cnVjdG9yKGwsYSl7dGhp''@;'; put 'put ''cy5ob3N0PWwsdGhpcy5jb25maWc9YX1nZXQgZ3JpZCgpe3JldHVybiB0aGlzLmhvc3Q/LnF1ZXJ5U2VsZWN0b3IodGhpcy5jb25maWcua2V5R3JpZCl9Z2V0IHJvd3MoKXtyZXR1cm4gdGhpcy5ob3N0Py5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLmtleUdyaWRSb3dzKX1nZXQgY2Vs''@;'; put 'put ''bHMoKXtyZXR1cm4gdGhpcy5ob3N0Py5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLmtleUdyaWRDZWxscyl9Z2V0IGN1cnJlbnRDZWxsQ29vcmRpbmF0ZXMoKXtjb25zdCBsPXRoaXMuY2VsbHM/QXJyYXkuZnJvbSh0aGlzLmNlbGxzKS5maW5kKGg9PiIwIj09PWguZ2V0QXR0cmlidXRl''@;'; put 'put ''KCJ0YWJpbmRleCIpKTpudWxsLGE9bD9sLmNsb3Nlc3QodGhpcy5jb25maWcua2V5R3JpZFJvd3MpOm51bGw7cmV0dXJue3g6YSYmbD9BcnJheS5mcm9tKGEucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkQ2VsbHMpKS5pbmRleE9mKGwpOjAseTphJiZsJiZ0aGlzLnJvd3M/''@;'; put 'put ''QXJyYXkuZnJvbSh0aGlzLnJvd3MpLmluZGV4T2YoYSk6MH19Z2V0IGl0ZW1zUGVyUGFnZSgpe3JldHVybiBNYXRoLmZsb29yKHRoaXMuaG9zdD8ucXVlcnlTZWxlY3RvcigiLmRhdGFncmlkIikuY2xpZW50SGVpZ2h0L3RoaXMucm93c1swXS5jbGllbnRIZWlnaHQpLTF8fDB9Z2V0TmV4dEl0''@;'; put 'put ''ZW1Db29yZGluYXRlKGwpe2NvbnN0IGE9dGhpcy5jdXJyZW50Q2VsbENvb3JkaW5hdGVzLGQ9dGhpcy5nZXROYXZTdHJhdGVneShhKTtzd2l0Y2gobC5rZXkpe2Nhc2UgbWEuQXJyb3dVcDpyZXR1cm4gZC5rZXlVcChhKTtjYXNlIG1hLkFycm93RG93bjpyZXR1cm4gZC5rZXlEb3duKGEpO2Nh''@;'; put 'put ''c2UicnRsIj09PXRoaXMuaG9zdC5kaXI/bWEuQXJyb3dSaWdodDptYS5BcnJvd0xlZnQ6cmV0dXJuIGQua2V5TGVmdChhKTtjYXNlInJ0bCI9PT10aGlzLmhvc3QuZGlyP21hLkFycm93TGVmdDptYS5BcnJvd1JpZ2h0OnJldHVybiBkLmtleVJpZ2h0KGEpO2Nhc2UgbWEuSG9tZTpyZXR1cm4g''@;'; put 'put ''ZC5rZXlIb21lKGEsbC5jdHJsS2V5KTtjYXNlIG1hLkVuZDpyZXR1cm4gZC5rZXlFbmQoYSxsLmN0cmxLZXkpO2Nhc2UgbWEuUGFnZVVwOnJldHVybiBkLmtleVBhZ2VVcChhKTtjYXNlIG1hLlBhZ2VEb3duOnJldHVybiBkLmtleVBhZ2VEb3duKGEpO2RlZmF1bHQ6cmV0dXJuIGF9fWdldENl''@;'; put 'put ''bGxzRm9yUm93KGwpe3JldHVybiB0aGlzLnJvd3NbbF0ucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkQ2VsbHMpfWlzRXhwYW5kZWRSb3cobCl7Y29uc3QgYT10aGlzLnJvd3NbbF0ucXVlcnlTZWxlY3RvcigiLmRhdGFncmlkLXJvdy1kZXRhaWwiKTtyZXR1cm4hIWEmJiJu''@;'; put 'put ''b25lIiE9PWEuc3R5bGUuZGlzcGxheX1pc0RldGFpbHNSb3cobCl7cmV0dXJuIHRoaXMucm93c1tsXS5jbGFzc0xpc3QuY29udGFpbnMoImRhdGFncmlkLXJvdy1kZXRhaWwiKX1pc1Jvd1JlcGxhY2VkKGwpe3JldHVybiEhdGhpcy5yb3dzW2xdLmNsb3Nlc3QoImNsci1kZy1yb3cuZGF0YWdy''@;'; put 'put ''aWQtcm93LXJlcGxhY2VkIil9aXNTaW5nbGVDZWxsRXhwYW5kZWRSb3cobCl7cmV0dXJuIDE9PT10aGlzLnJvd3NbbF0/LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5jb25maWcua2V5R3JpZENlbGxzKS5sZW5ndGh9YWN0aW9uQ2VsbENvdW50KGwpe3JldHVybiB0aGlzLmFjdGlvbkNlbGxzQXNB''@;'; put 'put ''cnJheShsKS5sZW5ndGh9YWN0aW9uQ2VsbHNBc0FycmF5KGwpe3JldHVybiBBcnJheS5mcm9tKHRoaXMucm93c1tsXS5xdWVyeVNlbGVjdG9yQWxsKCIuZGF0YWdyaWQtcm93LXN0aWNreSAuZGF0YWdyaWQtY2VsbCwgLmRhdGFncmlkLXJvdy1zdGlja3kgLmRhdGFncmlkLWNvbHVtbiIpKX1p''@;'; put 'put ''c0FjdGlvbkNlbGwobCl7cmV0dXJuISF0aGlzLmFjdGlvbkNlbGxzQXNBcnJheShsLnkpW2wueF19Y3JlYXRlTmV4dENlbGxDb29yZHMobCl7cmV0dXJue3g6bC54LHk6bC55fX1nZXROYXZTdHJhdGVneShsKXtzd2l0Y2goITApe2Nhc2UgdGhpcy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhs''@;'; put 'put ''LnkpOnJldHVybiBuZXcgVzNlKHRoaXMpO2Nhc2UgdGhpcy5pc0RldGFpbHNSb3cobC55KTpjYXNlIHRoaXMuaXNFeHBhbmRlZFJvdyhsLnkpOnJldHVybiBuZXcgUVhlKHRoaXMpO2RlZmF1bHQ6cmV0dXJuIG5ldyBaM2UodGhpcyl9fX1jb25zdCBZM2U9WyJhW2hyZWZdIiwiYXJlYVtocmVm''@;'; put 'put ''XSIsImlucHV0Om5vdChbZGlzYWJsZWRdKSIsImJ1dHRvbjpub3QoW2Rpc2FibGVkXSkiLCJzZWxlY3Q6bm90KFtkaXNhYmxlZF0pIiwidGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pIiwiaWZyYW1lIiwib2JqZWN0IiwiZW1iZWQiLCJbY29udGVudGVkaXRhYmxlPXRydWVdIiwiW3JvbGU9YnV0''@;'; put 'put ''dG9uXTpub3QoW2Rpc2FibGVkXSkiXTtmdW5jdGlvbiBucWUoYyl7Y29uc3QgbD1ZM2Uuam9pbigiLCIpO3JldHVybiBjLm1hdGNoZXMobCl9bGV0IHdIPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy56b25lPWEsdGhpcy5za2lwSXRlbUZvY3VzPSExLHRoaXMubGlzdGVuZXJz''@;'; put 'put ''QWRkZWQ9ITEsdGhpcy5kZXN0cm95JD1uZXcgdXIsdGhpcy5fYWN0aXZlQ2VsbD1udWxsLHRoaXMuY29uZmlnPXtrZXlHcmlkUm93czonW3JvbGU9cm93XTpub3QoLmRhdGFncmlkLXBsYWNlaG9sZGVyKTpub3QoW3N0eWxlKj0iZGlzcGxheTogbm9uZSJdKScsa2V5R3JpZENlbGxzOiJbcm9s''@;'; put 'put ''ZT1ncmlkY2VsbF06bm90KC5kYXRhZ3JpZC1oaWRkZW4tY29sdW1uKTpub3QoLmRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRlbnQpLCBbcm9sZT1jb2x1bW5oZWFkZXJdOm5vdCguZGF0YWdyaWQtaGlkZGVuLWNvbHVtbik6bm90KC5kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250ZW50KSwgLmRh''@;'; put 'put ''dGFncmlkLWRldGFpbC1jYXJldCIsa2V5R3JpZDoiW3JvbGU9Z3JpZF0ifX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1hZGRMaXN0ZW5lcnMoKXt0aGlzLmxpc3RlbmVyc0FkZGVkfHwodGhpcy56b25lLnJ1bk91dHNpZGVBbmd1''@;'; put 'put ''bGFyKCgpPT57VGYodGhpcy5rZXlOYXZVdGlscy5ncmlkLCJtb3VzZWRvd24iKS5waXBlKEwxKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoYT0+e2lmKDE9PT1hLmJ1dHRvbnMmJiFhLmN0cmxLZXkpe2NvbnN0IGQ9dGhpcy5rZXlOYXZVdGlscy5jZWxscz9BcnJheS5mcm9tKHRoaXMua2V5''@;'; put 'put ''TmF2VXRpbHMuY2VsbHMpLmZpbmQoaD0+aD09PWEudGFyZ2V0fHxoPT09YS50YXJnZXQuY2xvc2VzdCh0aGlzLmNvbmZpZy5rZXlHcmlkQ2VsbHMpKTpudWxsO2QmJnRoaXMuc2V0QWN0aXZlQ2VsbChkLHtrZWVwRm9jdXM6bnFlKGEudGFyZ2V0KX0pfX0pLFRmKHRoaXMua2V5TmF2VXRpbHMu''@;'; put 'put ''Z3JpZCwid2hlZWwiKS5waXBlKEwxKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnJlbW92ZUFjdGl2ZUNlbGwoKX0pLFRmKHRoaXMua2V5TmF2VXRpbHMuZ3JpZCwiZm9jdXNvdXQiKS5waXBlKF85KDApLEwxKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlz''@;'; put 'put ''LmtleU5hdlV0aWxzLmdyaWQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCl8fHRoaXMucmVtb3ZlQWN0aXZlQ2VsbCgpfSksVGYodGhpcy5rZXlOYXZVdGlscy5ncmlkLCJrZXlkb3duIikucGlwZShMMSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKGE9PntpZigoIWEudGFyZ2V0''@;'; put 'put ''LmNsYXNzTGlzdC5jb250YWlucygiZHJhZy1oYW5kbGUiKXx8YS5rZXkhPT1tYS5BcnJvd0xlZnQmJmEua2V5IT09bWEuQXJyb3dSaWdodCkmJihhLmtleT09PW1hLkFycm93VXB8fGEua2V5PT09bWEuQXJyb3dEb3dufHxhLmtleT09PW1hLkFycm93TGVmdHx8YS5rZXk9PT1tYS5BcnJvd1Jp''@;'; put 'put ''Z2h0fHxhLmtleT09PW1hLkVuZHx8YS5rZXk9PT1tYS5Ib21lfHxhLmtleT09PW1hLlBhZ2VVcHx8YS5rZXk9PT1tYS5QYWdlRG93bikpe2NvbnN0IGQ9dGhpcy5rZXlOYXZVdGlscy5nZXROZXh0SXRlbUNvb3JkaW5hdGUoYSksaD10aGlzLmtleU5hdlV0aWxzLnJvd3M/QXJyYXkuZnJvbSh0''@;'; put 'put ''aGlzLmtleU5hdlV0aWxzLmdldENlbGxzRm9yUm93KGQueSkpW2QueF06bnVsbDtoJiZ0aGlzLnNldEFjdGl2ZUNlbGwoaCksYS5wcmV2ZW50RGVmYXVsdCgpfX0pfSksdGhpcy5saXN0ZW5lcnNBZGRlZD0hMCl9aW5pdGlhbGl6ZUtleUdyaWQoYSl7dGhpcy5rZXlOYXZVdGlscz1uZXcgZXFl''@;'; put 'put ''KGEsdGhpcy5jb25maWcpLHRoaXMuYWRkTGlzdGVuZXJzKCksdGhpcy5yZXNldEtleUdyaWQoKX1yZXNldEtleUdyaWQoKXt0aGlzLmtleU5hdlV0aWxzLmNlbGxzPy5mb3JFYWNoKGQ9PmQuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIikpLCh0aGlzLmtleU5hdlV0aWxzLmNlbGxzP3Ro''@;'; put 'put ''aXMua2V5TmF2VXRpbHMuY2VsbHNbMF06bnVsbCk/LnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIil9cmVtb3ZlQWN0aXZlQ2VsbCgpe3RoaXMuX2FjdGl2ZUNlbGw9bnVsbH1nZXRBY3RpdmVDZWxsKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZUNlbGx9c2V0QWN0aXZlQ2VsbChhLHtrZWVwRm9j''@;'; put 'put ''dXM6ZH09e2tlZXBGb2N1czohMX0pe2NvbnN0IGg9dGhpcy5rZXlOYXZVdGlscy5jZWxscz9BcnJheS5mcm9tKHRoaXMua2V5TmF2VXRpbHMuY2VsbHMpLmZpbmQoZj0+IjAiPT09Zi5nZXRBdHRyaWJ1dGUoInRhYmluZGV4IikpOm51bGw7aWYoaCYmaC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4''@;'; put 'put ''IiwiLTEiKSxhLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIiksdGhpcy5fYWN0aXZlQ2VsbD1hLCF0aGlzLnNraXBJdGVtRm9jdXMmJiFkKXtsZXQgZjtpZigiY29sdW1uaGVhZGVyIj09PWEuZ2V0QXR0cmlidXRlKCJyb2xlIikpZj1hO2Vsc2V7Y29uc3Qgdj1mdW5jdGlvbiB0cWUoYyl7''@;'; put 'put ''Y29uc3QgYT1bLi4uWTNlLCdbdGFiaW5kZXg9IjAiXTpub3QoW2Rpc2FibGVkXSknXS5qb2luKCIsIik7cmV0dXJuIEFycmF5LmZyb20oYy5xdWVyeVNlbGVjdG9yQWxsKGEpKX0oYSk7Zj12Lmxlbmd0aD92WzBdOmF9Zi5mb2N1cygpfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp''@;'; put 'put ''e3JldHVybiBuZXcoYXx8YykoSHIoWGEpKX0sYy5cdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxmQT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgX0h7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3N1cGVyKGEpLHRoaXMuY29tbW9uU3RyaW5ncz1kLHRo''@;'; put 'put ''aXMuc21hcnRUb2dnbGVTZXJ2aWNlPWgsdGhpcy5wbGF0Zm9ybUlkPWYsdGhpcy5lbGVtZW50UmVmPXYsdGhpcy5rZXlOYXZpZ2F0aW9uPU0sdGhpcy5vcGVuQ2hhbmdlPW5ldyBYcighMSksdGhpcy5hcmlhRXhwYW5kZWQ9ITEsdGhpcy5wb3BvdmVySWQ9T3UoKSx0aGlzLnNtYXJ0UG9zaXRp''@;'; put 'put ''b249e2F4aXM6SDEuVkVSVElDQUwsc2lkZTpEZi5BRlRFUixhbmNob3I6VXMuRU5ELGNvbnRlbnQ6VXMuRU5EfSx0aGlzLl9vcGVuPSExLHRoaXMuc3Vicz1bXSx0aGlzLnN1YnMucHVzaChoLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKEQ9Pnt0aGlzLm9wZW49RCx0aGlzLmFyaWFFeHBhbmRlZD1E''@;'; put 'put ''fSkpfWdldCBvcGVuKCl7cmV0dXJuIHRoaXMuX29wZW59c2V0IG9wZW4oYSl7dGhpcy5vcGVuIT09KGE9ISFhKSYmKHRoaXMuc21hcnRUb2dnbGVTZXJ2aWNlLm9wZW49YSx0aGlzLm9wZW5DaGFuZ2UuZW1pdChhKSwhYSYmd2wodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5hbmNob3IubmF0aXZl''@;'; put 'put ''RWxlbWVudC5mb2N1cygpLHRoaXMua2V5TmF2aWdhdGlvbiYmKHRoaXMua2V5TmF2aWdhdGlvbi5za2lwSXRlbUZvY3VzPWEpLHRoaXMuX29wZW49YSl9c2V0IGN1c3RvbUZpbHRlcihhKXt0aGlzLnNldEZpbHRlcihhKX1nZXQgYWN0aXZlKCl7cmV0dXJuISF0aGlzLmZpbHRlciYmdGhpcy5m''@;'; put 'put ''aWx0ZXIuaXNBY3RpdmUoKX1uZ09uQ2hhbmdlcygpe3NldFRpbWVvdXQoKCk9Pnt0aGlzLnNldFRvZ2dsZUJ1dHRvbkFyaWFMYWJlbCgpfSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuc3Vicy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2V0VG9nZ2xlQnV0''@;'; put 'put ''dG9uQXJpYUxhYmVsKCl7Y29uc3QgaD10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudD8uY2xvc2VzdCgiY2xyLWRnLWNvbHVtbiIpPy5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQtY29sdW1uLXRpdGxlIik/LnRleHRDb250ZW50LnRyaW0oKS50b0xvY2FsZUxvd2VyQ2FzZSgpO3RoaXMu''@;'; put 'put ''dG9nZ2xlQnV0dG9uQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRhZ3JpZEZpbHRlckFyaWFMYWJlbCx7Q09MVU1OOmh8fCIifSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKHM1''@;'; put 'put ''KSxxZShwcykscWUoeWMpLHFlKHVsKSxxZShuYSkscWUod0gsOCkpfSxjLlx1MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctZmlsdGVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmVWEoblllLDUsbmEpLDImYSl7bGV0IGg7Z2koaD1taSgpKSYmKGQu''@;'; put 'put ''YW5jaG9yPWguZmlyc3QpfX0saW5wdXRzOntvcGVuOlswLCJjbHJEZ0ZpbHRlck9wZW4iLCJvcGVuIl0sY3VzdG9tRmlsdGVyOlswLCJjbHJEZ0ZpbHRlciIsImN1c3RvbUZpbHRlciJdfSxvdXRwdXRzOntvcGVuQ2hhbmdlOiJjbHJEZ0ZpbHRlck9wZW5DaGFuZ2UifSxzdGFuZGFsb25lOiEx''@;'; put 'put ''LGZlYXR1cmVzOltoYShbe3Byb3ZpZGU6eUgsdXNlRXhpc3Rpbmc6Y31dKSxMYSxXb10sbmdDb250ZW50U2VsZWN0b3JzOlRvLGRlY2xzOjQsdmFyczoxMyxjb25zdHM6W1siYW5jaG9yIiwiIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyUG9wb3ZlckFuY2hvciIsIiIsImNsclBvcG92ZXJPcGVu''@;'; put 'put ''Q2xvc2VCdXR0b24iLCIiLDEsImRhdGFncmlkLWZpbHRlci10b2dnbGUiXSxbInNvbGlkIiwiIl0sWyJjbGFzcyIsImRhdGFncmlkLWZpbHRlciIsImNka1RyYXBGb2N1cyIsIiIsInJvbGUiLCJkaWFsb2ciLDMsImlkIiw0LCJjbHJQb3BvdmVyQ29udGVudCIsImNsclBvcG92ZXJDb250ZW50''@;'; put 'put ''QXQiLCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiXSxbImNka1RyYXBGb2N1cyIsIiIsInJvbGUiLCJkaWFsb2ciLDEsImRhdGFncmlkLWZpbHRlciIsMywiaWQiXSxbMSwiZGF0YWdyaWQtZmlsdGVyLWNsb3Nl''@;'; put 'put ''LXdyYXBwZXIiXSxbInR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVyQ2xvc2VCdXR0b24iLCIiLDEsImNsb3NlIl0sWyJzaGFwZSIsIndpbmRvdy1jbG9zZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksZGUoMCwiYnV0dG9uIiwxLDApLEd0KDIsImNkcy1pY29uIiwyKSxo''@;'; put 'put ''ZSgpLGd0KDMsclllLDUsMywiZGl2IiwzKSksMiZhJiYoeHIoImRhdGFncmlkLWZpbHRlci1vcGVuIixkLm9wZW4pKCJkYXRhZ3JpZC1maWx0ZXJlZCIsZC5hY3RpdmUpLE5yKCJhcmlhLWxhYmVsIixkLnRvZ2dsZUJ1dHRvbkFyaWFMYWJlbCkoImFyaWEtZXhwYW5kZWQiLGQuYXJpYUV4cGFu''@;'; put 'put ''ZGVkKSgiYXJpYS1jb250cm9scyIsZC5wb3BvdmVySWQpLGZlKDIpLE5yKCJzdGF0dXMiLGQuYWN0aXZlPyJpbmZvIjpudWxsKSgic2hhcGUiLGQuYWN0aXZlPyJmaWx0ZXItZ3JpZC1jaXJjbGUiOiJmaWx0ZXItZ3JpZCIpLGZlKCksRWUoImNsclBvcG92ZXJDb250ZW50IixkLm9wZW4pKCJj''@;'; put 'put ''bHJQb3BvdmVyQ29udGVudEF0IixkLnNtYXJ0UG9zaXRpb24pKCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCEwKSgiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIiwhMCkpfSxkZXBlbmRlbmNpZXM6W3l3LGZzLFFULFFmZSxuQSx0QV0sZW5jYXBzdWxhdGlv''@;'; put 'put ''bjoyfSksY30pKCk7Y2xhc3MgQlh7Y29uc3RydWN0b3IobCl7dGhpcy5wcm9wPWwsbC5pbmRleE9mKCIuIik+PTAmJih0aGlzLnNwbGl0UHJvcD1sLnNwbGl0KCIuIikpfWdldFByb3BWYWx1ZShsKXtpZih0aGlzLnNwbGl0UHJvcCl7bGV0IGE9bDtmb3IoY29uc3QgZCBvZiB0aGlzLnNwbGl0''@;'; put 'put ''UHJvcCl7aWYobnVsbD09PWF8fHR5cGVvZiBhPiJ1Inx8dHlwZW9mIGFbZF0+InUiKXJldHVybjthPWFbZF19cmV0dXJuIGF9cmV0dXJuIGxbdGhpcy5wcm9wXX19Y2xhc3MgQ0h7Y29uc3RydWN0b3IobCxhPSExKXt0aGlzLnByb3A9bCx0aGlzLmV4YWN0PWEsdGhpcy5uZXN0ZWRQcm9wPW5l''@;'; put 'put ''dyBCWChsKX1hY2NlcHRzKGwsYSxkKXtjb25zdCBoPXRoaXMubmVzdGVkUHJvcC5nZXRQcm9wVmFsdWUobCk7cmV0dXJuISh2b2lkIDA9PT1ofHxudWxsIT09YSYmKCJudW1iZXIiIT10eXBlb2YgaHx8aDxhKXx8bnVsbCE9PWQmJigibnVtYmVyIiE9dHlwZW9mIGh8fGg+ZCkpfX1jbGFzcyBW''@;'; put 'put ''OXtjb25zdHJ1Y3RvcihsKXt0aGlzLmZpbHRlckZuPWwsdGhpcy5fY2hhbmdlcz1uZXcgdXIsdGhpcy5fbG93PW51bGwsdGhpcy5faGlnaD1udWxsfWdldCBjaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NoYW5nZXMuYXNPYnNlcnZhYmxlKCl9Z2V0IHZhbHVlKCl7cmV0dXJuW3RoaXMuX2xvdyx0''@;'; put 'put ''aGlzLl9oaWdoXX1zZXQgdmFsdWUobCl7Y29uc3QgYT1sWzBdLGQ9bFsxXTsoYSE9PXRoaXMuX2xvd3x8ZCE9PXRoaXMuX2hpZ2gpJiYodGhpcy5fbG93PWEsdGhpcy5faGlnaD1kLHRoaXMuX2NoYW5nZXMubmV4dChbdGhpcy5fbG93LHRoaXMuX2hpZ2hdKSl9Z2V0IGxvdygpe3JldHVybiB0''@;'; put 'put ''aGlzLl9sb3d9c2V0IGxvdyhsKXtsIT09dGhpcy5fbG93JiYodGhpcy5fbG93PWwsdGhpcy5fY2hhbmdlcy5uZXh0KFt0aGlzLl9sb3csdGhpcy5faGlnaF0pKX1nZXQgaGlnaCgpe3JldHVybiB0aGlzLl9oaWdofXNldCBoaWdoKGwpe2whPT10aGlzLl9oaWdoJiYodGhpcy5faGlnaD1sLHRo''@;'; put 'put ''aXMuX2NoYW5nZXMubmV4dChbdGhpcy5fbG93LHRoaXMuX2hpZ2hdKSl9Z2V0IHN0YXRlKCl7cmV0dXJuIHRoaXMuZmlsdGVyRm4gaW5zdGFuY2VvZiBDSD97cHJvcGVydHk6dGhpcy5maWx0ZXJGbi5wcm9wLGxvdzp0aGlzLl9sb3csaGlnaDp0aGlzLl9oaWdofTp0aGlzfWlzQWN0aXZlKCl7''@;'; put 'put ''cmV0dXJuIG51bGwhPT10aGlzLl9sb3d8fG51bGwhPT10aGlzLmhpZ2h9YWNjZXB0cyhsKXtyZXR1cm4gdGhpcy5maWx0ZXJGbi5hY2NlcHRzKGwsdGhpcy5fbG93LHRoaXMuX2hpZ2gpfWVxdWFscyhsKXtyZXR1cm4gbCBpbnN0YW5jZW9mIFY5JiYobC5maWx0ZXJGbiBpbnN0YW5jZW9mIENI''@;'; put 'put ''P3RoaXMuZmlsdGVyRm4gaW5zdGFuY2VvZiBDSCYmbC5maWx0ZXJGbi5wcm9wPT09dGhpcy5maWx0ZXJGbi5wcm9wJiZsLmxvdz09PXRoaXMuX2xvdyYmbC5oaWdoPT09dGhpcy5faGlnaDpsPT09dGhpcyl9fWxldCBHM2U9KCgpPT57Y2xhc3MgYyBleHRlbmRzIF9Ie2NvbnN0cnVjdG9yKGEs''@;'; put 'put ''ZCxoLGYsdil7c3VwZXIoYSksdGhpcy5kb21BZGFwdGVyPWQsdGhpcy5jb21tb25TdHJpbmdzPWgsdGhpcy5wb3BvdmVyVG9nZ2xlU2VydmljZT1mLHRoaXMubmdab25lPXYsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZT1uZXcgWHIsdGhpcy5vcGVuPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXX1n''@;'; put 'put ''ZXQgdmFsdWUoKXtyZXR1cm5bdGhpcy5maWx0ZXIubG93LHRoaXMuZmlsdGVyLmhpZ2hdfXNldCB2YWx1ZShhKXt0aGlzLmZpbHRlciYmQXJyYXkuaXNBcnJheShhKT9hJiYoYVswXSE9PXRoaXMuZmlsdGVyLmxvd3x8YVsxXSE9PXRoaXMuZmlsdGVyLmhpZ2gpJiYodGhpcy5maWx0ZXIubG93''@;'; put 'put ''PSJudW1iZXIiPT10eXBlb2YgYVswXT9hWzBdOm51bGwsdGhpcy5maWx0ZXIuaGlnaD0ibnVtYmVyIj09dHlwZW9mIGFbMV0/YVsxXTpudWxsLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChhKSk6dGhpcy5pbml0RmlsdGVyVmFsdWVzPWF9c2V0IGN1c3RvbU51bWVyaWNGaWx0ZXIoYSl7''@;'; put 'put ''dGhpcy5zZXRGaWx0ZXIoYSBpbnN0YW5jZW9mIGJIP2E6bmV3IFY5KGEpKSx0aGlzLmluaXRGaWx0ZXJWYWx1ZXMmJih0aGlzLnZhbHVlPXRoaXMuaW5pdEZpbHRlclZhbHVlcyxkZWxldGUgdGhpcy5pbml0RmlsdGVyVmFsdWVzKX1nZXQgbWF4UGxhY2Vob2xkZXJWYWx1ZSgpe3JldHVybiB0''@;'; put 'put ''aGlzLm1heFBsYWNlaG9sZGVyfHx0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5tYXhWYWx1ZX1nZXQgbWluUGxhY2Vob2xkZXJWYWx1ZSgpe3JldHVybiB0aGlzLm1pblBsYWNlaG9sZGVyfHx0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5taW5WYWx1ZX1nZXQgZnJvbUxhYmVsVmFsdWUoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5mcm9tTGFiZWx8fHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmZyb21MYWJlbH1nZXQgdG9MYWJlbFZhbHVlKCl7cmV0dXJuIHRoaXMudG9MYWJlbHx8dGhpcy5jb21tb25TdHJpbmdzLmtleXMudG9MYWJlbH1nZXQgbG93KCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0aGlzLmZp''@;'; put 'put ''bHRlci5sb3cmJmlzRmluaXRlKHRoaXMuZmlsdGVyLmxvdyk/dGhpcy5maWx0ZXIubG93Om51bGx9c2V0IGxvdyhhKXsibnVtYmVyIj09dHlwZW9mIGEmJmEhPT10aGlzLmZpbHRlci5sb3c/KHRoaXMuZmlsdGVyLmxvdz1hLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChbdGhpcy5maWx0''@;'; put 'put ''ZXIubG93LHRoaXMuZmlsdGVyLmhpZ2hdKSk6Im51bWJlciIhPXR5cGVvZiBhJiYodGhpcy5maWx0ZXIubG93PW51bGwsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KFt0aGlzLmZpbHRlci5sb3csdGhpcy5maWx0ZXIuaGlnaF0pKX1nZXQgaGlnaCgpe3JldHVybiJudW1iZXIiPT10eXBl''@;'; put 'put ''b2YgdGhpcy5maWx0ZXIuaGlnaCYmaXNGaW5pdGUodGhpcy5maWx0ZXIuaGlnaCk/dGhpcy5maWx0ZXIuaGlnaDpudWxsfXNldCBoaWdoKGEpeyJudW1iZXIiPT10eXBlb2YgYSYmYSE9PXRoaXMuZmlsdGVyLmhpZ2g/KHRoaXMuZmlsdGVyLmhpZ2g9YSx0aGlzLmZpbHRlclZhbHVlQ2hhbmdl''@;'; put 'put ''LmVtaXQoW3RoaXMuZmlsdGVyLmxvdyx0aGlzLmZpbHRlci5oaWdoXSkpOiJudW1iZXIiIT10eXBlb2YgYSYmKHRoaXMuZmlsdGVyLmhpZ2g9bnVsbCx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoW3RoaXMuZmlsdGVyLmxvdyx0aGlzLmZpbHRlci5oaWdoXSkpfW5nQWZ0ZXJWaWV3SW5p''@;'; put 'put ''dCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMucG9wb3ZlclRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMub3Blbj1hLHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5kb21BZGFw''@;'; put 'put ''dGVyLmZvY3VzKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCl9KX0pfSkpfW5nT25EZXN0cm95KCl7c3VwZXIubmdPbkRlc3Ryb3koKSx0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT57YS51bnN1YnNjcmliZSgpfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4g''@;'; put 'put ''bmV3KGF8fGMpKHFlKHM1KSxxZShjNikscWUocHMpLHFlKHljKSxxZShYYSkpfSxjLlx1MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctbnVtZXJpYy1maWx0ZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYoVWEoaVllLDUpLFVhKGZBLDUpKSwyJmEp''@;'; put 'put ''e2xldCBoO2dpKGg9bWkoKSkmJihkLmlucHV0PWguZmlyc3QpLGdpKGg9bWkoKSkmJihkLmZpbHRlckNvbnRhaW5lcj1oLmZpcnN0KX19LGlucHV0czp7bWluUGxhY2Vob2xkZXI6WzAsImNsckZpbHRlck1pblBsYWNlaG9sZGVyIiwibWluUGxhY2Vob2xkZXIiXSxtYXhQbGFjZWhvbGRlcjpb''@;'; put 'put ''MCwiY2xyRmlsdGVyTWF4UGxhY2Vob2xkZXIiLCJtYXhQbGFjZWhvbGRlciJdLGZyb21MYWJlbDpbMCwiY2xyRmlsdGVyRnJvbUxhYmVsIiwiZnJvbUxhYmVsIl0sdG9MYWJlbDpbMCwiY2xyRmlsdGVyVG9MYWJlbCIsInRvTGFiZWwiXSx2YWx1ZTpbMCwiY2xyRmlsdGVyVmFsdWUiLCJ2YWx1''@;'; put 'put ''ZSJdLGN1c3RvbU51bWVyaWNGaWx0ZXI6WzAsImNsckRnTnVtZXJpY0ZpbHRlciIsImN1c3RvbU51bWVyaWNGaWx0ZXIiXX0sb3V0cHV0czp7ZmlsdGVyVmFsdWVDaGFuZ2U6ImNsckZpbHRlclZhbHVlQ2hhbmdlIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbaGEoW3twcm92aWRlOnlILHVz''@;'; put 'put ''ZUV4aXN0aW5nOmN9XSksTGFdLGRlY2xzOjEyLHZhcnM6MTAsY29uc3RzOltbImlucHV0X2xvdyIsIiJdLFsiaW5wdXRfaGlnaCIsIiJdLFszLCJjbHJEZ0ZpbHRlck9wZW5DaGFuZ2UiLCJjbHJEZ0ZpbHRlciIsImNsckRnRmlsdGVyT3BlbiJdLFsxLCJkYXRhZ3JpZC1udW1lcmljLWZpbHRl''@;'; put 'put ''ci1mb3JtIl0sWzEsImNsci1jb250cm9sLWxhYmVsIl0sWyJjbHJOdW1iZXJJbnB1dCIsIiIsInR5cGUiLCJudW1iZXIiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJuYW1lIiwibG93IiwxLCJkYXRhZ3JpZC1udW1lcmljLWZpbHRlci1pbnB1dCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwi''@;'; put 'put ''LCJwbGFjZWhvbGRlciJdLFsiY2xyTnVtYmVySW5wdXQiLCIiLCJ0eXBlIiwibnVtYmVyIiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwibmFtZSIsImhpZ2giLDEsImRhdGFncmlkLW51bWVyaWMtZmlsdGVyLWlucHV0IiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsInBsYWNlaG9sZGVyIl1d''@;'; put 'put ''LHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7aWYoMSZhKXtjb25zdCBoPU9uKCk7ZGUoMCwiY2xyLWRnLWZpbHRlciIsMiksY2koImNsckRnRmlsdGVyT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLGZpKGQub3Blbix2KXx8KGQub3Blbj12KSxDdCh2KX0pLGRlKDEsImRpdiIs''@;'; put 'put ''MykoMiwiY2xyLW51bWJlci1pbnB1dC1jb250YWluZXIiKSgzLCJsYWJlbCIsNCksUGUoNCksaGUoKSxkZSg1LCJpbnB1dCIsNSwwKSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLGZpKGQubG93LHYpfHwoZC5sb3c9diksQ3Qodil9KSxoZSgpKCksZGUoNywi''@;'; put 'put ''Y2xyLW51bWJlci1pbnB1dC1jb250YWluZXIiKSg4LCJsYWJlbCIsNCksUGUoOSksaGUoKSxkZSgxMCwiaW5wdXQiLDYsMSksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiB3dChoKSxmaShkLmhpZ2gsdil8fChkLmhpZ2g9diksQ3Qodil9KSxoZSgpKCkoKSgpfTImYSYm''@;'; put 'put ''KEVlKCJjbHJEZ0ZpbHRlciIsZC5yZWdpc3RlcmVkKSxsaSgiY2xyRGdGaWx0ZXJPcGVuIixkLm9wZW4pLGZlKDQpLENyKGQuZnJvbUxhYmVsVmFsdWUpLGZlKCksbGkoIm5nTW9kZWwiLGQubG93KSxFZSgicGxhY2Vob2xkZXIiLGQubWluUGxhY2Vob2xkZXJWYWx1ZSksTnIoImFyaWEtbGFi''@;'; put 'put ''ZWwiLGQubWluUGxhY2Vob2xkZXJWYWx1ZSksZmUoNCksQ3IoZC50b0xhYmVsVmFsdWUpLGZlKCksbGkoIm5nTW9kZWwiLGQuaGlnaCksRWUoInBsYWNlaG9sZGVyIixkLm1heFBsYWNlaG9sZGVyVmFsdWUpLE5yKCJhcmlhLWxhYmVsIixkLm1heFBsYWNlaG9sZGVyVmFsdWUpKX0sZGVwZW5k''@;'; put 'put ''ZW5jaWVzOltDcyxCM2UsVjNlLG5jLEhGLGhsLHJsLGZBXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjbGFzcyBTSHtjb25zdHJ1Y3RvcihsLGE9ITEpe3RoaXMucHJvcD1sLHRoaXMuZXhhY3Q9YSx0aGlzLm5lc3RlZFByb3A9bmV3IEJYKGwpfWFjY2VwdHMobCxhKXtjb25zdCBkPXRoaXMu''@;'; put 'put ''bmVzdGVkUHJvcC5nZXRQcm9wVmFsdWUobCk7cmV0dXJuISh0eXBlb2YgZD4idSIpJiYodGhpcy5leGFjdD8oIiIrZCkudG9Mb3dlckNhc2UoKT09PWE6KCIiK2QpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihhKT49MCl9fWNsYXNzIEI5e2NvbnN0cnVjdG9yKGwpe3RoaXMuZmlsdGVyRm49bCx0''@;'; put 'put ''aGlzLl9jaGFuZ2VzPW5ldyB1cix0aGlzLl9sb3dlckNhc2VWYWx1ZT0iIix0aGlzLl9yYXdWYWx1ZT0iIn1nZXQgY2hhbmdlcygpe3JldHVybiB0aGlzLl9jaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWdldCBsb3dlckNhc2VWYWx1ZSgpe3JldHVybiB0aGlzLl9sb3dlckNhc2VWYWx1ZX1nZXQg''@;'; put 'put ''c3RhdGUoKXtyZXR1cm4gdGhpcy5maWx0ZXJGbiBpbnN0YW5jZW9mIFNIP3twcm9wZXJ0eTp0aGlzLmZpbHRlckZuLnByb3AsdmFsdWU6dGhpcy52YWx1ZX06dGhpc31nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5fcmF3VmFsdWV9c2V0IHZhbHVlKGwpe2x8fChsPSIiKSxsIT09dGhpcy5fcmF3''@;'; put 'put ''VmFsdWUmJih0aGlzLl9yYXdWYWx1ZT1sLHRoaXMuX2xvd2VyQ2FzZVZhbHVlPWwudG9Mb3dlckNhc2UoKS50cmltKCksdGhpcy5fY2hhbmdlcy5uZXh0KGwpKX1pc0FjdGl2ZSgpe3JldHVybiEhdGhpcy52YWx1ZX1hY2NlcHRzKGwpe3JldHVybiB0aGlzLmZpbHRlckZuLmFjY2VwdHMobCx0''@;'; put 'put ''aGlzLmxvd2VyQ2FzZVZhbHVlKX1lcXVhbHMobCl7cmV0dXJuIGwgaW5zdGFuY2VvZiBCOSYmKGwuZmlsdGVyRm4gaW5zdGFuY2VvZiBTSD90aGlzLmZpbHRlckZuIGluc3RhbmNlb2YgU0gmJmwuZmlsdGVyRm4ucHJvcD09PXRoaXMuZmlsdGVyRm4ucHJvcCYmbC52YWx1ZT09PXRoaXMudmFs''@;'; put 'put ''dWU6bD09PXRoaXMpfX1sZXQgU3c9KCgpPT57Y2xhc3MgYyBleHRlbmRzIF9Ie2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQpe3N1cGVyKGEpLHRoaXMuZG9tQWRhcHRlcj1kLHRoaXMuY29tbW9uU3RyaW5ncz1oLHRoaXMuc21hcnRUb2dnbGVTZXJ2aWNlPWYsdGhpcy5lbGVtZW50UmVmPXYs''@;'; put 'put ''dGhpcy5jZHI9TSx0aGlzLm5nWm9uZT1ELHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2U9bmV3IFhyLHRoaXMub3Blbj0hMSx0aGlzLmxhYmVsVmFsdWU9IiIsdGhpcy5zdWJzPVtdfXNldCBjdXN0b21TdHJpbmdGaWx0ZXIoYSl7dGhpcy5zZXRGaWx0ZXIoYSBpbnN0YW5jZW9mIGJIP2E6bmV3IEI5''@;'; put 'put ''KGEpKSx0aGlzLmluaXRGaWx0ZXJWYWx1ZSYmKHRoaXMudmFsdWU9dGhpcy5pbml0RmlsdGVyVmFsdWUsZGVsZXRlIHRoaXMuaW5pdEZpbHRlclZhbHVlKX1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5maWx0ZXIudmFsdWV9c2V0IHZhbHVlKGEpe3RoaXMuZmlsdGVyJiYic3RyaW5nIj09dHlw''@;'; put 'put ''ZW9mIGE/KGF8fChhPSIiKSxhIT09dGhpcy5maWx0ZXIudmFsdWUmJih0aGlzLmZpbHRlci52YWx1ZT1hLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChhKSkpOnRoaXMuaW5pdEZpbHRlclZhbHVlPWF9Z2V0IHBsYWNlaG9sZGVyVmFsdWUoKXtyZXR1cm4gdGhpcy5wbGFjZWhvbGRlcnx8''@;'; put 'put ''dGhpcy5jb21tb25TdHJpbmdzLmtleXMuZmlsdGVySXRlbXN9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzLnB1c2godGhpcy5zbWFydFRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMub3Blbj1hLHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57''@;'; put 'put ''cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5kb21BZGFwdGVyLmZvY3VzKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCl9KX0pfSkpfW5nT25DaGFuZ2VzKCl7c2V0VGltZW91dCgoKT0+e3RoaXMuc2V0RmlsdGVyTGFiZWwoKSx0aGlzLmNkci5tYXJrRm9yQ2hlY2soKX0pfW5nT25E''@;'; put 'put ''ZXN0cm95KCl7c3VwZXIubmdPbkRlc3Ryb3koKSx0aGlzLnN1YnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNldEZpbHRlckxhYmVsKCl7aWYodGhpcy5sYWJlbClyZXR1cm4gdm9pZCh0aGlzLmxhYmVsVmFsdWU9dGhpcy5sYWJlbCk7Y29uc3QgZD10aGlzLmVsZW1lbnRSZWYubmF0''@;'; put 'put ''aXZlRWxlbWVudD8uY2xvc2VzdCgiY2xyLWRnLWNvbHVtbiIpPy5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQtY29sdW1uLXRpdGxlIik7dGhpcy5sYWJlbFZhbHVlPXRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRhZ3JpZEZpbHRlckxhYmVsLHtD''@;'; put 'put ''T0xVTU46ZD8udGV4dENvbnRlbnQudHJpbSgpfHwiIn0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShzNSkscWUoYzYpLHFlKHBzKSxxZSh5YykscWUobmEpLHFlKEhzKSxxZShYYSkpfSxjLlx1MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9y''@;'; put 'put ''czpbWyJjbHItZGctc3RyaW5nLWZpbHRlciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihVYShhWWUsNSksVWEoZkEsNSkpLDImYSl7bGV0IGg7Z2koaD1taSgpKSYmKGQuaW5wdXQ9aC5maXJzdCksZ2koaD1taSgpKSYmKGQuZmlsdGVyQ29udGFpbmVyPWguZmlyc3QpfX0s''@;'; put 'put ''aW5wdXRzOntwbGFjZWhvbGRlcjpbMCwiY2xyRmlsdGVyUGxhY2Vob2xkZXIiLCJwbGFjZWhvbGRlciJdLGxhYmVsOlswLCJjbHJGaWx0ZXJMYWJlbCIsImxhYmVsIl0sY3VzdG9tU3RyaW5nRmlsdGVyOlswLCJjbHJEZ1N0cmluZ0ZpbHRlciIsImN1c3RvbVN0cmluZ0ZpbHRlciJdLHZhbHVl''@;'; put 'put ''OlswLCJjbHJGaWx0ZXJWYWx1ZSIsInZhbHVlIl19LG91dHB1dHM6e2ZpbHRlclZhbHVlQ2hhbmdlOiJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hhKFt7cHJvdmlkZTp5SCx1c2VFeGlzdGluZzpjfV0pLExhLFdvXSxkZWNsczo2LHZhcnM6Nixjb25z''@;'; put 'put ''dHM6W1siaW5wdXQiLCIiXSxbMywiY2xyRGdGaWx0ZXJPcGVuQ2hhbmdlIiwiY2xyRGdGaWx0ZXIiLCJjbHJEZ0ZpbHRlck9wZW4iXSxbInR5cGUiLCJ0ZXh0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwibmFtZSIsInNlYXJjaCIsImNscklucHV0IiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdN''@;'; put 'put ''b2RlbCIsInBsYWNlaG9sZGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7aWYoMSZhKXtjb25zdCBoPU9uKCk7ZGUoMCwiY2xyLWRnLWZpbHRlciIsMSksY2koImNsckRnRmlsdGVyT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLGZpKGQub3Blbix2KXx8KGQub3Blbj12''@;'; put 'put ''KSxDdCh2KX0pLGRlKDEsImNsci1pbnB1dC1jb250YWluZXIiKSgyLCJsYWJlbCIpLFBlKDMpLGhlKCksZGUoNCwiaW5wdXQiLDIsMCksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiB3dChoKSxmaShkLnZhbHVlLHYpfHwoZC52YWx1ZT12KSxDdCh2KX0pLGhlKCkoKSgp''@;'; put 'put ''fTImYSYmKEVlKCJjbHJEZ0ZpbHRlciIsZC5yZWdpc3RlcmVkKSxsaSgiY2xyRGdGaWx0ZXJPcGVuIixkLm9wZW4pLGZlKDMpLENyKGQubGFiZWxWYWx1ZSksZmUoKSxsaSgibmdNb2RlbCIsZC52YWx1ZSksRWUoInBsYWNlaG9sZGVyIixkLnBsYWNlaG9sZGVyVmFsdWUpLE5yKCJhcmlhLWxh''@;'; put 'put ''YmVsIixkLnBsYWNlaG9sZGVyVmFsdWUpKX0sZGVwZW5kZW5jaWVzOltDcyxNZCxkSCxuYyxobCxybCxmQV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksdjY9KCgpPT57Y2xhc3MgYyBleHRlbmRzIG93e31yZXR1cm4gYy5cdTAyNzVmYWM9KCgpPT57bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQp''@;'; put 'put ''e3JldHVybihsfHwobD15bChjKSkpKGR8fGMpfX0pKCksYy5cdTAyNzVkaXI9WXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl1dLHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W0xhXX0pLGN9KSgpLE13PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmFjdGlvbmFi''@;'; put 'put ''bGVDb3VudD0wfWdldCBoYXNBY3Rpb25hYmxlUm93KCl7cmV0dXJuIHRoaXMuYWN0aW9uYWJsZUNvdW50PjB9cmVnaXN0ZXIoKXt0aGlzLmFjdGlvbmFibGVDb3VudCsrfXVucmVnaXN0ZXIoKXt0aGlzLmFjdGlvbmFibGVDb3VudC0tfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7''@;'; put 'put ''cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxqOT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgc3d7Y29uc3RydWN0b3IoYSxkLGgpe2lmKCFkKXRocm93IG5ldyBFcnJvcigiY2xyLWRnLXJvdyBzaG91bGQgb25seSBi''@;'; put 'put ''ZSB1c2VkIGluc2lkZSBvZiBhIGNsci1kYXRhZ3JpZCIpO3N1cGVyKGEsZCksdGhpcy5yb3dBY3Rpb25zPWh9Z2V0IGZsYXZvcigpe3JldHVybiB0aGlzLnJvd0FjdGlvbnMuaGFzQWN0aW9uYWJsZVJvd319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyko''@;'; put 'put ''cWUoSHMpLHFlKHY2LDgpLHFlKE13KSl9LGMuXHUwMjc1ZGlyPVlyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRhZ3JpZCJdLFsiY2xyLWRnLXJvdyJdXSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltMYV19KSxjfSkoKSwkM2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlz''@;'; put 'put ''LnBsYXRmb3JtSWQ9YSx0aGlzLm1vZGFsU3RhY2s9W10sdGhpcy5rZXlVcEV2ZW50TGlzdGVuZXI9dGhpcy5vbktleVVwLmJpbmQodGhpcyl9dHJhY2tNb2RhbE9wZW4oYSl7ITE9PT10aGlzLm1vZGFsU3RhY2suaW5jbHVkZXMoYSkmJnRoaXMubW9kYWxTdGFjay51bnNoaWZ0KGEpLHdsKHRo''@;'; put 'put ''aXMucGxhdGZvcm1JZCkmJmRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLHRoaXMua2V5VXBFdmVudExpc3RlbmVyKX10cmFja01vZGFsQ2xvc2UoYSl7Y29uc3QgZD10aGlzLm1vZGFsU3RhY2suaW5kZXhPZihhKTtkPi0xJiZ0aGlzLm1vZGFsU3RhY2suc3BsaWNlKGQs''@;'; put 'put ''MSksMD09PXRoaXMubW9kYWxTdGFjay5sZW5ndGgmJndsKHRoaXMucGxhdGZvcm1JZCkmJmRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLHRoaXMua2V5VXBFdmVudExpc3RlbmVyKX1vbktleVVwKGEpe3RoaXMubW9kYWxTdGFjay5sZW5ndGgmJmtmKGEua2V5KT09''@;'; put 'put ''PW1hLkVzY2FwZSYmKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpLHRoaXMubW9kYWxTdGFja1swXS5jbG9zZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoSHIodWwpKX0sYy5cdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5c''@;'; put 'put ''dTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxVMz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMubW9kYWxTdGFja1NlcnZpY2U9YSx0aGlzLnByZXZlbnRTY3JvbGw9ITEsdGhpcy50b2dnbGVTdGF0ZT0hMSx0aGlzLl9lbmFibGVkPSExLHRoaXMuX3N0YXRlPW5l''@;'; put 'put ''dyBNaSh0aGlzLnRvZ2dsZVN0YXRlKX1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLl9lbmFibGVkfXNldCBlbmFibGVkKGEpe3RoaXMuX2VuYWJsZWQ9YX1nZXQgcHJldmVudEZvY3VzU2Nyb2xsKCl7cmV0dXJuIHRoaXMucHJldmVudFNjcm9sbH1zZXQgcHJldmVudEZvY3VzU2Nyb2xsKGEp''@;'; put 'put ''e3RoaXMucHJldmVudFNjcm9sbD1hfWdldCBzdGF0ZSgpe3JldHVybiB0aGlzLmNhY2hlfWdldCBzdGF0ZUNoYW5nZSgpe3JldHVybiB0aGlzLl9zdGF0ZS5hc09ic2VydmFibGUoKX1nZXQgaXNPcGVuKCl7cmV0dXJuITA9PT10aGlzLnRvZ2dsZVN0YXRlfW9wZW4oYSxkKXt0aGlzLmNhY2hl''@;'; put 'put ''PWEsdGhpcy5idXR0b249ZCx0aGlzLnRvZ2dsZVN0YXRlPSEwLHRoaXMuX3N0YXRlLm5leHQodGhpcy50b2dnbGVTdGF0ZSksdGhpcy5tb2RhbFN0YWNrU2VydmljZS50cmFja01vZGFsT3Blbih0aGlzKX1jbG9zZSgpe3RoaXMudG9nZ2xlU3RhdGU9ITEsdGhpcy5yZXR1cm5Gb2N1cygpLHRo''@;'; put 'put ''aXMuX3N0YXRlLm5leHQodGhpcy50b2dnbGVTdGF0ZSksdGhpcy5tb2RhbFN0YWNrU2VydmljZS50cmFja01vZGFsQ2xvc2UodGhpcyl9cmV0dXJuRm9jdXMoKXt0aGlzLmJ1dHRvbiYmKHRoaXMuYnV0dG9uLmZvY3VzKHtwcmV2ZW50U2Nyb2xsOnRoaXMucHJldmVudEZvY3VzU2Nyb2xsfSks''@;'; put 'put ''dGhpcy5idXR0b249bnVsbCl9dG9nZ2xlKGEsZCl7dGhpcy5pc1Jvd09wZW4oYSl8fCFhP3RoaXMuY2xvc2UoKTp0aGlzLm9wZW4oYSxkKX1pc1Jvd09wZW4oYSl7cmV0dXJuISghdGhpcy50b2dnbGVTdGF0ZXx8dGhpcy5jYWNoZSE9PWEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o''@;'; put 'put ''YSl7cmV0dXJuIG5ldyhhfHxjKShIcigkM2UpKX0sYy5cdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx4dz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZGV0YWlsU2VydmljZT1hLHRoaXMuZXhwYW5kYWJsZUNvdW50PTB9Z2V0IGhh''@;'; put 'put ''c0V4cGFuZGFibGVSb3coKXtyZXR1cm4hdGhpcy5kZXRhaWxTZXJ2aWNlLmVuYWJsZWQmJnRoaXMuZXhwYW5kYWJsZUNvdW50PjB9cmVnaXN0ZXIoKXt0aGlzLmV4cGFuZGFibGVDb3VudCsrfXVucmVnaXN0ZXIoKXt0aGlzLmV4cGFuZGFibGVDb3VudC0tfX1yZXR1cm4gYy5cdTAyNzVmYWM9''@;'; put 'put ''ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShIcihVMykpfSxjLlx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHo5PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBzd3tjb25zdHJ1Y3RvcihhLGQsaCl7aWYoIWQpdGhyb3cgbmV3IEVycm9yKCJjbHIt''@;'; put 'put ''ZGctcm93IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLWRhdGFncmlkIik7c3VwZXIoYSxkKSx0aGlzLmV4cGFuZGFibGVDb3VudD1ofWdldCBmbGF2b3IoKXtyZXR1cm4gdGhpcy5leHBhbmRhYmxlQ291bnQuaGFzRXhwYW5kYWJsZVJvd319cmV0dXJuIGMuXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoSHMpLHFlKHY2LDgpLHFlKHh3KSl9LGMuXHUwMjc1ZGlyPVlyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRhZ3JpZCJdLFsiY2xyLWRnLXJvdyJdXSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltMYV19KSxjfSkoKTtjbGFzcyBN''@;'; put 'put ''SHtjb25zdHJ1Y3RvcihsKXt0aGlzLnByb3A9bCx0aGlzLm5lc3RlZFByb3A9bmV3IEJYKGwpfWNvbXBhcmUobCxhKXtsZXQgZD10aGlzLm5lc3RlZFByb3AuZ2V0UHJvcFZhbHVlKGwpLGg9dGhpcy5uZXN0ZWRQcm9wLmdldFByb3BWYWx1ZShhKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGQm''@;'; put 'put ''JihkPWQudG9Mb3dlckNhc2UoKSksInN0cmluZyI9PXR5cGVvZiBoJiYoaD1oLnRvTG93ZXJDYXNlKCkpLHR5cGVvZiBkPiJ1Inx8bnVsbD09PWQ/dHlwZW9mIGg+InUifHxudWxsPT09aD8wOjE6dHlwZW9mIGg+InUifHxudWxsPT09aHx8ZDxoPy0xOmQ+aD8xOjB9fXZhciBfMj1mdW5jdGlv''@;'; put 'put ''bihjKXtyZXR1cm4gY1tjLlVOU09SVEVEPTBdPSJVTlNPUlRFRCIsY1tjLkFTQz0xXT0iQVNDIixjW2MuREVTQz0tMV09IkRFU0MiLGN9KF8yfHx7fSk7Y29uc3QgRXc9ImRhdGFncmlkLWZpeGVkLXdpZHRoIixwQT0iZGF0YWdyaWQtaGlkZGVuLWNvbHVtbiI7bGV0IGpYPSgoKT0+e2NsYXNz''@;'; put 'put ''IGN7bmdBZnRlclZpZXdJbml0KCl7dGhpcy5jb2x1bW5WaWV3PXRoaXMudGVtcGxhdGVSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KG51bGwpfW5nT25EZXN0cm95KCl7dGhpcy5jb2x1bW5WaWV3LmRlc3Ryb3koKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8''@;'; put 'put ''Yyl9LGMuXHUwMjc1Y21wPWFyKHt0eXBlOmMsc2VsZWN0b3JzOltbImRnLXdyYXBwZWQtY29sdW1uIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmVWEob1llLDUpLDImYSl7bGV0IGg7Z2koaD1taSgpKSYmKGQudGVtcGxhdGVSZWY9aC5maXJzdCl9fSxzdGFuZGFsb25lOiEx''@;'; put 'put ''LG5nQ29udGVudFNlbGVjdG9yczpUbyxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1siY29sdW1uUG9ydGFsIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxndCgwLHNZZSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDAseGMpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCks''@;'; put 'put ''eEg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnN0YXRlRGVib3VuY2VyPWEsdGhpcy5fcmV2ZXJzZT0hMSx0aGlzLl9jaGFuZ2U9bmV3IHVyfWdldCBjb21wYXJhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBhcmF0b3J9c2V0IGNvbXBhcmF0b3IoYSl7dGhpcy5zdGF0ZURlYm91''@;'; put 'put ''bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX2NvbXBhcmF0b3I9YSx0aGlzLmVtaXRDaGFuZ2UoKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKX1nZXQgcmV2ZXJzZSgpe3JldHVybiB0aGlzLl9yZXZlcnNlfXNldCByZXZlcnNlKGEpe3RoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdl''@;'; put 'put ''U3RhcnQoKSx0aGlzLl9yZXZlcnNlPWEsdGhpcy5lbWl0Q2hhbmdlKCksdGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VEb25lKCl9Z2V0IGNoYW5nZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9dG9nZ2xlKGEsZCl7dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFy''@;'; put 'put ''dCgpLHRoaXMuY29tcGFyYXRvcj09PWE/dGhpcy5fcmV2ZXJzZT10eXBlb2YgZDwidSImJmR8fCF0aGlzLl9yZXZlcnNlOih0aGlzLl9jb21wYXJhdG9yPWEsdGhpcy5fcmV2ZXJzZT10eXBlb2YgZDwidSImJmQpLHRoaXMuZW1pdENoYW5nZSgpLHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdl''@;'; put 'put ''RG9uZSgpfWNsZWFyKCl7dGhpcy5jb21wYXJhdG9yPW51bGx9Y29tcGFyZShhLGQpe3JldHVybih0aGlzLnJldmVyc2U/LTE6MSkqdGhpcy5jb21wYXJhdG9yLmNvbXBhcmUoYSxkKX1lbWl0Q2hhbmdlKCl7dGhpcy5fY2hhbmdlLm5leHQodGhpcyl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5j''@;'; put 'put ''dGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEhyKGhBKSl9LGMuXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7dmFyIFozPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuQUxJR05fQ09MVU1OUz0wXT0iQUxJR05fQ09MVU1OUyIsY1tjLkNBTENVTEFURV9N''@;'; put 'put ''T0RFX09OPTFdPSJDQUxDVUxBVEVfTU9ERV9PTiIsY1tjLkNBTENVTEFURV9NT0RFX09GRj0yXT0iQ0FMQ1VMQVRFX01PREVfT0ZGIixjW2MuQ0xFQVJfV0lEVEhTPTNdPSJDTEVBUl9XSURUSFMiLGNbYy5DT01QVVRFX0NPTFVNTl9XSURUSFM9NF09IkNPTVBVVEVfQ09MVU1OX1dJRFRIUyIs''@;'; put 'put ''Y30oWjN8fHt9KTtsZXQgVTk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3JlbmRlclN0ZXA9bmV3IHVyLHRoaXMuYWxyZWFkeVNpemVkPSExfWdldCByZW5kZXJTdGVwKCl7cmV0dXJuIHRoaXMuX3JlbmRlclN0ZXAuYXNPYnNlcnZhYmxlKCl9ZmlsdGVyUmVuZGVyU3RlcHMo''@;'; put 'put ''YSl7cmV0dXJuIHRoaXMucmVuZGVyU3RlcC5waXBlKG9jKGQ9PmE9PT1kKSl9cmVzaXplKCl7dGhpcy5fcmVuZGVyU3RlcC5uZXh0KFozLkNBTENVTEFURV9NT0RFX09OKSx0aGlzLmFscmVhZHlTaXplZCYmdGhpcy5fcmVuZGVyU3RlcC5uZXh0KFozLkNMRUFSX1dJRFRIUyksdGhpcy5fcmVu''@;'; put 'put ''ZGVyU3RlcC5uZXh0KFozLkNPTVBVVEVfQ09MVU1OX1dJRFRIUyksdGhpcy5fcmVuZGVyU3RlcC5uZXh0KFozLkFMSUdOX0NPTFVNTlMpLHRoaXMuYWxyZWFkeVNpemVkPSEwLHRoaXMuX3JlbmRlclN0ZXAubmV4dChaMy5DQUxDVUxBVEVfTU9ERV9PRkYpfX1yZXR1cm4gYy5cdTAyNzVmYWM9''@;'; put 'put ''ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx6WD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmVsPWEsdGhpcy5kb21BZGFwdGVyPWQsdGhpcy5vcmdhbml6ZXI9aCx0''@;'; put 'put ''aGlzLl9yZXNpemVkQnk9MH1nZXQgcmVzaXplZEJ5KCl7cmV0dXJuIHRoaXMuX3Jlc2l6ZWRCeX1nZXQgbWluQ29sdW1uV2lkdGgoKXtyZXR1cm4gdGhpcy5kb21BZGFwdGVyLm1pbldpZHRoKHRoaXMuZWwubmF0aXZlRWxlbWVudCl8fDk2fWdldCBtYXhSZXNpemVSYW5nZSgpe3JldHVybiB0''@;'; put 'put ''aGlzLndpZHRoQmVmb3JlUmVzaXplLXRoaXMubWluQ29sdW1uV2lkdGh9Z2V0IHdpZHRoQWZ0ZXJSZXNpemUoKXtyZXR1cm4gdGhpcy53aWR0aEJlZm9yZVJlc2l6ZSt0aGlzLl9yZXNpemVkQnl9c3RhcnRSZXNpemUoKXt0aGlzLl9yZXNpemVkQnk9MCx0aGlzLmlzV2l0aGluTWF4UmVzaXpl''@;'; put 'put ''UmFuZ2U9ITAsdGhpcy53aWR0aEJlZm9yZVJlc2l6ZT10aGlzLmRvbUFkYXB0ZXIuY2xpZW50UmVjdCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpLndpZHRofWVuZFJlc2l6ZSgpe3RoaXMub3JnYW5pemVyLnJlc2l6ZSgpfWNhbGN1bGF0ZVJlc2l6ZShhKXthPC10aGlzLm1heFJlc2l6ZVJhbmdl''@;'; put 'put ''Pyh0aGlzLl9yZXNpemVkQnk9LXRoaXMubWF4UmVzaXplUmFuZ2UsdGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlPSExKToodGhpcy5fcmVzaXplZEJ5PWEsdGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlPSEwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco''@;'; put 'put ''YXx8YykoSHIobmEpLEhyKGM2KSxIcihVOSkpfSxjLlx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFVYPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5wbGF0Zm9ybUlkPWF9Z2V0IHRhYmxlUmVmKCl7cmV0dXJuIHRoaXMuX3RhYmxl''@;'; put 'put ''UmVmfXNldCB0YWJsZVJlZihhKXt0aGlzLl90YWJsZVJlZj1hfXNldCB0YWJsZShhKXt3bCh0aGlzLnBsYXRmb3JtSWQpJiZhLm5hdGl2ZUVsZW1lbnQmJih0aGlzLnRhYmxlUmVmPWEubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQtdGFibGUiKSl9Z2V0Q29sdW1uRHJh''@;'; put 'put ''Z0hlaWdodCgpe3JldHVybiB0aGlzLnRhYmxlUmVmP2Ake3RoaXMudGFibGVSZWYuY2xpZW50SGVpZ2h0fXB4YDpudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShIcih1bCkpfSxjLlx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1''@;'; put 'put ''MDI3NWZhY30pLGN9KSgpLFgzZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXt0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlPWEsdGhpcy5yZW5kZXJlcj1kLHRoaXMubmdab25lPWgsdGhpcy50YWJsZVNpemVTZXJ2aWNlPWYsdGhpcy5jb21tb25TdHJpbmc9dix0aGlz''@;'; put 'put ''LmRvY3VtZW50PU0sdGhpcy5jb2x1bW5TZXBhcmF0b3JJZD1PdSgpLHRoaXMucmVzaXplU3RhcnRlZE9uS2V5RG93bj0hMSx0aGlzLnVubGlzdGVuZXJzPVtdfWdldCBkZXNjcmlwdGlvbklkKCl7cmV0dXJuYCR7dGhpcy5jb2x1bW5TZXBhcmF0b3JJZH0tYXJpYS1kZXNjcmliZWRieWB9Z2V0''@;'; put 'put ''IHJlc2l6ZVRyYWNrZXJFbCgpe3JldHVybiB0aGlzLnJlc2l6ZVRyYWNrZXJSZWYubmF0aXZlRWxlbWVudH1nZXQgY29sdW1uSGFuZGxlRWwoKXtyZXR1cm4gdGhpcy5jb2x1bW5IYW5kbGVSZWYubmF0aXZlRWxlbWVudH1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLm5nWm9uZS5ydW5PdXRzaWRl''@;'; put 'put ''QW5ndWxhcigoKT0+e3RoaXMudW5saXN0ZW5lcnMucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmNvbHVtbkhhbmRsZUVsLCJrZXlkb3duIixhPT57dGhpcy5zaG93VHJhY2tlck9uRmlyc3RLZXlEb3duKGEpLHRoaXMubW92ZVRyYWNrZXJPbktleURvd24oYSl9KSksdGhpcy51bmxp''@;'; put 'put ''c3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuY29sdW1uSGFuZGxlRWwsImtleXVwIixhPT57dGhpcy5oaWRlVHJhY2tlck9uS2V5VXAoYSl9KSl9KX1uZ09uRGVzdHJveSgpe3RoaXMudW5saXN0ZW5lcnMuZm9yRWFjaChhPT5hKCkpfXNob3dUcmFja2VyKCl7dGhpcy5j''@;'; put 'put ''b2x1bW5SZXNpemVyU2VydmljZS5zdGFydFJlc2l6ZSgpO2NvbnN0IGE9dGhpcy50YWJsZVNpemVTZXJ2aWNlLmdldENvbHVtbkRyYWdIZWlnaHQoKTt0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMucmVzaXplVHJhY2tlckVsLCJoZWlnaHQiLGEpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUo''@;'; put 'put ''dGhpcy5yZXNpemVUcmFja2VyRWwsImRpc3BsYXkiLCJibG9jayIpfW1vdmVUcmFja2VyKGEpe3RoaXMuY29sdW1uUmVzaXplclNlcnZpY2UuY2FsY3VsYXRlUmVzaXplKGEpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5yZXNpemVUcmFja2VyRWwsInRyYW5zZm9ybSIsYHRyYW5zbGF0''@;'; put 'put ''ZVgoJHt0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeX1weClgKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZG9jdW1lbnQuYm9keSwiY3Vyc29yIiwiY29sLXJlc2l6ZSIpLHRoaXMucmVkRmxhZ1RyYWNrZXIoKX1oaWRlVHJhY2tlcigpe3RoaXMuY29sdW1uUmVzaXpl''@;'; put 'put ''clNlcnZpY2UuZW5kUmVzaXplKCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiZGlzcGxheSIsIm5vbmUiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMucmVzaXplVHJhY2tlckVsLCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGVYKDBweCkiKSx0aGlzLnJl''@;'; put 'put ''bmRlcmVyLnNldFN0eWxlKHRoaXMuY29sdW1uSGFuZGxlRWwsInRyYW5zZm9ybSIsInRyYW5zbGF0ZVgoMHB4KSIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5kb2N1bWVudC5ib2R5LCJjdXJzb3IiLCJhdXRvIil9c2hvd1RyYWNrZXJPbkZpcnN0S2V5RG93bihhKXshdGhpcy5yZXNp''@;'; put 'put ''emVTdGFydGVkT25LZXlEb3duJiYodGhpcy5pc0Fycm93TGVmdEtleUV2ZW50KGEpfHx0aGlzLmlzQXJyb3dSaWdodEtleUV2ZW50KGEpKSYmKHRoaXMucmVzaXplU3RhcnRlZE9uS2V5RG93bj0hMCx0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMucmVzaXplVHJhY2tlckVsLCJvbi1hcnJv''@;'; put 'put ''dy1rZXktcmVzaXplIiksdGhpcy5zaG93VHJhY2tlcigpKX1tb3ZlVHJhY2tlck9uS2V5RG93bihhKXt0aGlzLmlzQXJyb3dMZWZ0S2V5RXZlbnQoYSk/KGEuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5tb3ZlVHJhY2tlcih0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeS0xMikp''@;'; put 'put ''OnRoaXMuaXNBcnJvd1JpZ2h0S2V5RXZlbnQoYSkmJihhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMubW92ZVRyYWNrZXIodGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5yZXNpemVkQnkrMTIpKX1oaWRlVHJhY2tlck9uS2V5VXAoYSl7dGhpcy5yZXNpemVTdGFydGVkT25LZXlEb3duJiYodGhp''@;'; put 'put ''cy5pc0Fycm93TGVmdEtleUV2ZW50KGEpfHx0aGlzLmlzQXJyb3dSaWdodEtleUV2ZW50KGEpKSYmKHRoaXMucmVzaXplU3RhcnRlZE9uS2V5RG93bj0hMSx0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMucmVzaXplVHJhY2tlckVsLCJvbi1hcnJvdy1rZXktcmVzaXplIiksdGhpcy5o''@;'; put 'put ''aWRlVHJhY2tlcigpLHRoaXMuY29sdW1uSGFuZGxlRWwuZm9jdXMoKSl9cmVkRmxhZ1RyYWNrZXIoKXt0aGlzLmlzV2l0aGluTWF4UmVzaXplUmFuZ2UhPT10aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLmlzV2l0aGluTWF4UmVzaXplUmFuZ2UmJih0aGlzLmlzV2l0aGluTWF4UmVzaXplUmFu''@;'; put 'put ''Z2U9dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlLHRoaXMuaXNXaXRoaW5NYXhSZXNpemVSYW5nZT90aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMucmVzaXplVHJhY2tlckVsLCJleGNlZWRlZC1tYXgiKTp0aGlzLnJlbmRlcmVyLmFkZENsYXNz''@;'; put 'put ''KHRoaXMucmVzaXplVHJhY2tlckVsLCJleGNlZWRlZC1tYXgiKSl9aXNBcnJvd0xlZnRLZXlFdmVudChhKXtyZXR1cm4ga2YoYS5rZXkpPT09bWEuQXJyb3dMZWZ0fWlzQXJyb3dSaWdodEtleUV2ZW50KGEpe3JldHVybiBrZihhLmtleSk9PT1tYS5BcnJvd1JpZ2h0fX1yZXR1cm4gYy5cdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZSh6WCkscWUoTm8pLHFlKFhhKSxxZShVWCkscWUocHMpLHFlKEdzKSl9LGMuXHUwMjc1Y21wPWFyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jb2x1bW4tc2VwYXJhdG9yIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQp''@;'; put 'put ''e2lmKDEmYSYmKFVhKGxZZSw1KSxVYShjWWUsNSkpLDImYSl7bGV0IGg7Z2koaD1taSgpKSYmKGQucmVzaXplVHJhY2tlclJlZj1oLmZpcnN0KSxnaShoPW1pKCkpJiYoZC5jb2x1bW5IYW5kbGVSZWY9aC5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezIm''@;'; put 'put ''YSYmeHIoImRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3IiLCEwKX0sc3RhbmRhbG9uZTohMSxkZWNsczo2LHZhcnM6NCxjb25zdHM6W1siY29sdW1uSGFuZGxlIiwiIl0sWyJyZXNpemVUcmFja2VyIiwiIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2RrRHJhZyIsIiIsImNka0RyYWdMb2NrQXhpcyIs''@;'; put 'put ''IngiLDEsImRhdGFncmlkLWNvbHVtbi1oYW5kbGUiLDMsImNka0RyYWdTdGFydGVkIiwiY2RrRHJhZ01vdmVkIiwiY2RrRHJhZ0VuZGVkIl0sWzEsImNsci1zci1vbmx5Il0sWzEsImRhdGFncmlkLWNvbHVtbi1yZXNpemUtdHJhY2tlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe2lmKDEm''@;'; put 'put ''YSl7Y29uc3QgaD1PbigpO2RlKDAsImJ1dHRvbiIsMiwwKSxPdCgiY2RrRHJhZ1N0YXJ0ZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGgpLEN0KGQuc2hvd1RyYWNrZXIoKSl9KSgiY2RrRHJhZ01vdmVkIixmdW5jdGlvbih2KXtyZXR1cm4gd3QoaCksQ3QoZC5tb3ZlVHJhY2tlcih2LmRpc3Rh''@;'; put 'put ''bmNlLngpKX0pKCJjZGtEcmFnRW5kZWQiLGZ1bmN0aW9uKHYpe3JldHVybiB3dChoKSxkLmhpZGVUcmFja2VyKCksQ3Qodi5zb3VyY2UuX2RyYWdSZWYucmVzZXQoKSl9KSxoZSgpLGRlKDIsInNwYW4iLDMpLFBlKDMpLGhlKCksR3QoNCwiZGl2Iiw0LDEpfTImYSYmKE5yKCJhcmlhLWxhYmVs''@;'; put 'put ''IixkLmNvbW1vblN0cmluZy5rZXlzLmNvbHVtblNlcGFyYXRvckFyaWFMYWJlbCkoImFyaWEtZGVzY3JpYmVkYnkiLGQuZGVzY3JpcHRpb25JZCksZmUoMiksTnIoImlkIixkLmRlc2NyaXB0aW9uSWQpLGZlKCksSXIoIiAiLGQuY29tbW9uU3RyaW5nLmtleXMuY29sdW1uU2VwYXJhdG9yRGVz''@;'; put 'put ''Y3JpcHRpb24sIiAiKSl9LGRlcGVuZGVuY2llczpbWFhlXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxaOT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgX0h7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3N1cGVyKGgpLHRoaXMuZWw9YSx0aGlzLl9zb3J0PWQsdGhpcy52Y3I9Zix0aGlzLmRldGFp''@;'; put 'put ''bFNlcnZpY2U9dix0aGlzLmNoYW5nZURldGVjdG9yUmVmPU0sdGhpcy5zb3J0T3JkZXJDaGFuZ2U9bmV3IFhyLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2U9bmV3IFhyLHRoaXMuY3VzdG9tRmlsdGVyPSExLHRoaXMuX2NvbFR5cGU9InN0cmluZyIsdGhpcy5fc29ydE9yZGVyPV8yLlVOU09SVEVE''@;'; put 'put ''LHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLl9zaG93U2VwYXJhdG9yPSEwLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yU29ydGluZ0NoYW5nZXMoKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JEZXRhaWxQYW5lQ2hhbmdlcygpKX1nZXQg''@;'; put 'put ''aXNIaWRkZW4oKXtyZXR1cm4gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhwQSl9Z2V0IHNob3dTZXBhcmF0b3IoKXtyZXR1cm4gdGhpcy5fc2hvd1NlcGFyYXRvcn1zZXQgc2hvd1NlcGFyYXRvcihhKXt0aGlzLl9zaG93U2VwYXJhdG9yPWEsdGhpcy5jaGFuZ2VE''@;'; put 'put ''ZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1nZXQgY29sVHlwZSgpe3JldHVybiB0aGlzLl9jb2xUeXBlfXNldCBjb2xUeXBlKGEpe3RoaXMuX2NvbFR5cGU9YX1nZXQgZmllbGQoKXtyZXR1cm4gdGhpcy5fZmllbGR9c2V0IGZpZWxkKGEpeyJzdHJpbmciPT10eXBlb2YgYSYmKHRoaXMuX2Zp''@;'; put 'put ''ZWxkPWEsdGhpcy5fc29ydEJ5fHwodGhpcy5fc29ydEJ5PW5ldyBNSChhKSkpfWdldCBzb3J0QnkoKXtyZXR1cm4gdGhpcy5fc29ydEJ5fXNldCBzb3J0QnkoYSl7InN0cmluZyI9PXR5cGVvZiBhP3RoaXMuX3NvcnRCeT1uZXcgTUgoYSk6YT90aGlzLl9zb3J0Qnk9YTp0aGlzLmZpZWxkP3Ro''@;'; put 'put ''aXMuX3NvcnRCeT1uZXcgTUgodGhpcy5maWVsZCk6ZGVsZXRlIHRoaXMuX3NvcnRCeX1nZXQgc29ydE9yZGVyKCl7cmV0dXJuIHRoaXMuX3NvcnRPcmRlcn1zZXQgc29ydE9yZGVyKGEpe2lmKCEodHlwZW9mIGE+InUiKSYmdGhpcy5fc29ydE9yZGVyIT09YSlzd2l0Y2goYSl7Y2FzZSBfMi5B''@;'; put 'put ''U0M6dGhpcy5zb3J0KCExKTticmVhaztjYXNlIF8yLkRFU0M6dGhpcy5zb3J0KCEwKTticmVhaztkZWZhdWx0OnRoaXMuX3NvcnQuY2xlYXIoKX19c2V0IHVwZGF0ZUZpbHRlclZhbHVlKGEpe3RoaXMuZmlsdGVyP3RoaXMuZmlsdGVyIGluc3RhbmNlb2YgQjk/KCghYXx8InN0cmluZyIhPXR5''@;'; put 'put ''cGVvZiBhKSYmKGE9IiIpLGEhPT10aGlzLmZpbHRlci52YWx1ZSYmKHRoaXMuZmlsdGVyLnZhbHVlPWEpKTp0aGlzLmZpbHRlciBpbnN0YW5jZW9mIFY5JiYoKCFhfHwhKGEgaW5zdGFuY2VvZiBBcnJheSkpJiYoYT1bbnVsbCxudWxsXSksMj09PWEubGVuZ3RoJiYoYVswXSE9PXRoaXMuZmls''@;'; put 'put ''dGVyLnZhbHVlWzBdfHxhWzFdIT09dGhpcy5maWx0ZXIudmFsdWVbMV0pJiYodGhpcy5maWx0ZXIudmFsdWU9YSkpOnRoaXMuaW5pdEZpbHRlclZhbHVlPWF9c2V0IHByb2plY3RlZEZpbHRlcihhKXthJiYodGhpcy5kZWxldGVGaWx0ZXIoKSx0aGlzLmN1c3RvbUZpbHRlcj0hMCl9Z2V0IHNv''@;'; put 'put ''cnRhYmxlKCl7cmV0dXJuISF0aGlzLl9zb3J0Qnl9Z2V0IGFyaWFTb3J0KCl7c3dpdGNoKHRoaXMuX3NvcnRPcmRlcil7Y2FzZSBfMi5BU0M6cmV0dXJuImFzY2VuZGluZyI7Y2FzZSBfMi5ERVNDOnJldHVybiJkZXNjZW5kaW5nIjtkZWZhdWx0OnJldHVybiJub25lIn19Z2V0IHNvcnREaXJl''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gdGhpcy5fc29ydERpcmVjdGlvbn1nZXQgZmlsdGVyVmFsdWUoKXtyZXR1cm4gdGhpcy5maWx0ZXIgaW5zdGFuY2VvZiBCOXx8dGhpcy5maWx0ZXIgaW5zdGFuY2VvZiBWOT90aGlzLmZpbHRlci52YWx1ZTpudWxsfXNldCBmaWx0ZXJWYWx1ZShhKXsodGhpcy5maWx0''@;'; put 'put ''ZXIgaW5zdGFuY2VvZiBCOXx8dGhpcy5maWx0ZXIgaW5zdGFuY2VvZiBWOSkmJih0aGlzLnVwZGF0ZUZpbHRlclZhbHVlPWEsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KHRoaXMuZmlsdGVyLnZhbHVlKSl9Z2V0IF92aWV3KCl7cmV0dXJuIHRoaXMud3JhcHBlZEluamVjdG9yLmdldChq''@;'; put 'put ''WCx0aGlzLnZjcikuY29sdW1uVmlld31uZ09uSW5pdCgpe3RoaXMud3JhcHBlZEluamVjdG9yPW5ldyB1SChqWCx0aGlzLnZjcil9bmdPbkNoYW5nZXMoYSl7YS5jb2xUeXBlJiZhLmNvbFR5cGUuY3VycmVudFZhbHVlJiZhLmNvbFR5cGUuY3VycmVudFZhbHVlIT09YS5jb2xUeXBlLnByZXZp''@;'; put 'put ''b3VzVmFsdWUmJiF0aGlzLmN1c3RvbUZpbHRlciYmIXRoaXMuZmlsdGVyJiZ0aGlzLmNvbFR5cGUmJnRoaXMuZmllbGQmJnRoaXMuc2V0dXBEZWZhdWx0RmlsdGVyKHRoaXMuZmllbGQsdGhpcy5jb2xUeXBlKSxhLmZpZWxkJiZhLmZpZWxkLmN1cnJlbnRWYWx1ZSYmYS5maWVsZC5jdXJyZW50''@;'; put 'put ''VmFsdWUhPT1hLmZpZWxkLnByZXZpb3VzVmFsdWUmJiF0aGlzLmN1c3RvbUZpbHRlciYmdGhpcy5jb2xUeXBlJiZ0aGlzLnNldHVwRGVmYXVsdEZpbHRlcih0aGlzLmZpZWxkLHRoaXMuY29sVHlwZSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuc3Vic2NyaXB0aW9u''@;'; put 'put ''cy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c29ydChhKXt0aGlzLnNvcnRhYmxlJiYodGhpcy5fc29ydC50b2dnbGUodGhpcy5fc29ydEJ5LGEpLHRoaXMuX3NvcnRPcmRlcj10aGlzLl9zb3J0LnJldmVyc2U/XzIuREVTQzpfMi5BU0MsdGhpcy5fc29ydERpcmVjdGlvbj10aGlzLl9z''@;'; put 'put ''b3J0T3JkZXI9PT1fMi5ERVNDPyJkb3duIjoidXAiLHRoaXMuc29ydE9yZGVyQ2hhbmdlLmVtaXQodGhpcy5fc29ydE9yZGVyKSl9bGlzdGVuRm9yRGV0YWlsUGFuZUNoYW5nZXMoKXtyZXR1cm4gdGhpcy5kZXRhaWxTZXJ2aWNlLnN0YXRlQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5zaG93''@;'; put 'put ''U2VwYXJhdG9yIT09IWEmJih0aGlzLnNob3dTZXBhcmF0b3I9IWEpfSl9bGlzdGVuRm9yU29ydGluZ0NoYW5nZXMoKXtyZXR1cm4gdGhpcy5fc29ydC5jaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuc29ydE9yZGVyIT09XzIu''@;'; put 'put ''VU5TT1JURUQmJmEuY29tcGFyYXRvciE9PXRoaXMuX3NvcnRCeSYmKHRoaXMuX3NvcnRPcmRlcj1fMi5VTlNPUlRFRCx0aGlzLnNvcnRPcmRlckNoYW5nZS5lbWl0KHRoaXMuX3NvcnRPcmRlciksdGhpcy5fc29ydERpcmVjdGlvbj1udWxsKX0pfXNldHVwRGVmYXVsdEZpbHRlcihhLGQpeyJu''@;'; put 'put ''dW1iZXIiPT09ZD90aGlzLnNldEZpbHRlcihuZXcgVjkobmV3IENIKGEpKSk6InN0cmluZyI9PT1kJiZ0aGlzLnNldEZpbHRlcihuZXcgQjkobmV3IFNIKGEpKSksdGhpcy5maWx0ZXImJnRoaXMuaW5pdEZpbHRlclZhbHVlJiYodGhpcy51cGRhdGVGaWx0ZXJWYWx1ZT10aGlzLmluaXRGaWx0''@;'; put 'put ''ZXJWYWx1ZSxkZWxldGUgdGhpcy5pbml0RmlsdGVyVmFsdWUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShuYSkscWUoeEgpLHFlKHM1KSxxZShiZSkscWUoVTMpLHFlKEhzKSl9LGMuXHUwMjc1Y21wPWFyKHt0eXBlOmMsc2VsZWN0b3JzOltb''@;'; put 'put ''ImNsci1kZy1jb2x1bW4iXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmcG8oaCx5SCw1KSwyJmEpe2xldCBmO2dpKGY9bWkoKSkmJihkLnByb2plY3RlZEZpbHRlcj1mLmZpcnN0KX19LGhvc3RBdHRyczpbInJvbGUiLCJjb2x1bW5oZWFkZXIiXSxob3N0VmFyczoz''@;'; put 'put ''LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKE5yKCJhcmlhLXNvcnQiLGQuYXJpYVNvcnQpLHhyKCJkYXRhZ3JpZC1jb2x1bW4iLCEwKSl9LGlucHV0czp7ZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6WzAsImNsckZpbHRlclN0cmluZ1BsYWNlaG9sZGVyIiwiZmlsdGVyU3RyaW5n''@;'; put 'put ''UGxhY2Vob2xkZXIiXSxmaWx0ZXJOdW1iZXJNYXhQbGFjZWhvbGRlcjpbMCwiY2xyRmlsdGVyTnVtYmVyTWF4UGxhY2Vob2xkZXIiLCJmaWx0ZXJOdW1iZXJNYXhQbGFjZWhvbGRlciJdLGZpbHRlck51bWJlck1pblBsYWNlaG9sZGVyOlswLCJjbHJGaWx0ZXJOdW1iZXJNaW5QbGFjZWhvbGRl''@;'; put 'put ''ciIsImZpbHRlck51bWJlck1pblBsYWNlaG9sZGVyIl0sY29sVHlwZTpbMCwiY2xyRGdDb2xUeXBlIiwiY29sVHlwZSJdLGZpZWxkOlswLCJjbHJEZ0ZpZWxkIiwiZmllbGQiXSxzb3J0Qnk6WzAsImNsckRnU29ydEJ5Iiwic29ydEJ5Il0sc29ydE9yZGVyOlswLCJjbHJEZ1NvcnRPcmRlciIs''@;'; put 'put ''InNvcnRPcmRlciJdLHVwZGF0ZUZpbHRlclZhbHVlOlswLCJjbHJGaWx0ZXJWYWx1ZSIsInVwZGF0ZUZpbHRlclZhbHVlIl19LG91dHB1dHM6e3NvcnRPcmRlckNoYW5nZToiY2xyRGdTb3J0T3JkZXJDaGFuZ2UiLGZpbHRlclZhbHVlQ2hhbmdlOiJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSJ9LHN0''@;'; put 'put ''YW5kYWxvbmU6ITEsZmVhdHVyZXM6W3lmKFtuNV0pLExhLFdvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6ZFllLGRlY2xzOjksdmFyczo1LGNvbnN0czpbWyJjb2x1bW5UaXRsZSIsIiJdLFsxLCJkYXRhZ3JpZC1jb2x1bW4tZmxleCJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4tdGl0bGUiLCJ0''@;'; put 'put ''eXBlIiwiYnV0dG9uIiwzLCJjbGljayIsNCwibmdJZiJdLFszLCJjbHJGaWx0ZXJQbGFjZWhvbGRlciIsImNsckRnU3RyaW5nRmlsdGVyIiwiY2xyRmlsdGVyVmFsdWUiLCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsNCwibmdJZiJdLFszLCJjbHJGaWx0ZXJNYXhQbGFjZWhvbGRlciIsImNsckZp''@;'; put 'put ''bHRlck1pblBsYWNlaG9sZGVyIiwiY2xyRGdOdW1lcmljRmlsdGVyIiwiY2xyRmlsdGVyVmFsdWUiLCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4tdGl0bGUiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwi''@;'; put 'put ''ZGF0YWdyaWQtY29sdW1uLXRpdGxlIiwzLCJjbGljayJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0Il0sWyJzaGFwZSIsImFycm93IiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwiY2xhc3MiLCJzb3J0LWljb24iLDQsIm5nSWYiXSxbInNoYXBlIiwiYXJyb3ciLCJhcmlhLWhpZGRlbiIsInRydWUiLDEs''@;'; put 'put ''InNvcnQtaWNvbiJdLFszLCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsImNsckZpbHRlclBsYWNlaG9sZGVyIiwiY2xyRGdTdHJpbmdGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSJdLFszLCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsImNsckZpbHRlck1heFBsYWNlaG9sZGVyIiwiY2xyRmlsdGVyTWlu''@;'; put 'put ''UGxhY2Vob2xkZXIiLCJjbHJEZ051bWVyaWNGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSJdLFsxLCJkYXRhZ3JpZC1jb2x1bW4tdGl0bGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSh1WWUpLGRlKDAsImRpdiIsMSksZ3QoMSxwWWUsMywyLCJidXR0b24iLDIpLFdyKDIpLGd0''@;'; put 'put ''KDMsZ1llLDEsMywiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDMpKDQsbVllLDEsNCwiY2xyLWRnLW51bWVyaWMtZmlsdGVyIiw0KSg1LHZZZSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDAseGMpKDcsYlllLDIsMSwic3BhbiIsNSkoOCxfWWUsMSwwLCJjbHItZGctY29sdW1uLXNlcGFyYXRvciIs''@;'; put 'put ''NiksaGUoKSksMiZhJiYoZmUoKSxFZSgibmdJZiIsZC5zb3J0YWJsZSksZmUoMiksRWUoIm5nSWYiLGQuZmllbGQmJiFkLmN1c3RvbUZpbHRlciYmInN0cmluZyI9PWQuY29sVHlwZSksZmUoKSxFZSgibmdJZiIsZC5maWVsZCYmIWQuY3VzdG9tRmlsdGVyJiYibnVtYmVyIj09ZC5jb2xUeXBl''@;'; put 'put ''KSxmZSgzKSxFZSgibmdJZiIsIWQuc29ydGFibGUpLGZlKCksRWUoIm5nSWYiLGQuc2hvd1NlcGFyYXRvcikpfSxkZXBlbmRlbmNpZXM6W0NhLHlkLGZzLFgzZSxHM2UsU3ddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLGw1PSgoKT0+e2NsYXNzIGN7Y29uc3Ry''@;'; put 'put ''dWN0b3IoYSxkLGgpe3RoaXMuX2ZpbHRlcnM9YSx0aGlzLl9zb3J0PWQsdGhpcy5fcGFnZT1oLHRoaXMubG9hZGluZz0hMSx0aGlzLl9zbWFydD0hMSx0aGlzLl9kaXNwbGF5ZWQ9W10sdGhpcy5fY2hhbmdlPW5ldyB1cix0aGlzLl9hbGxDaGFuZ2VzPW5ldyB1cix0aGlzLnRyYWNrQnk9Zj0+''@;'; put 'put ''Zn1nZXQgc21hcnQoKXtyZXR1cm4gdGhpcy5fc21hcnR9Z2V0IGFsbCgpe3JldHVybiB0aGlzLl9hbGx9c2V0IGFsbChhKXt0aGlzLl9hbGw9YSx0aGlzLmVtaXRBbGxDaGFuZ2VzKGEpLHRoaXMuc21hcnQ/dGhpcy5fZmlsdGVySXRlbXMoKToodGhpcy5fZGlzcGxheWVkPWEsdGhpcy5lbWl0''@;'; put 'put ''Q2hhbmdlKCkpfWdldCBkaXNwbGF5ZWQoKXtyZXR1cm4gdGhpcy5fZGlzcGxheWVkfWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBhbGxDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2FsbENoYW5nZXMuYXNPYnNlcnZhYmxlKCl9Z2V0IHVuaW5pdGlh''@;'; put 'put ''bGl6ZWQoKXtyZXR1cm4hdGhpcy5fYWxsfWRlc3Ryb3koKXt0aGlzLl9maWx0ZXJzU3ViJiZ0aGlzLl9maWx0ZXJzU3ViLnVuc3Vic2NyaWJlKCksdGhpcy5fc29ydFN1YiYmdGhpcy5fc29ydFN1Yi51bnN1YnNjcmliZSgpLHRoaXMuX3BhZ2VTdWImJnRoaXMuX3BhZ2VTdWIudW5zdWJzY3Jp''@;'; put 'put ''YmUoKX1zbWFydGVuRG93bigpe3RoaXMuX3NtYXJ0PSExLHRoaXMuZGVzdHJveSgpfXNtYXJ0ZW5VcCgpe3RoaXMuX3NtYXJ0PSEwLHRoaXMuX2ZpbHRlcnNTdWI9dGhpcy5fZmlsdGVycy5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT50aGlzLl9maWx0ZXJJdGVtcygpKSx0aGlzLl9zb3J0U3ViPXRo''@;'; put 'put ''aXMuX3NvcnQuY2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMuX3NvcnQuY29tcGFyYXRvcj90aGlzLl9zb3J0SXRlbXMoKTp0aGlzLl9maWx0ZXJJdGVtcygpfSksdGhpcy5fcGFnZVN1Yj10aGlzLl9wYWdlLmNoYW5nZS5zdWJzY3JpYmUoKCk9PnRoaXMuX2NoYW5nZVBhZ2UoKSl9cmVmcmVz''@;'; put 'put ''aCgpe3RoaXMuc21hcnQmJnRoaXMuX2ZpbHRlckl0ZW1zKCl9ZW1pdENoYW5nZSgpe3RoaXMuX2NoYW5nZS5uZXh0KHRoaXMuZGlzcGxheWVkKX1lbWl0QWxsQ2hhbmdlcyhhKXt0aGlzLl9hbGxDaGFuZ2VzLm5leHQoYSl9X2ZpbHRlckl0ZW1zKCl7dGhpcy51bmluaXRpYWxpemVkfHwodGhp''@;'; put 'put ''cy5fZmlsdGVyZWQ9dGhpcy5fZmlsdGVycy5oYXNBY3RpdmVGaWx0ZXJzKCk/dGhpcy5fYWxsLmZpbHRlcihhPT50aGlzLl9maWx0ZXJzLmFjY2VwdHMoYSkpOnRoaXMuX2FsbC5zbGljZSgpLHRoaXMuX3BhZ2UudG90YWxJdGVtcz10aGlzLl9maWx0ZXJlZC5sZW5ndGgsdGhpcy5fc29ydEl0''@;'; put 'put ''ZW1zKCkpfV9zb3J0SXRlbXMoKXt0aGlzLnVuaW5pdGlhbGl6ZWR8fCh0aGlzLl9zb3J0LmNvbXBhcmF0b3ImJnRoaXMuX2ZpbHRlcmVkLnNvcnQoKGEsZCk9PnRoaXMuX3NvcnQuY29tcGFyZShhLGQpKSx0aGlzLl9jaGFuZ2VQYWdlKCkpfV9jaGFuZ2VQYWdlKCl7dGhpcy51bmluaXRpYWxp''@;'; put 'put ''emVkfHx0aGlzLl9wYWdlLmFjdGl2YXRlZCYmMD09PXRoaXMuX3BhZ2Uuc2l6ZXx8KHRoaXMuX2Rpc3BsYXllZD10aGlzLl9wYWdlLnNpemU+MD90aGlzLl9maWx0ZXJlZC5zbGljZSh0aGlzLl9wYWdlLmZpcnN0SXRlbSx0aGlzLl9wYWdlLmxhc3RJdGVtKzEpOnRoaXMuX2ZpbHRlcmVkLHRo''@;'; put 'put ''aXMuZW1pdENoYW5nZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoSHIoczUpLEhyKHhIKSxIcihtNikpfSxjLlx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFR3PSgoKT0+e2NsYXNzIGN7Y29uc3Ry''@;'; put 'put ''dWN0b3IoYSxkLGgsZil7dGhpcy50ZW1wbGF0ZT1hLHRoaXMuZGlmZmVycz1kLHRoaXMuaXRlbXM9aCx0aGlzLmRpZmZlcj1udWxsLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSxoLnNtYXJ0ZW5VcCgpLHRoaXMuaXRlcmFibGVQcm94eT1uZXcgaHMoZixhLGQpLHRoaXMuc3Vic2NyaXB0aW9ucy5w''@;'; put 'put ''dXNoKGguY2hhbmdlLnN1YnNjcmliZSh2PT57dGhpcy5pdGVyYWJsZVByb3h5Lm5nRm9yT2Y9dix0aGlzLml0ZXJhYmxlUHJveHkubmdEb0NoZWNrKCl9KSl9c2V0IHJhd0l0ZW1zKGEpe3RoaXMuX3Jhd0l0ZW1zPWF8fFtdfXNldCB0cmFja0J5KGEpe3RoaXMuaXRlcmFibGVQcm94eS5uZ0Zv''@;'; put 'put ''clRyYWNrQnk9YX1zdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZChhLGQpe3JldHVybiEwfW5nRG9DaGVjaygpe3RoaXMuZGlmZmVyfHwodGhpcy5kaWZmZXI9dGhpcy5kaWZmZXJzLmZpbmQodGhpcy5fcmF3SXRlbXMpLmNyZWF0ZSh0aGlzLml0ZXJhYmxlUHJveHkubmdGb3JUcmFja0J5''@;'; put 'put ''KSksdGhpcy5kaWZmZXImJnRoaXMuZGlmZmVyLmRpZmYodGhpcy5fcmF3SXRlbXMpJiYodGhpcy5pdGVtcy5hbGw9dGhpcy5fcmF3SXRlbXMpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1''@;'; put 'put ''bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoSWwpLHFlKCRtKSxxZShsNSkscWUoYmUpKX0sYy5cdTAyNzVkaXI9WXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRGdJdGVtcyIsIiIsImNsckRnSXRlbXNPZiIsIiJdXSxpbnB1dHM6e3Jhd0l0ZW1zOlswLCJjbHJEZ0l0ZW1zT2Yi''@;'; put 'put ''LCJyYXdJdGVtcyJdLHRyYWNrQnk6WzAsImNsckRnSXRlbXNUcmFja0J5IiwidHJhY2tCeSJdfSxzdGFuZGFsb25lOiExfSksY30pKCksWlg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLml0ZW1zPWF9Z2V0IGVtcHR5RGF0YWdyaWQoKXtyZXR1cm4hKHRoaXMuaXRlbXMubG9h''@;'; put 'put ''ZGluZ3x8dGhpcy5pdGVtcy5kaXNwbGF5ZWQmJjAhPT10aGlzLml0ZW1zLmRpc3BsYXllZC5sZW5ndGgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShsNSkpfSxjLlx1MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctcGxh''@;'; put 'put ''Y2Vob2xkZXIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJnhyKCJkYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250YWluZXIiLCEwKX0sc3RhbmRhbG9uZTohMSxuZ0NvbnRlbnRTZWxlY3RvcnM6VG8sZGVjbHM6NCx2YXJzOjQsY29uc3RzOltbMSwiZGF0YWdy''@;'; put 'put ''aWQtcGxhY2Vob2xkZXIiXSxbImNsYXNzIiwiZGF0YWdyaWQtcGxhY2Vob2xkZXItaW1hZ2UiLDQsIm5nSWYiXSxbMSwiZGF0YWdyaWQtcGxhY2Vob2xkZXItY29udGVudCJdLFs0LCJuZ0lmIl0sWzEsImRhdGFncmlkLXBsYWNlaG9sZGVyLWltYWdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEs''@;'; put 'put ''ZCl7MSZhJiYoc2EoKSxkZSgwLCJkaXYiLDApLGd0KDEsd1llLDEsMCwiZGl2IiwxKSxkZSgyLCJzcGFuIiwyKSxndCgzLENZZSwxLDAsIm5nLWNvbnRlbnQiLDMpLGhlKCkoKSksMiZhJiYoeHIoImRhdGFncmlkLWVtcHR5IixkLmVtcHR5RGF0YWdyaWQpLGZlKCksRWUoIm5nSWYiLGQuZW1w''@;'; put 'put ''dHlEYXRhZ3JpZCksZmUoMiksRWUoIm5nSWYiLGQuZW1wdHlEYXRhZ3JpZCkpfSxkZXBlbmRlbmNpZXM6W0NhXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxXWD0oKCk9PntjbGFzcyBje25nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuY2VsbFZpZXc9dGhpcy50ZW1wbGF0ZVJlZi5jcmVhdGVFbWJl''@;'; put 'put ''ZGRlZFZpZXcobnVsbCl9bmdPbkRlc3Ryb3koKXt0aGlzLmNlbGxWaWV3LmRlc3Ryb3koKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPWFyKHt0eXBlOmMsc2VsZWN0b3JzOltbImRnLXdyYXBwZWQtY2VsbCJdXSx2aWV3UXVl''@;'; put 'put ''cnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlVhKFNZZSw1KSwyJmEpe2xldCBoO2dpKGg9bWkoKSkmJihkLnRlbXBsYXRlUmVmPWguZmlyc3QpfX0sc3RhbmRhbG9uZTohMSxuZ0NvbnRlbnRTZWxlY3RvcnM6VG8sZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbImNlbGxQb3J0YWwiLCIiXV0sdGVt''@;'; put 'put ''cGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLGd0KDAsTVllLDEsMCwibmctdGVtcGxhdGUiLG51bGwsMCx4YykpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxXMz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMudmNyPWF9Z2V0IF92aWV3KCl7cmV0dXJuIHRoaXMud3Jh''@;'; put 'put ''cHBlZEluamVjdG9yLmdldChXWCx0aGlzLnZjcikuY2VsbFZpZXd9bmdPbkluaXQoKXt0aGlzLndyYXBwZWRJbmplY3Rvcj1uZXcgdUgoV1gsdGhpcy52Y3IpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShiZSkpfSxjLlx1MDI3NWNtcD1hcih7''@;'; put 'put ''dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctY2VsbCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZwbyhoLGNILDQpLDImYSl7bGV0IGY7Z2koZj1taSgpKSYmKGQuc2lnbnBvc3Q9Zil9fSxob3N0QXR0cnM6WyJyb2xlIiwiZ3JpZGNlbGwiXSxob3N0VmFyczo0''@;'; put 'put ''LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmeHIoImRhdGFncmlkLWNlbGwiLCEwKSgiZGF0YWdyaWQtc2lnbnBvc3QtdHJpZ2dlciIsZC5zaWducG9zdC5sZW5ndGg+MCl9LHN0YW5kYWxvbmU6ITEsbmdDb250ZW50U2VsZWN0b3JzOlRvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRl''@;'; put 'put ''OmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxXcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHEzZT0wLGdBPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBTZHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5leHBhbmRhYmxlSWQ9IiIsdGhpcy5fcmVwbGFjZT1uZXcgTWkoITEpLHRoaXMu''@;'; put 'put ''X2FuaW1hdGU9bmV3IHVyLHEzZSsrLHRoaXMuZXhwYW5kYWJsZUlkPSJjbHItZGctZXhwYW5kYWJsZS1yb3ctIitxM2V9Z2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuX2V4cGFuZGVkfXNldCBleHBhbmRlZChhKXsoYT0hIWEpIT09dGhpcy5fZXhwYW5kZWQmJih0aGlzLl9leHBhbmRlZD1h''@;'; put 'put ''LHRoaXMuX2FuaW1hdGUubmV4dCgpLHRoaXMuX2V4cGFuZENoYW5nZS5uZXh0KGEpKX1nZXQgcmVwbGFjZSgpe3JldHVybiB0aGlzLl9yZXBsYWNlLmFzT2JzZXJ2YWJsZSgpfWdldCBhbmltYXRlKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGUuYXNPYnNlcnZhYmxlKCl9bG9hZGluZ1N0YXRlQ2hh''@;'; put 'put ''bmdlKGEpe3N1cGVyLmxvYWRpbmdTdGF0ZUNoYW5nZShhKSxhIT09Q2QuTE9BRElORyYmdGhpcy5fYW5pbWF0ZS5uZXh0KCl9c2V0UmVwbGFjZShhKXt0aGlzLl9yZXBsYWNlLm5leHQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3''@;'; put 'put ''NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO3ZhciBBdz1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkRJU1BMQVk9MF09IkRJU1BMQVkiLGNbYy5DQUxDVUxBVEU9MV09IkNBTENVTEFURSIsY30oQXd8fHt9KSxTbD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5v''@;'; put 'put ''bmU9MF09Ik5vbmUiLGNbYy5TaW5nbGU9MV09IlNpbmdsZSIsY1tjLk11bHRpPTJdPSJNdWx0aSIsY30oU2x8fHt9KTtsZXQgWVg9KCgpPT57Y2xhc3MgY3tuZ0FmdGVyVmlld0luaXQoKXt0aGlzLnJvd1ZpZXc9dGhpcy50ZW1wbGF0ZVJlZi5jcmVhdGVFbWJlZGRlZFZpZXcobnVsbCl9bmdP''@;'; put 'put ''bkRlc3Ryb3koKXt0aGlzLnJvd1ZpZXcuZGVzdHJveSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siZGctd3JhcHBlZC1yb3ciXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYo''@;'; put 'put ''MSZhJiZVYSh4WWUsNSksMiZhKXtsZXQgaDtnaShoPW1pKCkpJiYoZC50ZW1wbGF0ZVJlZj1oLmZpcnN0KX19LHN0YW5kYWxvbmU6ITEsbmdDb250ZW50U2VsZWN0b3JzOlRvLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJyb3dQb3J0YWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsx''@;'; put 'put ''JmEmJihzYSgpLGd0KDAsRVllLDEsMCwibmctdGVtcGxhdGUiLG51bGwsMCx4YykpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxpcWU9MCxrdz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5faXRlbXM9YSx0aGlzLnByZXNlcnZlU2VsZWN0aW9uPSExLHRoaXMuc2hpZnRQ''@;'; put 'put ''cmVzc2VkPSExLHRoaXMucm93U2VsZWN0aW9uTW9kZT0hMSx0aGlzLnByZXZTZWxlY3Rpb25SZWZzPVtdLHRoaXMubG9ja2VkUmVmcz1bXSx0aGlzLnZhbHVlQ29sbGVjdG9yPW5ldyB1cix0aGlzLl9zZWxlY3Rpb25UeXBlPVNsLk5vbmUsdGhpcy5fY2hhbmdlPW5ldyB1cix0aGlzLnN1YnNj''@;'; put 'put ''cmlwdGlvbnM9W10sdGhpcy5pZD0iY2xyLWRnLXNlbGVjdGlvbiIraXFlKyssdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZC5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT57IXRoaXMuX3NlbGVjdGFibGV8fHRoaXMucHJlc2VydmVTZWxlY3Rpb258fHRoaXMuY2xlYXJTZWxlY3Rpb24oKX0pKSx0aGlz''@;'; put 'put ''LnN1YnNjcmlwdGlvbnMucHVzaChhLmFsbENoYW5nZXMuc3Vic2NyaWJlKGg9Pntjb25zdCBmPVtdO3N3aXRjaCh0aGlzLnNlbGVjdGlvblR5cGUpe2Nhc2UgU2wuTm9uZTpicmVhaztjYXNlIFNsLlNpbmdsZTp7bGV0IHYsTT0hMTt0aGlzLmN1cnJlbnRTaW5nbGUmJiF0aGlzLnByZXZTaW5n''@;'; put 'put ''bGVTZWxlY3Rpb25SZWYmJih0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9YS50cmFja0J5KHRoaXMuY3VycmVudFNpbmdsZSkpLGguZm9yRWFjaChEPT57Y29uc3QgVT1hLnRyYWNrQnkoRCk7dGhpcy5wcmV2U2luZ2xlU2VsZWN0aW9uUmVmPT09VSYmKHY9RCxNPSEwKSx0aGlzLmxvY2tl''@;'; put 'put ''ZFJlZnMuaW5kZXhPZihVKT4tMSYmZi5wdXNoKFUpfSksYS5zbWFydCYmIXYmJihNPSEwKSxzZXRUaW1lb3V0KCgpPT57TSYmKHRoaXMuY3VycmVudFNpbmdsZT12KX0sMCk7YnJlYWt9Y2FzZSBTbC5NdWx0aTp7bGV0IHY9dGhpcy5jdXJyZW50LnNsaWNlKCksTT0hMTt0aGlzLmN1cnJlbnQu''@;'; put 'put ''bGVuZ3RoPjAmJnRoaXMucHJldlNlbGVjdGlvblJlZnMubGVuZ3RoIT09dGhpcy5jdXJyZW50Lmxlbmd0aCYmKHRoaXMucHJldlNlbGVjdGlvblJlZnM9W10sdGhpcy5jdXJyZW50LmZvckVhY2goRD0+e3RoaXMucHJldlNlbGVjdGlvblJlZnMucHVzaChhLnRyYWNrQnkoRCkpfSkpLGguZm9y''@;'; put 'put ''RWFjaChEPT57Y29uc3QgVT1hLnRyYWNrQnkoRCk7dGhpcy5sb2NrZWRSZWZzLmluZGV4T2YoVSk+LTEmJmYucHVzaChVKX0pLHYubGVuZ3RoPjAmJihoLmZvckVhY2goRD0+e2NvbnN0IFU9YS50cmFja0J5KEQpLHRlPXRoaXMucHJldlNlbGVjdGlvblJlZnMuaW5kZXhPZihVKTt0ZT4tMSYm''@;'; put 'put ''KHZbdGVdPUQsTT0hMCl9KSxhLnNtYXJ0JiYodj12LmZpbHRlcihEPT5oLmluZGV4T2YoRCk+LTEpLHRoaXMuY3VycmVudC5sZW5ndGghPT12Lmxlbmd0aCYmKE09ITApKSxzZXRUaW1lb3V0KCgpPT57TSYmKHRoaXMuY3VycmVudD12KX0sMCkpO2JyZWFrfX10aGlzLmxvY2tlZFJlZnM9Zn0p''@;'; put 'put ''KSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnZhbHVlQ29sbGVjdG9yLnBpcGUoXzkoMCkpLnN1YnNjcmliZSgoKT0+dGhpcy5lbWl0Q2hhbmdlKCkpKX1nZXQgc2VsZWN0aW9uVHlwZSgpe3JldHVybiB0aGlzLl9zZWxlY3Rpb25UeXBlfXNldCBzZWxlY3Rpb25UeXBlKGEpe2EhPT10''@;'; put 'put ''aGlzLnNlbGVjdGlvblR5cGUmJih0aGlzLl9zZWxlY3Rpb25UeXBlPWEsYT09PVNsLk5vbmU/ZGVsZXRlIHRoaXMuY3VycmVudDp0aGlzLnVwZGF0ZUN1cnJlbnQoW10sITEpKX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KGEpe3RoaXMudXBkYXRlQ3Vy''@;'; put 'put ''cmVudChhLCEwKX1nZXQgY3VycmVudFNpbmdsZSgpe3JldHVybiB0aGlzLl9jdXJyZW50U2luZ2xlfXNldCBjdXJyZW50U2luZ2xlKGEpe2EhPT10aGlzLl9jdXJyZW50U2luZ2xlJiYodGhpcy5fY3VycmVudFNpbmdsZT1hLGEmJih0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9dGhpcy5f''@;'; put 'put ''aXRlbXMudHJhY2tCeShhKSksdGhpcy5lbWl0Q2hhbmdlKCkpfWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBfc2VsZWN0YWJsZSgpe3JldHVybiB0aGlzLl9zZWxlY3Rpb25UeXBlPT09U2wuTXVsdGl8fHRoaXMuX3NlbGVjdGlvblR5cGU9PT1T''@;'; put 'put ''bC5TaW5nbGV9Y2xlYXJTZWxlY3Rpb24oKXt0aGlzLl9jdXJyZW50PVtdLHRoaXMucHJldlNlbGVjdGlvblJlZnM9W10sdGhpcy5wcmV2U2luZ2xlU2VsZWN0aW9uUmVmPW51bGwsdGhpcy5fY3VycmVudFNpbmdsZT1udWxsLHRoaXMuZW1pdENoYW5nZSgpfWRlc3Ryb3koKXt0aGlzLnN1YnNj''@;'; put 'put ''cmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXVwZGF0ZUN1cnJlbnQoYSxkKXt0aGlzLl9jdXJyZW50PWEsZCYmdGhpcy52YWx1ZUNvbGxlY3Rvci5uZXh0KGEpfWlzU2VsZWN0ZWQoYSl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvblR5cGU9PT1TbC5TaW5nbGU/dGhpcy5jdXJy''@;'; put 'put ''ZW50U2luZ2xlPT09YTp0aGlzLl9zZWxlY3Rpb25UeXBlPT09U2wuTXVsdGkmJnRoaXMuY3VycmVudC5pbmRleE9mKGEpPj0wfXNldFNlbGVjdGVkKGEsZCl7Y29uc3QgaD10aGlzLmN1cnJlbnQ/dGhpcy5jdXJyZW50LmluZGV4T2YoYSk6LTE7c3dpdGNoKHRoaXMuX3NlbGVjdGlvblR5cGUp''@;'; put 'put ''e2Nhc2UgU2wuTm9uZTpjYXNlIFNsLlNpbmdsZTpicmVhaztjYXNlIFNsLk11bHRpOmg+PTAmJiFkP3RoaXMuZGVzZWxlY3RJdGVtKGgpOmg8MCYmZCYmdGhpcy5zZWxlY3RJdGVtKGEpfX1pc0FsbFNlbGVjdGVkKCl7aWYodGhpcy5fc2VsZWN0aW9uVHlwZSE9PVNsLk11bHRpfHwhdGhpcy5f''@;'; put 'put ''aXRlbXMuZGlzcGxheWVkKXJldHVybiExO2NvbnN0IGE9dGhpcy5faXRlbXMuZGlzcGxheWVkLmZpbHRlcihmPT4hMT09PXRoaXMuaXNMb2NrZWQoZikpO3JldHVybiEoYS5sZW5ndGg8MSkmJmEuZmlsdGVyKGY9PnRoaXMuY3VycmVudC5pbmRleE9mKGYpPi0xKS5sZW5ndGg9PT1hLmxlbmd0''@;'; put 'put ''aH1sb2NrSXRlbShhLGQpe2lmKHRoaXMuY2FuSXRCZUxvY2tlZCgpKXtjb25zdCBoPXRoaXMuX2l0ZW1zLnRyYWNrQnkoYSk7ITA9PT1kP3RoaXMubG9ja2VkUmVmcy5wdXNoKGgpOnRoaXMubG9ja2VkUmVmcz10aGlzLmxvY2tlZFJlZnMuZmlsdGVyKGY9PmghPT1mKX19aXNMb2NrZWQoYSl7''@;'; put 'put ''aWYodGhpcy5jYW5JdEJlTG9ja2VkKCkpe2NvbnN0IGQ9dGhpcy5faXRlbXMudHJhY2tCeShhKTtyZXR1cm4gdGhpcy5sb2NrZWRSZWZzLmluZGV4T2YoZCk+LTF9cmV0dXJuITF9dG9nZ2xlQWxsKCl7dGhpcy5fc2VsZWN0aW9uVHlwZT09PVNsLk5vbmV8fHRoaXMuX3NlbGVjdGlvblR5cGU9''@;'; put 'put ''PT1TbC5TaW5nbGV8fCh0aGlzLmlzQWxsU2VsZWN0ZWQoKT90aGlzLl9pdGVtcy5kaXNwbGF5ZWQuZm9yRWFjaChhPT57Y29uc3QgZD10aGlzLmN1cnJlbnQuaW5kZXhPZihhKTtkPi0xJiYhMT09PXRoaXMuaXNMb2NrZWQoYSkmJnRoaXMuZGVzZWxlY3RJdGVtKGQpfSk6dGhpcy5faXRlbXMu''@;'; put 'put ''ZGlzcGxheWVkLmZvckVhY2goYT0+e3RoaXMuY3VycmVudC5pbmRleE9mKGEpPDAmJiExPT09dGhpcy5pc0xvY2tlZChhKSYmdGhpcy5zZWxlY3RJdGVtKGEpfSkpfXNlbGVjdEl0ZW0oYSl7dGhpcy5jdXJyZW50PXRoaXMuY3VycmVudC5jb25jYXQoYSksdGhpcy5wcmV2U2VsZWN0aW9uUmVm''@;'; put 'put ''cy5wdXNoKHRoaXMuX2l0ZW1zLnRyYWNrQnkoYSkpfWRlc2VsZWN0SXRlbShhKXtpZih0aGlzLmN1cnJlbnQ9dGhpcy5jdXJyZW50LnNsaWNlKDAsYSkuY29uY2F0KHRoaXMuY3VycmVudC5zbGljZShhKzEpKSxhPHRoaXMucHJldlNlbGVjdGlvblJlZnMubGVuZ3RoKXtjb25zdCBkPXRoaXMu''@;'; put 'put ''cHJldlNlbGVjdGlvblJlZnMuc3BsaWNlKGEsMSk7dGhpcy5sb2NrZWRSZWZzPXRoaXMubG9ja2VkUmVmcy5maWx0ZXIoaD0+aCE9PWRbMF0pfX1jYW5JdEJlTG9ja2VkKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvblR5cGUhPT1TbC5Ob25lfWVtaXRDaGFuZ2UoKXt0aGlzLl9zZWxlY3Rpb25U''@;'; put 'put ''eXBlPT09U2wuU2luZ2xlP3RoaXMuX2NoYW5nZS5uZXh0KHRoaXMuY3VycmVudFNpbmdsZSk6dGhpcy5fc2VsZWN0aW9uVHlwZT09PVNsLk11bHRpJiZ0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLmN1cnJlbnQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj''@;'; put 'put ''KShIcihsNSksSHIoczUpKX0sYy5cdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxHWD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX3ZpZXc9bmV3IE1pKEF3LkRJU1BMQVkpLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNj''@;'; put 'put ''cmlwdGlvbnMucHVzaChhLmZpbHRlclJlbmRlclN0ZXBzKFozLkNBTENVTEFURV9NT0RFX09OKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3ZpZXcubmV4dChBdy5DQUxDVUxBVEUpKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goYS5maWx0ZXJSZW5kZXJTdGVwcyhaMy5DQUxDVUxBVEVfTU9ERV9P''@;'; put 'put ''RkYpLnN1YnNjcmliZSgoKT0+dGhpcy5fdmlldy5uZXh0KEF3LkRJU1BMQVkpKSl9Z2V0IHZpZXcoKXtyZXR1cm4gdGhpcy5fdmlldy5hc09ic2VydmFibGUoKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9fXJldHVybiBjLlx1''@;'; put 'put ''MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEhyKFU5KSl9LGMuXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksJFg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnNlbGVjdGlvbj1hfW9uU2VsZWN0aW9uQ2VsbENs''@;'; put 'put ''aWNrKGEpe3RoaXMuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1vZGV8fCJMQUJFTCIhPT1hLnRhcmdldC50YWdOYW1lJiYiSU5QVVQiIT09YS50YXJnZXQudGFnTmFtZSYmYS50YXJnZXQucXVlcnlTZWxlY3RvcigiaW5wdXQiKT8uY2xpY2soKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGEpe3JldHVybiBuZXcoYXx8YykocWUoa3cpKX0sYy5cdTAyNzVkaXI9WXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiw4LCJkYXRhZ3JpZC1zZWxlY3QiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZPdCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uU2VsZWN0aW9u''@;'; put 'put ''Q2VsbENsaWNrKGYpfSl9LHN0YW5kYWxvbmU6ITF9KSxjfSkoKSxiND0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmVsPWEsdGhpcy5yZW5kZXJlcj1kLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChoLmZpbHRlclJlbmRlclN0ZXBz''@;'; put 'put ''KFozLkNMRUFSX1dJRFRIUykuc3Vic2NyaWJlKCgpPT50aGlzLmNsZWFyV2lkdGgoKSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKSx0aGlzLnN0YXRlU3Vic2NyaXB0aW9uJiZ0aGlzLnN0YXRlU3Vic2NyaXB0aW9uLnVuc3Vi''@;'; put 'put ''c2NyaWJlKCl9cmVzZXRTdGF0ZShhKXt0aGlzLnNldFdpZHRoKGEpLHRoaXMuc2V0SGlkZGVuKGEpfXNldFdpZHRoKGEpe2Euc3RyaWN0V2lkdGg/dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsRXcpOnRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5l''@;'; put 'put ''bC5uYXRpdmVFbGVtZW50LEV3KSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwid2lkdGgiLGEud2lkdGgrInB4Iil9c2V0SGlkZGVuKGEpe2EuaGlkZGVuP3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LHBBKTp0aGlzLnJl''@;'; put 'put ''bmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxwQSl9Y2xlYXJXaWR0aCgpe3RoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LEV3KSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwid2lkdGgiLG51''@;'; put 'put ''bGwpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShuYSkscWUoTm8pLHFlKFU5KSl9LGMuXHUwMjc1ZGlyPVlyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jZWxsIl1dLHN0YW5kYWxvbmU6ITF9KSxjfSkoKSxFSD0wLHk2PSgoKT0+e2Ns''@;'; put 'put ''YXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxVLHRlLG9lLHZlLHdlKXt0aGlzLnNlbGVjdGlvbj1hLHRoaXMucm93QWN0aW9uU2VydmljZT1kLHRoaXMuZ2xvYmFsRXhwYW5kYWJsZT1oLHRoaXMuZXhwYW5kPWYsdGhpcy5kZXRhaWxTZXJ2aWNlPXYsdGhpcy5kaXNwbGF5TW9kZT1N''@;'; put 'put ''LHRoaXMudmNyPUQsdGhpcy5jb21tb25TdHJpbmdzPW9lLHRoaXMuaXRlbXM9dmUsdGhpcy5kb2N1bWVudD13ZSx0aGlzLnNlbGVjdGVkQ2hhbmdlZD1uZXcgWHIoITEpLHRoaXMuZXhwYW5kZWRDaGFuZ2U9bmV3IFhyKCExKSx0aGlzLmRldGFpbERpc2FibGVkPSExLHRoaXMuZGV0YWlsSGlk''@;'; put 'put ''ZGVuPSExLHRoaXMuc2tlbGV0b25Mb2FkaW5nPSExLHRoaXMuZGlzcGxheUNlbGxzPSExLHRoaXMuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlcj0hMSx0aGlzLlNFTEVDVElPTl9UWVBFPVNsLHRoaXMuaXRlbUNoYW5nZXM9bmV3IEZUKDEpLHRoaXMuX3NlbGVjdGVkPSExLHRoaXMuX2RldGFpbE9w''@;'; put 'put ''ZW5MYWJlbD0iIix0aGlzLl9kZXRhaWxDbG9zZUxhYmVsPSIiLHRoaXMuX3Jvd1NlbGVjdGlvbkxhYmVsPSIiLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLl9zZWxlY3RhYmxlPSEwLEVIKyssdGhpcy5pZD0iY2xyLWRnLXJvdyIrRUgsdGhpcy5yYWRpb0lkPSJjbHItZGctcm93LXJkIitF''@;'; put 'put ''SCx0aGlzLmNoZWNrYm94SWQ9ImNsci1kZy1yb3ctY2IiK0VILHRoaXMuZXhwYW5kYWJsZUlkPWYuZXhwYW5kYWJsZUlkLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGk5KGYucmVwbGFjZSxmLmV4cGFuZENoYW5nZSkuc3Vic2NyaWJlKChbRmUsV2VdKT0+e0ZlJiZXZT8odGhpcy5yZXBsYWNl''@;'; put 'put ''ZD0hMCxVLmFkZENsYXNzKHRlLm5hdGl2ZUVsZW1lbnQsImRhdGFncmlkLXJvdy1yZXBsYWNlZCIpKToodGhpcy5yZXBsYWNlZD0hMSxVLnJlbW92ZUNsYXNzKHRlLm5hdGl2ZUVsZW1lbnQsImRhdGFncmlkLXJvdy1yZXBsYWNlZCIpKX0pKX1nZXQgaXRlbSgpe3JldHVybiB0aGlzLl9pdGVt''@;'; put 'put ''fXNldCBpdGVtKGEpe3RoaXMuX2l0ZW09YSx0aGlzLml0ZW1DaGFuZ2VzLm5leHQoYSksdGhpcy5jbHJEZ1NlbGVjdGFibGU9dGhpcy5fc2VsZWN0YWJsZX1nZXQgY2xyRGdTZWxlY3RhYmxlKCl7cmV0dXJuIXRoaXMuc2VsZWN0aW9uLmlzTG9ja2VkKHRoaXMuaXRlbSl9c2V0IGNsckRnU2Vs''@;'; put 'put ''ZWN0YWJsZShhKXt0aGlzLml0ZW0mJnRoaXMuc2VsZWN0aW9uLmxvY2tJdGVtKHRoaXMuaXRlbSwiZmFsc2UiPT09YXx8ITE9PT1hKSx0aGlzLl9zZWxlY3RhYmxlPWF9Z2V0IHNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1TbC5Ob25lP3RoaXMuX3Nl''@;'; put 'put ''bGVjdGVkOnRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWQodGhpcy5pdGVtKX1zZXQgc2VsZWN0ZWQoYSl7dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PVNsLk5vbmU/dGhpcy5fc2VsZWN0ZWQ9YTooYSYmdGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PVNsLk11bHRpP3RoaXMu''@;'; put 'put ''cmFuZ2VTZWxlY3QoKTp0aGlzLnNlbGVjdGlvbi5yYW5nZVN0YXJ0PW51bGwsdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0ZWQodGhpcy5pdGVtLGEpKX1nZXQgZXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5leHBhbmQuZXhwYW5kZWR9c2V0IGV4cGFuZGVkKGEpe3RoaXMuZXhwYW5kLmV4cGFuZGVk''@;'; put 'put ''PWF9Z2V0IGNsckRnRGV0YWlsT3BlbkxhYmVsKCl7cmV0dXJuIHRoaXMuX2RldGFpbE9wZW5MYWJlbD90aGlzLl9kZXRhaWxPcGVuTGFiZWw6dGhpcy5jb21tb25TdHJpbmdzLmtleXMub3Blbn1zZXQgY2xyRGdEZXRhaWxPcGVuTGFiZWwoYSl7dGhpcy5fZGV0YWlsT3BlbkxhYmVsPWF9Z2V0''@;'; put 'put ''IGNsckRnRGV0YWlsQ2xvc2VMYWJlbCgpe3JldHVybiB0aGlzLl9kZXRhaWxDbG9zZUxhYmVsP3RoaXMuX2RldGFpbENsb3NlTGFiZWw6dGhpcy5jb21tb25TdHJpbmdzLmtleXMuY2xvc2V9c2V0IGNsckRnRGV0YWlsQ2xvc2VMYWJlbChhKXt0aGlzLl9kZXRhaWxDbG9zZUxhYmVsPWF9Z2V0''@;'; put 'put ''IGNsckRnUm93U2VsZWN0aW9uTGFiZWwoKXtyZXR1cm4gdGhpcy5fcm93U2VsZWN0aW9uTGFiZWw/dGhpcy5fcm93U2VsZWN0aW9uTGFiZWw6dGhpcy5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0fXNldCBjbHJEZ1Jvd1NlbGVjdGlvbkxhYmVsKGEpe3RoaXMuX3Jvd1NlbGVjdGlvbkxhYmVs''@;'; put 'put ''PWF9Z2V0IF92aWV3KCl7cmV0dXJuIHRoaXMud3JhcHBlZEluamVjdG9yLmdldChZWCx0aGlzLnZjcikucm93Vmlld31uZ09uSW5pdCgpe3RoaXMud3JhcHBlZEluamVjdG9yPW5ldyB1SChZWCx0aGlzLnZjciksdGhpcy5zZWxlY3Rpb24ubG9ja0l0ZW0odGhpcy5pdGVtLCExPT09dGhpcy5j''@;'; put 'put ''bHJEZ1NlbGVjdGFibGUpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuZGdDZWxscy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuZGdDZWxscy5mb3JFYWNoKGE9PnthLl92aWV3LmRlc3Ryb3llZHx8dGhpcy5fc2Nyb2xsYWJsZUNlbGxzLmluc2VydChhLl92aWV3KX0pfSl9bmdBZnRl''@;'; put 'put ''clZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5kaXNwbGF5TW9kZS52aWV3LnN1YnNjcmliZShhPT57Zm9yKGxldCBkPXRoaXMuX3Njcm9sbGFibGVDZWxscy5sZW5ndGg7ZD4wO2QtLSl0aGlzLl9zY3JvbGxhYmxlQ2VsbHMuZGV0YWNoKCk7Zm9yKGxldCBkPXRoaXMu''@;'; put 'put ''X2NhbGN1bGF0ZWRDZWxscy5sZW5ndGg7ZD4wO2QtLSl0aGlzLl9jYWxjdWxhdGVkQ2VsbHMuZGV0YWNoKCk7YT09PUF3LkNBTENVTEFURT8odGhpcy5kaXNwbGF5Q2VsbHM9ITEsdGhpcy5kZ0NlbGxzLmZvckVhY2goZD0+e2QuX3ZpZXcuZGVzdHJveWVkfHx0aGlzLl9jYWxjdWxhdGVkQ2Vs''@;'; put 'put ''bHMuaW5zZXJ0KGQuX3ZpZXcpfSkpOih0aGlzLmRpc3BsYXlDZWxscz0hMCx0aGlzLmRnQ2VsbHMuZm9yRWFjaChkPT57ZC5fdmlldy5kZXN0cm95ZWR8fHRoaXMuX3Njcm9sbGFibGVDZWxscy5pbnNlcnQoZC5fdmlldyl9KSl9KSx0aGlzLmV4cGFuZC5hbmltYXRlLnN1YnNjcmliZSgoKT0+''@;'; put 'put ''e3RoaXMuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlcj0hdGhpcy5leHBhbmRBbmltYXRpb25UcmlnZ2VyfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX10b2dnbGUoYT0hdGhpcy5zZWxlY3RlZCl7YSE9PXRoaXMuc2VsZWN0ZWQm''@;'; put 'put ''Jih0aGlzLnNlbGVjdGVkPWEsdGhpcy5zZWxlY3RlZENoYW5nZWQuZW1pdChhKSl9dG9nZ2xlRXhwYW5kKCl7dGhpcy5leHBhbmQuZXhwYW5kYWJsZSYmKHRoaXMuZXhwYW5kQW5pbWF0aW9uLnVwZGF0ZVN0YXJ0SGVpZ2h0KCksdGhpcy5leHBhbmRlZD0hdGhpcy5leHBhbmRlZCx0aGlzLmV4''@;'; put 'put ''cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRlZCkpfWNsZWFyUmFuZ2VzKGEpe2Euc2hpZnRLZXkmJih0aGlzLmRvY3VtZW50LmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpLC0xIT09d2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiRmlyZWZveCIpJiYoYS5w''@;'; put 'put ''cmV2ZW50RGVmYXVsdCgpLHRoaXMudG9nZ2xlKCEwKSkpfXNlbGVjdFJvdyhhPSF0aGlzLnNlbGVjdGVkLGQpeyJMQUJFTCIhPT1kLnRhcmdldC50YWdOYW1lJiYodGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PXRoaXMuU0VMRUNUSU9OX1RZUEUuU2luZ2xlP3RoaXMuc2VsZWN0aW9u''@;'; put 'put ''LmN1cnJlbnRTaW5nbGU9dGhpcy5pdGVtOnRoaXMudG9nZ2xlKGEpKX1yYW5nZVNlbGVjdCgpe2NvbnN0IGE9dGhpcy5pdGVtcy5kaXNwbGF5ZWQ7aWYoIWEpcmV0dXJuO2NvbnN0IGQ9YS5pbmRleE9mKHRoaXMuc2VsZWN0aW9uLnJhbmdlU3RhcnQpO2lmKHRoaXMuc2VsZWN0aW9uLnJhbmdl''@;'; put 'put ''U3RhcnQmJnRoaXMuc2VsZWN0aW9uLmN1cnJlbnQuaW5jbHVkZXModGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydCkmJnRoaXMuc2VsZWN0aW9uLnNoaWZ0UHJlc3NlZCYmLTEhPT1kKXtjb25zdCBoPWEuaW5kZXhPZih0aGlzLml0ZW0pLGY9bmV3IFNldCh0aGlzLnNlbGVjdGlvbi5jdXJyZW50''@;'; put 'put ''LmNvbmNhdChhLnNsaWNlKE1hdGgubWluKGQsaCksTWF0aC5tYXgoZCxoKSsxKSkpO3RoaXMuc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCksdGhpcy5zZWxlY3Rpb24uY3VycmVudC5wdXNoKC4uLmYpfWVsc2UgdGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydD10aGlzLml0ZW19fXJldHVybiBj''@;'; put 'put ''Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKGt3KSxxZShNdykscWUoeHcpLHFlKGdBKSxxZShVMykscWUoR1gpLHFlKGJlKSxxZShObykscWUobmEpLHFlKHBzKSxxZShsNSkscWUoR3MpKX0sYy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xy''@;'; put 'put ''LWRnLXJvdyJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZwbyhoLFczLDQpLDImYSl7bGV0IGY7Z2koZj1taSgpKSYmKGQuZGdDZWxscz1mKX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKFVhKHJILDUpLFVhKFRZZSw1KSxVYShBWWUsNSxiZSks''@;'; put 'put ''VWEoa1llLDUsYmUpLFVhKERZZSw1LGJlKSksMiZhKXtsZXQgaDtnaShoPW1pKCkpJiYoZC5leHBhbmRBbmltYXRpb249aC5maXJzdCksZ2koaD1taSgpKSYmKGQuZGV0YWlsQnV0dG9uPWguZmlyc3QpLGdpKGg9bWkoKSkmJihkLl9zdGlja3lDZWxscz1oLmZpcnN0KSxnaShoPW1pKCkpJiYo''@;'; put 'put ''ZC5fc2Nyb2xsYWJsZUNlbGxzPWguZmlyc3QpLGdpKGg9bWkoKSkmJihkLl9jYWxjdWxhdGVkQ2VsbHM9aC5maXJzdCl9fSxob3N0QXR0cnM6WyJyb2xlIiwicm93Z3JvdXAiXSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKE5yKCJhcmlhLW93bnMiLGQuaWQp''@;'; put 'put ''LHhyKCJkYXRhZ3JpZC1yb3ciLCEwKSgiZGF0YWdyaWQtcm93LXNrZWxldG9uIixkLnNrZWxldG9uTG9hZGluZykoImRhdGFncmlkLXNlbGVjdGVkIixkLnNlbGVjdGVkKSl9LGlucHV0czp7ZGV0YWlsRGlzYWJsZWQ6WzAsImNsckRnRGV0YWlsRGlzYWJsZWQiLCJkZXRhaWxEaXNhYmxlZCJd''@;'; put 'put ''LGRldGFpbEhpZGRlbjpbMCwiY2xyRGdEZXRhaWxIaWRkZW4iLCJkZXRhaWxIaWRkZW4iXSxza2VsZXRvbkxvYWRpbmc6WzAsImNsckRnU2tlbGV0b25Mb2FkaW5nIiwic2tlbGV0b25Mb2FkaW5nIl0saXRlbTpbMCwiY2xyRGdJdGVtIiwiaXRlbSJdLGNsckRnU2VsZWN0YWJsZToiY2xyRGdT''@;'; put 'put ''ZWxlY3RhYmxlIixzZWxlY3RlZDpbMCwiY2xyRGdTZWxlY3RlZCIsInNlbGVjdGVkIl0sZXhwYW5kZWQ6WzAsImNsckRnRXhwYW5kZWQiLCJleHBhbmRlZCJdLGNsckRnRGV0YWlsT3BlbkxhYmVsOiJjbHJEZ0RldGFpbE9wZW5MYWJlbCIsY2xyRGdEZXRhaWxDbG9zZUxhYmVsOiJjbHJEZ0Rl''@;'; put 'put ''dGFpbENsb3NlTGFiZWwiLGNsckRnUm93U2VsZWN0aW9uTGFiZWw6ImNsckRnUm93U2VsZWN0aW9uTGFiZWwifSxvdXRwdXRzOntzZWxlY3RlZENoYW5nZWQ6ImNsckRnU2VsZWN0ZWRDaGFuZ2UiLGV4cGFuZGVkQ2hhbmdlOiJjbHJEZ0V4cGFuZGVkQ2hhbmdlIn0sc3RhbmRhbG9uZTohMSxm''@;'; put 'put ''ZWF0dXJlczpbaGEoW2dBLHtwcm92aWRlOlNkLHVzZUV4aXN0aW5nOmdBfSx7cHJvdmlkZTokVCx1c2VFeGlzdGluZzpnQX1dKV0sbmdDb250ZW50U2VsZWN0b3JzOlJZZSxkZWNsczo5LHZhcnM6Myxjb25zdHM6W1siZGV0YWlsIiwiIl0sWyJyb3dDb250ZW50IiwiIl0sWyJjYWxjdWxhdGVk''@;'; put 'put ''Q2VsbHMiLCIiXSxbInN0aWNreUNlbGxzIiwiIl0sWyJzY3JvbGxhYmxlQ2VsbHMiLCIiXSxbImRldGFpbEJ1dHRvbiIsIiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1yb3ctY2xpY2thYmxlIiwzLCJtb3VzZWRvd24iLCJjbGljayIsNCwibmdJZiJdLFszLCJjbHJFeHBhbmRUcmlnZ2VyIiw0LCJu''@;'; put 'put ''Z0lmIl0sWzQsIm5nSWYiXSxbMSwiZGF0YWdyaWQtcm93LWNsaWNrYWJsZSIsMywibW91c2Vkb3duIiwiY2xpY2siXSxbMywiY2xyRXhwYW5kVHJpZ2dlciJdLFszLCJuZ1RlbXBsYXRlT3V0bGV0Il0sWyJyb2xlIiwicm93IiwxLCJkYXRhZ3JpZC1yb3ctbWFzdGVyIiwiZGF0YWdyaWQtcm93''@;'; put 'put ''LWZsZXgiLDMsImlkIl0sWzEsImRhdGFncmlkLXJvdy1zdGlja3kiXSxbImNsYXNzIiwiZGF0YWdyaWQtc2VsZWN0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiBkYXRhZ3JpZC1jZWxsIiwicm9sZSIsImdyaWRjZWxsIiwzLCJuZ0NsYXNzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRhdGFncmlkLXJv''@;'; put 'put ''dy1hY3Rpb25zIGRhdGFncmlkLWZpeGVkLWNvbHVtbiBkYXRhZ3JpZC1jZWxsIiwicm9sZSIsImdyaWRjZWxsIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgZGF0YWdyaWQtZml4ZWQtY29sdW1uIGRhdGFncmlkLWNlbGwiLCJyb2xlIiwiZ3JpZGNlbGwi''@;'; put 'put ''LDQsIm5nSWYiXSxbImNsYXNzIiwiZGF0YWdyaWQtZGV0YWlsLWNhcmV0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiBkYXRhZ3JpZC1jZWxsIiwicm9sZSIsImdyaWRjZWxsIiw0LCJuZ0lmIl0sWzEsImRhdGFncmlkLXJvdy1zY3JvbGxhYmxlIiwzLCJuZ0NsYXNzIl0sWzEsImRhdGFncmlkLXNj''@;'; put 'put ''cm9sbGluZy1jZWxscyJdLFsiY2xhc3MiLCJza2VsZXRvbi1sb2FkaW5nIiw0LCJuZ0lmIl0sWyJyb2xlIiwiZ3JpZGNlbGwiLDEsImRhdGFncmlkLXNlbGVjdCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiIsImRhdGFncmlkLWNlbGwiLDMsIm5nQ2xhc3MiXSxbMSwiY2xyLWNoZWNrYm94LXdy''@;'; put 'put ''YXBwZXIiXSxbInRhYmluZGV4IiwiLTEiLCJ0eXBlIiwiY2hlY2tib3giLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwiaWQiLCJkaXNhYmxlZCJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsImNsci1jb2wtbnVsbCIsMywiY2xpY2siLCJmb3IiXSxbMSwiY2xyLXNyLW9ubHkiXSxbInRh''@;'; put 'put ''YmluZGV4IiwiLTEiLCJ0eXBlIiwicmFkaW8iLCJjbHJSYWRpbyIsIiIsMywibmdNb2RlbENoYW5nZSIsImlkIiwibmFtZSIsInZhbHVlIiwibmdNb2RlbCIsImNoZWNrZWQiLCJkaXNhYmxlZCJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsImNsci1jb2wtbnVsbCIsMywiZm9yIl0sWyJyb2xl''@;'; put 'put ''IiwiZ3JpZGNlbGwiLDEsImRhdGFncmlkLXJvdy1hY3Rpb25zIiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwiZGF0YWdyaWQtY2VsbCJdLFsicm9sZSIsImdyaWRjZWxsIiwxLCJkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwiZGF0YWdyaWQtY2Vs''@;'; put 'put ''bCJdLFsidGFiaW5kZXgiLCItMSIsInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xyU21hbGwiLCIiLDQsIm5nSWYiXSxbInRhYmluZGV4IiwiLTEiLCJ0eXBlIiwiYnV0dG9uIiwxLCJkYXRh''@;'; put 'put ''Z3JpZC1leHBhbmRhYmxlLWNhcmV0LWJ1dHRvbiIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLDEsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtaWNvbiJdLFsiY2xyU21hbGwiLCIiXSxbInJvbGUiLCJncmlkY2VsbCIsMSwiZGF0YWdyaWQtZGV0YWlsLWNhcmV0IiwiZGF0YWdyaWQt''@;'; put 'put ''Zml4ZWQtY29sdW1uIiwiZGF0YWdyaWQtY2VsbCJdLFsidGFiaW5kZXgiLCItMSIsInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImRhdGFncmlkLWRldGFpbC1jYXJldC1idXR0b24iLCJhcmlhLWhhc3BvcHVwIiwiZGlhbG9nIiwzLCJkaXNhYmxlZCIsImlzLW9wZW4iLCJjbGljayIsNCwibmdJ''@;'; put 'put ''ZiJdLFsidGFiaW5kZXgiLCItMSIsInR5cGUiLCJidXR0b24iLCJhcmlhLWhhc3BvcHVwIiwiZGlhbG9nIiwxLCJkYXRhZ3JpZC1kZXRhaWwtY2FyZXQtYnV0dG9uIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJzaGFwZSIsImFuZ2xlLWRvdWJsZSIsMSwiZGF0YWdyaWQtZGV0YWlsLWNhcmV0''@;'; put 'put ''LWljb24iXSxbMSwic2tlbGV0b24tbG9hZGluZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKElZZSksZ3QoMCxOWWUsMywyLCJkaXYiLDYpKDEsQlllLDIsMiwiY2xyLWV4cGFuZGFibGUtYW5pbWF0aW9uIiw3KSgyLHpZZSwxLDEsbnVsbCw4KSgzLFVZZSwxLDAsIm5nLXRl''@;'; put 'put ''bXBsYXRlIixudWxsLDAseGMpKDUsaUdlLDE3LDE0LCJuZy10ZW1wbGF0ZSIsbnVsbCwxLHhjKSx6bCg3LG51bGwsMikpLDImYSYmKEVlKCJuZ0lmIixkLnNlbGVjdGlvbi5yb3dTZWxlY3Rpb25Nb2RlKSxmZSgpLEVlKCJuZ0lmIiwhZC5zZWxlY3Rpb24ucm93U2VsZWN0aW9uTW9kZSYmZC5l''@;'; put 'put ''eHBhbmQuZXhwYW5kYWJsZSksZmUoKSxFZSgibmdJZiIsIWQuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1vZGUmJiFkLmV4cGFuZC5leHBhbmRhYmxlKSl9LGRlcGVuZGVuY2llczpbUnUsQ2EseWQsZnMsQ3MsVlgsTlgsbmMsc2gsTkYsaGwscmwsckgsZmgsVzMsJFgsYjRdLGVuY2Fwc3VsYXRp''@;'; put 'put ''b246Mn0pLGN9KSgpO3ZhciB4ZD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLldJRFRIPTBdPSJXSURUSCIsY1tjLkhJRERFTj0xXT0iSElEREVOIixjW2MuSU5JVElBTElaRT0yXT0iSU5JVElBTElaRSIsY30oeGR8fHt9KTtjb25zdCBhcWU9T2JqZWN0LmtleXMoeGQpLm1hcChjPT54ZFtjXSku''@;'; put 'put ''ZmlsdGVyKGM9PmM9PT1wYXJzZUludChjLDEwKSYmYyE9PXhkLklOSVRJQUxJWkUpO2xldCBjNT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5jb2x1bW5zPVtdLHRoaXMuY29sdW1uc1N0YXRlQ2hhbmdlPW5ldyBNaShudWxsKSx0aGlzLl9jYWNoZT1bXX1nZXQgY29sdW1uU3Rh''@;'; put 'put ''dGVzKCl7cmV0dXJuIHRoaXMuY29sdW1ucy5tYXAoYT0+YS52YWx1ZSl9Z2V0IGhhc0hpZGVhYmxlQ29sdW1ucygpe3JldHVybiB0aGlzLmNvbHVtblN0YXRlcy5maWx0ZXIoYT0+YS5oaWRlYWJsZSkubGVuZ3RoPjB9Z2V0IHZpc2libGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY29sdW1uU3Rh''@;'; put 'put ''dGVzLmZpbHRlcihhPT4hYS5oaWRkZW4pfWNhY2hlKCl7dGhpcy5fY2FjaGU9dGhpcy5jb2x1bW5zLm1hcChhPT57Y29uc3QgZD17Li4uYS52YWx1ZX07cmV0dXJuIGRlbGV0ZSBkLmNoYW5nZXMsZH0pfWhhc0NhY2hlKCl7cmV0dXJuISF0aGlzLl9jYWNoZS5sZW5ndGh9cmVzZXRUb0xhc3RD''@;'; put 'put ''YWNoZSgpe3RoaXMuX2NhY2hlLmZvckVhY2goKGEsZCk9Pntjb25zdCBoPXsuLi5hLGNoYW5nZXM6YXFlfTt0aGlzLmNvbHVtbnNbZF0ubmV4dChoKSx0aGlzLmNvbHVtbnNTdGF0ZUNoYW5nZS5uZXh0KGgpfSksdGhpcy5fY2FjaGU9W119ZW1pdFN0YXRlQ2hhbmdlQXQoYSxkKXt0aGlzLmNv''@;'; put 'put ''bHVtbnNbYV0mJnRoaXMuZW1pdFN0YXRlQ2hhbmdlKHRoaXMuY29sdW1uc1thXSxkKX1lbWl0U3RhdGVDaGFuZ2UoYSxkKXtjb25zdCBoPXsuLi5hLnZhbHVlLC4uLmR9O2EubmV4dChoKSx0aGlzLmNvbHVtbnNTdGF0ZUNoYW5nZS5uZXh0KGgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjb25zdCBvcWU9e2l0ZW1TaXplOjMyLG1pbkJ1ZmZlclB4OjIwMCxtYXhCdWZmZXJQeDo0MDB9O2xldCBKM2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rv''@;'; put 'put ''cihhLGQsaCxmLHYsTSxELFUsdGUsb2UsdmUsd2UsRmUpe3RoaXMuY2hhbmdlRGV0ZWN0b3JSZWY9YSx0aGlzLml0ZXJhYmxlRGlmZmVycz1kLHRoaXMuaXRlbXM9aCx0aGlzLm5nWm9uZT1mLHRoaXMucmVuZGVyZXIyPXYsdGhpcy50ZW1wbGF0ZVJlZj1NLHRoaXMudmlld0NvbnRhaW5lclJl''@;'; put 'put ''Zj1ELHRoaXMuZGlyZWN0aW9uYWxpdHk9VSx0aGlzLnNjcm9sbERpc3BhdGNoZXI9dGUsdGhpcy52aWV3cG9ydFJ1bGVyPW9lLHRoaXMuZGF0YWdyaWQ9dmUsdGhpcy5jb2x1bW5zU2VydmljZT13ZSx0aGlzLmluamVjdG9yPUZlLHRoaXMucmVuZGVyZWRSYW5nZUNoYW5nZT1uZXcgWHIsdGhp''@;'; put 'put ''cy5wZXJzaXN0SXRlbXM9ITAsdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cz17Li4ub3FlfSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy50b3BJbmRleD0wLHRoaXMubXV0YXRpb25DaGFuZ2VzPW5ldyBNdXRhdGlvbk9ic2VydmVyKFdlPT57V2UuZm9yRWFjaChudD0+''@;'; put 'put ''e250LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoImRhdGFncmlkLWNvbXBhY3QiKSYmdGhpcy5pdGVtU2l6ZT4yNCYmKHRoaXMuaXRlbVNpemU9MjQpfSl9KSx0aGlzLnZpZXdSZXBlYXRlcj1uZXcgZGZlLHRoaXMuY2RrVmlydHVhbEZvcklucHV0cz17Y2RrVmlydHVhbEZvclRyYWNrQnk6''@;'; put 'put ''V2U9PldlfSxoLnNtYXJ0ZW5VcCgpLHZlLmRldGFpbFNlcnZpY2UucHJldmVudEZvY3VzU2Nyb2xsPSEwLHRoaXMuZGF0YWdyaWRFbGVtZW50UmVmPXZlLmVsLHRoaXMuY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplPTIwLHRoaXMubXV0YXRpb25DaGFuZ2VzLm9ic2VydmUodGhpcy5k''@;'; put 'put ''YXRhZ3JpZEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCx7YXR0cmlidXRlRmlsdGVyOlsiY2xhc3MiXSxhdHRyaWJ1dGVPbGRWYWx1ZTohMH0pLHRoaXMudmlydHVhbFNjcm9sbFN0cmF0ZWd5PW5ldyBaemUodGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5pdGVtU2l6ZSx0''@;'; put 'put ''aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLm1pbkJ1ZmZlclB4LHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMubWF4QnVmZmVyUHgpfWdldCBjZGtWaXJ0dWFsRm9yT2YoKXtyZXR1cm4gdGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzLmNka1ZpcnR1YWxG''@;'; put 'put ''b3JPZn1zZXQgY2RrVmlydHVhbEZvck9mKGEpe3RoaXMuY2RrVmlydHVhbEZvcklucHV0cy5jZGtWaXJ0dWFsRm9yT2Y9YSx0aGlzLml0ZW1zLmFsbD1hLHRoaXMudXBkYXRlQ2RrVmlydHVhbEZvcklucHV0cygpfWdldCBjZGtWaXJ0dWFsRm9yVHJhY2tCeSgpe3JldHVybiB0aGlzLmNka1Zp''@;'; put 'put ''cnR1YWxGb3JJbnB1dHMuY2RrVmlydHVhbEZvclRyYWNrQnl9c2V0IGNka1ZpcnR1YWxGb3JUcmFja0J5KGEpe3RoaXMuY2RrVmlydHVhbEZvcklucHV0cy5jZGtWaXJ0dWFsRm9yVHJhY2tCeT1hLHRoaXMudXBkYXRlQ2RrVmlydHVhbEZvcklucHV0cygpfWdldCBjZGtWaXJ0dWFsRm9yVGVt''@;'; put 'put ''cGxhdGUoKXtyZXR1cm4gdGhpcz8uY2RrVmlydHVhbEZvcklucHV0cz8uY2RrVmlydHVhbEZvclRlbXBsYXRlfXNldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGUoYSl7dGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzLmNka1ZpcnR1YWxGb3JUZW1wbGF0ZT1hLHRoaXMudXBkYXRlQ2RrVmlydHVhbEZv''@;'; put 'put ''cklucHV0cygpfWdldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUoKXtyZXR1cm4gdGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzLmNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZX1zZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplKGEpe3RoaXMuY2RrVmlydHVhbEZv''@;'; put 'put ''cklucHV0cy5jZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemU9dzkoYSksdGhpcy51cGRhdGVDZGtWaXJ0dWFsRm9ySW5wdXRzKCl9Z2V0IGl0ZW1TaXplKCl7cmV0dXJuIHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMuaXRlbVNpemV9c2V0IGl0ZW1TaXplKGEpe3Ro''@;'; put 'put ''aXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMuaXRlbVNpemU9dzkoYSksdGhpcy51cGRhdGVGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzKCl9Z2V0IG1pbkJ1ZmZlclB4KCl7cmV0dXJuIHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMubWluQnVmZmVy''@;'; put 'put ''UHh9c2V0IG1pbkJ1ZmZlclB4KGEpe3RoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMubWluQnVmZmVyUHg9dzkoYSksdGhpcy51cGRhdGVGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzKCl9Z2V0IG1heEJ1ZmZlclB4KCl7cmV0dXJuIHRoaXMuX2Nka0ZpeGVkU2l6ZVZp''@;'; put 'put ''cnR1YWxTY3JvbGxJbnB1dHMubWF4QnVmZmVyUHh9c2V0IG1heEJ1ZmZlclB4KGEpe3RoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMubWF4QnVmZmVyUHg9dzkoYSksdGhpcy51cGRhdGVGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzKCl9c2V0IGRhdGFSYW5nZShhKXth''@;'; put 'put ''JiYodGhpcy5pdGVtcy5zbWFydCYmdGhpcy5pdGVtcy5zbWFydGVuRG93bigpLHRoaXMudG90YWxJdGVtcz1hLnRvdGFsLHRoaXMudXBkYXRlRGF0YVJhbmdlKGEuc2tpcCxhLmRhdGEpKX1nZXQgdG90YWxJdGVtcygpe3JldHVybiB0aGlzLl90b3RhbEl0ZW1zfXNldCB0b3RhbEl0ZW1zKGEp''@;'; put 'put ''e3RoaXMuX3RvdGFsSXRlbXM9YX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmluamVjdG9yLnJ1bkluQ29udGV4dCgoKT0+e3RoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0PXRoaXMuY3JlYXRlVmlydHVhbFNjcm9sbFZpZXdwb3J0Rm9yRGF0YWdyaWQodGhpcy5jaGFuZ2VEZXRlY3RvclJlZix0''@;'; put 'put ''aGlzLm5nWm9uZSx0aGlzLnJlbmRlcmVyMix0aGlzLmRpcmVjdGlvbmFsaXR5LHRoaXMuc2Nyb2xsRGlzcGF0Y2hlcix0aGlzLnZpZXdwb3J0UnVsZXIsdGhpcy5kYXRhZ3JpZEVsZW1lbnRSZWYsdGhpcy52aXJ0dWFsU2Nyb2xsU3RyYXRlZ3kpLHRoaXMuY2RrVmlydHVhbEZvcj1mdW5jdGlv''@;'; put 'put ''biBscWUoYyxsLGEsZCxoLGYpe2lmKCtmUC5tYWpvcjwxOSlyZXR1cm4gbmV3IFhGKGMsbCxhLGQsaCxmKTt7Y29uc3Qgdj1Zby5jcmVhdGUoe3BhcmVudDpKbihxbCkscHJvdmlkZXJzOlt7cHJvdmlkZTppdyx1c2VWYWx1ZTpofV19KTtyZXR1cm4gWW8uY3JlYXRlKHtwYXJlbnQ6dixwcm92''@;'; put 'put ''aWRlcnM6W3twcm92aWRlOmJlLHVzZVZhbHVlOmN9LHtwcm92aWRlOklsLHVzZVZhbHVlOmx9LHtwcm92aWRlOiRtLHVzZVZhbHVlOmF9LHtwcm92aWRlOllLLHVzZVZhbHVlOmR9LHtwcm92aWRlOlhhLHVzZVZhbHVlOmZ9LHtwcm92aWRlOlhGLHVzZUNsYXNzOlhGfV19KS5nZXQoWEYpfX0o''@;'; put 'put ''dGhpcy52aWV3Q29udGFpbmVyUmVmLHRoaXMudGVtcGxhdGVSZWYsdGhpcy5pdGVyYWJsZURpZmZlcnMsdGhpcy52aWV3UmVwZWF0ZXIsdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQsdGhpcy5uZ1pvbmUpLHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0Lm5nT25Jbml0KCl9KSx0aGlzLmdy''@;'; put 'put ''aWRSb2xlRWxlbWVudD10aGlzLmRhdGFncmlkRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tyb2xlPSJncmlkIl0nKSx0aGlzLnVwZGF0ZUNka1ZpcnR1YWxGb3JJbnB1dHMoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLml0ZW1zLmNoYW5nZS5zdWJzY3Jp''@;'; put 'put ''YmUoYT0+e3RoaXMuaXRlbXMuc21hcnQmJih0aGlzLmNka1ZpcnR1YWxGb3IuY2RrVmlydHVhbEZvck9mPWEpfSksdGhpcy5jZGtWaXJ0dWFsRm9yLmRhdGFTdHJlYW0uc3Vic2NyaWJlKGE9Pnt0aGlzLnVwZGF0ZUFyaWFSb3dDb3VudChhLmxlbmd0aCl9KSx0aGlzLnZpcnR1YWxTY3JvbGxW''@;'; put 'put ''aWV3cG9ydC5zY3JvbGxlZEluZGV4Q2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy50b3BJbmRleD1hfSksdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQucmVuZGVyZWRSYW5nZVN0cmVhbS5zdWJzY3JpYmUoYT0+e3RoaXMucmVuZGVyZWRSYW5nZUNoYW5nZS5lbWl0KGEpfSksdGhpcy5kYXRh''@;'; put 'put ''Z3JpZC5yZWZyZXNoLnN1YnNjcmliZShhPT57YS5maWx0ZXJzJiZ0aGlzLnNjcm9sbFRvSW5kZXgoMCl9KSx0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnNTdGF0ZUNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnZpZXdSZXBlYXRlci5kZXRhY2goKX0pKX1uZ0RvQ2hlY2soKXt0aGlzLmNk''@;'; put 'put ''a1ZpcnR1YWxGb3I/Lm5nRG9DaGVjaygpLHRoaXMudXBkYXRlQXJpYVJvd0luZGV4ZXMoKX1uZ09uRGVzdHJveSgpe3RoaXMuY2RrVmlydHVhbEZvcj8ubmdPbkRlc3Ryb3koKSx0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydD8ubmdPbkRlc3Ryb3koKSx0aGlzLm11dGF0aW9uQ2hhbmdlcz8u''@;'; put 'put ''ZGlzY29ubmVjdCgpLHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PnthLnVuc3Vic2NyaWJlKCl9KX1zY3JvbGxVcChhLGQ9ImF1dG8iKXt0aGlzLnNjcm9sbFRvSW5kZXgodGhpcy50b3BJbmRleC1hLGQpfXNjcm9sbERvd24oYSxkPSJhdXRvIil7dGhpcy5zY3JvbGxUb0luZGV4KHRo''@;'; put 'put ''aXMudG9wSW5kZXgrYSxkKX1zY3JvbGxUb0luZGV4KGEsZD0iYXV0byIpe3RoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0Py5zY3JvbGxUb0luZGV4KGEsZCl9dXBkYXRlRGF0YVJhbmdlKGEsZCl7bGV0IGg9dGhpcy5jZGtWaXJ0dWFsRm9yT2Y7KCF0aGlzLnBlcnNpc3RJdGVtc3x8IWh8fGg/''@;'; put 'put ''Lmxlbmd0aCE9PXRoaXMudG90YWxJdGVtcykmJihoPUFycmF5KHRoaXMudG90YWxJdGVtcykpLGguc3BsaWNlKGEsZC5sZW5ndGgsLi4uZCksdGhpcy5jZGtWaXJ0dWFsRm9yT2Y9QXJyYXkuZnJvbShoKX11cGRhdGVDZGtWaXJ0dWFsRm9ySW5wdXRzKCl7aWYodGhpcy5jZGtWaXJ0dWFsRm9y''@;'; put 'put ''KWZvcihjb25zdCBhIG9mIE9iamVjdC5rZXlzKHRoaXMuY2RrVmlydHVhbEZvcklucHV0cykpdGhpcy5jZGtWaXJ0dWFsRm9yW2FdIT09dGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzW2FdJiYodGhpcy5jZGtWaXJ0dWFsRm9yW2FdPXRoaXMuY2RrVmlydHVhbEZvcklucHV0c1thXSl9dXBkYXRl''@;'; put 'put ''Rml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cygpe3RoaXMudmlydHVhbFNjcm9sbFN0cmF0ZWd5JiZ0aGlzLnZpcnR1YWxTY3JvbGxTdHJhdGVneS51cGRhdGVJdGVtQW5kQnVmZmVyU2l6ZSh0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLml0ZW1TaXplLHRoaXMuX2Nk''@;'; put 'put ''a0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMubWluQnVmZmVyUHgsdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5tYXhCdWZmZXJQeCl9dXBkYXRlQXJpYVJvd0NvdW50KGEpe3RoaXMuZ3JpZFJvbGVFbGVtZW50Py5zZXRBdHRyaWJ1dGUoImFyaWEtcm93Y291bnQi''@;'; put 'put ''LGEudG9TdHJpbmcoKSl9dXBkYXRlQXJpYVJvd0luZGV4ZXMoKXtmb3IobGV0IGE9MDthPHRoaXMudmlld0NvbnRhaW5lclJlZi5sZW5ndGg7YSsrKXtjb25zdCBkPXRoaXMudmlld0NvbnRhaW5lclJlZi5nZXQoYSk7ZC5yb290Tm9kZXMuZmluZChNPT4iQ0xSLURHLVJPVyI9PT1NLnRhZ05h''@;'; put 'put ''bWUpPy5xdWVyeVNlbGVjdG9yKCdbcm9sZT0icm93Il0nKT8uc2V0QXR0cmlidXRlKCJhcmlhLXJvd2luZGV4IiwoZC5jb250ZXh0LmluZGV4KzEpLnRvU3RyaW5nKCkpfX1jcmVhdGVWaXJ0dWFsU2Nyb2xsVmlld3BvcnRGb3JEYXRhZ3JpZChhLGQsaCxmLHYsTSxELFUpe2NvbnN0IHRlPUQu''@;'; put 'put ''bmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQiKSxvZT1ELm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigiLmRhdGFncmlkLXRhYmxlIiksdmU9RC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5kYXRhZ3JpZC1yb3dzIik7bGV0IEZlPTAsV2U9MDtmdW5jdGlv''@;'; put 'put ''biBudCgpe3ZlLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlWSgke0ZlfXB4KWAsdmUuc3R5bGUuaGVpZ2h0PVdlLUZlKyJweCJ9Y29uc3QgZHQ9ZnVuY3Rpb24gc3FlKGMsbCxhLGQsaCxmLHYsTSxEKXtyZXR1cm4rZlAubWFqb3I8MTk/bmV3IGl3KGMsbCxhLGgsZix2LE0sRCk6WW8uY3Jl''@;'; put 'put ''YXRlKHtwYXJlbnQ6Sm4ocWwpLHByb3ZpZGVyczpbe3Byb3ZpZGU6bmEsdXNlVmFsdWU6Y30se3Byb3ZpZGU6SHMsdXNlVmFsdWU6bH0se3Byb3ZpZGU6WGEsdXNlVmFsdWU6YX0se3Byb3ZpZGU6Tm8sdXNlVmFsdWU6ZH0se3Byb3ZpZGU6aGZlLHVzZVZhbHVlOmh9LHtwcm92aWRlOnJ3LHVz''@;'; put 'put ''ZVZhbHVlOmZ9LHtwcm92aWRlOiRGLHVzZVZhbHVlOnZ9LHtwcm92aWRlOktGLHVzZVZhbHVlOk19LHtwcm92aWRlOmdmZSx1c2VWYWx1ZTpEfSx7cHJvdmlkZTppdyx1c2VDbGFzczppd31dfSkuZ2V0KGl3KX0oe25hdGl2ZUVsZW1lbnQ6dGV9LGEsZCxoLFUsZix2LE0sbnVsbCk7cmV0dXJu''@;'; put 'put ''IGR0Ll9jb250ZW50V3JhcHBlcj17bmF0aXZlRWxlbWVudDp7c3R5bGU6e3NldCB0cmFuc2Zvcm0obXQpe0ZlPXZvaWQgMD09PW10PzA6Ky90cmFuc2xhdGVZXCgoWzAtOV0rKXB4XCkvLmV4ZWMobXQpPy5bMV0sbnQoKX19fX0sZHQuc2V0VG90YWxDb250ZW50U2l6ZT1tdD0+e1dlPW10LG9l''@;'; put 'put ''LnN0eWxlLmhlaWdodD1gJHtXZX1weGAsbnQoKX0sZHR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKEhzKSxxZSgkbSkscWUobDUpLHFlKFhhKSxxZShObykscWUoSWwpLHFlKGJlKSxxZShydykscWUoJEYpLHFlKEtGKSxxZSh1cygoKT0+XzYp''@;'; put 'put ''KSxxZShjNSkscWUocWwpKX0sYy5cdTAyNzVkaXI9WXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVmlydHVhbFNjcm9sbCIsIiJdLFsiIiwiQ2xyVmlydHVhbFNjcm9sbCIsIiJdXSxpbnB1dHM6e3BlcnNpc3RJdGVtczpbMCwiY2xyVmlydHVhbFBlcnNpc3RJdGVtcyIsInBlcnNpc3RJ''@;'; put 'put ''dGVtcyJdLGNka1ZpcnR1YWxGb3JPZjpbMCwiY2xyVmlydHVhbFJvd3NPZiIsImNka1ZpcnR1YWxGb3JPZiJdLGNka1ZpcnR1YWxGb3JUcmFja0J5OlswLCJjbHJWaXJ0dWFsUm93c1RyYWNrQnkiLCJjZGtWaXJ0dWFsRm9yVHJhY2tCeSJdLGNka1ZpcnR1YWxGb3JUZW1wbGF0ZTpbMCwiY2xy''@;'; put 'put ''VmlydHVhbFJvd3NUZW1wbGF0ZSIsImNka1ZpcnR1YWxGb3JUZW1wbGF0ZSJdLGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZTpbMCwiY2xyVmlydHVhbFJvd3NUZW1wbGF0ZUNhY2hlU2l6ZSIsImNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZSJdLGl0ZW1TaXplOlswLCJjbHJW''@;'; put 'put ''aXJ0dWFsUm93c0l0ZW1TaXplIiwiaXRlbVNpemUiXSxtaW5CdWZmZXJQeDpbMCwiY2xyVmlydHVhbFJvd3NNaW5CdWZmZXJQeCIsIm1pbkJ1ZmZlclB4Il0sbWF4QnVmZmVyUHg6WzAsImNsclZpcnR1YWxSb3dzTWF4QnVmZmVyUHgiLCJtYXhCdWZmZXJQeCJdLGRhdGFSYW5nZTpbMCwiY2xy''@;'; put 'put ''VmlydHVhbERhdGFSYW5nZSIsImRhdGFSYW5nZSJdfSxvdXRwdXRzOntyZW5kZXJlZFJhbmdlQ2hhbmdlOiJyZW5kZXJlZFJhbmdlQ2hhbmdlIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbaGEoW2w1XSldfSksY30pKCksUTNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7''@;'; put 'put ''dGhpcy5maWx0ZXJzPWEsdGhpcy5zb3J0PWQsdGhpcy5wYWdlPWgsdGhpcy5kZWJvdW5jZXI9Zix0aGlzLmNoYW5nZT10aGlzLmRlYm91bmNlci5jaGFuZ2UucGlwZShZYSgoKT0+dGhpcy5zdGF0ZSkpfWdldCBzdGF0ZSgpe2NvbnN0IGE9e307dGhpcy5wYWdlLnNpemU+MCYmKGEucGFnZT17''@;'; put 'put ''ZnJvbTp0aGlzLnBhZ2UuZmlyc3RJdGVtLHRvOnRoaXMucGFnZS5sYXN0SXRlbSxzaXplOnRoaXMucGFnZS5zaXplLGN1cnJlbnQ6dGhpcy5wYWdlLmN1cnJlbnR9KSx0aGlzLnNvcnQuY29tcGFyYXRvciYmKGEuc29ydD10aGlzLnNvcnQuY29tcGFyYXRvciBpbnN0YW5jZW9mIE1IP3tieTp0''@;'; put 'put ''aGlzLnNvcnQuY29tcGFyYXRvci5wcm9wLHJldmVyc2U6dGhpcy5zb3J0LnJldmVyc2V9OntieTp0aGlzLnNvcnQuY29tcGFyYXRvcixyZXZlcnNlOnRoaXMuc29ydC5yZXZlcnNlfSk7Y29uc3QgZD10aGlzLmZpbHRlcnMuZ2V0QWN0aXZlRmlsdGVycygpO2lmKGQubGVuZ3RoPjApe2EuZmls''@;'; put 'put ''dGVycz1bXTtmb3IoY29uc3QgaCBvZiBkKWEuZmlsdGVycy5wdXNoKGguc3RhdGU/aC5zdGF0ZTpoKX1yZXR1cm4gYX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoSHIoczUpLEhyKHhIKSxIcihtNiksSHIoaEEpKX0sYy5cdTAyNzVwcm92PWZyKHt0''@;'; put 'put ''b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxiNj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuY29sdW1uc1NlcnZpY2U9YSx0aGlzLnN1YnNjcmlwdGlvbnM9W119bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXRDZWxsc1N0YXRlKCksdGhpcy5zdWJzY3Jp''@;'; put 'put ''cHRpb25zLnB1c2godGhpcy5jZWxscy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuc2V0Q2VsbHNTdGF0ZSgpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1zZXRDZWxsc1N0YXRlKCl7dGhpcy5jZWxscy5sZW5ndGg9''@;'; put 'put ''PT10aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMubGVuZ3RoJiZ0aGlzLmNlbGxzLmZvckVhY2goKGEsZCk9Pnt0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnNbZF0mJmEucmVzZXRTdGF0ZSh0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnNbZF0udmFsdWUpfSl9fXJldHVybiBjLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKGM1KSl9LGMuXHUwMjc1ZGlyPVlyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1yb3ciXSxbImNsci1kZy1yb3ctZGV0YWlsIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihwbyhoLGMsNSks''@;'; put 'put ''cG8oaCxiNCw0KSksMiZhKXtsZXQgZjtnaShmPW1pKCkpJiYoZC5leHBhbmRhYmxlUm93PWYuZmlyc3QpLGdpKGY9bWkoKSkmJihkLmNlbGxzPWYpfX0sc3RhbmRhbG9uZTohMX0pLGN9KSgpLF82PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxVLHRlLG9lLHZlLHdl''@;'; put 'put ''LEZlLFdlLG50KXt0aGlzLm9yZ2FuaXplcj1hLHRoaXMuaXRlbXM9ZCx0aGlzLmV4cGFuZGFibGVSb3dzPWgsdGhpcy5zZWxlY3Rpb249Zix0aGlzLnJvd0FjdGlvblNlcnZpY2U9dix0aGlzLnN0YXRlUHJvdmlkZXI9TSx0aGlzLmRpc3BsYXlNb2RlPUQsdGhpcy5yZW5kZXJlcj1VLHRoaXMu''@;'; put 'put ''ZGV0YWlsU2VydmljZT10ZSx0aGlzLmRvY3VtZW50PW9lLHRoaXMuZWw9dmUsdGhpcy5wYWdlPXdlLHRoaXMuY29tbW9uU3RyaW5ncz1GZSx0aGlzLmtleU5hdmlnYXRpb249V2UsdGhpcy56b25lPW50LHRoaXMuY2xyRGdTaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWw9dGhpcy5jb21tb25TdHJp''@;'; put 'put ''bmdzLmtleXMuc2luZ2xlU2VsZWN0aW9uQXJpYUxhYmVsLHRoaXMuY2xyRGdTaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnNpbmdsZUFjdGlvbmFibGVBcmlhTGFiZWwsdGhpcy5jbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsPXRoaXMuY29tbW9u''@;'; put 'put ''U3RyaW5ncy5rZXlzLmRldGFpbEV4cGFuZGFibGVBcmlhTGFiZWwsdGhpcy5jbHJEZ0Rpc2FibGVQYWdlRm9jdXM9ITEsdGhpcy5zZWxlY3RlZENoYW5nZWQ9bmV3IFhyKCExKSx0aGlzLnNpbmdsZVNlbGVjdGVkQ2hhbmdlZD1uZXcgWHIoITEpLHRoaXMucmVmcmVzaD1uZXcgWHIoITEpLHRo''@;'; put 'put ''aXMuY3VzdG9tU2VsZWN0QWxsRW5hYmxlZD0hMSx0aGlzLmN1c3RvbVNlbGVjdEFsbD1uZXcgWHIsdGhpcy5TRUxFQ1RJT05fVFlQRT1TbCx0aGlzLl9zdWJzY3JpcHRpb25zPVtdO2NvbnN0IGR0PU91KCk7dGhpcy5zZWxlY3RBbGxJZD0iY2xyLWRnLXNlbGVjdC1hbGwtIitkdCx0ZS5pZD1k''@;'; put 'put ''dH1nZXQgbG9hZGluZygpe3JldHVybiB0aGlzLml0ZW1zLmxvYWRpbmd9c2V0IGxvYWRpbmcoYSl7dGhpcy5pdGVtcy5sb2FkaW5nPWF9c2V0IHNlbGVjdGVkKGEpe3RoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9YT9TbC5NdWx0aTpTbC5Ob25lLHRoaXMuc2VsZWN0aW9uLnVwZGF0ZUN1''@;'; put 'put ''cnJlbnQoYSwhMSl9c2V0IHNpbmdsZVNlbGVjdGVkKGEpe3RoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9U2wuU2luZ2xlLGE/dGhpcy5zZWxlY3Rpb24uY3VycmVudFNpbmdsZT1hOnRoaXMuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGUmJih0aGlzLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xl''@;'; put 'put ''PW51bGwpfXNldCBjbHJEZ1ByZXNlcnZlU2VsZWN0aW9uKGEpe3RoaXMuc2VsZWN0aW9uLnByZXNlcnZlU2VsZWN0aW9uPWF9c2V0IHJvd1NlbGVjdGlvbk1vZGUoYSl7dGhpcy5zZWxlY3Rpb24ucm93U2VsZWN0aW9uTW9kZT1hfXNldCB0cmFja0J5KGEpe3RoaXMuaXRlbXMudHJhY2tCeT1h''@;'; put 'put ''fWdldCBhbGxTZWxlY3RlZCgpe3JldHVybiB0aGlzLnNlbGVjdGlvbi5pc0FsbFNlbGVjdGVkKCl9c2V0IGFsbFNlbGVjdGVkKGEpe3RoaXMuY3VzdG9tU2VsZWN0QWxsRW5hYmxlZD90aGlzLmN1c3RvbVNlbGVjdEFsbC5lbWl0KGEpOnRoaXMuc2VsZWN0aW9uLnRvZ2dsZUFsbCgpfW5nQWZ0''@;'; put 'put ''ZXJDb250ZW50SW5pdCgpe3RoaXMuaXRlbXMuc21hcnR8fCh0aGlzLml0ZW1zLmFsbD10aGlzLnJvd3MubWFwKGQ9PmQuaXRlbSkpO2NvbnN0IGE9dGhpcy5yb3dzLmNoYW5nZXMucGlwZShiZChkPT5IVChfbyhkLm1hcChoPT5oLml0ZW0pKSxpOShkLm1hcChoPT5oLml0ZW1DaGFuZ2VzKSku''@;'; put 'put ''cGlwZShfOSgwKSkpKSk7dGhpcy5fc3Vic2NyaXB0aW9ucy5wdXNoKGEuc3Vic2NyaWJlKGQ9Pnt0aGlzLml0ZW1zLnNtYXJ0fHwodGhpcy5pdGVtcy5hbGw9ZCl9KSx0aGlzLnJvd3MuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pntmb3IobGV0IGQ9dGhpcy5fZGlzcGxheWVkUm93cy5sZW5ndGgt''@;'; put 'put ''MTtkPj0wO2QtLSl0aGlzLl9kaXNwbGF5ZWRSb3dzLmdldChkKS5kZXN0cm95ZWQmJnRoaXMuX2Rpc3BsYXllZFJvd3MucmVtb3ZlKGQpO2lmKHRoaXMucm93cy5mb3JFYWNoKGQ9Pnt0aGlzLl9kaXNwbGF5ZWRSb3dzLmluc2VydChkLl92aWV3KX0pLHRoaXMudXBkYXRlRGV0YWlsU3RhdGUo''@;'; put 'put ''KSx0aGlzLnZpcnR1YWxTY3JvbGwpe2NvbnN0IGQ9dGhpcy5rZXlOYXZpZ2F0aW9uLmdldEFjdGl2ZUNlbGwoKTtkJiZ0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntzZXRUaW1lb3V0KCgpPT50aGlzLmtleU5hdmlnYXRpb24uc2V0QWN0aXZlQ2VsbChkKSl9KX19KSl9bmdBZnRl''@;'; put 'put ''clZpZXdJbml0KCl7dGhpcy5rZXlOYXZpZ2F0aW9uLmluaXRpYWxpemVLZXlHcmlkKHRoaXMuZWwubmF0aXZlRWxlbWVudCksdGhpcy51cGRhdGVEZXRhaWxTdGF0ZSgpLHRoaXMucmVmcmVzaC5lbWl0KHRoaXMuc3RhdGVQcm92aWRlci5zdGF0ZSksdGhpcy5fc3Vic2NyaXB0aW9ucy5wdXNo''@;'; put 'put ''KHRoaXMuc3RhdGVQcm92aWRlci5jaGFuZ2Uuc3Vic2NyaWJlKGE9PnRoaXMucmVmcmVzaC5lbWl0KGEpKSx0aGlzLnNlbGVjdGlvbi5jaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09U2wuU2luZ2xlP3RoaXMuc2luZ2xlU2VsZWN0ZWRDaGFuZ2Vk''@;'; put 'put ''LmVtaXQoYSk6dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PVNsLk11bHRpJiZ0aGlzLnNlbGVjdGVkQ2hhbmdlZC5lbWl0KGEpfSksdGhpcy5wYWdlLmNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmtleU5hdmlnYXRpb24ucmVzZXRLZXlHcmlkKCksdGhpcy5jbHJEZ0Rpc2FibGVQ''@;'; put 'put ''YWdlRm9jdXN8fHRoaXMuZGF0YWdyaWRUYWJsZS5uYXRpdmVFbGVtZW50LmZvY3VzKCl9KSx0aGlzLmRpc3BsYXlNb2RlLnZpZXcuc3Vic2NyaWJlKGE9Pntmb3IobGV0IGQ9dGhpcy5fcHJvamVjdGVkRGlzcGxheUNvbHVtbnMubGVuZ3RoO2Q+MDtkLS0pdGhpcy5fcHJvamVjdGVkRGlzcGxh''@;'; put 'put ''eUNvbHVtbnMuZGV0YWNoKCk7Zm9yKGxldCBkPXRoaXMuX3Byb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucy5sZW5ndGg7ZD4wO2QtLSl0aGlzLl9wcm9qZWN0ZWRDYWxjdWxhdGlvbkNvbHVtbnMuZGV0YWNoKCk7Zm9yKGxldCBkPXRoaXMuX2NhbGN1bGF0aW9uUm93cy5sZW5ndGg7ZD4wO2Qt''@;'; put 'put ''LSl0aGlzLl9jYWxjdWxhdGlvblJvd3MuZGV0YWNoKCk7Zm9yKGxldCBkPXRoaXMuX2Rpc3BsYXllZFJvd3MubGVuZ3RoO2Q+MDtkLS0pdGhpcy5fZGlzcGxheWVkUm93cy5kZXRhY2goKTthPT09QXcuRElTUExBWT8odGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVs''@;'; put 'put ''ZW1lbnQsImRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIiksdGhpcy5jb2x1bW5zLmZvckVhY2goZD0+e3RoaXMuX3Byb2plY3RlZERpc3BsYXlDb2x1bW5zLmluc2VydChkLl92aWV3KX0pLHRoaXMucm93cy5mb3JFYWNoKGQ9Pnt0aGlzLl9kaXNwbGF5ZWRSb3dzLmluc2VydChkLl92aWV3KX0p''@;'; put 'put ''KToodGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIiksdGhpcy5jb2x1bW5zLmZvckVhY2goZD0+e3RoaXMuX3Byb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucy5pbnNlcnQoZC5fdmlldyl9KSx0aGlzLnJvd3MuZm9y''@;'; put 'put ''RWFjaChkPT57dGhpcy5fY2FsY3VsYXRpb25Sb3dzLmluc2VydChkLl92aWV3KX0pKX0pKSx0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2goVGYodGhpcy5kb2N1bWVudC5ib2R5LCJrZXlkb3duIikuc3Vic2NyaWJlKGE9PnsiU2hpZnQi''@;'; put 'put ''PT09YS5rZXkmJih0aGlzLnNlbGVjdGlvbi5zaGlmdFByZXNzZWQ9ITApfSksVGYodGhpcy5kb2N1bWVudC5ib2R5LCJrZXl1cCIpLnN1YnNjcmliZShhPT57IlNoaWZ0Ij09PWEua2V5JiYodGhpcy5zZWxlY3Rpb24uc2hpZnRQcmVzc2VkPSExKX0pKX0pfW5nT25EZXN0cm95KCl7dGhpcy5f''@;'; put 'put ''c3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9dG9nZ2xlQWxsU2VsZWN0ZWQoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuc2VsZWN0QWxsQ2hlY2tib3g/Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKX1yZXNpemUoKXt0aGlzLm9yZ2FuaXplci5yZXNpemUoKX11cGRh''@;'; put 'put ''dGVEZXRhaWxTdGF0ZSgpe2lmKHRoaXMuZGV0YWlsU2VydmljZS5zdGF0ZSYmdGhpcy5kZXRhaWxTZXJ2aWNlLmlzT3Blbil7Y29uc3QgYT10aGlzLnJvd3MuZmluZChkPT50aGlzLml0ZW1zLnRyYWNrQnkoZC5pdGVtKT09PXRoaXMuaXRlbXMudHJhY2tCeSh0aGlzLmRldGFpbFNlcnZpY2Uu''@;'; put 'put ''c3RhdGUpKTthP3RoaXMuZGV0YWlsU2VydmljZS5vcGVuKGEuaXRlbSxhLmRldGFpbEJ1dHRvbi5uYXRpdmVFbGVtZW50KTp0aGlzLnZpcnR1YWxTY3JvbGx8fHNldFRpbWVvdXQoKCk9Pnt0aGlzLmRldGFpbFNlcnZpY2UuY2xvc2UoKX0pfX1kYXRhQ2hhbmdlZCgpe3RoaXMuaXRlbXMucmVm''@;'; put 'put ''cmVzaCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShVOSkscWUobDUpLHFlKHh3KSxxZShrdykscWUoTXcpLHFlKFEzZSkscWUoR1gpLHFlKE5vKSxxZShVMykscWUoR3MpLHFlKG5hKSxxZShtNikscWUocHMpLHFlKHdIKSxxZShYYSkpfSxj''@;'; put 'put ''Llx1MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0YWdyaWQiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKHBvKGgsSjNlLDUpLHBvKGgsVHcsNSkscG8oaCxaWCw1KSxwbyhoLFo5LDQpLHBvKGgseTYsNCkpLDImYSl7bGV0IGY7Z2koZj1t''@;'; put 'put ''aSgpKSYmKGQudmlydHVhbFNjcm9sbD1mLmZpcnN0KSxnaShmPW1pKCkpJiYoZC5pdGVyYXRvcj1mLmZpcnN0KSxnaShmPW1pKCkpJiYoZC5wbGFjZWhvbGRlcj1mLmZpcnN0KSxnaShmPW1pKCkpJiYoZC5jb2x1bW5zPWYpLGdpKGY9bWkoKSkmJihkLnJvd3M9Zil9fSx2aWV3UXVlcnk6ZnVu''@;'; put 'put ''Y3Rpb24oYSxkKXtpZigxJmEmJihVYShhR2UsNSxuYSksVWEob0dlLDUsbmEpLFVhKHNHZSw1LGJlKSxVYShsR2UsNSxiZSksVWEoY0dlLDUsYmUpLFVhKHVHZSw1LGJlKSxVYShkR2UsNSxiZSksVWEoaEdlLDUpKSwyJmEpe2xldCBoO2dpKGg9bWkoKSkmJihkLmRhdGFncmlkPWguZmlyc3Qp''@;'; put 'put ''LGdpKGg9bWkoKSkmJihkLmRhdGFncmlkVGFibGU9aC5maXJzdCksZ2koaD1taSgpKSYmKGQuc2Nyb2xsYWJsZUNvbHVtbnM9aC5maXJzdCksZ2koaD1taSgpKSYmKGQuX3Byb2plY3RlZERpc3BsYXlDb2x1bW5zPWguZmlyc3QpLGdpKGg9bWkoKSkmJihkLl9wcm9qZWN0ZWRDYWxjdWxhdGlv''@;'; put 'put ''bkNvbHVtbnM9aC5maXJzdCksZ2koaD1taSgpKSYmKGQuX2Rpc3BsYXllZFJvd3M9aC5maXJzdCksZ2koaD1taSgpKSYmKGQuX2NhbGN1bGF0aW9uUm93cz1oLmZpcnN0KSxnaShoPW1pKCkpJiYoZC5zZWxlY3RBbGxDaGVja2JveD1oLmZpcnN0KX19LGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdz''@;'; put 'put ''OmZ1bmN0aW9uKGEsZCl7MiZhJiZ4cigiZGF0YWdyaWQtaG9zdCIsITApKCJkYXRhZ3JpZC1kZXRhaWwtb3BlbiIsZC5kZXRhaWxTZXJ2aWNlLmlzT3Blbil9LGlucHV0czp7bG9hZGluZ01vcmVJdGVtczpbMCwiY2xyTG9hZGluZ01vcmVJdGVtcyIsImxvYWRpbmdNb3JlSXRlbXMiXSxjbHJE''@;'; put 'put ''Z1NpbmdsZVNlbGVjdGlvbkFyaWFMYWJlbDoiY2xyRGdTaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWwiLGNsckRnU2luZ2xlQWN0aW9uYWJsZUFyaWFMYWJlbDoiY2xyRGdTaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsIixjbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsOiJjbHJEZXRhaWxFeHBh''@;'; put 'put ''bmRhYmxlQXJpYUxhYmVsIixjbHJEZ0Rpc2FibGVQYWdlRm9jdXM6ImNsckRnRGlzYWJsZVBhZ2VGb2N1cyIsY3VzdG9tU2VsZWN0QWxsRW5hYmxlZDpbMCwiY2xyRGdDdXN0b21TZWxlY3RBbGxFbmFibGVkIiwiY3VzdG9tU2VsZWN0QWxsRW5hYmxlZCJdLGxvYWRpbmc6WzAsImNsckRnTG9h''@;'; put 'put ''ZGluZyIsImxvYWRpbmciXSxzZWxlY3RlZDpbMCwiY2xyRGdTZWxlY3RlZCIsInNlbGVjdGVkIl0sc2luZ2xlU2VsZWN0ZWQ6WzAsImNsckRnU2luZ2xlU2VsZWN0ZWQiLCJzaW5nbGVTZWxlY3RlZCJdLGNsckRnUHJlc2VydmVTZWxlY3Rpb246ImNsckRnUHJlc2VydmVTZWxlY3Rpb24iLHJv''@;'; put 'put ''d1NlbGVjdGlvbk1vZGU6WzAsImNsckRnUm93U2VsZWN0aW9uIiwicm93U2VsZWN0aW9uTW9kZSJdLHRyYWNrQnk6WzAsImNsckRnSXRlbXNUcmFja0J5IiwidHJhY2tCeSJdfSxvdXRwdXRzOntzZWxlY3RlZENoYW5nZWQ6ImNsckRnU2VsZWN0ZWRDaGFuZ2UiLHNpbmdsZVNlbGVjdGVkQ2hh''@;'; put 'put ''bmdlZDoiY2xyRGdTaW5nbGVTZWxlY3RlZENoYW5nZSIscmVmcmVzaDoiY2xyRGdSZWZyZXNoIixjdXN0b21TZWxlY3RBbGw6ImNsckRnQ3VzdG9tU2VsZWN0QWxsIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbaGEoW2t3LHhILHM1LG02LGw1LFU5LE13LHh3LGhBLFUzLFEzZSxVWCxjNSxH''@;'; put 'put ''WCx3SF0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6cEdlLGRlY2xzOjM1LHZhcnM6OSxjb25zdHM6W1siZGF0YWdyaWQiLCIiXSxbImRhdGFncmlkVGFibGUiLCIiXSxbInByb2plY3RlZERpc3BsYXlDb2x1bW5zIiwiIl0sWyJkaXNwbGF5ZWRSb3dzIiwiIl0sWyJwcm9qZWN0ZWRDYWxjdWxhdGlv''@;'; put 'put ''bkNvbHVtbnMiLCIiXSxbImNhbGN1bGF0aW9uUm93cyIsIiJdLFsic2VsZWN0QWxsQ2hlY2tib3giLCIiXSxbMSwiZGF0YWdyaWQtb3V0ZXItd3JhcHBlciJdLFsxLCJkYXRhZ3JpZC1pbm5lci13cmFwcGVyIl0sWzEsImRhdGFncmlkIl0sWzEsImRhdGFncmlkLXRhYmxlLXdyYXBwZXIiXSxb''@;'; put 'put ''InJvbGUiLCJncmlkIiwidGFiaW5kZXgiLCItMSIsMSwiZGF0YWdyaWQtdGFibGUiXSxbInJvbGUiLCJyb3dncm91cCIsMSwiZGF0YWdyaWQtaGVhZGVyIl0sWyJyb2xlIiwicm93IiwxLCJkYXRhZ3JpZC1yb3ciXSxbMSwiZGF0YWdyaWQtcm93LW1hc3RlciIsImRhdGFncmlkLXJvdy1mbGV4''@;'; put 'put ''Il0sWzEsImRhdGFncmlkLXJvdy1zdGlja3kiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLCJjbGFzcyIsImRhdGFncmlkLWNvbHVtbiBkYXRhZ3JpZC1zZWxlY3QgZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwzLCJrZXlkb3duLnNwYWNlIiw0LCJuZ0lmIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVy''@;'; put 'put ''IiwiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4gZGF0YWdyaWQtc2VsZWN0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiIsNCwibmdJZiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsImNsYXNzIiwiZGF0YWdyaWQtY29sdW1uIGRhdGFncmlkLXJvdy1hY3Rpb25zIGRhdGFncmlkLWZpeGVkLWNvbHVt''@;'; put 'put ''biIsNCwibmdJZiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsImNsYXNzIiwiZGF0YWdyaWQtY29sdW1uIGRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgZGF0YWdyaWQtZml4ZWQtY29sdW1uIiw0LCJuZ0lmIl0sWzEsImRhdGFncmlkLXJvdy1zY3JvbGxhYmxlIl0sWyJyb2xlIiwicHJlc2Vu''@;'; put 'put ''dGF0aW9uIiwxLCJkYXRhZ3JpZC1yb3dzIl0sWyJjbGFzcyIsImRhdGFncmlkLXJvdy1sb2FkaW5nIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwiZGF0YWdyaWQtc3Bpbm5lciIsNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1jYWxjdWxhdGlvbi10YWJsZSJdLFsxLCJkYXRhZ3JpZC1j''@;'; put 'put ''YWxjdWxhdGlvbi1oZWFkZXIiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDEsImRhdGFncmlkLWNvbHVtbiIsImRhdGFncmlkLXNlbGVjdCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiIsMywia2V5ZG93bi5zcGFjZSJdLFsiY2xhc3MiLCJjbHItY2hlY2tib3gtd3JhcHBlciIsNCwibmdJZiJd''@;'; put 'put ''LFsxLCJkYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yIl0sWzEsImNsci1jaGVja2JveC13cmFwcGVyIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJ0YWJpbmRleCIsIi0xIiwzLCJuZ01vZGVsQ2hhbmdlIiwiaWQiLCJuZ01vZGVsIl0sWzEsImNsci1jb250cm9sLWxhYmVsIiwiY2xyLWNvbC1udWxs''@;'; put 'put ''IiwzLCJmb3IiXSxbMSwiY2xyLXNyLW9ubHkiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDEsImRhdGFncmlkLWNvbHVtbiIsImRhdGFncmlkLXNlbGVjdCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMSwiZGF0YWdyaWQtY29sdW1uIiwiZGF0YWdy''@;'; put 'put ''aWQtcm93LWFjdGlvbnMiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDEsImRhdGFncmlkLWNvbHVtbiIsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iXSxbMSwiZGF0YWdyaWQtcm93LWxvYWRpbmciXSxb''@;'; put 'put ''ImNsck1lZGl1bSIsIiJdLFsxLCJkYXRhZ3JpZC1zcGlubmVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoZkdlKSxXcigwKSxkZSgxLCJkaXYiLDcpKDIsImRpdiIsOCkoMywiZGl2Iiw5LDApKDUsImRpdiIsMTApKDYsImRpdiIsMTEsMSkoOCwiZGl2IiwxMikoOSwiZGl2''@;'; put 'put ''IiwxMykoMTAsImRpdiIsMTQpKDExLCJkaXYiLDE1KSxndCgxMixtR2UsMywxLCJkaXYiLDE2KSgxMyx2R2UsNCwxLCJkaXYiLDE3KSgxNCx5R2UsNCwxLCJkaXYiLDE4KSgxNSxiR2UsNCwxLCJkaXYiLDE5KSxoZSgpLGRlKDE2LCJkaXYiLDIwKSx6bCgxNyxudWxsLDIpLGhlKCkoKSgpKCks''@;'; put 'put ''ZGUoMTksImRpdiIsMjEpLGd0KDIwLF9HZSw1LDEsImNsci1kZy1yb3ciLDIyKSx6bCgyMSxudWxsLDMpLGd0KDIzLHdHZSw1LDEsImNsci1kZy1yb3ciLDIyKSxXcigyNCwxKSxndCgyNSxDR2UsMSwwLCJjbHItZGctcGxhY2Vob2xkZXIiLDIzKSxoZSgpKCkoKSgpLFdyKDI2LDIpLGd0KDI3''@;'; put 'put ''LFNHZSwzLDAsImRpdiIsMjQpLGhlKCksV3IoMjgsMyksaGUoKSxkZSgyOSwiZGl2IiwyNSkoMzAsImRpdiIsMjYpLHpsKDMxLG51bGwsNCksaGUoKSx6bCgzMyxudWxsLDUpLGhlKCkpLDImYSYmKGZlKDMpLE5yKCJhcmlhLWhpZGRlbiIsISFkLmRldGFpbFNlcnZpY2UuaXNPcGVufHxudWxs''@;'; put 'put ''KSxmZSg5KSxFZSgibmdJZiIsZC5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWQuU0VMRUNUSU9OX1RZUEUuTXVsdGkpLGZlKCksRWUoIm5nSWYiLGQuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1kLlNFTEVDVElPTl9UWVBFLlNpbmdsZSksZmUoKSxFZSgibmdJZiIsZC5yb3dBY3Rpb25T''@;'; put 'put ''ZXJ2aWNlLmhhc0FjdGlvbmFibGVSb3cpLGZlKCksRWUoIm5nSWYiLGQuZXhwYW5kYWJsZVJvd3MuaGFzRXhwYW5kYWJsZVJvd3x8ZC5kZXRhaWxTZXJ2aWNlLmVuYWJsZWQpLGZlKDUpLEVlKCJuZ0lmIixkLmxvYWRpbmdNb3JlSXRlbXMpLGZlKDMpLEVlKCJuZ0lmIixkLmxvYWRpbmdNb3Jl''@;'; put 'put ''SXRlbXMpLGZlKDIpLEVlKCJuZ0lmIiwhZC5wbGFjZWhvbGRlciksZmUoMiksRWUoIm5nSWYiLGQubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W0NhLENzLHNoLGhsLHJsLGZoLFczLFpYLHk2LCRYLGI0LGI2LGo5LHo5XSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjb25zdCBocWU9Yz0+Yzts''@;'; put 'put ''ZXQgZXBlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmNvbW1vblN0cmluZ3M9YSx0aGlzLmNvbHVtbnNTZXJ2aWNlPWQsdGhpcy5hbGxTZWxlY3RlZD1uZXcgWHJ9Z2V0IGNsckFsbFNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuYWxsU2VsZWN0ZWQuYXNPYnNlcnZhYmxlKCl9''@;'; put 'put ''Z2V0IGFsbEhpZGVhYmxlc1Zpc2libGUoKXtyZXR1cm4gMD09PXRoaXMuaGlkZWFibGVDb2x1bW5zKCkuZmlsdGVyKGE9PmEudmFsdWUuaGlkZGVuKS5sZW5ndGh9c2VsZWN0QWxsKCl7dGhpcy5oaWRlYWJsZUNvbHVtbnMoKS5mb3JFYWNoKGE9PnRoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0''@;'; put 'put ''YXRlQ2hhbmdlKGEse2hpZGRlbjohMSxjaGFuZ2VzOlt4ZC5ISURERU5dfSkpLHRoaXMuYWxsU2VsZWN0ZWQubmV4dCghMCl9aGlkZWFibGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5maWx0ZXIoYT0+YS52YWx1ZS5oaWRlYWJsZSl9fXJldHVybiBjLlx1''@;'; put 'put ''MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKHBzKSxxZShjNSkpfSxjLlx1MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctY29sdW1uLXRvZ2dsZS1idXR0b24iXV0sb3V0cHV0czp7Y2xyQWxsU2VsZWN0ZWQ6ImNsckFsbFNlbGVjdGVkIn0sc3Rh''@;'; put 'put ''bmRhbG9uZTohMSxkZWNsczoyLHZhcnM6Mixjb25zdHM6W1sidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLCJzd2l0Y2gtYnV0dG9uIiwzLCJjbGljayIsImRpc2FibGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoZGUoMCwiYnV0dG9uIiwwKSxP''@;'; put 'put ''dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuc2VsZWN0QWxsKCl9KSxQZSgxKSxoZSgpKSwyJmEmJihFZSgiZGlzYWJsZWQiLGQuYWxsSGlkZWFibGVzVmlzaWJsZSksZmUoKSxJcigiICIsZC5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0QWxsLCIgIikpfSxlbmNhcHN1bGF0aW9uOjJ9''@;'; put 'put ''KSxjfSkoKSx0cGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy5jb2x1bW5zU2VydmljZT1kLHRoaXMucG9wb3ZlcklkPU91KCksdGhpcy5vcGVuU3RhdGU9ITEsdGhpcy5zbWFydFBvc2l0aW9uPXtheGlzOkgxLlZFUlRJQ0FMLHNp''@;'; put 'put ''ZGU6RGYuQkVGT1JFLGFuY2hvcjpVcy5TVEFSVCxjb250ZW50OlVzLlNUQVJUfSx0aGlzLnRyYWNrQnlGbj1ocWUsdGhpcy5zdWJzY3JpcHRpb249aC5vcGVuQ2hhbmdlLnN1YnNjcmliZShmPT50aGlzLm9wZW5TdGF0ZT1mKX1nZXQgYWxsQ29sdW1uc1Zpc2libGUoKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''YWxsQ29sdW1uc1Zpc2libGV9c2V0IGFsbENvbHVtbnNWaXNpYmxlKGEpe3RoaXMuX2FsbENvbHVtbnNWaXNpYmxlPWF9Z2V0IGhpZGVhYmxlQ29sdW1uU3RhdGVzKCl7cmV0dXJuIHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5maWx0ZXIoZD0+ZC52YWx1ZS5oaWRlYWJsZSkubWFwKGQ9''@;'; put 'put ''PmQudmFsdWUpfWdldCBoYXNPbmx5T25lVmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMubGVuZ3RoLXRoaXMuaGlkZWFibGVDb2x1bW5TdGF0ZXMubGVuZ3RoPT0wJiYxPT09dGhpcy5oaWRlYWJsZUNvbHVtblN0YXRlcy5maWx0ZXIoZD0+IWQuaGlk''@;'; put 'put ''ZGVuKS5sZW5ndGh9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXRvZ2dsZUNvbHVtblN0YXRlKGEsZCl7Y29uc3QgaD10aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMuZmlsdGVyKGY9PmYudmFsdWU9PT1hKVswXTt0aGlzLmNvbHVtbnNTZXJ2aWNlLmVt''@;'; put 'put ''aXRTdGF0ZUNoYW5nZShoLHtoaWRkZW46ZCxjaGFuZ2VzOlt4ZC5ISURERU5dfSl9dG9nZ2xlU3dpdGNoUGFuZWwoKXt0aGlzLm9wZW5TdGF0ZT0hdGhpcy5vcGVuU3RhdGV9YWxsQ29sdW1uc1NlbGVjdGVkKCl7dGhpcy5hbGxTZWxlY3RlZEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygp''@;'; put 'put ''fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShwcykscWUoYzUpLHFlKHljKSl9LGMuXHUwMjc1Y21wPWFyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jb2x1bW4tdG9nZ2xlIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYm''@;'; put 'put ''VWEoeEdlLDUsbmEpLDImYSl7bGV0IGg7Z2koaD1taSgpKSYmKGQuYWxsU2VsZWN0ZWRFbGVtZW50PWguZmlyc3QpfX0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJnhyKCJjb2x1bW4tc3dpdGNoLXdyYXBwZXIiLCEwKSgiYWN0aXZlIixkLm9wZW5TdGF0ZSl9''@;'; put 'put ''LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W3lmKFtuNV0pXSxkZWNsczozLHZhcnM6OCxjb25zdHM6W1siYWxsU2VsZWN0ZWQiLCIiXSxbInJvbGUiLCJidXR0b24iLCJ0eXBlIiwiYnV0dG9uIiwiY2xyUG9wb3ZlckFuY2hvciIsIiIsImNsclBvcG92ZXJPcGVuQ2xvc2VCdXR0b24iLCIiLDEs''@;'; put 'put ''ImJ0biIsImJ0bi1zbSIsImNvbHVtbi10b2dnbGUtLWFjdGlvbiJdLFsiY2xhc3MiLCJjb2x1bW4tc3dpdGNoIiwicm9sZSIsImRpYWxvZyIsImNka1RyYXBGb2N1cyIsIiIsMywiaWQiLDQsImNsclBvcG92ZXJDb250ZW50IiwiY2xyUG9wb3ZlckNvbnRlbnRBdCIsImNsclBvcG92ZXJDb250''@;'; put 'put ''ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSJdLFsicm9sZSIsImRpYWxvZyIsImNka1RyYXBGb2N1cyIsIiIsMSwiY29sdW1uLXN3aXRjaCIsMywiaWQiXSxbMSwic3dpdGNoLWhlYWRlciJdLFsidGFiaW5kZXgiLCItMSIsMSwiY2xyLXNy''@;'; put 'put ''LW9ubHkiXSxbImNsclBvcG92ZXJDbG9zZUJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwidG9nZ2xlLXN3aXRjaC1jbG9zZS1idXR0b24iXSxbInNoYXBlIiwid2luZG93LWNsb3NlIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIl0sWzEsImNsci1z''@;'; put 'put ''ci1vbmx5Il0sWzEsInN3aXRjaC1jb250ZW50IiwibGlzdC11bnN0eWxlZCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbMSwic3dpdGNoLWZvb3RlciJdLFszLCJjbHJBbGxTZWxlY3RlZCJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLDMsIm5n''@;'; put 'put ''TW9kZWxDaGFuZ2UiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxbMywibmdUZW1wbGF0ZU91dGxldCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGRlKDAsImJ1dHRvbiIsMSksUGUoMSksaGUoKSxndCgyLEFHZSwxNSw5LCJkaXYiLDIpKSwyJmEmJihOcigiYXJpYS1jb250cm9scyIs''@;'; put 'put ''ZC5wb3BvdmVySWQpKCJhcmlhLWV4cGFuZGVkIixkLm9wZW5TdGF0ZSkoImFyaWEtaGFzcG9wdXAiLCJtZW51IiksZmUoKSxJcigiICIsZC5jb21tb25TdHJpbmdzLmtleXMucGlja0NvbHVtbnMsIiAiKSxmZSgpLEVlKCJjbHJQb3BvdmVyQ29udGVudCIsZC5vcGVuU3RhdGUpKCJjbHJQb3Bv''@;'; put 'put ''dmVyQ29udGVudEF0IixkLnNtYXJ0UG9zaXRpb24pKCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCEwKSgiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIiwhMCkpfSxkZXBlbmRlbmNpZXM6W2hzLHlkLHl3LGZzLENzLGhoLHkyLHNoLGhsLHJsLFFULFFmZSxu''@;'; put 'put ''QSx0QSxlcGVdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHJwZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZXhwYW5kYWJsZVJvd3NDb3VudD1hLGEmJmEucmVnaXN0ZXIoKX1uZ09uRGVzdHJveSgpe3RoaXMuZXhwYW5kYWJsZVJvd3NDb3VudCYmdGhpcy5leHBhbmRhYmxl''@;'; put 'put ''Um93c0NvdW50LnVucmVnaXN0ZXIoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoeHcsOCkpfSxjLlx1MDI3NWRpcj1Zcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJJZkV4cGFuZGVkIiwiIl1dLHN0YW5kYWxvbmU6ITF9KSxjfSkoKSxU''@;'; put 'put ''SD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuc2VsZWN0aW9uPWEsdGhpcy5kZXRhaWxTZXJ2aWNlPWQsdGhpcy5jb2x1bW5zU2VydmljZT1oLHRoaXMuY29tbW9uU3RyaW5ncz1mLHRoaXMuU0VMRUNUSU9OX1RZUEU9U2x9Z2V0IGhhc0hpZGVhYmxlQ29sdW1ucygp''@;'; put 'put ''e3JldHVybiB0aGlzLmNvbHVtbnNTZXJ2aWNlLmhhc0hpZGVhYmxlQ29sdW1uc319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoa3cpLHFlKFUzKSxxZShjNSkscWUocHMpKX0sYy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xy''@;'; put 'put ''LWRnLWZvb3RlciJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmeHIoImRhdGFncmlkLWZvb3RlciIsITApfSxzdGFuZGFsb25lOiExLG5nQ29udGVudFNlbGVjdG9yczpJR2UsZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbNCwibmdJZiJdLFsxLCJjbHItZm9y''@;'; put 'put ''bS1jb250cm9sLWRpc2FibGVkIl0sWzEsImRhdGFncmlkLWZvb3Rlci1zZWxlY3QiXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwiY2hlY2tlZCIsImNoZWNrZWQiLCJkaXNhYmxlZCIsIiJdLFsxLCJjbHItc3Itb25seSJdLFsxLCJkYXRhZ3JpZC1mb290ZXItZGVzY3Jp''@;'; put 'put ''cHRpb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShER2UpLGd0KDAsUkdlLDgsMiwibmctY29udGFpbmVyIiwwKSgxLE9HZSw0LDEsIm5nLWNvbnRhaW5lciIsMCksV3IoMikpLDImYSYmKEVlKCJuZ0lmIixkLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09ZC5TRUxFQ1RJ''@;'; put 'put ''T05fVFlQRS5NdWx0aSYmZC5zZWxlY3Rpb24uY3VycmVudC5sZW5ndGg+MCksZmUoKSxFZSgibmdJZiIsIWQuZGV0YWlsU2VydmljZS5pc09wZW4pKX0sZGVwZW5kZW5jaWVzOltDYSxDcyxoaCx5Mix0cGVdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NvbnN0IEtYPW5ldyBqbigiQ09MVU1O''@;'; put 'put ''X1NUQVRFIiksbXFlPXtwcm92aWRlOktYLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gZ3FlKCl7cmV0dXJuIG5ldyBNaSh7Y2hhbmdlczpbXX0pfX07bGV0IG1BPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5wYWdlPWEsdGhpcy5wYWdlU2l6ZU9wdGlvbnNJZD1PdSgpfW5nT25Jbml0''@;'; put 'put ''KCl7KCF0aGlzLnBhZ2VTaXplT3B0aW9uc3x8MD09PXRoaXMucGFnZVNpemVPcHRpb25zLmxlbmd0aCkmJih0aGlzLnBhZ2VTaXplT3B0aW9ucz1bdGhpcy5wYWdlLnNpemVdKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUobTYpKX0sYy5cdTAy''@;'; put 'put ''NzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLXBhZ2Utc2l6ZSJdXSxpbnB1dHM6e3BhZ2VTaXplT3B0aW9uczpbMCwiY2xyUGFnZVNpemVPcHRpb25zIiwicGFnZVNpemVPcHRpb25zIl0scGFnZVNpemVPcHRpb25zSWQ6WzAsImNsclBhZ2VTaXplT3B0aW9uc0lkIiwicGFn''@;'; put 'put ''ZVNpemVPcHRpb25zSWQiXX0sc3RhbmRhbG9uZTohMSxuZ0NvbnRlbnRTZWxlY3RvcnM6VG8sZGVjbHM6NSx2YXJzOjYsY29uc3RzOltbMywiZm9yIl0sWzEsImNsci1zZWxlY3Qtd3JhcHBlciJdLFszLCJuZ01vZGVsQ2hhbmdlIiwiaWQiLCJuZ01vZGVsIl0sWzMsIm5nVmFsdWUiLDQsIm5n''@;'; put 'put ''Rm9yIiwibmdGb3JPZiJdLFszLCJuZ1ZhbHVlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxkZSgwLCJsYWJlbCIsMCksV3IoMSksaGUoKSxkZSgyLCJkaXYiLDEpKDMsInNlbGVjdCIsMiksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBmaShkLnBh''@;'; put 'put ''Z2Uuc2l6ZSxmKXx8KGQucGFnZS5zaXplPWYpLGZ9KSxndCg0LFBHZSwyLDIsIm9wdGlvbiIsMyksaGUoKSgpKSwyJmEmJihFZSgiZm9yIixkLnBhZ2VTaXplT3B0aW9uc0lkKSxmZSgzKSx4cigiY2xyLXBhZ2Utc2l6ZS1zZWxlY3QiLCEwKSxFZSgiaWQiLGQucGFnZVNpemVPcHRpb25zSWQp''@;'; put 'put ''LGxpKCJuZ01vZGVsIixkLnBhZ2Uuc2l6ZSksZmUoKSxFZSgibmdGb3JPZiIsZC5wYWdlU2l6ZU9wdGlvbnMpKX0sZGVwZW5kZW5jaWVzOltocyxDcyx4ZixFZixNZixobCxybF0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksQUg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhp''@;'; put 'put ''cy5wYWdlPWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5kZXRhaWxTZXJ2aWNlPWgsdGhpcy5jdXJyZW50Q2hhbmdlZD1uZXcgWHIoITEpLGEuYWN0aXZhdGVkPSEwfWdldCBwYWdlU2l6ZSgpe3JldHVybiB0aGlzLnBhZ2Uuc2l6ZX1zZXQgcGFnZVNpemUoYSl7Im51bWJlciI9PXR5cGVv''@;'; put 'put ''ZiBhJiYodGhpcy5wYWdlLnNpemU9YSl9Z2V0IHRvdGFsSXRlbXMoKXtyZXR1cm4gdGhpcy5wYWdlLnRvdGFsSXRlbXN9c2V0IHRvdGFsSXRlbXMoYSl7Im51bWJlciI9PXR5cGVvZiBhJiYodGhpcy5wYWdlLnRvdGFsSXRlbXM9YSl9Z2V0IGxhc3RQYWdlKCl7cmV0dXJuIHRoaXMucGFnZS5s''@;'; put 'put ''YXN0fXNldCBsYXN0UGFnZShhKXsibnVtYmVyIj09dHlwZW9mIGEmJih0aGlzLnBhZ2UubGFzdD1hKX1nZXQgY3VycmVudFBhZ2UoKXtyZXR1cm4gdGhpcy5wYWdlLmN1cnJlbnR9c2V0IGN1cnJlbnRQYWdlKGEpeyJudW1iZXIiPT10eXBlb2YgYSYmKHRoaXMucGFnZS5jdXJyZW50PWEpfWdl''@;'; put 'put ''dCBmaXJzdEl0ZW0oKXtyZXR1cm4gdGhpcy5wYWdlLmZpcnN0SXRlbX1nZXQgbGFzdEl0ZW0oKXtyZXR1cm4gdGhpcy5wYWdlLmxhc3RJdGVtfWdldCBtaWRkbGVQYWdlcygpe2NvbnN0IGE9W107cmV0dXJuIHRoaXMucGFnZS5jdXJyZW50PjEmJmEucHVzaCh0aGlzLnBhZ2UuY3VycmVudC0x''@;'; put 'put ''KSxhLnB1c2godGhpcy5wYWdlLmN1cnJlbnQpLHRoaXMucGFnZS5jdXJyZW50PHRoaXMucGFnZS5sYXN0JiZhLnB1c2godGhpcy5wYWdlLmN1cnJlbnQrMSksYX1uZ09uSW5pdCgpe3RoaXMucGFnZS5zaXplfHwodGhpcy5wYWdlLnNpemU9MTApLHRoaXMuX3BhZ2VTdWJzY3JpcHRpb249dGhp''@;'; put 'put ''cy5wYWdlLmNoYW5nZS5zdWJzY3JpYmUoYT0+dGhpcy5jdXJyZW50Q2hhbmdlZC5lbWl0KGEpKX1uZ09uRGVzdHJveSgpe3RoaXMucGFnZS5yZXNldFBhZ2VTaXplKCEwKSx0aGlzLl9wYWdlU3Vic2NyaXB0aW9uJiZ0aGlzLl9wYWdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9cHJldmlv''@;'; put 'put ''dXMoKXt0aGlzLnBhZ2UucHJldmlvdXMoKX1uZXh0KCl7dGhpcy5wYWdlLm5leHQoKX12ZXJpZnlDdXJyZW50UGFnZShhKXtwYXJzZUludChhLnRhcmdldC52YWx1ZSwxMCkhPT10aGlzLnBhZ2UuY3VycmVudCYmKGEudGFyZ2V0LnZhbHVlPXRoaXMucGFnZS5jdXJyZW50KX11cGRhdGVDdXJy''@;'; put 'put ''ZW50UGFnZShhKXtjb25zdCBkPXBhcnNlSW50KGEudGFyZ2V0LnZhbHVlLDEwKTtpc05hTihkKXx8KHRoaXMucGFnZS5jdXJyZW50PWQ8MT8xOmQ+dGhpcy5wYWdlLmxhc3Q/dGhpcy5wYWdlLmxhc3Q6ZCksdGhpcy5jdXJyZW50UGFnZUlucHV0UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWU9dGhp''@;'; put 'put ''cy5wYWdlLmN1cnJlbnQudG9TdHJpbmcoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUobTYpLHFlKHBzKSxxZShVMykpfSxjLlx1MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctcGFnaW5hdGlvbiJdXSxjb250ZW50UXVl''@;'; put 'put ''cmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZwbyhoLG1BLDUpLDImYSl7bGV0IGY7Z2koZj1taSgpKSYmKGQuX3BhZ2VTaXplQ29tcG9uZW50PWYuZmlyc3QpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZVYShGR2UsNSksMiZhKXtsZXQgaDtnaShoPW1pKCkpJiYoZC5j''@;'; put 'put ''dXJyZW50UGFnZUlucHV0UmVmPWguZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJnhyKCJwYWdpbmF0aW9uIiwhMCl9LGlucHV0czp7ZGlzYWJsZUN1cnJlbnRQYWdlSW5wdXQ6WzAsImNsckRnUGFnZUlucHV0RGlzYWJsZWQiLCJkaXNhYmxlQ3Vy''@;'; put 'put ''cmVudFBhZ2VJbnB1dCJdLHBhZ2VTaXplOlswLCJjbHJEZ1BhZ2VTaXplIiwicGFnZVNpemUiXSx0b3RhbEl0ZW1zOlswLCJjbHJEZ1RvdGFsSXRlbXMiLCJ0b3RhbEl0ZW1zIl0sbGFzdFBhZ2U6WzAsImNsckRnTGFzdFBhZ2UiLCJsYXN0UGFnZSJdLGN1cnJlbnRQYWdlOlswLCJjbHJEZ1Bh''@;'; put 'put ''Z2UiLCJjdXJyZW50UGFnZSJdfSxvdXRwdXRzOntjdXJyZW50Q2hhbmdlZDoiY2xyRGdQYWdlQ2hhbmdlIn0sc3RhbmRhbG9uZTohMSxuZ0NvbnRlbnRTZWxlY3RvcnM6TkdlLGRlY2xzOjIsdmFyczoyLGNvbnN0czpbWyJyZWFkT25seSIsIiJdLFsiY3VycmVudFBhZ2VJbnB1dCIsIiJdLFs0''@;'; put 'put ''LCJuZ0lmIl0sWyJjbGFzcyIsInBhZ2luYXRpb24tc2l6ZSIsNCwibmdJZiJdLFsxLCJwYWdpbmF0aW9uLWRlc2NyaXB0aW9uIl0sWyJjbGFzcyIsInBhZ2luYXRpb24tbGlzdCIsNCwibmdJZiJdLFsxLCJwYWdpbmF0aW9uLXNpemUiXSxbMSwicGFnaW5hdGlvbi1saXN0Il0sWyJ0eXBlIiwi''@;'; put 'put ''YnV0dG9uIiwxLCJwYWdpbmF0aW9uLWZpcnN0IiwzLCJjbGljayIsImRpc2FibGVkIl0sWzEsImNsci1zci1vbmx5Il0sWyJzaGFwZSIsInN0ZXAtZm9yd2FyZC0yIiwiZGlyZWN0aW9uIiwiZG93biJdLFsidHlwZSIsImJ1dHRvbiIsMSwicGFnaW5hdGlvbi1wcmV2aW91cyIsMywiY2xpY2si''@;'; put 'put ''LCJkaXNhYmxlZCJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsImxlZnQiXSxbInR5cGUiLCJ0ZXh0IiwiY2xhc3MiLCJwYWdpbmF0aW9uLWN1cnJlbnQgY2xyLWlucHV0IiwzLCJzaXplIiwidmFsdWUiLCJrZXlkb3duLmVudGVyIiwiYmx1ciIsNCwibmdJZiIsIm5nSWZFbHNlIl0s''@;'; put 'put ''WyJ0eXBlIiwiYnV0dG9uIiwxLCJwYWdpbmF0aW9uLW5leHQiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJyaWdodCJdLFsidHlwZSIsImJ1dHRvbiIsMSwicGFnaW5hdGlvbi1sYXN0IiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJzaGFwZSIs''@;'; put 'put ''InN0ZXAtZm9yd2FyZC0yIiwiZGlyZWN0aW9uIiwidXAiXSxbInR5cGUiLCJ0ZXh0IiwxLCJwYWdpbmF0aW9uLWN1cnJlbnQiLCJjbHItaW5wdXQiLDMsImtleWRvd24uZW50ZXIiLCJibHVyIiwic2l6ZSIsInZhbHVlIl0sWzEsInBhZ2luYXRpb24tZGVzY3JpcHRpb24tY29tcGFjdCJdXSx0''@;'; put 'put ''ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKEhHZSksZ3QoMCxVR2UsNSwyLCJuZy1jb250YWluZXIiLDIpKDEsWkdlLDE0LDEwLCJuZy1jb250YWluZXIiLDIpKSwyJmEmJihFZSgibmdJZiIsIWQuZGV0YWlsU2VydmljZS5pc09wZW4pLGZlKCksRWUoIm5nSWYiLGQuZGV0YWlsU2Vy''@;'; put 'put ''dmljZS5pc09wZW4pKX0sZGVwZW5kZW5jaWVzOltDYSxmc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksVzk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxEKXt0aGlzLmVsPWEsdGhpcy5yZW5kZXJlcj1kLHRoaXMuZG9tQWRhcHRlcj1mLHRoaXMuY29sdW1uUmVzaXpl''@;'; put 'put ''clNlcnZpY2U9dix0aGlzLmNvbHVtbnNTZXJ2aWNlPU0sdGhpcy5jb2x1bW5TdGF0ZT1ELHRoaXMucmVzaXplRW1pdHRlcj1uZXcgWHIsdGhpcy53aWR0aFNldD0hMSx0aGlzLmF1dG9TZXQ9ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGguZmlsdGVy''@;'; put 'put ''UmVuZGVyU3RlcHMoWjMuQ0xFQVJfV0lEVEhTKS5zdWJzY3JpYmUoKCk9PnRoaXMuY2xlYXJXaWR0aCgpKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfWdldENvbHVtbldpZHRoU3RhdGUoKXtjb25zdCBhPXRoaXMuZGV0ZWN0''@;'; put 'put ''U3RyaWN0V2lkdGgoKTtyZXR1cm57d2lkdGg6dGhpcy5jb21wdXRlV2lkdGgoYSksc3RyaWN0V2lkdGg6YX19c2V0Q29sdW1uU3RhdGUoYSl7dGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zW2FdPXRoaXMuY29sdW1uU3RhdGV9c2V0V2lkdGgoYSl7YS5zdHJpY3RXaWR0aD8odGhpcy5jb2x1''@;'; put 'put ''bW5SZXNpemVyU2VydmljZS5yZXNpemVkQnkmJih0aGlzLnJlc2l6ZUVtaXR0ZXIuZW1pdChhLndpZHRoKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwid2lkdGgiLGEud2lkdGgrInB4IiksdGhpcy53aWR0aFNldD0hMSksdGhpcy5yZW5kZXJlci5hZGRD''@;'; put 'put ''bGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsRXcpLHRoaXMuYXV0b1NldD0hMSk6KHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LEV3KSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwid2lkdGgiLGEud2lkdGgrInB4''@;'; put 'put ''IiksdGhpcy53aWR0aFNldD0hMCx0aGlzLmF1dG9TZXQ9ITApfXNldEhpZGRlbihhKXthLmhpZGRlbj90aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxwQSk6dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQscEEpfWNsZWFy''@;'; put 'put ''V2lkdGgoKXt0aGlzLndpZHRoU2V0JiYhdGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5yZXNpemVkQnkmJnRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsbnVsbCksdGhpcy5hdXRvU2V0JiZ0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMu''@;'; put 'put ''ZWwubmF0aXZlRWxlbWVudCxFdyl9ZGV0ZWN0U3RyaWN0V2lkdGgoKXtyZXR1cm4gdGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5yZXNpemVkQnk/dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS53aWR0aEFmdGVyUmVzaXplOnRoaXMuYXV0b1NldD8wOnRoaXMuZG9tQWRhcHRlci51c2VyRGVm''@;'; put 'put ''aW5lZFdpZHRoKHRoaXMuZWwubmF0aXZlRWxlbWVudCl9Y29tcHV0ZVdpZHRoKGEpe2xldCBkPWE7cmV0dXJuIGR8fChkPXRoaXMuZG9tQWRhcHRlci5zY3JvbGxXaWR0aCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpKSxkfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5l''@;'; put 'put ''dyhhfHxjKShxZShuYSkscWUoTm8pLHFlKFU5KSxxZShjNikscWUoelgpLHFlKGM1KSxxZShLWCkpfSxjLlx1MDI3NWRpcj1Zcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctY29sdW1uIl1dLG91dHB1dHM6e3Jlc2l6ZUVtaXR0ZXI6ImNsckRnQ29sdW1uUmVzaXplIn0sc3RhbmRhbG9u''@;'; put 'put ''ZTohMSxmZWF0dXJlczpbaGEoW3pYLG1xZV0pXX0pLGN9KSgpLF9xZT0oKCk9PntjbGFzcyBje3VzZXJEZWZpbmVkV2lkdGgoYSl7cmV0dXJuIDB9c2Nyb2xsQmFyV2lkdGgoYSl7cmV0dXJuIDB9c2Nyb2xsV2lkdGgoYSl7cmV0dXJuIDB9Y29tcHV0ZWRIZWlnaHQoYSl7cmV0dXJuIDB9Y2xp''@;'; put 'put ''ZW50UmVjdChhKXtyZXR1cm57dG9wOjAsYm90dG9tOjAsbGVmdDowLHJpZ2h0OjAsd2lkdGg6MCxoZWlnaHQ6MH19bWluV2lkdGgoYSl7cmV0dXJuIDB9Zm9jdXMoYSl7fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWZyKHt0''@;'; put 'put ''b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjb25zdCB3cWU9Yz0+d2woYyk/bmV3IGM2Om5ldyBfcWU7bGV0IER3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxVLHRlLG9lLHZlLHdlKXt0aGlzLmRhdGFncmlkPWEsdGhpcy5vcmdhbml6ZXI9ZCx0''@;'; put 'put ''aGlzLml0ZW1zPWgsdGhpcy5wYWdlPWYsdGhpcy5lbD12LHRoaXMucmVuZGVyZXI9TSx0aGlzLnRhYmxlU2l6ZVNlcnZpY2U9VSx0aGlzLmNvbHVtbnNTZXJ2aWNlPXRlLHRoaXMubmdab25lPW9lLHRoaXMua2V5TmF2aWdhdGlvbj12ZSx0aGlzLmNoYW5nZURldGVjdG9yUmVmPXdlLHRoaXMu''@;'; put 'put ''X2hlaWdodFNldD0hMSx0aGlzLnNob3VsZFN0YWJpbGl6ZUNvbHVtbnM9ITAsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXI9bnVsbCx0aGlzLmNvbHVtbnNTaXplc1N0YWJsZT0hMSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChkLmZpbHRlclJlbmRlclN0''@;'; put 'put ''ZXBzKFozLkNPTVBVVEVfQ09MVU1OX1dJRFRIUykuc3Vic2NyaWJlKCgpPT50aGlzLmNvbXB1dGVIZWFkZXJzV2lkdGgoKSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGYuc2l6ZUNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9oZWlnaHRTZXQmJnRoaXMucmVzZXREYXRhZ3JpZEhlaWdo''@;'; put 'put ''dCgpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKEQuc3RhdGVDaGFuZ2Uuc3Vic2NyaWJlKEZlPT50aGlzLnRvZ2dsZURldGFpbFBhbmUoRmUpKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goaC5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT50aGlzLnNob3VsZFN0YWJpbGl6ZUNvbHVtbnM9ITAp''@;'; put 'put ''KX1uZ09uSW5pdCgpe3RoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1N0YXRlQ2hhbmdlLnN1YnNjcmliZShhPT50aGlzLmNvbHVtblN0YXRlQ2hhbmdlZChhKSksbnVsbD09PXRoaXMuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRQYXJlbnQmJih0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPW5l''@;'; put 'put ''dyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoW2FdKT0+eyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0UGFyZW50fHxhLmlzSW50ZXJzZWN0aW5nKSYmdGhpcy5jb2x1bW5zU2l6ZXNTdGFibGUmJih0aGlzLmNvbHVtbnNTaXplc1N0YWJsZT0hMSx0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1h''@;'; put 'put ''cmtGb3JDaGVjaygpLHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpKX0pLHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldHVwQ29sdW1ucygpLHRoaXMuc3Vic2Ny''@;'; put 'put ''aXB0aW9ucy5wdXNoKHRoaXMuaGVhZGVycy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuc2V0dXBDb2x1bW5zKCksdGhpcy5jb2x1bW5zU2l6ZXNTdGFibGU9ITEsdGhpcy5zdGFiaWxpemVDb2x1bW5zKCl9KSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy50YWJsZVNpemVTZXJ2aWNlLnRh''@;'; put 'put ''YmxlPXRoaXMuZWx9bmdBZnRlclZpZXdDaGVja2VkKCl7dGhpcy5zaG91bGRTdGFiaWxpemVDb2x1bW5zJiZ0aGlzLnN0YWJpbGl6ZUNvbHVtbnMoKSx0aGlzLnNob3VsZENvbXB1dGVIZWlnaHQoKSYmdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntzZXRUaW1lb3V0KCgpPT57''@;'; put 'put ''dGhpcy5jb21wdXRlRGF0YWdyaWRIZWlnaHQoKX0pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpLHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKX10b2dnbGVEZXRhaWxQYW5lKGEpe3RoaXMuaGVhZGVy''@;'; put 'put ''cyYmKGEmJiF0aGlzLmNvbHVtbnNTZXJ2aWNlLmhhc0NhY2hlKCk/KHRoaXMuY29sdW1uc1NlcnZpY2UuY2FjaGUoKSx0aGlzLmNvbHVtbnNTZXJ2aWNlLnZpc2libGVDb2x1bW5zLmZvckVhY2goKGQsaCk9PntoPjAmJnRoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0YXRlQ2hhbmdlQXQoZC5j''@;'; put 'put ''b2x1bW5JbmRleCx7Y2hhbmdlczpbeGQuSElEREVOXSxoaWRkZW46YX0pfSkpOmF8fHRoaXMuY29sdW1uc1NlcnZpY2UucmVzZXRUb0xhc3RDYWNoZSgpKX1zZXR1cENvbHVtbnMoKXt0aGlzLmhlYWRlcnMuZm9yRWFjaCgoYSxkKT0+YS5zZXRDb2x1bW5TdGF0ZShkKSksdGhpcy5jb2x1bW5z''@;'; put 'put ''U2VydmljZS5jb2x1bW5zLnNwbGljZSh0aGlzLmhlYWRlcnMubGVuZ3RoKSx0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMuZm9yRWFjaCgoYSxkKT0+e3RoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0YXRlQ2hhbmdlKGEse2NoYW5nZXM6W3hkLklOSVRJQUxJWkVdLGNvbHVtbkluZGV4OmR9''@;'; put 'put ''KX0pfXNob3VsZENvbXB1dGVIZWlnaHQoKXtyZXR1cm4hdGhpcy5faGVpZ2h0U2V0JiZ0aGlzLnBhZ2Uuc2l6ZT4wJiZ0aGlzLml0ZW1zLmRpc3BsYXllZC5sZW5ndGg9PT10aGlzLnBhZ2Uuc2l6ZX1jb21wdXRlRGF0YWdyaWRIZWlnaHQoKXtjb25zdCBhPXdpbmRvdy5nZXRDb21wdXRlZFN0''@;'; put 'put ''eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCkuaGVpZ2h0O3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJoZWlnaHQiLGEpLHRoaXMuX2hlaWdodFNldD0hMH1yZXNldERhdGFncmlkSGVpZ2h0KCl7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5h''@;'; put 'put ''dGl2ZUVsZW1lbnQsImhlaWdodCIsIiIpLHRoaXMuX2hlaWdodFNldD0hMX1jb21wdXRlSGVhZGVyc1dpZHRoKCl7Y29uc3QgYT10aGlzLmhlYWRlcnMubGVuZ3RoLGQ9dGhpcy5oZWFkZXJzLm1hcChmPT5mLmdldENvbHVtbldpZHRoU3RhdGUoKSk7bGV0IGg9ITA7dGhpcy5oZWFkZXJzLmZv''@;'; put 'put ''ckVhY2goKGYsdik9Pntjb25zdCBNPXtjaGFuZ2VzOlt4ZC5XSURUSF0sLi4uZFt2XX07TS5zdHJpY3RXaWR0aHx8KGg9ITEpLGE9PT12KzEmJmgmJihNLnN0cmljdFdpZHRoPTApLHRoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0YXRlQ2hhbmdlQXQodixNKX0pfWNvbHVtblN0YXRlQ2hhbmdl''@;'; put 'put ''ZChhKXtpZighdGhpcy5oZWFkZXJzfHxudWxsPT1hLmNvbHVtbkluZGV4KXJldHVybjtjb25zdCBkPWEuY29sdW1uSW5kZXg7YS5jaGFuZ2VzJiZhLmNoYW5nZXMubGVuZ3RoJiZhLmNoYW5nZXMuZm9yRWFjaChoPT57c3dpdGNoKGgpe2Nhc2UgeGQuV0lEVEg6dGhpcy5oZWFkZXJzLmdldChk''@;'; put 'put ''KS5zZXRXaWR0aChhKSx0aGlzLnJvd3MuZm9yRWFjaChmPT57Zj8uY2VsbHMubGVuZ3RoPT09dGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zLmxlbmd0aCYmKGYuY2VsbHMuZ2V0KGQpLnNldFdpZHRoKGEpLGYuZXhwYW5kYWJsZVJvdz8uY2VsbHMuZ2V0KGQpPy5zZXRXaWR0aChhKSl9KTti''@;'; put 'put ''cmVhaztjYXNlIHhkLkhJRERFTjp0aGlzLmhlYWRlcnMuZ2V0KGQpLnNldEhpZGRlbihhKSx0aGlzLnJvd3MuZm9yRWFjaChmPT57Zi5jZWxscyYmZi5jZWxscy5sZW5ndGgmJihmLmNlbGxzLmdldChkKS5zZXRIaWRkZW4oYSksZi5leHBhbmRhYmxlUm93Py5jZWxscy5nZXQoZCk/LnNldEhp''@;'; put 'put ''ZGRlbihhKSl9KSx0aGlzLnVwZGF0ZUNvbHVtblNlcGFyYXRvcnNWaXNpYmlsaXR5KCksdGhpcy5rZXlOYXZpZ2F0aW9uLnJlc2V0S2V5R3JpZCgpO2JyZWFrO2Nhc2UgeGQuSU5JVElBTElaRTphLmhpZGVhYmxlJiZhLmhpZGRlbiYmKHRoaXMuaGVhZGVycy5nZXQoZCkuc2V0SGlkZGVuKGEp''@;'; put 'put ''LHRoaXMucm93cy5mb3JFYWNoKGY9PntmLnNldENlbGxzU3RhdGUoKSxmLmV4cGFuZGFibGVSb3c/LnNldENlbGxzU3RhdGUoKX0pKX19KX1zdGFiaWxpemVDb2x1bW5zKCl7dGhpcy5jb2x1bW5zU2l6ZXNTdGFibGV8fHRoaXMuaXRlbXMuZGlzcGxheWVkLmxlbmd0aD4wJiYodGhpcy5vcmdh''@;'; put 'put ''bml6ZXIucmVzaXplKCksdGhpcy5jb2x1bW5zU2l6ZXNTdGFibGU9ITApfXVwZGF0ZUNvbHVtblNlcGFyYXRvcnNWaXNpYmlsaXR5KCl7Y29uc3QgYT10aGlzLmRhdGFncmlkLmNvbHVtbnMuZmlsdGVyKGQ9PiFkLmlzSGlkZGVuKTthLmZvckVhY2goKGQsaCk9PntoPT09YS5sZW5ndGgtMT9k''@;'; put 'put ''LnNob3dTZXBhcmF0b3I9ITE6ZC5zaG93U2VwYXJhdG9yfHwoZC5zaG93U2VwYXJhdG9yPSEwKX0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShfNikscWUoVTkpLHFlKGw1KSxxZShtNikscWUobmEpLHFlKE5vKSxxZShVMykscWUoVVgpLHFl''@;'; put 'put ''KGM1KSxxZShYYSkscWUod0gpLHFlKEhzKSl9LGMuXHUwMjc1ZGlyPVlyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRhZ3JpZCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYocG8oaCxXOSw0KSxwbyhoLGI2LDQpKSwyJmEpe2xldCBmO2dpKGY9bWkoKSkm''@;'; put 'put ''JihkLmhlYWRlcnM9ZiksZ2koZj1taSgpKSYmKGQucm93cz1mKX19LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hhKFt7cHJvdmlkZTpjNix1c2VGYWN0b3J5OndxZSxkZXBzOlt1bF19XSldfSksY30pKCksQ3FlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtOcy5hZGRJY29ucyhEamUs''@;'; put 'put ''SWplLE9ULFJqZSxRMmUsTGplLGVmZSxPamUsUGplKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUVpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj15aSh7aW1wb3J0czpbTmEscVhlLGZILFZzLHozZSxVYyxkWCxSZixKWGUsVTNl''@;'; put 'put ''LGd3LHJBLENYXX0pLGN9KSgpLGlwZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9WXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXN0YWNrLWNvbnRlbnQiXV0sc3RhbmRhbG9uZTohMX0pLGN9KSgp''@;'; put 'put ''LFhYPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9nZW5lcmF0ZWRJZD1udWxsLHRoaXMuX2lkPW51bGx9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChhKXt0aGlzLl9pZD0ic3RyaW5nIj09dHlwZW9mIGEmJiIiIT09YT9hOnRoaXMuX2dlbmVyYXRlZElkKyIifW5n''@;'; put 'put ''T25Jbml0KCl7dGhpcy5fZ2VuZXJhdGVkSWQ9ImNsci1zdGFjay1sYWJlbC0iK091KCksdGhpcy5pZHx8KHRoaXMuX2lkPXRoaXMuX2dlbmVyYXRlZElkKyIiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPWFyKHt0eXBlOmMs''@;'; put 'put ''c2VsZWN0b3JzOltbImNsci1zdGFjay1sYWJlbCJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmTnIoImlkIixkLmlkKX0saW5wdXRzOntpZDoiaWQifSxzdGFuZGFsb25lOiExLG5nQ29udGVudFNlbGVjdG9yczpUbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0''@;'; put 'put ''ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksV3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxhcGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMucGFyZW50PWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5leHBhbmRlZD0hMSx0aGlzLmV4cGFuZGFibGU9ITEs''@;'; put 'put ''dGhpcy5leHBhbmRlZENoYW5nZT1uZXcgWHIoITEpLHRoaXMuZm9jdXNlZD0hMSx0aGlzLnVuaXF1ZUlkPU91KCksdGhpcy5fY2hhbmdlZENoaWxkcmVuPTAsdGhpcy5fZnVsbHlJbml0aWFsaXplZD0hMSx0aGlzLl9jaGFuZ2VkPSExLGEmJmEuYWRkQ2hpbGQoKX1zZXQgc2V0Q2hhbmdlZFZh''@;'; put 'put ''bHVlKGEpe3RoaXMuX2NoYW5nZWQ9YSx0aGlzLnBhcmVudCYmdGhpcy5fZnVsbHlJbml0aWFsaXplZCYmKGE/dGhpcy5wYXJlbnQuX2NoYW5nZWRDaGlsZHJlbisrOnRoaXMucGFyZW50Ll9jaGFuZ2VkQ2hpbGRyZW4tLSl9Z2V0IGdldENoYW5nZWRWYWx1ZSgpe3JldHVybiB0aGlzLl9jaGFu''@;'; put 'put ''Z2VkfHx0aGlzLl9jaGFuZ2VkQ2hpbGRyZW4+MCYmIXRoaXMuZXhwYW5kZWR9Z2V0IG9uU3RhY2tMYWJlbEZvY3VzKCl7cmV0dXJuIHRoaXMuZXhwYW5kYWJsZSYmIXRoaXMuZXhwYW5kZWQmJnRoaXMuZm9jdXNlZH1nZXQgbGFiZWxsZWRCeUlkKCl7cmV0dXJuIHRoaXMuc3RhY2tCbG9ja1Rp''@;'; put 'put ''dGxlLmlkfWdldCBoZWFkaW5nTGV2ZWwoKXtyZXR1cm4gdGhpcy5hcmlhTGV2ZWw/dGhpcy5hcmlhTGV2ZWwrIiI6dGhpcy5wYXJlbnQ/IjQiOiIzIn1nZXQgY2FyZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5leHBhbmRlZD8iZG93biI6InJpZ2h0In1nZXQgcm9sZSgpe3JldHVybiB0aGlz''@;'; put 'put ''LmV4cGFuZGFibGU/ImJ1dHRvbiI6bnVsbH1nZXQgdGFiSW5kZXgoKXtyZXR1cm4gdGhpcy5leHBhbmRhYmxlPyIwIjpudWxsfWdldCBhcmlhRXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5leHBhbmRhYmxlP3RoaXMuZXhwYW5kZWQ/InRydWUiOiJmYWxzZSI6bnVsbH1uZ09uSW5pdCgpe3RoaXMu''@;'; put 'put ''X2Z1bGx5SW5pdGlhbGl6ZWQ9ITB9YWRkQ2hpbGQoKXt0aGlzLmV4cGFuZGFibGU9ITB9dG9nZ2xlRXhwYW5kKGEpe29wZShhKXx8dGhpcy5leHBhbmRhYmxlJiYodGhpcy5leHBhbmRlZD0hdGhpcy5leHBhbmRlZCx0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRlZCkpfWdl''@;'; put 'put ''dFN0YWNrQ2hpbGRyZW5JZCgpe3JldHVybiB0aGlzLmV4cGFuZGVkP2BjbHItc3RhY2stY2hpbGRyZW4tJHt0aGlzLnVuaXF1ZUlkfWA6bnVsbH1wcmV2ZW50RGVmYXVsdElmTm90SW5wdXRFdmVudChhKXtvcGUoYSl8fGEucHJldmVudERlZmF1bHQoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1''@;'; put 'put ''bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoYywxMikscWUocHMpKX0sYy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXN0YWNrLWJsb2NrIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJnBvKGgsWFgsNSksMiZhKXtsZXQgZjtnaShm''@;'; put 'put ''PW1pKCkpJiYoZC5zdGFja0Jsb2NrVGl0bGU9Zi5maXJzdCl9fSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihOcigicm9sZSIsImhlYWRpbmciKSgiYXJpYS1sZXZlbCIsZC5oZWFkaW5nTGV2ZWwpLHhyKCJzdGFjay1ibG9jayIsITApKCJzdGFjay1ibG9j''@;'; put 'put ''ay1leHBhbmRlZCIsZC5leHBhbmRlZCkoInN0YWNrLWJsb2NrLWV4cGFuZGFibGUiLGQuZXhwYW5kYWJsZSkoInN0YWNrLWJsb2NrLWNoYW5nZWQiLGQuZ2V0Q2hhbmdlZFZhbHVlKSgib24tZm9jdXMiLGQub25TdGFja0xhYmVsRm9jdXMpKX0saW5wdXRzOntleHBhbmRlZDpbMCwiY2xyU2JF''@;'; put 'put ''eHBhbmRlZCIsImV4cGFuZGVkIl0sZXhwYW5kYWJsZTpbMCwiY2xyU2JFeHBhbmRhYmxlIiwiZXhwYW5kYWJsZSJdLGFyaWFMZXZlbDpbMCwiY2xyU3RhY2tWaWV3TGV2ZWwiLCJhcmlhTGV2ZWwiXSxzZXRDaGFuZ2VkVmFsdWU6WzAsImNsclNiTm90aWZ5Q2hhbmdlIiwic2V0Q2hhbmdlZFZh''@;'; put 'put ''bHVlIl19LG91dHB1dHM6e2V4cGFuZGVkQ2hhbmdlOiJjbHJTYkV4cGFuZGVkQ2hhbmdlIn0sc3RhbmRhbG9uZTohMSxuZ0NvbnRlbnRTZWxlY3RvcnM6S0dlLGRlY2xzOjksdmFyczo5LGNvbnN0czpbWzEsInN0YWNrLWJsb2NrLWxhYmVsIiwzLCJjbGljayIsImtleXVwLmVudGVyIiwia2V5''@;'; put 'put ''dXAuc3BhY2UiLCJrZXlkb3duLnNwYWNlIiwiZm9jdXMiLCJibHVyIiwiaWQiXSxbInNoYXBlIiwiYW5nbGUiLCJjbGFzcyIsInN0YWNrLWJsb2NrLWNhcmV0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1zci1vbmx5Iiw0LCJuZ0lmIl0sWzEsInN0YWNrLXZpZXcta2V5Il0sWzEsInN0YWNr''@;'; put 'put ''LWJsb2NrLWNvbnRlbnQiXSxbMSwic3RhY2stY2hpbGRyZW4iLDMsImNsckV4cGFuZFRyaWdnZXIiXSxbInJvbGUiLCJyZWdpb24iLDMsImhlaWdodCIsNCwibmdJZiJdLFsic2hhcGUiLCJhbmdsZSIsMSwic3RhY2stYmxvY2stY2FyZXQiXSxbMSwiY2xyLXNyLW9ubHkiXSxbInJvbGUiLCJy''@;'; put 'put ''ZWdpb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgkR2UpLGRlKDAsImRpdiIsMCksT3QoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC50b2dnbGVFeHBhbmQoZil9KSgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnRvZ2dsZUV4cGFuZChmKX0pKCJr''@;'; put 'put ''ZXl1cC5zcGFjZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQudG9nZ2xlRXhwYW5kKGYpfSkoImtleWRvd24uc3BhY2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnByZXZlbnREZWZhdWx0SWZOb3RJbnB1dEV2ZW50KGYpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBkLmZvY3VzZWQ9ITB9KSgi''@;'; put 'put ''Ymx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC5mb2N1c2VkPSExfSksZ3QoMSxYR2UsMSwxLCJjZHMtaWNvbiIsMSkoMixxR2UsMiwxLCJzcGFuIiwyKSxkZSgzLCJkaXYiLDMpLFdyKDQpLGhlKCksZGUoNSwiZGl2Iiw0KSxXcig2LDEpLGhlKCkoKSxkZSg3LCJjbHItZXhwYW5kYWJsZS1hbmlt''@;'; put 'put ''YXRpb24iLDUpLGd0KDgsSkdlLDIsNCwiZGl2Iiw2KSxoZSgpKSwyJmEmJihFZSgiaWQiLGQudW5pcXVlSWQpLE5yKCJyb2xlIixkLnJvbGUpKCJ0YWJpbmRleCIsZC50YWJJbmRleCkoImFyaWEtZXhwYW5kZWQiLGQuYXJpYUV4cGFuZGVkKSgiYXJpYS1jb250cm9scyIsZC5nZXRTdGFja0No''@;'; put 'put ''aWxkcmVuSWQoKSksZmUoKSxFZSgibmdJZiIsZC5leHBhbmRhYmxlKSxmZSgpLEVlKCJuZ0lmIixkLmdldENoYW5nZWRWYWx1ZSksZmUoNSksRWUoImNsckV4cGFuZFRyaWdnZXIiLGQuZXhwYW5kZWQpLGZlKCksRWUoIm5nSWYiLGQuZXhwYW5kZWQpKX0sZGVwZW5kZW5jaWVzOltDYSxmcyxy''@;'; put 'put ''SF0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7ZnVuY3Rpb24gb3BlKGMpe2NvbnN0IGw9Yz8udGFyZ2V0O3JldHVybiEhbD8udGFnTmFtZSYmWyJJTlBVVCIsIlRFWFRBUkVBIiwiQlVUVE9OIiwiQSIsIlNFTEVDVCIsIk9QVElPTiJdLmluY2x1ZGVzKGwudGFnTmFtZSl9bGV0IHFYPSgoKT0+''@;'; put 'put ''e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc3RhY2stdmlldyJdXSxzdGFuZGFsb25lOiExLG5nQ29udGVudFNlbGVjdG9yczplJGUsZGVjbHM6Myx2YXJzOjAs''@;'; put 'put ''Y29uc3RzOltbMSwic3RhY2stdmlldyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKFFHZSksV3IoMCksZGUoMSwiZGl2IiwwKSxXcigyLDEpLGhlKCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxNcWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe05zLmFkZEljb25z''@;'; put 'put ''KG53KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUVpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj15aSh7aW1wb3J0czpbTmEsVWMsVnMsVTNlXX0pLGN9KSgpLFk5PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLnNl''@;'; put 'put ''bGVjdGFibGU9ITEsdGhpcy5lYWdlcj0hMCx0aGlzLmNoaWxkcmVuRmV0Y2hlZD1uZXcgdXJ9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IHNw''@;'; put 'put ''ZT17cHJvdmlkZTpZOSx1c2VGYWN0b3J5OmZ1bmN0aW9uIHhxZShjKXtyZXR1cm4gY3x8bmV3IFk5fSxkZXBzOltbbmV3IFdzLG5ldyBHZCxZOV1dfTtsZXQgbHBlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmZlYXR1cmVzU2VydmljZT1hLHRoaXMuZXhwYW5kU2Vydmlj''@;'; put 'put ''ZT1kLGQmJih0aGlzLnN1YnNjcmlwdGlvbj1kLmV4cGFuZENoYW5nZS5zdWJzY3JpYmUoaD0+eyFoJiZ0aGlzLnBhcmVudCYmIWEuZWFnZXImJmEucmVjdXJzaW9uJiZ0aGlzLnBhcmVudC5jbGVhckNoaWxkcmVuKCl9KSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXRBcmlhUm9sZXMo''@;'; put 'put ''KX1zaG91bGRSZW5kZXIoKXtyZXR1cm4gdGhpcy5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uJiYodGhpcy5mZWF0dXJlc1NlcnZpY2UuZWFnZXJ8fCF0aGlzLmV4cGFuZFNlcnZpY2V8fHRoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZCl9Z2V0Q29udGV4dChhKXtyZXR1cm57JGltcGxpY2l0''@;'; put 'put ''OmEubW9kZWwsY2xyTW9kZWw6YX19bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbiYmdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1zZXRBcmlhUm9sZXMoKXt0aGlzLnJvbGU9dGhpcy5wYXJlbnQ/Imdyb3VwIjpudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o''@;'; put 'put ''YSl7cmV0dXJuIG5ldyhhfHxjKShxZShZOSkscWUoU2QsOCkpfSxjLlx1MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZOcigicm9sZSIsZC5yb2xlKX0saW5w''@;'; put 'put ''dXRzOntwYXJlbnQ6InBhcmVudCIsY2hpbGRyZW46ImNoaWxkcmVuIn0sc3RhbmRhbG9uZTohMSxkZWNsczoxLHZhcnM6MSxjb25zdHM6W1s0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXV0sdGVt''@;'; put 'put ''cGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJmd0KDAsYSRlLDIsMSwibmctY29udGFpbmVyIiwwKSwyJmEmJkVlKCJuZ0lmIixkLnNob3VsZFJlbmRlcigpKX0sZGVwZW5kZW5jaWVzOltocyxDYSx5ZF0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7dmFyIG4wPWZ1bmN0aW9uKGMpe3JldHVybiBj''@;'; put 'put ''W2MuVU5TRUxFQ1RFRD0wXT0iVU5TRUxFQ1RFRCIsY1tjLlNFTEVDVEVEPTFdPSJTRUxFQ1RFRCIsY1tjLklOREVURVJNSU5BVEU9Ml09IklOREVURVJNSU5BVEUiLGN9KG4wfHx7fSk7Y2xhc3MgY3Ble2NvbnN0cnVjdG9yKCl7dGhpcy5sb2FkaW5nJD1uZXcgTWkoITEpLHRoaXMuc2VsZWN0''@;'; put 'put ''ZWQ9bmV3IE1pKG4wLlVOU0VMRUNURUQpLHRoaXMuX2xvYWRpbmc9ITF9Z2V0IGxvYWRpbmcoKXtyZXR1cm4gdGhpcy5fbG9hZGluZ31zZXQgbG9hZGluZyhsKXt0aGlzLl9sb2FkaW5nPWwsdGhpcy5sb2FkaW5nJC5uZXh0KGwpfWdldCBkaXNhYmxlZCgpe3JldHVybiEoIXRoaXMuX2Rpc2Fi''@;'; put 'put ''bGVkJiYhdGhpcy5wYXJlbnQ/LmRpc2FibGVkKX1zZXQgZGlzYWJsZWQobCl7dGhpcy5fZGlzYWJsZWQ9bH1kZXN0cm95KCl7dGhpcy5zZWxlY3RlZC5jb21wbGV0ZSgpfXNldFNlbGVjdGVkKGwsYSxkKXtsIT09dGhpcy5zZWxlY3RlZC52YWx1ZSYmKHRoaXMuc2VsZWN0ZWQubmV4dChsKSxk''@;'; put 'put ''JiZsIT09bjAuSU5ERVRFUk1JTkFURSYmdGhpcy5jaGlsZHJlbiYmdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGg9PntoLmRpc2FibGVkfHxoLnNldFNlbGVjdGVkKGwsITEsITApfSksYSYmdGhpcy5wYXJlbnQmJnRoaXMucGFyZW50Ll91cGRhdGVTZWxlY3Rpb25Gcm9tQ2hpbGRyZW4oKSl9dG9n''@;'; put 'put ''Z2xlU2VsZWN0aW9uKGwpe3RoaXMuZGlzYWJsZWR8fHRoaXMuc2V0U2VsZWN0ZWQodGhpcy5zZWxlY3RlZC52YWx1ZT09PW4wLlNFTEVDVEVEP24wLlVOU0VMRUNURUQ6bjAuU0VMRUNURUQsITAsbCl9X3VwZGF0ZVNlbGVjdGlvbkZyb21DaGlsZHJlbigpe2NvbnN0IGw9dGhpcy5jb21wdXRl''@;'; put 'put ''U2VsZWN0aW9uU3RhdGVGcm9tQ2hpbGRyZW4oKTtsIT09dGhpcy5zZWxlY3RlZC52YWx1ZSYmKHRoaXMuc2VsZWN0ZWQubmV4dChsKSx0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQuX3VwZGF0ZVNlbGVjdGlvbkZyb21DaGlsZHJlbigpKX1jb21wdXRlU2VsZWN0aW9uU3RhdGVGcm9tQ2hpbGRy''@;'; put 'put ''ZW4oKXtsZXQgbD0hMSxhPSExO2Zvcihjb25zdCBkIG9mIHRoaXMuY2hpbGRyZW4pc3dpdGNoKGQuc2VsZWN0ZWQudmFsdWUpe2Nhc2UgbjAuSU5ERVRFUk1JTkFURTppZihkLmRpc2FibGVkKWNvbnRpbnVlO3JldHVybiBuMC5JTkRFVEVSTUlOQVRFO2Nhc2UgbjAuU0VMRUNURUQ6aWYobD0h''@;'; put 'put ''MCxhKXJldHVybiBuMC5JTkRFVEVSTUlOQVRFO2JyZWFrO2RlZmF1bHQ6aWYoYT0hMCxsKXJldHVybiBuMC5JTkRFVEVSTUlOQVRFfXJldHVybiBsP2E/bjAuVU5TRUxFQ1RFRDpuMC5TRUxFQ1RFRDpuMC5VTlNFTEVDVEVEfX1jbGFzcyBrSCBleHRlbmRzIGNwZXtjb25zdHJ1Y3RvcihsLGEs''@;'; put 'put ''ZCxoKXtzdXBlcigpLHRoaXMuZ2V0Q2hpbGRyZW49ZCx0aGlzLmZlYXR1cmVzU2VydmljZT1oLHRoaXMuY2hpbGRyZW5GZXRjaGVkPSExLHRoaXMuX2NoaWxkcmVuPVtdLHRoaXMubW9kZWw9bCx0aGlzLnBhcmVudD1hfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzLmZldGNoQ2hpbGRyZW4o''@;'; put 'put ''KSx0aGlzLl9jaGlsZHJlbn1zZXQgY2hpbGRyZW4obCl7dGhpcy5fY2hpbGRyZW49bH1kZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24mJnRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksc3VwZXIuZGVzdHJveSgpfWNsZWFyQ2hpbGRyZW4oKXt0aGlzLl9jaGlsZHJlbi5mb3JFYWNo''@;'; put 'put ''KGw9PmwuZGVzdHJveSgpKSxkZWxldGUgdGhpcy5fY2hpbGRyZW4sdGhpcy5jaGlsZHJlbkZldGNoZWQ9ITF9ZmV0Y2hDaGlsZHJlbigpe2lmKHRoaXMuY2hpbGRyZW5GZXRjaGVkKXJldHVybjtjb25zdCBsPXRoaXMuZ2V0Q2hpbGRyZW4odGhpcy5tb2RlbCk7IWZ1bmN0aW9uIEVxZShjKXty''@;'; put 'put ''ZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIGMudGhlbn0obCk/WEUobCk/KHRoaXMubG9hZGluZz0hMCx0aGlzLnN1YnNjcmlwdGlvbj1sLnN1YnNjcmliZShhPT57dGhpcy5fY2hpbGRyZW49dGhpcy53cmFwQ2hpbGRyZW4oYSksdGhpcy5sb2FkaW5nPSExfSkpOnRoaXMuX2NoaWxkcmVu''@;'; put 'put ''PWw/dGhpcy53cmFwQ2hpbGRyZW4obCk6W106KHRoaXMubG9hZGluZz0hMCxsLnRoZW4oYT0+e3RoaXMuX2NoaWxkcmVuPXRoaXMud3JhcENoaWxkcmVuKGEpLHRoaXMubG9hZGluZz0hMX0pKSx0aGlzLmNoaWxkcmVuRmV0Y2hlZD0hMCx0aGlzLmZlYXR1cmVzU2VydmljZSYmdGhpcy5mZWF0''@;'; put 'put ''dXJlc1NlcnZpY2UuY2hpbGRyZW5GZXRjaGVkLm5leHQoKX13cmFwQ2hpbGRyZW4obCl7cmV0dXJuIGwubWFwKGE9Pm5ldyBrSChhLHRoaXMsdGhpcy5nZXRDaGlsZHJlbix0aGlzLmZlYXR1cmVzU2VydmljZSkpfX1sZXQgdXBlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3Ro''@;'; put 'put ''aXMudGVtcGxhdGU9YSx0aGlzLmZlYXR1cmVzU2VydmljZT1kLHRoaXMuY2RyPWh9bmdPbkNoYW5nZXMoKXtsZXQgYTthPUFycmF5LmlzQXJyYXkodGhpcy5ub2Rlcyk/dGhpcy5ub2Rlcy5tYXAoZD0+bmV3IGtIKGQsbnVsbCx0aGlzLmdldENoaWxkcmVuLHRoaXMuZmVhdHVyZXNTZXJ2aWNl''@;'; put 'put ''KSk6W25ldyBrSCh0aGlzLm5vZGVzLG51bGwsdGhpcy5nZXRDaGlsZHJlbix0aGlzLmZlYXR1cmVzU2VydmljZSldLHRoaXMuY2hpbGRyZW5GZXRjaFN1YnNjcmlwdGlvbnx8KHRoaXMuY2hpbGRyZW5GZXRjaFN1YnNjcmlwdGlvbj10aGlzLmZlYXR1cmVzU2VydmljZS5jaGlsZHJlbkZldGNo''@;'; put 'put ''ZWQucGlwZShfOSgwKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpfSkpLHRoaXMuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbj17dGVtcGxhdGU6dGhpcy50ZW1wbGF0ZSxyb290OmF9fW5nT25EZXN0cm95KCl7dGhpcy5jaGlsZHJlbkZldGNoU3Vic2NyaXB0aW9u''@;'; put 'put ''JiZ0aGlzLmNoaWxkcmVuRmV0Y2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoSWwpLHFlKFk5KSxxZShIcykpfSxjLlx1MDI3NWRpcj1Zcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJSZWN1''@;'; put 'put ''cnNpdmVGb3IiLCIiLCJjbHJSZWN1cnNpdmVGb3JPZiIsIiJdXSxpbnB1dHM6e25vZGVzOlswLCJjbHJSZWN1cnNpdmVGb3JPZiIsIm5vZGVzIl0sZ2V0Q2hpbGRyZW46WzAsImNsclJlY3Vyc2l2ZUZvckdldENoaWxkcmVuIiwiZ2V0Q2hpbGRyZW4iXX0sc3RhbmRhbG9uZTohMSxmZWF0dXJl''@;'; put 'put ''czpbV29dfSksY30pKCksSlg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ZvY3VzUmVxdWVzdD1uZXcgdXIsdGhpcy5fZm9jdXNDaGFuZ2U9bmV3IHVyfWdldCBmb2N1c1JlcXVlc3QoKXtyZXR1cm4gdGhpcy5fZm9jdXNSZXF1ZXN0LmFzT2JzZXJ2YWJsZSgpfWdldCBmb2N1''@;'; put 'put ''c0NoYW5nZSgpe3JldHVybiB0aGlzLl9mb2N1c0NoYW5nZS5hc09ic2VydmFibGUoKX1mb2N1c05vZGUoYSl7YSYmdGhpcy5fZm9jdXNSZXF1ZXN0Lm5leHQoYS5ub2RlSWQpfWJyb2FkY2FzdEZvY3VzZWROb2RlKGEpe3RoaXMuZm9jdXNlZE5vZGVJZCE9PWEmJih0aGlzLmZvY3VzZWROb2Rl''@;'; put 'put ''SWQ9YSx0aGlzLl9mb2N1c0NoYW5nZS5uZXh0KGEpKX1mb2N1c1BhcmVudChhKXthJiZ0aGlzLmZvY3VzTm9kZShhLnBhcmVudCl9Zm9jdXNGaXJzdFZpc2libGVOb2RlKCl7dGhpcy5mb2N1c05vZGUodGhpcy5yb290Tm9kZU1vZGVscyYmdGhpcy5yb290Tm9kZU1vZGVsc1swXSl9Zm9jdXNM''@;'; put 'put ''YXN0VmlzaWJsZU5vZGUoKXt0aGlzLmZvY3VzTm9kZSh0aGlzLmZpbmRMYXN0VmlzaWJsZUluVHJlZSgpKX1mb2N1c05vZGVBYm92ZShhKXt0aGlzLmZvY3VzTm9kZSh0aGlzLmZpbmROb2RlQWJvdmUoYSkpfWZvY3VzTm9kZUJlbG93KGEpe3RoaXMuZm9jdXNOb2RlKHRoaXMuZmluZE5vZGVC''@;'; put 'put ''ZWxvdyhhKSl9Zm9jdXNOb2RlU3RhcnRzV2l0aChhLGQpe3RoaXMuZm9jdXNOb2RlKHRoaXMuZmluZENsb3Nlc3ROb2RlU3RhcnRzV2l0aChhLGQpKX1maW5kU2libGluZ3MoYSl7cmV0dXJuIGEucGFyZW50P2EucGFyZW50LmNoaWxkcmVuOnRoaXMucm9vdE5vZGVNb2RlbHN9ZmluZExhc3RW''@;'; put 'put ''aXNpYmxlSW5Ob2RlKGEpe2lmKCFhKXJldHVybiBudWxsO2lmKGEuZXhwYW5kZWQmJmEuY2hpbGRyZW4ubGVuZ3RoPjApe2NvbnN0IGQ9YS5jaGlsZHJlbjtyZXR1cm4gdGhpcy5maW5kTGFzdFZpc2libGVJbk5vZGUoZFtkLmxlbmd0aC0xXSl9cmV0dXJuIGF9ZmluZE5leHRGb2N1c2FibGUo''@;'; put 'put ''YSl7aWYoIWEpcmV0dXJuIG51bGw7Y29uc3QgZD10aGlzLmZpbmRTaWJsaW5ncyhhKSxoPWQuaW5kZXhPZihhKTtyZXR1cm4gaDxkLmxlbmd0aC0xP2RbaCsxXTpoPT09ZC5sZW5ndGgtMT90aGlzLmZpbmROZXh0Rm9jdXNhYmxlKGEucGFyZW50KTpudWxsfWZpbmRMYXN0VmlzaWJsZUluVHJl''@;'; put 'put ''ZSgpe3JldHVybiB0aGlzLmZpbmRMYXN0VmlzaWJsZUluTm9kZSh0aGlzLnJvb3ROb2RlTW9kZWxzJiZ0aGlzLnJvb3ROb2RlTW9kZWxzLmxlbmd0aCYmdGhpcy5yb290Tm9kZU1vZGVsc1t0aGlzLnJvb3ROb2RlTW9kZWxzLmxlbmd0aC0xXSl9ZmluZE5vZGVBYm92ZShhKXtpZighYSlyZXR1''@;'; put 'put ''cm4gbnVsbDtjb25zdCBkPXRoaXMuZmluZFNpYmxpbmdzKGEpLGg9ZC5pbmRleE9mKGEpO3JldHVybiAwPT09aD9hLnBhcmVudDpoPjA/dGhpcy5maW5kTGFzdFZpc2libGVJbk5vZGUoZFtoLTFdKTpudWxsfWZpbmROb2RlQmVsb3coYSl7cmV0dXJuIGE/YS5leHBhbmRlZCYmYS5jaGlsZHJl''@;'; put 'put ''bi5sZW5ndGg+MD9hLmNoaWxkcmVuWzBdOnRoaXMuZmluZE5leHRGb2N1c2FibGUoYSk6bnVsbH1maW5kRGVzY2VuZGVudE5vZGVTdGFydHNXaXRoKGEsZCl7aWYoZC5leHBhbmRlZCYmZC5jaGlsZHJlbi5sZW5ndGg+MClmb3IoY29uc3QgaCBvZiBkLmNoaWxkcmVuKXtjb25zdCBmPXRoaXMu''@;'; put 'put ''ZmluZE5vZGVTdGFydHNXaXRoKGEsaCk7aWYoZilyZXR1cm4gZn1yZXR1cm4gbnVsbH1maW5kU2libGluZ05vZGVTdGFydHNXaXRoKGEsZCl7Y29uc3QgaD10aGlzLmZpbmRTaWJsaW5ncyhkKTtmb3IobGV0IHY9aC5pbmRleE9mKGQpKzE7djxoLmxlbmd0aDt2Kyspe2NvbnN0IEQ9dGhpcy5m''@;'; put 'put ''aW5kTm9kZVN0YXJ0c1dpdGgoYSxoW3ZdKTtpZihEKXJldHVybiBEfXJldHVybiBudWxsfWZpbmRSb290Tm9kZVN0YXJ0c1dpdGgoYSxkKXtmb3IoY29uc3QgaCBvZiB0aGlzLnJvb3ROb2RlTW9kZWxzKXtpZihkLnBhcmVudCYmZC5wYXJlbnQ9PT1oKWNvbnRpbnVlO2NvbnN0IGY9dGhpcy5m''@;'; put 'put ''aW5kTm9kZVN0YXJ0c1dpdGgoYSxoKTtpZihmKXJldHVybiBmfXJldHVybiBudWxsfWZpbmROb2RlU3RhcnRzV2l0aChhLGQpe3JldHVybiBkP2QudGV4dENvbnRlbnQuc3RhcnRzV2l0aChhKT9kOnRoaXMuZmluZERlc2NlbmRlbnROb2RlU3RhcnRzV2l0aChhLGQpOm51bGx9ZmluZENsb3Nl''@;'; put 'put ''c3ROb2RlU3RhcnRzV2l0aChhLGQpe2lmKCFkKXJldHVybiBudWxsO2NvbnN0IGg9dGhpcy5maW5kRGVzY2VuZGVudE5vZGVTdGFydHNXaXRoKGEsZCk7aWYoaClyZXR1cm4gaDtjb25zdCBmPXRoaXMuZmluZFNpYmxpbmdOb2RlU3RhcnRzV2l0aChhLGQpO3JldHVybiBmfHwodGhpcy5maW5k''@;'; put 'put ''Um9vdE5vZGVTdGFydHNXaXRoKGEsZCl8fHRoaXMuZmluZE5vZGVTdGFydHNXaXRoKGEsZC5wYXJlbnQpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7''@;'; put 'put ''Y2xhc3MgVHFlIGV4dGVuZHMgY3Ble2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5wYXJlbnQ9bCxsJiZsLl9hZGRDaGlsZCh0aGlzKSx0aGlzLmNoaWxkcmVuPVtdfWRlc3Ryb3koKXt0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQuX3JlbW92ZUNoaWxkKHRoaXMpLHN1cGVyLmRlc3Ryb3ko''@;'; put 'put ''KX1fYWRkQ2hpbGQobCl7dGhpcy5jaGlsZHJlbi5wdXNoKGwpfV9yZW1vdmVDaGlsZChsKXtjb25zdCBhPXRoaXMuY2hpbGRyZW4uaW5kZXhPZihsKTthPi0xJiZ0aGlzLmNoaWxkcmVuLnNwbGljZShhLDEpfX1sZXQgdTU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmVsPWF9''@;'; put 'put ''Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJhY3RpdmUiKX1hY3RpdmF0ZSgpe3RoaXMuZWwubmF0aXZlRWxlbWVudCYmdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsaWNrJiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xpY2soKX19''@;'; put 'put ''cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUobmEpKX0sYy5cdTAyNzVkaXI9WXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiw4LCJjbHItdHJlZW5vZGUtbGluayJdXSxzdGFuZGFsb25lOiExfSksY30pKCksbWg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1''@;'; put 'put ''Y3RvcihhLGQsaCxmLHYsTSxELFUpe3RoaXMucGxhdGZvcm1JZD1hLHRoaXMuZmVhdHVyZXNTZXJ2aWNlPWgsdGhpcy5leHBhbmRTZXJ2aWNlPWYsdGhpcy5jb21tb25TdHJpbmdzPXYsdGhpcy5mb2N1c01hbmFnZXI9TSx0aGlzLmVsZW1lbnRSZWY9RCx0aGlzLnNlbGVjdGVkQ2hhbmdlPW5l''@;'; put 'put ''dyBYcighMSksdGhpcy5leHBhbmRlZENoYW5nZT1uZXcgWHIsdGhpcy5TVEFURVM9bjAsdGhpcy5pc01vZGVsTG9hZGluZz0hMSx0aGlzLm5vZGVJZD1PdSgpLHRoaXMuY29udGVudENvbnRhaW5lclRhYmluZGV4PS0xLHRoaXMuc2tpcEVtaXRDaGFuZ2U9ITEsdGhpcy50eXBlQWhlYWRLZXlC''@;'; put 'put ''dWZmZXI9IiIsdGhpcy50eXBlQWhlYWRLZXlFdmVudD1uZXcgdXIsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX21vZGVsPWgucmVjdXJzaW9uP1Uudmlldz9VLnZpZXcuY29udGV4dC5jbHJNb2RlbDpVLl9sVmlld1s4XS5jbHJNb2RlbDpuZXcgVHFlKGQ/ZC5fbW9kZWw6bnVsbCksdGhp''@;'; put 'put ''cy5fbW9kZWwubm9kZUlkPXRoaXMubm9kZUlkfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9tb2RlbC5kaXNhYmxlZH1zZXQgZGlzYWJsZWQoYSl7dGhpcy5fbW9kZWwuZGlzYWJsZWQ9YX1nZXQgc2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5fbW9kZWwuc2VsZWN0ZWQudmFsdWV9c2V0IHNl''@;'; put 'put ''bGVjdGVkKGEpe3RoaXMuZmVhdHVyZXNTZXJ2aWNlLnNlbGVjdGFibGU9ITAsKG51bGw9PT1hfHx0eXBlb2YgYT4idSIpJiYoYT1uMC5VTlNFTEVDVEVEKSwiYm9vbGVhbiI9PXR5cGVvZiBhJiYoYT1hP24wLlNFTEVDVEVEOm4wLlVOU0VMRUNURUQpLHRoaXMuc2tpcEVtaXRDaGFuZ2U9ITAs''@;'; put 'put ''dGhpcy5fbW9kZWwuc2V0U2VsZWN0ZWQoYSx0aGlzLmZlYXR1cmVzU2VydmljZS5lYWdlcix0aGlzLmZlYXR1cmVzU2VydmljZS5lYWdlciksdGhpcy5za2lwRW1pdENoYW5nZT0hMX1nZXQgZXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkfXNldCBleHBhbmRl''@;'; put 'put ''ZChhKXt0aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9YX1zZXQgY2xyRm9yVHlwZUFoZWFkKGEpe3RoaXMuX21vZGVsLnRleHRDb250ZW50PWRwZShhfHx0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudCl9Z2V0IGFyaWFTZWxlY3RlZCgpe3JldHVybiB0aGlzLmlz''@;'; put 'put ''U2VsZWN0YWJsZSgpP3RoaXMuX21vZGVsLnNlbGVjdGVkLnZhbHVlPT09bjAuU0VMRUNURUQ6ISF0aGlzLnRyZWVOb2RlTGluaz8uYWN0aXZlfHxudWxsfWdldCB0cmVlTm9kZUxpbmsoKXtyZXR1cm4gdGhpcy50cmVlTm9kZUxpbmtMaXN0JiZ0aGlzLnRyZWVOb2RlTGlua0xpc3QuZmlyc3R9''@;'; put 'put ''Z2V0IGlzUGFyZW50KCl7cmV0dXJuIHRoaXMuX21vZGVsLmNoaWxkcmVuJiZ0aGlzLl9tb2RlbC5jaGlsZHJlbi5sZW5ndGg+MH1uZ09uSW5pdCgpe3RoaXMuX21vZGVsLmV4cGFuZGVkPXRoaXMuZXhwYW5kZWQsdGhpcy5fbW9kZWwuZGlzYWJsZWQ9dGhpcy5kaXNhYmxlZCx0aGlzLnN1YnNj''@;'; put 'put ''cmlwdGlvbnMucHVzaCh0aGlzLl9tb2RlbC5zZWxlY3RlZC5waXBlKG9jKCgpPT4hdGhpcy5za2lwRW1pdENoYW5nZSkpLnN1YnNjcmliZShhPT57dGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KGEpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuZXhwYW5kU2VydmljZS5leHBhbmRD''@;'; put 'put ''aGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQoYSksdGhpcy5fbW9kZWwuZXhwYW5kZWQ9YX0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmZvY3VzTWFuYWdlci5mb2N1c1JlcXVlc3Quc3Vic2NyaWJlKGE9Pnt0aGlzLm5vZGVJZD09PWEmJnRoaXMu''@;'; put 'put ''Zm9jdXNUcmVlTm9kZSgpfSksdGhpcy5mb2N1c01hbmFnZXIuZm9jdXNDaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLmNoZWNrVGFiSW5kZXgoYSl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5fbW9kZWwubG9hZGluZyQucGlwZShfOSgwKSkuc3Vic2NyaWJlKGE9PnRoaXMuaXNN''@;'; put 'put ''b2RlbExvYWRpbmc9YSkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudHlwZUFoZWFkS2V5RXZlbnQucGlwZShfOSgyMDApKS5zdWJzY3JpYmUoYT0+e3RoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzTm9kZVN0YXJ0c1dpdGgoYSx0aGlzLl9tb2RlbCks''@;'; put 'put ''dGhpcy50eXBlQWhlYWRLZXlCdWZmZXI9IiJ9KSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fbW9kZWwudGV4dENvbnRlbnR8fCh0aGlzLl9tb2RlbC50ZXh0Q29udGVudD1kcGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnQpKX1uZ09uRGVzdHJveSgpe3RoaXMu''@;'; put 'put ''X21vZGVsLmRlc3Ryb3koKSx0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfWlzRXhwYW5kYWJsZSgpe3JldHVybiB0eXBlb2YgdGhpcy5leHBhbmRhYmxlPCJ1Ij90aGlzLmV4cGFuZGFibGU6ISF0aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kYWJsZXx8dGhp''@;'; put 'put ''cy5pc1BhcmVudH1pc1NlbGVjdGFibGUoKXtyZXR1cm4gdGhpcy5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZX1mb2N1c1RyZWVOb2RlKCl7Y29uc3QgYT10aGlzLmNvbnRlbnRDb250YWluZXIubmF0aXZlRWxlbWVudDt3bCh0aGlzLnBsYXRmb3JtSWQpJiZkb2N1bWVudC5hY3RpdmVFbGVt''@;'; put 'put ''ZW50IT09YSYmKHRoaXMuc2V0VGFiSW5kZXgoMCksYS5mb2N1cygpLGEuc2Nyb2xsSW50b1ZpZXcoe2Jsb2NrOiJuZWFyZXN0IixpbmxpbmU6Im5lYXJlc3QifSkpfWJyb2FkY2FzdEZvY3VzT25Db250YWluZXIoKXt0aGlzLmZvY3VzTWFuYWdlci5icm9hZGNhc3RGb2N1c2VkTm9kZSh0aGlz''@;'; put 'put ''Lm5vZGVJZCl9b25LZXlEb3duKGEpe3N3aXRjaChsWChhKSxrZihhLmtleSkpe2Nhc2UgbWEuQXJyb3dVcDp0aGlzLmZvY3VzTWFuYWdlci5mb2N1c05vZGVBYm92ZSh0aGlzLl9tb2RlbCk7YnJlYWs7Y2FzZSBtYS5BcnJvd0Rvd246dGhpcy5mb2N1c01hbmFnZXIuZm9jdXNOb2RlQmVsb3co''@;'; put 'put ''dGhpcy5fbW9kZWwpO2JyZWFrO2Nhc2UgbWEuQXJyb3dSaWdodDp0aGlzLmV4cGFuZE9yRm9jdXNGaXJzdENoaWxkKCk7YnJlYWs7Y2FzZSBtYS5BcnJvd0xlZnQ6dGhpcy5jb2xsYXBzZU9yRm9jdXNQYXJlbnQoKTticmVhaztjYXNlIG1hLkhvbWU6YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMu''@;'; put 'put ''Zm9jdXNNYW5hZ2VyLmZvY3VzRmlyc3RWaXNpYmxlTm9kZSgpO2JyZWFrO2Nhc2UgbWEuRW5kOmEucHJldmVudERlZmF1bHQoKSx0aGlzLmZvY3VzTWFuYWdlci5mb2N1c0xhc3RWaXNpYmxlTm9kZSgpO2JyZWFrO2Nhc2UgbWEuRW50ZXI6dGhpcy50b2dnbGVFeHBhbmRPclRyaWdnZXJEZWZh''@;'; put 'put ''dWx0KCk7YnJlYWs7Y2FzZSBtYS5TcGFjZTpjYXNlIG1hLlNwYWNlYmFyOmEucHJldmVudERlZmF1bHQoKSx0aGlzLnRvZ2dsZUV4cGFuZE9yVHJpZ2dlckRlZmF1bHQoKTticmVhaztkZWZhdWx0OmlmKHRoaXMuX21vZGVsLnRleHRDb250ZW50JiZmdW5jdGlvbiBnS2UoYyl7Y29uc3QgbD1j''@;'; put 'put ''LmtleTtyZXR1cm4gbC50b0xvd2VyQ2FzZSgpIT09bC50b1VwcGVyQ2FzZSgpfHxsPj0iMCImJmw8PSI5In0oYSkpcmV0dXJuIHRoaXMudHlwZUFoZWFkS2V5QnVmZmVyKz1hLmtleSx2b2lkIHRoaXMudHlwZUFoZWFkS2V5RXZlbnQubmV4dCh0aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcil9dGhp''@;'; put 'put ''cy50eXBlQWhlYWRLZXlCdWZmZXI9IiJ9c2V0VGFiSW5kZXgoYSl7dGhpcy5jb250ZW50Q29udGFpbmVyVGFiaW5kZXg9YSx0aGlzLmNvbnRlbnRDb250YWluZXIubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IixhLnRvU3RyaW5nKCkpfWNoZWNrVGFiSW5kZXgoYSl7d2wo''@;'; put 'put ''dGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5ub2RlSWQhPT1hJiYtMSE9PXRoaXMuY29udGVudENvbnRhaW5lclRhYmluZGV4JiZ0aGlzLnNldFRhYkluZGV4KC0xKX10b2dnbGVFeHBhbmRPclRyaWdnZXJEZWZhdWx0KCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuaXNFeHBhbmRhYmxlKCkmJiF0aGlz''@;'; put 'put ''LmlzU2VsZWN0YWJsZSgpP3RoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZD0hdGhpcy5leHBhbmRlZDp0aGlzLnRyaWdnZXJEZWZhdWx0QWN0aW9uKCkpfWV4cGFuZE9yRm9jdXNGaXJzdENoaWxkKCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuZXhwYW5kZWQ/dGhpcy5pc1BhcmVudCYmdGhpcy5m''@;'; put 'put ''b2N1c01hbmFnZXIuZm9jdXNOb2RlQmVsb3codGhpcy5fbW9kZWwpOnRoaXMuaXNFeHBhbmRhYmxlKCkmJih0aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9ITApKX1jb2xsYXBzZU9yRm9jdXNQYXJlbnQoKXt0aGlzLmRpc2FibGVkfHwodGhpcy5leHBhbmRlZD90aGlzLmV4cGFuZFNlcnZp''@;'; put 'put ''Y2UuZXhwYW5kZWQ9ITE6dGhpcy5mb2N1c01hbmFnZXIuZm9jdXNQYXJlbnQodGhpcy5fbW9kZWwpKX10cmlnZ2VyRGVmYXVsdEFjdGlvbigpe3RoaXMudHJlZU5vZGVMaW5rP3RoaXMudHJlZU5vZGVMaW5rLmFjdGl2YXRlKCk6dGhpcy5pc1NlbGVjdGFibGUoKSYmdGhpcy5fbW9kZWwudG9n''@;'; put 'put ''Z2xlU2VsZWN0aW9uKHRoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUodWwpLHFlKGMsMTIpLHFlKFk5KSxxZShTZCkscWUocHMpLHFlKEpYKSxxZShuYSkscWUoWW8pKX0sYy5cdTAyNzVjbXA9YXIo''@;'; put 'put ''e3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRyZWUtbm9kZSJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZwbyhoLHU1LDQpLDImYSl7bGV0IGY7Z2koZj1taSgpKSYmKGQudHJlZU5vZGVMaW5rTGlzdD1mKX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEm''@;'; put 'put ''YSYmVWEobyRlLDcsbmEpLDImYSl7bGV0IGg7Z2koaD1taSgpKSYmKGQuY29udGVudENvbnRhaW5lcj1oLmZpcnN0KX19LGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZ4cigiY2xyLXRyZWUtbm9kZSIsITApKCJkaXNhYmxlZCIsZC5fbW9kZWwuZGlzYWJsZWQp''@;'; put 'put ''fSxpbnB1dHM6e2V4cGFuZGFibGU6WzAsImNsckV4cGFuZGFibGUiLCJleHBhbmRhYmxlIl0sZGlzYWJsZWQ6WzAsImNsckRpc2FibGVkIiwiZGlzYWJsZWQiXSxzZWxlY3RlZDpbMCwiY2xyU2VsZWN0ZWQiLCJzZWxlY3RlZCJdLGV4cGFuZGVkOlswLCJjbHJFeHBhbmRlZCIsImV4cGFuZGVk''@;'; put 'put ''Il0sY2xyRm9yVHlwZUFoZWFkOiJjbHJGb3JUeXBlQWhlYWQifSxvdXRwdXRzOntzZWxlY3RlZENoYW5nZToiY2xyU2VsZWN0ZWRDaGFuZ2UiLGV4cGFuZGVkQ2hhbmdlOiJjbHJFeHBhbmRlZENoYW5nZSJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hhKFtzcGUsU2Qse3Byb3ZpZGU6JFQs''@;'; put 'put ''dXNlRXhpc3Rpbmc6U2R9XSldLG5nQ29udGVudFNlbGVjdG9yczpsJGUsZGVjbHM6MTIsdmFyczoxMixjb25zdHM6W1siY29udGVudENvbnRhaW5lciIsIiJdLFsidHJlZW5vZGVDb250ZW50IiwiIl0sWyJyb2xlIiwidHJlZWl0ZW0iLCJ0YWJpbmRleCIsIi0xIiwxLCJjbHItdHJlZS1ub2Rl''@;'; put 'put ''LWNvbnRlbnQtY29udGFpbmVyIiwzLCJrZXlkb3duIiwiZm9jdXMiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInR5cGUiLCJidXR0b24iLCJ0YWJpbmRleCIsIi0xIiwiY2xhc3MiLCJjbHItdHJlZW5vZGUtY2FyZXQiLDMsImRpc2FibGVkIiwiY2xpY2siLCJmb2N1cyIsNCwibmdJZiJdLFsi''@;'; put 'put ''Y2xhc3MiLCJjbHItdHJlZW5vZGUtc3Bpbm5lci1jb250YWluZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLWNoZWNrYm94LXdyYXBwZXIgY2xyLXRyZWVub2RlLWNoZWNrYm94Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci10cmVlbm9kZS1jb250ZW50IiwzLCJtb3VzZXVwIiw0LCJuZ0lm''@;'; put 'put ''Il0sWzEsImNsci10cmVlbm9kZS1jaGlsZHJlbiJdLFszLCJwYXJlbnQiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInR5cGUiLCJidXR0b24iLCJ0YWJpbmRleCIsIi0xIiwxLCJjbHItdHJlZW5vZGUtY2FyZXQiLDMsImNsaWNrIiwiZm9jdXMiLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJhbmds''@;'; put 'put ''ZSIsMSwiY2xyLXRyZWVub2RlLWNhcmV0LWljb24iXSxbMSwiY2xyLXRyZWVub2RlLXNwaW5uZXItY29udGFpbmVyIl0sWzEsImNsci10cmVlbm9kZS1zcGlubmVyIiwic3Bpbm5lciJdLFsxLCJjbHItY2hlY2tib3gtd3JhcHBlciIsImNsci10cmVlbm9kZS1jaGVja2JveCJdLFsiYXJpYS1o''@;'; put 'put ''aWRkZW4iLCJ0cnVlIiwidHlwZSIsImNoZWNrYm94IiwidGFiaW5kZXgiLCItMSIsMSwiY2xyLWNoZWNrYm94IiwzLCJjaGFuZ2UiLCJmb2N1cyIsImlkIiwiZGlzYWJsZWQiLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsMywiZm9yIl0sWzMsIm5n''@;'; put 'put ''VGVtcGxhdGVPdXRsZXQiXSxbMSwiY2xyLXRyZWVub2RlLWNvbnRlbnQiLDMsIm1vdXNldXAiXSxbImNsYXNzIiwiY2xyLXNyLW9ubHkiLDQsIm5nSWYiXSxbMSwiY2xyLXNyLW9ubHkiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXtpZigxJmEpe2NvbnN0IGg9T24oKTtzYShzJGUpLGRlKDAs''@;'; put 'put ''ImRpdiIsMiwwKSxPdCgia2V5ZG93biIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLEN0KGQub25LZXlEb3duKHYpKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoaCksQ3QoZC5icm9hZGNhc3RGb2N1c09uQ29udGFpbmVyKCkpfSksZ3QoMixjJGUsMiwyLCJidXR0b24iLDMpKDMs''@;'; put 'put ''dSRlLDIsMCwiZGl2Iiw0KSg0LGQkZSw0LDYsImRpdiIsNSkoNSxoJGUsMiwxLCJkaXYiLDYpKDYscCRlLDIsMSwibmctdGVtcGxhdGUiLG51bGwsMSx4YyksaGUoKSxkZSg4LCJkaXYiLDcpLFdyKDkpLFdyKDEwLDEpLEd0KDExLCJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIiw4KSxoZSgpfTIm''@;'; put 'put ''YSYmKHhyKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixkLmRpc2FibGVkKSxOcigiYXJpYS1kaXNhYmxlZCIsZC5kaXNhYmxlZCkoImFyaWEtZXhwYW5kZWQiLGQuaXNFeHBhbmRhYmxlKCk/ZC5leHBhbmRlZDpudWxsKSgiYXJpYS1zZWxlY3RlZCIsZC5hcmlhU2VsZWN0ZWQpLGZlKDIp''@;'; put 'put ''LEVlKCJuZ0lmIixkLmlzRXhwYW5kYWJsZSgpJiYhZC5pc01vZGVsTG9hZGluZyYmIWQuZXhwYW5kU2VydmljZS5sb2FkaW5nKSxmZSgpLEVlKCJuZ0lmIixkLmV4cGFuZFNlcnZpY2UubG9hZGluZ3x8ZC5pc01vZGVsTG9hZGluZyksZmUoKSxFZSgibmdJZiIsZC5mZWF0dXJlc1NlcnZpY2Uu''@;'; put 'put ''c2VsZWN0YWJsZSksZmUoKSxFZSgibmdJZiIsIWQuZmVhdHVyZXNTZXJ2aWNlLnNlbGVjdGFibGUpLGZlKDMpLEVlKCJAdG9nZ2xlQ2hpbGRyZW5BbmltIixkLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ/ImV4cGFuZGVkIjoiY29sbGFwc2VkIiksTnIoInJvbGUiLGQuaXNFeHBhbmRhYmxlKCkm''@;'; put 'put ''JiFkLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb24/Imdyb3VwIjpudWxsKSxmZSgzKSxFZSgicGFyZW50IixkLl9tb2RlbCkpfSxkZXBlbmRlbmNpZXM6W0NhLHlkLGZzLGxwZV0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbcDIoInRvZ2dsZUNoaWxkcmVuQW5pbSIsW3Z1KCJj''@;'; put 'put ''b2xsYXBzZWQgPT4gZXhwYW5kZWQiLFt3cyh7aGVpZ2h0OjB9KSx6MCgyMDAsd3Moe2hlaWdodDoiKiJ9KSldKSx2dSgiZXhwYW5kZWQgPT4gY29sbGFwc2VkIixbd3Moe2hlaWdodDoiKiJ9KSx6MCgyMDAsd3Moe2hlaWdodDowfSkpXSksekYoImV4cGFuZGVkIix3cyh7aGVpZ2h0OiIqIiwi''@;'; put 'put ''b3ZlcmZsb3cteSI6InZpc2libGUifSkpLHpGKCJjb2xsYXBzZWQiLHdzKHtoZWlnaHQ6MH0pKV0pXX19KSxjfSkoKTtmdW5jdGlvbiBkcGUoYyl7cmV0dXJuIGMudG9Mb2NhbGVMb3dlckNhc2UoKS50cmltKCl9bGV0IHcyPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0''@;'; put 'put ''aGlzLmZlYXR1cmVzU2VydmljZT1hLHRoaXMuZm9jdXNNYW5hZ2VyU2VydmljZT1kLHRoaXMucmVuZGVyZXI9aCx0aGlzLmVsPWYsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX2lzTXVsdGlTZWxlY3RhYmxlPSExO2NvbnN0IE09di5ydW5PdXRzaWRlQW5ndWxhcigoKT0+VGYoZi5uYXRp''@;'; put 'put ''dmVFbGVtZW50LCJmb2N1c2luIikuc3Vic2NyaWJlKEQ9PntELnRhcmdldD09PWYubmF0aXZlRWxlbWVudCYmKGQuZm9jdXNGaXJzdFZpc2libGVOb2RlKCksaC5yZW1vdmVBdHRyaWJ1dGUoZi5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIpKX0pKTt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChN''@;'; put 'put ''KX1zZXQgbGF6eShhKXt0aGlzLmZlYXR1cmVzU2VydmljZS5lYWdlcj0hYX1nZXQgaXNNdWx0aVNlbGVjdGFibGUoKXtyZXR1cm4gdGhpcy5faXNNdWx0aVNlbGVjdGFibGV9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXRSb290Tm9kZXMoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0''@;'; put 'put ''aGlzLnJvb3ROb2Rlcy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuc2V0TXVsdGlTZWxlY3RhYmxlKCksdGhpcy5zZXRSb290Tm9kZXMoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2V0TXVsdGlTZWxlY3RhYmxl''@;'; put 'put ''KCl7dGhpcy5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZSYmdGhpcy5yb290Tm9kZXMubGVuZ3RoPjA/KHRoaXMuX2lzTXVsdGlTZWxlY3RhYmxlPSEwLHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiYXJpYS1tdWx0aXNlbGVjdGFibGUiLCJ0cnVl''@;'; put 'put ''IikpOih0aGlzLl9pc011bHRpU2VsZWN0YWJsZT0hMSx0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImFyaWEtbXVsdGlzZWxlY3RhYmxlIikpfXNldFJvb3ROb2Rlcygpe3RoaXMuZm9jdXNNYW5hZ2VyU2VydmljZS5yb290Tm9kZU1vZGVscz10''@;'; put 'put ''aGlzLnJvb3ROb2Rlcy5tYXAoYT0+YS5fbW9kZWwpLmZpbHRlcihhPT4hYS5wYXJlbnQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShZOSkscWUoSlgpLHFlKE5vKSxxZShuYSkscWUoWGEpKX0sYy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxl''@;'; put 'put ''Y3RvcnM6W1siY2xyLXRyZWUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmcG8oaCxtaCw0KSwyJmEpe2xldCBmO2dpKGY9bWkoKSkmJihkLnJvb3ROb2Rlcz1mKX19LGhvc3RBdHRyczpbInRhYmluZGV4IiwiMCJdLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1''@;'; put 'put ''bmN0aW9uKGEsZCl7MiZhJiZOcigicm9sZSIsInRyZWUiKX0saW5wdXRzOntsYXp5OlswLCJjbHJMYXp5IiwibGF6eSJdfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltoYShbc3BlLEpYXSldLG5nQ29udGVudFNlbGVjdG9yczpUbyxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1szLCJjaGlsZHJl''@;'; put 'put ''biIsNCwibmdJZiJdLFszLCJjaGlsZHJlbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksV3IoMCksZ3QoMSxnJGUsMSwxLCJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIiwwKSksMiZhJiYoZmUoKSxFZSgibmdJZiIsZC5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uKSl9LGRl''@;'; put 'put ''cGVuZGVuY2llczpbQ2EsbHBlXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxEcWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe05zLmFkZEljb25zKG53KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUVpKHt0eXBlOmN9''@;'; put 'put ''KSxjLlx1MDI3NWluaj15aSh7aW1wb3J0czpbTmEsVnMsZFhdfSksY30pKCksSXFlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1FaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9eWkoe2ltcG9ydHM6W0Nx''@;'; put 'put ''ZSxNcWUsRHFlXX0pLGN9KSgpO2NvbnN0IFJxZT1bImluZm8iLCJ3YXJuaW5nIiwiZGFuZ2VyIiwic3VjY2VzcyIsIm5ldXRyYWwiLCJ1bmtub3duIiwibG9hZGluZyJdO2xldCBRWD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuY29tbW9uU3RyaW5ncz1hLHRoaXMuZGVmYXVs''@;'; put 'put ''dEljb25TaGFwZT0iaW5mby1zdGFuZGFyZCIsdGhpcy5fYWxlcnRJY29uU2hhcGU9IiIsdGhpcy5fYWxlcnRUeXBlPSJpbmZvIn1nZXQgYWxlcnRUeXBlKCl7cmV0dXJuIHRoaXMuX2FsZXJ0VHlwZX1zZXQgYWxlcnRUeXBlKGEpe1JxZS5pbmRleE9mKGEpPi0xJiYodGhpcy5fYWxlcnRUeXBl''@;'; put 'put ''PWEpfWdldCBhbGVydEljb25TaGFwZSgpe3JldHVybiIiPT09dGhpcy5fYWxlcnRJY29uU2hhcGU/dGhpcy5pY29uSW5mb0Zyb21UeXBlKHRoaXMuX2FsZXJ0VHlwZSkuc2hhcGU6dGhpcy5fYWxlcnRJY29uU2hhcGV9c2V0IGFsZXJ0SWNvblNoYXBlKGEpe2E/YSE9PXRoaXMuX2FsZXJ0SWNv''@;'; put 'put ''blNoYXBlJiYodGhpcy5fYWxlcnRJY29uU2hhcGU9YSk6dGhpcy5fYWxlcnRJY29uU2hhcGU9IiJ9Z2V0IGFsZXJ0SWNvblRpdGxlKCl7cmV0dXJuIHRoaXMuaWNvbkluZm9Gcm9tVHlwZSh0aGlzLl9hbGVydFR5cGUpLnRpdGxlfWljb25JbmZvRnJvbVR5cGUoYSl7Y29uc3QgZD17c2hhcGU6''@;'; put 'put ''IiIsY3NzQ2xhc3M6IiIsdGl0bGU6IiJ9O3N3aXRjaChhKXtjYXNlIndhcm5pbmciOmQuc2hhcGU9Indhcm5pbmctc3RhbmRhcmQiLGQuY3NzQ2xhc3M9ImFsZXJ0LXdhcm5pbmciLGQudGl0bGU9dGhpcy5jb21tb25TdHJpbmdzLmtleXMud2FybmluZzticmVhaztjYXNlImRhbmdlciI6ZC5z''@;'; put 'put ''aGFwZT0iZXJyb3Itc3RhbmRhcmQiLGQuY3NzQ2xhc3M9ImFsZXJ0LWRhbmdlciIsZC50aXRsZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYW5nZXI7YnJlYWs7Y2FzZSJzdWNjZXNzIjpkLnNoYXBlPSJzdWNjZXNzLXN0YW5kYXJkIixkLmNzc0NsYXNzPSJhbGVydC1zdWNjZXNzIixkLnRp''@;'; put 'put ''dGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnN1Y2Nlc3M7YnJlYWs7Y2FzZSJuZXV0cmFsIjpkLnNoYXBlPSJub3RlIixkLmNzc0NsYXNzPSJhbGVydC1uZXV0cmFsIixkLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLm5ldXRyYWw7YnJlYWs7Y2FzZSJ1bmtub3duIjpkLnNoYXBl''@;'; put 'put ''PSJoZWxwIixkLmNzc0NsYXNzPSJhbGVydC1uZXV0cmFsIixkLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnVua25vd247YnJlYWs7Y2FzZSJsb2FkaW5nIjpkLnNoYXBlPSJsb2FkaW5nIixkLmNzc0NsYXNzPSJhbGVydC1uZXV0cmFsIixkLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5n''@;'; put 'put ''cy5rZXlzLnVua25vd247YnJlYWs7ZGVmYXVsdDpkLnNoYXBlPXRoaXMuZGVmYXVsdEljb25TaGFwZSxkLmNzc0NsYXNzPSJhbGVydC1pbmZvIixkLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmluZm99cmV0dXJuIGR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1''@;'; put 'put ''cm4gbmV3KGF8fGMpKEhyKHBzKSl9LGMuXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksREg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2NoYW5nZT1uZXcgdXJ9Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhpcy5fY2hhbmdlLmFzT2Jz''@;'; put 'put ''ZXJ2YWJsZSgpfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7YSE9PXRoaXMuX2N1cnJlbnQmJih0aGlzLl9jdXJyZW50PWEsdGhpcy5fY2hhbmdlLm5leHQoYSkpfWdldCBhY3RpdmVBbGVydHMoKXtyZXR1cm4gdGhpcy5hbGxBbGVydHMmJnRoaXMu''@;'; put 'put ''YWxsQWxlcnRzLmZpbHRlcihhPT4hYS5fY2xvc2VkKX1nZXQgY3VycmVudEFsZXJ0KCl7cmV0dXJuIHRoaXMuYWN0aXZlQWxlcnRzJiZ0aGlzLmFjdGl2ZUFsZXJ0c1t0aGlzLmN1cnJlbnRdfXNldCBjdXJyZW50QWxlcnQoYSl7dGhpcy5jdXJyZW50PXRoaXMuYWN0aXZlQWxlcnRzLmluZGV4''@;'; put 'put ''T2YoYSl9Z2V0IGNvdW50KCl7cmV0dXJuIHRoaXMuYWN0aXZlQWxlcnRzJiZ0aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGh8fDB9bWFuYWdlKGEpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuYWxsQWxlcnRzPWEsdGhpcy5jdXJyZW50PSJu''@;'; put 'put ''dW1iZXIiPT10eXBlb2YgdGhpcy5fY3VycmVudD90aGlzLl9jdXJyZW50OjAsdGhpcy5fY2hhbmdlLm5leHQodGhpcy5jdXJyZW50KSx0aGlzLnN1YnNjcmlwdGlvbj10aGlzLmFsbEFsZXJ0cy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuY3VycmVudD49dGhpcy5hbGxBbGVydHMubGVu''@;'; put 'put ''Z3RoJiYodGhpcy5jdXJyZW50PU1hdGgubWF4KDAsdGhpcy5hbGxBbGVydHMubGVuZ3RoLTEpKX0pfW5leHQoKXt0aGlzLl9jdXJyZW50PXRoaXMuY3VycmVudD09PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aC0xPzA6dGhpcy5jdXJyZW50KzEsdGhpcy5fY2hhbmdlLm5leHQodGhpcy5fY3Vy''@;'; put 'put ''cmVudCl9cHJldmlvdXMoKXswIT09dGhpcy5hY3RpdmVBbGVydHMubGVuZ3RoJiYodGhpcy5fY3VycmVudD0wPT09dGhpcy5jdXJyZW50P3RoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aC0xOnRoaXMuY3VycmVudC0xLHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1cnJlbnQpKX1vcGVuKCl7MCE9''@;'; put 'put ''PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aCYmKHRoaXMuY3VycmVudEFsZXJ0fHwodGhpcy5fY3VycmVudD0wKSx0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KSl9Y2xvc2UoYSl7MCE9PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aCYmKGEmJih0aGlzLl9jdXJyZW50PU1hdGgubWF4''@;'; put 'put ''KDAsdGhpcy5jdXJyZW50LTEpKSx0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KSl9ZGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0s''@;'; put 'put ''Yy5cdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx2QT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXt0aGlzLmljb25TZXJ2aWNlPWEsdGhpcy5jZHI9ZCx0aGlzLm11bHRpQWxlcnRTZXJ2aWNlPWgsdGhpcy5jb21tb25TdHJp''@;'; put 'put ''bmdzPWYsdGhpcy5yZW5kZXJlcj12LHRoaXMuaG9zdEVsZW1lbnQ9TSx0aGlzLmlzU21hbGw9ITEsdGhpcy5jbG9zYWJsZT0hMCx0aGlzLmlzQXBwTGV2ZWw9ITEsdGhpcy5jbHJDbG9zZUJ1dHRvbkFyaWFMYWJlbD10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5hbGVydENsb3NlQnV0dG9uQXJp''@;'; put 'put ''YUxhYmVsLHRoaXMuX2Nsb3NlZENoYW5nZWQ9bmV3IFhyKCExKSx0aGlzLl9jbG9zZWQ9ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX2lzTGlnaHR3ZWlnaHQ9ITF9Z2V0IGlzTGlnaHR3ZWlnaHQoKXtyZXR1cm4gdGhpcy5faXNMaWdodHdlaWdodH1zZXQgaXNMaWdodHdlaWdodChh''@;'; put 'put ''KXt0aGlzLl9pc0xpZ2h0d2VpZ2h0PWEsdGhpcy5jb25maWdBbGVydFR5cGUodGhpcy5fb3JpZ0FsZXJ0VHlwZSl9Z2V0IGFsZXJ0VHlwZSgpe3JldHVybiB0aGlzLmljb25TZXJ2aWNlLmFsZXJ0VHlwZX1zZXQgYWxlcnRUeXBlKGEpe3RoaXMuX29yaWdBbGVydFR5cGU9YSx0aGlzLmNvbmZp''@;'; put 'put ''Z0FsZXJ0VHlwZShhKX1zZXQgYWxlcnRJY29uU2hhcGUoYSl7dGhpcy5pY29uU2VydmljZS5hbGVydEljb25TaGFwZT1hfXNldCBjbG9zZWQoYSl7YSYmIXRoaXMuX2Nsb3NlZD90aGlzLmNsb3NlKCk6IWEmJnRoaXMuX2Nsb3NlZCYmdGhpcy5vcGVuKCl9Z2V0IGFsZXJ0Q2xhc3MoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5pY29uU2VydmljZS5pY29uSW5mb0Zyb21UeXBlKHRoaXMuaWNvblNlcnZpY2UuYWxlcnRUeXBlKS5jc3NDbGFzc31nZXQgaGlkZGVuKCl7cmV0dXJuIHRoaXMuX2hpZGRlbn1zZXQgaGlkZGVuKGEpe2EhPT10aGlzLl9oaWRkZW4mJih0aGlzLl9oaWRkZW49YSx0aGlzLl9oaWRk''@;'; put 'put ''ZW4/dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsImFsZXJ0LWhpZGRlbiIpOnRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LCJhbGVydC1oaWRkZW4iKSx0aGlzLmNkci5kZXRlY3RDaGFu''@;'; put 'put ''Z2VzKCkpfW5nT25Jbml0KCl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZSYmdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuaGlkZGVuPXRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0IT09dGhp''@;'; put 'put ''c30pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9Y29uZmlnQWxlcnRUeXBlKGEpe3RoaXMuaWNvblNlcnZpY2UuYWxlcnRUeXBlPWF9b3Blbigpe3RoaXMuX2Nsb3NlZD0hMSx0aGlzLm11bHRpQWxlcnRTZXJ2aWNlJiZ0aGlz''@;'; put 'put ''Lm11bHRpQWxlcnRTZXJ2aWNlLm9wZW4oKSx0aGlzLl9jbG9zZWRDaGFuZ2VkLmVtaXQoITEpfWNsb3NlKCl7aWYoIXRoaXMuY2xvc2FibGUpcmV0dXJuO2NvbnN0IGE9dGhpcy5tdWx0aUFsZXJ0U2VydmljZT8uY3VycmVudEFsZXJ0PT09dGhpczt0aGlzLl9jbG9zZWQ9ITAsdGhpcy5tdWx0''@;'; put 'put ''aUFsZXJ0U2VydmljZT8uYWN0aXZlQWxlcnRzJiZ0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNsb3NlKGEpLHRoaXMuX2Nsb3NlZENoYW5nZWQuZW1pdCghMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKFFYKSxxZShIcykscWUoREgsOCkscWUo''@;'; put 'put ''cHMpLHFlKE5vKSxxZShuYSkpfSxjLlx1MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWxlcnQiXV0saW5wdXRzOntpc1NtYWxsOlswLCJjbHJBbGVydFNpemVTbWFsbCIsImlzU21hbGwiXSxjbG9zYWJsZTpbMCwiY2xyQWxlcnRDbG9zYWJsZSIsImNsb3NhYmxlIl0saXNB''@;'; put 'put ''cHBMZXZlbDpbMCwiY2xyQWxlcnRBcHBMZXZlbCIsImlzQXBwTGV2ZWwiXSxjbHJDbG9zZUJ1dHRvbkFyaWFMYWJlbDoiY2xyQ2xvc2VCdXR0b25BcmlhTGFiZWwiLGlzTGlnaHR3ZWlnaHQ6WzAsImNsckFsZXJ0TGlnaHR3ZWlnaHQiLCJpc0xpZ2h0d2VpZ2h0Il0sYWxlcnRUeXBlOlswLCJj''@;'; put 'put ''bHJBbGVydFR5cGUiLCJhbGVydFR5cGUiXSxhbGVydEljb25TaGFwZTpbMCwiY2xyQWxlcnRJY29uIiwiYWxlcnRJY29uU2hhcGUiXSxjbG9zZWQ6WzAsImNsckFsZXJ0Q2xvc2VkIiwiY2xvc2VkIl19LG91dHB1dHM6e19jbG9zZWRDaGFuZ2VkOiJjbHJBbGVydENsb3NlZENoYW5nZSJ9LHN0''@;'; put 'put ''YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hhKFtRWF0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6VG8sZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbImNsYXNzIiwiYWxlcnQiLDMsIm5nQ2xhc3MiLCJhbGVydC1zbSIsImFsZXJ0LWxpZ2h0d2VpZ2h0IiwiYWxlcnQtYXBwLWxldmVsIiw0LCJuZ0lmIl0s''@;'; put 'put ''WzEsImFsZXJ0IiwzLCJuZ0NsYXNzIl0sWzEsImFsZXJ0LWl0ZW1zIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJjbG9zZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImNsb3NlIiwzLCJjbGljayJdLFsic2hhcGUiLCJ3aW5kb3ctY2xvc2UiXV0sdGVtcGxh''@;'; put 'put ''dGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLGd0KDAsdiRlLDQsOCwiZGl2IiwwKSksMiZhJiZFZSgibmdJZiIsIWQuX2Nsb3NlZCl9LGRlcGVuZGVuY2llczpbUnUsQ2EsZnNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGhwZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMu''@;'; put 'put ''aWNvblNlcnZpY2U9YX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoUVgpKX0sYy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0LWl0ZW0iXV0saG9zdEF0dHJzOlsxLCJhbGVydC1pdGVtIl0sc3RhbmRhbG9uZToh''@;'; put 'put ''MSxuZ0NvbnRlbnRTZWxlY3RvcnM6VG8sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwiYWxlcnQtaWNvbi13cmFwcGVyIl0sWyJjbGFzcyIsImFsZXJ0LXNwaW5uZXIiLCJjbHJJbmxpbmUiLCIiLDQsIm5nSWYiXSxbImNsYXNzIiwiYWxlcnQtaWNvbiIsInJvbGUiLCJpbWciLDQsIm5nSWYi''@;'; put 'put ''XSxbImNscklubGluZSIsIiIsMSwiYWxlcnQtc3Bpbm5lciJdLFsicm9sZSIsImltZyIsMSwiYWxlcnQtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksZGUoMCwiZGl2IiwwKSxndCgxLHkkZSwxLDAsImNsci1zcGlubmVyIiwxKSgyLGIkZSwxLDIsImNkcy1pY29u''@;'; put 'put ''IiwyKSxoZSgpLFdyKDMpKSwyJmEmJihmZSgpLEVlKCJuZ0lmIiwibG9hZGluZyI9PT1kLmljb25TZXJ2aWNlLmFsZXJ0SWNvblNoYXBlKSxmZSgpLEVlKCJuZ0lmIiwibG9hZGluZyIhPT1kLmljb25TZXJ2aWNlLmFsZXJ0SWNvblNoYXBlKSl9LGRlcGVuZGVuY2llczpbQ2EsZnMsZmhdLGVu''@;'; put 'put ''Y2Fwc3VsYXRpb246Mn0pLGN9KSgpLHlBPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWRpcj1Zcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLDgsImFsZXJ0LXRleHQiXV0sc3RhbmRhbG9uZTohMX0pLGN9KSgp''@;'; put 'put ''LGZwZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZT1hLHRoaXMuY29tbW9uU3RyaW5ncz1kLHRoaXMuY3VycmVudEFsZXJ0Q2hhbmdlPW5ldyBYcighMSksdGhpcy5jdXJyZW50QWxlcnRJbmRleENoYW5nZT1uZXcgWHJ9Z2V0IGN1cnJlbnRB''@;'; put 'put ''bGVydCgpe3JldHVybiB0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydH1zZXQgY3VycmVudEFsZXJ0KGEpe2EmJih0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydD1hKX1nZXQgY3VycmVudEFsZXJ0SW5kZXgoKXtyZXR1cm4gdGhpcy5tdWx0aUFsZXJ0U2Vydmlj''@;'; put 'put ''ZS5jdXJyZW50fXNldCBjdXJyZW50QWxlcnRJbmRleChhKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnQ9YX1nZXQgcHJldmlvdXNBbGVydEFyaWFMYWJlbCgpe2NvbnN0IGE9dGhpcy5jdXJyZW50QWxlcnRJbmRleCsxO3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhp''@;'; put 'put ''cy5jb21tb25TdHJpbmdzLmtleXMuYWxlcnRQcmV2aW91c0FsZXJ0QXJpYUxhYmVsLHtDVVJSRU5UOigxPT09YT90aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNvdW50OmEtMSkudG9TdHJpbmcoKSxDT1VOVDp0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNvdW50LnRvU3RyaW5nKCl9KX1nZXQgbmV4''@;'; put 'put ''dEFsZXJ0QXJpYUxhYmVsKCl7Y29uc3QgYT10aGlzLmN1cnJlbnRBbGVydEluZGV4KzE7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5hbGVydE5leHRBbGVydEFyaWFMYWJlbCx7Q1VSUkVOVDooYT09PXRoaXMubXVsdGlBbGVydFNlcnZp''@;'; put 'put ''Y2UuY291bnQ/MTphKzEpLnRvU3RyaW5nKCksQ09VTlQ6dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jb3VudC50b1N0cmluZygpfSl9bmdPbkluaXQoKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlQ2hhbmdlcz10aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNoYW5nZXMuc3Vic2NyaWJlKGE9Pnt0aGlz''@;'; put 'put ''LmN1cnJlbnRBbGVydEluZGV4Q2hhbmdlLmVtaXQoYSksdGhpcy5jdXJyZW50QWxlcnRDaGFuZ2UuZW1pdCh0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmFjdGl2ZUFsZXJ0c1thXSl9KX1uZ09uRGVzdHJveSgpe3RoaXMubXVsdGlBbGVydFNlcnZpY2VDaGFuZ2VzLnVuc3Vic2NyaWJlKCl9cGFn''@;'; put 'put ''ZVVwKCl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5uZXh0KCl9cGFnZURvd24oKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLnByZXZpb3VzKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKERIKSxxZShwcykpfSxjLlx1MDI3NWNtcD1hcih7dHlw''@;'; put 'put ''ZTpjLHNlbGVjdG9yczpbWyJjbHItYWxlcnRzLXBhZ2VyIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZ4cigiYWxlcnRzLXBhZ2VyIiwhMCl9LGlucHV0czp7Y3VycmVudEFsZXJ0OlswLCJjbHJDdXJyZW50QWxlcnQiLCJjdXJyZW50QWxlcnQiXSxjdXJy''@;'; put 'put ''ZW50QWxlcnRJbmRleDpbMCwiY2xyQ3VycmVudEFsZXJ0SW5kZXgiLCJjdXJyZW50QWxlcnRJbmRleCJdfSxvdXRwdXRzOntjdXJyZW50QWxlcnRDaGFuZ2U6ImNsckN1cnJlbnRBbGVydENoYW5nZSIsY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2U6ImNsckN1cnJlbnRBbGVydEluZGV4Q2hhbmdl''@;'; put 'put ''In0sc3RhbmRhbG9uZTohMSxkZWNsczo5LHZhcnM6Nixjb25zdHM6W1sxLCJhbGVydHMtcGFnZXItY29udHJvbCJdLFsxLCJhbGVydHMtcGFnZS1kb3duIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJhbGVydHMtcGFnZXItYnV0dG9uIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVj''@;'; put 'put ''dGlvbiIsImxlZnQiXSxbMSwiYWxlcnRzLXBhZ2VyLXRleHQiXSxbMSwiYWxlcnRzLXBhZ2UtdXAiXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJyaWdodCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGRlKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJidXR0b24iLDIp''@;'; put 'put ''LE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5wYWdlRG93bigpfSksR3QoMywiY2RzLWljb24iLDMpLGhlKCkoKSxkZSg0LCJkaXYiLDQpLFBlKDUpLGhlKCksZGUoNiwiZGl2Iiw1KSg3LCJidXR0b24iLDIpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5wYWdlVXAoKX0p''@;'; put 'put ''LEd0KDgsImNkcy1pY29uIiw2KSxoZSgpKCkoKSksMiZhJiYoZmUoMiksTnIoImFyaWEtbGFiZWwiLGQucHJldmlvdXNBbGVydEFyaWFMYWJlbCksZmUoKSxOcigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLnByZXZpb3VzKSxmZSgyKSxYdSgiIixkLm11bHRpQWxlcnRTZXJ2aWNlLmN1''@;'; put 'put ''cnJlbnQrMSwiIC8gIixkLm11bHRpQWxlcnRTZXJ2aWNlLmNvdW50LCIiKSxmZSgyKSxOcigiYXJpYS1sYWJlbCIsZC5uZXh0QWxlcnRBcmlhTGFiZWwpLGZlKCksTnIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5uZXh0KSl9LGRlcGVuZGVuY2llczpbZnNdLGVuY2Fwc3VsYXRpb246''@;'; put 'put ''Mn0pLGN9KSgpLHBwZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMubXVsdGlBbGVydFNlcnZpY2U9YSx0aGlzLmN1cnJlbnRBbGVydENoYW5nZT1uZXcgWHIoITEpLHRoaXMuY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2U9bmV3IFhyKCExKSx0aGlzLnN1YnNjcmlwdGlvbnM9W119''@;'; put 'put ''c2V0IGFsbEFsZXJ0cyhhKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLm1hbmFnZShhKX1zZXQgX2lucHV0Q3VycmVudEluZGV4KGEpe051bWJlci5pc0ludGVnZXIoYSkmJmE+PTAmJih0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnQ9YSl9Z2V0IGN1cnJlbnRBbGVydEluZGV4KCl7cmV0''@;'; put 'put ''dXJuIHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudH1zZXQgY3VycmVudEFsZXJ0SW5kZXgoYSl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50PWF9Z2V0IGN1cnJlbnRBbGVydCgpe3JldHVybiB0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydH1zZXQgY3VycmVu''@;'; put 'put ''dEFsZXJ0KGEpe2EmJih0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydD1hKX1nZXQgYWxlcnRzKCl7cmV0dXJuIHRoaXMuYWxsQWxlcnRzLmZpbHRlcihhPT4hMT09PWEuaGlkZGVuKX1nZXQgY3VycmVudEFsZXJ0VHlwZSgpe3JldHVybiB0aGlzLm11bHRpQWxlcnRTZXJ2aWNl''@;'; put 'put ''LmN1cnJlbnRBbGVydD90aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydC5hbGVydFR5cGU6IiJ9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZShhPT57dGhpcy5jdXJyZW50''@;'; put 'put ''QWxlcnRJbmRleENoYW5nZS5uZXh0KGEpLHRoaXMuY3VycmVudEFsZXJ0Q2hhbmdlLm5leHQodGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKSx0aGlzLm11bHRp''@;'; put 'put ''QWxlcnRTZXJ2aWNlLmRlc3Ryb3koKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoREgpKX0sYy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0cyJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYo''@;'; put 'put ''MSZhJiZwbyhoLHZBLDQpLDImYSl7bGV0IGY7Z2koZj1taSgpKSYmKGQuYWxsQWxlcnRzPWYpfX0saG9zdFZhcnM6MTIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZ4cigiYWxlcnRzIiwhMCkoImFsZXJ0LWRhbmdlciIsImRhbmdlciI9PWQuY3VycmVudEFsZXJ0VHlwZSkoImFs''@;'; put 'put ''ZXJ0LWluZm8iLCJpbmZvIj09ZC5jdXJyZW50QWxlcnRUeXBlKSgiYWxlcnQtc3VjY2VzcyIsInN1Y2Nlc3MiPT1kLmN1cnJlbnRBbGVydFR5cGUpKCJhbGVydC13YXJuaW5nIiwid2FybmluZyI9PWQuY3VycmVudEFsZXJ0VHlwZSkoImFsZXJ0LW5ldXRyYWwiLCJuZXV0cmFsIj09ZC5jdXJy''@;'; put 'put ''ZW50QWxlcnRUeXBlKX0saW5wdXRzOntfaW5wdXRDdXJyZW50SW5kZXg6WzAsImNsckN1cnJlbnRBbGVydEluZGV4IiwiX2lucHV0Q3VycmVudEluZGV4Il0sY3VycmVudEFsZXJ0OlswLCJjbHJDdXJyZW50QWxlcnQiLCJjdXJyZW50QWxlcnQiXX0sb3V0cHV0czp7Y3VycmVudEFsZXJ0Q2hh''@;'; put 'put ''bmdlOiJjbHJDdXJyZW50QWxlcnRDaGFuZ2UiLGN1cnJlbnRBbGVydEluZGV4Q2hhbmdlOiJjbHJDdXJyZW50QWxlcnRJbmRleENoYW5nZSJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hhKFtESF0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6dyRlLGRlY2xzOjMsdmFyczoxLGNvbnN0czpbWzEs''@;'; put 'put ''ImFsZXJ0cy13cmFwcGVyIl0sWzMsImNsckN1cnJlbnRBbGVydEluZGV4Iiw0LCJuZ0lmIl0sWzMsImNsckN1cnJlbnRBbGVydEluZGV4Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoXyRlKSxkZSgwLCJkaXYiLDApLGd0KDEsQyRlLDEsMSwiY2xyLWFsZXJ0cy1wYWdlciIs''@;'; put 'put ''MSksV3IoMiksaGUoKSksMiZhJiYoZmUoKSxFZSgibmdJZiIsZC5tdWx0aUFsZXJ0U2VydmljZS5jb3VudD4xKSl9LGRlcGVuZGVuY2llczpbQ2EsZnBlXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9Il19KSxjfSkoKSxncGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1''@;'; put 'put ''Y3Rvcigpe05zLmFkZEljb25zKFJLLEZqZSxIamUsTmplLExLLFZqZSxPVCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1FaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9eWkoe2ltcG9ydHM6W05hLFZzLHBYLGd3XX0pLGN9KSgp''@;'; put 'put ''LExxZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9RWkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPXlpKHtpbXBvcnRzOltncGVdfSksY30pKCksbXBlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7''@;'; put 'put ''dGhpcy5fZG9jdW1lbnQ9YX1zdG9wU2Nyb2xsaW5nKCl7dGhpcy5fZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCJuby1zY3JvbGxpbmciKX1yZXN1bWVTY3JvbGxpbmcoKXt0aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygibm8tc2Nyb2xsaW5nIikmJnRoaXMuX2Rv''@;'; put 'put ''Y3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgibm8tc2Nyb2xsaW5nIil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEhyKEdzKSl9LGMuXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksdnBlPSgoKT0+''@;'; put 'put ''e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmZhZGVNb3ZlPSJmYWRlRG93biIsdGhpcy5iYWNrZHJvcD0hMH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3Zp''@;'; put 'put ''ZGVkSW46InJvb3QifSksY30pKCksYnU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLl9zY3JvbGxpbmdTZXJ2aWNlPWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5tb2RhbFN0YWNrU2VydmljZT1oLHRoaXMuY29uZmlndXJhdGlvbj1mLHRoaXMubW9kYWxJZD1P''@;'; put 'put ''dSgpLHRoaXMuX29wZW49ITEsdGhpcy5fb3BlbkNoYW5nZWQ9bmV3IFhyKCExKSx0aGlzLmNsb3NhYmxlPSEwLHRoaXMuY2xvc2VCdXR0b25BcmlhTGFiZWw9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UsdGhpcy5zaXplPSJtZCIsdGhpcy5zdGF0aWNCYWNrZHJvcD0hMCx0aGlzLnNr''@;'; put 'put ''aXBBbmltYXRpb249ITEsdGhpcy5zdG9wQ2xvc2U9ITEsdGhpcy5hbHRDbG9zZT1uZXcgWHIoITEpLHRoaXMuYnlwYXNzU2Nyb2xsU2VydmljZT0hMX1nZXQgZmFkZU1vdmUoKXtyZXR1cm4gdGhpcy5za2lwQW5pbWF0aW9uPyIiOnRoaXMuY29uZmlndXJhdGlvbi5mYWRlTW92ZX1zZXQgZmFk''@;'; put 'put ''ZU1vdmUoYSl7dGhpcy5jb25maWd1cmF0aW9uLmZhZGVNb3ZlPWF9Z2V0IGJhY2tkcm9wKCl7cmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi5iYWNrZHJvcH1uZ09uQ2hhbmdlcyhhKXshdGhpcy5ieXBhc3NTY3JvbGxTZXJ2aWNlJiZhJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5''@;'; put 'put ''LmNhbGwoYSwiX29wZW4iKSYmKGEuX29wZW4uY3VycmVudFZhbHVlPyh0aGlzLl9zY3JvbGxpbmdTZXJ2aWNlLnN0b3BTY3JvbGxpbmcoKSx0aGlzLm1vZGFsU3RhY2tTZXJ2aWNlLnRyYWNrTW9kYWxPcGVuKHRoaXMpKTp0aGlzLl9zY3JvbGxpbmdTZXJ2aWNlLnJlc3VtZVNjcm9sbGluZygp''@;'; put 'put ''KX1uZ09uRGVzdHJveSgpe3RoaXMuX3Njcm9sbGluZ1NlcnZpY2UucmVzdW1lU2Nyb2xsaW5nKCl9b3Blbigpe3RoaXMuX29wZW58fCh0aGlzLl9vcGVuPSEwLHRoaXMuX29wZW5DaGFuZ2VkLmVtaXQoITApLHRoaXMubW9kYWxTdGFja1NlcnZpY2UudHJhY2tNb2RhbE9wZW4odGhpcykpfWJh''@;'; put 'put ''Y2tkcm9wQ2xpY2soKXt0aGlzLnN0YXRpY0JhY2tkcm9wP3RoaXMudGl0bGUubmF0aXZlRWxlbWVudC5mb2N1cygpOnRoaXMuY2xvc2UoKX1jbG9zZSgpe3RoaXMuc3RvcENsb3NlP3RoaXMuYWx0Q2xvc2UuZW1pdCghMSk6IXRoaXMuY2xvc2FibGV8fCF0aGlzLl9vcGVufHwodGhpcy5fb3Bl''@;'; put 'put ''bj0hMSl9ZmFkZURvbmUoYSl7InZvaWQiPT09YS50b1N0YXRlJiYodGhpcy5fb3BlbkNoYW5nZWQuZW1pdCghMSksdGhpcy5tb2RhbFN0YWNrU2VydmljZS50cmFja01vZGFsQ2xvc2UodGhpcykpfXNjcm9sbFRvcCgpe3RoaXMuYm9keUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxU''@;'; put 'put ''bygwLDApfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShtcGUpLHFlKHBzKSxxZSgkM2UpLHFlKHZwZSkpfSxjLlx1MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItbW9kYWwiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxk''@;'; put 'put ''LGgpe2lmKDEmYSYmcG8oaCxTJGUsNSksMiZhKXtsZXQgZjtnaShmPW1pKCkpJiYoZC5tb2RhbENvbnRlbnRUZW1wbGF0ZT1mLmZpcnN0KX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKFVhKHpmZSw1KSxVYShVZmUsNSkpLDImYSl7bGV0IGg7Z2koaD1taSgpKSYmKGQudGl0''@;'; put 'put ''bGU9aC5maXJzdCksZ2koaD1taSgpKSYmKGQuYm9keUVsZW1lbnRSZWY9aC5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmeHIoIm9wZW4iLGQuX29wZW4pfSxpbnB1dHM6e19vcGVuOlswLCJjbHJNb2RhbE9wZW4iLCJfb3BlbiJdLGNsb3NhYmxl''@;'; put 'put ''OlswLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xvc2FibGUiXSxjbG9zZUJ1dHRvbkFyaWFMYWJlbDpbMCwiY2xyTW9kYWxDbG9zZUJ1dHRvbkFyaWFMYWJlbCIsImNsb3NlQnV0dG9uQXJpYUxhYmVsIl0sc2l6ZTpbMCwiY2xyTW9kYWxTaXplIiwic2l6ZSJdLHN0YXRpY0JhY2tkcm9wOlswLCJj''@;'; put 'put ''bHJNb2RhbFN0YXRpY0JhY2tkcm9wIiwic3RhdGljQmFja2Ryb3AiXSxza2lwQW5pbWF0aW9uOlswLCJjbHJNb2RhbFNraXBBbmltYXRpb24iLCJza2lwQW5pbWF0aW9uIl0sc3RvcENsb3NlOlswLCJjbHJNb2RhbFByZXZlbnRDbG9zZSIsInN0b3BDbG9zZSJdLGxhYmVsbGVkQnk6WzAsImNs''@;'; put 'put ''ck1vZGFsTGFiZWxsZWRCeUlkIiwibGFiZWxsZWRCeSJdLGJ5cGFzc1Njcm9sbFNlcnZpY2U6WzAsImNsck1vZGFsT3ZlcnJpZGVTY3JvbGxTZXJ2aWNlIiwiYnlwYXNzU2Nyb2xsU2VydmljZSJdfSxvdXRwdXRzOntfb3BlbkNoYW5nZWQ6ImNsck1vZGFsT3BlbkNoYW5nZSIsYWx0Q2xvc2U6''@;'; put 'put ''ImNsck1vZGFsQWx0ZXJuYXRlQ2xvc2UifSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltoYShbXSxbbXBlXSksV29dLG5nQ29udGVudFNlbGVjdG9yczp4JGUsZGVjbHM6Mix2YXJzOjIsY29uc3RzOltbInRpdGxlIiwiIl0sWyJib2R5IiwiIl0sWyJjbGFzcyIsIm1vZGFsIiwzLCJtb2RhbC1m''@;'; put 'put ''dWxsLXNjcmVlbiIsNCwibmdJZiJdLFsiY2xhc3MiLCJtb2RhbC1iYWNrZHJvcCIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwibW9kYWwiXSxbImNka1RyYXBGb2N1cyIsIiIsInJvbGUiLCJkaWFsb2ciLCJhcmlhLW1vZGFsIiwidHJ1ZSIsMSwibW9kYWwt''@;'; put 'put ''ZGlhbG9nIiwzLCJjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZSJdLFsxLCJjbHItc3Itb25seSJdLFsiY2xhc3MiLCJtb2RhbC1jb250ZW50LXdyYXBwZXIiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsxLCJtb2RhbC1jb250ZW50LXdyYXBwZXIiXSxbMSwibW9kYWwtY29udGVudCJdLFsxLCJtb2Rh''@;'; put 'put ''bC1oZWFkZXItLWFjY2Vzc2libGUiXSxbImNka0ZvY3VzSW5pdGlhbCIsIiIsInRhYmluZGV4IiwiLTEiLDEsIm1vZGFsLXRpdGxlLXdyYXBwZXIiLDMsImlkIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJjbG9zZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwibW9kYWwtYm9keS13cmFw''@;'; put 'put ''cGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjbG9zZSIsMywiY2xpY2siXSxbInNoYXBlIiwid2luZG93LWNsb3NlIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWJhY2tkcm9wIiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKE0kZSksZ3QoMCxB''@;'; put 'put ''JGUsNywxNiwiZGl2IiwyKSgxLGskZSwxLDEsImRpdiIsMykpLDImYSYmKEVlKCJuZ0lmIixkLl9vcGVuKSxmZSgpLEVlKCJuZ0lmIixkLmJhY2tkcm9wKSl9LGRlcGVuZGVuY2llczpbQ2EseXcsZnNdLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W3AyKCJmYWRlTW92ZSIsW3Z1''@;'; put 'put ''KCIqID0+IGZhZGVEb3duIixbd3Moe29wYWNpdHk6MCx0cmFuc2Zvcm06InRyYW5zbGF0ZSgwLCAtMjUlKSJ9KSx6MCgiMC4ycyBlYXNlLWluLW91dCIpXSksdnUoImZhZGVEb3duID0+ICoiLFt6MCgiMC4ycyBlYXNlLWluLW91dCIsd3Moe29wYWNpdHk6MCx0cmFuc2Zvcm06InRyYW5zbGF0''@;'; put 'put ''ZSgwLCAtMjUlKSJ9KSldKSx2dSgiKiA9PiBmYWRlTGVmdCIsW3dzKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoMjUlLCAwKSJ9KSx6MCgiMC4ycyBlYXNlLWluLW91dCIpXSksdnUoImZhZGVMZWZ0ID0+ICoiLFt6MCgiMC4ycyBlYXNlLWluLW91dCIsd3Moe29wYWNpdHk6MCx0''@;'; put 'put ''cmFuc2Zvcm06InRyYW5zbGF0ZSgyNSUsIDApIn0pKV0pXSkscDIoImZhZGUiLFt2dSgidm9pZCA9PiAqIixbd3Moe29wYWNpdHk6MH0pLHowKCIwLjJzIGVhc2UtaW4tb3V0Iix3cyh7b3BhY2l0eTouODV9KSldKSx2dSgiKiA9PiB2b2lkIixbejAoIjAuMnMgZWFzZS1pbi1vdXQiLHdzKHtv''@;'; put 'put ''cGFjaXR5OjB9KSldKV0pXX19KSxjfSkoKSxyMD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLnJlbmRlcmVyPWEsdGhpcy5ob3N0PWQsdGhpcy50YWJpbmRleD0iMCIsdGhpcy51bmxpc3RlbmVycz1bXSxoLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5vYnNlcnZl''@;'; put 'put ''cj1uZXcgUmVzaXplT2JzZXJ2ZXIoKCk9PnRoaXMuYWRkT3JSZW1vdmVUYWJJbmRleCgpKSx0aGlzLm9ic2VydmVyLm9ic2VydmUoZC5uYXRpdmVFbGVtZW50KSx0aGlzLnVubGlzdGVuZXJzLnB1c2goYS5saXN0ZW4oZC5uYXRpdmVFbGVtZW50LCJtb3VzZXVwIiwoKT0+e3RoaXMuYWRkT3JS''@;'; put 'put ''ZW1vdmVUYWJJbmRleCgpfSksYS5saXN0ZW4oZC5uYXRpdmVFbGVtZW50LCJtb3VzZWRvd24iLCgpPT57dGhpcy5yZW1vdmVUYWJJbmRleCgpfSkpfSl9bmdPbkRlc3Ryb3koKXtmb3IoO3RoaXMudW5saXN0ZW5lcnMubGVuZ3RoOyl0aGlzLnVubGlzdGVuZXJzLnBvcCgpKCk7dGhpcy5vYnNl''@;'; put 'put ''cnZlci5kaXNjb25uZWN0KCksdGhpcy5vYnNlcnZlcj1udWxsfWFkZFRhYkluZGV4KCl7dGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsInRhYmluZGV4Iix0aGlzLnRhYmluZGV4KX1yZW1vdmVUYWJJbmRleCgpe3RoaXMucmVuZGVyZXIucmVtb3Zl''@;'; put 'put ''QXR0cmlidXRlKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIpfWFkZE9yUmVtb3ZlVGFiSW5kZXgoKXtjb25zdCBhPXRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQ7YSYmYS5jbGllbnRIZWlnaHQ8YS5zY3JvbGxIZWlnaHQ/dGhpcy5hZGRUYWJJbmRleCgp''@;'; put 'put ''OnRoaXMucmVtb3ZlVGFiSW5kZXgoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoTm8pLHFlKG5hKSxxZShYYSkpfSxjLlx1MDI3NWRpcj1Zcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLDgsIm1vZGFsLWJvZHkiXV0sc3RhbmRhbG9uZTohMX0p''@;'; put 'put ''LGN9KSgpLElIPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtOcy5hZGRJY29ucyhPVCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1FaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9eWkoe2ltcG9ydHM6W05hLGZILFZzLFZz''@;'; put 'put ''XX0pLGN9KSgpLE9xZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9RWkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPXlpKHtpbXBvcnRzOltOYSxmSCxWcyxJSCxJSCxWc119KSxjfSkoKSxQcWU9KCgpPT57''@;'; put 'put ''Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUVpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj15aSh7aW1wb3J0czpbTmFdfSksY30pKCksSHFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtOcy5hZGRJY29ucyhC''@;'; put 'put ''amUsamplLFJLLExLKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPUVpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj15aSh7aW1wb3J0czpbTmEsVnMsZ3csVnMsZ3ddfSksY30pKCksenFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0''@;'; put 'put ''b3IoKXtOcy5hZGRJY29ucyhSSyxMSyl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1FaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9eWkoe2ltcG9ydHM6W05hLElILGdwZV19KSxjfSkoKSx1MT0oKCk9PntjbGFzcyBje31yZXR1''@;'; put 'put ''cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9RWkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPXlpKHtpbXBvcnRzOltMcWUsSXFlLFZzLElILGRYLFJmLGlILFRLZSx6M2UsU1hlLFlLZSx6cWUsT3FlLHBLZSxndyxQcWUsckEsSHFlXX0pLGN9''@;'; put 'put ''KSgpLFVxZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5sb2dnZXJTZXJ2aWNlPWQsdGhpcy5fc3Vic2NyaXB0aW9uPW5ldyBCdCx0aGlzLmxvYWRpbmc9ITEsdGhpcy5hbGVydENsb3NlZD0hMCx0aGlzLmRhdGE9e3VzZXI6bnVsbCxwYXNz''@;'; put 'put ''Om51bGx9fW5nT25Jbml0KCl7IlJlZGlyZWN0ZWQiIT09dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCkubG9naW5NZWNoYW5pc20mJih0aGlzLl9zdWJzY3JpcHRpb249dGhpcy5zYXNTZXJ2aWNlLnNob3VsZExvZ2luLnN1YnNjcmliZShkPT57dGhpcy5pc0FjdGl2ZT1kO2xldCBo''@;'; put 'put ''PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImJvZHkiKTtoJiYoZD9oLmNsYXNzTGlzdC5hZGQoInNob3VsZC1sb2dpbiIpOmguY2xhc3NMaXN0LnJlbW92ZSgic2hvdWxkLWxvZ2luIikpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9c3VibWl0KCl7''@;'; put 'put ''dGhpcy5sb2FkaW5nfHwodGhpcy5sb2FkaW5nPSEwLHRoaXMuZGF0YS51c2VyJiZ0aGlzLmRhdGEucGFzcyYmdGhpcy5zYXNTZXJ2aWNlLmxvZ2luKHRoaXMuZGF0YS51c2VyLHRoaXMuZGF0YS5wYXNzKS50aGVuKGE9Pnt0aGlzLmxvYWRpbmc9ITEsYXx8KHRoaXMuZXJyb3JNc2c9IlVzZXJu''@;'; put 'put ''YW1lIG9yIHBhc3N3b3JkIGludmFsaWQiLHRoaXMuYWxlcnRDbG9zZWQ9ITEpfSxhPT57dGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyhhKSx0aGlzLmxvYWRpbmc9ITEsdGhpcy5lcnJvck1zZz1hLHRoaXMuYWxlcnRDbG9zZWQ9ITF9KSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQp''@;'; put 'put ''e3JldHVybiBuZXcoZHx8YykocWUoS3MpLHFlKG9oKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbG9naW4iXV0sc3RhbmRhbG9uZTohMSxkZWNsczoyMCx2YXJzOjksY29uc3RzOltbMSwibG9naW4tc2lkZWJhci13cmFwcGVyIl0sWzEsImxv''@;'; put 'put ''Z2luLXNpZGViYXIiLCJzaWRlQmFyUHJvcHMiXSxbInNyYyIsIi9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9pbWFnZXMvZGF0YWNvbnRyb2xsZXItc3ZnIiwiYWx0IiwiZGF0YWNvbnRyb2xsZXIgbG9nbyIsMSwibG9naW4tbG9nbyJd''@;'; put 'put ''LFsxLCJsb2dpbiIsMywibmdTdWJtaXQiXSxbMSwidGl0bGUiXSxbMSwid2VsY29tZSJdLFsxLCJoaW50Il0sWzEsImxvZ2luLWdyb3VwIl0sWyJjbHJJbnB1dCIsIiIsIm5hbWUiLCJ1c2VyIiwidHlwZSIsInRleHQiLCJwbGFjZWhvbGRlciIsIlVzZXJuYW1lIiwxLCJ1c2VybmFtZSIsMywi''@;'; put 'put ''bmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbImNscklucHV0IiwiIiwibmFtZSIsInBhc3MiLCJ0eXBlIiwicGFzc3dvcmQiLCJwbGFjZWhvbGRlciIsIlBhc3N3b3JkIiwxLCJwYXNzd29yZCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMywiY2xyQWxlcnRDbG9zZWRDaGFuZ2Ui''@;'; put 'put ''LCJjbHJBbGVydFR5cGUiLCJjbHJBbGVydENsb3NlZCJdLFsiY2xyLWFsZXJ0LWl0ZW0iLCIiLDEsImFsZXJ0LWl0ZW0iXSxbMSwiYWxlcnQtdGV4dCJdLFsidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLDMsImNsckxvYWRpbmciLCJkaXNhYmxlZCJdLFsx''@;'; put 'put ''LCJvdmVybGF5Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpLEd0KDIsImltZyIsMiksZGUoMywiZm9ybSIsMyksT3QoIm5nU3VibWl0IixmdW5jdGlvbigpe3JldHVybiBoLnN1Ym1pdCgpfSksZGUoNCwibGFiZWwiLDQpKDUsImgzIiw1''@;'; put 'put ''KSxQZSg2LCJXZWxjb21lIHRvIiksaGUoKSxQZSg3LCIgRGF0YSBDb250cm9sbGVyICIpLGRlKDgsImg0Iiw2KSxQZSg5LCJDYXB0dXJlLCBSZXZpZXcsIGFuZCBBcHByb3ZlIiksaGUoKSgpLGRlKDEwLCJkaXYiLDcpKDExLCJpbnB1dCIsOCksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9u''@;'; put 'put ''KHYpe3JldHVybiBmaShoLmRhdGEudXNlcix2KXx8KGguZGF0YS51c2VyPXYpLHZ9KSxoZSgpLGRlKDEyLCJpbnB1dCIsOSksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBmaShoLmRhdGEucGFzcyx2KXx8KGguZGF0YS5wYXNzPXYpLHZ9KSxoZSgpLGRlKDEzLCJjbHIt''@;'; put 'put ''YWxlcnQiLDEwKSxjaSgiY2xyQWxlcnRDbG9zZWRDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBmaShoLmFsZXJ0Q2xvc2VkLHYpfHwoaC5hbGVydENsb3NlZD12KSx2fSksZGUoMTQsImRpdiIsMTEpKDE1LCJzcGFuIiwxMiksUGUoMTYpLGhlKCkoKSgpLGRlKDE3LCJidXR0b24iLDEzKSxQ''@;'; put 'put ''ZSgxOCwiIExvZyBpbiAiKSxoZSgpKCkoKSgpLEd0KDE5LCJkaXYiLDE0KSxoZSgpKSwyJmQmJih4cigiYWN0aXZlIixoLmlzQWN0aXZlKSxmZSgxMSksbGkoIm5nTW9kZWwiLGguZGF0YS51c2VyKSxmZSgpLGxpKCJuZ01vZGVsIixoLmRhdGEucGFzcyksZmUoKSxFZSgiY2xyQWxlcnRUeXBl''@;'; put 'put ''IiwiYWxlcnQtZGFuZ2VyIiksbGkoImNsckFsZXJ0Q2xvc2VkIixoLmFsZXJ0Q2xvc2VkKSxmZSgzKSxDcihoLmVycm9yTXNnKSxmZSgpLEVlKCJjbHJMb2FkaW5nIixoLmxvYWRpbmcpKCJkaXNhYmxlZCIsaC5sb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbeTksbmMsaGwsbTkscmwsVjMsdkEs''@;'; put 'put ''eUEsYzEsTGYsQ3MsTWRdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gWnFlKGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsMTApLFBlKDEsImxvYWRpbmciKSxoZSgpKX1mdW5jdGlvbiBXcWUoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiwxMSksUGUoMSwibG9hZGVkIiks''@;'; put 'put ''aGUoKSl9ZnVuY3Rpb24gWXFlKGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsMTIpLFBlKDEsImZhaWxlZCIpLGhlKCkpfWZ1bmN0aW9uIEdxZShjLGwpe2lmKDEmYyYmKGRlKDAsInAiKSgxLCJjb2RlIiksUGUoMiksaGUoKSxQZSgzLCIgXHhhMCAiKSxndCg0LFpxZSwyLDAsInNwYW4iLDcpKDUs''@;'; put 'put ''V3FlLDIsMCwic3BhbiIsOCkoNixZcWUsMiwwLCJzcGFuIiw5KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMiksQ3IoYS5wcm9ncmFtKSxmZSgyKSxFZSgibmdJZiIsYS5ydW5uaW5nKSxmZSgpLEVlKCJuZ0lmIiwhYS5ydW5uaW5nJiZhLnN1Y2Nlc3NmdWwpLGZlKCksRWUo''@;'; put 'put ''Im5nSWYiLCFhLnJ1bm5pbmcmJiFhLnN1Y2Nlc3NmdWwpfX1mdW5jdGlvbiAkcWUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItc2lnbnBvc3QtY29udGVudCIsNSksZ3QoMSxHcWUsNyw0LCJwIiw2KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtFZSgiY2xyUG9zaXRpb24iLCJib3R0b20tbWlk''@;'; put 'put ''ZGxlIiksZmUoKSxFZSgibmdGb3JPZiIsYS5yZXF1ZXN0cyl9fWxldCBLcWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMubG9hZGluZz0hMSx0aGlzLnJlcXVlc3RzPVtdLHRoaXMuX2xvYWRpbmdTdWI9bmV3IEJ0fW5nT25Jbml0KCl7fW5nT25EZXN0cm95KCl7dGhpcy5fbG9h''@;'; put 'put ''ZGluZ1N1Yi51bnN1YnNjcmliZSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWxvYWRpbmctaW5kaWNhdG9yIl1dLHN0YW5kYWxvbmU6ITEsZGVjbHM6''@;'; put 'put ''Nix2YXJzOjYsY29uc3RzOltbMSwibG9hZGluZy1pbmRpY2F0b3IiXSxbImNsclNpZ25wb3N0VHJpZ2dlciIsIiIsMSwic3Bpbm5lciIsInNwaW5uZXItc20iLCJzcGlubmVyLWludmVyc2UiXSxbImNsclNpZ25wb3N0VHJpZ2dlciIsIiIsInNoYXBlIiwiY2hlY2siLCJzaXplIiwiMjAiLDEs''@;'; put 'put ''ImlzLWluZm8iXSxbImNsclNpZ25wb3N0VHJpZ2dlciIsIiIsInNoYXBlIiwiZXJyb3IiLCJzaXplIiwiMjQiLDEsImlzLWVycm9yIl0sWzMsImNsclBvc2l0aW9uIiw0LCJjbHJJZk9wZW4iXSxbMywiY2xyUG9zaXRpb24iXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInJ1bm5p''@;'; put 'put ''bmciLDQsIm5nSWYiXSxbImNsYXNzIiwic3VjY2VzcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJmYWlsIiw0LCJuZ0lmIl0sWzEsInJ1bm5pbmciXSxbMSwic3VjY2VzcyJdLFsxLCJmYWlsIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwwKSgxLCJjbHItc2lnbnBv''@;'; put 'put ''c3QiKSxHdCgyLCJzcGFuIiwxKSgzLCJjbHItaWNvbiIsMikoNCwiY2xyLWljb24iLDMpLGd0KDUsJHFlLDIsMiwiY2xyLXNpZ25wb3N0LWNvbnRlbnQiLDQpLGhlKCkoKSksMiZkJiYoZmUoMiksbWQoImRpc3BsYXkiLGgubG9hZGluZz8iaW5saW5lLWJsb2NrIjoibm9uZSIpLGZlKCksbWQo''@;'; put 'put ''ImRpc3BsYXkiLCFoLmxvYWRpbmcmJmgucmVxdWVzdHMubGVuZ3RoPjAmJmgucmVxdWVzdHNbMF0uc3VjY2Vzc2Z1bD8iaW5saW5lLWJsb2NrIjoibm9uZSIpLGZlKCksbWQoImRpc3BsYXkiLCFoLmxvYWRpbmcmJmgucmVxdWVzdHMubGVuZ3RoPjAmJiFoLnJlcXVlc3RzWzBdLnN1Y2Nlc3Nm''@;'; put 'put ''dWw/ImlubGluZS1ibG9jayI6Im5vbmUiKSl9LGRlcGVuZGVuY2llczpbaHMsQ2EsVWwsSWYsY0gsbTNlLGxIXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIFhxZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNkcy1pY29uIiwxMiksT3QoImNsaWNr''@;'; put 'put ''IixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLnRvZ2dsZURhcmtNb2RlKCEwKSl9KSxoZSgpfX1mdW5jdGlvbiBxcWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjZHMtaWNvbiIsMTMpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS50''@;'; put 'put ''b2dnbGVEYXJrTW9kZSghMSkpfSksaGUoKX19ZnVuY3Rpb24gSnFlKGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIpLEd0KDEsImltZyIsMTQpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCksQUUoInNyYyIsYS5nZXRQaWN0dXJlVXJsKCksYngpfX1mdW5jdGlvbiBRcWUoYyxsKXtpZigx''@;'; put 'put ''JmMmJihkZSgwLCJzcGFuIiwxNSksUGUoMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7eHIoImhpZGRlbiIsMD09PWEuZmFpbGVkUmVxcy5sZW5ndGgpLGZlKCksQ3IoYS5mYWlsZWRSZXFzLmxlbmd0aCl9fWZ1bmN0aW9uIGVKZShjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDE2KSxQZSgx''@;'; put 'put ''KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTt4cigiaGlkZGVuIiwwPT09YS5kZWJ1Z0xvZ3MubGVuZ3RoKSxmZSgpLENyKGEuZGVidWdMb2dzLmxlbmd0aCl9fWZ1bmN0aW9uIHRKZShjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDE3KX1mdW5jdGlvbiBuSmUoYyxsKXsxJmMmJihvaSgwKSxk''@;'; put 'put ''ZSgxLCJhIiwyOCkoMiwic3BhbiIsMjkpLFBlKDMsIkRvY3VtZW50YXRpb24iKSxoZSgpKCksc2koKSl9ZnVuY3Rpb24gckplKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDE4KSgxLCJkaXYiLDE5LDApKDMsImNsci10b2dnbGUtY29udGFpbmVy''@;'; put 'put ''IiwyMCksT3QoImNsaWNrIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPWZhKDIpO3JldHVybiBDdChPZSgpLm9uRGVidWdSb3dDbGljayhoLGYpKX0pLGRlKDQsImNsci10b2dnbGUtd3JhcHBlciIpKDUsImlucHV0IiwyMSksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEp''@;'; put 'put ''O2NvbnN0IGY9T2UoKTtyZXR1cm4gZmkoZi5zYXNqc0NvbmZpZy5kZWJ1ZyxoKXx8KGYuc2FzanNDb25maWcuZGVidWc9aCksQ3QoaCl9KSxPdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5vbkRlYnVnTW9kZUNoYW5nZSgpKX0pLGhlKCksZGUoNiwi''@;'; put 'put ''bGFiZWwiKSxQZSg3LCJEZWJ1ZyBNb2RlIiksaGUoKSgpKCkoKSxkZSg4LCJhIiwyMiksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLm9wZW5SZXF1ZXN0c01vZGFsKCkpfSksZGUoOSwic3BhbiIpLFBlKDEwLCJTQVMgUmVxdWVzdHMiKSxoZSgpKCksZ3QoMTEs''@;'; put 'put ''bkplLDQsMCwibmctY29udGFpbmVyIiw3KSxHdCgxMiwiZGl2IiwyMyksZGUoMTMsImEiLDI0KSgxNCwic3BhbiIpLFBlKDE1LCJTeXN0ZW0iKSxoZSgpKCksZGUoMTYsImEiLDI1KSxPdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgpLmxvZ291dChoKSl9KSxkZSgx''@;'; put 'put ''Nywic3BhbiIpLFBlKDE4LCJMb2cgT3V0IiksaGUoKSxHdCgxOSwiY2xyLWljb24iLDI2KSxoZSgpLGRlKDIwLCJkaXYiLDI3KSgyMSwic3BhbiIpLFBlKDIyKSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoKTtmZSg1KSxsaSgibmdNb2RlbCIsYS5zYXNqc0NvbmZpZy5kZWJ1ZyksZmUo''@;'; put 'put ''NiksRWUoIm5nSWYiLCFhLmlzRGVwbG95UGFnZSksZmUoMTEpLElyKCJ2IixhLmNvbW1pdFZlciwiIil9fWxldCBpSmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnVzZXJTZXJ2aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5ldmVudFNlcnZpY2U9aCx0aGlz''@;'; put 'put ''LnJvdXRlcj1mLHRoaXMudXNlck5hbWU9Ik5vdCBsb2dnZWQgaW4iLHRoaXMucmVxU3ViPW5ldyBCdCx0aGlzLnVzZXJTdWI9bmV3IEJ0LHRoaXMuYXBwTG9ncz1bXSx0aGlzLmRlYnVnTG9ncz1bXSx0aGlzLmZhaWxlZFJlcXM9W10sdGhpcy5zYXNFcnJvcnM9W10sdGhpcy5pc1ZpeWE9ITEs''@;'; put 'put ''dGhpcy5zYXNqc0NvbmZpZz1uZXcgZDIuU0FTanNDb25maWcsdGhpcy5yZXF1ZXN0c0NvdW50PTAsdGhpcy5jb21taXRWZXI9IiIsdGhpcy5kYXJrTW9kZT10aGlzLmV2ZW50U2VydmljZS5kYXJrTW9kZX1uZ09uSW5pdCgpe3RoaXMudXNlclN1Yj10aGlzLnVzZXJTZXJ2aWNlLnVzZXJDaGFu''@;'; put 'put ''Z2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLnVzZXJOYW1lPWEudXNlcm5hbWV9KSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLCJTQVNWSVlBIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSYmKHRoaXMuaXNWaXlhPSEwKSx0aGlzLmNvbW1pdFZl''@;'; put 'put ''cj0idjcuMi44Ii5yZXBsYWNlKCJ2IiwiIikrIi5nNmFjM2Y2NiJ9bmdPbkRlc3Ryb3koKXt0aGlzLnJlcVN1Yi51bnN1YnNjcmliZSgpLHRoaXMudXNlclN1Yi51bnN1YnNjcmliZSgpfXRvZ2dsZURhcmtNb2RlKGEpe3RoaXMuZXZlbnRTZXJ2aWNlLnRvZ2dsZURhcmtNb2RlKGEpfW9wZW5S''@;'; put 'put ''ZXF1ZXN0c01vZGFsKCl7dGhpcy5ldmVudFNlcnZpY2Uub3BlblJlcXVlc3RzTW9kYWwoKX1vbkRlYnVnTW9kZUNoYW5nZShhKXt0aGlzLnNhc2pzQ29uZmlnJiZ0aGlzLnNhc1NlcnZpY2Uuc2V0RGVidWdTdGF0ZSh0aGlzLnNhc2pzQ29uZmlnLmRlYnVnKX1vbkRlYnVnUm93Q2xpY2soYSxk''@;'; put 'put ''KXthLnN0b3BQcm9wYWdhdGlvbigpLFhuLnVzZXJEcm9wZG93bkNvbmZpZy5jbG9zZU9uRGVidWdDbGljayYmc2V0VGltZW91dCgoKT0+e2QuY2xpY2soKX0sMzAwKX1sb2dvdXQoYSl7YS5wcmV2ZW50RGVmYXVsdCgpO3RyeXt0aGlzLnNhc1NlcnZpY2UubG9nb3V0KCl9Y2F0Y2goZCl7Y29u''@;'; put 'put ''c29sZS5lcnJvcihkKX19Z2V0UGljdHVyZVVybCgpe3JldHVybmAke3RoaXMuc2FzanNDb25maWcuc2VydmVyVXJsfS9pZGVudGl0aWVzL3VzZXJzLyR7dGhpcy51c2VyTmFtZX0vYXZhdGFyL2NvbnRlbnRgfWdldCBpc0RlcGxveVBhZ2UoKXtyZXR1cm4gdGhpcy5yb3V0ZXIudXJsLmluY2x1''@;'; put 'put ''ZGVzKCJkZXBsb3kiKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShIJCkscWUoS3MpLHFlKEVjKSxxZShubCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWhlYWRlci1hY3Rpb25zIl1dLHN0''@;'; put 'put ''YW5kYWxvbmU6ITEsZGVjbHM6MTQsdmFyczo3LGNvbnN0czpbWyJkcm9wZG93bkl0ZW1EZWJ1ZyIsIiJdLFsxLCJoZWFkZXItYWN0aW9ucyJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJzaXplIiwibWQiLCJjbGFzcyIsInRoZW1lLXRvZ2dsZS1pY29uIGN1cnNv''@;'; put 'put ''ci1wb2ludGVyIiwic2hhcGUiLCJtb29uIiwiaW52ZXJzZSIsImZhbHNlIiwic29saWQiLCJmYWxzZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNpemUiLCJtZCIsImNsYXNzIiwidGhlbWUtdG9nZ2xlLWljb24gY3Vyc29yLXBvaW50ZXIiLCJzaGFwZSIsInN1biIsImludmVyc2UiLCJmYWxz''@;'; put 'put ''ZSIsInNvbGlkIiwiZmFsc2UiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImFwcC1uYXYtZHJvcGRvd24iXSxbImNsckRyb3Bkb3duVG9nZ2xlIiwiIiwxLCJuYXYtdGV4dCIsImNvbG9yLXdoaXRlIiwidXNlci1uYXYtdG9nZ2xlIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwiYmFkZ2UgYmFkZ2Ut''@;'; put 'put ''ZGFuZ2VyIiwzLCJoaWRkZW4iLDQsIm5nSWYiXSxbImNsYXNzIiwiYmFkZ2UgYmFkZ2UtaW5mbyIsMywiaGlkZGVuIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImNhcmV0IGRvd24iLDQsIm5nSWYiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0Iiw0LCJjbHJJZk9wZW4iXSxbInNpemUiLCJt''@;'; put 'put ''ZCIsInNoYXBlIiwibW9vbiIsImludmVyc2UiLCJmYWxzZSIsInNvbGlkIiwiZmFsc2UiLDEsInRoZW1lLXRvZ2dsZS1pY29uIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaXplIiwibWQiLCJzaGFwZSIsInN1biIsImludmVyc2UiLCJmYWxzZSIsInNvbGlkIiwiZmFsc2UiLDEs''@;'; put 'put ''InRoZW1lLXRvZ2dsZS1pY29uIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJhbHQiLCJwcm9maWxlIHBpY3R1cmUiLDEsImF2YXRhci1pbWciLDMsInNyYyJdLFsxLCJiYWRnZSIsImJhZGdlLWRhbmdlciJdLFsxLCJiYWRnZSIsImJhZGdlLWluZm8iXSxbInNoYXBlIiwiY2FyZXQg''@;'; put 'put ''ZG93biJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMSwiZGVidWctc3dpdGNoLWl0ZW0iXSxbMSwidG9nZ2xlLXN3aXRjaCIsMywiY2xpY2siXSxbImlkIiwiZGVidWctdG9nZ2xlMSIsInR5cGUiLCJjaGVja2JveCIsImNsclRvZ2dsZSIs''@;'; put 'put ''IiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siXSxbMSwic2VwYXJhdG9yIl0sWyJocmVmIiwiLi4uIiwicm91dGVyTGluayIsIi9zeXN0ZW0iLCJjbHJEcm9wZG93bkl0ZW0iLCIiXSxbImhyZWYiLCIuLi4iLCJjbHJEcm9wZG93''@;'; put 'put ''bkl0ZW0iLCIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImxvZ291dCIsMSwiY2xyLWxvZ291dCJdLFsxLCJjb3B5UmlnaHQiXSxbInRhcmdldCIsIl9ibGFuayIsImhyZWYiLCJodHRwczovL2RvY3MuZGF0YWNvbnRyb2xsZXIuaW8iLCJjbHJEcm9wZG93bkl0ZW0iLCIiXSxbMSwiZHJvcGRvd24t''@;'; put 'put ''dGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIsMSkoMSwiZGl2IiwyKSxndCgyLFhxZSwxLDAsImNkcy1pY29uIiwzKSgzLHFxZSwxLDAsImNkcy1pY29uIiw0KSxoZSgpLEd0KDQsImFwcC1sb2FkaW5nLWluZGljYXRvciIpLGRlKDUsImNsci1kcm9wZG93''@;'; put 'put ''biIsNSkoNiwiYnV0dG9uIiw2KSg3LCJzcGFuIiksUGUoOCksaGUoKSxndCg5LEpxZSwyLDEsInNwYW4iLDcpKDEwLFFxZSwyLDMsInNwYW4iLDgpKDExLGVKZSwyLDMsInNwYW4iLDkpKDEyLHRKZSwxLDAsImNsci1pY29uIiwxMCksaGUoKSxndCgxMyxySmUsMjMsMywiY2xyLWRyb3Bkb3du''@;'; put 'put ''LW1lbnUiLDExKSxoZSgpKCkpLDImZCYmKGZlKDIpLEVlKCJuZ0lmIiwhaC5kYXJrTW9kZS52YWx1ZSksZmUoKSxFZSgibmdJZiIsISFoLmRhcmtNb2RlLnZhbHVlKSxmZSg1KSxDcihoLnVzZXJOYW1lKSxmZSgpLEVlKCJuZ0lmIiwiTm90IGxvZ2dlZCBpbiIhPT1oLnVzZXJOYW1lJiZoLmlz''@;'; put 'put ''Vml5YSksZmUoKSxFZSgibmdJZiIsIWguc2FzanNDb25maWcuZGVidWcpLGZlKCksRWUoIm5nSWYiLGguc2FzanNDb25maWcuZGVidWcpLGZlKCksRWUoIm5nSWYiLCFoLmlzVml5YSkpfSxkZXBlbmRlbmNpZXM6W0NhLHNoLGhsLHJsLFAxLFVsLGZzLElmLENzLGhoLHB3LHkyLHI1LFQ5LEE5''@;'; put 'put ''LGZ3LEtxZV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSxJcGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuYWxlcnRzPW5ldyB1cn1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJv''@;'; put 'put ''dj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBhSmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItYWxlcnQiLDIpLGNpKCJjbHJBbGVydENsb3NlZENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1w''@;'; put 'put ''bGljaXQ7cmV0dXJuIGZpKGYuY2xvc2VkLGgpfHwoZi5jbG9zZWQ9aCksQ3QoaCl9KSxPdCgiY2xyQWxlcnRDbG9zZWRDaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDIpLm9uQWxlcnRDbG9zZSgpKX0pLGRlKDEsImRpdiIsMykoMiwic3BhbiIsNCksUGUoMyksaGUoKSgp''@;'; put 'put ''KCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0VlKCJjbHJBbGVydFR5cGUiLGEudHlwZSkoImNsckFsZXJ0QXBwTGV2ZWwiLCEwKSxsaSgiY2xyQWxlcnRDbG9zZWQiLGEuY2xvc2VkKSxmZSgzKSxJcigiICIsYS5tZXNzYWdlLCIgIil9fWZ1bmN0aW9uIG9KZShjLGwpe2lmKDEmYyYm''@;'; put 'put ''KGRlKDAsImNsci1hbGVydHMiKSxndCgxLGFKZSw0LDQsImNsci1hbGVydCIsMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSxFZSgibmdGb3JPZiIsYS5hbGVydHMpfX1sZXQgc0plPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fYWxlcnRzU2VydmljZT1hLHRoaXMu''@;'; put 'put ''YWxlcnRzPVtdLHRoaXMuaGFzT3BlbkFsZXJ0PSExLHRoaXMuYWxlcnRzU3ViPW5ldyBCdH1uZ09uSW5pdCgpe3RoaXMuYWxlcnRzU3ViPXRoaXMuX2FsZXJ0c1NlcnZpY2UuYWxlcnRzLnN1YnNjcmliZShhPT57dGhpcy5hbGVydHMucHVzaChhKSx0aGlzLmhhc09wZW5BbGVydD0hMCxhLmVy''@;'; put 'put ''ciYmY29uc29sZS5lcnJvcihhLmVycil9KX1vbkFsZXJ0Q2xvc2UoKXt0aGlzLmhhc09wZW5BbGVydD10aGlzLmFsZXJ0cy5zb21lKGE9PiFhLmNsb3NlZCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUoSXBlKSl9fXN0YXRpY3t0aGlzLlx1''@;'; put 'put ''MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtYWxlcnRzIl1dLHN0YW5kYWxvbmU6ITEsZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbNCwibmdJZiJdLFszLCJjbHJBbGVydFR5cGUiLCJjbHJBbGVydEFwcExldmVsIiwiY2xyQWxlcnRDbG9zZWQiLCJjbHJBbGVydENsb3NlZENo''@;'; put 'put ''YW5nZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIiwiY2xyQWxlcnRUeXBlIiwiY2xyQWxlcnRBcHBMZXZlbCIsImNsckFsZXJ0Q2xvc2VkIl0sWzEsImFsZXJ0LWl0ZW0iXSxbMSwiYWxlcnQtdGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEm''@;'; put 'put ''ZCYmZ3QoMCxvSmUsMiwxLCJjbHItYWxlcnRzIiwwKSwyJmQmJkVlKCJuZ0lmIixoLmhhc09wZW5BbGVydCl9LGRlcGVuZGVuY2llczpbaHMsQ2EsdkEscHBlLHlBXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLFJIPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmNs''@;'; put 'put ''YXNzZXM9IiJ9bmdPbkluaXQoKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjb250YWN0LWxpbmsiXV0saW5wdXRzOntjbGFzc2VzOiJjbGFzc2VzIn0sc3Rh''@;'; put 'put ''bmRhbG9uZTohMSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1siaHJlZiIsIm1haWx0bzpzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvP3N1YmplY3Q9TGljZW5jZSIsMywibmdDbGFzcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImEiLDApLFBlKDEsInN1cHBvcnRAZGF0''@;'; put 'put ''YWNvbnRyb2xsZXIuaW8iKSxoZSgpKSwyJmQmJih4cigidW5zZXQiLCIiIT09aC5jbGFzc2VzKSxFZSgibmdDbGFzcyIsaC5jbGFzc2VzKSl9LGRlcGVuZGVuY2llczpbUnVdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCksUnBlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0''@;'; put 'put ''aGlzLm9wdGlvbnNTdWJqZWN0JD1uZXcgdXIsdGhpcy5yZXN1bHRDaGFuZ2UkPW5ldyB1cn1vcGVuKGEpe3JldHVybiB0aGlzLm9wdGlvbnNTdWJqZWN0JC5uZXh0KHtvcGVuOiEwLC4uLmF9KSx0aGlzLnJlc3VsdENoYW5nZSQ9bmV3IHVyLHRoaXMucmVzdWx0Q2hhbmdlJC5hc09ic2VydmFi''@;'; put 'put ''bGUoKX1jbG9zZShhKXt0aGlzLm9wdGlvbnNTdWJqZWN0JC5uZXh0KHtvcGVuOiExfSksdGhpcy5yZXN1bHRDaGFuZ2UkLm5leHQoe3Bhc3N3b3JkOmF9KSx0aGlzLnJlc3VsdENoYW5nZSQuY29tcGxldGUoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhk''@;'; put 'put ''fHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBsSmUoYyxsKXsxJmMmJihkZSgwLCJwIiwxMyksUGUoMSwiIFNvcnJ5IHRoYXQgZGlkbid0IHdvcmssIHRy''@;'; put 'put ''eSBhZ2Fpbi4gIiksaGUoKSl9ZnVuY3Rpb24gY0plKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2IiwyKSgxLCJjbHItbW9kYWwiLDMpKDIsImgzIiw0KSxQZSgzLCIgUGFzc3dvcmQgUHJvdGVjdGVkIEZpbGUgIiksaGUoKSxkZSg0LCJkaXYiLDUpKDUsInAiLDYpLFBlKDYs''@;'; put 'put ''IlBsZWFzZSBlbnRlciBwYXNzd29yZDoiKSxoZSgpLGRlKDcsImlucHV0Iiw3LDApLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCk7cmV0dXJuIGZpKGYucGFzc3dvcmRJbnB1dCxoKXx8KGYucGFzc3dvcmRJbnB1dD1oKSxDdChoKX0pLGhlKCkoKSxk''@;'; put 'put ''ZSg5LCJkaXYiLDgpKDEwLCJkaXYiKSxndCgxMSxsSmUsMiwwLCJwIiw5KSxoZSgpLGRlKDEyLCJkaXYiLDEwKSgxMywiYnV0dG9uIiwxMSksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmNsb3NlKCkpfSksUGUoMTQsIiBDYW5jZWwgIiksaGUoKSxkZSgxNSwi''@;'; put 'put ''YnV0dG9uIiwxMiksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9ZmEoOCk7cmV0dXJuIEN0KE9lKCkuY2xvc2UoaC52YWx1ZSkpfSksUGUoMTYsIiBVbmxvY2sgIiksaGUoKSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLm5nSWYsZD1mYSg4KSxoPU9lKCk7ZmUoKSxFZSgi''@;'; put 'put ''Y2xyTW9kYWxPcGVuIixhLm9wZW4pKCJjbHJNb2RhbFNpemUiLCJtZCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoNiksbGkoIm5nTW9kZWwiLGgucGFzc3dvcmRJbnB1dCksZmUoNCksRWUoIm5nSWYiLGEuZXJyb3IpLGZlKDQpLEVlKCJkaXNhYmxlZCIsZC52YWx1ZS5sZW5ndGg8MSl9''@;'; put 'put ''fWxldCB1SmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmV4Y2VsUGFzc3dvcmRNb2RhbFNlcnZpY2U9YSx0aGlzLm9wdGlvbnMkPXRoaXMuZXhjZWxQYXNzd29yZE1vZGFsU2VydmljZS5vcHRpb25zU3ViamVjdCQsdGhpcy5maWxlVW5sb2NrRXJyb3I9ITEsdGhpcy5wYXNz''@;'; put 'put ''d29yZElucHV0PSIifWNsb3NlKGEpe3RoaXMucGFzc3dvcmRJbnB1dD0iIix0aGlzLmV4Y2VsUGFzc3dvcmRNb2RhbFNlcnZpY2UuY2xvc2UoYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUoUnBlKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNt''@;'; put 'put ''cD1hcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtZXhjZWwtcGFzc3dvcmQtbW9kYWwiXV0sc3RhbmRhbG9uZTohMSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1siZmlsZVBhc3N3b3JkSW5wdXQiLCIiXSxbImNsYXNzIiwiZXhjZWwtcGFzc3dvcmQtcm9vdCIsNCwibmdJZiJdLFsxLCJleGNl''@;'; put 'put ''bC1wYXNzd29yZC1yb290Il0sWzMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiLCJjZW50ZXIiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0sWzEsIm1vZGFsLWJvZHkiLCJkLWZsZXgiLCJjbHItanVz''@;'; put 'put ''dGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJtLTAiXSxbImRhdGEtbHBpZ25vcmUiLCJ0cnVlIiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwiaWQiLCJmaWxlUGFzc3dvcmRJbnB1dCIsInR5cGUiLCJ0ZXh0IiwxLCJjbHItaW5wdXQiLCJkaXNhYmxlLXBhc3N3b3JkLW1hbmFnZXIiLDMsIm5nTW9k''@;'; put 'put ''ZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsiY2xhc3MiLCJtLTAgY29sb3ItcmVkIiw0LCJuZ0lmIl0sWzEsImJ1dHRvbnMiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIs''@;'; put 'put ''MSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsxLCJtLTAiLCJjb2xvci1yZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihndCgwLGNKZSwxNyw2LCJkaXYiLDEpLGRsKDEsImFzeW5jIikpLDImZCYmRWUoIm5nSWYi''@;'; put 'put ''LGpjKDEsMSxoLm9wdGlvbnMkKSl9LGRlcGVuZGVuY2llczpbQ2EsbmMsaGwscmwsYnUscjAsVkVdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCksX0E9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuZmlsZU92ZXI9ITEsdGhpcy5maWxlRHJvcHBlZD1uZXcgWHIsdGhp''@;'; put 'put ''cy5maWxlRHJhZ2dlZE92ZXI9bmV3IFhyfW9uRHJhZ092ZXIoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5jb250YWluc0ZpbGVzKGEpJiYhdGhpcy5maWxlT3ZlciYmKHRoaXMuZmlsZU92ZXI9ITAsdGhpcy5maWxlRHJhZ2dlZE92ZXIuZW1pdCgpKX1v''@;'; put 'put ''bkRyYWdMZWF2ZShhKXthLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmZpbGVPdmVyPSExfW9uZHJvcChhKXthLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmZpbGVPdmVyPSExO2NvbnN0IGQ9YS5kYXRhVHJhbnNmZXIuZmlsZXM7''@;'; put 'put ''ZC5sZW5ndGg+MCYmdGhpcy5maWxlRHJvcHBlZC5lbWl0KGQpfWNvbnRhaW5zRmlsZXMoYSl7aWYoYSYmYS5kYXRhVHJhbnNmZXImJmEuZGF0YVRyYW5zZmVyLnR5cGVzKWZvcihsZXQgZD0wO2Q8YS5kYXRhVHJhbnNmZXIudHlwZXMubGVuZ3RoO2QrKylpZigiRmlsZXMiPT1hLmRhdGFUcmFu''@;'; put 'put ''c2Zlci50eXBlc1tkXSlyZXR1cm4hMH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPVlyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImFwcERyYWdOZHJvcCIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5n''@;'; put 'put ''czpmdW5jdGlvbihkLGgpezEmZCYmT3QoImRyYWdvdmVyIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkRyYWdPdmVyKHYpfSkoImRyYWdsZWF2ZSIsZnVuY3Rpb24odil7cmV0dXJuIGgub25EcmFnTGVhdmUodil9KSgiZHJvcCIsZnVuY3Rpb24odil7cmV0dXJuIGgub25kcm9wKHYpfSksMiZk''@;'; put 'put ''JiZ4cigiZmlsZW92ZXIiLGguZmlsZU92ZXIpfSxvdXRwdXRzOntmaWxlRHJvcHBlZDoiZmlsZURyb3BwZWQiLGZpbGVEcmFnZ2VkT3ZlcjoiZmlsZURyYWdnZWRPdmVyIn0sc3RhbmRhbG9uZTohMX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgTHBlPSgpPT5bXTtmdW5jdGlvbiBkSmUoYyxsKXsx''@;'; put 'put ''JmMmJihkZSgwLCJwIiw2KSxQZSgxLCJObyByZXF1ZXN0cyBtYWRlIiksaGUoKSl9ZnVuY3Rpb24gaEplKGMsbCl7MSZjJiYoZGUoMCwic3BhbiIpLEd0KDEsImNsci1pY29uIiwxMyksaGUoKSl9ZnVuY3Rpb24gZkplKGMsbCl7MSZjJiYoZGUoMCwic3BhbiIpLEd0KDEsImNsci1pY29uIiwx''@;'; put 'put ''NCksaGUoKSl9ZnVuY3Rpb24gcEplKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMjIpLE90KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdCxmPU9lKDMpLmluZGV4O3JldHVybiBDdChPZSgyKS5nb1RvTG9nTGluZShoLCJy''@;'; put 'put ''ZXF1ZXN0XyIrZiwiZXJyb3IiKSl9KSxkZSgxLCJidXR0b24iLDIzKSxQZSgyKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLElyKCIgIixhLCIgIil9fWZ1bmN0aW9uIGdKZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10cmVlLW5vZGUiLDE5KSxHdCgxLCJjbHIt''@;'; put 'put ''aWNvbiIsMjApLFBlKDIpLGd0KDMscEplLDMsMSwiY2xyLXRyZWUtbm9kZSIsMjEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKS4kaW1wbGljaXQ7ZmUoMiksSXIoIiBFcnJvcnMgKCIsYS5sb2dFcnJvcnMubGVuZ3RoLCIpICIpLGZlKCksRWUoIm5nRm9yT2YiLGEubG9nRXJyb3JzfHx0bCgy''@;'; put 'put ''LExwZSkpfX1mdW5jdGlvbiBtSmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwyMiksT3QoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0LGY9T2UoMykuaW5kZXg7cmV0dXJuIEN0KE9lKDIpLmdvVG9Mb2dMaW5lKGgsInJl''@;'; put 'put ''cXVlc3RfIitmLCJ3YXJuaW5nIikpfSksZGUoMSwiYnV0dG9uIiwyMyksUGUoMiksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgyKSxJcigiICIsYSwiICIpfX1mdW5jdGlvbiB2SmUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdHJlZS1ub2RlIiwxOSksR3QoMSwiY2xy''@;'; put 'put ''LWljb24iLDI0KSxQZSgyKSxndCgzLG1KZSwzLDEsImNsci10cmVlLW5vZGUiLDIxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMikuJGltcGxpY2l0O2ZlKDIpLElyKCIgV2FybmluZ3MgKCIsYS5sb2dXYXJuaW5ncy5sZW5ndGgsIikgIiksZmUoKSxFZSgibmdGb3JPZiIsYS5sb2dXYXJuaW5n''@;'; put 'put ''c3x8dGwoMixMcGUpKX19ZnVuY3Rpb24geUplKGMsbCl7MSZjJiZHdCgwLCJkaXYiLDI1KSwyJmMmJkVlKCJpbm5lckhUTUwiLE9lKDIpLiRpbXBsaWNpdC5sb2dGaWxlLE9nKX1mdW5jdGlvbiBiSmUoYyxsKXsxJmMmJkd0KDAsImRpdiIsMjYpLDImYyYmRWUoInRleHRDb250ZW50IixPZSgy''@;'; put 'put ''KS4kaW1wbGljaXQubG9nRmlsZSl9ZnVuY3Rpb24gX0plKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiYnV0dG9uIiwyNyksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMikuJGltcGxpY2l0O3JldHVybiBDdChPZSgyKS5kb3dubG9hZExvZyhoLmxvZ0Zp''@;'; put 'put ''bGUpKX0pLFBlKDEsIiBEb3dubG9hZCAiKSxoZSgpfX1mdW5jdGlvbiB3SmUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFiLWNvbnRlbnQiKSgxLCJjbHItdHJlZSIpLGd0KDIsZ0plLDQsMywiY2xyLXRyZWUtbm9kZSIsMTUpKDMsdkplLDQsMywiY2xyLXRyZWUtbm9kZSIsMTUpLGhlKCks''@;'; put 'put ''Z3QoNCx5SmUsMSwxLCJkaXYiLDE2KSg1LGJKZSwxLDEsImRpdiIsMTcpKDYsX0plLDIsMCwiYnV0dG9uIiwxOCksaGUoKSksMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0LGQ9T2UoMik7ZmUoMiksRWUoIm5nSWYiLGEubG9nRXJyb3JzKSxmZSgpLEVlKCJuZ0lmIixhLmxvZ1dhcm5pbmdz''@;'; put 'put ''KSxmZSgpLEVlKCJuZ0lmIiwiU0FTVklZQSIhPT1kLnNlcnZlclR5cGUpLGZlKCksRWUoIm5nSWYiLCJTQVNWSVlBIj09PWQuc2VydmVyVHlwZSksZmUoKSxFZSgibmdJZiIsKG51bGw9PWEubG9nRmlsZT9udWxsOmEubG9nRmlsZS5sZW5ndGgpPjApfX1mdW5jdGlvbiBDSmUoYyxsKXtpZigx''@;'; put 'put ''JmMpe2NvbnN0IGE9T24oKTtkZSgwLCJidXR0b24iLDI3KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKDIpLmRvd25sb2FkU291cmNlQ29kZShoLnNvdXJjZUNvZGUpKX0pLFBlKDEsIiBEb3dubG9hZCAiKSxoZSgpfX1m''@;'; put 'put ''dW5jdGlvbiBTSmUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFiLWNvbnRlbnQiKSgxLCJkaXYiLDI4KSxQZSgyKSxoZSgpLGd0KDMsQ0plLDIsMCwiYnV0dG9uIiwxOCksaGUoKSksMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O2ZlKDIpLENyKGEuc291cmNlQ29kZSksZmUoKSxFZSgi''@;'; put 'put ''bmdJZiIsKG51bGw9PWEuc291cmNlQ29kZT9udWxsOmEuc291cmNlQ29kZS5sZW5ndGgpPjApfX1mdW5jdGlvbiBNSmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJidXR0b24iLDI3KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgyKS4kaW1wbGljaXQ7''@;'; put 'put ''cmV0dXJuIEN0KE9lKDIpLmRvd25sb2FkR2VuZXJhdGVkQ29kZShoLmdlbmVyYXRlZENvZGUpKX0pLFBlKDEsIiBEb3dubG9hZCAiKSxoZSgpfX1mdW5jdGlvbiB4SmUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFiLWNvbnRlbnQiKSgxLCJkaXYiLDI4KSxQZSgyKSxoZSgpLGd0KDMsTUpl''@;'; put 'put ''LDIsMCwiYnV0dG9uIiwxOCksaGUoKSksMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O2ZlKDIpLElyKCIgIixhLmdlbmVyYXRlZENvZGUsIiAiKSxmZSgpLEVlKCJuZ0lmIiwobnVsbD09YS5nZW5lcmF0ZWRDb2RlP251bGw6YS5nZW5lcmF0ZWRDb2RlLmxlbmd0aCk+MCl9fWZ1bmN0aW9u''@;'; put 'put ''IEVKZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsMzQpLE90KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoMykuJGltcGxpY2l0LnNlbGVjdGVkVGFibGU9aC5rZXkpfSksUGUoMSksaGUoKX1pZigyJmMpe2NvbnN0''@;'; put 'put ''IGE9bC4kaW1wbGljaXQ7eHIoInNlbGVjdGVkIixPZSgzKS4kaW1wbGljaXQuc2VsZWN0ZWRUYWJsZT09PWEua2V5KSxmZSgpLElyKCIgIixhLmtleSwiICIpfX1mdW5jdGlvbiBUSmUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItZHJvcGRvd24tbWVudSIpLGd0KDEsRUplLDIsMywiZGl2Iiwz''@;'; put 'put ''MyksZGwoMiwia2V5dmFsdWUiKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMikuJGltcGxpY2l0O2ZlKCksRWUoIm5nRm9yT2YiLGpjKDIsMSxhLlNBU1dPUkspKX19ZnVuY3Rpb24gQUplKGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMzgpKDEsInN0cm9uZyIpLFBlKDIpLGhlKCkoKSksMiZjKXtj''@;'; put 'put ''b25zdCBhPU9lKDMpLiRpbXBsaWNpdDtmZSgyKSxJcigiIixhLnNlbGVjdGVkVGFibGUsIiAoZmlyc3QgMTAgcm93cykgIil9fWZ1bmN0aW9uIGtKZShjLGwpe2lmKDEmYyYmKGRlKDAsInRoIiksUGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksSXIoIiAiLGEua2V5''@;'; put 'put ''LCIgIil9fWZ1bmN0aW9uIERKZShjLGwpe2lmKDEmYyYmKGRlKDAsInRkIiksUGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9T2UoKS4kaW1wbGljaXQ7ZmUoKSxJcigiICIsZFthLmtleV0sIiAiKX19ZnVuY3Rpb24gSUplKGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSxn''@;'; put 'put ''dCgxLERKZSwyLDEsInRkIiw0MCksZGwoMiwia2V5dmFsdWUiKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoNCkuJGltcGxpY2l0O2ZlKCksRWUoIm5nRm9yT2YiLGpjKDIsMSxhLlNBU1dPUktbYS5zZWxlY3RlZFRhYmxlXS5maXJzdDEwcm93c1swXSkpfX1mdW5jdGlvbiBSSmUoYyxsKXtpZigx''@;'; put 'put ''JmMmJihkZSgwLCJ0YWJsZSIsMzkpKDEsInRoZWFkIikoMiwidHIiKSxndCgzLGtKZSwyLDEsInRoIiw0MCksZGwoNCwia2V5dmFsdWUiKSxoZSgpKCksZGUoNSwidGJvZHkiKSxndCg2LElKZSwzLDMsInRyIiw0MCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMykuJGltcGxpY2l0O2ZlKDMp''@;'; put 'put ''LEVlKCJuZ0Zvck9mIixqYyg0LDIsYS5TQVNXT1JLW2Euc2VsZWN0ZWRUYWJsZV0uZmlyc3QxMHJvd3NbMF0pKSxmZSgzKSxFZSgibmdGb3JPZiIsYS5TQVNXT1JLW2Euc2VsZWN0ZWRUYWJsZV0uZmlyc3QxMHJvd3MpfX1mdW5jdGlvbiBMSmUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFi''@;'; put 'put ''LWNvbnRlbnQiKSxndCgxLEFKZSwzLDEsInAiLDM1KSxkZSgyLCJkaXYiLDM2KSxndCgzLFJKZSw3LDQsInRhYmxlIiwzNyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMikuJGltcGxpY2l0O2ZlKCksRWUoIm5nSWYiLGEuc2VsZWN0ZWRUYWJsZSksZmUoMiksRWUoIm5nSWYiLGEuc2VsZWN0''@;'; put 'put ''ZWRUYWJsZSl9fWZ1bmN0aW9uIE9KZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci10YWIiKSgxLCJjbHItZHJvcGRvd24iLDI5KSgyLCJidXR0b24iLDMwKSxQZSgzLCIgU0FTIFdvcmsgVGFibGVzICIpLEd0KDQsImNsci1pY29uIiwzMSksaGUoKSxndCg1LFRKZSwzLDMs''@;'; put 'put ''ImNsci1kcm9wZG93bi1tZW51IiwzMiksaGUoKSxndCg2LExKZSw0LDIsIm5nLXRlbXBsYXRlIiwxMiksY2koImNscklmQWN0aXZlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDMpO3JldHVybiBmaShmLnRhYmxlc0FjdGl2ZSxoKXx8KGYudGFibGVzQWN0aXZlPWgpLEN0''@;'; put 'put ''KGgpfSksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoKSxFZSgiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siLCEwKSxmZSg1KSxsaSgiY2xySWZBY3RpdmUiLGEudGFibGVzQWN0aXZlKX19ZnVuY3Rpb24gUEplKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXN0YWNr''@;'; put 'put ''LWJsb2NrIiw4KSgxLCJjbHItc3RhY2stbGFiZWwiKSxQZSgyKSxkZSgzLCJzcGFuIiw5KSxndCg0LGhKZSwyLDAsInNwYW4iLDUpKDUsZkplLDIsMCwic3BhbiIsNSksaGUoKSgpLGRlKDYsImNsci1zdGFjay1jb250ZW50IiksUGUoNyksaGUoKSxkZSg4LCJjbHItc3RhY2stYmxvY2siLDEw''@;'; put 'put ''KSg5LCJjbHItc3RhY2stY29udGVudCIpKDEwLCJjbHItdGFicyIpKDExLCJjbHItdGFiIikoMTIsImJ1dHRvbiIsMTEpLFBlKDEzLCJTQVMgTG9nIiksaGUoKSxndCgxNCx3SmUsNyw1LCJuZy10ZW1wbGF0ZSIsMTIpLGNpKCJjbHJJZkFjdGl2ZUNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7''@;'; put 'put ''Y29uc3QgZj1PZSgyKTtyZXR1cm4gZmkoZi5zYXNMb2dBY3RpdmUsaCl8fChmLnNhc0xvZ0FjdGl2ZT1oKSxDdChoKX0pLGhlKCksZGUoMTUsImNsci10YWIiKSgxNiwiYnV0dG9uIiwxMSksUGUoMTcsIlNBUyBTb3VyY2UgQ29kZSIpLGhlKCksZ3QoMTgsU0plLDQsMiwibmctdGVtcGxhdGUi''@;'; put 'put ''LDEyKSxjaSgiY2xySWZBY3RpdmVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoMik7cmV0dXJuIGZpKGYuc2FzU291cmNlQ29kZUFjdGl2ZSxoKXx8KGYuc2FzU291cmNlQ29kZUFjdGl2ZT1oKSxDdChoKX0pLGhlKCksZGUoMTksImNsci10YWIiKSgyMCwiYnV0dG9uIiwx''@;'; put 'put ''MSksUGUoMjEsIlNBUyBHZW5lcmF0ZWQgQ29kZSIpLGhlKCksZ3QoMjIseEplLDQsMiwibmctdGVtcGxhdGUiLDEyKSxjaSgiY2xySWZBY3RpdmVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoMik7cmV0dXJuIGZpKGYuc2FzR2VuZXJhdGVkQ29kZUFjdGl2ZSxoKXx8KGYu''@;'; put 'put ''c2FzR2VuZXJhdGVkQ29kZUFjdGl2ZT1oKSxDdChoKX0pLGhlKCksZ3QoMjMsT0plLDcsMiwiY2xyLXRhYiIsNSksaGUoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9T2UoMik7RWUoImlkIiwicmVxdWVzdF8iK2QpKCJjbHJTdGFja1ZpZXdMZXZlbCIs''@;'; put 'put ''MSksZmUoMiksSXIoIiAiLGEuc2VydmljZUxpbmssIiAiKSxmZSgyKSxFZSgibmdJZiIsKG51bGw9PWEubG9nV2FybmluZ3M/bnVsbDphLmxvZ1dhcm5pbmdzLmxlbmd0aCk+MCksZmUoKSxFZSgibmdJZiIsKG51bGw9PWEubG9nRXJyb3JzP251bGw6YS5sb2dFcnJvcnMubGVuZ3RoKT4wKSxm''@;'; put 'put ''ZSgyKSxDcihhLnBhcnNlZFRpbWVzdGFtcCksZmUoNyksbGkoImNscklmQWN0aXZlIixoLnNhc0xvZ0FjdGl2ZSksZmUoNCksbGkoImNscklmQWN0aXZlIixoLnNhc1NvdXJjZUNvZGVBY3RpdmUpLGZlKDQpLGxpKCJjbHJJZkFjdGl2ZSIsaC5zYXNHZW5lcmF0ZWRDb2RlQWN0aXZlKSxmZSgp''@;'; put 'put ''LEVlKCJuZ0lmIixhLlNBU1dPUkspfX1mdW5jdGlvbiBGSmUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItc3RhY2stdmlldyIpLGd0KDEsUEplLDI0LDEwLCJjbHItc3RhY2stYmxvY2siLDcpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCksRWUoIm5nRm9yT2YiLGEuc2FzanNSZXF1ZXN0''@;'; put 'put ''cyl9fWxldCBISmU9KCgpPT57Y2xhc3MgY3tnZXQgb3BlbmVkKCl7cmV0dXJuIHRoaXMuX29wZW5lZH1zZXQgb3BlbmVkKGEpe3RoaXMuX29wZW5lZD1hLGEmJnRoaXMubW9kYWxPcGVuZWQoKSx0aGlzLmxvZ2dlclNlcnZpY2UubG9nKHRoaXMuc2FzanNSZXF1ZXN0cyl9Y29uc3RydWN0b3Io''@;'; put 'put ''YSxkLGgpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMubG9nZ2VyU2VydmljZT1kLHRoaXMuaGVscGVyU2VydmljZT1oLHRoaXMuX29wZW5lZD0hMSx0aGlzLm9wZW5lZENoYW5nZT1uZXcgWHIsdGhpcy5zYXNMb2dBY3RpdmU9ITAsdGhpcy5zYXNTb3VyY2VDb2RlQWN0aXZlPSExLHRoaXMuc2Fz''@;'; put 'put ''R2VuZXJhdGVkQ29kZUFjdGl2ZT0hMSx0aGlzLnRhYmxlc0FjdGl2ZT0hMSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuc2FzanNSZXF1ZXN0cz1bXSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygp''@;'; put 'put ''LHRoaXMuc2VydmVyVHlwZT10aGlzLnNhc1NlcnZpY2UuZ2V0U2VydmVyVHlwZSgpfW5nT25Jbml0KCl7fXBhcnNlTG9nVGltZXN0YW1wKGEpe3JldHVybmAke3RoaXMuZm9ybWF0VGltZXN0YW1wKGEpfSAke3RoaXMudGltZXN0YW1wRnJvbU5vdyhhKX1gfWN1dEFwcExvYyhhKXtyZXR1cm4g''@;'; put 'put ''YS5yZXBsYWNlKHRoaXMuc2FzanNDb25maWcuYXBwTG9jKyIvIiwiIil9Zm9ybWF0VGltZXN0YW1wKGEpe3JldHVybiBhaCgpKGEpLmZvcm1hdCgpP2FoKCkoYSkuZm9ybWF0KCJkZGRkLCBNTU1NIERvIFlZWVksIGg6bW06c3MgYSIpOmF9dGltZXN0YW1wRnJvbU5vdyhhKXtyZXR1cm4gYWgo''@;'; put 'put ''KShhKS5mb3JtYXQoKT9gICgke2FoKCkoYSkuZnJvbU5vdygpfSlgOiIifW1vZGFsT3BlbkNoYW5nZShhKXt0aGlzLm9wZW5lZD1hLHRoaXMub3BlbmVkQ2hhbmdlLmVtaXQodGhpcy5vcGVuZWQpfW1vZGFsT3BlbmVkKCl7dGhpcy5zYXNqc1JlcXVlc3RzPXRoaXMuc2FzU2VydmljZS5nZXRT''@;'; put 'put ''YXNSZXF1ZXN0cygpO2ZvcihsZXQgYSBvZiB0aGlzLnNhc2pzUmVxdWVzdHMpdGhpcy5wYXJzZUVycm9yc0FuZFdhcm5pbmdzKGEpLGEuc2VydmljZUxpbms9dGhpcy5jdXRBcHBMb2MoYS5zZXJ2aWNlTGluayksYS5wYXJzZWRUaW1lc3RhbXA9dGhpcy5wYXJzZUxvZ1RpbWVzdGFtcChhLnRp''@;'; put 'put ''bWVzdGFtcCl9Z29Ub0xvZ0xpbmUoYSxkLGgpe2NvbnN0IGY9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7ZH0gLmxvZy13cmFwcGVyLnNhc2xvZ2ApO2lmKGYpaWYoIlNBU1ZJWUEiPT09dGhpcy5zZXJ2ZXJUeXBlKXtjb25zdCBNPShmLnRleHRDb250ZW50fHwiIikuc3BsaXQoIlxuIik7''@;'; put 'put ''bGV0IEQ9LTE7Zm9yKGxldCB2ZT0wO3ZlPE0ubGVuZ3RoO3ZlKyspaWYoTVt2ZV0uaW5jbHVkZXMoYSkpe0Q9dmU7YnJlYWt9aWYoLTE9PT1EKXJldHVybjtjb25zdCBVPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO1UuY2xhc3NOYW1lPSJ0ZW1wLWxpbmUtaGVpZ2h0LWNhbGMiLFUu''@;'; put 'put ''dGV4dENvbnRlbnQ9IlgiLGYuYXBwZW5kQ2hpbGQoVSk7Y29uc3QgdGU9VS5jbGllbnRIZWlnaHQ7Zi5yZW1vdmVDaGlsZChVKSxmLnNjcm9sbFRvcD10ZSpEO2NvbnN0IG9lPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO29lLmNsYXNzTmFtZT0ibGluZS1oaWdobGlnaHQtb3Zlcmxh''@;'; put 'put ''eSAiKygiZXJyb3IiPT09aD8iZXJyb3ItaGlnaGxpZ2h0Ijoid2FybmluZy1oaWdobGlnaHQiKSxvZS5jbGFzc0xpc3QuYWRkKCJ0ZW1wLWhlaWdodC1zZXR0ZXIiKSxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoIi0tbGluZS1oZWlnaHQiLGAke3RlfXB4YCks''@;'; put 'put ''b2UuY2xhc3NMaXN0LmFkZCgibGluZS1wb3NpdGlvbi1zZXR0ZXIiKSxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoIi0tbGluZS10b3AiLHRlKkQrInB4IiksZi5hcHBlbmRDaGlsZChvZSksc2V0VGltZW91dCgoKT0+e2YuY29udGFpbnMob2UpJiZmLnJlbW92''@;'; put 'put ''ZUNoaWxkKG9lKX0sM2UzKX1lbHNle2NvbnN0IHY9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgIyR7ZH0gLmxvZy13cmFwcGVyLnNhc2xvZyBmb250YCk7Zm9yKGxldCBNIG9mIEFycmF5LmZyb20odikpaWYoTS50ZXh0Q29udGVudD8uaW5jbHVkZXMoYSkpe2Yuc2Nyb2xsVG9wPU0ub2Zm''@;'; put 'put ''c2V0VG9wLWYub2Zmc2V0VG9wLE0uY2xhc3NMaXN0LmFkZCgiaGlnaGxpZ2h0ZWQtbGluZSIpLHNldFRpbWVvdXQoKCk9PntNLmNsYXNzTGlzdC5yZW1vdmUoImhpZ2hsaWdodGVkLWxpbmUiKX0sM2UzKTticmVha319fXBhcnNlRXJyb3JzQW5kV2FybmluZ3MoYSl7dmFyIGQ9dGhpcztyZXR1''@;'; put 'put ''cm4gZWUoZnVuY3Rpb24qKCl7aWYoIWF8fCFhLmxvZ0ZpbGV8fCJzdHJpbmciIT10eXBlb2YgYS5sb2dGaWxlfHx2b2lkIDAhPT1hLmxvZ0Vycm9yc3x8dm9pZCAwIT09YS5sb2dXYXJuaW5ncylyZXR1cm47bGV0IGg9W10sZj1bXSx2PWEubG9nRmlsZS5zcGxpdCgiXG4iKSxNPVsuLi52XTtm''@;'; put 'put ''b3IobGV0IEQ9MDtEPHYubGVuZ3RoO0QrKyl7aWYoLzwuKj5FUlJPUi9nbS50ZXN0KHZbRF0pKXtsZXQgVT12W0RdLnN1YnN0cmluZyh2W0RdLmluZGV4T2YoIkUiKSx2W0RdLmxlbmd0aC0xKTtoLnB1c2goVSl9ZWxzZS9eRVJST1IvZ20udGVzdCh2W0RdKSYmKGgucHVzaCh2W0RdKSwiU0FT''@;'; put 'put ''VklZQSIhPT1kLnNlcnZlclR5cGUmJih2W0RdPSc8Zm9udCBjbGFzcz0iZXJyb3ItbGluZSI+Jyt2W0RdKyI8L2ZvbnQ+IikpO2lmKC88Lio+V0FSTklORy9nbS50ZXN0KHZbRF0pKXtsZXQgVT12W0RdLnN1YnN0cmluZyh2W0RdLmluZGV4T2YoIlciKSx2W0RdLmxlbmd0aC0xKTtmLnB1c2go''@;'; put 'put ''VSl9ZWxzZS9eV0FSTklORy9nbS50ZXN0KHZbRF0pJiYoZi5wdXNoKHZbRF0pLCJTQVNWSVlBIiE9PWQuc2VydmVyVHlwZSYmKHZbRF09Jzxmb250IGNsYXNzPSJ3YXJuaW5nLWxpbmUiPicrdltEXSsiPC9mb250PiIpKX1kLmxvZ2dlclNlcnZpY2UubG9nKGYpLCJTQVNWSVlBIj09PWQuc2Vy''@;'; put 'put ''dmVyVHlwZSYmKGEub3JpZ2luYWxMb2dGaWxlPU0uam9pbigiXG4iKSxhLmxvZ0ZpbGVMaW5lTWFwPXt9LGguZm9yRWFjaChEPT57Zm9yKGxldCBVPTA7VTxNLmxlbmd0aDtVKyspaWYoTVtVXS5pbmNsdWRlcyhEKSl7YS5sb2dGaWxlTGluZU1hcC5lcnJvcnN8fChhLmxvZ0ZpbGVMaW5lTWFw''@;'; put 'put ''LmVycm9ycz17fSksYS5sb2dGaWxlTGluZU1hcC5lcnJvcnNbRF09VTticmVha319KSxmLmZvckVhY2goRD0+e2ZvcihsZXQgVT0wO1U8TS5sZW5ndGg7VSsrKWlmKE1bVV0uaW5jbHVkZXMoRCkpe2EubG9nRmlsZUxpbmVNYXAud2FybmluZ3N8fChhLmxvZ0ZpbGVMaW5lTWFwLndhcm5pbmdz''@;'; put 'put ''PXt9KSxhLmxvZ0ZpbGVMaW5lTWFwLndhcm5pbmdzW0RdPVU7YnJlYWt9fSkpLGEubG9nRmlsZT12LmpvaW4oIlxuIiksYS5sb2dFcnJvcnM9aCxhLmxvZ1dhcm5pbmdzPWZ9KSgpfWRvd25sb2FkTG9nKGEpe2NvbnN0IGQ9KG5ldyBEYXRlKS52YWx1ZU9mKCk7dGhpcy5oZWxwZXJTZXJ2aWNl''@;'; put 'put ''LmRvd25sb2FkVGV4dEZpbGUoYGxvZ0ZpbGUtJHtkfWAsYSl9ZG93bmxvYWRTb3VyY2VDb2RlKGEpe2NvbnN0IGQ9KG5ldyBEYXRlKS52YWx1ZU9mKCk7dGhpcy5oZWxwZXJTZXJ2aWNlLmRvd25sb2FkVGV4dEZpbGUoYHNvdXJjZUNvZGUtJHtkfWAsYSl9ZG93bmxvYWRHZW5lcmF0ZWRDb2Rl''@;'; put 'put ''KGEpe2NvbnN0IGQ9KG5ldyBEYXRlKS52YWx1ZU9mKCk7dGhpcy5oZWxwZXJTZXJ2aWNlLmRvd25sb2FkVGV4dEZpbGUoYGdlbmVyYXRlZENvZGUtJHtkfWAsYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUoS3MpLHFlKG9oKSxxZShMdSkp''@;'; put 'put ''fX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXJlcXVlc3RzLW1vZGFsIl1dLGlucHV0czp7b3BlbmVkOiJvcGVuZWQifSxvdXRwdXRzOntvcGVuZWRDaGFuZ2U6Im9wZW5lZENoYW5nZSJ9LHN0YW5kYWxvbmU6ITEsZGVjbHM6OCx2YXJzOjQsY29u''@;'; put 'put ''c3RzOltbImNsck1vZGFsU2l6ZSIsInhsIiwxLCJyZXF1ZXN0cy1tb2RhbCIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm10LTAiLCJkLWlubGluZS1ibG9jayJdLFsxLCJtb2RhbC1ib2R5IiwiaC03MHZoIl0sWyJjbGFzcyIs''@;'; put 'put ''Im5vLXJlcXMiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJuby1yZXFzIl0sWzMsImlkIiwiY2xyU3RhY2tWaWV3TGV2ZWwiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJpZCIsImNsclN0YWNrVmlld0xldmVsIl0sWzEsIm1sLTEwIl0sWzEsImNvbnRlbnQiXSxbImNsclRhYkxpbmsiLCIi''@;'; put 'put ''XSxbMywiY2xySWZBY3RpdmVDaGFuZ2UiLCJjbHJJZkFjdGl2ZSJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLDEsIm1iLTUiLCJjb2xvci1ncmVlbiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi10cmlhbmdsZSIsMSwibWItNSIsImNvbG9yLXJlZCJdLFsiY2xhc3MiLCJlcnItbGlu''@;'; put 'put ''a3MiLDQsIm5nSWYiXSxbImNsYXNzIiwibG9nLXdyYXBwZXIgc2FzbG9nIiwzLCJpbm5lckhUTUwiLDQsIm5nSWYiXSxbImNsYXNzIiwibG9nLXdyYXBwZXIgc2FzbG9nIHZpeWEiLDMsInRleHRDb250ZW50Iiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLWxp''@;'; put 'put ''bmsiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImVyci1saW5rcyJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi10cmlhbmdsZSIsMSwiY29sb3ItcmVkIl0sWzMsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywiY2xpY2siXSxbMSwiY2xyLXRyZWVub2RlLWxpbmsiXSxbInNoYXBlIiwi''@;'; put 'put ''ZXhjbGFtYXRpb24tY2lyY2xlIiwxLCJjb2xvci1ncmVlbiJdLFsxLCJsb2ctd3JhcHBlciIsInNhc2xvZyIsMywiaW5uZXJIVE1MIl0sWzEsImxvZy13cmFwcGVyIiwic2FzbG9nIiwidml5YSIsMywidGV4dENvbnRlbnQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1saW5rIiwz''@;'; put 'put ''LCJjbGljayJdLFsxLCJsb2ctd3JhcHBlciJdLFsiY2xyVGFiTGluayIsIiIsMSwid29yay10YWJsZXMtZHJvcGRvd24iLDMsImNsckNsb3NlTWVudU9uSXRlbUNsaWNrIl0sWyJjbHJEcm9wZG93blRyaWdnZXIiLCIiXSxbInNoYXBlIiwiY2FyZXQgZG93biJdLFs0LCJjbHJJZk9wZW4iXSxb''@;'; put 'put ''ImNsYXNzIiwiZHJvcGRvd24taXRlbSIsImNsckRyb3Bkb3duSXRlbSIsIiIsMywic2VsZWN0ZWQiLCJjbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDEsImRyb3Bkb3duLWl0ZW0iLDMsImNsaWNrIl0sWyJjbGFzcyIsIm10LTEwIiw0LCJuZ0lmIl0s''@;'; put 'put ''WzEsIm1pbi1oLTUwdmgiXSxbImNsYXNzIiwidGFibGUgbXQtMTAiLDQsIm5nSWYiXSxbMSwibXQtMTAiXSxbMSwidGFibGUiLCJtdC0xMCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJjbHItbW9kYWwiLDApLE90KCJjbHJNb2Rh''@;'; put 'put ''bE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm1vZGFsT3BlbkNoYW5nZSh2KX0pLGRlKDEsImgzIiwxKSxQZSgyLCIgUmVxdWVzdCBIaXN0b3J5ICIpLGRlKDMsInAiLDIpLFBlKDQpLGhlKCkoKSxkZSg1LCJkaXYiLDMpLGd0KDYsZEplLDIsMCwicCIsNCkoNyxGSmUsMiwxLCJj''@;'; put 'put ''bHItc3RhY2stdmlldyIsNSksaGUoKSgpKSwyJmQmJihFZSgiY2xyTW9kYWxPcGVuIixoLm9wZW5lZCksZmUoNCksSXIoIkFwcCBMb2NhdGlvbjogIixoLnNhc2pzQ29uZmlnLmFwcExvYywiIiksZmUoMiksRWUoIm5nSWYiLChudWxsPT1oLnNhc2pzUmVxdWVzdHM/bnVsbDpoLnNhc2pzUmVx''@;'; put 'put ''dWVzdHMubGVuZ3RoKTwxKSxmZSgpLEVlKCJuZ0lmIixoLm9wZW5lZCYmKG51bGw9PWguc2FzanNSZXF1ZXN0cz9udWxsOmguc2FzanNSZXF1ZXN0cy5sZW5ndGgpPjApKX0sZGVwZW5kZW5jaWVzOltocyxDYSxxWCxhcGUsWFgsaXBlLHcyLG1oLHU1LFVsLGJ1LHIwLGR3LElmLGg2LHA2LEg5''@;'; put 'put ''LGY2LGQ2LFA5LHI1LFQ5LEE5LGZ3LExQXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NsYXNzIE5KZXtjb25zdHJ1Y3Rvcigpe3RoaXMuc2FzU2VydmljZT1udWxsLHRoaXMubWVzc2FnZT0iIix0aGlzLmRldGFpbHM9bmV3IE9wZX19Y2xhc3MgT3Ble31mdW5jdGlvbiBWSmUo''@;'; put 'put ''YyxsKXtpZigxJmMmJihkZSgwLCJwIiw4KSxQZSgxLCIgU0FTIFNlcnZpY2U6ICIpLGRlKDIsInN0cm9uZyIpLFBlKDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoMyksQ3IoYS5kYXRhLnNhc1NlcnZpY2UpfX1mdW5jdGlvbiBCSmUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDkp''@;'; put 'put ''KDEsInAiKSgyLCJzdHJvbmciKSxQZSgzLCJTWVNXQVJOSU5HVEVYVDoiKSxoZSgpLFBlKDQpLGhlKCksZGUoNSwicCIpKDYsInN0cm9uZyIpLFBlKDcsIlNZU0VSUk9SVEVYVDoiKSxoZSgpLFBlKDgpLGhlKCksZGUoOSwicCIpKDEwLCJzdHJvbmciKSxQZSgxMSwiTUFDOiIpLGhlKCksUGUo''@;'; put 'put ''MTIpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoNCksSXIoIiAiLGEuZGF0YS5kZXRhaWxzLlNZU1dBUk5JTkdURVhULCIiKSxmZSg0KSxJcigiICIsYS5kYXRhLmRldGFpbHMuU1lTRVJST1JURVhULCIiKSxmZSg0KSxJcigiICIsYS5kYXRhLmRldGFpbHMuTUFDLCIiKX19ZnVuY3Rp''@;'; put 'put ''b24gakplKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiYnV0dG9uIiwxMCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLm9wZW5Db25maWd1cmF0b3IoKSl9KSxQZSgxLCIgT3BlbiBjb25maWd1cmF0b3IgIiksaGUoKX19ZnVuY3Rpb24gekplKGMs''@;'; put 'put ''bCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiYnV0dG9uIiwxMCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLm9wZW5SZXF1ZXN0c01vZGFsKCkpfSksUGUoMSwiIE9wZW4gcmVxdWVzdHMgbW9kYWwgIiksaGUoKX19ZnVuY3Rpb24gVUplKGMsbCl7aWYo''@;'; put 'put ''MSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiYnV0dG9uIiwxMCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmRvd25sb2FkTG9nKCkpfSksUGUoMSwiIERvd25sb2FkIGxvZyAiKSxoZSgpfX1mdW5jdGlvbiBaSmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtk''@;'; put 'put ''ZSgwLCJidXR0b24iLDEwKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuY2xvc2VBYm9ydE1vZGFsKCkpfSksUGUoMSwiIENsb3NlICIpLGhlKCl9fWZ1bmN0aW9uIFdKZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImJ1dHRvbiIsMTApLE90KCJj''@;'; put 'put ''bGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5yZWxvYWQoKSl9KSxQZSgxLCIgUmVsb2FkICIpLGhlKCl9fWxldCBZSmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmhlbHBlclNlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMuc2Fz''@;'; put 'put ''U2VydmljZT1oLHRoaXMucm91dGVyPWYsdGhpcy5vbkNvbmZpcm1Nb2RhbENsaWNrPW5ldyBYcix0aGlzLmRhdGE9bmV3IE5KZSx0aGlzLmZvcmNlUmVsb2FkPSExLHRoaXMubW9kYWxFbmFibGVkPSEwLHRoaXMuZGVmYXVsdERhdGE9e21vZGFsVGl0bGU6IkFib3J0IE1lc3NhZ2UiLHNhc1Nl''@;'; put 'put ''cnZpY2U6bnVsbCxtZXNzYWdlOiIiLGRldGFpbHM6bmV3IE9wZX19bmdPbkluaXQoKXtsZXQgYT17Li4udGhpcy5kZWZhdWx0RGF0YSwuLi50aGlzLmRhdGF9O3RoaXMuZGF0YT1hfXNob3dDb25maWd1cmF0b3JCdXR0b24oYSl7Y29uc3QgZD10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25m''@;'; put 'put ''aWcoKTtyZXR1cm4gYT8uaW5jbHVkZXMoInN0YXJ0dXBzZXJ2aWNlIikmJmQuc2VydmVyVHlwZT09PWwxLlkuU2FzOX1jbG9zZUFib3J0TW9kYWwoKXt0aGlzLm9uQ29uZmlybU1vZGFsQ2xpY2suZW1pdCgpfW9wZW5Db25maWd1cmF0b3IoKXt0aGlzLmV2ZW50U2VydmljZS5zdGFydHVwRGF0''@;'; put 'put ''YUxvYWRlZCgpLHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSx0aGlzLmNsb3NlQWJvcnRNb2RhbCgpfWRvd25sb2FkTG9nKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmRvd25sb2FkVGV4dEZpbGUoYCR7dGhpcy5kYXRhLnNhc1NlcnZpY2V9LUxPR2AsdGhpcy5kYXRhLmRldGFp''@;'; put 'put ''bHM/LkxPR3x8IkVycm9yIHBhcnNpbmcgdGhlIGxvZyIpfW9wZW5SZXF1ZXN0c01vZGFsKCl7dGhpcy5ldmVudFNlcnZpY2Uub3BlblJlcXVlc3RzTW9kYWwoKX1yZWxvYWQoKXtsb2NhdGlvbi5yZWxvYWQoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhk''@;'; put 'put ''fHxjKShxZShMdSkscWUoRWMpLHFlKEtzKSxxZShubCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWluZm8tbW9kYWwiXV0saW5wdXRzOntkYXRhOiJkYXRhIixmb3JjZVJlbG9hZDoiZm9yY2VSZWxvYWQifSxvdXRwdXRzOntvbkNvbmZpcm1N''@;'; put 'put ''b2RhbENsaWNrOiJvbkNvbmZpcm1Nb2RhbENsaWNrIn0sc3RhbmRhbG9uZTohMSxkZWNsczoxMyx2YXJzOjEyLGNvbnN0czpbWyJhcHBEcmFnTmRyb3AiLCIiLDEsImNsci1hYm9ydC1tb2RhbCIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwi''@;'; put 'put ''Y2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsiY2xhc3MiLCJzYXNTZXJ2aWNlIG10LTAiLDQsIm5nSWYiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJhYm9ydE1zZyIsMywiaW5uZXJIVE1MIl0sWyJjbGFzcyIsInN5c3RleHQiLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVy''@;'; put 'put ''Il0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLXByaW1hcnkiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsInNhc1NlcnZpY2UiLCJtdC0wIl0sWzEsInN5c3RleHQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpm''@;'; put 'put ''dW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImNsci1tb2RhbCIsMCksY2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGZpKGgubW9kYWxFbmFibGVkLHYpfHwoaC5tb2RhbEVuYWJsZWQ9diksdn0pLGRlKDEsImgzIiwxKSxQZSgyKSxndCgzLFZKZSw0LDEsInAiLDIp''@;'; put 'put ''LGhlKCksZGUoNCwiZGl2IiwzKSxHdCg1LCJkaXYiLDQpLGd0KDYsQkplLDEzLDMsImRpdiIsNSksaGUoKSxkZSg3LCJkaXYiLDYpLGd0KDgsakplLDIsMCwiYnV0dG9uIiw3KSg5LHpKZSwyLDAsImJ1dHRvbiIsNykoMTAsVUplLDIsMCwiYnV0dG9uIiw3KSgxMSxaSmUsMiwwLCJidXR0b24i''@;'; put 'put ''LDcpKDEyLFdKZSwyLDAsImJ1dHRvbiIsNyksaGUoKSgpKSwyJmQmJihsaSgiY2xyTW9kYWxPcGVuIixoLm1vZGFsRW5hYmxlZCksRWUoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCFoLmZvcmNlUmVsb2FkKSxmZSgyKSxJcigiICIsaC5kYXRhLm1vZGFsVGl0bGUs''@;'; put 'put ''IiAiKSxmZSgpLEVlKCJuZ0lmIixoLmRhdGEuc2FzU2VydmljZSYmaC5kYXRhLnNhc1NlcnZpY2UubGVuZ3RoPjApLGZlKDIpLEVlKCJpbm5lckhUTUwiLGguZGF0YS5tZXNzYWdlLE9nKSxmZSgpLEVlKCJuZ0lmIixudWxsIT09aC5kYXRhLmRldGFpbHMpLGZlKDIpLEVlKCJuZ0lmIixoLnNo''@;'; put 'put ''b3dDb25maWd1cmF0b3JCdXR0b24oaC5kYXRhLnNhc1NlcnZpY2UpKSxmZSgpLEVlKCJuZ0lmIixudWxsIT09aC5kYXRhLmRldGFpbHMpLGZlKCksRWUoIm5nSWYiLChudWxsPT1oLmRhdGEuZGV0YWlscz9udWxsOmguZGF0YS5kZXRhaWxzLkxPRykmJihudWxsPT1oLmRhdGEuZGV0YWlsc3x8''@;'; put 'put ''bnVsbD09aC5kYXRhLmRldGFpbHMuTE9HP251bGw6aC5kYXRhLmRldGFpbHMuTE9HLnRyaW0oKS5sZW5ndGgpPjApLGZlKCksRWUoIm5nSWYiLCFoLmZvcmNlUmVsb2FkKSxmZSgpLEVlKCJuZ0lmIixoLmZvcmNlUmVsb2FkKSl9LGRlcGVuZGVuY2llczpbQ2EsYnUscjAsX0FdLGVuY2Fwc3Vs''@;'; put 'put ''YXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgR0plPSgpPT5bIi8iXSxQcGU9KCk9PlsiL3ZpZXciXSxGcGU9KCk9PlsiL2hvbWUiXSx0cT0oKT0+WyIvcmV2aWV3L3N1Ym1pdHRlZCJdLCRKZT0oKT0+WyIvcmV2aWV3L2FwcHJvdmUiXSxLSmU9KCk9PlsiL3Jldmlldy9oaXN0b3J5Il07''@;'; put 'put ''ZnVuY3Rpb24gWEplKGMsbCl7MSZjJiYob2koMCksZGUoMSwiZGl2IiwxNykoMiwiZGl2IiwxOCkoMywiZGl2IiwxOSksR3QoNCwiY2RzLWljb24iLDIwKSxoZSgpLGRlKDUsImRpdiIsMjEpLFBlKDYsIiBEYXRhIENvbnRyb2xsZXIgKEZSRUUgVGllcikgLSB0byB1cGdyYWRlIGNvbnRhY3Qg''@;'; put 'put ''IiksR3QoNywiY29udGFjdC1saW5rIiwyMiksaGUoKSgpKCksZGUoOCwiYSIsMjMpLFBlKDksIlVwZGF0ZSBMaWNlbmNlIEtleSIpLGhlKCksc2koKSl9ZnVuY3Rpb24gcUplKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7b2koMCksZGUoMSwiZGl2IiwxNykoMiwiZGl2IiwxOCkoMywiZGl2''@;'; put 'put ''IiwxOSksR3QoNCwiY2RzLWljb24iLDIwKSxoZSgpLGRlKDUsImRpdiIsMjEpLFBlKDYsIiBEYXRhIENvbnRyb2xsZXIgKEZSRUUgVGllcikgLSBQcm9ibGVtIHdpdGggbGljZW5jZSAiKSxoZSgpKCkoKSxkZSg3LCJhIiwyNCksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9''@;'; put 'put ''T2UoMyk7cmV0dXJuIEN0KGgubGljZW5jZVByb2JsZW1EZXRhaWxzKGgubGljZW5jZVByb2JsZW0udmFsdWUpKX0pLFBlKDgsIk1vcmUgZGV0YWlscyIpLGhlKCksc2koKX19ZnVuY3Rpb24gSkplKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxNiksZ3QoMSxYSmUsMTAsMCwibmctY29udGFp''@;'; put 'put ''bmVyIiwxKSgyLHFKZSw5LDAsIm5nLWNvbnRhaW5lciIsMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKCksRWUoIm5nSWYiLG51bGw9PT1hLmxpY2VuY2VQcm9ibGVtLnZhbHVlKSxmZSgpLEVlKCJuZ0lmIixudWxsIT09YS5saWNlbmNlUHJvYmxlbS52YWx1ZSl9fWZ1bmN0aW9uIFFK''@;'; put 'put ''ZShjLGwpezEmYyYmKGRlKDAsImEiLDIzKSxQZSgxLCJVcGRhdGUgTGljZW5jZSBLZXkiKSxoZSgpKX1mdW5jdGlvbiBlUWUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDI1KSgxLCJkaXYiLDE3KSgyLCJkaXYiLDE4KSgzLCJkaXYiLDE5KSxHdCg0LCJjZHMtaWNvbiIsMjApLGhlKCksZGUo''@;'; put 'put ''NSwiZGl2IiwyMSksUGUoNiksR3QoNywiY29udGFjdC1saW5rIiwyMiksUGUoOCksaGUoKSgpKCksZ3QoOSxRSmUsMiwwLCJhIiwyNiksaGUoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDYpLFh1KCIgVGhpcyBsaWNlbnNlIGtleSB3aWxsIGV4cGlyZSBpbiAiLGEubGljZW5zZUV4cGlyaW5n''@;'; put 'put ''RGF5cywiICIsMT09PWEubGljZW5zZUV4cGlyaW5nRGF5cz8iZGF5IjoiZGF5cyIsIi4gUGxlYXNlIGNvbnRhY3QgIiksZmUoMiksSXIoIiBvciB5b3VyIHJlc2VsbGVyIHRvIGFycmFuZ2UgYWRkaXRpb25hbCBsaWNlbmNlIGZvciBzaXRlIGlkICIsYS5zeXNzaXRlLmdldFZhbHVlKCksIi4g''@;'; put 'put ''IiksZmUoKSxFZSgibmdJZiIsIWEuZnJlZVRpZXJCYW5uZXIpfX1mdW5jdGlvbiB0UWUoYyxsKXsxJmMmJihkZSgwLCJhIiwyMyksUGUoMSwiVXBkYXRlIExpY2VuY2UgS2V5IiksaGUoKSl9ZnVuY3Rpb24gblFlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyNSkoMSwiZGl2IiwxNykoMiwi''@;'; put 'put ''ZGl2IiwxOCkoMywiZGl2IiwxOSksR3QoNCwiY2RzLWljb24iLDIwKSxoZSgpLGRlKDUsImRpdiIsMjEpLFBlKDYsIiBUaGUgcmVnaXN0ZXJlZCBudW1iZXIgb2YgdXNlcnMgZXhjZWVkcyB0aGUgbGltaXQgc3BlY2lmaWVkIGZvciB5b3VyIGxpY2Vuc2UuIFBsZWFzZSBjb250YWN0ICIpLEd0''@;'; put 'put ''KDcsImNvbnRhY3QtbGluayIsMjIpLFBlKDgpLGhlKCkoKSgpLGd0KDksdFFlLDIsMCwiYSIsMjYpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSg4KSxJcigiIG9yIHlvdXIgcmVzZWxsZXIgdG8gYXJyYW5nZSBhZGRpdGlvbmFsIGxpY2VuY2UgZm9yIHNpdGUgaWQgIixhLnN5c3NpdGUu''@;'; put 'put ''Z2V0VmFsdWUoKSwiLiAiKSxmZSgpLEVlKCJuZ0lmIiwhYS5saWNlbnNlRXhwaXJpbmdEYXlzJiYhYS5mcmVlVGllckJhbm5lcil9fWZ1bmN0aW9uIHJRZShjLGwpe2lmKDEmYyYmKG9pKDApLGd0KDEsSkplLDMsMiwiZGl2IiwxNCkoMixlUWUsMTAsNCwiZGl2IiwxNSkoMyxuUWUsMTAsMiwi''@;'; put 'put ''ZGl2IiwxNSksc2koKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSxFZSgibmdJZiIsYS5mcmVlVGllckJhbm5lciYmKCFhLmxpY2Vuc2VFeHBpcmluZ0RheXN8fGEubGljZW5zZUV4cGlyaW5nRGF5czwwKSksZmUoKSxFZSgibmdJZiIsYS5saWNlbnNlRXhwaXJpbmdEYXlzJiYhYS5mcmVlVGll''@;'; put 'put ''ckJhbm5lciksZmUoKSxFZSgibmdJZiIsYS5hcHBPdmVyQ2FwYWNpdHkpfX1mdW5jdGlvbiBpUWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDI3KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkudG9nZ2xlU2lkZWJhcigpKX0pLEd0KDEs''@;'; put 'put ''ImNsci1pY29uIiwyOCksaGUoKX19ZnVuY3Rpb24gYVFlKGMsbCl7MSZjJiYoZGUoMCwiYSIsMjkpLEd0KDEsImltZyIsMzApKDIsImltZyIsMzEpLGhlKCkpLDImYyYmRWUoInJvdXRlckxpbmsiLHRsKDEsR0plKSl9ZnVuY3Rpb24gb1FlKGMsbCl7MSZjJiYoZGUoMCwiYSIpLEd0KDEsInNw''@;'; put 'put ''YW4iLDMyKSxoZSgpKX1mdW5jdGlvbiBzUWUoYyxsKXsxJmMmJihkZSgwLCJjbHItZHJvcGRvd24tbWVudSIsNDApKDEsImEiLDQxKSxQZSgyLCJWSUVXIiksaGUoKSxkZSgzLCJhIiw0MSksUGUoNCwiTE9BRCIpLGhlKCksZGUoNSwiYSIsNDEpLFBlKDYsIlJFVklFVyIpLGhlKCkoKSksMiZj''@;'; put 'put ''JiYoZmUoKSxFZSgicm91dGVyTGluayIsdGwoMyxQcGUpKSxmZSgyKSxFZSgicm91dGVyTGluayIsdGwoNCxGcGUpKSxmZSgyKSxFZSgicm91dGVyTGluayIsdGwoNSx0cSkpKX1mdW5jdGlvbiBsUWUoYyxsKXtpZigxJmMmJihvaSgwKSxkZSgxLCJkaXYiLDMzKSgyLCJjbHItZHJvcGRvd24i''@;'; put 'put ''KSgzLCJidXR0b24iLDM0KSxQZSg0LCIgTWVudSAiKSxoZSgpLGd0KDUsc1FlLDcsNiwiY2xyLWRyb3Bkb3duLW1lbnUiLDM1KSxoZSgpKCksZGUoNiwiZGl2IiwzNikoNywiYSIsMzcpLFBlKDgsIlZJRVciKSxoZSgpLGRlKDksImEiLDM4KSxQZSgxMCwiTE9BRCIpLGhlKCksZGUoMTEsImEi''@;'; put 'put ''LDM5KSxQZSgxMiwiUkVWSUVXIiksaGUoKSgpLHNpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDcpLEVlKCJyb3V0ZXJMaW5rIix0bCg3LFBwZSkpLGZlKDIpLHhyKCJhY3RpdmUiLGEucm91dGVyLnVybC5pbmNsdWRlcygiZWRpdG9yIil8fGEucm91dGVyLnVybC5pbmNsdWRlcygiZWRpdC1y''@;'; put 'put ''ZWNvcmQiKXx8YS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJob21lIikpLEVlKCJyb3V0ZXJMaW5rIix0bCg4LEZwZSkpLGZlKDIpLHhyKCJhY3RpdmUiLGEucm91dGVyLnVybC5pbmNsdWRlcygic3VibWl0dGVkIil8fGEucm91dGVyLnVybC5pbmNsdWRlcygiYXBwcm92ZSIpfHxhLnJvdXRlci51''@;'; put 'put ''cmwuaW5jbHVkZXMoImhpc3RvcnkiKSksRWUoInJvdXRlckxpbmsiLHRsKDksdHEpKX19ZnVuY3Rpb24gY1FlKGMsbCl7aWYoMSZjJiYoZGUoMCwibmF2Iiw0MikoMSwidWwiLDQzKSgyLCJsaSIsNDQpKDMsImEiLDM3KSxQZSg0LCJTVUJNSVQiKSxoZSgpKCksZGUoNSwibGkiLDQ0KSg2LCJh''@;'; put 'put ''IiwzNyksUGUoNywiQVBQUk9WRSIpLGhlKCkoKSxkZSg4LCJsaSIsNDQpKDksImEiLDM3KSxQZSgxMCwiSElTVE9SWSIpLGhlKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDMpLEVlKCJyb3V0ZXJMaW5rIix0bCg1LHRxKSksZmUoMykseHIoImFjdGl2ZSIsYS5yb3V0ZXIudXJsLmlu''@;'; put 'put ''Y2x1ZGVzKCJhcHByb3ZlIikpLEVlKCJyb3V0ZXJMaW5rIix0bCg2LCRKZSkpLGZlKDMpLEVlKCJyb3V0ZXJMaW5rIix0bCg3LEtKZSkpfX1mdW5jdGlvbiB1UWUoYyxsKXsxJmMmJkd0KDAsImFwcC1hbGVydHMiKX1mdW5jdGlvbiBkUWUoYyxsKXsxJmMmJkd0KDAsInJvdXRlci1vdXRsZXQi''@;'; put 'put ''KX1mdW5jdGlvbiBoUWUoYyxsKXsxJmMmJkd0KDAsImFwcC1hbGVydHMiKX1mdW5jdGlvbiBmUWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJhcHAtaW5mby1tb2RhbCIsNDUpLE90KCJvbkNvbmZpcm1Nb2RhbENsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxp''@;'; put 'put ''Y2l0O3JldHVybiBDdChPZSgpLmNsb3NlQWJvcnRNb2RhbChoLmlkKSl9KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPU9lKCk7RWUoImRhdGEiLGEpKCJmb3JjZVJlbG9hZCIsIWQuc3RhcnR1cERhdGFMb2FkZWQmJjE9PT1kLnNhc2pzQWJvcnRzLmxlbmd0aCl9fWZ1bmN0''@;'; put 'put ''aW9uIHBRZShjLGwpezEmYyYmKGRlKDAsImRpdiIsNDkpLEd0KDEsImRpdiIsNTApKDIsImRpdiIsNTEpKDMsImRpdiIsNTIpLGhlKCkpfWZ1bmN0aW9uIGdRZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNDYpLEd0KDEsImltZyIsNDcpLGd0KDIscFFlLDQsMCwiZGl2Iiw0OCksaGUoKSks''@;'; put 'put ''MiZjKXtjb25zdCBhPU9lKCk7ZmUoMiksRWUoIm5nSWYiLG51bGw9PT1hLmFwcEFjdGl2ZSl9fU5zLmFkZEljb25zKFsibW9vbiIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOC4xMSAzMi4wMDAzQzEwLjMzIDMyLjAwMDMgNCAyNS43MjAzIDQgMTcuOTkwM0M0IDEwLjI2MDMgMTAuMDMgNC4yMDAz''@;'; put 'put ''IDE3LjczIDQuMDAwM0MxOC4xNSAzLjk5MDMgMTguNTIgNC4yMzAzIDE4LjY4IDQuNjEwM0MxOC44NCA0Ljk5MDMgMTguNzUgNS40MzAzIDE4LjQ2IDUuNzIwM0MxNi42OSA3LjQ1MDMgMTUuNzEgOS43NjAzIDE1LjcxIDEyLjIxMDNDMTUuNzEgMTcuMjQwMyAxOS44MyAyMS4zMzAzIDI0Ljkx''@;'; put 'put ''IDIxLjMzMDNDMjYuOSAyMS4zMzAzIDI4LjggMjAuNzAwMyAzMC40MSAxOS41MTAzQzMwLjc0IDE5LjI3MDMgMzEuMTkgMTkuMjUwMyAzMS41MyAxOS40NjAzQzMxLjg4IDE5LjY4MDMgMzIuMDYgMjAuMDgwMyAzMS45OSAyMC40OTAzQzMwLjc4IDI3LjE2MDMgMjQuOTQgMzIuMDAwMyAxOC4x''@;'; put 'put ''MSAzMi4wMDAzWk0xNS40MyA2LjI5MDNDOS45OSA3LjQ4MDMgNiAxMi4yNDAzIDYgMTcuOTkwM0M2IDI0LjYxMDMgMTEuNDMgMzAuMDAwMyAxOC4xMSAzMC4wMDAzQzIzLjE2IDMwLjAwMDMgMjcuNTggMjYuOTIwMyAyOS4zNyAyMi40MDAzQzI3Ljk3IDIzLjAxMDMgMjYuNDYgMjMuMzIwMyAy''@;'; put 'put ''NC45MSAyMy4zMjAzQzE4Ljc0IDIzLjMyMDMgMTMuNzEgMTguMzMwMyAxMy43MSAxMi4yMDAzQzEzLjcxIDEwLjA3MDMgMTQuMzEgOC4wMzAzIDE1LjQzIDYuMjgwM1Y2LjI5MDNaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4LjExIDMyLjAwMDNDMTAuMzMgMzIuMDAwMyA0IDI1LjcyMDMgNCAx''@;'; put 'put ''Ny45OTAzQzQgMTAuMjYwMyAxMC4wMyA0LjIwMDMgMTcuNzMgNC4wMDAzQzE4LjE1IDMuOTkwMyAxOC41MiA0LjIzMDMgMTguNjggNC42MTAzQzE4Ljg0IDQuOTkwMyAxOC43NSA1LjQzMDMgMTguNDYgNS43MjAzQzE2LjY5IDcuNDUwMyAxNS43MSA5Ljc2MDMgMTUuNzEgMTIuMjEwM0MxNS43''@;'; put 'put ''MSAxNy4yNDAzIDE5LjgzIDIxLjMzMDMgMjQuOTEgMjEuMzMwM0MyNi45IDIxLjMzMDMgMjguOCAyMC43MDAzIDMwLjQxIDE5LjUxMDNDMzAuNzQgMTkuMjcwMyAzMS4xOSAxOS4yNTAzIDMxLjUzIDE5LjQ2MDNDMzEuODggMTkuNjgwMyAzMi4wNiAyMC4wODAzIDMxLjk5IDIwLjQ5MDNDMzAu''@;'; put 'put ''NzggMjcuMTYwMyAyNC45NCAzMi4wMDAzIDE4LjExIDMyLjAwMDNaIi8+J31dLFsic3VuIix7b3V0bGluZTonPHBhdGggZD0iTTguODEgMTAuMjJDOS4wMSAxMC40MiA5LjI2IDEwLjUxIDkuNTIgMTAuNTFDOS43OCAxMC41MSAxMC4wMyAxMC40MSAxMC4yMyAxMC4yMkMxMC42MiA5LjgzIDEw''@;'; put 'put ''LjYyIDkuMiAxMC4yMyA4LjgxTDguMTEgNi42OUM3LjcyIDYuMyA3LjA5IDYuMyA2LjcgNi42OUM2LjMxIDcuMDggNi4zMSA3LjcxIDYuNyA4LjFMOC44MiAxMC4yMkg4LjgxWk03IDE4QzcgMTcuNDUgNi41NSAxNyA2IDE3SDNDMi40NSAxNyAyIDE3LjQ1IDIgMThDMiAxOC41NSAyLjQ1IDE5''@;'; put 'put ''IDMgMTlINkM2LjU1IDE5IDcgMTguNTUgNyAxOFpNMTggN0MxOC41NSA3IDE5IDYuNTUgMTkgNlYzQzE5IDIuNDUgMTguNTUgMiAxOCAyQzE3LjQ1IDIgMTcgMi40NSAxNyAzVjZDMTcgNi41NSAxNy40NSA3IDE4IDdaTTI2LjQ5IDEwLjUxQzI2Ljc1IDEwLjUxIDI3IDEwLjQxIDI3LjIgMTAu''@;'; put 'put ''MjJMMjkuMzIgOC4xQzI5LjcxIDcuNzEgMjkuNzEgNy4wOCAyOS4zMiA2LjY5QzI4LjkzIDYuMyAyOC4zIDYuMyAyNy45MSA2LjY5TDI1Ljc5IDguODFDMjUuNCA5LjIgMjUuNCA5LjgzIDI1Ljc5IDEwLjIyQzI1Ljk5IDEwLjQyIDI2LjI0IDEwLjUxIDI2LjUgMTAuNTFIMjYuNDlaTTguODEg''@;'; put 'put ''MjUuNzhMNi42OSAyNy45QzYuMyAyOC4yOSA2LjMgMjguOTIgNi42OSAyOS4zMUM2Ljg5IDI5LjUxIDcuMTQgMjkuNiA3LjQgMjkuNkM3LjY2IDI5LjYgNy45MSAyOS41IDguMTEgMjkuMzFMMTAuMjMgMjcuMTlDMTAuNjIgMjYuOCAxMC42MiAyNi4xNyAxMC4yMyAyNS43OEM5Ljg0IDI1LjM5''@;'; put 'put ''IDkuMjEgMjUuMzkgOC44MiAyNS43OEg4LjgxWk0zMyAxN0gzMEMyOS40NSAxNyAyOSAxNy40NSAyOSAxOEMyOSAxOC41NSAyOS40NSAxOSAzMCAxOUgzM0MzMy41NSAxOSAzNCAxOC41NSAzNCAxOEMzNCAxNy40NSAzMy41NSAxNyAzMyAxN1pNMTggOUMxMy4wNCA5IDkgMTMuMDQgOSAxOEM5''@;'; put 'put ''IDIyLjk2IDEzLjA0IDI3IDE4IDI3QzIyLjk2IDI3IDI3IDIyLjk2IDI3IDE4QzI3IDEzLjA0IDIyLjk2IDkgMTggOVpNMTggMjVDMTQuMTQgMjUgMTEgMjEuODYgMTEgMThDMTEgMTQuMTQgMTQuMTQgMTEgMTggMTFDMjEuODYgMTEgMjUgMTQuMTQgMjUgMThDMjUgMjEuODYgMjEuODYgMjUg''@;'; put 'put ''MTggMjVaTTI3LjE5IDI1Ljc4QzI2LjggMjUuMzkgMjYuMTcgMjUuMzkgMjUuNzggMjUuNzhDMjUuMzkgMjYuMTcgMjUuMzkgMjYuOCAyNS43OCAyNy4xOUwyNy45IDI5LjMxQzI4LjEgMjkuNTEgMjguMzUgMjkuNiAyOC42MSAyOS42QzI4Ljg3IDI5LjYgMjkuMTIgMjkuNSAyOS4zMiAyOS4z''@;'; put 'put ''MUMyOS43MSAyOC45MiAyOS43MSAyOC4yOSAyOS4zMiAyNy45TDI3LjIgMjUuNzhIMjcuMTlaTTE4IDI5QzE3LjQ1IDI5IDE3IDI5LjQ1IDE3IDMwVjMzQzE3IDMzLjU1IDE3LjQ1IDM0IDE4IDM0QzE4LjU1IDM0IDE5IDMzLjU1IDE5IDMzVjMwQzE5IDI5LjQ1IDE4LjU1IDI5IDE4IDI5WiIv''@;'; put 'put ''Picsc29saWQ6JzxwYXRoIGQ9Ik04LjgxIDI1Ljc4TDYuNjkgMjcuOUM2LjMgMjguMjkgNi4zIDI4LjkyIDYuNjkgMjkuMzFDNi44OSAyOS41MSA3LjE0IDI5LjYgNy40IDI5LjZDNy42NiAyOS42IDcuOTEgMjkuNSA4LjExIDI5LjMxTDEwLjIzIDI3LjE5QzEwLjYyIDI2LjggMTAuNjIgMjYu''@;'; put 'put ''MTcgMTAuMjMgMjUuNzhDOS44NCAyNS4zOSA5LjIxIDI1LjM5IDguODIgMjUuNzhIOC44MVpNNyAxOEM3IDE3LjQ1IDYuNTUgMTcgNiAxN0gzQzIuNDUgMTcgMiAxNy40NSAyIDE4QzIgMTguNTUgMi40NSAxOSAzIDE5SDZDNi41NSAxOSA3IDE4LjU1IDcgMThaTTguODEgMTAuMjJDOS4wMSAx''@;'; put 'put ''MC40MiA5LjI2IDEwLjUxIDkuNTIgMTAuNTFDOS43OCAxMC41MSAxMC4wMyAxMC40MSAxMC4yMyAxMC4yMkMxMC42MiA5LjgzIDEwLjYyIDkuMiAxMC4yMyA4LjgxTDguMTEgNi42OUM3LjcyIDYuMyA3LjA5IDYuMyA2LjcgNi42OUM2LjMxIDcuMDggNi4zMSA3LjcxIDYuNyA4LjFMOC44MiAx''@;'; put 'put ''MC4yMkg4LjgxWk0yNi40OSAxMC41MUMyNi43NSAxMC41MSAyNyAxMC40MSAyNy4yIDEwLjIyTDI5LjMyIDguMUMyOS43MSA3LjcxIDI5LjcxIDcuMDggMjkuMzIgNi42OUMyOC45MyA2LjMgMjguMyA2LjMgMjcuOTEgNi42OUwyNS43OSA4LjgxQzI1LjQgOS4yIDI1LjQgOS44MyAyNS43OSAx''@;'; put 'put ''MC4yMkMyNS45OSAxMC40MiAyNi4yNCAxMC41MSAyNi41IDEwLjUxSDI2LjQ5Wk0xOCA3QzE4LjU1IDcgMTkgNi41NSAxOSA2VjNDMTkgMi40NSAxOC41NSAyIDE4IDJDMTcuNDUgMiAxNyAyLjQ1IDE3IDNWNkMxNyA2LjU1IDE3LjQ1IDcgMTggN1pNMTggMjlDMTcuNDUgMjkgMTcgMjkuNDUg''@;'; put 'put ''MTcgMzBWMzNDMTcgMzMuNTUgMTcuNDUgMzQgMTggMzRDMTguNTUgMzQgMTkgMzMuNTUgMTkgMzNWMzBDMTkgMjkuNDUgMTguNTUgMjkgMTggMjlaTTMzIDE3SDMwQzI5LjQ1IDE3IDI5IDE3LjQ1IDI5IDE4QzI5IDE4LjU1IDI5LjQ1IDE5IDMwIDE5SDMzQzMzLjU1IDE5IDM0IDE4LjU1IDM0''@;'; put 'put ''IDE4QzM0IDE3LjQ1IDMzLjU1IDE3IDMzIDE3Wk0yNy4xOSAyNS43OEMyNi44IDI1LjM5IDI2LjE3IDI1LjM5IDI1Ljc4IDI1Ljc4QzI1LjM5IDI2LjE3IDI1LjM5IDI2LjggMjUuNzggMjcuMTlMMjcuOSAyOS4zMUMyOC4xIDI5LjUxIDI4LjM1IDI5LjYgMjguNjEgMjkuNkMyOC44NyAyOS42''@;'; put 'put ''IDI5LjEyIDI5LjUgMjkuMzIgMjkuMzFDMjkuNzEgMjguOTIgMjkuNzEgMjguMjkgMjkuMzIgMjcuOUwyNy4yIDI1Ljc4SDI3LjE5Wk0xOCA5QzEzLjA0IDkgOSAxMy4wNCA5IDE4QzkgMjIuOTYgMTMuMDQgMjcgMTggMjdDMjIuOTYgMjcgMjcgMjIuOTYgMjcgMThDMjcgMTMuMDQgMjIuOTYg''@;'; put 'put ''OSAxOCA5WiIvPid9XSxbImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIix7b3V0bGluZTonPHBhdGggZD0iTTE3Ljk5NDMgMjAuOEMxOC41NDQgMjAuOCAxOC45OTM4IDIwLjM1IDE4Ljk5MzggMTkuOFYxNEMxOC45OTM4IDEzLjQ1IDE4LjU0NCAxMyAxNy45OTQzIDEzQzE3LjQ0NDUgMTMgMTYuOTk0''@;'; put 'put ''NyAxMy40NSAxNi45OTQ3IDE0VjE5LjhDMTYuOTk0NyAyMC4zNSAxNy40NDQ1IDIwLjggMTcuOTk0MyAyMC44Wk0xOC44NDM5IDIyLjk1QzE4LjcyMzkgMjIuODQgMTguNTk0IDIyLjc1IDE4LjQ1NDEgMjIuNjlDMTguMTY0MiAyMi41NyAxNy44MjQzIDIyLjU3IDE3LjUzNDUgMjIuNjlDMTcu''@;'; put 'put ''Mzk0NSAyMi43NSAxNy4yNjQ2IDIyLjg0IDE3LjE0NDYgMjIuOTVDMTYuOTI0NyAyMy4xOCAxNi43OTQ4IDIzLjQ4IDE2Ljc5NDggMjMuOEMxNi43OTQ4IDI0LjEyIDE2LjkyNDcgMjQuNDIgMTcuMTQ0NiAyNC42NUMxNy4yNjQ2IDI0Ljc2IDE3LjM5NDUgMjQuODUgMTcuNTM0NSAyNC45MUMx''@;'; put 'put ''Ny42ODQ0IDI0Ljk3IDE3LjgzNDMgMjUgMTcuOTk0MyAyNUMxOC4xNTQyIDI1IDE4LjMwNDEgMjQuOTcgMTguNDU0MSAyNC45MUMxOC41OTQgMjQuODUgMTguNzIzOSAyNC43NiAxOC44NDM5IDI0LjY1QzE5LjA2MzggMjQuNDIgMTkuMTkzNyAyNC4xMiAxOS4xOTM3IDIzLjhDMTkuMTkzNyAy''@;'; put 'put ''My42NCAxOS4xNjM3IDIzLjQ5IDE5LjEwMzggMjMuMzRDMTkuMDQzOCAyMy4yIDE4Ljk1MzggMjMuMDYgMTguODQzOSAyMi45NVpNMzAuNTk4NiAyNS40M0wyMC42NjMxIDcuNTdDMjAuMTEzMyA2LjU5IDE5LjEyMzggNiAxNy45OTQzIDZDMTYuODY0OCA2IDE1Ljg3NTIgNi41OSAxNS4zMjU0''@;'; put 'put ''IDcuNTdMNS4zODk4OCAyNS40M0M0Ljg1MDEyIDI2LjM5IDQuODcwMTEgMjcuNTMgNS40MTk4NyAyOC40OEM1Ljk2OTYyIDI5LjQzIDYuOTU5MTggMzAgOC4wNTg2OSAzMEgyNy45Mjk4QzI5LjAyOTMgMzAgMzAuMDA4OSAyOS40MyAzMC41Njg2IDI4LjQ4QzMxLjEyODQgMjcuNTMgMzEuMTM4''@;'; put 'put ''NCAyNi4zOSAzMC41OTg2IDI1LjQzWk0yOC44NDk0IDI3LjQ3QzI4Ljc1OTUgMjcuNjMgMjguNDc5NiAyOCAyNy45Mzk4IDI4SDguMDU4NjlDNy41MDg5NCAyOCA3LjIzOTA2IDI3LjYzIDcuMTQ5MSAyNy40N0M3LjA1OTE0IDI3LjMxIDYuODY5MjIgMjYuODkgNy4xNDkxIDI2LjQxTDE3LjA2''@;'; put 'put ''NDcgOC41NUMxNy4zMzQ2IDguMDYgMTcuODA0MyA4IDE3Ljk4NDMgOEMxOC4xNjQyIDggMTguNjM0IDguMDUgMTguOTAzOSA4LjU1TDI4LjgzOTQgMjYuNDFDMjkuMTA5MyAyNi44OSAyOC45MTk0IDI3LjMxIDI4LjgyOTQgMjcuNDdIMjguODQ5NFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMzAu''@;'; put 'put ''NTk4NiAyNS40M0wyMC42NjMxIDcuNTdDMjAuMTEzMyA2LjU5IDE5LjEyMzggNiAxNy45OTQzIDZDMTYuODY0OCA2IDE1Ljg3NTIgNi41OSAxNS4zMjU0IDcuNTdMNS4zODk4OCAyNS40M0M0Ljg1MDEyIDI2LjM5IDQuODcwMTEgMjcuNTMgNS40MTk4NyAyOC40OEM1Ljk2OTYyIDI5LjQzIDYu''@;'; put 'put ''OTU5MTggMzAgOC4wNTg2OSAzMEgyNy45Mjk4QzI5LjAyOTMgMzAgMzAuMDA4OSAyOS40MyAzMC41Njg2IDI4LjQ4QzMxLjEyODQgMjcuNTMgMzEuMTM4NCAyNi4zOSAzMC41OTg2IDI1LjQzWk0xNi43OTQ4IDEzLjVDMTYuNzk0OCAxMi44NCAxNy4zMzQ2IDEyLjMgMTcuOTk0MyAxMi4zQzE4''@;'; put 'put ''LjY1NCAxMi4zIDE5LjE5MzcgMTIuODQgMTkuMTkzNyAxMy41VjE5LjNDMTkuMTkzNyAxOS45NiAxOC42NTQgMjAuNSAxNy45OTQzIDIwLjVDMTcuMzM0NiAyMC41IDE2Ljc5NDggMTkuOTYgMTYuNzk0OCAxOS4zVjEzLjVaTTE4Ljk3MzggMjVDMTguODMzOSAyNS4xMyAxOC42ODQgMjUuMjMg''@;'; put 'put ''MTguNTI0IDI1LjNDMTguMzQ0MSAyNS4zNyAxOC4xNzQyIDI1LjQxIDE3Ljk5NDMgMjUuNDFDMTcuODE0MyAyNS40MSAxNy42MzQ0IDI1LjM4IDE3LjQ1NDUgMjUuM0MxNy4zMDQ2IDI1LjIzIDE3LjE1NDYgMjUuMTMgMTYuOTk0NyAyNC45OUMxNi43MzQ4IDI0LjcyIDE2LjU4NDkgMjQuMzcg''@;'; put 'put ''MTYuNTg0OSAyNEMxNi41ODQ5IDIzLjYzIDE2LjcyNDggMjMuMjkgMTYuOTk0NyAyM0MxNy4xMzQ2IDIyLjg3IDE3LjI4NDYgMjIuNzcgMTcuNDQ0NSAyMi43QzE3LjYxNDQgMjIuNjMgMTcuNzk0MyAyMi41OSAxNy45ODQzIDIyLjU5QzE4LjE3NDIgMjIuNTkgMTguMzU0MSAyMi42MyAxOC41''@;'; put 'put ''MjQgMjIuN0MxOC42NzQgMjIuNzcgMTguODIzOSAyMi44NyAxOC45NzM4IDIzQzE5LjA5MzggMjMuMTIgMTkuMjAzNyAyMy4yOCAxOS4yNzM3IDIzLjQ2QzE5LjM0MzcgMjMuNjQgMTkuMzgzNiAyMy44MSAxOS4zODM2IDIzLjk5QzE5LjM4MzYgMjQuMzUgMTkuMjQzNyAyNC43IDE4Ljk2Mzgg''@;'; put 'put ''MjQuOTlMMTguOTczOCAyNVoiLz4nfV0sWyJ0YWJsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0zMyAxOEMzMy41NSAxOCAzNCAxNy41NSAzNCAxN0MzNCAxNi40NSAzMy41NSAxNiAzMyAxNkgyOFY4SDMzQzMzLjU1IDggMzQgNy41NSAzNCA3QzM0IDYuNDUgMzMuNTUgNiAzMyA2SDhWM0M4IDIu''@;'; put 'put ''NDUgNy41NSAyIDcgMkM2LjQ1IDIgNiAyLjQ1IDYgM1Y2SDNDMi40NSA2IDIgNi40NSAyIDdDMiA3LjU1IDIuNDUgOCAzIDhINlYzM0M2IDMzLjU1IDYuNDUgMzQgNyAzNEM3LjU1IDM0IDggMzMuNTUgOCAzM1YyOEgxNlYzM0MxNiAzMy41NSAxNi40NSAzNCAxNyAzNEMxNy41NSAzNCAxOCAz''@;'; put 'put ''My41NSAxOCAzM1YyOEgyNlYzM0MyNiAzMy41NSAyNi40NSAzNCAyNyAzNEMyNy41NSAzNCAyOCAzMy41NSAyOCAzM1YyOEgzM0MzMy41NSAyOCAzNCAyNy41NSAzNCAyN0MzNCAyNi40NSAzMy41NSAyNiAzMyAyNkgyOFYxOEgzM1pNMTYgMjZIOFYxOEgxNlYyNlpNMTYgMTZIOFY4SDE2VjE2''@;'; put 'put ''Wk0yNiAyNkgxOFYxOEgyNlYyNlpNMjYgMTZIMThWOEgyNlYxNloiLz4nfV0sWyJ0cmFzaCIse291dGxpbmU6JzxwYXRoIGQ9Ik0yNy45OCAzMUMyOCAzMS4yNSAyNy45MiAzMS40OSAyNy43NiAzMS42OEMyNy42IDMxLjg3IDI3LjM3IDMxLjk4IDI3LjEyIDMySDguODVDOC42IDMxLjk4IDgu''@;'; put 'put ''MzcgMzEuODcgOC4yMSAzMS42OEM4LjA1IDMxLjQ5IDcuOTcgMzEuMjUgNy45OSAzMVYxMS4wM0g1Ljk3VjMxQzUuOTUgMzEuNzggNi4yNCAzMi41MyA2Ljc4IDMzLjA5QzcuMzIgMzMuNjUgOC4wNiAzMy45OCA4Ljg1IDM0SDI3LjEyQzI3LjkgMzMuOTggMjguNjUgMzMuNjYgMjkuMTkgMzMu''@;'; put 'put ''MDlDMjkuNzMgMzIuNTIgMzAuMDIgMzEuNzcgMzAgMzFWMTEuMDNIMjcuOThWMzFaTTEzIDEyLjk4VjI3Ljk4SDE1LjAyVjEyLjk4SDEzWk0xNSA0SDIxVjZIMjNWNEMyMyAyLjkgMjIuMSAyIDIxIDJIMTVDMTMuOSAyIDEzIDIuOSAxMyA0VjZIMTVWNFpNMzAuOTkgNi45OEg1LjAxQzQuNDUg''@;'; put 'put ''Ni45OCA0IDcuNDMgNCA3Ljk4QzQgOC41MyA0LjQ1IDguOTggNS4wMSA4Ljk4SDMwLjk5QzMxLjU1IDguOTggMzIgOC41MyAzMiA3Ljk4QzMyIDcuNDMgMzEuNTUgNi45OCAzMC45OSA2Ljk4Wk0yMC45OCAxMi45OFYyNy45OEgyM1YxMi45OEgyMC45OFoiLz4nLHNvbGlkOic8cGF0aCBkPSJN''@;'; put 'put ''MTUgNEgyMVY2SDIzVjRDMjMgMi45IDIyLjEgMiAyMSAySDE1QzEzLjkgMiAxMyAyLjkgMTMgNFY2SDE1VjRaTTMwLjk5IDYuOThINS4wMUM0LjQ1IDYuOTggNCA3LjQzIDQgNy45OEM0IDguNTMgNC40NSA4Ljk4IDUuMDEgOC45OEgzMC45OUMzMS41NSA4Ljk4IDMyIDguNTMgMzIgNy45OEMz''@;'; put 'put ''MiA3LjQzIDMxLjU1IDYuOTggMzAuOTkgNi45OFpNNS45NyAxMS4wM1YzMUM1Ljk1IDMxLjc4IDYuMjQgMzIuNTMgNi43OCAzMy4wOUM3LjMyIDMzLjY1IDguMDYgMzMuOTggOC44NSAzNEgyNy4xMkMyNy45IDMzLjk4IDI4LjY1IDMzLjY2IDI5LjE5IDMzLjA5QzI5LjczIDMyLjUyIDMwLjAy''@;'; put 'put ''IDMxLjc3IDMwIDMxVjExLjAzSDUuOTdaTTIwLjc5IDI4LjgyVjE1SDIzLjIxVjI5SDIwLjc5VjI4LjgyWk0xMi44MSAyOC44MlYxNUgxNS4yM1YyOUgxMi44MVYyOC44MloiLz4nfV0sWyJwcm9jZXNzLW9uLXZtIix7b3V0bGluZTonPHBhdGggZD0iTTEyIDE0LjUwMDFWMjQuNTAwMUMxMiAy''@;'; put 'put ''NS4wNTAxIDEyLjQ1IDI1LjUwMDEgMTMgMjUuNTAwMUgyM0MyMy41NSAyNS41MDAxIDI0IDI1LjA1MDEgMjQgMjQuNTAwMVYxNC41MDAxQzI0IDEzLjk1MDEgMjMuNTUgMTMuNTAwMSAyMyAxMy41MDAxSDEzQzEyLjQ1IDEzLjUwMDEgMTIgMTMuOTUwMSAxMiAxNC41MDAxWk0xNCAxNS41MDAx''@;'; put 'put ''SDIyVjIzLjUwMDFIMTRWMTUuNTAwMVpNNS4yNiAyMi4yODAxQzUuODEgMjIuMjAwMSA2LjE5IDIxLjcwMDEgNi4xMSAyMS4xNTAxQzYuMDMgMjAuNjEwMSA2IDIwLjA1MDEgNiAxOS40OTAxQzYgMTMuNDEwMSAxMC41NSA4LjM5MDA2IDE2LjQ3IDcuNjEwMDZMMTYuMjkgNy43OTAwNkMxNS45''@;'; put 'put ''IDguMTgwMDYgMTUuOSA4LjgxMDA2IDE2LjI5IDkuMjAwMDZDMTYuNDkgOS40MDAwNiAxNi43NCA5LjQ5MDA2IDE3IDkuNDkwMDZDMTcuMjYgOS40OTAwNiAxNy41MSA5LjM5MDA2IDE3LjcxIDkuMjAwMDZMMjAuNDIgNi40OTAwNkwxNy43MSAzLjc5MDA2QzE3LjMyIDMuNDAwMDYgMTYuNjkg''@;'; put 'put ''My40MDAwNiAxNi4zIDMuNzkwMDZDMTUuOTEgNC4xODAwNiAxNS45MSA0LjgxMDA2IDE2LjMgNS4yMDAwNkwxNi42NiA1LjU2MDA2QzkuNTYgNi4yNTAwNiA0IDEyLjIzMDEgNCAxOS41MDAxQzQgMjAuMTUwMSA0LjA0IDIwLjgwMDEgNC4xMyAyMS40MzAxQzQuMiAyMS45MzAxIDQuNjMgMjIu''@;'; put 'put ''MjkwMSA1LjEyIDIyLjI5MDFDNS4xNiAyMi4yOTAxIDUuMjEgMjIuMjkwMSA1LjI2IDIyLjI5MDFWMjIuMjgwMVpNMjMuNjcgMzAuMDcwMUMyMS45NCAzMS4wMDAxIDE5Ljk4IDMxLjQ5MDEgMTggMzEuNDkwMUMxNC4zIDMxLjQ5MDEgMTAuODMgMjkuNzYwMSA4LjU3IDI2LjkwMDFMOC44MyAy''@;'; put 'put ''Ni45NDAxQzkuMzggMjcuMDQwMSA5Ljg5IDI2LjY2MDEgOS45OCAyNi4xMjAxQzEwLjA3IDI1LjU4MDEgOS43IDI1LjA2MDEgOS4xNiAyNC45NzAxTDUuMzggMjQuMzQwMUw0Ljc1IDI4LjEyMDFDNC42NiAyOC42NjAxIDUuMDMgMjkuMTgwMSA1LjU3IDI5LjI3MDFDNS42MyAyOS4yNzAxIDUu''@;'; put 'put ''NjggMjkuMjgwMSA1Ljc0IDI5LjI4MDFDNi4yMiAyOS4yODAxIDYuNjQgMjguOTMwMSA2LjczIDI4LjQ1MDFMNi44MiAyNy45MjAxQzkuNDUgMzEuNDAwMSAxMy41OSAzMy41MDAxIDE4IDMzLjUwMDFDMjAuMzEgMzMuNTAwMSAyMi42IDMyLjkzMDEgMjQuNjIgMzEuODQwMUMyNS4xMSAzMS41''@;'; put 'put ''ODAxIDI1LjI5IDMwLjk3MDEgMjUuMDMgMzAuNDkwMUMyNC43NyAzMC4wMDAxIDI0LjE2IDI5LjgyMDEgMjMuNjggMzAuMDgwMUwyMy42NyAzMC4wNzAxWk0zMC4wOSAyNi44MzAxTDI5LjkgMjYuODYwMUMzMS4yNiAyNC42NjAxIDMyIDIyLjEyMDEgMzIgMTkuNDkwMUMzMiAxMy45MDAxIDI4''@;'; put 'put ''LjY4IDguODUwMDYgMjMuNTUgNi42MzAwNkMyMy4wNCA2LjQxMDA2IDIyLjQ2IDYuNjQwMDYgMjIuMjQgNy4xNTAwNkMyMi4wMiA3LjY2MDA2IDIyLjI1IDguMjUwMDYgMjIuNzYgOC40NjAwNkMyNy4xNiAxMC4zNjAxIDMwLjAxIDE0LjY5MDEgMzAuMDEgMTkuNDgwMUMzMC4wMSAyMS44MDAx''@;'; put 'put ''IDI5LjM0IDI0LjA0MDEgMjguMSAyNS45NjAxTDI3Ljk5IDI1LjMyMDFDMjcuOSAyNC43ODAxIDI3LjM5IDI0LjQwMDEgMjYuODQgMjQuNTAwMUMyNi4zIDI0LjU5MDEgMjUuOTMgMjUuMTAwMSAyNi4wMiAyNS42NTAxTDI2LjY0IDI5LjQzMDFMMzAuNDIgMjguODEwMUMzMC45NiAyOC43MjAx''@;'; put 'put ''IDMxLjMzIDI4LjIxMDEgMzEuMjQgMjcuNjYwMUMzMS4xNSAyNy4xMjAxIDMwLjY0IDI2Ljc0MDEgMzAuMDkgMjYuODQwMVYyNi44MzAxWiIvPid9XSk7bGV0IG1RZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQsVSx0ZSl7dGhpcy5hcHBTZXJ2aWNlPWEsdGhpcy5s''@;'; put 'put ''aWNlbmNlU2VydmljZT1kLHRoaXMucm91dGVyPWgsdGhpcy5yb3V0ZT1mLHRoaXMubG9jYXRpb249dix0aGlzLmV2ZW50U2VydmljZT1NLHRoaXMuYXBwU3RvcmVTZXJ2aWNlPUQsdGhpcy5jZHI9VSx0aGlzLmVsZW1lbnRSZWY9dGUsdGhpcy5saWNlbnNlRXhwaXJpbmdEYXlzPW51bGwsdGhp''@;'; put 'put ''cy5zYXNqc0Fib3J0cz1bXSx0aGlzLmVkaXRvckFjdGl2ZT0hMSx0aGlzLmFwcHJvdmVBY3RpdmU9ITEsdGhpcy5mcmVlVGllckJhbm5lcj10aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwRnJlZVRpZXIudmFsdWUsdGhpcy5saWNlbmNlUHJvYmxlbT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2Vu''@;'; put 'put ''Y2VQcm9ibGVtLHRoaXMuYXBwT3ZlckNhcGFjaXR5PSExLHRoaXMuYXBwQWN0aXZlPW51bGwsdGhpcy5yZXF1ZXN0c01vZGFsPSExLHRoaXMuc2hvd1JlZ2lzdHJhdGlvbj0hMCx0aGlzLnN0YXJ0dXBEYXRhTG9hZGVkPSExLHRoaXMuZGVtb0xpbWl0Tm90aWNlPXtvcGVuOiExLGZlYXR1cmVO''@;'; put 'put ''YW1lOiIifSx0aGlzLnN5c3NpdGU9dGhpcy5hcHBTZXJ2aWNlLnN5c3NpdGUsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5wYXJzZURjQWRhcHRlclNldHRpbmdzKCksd2luZG93LmFwcGluZm89KCk9Pntjb25zb2xlLnRhYmxlKHsiQWRh''@;'; put 'put ''cHRlciB2ZXJzaW9uIjoiNC4xNi4yIiwiQXBwIHZlcnNpb24iOiJ2Ny4yLjgiLnJlcGxhY2UoInYiLCIiKSwiQnVpbGQgdGltZXN0YW1wIjphaCgpKHBhcnNlSW50KCIxNzcwMzgyMzE2NzQ2IikpLmZvcm1hdCgiREQtTU1NLVlZWVkgSEg6TU0iKSwiLi4uIjoiLi4uIn0pfSx0aGlzLnN1YnNj''@;'; put 'put ''cmliZVRvTGljZW5zZUV2ZW50cygpLHRoaXMuY29tbWl0VmVyPSJ2Ny4yLjgiLnJlcGxhY2UoInYiLCIiKSsiLmc2YWMzZjY2IixoLmV2ZW50cy5zdWJzY3JpYmUob2U9PntpZih0aGlzLnJvdXRlVXJsPXRoaXMucm91dGVyLnVybCx0eXBlb2YgdGhpcy5yb3V0ZVVybDwidSImJnRoaXMucm91''@;'; put 'put ''dGVVcmwubGVuZ3RoPjQpe2xldCB2ZT10aGlzLnJvdXRlVXJsLnNwbGl0KCIvIilbMV07ImVkaXRvciI9PT12ZT8odGhpcy5lcnJUb3A9ITAsdGhpcy5lZGl0b3JBY3RpdmU9ITAsdGhpcy5hcHByb3ZlQWN0aXZlPSExKToiaG9tZSI9PT12ZT8odGhpcy5lcnJUb3A9ITEsdGhpcy5lZGl0b3JB''@;'; put 'put ''Y3RpdmU9ITAsdGhpcy5hcHByb3ZlQWN0aXZlPSExKToodGhpcy5lcnJUb3A9ITAsdGhpcy5lZGl0b3JBY3RpdmU9ITEpLFhuLnJvb3RQYXJhbT12ZX10eXBlb2YgdGhpcy5yb3V0ZVVybDwidSImJnRoaXMucm91dGVVcmwubGVuZ3RoPjYmJih0aGlzLmFwcHJvdmVBY3RpdmU9ISF0aGlzLnJv''@;'; put 'put ''dXRlVXJsLmluY2x1ZGVzKCJhcHByb3ZlRGV0Iil8fCEhdGhpcy5yb3V0ZVVybC5pbmNsdWRlcygidG9hcHByb3ZlIikpfSksdGhpcy5zdWJzY3JpYmVUb1Nob3dBYm9ydE1vZGFsKCksdGhpcy5zdWJzY3JpYmVUb1JlcXVlc3RzTW9kYWwoKSx0aGlzLnN1YnNjcmliZVRvU3RhcnR1cERhdGEo''@;'; put 'put ''KSx0aGlzLnN1YnNjcmliZVRvQXBwQWN0aXZlKCksdGhpcy5zdWJzY3JpYmVUb0RlbW9MaW1pdE1vZGFsKCksd2luZG93LmZyYW1lRWxlbWVudCYmKHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJzdHlsZSIsImhlaWdodDoxMDAlO3dpZHRoOjEwMCU7cG9zaXRpb246YWJzb2x1''@;'; put 'put ''dGUiKSx3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYWxsb3dmdWxsc2NyZWVuIiwiIiksd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoImZyYW1lYm9yZGVyIiwiMCIpLHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJtYXJnaW5oZWlnaHQiLCIwIiks''@;'; put 'put ''d2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoIm1hcmdpbndpZHRoIiwiMCIpLHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJzY3JvbGxpbmciLCJhdXRvIiksd2luZG93LmZvY3VzKCkpfXBhcnNlRGNBZGFwdGVyU2V0dGluZ3MoKXtjb25zdCBhPWRvY3VtZW50LnF1''@;'; put 'put ''ZXJ5U2VsZWN0b3IoInNhc2pzIik7aWYoIWEpcmV0dXJuIHRoaXMubGljZW5jZVNlcnZpY2UuZGVhY3RpdmF0ZUFwcCgpLHZvaWQgc2V0VGltZW91dCgoKT0+e3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIlBsZWFzZSBtYWtlIHN1cmUgJ1NBU0pTJyB0YWcgd2l0aCBj''@;'; put 'put ''b25maWcgYXR0cmlidXRlcyBpcyBhZGRlZCB0byBpbmRleC5odG1sIixudWxsLCJTQVNqcyBDb25maWcgbm90IGZvdW5kIil9KTtjb25zdCBkPWY9PmEuZ2V0QXR0cmlidXRlKGYpfHx2b2lkIDAsaD17c2VydmVyVXJsOmQoInNlcnZlclVybCIpfHwiIixhcHBMb2M6ZCgiYXBwTG9jIil8fCIi''@;'; put 'put ''LHNlcnZlclR5cGU6ZCgic2VydmVyVHlwZSIpLGxvZ2luTWVjaGFuaXNtOmQoImxvZ2luTWVjaGFuaXNtIil8fCIiLGFkbWluR3JvdXA6ZCgiYWRtaW5Hcm91cCIpfHwiIixkY1BhdGg6ZCgiZGNQYXRoIil8fCIiLGRlYnVnOiJ0cnVlIj09PWQoImRlYnVnIil8fCExLHVzZUNvbXB1dGVBcGk6''@;'; put 'put ''dGhpcy5wYXJzZUNvbXB1dGVBcGkoZCgidXNlQ29tcHV0ZUFwaSIpKSxjb250ZXh0TmFtZTpkKCJjb250ZXh0TmFtZSIpfHwiIixob3RMaWNlbmNlS2V5OmQoImhvdExpY2VuY2VLZXkiKXx8IiJ9O3RoaXMuZGNBZGFwdGVyU2V0dGluZ3M9aCx0aGlzLmFwcFN0b3JlU2VydmljZS5zZXREY0Fk''@;'; put 'put ''YXB0ZXJTZXR0aW5ncyhoKSx0aGlzLmFwcFNlcnZpY2Uuc2FzU2VydmljZUluaXQoKX1saWNlbmNlUHJvYmxlbURldGFpbHMoYSl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChhKX1wYXJzZUNvbXB1dGVBcGkoYSl7cmV0dXJuIHZvaWQgMD09PWF8fCJ1bmRlZmluZWQiPT09YXx8Im51bGwi''@;'; put 'put ''PT09YT9udWxsOiJ0cnVlIj09PWF8fCExfXN1YnNjcmliZVRvRGVtb0xpbWl0TW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vbkRlbW9MaW1pdE1vZGFsU2hvdy5zdWJzY3JpYmUoYT0+e3RoaXMuZGVtb0xpbWl0Tm90aWNlPXtvcGVuOiEwLGZlYXR1cmVOYW1lOmF9fSl9c3Vic2NyaWJlVG9M''@;'; put 'put ''aWNlbnNlRXZlbnRzKCl7dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEZyZWVUaWVyLnN1YnNjcmliZShhPT57dGhpcy5mcmVlVGllckJhbm5lcj1hfSksdGhpcy5saWNlbmNlU2VydmljZS5saWNlbnNlRXhwaXJlc0luRGF5cy5zdWJzY3JpYmUoYT0+e2EmJmE8PTE0JiYodGhpcy5saWNlbnNl''@;'; put 'put ''RXhwaXJpbmdEYXlzPWEpfSksdGhpcy5saWNlbmNlU2VydmljZS5pc0FwcE92ZXJDYXBhY2l0eS5zdWJzY3JpYmUoYT0+e3RoaXMuYXBwT3ZlckNhcGFjaXR5PWF9KX1zdWJzY3JpYmVUb0FwcEFjdGl2ZSgpe3RoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQuc3Vic2NyaWJlKGE9''@;'; put 'put ''Pnt0aGlzLmFwcEFjdGl2ZT1hfSl9c3Vic2NyaWJlVG9TaG93QWJvcnRNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9uU2hvd0Fib3J0TW9kYWwuc3Vic2NyaWJlKGE9PnthLmlkPXRoaXMuc2FzanNBYm9ydHMubGVuZ3RoKzEsdGhpcy5zYXNqc0Fib3J0cy5wdXNoKGEpLHRoaXMuY2RyLmRl''@;'; put 'put ''dGVjdENoYW5nZXMoKX0pfXN1YnNjcmliZVRvU3RhcnR1cERhdGEoKXt0aGlzLmV2ZW50U2VydmljZS5vblN0YXJ0dXBEYXRhTG9hZGVkLnN1YnNjcmliZSgoKT0+e3RoaXMuc3RhcnR1cERhdGFMb2FkZWQ9ITB9KX1zdWJzY3JpYmVUb1JlcXVlc3RzTW9kYWwoKXt0aGlzLmV2ZW50U2Vydmlj''@;'; put 'put ''ZS5vblJlcXVlc3RzTW9kYWxPcGVuLnN1YnNjcmliZShhPT57dGhpcy5yZXF1ZXN0c01vZGFsPSEwfSl9Y2xvc2VBYm9ydE1vZGFsKGEpe2xldCBkPXRoaXMuc2FzanNBYm9ydHMuZmluZEluZGV4KGg9PmguaWQ9PT1hKTt0aGlzLnNhc2pzQWJvcnRzLnNwbGljZShkLDEpfXRvZ2dsZVNpZGVi''@;'; put 'put ''YXIoKXt0aGlzLmV2ZW50U2VydmljZS50b2dnbGVTaWRlYmFyKCl9aXNNYWluUm91dGUoYSl7cmV0dXJuIHRoaXMucm91dGVyLnVybC5pbmNsdWRlcyhhKX1vcGVuTGljZW5jaW5nUGFnZSgpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9saWNlbnNpbmcvdXBkYXRlIil9c3RhdGlje3Ro''@;'; put 'put ''aXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUod0YpLHFlKE8xKSxxZShubCkscWUodDApLHFlKHMyKSxxZShFYykscWUodTkpLHFlKEhzKSxxZShuYSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1sibXktYXBwIl1dLHN0''@;'; put 'put ''YW5kYWxvbmU6ITEsZGVjbHM6MjYsdmFyczoxNyxjb25zdHM6W1sxLCJtYWluLWNvbnRhaW5lciJdLFs0LCJuZ0lmIl0sWzEsImFwcC1oZWFkZXIiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImN1cnNvci1wb2ludGVyIHNlbGVjdC1ub25lIG1sLTEwIGQtZmxleCBjbHItanVzdGlmeS1j''@;'; put 'put ''b250ZW50LWNlbnRlciBjbHItYWxpZ24taXRlbXMtY2VudGVyIiwzLCJjbGljayIsNCwibmdJZiJdLFsxLCJsb2dvIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsiaHJlZiIsIiMiLCJjbGFzcyIsIm5hdi1saW5rIiwzLCJyb3V0ZXJMaW5rIiw0LCJuZ0lmIl0sWyJjbGFz''@;'; put 'put ''cyIsInN1Ym5hdiIsNCwibmdJZiJdLFszLCJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiXSxbMywiZGF0YSIsImZvcmNlUmVsb2FkIiwib25Db25maXJtTW9kYWxDbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJhcHBEcmFnTmRyb3AiLCIiLDEsInBvc2l0aW9uLXJlbGF0aXZlIiwzLCJjbHJN''@;'; put 'put ''b2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xyTW9kYWxTaXplIl0sWzEsIm1vZGFsLXRpdGxlIl0sWyJzaXplIiwiMjAiLCJzaGFwZSIsImxvY2siXSxbMSwibW9kYWwtYm9keSJdLFsiY2xhc3MiLCJhcHAtbG9hZGluZyIsNCwibmdJZiJdLFsi''@;'; put 'put ''Y2xhc3MiLCJhbGVydCBhbGVydC1hcHAtbGV2ZWwgYWxlcnQtd2FybmluZyIsImlkIiwiZGVtby1iYW5uZXIiLCJyb2xlIiwiYWxlcnQiLDQsIm5nSWYiXSxbImNsYXNzIiwiYWxlcnQgYWxlcnQtYXBwLWxldmVsIGFsZXJ0LWRhbmdlciIsImlkIiwiZGVtby1iYW5uZXIiLCJyb2xlIiwiYWxl''@;'; put 'put ''cnQiLDQsIm5nSWYiXSxbImlkIiwiZGVtby1iYW5uZXIiLCJyb2xlIiwiYWxlcnQiLDEsImFsZXJ0IiwiYWxlcnQtYXBwLWxldmVsIiwiYWxlcnQtd2FybmluZyJdLFsxLCJhbGVydC1pdGVtcyJdLFsxLCJhbGVydC1pdGVtIiwic3RhdGljIl0sWzEsImFsZXJ0LWljb24td3JhcHBlciJdLFsi''@;'; put 'put ''c2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwxLCJhbGVydC1pY29uIl0sWzEsImFsZXJ0LXRleHQiXSxbImNsYXNzZXMiLCJjb2xvci13aGl0ZSJdLFsicm91dGVyTGluayIsIi9saWNlbnNpbmcvdXBkYXRlIiwxLCJ1cGRhdGUta2V5Il0sWzEsInVwZGF0ZS1rZXkiLCJjdXJzb3ItcG9pbnRl''@;'; put 'put ''ciIsMywiY2xpY2siXSxbImlkIiwiZGVtby1iYW5uZXIiLCJyb2xlIiwiYWxlcnQiLDEsImFsZXJ0IiwiYWxlcnQtYXBwLWxldmVsIiwiYWxlcnQtZGFuZ2VyIl0sWyJyb3V0ZXJMaW5rIiwiL2xpY2Vuc2luZy91cGRhdGUiLCJjbGFzcyIsInVwZGF0ZS1rZXkiLDQsIm5nSWYiXSxbInR5cGUi''@;'; put 'put ''LCJidXR0b24iLDEsImN1cnNvci1wb2ludGVyIiwic2VsZWN0LW5vbmUiLCJtbC0xMCIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsMywiY2xpY2siXSxbInNpemUiLCIyNCIsInNoYXBlIiwidHJlZS12aWV3Il0sWyJocmVm''@;'; put 'put ''IiwiIyIsMSwibmF2LWxpbmsiLDMsInJvdXRlckxpbmsiXSxbInNyYyIsIi9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9pbWFnZXMvZGMtbG9nby1zdmciLCJhbHQiLCJkYXRhY29udHJvbGxlciBsb2dvIHdpdGhvdXQgdGV4dCIsMSwi''@;'; put 'put ''d2l0aG91dC10ZXh0IiwiZC1ibG9jayIsImQtbWQtbm9uZSJdLFsic3JjIiwiL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2ltYWdlcy9kYXRhY29udHJvbGxlci1zdmciLCJhbHQiLCJkYXRhY29udHJvbGxlciBsb2dvIiwxLCJ3aXRo''@;'; put 'put ''LXRleHQiLCJkLW5vbmUiLCJkLW1kLWJsb2NrIl0sWzEsImNsci1pY29uIiwiaGVhZGVyLWxvZ28iLCJtbC0xMCJdLFsxLCJoZWFkZXItbmF2IiwiZC1mbGV4IiwiZC1zbS1ub25lIl0sWyJjbHJEcm9wZG93blRyaWdnZXIiLCIiLCJhcmlhLWxhYmVsIiwidG9nZ2xlIHNldHRpbmdzIG1lbnUi''@;'; put 'put ''LDEsIm5hdi1pY29uIiwiY29sb3Itd2hpdGUtaSJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsNCwiY2xySWZPcGVuIl0sWzEsImhlYWRlci1uYXYiLCJkLW5vbmUiLCJkLXNtLWZsZXgiXSxbInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDEsIm5hdi1saW5rIiwibmF2LXRleHQi''@;'; put 'put ''LDMsInJvdXRlckxpbmsiXSxbMSwibmF2LWxpbmsiLCJuYXYtdGV4dCIsMywicm91dGVyTGluayJdLFsxLCJuYXYtbGluayIsIm5hdi10ZXh0IiwiY3Vyc29yLXBvaW50ZXIiLDMsInJvdXRlckxpbmsiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiXSxbImNsckRyb3Bkb3duSXRlbSIs''@;'; put 'put ''IiIsMywicm91dGVyTGluayJdLFsxLCJzdWJuYXYiXSxbMSwibmF2Il0sWzEsIm5hdi1pdGVtIl0sWzMsIm9uQ29uZmlybU1vZGFsQ2xpY2siLCJkYXRhIiwiZm9yY2VSZWxvYWQiXSxbMSwiYXBwLWxvYWRpbmciXSxbInNyYyIsIi9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5''@;'; put 'put ''NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9pbWFnZXMvZGF0YWNvbnRyb2xsZXItc3ZnIiwiYWx0IiwiZGF0YWNvbnRyb2xsZXIgbG9nbyIsMSwibG9hZGluZy1sb2dvIl0sWyJjbGFzcyIsInNsaWRlciIsNCwibmdJZiJdLFsxLCJzbGlkZXIiXSxbMSwibGluZSJdLFsxLCJzdWJsaW5lIiwiaW5j''@;'; put 'put ''Il0sWzEsInN1YmxpbmUiLCJkZWMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDApLGd0KDEsclFlLDQsMywibmctY29udGFpbmVyIiwxKSxkZSgyLCJoZWFkZXIiLDIpLGd0KDMsaVFlLDIsMCwiZGl2IiwzKSxkZSg0LCJkaXYiLDQpLGd0KDUsYVFlLDMsMiwi''@;'; put 'put ''YSIsNSkoNixvUWUsMiwwLCJhIiwxKSxoZSgpLGd0KDcsbFFlLDEzLDEwLCJuZy1jb250YWluZXIiLDEpLEd0KDgsImFwcC1oZWFkZXItYWN0aW9ucyIpLGhlKCksZ3QoOSxjUWUsMTEsOCwibmF2Iiw2KSgxMCx1UWUsMSwwLCJhcHAtYWxlcnRzIiwxKSxkZSgxMSwiYXBwLXJlcXVlc3RzLW1v''@;'; put 'put ''ZGFsIiw3KSxjaSgib3BlbmVkQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gZmkoaC5yZXF1ZXN0c01vZGFsLHYpfHwoaC5yZXF1ZXN0c01vZGFsPXYpLHZ9KSxoZSgpLEd0KDEyLCJhcHAtZXhjZWwtcGFzc3dvcmQtbW9kYWwiKSxndCgxMyxkUWUsMSwwLCJyb3V0ZXItb3V0bGV0IiwxKSxH''@;'; put 'put ''dCgxNCwiYXBwLWxvZ2luIiksZ3QoMTUsaFFlLDEsMCwiYXBwLWFsZXJ0cyIsMSkoMTYsZlFlLDEsMiwiYXBwLWluZm8tbW9kYWwiLDgpLGRlKDE3LCJjbHItbW9kYWwiLDkpLGNpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBmaShoLmRlbW9MaW1pdE5vdGljZS5v''@;'; put 'put ''cGVuLHYpfHwoaC5kZW1vTGltaXROb3RpY2Uub3Blbj12KSx2fSksZGUoMTgsImgzIiwxMCksUGUoMTkpLEd0KDIwLCJjbHItaWNvbiIsMTEpLGhlKCksZGUoMjEsImRpdiIsMTIpLFBlKDIyLCIgQ29udGFjdCAiKSxHdCgyMywiY29udGFjdC1saW5rIiksUGUoMjQpLGhlKCkoKSgpLGd0KDI1''@;'; put 'put ''LGdRZSwzLDEsImRpdiIsMTMpKSwyJmQmJihmZSgpLEVlKCJuZ0lmIiwhaC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJsaWNlbnNpbmciKSksZmUoMiksRWUoIm5nSWYiLGguaXNNYWluUm91dGUoInZpZXciKXx8aC5pc01haW5Sb3V0ZSgiaG9tZSIpJiYhaC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJs''@;'; put 'put ''aWNlbnNpbmciKSksZmUoMiksRWUoIm5nSWYiLCFoLnJvdXRlci51cmwuaW5jbHVkZXMoImRlcGxveSIpKSxmZSgpLEVlKCJuZ0lmIixoLnJvdXRlci51cmwuaW5jbHVkZXMoImRlcGxveSIpKSxmZSgpLEVlKCJuZ0lmIiwhaC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJkZXBsb3kiKSYmIWgucm91''@;'; put 'put ''dGVyLnVybC5pbmNsdWRlcygibGljZW5zaW5nIikpLGZlKDIpLEVlKCJuZ0lmIixoLnJvdXRlci51cmwuaW5jbHVkZXMoInN1Ym1pdHRlZCIpfHxoLnJvdXRlci51cmwuaW5jbHVkZXMoImFwcHJvdmUiKXx8aC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJoaXN0b3J5IikpLGZlKCksRWUoIm5nSWYi''@;'; put 'put ''LCFoLmVyclRvcCksZmUoKSxsaSgib3BlbmVkIixoLnJlcXVlc3RzTW9kYWwpLGZlKDIpLEVlKCJuZ0lmIixoLnN0YXJ0dXBEYXRhTG9hZGVkKSxmZSgyKSxFZSgibmdJZiIsaC5lcnJUb3ApLGZlKCksRWUoIm5nRm9yT2YiLGguc2FzanNBYm9ydHMpLGZlKCksbGkoImNsck1vZGFsT3BlbiIs''@;'; put 'put ''aC5kZW1vTGltaXROb3RpY2Uub3BlbiksRWUoImNsck1vZGFsQ2xvc2FibGUiLCEwKSgiY2xyTW9kYWxTaXplIiwibGciKSxmZSgyKSxJcigiIExvY2tlZCBGZWF0dXJlICgiLGguZGVtb0xpbWl0Tm90aWNlLmZlYXR1cmVOYW1lLCIpICIpLGZlKDUpLElyKCIgd2l0aCB5b3VyIHNpdGUgaWQg''@;'; put 'put ''KCIsaC5zeXNzaXRlLnZhbHVlLCIpIHRvIGFjdGl2YXRlISAiKSxmZSgpLEVlKCJuZ0lmIiwhaC5zdGFydHVwRGF0YUxvYWRlZCkpfSxkZXBlbmRlbmNpZXM6W2hzLENhLFFnLFAxLEpfLFVxZSxpSmUsc0plLFJILHVKZSx5QSxVbCxmcyxidSxyMCxJZixyNSxUOSxBOSxmdyxfQSxISmUsWUpl''@;'; put 'put ''XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIEhwZShjKXtyZXR1cm4gbmV3IFByKDNlMywhMSl9ZnVuY3Rpb24gQzYoYyl7c3dpdGNoKGMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyBOVDtjYXNlIDE6cmV0dXJuIGNbMF07ZGVmYXVsdDpyZXR1cm4gbmV3IHJm''@;'; put 'put ''ZShjKX19ZnVuY3Rpb24gTnBlKGMsbCxhPW5ldyBNYXAsZD1uZXcgTWFwKXtjb25zdCBoPVtdLGY9W107bGV0IHY9LTEsTT1udWxsO2lmKGwuZm9yRWFjaChEPT57Y29uc3QgVT1ELmdldCgib2Zmc2V0IiksdGU9VT09dixvZT10ZSYmTXx8bmV3IE1hcDtELmZvckVhY2goKHZlLHdlKT0+e2xl''@;'; put 'put ''dCBGZT13ZSxXZT12ZTtpZigib2Zmc2V0IiE9PXdlKXN3aXRjaChGZT1jLm5vcm1hbGl6ZVByb3BlcnR5TmFtZShGZSxoKSxXZSl7Y2FzZSIhIjpXZT1hLmdldCh3ZSk7YnJlYWs7Y2FzZSBlNTpXZT1kLmdldCh3ZSk7YnJlYWs7ZGVmYXVsdDpXZT1jLm5vcm1hbGl6ZVN0eWxlVmFsdWUod2Us''@;'; put 'put ''RmUsV2UsaCl9b2Uuc2V0KEZlLFdlKX0pLHRlfHxmLnB1c2gob2UpLE09b2Usdj1VfSksaC5sZW5ndGgpdGhyb3cgZnVuY3Rpb24gSFFlKCl7cmV0dXJuIG5ldyBQcigzNTAyLCExKX0oKTtyZXR1cm4gZn1mdW5jdGlvbiBucShjLGwsYSxkKXtzd2l0Y2gobCl7Y2FzZSJzdGFydCI6Yy5vblN0''@;'; put 'put ''YXJ0KCgpPT5kKGEmJnJxKGEsInN0YXJ0IixjKSkpO2JyZWFrO2Nhc2UiZG9uZSI6Yy5vbkRvbmUoKCk9PmQoYSYmcnEoYSwiZG9uZSIsYykpKTticmVhaztjYXNlImRlc3Ryb3kiOmMub25EZXN0cm95KCgpPT5kKGEmJnJxKGEsImRlc3Ryb3kiLGMpKSl9fWZ1bmN0aW9uIHJxKGMsbCxhKXtj''@;'; put 'put ''b25zdCBmPWlxKGMuZWxlbWVudCxjLnRyaWdnZXJOYW1lLGMuZnJvbVN0YXRlLGMudG9TdGF0ZSxsfHxjLnBoYXNlTmFtZSxhLnRvdGFsVGltZT8/Yy50b3RhbFRpbWUsISFhLmRpc2FibGVkKSx2PWMuX2RhdGE7cmV0dXJuIG51bGwhPXYmJihmLl9kYXRhPXYpLGZ9ZnVuY3Rpb24gaXEoYyxs''@;'; put 'put ''LGEsZCxoPSIiLGY9MCx2KXtyZXR1cm57ZWxlbWVudDpjLHRyaWdnZXJOYW1lOmwsZnJvbVN0YXRlOmEsdG9TdGF0ZTpkLHBoYXNlTmFtZTpoLHRvdGFsVGltZTpmLGRpc2FibGVkOiEhdn19ZnVuY3Rpb24gQzIoYyxsLGEpe2xldCBkPWMuZ2V0KGwpO3JldHVybiBkfHxjLnNldChsLGQ9YSks''@;'; put 'put ''ZH1mdW5jdGlvbiBWcGUoYyl7Y29uc3QgbD1jLmluZGV4T2YoIjoiKTtyZXR1cm5bYy5zdWJzdHJpbmcoMSxsKSxjLnNsaWNlKGwrMSldfWNvbnN0IEtRZT10eXBlb2YgZG9jdW1lbnQ+InUiP251bGw6ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O2Z1bmN0aW9uIGFxKGMpe2NvbnN0IGw9Yy5w''@;'; put 'put ''YXJlbnROb2RlfHxjLmhvc3R8fG51bGw7cmV0dXJuIGw9PT1LUWU/bnVsbDpsfWxldCBHOT1udWxsLEJwZT0hMTtmdW5jdGlvbiBqcGUoYyxsKXtmb3IoO2w7KXtpZihsPT09YylyZXR1cm4hMDtsPWFxKGwpfXJldHVybiExfWZ1bmN0aW9uIHpwZShjLGwsYSl7aWYoYSlyZXR1cm4gQXJyYXku''@;'; put 'put ''ZnJvbShjLnF1ZXJ5U2VsZWN0b3JBbGwobCkpO2NvbnN0IGQ9Yy5xdWVyeVNlbGVjdG9yKGwpO3JldHVybiBkP1tkXTpbXX1jb25zdCBvcT0ibmctbGVhdmUiLExIPSJuZy10cmlnZ2VyIixPSD0iLm5nLXRyaWdnZXIiLFdwZT0ibmctYW5pbWF0aW5nIixzcT0iLm5nLWFuaW1hdGluZyI7ZnVu''@;'; put 'put ''Y3Rpb24gZDUoYyl7aWYoIm51bWJlciI9PXR5cGVvZiBjKXJldHVybiBjO2NvbnN0IGw9Yy5tYXRjaCgvXigtP1tcLlxkXSspKG0/cykvKTtyZXR1cm4hbHx8bC5sZW5ndGg8Mj8wOmxxKHBhcnNlRmxvYXQobFsxXSksbFsyXSl9ZnVuY3Rpb24gbHEoYyxsKXtyZXR1cm4icyI9PT1sPzFlMypj''@;'; put 'put ''OmN9ZnVuY3Rpb24gUEgoYyxsLGEpe3JldHVybiBjLmhhc093blByb3BlcnR5KCJkdXJhdGlvbiIpP2M6ZnVuY3Rpb24gdGV0KGMsbCxhKXtsZXQgaCxmPTAsdj0iIjtpZigic3RyaW5nIj09dHlwZW9mIGMpe2NvbnN0IE09Yy5tYXRjaCgvXigtP1tcLlxkXSspKG0/cykoPzpccysoLT9bXC5c''@;'; put 'put ''ZF0rKShtP3MpKT8oPzpccysoWy1hLXpdKyg/OlwoLis/XCkpPykpPyQvaSk7aWYobnVsbD09PU0pcmV0dXJuIGwucHVzaChIcGUoKSkse2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6IiJ9O2g9bHEocGFyc2VGbG9hdChNWzFdKSxNWzJdKTtjb25zdCBEPU1bM107bnVsbCE9RCYmKGY9bHEo''@;'; put 'put ''cGFyc2VGbG9hdChEKSxNWzRdKSk7Y29uc3QgVT1NWzVdO1UmJih2PVUpfWVsc2UgaD1jO2lmKCFhKXtsZXQgTT0hMSxEPWwubGVuZ3RoO2g8MCYmKGwucHVzaChmdW5jdGlvbiB2UWUoKXtyZXR1cm4gbmV3IFByKDMxMDAsITEpfSgpKSxNPSEwKSxmPDAmJihsLnB1c2goZnVuY3Rpb24geVFl''@;'; put 'put ''KCl7cmV0dXJuIG5ldyBQcigzMTAxLCExKX0oKSksTT0hMCksTSYmbC5zcGxpY2UoRCwwLEhwZSgpKX1yZXR1cm57ZHVyYXRpb246aCxkZWxheTpmLGVhc2luZzp2fX0oYyxsLGEpfWZ1bmN0aW9uIF80KGMsbCxhKXtsLmZvckVhY2goKGQsaCk9Pntjb25zdCBmPXVxKGgpO2EmJiFhLmhhcyho''@;'; put 'put ''KSYmYS5zZXQoaCxjLnN0eWxlW2ZdKSxjLnN0eWxlW2ZdPWR9KX1mdW5jdGlvbiAkOShjLGwpe2wuZm9yRWFjaCgoYSxkKT0+e2NvbnN0IGg9dXEoZCk7Yy5zdHlsZVtoXT0iIn0pfWZ1bmN0aW9uIHdBKGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpPzE9PWMubGVuZ3RoP2NbMF06ZnVuY3Rp''@;'; put 'put ''b24gUWplKGMsbD1udWxsKXtyZXR1cm57dHlwZTpCby5TZXF1ZW5jZSxzdGVwczpjLG9wdGlvbnM6bH19KGMpOmN9Y29uc3QgY3E9bmV3IFJlZ0V4cCgie3tcXHMqKC4rPylcXHMqfX0iLCJnIik7ZnVuY3Rpb24gWXBlKGMpe2xldCBsPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgYyl7bGV0IGE7''@;'; put 'put ''Zm9yKDthPWNxLmV4ZWMoYyk7KWwucHVzaChhWzFdKTtjcS5sYXN0SW5kZXg9MH1yZXR1cm4gbH1mdW5jdGlvbiBDQShjLGwsYSl7Y29uc3QgZD1gJHtjfWAsaD1kLnJlcGxhY2UoY3EsKGYsdik9PntsZXQgTT1sW3ZdO3JldHVybiBudWxsPT1NJiYoYS5wdXNoKGZ1bmN0aW9uIF9RZSgpe3Jl''@;'; put 'put ''dHVybiBuZXcgUHIoMzAwMywhMSl9KCkpLE09IiIpLE0udG9TdHJpbmcoKX0pO3JldHVybiBoPT1kP2M6aH1jb25zdCBpZXQ9Ly0rKFthLXowLTldKS9nO2Z1bmN0aW9uIHVxKGMpe3JldHVybiBjLnJlcGxhY2UoaWV0LCguLi5sKT0+bFsxXS50b1VwcGVyQ2FzZSgpKX1mdW5jdGlvbiBTMihj''@;'; put 'put ''LGwsYSl7c3dpdGNoKGwudHlwZSl7Y2FzZSBCby5UcmlnZ2VyOnJldHVybiBjLnZpc2l0VHJpZ2dlcihsLGEpO2Nhc2UgQm8uU3RhdGU6cmV0dXJuIGMudmlzaXRTdGF0ZShsLGEpO2Nhc2UgQm8uVHJhbnNpdGlvbjpyZXR1cm4gYy52aXNpdFRyYW5zaXRpb24obCxhKTtjYXNlIEJvLlNlcXVl''@;'; put 'put ''bmNlOnJldHVybiBjLnZpc2l0U2VxdWVuY2UobCxhKTtjYXNlIEJvLkdyb3VwOnJldHVybiBjLnZpc2l0R3JvdXAobCxhKTtjYXNlIEJvLkFuaW1hdGU6cmV0dXJuIGMudmlzaXRBbmltYXRlKGwsYSk7Y2FzZSBCby5LZXlmcmFtZXM6cmV0dXJuIGMudmlzaXRLZXlmcmFtZXMobCxhKTtjYXNl''@;'; put 'put ''IEJvLlN0eWxlOnJldHVybiBjLnZpc2l0U3R5bGUobCxhKTtjYXNlIEJvLlJlZmVyZW5jZTpyZXR1cm4gYy52aXNpdFJlZmVyZW5jZShsLGEpO2Nhc2UgQm8uQW5pbWF0ZUNoaWxkOnJldHVybiBjLnZpc2l0QW5pbWF0ZUNoaWxkKGwsYSk7Y2FzZSBCby5BbmltYXRlUmVmOnJldHVybiBjLnZp''@;'; put 'put ''c2l0QW5pbWF0ZVJlZihsLGEpO2Nhc2UgQm8uUXVlcnk6cmV0dXJuIGMudmlzaXRRdWVyeShsLGEpO2Nhc2UgQm8uU3RhZ2dlcjpyZXR1cm4gYy52aXNpdFN0YWdnZXIobCxhKTtkZWZhdWx0OnRocm93IGZ1bmN0aW9uIHdRZSgpe3JldHVybiBuZXcgUHIoMzAwNCwhMSl9KCl9fWZ1bmN0aW9u''@;'; put 'put ''IGRxKGMsbCl7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGMpW2xdfWxldCBocT0oKCk9PntjbGFzcyBje3ZhbGlkYXRlU3R5bGVQcm9wZXJ0eShhKXtyZXR1cm4gZnVuY3Rpb24gcVFlKGMpe0c5fHwoRzk9ZnVuY3Rpb24gSlFlKCl7cmV0dXJuIHR5cGVvZiBkb2N1bWVudDwidSI/''@;'; put 'put ''ZG9jdW1lbnQuYm9keTpudWxsfSgpfHx7fSxCcGU9ISFHOS5zdHlsZSYmIldlYmtpdEFwcGVhcmFuY2UiaW4gRzkuc3R5bGUpO2xldCBsPSEwO3JldHVybiBHOS5zdHlsZSYmIWZ1bmN0aW9uIFhRZShjKXtyZXR1cm4iZWJraXQiPT1jLnN1YnN0cmluZygxLDYpfShjKSYmKGw9YyBpbiBHOS5z''@;'; put 'put ''dHlsZSwhbCYmQnBlJiYobD0iV2Via2l0IitjLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Muc2xpY2UoMSlpbiBHOS5zdHlsZSkpLGx9KGEpfWNvbnRhaW5zRWxlbWVudChhLGQpe3JldHVybiBqcGUoYSxkKX1nZXRQYXJlbnRFbGVtZW50KGEpe3JldHVybiBhcShhKX1xdWVyeShhLGQsaCl7''@;'; put 'put ''cmV0dXJuIHpwZShhLGQsaCl9Y29tcHV0ZVN0eWxlKGEsZCxoKXtyZXR1cm4gaHx8IiJ9YW5pbWF0ZShhLGQsaCxmLHYsTT1bXSxEKXtyZXR1cm4gbmV3IE5UKGgsZil9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1cHJvdj1mcih7''@;'; put 'put ''dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9cmV0dXJuIGN9KSgpO2NsYXNzIGZxe3N0YXRpYyBOT09QPW5ldyBocX1jbGFzcyBwcXt9Y29uc3QgY2V0PW5ldyBTZXQoWyJ3aWR0aCIsImhlaWdodCIsIm1pbldpZHRoIiwibWluSGVpZ2h0IiwibWF4V2lkdGgiLCJtYXhIZWlnaHQiLCJs''@;'; put 'put ''ZWZ0IiwidG9wIiwiYm90dG9tIiwicmlnaHQiLCJmb250U2l6ZSIsIm91dGxpbmVXaWR0aCIsIm91dGxpbmVPZmZzZXQiLCJwYWRkaW5nVG9wIiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nQm90dG9tIiwicGFkZGluZ1JpZ2h0IiwibWFyZ2luVG9wIiwibWFyZ2luTGVmdCIsIm1hcmdpbkJvdHRv''@;'; put 'put ''bSIsIm1hcmdpblJpZ2h0IiwiYm9yZGVyUmFkaXVzIiwiYm9yZGVyV2lkdGgiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlckxlZnRXaWR0aCIsImJvcmRlclJpZ2h0V2lkdGgiLCJib3JkZXJCb3R0b21XaWR0aCIsInRleHRJbmRlbnQiLCJwZXJzcGVjdGl2ZSJdKTtjbGFzcyBHcGUgZXh0ZW5k''@;'; put 'put ''cyBwcXtub3JtYWxpemVQcm9wZXJ0eU5hbWUobCxhKXtyZXR1cm4gdXEobCl9bm9ybWFsaXplU3R5bGVWYWx1ZShsLGEsZCxoKXtsZXQgZj0iIjtjb25zdCB2PWQudG9TdHJpbmcoKS50cmltKCk7aWYoY2V0LmhhcyhhKSYmMCE9PWQmJiIwIiE9PWQpaWYoIm51bWJlciI9PXR5cGVvZiBkKWY9''@;'; put 'put ''InB4IjtlbHNle2NvbnN0IE09ZC5tYXRjaCgvXlsrLV0/W1xkXC5dKyhbYS16XSopJC8pO00mJjA9PU1bMV0ubGVuZ3RoJiZoLnB1c2goZnVuY3Rpb24gQ1FlKCl7cmV0dXJuIG5ldyBQcigzMDA1LCExKX0oKSl9cmV0dXJuIHYrZn19Y29uc3QgSEg9bmV3IFNldChbInRydWUiLCIxIl0pLE5I''@;'; put 'put ''PW5ldyBTZXQoWyJmYWxzZSIsIjAiXSk7ZnVuY3Rpb24gJHBlKGMsbCl7Y29uc3QgYT1ISC5oYXMoYyl8fE5ILmhhcyhjKSxkPUhILmhhcyhsKXx8TkguaGFzKGwpO3JldHVybihoLGYpPT57bGV0IHY9IioiPT1jfHxjPT1oLE09IioiPT1sfHxsPT1mO3JldHVybiF2JiZhJiYiYm9vbGVhbiI9''@;'; put 'put ''PXR5cGVvZiBoJiYodj1oP0hILmhhcyhjKTpOSC5oYXMoYykpLCFNJiZkJiYiYm9vbGVhbiI9PXR5cGVvZiBmJiYoTT1mP0hILmhhcyhsKTpOSC5oYXMobCkpLHYmJk19fWNvbnN0IGZldD1uZXcgUmVnRXhwKCJzKjpzZWxmcyosPyIsImciKTtmdW5jdGlvbiBtcShjLGwsYSxkKXtyZXR1cm4g''@;'; put 'put ''bmV3IHBldChjKS5idWlsZChsLGEsZCl9Y2xhc3MgcGV0e19kcml2ZXI7Y29uc3RydWN0b3IobCl7dGhpcy5fZHJpdmVyPWx9YnVpbGQobCxhLGQpe2NvbnN0IGg9bmV3IHZldChhKTtyZXR1cm4gdGhpcy5fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShoKSxTMih0aGlzLHdBKGwpLGgp''@;'; put 'put ''fV9yZXNldENvbnRleHRTdHlsZVRpbWluZ1N0YXRlKGwpe2wuY3VycmVudFF1ZXJ5U2VsZWN0b3I9IiIsbC5jb2xsZWN0ZWRTdHlsZXM9bmV3IE1hcCxsLmNvbGxlY3RlZFN0eWxlcy5zZXQoIiIsbmV3IE1hcCksbC5jdXJyZW50VGltZT0wfXZpc2l0VHJpZ2dlcihsLGEpe2xldCBkPWEucXVl''@;'; put 'put ''cnlDb3VudD0wLGg9YS5kZXBDb3VudD0wO2NvbnN0IGY9W10sdj1bXTtyZXR1cm4iQCI9PWwubmFtZS5jaGFyQXQoMCkmJmEuZXJyb3JzLnB1c2goZnVuY3Rpb24gU1FlKCl7cmV0dXJuIG5ldyBQcigzMDA2LCExKX0oKSksbC5kZWZpbml0aW9ucy5mb3JFYWNoKE09PntpZih0aGlzLl9yZXNl''@;'; put 'put ''dENvbnRleHRTdHlsZVRpbWluZ1N0YXRlKGEpLE0udHlwZT09Qm8uU3RhdGUpe2NvbnN0IEQ9TSxVPUQubmFtZTtVLnRvU3RyaW5nKCkuc3BsaXQoL1xzKixccyovKS5mb3JFYWNoKHRlPT57RC5uYW1lPXRlLGYucHVzaCh0aGlzLnZpc2l0U3RhdGUoRCxhKSl9KSxELm5hbWU9VX1lbHNlIGlm''@;'; put 'put ''KE0udHlwZT09Qm8uVHJhbnNpdGlvbil7Y29uc3QgRD10aGlzLnZpc2l0VHJhbnNpdGlvbihNLGEpO2QrPUQucXVlcnlDb3VudCxoKz1ELmRlcENvdW50LHYucHVzaChEKX1lbHNlIGEuZXJyb3JzLnB1c2goZnVuY3Rpb24gTVFlKCl7cmV0dXJuIG5ldyBQcigzMDA3LCExKX0oKSl9KSx7dHlw''@;'; put 'put ''ZTpCby5UcmlnZ2VyLG5hbWU6bC5uYW1lLHN0YXRlczpmLHRyYW5zaXRpb25zOnYscXVlcnlDb3VudDpkLGRlcENvdW50Omgsb3B0aW9uczpudWxsfX12aXNpdFN0YXRlKGwsYSl7Y29uc3QgZD10aGlzLnZpc2l0U3R5bGUobC5zdHlsZXMsYSksaD1sLm9wdGlvbnMmJmwub3B0aW9ucy5wYXJh''@;'; put 'put ''bXN8fG51bGw7aWYoZC5jb250YWluc0R5bmFtaWNTdHlsZXMpe2NvbnN0IGY9bmV3IFNldCx2PWh8fHt9O2Quc3R5bGVzLmZvckVhY2goTT0+e00gaW5zdGFuY2VvZiBNYXAmJk0uZm9yRWFjaChEPT57WXBlKEQpLmZvckVhY2goVT0+e3YuaGFzT3duUHJvcGVydHkoVSl8fGYuYWRkKFUpfSl9''@;'; put 'put ''KX0pLGYuc2l6ZSYmYS5lcnJvcnMucHVzaChmdW5jdGlvbiB4UWUoKXtyZXR1cm4gbmV3IFByKDMwMDgsITEpfSgwLGYudmFsdWVzKCkpKX1yZXR1cm57dHlwZTpCby5TdGF0ZSxuYW1lOmwubmFtZSxzdHlsZTpkLG9wdGlvbnM6aD97cGFyYW1zOmh9Om51bGx9fXZpc2l0VHJhbnNpdGlvbihs''@;'; put 'put ''LGEpe2EucXVlcnlDb3VudD0wLGEuZGVwQ291bnQ9MDtjb25zdCBkPVMyKHRoaXMsd0EobC5hbmltYXRpb24pLGEpLGg9ZnVuY3Rpb24gdWV0KGMsbCl7Y29uc3QgYT1bXTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGM/Yy5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2goZD0+ZnVuY3Rpb24gZGV0''@;'; put 'put ''KGMsbCxhKXtpZigiOiI9PWNbMF0pe2NvbnN0IEQ9ZnVuY3Rpb24gaGV0KGMsbCl7c3dpdGNoKGMpe2Nhc2UiOmVudGVyIjpyZXR1cm4idm9pZCA9PiAqIjtjYXNlIjpsZWF2ZSI6cmV0dXJuIiogPT4gdm9pZCI7Y2FzZSI6aW5jcmVtZW50IjpyZXR1cm4oYSxkKT0+cGFyc2VGbG9hdChkKT5w''@;'; put 'put ''YXJzZUZsb2F0KGEpO2Nhc2UiOmRlY3JlbWVudCI6cmV0dXJuKGEsZCk9PnBhcnNlRmxvYXQoZCk8cGFyc2VGbG9hdChhKTtkZWZhdWx0OnJldHVybiBsLnB1c2goZnVuY3Rpb24gUFFlKCl7cmV0dXJuIG5ldyBQcigzMDE2LCExKX0oKSksIiogPT4gKiJ9fShjLGEpO2lmKCJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBEKXJldHVybiB2b2lkIGwucHVzaChEKTtjPUR9Y29uc3QgZD1jLm1hdGNoKC9eKFwqfFstXHddKylccyooPD9bPS1dPilccyooXCp8Wy1cd10rKSQvKTtpZihudWxsPT1kfHxkLmxlbmd0aDw0KXJldHVybiBhLnB1c2goZnVuY3Rpb24gT1FlKCl7cmV0dXJuIG5ldyBQcigzMDE1''@;'; put 'put ''LCExKX0oKSksbDtjb25zdCBoPWRbMV0sZj1kWzJdLHY9ZFszXTtsLnB1c2goJHBlKGgsdikpLCI8Ij09ZlswXSYmKCIqIiE9aHx8IioiIT12KSYmbC5wdXNoKCRwZSh2LGgpKX0oZCxhLGwpKTphLnB1c2goYyksYX0obC5leHByLGEuZXJyb3JzKTtyZXR1cm57dHlwZTpCby5UcmFuc2l0aW9u''@;'; put 'put ''LG1hdGNoZXJzOmgsYW5pbWF0aW9uOmQscXVlcnlDb3VudDphLnF1ZXJ5Q291bnQsZGVwQ291bnQ6YS5kZXBDb3VudCxvcHRpb25zOks5KGwub3B0aW9ucyl9fXZpc2l0U2VxdWVuY2UobCxhKXtyZXR1cm57dHlwZTpCby5TZXF1ZW5jZSxzdGVwczpsLnN0ZXBzLm1hcChkPT5TMih0aGlzLGQs''@;'; put 'put ''YSkpLG9wdGlvbnM6SzkobC5vcHRpb25zKX19dmlzaXRHcm91cChsLGEpe2NvbnN0IGQ9YS5jdXJyZW50VGltZTtsZXQgaD0wO2NvbnN0IGY9bC5zdGVwcy5tYXAodj0+e2EuY3VycmVudFRpbWU9ZDtjb25zdCBNPVMyKHRoaXMsdixhKTtyZXR1cm4gaD1NYXRoLm1heChoLGEuY3VycmVudFRp''@;'; put 'put ''bWUpLE19KTtyZXR1cm4gYS5jdXJyZW50VGltZT1oLHt0eXBlOkJvLkdyb3VwLHN0ZXBzOmYsb3B0aW9uczpLOShsLm9wdGlvbnMpfX12aXNpdEFuaW1hdGUobCxhKXtjb25zdCBkPWZ1bmN0aW9uIGJldChjLGwpe2lmKGMuaGFzT3duUHJvcGVydHkoImR1cmF0aW9uIikpcmV0dXJuIGM7aWYo''@;'; put 'put ''Im51bWJlciI9PXR5cGVvZiBjKXJldHVybiB2cShQSChjLGwpLmR1cmF0aW9uLDAsIiIpO2NvbnN0IGE9YztpZihhLnNwbGl0KC9ccysvKS5zb21lKGY9PiJ7Ij09Zi5jaGFyQXQoMCkmJiJ7Ij09Zi5jaGFyQXQoMSkpKXtjb25zdCBmPXZxKDAsMCwiIik7cmV0dXJuIGYuZHluYW1pYz0hMCxm''@;'; put 'put ''LnN0clZhbHVlPWEsZn1jb25zdCBoPVBIKGEsbCk7cmV0dXJuIHZxKGguZHVyYXRpb24saC5kZWxheSxoLmVhc2luZyl9KGwudGltaW5ncyxhLmVycm9ycyk7YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9ZDtsZXQgaCxmPWwuc3R5bGVzP2wuc3R5bGVzOndzKHt9KTtpZihmLnR5cGU9PUJvLktl''@;'; put 'put ''eWZyYW1lcyloPXRoaXMudmlzaXRLZXlmcmFtZXMoZixhKTtlbHNle2xldCB2PWwuc3R5bGVzLE09ITE7aWYoIXYpe009ITA7Y29uc3QgVT17fTtkLmVhc2luZyYmKFUuZWFzaW5nPWQuZWFzaW5nKSx2PXdzKFUpfWEuY3VycmVudFRpbWUrPWQuZHVyYXRpb24rZC5kZWxheTtjb25zdCBEPXRo''@;'; put 'put ''aXMudmlzaXRTdHlsZSh2LGEpO0QuaXNFbXB0eVN0ZXA9TSxoPUR9cmV0dXJuIGEuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwse3R5cGU6Qm8uQW5pbWF0ZSx0aW1pbmdzOmQsc3R5bGU6aCxvcHRpb25zOm51bGx9fXZpc2l0U3R5bGUobCxhKXtjb25zdCBkPXRoaXMuX21ha2VTdHlsZUFz''@;'; put 'put ''dChsLGEpO3JldHVybiB0aGlzLl92YWxpZGF0ZVN0eWxlQXN0KGQsYSksZH1fbWFrZVN0eWxlQXN0KGwsYSl7Y29uc3QgZD1bXSxoPUFycmF5LmlzQXJyYXkobC5zdHlsZXMpP2wuc3R5bGVzOltsLnN0eWxlc107Zm9yKGxldCBNIG9mIGgpInN0cmluZyI9PXR5cGVvZiBNP009PT1lNT9kLnB1''@;'; put 'put ''c2goTSk6YS5lcnJvcnMucHVzaChuZXcgUHIoMzAwMiwhMSkpOmQucHVzaChuZXcgTWFwKE9iamVjdC5lbnRyaWVzKE0pKSk7bGV0IGY9ITEsdj1udWxsO3JldHVybiBkLmZvckVhY2goTT0+e2lmKE0gaW5zdGFuY2VvZiBNYXAmJihNLmhhcygiZWFzaW5nIikmJih2PU0uZ2V0KCJlYXNpbmci''@;'; put 'put ''KSxNLmRlbGV0ZSgiZWFzaW5nIikpLCFmKSlmb3IobGV0IEQgb2YgTS52YWx1ZXMoKSlpZihELnRvU3RyaW5nKCkuaW5kZXhPZigie3siKT49MCl7Zj0hMDticmVha319KSx7dHlwZTpCby5TdHlsZSxzdHlsZXM6ZCxlYXNpbmc6dixvZmZzZXQ6bC5vZmZzZXQsY29udGFpbnNEeW5hbWljU3R5''@;'; put 'put ''bGVzOmYsb3B0aW9uczpudWxsfX1fdmFsaWRhdGVTdHlsZUFzdChsLGEpe2NvbnN0IGQ9YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M7bGV0IGg9YS5jdXJyZW50VGltZSxmPWEuY3VycmVudFRpbWU7ZCYmZj4wJiYoZi09ZC5kdXJhdGlvbitkLmRlbGF5KSxsLnN0eWxlcy5mb3JFYWNoKHY9Pnsi''@;'; put 'put ''c3RyaW5nIiE9dHlwZW9mIHYmJnYuZm9yRWFjaCgoTSxEKT0+e2NvbnN0IFU9YS5jb2xsZWN0ZWRTdHlsZXMuZ2V0KGEuY3VycmVudFF1ZXJ5U2VsZWN0b3IpLHRlPVUuZ2V0KEQpO2xldCBvZT0hMDt0ZSYmKGYhPWgmJmY+PXRlLnN0YXJ0VGltZSYmaDw9dGUuZW5kVGltZSYmKGEuZXJyb3Jz''@;'; put 'put ''LnB1c2goZnVuY3Rpb24gVFFlKCl7cmV0dXJuIG5ldyBQcigzMDEwLCExKX0oKSksb2U9ITEpLGY9dGUuc3RhcnRUaW1lKSxvZSYmVS5zZXQoRCx7c3RhcnRUaW1lOmYsZW5kVGltZTpofSksYS5vcHRpb25zJiZmdW5jdGlvbiByZXQoYyxsLGEpe2NvbnN0IGQ9bC5wYXJhbXN8fHt9LGg9WXBl''@;'; put 'put ''KGMpO2gubGVuZ3RoJiZoLmZvckVhY2goZj0+e2QuaGFzT3duUHJvcGVydHkoZil8fGEucHVzaChmdW5jdGlvbiBiUWUoKXtyZXR1cm4gbmV3IFByKDMwMDEsITEpfSgpKX0pfShNLGEub3B0aW9ucyxhLmVycm9ycyl9KX0pfXZpc2l0S2V5ZnJhbWVzKGwsYSl7Y29uc3QgZD17dHlwZTpCby5L''@;'; put 'put ''ZXlmcmFtZXMsc3R5bGVzOltdLG9wdGlvbnM6bnVsbH07aWYoIWEuY3VycmVudEFuaW1hdGVUaW1pbmdzKXJldHVybiBhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIEFRZSgpe3JldHVybiBuZXcgUHIoMzAxMSwhMSl9KCkpLGQ7bGV0IGY9MDtjb25zdCB2PVtdO2xldCBNPSExLEQ9ITEsVT0wO2Nv''@;'; put 'put ''bnN0IHRlPWwuc3RlcHMubWFwKGR0PT57Y29uc3QgbXQ9dGhpcy5fbWFrZVN0eWxlQXN0KGR0LGEpO2xldCAkdD1udWxsIT1tdC5vZmZzZXQ/bXQub2Zmc2V0OmZ1bmN0aW9uIHlldChjKXtpZigic3RyaW5nIj09dHlwZW9mIGMpcmV0dXJuIG51bGw7bGV0IGw9bnVsbDtpZihBcnJheS5pc0Fy''@;'; put 'put ''cmF5KGMpKWMuZm9yRWFjaChhPT57aWYoYSBpbnN0YW5jZW9mIE1hcCYmYS5oYXMoIm9mZnNldCIpKXtjb25zdCBkPWE7bD1wYXJzZUZsb2F0KGQuZ2V0KCJvZmZzZXQiKSksZC5kZWxldGUoIm9mZnNldCIpfX0pO2Vsc2UgaWYoYyBpbnN0YW5jZW9mIE1hcCYmYy5oYXMoIm9mZnNldCIpKXtj''@;'; put 'put ''b25zdCBhPWM7bD1wYXJzZUZsb2F0KGEuZ2V0KCJvZmZzZXQiKSksYS5kZWxldGUoIm9mZnNldCIpfXJldHVybiBsfShtdC5zdHlsZXMpLHp0PTA7cmV0dXJuIG51bGwhPSR0JiYoZisrLHp0PW10Lm9mZnNldD0kdCksRD1EfHx6dDwwfHx6dD4xLE09TXx8enQ8VSxVPXp0LHYucHVzaCh6dCks''@;'; put 'put ''bXR9KTtEJiZhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIGtRZSgpe3JldHVybiBuZXcgUHIoMzAxMiwhMSl9KCkpLE0mJmEuZXJyb3JzLnB1c2goZnVuY3Rpb24gRFFlKCl7cmV0dXJuIG5ldyBQcigzMjAwLCExKX0oKSk7Y29uc3Qgb2U9bC5zdGVwcy5sZW5ndGg7bGV0IHZlPTA7Zj4wJiZmPG9l''@;'; put 'put ''P2EuZXJyb3JzLnB1c2goZnVuY3Rpb24gSVFlKCl7cmV0dXJuIG5ldyBQcigzMjAyLCExKX0oKSk6MD09ZiYmKHZlPTEvKG9lLTEpKTtjb25zdCB3ZT1vZS0xLEZlPWEuY3VycmVudFRpbWUsV2U9YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MsbnQ9V2UuZHVyYXRpb247cmV0dXJuIHRlLmZvckVh''@;'; put 'put ''Y2goKGR0LG10KT0+e2NvbnN0ICR0PXZlPjA/bXQ9PXdlPzE6dmUqbXQ6dlttdF0senQ9JHQqbnQ7YS5jdXJyZW50VGltZT1GZStXZS5kZWxheSt6dCxXZS5kdXJhdGlvbj16dCx0aGlzLl92YWxpZGF0ZVN0eWxlQXN0KGR0LGEpLGR0Lm9mZnNldD0kdCxkLnN0eWxlcy5wdXNoKGR0KX0pLGR9''@;'; put 'put ''dmlzaXRSZWZlcmVuY2UobCxhKXtyZXR1cm57dHlwZTpCby5SZWZlcmVuY2UsYW5pbWF0aW9uOlMyKHRoaXMsd0EobC5hbmltYXRpb24pLGEpLG9wdGlvbnM6SzkobC5vcHRpb25zKX19dmlzaXRBbmltYXRlQ2hpbGQobCxhKXtyZXR1cm4gYS5kZXBDb3VudCsrLHt0eXBlOkJvLkFuaW1hdGVD''@;'; put 'put ''aGlsZCxvcHRpb25zOks5KGwub3B0aW9ucyl9fXZpc2l0QW5pbWF0ZVJlZihsLGEpe3JldHVybnt0eXBlOkJvLkFuaW1hdGVSZWYsYW5pbWF0aW9uOnRoaXMudmlzaXRSZWZlcmVuY2UobC5hbmltYXRpb24sYSksb3B0aW9uczpLOShsLm9wdGlvbnMpfX12aXNpdFF1ZXJ5KGwsYSl7Y29uc3Qg''@;'; put 'put ''ZD1hLmN1cnJlbnRRdWVyeVNlbGVjdG9yLGg9bC5vcHRpb25zfHx7fTthLnF1ZXJ5Q291bnQrKyxhLmN1cnJlbnRRdWVyeT1sO2NvbnN0W2Ysdl09ZnVuY3Rpb24gZ2V0KGMpe2NvbnN0IGw9ISFjLnNwbGl0KC9ccyosXHMqLykuZmluZChhPT4iOnNlbGYiPT1hKTtyZXR1cm4gbCYmKGM9Yy5y''@;'; put 'put ''ZXBsYWNlKGZldCwiIikpLGM9Yy5yZXBsYWNlKC9AXCovZyxPSCkucmVwbGFjZSgvQFx3Ky9nLGE9Pk9IKyItIithLnNsaWNlKDEpKS5yZXBsYWNlKC86YW5pbWF0aW5nL2csc3EpLFtjLGxdfShsLnNlbGVjdG9yKTthLmN1cnJlbnRRdWVyeVNlbGVjdG9yPWQubGVuZ3RoP2QrIiAiK2Y6ZixD''@;'; put 'put ''MihhLmNvbGxlY3RlZFN0eWxlcyxhLmN1cnJlbnRRdWVyeVNlbGVjdG9yLG5ldyBNYXApO2NvbnN0IE09UzIodGhpcyx3QShsLmFuaW1hdGlvbiksYSk7cmV0dXJuIGEuY3VycmVudFF1ZXJ5PW51bGwsYS5jdXJyZW50UXVlcnlTZWxlY3Rvcj1kLHt0eXBlOkJvLlF1ZXJ5LHNlbGVjdG9yOmYs''@;'; put 'put ''bGltaXQ6aC5saW1pdHx8MCxvcHRpb25hbDohIWgub3B0aW9uYWwsaW5jbHVkZVNlbGY6dixhbmltYXRpb246TSxvcmlnaW5hbFNlbGVjdG9yOmwuc2VsZWN0b3Isb3B0aW9uczpLOShsLm9wdGlvbnMpfX12aXNpdFN0YWdnZXIobCxhKXthLmN1cnJlbnRRdWVyeXx8YS5lcnJvcnMucHVzaChm''@;'; put 'put ''dW5jdGlvbiBSUWUoKXtyZXR1cm4gbmV3IFByKDMwMTMsITEpfSgpKTtjb25zdCBkPSJmdWxsIj09PWwudGltaW5ncz97ZHVyYXRpb246MCxkZWxheTowLGVhc2luZzoiZnVsbCJ9OlBIKGwudGltaW5ncyxhLmVycm9ycywhMCk7cmV0dXJue3R5cGU6Qm8uU3RhZ2dlcixhbmltYXRpb246UzIo''@;'; put 'put ''dGhpcyx3QShsLmFuaW1hdGlvbiksYSksdGltaW5nczpkLG9wdGlvbnM6bnVsbH19fWNsYXNzIHZldHtlcnJvcnM7cXVlcnlDb3VudD0wO2RlcENvdW50PTA7Y3VycmVudFRyYW5zaXRpb249bnVsbDtjdXJyZW50UXVlcnk9bnVsbDtjdXJyZW50UXVlcnlTZWxlY3Rvcj1udWxsO2N1cnJlbnRB''@;'; put 'put ''bmltYXRlVGltaW5ncz1udWxsO2N1cnJlbnRUaW1lPTA7Y29sbGVjdGVkU3R5bGVzPW5ldyBNYXA7b3B0aW9ucz1udWxsO3Vuc3VwcG9ydGVkQ1NTUHJvcGVydGllc0ZvdW5kPW5ldyBTZXQ7Y29uc3RydWN0b3IobCl7dGhpcy5lcnJvcnM9bH19ZnVuY3Rpb24gSzkoYyl7cmV0dXJuIGM/KGM9''@;'; put 'put ''ey4uLmN9KS5wYXJhbXMmJihjLnBhcmFtcz1mdW5jdGlvbiBtZXQoYyl7cmV0dXJuIGM/ey4uLmN9Om51bGx9KGMucGFyYW1zKSk6Yz17fSxjfWZ1bmN0aW9uIHZxKGMsbCxhKXtyZXR1cm57ZHVyYXRpb246YyxkZWxheTpsLGVhc2luZzphfX1mdW5jdGlvbiB5cShjLGwsYSxkLGgsZix2PW51''@;'; put 'put ''bGwsTT0hMSl7cmV0dXJue3R5cGU6MSxlbGVtZW50OmMsa2V5ZnJhbWVzOmwscHJlU3R5bGVQcm9wczphLHBvc3RTdHlsZVByb3BzOmQsZHVyYXRpb246aCxkZWxheTpmLHRvdGFsVGltZTpoK2YsZWFzaW5nOnYsc3ViVGltZWxpbmU6TX19Y2xhc3MgVkh7X21hcD1uZXcgTWFwO2dldChsKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fbWFwLmdldChsKXx8W119YXBwZW5kKGwsYSl7bGV0IGQ9dGhpcy5fbWFwLmdldChsKTtkfHx0aGlzLl9tYXAuc2V0KGwsZD1bXSksZC5wdXNoKC4uLmEpfWhhcyhsKXtyZXR1cm4gdGhpcy5fbWFwLmhhcyhsKX1jbGVhcigpe3RoaXMuX21hcC5jbGVhcigpfX1jb25zdCBD''@;'; put 'put ''ZXQ9bmV3IFJlZ0V4cCgiOmVudGVyIiwiZyIpLHhldD1uZXcgUmVnRXhwKCI6bGVhdmUiLCJnIik7ZnVuY3Rpb24gYnEoYyxsLGEsZCxoLGY9bmV3IE1hcCx2PW5ldyBNYXAsTSxELFU9W10pe3JldHVybihuZXcgRWV0KS5idWlsZEtleWZyYW1lcyhjLGwsYSxkLGgsZix2LE0sRCxVKX1jbGFz''@;'; put 'put ''cyBFZXR7YnVpbGRLZXlmcmFtZXMobCxhLGQsaCxmLHYsTSxELFUsdGU9W10pe1U9VXx8bmV3IFZIO2NvbnN0IG9lPW5ldyBfcShsLGEsVSxoLGYsdGUsW10pO29lLm9wdGlvbnM9RDtjb25zdCB2ZT1ELmRlbGF5P2Q1KEQuZGVsYXkpOjA7b2UuY3VycmVudFRpbWVsaW5lLmRlbGF5TmV4dFN0''@;'; put 'put ''ZXAodmUpLG9lLmN1cnJlbnRUaW1lbGluZS5zZXRTdHlsZXMoW3ZdLG51bGwsb2UuZXJyb3JzLEQpLFMyKHRoaXMsZCxvZSk7Y29uc3Qgd2U9b2UudGltZWxpbmVzLmZpbHRlcihGZT0+RmUuY29udGFpbnNBbmltYXRpb24oKSk7aWYod2UubGVuZ3RoJiZNLnNpemUpe2xldCBGZTtmb3IobGV0''@;'; put 'put ''IFdlPXdlLmxlbmd0aC0xO1dlPj0wO1dlLS0pe2NvbnN0IG50PXdlW1dlXTtpZihudC5lbGVtZW50PT09YSl7RmU9bnQ7YnJlYWt9fUZlJiYhRmUuYWxsb3dPbmx5VGltZWxpbmVTdHlsZXMoKSYmRmUuc2V0U3R5bGVzKFtNXSxudWxsLG9lLmVycm9ycyxEKX1yZXR1cm4gd2UubGVuZ3RoP3dl''@;'; put 'put ''Lm1hcChGZT0+RmUuYnVpbGRLZXlmcmFtZXMoKSk6W3lxKGEsW10sW10sW10sMCx2ZSwiIiwhMSldfXZpc2l0VHJpZ2dlcihsLGEpe312aXNpdFN0YXRlKGwsYSl7fXZpc2l0VHJhbnNpdGlvbihsLGEpe312aXNpdEFuaW1hdGVDaGlsZChsLGEpe2NvbnN0IGQ9YS5zdWJJbnN0cnVjdGlvbnMu''@;'; put 'put ''Z2V0KGEuZWxlbWVudCk7aWYoZCl7Y29uc3QgaD1hLmNyZWF0ZVN1YkNvbnRleHQobC5vcHRpb25zKSxmPWEuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLHY9dGhpcy5fdmlzaXRTdWJJbnN0cnVjdGlvbnMoZCxoLGgub3B0aW9ucyk7ZiE9diYmYS50cmFuc2Zvcm1JbnRvTmV3VGltZWxp''@;'; put 'put ''bmUodil9YS5wcmV2aW91c05vZGU9bH12aXNpdEFuaW1hdGVSZWYobCxhKXtjb25zdCBkPWEuY3JlYXRlU3ViQ29udGV4dChsLm9wdGlvbnMpO2QudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksdGhpcy5fYXBwbHlBbmltYXRpb25SZWZEZWxheXMoW2wub3B0aW9ucyxsLmFuaW1hdGlvbi5v''@;'; put 'put ''cHRpb25zXSxhLGQpLHRoaXMudmlzaXRSZWZlcmVuY2UobC5hbmltYXRpb24sZCksYS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoZC5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpLGEucHJldmlvdXNOb2RlPWx9X2FwcGx5QW5pbWF0aW9uUmVmRGVsYXlzKGwsYSxkKXtmb3IoY29uc3Qg''@;'; put 'put ''aCBvZiBsKXtjb25zdCBmPWg/LmRlbGF5O2lmKGYpe2NvbnN0IHY9Im51bWJlciI9PXR5cGVvZiBmP2Y6ZDUoQ0EoZixoPy5wYXJhbXM/P3t9LGEuZXJyb3JzKSk7ZC5kZWxheU5leHRTdGVwKHYpfX19X3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zKGwsYSxkKXtsZXQgZj1hLmN1cnJlbnRUaW1lbGlu''@;'; put 'put ''ZS5jdXJyZW50VGltZTtjb25zdCB2PW51bGwhPWQuZHVyYXRpb24/ZDUoZC5kdXJhdGlvbik6bnVsbCxNPW51bGwhPWQuZGVsYXk/ZDUoZC5kZWxheSk6bnVsbDtyZXR1cm4gMCE9PXYmJmwuZm9yRWFjaChEPT57Y29uc3QgVT1hLmFwcGVuZEluc3RydWN0aW9uVG9UaW1lbGluZShELHYsTSk7''@;'; put 'put ''Zj1NYXRoLm1heChmLFUuZHVyYXRpb24rVS5kZWxheSl9KSxmfXZpc2l0UmVmZXJlbmNlKGwsYSl7YS51cGRhdGVPcHRpb25zKGwub3B0aW9ucywhMCksUzIodGhpcyxsLmFuaW1hdGlvbixhKSxhLnByZXZpb3VzTm9kZT1sfXZpc2l0U2VxdWVuY2UobCxhKXtjb25zdCBkPWEuc3ViQ29udGV4''@;'; put 'put ''dENvdW50O2xldCBoPWE7Y29uc3QgZj1sLm9wdGlvbnM7aWYoZiYmKGYucGFyYW1zfHxmLmRlbGF5KSYmKGg9YS5jcmVhdGVTdWJDb250ZXh0KGYpLGgudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksbnVsbCE9Zi5kZWxheSkpe2gucHJldmlvdXNOb2RlLnR5cGU9PUJvLlN0eWxlJiYoaC5j''@;'; put 'put ''dXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCksaC5wcmV2aW91c05vZGU9QkgpO2NvbnN0IHY9ZDUoZi5kZWxheSk7aC5kZWxheU5leHRTdGVwKHYpfWwuc3RlcHMubGVuZ3RoJiYobC5zdGVwcy5mb3JFYWNoKHY9PlMyKHRoaXMsdixoKSksaC5jdXJyZW50VGltZWxpbmUu''@;'; put 'put ''YXBwbHlTdHlsZXNUb0tleWZyYW1lKCksaC5zdWJDb250ZXh0Q291bnQ+ZCYmaC50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoKSksYS5wcmV2aW91c05vZGU9bH12aXNpdEdyb3VwKGwsYSl7Y29uc3QgZD1bXTtsZXQgaD1hLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZTtjb25zdCBmPWwu''@;'; put 'put ''b3B0aW9ucyYmbC5vcHRpb25zLmRlbGF5P2Q1KGwub3B0aW9ucy5kZWxheSk6MDtsLnN0ZXBzLmZvckVhY2godj0+e2NvbnN0IE09YS5jcmVhdGVTdWJDb250ZXh0KGwub3B0aW9ucyk7ZiYmTS5kZWxheU5leHRTdGVwKGYpLFMyKHRoaXMsdixNKSxoPU1hdGgubWF4KGgsTS5jdXJyZW50VGlt''@;'; put 'put ''ZWxpbmUuY3VycmVudFRpbWUpLGQucHVzaChNLmN1cnJlbnRUaW1lbGluZSl9KSxkLmZvckVhY2godj0+YS5jdXJyZW50VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyh2KSksYS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoaCksYS5wcmV2aW91c05vZGU9bH1fdmlzaXRU''@;'; put 'put ''aW1pbmcobCxhKXtpZihsLmR5bmFtaWMpe2NvbnN0IGQ9bC5zdHJWYWx1ZTtyZXR1cm4gUEgoYS5wYXJhbXM/Q0EoZCxhLnBhcmFtcyxhLmVycm9ycyk6ZCxhLmVycm9ycyl9cmV0dXJue2R1cmF0aW9uOmwuZHVyYXRpb24sZGVsYXk6bC5kZWxheSxlYXNpbmc6bC5lYXNpbmd9fXZpc2l0QW5p''@;'; put 'put ''bWF0ZShsLGEpe2NvbnN0IGQ9YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9dGhpcy5fdmlzaXRUaW1pbmcobC50aW1pbmdzLGEpLGg9YS5jdXJyZW50VGltZWxpbmU7ZC5kZWxheSYmKGEuaW5jcmVtZW50VGltZShkLmRlbGF5KSxoLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKTtjb25zdCBmPWwu''@;'; put 'put ''c3R5bGU7Zi50eXBlPT1Cby5LZXlmcmFtZXM/dGhpcy52aXNpdEtleWZyYW1lcyhmLGEpOihhLmluY3JlbWVudFRpbWUoZC5kdXJhdGlvbiksdGhpcy52aXNpdFN0eWxlKGYsYSksaC5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSksYS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCxhLnByZXZp''@;'; put 'put ''b3VzTm9kZT1sfXZpc2l0U3R5bGUobCxhKXtjb25zdCBkPWEuY3VycmVudFRpbWVsaW5lLGg9YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M7IWgmJmQuaGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygpJiZkLmZvcndhcmRGcmFtZSgpO2NvbnN0IGY9aCYmaC5lYXNpbmd8fGwuZWFzaW5nO2wuaXNF''@;'; put 'put ''bXB0eVN0ZXA/ZC5hcHBseUVtcHR5U3RlcChmKTpkLnNldFN0eWxlcyhsLnN0eWxlcyxmLGEuZXJyb3JzLGEub3B0aW9ucyksYS5wcmV2aW91c05vZGU9bH12aXNpdEtleWZyYW1lcyhsLGEpe2NvbnN0IGQ9YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MsaD1hLmN1cnJlbnRUaW1lbGluZS5kdXJh''@;'; put 'put ''dGlvbixmPWQuZHVyYXRpb24sTT1hLmNyZWF0ZVN1YkNvbnRleHQoKS5jdXJyZW50VGltZWxpbmU7TS5lYXNpbmc9ZC5lYXNpbmcsbC5zdHlsZXMuZm9yRWFjaChEPT57TS5mb3J3YXJkVGltZSgoRC5vZmZzZXR8fDApKmYpLE0uc2V0U3R5bGVzKEQuc3R5bGVzLEQuZWFzaW5nLGEuZXJyb3Jz''@;'; put 'put ''LGEub3B0aW9ucyksTS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKX0pLGEuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMoTSksYS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoaCtmKSxhLnByZXZpb3VzTm9kZT1sfXZpc2l0UXVlcnkobCxhKXtjb25zdCBkPWEu''@;'; put 'put ''Y3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLGg9bC5vcHRpb25zfHx7fSxmPWguZGVsYXk/ZDUoaC5kZWxheSk6MDtmJiYoYS5wcmV2aW91c05vZGUudHlwZT09PUJvLlN0eWxlfHwwPT1kJiZhLmN1cnJlbnRUaW1lbGluZS5oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkpJiYoYS5jdXJy''@;'; put 'put ''ZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCksYS5wcmV2aW91c05vZGU9QkgpO2xldCB2PWQ7Y29uc3QgTT1hLmludm9rZVF1ZXJ5KGwuc2VsZWN0b3IsbC5vcmlnaW5hbFNlbGVjdG9yLGwubGltaXQsbC5pbmNsdWRlU2VsZiwhIWgub3B0aW9uYWwsYS5lcnJvcnMpO2EuY3Vy''@;'; put 'put ''cmVudFF1ZXJ5VG90YWw9TS5sZW5ndGg7bGV0IEQ9bnVsbDtNLmZvckVhY2goKFUsdGUpPT57YS5jdXJyZW50UXVlcnlJbmRleD10ZTtjb25zdCBvZT1hLmNyZWF0ZVN1YkNvbnRleHQobC5vcHRpb25zLFUpO2YmJm9lLmRlbGF5TmV4dFN0ZXAoZiksVT09PWEuZWxlbWVudCYmKEQ9b2UuY3Vy''@;'; put 'put ''cmVudFRpbWVsaW5lKSxTMih0aGlzLGwuYW5pbWF0aW9uLG9lKSxvZS5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksdj1NYXRoLm1heCh2LG9lLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSl9KSxhLmN1cnJlbnRRdWVyeUluZGV4PTAsYS5jdXJyZW50UXVlcnlU''@;'; put 'put ''b3RhbD0wLGEudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKHYpLEQmJihhLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKEQpLGEuY3VycmVudFRpbWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKSxhLnByZXZpb3VzTm9kZT1sfXZpc2l0U3RhZ2dlcihs''@;'; put 'put ''LGEpe2NvbnN0IGQ9YS5wYXJlbnRDb250ZXh0LGg9YS5jdXJyZW50VGltZWxpbmUsZj1sLnRpbWluZ3Msdj1NYXRoLmFicyhmLmR1cmF0aW9uKSxNPXYqKGEuY3VycmVudFF1ZXJ5VG90YWwtMSk7bGV0IEQ9diphLmN1cnJlbnRRdWVyeUluZGV4O3N3aXRjaChmLmR1cmF0aW9uPDA/InJldmVy''@;'; put 'put ''c2UiOmYuZWFzaW5nKXtjYXNlInJldmVyc2UiOkQ9TS1EO2JyZWFrO2Nhc2UiZnVsbCI6RD1kLmN1cnJlbnRTdGFnZ2VyVGltZX1jb25zdCB0ZT1hLmN1cnJlbnRUaW1lbGluZTtEJiZ0ZS5kZWxheU5leHRTdGVwKEQpO2NvbnN0IG9lPXRlLmN1cnJlbnRUaW1lO1MyKHRoaXMsbC5hbmltYXRp''@;'; put 'put ''b24sYSksYS5wcmV2aW91c05vZGU9bCxkLmN1cnJlbnRTdGFnZ2VyVGltZT1oLmN1cnJlbnRUaW1lLW9lKyhoLnN0YXJ0VGltZS1kLmN1cnJlbnRUaW1lbGluZS5zdGFydFRpbWUpfX1jb25zdCBCSD17fTtjbGFzcyBfcXtfZHJpdmVyO2VsZW1lbnQ7c3ViSW5zdHJ1Y3Rpb25zO19lbnRlckNs''@;'; put 'put ''YXNzTmFtZTtfbGVhdmVDbGFzc05hbWU7ZXJyb3JzO3RpbWVsaW5lcztwYXJlbnRDb250ZXh0PW51bGw7Y3VycmVudFRpbWVsaW5lO2N1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsO3ByZXZpb3VzTm9kZT1CSDtzdWJDb250ZXh0Q291bnQ9MDtvcHRpb25zPXt9O2N1cnJlbnRRdWVyeUluZGV4''@;'; put 'put ''PTA7Y3VycmVudFF1ZXJ5VG90YWw9MDtjdXJyZW50U3RhZ2dlclRpbWU9MDtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdixNLEQpe3RoaXMuX2RyaXZlcj1sLHRoaXMuZWxlbWVudD1hLHRoaXMuc3ViSW5zdHJ1Y3Rpb25zPWQsdGhpcy5fZW50ZXJDbGFzc05hbWU9aCx0aGlzLl9sZWF2ZUNsYXNz''@;'; put 'put ''TmFtZT1mLHRoaXMuZXJyb3JzPXYsdGhpcy50aW1lbGluZXM9TSx0aGlzLmN1cnJlbnRUaW1lbGluZT1EfHxuZXcgakgodGhpcy5fZHJpdmVyLGEsMCksTS5wdXNoKHRoaXMuY3VycmVudFRpbWVsaW5lKX1nZXQgcGFyYW1zKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wYXJhbXN9dXBkYXRlT3B0''@;'; put 'put ''aW9ucyhsLGEpe2lmKCFsKXJldHVybjtjb25zdCBkPWw7bGV0IGg9dGhpcy5vcHRpb25zO251bGwhPWQuZHVyYXRpb24mJihoLmR1cmF0aW9uPWQ1KGQuZHVyYXRpb24pKSxudWxsIT1kLmRlbGF5JiYoaC5kZWxheT1kNShkLmRlbGF5KSk7Y29uc3QgZj1kLnBhcmFtcztpZihmKXtsZXQgdj1o''@;'; put 'put ''LnBhcmFtczt2fHwodj10aGlzLm9wdGlvbnMucGFyYW1zPXt9KSxPYmplY3Qua2V5cyhmKS5mb3JFYWNoKE09PnsoIWF8fCF2Lmhhc093blByb3BlcnR5KE0pKSYmKHZbTV09Q0EoZltNXSx2LHRoaXMuZXJyb3JzKSl9KX19X2NvcHlPcHRpb25zKCl7Y29uc3QgbD17fTtpZih0aGlzLm9wdGlv''@;'; put 'put ''bnMpe2NvbnN0IGE9dGhpcy5vcHRpb25zLnBhcmFtcztpZihhKXtjb25zdCBkPWwucGFyYW1zPXt9O09iamVjdC5rZXlzKGEpLmZvckVhY2goaD0+e2RbaF09YVtoXX0pfX1yZXR1cm4gbH1jcmVhdGVTdWJDb250ZXh0KGw9bnVsbCxhLGQpe2NvbnN0IGg9YXx8dGhpcy5lbGVtZW50LGY9bmV3''@;'; put 'put ''IF9xKHRoaXMuX2RyaXZlcixoLHRoaXMuc3ViSW5zdHJ1Y3Rpb25zLHRoaXMuX2VudGVyQ2xhc3NOYW1lLHRoaXMuX2xlYXZlQ2xhc3NOYW1lLHRoaXMuZXJyb3JzLHRoaXMudGltZWxpbmVzLHRoaXMuY3VycmVudFRpbWVsaW5lLmZvcmsoaCxkfHwwKSk7cmV0dXJuIGYucHJldmlvdXNOb2Rl''@;'; put 'put ''PXRoaXMucHJldmlvdXNOb2RlLGYuY3VycmVudEFuaW1hdGVUaW1pbmdzPXRoaXMuY3VycmVudEFuaW1hdGVUaW1pbmdzLGYub3B0aW9ucz10aGlzLl9jb3B5T3B0aW9ucygpLGYudXBkYXRlT3B0aW9ucyhsKSxmLmN1cnJlbnRRdWVyeUluZGV4PXRoaXMuY3VycmVudFF1ZXJ5SW5kZXgsZi5j''@;'; put 'put ''dXJyZW50UXVlcnlUb3RhbD10aGlzLmN1cnJlbnRRdWVyeVRvdGFsLGYucGFyZW50Q29udGV4dD10aGlzLHRoaXMuc3ViQ29udGV4dENvdW50KyssZn10cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUobCl7cmV0dXJuIHRoaXMucHJldmlvdXNOb2RlPUJILHRoaXMuY3VycmVudFRpbWVsaW5lPXRo''@;'; put 'put ''aXMuY3VycmVudFRpbWVsaW5lLmZvcmsodGhpcy5lbGVtZW50LGwpLHRoaXMudGltZWxpbmVzLnB1c2godGhpcy5jdXJyZW50VGltZWxpbmUpLHRoaXMuY3VycmVudFRpbWVsaW5lfWFwcGVuZEluc3RydWN0aW9uVG9UaW1lbGluZShsLGEsZCl7Y29uc3QgaD17ZHVyYXRpb246YT8/bC5kdXJh''@;'; put 'put ''dGlvbixkZWxheTp0aGlzLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSsoZD8/MCkrbC5kZWxheSxlYXNpbmc6IiJ9LGY9bmV3IFRldCh0aGlzLl9kcml2ZXIsbC5lbGVtZW50LGwua2V5ZnJhbWVzLGwucHJlU3R5bGVQcm9wcyxsLnBvc3RTdHlsZVByb3BzLGgsbC5zdHJldGNoU3RhcnRp''@;'; put 'put ''bmdLZXlmcmFtZSk7cmV0dXJuIHRoaXMudGltZWxpbmVzLnB1c2goZiksaH1pbmNyZW1lbnRUaW1lKGwpe3RoaXMuY3VycmVudFRpbWVsaW5lLmZvcndhcmRUaW1lKHRoaXMuY3VycmVudFRpbWVsaW5lLmR1cmF0aW9uK2wpfWRlbGF5TmV4dFN0ZXAobCl7bD4wJiZ0aGlzLmN1cnJlbnRUaW1l''@;'; put 'put ''bGluZS5kZWxheU5leHRTdGVwKGwpfWludm9rZVF1ZXJ5KGwsYSxkLGgsZix2KXtsZXQgTT1bXTtpZihoJiZNLnB1c2godGhpcy5lbGVtZW50KSxsLmxlbmd0aD4wKXtsPShsPWwucmVwbGFjZShDZXQsIi4iK3RoaXMuX2VudGVyQ2xhc3NOYW1lKSkucmVwbGFjZSh4ZXQsIi4iK3RoaXMuX2xl''@;'; put 'put ''YXZlQ2xhc3NOYW1lKTtsZXQgVT10aGlzLl9kcml2ZXIucXVlcnkodGhpcy5lbGVtZW50LGwsMSE9ZCk7MCE9PWQmJihVPWQ8MD9VLnNsaWNlKFUubGVuZ3RoK2QsVS5sZW5ndGgpOlUuc2xpY2UoMCxkKSksTS5wdXNoKC4uLlUpfXJldHVybiFmJiYwPT1NLmxlbmd0aCYmdi5wdXNoKGZ1bmN0''@;'; put 'put ''aW9uIExRZSgpe3JldHVybiBuZXcgUHIoMzAxNCwhMSl9KCkpLE19fWNsYXNzIGpIe19kcml2ZXI7ZWxlbWVudDtzdGFydFRpbWU7X2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cDtkdXJhdGlvbj0wO2Vhc2luZz1udWxsO19wcmV2aW91c0tleWZyYW1lPW5ldyBNYXA7X2N1cnJlbnRLZXlm''@;'; put 'put ''cmFtZT1uZXcgTWFwO19rZXlmcmFtZXM9bmV3IE1hcDtfc3R5bGVTdW1tYXJ5PW5ldyBNYXA7X2xvY2FsVGltZWxpbmVTdHlsZXM9bmV3IE1hcDtfZ2xvYmFsVGltZWxpbmVTdHlsZXM7X3BlbmRpbmdTdHlsZXM9bmV3IE1hcDtfYmFja0ZpbGw9bmV3IE1hcDtfY3VycmVudEVtcHR5U3RlcEtl''@;'; put 'put ''eWZyYW1lPW51bGw7Y29uc3RydWN0b3IobCxhLGQsaCl7dGhpcy5fZHJpdmVyPWwsdGhpcy5lbGVtZW50PWEsdGhpcy5zdGFydFRpbWU9ZCx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXA9aCx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXB8fCh0aGlzLl9lbGVtZW50''@;'; put 'put ''VGltZWxpbmVTdHlsZXNMb29rdXA9bmV3IE1hcCksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXM9dGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwLmdldChhKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlc3x8KHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzPXRoaXMuX2xvY2Fs''@;'; put 'put ''VGltZWxpbmVTdHlsZXMsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwLnNldChhLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMpKSx0aGlzLl9sb2FkS2V5ZnJhbWUoKX1jb250YWluc0FuaW1hdGlvbigpe3N3aXRjaCh0aGlzLl9rZXlmcmFtZXMuc2l6ZSl7Y2FzZSAwOnJldHVy''@;'; put 'put ''biExO2Nhc2UgMTpyZXR1cm4gdGhpcy5oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCk7ZGVmYXVsdDpyZXR1cm4hMH19aGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygpe3JldHVybiB0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2l6ZT4wfWdldCBjdXJyZW50VGltZSgpe3JldHVybiB0aGlzLnN0''@;'; put 'put ''YXJ0VGltZSt0aGlzLmR1cmF0aW9ufWRlbGF5TmV4dFN0ZXAobCl7Y29uc3QgYT0xPT09dGhpcy5fa2V5ZnJhbWVzLnNpemUmJnRoaXMuX3BlbmRpbmdTdHlsZXMuc2l6ZTt0aGlzLmR1cmF0aW9ufHxhPyh0aGlzLmZvcndhcmRUaW1lKHRoaXMuY3VycmVudFRpbWUrbCksYSYmdGhpcy5zbmFw''@;'; put 'put ''c2hvdEN1cnJlbnRTdHlsZXMoKSk6dGhpcy5zdGFydFRpbWUrPWx9Zm9yayhsLGEpe3JldHVybiB0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLG5ldyBqSCh0aGlzLl9kcml2ZXIsbCxhfHx0aGlzLmN1cnJlbnRUaW1lLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cCl9X2xv''@;'; put 'put ''YWRLZXlmcmFtZSgpe3RoaXMuX2N1cnJlbnRLZXlmcmFtZSYmKHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWU9dGhpcy5fY3VycmVudEtleWZyYW1lKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWU9dGhpcy5fa2V5ZnJhbWVzLmdldCh0aGlzLmR1cmF0aW9uKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWV8fCh0''@;'; put 'put ''aGlzLl9jdXJyZW50S2V5ZnJhbWU9bmV3IE1hcCx0aGlzLl9rZXlmcmFtZXMuc2V0KHRoaXMuZHVyYXRpb24sdGhpcy5fY3VycmVudEtleWZyYW1lKSl9Zm9yd2FyZEZyYW1lKCl7dGhpcy5kdXJhdGlvbis9MSx0aGlzLl9sb2FkS2V5ZnJhbWUoKX1mb3J3YXJkVGltZShsKXt0aGlzLmFwcGx5''@;'; put 'put ''U3R5bGVzVG9LZXlmcmFtZSgpLHRoaXMuZHVyYXRpb249bCx0aGlzLl9sb2FkS2V5ZnJhbWUoKX1fdXBkYXRlU3R5bGUobCxhKXt0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLnNldChsLGEpLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzLnNldChsLGEpLHRoaXMuX3N0eWxlU3VtbWFyeS5z''@;'; put 'put ''ZXQobCx7dGltZTp0aGlzLmN1cnJlbnRUaW1lLHZhbHVlOmF9KX1hbGxvd09ubHlUaW1lbGluZVN0eWxlcygpe3JldHVybiB0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWUhPT10aGlzLl9jdXJyZW50S2V5ZnJhbWV9YXBwbHlFbXB0eVN0ZXAobCl7bCYmdGhpcy5fcHJldmlvdXNLZXlm''@;'; put 'put ''cmFtZS5zZXQoImVhc2luZyIsbCk7Zm9yKGxldFthLGRdb2YgdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMpdGhpcy5fYmFja0ZpbGwuc2V0KGEsZHx8ZTUpLHRoaXMuX2N1cnJlbnRLZXlmcmFtZS5zZXQoYSxlNSk7dGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lPXRoaXMuX2N1cnJl''@;'; put 'put ''bnRLZXlmcmFtZX1zZXRTdHlsZXMobCxhLGQsaCl7YSYmdGhpcy5fcHJldmlvdXNLZXlmcmFtZS5zZXQoImVhc2luZyIsYSk7Y29uc3QgZj1oJiZoLnBhcmFtc3x8e30sdj1mdW5jdGlvbiBBZXQoYyxsKXtjb25zdCBhPW5ldyBNYXA7bGV0IGQ7cmV0dXJuIGMuZm9yRWFjaChoPT57aWYoIioi''@;'; put 'put ''PT09aCl7ZD8/PWwua2V5cygpO2ZvcihsZXQgZiBvZiBkKWEuc2V0KGYsZTUpfWVsc2UgZm9yKGxldFtmLHZdb2YgaClhLnNldChmLHYpfSksYX0obCx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcyk7Zm9yKGxldFtNLERdb2Ygdil7Y29uc3QgVT1DQShELGYsZCk7dGhpcy5fcGVuZGluZ1N0''@;'; put 'put ''eWxlcy5zZXQoTSxVKSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLmhhcyhNKXx8dGhpcy5fYmFja0ZpbGwuc2V0KE0sdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMuZ2V0KE0pPz9lNSksdGhpcy5fdXBkYXRlU3R5bGUoTSxVKX19YXBwbHlTdHlsZXNUb0tleWZyYW1lKCl7MCE9dGhpcy5f''@;'; put 'put ''cGVuZGluZ1N0eWxlcy5zaXplJiYodGhpcy5fcGVuZGluZ1N0eWxlcy5mb3JFYWNoKChsLGEpPT57dGhpcy5fY3VycmVudEtleWZyYW1lLnNldChhLGwpfSksdGhpcy5fcGVuZGluZ1N0eWxlcy5jbGVhcigpLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMuZm9yRWFjaCgobCxhKT0+e3RoaXMu''@;'; put 'put ''X2N1cnJlbnRLZXlmcmFtZS5oYXMoYSl8fHRoaXMuX2N1cnJlbnRLZXlmcmFtZS5zZXQoYSxsKX0pKX1zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKXtmb3IobGV0W2wsYV1vZiB0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKXRoaXMuX3BlbmRpbmdTdHlsZXMuc2V0KGwsYSksdGhpcy5fdXBkYXRl''@;'; put 'put ''U3R5bGUobCxhKX1nZXRGaW5hbEtleWZyYW1lKCl7cmV0dXJuIHRoaXMuX2tleWZyYW1lcy5nZXQodGhpcy5kdXJhdGlvbil9Z2V0IHByb3BlcnRpZXMoKXtjb25zdCBsPVtdO2ZvcihsZXQgYSBpbiB0aGlzLl9jdXJyZW50S2V5ZnJhbWUpbC5wdXNoKGEpO3JldHVybiBsfW1lcmdlVGltZWxp''@;'; put 'put ''bmVDb2xsZWN0ZWRTdHlsZXMobCl7bC5fc3R5bGVTdW1tYXJ5LmZvckVhY2goKGEsZCk9Pntjb25zdCBoPXRoaXMuX3N0eWxlU3VtbWFyeS5nZXQoZCk7KCFofHxhLnRpbWU+aC50aW1lKSYmdGhpcy5fdXBkYXRlU3R5bGUoZCxhLnZhbHVlKX0pfWJ1aWxkS2V5ZnJhbWVzKCl7dGhpcy5hcHBs''@;'; put 'put ''eVN0eWxlc1RvS2V5ZnJhbWUoKTtjb25zdCBsPW5ldyBTZXQsYT1uZXcgU2V0LGQ9MT09PXRoaXMuX2tleWZyYW1lcy5zaXplJiYwPT09dGhpcy5kdXJhdGlvbjtsZXQgaD1bXTt0aGlzLl9rZXlmcmFtZXMuZm9yRWFjaCgoTSxEKT0+e2NvbnN0IFU9bmV3IE1hcChbLi4udGhpcy5fYmFja0Zp''@;'; put 'put ''bGwsLi4uTV0pO1UuZm9yRWFjaCgodGUsb2UpPT57IiEiPT09dGU/bC5hZGQob2UpOnRlPT09ZTUmJmEuYWRkKG9lKX0pLGR8fFUuc2V0KCJvZmZzZXQiLEQvdGhpcy5kdXJhdGlvbiksaC5wdXNoKFUpfSk7Y29uc3QgZj1bLi4ubC52YWx1ZXMoKV0sdj1bLi4uYS52YWx1ZXMoKV07aWYoZCl7''@;'; put 'put ''Y29uc3QgTT1oWzBdLEQ9bmV3IE1hcChNKTtNLnNldCgib2Zmc2V0IiwwKSxELnNldCgib2Zmc2V0IiwxKSxoPVtNLERdfXJldHVybiB5cSh0aGlzLmVsZW1lbnQsaCxmLHYsdGhpcy5kdXJhdGlvbix0aGlzLnN0YXJ0VGltZSx0aGlzLmVhc2luZywhMSl9fWNsYXNzIFRldCBleHRlbmRzIGpI''@;'; put 'put ''e2tleWZyYW1lcztwcmVTdHlsZVByb3BzO3Bvc3RTdHlsZVByb3BzO19zdHJldGNoU3RhcnRpbmdLZXlmcmFtZTt0aW1pbmdzO2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE09ITEpe3N1cGVyKGwsYSx2LmRlbGF5KSx0aGlzLmtleWZyYW1lcz1kLHRoaXMucHJlU3R5bGVQcm9wcz1oLHRoaXMu''@;'; put 'put ''cG9zdFN0eWxlUHJvcHM9Zix0aGlzLl9zdHJldGNoU3RhcnRpbmdLZXlmcmFtZT1NLHRoaXMudGltaW5ncz17ZHVyYXRpb246di5kdXJhdGlvbixkZWxheTp2LmRlbGF5LGVhc2luZzp2LmVhc2luZ319Y29udGFpbnNBbmltYXRpb24oKXtyZXR1cm4gdGhpcy5rZXlmcmFtZXMubGVuZ3RoPjF9''@;'; put 'put ''YnVpbGRLZXlmcmFtZXMoKXtsZXQgbD10aGlzLmtleWZyYW1lcyx7ZGVsYXk6YSxkdXJhdGlvbjpkLGVhc2luZzpofT10aGlzLnRpbWluZ3M7aWYodGhpcy5fc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWUmJmEpe2NvbnN0IGY9W10sdj1kK2EsTT1hL3YsRD1uZXcgTWFwKGxbMF0pO0Quc2V0KCJv''@;'; put 'put ''ZmZzZXQiLDApLGYucHVzaChEKTtjb25zdCBVPW5ldyBNYXAobFswXSk7VS5zZXQoIm9mZnNldCIscXBlKE0pKSxmLnB1c2goVSk7Y29uc3QgdGU9bC5sZW5ndGgtMTtmb3IobGV0IG9lPTE7b2U8PXRlO29lKyspe2xldCB2ZT1uZXcgTWFwKGxbb2VdKTtjb25zdCB3ZT12ZS5nZXQoIm9mZnNl''@;'; put 'put ''dCIpO3ZlLnNldCgib2Zmc2V0IixxcGUoKGErd2UqZCkvdikpLGYucHVzaCh2ZSl9ZD12LGE9MCxoPSIiLGw9Zn1yZXR1cm4geXEodGhpcy5lbGVtZW50LGwsdGhpcy5wcmVTdHlsZVByb3BzLHRoaXMucG9zdFN0eWxlUHJvcHMsZCxhLGgsITApfX1mdW5jdGlvbiBxcGUoYyxsPTMpe2NvbnN0''@;'; put 'put ''IGE9TWF0aC5wb3coMTAsbC0xKTtyZXR1cm4gTWF0aC5yb3VuZChjKmEpL2F9ZnVuY3Rpb24gSnBlKGMsbCxhLGQsaCxmLHYsTSxELFUsdGUsb2UsdmUpe3JldHVybnt0eXBlOjAsZWxlbWVudDpjLHRyaWdnZXJOYW1lOmwsaXNSZW1vdmFsVHJhbnNpdGlvbjpoLGZyb21TdGF0ZTphLGZyb21T''@;'; put 'put ''dHlsZXM6Zix0b1N0YXRlOmQsdG9TdHlsZXM6dix0aW1lbGluZXM6TSxxdWVyaWVkRWxlbWVudHM6RCxwcmVTdHlsZVByb3BzOlUscG9zdFN0eWxlUHJvcHM6dGUsdG90YWxUaW1lOm9lLGVycm9yczp2ZX19Y29uc3Qgd3E9e307Y2xhc3MgUXBle190cmlnZ2VyTmFtZTthc3Q7X3N0YXRlU3R5''@;'; put 'put ''bGVzO2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLl90cmlnZ2VyTmFtZT1sLHRoaXMuYXN0PWEsdGhpcy5fc3RhdGVTdHlsZXM9ZH1tYXRjaChsLGEsZCxoKXtyZXR1cm4gZnVuY3Rpb24ga2V0KGMsbCxhLGQsaCl7cmV0dXJuIGMuc29tZShmPT5mKGwsYSxkLGgpKX0odGhpcy5hc3QubWF0Y2hl''@;'; put 'put ''cnMsbCxhLGQsaCl9YnVpbGRTdHlsZXMobCxhLGQpe2xldCBoPXRoaXMuX3N0YXRlU3R5bGVzLmdldCgiKiIpO3JldHVybiB2b2lkIDAhPT1sJiYoaD10aGlzLl9zdGF0ZVN0eWxlcy5nZXQobD8udG9TdHJpbmcoKSl8fGgpLGg/aC5idWlsZFN0eWxlcyhhLGQpOm5ldyBNYXB9YnVpbGQobCxh''@;'; put 'put ''LGQsaCxmLHYsTSxELFUsdGUpe2NvbnN0IG9lPVtdLHZlPXRoaXMuYXN0Lm9wdGlvbnMmJnRoaXMuYXN0Lm9wdGlvbnMucGFyYW1zfHx3cSxGZT10aGlzLmJ1aWxkU3R5bGVzKGQsTSYmTS5wYXJhbXN8fHdxLG9lKSxXZT1EJiZELnBhcmFtc3x8d3EsbnQ9dGhpcy5idWlsZFN0eWxlcyhoLFdl''@;'; put 'put ''LG9lKSxkdD1uZXcgU2V0LG10PW5ldyBNYXAsJHQ9bmV3IE1hcCx6dD0idm9pZCI9PT1oLHluPXtwYXJhbXM6ZTRlKFdlLHZlKSxkZWxheTp0aGlzLmFzdC5vcHRpb25zPy5kZWxheX0sZ249dGU/W106YnEobCxhLHRoaXMuYXN0LmFuaW1hdGlvbixmLHYsRmUsbnQseW4sVSxvZSk7bGV0IHdu''@;'; put 'put ''PTA7cmV0dXJuIGduLmZvckVhY2goUm49Pnt3bj1NYXRoLm1heChSbi5kdXJhdGlvbitSbi5kZWxheSx3bil9KSxvZS5sZW5ndGg/SnBlKGEsdGhpcy5fdHJpZ2dlck5hbWUsZCxoLHp0LEZlLG50LFtdLFtdLG10LCR0LHduLG9lKTooZ24uZm9yRWFjaChSbj0+e2NvbnN0IERyPVJuLmVsZW1l''@;'; put 'put ''bnQsTHI9QzIobXQsRHIsbmV3IFNldCk7Um4ucHJlU3R5bGVQcm9wcy5mb3JFYWNoKE1yPT5Mci5hZGQoTXIpKTtjb25zdCBkcj1DMigkdCxEcixuZXcgU2V0KTtSbi5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKE1yPT5kci5hZGQoTXIpKSxEciE9PWEmJmR0LmFkZChEcil9KSxKcGUoYSx0aGlz''@;'; put 'put ''Ll90cmlnZ2VyTmFtZSxkLGgsenQsRmUsbnQsZ24sWy4uLmR0LnZhbHVlcygpXSxtdCwkdCx3bikpfX1mdW5jdGlvbiBlNGUoYyxsKXtjb25zdCBhPXsuLi5sfTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYykuZm9yRWFjaCgoW2QsaF0pPT57bnVsbCE9aCYmKGFbZF09aCl9KSxhfWNsYXNzIERl''@;'; put 'put ''dHtzdHlsZXM7ZGVmYXVsdFBhcmFtcztub3JtYWxpemVyO2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnN0eWxlcz1sLHRoaXMuZGVmYXVsdFBhcmFtcz1hLHRoaXMubm9ybWFsaXplcj1kfWJ1aWxkU3R5bGVzKGwsYSl7Y29uc3QgZD1uZXcgTWFwLGg9ZTRlKGwsdGhpcy5kZWZhdWx0UGFyYW1z''@;'; put 'put ''KTtyZXR1cm4gdGhpcy5zdHlsZXMuc3R5bGVzLmZvckVhY2goZj0+eyJzdHJpbmciIT10eXBlb2YgZiYmZi5mb3JFYWNoKCh2LE0pPT57diYmKHY9Q0EodixoLGEpKTtjb25zdCBEPXRoaXMubm9ybWFsaXplci5ub3JtYWxpemVQcm9wZXJ0eU5hbWUoTSxhKTt2PXRoaXMubm9ybWFsaXplci5u''@;'; put 'put ''b3JtYWxpemVTdHlsZVZhbHVlKE0sRCx2LGEpLGQuc2V0KE0sdil9KX0pLGR9fWNsYXNzIFJldHtuYW1lO2FzdDtfbm9ybWFsaXplcjt0cmFuc2l0aW9uRmFjdG9yaWVzPVtdO2ZhbGxiYWNrVHJhbnNpdGlvbjtzdGF0ZXM9bmV3IE1hcDtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5uYW1lPWws''@;'; put 'put ''dGhpcy5hc3Q9YSx0aGlzLl9ub3JtYWxpemVyPWQsYS5zdGF0ZXMuZm9yRWFjaChoPT57dGhpcy5zdGF0ZXMuc2V0KGgubmFtZSxuZXcgRGV0KGguc3R5bGUsaC5vcHRpb25zJiZoLm9wdGlvbnMucGFyYW1zfHx7fSxkKSl9KSx0NGUodGhpcy5zdGF0ZXMsInRydWUiLCIxIiksdDRlKHRoaXMu''@;'; put 'put ''c3RhdGVzLCJmYWxzZSIsIjAiKSxhLnRyYW5zaXRpb25zLmZvckVhY2goaD0+e3RoaXMudHJhbnNpdGlvbkZhY3Rvcmllcy5wdXNoKG5ldyBRcGUobCxoLHRoaXMuc3RhdGVzKSl9KSx0aGlzLmZhbGxiYWNrVHJhbnNpdGlvbj1mdW5jdGlvbiBMZXQoYyxsKXtyZXR1cm4gbmV3IFFwZShjLHt0''@;'; put 'put ''eXBlOkJvLlRyYW5zaXRpb24sYW5pbWF0aW9uOnt0eXBlOkJvLlNlcXVlbmNlLHN0ZXBzOltdLG9wdGlvbnM6bnVsbH0sbWF0Y2hlcnM6Wyh2LE0pPT4hMF0sb3B0aW9uczpudWxsLHF1ZXJ5Q291bnQ6MCxkZXBDb3VudDowfSxsKX0obCx0aGlzLnN0YXRlcyl9Z2V0IGNvbnRhaW5zUXVlcmll''@;'; put 'put ''cygpe3JldHVybiB0aGlzLmFzdC5xdWVyeUNvdW50PjB9bWF0Y2hUcmFuc2l0aW9uKGwsYSxkLGgpe3JldHVybiB0aGlzLnRyYW5zaXRpb25GYWN0b3JpZXMuZmluZCh2PT52Lm1hdGNoKGwsYSxkLGgpKXx8bnVsbH1tYXRjaFN0eWxlcyhsLGEsZCl7cmV0dXJuIHRoaXMuZmFsbGJhY2tUcmFu''@;'; put 'put ''c2l0aW9uLmJ1aWxkU3R5bGVzKGwsYSxkKX19ZnVuY3Rpb24gdDRlKGMsbCxhKXtjLmhhcyhsKT9jLmhhcyhhKXx8Yy5zZXQoYSxjLmdldChsKSk6Yy5oYXMoYSkmJmMuc2V0KGwsYy5nZXQoYSkpfWNvbnN0IE9ldD1uZXcgVkg7Y2xhc3MgUGV0e2JvZHlOb2RlO19kcml2ZXI7X25vcm1hbGl6''@;'; put 'put ''ZXI7X2FuaW1hdGlvbnM9bmV3IE1hcDtfcGxheWVyc0J5SWQ9bmV3IE1hcDtwbGF5ZXJzPVtdO2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLmJvZHlOb2RlPWwsdGhpcy5fZHJpdmVyPWEsdGhpcy5fbm9ybWFsaXplcj1kfXJlZ2lzdGVyKGwsYSl7Y29uc3QgZD1bXSxmPW1xKHRoaXMuX2RyaXZl''@;'; put 'put ''cixhLGQsW10pO2lmKGQubGVuZ3RoKXRocm93IGZ1bmN0aW9uIE5RZSgpe3JldHVybiBuZXcgUHIoMzUwMywhMSl9KCk7dGhpcy5fYW5pbWF0aW9ucy5zZXQobCxmKX1fYnVpbGRQbGF5ZXIobCxhLGQpe2NvbnN0IGg9bC5lbGVtZW50LGY9TnBlKHRoaXMuX25vcm1hbGl6ZXIsbC5rZXlmcmFt''@;'; put 'put ''ZXMsYSxkKTtyZXR1cm4gdGhpcy5fZHJpdmVyLmFuaW1hdGUoaCxmLGwuZHVyYXRpb24sbC5kZWxheSxsLmVhc2luZyxbXSwhMCl9Y3JlYXRlKGwsYSxkPXt9KXtjb25zdCBoPVtdLGY9dGhpcy5fYW5pbWF0aW9ucy5nZXQobCk7bGV0IHY7Y29uc3QgTT1uZXcgTWFwO2lmKGY/KHY9YnEodGhp''@;'; put 'put ''cy5fZHJpdmVyLGEsZiwibmctZW50ZXIiLG9xLG5ldyBNYXAsbmV3IE1hcCxkLE9ldCxoKSx2LmZvckVhY2godGU9Pntjb25zdCBvZT1DMihNLHRlLmVsZW1lbnQsbmV3IE1hcCk7dGUucG9zdFN0eWxlUHJvcHMuZm9yRWFjaCh2ZT0+b2Uuc2V0KHZlLG51bGwpKX0pKTooaC5wdXNoKGZ1bmN0''@;'; put 'put ''aW9uIFZRZSgpe3JldHVybiBuZXcgUHIoMzMwMCwhMSl9KCkpLHY9W10pLGgubGVuZ3RoKXRocm93IGZ1bmN0aW9uIEJRZSgpe3JldHVybiBuZXcgUHIoMzUwNCwhMSl9KCk7TS5mb3JFYWNoKCh0ZSxvZSk9Pnt0ZS5mb3JFYWNoKCh2ZSx3ZSk9Pnt0ZS5zZXQod2UsdGhpcy5fZHJpdmVyLmNv''@;'; put 'put ''bXB1dGVTdHlsZShvZSx3ZSxlNSkpfSl9KTtjb25zdCBVPUM2KHYubWFwKHRlPT57Y29uc3Qgb2U9TS5nZXQodGUuZWxlbWVudCk7cmV0dXJuIHRoaXMuX2J1aWxkUGxheWVyKHRlLG5ldyBNYXAsb2UpfSkpO3JldHVybiB0aGlzLl9wbGF5ZXJzQnlJZC5zZXQobCxVKSxVLm9uRGVzdHJveSgo''@;'; put 'put ''KT0+dGhpcy5kZXN0cm95KGwpKSx0aGlzLnBsYXllcnMucHVzaChVKSxVfWRlc3Ryb3kobCl7Y29uc3QgYT10aGlzLl9nZXRQbGF5ZXIobCk7YS5kZXN0cm95KCksdGhpcy5fcGxheWVyc0J5SWQuZGVsZXRlKGwpO2NvbnN0IGQ9dGhpcy5wbGF5ZXJzLmluZGV4T2YoYSk7ZD49MCYmdGhpcy5w''@;'; put 'put ''bGF5ZXJzLnNwbGljZShkLDEpfV9nZXRQbGF5ZXIobCl7Y29uc3QgYT10aGlzLl9wbGF5ZXJzQnlJZC5nZXQobCk7aWYoIWEpdGhyb3cgZnVuY3Rpb24galFlKCl7cmV0dXJuIG5ldyBQcigzMzAxLCExKX0oKTtyZXR1cm4gYX1saXN0ZW4obCxhLGQsaCl7Y29uc3QgZj1pcShhLCIiLCIiLCIi''@;'; put 'put ''KTtyZXR1cm4gbnEodGhpcy5fZ2V0UGxheWVyKGwpLGQsZixoKSwoKT0+e319Y29tbWFuZChsLGEsZCxoKXtpZigicmVnaXN0ZXIiPT1kKXJldHVybiB2b2lkIHRoaXMucmVnaXN0ZXIobCxoWzBdKTtpZigiY3JlYXRlIj09ZClyZXR1cm4gdm9pZCB0aGlzLmNyZWF0ZShsLGEsaFswXXx8e30p''@;'; put 'put ''O2NvbnN0IGY9dGhpcy5fZ2V0UGxheWVyKGwpO3N3aXRjaChkKXtjYXNlInBsYXkiOmYucGxheSgpO2JyZWFrO2Nhc2UicGF1c2UiOmYucGF1c2UoKTticmVhaztjYXNlInJlc2V0IjpmLnJlc2V0KCk7YnJlYWs7Y2FzZSJyZXN0YXJ0IjpmLnJlc3RhcnQoKTticmVhaztjYXNlImZpbmlzaCI6''@;'; put 'put ''Zi5maW5pc2goKTticmVhaztjYXNlImluaXQiOmYuaW5pdCgpO2JyZWFrO2Nhc2Uic2V0UG9zaXRpb24iOmYuc2V0UG9zaXRpb24ocGFyc2VGbG9hdChoWzBdKSk7YnJlYWs7Y2FzZSJkZXN0cm95Ijp0aGlzLmRlc3Ryb3kobCl9fX1jb25zdCBuNGU9Im5nLWFuaW1hdGUtcXVldWVkIixDcT0i''@;'; put 'put ''bmctYW5pbWF0ZS1kaXNhYmxlZCIsQmV0PVtdLHI0ZT17bmFtZXNwYWNlSWQ6IiIsc2V0Rm9yUmVtb3ZhbDohMSxzZXRGb3JNb3ZlOiExLGhhc0FuaW1hdGlvbjohMSxyZW1vdmVkQmVmb3JlUXVlcmllZDohMX0samV0PXtuYW1lc3BhY2VJZDoiIixzZXRGb3JNb3ZlOiExLHNldEZvclJlbW92''@;'; put 'put ''YWw6ITEsaGFzQW5pbWF0aW9uOiExLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiEwfSxZMz0iX19uZ19yZW1vdmVkIjtjbGFzcyBTcXtuYW1lc3BhY2VJZDt2YWx1ZTtvcHRpb25zO2dldCBwYXJhbXMoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnBhcmFtc31jb25zdHJ1Y3RvcihsLGE9IiIpe3RoaXMu''@;'; put 'put ''bmFtZXNwYWNlSWQ9YTtjb25zdCBkPWwmJmwuaGFzT3duUHJvcGVydHkoInZhbHVlIik7aWYodGhpcy52YWx1ZT1mdW5jdGlvbiBXZXQoYyl7cmV0dXJuIGM/P251bGx9KGQ/bC52YWx1ZTpsKSxkKXtjb25zdHt2YWx1ZTpmLC4uLnZ9PWw7dGhpcy5vcHRpb25zPXZ9ZWxzZSB0aGlzLm9wdGlv''@;'; put 'put ''bnM9e307dGhpcy5vcHRpb25zLnBhcmFtc3x8KHRoaXMub3B0aW9ucy5wYXJhbXM9e30pfWFic29yYk9wdGlvbnMobCl7Y29uc3QgYT1sLnBhcmFtcztpZihhKXtjb25zdCBkPXRoaXMub3B0aW9ucy5wYXJhbXM7T2JqZWN0LmtleXMoYSkuZm9yRWFjaChoPT57bnVsbD09ZFtoXSYmKGRbaF09''@;'; put 'put ''YVtoXSl9KX19fWNvbnN0IFNBPSJ2b2lkIixNcT1uZXcgU3EoU0EpO2NsYXNzIHpldHtpZDtob3N0RWxlbWVudDtfZW5naW5lO3BsYXllcnM9W107X3RyaWdnZXJzPW5ldyBNYXA7X3F1ZXVlPVtdO19lbGVtZW50TGlzdGVuZXJzPW5ldyBNYXA7X2hvc3RDbGFzc05hbWU7Y29uc3RydWN0b3Io''@;'; put 'put ''bCxhLGQpe3RoaXMuaWQ9bCx0aGlzLmhvc3RFbGVtZW50PWEsdGhpcy5fZW5naW5lPWQsdGhpcy5faG9zdENsYXNzTmFtZT0ibmctdG5zLSIrbCxPZihhLHRoaXMuX2hvc3RDbGFzc05hbWUpfWxpc3RlbihsLGEsZCxoKXtpZighdGhpcy5fdHJpZ2dlcnMuaGFzKGEpKXRocm93IGZ1bmN0aW9u''@;'; put 'put ''IHpRZSgpe3JldHVybiBuZXcgUHIoMzMwMiwhMSl9KCk7aWYobnVsbD09ZHx8MD09ZC5sZW5ndGgpdGhyb3cgZnVuY3Rpb24gVVFlKCl7cmV0dXJuIG5ldyBQcigzMzAzLCExKX0oKTtpZighZnVuY3Rpb24gWWV0KGMpe3JldHVybiJzdGFydCI9PWN8fCJkb25lIj09Y30oZCkpdGhyb3cgZnVu''@;'; put 'put ''Y3Rpb24gWlFlKCl7cmV0dXJuIG5ldyBQcigzNDAwLCExKX0oKTtjb25zdCBmPUMyKHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMsbCxbXSksdj17bmFtZTphLHBoYXNlOmQsY2FsbGJhY2s6aH07Zi5wdXNoKHYpO2NvbnN0IE09QzIodGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudCxsLG5ldyBN''@;'; put 'put ''YXApO3JldHVybiBNLmhhcyhhKXx8KE9mKGwsTEgpLE9mKGwsTEgrIi0iK2EpLE0uc2V0KGEsTXEpKSwoKT0+e3RoaXMuX2VuZ2luZS5hZnRlckZsdXNoKCgpPT57Y29uc3QgRD1mLmluZGV4T2Yodik7RD49MCYmZi5zcGxpY2UoRCwxKSx0aGlzLl90cmlnZ2Vycy5oYXMoYSl8fE0uZGVsZXRl''@;'; put 'put ''KGEpfSl9fXJlZ2lzdGVyKGwsYSl7cmV0dXJuIXRoaXMuX3RyaWdnZXJzLmhhcyhsKSYmKHRoaXMuX3RyaWdnZXJzLnNldChsLGEpLCEwKX1fZ2V0VHJpZ2dlcihsKXtjb25zdCBhPXRoaXMuX3RyaWdnZXJzLmdldChsKTtpZighYSl0aHJvdyBmdW5jdGlvbiBXUWUoKXtyZXR1cm4gbmV3IFBy''@;'; put 'put ''KDM0MDEsITEpfSgpO3JldHVybiBhfXRyaWdnZXIobCxhLGQsaD0hMCl7Y29uc3QgZj10aGlzLl9nZXRUcmlnZ2VyKGEpLHY9bmV3IHhxKHRoaXMuaWQsYSxsKTtsZXQgTT10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldChsKTtNfHwoT2YobCxMSCksT2YobCxMSCsiLSIrYSksdGhp''@;'; put 'put ''cy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5zZXQobCxNPW5ldyBNYXApKTtsZXQgRD1NLmdldChhKTtjb25zdCBVPW5ldyBTcShkLHRoaXMuaWQpO2lmKCEoZCYmZC5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKSkmJkQmJlUuYWJzb3JiT3B0aW9ucyhELm9wdGlvbnMpLE0uc2V0KGEsVSksRHx8''@;'; put 'put ''KEQ9TXEpLFUudmFsdWUhPT1TQSYmRC52YWx1ZT09PVUudmFsdWUpe2lmKCFmdW5jdGlvbiBLZXQoYyxsKXtjb25zdCBhPU9iamVjdC5rZXlzKGMpLGQ9T2JqZWN0LmtleXMobCk7aWYoYS5sZW5ndGghPWQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgaD0wO2g8YS5sZW5ndGg7aCsrKXtjb25z''@;'; put 'put ''dCBmPWFbaF07aWYoIWwuaGFzT3duUHJvcGVydHkoZil8fGNbZl0hPT1sW2ZdKXJldHVybiExfXJldHVybiEwfShELnBhcmFtcyxVLnBhcmFtcykpe2NvbnN0IFdlPVtdLG50PWYubWF0Y2hTdHlsZXMoRC52YWx1ZSxELnBhcmFtcyxXZSksZHQ9Zi5tYXRjaFN0eWxlcyhVLnZhbHVlLFUucGFy''@;'; put 'put ''YW1zLFdlKTtXZS5sZW5ndGg/dGhpcy5fZW5naW5lLnJlcG9ydEVycm9yKFdlKTp0aGlzLl9lbmdpbmUuYWZ0ZXJGbHVzaCgoKT0+eyQ5KGwsbnQpLF80KGwsZHQpfSl9cmV0dXJufWNvbnN0IHZlPUMyKHRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LGwsW10pO3ZlLmZvckVhY2goV2U9''@;'; put 'put ''PntXZS5uYW1lc3BhY2VJZD09dGhpcy5pZCYmV2UudHJpZ2dlck5hbWU9PWEmJldlLnF1ZXVlZCYmV2UuZGVzdHJveSgpfSk7bGV0IHdlPWYubWF0Y2hUcmFuc2l0aW9uKEQudmFsdWUsVS52YWx1ZSxsLFUucGFyYW1zKSxGZT0hMTtpZighd2Upe2lmKCFoKXJldHVybjt3ZT1mLmZhbGxiYWNr''@;'; put 'put ''VHJhbnNpdGlvbixGZT0hMH1yZXR1cm4gdGhpcy5fZW5naW5lLnRvdGFsUXVldWVkUGxheWVycysrLHRoaXMuX3F1ZXVlLnB1c2goe2VsZW1lbnQ6bCx0cmlnZ2VyTmFtZTphLHRyYW5zaXRpb246d2UsZnJvbVN0YXRlOkQsdG9TdGF0ZTpVLHBsYXllcjp2LGlzRmFsbGJhY2tUcmFuc2l0aW9u''@;'; put 'put ''OkZlfSksRmV8fChPZihsLG40ZSksdi5vblN0YXJ0KCgpPT57THcobCxuNGUpfSkpLHYub25Eb25lKCgpPT57bGV0IFdlPXRoaXMucGxheWVycy5pbmRleE9mKHYpO1dlPj0wJiZ0aGlzLnBsYXllcnMuc3BsaWNlKFdlLDEpO2NvbnN0IG50PXRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50''@;'; put 'put ''LmdldChsKTtpZihudCl7bGV0IGR0PW50LmluZGV4T2Yodik7ZHQ+PTAmJm50LnNwbGljZShkdCwxKX19KSx0aGlzLnBsYXllcnMucHVzaCh2KSx2ZS5wdXNoKHYpLHZ9ZGVyZWdpc3RlcihsKXt0aGlzLl90cmlnZ2Vycy5kZWxldGUobCksdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5m''@;'; put 'put ''b3JFYWNoKGE9PmEuZGVsZXRlKGwpKSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzLmZvckVhY2goKGEsZCk9Pnt0aGlzLl9lbGVtZW50TGlzdGVuZXJzLnNldChkLGEuZmlsdGVyKGg9PmgubmFtZSE9bCkpfSl9Y2xlYXJFbGVtZW50Q2FjaGUobCl7dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVu''@;'; put 'put ''dC5kZWxldGUobCksdGhpcy5fZWxlbWVudExpc3RlbmVycy5kZWxldGUobCk7Y29uc3QgYT10aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5nZXQobCk7YSYmKGEuZm9yRWFjaChkPT5kLmRlc3Ryb3koKSksdGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZGVsZXRlKGwpKX1fc2ln''@;'; put 'put ''bmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnMobCxhKXtjb25zdCBkPXRoaXMuX2VuZ2luZS5kcml2ZXIucXVlcnkobCxPSCwhMCk7ZC5mb3JFYWNoKGg9PntpZihoW1kzXSlyZXR1cm47Y29uc3QgZj10aGlzLl9lbmdpbmUuZmV0Y2hOYW1lc3BhY2VzQnlFbGVtZW50KGgpO2Yuc2l6ZT9mLmZv''@;'; put 'put ''ckVhY2godj0+di50cmlnZ2VyTGVhdmVBbmltYXRpb24oaCxhLCExLCEwKSk6dGhpcy5jbGVhckVsZW1lbnRDYWNoZShoKX0pLHRoaXMuX2VuZ2luZS5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoKCk9PmQuZm9yRWFjaChoPT50aGlzLmNsZWFyRWxlbWVudENhY2hlKGgpKSl9dHJpZ2dlckxl''@;'; put 'put ''YXZlQW5pbWF0aW9uKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQobCksdj1uZXcgTWFwO2lmKGYpe2NvbnN0IE09W107aWYoZi5mb3JFYWNoKChELFUpPT57aWYodi5zZXQoVSxELnZhbHVlKSx0aGlzLl90cmlnZ2Vycy5oYXMoVSkpe2NvbnN0IHRl''@;'; put 'put ''PXRoaXMudHJpZ2dlcihsLFUsU0EsaCk7dGUmJk0ucHVzaCh0ZSl9fSksTS5sZW5ndGgpcmV0dXJuIHRoaXMuX2VuZ2luZS5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLGwsITAsYSx2KSxkJiZDNihNKS5vbkRvbmUoKCk9PnRoaXMuX2VuZ2luZS5wcm9jZXNzTGVhdmVOb2RlKGwpKSwh''@;'; put 'put ''MH1yZXR1cm4hMX1wcmVwYXJlTGVhdmVBbmltYXRpb25MaXN0ZW5lcnMobCl7Y29uc3QgYT10aGlzLl9lbGVtZW50TGlzdGVuZXJzLmdldChsKSxkPXRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KGwpO2lmKGEmJmQpe2NvbnN0IGg9bmV3IFNldDthLmZvckVhY2goZj0+e2NvbnN0''@;'; put 'put ''IHY9Zi5uYW1lO2lmKGguaGFzKHYpKXJldHVybjtoLmFkZCh2KTtjb25zdCBEPXRoaXMuX3RyaWdnZXJzLmdldCh2KS5mYWxsYmFja1RyYW5zaXRpb24sVT1kLmdldCh2KXx8TXEsdGU9bmV3IFNxKFNBKSxvZT1uZXcgeHEodGhpcy5pZCx2LGwpO3RoaXMuX2VuZ2luZS50b3RhbFF1ZXVlZFBs''@;'; put 'put ''YXllcnMrKyx0aGlzLl9xdWV1ZS5wdXNoKHtlbGVtZW50OmwsdHJpZ2dlck5hbWU6dix0cmFuc2l0aW9uOkQsZnJvbVN0YXRlOlUsdG9TdGF0ZTp0ZSxwbGF5ZXI6b2UsaXNGYWxsYmFja1RyYW5zaXRpb246ITB9KX0pfX1yZW1vdmVOb2RlKGwsYSl7Y29uc3QgZD10aGlzLl9lbmdpbmU7aWYo''@;'; put 'put ''bC5jaGlsZEVsZW1lbnRDb3VudCYmdGhpcy5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnMobCxhKSx0aGlzLnRyaWdnZXJMZWF2ZUFuaW1hdGlvbihsLGEsITApKXJldHVybjtsZXQgaD0hMTtpZihkLnRvdGFsQW5pbWF0aW9ucyl7Y29uc3QgZj1kLnBsYXllcnMubGVuZ3RoP2QucGxh''@;'; put 'put ''eWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KGwpOltdO2lmKGYmJmYubGVuZ3RoKWg9ITA7ZWxzZXtsZXQgdj1sO2Zvcig7dj12LnBhcmVudE5vZGU7KWlmKGQuc3RhdGVzQnlFbGVtZW50LmdldCh2KSl7aD0hMDticmVha319fWlmKHRoaXMucHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlzdGVuZXJz''@;'; put 'put ''KGwpLGgpZC5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLGwsITEsYSk7ZWxzZXtjb25zdCBmPWxbWTNdOyghZnx8Zj09PXI0ZSkmJihkLmFmdGVyRmx1c2goKCk9PnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUobCkpLGQuZGVzdHJveUlubmVyQW5pbWF0aW9ucyhsKSxkLl9vblJlbW92YWxD''@;'; put 'put ''b21wbGV0ZShsLGEpKX19aW5zZXJ0Tm9kZShsLGEpe09mKGwsdGhpcy5faG9zdENsYXNzTmFtZSl9ZHJhaW5RdWV1ZWRUcmFuc2l0aW9ucyhsKXtjb25zdCBhPVtdO3JldHVybiB0aGlzLl9xdWV1ZS5mb3JFYWNoKGQ9Pntjb25zdCBoPWQucGxheWVyO2lmKGguZGVzdHJveWVkKXJldHVybjtj''@;'; put 'put ''b25zdCBmPWQuZWxlbWVudCx2PXRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KGYpO3YmJnYuZm9yRWFjaChNPT57aWYoTS5uYW1lPT1kLnRyaWdnZXJOYW1lKXtjb25zdCBEPWlxKGYsZC50cmlnZ2VyTmFtZSxkLmZyb21TdGF0ZS52YWx1ZSxkLnRvU3RhdGUudmFsdWUpO0QuX2RhdGE9bCxu''@;'; put 'put ''cShkLnBsYXllcixNLnBoYXNlLEQsTS5jYWxsYmFjayl9fSksaC5tYXJrZWRGb3JEZXN0cm95P3RoaXMuX2VuZ2luZS5hZnRlckZsdXNoKCgpPT57aC5kZXN0cm95KCl9KTphLnB1c2goZCl9KSx0aGlzLl9xdWV1ZT1bXSxhLnNvcnQoKGQsaCk9Pntjb25zdCBmPWQudHJhbnNpdGlvbi5hc3Qu''@;'; put 'put ''ZGVwQ291bnQsdj1oLnRyYW5zaXRpb24uYXN0LmRlcENvdW50O3JldHVybiAwPT1mfHwwPT12P2Ytdjp0aGlzLl9lbmdpbmUuZHJpdmVyLmNvbnRhaW5zRWxlbWVudChkLmVsZW1lbnQsaC5lbGVtZW50KT8xOi0xfSl9ZGVzdHJveShsKXt0aGlzLnBsYXllcnMuZm9yRWFjaChhPT5hLmRlc3Ry''@;'; put 'put ''b3koKSksdGhpcy5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnModGhpcy5ob3N0RWxlbWVudCxsKX19Y2xhc3MgVWV0e2JvZHlOb2RlO2RyaXZlcjtfbm9ybWFsaXplcjtwbGF5ZXJzPVtdO25ld0hvc3RFbGVtZW50cz1uZXcgTWFwO3BsYXllcnNCeUVsZW1lbnQ9bmV3IE1hcDtwbGF5''@;'; put 'put ''ZXJzQnlRdWVyaWVkRWxlbWVudD1uZXcgTWFwO3N0YXRlc0J5RWxlbWVudD1uZXcgTWFwO2Rpc2FibGVkTm9kZXM9bmV3IFNldDt0b3RhbEFuaW1hdGlvbnM9MDt0b3RhbFF1ZXVlZFBsYXllcnM9MDtfbmFtZXNwYWNlTG9va3VwPXt9O19uYW1lc3BhY2VMaXN0PVtdO19mbHVzaEZucz1bXTtf''@;'; put 'put ''d2hlblF1aWV0Rm5zPVtdO25hbWVzcGFjZXNCeUhvc3RFbGVtZW50PW5ldyBNYXA7Y29sbGVjdGVkRW50ZXJFbGVtZW50cz1bXTtjb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzPVtdO29uUmVtb3ZhbENvbXBsZXRlPShsLGEpPT57fTtfb25SZW1vdmFsQ29tcGxldGUobCxhKXt0aGlzLm9uUmVtb3Zh''@;'; put 'put ''bENvbXBsZXRlKGwsYSl9Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuYm9keU5vZGU9bCx0aGlzLmRyaXZlcj1hLHRoaXMuX25vcm1hbGl6ZXI9ZH1nZXQgcXVldWVkUGxheWVycygpe2NvbnN0IGw9W107cmV0dXJuIHRoaXMuX25hbWVzcGFjZUxpc3QuZm9yRWFjaChhPT57YS5wbGF5ZXJzLmZv''@;'; put 'put ''ckVhY2goZD0+e2QucXVldWVkJiZsLnB1c2goZCl9KX0pLGx9Y3JlYXRlTmFtZXNwYWNlKGwsYSl7Y29uc3QgZD1uZXcgemV0KGwsYSx0aGlzKTtyZXR1cm4gdGhpcy5ib2R5Tm9kZSYmdGhpcy5kcml2ZXIuY29udGFpbnNFbGVtZW50KHRoaXMuYm9keU5vZGUsYSk/dGhpcy5fYmFsYW5jZU5h''@;'; put 'put ''bWVzcGFjZUxpc3QoZCxhKToodGhpcy5uZXdIb3N0RWxlbWVudHMuc2V0KGEsZCksdGhpcy5jb2xsZWN0RW50ZXJFbGVtZW50KGEpKSx0aGlzLl9uYW1lc3BhY2VMb29rdXBbbF09ZH1fYmFsYW5jZU5hbWVzcGFjZUxpc3QobCxhKXtjb25zdCBkPXRoaXMuX25hbWVzcGFjZUxpc3QsaD10aGlz''@;'; put 'put ''Lm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50O2lmKGQubGVuZ3RoLTE+PTApe2xldCB2PSExLE09dGhpcy5kcml2ZXIuZ2V0UGFyZW50RWxlbWVudChhKTtmb3IoO007KXtjb25zdCBEPWguZ2V0KE0pO2lmKEQpe2NvbnN0IFU9ZC5pbmRleE9mKEQpO2Quc3BsaWNlKFUrMSwwLGwpLHY9ITA7YnJl''@;'; put 'put ''YWt9TT10aGlzLmRyaXZlci5nZXRQYXJlbnRFbGVtZW50KE0pfXZ8fGQudW5zaGlmdChsKX1lbHNlIGQucHVzaChsKTtyZXR1cm4gaC5zZXQoYSxsKSxsfXJlZ2lzdGVyKGwsYSl7bGV0IGQ9dGhpcy5fbmFtZXNwYWNlTG9va3VwW2xdO3JldHVybiBkfHwoZD10aGlzLmNyZWF0ZU5hbWVzcGFj''@;'; put 'put ''ZShsLGEpKSxkfXJlZ2lzdGVyVHJpZ2dlcihsLGEsZCl7bGV0IGg9dGhpcy5fbmFtZXNwYWNlTG9va3VwW2xdO2gmJmgucmVnaXN0ZXIoYSxkKSYmdGhpcy50b3RhbEFuaW1hdGlvbnMrK31kZXN0cm95KGwsYSl7bCYmKHRoaXMuYWZ0ZXJGbHVzaCgoKT0+e30pLHRoaXMuYWZ0ZXJGbHVzaEFu''@;'; put 'put ''aW1hdGlvbnNEb25lKCgpPT57Y29uc3QgZD10aGlzLl9mZXRjaE5hbWVzcGFjZShsKTt0aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50LmRlbGV0ZShkLmhvc3RFbGVtZW50KTtjb25zdCBoPXRoaXMuX25hbWVzcGFjZUxpc3QuaW5kZXhPZihkKTtoPj0wJiZ0aGlzLl9uYW1lc3BhY2VMaXN0''@;'; put 'put ''LnNwbGljZShoLDEpLGQuZGVzdHJveShhKSxkZWxldGUgdGhpcy5fbmFtZXNwYWNlTG9va3VwW2xdfSkpfV9mZXRjaE5hbWVzcGFjZShsKXtyZXR1cm4gdGhpcy5fbmFtZXNwYWNlTG9va3VwW2xdfWZldGNoTmFtZXNwYWNlc0J5RWxlbWVudChsKXtjb25zdCBhPW5ldyBTZXQsZD10aGlzLnN0''@;'; put 'put ''YXRlc0J5RWxlbWVudC5nZXQobCk7aWYoZClmb3IobGV0IGggb2YgZC52YWx1ZXMoKSlpZihoLm5hbWVzcGFjZUlkKXtjb25zdCBmPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGgubmFtZXNwYWNlSWQpO2YmJmEuYWRkKGYpfXJldHVybiBhfXRyaWdnZXIobCxhLGQsaCl7aWYoekgoYSkpe2NvbnN0''@;'; put 'put ''IGY9dGhpcy5fZmV0Y2hOYW1lc3BhY2UobCk7aWYoZilyZXR1cm4gZi50cmlnZ2VyKGEsZCxoKSwhMH1yZXR1cm4hMX1pbnNlcnROb2RlKGwsYSxkLGgpe2lmKCF6SChhKSlyZXR1cm47Y29uc3QgZj1hW1kzXTtpZihmJiZmLnNldEZvclJlbW92YWwpe2Yuc2V0Rm9yUmVtb3ZhbD0hMSxmLnNl''@;'; put 'put ''dEZvck1vdmU9ITA7Y29uc3Qgdj10aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMuaW5kZXhPZihhKTt2Pj0wJiZ0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMuc3BsaWNlKHYsMSl9aWYobCl7Y29uc3Qgdj10aGlzLl9mZXRjaE5hbWVzcGFjZShsKTt2JiZ2Lmluc2VydE5vZGUoYSxkKX1o''@;'; put 'put ''JiZ0aGlzLmNvbGxlY3RFbnRlckVsZW1lbnQoYSl9Y29sbGVjdEVudGVyRWxlbWVudChsKXt0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMucHVzaChsKX1tYXJrRWxlbWVudEFzRGlzYWJsZWQobCxhKXthP3RoaXMuZGlzYWJsZWROb2Rlcy5oYXMobCl8fCh0aGlzLmRpc2FibGVkTm9kZXMu''@;'; put 'put ''YWRkKGwpLE9mKGwsQ3EpKTp0aGlzLmRpc2FibGVkTm9kZXMuaGFzKGwpJiYodGhpcy5kaXNhYmxlZE5vZGVzLmRlbGV0ZShsKSxMdyhsLENxKSl9cmVtb3ZlTm9kZShsLGEsZCl7aWYoekgoYSkpe2NvbnN0IGg9bD90aGlzLl9mZXRjaE5hbWVzcGFjZShsKTpudWxsO2g/aC5yZW1vdmVOb2Rl''@;'; put 'put ''KGEsZCk6dGhpcy5tYXJrRWxlbWVudEFzUmVtb3ZlZChsLGEsITEsZCk7Y29uc3QgZj10aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50LmdldChhKTtmJiZmLmlkIT09bCYmZi5yZW1vdmVOb2RlKGEsZCl9ZWxzZSB0aGlzLl9vblJlbW92YWxDb21wbGV0ZShhLGQpfW1hcmtFbGVtZW50QXNS''@;'; put 'put ''ZW1vdmVkKGwsYSxkLGgsZil7dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLnB1c2goYSksYVtZM109e25hbWVzcGFjZUlkOmwsc2V0Rm9yUmVtb3ZhbDpoLGhhc0FuaW1hdGlvbjpkLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiExLHByZXZpb3VzVHJpZ2dlcnNWYWx1ZXM6Zn19bGlzdGVuKGws''@;'; put 'put ''YSxkLGgsZil7cmV0dXJuIHpIKGEpP3RoaXMuX2ZldGNoTmFtZXNwYWNlKGwpLmxpc3RlbihhLGQsaCxmKTooKT0+e319X2J1aWxkSW5zdHJ1Y3Rpb24obCxhLGQsaCxmKXtyZXR1cm4gbC50cmFuc2l0aW9uLmJ1aWxkKHRoaXMuZHJpdmVyLGwuZWxlbWVudCxsLmZyb21TdGF0ZS52YWx1ZSxs''@;'; put 'put ''LnRvU3RhdGUudmFsdWUsZCxoLGwuZnJvbVN0YXRlLm9wdGlvbnMsbC50b1N0YXRlLm9wdGlvbnMsYSxmKX1kZXN0cm95SW5uZXJBbmltYXRpb25zKGwpe2xldCBhPXRoaXMuZHJpdmVyLnF1ZXJ5KGwsT0gsITApO2EuZm9yRWFjaChkPT50aGlzLmRlc3Ryb3lBY3RpdmVBbmltYXRpb25zRm9y''@;'; put 'put ''RWxlbWVudChkKSksMCE9dGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5zaXplJiYoYT10aGlzLmRyaXZlci5xdWVyeShsLHNxLCEwKSxhLmZvckVhY2goZD0+dGhpcy5maW5pc2hBY3RpdmVRdWVyaWVkQW5pbWF0aW9uT25FbGVtZW50KGQpKSl9ZGVzdHJveUFjdGl2ZUFuaW1hdGlvbnNG''@;'; put 'put ''b3JFbGVtZW50KGwpe2NvbnN0IGE9dGhpcy5wbGF5ZXJzQnlFbGVtZW50LmdldChsKTthJiZhLmZvckVhY2goZD0+e2QucXVldWVkP2QubWFya2VkRm9yRGVzdHJveT0hMDpkLmRlc3Ryb3koKX0pfWZpbmlzaEFjdGl2ZVF1ZXJpZWRBbmltYXRpb25PbkVsZW1lbnQobCl7Y29uc3QgYT10aGlz''@;'; put 'put ''LnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldChsKTthJiZhLmZvckVhY2goZD0+ZC5maW5pc2goKSl9d2hlblJlbmRlcmluZ0RvbmUoKXtyZXR1cm4gbmV3IFByb21pc2UobD0+e2lmKHRoaXMucGxheWVycy5sZW5ndGgpcmV0dXJuIEM2KHRoaXMucGxheWVycykub25Eb25lKCgpPT5sKCkp''@;'; put 'put ''O2woKX0pfXByb2Nlc3NMZWF2ZU5vZGUobCl7Y29uc3QgYT1sW1kzXTtpZihhJiZhLnNldEZvclJlbW92YWwpe2lmKGxbWTNdPXI0ZSxhLm5hbWVzcGFjZUlkKXt0aGlzLmRlc3Ryb3lJbm5lckFuaW1hdGlvbnMobCk7Y29uc3QgZD10aGlzLl9mZXRjaE5hbWVzcGFjZShhLm5hbWVzcGFjZUlk''@;'; put 'put ''KTtkJiZkLmNsZWFyRWxlbWVudENhY2hlKGwpfXRoaXMuX29uUmVtb3ZhbENvbXBsZXRlKGwsYS5zZXRGb3JSZW1vdmFsKX1sLmNsYXNzTGlzdD8uY29udGFpbnMoQ3EpJiZ0aGlzLm1hcmtFbGVtZW50QXNEaXNhYmxlZChsLCExKSx0aGlzLmRyaXZlci5xdWVyeShsLCIubmctYW5pbWF0ZS1k''@;'; put 'put ''aXNhYmxlZCIsITApLmZvckVhY2goZD0+e3RoaXMubWFya0VsZW1lbnRBc0Rpc2FibGVkKGQsITEpfSl9Zmx1c2gobD0tMSl7bGV0IGE9W107aWYodGhpcy5uZXdIb3N0RWxlbWVudHMuc2l6ZSYmKHRoaXMubmV3SG9zdEVsZW1lbnRzLmZvckVhY2goKGQsaCk9PnRoaXMuX2JhbGFuY2VOYW1l''@;'; put 'put ''c3BhY2VMaXN0KGQsaCkpLHRoaXMubmV3SG9zdEVsZW1lbnRzLmNsZWFyKCkpLHRoaXMudG90YWxBbmltYXRpb25zJiZ0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoKWZvcihsZXQgZD0wO2Q8dGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aDtkKyspT2YodGhpcy5j''@;'; put 'put ''b2xsZWN0ZWRFbnRlckVsZW1lbnRzW2RdLCJuZy1zdGFyLWluc2VydGVkIik7aWYodGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgmJih0aGlzLnRvdGFsUXVldWVkUGxheWVyc3x8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aCkpe2NvbnN0IGQ9W107dHJ5e2E9dGhpcy5fZmx1''@;'; put 'put ''c2hBbmltYXRpb25zKGQsbCl9ZmluYWxseXtmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grKylkW2hdKCl9fWVsc2UgZm9yKGxldCBkPTA7ZDx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoO2QrKyl0aGlzLnByb2Nlc3NMZWF2ZU5vZGUodGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1l''@;'; put 'put ''bnRzW2RdKTtpZih0aGlzLnRvdGFsUXVldWVkUGxheWVycz0wLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGg9MCx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5fZmx1c2hGbnMuZm9yRWFjaChkPT5kKCkpLHRoaXMuX2ZsdXNoRm5zPVtdLHRoaXMu''@;'; put 'put ''X3doZW5RdWlldEZucy5sZW5ndGgpe2NvbnN0IGQ9dGhpcy5fd2hlblF1aWV0Rm5zO3RoaXMuX3doZW5RdWlldEZucz1bXSxhLmxlbmd0aD9DNihhKS5vbkRvbmUoKCk9PntkLmZvckVhY2goaD0+aCgpKX0pOmQuZm9yRWFjaChoPT5oKCkpfX1yZXBvcnRFcnJvcihsKXt0aHJvdyBmdW5jdGlv''@;'; put 'put ''biBZUWUoKXtyZXR1cm4gbmV3IFByKDM0MDIsITEpfSgpfV9mbHVzaEFuaW1hdGlvbnMobCxhKXtjb25zdCBkPW5ldyBWSCxoPVtdLGY9bmV3IE1hcCx2PVtdLE09bmV3IE1hcCxEPW5ldyBNYXAsVT1uZXcgTWFwLHRlPW5ldyBTZXQ7dGhpcy5kaXNhYmxlZE5vZGVzLmZvckVhY2goZXI9Pnt0''@;'; put 'put ''ZS5hZGQoZXIpO2NvbnN0IFRyPXRoaXMuZHJpdmVyLnF1ZXJ5KGVyLCIubmctYW5pbWF0ZS1xdWV1ZWQiLCEwKTtmb3IobGV0ICRyPTA7JHI8VHIubGVuZ3RoOyRyKyspdGUuYWRkKFRyWyRyXSl9KTtjb25zdCBvZT10aGlzLmJvZHlOb2RlLHZlPUFycmF5LmZyb20odGhpcy5zdGF0ZXNCeUVs''@;'; put 'put ''ZW1lbnQua2V5cygpKSx3ZT1vNGUodmUsdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzKSxGZT1uZXcgTWFwO2xldCBXZT0wO3dlLmZvckVhY2goKGVyLFRyKT0+e2NvbnN0ICRyPSJuZy1lbnRlciIrV2UrKztGZS5zZXQoVHIsJHIpLGVyLmZvckVhY2goYmk9Pk9mKGJpLCRyKSl9KTtjb25z''@;'; put 'put ''dCBudD1bXSxkdD1uZXcgU2V0LG10PW5ldyBTZXQ7Zm9yKGxldCBlcj0wO2VyPHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGg7ZXIrKyl7Y29uc3QgVHI9dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW2VyXSwkcj1UcltZM107JHImJiRyLnNldEZvclJlbW92YWwmJihudC5w''@;'; put 'put ''dXNoKFRyKSxkdC5hZGQoVHIpLCRyLmhhc0FuaW1hdGlvbj90aGlzLmRyaXZlci5xdWVyeShUciwiLm5nLXN0YXItaW5zZXJ0ZWQiLCEwKS5mb3JFYWNoKGJpPT5kdC5hZGQoYmkpKTptdC5hZGQoVHIpKX1jb25zdCAkdD1uZXcgTWFwLHp0PW80ZSh2ZSxBcnJheS5mcm9tKGR0KSk7enQuZm9y''@;'; put 'put ''RWFjaCgoZXIsVHIpPT57Y29uc3QgJHI9b3ErV2UrKzskdC5zZXQoVHIsJHIpLGVyLmZvckVhY2goYmk9Pk9mKGJpLCRyKSl9KSxsLnB1c2goKCk9Pnt3ZS5mb3JFYWNoKChlcixUcik9Pntjb25zdCAkcj1GZS5nZXQoVHIpO2VyLmZvckVhY2goYmk9Pkx3KGJpLCRyKSl9KSx6dC5mb3JFYWNo''@;'; put 'put ''KChlcixUcik9Pntjb25zdCAkcj0kdC5nZXQoVHIpO2VyLmZvckVhY2goYmk9Pkx3KGJpLCRyKSl9KSxudC5mb3JFYWNoKGVyPT57dGhpcy5wcm9jZXNzTGVhdmVOb2RlKGVyKX0pfSk7Y29uc3QgeW49W10sZ249W107Zm9yKGxldCBlcj10aGlzLl9uYW1lc3BhY2VMaXN0Lmxlbmd0aC0xO2Vy''@;'; put 'put ''Pj0wO2VyLS0pdGhpcy5fbmFtZXNwYWNlTGlzdFtlcl0uZHJhaW5RdWV1ZWRUcmFuc2l0aW9ucyhhKS5mb3JFYWNoKCRyPT57Y29uc3QgYmk9JHIucGxheWVyLE5pPSRyLmVsZW1lbnQ7aWYoeW4ucHVzaChiaSksdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aCl7Y29uc3QgUXQ9''@;'; put 'put ''TmlbWTNdO2lmKFF0JiZRdC5zZXRGb3JNb3ZlKXtpZihRdC5wcmV2aW91c1RyaWdnZXJzVmFsdWVzJiZRdC5wcmV2aW91c1RyaWdnZXJzVmFsdWVzLmhhcygkci50cmlnZ2VyTmFtZSkpe2NvbnN0IExuPVF0LnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMuZ2V0KCRyLnRyaWdnZXJOYW1lKSxpcj10''@;'; put 'put ''aGlzLnN0YXRlc0J5RWxlbWVudC5nZXQoJHIuZWxlbWVudCk7aWYoaXImJmlyLmhhcygkci50cmlnZ2VyTmFtZSkpe2NvbnN0IEV0PWlyLmdldCgkci50cmlnZ2VyTmFtZSk7RXQudmFsdWU9TG4saXIuc2V0KCRyLnRyaWdnZXJOYW1lLEV0KX19cmV0dXJuIHZvaWQgYmkuZGVzdHJveSgpfX1j''@;'; put 'put ''b25zdCB2YT0hb2V8fCF0aGlzLmRyaXZlci5jb250YWluc0VsZW1lbnQob2UsTmkpLHhhPSR0LmdldChOaSkscGE9RmUuZ2V0KE5pKSxacj10aGlzLl9idWlsZEluc3RydWN0aW9uKCRyLGQscGEseGEsdmEpO2lmKFpyLmVycm9ycyYmWnIuZXJyb3JzLmxlbmd0aClyZXR1cm4gdm9pZCBnbi5w''@;'; put 'put ''dXNoKFpyKTtpZih2YSlyZXR1cm4gYmkub25TdGFydCgoKT0+JDkoTmksWnIuZnJvbVN0eWxlcykpLGJpLm9uRGVzdHJveSgoKT0+XzQoTmksWnIudG9TdHlsZXMpKSx2b2lkIGgucHVzaChiaSk7aWYoJHIuaXNGYWxsYmFja1RyYW5zaXRpb24pcmV0dXJuIGJpLm9uU3RhcnQoKCk9PiQ5KE5p''@;'; put 'put ''LFpyLmZyb21TdHlsZXMpKSxiaS5vbkRlc3Ryb3koKCk9Pl80KE5pLFpyLnRvU3R5bGVzKSksdm9pZCBoLnB1c2goYmkpO2NvbnN0IHl0PVtdO1pyLnRpbWVsaW5lcy5mb3JFYWNoKFF0PT57UXQuc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWU9ITAsdGhpcy5kaXNhYmxlZE5vZGVzLmhhcyhRdC5l''@;'; put 'put ''bGVtZW50KXx8eXQucHVzaChRdCl9KSxaci50aW1lbGluZXM9eXQsZC5hcHBlbmQoTmksWnIudGltZWxpbmVzKSx2LnB1c2goe2luc3RydWN0aW9uOlpyLHBsYXllcjpiaSxlbGVtZW50Ok5pfSksWnIucXVlcmllZEVsZW1lbnRzLmZvckVhY2goUXQ9PkMyKE0sUXQsW10pLnB1c2goYmkpKSxa''@;'; put 'put ''ci5wcmVTdHlsZVByb3BzLmZvckVhY2goKFF0LExuKT0+e2lmKFF0LnNpemUpe2xldCBpcj1ELmdldChMbik7aXJ8fEQuc2V0KExuLGlyPW5ldyBTZXQpLFF0LmZvckVhY2goKEV0LFh0KT0+aXIuYWRkKFh0KSl9fSksWnIucG9zdFN0eWxlUHJvcHMuZm9yRWFjaCgoUXQsTG4pPT57bGV0IGly''@;'; put 'put ''PVUuZ2V0KExuKTtpcnx8VS5zZXQoTG4saXI9bmV3IFNldCksUXQuZm9yRWFjaCgoRXQsWHQpPT5pci5hZGQoWHQpKX0pfSk7aWYoZ24ubGVuZ3RoKXtjb25zdCBlcj1bXTtnbi5mb3JFYWNoKFRyPT57ZXIucHVzaChmdW5jdGlvbiBHUWUoKXtyZXR1cm4gbmV3IFByKDM1MDUsITEpfSgpKX0p''@;'; put 'put ''LHluLmZvckVhY2goVHI9PlRyLmRlc3Ryb3koKSksdGhpcy5yZXBvcnRFcnJvcihlcil9Y29uc3Qgd249bmV3IE1hcCxSbj1uZXcgTWFwO3YuZm9yRWFjaChlcj0+e2NvbnN0IFRyPWVyLmVsZW1lbnQ7ZC5oYXMoVHIpJiYoUm4uc2V0KFRyLFRyKSx0aGlzLl9iZWZvcmVBbmltYXRpb25CdWls''@;'; put 'put ''ZChlci5wbGF5ZXIubmFtZXNwYWNlSWQsZXIuaW5zdHJ1Y3Rpb24sd24pKX0pLGguZm9yRWFjaChlcj0+e2NvbnN0IFRyPWVyLmVsZW1lbnQ7dGhpcy5fZ2V0UHJldmlvdXNQbGF5ZXJzKFRyLCExLGVyLm5hbWVzcGFjZUlkLGVyLnRyaWdnZXJOYW1lLG51bGwpLmZvckVhY2goYmk9PntDMih3''@;'; put 'put ''bixUcixbXSkucHVzaChiaSksYmkuZGVzdHJveSgpfSl9KTtjb25zdCBEcj1udC5maWx0ZXIoZXI9Pmw0ZShlcixELFUpKSxMcj1uZXcgTWFwO2E0ZShMcix0aGlzLmRyaXZlcixtdCxVLGU1KS5mb3JFYWNoKGVyPT57bDRlKGVyLEQsVSkmJkRyLnB1c2goZXIpfSk7Y29uc3QgTXI9bmV3IE1h''@;'; put 'put ''cDt3ZS5mb3JFYWNoKChlcixUcik9PnthNGUoTXIsdGhpcy5kcml2ZXIsbmV3IFNldChlciksRCwiISIpfSksRHIuZm9yRWFjaChlcj0+e2NvbnN0IFRyPUxyLmdldChlciksJHI9TXIuZ2V0KGVyKTtMci5zZXQoZXIsbmV3IE1hcChbLi4uVHI/LmVudHJpZXMoKT8/W10sLi4uJHI/LmVudHJp''@;'; put 'put ''ZXMoKT8/W11dKSl9KTtjb25zdCB2aT1bXSxObj1bXSxCcj17fTt2LmZvckVhY2goZXI9Pntjb25zdHtlbGVtZW50OlRyLHBsYXllcjokcixpbnN0cnVjdGlvbjpiaX09ZXI7aWYoZC5oYXMoVHIpKXtpZih0ZS5oYXMoVHIpKXJldHVybiAkci5vbkRlc3Ryb3koKCk9Pl80KFRyLGJpLnRvU3R5''@;'; put 'put ''bGVzKSksJHIuZGlzYWJsZWQ9ITAsJHIub3ZlcnJpZGVUb3RhbFRpbWUoYmkudG90YWxUaW1lKSx2b2lkIGgucHVzaCgkcik7bGV0IE5pPUJyO2lmKFJuLnNpemU+MSl7bGV0IHhhPVRyO2NvbnN0IHBhPVtdO2Zvcig7eGE9eGEucGFyZW50Tm9kZTspe2NvbnN0IFpyPVJuLmdldCh4YSk7aWYo''@;'; put 'put ''WnIpe05pPVpyO2JyZWFrfXBhLnB1c2goeGEpfXBhLmZvckVhY2goWnI9PlJuLnNldChacixOaSkpfWNvbnN0IHZhPXRoaXMuX2J1aWxkQW5pbWF0aW9uKCRyLm5hbWVzcGFjZUlkLGJpLHduLGYsTXIsTHIpO2lmKCRyLnNldFJlYWxQbGF5ZXIodmEpLE5pPT09QnIpdmkucHVzaCgkcik7ZWxz''@;'; put 'put ''ZXtjb25zdCB4YT10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KE5pKTt4YSYmeGEubGVuZ3RoJiYoJHIucGFyZW50UGxheWVyPUM2KHhhKSksaC5wdXNoKCRyKX19ZWxzZSAkOShUcixiaS5mcm9tU3R5bGVzKSwkci5vbkRlc3Ryb3koKCk9Pl80KFRyLGJpLnRvU3R5bGVzKSksTm4ucHVzaCgk''@;'; put 'put ''ciksdGUuaGFzKFRyKSYmaC5wdXNoKCRyKX0pLE5uLmZvckVhY2goZXI9Pntjb25zdCBUcj1mLmdldChlci5lbGVtZW50KTtpZihUciYmVHIubGVuZ3RoKXtjb25zdCAkcj1DNihUcik7ZXIuc2V0UmVhbFBsYXllcigkcil9fSksaC5mb3JFYWNoKGVyPT57ZXIucGFyZW50UGxheWVyP2VyLnN5''@;'; put 'put ''bmNQbGF5ZXJFdmVudHMoZXIucGFyZW50UGxheWVyKTplci5kZXN0cm95KCl9KTtmb3IobGV0IGVyPTA7ZXI8bnQubGVuZ3RoO2VyKyspe2NvbnN0IFRyPW50W2VyXSwkcj1UcltZM107aWYoTHcoVHIsb3EpLCRyJiYkci5oYXNBbmltYXRpb24pY29udGludWU7bGV0IGJpPVtdO2lmKE0uc2l6''@;'; put 'put ''ZSl7bGV0IHZhPU0uZ2V0KFRyKTt2YSYmdmEubGVuZ3RoJiZiaS5wdXNoKC4uLnZhKTtsZXQgeGE9dGhpcy5kcml2ZXIucXVlcnkoVHIsc3EsITApO2ZvcihsZXQgcGE9MDtwYTx4YS5sZW5ndGg7cGErKyl7bGV0IFpyPU0uZ2V0KHhhW3BhXSk7WnImJlpyLmxlbmd0aCYmYmkucHVzaCguLi5a''@;'; put 'put ''cil9fWNvbnN0IE5pPWJpLmZpbHRlcih2YT0+IXZhLmRlc3Ryb3llZCk7TmkubGVuZ3RoP0dldCh0aGlzLFRyLE5pKTp0aGlzLnByb2Nlc3NMZWF2ZU5vZGUoVHIpfXJldHVybiBudC5sZW5ndGg9MCx2aS5mb3JFYWNoKGVyPT57dGhpcy5wbGF5ZXJzLnB1c2goZXIpLGVyLm9uRG9uZSgoKT0+''@;'; put 'put ''e2VyLmRlc3Ryb3koKTtjb25zdCBUcj10aGlzLnBsYXllcnMuaW5kZXhPZihlcik7dGhpcy5wbGF5ZXJzLnNwbGljZShUciwxKX0pLGVyLnBsYXkoKX0pLHZpfWFmdGVyRmx1c2gobCl7dGhpcy5fZmx1c2hGbnMucHVzaChsKX1hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUobCl7dGhpcy5fd2hl''@;'; put 'put ''blF1aWV0Rm5zLnB1c2gobCl9X2dldFByZXZpb3VzUGxheWVycyhsLGEsZCxoLGYpe2xldCB2PVtdO2lmKGEpe2NvbnN0IE09dGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQobCk7TSYmKHY9TSl9ZWxzZXtjb25zdCBNPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQobCk7aWYoTSl7''@;'; put 'put ''Y29uc3QgRD0hZnx8Zj09U0E7TS5mb3JFYWNoKFU9PntVLnF1ZXVlZHx8IUQmJlUudHJpZ2dlck5hbWUhPWh8fHYucHVzaChVKX0pfX1yZXR1cm4oZHx8aCkmJih2PXYuZmlsdGVyKE09PiEoZCYmZCE9TS5uYW1lc3BhY2VJZHx8aCYmaCE9TS50cmlnZ2VyTmFtZSkpKSx2fV9iZWZvcmVBbmlt''@;'; put 'put ''YXRpb25CdWlsZChsLGEsZCl7Y29uc3QgZj1hLmVsZW1lbnQsdj1hLmlzUmVtb3ZhbFRyYW5zaXRpb24/dm9pZCAwOmwsTT1hLmlzUmVtb3ZhbFRyYW5zaXRpb24/dm9pZCAwOmEudHJpZ2dlck5hbWU7Zm9yKGNvbnN0IEQgb2YgYS50aW1lbGluZXMpe2NvbnN0IFU9RC5lbGVtZW50LHRlPVUh''@;'; put 'put ''PT1mLG9lPUMyKGQsVSxbXSk7dGhpcy5fZ2V0UHJldmlvdXNQbGF5ZXJzKFUsdGUsdixNLGEudG9TdGF0ZSkuZm9yRWFjaCh3ZT0+e2NvbnN0IEZlPXdlLmdldFJlYWxQbGF5ZXIoKTtGZS5iZWZvcmVEZXN0cm95JiZGZS5iZWZvcmVEZXN0cm95KCksd2UuZGVzdHJveSgpLG9lLnB1c2god2Up''@;'; put 'put ''fSl9JDkoZixhLmZyb21TdHlsZXMpfV9idWlsZEFuaW1hdGlvbihsLGEsZCxoLGYsdil7Y29uc3QgTT1hLnRyaWdnZXJOYW1lLEQ9YS5lbGVtZW50LFU9W10sdGU9bmV3IFNldCxvZT1uZXcgU2V0LHZlPWEudGltZWxpbmVzLm1hcChGZT0+e2NvbnN0IFdlPUZlLmVsZW1lbnQ7dGUuYWRkKFdl''@;'; put 'put ''KTtjb25zdCBudD1XZVtZM107aWYobnQmJm50LnJlbW92ZWRCZWZvcmVRdWVyaWVkKXJldHVybiBuZXcgTlQoRmUuZHVyYXRpb24sRmUuZGVsYXkpO2NvbnN0IGR0PVdlIT09RCxtdD1mdW5jdGlvbiAkZXQoYyl7Y29uc3QgbD1bXTtyZXR1cm4gczRlKGMsbCksbH0oKGQuZ2V0KFdlKXx8QmV0''@;'; put 'put ''KS5tYXAod249PnduLmdldFJlYWxQbGF5ZXIoKSkpLmZpbHRlcih3bj0+ISF3bi5lbGVtZW50JiZ3bi5lbGVtZW50PT09V2UpLCR0PWYuZ2V0KFdlKSx6dD12LmdldChXZSkseW49TnBlKHRoaXMuX25vcm1hbGl6ZXIsRmUua2V5ZnJhbWVzLCR0LHp0KSxnbj10aGlzLl9idWlsZFBsYXllcihG''@;'; put 'put ''ZSx5bixtdCk7aWYoRmUuc3ViVGltZWxpbmUmJmgmJm9lLmFkZChXZSksZHQpe2NvbnN0IHduPW5ldyB4cShsLE0sV2UpO3duLnNldFJlYWxQbGF5ZXIoZ24pLFUucHVzaCh3bil9cmV0dXJuIGdufSk7VS5mb3JFYWNoKEZlPT57QzIodGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudCxGZS5l''@;'; put 'put ''bGVtZW50LFtdKS5wdXNoKEZlKSxGZS5vbkRvbmUoKCk9PmZ1bmN0aW9uIFpldChjLGwsYSl7bGV0IGQ9Yy5nZXQobCk7aWYoZCl7aWYoZC5sZW5ndGgpe2NvbnN0IGg9ZC5pbmRleE9mKGEpO2Quc3BsaWNlKGgsMSl9MD09ZC5sZW5ndGgmJmMuZGVsZXRlKGwpfXJldHVybiBkfSh0aGlzLnBs''@;'; put 'put ''YXllcnNCeVF1ZXJpZWRFbGVtZW50LEZlLmVsZW1lbnQsRmUpKX0pLHRlLmZvckVhY2goRmU9Pk9mKEZlLFdwZSkpO2NvbnN0IHdlPUM2KHZlKTtyZXR1cm4gd2Uub25EZXN0cm95KCgpPT57dGUuZm9yRWFjaChGZT0+THcoRmUsV3BlKSksXzQoRCxhLnRvU3R5bGVzKX0pLG9lLmZvckVhY2go''@;'; put 'put ''RmU9PntDMihoLEZlLFtdKS5wdXNoKHdlKX0pLHdlfV9idWlsZFBsYXllcihsLGEsZCl7cmV0dXJuIGEubGVuZ3RoPjA/dGhpcy5kcml2ZXIuYW5pbWF0ZShsLmVsZW1lbnQsYSxsLmR1cmF0aW9uLGwuZGVsYXksbC5lYXNpbmcsZCk6bmV3IE5UKGwuZHVyYXRpb24sbC5kZWxheSl9fWNsYXNz''@;'; put 'put ''IHhxe25hbWVzcGFjZUlkO3RyaWdnZXJOYW1lO2VsZW1lbnQ7X3BsYXllcj1uZXcgTlQ7X2NvbnRhaW5zUmVhbFBsYXllcj0hMTtfcXVldWVkQ2FsbGJhY2tzPW5ldyBNYXA7ZGVzdHJveWVkPSExO3BhcmVudFBsYXllcj1udWxsO21hcmtlZEZvckRlc3Ryb3k9ITE7ZGlzYWJsZWQ9ITE7cXVl''@;'; put 'put ''dWVkPSEwO3RvdGFsVGltZT0wO2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLm5hbWVzcGFjZUlkPWwsdGhpcy50cmlnZ2VyTmFtZT1hLHRoaXMuZWxlbWVudD1kfXNldFJlYWxQbGF5ZXIobCl7dGhpcy5fY29udGFpbnNSZWFsUGxheWVyfHwodGhpcy5fcGxheWVyPWwsdGhpcy5fcXVldWVkQ2Fs''@;'; put 'put ''bGJhY2tzLmZvckVhY2goKGEsZCk9PnthLmZvckVhY2goaD0+bnEobCxkLHZvaWQgMCxoKSl9KSx0aGlzLl9xdWV1ZWRDYWxsYmFja3MuY2xlYXIoKSx0aGlzLl9jb250YWluc1JlYWxQbGF5ZXI9ITAsdGhpcy5vdmVycmlkZVRvdGFsVGltZShsLnRvdGFsVGltZSksdGhpcy5xdWV1ZWQ9ITEp''@;'; put 'put ''fWdldFJlYWxQbGF5ZXIoKXtyZXR1cm4gdGhpcy5fcGxheWVyfW92ZXJyaWRlVG90YWxUaW1lKGwpe3RoaXMudG90YWxUaW1lPWx9c3luY1BsYXllckV2ZW50cyhsKXtjb25zdCBhPXRoaXMuX3BsYXllcjthLnRyaWdnZXJDYWxsYmFjayYmbC5vblN0YXJ0KCgpPT5hLnRyaWdnZXJDYWxsYmFj''@;'; put 'put ''aygic3RhcnQiKSksbC5vbkRvbmUoKCk9PnRoaXMuZmluaXNoKCkpLGwub25EZXN0cm95KCgpPT50aGlzLmRlc3Ryb3koKSl9X3F1ZXVlRXZlbnQobCxhKXtDMih0aGlzLl9xdWV1ZWRDYWxsYmFja3MsbCxbXSkucHVzaChhKX1vbkRvbmUobCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZl''@;'; put 'put ''bnQoImRvbmUiLGwpLHRoaXMuX3BsYXllci5vbkRvbmUobCl9b25TdGFydChsKXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgic3RhcnQiLGwpLHRoaXMuX3BsYXllci5vblN0YXJ0KGwpfW9uRGVzdHJveShsKXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgiZGVzdHJveSIs''@;'; put 'put ''bCksdGhpcy5fcGxheWVyLm9uRGVzdHJveShsKX1pbml0KCl7dGhpcy5fcGxheWVyLmluaXQoKX1oYXNTdGFydGVkKCl7cmV0dXJuIXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIuaGFzU3RhcnRlZCgpfXBsYXkoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5wbGF5KCl9cGF1c2UoKXsh''@;'; put 'put ''dGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5wYXVzZSgpfXJlc3RhcnQoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5yZXN0YXJ0KCl9ZmluaXNoKCl7dGhpcy5fcGxheWVyLmZpbmlzaCgpfWRlc3Ryb3koKXt0aGlzLmRlc3Ryb3llZD0hMCx0aGlzLl9wbGF5ZXIuZGVzdHJveSgpfXJl''@;'; put 'put ''c2V0KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucmVzZXQoKX1zZXRQb3NpdGlvbihsKXt0aGlzLnF1ZXVlZHx8dGhpcy5fcGxheWVyLnNldFBvc2l0aW9uKGwpfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMucXVldWVkPzA6dGhpcy5fcGxheWVyLmdldFBvc2l0aW9uKCl9dHJpZ2dl''@;'; put 'put ''ckNhbGxiYWNrKGwpe2NvbnN0IGE9dGhpcy5fcGxheWVyO2EudHJpZ2dlckNhbGxiYWNrJiZhLnRyaWdnZXJDYWxsYmFjayhsKX19ZnVuY3Rpb24gekgoYyl7cmV0dXJuIGMmJjE9PT1jLm5vZGVUeXBlfWZ1bmN0aW9uIGk0ZShjLGwpe2NvbnN0IGE9Yy5zdHlsZS5kaXNwbGF5O3JldHVybiBj''@;'; put 'put ''LnN0eWxlLmRpc3BsYXk9bD8/Im5vbmUiLGF9ZnVuY3Rpb24gYTRlKGMsbCxhLGQsaCl7Y29uc3QgZj1bXTthLmZvckVhY2goRD0+Zi5wdXNoKGk0ZShEKSkpO2NvbnN0IHY9W107ZC5mb3JFYWNoKChELFUpPT57Y29uc3QgdGU9bmV3IE1hcDtELmZvckVhY2gob2U9Pntjb25zdCB2ZT1sLmNv''@;'; put 'put ''bXB1dGVTdHlsZShVLG9lLGgpO3RlLnNldChvZSx2ZSksKCF2ZXx8MD09dmUubGVuZ3RoKSYmKFVbWTNdPWpldCx2LnB1c2goVSkpfSksYy5zZXQoVSx0ZSl9KTtsZXQgTT0wO3JldHVybiBhLmZvckVhY2goRD0+aTRlKEQsZltNKytdKSksdn1mdW5jdGlvbiBvNGUoYyxsKXtjb25zdCBhPW5l''@;'; put 'put ''dyBNYXA7aWYoYy5mb3JFYWNoKE09PmEuc2V0KE0sW10pKSwwPT1sLmxlbmd0aClyZXR1cm4gYTtjb25zdCBoPW5ldyBTZXQobCksZj1uZXcgTWFwO2Z1bmN0aW9uIHYoTSl7aWYoIU0pcmV0dXJuIDE7bGV0IEQ9Zi5nZXQoTSk7aWYoRClyZXR1cm4gRDtjb25zdCBVPU0ucGFyZW50Tm9kZTty''@;'; put 'put ''ZXR1cm4gRD1hLmhhcyhVKT9VOmguaGFzKFUpPzE6dihVKSxmLnNldChNLEQpLER9cmV0dXJuIGwuZm9yRWFjaChNPT57Y29uc3QgRD12KE0pOzEhPT1EJiZhLmdldChEKS5wdXNoKE0pfSksYX1mdW5jdGlvbiBPZihjLGwpe2MuY2xhc3NMaXN0Py5hZGQobCl9ZnVuY3Rpb24gTHcoYyxsKXtj''@;'; put 'put ''LmNsYXNzTGlzdD8ucmVtb3ZlKGwpfWZ1bmN0aW9uIEdldChjLGwsYSl7QzYoYSkub25Eb25lKCgpPT5jLnByb2Nlc3NMZWF2ZU5vZGUobCkpfWZ1bmN0aW9uIHM0ZShjLGwpe2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7YSsrKXtjb25zdCBkPWNbYV07ZCBpbnN0YW5jZW9mIHJmZT9zNGUoZC5w''@;'; put 'put ''bGF5ZXJzLGwpOmwucHVzaChkKX19ZnVuY3Rpb24gbDRlKGMsbCxhKXtjb25zdCBkPWEuZ2V0KGMpO2lmKCFkKXJldHVybiExO2xldCBoPWwuZ2V0KGMpO3JldHVybiBoP2QuZm9yRWFjaChmPT5oLmFkZChmKSk6bC5zZXQoYyxkKSxhLmRlbGV0ZShjKSwhMH1jbGFzcyBNQXtfZHJpdmVyO19u''@;'; put 'put ''b3JtYWxpemVyO190cmFuc2l0aW9uRW5naW5lO190aW1lbGluZUVuZ2luZTtfdHJpZ2dlckNhY2hlPXt9O29uUmVtb3ZhbENvbXBsZXRlPShsLGEpPT57fTtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5fZHJpdmVyPWEsdGhpcy5fbm9ybWFsaXplcj1kLHRoaXMuX3RyYW5zaXRpb25FbmdpbmU9''@;'; put 'put ''bmV3IFVldChsLmJvZHksYSxkKSx0aGlzLl90aW1lbGluZUVuZ2luZT1uZXcgUGV0KGwuYm9keSxhLGQpLHRoaXMuX3RyYW5zaXRpb25FbmdpbmUub25SZW1vdmFsQ29tcGxldGU9KGgsZik9PnRoaXMub25SZW1vdmFsQ29tcGxldGUoaCxmKX1yZWdpc3RlclRyaWdnZXIobCxhLGQsaCxmKXtj''@;'; put 'put ''b25zdCB2PWwrIi0iK2g7bGV0IE09dGhpcy5fdHJpZ2dlckNhY2hlW3ZdO2lmKCFNKXtjb25zdCBEPVtdLHRlPW1xKHRoaXMuX2RyaXZlcixmLEQsW10pO2lmKEQubGVuZ3RoKXRocm93IGZ1bmN0aW9uIEZRZSgpe3JldHVybiBuZXcgUHIoMzQwNCwhMSl9KCk7TT1mdW5jdGlvbiBJZXQoYyxs''@;'; put 'put ''LGEpe3JldHVybiBuZXcgUmV0KGMsbCxhKX0oaCx0ZSx0aGlzLl9ub3JtYWxpemVyKSx0aGlzLl90cmlnZ2VyQ2FjaGVbdl09TX10aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlZ2lzdGVyVHJpZ2dlcihhLGgsTSl9cmVnaXN0ZXIobCxhKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlZ2lzdGVy''@;'; put 'put ''KGwsYSl9ZGVzdHJveShsLGEpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuZGVzdHJveShsLGEpfW9uSW5zZXJ0KGwsYSxkLGgpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuaW5zZXJ0Tm9kZShsLGEsZCxoKX1vblJlbW92ZShsLGEsZCl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5yZW1vdmVOb2Rl''@;'; put 'put ''KGwsYSxkKX1kaXNhYmxlQW5pbWF0aW9ucyhsLGEpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUubWFya0VsZW1lbnRBc0Rpc2FibGVkKGwsYSl9cHJvY2VzcyhsLGEsZCxoKXtpZigiQCI9PWQuY2hhckF0KDApKXtjb25zdFtmLHZdPVZwZShkKTt0aGlzLl90aW1lbGluZUVuZ2luZS5jb21tYW5k''@;'; put 'put ''KGYsYSx2LGgpfWVsc2UgdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS50cmlnZ2VyKGwsYSxkLGgpfWxpc3RlbihsLGEsZCxoLGYpe2lmKCJAIj09ZC5jaGFyQXQoMCkpe2NvbnN0W3YsTV09VnBlKGQpO3JldHVybiB0aGlzLl90aW1lbGluZUVuZ2luZS5saXN0ZW4odixhLE0sZil9cmV0dXJuIHRo''@;'; put 'put ''aXMuX3RyYW5zaXRpb25FbmdpbmUubGlzdGVuKGwsYSxkLGgsZil9Zmx1c2gobD0tMSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5mbHVzaChsKX1nZXQgcGxheWVycygpe3JldHVyblsuLi50aGlzLl90cmFuc2l0aW9uRW5naW5lLnBsYXllcnMsLi4udGhpcy5fdGltZWxpbmVFbmdpbmUucGxh''@;'; put 'put ''eWVyc119d2hlblJlbmRlcmluZ0RvbmUoKXtyZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS53aGVuUmVuZGVyaW5nRG9uZSgpfWFmdGVyRmx1c2hBbmltYXRpb25zRG9uZShsKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLmFmdGVyRmx1c2hBbmltYXRpb25zRG9uZShsKX19bGV0IHFldD0o''@;'; put 'put ''KCk9PntjbGFzcyBje19lbGVtZW50O19zdGFydFN0eWxlcztfZW5kU3R5bGVzO3N0YXRpYyBpbml0aWFsU3R5bGVzQnlFbGVtZW50PW5ldyBXZWFrTWFwO19zdGF0ZT0wO19pbml0aWFsU3R5bGVzO2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9lbGVtZW50PWEsdGhpcy5fc3RhcnRTdHlsZXM9''@;'; put 'put ''ZCx0aGlzLl9lbmRTdHlsZXM9aDtsZXQgZj1jLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuZ2V0KGEpO2Z8fGMuaW5pdGlhbFN0eWxlc0J5RWxlbWVudC5zZXQoYSxmPW5ldyBNYXApLHRoaXMuX2luaXRpYWxTdHlsZXM9Zn1zdGFydCgpe3RoaXMuX3N0YXRlPDEmJih0aGlzLl9zdGFydFN0eWxl''@;'; put 'put ''cyYmXzQodGhpcy5fZWxlbWVudCx0aGlzLl9zdGFydFN0eWxlcyx0aGlzLl9pbml0aWFsU3R5bGVzKSx0aGlzLl9zdGF0ZT0xKX1maW5pc2goKXt0aGlzLnN0YXJ0KCksdGhpcy5fc3RhdGU8MiYmKF80KHRoaXMuX2VsZW1lbnQsdGhpcy5faW5pdGlhbFN0eWxlcyksdGhpcy5fZW5kU3R5bGVz''@;'; put 'put ''JiYoXzQodGhpcy5fZWxlbWVudCx0aGlzLl9lbmRTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcz1udWxsKSx0aGlzLl9zdGF0ZT0xKX1kZXN0cm95KCl7dGhpcy5maW5pc2goKSx0aGlzLl9zdGF0ZTwzJiYoYy5pbml0aWFsU3R5bGVzQnlFbGVtZW50LmRlbGV0ZSh0aGlzLl9lbGVtZW50KSx0aGlz''@;'; put 'put ''Ll9zdGFydFN0eWxlcyYmKCQ5KHRoaXMuX2VsZW1lbnQsdGhpcy5fc3RhcnRTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcz1udWxsKSx0aGlzLl9lbmRTdHlsZXMmJigkOSh0aGlzLl9lbGVtZW50LHRoaXMuX2VuZFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzPW51bGwpLF80KHRoaXMuX2VsZW1lbnQs''@;'; put 'put ''dGhpcy5faW5pdGlhbFN0eWxlcyksdGhpcy5fc3RhdGU9Myl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBFcShjKXtsZXQgbD1udWxsO3JldHVybiBjLmZvckVhY2goKGEsZCk9PnsoZnVuY3Rpb24gSmV0KGMpe3JldHVybiJkaXNwbGF5Ij09PWN8fCJwb3NpdGlvbiI9PT1jfSkoZCkmJihsPWx8''@;'; put 'put ''fG5ldyBNYXAsbC5zZXQoZCxhKSl9KSxsfWNsYXNzIGM0ZXtlbGVtZW50O2tleWZyYW1lcztvcHRpb25zO19zcGVjaWFsU3R5bGVzO19vbkRvbmVGbnM9W107X29uU3RhcnRGbnM9W107X29uRGVzdHJveUZucz1bXTtfZHVyYXRpb247X2RlbGF5O19pbml0aWFsaXplZD0hMTtfZmluaXNoZWQ9''@;'; put 'put ''ITE7X3N0YXJ0ZWQ9ITE7X2Rlc3Ryb3llZD0hMTtfZmluYWxLZXlmcmFtZTtfb3JpZ2luYWxPbkRvbmVGbnM9W107X29yaWdpbmFsT25TdGFydEZucz1bXTtkb21QbGF5ZXI7dGltZT0wO3BhcmVudFBsYXllcj1udWxsO2N1cnJlbnRTbmFwc2hvdD1uZXcgTWFwO2NvbnN0cnVjdG9yKGwsYSxk''@;'; put 'put ''LGgpe3RoaXMuZWxlbWVudD1sLHRoaXMua2V5ZnJhbWVzPWEsdGhpcy5vcHRpb25zPWQsdGhpcy5fc3BlY2lhbFN0eWxlcz1oLHRoaXMuX2R1cmF0aW9uPWQuZHVyYXRpb24sdGhpcy5fZGVsYXk9ZC5kZWxheXx8MCx0aGlzLnRpbWU9dGhpcy5fZHVyYXRpb24rdGhpcy5fZGVsYXl9X29uRmlu''@;'; put 'put ''aXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRG9uZUZucz1bXSl9aW5pdCgpe3RoaXMuX2J1aWxkUGxheWVyKCksdGhpcy5fcHJlcGFyZVBsYXllckJlZm9yZVN0YXJ0KCl9X2J1aWxkUGxheWVy''@;'; put 'put ''KCl7aWYodGhpcy5faW5pdGlhbGl6ZWQpcmV0dXJuO3RoaXMuX2luaXRpYWxpemVkPSEwO2NvbnN0IGw9dGhpcy5rZXlmcmFtZXM7dGhpcy5kb21QbGF5ZXI9dGhpcy5fdHJpZ2dlcldlYkFuaW1hdGlvbih0aGlzLmVsZW1lbnQsbCx0aGlzLm9wdGlvbnMpLHRoaXMuX2ZpbmFsS2V5ZnJhbWU9''@;'; put 'put ''bC5sZW5ndGg/bFtsLmxlbmd0aC0xXTpuZXcgTWFwO2NvbnN0IGE9KCk9PnRoaXMuX29uRmluaXNoKCk7dGhpcy5kb21QbGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcigiZmluaXNoIixhKSx0aGlzLm9uRGVzdHJveSgoKT0+e3RoaXMuZG9tUGxheWVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImZpbmlz''@;'; put 'put ''aCIsYSl9KX1fcHJlcGFyZVBsYXllckJlZm9yZVN0YXJ0KCl7dGhpcy5fZGVsYXk/dGhpcy5fcmVzZXREb21QbGF5ZXJTdGF0ZSgpOnRoaXMuZG9tUGxheWVyLnBhdXNlKCl9X2NvbnZlcnRLZXlmcmFtZXNUb09iamVjdChsKXtjb25zdCBhPVtdO3JldHVybiBsLmZvckVhY2goZD0+e2EucHVz''@;'; put 'put ''aChPYmplY3QuZnJvbUVudHJpZXMoZCkpfSksYX1fdHJpZ2dlcldlYkFuaW1hdGlvbihsLGEsZCl7cmV0dXJuIGwuYW5pbWF0ZSh0aGlzLl9jb252ZXJ0S2V5ZnJhbWVzVG9PYmplY3QoYSksZCl9b25TdGFydChsKXt0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnMucHVzaChsKSx0aGlzLl9vblN0''@;'; put 'put ''YXJ0Rm5zLnB1c2gobCl9b25Eb25lKGwpe3RoaXMuX29yaWdpbmFsT25Eb25lRm5zLnB1c2gobCksdGhpcy5fb25Eb25lRm5zLnB1c2gobCl9b25EZXN0cm95KGwpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKGwpfXBsYXkoKXt0aGlzLl9idWlsZFBsYXllcigpLHRoaXMuaGFzU3RhcnRlZCgp''@;'; put 'put ''fHwodGhpcy5fb25TdGFydEZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9zdGFydGVkPSEwLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuc3RhcnQoKSksdGhpcy5kb21QbGF5ZXIucGxheSgpfXBhdXNlKCl7dGhpcy5pbml0KCks''@;'; put 'put ''dGhpcy5kb21QbGF5ZXIucGF1c2UoKX1maW5pc2goKXt0aGlzLmluaXQoKSx0aGlzLl9zcGVjaWFsU3R5bGVzJiZ0aGlzLl9zcGVjaWFsU3R5bGVzLmZpbmlzaCgpLHRoaXMuX29uRmluaXNoKCksdGhpcy5kb21QbGF5ZXIuZmluaXNoKCl9cmVzZXQoKXt0aGlzLl9yZXNldERvbVBsYXllclN0''@;'; put 'put ''YXRlKCksdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fb25TdGFydEZucz10aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnMsdGhpcy5fb25Eb25lRm5zPXRoaXMuX29yaWdpbmFsT25Eb25lRm5zfV9yZXNldERvbVBsYXllclN0YXRlKCl7''@;'; put 'put ''dGhpcy5kb21QbGF5ZXImJnRoaXMuZG9tUGxheWVyLmNhbmNlbCgpfXJlc3RhcnQoKXt0aGlzLnJlc2V0KCksdGhpcy5wbGF5KCl9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfWRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fcmVz''@;'; put 'put ''ZXREb21QbGF5ZXJTdGF0ZSgpLHRoaXMuX29uRmluaXNoKCksdGhpcy5fc3BlY2lhbFN0eWxlcyYmdGhpcy5fc3BlY2lhbFN0eWxlcy5kZXN0cm95KCksdGhpcy5fb25EZXN0cm95Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfXNldFBvc2l0aW9uKGwpe3ZvaWQg''@;'; put 'put ''MD09PXRoaXMuZG9tUGxheWVyJiZ0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXllci5jdXJyZW50VGltZT1sKnRoaXMudGltZX1nZXRQb3NpdGlvbigpe3JldHVybisodGhpcy5kb21QbGF5ZXIuY3VycmVudFRpbWU/PzApL3RoaXMudGltZX1nZXQgdG90YWxUaW1lKCl7cmV0dXJuIHRoaXMuX2Rl''@;'; put 'put ''bGF5K3RoaXMuX2R1cmF0aW9ufWJlZm9yZURlc3Ryb3koKXtjb25zdCBsPW5ldyBNYXA7dGhpcy5oYXNTdGFydGVkKCkmJnRoaXMuX2ZpbmFsS2V5ZnJhbWUuZm9yRWFjaCgoZCxoKT0+eyJvZmZzZXQiIT09aCYmbC5zZXQoaCx0aGlzLl9maW5pc2hlZD9kOmRxKHRoaXMuZWxlbWVudCxoKSl9''@;'; put 'put ''KSx0aGlzLmN1cnJlbnRTbmFwc2hvdD1sfXRyaWdnZXJDYWxsYmFjayhsKXtjb25zdCBhPSJzdGFydCI9PT1sP3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2EuZm9yRWFjaChkPT5kKCkpLGEubGVuZ3RoPTB9fWNsYXNzIHU0ZXt2YWxpZGF0ZVN0eWxlUHJvcGVydHkobCl7cmV0''@;'; put 'put ''dXJuITB9dmFsaWRhdGVBbmltYXRhYmxlU3R5bGVQcm9wZXJ0eShsKXtyZXR1cm4hMH1jb250YWluc0VsZW1lbnQobCxhKXtyZXR1cm4ganBlKGwsYSl9Z2V0UGFyZW50RWxlbWVudChsKXtyZXR1cm4gYXEobCl9cXVlcnkobCxhLGQpe3JldHVybiB6cGUobCxhLGQpfWNvbXB1dGVTdHlsZShs''@;'; put 'put ''LGEsZCl7cmV0dXJuIGRxKGwsYSl9YW5pbWF0ZShsLGEsZCxoLGYsdj1bXSl7Y29uc3QgRD17ZHVyYXRpb246ZCxkZWxheTpoLGZpbGw6MD09aD8iYm90aCI6ImZvcndhcmRzIn07ZiYmKEQuZWFzaW5nPWYpO2NvbnN0IFU9bmV3IE1hcCx0ZT12LmZpbHRlcih3ZT0+d2UgaW5zdGFuY2VvZiBj''@;'; put 'put ''NGUpOyhmdW5jdGlvbiBhZXQoYyxsKXtyZXR1cm4gMD09PWN8fDA9PT1sfSkoZCxoKSYmdGUuZm9yRWFjaCh3ZT0+e3dlLmN1cnJlbnRTbmFwc2hvdC5mb3JFYWNoKChGZSxXZSk9PlUuc2V0KFdlLEZlKSl9KTtsZXQgb2U9ZnVuY3Rpb24gbmV0KGMpe3JldHVybiBjLmxlbmd0aD9jWzBdaW5z''@;'; put 'put ''dGFuY2VvZiBNYXA/YzpjLm1hcChsPT5uZXcgTWFwKE9iamVjdC5lbnRyaWVzKGwpKSk6W119KGEpLm1hcCh3ZT0+bmV3IE1hcCh3ZSkpO29lPWZ1bmN0aW9uIG9ldChjLGwsYSl7aWYoYS5zaXplJiZsLmxlbmd0aCl7bGV0IGQ9bFswXSxoPVtdO2lmKGEuZm9yRWFjaCgoZix2KT0+e2QuaGFz''@;'; put 'put ''KHYpfHxoLnB1c2godiksZC5zZXQodixmKX0pLGgubGVuZ3RoKWZvcihsZXQgZj0xO2Y8bC5sZW5ndGg7ZisrKXtsZXQgdj1sW2ZdO2guZm9yRWFjaChNPT52LnNldChNLGRxKGMsTSkpKX19cmV0dXJuIGx9KGwsb2UsVSk7Y29uc3QgdmU9ZnVuY3Rpb24gWGV0KGMsbCl7bGV0IGE9bnVsbCxk''@;'; put 'put ''PW51bGw7cmV0dXJuIEFycmF5LmlzQXJyYXkobCkmJmwubGVuZ3RoPyhhPUVxKGxbMF0pLGwubGVuZ3RoPjEmJihkPUVxKGxbbC5sZW5ndGgtMV0pKSk6bCBpbnN0YW5jZW9mIE1hcCYmKGE9RXEobCkpLGF8fGQ/bmV3IHFldChjLGEsZCk6bnVsbH0obCxvZSk7cmV0dXJuIG5ldyBjNGUobCxv''@;'; put 'put ''ZSxELHZlKX19Y29uc3QgZDRlPSJALmRpc2FibGVkIjtjbGFzcyBoNGV7bmFtZXNwYWNlSWQ7ZGVsZWdhdGU7ZW5naW5lO19vbkRlc3Ryb3k7XHUwMjc1dHlwZT0wO2NvbnN0cnVjdG9yKGwsYSxkLGgpe3RoaXMubmFtZXNwYWNlSWQ9bCx0aGlzLmRlbGVnYXRlPWEsdGhpcy5lbmdpbmU9ZCx0''@;'; put 'put ''aGlzLl9vbkRlc3Ryb3k9aH1nZXQgZGF0YSgpe3JldHVybiB0aGlzLmRlbGVnYXRlLmRhdGF9ZGVzdHJveU5vZGUobCl7dGhpcy5kZWxlZ2F0ZS5kZXN0cm95Tm9kZT8uKGwpfWRlc3Ryb3koKXt0aGlzLmVuZ2luZS5kZXN0cm95KHRoaXMubmFtZXNwYWNlSWQsdGhpcy5kZWxlZ2F0ZSksdGhp''@;'; put 'put ''cy5lbmdpbmUuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKCgpPT57cXVldWVNaWNyb3Rhc2soKCk9Pnt0aGlzLmRlbGVnYXRlLmRlc3Ryb3koKX0pfSksdGhpcy5fb25EZXN0cm95Py4oKX1jcmVhdGVFbGVtZW50KGwsYSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlRWxlbWVudChsLGEp''@;'; put 'put ''fWNyZWF0ZUNvbW1lbnQobCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlQ29tbWVudChsKX1jcmVhdGVUZXh0KGwpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZVRleHQobCl9YXBwZW5kQ2hpbGQobCxhKXt0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKGwsYSksdGhpcy5lbmdpbmUu''@;'; put 'put ''b25JbnNlcnQodGhpcy5uYW1lc3BhY2VJZCxhLGwsITEpfWluc2VydEJlZm9yZShsLGEsZCxoPSEwKXt0aGlzLmRlbGVnYXRlLmluc2VydEJlZm9yZShsLGEsZCksdGhpcy5lbmdpbmUub25JbnNlcnQodGhpcy5uYW1lc3BhY2VJZCxhLGwsaCl9cmVtb3ZlQ2hpbGQobCxhLGQpe3RoaXMucGFy''@;'; put 'put ''ZW50Tm9kZShhKSYmdGhpcy5lbmdpbmUub25SZW1vdmUodGhpcy5uYW1lc3BhY2VJZCxhLHRoaXMuZGVsZWdhdGUpfXNlbGVjdFJvb3RFbGVtZW50KGwsYSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuc2VsZWN0Um9vdEVsZW1lbnQobCxhKX1wYXJlbnROb2RlKGwpe3JldHVybiB0aGlzLmRlbGVn''@;'; put 'put ''YXRlLnBhcmVudE5vZGUobCl9bmV4dFNpYmxpbmcobCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUubmV4dFNpYmxpbmcobCl9c2V0QXR0cmlidXRlKGwsYSxkLGgpe3RoaXMuZGVsZWdhdGUuc2V0QXR0cmlidXRlKGwsYSxkLGgpfXJlbW92ZUF0dHJpYnV0ZShsLGEsZCl7dGhpcy5kZWxlZ2F0ZS5y''@;'; put 'put ''ZW1vdmVBdHRyaWJ1dGUobCxhLGQpfWFkZENsYXNzKGwsYSl7dGhpcy5kZWxlZ2F0ZS5hZGRDbGFzcyhsLGEpfXJlbW92ZUNsYXNzKGwsYSl7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVDbGFzcyhsLGEpfXNldFN0eWxlKGwsYSxkLGgpe3RoaXMuZGVsZWdhdGUuc2V0U3R5bGUobCxhLGQsaCl9cmVt''@;'; put 'put ''b3ZlU3R5bGUobCxhLGQpe3RoaXMuZGVsZWdhdGUucmVtb3ZlU3R5bGUobCxhLGQpfXNldFByb3BlcnR5KGwsYSxkKXsiQCI9PWEuY2hhckF0KDApJiZhPT1kNGU/dGhpcy5kaXNhYmxlQW5pbWF0aW9ucyhsLCEhZCk6dGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eShsLGEsZCl9c2V0VmFsdWUo''@;'; put 'put ''bCxhKXt0aGlzLmRlbGVnYXRlLnNldFZhbHVlKGwsYSl9bGlzdGVuKGwsYSxkLGgpe3JldHVybiB0aGlzLmRlbGVnYXRlLmxpc3RlbihsLGEsZCxoKX1kaXNhYmxlQW5pbWF0aW9ucyhsLGEpe3RoaXMuZW5naW5lLmRpc2FibGVBbmltYXRpb25zKGwsYSl9fWNsYXNzIFFldCBleHRlbmRzIGg0''@;'; put 'put ''ZXtmYWN0b3J5O2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7c3VwZXIoYSxkLGgsZiksdGhpcy5mYWN0b3J5PWwsdGhpcy5uYW1lc3BhY2VJZD1hfXNldFByb3BlcnR5KGwsYSxkKXsiQCI9PWEuY2hhckF0KDApPyIuIj09YS5jaGFyQXQoMSkmJmE9PWQ0ZT90aGlzLmRpc2FibGVBbmltYXRpb25z''@;'; put 'put ''KGwsZD12b2lkIDA9PT1kfHwhIWQpOnRoaXMuZW5naW5lLnByb2Nlc3ModGhpcy5uYW1lc3BhY2VJZCxsLGEuc2xpY2UoMSksZCk6dGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eShsLGEsZCl9bGlzdGVuKGwsYSxkLGgpe2lmKCJAIj09YS5jaGFyQXQoMCkpe2NvbnN0IGY9ZnVuY3Rpb24gZXR0''@;'; put 'put ''KGMpe3N3aXRjaChjKXtjYXNlImJvZHkiOnJldHVybiBkb2N1bWVudC5ib2R5O2Nhc2UiZG9jdW1lbnQiOnJldHVybiBkb2N1bWVudDtjYXNlIndpbmRvdyI6cmV0dXJuIHdpbmRvdztkZWZhdWx0OnJldHVybiBjfX0obCk7bGV0IHY9YS5zbGljZSgxKSxNPSIiO3JldHVybiJAIiE9di5jaGFy''@;'; put 'put ''QXQoMCkmJihbdixNXT1mdW5jdGlvbiB0dHQoYyl7Y29uc3QgbD1jLmluZGV4T2YoIi4iKTtyZXR1cm5bYy5zdWJzdHJpbmcoMCxsKSxjLnNsaWNlKGwrMSldfSh2KSksdGhpcy5lbmdpbmUubGlzdGVuKHRoaXMubmFtZXNwYWNlSWQsZix2LE0sRD0+e3RoaXMuZmFjdG9yeS5zY2hlZHVsZUxp''@;'; put 'put ''c3RlbmVyQ2FsbGJhY2soRC5fZGF0YXx8LTEsZCxEKX0pfXJldHVybiB0aGlzLmRlbGVnYXRlLmxpc3RlbihsLGEsZCxoKX19Y2xhc3MgbnR0e2RlbGVnYXRlO2VuZ2luZTtfem9uZTtfY3VycmVudElkPTA7X21pY3JvdGFza0lkPTE7X2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlcj1bXTtfcmVu''@;'; put 'put ''ZGVyZXJDYWNoZT1uZXcgTWFwO19jZFJlY3VyRGVwdGg9MDtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5kZWxlZ2F0ZT1sLHRoaXMuZW5naW5lPWEsdGhpcy5fem9uZT1kLGEub25SZW1vdmFsQ29tcGxldGU9KGgsZik9PntmPy5yZW1vdmVDaGlsZChudWxsLGgpfX1jcmVhdGVSZW5kZXJlcihs''@;'; put 'put ''LGEpe2NvbnN0IGg9dGhpcy5kZWxlZ2F0ZS5jcmVhdGVSZW5kZXJlcihsLGEpO2lmKCFsfHwhYT8uZGF0YT8uYW5pbWF0aW9uKXtjb25zdCBVPXRoaXMuX3JlbmRlcmVyQ2FjaGU7bGV0IHRlPVUuZ2V0KGgpO3JldHVybiB0ZXx8KHRlPW5ldyBoNGUoIiIsaCx0aGlzLmVuZ2luZSwoKT0+VS5k''@;'; put 'put ''ZWxldGUoaCkpLFUuc2V0KGgsdGUpKSx0ZX1jb25zdCBmPWEuaWQsdj1hLmlkKyItIit0aGlzLl9jdXJyZW50SWQ7dGhpcy5fY3VycmVudElkKyssdGhpcy5lbmdpbmUucmVnaXN0ZXIodixsKTtjb25zdCBNPVU9PntBcnJheS5pc0FycmF5KFUpP1UuZm9yRWFjaChNKTp0aGlzLmVuZ2luZS5y''@;'; put 'put ''ZWdpc3RlclRyaWdnZXIoZix2LGwsVS5uYW1lLFUpfTtyZXR1cm4gYS5kYXRhLmFuaW1hdGlvbi5mb3JFYWNoKE0pLG5ldyBRZXQodGhpcyx2LGgsdGhpcy5lbmdpbmUpfWJlZ2luKCl7dGhpcy5fY2RSZWN1ckRlcHRoKyssdGhpcy5kZWxlZ2F0ZS5iZWdpbiYmdGhpcy5kZWxlZ2F0ZS5iZWdp''@;'; put 'put ''bigpfV9zY2hlZHVsZUNvdW50VGFzaygpe3F1ZXVlTWljcm90YXNrKCgpPT57dGhpcy5fbWljcm90YXNrSWQrK30pfXNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjayhsLGEsZCl7aWYobD49MCYmbDx0aGlzLl9taWNyb3Rhc2tJZClyZXR1cm4gdm9pZCB0aGlzLl96b25lLnJ1bigoKT0+YShkKSk7''@;'; put 'put ''Y29uc3QgaD10aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXI7MD09aC5sZW5ndGgmJnF1ZXVlTWljcm90YXNrKCgpPT57dGhpcy5fem9uZS5ydW4oKCk9PntoLmZvckVhY2goZj0+e2NvbnN0W3YsTV09Zjt2KE0pfSksdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyPVtdfSl9KSxo''@;'; put 'put ''LnB1c2goW2EsZF0pfWVuZCgpe3RoaXMuX2NkUmVjdXJEZXB0aC0tLDA9PXRoaXMuX2NkUmVjdXJEZXB0aCYmdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX3NjaGVkdWxlQ291bnRUYXNrKCksdGhpcy5lbmdpbmUuZmx1c2godGhpcy5fbWljcm90YXNrSWQpfSksdGhp''@;'; put 'put ''cy5kZWxlZ2F0ZS5lbmQmJnRoaXMuZGVsZWdhdGUuZW5kKCl9d2hlblJlbmRlcmluZ0RvbmUoKXtyZXR1cm4gdGhpcy5lbmdpbmUud2hlblJlbmRlcmluZ0RvbmUoKX1jb21wb25lbnRSZXBsYWNlZChsKXt0aGlzLmVuZ2luZS5mbHVzaCgpLHRoaXMuZGVsZWdhdGUuY29tcG9uZW50UmVwbGFj''@;'; put 'put ''ZWQ/LihsKX19bGV0IHJ0dD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgTUF7Y29uc3RydWN0b3IoYSxkLGgpe3N1cGVyKGEsZCxoKX1uZ09uRGVzdHJveSgpe3RoaXMuZmx1c2goKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoSHIoR3MpLEhyKGZxKSxIcihw''@;'; put 'put ''cSkpfTtzdGF0aWMgXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9cmV0dXJuIGN9KSgpO2NvbnN0IGY0ZT1be3Byb3ZpZGU6cHEsdXNlRmFjdG9yeTpmdW5jdGlvbiBpdHQoKXtyZXR1cm4gbmV3IEdwZX19LHtwcm92aWRlOk1BLHVzZUNsYXNzOnJ0dH0se3By''@;'; put 'put ''b3ZpZGU6ZWMsdXNlRmFjdG9yeTpmdW5jdGlvbiBhdHQoYyxsLGEpe3JldHVybiBuZXcgbnR0KGMsbCxhKX0sZGVwczpbREcsTUEsWGFdfV0scDRlPVt7cHJvdmlkZTpmcSx1c2VDbGFzczpocX0se3Byb3ZpZGU6VDEsdXNlVmFsdWU6Ik5vb3BBbmltYXRpb25zIn0sLi4uZjRlXSxUcT1be3By''@;'; put 'put ''b3ZpZGU6ZnEsdXNlRmFjdG9yeTooKT0+bmV3IHU0ZX0se3Byb3ZpZGU6VDEsdXNlRmFjdG9yeTooKT0+IkJyb3dzZXJBbmltYXRpb25zIn0sLi4uZjRlXTtsZXQgb3R0PSgoKT0+e2NsYXNzIGN7c3RhdGljIHdpdGhDb25maWcoYSl7cmV0dXJue25nTW9kdWxlOmMscHJvdmlkZXJzOmEuZGlz''@;'; put 'put ''YWJsZUFuaW1hdGlvbnM/cDRlOlRxfX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVtb2Q9RWkoe3R5cGU6Y30pO3N0YXRpYyBcdTAyNzVpbmo9eWkoe3Byb3ZpZGVyczpUcSxpbXBvcnRzOltadWVdfSl9cmV0dXJuIGN9KSgpLHN0''@;'; put 'put ''dD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLW5vdC1mb3VuZCJdXSxob3N0QXR0''@;'; put 'put ''cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sc3RhbmRhbG9uZTohMSxkZWNsczozLHZhcnM6MCxjb25zdHM6W1sxLCJjb250ZW50LWFyZWEiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDApKDEsInAiKSxQZSgyLCI0MDQgLSBOb3QgRm91bmQiKSxoZSgpKCkp''@;'; put 'put ''fSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLGc0ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fWRvd25sb2FkRmlsZShhLGQsaD0idHh0Iil7bGV0IGY9bmV3IEJsb2IoW2FdLHt0eXBlOiJ0ZXh0L3BsYWluIn0pO2lmKG5hdmlnYXRvci5hcHBWZXJzaW9uLnRvU3RyaW5n''@;'; put 'put ''KCkuaW5kZXhPZigiLk5FVCIpPjApd2luZG93Lm5hdmlnYXRvci5tc1NhdmVCbG9iKGYsYCR7ZH0uJHtofWApO2Vsc2V7bGV0IHY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO3YuaHJlZj0iZGF0YTp0ZXh0L3BsYWluLCIrZW5jb2RlVVJJQ29tcG9uZW50KGEpLHYuZG93bmxvYWQ9YCR7''@;'; put 'put ''ZH0uJHtofWAsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh2KSx2LmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh2KX19cmVhZEZpbGUoYSl7cmV0dXJuIG5ldyBQcm9taXNlKChkLGgpPT57bGV0IGY9bmV3IEZpbGVSZWFkZXI7Zi5vbmxvYWQ9KCk9PntmLnJlc3VsdCYmZChK''@;'; put 'put ''U09OLnBhcnNlKGYucmVzdWx0LnRvU3RyaW5nKCkpKX0sZi5yZWFkQXNUZXh0KGEpfSl9Y2xlYXJVcGxvYWRJbnB1dChhKXthLnRhcmdldC52YWx1ZT0iIn1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1m''@;'; put 'put ''cih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTt2YXIgaDU9Yig1OTQ4KTtjb25zdCBBcT1mdW5jdGlvbiBjdHQoYyl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBjfHxLXyhjKSYmIltvYmplY3QgU3ltYm9sXSI9PVdfKGMpfTt2''@;'; put 'put ''YXIgdXR0PS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLGR0dD0vXlx3KiQvO2Z1bmN0aW9uIGtxKGMsbCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGN8fG51bGwhPWwmJiJmdW5jdGlvbiIhPXR5cGVvZiBsKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4''@;'; put 'put ''cGVjdGVkIGEgZnVuY3Rpb24iKTt2YXIgYT1mdW5jdGlvbigpe3ZhciBkPWFyZ3VtZW50cyxoPWw/bC5hcHBseSh0aGlzLGQpOmRbMF0sZj1hLmNhY2hlO2lmKGYuaGFzKGgpKXJldHVybiBmLmdldChoKTt2YXIgdj1jLmFwcGx5KHRoaXMsZCk7cmV0dXJuIGEuY2FjaGU9Zi5zZXQoaCx2KXx8''@;'; put 'put ''Zix2fTtyZXR1cm4gYS5jYWNoZT1uZXcoa3EuQ2FjaGV8fEckKSxhfWtxLkNhY2hlPUckO2NvbnN0IGd0dD1rcTt2YXIgYnR0PS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xd''@;'; put 'put ''fCQpKS9nLF90dD0vXFwoXFwpPy9nLHd0dD1mdW5jdGlvbiB2dHQoYyl7dmFyIGw9Z3R0KGMsZnVuY3Rpb24oZCl7cmV0dXJuIDUwMD09PWEuc2l6ZSYmYS5jbGVhcigpLGR9KSxhPWwuY2FjaGU7cmV0dXJuIGx9KGZ1bmN0aW9uKGMpe3ZhciBsPVtdO3JldHVybiA0Nj09PWMuY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmbC5wdXNoKCIiKSxjLnJlcGxhY2UoYnR0LGZ1bmN0aW9uKGEsZCxoLGYpe2wucHVzaChoP2YucmVwbGFjZShfdHQsIiQxIik6ZHx8YSl9KSxsfSk7Y29uc3QgQ3R0PXd0dDt2YXIgbTRlPWE2P2E2LnByb3RvdHlwZTp2b2lkIDAsdjRlPW00ZT9tNGUudG9TdHJpbmc6dm9pZCAwO2Nv''@;'; put 'put ''bnN0IEV0dD1mdW5jdGlvbiB5NGUoYyl7aWYoInN0cmluZyI9PXR5cGVvZiBjKXJldHVybiBjO2lmKFhfKGMpKXJldHVybiBmdW5jdGlvbiBTdHQoYyxsKXtmb3IodmFyIGE9LTEsZD1udWxsPT1jPzA6Yy5sZW5ndGgsaD1BcnJheShkKTsrK2E8ZDspaFthXT1sKGNbYV0sYSxjKTtyZXR1cm4g''@;'; put 'put ''aH0oYyx5NGUpKyIiO2lmKEFxKGMpKXJldHVybiB2NGU/djRlLmNhbGwoYyk6IiI7dmFyIGw9YysiIjtyZXR1cm4iMCI9PWwmJjEvYz09LTEvMD8iLTAiOmx9LER0dD1mdW5jdGlvbiBrdHQoYyxsKXtyZXR1cm4gWF8oYyk/YzpmdW5jdGlvbiBodHQoYyxsKXtpZihYXyhjKSlyZXR1cm4hMTt2''@;'; put 'put ''YXIgYT10eXBlb2YgYztyZXR1cm4hKCJudW1iZXIiIT1hJiYic3ltYm9sIiE9YSYmImJvb2xlYW4iIT1hJiZudWxsIT1jJiYhQXEoYykpfHxkdHQudGVzdChjKXx8IXV0dC50ZXN0KGMpfHxudWxsIT1sJiZjIGluIE9iamVjdChsKX0oYyxsKT9bY106Q3R0KGZ1bmN0aW9uIFR0dChjKXtyZXR1''@;'; put 'put ''cm4gbnVsbD09Yz8iIjpFdHQoYyl9KGMpKX0sTHR0PWZ1bmN0aW9uIFJ0dChjKXtpZigic3RyaW5nIj09dHlwZW9mIGN8fEFxKGMpKXJldHVybiBjO3ZhciBsPWMrIiI7cmV0dXJuIjAiPT1sJiYxL2M9PS0xLzA/Ii0wIjpsfSxBYz1mdW5jdGlvbiBGdHQoYyxsLGEpe3ZhciBkPW51bGw9PWM/''@;'; put 'put ''dm9pZCAwOmZ1bmN0aW9uIE90dChjLGwpe2Zvcih2YXIgYT0wLGQ9KGw9RHR0KGwsYykpLmxlbmd0aDtudWxsIT1jJiZhPGQ7KWM9Y1tMdHQobFthKytdKV07cmV0dXJuIGEmJmE9PWQ/Yzp2b2lkIDB9KGMsbCk7cmV0dXJuIHZvaWQgMD09PWQ/YTpkfTtsZXQgTTI9KCgpPT57Y2xhc3MgY3tj''@;'; put 'put ''b25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5oZWxwZXJTZXJ2aWNlPWQsdGhpcy5sb2dnZXJTZXJ2aWNlPWgsdGhpcy5yZXNwb25zZT1uZXcgdXIsdGhpcy5jaGFuZ2VkVGFibGU9bmV3IHVyLHRoaXMuZGV0YWlscz1uZXcgdXIsdGhpcy5kaWZmcz1uZXcgdXIsdGhp''@;'; put 'put ''cy5jb2x1bW5zPW5ldyB1cix0aGlzLnZhbHVlcz1uZXcgdXIsdGhpcy5maWx0ZXI9bmV3IHVyLHRoaXMucXVlcnk9bmV3IHVyLHRoaXMuc3VibWl0dERldGFpbD1uZXcgdXIsdGhpcy5yZW1vdmVRdWVyeT1uZXcgdXIsdGhpcy5zZXRTdWJtaXQ9bmV3IHVyLHRoaXMuc2V0U3VibWl0TGlzdD1u''@;'; put 'put ''ZXcgdXJ9Y2FsbFNlcnZpY2UoYSxkLGgsZil7dmFyIHY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Y29uc3QgTT17fTtyZXR1cm4gTVtkXT1bYV0se2RhdGE6KHlpZWxkIHYuc2FzU2VydmljZS5yZXF1ZXN0KGgsTSkpLmFkYXB0ZXJSZXNwb25zZSxsaWJkczpmfX0pKCl9dXBkYXRlVGFi''@;'; put 'put ''bGUoYSxkLGgsZix2LE0sRCl7dmFyIFU9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IHRlPXtqc2RhdGE6ZH07aWYodil7bGV0IHZlPVUucGFyc2VGb3JtYXRzKHYpO3RlLiRqc2RhdGE9e2Zvcm1hdHM6dmV9fXJldHVybiB0ZVtoXT1bYV0seWllbGQgVS5zYXNTZXJ2aWNlLnJlcXVl''@;'; put 'put ''c3QoZix0ZSxELHtzdXBwcmVzc0Vycm9yQWJvcnRNb2RhbDpNLHN1cHByZXNzU3VjY2Vzc0Fib3J0TW9kYWw6TX0pfSkoKX1nZXRBcHByb3ZhbHMoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCB2PXt9O3JldHVybiB2W2RdPVthXSwoeWllbGQgZi5zYXNTZXJ2''@;'; put 'put ''aWNlLnJlcXVlc3QoaCx2KSkuYWRhcHRlclJlc3BvbnNlfSkoKX1zZW5kRGV0YWlscyhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IHY9T2JqZWN0LmFzc2lnbih7c3ViOiEwfSxhKTtmLnN1Ym1pdHREZXRhaWwubmV4dCh7ZGF0YTpoW2RdLHZpZXdEYXRhOnZ9''@;'; put 'put ''KX0pKCl9Z2V0U3VibWl0dHMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgYS5zYXNTZXJ2aWNlLnJlcXVlc3QoImVkaXRvcnMvZ2V0c3VibWl0cyIsbnVsbCkpLmFkYXB0ZXJSZXNwb25zZX0pKCl9dmlld0xpYnMoKXt2YXIgYT10aGlzO3JldHVybiBl''@;'; put 'put ''ZShmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgYS5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92aWV3bGlicyIsbnVsbCkpLmFkYXB0ZXJSZXNwb25zZX0pKCl9cmVmcmVzaExpYkluZm8oYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Y29uc3QgaD17bGliMnJlZnJlc2g6''@;'; put 'put ''W3tsaWJyZWY6YX1dfTtyZXR1cm4oeWllbGQgZC5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9yZWZyZXNobGliaW5mbyIsaCkpLmFkYXB0ZXJSZXNwb25zZX0pKCl9dmlld1RhYmxlcyhhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgaD17U0FTQ29udHJvbFRhYmxl''@;'; put 'put ''Olt7TVBMSUI6YX1dfTtyZXR1cm4oeWllbGQgZC5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92aWV3dGFibGVzIixoKSkuYWRhcHRlclJlc3BvbnNlfSkoKX12aWV3RGF0YShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBmPXtTQVNDb250cm9sVGFibGU6W3tM''@;'; put 'put ''SUJEUzphLEZJTFRFUl9SSzpkfV19O3JldHVybih5aWVsZCBoLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXdkYXRhIixmKSkuYWRhcHRlclJlc3BvbnNlfSkoKX12aWV3RGF0YVNlYXJjaChhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooaCxmPSExLHYsTSl7bGV0IFU9''@;'; put 'put ''e1NBU0NvbnRyb2xUYWJsZTpbe1NFQVJDSFRZUEU6aC5sZW5ndGg+MD9mPyJOVU0iOiJDSEFSIjoiTk9ORSIsU0VBUkNIVkFMOmgsTElCRFM6dixGSUxURVJfUks6TX1dfTtyZXR1cm4oeWllbGQgZC5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92aWV3ZGF0YSIsVSkpLmFkYXB0ZXJSZXNw''@;'; put 'put ''b25zZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1nZXRYTE1hcFJ1bGVzKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2NvbnN0IGg9e2dldHhsbWFwc19pbjpbe1hMTUFQX0lEOmF9XX07cmV0dXJuKHlpZWxkIGQuc2FzU2VydmljZS5yZXF1ZXN0KCJlZGl0b3JzL2dldHhs''@;'; put 'put ''bWFwcyIsaCkpLmFkYXB0ZXJSZXNwb25zZX0pKCl9c2hvd0RpZmZzKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgdj17fTtyZXR1cm4gdltkXT1bYV0sKHlpZWxkIGYuc2FzU2VydmljZS5yZXF1ZXN0KGgsdix7dXNlQ29tcHV0ZUFwaTpudWxsfSkpLmFkYXB0''@;'; put 'put ''ZXJSZXNwb25zZX0pKCl9cmVqZWN0aW5nKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgdj17fTtyZXR1cm4gdltkXT1bYV0sKHlpZWxkIGYuc2FzU2VydmljZS5yZXF1ZXN0KGgsdix7dXNlQ29tcHV0ZUFwaTpudWxsfSkpLmFkYXB0ZXJSZXNwb25zZX0pKCl9''@;'; put 'put ''YXBwcm92ZVRhYmxlKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgdj17fTtyZXR1cm4gdltkXT1bYV0sKHlpZWxkIGYuc2FzU2VydmljZS5yZXF1ZXN0KGgsdikpLmFkYXB0ZXJSZXNwb25zZX0pKCl9Z2V0SGlzdG9yeShhLGQsaCl7dmFyIGY9dGhpcztyZXR1''@;'; put 'put ''cm4gZWUoZnVuY3Rpb24qKCl7bGV0IHY9e307cmV0dXJuIHZbZF09W2FdLCh5aWVsZCBmLnNhc1NlcnZpY2UucmVxdWVzdChoLHYpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXNldFF1ZXJ5VmFyaWFibGVzKGEsZCl7dGhpcy5jb2x1bW5zLm5leHQoe2RhdGE6e2NvbHM6ZH0sbGliZHM6YX0pfWdl''@;'; put 'put ''dENoYW5nZUluZm8oYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IGY9e1NBU0NvbnRyb2xUYWJsZTpbe1RBQkxFOmF9XX07cmV0dXJuKHlpZWxkIGQuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvZ2V0Y2hhbmdlaW5mbyIsZikpLmFkYXB0ZXJSZXNwb25zZX0pKCl9''@;'; put 'put ''Z2V0UXVlcnlWYWx1ZXMoYSxkLGgsZix2KXt2YXIgTT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgRD17aXdhbnQ6W3tsaWJkczpkLGNvbDphLC4uLmYmJntTVEFSVFJPVzpmfSwuLi52JiZ7Uk9XUzp2fX1dfTtyZXR1cm4gaC5sZW5ndGg+MCYmKEQuRklMVEVSUVVFUlk9aCksKHlp''@;'; put 'put ''ZWxkIE0uc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvZ2V0Y29sdmFscyIsRCkuY2F0Y2goVT0+e3Rocm93IFV9KSkuYWRhcHRlclJlc3BvbnNlfSkoKX1zYXZlUXVlcnkoYSxkKXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgZj17aXdhbnQ6W3tmaWx0ZXJfdGFibGU6''@;'; put 'put ''YX1dLGZpbHRlcnF1ZXJ5OmR9O2NvbnN0IHY9eWllbGQgaC5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92YWxpZGF0ZWZpbHRlciIsZik7cmV0dXJuIGguZmlsdGVyLm5leHQodiksdi5hZGFwdGVyUmVzcG9uc2V9KSgpfW9wZW5UYWJsZShhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5j''@;'; put 'put ''dGlvbiooKXtsZXQgaD17aXdhbnQ6W3t0YWJsZV9pZDphfV19O3JldHVybih5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgiYXVkaXRvcnMvZ2V0c3RhZ2V0YWJsZSIsaCkpLmFkYXB0ZXJSZXNwb25zZX0pKCl9Y2hlY2tPcGVyYXRvcihhLGQsaCl7bGV0IGY7c3dpdGNoKGEpe2Nhc2UiQkVU''@;'; put 'put ''V0VFTiI6ZCBpbnN0YW5jZW9mIEFycmF5JiYoIiIhPT1kWzBdJiYiIiE9PWRbMV0/Zj1kWzBdKyIgQU5EICIrZFsxXToiIiE9PWRbMF0mJiIiPT09ZFsxXT8oZFsxXT0iLiIsZj1kWzBdKyIgQU5EICIrZFsxXSk6IiI9PT1kWzBdJiYiIiE9PWRbMV0/KGRbMF09Ii4iLGY9ZFswXSsiIEFORCAi''@;'; put 'put ''K2RbMV0pOihkWzBdPSIuIixkWzFdPSIuIixmPWRbMF0rIiBBTkQgIitkWzFdKSk7YnJlYWs7Y2FzZSJJTiI6Y2FzZSJOT1QgSU4iOmxldCBNPVtdO2lmKHR5cGVvZiBkPCJ1Iilmb3IobGV0IEQ9MDtEPGQubGVuZ3RoO0QrKykhMD09PWRbRF0uY2hlY2tlZCYmKCJjaGFyIj09PWg/KCJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgZFtEXS52YWwmJihkW0RdLnZhbD1kW0RdLnZhbC5yZXBsYWNlKCInIiwiJyciKSksTS5wdXNoKCInIitkW0RdLnZhbCsiJyIpKToobnVsbD09PWRbRF0udmFsJiYoZFtEXS52YWw9Ii4iKSxNLnB1c2goZFtEXS52YWwpKSk7ZD0iKCIrTSsiKSI7YnJlYWs7Y2FzZSJDT05U''@;'; put 'put ''QUlOUyI6YT0iPyI7YnJlYWs7Y2FzZSJOT1QgRVFVQUwiOmE9Im5lIn1yZXR1cm4ibnVtIj09PWgmJm51bGw9PT1kJiYoZD0iLiIpLCJQbGVhc2Ugc2VsZWN0IHZhbHVlIj09PWQmJihkPSIiKSwtMSE9PVsiPSIsIj4iLCI8IiwiPD0iLCI+PSIsIm5lIl0uaW5kZXhPZihhKSYmIm51bSI9PT1o''@;'; put 'put ''JiYiIj09PWQmJihkPSIuIiksIkJFVFdFRU4iPT09YT97dmFsdWU6ZixvcGVyYXRvcjphfTp7dmFsdWU6ZCxvcGVyYXRvcjphfX13aGVyZUNsYXVzZUNyZWF0b3IoYSxkLGgpe2xldCBELG9lLGY9IiIsVT0iIix0ZT1bXTtmb3IobGV0IHdlPTA7d2U8YS5xdWVyeU9iai5sZW5ndGg7d2UrKyl7''@;'; put 'put ''bGV0IEZlPSIiLFdlPWEucXVlcnlPYmpbd2VdO2ZvcihsZXQgbnQ9MDtudDxXZS5lbGVtZW50cy5sZW5ndGg7bnQrKyl7bGV0IG10LGR0PVdlLmVsZW1lbnRzW250XTtEPW50PFdlLmVsZW1lbnRzLmxlbmd0aC0xP1dlLmNsYXVzZUxvZ2ljOiIiO2ZvcihsZXQgUm49MDtSbjxkdC52YWx1ZXMu''@;'; put 'put ''bGVuZ3RoO1JuKyspe2lmKCJzdHJpbmciPT10eXBlb2YgZHQudmFsdWUmJiJudW1iZXIiPT10eXBlb2YgZHQudmFsdWVzW1JuXS5mb3JtYXR0ZWQpZHQudmFsdWU9PT1KU09OLnN0cmluZ2lmeShkdC52YWx1ZXNbUm5dLmZvcm1hdHRlZCkmJihtdD1kdC52YWx1ZXNbUm5dLnVuZm9ybWF0dGVk''@;'; put 'put ''KTtlbHNle2xldCBMcj0ibnVtYmVyIiE9dHlwZW9mIGR0LnZhbHVlc1tSbl0uZm9ybWF0dGVkJiZudWxsIT09ZHQudmFsdWVzW1JuXS5mb3JtYXR0ZWQ/ZHQudmFsdWVzW1JuXS5mb3JtYXR0ZWQudHJpbSgpOmR0LnZhbHVlc1tSbl0uZm9ybWF0dGVkO2R0LnZhbHVlPT09THImJihtdD1kdC52''@;'; put 'put ''YWx1ZXNbUm5dLnVuZm9ybWF0dGVkKX0iUGxlYXNlIHNlbGVjdCB2YWx1ZSI9PT1kdC52YWx1ZSYmLTEhPT1bIj0iLCI+IiwiPCIsIjw9IiwiPj0iLCJuZSJdLmluZGV4T2YoZHQub3BlcmF0b3IpJiYobXQ9IiIpLCgiQ09OVEFJTlMiPT09ZHQub3BlcmF0b3J8fCJMSUtFIj09PWR0Lm9wZXJh''@;'; put 'put ''dG9yfHwiQkVHSU5TX1dJVEgiPT09ZHQub3BlcmF0b3IpJiYobXQ9ZHQudmFsdWUpfWlmKG10fHwobXQ9ZHQudmFsdWUpLGR0LnZhbHVlIGluc3RhbmNlb2YgQXJyYXkmJiJCRVRXRUVOIj09PWR0Lm9wZXJhdG9yKXttdD1bXSxtdC5wdXNoKGR0LnZhbHVlWzBdKSxtdC5wdXNoKGR0LnZhbHVl''@;'; put 'put ''WzFdKTtmb3IobGV0IFJuPTA7Um48ZHQudmFsdWVzLmxlbmd0aDtSbisrKW10WzBdPT09ZHQudmFsdWVzW1JuXS5mb3JtYXR0ZWQmJihtdFswXT1kdC52YWx1ZXNbUm5dLnVuZm9ybWF0dGVkKSxtdFsxXT09PWR0LnZhbHVlc1tSbl0uZm9ybWF0dGVkJiYobXRbMV09ZHQudmFsdWVzW1JuXS51''@;'; put 'put ''bmZvcm1hdHRlZCl9aWYoZHQudmFsdWUgaW5zdGFuY2VvZiBBcnJheSYmKCJJTiI9PT1kdC5vcGVyYXRvcnx8Ik5PVCBJTiI9PT1kdC5vcGVyYXRvcikpe210PVtdLG10PWR0LnZhbHVlO2ZvcihsZXQgUm49MDtSbjxkdC52YWx1ZXMubGVuZ3RoO1JuKyspbXRbUm5dJiZtdFtSbl0udmFsPT09''@;'; put 'put ''ZHQudmFsdWVzW1JuXS5mb3JtYXR0ZWQmJihtdFtSbl0udmFsPWR0LnZhbHVlc1tSbl0udW5mb3JtYXR0ZWQpfWxldCAkdD1kdC50eXBlO2NvbnN0IHp0PWR0LnZhbHVlVmFyaWFibGU7bGV0IHduLHluPW51bGw9PT1kdC52YXJpYWJsZT8iIjpkdC52YXJpYWJsZSxnbj1udWxsPT09ZHQub3Bl''@;'; put 'put ''cmF0b3I/IiI6ZHQub3BlcmF0b3I7d249dGhpcy5jaGVja09wZXJhdG9yKGduLG10LCR0KS52YWx1ZSwic3RyaW5nIj09dHlwZW9mIHduJiYiKCIhPT13blswXSYmKHduPXduLnJlcGxhY2UoIiciLCInJyIpKSxnbj10aGlzLmNoZWNrT3BlcmF0b3IoZ24sd24sJHQpLm9wZXJhdG9yLCJjaGFy''@;'; put 'put ''Ij09PSR0JiYiSU4iIT09Z24mJiJOT1QgSU4iIT09Z24/KHR5cGVvZiB3bj4idSImJih3bj0iIiksd249enQ/IiAiK3duKyIgIjoiICciK3duKyInICIsRmU9RmUrIiAiK3luKyIgIitnbit3bitEKTooIm51bSI9PT0kdCYmdHlwZW9mIHduPiJ1IiYmKHduPSIuIiksd249dHlwZW9mIHduPiJ1''@;'; put 'put ''Ij8iIjoiICIrd24rIiAiLEZlPUZlKyIgIit5bisiICIrZ24rd24rRCl9dGUucHVzaChGZSl9VT0iIjtmb3IobGV0IHdlPTA7d2U8dGUubGVuZ3RoO3dlKyspb2U9d2U8dGUubGVuZ3RoLTE/ZDoiIixVPTE9PT10ZS5sZW5ndGg/dGVbMF06VSsiICgiK3RlW3dlXSsiKSAiK29lO3JldHVybiBm''@;'; put 'put ''PVUuc3Vic3RyKDEpLnNsaWNlKDAsLTEpLFU9IldIRVJFIitVKyI7Iix0aGlzLnF1ZXJ5Lm5leHQoe3doZXJlQ2xhdXNlOlUsc3RyaW5nOmYsb2JqOmEsbGliZHM6aH0pLHt3aGVyZUNsYXVzZTpVLHN0cmluZzpmfX1jcmVhdGVGaWx0ZXJRdWVyeVRhYmxlKGEpe2NvbnN0IGQ9W107cmV0dXJu''@;'; put 'put ''IGEuZmlsdGVyR3JvdXBzLmZvckVhY2goKGgsZik9PntoLmZpbHRlckNsYXVzZXMuZm9yRWFjaCh2PT57bGV0IE09IiI7IkJFVFdFRU4iPT09di5vcGVyYXRvcj9NPWAke3YudmFsdWVbMF19IEFORCAke3YudmFsdWVbMV19YDoiSU4iPT09di5vcGVyYXRvcnx8Ik5PVCBJTiI9PT12Lm9wZXJh''@;'; put 'put ''dG9yPyh2LnZhbHVlLmZvckVhY2goRD0+e2lmKEQuY2hlY2tlZCl7Y29uc3QgVT1ELnZhbDsic3RyaW5nIiE9dHlwZW9mIFV8fCgwLGg1LmlzU3BlY2lhbE1pc3NpbmcpKFUpJiYiY2hhciIhPT12LnR5cGU/TS5sZW5ndGg+MD9NKz1gLCR7VX1gOk09YCgke1V9YDpNLmxlbmd0aD4wP00rPWAs''@;'; put 'put ''JyR7VS5yZXBsYWNlKC8nL2csIicnIil9J2A6TT1gKCcke1UucmVwbGFjZSgvJy9nLCInJyIpfSdgfX0pLE0ubGVuZ3RoPjAmJihNKz0iKSIpKToiIj09PXYudmFsdWU/TT0iY2hhciI9PT12LnR5cGU/IicgJyI6Ii4iOiJjaGFyIj09PXYudHlwZSYmIXYudmFsdWVWYXJpYWJsZSYmKE09YCck''@;'; put 'put ''e3YudmFsdWUucmVwbGFjZSgvJy9nLCInJyIpfSdgKSxkLnB1c2goe0dST1VQX0xPR0lDOmEuZ3JvdXBMb2dpYyxTVUJHUk9VUF9MT0dJQzpoLmNsYXVzZUxvZ2ljfHwiQU5EIixTVUJHUk9VUF9JRDpmLFZBUklBQkxFX05NOnYudmFyaWFibGUsT1BFUkFUT1JfTk06di5vcGVyYXRvcixSQVdf''@;'; put 'put ''VkFMVUU6TXx8di52YWx1ZX0pfSl9KSxkfWluaXRpYWxpemVHbG9iYWxGaWx0ZXJDbGF1c2UoYSxkKXtjb25zdCBoPXtxdWVyeU9iajpbXSxjbGF1c2VMb2dpYzpbXSxncm91cExvZ2ljOkFjKFhuLGEpLmZpbHRlci5xdWVyeVswXS5HUk9VUF9MT0dJQ307QWMoWG4sYSkuZmlsdGVyLmNsYXVz''@;'; put 'put ''ZXM9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShoKSxBYyhYbixhKS5maWx0ZXIuZ3JvdXBMb2dpYz1BYyhYbixhKS5maWx0ZXIucXVlcnlbMF0uR1JPVVBfTE9HSUM7bGV0IGY9IiIsdj17ZWxlbWVudHM6W119LE09MDtBYyhYbixhKS5maWx0ZXIucXVlcnkuZm9yRWFjaChEPT57Y29u''@;'; put 'put ''c3QgVT17fTtmb3IobGV0IHRlPTA7dGU8ZC5sZW5ndGg7dGUrKylpZihkW3RlXS5OQU1FPT09RC5WQVJJQUJMRV9OTSl7aWYoZj1ELlNVQkdST1VQX0xPR0lDLFUuZGR0eXBlPWRbdGVdLkREVFlQRSxVLnR5cGU9ZFt0ZV0uVFlQRSxVLm9wZXJhdG9ycz0ibnVtIj09PWRbdGVdLlRZUEU/WG4u''@;'; put 'put ''b3BlcmF0b3JzLm51bU9wZXJhdG9yczpYbi5vcGVyYXRvcnMuY2hhck9wZXJhdG9ycyxVLmxvZ2ljPW51bGwsVS5vcGVyYXRvcj1ELk9QRVJBVE9SX05NLFUudmFyaWFibGU9RC5WQVJJQUJMRV9OTSwiY2hhciI9PT1kW3RlXS5UWVBFKWlmKCJJTiI9PT1ELk9QRVJBVE9SX05NfHwiTk9UIElO''@;'; put 'put ''Ij09PUQuT1BFUkFUT1JfTk0pe2NvbnN0IG9lPVtdLHdlPUQuUkFXX1ZBTFVFLnNsaWNlKDEsLTEpLnNwbGl0KCInLCciKTsxPT09d2UubGVuZ3RoP29lLnB1c2goe2NoZWNrZWQ6ITAsdmFsOndlWzBdLnNsaWNlKDEsLTEpLnJlcGxhY2UoLycnL2csIiciKX0pOndlLmZvckVhY2goKEZlLFdl''@;'; put 'put ''KT0+e29lLnB1c2goMD09PVdlP3tjaGVja2VkOiEwLHZhbDpGZS5zbGljZSgxKS5yZXBsYWNlKC8nJy9nLCInIil9OldlPT09d2UubGVuZ3RoLTE/e2NoZWNrZWQ6ITAsdmFsOkZlLnNsaWNlKDAsLTEpLnJlcGxhY2UoLycnL2csIiciKX06e2NoZWNrZWQ6ITAsdmFsOkZlLnJlcGxhY2UoLycn''@;'; put 'put ''L2csIiciKX0pfSksVS52YWx1ZT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKG9lKX1lbHNlIFUudmFsdWU9RC5SQVdfVkFMVUUuc2xpY2UoMSwtMSkucmVwbGFjZSgvJycvZywiJyIpO2Vsc2UgaWYoIklOIj09PUQuT1BFUkFUT1JfTk18fCJOT1QgSU4iPT09RC5PUEVSQVRPUl9OTSl7''@;'; put 'put ''Y29uc3Qgb2U9W107RC5SQVdfVkFMVUUuc2xpY2UoMSwtMSkuc3BsaXQoIiwiKS5mb3JFYWNoKChGZSxXZSk9PntvZS5wdXNoKHtjaGVja2VkOiEwLHZhbDpGZX0pfSksVS52YWx1ZT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKG9lKX1lbHNlIGlmKCJCRVRXRUVOIj09PUQuT1BFUkFU''@;'; put 'put ''T1JfTk0pe2NvbnN0IG9lPUQuUkFXX1ZBTFVFLnNwbGl0KCIgQU5EICIpO1UudmFsdWU9b2V9ZWxzZSBVLnZhbHVlPUQuUkFXX1ZBTFVFO1UudmFsdWVzPVtdLE09PT1ELlNVQkdST1VQX0lEfHwoQWMoWG4sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmoucHVzaCh0aGlzLmhlbHBlclNlcnZp''@;'; put 'put ''Y2UuZGVlcENsb25lKHYpKSxBYyhYbixhKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9ialtNXS5jbGF1c2VMb2dpYz1mLEFjKFhuLGEpLmZpbHRlci5jbGF1c2VzLnF1ZXJ5T2JqW01dLmludmFsaWRDbGF1c2U9ITEsTSsrLHYuZWxlbWVudHM9W10pLHYuZWxlbWVudHMucHVzaCh0aGlzLmhlbHBl''@;'; put 'put ''clNlcnZpY2UuZGVlcENsb25lKFUpKTticmVha319KSx2LmVsZW1lbnRzLmxlbmd0aD4wJiYoQWMoWG4sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmoucHVzaCh0aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHYpKSxBYyhYbixhKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9ialtNXS5jbGF1''@;'; put 'put ''c2VMb2dpYz1mLEFjKFhuLGEpLmZpbHRlci5jbGF1c2VzLnF1ZXJ5T2JqW01dLmludmFsaWRDbGF1c2U9ITEpLEFjKFhuLGEpLmZpbHRlci5xdWVyeT1bXX1yZW1vdmVDbGF1c2UoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgZD0hMDtyZXR1cm4gYS5yZW1vdmVRdWVy''@;'; put 'put ''eS5uZXh0KGQpLGR9KSgpfXNwZWNDb252ZXJzaW9uKGEpe2xldCBkPXt9LGg9W107aWYoaD1hLm1hcChmdW5jdGlvbihmKXtyZXR1cm4gZi5OQU1FLnRvVXBwZXJDYXNlKCl9KSxhIGluc3RhbmNlb2YgQXJyYXkpZm9yKGxldCBmPTA7ZjxoLmxlbmd0aDtmKyspZFtoW2ZdXT0xPT09YVtmXS5U''@;'; put 'put ''WVBFP3tjb2xUeXBlOiJudW0iLGNvbExlbmd0aDphW2ZdLkxFTkdUSH06e2NvbFR5cGU6InN0cmluZyIsY29sTGVuZ3RoOmFbZl0uTEVOR1RIfTtyZXR1cm4gZH1zZXRTdWJtaXRSZWFkeSgpe3RoaXMuc2V0U3VibWl0Lm5leHQoITApfXBhcnNlRm9ybWF0cyhhKXtjb25zdCBkPXt9LGg9YS52''@;'; put 'put ''YXJzO2ZvcihsZXQgZiBvZiBPYmplY3Qua2V5cyhoKSl7Y29uc3Qgdj1oW2ZdLnR5cGUsTT1oW2ZdLmxlbmd0aDsibnVtIj09PXY/ZFtmXT0iYmVzdC4iOiJjaGFyIj09PXYmJihkW2ZdPWAkY2hhciR7TX0uYCl9cmV0dXJuIGR9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3Jl''@;'; put 'put ''dHVybiBuZXcoZHx8YykoSHIoS3MpLEhyKEx1KSxIcihvaCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIEh0dChjLGwpezEmYyYmKG9pKDApLGRlKDEsInNwYW4iLDIxKSxQZSgyLCIgTG9h''@;'; put 'put ''ZGluZy4uLiAiKSxoZSgpLGRlKDMsInAiKSxQZSg0LCJEZXBsb3lpbmcuLi4iKSxoZSgpLHNpKCkpfWZ1bmN0aW9uIE50dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDMyKX1mdW5jdGlvbiBWdHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwzMyl9ZnVuY3Rpb24gQnR0KGMsbCl7aWYo''@;'; put 'put ''MSZjJiYoZGUoMCwiZGl2IiwzMCksZ3QoMSxOdHQsMSwwLCJjbHItaWNvbiIsMzEpKDIsVnR0LDEsMCwiY2xyLWljb24iLDI3KSxkZSgzLCJwIiksUGUoNCwiRGVwbG95IFNBUyBKb2JzIiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoKSxFZSgibmdJZiIsITA9PT1hLmF1dG9EZXBs''@;'; put 'put ''b3lTdGF0dXMuZGVwbG95U2VydmljZVBhY2spLGZlKCksRWUoIm5nSWYiLCEhYS5hdXRvRGVwbG95U3RhdHVzLmRlcGxveVNlcnZpY2VQYWNrKX19ZnVuY3Rpb24ganR0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMzIpfWZ1bmN0aW9uIHp0dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24i''@;'; put 'put ''LDMzKX1mdW5jdGlvbiBVdHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDMwKSxndCgxLGp0dCwxLDAsImNsci1pY29uIiwzMSkoMix6dHQsMSwwLCJjbHItaWNvbiIsMjcpLGRlKDMsInAiKSxQZSg0LCJDcmVhdGUgZGF0YWJhc2UiKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgzKTtmZSgp''@;'; put 'put ''LEVlKCJuZ0lmIixhLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFrZURhdGEpLGZlKCksRWUoIm5nSWYiLCExPT09YS5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRhKX19ZnVuY3Rpb24gWnR0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMzMpfWZ1bmN0aW9uIFd0dChjLGwpe2lmKDEmYyl7''@;'; put 'put ''Y29uc3QgYT1PbigpO29pKDApLGRlKDEsInAiLDIyKSxQZSgyLCJEb25lIiksaGUoKSxHdCgzLCJociIsMjMpLGd0KDQsQnR0LDUsMiwiZGl2IiwyNCkoNSxVdHQsNSwyLCJkaXYiLDI0KSxHdCg2LCJociIsMjMpLGRlKDcsImRpdiIsMjUpKDgsImJ1dHRvbiIsMjYpLE90KCJjbGljayIsZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikubmF2aWdhdGVUb0hvbWUoKSl9KSxndCg5LFp0dCwxLDAsImNsci1pY29uIiwyNyksUGUoMTAsIiBMQVVOQ0ggIiksaGUoKSxkZSgxMSwiYnV0dG9uIiwyOCksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMik7cmV0''@;'; put 'put ''dXJuIEN0KGguZG93bmxvYWRGaWxlKGgubWFrZURhdGFSZXNwb25zZSwiY3JlYXRlLWRhdGFiYXNlLWxvZyIsInR4dCIpKX0pLFBlKDEyLCIgRG93bmxvYWQgbG9nICIpLGhlKCkoKSxHdCgxMywiaHIiLDIzKSxkZSgxNCwiZGl2IiwyNSkoMTUsImJ1dHRvbiIsMjkpLE90KCJjbGljayIsZnVu''@;'; put 'put ''Y3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpO3JldHVybiBoLmF1dG9kZXBsb3lpbmc9ITEsQ3QoaC5hdXRvZGVwbG95RG9uZT0hMSl9KSxQZSgxNiwiIENsb3NlICIpLGhlKCksZGUoMTcsImJ1dHRvbiIsMjkpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMiku''@;'; put 'put ''b3BlblNhc1JlcXVlc3RzTW9kYWwoKSl9KSxQZSgxOCwiIFNBUyBSZXF1ZXN0cyAiKSxoZSgpKCksc2koKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7ZmUoNCksRWUoIm5nSWYiLG51bGwhPT1hLmF1dG9EZXBsb3lTdGF0dXMuZGVwbG95U2VydmljZVBhY2spLGZlKCksRWUoIm5nSWYiLG51bGwh''@;'; put 'put ''PT1hLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFrZURhdGEpLGZlKDQpLEVlKCJuZ0lmIiwhMT09PWEuYXV0b0RlcGxveVN0YXR1cy5kZXBsb3lTZXJ2aWNlUGFja3x8ITE9PT1hLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFrZURhdGEpfX1mdW5jdGlvbiBZdHQoYyxsKXtpZigxJmMmJihkZSgwLCJk''@;'; put 'put ''aXYiLDE5KSgxLCJkaXYiLDIwKSxndCgyLEh0dCw1LDAsIm5nLWNvbnRhaW5lciIsMTIpKDMsV3R0LDE5LDMsIm5nLWNvbnRhaW5lciIsMTIpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoMiksRWUoIm5nSWYiLCFhLmF1dG9kZXBsb3lEb25lKSxmZSgpLEVlKCJuZ0lmIixhLmF1dG9k''@;'; put 'put ''ZXBsb3lEb25lKX19ZnVuY3Rpb24gR3R0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiwzNiksUGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0VlKCJ2YWx1ZSIsYS5pZCksZmUoKSxJcigiICIsYS5uYW1lLCIgIil9fWZ1bmN0aW9uICR0dChjLGwpe2lmKDEmYyl7Y29u''@;'; put 'put ''c3QgYT1PbigpO2RlKDAsInNlbGVjdCIsMzQpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCk7cmV0dXJuIGZpKGYuc2VsZWN0ZWRBZG1pbkdyb3VwLGgpfHwoZi5zZWxlY3RlZEFkbWluR3JvdXA9aCksQ3QoaCl9KSxndCgxLEd0dCwyLDIsIm9wdGlv''@;'; put 'put ''biIsMzUpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKCk7bGkoIm5nTW9kZWwiLGEuc2VsZWN0ZWRBZG1pbkdyb3VwKSxmZSgpLEVlKCJuZ0Zvck9mIixhLmFkbWluR3JvdXBzKX19ZnVuY3Rpb24gS3R0KGMsbCl7MSZjJiZHdCgwLCJjbHItc3Bpbm5lciIsMzcpfWZ1bmN0aW9uIFh0dChjLGwp''@;'; put 'put ''e2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsMzYpLFBlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtFZSgidmFsdWUiLGEuaWQpLGZlKCksSXIoIiAiLGEubmFtZSwiICIpfX1mdW5jdGlvbiBxdHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJzZWxlY3QiLDM0KSxP''@;'; put 'put ''dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkub25Db21wdXRlQ29udGV4dENoYW5nZShoKSl9KSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpO3JldHVybiBmaShmLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQs''@;'; put 'put ''aCl8fChmLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQ9aCksQ3QoaCl9KSxndCgxLFh0dCwyLDIsIm9wdGlvbiIsMzUpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKCk7bGkoIm5nTW9kZWwiLGEuc2VsZWN0ZWRDb21wdXRlQ29udGV4dCksZmUoKSxFZSgibmdGb3JPZiIsYS5jb21wdXRlQ29udGV4''@;'; put 'put ''dHMpfX1mdW5jdGlvbiBKdHQoYyxsKXsxJmMmJkd0KDAsImNsci1zcGlubmVyIiwzNyl9ZnVuY3Rpb24gUXR0KGMsbCl7aWYoMSZjJiYob2koMCksZGUoMSwibGFiZWwiLDIpLFBlKDIsIlJ1bm5pbmcgYXMgdXNlcjoiKSxoZSgpLGRlKDMsImRpdiIsMykoNCwiZGl2Iiw0KSg1LCJwIiw1KSxQ''@;'; put 'put ''ZSg2KSxoZSgpKCkoKSxzaSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSg2KSxDcihhLnJ1bm5pbmdBc1VzZXIpfX1sZXQgZW50PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMuZXZlbnRTZXJ2aWNlPWEsdGhpcy5kZXBsb3lTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2''@;'; put 'put ''aWNlPWgsdGhpcy5zYXNWaXlhU2VydmljZT1mLHRoaXMubG9nZ2VyU2VydmljZT12LHRoaXMuaGVscGVyU2VydmljZT1NLHRoaXMuc2FzSnNDb25maWc9bmV3IGQyLlNBU2pzQ29uZmlnLHRoaXMuYXBwTG9jPSIiLHRoaXMuZGNQYXRoPSIiLHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPSIiLHRo''@;'; put 'put ''aXMub25OYXZpZ2F0ZVRvSG9tZT1uZXcgWHIsdGhpcy5zZWxlY3RlZENvbXB1dGVDb250ZXh0PSIiLHRoaXMubWFrZURhdGFSZXNwb25zZT0iIix0aGlzLmpzb25GaWxlPW51bGwsdGhpcy5hdXRvZGVwbG95aW5nPSExLHRoaXMuYXV0b2RlcGxveURvbmU9ITEsdGhpcy5yZWNyZWF0ZURhdGFi''@;'; put 'put ''YXNlTW9kYWw9ITEsdGhpcy5pc1N1Ym1pdHRpbmdKc29uPSExLHRoaXMuaXNKc29uU3VibWl0dGVkPSExLHRoaXMucmVjcmVhdGVEYXRhYmFzZT0hMCx0aGlzLmNyZWF0ZURhdGFiYXNlTG9hZGluZz0hMSx0aGlzLmFkbWluR3JvdXBzTG9hZGluZz0hMSx0aGlzLmN1cnJlbnRVc2VySW5mb0xv''@;'; put 'put ''YWRpbmc9ITEsdGhpcy5jb21wdXRlQ29udGV4dHNMb2FkaW5nPSExLHRoaXMuYWRtaW5Hcm91cHM9W10sdGhpcy5jdXJyZW50VXNlckluZm89bnVsbCx0aGlzLmNvbXB1dGVDb250ZXh0cz1bXSx0aGlzLmF1dG9EZXBsb3lTdGF0dXM9e2RlcGxveVNlcnZpY2VQYWNrOm51bGwscnVuTWFrZURh''@;'; put 'put ''dGE6bnVsbH0sdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLmRlcGxveUluTmV3V2luZG93PSEwfW5nT25Jbml0KCl7dGhpcy5sb2FkRGF0YSgpfWxvYWREYXRhKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7eWllbGQgYS5n''@;'; put 'put ''ZXRBZG1pbkdyb3VwcygpLHlpZWxkIGEuZ2V0Q29tcHV0ZUNvbnRleHRzKCkseWllbGQgYS5nZXRDdXJyZW50VXNlcigpLHNldFRpbWVvdXQoKCk9PnthLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQmJmEub25Db21wdXRlQ29udGV4dENoYW5nZShhLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQpfSw1''@;'; put 'put ''MDApfSkoKX1nZXRDb21wdXRlQ29udGV4dHMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9PnthLmNvbXB1dGVDb250ZXh0c0xvYWRpbmc9ITAsYS5zYXNWaXlhU2VydmljZS5nZXRDb21wdXRlQ29udGV4dHMoKS5zdWJzY3JpYmUo''@;'; put 'put ''Zj0+e2EuY29tcHV0ZUNvbnRleHRzTG9hZGluZz0hMTtjb25zdCB2PWYuaXRlbXMuZmluZChNPT4iU0FTIEpvYiBFeGVjdXRpb24gY29tcHV0ZSBjb250ZXh0Ij09PU0ubmFtZSk7diYmKGEuc2VsZWN0ZWRDb21wdXRlQ29udGV4dD12LmlkKSxhLmNvbXB1dGVDb250ZXh0cz1mLml0ZW1zLGQo''@;'; put 'put ''KX0sZj0+e2goZil9KX0pfSkoKX1nZXRDdXJyZW50VXNlcigpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2EuY3VycmVudFVzZXJJbmZvTG9hZGluZz0hMCxhLnNhc1ZpeWFTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkuc3Vic2Ny''@;'; put 'put ''aWJlKGY9PnthLmN1cnJlbnRVc2VySW5mb0xvYWRpbmc9ITEsYS5jdXJyZW50VXNlckluZm89ZixhLmRjUGF0aD1gL2V4cG9ydC92aXlhL2hvbWVzLyR7Zi5pZH1gLGQoKX0sZj0+e2NvbnNvbGUuZXJyb3IoIkVycm9yIHdoaWxlIGdldHRpbmcgY3VycmVudCB1c2VyIixmKSxoKGYpfSl9KX0p''@;'; put 'put ''KCl9Z2V0QWRtaW5Hcm91cHMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9PnthLmFkbWluR3JvdXBzTG9hZGluZz0hMCxhLnNhc1ZpeWFTZXJ2aWNlLmdldEFkbWluR3JvdXBzKCkuc3Vic2NyaWJlKGY9PnthLmFkbWluR3JvdXBz''@;'; put 'put ''TG9hZGluZz0hMSxhLmFkbWluR3JvdXBzPWYuaXRlbXMubWFwKHY9Pih7aWQ6di5pZCxuYW1lOnYubmFtZX0pKSxkKCl9KX0pfSkoKX1vbkNvbXB1dGVDb250ZXh0Q2hhbmdlKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2Quc2FzVml5YVNlcnZpY2UuZ2V0Q29tcHV0ZUNv''@;'; put 'put ''bnRleHRCeUlkKGEpLnN1YnNjcmliZShoPT57ZC5ydW5uaW5nQXNVc2VyPWguYXR0cmlidXRlcyYmaC5hdHRyaWJ1dGVzLnJ1blNlcnZlckFzP2guYXR0cmlidXRlcy5ydW5TZXJ2ZXJBczpkLmN1cnJlbnRVc2VySW5mbz8uaWR8fCJ1bmtub3duIn0pfSkoKX1nZXRDb21wdXRlQ29udGV4dE5h''@;'; put 'put ''bWUoYSl7cmV0dXJuIHRoaXMuY29tcHV0ZUNvbnRleHRzLmZpbmQoZD0+ZC5pZD09PWEpPy5uYW1lfHx2b2lkIDB9ZXhlY3V0ZUpzb24oKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLmlzU3VibWl0dGluZ0pzb249ITA7dHJ5e3lpZWxkIGEuc2FzSnMuZGVwbG95U2Vydmlj''@;'; put 'put ''ZVBhY2soYS5qc29uRmlsZSxhLmRjQWRhcHRlclNldHRpbmdzPy5hcHBMb2Msdm9pZCAwLHZvaWQgMCwhMCksYS5hdXRvRGVwbG95U3RhdHVzLmRlcGxveVNlcnZpY2VQYWNrPSEwLGEuaXNKc29uU3VibWl0dGVkPSEwfWNhdGNoKGQpe2xldCBoPSIiO3JldHVybiBoPSJzdHJpbmciIT10eXBl''@;'; put 'put ''b2YgZC5tZXNzYWdlP0pTT04uc3RyaW5naWZ5KGQpLnJlcGxhY2UoL1xcL2dtLCIiKTpkLm1lc3NhZ2UsYS5hdXRvRGVwbG95U3RhdHVzLmRlcGxveVNlcnZpY2VQYWNrPSExLGEuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkRlcGxveSBlcnJvciIsYEV4Y2VwdGlvbjogXG4gJHsiIiE9''@;'; put 'put ''PWg/aDpkfWApLGEuYXV0b2RlcGxveWluZz0hMSx2b2lkKGEuYXV0b2RlcGxveURvbmU9ITEpfWEuaXNTdWJtaXR0aW5nSnNvbj0hMX0pKCl9cnVuQXV0b0RlcGxveSgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKihkPSExKXthLmRlcGxveUluTmV3V2luZG93fHwoYS5hdXRvZGVw''@;'; put 'put ''bG95aW5nPSEwKSxkJiZhLmV4ZWN1dGVKc29uKCksYS5yZWNyZWF0ZURhdGFiYXNlP2EuY3JlYXRlRGF0YWJhc2UoKTphLmRlcGxveUluTmV3V2luZG93fHwoYS5hdXRvZGVwbG95RG9uZT0hMCl9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y3JlYXRlRGF0YWJhc2UoKXtsZXQgYT17ZnJvbWpz''@;'; put 'put ''Olt7QURNSU46dGhpcy5zZWxlY3RlZEFkbWluR3JvdXAsRENQQVRIOnRoaXMuZGNQYXRofV19LGQ9dGhpcy5zYXNKc0NvbmZpZy5jb250ZXh0TmFtZTtpZih0aGlzLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQubGVuZ3RoJiZ0aGlzLmNvbXB1dGVDb250ZXh0cy5sZW5ndGgpe2NvbnN0IGY9dGhp''@;'; put 'put ''cy5nZXRDb21wdXRlQ29udGV4dE5hbWUodGhpcy5zZWxlY3RlZENvbXB1dGVDb250ZXh0KTtmJiYoZD1mKX1sZXQgaD17dXNlQ29tcHV0ZUFwaTpudWxsLGNvbnRleHROYW1lOmQsZGVidWc6ITB9O3RoaXMuZGVwbG95SW5OZXdXaW5kb3c/dGhpcy5ydW5NYWtlZGF0YUluTmV3V2luZG93KHtj''@;'; put 'put ''b250ZXh0TmFtZTpkLGFkbWluOnRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwLGRjUGF0aDp0aGlzLmRjUGF0aH0pOnRoaXMuc2FzSnMucmVxdWVzdCgic2VydmljZXMvYWRtaW4vbWFrZWRhdGEiLGEsaCwoKT0+e3RoaXMuc2FzU2VydmljZS5zaG91bGRMb2dpbi5uZXh0KCEwKX0pLnRoZW4oZj0+''@;'; put 'put ''e3RoaXMuYXV0b2RlcGxveURvbmU9ITA7dHJ5e3RoaXMubWFrZURhdGFSZXNwb25zZT1KU09OLnN0cmluZ2lmeShmKX1jYXRjaHt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9Zn10aGlzLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFrZURhdGE9ISEoZi5yZXN1bHQmJmYucmVzdWx0Lmxlbmd0aD4wKSx0''@;'; put 'put ''eXBlb2YgZi5zYXNqc0Fib3J0PCJ1IiYmdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoIm1ha2VkYXRhIixmLnNhc2pzQWJvcnRbMF0uTVNHLHtTWVNXQVJOSU5HVEVYVDpmLlNZU1dBUk5JTkdURVhULFNZU0VSUk9SVEVYVDpmLlNZU0VSUk9SVEVYVCxNQUM6Zi5zYXNqc0Fib3J0''@;'; put 'put ''WzBdLk1BQ30pLHRoaXMuaGVscGVyU2VydmljZS5pc1N0cmVhbWluZ1ZpeWEoKSYmdGhpcy51cGRhdGVJbmRleEh0bWxDb21wdXRlQ29udGV4dCgpfSkuY2F0Y2goZj0+e3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJtYWtlZGF0YSIsSlNPTi5zdHJpbmdpZnkoZikpLHRoaXMu''@;'; put 'put ''YXV0b0RlcGxveVN0YXR1cy5ydW5NYWtlRGF0YT0hMSx0aGlzLmF1dG9kZXBsb3lEb25lPSEwO3RyeXt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9SlNPTi5zdHJpbmdpZnkoZil9Y2F0Y2h7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPWZ9fSl9cnVuTWFrZWRhdGFJbk5ld1dpbmRvdyhhKXtsZXQgZD10''@;'; put 'put ''aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCxoPXRoaXMuc2FzanNDb25maWcuYXBwTG9jO2NvbnN0IGY9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihkK2YrIi8/X3Byb2dyYW09IitoKyIvc2VydmljZXMvYWRtaW4vbWFrZWRhdGEiK2AmX2NvbnRleHRu''@;'; put 'put ''YW1lPSR7YS5jb250ZXh0TmFtZX1gK2AmYWRtaW49JHthLmFkbWlufWArYCZkY3BhdGg9JHthLmRjUGF0aH0mX2RlYnVnPTEzMWApfXVwZGF0ZUluZGV4SHRtbENvbXB1dGVDb250ZXh0KCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Y29uc3QgZD1sb2NhdGlvbi5zZWFyY2gu''@;'; put 'put ''c3BsaXQoIi8iKS5wb3AoKSxoPWQ/LmluY2x1ZGVzKCIuIik/ZDp2b2lkIDA7aWYoIWgpcmV0dXJuIHZvaWQgYS5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCwiV2UgY291bGQgbm90IGZpZ3VyZSBvdXQgdGhlIGZpbGUgbmFtZSBvZiBgaW5kZXguaHRtbGAgYmFzZWQgb24gdGhl''@;'; put 'put ''IHVybC4iKTtjb25zdCBmPXlpZWxkIGEuc2FzU2VydmljZS5nZXRGaWxlQ29udGVudChgJHthLmFwcExvY30vc2VydmljZXNgLGgpO2lmKCFmKXJldHVybiB2b2lkIGEubG9nZ2VyU2VydmljZS5lcnJvcihgRmFpbGVkIHRvIGdldCAke2h9IGF0ICR7YS5hcHBMb2N9L3NlcnZpY2VzYCk7Y29u''@;'; put 'put ''c3Qgdj1hLmdldENvbXB1dGVDb250ZXh0TmFtZShhLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQpO2lmKCF2KXJldHVybiB2b2lkIGEubG9nZ2VyU2VydmljZS5lcnJvcihgQ29tcHV0ZSBjb250ZXh0IG5hbWUgbm90IGZvdW5kIGZvciBJRDogJHthLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHR9IHwg''@;'; put 'put ''TGlzdDogJHtKU09OLnN0cmluZ2lmeShhLmNvbXB1dGVDb250ZXh0cyl9YCk7Y29uc3QgTT1mLnJlcGxhY2UoL2NvbnRleHRuYW1lPSJbXiJdKiIvZyxgY29udGV4dG5hbWU9IiR7dn0iYCk7eWllbGQgYS5zYXNTZXJ2aWNlLnVwZGF0ZUZpbGVDb250ZW50KGAke2EuYXBwTG9jfS9zZXJ2aWNl''@;'; put 'put ''c2AsaCxNKS5jYXRjaChEPT57YS5sb2dnZXJTZXJ2aWNlLmVycm9yKGBGYWlsZWQgdG8gdXBkYXRlIERhdGFDb250cm9sbGVyLmh0bWw6ICR7RH1gKX0pfSkoKX1kb3dubG9hZEZpbGUoYSxkLGg9InR4dCIpe3RoaXMuZGVwbG95U2VydmljZS5kb3dubG9hZEZpbGUoYSxkLGgpfW9uSnNvbkZp''@;'; put 'put ''bGVDaGFuZ2UoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IGg9YS50YXJnZXQuZmlsZXNbMF07ZC5qc29uRmlsZT15aWVsZCBkLmRlcGxveVNlcnZpY2UucmVhZEZpbGUoaCl9KSgpfXJlY3JlYXRlRGF0YWJhc2VDbGlja2VkKGEpeyEwPT09YS50YXJnZXQuY2hlY2tl''@;'; put 'put ''ZCYmKHRoaXMucmVjcmVhdGVEYXRhYmFzZU1vZGFsPSEwKX1jbGVhclVwbG9hZElucHV0KGEpe3RoaXMuZGVwbG95U2VydmljZS5jbGVhclVwbG9hZElucHV0KGEpfW9wZW5TYXNSZXF1ZXN0c01vZGFsKCl7dGhpcy5ldmVudFNlcnZpY2Uub3BlblJlcXVlc3RzTW9kYWwoKX1uYXZpZ2F0ZVRv''@;'; put 'put ''SG9tZSgpe3RoaXMub25OYXZpZ2F0ZVRvSG9tZS5lbWl0KCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUoRWMpLHFlKGc0ZSkscWUoS3MpLHFlKFckKSxxZShvaCkscWUoTHUpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPWFyKHt0eXBlOmMs''@;'; put 'put ''c2VsZWN0b3JzOltbImFwcC1hdXRvbWF0aWMtZGVwbG95Il1dLGlucHV0czp7c2FzSnM6InNhc0pzIixzYXNKc0NvbmZpZzoic2FzSnNDb25maWciLGRjQWRhcHRlclNldHRpbmdzOiJkY0FkYXB0ZXJTZXR0aW5ncyIsYXBwTG9jOiJhcHBMb2MiLGRjUGF0aDoiZGNQYXRoIixzZWxlY3RlZEFk''@;'; put 'put ''bWluR3JvdXA6InNlbGVjdGVkQWRtaW5Hcm91cCJ9LG91dHB1dHM6e29uTmF2aWdhdGVUb0hvbWU6Im9uTmF2aWdhdGVUb0hvbWUifSxzdGFuZGFsb25lOiExLGRlY2xzOjQ0LHZhcnM6MTEsY29uc3RzOltbImNsYXNzIiwiYXV0by1kZXBsb3kiLDQsIm5nSWYiXSxbMSwidGV4dC1jZW50ZXIi''@;'; put 'put ''LCJteS0xNSJdLFsiZm9yIiwiZGNsb2MiLDEsIm10LTIwIiwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbMSwibWItMTAiLCJjbHItY29udHJvbC1jb250YWluZXIiXSxbMSwiY2xyLWlucHV0LXdyYXBwZXIiXSxbMSwibXQtMCJdLFsxLCJtYi0xMCIsImNsci1jb250cm9sLWNvbnRhaW5lciIsImRj''@;'; put 'put ''LWxvYy1pbnB1dC13cmFwcGVyIl0sWzEsImNsci1pbnB1dC13cmFwcGVyIiwic21hbGwtbXQiXSxbImNscklucHV0IiwiIiwibmFtZSIsImRjbG9jIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsiY2xyU2VsZWN0IiwiIiwibmFtZSIsIm9wdGlvbnMiLDMsIm5nTW9kZWwiLCJuZ01v''@;'; put 'put ''ZGVsQ2hhbmdlIiw0LCJuZ0lmIl0sWyJjbHJJbmxpbmUiLCIiLCJjbGFzcyIsInNwaW5uZXItc20iLDQsIm5nSWYiXSxbImZvciIsImNvbXB1dGVDb250ZXh0IiwxLCJtdC0yMCIsImNsci1jb250cm9sLWxhYmVsIl0sWzQsIm5nSWYiXSxbMSwiYnRuLWF1dG9kZXBsb3kiLCJidG4iLCJidG4t''@;'; put 'put ''cHJpbWFyeSIsImQtaW5saW5lLWJsb2NrIiwibXItMTAiLDMsImNsaWNrIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUi''@;'; put 'put ''LCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsxLCJhdXRvLWRlcGxveSJdLFsxLCJzcGlubmVyLWJveCJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1tZCJdLFsxLCJtLTAiLCJhbGlnbi1zZWxmLXN0YXJ0Il0sWzEsInctMTAwIl0sWyJjbGFzcyIs''@;'; put 'put ''ImRlcGxveS1zdGF0dXMtcm93Iiw0LCJuZ0lmIl0sWzEsImJ1dHRvbnMiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtdC0xNSIsIm1yLTAiLDMsImNsaWNrIl0sWyJjbGFzcyIsImRlcGxveS1lcnJvciIsInNoYXBlIiwidGltZXMtY2lyY2xlIiw0LCJuZ0lmIl0sWzEsImJ0biIsImJ0bi1w''@;'; put 'put ''cmltYXJ5LW91dGxpbmUiLCJtdC0xNSIsIm1yLTAiLDMsImNsaWNrIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5LW91dGxpbmUiLCJtdC0xNSIsIm1yLTAiLCJhbGlnbi1zZWxmLWVuZCIsMywiY2xpY2siXSxbMSwiZGVwbG95LXN0YXR1cy1yb3ciXSxbImNsYXNzIiwiZGVwbG95LXN1Y2Nlc3Mi''@;'; put 'put ''LCJzaGFwZSIsInN1Y2Nlc3Mtc3RhbmRhcmQiLDQsIm5nSWYiXSxbInNoYXBlIiwic3VjY2Vzcy1zdGFuZGFyZCIsMSwiZGVwbG95LXN1Y2Nlc3MiXSxbInNoYXBlIiwidGltZXMtY2lyY2xlIiwxLCJkZXBsb3ktZXJyb3IiXSxbImNsclNlbGVjdCIsIiIsIm5hbWUiLCJvcHRpb25zIiwzLCJu''@;'; put 'put ''Z01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZhbHVlIl0sWyJjbHJJbmxpbmUiLCIiLDEsInNwaW5uZXItc20iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihndCgwLFl0dCw0LDIsImRpdiIsMCksZGUoMSwiaDQiLDEp''@;'; put 'put ''LFBlKDIsIlZpeWEgRGVwbG95IiksaGUoKSxHdCgzLCJociIpLGRlKDQsImxhYmVsIiwyKSxQZSg1LCJBcHAgTG9jIiksaGUoKSxkZSg2LCJkaXYiLDMpKDcsImRpdiIsNCkoOCwicCIsNSksUGUoOSksaGUoKSgpKCksZGUoMTAsImxhYmVsIiwyKSxQZSgxMSwiREMgTG9jIiksaGUoKSxkZSgx''@;'; put 'put ''MiwiZGl2Iiw2KSgxMywiZGl2Iiw3KSgxNCwiaW5wdXQiLDgpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gZmkoaC5kY1BhdGgsdil8fChoLmRjUGF0aD12KSx2fSksaGUoKSgpKCksZGUoMTUsImxhYmVsIiwyKSxQZSgxNiwiU0FTIEFkbWluIGdyb3VwIiksaGUoKSxk''@;'; put 'put ''ZSgxNywiZGl2IiwzKSgxOCwiZGl2Iiw3KSxndCgxOSwkdHQsMiwyLCJzZWxlY3QiLDkpKDIwLEt0dCwxLDAsImNsci1zcGlubmVyIiwxMCksaGUoKSgpLGRlKDIxLCJsYWJlbCIsMTEpLFBlKDIyLCJDb21wdXRlIENvbnRleHQiKSxoZSgpLGRlKDIzLCJkaXYiLDMpKDI0LCJkaXYiLDcpLGd0''@;'; put 'put ''KDI1LHF0dCwyLDIsInNlbGVjdCIsOSkoMjYsSnR0LDEsMCwiY2xyLXNwaW5uZXIiLDEwKSxoZSgpKCksZ3QoMjcsUXR0LDcsMSwibmctY29udGFpbmVyIiwxMiksR3QoMjgsImhyIiksZGUoMjksImJ1dHRvbiIsMTMpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5ydW5BdXRvRGVw''@;'; put 'put ''bG95KCl9KSxQZSgzMCwiIERlcGxveVxuIiksaGUoKSxkZSgzMSwiY2xyLW1vZGFsIiwxNCksY2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGZpKGgucmVjcmVhdGVEYXRhYmFzZU1vZGFsLHYpfHwoaC5yZWNyZWF0ZURhdGFiYXNlTW9kYWw9diksdn0pLGRlKDMy''@;'; put 'put ''LCJoMyIsMTUpLFBlKDMzLCJXYXJuaW5nIiksaGUoKSxkZSgzNCwiZGl2IiwxNiksUGUoMzUsIiBUaGlzIGFjdGlvbiB3aWxsIHJlY3JlYXRlIHRoZSBkYXRhYmFzZSAoaWYgaXQgZXhpc3RzKS4gRm9yIGFuIGluaXRpYWwgZGVwbG95bWVudCwgdGhpcyBpcyBleHBlY3RlZC4gSWYgdGhpcyBp''@;'; put 'put ''cyBhIHJlLWRlcGxveW1lbnQsIHlvdSB3aWxsIGxvc2UgYW55IGV4aXN0aW5nIHRhYmxlcyBpbiAiKSxkZSgzNiwic3Ryb25nIiksUGUoMzcpLGhlKCksUGUoMzgsIi4gIiksaGUoKSxkZSgzOSwiZGl2IiwxNykoNDAsImJ1dHRvbiIsMTgpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''aC5yZWNyZWF0ZURhdGFiYXNlTW9kYWw9ITEsaC5yZWNyZWF0ZURhdGFiYXNlPSExfSksUGUoNDEsIiBDYW5jZWwgIiksaGUoKSxkZSg0MiwiYnV0dG9uIiwxOCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnJlY3JlYXRlRGF0YWJhc2VNb2RhbD0hMSxoLnJlY3JlYXRlRGF0YWJh''@;'; put 'put ''c2U9ITB9KSxQZSg0MywiIE9rICIpLGhlKCkoKSgpKSwyJmQmJihFZSgibmdJZiIsaC5hdXRvZGVwbG95aW5nKSxmZSg5KSxDcihoLmFwcExvYyksZmUoNSksbGkoIm5nTW9kZWwiLGguZGNQYXRoKSxmZSg1KSxFZSgibmdJZiIsIWguYWRtaW5Hcm91cHNMb2FkaW5nKSxmZSgpLEVlKCJuZ0lm''@;'; put 'put ''IixoLmFkbWluR3JvdXBzTG9hZGluZyksZmUoNSksRWUoIm5nSWYiLCFoLmNvbXB1dGVDb250ZXh0c0xvYWRpbmcpLGZlKCksRWUoIm5nSWYiLGguY29tcHV0ZUNvbnRleHRzTG9hZGluZyksZmUoKSxFZSgibmdJZiIsaC5ydW5uaW5nQXNVc2VyKSxmZSg0KSxsaSgiY2xyTW9kYWxPcGVuIixo''@;'; put 'put ''LnJlY3JlYXRlRGF0YWJhc2VNb2RhbCksRWUoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSg2KSxDcihoLmRjUGF0aCkpfSxkZXBlbmRlbmNpZXM6W2hzLENhLHhmLEVmLG5jLE1mLGhsLHJsLFVsLGJ1LHIwLENzLE1kLE45LGZoXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2Nv''@;'; put 'put ''bnN0IERxPSgpPT4oe3N0YW5kYWxvbmU6ITB9KTtmdW5jdGlvbiB0bnQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDYpKDEsInAiLDcpLFBlKDIsIlBsZWFzZSBsb2cgaW4gZmlyc3QiKSxoZSgpLGRlKDMsImxhYmVsIiw4KSxQZSg0LCJVc2VybmFtZSIpLGhlKCksZGUoNSwiZGl2Iiw5KSg2LCJk''@;'; put 'put ''aXYiLDEwKSxHdCg3LCJpbnB1dCIsMTEpLGhlKCkoKSxkZSg4LCJsYWJlbCIsMTIpLFBlKDksIlBhc3N3b3JkIiksaGUoKSxkZSgxMCwiZGl2Iiw5KSgxMSwiZGl2IiwxMCksR3QoMTIsImlucHV0IiwxMyksaGUoKSgpLGRlKDEzLCJidXR0b24iLDE0KSxQZSgxNCwiTG9nIGluIiksaGUoKSgp''@;'; put 'put ''KX1mdW5jdGlvbiBubnQoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDM2KSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7RWUoInZhbHVlIixhLmlkKSxmZSgpLElyKCIgIixhLm5hbWUsIiAiKX19ZnVuY3Rpb24gcm50KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIp''@;'; put 'put ''LFBlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpLiRpbXBsaWNpdDtmZSgpLElyKCIoICIsYS5hdHRyaWJ1dGVzLnN5c1VzZXJJZCwiICkiKX19ZnVuY3Rpb24gaW50KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiwzNiksUGUoMSksZ3QoMixybnQsMiwxLCJzcGFuIiw1KSxkbCgzLCJq''@;'; put 'put ''c29uIiksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0VlKCJ2YWx1ZSIsYS5uYW1lKSxmZSgpLElyKCIgIixhLm5hbWUsIiAiKSxmZSgpLEVlKCJuZ0lmIiwie30iIT1qYygzLDMsYS5hdHRyaWJ1dGVzKSl9fWZ1bmN0aW9uIGFudChjLGwpezEmYyYmKGRlKDAsInNwYW4iKSxQZSgx''@;'; put 'put ''LCJKU09OIFN1Ym1pdHRlZCBTdWNjZXNzZnVsbHkiKSxoZSgpKX1mdW5jdGlvbiBvbnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJidXR0b24iLDM3KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDIpLmRvd25sb2FkU2FzUHJlY29kZUZpbGUoKSl9''@;'; put 'put ''KSxHdCgxLCJjbHItaWNvbiIsMzgpLGhlKCl9fWZ1bmN0aW9uIHNudChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO29pKDApLGRlKDEsInAiLDM5KSxQZSgyLCJGaWxlIGV4ZWN1dGUgY29tcGxldGVkIiksaGUoKSxHdCgzLCJociIpLGRlKDQsImRpdiIpKDUsImJ1dHRvbiIsNDApLE90KCJj''@;'; put 'put ''bGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpO3JldHVybiBDdChoLmRvd25sb2FkRmlsZShoLmpvYkxvZywiZXhlY3V0ZS1zY3JpcHQtbG9nIiwidHh0IikpfSksUGUoNiwiIERvd25sb2FkIGxvZyAiKSxoZSgpKCksc2koKX19ZnVuY3Rpb24gbG50KGMsbCl7aWYoMSZjJiYo''@;'; put 'put ''ZGUoMCwiZGl2Iiw0NCksUGUoMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKCksSXIoIiAiLGEubWFrZURhdGFSZXNwb25zZSwiICIpfX1mdW5jdGlvbiBjbnQoYyxsKXsxJmMmJihvaSgwKSxkZSgxLCJzcGFuIiwyNSksUGUoMiwiIFZhbGlkYXRpbmcgZGVwbG95Li4uICIpLGhlKCks''@;'; put 'put ''ZGUoMywic3BhbiIpLFBlKDQsIiBWYWxpZGF0aW5nIGRlcGxveS4uLiAiKSxoZSgpLHNpKCkpfWZ1bmN0aW9uIHVudChjLGwpezEmYyYmKG9pKDApLEd0KDEsImNsci1pY29uIiw0NiksZGUoMiwic3BhbiIpLFBlKDMsIiBWYWxpZGF0aW9uIGZhaWxlZCAiKSxoZSgpLHNpKCkpfWZ1bmN0aW9u''@;'; put 'put ''IGRudChjLGwpezEmYyYmKG9pKDApLEd0KDEsImNsci1pY29uIiw0NyksZGUoMiwic3BhbiIpLFBlKDMsIiBWYWxpZGF0aW9uIHN1Y2NlZWRlZCAiKSxoZSgpLHNpKCkpfWZ1bmN0aW9uIGhudChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNDUpLGd0KDEsY250LDUsMCwibmctY29udGFpbmVy''@;'; put 'put ''Iiw1KSgyLHVudCw0LDAsIm5nLWNvbnRhaW5lciIsNSkoMyxkbnQsNCwwLCJuZy1jb250YWluZXIiLDUpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgzKTtmZSgpLEVlKCJuZ0lmIixhLmlzVmFsaWRhdGluZyksZmUoKSxFZSgibmdJZiIsIWEuaXNWYWxpZGF0aW5nJiYiZXJyb3IiPT09YS52YWxp''@;'; put 'put ''ZGF0aW9uU3RhdGUpLGZlKCksRWUoIm5nSWYiLCFhLmlzVmFsaWRhdGluZyYmInN1Y2Nlc3MiPT09YS52YWxpZGF0aW9uU3RhdGUpfX1mdW5jdGlvbiBmbnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtvaSgwKSxkZSgxLCJwIiwzOSksUGUoMiwiQ3JlYXRlIERhdGFiYXNlIENvbXBsZXRl''@;'; put 'put ''ZCIpLGhlKCksR3QoMywiaHIiKSxndCg0LGxudCwyLDEsImRpdiIsNDEpLGRlKDUsImJ1dHRvbiIsNDIpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikubmF2aWdhdGVUb0hvbWUoKSl9KSxQZSg2LCIgTGV0J3MgZ2V0IHN0YXJ0ZWQgIiksaGUoKSxkZSg3LCJi''@;'; put 'put ''dXR0b24iLDQyKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgyKTtyZXR1cm4gQ3QoaC5kb3dubG9hZEZpbGUoaC5tYWtlRGF0YVJlc3BvbnNlLCJjcmVhdGUtZGF0YWJhc2UtbG9nIiwidHh0IikpfSksUGUoOCwiIERvd25sb2FkIGxvZyAiKSxoZSgpLGRlKDksImJ1''@;'; put 'put ''dHRvbiIsNDIpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikudmFsaWRhdGVEZXBsb3koKSl9KSxQZSgxMCwiIFZhbGlkYXRlICIpLGhlKCksZ3QoMTEsaG50LDQsMywiZGl2Iiw0Myksc2koKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7ZmUoNCksRWUoIm5nSWYi''@;'; put 'put ''LGEubWFrZURhdGFSZXNwb25zZS5sZW5ndGg+MCksZmUoNyksRWUoIm5nSWYiLCJub25lIiE9PWEudmFsaWRhdGlvblN0YXRlfHxhLmlzVmFsaWRhdGluZyl9fWZ1bmN0aW9uIHBudChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO29pKDApLGRlKDEsImZvcm0iKSgyLCJkaXYiLDE1KSgzLCJs''@;'; put 'put ''YWJlbCIsMTYpLFBlKDQsIkFkbWluIGdyb3VwIiksaGUoKSxkZSg1LCJkaXYiLDE3KSg2LCJkaXYiLDE4KSg3LCJzZWxlY3QiLDE5KSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpO3JldHVybiBmaShmLnNlbGVjdGVkQWRtaW5Hcm91cCxoKXx8KGYu''@;'; put 'put ''c2VsZWN0ZWRBZG1pbkdyb3VwPWgpLEN0KGgpfSksZ3QoOCxubnQsMiwyLCJvcHRpb24iLDIwKSxoZSgpKCkoKSgpLGRlKDksImRpdiIsMTUpKDEwLCJkaXYiKSgxMSwibGFiZWwiLDE2KSxQZSgxMiwiQ29udGV4dCIpLGhlKCksZGUoMTMsImRpdiIsMTcpKDE0LCJkaXYiLDE4KSgxNSwic2Vs''@;'; put 'put ''ZWN0IiwyMSksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKTtyZXR1cm4gZmkoZi5zZWxlY3RlZENvbnRleHQsaCl8fChmLnNlbGVjdGVkQ29udGV4dD1oKSxDdChoKX0pLGd0KDE2LGludCw0LDUsIm9wdGlvbiIsMjApLGhlKCkoKSgpLGRlKDE3LCJi''@;'; put 'put ''dXR0b24iLDIyKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuZXhlY3V0YWJsZUNvbnRleHQoKSl9KSxHdCgxOCwiY2xyLWljb24iLDIzKSxoZSgpKCksZGUoMTksImRpdiIsMjQpKDIwLCJzcGFuIiwyNSksUGUoMjEsIiBMb2FkaW5nIGNvbnRleHRzLi4uICIp''@;'; put 'put ''LGhlKCksZGUoMjIsInNwYW4iKSxQZSgyMywiIExvYWRpbmcgY29udGV4dHMuLi4gIiksaGUoKSgpLGRlKDI0LCJsYWJlbCIsMjYpLFBlKDI1LCJEQyBMb2MiKSxoZSgpLGRlKDI2LCJkaXYiLDkpKDI3LCJkaXYiLDEwKSgyOCwiaW5wdXQiLDI3KSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rp''@;'; put 'put ''b24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpO3JldHVybiBmaShmLmRjUGF0aCxoKXx8KGYuZGNQYXRoPWgpLEN0KGgpfSksT3QoImZvY3Vzb3V0IixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLnNhdmVEY1BhdGgoKSl9KSxoZSgpKCkoKSxkZSgyOSwicCIsMjgpLFBlKDMwLCIgU2Vs''@;'; put 'put ''ZWN0IEpTT04gZmlsZSB0byB1cGxvYWQgKGpzb24gYnVpbGQgZmlsZSBwcmVsb2FkZWQpOiAiKSxoZSgpLGRlKDMxLCJkaXYiLDI5KSgzMiwiaW5wdXQiLDMwKSxPdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgpLmNsZWFyVXBsb2FkSW5wdXQoaCkpfSkoImNoYW5n''@;'; put 'put ''ZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkub25Kc29uRmlsZUNoYW5nZShoKSl9KSxoZSgpKCksZGUoMzMsImRpdiIsMzEpKDM0LCJidXR0b24iLDMyKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuZXhlY3V0ZUpzb24oKSl9KSxQZSgzNSwi''@;'; put 'put ''IFNVQk1JVCBKU09OICIpLGhlKCksZ3QoMzYsYW50LDIsMCwic3BhbiIsNSksaGUoKSxkZSgzNywicCIsMjgpLFBlKDM4LCJTZWxlY3QgU0FTIGZpbGUgdG8gdXBsb2FkOiIpLGhlKCksZGUoMzksImRpdiIsMjkpKDQwLCJpbnB1dCIsMzApLE90KCJjbGljayIsZnVuY3Rpb24oaCl7cmV0dXJu''@;'; put 'put ''IHd0KGEpLEN0KE9lKCkuY2xlYXJVcGxvYWRJbnB1dChoKSl9KSgiY2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCk7cmV0dXJuIGYub25TYXNGaWxlQ2hhbmdlKGgpLEN0KGYuZG93bmxvYWRGaWxlQnRuPSEwKX0pLGhlKCksZ3QoNDEsb250LDIsMCwiYnV0dG9uIiwzMyks''@;'; put 'put ''aGUoKSxkZSg0MiwiZGl2IiwzMSkoNDMsImJ1dHRvbiIsMzQpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5leGVjdXRlU0FTKCkpfSksUGUoNDQsIiBTVUJNSVQgIiksaGUoKSgpKCksZ3QoNDUsc250LDcsMCwibmctY29udGFpbmVyIiw1KSxkZSg0NiwiYnV0''@;'; put 'put ''dG9uIiwzNSksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmNyZWF0ZURhdGFiYXNlKCkpfSksUGUoNDcsIiBDcmVhdGUgRGF0YWJhc2UgIiksaGUoKSxndCg0OCxmbnQsMTIsMiwibmctY29udGFpbmVyIiw1KSxoZSgpLHNpKCl9aWYoMiZjKXtjb25zdCBhPU9l''@;'; put 'put ''KCk7ZmUoNyksbGkoIm5nTW9kZWwiLGEuc2VsZWN0ZWRBZG1pbkdyb3VwKSxFZSgibmdNb2RlbE9wdGlvbnMiLHRsKDE5LERxKSksZmUoKSxFZSgibmdGb3JPZiIsYS5hZG1pbkdyb3VwcyksZmUoMikseHIoImhpZGRlbiIsYS5jb250ZXh0c0xvYWRpbmcpLGZlKDUpLGxpKCJuZ01vZGVsIixh''@;'; put 'put ''LnNlbGVjdGVkQ29udGV4dCksRWUoIm5nTW9kZWxPcHRpb25zIix0bCgyMCxEcSkpLGZlKCksRWUoIm5nRm9yT2YiLGEuYWxsQ29udGV4dHMpLGZlKDMpLHhyKCJoaWRkZW4iLCFhLmNvbnRleHRzTG9hZGluZyksZmUoOSksbGkoIm5nTW9kZWwiLGEuZGNQYXRoKSxFZSgibmdNb2RlbE9wdGlv''@;'; put 'put ''bnMiLHRsKDIxLERxKSksZmUoNiksRWUoImNsckxvYWRpbmciLGEuaXNTdWJtaXR0aW5nSnNvbiksZmUoMiksRWUoIm5nSWYiLGEuaXNKc29uU3VibWl0dGVkKSxmZSg1KSxFZSgibmdJZiIsYS5kb3dubG9hZEZpbGVCdG4pLGZlKDIpLEVlKCJjbHJMb2FkaW5nIixhLmV4ZWN1dGluZ1Njcmlw''@;'; put 'put ''dCksZmUoMiksRWUoIm5nSWYiLGEuam9iTG9nLmxlbmd0aD4wKSxmZSgpLEVlKCJjbHJMb2FkaW5nIixhLmNyZWF0ZURhdGFiYXNlTG9hZGluZyksZmUoMiksRWUoIm5nSWYiLGEubWFrZURhdGFSZXNwb25zZS5sZW5ndGg+MCl9fWxldCBnbnQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcihh''@;'; put 'put ''LGQsaCxmKXt0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMubG9nZ2VyU2VydmljZT1oLHRoaXMuZGVwbG95U2VydmljZT1mLHRoaXMuc2FzSnNDb25maWc9bmV3IGQyLlNBU2pzQ29uZmlnLHRoaXMub25OYXZpZ2F0ZVRvSG9tZT1uZXcgWHIsdGhpcy5uZWVkc0xv''@;'; put 'put ''Z2luPSExLHRoaXMuYWRtaW5Hcm91cHM9W10sdGhpcy5hbGxDb250ZXh0cz1bXSx0aGlzLmFwcExvYz0iIix0aGlzLmRjUGF0aD0iIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD0iIix0aGlzLnNlbGVjdGVkQ29udGV4dD0iIix0aGlzLmpvYkxvZz0iIix0aGlzLm1ha2VEYXRhUmVzcG9uc2U9''@;'; put 'put ''IiIsdGhpcy5saW5lc09mQ29kZT1bXSx0aGlzLmZpbGVOYW1lPSIiLHRoaXMucHJlbG9hZGVkRmlsZT0hMCx0aGlzLmV4ZWN1dGVTQVNFbmFibGVkPSExLHRoaXMuY29udGV4dHNMb2FkaW5nPSExLHRoaXMuY3JlYXRlRGF0YWJhc2VMb2FkaW5nPSExLHRoaXMuZXhlY3V0aW5nU2NyaXB0PSEx''@;'; put 'put ''LHRoaXMuZG93bmxvYWRGaWxlQnRuPSExLHRoaXMuaXNWYWxpZGF0aW5nPSExLHRoaXMuanNvbkZpbGU9bnVsbCx0aGlzLmlzU3VibWl0dGluZ0pzb249ITEsdGhpcy5pc0pzb25TdWJtaXR0ZWQ9ITEsdGhpcy52YWxpZGF0aW9uU3RhdGU9Im5vbmUifW5nT25Jbml0KCl7fWV4ZWN1dGFibGVD''@;'; put 'put ''b250ZXh0KCl7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe30pKCl9Y2xlYXJVcGxvYWRJbnB1dChhKXt0aGlzLmRlcGxveVNlcnZpY2UuY2xlYXJVcGxvYWRJbnB1dChhKX1vblNhc0ZpbGVDaGFuZ2UoYSl7dGhpcy5wcmVsb2FkZWRGaWxlPSExO2xldCBkPWEudGFyZ2V0LmZpbGVzWzBdO3RoaXMu''@;'; put 'put ''ZmlsZU5hbWU9ZC5uYW1lO2xldCBoPW5ldyBGaWxlUmVhZGVyO2gub25sb2FkPSgpPT57aC5yZXN1bHQmJih0aGlzLmxpbmVzT2ZDb2RlPWgucmVzdWx0LnNwbGl0KCJcbiIpLHRoaXMubGluZXNPZkNvZGU9dGhpcy5saW5lc09mQ29kZS5maWx0ZXIoZj0+IiIhPT1mJiZudWxsIT09ZiksdGhp''@;'; put 'put ''cy5leGVjdXRlU0FTRW5hYmxlZD0hMCx0aGlzLmFkZFByZWNvZGVMaW5lcygpKX0saC5yZWFkQXNUZXh0KGQpfW9uSnNvbkZpbGVDaGFuZ2UoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IGg9YS50YXJnZXQuZmlsZXNbMF07ZC5qc29uRmlsZT15aWVsZCBkLmRlcGxv''@;'; put 'put ''eVNlcnZpY2UucmVhZEZpbGUoaCl9KSgpfWFkZFByZWNvZGVMaW5lcygpe3RoaXMubGluZXNPZkNvZGUudW5zaGlmdChgJWxldCBjb250ZXh0PSR7dGhpcy5zZWxlY3RlZENvbnRleHR9O2AsYCVsZXQgYXBwTG9jPSR7dGhpcy5hcHBMb2N9O2AsYCVsZXQgYWRtaW49JHt0aGlzLnNlbGVjdGVk''@;'; put 'put ''QWRtaW5Hcm91cH07YCxgJWxldCBkY3BhdGg9JHt0aGlzLmRjUGF0aH07YCl9ZG93bmxvYWRTYXNQcmVjb2RlRmlsZSgpe2xldCBhPXRoaXMubGluZXNPZkNvZGUuam9pbigiXG4iKSxkPXRoaXMuZmlsZU5hbWUuc3BsaXQoIi4iKVswXTt0aGlzLmRvd25sb2FkRmlsZShhLGQsInNhcyIpfWRv''@;'; put 'put ''d25sb2FkRmlsZShhLGQsaD0idHh0Iil7dGhpcy5kZXBsb3lTZXJ2aWNlLmRvd25sb2FkRmlsZShhLGQsaCl9c2F2ZURjUGF0aCgpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJkZXBsb3lfZGNfbG9jIix0aGlzLmRjUGF0aCl9ZXhlY3V0ZUpzb24oKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5j''@;'; put 'put ''dGlvbiooKXthLmlzU3VibWl0dGluZ0pzb249ITA7dHJ5e3lpZWxkIGEuc2FzSnMuZGVwbG95U2VydmljZVBhY2soYS5qc29uRmlsZSxhLmRjQWRhcHRlclNldHRpbmdzPy5hcHBMb2N8fCIiLHZvaWQgMCx2b2lkIDAsITApLGEuaXNKc29uU3VibWl0dGVkPSEwfWNhdGNoKGQpe2xldCBoPSIi''@;'; put 'put ''O3JldHVybiBoPSJzdHJpbmciIT10eXBlb2YgZC5tZXNzYWdlP0pTT04uc3RyaW5naWZ5KGQpLnJlcGxhY2UoL1xcL2dtLCIiKTpkLm1lc3NhZ2Usdm9pZCBhLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJEZXBsb3kgZXJyb3IiLGBFeGNlcHRpb246IFxuICR7IiIhPT1oP2g6ZH1gKX1h''@;'; put 'put ''LmlzU3VibWl0dGluZ0pzb249ITF9KSgpfWV4ZWN1dGVTQVMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLmV4ZWN1dGluZ1NjcmlwdD0hMCxhLmpvYkxvZz0iIixhLm1ha2VEYXRhUmVzcG9uc2U9IiI7dHJ5e2xldCBkPXlpZWxkIGEuc2FzSnMuZXhlY3V0ZVNjcmlwdCh7''@;'; put 'put ''ZmlsZU5hbWU6YS5maWxlTmFtZSxsaW5lc09mQ29kZTphLmxpbmVzT2ZDb2RlLGNvbnRleHROYW1lOmEuc2VsZWN0ZWRDb250ZXh0fSk7YS5sb2dnZXJTZXJ2aWNlLmxvZyhkKSwic3RyaW5nIj09dHlwZW9mIGQubG9nJiYoZC5sb2c9SlNPTi5wYXJzZShkLmxvZykpLCJlcnJvciI9PT1kLmpv''@;'; put 'put ''YlN0YXR1cz9hbGVydCgiRXJyb3IhIik6YS5qb2JMb2c9ZC5sb2cuaXRlbXM/ZC5sb2cuaXRlbXMubWFwKGg9PmgubGluZSkuam9pbigiXG4iKTpKU09OLnN0cmluZ2lmeShkLmxvZyksYS5leGVjdXRpbmdTY3JpcHQ9ITF9Y2F0Y2h7YS5leGVjdXRpbmdTY3JpcHQ9ITF9fSkoKX1jcmVhdGVE''@;'; put 'put ''YXRhYmFzZShhPSEwKXtpZihhKXtsZXQgZj10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKS5zZXJ2ZXJVcmwrIi9TQVNKb2JFeGVjdXRpb24vP19wcm9ncmFtPSIrdGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz8uYXBwTG9jfHwiL2FkbWluL21ha2VkYXRhJkFETUlOPSIrdGhpcy5zZWxl''@;'; put 'put ''Y3RlZEFkbWluR3JvdXArIiZEQ1BBVEg9Iit0aGlzLmRjUGF0aCsiJl9kZWJ1Zz0xMzEiO3dpbmRvdy5vcGVuKGYsIl9ibGFuayIpfWVsc2UgdGhpcy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITAsdGhpcy5zYXNKcy5yZXF1ZXN0KCJzZXJ2aWNlcy9hZG1pbi9tYWtlZGF0YSIse2Zyb21qczpb''@;'; put 'put ''e0FETUlOOnRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwLERDUEFUSDp0aGlzLmRjUGF0aH1dfSx7dXNlQ29tcHV0ZUFwaTpudWxsLGNvbnRleHROYW1lOnRoaXMuc2FzSnNDb25maWcuY29udGV4dE5hbWUsZGVidWc6ITB9LCgpPT57dGhpcy5zYXNTZXJ2aWNlLnNob3VsZExvZ2luLm5leHQoITAp''@;'; put 'put ''fSkudGhlbihmPT57dHJ5e3RoaXMubWFrZURhdGFSZXNwb25zZT1KU09OLnN0cmluZ2lmeShmKX1jYXRjaHt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9Zn10aGlzLmNyZWF0ZURhdGFiYXNlTG9hZGluZz0hMX0pLmNhdGNoKGY9Pnt0aGlzLmNyZWF0ZURhdGFiYXNlTG9hZGluZz0hMTt0cnl7dGhp''@;'; put 'put ''cy5tYWtlRGF0YVJlc3BvbnNlPUpTT04uc3RyaW5naWZ5KGYpfWNhdGNoe3RoaXMubWFrZURhdGFSZXNwb25zZT1mfX0pfW5hdmlnYXRlVG9Ib21lKCl7dGhpcy5vbk5hdmlnYXRlVG9Ib21lLmVtaXQoKX12YWxpZGF0ZURlcGxveSgpe3RoaXMuaXNWYWxpZGF0aW5nPSEwLHRoaXMuc2FzU2Vy''@;'; put 'put ''dmljZS5yZXF1ZXN0KCJwdWJsaWMvc3RhcnR1cHNlcnZpY2UiLG51bGwpLnRoZW4oYT0+e3RoaXMubG9nZ2VyU2VydmljZS5sb2coYS5hZGFwdGVyUmVzcG9uc2UpLHRoaXMudmFsaWRhdGlvblN0YXRlPWEuYWRhcHRlclJlc3BvbnNlLnNhc2xpYnM/InN1Y2Nlc3MiOiJlcnJvciIsdGhpcy5p''@;'; put 'put ''c1ZhbGlkYXRpbmc9ITF9KS5jYXRjaChhPT57dGhpcy5pc1ZhbGlkYXRpbmc9ITEsdGhpcy52YWxpZGF0aW9uU3RhdGU9ImVycm9yIn0pfWRlbGV0ZUtleXMoKXtsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgiZGVwbG95X2RjX2xvYyIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihk''@;'; put 'put ''KXtyZXR1cm4gbmV3KGR8fGMpKHFlKEtzKSxxZShFYykscWUob2gpLHFlKGc0ZSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLW1hbnVhbC1kZXBsb3kiXV0saW5wdXRzOntzYXNKczoic2FzSnMiLHNhc0pzQ29uZmlnOiJzYXNKc0NvbmZpZyIs''@;'; put 'put ''ZGNBZGFwdGVyU2V0dGluZ3M6ImRjQWRhcHRlclNldHRpbmdzIn0sb3V0cHV0czp7b25OYXZpZ2F0ZVRvSG9tZToib25OYXZpZ2F0ZVRvSG9tZSJ9LHN0YW5kYWxvbmU6ITEsZGVjbHM6OSx2YXJzOjMsY29uc3RzOltbMSwiY2FyZC1oZWFkZXIiLCJwb3NpdGlvbi1yZWxhdGl2ZSJdLFsxLCJk''@;'; put 'put ''LWlubGluZS1ibG9jayIsIm1sLTEwIiwibWItMTAiLCJtdC0wIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwiY2xlYXItbWVtb3J5LWJ1dHRvbiIsInBvc2l0aW9uLWFic29sdXRlIiwzLCJjbGljayJdLFsxLCJjYXJkLWJsb2NrIl0sWyJpZCIsImxvZ2luRm9ybSIsImNsYXNzIiwiZC1ub25l''@;'; put 'put ''Iiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbImlkIiwibG9naW5Gb3JtIiwxLCJkLW5vbmUiXSxbMSwibWItMTAiXSxbImZvciIsInVzZXJuYW1lIiwxLCJjbHItY29udHJvbC1sYWJlbCJdLFsxLCJtYi0xMCIsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsxLCJjbHItaW5wdXQtd3JhcHBlciJd''@;'; put 'put ''LFsidHlwZSIsInRleHQiLCJpZCIsInVzZXJuYW1lIiwxLCJjbHItaW5wdXQiXSxbImZvciIsInBhc3N3b3JkIiwxLCJjbHItY29udHJvbC1sYWJlbCJdLFsidHlwZSIsInBhc3N3b3JkIiwiaWQiLCJwYXNzd29yZCIsMSwiY2xyLWlucHV0Il0sWyJpZCIsImxvZ2luQnRuIiwxLCJidG4iLCJi''@;'; put 'put ''dG4tcHJpbWFyeSIsImQtbm9uZSJdLFsxLCJjbHItZm9ybS1jb250cm9sIl0sWyJmb3IiLCJzZWxlY3QtZnVsbCIsMSwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIl0sWzEsImNsci1zZWxlY3Qtd3JhcHBlciJdLFsibmFtZSIsInNlbGVjdGVkQWRtaW5H''@;'; put 'put ''cm91cCIsImlkIiwiYWRtaW5Hcm91cHNTZWxlY3QiLDEsImNsci1zZWxlY3QiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwibmdNb2RlbE9wdGlvbnMiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsibmFtZSIsInNlbGVjdGVkQ29udGV4dCIsMSwiY2xyLXNlbGVjdCIs''@;'; put 'put ''MywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJuZ01vZGVsT3B0aW9ucyJdLFsidHlwZSIsImJ1dHRvbiIsImlkIiwiY29udGV4dHMtYnRuIiwxLCJidG4iLCJidG4taWNvbiIsMywiY2xpY2siXSxbInNoYXBlIiwicGxheSJdLFsxLCJkLWZsZXgiXSxbMSwic3Bpbm5lciIsInNwaW5uZXIt''@;'; put 'put ''aW5saW5lIiwibXItMTAiXSxbImZvciIsImRjbG9jIiwxLCJtdC0yMCIsImNsci1jb250cm9sLWxhYmVsIl0sWyJuYW1lIiwiZGNQYXRoIiwidHlwZSIsInRleHQiLCJpZCIsImRjbG9jIiwxLCJjbHItaW5wdXQiLDMsIm5nTW9kZWxDaGFuZ2UiLCJmb2N1c291dCIsIm5nTW9kZWwiLCJuZ01v''@;'; put 'put ''ZGVsT3B0aW9ucyJdLFsxLCJtdC0xMCJdLFsxLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiJdLFsidHlwZSIsImZpbGUiLDMsImNsaWNrIiwiY2hhbmdlIl0sWzEsIm10LTIwIiwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJpZCIsIiIsMSwibXQtMCIsMywiY2xpY2siLCJjbHJMb2Fk''@;'; put 'put ''aW5nIl0sWyJjbGFzcyIsImJ0biBidG4tc20gYnRuLWljb24gbWluLXctMCB3LTQwIiwzLCJjbGljayIsNCwibmdJZiJdLFsiaWQiLCJkZXBsb3kiLDEsIm10LTAiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsIm10LTEwIiwzLCJjbGljayIsImNsckxv''@;'; put 'put ''YWRpbmciXSxbMywidmFsdWUiXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWljb24iLCJtaW4tdy0wIiwidy00MCIsMywiY2xpY2siXSxbInNoYXBlIiwiZG93bmxvYWQiXSxbMSwibWItMCIsIm10LTEwIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwibXQtMCIsIm1yLTIwIiwzLCJjbGljayJd''@;'; put 'put ''LFsiY2xhc3MiLCJsb2ctd3JhcHBlciIsNCwibmdJZiJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsIm10LTE1IiwzLCJjbGljayJdLFsiY2xhc3MiLCJ2YWxpZGF0aW9uLWJhciIsNCwibmdJZiJdLFsxLCJsb2ctd3JhcHBlciJdLFsxLCJ2YWxpZGF0aW9uLWJhciJdLFsic2hhcGUiLCJleGNs''@;'; put 'put ''YW1hdGlvbi1jaXJjbGUiLDEsImlzLWVycm9yIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsMSwiaXMtc3VjY2VzcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIsMCksUGUoMSwiIENvbmZpZ3VyYXRvciAiKSxkZSgyLCJwIiwxKSxQZSgzKSxoZSgpLGRlKDQs''@;'; put 'put ''ImJ1dHRvbiIsMiksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLmRlbGV0ZUtleXMoKX0pLFBlKDUsIiBDbGVhciBtZW1vcnkgIiksaGUoKSgpLGRlKDYsImRpdiIsMyksZ3QoNyx0bnQsMTUsMCwiZGl2Iiw0KSg4LHBudCw0OSwyMiwibmctY29udGFpbmVyIiw1KSxoZSgpKSwyJmQm''@;'; put 'put ''JihmZSgzKSxJcigiQXBwIExvY2F0aW9uOiAiLGguYXBwTG9jLCIiKSxmZSg0KSxFZSgibmdJZiIsaC5uZWVkc0xvZ2luKSxmZSgpLEVlKCJuZ0lmIiwhaC5uZWVkc0xvZ2luKSl9LGRlcGVuZGVuY2llczpbaHMsQ2EseTkseGYsRWYsbmMsTWYsaGwsbTkscmwsVjMsVWwsYzEsTGYsQ3MsU0dd''@;'; put 'put ''LGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gbW50KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwxNSksR3QoMSwicHJvZ3Jlc3MiKSxoZSgpKX1mdW5jdGlvbiB2bnQoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDE2KSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9''@;'; put 'put ''bC4kaW1wbGljaXQ7RWUoInZhbHVlIixhLkdST1VQTkFNRSksZmUoKSxYdSgiICIsYS5HUk9VUE5BTUUsIiAtICIsYS5HUk9VUERFU0MsIiAiKX19bGV0IHludD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLnNhc2pzU2VydmljZT1kLHRo''@;'; put 'put ''aXMubG9jYXRpb249aCx0aGlzLnNhc0pzQ29uZmlnPW5ldyBkMi5TQVNqc0NvbmZpZyx0aGlzLm9uTmF2aWdhdGVUb0hvbWU9bmV3IFhyLHRoaXMuZGNEaXJlY3Rvcnk9IiIsdGhpcy5kY0FkbWluR3JvdXA9IkRDREVGQVVMVCIsdGhpcy5NRVRBUEVSU09OPSJuL2EiLHRoaXMuTUVUQVVTRVI9''@;'; put 'put ''Im4vYSIsdGhpcy5TWVNVU0VSSUQ9Im4vYSIsdGhpcy5TWVNIT1NUTkFNRT0ibi9hIix0aGlzLlNZU1ZMT05HPSJuL2EiLHRoaXMuZGNBZG1pbkdyb3VwTGlzdD1bXSx0aGlzLmxvYWRpbmc9ITEsdGhpcy5zaG93TG9nb3V0PSExLHRoaXMudG1wRGlyZWN0b3JpZXM9e2xpbnV4OiIvdG1wL0Rh''@;'; put 'put ''dGFDb250cm9sbGVyIix3aW5kb3dzOiJDOlxcRGF0YUNvbnRyb2xsZXIifX1uZ09uSW5pdCgpe3RoaXMuZ2V0VXNlckdyb3VwcygpLHRoaXMuZ2V0U2VydmVySW5mbygpfWdldFNlcnZlckluZm8oKXt0aGlzLnNhc2pzU2VydmljZS5nZXRTZXJ2ZXJJbmZvKCkuc3Vic2NyaWJlKGE9PnsiZGVz''@;'; put 'put ''a3RvcCIhPT1hLm1vZGUmJih0aGlzLnNob3dMb2dvdXQ9ITApfSl9Z2V0VXNlckdyb3Vwcygpe3RoaXMubG9hZGluZz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VyZ3JvdXBzYnltZW1iZXIiLG51bGwpLnRoZW4oYT0+e3RoaXMuTUVUQVBFUlNPTj1hLmFkYXB0ZXJS''@;'; put 'put ''ZXNwb25zZS5NRl9HRVRVU0VSLHRoaXMuU1lTVVNFUklEPWEuYWRhcHRlclJlc3BvbnNlLlNZU1VTRVJJRCx0aGlzLlNZU0hPU1ROQU1FPWEuYWRhcHRlclJlc3BvbnNlLlNZU0hPU1ROQU1FLHRoaXMuU1lTVkxPTkc9YS5hZGFwdGVyUmVzcG9uc2UuU1lTVkxPTkcsdGhpcy5kY0RpcmVjdG9y''@;'; put 'put ''eT10aGlzLnRtcERpcmVjdG9yaWVzW1siTCIsIkgiLCJBIiwiUyJdLmluY2x1ZGVzKGEuYWRhcHRlclJlc3BvbnNlLlNZU1NDUEwuc3Vic3RyaW5nKDAsMSkpPyJsaW51eCI6IndpbmRvd3MiXSx0aGlzLmRjQWRtaW5Hcm91cExpc3Q9YS5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBzLHRoaXMuZGNB''@;'; put 'put ''ZG1pbkdyb3VwPXRoaXMuZGNBZG1pbkdyb3VwTGlzdFswXS5HUk9VUE5BTUUsdGhpcy5sb2FkaW5nPSExfSxhPT57dGhpcy5sb2FkaW5nPSExfSl9bWFrZURhdGEoKXtsZXQgZD10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO2NvbnN0IGg9dGhpcy5zYXNKc0NvbmZpZy5hcHBM''@;'; put 'put ''b2M7bGV0IGY9dGhpcy5zYXNKc0NvbmZpZy5zZXJ2ZXJVcmwsdj10aGlzLmRjRGlyZWN0b3J5O3RoaXMuc2FzSnNDb25maWcuc2VydmVyVHlwZT09PWwxLlkuU2FzanM/dGhpcy5zYXNTZXJ2aWNlLnNhc2pzTWFrZWRhdGFDaGVja2luZygpLnRoZW4oRD0+e0QmJih0aGlzLmxvY2F0aW9uLnJl''@;'; put 'put ''cGxhY2VTdGF0ZSgiLyIpLGxvY2F0aW9uLnJlbG9hZCgpKX0pOnRoaXMuc2FzSnNDb25maWcuc2VydmVyVHlwZT09PWwxLlkuU2FzOSYmKGY9IiIsZD13aW5kb3cubG9jYXRpb24ub3JpZ2luK2QrIi8iLHY9ZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuZGNEaXJlY3RvcnkpKSx3aW5kb3cub3Bl''@;'; put 'put ''bihgJHtmfHwiIn0ke2R9P19wcm9ncmFtPSR7aH0vc2VydmljZXMvYWRtaW4vbWFrZWRhdGEmYWRtaW49JHt0aGlzLmRjQWRtaW5Hcm91cH0mcGF0aD0ke3Z9IGAsIl9ibGFuayIpfWxvZ291dCgpe3RoaXMuc2FzU2VydmljZS5sb2dvdXQoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShLcykscWUoWWRlKSxxZShzMikpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXNhc2pzLWNvbmZpZ3VyYXRvciJdXSxpbnB1dHM6e3Nhc0pzOiJzYXNKcyIsc2FzSnNDb25maWc6InNhc0pzQ29uZmln''@;'; put 'put ''IixkY0FkYXB0ZXJTZXR0aW5nczoiZGNBZGFwdGVyU2V0dGluZ3MifSxvdXRwdXRzOntvbk5hdmlnYXRlVG9Ib21lOiJvbk5hdmlnYXRlVG9Ib21lIn0sc3RhbmRhbG9uZTohMSxkZWNsczo0NCx2YXJzOjEwLGNvbnN0czpbWyJjbGFzcyIsInRoaW5Qcm9ncmVzcyBwcm9ncmVzU3RhdGljIHBy''@;'; put 'put ''b2dyZXNzIGxvb3AiLDQsIm5nSWYiXSxbMSwidGV4dC1jZW50ZXIiLCJteS0xNSJdLFsxLCJsaWdodCJdLFsxLCJtLTAiXSxbMSwibS0wIiwibXQtMTAiXSxbMSwibXQtMjAiLCJjbHItY29udHJvbC1sYWJlbCJdLFsxLCJtYi0xMCIsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsxLCJjbHIt''@;'; put 'put ''aW5wdXQtd3JhcHBlciJdLFsicGxhY2Vob2xkZXIiLCJUeXBlIGluIGRpcmVjdG9yeSIsMSwiY2xyLWlucHV0IiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsxLCJtYi0xMCIsIm10LTAiLCJ3LTUwdnciXSxbImNsclNlbGVjdCIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwi''@;'; put 'put ''XSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjbHItZmxleCJdLFsxLCJidG4iLCJidG4tc3VjY2VzcyIsIm10LTE1IiwidGV4dC1jZW50ZXIiLDMsImNsaWNrIl0sWzEsImNhcmQtdGV4dCIsInBiLTEwIl0sWzEsInRoaW5Qcm9ncmVzcyIsInByb2dyZXNTdGF0aWMiLCJw''@;'; put 'put ''cm9ncmVzcyIsImxvb3AiXSxbMywidmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihndCgwLG1udCwyLDAsImRpdiIsMCksZGUoMSwiaDQiLDEpLFBlKDIsIlNhc2pzIERlcGxveSIpLGhlKCksR3QoMywiaHIiLDIpLGRlKDQsInAiLDMpLFBlKDUsIiBUbyBjb25maWd1cmUg''@;'; put 'put ''RGF0YSBDb250cm9sbGVyIGZvciBTQVNceGE5LCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHM6XG4iKSxoZSgpLGRlKDYsInAiLDQpLFBlKDcsIiBQbGVhc2Ugc3BlY2lmeSBhIHBoeXNpY2FsIGRpcmVjdG9yeSAob24gdGhlICIpLGRlKDgsInN0cm9uZyIpLFBlKDkpLGhl''@;'; put 'put ''KCksUGUoMTAsIiBjb21wdXRlIHNlcnZlcikgYmVsb3csIHRvIHdoaWNoIHVzZXIgIiksZGUoMTEsInN0cm9uZyIpLFBlKDEyKSxoZSgpLFBlKDEzLCIgY2FuIHdyaXRlLCBvbiBiZWhhbGYgb2YgRGF0YSBDb250cm9sbGVyLlxuIiksaGUoKSxkZSgxNCwibGFiZWwiLDUpLFBlKDE1LCJEQyBT''@;'; put 'put ''dGFnaW5nIERpcmVjdG9yeSIpLGhlKCksZGUoMTYsImRpdiIsNikoMTcsImRpdiIsNykoMTgsImlucHV0Iiw4KSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGZpKGguZGNEaXJlY3Rvcnksdil8fChoLmRjRGlyZWN0b3J5PXYpLHZ9KSxoZSgpKCkoKSxkZSgxOSwicCIs''@;'; put 'put ''NCksUGUoMjAsIiBCZWxvdyBhcmUgdGhlIGxpc3Qgb2YgZ3JvdXBzIHRvIHdoaWNoIHlvdSBiZWxvbmcuIFRoZSBncm91cCB5b3Ugc2VsZWN0IHdpbGwgYmVjb21lIHRoZSBEYXRhIENvbnRyb2xsZXIgQWRtaW4gR3JvdXAsIGFuZCBldmVyeW9uZSBpbiBpdCB3aWxsIGhhdmUgdW5yZXN0cmlj''@;'; put 'put ''dGVkIGFjY2VzcyB0byBEYXRhIENvbnRyb2xsZXIuXG4iKSxoZSgpLGRlKDIxLCJsYWJlbCIsNSksUGUoMjIsIkRhdGEgQ29udHJvbGxlciBBZG1pbiBncm91cCIpLGhlKCksZGUoMjMsImNsci1zZWxlY3QtY29udGFpbmVyIiw5KSgyNCwic2VsZWN0IiwxMCksY2koIm5nTW9kZWxDaGFuZ2Ui''@;'; put 'put ''LGZ1bmN0aW9uKHYpe3JldHVybiBmaShoLmRjQWRtaW5Hcm91cCx2KXx8KGguZGNBZG1pbkdyb3VwPXYpLHZ9KSxndCgyNSx2bnQsMiwzLCJvcHRpb24iLDExKSxoZSgpKCksZGUoMjYsInAiLDQpLFBlKDI3LCIgTm93LCBjcmVhdGUgdGhlIHRhcmdldCBkaXJlY3RvcnkgYW5kIGRlcGxveSB0''@;'; put 'put ''aGUgY29udHJvbCBsaWJyYXJ5IHVzaW5nIHRoZSBhZG1pbiBncm91cCBzZWxlY3RlZCBhYm92ZTpcbiIpLGhlKCksZGUoMjgsImRpdiIsMTIpKDI5LCJidXR0b24iLDEzKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgubWFrZURhdGEoKX0pLFBlKDMwLCIgU1VCTUlUICIpLGhlKCko''@;'; put 'put ''KSxHdCgzMSwiaHIiLDIpLGRlKDMyLCJkaXYiLDE0KSgzMywicCIpLFBlKDM0LCJZb3UgYXJlIGNvbm5lY3RlZCB3aXRoIHRoZSBmb2xsb3dpbmcgY3JlZGVudGlhbHM6IiksaGUoKSxkZSgzNSwidWwiKSgzNiwibGkiKSxQZSgzNyksaGUoKSxkZSgzOCwibGkiKSxQZSgzOSksaGUoKSxkZSg0''@;'; put 'put ''MCwibGkiKSxQZSg0MSksaGUoKSxkZSg0MiwibGkiKSxQZSg0MyksaGUoKSgpKCkpLDImZCYmKEVlKCJuZ0lmIixoLmxvYWRpbmcpLGZlKDkpLElyKCIgIixoLlNZU0hPU1ROQU1FLCIiKSxmZSgzKSxDcihoLlNZU1VTRVJJRCksZmUoNiksbGkoIm5nTW9kZWwiLGguZGNEaXJlY3RvcnkpLGZl''@;'; put 'put ''KDYpLGxpKCJuZ01vZGVsIixoLmRjQWRtaW5Hcm91cCksZmUoKSxFZSgibmdGb3JPZiIsaC5kY0FkbWluR3JvdXBMaXN0KSxmZSgxMiksSXIoIk1FVEFQRVJTT046ICIsaC5NRVRBUEVSU09OLCIiKSxmZSgyKSxJcigiU1lTVVNFUklEOiAiLGguU1lTVVNFUklELCIiKSxmZSgyKSxJcigiU1lT''@;'; put 'put ''SE9TVE5BTUU6ICIsaC5TWVNIT1NUTkFNRSwiIiksZmUoMiksSXIoIlNZU1ZMT05HOiAiLGguU1lTVkxPTkcsIiIpKX0sZGVwZW5kZW5jaWVzOltocyxDYSx4ZixFZixuYyxNZixobCxybCxDcyxOOSxDd10sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBibnQoYyxs''@;'; put 'put ''KXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDQpKDEsImRpdiIsNSksUGUoMiwiVGVybXMgYW5kIENvbmRpdGlvbnMiKSxoZSgpLGRlKDMsImRpdiIsNikoNCwiZGl2Iiw3KSg1LCJwIiw4KSxQZSg2LCIgVGhlIERlbW8gdmVyc2lvbiBvZiBEYXRhIENvbnRyb2xsZXIgaXMgZnJl''@;'; put 'put ''ZSBmb3IgRVZBTFVBVElPTiBwdXJwb3NlcyBvbmx5LiBCZWZvcmUgcHJvY2VlZGluZyB3aXRoIGNvbmZpZ3VyYXRpb24sIHBsZWFzZSBjb25maXJtIHRoYXQgeW91IGhhdmUgcmVhZCwgdW5kZXJzdG9vZCwgYW5kIGFncmVlZCB0byB0aGUgIiksZGUoNywiYSIsOSksUGUoOCwiRGF0YSBDb250''@;'; put 'put ''cm9sbGVyIGZvciBTQVNceGE5IEV2YWx1YXRpb24gQWdyZWVtZW50IiksaGUoKSxQZSg5LCIuICIpLGhlKCkoKSxHdCgxMCwiaHIiLDEwKSxkZSgxMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgxMiwiaW5wdXQiLDExKSxPdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChP''@;'; put 'put ''ZSgpLnRlcm1zQWdyZWVDaGFuZ2UoKSl9KSxoZSgpLGRlKDEzLCJsYWJlbCIpLFBlKDE0LCJJIGhhdmUgcmVhZCBhbmQgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIHRoZSAiKSxkZSgxNSwiYSIsOSksUGUoMTYsIkRhdGEgQ29udHJvbGxlciBmb3IgU0FTXHhhOSBFdmFsdWF0aW9uIEFncmVlbWVu''@;'; put 'put ''dCIpLGhlKCkoKSgpKCkoKX19ZnVuY3Rpb24gX250KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2IiwxNikoMSwiYXBwLWF1dG9tYXRpYy1kZXBsb3kiLDE3KSxPdCgib25OYXZpZ2F0ZVRvSG9tZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMykub25OYXZpZ2F0''@;'; put 'put ''ZVRvSG9tZSgpKX0pLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoKSxFZSgic2FzSnMiLGEuc2FzSnMpKCJzYXNKc0NvbmZpZyIsYS5zYXNKc0NvbmZpZykoImRjQWRhcHRlclNldHRpbmdzIixhLmRjQWRhcHRlclNldHRpbmdzKSgiYXBwTG9jIixhLmFwcExvYykoImRjUGF0aCIs''@;'; put 'put ''YS5kY1BhdGgpKCJzZWxlY3RlZEFkbWluR3JvdXAiLGEuc2VsZWN0ZWRBZG1pbkdyb3VwKX19ZnVuY3Rpb24gd250KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2IiwxOCkoMSwiYXBwLW1hbnVhbC1kZXBsb3kiLDE5KSxPdCgib25OYXZpZ2F0ZVRvSG9tZSIsZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gd3QoYSksQ3QoT2UoMykub25OYXZpZ2F0ZVRvSG9tZSgpKX0pLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoKSxFZSgic2FzSnMiLGEuc2FzSnMpKCJzYXNKc0NvbmZpZyIsYS5zYXNKc0NvbmZpZykoImRjQWRhcHRlclNldHRpbmdzIixhLmRjQWRhcHRlclNldHRp''@;'; put 'put ''bmdzKX19ZnVuY3Rpb24gQ250KGMsbCl7aWYoMSZjJiYob2koMCksZ3QoMSxfbnQsMiw2LCJkaXYiLDE0KSgyLHdudCwyLDMsImRpdiIsMTUpLHNpKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLEVlKCJuZ0lmIixhLmF1dG9kZXBsb3kpLGZlKCksRWUoIm5nSWYiLCFhLmF1dG9kZXBsb3kp''@;'; put 'put ''fX1mdW5jdGlvbiBTbnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtvaSgwKSxkZSgxLCJkaXYiLDE2KSgyLCJhcHAtc2FzanMtY29uZmlndXJhdG9yIiwxOSksT3QoIm9uTmF2aWdhdGVUb0hvbWUiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDIpLm9uTmF2aWdhdGVUb0hvbWUo''@;'; put 'put ''KSl9KSxoZSgpKCksc2koKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7ZmUoMiksRWUoInNhc0pzIixhLnNhc0pzKSgic2FzSnNDb25maWciLGEuc2FzSnNDb25maWcpKCJkY0FkYXB0ZXJTZXR0aW5ncyIsYS5kY0FkYXB0ZXJTZXR0aW5ncyl9fWZ1bmN0aW9uIE1udChjLGwpe2lmKDEmYyl7Y29u''@;'; put 'put ''c3QgYT1PbigpO29pKDApLGRlKDEsImRpdiIsMTYpKDIsImFwcC1zYXNqcy1jb25maWd1cmF0b3IiLDE5KSxPdCgib25OYXZpZ2F0ZVRvSG9tZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikub25OYXZpZ2F0ZVRvSG9tZSgpKX0pLGhlKCkoKSxzaSgpfWlmKDImYyl7Y29uc3Qg''@;'; put 'put ''YT1PZSgyKTtmZSgyKSxFZSgic2FzSnMiLGEuc2FzSnMpKCJzYXNKc0NvbmZpZyIsYS5zYXNKc0NvbmZpZykoImRjQWRhcHRlclNldHRpbmdzIixhLmRjQWRhcHRlclNldHRpbmdzKX19ZnVuY3Rpb24geG50KGMsbCl7aWYoMSZjJiYob2koMCwxMiksZ3QoMSxDbnQsMywyLCJuZy1jb250YWlu''@;'; put 'put ''ZXIiLDEzKSgyLFNudCwzLDMsIm5nLWNvbnRhaW5lciIsMTMpKDMsTW50LDMsMywibmctY29udGFpbmVyIiwxMyksc2koKSksMiZjKXtjb25zdCBhPU9lKCk7RWUoIm5nU3dpdGNoIiwhMCksZmUoKSxFZSgibmdTd2l0Y2hDYXNlIixhLnNhc0pzQ29uZmlnLnNlcnZlclR5cGU9PT1hLlNlcnZl''@;'; put 'put ''clR5cGUuU2FzVml5YSksZmUoKSxFZSgibmdTd2l0Y2hDYXNlIixhLnNhc0pzQ29uZmlnLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzanMpLGZlKCksRWUoIm5nU3dpdGNoQ2FzZSIsYS5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpfX1sZXQgYjRlPSgo''@;'; put 'put ''KT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5hcHBTdG9yZVNlcnZpY2U9YSx0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLmxvZ2dlclNlcnZpY2U9aCx0aGlzLnJvdXRlcj1mLHRoaXMuc3RlcD0wLHRoaXMuYWRtaW5Hcm91cHM9W10sdGhpcy5jbGllbnRfaWQ9IiIsdGhpcy5j''@;'; put 'put ''bGllbnRfc2VjcmV0PSIiLHRoaXMuYXBwTG9jPSIiLHRoaXMuZGNQYXRoPSIiLHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPSIiLHRoaXMuYXV0b2RlcGxveT0hMCx0aGlzLmpzb25GaWxlPW51bGwsdGhpcy5zYXNKc0NvbmZpZz1uZXcgZDIuU0FTanNDb25maWcsdGhpcy5TZXJ2ZXJUeXBlPWwx''@;'; put 'put ''LlksdGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz10aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpLHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygibWFudWFsZGVwbG95IikmJih0aGlzLmF1dG9kZXBsb3k9ITEpLHRoaXMuc2FzSnM9dGhpcy5zYXNTZXJ2aWNlLmdldFNh''@;'; put 'put ''c2pzSW5zdGFuY2UoKSx0aGlzLnNhc0pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuYXBwTG9jPXRoaXMuZGNBZGFwdGVyU2V0dGluZ3M/LmFwcExvY3x8IiIsdGhpcy5jbGllbnRfaWQ9bG9jYWxTdG9yYWdlLmdldEl0ZW0oImRlcGxveV9jbGllbnRfaWQi''@;'; put 'put ''KXx8IiIsdGhpcy5jbGllbnRfc2VjcmV0PWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJkZXBsb3lfc2VjcmV0X2tleSIpfHwiIix0aGlzLmRjUGF0aD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiZGVwbG95X2RjX2xvYyIpfHwiIn1uZ09uSW5pdCgpe3RoaXMuc2V0RGVwbG95RGVmYXVsdHMoKX1zZXRE''@;'; put 'put ''ZXBsb3lEZWZhdWx0cygpe3RoaXMuZGNQYXRoPXRoaXMuZGNBZGFwdGVyU2V0dGluZ3M/LmRjUGF0aHx8IiIsdGhpcy5zZWxlY3RlZEFkbWluR3JvdXA9dGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz8uYWRtaW5Hcm91cHx8IiIsdGhpcy5zZWxlY3RlZEFkbWluR3JvdXB8fCh0aGlzLnNlbGVjdGVk''@;'; put 'put ''QWRtaW5Hcm91cD0iU0FTQWRtaW5pc3RyYXRvcnMiKX10ZXJtc0FncmVlQ2hhbmdlKCl7dGhpcy5hdXRvZGVwbG95fHx0aGlzLmdldEFkbWluR3JvdXBzKCksdGhpcy5zdGVwKyt9Z2V0QWRtaW5Hcm91cHMoKXtmZXRjaCh0aGlzLnNhc0pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMv''@;'; put 'put ''Z3JvdXBzP3NvcnRCeT1uYW1lJmxpbWl0PTUwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4oYT0+YS50ZXh0KCkpLnRoZW4oYT0+e2xldCBkO3RyeXtkPUpTT04ucGFyc2UoYSl9Y2F0Y2goaCl7Y29uc29sZS5lcnJvcihoKX1kJiYodGhpcy5hZG1pbkdy''@;'; put 'put ''b3Vwcz1kLml0ZW1zLHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPXRoaXMuYWRtaW5Hcm91cHNbMF0uaWQpfSl9b25OYXZpZ2F0ZVRvSG9tZSgpe3dpbmRvdy5vcGVuKGxvY2F0aW9uLmhyZWYuc3BsaXQoIiMiKVswXSwiX2JsYW5rIil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQp''@;'; put 'put ''e3JldHVybiBuZXcoZHx8YykocWUodTkpLHFlKEtzKSxxZShvaCkscWUobmwpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPWFyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1kZXBsb3kiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLHN0YW5kYWxvbmU6ITEsZGVjbHM6NCx2''@;'; put 'put ''YXJzOjIsY29uc3RzOltbMSwiY29udGVudC1hcmVhIiwicG9zaXRpb24tcmVsYXRpdmUiXSxbMSwiY2xyLXJvdyJdLFsiaWQiLCJUQ1MiLCJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbMywibmdTd2l0Y2giLDQsIm5nSWYiXSxbImlkIiwiVENTIiwxLCJjYXJkIl0sWzEsImNhcmQtaGVhZGVy''@;'; put 'put ''Il0sWzEsImNhcmQtYmxvY2siXSxbMSwiY2FyZC10ZXh0Il0sWzEsIm10LTAiXSxbImhyZWYiLCJodHRwczovL2RvY3MuZGF0YWNvbnRyb2xsZXIuaW8vZXZhbHVhdGlvbi1saWNlbmNlLWFncmVlbWVudCIsInRhcmdldCIsIl9ibGFuayJdLFsxLCJsaWdodCJdLFsiY2xyQ2hlY2tib3giLCIi''@;'; put 'put ''LCJ0eXBlIiwiY2hlY2tib3giLDMsImNoYW5nZSJdLFszLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwiYXV0b2RlcGxveS1zZWN0aW9uIGNhcmQiLDQsIm5nSWYiXSxbImlkIiwibWFpbmJvZHkiLCJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbMSwiYXV0b2RlcGxv''@;'; put 'put ''eS1zZWN0aW9uIiwiY2FyZCJdLFszLCJvbk5hdmlnYXRlVG9Ib21lIiwic2FzSnMiLCJzYXNKc0NvbmZpZyIsImRjQWRhcHRlclNldHRpbmdzIiwiYXBwTG9jIiwiZGNQYXRoIiwic2VsZWN0ZWRBZG1pbkdyb3VwIl0sWyJpZCIsIm1haW5ib2R5IiwxLCJjYXJkIl0sWzMsIm9uTmF2aWdhdGVU''@;'; put 'put ''b0hvbWUiLCJzYXNKcyIsInNhc0pzQ29uZmlnIiwiZGNBZGFwdGVyU2V0dGluZ3MiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDApKDEsImRpdiIsMSksZ3QoMixibnQsMTcsMCwiZGl2IiwyKSxoZSgpLGd0KDMseG50LDQsNCwibmctY29udGFpbmVyIiwzKSxo''@;'; put 'put ''ZSgpKSwyJmQmJihmZSgyKSxFZSgibmdJZiIsMD09PWguc3RlcCksZmUoKSxFZSgibmdJZiIsaC5zdGVwPjApKX0sZGVwZW5kZW5jaWVzOltDYSxDZixsNCxDcyxoaCx5MixlbnQsZ250LHludF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCBFbnQ9W3twYXRoOiIiLGNv''@;'; put 'put ''bXBvbmVudDpiNGV9LHtwYXRoOiJtYW51YWxkZXBsb3kiLGNvbXBvbmVudDpiNGV9XTtsZXQgVG50PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1FaSh7dHlwZTpjfSl9c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1aW5qPXlpKHtpbXBvcnRzOltldS5mb3JDaGlsZChFbnQpLGV1XX0pfX1yZXR1cm4gY30pKCksQW50PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1FaSh7dHlw''@;'; put 'put ''ZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPXlpKHtpbXBvcnRzOltOYSxVYyx1MSxUbnRdfSl9fXJldHVybiBjfSkoKTtiKDQ5NTM3KSxiKDc3NTI1KSxiKDU3NzIpLGIoNjk4NzUpLGIoMTYwOTMpLGIoOTU2MDgpLGIoMTY0OTMpLGIoNjE5MzQpLGIoMTAxMDEpLGIoMjY4ODkpLGIoNDMy''@;'; put 'put ''ODcpLGIoNjU3NDUpLGIoMjk3MDgpLGIoNjUxMTcpLGIoMTAzNjMpO2NvbnN0e2VudHJpZXM6XzRlLHNldFByb3RvdHlwZU9mOnc0ZSxpc0Zyb3plbjprbnQsZ2V0UHJvdG90eXBlT2Y6RG50LGdldE93blByb3BlcnR5RGVzY3JpcHRvcjpJbnR9PU9iamVjdDtsZXR7ZnJlZXplOkVkLHNlYWw6''@;'; put 'put ''UGYsY3JlYXRlOklxfT1PYmplY3Qse2FwcGx5OlJxLGNvbnN0cnVjdDpMcX09dHlwZW9mIFJlZmxlY3Q8InUiJiZSZWZsZWN0O0VkfHwoRWQ9ZnVuY3Rpb24obCl7cmV0dXJuIGx9KSxQZnx8KFBmPWZ1bmN0aW9uKGwpe3JldHVybiBsfSksUnF8fChScT1mdW5jdGlvbihsLGEpe2Zvcih2YXIg''@;'; put 'put ''ZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQ+Mj9kLTI6MCksZj0yO2Y8ZDtmKyspaFtmLTJdPWFyZ3VtZW50c1tmXTtyZXR1cm4gbC5hcHBseShhLGgpfSksTHF8fChMcT1mdW5jdGlvbihsKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhPjE/YS0xOjAp''@;'; put 'put ''LGg9MTtoPGE7aCsrKWRbaC0xXT1hcmd1bWVudHNbaF07cmV0dXJuIG5ldyBsKC4uLmQpfSk7Y29uc3QgWkg9QWQoQXJyYXkucHJvdG90eXBlLmZvckVhY2gpLFJudD1BZChBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YpLEM0ZT1BZChBcnJheS5wcm90b3R5cGUucG9wKSx4QT1BZChBcnJh''@;'; put 'put ''eS5wcm90b3R5cGUucHVzaCksTG50PUFkKEFycmF5LnByb3RvdHlwZS5zcGxpY2UpLFdIPUFkKFN0cmluZy5wcm90b3R5cGUudG9Mb3dlckNhc2UpLE9xPUFkKFN0cmluZy5wcm90b3R5cGUudG9TdHJpbmcpLFBxPUFkKFN0cmluZy5wcm90b3R5cGUubWF0Y2gpLEVBPUFkKFN0cmluZy5wcm90''@;'; put 'put ''b3R5cGUucmVwbGFjZSksT250PUFkKFN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiksUG50PUFkKFN0cmluZy5wcm90b3R5cGUudHJpbSksRzM9QWQoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSksVGQ9QWQoUmVnRXhwLnByb3RvdHlwZS50ZXN0KSxUQT1mdW5jdGlvbiBGbnQoYyl7''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07cmV0dXJuIExxKGMsYSl9fShUeXBlRXJyb3IpO2Z1bmN0aW9uIEFkKGMpe3JldHVybiBmdW5jdGlvbihsKXtsIGluc3RhbmNlb2Yg''@;'; put 'put ''UmVnRXhwJiYobC5sYXN0SW5kZXg9MCk7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYT4xP2EtMTowKSxoPTE7aDxhO2grKylkW2gtMV09YXJndW1lbnRzW2hdO3JldHVybiBScShjLGwsZCl9fWZ1bmN0aW9uIEFzKGMsbCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4y''@;'; put 'put ''JiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOldIO3c0ZSYmdzRlKGMsbnVsbCk7bGV0IGQ9bC5sZW5ndGg7Zm9yKDtkLS07KXtsZXQgaD1sW2RdO2lmKCJzdHJpbmciPT10eXBlb2YgaCl7Y29uc3QgZj1hKGgpO2YhPT1oJiYoa250KGwpfHwobFtkXT1mKSxoPWYpfWNbaF09''@;'; put 'put ''ITB9cmV0dXJuIGN9ZnVuY3Rpb24gSG50KGMpe2ZvcihsZXQgbD0wO2w8Yy5sZW5ndGg7bCsrKUczKGMsbCl8fChjW2xdPW51bGwpO3JldHVybiBjfWZ1bmN0aW9uIHc0KGMpe2NvbnN0IGw9SXEobnVsbCk7Zm9yKGNvbnN0W2EsZF1vZiBfNGUoYykpRzMoYyxhKSYmKGxbYV09QXJyYXkuaXNB''@;'; put 'put ''cnJheShkKT9IbnQoZCk6ZCYmIm9iamVjdCI9PXR5cGVvZiBkJiZkLmNvbnN0cnVjdG9yPT09T2JqZWN0P3c0KGQpOmQpO3JldHVybiBsfWZ1bmN0aW9uIEFBKGMsbCl7Zm9yKDtudWxsIT09Yzspe2NvbnN0IGQ9SW50KGMsbCk7aWYoZCl7aWYoZC5nZXQpcmV0dXJuIEFkKGQuZ2V0KTtpZigi''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgZC52YWx1ZSlyZXR1cm4gQWQoZC52YWx1ZSl9Yz1EbnQoYyl9cmV0dXJuIGZ1bmN0aW9uIGEoKXtyZXR1cm4gbnVsbH19Y29uc3QgUzRlPUVkKFsiYSIsImFiYnIiLCJhY3JvbnltIiwiYWRkcmVzcyIsImFyZWEiLCJhcnRpY2xlIiwiYXNpZGUiLCJhdWRpbyIs''@;'; put 'put ''ImIiLCJiZGkiLCJiZG8iLCJiaWciLCJibGluayIsImJsb2NrcXVvdGUiLCJib2R5IiwiYnIiLCJidXR0b24iLCJjYW52YXMiLCJjYXB0aW9uIiwiY2VudGVyIiwiY2l0ZSIsImNvZGUiLCJjb2wiLCJjb2xncm91cCIsImNvbnRlbnQiLCJkYXRhIiwiZGF0YWxpc3QiLCJkZCIsImRlY29yYXRv''@;'; put 'put ''ciIsImRlbCIsImRldGFpbHMiLCJkZm4iLCJkaWFsb2ciLCJkaXIiLCJkaXYiLCJkbCIsImR0IiwiZWxlbWVudCIsImVtIiwiZmllbGRzZXQiLCJmaWdjYXB0aW9uIiwiZmlndXJlIiwiZm9udCIsImZvb3RlciIsImZvcm0iLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJoZWFkIiwi''@;'; put 'put ''aGVhZGVyIiwiaGdyb3VwIiwiaHIiLCJodG1sIiwiaSIsImltZyIsImlucHV0IiwiaW5zIiwia2JkIiwibGFiZWwiLCJsZWdlbmQiLCJsaSIsIm1haW4iLCJtYXAiLCJtYXJrIiwibWFycXVlZSIsIm1lbnUiLCJtZW51aXRlbSIsIm1ldGVyIiwibmF2Iiwibm9iciIsIm9sIiwib3B0Z3JvdXAi''@;'; put 'put ''LCJvcHRpb24iLCJvdXRwdXQiLCJwIiwicGljdHVyZSIsInByZSIsInByb2dyZXNzIiwicSIsInJwIiwicnQiLCJydWJ5IiwicyIsInNhbXAiLCJzZWFyY2giLCJzZWN0aW9uIiwic2VsZWN0Iiwic2hhZG93Iiwic2xvdCIsInNtYWxsIiwic291cmNlIiwic3BhY2VyIiwic3BhbiIsInN0cmlr''@;'; put 'put ''ZSIsInN0cm9uZyIsInN0eWxlIiwic3ViIiwic3VtbWFyeSIsInN1cCIsInRhYmxlIiwidGJvZHkiLCJ0ZCIsInRlbXBsYXRlIiwidGV4dGFyZWEiLCJ0Zm9vdCIsInRoIiwidGhlYWQiLCJ0aW1lIiwidHIiLCJ0cmFjayIsInR0IiwidSIsInVsIiwidmFyIiwidmlkZW8iLCJ3YnIiXSksRnE9''@;'; put 'put ''RWQoWyJzdmciLCJhIiwiYWx0Z2x5cGgiLCJhbHRnbHlwaGRlZiIsImFsdGdseXBoaXRlbSIsImFuaW1hdGVjb2xvciIsImFuaW1hdGVtb3Rpb24iLCJhbmltYXRldHJhbnNmb3JtIiwiY2lyY2xlIiwiY2xpcHBhdGgiLCJkZWZzIiwiZGVzYyIsImVsbGlwc2UiLCJlbnRlcmtleWhpbnQiLCJl''@;'; put 'put ''eHBvcnRwYXJ0cyIsImZpbHRlciIsImZvbnQiLCJnIiwiZ2x5cGgiLCJnbHlwaHJlZiIsImhrZXJuIiwiaW1hZ2UiLCJpbnB1dG1vZGUiLCJsaW5lIiwibGluZWFyZ3JhZGllbnQiLCJtYXJrZXIiLCJtYXNrIiwibWV0YWRhdGEiLCJtcGF0aCIsInBhcnQiLCJwYXRoIiwicGF0dGVybiIsInBv''@;'; put 'put ''bHlnb24iLCJwb2x5bGluZSIsInJhZGlhbGdyYWRpZW50IiwicmVjdCIsInN0b3AiLCJzdHlsZSIsInN3aXRjaCIsInN5bWJvbCIsInRleHQiLCJ0ZXh0cGF0aCIsInRpdGxlIiwidHJlZiIsInRzcGFuIiwidmlldyIsInZrZXJuIl0pLEhxPUVkKFsiZmVCbGVuZCIsImZlQ29sb3JNYXRyaXgi''@;'; put 'put ''LCJmZUNvbXBvbmVudFRyYW5zZmVyIiwiZmVDb21wb3NpdGUiLCJmZUNvbnZvbHZlTWF0cml4IiwiZmVEaWZmdXNlTGlnaHRpbmciLCJmZURpc3BsYWNlbWVudE1hcCIsImZlRGlzdGFudExpZ2h0IiwiZmVEcm9wU2hhZG93IiwiZmVGbG9vZCIsImZlRnVuY0EiLCJmZUZ1bmNCIiwiZmVGdW5j''@;'; put 'put ''RyIsImZlRnVuY1IiLCJmZUdhdXNzaWFuQmx1ciIsImZlSW1hZ2UiLCJmZU1lcmdlIiwiZmVNZXJnZU5vZGUiLCJmZU1vcnBob2xvZ3kiLCJmZU9mZnNldCIsImZlUG9pbnRMaWdodCIsImZlU3BlY3VsYXJMaWdodGluZyIsImZlU3BvdExpZ2h0IiwiZmVUaWxlIiwiZmVUdXJidWxlbmNlIl0p''@;'; put 'put ''LE5udD1FZChbImFuaW1hdGUiLCJjb2xvci1wcm9maWxlIiwiY3Vyc29yIiwiZGlzY2FyZCIsImZvbnQtZmFjZSIsImZvbnQtZmFjZS1mb3JtYXQiLCJmb250LWZhY2UtbmFtZSIsImZvbnQtZmFjZS1zcmMiLCJmb250LWZhY2UtdXJpIiwiZm9yZWlnbm9iamVjdCIsImhhdGNoIiwiaGF0Y2hw''@;'; put 'put ''YXRoIiwibWVzaCIsIm1lc2hncmFkaWVudCIsIm1lc2hwYXRjaCIsIm1lc2hyb3ciLCJtaXNzaW5nLWdseXBoIiwic2NyaXB0Iiwic2V0Iiwic29saWRjb2xvciIsInVua25vd24iLCJ1c2UiXSksTnE9RWQoWyJtYXRoIiwibWVuY2xvc2UiLCJtZXJyb3IiLCJtZmVuY2VkIiwibWZyYWMiLCJt''@;'; put 'put ''Z2x5cGgiLCJtaSIsIm1sYWJlbGVkdHIiLCJtbXVsdGlzY3JpcHRzIiwibW4iLCJtbyIsIm1vdmVyIiwibXBhZGRlZCIsIm1waGFudG9tIiwibXJvb3QiLCJtcm93IiwibXMiLCJtc3BhY2UiLCJtc3FydCIsIm1zdHlsZSIsIm1zdWIiLCJtc3VwIiwibXN1YnN1cCIsIm10YWJsZSIsIm10ZCIs''@;'; put 'put ''Im10ZXh0IiwibXRyIiwibXVuZGVyIiwibXVuZGVyb3ZlciIsIm1wcmVzY3JpcHRzIl0pLFZudD1FZChbIm1hY3Rpb24iLCJtYWxpZ25ncm91cCIsIm1hbGlnbm1hcmsiLCJtbG9uZ2RpdiIsIm1zY2FycmllcyIsIm1zY2FycnkiLCJtc2dyb3VwIiwibXN0YWNrIiwibXNsaW5lIiwibXNyb3ci''@;'; put 'put ''LCJzZW1hbnRpY3MiLCJhbm5vdGF0aW9uIiwiYW5ub3RhdGlvbi14bWwiLCJtcHJlc2NyaXB0cyIsIm5vbmUiXSksTTRlPUVkKFsiI3RleHQiXSkseDRlPUVkKFsiYWNjZXB0IiwiYWN0aW9uIiwiYWxpZ24iLCJhbHQiLCJhdXRvY2FwaXRhbGl6ZSIsImF1dG9jb21wbGV0ZSIsImF1dG9waWN0''@;'; put 'put ''dXJlaW5waWN0dXJlIiwiYXV0b3BsYXkiLCJiYWNrZ3JvdW5kIiwiYmdjb2xvciIsImJvcmRlciIsImNhcHR1cmUiLCJjZWxscGFkZGluZyIsImNlbGxzcGFjaW5nIiwiY2hlY2tlZCIsImNpdGUiLCJjbGFzcyIsImNsZWFyIiwiY29sb3IiLCJjb2xzIiwiY29sc3BhbiIsImNvbnRyb2xzIiwi''@;'; put 'put ''Y29udHJvbHNsaXN0IiwiY29vcmRzIiwiY3Jvc3NvcmlnaW4iLCJkYXRldGltZSIsImRlY29kaW5nIiwiZGVmYXVsdCIsImRpciIsImRpc2FibGVkIiwiZGlzYWJsZXBpY3R1cmVpbnBpY3R1cmUiLCJkaXNhYmxlcmVtb3RlcGxheWJhY2siLCJkb3dubG9hZCIsImRyYWdnYWJsZSIsImVuY3R5''@;'; put 'put ''cGUiLCJlbnRlcmtleWhpbnQiLCJleHBvcnRwYXJ0cyIsImZhY2UiLCJmb3IiLCJoZWFkZXJzIiwiaGVpZ2h0IiwiaGlkZGVuIiwiaGlnaCIsImhyZWYiLCJocmVmbGFuZyIsImlkIiwiaW5lcnQiLCJpbnB1dG1vZGUiLCJpbnRlZ3JpdHkiLCJpc21hcCIsImtpbmQiLCJsYWJlbCIsImxhbmci''@;'; put 'put ''LCJsaXN0IiwibG9hZGluZyIsImxvb3AiLCJsb3ciLCJtYXgiLCJtYXhsZW5ndGgiLCJtZWRpYSIsIm1ldGhvZCIsIm1pbiIsIm1pbmxlbmd0aCIsIm11bHRpcGxlIiwibXV0ZWQiLCJuYW1lIiwibm9uY2UiLCJub3NoYWRlIiwibm92YWxpZGF0ZSIsIm5vd3JhcCIsIm9wZW4iLCJvcHRpbXVt''@;'; put 'put ''IiwicGFydCIsInBhdHRlcm4iLCJwbGFjZWhvbGRlciIsInBsYXlzaW5saW5lIiwicG9wb3ZlciIsInBvcG92ZXJ0YXJnZXQiLCJwb3BvdmVydGFyZ2V0YWN0aW9uIiwicG9zdGVyIiwicHJlbG9hZCIsInB1YmRhdGUiLCJyYWRpb2dyb3VwIiwicmVhZG9ubHkiLCJyZWwiLCJyZXF1aXJlZCIs''@;'; put 'put ''InJldiIsInJldmVyc2VkIiwicm9sZSIsInJvd3MiLCJyb3dzcGFuIiwic3BlbGxjaGVjayIsInNjb3BlIiwic2VsZWN0ZWQiLCJzaGFwZSIsInNpemUiLCJzaXplcyIsInNsb3QiLCJzcGFuIiwic3JjbGFuZyIsInN0YXJ0Iiwic3JjIiwic3Jjc2V0Iiwic3RlcCIsInN0eWxlIiwic3VtbWFy''@;'; put 'put ''eSIsInRhYmluZGV4IiwidGl0bGUiLCJ0cmFuc2xhdGUiLCJ0eXBlIiwidXNlbWFwIiwidmFsaWduIiwidmFsdWUiLCJ3aWR0aCIsIndyYXAiLCJ4bWxucyIsInNsb3QiXSksVnE9RWQoWyJhY2NlbnQtaGVpZ2h0IiwiYWNjdW11bGF0ZSIsImFkZGl0aXZlIiwiYWxpZ25tZW50LWJhc2VsaW5l''@;'; put 'put ''IiwiYW1wbGl0dWRlIiwiYXNjZW50IiwiYXR0cmlidXRlbmFtZSIsImF0dHJpYnV0ZXR5cGUiLCJhemltdXRoIiwiYmFzZWZyZXF1ZW5jeSIsImJhc2VsaW5lLXNoaWZ0IiwiYmVnaW4iLCJiaWFzIiwiYnkiLCJjbGFzcyIsImNsaXAiLCJjbGlwcGF0aHVuaXRzIiwiY2xpcC1wYXRoIiwiY2xp''@;'; put 'put ''cC1ydWxlIiwiY29sb3IiLCJjb2xvci1pbnRlcnBvbGF0aW9uIiwiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIiwiY29sb3ItcHJvZmlsZSIsImNvbG9yLXJlbmRlcmluZyIsImN4IiwiY3kiLCJkIiwiZHgiLCJkeSIsImRpZmZ1c2Vjb25zdGFudCIsImRpcmVjdGlvbiIsImRpc3BsYXki''@;'; put 'put ''LCJkaXZpc29yIiwiZHVyIiwiZWRnZW1vZGUiLCJlbGV2YXRpb24iLCJlbmQiLCJleHBvbmVudCIsImZpbGwiLCJmaWxsLW9wYWNpdHkiLCJmaWxsLXJ1bGUiLCJmaWx0ZXIiLCJmaWx0ZXJ1bml0cyIsImZsb29kLWNvbG9yIiwiZmxvb2Qtb3BhY2l0eSIsImZvbnQtZmFtaWx5IiwiZm9udC1z''@;'; put 'put ''aXplIiwiZm9udC1zaXplLWFkanVzdCIsImZvbnQtc3RyZXRjaCIsImZvbnQtc3R5bGUiLCJmb250LXZhcmlhbnQiLCJmb250LXdlaWdodCIsImZ4IiwiZnkiLCJnMSIsImcyIiwiZ2x5cGgtbmFtZSIsImdseXBocmVmIiwiZ3JhZGllbnR1bml0cyIsImdyYWRpZW50dHJhbnNmb3JtIiwiaGVp''@;'; put 'put ''Z2h0IiwiaHJlZiIsImlkIiwiaW1hZ2UtcmVuZGVyaW5nIiwiaW4iLCJpbjIiLCJpbnRlcmNlcHQiLCJrIiwiazEiLCJrMiIsImszIiwiazQiLCJrZXJuaW5nIiwia2V5cG9pbnRzIiwia2V5c3BsaW5lcyIsImtleXRpbWVzIiwibGFuZyIsImxlbmd0aGFkanVzdCIsImxldHRlci1zcGFjaW5n''@;'; put 'put ''Iiwia2VybmVsbWF0cml4Iiwia2VybmVsdW5pdGxlbmd0aCIsImxpZ2h0aW5nLWNvbG9yIiwibG9jYWwiLCJtYXJrZXItZW5kIiwibWFya2VyLW1pZCIsIm1hcmtlci1zdGFydCIsIm1hcmtlcmhlaWdodCIsIm1hcmtlcnVuaXRzIiwibWFya2Vyd2lkdGgiLCJtYXNrY29udGVudHVuaXRzIiwi''@;'; put 'put ''bWFza3VuaXRzIiwibWF4IiwibWFzayIsIm1hc2stdHlwZSIsIm1lZGlhIiwibWV0aG9kIiwibW9kZSIsIm1pbiIsIm5hbWUiLCJudW1vY3RhdmVzIiwib2Zmc2V0Iiwib3BlcmF0b3IiLCJvcGFjaXR5Iiwib3JkZXIiLCJvcmllbnQiLCJvcmllbnRhdGlvbiIsIm9yaWdpbiIsIm92ZXJmbG93''@;'; put 'put ''IiwicGFpbnQtb3JkZXIiLCJwYXRoIiwicGF0aGxlbmd0aCIsInBhdHRlcm5jb250ZW50dW5pdHMiLCJwYXR0ZXJudHJhbnNmb3JtIiwicGF0dGVybnVuaXRzIiwicG9pbnRzIiwicHJlc2VydmVhbHBoYSIsInByZXNlcnZlYXNwZWN0cmF0aW8iLCJwcmltaXRpdmV1bml0cyIsInIiLCJyeCIs''@;'; put 'put ''InJ5IiwicmFkaXVzIiwicmVmeCIsInJlZnkiLCJyZXBlYXRjb3VudCIsInJlcGVhdGR1ciIsInJlc3RhcnQiLCJyZXN1bHQiLCJyb3RhdGUiLCJzY2FsZSIsInNlZWQiLCJzaGFwZS1yZW5kZXJpbmciLCJzbG9wZSIsInNwZWN1bGFyY29uc3RhbnQiLCJzcGVjdWxhcmV4cG9uZW50Iiwic3By''@;'; put 'put ''ZWFkbWV0aG9kIiwic3RhcnRvZmZzZXQiLCJzdGRkZXZpYXRpb24iLCJzdGl0Y2h0aWxlcyIsInN0b3AtY29sb3IiLCJzdG9wLW9wYWNpdHkiLCJzdHJva2UtZGFzaGFycmF5Iiwic3Ryb2tlLWRhc2hvZmZzZXQiLCJzdHJva2UtbGluZWNhcCIsInN0cm9rZS1saW5lam9pbiIsInN0cm9rZS1t''@;'; put 'put ''aXRlcmxpbWl0Iiwic3Ryb2tlLW9wYWNpdHkiLCJzdHJva2UiLCJzdHJva2Utd2lkdGgiLCJzdHlsZSIsInN1cmZhY2VzY2FsZSIsInN5c3RlbWxhbmd1YWdlIiwidGFiaW5kZXgiLCJ0YWJsZXZhbHVlcyIsInRhcmdldHgiLCJ0YXJnZXR5IiwidHJhbnNmb3JtIiwidHJhbnNmb3JtLW9yaWdp''@;'; put 'put ''biIsInRleHQtYW5jaG9yIiwidGV4dC1kZWNvcmF0aW9uIiwidGV4dC1yZW5kZXJpbmciLCJ0ZXh0bGVuZ3RoIiwidHlwZSIsInUxIiwidTIiLCJ1bmljb2RlIiwidmFsdWVzIiwidmlld2JveCIsInZpc2liaWxpdHkiLCJ2ZXJzaW9uIiwidmVydC1hZHYteSIsInZlcnQtb3JpZ2luLXgiLCJ2''@;'; put 'put ''ZXJ0LW9yaWdpbi15Iiwid2lkdGgiLCJ3b3JkLXNwYWNpbmciLCJ3cmFwIiwid3JpdGluZy1tb2RlIiwieGNoYW5uZWxzZWxlY3RvciIsInljaGFubmVsc2VsZWN0b3IiLCJ4IiwieDEiLCJ4MiIsInhtbG5zIiwieSIsInkxIiwieTIiLCJ6Iiwiem9vbWFuZHBhbiJdKSxFNGU9RWQoWyJhY2Nl''@;'; put 'put ''bnQiLCJhY2NlbnR1bmRlciIsImFsaWduIiwiYmV2ZWxsZWQiLCJjbG9zZSIsImNvbHVtbnNhbGlnbiIsImNvbHVtbmxpbmVzIiwiY29sdW1uc3BhbiIsImRlbm9tYWxpZ24iLCJkZXB0aCIsImRpciIsImRpc3BsYXkiLCJkaXNwbGF5c3R5bGUiLCJlbmNvZGluZyIsImZlbmNlIiwiZnJhbWUi''@;'; put 'put ''LCJoZWlnaHQiLCJocmVmIiwiaWQiLCJsYXJnZW9wIiwibGVuZ3RoIiwibGluZXRoaWNrbmVzcyIsImxzcGFjZSIsImxxdW90ZSIsIm1hdGhiYWNrZ3JvdW5kIiwibWF0aGNvbG9yIiwibWF0aHNpemUiLCJtYXRodmFyaWFudCIsIm1heHNpemUiLCJtaW5zaXplIiwibW92YWJsZWxpbWl0cyIs''@;'; put 'put ''Im5vdGF0aW9uIiwibnVtYWxpZ24iLCJvcGVuIiwicm93YWxpZ24iLCJyb3dsaW5lcyIsInJvd3NwYWNpbmciLCJyb3dzcGFuIiwicnNwYWNlIiwicnF1b3RlIiwic2NyaXB0bGV2ZWwiLCJzY3JpcHRtaW5zaXplIiwic2NyaXB0c2l6ZW11bHRpcGxpZXIiLCJzZWxlY3Rpb24iLCJzZXBhcmF0''@;'; put 'put ''b3IiLCJzZXBhcmF0b3JzIiwic3RyZXRjaHkiLCJzdWJzY3JpcHRzaGlmdCIsInN1cHNjcmlwdHNoaWZ0Iiwic3ltbWV0cmljIiwidm9mZnNldCIsIndpZHRoIiwieG1sbnMiXSksWUg9RWQoWyJ4bGluazpocmVmIiwieG1sOmlkIiwieGxpbms6dGl0bGUiLCJ4bWw6c3BhY2UiLCJ4bWxuczp4''@;'; put 'put ''bGluayJdKSxCbnQ9UGYoL1x7XHtbXHdcV10qfFtcd1xXXSpcfVx9L2dtKSxqbnQ9UGYoLzwlW1x3XFddKnxbXHdcV10qJT4vZ20pLHpudD1QZigvXCRce1tcd1xXXSovZ20pLFVudD1QZigvXmRhdGEtW1wtXHcuXHUwMEI3LVx1RkZGRl0rJC8pLFpudD1QZigvXmFyaWEtW1wtXHddKyQvKSxU''@;'; put 'put ''NGU9UGYoL14oPzooPzooPzpmfGh0KXRwcz98bWFpbHRvfHRlbHxjYWxsdG98c21zfGNpZHx4bXBwfG1hdHJpeCk6fFteYS16XXxbYS16Ky5cLV0rKD86W15hLXorLlwtOl18JCkpL2kpLFdudD1QZigvXig/Olx3K3NjcmlwdHxkYXRhKTovaSksWW50PVBmKC9bXHUwMDAwLVx1MDAyMFx1MDBB''@;'; put 'put ''MFx1MTY4MFx1MTgwRVx1MjAwMC1cdTIwMjlcdTIwNUZcdTMwMDBdL2cpLEE0ZT1QZigvXmh0bWwkL2kpLEdudD1QZigvXlthLXpdWy5cd10qKC1bLlx3XSspKyQvaSk7dmFyIGs0ZT1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxBUklBX0FUVFI6Wm50LEFUVFJfV0hJVEVTUEFDRTpZ''@;'; put 'put ''bnQsQ1VTVE9NX0VMRU1FTlQ6R250LERBVEFfQVRUUjpVbnQsRE9DVFlQRV9OQU1FOkE0ZSxFUkJfRVhQUjpqbnQsSVNfQUxMT1dFRF9VUkk6VDRlLElTX1NDUklQVF9PUl9EQVRBOldudCxNVVNUQUNIRV9FWFBSOkJudCxUTVBMSVRfRVhQUjp6bnR9KTt2YXIgWG50PWZ1bmN0aW9uIEk0ZSgp''@;'; put 'put ''e2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0eXBlb2Ygd2luZG93PiJ1Ij9udWxsOndpbmRvdztjb25zdCBsPXZvPT5JNGUodm8pO2lmKGwudmVyc2lvbj0iMy4zLjEiLGwucmVtb3ZlZD1bXSwhY3x8IWMuZG9jdW1lbnR8fDkh''@;'; put 'put ''PT1jLmRvY3VtZW50Lm5vZGVUeXBlfHwhYy5FbGVtZW50KXJldHVybiBsLmlzU3VwcG9ydGVkPSExLGw7bGV0e2RvY3VtZW50OmF9PWM7Y29uc3QgZD1hLGg9ZC5jdXJyZW50U2NyaXB0LHtEb2N1bWVudEZyYWdtZW50OmYsSFRNTFRlbXBsYXRlRWxlbWVudDp2LE5vZGU6TSxFbGVtZW50OkQs''@;'; put 'put ''Tm9kZUZpbHRlcjpVLE5hbWVkTm9kZU1hcDp0ZT1jLk5hbWVkTm9kZU1hcHx8Yy5Nb3pOYW1lZEF0dHJNYXAsSFRNTEZvcm1FbGVtZW50Om9lLERPTVBhcnNlcjp2ZSx0cnVzdGVkVHlwZXM6d2V9PWMsRmU9RC5wcm90b3R5cGUsV2U9QUEoRmUsImNsb25lTm9kZSIpLG50PUFBKEZlLCJyZW1v''@;'; put 'put ''dmUiKSxkdD1BQShGZSwibmV4dFNpYmxpbmciKSxtdD1BQShGZSwiY2hpbGROb2RlcyIpLCR0PUFBKEZlLCJwYXJlbnROb2RlIik7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHYpe2NvbnN0IHZvPWEuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTt2by5jb250ZW50JiZ2by5jb250ZW50Lm93bmVy''@;'; put 'put ''RG9jdW1lbnQmJihhPXZvLmNvbnRlbnQub3duZXJEb2N1bWVudCl9bGV0IHp0LHluPSIiO2NvbnN0e2ltcGxlbWVudGF0aW9uOmduLGNyZWF0ZU5vZGVJdGVyYXRvcjp3bixjcmVhdGVEb2N1bWVudEZyYWdtZW50OlJuLGdldEVsZW1lbnRzQnlUYWdOYW1lOkRyfT1hLHtpbXBvcnROb2RlOkxy''@;'; put 'put ''fT1kO2xldCBkcj17YWZ0ZXJTYW5pdGl6ZUF0dHJpYnV0ZXM6W10sYWZ0ZXJTYW5pdGl6ZUVsZW1lbnRzOltdLGFmdGVyU2FuaXRpemVTaGFkb3dET006W10sYmVmb3JlU2FuaXRpemVBdHRyaWJ1dGVzOltdLGJlZm9yZVNhbml0aXplRWxlbWVudHM6W10sYmVmb3JlU2FuaXRpemVTaGFkb3dE''@;'; put 'put ''T006W10sdXBvblNhbml0aXplQXR0cmlidXRlOltdLHVwb25TYW5pdGl6ZUVsZW1lbnQ6W10sdXBvblNhbml0aXplU2hhZG93Tm9kZTpbXX07bC5pc1N1cHBvcnRlZD0iZnVuY3Rpb24iPT10eXBlb2YgXzRlJiYiZnVuY3Rpb24iPT10eXBlb2YgJHQmJmduJiZ2b2lkIDAhPT1nbi5jcmVhdGVI''@;'; put 'put ''VE1MRG9jdW1lbnQ7Y29uc3R7TVVTVEFDSEVfRVhQUjpNcixFUkJfRVhQUjp2aSxUTVBMSVRfRVhQUjpObixEQVRBX0FUVFI6QnIsQVJJQV9BVFRSOmVyLElTX1NDUklQVF9PUl9EQVRBOlRyLEFUVFJfV0hJVEVTUEFDRTokcixDVVNUT01fRUxFTUVOVDpiaX09azRlO2xldHtJU19BTExPV0VE''@;'; put 'put ''X1VSSTpOaX09azRlLHZhPW51bGw7Y29uc3QgeGE9QXMoe30sWy4uLlM0ZSwuLi5GcSwuLi5IcSwuLi5OcSwuLi5NNGVdKTtsZXQgcGE9bnVsbDtjb25zdCBacj1Bcyh7fSxbLi4ueDRlLC4uLlZxLC4uLkU0ZSwuLi5ZSF0pO2xldCB5dD1PYmplY3Quc2VhbChJcShudWxsLHt0YWdOYW1lQ2hl''@;'; put 'put ''Y2s6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOm51bGx9LGF0dHJpYnV0ZU5hbWVDaGVjazp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6bnVsbH0sYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzOnt3''@;'; put 'put ''cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTohMX19KSksTnQ9bnVsbCxRdD1udWxsO2NvbnN0IExuPU9iamVjdC5zZWFsKElxKG51bGwse3RhZ0NoZWNrOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTpudWxsfSxh''@;'; put 'put ''dHRyaWJ1dGVDaGVjazp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6bnVsbH19KSk7bGV0IGlyPSEwLEV0PSEwLFh0PSExLF9uPSEwLFFuPSExLFBuPSEwLEVuPSExLF9yPSExLEhuPSExLHpuPSExLE9yPSExLEVyPSExLHVpPSEwLElhPSExLGxvPSEw''@;'; put 'put ''LHRzPSExLHhzPXt9LEVvPW51bGw7Y29uc3QgcW89QXMoe30sWyJhbm5vdGF0aW9uLXhtbCIsImF1ZGlvIiwiY29sZ3JvdXAiLCJkZXNjIiwiZm9yZWlnbm9iamVjdCIsImhlYWQiLCJpZnJhbWUiLCJtYXRoIiwibWkiLCJtbiIsIm1vIiwibXMiLCJtdGV4dCIsIm5vZW1iZWQiLCJub2ZyYW1l''@;'; put 'put ''cyIsIm5vc2NyaXB0IiwicGxhaW50ZXh0Iiwic2NyaXB0Iiwic3R5bGUiLCJzdmciLCJ0ZW1wbGF0ZSIsInRoZWFkIiwidGl0bGUiLCJ2aWRlbyIsInhtcCJdKTtsZXQgcXM9bnVsbDtjb25zdCBFbD1Bcyh7fSxbImF1ZGlvIiwidmlkZW8iLCJpbWciLCJzb3VyY2UiLCJpbWFnZSIsInRyYWNr''@;'; put 'put ''Il0pO2xldCBJMD1udWxsO2NvbnN0IEoxPUFzKHt9LFsiYWx0IiwiY2xhc3MiLCJmb3IiLCJpZCIsImxhYmVsIiwibmFtZSIsInBhdHRlcm4iLCJwbGFjZWhvbGRlciIsInJvbGUiLCJzdW1tYXJ5IiwidGl0bGUiLCJ2YWx1ZSIsInN0eWxlIiwieG1sbnMiXSksUmM9Imh0dHA6Ly93d3cudzMu''@;'; put 'put ''b3JnLzE5OTgvTWF0aC9NYXRoTUwiLGdvPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2M9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiO2xldCBWbD1jYyxEcz0hMSxwZz1udWxsO2NvbnN0IGdnPUFzKHt9LFtSYyxnbyxjY10sT3EpO2xldCBRMT1Bcyh7fSxbIm1pIiwibW8i''@;'; put 'put ''LCJtbiIsIm1zIiwibXRleHQiXSksUGg9QXMoe30sWyJhbm5vdGF0aW9uLXhtbCJdKTtjb25zdCBGaD1Bcyh7fSxbInRpdGxlIiwic3R5bGUiLCJmb250IiwiYSIsInNjcmlwdCJdKTtsZXQgUjA9bnVsbDtjb25zdCB3Uz1bImFwcGxpY2F0aW9uL3hodG1sK3htbCIsInRleHQvaHRtbCJdO2xl''@;'; put 'put ''dCBBdT1udWxsLHg4PW51bGw7Y29uc3QgS3Q9YS5jcmVhdGVFbGVtZW50KCJmb3JtIiksemQ9ZnVuY3Rpb24ob3Ipe3JldHVybiBvciBpbnN0YW5jZW9mIFJlZ0V4cHx8b3IgaW5zdGFuY2VvZiBGdW5jdGlvbn0sZ2w9ZnVuY3Rpb24oKXtsZXQgb3I9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lk''@;'; put 'put ''IDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2lmKCF4OHx8eDghPT1vcil7aWYoKCFvcnx8Im9iamVjdCIhPXR5cGVvZiBvcikmJihvcj17fSksb3I9dzQob3IpLFIwPS0xPT09d1MuaW5kZXhPZihvci5QQVJTRVJfTUVESUFfVFlQRSk/InRleHQvaHRtbCI6b3IuUEFSU0VSX01F''@;'; put 'put ''RElBX1RZUEUsQXU9ImFwcGxpY2F0aW9uL3hodG1sK3htbCI9PT1SMD9PcTpXSCx2YT1HMyhvciwiQUxMT1dFRF9UQUdTIik/QXMoe30sb3IuQUxMT1dFRF9UQUdTLEF1KTp4YSxwYT1HMyhvciwiQUxMT1dFRF9BVFRSIik/QXMoe30sb3IuQUxMT1dFRF9BVFRSLEF1KTpacixwZz1HMyhvciwi''@;'; put 'put ''QUxMT1dFRF9OQU1FU1BBQ0VTIik/QXMoe30sb3IuQUxMT1dFRF9OQU1FU1BBQ0VTLE9xKTpnZyxJMD1HMyhvciwiQUREX1VSSV9TQUZFX0FUVFIiKT9Bcyh3NChKMSksb3IuQUREX1VSSV9TQUZFX0FUVFIsQXUpOkoxLHFzPUczKG9yLCJBRERfREFUQV9VUklfVEFHUyIpP0FzKHc0KEVsKSxv''@;'; put 'put ''ci5BRERfREFUQV9VUklfVEFHUyxBdSk6RWwsRW89RzMob3IsIkZPUkJJRF9DT05URU5UUyIpP0FzKHt9LG9yLkZPUkJJRF9DT05URU5UUyxBdSk6cW8sTnQ9RzMob3IsIkZPUkJJRF9UQUdTIik/QXMoe30sb3IuRk9SQklEX1RBR1MsQXUpOnc0KHt9KSxRdD1HMyhvciwiRk9SQklEX0FUVFIi''@;'; put 'put ''KT9Bcyh7fSxvci5GT1JCSURfQVRUUixBdSk6dzQoe30pLHhzPSEhRzMob3IsIlVTRV9QUk9GSUxFUyIpJiZvci5VU0VfUFJPRklMRVMsaXI9ITEhPT1vci5BTExPV19BUklBX0FUVFIsRXQ9ITEhPT1vci5BTExPV19EQVRBX0FUVFIsWHQ9b3IuQUxMT1dfVU5LTk9XTl9QUk9UT0NPTFN8fCEx''@;'; put 'put ''LF9uPSExIT09b3IuQUxMT1dfU0VMRl9DTE9TRV9JTl9BVFRSLFFuPW9yLlNBRkVfRk9SX1RFTVBMQVRFU3x8ITEsUG49ITEhPT1vci5TQUZFX0ZPUl9YTUwsRW49b3IuV0hPTEVfRE9DVU1FTlR8fCExLHpuPW9yLlJFVFVSTl9ET018fCExLE9yPW9yLlJFVFVSTl9ET01fRlJBR01FTlR8fCEx''@;'; put 'put ''LEVyPW9yLlJFVFVSTl9UUlVTVEVEX1RZUEV8fCExLEhuPW9yLkZPUkNFX0JPRFl8fCExLHVpPSExIT09b3IuU0FOSVRJWkVfRE9NLElhPW9yLlNBTklUSVpFX05BTUVEX1BST1BTfHwhMSxsbz0hMSE9PW9yLktFRVBfQ09OVEVOVCx0cz1vci5JTl9QTEFDRXx8ITEsTmk9b3IuQUxMT1dFRF9V''@;'; put 'put ''UklfUkVHRVhQfHxUNGUsVmw9b3IuTkFNRVNQQUNFfHxjYyxRMT1vci5NQVRITUxfVEVYVF9JTlRFR1JBVElPTl9QT0lOVFN8fFExLFBoPW9yLkhUTUxfSU5URUdSQVRJT05fUE9JTlRTfHxQaCx5dD1vci5DVVNUT01fRUxFTUVOVF9IQU5ETElOR3x8e30sb3IuQ1VTVE9NX0VMRU1FTlRfSEFO''@;'; put 'put ''RExJTkcmJnpkKG9yLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjaykmJih5dC50YWdOYW1lQ2hlY2s9b3IuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKSxvci5DVVNUT01fRUxFTUVOVF9IQU5ETElORyYmemQob3IuQ1VTVE9NX0VMRU1FTlRfSEFORExJ''@;'; put 'put ''TkcuYXR0cmlidXRlTmFtZUNoZWNrKSYmKHl0LmF0dHJpYnV0ZU5hbWVDaGVjaz1vci5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2spLG9yLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiYiYm9vbGVhbiI9PXR5cGVvZiBvci5DVVNUT01fRUxFTUVOVF9IQU5ETElO''@;'; put 'put ''Ry5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMmJih5dC5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHM9b3IuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzKSxRbiYmKEV0PSExKSxPciYmKHpuPSEwKSx4cyYmKHZhPUFzKHt9''@;'; put 'put ''LE00ZSkscGE9W10sITA9PT14cy5odG1sJiYoQXModmEsUzRlKSxBcyhwYSx4NGUpKSwhMD09PXhzLnN2ZyYmKEFzKHZhLEZxKSxBcyhwYSxWcSksQXMocGEsWUgpKSwhMD09PXhzLnN2Z0ZpbHRlcnMmJihBcyh2YSxIcSksQXMocGEsVnEpLEFzKHBhLFlIKSksITA9PT14cy5tYXRoTWwmJihB''@;'; put 'put ''cyh2YSxOcSksQXMocGEsRTRlKSxBcyhwYSxZSCkpKSxvci5BRERfVEFHUyYmKCJmdW5jdGlvbiI9PXR5cGVvZiBvci5BRERfVEFHUz9Mbi50YWdDaGVjaz1vci5BRERfVEFHUzoodmE9PT14YSYmKHZhPXc0KHZhKSksQXModmEsb3IuQUREX1RBR1MsQXUpKSksb3IuQUREX0FUVFImJigiZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2Ygb3IuQUREX0FUVFI/TG4uYXR0cmlidXRlQ2hlY2s9b3IuQUREX0FUVFI6KHBhPT09WnImJihwYT13NChwYSkpLEFzKHBhLG9yLkFERF9BVFRSLEF1KSkpLG9yLkFERF9VUklfU0FGRV9BVFRSJiZBcyhJMCxvci5BRERfVVJJX1NBRkVfQVRUUixBdSksb3IuRk9SQklE''@;'; put 'put ''X0NPTlRFTlRTJiYoRW89PT1xbyYmKEVvPXc0KEVvKSksQXMoRW8sb3IuRk9SQklEX0NPTlRFTlRTLEF1KSksb3IuQUREX0ZPUkJJRF9DT05URU5UUyYmKEVvPT09cW8mJihFbz13NChFbykpLEFzKEVvLG9yLkFERF9GT1JCSURfQ09OVEVOVFMsQXUpKSxsbyYmKHZhWyIjdGV4dCJdPSEwKSxF''@;'; put 'put ''biYmQXModmEsWyJodG1sIiwiaGVhZCIsImJvZHkiXSksdmEudGFibGUmJihBcyh2YSxbInRib2R5Il0pLGRlbGV0ZSBOdC50Ym9keSksb3IuVFJVU1RFRF9UWVBFU19QT0xJQ1kpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBvci5UUlVTVEVEX1RZUEVTX1BPTElDWS5jcmVhdGVIVE1MKXRocm93''@;'; put 'put ''IFRBKCdUUlVTVEVEX1RZUEVTX1BPTElDWSBjb25maWd1cmF0aW9uIG9wdGlvbiBtdXN0IHByb3ZpZGUgYSAiY3JlYXRlSFRNTCIgaG9vay4nKTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygb3IuVFJVU1RFRF9UWVBFU19QT0xJQ1kuY3JlYXRlU2NyaXB0VVJMKXRocm93IFRBKCdUUlVTVEVEX1RZ''@;'; put 'put ''UEVTX1BPTElDWSBjb25maWd1cmF0aW9uIG9wdGlvbiBtdXN0IHByb3ZpZGUgYSAiY3JlYXRlU2NyaXB0VVJMIiBob29rLicpO3p0PW9yLlRSVVNURURfVFlQRVNfUE9MSUNZLHluPXp0LmNyZWF0ZUhUTUwoIiIpfWVsc2Ugdm9pZCAwPT09enQmJih6dD1mdW5jdGlvbihsLGEpe2lmKCJvYmpl''@;'; put 'put ''Y3QiIT10eXBlb2YgbHx8ImZ1bmN0aW9uIiE9dHlwZW9mIGwuY3JlYXRlUG9saWN5KXJldHVybiBudWxsO2xldCBkPW51bGw7Y29uc3QgaD0iZGF0YS10dC1wb2xpY3ktc3VmZml4IjthJiZhLmhhc0F0dHJpYnV0ZShoKSYmKGQ9YS5nZXRBdHRyaWJ1dGUoaCkpO2NvbnN0IGY9ImRvbXB1cmlm''@;'; put 'put ''eSIrKGQ/IiMiK2Q6IiIpO3RyeXtyZXR1cm4gbC5jcmVhdGVQb2xpY3koZix7Y3JlYXRlSFRNTDp2PT52LGNyZWF0ZVNjcmlwdFVSTDp2PT52fSl9Y2F0Y2h7cmV0dXJuIGNvbnNvbGUud2FybigiVHJ1c3RlZFR5cGVzIHBvbGljeSAiK2YrIiBjb3VsZCBub3QgYmUgY3JlYXRlZC4iKSxudWxs''@;'; put 'put ''fX0od2UsaCkpLG51bGwhPT16dCYmInN0cmluZyI9PXR5cGVvZiB5biYmKHluPXp0LmNyZWF0ZUhUTUwoIiIpKTtFZCYmRWQob3IpLHg4PW9yfX0seHo9QXMoe30sWy4uLkZxLC4uLkhxLC4uLk5udF0pLEV5PUFzKHt9LFsuLi5OcSwuLi5WbnRdKSxhMz1mdW5jdGlvbihvcil7eEEobC5yZW1v''@;'; put 'put ''dmVkLHtlbGVtZW50Om9yfSk7dHJ5eyR0KG9yKS5yZW1vdmVDaGlsZChvcil9Y2F0Y2h7bnQob3IpfX0sWDU9ZnVuY3Rpb24ob3IsS2kpe3RyeXt4QShsLnJlbW92ZWQse2F0dHJpYnV0ZTpLaS5nZXRBdHRyaWJ1dGVOb2RlKG9yKSxmcm9tOktpfSl9Y2F0Y2h7eEEobC5yZW1vdmVkLHthdHRy''@;'; put 'put ''aWJ1dGU6bnVsbCxmcm9tOktpfSl9aWYoS2kucmVtb3ZlQXR0cmlidXRlKG9yKSwiaXMiPT09b3IpaWYoem58fE9yKXRyeXthMyhLaSl9Y2F0Y2h7fWVsc2UgdHJ5e0tpLnNldEF0dHJpYnV0ZShvciwiIil9Y2F0Y2h7fX0sRXo9ZnVuY3Rpb24ob3Ipe2xldCBLaT1udWxsLGVvPW51bGw7aWYo''@;'; put 'put ''SG4pb3I9IjxyZW1vdmU+PC9yZW1vdmU+IitvcjtlbHNle2NvbnN0IGt1PVBxKG9yLC9eW1xyXG5cdCBdKy8pO2VvPWt1JiZrdVswXX0iYXBwbGljYXRpb24veGh0bWwreG1sIj09PVIwJiZWbD09PWNjJiYob3I9JzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj48''@;'; put 'put ''aGVhZD48L2hlYWQ+PGJvZHk+JytvcisiPC9ib2R5PjwvaHRtbD4iKTtjb25zdCB3Yz16dD96dC5jcmVhdGVIVE1MKG9yKTpvcjtpZihWbD09PWNjKXRyeXtLaT0obmV3IHZlKS5wYXJzZUZyb21TdHJpbmcod2MsUjApfWNhdGNoe31pZighS2l8fCFLaS5kb2N1bWVudEVsZW1lbnQpe0tpPWdu''@;'; put 'put ''LmNyZWF0ZURvY3VtZW50KFZsLCJ0ZW1wbGF0ZSIsbnVsbCk7dHJ5e0tpLmRvY3VtZW50RWxlbWVudC5pbm5lckhUTUw9RHM/eW46d2N9Y2F0Y2h7fX1jb25zdCBRMD1LaS5ib2R5fHxLaS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIG9yJiZlbyYmUTAuaW5zZXJ0QmVmb3JlKGEuY3JlYXRlVGV4''@;'; put 'put ''dE5vZGUoZW8pLFEwLmNoaWxkTm9kZXNbMF18fG51bGwpLFZsPT09Y2M/RHIuY2FsbChLaSxFbj8iaHRtbCI6ImJvZHkiKVswXTpFbj9LaS5kb2N1bWVudEVsZW1lbnQ6UTB9LFR6PWZ1bmN0aW9uKG9yKXtyZXR1cm4gd24uY2FsbChvci5vd25lckRvY3VtZW50fHxvcixvcixVLlNIT1dfRUxF''@;'; put 'put ''TUVOVHxVLlNIT1dfQ09NTUVOVHxVLlNIT1dfVEVYVHxVLlNIT1dfUFJPQ0VTU0lOR19JTlNUUlVDVElPTnxVLlNIT1dfQ0RBVEFfU0VDVElPTixudWxsKX0sbEk9ZnVuY3Rpb24ob3Ipe3JldHVybiBvciBpbnN0YW5jZW9mIG9lJiYoInN0cmluZyIhPXR5cGVvZiBvci5ub2RlTmFtZXx8InN0''@;'; put 'put ''cmluZyIhPXR5cGVvZiBvci50ZXh0Q29udGVudHx8ImZ1bmN0aW9uIiE9dHlwZW9mIG9yLnJlbW92ZUNoaWxkfHwhKG9yLmF0dHJpYnV0ZXMgaW5zdGFuY2VvZiB0ZSl8fCJmdW5jdGlvbiIhPXR5cGVvZiBvci5yZW1vdmVBdHRyaWJ1dGV8fCJmdW5jdGlvbiIhPXR5cGVvZiBvci5zZXRBdHRy''@;'; put 'put ''aWJ1dGV8fCJzdHJpbmciIT10eXBlb2Ygb3IubmFtZXNwYWNlVVJJfHwiZnVuY3Rpb24iIT10eXBlb2Ygb3IuaW5zZXJ0QmVmb3JlfHwiZnVuY3Rpb24iIT10eXBlb2Ygb3IuaGFzQ2hpbGROb2Rlcyl9LHE1PWZ1bmN0aW9uKG9yKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTSYmb3IgaW5z''@;'; put 'put ''dGFuY2VvZiBNfTtmdW5jdGlvbiBicCh2byxvcixLaSl7Wkgodm8sZW89Pntlby5jYWxsKGwsb3IsS2kseDgpfSl9Y29uc3QgQXo9ZnVuY3Rpb24ob3Ipe2xldCBLaT1udWxsO2lmKGJwKGRyLmJlZm9yZVNhbml0aXplRWxlbWVudHMsb3IsbnVsbCksbEkob3IpKXJldHVybiBhMyhvciksITA7''@;'; put 'put ''Y29uc3QgZW89QXUob3Iubm9kZU5hbWUpO2lmKGJwKGRyLnVwb25TYW5pdGl6ZUVsZW1lbnQsb3Ise3RhZ05hbWU6ZW8sYWxsb3dlZFRhZ3M6dmF9KSxQbiYmb3IuaGFzQ2hpbGROb2RlcygpJiYhcTUob3IuZmlyc3RFbGVtZW50Q2hpbGQpJiZUZCgvPFsvXHchXS9nLG9yLmlubmVySFRNTCkm''@;'; put 'put ''JlRkKC88Wy9cdyFdL2csb3IudGV4dENvbnRlbnQpfHw3PT09b3Iubm9kZVR5cGV8fFBuJiY4PT09b3Iubm9kZVR5cGUmJlRkKC88Wy9cd10vZyxvci5kYXRhKSlyZXR1cm4gYTMob3IpLCEwO2lmKCEoTG4udGFnQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmTG4udGFnQ2hlY2soZW8pKSYm''@;'; put 'put ''KCF2YVtlb118fE50W2VvXSkpe2lmKCFOdFtlb10mJkR6KGVvKSYmKHl0LnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmVGQoeXQudGFnTmFtZUNoZWNrLGVvKXx8eXQudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJnl0LnRhZ05hbWVDaGVjayhlbykpKXJldHVybiEx''@;'; put 'put ''O2lmKGxvJiYhRW9bZW9dKXtjb25zdCB3Yz0kdChvcil8fG9yLnBhcmVudE5vZGUsUTA9bXQob3IpfHxvci5jaGlsZE5vZGVzO2lmKFEwJiZ3Yylmb3IobGV0IGVkPVEwLmxlbmd0aC0xO2VkPj0wOy0tZWQpe2NvbnN0IG8zPVdlKFEwW2VkXSwhMCk7bzMuX19yZW1vdmFsQ291bnQ9KG9yLl9f''@;'; put 'put ''cmVtb3ZhbENvdW50fHwwKSsxLHdjLmluc2VydEJlZm9yZShvMyxkdChvcikpfX1yZXR1cm4gYTMob3IpLCEwfXJldHVybiBvciBpbnN0YW5jZW9mIEQmJiFmdW5jdGlvbihvcil7bGV0IEtpPSR0KG9yKTsoIUtpfHwhS2kudGFnTmFtZSkmJihLaT17bmFtZXNwYWNlVVJJOlZsLHRhZ05hbWU6''@;'; put 'put ''InRlbXBsYXRlIn0pO2NvbnN0IGVvPVdIKG9yLnRhZ05hbWUpLHdjPVdIKEtpLnRhZ05hbWUpO3JldHVybiEhcGdbb3IubmFtZXNwYWNlVVJJXSYmKG9yLm5hbWVzcGFjZVVSST09PWdvP0tpLm5hbWVzcGFjZVVSST09PWNjPyJzdmciPT09ZW86S2kubmFtZXNwYWNlVVJJPT09UmM/InN2ZyI9''@;'; put 'put ''PT1lbyYmKCJhbm5vdGF0aW9uLXhtbCI9PT13Y3x8UTFbd2NdKTohIXh6W2VvXTpvci5uYW1lc3BhY2VVUkk9PT1SYz9LaS5uYW1lc3BhY2VVUkk9PT1jYz8ibWF0aCI9PT1lbzpLaS5uYW1lc3BhY2VVUkk9PT1nbz8ibWF0aCI9PT1lbyYmUGhbd2NdOiEhRXlbZW9dOm9yLm5hbWVzcGFjZVVS''@;'; put 'put ''ST09PWNjPyEoS2kubmFtZXNwYWNlVVJJPT09Z28mJiFQaFt3Y118fEtpLm5hbWVzcGFjZVVSST09PVJjJiYhUTFbd2NdKSYmIUV5W2VvXSYmKEZoW2VvXXx8IXh6W2VvXSk6ISgiYXBwbGljYXRpb24veGh0bWwreG1sIiE9PVIwfHwhcGdbb3IubmFtZXNwYWNlVVJJXSkpfShvcil8fCgibm9z''@;'; put 'put ''Y3JpcHQiPT09ZW98fCJub2VtYmVkIj09PWVvfHwibm9mcmFtZXMiPT09ZW8pJiZUZCgvPFwvbm8oc2NyaXB0fGVtYmVkfGZyYW1lcykvaSxvci5pbm5lckhUTUwpPyhhMyhvciksITApOihRbiYmMz09PW9yLm5vZGVUeXBlJiYoS2k9b3IudGV4dENvbnRlbnQsWkgoW01yLHZpLE5uXSx3Yz0+''@;'; put 'put ''e0tpPUVBKEtpLHdjLCIgIil9KSxvci50ZXh0Q29udGVudCE9PUtpJiYoeEEobC5yZW1vdmVkLHtlbGVtZW50Om9yLmNsb25lTm9kZSgpfSksb3IudGV4dENvbnRlbnQ9S2kpKSxicChkci5hZnRlclNhbml0aXplRWxlbWVudHMsb3IsbnVsbCksITEpfSxrej1mdW5jdGlvbihvcixLaSxlbyl7''@;'; put 'put ''aWYodWkmJigiaWQiPT09S2l8fCJuYW1lIj09PUtpKSYmKGVvIGluIGF8fGVvIGluIEt0KSlyZXR1cm4hMTtpZigoIUV0fHxRdFtLaV18fCFUZChCcixLaSkpJiYhKGlyJiZUZChlcixLaSl8fExuLmF0dHJpYnV0ZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJkxuLmF0dHJpYnV0ZUNoZWNr''@;'; put 'put ''KEtpLG9yKSkpaWYoIXBhW0tpXXx8UXRbS2ldKXtpZighKER6KG9yKSYmKHl0LnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmVGQoeXQudGFnTmFtZUNoZWNrLG9yKXx8eXQudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJnl0LnRhZ05hbWVDaGVjayhvcikpJiYoeXQu''@;'; put 'put ''YXR0cmlidXRlTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZUZCh5dC5hdHRyaWJ1dGVOYW1lQ2hlY2ssS2kpfHx5dC5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmeXQuYXR0cmlidXRlTmFtZUNoZWNrKEtpLG9yKSl8fCJpcyI9PT1LaSYmeXQuYWxsb3dDdXN0''@;'; put 'put ''b21pemVkQnVpbHRJbkVsZW1lbnRzJiYoeXQudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZUZCh5dC50YWdOYW1lQ2hlY2ssZW8pfHx5dC50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmeXQudGFnTmFtZUNoZWNrKGVvKSkpKXJldHVybiExfWVsc2UgaWYoIUkwW0tp''@;'; put 'put ''XSYmIVRkKE5pLEVBKGVvLCRyLCIiKSkmJigic3JjIiE9PUtpJiYieGxpbms6aHJlZiIhPT1LaSYmImhyZWYiIT09S2l8fCJzY3JpcHQiPT09b3J8fDAhPT1PbnQoZW8sImRhdGE6Iil8fCFxc1tvcl0pJiYoIVh0fHxUZChUcixFQShlbywkciwiIikpKSYmZW8pcmV0dXJuITE7cmV0dXJuITB9''@;'; put 'put ''LER6PWZ1bmN0aW9uKG9yKXtyZXR1cm4iYW5ub3RhdGlvbi14bWwiIT09b3ImJlBxKG9yLGJpKX0sSXo9ZnVuY3Rpb24ob3Ipe2JwKGRyLmJlZm9yZVNhbml0aXplQXR0cmlidXRlcyxvcixudWxsKTtjb25zdHthdHRyaWJ1dGVzOktpfT1vcjtpZighS2l8fGxJKG9yKSlyZXR1cm47Y29uc3Qg''@;'; put 'put ''ZW89e2F0dHJOYW1lOiIiLGF0dHJWYWx1ZToiIixrZWVwQXR0cjohMCxhbGxvd2VkQXR0cmlidXRlczpwYSxmb3JjZUtlZXBBdHRyOnZvaWQgMH07bGV0IHdjPUtpLmxlbmd0aDtmb3IoO3djLS07KXtjb25zdCBRMD1LaVt3Y10se25hbWU6a3UsbmFtZXNwYWNlVVJJOmVkLHZhbHVlOm8zfT1R''@;'; put 'put ''MCxUOD1BdShrdSksY0k9bzM7bGV0IEwwPSJ2YWx1ZSI9PT1rdT9jSTpQbnQoY0kpO2lmKGVvLmF0dHJOYW1lPVQ4LGVvLmF0dHJWYWx1ZT1MMCxlby5rZWVwQXR0cj0hMCxlby5mb3JjZUtlZXBBdHRyPXZvaWQgMCxicChkci51cG9uU2FuaXRpemVBdHRyaWJ1dGUsb3IsZW8pLEwwPWVvLmF0''@;'; put 'put ''dHJWYWx1ZSxJYSYmKCJpZCI9PT1UOHx8Im5hbWUiPT09VDgpJiYoWDUoa3Usb3IpLEwwPSJ1c2VyLWNvbnRlbnQtIitMMCksUG4mJlRkKC8oKC0tIT98XSk+KXw8XC8oc3R5bGV8dGl0bGV8dGV4dGFyZWEpL2ksTDApKXtYNShrdSxvcik7Y29udGludWV9aWYoImF0dHJpYnV0ZW5hbWUiPT09''@;'; put 'put ''VDgmJlBxKEwwLCJocmVmIikpe1g1KGt1LG9yKTtjb250aW51ZX1pZihlby5mb3JjZUtlZXBBdHRyKWNvbnRpbnVlO2lmKCFlby5rZWVwQXR0cil7WDUoa3Usb3IpO2NvbnRpbnVlfWlmKCFfbiYmVGQoL1wvPi9pLEwwKSl7WDUoa3Usb3IpO2NvbnRpbnVlfVFuJiZaSChbTXIsdmksTm5dLFJ6''@;'; put 'put ''PT57TDA9RUEoTDAsUnosIiAiKX0pO2NvbnN0IFNTPUF1KG9yLm5vZGVOYW1lKTtpZihreihTUyxUOCxMMCkpe2lmKHp0JiYib2JqZWN0Ij09dHlwZW9mIHdlJiYiZnVuY3Rpb24iPT10eXBlb2Ygd2UuZ2V0QXR0cmlidXRlVHlwZSYmIWVkKXN3aXRjaCh3ZS5nZXRBdHRyaWJ1dGVUeXBlKFNT''@;'; put 'put ''LFQ4KSl7Y2FzZSJUcnVzdGVkSFRNTCI6TDA9enQuY3JlYXRlSFRNTChMMCk7YnJlYWs7Y2FzZSJUcnVzdGVkU2NyaXB0VVJMIjpMMD16dC5jcmVhdGVTY3JpcHRVUkwoTDApfWlmKEwwIT09Y0kpdHJ5e2VkP29yLnNldEF0dHJpYnV0ZU5TKGVkLGt1LEwwKTpvci5zZXRBdHRyaWJ1dGUoa3Us''@;'; put 'put ''TDApLGxJKG9yKT9hMyhvcik6QzRlKGwucmVtb3ZlZCl9Y2F0Y2h7WDUoa3Usb3IpfX1lbHNlIFg1KGt1LG9yKX1icChkci5hZnRlclNhbml0aXplQXR0cmlidXRlcyxvcixudWxsKX0sb29lPWZ1bmN0aW9uIHZvKG9yKXtsZXQgS2k9bnVsbDtjb25zdCBlbz1Ueihvcik7Zm9yKGJwKGRyLmJl''@;'; put 'put ''Zm9yZVNhbml0aXplU2hhZG93RE9NLG9yLG51bGwpO0tpPWVvLm5leHROb2RlKCk7KWJwKGRyLnVwb25TYW5pdGl6ZVNoYWRvd05vZGUsS2ksbnVsbCksQXooS2kpLEl6KEtpKSxLaS5jb250ZW50IGluc3RhbmNlb2YgZiYmdm8oS2kuY29udGVudCk7YnAoZHIuYWZ0ZXJTYW5pdGl6ZVNoYWRv''@;'; put 'put ''d0RPTSxvcixudWxsKX07cmV0dXJuIGwuc2FuaXRpemU9ZnVuY3Rpb24odm8pe2xldCBvcj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sS2k9bnVsbCxlbz1udWxsLHdjPW51bGwsUTA9bnVsbDtpZihEcz0hdm8sRHMmJih2bz0iXHgz''@;'; put 'put ''YyEtLVx4M2UiKSwic3RyaW5nIiE9dHlwZW9mIHZvJiYhcTUodm8pKXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygdm8udG9TdHJpbmcpdGhyb3cgVEEoInRvU3RyaW5nIGlzIG5vdCBhIGZ1bmN0aW9uIik7aWYoInN0cmluZyIhPXR5cGVvZih2bz12by50b1N0cmluZygpKSl0aHJvdyBUQSgiZGly''@;'; put 'put ''dHkgaXMgbm90IGEgc3RyaW5nLCBhYm9ydGluZyIpfWlmKCFsLmlzU3VwcG9ydGVkKXJldHVybiB2bztpZihfcnx8Z2wob3IpLGwucmVtb3ZlZD1bXSwic3RyaW5nIj09dHlwZW9mIHZvJiYodHM9ITEpLHRzKXtpZih2by5ub2RlTmFtZSl7Y29uc3QgbzM9QXUodm8ubm9kZU5hbWUpO2lmKCF2''@;'; put 'put ''YVtvM118fE50W28zXSl0aHJvdyBUQSgicm9vdCBub2RlIGlzIGZvcmJpZGRlbiBhbmQgY2Fubm90IGJlIHNhbml0aXplZCBpbi1wbGFjZSIpfX1lbHNlIGlmKHZvIGluc3RhbmNlb2YgTSlLaT1FeigiXHgzYyEtLS0tXHgzZSIpLGVvPUtpLm93bmVyRG9jdW1lbnQuaW1wb3J0Tm9kZSh2bywh''@;'; put 'put ''MCksMT09PWVvLm5vZGVUeXBlJiYiQk9EWSI9PT1lby5ub2RlTmFtZXx8IkhUTUwiPT09ZW8ubm9kZU5hbWU/S2k9ZW86S2kuYXBwZW5kQ2hpbGQoZW8pO2Vsc2V7aWYoIXpuJiYhUW4mJiFFbiYmLTE9PT12by5pbmRleE9mKCI8IikpcmV0dXJuIHp0JiZFcj96dC5jcmVhdGVIVE1MKHZvKTp2''@;'; put 'put ''bztpZihLaT1Feih2byksIUtpKXJldHVybiB6bj9udWxsOkVyP3luOiIifUtpJiZIbiYmYTMoS2kuZmlyc3RDaGlsZCk7Y29uc3Qga3U9VHoodHM/dm86S2kpO2Zvcig7d2M9a3UubmV4dE5vZGUoKTspQXood2MpLEl6KHdjKSx3Yy5jb250ZW50IGluc3RhbmNlb2YgZiYmb29lKHdjLmNvbnRl''@;'; put 'put ''bnQpO2lmKHRzKXJldHVybiB2bztpZih6bil7aWYoT3IpZm9yKFEwPVJuLmNhbGwoS2kub3duZXJEb2N1bWVudCk7S2kuZmlyc3RDaGlsZDspUTAuYXBwZW5kQ2hpbGQoS2kuZmlyc3RDaGlsZCk7ZWxzZSBRMD1LaTtyZXR1cm4ocGEuc2hhZG93cm9vdHx8cGEuc2hhZG93cm9vdG1vZGUpJiYo''@;'; put 'put ''UTA9THIuY2FsbChkLFEwLCEwKSksUTB9bGV0IGVkPUVuP0tpLm91dGVySFRNTDpLaS5pbm5lckhUTUw7cmV0dXJuIEVuJiZ2YVsiIWRvY3R5cGUiXSYmS2kub3duZXJEb2N1bWVudCYmS2kub3duZXJEb2N1bWVudC5kb2N0eXBlJiZLaS5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSYmVGQo''@;'; put 'put ''QTRlLEtpLm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lKSYmKGVkPSI8IURPQ1RZUEUgIitLaS5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSsiPlxuIitlZCksUW4mJlpIKFtNcix2aSxObl0sbzM9PntlZD1FQShlZCxvMywiICIpfSksenQmJkVyP3p0LmNyZWF0ZUhUTUwoZWQpOmVkfSxs''@;'; put 'put ''LnNldENvbmZpZz1mdW5jdGlvbigpe2dsKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSksX3I9ITB9LGwuY2xlYXJDb25maWc9ZnVuY3Rpb24oKXt4OD1udWxsLF9yPSExfSxsLmlzVmFsaWRBdHRyaWJ1dGU9ZnVuY3Rpb24odm8sb3Is''@;'; put 'put ''S2kpe3g4fHxnbCh7fSk7Y29uc3QgZW89QXUodm8pLHdjPUF1KG9yKTtyZXR1cm4ga3ooZW8sd2MsS2kpfSxsLmFkZEhvb2s9ZnVuY3Rpb24odm8sb3IpeyJmdW5jdGlvbiI9PXR5cGVvZiBvciYmeEEoZHJbdm9dLG9yKX0sbC5yZW1vdmVIb29rPWZ1bmN0aW9uKHZvLG9yKXtpZih2b2lkIDAh''@;'; put 'put ''PT1vcil7Y29uc3QgS2k9Um50KGRyW3ZvXSxvcik7cmV0dXJuLTE9PT1LaT92b2lkIDA6TG50KGRyW3ZvXSxLaSwxKVswXX1yZXR1cm4gQzRlKGRyW3ZvXSl9LGwucmVtb3ZlSG9va3M9ZnVuY3Rpb24odm8pe2RyW3ZvXT1bXX0sbC5yZW1vdmVBbGxIb29rcz1mdW5jdGlvbigpe2RyPXthZnRl''@;'; put 'put ''clNhbml0aXplQXR0cmlidXRlczpbXSxhZnRlclNhbml0aXplRWxlbWVudHM6W10sYWZ0ZXJTYW5pdGl6ZVNoYWRvd0RPTTpbXSxiZWZvcmVTYW5pdGl6ZUF0dHJpYnV0ZXM6W10sYmVmb3JlU2FuaXRpemVFbGVtZW50czpbXSxiZWZvcmVTYW5pdGl6ZVNoYWRvd0RPTTpbXSx1cG9uU2FuaXRp''@;'; put 'put ''emVBdHRyaWJ1dGU6W10sdXBvblNhbml0aXplRWxlbWVudDpbXSx1cG9uU2FuaXRpemVTaGFkb3dOb2RlOltdfX0sbH0oKTtmdW5jdGlvbiBSNGUoYyl7Y29uc3QgbD1jLmxlbmd0aDtsZXQgYT0wO2Zvcig7YTxsOyljW2FdPVtjW2FdXSxhKz0xfWZ1bmN0aW9uIEJxKGMsbCl7Y29uc3QgYT1s''@;'; put 'put ''Lmxlbmd0aDtsZXQgZD0wO2Zvcig7ZDxhOyljLnB1c2gobFtkXSksZCs9MX1mdW5jdGlvbiBEQShjKXtjb25zdCBsPVtdO2lmKCFjfHwwPT09Yy5sZW5ndGh8fCFjWzBdfHwwPT09Y1swXS5sZW5ndGgpcmV0dXJuIGw7Y29uc3QgYT1jLmxlbmd0aCxkPWNbMF0ubGVuZ3RoO2ZvcihsZXQgaD0w''@;'; put 'put ''O2g8YTtoKyspZm9yKGxldCBmPTA7ZjxkO2YrKylsW2ZdfHwobFtmXT1bXSksbFtmXVtoXT1jW2hdW2ZdO3JldHVybiBsfWZ1bmN0aW9uIGEwKGMsbCxhLGQpe2xldCBoPS0xLGY9Yyx2PWE7QXJyYXkuaXNBcnJheShjKXx8KGY9QXJyYXkuZnJvbShjKSk7Y29uc3QgTT1mLmxlbmd0aDtmb3Io''@;'; put 'put ''ZCYmTSYmKGgrPTEsdj1mW2hdKSxoKz0xO2g8TTspdj1sKHYsZltoXSxoLGYpLGgrPTE7cmV0dXJuIHZ9ZnVuY3Rpb24gUzYoYyxsKXtsZXQgYT0wLGQ9YztBcnJheS5pc0FycmF5KGMpfHwoZD1BcnJheS5mcm9tKGMpKTtjb25zdCBoPWQubGVuZ3RoLGY9W107bGV0IHY9LTE7Zm9yKDthPGg7''@;'; put 'put ''KXtjb25zdCBNPWRbYV07bChNLGEsZCkmJih2Kz0xLGZbdl09TSksYSs9MX1yZXR1cm4gZn1mdW5jdGlvbiBacyhjLGwpe2xldCBhPTAsZD1jO0FycmF5LmlzQXJyYXkoYyl8fChkPUFycmF5LmZyb20oYykpO2NvbnN0IGg9ZC5sZW5ndGgsZj1bXTtsZXQgdj0tMTtmb3IoO2E8aDspdis9MSxm''@;'; put 'put ''W3ZdPWwoZFthXSxhLGQpLGErPTE7cmV0dXJuIGZ9ZnVuY3Rpb24gS24oYyxsKXtsZXQgYT0wLGQ9YztBcnJheS5pc0FycmF5KGMpfHwoZD1BcnJheS5mcm9tKGMpKTtjb25zdCBoPWQubGVuZ3RoO2Zvcig7YTxoJiYhMSE9PWwoZFthXSxhLGQpOylhKz0xO3JldHVybiBjfWZ1bmN0aW9uIEw0''@;'; put 'put ''ZShjKXtyZXR1cm4gYTAoYywobCxhKT0+bCthLDApfWZ1bmN0aW9uIHFudChjKXtyZXR1cm4gYTAoYywobCxhKT0+bD5hP2w6YSxBcnJheS5pc0FycmF5KGMpP2NbMF06dm9pZCAwKX1mdW5jdGlvbiBKbnQoYyl7cmV0dXJuIGEwKGMsKGwsYSk9Pmw8YT9sOmEsQXJyYXkuaXNBcnJheShjKT9j''@;'; put 'put ''WzBdOnZvaWQgMCl9ZnVuY3Rpb24gUW50KGMpe3JldHVybiBjLmxlbmd0aD9MNGUoYykvYy5sZW5ndGg6MH1mdW5jdGlvbiBPNGUoYyl7cmV0dXJuIGEwKGMsKGwsYSk9PmwuY29uY2F0KEFycmF5LmlzQXJyYXkoYSk/TzRlKGEpOmEpLFtdKX1mdW5jdGlvbiBQNGUoYyl7Y29uc3QgbD1bXTty''@;'; put 'put ''ZXR1cm4gS24oYyxhPT57LTE9PT1sLmluZGV4T2YoYSkmJmwucHVzaChhKX0pLGx9ZnVuY3Rpb24ganEoKXtmb3IodmFyIGM9YXJndW1lbnRzLmxlbmd0aCxsPW5ldyBBcnJheShjKSxhPTA7YTxjO2ErKylsW2FdPWFyZ3VtZW50c1thXTtjb25zdFtkLC4uLmhdPVsuLi5sXTtsZXQgZj1kO3Jl''@;'; put 'put ''dHVybiBLbihoLHY9PntmPWYuZmlsdGVyKE09PiF2LmluY2x1ZGVzKE0pKX0pLGZ9ZnVuY3Rpb24gZXJ0KCl7Zm9yKHZhciBjPWFyZ3VtZW50cy5sZW5ndGgsbD1uZXcgQXJyYXkoYyksYT0wO2E8YzthKyspbFthXT1hcmd1bWVudHNbYV07Y29uc3RbZCwuLi5oXT1bLi4ubF07bGV0IGY9ZDty''@;'; put 'put ''ZXR1cm4gS24oaCx2PT57Zj1mLmZpbHRlcihNPT52LmluY2x1ZGVzKE0pKX0pLGZ9ZnVuY3Rpb24gdHJ0KCl7Zm9yKHZhciBjPWFyZ3VtZW50cy5sZW5ndGgsbD1uZXcgQXJyYXkoYyksYT0wO2E8YzthKyspbFthXT1hcmd1bWVudHNbYV07Y29uc3RbZCwuLi5oXT1bLi4ubF0sZj1uZXcgU2V0''@;'; put 'put ''KGQpO3JldHVybiBLbihoLHY9PntLbih2LE09PntmLmhhcyhNKXx8Zi5hZGQoTSl9KX0pLEFycmF5LmZyb20oZil9ZnVuY3Rpb24genEoYyl7cmV0dXJuIGMuc3BsaXQoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiIgIil9ZnVuY3Rpb24g''@;'; put 'put ''WHMoYyl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobD4xP2wtMTowKSxkPTE7ZDxsO2QrKylhW2QtMV09YXJndW1lbnRzW2RdO3JldHVybiBhMChjLChmLHYsTSk9PmYrdi5yZXBsYWNlKC9ccj9cblxzKi9nLCIiKSsoYVtNXT9hW01dOiIiKSwiIikudHJpbSgpfWZ1''@;'; put 'put ''bmN0aW9uIE93KGMpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGw+MT9sLTE6MCksZD0xO2Q8bDtkKyspYVtkLTFdPWFyZ3VtZW50c1tkXTtjb25zdCBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7aC5pbm5lckhUTUw9Yy5yZWR1Y2UoKE0sRCxV''@;'; put 'put ''KT0+e3ZhciB0ZTtyZXR1cm4gTStEKyhudWxsIT09KHRlPWFbVV0pJiZ2b2lkIDAhPT10ZT90ZToiIil9LCIiKTtjb25zdCBmPWguY29udGVudC5jbG9uZU5vZGUoITApLHY9e307cmV0dXJuIGYucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtcmVmXSIpLmZvckVhY2goTT0+e2NvbnN0IEQ9TS5n''@;'; put 'put ''ZXRBdHRyaWJ1dGUoImRhdGEtcmVmIik7TS5yZW1vdmVBdHRyaWJ1dGUoImRhdGEtcmVmIiksdltEXT1NfSkse2ZyYWdtZW50OmYscmVmczp2fX1mdW5jdGlvbiByYyhjKXtsZXQgbDtzd2l0Y2godHlwZW9mIGMpe2Nhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6bD1gJHtjfWA7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJvYmplY3QiOmw9bnVsbD09PWM/IiI6Yy50b1N0cmluZygpO2JyZWFrO2Nhc2UidW5kZWZpbmVkIjpsPSIiO2JyZWFrO2RlZmF1bHQ6bD1jLnRvU3RyaW5nKCl9cmV0dXJuIGx9ZnVuY3Rpb24gTWEoYyl7cmV0dXJuIHR5cGVvZiBjPCJ1In1mdW5jdGlvbiBiYyhjKXtyZXR1cm4gdHlwZW9m''@;'; put 'put ''IGM+InUifWZ1bmN0aW9uIHR1KGMpe3JldHVybiBudWxsPT09Y3x8IiI9PT1jfHxiYyhjKX1mdW5jdGlvbiBGNGUoYyl7cmV0dXJuIltvYmplY3QgUmVnRXhwXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYyl9Yig0NDIxMyk7Y29uc3QgSUE9Imxlbmd0aCIsUkE9Yz0+cGFy''@;'; put 'put ''c2VJbnQoYywxNiksSDRlPWM9PnBhcnNlSW50KGMsMTApLEdIPShjLGwsYSk9PmMuc3Vic3RyKGwsYSksTEE9Yz0+Yy5jb2RlUG9pbnRBdCgwKS02NSxVcT1jPT5gJHtjfWAucmVwbGFjZSgvXC0vZywiIiksbnJ0PWM9PlJBKEdIKFVxKGMpLFJBKCIxMiIpLExBKCJGIikpKS8oUkEoR0goVXEo''@;'; put 'put ''YyksTEEoIkIiKSx+fiFbXVtJQV0pKXx8OSkscnJ0PSgpPT50eXBlb2YgbG9jYXRpb248InUiJiYvXihbYS16MC05XC1dK1wuKT9ceDY4XHg2MVx4NkVceDY0XHg3M1x4NkZceDZFXHg3NFx4NjFceDYyXHg2Q1x4NjVceDJFXHg2M1x4NkZceDZEJC9pLnRlc3QobG9jYXRpb24uaG9zdCk7bGV0''@;'; put 'put ''IE40ZT0hMTtjb25zdCBWNGU9e2ludmFsaWQ6KCk9PlhzYAogICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgaXMgaW52YWxpZC5ceDIwCiAgICBJZiB5b3UgbmVlZCBhbnkgaGVscCwgY29udGFjdCB1cyBhdCBzdXBwb3J0QGhhbmRzb250YWJsZS5jb20uYCxleHBpcmVkOmM9''@;'; put 'put ''PntsZXR7a2V5VmFsaWRpdHlEYXRlOmwsaG90VmVyc2lvbjphfT1jO3JldHVybiBYc2AKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGV4cGlyZWQgb24gJHtsfSwgYW5kIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGluc3RhbGxlZFx4MjAKICAgIHZlcnNpb24gJHthfS4gUmVu''@;'; put 'put ''ZXcgeW91ciBsaWNlbnNlIGtleSBhdCBoYW5kc29udGFibGUuY29tIG9yIGRvd25ncmFkZSB0byBhIHZlcnNpb24gcmVsZWFzZWQgcHJpb3JceDIwCiAgICB0byAke2x9LiBJZiB5b3UgbmVlZCBhbnkgaGVscCwgY29udGFjdCB1cyBhdCBzYWxlc0BoYW5kc29udGFibGUuY29tLmB9LG1pc3Np''@;'; put 'put ''bmc6KCk9PlhzYAogICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgaXMgbWlzc2luZy4gVXNlIHlvdXIgcHVyY2hhc2VkIGtleSB0byBhY3RpdmF0ZSB0aGUgcHJvZHVjdC5ceDIwCiAgICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGFjdGl2YXRlIEhhbmRzb250YWJsZSB0byB1''@;'; put 'put ''c2UgZm9yIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzIGJ5XHgyMAogICAgcGFzc2luZyB0aGUga2V5OiAnbm9uLWNvbW1lcmNpYWwtYW5kLWV2YWx1YXRpb24nLiBJZiB5b3UgbmVlZCBhbnkgaGVscCwgY29udGFjdFx4MjAKICAgIHVzIGF0IHN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbS5gLG5v''@;'; put 'put ''bl9jb21tZXJjaWFsOigpPT4iIn0sQjRlPXtpbnZhbGlkOigpPT5Yc2AKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGlzIGludmFsaWQuXHgyMAogICAgPGEgaHJlZj0iaHR0cHM6Ly9oYW5kc29udGFibGUuY29tL2RvY3MvdHV0b3JpYWwtbGljZW5zZS1rZXkuaHRtbCIg''@;'; put 'put ''dGFyZ2V0PSJfYmxhbmsiPlJlYWQgbW9yZTwvYT4gb24gaG93IHRvXHgyMAogICAgaW5zdGFsbCBpdCBwcm9wZXJseSBvciBjb250YWN0IHVzIGF0IDxhIGhyZWY9Im1haWx0bzpzdXBwb3J0QGhhbmRzb250YWJsZS5jb20iPnN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbTwvYT4uYCxleHBpcmVk''@;'; put 'put ''OmM9PntsZXR7a2V5VmFsaWRpdHlEYXRlOmwsaG90VmVyc2lvbjphfT1jO3JldHVybiBYc2AKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGV4cGlyZWQgb24gJHtsfSwgYW5kIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGluc3RhbGxlZFx4MjAKICAgIHZlcnNpb24gJHthfS4g''@;'; put 'put ''PGEgaHJlZj0iaHR0cHM6Ly9oYW5kc29udGFibGUuY29tL3ByaWNpbmciIHRhcmdldD0iX2JsYW5rIj5SZW5ldzwvYT4geW91clx4MjAKICAgIGxpY2Vuc2Uga2V5IG9yIGRvd25ncmFkZSB0byBhIHZlcnNpb24gcmVsZWFzZWQgcHJpb3IgdG8gJHtsfS4gSWYgeW91IG5lZWQgYW55XHgyMAog''@;'; put 'put ''ICAgaGVscCwgY29udGFjdCB1cyBhdCA8YSBocmVmPSJtYWlsdG86c2FsZXNAaGFuZHNvbnRhYmxlLmNvbSI+c2FsZXNAaGFuZHNvbnRhYmxlLmNvbTwvYT4uYH0sbWlzc2luZzooKT0+WHNgCiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBpcyBtaXNzaW5nLiBVc2UgeW91''@;'; put 'put ''ciBwdXJjaGFzZWQga2V5IHRvIGFjdGl2YXRlIHRoZSBwcm9kdWN0Llx4MjAKICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gYWN0aXZhdGUgSGFuZHNvbnRhYmxlIHRvIHVzZSBmb3Igbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMgYnlceDIwCiAgICBwYXNzaW5nIHRoZSBrZXk6ICdub24tY29t''@;'; put 'put ''bWVyY2lhbC1hbmQtZXZhbHVhdGlvbicuXHgyMAogICAgPGEgaHJlZj0iaHR0cHM6Ly9oYW5kc29udGFibGUuY29tL2RvY3MvdHV0b3JpYWwtbGljZW5zZS1rZXkuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPlJlYWQgbW9yZTwvYT4gYWJvdXQgaXQgaW5ceDIwCiAgICB0aGUgZG9jdW1lbnRhdGlv''@;'; put 'put ''biBvciBjb250YWN0IHVzIGF0IDxhIGhyZWY9Im1haWx0bzpzdXBwb3J0QGhhbmRzb250YWJsZS5jb20iPnN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbTwvYT4uYCxub25fY29tbWVyY2lhbDooKT0+IiJ9O2Z1bmN0aW9uIGo0ZShjLGwpe2NvbnN0IGE9IXR1KGMpLGQ9InN0cmluZyI9PXR5cGVv''@;'; put 'put ''ZiBjJiYibm9uLWNvbW1lcmNpYWwtYW5kLWV2YWx1YXRpb24iPT09Yy50b0xvd2VyQ2FzZSgpLGg9IjE2LjIuMCI7bGV0IGYsdj0iaW52YWxpZCIsTT0iaW52YWxpZCI7Y29uc3QgRD1mdW5jdGlvbiBpcnQoYyl7bGV0IGw9W11bSUFdLGE9bDtpZihjW0lBXSE9PUxBKCJaIikpcmV0dXJuITE7''@;'; put 'put ''Zm9yKGxldCBkPSIiLGg9IkI8SDRQKyIuc3BsaXQoIiIpLGY9TEEoaC5zaGlmdCgpKTtmO2Y9TEEoaC5zaGlmdCgpfHwiQSIpKS0tZjwiIltJQV0/YXw9KEg0ZShgJHtINGUoUkEoZCkrKFJBKEdIKGMsTWF0aC5hYnMoZiksMikpK1tdKS5wYWRTdGFydCgyLCIwIikpfWApJTk3fHwyKT4+MTpk''@;'; put 'put ''PUdIKGMsZixmPzE9PT1oW0lBXT85Ojg6Nik7cmV0dXJuIGE9PT1sfShjPVVxKGN8fCIiKSk7aWYoYXx8ZHx8RClpZihEKXtjb25zdCBVPSRzKCIyNS8xMS8yMDI1IiwiREQvTU0vWVlZWSIpLHRlPU1hdGguZmxvb3IoVS50b0RhdGUoKS5nZXRUaW1lKCkvODY0ZTUpLG9lPW5ydChjKTtmPSRz''@;'; put 'put ''KDg2NGU1KihvZSsxKSwieCIpLmZvcm1hdCgiTU1NTSBERCwgWVlZWSIpLHRlPm9lPyh2PSJleHBpcmVkIixNPSJleHBpcmVkIik6KHY9InZhbGlkIixNPSJ2YWxpZCIpfWVsc2UgZD8odj0ibm9uX2NvbW1lcmNpYWwiLE09InZhbGlkIik6KHY9ImludmFsaWQiLE09ImludmFsaWQiKTtlbHNl''@;'; put 'put ''IHY9Im1pc3NpbmciLE09Im1pc3NpbmciO2lmKHJydCgpJiYodj0idmFsaWQiLE09InZhbGlkIiksIU40ZSYmInZhbGlkIiE9PXYmJihWNGVbdl0oe2tleVZhbGlkaXR5RGF0ZTpmLGhvdFZlcnNpb246aH0pJiZjb25zb2xlWyJub25fY29tbWVyY2lhbCI9PT12PyJpbmZvIjoid2FybiJdKFY0''@;'; put 'put ''ZVt2XSh7a2V5VmFsaWRpdHlEYXRlOmYsaG90VmVyc2lvbjpofSkpLE40ZT0hMCksInZhbGlkIiE9PU0mJmwmJkI0ZVtNXSh7a2V5VmFsaWRpdHlEYXRlOmYsaG90VmVyc2lvbjpofSkpe2NvbnN0IHRlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3RlLmNsYXNzTmFtZT0iaGFuZHNv''@;'; put 'put ''bnRhYmxlIGhvdC1kaXNwbGF5LWxpY2Vuc2UtaW5mbyIsdGUuaW5uZXJIVE1MPUI0ZVtNXSh7a2V5VmFsaWRpdHlEYXRlOmYsaG90VmVyc2lvbjpofSksbC5hcHBlbmRDaGlsZCh0ZSl9fWZ1bmN0aW9uIFYxKGMpe3JldHVybiBjWzBdLnRvVXBwZXJDYXNlKCkrYy5zdWJzdHIoMSl9ZnVuY3Rp''@;'; put 'put ''b24gYXJ0KCl7Y29uc3QgYz1bXTtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTtsZXQgaD1hLmxlbmd0aDtmb3IoO2g7KXtoLT0xO2NvbnN0IGY9cmMoYVtoXSkudG9Mb3dlckNhc2UoKTstMT09PWMuaW5kZXhP''@;'; put 'put ''ZihmKSYmYy5wdXNoKGYpfXJldHVybiAxPT09Yy5sZW5ndGh9ZnVuY3Rpb24gWnEoKXtmdW5jdGlvbiBjKCl7cmV0dXJuIE1hdGguZmxvb3IoNjU1MzYqKDErTWF0aC5yYW5kb20oKSkpLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMSl9cmV0dXJuIGMoKStjKCkrYygpK2MoKX1mdW5jdGlvbiB6''@;'; put 'put ''NGUoYyl7aWYoInN0cmluZyIhPXR5cGVvZiBjKXJldHVybiExO3RyeXtjb25zdCBsPUpTT04ucGFyc2UoYyk7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBsJiZudWxsIT09bH1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gV3EoYyl7cmV0dXJuL14oWzAtOV1bMC05XT8lJCl8KF4xMDAlJCkvLnRl''@;'; put 'put ''c3QoYyl9ZnVuY3Rpb24gJEgoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O3JldHVybmAke2N9YC5yZXBsYWNlKC8oPzpcXCk/XFsoW15bXF1dKyldL2csKGEsZCk9PiJcXCI9PT1hLmNoYXJBdCgwKT9hLnN1YnN0cigx''@;'; put 'put ''LGEubGVuZ3RoLTEpOnZvaWQgMD09PWxbZF0/IiI6bFtkXSl9ZnVuY3Rpb24gQzQoYyl7cmV0dXJuIEtIKGAke2N9YCx7QUxMT1dFRF9UQUdTOltdfSl9ZnVuY3Rpb24gS0goYyxsKXtyZXR1cm4gWG50LnNhbml0aXplKGMsbCl9Y29uc3QgJDM9Yz0+WyJ0YWJpbmRleCIsY10seDI9Yz0+WyJh''@;'; put 'put ''cmlhLWxhYmVsIixjXSxDcnQ9Yz0+WyJhcmlhLWxhYmVsbGVkYnkiLGNdLFNydD1jPT5bImFyaWEtZGVzY3JpYmVkYnkiLGNdLFg5PSgpPT5bImFyaWEtaGlkZGVuIiwidHJ1ZSJdLE9BPWZ1bmN0aW9uKCl7cmV0dXJuWyJhcmlhLWRpc2FibGVkIiwhKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9p''@;'; put 'put ''ZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdXX0sWTRlPWM9PlsiYXJpYS1oYXNwb3B1cCIsY10sRzRlPWM9PlsiYXJpYS1yb3djb3VudCIsY10sWEg9Yz0+WyJhcmlhLWNvbGNvdW50IixjXSwkNGU9Yz0+WyJhcmlhLXJvd2luZGV4IixjXSxZcT1jPT5bImFyaWEtY29saW5kZXgi''@;'; put 'put ''LGNdLEZmPWM9PlsiYXJpYS1leHBhbmRlZCIsY10scTRlPWM9PlsiYXJpYS1jaGVja2VkIixjXSxUcnQ9Yz0+WyJhcmlhLWNvbnRyb2xzIixjXSxrcnQ9Yz0+WyJhcmlhLWxpdmUiLGNdLERydD1jPT5bImFyaWEtcmVsZXZhbnQiLGNdLElydD1jPT5bImFyaWEtc2V0c2l6ZSIsY10sUnJ0PWM9''@;'; put 'put ''PlsiYXJpYS1wb3NpbnNldCIsY107ZnVuY3Rpb24gUHcoYyl7bGV0IGw7cmV0dXJuIEFycmF5LmlzQXJyYXkoYyk/bD1jLmxlbmd0aD9uZXcgQXJyYXkoYy5sZW5ndGgpLmZpbGwobnVsbCk6W106KGw9e30sYXMoYywoYSxkKT0+eyJfX2NoaWxkcmVuIiE9PWQmJihsW2RdPWEmJiJvYmplY3Qi''@;'; put 'put ''PT10eXBlb2YgYSYmIUFycmF5LmlzQXJyYXkoYSk/UHcoYSk6QXJyYXkuaXNBcnJheShhKT9hLmxlbmd0aCYmIm9iamVjdCI9PXR5cGVvZiBhWzBdJiYhQXJyYXkuaXNBcnJheShhWzBdKT9bUHcoYVswXSldOltdOm51bGwpfSkpLGx9ZnVuY3Rpb24gSjRlKGMsbCl7cmV0dXJuIGwucHJvdG90''@;'; put 'put ''eXBlLmNvbnN0cnVjdG9yPWwsYy5wcm90b3R5cGU9bmV3IGwsYy5wcm90b3R5cGUuY29uc3RydWN0b3I9YyxjfWZ1bmN0aW9uIFB1KGMsbCxhKXtjb25zdCBkPUFycmF5LmlzQXJyYXkoYSk7cmV0dXJuIGFzKGwsKGgsZik9PnsoITE9PT1kfHxhLmluY2x1ZGVzKGYpKSYmKGNbZl09aCl9KSxj''@;'; put 'put ''fWZ1bmN0aW9uIFBBKGMsbCl7YXMobCwoYSxkKT0+e2xbZF0mJiJvYmplY3QiPT10eXBlb2YgbFtkXT8oY1tkXXx8KGNbZF09QXJyYXkuaXNBcnJheShsW2RdKT9bXToiW29iamVjdCBEYXRlXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobFtkXSk/bFtkXTp7fSksUEEoY1tk''@;'; put 'put ''XSxsW2RdKSk6Y1tkXT1sW2RdfSl9ZnVuY3Rpb24gQjEoYyl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBjP0pTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYykpOmN9ZnVuY3Rpb24gSzMoYyl7Y29uc3QgbD17fTtyZXR1cm4gYXMoYywoYSxkKT0+e2xbZF09YX0pLGx9ZnVuY3Rpb24gcGwoYyl7''@;'; put 'put ''Yy5NSVhJTlN8fChjLk1JWElOUz1bXSk7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobD4xP2wtMTowKSxkPTE7ZDxsO2QrKylhW2QtMV09YXJndW1lbnRzW2RdO3JldHVybiBLbihhLGg9PntjLk1JWElOUy5wdXNoKGguTUlYSU5fTkFNRSksYXMoaCwoZix2KT0+e2lm''@;'; put 'put ''KHZvaWQgMCE9PWMucHJvdG90eXBlW3ZdKXRocm93IG5ldyBFcnJvcihgTWl4aW4gY29uZmxpY3QuIFByb3BlcnR5ICcke3Z9JyBhbHJlYWR5IGV4aXN0IGFuZCBjYW5ub3QgYmUgb3ZlcndyaXR0ZW4uYCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGYpYy5wcm90b3R5cGVbdl09ZjtlbHNle2Nv''@;'; put 'put ''bnN0IEQ9ZnVuY3Rpb24odGUpe2NvbnN0IG9lPWBfJHt0ZX1gO3JldHVybiBmdW5jdGlvbih2ZSl7dGhpc1tvZV09dmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYy5wcm90b3R5cGUsdix7Z2V0OmZ1bmN0aW9uKHRlLG9lKXtjb25zdCB2ZT1gXyR7dGV9YDtyZXR1cm4gZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gdm9pZCAwPT09dGhpc1t2ZV0mJih0aGlzW3ZlXT0oRmU9PntsZXQgV2U9RmU7cmV0dXJuKEFycmF5LmlzQXJyYXkoV2UpfHxtbyhXZSkpJiYoV2U9QjEoV2UpKSxXZX0pKG9lKSksdGhpc1t2ZV19fSh2LGYpLHNldDpEKHYpLGNvbmZpZ3VyYWJsZTohMH0pfX0pfSksY31mdW5jdGlv''@;'; put 'put ''biBGQShjLGwpe3JldHVybiBKU09OLnN0cmluZ2lmeShjKT09PUpTT04uc3RyaW5naWZ5KGwpfWZ1bmN0aW9uIG1vKGMpe3JldHVybiJbb2JqZWN0IE9iamVjdF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMpfWZ1bmN0aW9uIFM0KGMsbCxhLGQpe2QudmFsdWU9YSxkLndy''@;'; put 'put ''aXRhYmxlPSExIT09ZC53cml0YWJsZSxkLmVudW1lcmFibGU9ITEhPT1kLmVudW1lcmFibGUsZC5jb25maWd1cmFibGU9ITEhPT1kLmNvbmZpZ3VyYWJsZSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLGQpfWZ1bmN0aW9uIGFzKGMsbCl7Zm9yKGNvbnN0IGEgaW4gYylpZigoIWMuaGFzT3du''@;'; put 'put ''UHJvcGVydHl8fGMuaGFzT3duUHJvcGVydHkmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjLGEpKSYmITE9PT1sKGNbYV0sYSxjKSlicmVhaztyZXR1cm4gY31mdW5jdGlvbiBxSChjLGwpe2NvbnN0IGE9bC5zcGxpdCgiLiIpO2xldCBkPWM7cmV0dXJuIGFzKGEsaD0+''@;'; put 'put ''e2lmKGQ9ZFtoXSx2b2lkIDA9PT1kKXJldHVybiBkPXZvaWQgMCwhMX0pLGR9ZnVuY3Rpb24gSkgoYyxsLGEpe2lmKCJzdHJpbmciIT10eXBlb2YgbClyZXR1cm47Y29uc3QgZD1sLnNwbGl0KCIuIik7bGV0IGg9YztkLmZvckVhY2goKGYsdik9PnsiX19wcm90b19fIj09PWZ8fCJjb25zdHJ1''@;'; put 'put ''Y3RvciI9PT1mfHwicHJvdG90eXBlIj09PWZ8fCh2IT09ZC5sZW5ndGgtMT8obnUoaCxmKXx8KGhbZl09e30pLGg9aFtmXSk6aFtmXT1hKX0pfWZ1bmN0aW9uIFFIKGMpe2lmKCFtbyhjKSlyZXR1cm4gMDtjb25zdCBsPWZ1bmN0aW9uKGEpe2xldCBkPTA7cmV0dXJuIG1vKGEpP2FzKGEsKGgs''@;'; put 'put ''Zik9PnsiX19jaGlsZHJlbiIhPT1mJiYoZCs9bChoKSl9KTpkKz0xLGR9O3JldHVybiBsKGMpfWZ1bmN0aW9uIHZoKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToidmFsdWUiO2NvbnN0IGE9YF8ke2x9YCxkPXtfdG91Y2hl''@;'; put 'put ''ZDohMSxbYV06Yyxpc1RvdWNoZWQoKXtyZXR1cm4gdGhpcy5fdG91Y2hlZH19O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZCxsLHtnZXQoKXtyZXR1cm4gdGhpc1thXX0sc2V0KGgpe3RoaXMuX3RvdWNoZWQ9ITAsdGhpc1thXT1ofSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZToh''@;'; put 'put ''MH0pLGR9ZnVuY3Rpb24gbnUoYyxsKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsbCl9ZnVuY3Rpb24gSEEoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBsO2lmKCJvYmplY3QiIT10eXBlb2YgbHx8bnVsbD09PWwpcmV0''@;'; put 'put ''dXJuIGM7Y29uc3QgYT17fTtyZXR1cm4gT2JqZWN0LmtleXMobCkuZm9yRWFjaChkPT57YVtkXT0ib2JqZWN0IiE9dHlwZW9mIGxbZF18fG51bGw9PT1sW2RdfHxBcnJheS5pc0FycmF5KGxbZF0pP251KGMsZCkmJnZvaWQgMCE9PWNbZF0/Y1tkXTpsW2RdOkhBKGNbZF0sbFtkXSl9KSxPYmpl''@;'; put 'put ''Y3Qua2V5cyhjKS5mb3JFYWNoKGQ9PntudShhLGQpfHwoYVtkXT1jW2RdKX0pLGF9ZnVuY3Rpb24gTkEoYyl7cmV0dXJuIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYyl9ZnVuY3Rpb24gVkEoYyl7d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKGMpfWZ1bmN0aW9uICRxKCl7cmV0''@;'; put 'put ''dXJuIm9udG91Y2hzdGFydCJpbiB3aW5kb3d9ZnVuY3Rpb24gUTRlKCl7cmV0dXJuIHR5cGVvZiB3aW5kb3c8InUifWxldCBGdztmdW5jdGlvbiBlZ2UoYyl7cmV0dXJuIEZ3fHwoRnc9Im9iamVjdCI9PXR5cGVvZiBJbnRsP25ldyBJbnRsLkNvbGxhdG9yKGMsYXJndW1lbnRzLmxlbmd0aD4x''@;'; put 'put ''JiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9KS5jb21wYXJlOiJmdW5jdGlvbiI9PXR5cGVvZiBTdHJpbmcucHJvdG90eXBlLmxvY2FsZUNvbXBhcmU/KGEsZCk9PmAke2F9YC5sb2NhbGVDb21wYXJlKGQpOihhLGQpPT5hPT09ZD8wOmE+ZD8tMToxLEZ3KX1iKDk1NDkz''@;'; put 'put ''KTtjb25zdCBIZj1jPT57Y29uc3QgbD17dmFsdWU6ITEsdGVzdDooYSxkKT0+e2wudmFsdWU9YyhhLGQpfX07cmV0dXJuIGx9LHA1PXtjaHJvbWU6SGYoKGMsbCk9Pi9DaHJvbWUvLnRlc3QoYykmJi9Hb29nbGUvLnRlc3QobCkpLGNocm9tZVdlYktpdDpIZihjPT4vQ3JpT1MvLnRlc3QoYykp''@;'; put 'put ''LGVkZ2U6SGYoYz0+L0VkZ2UvLnRlc3QoYykpLGVkZ2VXZWJLaXQ6SGYoYz0+L0VkZ2lPUy8udGVzdChjKSksZmlyZWZveDpIZihjPT4vRmlyZWZveC8udGVzdChjKSksZmlyZWZveFdlYktpdDpIZihjPT4vRnhpT1MvLnRlc3QoYykpLG1vYmlsZTpIZihjPT4vQW5kcm9pZHx3ZWJPU3xpUGhv''@;'; put 'put ''bmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8SUVNb2JpbGV8T3BlcmEgTWluaS9pLnRlc3QoYykpLHNhZmFyaTpIZigoYyxsKT0+L1NhZmFyaS8udGVzdChjKSYmL0FwcGxlIENvbXB1dGVyLy50ZXN0KGwpKX0sSHc9e21hYzpIZihjPT4vXk1hYy8udGVzdChjKSksd2luOkhmKGM9Pi9eV2luLy50''@;'; put 'put ''ZXN0KGMpKSxsaW51eDpIZihjPT4vXkxpbnV4Ly50ZXN0KGMpKSxpb3M6SGYoYz0+L2lQaG9uZXxpUGFkfGlQb2QvaS50ZXN0KGMpKX07ZnVuY3Rpb24gdGdlKCl7bGV0e3VzZXJBZ2VudDpjPW5hdmlnYXRvci51c2VyQWdlbnQsdmVuZG9yOmw9bmF2aWdhdG9yLnZlbmRvcn09YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2FzKHA1LGE9PntsZXR7dGVzdDpkfT1hO2QoYyxsKX0pfWZ1bmN0aW9uIG5nZSgpe2xldHtwbGF0Zm9ybTpjPW5hdmlnYXRvci5wbGF0Zm9ybX09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1''@;'; put 'put ''bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2FzKEh3LGw9PntsZXR7dGVzdDphfT1sO2EoYyl9KX1mdW5jdGlvbiBLcSgpe3JldHVybiBwNS5jaHJvbWUudmFsdWV9ZnVuY3Rpb24gcmdlKCl7cmV0dXJuIHA1LmNocm9tZVdlYktpdC52YWx1ZX1mdW5jdGlvbiBlTigpe3JldHVybiBwNS5maXJl''@;'; put 'put ''Zm94LnZhbHVlfWZ1bmN0aW9uIGlnZSgpe3JldHVybiBwNS5maXJlZm94V2ViS2l0LnZhbHVlfWZ1bmN0aW9uIEJBKCl7cmV0dXJuIHA1LnNhZmFyaS52YWx1ZX1mdW5jdGlvbiBhZ2UoKXtyZXR1cm4gcDUuZWRnZS52YWx1ZX1mdW5jdGlvbiBPcnQoKXtyZXR1cm4gcDUuZWRnZVdlYktpdC52''@;'; put 'put ''YWx1ZX1mdW5jdGlvbiBYMygpe3JldHVybiBwNS5tb2JpbGUudmFsdWV9ZnVuY3Rpb24gWHEoKXtyZXR1cm4gSHcuaW9zLnZhbHVlfWZ1bmN0aW9uIHROKCl7bGV0e21heFRvdWNoUG9pbnRzOmN9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1sw''@;'; put 'put ''XTpuYXZpZ2F0b3I7cmV0dXJuIGM+MiYmSHcubWFjLnZhbHVlfWZ1bmN0aW9uIG5OKCl7cmV0dXJuIEh3Lndpbi52YWx1ZX1mdW5jdGlvbiByTigpe3JldHVybiBIdy5tYWMudmFsdWV9ZnVuY3Rpb24gUHJ0KCl7cmV0dXJuIEh3LmxpbnV4LnZhbHVlfWZ1bmN0aW9uIG9nZShjKXtsZXQgbD1h''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxhPS0xLGQ9bnVsbCxoPWM7Zm9yKDtudWxsIT09aDspe2lmKGE9PT1sKXtkPWg7YnJlYWt9aC5ob3N0JiZoLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFP2g9aC5ob3N0''@;'; put 'put ''OihhKz0xLGg9aC5wYXJlbnROb2RlKX1yZXR1cm4gZH1mdW5jdGlvbiBqQShjLGwpe2NvbnN0IGE9Yy5jbG9zZXN0KCIuaGFuZHNvbnRhYmxlIik7cmV0dXJuISFhJiYoYS5wYXJlbnROb2RlPT09bHx8YT09PWwpfWZ1bmN0aW9uIHNnZShjKXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9m''@;'; put 'put ''KGMucGFyZW50KSYmYy5mcmFtZUVsZW1lbnR9ZnVuY3Rpb24gZzUoYyl7cmV0dXJuIHNnZShjKSYmYy5wYXJlbnR9ZnVuY3Rpb24gRnJ0KGMpe3JldHVybiEhT2JqZWN0LmdldFByb3RvdHlwZU9mKGMucGFyZW50KX1mdW5jdGlvbiBNNihjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZv''@;'; put 'put ''aWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10sYT1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMDtjb25zdHtFTEVNRU5UX05PREU6ZCxET0NVTUVOVF9GUkFHTUVOVF9OT0RFOmh9PU5vZGU7bGV0IGY9Yztmb3IoO251bGwhPWYmJmYhPT1hOyl7Y29uc3R7''@;'; put 'put ''bm9kZVR5cGU6dixub2RlTmFtZTpNfT1mO2lmKHY9PT1kJiYobC5pbmNsdWRlcyhNKXx8bC5pbmNsdWRlcyhmKSkpcmV0dXJuIGY7Y29uc3R7aG9zdDpEfT1mO2Y9RCYmdj09PWg/RDpmLnBhcmVudE5vZGV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gekEoYyxsLGEpe2NvbnN0IGQ9W107bGV0IGg9''@;'; put 'put ''Yztmb3IoO2gmJihoPU02KGgsbCxhKSxoJiYoIWF8fGEuY29udGFpbnMoaCkpKTspZC5wdXNoKGgpLGg9aC5ob3N0JiZoLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFP2guaG9zdDpoLnBhcmVudE5vZGU7Y29uc3QgZj1kLmxlbmd0aDtyZXR1cm4gZj9kW2YtMV06bnVs''@;'; put 'put ''bH1mdW5jdGlvbiBsZ2UoYyxsKXtjb25zdCBhPXtlbGVtZW50OnZvaWQgMCxjbGFzc05hbWVzOltdfTtsZXQgZD1jO2Zvcig7bnVsbCE9PWQmJmQhPT1jLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiYhYS5lbGVtZW50Oyl7aWYoInN0cmluZyI9PXR5cGVvZiBsJiZkLmNsYXNzTGlz''@;'; put 'put ''dC5jb250YWlucyhsKSlhLmVsZW1lbnQ9ZCxhLmNsYXNzTmFtZXMucHVzaChsKTtlbHNlIGlmKGwgaW5zdGFuY2VvZiBSZWdFeHApe2NvbnN0IGg9QXJyYXkuZnJvbShkLmNsYXNzTGlzdCkuZmlsdGVyKGY9PmwudGVzdChmKSk7aC5sZW5ndGgmJihhLmVsZW1lbnQ9ZCxhLmNsYXNzTmFtZXMu''@;'; put 'put ''cHVzaCguLi5oKSl9ZD1kLnBhcmVudEVsZW1lbnR9cmV0dXJuIGF9ZnVuY3Rpb24geDYoYyxsKXtsZXQgYT1jLnBhcmVudE5vZGUsZD1bXTtmb3IoInN0cmluZyI9PXR5cGVvZiBsP2Q9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYy5kZWZhdWx0Vmlldz9jLnF1ZXJ5U2VsZWN0b3JBbGwo''@;'; put 'put ''bCk6Yy5vd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwobCksMCk6ZC5wdXNoKGwpO251bGwhPT1hOyl7aWYoZC5pbmRleE9mKGEpPi0xKXJldHVybiEwO2E9YS5wYXJlbnROb2RlfXJldHVybiExfWZ1bmN0aW9uIGNnZShjKXtsZXQgbD0wLGE9YztpZihhLnByZXZpb3VzU2libGluZylm''@;'; put 'put ''b3IoO2E9YS5wcmV2aW91c1NpYmxpbmc7KWwrPTE7cmV0dXJuIGx9ZnVuY3Rpb24gRTYoYyxsLGEpe2NvbnN0IGQ9YS5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYC5odF9jbG9uZV8ke2N9YCk7cmV0dXJuIGQ/ZC5jb250YWlucyhsKTpudWxsfWZ1bmN0aW9uIHVnZShjKXtyZXR1cm4g''@;'; put 'put ''YyYmYy5sZW5ndGg/Yy5maWx0ZXIobD0+ISFsKTpbXX1mdW5jdGlvbiBkZ2UoYyxsKXtpZighY3x8IWMubGVuZ3RoKXJldHVybiBsP3tyZWdleEZyZWU6W10scmVnZXhlczpbXX06W107Y29uc3QgYT1bXSxkPVtdO3JldHVybiBkLnB1c2goLi4uYy5maWx0ZXIoaD0+e2NvbnN0IGY9aCBpbnN0''@;'; put 'put ''YW5jZW9mIFJlZ0V4cDtyZXR1cm4gZiYmbCYmYS5wdXNoKGgpLCFmfSkpLGw/e3JlZ2V4RnJlZTpkLHJlZ2V4ZXM6YX06ZH1mdW5jdGlvbiBDbyhjLGwpe3JldHVybiB2b2lkIDAhPT1jLmNsYXNzTGlzdCYmInN0cmluZyI9PXR5cGVvZiBsJiYiIiE9PWwmJmMuY2xhc3NMaXN0LmNvbnRhaW5z''@;'; put 'put ''KGwpfWZ1bmN0aW9uIGlpKGMsbCl7InN0cmluZyI9PXR5cGVvZiBsJiYobD1sLnNwbGl0KCIgIikpLChsPXVnZShsKSkubGVuZ3RoPjAmJmMuY2xhc3NMaXN0LmFkZCguLi5sKX1mdW5jdGlvbiBWYShjLGwpeyJzdHJpbmciPT10eXBlb2YgbD9sPWwuc3BsaXQoIiAiKTpsIGluc3RhbmNlb2Yg''@;'; put 'put ''UmVnRXhwJiYobD1bbF0pO2xldHtyZWdleEZyZWU6YSxyZWdleGVzOmR9PWRnZShsLCEwKTthPXVnZShhKSxhLmxlbmd0aD4wJiZjLmNsYXNzTGlzdC5yZW1vdmUoLi4uYSksZC5mb3JFYWNoKGg9PntjLmNsYXNzTGlzdC5mb3JFYWNoKGY9PntoLnRlc3QoZikmJmMuY2xhc3NMaXN0LnJlbW92''@;'; put 'put ''ZShmKX0pfSl9ZnVuY3Rpb24gWmEoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdLGE9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7QXJyYXkuaXNBcnJheShsKXx8KGw9W1tsLGFdXSksbC5mb3JF''@;'; put 'put ''YWNoKGQ9PntBcnJheS5pc0FycmF5KGQpJiYiIiE9PWRbMF0mJmMuc2V0QXR0cmlidXRlKC4uLmQpfSl9ZnVuY3Rpb24gTTQoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdOyJzdHJpbmciPT10eXBlb2YgbD9sPWwuc3Bs''@;'; put 'put ''aXQoIiAiKTpsIGluc3RhbmNlb2YgUmVnRXhwJiYobD1bbF0pO2NvbnN0e3JlZ2V4RnJlZTphLHJlZ2V4ZXM6ZH09ZGdlKGwsITApO2EuZm9yRWFjaChoPT57IiIhPT1oJiZjLnJlbW92ZUF0dHJpYnV0ZShoKX0pLGQuZm9yRWFjaChoPT57Yy5nZXRBdHRyaWJ1dGVOYW1lcygpLmZvckVhY2go''@;'; put 'put ''Zj0+e2gudGVzdChmKSYmYy5yZW1vdmVBdHRyaWJ1dGUoZil9KX0pfWZ1bmN0aW9uIHFxKGMpe2lmKDM9PT1jLm5vZGVUeXBlKWMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjKTtlbHNlIGlmKFsiVEFCTEUiLCJUSEVBRCIsIlRCT0RZIiwiVEZPT1QiLCJUUiJdLmluZGV4T2YoYy5ub2RlTmFt''@;'; put 'put ''ZSk+LTEpe2NvbnN0IGw9Yy5jaGlsZE5vZGVzO2ZvcihsZXQgYT1sLmxlbmd0aC0xO2E+PTA7YS0tKXFxKGxbYV0pfX1mdW5jdGlvbiB4NChjKXtsZXQgbDtmb3IoO2w9Yy5sYXN0Q2hpbGQ7KWMucmVtb3ZlQ2hpbGQobCl9UTRlKCkmJih0Z2UoKSxuZ2UoKSk7Y29uc3QgaGdlPS8oPCguKik+''@;'; put 'put ''fCYoLiopOykvO2Z1bmN0aW9uIFQ2KGMsbCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtoZ2UudGVzdChsKT9jLmlubmVySFRNTD1hP0tIKGwpOmw6QTYoYyxsKX1mdW5jdGlvbiBBNihjLGwpe2NvbnN0IGE9Yy5maXJz''@;'; put 'put ''dENoaWxkO2EmJjM9PT1hLm5vZGVUeXBlJiZudWxsPT09YS5uZXh0U2libGluZz9hLnRleHRDb250ZW50PWw6KHg0KGMpLGMuYXBwZW5kQ2hpbGQoYy5vd25lckRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGwpKSl9ZnVuY3Rpb24gazYoYyl7Y29uc3QgbD1jLm93bmVyRG9jdW1lbnQuZG9jdW1l''@;'; put 'put ''bnRFbGVtZW50LGE9Yy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O2xldCBkPWM7Zm9yKDtkIT09bDspe2lmKG51bGw9PT1kKXJldHVybiExO2lmKGQubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpe2lmKGQuaG9zdCl7aWYoZC5ob3N0LmltcGwpcmV0dXJuIGs2KGQu''@;'; put 'put ''aG9zdC5pbXBsKTtpZihkLmhvc3QpcmV0dXJuIGs2KGQuaG9zdCk7dGhyb3cgbmV3IEVycm9yKCJMb3N0IGluIFdlYiBDb21wb25lbnRzIHdvcmxkIil9cmV0dXJuITF9aWYoIm5vbmUiPT09YS5nZXRDb21wdXRlZFN0eWxlKGQpLmRpc3BsYXkpcmV0dXJuITE7ZD1kLnBhcmVudE5vZGV9cmV0''@;'; put 'put ''dXJuITB9ZnVuY3Rpb24gZmdlKGMpe2NvbnN0IGE9Yy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O2xldCBkPWM7Zm9yKDtkLnBhcmVudE5vZGU7KXtpZigiMHB4Ij09PWQuc3R5bGUuaGVpZ2h0fHwiMCI9PT1kLnN0eWxlLmhlaWdodClyZXR1cm4iaGlkZGVuIj09PWEuZ2V0Q29tcHV0ZWRT''@;'; put 'put ''dHlsZShkKS5vdmVyZmxvdztkPWQucGFyZW50Tm9kZX1yZXR1cm4hMX1mdW5jdGlvbiBkMShjKXtjb25zdCBsPWMub3duZXJEb2N1bWVudCxhPWwuZGVmYXVsdFZpZXcsZD1sLmRvY3VtZW50RWxlbWVudDtsZXQgZix2LE0saD1jO2ZvcihmPWgub2Zmc2V0TGVmdCx2PWgub2Zmc2V0VG9wLE09''@;'; put 'put ''aDsoaD1oLm9mZnNldFBhcmVudCkmJmghPT1sLmJvZHkmJiJvZmZzZXRMZWZ0ImluIGg7KWYrPWgub2Zmc2V0TGVmdCx2Kz1oLm9mZnNldFRvcCxNPWg7cmV0dXJuIE0mJiJmaXhlZCI9PT1NLnN0eWxlLnBvc2l0aW9uJiYoZis9YS5wYWdlWE9mZnNldHx8ZC5zY3JvbGxMZWZ0LHYrPWEucGFn''@;'; put 'put ''ZVlPZmZzZXR8fGQuc2Nyb2xsVG9wKSx7bGVmdDpmLHRvcDp2fX1mdW5jdGlvbiBKcSgpe3JldHVybihhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93KS5zY3JvbGxZfWZ1bmN0aW9uIGlOKCl7cmV0dXJuKGFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp3aW5kb3cpLnNjcm9sbFh9ZnVuY3Rpb24gYU4oYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOndpbmRvdztyZXR1cm4gYz09PWw/SnEobCk6Yy5zY3Jv''@;'; put 'put ''bGxUb3B9ZnVuY3Rpb24gUXEoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOndpbmRvdztyZXR1cm4gYz09PWw/aU4obCk6Yy5zY3JvbGxMZWZ0fWZ1bmN0aW9uIFVBKGMpe2xldCBsPWMub3duZXJEb2N1bWVudCxhPWw/bC5k''@;'; put 'put ''ZWZhdWx0Vmlldzp2b2lkIDA7bHx8KGw9Yy5kb2N1bWVudD9jLmRvY3VtZW50OmMsYT1sLmRlZmF1bHRWaWV3KTtjb25zdCBkPVsiYXV0byIsInNjcm9sbCJdO2xldCBoPWMucGFyZW50Tm9kZTtmb3IoO2gmJmguc3R5bGUmJmwuYm9keSE9PWg7KXtsZXR7b3ZlcmZsb3c6ZixvdmVyZmxvd1g6''@;'; put 'put ''dixvdmVyZmxvd1k6TX09aC5zdHlsZTtpZihbZix2LE1dLmluY2x1ZGVzKCJzY3JvbGwiKSlyZXR1cm4gaDtpZigoe292ZXJmbG93OmYsb3ZlcmZsb3dYOnYsb3ZlcmZsb3dZOk19PWEuZ2V0Q29tcHV0ZWRTdHlsZShoKSksZC5pbmNsdWRlcyhmKXx8ZC5pbmNsdWRlcyh2KXx8ZC5pbmNsdWRl''@;'; put 'put ''cyhNKXx8aC5jbGllbnRIZWlnaHQ8PWguc2Nyb2xsSGVpZ2h0KzEmJihkLmluY2x1ZGVzKE0pfHxkLmluY2x1ZGVzKGYpKXx8aC5jbGllbnRXaWR0aDw9aC5zY3JvbGxXaWR0aCsxJiYoZC5pbmNsdWRlcyh2KXx8ZC5pbmNsdWRlcyhmKSkpcmV0dXJuIGg7aD1oLnBhcmVudE5vZGV9cmV0dXJu''@;'; put 'put ''IGF9ZnVuY3Rpb24gcGdlKGMpe3JldHVybiBjLnNjcm9sbEhlaWdodC1jLmNsaWVudEhlaWdodH1mdW5jdGlvbiBnZ2UoYyl7cmV0dXJuIGMuc2Nyb2xsV2lkdGgtYy5jbGllbnRXaWR0aH1mdW5jdGlvbiBOdyhjKXtjb25zdCBsPWMub3duZXJEb2N1bWVudCxhPWwuZGVmYXVsdFZpZXc7bGV0''@;'; put 'put ''IGQ9Yy5wYXJlbnROb2RlO2Zvcig7ZCYmZC5zdHlsZSYmbC5ib2R5IT09ZDspe2lmKCJ2aXNpYmxlIiE9PWQuc3R5bGUub3ZlcmZsb3cmJiIiIT09ZC5zdHlsZS5vdmVyZmxvdylyZXR1cm4gZDtjb25zdCBoPWEuZ2V0Q29tcHV0ZWRTdHlsZShkKSxmPVsic2Nyb2xsIiwiaGlkZGVuIiwiYXV0''@;'; put 'put ''byJdLHY9aC5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdyIpLE09aC5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdy15IiksRD1oLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93LXgiKTtpZihmLmluY2x1ZGVzKHYpfHxmLmluY2x1ZGVzKE0pfHxmLmluY2x1ZGVzKEQpKXJldHVybiBkO2Q9''@;'; put 'put ''ZC5wYXJlbnROb2RlfXJldHVybiBhfWZ1bmN0aW9uIFpBKGMsbCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOndpbmRvdztpZighYylyZXR1cm47aWYoYz09PWEpcmV0dXJuIndpZHRoIj09PWw/YCR7YS5pbm5lcldpZHRofXB4''@;'; put 'put ''YDoiaGVpZ2h0Ij09PWw/YCR7YS5pbm5lckhlaWdodH1weGA6dm9pZCAwO2NvbnN0IGQ9Yy5zdHlsZVtsXTtpZigiIiE9PWQmJnZvaWQgMCE9PWQpcmV0dXJuIGQ7Y29uc3QgaD1hLmdldENvbXB1dGVkU3R5bGUoYyk7cmV0dXJuIiIhPT1oW2xdJiZ2b2lkIDAhPT1oW2xdP2hbbF06dm9pZCAw''@;'; put 'put ''fWZ1bmN0aW9uIEhydChjLGwpe2NvbnN0e3NlbGVjdG9yVGV4dDphfT1sO2xldCBkPSExO3JldHVybiBsLnR5cGU9PT1DU1NSdWxlLlNUWUxFX1JVTEUmJmEmJihjLm1zTWF0Y2hlc1NlbGVjdG9yP2Q9Yy5tc01hdGNoZXNTZWxlY3RvcihhKTpjLm1hdGNoZXMmJihkPWMubWF0Y2hlcyhhKSkp''@;'; put 'put ''LGR9ZnVuY3Rpb24gX3UoYyl7cmV0dXJuIGMub2Zmc2V0V2lkdGh9ZnVuY3Rpb24gRnUoYyl7cmV0dXJuIGMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0fWZ1bmN0aW9uIFZ3KGMpe3JldHVybiBjLmNsaWVudEhlaWdodHx8Yy5pbm5lckhlaWdodH1mdW5jdGlvbiBlSihjKXtyZXR1''@;'; put 'put ''cm4gYy5jbGllbnRXaWR0aHx8Yy5pbm5lcldpZHRofWZ1bmN0aW9uIE5ydChjLGwsYSl7Yy5hZGRFdmVudExpc3RlbmVyKGwsYSwhMSl9ZnVuY3Rpb24gVnJ0KGMsbCxhKXtjLnJlbW92ZUV2ZW50TGlzdGVuZXIobCxhLCExKX1mdW5jdGlvbiB0SihjKXtyZXR1cm4gYy5zZWxlY3Rpb25TdGFy''@;'; put 'put ''dD9jLnNlbGVjdGlvblN0YXJ0OjB9ZnVuY3Rpb24gbWdlKGMpe3JldHVybiBjLnNlbGVjdGlvbkVuZD9jLnNlbGVjdGlvbkVuZDowfWZ1bmN0aW9uIEJydCgpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp3aW5kb3c7Y29uc3Qg''@;'; put 'put ''bD1jLmRvY3VtZW50O2xldCBhPSIiO3JldHVybiBjLmdldFNlbGVjdGlvbj9hPWMuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKTpsLnNlbGVjdGlvbiYmIkNvbnRyb2wiIT09bC5zZWxlY3Rpb24udHlwZSYmKGE9bC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKS50ZXh0KSxhfWZ1bmN0aW9uIG5K''@;'; put 'put ''KCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOndpbmRvdztjLmdldFNlbGVjdGlvbiYmKGMuZ2V0U2VsZWN0aW9uKCkuZW1wdHk/Yy5nZXRTZWxlY3Rpb24oKS5lbXB0eSgpOmMuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFu''@;'; put 'put ''Z2VzJiZjLmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpKX1mdW5jdGlvbiBXQShjLGwsYSl7aWYodm9pZCAwPT09YSYmKGE9bCksYy5zZXRTZWxlY3Rpb25SYW5nZSl7Yy5mb2N1cygpO3RyeXtjLnNldFNlbGVjdGlvblJhbmdlKGwsYSl9Y2F0Y2h7Y29uc3QgaD1jLnBhcmVudE5v''@;'; put 'put ''ZGUsZj1oLnN0eWxlLmRpc3BsYXk7aC5zdHlsZS5kaXNwbGF5PSJibG9jayIsYy5zZXRTZWxlY3Rpb25SYW5nZShsLGEpLGguc3R5bGUuZGlzcGxheT1mfX19bGV0IHJKO2Z1bmN0aW9uIHZnZSgpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3Vt''@;'; put 'put ''ZW50c1swXTpkb2N1bWVudDtyZXR1cm4gbk4oKT9OdW1iZXIuaXNJbnRlZ2VyKGMuZGVmYXVsdFZpZXcuZGV2aWNlUGl4ZWxSYXRpb3x8MSk/MDoyOjB9ZnVuY3Rpb24gd3UoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ZG9j''@;'; put 'put ''dW1lbnQ7cmV0dXJuIHZvaWQgMD09PXJKJiYocko9ZnVuY3Rpb24ganJ0KCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOmRvY3VtZW50O2NvbnN0IGw9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKTtsLnN0eWxlLmhlaWdodD0iMjAw''@;'; put 'put ''cHgiLGwuc3R5bGUud2lkdGg9IjEwMCUiO2NvbnN0IGE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKTtCQSgpJiYhWDMoKSYmIXROKCkmJmEuY2xhc3NMaXN0LmFkZCgiaHRTY3JvbGxiYXJTYWZhcmlUZXN0IiksYS5zdHlsZS5ib3hTaXppbmc9ImNvbnRlbnQtYm94IixhLnN0eWxlLmhlaWdodD0i''@;'; put 'put ''MTUwcHgiLGEuc3R5bGUubGVmdD0iMHB4IixhLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iLGEuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixhLnN0eWxlLnRvcD0iMHB4IixhLnN0eWxlLndpZHRoPSIyMDBweCIsYS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iLGEuYXBwZW5kQ2hpbGQobCks''@;'; put 'put ''KGMuYm9keXx8Yy5kb2N1bWVudEVsZW1lbnQpLmFwcGVuZENoaWxkKGEpO2NvbnN0IGQ9bC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDthLnN0eWxlLm92ZXJmbG93PSJzY3JvbGwiO2xldCBoPWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7cmV0dXJuIGQ9PT1oJiYoaD1h''@;'; put 'put ''LmNsaWVudFdpZHRoKSwoYy5ib2R5fHxjLmRvY3VtZW50RWxlbWVudCkucmVtb3ZlQ2hpbGQoYSkscGFyc2VGbG9hdCgoZC1oKS50b0ZpeGVkKDMpKX0oYykpLHJKfWZ1bmN0aW9uIGlKKGMpe3JldHVybiBjIGluc3RhbmNlb2YgV2luZG93P2MuZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQ+''@;'; put 'put ''Yy5pbm5lckhlaWdodDpjLm9mZnNldFdpZHRoIT09Yy5jbGllbnRXaWR0aH1mdW5jdGlvbiBhSihjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIFdpbmRvdz9jLmRvY3VtZW50LmJvZHkuc2Nyb2xsV2lkdGg+Yy5pbm5lcldpZHRoOmMub2Zmc2V0SGVpZ2h0IT09Yy5jbGllbnRIZWlnaHR9ZnVuY3Rp''@;'; put 'put ''b24gb04oYyxsLGEpe2Muc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGUzZCgke2x9LCR7YX0sMClgfWZ1bmN0aW9uIHpydChjKXtsZXQgbDtyZXR1cm4gYy5zdHlsZS50cmFuc2Zvcm0mJiIiIT09KGw9Yy5zdHlsZS50cmFuc2Zvcm0pP1sidHJhbnNmb3JtIixsXTotMX1mdW5jdGlvbiBZQShj''@;'; put 'put ''KXtjLnN0eWxlLnRyYW5zZm9ybSYmIiIhPT1jLnN0eWxlLnRyYW5zZm9ybSYmKGMuc3R5bGUudHJhbnNmb3JtPSIiKX1mdW5jdGlvbiBHQShjKXtyZXR1cm4gYyYmKFsiSU5QVVQiLCJTRUxFQ1QiLCJURVhUQVJFQSJdLmluZGV4T2YoYy5ub2RlTmFtZSk+LTF8fCJ0cnVlIj09PWMuY29udGVu''@;'; put 'put ''dEVkaXRhYmxlKX1mdW5jdGlvbiBzTihjKXtyZXR1cm4gR0EoYykmJiExPT09Yy5oYXNBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0Iil9ZnVuY3Rpb24gVXJ0KGMpe3NOKGMub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50KXx8Yy5zZWxlY3QoKX1mdW5jdGlvbiBvSihjKXtyZXR1cm4hYy5w''@;'; put 'put ''YXJlbnROb2RlfWZ1bmN0aW9uIHlnZShjLGwpe25ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZCxoKT0+e2QuZm9yRWFjaChmPT57Zi5pc0ludGVyc2VjdGluZyYmbnVsbCE9PWMub2Zmc2V0UGFyZW50JiYobCgpLGgudW5vYnNlcnZlKGMpKX0pfSx7cm9vdDpjLm93bmVyRG9jdW1lbnQuYm9k''@;'; put 'put ''eX0pLm9ic2VydmUoYyl9ZnVuY3Rpb24gc0ooYyl7bGV0IGw9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxhPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07Y29uc3QgZD1j''@;'; put 'put ''Lm93bmVyRG9jdW1lbnQsaD1kLmNyZWF0ZVJhbmdlKCksZj1kLmRlZmF1bHRWaWV3LmdldFNlbGVjdGlvbigpO1phKGMsImNvbnRlbnRlZGl0YWJsZSIsITApLGEmJlphKGMsLi4uWDkoKSksbCYmaWkoYywiaW52aXNpYmxlU2VsZWN0aW9uIiksaC5zZWxlY3ROb2RlQ29udGVudHMoYyksZi5y''@;'; put 'put ''ZW1vdmVBbGxSYW5nZXMoKSxmLmFkZFJhbmdlKGgpfWZ1bmN0aW9uIGxKKGMpe2xldCBsPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV07Y29uc3QgYT1jLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0U2VsZWN0aW9uKCk7Yy5o''@;'; put 'put ''YXNBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIikmJmMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpLGEucmVtb3ZlQWxsUmFuZ2VzKCksbCYmVmEoYywiaW52aXNpYmxlU2VsZWN0aW9uIiksYy5yZW1vdmVBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpfWZ1bmN0aW9uIGJnZShjLGwp''@;'; put 'put ''e2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07c0ooYyxhKSxsKCksbEooYyxhKX1mdW5jdGlvbiBFNChjKXt2YXIgbDtjb25zdCBhPW51bGw9PWN8fG51bGw9PT0obD1jLm93bmVyRG9jdW1lbnQpfHx2b2lkIDA9PT1sP3Zv''@;'; put 'put ''aWQgMDpsLmRlZmF1bHRWaWV3LkVsZW1lbnQ7cmV0dXJuISEoYSYmbnVsbCE9PWEmJmMgaW5zdGFuY2VvZiBhKX1mdW5jdGlvbiBpbChjKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgY31mdW5jdGlvbiBfZ2UoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVu''@;'; put 'put ''dHNbMV0/YXJndW1lbnRzWzFdOjIwMCxhPTA7Y29uc3QgZD17bGFzdENhbGxUaHJvdHRsZWQ6ITB9O2xldCBoPW51bGw7cmV0dXJuIGZ1bmN0aW9uIGYoKXtmb3IodmFyIHY9YXJndW1lbnRzLmxlbmd0aCxNPW5ldyBBcnJheSh2KSxEPTA7RDx2O0QrKylNW0RdPWFyZ3VtZW50c1tEXTtjb25z''@;'; put 'put ''dCBVPURhdGUubm93KCk7bGV0IHRlPSExO2QubGFzdENhbGxUaHJvdHRsZWQ9ITAsYXx8KGE9VSx0ZT0hMCk7Y29uc3Qgb2U9bC0oVS1hKTtyZXR1cm4gdGU/KGQubGFzdENhbGxUaHJvdHRsZWQ9ITEsYy5hcHBseSh0aGlzLE0pKTooaCYmY2xlYXJUaW1lb3V0KGgpLGg9c2V0VGltZW91dCgo''@;'; put 'put ''KT0+e2QubGFzdENhbGxUaHJvdHRsZWQ9ITEsYy5hcHBseSh0aGlzLE0pLGE9MCxoPXZvaWQgMH0sb2UpKSxkfX1mdW5jdGlvbiBacnQoYyl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjEwO2NvbnN0IGQ9X2dlKGMsYXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjIwMCk7bGV0IGg9YTtmdW5jdGlvbiB2KCl7Zm9yKHZhciBNPWFyZ3VtZW50cy5sZW5ndGgsRD1uZXcgQXJyYXkoTSksVT0wO1U8TTtVKyspRFtVXT1hcmd1bWVudHNbVV07cmV0dXJuIGg/KGgtPTEsYy5h''@;'; put 'put ''cHBseSh0aGlzLEQpKTpkLmFwcGx5KHRoaXMsRCl9cmV0dXJuIHYuY2xlYXJIaXRzPWZ1bmN0aW9uIGYoKXtoPWF9LHZ9ZnVuY3Rpb24gJEEoYyl7bGV0IGQsbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MjAwLGE9bnVsbDtyZXR1cm4g''@;'; put 'put ''ZnVuY3Rpb24gaCgpe2Zvcih2YXIgZj1hcmd1bWVudHMubGVuZ3RoLHY9bmV3IEFycmF5KGYpLE09MDtNPGY7TSsrKXZbTV09YXJndW1lbnRzW01dO3JldHVybiBhJiZjbGVhclRpbWVvdXQoYSksYT1zZXRUaW1lb3V0KCgpPT57ZD1jLmFwcGx5KHRoaXMsdil9LGwpLGR9fWZ1bmN0aW9uIFdy''@;'; put 'put ''dCgpe2Zvcih2YXIgYz1hcmd1bWVudHMubGVuZ3RoLGw9bmV3IEFycmF5KGMpLGE9MDthPGM7YSsrKWxbYV09YXJndW1lbnRzW2FdO2NvbnN0W2QsLi4uaF09bDtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHY9YXJndW1lbnRzLmxlbmd0aCxNPW5ldyBBcnJheSh2KSxEPTA7RDx2O0QrKylN''@;'; put 'put ''W0RdPWFyZ3VtZW50c1tEXTtyZXR1cm4gYTAoaCwoVSx0ZSk9PnRlKFUpLGQuYXBwbHkodGhpcyxNKSl9fWZ1bmN0aW9uIGNKKGMpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGw+MT9sLTE6MCksZD0xO2Q8bDtkKyspYVtkLTFdPWFyZ3VtZW50c1tkXTtyZXR1cm4g''@;'; put 'put ''ZnVuY3Rpb24oKXtmb3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCx2PW5ldyBBcnJheShmKSxNPTA7TTxmO00rKyl2W01dPWFyZ3VtZW50c1tNXTtyZXR1cm4gYy5hcHBseSh0aGlzLGEuY29uY2F0KHYpKX19ZnVuY3Rpb24gd2dlKGMpe2NvbnN0IGw9Yy5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''IGEoZCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBmPWFyZ3VtZW50cy5sZW5ndGgsdj1uZXcgQXJyYXkoZiksTT0wO008ZjtNKyspdltNXT1hcmd1bWVudHNbTV07Y29uc3QgRD1kLmNvbmNhdCh2KTtsZXQgVTtyZXR1cm4gVT1ELmxlbmd0aD49bD9jLmFwcGx5KHRoaXMsRCk6YShEKSxV''@;'; put 'put ''fX0oW10pfWZ1bmN0aW9uIFlydChjKXtjb25zdCBsPWMubGVuZ3RoO3JldHVybiBmdW5jdGlvbiBhKGQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZj1hcmd1bWVudHMubGVuZ3RoLHY9bmV3IEFycmF5KGYpLE09MDtNPGY7TSsrKXZbTV09YXJndW1lbnRzW01dO2NvbnN0IEQ9ZC5jb25j''@;'; put 'put ''YXQodi5yZXZlcnNlKCkpO2xldCBVO3JldHVybiBVPUQubGVuZ3RoPj1sP2MuYXBwbHkodGhpcyxEKTphKEQpLFV9fShbXSl9ZnVuY3Rpb24gbE4oYyxsLGEsZCxoLGYsdixNKXtyZXR1cm4gTWEoTSk/Yy5jYWxsKGwsYSxkLGgsZix2LE0pOk1hKHYpP2MuY2FsbChsLGEsZCxoLGYsdik6TWEo''@;'; put 'put ''Zik/Yy5jYWxsKGwsYSxkLGgsZik6TWEoaCk/Yy5jYWxsKGwsYSxkLGgpOk1hKGQpP2MuY2FsbChsLGEsZCk6TWEoYSk/Yy5jYWxsKGwsYSk6Yy5jYWxsKGwpfWNvbnN0IHJvPXtBTFQ6MTgsQVJST1dfRE9XTjo0MCxBUlJPV19MRUZUOjM3LEFSUk9XX1JJR0hUOjM5LEFSUk9XX1VQOjM4LEFV''@;'; put 'put ''RElPX0RPV046ZU4oKT8xODI6MTc0LEFVRElPX01VVEU6ZU4oKT8xODE6MTczLEFVRElPX1VQOmVOKCk/MTgzOjE3NSxCQUNLU1BBQ0U6OCxDQVBTX0xPQ0s6MjAsQ09NTUE6MTg4LENPTU1BTkRfTEVGVDo5MSxDT01NQU5EX1JJR0hUOjkzLENPTU1BTkRfRklSRUZPWDoyMjQsQ09OVFJPTDox''@;'; put 'put ''NyxERUxFVEU6NDYsRU5EOjM1LEVOVEVSOjEzLEVTQ0FQRToyNyxGMToxMTIsRjI6MTEzLEYzOjExNCxGNDoxMTUsRjU6MTE2LEY2OjExNyxGNzoxMTgsRjg6MTE5LEY5OjEyMCxGMTA6MTIxLEYxMToxMjIsRjEyOjEyMyxGMTM6MTI0LEYxNDoxMjUsRjE1OjEyNixGMTY6MTI3LEYxNzoxMjgs''@;'; put 'put ''RjE4OjEyOSxGMTk6MTMwLEhPTUU6MzYsSU5TRVJUOjQ1LE1FRElBX05FWFQ6MTc2LE1FRElBX1BMQVlfUEFVU0U6MTc5LE1FRElBX1BSRVY6MTc3LE1FRElBX1NUT1A6MTc4LE5VTEw6MCxOVU1fTE9DSzoxNDQsUEFHRV9ET1dOOjM0LFBBR0VfVVA6MzMsUEFVU0U6MTksUEVSSU9EOjE5MCxT''@;'; put 'put ''Q1JPTExfTE9DSzoxNDUsU0hJRlQ6MTYsU1BBQ0U6MzIsVEFCOjksQTo2NSxDOjY3LEQ6NjgsRjo3MCxMOjc2LE86NzksUDo4MCxTOjgzLFY6ODYsWDo4OCxZOjg5LFo6OTB9LEdydD1bcm8uQUxULHJvLkFSUk9XX0RPV04scm8uQVJST1dfTEVGVCxyby5BUlJPV19SSUdIVCxyby5BUlJPV19V''@;'; put 'put ''UCxyby5BVURJT19ET1dOLHJvLkFVRElPX01VVEUscm8uQVVESU9fVVAscm8uQkFDS1NQQUNFLHJvLkNBUFNfTE9DSyxyby5ERUxFVEUscm8uRU5ELHJvLkVOVEVSLHJvLkVTQ0FQRSxyby5GMSxyby5GMixyby5GMyxyby5GNCxyby5GNSxyby5GNixyby5GNyxyby5GOCxyby5GOSxyby5GMTAs''@;'; put 'put ''cm8uRjExLHJvLkYxMixyby5GMTMscm8uRjE0LHJvLkYxNSxyby5GMTYscm8uRjE3LHJvLkYxOCxyby5GMTkscm8uSE9NRSxyby5JTlNFUlQscm8uTUVESUFfTkVYVCxyby5NRURJQV9QTEFZX1BBVVNFLHJvLk1FRElBX1BSRVYscm8uTUVESUFfU1RPUCxyby5OVUxMLHJvLk5VTV9MT0NLLHJv''@;'; put 'put ''LlBBR0VfRE9XTixyby5QQUdFX1VQLHJvLlBBVVNFLHJvLlNDUk9MTF9MT0NLLHJvLlNISUZULHJvLlRBQl07ZnVuY3Rpb24gQ2dlKGMpe3JldHVybiAzMj09PWN8fGM+PTQ4JiZjPD01N3x8Yz49OTYmJmM8PTExMXx8Yz49MTg2JiZjPD0xOTJ8fGM+PTIxOSYmYzw9MjIyfHxjPj0yMjZ8fGM+''@;'; put 'put ''PTY1JiZjPD05MH1mdW5jdGlvbiB1SihjKXtyZXR1cm4gR3J0LmluY2x1ZGVzKGMpfWZ1bmN0aW9uICRydChjKXtjb25zdCBsPVtdO3JldHVybiByTigpP2wucHVzaChyby5DT01NQU5EX0xFRlQscm8uQ09NTUFORF9SSUdIVCxyby5DT01NQU5EX0ZJUkVGT1gpOmwucHVzaChyby5DT05UUk9M''@;'; put 'put ''KSxsLmluY2x1ZGVzKGMpfWZ1bmN0aW9uIFNnZShjKXtyZXR1cm5bcm8uQ09OVFJPTCxyby5DT01NQU5EX0xFRlQscm8uQ09NTUFORF9SSUdIVCxyby5DT01NQU5EX0ZJUkVGT1hdLmluY2x1ZGVzKGMpfWZ1bmN0aW9uIHE5KGMsbCl7Y29uc3QgYT1sLnNwbGl0KCJ8Iik7bGV0IGQ9ITE7cmV0''@;'; put 'put ''dXJuIEtuKGEsaD0+e2lmKGM9PT1yb1toXSlyZXR1cm4gZD0hMCwhMX0pLGR9ZnVuY3Rpb24gRTIoYyl7Yy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uRW5hYmxlZD0hMSxjLmNhbmNlbEJ1YmJsZT0hMH1mdW5jdGlvbiBENihjKXtyZXR1cm4hMT09PWMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvbkVu''@;'; put 'put ''YWJsZWR9ZnVuY3Rpb24gSTYoYyl7cmV0dXJuIDI9PT1jLmJ1dHRvbn1mdW5jdGlvbiBjTihjKXtyZXR1cm4gMD09PWMuYnV0dG9ufWZ1bmN0aW9uIE1nZShjKXtyZXR1cm4gdHlwZW9mIFRvdWNoRXZlbnQ8InUiJiZjIGluc3RhbmNlb2YgVG91Y2hFdmVudH1mdW5jdGlvbiB4Z2UoYyxsKXtj''@;'; put 'put ''b25zdCBhPXt4OmMub2Zmc2V0WCx5OmMub2Zmc2V0WX07bGV0IGQ9Yy50YXJnZXQ7aWYoIUU0KGwpfHxkIT09bCYmZC5jb250YWlucyhsKSlyZXR1cm4gYTtmb3IoO2QhPT1sOylhLngrPWQub2Zmc2V0TGVmdCxhLnkrPWQub2Zmc2V0VG9wLGQ9ZC5vZmZzZXRQYXJlbnQ7cmV0dXJuIGF9ZnVu''@;'; put 'put ''Y3Rpb24gb3MoKXtNYShjb25zb2xlKSYmY29uc29sZS53YXJuKC4uLmFyZ3VtZW50cyl9ZnVuY3Rpb24gRWdlKGMpe01hKGNvbnNvbGUpJiZjb25zb2xlLndhcm4oYERlcHJlY2F0ZWQ6ICR7Y31gKX1mdW5jdGlvbiBkSigpe01hKGNvbnNvbGUpJiZjb25zb2xlLmVycm9yKC4uLmFyZ3VtZW50''@;'; put 'put ''cyl9Y29uc3QgSjk9WyJhZnRlckNlbGxNZXRhUmVzZXQiLCJhZnRlckNoYW5nZSIsImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsImJlZm9yZUNvbnRleHRNZW51U2V0SXRlbXMiLCJhZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zIiwiYmVmb3JlRHJvcGRvd25NZW51U2V0''@;'; put 'put ''SXRlbXMiLCJhZnRlckNvbnRleHRNZW51SGlkZSIsImJlZm9yZUNvbnRleHRNZW51U2hvdyIsImFmdGVyQ29udGV4dE1lbnVTaG93IiwiYWZ0ZXJDb3B5TGltaXQiLCJiZWZvcmVDcmVhdGVDb2wiLCJhZnRlckNvbHVtblNlcXVlbmNlQ2FjaGVVcGRhdGUiLCJhZnRlckNvbHVtblNlcXVlbmNl''@;'; put 'put ''Q2hhbmdlIiwiYWZ0ZXJDcmVhdGVDb2wiLCJiZWZvcmVDcmVhdGVSb3ciLCJhZnRlckNyZWF0ZVJvdyIsImFmdGVyRGVzZWxlY3QiLCJhZnRlckRlc3Ryb3kiLCJhZnRlckRvY3VtZW50S2V5RG93biIsImFmdGVyRHJhd1NlbGVjdGlvbiIsImJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIiwi''@;'; put 'put ''YmVmb3JlQ29tcG9zaXRpb25TdGFydCIsImFmdGVyR2V0Q2VsbE1ldGEiLCJhZnRlckdldENvbEhlYWRlciIsImFmdGVyR2V0Um93SGVhZGVyIiwiYWZ0ZXJJbml0IiwiYWZ0ZXJMb2FkRGF0YSIsImFmdGVyVXBkYXRlRGF0YSIsImFmdGVyTW9tZW50dW1TY3JvbGwiLCJhZnRlck9uQ2VsbENv''@;'; put 'put ''cm5lck1vdXNlRG93biIsImFmdGVyT25DZWxsQ29ybmVyRGJsQ2xpY2siLCJhZnRlck9uQ2VsbE1vdXNlRG93biIsImFmdGVyT25DZWxsTW91c2VVcCIsImFmdGVyT25DZWxsQ29udGV4dE1lbnUiLCJhZnRlck9uQ2VsbE1vdXNlT3ZlciIsImFmdGVyT25DZWxsTW91c2VPdXQiLCJhZnRlclJl''@;'; put 'put ''bW92ZUNvbCIsImFmdGVyUmVtb3ZlUm93IiwiYmVmb3JlUmVuZGVyZXIiLCJhZnRlclJlbmRlcmVyIiwiYWZ0ZXJSb3dTZXF1ZW5jZUNhY2hlVXBkYXRlIiwiYWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZSIsImJlZm9yZVZpZXdwb3J0U2Nyb2xsVmVydGljYWxseSIsImJlZm9yZVZpZXdwb3J0U2Ny''@;'; put 'put ''b2xsSG9yaXpvbnRhbGx5IiwiYmVmb3JlVmlld3BvcnRTY3JvbGwiLCJhZnRlclNjcm9sbEhvcml6b250YWxseSIsImFmdGVyU2Nyb2xsVmVydGljYWxseSIsImFmdGVyU2Nyb2xsIiwiYWZ0ZXJTZWxlY3Rpb24iLCJhZnRlclNlbGVjdGlvbkJ5UHJvcCIsImFmdGVyU2VsZWN0aW9uRW5kIiwi''@;'; put 'put ''YWZ0ZXJTZWxlY3Rpb25FbmRCeVByb3AiLCJhZnRlclNlbGVjdGlvbkZvY3VzU2V0IiwiYmVmb3JlU2VsZWN0Q29sdW1ucyIsImFmdGVyU2VsZWN0Q29sdW1ucyIsImJlZm9yZVNlbGVjdFJvd3MiLCJhZnRlclNlbGVjdFJvd3MiLCJiZWZvcmVTZWxlY3RBbGwiLCJhZnRlclNlbGVjdEFsbCIs''@;'; put 'put ''ImFmdGVyU2V0Q2VsbE1ldGEiLCJhZnRlclJlbW92ZUNlbGxNZXRhIiwiYWZ0ZXJTZXREYXRhQXRDZWxsIiwiYWZ0ZXJTZXREYXRhQXRSb3dQcm9wIiwiYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsIiwiYWZ0ZXJTZXRUaGVtZSIsImFmdGVyVXBkYXRlU2V0dGluZ3MiLCJhZnRlclZhbGlkYXRl''@;'; put 'put ''IiwiYmVmb3JlTGFuZ3VhZ2VDaGFuZ2UiLCJhZnRlckxhbmd1YWdlQ2hhbmdlIiwiYmVmb3JlQXV0b2ZpbGwiLCJhZnRlckF1dG9maWxsIiwiYmVmb3JlQ2VsbEFsaWdubWVudCIsImJlZm9yZUNoYW5nZSIsImJlZm9yZUNoYW5nZVJlbmRlciIsImJlZm9yZUhlaWdodENoYW5nZSIsImJlZm9y''@;'; put 'put ''ZVdpZHRoQ2hhbmdlIiwiYmVmb3JlRHJhd0JvcmRlcnMiLCJiZWZvcmVHZXRDZWxsTWV0YSIsImJlZm9yZVJlbW92ZUNlbGxNZXRhIiwiYmVmb3JlSW5pdCIsImJlZm9yZUluaXRXYWxrb250YWJsZSIsImJlZm9yZUxvYWREYXRhIiwiYmVmb3JlVXBkYXRlRGF0YSIsImJlZm9yZUtleURvd24i''@;'; put 'put ''LCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLCJiZWZvcmVPbkNlbGxNb3VzZVVwIiwiYmVmb3JlT25DZWxsQ29udGV4dE1lbnUiLCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLCJiZWZvcmVPbkNlbGxNb3VzZU91dCIsImJlZm9yZVJlbW92ZUNvbCIsImJlZm9yZVJlbW92ZVJvdyIsImJlZm9yZVZp''@;'; put 'put ''ZXdSZW5kZXIiLCJhZnRlclZpZXdSZW5kZXIiLCJiZWZvcmVSZW5kZXIiLCJhZnRlclJlbmRlciIsImJlZm9yZVJvd1dyYXAiLCJiZWZvcmVDb2x1bW5XcmFwIiwiYmVmb3JlU2V0Q2VsbE1ldGEiLCJiZWZvcmVTZWxlY3Rpb25Gb2N1c1NldCIsImJlZm9yZVNldFJhbmdlU3RhcnRPbmx5Iiwi''@;'; put 'put ''YmVmb3JlU2V0UmFuZ2VTdGFydCIsImJlZm9yZVNldFJhbmdlRW5kIiwiYmVmb3JlU2VsZWN0aW9uSGlnaGxpZ2h0U2V0IiwiYmVmb3JlVG91Y2hTY3JvbGwiLCJiZWZvcmVWYWxpZGF0ZSIsImJlZm9yZVZhbHVlUmVuZGVyIiwiY29uc3RydWN0IiwiaW5pdCIsIm1vZGlmeUNvbEhlYWRlciIs''@;'; put 'put ''Im1vZGlmeUNvbFdpZHRoIiwibW9kaWZ5RmlsdGVyc011bHRpU2VsZWN0VmFsdWUiLCJtb2RpZnlGb2N1c2VkRWxlbWVudCIsIm1vZGlmeVJvd0hlYWRlciIsIm1vZGlmeVJvd0hlaWdodCIsIm1vZGlmeVJvd0hlaWdodEJ5T3ZlcmxheU5hbWUiLCJtb2RpZnlEYXRhIiwibW9kaWZ5U291cmNl''@;'; put 'put ''RGF0YSIsIm1vZGlmeVJvd0RhdGEiLCJtb2RpZnlHZXRDZWxsQ29vcmRzIiwibW9kaWZ5R2V0Q29vcmRzRWxlbWVudCIsIm1vZGlmeUZvY3VzT25UYWJOYXZpZ2F0aW9uIiwiYmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyIiwiYmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyIiwicGVy''@;'; put 'put ''c2lzdGVudFN0YXRlTG9hZCIsInBlcnNpc3RlbnRTdGF0ZVJlc2V0IiwicGVyc2lzdGVudFN0YXRlU2F2ZSIsImJlZm9yZUNvbHVtblNvcnQiLCJhZnRlckNvbHVtblNvcnQiLCJtb2RpZnlBdXRvZmlsbFJhbmdlIiwibW9kaWZ5Q29weWFibGVSYW5nZSIsImJlZm9yZUN1dCIsImFmdGVyQ3V0''@;'; put 'put ''IiwiYmVmb3JlQ29weSIsImFmdGVyQ29weSIsImJlZm9yZVBhc3RlIiwiYWZ0ZXJQYXN0ZSIsImJlZm9yZUNvbHVtbkZyZWV6ZSIsImFmdGVyQ29sdW1uRnJlZXplIiwiYmVmb3JlQ29sdW1uTW92ZSIsImFmdGVyQ29sdW1uTW92ZSIsImJlZm9yZUNvbHVtblVuZnJlZXplIiwiYWZ0ZXJDb2x1''@;'; put 'put ''bW5VbmZyZWV6ZSIsImJlZm9yZVJvd01vdmUiLCJhZnRlclJvd01vdmUiLCJiZWZvcmVDb2x1bW5SZXNpemUiLCJhZnRlckNvbHVtblJlc2l6ZSIsImJlZm9yZVJvd1Jlc2l6ZSIsImFmdGVyUm93UmVzaXplIiwiYWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnMiLCJhZnRlckdldFJvd0hl''@;'; put 'put ''YWRlclJlbmRlcmVycyIsImJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aCIsImJlZm9yZUZpbHRlciIsImFmdGVyRmlsdGVyIiwiYmVmb3JlUGFnZUNoYW5nZSIsImFmdGVyUGFnZUNoYW5nZSIsImJlZm9yZVBhZ2VTaXplQ2hhbmdlIiwiYWZ0ZXJQYWdlU2l6ZUNoYW5nZSIsImFmdGVyUGFn''@;'; put 'put ''ZVNpemVWaXNpYmlsaXR5Q2hhbmdlIiwiYWZ0ZXJQYWdlQ291bnRlclZpc2liaWxpdHlDaGFuZ2UiLCJhZnRlclBhZ2VOYXZpZ2F0aW9uVmlzaWJpbGl0eUNoYW5nZSIsImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiLCJhZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkIiwiYWZ0ZXJOYW1lZEV4''@;'; put 'put ''cHJlc3Npb25SZW1vdmVkIiwiYWZ0ZXJTaGVldEFkZGVkIiwiYWZ0ZXJTaGVldFJlbmFtZWQiLCJhZnRlclNoZWV0UmVtb3ZlZCIsIm1vZGlmeUNvbHVtbkhlYWRlckhlaWdodCIsIm1vZGlmeUNvbHVtbkhlYWRlclZhbHVlIiwiYmVmb3JlVW5kbyIsImJlZm9yZVVuZG9TdGFja0NoYW5nZSIs''@;'; put 'put ''ImFmdGVyVW5kbyIsImFmdGVyVW5kb1N0YWNrQ2hhbmdlIiwiYmVmb3JlUmVkbyIsImJlZm9yZVJlZG9TdGFja0NoYW5nZSIsImFmdGVyUmVkbyIsImFmdGVyUmVkb1N0YWNrQ2hhbmdlIiwibW9kaWZ5Um93SGVhZGVyV2lkdGgiLCJtb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsIm1vZGlmeVRyYW5z''@;'; put 'put ''Zm9ybVN0YXJ0IiwibW9kaWZ5VHJhbnNmb3JtRW5kIiwiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsImFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLCJhZnRlck1vZGlmeVRyYW5zZm9ybUVuZCIsImFmdGVyVmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGUiLCJhZnRlclZpZXdwb3J0''@;'; put 'put ''Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIiwiYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQiLCJiZWZvcmVIaWRlUm93cyIsImFmdGVySGlkZVJvd3MiLCJiZWZvcmVVbmhpZGVSb3dzIiwiYWZ0ZXJVbmhpZGVSb3dzIiwiYmVmb3JlSGlkZUNvbHVtbnMiLCJhZnRlckhpZGVDb2x1bW5zIiwiYmVm''@;'; put 'put ''b3JlVW5oaWRlQ29sdW1ucyIsImFmdGVyVW5oaWRlQ29sdW1ucyIsImJlZm9yZVRyaW1Sb3ciLCJhZnRlclRyaW1Sb3ciLCJiZWZvcmVVbnRyaW1Sb3ciLCJhZnRlclVudHJpbVJvdyIsImJlZm9yZURyb3Bkb3duTWVudVNob3ciLCJhZnRlckRyb3Bkb3duTWVudVNob3ciLCJhZnRlckRyb3Bk''@;'; put 'put ''b3duTWVudUhpZGUiLCJiZWZvcmVBZGRDaGlsZCIsImFmdGVyQWRkQ2hpbGQiLCJiZWZvcmVEZXRhY2hDaGlsZCIsImFmdGVyRGV0YWNoQ2hpbGQiLCJiZWZvcmVCZWdpbkVkaXRpbmciLCJhZnRlckRpYWxvZ0hpZGUiLCJhZnRlckRpYWxvZ1Nob3ciLCJiZWZvcmVEaWFsb2dIaWRlIiwiYmVm''@;'; put 'put ''b3JlRGlhbG9nU2hvdyIsImRpYWxvZ0ZvY3VzUHJldmlvdXNFbGVtZW50IiwiZGlhbG9nRm9jdXNOZXh0RWxlbWVudCIsImFmdGVyRGlhbG9nRm9jdXMiLCJiZWZvcmVMb2FkaW5nU2hvdyIsImFmdGVyTG9hZGluZ1Nob3ciLCJiZWZvcmVMb2FkaW5nSGlkZSIsImFmdGVyTG9hZGluZ0hpZGUi''@;'; put 'put ''LCJiZWZvcmVFbXB0eURhdGFTdGF0ZVNob3ciLCJhZnRlckVtcHR5RGF0YVN0YXRlU2hvdyIsImJlZm9yZUVtcHR5RGF0YVN0YXRlSGlkZSIsImFmdGVyRW1wdHlEYXRhU3RhdGVIaWRlIiwiYWZ0ZXJCZWdpbkVkaXRpbmciLCJiZWZvcmVNZXJnZUNlbGxzIiwiYWZ0ZXJNZXJnZUNlbGxzIiwi''@;'; put 'put ''YmVmb3JlVW5tZXJnZUNlbGxzIiwiYWZ0ZXJVbm1lcmdlQ2VsbHMiLCJhZnRlckxpc3RlbiIsImFmdGVyVW5saXN0ZW4iLCJhZnRlclJlZnJlc2hEaW1lbnNpb25zIiwiYmVmb3JlUmVmcmVzaERpbWVuc2lvbnMiLCJiZWZvcmVDb2x1bW5Db2xsYXBzZSIsImFmdGVyQ29sdW1uQ29sbGFwc2Ui''@;'; put 'put ''LCJiZWZvcmVDb2x1bW5FeHBhbmQiLCJhZnRlckNvbHVtbkV4cGFuZCIsIm1vZGlmeUF1dG9Db2x1bW5TaXplU2VlZCJdLGhKPW5ldyBNYXAoW1sibW9kaWZ5Um93IiwiOC4wLjAiXSxbIm1vZGlmeUNvbCIsIjguMC4wIl0sWyJ1bm1vZGlmeVJvdyIsIjguMC4wIl0sWyJ1bm1vZGlmeUNvbCIs''@;'; put 'put ''IjguMC4wIl0sWyJza2lwTGVuZ3RoQ2FjaGUiLCI4LjAuMCJdLFsiaGlkZGVuQ29sdW1uIiwiOC4wLjAiXSxbImhpZGRlblJvdyIsIjguMC4wIl1dKSxmSj1uZXcgTWFwKFtbXV0pO2Z1bmN0aW9uIHBKKGMsbCxhKXtUZ2UoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFRnZShjLGwpe2lmKGwu''@;'; put 'put ''aGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gQWdlKGMsbCxhKXtyZXR1cm4gYy5zZXQodU4oYyxsKSxhKSxhfWZ1bmN0aW9uIGgxKGMsbCl7cmV0dXJuIGMu''@;'; put 'put ''Z2V0KHVOKGMsbCkpfWZ1bmN0aW9uIHVOKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmpl''@;'; put 'put ''Y3QiKX1iKDIzMDEyKSxiKDgxMjYwKTt2YXIgVDI9bmV3IFdlYWtNYXAsQnc9bmV3IFdlYWtNYXAsZ0o9bmV3IFdlYWtNYXAsbUo9bmV3IFdlYWtTZXQ7Y2xhc3Mga2dle2NvbnN0cnVjdG9yKCl7KGZ1bmN0aW9uIEtydChjLGwpe1RnZShjLGwpLGwuYWRkKGMpfSkodGhpcyxtSikscEoodGhp''@;'; put 'put ''cyxUMixuZXcgTWFwKSxwSih0aGlzLEJ3LG5ldyBNYXApLHBKKHRoaXMsZ0osbmV3IFNldCksSjkuZm9yRWFjaChsPT51TihtSix0aGlzLERnZSkuY2FsbCh0aGlzLGwpKX1nZXRIb29rcyhsKXt2YXIgYTtyZXR1cm4gbnVsbCE9PShhPWgxKFQyLHRoaXMpLmdldChsKSkmJnZvaWQgMCE9PWE/''@;'; put 'put ''YTpbXX1hZGQobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307aDEoVDIsdGhpcykuaGFzKGwpfHwodU4obUosdGhpcyxEZ2UpLmNhbGwodGhpcyxsKSxKOS5wdXNoKGwpKTtjb25zdCBoPWgxKFQyLHRoaXMpLmdldChs''@;'; put 'put ''KSxmPWguZmluZCh0ZT0+dGUuY2FsbGJhY2s9PT1hKTtpZihmKXJldHVybiB2b2lkKCEwPT09Zi5za2lwJiYoZi5za2lwPSExKSk7Y29uc3Qgdj1OdW1iZXIuaXNJbnRlZ2VyKGQub3JkZXJJbmRleCk/ZC5vcmRlckluZGV4OjAsTT0hIWQucnVuT25jZSxEPSEhZC5pbml0aWFsSG9vaztsZXQg''@;'; put 'put ''VT0hMTtpZihEKXtjb25zdCB0ZT1oLmZpbmQob2U9Pm9lLmluaXRpYWxIb29rKTt0ZSYmKHRlLmNhbGxiYWNrPWEsVT0hMCl9aWYoIVUpe2gucHVzaCh7Y2FsbGJhY2s6YSxvcmRlckluZGV4OnYscnVuT25jZTpNLGluaXRpYWxIb29rOkQsc2tpcDohMX0pO2xldCB0ZT1oMShnSix0aGlzKS5o''@;'; put 'put ''YXMobCk7IXRlJiYwIT09diYmKHRlPSEwLGgxKGdKLHRoaXMpLmFkZChsKSksdGUmJmgubGVuZ3RoPjEmJmgxKFQyLHRoaXMpLnNldChsLGgudG9Tb3J0ZWQoKG9lLHZlKT0+b2Uub3JkZXJJbmRleC12ZS5vcmRlckluZGV4KSl9fWhhcyhsKXtyZXR1cm4gaDEoVDIsdGhpcykuaGFzKGwpJiZo''@;'; put 'put ''MShUMix0aGlzKS5nZXQobCkubGVuZ3RoPjB9cmVtb3ZlKGwsYSl7aWYoIWgxKFQyLHRoaXMpLmhhcyhsKSlyZXR1cm4hMTtjb25zdCBkPWgxKFQyLHRoaXMpLmdldChsKSxoPWQuZmluZChmPT5mLmNhbGxiYWNrPT09YSk7aWYoaCl7bGV0IGY9aDEoQncsdGhpcykuZ2V0KGwpO3JldHVybiBo''@;'; put 'put ''LnNraXA9ITAsZis9MSxmPjEwMCYmKGgxKFQyLHRoaXMpLnNldChsLGQuZmlsdGVyKHY9PiF2LnNraXApKSxmPTApLGgxKEJ3LHRoaXMpLnNldChsLGYpLCEwfXJldHVybiExfWRlc3Ryb3koKXtoMShUMix0aGlzKS5jbGVhcigpLGgxKEJ3LHRoaXMpLmNsZWFyKCksQWdlKFQyLHRoaXMsbnVs''@;'; put 'put ''bCksQWdlKEJ3LHRoaXMsbnVsbCl9fWZ1bmN0aW9uIERnZShjKXtoMShUMix0aGlzKS5zZXQoYyxbXSksaDEoQncsdGhpcykuc2V0KGMsMCl9Y29uc3QgZWl0PVhzYFRoZSBwbHVnaW4gaG9vayAiW2hvb2tOYW1lXSIgd2FzIHJlbW92ZWQgaW4gSGFuZHNvbnRhYmxlIFtyZW1vdmVkSW5WZXJz''@;'; put 'put ''aW9uXS5ceDIwCiAgUGxlYXNlIGNvbnN1bHQgcmVsZWFzZSBub3RlcyBodHRwczovL2dpdGh1Yi5jb20vaGFuZHNvbnRhYmxlL2hhbmRzb250YWJsZS9yZWxlYXNlcy90YWcvW3JlbW92ZWRJblZlcnNpb25dIHRvXHgyMAogIGxlYXJuIGFib3V0IHRoZSBtaWdyYXRpb24gcGF0aC5gO2NsYXNz''@;'; put 'put ''IEFhe2NvbnN0cnVjdG9yKCl7IWZ1bmN0aW9uIHFydChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gSnJ0KGMpe3ZhciBsPWZ1bmN0aW9uIFFydChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEp''@;'; put 'put ''e3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShj''@;'; put 'put ''KX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsImdsb2JhbEJ1Y2tldCIs''@;'; put 'put ''bmV3IGtnZSl9c3RhdGljIGdldFNpbmdsZXRvbigpe3JldHVybiBmdW5jdGlvbiBuaXQoKXtyZXR1cm4gdGl0fSgpfWdldEJ1Y2tldCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO3JldHVybiBsPyhsLnBsdWdpbkhv''@;'; put 'put ''b2tCdWNrZXR8fChsLnBsdWdpbkhvb2tCdWNrZXQ9bmV3IGtnZSksbC5wbHVnaW5Ib29rQnVja2V0KTp0aGlzLmdsb2JhbEJ1Y2tldH1hZGQobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbCxoPWFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGg+Mz9hcmd1bWVudHNbM106dm9pZCAwO3JldHVybiBBcnJheS5pc0FycmF5KGEpP0tuKGEsZj0+dGhpcy5hZGQobCxmLGQpKTooaEouaGFzKGwpJiZvcygkSChlaXQse2hvb2tOYW1lOmwscmVtb3ZlZEluVmVyc2lvbjpoSi5nZXQobCl9KSksZkouaGFzKGwpJiZvcyhmSi5nZXQobCkp''@;'; put 'put ''LHRoaXMuZ2V0QnVja2V0KGQpLmFkZChsLGEse29yZGVySW5kZXg6aCxydW5PbmNlOiExfSkpLHRoaXN9b25jZShsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsLGg9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50''@;'; put 'put ''c1szXTp2b2lkIDA7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/S24oYSxmPT50aGlzLm9uY2UobCxmLGQpKTp0aGlzLmdldEJ1Y2tldChkKS5hZGQobCxhLHtvcmRlckluZGV4OmgscnVuT25jZTohMH0pLHRoaXN9YWRkQXNGaXhlZChsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9p''@;'; put 'put ''ZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsO3JldHVybiBBcnJheS5pc0FycmF5KGEpP0tuKGEsaD0+dGhpcy5hZGRBc0ZpeGVkKGwsaCxkKSk6dGhpcy5nZXRCdWNrZXQoZCkuYWRkKGwsYSx7aW5pdGlhbEhvb2s6ITB9KSx0aGlzfXJlbW92ZShsLGEpe3JldHVybiB0aGlz''@;'; put 'put ''LmdldEJ1Y2tldChhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbCkucmVtb3ZlKGwsYSl9aGFzKGwpe3JldHVybiB0aGlzLmdldEJ1Y2tldChhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNb''@;'; put 'put ''MV06bnVsbCkuaGFzKGwpfXJ1bihsLGEsZCxoLGYsdixNLEQpe3tjb25zdCBVPXRoaXMuZ2V0QnVja2V0KCkuZ2V0SG9va3MoYSksdGU9VT9VLmxlbmd0aDowO2xldCBvZT0wO2lmKHRlKWZvcig7b2U8dGU7KXtpZighVVtvZV18fFVbb2VdLnNraXApe29lKz0xO2NvbnRpbnVlfWNvbnN0IHZl''@;'; put 'put ''PWxOKFVbb2VdLmNhbGxiYWNrLGwsZCxoLGYsdixNLEQpO3ZvaWQgMCE9PXZlJiYoZD12ZSksVVtvZV0mJlVbb2VdLnJ1bk9uY2UmJnRoaXMucmVtb3ZlKGEsVVtvZV0uY2FsbGJhY2spLG9lKz0xfX17Y29uc3QgVT10aGlzLmdldEJ1Y2tldChsKS5nZXRIb29rcyhhKSx0ZT1VP1UubGVuZ3Ro''@;'; put 'put ''OjA7bGV0IG9lPTA7aWYodGUpZm9yKDtvZTx0ZTspe2lmKCFVW29lXXx8VVtvZV0uc2tpcCl7b2UrPTE7Y29udGludWV9Y29uc3QgdmU9bE4oVVtvZV0uY2FsbGJhY2ssbCxkLGgsZix2LE0sRCk7dm9pZCAwIT09dmUmJihkPXZlKSxVW29lXSYmVVtvZV0ucnVuT25jZSYmdGhpcy5yZW1vdmUo''@;'; put 'put ''YSxVW29lXS5jYWxsYmFjayxsKSxvZSs9MX19cmV0dXJuIGR9ZGVzdHJveSgpe3RoaXMuZ2V0QnVja2V0KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsKS5kZXN0cm95KCl9cmVnaXN0ZXIobCl7dGhpcy5pc1JlZ2lzdGVyZWQobCl8''@;'; put 'put ''fEo5LnB1c2gobCl9ZGVyZWdpc3RlcihsKXt0aGlzLmlzUmVnaXN0ZXJlZChsKSYmSjkuc3BsaWNlKEo5LmluZGV4T2YobCksMSl9aXNEZXByZWNhdGVkKGwpe3JldHVybiBmSi5oYXMobCl8fGhKLmhhcyhsKX1pc1JlZ2lzdGVyZWQobCl7cmV0dXJuIEo5LmluZGV4T2YobCk+PTB9Z2V0UmVn''@;'; put 'put ''aXN0ZXJlZCgpe3JldHVybiBKOX19Y29uc3QgdGl0PW5ldyBBYSxROT1uZXcgTWFwO2Z1bmN0aW9uIE5mKCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiJjb21tb24iO1E5LmhhcyhjKXx8UTkuc2V0KGMsbmV3IE1hcCk7Y29u''@;'; put 'put ''c3QgbD1ROS5nZXQoYyk7cmV0dXJue3JlZ2lzdGVyOmZ1bmN0aW9uIGEoRCxVKXtsLnNldChELFUpfSxnZXRJdGVtOmZ1bmN0aW9uIGQoRCl7cmV0dXJuIGwuZ2V0KEQpfSxoYXNJdGVtOmZ1bmN0aW9uIGgoRCl7cmV0dXJuIGwuaGFzKEQpfSxnZXROYW1lczpmdW5jdGlvbiBmKCl7cmV0dXJu''@;'; put 'put ''Wy4uLmwua2V5cygpXX0sZ2V0VmFsdWVzOmZ1bmN0aW9uIHYoKXtyZXR1cm5bLi4ubC52YWx1ZXMoKV19LGNsZWFyOmZ1bmN0aW9uIE0oKXtROS5kZWxldGUoYyksbC5jbGVhcigpfX19ZnVuY3Rpb24gcml0KGMsbCl7dmFyIGE7cmV0dXJuIG51bGw9PVE5fHxudWxsPT09KGE9UTkuZ2V0KGMu''@;'; put 'put ''Z3VpZCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmdldChsKX1jb25zdCB2Sj1uZXcgV2Vha01hcCx7cmVnaXN0ZXI6aWl0LGdldEl0ZW06SWdlLGhhc0l0ZW06UmdlLGdldE5hbWVzOmFpdH09TmYoImVkaXRvcnMiKTtmdW5jdGlvbiBvaXQoYyl7Y29uc3QgbD17fSxhPWM7dGhpcy5nZXRDb25z''@;'; put 'put ''dHJ1Y3Rvcj1mdW5jdGlvbigpe3JldHVybiBjfSx0aGlzLmdldEluc3RhbmNlPWZ1bmN0aW9uKGQpe3JldHVybiBkLmd1aWQgaW4gbHx8KGxbZC5ndWlkXT1uZXcgYShkKSksbFtkLmd1aWRdfSxBYS5nZXRTaW5nbGV0b24oKS5hZGQoImFmdGVyRGVzdHJveSIsZnVuY3Rpb24oKXtsW3RoaXMu''@;'; put 'put ''Z3VpZF09bnVsbH0pfWZ1bmN0aW9uIExnZShjLGwpe2xldCBhO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjKXZKLmdldChjKXx8eWgobnVsbCxjKSxhPXZKLmdldChjKTtlbHNle2lmKCJzdHJpbmciIT10eXBlb2YgYyl0aHJvdyBFcnJvcignT25seSBzdHJpbmdzIGFuZCBmdW5jdGlvbnMgY2Fu''@;'; put 'put ''IGJlIHBhc3NlZCBhcyAiZWRpdG9yIiBwYXJhbWV0ZXInKTthPUlnZShjKX1pZighYSl0aHJvdyBFcnJvcihgTm8gZWRpdG9yIHJlZ2lzdGVyZWQgdW5kZXIgbmFtZSAiJHtjfSJgKTtyZXR1cm4gYS5nZXRJbnN0YW5jZShsKX1mdW5jdGlvbiBkTihjKXtpZigiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''YylyZXR1cm4gYztpZighUmdlKGMpKXRocm93IEVycm9yKGBObyByZWdpc3RlcmVkIGVkaXRvciBmb3VuZCB1bmRlciAiJHtjfSIgbmFtZWApO3JldHVybiBJZ2UoYykuZ2V0Q29uc3RydWN0b3IoKX1mdW5jdGlvbiB5aChjLGwpe2MmJiJzdHJpbmciIT10eXBlb2YgYyYmKGM9KGw9YykuRURJ''@;'; put 'put ''VE9SX1RZUEUpO2NvbnN0IGE9bmV3IG9pdChsKTsic3RyaW5nIj09dHlwZW9mIGMmJmlpdChjLGEpLHZKLnNldChsLGEpfWxldCBoTj0wO2NvbnN0IFZmPWNsYXNzIHVpdHtjb25zdHJ1Y3Rvcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3Vt''@;'; put 'put ''ZW50c1swXTpudWxsOyhmdW5jdGlvbiBzaXQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGxpdChjKXt2YXIgbD1mdW5jdGlvbiBjaXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIg''@;'; put 'put ''ZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMs''@;'; put 'put ''InN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSkodGhpcywiY29udGV4dCIsdm9pZCAwKSx0''@;'; put 'put ''aGlzLmNvbnRleHQ9bHx8dGhpcyx0aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnN8fCh0aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnM9W10pfWFkZEV2ZW50TGlzdGVuZXIobCxhLGQpe2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNb''@;'; put 'put ''M107ZnVuY3Rpb24gZih2KXtkLmNhbGwodGhpcyxmdW5jdGlvbiBkaXQoYyl7Y29uc3QgbD1jLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjtyZXR1cm4gYy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb249ZnVuY3Rpb24oKXtsLmFwcGx5KHRoaXMpLEUyKHRoaXMpfSxjfSh2KSl9cmV0dXJuIHRo''@;'; put 'put ''aXMuY29udGV4dC5ldmVudExpc3RlbmVycy5wdXNoKHtlbGVtZW50OmwsZXZlbnQ6YSxjYWxsYmFjazpkLGNhbGxiYWNrUHJveHk6ZixvcHRpb25zOmgsZXZlbnRNYW5hZ2VyOnRoaXN9KSxsLmFkZEV2ZW50TGlzdGVuZXIoYSxmLGgpLGhOKz0xLCgpPT57dGhpcy5yZW1vdmVFdmVudExpc3Rl''@;'; put 'put ''bmVyKGwsYSxkKX19cmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGEsZCl7bGV0IHYsaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdLGY9dGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzLmxlbmd0aDtmb3IoO2Y7KWlmKGYtPTEsdj10aGlzLmNv''@;'; put 'put ''bnRleHQuZXZlbnRMaXN0ZW5lcnNbZl0sdi5ldmVudD09PWEmJnYuZWxlbWVudD09PWwpe2lmKGQmJmQhPT12LmNhbGxiYWNrfHxoJiZ2LmV2ZW50TWFuYWdlciE9PXRoaXMpY29udGludWU7dGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzLnNwbGljZShmLDEpLHYuZWxlbWVudC5yZW1vdmVF''@;'; put 'put ''dmVudExpc3RlbmVyKHYuZXZlbnQsdi5jYWxsYmFja1Byb3h5LHYub3B0aW9ucyksaE4tPTF9fWNsZWFyRXZlbnRzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtpZighdGhpcy5jb250ZXh0KXJldHVybjtsZXQgYT10aGlz''@;'; put 'put ''LmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMubGVuZ3RoO2Zvcig7YTspe2EtPTE7Y29uc3QgZD10aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnNbYV07bCYmZC5ldmVudE1hbmFnZXIhPT10aGlzfHwodGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzLnNwbGljZShhLDEpLGQuZWxlbWVudC5yZW1v''@;'; put 'put ''dmVFdmVudExpc3RlbmVyKGQuZXZlbnQsZC5jYWxsYmFja1Byb3h5LGQub3B0aW9ucyksaE4tPTEpfX1jbGVhcigpe3RoaXMuY2xlYXJFdmVudHMoKX1kZXN0cm95KCl7dGhpcy5jbGVhckV2ZW50cygpLHRoaXMuY29udGV4dD1udWxsfWRlc3Ryb3lXaXRoT3duRXZlbnRzT25seSgpe3RoaXMu''@;'; put 'put ''Y2xlYXJFdmVudHMoITApLHRoaXMuY29udGV4dD1udWxsfWZpcmVFdmVudChsLGEpe2xldCBkPWwuZG9jdW1lbnQsaD1sO2R8fChkPWwub3duZXJEb2N1bWVudD9sLm93bmVyRG9jdW1lbnQ6bCxoPWQuZGVmYXVsdFZpZXcpO2NvbnN0IGY9e2J1YmJsZXM6ITAsY2FuY2VsYWJsZToibW91c2Vt''@;'; put 'put ''b3ZlIiE9PWEsdmlldzpoLGRldGFpbDowLHNjcmVlblg6MCxzY3JlZW5ZOjAsY2xpZW50WDoxLGNsaWVudFk6MSxjdHJsS2V5OiExLGFsdEtleTohMSxzaGlmdEtleTohMSxtZXRhS2V5OiExLGJ1dHRvbjowLHJlbGF0ZWRUYXJnZXQ6dm9pZCAwfTtsZXQgdjtkLmNyZWF0ZUV2ZW50Pyh2PWQu''@;'; put 'put ''Y3JlYXRlRXZlbnQoIk1vdXNlRXZlbnRzIiksdi5pbml0TW91c2VFdmVudChhLGYuYnViYmxlcyxmLmNhbmNlbGFibGUsZi52aWV3LGYuZGV0YWlsLGYuc2NyZWVuWCxmLnNjcmVlblksZi5jbGllbnRYLGYuY2xpZW50WSxmLmN0cmxLZXksZi5hbHRLZXksZi5zaGlmdEtleSxmLm1ldGFLZXks''@;'; put 'put ''Zi5idXR0b24sZi5yZWxhdGVkVGFyZ2V0fHxkLmJvZHkucGFyZW50Tm9kZSkpOnY9ZC5jcmVhdGVFdmVudE9iamVjdCgpLGwuZGlzcGF0Y2hFdmVudD9sLmRpc3BhdGNoRXZlbnQodik6bC5maXJlRXZlbnQoYG9uJHthfWAsdil9fTtmdW5jdGlvbiBldihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rp''@;'; put 'put ''b24gZ2l0KGMpe3ZhciBsPWZ1bmN0aW9uIG1pdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJl''@;'; put 'put ''dHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4g''@;'; put 'put ''Yz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24geUooYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBmTj1uZXcgV2Vha1NldDtjbGFzcyBiSntjb25zdHJ1Y3RvcihsLGEsZCl7KGZ1bmN0aW9uIGZpdChjLGwpeyhmdW5jdGlvbiBwaXQoYyxs''@;'; put 'put ''KXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0pKHRoaXMsZk4pLGV2KHRoaXMsImhvdCIsdm9pZCAwKSxldih0aGlzLCJ0YWJsZU1l''@;'; put 'put ''dGEiLHZvaWQgMCksZXYodGhpcywic2VsZWN0aW9uIix2b2lkIDApLGV2KHRoaXMsImV2ZW50TWFuYWdlciIsdm9pZCAwKSxldih0aGlzLCJkZXN0cm95ZWQiLCExKSxldih0aGlzLCJhY3RpdmVFZGl0b3IiLHZvaWQgMCksZXYodGhpcywiY2VsbFByb3BlcnRpZXMiLHZvaWQgMCksdGhpcy5o''@;'; put 'put ''b3Q9bCx0aGlzLnRhYmxlTWV0YT1hLHRoaXMuc2VsZWN0aW9uPWQsdGhpcy5ldmVudE1hbmFnZXI9bmV3IFZmKGwpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyRG9jdW1lbnRLZXlEb3duIixoPT55SihmTix0aGlzLE9nZSkuY2FsbCh0aGlzLGgpKSx0aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVD''@;'; put 'put ''b21wb3NpdGlvblN0YXJ0IixoPT55SihmTix0aGlzLE9nZSkuY2FsbCh0aGlzLGgpKSx0aGlzLmhvdC52aWV3Ll93dC51cGRhdGUoIm9uQ2VsbERibENsaWNrIiwoaCxmLHYpPT55SihmTix0aGlzLHZpdCkuY2FsbCh0aGlzLGgsZix2KSl9Z2V0QWN0aXZlRWRpdG9yKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''YWN0aXZlRWRpdG9yfXByZXBhcmVFZGl0b3IoKXt2YXIgbDtpZih0aGlzLmFjdGl2ZUVkaXRvciYmdGhpcy5hY3RpdmVFZGl0b3IuaXNXYWl0aW5nKCkpcmV0dXJuIHZvaWQgdGhpcy5jbG9zZUVkaXRvcighMSwhMSxVPT57VSYmdGhpcy5wcmVwYXJlRWRpdG9yKCl9KTtjb25zdCBhPW51bGw9''@;'; put 'put ''PT0obD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmhpZ2hsaWdodDtpZighYXx8YS5pc0hlYWRlcigpKXJldHVybjtjb25zdHtyb3c6ZCxjb2w6aH09YSxmPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlHZXRDZWxsQ29vcmRzIixkLGgs''@;'; put 'put ''ITEsIm1ldGEiKTtsZXQgdj1kLE09aDtpZihBcnJheS5pc0FycmF5KGYpJiYoW3YsTV09ZiksdGhpcy5jZWxsUHJvcGVydGllcz10aGlzLmhvdC5nZXRDZWxsTWV0YSh2LE0pLCF0aGlzLmlzQ2VsbEVkaXRhYmxlKCkpcmV0dXJuIHZvaWQgdGhpcy5jbGVhckFjdGl2ZUVkaXRvcigpO2NvbnN0''@;'; put 'put ''IEQ9dGhpcy5ob3QuZ2V0Q2VsbChkLGgsITApO2lmKEQpe2NvbnN0IFU9dGhpcy5ob3QuZ2V0Q2VsbEVkaXRvcih0aGlzLmNlbGxQcm9wZXJ0aWVzKSx0ZT10aGlzLmhvdC5jb2xUb1Byb3AoTSksb2U9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q2VsbCh0aGlzLmhvdC50b1BoeXNpY2FsUm93''@;'; put 'put ''KHYpLE0pO3RoaXMuYWN0aXZlRWRpdG9yPUxnZShVLHRoaXMuaG90KSx0aGlzLmFjdGl2ZUVkaXRvci5wcmVwYXJlKGQsaCx0ZSxELG9lLHRoaXMuY2VsbFByb3BlcnRpZXMpfX1pc0VkaXRvck9wZW5lZCgpe3JldHVybiB0aGlzLmFjdGl2ZUVkaXRvciYmdGhpcy5hY3RpdmVFZGl0b3IuaXNP''@;'; put 'put ''cGVuZWQoKX1vcGVuRWRpdG9yKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtpZighdGhpcy5pc0NlbGxFZGl0YWJsZSgpKXJldHVybiB2b2lkIHRoaXMuY2xlYXJBY3RpdmVFZGl0b3IoKTtjb25zdCBoPXRoaXMuaG90''@;'; put 'put ''LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtsZXQgZj10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQmVnaW5FZGl0aW5nIixoLmhpZ2hsaWdodC5yb3csaC5oaWdobGlnaHQuY29sLGwsYSxkKTthIGluc3RhbmNlb2YgTW91c2VFdmVudCYmImJvb2xlYW4iIT10eXBlb2YgZiYmKGY9MD09PXRo''@;'; put 'put ''aXMuaG90LnNlbGVjdGlvbi5nZXRMYXllckxldmVsKCkmJmguaXNTaW5nbGUoKSksITEhPT1mPyh0aGlzLmFjdGl2ZUVkaXRvcnx8KHRoaXMuaG90LnNjcm9sbFRvRm9jdXNlZENlbGwoKSx0aGlzLnByZXBhcmVFZGl0b3IoKSksdGhpcy5hY3RpdmVFZGl0b3ImJihkJiZ0aGlzLmFjdGl2ZUVk''@;'; put 'put ''aXRvci5lbmFibGVGdWxsRWRpdE1vZGUoKSx0aGlzLmFjdGl2ZUVkaXRvci5iZWdpbkVkaXRpbmcobCxhKSkpOnRoaXMuY2xlYXJBY3RpdmVFZGl0b3IoKX1jbG9zZUVkaXRvcihsLGEsZCl7dGhpcy5hY3RpdmVFZGl0b3I/dGhpcy5hY3RpdmVFZGl0b3IuZmluaXNoRWRpdGluZyhsLGEsZCk6''@;'; put 'put ''ZCYmZCghMSl9Y2xvc2VFZGl0b3JBbmRTYXZlQ2hhbmdlcyhsKXt0aGlzLmNsb3NlRWRpdG9yKCExLGwpfWNsb3NlRWRpdG9yQW5kUmVzdG9yZU9yaWdpbmFsVmFsdWUobCl7dGhpcy5jbG9zZUVkaXRvcighMCxsKX1jbGVhckFjdGl2ZUVkaXRvcigpe3RoaXMuYWN0aXZlRWRpdG9yPXZvaWQg''@;'; put 'put ''MH1pc0NlbGxFZGl0YWJsZSgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCFsKXJldHVybiExO2NvbnN0IGE9dGhpcy5ob3QuZ2V0Q2VsbEVkaXRvcih0aGlzLmNlbGxQcm9wZXJ0aWVzKSx7cm93OmQsY29sOmh9PWwuaGlnaGxpZ2h0LHtyb3dJbmRleE1h''@;'; put 'put ''cHBlcjpmLGNvbHVtbkluZGV4TWFwcGVyOnZ9PXRoaXMuaG90LE09Zi5pc0hpZGRlbih0aGlzLmhvdC50b1BoeXNpY2FsUm93KGQpKXx8di5pc0hpZGRlbih0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGgpKTtyZXR1cm4hKHRoaXMuY2VsbFByb3BlcnRpZXMucmVhZE9ubHl8fCFhfHxNKX1t''@;'; put 'put ''b3ZlU2VsZWN0aW9uQWZ0ZXJFbnRlcihsKXtjb25zdCBhPXsuLi4iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy50YWJsZU1ldGEuZW50ZXJNb3Zlcz90aGlzLnRhYmxlTWV0YS5lbnRlck1vdmVzKGwpOnRoaXMudGFibGVNZXRhLmVudGVyTW92ZXN9O2wuc2hpZnRLZXkmJihhLnJvdz0tYS5yb3cs''@;'; put 'put ''YS5jb2w9LWEuY29sKSx0aGlzLmhvdC5zZWxlY3Rpb24uaXNNdWx0aXBsZSgpP3RoaXMuc2VsZWN0aW9uLnRyYW5zZm9ybUZvY3VzKGEucm93LGEuY29sKTp0aGlzLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydChhLnJvdyxhLmNvbCwhMCl9ZGVzdHJveSgpe3RoaXMuZGVzdHJveWVkPSEwLHRo''@;'; put 'put ''aXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKX19ZnVuY3Rpb24gT2dlKGMpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCF0aGlzLmhvdC5pc0xpc3RlbmluZygpfHwhbHx8bC5oaWdobGlnaHQuaXNIZWFkZXIoKXx8RDYoYykpcmV0dXJuO2NvbnN0e2tleUNv''@;'; put 'put ''ZGU6YX09YyxkPShjLmN0cmxLZXl8fGMubWV0YUtleSkmJiFjLmFsdEtleTsoIXRoaXMuYWN0aXZlRWRpdG9yfHx0aGlzLmFjdGl2ZUVkaXRvciYmIXRoaXMuYWN0aXZlRWRpdG9yLmlzV2FpdGluZygpKSYmIXVKKGEpJiYhU2dlKGEpJiYhZCYmIXRoaXMuaXNFZGl0b3JPcGVuZWQoKSYmdGhp''@;'; put 'put ''cy5vcGVuRWRpdG9yKCIiLGMpfWZ1bmN0aW9uIHZpdChjLGwpe2wuaXNDZWxsKCkmJih0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCk/dGhpcy5jbGVhckFjdGl2ZUVkaXRvcigpOnRoaXMub3BlbkVkaXRvcihudWxsLGMsITApKX1jb25zdCBQZ2U9bmV3IFdl''@;'; put 'put ''YWtNYXA7YkouZ2V0SW5zdGFuY2U9ZnVuY3Rpb24oYyxsLGEpe2xldCBkPVBnZS5nZXQoYyk7cmV0dXJuIGR8fChkPW5ldyBiSihjLGwsYSksUGdlLnNldChjLGQpKSxkfTtjb25zdCB5aXQ9Yko7YigxNjIyOSk7Y29uc3QgRmdlPXsiJm5ic3A7IjoiICIsIiZhbXA7IjoiJiIsIiZsdDsiOiI8''@;'; put 'put ''IiwiJmd0OyI6Ij4ifSxiaXQ9bmV3IFJlZ0V4cChPYmplY3Qua2V5cyhGZ2UpLm1hcChjPT5gKCR7Y30pYCkuam9pbigifCIpLCJnaSIpO2Z1bmN0aW9uIF9KKGMpe2NvbnN0IGw9Yy5oYXNDb2xIZWFkZXJzKCksYT1jLmhhc1Jvd0hlYWRlcnMoKSxkPVtsPy0xOjAsYT8tMTowLGMuY291bnRS''@;'; put 'put ''b3dzKCktMSxjLmNvdW50Q29scygpLTFdLGg9Yy5nZXREYXRhKC4uLmQpLGY9aC5sZW5ndGgsdj1mPjA/aFswXS5sZW5ndGg6MCxNPVsiPHRhYmxlPiIsIjwvdGFibGU+Il0sRD1sP1siPHRoZWFkPiIsIjwvdGhlYWQ+Il06W10sVT1bIjx0Ym9keT4iLCI8L3Rib2R5PiJdLHRlPWE/MTowLG9l''@;'; put 'put ''PWw/MTowO2ZvcihsZXQgdmU9MDt2ZTxmO3ZlKz0xKXtjb25zdCB3ZT1sJiYwPT09dmUsRmU9W107Zm9yKGxldCBudD0wO250PHY7bnQrPTEpe2NvbnN0IGR0PSF3ZSYmYSYmMD09PW50O2xldCBtdD0iIjtpZih3ZSltdD1gPHRoPiR7Yy5nZXRDb2xIZWFkZXIobnQtdGUpfTwvdGg+YDtlbHNl''@;'; put 'put ''IGlmKGR0KW10PWA8dGg+JHtjLmdldFJvd0hlYWRlcih2ZS1vZSl9PC90aD5gO2Vsc2V7Y29uc3QgJHQ9aFt2ZV1bbnRdLHtoaWRkZW46enQscm93c3Bhbjp5bixjb2xzcGFuOmdufT1jLmdldENlbGxNZXRhKHZlLW9lLG50LXRlKTtpZighenQpe2NvbnN0IHduPVtdO2lmKHluJiZ3bi5wdXNo''@;'; put 'put ''KGByb3dzcGFuPSIke3lufSJgKSxnbiYmd24ucHVzaChgY29sc3Bhbj0iJHtnbn0iYCksdHUoJHQpKW10PWA8dGQgJHt3bi5qb2luKCIgIil9PjwvdGQ+YDtlbHNle2NvbnN0IFJuPSR0LnRvU3RyaW5nKCkucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikucmVwbGFj''@;'; put 'put ''ZSgvKDxicihccyp8XC8pPihcclxufFxuKT98XHJcbnxcbikvZywiPGJyPlxyXG4iKS5yZXBsYWNlKC9ceDIwL2dpLCImbmJzcDsiKS5yZXBsYWNlKC9cdC9naSwiJiM5OyIpO210PWA8dGQgJHt3bi5qb2luKCIgIil9PiR7Um59PC90ZD5gfX19RmUucHVzaChtdCl9Y29uc3QgV2U9WyI8dHI+''@;'; put 'put ''IiwuLi5GZSwiPC90cj4iXS5qb2luKCIiKTt3ZT9ELnNwbGljZSgxLDAsV2UpOlUuc3BsaWNlKC0xLDAsV2UpfXJldHVybiBNLnNwbGljZSgxLDAsRC5qb2luKCIiKSxVLmpvaW4oIiIpKSxNLmpvaW4oIiIpfWZ1bmN0aW9uIHdKKGMpe2NvbnN0IGw9Yy5sZW5ndGgsYT1bIjx0YWJsZT4iXTtm''@;'; put 'put ''b3IobGV0IGQ9MDtkPGw7ZCs9MSl7Y29uc3QgaD1jW2RdLGY9aC5sZW5ndGgsdj1bXTswPT09ZCYmYS5wdXNoKCI8dGJvZHk+Iik7Zm9yKGxldCBNPTA7TTxmO00rPTEpe2NvbnN0IEQ9aFtNXSxVPXR1KEQpPyIiOkQudG9TdHJpbmcoKS5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZSgv''@;'; put 'put ''PC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikucmVwbGFjZSgvKDxicihccyp8XC8pPihcclxufFxuKT98XHJcbnxcbikvZywiPGJyPlxyXG4iKS5yZXBsYWNlKC9ceDIwezIsfS9naSx0ZT0+YDxzcGFuIHN0eWxlPSJtc28tc3BhY2VydW46IHllcyI+JHsiJm5ic3A7Ii5yZXBlYXQo''@;'; put 'put ''dGUubGVuZ3RoLTEpfSA8L3NwYW4+YCkucmVwbGFjZSgvXHQvZ2ksIiYjOTsiKTt2LnB1c2goYDx0ZD4ke1V9PC90ZD5gKX1hLnB1c2goIjx0cj4iLC4uLnYsIjwvdHI+IiksZCsxPT09bCYmYS5wdXNoKCI8L3Rib2R5PiIpfXJldHVybiBhLnB1c2goIjwvdGFibGU+IiksYS5qb2luKCIiKX1m''@;'; put 'put ''dW5jdGlvbiBDSihjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06ZG9jdW1lbnQ7Y29uc3QgYT17fSxkPWwuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGg9bC5jcmVhdGVFbGVtZW50KCJkaXYiKTtkLmFwcGVuZENoaWxkKGgp''@;'; put 'put ''O2xldCBmPWM7aWYoInN0cmluZyI9PXR5cGVvZiBmKXtjb25zdCAkdD1mLnJlcGxhY2UoLzx0ZFxiW14+XSo/PihbXHNcU10qPyk8XC9ccyp0ZD4vZyx6dD0+e2NvbnN0IHluPXp0Lm1hdGNoKC88dGRcYltePl0qPz4vZylbMF07cmV0dXJuYCR7eW59JHt6dC5zdWJzdHJpbmcoeW4ubGVuZ3Ro''@;'; put 'put ''LHp0Lmxhc3RJbmRleE9mKCI8IikpLnRyaW0oKS5yZXBsYWNlQWxsKC9cblxzKy9nLCIgIikucmVwbGFjZUFsbCgvPHAuKj8+L2csIlxuIikucmVwbGFjZSgiXG4iLCIiKS5yZXBsYWNlQWxsKC88XC8oLiopPlxzKyQvZ20sIjwvJDE+IikucmVwbGFjZSgvKDwoPyFicikoW14+XSspPikvZ2ks''@;'; put 'put ''IiIpLnJlcGxhY2VBbGwoL14mbmJzcDskL2dtLCIiKX08L3RkPmB9KTtoLmluc2VydEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdpbiIsYCR7JHR9YCksZj1oLnF1ZXJ5U2VsZWN0b3IoInRhYmxlIil9aWYoIWZ8fCFmdW5jdGlvbiBfaXQoYyl7cmV0dXJuIlRBQkxFIj09PShjJiZjLm5vZGVOYW1l''@;'; put 'put ''fHwiIil9KGYpKXJldHVybjtjb25zdCB2PWgucXVlcnlTZWxlY3RvcignbWV0YVtuYW1lJD0iZW5lcmF0b3IiXScpLE09bnVsbCE9PWYucXVlcnlTZWxlY3RvcigidGJvZHkgdGgiKSxEPWYucXVlcnlTZWxlY3RvcigidHIiKSxVPUQ/QXJyYXkuZnJvbShELmNlbGxzKS5yZWR1Y2UoKCR0LHp0''@;'; put 'put ''KT0+JHQrenQuY29sU3BhbiwwKS0oTT8xOjApOjAsdGU9Zi50Rm9vdCYmQXJyYXkuZnJvbShmLnRGb290LnJvd3MpfHxbXSxvZT1bXTtsZXQgdmU9ITEsd2U9MCxGZT0wO2lmKGYudEhlYWQpe2NvbnN0ICR0PUFycmF5LmZyb20oZi50SGVhZC5yb3dzKS5maWx0ZXIoenQ9Pntjb25zdCB5bj1u''@;'; put 'put ''dWxsIT09enQucXVlcnlTZWxlY3RvcigidGQiKTtyZXR1cm4geW4mJm9lLnB1c2goenQpLCF5bn0pO3dlPSR0Lmxlbmd0aCx2ZT13ZT4wLHdlPjE/YS5uZXN0ZWRIZWFkZXJzPUFycmF5LmZyb20oJHQpLnJlZHVjZSgoenQseW4pPT57Y29uc3QgZ249QXJyYXkuZnJvbSh5bi5jZWxscykucmVk''@;'; put 'put ''dWNlKCh3bixSbixEcik9PntpZihNJiYwPT09RHIpcmV0dXJuIHduO2NvbnN0e2NvbFNwYW46THIsaW5uZXJIVE1MOmRyfT1SbjtyZXR1cm4gd24ucHVzaChMcj4xP3tsYWJlbDpkcixjb2xzcGFuOkxyfTpkciksd259LFtdKTtyZXR1cm4genQucHVzaChnbiksenR9LFtdKTp2ZSYmKGEuY29s''@;'; put 'put ''SGVhZGVycz1BcnJheS5mcm9tKCR0WzBdLmNoaWxkcmVuKS5yZWR1Y2UoKHp0LHluLGduKT0+KE0mJjA9PT1nbnx8enQucHVzaCh5bi5pbm5lckhUTUwpLHp0KSxbXSkpfW9lLmxlbmd0aCYmKGEuZml4ZWRSb3dzVG9wPW9lLmxlbmd0aCksdGUubGVuZ3RoJiYoYS5maXhlZFJvd3NCb3R0b209''@;'; put 'put ''dGUubGVuZ3RoKTtjb25zdCBXZT1bLi4ub2UsLi4uQXJyYXkuZnJvbShmLnRCb2RpZXMpLnJlZHVjZSgoJHQsenQpPT4oJHQucHVzaCguLi5BcnJheS5mcm9tKHp0LnJvd3MpKSwkdCksW10pLC4uLnRlXTtGZT1XZS5sZW5ndGg7Y29uc3QgbnQ9bmV3IEFycmF5KEZlKTtmb3IobGV0ICR0PTA7''@;'; put 'put ''JHQ8RmU7JHQrKyludFskdF09bmV3IEFycmF5KFUpO2NvbnN0IGR0PVtdLG10PVtdO2ZvcihsZXQgJHQ9MDskdDxGZTskdCsrKXtjb25zdCB5bj1BcnJheS5mcm9tKFdlWyR0XS5jZWxscyksZ249eW4ubGVuZ3RoO2ZvcihsZXQgd249MDt3bjxnbjt3bisrKXtjb25zdCBSbj15blt3bl0se25v''@;'; put 'put ''ZGVOYW1lOkRyLGlubmVySFRNTDpMcixyb3dTcGFuOmRyLGNvbFNwYW46TXJ9PVJuLHZpPW50WyR0XS5maW5kSW5kZXgoTm49PnZvaWQgMD09PU5uKTtpZigiVEQiPT09RHIpe2lmKGRyPjF8fE1yPjEpe2ZvcihsZXQgVHI9JHQ7VHI8JHQrZHI7VHIrKylpZihUcjxGZSlmb3IobGV0ICRyPXZp''@;'; put 'put ''OyRyPHZpK01yOyRyKyspbnRbVHJdWyRyXT1udWxsO2NvbnN0IEJyPVJuLmdldEF0dHJpYnV0ZSgic3R5bGUiKTtCciYmQnIuaW5jbHVkZXMoIm1zby1pZ25vcmU6Y29sc3BhbiIpfHxkdC5wdXNoKHtjb2w6dmkscm93OiR0LHJvd3NwYW46ZHIsY29sc3BhbjpNcn0pfWxldCBObj0iIjtObj12''@;'; put 'put ''JiYvZXhjZWwvZ2kudGVzdCh2LmNvbnRlbnQpP0xyLnJlcGxhY2UoL1tcclxuXVtceDIwXXswLDJ9L2csIiAiKS5yZXBsYWNlKC88YnIoXHMqfFwvKT5bXHJcbl0/W1x4MjBdezAsM30vZ2ltLCJcclxuIik6THIucmVwbGFjZSgvPGJyKFxzKnxcLyk+W1xyXG5dPy9naW0sIlxyXG4iKSxudFsk''@;'; put 'put ''dF1bdmldPU5uLnJlcGxhY2UoYml0LEJyPT5GZ2VbQnJdKX1lbHNlIG10LnB1c2goTHIpfX1yZXR1cm4gZHQubGVuZ3RoJiYoYS5tZXJnZUNlbGxzPWR0KSxtdC5sZW5ndGgmJihhLnJvd0hlYWRlcnM9bXQpLG50Lmxlbmd0aCYmKGEuZGF0YT1udCksYX1mdW5jdGlvbiBqMShjKXtsZXQgbD1h''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W107Y29uc3QgYT10eXBlb2YgYztpZigibnVtYmVyIj09PWEpcmV0dXJuIWlzTmFOKGMpJiZpc0Zpbml0ZShjKTtpZigic3RyaW5nIj09PWEpe2lmKDA9PT1jLmxlbmd0aClyZXR1cm4hMTtpZigx''@;'; put 'put ''PT09Yy5sZW5ndGgpcmV0dXJuL1xkLy50ZXN0KGMpO2NvbnN0IGQ9QXJyYXkuZnJvbShuZXcgU2V0KFsiLiIsLi4ubF0pKS5tYXAoaD0+YFxcJHtofWApLmpvaW4oInwiKTtyZXR1cm4gbmV3IFJlZ0V4cChgXlsrLV0/KCgoJHtkfSk/XFxkKygoJHtkfSlcXGQrKT8oZVsrLV0/XFxkKyk/KXwo''@;'; put 'put ''MHhbYS1mXFxkXSspKSRgLCJpIikudGVzdChjLnRyaW0oKSl9cmV0dXJuIm9iamVjdCI9PT1hJiYhKCFjfHwibnVtYmVyIiE9dHlwZW9mIGMudmFsdWVPZigpfHxjIGluc3RhbmNlb2YgRGF0ZSl9ZnVuY3Rpb24gSGdlKGMpe3JldHVybiBqMShjLFsiLCJdKX1mdW5jdGlvbiBRYShjLGwsYSl7''@;'; put 'put ''bGV0IGQ9LTE7Zm9yKCJmdW5jdGlvbiI9PXR5cGVvZiBsPyhhPWwsbD1jKTpkPWMtMTsrK2Q8PWwmJiExIT09YShkKTspO31mdW5jdGlvbiBTSihjLGwsYSl7bGV0IGQ9YysxO2ZvcigiZnVuY3Rpb24iPT10eXBlb2YgbCYmKGE9bCxsPTApOy0tZD49bCYmITEhPT1hKGQpOyk7fWZ1bmN0aW9u''@;'; put 'put ''IE1KKGMsbCl7cmV0dXJuIGw9cGFyc2VJbnQobC50b1N0cmluZygpLnJlcGxhY2UoIiUiLCIiKSwxMCksbD1pc05hTihsKT8wOmwscGFyc2VJbnQoYypsLzEwMCwxMCl9ZnVuY3Rpb24gZ3MoYyxsLGEpe3JldHVybiBNYXRoLm1pbihjLGwpPT09Yz9sOk1hdGgubWF4KGMsYSk9PT1jP2E6Y31m''@;'; put 'put ''dW5jdGlvbiBOZ2UoYyl7Y29uc3QgbD1jLnJlcGxhY2UoIiwiLCIuIik7cmV0dXJuITE9PT1pc05hTihwYXJzZUZsb2F0KGwpKT9wYXJzZUZsb2F0KGwpOm51bGx9ZnVuY3Rpb24gdHYoYyl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoYykmJmM+PTB9Y29uc3QgVmdlPW5ldyBNYXAoW1siYXNj''@;'; put 'put ''IixbLTEsMV1dLFsiZGVzYyIsWzEsLTFdXV0pLENpdD1jPT5gVGhlIHByaW9yaXR5ICcke2N9JyBpcyBhbHJlYWR5IGRlY2xhcmVkIGluIGEgbWFwLmAsU2l0PWM9PmBUaGUgcHJpb3JpdHkgJyR7Y30nIGlzIG5vdCBhIG51bWJlci5gLHhpdD1jPT5gVGhlIGlkICcke2N9JyBpcyBhbHJlYWR5''@;'; put 'put ''IGRlY2xhcmVkIGluIGEgbWFwLmA7ZnVuY3Rpb24gS0EoKXtsZXR7ZXJyb3JJZEV4aXN0czpjfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307Y29uc3QgbD1uZXcgTWFwO2Z1bmN0aW9uIE0oKXtyZXR1cm5bLi4ubF19ZnVuY3Rpb24g''@;'; put 'put ''VSh0ZSl7cmV0dXJuIGwuaGFzKHRlKX1yZXR1cm4gYz1pbChjKT9jOnhpdCx7YWRkSXRlbTpmdW5jdGlvbiBhKHRlLG9lKXtpZihVKHRlKSl0aHJvdyBuZXcgRXJyb3IoYyh0ZSkpO2wuc2V0KHRlLG9lKX0sY2xlYXI6ZnVuY3Rpb24gaCgpe2wuY2xlYXIoKX0sZ2V0SWQ6ZnVuY3Rpb24gZih0''@;'; put 'put ''ZSl7Y29uc3Rbb2VdPU0oKS5maW5kKHZlPT57bGV0W3dlLEZlXT12ZTtyZXR1cm4gdGU9PT1GZSYmd2V9KXx8W251bGxdO3JldHVybiBvZX0sZ2V0SXRlbTpmdW5jdGlvbiB2KHRlKXtyZXR1cm4gbC5nZXQodGUpfSxnZXRJdGVtczpNLGdldFZhbHVlczpmdW5jdGlvbiBEKCl7cmV0dXJuWy4u''@;'; put 'put ''LmwudmFsdWVzKCldfSxoYXNJdGVtOlUscmVtb3ZlSXRlbTpmdW5jdGlvbiBkKHRlKXtyZXR1cm4gbC5kZWxldGUodGUpfX19Y29uc3QgRWl0PWM9PmAnJHtjfScgdmFsdWUgaXMgYWxyZWFkeSBkZWNsYXJlZCBpbiBhIHVuaXF1ZSBzZXQuYCxFSj1jPT5gVGhlcmUgaXMgYWxyZWFkeSByZWdp''@;'; put 'put ''c3RlcmVkICIke2N9IiBwbHVnaW4uYCxCZ2U9ZnVuY3Rpb24gTWl0KCl7bGV0e2Vycm9yUHJpb3JpdHlFeGlzdHM6YyxlcnJvclByaW9yaXR5TmFOOmx9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtjb25zdCBhPW5ldyBNYXA7cmV0''@;'; put 'put ''dXJuIGM9aWwoYyk/YzpDaXQsbD1pbChsKT9sOlNpdCx7YWRkSXRlbTpmdW5jdGlvbiBkKGYsdil7aWYoIWoxKGYpKXRocm93IG5ldyBFcnJvcihsKGYpKTtpZihhLmhhcyhmKSl0aHJvdyBuZXcgRXJyb3IoYyhmKSk7YS5zZXQoZix2KX0sZ2V0SXRlbXM6ZnVuY3Rpb24gaCgpe2xldCBmPWFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiYXNjIjtjb25zdFt2LE1dPVZnZS5nZXQoZil8fFZnZS5nZXQoImFzYyIpO3JldHVyblsuLi5hXS5zb3J0KChELFUpPT5EWzBdPFVbMF0/djpNKS5tYXAoRD0+RFsxXSl9fX0oe2Vycm9yUHJpb3Jp''@;'; put 'put ''dHlFeGlzdHM6Yz0+YFRoZXJlIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBwbHVnaW4gb24gcHJpb3JpdHkgIiR7Y30iLmAsZXJyb3JQcmlvcml0eU5hTjpjPT5gVGhlIHByaW9yaXR5ICIke2N9IiBpcyBub3QgYSBudW1iZXIuYH0pLGpnZT1mdW5jdGlvbiBUaXQoKXtsZXR7ZXJyb3JJdGVtRXhp''@;'; put 'put ''c3RzOmN9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtjb25zdCBsPW5ldyBTZXQ7cmV0dXJuIGM9aWwoYyk/YzpFaXQse2FkZEl0ZW06ZnVuY3Rpb24gYShmKXtpZihsLmhhcyhmKSl0aHJvdyBuZXcgRXJyb3IoYyhmKSk7bC5hZGQo''@;'; put 'put ''Zil9LGNsZWFyOmZ1bmN0aW9uIGgoKXtsLmNsZWFyKCl9LGdldEl0ZW1zOmZ1bmN0aW9uIGQoKXtyZXR1cm5bLi4ubF19fX0oe2Vycm9ySXRlbUV4aXN0czpFSn0pLFRKPUtBKHtlcnJvcklkRXhpc3RzOkVKfSk7ZnVuY3Rpb24gQUooKXtyZXR1cm5bLi4uQmdlLmdldEl0ZW1zKCksLi4uamdl''@;'; put 'put ''LmdldEl0ZW1zKCldfWZ1bmN0aW9uIFhBKGMpe2NvbnN0IGw9VjEoYyk7cmV0dXJuIFRKLmdldEl0ZW0obCl9ZnVuY3Rpb24gU3MoYyxsLGEpe1tjLGwsYV09ZnVuY3Rpb24gRGl0KGMsbCxhKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYyYmKGM9KGw9YykuUExVR0lOX0tFWSxhPWwuUExV''@;'; put 'put ''R0lOX1BSSU9SSVRZKSxbYyxsLGFdfShjLGwsYSksdm9pZCAwPT09WEEoYykmJmZ1bmN0aW9uIGtpdChjLGwsYSl7Y29uc3QgZD1WMShjKTtpZihUSi5oYXNJdGVtKGQpKXRocm93IG5ldyBFcnJvcihFSihkKSk7dm9pZCAwPT09YT9qZ2UuYWRkSXRlbShkKTpCZ2UuYWRkSXRlbShhLGQpLFRK''@;'; put 'put ''LmFkZEl0ZW0oZCxsKX0oYyxsLGEpfWNvbnN0e3JlZ2lzdGVyOklpdCxnZXRJdGVtOlJpdCxoYXNJdGVtOnpnZSxnZXROYW1lczpMaXR9PU5mKCJyZW5kZXJlcnMiKTtmdW5jdGlvbiBwTihjKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYylyZXR1cm4gYztpZighemdlKGMpKXRocm93IEVycm9y''@;'; put 'put ''KGBObyByZWdpc3RlcmVkIHJlbmRlcmVyIGZvdW5kIHVuZGVyICIke2N9IiBuYW1lYCk7cmV0dXJuIFJpdChjKX1mdW5jdGlvbiBBMihjLGwpeyJzdHJpbmciIT10eXBlb2YgYyYmKGM9KGw9YykuUkVOREVSRVJfVFlQRSksSWl0KGMsbCl9Y29uc3R7cmVnaXN0ZXI6T2l0LGdldEl0ZW06UGl0''@;'; put 'put ''LGhhc0l0ZW06VWdlLGdldE5hbWVzOkZpdH09TmYoInZhbGlkYXRvcnMiKTtmdW5jdGlvbiBrSihjKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYylyZXR1cm4gYztpZighVWdlKGMpKXRocm93IEVycm9yKGBObyByZWdpc3RlcmVkIHZhbGlkYXRvciBmb3VuZCB1bmRlciAiJHtjfSIgbmFtZWAp''@;'; put 'put ''O3JldHVybiBQaXQoYyl9ZnVuY3Rpb24gbnYoYyxsKXsic3RyaW5nIiE9dHlwZW9mIGMmJihjPShsPWMpLlZBTElEQVRPUl9UWVBFKSxPaXQoYyxsKX1mdW5jdGlvbiBUNChjLGwsYSl7KGZ1bmN0aW9uIEhpdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBp''@;'; put 'put ''bml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gaW8oYyxsKXtyZXR1cm4gYy5nZXQoWmdlKGMsbCkpfWZ1bmN0aW9uIFI2KGMsbCxhKXtyZXR1cm4gYy5zZXQoWmdlKGMsbCksYSksYX1mdW5j''@;'; put 'put ''dGlvbiBaZ2UoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBCZj1uZXcg''@;'; put 'put ''V2Vha01hcCxESj1uZXcgV2Vha01hcCxVMD1uZXcgV2Vha01hcCxqdz1uZXcgV2Vha01hcCxnTj1uZXcgV2Vha01hcCxxMz1uZXcgV2Vha01hcCxJSj1uZXcgV2Vha01hcCxxQT1uZXcgV2Vha01hcCxydj1uZXcgV2Vha01hcCxBND1uZXcgV2Vha01hcDtjb25zdCBXZ2U9Y2xhc3MgTml0e2Nv''@;'; put 'put ''bnN0cnVjdG9yKGwsYSxkLGgsZix2KXtsZXQgTT1hcmd1bWVudHMubGVuZ3RoPjYmJnZvaWQgMCE9PWFyZ3VtZW50c1s2XT9hcmd1bWVudHNbNl06bnVsbDtUNCh0aGlzLEJmLHZvaWQgMCksVDQodGhpcyxESix2b2lkIDApLFQ0KHRoaXMsVTAsdm9pZCAwKSxUNCh0aGlzLGp3LHZvaWQgMCks''@;'; put 'put ''VDQodGhpcyxnTix2b2lkIDApLFQ0KHRoaXMscTMsdm9pZCAwKSxUNCh0aGlzLElKLHZvaWQgMCksVDQodGhpcyxxQSx2b2lkIDApLFQ0KHRoaXMscnYsW251bGwsbnVsbF0pLFQ0KHRoaXMsQTQsW251bGwsbnVsbF0pLFI2KEJmLHRoaXMsZCksUjYoREosdGhpcyxhKSxSNihVMCx0aGlzLGYp''@;'; put 'put ''LFI2KGp3LHRoaXMsdiksUjYoZ04sdGhpcyxNKSxSNihxMyx0aGlzLGgpLFI2KElKLHRoaXMsbCksdGhpcy5yZWdpc3RlckV2ZW50cygpfXJlZ2lzdGVyRXZlbnRzKCl7aW8ocTMsdGhpcykuYWRkRXZlbnRMaXN0ZW5lcihpbyhVMCx0aGlzKS5ob2xkZXIsImNvbnRleHRtZW51IixkPT50aGlz''@;'; put 'put ''Lm9uQ29udGV4dE1lbnUoZCkpLGlvKHEzLHRoaXMpLmFkZEV2ZW50TGlzdGVuZXIoaW8oVTAsdGhpcykuVEFCTEUsIm1vdXNlb3ZlciIsZD0+dGhpcy5vbk1vdXNlT3ZlcihkKSksaW8ocTMsdGhpcykuYWRkRXZlbnRMaXN0ZW5lcihpbyhVMCx0aGlzKS5UQUJMRSwibW91c2VvdXQiLGQ9PnRo''@;'; put 'put ''aXMub25Nb3VzZU91dChkKSk7Y29uc3QgbD0oKT0+e2lvKHEzLHRoaXMpLmFkZEV2ZW50TGlzdGVuZXIoaW8oVTAsdGhpcykuaG9sZGVyLCJ0b3VjaHN0YXJ0IixkPT50aGlzLm9uVG91Y2hTdGFydChkKSksaW8ocTMsdGhpcykuYWRkRXZlbnRMaXN0ZW5lcihpbyhVMCx0aGlzKS5ob2xkZXIs''@;'; put 'put ''InRvdWNoZW5kIixkPT50aGlzLm9uVG91Y2hFbmQoZCkpLHRoaXMubW9tZW50dW1TY3JvbGxpbmd8fCh0aGlzLm1vbWVudHVtU2Nyb2xsaW5nPXt9KSxpbyhxMyx0aGlzKS5hZGRFdmVudExpc3RlbmVyKGlvKFUwLHRoaXMpLmhvbGRlciwic2Nyb2xsIiwoKT0+e2NsZWFyVGltZW91dCh0aGlz''@;'; put 'put ''Lm1vbWVudHVtU2Nyb2xsaW5nLl90aW1lb3V0KSx0aGlzLm1vbWVudHVtU2Nyb2xsaW5nLm9uZ29pbmd8fGlvKEJmLHRoaXMpLmdldFNldHRpbmcoIm9uQmVmb3JlVG91Y2hTY3JvbGwiKSx0aGlzLm1vbWVudHVtU2Nyb2xsaW5nLm9uZ29pbmc9ITAsdGhpcy5tb21lbnR1bVNjcm9sbGluZy5f''@;'; put 'put ''dGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy50b3VjaEFwcGxpZWR8fCh0aGlzLm1vbWVudHVtU2Nyb2xsaW5nLm9uZ29pbmc9ITEsaW8oQmYsdGhpcykuZ2V0U2V0dGluZygib25BZnRlck1vbWVudHVtU2Nyb2xsIikpfSwyMDApfSl9O1gzKCk/bCgpOigkcSgpJiZsKCksKCgpPT57aW8o''@;'; put 'put ''cTMsdGhpcykuYWRkRXZlbnRMaXN0ZW5lcihpbyhVMCx0aGlzKS5ob2xkZXIsIm1vdXNldXAiLGQ9PnRoaXMub25Nb3VzZVVwKGQpKSxpbyhxMyx0aGlzKS5hZGRFdmVudExpc3RlbmVyKGlvKFUwLHRoaXMpLmhvbGRlciwibW91c2Vkb3duIixkPT50aGlzLm9uTW91c2VEb3duKGQpKX0pKCkp''@;'; put 'put ''fXNlbGVjdGVkQ2VsbFdhc1RvdWNoZWQobCl7Y29uc3QgZD10aGlzLnBhcmVudENlbGwobCkuY29vcmRzO2lmKGlvKHFBLHRoaXMpJiZkKXtjb25zdFtoLGZdPVtkLnJvdyxpbyhxQSx0aGlzKS5mcm9tLnJvd10sW3YsTV09W2QuY29sLGlvKHFBLHRoaXMpLmZyb20uY29sXTtyZXR1cm4gaD09''@;'; put 'put ''PWYmJnY9PT1NfXJldHVybiExfXBhcmVudENlbGwobCl7Y29uc3QgYT17fSxoPXpBKGwsWyJURCIsIlRIIl0saW8oVTAsdGhpcykuVEFCTEUpO3JldHVybiBoPyhhLmNvb3Jkcz1pbyhVMCx0aGlzKS5nZXRDb29yZHMoaCksYS5URD1oKTpDbyhsLCJ3dEJvcmRlciIpJiZDbyhsLCJjdXJyZW50''@;'; put 'put ''Iik/KGEuY29vcmRzPWlvKGp3LHRoaXMpLmdldEZvY3VzU2VsZWN0aW9uKCkuY2VsbFJhbmdlLmhpZ2hsaWdodCxhLlREPWlvKFUwLHRoaXMpLmdldENlbGwoYS5jb29yZHMpKTpDbyhsLCJ3dEJvcmRlciIpJiZDbyhsLCJhcmVhIikmJmlvKGp3LHRoaXMpLmdldEFyZWFTZWxlY3Rpb24oKS5j''@;'; put 'put ''ZWxsUmFuZ2UmJihhLmNvb3Jkcz1pbyhqdyx0aGlzKS5nZXRBcmVhU2VsZWN0aW9uKCkuY2VsbFJhbmdlLnRvLGEuVEQ9aW8oVTAsdGhpcykuZ2V0Q2VsbChhLmNvb3JkcykpLGF9b25Nb3VzZURvd24obCl7Y29uc3QgYT1pbyhESix0aGlzKS5yb290RG9jdW1lbnQuYWN0aXZlRWxlbWVudCxk''@;'; put 'put ''PWNKKG9nZSxsLnRhcmdldCksaD1sLnRhcmdldDtpZighWyJURCIsIlRIIl0uaW5jbHVkZXMoYS5ub2RlTmFtZSkmJihoPT09YXx8ZCgwKT09PWF8fGQoMSk9PT1hKSlyZXR1cm47Y29uc3QgZj10aGlzLnBhcmVudENlbGwoaCk7Q28oaCwiY29ybmVyIik/aW8oQmYsdGhpcykuZ2V0U2V0dGlu''@;'; put 'put ''Zygib25DZWxsQ29ybmVyTW91c2VEb3duIixsLGgpOmYuVEQmJmlvKEJmLHRoaXMpLmhhcygib25DZWxsTW91c2VEb3duIikmJnRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxNb3VzZURvd24iLGwsZi5jb29yZHMsZi5URCksKDA9PT1sLmJ1dHRvbnx8dGhpcy50b3VjaEFwcGxpZWQpJiZmLlRE''@;'; put 'put ''JiYoaW8oQTQsdGhpcylbMF09Zi5URCxjbGVhclRpbWVvdXQoaW8ocnYsdGhpcylbMF0pLGlvKHJ2LHRoaXMpWzBdPXNldFRpbWVvdXQoKCk9PntpbyhBNCx0aGlzKVswXT1udWxsfSwxZTMpKX1vbkNvbnRleHRNZW51KGwpe2lmKGlvKEJmLHRoaXMpLmhhcygib25DZWxsQ29udGV4dE1lbnUi''@;'; put 'put ''KSl7Y29uc3QgYT10aGlzLnBhcmVudENlbGwobC50YXJnZXQpO2EuVEQmJnRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxDb250ZXh0TWVudSIsbCxhLmNvb3JkcyxhLlREKX19b25Nb3VzZU92ZXIobCl7aWYoIWlvKEJmLHRoaXMpLmhhcygib25DZWxsTW91c2VPdmVyIikpcmV0dXJuO2NvbnN0''@;'; put 'put ''IGE9aW8oVTAsdGhpcykuVEFCTEUsZD16QShsLnRhcmdldCxbIlREIiwiVEgiXSxhKSxoPWlvKGdOLHRoaXMpfHx0aGlzO2QmJmQhPT1oLmxhc3RNb3VzZU92ZXImJng2KGQsYSkmJihoLmxhc3RNb3VzZU92ZXI9ZCx0aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsTW91c2VPdmVyIixsLGlvKFUw''@;'; put 'put ''LHRoaXMpLmdldENvb3JkcyhkKSxkKSl9b25Nb3VzZU91dChsKXtpZighaW8oQmYsdGhpcykuaGFzKCJvbkNlbGxNb3VzZU91dCIpKXJldHVybjtjb25zdCBhPWlvKFUwLHRoaXMpLlRBQkxFLGQ9ekEobC50YXJnZXQsWyJURCIsIlRIIl0sYSksaD16QShsLnJlbGF0ZWRUYXJnZXQsWyJURCIs''@;'; put 'put ''IlRIIl0sYSksZj1pbyhnTix0aGlzKXx8dGhpcztkJiZkIT09aCYmeDYoZCxhKSYmKHRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxNb3VzZU91dCIsbCxpbyhVMCx0aGlzKS5nZXRDb29yZHMoZCksZCksbnVsbD09PWgmJihmLmxhc3RNb3VzZU92ZXI9bnVsbCkpfW9uTW91c2VVcChsKXtjb25z''@;'; put 'put ''dCBhPXRoaXMucGFyZW50Q2VsbChsLnRhcmdldCk7YS5URCYmaW8oQmYsdGhpcykuaGFzKCJvbkNlbGxNb3VzZVVwIikmJnRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxNb3VzZVVwIixsLGEuY29vcmRzLGEuVEQpLCgwPT09bC5idXR0b258fHRoaXMudG91Y2hBcHBsaWVkKSYmKGEuVEQ9PT1p''@;'; put 'put ''byhBNCx0aGlzKVswXSYmYS5URD09PWlvKEE0LHRoaXMpWzFdPyhDbyhsLnRhcmdldCwiY29ybmVyIik/dGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2VsbENvcm5lckRibENsaWNrIixsLGEuY29vcmRzLGEuVEQpOnRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxEYmxDbGljayIsbCxhLmNvb3Jkcyxh''@;'; put 'put ''LlREKSxpbyhBNCx0aGlzKVswXT1udWxsLGlvKEE0LHRoaXMpWzFdPW51bGwpOmEuVEQ9PT1pbyhBNCx0aGlzKVswXSYmKGlvKEE0LHRoaXMpWzFdPWEuVEQsY2xlYXJUaW1lb3V0KGlvKHJ2LHRoaXMpWzFdKSxpbyhydix0aGlzKVsxXT1zZXRUaW1lb3V0KCgpPT57aW8oQTQsdGhpcylbMV09''@;'; put 'put ''bnVsbH0sNTAwKSkpfW9uVG91Y2hTdGFydChsKXtSNihxQSx0aGlzLGlvKGp3LHRoaXMpLmdldEZvY3VzU2VsZWN0aW9uKCkuY2VsbFJhbmdlKSx0aGlzLnRvdWNoQXBwbGllZD0hMCx0aGlzLm9uTW91c2VEb3duKGwpfW9uVG91Y2hFbmQobCl7dmFyIGE7Y29uc3QgZD1sLnRhcmdldCxoPW51''@;'; put 'put ''bGw9PT0oYT10aGlzLnBhcmVudENlbGwoZCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmNvb3JkcyxmPU1hKGgpJiZoLnJvdz49MCYmaC5jb2w+PTA7aWYobC5jYW5jZWxhYmxlJiZmJiZpbyhCZix0aGlzKS5nZXRTZXR0aW5nKCJpc0RhdGFWaWV3SW5zdGFuY2UiKSl7Y29uc3QgTT1bIkEiLCJC''@;'; put 'put ''VVRUT04iLCJJTlBVVCJdO1hxKCkmJihyZ2UoKXx8aWdlKCkpJiZ0aGlzLnNlbGVjdGVkQ2VsbFdhc1RvdWNoZWQoZCkmJiFNLmluY2x1ZGVzKGQudGFnTmFtZSk/bC5wcmV2ZW50RGVmYXVsdCgpOnRoaXMuc2VsZWN0ZWRDZWxsV2FzVG91Y2hlZChkKXx8bC5wcmV2ZW50RGVmYXVsdCgpfXRo''@;'; put 'put ''aXMub25Nb3VzZVVwKGwpLHRoaXMudG91Y2hBcHBsaWVkPSExfWNhbGxMaXN0ZW5lcihsLGEsZCxoKXtjb25zdCBmPWlvKEJmLHRoaXMpLmdldFNldHRpbmdQdXJlKGwpO2YmJmYoYSxkLGgsaW8oSUosdGhpcykuY2FsbCh0aGlzKSl9ZGVzdHJveSgpe2NsZWFyVGltZW91dChpbyhydix0aGlz''@;'; put 'put ''KVswXSksY2xlYXJUaW1lb3V0KGlvKHJ2LHRoaXMpWzFdKSxpbyhxMyx0aGlzKS5kZXN0cm95KCl9fTtmdW5jdGlvbiBSSihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gVml0KGMpe3ZhciBsPWZ1bmN0aW9uIEJpdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFy''@;'; put 'put ''IGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUu''@;'; put 'put ''Iil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRh''@;'; put 'put ''YmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3Qgeml0PWNsYXNzIGppdHtjb25zdHJ1Y3RvcihsLGEsZCl7UkoodGhpcywib2Zmc2V0Iix2b2lkIDApLFJKKHRoaXMsInRvdGFsIix2b2lkIDApLFJKKHRoaXMsImNvdW50VEgiLHZvaWQgMCksdGhpcy5vZmZzZXQ9bCx0aGlzLnRvdGFsPWEsdGhpcy5j''@;'; put 'put ''b3VudFRIPWR9b2Zmc2V0dGVkKGwpe3JldHVybiBsK3RoaXMub2Zmc2V0fXVuT2Zmc2V0dGVkKGwpe3JldHVybiBsLXRoaXMub2Zmc2V0fXJlbmRlcmVkVG9Tb3VyY2UobCl7cmV0dXJuIHRoaXMub2Zmc2V0dGVkKGwpfXNvdXJjZVRvUmVuZGVyZWQobCl7cmV0dXJuIHRoaXMudW5PZmZzZXR0''@;'; put 'put ''ZWQobCl9b2Zmc2V0dGVkVEgobCl7cmV0dXJuIGwtdGhpcy5jb3VudFRIfXVuT2Zmc2V0dGVkVEgobCl7cmV0dXJuIGwrdGhpcy5jb3VudFRIfXZpc2libGVSb3dIZWFkZWRDb2x1bW5Ub1NvdXJjZUNvbHVtbihsKXtyZXR1cm4gdGhpcy5yZW5kZXJlZFRvU291cmNlKHRoaXMub2Zmc2V0dGVk''@;'; put 'put ''VEgobCkpfXNvdXJjZUNvbHVtblRvVmlzaWJsZVJvd0hlYWRlZENvbHVtbihsKXtyZXR1cm4gdGhpcy51bk9mZnNldHRlZFRIKHRoaXMuc291cmNlVG9SZW5kZXJlZChsKSl9fTtmdW5jdGlvbiBMSihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gVWl0KGMpe3ZhciBsPWZ1bmN0aW9uIFppdChj''@;'; put 'put ''LGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBA''@;'; put 'put ''dG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2''@;'; put 'put ''YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgWWl0PWNsYXNzIFdpdHtjb25zdHJ1Y3RvcihsLGEsZCl7TEoodGhpcywib2Zmc2V0Iix2b2lkIDApLExKKHRoaXMsInRvdGFsIix2b2lkIDApLExKKHRoaXMsImNvdW50VEgi''@;'; put 'put ''LHZvaWQgMCksdGhpcy5vZmZzZXQ9bCx0aGlzLnRvdGFsPWEsdGhpcy5jb3VudFRIPWR9b2Zmc2V0dGVkKGwpe3JldHVybiBsK3RoaXMub2Zmc2V0fXVuT2Zmc2V0dGVkKGwpe3JldHVybiBsLXRoaXMub2Zmc2V0fXJlbmRlcmVkVG9Tb3VyY2UobCl7cmV0dXJuIHRoaXMub2Zmc2V0dGVkKGwp''@;'; put 'put ''fXNvdXJjZVRvUmVuZGVyZWQobCl7cmV0dXJuIHRoaXMudW5PZmZzZXR0ZWQobCl9b2Zmc2V0dGVkVEgobCl7cmV0dXJuIGwtdGhpcy5jb3VudFRIfXVuT2Zmc2V0dGVkVEgobCl7cmV0dXJuIGwrdGhpcy5jb3VudFRIfXZpc2libGVDb2xIZWFkZWRSb3dUb1NvdXJjZVJvdyhsKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5yZW5kZXJlZFRvU291cmNlKHRoaXMub2Zmc2V0dGVkVEgobCkpfXNvdXJjZVJvd1RvVmlzaWJsZUNvbEhlYWRlZFJvdyhsKXtyZXR1cm4gdGhpcy51bk9mZnNldHRlZFRIKHRoaXMuc291cmNlVG9SZW5kZXJlZChsKSl9fTtmdW5jdGlvbiBtTihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rp''@;'; put 'put ''b24gR2l0KGMpe3ZhciBsPWZ1bmN0aW9uICRpdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJl''@;'; put 'put ''dHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4g''@;'; put 'put ''Yz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgS2l0e2NvbnN0cnVjdG9yKCl7bU4odGhpcywiY3VycmVudFNpemUiLDApLG1OKHRoaXMsIm5leHRTaXplIiwwKSxtTih0''@;'; put 'put ''aGlzLCJjdXJyZW50T2Zmc2V0IiwwKSxtTih0aGlzLCJuZXh0T2Zmc2V0IiwwKX1zZXRTaXplKGwpe3RoaXMuY3VycmVudFNpemU9dGhpcy5uZXh0U2l6ZSx0aGlzLm5leHRTaXplPWx9c2V0T2Zmc2V0KGwpe3RoaXMuY3VycmVudE9mZnNldD10aGlzLm5leHRPZmZzZXQsdGhpcy5uZXh0T2Zm''@;'; put 'put ''c2V0PWx9fWZ1bmN0aW9uIFBKKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBxaXQoYyl7dmFyIGw9ZnVuY3Rpb24gSml0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxs''@;'; put 'put ''KGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmci''@;'; put 'put ''KTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBRaXR7Y29uc3RydWN0b3IoKXtQSih0aGlzLCJz''@;'; put 'put ''aXplIixuZXcgS2l0KSxQSih0aGlzLCJ3b3JraW5nU3BhY2UiLDApLFBKKHRoaXMsInNoYXJlZFNpemUiLG51bGwpfXNldFNpemUobCl7dGhpcy5zaXplLnNldFNpemUobCl9c2V0T2Zmc2V0KGwpe3RoaXMuc2l6ZS5zZXRPZmZzZXQobCl9Z2V0Vmlld1NpemUoKXtyZXR1cm4gdGhpcy5zaXpl''@;'; put 'put ''fWlzU2hhcmVkKCl7cmV0dXJuIG51bGwhPT10aGlzLnNoYXJlZFNpemV9aXNQbGFjZU9uKGwpe3JldHVybiB0aGlzLndvcmtpbmdTcGFjZT09PWx9YXBwZW5kKGwpe3RoaXMud29ya2luZ1NwYWNlPTEsbC53b3JraW5nU3BhY2U9Mix0aGlzLnNoYXJlZFNpemU9bC5nZXRWaWV3U2l6ZSgpfXBy''@;'; put 'put ''ZXBlbmQobCl7dGhpcy53b3JraW5nU3BhY2U9MixsLndvcmtpbmdTcGFjZT0xLHRoaXMuc2hhcmVkU2l6ZT1sLmdldFZpZXdTaXplKCl9fWIoMjk3NjApO2NsYXNzIEdnZXtjb25zdHJ1Y3RvcihsLGEpeyhmdW5jdGlvbiBlYXQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHRhdChjKXt2YXIg''@;'; put 'put ''bD1mdW5jdGlvbiBuYXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBu''@;'; put 'put ''ZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSkodGhpcywib3JkZXIiLFtdKSx0aGlzLm9yZGVyPVsuLi5BcnJheShhKS5rZXlzKCldLm1hcChkPT5sK2QpfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5v''@;'; put 'put ''cmRlci5sZW5ndGh9aGFzKGwpe3JldHVybiB0aGlzLm9yZGVyLmluZGV4T2YobCk+LTF9Z2V0KGwpe3JldHVybiBsPHRoaXMub3JkZXIubGVuZ3RoP3RoaXMub3JkZXJbbF06LTF9cmVtb3ZlKGwpe3RoaXMub3JkZXIuc3BsaWNlKHRoaXMub3JkZXIuaW5kZXhPZihsKSwxKX1wcmVwZW5kKGwp''@;'; put 'put ''e3JldHVybiB0aGlzLm9yZGVyLnVuc2hpZnQobCksdGhpcy5vcmRlci5wb3AoKX19Y2xhc3Mgb2F0e2NvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiByYXQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGlhdChjKXt2YXIgbD1mdW5jdGlvbiBhYXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8''@;'; put 'put ''fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEg''@;'; put 'put ''cHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZp''@;'; put 'put ''Z3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSkodGhpcywic2l6ZVNldCIsdm9pZCAwKSx0aGlzLnNpemVTZXQ9bH1kaWZmKCl7Y29uc3R7c2l6ZVNldDpsfT10aGlzLHtjdXJyZW50U2l6ZTphLG5leHRTaXplOmR9PWwuZ2V0Vmlld1NpemUoKTtsZXQgaD1NYXRoLm1heChkLGEp''@;'; put 'put ''O2lmKDA9PT1oKXJldHVybltdO2NvbnN0e2N1cnJlbnRPZmZzZXQ6ZixuZXh0T2Zmc2V0OnZ9PWwuZ2V0Vmlld1NpemUoKSxNPW5ldyBHZ2UoZixhKSxEPW5ldyBHZ2UodixkKSxVPVtdO2ZvcihsZXQgdGU9MDt0ZTxoO3RlKyspe2NvbnN0IG9lPU0uZ2V0KHRlKSx2ZT1ELmdldCh0ZSk7aWYo''@;'; put 'put ''LTE9PT12ZSlVLnB1c2goWyJyZW1vdmUiLG9lXSk7ZWxzZSBpZigtMT09PW9lKSFsLmlzU2hhcmVkKCl8fGwuaXNTaGFyZWQoKSYmbC5pc1BsYWNlT24oMik/VS5wdXNoKFsiYXBwZW5kIix2ZV0pOlUucHVzaChbInByZXBlbmQiLHZlXSk7ZWxzZSBpZih2ZT5vZSlNLmhhcyh2ZSkmJihNLnJl''@;'; put 'put ''bW92ZSh2ZSksZDw9TS5sZW5ndGgmJihoLT0xKSksVS5wdXNoKFsicmVwbGFjZSIsdmUsb2VdKTtlbHNlIGlmKHZlPG9lKXtjb25zdCB3ZT1NLnByZXBlbmQodmUpO1UucHVzaChbImluc2VydF9iZWZvcmUiLHZlLG9lLHdlXSl9ZWxzZSBVLnB1c2goWyJub25lIix2ZV0pfXJldHVybiBVfX1m''@;'; put 'put ''dW5jdGlvbiB6dyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gc2F0KGMpe3ZhciBsPWZ1bmN0aW9uIGxhdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJk''@;'; put 'put ''ZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJu''@;'; put 'put ''InN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgJGdle2NvbnN0cnVjdG9yKGwsYSl7encodGhpcywicm9vdE5v''@;'; put 'put ''ZGUiLHZvaWQgMCksencodGhpcywibm9kZXNQb29sIix2b2lkIDApLHp3KHRoaXMsInNpemVTZXQiLG5ldyBRaXQpLHp3KHRoaXMsImNvbGxlY3RlZE5vZGVzIixbXSksencodGhpcywidmlld0RpZmZlciIsbmV3IG9hdCh0aGlzLnNpemVTZXQpKSx6dyh0aGlzLCJsZWFkcyIsW10pLHRoaXMu''@;'; put 'put ''cm9vdE5vZGU9bCx0aGlzLm5vZGVzUG9vbD1hfXNldFNpemUobCl7cmV0dXJuIHRoaXMuc2l6ZVNldC5zZXRTaXplKGwpLHRoaXN9c2V0T2Zmc2V0KGwpe3JldHVybiB0aGlzLnNpemVTZXQuc2V0T2Zmc2V0KGwpLHRoaXN9aXNTaGFyZWRWaWV3U2V0KCl7cmV0dXJuIHRoaXMuc2l6ZVNldC5p''@;'; put 'put ''c1NoYXJlZCgpfWdldE5vZGUobCl7cmV0dXJuIGw8dGhpcy5jb2xsZWN0ZWROb2Rlcy5sZW5ndGg/dGhpcy5jb2xsZWN0ZWROb2Rlc1tsXTpudWxsfWdldEN1cnJlbnROb2RlKCl7Y29uc3QgbD10aGlzLmNvbGxlY3RlZE5vZGVzLmxlbmd0aDtyZXR1cm4gbD4wP3RoaXMuY29sbGVjdGVkTm9k''@;'; put 'put ''ZXNbbC0xXTpudWxsfWFwcGx5Q29tbWFuZChsKXtjb25zdHtyb290Tm9kZTphfT10aGlzLFtkLGgsZix2XT1sLE09dGhpcy5ub2Rlc1Bvb2woaCk7c3dpdGNoKHRoaXMuY29sbGVjdGVkTm9kZXMucHVzaChNKSxkKXtjYXNlInByZXBlbmQiOmEuaW5zZXJ0QmVmb3JlKE0sYS5maXJzdENoaWxk''@;'; put 'put ''KTticmVhaztjYXNlImFwcGVuZCI6YS5hcHBlbmRDaGlsZChNKTticmVhaztjYXNlImluc2VydF9iZWZvcmUiOmEuaW5zZXJ0QmVmb3JlKE0sdGhpcy5ub2Rlc1Bvb2woZikpLGEucmVtb3ZlQ2hpbGQodGhpcy5ub2Rlc1Bvb2wodikpO2JyZWFrO2Nhc2UicmVwbGFjZSI6YS5yZXBsYWNlQ2hp''@;'; put 'put ''bGQoTSx0aGlzLm5vZGVzUG9vbChmKSk7YnJlYWs7Y2FzZSJyZW1vdmUiOmEucmVtb3ZlQ2hpbGQoTSl9fXN0YXJ0KCl7dGhpcy5jb2xsZWN0ZWROb2Rlcy5sZW5ndGg9MCx0aGlzLmxlYWRzPXRoaXMudmlld0RpZmZlci5kaWZmKCl9cmVuZGVyKCl7dGhpcy5sZWFkcy5sZW5ndGg+MCYmdGhp''@;'; put 'put ''cy5hcHBseUNvbW1hbmQodGhpcy5sZWFkcy5zaGlmdCgpKX1lbmQoKXtmb3IoO3RoaXMubGVhZHMubGVuZ3RoPjA7KXRoaXMuYXBwbHlDb21tYW5kKHRoaXMubGVhZHMuc2hpZnQoKSl9fWNsYXNzIEtnZSBleHRlbmRzICRnZXtwcmVwZW5kVmlldyhsKXtyZXR1cm4gdGhpcy5zaXplU2V0LnBy''@;'; put 'put ''ZXBlbmQobC5zaXplU2V0KSxsLnNpemVTZXQuYXBwZW5kKHRoaXMuc2l6ZVNldCksdGhpc31hcHBlbmRWaWV3KGwpe3JldHVybiB0aGlzLnNpemVTZXQuYXBwZW5kKGwuc2l6ZVNldCksbC5zaXplU2V0LnByZXBlbmQodGhpcy5zaXplU2V0KSx0aGlzfX1mdW5jdGlvbiBYZ2UoYyxsLGEpe3Jl''@;'; put 'put ''dHVybihsPWZ1bmN0aW9uIGNhdChjKXt2YXIgbD1mdW5jdGlvbiB1YXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3Qi''@;'; put 'put ''IT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9s''@;'; put 'put ''OmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGRhdHtjb25zdHJ1Y3RvcihsKXtYZ2UodGhpcywibm9kZVR5cGUiLHZvaWQgMCksWGdlKHRoaXMs''@;'; put 'put ''InBvb2wiLG5ldyBNYXApLHRoaXMubm9kZVR5cGU9bC50b1VwcGVyQ2FzZSgpfXNldFJvb3REb2N1bWVudChsKXt0aGlzLnJvb3REb2N1bWVudD1sfW9idGFpbihsLGEpe2NvbnN0IGg9Im51bWJlciI9PXR5cGVvZiBhP2Ake2x9eCR7YX1gOmwudG9TdHJpbmcoKTtpZih0aGlzLnBvb2wuaGFz''@;'; put 'put ''KGgpKXJldHVybiB0aGlzLnBvb2wuZ2V0KGgpO2NvbnN0IGY9dGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLm5vZGVUeXBlKTtyZXR1cm4gdGhpcy5wb29sLnNldChoLGYpLGZ9fWZ1bmN0aW9uIEpBKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBoYXQoYyl7dmFyIGw9ZnVu''@;'; put 'put ''Y3Rpb24gZmF0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5''@;'; put 'put ''cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBRQXtjb25zdHJ1Y3RvcihsLGEpe0pBKHRoaXMsIm5vZGVzUG9vbCIsbnVsbCksSkEodGhpcywibm9kZVR5cGUiLHZvaWQgMCksSkEodGhpcywicm9vdE5v''@;'; put 'put ''ZGUiLHZvaWQgMCksSkEodGhpcywidGFibGUiLG51bGwpLEpBKHRoaXMsInJlbmRlcmVkTm9kZXMiLDApLHRoaXMubm9kZXNQb29sPSJzdHJpbmciPT10eXBlb2YgbD9uZXcgZGF0KGwpOm51bGwsdGhpcy5ub2RlVHlwZT1sLHRoaXMucm9vdE5vZGU9YX1zZXRUYWJsZShsKXt0aGlzLm5vZGVz''@;'; put 'put ''UG9vbCYmdGhpcy5ub2Rlc1Bvb2wuc2V0Um9vdERvY3VtZW50KGwucm9vdERvY3VtZW50KSx0aGlzLnRhYmxlPWx9YWRqdXN0KCl7fXJlbmRlcigpe319ZnVuY3Rpb24gcWdlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBwYXQoYyl7dmFyIGw9ZnVuY3Rpb24gZ2F0KGMsbCl7aWYoIm9iamVj''@;'; put 'put ''dCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBt''@;'; put 'put ''dXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVy''@;'; put 'put ''YWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBtYXQgZXh0ZW5kcyBRQXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCJUSCIpLHFnZSh0aGlzLCJvcmRlclZpZXdzIixuZXcgV2Vha01hcCkscWdlKHRoaXMsInNvdXJjZVJvd0luZGV4IiwwKX1vYnRhaW5P''@;'; put 'put ''cmRlclZpZXcobCl7bGV0IGE7cmV0dXJuIHRoaXMub3JkZXJWaWV3cy5oYXMobCk/YT10aGlzLm9yZGVyVmlld3MuZ2V0KGwpOihhPW5ldyBLZ2UobCxkPT50aGlzLm5vZGVzUG9vbC5vYnRhaW4odGhpcy5zb3VyY2VSb3dJbmRleCxkKSksdGhpcy5vcmRlclZpZXdzLnNldChsLGEpKSxhfXJl''@;'; put 'put ''bmRlcigpe2NvbnN0e3Jvd3NUb1JlbmRlcjpsLHJvd0hlYWRlckZ1bmN0aW9uczphLHJvd0hlYWRlcnNDb3VudDpkLHJvd3M6aCxjZWxsczpmfT10aGlzLnRhYmxlO2ZvcihsZXQgdj0wO3Y8bDt2Kyspe2NvbnN0IE09dGhpcy50YWJsZS5yZW5kZXJlZFJvd1RvU291cmNlKHYpLEQ9aC5nZXRS''@;'; put 'put ''ZW5kZXJlZE5vZGUodik7dGhpcy5zb3VyY2VSb3dJbmRleD1NO2NvbnN0IFU9dGhpcy5vYnRhaW5PcmRlclZpZXcoRCksdGU9Zi5vYnRhaW5PcmRlclZpZXcoRCk7VS5hcHBlbmRWaWV3KHRlKS5zZXRTaXplKGQpLnNldE9mZnNldCgwKS5zdGFydCgpO2ZvcihsZXQgb2U9ZC0xO29lPj0wO29l''@;'; put 'put ''LS0pe1UucmVuZGVyKCk7Y29uc3QgdmU9VS5nZXRDdXJyZW50Tm9kZSgpO3ZlLmNsYXNzTmFtZT0iIix2ZS5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIiksTTQodmUsW25ldyBSZWdFeHAoImFyaWEtKC4qKSIpLG5ldyBSZWdFeHAoInJvbGUiKV0pLHRoaXMudGFibGUuaXNBcmlhRW5hYmxlZCgp''@;'; put 'put ''JiZaYSh2ZSxbWyJyb2xlIiwicm93aGVhZGVyIl0sWyJzY29wZSIsInJvdyJdLFlxKG9lKzEpLCQzKC0xKV0pLGFbb2VdKE0sdmUsb2UpfVUuZW5kKCl9fX1jbGFzcyB2YXQgZXh0ZW5kcyBRQXtjb25zdHJ1Y3RvcihsKXtzdXBlcihudWxsLGwpfWFkanVzdCgpe2NvbnN0e2NvbHVtbkhlYWRl''@;'; put 'put ''cnNDb3VudDpsLHJvd0hlYWRlcnNDb3VudDphfT10aGlzLnRhYmxlO2xldCBkPXRoaXMucm9vdE5vZGUuZmlyc3RDaGlsZDtpZihsKXtjb25zdHtjb2x1bW5zVG9SZW5kZXI6aH09dGhpcy50YWJsZSxmPWgrYTtmb3IobGV0IE09MCxEPWw7TTxEO00rKyl7Zm9yKGQ9dGhpcy5yb290Tm9kZS5j''@;'; put 'put ''aGlsZE5vZGVzW01dLGR8fChkPXRoaXMudGFibGUucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIiksdGhpcy5yb290Tm9kZS5hcHBlbmRDaGlsZChkKSksdGhpcy5yZW5kZXJlZE5vZGVzPWQuY2hpbGROb2Rlcy5sZW5ndGg7dGhpcy5yZW5kZXJlZE5vZGVzPGY7KWQuYXBwZW5kQ2hp''@;'; put 'put ''bGQodGhpcy50YWJsZS5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGgiKSksdGhpcy5yZW5kZXJlZE5vZGVzKz0xO2Zvcig7dGhpcy5yZW5kZXJlZE5vZGVzPmY7KWQucmVtb3ZlQ2hpbGQoZC5sYXN0Q2hpbGQpLHRoaXMucmVuZGVyZWROb2Rlcy09MX1jb25zdCB2PXRoaXMucm9vdE5v''@;'; put 'put ''ZGUuY2hpbGROb2Rlcy5sZW5ndGg7aWYodj5sKWZvcihsZXQgTT1sO008djtNKyspdGhpcy5yb290Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnJvb3ROb2RlLmxhc3RDaGlsZCl9ZWxzZSBkJiZ4NChkKX1yZW5kZXIoKXtjb25zdHtjb2x1bW5IZWFkZXJzQ291bnQ6bH09dGhpcy50YWJsZTt0aGlz''@;'; put 'put ''LnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYmWmEodGhpcy5yb290Tm9kZSxbWyJyb2xlIiwicm93Z3JvdXAiXV0pO2ZvcihsZXQgYT0wO2E8bDthKz0xKXtjb25zdHtjb2x1bW5IZWFkZXJGdW5jdGlvbnM6ZCxjb2x1bW5zVG9SZW5kZXI6aCxyb3dIZWFkZXJzQ291bnQ6Zn09dGhpcy50YWJsZSx2''@;'; put 'put ''PXRoaXMucm9vdE5vZGUuY2hpbGROb2Rlc1thXTt0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYmWmEodixbWyJyb2xlIiwicm93Il0sJDRlKGErMSldKTtmb3IobGV0IE09LTEqZjtNPGg7TSs9MSl7Y29uc3QgRD10aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UoTSksVT12LmNo''@;'; put 'put ''aWxkTm9kZXNbTStmXTtVLmNsYXNzTmFtZT0iIixVLnJlbW92ZUF0dHJpYnV0ZSgic3R5bGUiKSxNNChVLFtuZXcgUmVnRXhwKCJhcmlhLSguKikiKSxuZXcgUmVnRXhwKCJyb2xlIildKSx0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYmWmEoVSxbWXEoTSsxK3RoaXMudGFibGUucm93SGVh''@;'; put 'put ''ZGVyc0NvdW50KSwkMygtMSksWyJyb2xlIiwiY29sdW1uaGVhZGVyIl0sLi4uTT49MD9bWyJzY29wZSIsImNvbCJdXTpbWyJyb2xlIiwiZ3JpZGNlbGwgYnV0dG9uIl0seDIoIlNlbGVjdCB3aG9sZSBncmlkIildXSksZFthXShELFUsYSl9fX19bGV0IEpnZT0hMTtjbGFzcyB5YXQgZXh0ZW5k''@;'; put 'put ''cyBRQXtjb25zdHJ1Y3RvcihsKXtzdXBlcihudWxsLGwpfWFkanVzdCgpe2NvbnN0e2NvbHVtbnNUb1JlbmRlcjpsLHJvd0hlYWRlcnNDb3VudDphfT10aGlzLnRhYmxlLGQ9bCthO2Zvcig7dGhpcy5yZW5kZXJlZE5vZGVzPGQ7KXRoaXMucm9vdE5vZGUuYXBwZW5kQ2hpbGQodGhpcy50YWJs''@;'; put 'put ''ZS5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY29sIikpLHRoaXMucmVuZGVyZWROb2Rlcys9MTtmb3IoO3RoaXMucmVuZGVyZWROb2Rlcz5kOyl0aGlzLnJvb3ROb2RlLnJlbW92ZUNoaWxkKHRoaXMucm9vdE5vZGUubGFzdENoaWxkKSx0aGlzLnJlbmRlcmVkTm9kZXMtPTF9cmVuZGVy''@;'; put 'put ''KCl7dGhpcy5hZGp1c3QoKTtjb25zdHtjb2x1bW5zVG9SZW5kZXI6bCxyb3dIZWFkZXJzQ291bnQ6YX09dGhpcy50YWJsZTshSmdlJiZsPjFlMyYmKEpnZT0hMCxvcyhYc2BQZXJmb3JtYW5jZSB0aXA6IEhhbmRzb250YWJsZSByZW5kZXJlZCBtb3JlIHRoYW4gMTAwMCB2aXNpYmxlIGNvbHVt''@;'; put 'put ''bnMuXHgyMAogICAgICAgIENvbnNpZGVyIGxpbWl0aW5nIHRoZSBudW1iZXIgb2YgcmVuZGVyZWQgY29sdW1ucyBieSBzcGVjaWZ5aW5nIHRoZSB0YWJsZSB3aWR0aCBhbmQvb3JceDIwCiAgICAgICAgdHVybmluZyBvZmYgdGhlICJyZW5kZXJBbGxDb2x1bW5zIiBvcHRpb24uYCkpO2Zvcihs''@;'; put 'put ''ZXQgaD0wO2g8YTtoKyspe2NvbnN0IGY9dGhpcy50YWJsZS5yZW5kZXJlZENvbHVtblRvU291cmNlKGgpLHY9dGhpcy50YWJsZS5jb2x1bW5VdGlscy5nZXRIZWFkZXJXaWR0aChmKTt0aGlzLnJvb3ROb2RlLmNoaWxkTm9kZXNbaF0uc3R5bGUud2lkdGg9YCR7dn1weGB9Zm9yKGxldCBoPTA7''@;'; put 'put ''aDxsO2grKyl7Y29uc3QgZj10aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UoaCksdj10aGlzLnRhYmxlLmNvbHVtblV0aWxzLmdldFdpZHRoKGYpO3RoaXMucm9vdE5vZGUuY2hpbGROb2Rlc1toK2FdLnN0eWxlLndpZHRoPWAke3Z9cHhgfWNvbnN0IGQ9dGhpcy5yb290Tm9kZS5m''@;'; put 'put ''aXJzdENoaWxkO2QmJmlpKGQsInJvd0hlYWRlciIpfX1sZXQgUWdlPSExO2NsYXNzIENhdCBleHRlbmRzIFFBe2NvbnN0cnVjdG9yKGwpe3N1cGVyKCJUUiIsbCksZnVuY3Rpb24gYmF0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBfYXQoYyl7dmFyIGw9ZnVuY3Rpb24gd2F0KGMsbCl7aWYo''@;'; put 'put ''Im9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1p''@;'; put 'put ''dGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEs''@;'; put 'put ''ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywib3JkZXJWaWV3Iix2b2lkIDApLHRoaXMub3JkZXJWaWV3PW5ldyAkZ2UobCxhPT50aGlzLm5vZGVzUG9vbC5vYnRhaW4oYSkpfWdldFJlbmRlcmVkTm9kZShsKXtyZXR1cm4gdGhpcy5v''@;'; put 'put ''cmRlclZpZXcuZ2V0Tm9kZShsKX1oYXNTdGFsZUNvbnRlbnQobCl7cmV0dXJuIHRoaXMub3JkZXJWaWV3Lmhhc1N0YWxlQ29udGVudChsKX1yZW5kZXIoKXtjb25zdHtyb3dzVG9SZW5kZXI6bH09dGhpcy50YWJsZTshUWdlJiZsPjFlMyYmKFFnZT0hMCxvcyhYc2BQZXJmb3JtYW5jZSB0aXA6''@;'; put 'put ''IEhhbmRzb250YWJsZSByZW5kZXJlZCBtb3JlIHRoYW4gMTAwMCB2aXNpYmxlIHJvd3MuXHgyMAogICAgICAgIENvbnNpZGVyIGxpbWl0aW5nIHRoZSBudW1iZXIgb2YgcmVuZGVyZWQgcm93cyBieSBzcGVjaWZ5aW5nIHRoZSB0YWJsZSBoZWlnaHQgYW5kL29yXHgyMAogICAgICAgIHR1cm5p''@;'; put 'put ''bmcgb2ZmIHRoZSAicmVuZGVyQWxsUm93cyIgb3B0aW9uLmApKSx0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYmWmEodGhpcy5yb290Tm9kZSxbWyJyb2xlIiwicm93Z3JvdXAiXV0pLHRoaXMub3JkZXJWaWV3LnNldFNpemUobCkuc2V0T2Zmc2V0KHRoaXMudGFibGUucmVuZGVyZWRSb3dU''@;'; put 'put ''b1NvdXJjZSgwKSkuc3RhcnQoKTtmb3IobGV0IGg9MDtoPGw7aCsrKXt0aGlzLm9yZGVyVmlldy5yZW5kZXIoKTtjb25zdCBmPXRoaXMub3JkZXJWaWV3LmdldEN1cnJlbnROb2RlKCksdj10aGlzLnRhYmxlLnJlbmRlcmVkUm93VG9Tb3VyY2UoaCk7dmFyIGEsZDt0aGlzLnRhYmxlLmlzQXJp''@;'; put 'put ''YUVuYWJsZWQoKSYmWmEoZixbWyJyb2xlIiwicm93Il0sJDRlKHYrKG51bGwhPT0oYT1udWxsPT09KGQ9dGhpcy50YWJsZS5yb3dVdGlscyl8fHZvaWQgMD09PWR8fG51bGw9PT0oZD1kLmRhdGFBY2Nlc3NPYmplY3QpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmNvbHVtbkhlYWRlcnMubGVuZ3Ro''@;'; put 'put ''KSYmdm9pZCAwIT09YT9hOjApKzEpXSksKHYrMSklMj09MD9DbyhmLCJodF9fcm93X2V2ZW4iKXx8KFZhKGYsImh0X19yb3dfb2RkIiksaWkoZiwiaHRfX3Jvd19ldmVuIikpOkNvKGYsImh0X19yb3dfb2RkIil8fChWYShmLCJodF9fcm93X2V2ZW4iKSxpaShmLCJodF9fcm93X29kZCIpKX10''@;'; put 'put ''aGlzLm9yZGVyVmlldy5lbmQoKX19ZnVuY3Rpb24gZTVlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBTYXQoYyl7dmFyIGw9ZnVuY3Rpb24gTWF0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09''@;'; put 'put ''YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIp''@;'; put 'put ''KGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyB4YXQgZXh0ZW5kcyBR''@;'; put 'put ''QXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCJURCIpLGU1ZSh0aGlzLCJvcmRlclZpZXdzIixuZXcgV2Vha01hcCksZTVlKHRoaXMsInNvdXJjZVJvd0luZGV4IiwwKX1vYnRhaW5PcmRlclZpZXcobCl7bGV0IGE7cmV0dXJuIHRoaXMub3JkZXJWaWV3cy5oYXMobCk/YT10aGlzLm9yZGVyVmlld3Mu''@;'; put 'put ''Z2V0KGwpOihhPW5ldyBLZ2UobCxkPT50aGlzLm5vZGVzUG9vbC5vYnRhaW4odGhpcy5zb3VyY2VSb3dJbmRleCxkKSx0aGlzLm5vZGVUeXBlKSx0aGlzLm9yZGVyVmlld3Muc2V0KGwsYSkpLGF9cmVuZGVyKCl7Y29uc3R7cm93c1RvUmVuZGVyOmwsY29sdW1uc1RvUmVuZGVyOmEscm93czpk''@;'; put 'put ''LHJvd0hlYWRlcnM6aH09dGhpcy50YWJsZTtmb3IobGV0IE09MDtNPGw7TSsrKXtjb25zdCBEPXRoaXMudGFibGUucmVuZGVyZWRSb3dUb1NvdXJjZShNKSxVPWQuZ2V0UmVuZGVyZWROb2RlKE0pO3RoaXMuc291cmNlUm93SW5kZXg9RDtjb25zdCB0ZT10aGlzLm9idGFpbk9yZGVyVmlldyhV''@;'; put 'put ''KSxvZT1oLm9idGFpbk9yZGVyVmlldyhVKTt0ZS5wcmVwZW5kVmlldyhvZSkuc2V0U2l6ZShhKS5zZXRPZmZzZXQoMCkuc3RhcnQoKTtmb3IobGV0IHZlPTA7dmU8YTt2ZSsrKXt0ZS5yZW5kZXIoKTtjb25zdCB3ZT10aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UodmUpLEZlPXRl''@;'; put 'put ''LmdldEN1cnJlbnROb2RlKCk7dmFyIGYsdjtDbyhGZSwiaGlkZSIpfHwoRmUuY2xhc3NOYW1lPSIiKSxGZS5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIiksRmUucmVtb3ZlQXR0cmlidXRlKCJkaXIiKSxNNChGZSxbbmV3IFJlZ0V4cCgiYXJpYS0oLiopIiksbmV3IFJlZ0V4cCgicm9sZSIpXSks''@;'; put 'put ''dGhpcy50YWJsZS5jZWxsUmVuZGVyZXIoRCx3ZSxGZSksdGhpcy50YWJsZS5pc0FyaWFFbmFibGVkKCkmJlphKEZlLFsuLi5GZS5oYXNBdHRyaWJ1dGUoInJvbGUiKT9bXTpbWyJyb2xlIiwiZ3JpZGNlbGwiXV0sJDMoLTEpLFlxKHdlKyhudWxsIT09KGY9bnVsbD09PSh2PXRoaXMudGFibGUu''@;'; put 'put ''cm93VXRpbHMpfHx2b2lkIDA9PT12fHxudWxsPT09KHY9di5kYXRhQWNjZXNzT2JqZWN0KXx8dm9pZCAwPT09dj92b2lkIDA6di5yb3dIZWFkZXJzLmxlbmd0aCkmJnZvaWQgMCE9PWY/ZjowKSsxKV0pfXRlLmVuZCgpfX19ZnVuY3Rpb24gbzAoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEVh''@;'; put 'put ''dChjKXt2YXIgbD1mdW5jdGlvbiBUYXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4g''@;'; put 'put ''ZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIEFhdHtjb25zdHJ1Y3RvcihsKXtsZXR7Y2VsbFJlbmRlcmVyOmEsc3R5bGVzSGFuZGxlcjpkfT1hcmd1bWVudHMubGVuZ3RoPjEm''@;'; put 'put ''JnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307bzAodGhpcywicm9vdE5vZGUiLHZvaWQgMCksbzAodGhpcywicm9vdERvY3VtZW50Iix2b2lkIDApLG8wKHRoaXMsInJvd0hlYWRlcnMiLG51bGwpLG8wKHRoaXMsImNvbHVtbkhlYWRlcnMiLG51bGwpLG8wKHRoaXMsImNv''@;'; put 'put ''bEdyb3VwIixudWxsKSxvMCh0aGlzLCJyb3dzIixudWxsKSxvMCh0aGlzLCJjZWxscyIsbnVsbCksbzAodGhpcywicm93RmlsdGVyIixudWxsKSxvMCh0aGlzLCJjb2x1bW5GaWx0ZXIiLG51bGwpLG8wKHRoaXMsInJvd1V0aWxzIixudWxsKSxvMCh0aGlzLCJjb2x1bW5VdGlscyIsbnVsbCks''@;'; put 'put ''bzAodGhpcywicm93c1RvUmVuZGVyIiwwKSxvMCh0aGlzLCJjb2x1bW5zVG9SZW5kZXIiLDApLG8wKHRoaXMsInJvd0hlYWRlckZ1bmN0aW9ucyIsW10pLG8wKHRoaXMsInJvd0hlYWRlcnNDb3VudCIsMCksbzAodGhpcywiY29sdW1uSGVhZGVyRnVuY3Rpb25zIixbXSksbzAodGhpcywiY29s''@;'; put 'put ''dW1uSGVhZGVyc0NvdW50IiwwKSxvMCh0aGlzLCJjZWxsUmVuZGVyZXIiLHZvaWQgMCksbzAodGhpcywiYWN0aXZlT3ZlcmxheU5hbWUiLHZvaWQgMCksbzAodGhpcywic3R5bGVzSGFuZGxlciIsdm9pZCAwKSx0aGlzLnJvb3ROb2RlPWwsdGhpcy5yb290RG9jdW1lbnQ9dGhpcy5yb290Tm9k''@;'; put 'put ''ZS5vd25lckRvY3VtZW50LHRoaXMuY2VsbFJlbmRlcmVyPWEsdGhpcy5zdHlsZXNIYW5kbGVyPWR9c2V0QWN0aXZlT3ZlcmxheU5hbWUobCl7dGhpcy5hY3RpdmVPdmVybGF5TmFtZT1sfXNldEF4aXNVdGlscyhsLGEpe3RoaXMucm93VXRpbHM9bCx0aGlzLmNvbHVtblV0aWxzPWF9c2V0Vmll''@;'; put 'put ''d3BvcnRTaXplKGwsYSl7dGhpcy5yb3dzVG9SZW5kZXI9bCx0aGlzLmNvbHVtbnNUb1JlbmRlcj1hfXNldEZpbHRlcnMobCxhKXt0aGlzLnJvd0ZpbHRlcj1sLHRoaXMuY29sdW1uRmlsdGVyPWF9c2V0SGVhZGVyQ29udGVudFJlbmRlcmVycyhsLGEpe3RoaXMucm93SGVhZGVyRnVuY3Rpb25z''@;'; put 'put ''PWwsdGhpcy5yb3dIZWFkZXJzQ291bnQ9bC5sZW5ndGgsdGhpcy5jb2x1bW5IZWFkZXJGdW5jdGlvbnM9YSx0aGlzLmNvbHVtbkhlYWRlcnNDb3VudD1hLmxlbmd0aH1zZXRSZW5kZXJlcnMoKXtsZXR7cm93SGVhZGVyczpsLGNvbHVtbkhlYWRlcnM6YSxjb2xHcm91cDpkLHJvd3M6aCxjZWxs''@;'; put 'put ''czpmfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307bC5zZXRUYWJsZSh0aGlzKSxhLnNldFRhYmxlKHRoaXMpLGQuc2V0VGFibGUodGhpcyksaC5zZXRUYWJsZSh0aGlzKSxmLnNldFRhYmxlKHRoaXMpLHRoaXMucm93SGVhZGVycz1s''@;'; put 'put ''LHRoaXMuY29sdW1uSGVhZGVycz1hLHRoaXMuY29sR3JvdXA9ZCx0aGlzLnJvd3M9aCx0aGlzLmNlbGxzPWZ9cmVuZGVyZWRSb3dUb1NvdXJjZShsKXtyZXR1cm4gdGhpcy5yb3dGaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShsKX1yZW5kZXJlZENvbHVtblRvU291cmNlKGwpe3JldHVybiB0aGlz''@;'; put 'put ''LmNvbHVtbkZpbHRlci5yZW5kZXJlZFRvU291cmNlKGwpfWlzQXJpYUVuYWJsZWQoKXtyZXR1cm4gdGhpcy5yb3dVdGlscy53dFNldHRpbmdzLmdldFNldHRpbmcoImFyaWFUYWdzIil9cmVuZGVyKCl7dGhpcy5jb2xHcm91cC5hZGp1c3QoKSx0aGlzLmNvbHVtbkhlYWRlcnMuYWRqdXN0KCks''@;'; put 'put ''dGhpcy5yb3dzLmFkanVzdCgpLHRoaXMucm93SGVhZGVycy5hZGp1c3QoKSx0aGlzLmNvbHVtbkhlYWRlcnMucmVuZGVyKCksdGhpcy5yb3dzLnJlbmRlcigpLHRoaXMucm93SGVhZGVycy5yZW5kZXIoKSx0aGlzLmNlbGxzLnJlbmRlcigpLHRoaXMuY29sdW1uVXRpbHMuY2FsY3VsYXRlV2lk''@;'; put 'put ''dGhzKCksdGhpcy5jb2xHcm91cC5yZW5kZXIoKTtjb25zdHtyb3dzVG9SZW5kZXI6bCxyb3dzOmF9PXRoaXM7Zm9yKGxldCBkPTA7ZDxsO2QrKyl7Y29uc3QgaD1hLmdldFJlbmRlcmVkTm9kZShkKSxmPXRoaXMucm93VXRpbHM7aWYoaC5maXJzdENoaWxkKXtjb25zdCB2PXRoaXMucmVuZGVy''@;'; put 'put ''ZWRSb3dUb1NvdXJjZShkKSxNPWYuZ2V0SGVpZ2h0QnlPdmVybGF5TmFtZSh2LHRoaXMuYWN0aXZlT3ZlcmxheU5hbWUpLFU9dGhpcy5zdHlsZXNIYW5kbGVyLmFyZUNlbGxzQm9yZGVyQm94KCk/MDoxO2guZmlyc3RDaGlsZC5zdHlsZS5oZWlnaHQ9TT9NLVUrInB4IjoiIn19fX1jbGFzcyBr''@;'; put 'put ''YXR7Y29uc3RydWN0b3IoKXtsZXR7VEFCTEU6bCxUSEVBRDphLENPTEdST1VQOmQsVEJPRFk6aCxyb3dVdGlsczpmLGNvbHVtblV0aWxzOnYsY2VsbFJlbmRlcmVyOk0sc3R5bGVzSGFuZGxlcjpEfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNb''@;'; put 'put ''MF06e307dGhpcy5yZW5kZXJlcj1uZXcgQWF0KGwse2NlbGxSZW5kZXJlcjpNLHN0eWxlc0hhbmRsZXI6RH0pLHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyZXJzKHtyb3dIZWFkZXJzOm5ldyBtYXQsY29sdW1uSGVhZGVyczpuZXcgdmF0KGEpLGNvbEdyb3VwOm5ldyB5YXQoZCkscm93czpuZXcg''@;'; put 'put ''Q2F0KGgpLGNlbGxzOm5ldyB4YXR9KSx0aGlzLnJlbmRlcmVyLnNldEF4aXNVdGlscyhmLHYpfXNldEFjdGl2ZU92ZXJsYXlOYW1lKGwpe3JldHVybiB0aGlzLnJlbmRlcmVyLnNldEFjdGl2ZU92ZXJsYXlOYW1lKGwpLHRoaXN9c2V0RmlsdGVycyhsLGEpe3JldHVybiB0aGlzLnJlbmRlcmVy''@;'; put 'put ''LnNldEZpbHRlcnMobCxhKSx0aGlzfXNldFZpZXdwb3J0U2l6ZShsLGEpe3JldHVybiB0aGlzLnJlbmRlcmVyLnNldFZpZXdwb3J0U2l6ZShsLGEpLHRoaXN9c2V0SGVhZGVyQ29udGVudFJlbmRlcmVycyhsLGEpe3JldHVybiB0aGlzLnJlbmRlcmVyLnNldEhlYWRlckNvbnRlbnRSZW5kZXJl''@;'; put 'put ''cnMobCxhKSx0aGlzfWFkanVzdCgpe3RoaXMucmVuZGVyZXIuYWRqdXN0KCl9cmVuZGVyKCl7dGhpcy5yZW5kZXJlci5yZW5kZXIoKX19ZnVuY3Rpb24gRkooYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIERhdChjKXt2YXIgbD1mdW5jdGlvbiBJYXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9m''@;'; put 'put ''IGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJu''@;'; put 'put ''IGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNv''@;'; put 'put ''bmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFJhdHtjb25zdHJ1Y3RvcihsLGEpe0ZKKHRoaXMsImRhdGFBY2Nlc3NPYmplY3QiLHZvaWQgMCksRkoodGhpcywid3RTZXR0aW5ncyIsdm9pZCAwKSxGSih0aGlzLCJoZWFkZXJXaWR0aHMiLG5ldyBNYXApLHRoaXMu''@;'; put 'put ''ZGF0YUFjY2Vzc09iamVjdD1sLHRoaXMud3RTZXR0aW5ncz1hfWdldFdpZHRoKGwpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uV2lkdGgiLGwpfHx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZGVmYXVsdENvbHVtbldpZHRoIil9Z2V0SGVhZGVySGVpZ2h0''@;'; put 'put ''KGwpe2xldCBhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzdHlsZXNIYW5kbGVyIikuZ2V0RGVmYXVsdFJvd0hlaWdodCgpO2NvbnN0IGQ9dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tsXTtyZXR1cm4gdm9pZCAwIT09ZCYmKGE9''@;'; put 'put ''YT9NYXRoLm1heChhLGQpOmQpLGF9Z2V0SGVhZGVyV2lkdGgobCl7cmV0dXJuIHRoaXMuaGVhZGVyV2lkdGhzLmdldCh0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5jb2x1bW5GaWx0ZXIuc291cmNlVG9SZW5kZXJlZChsKSl9Y2FsY3VsYXRlV2lkdGhzKCl7Y29uc3R7d3RTZXR0aW5n''@;'; put 'put ''czpsfT10aGlzO2xldCBhPWwuZ2V0U2V0dGluZygicm93SGVhZGVyV2lkdGgiKTtpZihhPWwuZ2V0U2V0dGluZygib25Nb2RpZnlSb3dIZWFkZXJXaWR0aCIsYSksbnVsbCE9YSl7Y29uc3QgZD1sLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKS5sZW5ndGgsaD1sLmdldFNldHRpbmcoImRlZmF1''@;'; put 'put ''bHRDb2x1bW5XaWR0aCIpO2ZvcihsZXQgZj0wO2Y8ZDtmKyspe2xldCB2PUFycmF5LmlzQXJyYXkoYSk/YVtmXTphO3Y9dj8/aCx0aGlzLmhlYWRlcldpZHRocy5zZXQoZix2KX19fX1mdW5jdGlvbiB0NWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIExhdChjKXt2YXIgbD1mdW5jdGlvbiBP''@;'; put 'put ''YXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9y''@;'; put 'put ''KCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMs''@;'; put 'put ''bCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFBhdHtjb25zdHJ1Y3RvcihsLGEpe3Q1ZSh0aGlzLCJkYXRhQWNjZXNzT2JqZWN0Iix2b2lkIDApLHQ1ZSh0aGlzLCJ3dFNldHRpbmdzIix2b2lkIDApLHRoaXMuZGF0''@;'; put 'put ''YUFjY2Vzc09iamVjdD1sLHRoaXMud3RTZXR0aW5ncz1hfWdldEhlaWdodChsKXtsZXQgYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVpZ2h0IixsKTtjb25zdCBkPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZFJvd3NbbF07cmV0dXJuIHZvaWQg''@;'; put 'put ''MCE9PWQmJihhPXZvaWQgMD09PWE/ZDpNYXRoLm1heChhLGQpKSxhfWdldEhlaWdodEJ5T3ZlcmxheU5hbWUobCxhKXtsZXQgZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVpZ2h0QnlPdmVybGF5TmFtZSIsbCxhKTtjb25zdCBoPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZp''@;'; put 'put ''ZXdwb3J0Lm92ZXJzaXplZFJvd3NbbF07cmV0dXJuIHZvaWQgMCE9PWgmJihkPXZvaWQgMD09PWQ/aDpNYXRoLm1heChkLGgpKSxkfX1jb25zdCBpdj0idG9wIixrND0iYm90dG9tIixhdj0iaW5saW5lX3N0YXJ0Iixvdj0idG9wX2lubGluZV9zdGFydF9jb3JuZXIiLEw2PSJib3R0b21faW5s''@;'; put 'put ''aW5lX3N0YXJ0X2Nvcm5lciIsbjVlPVtpdixrNCxhdixvdixMNl0sRmF0PW5ldyBNYXAoW1tpdixgaHRfY2xvbmVfJHtpdn1gXSxbazQsYGh0X2Nsb25lXyR7azR9YF0sW2F2LGBodF9jbG9uZV8ke2F2fSBodF9jbG9uZV9sZWZ0YF0sW292LGBodF9jbG9uZV8ke292fSBodF9jbG9uZV90b3Bf''@;'; put 'put ''bGVmdF9jb3JuZXJgXSxbTDYsYGh0X2Nsb25lXyR7TDZ9IGh0X2Nsb25lX2JvdHRvbV9sZWZ0X2Nvcm5lcmBdXSk7ZnVuY3Rpb24gRDQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEhhdChjKXt2YXIgbD1mdW5jdGlvbiBOYXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVy''@;'; put 'put ''biBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZl''@;'; put 'put ''IHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZToh''@;'; put 'put ''MCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IFp3PWNsYXNzIFZhdHtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe0Q0KHRoaXMsInd0U2V0dGluZ3MiLG51bGwpLEQ0KHRoaXMsImRvbUJpbmRpbmdzIix2b2lkIDApLEQ0KHRoaXMsIlRCT0RZIixudWxsKSxENCh0aGlzLCJUSEVBRCIsbnVs''@;'; put 'put ''bCksRDQodGhpcywiQ09MR1JPVVAiLG51bGwpLEQ0KHRoaXMsImhhc1RhYmxlSGVpZ2h0IiwhMCksRDQodGhpcywiaGFzVGFibGVXaWR0aCIsITApLEQ0KHRoaXMsImlzVGFibGVWaXNpYmxlIiwhMSksRDQodGhpcywidGFibGVPZmZzZXQiLDApLEQ0KHRoaXMsImhvbGRlck9mZnNldCIsMCks''@;'; put 'put ''dGhpcy5kb21CaW5kaW5ncz1kLHRoaXMuaXNNYXN0ZXI9Im1hc3RlciI9PT1mLHRoaXMubmFtZT1mLHRoaXMuZGF0YUFjY2Vzc09iamVjdD1sLHRoaXMuZmFjYWRlR2V0dGVyPWEsdGhpcy53dFNldHRpbmdzPWgsdGhpcy5pbnN0YW5jZT10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud290LHRoaXMu''@;'; put 'put ''d290PXRoaXMuZGF0YUFjY2Vzc09iamVjdC53b3QsdGhpcy5UQUJMRT1kLnJvb3RUYWJsZSxxcSh0aGlzLlRBQkxFKSx0aGlzLnNwcmVhZGVyPXRoaXMuY3JlYXRlU3ByZWFkZXIodGhpcy5UQUJMRSksdGhpcy5oaWRlcj10aGlzLmNyZWF0ZUhpZGVyKHRoaXMuc3ByZWFkZXIpLHRoaXMuaG9s''@;'; put 'put ''ZGVyPXRoaXMuY3JlYXRlSG9sZGVyKHRoaXMuaGlkZXIpLHRoaXMud3RSb290RWxlbWVudD10aGlzLmhvbGRlci5wYXJlbnROb2RlLHRoaXMuaXNNYXN0ZXImJnRoaXMuYWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpLHRoaXMuZml4VGFibGVEb21UcmVlKCksdGhpcy5yb3dG''@;'; put 'put ''aWx0ZXI9bnVsbCx0aGlzLmNvbHVtbkZpbHRlcj1udWxsLHRoaXMuY29ycmVjdEhlYWRlcldpZHRoPSExO2NvbnN0IHY9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmdQdXJlKCJyb3dIZWFkZXJXaWR0aCIpO3RoaXMud3RTZXR0aW5ncy51cGRhdGUoInJvd0hlYWRlcldpZHRoIiwoKT0+dGhp''@;'; put 'put ''cy5fbW9kaWZ5Um93SGVhZGVyV2lkdGgodikpLHRoaXMucm93VXRpbHM9bmV3IFBhdCh0aGlzLmRhdGFBY2Nlc3NPYmplY3QsdGhpcy53dFNldHRpbmdzKSx0aGlzLmNvbHVtblV0aWxzPW5ldyBSYXQodGhpcy5kYXRhQWNjZXNzT2JqZWN0LHRoaXMud3RTZXR0aW5ncyksdGhpcy50YWJsZVJl''@;'; put 'put ''bmRlcmVyPW5ldyBrYXQoe1RBQkxFOnRoaXMuVEFCTEUsVEhFQUQ6dGhpcy5USEVBRCxDT0xHUk9VUDp0aGlzLkNPTEdST1VQLFRCT0RZOnRoaXMuVEJPRFkscm93VXRpbHM6dGhpcy5yb3dVdGlscyxjb2x1bW5VdGlsczp0aGlzLmNvbHVtblV0aWxzLGNlbGxSZW5kZXJlcjp0aGlzLnd0U2V0''@;'; put 'put ''dGluZ3MuZ2V0U2V0dGluZ1B1cmUoImNlbGxSZW5kZXJlciIpLHN0eWxlc0hhbmRsZXI6dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInN0eWxlc0hhbmRsZXIiKX0pfWlzKGwpe3JldHVybiB0aGlzLm5hbWU9PT1sfWZpeFRhYmxlRG9tVHJlZSgpe2NvbnN0IGw9dGhpcy5kb21CaW5kaW5n''@;'; put 'put ''cy5yb290RG9jdW1lbnQ7dGhpcy5UQk9EWT10aGlzLlRBQkxFLnF1ZXJ5U2VsZWN0b3IoInRib2R5IiksdGhpcy5UQk9EWXx8KHRoaXMuVEJPRFk9bC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpLHRoaXMuVEFCTEUuYXBwZW5kQ2hpbGQodGhpcy5UQk9EWSkpLHRoaXMuVEhFQUQ9dGhpcy5UQUJM''@;'; put 'put ''RS5xdWVyeVNlbGVjdG9yKCJ0aGVhZCIpLHRoaXMuVEhFQUR8fCh0aGlzLlRIRUFEPWwuY3JlYXRlRWxlbWVudCgidGhlYWQiKSx0aGlzLlRBQkxFLmluc2VydEJlZm9yZSh0aGlzLlRIRUFELHRoaXMuVEJPRFkpKSx0aGlzLkNPTEdST1VQPXRoaXMuVEFCTEUucXVlcnlTZWxlY3RvcigiY29s''@;'; put 'put ''Z3JvdXAiKSx0aGlzLkNPTEdST1VQfHwodGhpcy5DT0xHUk9VUD1sLmNyZWF0ZUVsZW1lbnQoImNvbGdyb3VwIiksdGhpcy5UQUJMRS5pbnNlcnRCZWZvcmUodGhpcy5DT0xHUk9VUCx0aGlzLlRIRUFEKSl9Y3JlYXRlU3ByZWFkZXIobCl7Y29uc3QgYT1sLnBhcmVudE5vZGU7bGV0IGQ7cmV0''@;'; put 'put ''dXJuKCFhfHxhLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREV8fCFDbyhhLCJ3dEhvbGRlciIpKSYmKGQ9dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksZC5jbGFzc05hbWU9Ind0U3ByZWFkZXIiLGEmJmEuaW5zZXJ0QmVmb3JlKGQsbCksZC5h''@;'; put 'put ''cHBlbmRDaGlsZChsKSksZC5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJhcmlhVGFncyIpJiZaYShkLFtbInJvbGUiLCJwcmVzZW50YXRpb24iXV0pLGR9Y3JlYXRlSGlkZXIobCl7Y29uc3QgYT1sLnBhcmVudE5vZGU7bGV0IGQ7cmV0dXJu''@;'; put 'put ''KCFhfHxhLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREV8fCFDbyhhLCJ3dEhvbGRlciIpKSYmKGQ9dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksZC5jbGFzc05hbWU9Ind0SGlkZXIiLGEmJmEuaW5zZXJ0QmVmb3JlKGQsbCksZC5hcHBlbmRD''@;'; put 'put ''aGlsZChsKSksdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImFyaWFUYWdzIikmJlphKGQsW1sicm9sZSIsInByZXNlbnRhdGlvbiJdXSksZH1jcmVhdGVIb2xkZXIobCl7Y29uc3QgYT1sLnBhcmVudE5vZGU7bGV0IGQ7cmV0dXJuKCFhfHxhLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05P''@;'; put 'put ''REV8fCFDbyhhLCJ3dEhvbGRlciIpKSYmKGQ9dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksZC5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLGQuY2xhc3NOYW1lPSJ3dEhvbGRlciIsdGhpcy5pc01hc3RlciYmWmEoZCxbJDMoLTEpXSksYSYmYS5p''@;'; put 'put ''bnNlcnRCZWZvcmUoZCxsKSx0aGlzLmlzTWFzdGVyJiYoZC5wYXJlbnROb2RlLmNsYXNzTmFtZSs9Imh0X21hc3RlciBoYW5kc29udGFibGUiLGQucGFyZW50Tm9kZS5zZXRBdHRyaWJ1dGUoImRpciIsdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmdQdXJlKCJydGxNb2RlIik/InJ0bCI6Imx0''@;'; put 'put ''ciIpLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJhcmlhVGFncyIpJiZaYShkLnBhcmVudE5vZGUsW1sicm9sZSIsInByZXNlbnRhdGlvbiJdXSkpLGQuYXBwZW5kQ2hpbGQobCkpLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJhcmlhVGFncyIpJiZaYShkLFtbInJvbGUiLCJwcmVz''@;'; put 'put ''ZW50YXRpb24iXV0pLGR9ZHJhdygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Y29uc3R7d3RTZXR0aW5nczphfT10aGlzLHt3dE92ZXJsYXlzOmQsd3RWaWV3cG9ydDpofT10aGlzLmRhdGFBY2Nlc3NPYmplY3QsZj1hLmdl''@;'; put 'put ''dFNldHRpbmcoInRvdGFsUm93cyIpLHY9YS5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKSxNPWEuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLEQ9TS5sZW5ndGgsVT1hLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKSx0ZT1VLmxlbmd0aDtsZXQgb2U9bDtpZih0aGlzLmlzTWFzdGVyJiYo''@;'; put 'put ''ZC5iZWZvcmVEcmF3KCksdGhpcy5ob2xkZXJPZmZzZXQ9ZDEodGhpcy5ob2xkZXIpLG9lPWguY3JlYXRlQ2FsY3VsYXRvcnMob2UpLEQmJiFhLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0IikpKXtjb25zdCB3ZT1kLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigp''@;'; put 'put ''LEZlPXRoaXMuY29ycmVjdEhlYWRlcldpZHRoO3RoaXMuY29ycmVjdEhlYWRlcldpZHRoPTAhPT13ZSxGZSE9PXRoaXMuY29ycmVjdEhlYWRlcldpZHRoJiYob2U9ITEpfWlmKG9lKXRoaXMuaXNNYXN0ZXImJmQucmVmcmVzaCghMCk7ZWxzZXt0aGlzLnRhYmxlT2Zmc2V0PXRoaXMuaXNNYXN0''@;'; put 'put ''ZXI/ZDEodGhpcy5UQUJMRSk6dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnBhcmVudFRhYmxlT2Zmc2V0O2NvbnN0IHdlPU1hdGgubWF4KHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpLDApLEZlPU1hdGgubWF4KHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpLDApO3RoaXMucm93RmlsdGVy''@;'; put 'put ''PW5ldyBZaXQod2UsZix0ZSksdGhpcy5jb2x1bW5GaWx0ZXI9bmV3IHppdChGZSx2LEQpO2xldCBXZT0hMDtpZih0aGlzLmlzTWFzdGVyKXt0aGlzLmFsaWduT3ZlcmxheXNXaXRoVHJpbW1pbmdDb250YWluZXIoKTtjb25zdCBudD17fTt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiYmVm''@;'; put 'put ''b3JlRHJhdyIsITAsbnQpLFdlPSEwIT09bnQuc2tpcFJlbmRlcn1XZSYmKHRoaXMudGFibGVSZW5kZXJlci5zZXRIZWFkZXJDb250ZW50UmVuZGVyZXJzKE0sVSksKHRoaXMuaXMoazQpfHx0aGlzLmlzKEw2KSkmJnRoaXMudGFibGVSZW5kZXJlci5zZXRIZWFkZXJDb250ZW50UmVuZGVyZXJz''@;'; put 'put ''KE0sW10pLHRoaXMucmVzZXRPdmVyc2l6ZWRSb3dzKCksdGhpcy50YWJsZVJlbmRlcmVyLnNldEFjdGl2ZU92ZXJsYXlOYW1lKHRoaXMubmFtZSkuc2V0Vmlld3BvcnRTaXplKHRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKSx0aGlzLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCkpLnNldEZp''@;'; put 'put ''bHRlcnModGhpcy5yb3dGaWx0ZXIsdGhpcy5jb2x1bW5GaWx0ZXIpLnJlbmRlcigpLHRoaXMuaXNNYXN0ZXImJnRoaXMubWFya092ZXJzaXplZENvbHVtbkhlYWRlcnMoKSx0aGlzLmFkanVzdENvbHVtbkhlYWRlckhlaWdodHMoKSwodGhpcy5pc01hc3Rlcnx8dGhpcy5pcyhrNCkpJiZ0aGlz''@;'; put 'put ''Lm1hcmtPdmVyc2l6ZWRSb3dzKCksdGhpcy5pc01hc3Rlcj8odGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImV4dGVybmFsUm93Q2FsY3VsYXRvciIpfHxoLmNyZWF0ZVZpc2libGVDYWxjdWxhdG9ycygpLGQucmVmcmVzaCghMSksZC5hcHBseVRvRE9NKCksdGhpcy53dFNldHRpbmdzLmdl''@;'; put 'put ''dFNldHRpbmcoIm9uRHJhdyIsITApKTp0aGlzLmlzKGs0KSYmdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNsb25lU291cmNlLnd0T3ZlcmxheXMuYWRqdXN0RWxlbWVudHNTaXplKCkpfWxldCB2ZT0hMTtyZXR1cm4gdGhpcy5pc01hc3RlciYmKHZlPWQudG9wT3ZlcmxheS5yZXNldEZpeGVkUG9z''@;'; put 'put ''aXRpb24oKSxkLmJvdHRvbU92ZXJsYXkuY2xvbmUmJih2ZT1kLmJvdHRvbU92ZXJsYXkucmVzZXRGaXhlZFBvc2l0aW9uKCl8fHZlKSx2ZT1kLmlubGluZVN0YXJ0T3ZlcmxheS5yZXNldEZpeGVkUG9zaXRpb24oKXx8dmUsZC50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJmQudG9wSW5s''@;'; put 'put ''aW5lU3RhcnRDb3JuZXJPdmVybGF5LnJlc2V0Rml4ZWRQb3NpdGlvbigpLGQuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZkLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZSYmZC5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkucmVzZXRGaXhlZFBvc2l0''@;'; put 'put ''aW9uKCkpLHZlPyhkLnJlZnJlc2hBbGwoKSxkLmFkanVzdEVsZW1lbnRzU2l6ZSgpKTp0aGlzLmRhdGFBY2Nlc3NPYmplY3Quc2VsZWN0aW9uTWFuYWdlci5zZXRBY3RpdmVPdmVybGF5KHRoaXMuZmFjYWRlR2V0dGVyKCkpLnJlbmRlcihvZSksdGhpcy5pc01hc3RlciYmZC5hZnRlckRyYXco''@;'; put 'put ''KSx0aGlzLmRhdGFBY2Nlc3NPYmplY3QuZHJhd249ITAsdGhpc31tYXJrSWZPdmVyc2l6ZWRDb2x1bW5IZWFkZXIobCl7Y29uc3QgYT10aGlzLmNvbHVtbkZpbHRlci5yZW5kZXJlZFRvU291cmNlKGwpO2xldCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIiku''@;'; put 'put ''bGVuZ3RoO2NvbnN0IGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInN0eWxlc0hhbmRsZXIiKS5nZXREZWZhdWx0Um93SGVpZ2h0KCk7bGV0IGYsdixNO2NvbnN0IEQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlckhlaWdodCIpfHxbXTtmb3IoO2Q7KWQtPTEs''@;'; put 'put ''Zj10aGlzLmdldENvbHVtbkhlYWRlckhlaWdodChkKSx2PXRoaXMuZ2V0Q29sdW1uSGVhZGVyKGEsZCksdiYmKE09VncodiksKCFmJiZoPE18fGY8TSkmJih0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2RdPU0pLEFycmF5LmlzQXJyYXko''@;'; put 'put ''RCk/bnVsbCE9RFtkXSYmKHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnNbZF09RFtkXSk6aXNOYU4oRCl8fCh0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2RdPUQpLHRoaXMuZGF0YUFj''@;'; put 'put ''Y2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnNbZF08KERbZF18fEQpJiYodGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tkXT1EW2RdfHxEKSl9YWRqdXN0Q29sdW1uSGVhZGVySGVpZ2h0cygpe2NvbnN0e3d0''@;'; put 'put ''U2V0dGluZ3M6bH09dGhpcyxhPXRoaXMuVEhFQUQuY2hpbGROb2RlcyxkPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnM7Zm9yKGxldCBmPTAsdj1sLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg7Zjx2O2YrKylpZihkW2Zd''@;'; put 'put ''KXtpZighYVtmXXx8MD09PWFbZl0uY2hpbGROb2Rlcy5sZW5ndGgpcmV0dXJuO2FbZl0uY2hpbGROb2Rlc1swXS5zdHlsZS5oZWlnaHQ9YCR7ZFtmXX1weGB9fXJlc2V0T3ZlcnNpemVkUm93cygpe2NvbnN0e3d0U2V0dGluZ3M6bH09dGhpcyx7d3RWaWV3cG9ydDphfT10aGlzLmRhdGFBY2Nl''@;'; put 'put ''c3NPYmplY3Q7aWYoKHRoaXMuaXNNYXN0ZXJ8fHRoaXMuaXMoazQpKSYmIWwuZ2V0U2V0dGluZygiZXh0ZXJuYWxSb3dDYWxjdWxhdG9yIikpe2NvbnN0IGQ9dGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgpO2ZvcihsZXQgaD0wO2g8ZDtoKyspe2NvbnN0IGY9dGhpcy5yb3dGaWx0ZXIucmVu''@;'; put 'put ''ZGVyZWRUb1NvdXJjZShoKTthLm92ZXJzaXplZFJvd3MmJmEub3ZlcnNpemVkUm93c1tmXSYmKGEub3ZlcnNpemVkUm93c1tmXT12b2lkIDApfX19Z2V0Q2VsbChsKXtsZXQgYT1sLnJvdyxkPWwuY29sO2NvbnN0IGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uTW9kaWZ5R2V0Q2Vs''@;'; put 'put ''bENvb3JkcyIsYSxkLCF0aGlzLmlzTWFzdGVyLCJyZW5kZXIiKTtpZihoJiZBcnJheS5pc0FycmF5KGgpJiYoW2EsZF09aCksdGhpcy5pc1Jvd0JlZm9yZVJlbmRlcmVkUm93cyhhKSlyZXR1cm4tMTtpZih0aGlzLmlzUm93QWZ0ZXJSZW5kZXJlZFJvd3MoYSkpcmV0dXJuLTI7aWYodGhpcy5p''@;'; put 'put ''c0NvbHVtbkJlZm9yZVJlbmRlcmVkQ29sdW1ucyhkKSlyZXR1cm4tMztpZih0aGlzLmlzQ29sdW1uQWZ0ZXJSZW5kZXJlZENvbHVtbnMoZCkpcmV0dXJuLTQ7Y29uc3QgZj10aGlzLmdldFJvdyhhKTtpZighZiYmYT49MCl0aHJvdyBuZXcgRXJyb3IoIlRSIHdhcyBleHBlY3RlZCB0byBiZSBy''@;'; put 'put ''ZW5kZXJlZCBidXQgaXMgbm90Iik7Y29uc3Qgdj1mLmNoaWxkTm9kZXNbdGhpcy5jb2x1bW5GaWx0ZXIuc291cmNlQ29sdW1uVG9WaXNpYmxlUm93SGVhZGVkQ29sdW1uKGQpXTtpZighdiYmZD49MCl0aHJvdyBuZXcgRXJyb3IoIlREIG9yIFRIIHdhcyBleHBlY3RlZCB0byBiZSByZW5kZXJl''@;'; put 'put ''ZCBidXQgaXMgbm90Iik7cmV0dXJuIHZ9Z2V0Um93KGwpe2xldCBhPW51bGwsZD1udWxsO3ZhciBoLGY7cmV0dXJuIGw8MD8oYT1udWxsPT09KGg9dGhpcy5yb3dGaWx0ZXIpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnNvdXJjZVJvd1RvVmlzaWJsZUNvbEhlYWRlZFJvdyhsKSxkPXRoaXMuVEhF''@;'; put 'put ''QUQpOihhPW51bGw9PT0oZj10aGlzLnJvd0ZpbHRlcil8fHZvaWQgMD09PWY/dm9pZCAwOmYuc291cmNlVG9SZW5kZXJlZChsKSxkPXRoaXMuVEJPRFkpLHZvaWQgMCE9PWEmJnZvaWQgMCE9PWQmJiEoZC5jaGlsZE5vZGVzLmxlbmd0aDxhKzEpJiZkLmNoaWxkTm9kZXNbYV19Z2V0Q29sdW1u''@;'; put 'put ''SGVhZGVyKGwpe2NvbnN0IGQ9dGhpcy5USEVBRC5jaGlsZE5vZGVzW2FyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowXTtyZXR1cm4gZD8uY2hpbGROb2Rlc1t0aGlzLmNvbHVtbkZpbHRlci5zb3VyY2VDb2x1bW5Ub1Zpc2libGVSb3dIZWFk''@;'; put 'put ''ZWRDb2x1bW4obCldfWdldENvbHVtbkhlYWRlcnMobCl7Y29uc3QgYT1bXSxkPXRoaXMuY29sdW1uRmlsdGVyLnNvdXJjZUNvbHVtblRvVmlzaWJsZVJvd0hlYWRlZENvbHVtbihsKTtyZXR1cm4gdGhpcy5USEVBRC5jaGlsZE5vZGVzLmZvckVhY2goaD0+e2NvbnN0IGY9aC5jaGlsZE5vZGVz''@;'; put 'put ''W2RdO2YmJmEucHVzaChmKX0pLGF9Z2V0Um93SGVhZGVyKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO2lmKGE+PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoKXJldHVybjtjb25z''@;'; put 'put ''dCBoPXRoaXMucm93RmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQobCksZj1oPDA/dGhpcy5yb3dGaWx0ZXIuc291cmNlUm93VG9WaXNpYmxlQ29sSGVhZGVkUm93KGwpOmgsTT0oaDwwP3RoaXMuVEhFQUQ6dGhpcy5UQk9EWSkuY2hpbGROb2Rlc1tmXTtyZXR1cm4gTT8uY2hpbGROb2Rlc1thXX1n''@;'; put 'put ''ZXRSb3dIZWFkZXJzKGwpe2NvbnN0IGE9W10sZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLmxlbmd0aDtmb3IobGV0IGg9MDtoPGQ7aCsrKXtjb25zdCBmPXRoaXMuVEJPRFkuY2hpbGROb2Rlc1t0aGlzLnJvd0ZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGwpXSx2''@;'; put 'put ''PWY/LmNoaWxkTm9kZXNbaF07diYmYS5wdXNoKHYpfXJldHVybiBhfWdldENvb3JkcyhsKXtsZXQgYT1sO2lmKCJURCIhPT1hLm5vZGVOYW1lJiYiVEgiIT09YS5ub2RlTmFtZSYmKGE9TTYoYSxbIlREIiwiVEgiXSkpLG51bGw9PT1hKXJldHVybiBudWxsO2NvbnN0IGQ9YS5wYXJlbnROb2Rl''@;'; put 'put ''O2lmKCFkKXJldHVybiBudWxsO2NvbnN0IGg9ZC5wYXJlbnROb2RlO2xldCBmPWNnZShkKSx2PWEuY2VsbEluZGV4O0U2KG92LGEsdGhpcy53dFJvb3RFbGVtZW50KXx8RTYoaXYsYSx0aGlzLnd0Um9vdEVsZW1lbnQpPyJUSEVBRCI9PT1oLm5vZGVOYW1lJiYoZi09aC5jaGlsZE5vZGVzLmxl''@;'; put 'put ''bmd0aCk6RTYoTDYsYSx0aGlzLnd0Um9vdEVsZW1lbnQpfHxFNihrNCxhLHRoaXMud3RSb290RWxlbWVudCk/Zj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiktaC5jaGlsZE5vZGVzLmxlbmd0aCtmOmg9PT10aGlzLlRIRUFEP2Y9dGhpcy5yb3dGaWx0ZXIudmlzaWJs''@;'; put 'put ''ZUNvbEhlYWRlZFJvd1RvU291cmNlUm93KGYpOnRoaXMucm93RmlsdGVyJiYoZj10aGlzLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKGYpKSxFNihvdixhLHRoaXMud3RSb290RWxlbWVudCl8fEU2KGF2LGEsdGhpcy53dFJvb3RFbGVtZW50KXx8RTYoTDYsYSx0aGlzLnd0Um9vdEVsZW1l''@;'; put 'put ''bnQpP3Y9dGhpcy5jb2x1bW5GaWx0ZXIub2Zmc2V0dGVkVEgodik6dGhpcy5jb2x1bW5GaWx0ZXImJih2PXRoaXMuY29sdW1uRmlsdGVyLnZpc2libGVSb3dIZWFkZWRDb2x1bW5Ub1NvdXJjZUNvbHVtbih2KSk7Y29uc3QgTT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25Nb2RpZnlH''@;'; put 'put ''ZXRDb29yZHNFbGVtZW50IixmLHYpO3JldHVybiBNJiZBcnJheS5pc0FycmF5KE0pJiYoW2Ysdl09TSksdGhpcy53b3QuY3JlYXRlQ2VsbENvb3JkcyhmLHYpfW1hcmtPdmVyc2l6ZWRSb3dzKCl7aWYodGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImV4dGVybmFsUm93Q2FsY3VsYXRvciIp''@;'; put 'put ''KXJldHVybjtsZXQgbD10aGlzLlRCT0RZLmNoaWxkTm9kZXMubGVuZ3RoO2NvbnN0IGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInN0eWxlc0hhbmRsZXIiKSxkPWwqYS5nZXREZWZhdWx0Um93SGVpZ2h0KCksaD1Wdyh0aGlzLlRCT0RZKS0xLGY9YS5hcmVDZWxsc0JvcmRlckJveCgp''@;'; put 'put ''LHY9Zj9GdTpWdyxNPWY/MDoxLEQ9Zj8xOjA7bGV0IFUsdGUsb2UsdmUsd2U7aWYoZCE9PWh8fHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSlmb3IoO2w7KXtsLT0xLG9lPXRoaXMucm93RmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UobCksVT10aGlzLmdldFJv''@;'; put 'put ''d0hlaWdodChvZSksdmU9dGhpcy5nZXRUckZvclJvdyhvZSksd2U9dmUucXVlcnlTZWxlY3RvcigidGgiKTtjb25zdCBGZT0wPT09b2U/RDowO3RlPXdlP3Yod2UpOnYodmUpLU0sKCFVJiZhLmdldERlZmF1bHRSb3dIZWlnaHQoKTx0ZS1GZXx8VTx0ZSkmJihmfHwodGUrPTEpLHRoaXMuZGF0''@;'; put 'put ''YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZFJvd3Nbb2VdPXRlKX19Z2V0VHJGb3JSb3cobCl7cmV0dXJuIHRoaXMuVEJPRFkuY2hpbGROb2Rlc1t0aGlzLnJvd0ZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGwpXX1pc0NvbHVtbkhlYWRlclJlbmRlcmVkKGwpe2lmKGw+PTApcmV0''@;'; put 'put ''dXJuITE7Y29uc3QgZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLmxlbmd0aDtyZXR1cm4gTWF0aC5hYnMobCk8PWR9aXNSb3dIZWFkZXJSZW5kZXJlZChsKXtpZihsPj0wKXJldHVybiExO2NvbnN0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVt''@;'; put 'put ''bkhlYWRlcnMiKS5sZW5ndGg7cmV0dXJuIE1hdGguYWJzKGwpPD1kfWlzUm93QmVmb3JlUmVuZGVyZWRSb3dzKGwpe2NvbnN0IGE9dGhpcy5nZXRGaXJzdFJlbmRlcmVkUm93KCk7cmV0dXJuIGw8MCYmYTw9MD8hdGhpcy5pc1Jvd0hlYWRlclJlbmRlcmVkKGwpOmw8YX1pc1Jvd0FmdGVyUmVu''@;'; put 'put ''ZGVyZWRSb3dzKGwpe3JldHVybiBsPnRoaXMuZ2V0TGFzdFJlbmRlcmVkUm93KCl9aXNDb2x1bW5CZWZvcmVSZW5kZXJlZENvbHVtbnMobCl7Y29uc3QgYT10aGlzLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKTtyZXR1cm4gbDwwJiZhPD0wPyF0aGlzLmlzQ29sdW1uSGVhZGVyUmVuZGVyZWQo''@;'; put 'put ''bCk6bDxhfWlzQ29sdW1uQWZ0ZXJSZW5kZXJlZENvbHVtbnMobCl7cmV0dXJuIHRoaXMuY29sdW1uRmlsdGVyJiZsPnRoaXMuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl9aXNDb2x1bW5BZnRlclZpZXdwb3J0KGwpe3JldHVybiB0aGlzLmNvbHVtbkZpbHRlciYmbD50aGlzLmdldExhc3RWaXNp''@;'; put 'put ''YmxlQ29sdW1uKCl9aXNSb3dBZnRlclZpZXdwb3J0KGwpe3JldHVybiB0aGlzLnJvd0ZpbHRlciYmbD50aGlzLmdldExhc3RWaXNpYmxlUm93KCl9aXNDb2x1bW5CZWZvcmVWaWV3cG9ydChsKXtyZXR1cm4gdGhpcy5jb2x1bW5GaWx0ZXImJnRoaXMuY29sdW1uRmlsdGVyLnNvdXJjZVRvUmVu''@;'; put 'put ''ZGVyZWQobCk8MCYmbD49MH1pc0xhc3RSb3dGdWxseVZpc2libGUoKXtyZXR1cm4gdGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpPT09dGhpcy5nZXRMYXN0UmVuZGVyZWRSb3coKX1pc0xhc3RDb2x1bW5GdWxseVZpc2libGUoKXtyZXR1cm4gdGhpcy5nZXRMYXN0VmlzaWJsZUNvbHVtbigpPT09''@;'; put 'put ''dGhpcy5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKX1hbGxSb3dzSW5WaWV3cG9ydCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik9PT10aGlzLmdldFZpc2libGVSb3dzQ291bnQoKX1hbGxDb2x1bW5zSW5WaWV3cG9ydCgpe3JldHVybiB0aGlzLnd0U2V0''@;'; put 'put ''dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIik9PT10aGlzLmdldFZpc2libGVDb2x1bW5zQ291bnQoKX1nZXRSb3dIZWlnaHQobCl7cmV0dXJuIHRoaXMucm93VXRpbHMuZ2V0SGVpZ2h0KGwpfWdldENvbHVtbkhlYWRlckhlaWdodChsKXtyZXR1cm4gdGhpcy5jb2x1bW5VdGlscy5n''@;'; put 'put ''ZXRIZWFkZXJIZWlnaHQobCl9Z2V0Q29sdW1uV2lkdGgobCl7cmV0dXJuIHRoaXMuY29sdW1uVXRpbHMuZ2V0V2lkdGgobCl9aGFzRGVmaW5lZFNpemUoKXtyZXR1cm4gdGhpcy5oYXNUYWJsZUhlaWdodCYmdGhpcy5oYXNUYWJsZVdpZHRofWdldFdpZHRoKCl7cmV0dXJuIF91KHRoaXMuVEFC''@;'; put 'put ''TEUpfWdldEhlaWdodCgpe3JldHVybiBGdSh0aGlzLlRBQkxFKX1nZXRUb3RhbFdpZHRoKCl7Y29uc3QgbD1fdSh0aGlzLmhpZGVyKTtyZXR1cm4gMCE9PWw/bDp0aGlzLmdldFdpZHRoKCl9Z2V0VG90YWxIZWlnaHQoKXtjb25zdCBsPUZ1KHRoaXMuaGlkZXIpO3JldHVybiAwIT09bD9sOnRo''@;'; put 'put ''aXMuZ2V0SGVpZ2h0KCl9aXNWaXNpYmxlKCl7cmV0dXJuIGs2KHRoaXMuVEFCTEUpfV9tb2RpZnlSb3dIZWFkZXJXaWR0aChsKXtsZXQgYT1pbChsKT9sKCk6bnVsbDtyZXR1cm4gQXJyYXkuaXNBcnJheShhKT8oYT1bLi4uYV0sYVthLmxlbmd0aC0xXT10aGlzLl9jb3JyZWN0Um93SGVhZGVy''@;'; put 'put ''V2lkdGgoYVthLmxlbmd0aC0xXSkpOmE9dGhpcy5fY29ycmVjdFJvd0hlYWRlcldpZHRoKGEpLGF9X2NvcnJlY3RSb3dIZWFkZXJXaWR0aChsKXtsZXQgYT1sO3JldHVybiJudW1iZXIiIT10eXBlb2YgbCYmKGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImRlZmF1bHRDb2x1bW5XaWR0''@;'; put 'put ''aCIpKSx0aGlzLmNvcnJlY3RIZWFkZXJXaWR0aCYmKGErPTEpLGF9fSxyNWU9e2dldEZpcnN0UmVuZGVyZWRSb3coKXtyZXR1cm4gMD09PXRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKT8tMTowfSxnZXRGaXJzdFZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5nZXRGaXJzdFJlbmRlcmVkUm93''@;'; put 'put ''KCl9LGdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmdldEZpcnN0UmVuZGVyZWRSb3coKX0sZ2V0TGFzdFJlbmRlcmVkUm93KCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKS0xfSxnZXRMYXN0VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmdldExh''@;'; put 'put ''c3RSZW5kZXJlZFJvdygpfSxnZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZFJvdygpfSxnZXRSZW5kZXJlZFJvd3NDb3VudCgpe3JldHVybiBNYXRoLm1pbih0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiksdGhpcy53''@;'; put 'put ''dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpKX0sZ2V0VmlzaWJsZVJvd3NDb3VudCgpe3JldHVybiB0aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCl9LGdldENvbHVtbkhlYWRlcnNDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3QuY29sdW1uSGVhZGVycy5s''@;'; put 'put ''ZW5ndGh9fTtTNChyNWUsIk1JWElOX05BTUUiLCJzdGlja3lSb3dzVG9wIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IGk1ZT1yNWUsYTVlPXtnZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRDb2x1bW5SZW5kZXJl''@;'; put 'put ''ZDtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRDb2x1bW5WaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRGaXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXtjb25zdCBjPXRoaXMu''@;'; put 'put ''ZGF0YUFjY2Vzc09iamVjdC5zdGFydENvbHVtblBhcnRpYWxseVZpc2libGU7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldExhc3RSZW5kZXJlZENvbHVtbigpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmVuZENvbHVtblJlbmRlcmVkO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRM''@;'; put 'put ''YXN0VmlzaWJsZUNvbHVtbigpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmVuZENvbHVtblZpc2libGU7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3QuZW5kQ29sdW1uUGFydGlh''@;'; put 'put ''bGx5VmlzaWJsZTtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvdW50Q29sdW1uc1JlbmRlcmVkfSxnZXRWaXNpYmxlQ29sdW1uc0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5j''@;'; put 'put ''b3VudENvbHVtbnNWaXNpYmxlfSxnZXRSb3dIZWFkZXJzQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LnJvd0hlYWRlcnMubGVuZ3RofX07UzQoYTVlLCJNSVhJTl9OQU1FIiwiY2FsY3VsYXRlZENvbHVtbnMiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3Qg''@;'; put 'put ''SEo9YTVlO2NsYXNzIE5KIGV4dGVuZHMgWnd7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCxpdil9fXBsKE5KLGk1ZSkscGwoTkosSEopO2NvbnN0IHphdD1OSjtmdW5jdGlvbiB2TihjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJu''@;'; put 'put ''IGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIGVrPW5ldyBXZWFrU2V0O2Z1bmN0aW9uIG81ZShjKXtjb25zdHt3dFNldHRpbmdzOmwsaW5saW5lU3RhcnRPdmVybGF5''@;'; put 'put ''OmEsd3RUYWJsZTpkLHd0Vmlld3BvcnQ6aCx0b3RhbENvbHVtbnM6Zixyb290V2luZG93OnZ9PXRoaXMuZGF0YUFjY2Vzc09iamVjdDtpZihhLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09dil7bGV0IEQ9bnVsbDtpZihsLmdldFNldHRpbmcoInJ0bE1vZGUiKSl7Y29uc3QgdGU9ZC5U''@;'; put 'put ''QUJMRS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtEPU1hdGguYWJzKHRlLnJpZ2h0LXRoaXMuZGF0YUFjY2Vzc09iamVjdC5yb290V2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vZmZzZXRXaWR0aCl9ZWxzZSBEPWQxKGQud3RSb290RWxlbWVudCkubGVmdDtjb25zdCBVPU1hdGgu''@;'; put 'put ''YWJzKFFxKHYsdikpO2lmKEQ+VSl7Y29uc3QgdGU9ZUoodik7bGV0IG9lPWguZ2V0Um93SGVhZGVyV2lkdGgoKTtmb3IobGV0IHZlPTE7dmU8PWY7dmUrKylpZihvZSs9YS5zdW1DZWxsU2l6ZXModmUtMSx2ZSksRCtvZS1VPj10ZSl7Yz12ZS0yO2JyZWFrfX19cmV0dXJuIGN9ZnVuY3Rpb24g''@;'; put 'put ''czVlKGMpe2NvbnN0e3RvcE92ZXJsYXk6bCx3dFRhYmxlOmEsd3RWaWV3cG9ydDpkLHRvdGFsUm93czpoLHJvb3RXaW5kb3c6Zn09dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2lmKGwubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT1mKXtjb25zdCB2PWQxKGEud3RSb290RWxlbWVudCksTT1h''@;'; put 'put ''TihmLGYpO2lmKHYudG9wPk0pe2NvbnN0IEQ9VncoZik7bGV0IFU9ZC5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKTtmb3IobGV0IHRlPTE7dGU8PWg7dGUrKylpZihVKz1sLnN1bUNlbGxTaXplcyh0ZS0xLHRlKSx2LnRvcCtVLU0+PUQpe2M9dGUtMjticmVha319fXJldHVybiBjfWNvbnN0IEth''@;'; put 'put ''dD1jbGFzcyAkYXR7Y29uc3RydWN0b3IobCl7KGZ1bmN0aW9uIFVhdChjLGwpeyhmdW5jdGlvbiBaYXQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSko''@;'; put 'put ''YyxsKSxsLmFkZChjKX0pKHRoaXMsZWspLGZ1bmN0aW9uIFdhdChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gWWF0KGMpe3ZhciBsPWZ1bmN0aW9uIEdhdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQg''@;'; put 'put ''MCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVt''@;'; put 'put ''YmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsImRhdGFBY2Nl''@;'; put 'put ''c3NPYmplY3QiLHZvaWQgMCksdGhpcy5kYXRhQWNjZXNzT2JqZWN0PWx9c2Nyb2xsVmlld3BvcnQobCxhLGQpe2lmKGwuY29sPDB8fGwucm93PDApcmV0dXJuITE7Y29uc3QgaD10aGlzLnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwuY29sLGEpLGY9dGhpcy5zY3JvbGxWaWV3cG9ydFZl''@;'; put 'put ''cnRpY2FsbHkobC5yb3csZCk7cmV0dXJuIGh8fGZ9c2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJhdXRvIjtjb25zdHtkcmF3bjpkLHRvdGFsQ29sdW1uczpofT10aGlzLmRh''@;'; put 'put ''dGFBY2Nlc3NPYmplY3Q7aWYoIWQpcmV0dXJuITE7Y29uc3QgZj12aChhKTtpZihsPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uQmVmb3JlVmlld3BvcnRTY3JvbGxIb3Jpem9udGFsbHkiLGwsZiksIU51bWJlci5pc0ludGVnZXIobCl8fGw8MHx8bD5o''@;'; put 'put ''KXJldHVybiExO2E9Zi52YWx1ZTtjb25zdHtmaXhlZENvbHVtbnNTdGFydDp2LGlubGluZVN0YXJ0T3ZlcmxheTpNfT10aGlzLmRhdGFBY2Nlc3NPYmplY3QsRD0iYXV0byI9PT1hO2lmKEQmJmw8dilyZXR1cm4hMTtjb25zdCBVPXRoaXMuZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCksdGU9dGhp''@;'; put 'put ''cy5nZXRMYXN0VmlzaWJsZUNvbHVtbigpO2xldCBvZT0hMTtyZXR1cm4oRCYmKGw8VXx8bD50ZSl8fCFEKSYmKG9lPU0uc2Nyb2xsVG8obCxEP2w+PXRoaXMuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKToiZW5kIj09PWEpKSxvZX1zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobCl7''@;'; put 'put ''bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJhdXRvIjtjb25zdHtkcmF3bjpkLHRvdGFsUm93czpofT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7aWYoIWQpcmV0dXJuITE7Y29uc3QgZj12aChhKTtpZihsPXRoaXMuZGF0YUFjY2Vz''@;'; put 'put ''c09iamVjdC53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uQmVmb3JlVmlld3BvcnRTY3JvbGxWZXJ0aWNhbGx5IixsLGYpLCFOdW1iZXIuaXNJbnRlZ2VyKGwpfHxsPDB8fGw+aClyZXR1cm4hMTthPWYudmFsdWU7Y29uc3R7Zml4ZWRSb3dzQm90dG9tOnYsZml4ZWRSb3dzVG9wOk0sdG9wT3Zl''@;'; put 'put ''cmxheTpEfT10aGlzLmRhdGFBY2Nlc3NPYmplY3QsVT0iYXV0byI9PT1hO2lmKFUmJihsPE18fGw+aC12LTEpKXJldHVybiExO2NvbnN0IHRlPXRoaXMuZ2V0Rmlyc3RWaXNpYmxlUm93KCksb2U9dGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpO2xldCB2ZT0hMTtyZXR1cm4oVSYmKGw8dGV8fGw+''@;'; put 'put ''b2UpfHwhVSkmJih2ZT1ELnNjcm9sbFRvKGwsVT9sPj10aGlzLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCk6ImJvdHRvbSI9PT1hKSksdmV9Z2V0Rmlyc3RWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlLmdldEZpcnN0VmlzaWJsZVJvdygpfWdl''@;'; put 'put ''dExhc3RWaXNpYmxlUm93KCl7cmV0dXJuIHZOKGVrLHRoaXMsczVlKS5jYWxsKHRoaXMsdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0TGFzdFZpc2libGVSb3coKSl9Z2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRh''@;'; put 'put ''YmxlLmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpfWdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHZOKGVrLHRoaXMsczVlKS5jYWxsKHRoaXMsdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKSl9Z2V0Rmlyc3RW''@;'; put 'put ''aXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlLmdldEZpcnN0VmlzaWJsZUNvbHVtbigpfWdldExhc3RWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHZOKGVrLHRoaXMsbzVlKS5jYWxsKHRoaXMsdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0''@;'; put 'put ''TGFzdFZpc2libGVDb2x1bW4oKSl9Z2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlLmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpfWdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHZO''@;'; put 'put ''KGVrLHRoaXMsbzVlKS5jYWxsKHRoaXMsdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKSl9fTtmdW5jdGlvbiBsNWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEphdChjKXt2YXIgbD1mdW5jdGlvbiBRYXQoYyxsKXtpZigib2Jq''@;'; put 'put ''ZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZl''@;'; put 'put ''IG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVt''@;'; put 'put ''ZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIFd3KGMsbCl7cmV0dXJuIGMuZ2V0KHU1ZShjLGwpKX1mdW5jdGlvbiBjNWUoYyxsLGEpe3JldHVybiBjLnNldCh1NWUoYyxsKSxhKSxhfWZ1bmN0aW9uIHU1ZShjLGwsYSl7aWYoImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIG01PW5ldyBXZWFrTWFwO2NsYXNzIHlOe2NvbnN0cnVj''@;'; put 'put ''dG9yKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtsNWUodGhpcywicm93IixudWxsKSxsNWUodGhpcywiY29sIixudWxsKSxmdW5jdGlvbiBYYXQoYyxsLGEpeyhmdW5jdGlvbiBxYXQoYyxsKXtpZihsLmhhcyhjKSl0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfSh0aGlzLG01LCExKSxjNWUobTUsdGhpcyxkKSx0eXBlb2YgbDwidSImJnR5cGVvZiBhPCJ1IiYmKHRoaXMu''@;'; put 'put ''cm93PWwsdGhpcy5jb2w9YSl9aXNWYWxpZChsKXtjb25zdHtjb3VudFJvd3M6YSxjb3VudENvbHM6ZCxjb3VudFJvd0hlYWRlcnM6aCxjb3VudENvbEhlYWRlcnM6Zn09e2NvdW50Um93czowLGNvdW50Q29sczowLGNvdW50Um93SGVhZGVyczowLGNvdW50Q29sSGVhZGVyczowLC4uLmx9O3Jl''@;'; put 'put ''dHVybiEoIU51bWJlci5pc0ludGVnZXIodGhpcy5yb3cpfHwhTnVtYmVyLmlzSW50ZWdlcih0aGlzLmNvbCl8fHRoaXMucm93PC1mfHx0aGlzLmNvbDwtaHx8dGhpcy5yb3c+PWF8fHRoaXMuY29sPj1kKX1pc0VxdWFsKGwpe3JldHVybiBsPT09dGhpc3x8dGhpcy5yb3c9PT1sLnJvdyYmdGhp''@;'; put 'put ''cy5jb2w9PT1sLmNvbH1pc0hlYWRlcigpe3JldHVybiF0aGlzLmlzQ2VsbCgpfWlzQ2VsbCgpe3JldHVybiB0aGlzLnJvdz49MCYmdGhpcy5jb2w+PTB9aXNSdGwoKXtyZXR1cm4gV3cobTUsdGhpcyl9aXNTb3V0aEVhc3RPZihsKXtyZXR1cm4gdGhpcy5yb3c+PWwucm93JiYoV3cobTUsdGhp''@;'; put 'put ''cyk/dGhpcy5jb2w8PWwuY29sOnRoaXMuY29sPj1sLmNvbCl9aXNOb3J0aFdlc3RPZihsKXtyZXR1cm4gdGhpcy5yb3c8PWwucm93JiYoV3cobTUsdGhpcyk/dGhpcy5jb2w+PWwuY29sOnRoaXMuY29sPD1sLmNvbCl9aXNTb3V0aFdlc3RPZihsKXtyZXR1cm4gdGhpcy5yb3c+PWwucm93JiYo''@;'; put 'put ''V3cobTUsdGhpcyk/dGhpcy5jb2w+PWwuY29sOnRoaXMuY29sPD1sLmNvbCl9aXNOb3J0aEVhc3RPZihsKXtyZXR1cm4gdGhpcy5yb3c8PWwucm93JiYoV3cobTUsdGhpcyk/dGhpcy5jb2w8PWwuY29sOnRoaXMuY29sPj1sLmNvbCl9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMucm93PW51bGw9''@;'; put 'put ''PT10aGlzLnJvdz90aGlzLnJvdzpNYXRoLm1heCh0aGlzLnJvdywwKSx0aGlzLmNvbD1udWxsPT09dGhpcy5jb2w/dGhpcy5jb2w6TWF0aC5tYXgodGhpcy5jb2wsMCksdGhpc31hc3NpZ24obCl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIobD8ucm93KSYmKHRoaXMucm93PWwucm93KSxOdW1i''@;'; put 'put ''ZXIuaXNJbnRlZ2VyKGw/LmNvbCkmJih0aGlzLmNvbD1sLmNvbCksbCBpbnN0YW5jZW9mIHlOJiZjNWUobTUsdGhpcyxsLmlzUnRsKCkpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHlOKHRoaXMucm93LHRoaXMuY29sLFd3KG01LHRoaXMpKX10b09iamVjdCgpe3JldHVybntyb3c6dGhpcy5y''@;'; put 'put ''b3csY29sOnRoaXMuY29sfX19Y29uc3QgYk49eU47ZnVuY3Rpb24gVkooYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIG5vdChjKXt2YXIgbD1mdW5jdGlvbiByb3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2''@;'; put 'put ''b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5n''@;'; put 'put ''Ok51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIGpm''@;'; put 'put ''KGMsbCl7cmV0dXJuIGMuZ2V0KGQ1ZShjLGwpKX1mdW5jdGlvbiBkNWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJl''@;'; put 'put ''c2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBiaD1uZXcgV2Vha01hcDtjbGFzcyBCSntjb25zdHJ1Y3RvcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bCxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1l''@;'; put 'put ''bnRzWzJdP2FyZ3VtZW50c1syXTpsLGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTtWSih0aGlzLCJoaWdobGlnaHQiLG51bGwpLFZKKHRoaXMsImZyb20iLG51bGwpLFZKKHRoaXMsInRvIixudWxsKSxmdW5jdGlvbiBlb3QoYyxsLGEp''@;'; put 'put ''eyhmdW5jdGlvbiB0b3QoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfSh0aGlzLGJoLCExKSx0aGlzLmhpZ2hsaWdodD1s''@;'; put 'put ''LmNsb25lKCksdGhpcy5mcm9tPWEuY2xvbmUoKSx0aGlzLnRvPWQuY2xvbmUoKSxmdW5jdGlvbiBpb3QoYyxsLGEpe2Muc2V0KGQ1ZShjLGwpLGEpfShiaCx0aGlzLGgpfXNldEhpZ2hsaWdodChsKXtyZXR1cm4gdGhpcy5oaWdobGlnaHQ9bC5jbG9uZSgpLHRoaXN9c2V0RnJvbShsKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5mcm9tPWwuY2xvbmUoKSx0aGlzfXNldFRvKGwpe3JldHVybiB0aGlzLnRvPWwuY2xvbmUoKSx0aGlzfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLmhpZ2hsaWdodC5ub3JtYWxpemUoKSx0aGlzLmZyb20ubm9ybWFsaXplKCksdGhpcy50by5ub3JtYWxpemUoKSx0aGlzfWlzVmFs''@;'; put 'put ''aWQobCl7cmV0dXJuIHRoaXMuZnJvbS5pc1ZhbGlkKGwpJiZ0aGlzLnRvLmlzVmFsaWQobCl9aXNTaW5nbGUoKXtyZXR1cm4gdGhpcy5pc1NpbmdsZUNlbGwoKXx8dGhpcy5pc1NpbmdsZUhlYWRlcigpfWlzU2luZ2xlQ2VsbCgpe3JldHVybiB0aGlzLmZyb20ucm93Pj0wJiZ0aGlzLmZyb20u''@;'; put 'put ''cm93PT09dGhpcy50by5yb3cmJnRoaXMuZnJvbS5jb2w+PTAmJnRoaXMuZnJvbS5jb2w9PT10aGlzLnRvLmNvbH1pc1NpbmdsZUhlYWRlcigpe3JldHVybih0aGlzLmZyb20ucm93PDB8fHRoaXMuZnJvbS5jb2w8MCkmJnRoaXMuZnJvbS5yb3c9PT10aGlzLnRvLnJvdyYmdGhpcy5mcm9tLmNv''@;'; put 'put ''bD09PXRoaXMudG8uY29sfWlzSGVhZGVyKCl7cmV0dXJuISghdGhpcy5mcm9tLmlzSGVhZGVyKCl8fCF0aGlzLnRvLmlzSGVhZGVyKCkpfHx0aGlzLmZyb20uY29sPDAmJnRoaXMudG8uY29sPDB8fHRoaXMuZnJvbS5yb3c8MCYmdGhpcy50by5yb3c8MH1jb250YWluc0hlYWRlcnMoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5mcm9tLmlzSGVhZGVyKCl8fHRoaXMudG8uaXNIZWFkZXIoKX1nZXRPdXRlckhlaWdodCgpe3JldHVybiBNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KS1NYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSsxfWdldE91dGVyV2lkdGgoKXtyZXR1cm4g''@;'; put 'put ''TWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCktTWF0aC5taW4odGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkrMX1nZXRIZWlnaHQoKXtpZih0aGlzLmZyb20ucm93PDAmJnRoaXMudG8ucm93PDApcmV0dXJuIDA7Y29uc3QgbD1NYXRoLm1heCh0aGlzLmZyb20ucm93LDApLGE9''@;'; put 'put ''TWF0aC5tYXgodGhpcy50by5yb3csMCk7cmV0dXJuIE1hdGgubWF4KGwsYSktTWF0aC5taW4obCxhKSsxfWdldFdpZHRoKCl7aWYodGhpcy5mcm9tLmNvbDwwJiZ0aGlzLnRvLmNvbDwwKXJldHVybiAwO2NvbnN0IGw9TWF0aC5tYXgodGhpcy5mcm9tLmNvbCwwKSxhPU1hdGgubWF4KHRoaXMu''@;'; put 'put ''dG8uY29sLDApO3JldHVybiBNYXRoLm1heChsLGEpLU1hdGgubWluKGwsYSkrMX1nZXRDZWxsc0NvdW50KCl7cmV0dXJuIHRoaXMuZ2V0V2lkdGgoKSp0aGlzLmdldEhlaWdodCgpfWluY2x1ZGVzKGwpe2NvbnN0e3JvdzphLGNvbDpkfT1sLGg9dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVy''@;'; put 'put ''KCksZj10aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk7cmV0dXJuIGgucm93PD1hJiZmLnJvdz49YSYmaC5jb2w8PWQmJmYuY29sPj1kfWluY2x1ZGVzUmFuZ2UobCl7cmV0dXJuIHRoaXMuaW5jbHVkZXMobC5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkpJiZ0aGlzLmluY2x1ZGVzKGwu''@;'; put 'put ''Z2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSl9aXNFcXVhbChsKXtyZXR1cm4gTWF0aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyk9PT1NYXRoLm1pbihsLmZyb20ucm93LGwudG8ucm93KSYmTWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyk9PT1NYXRoLm1heChsLmZy''@;'; put 'put ''b20ucm93LGwudG8ucm93KSYmTWF0aC5taW4odGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCk9PT1NYXRoLm1pbihsLmZyb20uY29sLGwudG8uY29sKSYmTWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCk9PT1NYXRoLm1heChsLmZyb20uY29sLGwudG8uY29sKX1vdmVybGFwcyhs''@;'; put 'put ''KXtyZXR1cm4gbC5pc1NvdXRoRWFzdE9mKHRoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCkpJiZsLmlzTm9ydGhXZXN0T2YodGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkpfWlzU291dGhFYXN0T2YobCl7cmV0dXJuIHRoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCkuaXNTb3V0''@;'; put 'put ''aEVhc3RPZihsKXx8dGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkuaXNTb3V0aEVhc3RPZihsKX1pc05vcnRoV2VzdE9mKGwpe3JldHVybiB0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpLmlzTm9ydGhXZXN0T2YobCl8fHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigp''@;'; put 'put ''LmlzTm9ydGhXZXN0T2YobCl9aXNPdmVybGFwcGluZ0hvcml6b250YWxseShsKXtyZXR1cm4gdGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpLmNvbD49bC5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkuY29sJiZ0aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCkuY29sPD1sLmdldE91dGVyVG9w''@;'; put 'put ''RW5kQ29ybmVyKCkuY29sfHx0aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKS5jb2w8PWwuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKS5jb2wmJnRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLmNvbD49bC5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkuY29sfWlzT3ZlcmxhcHBpbmdWZXJ0''@;'; put 'put ''aWNhbGx5KGwpe3JldHVybiB0aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKS5yb3c+PWwuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLnJvdyYmdGhpcy5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCkucm93PD1sLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKS5yb3d8fHRoaXMu''@;'; put 'put ''Z2V0T3V0ZXJUb3BFbmRDb3JuZXIoKS5yb3c8PWwuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpLnJvdyYmdGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpLnJvdz49bC5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkucm93fWV4cGFuZChsKXtjb25zdCBhPXRoaXMuZ2V0T3V0ZXJUb3BTdGFy''@;'; put 'put ''dENvcm5lcigpLGQ9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpO3JldHVybihsLnJvdzxhLnJvd3x8bC5jb2w8YS5jb2x8fGwucm93PmQucm93fHxsLmNvbD5kLmNvbCkmJih0aGlzLmZyb209dGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbihhLnJvdyxsLnJvdyksTWF0aC5t''@;'; put 'put ''aW4oYS5jb2wsbC5jb2wpKSx0aGlzLnRvPXRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgoZC5yb3csbC5yb3cpLE1hdGgubWF4KGQuY29sLGwuY29sKSksITApfWV4cGFuZEJ5UmFuZ2UobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8''@;'; put 'put ''fGFyZ3VtZW50c1sxXTtpZih0aGlzLmluY2x1ZGVzUmFuZ2UobCl8fCF0aGlzLm92ZXJsYXBzKGwpKXJldHVybiExO2NvbnN0IGQ9dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksaD10aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCksZj10aGlzLmdldERpcmVjdGlvbigpLHY9bC5n''@;'; put 'put ''ZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksTT1sLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCksRD1NYXRoLm1pbihkLnJvdyx2LnJvdyksVT1NYXRoLm1pbihkLmNvbCx2LmNvbCksdGU9TWF0aC5tYXgoaC5yb3csTS5yb3cpLG9lPU1hdGgubWF4KGguY29sLE0uY29sKSx2ZT10aGlzLl9jcmVh''@;'; put 'put ''dGVDZWxsQ29vcmRzKEQsVSksd2U9dGhpcy5fY3JlYXRlQ2VsbENvb3Jkcyh0ZSxvZSk7cmV0dXJuIHRoaXMuZnJvbT12ZSx0aGlzLnRvPXdlLHRoaXMuc2V0RGlyZWN0aW9uKGYpLGEmJih0aGlzLmhpZ2hsaWdodC5yb3c9PT10aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKS5yb3cm''@;'; put 'put ''JiJOLVMiPT09dGhpcy5nZXRWZXJ0aWNhbERpcmVjdGlvbigpJiZ0aGlzLmZsaXBEaXJlY3Rpb25WZXJ0aWNhbGx5KCksdGhpcy5oaWdobGlnaHQuY29sPT09dGhpcy5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkuY29sJiYiVy1FIj09PXRoaXMuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpJiZ0''@;'; put 'put ''aGlzLmZsaXBEaXJlY3Rpb25Ib3Jpem9udGFsbHkoKSksITB9Z2V0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuZnJvbS5pc05vcnRoV2VzdE9mKHRoaXMudG8pPyJOVy1TRSI6dGhpcy5mcm9tLmlzTm9ydGhFYXN0T2YodGhpcy50byk/Ik5FLVNXIjp0aGlzLmZyb20uaXNTb3V0aEVhc3RPZih0''@;'; put 'put ''aGlzLnRvKT8iU0UtTlciOnRoaXMuZnJvbS5pc1NvdXRoV2VzdE9mKHRoaXMudG8pPyJTVy1ORSI6dm9pZCAwfXNldERpcmVjdGlvbihsKXtzd2l0Y2gobCl7Y2FzZSJOVy1TRSI6W3RoaXMuZnJvbSx0aGlzLnRvXT1bdGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKSx0aGlzLmdldE91dGVy''@;'; put 'put ''Qm90dG9tUmlnaHRDb3JuZXIoKV07YnJlYWs7Y2FzZSJORS1TVyI6W3RoaXMuZnJvbSx0aGlzLnRvXT1bdGhpcy5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCksdGhpcy5nZXRPdXRlckJvdHRvbUxlZnRDb3JuZXIoKV07YnJlYWs7Y2FzZSJTRS1OVyI6W3RoaXMuZnJvbSx0aGlzLnRvXT1bdGhp''@;'; put 'put ''cy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCksdGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKV07YnJlYWs7Y2FzZSJTVy1ORSI6W3RoaXMuZnJvbSx0aGlzLnRvXT1bdGhpcy5nZXRPdXRlckJvdHRvbUxlZnRDb3JuZXIoKSx0aGlzLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKV19fWdl''@;'; put 'put ''dFZlcnRpY2FsRGlyZWN0aW9uKCl7cmV0dXJuWyJORS1TVyIsIk5XLVNFIl0uaW5kZXhPZih0aGlzLmdldERpcmVjdGlvbigpKT4tMT8iTi1TIjoiUy1OIn1nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCl7cmV0dXJuWyJOVy1TRSIsIlNXLU5FIl0uaW5kZXhPZih0aGlzLmdldERpcmVjdGlvbigp''@;'; put 'put ''KT4tMT8iVy1FIjoiRS1XIn1mbGlwRGlyZWN0aW9uVmVydGljYWxseSgpe3N3aXRjaCh0aGlzLmdldERpcmVjdGlvbigpKXtjYXNlIk5XLVNFIjp0aGlzLnNldERpcmVjdGlvbigiU1ctTkUiKTticmVhaztjYXNlIk5FLVNXIjp0aGlzLnNldERpcmVjdGlvbigiU0UtTlciKTticmVhaztjYXNl''@;'; put 'put ''IlNFLU5XIjp0aGlzLnNldERpcmVjdGlvbigiTkUtU1ciKTticmVhaztjYXNlIlNXLU5FIjp0aGlzLnNldERpcmVjdGlvbigiTlctU0UiKX19ZmxpcERpcmVjdGlvbkhvcml6b250YWxseSgpe3N3aXRjaCh0aGlzLmdldERpcmVjdGlvbigpKXtjYXNlIk5XLVNFIjp0aGlzLnNldERpcmVjdGlv''@;'; put 'put ''bigiTkUtU1ciKTticmVhaztjYXNlIk5FLVNXIjp0aGlzLnNldERpcmVjdGlvbigiTlctU0UiKTticmVhaztjYXNlIlNFLU5XIjp0aGlzLnNldERpcmVjdGlvbigiU1ctTkUiKTticmVhaztjYXNlIlNXLU5FIjp0aGlzLnNldERpcmVjdGlvbigiU0UtTlciKX19Z2V0VG9wU3RhcnRDb3JuZXIo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSkubm9ybWFsaXplKCl9Z2V0VG9wTGVmdENvcm5lcigpe3JldHVybiBqZihiaCx0aGlzKT90aGlzLmdldFRv''@;'; put 'put ''cEVuZENvcm5lcigpOnRoaXMuZ2V0VG9wU3RhcnRDb3JuZXIoKX1nZXRCb3R0b21FbmRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSkubm9y''@;'; put 'put ''bWFsaXplKCl9Z2V0Qm90dG9tUmlnaHRDb3JuZXIoKXtyZXR1cm4gamYoYmgsdGhpcyk/dGhpcy5nZXRCb3R0b21TdGFydENvcm5lcigpOnRoaXMuZ2V0Qm90dG9tRW5kQ29ybmVyKCl9Z2V0VG9wRW5kQ29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5taW4odGhp''@;'; put 'put ''cy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkpLm5vcm1hbGl6ZSgpfWdldFRvcFJpZ2h0Q29ybmVyKCl7cmV0dXJuIGpmKGJoLHRoaXMpP3RoaXMuZ2V0VG9wU3RhcnRDb3JuZXIoKTp0aGlzLmdldFRvcEVuZENvcm5lcigpfWdldEJv''@;'; put 'put ''dHRvbVN0YXJ0Q29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5taW4odGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkpLm5vcm1hbGl6ZSgpfWdldEJvdHRvbUxlZnRDb3JuZXIoKXtyZXR1cm4gamYo''@;'; put 'put ''YmgsdGhpcyk/dGhpcy5nZXRCb3R0b21FbmRDb3JuZXIoKTp0aGlzLmdldEJvdHRvbVN0YXJ0Q29ybmVyKCl9Z2V0T3V0ZXJUb3BTdGFydENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWluKHRo''@;'; put 'put ''aXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKX1nZXRPdXRlclRvcExlZnRDb3JuZXIoKXtyZXR1cm4gamYoYmgsdGhpcyk/dGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpOnRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpfWdldE91dGVyQm90dG9tRW5kQ29ybmVyKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''X2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkpfWdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKXtyZXR1cm4gamYoYmgsdGhpcyk/dGhpcy5nZXRPdXRlckJvdHRvbVN0YXJ0Q29y''@;'; put 'put ''bmVyKCk6dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpfWdldE91dGVyVG9wRW5kQ29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkpfWdl''@;'; put 'put ''dE91dGVyVG9wUmlnaHRDb3JuZXIoKXtyZXR1cm4gamYoYmgsdGhpcyk/dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCk6dGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpfWdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1h''@;'; put 'put ''eCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSl9Z2V0T3V0ZXJCb3R0b21MZWZ0Q29ybmVyKCl7cmV0dXJuIGpmKGJoLHRoaXMpP3RoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTp0aGlzLmdldE91dGVyQm90dG9tU3Rh''@;'; put 'put ''cnRDb3JuZXIoKX1pc0Nvcm5lcihsKXtyZXR1cm4gbC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCkpfHxsLmlzRXF1YWwodGhpcy5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkpfHxsLmlzRXF1YWwodGhpcy5nZXRPdXRlckJvdHRvbUxlZnRDb3JuZXIoKSl8fGwuaXNFcXVh''@;'; put 'put ''bCh0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKSl9Z2V0T3Bwb3NpdGVDb3JuZXIobCl7cmV0dXJuIGwgaW5zdGFuY2VvZiBiTiYmKGwuaXNFcXVhbCh0aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCkpP3RoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpOmwuaXNFcXVhbCh0''@;'; put 'put ''aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSk/dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpOmwuaXNFcXVhbCh0aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCkpP3RoaXMuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpOmwuaXNFcXVhbCh0aGlzLmdldE91dGVyQm90dG9tU3Rh''@;'; put 'put ''cnRDb3JuZXIoKSk/dGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpOnZvaWQgMCl9Z2V0Qm9yZGVyc1NoYXJlZFdpdGgobCl7aWYoIXRoaXMuaW5jbHVkZXNSYW5nZShsKSlyZXR1cm5bXTtjb25zdCBhX3RvcD1NYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxhX2JvdHRvbT1N''@;'; put 'put ''YXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxhX2xlZnQ9TWF0aC5taW4odGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCksYV9yaWdodD1NYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSxkX3RvcD1NYXRoLm1pbihsLmZyb20ucm93LGwudG8ucm93KSxkX2JvdHRv''@;'; put 'put ''bT1NYXRoLm1heChsLmZyb20ucm93LGwudG8ucm93KSxkX2xlZnQ9TWF0aC5taW4obC5mcm9tLmNvbCxsLnRvLmNvbCksZF9yaWdodD1NYXRoLm1heChsLmZyb20uY29sLGwudG8uY29sKSxoPVtdO3JldHVybiBhX3RvcD09PWRfdG9wJiZoLnB1c2goInRvcCIpLGFfcmlnaHQ9PT1kX3JpZ2h0''@;'; put 'put ''JiZoLnB1c2goamYoYmgsdGhpcyk/ImxlZnQiOiJyaWdodCIpLGFfYm90dG9tPT09ZF9ib3R0b20mJmgucHVzaCgiYm90dG9tIiksYV9sZWZ0PT09ZF9sZWZ0JiZoLnB1c2goamYoYmgsdGhpcyk/InJpZ2h0IjoibGVmdCIpLGh9Z2V0SW5uZXIoKXtjb25zdCBsPXRoaXMuZ2V0T3V0ZXJUb3BT''@;'; put 'put ''dGFydENvcm5lcigpLGE9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLGQ9W107Zm9yKGxldCBoPWwucm93O2g8PWEucm93O2grKylmb3IobGV0IGY9bC5jb2w7Zjw9YS5jb2w7ZisrKSh0aGlzLmZyb20ucm93IT09aHx8dGhpcy5mcm9tLmNvbCE9PWYpJiYodGhpcy50by5yb3chPT1o''@;'; put 'put ''fHx0aGlzLnRvLmNvbCE9PWYpJiZkLnB1c2godGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhoLGYpKTtyZXR1cm4gZH1nZXRBbGwoKXtjb25zdCBsPXRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGE9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLGQ9W107Zm9yKGxldCBoPWwucm93''@;'; put 'put ''O2g8PWEucm93O2grKylmb3IobGV0IGY9bC5jb2w7Zjw9YS5jb2w7ZisrKWQucHVzaChsLnJvdz09PWgmJmwuY29sPT09Zj9sOmEucm93PT09aCYmYS5jb2w9PT1mP2E6dGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhoLGYpKTtyZXR1cm4gZH1mb3JBbGwobCl7Y29uc3QgYT10aGlzLmdldE91dGVy''@;'; put 'put ''VG9wU3RhcnRDb3JuZXIoKSxkPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTtmb3IobGV0IGg9YS5yb3c7aDw9ZC5yb3c7aCsrKWZvcihsZXQgZj1hLmNvbDtmPD1kLmNvbDtmKyspaWYoITE9PT1sKGgsZikpcmV0dXJufWNsb25lKCl7cmV0dXJuIG5ldyBCSih0aGlzLmhpZ2hsaWdo''@;'; put 'put ''dCx0aGlzLmZyb20sdGhpcy50byxqZihiaCx0aGlzKSl9dG9PYmplY3QoKXtyZXR1cm57ZnJvbTp0aGlzLmZyb20udG9PYmplY3QoKSx0bzp0aGlzLnRvLnRvT2JqZWN0KCl9fV9jcmVhdGVDZWxsQ29vcmRzKGwsYSl7cmV0dXJuIG5ldyBiTihsLGEsamYoYmgsdGhpcykpfX1jb25zdCBfTj1C''@;'; put 'put ''SjtmdW5jdGlvbiB6ZihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gYW90KGMpe3ZhciBsPWZ1bmN0aW9uIG9vdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8''@;'; put 'put ''fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0''@;'; put 'put ''dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3Mgakp7Z2V0IGV2ZW50TWFuYWdlcigpe3JldHVybiBuZXcg''@;'; put 'put ''VmYodGhpcyl9Y29uc3RydWN0b3IobCxhKXt6Zih0aGlzLCJ3dFRhYmxlIix2b2lkIDApLHpmKHRoaXMsInd0U2Nyb2xsIix2b2lkIDApLHpmKHRoaXMsInd0Vmlld3BvcnQiLHZvaWQgMCksemYodGhpcywid3RPdmVybGF5cyIsdm9pZCAwKSx6Zih0aGlzLCJzZWxlY3Rpb25NYW5hZ2VyIix2''@;'; put 'put ''b2lkIDApLHpmKHRoaXMsInd0RXZlbnQiLHZvaWQgMCksemYodGhpcywiZ3VpZCIsYHd0XyR7WnEoKX1gKSx6Zih0aGlzLCJkcmF3SW50ZXJydXB0ZWQiLCExKSx6Zih0aGlzLCJkcmF3biIsITEpLHpmKHRoaXMsImFjdGl2ZU92ZXJsYXlOYW1lIiwibWFzdGVyIiksemYodGhpcywiZG9tQmlu''@;'; put 'put ''ZGluZ3MiLHZvaWQgMCksemYodGhpcywid3RTZXR0aW5ncyIsdm9pZCAwKSx0aGlzLmRvbUJpbmRpbmdzPXtyb290VGFibGU6bCxyb290RG9jdW1lbnQ6bC5vd25lckRvY3VtZW50LHJvb3RXaW5kb3c6bC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fSx0aGlzLnd0U2V0dGluZ3M9YSx0aGlz''@;'; put 'put ''Lnd0U2Nyb2xsPW5ldyBLYXQodGhpcy5jcmVhdGVTY3JvbGxEYW8oKSl9ZmluZE9yaWdpbmFsSGVhZGVycygpe2NvbnN0IGw9W107aWYodGhpcy53dFRhYmxlLlRIRUFELmNoaWxkTm9kZXMubGVuZ3RoJiZ0aGlzLnd0VGFibGUuVEhFQUQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0''@;'; put 'put ''aCl7Zm9yKGxldCBhPTAsZD10aGlzLnd0VGFibGUuVEhFQUQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aDthPGQ7YSsrKWwucHVzaCh0aGlzLnd0VGFibGUuVEhFQUQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzW2FdLmlubmVySFRNTCk7dGhpcy53dFNldHRpbmdzLmdldFNldHRp''@;'; put 'put ''bmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGh8fHRoaXMud3RTZXR0aW5ncy51cGRhdGUoImNvbHVtbkhlYWRlcnMiLFtmdW5jdGlvbihhLGQpe0E2KGQsbFthXSl9XSl9fWNyZWF0ZUNlbGxDb29yZHMobCxhKXtyZXR1cm4gbmV3IGJOKGwsYSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygi''@;'; put 'put ''cnRsTW9kZSIpKX1jcmVhdGVDZWxsUmFuZ2UobCxhLGQpe3JldHVybiBuZXcgX04obCxhLGQsdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJ0bE1vZGUiKSl9ZHJhdygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07cmV0''@;'; put 'put ''dXJuIHRoaXMuZHJhd0ludGVycnVwdGVkPSExLCF0aGlzLnd0VGFibGUuaXNWaXNpYmxlKCl8fGZnZSh0aGlzLnd0VGFibGUud3RSb290RWxlbWVudC5wYXJlbnROb2RlKT90aGlzLmRyYXdJbnRlcnJ1cHRlZD0hMDp0aGlzLnd0VGFibGUuZHJhdyhsKSx0aGlzfWdldENlbGwobCl7aWYoIShh''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdKSlyZXR1cm4gdGhpcy53dFRhYmxlLmdldENlbGwobCk7Y29uc3QgZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiksaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygi''@;'; put 'put ''Zml4ZWRSb3dzVG9wIiksZj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIiksdj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKTtpZihsLnJvdzxoJiZsLmNvbDx2KXJldHVybiB0aGlzLnd0T3ZlcmxheXMudG9wSW5saW5l''@;'; put 'put ''U3RhcnRDb3JuZXJPdmVybGF5LmNsb25lLnd0VGFibGUuZ2V0Q2VsbChsKTtpZihsLnJvdzxoKXJldHVybiB0aGlzLnd0T3ZlcmxheXMudG9wT3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENlbGwobCk7aWYobC5jb2w8diYmbC5yb3c+PWQtZil7aWYodGhpcy53dE92ZXJsYXlzLmJvdHRvbUlu''@;'; put 'put ''bGluZVN0YXJ0Q29ybmVyT3ZlcmxheSYmdGhpcy53dE92ZXJsYXlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZSlyZXR1cm4gdGhpcy53dE92ZXJsYXlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENlbGwobCl9ZWxzZXtpZihs''@;'; put 'put ''LmNvbDx2KXJldHVybiB0aGlzLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmNsb25lLnd0VGFibGUuZ2V0Q2VsbChsKTtpZihsLnJvdzxkJiZsLnJvdz49ZC1mJiZ0aGlzLnd0T3ZlcmxheXMuYm90dG9tT3ZlcmxheSYmdGhpcy53dE92ZXJsYXlzLmJvdHRvbU92ZXJsYXkuY2xvbmUp''@;'; put 'put ''cmV0dXJuIHRoaXMud3RPdmVybGF5cy5ib3R0b21PdmVybGF5LmNsb25lLnd0VGFibGUuZ2V0Q2VsbChsKX1yZXR1cm4gdGhpcy53dFRhYmxlLmdldENlbGwobCl9c2Nyb2xsVmlld3BvcnQobCxhLGQpe3JldHVybiB0aGlzLnd0U2Nyb2xsLnNjcm9sbFZpZXdwb3J0KGwsYSxkKX1zY3JvbGxW''@;'; put 'put ''aWV3cG9ydEhvcml6b250YWxseShsLGEpe3JldHVybiB0aGlzLnd0U2Nyb2xsLnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwsYSl9c2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSl7cmV0dXJuIHRoaXMud3RTY3JvbGwuc2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSl9Z2V0Vmll''@;'; put 'put ''d3BvcnQoKXtyZXR1cm5bdGhpcy53dFRhYmxlLmdldEZpcnN0VmlzaWJsZVJvdygpLHRoaXMud3RUYWJsZS5nZXRGaXJzdFZpc2libGVDb2x1bW4oKSx0aGlzLnd0VGFibGUuZ2V0TGFzdFZpc2libGVSb3coKSx0aGlzLnd0VGFibGUuZ2V0TGFzdFZpc2libGVDb2x1bW4oKV19ZGVzdHJveSgp''@;'; put 'put ''e3RoaXMud3RPdmVybGF5cy5kZXN0cm95KCksdGhpcy53dEV2ZW50LmRlc3Ryb3koKX1jcmVhdGVTY3JvbGxEYW8oKXtjb25zdCBsPXRoaXM7cmV0dXJue2dldCBkcmF3bigpe3JldHVybiBsLmRyYXdufSxnZXQgdG9wT3ZlcmxheSgpe3JldHVybiBsLnd0T3ZlcmxheXMudG9wT3ZlcmxheX0s''@;'; put 'put ''Z2V0IGlubGluZVN0YXJ0T3ZlcmxheSgpe3JldHVybiBsLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5fSxnZXQgd3RUYWJsZSgpe3JldHVybiBsLnd0VGFibGV9LGdldCB3dFZpZXdwb3J0KCl7cmV0dXJuIGwud3RWaWV3cG9ydH0sZ2V0IHd0U2V0dGluZ3MoKXtyZXR1cm4gbC53dFNl''@;'; put 'put ''dHRpbmdzfSxnZXQgcm9vdFdpbmRvdygpe3JldHVybiBsLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3d9LGdldCB0b3RhbFJvd3MoKXtyZXR1cm4gbC53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpfSxnZXQgdG90YWxDb2x1bW5zKCl7cmV0dXJuIGwud3RTZXR0aW5ncy5nZXRTZXR0''@;'; put 'put ''aW5nKCJ0b3RhbENvbHVtbnMiKX0sZ2V0IGZpeGVkUm93c1RvcCgpe3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIil9LGdldCBmaXhlZFJvd3NCb3R0b20oKXtyZXR1cm4gbC53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpfSxnZXQg''@;'; put 'put ''Zml4ZWRDb2x1bW5zU3RhcnQoKXtyZXR1cm4gbC53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iil9fX1nZXRUYWJsZURhbygpe2NvbnN0IGw9dGhpcztyZXR1cm57Z2V0IHdvdCgpe3JldHVybiBsfSxnZXQgcGFyZW50VGFibGVPZmZzZXQoKXtyZXR1cm4gbC5jbG9u''@;'; put 'put ''ZVNvdXJjZS53dFRhYmxlLnRhYmxlT2Zmc2V0fSxnZXQgY2xvbmVTb3VyY2UoKXtyZXR1cm4gbC5jbG9uZVNvdXJjZX0sZ2V0IHdvcmtzcGFjZVdpZHRoKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5nZXRXb3Jrc3BhY2VXaWR0aCgpfSxnZXQgd3RWaWV3cG9ydCgpe3JldHVybiBsLnd0Vmlld3Bv''@;'; put 'put ''cnR9LGdldCB3dE92ZXJsYXlzKCl7cmV0dXJuIGwud3RPdmVybGF5c30sZ2V0IHNlbGVjdGlvbk1hbmFnZXIoKXtyZXR1cm4gbC5zZWxlY3Rpb25NYW5hZ2VyfSxnZXQgZHJhd24oKXtyZXR1cm4gbC5kcmF3bn0sc2V0IGRyYXduKGEpe2wuZHJhd249YX0sZ2V0IHd0VGFibGUoKXtyZXR1cm4g''@;'; put 'put ''bC53dFRhYmxlfSxnZXQgc3RhcnRDb2x1bW5SZW5kZXJlZCgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRDb2x1bW59LGdldCBzdGFydENvbHVtblZpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvci5z''@;'; put 'put ''dGFydENvbHVtbn0sZ2V0IHN0YXJ0Q29sdW1uUGFydGlhbGx5VmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29sdW1uc1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yLnN0YXJ0Q29sdW1ufSxnZXQgZW5kQ29sdW1uUmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNS''@;'; put 'put ''ZW5kZXJDYWxjdWxhdG9yLmVuZENvbHVtbn0sZ2V0IGVuZENvbHVtblZpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvci5lbmRDb2x1bW59LGdldCBlbmRDb2x1bW5QYXJ0aWFsbHlWaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5z''@;'; put 'put ''UGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3IuZW5kQ29sdW1ufSxnZXQgY291bnRDb2x1bW5zUmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLmNvdW50fSxnZXQgY291bnRDb2x1bW5zVmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29s''@;'; put 'put ''dW1uc1Zpc2libGVDYWxjdWxhdG9yLmNvdW50fSxnZXQgc3RhcnRSb3dSZW5kZXJlZCgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRSb3d9LGdldCBzdGFydFJvd1Zpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NWaXNpYmxlQ2FsY3VsYXRv''@;'; put 'put ''ci5zdGFydFJvd30sZ2V0IHN0YXJ0Um93UGFydGlhbGx5VmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yLnN0YXJ0Um93fSxnZXQgZW5kUm93UmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9y''@;'; put 'put ''LmVuZFJvd30sZ2V0IGVuZFJvd1Zpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NWaXNpYmxlQ2FsY3VsYXRvci5lbmRSb3d9LGdldCBlbmRSb3dQYXJ0aWFsbHlWaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3IuZW5kUm93''@;'; put 'put ''fSxnZXQgY291bnRSb3dzUmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLmNvdW50fSxnZXQgY291bnRSb3dzVmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1Zpc2libGVDYWxjdWxhdG9yLmNvdW50fSxnZXQgY29sdW1uSGVhZGVycygp''@;'; put 'put ''e3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpfSxnZXQgcm93SGVhZGVycygpe3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVycyIpfX19fWZ1bmN0aW9uIGg1ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gc290KGMpe3ZhciBs''@;'; put 'put ''PWZ1bmN0aW9uIGxvdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgY290IGV4dGVuZHMgakp7Y29uc3RydWN0b3IobCxhLGQpe3N1cGVyKGwsYSksaDVlKHRoaXMsImNsb25lU291cmNlIix2b2lkIDApLGg1ZSh0aGlz''@;'; put 'put ''LCJjbG9uZU92ZXJsYXkiLHZvaWQgMCk7Y29uc3QgaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZmFjYWRlIix0aGlzKTt0aGlzLmNsb25lU291cmNlPWQuc291cmNlLHRoaXMuY2xvbmVPdmVybGF5PWQub3ZlcmxheSx0aGlzLnd0VGFibGU9dGhpcy5jbG9uZU92ZXJsYXkuY3JlYXRl''@;'; put 'put ''VGFibGUodGhpcy5nZXRUYWJsZURhbygpLGgsdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MpLHRoaXMud3RWaWV3cG9ydD1kLnZpZXdwb3J0LHRoaXMuc2VsZWN0aW9uTWFuYWdlcj1kLnNlbGVjdGlvbk1hbmFnZXIsdGhpcy53dEV2ZW50PW5ldyBXZ2UoaCx0aGlzLmRvbUJpbmRp''@;'; put 'put ''bmdzLHRoaXMud3RTZXR0aW5ncyx0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnd0VGFibGUsdGhpcy5zZWxlY3Rpb25NYW5hZ2VyLGQuZXZlbnQpLHRoaXMuZmluZE9yaWdpbmFsSGVhZGVycygpfX1jbGFzcyB0a3tjb25zdHJ1Y3RvcihsLGEsZCxoLGYpeyhmdW5jdGlvbiB1b3QoYyxsLGEpe3Jl''@;'; put 'put ''dHVybihsPWZ1bmN0aW9uIGRvdChjKXt2YXIgbD1mdW5jdGlvbiBob3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3Qi''@;'; put 'put ''IT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9s''@;'; put 'put ''OmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSkodGhpcywid3RTZXR0aW5ncyIsbnVsbCksUzQodGhpcywid290IixsLHt3cml0YWJsZTohMX0pLHRoaXMu''@;'; put 'put ''ZG9tQmluZGluZ3M9Zix0aGlzLmZhY2FkZUdldHRlcj1hLHRoaXMud3RTZXR0aW5ncz1oO2NvbnN0e1RBQkxFOnYsaGlkZXI6TSxzcHJlYWRlcjpELGhvbGRlcjpVLHd0Um9vdEVsZW1lbnQ6dGV9PXRoaXMud290Lnd0VGFibGU7dGhpcy5pbnN0YW5jZT10aGlzLndvdCx0aGlzLnR5cGU9ZCx0''@;'; put 'put ''aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PW51bGwsdGhpcy5UQUJMRT12LHRoaXMuaGlkZXI9TSx0aGlzLnNwcmVhZGVyPUQsdGhpcy5ob2xkZXI9VSx0aGlzLnd0Um9vdEVsZW1lbnQ9dGUsdGhpcy50cmltbWluZ0NvbnRhaW5lcj1Odyh0aGlzLmhpZGVyLnBhcmVudE5vZGUucGFy''@;'; put 'put ''ZW50Tm9kZSksdGhpcy5uZWVkRnVsbFJlbmRlcj10aGlzLnNob3VsZEJlUmVuZGVyZWQoKSx0aGlzLmNsb25lPXRoaXMubWFrZUNsb25lKCl9aGFzUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCl7cmV0dXJuIHRoaXMubmVlZEZ1bGxSZW5kZXIhPT10aGlzLnNob3VsZEJlUmVuZGVyZWQoKX11cGRh''@;'; put 'put ''dGVTdGF0ZU9mUmVuZGVyaW5nKGwpeyJiZWZvcmUiPT09bCYmdGhpcy5zaG91bGRCZVJlbmRlcmVkKCk/dGhpcy5uZWVkRnVsbFJlbmRlcj0hMDoiYWZ0ZXIiPT09bCYmIXRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpJiYodGhpcy5uZWVkRnVsbFJlbmRlcj0hMSl9c2hvdWxkQmVSZW5kZXJlZCgp''@;'; put 'put ''e3JldHVybiEwfXVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCl7dGhpcy50cmltbWluZ0NvbnRhaW5lcj1Odyh0aGlzLmhpZGVyLnBhcmVudE5vZGUucGFyZW50Tm9kZSl9dXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50KCl7Y29uc3R7d3RUYWJsZTpsfT10aGlzLndvdCx7cm9vdFdpbmRvdzph''@;'; put 'put ''fT10aGlzLmRvbUJpbmRpbmdzO3RoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9ImhpZGRlbiI9PT1hLmdldENvbXB1dGVkU3R5bGUobC53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUpLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93Iik/dGhpcy53b3Qud3RUYWJsZS5ob2xkZXI6VUEo''@;'; put 'put ''bC5UQUJMRSl9Z2V0UmVsYXRpdmVDZWxsUG9zaXRpb24obCxhLGQpe2lmKCExPT09dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5jb250YWlucyhsKSlyZXR1cm4gdm9pZCBvcyhgVGhlIHByb3ZpZGVkIGVsZW1lbnQgaXMgbm90IGEgY2hpbGQgb2YgdGhlICR7dGhpcy50eXBlfSBvdmVybGF5''@;'; put 'put ''YCk7Y29uc3QgaD10aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93LGY9ZDx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSx2PWE8dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93''@;'; put 'put ''c1RvcCIpLE09YT49dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxEPXRoaXMuY2xvbmUud3RUYWJsZS5zcHJlYWRlcixVPXtzdGFydDp0aGlzLmdldFJlbGF0aXZlU3RhcnRQb3NpdGlv''@;'; put 'put ''bihEKSx0b3A6RC5vZmZzZXRUb3B9LHRlPXtzdGFydDp0aGlzLmdldFJlbGF0aXZlU3RhcnRQb3NpdGlvbihsKSx0b3A6bC5vZmZzZXRUb3B9O2xldCBvZT1udWxsO3JldHVybiBvZT1oP3RoaXMuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb25XaXRoaW5XaW5kb3codixmLHRlLFUpOnRoaXMuZ2V0''@;'; put 'put ''UmVsYXRpdmVDZWxsUG9zaXRpb25XaXRoaW5Ib2xkZXIodixNLGYsdGUsVSksb2V9Z2V0UmVsYXRpdmVTdGFydFBvc2l0aW9uKGwpe3JldHVybiB0aGlzLmlzUnRsKCk/bC5vZmZzZXRQYXJlbnQub2Zmc2V0V2lkdGgtbC5vZmZzZXRMZWZ0LWwub2Zmc2V0V2lkdGg6bC5vZmZzZXRMZWZ0fWdl''@;'; put 'put ''dFJlbGF0aXZlQ2VsbFBvc2l0aW9uV2l0aGluV2luZG93KGwsYSxkLGgpe2NvbnN0IGY9dGhpcy53b3Qud3RUYWJsZS53dFJvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCB2PTAsTT0wO2lmKGEpe2xldCBEPWYubGVmdDt0aGlzLmlzUnRsKCkmJihEPXRoaXMuZG9tQmlu''@;'; put 'put ''ZGluZ3Mucm9vdFdpbmRvdy5pbm5lcldpZHRoLShmLmxlZnQrZi53aWR0aCt3dSgpKSksdj1EPD0wPy0xKkQ6MH1lbHNlIHY9aC5zdGFydDtyZXR1cm4gTT1sP3RoaXMuY2xvbmUud3RUYWJsZS5UQUJMRS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AtZi50b3A6aC50b3Ase3N0YXJ0OmQu''@;'; put 'put ''c3RhcnQrdix0b3A6ZC50b3ArTX19Z2V0UmVsYXRpdmVDZWxsUG9zaXRpb25XaXRoaW5Ib2xkZXIobCxhLGQsaCxmKXtjb25zdCB2X2hvcml6b250YWw9dGhpcy53b3Qud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKSx2X3ZlcnRpY2FsPXRoaXMud290''@;'; put 'put ''Lnd0T3ZlcmxheXMudG9wT3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpO2xldCBNPTAsRD0wO2lmKGR8fChNPXZfaG9yaXpvbnRhbC1mLnN0YXJ0KSxhKXtjb25zdCBVPXRoaXMud290Lnd0VGFibGUud3RSb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtEPS0xKnRoaXMuY2xv''@;'; put 'put ''bmUud3RUYWJsZS5UQUJMRS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3ArVS50b3B9ZWxzZSBsfHwoRD12X3ZlcnRpY2FsLWYudG9wKTtyZXR1cm57c3RhcnQ6aC5zdGFydC1NLHRvcDpoLnRvcC1EfX1tYWtlQ2xvbmUoKXtpZigtMT09PW41ZS5pbmRleE9mKHRoaXMudHlwZSkpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKGBDbG9uZSB0eXBlICIke3RoaXMudHlwZX0iIGlzIG5vdCBzdXBwb3J0ZWQuYCk7Y29uc3R7d3RUYWJsZTpsLHd0U2V0dGluZ3M6YX09dGhpcy53b3Qse3Jvb3REb2N1bWVudDpkLHJvb3RXaW5kb3c6aH09dGhpcy5kb21CaW5kaW5ncyxmPWQuY3JlYXRlRWxlbWVudCgiZGl2''@;'; put 'put ''Iiksdj1kLmNyZWF0ZUVsZW1lbnQoInRhYmxlIiksTT1sLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZTtmLmNsYXNzTmFtZT1gJHtGYXQuZ2V0KHRoaXMudHlwZSl9IGhhbmRzb250YWJsZWAsZi5zZXRBdHRyaWJ1dGUoImRpciIsdGhpcy5pc1J0bCgpPyJydGwiOiJsdHIiKSxmLnN0eWxlLnBv''@;'; put 'put ''c2l0aW9uPSJhYnNvbHV0ZSIsZi5zdHlsZS50b3A9MCxmLnN0eWxlLm92ZXJmbG93PSJ2aXNpYmxlIix0aGlzLmlzUnRsKCk/Zi5zdHlsZS5yaWdodD0wOmYuc3R5bGUubGVmdD0wLGEuZ2V0U2V0dGluZygiYXJpYVRhZ3MiKSYmWmEoZixbWyJyb2xlIiwicHJlc2VudGF0aW9uIl1dKSx2LmNs''@;'; put 'put ''YXNzTmFtZT1sLlRBQkxFLmNsYXNzTmFtZSxsLlRBQkxFLmdldEF0dHJpYnV0ZSgicm9sZSIpJiZ2LnNldEF0dHJpYnV0ZSgicm9sZSIsbC5UQUJMRS5nZXRBdHRyaWJ1dGUoInJvbGUiKSksZi5hcHBlbmRDaGlsZCh2KSxNLmFwcGVuZENoaWxkKGYpO2NvbnN0IFU9dGhpcy53dFNldHRpbmdz''@;'; put 'put ''LmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO3JldHVybiB0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PSEwPT09VXx8Imhvcml6b250YWwiPT09VSYmdGhpcy50eXBlPT09aXZ8fCJ2ZXJ0aWNhbCI9PT1VJiZ0aGlzLnR5cGU9PT1hdj9oOiJoaWRkZW4iPT09aC5nZXRDb21w''@;'; put 'put ''dXRlZFN0eWxlKE0pLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93Iik/bC5ob2xkZXI6VUEobC5UQUJMRSksbmV3IGNvdCh2LHRoaXMud3RTZXR0aW5ncyx7c291cmNlOnRoaXMud290LG92ZXJsYXk6dGhpcyx2aWV3cG9ydDp0aGlzLndvdC53dFZpZXdwb3J0LGV2ZW50OnRoaXMud290Lnd0''@;'; put 'put ''RXZlbnQsc2VsZWN0aW9uTWFuYWdlcjp0aGlzLndvdC5zZWxlY3Rpb25NYW5hZ2VyfSl9cmVmcmVzaCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYodGhpcy5uZWVkRnVsbFJlbmRlcil7Y29uc3QgYT10aGlzLmNsb25l''@;'; put 'put ''LmNsb25lU291cmNlO2EuYWN0aXZlT3ZlcmxheU5hbWU9dGhpcy5jbG9uZS53dFRhYmxlLm5hbWUsdGhpcy5jbG9uZS5kcmF3KGwpLGEuYWN0aXZlT3ZlcmxheU5hbWU9Im1hc3RlciJ9fXJlc2V0KCl7Y29uc3QgbD10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyO1tsLnN0eWxlLHRoaXMuY2xv''@;'; put 'put ''bmUud3RUYWJsZS5oaWRlci5zdHlsZSxsLnBhcmVudE5vZGUuc3R5bGVdLmZvckVhY2godj0+e3Yud2lkdGg9IiIsdi5oZWlnaHQ9IiJ9KX1pc1J0bCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpfWRlc3Ryb3koKXt0aGlzLmNsb25lLmV2ZW50TWFuYWdl''@;'; put 'put ''ci5kZXN0cm95KCl9fWNvbnN0IHpKPWM9Pntjb25zdCBsPWMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzdHlsZXNIYW5kbGVyIik7aWYobC5pc0NsYXNzaWNUaGVtZSgpKXJldHVybiBPYmplY3QuZnJlZXplKHt3aWR0aDo2LGhlaWdodDo2LGJvcmRlcldpZHRoOjEsYm9yZGVyU3R5bGU6InNv''@;'; put 'put ''bGlkIixib3JkZXJDb2xvcjoiI0ZGRiJ9KTtjb25zdCBhPWwuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1hdXRvZmlsbC1zaXplIiksZD1sLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtYXV0b2ZpbGwtYm9yZGVyLXdpZHRoIiksaD1sLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtYXV0''@;'; put 'put ''b2ZpbGwtYm9yZGVyLWNvbG9yIik7cmV0dXJuIE9iamVjdC5mcmVlemUoe3dpZHRoOmEsaGVpZ2h0OmEsYm9yZGVyV2lkdGg6ZCxib3JkZXJTdHlsZToic29saWQiLGJvcmRlckNvbG9yOmh9KX07Y2xhc3MgbW90IGV4dGVuZHMgdGt7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGl2''@;'; put 'put ''LGQsaCksZnVuY3Rpb24gZm90KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBwb3QoYyl7dmFyIGw9ZnVuY3Rpb24gZ290KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxs''@;'; put 'put ''KGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmci''@;'; put 'put ''KTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiY2FjaGVkRml4ZWRSb3dzVG9wIiwtMSksdGhp''@;'; put 'put ''cy5jYWNoZWRGaXhlZFJvd3NUb3A9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpfWNyZWF0ZVRhYmxlKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07cmV0dXJuIG5ldyB6YXQo''@;'; put 'put ''Li4uYSl9c2hvdWxkQmVSZW5kZXJlZCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVyVG9wT3ZlcmxheSIpfXJlc2V0Rml4ZWRQb3NpdGlvbigpe2lmKCF0aGlzLm5lZWRGdWxsUmVuZGVyfHwhdGhpcy5zaG91bGRCZVJlbmRlcmVkKCl8fCF0aGlzLndv''@;'; put 'put ''dC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0IGw9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLHtyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3MsZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7bGV0''@;'; put 'put ''IGg9MCxmPSExO2lmKHRoaXMudHJpbW1pbmdDb250YWluZXIhPT1hfHxkJiYidmVydGljYWwiPT09ZCloPXRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKSxZQShsKTtlbHNle2NvbnN0e3d0VGFibGU6TX09dGhpcy53b3QsRD1NLmhpZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Y9TWF0aC5j''@;'; put 'put ''ZWlsKEQuYm90dG9tKT09PWwub2Zmc2V0SGVpZ2h0LGg9dGhpcy5nZXRPdmVybGF5T2Zmc2V0KCksb04obCwiMHB4IixgJHtofXB4YCl9Y29uc3Qgdj10aGlzLmFkanVzdEhlYWRlckJvcmRlcnNQb3NpdGlvbihoLGYpO3JldHVybiB0aGlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpLHZ9c2V0U2Ny''@;'; put 'put ''b2xsUG9zaXRpb24obCl7Y29uc3R7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzLGQ9dGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudDtsZXQgaD0hMTtpZihkPT09YSYmbCE9PWEuc2Nyb2xsWSl7Y29uc3QgZj1hLnNjcm9sbFk7YS5zY3JvbGxUbyhpTihhKSxsKSxoPWYhPT1h''@;'; put 'put ''LnNjcm9sbFl9ZWxzZSBpZihsIT09ZC5zY3JvbGxUb3Ape2NvbnN0IGY9ZC5zY3JvbGxUb3A7ZC5zY3JvbGxUb3A9bCxoPWYhPT1kLnNjcm9sbFRvcH1yZXR1cm4gaH1vblNjcm9sbCgpe3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvblNjcm9sbEhvcml6b250YWxseSIpfXN1bUNlbGxT''@;'; put 'put ''aXplcyhsLGEpe2NvbnN0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInN0eWxlc0hhbmRsZXIiKS5nZXREZWZhdWx0Um93SGVpZ2h0KCk7bGV0IGg9bCxmPTA7Zm9yKDtoPGE7KXtjb25zdCB2PXRoaXMud290Lnd0VGFibGUuZ2V0Um93SGVpZ2h0KGgpO2YrPXZvaWQgMD09PXY/ZDp2''@;'; put 'put ''LGgrPTF9cmV0dXJuIGZ9YWRqdXN0RWxlbWVudHNTaXplKCl7dGhpcy51cGRhdGVUcmltbWluZ0NvbnRhaW5lcigpLHRoaXMubmVlZEZ1bGxSZW5kZXImJih0aGlzLmFkanVzdFJvb3RFbGVtZW50U2l6ZSgpLHRoaXMuYWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpKX1hZGp1c3RSb290RWxlbWVu''@;'; put 'put ''dFNpemUoKXtjb25zdHt3dFRhYmxlOmwsd3RWaWV3cG9ydDphfT10aGlzLndvdCx7cm9vdERvY3VtZW50OmQscm9vdFdpbmRvdzpofT10aGlzLmRvbUJpbmRpbmdzLHY9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLnN0eWxlLE09dGhpcy53dFNldHRpbmdzLmdldFNldHRp''@;'; put 'put ''bmcoInByZXZlbnRPdmVyZmxvdyIpO2lmKHRoaXMudHJpbW1pbmdDb250YWluZXIhPT1ofHwiaG9yaXpvbnRhbCI9PT1NKXtsZXQgVT1hLmdldFdvcmtzcGFjZVdpZHRoKCk7YS5oYXNWZXJ0aWNhbFNjcm9sbCgpJiYoVS09d3UoZCkpLFU9TWF0aC5taW4oVSxsLnd0Um9vdEVsZW1lbnQuc2Ny''@;'; put 'put ''b2xsV2lkdGgpLHYud2lkdGg9YCR7VX1weGB9ZWxzZSB2LndpZHRoPSIiO3RoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIuc3R5bGUud2lkdGg9di53aWR0aDtsZXQgRD1GdSh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO2wuaGFzRGVmaW5lZFNpemUoKXx8KEQ9MCksdi5oZWlnaHQ9YCR7RH1w''@;'; put 'put ''eGB9YWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpe2NvbnN0e2hvbGRlcjpsfT10aGlzLmNsb25lLnd0VGFibGUsYT16Sih0aGlzLndvdCksZD10aGlzLndvdC5zZWxlY3Rpb25NYW5hZ2VyLmdldEZvY3VzU2VsZWN0aW9uKCk/cGFyc2VJbnQoYS5oZWlnaHQsMTApLzI6MDt0aGlzLmNsb25lLnd0''@;'; put 'put ''VGFibGUuaGlkZXIuc3R5bGUud2lkdGg9dGhpcy5oaWRlci5zdHlsZS53aWR0aCxsLnN0eWxlLndpZHRoPWwucGFyZW50Tm9kZS5zdHlsZS53aWR0aCxsLnN0eWxlLmhlaWdodD1gJHtwYXJzZUludChsLnBhcmVudE5vZGUuc3R5bGUuaGVpZ2h0LDEwKStkfXB4YH1hcHBseVRvRE9NKCl7Y29u''@;'; put 'put ''c3QgbD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik7aWYoIm51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24pdGhpcy5zcHJlYWRlci5zdHlsZS50b3A9YCR7dGhpcy53b3Qud3RWaWV3cG9y''@;'; put 'put ''dC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9ufXB4YDtlbHNle2lmKDAhPT1sKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IHZhbHVlIG9mIHRoZSByb3dzUmVuZGVyQ2FsY3VsYXRvciIpO3RoaXMuc3ByZWFkZXIuc3R5bGUudG9wPSIwIn10aGlzLnNwcmVhZGVyLnN0eWxl''@;'; put 'put ''LmJvdHRvbT0iIix0aGlzLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLnN5bmNPdmVybGF5T2Zmc2V0KCl9c3luY092ZXJsYXlPZmZzZXQoKXtjb25zdCBsPXRoaXMuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Iix7c3ByZWFkZXI6YX09dGhpcy5jbG9uZS53dFRhYmxlO2Euc3R5bGVbbF09Im51bWJlciI9''@;'; put 'put ''PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24/YCR7dGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9ufXB4YDoiIn1zY3JvbGxUbyhsLGEpe2NvbnN0e3dvdDpkLHd0U2V0''@;'; put 'put ''dGluZ3M6aH09dGhpcyx2PShkLmNsb25lU291cmNlP2QuY2xvbmVTb3VyY2U6ZCkud3RUYWJsZS5ob2xkZXIsTT1oLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKSxVPTA9PT1oLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpJiZNLmxlbmd0aD4wJiYhQ28odi5wYXJlbnROb2RlLCJpbm5l''@;'; put 'put ''ckJvcmRlclRvcCIpPzE6MDtsZXQgdGU9dGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLG9lPTA7aWYoYSYmdGhpcy53b3Qud3RUYWJsZS5nZXRSb3dIZWlnaHQobCk+dGhpcy53b3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydEhlaWdodCgpJiYoYT0hMSksYSYmdi5vZmZzZXRIZWlnaHQhPT12''@;'; put 'put ''LmNsaWVudEhlaWdodCYmKG9lPXd1KHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50KSksYSl7Y29uc3QgdmU9aC5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSx3ZT1oLmdldFNldHRpbmcoInRvdGFsUm93cyIpO3RlKz10aGlzLnN1bUNlbGxTaXplcygwLGwrMSksdGUtPWQud3RW''@;'; put 'put ''aWV3cG9ydC5nZXRWaWV3cG9ydEhlaWdodCgpLXRoaXMuc3VtQ2VsbFNpemVzKHdlLXZlLHdlKSx0ZSs9MSx0ZSs9VX1lbHNlIHRlKz10aGlzLnN1bUNlbGxTaXplcyhoLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLGwpO3JldHVybiB0ZSs9b2UscGdlKHRoaXMubWFpblRhYmxlU2Nyb2xs''@;'; put 'put ''YWJsZUVsZW1lbnQpPT09dGUtVSYmVT4wJiZ0aGlzLndvdC53dE92ZXJsYXlzLmV4cGFuZEhpZGVyVmVydGljYWxseUJ5KFUpLHRoaXMuc2V0U2Nyb2xsUG9zaXRpb24odGUpfWdldFRhYmxlUGFyZW50T2Zmc2V0KCl7cmV0dXJuIHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT10''@;'; put 'put ''aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3c/dGhpcy53b3Qud3RUYWJsZS5ob2xkZXJPZmZzZXQudG9wOjB9Z2V0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm4gYU4odGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCx0aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cpfWdldE92ZXJsYXlP''@;'; put 'put ''ZmZzZXQoKXtjb25zdHtyb290V2luZG93Omx9PXRoaXMuZG9tQmluZGluZ3MsYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7bGV0IGQ9MDtpZih0aGlzLnRyaW1taW5nQ29udGFpbmVyPT09bCYmKCFhfHwidmVydGljYWwiIT09YSkpe2NvbnN0IHY9dGhp''@;'; put 'put ''cy53b3Qud3RUYWJsZS5nZXRUb3RhbEhlaWdodCgpLXRoaXMuY2xvbmUud3RUYWJsZS5nZXRUb3RhbEhlaWdodCgpO2Q9TWF0aC5tYXgodGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLXRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKSwwKSxkPnYmJihkPTApfXJldHVybiBkfWFkanVzdEhlYWRl''@;'; put 'put ''ckJvcmRlcnNQb3NpdGlvbihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0e3d0U2V0dGluZ3M6ZH09dGhpcyxoPXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUsZj1kLmdldFNldHRpbmcoInRvdGFs''@;'; put 'put ''Q29sdW1ucyIpLHY9Imhvcml6b250YWwiPT09ZC5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtmP1ZhKGgsImVtcHR5Q29sdW1ucyIpOmlpKGgsImVtcHR5Q29sdW1ucyIpO2xldCBNPSExO2lmKCFhJiYhdil7Y29uc3QgRD1kLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLFU9dGhp''@;'; put 'put ''cy5jYWNoZWRGaXhlZFJvd3NUb3AhPT1ELHRlPWQuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpO2lmKChVfHwwPT09RCkmJnRlLmxlbmd0aD4wKXtjb25zdCBvZT1DbyhoLCJpbm5lckJvcmRlclRvcCIpO3RoaXMuY2FjaGVkRml4ZWRSb3dzVG9wPWQuZ2V0U2V0dGluZygiZml4ZWRSb3dz''@;'; put 'put ''VG9wIiksbHx8MD09PWQuZ2V0U2V0dGluZygidG90YWxSb3dzIik/KGlpKGgsImlubmVyQm9yZGVyVG9wIiksTT0hb2UpOihWYShoLCJpbm5lckJvcmRlclRvcCIpLE09b2UpfX1yZXR1cm4gTX19Y29uc3QgZjVlPXtnZXRGaXJzdFJlbmRlcmVkUm93KCl7Y29uc3QgYz10aGlzLmdldFJlbmRl''@;'; put 'put ''cmVkUm93c0NvdW50KCk7cmV0dXJuIDA9PT1jPy0xOnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKS1jfSxnZXRGaXJzdFZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5nZXRGaXJzdFJlbmRlcmVkUm93KCl9LGdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpe3JldHVy''@;'; put 'put ''biB0aGlzLmdldEZpcnN0UmVuZGVyZWRSb3coKX0sZ2V0TGFzdFJlbmRlcmVkUm93KCl7cmV0dXJuIDA9PT10aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCk/LTE6dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLTF9LGdldExhc3RWaXNpYmxlUm93KCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuZ2V0TGFzdFJlbmRlcmVkUm93KCl9LGdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFJlbmRlcmVkUm93KCl9LGdldFJlbmRlcmVkUm93c0NvdW50KCl7cmV0dXJuIE1hdGgubWluKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3Mi''@;'; put 'put ''KSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIikpfSxnZXRWaXNpYmxlUm93c0NvdW50KCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKX0sZ2V0Q29sdW1uSGVhZGVyc0NvdW50OigpPT4wfTtTNChmNWUsIk1JWElOX05BTUUiLCJzdGlja3lS''@;'; put 'put ''b3dzQm90dG9tIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IHA1ZT1mNWU7Y2xhc3MgVUogZXh0ZW5kcyBad3tjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsZCxoLGs0KX19cGwoVUoscDVlKSxwbChVSixISik7Y29uc3QgeW90PVVKO2NsYXNzIENvdCBleHRlbmRz''@;'; put 'put ''IHRre2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxrNCxkLGgpLGZ1bmN0aW9uIGJvdChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gX290KGMpe3ZhciBsPWZ1bmN0aW9uIHdvdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9Q''@;'; put 'put ''cmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJp''@;'; put 'put ''bmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1h''@;'; put 'put ''LGN9KHRoaXMsImNhY2hlZEZpeGVkUm93c0JvdHRvbSIsLTEpLHRoaXMuY2FjaGVkRml4ZWRSb3dzQm90dG9tPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKX1jcmVhdGVUYWJsZSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwp''@;'; put 'put ''LGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3JldHVybiBuZXcgeW90KC4uLmEpfXNob3VsZEJlUmVuZGVyZWQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlckJvdHRvbU92ZXJsYXkiKX1yZXNldEZpeGVkUG9zaXRpb24oKXtpZighdGhpcy5u''@;'; put 'put ''ZWVkRnVsbFJlbmRlcnx8IXRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpfHwhdGhpcy53b3Qud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSlyZXR1cm4hMTtjb25zdHtyb290V2luZG93Omx9PXRoaXMuZG9tQmluZGluZ3MsYT10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGU7YS5z''@;'; put 'put ''dHlsZS50b3A9IiI7bGV0IGQ9MDtjb25zdCBoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTt0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09bHx8aCYmInZlcnRpY2FsIj09PWg/KGQ9dGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLHRoaXMucmVwb3NpdGlvbk92''@;'; put 'put ''ZXJsYXkoKSk6KGQ9dGhpcy5nZXRPdmVybGF5T2Zmc2V0KCksYS5zdHlsZS5ib3R0b209YCR7ZH1weGApO2NvbnN0IGY9dGhpcy5hZGp1c3RIZWFkZXJCb3JkZXJzUG9zaXRpb24oZCk7cmV0dXJuIHRoaXMuYWRqdXN0RWxlbWVudHNTaXplKCksZn1yZXBvc2l0aW9uT3ZlcmxheSgpe2NvbnN0''@;'; put 'put ''e3d0VGFibGU6bCx3dFZpZXdwb3J0OmF9PXRoaXMud290LHtyb290RG9jdW1lbnQ6ZH09dGhpcy5kb21CaW5kaW5ncyxoPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTtsZXQgZj0wO2EuaGFzVmVydGljYWxTY3JvbGwoKXx8KGYrPWEuZ2V0V29ya3NwYWNlSGVpZ2h0KCkt''@;'; put 'put ''bC5nZXRUb3RhbEhlaWdodCgpKSxhLmhhc1ZlcnRpY2FsU2Nyb2xsKCkmJmEuaGFzSG9yaXpvbnRhbFNjcm9sbCgpJiYoZis9d3UoZCkpLGguc3R5bGUuYm90dG9tPWAke2Z9cHhgfXNldFNjcm9sbFBvc2l0aW9uKGwpe2NvbnN0e3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncyxkPXRo''@;'; put 'put ''aXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ7bGV0IGg9ITE7aWYoZD09PWEmJmwhPT1hLnNjcm9sbFkpe2NvbnN0IGY9YS5zY3JvbGxZO2Euc2Nyb2xsVG8oaU4oYSksdG9wKSxoPWYhPT1hLnNjcm9sbFl9ZWxzZSBpZihsIT09ZC5zY3JvbGxUb3Ape2NvbnN0IGY9ZC5zY3JvbGxUb3A7''@;'; put 'put ''ZC5zY3JvbGxUb3A9bCxoPWYhPT1kLnNjcm9sbFRvcH1yZXR1cm4gaH1vblNjcm9sbCgpe3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvblNjcm9sbEhvcml6b250YWxseSIpfXN1bUNlbGxTaXplcyhsLGEpe2NvbnN0e3d0VGFibGU6ZCx3dFNldHRpbmdzOmh9PXRoaXMud290LGY9aC5n''@;'; put 'put ''ZXRTZXR0aW5nKCJzdHlsZXNIYW5kbGVyIikuZ2V0RGVmYXVsdFJvd0hlaWdodCgpO2xldCB2PWwsTT0wO2Zvcig7djxhOyl7Y29uc3QgRD1kLmdldFJvd0hlaWdodCh2KTtNKz12b2lkIDA9PT1EP2Y6RCx2Kz0xfXJldHVybiBNfWFkanVzdEVsZW1lbnRzU2l6ZSgpe3RoaXMudXBkYXRlVHJp''@;'; put 'put ''bW1pbmdDb250YWluZXIoKSx0aGlzLm5lZWRGdWxsUmVuZGVyJiYodGhpcy5hZGp1c3RSb290RWxlbWVudFNpemUoKSx0aGlzLmFkanVzdFJvb3RDaGlsZHJlblNpemUoKSl9YWRqdXN0Um9vdEVsZW1lbnRTaXplKCl7Y29uc3R7d3RUYWJsZTpsLHd0Vmlld3BvcnQ6YX09dGhpcy53b3Qse3Jv''@;'; put 'put ''b3REb2N1bWVudDpkLHJvb3RXaW5kb3c6aH09dGhpcy5kb21CaW5kaW5ncyx2PXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZS5zdHlsZSxNPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtpZih0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09''@;'; put 'put ''aHx8Imhvcml6b250YWwiPT09TSl7bGV0IFU9YS5nZXRXb3Jrc3BhY2VXaWR0aCgpO2EuaGFzVmVydGljYWxTY3JvbGwoKSYmKFUtPXd1KGQpKSxVPU1hdGgubWluKFUsbC53dFJvb3RFbGVtZW50LnNjcm9sbFdpZHRoKSx2LndpZHRoPWAke1V9cHhgfWVsc2Ugdi53aWR0aD0iIjt0aGlzLmNs''@;'; put 'put ''b25lLnd0VGFibGUuaG9sZGVyLnN0eWxlLndpZHRoPXYud2lkdGg7bGV0IEQ9RnUodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtsLmhhc0RlZmluZWRTaXplKCl8fChEPTApLHYuaGVpZ2h0PWAke0R9cHhgfWFkanVzdFJvb3RDaGlsZHJlblNpemUoKXtjb25zdHtob2xkZXI6bH09dGhpcy5j''@;'; put 'put ''bG9uZS53dFRhYmxlO3RoaXMuY2xvbmUud3RUYWJsZS5oaWRlci5zdHlsZS53aWR0aD10aGlzLmhpZGVyLnN0eWxlLndpZHRoLGwuc3R5bGUud2lkdGg9bC5wYXJlbnROb2RlLnN0eWxlLndpZHRoLGwuc3R5bGUuaGVpZ2h0PWwucGFyZW50Tm9kZS5zdHlsZS5oZWlnaHR9YXBwbHlUb0RPTSgp''@;'; put 'put ''e2NvbnN0IGw9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpO2lmKCJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uKXRoaXMuc3ByZWFkZXIuc3R5bGUudG9wPWAke3RoaXMud290Lnd0Vmll''@;'; put 'put ''d3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA7ZWxzZXtpZigwIT09bCl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCB2YWx1ZSBvZiB0aGUgcm93c1JlbmRlckNhbGN1bGF0b3IiKTt0aGlzLnNwcmVhZGVyLnN0eWxlLnRvcD0iMCJ9dGhpcy5zcHJlYWRlci5z''@;'; put 'put ''dHlsZS5ib3R0b209IiIsdGhpcy5uZWVkRnVsbFJlbmRlciYmdGhpcy5zeW5jT3ZlcmxheU9mZnNldCgpfXN5bmNPdmVybGF5T2Zmc2V0KCl7Y29uc3QgbD10aGlzLmlzUnRsKCk/InJpZ2h0IjoibGVmdCIse3NwcmVhZGVyOmF9PXRoaXMuY2xvbmUud3RUYWJsZTthLnN0eWxlW2xdPSJudW1i''@;'; put 'put ''ZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uP2Ake3RoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA6IiJ9c2Nyb2xsVG8obCxhKXtsZXQgZD10aGlzLmdl''@;'; put 'put ''dFRhYmxlUGFyZW50T2Zmc2V0KCk7Y29uc3QgZj0odGhpcy53b3QuY2xvbmVTb3VyY2U/dGhpcy53b3QuY2xvbmVTb3VyY2U6dGhpcy53b3QpLnd0VGFibGUuaG9sZGVyO2xldCB2PTA7YSYmZi5vZmZzZXRIZWlnaHQhPT1mLmNsaWVudEhlaWdodCYmKHY9d3UodGhpcy5kb21CaW5kaW5ncy5y''@;'; put 'put ''b290RG9jdW1lbnQpKSxhPyhkKz10aGlzLnN1bUNlbGxTaXplcygwLGwrMSksZC09dGhpcy53b3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydEhlaWdodCgpLGQrPTEpOmQrPXRoaXMuc3VtQ2VsbFNpemVzKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxsKSxk''@;'; put 'put ''Kz12LHRoaXMuc2V0U2Nyb2xsUG9zaXRpb24oZCl9Z2V0VGFibGVQYXJlbnRPZmZzZXQoKXtyZXR1cm4gdGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdz90aGlzLndvdC53dFRhYmxlLmhvbGRlck9mZnNldC50b3A6MH1nZXRTY3Jv''@;'; put 'put ''bGxQb3NpdGlvbigpe3JldHVybiBhTih0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyl9Z2V0T3ZlcmxheU9mZnNldCgpe2NvbnN0e3Jvb3RXaW5kb3c6bH09dGhpcy5kb21CaW5kaW5ncyxhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0''@;'; put 'put ''aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtsZXQgZD0wO2lmKHRoaXMudHJpbW1pbmdDb250YWluZXI9PT1sJiYoIWF8fCJ2ZXJ0aWNhbCIhPT1hKSl7Y29uc3QgaD10aGlzLndvdC53dFRhYmxlLmdldFRvdGFsSGVpZ2h0KCksdj1oLXRoaXMuY2xvbmUud3RUYWJsZS5nZXRUb3RhbEhlaWdodCgp''@;'; put 'put ''LE09dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtkPU1hdGgubWF4KHRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKS10aGlzLmdldFNjcm9sbFBvc2l0aW9uKCktTStoLDApLGQ+diYmKGQ9MCl9cmV0dXJuIGR9YWRqdXN0SGVhZGVy''@;'; put 'put ''Qm9yZGVyc1Bvc2l0aW9uKGwpe2NvbnN0IGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLGQ9dGhpcy5jYWNoZWRGaXhlZFJvd3NCb3R0b20hPT1hLGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKTtsZXQgZj0hMTtpZigo''@;'; put 'put ''ZHx8MD09PWEpJiZoLmxlbmd0aD4wKXtjb25zdCB2PXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUsTT1Dbyh2LCJpbm5lckJvcmRlckJvdHRvbSIpO3RoaXMuY2FjaGVkRml4ZWRSb3dzQm90dG9tPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20i''@;'; put 'put ''KSxsfHwwPT09dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpPyhpaSh2LCJpbm5lckJvcmRlckJvdHRvbSIpLGY9IU0pOihWYSh2LCJpbm5lckJvcmRlckJvdHRvbSIpLGY9TSl9cmV0dXJuIGZ9fWNvbnN0IGc1ZT17Z2V0Rmlyc3RSZW5kZXJlZFJvdygpe2NvbnN0IGM9''@;'; put 'put ''dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0YXJ0Um93UmVuZGVyZWQ7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldEZpcnN0VmlzaWJsZVJvdygpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0YXJ0Um93VmlzaWJsZTtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0Rmlyc3RQYXJ0aWFs''@;'; put 'put ''bHlWaXNpYmxlUm93KCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRSb3dQYXJ0aWFsbHlWaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRMYXN0UmVuZGVyZWRSb3coKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRSb3dSZW5kZXJlZDtyZXR1cm4g''@;'; put 'put ''bnVsbD09PWM/LTE6Y30sZ2V0TGFzdFZpc2libGVSb3coKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRSb3dWaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmVuZFJv''@;'; put 'put ''d1BhcnRpYWxseVZpc2libGU7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldFJlbmRlcmVkUm93c0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb3VudFJvd3NSZW5kZXJlZH0sZ2V0VmlzaWJsZVJvd3NDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3QuY291''@;'; put 'put ''bnRSb3dzVmlzaWJsZX0sZ2V0Q29sdW1uSGVhZGVyc0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb2x1bW5IZWFkZXJzLmxlbmd0aH19O1M0KGc1ZSwiTUlYSU5fTkFNRSIsImNhbGN1bGF0ZWRSb3dzIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IG01''@;'; put 'put ''ZT1nNWUsdjVlPXtnZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCl7cmV0dXJuIDA9PT10aGlzLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCk/LTE6MH0sZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpfSxnZXRGaXJzdFBhcnRpYWxseVZp''@;'; put 'put ''c2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCl9LGdldExhc3RSZW5kZXJlZENvbHVtbigpe3JldHVybiB0aGlzLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCktMX0sZ2V0TGFzdFZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5nZXRMYXN0UmVuZGVy''@;'; put 'put ''ZWRDb2x1bW4oKX0sZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKX0sZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKXtyZXR1cm4gTWF0aC5taW4odGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIp''@;'; put 'put ''LHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpKX0sZ2V0VmlzaWJsZUNvbHVtbnNDb3VudCgpe3JldHVybiB0aGlzLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCl9LGdldFJvd0hlYWRlcnNDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3Qu''@;'; put 'put ''cm93SGVhZGVycy5sZW5ndGh9fTtTNCh2NWUsIk1JWElOX05BTUUiLCJzdGlja3lDb2x1bW5zU3RhcnQiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3QgWko9djVlO2NsYXNzIFdKIGV4dGVuZHMgWnd7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCxhdil9fXBs''@;'; put 'put ''KFdKLG01ZSkscGwoV0osWkopO2NvbnN0IHhvdD1XSjtjbGFzcyBFb3QgZXh0ZW5kcyB0a3tjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsYXYsZCxoKX1jcmVhdGVUYWJsZSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09''@;'; put 'put ''YXJndW1lbnRzW2RdO3JldHVybiBuZXcgeG90KC4uLmEpfXNob3VsZEJlUmVuZGVyZWQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlcklubGluZVN0YXJ0T3ZlcmxheSIpfXJlc2V0Rml4ZWRQb3NpdGlvbigpe2NvbnN0e3d0VGFibGU6bH09dGhpcy53''@;'; put 'put ''b3Q7aWYoIXRoaXMubmVlZEZ1bGxSZW5kZXJ8fCF0aGlzLnNob3VsZEJlUmVuZGVyZWQoKXx8IWwuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuITE7Y29uc3R7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzLGQ9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLGg9dGhp''@;'; put 'put ''cy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2xldCBmPTA7dGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWF8fGgmJiJob3Jpem9udGFsIj09PWg/KGY9dGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLFlBKGQpKTooZj10aGlzLmdldE92ZXJsYXlPZmZzZXQoKSoodGhp''@;'; put 'put ''cy5pc1J0bCgpPy0xOjEpLG9OKGQsYCR7Zn1weGAsIjBweCIpKTtjb25zdCB2PXRoaXMuYWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKGYpO3JldHVybiB0aGlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpLHZ9c2V0U2Nyb2xsUG9zaXRpb24obCl7Y29uc3R7cm9vdFdpbmRvdzphfT10aGlzLmRv''@;'; put 'put ''bUJpbmRpbmdzO2xldCBkPSExO3RoaXMuaXNSdGwoKSYmKGw9LWwpO2NvbnN0IGg9dGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudDtpZihoPT09YSYmbCE9PWEuc2Nyb2xsWCl7Y29uc3QgZj1hLnNjcm9sbFg7YS5zY3JvbGxUbyhsLEpxKGEpKSxkPWYhPT1hLnNjcm9sbFh9ZWxzZSBp''@;'; put 'put ''ZihsIT09aC5zY3JvbGxMZWZ0KXtjb25zdCBmPWguc2Nyb2xsTGVmdDtoLnNjcm9sbExlZnQ9bCxkPWYhPT1oLnNjcm9sbExlZnR9cmV0dXJuIGR9b25TY3JvbGwoKXt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25TY3JvbGxWZXJ0aWNhbGx5Iil9c3VtQ2VsbFNpemVzKGwsYSl7Y29u''@;'; put 'put ''c3QgZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZGVmYXVsdENvbHVtbldpZHRoIik7bGV0IGg9bCxmPTA7Zm9yKDtoPGE7KWYrPXRoaXMud290Lnd0VGFibGUuZ2V0Q29sdW1uV2lkdGgoaCl8fGQsaCs9MTtyZXR1cm4gZn1hZGp1c3RFbGVtZW50c1NpemUoKXt0aGlzLnVwZGF0ZVRy''@;'; put 'put ''aW1taW5nQ29udGFpbmVyKCksdGhpcy5uZWVkRnVsbFJlbmRlciYmKHRoaXMuYWRqdXN0Um9vdEVsZW1lbnRTaXplKCksdGhpcy5hZGp1c3RSb290Q2hpbGRyZW5TaXplKCkpfWFkanVzdFJvb3RFbGVtZW50U2l6ZSgpe2NvbnN0e3d0VGFibGU6bCx3dFZpZXdwb3J0OmF9PXRoaXMud290LHty''@;'; put 'put ''b290RG9jdW1lbnQ6ZCxyb290V2luZG93Omh9PXRoaXMuZG9tQmluZGluZ3Msdj10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUuc3R5bGUsTT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7aWYodGhpcy50cmltbWluZ0NvbnRhaW5lciE9''@;'; put 'put ''PWh8fCJ2ZXJ0aWNhbCI9PT1NKXtsZXQgVT1hLmdldFdvcmtzcGFjZUhlaWdodCgpO2EuaGFzSG9yaXpvbnRhbFNjcm9sbCgpJiYoVS09d3UoZCkpLFU9TWF0aC5taW4oVSxsLnd0Um9vdEVsZW1lbnQuc2Nyb2xsSGVpZ2h0KSx2LmhlaWdodD1gJHtVfXB4YH1lbHNlIHYuaGVpZ2h0PSIiO3Ro''@;'; put 'put ''aXMuY2xvbmUud3RUYWJsZS5ob2xkZXIuc3R5bGUuaGVpZ2h0PXYuaGVpZ2h0O2NvbnN0IEQ9X3UodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTt2LndpZHRoPWAke0R9cHhgfWFkanVzdFJvb3RDaGlsZHJlblNpemUoKXtjb25zdHtob2xkZXI6bH09dGhpcy5jbG9uZS53dFRhYmxlLGE9ekoo''@;'; put 'put ''dGhpcy53b3QpLGQ9dGhpcy53b3Quc2VsZWN0aW9uTWFuYWdlci5nZXRGb2N1c1NlbGVjdGlvbigpP3BhcnNlSW50KGEud2lkdGgsMTApLzI6MDt0aGlzLmNsb25lLnd0VGFibGUuaGlkZXIuc3R5bGUuaGVpZ2h0PXRoaXMuaGlkZXIuc3R5bGUuaGVpZ2h0LGwuc3R5bGUuaGVpZ2h0PWwucGFy''@;'; put 'put ''ZW50Tm9kZS5zdHlsZS5oZWlnaHQsbC5zdHlsZS53aWR0aD1gJHtwYXJzZUludChsLnBhcmVudE5vZGUuc3R5bGUud2lkdGgsMTApK2R9cHhgfWFwcGx5VG9ET00oKXtjb25zdCBsPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKSxhPXRoaXMuaXNSdGwoKT8icmln''@;'; put 'put ''aHQiOiJsZWZ0IjtpZigibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbil0aGlzLnNwcmVhZGVyLnN0eWxlW2FdPWAke3RoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQ''@;'; put 'put ''b3NpdGlvbn1weGA7ZWxzZXtpZigwIT09bCl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCB2YWx1ZSBvZiB0aGUgY29sdW1uc1JlbmRlckNhbGN1bGF0b3IiKTt0aGlzLnNwcmVhZGVyLnN0eWxlW2FdPSIwIn10aGlzLmlzUnRsKCk/dGhpcy5zcHJlYWRlci5zdHlsZS5sZWZ0PSIiOnRoaXMu''@;'; put 'put ''c3ByZWFkZXIuc3R5bGUucmlnaHQ9IiIsdGhpcy5uZWVkRnVsbFJlbmRlciYmdGhpcy5zeW5jT3ZlcmxheU9mZnNldCgpfXN5bmNPdmVybGF5T2Zmc2V0KCl7dGhpcy5jbG9uZS53dFRhYmxlLnNwcmVhZGVyLnN0eWxlLnRvcD0ibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0Vmlld3BvcnQu''@;'; put 'put ''cm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbj9gJHt0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb259cHhgOiIifXNjcm9sbFRvKGwsYSl7Y29uc3R7d3RTZXR0aW5nczpkfT10aGlzLGg9ZC5nZXRTZXR0aW5nKCJyb3dIZWFkZXJz''@;'; put 'put ''IiksZj1kLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0IiksTT0odGhpcy53b3QuY2xvbmVTb3VyY2U/dGhpcy53b3QuY2xvbmVTb3VyY2U6dGhpcy53b3QpLnd0VGFibGUuaG9sZGVyLEQ9MD09PWYmJmgubGVuZ3RoPjAmJiFDbyhNLnBhcmVudE5vZGUsImlubmVyQm9yZGVySW5saW5l''@;'; put 'put ''U3RhcnQiKT8xOjA7bGV0IFU9dGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLHRlPTA7cmV0dXJuIGEmJnRoaXMud290Lnd0VGFibGUuZ2V0Q29sdW1uV2lkdGgobCk+dGhpcy53b3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydFdpZHRoKCkmJihhPSExKSxhJiZNLm9mZnNldFdpZHRoIT09TS5j''@;'; put 'put ''bGllbnRXaWR0aCYmKHRlPXd1KHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50KSksYT8oVSs9dGhpcy5zdW1DZWxsU2l6ZXMoMCxsKzEpLFUtPXRoaXMud290Lnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRXaWR0aCgpLFUrPUQpOlUrPXRoaXMuc3VtQ2VsbFNpemVzKHRoaXMud3RTZXR0aW5n''@;'; put 'put ''cy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpLGwpLFUrPXRlLGdnZSh0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50KT09PVUtRCYmRD4wJiZ0aGlzLndvdC53dE92ZXJsYXlzLmV4cGFuZEhpZGVySG9yaXpvbnRhbGx5QnkoRCksdGhpcy5zZXRTY3JvbGxQb3NpdGlvbihV''@;'; put 'put ''KX1nZXRUYWJsZVBhcmVudE9mZnNldCgpe2xldCBhPTA7cmV0dXJuIXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKSYmdGhpcy50cmltbWluZ0NvbnRhaW5lcj09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyYmKGE9dGhpcy53b3Qud3RUYWJsZS5ob2xk''@;'; put 'put ''ZXJPZmZzZXQubGVmdCksYX1nZXRTY3JvbGxQb3NpdGlvbigpe3JldHVybiBNYXRoLmFicyhRcSh0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdykpfWdldE92ZXJsYXlPZmZzZXQoKXtjb25zdHtyb290V2luZG93Omx9PXRoaXMuZG9t''@;'; put 'put ''QmluZGluZ3MsYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7bGV0IGQ9MDtyZXR1cm4gdGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWx8fGEmJiJob3Jpem9udGFsIj09PWF8fChkPXRoaXMuaXNSdGwoKT9NYXRoLmFicyhNYXRoLm1pbih0aGlzLmdldFRh''@;'; put 'put ''YmxlUGFyZW50T2Zmc2V0KCktdGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLDApKTpNYXRoLm1heCh0aGlzLmdldFNjcm9sbFBvc2l0aW9uKCktdGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLDApLGQ+dGhpcy53b3Qud3RUYWJsZS5nZXRUb3RhbFdpZHRoKCktdGhpcy5jbG9uZS53dFRhYmxl''@;'; put 'put ''LmdldFRvdGFsV2lkdGgoKSYmKGQ9MCkpLGR9YWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKGwpe2NvbnN0e3d0U2V0dGluZ3M6YX09dGhpcyxkPXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUsaD1hLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKSxmPWEuZ2V0U2V0dGluZygi''@;'; put 'put ''Zml4ZWRDb2x1bW5zU3RhcnQiKSx2PWEuZ2V0U2V0dGluZygidG90YWxSb3dzIiksTT0idmVydGljYWwiPT09YS5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTt2P1ZhKGQsImVtcHR5Um93cyIpOmlpKGQsImVtcHR5Um93cyIpO2xldCBEPSExO2lmKCFNKWlmKGYmJiFoLmxlbmd0aClp''@;'; put 'put ''aShkLCJpbm5lckJvcmRlckxlZnQgaW5uZXJCb3JkZXJJbmxpbmVTdGFydCIpO2Vsc2UgaWYoIWYmJmgubGVuZ3RoKXtjb25zdCBVPUNvKGQsImlubmVyQm9yZGVySW5saW5lU3RhcnQiKTtsPyhpaShkLCJpbm5lckJvcmRlckxlZnQgaW5uZXJCb3JkZXJJbmxpbmVTdGFydCIpLEQ9IVUpOihW''@;'; put 'put ''YShkLCJpbm5lckJvcmRlckxlZnQgaW5uZXJCb3JkZXJJbmxpbmVTdGFydCIpLEQ9VSl9cmV0dXJuIER9fWNsYXNzIFlKIGV4dGVuZHMgWnd7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCxvdil9fXBsKFlKLGk1ZSkscGwoWUosWkopO2NvbnN0IFRvdD1ZSjtmdW5jdGlvbiB5''@;'; put 'put ''NWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEFvdChjKXt2YXIgbD1mdW5jdGlvbiBrb3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIp''@;'; put 'put ''O2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wi''@;'; put 'put ''PT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIERvdCBleHRlbmRzIHRre2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2KXtzdXBl''@;'; put 'put ''cihsLGEsb3YsZCxoKSx5NWUodGhpcywidG9wT3ZlcmxheSIsdm9pZCAwKSx5NWUodGhpcywiaW5saW5lU3RhcnRPdmVybGF5Iix2b2lkIDApLHRoaXMudG9wT3ZlcmxheT1mLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5PXZ9Y3JlYXRlVGFibGUoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTtyZXR1cm4gbmV3IFRvdCguLi5hKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJUb3BPdmVybGF5IikmJnRoaXMud3RTZXR0aW5ncy5n''@;'; put 'put ''ZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJJbmxpbmVTdGFydE92ZXJsYXkiKX1yZXNldEZpeGVkUG9zaXRpb24oKXtpZih0aGlzLnVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCksIXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuITE7Y29uc3QgbD10aGlzLmNsb25lLnd0''@;'; put 'put ''VGFibGUuaG9sZGVyLnBhcmVudE5vZGU7dGhpcy50cmltbWluZ0NvbnRhaW5lcj09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdz9vTihsLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKSoodGhpcy5pc1J0bCgpPy0xOjEpKyJweCIsYCR7dGhpcy50b3BPdmVy''@;'; put 'put ''bGF5LmdldE92ZXJsYXlPZmZzZXQoKX1weGApOllBKGwpO2xldCBhPUZ1KHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7Y29uc3QgZD1fdSh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO3JldHVybiB0aGlzLndvdC53dFRhYmxlLmhhc0RlZmluZWRTaXplKCl8fChhPTApLGwuc3R5bGUuaGVp''@;'; put 'put ''Z2h0PWAke2F9cHhgLGwuc3R5bGUud2lkdGg9YCR7ZH1weGAsITF9fWNsYXNzIEdKIGV4dGVuZHMgWnd7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCxMNil9fXBsKEdKLHA1ZSkscGwoR0osWkopO2NvbnN0IElvdD1HSjtjbGFzcyBSb3QgZXh0ZW5kcyB0a3tjb25zdHJ1Y3Rv''@;'; put 'put ''cihsLGEsZCxoLGYsdil7c3VwZXIobCxhLEw2LGQsaCksdGhpcy5ib3R0b21PdmVybGF5PWYsdGhpcy5pbmxpbmVTdGFydE92ZXJsYXk9dn1jcmVhdGVUYWJsZSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2Rd''@;'; put 'put ''O3JldHVybiBuZXcgSW90KC4uLmEpfXNob3VsZEJlUmVuZGVyZWQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlckJvdHRvbU92ZXJsYXkiKSYmdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlcklubGluZVN0YXJ0T3ZlcmxheSIp''@;'; put 'put ''fXJlc2V0Rml4ZWRQb3NpdGlvbigpe2NvbnN0e3dvdDpsfT10aGlzO2lmKHRoaXMudXBkYXRlVHJpbW1pbmdDb250YWluZXIoKSwhbC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0IGE9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlO2lmKGEuc3R5''@;'; put 'put ''bGUudG9wPSIiLHRoaXMudHJpbW1pbmdDb250YWluZXI9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cpe2NvbnN0IGY9dGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpLHY9dGhpcy5ib3R0b21PdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKTthLnN0eWxlW3Ro''@;'; put 'put ''aXMuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Il09YCR7Zn1weGAsYS5zdHlsZS5ib3R0b209YCR7dn1weGB9ZWxzZSBZQShhKSx0aGlzLnJlcG9zaXRpb25PdmVybGF5KCk7bGV0IGQ9RnUodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtjb25zdCBoPV91KHRoaXMuY2xvbmUud3RUYWJsZS5UQUJM''@;'; put 'put ''RSk7cmV0dXJuIHRoaXMud290Lnd0VGFibGUuaGFzRGVmaW5lZFNpemUoKXx8KGQ9MCksYS5zdHlsZS5oZWlnaHQ9YCR7ZH1weGAsYS5zdHlsZS53aWR0aD1gJHtofXB4YCwhMX1yZXBvc2l0aW9uT3ZlcmxheSgpe2NvbnN0e3d0VGFibGU6bCx3dFZpZXdwb3J0OmF9PXRoaXMud290LHtyb290''@;'; put 'put ''RG9jdW1lbnQ6ZH09dGhpcy5kb21CaW5kaW5ncyxoPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTtsZXQgZj0wO2EuaGFzVmVydGljYWxTY3JvbGwoKXx8KGYrPWEuZ2V0V29ya3NwYWNlSGVpZ2h0KCktbC5nZXRUb3RhbEhlaWdodCgpKSxhLmhhc1ZlcnRpY2FsU2Nyb2xs''@;'; put 'put ''KCkmJmEuaGFzSG9yaXpvbnRhbFNjcm9sbCgpJiYoZis9d3UoZCkpLGguc3R5bGUuYm90dG9tPWAke2Z9cHhgfX1mdW5jdGlvbiB3TihjLGwsYSl7KGZ1bmN0aW9uIExvdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHBy''@;'; put 'put ''aXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gdjUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIE9vdChjKXt2YXIgbD1mdW5jdGlvbiBQb3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNb''@;'; put 'put ''U3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJl''@;'; put 'put ''dHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZToh''@;'; put 'put ''MH0pOmNbbF09YSxjfWZ1bmN0aW9uIHN2KGMsbCxhKXtyZXR1cm4gYy5zZXQoYjVlKGMsbCksYSksYX1mdW5jdGlvbiB5NShjLGwpe3JldHVybiBjLmdldChiNWUoYyxsKSl9ZnVuY3Rpb24gYjVlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4g''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgWXc9bmV3IFdlYWtNYXAsQ049bmV3IFdlYWtNYXAsR3c9bmV3IFdlYWtNYXAsU049bmV3IFdlYWtNYXA7Y29uc3QgSG90''@;'; put 'put ''PWNsYXNzIEZvdHtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdil7djUodGhpcywid290IixudWxsKSx3Tih0aGlzLFl3LFtdKSx2NSh0aGlzLCJ0b3BPdmVybGF5IixudWxsKSx2NSh0aGlzLCJib3R0b21PdmVybGF5IixudWxsKSx2NSh0aGlzLCJpbmxpbmVTdGFydE92ZXJsYXkiLG51bGwpLHY1''@;'; put 'put ''KHRoaXMsInRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSIsbnVsbCksdjUodGhpcywiYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5IixudWxsKSx2NSh0aGlzLCJicm93c2VyTGluZUhlaWdodCIsdm9pZCAwKSx2NSh0aGlzLCJ3dFNldHRpbmdzIixudWxsKSx3Tih0aGlzLENOLCEx''@;'; put 'put ''KSx3Tih0aGlzLEd3LDApLHdOKHRoaXMsU04sbnVsbCksdjUodGhpcywicmVzaXplT2JzZXJ2ZXIiLG5ldyBSZXNpemVPYnNlcnZlcih0ZT0+e05BKCgpPT57IUFycmF5LmlzQXJyYXkodGUpfHwhdGUubGVuZ3RofHwoc3YoR3csdGhpcyx5NShHdyx0aGlzKSsxKSwzMDA9PT15NShHdyx0aGlz''@;'; put 'put ''KSYmKG9zKCJUaGUgUmVzaXplT2JzZXJ2ZXIgY2FsbGJhY2sgd2FzIGZpcmVkIHRvbyBtYW55IHRpbWVzIGluIGRpcmVjdCBzdWNjZXNzaW9uLlxuVGhpcyBtYXkgYmUgZHVlIHRvIGFuIGluZmluaXRlIGxvb3AgY2F1c2VkIGJ5IHNldHRpbmcgYSBkeW5hbWljIGhlaWdodC93aWR0aCAoZm9y''@;'; put 'put ''IGV4YW1wbGUsIHdpdGggdGhlIGBkdmhgIHVuaXRzKSB0byBhIEhhbmRzb250YWJsZSBjb250YWluZXIncyBwYXJlbnQuIFxuVGhlIG9ic2VydmVyIHdpbGwgYmUgZGlzY29ubmVjdGVkLiIpLHRoaXMucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpKSxudWxsIT09eTUoU04sdGhpcykmJmNs''@;'; put 'put ''ZWFyVGltZW91dCh5NShTTix0aGlzKSksc3YoU04sdGhpcyxzZXRUaW1lb3V0KCgpPT57c3YoR3csdGhpcywwKX0sMTAwKSksdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uQ29udGFpbmVyRWxlbWVudFJlc2l6ZSIpKX0pfSkpLHRoaXMud290PWwsdGhpcy53dFNldHRpbmdzPWgsdGhp''@;'; put 'put ''cy5kb21CaW5kaW5ncz1kLHRoaXMuZmFjYWRlR2V0dGVyPWEsdGhpcy53dFRhYmxlPXY7Y29uc3R7cm9vdERvY3VtZW50Ok0scm9vdFdpbmRvdzpEfT10aGlzLmRvbUJpbmRpbmdzO3RoaXMuaW5zdGFuY2U9dGhpcy53b3QsdGhpcy5ldmVudE1hbmFnZXI9Zix0aGlzLnNjcm9sbGJhclNpemU9''@;'; put 'put ''d3UoTSk7Y29uc3QgVT0iaGlkZGVuIj09PUQuZ2V0Q29tcHV0ZWRTdHlsZSh2Lnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSkuZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3ciKTt0aGlzLnNjcm9sbGFibGVFbGVtZW50PVU/di5ob2xkZXI6VUEodi5UQUJMRSksdGhpcy5pbml0T3ZlcmxheXMo''@;'; put 'put ''KSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmtleVByZXNzZWQ9ITEsdGhpcy5zcHJlYWRlckxhc3RTaXplPXt3aWR0aDpudWxsLGhlaWdodDpudWxsfSx0aGlzLnZlcnRpY2FsU2Nyb2xsaW5nPSExLHRoaXMuaG9yaXpvbnRhbFNjcm9sbGluZz0hMSx0aGlzLmluaXRCcm93c2VyTGluZUhlaWdo''@;'; put 'put ''dCgpLHRoaXMucmVnaXN0ZXJMaXN0ZW5lcnMoKSx0aGlzLmxhc3RTY3JvbGxYPUQuc2Nyb2xsWCx0aGlzLmxhc3RTY3JvbGxZPUQuc2Nyb2xsWX1nZXRPdmVybGF5cygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Y29uc3Qg''@;'; put 'put ''YT1bLi4ueTUoWXcsdGhpcyldO3JldHVybiBsJiZhLnB1c2godGhpcy53dFRhYmxlKSxhfWluaXRCcm93c2VyTGluZUhlaWdodCgpe2NvbnN0e3Jvb3RXaW5kb3c6bCxyb290RG9jdW1lbnQ6YX09dGhpcy5kb21CaW5kaW5ncyxkPWwuZ2V0Q29tcHV0ZWRTdHlsZShhLmJvZHkpLGg9cGFyc2VJ''@;'; put 'put ''bnQoZC5saW5lSGVpZ2h0LDEwKSxmPTEuMipwYXJzZUludChkLmZvbnRTaXplLDEwKTt0aGlzLmJyb3dzZXJMaW5lSGVpZ2h0PWh8fGZ9aW5pdE92ZXJsYXlzKCl7Y29uc3QgbD1bdGhpcy53b3QsdGhpcy5mYWNhZGVHZXR0ZXIsdGhpcy53dFNldHRpbmdzLHRoaXMuZG9tQmluZGluZ3NdO3Ro''@;'; put 'put ''aXMudG9wT3ZlcmxheT1uZXcgbW90KC4uLmwpLHRoaXMuYm90dG9tT3ZlcmxheT1uZXcgQ290KC4uLmwpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5PW5ldyBFb3QoLi4ubCksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXk9bmV3IERvdCguLi5sLHRoaXMudG9wT3ZlcmxheSx0aGlz''@;'; put 'put ''LmlubGluZVN0YXJ0T3ZlcmxheSksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXk9bmV3IFJvdCguLi5sLHRoaXMuYm90dG9tT3ZlcmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSksc3YoWXcsdGhpcyxbdGhpcy50b3BPdmVybGF5LHRoaXMuYm90dG9tT3ZlcmxheSx0aGlz''@;'; put 'put ''LmlubGluZVN0YXJ0T3ZlcmxheSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheV0pfWJlZm9yZURyYXcoKXtzdihDTix0aGlzLHk1KFl3LHRoaXMpLnJlZHVjZSgobCxhKT0+YS5oYXNSZW5kZXJpbmdTdGF0ZUNoYW5n''@;'; put 'put ''ZWQoKXx8bCwhMSkpLHk1KFl3LHRoaXMpLmZvckVhY2gobD0+bC51cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKCJiZWZvcmUiKSl9YWZ0ZXJEcmF3KCl7dGhpcy5zeW5jU2Nyb2xsV2l0aE1hc3RlcigpLHk1KFl3LHRoaXMpLmZvckVhY2gobD0+e2NvbnN0IGE9bC5oYXNSZW5kZXJpbmdTdGF0ZUNo''@;'; put 'put ''YW5nZWQoKTtsLnVwZGF0ZVN0YXRlT2ZSZW5kZXJpbmcoImFmdGVyIiksYSYmIWwubmVlZEZ1bGxSZW5kZXImJmwucmVzZXQoKX0pfXJlZnJlc2hBbGwoKXtpZih0aGlzLndvdC5kcmF3bil7aWYoIXRoaXMud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSlyZXR1cm4gdm9pZCB0aGlzLmRlc3Ry''@;'; put 'put ''b3koKTt0aGlzLndvdC5kcmF3KCEwKSx0aGlzLnZlcnRpY2FsU2Nyb2xsaW5nJiZ0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5vblNjcm9sbCgpLHRoaXMuaG9yaXpvbnRhbFNjcm9sbGluZyYmdGhpcy50b3BPdmVybGF5Lm9uU2Nyb2xsKCksdGhpcy52ZXJ0aWNhbFNjcm9sbGluZz0hMSx0aGlz''@;'; put 'put ''Lmhvcml6b250YWxTY3JvbGxpbmc9ITF9fXJlZ2lzdGVyTGlzdGVuZXJzKCl7Y29uc3R7cm9vdERvY3VtZW50Omwscm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzLHttYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudDpkfT10aGlzLnRvcE92ZXJsYXkse21haW5UYWJsZVNjcm9sbGFibGVF''@;'; put 'put ''bGVtZW50Omh9PXRoaXMuaW5saW5lU3RhcnRPdmVybGF5O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobC5kb2N1bWVudEVsZW1lbnQsImtleWRvd24iLG9lPT50aGlzLm9uS2V5RG93bihvZSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobC5kb2N1bWVu''@;'; put 'put ''dEVsZW1lbnQsImtleXVwIiwoKT0+dGhpcy5vbktleVVwKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwidmlzaWJpbGl0eWNoYW5nZSIsKCk9PnRoaXMub25LZXlVcCgpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGQsInNjcm9sbCIsb2U9PnRo''@;'; put 'put ''aXMub25UYWJsZVNjcm9sbChvZSkse3Bhc3NpdmU6ITB9KSxkIT09aCYmdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihoLCJzY3JvbGwiLG9lPT50aGlzLm9uVGFibGVTY3JvbGwob2UpLHtwYXNzaXZlOiEwfSk7Y29uc3QgZj1hLmRldmljZVBpeGVsUmF0aW8mJmEuZGV2aWNl''@;'; put 'put ''UGl4ZWxSYXRpbz4xLHY9dGhpcy5zY3JvbGxhYmxlRWxlbWVudD09PWEsTT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudFdoZWVsIiksRD17cGFzc2l2ZTp2fTtsZXQgdGU7KE18fGZ8fCFLcSgpKSYmdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLnd0''@;'; put 'put ''VGFibGUud3RSb290RWxlbWVudCwid2hlZWwiLG9lPT50aGlzLm9uQ2xvbmVXaGVlbChvZSxNKSxEKSxbdGhpcy50b3BPdmVybGF5LHRoaXMuYm90dG9tT3ZlcmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSx0aGlzLmJvdHRvbUlu''@;'; put 'put ''bGluZVN0YXJ0Q29ybmVyT3ZlcmxheV0uZm9yRWFjaChvZT0+e3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIob2UuY2xvbmUud3RUYWJsZS5ob2xkZXIsIndoZWVsIix2ZT0+dGhpcy5vbkNsb25lV2hlZWwodmUsTSksRCl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExp''@;'; put 'put ''c3RlbmVyKGEsInJlc2l6ZSIsKCk9PntOQSgoKT0+e2NsZWFyVGltZW91dCh0ZSksdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uV2luZG93UmVzaXplIiksdGU9c2V0VGltZW91dCgoKT0+e3N2KEd3LHRoaXMsMCl9LDIwMCl9KX0pLHZ8fHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2''@;'; put 'put ''ZSh0aGlzLnd0VGFibGUud3RSb290RWxlbWVudC5wYXJlbnRFbGVtZW50KX1vblRhYmxlU2Nyb2xsKGwpe2NvbnN0IGE9dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93LGQ9dGhpcy5pbmxpbmVTdGFydE92ZXJsYXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsaD10aGlzLnRvcE92ZXJs''@;'; put 'put ''YXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsZj1sLnRhcmdldDt0aGlzLmtleVByZXNzZWQmJihoIT09YSYmZiE9PWEmJiFsLnRhcmdldC5jb250YWlucyhoKXx8ZCE9PWEmJmYhPT1hJiYhbC50YXJnZXQuY29udGFpbnMoZCkpfHx0aGlzLnN5bmNTY3JvbGxQb3NpdGlvbnMobCl9b25D''@;'; put 'put ''bG9uZVdoZWVsKGwsYSl7aWYobC5jdHJsS2V5KXJldHVybjtjb25zdHtyb290V2luZG93OmR9PXRoaXMuZG9tQmluZGluZ3MsaD10aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCxmPXRoaXMudG9wT3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxl''@;'; put 'put ''bWVudCx2PWwudGFyZ2V0LE09ZiE9PWQmJnYhPT1kJiYhdi5jb250YWlucyhmKSxEPWghPT1kJiZ2IT09ZCYmIXYuY29udGFpbnMoaCk7aWYodGhpcy5rZXlQcmVzc2VkJiYoTXx8RCl8fHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQ9PT1kKXJldHVybjtjb25zdCBVPXRoaXMudHJhbnNsYXRlTW91''@;'; put 'put ''c2VXaGVlbFRvU2Nyb2xsKGwpOyhhfHx0aGlzLnNjcm9sbGFibGVFbGVtZW50IT09ZCYmVSkmJmwucHJldmVudERlZmF1bHQoKX1vbktleURvd24obCl7dGhpcy5rZXlQcmVzc2VkPXE5KGwua2V5Q29kZSwiQVJST1dfVVB8QVJST1dfUklHSFR8QVJST1dfRE9XTnxBUlJPV19MRUZUIil9b25L''@;'; put 'put ''ZXlVcCgpe3RoaXMua2V5UHJlc3NlZD0hMX10cmFuc2xhdGVNb3VzZVdoZWVsVG9TY3JvbGwobCl7bGV0IGE9aXNOYU4obC5kZWx0YVkpPy0xKmwud2hlZWxEZWx0YVk6bC5kZWx0YVksZD1pc05hTihsLmRlbHRhWCk/LTEqbC53aGVlbERlbHRhWDpsLmRlbHRhWDsxPT09bC5kZWx0YU1vZGUm''@;'; put 'put ''JihkKz1kKnRoaXMuYnJvd3NlckxpbmVIZWlnaHQsYSs9YSp0aGlzLmJyb3dzZXJMaW5lSGVpZ2h0KTtjb25zdCBoPXRoaXMuc2Nyb2xsVmVydGljYWxseShhKSxmPXRoaXMuc2Nyb2xsSG9yaXpvbnRhbGx5KGQpO3JldHVybiBofHxmfXNjcm9sbFZlcnRpY2FsbHkobCl7Y29uc3QgYT10aGlz''@;'; put 'put ''LnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcDtyZXR1cm4gdGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3ArPWwsYSE9PXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wfXNjcm9sbEhvcml6b250YWxseShsKXtjb25zdCBhPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Ny''@;'; put 'put ''b2xsTGVmdDtyZXR1cm4gdGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0Kz1sLGEhPT10aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbExlZnR9c3luY1Njcm9sbFBvc2l0aW9ucygpe2lmKHRoaXMuZGVzdHJveWVkKXJldHVybjtjb25zdCBsPXRoaXMudG9wT3ZlcmxheS5jbG9u''@;'; put 'put ''ZS53dFRhYmxlLmhvbGRlcixhPXRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmNsb25lLnd0VGFibGUuaG9sZGVyO2xldCBkPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsTGVmdCxoPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wO2lmKHRoaXMud290Lnd0Vmlld3BvcnQuaXNI''@;'; put 'put ''b3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKSYmKGQ9dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxYKSx0aGlzLndvdC53dFZpZXdwb3J0LmlzVmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdygpJiYoaD10aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFkpLHRoaXMuaG9y''@;'; put 'put ''aXpvbnRhbFNjcm9sbGluZz10aGlzLmxhc3RTY3JvbGxYIT09ZCx0aGlzLnZlcnRpY2FsU2Nyb2xsaW5nPXRoaXMubGFzdFNjcm9sbFkhPT1oLHRoaXMubGFzdFNjcm9sbFg9ZCx0aGlzLmxhc3RTY3JvbGxZPWgsdGhpcy5ob3Jpem9udGFsU2Nyb2xsaW5nKXtsLnNjcm9sbExlZnQ9ZDtjb25z''@;'; put 'put ''dCBmPXRoaXMuYm90dG9tT3ZlcmxheS5uZWVkRnVsbFJlbmRlcj90aGlzLmJvdHRvbU92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXI6bnVsbDtmJiYoZi5zY3JvbGxMZWZ0PWQpfXRoaXMudmVydGljYWxTY3JvbGxpbmcmJihhLnNjcm9sbFRvcD1oKSx0aGlzLnJlZnJlc2hBbGwoKX1zeW5j''@;'; put 'put ''U2Nyb2xsV2l0aE1hc3Rlcigpe2lmKCF5NShDTix0aGlzKSlyZXR1cm47Y29uc3QgbD10aGlzLnRvcE92ZXJsYXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQse3Njcm9sbExlZnQ6YSxzY3JvbGxUb3A6ZH09bDt0aGlzLnRvcE92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJih0aGlzLnRvcE92''@;'; put 'put ''ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXIuc2Nyb2xsTGVmdD1hKSx0aGlzLmJvdHRvbU92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJih0aGlzLmJvdHRvbU92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXIuc2Nyb2xsTGVmdD1hKSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5uZWVkRnVsbFJl''@;'; put 'put ''bmRlciYmKHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmNsb25lLnd0VGFibGUuaG9sZGVyLnNjcm9sbFRvcD1kKSxzdihDTix0aGlzLCExKX11cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnRzKCl7dGhpcy5ldmVudE1hbmFnZXIuY2xlYXJFdmVudHMoITApLHRoaXMuaW5saW5lU3RhcnRPdmVy''@;'; put 'put ''bGF5LnVwZGF0ZU1haW5TY3JvbGxhYmxlRWxlbWVudCgpLHRoaXMudG9wT3ZlcmxheS51cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnQoKSx0aGlzLmJvdHRvbU92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJnRoaXMuYm90dG9tT3ZlcmxheS51cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnQoKTtj''@;'; put 'put ''b25zdHt3dFRhYmxlOmx9PXRoaXMse3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5nczt0aGlzLnNjcm9sbGFibGVFbGVtZW50PSJoaWRkZW4iPT09YS5nZXRDb21wdXRlZFN0eWxlKGwud3RSb290RWxlbWVudC5wYXJlbnROb2RlKS5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdyIpP2wu''@;'; put 'put ''aG9sZGVyOlVBKGwuVEFCTEUpLHRoaXMucmVnaXN0ZXJMaXN0ZW5lcnMoKX1kZXN0cm95KCl7dGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCksdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpLHRoaXMudG9wT3ZlcmxheS5kZXN0cm95KCksdGhpcy5ib3R0b21PdmVybGF5LmNsb25l''@;'; put 'put ''JiZ0aGlzLmJvdHRvbU92ZXJsYXkuZGVzdHJveSgpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmRlc3Ryb3koKSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSYmdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkuZGVzdHJveSgpLHRoaXMuYm90dG9tSW5saW5lU3RhcnRD''@;'; put 'put ''b3JuZXJPdmVybGF5JiZ0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZSYmdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuZGVzdHJveSgpLHRoaXMuZGVzdHJveWVkPSEwfXJlZnJlc2goKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9''@;'; put 'put ''PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3RoaXMudXBkYXRlTGFzdFNwcmVhZGVyU2l6ZSgpJiZ0aGlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuYm90dG9tT3ZlcmxheS5jbG9uZSYmdGhpcy5ib3R0b21PdmVybGF5LnJlZnJlc2gobCksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXku''@;'; put 'put ''cmVmcmVzaChsKSx0aGlzLnRvcE92ZXJsYXkucmVmcmVzaChsKSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSYmdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkucmVmcmVzaChsKSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSYmdGhpcy5ib3R0b21J''@;'; put 'put ''bmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUmJnRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LnJlZnJlc2gobCl9dXBkYXRlTGFzdFNwcmVhZGVyU2l6ZSgpe2NvbnN0IGw9dGhpcy53dFRhYmxlLnNwcmVhZGVyLGE9bC5jbGllbnRXaWR0aCxkPWwuY2xpZW50SGVpZ2h0''@;'; put 'put ''LGg9YSE9PXRoaXMuc3ByZWFkZXJMYXN0U2l6ZS53aWR0aHx8ZCE9PXRoaXMuc3ByZWFkZXJMYXN0U2l6ZS5oZWlnaHQ7cmV0dXJuIGgmJih0aGlzLnNwcmVhZGVyTGFzdFNpemUud2lkdGg9YSx0aGlzLnNwcmVhZGVyTGFzdFNpemUuaGVpZ2h0PWQpLGh9YWRqdXN0RWxlbWVudHNTaXplKCl7''@;'; put 'put ''Y29uc3R7d3RWaWV3cG9ydDpsfT10aGlzLndvdCx7d3RUYWJsZTphfT10aGlzLHtyb290V2luZG93OmR9PXRoaXMuZG9tQmluZGluZ3MsaD10aGlzLnNjcm9sbGFibGVFbGVtZW50PT09ZCxmPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKSx2PXRoaXMud3RTZXR0''@;'; put 'put ''aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKSxNPWwuZ2V0Um93SGVhZGVyV2lkdGgoKSxEPWwuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KCksVT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZXh0ZXJuYWxSb3dDYWxjdWxhdG9yIik/MDoxLHRlPUQrdGhpcy50b3BPdmVybGF5LnN1bUNl''@;'; put 'put ''bGxTaXplcygwLHYpK1Usb2U9TSt0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5zdW1DZWxsU2l6ZXMoMCxmKSx3ZT1hLmhpZGVyLnN0eWxlLG50PSgoKT0+IWgmJnRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wPk1hdGgubWF4KDAsdGUtYS5ob2xkZXIuY2xpZW50SGVpZ2h0KSkoKT8x''@;'; put 'put ''OjAsZHQ9KCgpPT4haCYmdGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0Pk1hdGgubWF4KDAsb2UtYS5ob2xkZXIuY2xpZW50V2lkdGgpKSgpPzE6MDt3ZS53aWR0aD1gJHtvZStkdH1weGAsd2UuaGVpZ2h0PWAke3RlK250fXB4YCx0aGlzLnRvcE92ZXJsYXkuYWRqdXN0RWxlbWVu''@;'; put 'put ''dHNTaXplKCksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5ib3R0b21PdmVybGF5LmFkanVzdEVsZW1lbnRzU2l6ZSgpfWV4cGFuZEhpZGVyVmVydGljYWxseUJ5KGwpe2NvbnN0e3d0VGFibGU6YX09dGhpczthLmhpZGVyLnN0eWxlLmhlaWdodD1g''@;'; put 'put ''JHtwYXJzZUludChhLmhpZGVyLnN0eWxlLmhlaWdodCwxMCkrbH1weGB9ZXhwYW5kSGlkZXJIb3Jpem9udGFsbHlCeShsKXtjb25zdHt3dFRhYmxlOmF9PXRoaXM7YS5oaWRlci5zdHlsZS53aWR0aD1gJHtwYXJzZUludChhLmhpZGVyLnN0eWxlLndpZHRoLDEwKStsfXB4YH1hcHBseVRvRE9N''@;'; put 'put ''KCl7dGhpcy53dFRhYmxlLmlzVmlzaWJsZSgpJiYodGhpcy50b3BPdmVybGF5LmFwcGx5VG9ET00oKSx0aGlzLmJvdHRvbU92ZXJsYXkuY2xvbmUmJnRoaXMuYm90dG9tT3ZlcmxheS5hcHBseVRvRE9NKCksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuYXBwbHlUb0RPTSgpKX1nZXRQYXJlbnRP''@;'; put 'put ''dmVybGF5KGwpe2lmKCFsKXJldHVybiBudWxsO2xldCBkPW51bGw7cmV0dXJuIEtuKFt0aGlzLnRvcE92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXksdGhpcy5ib3R0b21PdmVybGF5LHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LHRoaXMuYm90dG9tSW5saW5lU3RhcnRD''@;'; put 'put ''b3JuZXJPdmVybGF5XSxoPT57aCYmaC5jbG9uZSYmaC5jbG9uZS53dFRhYmxlLlRBQkxFLmNvbnRhaW5zKGwpJiYoZD1oLmNsb25lKX0pLGR9c3luY092ZXJsYXlUYWJsZUNsYXNzTmFtZXMoKXtjb25zdCBsPXRoaXMud3RUYWJsZS5UQUJMRTtLbihbdGhpcy50b3BPdmVybGF5LHRoaXMuaW5s''@;'; put 'put ''aW5lU3RhcnRPdmVybGF5LHRoaXMuYm90dG9tT3ZlcmxheSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheV0sZD0+e2QmJihkLmNsb25lLnd0VGFibGUuVEFCTEUuY2xhc3NOYW1lPWwuY2xhc3NOYW1lKX0pfX07ZnVu''@;'; put 'put ''Y3Rpb24gXzVlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBOb3QoYyl7dmFyIGw9ZnVuY3Rpb24gVm90KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRl''@;'; put 'put ''ZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4i''@;'; put 'put ''c3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBCb3R7Y29uc3RydWN0b3IobCl7XzVlKHRoaXMsInNldHRpbmdz''@;'; put 'put ''Iix7fSksXzVlKHRoaXMsImRlZmF1bHRzIixPYmplY3QuZnJlZXplKHRoaXMuZ2V0RGVmYXVsdHMoKSkpLGFzKHRoaXMuZGVmYXVsdHMsKGEsZCk9PntpZih2b2lkIDAhPT1sW2RdKXRoaXMuc2V0dGluZ3NbZF09bFtkXTtlbHNle2lmKHZvaWQgMD09PWEpdGhyb3cgbmV3IEVycm9yKGBBIHJl''@;'; put 'put ''cXVpcmVkIHNldHRpbmcgIiR7ZH0iIHdhcyBub3QgcHJvdmlkZWRgKTt0aGlzLnNldHRpbmdzW2RdPWF9fSl9Z2V0RGVmYXVsdHMoKXtyZXR1cm57ZmFjYWRlOnZvaWQgMCx0YWJsZTp2b2lkIDAsaXNEYXRhVmlld0luc3RhbmNlOiEwLGV4dGVybmFsUm93Q2FsY3VsYXRvcjohMSxjdXJyZW50''@;'; put 'put ''Um93Q2xhc3NOYW1lOm51bGwsY3VycmVudENvbHVtbkNsYXNzTmFtZTpudWxsLHByZXZlbnRPdmVyZmxvdzooKT0+ITEscHJldmVudFdoZWVsOiExLGRhdGE6dm9pZCAwLGZpeGVkQ29sdW1uc1N0YXJ0OjAsZml4ZWRSb3dzVG9wOjAsZml4ZWRSb3dzQm90dG9tOjAsc2hvdWxkUmVuZGVySW5s''@;'; put 'put ''aW5lU3RhcnRPdmVybGF5OigpPT50aGlzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik+MHx8dGhpcy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoPjAsc2hvdWxkUmVuZGVyVG9wT3ZlcmxheTooKT0+dGhpcy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKT4wfHx0aGlz''@;'; put 'put ''LmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg+MCxzaG91bGRSZW5kZXJCb3R0b21PdmVybGF5OigpPT50aGlzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpPjAsbWluU3BhcmVSb3dzOjAscm93SGVhZGVyczooKT0+W10sY29sdW1uSGVhZGVyczooKT0+W10sdG90YWxS''@;'; put 'put ''b3dzOnZvaWQgMCx0b3RhbENvbHVtbnM6dm9pZCAwLGNlbGxSZW5kZXJlcjoobCxhLGQpPT57QTYoZCx0aGlzLmdldFNldHRpbmcoImRhdGEiLGwsYSk/PyIiKX0sY29sdW1uV2lkdGgoKXt9LHJvd0hlaWdodCgpe30scm93SGVpZ2h0QnlPdmVybGF5TmFtZSgpe30sZGVmYXVsdENvbHVtbldp''@;'; put 'put ''ZHRoOjUwLHNlbGVjdGlvbnM6bnVsbCxoaWRlQm9yZGVyT25Nb3VzZURvd25PdmVyOiExLHZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlOm51bGwsdmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGU6bnVsbCx2aWV3cG9ydFJvd1JlbmRlcmluZ1RocmVzaG9sZDpudWxsLHZpZXdw''@;'; put 'put ''b3J0Q29sdW1uUmVuZGVyaW5nVGhyZXNob2xkOm51bGwsb25DZWxsTW91c2VEb3duOm51bGwsb25DZWxsQ29udGV4dE1lbnU6bnVsbCxvbkNlbGxNb3VzZU92ZXI6bnVsbCxvbkNlbGxNb3VzZU91dDpudWxsLG9uQ2VsbE1vdXNlVXA6bnVsbCxvbkNlbGxEYmxDbGljazpudWxsLG9uQ2VsbENv''@;'; put 'put ''cm5lck1vdXNlRG93bjpudWxsLG9uQ2VsbENvcm5lckRibENsaWNrOm51bGwsYmVmb3JlRHJhdzpudWxsLG9uRHJhdzpudWxsLG9uQmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXM6bnVsbCxvbkFmdGVyRHJhd1NlbGVjdGlvbjpudWxsLG9uQmVmb3JlRHJhd0JvcmRlcnM6bnVsbCxvbkJlZm9y''@;'; put 'put ''ZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5Omw9Pmwsb25CZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2FsbHk6bD0+bCxvblNjcm9sbEhvcml6b250YWxseTpudWxsLG9uU2Nyb2xsVmVydGljYWxseTpudWxsLG9uQmVmb3JlVG91Y2hTY3JvbGw6bnVsbCxvbkFmdGVyTW9tZW50dW1TY3Jv''@;'; put 'put ''bGw6bnVsbCxvbk1vZGlmeVJvd0hlYWRlcldpZHRoOm51bGwsb25Nb2RpZnlHZXRDZWxsQ29vcmRzOm51bGwsb25Nb2RpZnlHZXRDb29yZHNFbGVtZW50Om51bGwsb25Nb2RpZnlHZXRDb29yZHM6bnVsbCxvbkJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlcjpsPT5sLG9uQmVmb3JlSGlnaGxp''@;'; put 'put ''Z2h0aW5nQ29sdW1uSGVhZGVyOmw9Pmwsb25XaW5kb3dSZXNpemU6bnVsbCxvbkNvbnRhaW5lckVsZW1lbnRSZXNpemU6bnVsbCxyZW5kZXJBbGxDb2x1bW5zOiExLHJlbmRlckFsbFJvd3M6ITEsZ3JvdXBzOiExLHJvd0hlYWRlcldpZHRoOm51bGwsY29sdW1uSGVhZGVySGVpZ2h0Om51bGws''@;'; put 'put ''aGVhZGVyQ2xhc3NOYW1lOm51bGwscnRsTW9kZTohMSxhcmlhVGFnczohMCxzdHlsZXNIYW5kbGVyOm51bGx9fXVwZGF0ZShsLGEpe3JldHVybiB2b2lkIDA9PT1hP2FzKGwsKGQsaCk9Pnt0aGlzLnNldHRpbmdzW2hdPWR9KTp0aGlzLnNldHRpbmdzW2xdPWEsdGhpc31nZXRTZXR0aW5nKGws''@;'; put 'put ''YSxkLGgsZil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuc2V0dGluZ3NbbF0/dGhpcy5zZXR0aW5nc1tsXShhLGQsaCxmKTp2b2lkIDAhPT1hJiZBcnJheS5pc0FycmF5KHRoaXMuc2V0dGluZ3NbbF0pP3RoaXMuc2V0dGluZ3NbbF1bYV06dGhpcy5zZXR0aW5nc1tsXX1nZXRTZXR0''@;'; put 'put ''aW5nUHVyZShsKXtyZXR1cm4gdGhpcy5zZXR0aW5nc1tsXX1oYXMobCl7cmV0dXJuISF0aGlzLnNldHRpbmdzW2xdfX1jbGFzcyAkSiBleHRlbmRzIFp3e2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxkLGgsIm1hc3RlciIpfWFsaWduT3ZlcmxheXNXaXRoVHJpbW1pbmdDb250YWlu''@;'; put 'put ''ZXIoKXtjb25zdCBsPU53KHRoaXMud3RSb290RWxlbWVudCkse3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncztpZihsPT09YSl0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iil8fCh0aGlzLmhvbGRlci5zdHlsZS5vdmVyZmxvdz0idmlzaWJsZSIsdGhp''@;'; put 'put ''cy53dFJvb3RFbGVtZW50LnN0eWxlLm92ZXJmbG93PSJ2aXNpYmxlIik7ZWxzZXtjb25zdCBkPWwucGFyZW50RWxlbWVudCxoPVpBKGwsImhlaWdodCIsYSksZj1aQShsLCJvdmVyZmxvdyIsYSksdj10aGlzLmhvbGRlci5zdHlsZSx7c2Nyb2xsV2lkdGg6TSxzY3JvbGxIZWlnaHQ6RH09bDts''@;'; put 'put ''ZXQgVT1sLm9mZnNldFdpZHRoLHRlPWwub2Zmc2V0SGVpZ2h0O2lmKGQmJlsiYXV0byIsImhpZGRlbiIsInNjcm9sbCJdLmluY2x1ZGVzKGYpKXtjb25zdCB2ZT1sLmNsb25lTm9kZSghMSk7dmUuc3R5bGUub3ZlcmZsb3c9ImF1dG8iLHZlLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsbC5u''@;'; put 'put ''ZXh0RWxlbWVudFNpYmxpbmc/ZC5pbnNlcnRCZWZvcmUodmUsbC5uZXh0RWxlbWVudFNpYmxpbmcpOmQuYXBwZW5kQ2hpbGQodmUpO2NvbnN0IHdlPXBhcnNlSW50KGEuZ2V0Q29tcHV0ZWRTdHlsZSh2ZSkuaGVpZ2h0LDEwKTtkLnJlbW92ZUNoaWxkKHZlKSwwPT09d2UmJih0ZT0wKX10ZT1N''@;'; put 'put ''YXRoLm1pbih0ZSxEKSx2LmhlaWdodD0iYXV0byI9PT1oPyJhdXRvIjpgJHt0ZX1weGAsVT1NYXRoLm1pbihVLE0pLHYud2lkdGg9YCR7VX1weGAsdi5vdmVyZmxvdz0iIix0aGlzLmhhc1RhYmxlSGVpZ2h0PSJhdXRvIj09PXYuaGVpZ2h0fHx0ZT4wLHRoaXMuaGFzVGFibGVXaWR0aD1VPjB9''@;'; put 'put ''dGhpcy5pc1RhYmxlVmlzaWJsZT1rNih0aGlzLlRBQkxFKX1tYXJrT3ZlcnNpemVkQ29sdW1uSGVhZGVycygpe2NvbnN0e3d0U2V0dGluZ3M6bH09dGhpcyx7d3RWaWV3cG9ydDphfT10aGlzLmRhdGFBY2Nlc3NPYmplY3QsZD0ibWFzdGVyIixmPWwuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVy''@;'; put 'put ''cyIpLmxlbmd0aDtpZihmJiYhYS5oYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkW2RdKXtjb25zdCBNPWwuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLmxlbmd0aCxEPXRoaXMuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKTtmb3IobGV0IFU9MDtVPGY7VSsrKWZvcihsZXQgdGU9LTEq''@;'; put 'put ''TTt0ZTxEO3RlKyspdGhpcy5tYXJrSWZPdmVyc2l6ZWRDb2x1bW5IZWFkZXIodGUpO2EuaGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZFtkXT0hMH19fXBsKCRKLG01ZSkscGwoJEosSEopO2NvbnN0IGpvdD0kSjtmdW5jdGlvbiBuayhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gem90''@;'; put 'put ''KGMpe3ZhciBsPWZ1bmN0aW9uIFVvdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBk''@;'; put 'put ''O3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgWm90e2NvbnN0cnVjdG9yKCl7bmsodGhpcywiY291bnQiLDApLG5rKHRoaXMsInN0YXJ0Um93IiwwKSxuayh0aGlzLCJlbmRSb3ci''@;'; put 'put ''LDApLG5rKHRoaXMsInN0YXJ0UG9zaXRpb24iLDApLG5rKHRoaXMsImlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXIiLCEwKX1pbml0aWFsaXplKGwpe2xldHt0b3RhbFJvd3M6YX09bDt0aGlzLmNvdW50PWEsdGhpcy5lbmRSb3c9dGhpcy5jb3VudC0xfXByb2Nlc3MoKXt9ZmluYWxpemUo''@;'; put 'put ''KXt9fWZ1bmN0aW9uIHJrKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBXb3QoYyl7dmFyIGw9ZnVuY3Rpb24gWW90KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMs''@;'; put 'put ''bHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTty''@;'; put 'put ''ZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31iKDM5MDkyKSxiKDE0MzYwKTtjbGFzcyB3NWV7Y29uc3RydWN0''@;'; put 'put ''b3IoKXtyayh0aGlzLCJjb3VudCIsMCkscmsodGhpcywic3RhcnRSb3ciLG51bGwpLHJrKHRoaXMsImVuZFJvdyIsbnVsbCkscmsodGhpcywic3RhcnRQb3NpdGlvbiIsbnVsbCkscmsodGhpcywiaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lciIsITEpfWluaXRpYWxpemUoKXt9cHJvY2Vz''@;'; put 'put ''cyhsLGEpe2NvbnN0e3RvdGFsQ2FsY3VsYXRlZEhlaWdodDpkLHplcm9CYXNlZFNjcm9sbE9mZnNldDpoLGlubmVyVmlld3BvcnRIZWlnaHQ6Zn09YTtkPD1oJiYodGhpcy5zdGFydFJvdz1sKSxkPj1oJiZkPD1mJiZudWxsPT09dGhpcy5zdGFydFJvdyYmKHRoaXMuc3RhcnRSb3c9bCksdGhp''@;'; put 'put ''cy5lbmRSb3c9bH1maW5hbGl6ZShsKXt2YXIgYTtjb25zdHtzY3JvbGxPZmZzZXQ6ZCx2aWV3cG9ydEhlaWdodDpoLGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQ6Zix0b3RhbFJvd3M6dixuZWVkUmV2ZXJzZTpNLHN0YXJ0UG9zaXRpb25zOkQscm93SGVpZ2h0OlV9PWw7aWYodGhpcy5lbmRS''@;'; put 'put ''b3c9PT12LTEmJk0pZm9yKHRoaXMuc3RhcnRSb3c9dGhpcy5lbmRSb3c7dGhpcy5zdGFydFJvdz4wOyl7Y29uc3Qgb2U9RFt0aGlzLmVuZFJvd10rVS1EW3RoaXMuc3RhcnRSb3ctMV07aWYodGhpcy5zdGFydFJvdy09MSxvZT49aC1mKWJyZWFrfXRoaXMuc3RhcnRQb3NpdGlvbj1udWxsIT09''@;'; put 'put ''KGE9RFt0aGlzLnN0YXJ0Um93XSkmJnZvaWQgMCE9PWE/YTpudWxsLHRoaXMuaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lcj0hKGQraC1mPDB8fGQ+RC5hdCgtMSkrVSksdjx0aGlzLmVuZFJvdyYmKHRoaXMuZW5kUm93PXYtMSksbnVsbCE9PXRoaXMuc3RhcnRSb3cmJih0aGlzLmNvdW50''@;'; put 'put ''PXRoaXMuZW5kUm93LXRoaXMuc3RhcnRSb3crMSl9fWZ1bmN0aW9uIEM1ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gR290KGMpe3ZhciBsPWZ1bmN0aW9uICRvdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lm''@;'; put 'put ''KHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJp''@;'; put 'put ''bmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgS290''@;'; put 'put ''IGV4dGVuZHMgdzVle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxDNWUodGhpcywicm93U3RhcnRPZmZzZXQiLDApLEM1ZSh0aGlzLCJyb3dFbmRPZmZzZXQiLDApfWZpbmFsaXplKGwpe3ZhciBhO3N1cGVyLmZpbmFsaXplKGwpO2NvbnN0e292ZXJyaWRlRm46ZCx0b3RhbFJv''@;'; put 'put ''d3M6aCxzdGFydFBvc2l0aW9uczpmfT1sO2lmKG51bGwhPT10aGlzLnN0YXJ0Um93JiYiZnVuY3Rpb24iPT10eXBlb2YgZCl7Y29uc3Qgdj10aGlzLnN0YXJ0Um93LE09dGhpcy5lbmRSb3c7ZCh0aGlzKSx0aGlzLnJvd1N0YXJ0T2Zmc2V0PXYtdGhpcy5zdGFydFJvdyx0aGlzLnJvd0VuZE9m''@;'; put 'put ''ZnNldD10aGlzLmVuZFJvdy1NfXRoaXMuc3RhcnRSb3c8MCYmKHRoaXMuc3RhcnRSb3c9MCksdGhpcy5zdGFydFBvc2l0aW9uPW51bGwhPT0oYT1mW3RoaXMuc3RhcnRSb3ddKSYmdm9pZCAwIT09YT9hOm51bGwsaDx0aGlzLmVuZFJvdyYmKHRoaXMuZW5kUm93PWgtMSksbnVsbCE9PXRoaXMu''@;'; put 'put ''c3RhcnRSb3cmJih0aGlzLmNvdW50PXRoaXMuZW5kUm93LXRoaXMuc3RhcnRSb3crMSl9fWZ1bmN0aW9uIGlrKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBYb3QoYyl7dmFyIGw9ZnVuY3Rpb24gcW90KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5''@;'; put 'put ''bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1''@;'; put 'put ''cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9''@;'; put 'put ''KTpjW2xdPWEsY31jbGFzcyBKb3R7Y29uc3RydWN0b3IoKXtpayh0aGlzLCJjb3VudCIsMCksaWsodGhpcywic3RhcnRSb3ciLG51bGwpLGlrKHRoaXMsImVuZFJvdyIsbnVsbCksaWsodGhpcywic3RhcnRQb3NpdGlvbiIsbnVsbCksaWsodGhpcywiaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRh''@;'; put 'put ''aW5lciIsITEpfWluaXRpYWxpemUoKXt9cHJvY2VzcyhsLGEpe2NvbnN0e3RvdGFsQ2FsY3VsYXRlZEhlaWdodDpkLHplcm9CYXNlZFNjcm9sbE9mZnNldDpoLGlubmVyVmlld3BvcnRIZWlnaHQ6Zixyb3dIZWlnaHQ6dn09YTtkPj1oJiZkK3Y8PWYmJihudWxsPT09dGhpcy5zdGFydFJvdyYm''@;'; put 'put ''KHRoaXMuc3RhcnRSb3c9bCksdGhpcy5lbmRSb3c9bCl9ZmluYWxpemUobCl7dmFyIGE7Y29uc3R7c2Nyb2xsT2Zmc2V0OmQsdmlld3BvcnRIZWlnaHQ6aCxob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0OmYsdG90YWxSb3dzOnYsbmVlZFJldmVyc2U6TSxzdGFydFBvc2l0aW9uczpELHJvd0hl''@;'; put 'put ''aWdodDpVfT1sO2lmKHRoaXMuZW5kUm93PT09di0xJiZNKWZvcih0aGlzLnN0YXJ0Um93PXRoaXMuZW5kUm93O3RoaXMuc3RhcnRSb3c+MDspe2NvbnN0IHZlPURbdGhpcy5lbmRSb3ddK1UtRFt0aGlzLnN0YXJ0Um93LTFdO2lmKHZlPD1oLWYmJih0aGlzLnN0YXJ0Um93LT0xKSx2ZT49aC1m''@;'; put 'put ''KWJyZWFrfXRoaXMuc3RhcnRQb3NpdGlvbj1udWxsIT09KGE9RFt0aGlzLnN0YXJ0Um93XSkmJnZvaWQgMCE9PWE/YTpudWxsO2NvbnN0IHRlPWQraC1mLG9lPW51bGw9PT10aGlzLnN0YXJ0Um93PzA6bC5nZXRSb3dIZWlnaHQodGhpcy5zdGFydFJvdyk7dGhpcy5pc1Zpc2libGVJblRyaW1t''@;'; put 'put ''aW5nQ29udGFpbmVyPSEodGU8b2V8fGQ+RC5hdCgtMSkpLHY8dGhpcy5lbmRSb3cmJih0aGlzLmVuZFJvdz12LTEpLG51bGwhPT10aGlzLnN0YXJ0Um93JiYodGhpcy5jb3VudD10aGlzLmVuZFJvdy10aGlzLnN0YXJ0Um93KzEpfX1mdW5jdGlvbiBhayhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rp''@;'; put 'put ''b24gUW90KGMpe3ZhciBsPWZ1bmN0aW9uIGVzdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJl''@;'; put 'put ''dHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4g''@;'; put 'put ''Yz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgdHN0e2NvbnN0cnVjdG9yKCl7YWsodGhpcywiY291bnQiLDApLGFrKHRoaXMsInN0YXJ0Q29sdW1uIiwwKSxhayh0aGlz''@;'; put 'put ''LCJlbmRDb2x1bW4iLDApLGFrKHRoaXMsInN0YXJ0UG9zaXRpb24iLDApLGFrKHRoaXMsImlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXIiLCEwKX1pbml0aWFsaXplKGwpe2xldHt0b3RhbENvbHVtbnM6YX09bDt0aGlzLmNvdW50PWEsdGhpcy5lbmRDb2x1bW49dGhpcy5jb3VudC0xfXBy''@;'; put 'put ''b2Nlc3MoKXt9ZmluYWxpemUoKXt9fWZ1bmN0aW9uIG9rKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBuc3QoYyl7dmFyIGw9ZnVuY3Rpb24gcnN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09''@;'; put 'put ''YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIp''@;'; put 'put ''KGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBTNWV7Y29uc3RydWN0''@;'; put 'put ''b3IoKXtvayh0aGlzLCJjb3VudCIsMCksb2sodGhpcywic3RhcnRDb2x1bW4iLG51bGwpLG9rKHRoaXMsImVuZENvbHVtbiIsbnVsbCksb2sodGhpcywic3RhcnRQb3NpdGlvbiIsbnVsbCksb2sodGhpcywiaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lciIsITEpfWluaXRpYWxpemUoKXt9''@;'; put 'put ''cHJvY2VzcyhsLGEpe2NvbnN0e3RvdGFsQ2FsY3VsYXRlZFdpZHRoOmQsemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0Omgsdmlld3BvcnRXaWR0aDpmfT1hO2Q8PWgmJih0aGlzLnN0YXJ0Q29sdW1uPWwpLGQ+PWgmJmQ8PWgrKGg+MD9mKzE6ZikmJm51bGw9PXRoaXMuc3RhcnRDb2x1bW4mJih0aGlz''@;'; put 'put ''LnN0YXJ0Q29sdW1uPWwpLHRoaXMuZW5kQ29sdW1uPWx9ZmluYWxpemUobCl7dmFyIGE7Y29uc3R7c2Nyb2xsT2Zmc2V0OmQsdmlld3BvcnRXaWR0aDpoLGlubGluZVN0YXJ0T2Zmc2V0OmYsemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0OnYsdG90YWxDb2x1bW5zOk0sbmVlZFJldmVyc2U6RCxzdGFy''@;'; put 'put ''dFBvc2l0aW9uczpVLGNvbHVtbldpZHRoOnRlfT1sO2lmKHRoaXMuZW5kQ29sdW1uPT09TS0xJiZEKWZvcih0aGlzLnN0YXJ0Q29sdW1uPXRoaXMuZW5kQ29sdW1uO3RoaXMuc3RhcnRDb2x1bW4+MDspe2NvbnN0IHdlPVVbdGhpcy5lbmRDb2x1bW5dK3RlLVVbdGhpcy5zdGFydENvbHVtbi0x''@;'; put 'put ''XTtpZih0aGlzLnN0YXJ0Q29sdW1uLT0xLHdlPmgpYnJlYWt9dGhpcy5zdGFydFBvc2l0aW9uPW51bGwhPT0oYT1VW3RoaXMuc3RhcnRDb2x1bW5dKSYmdm9pZCAwIT09YT9hOm51bGwsdGhpcy5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyPSEoZCtoLSh2PjA/aCsxOmgpPC0xKmZ8fGQ+''@;'; put 'put ''VS5hdCgtMSkrdGV8fC0xKmQtaD4wKSxNPHRoaXMuZW5kQ29sdW1uJiYodGhpcy5lbmRDb2x1bW49TS0xKSxudWxsIT09dGhpcy5zdGFydENvbHVtbiYmKHRoaXMuY291bnQ9dGhpcy5lbmRDb2x1bW4tdGhpcy5zdGFydENvbHVtbisxKX19ZnVuY3Rpb24gTTVlKGMsbCxhKXtyZXR1cm4obD1m''@;'; put 'put ''dW5jdGlvbiBpc3QoYyl7dmFyIGw9ZnVuY3Rpb24gYXN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9m''@;'; put 'put ''IGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShs''@;'; put 'put ''KSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBvc3QgZXh0ZW5kcyBTNWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLE01ZSh0aGlzLCJjb2x1''@;'; put 'put ''bW5TdGFydE9mZnNldCIsMCksTTVlKHRoaXMsImNvbHVtbkVuZE9mZnNldCIsMCl9ZmluYWxpemUobCl7dmFyIGE7c3VwZXIuZmluYWxpemUobCk7Y29uc3R7b3ZlcnJpZGVGbjpkLHRvdGFsQ29sdW1uczpoLHN0YXJ0UG9zaXRpb25zOmZ9PWw7aWYobnVsbCE9PXRoaXMuc3RhcnRDb2x1bW4m''@;'; put 'put ''JiJmdW5jdGlvbiI9PXR5cGVvZiBkKXtjb25zdCB2PXRoaXMuc3RhcnRDb2x1bW4sTT10aGlzLmVuZENvbHVtbjtkKHRoaXMpLHRoaXMuY29sdW1uU3RhcnRPZmZzZXQ9di10aGlzLnN0YXJ0Q29sdW1uLHRoaXMuY29sdW1uRW5kT2Zmc2V0PXRoaXMuZW5kQ29sdW1uLU19dGhpcy5zdGFydENv''@;'; put 'put ''bHVtbjwwJiYodGhpcy5zdGFydENvbHVtbj0wKSx0aGlzLnN0YXJ0UG9zaXRpb249bnVsbCE9PShhPWZbdGhpcy5zdGFydENvbHVtbl0pJiZ2b2lkIDAhPT1hP2E6bnVsbCxoPHRoaXMuZW5kQ29sdW1uJiYodGhpcy5lbmRDb2x1bW49aC0xKSxudWxsIT09dGhpcy5zdGFydENvbHVtbiYmKHRo''@;'; put 'put ''aXMuY291bnQ9dGhpcy5lbmRDb2x1bW4tdGhpcy5zdGFydENvbHVtbisxKX19ZnVuY3Rpb24gc2soYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHNzdChjKXt2YXIgbD1mdW5jdGlvbiBsc3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRv''@;'; put 'put ''UHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3Ry''@;'; put 'put ''aW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09''@;'; put 'put ''YSxjfWNsYXNzIGNzdHtjb25zdHJ1Y3Rvcigpe3NrKHRoaXMsImNvdW50IiwwKSxzayh0aGlzLCJzdGFydENvbHVtbiIsbnVsbCksc2sodGhpcywiZW5kQ29sdW1uIixudWxsKSxzayh0aGlzLCJzdGFydFBvc2l0aW9uIixudWxsKSxzayh0aGlzLCJpc1Zpc2libGVJblRyaW1taW5nQ29udGFp''@;'; put 'put ''bmVyIiwhMSl9aW5pdGlhbGl6ZSgpe31wcm9jZXNzKGwsYSl7Y29uc3R7dG90YWxDYWxjdWxhdGVkV2lkdGg6ZCx6ZXJvQmFzZWRTY3JvbGxPZmZzZXQ6aCx2aWV3cG9ydFdpZHRoOmYsY29sdW1uV2lkdGg6dn09YTtkPj1oJiZkK3Y8PWgrKGg+MD9mKzE6ZikmJihudWxsPT10aGlzLnN0YXJ0''@;'; put 'put ''Q29sdW1uJiYodGhpcy5zdGFydENvbHVtbj1sKSx0aGlzLmVuZENvbHVtbj1sKX1maW5hbGl6ZShsKXt2YXIgYTtjb25zdHtzY3JvbGxPZmZzZXQ6ZCx2aWV3cG9ydFdpZHRoOmgsaW5saW5lU3RhcnRPZmZzZXQ6Zix6ZXJvQmFzZWRTY3JvbGxPZmZzZXQ6dix0b3RhbENvbHVtbnM6TSxuZWVk''@;'; put 'put ''UmV2ZXJzZTpELHN0YXJ0UG9zaXRpb25zOlUsY29sdW1uV2lkdGg6dGV9PWw7aWYodGhpcy5lbmRDb2x1bW49PT1NLTEmJkQpZm9yKHRoaXMuc3RhcnRDb2x1bW49dGhpcy5lbmRDb2x1bW47dGhpcy5zdGFydENvbHVtbj4wOyl7Y29uc3QgRmU9VVt0aGlzLmVuZENvbHVtbl0rdGUtVVt0aGlz''@;'; put 'put ''LnN0YXJ0Q29sdW1uLTFdO2lmKEZlPD1oJiYodGhpcy5zdGFydENvbHVtbi09MSksRmU+PWgpYnJlYWt9dGhpcy5zdGFydFBvc2l0aW9uPW51bGwhPT0oYT1VW3RoaXMuc3RhcnRDb2x1bW5dKSYmdm9pZCAwIT09YT9hOm51bGw7Y29uc3QgdmU9ZCtoLSh2PjA/aCsxOmgpLHdlPW51bGw9PT10''@;'; put 'put ''aGlzLnN0YXJ0Q29sdW1uPzA6bC5nZXRDb2x1bW5XaWR0aCh0aGlzLnN0YXJ0Q29sdW1uKTt0aGlzLmlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXI9ISh2ZTwtMSpmfHxkPlUuYXQoLTEpfHwtMSpkLWg+LTEqd2UpLE08dGhpcy5lbmRDb2x1bW4mJih0aGlzLmVuZENvbHVtbj1NLTEpLG51''@;'; put 'put ''bGwhPT10aGlzLnN0YXJ0Q29sdW1uJiYodGhpcy5jb3VudD10aGlzLmVuZENvbHVtbi10aGlzLnN0YXJ0Q29sdW1uKzEpfX1mdW5jdGlvbiB4NWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHVzdChjKXt2YXIgbD1mdW5jdGlvbiBkc3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFj''@;'; put 'put ''KXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJp''@;'; put 'put ''bWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3Vy''@;'; put 'put ''YWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIEU1ZXtjb25zdHJ1Y3RvcihsKXt4NWUodGhpcywiY2FsY3VsYXRpb25UeXBlcyIsW10pLHg1ZSh0aGlzLCJjYWxjdWxhdGlvblJlc3VsdHMiLG5ldyBNYXApLHRoaXMuY2FsY3VsYXRpb25UeXBlcz1sfV9pbml0aWFsaXplKGwp''@;'; put 'put ''e3RoaXMuY2FsY3VsYXRpb25UeXBlcy5mb3JFYWNoKGE9PntsZXRbZCxoXT1hO3RoaXMuY2FsY3VsYXRpb25SZXN1bHRzLnNldChkLGgpLGguaW5pdGlhbGl6ZShsKX0pfV9wcm9jZXNzKGwsYSl7dGhpcy5jYWxjdWxhdGlvblR5cGVzLmZvckVhY2goZD0+e2xldFssaF09ZDtyZXR1cm4gaC5w''@;'; put 'put ''cm9jZXNzKGwsYSl9KX1fZmluYWxpemUobCl7dGhpcy5jYWxjdWxhdGlvblR5cGVzLmZvckVhY2goYT0+e2xldFssZF09YTtyZXR1cm4gZC5maW5hbGl6ZShsKX0pfWdldFJlc3VsdHNGb3IobCl7cmV0dXJuIHRoaXMuY2FsY3VsYXRpb25SZXN1bHRzLmdldChsKX19ZnVuY3Rpb24gVWYoYyxs''@;'; put 'put ''LGEpe3JldHVybihsPWZ1bmN0aW9uIGhzdChjKXt2YXIgbD1mdW5jdGlvbiBmc3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJv''@;'; put 'put ''YmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBl''@;'; put 'put ''b2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHBzdCBleHRlbmRzIEU1ZXtjb25zdHJ1Y3RvcihsKXtsZXR7Y2FsY3VsYXRpb25UeXBl''@;'; put 'put ''czphLHZpZXdwb3J0SGVpZ2h0OmQsc2Nyb2xsT2Zmc2V0OmgsdG90YWxSb3dzOmYsZGVmYXVsdFJvd0hlaWdodDp2LHJvd0hlaWdodEZuOk0sb3ZlcnJpZGVGbjpELGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQ6VX09bDtzdXBlcihhKSxVZih0aGlzLCJ2aWV3cG9ydEhlaWdodCIsMCksVWYo''@;'; put 'put ''dGhpcywic2Nyb2xsT2Zmc2V0IiwwKSxVZih0aGlzLCJ6ZXJvQmFzZWRTY3JvbGxPZmZzZXQiLDApLFVmKHRoaXMsInRvdGFsUm93cyIsMCksVWYodGhpcywicm93SGVpZ2h0Rm4iLG51bGwpLFVmKHRoaXMsInJvd0hlaWdodCIsMCksVWYodGhpcywib3ZlcnJpZGVGbiIsbnVsbCksVWYodGhp''@;'; put 'put ''cywiaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCIsMCksVWYodGhpcywiaW5uZXJWaWV3cG9ydEhlaWdodCIsMCksVWYodGhpcywidG90YWxDYWxjdWxhdGVkSGVpZ2h0IiwwKSxVZih0aGlzLCJzdGFydFBvc2l0aW9ucyIsW10pLFVmKHRoaXMsIm5lZWRSZXZlcnNlIiwhMCksdGhpcy5kZWZh''@;'; put 'put ''dWx0SGVpZ2h0PXYsdGhpcy52aWV3cG9ydEhlaWdodD1kLHRoaXMuc2Nyb2xsT2Zmc2V0PWgsdGhpcy56ZXJvQmFzZWRTY3JvbGxPZmZzZXQ9TWF0aC5tYXgoaCwwKSx0aGlzLnRvdGFsUm93cz1mLHRoaXMucm93SGVpZ2h0Rm49TSx0aGlzLm92ZXJyaWRlRm49RCx0aGlzLmhvcml6b250YWxT''@;'; put 'put ''Y3JvbGxiYXJIZWlnaHQ9VT8/MCx0aGlzLmlubmVyVmlld3BvcnRIZWlnaHQ9dGhpcy56ZXJvQmFzZWRTY3JvbGxPZmZzZXQrdGhpcy52aWV3cG9ydEhlaWdodC10aGlzLmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQsdGhpcy5jYWxjdWxhdGUoKX1jYWxjdWxhdGUoKXt0aGlzLl9pbml0aWFs''@;'; put 'put ''aXplKHRoaXMpO2ZvcihsZXQgbD0wO2w8dGhpcy50b3RhbFJvd3M7bCsrKWlmKHRoaXMucm93SGVpZ2h0PXRoaXMuZ2V0Um93SGVpZ2h0KGwpLHRoaXMuX3Byb2Nlc3MobCx0aGlzKSx0aGlzLnN0YXJ0UG9zaXRpb25zLnB1c2godGhpcy50b3RhbENhbGN1bGF0ZWRIZWlnaHQpLHRoaXMudG90''@;'; put 'put ''YWxDYWxjdWxhdGVkSGVpZ2h0Kz10aGlzLnJvd0hlaWdodCx0aGlzLnRvdGFsQ2FsY3VsYXRlZEhlaWdodD49dGhpcy5pbm5lclZpZXdwb3J0SGVpZ2h0KXt0aGlzLm5lZWRSZXZlcnNlPSExO2JyZWFrfXRoaXMuX2ZpbmFsaXplKHRoaXMpfWdldFJvd0hlaWdodChsKXtjb25zdCBhPXRoaXMu''@;'; put 'put ''cm93SGVpZ2h0Rm4obCk7cmV0dXJuIGlzTmFOKGEpP3RoaXMuZGVmYXVsdEhlaWdodDphfX1mdW5jdGlvbiBKMyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gZ3N0KGMpe3ZhciBsPWZ1bmN0aW9uIG1zdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tT''@;'; put 'put ''eW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0''@;'; put 'put ''dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEw''@;'; put 'put ''fSk6Y1tsXT1hLGN9Y2xhc3MgdnN0IGV4dGVuZHMgRTVle2NvbnN0cnVjdG9yKGwpe2xldHtjYWxjdWxhdGlvblR5cGVzOmEsdmlld3BvcnRXaWR0aDpkLHNjcm9sbE9mZnNldDpoLHRvdGFsQ29sdW1uczpmLGNvbHVtbldpZHRoRm46dixvdmVycmlkZUZuOk0saW5saW5lU3RhcnRPZmZzZXQ6''@;'; put 'put ''RH09bDtzdXBlcihhKSxKMyh0aGlzLCJ2aWV3cG9ydFdpZHRoIiwwKSxKMyh0aGlzLCJzY3JvbGxPZmZzZXQiLDApLEozKHRoaXMsInplcm9CYXNlZFNjcm9sbE9mZnNldCIsMCksSjModGhpcywidG90YWxDb2x1bW5zIiwwKSxKMyh0aGlzLCJjb2x1bW5XaWR0aEZuIixudWxsKSxKMyh0aGlz''@;'; put 'put ''LCJjb2x1bW5XaWR0aCIsMCksSjModGhpcywib3ZlcnJpZGVGbiIsbnVsbCksSjModGhpcywiaW5saW5lU3RhcnRPZmZzZXQiLDApLEozKHRoaXMsInRvdGFsQ2FsY3VsYXRlZFdpZHRoIiwwKSxKMyh0aGlzLCJzdGFydFBvc2l0aW9ucyIsW10pLEozKHRoaXMsIm5lZWRSZXZlcnNlIiwhMCks''@;'; put 'put ''dGhpcy52aWV3cG9ydFdpZHRoPWQsdGhpcy5zY3JvbGxPZmZzZXQ9aCx0aGlzLnplcm9CYXNlZFNjcm9sbE9mZnNldD1NYXRoLm1heChoLDApLHRoaXMudG90YWxDb2x1bW5zPWYsdGhpcy5jb2x1bW5XaWR0aEZuPXYsdGhpcy5vdmVycmlkZUZuPU0sdGhpcy5pbmxpbmVTdGFydE9mZnNldD1E''@;'; put 'put ''LHRoaXMuY2FsY3VsYXRlKCl9Y2FsY3VsYXRlKCl7dGhpcy5faW5pdGlhbGl6ZSh0aGlzKTtmb3IobGV0IGw9MDtsPHRoaXMudG90YWxDb2x1bW5zO2wrKylpZih0aGlzLmNvbHVtbldpZHRoPXRoaXMuZ2V0Q29sdW1uV2lkdGgobCksdGhpcy5fcHJvY2VzcyhsLHRoaXMpLHRoaXMuc3RhcnRQ''@;'; put 'put ''b3NpdGlvbnMucHVzaCh0aGlzLnRvdGFsQ2FsY3VsYXRlZFdpZHRoKSx0aGlzLnRvdGFsQ2FsY3VsYXRlZFdpZHRoKz10aGlzLmNvbHVtbldpZHRoLHRoaXMudG90YWxDYWxjdWxhdGVkV2lkdGg+PXRoaXMuemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0K3RoaXMudmlld3BvcnRXaWR0aCl7dGhpcy5u''@;'; put 'put ''ZWVkUmV2ZXJzZT0hMTticmVha310aGlzLl9maW5hbGl6ZSh0aGlzKX1nZXRDb2x1bW5XaWR0aChsKXtjb25zdCBhPXRoaXMuY29sdW1uV2lkdGhGbihsKTtyZXR1cm4gaXNOYU4oYSk/NTA6YX19Y29uc3QgYnN0PWNsYXNzIHlzdHtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3RoaXMuZGF0YUFj''@;'; put 'put ''Y2Vzc09iamVjdD1sLHRoaXMud290PWwud290LHRoaXMuaW5zdGFuY2U9dGhpcy53b3QsdGhpcy5kb21CaW5kaW5ncz1hLHRoaXMud3RTZXR0aW5ncz1kLHRoaXMud3RUYWJsZT1mLHRoaXMub3ZlcnNpemVkUm93cz1bXSx0aGlzLm92ZXJzaXplZENvbHVtbkhlYWRlcnM9W10sdGhpcy5oYXNP''@;'; put 'put ''dmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkPXt9LHRoaXMuY2xpZW50SGVpZ2h0PTAsdGhpcy5yb3dIZWFkZXJXaWR0aD1OYU4sdGhpcy5yb3dzVmlzaWJsZUNhbGN1bGF0b3I9bnVsbCx0aGlzLmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvcj1udWxsLHRoaXMucm93c0NhbGN1bGF0b3JUeXBl''@;'; put 'put ''cz1uZXcgTWFwKFtbInJlbmRlcmVkIiwoKT0+dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJlbmRlckFsbFJvd3MiKT9uZXcgWm90Om5ldyBLb3RdLFsiZnVsbHlWaXNpYmxlIiwoKT0+bmV3IEpvdF0sWyJwYXJ0aWFsbHlWaXNpYmxlIiwoKT0+bmV3IHc1ZV1dKSx0aGlzLmNvbHVtbnND''@;'; put 'put ''YWxjdWxhdG9yVHlwZXM9bmV3IE1hcChbWyJyZW5kZXJlZCIsKCk9PnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyZW5kZXJBbGxDb2x1bW5zIik/bmV3IHRzdDpuZXcgb3N0XSxbImZ1bGx5VmlzaWJsZSIsKCk9Pm5ldyBjc3RdLFsicGFydGlhbGx5VmlzaWJsZSIsKCk9Pm5ldyBTNWVd''@;'; put 'put ''XSksdGhpcy5ldmVudE1hbmFnZXI9aCx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdywicmVzaXplIiwoKT0+e3RoaXMuY2xpZW50SGVpZ2h0PXRoaXMuZ2V0V29ya3NwYWNlSGVpZ2h0KCl9KX1nZXRXb3Jrc3BhY2VIZWlnaHQo''@;'; put 'put ''KXtjb25zdCBhPXRoaXMuZGF0YUFjY2Vzc09iamVjdC50b3BPdmVybGF5VHJpbW1pbmdDb250YWluZXI7bGV0IGQ9MDtyZXR1cm4gZD1hPT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93P3RoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWln''@;'; put 'put ''aHQ6RnUoYSk+MCYmYS5jbGllbnRIZWlnaHQ+MD9hLmNsaWVudEhlaWdodDoxLzAsZH1nZXRWaWV3cG9ydEhlaWdodCgpe2xldCBsPXRoaXMuZ2V0V29ya3NwYWNlSGVpZ2h0KCk7aWYobD09PTEvMClyZXR1cm4gbDtjb25zdCBhPXRoaXMuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KCk7cmV0dXJu''@;'; put 'put ''IGE+MCYmKGwtPWEpLGx9Z2V0V29ya3NwYWNlV2lkdGgoKXtjb25zdHtyb290RG9jdW1lbnQ6bCxyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3MsZD10aGlzLmRhdGFBY2Nlc3NPYmplY3QuaW5saW5lU3RhcnRPdmVybGF5VHJpbW1pbmdDb250YWluZXI7bGV0IGg7aWYoZD09PWEpe2Nv''@;'; put 'put ''bnN0IGY9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpO2g9dGhpcy53dFRhYmxlLmhvbGRlci5vZmZzZXRXaWR0aCx0aGlzLmdldFJvd0hlYWRlcldpZHRoKCkrdGhpcy5zdW1Db2x1bW5XaWR0aHMoMCxmKT5oJiYoaD1sLmRvY3VtZW50RWxlbWVudC5jbGllbnRX''@;'; put 'put ''aWR0aCl9ZWxzZSBoPWQuY2xpZW50V2lkdGg7cmV0dXJuIGh9Z2V0Vmlld3BvcnRXaWR0aCgpe2NvbnN0IGw9dGhpcy5nZXRXb3Jrc3BhY2VXaWR0aCgpO2lmKGw9PT0xLzApcmV0dXJuIGw7Y29uc3QgYT10aGlzLmdldFJvd0hlYWRlcldpZHRoKCk7cmV0dXJuIGE+MD9sLWE6bH1oYXNWZXJ0''@;'; put 'put ''aWNhbFNjcm9sbCgpe2lmKHRoaXMuaXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCkpe2NvbnN0IGY9dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3JldHVybiBmLnNjcm9sbEhlaWdodD5mLmNsaWVudEhlaWdodH1jb25zdHtob2xkZXI6bCxoaWRl''@;'; put 'put ''cjphfT10aGlzLnd0VGFibGUsaD1hLm9mZnNldEhlaWdodDtyZXR1cm4gbC5jbGllbnRIZWlnaHQ8aHx8aD50aGlzLmdldFdvcmtzcGFjZUhlaWdodCgpfWhhc0hvcml6b250YWxTY3JvbGwoKXtpZih0aGlzLmlzVmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdygpKXtjb25zdCBoPXRoaXMu''@;'; put 'put ''ZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmRvY3VtZW50RWxlbWVudDtyZXR1cm4gaC5zY3JvbGxXaWR0aD5oLmNsaWVudFdpZHRofWNvbnN0e2hpZGVyOmx9PXRoaXMud3RUYWJsZSxhPWwub2Zmc2V0V2lkdGgsZD10aGlzLmhhc1ZlcnRpY2FsU2Nyb2xsKCk/d3UoKTowO3JldHVybiBhPnRo''@;'; put 'put ''aXMuZ2V0V29ya3NwYWNlV2lkdGgoKS1kfWlzVmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdygpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3QudG9wT3ZlcmxheVRyaW1taW5nQ29udGFpbmVyPT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93fWlzSG9yaXpvbnRhbGx5U2Nyb2xs''@;'; put 'put ''YWJsZUJ5V2luZG93KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcj09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvd31zdW1Db2x1bW5XaWR0aHMobCxhKXtsZXQgZD0wLGg9bDtmb3IoO2g8YTspZCs9dGhpcy53dFRh''@;'; put 'put ''YmxlLmdldENvbHVtbldpZHRoKGgpLGgrPTE7cmV0dXJuIGR9Z2V0V29ya3NwYWNlT2Zmc2V0KCl7cmV0dXJuIGQxKHRoaXMud3RUYWJsZS5ob2xkZXIpfWdldENvbHVtbkhlYWRlckhlaWdodCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxl''@;'; put 'put ''bmd0aD9pc05hTih0aGlzLmNvbHVtbkhlYWRlckhlaWdodCkmJih0aGlzLmNvbHVtbkhlYWRlckhlaWdodD1GdSh0aGlzLnd0VGFibGUuVEhFQUQpKTp0aGlzLmNvbHVtbkhlYWRlckhlaWdodD0wLHRoaXMuY29sdW1uSGVhZGVySGVpZ2h0fWdldFJvd0hlYWRlcldpZHRoKCl7Y29uc3QgbD10''@;'; put 'put ''aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVyV2lkdGgiKSxhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIik7aWYobCl7dGhpcy5yb3dIZWFkZXJXaWR0aD0wO2ZvcihsZXQgZD0wLGg9YS5sZW5ndGg7ZDxoO2QrKyl0aGlzLnJvd0hlYWRlcldpZHRo''@;'; put 'put ''Kz1sW2RdfHxsfWlmKGlzTmFOKHRoaXMucm93SGVhZGVyV2lkdGgpKWlmKGEubGVuZ3RoKXtsZXQgZD10aGlzLnd0VGFibGUuVEFCTEUucXVlcnlTZWxlY3RvcigiVEgiKTt0aGlzLnJvd0hlYWRlcldpZHRoPTA7Zm9yKGxldCBoPTAsZj1hLmxlbmd0aDtoPGY7aCsrKWQ/KHRoaXMucm93SGVh''@;'; put 'put ''ZGVyV2lkdGgrPV91KGQpLGQ9ZC5uZXh0U2libGluZyk6dGhpcy5yb3dIZWFkZXJXaWR0aCs9NTB9ZWxzZSB0aGlzLnJvd0hlYWRlcldpZHRoPTA7cmV0dXJuIHRoaXMucm93SGVhZGVyV2lkdGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uTW9kaWZ5Um93SGVhZGVyV2lkdGgiLHRo''@;'; put 'put ''aXMucm93SGVhZGVyV2lkdGgpfHx0aGlzLnJvd0hlYWRlcldpZHRoLHRoaXMucm93SGVhZGVyV2lkdGh9Y3JlYXRlUm93c0NhbGN1bGF0b3IoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06WyJyZW5kZXJlZCIsImZ1bGx5Vmlz''@;'; put 'put ''aWJsZSIsInBhcnRpYWxseVZpc2libGUiXTtjb25zdHt3dFNldHRpbmdzOmEsd3RUYWJsZTpkfT10aGlzO2xldCBmLHYsaD10aGlzLmdldFZpZXdwb3J0SGVpZ2h0KCk7dGhpcy5yb3dIZWFkZXJXaWR0aD1OYU47bGV0IE09dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnRvcFNjcm9sbFBvc2l0aW9u''@;'; put 'put ''LXRoaXMuZGF0YUFjY2Vzc09iamVjdC50b3BQYXJlbnRPZmZzZXQ7Y29uc3QgRD1hLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLFU9YS5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSx0ZT1hLmdldFNldHRpbmcoInRvdGFsUm93cyIpO3JldHVybiBEJiZNPj0wJiYodj10aGlzLmRh''@;'; put 'put ''dGFBY2Nlc3NPYmplY3QudG9wT3ZlcmxheS5zdW1DZWxsU2l6ZXMoMCxEKSxNKz12LGgtPXYpLFUmJnRoaXMuZGF0YUFjY2Vzc09iamVjdC5ib3R0b21PdmVybGF5LmNsb25lJiYodj10aGlzLmRhdGFBY2Nlc3NPYmplY3QuYm90dG9tT3ZlcmxheS5zdW1DZWxsU2l6ZXModGUtVSx0ZSksaC09''@;'; put 'put ''diksZj1kLmhvbGRlci5jbGllbnRIZWlnaHQ9PT1kLmhvbGRlci5vZmZzZXRIZWlnaHQ/MDp3dSh0aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudCksbmV3IHBzdCh7Y2FsY3VsYXRpb25UeXBlczpsLm1hcChvZT0+W29lLHRoaXMucm93c0NhbGN1bGF0b3JUeXBlcy5nZXQob2UpKCldKSx2''@;'; put 'put ''aWV3cG9ydEhlaWdodDpoLHNjcm9sbE9mZnNldDpNLHRvdGFsUm93czphLmdldFNldHRpbmcoInRvdGFsUm93cyIpLGRlZmF1bHRSb3dIZWlnaHQ6YS5nZXRTZXR0aW5nKCJzdHlsZXNIYW5kbGVyIikuZ2V0RGVmYXVsdFJvd0hlaWdodCgpLHJvd0hlaWdodEZuOm9lPT5kLmdldFJvd0hlaWdo''@;'; put 'put ''dChvZSksb3ZlcnJpZGVGbjphLmdldFNldHRpbmdQdXJlKCJ2aWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZSIpLGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQ6Zn0pfWNyZWF0ZUNvbHVtbnNDYWxjdWxhdG9yKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVu''@;'; put 'put ''dHNbMF0/YXJndW1lbnRzWzBdOlsicmVuZGVyZWQiLCJmdWxseVZpc2libGUiLCJwYXJ0aWFsbHlWaXNpYmxlIl07Y29uc3R7d3RTZXR0aW5nczphLHd0VGFibGU6ZH09dGhpcztsZXQgaD10aGlzLmdldFZpZXdwb3J0V2lkdGgoKSxmPU1hdGguYWJzKHRoaXMuZGF0YUFjY2Vzc09iamVjdC5p''@;'; put 'put ''bmxpbmVTdGFydFNjcm9sbFBvc2l0aW9uKS10aGlzLmRhdGFBY2Nlc3NPYmplY3QuaW5saW5lU3RhcnRQYXJlbnRPZmZzZXQ7dGhpcy5jb2x1bW5IZWFkZXJIZWlnaHQ9TmFOO2NvbnN0IHY9YS5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpO2lmKHYmJmY+PTApe2NvbnN0IE09dGhp''@;'; put 'put ''cy5kYXRhQWNjZXNzT2JqZWN0LmlubGluZVN0YXJ0T3ZlcmxheS5zdW1DZWxsU2l6ZXMoMCx2KTtmKz1NLGgtPU19cmV0dXJuIGQuaG9sZGVyLmNsaWVudFdpZHRoIT09ZC5ob2xkZXIub2Zmc2V0V2lkdGgmJihoLT13dSh0aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudCkpLG5ldyB2c3Qo''@;'; put 'put ''e2NhbGN1bGF0aW9uVHlwZXM6bC5tYXAoTT0+W00sdGhpcy5jb2x1bW5zQ2FsY3VsYXRvclR5cGVzLmdldChNKSgpXSksdmlld3BvcnRXaWR0aDpoLHNjcm9sbE9mZnNldDpmLHRvdGFsQ29sdW1uczphLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLGNvbHVtbldpZHRoRm46TT0+ZC5nZXRD''@;'; put 'put ''b2x1bW5XaWR0aChNKSxvdmVycmlkZUZuOmEuZ2V0U2V0dGluZ1B1cmUoInZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIiksaW5saW5lU3RhcnRPZmZzZXQ6dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmlubGluZVN0YXJ0UGFyZW50T2Zmc2V0fSl9Y3JlYXRlQ2FsY3VsYXRvcnMoKXts''@;'; put 'put ''ZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2NvbnN0e3d0U2V0dGluZ3M6YX09dGhpcyxkPXRoaXMuY3JlYXRlUm93c0NhbGN1bGF0b3IoKSxoPXRoaXMuY3JlYXRlQ29sdW1uc0NhbGN1bGF0b3IoKTtpZihsJiYhYS5nZXRTZXR0''@;'; put 'put ''aW5nKCJyZW5kZXJBbGxSb3dzIikpe2NvbnN0IGY9ZC5nZXRSZXN1bHRzRm9yKCJmdWxseVZpc2libGUiKSx2PWQuZ2V0UmVzdWx0c0ZvcigicGFydGlhbGx5VmlzaWJsZSIpO2w9dGhpcy5hcmVBbGxQcm9wb3NlZFZpc2libGVSb3dzQWxyZWFkeVJlbmRlcmVkKGYsdil9aWYobCYmIWEuZ2V0''@;'; put 'put ''U2V0dGluZygicmVuZGVyQWxsQ29sdW1ucyIpKXtjb25zdCBmPWguZ2V0UmVzdWx0c0ZvcigiZnVsbHlWaXNpYmxlIiksdj1oLmdldFJlc3VsdHNGb3IoInBhcnRpYWxseVZpc2libGUiKTtsPXRoaXMuYXJlQWxsUHJvcG9zZWRWaXNpYmxlQ29sdW1uc0FscmVhZHlSZW5kZXJlZChmLHYpfXJl''@;'; put 'put ''dHVybiBsfHwodGhpcy5yb3dzUmVuZGVyQ2FsY3VsYXRvcj1kLmdldFJlc3VsdHNGb3IoInJlbmRlcmVkIiksdGhpcy5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvcj1oLmdldFJlc3VsdHNGb3IoInJlbmRlcmVkIikpLHRoaXMucm93c1Zpc2libGVDYWxjdWxhdG9yPWQuZ2V0UmVzdWx0c0Zvcigi''@;'; put 'put ''ZnVsbHlWaXNpYmxlIiksdGhpcy5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3I9aC5nZXRSZXN1bHRzRm9yKCJmdWxseVZpc2libGUiKSx0aGlzLnJvd3NQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvcj1kLmdldFJlc3VsdHNGb3IoInBhcnRpYWxseVZpc2libGUiKSx0aGlzLmNvbHVtbnNQYXJ0''@;'; put 'put ''aWFsbHlWaXNpYmxlQ2FsY3VsYXRvcj1oLmdldFJlc3VsdHNGb3IoInBhcnRpYWxseVZpc2libGUiKSxsfWNyZWF0ZVZpc2libGVDYWxjdWxhdG9ycygpe2NvbnN0IGw9dGhpcy5jcmVhdGVSb3dzQ2FsY3VsYXRvcihbImZ1bGx5VmlzaWJsZSIsInBhcnRpYWxseVZpc2libGUiXSksYT10aGlz''@;'; put 'put ''LmNyZWF0ZUNvbHVtbnNDYWxjdWxhdG9yKFsiZnVsbHlWaXNpYmxlIiwicGFydGlhbGx5VmlzaWJsZSJdKTt0aGlzLnJvd3NWaXNpYmxlQ2FsY3VsYXRvcj1sLmdldFJlc3VsdHNGb3IoImZ1bGx5VmlzaWJsZSIpLHRoaXMuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yPWEuZ2V0UmVzdWx0c0Zv''@;'; put 'put ''cigiZnVsbHlWaXNpYmxlIiksdGhpcy5yb3dzUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3I9bC5nZXRSZXN1bHRzRm9yKCJwYXJ0aWFsbHlWaXNpYmxlIiksdGhpcy5jb2x1bW5zUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3I9YS5nZXRSZXN1bHRzRm9yKCJwYXJ0aWFsbHlWaXNpYmxlIil9''@;'; put 'put ''YXJlQWxsUHJvcG9zZWRWaXNpYmxlUm93c0FscmVhZHlSZW5kZXJlZChsLGEpe2lmKCF0aGlzLnJvd3NWaXNpYmxlQ2FsY3VsYXRvcilyZXR1cm4hMTtsZXR7c3RhcnRSb3c6ZCxlbmRSb3c6aH09bDtjb25zdHtzdGFydFJvdzpmLGVuZFJvdzp2fT1hO2lmKG51bGw9PT1kJiZudWxsPT09aCl7''@;'; put 'put ''aWYoIWwuaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lciYmIXRoaXMud3RUYWJsZS5pc1Jvd0JlZm9yZVJlbmRlcmVkUm93cyhmKSYmIXRoaXMud3RUYWJsZS5pc1Jvd0FmdGVyUmVuZGVyZWRSb3dzKHYpKXJldHVybiEwO2Q9ZixoPXZ9Y29uc3R7c3RhcnRSb3c6TSxlbmRSb3c6RCxyb3dT''@;'; put 'put ''dGFydE9mZnNldDpVLHJvd0VuZE9mZnNldDp0ZX09dGhpcy5yb3dzUmVuZGVyQ2FsY3VsYXRvcixvZT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiktMSx2ZT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidmlld3BvcnRSb3dSZW5kZXJpbmdUaHJlc2hvbGQiKTty''@;'; put 'put ''ZXR1cm4gTnVtYmVyLmlzSW50ZWdlcih2ZSkmJnZlPjA/KGQ9TWF0aC5tYXgoMCxkLU1hdGgubWluKFUsdmUpKSxoPU1hdGgubWluKG9lLGgrTWF0aC5taW4odGUsdmUpKSk6ImF1dG8iPT09dmUmJihkPU1hdGgubWF4KDAsZC1NYXRoLmNlaWwoVS8yKSksaD1NYXRoLm1pbihvZSxoK01hdGgu''@;'; put 'put ''Y2VpbCh0ZS8yKSkpLCEoZDxNfHxkPT09TSYmZD4wfHxoPkR8fGg9PT1EJiZoPG9lKX1hcmVBbGxQcm9wb3NlZFZpc2libGVDb2x1bW5zQWxyZWFkeVJlbmRlcmVkKGwsYSl7aWYoIXRoaXMuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yKXJldHVybiExO2xldHtzdGFydENvbHVtbjpkLGVuZENv''@;'; put 'put ''bHVtbjpofT1sO2NvbnN0e3N0YXJ0Q29sdW1uOmYsZW5kQ29sdW1uOnZ9PWE7aWYobnVsbD09PWQmJm51bGw9PT1oKXtpZighbC5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyJiYhdGhpcy53dFRhYmxlLmlzQ29sdW1uQmVmb3JlUmVuZGVyZWRDb2x1bW5zKGYpJiYhdGhpcy53dFRhYmxl''@;'; put 'put ''LmlzQ29sdW1uQWZ0ZXJSZW5kZXJlZENvbHVtbnModikpcmV0dXJuITA7ZD1mLGg9dn1jb25zdHtzdGFydENvbHVtbjpNLGVuZENvbHVtbjpELGNvbHVtblN0YXJ0T2Zmc2V0OlUsY29sdW1uRW5kT2Zmc2V0OnRlfT10aGlzLmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLG9lPXRoaXMud3RTZXR0''@;'; put 'put ''aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKS0xLHZlPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ2aWV3cG9ydENvbHVtblJlbmRlcmluZ1RocmVzaG9sZCIpO3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKHZlKSYmdmU+MD8oZD1NYXRoLm1heCgwLGQtTWF0aC5taW4oVSx2ZSkp''@;'; put 'put ''LGg9TWF0aC5taW4ob2UsaCtNYXRoLm1pbih0ZSx2ZSkpKToiYXV0byI9PT12ZSYmKGQ9TWF0aC5tYXgoMCxkLU1hdGguY2VpbChVLzIpKSxoPU1hdGgubWluKG9lLGgrTWF0aC5jZWlsKHRlLzIpKSksIShkPE18fGQ9PT1NJiZkPjB8fGg+RHx8aD09PUQmJmg8b2UpfXJlc2V0SGFzT3ZlcnNp''@;'; put 'put ''emVkQ29sdW1uSGVhZGVyc01hcmtlZCgpe2FzKHRoaXMuaGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZCwobCxhLGQpPT57ZFthXT12b2lkIDB9KX19O2Z1bmN0aW9uIFQ1ZShjLGwsYSl7QTVlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBBNWUoYyxsKXtpZihsLmhhcyhjKSl0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHJ1KGMsbCl7cmV0dXJuIGMuZ2V0KGxrKGMsbCkpfWZ1bmN0aW9uIGs1ZShjLGwsYSl7cmV0dXJuIGMuc2V0KGxrKGMsbCksYSks''@;'; put 'put ''YX1mdW5jdGlvbiBsayhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Yig5Mzkw''@;'; put 'put ''OSk7dmFyIFEzPW5ldyBXZWFrTWFwLHoxPW5ldyBXZWFrTWFwLE1OPW5ldyBXZWFrU2V0O2NsYXNzIHdzdHtjb25zdHJ1Y3RvcigpeyhmdW5jdGlvbiBfc3QoYyxsKXtBNWUoYyxsKSxsLmFkZChjKX0pKHRoaXMsTU4pLFQ1ZSh0aGlzLFEzLHZvaWQgMCksVDVlKHRoaXMsejEsdm9pZCAwKX1z''@;'; put 'put ''ZXRBY3RpdmVPdmVybGF5KGwpe3JldHVybiBrNWUoejEsdGhpcyxsKSx0aGlzfXNldEFjdGl2ZVNlbGVjdGlvbihsKXtyZXR1cm4gazVlKFEzLHRoaXMsbCksdGhpc31zY2FuKCl7Y29uc3QgbD1ydShRMyx0aGlzKS5zZXR0aW5ncy5zZWxlY3Rpb25UeXBlLGE9bmV3IFNldDtyZXR1cm4iYWN0''@;'; put 'put ''aXZlLWhlYWRlciI9PT1sPyh0aGlzLnNjYW5Db2x1bW5zSW5IZWFkZXJzUmFuZ2UoZD0+YS5hZGQoZCkpLHRoaXMuc2NhblJvd3NJbkhlYWRlcnNSYW5nZShkPT5hLmFkZChkKSkpOiJhcmVhIj09PWw/dGhpcy5zY2FuQ2VsbHNSYW5nZShkPT5hLmFkZChkKSk6ImZvY3VzIj09PWw/KHRoaXMu''@;'; put 'put ''c2NhbkNvbHVtbnNJbkhlYWRlcnNSYW5nZShkPT5hLmFkZChkKSksdGhpcy5zY2FuUm93c0luSGVhZGVyc1JhbmdlKGQ9PmEuYWRkKGQpKSx0aGlzLnNjYW5DZWxsc1JhbmdlKGQ9PmEuYWRkKGQpKSk6ImZpbGwiPT09bD90aGlzLnNjYW5DZWxsc1JhbmdlKGQ9PmEuYWRkKGQpKToiaGVhZGVy''@;'; put 'put ''Ij09PWw/KHRoaXMuc2NhbkNvbHVtbnNJbkhlYWRlcnNSYW5nZShkPT5hLmFkZChkKSksdGhpcy5zY2FuUm93c0luSGVhZGVyc1JhbmdlKGQ9PmEuYWRkKGQpKSk6InJvdyI9PT1sPyh0aGlzLnNjYW5Sb3dzSW5IZWFkZXJzUmFuZ2UoZD0+YS5hZGQoZCkpLHRoaXMuc2NhblJvd3NJbkNlbGxz''@;'; put 'put ''UmFuZ2UoZD0+YS5hZGQoZCkpKToiY29sdW1uIj09PWwmJih0aGlzLnNjYW5Db2x1bW5zSW5IZWFkZXJzUmFuZ2UoZD0+YS5hZGQoZCkpLHRoaXMuc2NhbkNvbHVtbnNJbkNlbGxzUmFuZ2UoZD0+YS5hZGQoZCkpKSxhfXNjYW5Db2x1bW5zSW5IZWFkZXJzUmFuZ2UobCl7Y29uc3RbYSxkLGgs''@;'; put 'put ''Zl09cnUoUTMsdGhpcykuZ2V0Q29ybmVycygpLHt3dFRhYmxlOnZ9PXJ1KHoxLHRoaXMpLE09di5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpLEQ9di5nZXRDb2x1bW5IZWFkZXJzQ291bnQoKTtsZXQgVT0wO2ZvcihsZXQgdGU9LXYuZ2V0Um93SGVhZGVyc0NvdW50KCk7dGU8TTt0ZSsrKXtj''@;'; put 'put ''b25zdCBvZT12LmNvbHVtbkZpbHRlci5yZW5kZXJlZFRvU291cmNlKHRlKTtpZighKG9lPGR8fG9lPmYpKXtmb3IobGV0IHZlPS1EO3ZlPDA7dmUrKyl7aWYodmU8YXx8dmU+aCljb250aW51ZTtjb25zdCB3ZT12ZStEO2xldCBGZT12LmdldENvbHVtbkhlYWRlcihvZSx3ZSk7Y29uc3QgV2U9''@;'; put 'put ''cnUoejEsdGhpcykuZ2V0U2V0dGluZygib25CZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXIiLG9lLHdlLHtzZWxlY3Rpb25UeXBlOnJ1KFEzLHRoaXMpLnNldHRpbmdzLnNlbGVjdGlvblR5cGUsY29sdW1uQ3Vyc29yOlUsc2VsZWN0aW9uV2lkdGg6Zi1kKzF9KTtudWxsIT09V2UmJihX''@;'; put 'put ''ZSE9PW9lJiYoRmU9di5nZXRDb2x1bW5IZWFkZXIoV2Usd2UpKSxsKEZlKSl9VSs9MX19fXNjYW5Sb3dzSW5IZWFkZXJzUmFuZ2UobCl7Y29uc3RbYSxkLGgsZl09cnUoUTMsdGhpcykuZ2V0Q29ybmVycygpLHt3dFRhYmxlOnZ9PXJ1KHoxLHRoaXMpLE09di5nZXRSZW5kZXJlZFJvd3NDb3Vu''@;'; put 'put ''dCgpLEQ9di5nZXRSb3dIZWFkZXJzQ291bnQoKTtsZXQgVT0wO2ZvcihsZXQgdGU9LXYuZ2V0Q29sdW1uSGVhZGVyc0NvdW50KCk7dGU8TTt0ZSsrKXtjb25zdCBvZT12LnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKHRlKTtpZighKG9lPGF8fG9lPmgpKXtmb3IobGV0IHZlPS1EO3ZlPDA7''@;'; put 'put ''dmUrKyl7aWYodmU8ZHx8dmU+Ziljb250aW51ZTtjb25zdCB3ZT12ZStEO2xldCBGZT12LmdldFJvd0hlYWRlcihvZSx3ZSk7Y29uc3QgV2U9cnUoejEsdGhpcykuZ2V0U2V0dGluZygib25CZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXIiLG9lLHdlLHtzZWxlY3Rpb25UeXBlOnJ1KFEzLHRo''@;'; put 'put ''aXMpLnNldHRpbmdzLnNlbGVjdGlvblR5cGUscm93Q3Vyc29yOlUsc2VsZWN0aW9uSGVpZ2h0OmgtYSsxfSk7bnVsbCE9PVdlJiYoV2UhPT1vZSYmKEZlPXYuZ2V0Um93SGVhZGVyKFdlLHdlKSksbChGZSkpfVUrPTF9fX1zY2FuQ2VsbHNSYW5nZShsKXtjb25zdHt3dFRhYmxlOmF9PXJ1KHox''@;'; put 'put ''LHRoaXMpO2xrKE1OLHRoaXMsQ3N0KS5jYWxsKHRoaXMsKGQsaCk9Pntjb25zdCBmPWEuZ2V0Q2VsbChydSh6MSx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKGQsaCkpLHY9cnUoejEsdGhpcykuZ2V0U2V0dGluZygib25BZnRlckRyYXdTZWxlY3Rpb24iLGQsaCxydShRMyx0aGlzKS5zZXR0aW5n''@;'; put 'put ''cy5sYXllckxldmVsKTsic3RyaW5nIj09dHlwZW9mIHYmJmlpKGYsdiksbChmKX0pfXNjYW5Sb3dzSW5DZWxsc1JhbmdlKGwpe2NvbnN0W2EsLGRdPXJ1KFEzLHRoaXMpLmdldENvcm5lcnMoKSx7d3RUYWJsZTpofT1ydSh6MSx0aGlzKTtsayhNTix0aGlzLEQ1ZSkuY2FsbCh0aGlzLChmLHYp''@;'; put 'put ''PT57aWYoZj49YSYmZjw9ZCl7Y29uc3QgTT1oLmdldENlbGwocnUoejEsdGhpcykuY3JlYXRlQ2VsbENvb3JkcyhmLHYpKTtsKE0pfX0pfXNjYW5Db2x1bW5zSW5DZWxsc1JhbmdlKGwpe2NvbnN0WyxhLCxkXT1ydShRMyx0aGlzKS5nZXRDb3JuZXJzKCkse3d0VGFibGU6aH09cnUoejEsdGhp''@;'; put 'put ''cyk7bGsoTU4sdGhpcyxENWUpLmNhbGwodGhpcywoZix2KT0+e2lmKHY+PWEmJnY8PWQpe2NvbnN0IE09aC5nZXRDZWxsKHJ1KHoxLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMoZix2KSk7bChNKX19KX19ZnVuY3Rpb24gQ3N0KGMpe2xldFtsLGEsZCxoXT1ydShRMyx0aGlzKS5nZXRDb3JuZXJz''@;'; put 'put ''KCk7aWYobDwwJiZkPDB8fGE8MCYmaDwwKXJldHVybjtjb25zdHt3dFRhYmxlOmZ9PXJ1KHoxLHRoaXMpLHY9bCE9PWR8fGEhPT1oO2lmKGE9TWF0aC5tYXgoYSwwKSxoPU1hdGgubWF4KGgsMCksbD1NYXRoLm1heChsLDApLGQ9TWF0aC5tYXgoZCwwKSx2KXtpZihhPU1hdGgubWF4KGEsZi5n''@;'; put 'put ''ZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCkpLGg9TWF0aC5taW4oaCxmLmdldExhc3RSZW5kZXJlZENvbHVtbigpKSxsPU1hdGgubWF4KGwsZi5nZXRGaXJzdFJlbmRlcmVkUm93KCkpLGQ9TWF0aC5taW4oZCxmLmdldExhc3RSZW5kZXJlZFJvdygpKSxoPGF8fGQ8bClyZXR1cm59ZWxzZSBpZigh''@;'; put 'put ''RTQoZi5nZXRDZWxsKHJ1KHoxLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMobCxhKSkpKXJldHVybjtmb3IobGV0IE09bDtNPD1kO00rPTEpZm9yKGxldCBEPWE7RDw9aDtEKz0xKWMoTSxEKX1mdW5jdGlvbiBENWUoYyl7Y29uc3R7d3RUYWJsZTpsfT1ydSh6MSx0aGlzKSxhPWwuZ2V0UmVuZGVy''@;'; put 'put ''ZWRSb3dzQ291bnQoKSxkPWwuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKTtmb3IobGV0IGg9MDtoPGE7aCs9MSl7Y29uc3QgZj1sLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKGgpO2ZvcihsZXQgdj0wO3Y8ZDt2Kz0xKWMoZixsLmNvbHVtbkZpbHRlci5yZW5kZXJlZFRvU291cmNlKHYp''@;'; put 'put ''KX19Y29uc3QgSTVlPSJodC1ib3JkZXItc3R5bGUtIixSNWU9Y2xhc3MgeHN0e2NvbnN0cnVjdG9yKGwsYSl7YSYmKHRoaXMuZXZlbnRNYW5hZ2VyPWwuZXZlbnRNYW5hZ2VyLHRoaXMuaW5zdGFuY2U9bCx0aGlzLndvdD1sLHRoaXMuc2V0dGluZ3M9YSx0aGlzLm1vdXNlRG93bj0hMSx0aGlz''@;'; put 'put ''Lm1haW49bnVsbCx0aGlzLnRvcD1udWxsLHRoaXMuYm90dG9tPW51bGwsdGhpcy5zdGFydD1udWxsLHRoaXMuZW5kPW51bGwsdGhpcy50b3BTdHlsZT1udWxsLHRoaXMuYm90dG9tU3R5bGU9bnVsbCx0aGlzLnN0YXJ0U3R5bGU9bnVsbCx0aGlzLmVuZFN0eWxlPW51bGwsdGhpcy5jb3JuZXJE''@;'; put 'put ''ZWZhdWx0U3R5bGU9ekoodGhpcy5pbnN0YW5jZSksdGhpcy5jb3JuZXJDZW50ZXJQb2ludE9mZnNldD0tTWF0aC5jZWlsKHBhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRoLDEwKS8yKSx0aGlzLmNvcm5lcj1udWxsLHRoaXMuY29ybmVyU3R5bGU9bnVsbCx0aGlzLmNyZWF0''@;'; put 'put ''ZUJvcmRlcnMoYSksdGhpcy5yZWdpc3Rlckxpc3RlbmVycygpKX1yZWdpc3Rlckxpc3RlbmVycygpe2NvbnN0IGw9dGhpcy53b3Qucm9vdERvY3VtZW50LmJvZHk7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZWRvd24iLCgpPT50aGlzLm9uTW91c2VEb3duKCkp''@;'; put 'put ''LHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PnRoaXMub25Nb3VzZVVwKCkpO2ZvcihsZXQgYT0wLGQ9dGhpcy5tYWluLmNoaWxkTm9kZXMubGVuZ3RoO2E8ZDthKyspdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLm1haW4u''@;'; put 'put ''Y2hpbGROb2Rlc1thXSwibW91c2VlbnRlciIsZj0+dGhpcy5vbk1vdXNlRW50ZXIoZix0aGlzLm1haW4uY2hpbGROb2Rlc1thXSkpfW9uTW91c2VEb3duKCl7dGhpcy5tb3VzZURvd249ITB9b25Nb3VzZVVwKCl7dGhpcy5tb3VzZURvd249ITF9b25Nb3VzZUVudGVyKGwsYSl7aWYoIXRoaXMu''@;'; put 'put ''bW91c2VEb3dufHwhdGhpcy53b3QuZ2V0U2V0dGluZygiaGlkZUJvcmRlck9uTW91c2VEb3duT3ZlciIpKXJldHVybjtsLnByZXZlbnREZWZhdWx0KCksRTIobCk7Y29uc3QgZD10aGlzLGg9dGhpcy53b3Qucm9vdERvY3VtZW50LmJvZHksZj1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Eu''@;'; put 'put ''c3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihoLCJtb3VzZW1vdmUiLGZ1bmN0aW9uIE0oRCl7KGZ1bmN0aW9uIHYoRCl7aWYoRC5jbGllbnRZPE1hdGguZmxvb3IoZi50b3ApfHxELmNsaWVudFk+TWF0aC5jZWlsKGYudG9wK2YuaGVpZ2h0''@;'; put 'put ''KXx8RC5jbGllbnRYPE1hdGguZmxvb3IoZi5sZWZ0KXx8RC5jbGllbnRYPk1hdGguY2VpbChmLmxlZnQrZi53aWR0aCkpcmV0dXJuITB9KShEKSYmKGQuZXZlbnRNYW5hZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoaCwibW91c2Vtb3ZlIixNKSxhLnN0eWxlLmRpc3BsYXk9ImJsb2NrIil9KX1j''@;'; put 'put ''cmVhdGVCb3JkZXJzKGwpe2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlzLndvdDt0aGlzLm1haW49YS5jcmVhdGVFbGVtZW50KCJkaXYiKTtjb25zdCBkPVsidG9wIiwic3RhcnQiLCJib3R0b20iLCJlbmQiLCJjb3JuZXIiXTtsZXQgaD10aGlzLm1haW4uc3R5bGU7aC5wb3NpdGlvbj0iYWJz''@;'; put 'put ''b2x1dGUiLGgudG9wPTAsaC5sZWZ0PTA7Zm9yKGxldCBNPTA7TTw1O00rKyl7Y29uc3QgRD1kW01dLFU9YS5jcmVhdGVFbGVtZW50KCJkaXYiKSx0ZT12ZT0+dGhpcy5zZXR0aW5nc1tEXSYmdGhpcy5zZXR0aW5nc1tEXVt2ZV0/dGhpcy5zZXR0aW5nc1tEXVt2ZV06bC5ib3JkZXJbdmVdO1Uu''@;'; put 'put ''Y2xhc3NOYW1lPWB3dEJvcmRlciAke3RoaXMuc2V0dGluZ3MuY2xhc3NOYW1lfHwiIn1gLHRoaXMuc2V0dGluZ3NbRF0mJnRoaXMuc2V0dGluZ3NbRF0uaGlkZSYmKFUuY2xhc3NOYW1lKz0iIGhpZGRlbiIpLGg9VS5zdHlsZTtjb25zdCBvZT10ZSgic3R5bGUiKTtvZT8oWyJzdGFydCIsImVu''@;'; put 'put ''ZCJdLmluY2x1ZGVzKEQpP1UuY2xhc3NOYW1lKz1gICR7STVlfSR7b2V9LXZlcnRpY2FsYDpVLmNsYXNzTmFtZSs9YCAke0k1ZX0ke29lfS1ob3Jpem9udGFsYCxoLnNldFByb3BlcnR5KCItLWh0LWN1c3RvbS1ib3JkZXItc2l6ZSIsYCR7dGUoIndpZHRoIil9cHhgKSxoLnNldFByb3BlcnR5''@;'; put 'put ''KCItLWh0LWN1c3RvbS1ib3JkZXItY29sb3IiLHRlKCJjb2xvciIpKSk6aC5iYWNrZ3JvdW5kQ29sb3I9dGUoImNvbG9yIiksaC5oZWlnaHQ9YCR7dGUoIndpZHRoIil9cHhgLGgud2lkdGg9YCR7dGUoIndpZHRoIil9cHhgLHRoaXMubWFpbi5hcHBlbmRDaGlsZChVKX10aGlzLnRvcD10aGlz''@;'; put 'put ''Lm1haW4uY2hpbGROb2Rlc1swXSx0aGlzLnN0YXJ0PXRoaXMubWFpbi5jaGlsZE5vZGVzWzFdLHRoaXMuYm90dG9tPXRoaXMubWFpbi5jaGlsZE5vZGVzWzJdLHRoaXMuZW5kPXRoaXMubWFpbi5jaGlsZE5vZGVzWzNdLHRoaXMudG9wU3R5bGU9dGhpcy50b3Auc3R5bGUsdGhpcy5zdGFydFN0''@;'; put 'put ''eWxlPXRoaXMuc3RhcnQuc3R5bGUsdGhpcy5ib3R0b21TdHlsZT10aGlzLmJvdHRvbS5zdHlsZSx0aGlzLmVuZFN0eWxlPXRoaXMuZW5kLnN0eWxlLHRoaXMuY29ybmVyPXRoaXMubWFpbi5jaGlsZE5vZGVzWzRdLHRoaXMuY29ybmVyLmNsYXNzTmFtZSs9IiBjb3JuZXIiLHRoaXMuY29ybmVy''@;'; put 'put ''U3R5bGU9dGhpcy5jb3JuZXIuc3R5bGUsdGhpcy5jb3JuZXJTdHlsZS53aWR0aD1gJHt0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aH1weGAsdGhpcy5jb3JuZXJTdHlsZS5oZWlnaHQ9YCR7dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuaGVpZ2h0fXB4YCx0aGlzLmNvcm5lclN0eWxlLmJv''@;'; put 'put ''cmRlcj1bYCR7dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGh9cHhgLHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlclN0eWxlLHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlckNvbG9yXS5qb2luKCIgIiksWDMoKSYmdGhpcy5pbnN0YW5jZS5nZXRTZXR0aW5nKCJp''@;'; put 'put ''c0RhdGFWaWV3SW5zdGFuY2UiKSYmdGhpcy5jcmVhdGVNdWx0aXBsZVNlbGVjdG9ySGFuZGxlcygpLHRoaXMuZGlzYXBwZWFyKCk7Y29uc3R7d3RUYWJsZTpmfT10aGlzLndvdDtsZXQgdj1mLmJvcmRlcnNIb2xkZXI7dnx8KHY9YS5jcmVhdGVFbGVtZW50KCJkaXYiKSx2LmNsYXNzTmFtZT0i''@;'; put 'put ''aHRCb3JkZXJzIixmLmJvcmRlcnNIb2xkZXI9dixmLnNwcmVhZGVyLmFwcGVuZENoaWxkKHYpKSx2LmFwcGVuZENoaWxkKHRoaXMubWFpbil9Y3JlYXRlTXVsdGlwbGVTZWxlY3RvckhhbmRsZXMoKXtjb25zdHtyb290RG9jdW1lbnQ6bCx3dFNldHRpbmdzOmF9PXRoaXMud290LGQ9YS5nZXRT''@;'; put 'put ''ZXR0aW5nKCJzdHlsZXNIYW5kbGVyIiksaD1kLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtbW9iaWxlLWhhbmRsZS1zaXplIiksZj1kLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtbW9iaWxlLWhhbmRsZS1ib3JkZXItcmFkaXVzIiksdj1kLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwt''@;'; put 'put ''bW9iaWxlLWhhbmRsZS1iYWNrZ3JvdW5kLWNvbG9yIiksTT1kLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtbW9iaWxlLWhhbmRsZS1ib3JkZXItd2lkdGgiKSxEPWQuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1tb2JpbGUtaGFuZGxlLWJvcmRlci1jb2xvciIpO3RoaXMuc2VsZWN0aW9u''@;'; put 'put ''SGFuZGxlcz17dG9wOmwuY3JlYXRlRWxlbWVudCgiRElWIiksdG9wSGl0QXJlYTpsLmNyZWF0ZUVsZW1lbnQoIkRJViIpLGJvdHRvbTpsLmNyZWF0ZUVsZW1lbnQoIkRJViIpLGJvdHRvbUhpdEFyZWE6bC5jcmVhdGVFbGVtZW50KCJESVYiKX0sdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcC5j''@;'; put 'put ''bGFzc05hbWU9InRvcFNlbGVjdGlvbkhhbmRsZSB0b3BMZWZ0U2VsZWN0aW9uSGFuZGxlIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wSGl0QXJlYS5jbGFzc05hbWU9InRvcFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIHRvcExlZnRTZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSIsdGhpcy5zZWxl''@;'; put 'put ''Y3Rpb25IYW5kbGVzLmJvdHRvbS5jbGFzc05hbWU9ImJvdHRvbVNlbGVjdGlvbkhhbmRsZSBib3R0b21SaWdodFNlbGVjdGlvbkhhbmRsZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbUhpdEFyZWEuY2xhc3NOYW1lPSJib3R0b21TZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSBib3R0b21S''@;'; put 'put ''aWdodFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzPXt0b3A6dGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcC5zdHlsZSx0b3BIaXRBcmVhOnRoaXMuc2VsZWN0aW9uSGFuZGxlcy50b3BIaXRBcmVhLnN0eWxlLGJvdHRvbTp0aGlzLnNlbGVjdGlv''@;'; put 'put ''bkhhbmRsZXMuYm90dG9tLnN0eWxlLGJvdHRvbUhpdEFyZWE6dGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbUhpdEFyZWEuc3R5bGV9LGFzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGhlaWdodDoiNDBweCIsd2lkdGg6IjQwcHgiLCJib3JkZXItcmFkaXVzIjpgJHtwYXJzZUludCg0MC8xLjUs''@;'; put 'put ''MTApfXB4YH0sKHdlLEZlKT0+e3RoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMuYm90dG9tSGl0QXJlYVtGZV09d2UsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy50b3BIaXRBcmVhW0ZlXT13ZX0pLGFzKGQuaXNDbGFzc2ljVGhlbWUoKT97cG9zaXRpb246ImFic29sdXRlIixoZWln''@;'; put 'put ''aHQ6IjEwcHgiLHdpZHRoOiIxMHB4IiwiYm9yZGVyLXJhZGl1cyI6YCR7cGFyc2VJbnQoMTAvMS41LDEwKX1weGAsYmFja2dyb3VuZDoiI0Y1RjVGRiIsYm9yZGVyOiIxcHggc29saWQgIzQyODVjOCJ9Ontwb3NpdGlvbjoiYWJzb2x1dGUiLGhlaWdodDpgJHtofXB4YCx3aWR0aDpgJHtofXB4''@;'; put 'put ''YCwiYm9yZGVyLXJhZGl1cyI6YCR7Zn1weGAsYmFja2dyb3VuZDpgJHt2fWAsYm9yZGVyOmAke019cHggc29saWQgJHtEfWB9LCh3ZSxGZSk9Pnt0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLmJvdHRvbVtGZV09d2UsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy50b3BbRmVdPXdl''@;'; put 'put ''fSksdGhpcy5tYWluLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0aW9uSGFuZGxlcy50b3ApLHRoaXMubWFpbi5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tKSx0aGlzLm1haW4uYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcEhpdEFyZWEpLHRoaXMu''@;'; put 'put ''bWFpbi5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tSGl0QXJlYSl9aXNQYXJ0UmFuZ2UobCxhKXtjb25zdCBkPXRoaXMud290LnNlbGVjdGlvbk1hbmFnZXIuZ2V0QXJlYVNlbGVjdGlvbigpO3JldHVybiEoIWQuY2VsbFJhbmdlfHxsPT09ZC5jZWxsUmFuZ2UudG8u''@;'; put 'put ''cm93JiZhPT09ZC5jZWxsUmFuZ2UudG8uY29sKX11cGRhdGVNdWx0aXBsZVNlbGVjdGlvbkhhbmRsZXNQb3NpdGlvbihsLGEsZCxoLGYsdil7Y29uc3QgRD10aGlzLndvdC53dFNldHRpbmdzLmdldFNldHRpbmcoInJ0bE1vZGUiKT8icmlnaHQiOiJsZWZ0Iix7dG9wOlUsdG9wSGl0QXJlYTp0''@;'; put 'put ''ZSxib3R0b206b2UsYm90dG9tSGl0QXJlYTp2ZX09dGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcyx3ZT1wYXJzZUludChVLmJvcmRlcldpZHRoLDEwKSxGZT1wYXJzZUludChVLndpZHRoLDEwKSxXZT1wYXJzZUludCh0ZS53aWR0aCwxMCksbnQ9dGhpcy53b3Qud3RUYWJsZS5nZXRXaWR0''@;'; put 'put ''aCgpLGR0PXRoaXMud290Lnd0VGFibGUuZ2V0SGVpZ2h0KCk7VS50b3A9YCR7cGFyc2VJbnQoZC1GZS0xLDEwKX1weGAsVVtEXT1gJHtwYXJzZUludChoLUZlLTEsMTApfXB4YCx0ZS50b3A9YCR7cGFyc2VJbnQoZC1XZS80KjMsMTApfXB4YCx0ZVtEXT1gJHtwYXJzZUludChoLVdlLzQqMywx''@;'; put 'put ''MCl9cHhgO2NvbnN0IG10PU1hdGgubWluKHBhcnNlSW50KGgrZiwxMCksbnQtRmUtMip3ZSksJHQ9TWF0aC5taW4ocGFyc2VJbnQoaCtmLVdlLzQsMTApLG50LVdlLTIqd2UpO29lW0RdPWAke210fXB4YCx2ZVtEXT1gJHskdH1weGA7Y29uc3QgenQ9TWF0aC5taW4ocGFyc2VJbnQoZCt2LDEw''@;'; put 'put ''KSxkdC1GZS0yKndlKSx5bj1NYXRoLm1pbihwYXJzZUludChkK3YtV2UvNCwxMCksZHQtV2UtMip3ZSk7b2UudG9wPWAke3p0fXB4YCx2ZS50b3A9YCR7eW59cHhgLHRoaXMuc2V0dGluZ3MuYm9yZGVyLmNvcm5lclZpc2libGUmJnRoaXMuc2V0dGluZ3MuYm9yZGVyLmNvcm5lclZpc2libGUo''@;'; put 'put ''KT8oVS5kaXNwbGF5PSJibG9jayIsdGUuZGlzcGxheT0iYmxvY2siLHRoaXMuaXNQYXJ0UmFuZ2UobCxhKT8ob2UuZGlzcGxheT0ibm9uZSIsdmUuZGlzcGxheT0ibm9uZSIpOihvZS5kaXNwbGF5PSJibG9jayIsdmUuZGlzcGxheT0iYmxvY2siKSk6KFUuZGlzcGxheT0ibm9uZSIsb2UuZGlz''@;'; put 'put ''cGxheT0ibm9uZSIsdGUuZGlzcGxheT0ibm9uZSIsdmUuZGlzcGxheT0ibm9uZSIpLGw9PT10aGlzLndvdC53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpfHxhPT09dGhpcy53b3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpPyhVLnpJbmRl''@;'; put 'put ''eD0iOTk5OSIsdGUuekluZGV4PSI5OTk5Iik6KFUuekluZGV4PSIiLHRlLnpJbmRleD0iIil9YXBwZWFyKGwpe2lmKHRoaXMuZGlzYWJsZWQpcmV0dXJuO2xldFthLGQsaCxmXT1sO2lmKGE8MCYmaDwwfHxkPDAmJmY8MClyZXR1cm4gdm9pZCB0aGlzLmRpc2FwcGVhcigpO2NvbnN0e3d0VGFi''@;'; put 'put ''bGU6dixyb290RG9jdW1lbnQ6TSxyb290V2luZG93OkR9PXRoaXMud290LFU9YSE9PWh8fGQhPT1mLHRlPXRoaXMud290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic3R5bGVzSGFuZGxlciIpLmlzQ2xhc3NpY1RoZW1lKCksb2U9di5nZXRGaXJzdFJlbmRlcmVkUm93KCksdmU9di5nZXRMYXN0''@;'; put 'put ''UmVuZGVyZWRSb3coKSx3ZT12LmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKSxGZT12LmdldExhc3RSZW5kZXJlZENvbHVtbigpO2lmKHdlPDAmJkZlPDB8fG9lPDAmJnZlPDApcmV0dXJuIHZvaWQgdGhpcy5kaXNhcHBlYXIoKTtsZXQgV2U7aWYoVSl7aWYoZD1NYXRoLm1heChkLHdlKSxmPU1h''@;'; put 'put ''dGgubWluKGYsRmUpLGE9TWF0aC5tYXgoYSxvZSksaD1NYXRoLm1pbihoLHZlKSxmPGR8fGg8YSlyZXR1cm4gdm9pZCB0aGlzLmRpc2FwcGVhcigpO1dlPXYuZ2V0Q2VsbCh0aGlzLndvdC5jcmVhdGVDZWxsQ29vcmRzKGEsZCkpfWVsc2UgaWYoV2U9di5nZXRDZWxsKHRoaXMud290LmNyZWF0''@;'; put 'put ''ZUNlbGxDb29yZHMoYSxkKSksIUU0KFdlKSlyZXR1cm4gdm9pZCB0aGlzLmRpc2FwcGVhcigpO2NvbnN0IG50PVU/di5nZXRDZWxsKHRoaXMud290LmNyZWF0ZUNlbGxDb29yZHMoaCxmKSk6V2UsZHQ9ZDEoV2UpLG10PVU/ZDEobnQpOmR0LCR0PWQxKHYuVEFCTEUpLHp0PWR0LnRvcCx5bj1k''@;'; put 'put ''dC5sZWZ0LGduPXRoaXMud290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpO2xldCB3bj0wLFJuPTA7aWYoZ24pe2NvbnN0ICRyPV91KHYuVEFCTEUpLGJpPV91KFdlKTtSbj15bitiaS1tdC5sZWZ0LHduPUQuaW5uZXJXaWR0aC15bi1iaS0oRC5pbm5lcldpZHRoLSR0LmxlZnQt''@;'; put 'put ''JHIpLTF9ZWxzZSBSbj1tdC5sZWZ0K191KG50KS15bix3bj15bi0kdC5sZWZ0LTE7aWYodGhpcy5pc0VudGlyZUNvbHVtblNlbGVjdGVkKGEsaCkpe2NvbnN0IGJpPXRoaXMuZ2V0RGltZW5zaW9uc0Zyb21IZWFkZXIoImNvbHVtbnMiLGQsZixhLCR0KTtsZXQgTmk9bnVsbDtiaSYmKFtOaSx3''@;'; put 'put ''bixSbl09YmkpLE5pJiYoV2U9TmkpfWxldCBEcj16dC0kdC50b3AtMSxMcj1tdC50b3ArRnUobnQpLXp0O2lmKHRoaXMuaXNFbnRpcmVSb3dTZWxlY3RlZChkLGYpKXtjb25zdCBiaT10aGlzLmdldERpbWVuc2lvbnNGcm9tSGVhZGVyKCJyb3dzIixhLGgsZCwkdCk7bGV0IE5pPW51bGw7Ymkm''@;'; put 'put ''JihbTmksRHIsTHJdPWJpKSxOaSYmKFdlPU5pKX1jb25zdCBkcj1ELmdldENvbXB1dGVkU3R5bGUoV2UpO3BhcnNlSW50KGRyLmJvcmRlclRvcFdpZHRoLDEwKT4wJiYoRHIrPTEsTHI9THI+MD9Mci0xOjApLHBhcnNlSW50KGRyW2duPyJib3JkZXJSaWdodFdpZHRoIjoiYm9yZGVyTGVmdFdp''@;'; put 'put ''ZHRoIl0sMTApPjAmJih3bis9MSxSbj1Sbj4wP1JuLTE6MCk7Y29uc3QgTXI9Z24/InJpZ2h0IjoibGVmdCIsdmk9TWF0aC5jZWlsKHRoaXMuc2V0dGluZ3MuYm9yZGVyLndpZHRoLzIpO3RoaXMudG9wU3R5bGUudG9wPWAke0RyfXB4YCx0aGlzLnRvcFN0eWxlW01yXT1gJHt3bn1weGAsdGhp''@;'; put 'put ''cy50b3BTdHlsZS53aWR0aD1gJHtSbit2aX1weGAsdGhpcy50b3BTdHlsZS5kaXNwbGF5PSJibG9jayIsdGhpcy5zdGFydFN0eWxlLnRvcD1gJHtEcn1weGAsdGhpcy5zdGFydFN0eWxlW01yXT1gJHt3bn1weGAsdGhpcy5zdGFydFN0eWxlLmhlaWdodD1gJHtMcit2aX1weGAsdGhpcy5zdGFy''@;'; put 'put ''dFN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLmJvdHRvbVN0eWxlLnRvcD1gJHtEcitMci1wYXJzZUludCh0aGlzLmJvdHRvbVN0eWxlLmhlaWdodCwxMCkrdml9cHhgLHRoaXMuYm90dG9tU3R5bGVbTXJdPWAke3dufXB4YCx0aGlzLmJvdHRvbVN0eWxlLndpZHRoPWAke1JuK3ZpfXB4YCx0''@;'; put 'put ''aGlzLmJvdHRvbVN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLmVuZFN0eWxlLnRvcD1gJHtEcn1weGAsdGhpcy5lbmRTdHlsZVtNcl09YCR7d24rUm4tcGFyc2VJbnQodGhpcy5lbmRTdHlsZS53aWR0aCwxMCkrdml9cHhgLHRoaXMuZW5kU3R5bGUuaGVpZ2h0PWAke0xyK3ZpfXB4YCx0aGlz''@;'; put 'put ''LmVuZFN0eWxlLmRpc3BsYXk9ImJsb2NrIjtsZXQgTm49dGhpcy5zZXR0aW5ncy5ib3JkZXIuY29ybmVyVmlzaWJsZTtObj0iZnVuY3Rpb24iPT10eXBlb2YgTm4/Tm4odGhpcy5zZXR0aW5ncy5sYXllckxldmVsKTpObjtjb25zdCBCcj10aGlzLndvdC5nZXRTZXR0aW5nKCJvbk1vZGlmeUdl''@;'; put 'put ''dENlbGxDb29yZHMiLGgsZiwhMSwicmVuZGVyIik7bGV0W2VyLFRyXT1baCxmXTtpZihCciYmQXJyYXkuaXNBcnJheShCcikmJihbLCxlcixUcl09QnIpLFgzKCl8fCFObnx8dGhpcy5pc1BhcnRSYW5nZShlcixUcikpdGhpcy5jb3JuZXJTdHlsZS5kaXNwbGF5PSJub25lIjtlbHNle3RoaXMu''@;'; put 'put ''Y29ybmVyU3R5bGUudG9wPURyK0xyK3RoaXMuY29ybmVyQ2VudGVyUG9pbnRPZmZzZXQtdGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGgrInB4Iix0aGlzLmNvcm5lclN0eWxlW01yXT13bitSbit0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0LXRoaXMuY29ybmVyRGVmYXVs''@;'; put 'put ''dFN0eWxlLmJvcmRlcldpZHRoKyJweCIsdGhpcy5jb3JuZXJTdHlsZS5ib3JkZXJSaWdodFdpZHRoPWAke3RoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlcldpZHRofXB4YCx0aGlzLmNvcm5lclN0eWxlLmJvcmRlckxlZnRXaWR0aD1gJHt0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3Jk''@;'; put 'put ''ZXJXaWR0aH1weGAsdGhpcy5jb3JuZXJTdHlsZS5ib3JkZXJCb3R0b21XaWR0aD1gJHt0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJXaWR0aH1weGAsdGhpcy5jb3JuZXJTdHlsZS53aWR0aD10aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aCx0aGlzLmNvcm5lclN0eWxlLmRpc3Bs''@;'; put 'put ''YXk9Im5vbmUiO2xldCAkcj1Odyh2LlRBQkxFKTtjb25zdCBiaT0kcj09PUQ7YmkmJigkcj1NLmRvY3VtZW50RWxlbWVudCk7Y29uc3QgTmk9cGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGgsMTApLTEsdmE9TWF0aC5jZWlsKHBhcnNlSW50KHRoaXMuY29ybmVy''@;'; put 'put ''RGVmYXVsdFN0eWxlLndpZHRoLDEwKS8yKSx4YT1NYXRoLmNlaWwocGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuaGVpZ2h0LDEwKS8yKTtpZihmPT09dGhpcy53b3QuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiktMSl7Y29uc3QgcGE9Ymk/bnQuZ2V0Qm91bmRpbmdDbGllbnRS''@;'; put 'put ''ZWN0KCkubGVmdDpudC5vZmZzZXRMZWZ0O2xldCBacj0hMSx5dD0wO2lmKGduPyh5dD1wYS1wYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aCwxMCkvMixacj15dDwwKTooeXQ9cGErX3UobnQpK3BhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRoLDEwKS8y''@;'; put 'put ''LFpyPXl0Pj1lSigkcikpLFpyKXtjb25zdCBOdD1NYXRoLmZsb29yKHduK1JuK3RoaXMuY29ybmVyQ2VudGVyUG9pbnRPZmZzZXQtdmEtTmkpO3RlPyh0aGlzLmNvcm5lclN0eWxlW01yXT1gJHtOdH1weGAsdGhpcy5jb3JuZXJTdHlsZVtnbj8iYm9yZGVyTGVmdFdpZHRoIjoiYm9yZGVyUmln''@;'; put 'put ''aHRXaWR0aCJdPTApOnRoaXMuY29ybmVyU3R5bGVbTXJdPU50LTErInB4In19aWYoaD09PXRoaXMud290LmdldFNldHRpbmcoInRvdGFsUm93cyIpLTEmJihiaT9udC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A6bnQub2Zmc2V0VG9wKStGdShudCkrcGFyc2VJbnQodGhpcy5jb3JuZXJE''@;'; put 'put ''ZWZhdWx0U3R5bGUuaGVpZ2h0LDEwKS8yPj1Wdygkcikpe2NvbnN0IE50PU1hdGguZmxvb3IoRHIrTHIrdGhpcy5jb3JuZXJDZW50ZXJQb2ludE9mZnNldC14YS1OaSk7dGU/KHRoaXMuY29ybmVyU3R5bGUudG9wPWAke050fXB4YCx0aGlzLmNvcm5lclN0eWxlLmJvcmRlckJvdHRvbVdpZHRo''@;'; put 'put ''PTApOnRoaXMuY29ybmVyU3R5bGUudG9wPU50LTErInB4In10aGlzLmNvcm5lclN0eWxlLmRpc3BsYXk9ImJsb2NrIn1YMygpJiZ0aGlzLmluc3RhbmNlLmdldFNldHRpbmcoImlzRGF0YVZpZXdJbnN0YW5jZSIpJiZ0aGlzLnVwZGF0ZU11bHRpcGxlU2VsZWN0aW9uSGFuZGxlc1Bvc2l0aW9u''@;'; put 'put ''KGgsZixEcix3bixSbixMcil9aXNFbnRpcmVDb2x1bW5TZWxlY3RlZChsLGEpe3JldHVybiBsPT09dGhpcy53b3Qud3RUYWJsZS5nZXRGaXJzdFJlbmRlcmVkUm93KCkmJmE9PT10aGlzLndvdC53dFRhYmxlLmdldExhc3RSZW5kZXJlZFJvdygpfWlzRW50aXJlUm93U2VsZWN0ZWQobCxhKXty''@;'; put 'put ''ZXR1cm4gbD09PXRoaXMud290Lnd0VGFibGUuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpJiZhPT09dGhpcy53b3Qud3RUYWJsZS5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKX1nZXREaW1lbnNpb25zRnJvbUhlYWRlcihsLGEsZCxoLGYpe2NvbnN0e3d0VGFibGU6dn09dGhpcy53b3QsTT12Lnd0''@;'; put 'put ''Um9vdEVsZW1lbnQucGFyZW50Tm9kZTtsZXQgRD1udWxsLFU9bnVsbCx0ZT1udWxsLG9lPW51bGwsdmU9bnVsbCx3ZT1udWxsLEZlPW51bGwsV2U9bnVsbDtzd2l0Y2gobCl7Y2FzZSJyb3dzIjpEPWZ1bmN0aW9uKCl7cmV0dXJuIHYuZ2V0Um93SGVhZGVyKC4uLmFyZ3VtZW50cyl9LFU9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gRnUoLi4uYXJndW1lbnRzKX0sdGU9Imh0X19zZWxlY3Rpb24tLXJvd3MiLHdlPSJ0b3AiO2JyZWFrO2Nhc2UiY29sdW1ucyI6RD1mdW5jdGlvbigpe3JldHVybiB2LmdldENvbHVtbkhlYWRlciguLi5hcmd1bWVudHMpfSxVPWZ1bmN0aW9uKCl7cmV0dXJuIF91KC4u''@;'; put 'put ''LmFyZ3VtZW50cyl9LHRlPSJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIix3ZT0ibGVmdCJ9aWYoTS5jbGFzc0xpc3QuY29udGFpbnModGUpKXtjb25zdCBudD10aGlzLndvdC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoO2lmKEZlPUQoYSxudC1oKSxXZT1EKGQsbnQtaCksIUZl''@;'; put 'put ''fHwhV2UpcmV0dXJuITE7Y29uc3QgZHQ9ZDEoRmUpLG10PWQxKFdlKTtyZXR1cm4gRmUmJldlJiYob2U9ZHRbd2VdLWZbd2VdLTEsdmU9bXRbd2VdK1UoV2UpLWR0W3dlXSksW0ZlLG9lLHZlXX1yZXR1cm4hMX1jaGFuZ2VCb3JkZXJTdHlsZShsLGEpe2NvbnN0IGQ9dGhpc1tsXS5zdHlsZSxo''@;'; put 'put ''PWFbbF07IWh8fGguaGlkZT9paSh0aGlzW2xdLCJoaWRkZW4iKTooQ28odGhpc1tsXSwiaGlkZGVuIikmJlZhKHRoaXNbbF0sImhpZGRlbiIpLGQuYmFja2dyb3VuZENvbG9yPWguY29sb3IsKCJ0b3AiPT09bHx8ImJvdHRvbSI9PT1sKSYmKGQuaGVpZ2h0PWAke2gud2lkdGh9cHhgKSwoInN0''@;'; put 'put ''YXJ0Ij09PWx8fCJlbmQiPT09bCkmJihkLndpZHRoPWAke2gud2lkdGh9cHhgKSl9Y2hhbmdlQm9yZGVyVG9EZWZhdWx0U3R5bGUobCl7Y29uc3QgZD10aGlzW2xdLnN0eWxlO2QuYmFja2dyb3VuZENvbG9yPSIjMDAwIixkLndpZHRoPSIxcHgiLGQuaGVpZ2h0PSIxcHgifXRvZ2dsZUhpZGRl''@;'; put 'put ''bkNsYXNzKGwsYSl7dGhpcy5jaGFuZ2VCb3JkZXJUb0RlZmF1bHRTdHlsZShsKSxhP2lpKHRoaXNbbF0sImhpZGRlbiIpOlZhKHRoaXNbbF0sImhpZGRlbiIpfWRpc2FwcGVhcigpe3RoaXMudG9wU3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5ib3R0b21TdHlsZS5kaXNwbGF5PSJub25lIix0''@;'; put 'put ''aGlzLnN0YXJ0U3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5lbmRTdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLmNvcm5lclN0eWxlLmRpc3BsYXk9Im5vbmUiLFgzKCkmJnRoaXMuaW5zdGFuY2UuZ2V0U2V0dGluZygiaXNEYXRhVmlld0luc3RhbmNlIikmJih0aGlzLnNlbGVjdGlvbkhhbmRs''@;'; put 'put ''ZXMuc3R5bGVzLnRvcC5kaXNwbGF5PSJub25lIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLnRvcEhpdEFyZWEuZGlzcGxheT0ibm9uZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy5ib3R0b20uZGlzcGxheT0ibm9uZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy5i''@;'; put 'put ''b3R0b21IaXRBcmVhLmRpc3BsYXk9Im5vbmUiKX1kZXN0cm95KCl7dGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveVdpdGhPd25FdmVudHNPbmx5KCksdGhpcy5tYWluLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5tYWluKX19O2Z1bmN0aW9uIEt3KGMsbCxhKXtMNWUoYyxsKSxsLnNldChj''@;'; put 'put ''LGEpfWZ1bmN0aW9uIEw1ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gbXMoYyxsKXtyZXR1cm4gYy5nZXQoS0ooYyxsKSl9ZnVuY3Rp''@;'; put 'put ''b24gTzVlKGMsbCxhKXtyZXR1cm4gYy5zZXQoS0ooYyxsKSxhKSxhfWZ1bmN0aW9uIEtKKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQg''@;'; put 'put ''aXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgVTE9bmV3IFdlYWtNYXAsX2g9bmV3IFdlYWtNYXAsWEo9bmV3IFdlYWtNYXAsY2s9bmV3IFdlYWtNYXAscUo9bmV3IFdlYWtNYXAsbHY9bmV3IFdlYWtNYXAsUDVlPW5ldyBXZWFrU2V0O2NsYXNzIFRzdHtjb25zdHJ1Y3Rvcihs''@;'; put 'put ''KXsoZnVuY3Rpb24gRXN0KGMsbCl7TDVlKGMsbCksbC5hZGQoYyl9KSh0aGlzLFA1ZSksS3codGhpcyxVMSx2b2lkIDApLEt3KHRoaXMsX2gsdm9pZCAwKSxLdyh0aGlzLFhKLG5ldyB3c3QpLEt3KHRoaXMsY2ssbmV3IFdlYWtNYXApLEt3KHRoaXMscUosbmV3IFdlYWtTZXQpLEt3KHRoaXMs''@;'; put 'put ''bHYsbmV3IE1hcCksTzVlKF9oLHRoaXMsbCl9c2V0QWN0aXZlT3ZlcmxheShsKXtyZXR1cm4gTzVlKFUxLHRoaXMsbCksbXMoWEosdGhpcykuc2V0QWN0aXZlT3ZlcmxheShtcyhVMSx0aGlzKSksbXMoY2ssdGhpcykuaGFzKG1zKFUxLHRoaXMpKXx8bXMoY2ssdGhpcykuc2V0KG1zKFUxLHRo''@;'; put 'put ''aXMpLG5ldyBTZXQpLHRoaXN9Z2V0Rm9jdXNTZWxlY3Rpb24oKXtyZXR1cm4gbnVsbCE9PW1zKF9oLHRoaXMpP21zKF9oLHRoaXMpLmdldEZvY3VzKCk6bnVsbH1nZXRBcmVhU2VsZWN0aW9uKCl7cmV0dXJuIG51bGwhPT1tcyhfaCx0aGlzKT9tcyhfaCx0aGlzKS5jcmVhdGVMYXllcmVkQXJl''@;'; put 'put ''YSgpOm51bGx9Z2V0Qm9yZGVySW5zdGFuY2UobCl7aWYoIWwuc2V0dGluZ3MuYm9yZGVyKXJldHVybiBudWxsO2lmKG1zKGx2LHRoaXMpLmhhcyhsKSl7Y29uc3QgZD1tcyhsdix0aGlzKS5nZXQobCk7aWYoZC5oYXMobXMoVTEsdGhpcykpKXJldHVybiBkLmdldChtcyhVMSx0aGlzKSk7Y29u''@;'; put 'put ''c3QgaD1uZXcgUjVlKG1zKFUxLHRoaXMpLGwuc2V0dGluZ3MpO3JldHVybiBkLnNldChtcyhVMSx0aGlzKSxoKSxofWNvbnN0IGE9bmV3IFI1ZShtcyhVMSx0aGlzKSxsLnNldHRpbmdzKTtyZXR1cm4gbXMobHYsdGhpcykuc2V0KGwsbmV3IE1hcChbW21zKFUxLHRoaXMpLGFdXSkpLGF9Z2V0''@;'; put 'put ''Qm9yZGVySW5zdGFuY2VzKGwpe3ZhciBhLGQ7cmV0dXJuIEFycmF5LmZyb20obnVsbCE9PShhPW51bGw9PT0oZD1tcyhsdix0aGlzKS5nZXQobCkpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLnZhbHVlcygpKSYmdm9pZCAwIT09YT9hOltdKX1kZXN0cm95Qm9yZGVycyhsKXttcyhsdix0aGlzKS5n''@;'; put 'put ''ZXQobCkuZm9yRWFjaChhPT5hLmRlc3Ryb3koKSksbXMobHYsdGhpcykuZGVsZXRlKGwpfXJlbmRlcihsKXtpZihudWxsPT09bXMoX2gsdGhpcykpcmV0dXJuO2wmJktKKFA1ZSx0aGlzLEFzdCkuY2FsbCh0aGlzKTtjb25zdCBhPUFycmF5LmZyb20obXMoX2gsdGhpcykpLGQ9bmV3IE1hcCxo''@;'; put 'put ''PW5ldyBNYXA7Zm9yKGxldCBmPTA7ZjxhLmxlbmd0aDtmKyspe2NvbnN0IHY9YVtmXSx7Y2xhc3NOYW1lOk0saGVhZGVyQXR0cmlidXRlczpELGNyZWF0ZUxheWVyczpVLHNlbGVjdGlvblR5cGU6dGV9PXYuc2V0dGluZ3M7bXMocUosdGhpcykuaGFzKHYpfHwobXMocUosdGhpcykuYWRkKHYp''@;'; put 'put ''LHYuYWRkTG9jYWxIb29rKCJkZXN0cm95IiwoKT0+dGhpcy5kZXN0cm95Qm9yZGVycyh2KSkpO2NvbnN0IG9lPXRoaXMuZ2V0Qm9yZGVySW5zdGFuY2Uodik7aWYodi5pc0VtcHR5KCkpe29lPy5kaXNhcHBlYXIoKTtjb250aW51ZX1NJiZtcyhYSix0aGlzKS5zZXRBY3RpdmVTZWxlY3Rpb24o''@;'; put 'put ''dikuc2NhbigpLmZvckVhY2goRmU9PntpZihkLmhhcyhGZSkpe2NvbnN0IFdlPWQuZ2V0KEZlKTtXZS5oYXMoTSkmJiEwPT09VT9XZS5zZXQoTSxXZS5nZXQoTSkrMSk6V2Uuc2V0KE0sMSl9ZWxzZSBkLnNldChGZSxuZXcgTWFwKFtbTSwxXV0pKTtEJiYoaC5oYXMoRmUpfHxoLnNldChGZSxb''@;'; put 'put ''XSksIlRIIj09PUZlLm5vZGVOYW1lJiZoLmdldChGZSkucHVzaCguLi5EKSl9KTtjb25zdCB2ZT12LmdldENvcm5lcnMoKTttcyhVMSx0aGlzKS5nZXRTZXR0aW5nKCJvbkJlZm9yZURyYXdCb3JkZXJzIix2ZSx0ZSksb2U/LmFwcGVhcih2ZSl9ZC5mb3JFYWNoKChmLHYpPT57dmFyIE07Y29u''@;'; put 'put ''c3QgRD1BcnJheS5mcm9tKGYpLm1hcChVPT57bGV0W3RlLG9lXT1VO3JldHVybiAxPT09b2U/dGU6W3RlLC4uLkFycmF5LmZyb20oe2xlbmd0aDpvZS0xfSwodmUsd2UpPT5gJHt0ZX0tJHt3ZSsxfWApXX0pLmZsYXQoKTtELmZvckVhY2goVT0+bXMoY2ssdGhpcykuZ2V0KG1zKFUxLHRoaXMp''@;'; put 'put ''KS5hZGQoVSkpLGlpKHYsRCksIlREIj09PXYubm9kZU5hbWUmJkFycmF5LmlzQXJyYXkobnVsbD09PShNPW1zKF9oLHRoaXMpLm9wdGlvbnMpfHx2b2lkIDA9PT1NP3ZvaWQgMDpNLmNlbGxBdHRyaWJ1dGVzKSYmWmEodixtcyhfaCx0aGlzKS5vcHRpb25zLmNlbGxBdHRyaWJ1dGVzKX0pLEFy''@;'; put 'put ''cmF5LmZyb20oaC5rZXlzKCkpLmZvckVhY2goZj0+e1phKGYsWy4uLmguZ2V0KGYpXSl9KX19ZnVuY3Rpb24gQXN0KCl7Y29uc3QgYz1tcyhjayx0aGlzKS5nZXQobXMoVTEsdGhpcykpLGw9bXMoVTEsdGhpcykud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbkJlZm9yZVJlbW92ZUNlbGxDbGFz''@;'; put 'put ''c05hbWVzIik7aWYoQXJyYXkuaXNBcnJheShsKSlmb3IobGV0IGE9MDthPGwubGVuZ3RoO2ErKyljLmFkZChsW2FdKTtjLmZvckVhY2goYT0+e3ZhciBkLGg7Y29uc3QgZj1tcyhVMSx0aGlzKS53dFRhYmxlLlRBQkxFLnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke2F9YCk7bGV0IHY9W107QXJyYXku''@;'; put 'put ''aXNBcnJheShudWxsPT09KGQ9bXMoX2gsdGhpcykub3B0aW9ucyl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuY2VsbEF0dHJpYnV0ZXMpJiYodj1tcyhfaCx0aGlzKS5vcHRpb25zLmNlbGxBdHRyaWJ1dGVzLm1hcChNPT5NWzBdKSksQXJyYXkuaXNBcnJheShudWxsPT09KGg9bXMoX2gsdGhpcyku''@;'; put 'put ''b3B0aW9ucyl8fHZvaWQgMD09PWg/dm9pZCAwOmguaGVhZGVyQXR0cmlidXRlcykmJih2PVsuLi52LC4uLm1zKF9oLHRoaXMpLm9wdGlvbnMuaGVhZGVyQXR0cmlidXRlcy5tYXAoTT0+TVswXSldKTtmb3IobGV0IE09MCxEPWYubGVuZ3RoO008RDtNKyspVmEoZltNXSxhKSxNNChmW01dLHYp''@;'; put 'put ''fSksYy5jbGVhcigpfWNsYXNzIGtzdCBleHRlbmRzIGpKe2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxuZXcgQm90KGEpKTtjb25zdCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmYWNhZGUiLHRoaXMpO3RoaXMud3RUYWJsZT1uZXcgam90KHRoaXMuZ2V0VGFibGVEYW8oKSxkLHRo''@;'; put 'put ''aXMuZG9tQmluZGluZ3MsdGhpcy53dFNldHRpbmdzKSx0aGlzLnd0Vmlld3BvcnQ9bmV3IGJzdCh0aGlzLmdldFZpZXdwb3J0RGFvKCksdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MsdGhpcy5ldmVudE1hbmFnZXIsdGhpcy53dFRhYmxlKSx0aGlzLnNlbGVjdGlvbk1hbmFnZXI9''@;'; put 'put ''bmV3IFRzdCh0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2VsZWN0aW9ucyIpKSx0aGlzLnd0RXZlbnQ9bmV3IFdnZShkLHRoaXMuZG9tQmluZGluZ3MsdGhpcy53dFNldHRpbmdzLHRoaXMuZXZlbnRNYW5hZ2VyLHRoaXMud3RUYWJsZSx0aGlzLnNlbGVjdGlvbk1hbmFnZXIpLHRoaXMu''@;'; put 'put ''d3RPdmVybGF5cz1uZXcgSG90KHRoaXMsZCx0aGlzLmRvbUJpbmRpbmdzLHRoaXMud3RTZXR0aW5ncyx0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnd0VGFibGUpLHRoaXMuZXhwb3J0U2V0dGluZ3NBc0NsYXNzTmFtZXMoKSx0aGlzLmZpbmRPcmlnaW5hbEhlYWRlcnMoKX1leHBvcnRTZXR0aW5n''@;'; put 'put ''c0FzQ2xhc3NOYW1lcygpe2NvbnN0IGE9W10sZD1bXTthcyh7cm93SGVhZGVyczoiaHRSb3dIZWFkZXJzIixjb2x1bW5IZWFkZXJzOiJodENvbHVtbkhlYWRlcnMifSwoaCxmKT0+e3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKGYpLmxlbmd0aCYmZC5wdXNoKGgpLGEucHVzaChoKX0pLFZh''@;'; put 'put ''KHRoaXMud3RUYWJsZS53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUsYSksaWkodGhpcy53dFRhYmxlLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSxkKX1nZXRPdmVybGF5QnlOYW1lKGwpe3ZhciBhO2lmKCFuNWUuaW5jbHVkZXMobCkpcmV0dXJuIG51bGw7Y29uc3QgZD1sLnJlcGxhY2UoL18o''@;'; put 'put ''W2Etel0pL2csaD0+aFsxXS50b1VwcGVyQ2FzZSgpKTtyZXR1cm4gbnVsbCE9PShhPXRoaXMud3RPdmVybGF5c1tgJHtkfU92ZXJsYXlgXSkmJnZvaWQgMCE9PWE/YTpudWxsfWdldFZpZXdwb3J0RGFvKCl7Y29uc3QgbD10aGlzO3JldHVybntnZXQgd290KCl7cmV0dXJuIGx9LGdldCB0b3BP''@;'; put 'put ''dmVybGF5VHJpbW1pbmdDb250YWluZXIoKXtyZXR1cm4gbC53dE92ZXJsYXlzLnRvcE92ZXJsYXkudHJpbW1pbmdDb250YWluZXJ9LGdldCBpbmxpbmVTdGFydE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcigpe3JldHVybiBsLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LnRyaW1taW5n''@;'; put 'put ''Q29udGFpbmVyfSxnZXQgdG9wU2Nyb2xsUG9zaXRpb24oKXtyZXR1cm4gbC53dE92ZXJsYXlzLnRvcE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKX0sZ2V0IHRvcFBhcmVudE9mZnNldCgpe3JldHVybiBsLnd0T3ZlcmxheXMudG9wT3ZlcmxheS5nZXRUYWJsZVBhcmVudE9mZnNldCgpfSxn''@;'; put 'put ''ZXQgaW5saW5lU3RhcnRTY3JvbGxQb3NpdGlvbigpe3JldHVybiBsLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCl9LGdldCBpbmxpbmVTdGFydFBhcmVudE9mZnNldCgpe3JldHVybiBsLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmdldFRh''@;'; put 'put ''YmxlUGFyZW50T2Zmc2V0KCl9LGdldCB0b3BPdmVybGF5KCl7cmV0dXJuIGwud3RPdmVybGF5cy50b3BPdmVybGF5fSxnZXQgaW5saW5lU3RhcnRPdmVybGF5KCl7cmV0dXJuIGwud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXl9LGdldCBib3R0b21PdmVybGF5KCl7cmV0dXJuIGwud3RP''@;'; put 'put ''dmVybGF5cy5ib3R0b21PdmVybGF5fX19fWNsYXNzIEpKe2NvbnN0cnVjdG9yKGwpe2wgaW5zdGFuY2VvZiBqSj90aGlzLl93b3Q9bDp0aGlzLl9pbml0RnJvbVNldHRpbmdzKGwpfV9pbml0RnJvbVNldHRpbmdzKGwpe2wuZmFjYWRlPWE9Pntjb25zdCBkPW5ldyBKSihhKTtyZXR1cm4oKT0+''@;'; put 'put ''ZH0sdGhpcy5fd290PW5ldyBrc3QobC50YWJsZSxsKX1nZXQgZ3VpZCgpe3JldHVybiB0aGlzLl93b3QuZ3VpZH1nZXQgcm9vdERvY3VtZW50KCl7cmV0dXJuIHRoaXMuX3dvdC5kb21CaW5kaW5ncy5yb290RG9jdW1lbnR9Z2V0IHJvb3RXaW5kb3coKXtyZXR1cm4gdGhpcy5fd290LmRvbUJp''@;'; put 'put ''bmRpbmdzLnJvb3RXaW5kb3d9Z2V0IHd0U2V0dGluZ3MoKXtyZXR1cm4gdGhpcy5fd290Lnd0U2V0dGluZ3N9Z2V0IGNsb25lU291cmNlKCl7cmV0dXJuIHRoaXMuX3dvdC5jbG9uZVNvdXJjZX1nZXQgY2xvbmVPdmVybGF5KCl7cmV0dXJuIHRoaXMuX3dvdC5jbG9uZU92ZXJsYXl9Z2V0IHNl''@;'; put 'put ''bGVjdGlvbk1hbmFnZXIoKXtyZXR1cm4gdGhpcy5fd290LnNlbGVjdGlvbk1hbmFnZXJ9Z2V0IHd0Vmlld3BvcnQoKXtyZXR1cm4gdGhpcy5fd290Lnd0Vmlld3BvcnR9Z2V0IHd0T3ZlcmxheXMoKXtyZXR1cm4gdGhpcy5fd290Lnd0T3ZlcmxheXN9Z2V0IHd0VGFibGUoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fd290Lnd0VGFibGV9Z2V0IHd0RXZlbnQoKXtyZXR1cm4gdGhpcy5fd290Lnd0RXZlbnR9Z2V0IHd0U2Nyb2xsKCl7cmV0dXJuIHRoaXMuX3dvdC53dFNjcm9sbH1nZXQgZHJhd24oKXtyZXR1cm4gdGhpcy5fd290LmRyYXdufXNldCBkcmF3bihsKXt0aGlzLl93b3QuZHJhd249bH1nZXQg''@;'; put 'put ''YWN0aXZlT3ZlcmxheU5hbWUoKXtyZXR1cm4gdGhpcy5fd290LmFjdGl2ZU92ZXJsYXlOYW1lfWdldCBkcmF3SW50ZXJydXB0ZWQoKXtyZXR1cm4gdGhpcy5fd290LmRyYXdJbnRlcnJ1cHRlZH1zZXQgZHJhd0ludGVycnVwdGVkKGwpe3RoaXMuX3dvdC5kcmF3SW50ZXJydXB0ZWQ9bH1nZXQg''@;'; put 'put ''bGFzdE1vdXNlT3Zlcigpe3JldHVybiB0aGlzLl93b3QubGFzdE1vdXNlT3Zlcn1zZXQgbGFzdE1vdXNlT3ZlcihsKXt0aGlzLl93b3QubGFzdE1vdXNlT3Zlcj1sfWdldCBtb21lbnR1bVNjcm9sbGluZygpe3JldHVybiB0aGlzLl93b3QubW9tZW50dW1TY3JvbGxpbmd9c2V0IG1vbWVudHVt''@;'; put 'put ''U2Nyb2xsaW5nKGwpe3RoaXMuX3dvdC5tb21lbnR1bVNjcm9sbGluZz1sfWdldCB0b3VjaEFwcGxpZWQoKXtyZXR1cm4gdGhpcy5fd290LnRvdWNoQXBwbGllZH1zZXQgdG91Y2hBcHBsaWVkKGwpe3RoaXMuX3dvdC50b3VjaEFwcGxpZWQ9bH1nZXQgZG9tQmluZGluZ3MoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fd290LmRvbUJpbmRpbmdzfWdldCBldmVudExpc3RlbmVycygpe3JldHVybiB0aGlzLl93b3QuZXZlbnRMaXN0ZW5lcnN9c2V0IGV2ZW50TGlzdGVuZXJzKGwpe3RoaXMuX3dvdC5ldmVudExpc3RlbmVycz1sfWdldCBldmVudE1hbmFnZXIoKXtyZXR1cm4gdGhpcy5fd290LmV2ZW50TWFu''@;'; put 'put ''YWdlcn1jcmVhdGVDZWxsQ29vcmRzKGwsYSl7cmV0dXJuIHRoaXMuX3dvdC5jcmVhdGVDZWxsQ29vcmRzKGwsYSl9Y3JlYXRlQ2VsbFJhbmdlKGwsYSxkKXtyZXR1cm4gdGhpcy5fd290LmNyZWF0ZUNlbGxSYW5nZShsLGEsZCl9ZHJhdygpe3JldHVybiB0aGlzLl93b3QuZHJhdyhhcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKSx0aGlzfWdldENlbGwobCl7cmV0dXJuIHRoaXMuX3dvdC5nZXRDZWxsKGwsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSl9c2Nyb2xsVmlld3BvcnQo''@;'; put 'put ''bCxhLGQpe3JldHVybiB0aGlzLl93b3Quc2Nyb2xsVmlld3BvcnQobCxhLGQpfXNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwsYSl7cmV0dXJuIHRoaXMuX3dvdC5zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEpfXNjcm9sbFZpZXdwb3J0VmVydGljYWxseShsLGEpe3JldHVybiB0''@;'; put 'put ''aGlzLl93b3Quc2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSl9Z2V0Vmlld3BvcnQoKXtyZXR1cm4gdGhpcy5fd290LmdldFZpZXdwb3J0KCl9Z2V0T3ZlcmxheU5hbWUoKXtyZXR1cm4gdGhpcy5fd290LmNsb25lT3ZlcmxheT90aGlzLl93b3QuY2xvbmVPdmVybGF5LnR5cGU6Im1hc3Rl''@;'; put 'put ''ciJ9Z2V0T3ZlcmxheUJ5TmFtZShsKXtyZXR1cm4gdGhpcy5fd290LmdldE92ZXJsYXlCeU5hbWUobCl9ZXhwb3J0U2V0dGluZ3NBc0NsYXNzTmFtZXMoKXtyZXR1cm4gdGhpcy5fd290LmV4cG9ydFNldHRpbmdzQXNDbGFzc05hbWVzKCl9dXBkYXRlKGwsYSl7cmV0dXJuIHRoaXMuX3dvdC53''@;'; put 'put ''dFNldHRpbmdzLnVwZGF0ZShsLGEpLHRoaXN9Z2V0U2V0dGluZyhsLGEsZCxoLGYpe3JldHVybiB0aGlzLl93b3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKGwsYSxkLGgsZil9aGFzU2V0dGluZyhsKXtyZXR1cm4gdGhpcy5fd290Lnd0U2V0dGluZ3MuaGFzU2V0dGluZyhsKX1kZXN0cm95KCl7''@;'; put 'put ''dGhpcy5fd290LmRlc3Ryb3koKX19ZnVuY3Rpb24gRjVlKGMpe2xldHtpc1NoaWZ0S2V5OmwsaXNMZWZ0Q2xpY2s6YSxpc1JpZ2h0Q2xpY2s6ZCxjb29yZHM6aCxzZWxlY3Rpb246Zixjb250cm9sbGVyOnYsY2VsbENvb3Jkc0ZhY3Rvcnk6TX09Yztjb25zdCBEPWYuaXNTZWxlY3RlZCgpP2Yu''@;'; put 'put ''Z2V0U2VsZWN0ZWRSYW5nZSgpLmN1cnJlbnQoKTpudWxsLFU9Zi5pc1NlbGVjdGVkQnlDb3JuZXIoKSx0ZT1mLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpO2lmKGYubWFya1NvdXJjZSgibW91c2UiKSxsJiZEKWgucm93Pj0wJiZoLmNvbD49MCYmIXYuY2VsbD9mLnNldFJhbmdlRW5kKGgpOihV''@;'; put 'put ''fHx0ZSkmJmgucm93Pj0wJiZoLmNvbD49MCYmIXYuY2VsbD9mLnNldFJhbmdlRW5kKE0oaC5yb3csaC5jb2wpKTpVJiZoLnJvdzwwJiYhdi5jb2x1bW4/Zi5zZXRSYW5nZUVuZChNKEQudG8ucm93LGguY29sKSk6dGUmJmguY29sPDAmJiF2LnJvdz9mLnNldFJhbmdlRW5kKE0oaC5yb3csRC50''@;'; put 'put ''by5jb2wpKTooIVUmJiF0ZSYmaC5jb2w8MHx8VSYmaC5jb2w8MCkmJiF2LnJvdz9mLnNlbGVjdFJvd3MoTWF0aC5tYXgoRC5mcm9tLnJvdywwKSxoLnJvdyxoLmNvbCk6KCFVJiYhdGUmJmgucm93PDB8fHRlJiZoLnJvdzwwKSYmIXYuY29sdW1uJiZmLnNlbGVjdENvbHVtbnMoTWF0aC5tYXgo''@;'; put 'put ''RC5mcm9tLmNvbCwwKSxoLmNvbCxoLnJvdyk7ZWxzZXtjb25zdCBvZT0hZi5pbkluU2VsZWN0aW9uKGgpLHZlPWF8fGQmJm9lO2gucm93PDAmJmguY29sPj0wJiYhdi5jb2x1bW4/dmUmJmYuc2VsZWN0Q29sdW1ucyhoLmNvbCxoLmNvbCxoLnJvdyk6aC5jb2w8MCYmaC5yb3c+PTAmJiF2LnJv''@;'; put 'put ''dz92ZSYmZi5zZWxlY3RSb3dzKGgucm93LGgucm93LGguY29sKTpoLmNvbD49MCYmaC5yb3c+PTAmJiF2LmNlbGw/dmUmJmYuc2V0UmFuZ2VTdGFydChoKTpoLmNvbDwwJiZoLnJvdzwwJiZmLnNlbGVjdEFsbCghMCwhMCx7ZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQ6ITAsZm9jdXNQb3NpdGlv''@;'; put 'put ''bjp7cm93OjAsY29sOjB9fSl9Zi5tYXJrRW5kU291cmNlKCl9ZnVuY3Rpb24gSDVlKGMpe2xldHtpc0xlZnRDbGljazpsLHNlbGVjdGlvbjphLGNlbGxSYW5nZU1hcHBlcjpkfT1jO2lmKCFsfHwibXVsdGlwbGUiIT09YS5zZXR0aW5ncy5zZWxlY3Rpb25Nb2RlKXJldHVybjtjb25zdCBoPWEu''@;'; put 'put ''Z2V0U2VsZWN0ZWRSYW5nZSgpLGY9aC5jbG9uZSgpLm1hcChNPT5kLnRvUmVuZGVyYWJsZShNKSksdj1mLmN1cnJlbnQoKTtpZihmLnNpemUoKT4xJiYhdi5pc0hlYWRlcigpJiYhYS5pc011bHRpcGxlKHYpKXtjb25zdCBNPWYuZmluZEFsbCh2KTtNLmxlbmd0aD09PWYuc2l6ZSgpPyhoLnBv''@;'; put 'put ''cCgpLGEucmVmcmVzaCgpKTpNLmxlbmd0aD4xJiYoaC5yZW1vdmVMYXllcnMoTS5tYXAoRD0+e2xldHtsYXllcjpVfT1EO3JldHVybiBVfSkpLGEucmVmcmVzaCgpKX19Y29uc3QgSXN0PW5ldyBNYXAoW1sidG91Y2hzdGFydCIsRjVlXSxbInRvdWNoZW5kIixINWVdLFsibW91c2Vkb3duIixG''@;'; put 'put ''NWVdLFsibW91c2VvdmVyIixmdW5jdGlvbiBEc3QoYyl7bGV0e2lzTGVmdENsaWNrOmwsY29vcmRzOmEsc2VsZWN0aW9uOmQsY29udHJvbGxlcjpoLGNlbGxDb29yZHNGYWN0b3J5OmZ9PWM7aWYoIWwpcmV0dXJuO2NvbnN0IHY9ZC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSxNPWQuaXNTZWxl''@;'; put 'put ''Y3RlZEJ5Q29sdW1uSGVhZGVyKCksRD1kLnRhYmxlUHJvcHMuY291bnRDb2xzKCksVT1kLnRhYmxlUHJvcHMuY291bnRSb3dzKCk7ZC5tYXJrU291cmNlKCJtb3VzZSIpLE0mJiFoLmNvbHVtbj9kLnNldFJhbmdlRW5kKGYoVS0xLGEuY29sKSk6diYmIWgucm93P2Quc2V0UmFuZ2VFbmQoZihh''@;'; put 'put ''LnJvdyxELTEpKTpoLmNlbGx8fGQuc2V0UmFuZ2VFbmQoYSksZC5tYXJrRW5kU291cmNlKCl9XSxbIm1vdXNldXAiLEg1ZV1dKTtmdW5jdGlvbiBRSihjLGwpe0lzdC5nZXQoYy50eXBlKSh7aXNTaGlmdEtleTpjLnNoaWZ0S2V5LGlzTGVmdENsaWNrOmNOKGMpfHwidG91Y2hzdGFydCI9PT1j''@;'; put 'put ''LnR5cGUsaXNSaWdodENsaWNrOkk2KGMpLC4uLmx9KX1jb25zdCBONWU9bmV3IFdlYWtNYXAsZVE9U3ltYm9sKCJyb290SW5zdGFuY2UiKTtmdW5jdGlvbiBJNChjKXtyZXR1cm4gTjVlLmhhcyhjKX1mdW5jdGlvbiBPNihjLGwsYSl7VjVlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBWNWUo''@;'; put 'put ''YyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFA2KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBQc3QoYyl7dmFyIGw9ZnVuY3Rpb24gRnN0''@;'; put 'put ''KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigi''@;'; put 'put ''QEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGws''@;'; put 'put ''e3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBIdShjLGwpe3JldHVybiBjLmdldChYdyhjLGwpKX1mdW5jdGlvbiB3aChjLGwsYSl7cmV0dXJuIGMuc2V0KFh3KGMsbCksYSksYX1mdW5jdGlvbiBYdyhjLGwsYSl7''@;'; put 'put ''aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIHRRPW5ldyBXZWFrTWFwLHhOPW5ldyBX''@;'; put 'put ''ZWFrTWFwLEVOPW5ldyBXZWFrTWFwLGI1PW5ldyBXZWFrTWFwLGVwPW5ldyBXZWFrTWFwLG5RPW5ldyBXZWFrTWFwLHJRPW5ldyBXZWFrTWFwLHF3PW5ldyBXZWFrTWFwLHVrPW5ldyBXZWFrU2V0O2Z1bmN0aW9uIEI1ZSgpe3JldHVybiBwYXJzZUludCh0aGlzLmhvdC5yb290RWxlbWVudC5n''@;'; put 'put ''ZXRBdHRyaWJ1dGUoWEgoKVswXSksMTApfWZ1bmN0aW9uIE5zdChjKXtjb25zdCBsPVh3KHVrLHRoaXMsQjVlKS5jYWxsKHRoaXMpK2M7WmEodGhpcy5ob3Qucm9vdEVsZW1lbnQsLi4uWEgobCkpfWZ1bmN0aW9uIFZzdCgpe2NvbnN0IGM9dGhpcy5ob3Qucm9vdEVsZW1lbnQ7dGhpcy5oYXNW''@;'; put 'put ''ZXJ0aWNhbFNjcm9sbCgpP2lpKGMsImh0SGFzU2Nyb2xsWSIpOlZhKGMsImh0SGFzU2Nyb2xsWSIpLHRoaXMuaXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCk/aWkoYywiaHRWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93Iik6VmEoYywiaHRWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5''@;'; put 'put ''V2luZG93IiksdGhpcy5oYXNIb3Jpem9udGFsU2Nyb2xsKCk/aWkoYywiaHRIYXNTY3JvbGxYIik6VmEoYywiaHRIYXNTY3JvbGxYIiksdGhpcy5pc0hvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdygpP2lpKGMsImh0SG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93Iik6VmEoYywi''@;'; put 'put ''aHRIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3ciKX1jb25zdCBCc3Q9Y2xhc3MgSHN0e2NvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiBPc3QoYyxsKXtWNWUoYyxsKSxsLmFkZChjKX0pKHRoaXMsdWspLFA2KHRoaXMsImhvdCIsdm9pZCAwKSxQNih0aGlzLCJldmVudE1hbmFnZXIiLHZv''@;'; put 'put ''aWQgMCksUDYodGhpcywic2V0dGluZ3MiLHZvaWQgMCksUDYodGhpcywiVEhFQUQiLHZvaWQgMCksUDYodGhpcywiVEJPRFkiLHZvaWQgMCksUDYodGhpcywiX3d0Iix2b2lkIDApLFA2KHRoaXMsImFjdGl2ZVd0Iix2b2lkIDApLE82KHRoaXMsdFEsMCksTzYodGhpcyx4TiwwKSxQNih0aGlz''@;'; put 'put ''LCJwb3N0cG9uZWRBZGp1c3RFbGVtZW50c1NpemUiLCExKSxPNih0aGlzLEVOLCExKSxPNih0aGlzLGI1LHZvaWQgMCksTzYodGhpcyxlcCx2b2lkIDApLE82KHRoaXMsblEsMCksTzYodGhpcyxyUSwwKSxPNih0aGlzLHF3LG51bGwpLHRoaXMuaG90PWwsdGhpcy5ldmVudE1hbmFnZXI9bmV3''@;'; put 'put ''IFZmKHRoaXMuaG90KSx0aGlzLnNldHRpbmdzPXRoaXMuaG90LmdldFNldHRpbmdzKCksdGhpcy5jcmVhdGVFbGVtZW50cygpLHRoaXMucmVnaXN0ZXJFdmVudHMoKSx0aGlzLmluaXRpYWxpemVXYWxrb250YWJsZSgpfXJlbmRlcigpe2lmKCF0aGlzLmhvdC5pc1JlbmRlclN1c3BlbmRlZCgp''@;'; put 'put ''KXtjb25zdCBsPXRoaXMuaG90LmZvcmNlRnVsbFJlbmRlcjt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVuZGVyIixsKSx0aGlzLl93dC5kcmF3KCFsKSxYdyh1ayx0aGlzLFZzdCkuY2FsbCh0aGlzKSx0aGlzLnBvc3Rwb25lZEFkanVzdEVsZW1lbnRzU2l6ZSYmKHRoaXMucG9zdHBvbmVk''@;'; put 'put ''QWRqdXN0RWxlbWVudHNTaXplPSExLHRoaXMuYWRqdXN0RWxlbWVudHNTaXplKCEwKSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVuZGVyIixsKSx0aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXI9ITF9fWFkanVzdEVsZW1lbnRzU2l6ZSgpe2FyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09''@;'; put 'put ''YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0/dGhpcy5fd3Qud3RPdmVybGF5cy5hZGp1c3RFbGVtZW50c1NpemUoKTp0aGlzLnBvc3Rwb25lZEFkanVzdEVsZW1lbnRzU2l6ZT0hMH1nZXRDZWxsQXRDb29yZHMobCxhKXtjb25zdCBkPXRoaXMuX3d0LmdldENlbGwobCxhKTtyZXR1cm4gZDww''@;'; put 'put ''P251bGw6ZH1zY3JvbGxWaWV3cG9ydChsLGEsZCl7cmV0dXJuIHRoaXMuX3d0LnNjcm9sbFZpZXdwb3J0KGwsYSxkKX1zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEpe3JldHVybiB0aGlzLl93dC5zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEpfXNjcm9sbFZpZXdwb3J0VmVy''@;'; put 'put ''dGljYWxseShsLGEpe3JldHVybiB0aGlzLl93dC5zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobCxhKX1jcmVhdGVFbGVtZW50cygpe2NvbnN0e3Jvb3RFbGVtZW50Omwscm9vdERvY3VtZW50OmF9PXRoaXMuaG90LGQ9bC5nZXRBdHRyaWJ1dGUoInN0eWxlIik7ZCYmbC5zZXRBdHRyaWJ1dGUo''@;'; put 'put ''ImRhdGEtb3JpZ2luYWxzdHlsZSIsZCksaWkobCwiaGFuZHNvbnRhYmxlIiksd2goZXAsdGhpcyxhLmNyZWF0ZUVsZW1lbnQoIlRBQkxFIikpLGlpKEh1KGVwLHRoaXMpLCJodENvcmUiKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnRhYmxlQ2xhc3NOYW1lJiZpaShIdShlcCx0aGlzKSx0aGlz''@;'; put 'put ''LmhvdC5nZXRTZXR0aW5ncygpLnRhYmxlQ2xhc3NOYW1lKSx0aGlzLnNldHRpbmdzLmFyaWFUYWdzJiYoWmEoSHUoZXAsdGhpcyksW1sicm9sZSIsInByZXNlbnRhdGlvbiJdXSksWmEobCxbWyJyb2xlIiwidHJlZWdyaWQiXSxHNGUoLTEpLFhIKHRoaXMuaG90LmNvdW50Q29scygpKSxbImFy''@;'; put 'put ''aWEtbXVsdGlzZWxlY3RhYmxlIiwidHJ1ZSJdXSkpLHRoaXMuVEhFQUQ9YS5jcmVhdGVFbGVtZW50KCJUSEVBRCIpLEh1KGVwLHRoaXMpLmFwcGVuZENoaWxkKHRoaXMuVEhFQUQpLHRoaXMuVEJPRFk9YS5jcmVhdGVFbGVtZW50KCJUQk9EWSIpLEh1KGVwLHRoaXMpLmFwcGVuZENoaWxkKHRo''@;'; put 'put ''aXMuVEJPRFkpLHRoaXMuaG90LnRhYmxlPUh1KGVwLHRoaXMpLHRoaXMuaG90LmNvbnRhaW5lci5pbnNlcnRCZWZvcmUoSHUoZXAsdGhpcyksdGhpcy5ob3QuY29udGFpbmVyLmZpcnN0Q2hpbGQpfXJlZ2lzdGVyRXZlbnRzKCl7Y29uc3R7cm9vdFdyYXBwZXJFbGVtZW50Omwscm9vdEVsZW1l''@;'; put 'put ''bnQ6YSxyb290RG9jdW1lbnQ6ZCxzZWxlY3Rpb246aCxyb290V2luZG93OmZ9PXRoaXMuaG90LHY9ZC5kb2N1bWVudEVsZW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZWRvd24iLEQ9Pnt3aChFTix0aGlzLCEwKSx0aGlzLmlzVGV4dFNlbGVjdGlvbkFs''@;'; put 'put ''bG93ZWQoRC50YXJnZXQpfHwobkooZiksRC5wcmV2ZW50RGVmYXVsdCgpLGYuZm9jdXMoKSl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNldXAiLCgpPT57d2goRU4sdGhpcywhMSl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1v''@;'; put 'put ''dXNlbW92ZSIsRD0+e0h1KEVOLHRoaXMpJiYhdGhpcy5pc1RleHRTZWxlY3Rpb25BbGxvd2VkKEQudGFyZ2V0KSYmKHRoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb24mJm5KKGYpLEQucHJldmVudERlZmF1bHQoKSl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHYs''@;'; put 'put ''ImtleXVwIixEPT57aC5pc0luUHJvZ3Jlc3MoKSYmIUQuc2hpZnRLZXkmJmguZmluaXNoKCl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHYsIm1vdXNldXAiLEQ9PntoLmlzSW5Qcm9ncmVzcygpJiZjTihEKSYmaC5maW5pc2goKSx3aChiNSx0aGlzLCExKTtjb25zdCBV''@;'; put 'put ''PXNOKGQuYWN0aXZlRWxlbWVudCk7R0EoZC5hY3RpdmVFbGVtZW50KSYmIVV8fChVfHwhaC5pc1NlbGVjdGVkKCkmJiFoLmlzU2VsZWN0ZWRCeUFueUhlYWRlcigpJiYhKGw/P2EpLmNvbnRhaW5zKEQudGFyZ2V0KSYmIUk2KEQpKSYmdGhpcy5ob3QudW5saXN0ZW4oKX0pLHRoaXMuZXZlbnRN''@;'; put 'put ''YW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodiwiY29udGV4dG1lbnUiLEQ9PntoLmlzSW5Qcm9ncmVzcygpJiZJNihEKSYmKGguZmluaXNoKCksd2goYjUsdGhpcywhMSkpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih2LCJ0b3VjaGVuZCIsKCk9PntoLmlzSW5Qcm9ncmVz''@;'; put 'put ''cygpJiZoLmZpbmlzaCgpLHdoKGI1LHRoaXMsITEpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih2LCJtb3VzZWRvd24iLEQ9Pntjb25zdCBVPUQudGFyZ2V0LHRlPUQueHx8RC5jbGllbnRYLG9lPUQueXx8RC5jbGllbnRZO2xldCB2ZT1ELnRhcmdldDtpZihIdShiNSx0''@;'; put 'put ''aGlzKXx8IWF8fCF0aGlzLmhvdC52aWV3KXJldHVybjtjb25zdHtob2xkZXI6d2V9PXRoaXMuX3d0Lnd0VGFibGU7aWYodmU9PT13ZSl7Y29uc3QgV2U9d3UoZCk7aWYoZC5lbGVtZW50RnJvbVBvaW50KHRlK1dlLG9lKSE9PXdlfHxkLmVsZW1lbnRGcm9tUG9pbnQodGUsb2UrV2UpIT09d2Up''@;'; put 'put ''cmV0dXJufWVsc2UgZm9yKDt2ZSE9PXY7KXtpZihudWxsPT09dmUpe2lmKEQuaXNUYXJnZXRXZWJDb21wb25lbnQpYnJlYWs7cmV0dXJufWlmKHZlPT09YSlyZXR1cm47dmU9dmUucGFyZW50Tm9kZX0oImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuc2V0dGluZ3Mub3V0c2lkZUNsaWNrRGVzZWxl''@;'; put 'put ''Y3RzP3RoaXMuc2V0dGluZ3Mub3V0c2lkZUNsaWNrRGVzZWxlY3RzKFUpOnRoaXMuc2V0dGluZ3Mub3V0c2lkZUNsaWNrRGVzZWxlY3RzKT90aGlzLmhvdC5kZXNlbGVjdENlbGwoKTp0aGlzLmhvdC5kZXN0cm95RWRpdG9yKCExLCExKX0pO2xldCBNPWc1KGYpO2Zvcig7bnVsbCE9PU07KXRo''@;'; put 'put ''aXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoTS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsImNsaWNrIiwoKT0+e3RoaXMuaG90LnVubGlzdGVuKCl9KSxNPWc1KE0pO3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoSHUoZXAsdGhpcyksInNlbGVjdHN0YXJ0IixE''@;'; put 'put ''PT57dGhpcy5zZXR0aW5ncy5mcmFnbWVudFNlbGVjdGlvbnx8R0EoRC50YXJnZXQpfHxELnByZXZlbnREZWZhdWx0KCl9KX10cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKGwpe2xldHtyb3c6YSxjb2w6ZH09bDtyZXR1cm4gdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMo''@;'; put 'put ''Li4udGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsSW5kZXgoYSxkKSl9dHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbEluZGV4KGwsYSl7bGV0IGQ9bD49MD90aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGwpOmwsaD1h''@;'; put 'put ''Pj0wP3RoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoYSk6YTtyZXR1cm4gbnVsbD09PWQmJihkPWwpLG51bGw9PT1oJiYoaD1hKSxbZCxoXX1jb3VudFJlbmRlcmFibGVJbmRleGVzKGwsYSl7Y29uc3QgZD1NYXRoLm1pbihsLmdldE5vdFRy''@;'; put 'put ''aW1tZWRJbmRleGVzTGVuZ3RoKCksYSksaD1sLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChkLTEsLTEpO3JldHVybiBudWxsPT09aD8wOmwuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChoKSsxfWNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKXtyZXR1cm4gdGhpcy5jb3VudFJlbmRlcmFi''@;'; put 'put ''bGVJbmRleGVzKHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLHRoaXMuc2V0dGluZ3MubWF4Q29scyl9Y291bnRSZW5kZXJhYmxlUm93cygpe3JldHVybiB0aGlzLmNvdW50UmVuZGVyYWJsZUluZGV4ZXModGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsdGhpcy5zZXR0aW5ncy5tYXhSb3dzKX1j''@;'; put 'put ''b3VudE5vdEhpZGRlblJvd0luZGV4ZXMobCxhKXtyZXR1cm4gdGhpcy5jb3VudE5vdEhpZGRlbkluZGV4ZXMobCxhLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLHRoaXMuY291bnRSZW5kZXJhYmxlUm93cygpKX1jb3VudE5vdEhpZGRlbkNvbHVtbkluZGV4ZXMobCxhKXtyZXR1cm4gdGhpcy5j''@;'; put 'put ''b3VudE5vdEhpZGRlbkluZGV4ZXMobCxhLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLHRoaXMuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpKX1jb3VudE5vdEhpZGRlbkluZGV4ZXMobCxhLGQsaCl7aWYoaXNOYU4obCl8fGw8MClyZXR1cm4gMDtjb25zdCBmPWQuZ2V0TmVhcmVzdE5vdEhp''@;'; put 'put ''ZGRlbkluZGV4KGwsYSksdj1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZik7aWYoIU51bWJlci5pc0ludGVnZXIodikpcmV0dXJuIDA7bGV0IE09MDtyZXR1cm4gYTwwP009disxOmE+MCYmKE09aC12KSxNfWNvdW50Tm90SGlkZGVuRml4ZWRDb2x1bW5zU3RhcnQoKXtjb25zdCBs''@;'; put 'put ''PXRoaXMuaG90LmNvdW50Q29scygpLGE9TWF0aC5taW4ocGFyc2VJbnQodGhpcy5zZXR0aW5ncy5maXhlZENvbHVtbnNTdGFydCwxMCksbCktMTtyZXR1cm4gdGhpcy5jb3VudE5vdEhpZGRlbkNvbHVtbkluZGV4ZXMoYSwtMSl9Y291bnROb3RIaWRkZW5GaXhlZFJvd3NUb3AoKXtjb25zdCBs''@;'; put 'put ''PXRoaXMuaG90LmNvdW50Um93cygpLGE9TWF0aC5taW4ocGFyc2VJbnQodGhpcy5zZXR0aW5ncy5maXhlZFJvd3NUb3AsMTApLGwpLTE7cmV0dXJuIHRoaXMuY291bnROb3RIaWRkZW5Sb3dJbmRleGVzKGEsLTEpfWNvdW50Tm90SGlkZGVuRml4ZWRSb3dzQm90dG9tKCl7Y29uc3QgbD10aGlz''@;'; put 'put ''LmhvdC5jb3VudFJvd3MoKSxhPU1hdGgubWF4KGwtcGFyc2VJbnQodGhpcy5zZXR0aW5ncy5maXhlZFJvd3NCb3R0b20sMTApLDApO3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuUm93SW5kZXhlcyhhLDEpfWNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKGwsYSl7bGV0IGQ9MDtmb3Io''@;'; put 'put ''bGV0IGg9bDtoPD1hO2grKyludWxsIT09dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChoKSYmKGQrPTEpO3JldHVybiBkfWNvdW50UmVuZGVyYWJsZVJvd3NJblJhbmdlKGwsYSl7bGV0IGQ9MDtmb3IobGV0IGg9bDtoPD1hO2grKyludWxs''@;'; put 'put ''IT09dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChoKSYmKGQrPTEpO3JldHVybiBkfWFkZENsYXNzTmFtZVRvTGljZW5zZUVsZW1lbnQobCl7dmFyIGE7Y29uc3QgZD1udWxsPT09KGE9dGhpcy5ob3Qucm9vdEVsZW1lbnQucGFyZW50Tm9kZSl8''@;'; put 'put ''fHZvaWQgMD09PWE/dm9pZCAwOmEucXVlcnlTZWxlY3RvcigiLmhvdC1kaXNwbGF5LWxpY2Vuc2UtaW5mbyIpO2QmJmlpKGQsbCl9cmVtb3ZlQ2xhc3NOYW1lRnJvbUxpY2Vuc2VFbGVtZW50KGwpe3ZhciBhO2NvbnN0IGQ9bnVsbD09PShhPXRoaXMuaG90LnJvb3RFbGVtZW50LnBhcmVudE5v''@;'; put 'put ''ZGUpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnF1ZXJ5U2VsZWN0b3IoIi5ob3QtZGlzcGxheS1saWNlbnNlLWluZm8iKTtkJiZWYShkLGwpfWlzTWFpblRhYmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpe2NvbnN0IGw9dGhpcy5jb3VudE5vdEhpZGRlbkZpeGVkUm93c1RvcCgpK3RoaXMu''@;'; put 'put ''Y291bnROb3RIaWRkZW5GaXhlZFJvd3NCb3R0b20oKSxhPXRoaXMuY291bnROb3RIaWRkZW5GaXhlZENvbHVtbnNTdGFydCgpO3JldHVybiB0aGlzLmhvdC5jb3VudFJlbmRlcmVkUm93cygpPmwmJnRoaXMuaG90LmNvdW50UmVuZGVyZWRDb2xzKCk+YX1pbml0aWFsaXplV2Fsa29udGFibGUo''@;'; put 'put ''KXtjb25zdCBsPXthcmlhVGFnczp0aGlzLnNldHRpbmdzLmFyaWFUYWdzLHJ0bE1vZGU6dGhpcy5ob3QuaXNSdGwoKSxleHRlcm5hbFJvd0NhbGN1bGF0b3I6dGhpcy5ob3QuZ2V0UGx1Z2luKCJhdXRvUm93U2l6ZSIpJiZ0aGlzLmhvdC5nZXRQbHVnaW4oImF1dG9Sb3dTaXplIikuaXNFbmFi''@;'; put 'put ''bGVkKCksdGFibGU6SHUoZXAsdGhpcyksaXNEYXRhVmlld0luc3RhbmNlOigpPT5JNCh0aGlzLmhvdCkscHJldmVudE92ZXJmbG93OigpPT50aGlzLnNldHRpbmdzLnByZXZlbnRPdmVyZmxvdyxwcmV2ZW50V2hlZWw6KCk9PnRoaXMuc2V0dGluZ3MucHJldmVudFdoZWVsLHZpZXdwb3J0Q29s''@;'; put 'put ''dW1uUmVuZGVyaW5nVGhyZXNob2xkOigpPT50aGlzLnNldHRpbmdzLnZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nVGhyZXNob2xkLHZpZXdwb3J0Um93UmVuZGVyaW5nVGhyZXNob2xkOigpPT50aGlzLnNldHRpbmdzLnZpZXdwb3J0Um93UmVuZGVyaW5nVGhyZXNob2xkLGRhdGE6KGYsdik9PnRo''@;'; put 'put ''aXMuaG90LmdldERhdGFBdENlbGwoLi4udGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsSW5kZXgoZix2KSksdG90YWxSb3dzOigpPT50aGlzLmNvdW50UmVuZGVyYWJsZVJvd3MoKSx0b3RhbENvbHVtbnM6KCk9PnRoaXMuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpLGZpeGVk''@;'; put 'put ''Q29sdW1uc1N0YXJ0OigpPT50aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRDb2x1bW5zU3RhcnQoKSxmaXhlZFJvd3NUb3A6KCk9PnRoaXMuY291bnROb3RIaWRkZW5GaXhlZFJvd3NUb3AoKSxmaXhlZFJvd3NCb3R0b206KCk9PnRoaXMuY291bnROb3RIaWRkZW5GaXhlZFJvd3NCb3R0b20oKSxz''@;'; put 'put ''aG91bGRSZW5kZXJJbmxpbmVTdGFydE92ZXJsYXk6KCk9PnRoaXMuc2V0dGluZ3MuZml4ZWRDb2x1bW5zU3RhcnQ+MHx8bC5yb3dIZWFkZXJzKCkubGVuZ3RoPjAsc2hvdWxkUmVuZGVyVG9wT3ZlcmxheTooKT0+dGhpcy5zZXR0aW5ncy5maXhlZFJvd3NUb3A+MHx8bC5jb2x1bW5IZWFkZXJz''@;'; put 'put ''KCkubGVuZ3RoPjAsc2hvdWxkUmVuZGVyQm90dG9tT3ZlcmxheTooKT0+dGhpcy5zZXR0aW5ncy5maXhlZFJvd3NCb3R0b20+MCxtaW5TcGFyZVJvd3M6KCk9PnRoaXMuc2V0dGluZ3MubWluU3BhcmVSb3dzLHJlbmRlckFsbFJvd3M6dGhpcy5zZXR0aW5ncy5yZW5kZXJBbGxSb3dzLHJlbmRl''@;'; put 'put ''ckFsbENvbHVtbnM6dGhpcy5zZXR0aW5ncy5yZW5kZXJBbGxDb2x1bW5zLHJvd0hlYWRlcnM6KCk9Pntjb25zdCBmPVtdO3JldHVybiB0aGlzLmhvdC5oYXNSb3dIZWFkZXJzKCkmJmYucHVzaCgodixNKT0+e2NvbnN0IEQ9dj49MD90aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxG''@;'; put 'put ''cm9tUmVuZGVyYWJsZUluZGV4KHYpOnY7dGhpcy5hcHBlbmRSb3dIZWFkZXIoRCxNKX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckdldFJvd0hlYWRlclJlbmRlcmVycyIsZiksd2goeE4sdGhpcyxmLmxlbmd0aCksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmWHcodWssdGhp''@;'; put 'put ''cyxCNWUpLmNhbGwodGhpcyk9PT10aGlzLmhvdC5jb3VudENvbHMoKSYmWHcodWssdGhpcyxOc3QpLmNhbGwodGhpcyxIdSh4Tix0aGlzKSksZn0sY29sdW1uSGVhZGVyczooKT0+e2NvbnN0IGY9W107cmV0dXJuIHRoaXMuaG90Lmhhc0NvbEhlYWRlcnMoKSYmZi5wdXNoKCh2LE0pPT57Y29u''@;'; put 'put ''c3QgRD12Pj0wP3RoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodik6djt0aGlzLmFwcGVuZENvbEhlYWRlcihELE0pfSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyR2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzIixmKSx3aCh0USx0aGlzLGYu''@;'; put 'put ''bGVuZ3RoKSxmfSxjb2x1bW5XaWR0aDpmPT57Y29uc3Qgdj10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGYpO3JldHVybiB0aGlzLmhvdC5nZXRDb2xXaWR0aChudWxsPT09dj9mOnYpfSxyb3dIZWlnaHQ6Zj0+e2NvbnN0IHY9dGhpcy5o''@;'; put 'put ''b3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKTtyZXR1cm4gdGhpcy5ob3QuZ2V0Um93SGVpZ2h0KG51bGw9PT12P2Y6dil9LHJvd0hlaWdodEJ5T3ZlcmxheU5hbWU6KGYsdik9Pntjb25zdCBNPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3Vh''@;'; put 'put ''bEZyb21SZW5kZXJhYmxlSW5kZXgoZiksRD1udWxsPT09TT9mOk07cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlSb3dIZWlnaHRCeU92ZXJsYXlOYW1lIix0aGlzLmhvdC5nZXRSb3dIZWlnaHQoRCksRCx2KX0sY2VsbFJlbmRlcmVyOihmLHYsTSk9Pntjb25zdFtELFVdPXRoaXMu''@;'; put 'put ''dHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbEluZGV4KGYsdiksdGU9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUdldENlbGxDb29yZHMiLEQsVSwhMSwibWV0YSIpO2xldCBvZT1ELHZlPVU7QXJyYXkuaXNBcnJheSh0ZSkmJihbb2UsdmVdPXRlKTtjb25zdCB3ZT10aGlzLmhvdC5n''@;'; put 'put ''ZXRDZWxsTWV0YShvZSx2ZSksRmU9dGhpcy5ob3QuY29sVG9Qcm9wKHZlKTtsZXQgV2U9dGhpcy5ob3QuZ2V0RGF0YUF0Um93UHJvcChvZSxGZSk7dGhpcy5ob3QuaGFzSG9vaygiYmVmb3JlVmFsdWVSZW5kZXIiKSYmKFdlPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVWYWx1ZVJlbmRlciIs''@;'; put 'put ''V2Usd2UpKSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVuZGVyZXIiLE0sRCxVLEZlLFdlLHdlKSx0aGlzLmhvdC5nZXRDZWxsUmVuZGVyZXIod2UpKHRoaXMuaG90LE0sRCxVLEZlLFdlLHdlKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSZW5kZXJlciIsTSxELFUsRmUsV2Usd2UpfSxz''@;'; put 'put ''ZWxlY3Rpb25zOnRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQsaGlkZUJvcmRlck9uTW91c2VEb3duT3ZlcjooKT0+dGhpcy5zZXR0aW5ncy5mcmFnbWVudFNlbGVjdGlvbixvbldpbmRvd1Jlc2l6ZTooKT0+e3RoaXMuaG90JiYhdGhpcy5ob3QuaXNEZXN0cm95ZWQmJnRoaXMuaG90LnJl''@;'; put 'put ''ZnJlc2hEaW1lbnNpb25zKCl9LG9uQ29udGFpbmVyRWxlbWVudFJlc2l6ZTooKT0+e3RoaXMuaG90JiYhdGhpcy5ob3QuaXNEZXN0cm95ZWQmJms2KHRoaXMuaG90LnJvb3RFbGVtZW50KSYmdGhpcy5ob3QucmVmcmVzaERpbWVuc2lvbnMoKX0sb25DZWxsTW91c2VEb3duOihmLHYsTSxEKT0+''@;'; put 'put ''e2NvbnN0IFU9dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKHYpLHRlPXtyb3c6ITEsY29sdW1uOiExLGNlbGw6ITF9O3RoaXMuaG90Lmxpc3RlbigpLHRoaXMuYWN0aXZlV3Q9RCx3aChiNSx0aGlzLCEwKSx3aChxdyx0aGlzLHt4OmYuY2xpZW50WCx5OmYuY2xp''@;'; put 'put ''ZW50WX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGYsVSxNLHRlKSwhRDYoZikmJihRSihmLHtjb29yZHM6VSxzZWxlY3Rpb246dGhpcy5ob3Quc2VsZWN0aW9uLGNvbnRyb2xsZXI6dGUsY2VsbENvb3Jkc0ZhY3Rvcnk6KG9lLHZlKT0+dGhpcy5ob3QuX2Ny''@;'; put 'put ''ZWF0ZUNlbGxDb29yZHMob2UsdmUpfSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyT25DZWxsTW91c2VEb3duIixmLFUsTSksdGhpcy5hY3RpdmVXdD10aGlzLl93dCl9LG9uQ2VsbENvbnRleHRNZW51OihmLHYsTSxEKT0+e2NvbnN0IFU9dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRv''@;'; put 'put ''VmlzdWFsQ29vcmRzKHYpO3RoaXMuYWN0aXZlV3Q9RCx3aChiNSx0aGlzLCExKSx0aGlzLmhvdC5zZWxlY3Rpb24uaXNJblByb2dyZXNzKCkmJnRoaXMuaG90LnNlbGVjdGlvbi5maW5pc2goKSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlT25DZWxsQ29udGV4dE1lbnUiLGYsVSxNKSwhRDYo''@;'; put 'put ''ZikmJih0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJPbkNlbGxDb250ZXh0TWVudSIsZixVLE0pLHRoaXMuYWN0aXZlV3Q9dGhpcy5fd3QpfSxvbkNlbGxNb3VzZU91dDooZix2LE0sRCk9Pntjb25zdCBVPXRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkcyh2KTt0aGlz''@;'; put 'put ''LmFjdGl2ZVd0PUQsdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZU9uQ2VsbE1vdXNlT3V0IixmLFUsTSksIUQ2KGYpJiYodGhpcy5ob3QucnVuSG9va3MoImFmdGVyT25DZWxsTW91c2VPdXQiLGYsVSxNKSx0aGlzLmFjdGl2ZVd0PXRoaXMuX3d0KX0sb25DZWxsTW91c2VPdmVyOihmLHYsTSxE''@;'; put 'put ''KT0+e2NvbnN0IFU9dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKHYpLHRlPXtyb3c6ITEsY29sdW1uOiExLGNlbGw6ITF9O3RoaXMuYWN0aXZlV3Q9RCx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlT25DZWxsTW91c2VPdmVyIixmLFUsTSx0ZSksIUQ2KGYpJiYo''@;'; put 'put ''SHUoYjUsdGhpcykmJighSHUocXcsdGhpcyl8fEh1KHF3LHRoaXMpLnghPT1mLmNsaWVudFh8fEh1KHF3LHRoaXMpLnkhPT1mLmNsaWVudFkpJiZRSihmLHtjb29yZHM6VSxzZWxlY3Rpb246dGhpcy5ob3Quc2VsZWN0aW9uLGNvbnRyb2xsZXI6dGUsY2VsbENvb3Jkc0ZhY3Rvcnk6KG9lLHZl''@;'; put 'put ''KT0+dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMob2UsdmUpfSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyT25DZWxsTW91c2VPdmVyIixmLFUsTSksdGhpcy5hY3RpdmVXdD10aGlzLl93dCx3aChxdyx0aGlzLG51bGwpKX0sb25DZWxsTW91c2VVcDooZix2LE0sRCk9Pntjb25zdCBVPXRo''@;'; put 'put ''aXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkcyh2KTt0aGlzLmFjdGl2ZVd0PUQsdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZU9uQ2VsbE1vdXNlVXAiLGYsVSxNKSwhRDYoZikmJiF0aGlzLmhvdC5pc0Rlc3Ryb3llZCYmKFFKKGYse2Nvb3JkczpVLHNlbGVjdGlvbjp0''@;'; put 'put ''aGlzLmhvdC5zZWxlY3Rpb24sY2VsbFJhbmdlTWFwcGVyOnJpdCh0aGlzLmhvdCwiY2VsbFJhbmdlTWFwcGVyIil9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJPbkNlbGxNb3VzZVVwIixmLFUsTSksdGhpcy5hY3RpdmVXdD10aGlzLl93dCl9LG9uQ2VsbENvcm5lck1vdXNlRG93bjpmPT57''@;'; put 'put ''Zi5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck9uQ2VsbENvcm5lck1vdXNlRG93biIsZil9LG9uQ2VsbENvcm5lckRibENsaWNrOmY9PntmLnByZXZlbnREZWZhdWx0KCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyT25DZWxsQ29ybmVyRGJsQ2xpY2siLGYpfSxi''@;'; put 'put ''ZWZvcmVEcmF3OihmLHYpPT50aGlzLmJlZm9yZVJlbmRlcihmLHYpLG9uRHJhdzpmPT50aGlzLmFmdGVyUmVuZGVyKGYpLG9uQmVmb3JlVmlld3BvcnRTY3JvbGxWZXJ0aWNhbGx5OihmLHYpPT57Y29uc3QgTT10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixEPWY8MDtsZXQgVT1mO3JldHVybiBE''@;'; put 'put ''fHwoVT1NLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZiksbnVsbCE9PVUpPyhVPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2FsbHkiLFUsdiksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVZpZXdwb3J0U2Nyb2xsIiksRD9VOk0uZ2V0UmVuZGVy''@;'; put 'put ''YWJsZUZyb21WaXN1YWxJbmRleChVKSk6Zn0sb25CZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseTooZix2KT0+e2NvbnN0IE09dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsRD1mPDA7bGV0IFU9ZjtyZXR1cm4gRHx8KFU9TS5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGYp''@;'; put 'put ''LG51bGwhPT1VKT8oVT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVmlld3BvcnRTY3JvbGxIb3Jpem9udGFsbHkiLFUsdiksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVZpZXdwb3J0U2Nyb2xsIiksRD9VOk0uZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChVKSk6Zn0sb25TY3JvbGxW''@;'; put 'put ''ZXJ0aWNhbGx5OigpPT57dGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2Nyb2xsVmVydGljYWxseSIpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclNjcm9sbCIpfSxvblNjcm9sbEhvcml6b250YWxseTooKT0+e3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclNjcm9sbEhvcml6b250YWxseSIpLHRo''@;'; put 'put ''aXMuaG90LnJ1bkhvb2tzKCJhZnRlclNjcm9sbCIpfSxvbkJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzOigpPT50aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXMiKSxvbkJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlcjooZix2LE0pPT57Y29uc3QgRD10aGlz''@;'; put 'put ''LmhvdC5yb3dJbmRleE1hcHBlcixVPWY8MDtsZXQgdGU9ZjtVfHwodGU9RC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGYpKTtjb25zdCBvZT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyIix0ZSx2LE0pO3JldHVybiBVP29lOkQuZ2V0UmVuZGVy''@;'; put 'put ''YWJsZUZyb21WaXN1YWxJbmRleChELmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChvZSwxKSl9LG9uQmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyOihmLHYsTSk9Pntjb25zdCBEPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLFU9ZjwwO2xldCB0ZT1mO1V8fCh0ZT1ELmdldFZpc3Vh''@;'; put 'put ''bEZyb21SZW5kZXJhYmxlSW5kZXgoZikpO2NvbnN0IG9lPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXIiLHRlLHYsTSk7cmV0dXJuIFU/b2U6RC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KG9l''@;'; put 'put ''LDEpKX0sb25BZnRlckRyYXdTZWxlY3Rpb246KGYsdixNKT0+e2xldCBEO2NvbnN0W1UsdGVdPXRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbEluZGV4KGYsdiksb2U9dGhpcy5ob3Quc2VsZWN0aW9uLmdldFNlbGVjdGVkUmFuZ2UoKTtpZihvZS5zaXplKCk+MCl7Y29uc3Qg''@;'; put 'put ''d2U9b2UucGVla0J5SW5kZXgoTT8/MCk7RD1bd2UuZnJvbS5yb3csd2UuZnJvbS5jb2wsd2UudG8ucm93LHdlLnRvLmNvbF19cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckRyYXdTZWxlY3Rpb24iLFUsdGUsRCxNKX0sb25CZWZvcmVEcmF3Qm9yZGVyczooZix2KT0+e2NvbnN0W00s''@;'; put 'put ''RCxVLHRlXT1mLG9lPVt0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KE0pLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoRCksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJv''@;'; put 'put ''bVJlbmRlcmFibGVJbmRleChVKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRlKV07cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVEcmF3Qm9yZGVycyIsb2Usdil9LG9uQmVmb3JlVG91Y2hTY3JvbGw6KCk9PnRoaXMuaG90''@;'; put 'put ''LnJ1bkhvb2tzKCJiZWZvcmVUb3VjaFNjcm9sbCIpLG9uQWZ0ZXJNb21lbnR1bVNjcm9sbDooKT0+dGhpcy5ob3QucnVuSG9va3MoImFmdGVyTW9tZW50dW1TY3JvbGwiKSxvbk1vZGlmeVJvd0hlYWRlcldpZHRoOmY9PnRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlSb3dIZWFkZXJXaWR0aCIs''@;'; put 'put ''Ziksb25Nb2RpZnlHZXRDZWxsQ29vcmRzOihmLHYsTSxEKT0+e2NvbnN0IFU9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsdGU9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsb2U9dj49MD90ZS5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHYpOnYsdmU9Zj49MD9VLmdldFZpc3VhbEZy''@;'; put 'put ''b21SZW5kZXJhYmxlSW5kZXgoZik6Zix3ZT10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5R2V0Q2VsbENvb3JkcyIsdmUsb2UsTSxEKTtpZihBcnJheS5pc0FycmF5KHdlKSl7Y29uc3RbRmUsV2UsbnQsZHRdPXdlO3JldHVybltGZT49MD9VLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgo''@;'; put 'put ''VS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoRmUsMSkpOkZlLFdlPj0wP3RlLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGUuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KFdlLDEpKTpXZSxudD49MD9VLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoVS5nZXROZWFyZXN0Tm90''@;'; put 'put ''SGlkZGVuSW5kZXgobnQsLTEpKTpudCxkdD49MD90ZS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHRlLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChkdCwtMSkpOmR0XX19LG9uTW9kaWZ5R2V0Q29vcmRzRWxlbWVudDooZix2KT0+e2NvbnN0IE09dGhpcy5ob3Qucm93SW5kZXhNYXBw''@;'; put 'put ''ZXIsRD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixVPXY+PTA/RC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHYpOnYsdGU9Zj49MD9NLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZik6ZixvZT10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5R2V0Q29vcmRzRWxlbWVudCIs''@;'; put 'put ''dGUsVSk7aWYoQXJyYXkuaXNBcnJheShvZSkpe2NvbnN0W3ZlLHdlXT1vZTtyZXR1cm5bdmU+PTA/TS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KE0uZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHZlLDEpKTp2ZSx3ZT49MD9ELmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoRC5n''@;'; put 'put ''ZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgod2UsMSkpOndlXX19LHZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlOmY9PntsZXQgdj10aGlzLnNldHRpbmdzLnZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0O2lmKCJhdXRvIj09PXYmJnRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzVG9wJiYodj0x''@;'; put 'put ''MCksdj4wfHwiYXV0byI9PT12KXtjb25zdCBNPXRoaXMuY291bnRSZW5kZXJhYmxlUm93cygpLEQ9Zi5zdGFydFJvdyxVPWYuZW5kUm93O2lmKCJudW1iZXIiPT10eXBlb2YgdilmLnN0YXJ0Um93PU1hdGgubWF4KEQtdiwwKSxmLmVuZFJvdz1NYXRoLm1pbihVK3YsTS0xKTtlbHNlIGlmKCJh''@;'; put 'put ''dXRvIj09PXYpe2NvbnN0IHRlPU1hdGgubWF4KDEsTWF0aC5jZWlsKFUvTSoxMikpO2Yuc3RhcnRSb3c9TWF0aC5tYXgoRC10ZSwwKSxmLmVuZFJvdz1NYXRoLm1pbihVK3RlLE0tMSl9fXRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlIixmKX0s''@;'; put 'put ''dmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGU6Zj0+e2xldCB2PXRoaXMuc2V0dGluZ3Mudmlld3BvcnRDb2x1bW5SZW5kZXJpbmdPZmZzZXQ7aWYoImF1dG8iPT09diYmdGhpcy5zZXR0aW5ncy5maXhlZENvbHVtbnNTdGFydCYmKHY9MTApLHY+MHx8ImF1dG8iPT09dil7Y29uc3Qg''@;'; put 'put ''TT10aGlzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSxEPWYuc3RhcnRDb2x1bW4sVT1mLmVuZENvbHVtbjtpZigibnVtYmVyIj09dHlwZW9mIHYmJihmLnN0YXJ0Q29sdW1uPU1hdGgubWF4KEQtdiwwKSxmLmVuZENvbHVtbj1NYXRoLm1pbihVK3YsTS0xKSksImF1dG8iPT09dil7Y29uc3Qg''@;'; put 'put ''dGU9TWF0aC5tYXgoMSxNYXRoLmNlaWwoVS9NKjYpKTtmLnN0YXJ0Q29sdW1uPU1hdGgubWF4KEQtdGUsMCksZi5lbmRDb2x1bW49TWF0aC5taW4oVSt0ZSxNLTEpfX10aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZSIsZil9LHJvd0hlYWRl''@;'; put 'put ''cldpZHRoOigpPT50aGlzLnNldHRpbmdzLnJvd0hlYWRlcldpZHRoLGNvbHVtbkhlYWRlckhlaWdodDooKT0+e2NvbnN0IGY9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUNvbHVtbkhlYWRlckhlaWdodCIpO3JldHVybiB0aGlzLnNldHRpbmdzLmNvbHVtbkhlYWRlckhlaWdodHx8Zn0sc3R5''@;'; put 'put ''bGVzSGFuZGxlcjooKT0+dGhpcy5ob3Quc3R5bGVzSGFuZGxlcn07dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUluaXRXYWxrb250YWJsZSIsbCksdGhpcy5fd3Q9bmV3IEpKKGwpLHRoaXMuYWN0aXZlV3Q9dGhpcy5fd3Q7Y29uc3QgYT10aGlzLl93dC53dFRhYmxlLnNwcmVhZGVyLHt3aWR0''@;'; put 'put ''aDpkLGhlaWdodDpofT10aGlzLmhvdC5yb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLnNldExhc3RTaXplKGQsaCksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZWRvd24iLGY9PntmLnRhcmdldD09PWEmJjM9PT1mLndoaWNoJiZmLnN0''@;'; put 'put ''b3BQcm9wYWdhdGlvbigpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJjb250ZXh0bWVudSIsZj0+e2YudGFyZ2V0PT09YSYmMz09PWYud2hpY2gmJmYuc3RvcFByb3BhZ2F0aW9uKCl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuaG90''@;'; put 'put ''LnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsImNsaWNrIiwoKT0+e3RoaXMuc2V0dGluZ3Mub2JzZXJ2ZURPTVZpc2liaWxpdHkmJnRoaXMuX3d0LmRyYXdJbnRlcnJ1cHRlZCYmdGhpcy5ob3QucmVuZGVyKCl9KX1pc1RleHRTZWxlY3Rpb25BbGxvd2VkKGwpe3ZhciBhLGQ7aWYoR0Eo''@;'; put 'put ''bCkpcmV0dXJuITA7Y29uc3QgaD14NihsLHRoaXMuX3d0Lnd0VGFibGUuc3ByZWFkZXIpO2lmKCEwPT09dGhpcy5zZXR0aW5ncy5mcmFnbWVudFNlbGVjdGlvbiYmaClyZXR1cm4hMDtjb25zdCBmPW51bGwhPT0oYT1udWxsPT09KGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgp''@;'; put 'put ''KXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5pc1NpbmdsZUNlbGwoKSkmJnZvaWQgMCE9PWEmJmE7cmV0dXJuISEoImNlbGwiPT09dGhpcy5zZXR0aW5ncy5mcmFnbWVudFNlbGVjdGlvbiYmZiYmaHx8IXRoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb24mJnRoaXMuaXNDZWxsRWRpdGVkKCkm''@;'; put 'put ''JmYpfWlzTW91c2VEb3duKCl7cmV0dXJuIEh1KGI1LHRoaXMpfWlzQ2VsbEVkaXRlZCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0QWN0aXZlRWRpdG9yKCk7cmV0dXJuIGwmJmwuaXNPcGVuZWQoKX1iZWZvcmVSZW5kZXIobCxhKXtsJiZ0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVmlld1JlbmRl''@;'; put 'put ''ciIsdGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyLGEpfWFmdGVyUmVuZGVyKGwpe2wmJnRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclZpZXdSZW5kZXIiLHRoaXMuaG90LmZvcmNlRnVsbFJlbmRlcil9YXBwZW5kUm93SGVhZGVyKGwsYSl7aWYoYS5maXJzdENoaWxkKXtjb25zdCBkPWEuZmlyc3RD''@;'; put 'put ''aGlsZDtpZighQ28oZCwicmVsYXRpdmUiKSlyZXR1cm4geDQoYSksdm9pZCB0aGlzLmFwcGVuZFJvd0hlYWRlcihsLGEpO3RoaXMudXBkYXRlQ2VsbEhlYWRlcihkLnF1ZXJ5U2VsZWN0b3IoIi5yb3dIZWFkZXIiKSxsLHRoaXMuaG90LmdldFJvd0hlYWRlcil9ZWxzZXtjb25zdHtyb290RG9j''@;'; put 'put ''dW1lbnQ6ZCxnZXRSb3dIZWFkZXI6aH09dGhpcy5ob3QsZj1kLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHY9ZC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Zi5jbGFzc05hbWU9InJlbGF0aXZlIix2LmNsYXNzTmFtZT0icm93SGVhZGVyIix0aGlzLnVwZGF0ZUNlbGxIZWFkZXIodixsLGgpLGYuYXBw''@;'; put 'put ''ZW5kQ2hpbGQodiksYS5hcHBlbmRDaGlsZChmKX10aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJHZXRSb3dIZWFkZXIiLGwsYSl9YXBwZW5kQ29sSGVhZGVyKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnRoaXMuaG90Lmdl''@;'; put 'put ''dENvbEhlYWRlcixoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTowO2NvbnN0IGY9KCk9Pntjb25zdCB2PWw+PTA/dGhpcy5ob3QuZ2V0Q29sdW1uTWV0YShsKS5oZWFkZXJDbGFzc05hbWU6bnVsbDtyZXR1cm4gdj92LnNwbGl0KCIgIik6''@;'; put 'put ''W119O2lmKGEuZmlyc3RDaGlsZCl7Y29uc3Qgdj1hLmZpcnN0Q2hpbGQ7Q28odiwicmVsYXRpdmUiKT8odGhpcy51cGRhdGVDZWxsSGVhZGVyKHYucXVlcnlTZWxlY3RvcigiLmNvbEhlYWRlciIpLGwsZCxoKSx2LmNsYXNzTmFtZT0iIixpaSh2LFsicmVsYXRpdmUiLC4uLmYoKV0pKTooeDQo''@;'; put 'put ''YSksdGhpcy5hcHBlbmRDb2xIZWFkZXIobCxhLGQsaCkpfWVsc2V7Y29uc3R7cm9vdERvY3VtZW50OnZ9PXRoaXMuaG90LE09di5jcmVhdGVFbGVtZW50KCJkaXYiKSxEPXYuY3JlYXRlRWxlbWVudCgic3BhbiIpLFU9ZigpO00uY2xhc3NMaXN0LmFkZCgicmVsYXRpdmUiLC4uLlUpLEQuY2xh''@;'; put 'put ''c3NOYW1lPSJjb2xIZWFkZXIiLHRoaXMuc2V0dGluZ3MuYXJpYVRhZ3MmJihaYShNLCJyb2xlIiwicHJlc2VudGF0aW9uIiksWmEoRCwicm9sZSIsInByZXNlbnRhdGlvbiIpKSx0aGlzLnVwZGF0ZUNlbGxIZWFkZXIoRCxsLGQsaCksTS5hcHBlbmRDaGlsZChEKSxhLmFwcGVuZENoaWxkKE0p''@;'; put 'put ''fXRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckdldENvbEhlYWRlciIsbCxhLGgpfXVwZGF0ZUNlbGxIZWFkZXIobCxhLGQpe2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTowLGY9YTtjb25zdCB2PXRoaXMuX3d0Lnd0T3ZlcmxheXMu''@;'; put 'put ''Z2V0UGFyZW50T3ZlcmxheShsKXx8dGhpcy5fd3Q7bC5wYXJlbnROb2RlJiYoQ28obCwiY29sSGVhZGVyIik/Zj12Lnd0VGFibGUuY29sdW1uRmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQoYSk6Q28obCwicm93SGVhZGVyIikmJihmPXYud3RUYWJsZS5yb3dGaWx0ZXIuc291cmNlVG9SZW5kZXJl''@;'; put 'put ''ZChhKSkpLGY+LTE/VDYobCxkKGEsaCkpOihBNihsLCJceGEwIiksaWkobCwiY29ybmVySGVhZGVyIikpfW1heGltdW1WaXNpYmxlRWxlbWVudFdpZHRoKGwpe2NvbnN0IGQ9dGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRXb3Jrc3BhY2VXaWR0aCgpLWw7cmV0dXJuIGQ+MD9kOjB9bWF4aW11bVZp''@;'; put 'put ''c2libGVFbGVtZW50SGVpZ2h0KGwpe2NvbnN0IGQ9dGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRXb3Jrc3BhY2VIZWlnaHQoKS1sO3JldHVybiBkPjA/ZDowfXNldExhc3RTaXplKGwsYSl7d2goblEsdGhpcyxsKSx3aChyUSx0aGlzLGEpfWdldExhc3RTaXplKCl7cmV0dXJue3dpZHRoOkh1KG5R''@;'; put 'put ''LHRoaXMpLGhlaWdodDpIdShyUSx0aGlzKX19Z2V0Rmlyc3RSZW5kZXJlZFZpc2libGVSb3coKXtpZighdGhpcy5fd3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvcilyZXR1cm4gbnVsbDtjb25zdCBsPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLGE9bC5nZXRWaXN1YWxGcm9tUmVu''@;'; put 'put ''ZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0VGFibGUuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpKTtyZXR1cm4gbC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYT8/MCwxKX1nZXRMYXN0UmVuZGVyZWRWaXNpYmxlUm93KCl7aWYoIXRoaXMuX3d0Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0''@;'; put 'put ''b3IpcmV0dXJuIG51bGw7Y29uc3QgbD10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixhPWwuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53dFRhYmxlLmdldExhc3RSZW5kZXJlZFJvdygpKTtyZXR1cm4gbC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYT8/dGhpcy5ob3Qu''@;'; put 'put ''Y291bnRSb3dzKCktMSwtMSl9Z2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKXtpZighdGhpcy5fd3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvcilyZXR1cm4gbnVsbDtjb25zdCBsPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLGE9bC5nZXRWaXN1YWxGcm9tUmVu''@;'; put 'put ''ZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0VGFibGUuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpKTtyZXR1cm4gbC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYT8/MCwxKX1nZXRMYXN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCl7aWYoIXRoaXMuX3d0Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRl''@;'; put 'put ''ckNhbGN1bGF0b3IpcmV0dXJuIG51bGw7Y29uc3QgbD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixhPWwuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53dFRhYmxlLmdldExhc3RSZW5kZXJlZENvbHVtbigpKTtyZXR1cm4gbC5nZXROZWFyZXN0Tm90SGlkZGVuSW5k''@;'; put 'put ''ZXgoYT8/dGhpcy5ob3QuY291bnRDb2xzKCktMSwtMSl9Z2V0Rmlyc3RGdWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53dFNjcm9sbC5nZXRGaXJzdFZpc2libGVSb3coKSl9Z2V0TGFz''@;'; put 'put ''dEZ1bGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldExhc3RWaXNpYmxlUm93KCkpfWdldEZpcnN0RnVsbHlWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuaG90LmNv''@;'; put 'put ''bHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RTY3JvbGwuZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCkpfWdldExhc3RGdWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJl''@;'; put 'put ''bmRlcmFibGVJbmRleCh0aGlzLl93dC53dFNjcm9sbC5nZXRMYXN0VmlzaWJsZUNvbHVtbigpKX1nZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53dFNjcm9sbC5n''@;'; put 'put ''ZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKSl9Z2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53dFNjcm9sbC5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygp''@;'; put 'put ''KX1nZXRGaXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53dFNjcm9sbC5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKSl9Z2V0TGFzdFBhcnRpYWxs''@;'; put 'put ''eVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53dFNjcm9sbC5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpKX1nZXRDb2x1bW5IZWFkZXJzQ291bnQoKXtyZXR1cm4gSHUo''@;'; put 'put ''dFEsdGhpcyl9Z2V0Um93SGVhZGVyc0NvdW50KCl7cmV0dXJuIEh1KHhOLHRoaXMpfWdldFZpZXdwb3J0V2lkdGgoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydFdpZHRoKCl9Z2V0V29ya3NwYWNlV2lkdGgoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRX''@;'; put 'put ''b3Jrc3BhY2VXaWR0aCgpfWdldFZpZXdwb3J0SGVpZ2h0KCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRIZWlnaHQoKX1nZXRXb3Jrc3BhY2VIZWlnaHQoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRXb3Jrc3BhY2VIZWlnaHQoKX1nZXRFbGVtZW50T3Zl''@;'; put 'put ''cmxheU5hbWUobCl7dmFyIGE7cmV0dXJuKG51bGwhPT0oYT10aGlzLl93dC53dE92ZXJsYXlzLmdldFBhcmVudE92ZXJsYXkobCkpJiZ2b2lkIDAhPT1hP2E6dGhpcy5fd3QpLnd0VGFibGUubmFtZX1nZXRPdmVybGF5QnlOYW1lKGwpe3JldHVybiB0aGlzLl93dC5nZXRPdmVybGF5QnlOYW1l''@;'; put 'put ''KGwpfWdldEFjdGl2ZU92ZXJsYXlOYW1lKCl7cmV0dXJuIHRoaXMuX3d0LmFjdGl2ZU92ZXJsYXlOYW1lfWlzVmlzaWJsZSgpe3JldHVybiB0aGlzLl93dC53dFRhYmxlLmlzVmlzaWJsZSgpfWhhc1ZlcnRpY2FsU2Nyb2xsKCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuaGFzVmVydGlj''@;'; put 'put ''YWxTY3JvbGwoKX1oYXNIb3Jpem9udGFsU2Nyb2xsKCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuaGFzSG9yaXpvbnRhbFNjcm9sbCgpfWdldFRhYmxlV2lkdGgoKXtyZXR1cm4gdGhpcy5fd3Qud3RUYWJsZS5nZXRXaWR0aCgpfWdldFRhYmxlSGVpZ2h0KCl7cmV0dXJuIHRoaXMuX3d0''@;'; put 'put ''Lnd0VGFibGUuZ2V0SGVpZ2h0KCl9Z2V0VG90YWxUYWJsZVdpZHRoKCl7cmV0dXJuIHRoaXMuX3d0Lnd0VGFibGUuZ2V0VG90YWxXaWR0aCgpfWdldFRvdGFsVGFibGVIZWlnaHQoKXtyZXR1cm4gdGhpcy5fd3Qud3RUYWJsZS5nZXRUb3RhbEhlaWdodCgpfWdldFRhYmxlT2Zmc2V0KCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuZ2V0V29ya3NwYWNlT2Zmc2V0KCl9Z2V0VGFibGVTY3JvbGxQb3NpdGlvbigpe3JldHVybntsZWZ0OnRoaXMuX3d0Lnd0VGFibGUuaG9sZGVyLnNjcm9sbExlZnQsdG9wOnRoaXMuX3d0Lnd0VGFibGUuaG9sZGVyLnNjcm9sbFRvcH19c2V0VGFibGVT''@;'; put 'put ''Y3JvbGxQb3NpdGlvbihsKXt0aGlzLl93dC53dFRhYmxlLmhvbGRlci5zY3JvbGxMZWZ0PWwubGVmdCx0aGlzLl93dC53dFRhYmxlLmhvbGRlci5zY3JvbGxUb3A9bC50b3B9Z2V0Um93SGVhZGVyV2lkdGgoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRSb3dIZWFkZXJXaWR0aCgp''@;'; put 'put ''fWdldENvbHVtbkhlYWRlckhlaWdodCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmdldENvbHVtbkhlYWRlckhlaWdodCgpfWlzVmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdygpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmlzVmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRv''@;'; put 'put ''dygpfWlzSG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuaXNIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKX1kZXN0cm95KCl7dGhpcy5fd3QuZGVzdHJveSgpLHRoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKX19O2IoMTM5''@;'; put 'put ''MDgpO2NvbnN0IGo1ZT0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiLGlRPWo1ZS5sZW5ndGg7ZnVuY3Rpb24gVE4oYyl7bGV0IGQsbD1jKzEsYT0iIjtmb3IoO2w+MDspZD0obC0xKSVpUSxhPVN0cmluZy5mcm9tQ2hhckNvZGUoNjUrZCkrYSxsPXBhcnNlSW50KChsLWQpL2lRLDEwKTty''@;'; put 'put ''ZXR1cm4gYX1mdW5jdGlvbiBqc3QoYyl7bGV0IGw9MDtpZihjKWZvcihsZXQgYT0wLGQ9Yy5sZW5ndGgtMTthPGMubGVuZ3RoO2ErPTEsZC09MSlsKz1pUSoqZCooajVlLmluZGV4T2YoY1thXSkrMSk7cmV0dXJuIGwtPTEsbH1mdW5jdGlvbiB6c3QoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MTAwLGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjQ7Y29uc3QgYT1bXTtsZXQgZCxoO2ZvcihkPTA7ZDxjO2QrKyl7Y29uc3QgZj1bXTtmb3IoaD0wO2g8bDtoKysp''@;'; put 'put ''Zi5wdXNoKFROKGgpKyhkKzEpKTthLnB1c2goZil9cmV0dXJuIGF9ZnVuY3Rpb24gVXN0KCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjEwMCxsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2Fy''@;'; put 'put ''Z3VtZW50c1sxXTo0O2NvbnN0IGE9W107bGV0IGQsaDtmb3IoZD0wO2Q8YztkKyspe2NvbnN0IGY9e307Zm9yKGg9MDtoPGw7aCsrKWZbYHByb3Ake2h9YF09VE4oaCkrKGQrMSk7YS5wdXNoKGYpfXJldHVybiBhfWZ1bmN0aW9uIFpzdChjLGwpe2NvbnN0IGE9W107bGV0IGQ7Zm9yKGxldCBo''@;'; put 'put ''PTA7aDxjO2grKyl7ZD1bXTtmb3IobGV0IGY9MDtmPGw7ZisrKWQucHVzaCgiIik7YS5wdXNoKGQpfXJldHVybiBhfWZ1bmN0aW9uIGFRKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowLGE9Yztjb25zdCBkPVtdO3JldHVy''@;'; put 'put ''bighQXJyYXkuaXNBcnJheShjKXx8IUFycmF5LmlzQXJyYXkoY1swXSkpJiYoYT1bY10pLGEuZm9yRWFjaCgoaCxmKT0+e0FycmF5LmlzQXJyYXkoaCk/aC5mb3JFYWNoKCh2LE0pPT57ZC5wdXNoKFtmK2wsTSx2XSl9KTpPYmplY3Qua2V5cyhoKS5mb3JFYWNoKHY9PntkLnB1c2goW2YrbCx2''@;'; put 'put ''LGhbdl1dKX0pfSksZH1mdW5jdGlvbiBvUShjKXtsZXQgbD0wO3JldHVybiBBcnJheS5pc0FycmF5KGMpJiYoY1swXSYmQXJyYXkuaXNBcnJheShjWzBdKT9sPWNbMF0ubGVuZ3RoOmNbMF0mJm1vKGNbMF0pJiYobD1RSChjWzBdKSkpLGx9ZnVuY3Rpb24gejVlKGMpe3JldHVybiEhKEFycmF5''@;'; put 'put ''LmlzQXJyYXkoYykmJmMubGVuZ3RoJiZjLmV2ZXJ5KGw9PkFycmF5LmlzQXJyYXkobCkpKX1mdW5jdGlvbiBVNWUoYyl7cmV0dXJuISEoQXJyYXkuaXNBcnJheShjKSYmYy5sZW5ndGgmJmMuZXZlcnkobD0+Im9iamVjdCI9PXR5cGVvZiBsJiYhQXJyYXkuaXNBcnJheShsKSYmbnVsbCE9PWwp''@;'; put 'put ''KX1mdW5jdGlvbiBkayhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gV3N0KGMpe3ZhciBsPWZ1bmN0aW9uIFlzdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8''@;'; put 'put ''fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0''@;'; put 'put ''dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgJHN0PWNsYXNzIEdzdHtjb25zdHJ1Y3RvcihsKXtsZXQg''@;'; put 'put ''YT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W107ZGsodGhpcywiaG90Iix2b2lkIDApLGRrKHRoaXMsImRhdGEiLHZvaWQgMCksZGsodGhpcywiZGF0YVR5cGUiLCJhcnJheSIpLGRrKHRoaXMsImNvbFRvUHJvcCIsKCk9Pnt9KSxkayh0''@;'; put 'put ''aGlzLCJwcm9wVG9Db2wiLCgpPT57fSksdGhpcy5ob3Q9bCx0aGlzLmRhdGE9YX1tb2RpZnlSb3dEYXRhKGwpe2xldCBhO3JldHVybiB0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlSb3dEYXRhIikmJihhPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlSb3dEYXRhIixsKSksdm9pZCAwPT09YXx8''@;'; put 'put ''TnVtYmVyLmlzSW50ZWdlcihhKT90aGlzLmRhdGFbbF06YX1nZXREYXRhKCl7cmV0dXJuIHRoaXMuZGF0YSYmMCE9PXRoaXMuZGF0YS5sZW5ndGg/dGhpcy5nZXRCeVJhbmdlKG51bGwsbnVsbCxhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBd''@;'; put 'put ''KTp0aGlzLmRhdGF9c2V0RGF0YShsKXt0aGlzLmRhdGE9bH1nZXRBdENvbHVtbihsKXtjb25zdCBhPVtdO3JldHVybiBLbih0aGlzLmRhdGEsKGQsaCk9Pntjb25zdCBmPXRoaXMuZ2V0QXRDZWxsKGgsbCk7YS5wdXNoKGYpfSksYX1nZXRBdFJvdyhsLGEsZCl7bGV0IGg9YXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTtjb25zdCBmPXZvaWQgMD09PWEmJnZvaWQgMD09PWQse2RhdGFEb3ROb3RhdGlvbjp2fT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO2xldCBNPW51bGwsRD1udWxsO2lmKE09dGhpcy5tb2RpZnlSb3dEYXRhKGwpLEFy''@;'; put 'put ''cmF5LmlzQXJyYXkoTSkpRD1bXSxmP00uZm9yRWFjaCgoVSx0ZSk9PntEW3RlXT10aGlzLmdldEF0UGh5c2ljYWxDZWxsKGwsdGUsTSl9KTpRYShhLGQsVT0+e0RbVS1hXT10aGlzLmdldEF0UGh5c2ljYWxDZWxsKGwsVSxNKX0pO2Vsc2UgaWYobW8oTSl8fGlsKE0pKWlmKEQ9aD9bXTp7fSwh''@;'; put 'put ''Znx8aCl7Y29uc3QgdGU9dGhpcy5jb3VudEZpcnN0Um93S2V5cygpLTE7UWEoMCx0ZSxvZT0+e2NvbnN0IHZlPXRoaXMuY29sVG9Qcm9wKG9lKTtpZihvZT49KGF8fDApJiZvZTw9KGR8fHRlKSYmIU51bWJlci5pc0ludGVnZXIodmUpKXtjb25zdCB3ZT10aGlzLmdldEF0UGh5c2ljYWxDZWxs''@;'; put 'put ''KGwsdmUsTSk7aD9ELnB1c2god2UpOnY/SkgoRCx2ZSx3ZSk6RFt2ZV09d2V9fSl9ZWxzZSBhcyhNLChVLHRlKT0+e2NvbnN0IG9lPXRoaXMuZ2V0QXRQaHlzaWNhbENlbGwobCx0ZSxNKTt2P0pIKEQsdGUsb2UpOkRbdGVdPW9lfSk7cmV0dXJuIER9c2V0QXRDZWxsKGwsYSxkKXtpZighKGw+''@;'; put 'put ''PXRoaXMuY291bnRSb3dzKCl8fGE+PXRoaXMuY291bnRGaXJzdFJvd0tleXMoKSkpe2lmKHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeVNvdXJjZURhdGEiKSl7Y29uc3QgaD12aChkKTt0aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5U291cmNlRGF0YSIsbCxhLGgsInNldCIpLGguaXNUb3VjaGVk''@;'; put 'put ''KCkmJihkPWgudmFsdWUpfVsiX19wcm90b19fIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiXS5pbmNsdWRlcyhsKXx8KE51bWJlci5pc0ludGVnZXIoYSk/dGhpcy5kYXRhW2xdW2FdPWQ6SkgodGhpcy5kYXRhW2xdLGEsZCkpfX1nZXRBdFBoeXNpY2FsQ2VsbChsLGEsZCl7bGV0IGg9bnVs''@;'; put 'put ''bDtpZihkKWlmKCJzdHJpbmciPT10eXBlb2YgYSl7Y29uc3R7ZGF0YURvdE5vdGF0aW9uOmZ9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7aD1mP3FIKGQsYSk6ZFthXX1lbHNlIGg9ImZ1bmN0aW9uIj09dHlwZW9mIGE/YShkKTpkW2FdO2lmKHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeVNvdXJj''@;'; put 'put ''ZURhdGEiKSl7Y29uc3QgZj12aChoKTt0aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5U291cmNlRGF0YSIsbCxhLGYsImdldCIpLGYuaXNUb3VjaGVkKCkmJihoPWYudmFsdWUpfXJldHVybiBofWdldEF0Q2VsbChsLGEpe2NvbnN0IGQ9dGhpcy5tb2RpZnlSb3dEYXRhKGwpO3JldHVybiB0aGlz''@;'; put 'put ''LmdldEF0UGh5c2ljYWxDZWxsKGwsdGhpcy5jb2xUb1Byb3AoYSksZCl9Z2V0QnlSYW5nZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/''@;'; put 'put ''YXJndW1lbnRzWzFdOm51bGwsZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdLGg9ITEsZj1udWxsLHY9bnVsbCxNPW51bGwsRD1udWxsO251bGw9PT1sfHxudWxsPT09YT8oaD0hMCxmPTAsTT10aGlzLmNvdW50Um93cygpLTEpOihmPU1h''@;'; put 'put ''dGgubWluKGwucm93LGEucm93KSx2PU1hdGgubWluKGwuY29sLGEuY29sKSxNPU1hdGgubWF4KGwucm93LGEucm93KSxEPU1hdGgubWF4KGwuY29sLGEuY29sKSk7Y29uc3QgVT1bXTtyZXR1cm4gUWEoZixNLHRlPT57VS5wdXNoKGg/dGhpcy5nZXRBdFJvdyh0ZSx2b2lkIDAsdm9pZCAwLGQp''@;'; put 'put ''OnRoaXMuZ2V0QXRSb3codGUsdixELGQpKX0pLFV9Z2V0Q29weWFibGUobCxhKXtjb25zdCBkPXRoaXMucHJvcFRvQ29sKGEpO3JldHVybiB0aGlzLmhvdC5nZXRDZWxsTWV0YShsLGQpLmNvcHlhYmxlP3RoaXMuZ2V0QXRDZWxsKHRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCksZCk6IiJ9Y291''@;'; put 'put ''bnRSb3dzKCl7aWYodGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5U291cmNlTGVuZ3RoIikpe2NvbnN0IGw9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVNvdXJjZUxlbmd0aCIpO2lmKE51bWJlci5pc0ludGVnZXIobCkpcmV0dXJuIGx9cmV0dXJuIHRoaXMuZGF0YS5sZW5ndGh9Y291bnRGaXJz''@;'; put 'put ''dFJvd0tleXMoKXtyZXR1cm4gb1EodGhpcy5kYXRhKX1kZXN0cm95KCl7dGhpcy5kYXRhPW51bGwsdGhpcy5ob3Q9bnVsbH19O2IoMjAyOTEpO2NvbnN0IFo1ZT17X2xvY2FsSG9va3M6T2JqZWN0LmNyZWF0ZShudWxsKSxhZGRMb2NhbEhvb2soYyxsKXtyZXR1cm4gdGhpcy5fbG9jYWxIb29r''@;'; put 'put ''c1tjXXx8KHRoaXMuX2xvY2FsSG9va3NbY109W10pLHRoaXMuX2xvY2FsSG9va3NbY10ucHVzaChsKSx0aGlzfSxyZW1vdmVMb2NhbEhvb2soYyxsKXtpZih0aGlzLl9sb2NhbEhvb2tzW2NdKXtjb25zdCBhPXRoaXMuX2xvY2FsSG9va3NbY10uaW5kZXhPZihsKTthPi0xJiZ0aGlzLl9sb2Nh''@;'; put 'put ''bEhvb2tzW2NdLnNwbGljZShhLDEpfXJldHVybiB0aGlzfSxydW5Mb2NhbEhvb2tzKGMsbCxhLGQsaCxmLHYpe2lmKHRoaXMuX2xvY2FsSG9va3NbY10pe2NvbnN0IE09dGhpcy5fbG9jYWxIb29rc1tjXS5sZW5ndGg7Zm9yKGxldCBEPTA7RDxNO0QrKylsTih0aGlzLl9sb2NhbEhvb2tzW2Nd''@;'; put 'put ''W0RdLHRoaXMsbCxhLGQsaCxmLHYpfX0sY2xlYXJMb2NhbEhvb2tzKCl7cmV0dXJuIHRoaXMuX2xvY2FsSG9va3M9e30sdGhpc319O1M0KFo1ZSwiTUlYSU5fTkFNRSIsImxvY2FsSG9va3MiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3QgWjA9WjVlO2Z1bmN0aW9uIFc1ZShj''@;'; put 'put ''LGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gWHN0KGMpe3ZhciBsPWZ1bmN0aW9uIHFzdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYo''@;'; put 'put ''Im9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5''@;'; put 'put ''cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgY3Z7Y29uc3RydWN0b3IoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQg''@;'; put 'put ''MCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtXNWUodGhpcywiaW5kZXhlZFZhbHVlcyIsW10pLFc1ZSh0aGlzLCJpbml0VmFsdWVPckZuIix2b2lkIDApLHRoaXMuaW5pdFZhbHVlT3JGbj1sfWdldFZhbHVlcygpe3JldHVybiB0aGlzLmluZGV4ZWRWYWx1ZXN9Z2V0VmFsdWVB''@;'; put 'put ''dEluZGV4KGwpe2NvbnN0IGE9dGhpcy5pbmRleGVkVmFsdWVzO2lmKGw8YS5sZW5ndGgpcmV0dXJuIGFbbF19c2V0VmFsdWVzKGwpe3RoaXMuaW5kZXhlZFZhbHVlcz1sLnNsaWNlKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiKX1zZXRWYWx1ZUF0SW5kZXgobCxhKXtyZXR1cm4gbDx0''@;'; put 'put ''aGlzLmluZGV4ZWRWYWx1ZXMubGVuZ3RoJiYodGhpcy5pbmRleGVkVmFsdWVzW2xdPWEsdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiKSwhMCl9Y2xlYXIoKXt0aGlzLnNldERlZmF1bHRWYWx1ZXMoKX1nZXRMZW5ndGgoKXtyZXR1cm4gdGhpcy5nZXRWYWx1ZXMoKS5sZW5ndGh9c2V0RGVm''@;'; put 'put ''YXVsdFZhbHVlcygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmluZGV4ZWRWYWx1ZXMubGVuZ3RoO3RoaXMuaW5kZXhlZFZhbHVlcy5sZW5ndGg9MCxpbCh0aGlzLmluaXRWYWx1ZU9yRm4pP1FhKGwtMSxhPT50aGlz''@;'; put 'put ''LmluZGV4ZWRWYWx1ZXMucHVzaCh0aGlzLmluaXRWYWx1ZU9yRm4oYSkpKTpRYShsLTEsKCk9PnRoaXMuaW5kZXhlZFZhbHVlcy5wdXNoKHRoaXMuaW5pdFZhbHVlT3JGbikpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIil9aW5pdChsKXtyZXR1cm4gdGhpcy5zZXREZWZhdWx0VmFsdWVz''@;'; put 'put ''KGwpLHRoaXMucnVuTG9jYWxIb29rcygiaW5pdCIpLHRoaXN9aW5zZXJ0KCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiKX1yZW1vdmUoKXt0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpfWRlc3Ryb3koKXt0aGlzLmNsZWFyTG9jYWxIb29rcygpLHRoaXMuaW5kZXhlZFZhbHVlcz1u''@;'; put 'put ''dWxsLHRoaXMuaW5pdFZhbHVlT3JGbj1udWxsfX1mdW5jdGlvbiBzUShjLGwsYSl7cmV0dXJuWy4uLmMuc2xpY2UoMCxsKSwuLi5hLC4uLmMuc2xpY2UobCldfWZ1bmN0aW9uIGhrKGMsbCl7cmV0dXJuIFM2KGMsYT0+ITE9PT1sLmluY2x1ZGVzKGEpKX1mdW5jdGlvbiBsUShjLGwpe3JldHVy''@;'; put 'put ''biBacyhjLGE9PmEtbC5maWx0ZXIoZD0+ZDxhKS5sZW5ndGgpfWZ1bmN0aW9uIGNRKGMsbCl7Y29uc3QgYT1sWzBdLGQ9bC5sZW5ndGg7cmV0dXJuIFpzKGMsaD0+aD49YT9oK2Q6aCl9cGwoY3YsWjApO2NsYXNzIFk1ZSBleHRlbmRzIGN2e2NvbnN0cnVjdG9yKCl7c3VwZXIobD0+bCl9aW5z''@;'; put 'put ''ZXJ0KGwsYSl7Y29uc3QgZD1jUSh0aGlzLmluZGV4ZWRWYWx1ZXMsYSk7dGhpcy5pbmRleGVkVmFsdWVzPXNRKGQsbCxhKSxzdXBlci5pbnNlcnQobCxhKX1yZW1vdmUobCl7Y29uc3QgYT1oayh0aGlzLmluZGV4ZWRWYWx1ZXMsbCk7dGhpcy5pbmRleGVkVmFsdWVzPWxRKGEsbCksc3VwZXIu''@;'; put 'put ''cmVtb3ZlKGwpfX1mdW5jdGlvbiB1UShjLGwsYSxkKXtjb25zdCBoPWEubGVuZ3RoP2FbMF06dm9pZCAwO3JldHVyblsuLi5jLnNsaWNlKDAsaCksLi4uYS5tYXAoKGYsdik9PmlsKGQpP2QoZix2KTpkKSwuLi52b2lkIDA9PT1oP1tdOmMuc2xpY2UoaCldfWZ1bmN0aW9uIGRRKGMsbCl7cmV0''@;'; put 'put ''dXJuIFM2KGMsKGEsZCk9PiExPT09bC5pbmNsdWRlcyhkKSl9Y2xhc3MgRjYgZXh0ZW5kcyBjdntpbnNlcnQobCxhKXt0aGlzLmluZGV4ZWRWYWx1ZXM9dVEodGhpcy5pbmRleGVkVmFsdWVzLDAsYSx0aGlzLmluaXRWYWx1ZU9yRm4pLHN1cGVyLmluc2VydChsLGEpfXJlbW92ZShsKXt0aGlz''@;'; put 'put ''LmluZGV4ZWRWYWx1ZXM9ZFEodGhpcy5pbmRleGVkVmFsdWVzLGwpLHN1cGVyLnJlbW92ZShsKX19Y2xhc3MgQU4gZXh0ZW5kcyBGNntjb25zdHJ1Y3Rvcigpe3N1cGVyKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0pfWdldEhpZGRlbklu''@;'; put 'put ''ZGV4ZXMoKXtyZXR1cm4gYTAodGhpcy5nZXRWYWx1ZXMoKSwobCxhLGQpPT4oYSYmbC5wdXNoKGQpLGwpLFtdKX19Y2xhc3Mga04gZXh0ZW5kcyBjdntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gSnN0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBRc3QoYyl7''@;'; put 'put ''dmFyIGw9ZnVuY3Rpb24gZWx0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywib3JkZXJPZkluZGV4ZXMiLFtdKX1nZXRWYWx1ZXMoKXtyZXR1cm4gdGhpcy5vcmRlck9mSW5kZXhlcy5tYXAobD0+dGhpcy5pbmRleGVk''@;'; put 'put ''VmFsdWVzW2xdKX1zZXRWYWx1ZXMobCl7dGhpcy5vcmRlck9mSW5kZXhlcz1bLi4uQXJyYXkobC5sZW5ndGgpLmtleXMoKV0sc3VwZXIuc2V0VmFsdWVzKGwpfXNldFZhbHVlQXRJbmRleChsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3Vt''@;'; put 'put ''ZW50c1syXTp0aGlzLm9yZGVyT2ZJbmRleGVzLmxlbmd0aDtyZXR1cm4gbDx0aGlzLmluZGV4ZWRWYWx1ZXMubGVuZ3RoJiYodGhpcy5pbmRleGVkVmFsdWVzW2xdPWEsITE9PT10aGlzLm9yZGVyT2ZJbmRleGVzLmluY2x1ZGVzKGwpJiZ0aGlzLm9yZGVyT2ZJbmRleGVzLnNwbGljZShkLDAs''@;'; put 'put ''bCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiKSwhMCl9Y2xlYXJWYWx1ZShsKXt0aGlzLm9yZGVyT2ZJbmRleGVzPWhrKHRoaXMub3JkZXJPZkluZGV4ZXMsW2xdKSxpbCh0aGlzLmluaXRWYWx1ZU9yRm4pP3N1cGVyLnNldFZhbHVlQXRJbmRleChsLHRoaXMuaW5pdFZhbHVlT3JGbihs''@;'; put 'put ''KSk6c3VwZXIuc2V0VmFsdWVBdEluZGV4KGwsdGhpcy5pbml0VmFsdWVPckZuKX1nZXRMZW5ndGgoKXtyZXR1cm4gdGhpcy5vcmRlck9mSW5kZXhlcy5sZW5ndGh9c2V0RGVmYXVsdFZhbHVlcygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3Vt''@;'; put 'put ''ZW50c1swXTp0aGlzLmluZGV4ZWRWYWx1ZXMubGVuZ3RoO3RoaXMub3JkZXJPZkluZGV4ZXMubGVuZ3RoPTAsc3VwZXIuc2V0RGVmYXVsdFZhbHVlcyhsKX1pbnNlcnQobCxhKXt0aGlzLmluZGV4ZWRWYWx1ZXM9dVEodGhpcy5pbmRleGVkVmFsdWVzLDAsYSx0aGlzLmluaXRWYWx1ZU9yRm4p''@;'; put 'put ''LHRoaXMub3JkZXJPZkluZGV4ZXM9Y1EodGhpcy5vcmRlck9mSW5kZXhlcyxhKSxzdXBlci5pbnNlcnQobCxhKX1yZW1vdmUobCl7dGhpcy5pbmRleGVkVmFsdWVzPWRRKHRoaXMuaW5kZXhlZFZhbHVlcyxsKSx0aGlzLm9yZGVyT2ZJbmRleGVzPWhrKHRoaXMub3JkZXJPZkluZGV4ZXMsbCks''@;'; put 'put ''dGhpcy5vcmRlck9mSW5kZXhlcz1sUSh0aGlzLm9yZGVyT2ZJbmRleGVzLGwpLHN1cGVyLnJlbW92ZShsKX1nZXRFbnRyaWVzKCl7cmV0dXJuIHRoaXMub3JkZXJPZkluZGV4ZXMubWFwKGw9PltsLHRoaXMuZ2V0VmFsdWVBdEluZGV4KGwpXSl9fWNsYXNzIGZrIGV4dGVuZHMgRjZ7Y29uc3Ry''@;'; put 'put ''dWN0b3IoKXtzdXBlcihhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKX1nZXRUcmltbWVkSW5kZXhlcygpe3JldHVybiBhMCh0aGlzLmdldFZhbHVlcygpLChsLGEsZCk9PihhJiZsLnB1c2goZCksbCksW10pfX1jb25zdCBHNWU9bmV3IE1h''@;'; put 'put ''cChbWyJoaWRpbmciLEFOXSxbImluZGV4Iixjdl0sWyJsaW5rZWRQaHlzaWNhbEluZGV4VG9WYWx1ZSIsa05dLFsicGh5c2ljYWxJbmRleFRvVmFsdWUiLEY2XSxbInRyaW1taW5nIixma11dKTtsZXQgaFE9MDtjbGFzcyBmUXtjb25zdHJ1Y3RvcigpeyFmdW5jdGlvbiBubHQoYyxsLGEpe3Jl''@;'; put 'put ''dHVybihsPWZ1bmN0aW9uIHJsdChjKXt2YXIgbD1mdW5jdGlvbiBpbHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3Qi''@;'; put 'put ''IT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9s''@;'; put 'put ''OmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJjb2xsZWN0aW9uIixuZXcgTWFwKX1yZWdpc3RlcihsLGEpeyExPT09dGhpcy5jb2xsZWN0aW9u''@;'; put 'put ''LmhhcyhsKSYmKHRoaXMuY29sbGVjdGlvbi5zZXQobCxhKSxhLmFkZExvY2FsSG9vaygiY2hhbmdlIiwoKT0+dGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGEpKSxoUSs9MSl9dW5yZWdpc3RlcihsKXtjb25zdCBhPXRoaXMuY29sbGVjdGlvbi5nZXQobCk7TWEoYSkmJihhLmRlc3Ryb3ko''@;'; put 'put ''KSx0aGlzLmNvbGxlY3Rpb24uZGVsZXRlKGwpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixhKSxoUS09MSl9dW5yZWdpc3RlckFsbCgpe3RoaXMuY29sbGVjdGlvbi5mb3JFYWNoKChsLGEpPT50aGlzLnVucmVnaXN0ZXIoYSkpLHRoaXMuY29sbGVjdGlvbi5jbGVhcigpfWdldChsKXty''@;'; put 'put ''ZXR1cm4gYmMobCk/QXJyYXkuZnJvbSh0aGlzLmNvbGxlY3Rpb24udmFsdWVzKCkpOnRoaXMuY29sbGVjdGlvbi5nZXQobCl9Z2V0TGVuZ3RoKCl7cmV0dXJuIHRoaXMuY29sbGVjdGlvbi5zaXplfXJlbW92ZUZyb21FdmVyeShsKXt0aGlzLmNvbGxlY3Rpb24uZm9yRWFjaChhPT57YS5yZW1v''@;'; put 'put ''dmUobCl9KX1pbnNlcnRUb0V2ZXJ5KGwsYSl7dGhpcy5jb2xsZWN0aW9uLmZvckVhY2goZD0+e2QuaW5zZXJ0KGwsYSl9KX1pbml0RXZlcnkobCl7dGhpcy5jb2xsZWN0aW9uLmZvckVhY2goYT0+e2EuaW5pdChsKX0pfX1mdW5jdGlvbiBwUShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gb2x0''@;'; put 'put ''KGMpe3ZhciBsPWZ1bmN0aW9uIHNsdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBk''@;'; put 'put ''O3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9cGwoZlEsWjApO2NsYXNzICQ1ZSBleHRlbmRzIGZRe2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoKSxwUSh0aGlzLCJtZXJnZWRWYWx1ZXNDYWNo''@;'; put 'put ''ZSIsW10pLHBRKHRoaXMsImFnZ3JlZ2F0aW9uRnVuY3Rpb24iLHZvaWQgMCkscFEodGhpcywiZmFsbGJhY2tWYWx1ZSIsdm9pZCAwKSx0aGlzLmFnZ3JlZ2F0aW9uRnVuY3Rpb249bCx0aGlzLmZhbGxiYWNrVmFsdWU9YX1nZXRNZXJnZWRWYWx1ZXMoKXtpZighMD09PSghKGFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdKSlyZXR1cm4gdGhpcy5tZXJnZWRWYWx1ZXNDYWNoZTtpZigwPT09dGhpcy5nZXRMZW5ndGgoKSlyZXR1cm5bXTtjb25zdCBhPVpzKHRoaXMuZ2V0KCksZj0+Zi5nZXRWYWx1ZXMoKSksZD1bXSxoPU1hKGFbMF0p''@;'; put 'put ''JiZhWzBdLmxlbmd0aHx8MDtmb3IobGV0IGY9MDtmPGg7Zis9MSl7Y29uc3Qgdj1bXTtmb3IobGV0IE09MDtNPHRoaXMuZ2V0TGVuZ3RoKCk7TSs9MSl2LnB1c2goYVtNXVtmXSk7ZC5wdXNoKHYpfXJldHVybiBacyhkLHRoaXMuYWdncmVnYXRpb25GdW5jdGlvbil9Z2V0TWVyZ2VkVmFsdWVB''@;'; put 'put ''dEluZGV4KGwsYSl7Y29uc3QgZD10aGlzLmdldE1lcmdlZFZhbHVlcyhhKVtsXTtyZXR1cm4gTWEoZCk/ZDp0aGlzLmZhbGxiYWNrVmFsdWV9dXBkYXRlQ2FjaGUoKXt0aGlzLm1lcmdlZFZhbHVlc0NhY2hlPXRoaXMuZ2V0TWVyZ2VkVmFsdWVzKCExKX19ZnVuY3Rpb24gSzVlKGMsbCxhKXtp''@;'; put 'put ''ZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgZ1E9bmV3IFdlYWtNYXA7Y2xhc3MgWDVl''@;'; put 'put ''e2NvbnN0cnVjdG9yKCl7IWZ1bmN0aW9uIGxsdChjLGwsYSl7KGZ1bmN0aW9uIGNsdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0''@;'; put 'put ''KGMsYSl9KHRoaXMsZ1EsW10pfXN1YnNjcmliZShsKXtyZXR1cm4gdGhpcy5hZGRMb2NhbEhvb2soImNoYW5nZSIsbCksdGhpcy5fd3JpdGUoZnVuY3Rpb24gZGx0KGMsbCl7cmV0dXJuIGMuZ2V0KEs1ZShjLGwpKX0oZ1EsdGhpcykpLHRoaXN9dW5zdWJzY3JpYmUoKXtyZXR1cm4gdGhpcy5y''@;'; put 'put ''dW5Mb2NhbEhvb2tzKCJ1bnN1YnNjcmliZSIpLHRoaXMuY2xlYXJMb2NhbEhvb2tzKCksdGhpc31fd3JpdGUobCl7cmV0dXJuIGwubGVuZ3RoPjAmJnRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixsKSx0aGlzfV93cml0ZUluaXRpYWxDaGFuZ2VzKGwpeyFmdW5jdGlvbiB1bHQoYyxsLGEp''@;'; put 'put ''e2Muc2V0KEs1ZShjLGwpLGEpfShnUSx0aGlzLGwpfX1mdW5jdGlvbiBxNWUoYyxsKXtjb25zdCBhPVtdO2xldCBkPTAsaD0wO2Zvcig7ZDxjLmxlbmd0aCYmaDxsLmxlbmd0aDtkKyssaCsrKWNbZF0hPT1sW2hdJiZhLnB1c2goe29wOiJyZXBsYWNlIixpbmRleDpoLG9sZFZhbHVlOmNbZF0s''@;'; put 'put ''bmV3VmFsdWU6bFtoXX0pO2Zvcig7ZDxsLmxlbmd0aDtkKyspYS5wdXNoKHtvcDoiaW5zZXJ0IixpbmRleDpkLG9sZFZhbHVlOnZvaWQgMCxuZXdWYWx1ZTpsW2RdfSk7Zm9yKDtoPGMubGVuZ3RoO2grKylhLnB1c2goe29wOiJyZW1vdmUiLGluZGV4Omgsb2xkVmFsdWU6Y1toXSxuZXdWYWx1''@;'; put 'put ''ZTp2b2lkIDB9KTtyZXR1cm4gYX1mdW5jdGlvbiBwayhjLGwsYSl7KGZ1bmN0aW9uIGhsdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwu''@;'; put 'put ''c2V0KGMsYSl9ZnVuY3Rpb24gWmYoYyxsKXtyZXR1cm4gYy5nZXQoSjVlKGMsbCkpfWZ1bmN0aW9uIEROKGMsbCxhKXtyZXR1cm4gYy5zZXQoSjVlKGMsbCksYSksYX1mdW5jdGlvbiBKNWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXBsKFg1ZSxaMCk7dmFyIElOPW5ldyBXZWFrTWFwLGdrPW5ldyBXZWFrTWFwLFJOPW5ldyBXZWFrTWFwLExOPW5ldyBXZWFrTWFwLE9O''@;'; put 'put ''PW5ldyBXZWFrTWFwO2NsYXNzIGZsdHtjb25zdHJ1Y3Rvcigpe2xldHtpbml0aWFsSW5kZXhWYWx1ZTpsfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307cGsodGhpcyxJTixuZXcgU2V0KSxwayh0aGlzLGdrLFtdKSxwayh0aGlzLFJO''@;'; put 'put ''LFtdKSxwayh0aGlzLExOLCExKSxwayh0aGlzLE9OLCExKSxETihPTix0aGlzLGw/PyExKX1jcmVhdGVPYnNlcnZlcigpe2NvbnN0IGw9bmV3IFg1ZTtyZXR1cm4gWmYoSU4sdGhpcykuYWRkKGwpLGwuYWRkTG9jYWxIb29rKCJ1bnN1YnNjcmliZSIsKCk9PntaZihJTix0aGlzKS5kZWxldGUo''@;'; put 'put ''bCl9KSxsLl93cml0ZUluaXRpYWxDaGFuZ2VzKHE1ZShaZihnayx0aGlzKSxaZihSTix0aGlzKSkpLGx9ZW1pdChsKXtsZXQgYT1aZihSTix0aGlzKTsoIVpmKExOLHRoaXMpfHxaZihnayx0aGlzKS5sZW5ndGghPT1sLmxlbmd0aCkmJigwPT09bC5sZW5ndGg/bD1uZXcgQXJyYXkoYS5sZW5n''@;'; put 'put ''dGgpLmZpbGwoWmYoT04sdGhpcykpOkROKGdrLHRoaXMsbmV3IEFycmF5KGwubGVuZ3RoKS5maWxsKFpmKE9OLHRoaXMpKSksWmYoTE4sdGhpcyl8fChETihMTix0aGlzLCEwKSxhPVpmKGdrLHRoaXMpKSk7Y29uc3QgZD1xNWUoYSxsKTtaZihJTix0aGlzKS5mb3JFYWNoKGg9PmguX3dyaXRl''@;'; put 'put ''KGQpKSxETihSTix0aGlzLGwpfX1mdW5jdGlvbiBrZChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gcGx0KGMpe3ZhciBsPWZ1bmN0aW9uIGdsdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEp''@;'; put 'put ''e3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShj''@;'; put 'put ''KX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgbVF7Y29uc3RydWN0b3Io''@;'; put 'put ''KXtrZCh0aGlzLCJpbmRleGVzU2VxdWVuY2UiLG5ldyBZNWUpLGtkKHRoaXMsInRyaW1taW5nTWFwc0NvbGxlY3Rpb24iLG5ldyAkNWUobD0+bC5zb21lKGE9PiEwPT09YSksITEpKSxrZCh0aGlzLCJoaWRpbmdNYXBzQ29sbGVjdGlvbiIsbmV3ICQ1ZShsPT5sLnNvbWUoYT0+ITA9PT1hKSwh''@;'; put 'put ''MSkpLGtkKHRoaXMsInZhcmlvdXNNYXBzQ29sbGVjdGlvbiIsbmV3IGZRKSxrZCh0aGlzLCJoaWRpbmdDaGFuZ2VzT2JzZXJ2YWJsZSIsbmV3IGZsdCh7aW5pdGlhbEluZGV4VmFsdWU6ITF9KSksa2QodGhpcywibm90VHJpbW1lZEluZGV4ZXNDYWNoZSIsW10pLGtkKHRoaXMsIm5vdEhpZGRl''@;'; put 'put ''bkluZGV4ZXNDYWNoZSIsW10pLGtkKHRoaXMsImlzQmF0Y2hlZCIsITEpLGtkKHRoaXMsImluZGV4ZXNTZXF1ZW5jZUNoYW5nZWQiLCExKSxrZCh0aGlzLCJpbmRleGVzQ2hhbmdlU291cmNlIix2b2lkIDApLGtkKHRoaXMsInRyaW1tZWRJbmRleGVzQ2hhbmdlZCIsITEpLGtkKHRoaXMsImhp''@;'; put 'put ''ZGRlbkluZGV4ZXNDaGFuZ2VkIiwhMSksa2QodGhpcywicmVuZGVyYWJsZVBoeXNpY2FsSW5kZXhlc0NhY2hlIixbXSksa2QodGhpcywiZnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzQ2FjaGUiLG5ldyBNYXApLGtkKHRoaXMsImZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUi''@;'; put 'put ''LG5ldyBNYXApLHRoaXMuaW5kZXhlc1NlcXVlbmNlLmFkZExvY2FsSG9vaygiY2hhbmdlIiwoKT0+e3RoaXMuaW5kZXhlc1NlcXVlbmNlQ2hhbmdlZD0hMCx0aGlzLnVwZGF0ZUNhY2hlKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJpbmRleGVzU2VxdWVuY2VDaGFuZ2UiLHRoaXMuaW5kZXhlc0No''@;'; put 'put ''YW5nZVNvdXJjZSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLHRoaXMuaW5kZXhlc1NlcXVlbmNlLG51bGwpfSksdGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLmFkZExvY2FsSG9vaygiY2hhbmdlIixsPT57dGhpcy50cmltbWVkSW5kZXhlc0NoYW5nZWQ9ITAsdGhpcy51cGRhdGVD''@;'; put 'put ''YWNoZSgpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixsLHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbil9KSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLmFkZExvY2FsSG9vaygiY2hhbmdlIixsPT57dGhpcy5oaWRkZW5JbmRleGVzQ2hhbmdlZD0hMCx0aGlzLnVwZGF0ZUNhY2hl''@;'; put 'put ''KCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGwsdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbil9KSx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImNoYW5nZSIsbD0+e3RoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixsLHRoaXMudmFyaW91c01hcHNDb2xs''@;'; put 'put ''ZWN0aW9uKX0pfXN1c3BlbmRPcGVyYXRpb25zKCl7dGhpcy5pc0JhdGNoZWQ9ITB9cmVzdW1lT3BlcmF0aW9ucygpe3RoaXMuaXNCYXRjaGVkPSExLHRoaXMudXBkYXRlQ2FjaGUoKX1jcmVhdGVDaGFuZ2VzT2JzZXJ2ZXIobCl7aWYoImhpZGluZyIhPT1sKXRocm93IG5ldyBFcnJvcihgVW5z''@;'; put 'put ''dXBwb3J0ZWQgaW5kZXggbWFwIHR5cGUgIiR7bH0iLmApO3JldHVybiB0aGlzLmhpZGluZ0NoYW5nZXNPYnNlcnZhYmxlLmNyZWF0ZU9ic2VydmVyKCl9Y3JlYXRlQW5kUmVnaXN0ZXJJbmRleE1hcChsLGEsZCl7cmV0dXJuIHRoaXMucmVnaXN0ZXJNYXAobCxmdW5jdGlvbiB0bHQoYyl7bGV0''@;'; put 'put ''IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7aWYoIUc1ZS5oYXMoYykpdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvdmlkZWQgbWFwIHR5cGUgKCIke2N9IikgZG9lcyBub3QgZXhpc3QuYCk7cmV0dXJuIG5ldyhHNWUuZ2V0KGMp''@;'; put 'put ''KShsKX0oYSxkKSl9cmVnaXN0ZXJNYXAobCxhKXtpZih0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24uZ2V0KGwpfHx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLmdldChsKXx8dGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24uZ2V0KGwpKXRocm93IEVycm9yKGBNYXAgd2l0aCBuYW1lICIk''@;'; put 'put ''e2x9IiBoYXMgYmVlbiBhbHJlYWR5IHJlZ2lzdGVyZWQuYCk7YSBpbnN0YW5jZW9mIGZrP3RoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5yZWdpc3RlcihsLGEpOmEgaW5zdGFuY2VvZiBBTj90aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLnJlZ2lzdGVyKGwsYSk6dGhpcy52YXJpb3VzTWFw''@;'; put 'put ''c0NvbGxlY3Rpb24ucmVnaXN0ZXIobCxhKTtjb25zdCBkPXRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCk7cmV0dXJuIGQ+MCYmYS5pbml0KGQpLGF9dW5yZWdpc3Rlck1hcChsKXt0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlcihsKSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0''@;'; put 'put ''aW9uLnVucmVnaXN0ZXIobCksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlcihsKX11bnJlZ2lzdGVyQWxsKCl7dGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLnVucmVnaXN0ZXJBbGwoKSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLnVucmVnaXN0ZXJBbGwoKSx0aGlz''@;'; put 'put ''LnZhcmlvdXNNYXBzQ29sbGVjdGlvbi51bnJlZ2lzdGVyQWxsKCl9Z2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgobCl7Y29uc3QgYT10aGlzLm5vdFRyaW1tZWRJbmRleGVzQ2FjaGVbbF07cmV0dXJuIE1hKGEpP2E6bnVsbH1nZXRQaHlzaWNhbEZyb21SZW5kZXJhYmxlSW5kZXgobCl7Y29u''@;'; put 'put ''c3QgYT10aGlzLnJlbmRlcmFibGVQaHlzaWNhbEluZGV4ZXNDYWNoZVtsXTtyZXR1cm4gTWEoYSk/YTpudWxsfWdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KGwpe2NvbnN0IGE9dGhpcy5mcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXNDYWNoZS5nZXQobCk7cmV0dXJuIE1hKGEpP2E6bnVs''@;'; put 'put ''bH1nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGwpe3JldHVybiB0aGlzLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KHRoaXMuZ2V0UGh5c2ljYWxGcm9tUmVuZGVyYWJsZUluZGV4KGwpKX1nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGwpe2NvbnN0IGE9dGhpcy5mcm9tVmlz''@;'; put 'put ''dWFsVG9SZW5kZXJhYmxlSW5kZXhlc0NhY2hlLmdldChsKTtyZXR1cm4gTWEoYSk/YTpudWxsfWdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07aWYobnVsbD09PXRoaXMuZ2V0''@;'; put 'put ''UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgobCkpcmV0dXJuIG51bGw7aWYodGhpcy5mcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlc0NhY2hlLmhhcyhsKSlyZXR1cm4gbDtjb25zdCBmPUFycmF5LmZyb20odGhpcy5mcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlc0NhY2hlLmtleXMoKSk7''@;'; put 'put ''bGV0IHY9LTE7cmV0dXJuIHY9YT4wP2YuZmluZEluZGV4KE09Pk0+bCk6Zi5yZXZlcnNlKCkuZmluZEluZGV4KE09Pk08bCksLTE9PT12P2Q/dGhpcy5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobCwtYSwhMSk6bnVsbDpmW3ZdfWluaXRUb0xlbmd0aCgpe2xldCBsPWFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdldE51bWJlck9mSW5kZXhlcygpO3RoaXMubm90VHJpbW1lZEluZGV4ZXNDYWNoZT1bLi4ubmV3IEFycmF5KGwpLmtleXMoKV0sdGhpcy5ub3RIaWRkZW5JbmRleGVzQ2FjaGU9Wy4uLm5ldyBBcnJheShsKS5r''@;'; put 'put ''ZXlzKCldLHRoaXMuc3VzcGVuZE9wZXJhdGlvbnMoKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9ImluaXQiLHRoaXMuaW5kZXhlc1NlcXVlbmNlLmluaXQobCksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPXZvaWQgMCx0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24uaW5pdEV2ZXJ5KGwp''@;'; put 'put ''LHRoaXMucmVzdW1lT3BlcmF0aW9ucygpLHRoaXMuc3VzcGVuZE9wZXJhdGlvbnMoKSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLmluaXRFdmVyeShsKSx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi5pbml0RXZlcnkobCksdGhpcy5yZXN1bWVPcGVyYXRpb25zKCksdGhpcy5ydW5Mb2Nh''@;'; put 'put ''bEhvb2tzKCJpbml0Iil9Zml0VG9MZW5ndGgobCl7Y29uc3QgYT10aGlzLmdldE51bWJlck9mSW5kZXhlcygpO2lmKGw8YSl7Y29uc3QgZD1bLi4uQXJyYXkodGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKS1sKS5rZXlzKCldLm1hcChoPT5oK2wpO3RoaXMucmVtb3ZlSW5kZXhlcyhkKX1lbHNl''@;'; put 'put ''IHRoaXMuaW5zZXJ0SW5kZXhlcyhhLGwtYSl9Z2V0SW5kZXhlc1NlcXVlbmNlKCl7cmV0dXJuIHRoaXMuaW5kZXhlc1NlcXVlbmNlLmdldFZhbHVlcygpfXNldEluZGV4ZXNTZXF1ZW5jZShsKXt2b2lkIDA9PT10aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2UmJih0aGlzLmluZGV4ZXNDaGFuZ2VT''@;'; put 'put ''b3VyY2U9InVwZGF0ZSIpLHRoaXMuaW5kZXhlc1NlcXVlbmNlLnNldFZhbHVlcyhsKSwidXBkYXRlIj09PXRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZSYmKHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT12b2lkIDApfWdldE5vdFRyaW1tZWRJbmRleGVzKCl7cmV0dXJuITA9PT0oIShhcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSk/dGhpcy5ub3RUcmltbWVkSW5kZXhlc0NhY2hlOnRoaXMuZ2V0SW5kZXhlc1NlcXVlbmNlKCkuZmlsdGVyKGQ9PiExPT09dGhpcy5pc1RyaW1tZWQoZCkpfWdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3Ro''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoKS5sZW5ndGh9Z2V0Tm90SGlkZGVuSW5kZXhlcygpe3JldHVybiEwPT09KCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0pP3RoaXMubm90SGlkZGVuSW5kZXhlc0NhY2hl''@;'; put 'put ''OnRoaXMuZ2V0SW5kZXhlc1NlcXVlbmNlKCkuZmlsdGVyKGQ9PiExPT09dGhpcy5pc0hpZGRlbihkKSl9Z2V0Tm90SGlkZGVuSW5kZXhlc0xlbmd0aCgpe3JldHVybiB0aGlzLmdldE5vdEhpZGRlbkluZGV4ZXMoKS5sZW5ndGh9Z2V0UmVuZGVyYWJsZUluZGV4ZXMoKXtyZXR1cm4hMD09PSgh''@;'; put 'put ''KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdKT90aGlzLnJlbmRlcmFibGVQaHlzaWNhbEluZGV4ZXNDYWNoZTp0aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzKCkuZmlsdGVyKGQ9PiExPT09dGhpcy5pc0hpZGRlbihkKSl9Z2V0UmVuZGVy''@;'; put 'put ''YWJsZUluZGV4ZXNMZW5ndGgoKXtyZXR1cm4gdGhpcy5nZXRSZW5kZXJhYmxlSW5kZXhlcygpLmxlbmd0aH1nZXROdW1iZXJPZkluZGV4ZXMoKXtyZXR1cm4gdGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKS5sZW5ndGh9bW92ZUluZGV4ZXMobCxhKXsibnVtYmVyIj09dHlwZW9mIGwmJihsPVts''@;'; put 'put ''XSk7Y29uc3QgZD1acyhsLFU9PnRoaXMuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgoVSkpLGg9dGhpcy5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpLGY9bC5sZW5ndGgsdj1oayh0aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLGQpLE09di5maWx0ZXIoVT0+ITE9PT10aGlzLmlzVHJp''@;'; put 'put ''bW1lZChVKSk7bGV0IEQ9di5pbmRleE9mKE1bTS5sZW5ndGgtMV0pKzE7YStmPGgmJihEPXYuaW5kZXhPZihNW2FdKSksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPSJtb3ZlIix0aGlzLnNldEluZGV4ZXNTZXF1ZW5jZShzUSh2LEQsZCkpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT12b2lk''@;'; put 'put ''IDB9aXNUcmltbWVkKGwpe3JldHVybiB0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24uZ2V0TWVyZ2VkVmFsdWVBdEluZGV4KGwpfWlzSGlkZGVuKGwpe3JldHVybiB0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLmdldE1lcmdlZFZhbHVlQXRJbmRleChsKX1pbnNlcnRJbmRleGVzKGwsYSl7''@;'; put 'put ''bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiJzdGFydCI7Y29uc3QgaD10aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzKClbbF0sZj1NYShoKT9oOnRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCksdj10aGlzLmdldEluZGV4ZXNTZXF1''@;'; put 'put ''ZW5jZSgpLmluY2x1ZGVzKGgpP3RoaXMuZ2V0SW5kZXhlc1NlcXVlbmNlKCkuaW5kZXhPZihoKTp0aGlzLmdldE51bWJlck9mSW5kZXhlcygpLE09WnMobmV3IEFycmF5KGEpLmZpbGwoZiksKFUsdGUpPT5VK3RlKTt0aGlzLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5pbmRleGVzQ2hhbmdl''@;'; put 'put ''U291cmNlPSJpbnNlcnQiLHRoaXMuaW5kZXhlc1NlcXVlbmNlLmluc2VydCh2LE0pLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT12b2lkIDA7Y29uc3QgRD0iZW5kIj09PWQ/TS5tYXAoVT0+VSsxKTpNO3RoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5pbnNlcnRUb0V2ZXJ5KHYsRCksdGhp''@;'; put 'put ''cy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5pbnNlcnRUb0V2ZXJ5KHYsRCksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24uaW5zZXJ0VG9FdmVyeSh2LEQpLHRoaXMucmVzdW1lT3BlcmF0aW9ucygpfXJlbW92ZUluZGV4ZXMobCl7dGhpcy5zdXNwZW5kT3BlcmF0aW9ucygpLHRoaXMuaW5kZXhl''@;'; put 'put ''c0NoYW5nZVNvdXJjZT0icmVtb3ZlIix0aGlzLmluZGV4ZXNTZXF1ZW5jZS5yZW1vdmUobCksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPXZvaWQgMCx0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24ucmVtb3ZlRnJvbUV2ZXJ5KGwpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24ucmVtb3Zl''@;'; put 'put ''RnJvbUV2ZXJ5KGwpLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLnJlbW92ZUZyb21FdmVyeShsKSx0aGlzLnJlc3VtZU9wZXJhdGlvbnMoKX11cGRhdGVDYWNoZSgpeyghMD09PShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKXx8ITE9''@;'; put 'put ''PT10aGlzLmlzQmF0Y2hlZCYmITA9PT0odGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkfHx0aGlzLnRyaW1tZWRJbmRleGVzQ2hhbmdlZHx8dGhpcy5oaWRkZW5JbmRleGVzQ2hhbmdlZCkpJiYodGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLnVwZGF0ZUNhY2hlKCksdGhpcy5oaWRpbmdN''@;'; put 'put ''YXBzQ29sbGVjdGlvbi51cGRhdGVDYWNoZSgpLHRoaXMubm90VHJpbW1lZEluZGV4ZXNDYWNoZT10aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzKCExKSx0aGlzLm5vdEhpZGRlbkluZGV4ZXNDYWNoZT10aGlzLmdldE5vdEhpZGRlbkluZGV4ZXMoITEpLHRoaXMucmVuZGVyYWJsZVBoeXNpY2Fs''@;'; put 'put ''SW5kZXhlc0NhY2hlPXRoaXMuZ2V0UmVuZGVyYWJsZUluZGV4ZXMoITEpLHRoaXMuY2FjaGVGcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXMoKSx0aGlzLmNhY2hlRnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXMoKSx0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkJiZ0aGlzLmhpZGluZ0No''@;'; put 'put ''YW5nZXNPYnNlcnZhYmxlLmVtaXQodGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5nZXRNZXJnZWRWYWx1ZXMoKSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjYWNoZVVwZGF0ZWQiLHtpbmRleGVzU2VxdWVuY2VDaGFuZ2VkOnRoaXMuaW5kZXhlc1NlcXVlbmNlQ2hhbmdlZCx0cmltbWVkSW5kZXhl''@;'; put 'put ''c0NoYW5nZWQ6dGhpcy50cmltbWVkSW5kZXhlc0NoYW5nZWQsaGlkZGVuSW5kZXhlc0NoYW5nZWQ6dGhpcy5oaWRkZW5JbmRleGVzQ2hhbmdlZH0pLHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2hhbmdlZD0hMSx0aGlzLnRyaW1tZWRJbmRleGVzQ2hhbmdlZD0hMSx0aGlzLmhpZGRlbkluZGV4ZXND''@;'; put 'put ''aGFuZ2VkPSExKX1jYWNoZUZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlcygpe2NvbnN0IGw9dGhpcy5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpO3RoaXMuZnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzQ2FjaGUuY2xlYXIoKTtmb3IobGV0IGE9MDthPGw7YSs9MSl7Y29uc3QgZD10''@;'; put 'put ''aGlzLmdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4KGEpO3RoaXMuZnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzQ2FjaGUuc2V0KGQsYSl9fWNhY2hlRnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXMoKXtjb25zdCBsPXRoaXMuZ2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKTt0aGlz''@;'; put 'put ''LmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuY2xlYXIoKTtmb3IobGV0IGE9MDthPGw7YSs9MSl7Y29uc3QgZD10aGlzLmdldFBoeXNpY2FsRnJvbVJlbmRlcmFibGVJbmRleChhKSxoPXRoaXMuZ2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgoZCk7dGhpcy5mcm9tVmlzdWFs''@;'; put 'put ''VG9SZW5kZXJhYmxlSW5kZXhlc0NhY2hlLnNldChoLGEpfX19ZnVuY3Rpb24gUTVlKGMpe2NvbnN0IGE9L14oW2EtekEtWl17Mn0pLShbYS16QS1aXXsyfSkkLy5leGVjKGMpO3JldHVybiBhP2Ake2FbMV0udG9Mb3dlckNhc2UoKX0tJHthWzJdLnRvVXBwZXJDYXNlKCl9YDpjfWZ1bmN0aW9u''@;'; put 'put ''IGVtZShjKXtNYShjKSYmZEooWHNgTGFuZ3VhZ2Ugd2l0aCBjb2RlICIke2N9IiB3YXMgbm90IGZvdW5kLiBZb3Ugc2hvdWxkIHJlZ2lzdGVyIHBhcnRpY3VsYXIgbGFuZ3VhZ2VceDIwCiAgICBiZWZvcmUgdXNpbmcgaXQuIFJlYWQgbW9yZSBhYm91dCB0aGlzIGlzc3VlIGF0OiBodHRwczov''@;'; put 'put ''L2RvY3MuaGFuZHNvbnRhYmxlLmNvbS9pMThuL21pc3NpbmctbGFuZ3VhZ2UtY29kZS5gKX1wbChtUSxaMCk7Y29uc3R7cmVnaXN0ZXI6eWx0LGdldFZhbHVlczpibHR9PU5mKCJwaHJhc2VGb3JtYXR0ZXJzIik7ZnVuY3Rpb24gbm1lKGMsbCl7eWx0KGMsbCl9bm1lKCJwbHVyYWxpemUiLGZ1''@;'; put 'put ''bmN0aW9uIHZsdChjLGwpe3JldHVybiBBcnJheS5pc0FycmF5KGMpJiZOdW1iZXIuaXNJbnRlZ2VyKGwpP2NbbF06Y30pLG5tZSgic3Vic3RpdHV0ZSIsZnVuY3Rpb24gdG1lKGMsbCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYyk/Yy5tYXAoYT0+dG1lKGEsbCkpOiRIKGMsbCl9KTtjb25zdCB2''@;'; put 'put ''UT0iQ29tbW9uOiIsUE49YCR7dlF9b2tgLHlRPWAke3ZRfWNhbmNlbGAscm1lPSJDb250ZXh0TWVudTppdGVtcyIsYlE9YCR7cm1lfS5ub0l0ZW1zYCxfUT1gJHtybWV9Lmluc2VydFJvd0Fib3ZlYCx3UT1gJHtybWV9Lmluc2VydFJvd0JlbG93YCxDUT1gJHtybWV9Lmluc2VydENvbHVtbk9u''@;'; put 'put ''VGhlTGVmdGAsU1E9YCR7cm1lfS5pbnNlcnRDb2x1bW5PblRoZVJpZ2h0YCxNUT1gJHtybWV9LnJlbW92ZVJvd2AseFE9YCR7cm1lfS5yZW1vdmVDb2x1bW5gLEVRPWAke3JtZX0udW5kb2AsVFE9YCR7cm1lfS5yZWRvYCxGTj1gJHtybWV9LnJlYWRPbmx5YCxBUT1gJHtybWV9LmNsZWFyQ29s''@;'; put 'put ''dW1uYCxrUT1gJHtybWV9LmNvcHlgLERRPWAke3JtZX0uY29weVdpdGhIZWFkZXJzYCxJUT1gJHtybWV9LmNvcHlXaXRoR3JvdXBIZWFkZXJzYCxSUT1gJHtybWV9LmNvcHlIZWFkZXJzT25seWAsTFE9YCR7cm1lfS5jdXRgLE9RPWAke3JtZX0uZnJlZXplQ29sdW1uYCxQUT1gJHtybWV9LnVu''@;'; put 'put ''ZnJlZXplQ29sdW1uYCxGUT1gJHtybWV9Lm1lcmdlQ2VsbHNgLEhRPWAke3JtZX0udW5tZXJnZUNlbGxzYCxOUT1gJHtybWV9LmFkZENvbW1lbnRgLFZRPWAke3JtZX0uZWRpdENvbW1lbnRgLEJRPWAke3JtZX0ucmVtb3ZlQ29tbWVudGAsalE9YCR7cm1lfS5yZWFkT25seUNvbW1lbnRgLHpR''@;'; put 'put ''PWAke3JtZX0uYWxpZ25gLFVRPWAke3JtZX0uYWxpZ24ubGVmdGAsWlE9YCR7cm1lfS5hbGlnbi5jZW50ZXJgLFdRPWAke3JtZX0uYWxpZ24ucmlnaHRgLFlRPWAke3JtZX0uYWxpZ24uanVzdGlmeWAsR1E9YCR7cm1lfS5hbGlnbi50b3BgLCRRPWAke3JtZX0uYWxpZ24ubWlkZGxlYCxLUT1g''@;'; put 'put ''JHtybWV9LmFsaWduLmJvdHRvbWAsWFE9YCR7cm1lfS5ib3JkZXJzYCxxUT1gJHtybWV9LmJvcmRlcnMudG9wYCxKUT1gJHtybWV9LmJvcmRlcnMucmlnaHRgLFFRPWAke3JtZX0uYm9yZGVycy5ib3R0b21gLGVlZT1gJHtybWV9LmJvcmRlcnMubGVmdGAsdGVlPWAke3JtZX0uYm9yZGVycy5y''@;'; put 'put ''ZW1vdmVgLG5lZT1gJHtybWV9Lm5lc3RlZEhlYWRlcnMuaW5zZXJ0Q2hpbGRSb3dgLHJlZT1gJHtybWV9Lm5lc3RlZEhlYWRlcnMuZGV0YWNoRnJvbVBhcmVudGAsaWVlPWAke3JtZX0uaGlkZUNvbHVtbmAsYWVlPWAke3JtZX0uc2hvd0NvbHVtbmAsb2VlPWAke3JtZX0uaGlkZVJvd2Asc2Vl''@;'; put 'put ''PWAke3JtZX0uc2hvd1Jvd2AsRGQ9IkZpbHRlcnM6IixpdT1gJHtEZH1jb25kaXRpb25zYCxITj1gJHtpdX0ubm9uZWAsbGVlPWAke2l1fS5pc0VtcHR5YCxjZWU9YCR7aXV9LmlzTm90RW1wdHlgLHVlZT1gJHtpdX0uaXNFcXVhbFRvYCxkZWU9YCR7aXV9LmlzTm90RXF1YWxUb2AsaGVlPWAk''@;'; put 'put ''e2l1fS5iZWdpbnNXaXRoYCxmZWU9YCR7aXV9LmVuZHNXaXRoYCxwZWU9YCR7aXV9LmNvbnRhaW5zYCxnZWU9YCR7aXV9LmRvZXNOb3RDb250YWluYCx3bHQ9YCR7aXV9LmJ5VmFsdWVgLG1lZT1gJHtpdX0uZ3JlYXRlclRoYW5gLHZlZT1gJHtpdX0uZ3JlYXRlclRoYW5PckVxdWFsVG9gLHll''@;'; put 'put ''ZT1gJHtpdX0ubGVzc1RoYW5gLGJlZT1gJHtpdX0ubGVzc1RoYW5PckVxdWFsVG9gLF9lZT1gJHtpdX0uaXNCZXR3ZWVuYCx3ZWU9YCR7aXV9LmlzTm90QmV0d2VlbmAsQ2VlPWAke2l1fS5hZnRlcmAsU2VlPWAke2l1fS5iZWZvcmVgLE1lZT1gJHtpdX0udG9kYXlgLHhlZT1gJHtpdX0udG9t''@;'; put 'put ''b3Jyb3dgLEVlZT1gJHtpdX0ueWVzdGVyZGF5YCxUZWU9YCR7RGR9bGFiZWxzLmZpbHRlckJ5Q29uZGl0aW9uYCxBZWU9YCR7RGR9bGFiZWxzLmZpbHRlckJ5VmFsdWVgLGtlZT1gJHtEZH1sYWJlbHMuY29uanVuY3Rpb25gLE5OPWAke0RkfWxhYmVscy5kaXNqdW5jdGlvbmAsVk49YCR7RGR9''@;'; put 'put ''dmFsdWVzLmJsYW5rQ2VsbHNgLERlZT1gJHtEZH1idXR0b25zLnNlbGVjdEFsbGAsSWVlPWAke0RkfWJ1dHRvbnMuY2xlYXJgLFJlZT1gJHtEZH1idXR0b25zLm9rYCxMZWU9YCR7RGR9YnV0dG9ucy5jYW5jZWxgLE9lZT1gJHtEZH1idXR0b25zLnBsYWNlaG9sZGVyLnNlYXJjaGAsUGVlPWAk''@;'; put 'put ''e0RkfWJ1dHRvbnMucGxhY2Vob2xkZXIudmFsdWVgLEZlZT1gJHtEZH1idXR0b25zLnBsYWNlaG9sZGVyLnNlY29uZFZhbHVlYCxSND0iUGFnaW5hdGlvbjoiLEhlZT1gJHtSNH1zZWN0aW9uLnBhZ2luYXRpb25gLE5lZT1gJHtSNH0ucGFnZVNpemUuYXV0b2AsQk49YCR7UjR9c2VjdGlvbi5w''@;'; put 'put ''YWdlU2l6ZWAsVmVlPWAke1I0fXNlY3Rpb24uY291bnRlcmAsQmVlPWAke1I0fXNlY3Rpb24ubmF2aWdhdGlvbmAsamVlPWAke1I0fWZpcnN0UGFnZWAsemVlPWAke1I0fXByZXZQYWdlYCxVZWU9YCR7UjR9bmV4dFBhZ2VgLFplZT1gJHtSNH1sYXN0UGFnZWAsV2VlPSJDaGVja2JveFJlbmRl''@;'; put 'put ''cmVyOiIsWWVlPWAke1dlZX1jaGVja2VkYCxHZWU9YCR7V2VlfXVuY2hlY2tlZGAsaW1lPSJMb2FkaW5nOiIsJGVlPWAke2ltZX10aXRsZWAsSnc9IkVtcHR5RGF0YVN0YXRlOiIsS2VlPWAke0p3fXRpdGxlYCxYZWU9YCR7Snd9ZGVzY3JpcHRpb25gLHFlZT1gJHtKd310aXRsZS5maWx0ZXJz''@;'; put 'put ''YCxKZWU9YCR7Snd9ZGVzY3JpcHRpb24uZmlsdGVyc2AsUWVlPWAke0p3fWJ1dHRvbnMuZmlsdGVycy5yZXNldGAsYW1lPXtsYW5ndWFnZUNvZGU6ImVuLVVTIixbUE5dOiJPSyIsW3lRXToiQ2FuY2VsIixbYlFdOiJObyBhdmFpbGFibGUgb3B0aW9ucyIsW19RXToiSW5zZXJ0IHJvdyBhYm92''@;'; put 'put ''ZSIsW3dRXToiSW5zZXJ0IHJvdyBiZWxvdyIsW0NRXToiSW5zZXJ0IGNvbHVtbiBsZWZ0IixbU1FdOiJJbnNlcnQgY29sdW1uIHJpZ2h0IixbTVFdOlsiUmVtb3ZlIHJvdyIsIlJlbW92ZSByb3dzIl0sW3hRXTpbIlJlbW92ZSBjb2x1bW4iLCJSZW1vdmUgY29sdW1ucyJdLFtFUV06IlVuZG8i''@;'; put 'put ''LFtUUV06IlJlZG8iLFtGTl06IlJlYWQgb25seSIsW0FRXToiQ2xlYXIgY29sdW1uIixbelFdOiJBbGlnbm1lbnQiLFtVUV06IkxlZnQiLFtaUV06IkNlbnRlciIsW1dRXToiUmlnaHQiLFtZUV06Ikp1c3RpZnkiLFtHUV06IlRvcCIsWyRRXToiTWlkZGxlIixbS1FdOiJCb3R0b20iLFtPUV06''@;'; put 'put ''IkZyZWV6ZSBjb2x1bW4iLFtQUV06IlVuZnJlZXplIGNvbHVtbiIsW1hRXToiQm9yZGVycyIsW3FRXToiVG9wIixbSlFdOiJSaWdodCIsW1FRXToiQm90dG9tIixbZWVlXToiTGVmdCIsW3RlZV06IlJlbW92ZSBib3JkZXIocykiLFtOUV06IkFkZCBjb21tZW50IixbVlFdOiJFZGl0IGNvbW1l''@;'; put 'put ''bnQiLFtCUV06IkRlbGV0ZSBjb21tZW50IixbalFdOiJSZWFkLW9ubHkgY29tbWVudCIsW0ZRXToiTWVyZ2UgY2VsbHMiLFtIUV06IlVubWVyZ2UgY2VsbHMiLFtrUV06IkNvcHkiLFtEUV06WyJDb3B5IHdpdGggaGVhZGVyIiwiQ29weSB3aXRoIGhlYWRlcnMiXSxbSVFdOlsiQ29weSB3aXRo''@;'; put 'put ''IGdyb3VwIGhlYWRlciIsIkNvcHkgd2l0aCBncm91cCBoZWFkZXJzIl0sW1JRXTpbIkNvcHkgaGVhZGVyIG9ubHkiLCJDb3B5IGhlYWRlcnMgb25seSJdLFtMUV06IkN1dCIsW25lZV06Ikluc2VydCBjaGlsZCByb3ciLFtyZWVdOiJEZXRhY2ggZnJvbSBwYXJlbnQiLFtpZWVdOlsiSGlkZSBj''@;'; put 'put ''b2x1bW4iLCJIaWRlIGNvbHVtbnMiXSxbYWVlXTpbIlNob3cgY29sdW1uIiwiU2hvdyBjb2x1bW5zIl0sW29lZV06WyJIaWRlIHJvdyIsIkhpZGUgcm93cyJdLFtzZWVdOlsiU2hvdyByb3ciLCJTaG93IHJvd3MiXSxbSE5dOiJOb25lIixbbGVlXToiSXMgZW1wdHkiLFtjZWVdOiJJcyBub3Qg''@;'; put 'put ''ZW1wdHkiLFt1ZWVdOiJJcyBlcXVhbCB0byIsW2RlZV06IklzIG5vdCBlcXVhbCB0byIsW2hlZV06IkJlZ2lucyB3aXRoIixbZmVlXToiRW5kcyB3aXRoIixbcGVlXToiQ29udGFpbnMiLFtnZWVdOiJEb2VzIG5vdCBjb250YWluIixbbWVlXToiR3JlYXRlciB0aGFuIixbdmVlXToiR3JlYXRl''@;'; put 'put ''ciB0aGFuIG9yIGVxdWFsIHRvIixbeWVlXToiTGVzcyB0aGFuIixbYmVlXToiTGVzcyB0aGFuIG9yIGVxdWFsIHRvIixbX2VlXToiSXMgYmV0d2VlbiIsW3dlZV06IklzIG5vdCBiZXR3ZWVuIixbQ2VlXToiQWZ0ZXIiLFtTZWVdOiJCZWZvcmUiLFtNZWVdOiJUb2RheSIsW3hlZV06IlRvbW9y''@;'; put 'put ''cm93IixbRWVlXToiWWVzdGVyZGF5IixbVk5dOiJCbGFuayBjZWxscyIsW1RlZV06IkZpbHRlciBieSBjb25kaXRpb24iLFtBZWVdOiJGaWx0ZXIgYnkgdmFsdWUiLFtrZWVdOiJBbmQiLFtOTl06Ik9yIixbRGVlXToiU2VsZWN0IGFsbCIsW0llZV06IkNsZWFyIixbUmVlXToiT0siLFtMZWVd''@;'; put 'put ''OiJDYW5jZWwiLFtPZWVdOiJTZWFyY2giLFtQZWVdOiJWYWx1ZSIsW0ZlZV06IlNlY29uZCB2YWx1ZSIsW0hlZV06IlBhZ2luYXRpb24iLFtCTl06IlBhZ2Ugc2l6ZSIsW05lZV06IkF1dG8iLFtWZWVdOiJbc3RhcnRdIC0gW2VuZF0gb2YgW3RvdGFsXSIsW0JlZV06IlBhZ2UgW2N1cnJlbnRQ''@;'; put 'put ''YWdlXSBvZiBbdG90YWxQYWdlc10iLFtqZWVdOiJHbyB0byBmaXJzdCBwYWdlIixbemVlXToiR28gdG8gcHJldmlvdXMgcGFnZSIsW1VlZV06IkdvIHRvIG5leHQgcGFnZSIsW1plZV06IkdvIHRvIGxhc3QgcGFnZSIsW1llZV06IkNoZWNrZWQiLFtHZWVdOiJVbmNoZWNrZWQiLFskZWVdOiJM''@;'; put 'put ''b2FkaW5nLi4uIixbS2VlXToiTm8gZGF0YSBhdmFpbGFibGUiLFtYZWVdOiJUaGVyZVx1MjAxOXMgbm90aGluZyB0byBkaXNwbGF5IHlldC4iLFtxZWVdOiJObyByZXN1bHRzIGZvdW5kIixbSmVlXToiSXQgbG9va3MgbGlrZSB5b3VyIGN1cnJlbnQgZmlsdGVycyBhcmUgaGlkaW5nIGFsbCBy''@;'; put 'put ''ZXN1bHRzLiIsW1FlZV06IlJlc2V0IGZpbHRlcnMifSxDbHQ9WSxldGU9YW1lLmxhbmd1YWdlQ29kZSx7cmVnaXN0ZXI6U2x0LGdldEl0ZW06b21lLGhhc0l0ZW06TWx0LGdldFZhbHVlczp4bHR9PU5mKCJsYW5ndWFnZXNEaWN0aW9uYXJpZXMiKTtmdW5jdGlvbiBzbWUoYyxsKXtsZXQgYT1j''@;'; put 'put ''LGQ9bDtyZXR1cm4gbW8oYykmJihkPWMsYT1kLmxhbmd1YWdlQ29kZSksZnVuY3Rpb24gRWx0KGMsbCl7YyE9PWV0ZSYmZnVuY3Rpb24gbWx0KGMsbCl7YXMobCwoYSxkKT0+e2JjKGNbZF0pJiYoY1tkXT1hKX0pfShsLG9tZShldGUpKX0oYSxkKSxTbHQoYSxCMShkKSksQjEoZCl9ZnVuY3Rp''@;'; put 'put ''b24gbG1lKGMpe3JldHVybiB0dGUoYyk/QjEob21lKGMpKTpudWxsfWZ1bmN0aW9uIHR0ZShjKXtyZXR1cm4gTWx0KGMpfWZ1bmN0aW9uIGNtZShjLGwsYSl7Y29uc3QgZD1sbWUoYyk7aWYobnVsbD09PWQpcmV0dXJuIG51bGw7Y29uc3QgaD1kW2xdO2lmKGJjKGgpKXJldHVybiBudWxsO2Nv''@;'; put 'put ''bnN0IGY9ZnVuY3Rpb24gQWx0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uIF9sdCgpe3JldHVybiBibHQoKX0oKS5yZWR1Y2UoKGEsZCk9PmQoYSxsKSxjKX0oaCxhKTtyZXR1cm4gQXJyYXkuaXNBcnJheShmKT9mWzBdOmZ9c21lKGFtZSk7Y29uc3QgdW1lPSJhY3RpdmUtaGVhZGVyIixudGU9Imhl''@;'; put 'put ''YWRlciIsak49ImZvY3VzIjtjbGFzcyBkbWV7Y29uc3RydWN0b3IobCxhKXt0aGlzLnNldHRpbmdzPWwsdGhpcy5jZWxsUmFuZ2U9YXx8bnVsbH1pc0VtcHR5KCl7cmV0dXJuIG51bGw9PT10aGlzLmNlbGxSYW5nZX1hZGQobCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3RoaXMuY2VsbFJhbmdl''@;'; put 'put ''PXRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbFJhbmdlKGwpOnRoaXMuY2VsbFJhbmdlLmV4cGFuZChsKSx0aGlzfXJlcGxhY2UobCxhKXtpZighdGhpcy5pc0VtcHR5KCkpe2lmKHRoaXMuY2VsbFJhbmdlLmZyb20uaXNFcXVhbChsKSlyZXR1cm4gdGhpcy5jZWxsUmFuZ2UuZnJvbT1hLCEwO2lm''@;'; put 'put ''KHRoaXMuY2VsbFJhbmdlLnRvLmlzRXF1YWwobCkpcmV0dXJuIHRoaXMuY2VsbFJhbmdlLnRvPWEsITB9cmV0dXJuITF9Y2xlYXIoKXtyZXR1cm4gdGhpcy5jZWxsUmFuZ2U9bnVsbCx0aGlzfWdldENvcm5lcnMoKXtjb25zdCBsPXRoaXMuY2VsbFJhbmdlLmdldE91dGVyVG9wU3RhcnRDb3Ju''@;'; put 'put ''ZXIoKSxhPXRoaXMuY2VsbFJhbmdlLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk7cmV0dXJuW2wucm93LGwuY29sLGEucm93LGEuY29sXX1kZXN0cm95KCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJkZXN0cm95Iil9fXBsKGRtZSxaMCk7Y29uc3QgT2x0PWRtZTtjb25zdCBfNT1jbGFzcyBObHQg''@;'; put 'put ''ZXh0ZW5kcyBPbHR7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLG51bGwpLGZ1bmN0aW9uIFBsdChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRmx0KGMpe3ZhciBsPWZ1bmN0aW9uIEhsdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9Q''@;'; put 'put ''cmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJp''@;'; put 'put ''bmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1h''@;'; put 'put ''LGN9KHRoaXMsInZpc3VhbENlbGxSYW5nZSIsbnVsbCksdGhpcy52aXN1YWxDZWxsUmFuZ2U9YXx8bnVsbCx0aGlzLmNvbW1pdCgpfWFkZChsKXtyZXR1cm4gbnVsbD09PXRoaXMudmlzdWFsQ2VsbFJhbmdlP3RoaXMudmlzdWFsQ2VsbFJhbmdlPXRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbFJh''@;'; put 'put ''bmdlKGwpOnRoaXMudmlzdWFsQ2VsbFJhbmdlLmV4cGFuZChsKSx0aGlzfWNsZWFyKCl7cmV0dXJuIHRoaXMudmlzdWFsQ2VsbFJhbmdlPW51bGwsc3VwZXIuY2xlYXIoKX10cmltVG9WaXNpYmxlQ2VsbHNSYW5nZU9ubHkobCl7bGV0e2Zyb206YSx0bzpkfT1sLGg9dGhpcy5nZXROZWFyZXN0''@;'; put 'put ''Tm90SGlkZGVuQ29vcmRzKGEsMSksZj10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5Db29yZHMoZCwtMSk7cmV0dXJuIG51bGw9PT1ofHxudWxsPT09Zj9udWxsOigoaC5yb3c+Zi5yb3d8fGguY29sPmYuY29sKSYmKGg9YSxmPWQpLHRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbFJhbmdlKGgsaCxm''@;'; put 'put ''KSl9Z2V0TmVhcmVzdE5vdEhpZGRlbkNvb3JkcyhsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTphO2NvbnN0IGg9dGhpcy5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodGhpcy5zZXR0aW5ncy5yb3dJbmRleE1hcHBlcixs''@;'; put 'put ''LnJvdyxhKTtpZihudWxsPT09aClyZXR1cm4gbnVsbDtjb25zdCBmPXRoaXMuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHRoaXMuc2V0dGluZ3MuY29sdW1uSW5kZXhNYXBwZXIsbC5jb2wsZCk7cmV0dXJuIG51bGw9PT1mP251bGw6dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsQ29vcmRzKGgs''@;'; put 'put ''Zil9Z2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwsYSxkKXtyZXR1cm4gYTwwP2E6bC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYSxkKX1jb21taXQoKXtpZihudWxsPT09dGhpcy52aXN1YWxDZWxsUmFuZ2UpcmV0dXJuIHRoaXM7Y29uc3QgbD10aGlzLnRyaW1Ub1Zpc2libGVDZWxsc1Jh''@;'; put 'put ''bmdlT25seSh0aGlzLnZpc3VhbENlbGxSYW5nZSk7cmV0dXJuIHRoaXMuY2VsbFJhbmdlPW51bGw9PT1sP251bGw6dGhpcy5jcmVhdGVSZW5kZXJhYmxlQ2VsbFJhbmdlKGwuZnJvbSxsLnRvKSx0aGlzfXN5bmNXaXRoKGwpe2NvbnN0IGE9bC5mcm9tLmNsb25lKCkubm9ybWFsaXplKCksZD0i''@;'; put 'put ''Ti1TIj09PWwuZ2V0VmVydGljYWxEaXJlY3Rpb24oKT8xOi0xLGg9IlctRSI9PT1sLmdldEhvcml6b250YWxEaXJlY3Rpb24oKT8xOi0xLGY9dGhpcy5zZXR0aW5ncy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHModGhpcy52aXN1YWxDZWxsUmFuZ2UuaGlnaGxpZ2h0KTtsZXQgdj1udWxsO2lm''@;'; put 'put ''KChudWxsPT09Znx8bnVsbD09PWYuY29sfHxudWxsPT09Zi5yb3cpJiYodj10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5Db29yZHMoYSxkLGgpKSxudWxsIT09diYmbC5vdmVybGFwcyh2KSl7Y29uc3QgTT1sLmhpZ2hsaWdodC5jbG9uZSgpO2lmKE0ucm93Pj0wJiYoTS5yb3c9di5yb3cpLE0u''@;'; put 'put ''Y29sPj0wJiYoTS5jb2w9di5jb2wpLG51bGw9PT10aGlzLmNlbGxSYW5nZSl7Y29uc3QgRD10aGlzLnNldHRpbmdzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhNKTt0aGlzLmNlbGxSYW5nZT10aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxSYW5nZShEKX1sLnNldEhpZ2hsaWdodChNKX1yZXR1''@;'; put 'put ''cm4iZm9jdXMiPT09dGhpcy5zZXR0aW5ncy5zZWxlY3Rpb25UeXBlJiZudWxsIT09ZiYmbnVsbD09PXYmJmwuc2V0SGlnaGxpZ2h0KHRoaXMudmlzdWFsQ2VsbFJhbmdlLmhpZ2hsaWdodCksdGhpc31nZXRDb3JuZXJzKCl7Y29uc3R7ZnJvbTpsLHRvOmF9PXRoaXMuY2VsbFJhbmdlO3JldHVy''@;'; put 'put ''bltNYXRoLm1pbihsLnJvdyxhLnJvdyksTWF0aC5taW4obC5jb2wsYS5jb2wpLE1hdGgubWF4KGwucm93LGEucm93KSxNYXRoLm1heChsLmNvbCxhLmNvbCldfWdldFZpc3VhbENvcm5lcnMoKXtjb25zdCBsPXRoaXMuc2V0dGluZ3MucmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKHRoaXMuY2Vs''@;'; put 'put ''bFJhbmdlLmdldFRvcFN0YXJ0Q29ybmVyKCkpLGE9dGhpcy5zZXR0aW5ncy5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHModGhpcy5jZWxsUmFuZ2UuZ2V0Qm90dG9tRW5kQ29ybmVyKCkpO3JldHVybltsLnJvdyxsLmNvbCxhLnJvdyxhLmNvbF19Y3JlYXRlUmVuZGVyYWJsZUNlbGxSYW5nZShs''@;'; put 'put ''LGEpe2NvbnN0IGQ9dGhpcy5zZXR0aW5ncy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMobCksaD10aGlzLnNldHRpbmdzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhhKTtyZXR1cm4gbnVsbD09PWQucm93fHxudWxsPT09ZC5jb2x8fG51bGw9PT1oLnJvd3x8bnVsbD09PWguY29sP251bGw6''@;'; put 'put ''dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsUmFuZ2UoZCxkLGgpfX07ZnVuY3Rpb24gaXRlKGMpe2xldHthY3RpdmVIZWFkZXJDbGFzc05hbWU6bCwuLi5hfT1jO3JldHVybiBuZXcgXzUoe2NsYXNzTmFtZTpsLC4uLmEsc2VsZWN0aW9uVHlwZTp1bWV9KX1mdW5jdGlvbiBWbHQoYyl7bGV0e2Fy''@;'; put 'put ''ZWFDb3JuZXJWaXNpYmxlOmwsLi4uYX09YztyZXR1cm4gbmV3IF81KHtjbGFzc05hbWU6ImFyZWEiLGNyZWF0ZUxheWVyczohMCxib3JkZXI6e3dpZHRoOjEsY29sb3I6IiM0Yjg5ZmYiLGNvcm5lclZpc2libGU6bH0sLi4uYSxzZWxlY3Rpb25UeXBlOiJhcmVhIn0pfWZ1bmN0aW9uIEJsdChj''@;'; put 'put ''KXtsZXR7Li4ubH09YztyZXR1cm4gbmV3IF81KHtjbGFzc05hbWU6ImhpZ2hsaWdodCIsLi4ubCxzZWxlY3Rpb25UeXBlOiJhcmVhIn0pfWZ1bmN0aW9uIGpsdChjKXtsZXR7Y29sdW1uQ2xhc3NOYW1lOmwsLi4uYX09YztyZXR1cm4gbmV3IF81KHtjbGFzc05hbWU6bCwuLi5hLHNlbGVjdGlv''@;'; put 'put ''blR5cGU6ImNvbHVtbiJ9KX1mdW5jdGlvbiBobWUoYyl7bGV0e2hlYWRlckNsYXNzTmFtZTpsLC4uLmF9PWM7cmV0dXJuIG5ldyBfNSh7Y2xhc3NOYW1lOmwsLi4uYSxzZWxlY3Rpb25UeXBlOm50ZX0pfWZ1bmN0aW9uIFdsdChjKXtsZXR7cm93Q2xhc3NOYW1lOmwsLi4uYX09YztyZXR1cm4g''@;'; put 'put ''bmV3IF81KHtjbGFzc05hbWU6bCwuLi5hLHNlbGVjdGlvblR5cGU6InJvdyJ9KX1mdW5jdGlvbiBDaChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gJGx0KGMpe3ZhciBsPWZ1bmN0aW9uIEtsdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wu''@;'; put 'put ''dG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJz''@;'; put 'put ''dHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1ts''@;'; put 'put ''XT1hLGN9ZnVuY3Rpb24gdzUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZh''@;'; put 'put ''ciBMND1uZXcgV2Vha1NldDtjbGFzcyBYbHR7Y29uc3RydWN0b3IobCl7KGZ1bmN0aW9uIFlsdChjLGwpeyhmdW5jdGlvbiBHbHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9u''@;'; put 'put ''IGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0pKHRoaXMsTDQpLENoKHRoaXMsIm9wdGlvbnMiLHZvaWQgMCksQ2godGhpcywibGF5ZXJMZXZlbCIsMCksQ2godGhpcywiZm9jdXMiLHZvaWQgMCksQ2godGhpcywiZmlsbCIsdm9pZCAwKSxDaCh0aGlzLCJsYXllcmVkQXJlYXMiLG5ldyBN''@;'; put 'put ''YXApLENoKHRoaXMsImFyZWFzIixuZXcgTWFwKSxDaCh0aGlzLCJyb3dIZWFkZXJzIixuZXcgTWFwKSxDaCh0aGlzLCJjb2x1bW5IZWFkZXJzIixuZXcgTWFwKSxDaCh0aGlzLCJhY3RpdmVSb3dIZWFkZXJzIixuZXcgTWFwKSxDaCh0aGlzLCJhY3RpdmVDb2x1bW5IZWFkZXJzIixuZXcgTWFw''@;'; put 'put ''KSxDaCh0aGlzLCJhY3RpdmVDb3JuZXJIZWFkZXJzIixuZXcgTWFwKSxDaCh0aGlzLCJyb3dIaWdobGlnaHRzIixuZXcgTWFwKSxDaCh0aGlzLCJjb2x1bW5IaWdobGlnaHRzIixuZXcgTWFwKSxDaCh0aGlzLCJjdXN0b21TZWxlY3Rpb25zIixbXSksdGhpcy5vcHRpb25zPWwsdGhpcy5mb2N1''@;'; put 'put ''cz1mdW5jdGlvbiB6bHQoYyl7bGV0e2NlbGxDb3JuZXJWaXNpYmxlOmwsLi4uYX09YztyZXR1cm4gbmV3IF81KHtjbGFzc05hbWU6ImN1cnJlbnQiLGhlYWRlckF0dHJpYnV0ZXM6W1siYXJpYS1zZWxlY3RlZCIsInRydWUiXV0sYm9yZGVyOnt3aWR0aDoyLGNvbG9yOiIjNGI4OWZmIixjb3Ju''@;'; put 'put ''ZXJWaXNpYmxlOmx9LC4uLmEsc2VsZWN0aW9uVHlwZTpqTn0pfShsKSx0aGlzLmZpbGw9ZnVuY3Rpb24gWmx0KGMpe2xldHsuLi5sfT1jO3JldHVybiBuZXcgXzUoe2NsYXNzTmFtZToiZmlsbCIsYm9yZGVyOnt3aWR0aDoxLGNvbG9yOiIjZmYwMDAwIn0sLi4ubCxzZWxlY3Rpb25UeXBlOiJm''@;'; put 'put ''aWxsIn0pfShsKX1pc0VuYWJsZWRGb3IobCxhKXtsZXQgZD1sO2w9PT1qTiYmKGQ9ImN1cnJlbnQiKTtsZXQgaD10aGlzLm9wdGlvbnMuZGlzYWJsZWRDZWxsU2VsZWN0aW9uKGEucm93LGEuY29sKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGgmJihoPVtoXSksITE9PT1ofHxBcnJheS5pc0Fy''@;'; put 'put ''cmF5KGgpJiYhaC5pbmNsdWRlcyhkKX11c2VMYXllckxldmVsKCl7cmV0dXJuIHRoaXMubGF5ZXJMZXZlbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MCx0aGlzfWdldEZvY3VzKCl7cmV0dXJuIHRoaXMuZm9jdXN9Z2V0RmlsbCgpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmZpbGx9Y3JlYXRlTGF5ZXJlZEFyZWEoKXtyZXR1cm4gdzUoTDQsdGhpcyxDNSkuY2FsbCh0aGlzLHRoaXMubGF5ZXJlZEFyZWFzLFZsdCl9Z2V0TGF5ZXJlZEFyZWFzKCl7cmV0dXJuWy4uLnRoaXMubGF5ZXJlZEFyZWFzLnZhbHVlcygpXX1jcmVhdGVBcmVhKCl7cmV0dXJu''@;'; put 'put ''IHc1KEw0LHRoaXMsQzUpLmNhbGwodGhpcyx0aGlzLmFyZWFzLEJsdCl9Z2V0QXJlYXMoKXtyZXR1cm5bLi4udGhpcy5hcmVhcy52YWx1ZXMoKV19Y3JlYXRlUm93SGVhZGVyKCl7cmV0dXJuIHc1KEw0LHRoaXMsQzUpLmNhbGwodGhpcyx0aGlzLnJvd0hlYWRlcnMsaG1lKX1nZXRSb3dIZWFk''@;'; put 'put ''ZXJzKCl7cmV0dXJuWy4uLnRoaXMucm93SGVhZGVycy52YWx1ZXMoKV19Y3JlYXRlQ29sdW1uSGVhZGVyKCl7cmV0dXJuIHc1KEw0LHRoaXMsQzUpLmNhbGwodGhpcyx0aGlzLmNvbHVtbkhlYWRlcnMsaG1lKX1nZXRDb2x1bW5IZWFkZXJzKCl7cmV0dXJuWy4uLnRoaXMuY29sdW1uSGVhZGVy''@;'; put 'put ''cy52YWx1ZXMoKV19Y3JlYXRlQWN0aXZlUm93SGVhZGVyKCl7cmV0dXJuIHc1KEw0LHRoaXMsQzUpLmNhbGwodGhpcyx0aGlzLmFjdGl2ZVJvd0hlYWRlcnMsaXRlKX1nZXRBY3RpdmVSb3dIZWFkZXJzKCl7cmV0dXJuWy4uLnRoaXMuYWN0aXZlUm93SGVhZGVycy52YWx1ZXMoKV19Y3JlYXRl''@;'; put 'put ''QWN0aXZlQ29sdW1uSGVhZGVyKCl7cmV0dXJuIHc1KEw0LHRoaXMsQzUpLmNhbGwodGhpcyx0aGlzLmFjdGl2ZUNvbHVtbkhlYWRlcnMsaXRlKX1nZXRBY3RpdmVDb2x1bW5IZWFkZXJzKCl7cmV0dXJuWy4uLnRoaXMuYWN0aXZlQ29sdW1uSGVhZGVycy52YWx1ZXMoKV19Y3JlYXRlQWN0aXZl''@;'; put 'put ''Q29ybmVySGVhZGVyKCl7cmV0dXJuIHc1KEw0LHRoaXMsQzUpLmNhbGwodGhpcyx0aGlzLmFjdGl2ZUNvcm5lckhlYWRlcnMsaXRlKX1nZXRBY3RpdmVDb3JuZXJIZWFkZXJzKCl7cmV0dXJuWy4uLnRoaXMuYWN0aXZlQ29ybmVySGVhZGVycy52YWx1ZXMoKV19Y3JlYXRlUm93SGlnaGxpZ2h0''@;'; put 'put ''KCl7cmV0dXJuIHc1KEw0LHRoaXMsQzUpLmNhbGwodGhpcyx0aGlzLnJvd0hpZ2hsaWdodHMsV2x0KX1nZXRSb3dIaWdobGlnaHRzKCl7cmV0dXJuWy4uLnRoaXMucm93SGlnaGxpZ2h0cy52YWx1ZXMoKV19Y3JlYXRlQ29sdW1uSGlnaGxpZ2h0KCl7cmV0dXJuIHc1KEw0LHRoaXMsQzUpLmNh''@;'; put 'put ''bGwodGhpcyx0aGlzLmNvbHVtbkhpZ2hsaWdodHMsamx0KX1nZXRDb2x1bW5IaWdobGlnaHRzKCl7cmV0dXJuWy4uLnRoaXMuY29sdW1uSGlnaGxpZ2h0cy52YWx1ZXMoKV19Z2V0Q3VzdG9tU2VsZWN0aW9ucygpe3JldHVyblsuLi50aGlzLmN1c3RvbVNlbGVjdGlvbnMudmFsdWVzKCldfWFk''@;'; put 'put ''ZEN1c3RvbVNlbGVjdGlvbihsKXt0aGlzLmN1c3RvbVNlbGVjdGlvbnMucHVzaChmdW5jdGlvbiBVbHQoYyl7bGV0e2JvcmRlcjpsLHZpc3VhbENlbGxSYW5nZTphLC4uLmR9PWM7cmV0dXJuIG5ldyBfNSh7Li4ubCwuLi5kLHNlbGVjdGlvblR5cGU6ImN1c3RvbS1zZWxlY3Rpb24ifSxhKX0o''@;'; put 'put ''ey4uLnRoaXMub3B0aW9ucywuLi5sfSkpfWNsZWFyKCl7dGhpcy5mb2N1cy5jbGVhcigpLHRoaXMuZmlsbC5jbGVhcigpLEtuKHRoaXMuYXJlYXMudmFsdWVzKCksbD0+e2wuY2xlYXIoKX0pLEtuKHRoaXMubGF5ZXJlZEFyZWFzLnZhbHVlcygpLGw9PntsLmNsZWFyKCl9KSxLbih0aGlzLnJv''@;'; put 'put ''d0hlYWRlcnMudmFsdWVzKCksbD0+e2wuY2xlYXIoKX0pLEtuKHRoaXMuY29sdW1uSGVhZGVycy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSksS24odGhpcy5hY3RpdmVSb3dIZWFkZXJzLnZhbHVlcygpLGw9PntsLmNsZWFyKCl9KSxLbih0aGlzLmFjdGl2ZUNvbHVtbkhlYWRlcnMudmFsdWVz''@;'; put 'put ''KCksbD0+e2wuY2xlYXIoKX0pLEtuKHRoaXMuYWN0aXZlQ29ybmVySGVhZGVycy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSksS24odGhpcy5yb3dIaWdobGlnaHRzLnZhbHVlcygpLGw9PntsLmNsZWFyKCl9KSxLbih0aGlzLmNvbHVtbkhpZ2hsaWdodHMudmFsdWVzKCksbD0+e2wuY2xlYXIo''@;'; put 'put ''KX0pfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuW3RoaXMuZm9jdXMsdGhpcy5maWxsLC4uLnRoaXMuYXJlYXMudmFsdWVzKCksLi4udGhpcy5sYXllcmVkQXJlYXMudmFsdWVzKCksLi4udGhpcy5yb3dIZWFkZXJzLnZhbHVlcygpLC4uLnRoaXMuY29sdW1uSGVhZGVycy52YWx1ZXMoKSwu''@;'; put 'put ''Li50aGlzLmFjdGl2ZVJvd0hlYWRlcnMudmFsdWVzKCksLi4udGhpcy5hY3RpdmVDb2x1bW5IZWFkZXJzLnZhbHVlcygpLC4uLnRoaXMuYWN0aXZlQ29ybmVySGVhZGVycy52YWx1ZXMoKSwuLi50aGlzLnJvd0hpZ2hsaWdodHMudmFsdWVzKCksLi4udGhpcy5jb2x1bW5IaWdobGlnaHRzLnZh''@;'; put 'put ''bHVlcygpLC4uLnRoaXMuY3VzdG9tU2VsZWN0aW9uc11bU3ltYm9sLml0ZXJhdG9yXSgpfX1mdW5jdGlvbiBDNShjLGwpe2NvbnN0IGE9dGhpcy5sYXllckxldmVsO2lmKGMuaGFzKGEpKXJldHVybiBjLmdldChhKTtjb25zdCBkPWwoe2xheWVyTGV2ZWw6YSwuLi50aGlzLm9wdGlvbnN9KTty''@;'; put 'put ''ZXR1cm4gYy5zZXQoYSxkKSxkfWNvbnN0IHFsdD1YbHQ7ZnVuY3Rpb24gZm1lKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBKbHQoYyl7dmFyIGw9ZnVuY3Rpb24gUWx0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07''@;'; put 'put ''aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0''@;'; put 'put ''cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBh''@;'; put 'put ''dGV7Y29uc3RydWN0b3IobCl7Zm1lKHRoaXMsInJhbmdlcyIsW10pLGZtZSh0aGlzLCJjcmVhdGVDZWxsUmFuZ2UiLHZvaWQgMCksdGhpcy5jcmVhdGVDZWxsUmFuZ2U9bH1pc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLnNpemUoKX1zZXQobCl7cmV0dXJuIHRoaXMuY2xlYXIoKSx0aGlzLnJh''@;'; put 'put ''bmdlcy5wdXNoKHRoaXMuY3JlYXRlQ2VsbFJhbmdlKGwpKSx0aGlzfWFkZChsKXtyZXR1cm4gdGhpcy5yYW5nZXMucHVzaCh0aGlzLmNyZWF0ZUNlbGxSYW5nZShsKSksdGhpc31wdXNoKGwpe3JldHVybiB0aGlzLnJhbmdlcy5wdXNoKGwpLHRoaXN9cG9wKCl7cmV0dXJuIHRoaXMucmFuZ2Vz''@;'; put 'put ''LnBvcCgpfWN1cnJlbnQoKXtyZXR1cm4gdGhpcy5wZWVrQnlJbmRleCh0aGlzLnNpemUoKS0xKX1wcmV2aW91cygpe3JldHVybiB0aGlzLnBlZWtCeUluZGV4KHRoaXMuc2l6ZSgpLTIpfWluY2x1ZGVzKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFd''@;'; put 'put ''P2FyZ3VtZW50c1sxXTooKT0+ITA7cmV0dXJuIHRoaXMucmFuZ2VzLnNvbWUoKGQsaCk9PmQuaW5jbHVkZXMobCkmJmEoZCxoKSl9ZmluZEFsbChsKXtjb25zdCBhPVtdO3JldHVybiB0aGlzLnJhbmdlcy5mb3JFYWNoKChkLGgpPT57ZC5pc0VxdWFsKGwpJiZhLnB1c2goe3JhbmdlOmQsbGF5''@;'; put 'put ''ZXI6aH0pfSksYX1yZW1vdmUobCl7cmV0dXJuIHRoaXMucmFuZ2VzPXRoaXMucmFuZ2VzLmZpbHRlcihhPT4hbC5zb21lKGQ9PmQuaXNFcXVhbChhKSkpLHRoaXN9cmVtb3ZlTGF5ZXJzKGwpe3JldHVybiB0aGlzLnJhbmdlcz10aGlzLnJhbmdlcy5maWx0ZXIoKGEsZCk9PiFsLmluY2x1ZGVz''@;'; put 'put ''KGQpKSx0aGlzfWNsZWFyKCl7cmV0dXJuIHRoaXMucmFuZ2VzLmxlbmd0aD0wLHRoaXN9c2l6ZSgpe3JldHVybiB0aGlzLnJhbmdlcy5sZW5ndGh9Y2xvbmUoKXtjb25zdCBsPW5ldyBhdGUodGhpcy5jcmVhdGVDZWxsUmFuZ2UpO3JldHVybiBsLnJhbmdlcz10aGlzLnJhbmdlcy5tYXAoYT0+''@;'; put 'put ''YS5jbG9uZSgpKSxsfW1hcChsKXtyZXR1cm4gdGhpcy5yYW5nZXM9dGhpcy5yYW5nZXMubWFwKChhLGQpPT5sKGEsZCkpLHRoaXN9cGVla0J5SW5kZXgoKXtsZXQgYSxsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTowO3JldHVybiBsPj0w''@;'; put 'put ''JiZsPHRoaXMuc2l6ZSgpJiYoYT10aGlzLnJhbmdlc1tsXSksYX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzLnJhbmdlc1tTeW1ib2wuaXRlcmF0b3JdKCl9fWNvbnN0IGVjdD1hdGU7ZnVuY3Rpb24gb3RlKGMsbCxhKXtwbWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHBtZShj''@;'; put 'put ''LGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gczAoYyxsKXtyZXR1cm4gYy5nZXQoTWwoYyxsKSl9ZnVuY3Rpb24gUXcoYyxsLGEpe3JldHVy''@;'; put 'put ''biBjLnNldChNbChjLGwpLGEpLGF9ZnVuY3Rpb24gTWwoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0''@;'; put 'put ''aGlzIG9iamVjdCIpfXZhciBTNT1uZXcgV2Vha01hcCx1dj1uZXcgV2Vha01hcCxrMj1uZXcgV2Vha01hcCxPbD1uZXcgV2Vha1NldDtjbGFzcyBzdGV7Y29uc3RydWN0b3IobCxhKXsoZnVuY3Rpb24gdGN0KGMsbCl7cG1lKGMsbCksbC5hZGQoYyl9KSh0aGlzLE9sKSxvdGUodGhpcyxTNSx2''@;'; put 'put ''b2lkIDApLG90ZSh0aGlzLHV2LDApLG90ZSh0aGlzLGsyLHt4OjAseTowfSksZnVuY3Rpb24gbmN0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiByY3QoYyl7dmFyIGw9ZnVuY3Rpb24gaWN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50''@;'; put 'put ''b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0''@;'; put 'put ''cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xd''@;'; put 'put ''PWEsY30odGhpcywidGFibGVBcGkiLHZvaWQgMCksUXcoUzUsdGhpcyxsKSx0aGlzLnRhYmxlQXBpPWF9c2V0QWN0aXZlTGF5ZXJJbmRleChsKXtRdyh1dix0aGlzLGwpfWdldEN1cnJlbnRTZWxlY3Rpb24oKXtyZXR1cm4gczAoUzUsdGhpcykucGVla0J5SW5kZXgoczAodXYsdGhpcykpfXRy''@;'; put 'put ''YW5zZm9ybVN0YXJ0KGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtRdyhrMix0aGlzLHRoaXMuY2FsY3VsYXRlT2Zmc2V0KCkpO2NvbnN0IGg9dGhpcy50YWJsZUFwaS5jcmVhdGVDZWxsQ29vcmRzKGwsYSk7bGV0IGY9''@;'; put 'put ''dGhpcy5nZXRDdXJyZW50U2VsZWN0aW9uKCkuaGlnaGxpZ2h0O2NvbnN0IHY9dGhpcy50YWJsZUFwaS52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoZik7bGV0IE09MCxEPTA7aWYodGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVUcmFuc2Zvcm1TdGFydCIsaCksbnVsbCE9PXYucm93JiZudWxs''@;'; put 'put ''IT09di5jb2wpe2xldHt3aWR0aDpVLGhlaWdodDp0ZX09TWwoT2wsdGhpcyxsdGUpLmNhbGwodGhpcyk7Y29uc3R7cm93Om9lLGNvbDp2ZX09TWwoT2wsdGhpcyx5bWUpLmNhbGwodGhpcyxmKSx3ZT10aGlzLnRhYmxlQXBpLmZpeGVkUm93c0JvdHRvbSgpLEZlPXRoaXMudGFibGVBcGkubWlu''@;'; put 'put ''U3BhcmVSb3dzKCksV2U9dGhpcy50YWJsZUFwaS5taW5TcGFyZUNvbHMoKSxudD10aGlzLnRhYmxlQXBpLmF1dG9XcmFwUm93KCksZHQ9dGhpcy50YWJsZUFwaS5hdXRvV3JhcENvbCgpLG10PXRoaXMudGFibGVBcGkuY3JlYXRlQ2VsbENvb3JkcyhvZStoLnJvdyx2ZStoLmNvbCk7aWYobXQu''@;'; put 'put ''cm93Pj10ZSl7Y29uc3QgeW49dmgoZCYmRmU+MCYmMD09PXdlKSxnbj1tdC5jb2wrMSx3bj1nbj49VSxSbj10aGlzLnRhYmxlQXBpLmNyZWF0ZUNlbGxDb29yZHMobXQucm93LXRlLHduP2duLVU6Z24pO2lmKHRoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlQ29sdW1uV3JhcCIseW4sTWwoT2ws''@;'; put 'put ''dGhpcyxlQykuY2FsbCh0aGlzLFJuKSx3bikseW4udmFsdWUpdGhpcy5ydW5Mb2NhbEhvb2tzKCJpbnNlcnRSb3dSZXF1aXJlIix0aGlzLmNvdW50UmVuZGVyYWJsZVJvd3MoKSk7ZWxzZSBpZihkdCl7aWYodGhpcy5zaG91bGRTd2l0Y2hTZWxlY3Rpb25MYXllcigpJiZ3biYmczAoUzUsdGhp''@;'; put 'put ''cykuc2l6ZSgpPjEpe01sKE9sLHRoaXMsZ21lKS5jYWxsKHRoaXMpO2NvbnN0IERyPU1sKE9sLHRoaXMsek4pLmNhbGwodGhpcywiZm9yd2FyZCIpO251bGwhPT1EciYmUm4uYXNzaWduKERyKX1tdC5hc3NpZ24oUm4pfX1lbHNlIGlmKG10LnJvdzwwKXtjb25zdCB5bj12aChkdCksZ249bXQu''@;'; put 'put ''Y29sLTEsd249Z248MCxSbj10aGlzLnRhYmxlQXBpLmNyZWF0ZUNlbGxDb29yZHModGUrbXQucm93LHduP1UrZ246Z24pO2lmKHRoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlQ29sdW1uV3JhcCIseW4sTWwoT2wsdGhpcyxlQykuY2FsbCh0aGlzLFJuKSx3biksZHQpe2lmKHRoaXMuc2hvdWxk''@;'; put 'put ''U3dpdGNoU2VsZWN0aW9uTGF5ZXIoKSYmd24mJnMwKFM1LHRoaXMpLnNpemUoKT4xKXtNbChPbCx0aGlzLG1tZSkuY2FsbCh0aGlzKTtjb25zdCBEcj1NbChPbCx0aGlzLHpOKS5jYWxsKHRoaXMsImJhY2t3YXJkIik7bnVsbCE9PURyJiZSbi5hc3NpZ24oRHIpfW10LmFzc2lnbihSbil9fWlm''@;'; put 'put ''KCh7d2lkdGg6VSxoZWlnaHQ6dGV9PU1sKE9sLHRoaXMsbHRlKS5jYWxsKHRoaXMpKSxtdC5jb2w+PVUpe2NvbnN0IHluPXZoKGQmJldlPjApLGduPW10LnJvdysxLHduPWduPj10ZSxSbj10aGlzLnRhYmxlQXBpLmNyZWF0ZUNlbGxDb29yZHMod24/Z24tdGU6Z24sbXQuY29sLVUpO2lmKHRo''@;'; put 'put ''aXMucnVuTG9jYWxIb29rcygiYmVmb3JlUm93V3JhcCIseW4sTWwoT2wsdGhpcyxlQykuY2FsbCh0aGlzLFJuKSx3bikseW4udmFsdWUpdGhpcy5ydW5Mb2NhbEhvb2tzKCJpbnNlcnRDb2xSZXF1aXJlIix0aGlzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSk7ZWxzZSBpZihudCl7aWYodGhp''@;'; put 'put ''cy5zaG91bGRTd2l0Y2hTZWxlY3Rpb25MYXllcigpJiZ3biYmczAoUzUsdGhpcykuc2l6ZSgpPjEpe01sKE9sLHRoaXMsZ21lKS5jYWxsKHRoaXMpO2NvbnN0IERyPU1sKE9sLHRoaXMsek4pLmNhbGwodGhpcywiZm9yd2FyZCIpO251bGwhPT1EciYmUm4uYXNzaWduKERyKX1tdC5hc3NpZ24o''@;'; put 'put ''Um4pfX1lbHNlIGlmKG10LmNvbDwwKXtjb25zdCB5bj12aChudCksZ249bXQucm93LTEsd249Z248MCxSbj10aGlzLnRhYmxlQXBpLmNyZWF0ZUNlbGxDb29yZHMod24/dGUrZ246Z24sVSttdC5jb2wpO2lmKHRoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlUm93V3JhcCIseW4sTWwoT2wsdGhp''@;'; put 'put ''cyxlQykuY2FsbCh0aGlzLFJuKSx3biksbnQpe2lmKHRoaXMuc2hvdWxkU3dpdGNoU2VsZWN0aW9uTGF5ZXIoKSYmd24mJnMwKFM1LHRoaXMpLnNpemUoKT4xKXtNbChPbCx0aGlzLG1tZSkuY2FsbCh0aGlzKTtjb25zdCBEcj1NbChPbCx0aGlzLHpOKS5jYWxsKHRoaXMsImJhY2t3YXJkIik7''@;'; put 'put ''bnVsbCE9PURyJiZSbi5hc3NpZ24oRHIpfW10LmFzc2lnbihSbil9fWNvbnN0e3Jvd0RpcjokdCxjb2xEaXI6enR9PU1sKE9sLHRoaXMsdm1lKS5jYWxsKHRoaXMsbXQpO009JHQsRD16dCxmPU1sKE9sLHRoaXMsZUMpLmNhbGwodGhpcyxtdCl9cmV0dXJuIHRoaXMucnVuTG9jYWxIb29rcygi''@;'; put 'put ''YWZ0ZXJUcmFuc2Zvcm1TdGFydCIsZixNLEQpLHtzZWxlY3Rpb25MYXllcjpzMCh1dix0aGlzKSx2aXN1YWxDb29yZHM6Zn19dHJhbnNmb3JtRW5kKGwsYSl7UXcoazIsdGhpcyx0aGlzLmNhbGN1bGF0ZU9mZnNldCgpKTtjb25zdCBkPXRoaXMudGFibGVBcGkuY3JlYXRlQ2VsbENvb3Jkcyhs''@;'; put 'put ''LGEpLGg9dGhpcy5nZXRDdXJyZW50U2VsZWN0aW9uKCksZj10aGlzLnRhYmxlQXBpLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhoLmhpZ2hsaWdodCksdj1NbChPbCx0aGlzLFVOKS5jYWxsKHRoaXMsaC50by5yb3csaC5mcm9tLnJvdyksTT1NbChPbCx0aGlzLFpOKS5jYWxsKHRoaXMsaC50''@;'; put 'put ''by5jb2wsaC5mcm9tLmNvbCksRD1oLnRvLmNsb25lKCk7bGV0IFU9MCx0ZT0wO2lmKHRoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlVHJhbnNmb3JtRW5kIixkKSxudWxsIT09Zi5yb3cmJm51bGwhPT1mLmNvbCYmbnVsbCE9PXYmJm51bGwhPT1NKXtjb25zdHtyb3c6b2UsY29sOnZlfT1NbChP''@;'; put 'put ''bCx0aGlzLHltZSkuY2FsbCh0aGlzLGguaGlnaGxpZ2h0KSx3ZT10aGlzLnRhYmxlQXBpLmNyZWF0ZUNlbGxDb29yZHModitkLnJvdyxNK2QuY29sKSxGZT1oLmdldFRvcFN0YXJ0Q29ybmVyKCksV2U9aC5nZXRUb3BFbmRDb3JuZXIoKSxudD1oLmdldEJvdHRvbUVuZENvcm5lcigpO2lmKGQu''@;'; put 'put ''Y29sPDAmJk0+PXZlJiZ3ZS5jb2w8dmUpe2NvbnN0IHp0PXdlLmNvbC12ZTt3ZS5jb2w9TWwoT2wsdGhpcyxaTikuY2FsbCh0aGlzLEZlLmNvbCxXZS5jb2wpK3p0fWVsc2UgaWYoZC5jb2w+MCYmTTw9dmUmJndlLmNvbD52ZSl7Y29uc3QgenQ9TWwoT2wsdGhpcyxaTikuY2FsbCh0aGlzLFdl''@;'; put 'put ''LmNvbCxGZS5jb2wpLHluPU1hdGgubWF4KHdlLmNvbC16dCwxKTt3ZS5jb2w9enQreW59aWYoZC5yb3c8MCYmdj49b2UmJndlLnJvdzxvZSl7Y29uc3QgenQ9d2Uucm93LW9lO3dlLnJvdz1NbChPbCx0aGlzLFVOKS5jYWxsKHRoaXMsRmUucm93LG50LnJvdykrenR9ZWxzZSBpZihkLnJvdz4w''@;'; put 'put ''JiZ2PD1vZSYmd2Uucm93Pm9lKXtjb25zdCB6dD1NbChPbCx0aGlzLFVOKS5jYWxsKHRoaXMsbnQucm93LEZlLnJvdykseW49TWF0aC5tYXgod2Uucm93LXp0LDEpO3dlLnJvdz16dCt5bn1jb25zdHtyb3dEaXI6ZHQsY29sRGlyOm10fT1NbChPbCx0aGlzLHZtZSkuY2FsbCh0aGlzLHdlKTtV''@;'; put 'put ''PWR0LHRlPW10O2NvbnN0ICR0PU1sKE9sLHRoaXMsZUMpLmNhbGwodGhpcyx3ZSk7MD09PWQucm93JiYwIT09ZC5jb2w/RC5jb2w9JHQuY29sOjAhPT1kLnJvdyYmMD09PWQuY29sP0Qucm93PSR0LnJvdzooRC5yb3c9JHQucm93LEQuY29sPSR0LmNvbCl9cmV0dXJuIHRoaXMucnVuTG9jYWxI''@;'; put 'put ''b29rcygiYWZ0ZXJUcmFuc2Zvcm1FbmQiLEQsVSx0ZSkse3NlbGVjdGlvbkxheWVyOnMwKHV2LHRoaXMpLHZpc3VhbENvb3JkczpEfX1jYWxjdWxhdGVPZmZzZXQoKXt0aHJvdyBuZXcgRXJyb3IoImBjYWxjdWxhdGVPZmZzZXRgIGlzIG5vdCBpbXBsZW1lbnRlZCIpfWNvdW50UmVuZGVyYWJs''@;'; put 'put ''ZVJvd3MoKXt0aHJvdyBuZXcgRXJyb3IoImBjb3VudFJlbmRlcmFibGVSb3dzYCBpcyBub3QgaW1wbGVtZW50ZWQiKX1jb3VudFJlbmRlcmFibGVDb2x1bW5zKCl7dGhyb3cgbmV3IEVycm9yKCJgY291bnRSZW5kZXJhYmxlQ29sdW1uc2AgaXMgbm90IGltcGxlbWVudGVkIil9c2hvdWxkU3dp''@;'; put 'put ''dGNoU2VsZWN0aW9uTGF5ZXIoKXt0aHJvdyBuZXcgRXJyb3IoImBzaG91bGRTd2l0Y2hTZWxlY3Rpb25MYXllcmAgaXMgbm90IGltcGxlbWVudGVkIil9fWZ1bmN0aW9uIGdtZSgpe2NvbnN0IGM9czAodXYsdGhpcykrMTt0aGlzLnNldEFjdGl2ZUxheWVySW5kZXgoYz49czAoUzUsdGhpcyku''@;'; put 'put ''c2l6ZSgpPzA6YyksUXcoazIsdGhpcyx0aGlzLmNhbGN1bGF0ZU9mZnNldCgpKX1mdW5jdGlvbiBtbWUoKXtjb25zdCBjPXMwKHV2LHRoaXMpLTE7dGhpcy5zZXRBY3RpdmVMYXllckluZGV4KGM8MD9zMChTNSx0aGlzKS5zaXplKCktMTpjKSxRdyhrMix0aGlzLHRoaXMuY2FsY3VsYXRlT2Zm''@;'; put 'put ''c2V0KCkpfWZ1bmN0aW9uIHZtZShjKXtjb25zdHt3aWR0aDpsLGhlaWdodDphfT1NbChPbCx0aGlzLGx0ZSkuY2FsbCh0aGlzKTtsZXQgZD0wLGg9MDtyZXR1cm4gYy5yb3c8MD8oZD0tMSxjLnJvdz0wKTpjLnJvdz4wJiZjLnJvdz49YSYmKGQ9MSxjLnJvdz1hLTEpLGMuY29sPDA/KGg9LTEs''@;'; put 'put ''Yy5jb2w9MCk6Yy5jb2w+MCYmYy5jb2w+PWwmJihoPTEsYy5jb2w9bC0xKSx7cm93RGlyOmQsY29sRGlyOmh9fWZ1bmN0aW9uIGx0ZSgpe3JldHVybnt3aWR0aDpzMChrMix0aGlzKS54K3RoaXMuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpLGhlaWdodDpzMChrMix0aGlzKS55K3RoaXMuY291''@;'; put 'put ''bnRSZW5kZXJhYmxlUm93cygpfX1mdW5jdGlvbiB6TihjKXtpZighWyJmb3J3YXJkIiwiYmFja3dhcmQiXS5pbmNsdWRlcyhjKSlyZXR1cm4gbnVsbDtjb25zdCBsPXRoaXMuZ2V0Q3VycmVudFNlbGVjdGlvbigpLmdldFRvcFN0YXJ0Q29ybmVyKCksYT10aGlzLmdldEN1cnJlbnRTZWxlY3Rp''@;'; put 'put ''b24oKS5nZXRCb3R0b21FbmRDb3JuZXIoKSxbZCxoLGYsdl09ImZvcndhcmQiPT09Yz9bbC5yb3csYS5yb3csbC5jb2wsYS5jb2xdOlthLnJvdyxsLnJvdyxhLmNvbCxsLmNvbF0sTT1NbChPbCx0aGlzLFVOKS5jYWxsKHRoaXMsZCxoKSxEPU1sKE9sLHRoaXMsWk4pLmNhbGwodGhpcyxmLHYp''@;'; put 'put ''O3JldHVybiBudWxsPT09TXx8bnVsbD09PUQ/bnVsbDp0aGlzLnRhYmxlQXBpLmNyZWF0ZUNlbGxDb29yZHMoTSxEKX1mdW5jdGlvbiBVTihjLGwpe2NvbnN0IGE9dGhpcy50YWJsZUFwaS5maW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlUm93KGMsbCk7cmV0dXJuIG51bGw9PT1hP251bGw6''@;'; put 'put ''czAoazIsdGhpcykueSthfWZ1bmN0aW9uIFpOKGMsbCl7Y29uc3QgYT10aGlzLnRhYmxlQXBpLmZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVDb2x1bW4oYyxsKTtyZXR1cm4gbnVsbD09PWE/bnVsbDpzMChrMix0aGlzKS54K2F9ZnVuY3Rpb24geW1lKGMpe2NvbnN0e3JvdzpsLGNvbDph''@;'; put 'put ''fT10aGlzLnRhYmxlQXBpLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhjKTtpZihudWxsPT09bHx8bnVsbD09PWEpdGhyb3cgbmV3IEVycm9yKCJSZW5kZXJhYmxlIGNvb3JkcyBhcmUgbm90IHZpc2libGUuIik7cmV0dXJuIHRoaXMudGFibGVBcGkuY3JlYXRlQ2VsbENvb3JkcyhzMChrMix0''@;'; put 'put ''aGlzKS55K2wsczAoazIsdGhpcykueCthKX1mdW5jdGlvbiBlQyhjKXtjb25zdCBsPWMuY2xvbmUoKTtyZXR1cm4gbC5jb2w9Yy5jb2wtczAoazIsdGhpcykueCxsLnJvdz1jLnJvdy1zMChrMix0aGlzKS55LHRoaXMudGFibGVBcGkucmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKGwpfXBsKHN0''@;'; put 'put ''ZSxaMCk7Y2xhc3MgYWN0IGV4dGVuZHMgc3Rle2NhbGN1bGF0ZU9mZnNldCgpe3JldHVybnt4OnRoaXMudGFibGVBcGkubmF2aWdhYmxlSGVhZGVycygpP3RoaXMudGFibGVBcGkuY291bnRSb3dIZWFkZXJzKCk6MCx5OnRoaXMudGFibGVBcGkubmF2aWdhYmxlSGVhZGVycygpP3RoaXMudGFi''@;'; put 'put ''bGVBcGkuY291bnRDb2xIZWFkZXJzKCk6MH19Y291bnRSZW5kZXJhYmxlUm93cygpe3JldHVybiB0aGlzLnRhYmxlQXBpLmNvdW50UmVuZGVyYWJsZVJvd3MoKX1jb3VudFJlbmRlcmFibGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMudGFibGVBcGkuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpfXNo''@;'; put 'put ''b3VsZFN3aXRjaFNlbGVjdGlvbkxheWVyKCl7cmV0dXJuITF9fWNsYXNzIG9jdCBleHRlbmRzIHN0ZXtjYWxjdWxhdGVPZmZzZXQoKXtjb25zdCBsPXRoaXMuZ2V0Q3VycmVudFNlbGVjdGlvbigpLHtyb3c6YSxjb2w6ZH09bC5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksaD10aGlzLnRhYmxl''@;'; put 'put ''QXBpLmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKDAsZC0xKSxmPXRoaXMudGFibGVBcGkuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoMCxhLTEpLHY9bC5oaWdobGlnaHQuaXNIZWFkZXIoKSxNPXY/TWF0aC5hYnMoZCk6MCxEPXY/TWF0aC5hYnMoYSk6MDtyZXR1cm57eDpkPDA/''@;'; put 'put ''TTotaCx5OmE8MD9EOi1mfX1jb3VudFJlbmRlcmFibGVSb3dzKCl7Y29uc3QgbD10aGlzLmdldEN1cnJlbnRTZWxlY3Rpb24oKTtyZXR1cm4gdGhpcy50YWJsZUFwaS5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZSgwLGwuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKS5yb3cpfWNvdW50UmVu''@;'; put 'put ''ZGVyYWJsZUNvbHVtbnMoKXtjb25zdCBsPXRoaXMuZ2V0Q3VycmVudFNlbGVjdGlvbigpO3JldHVybiB0aGlzLnRhYmxlQXBpLmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKDAsbC5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLmNvbCl9dHJhbnNmb3JtRW5kKCl7dGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJgdHJhbnNmb3JtRW5kYCBpcyBub3QgdmFsaWQgZm9yIGZvY3VzIHNlbGVjdGlvbiB1c2UgYHRyYW5zZm9ybVN0YXJ0YCBpbnN0ZWFkIil9c2hvdWxkU3dpdGNoU2VsZWN0aW9uTGF5ZXIoKXtyZXR1cm4hMH19Y29uc3Qgc2N0PVszLDJdLGxjdD1bWyJudW1iZXIiXSxbIm51bWJlciIs''@;'; put 'put ''InN0cmluZyJdLFsibnVtYmVyIiwidW5kZWZpbmVkIl0sWyJudW1iZXIiLCJzdHJpbmciLCJ1bmRlZmluZWQiXV0sdXRlPVN5bWJvbCgicm9vdCIpLF9tZT1TeW1ib2woImNoaWxkIik7ZnVuY3Rpb24gdEMoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNb''@;'; put 'put ''MV0/YXJndW1lbnRzWzFdOnV0ZTtpZihsIT09dXRlJiZsIT09X21lKXRocm93IG5ldyBFcnJvcigiVGhlIHNlY29uZCBhcmd1bWVudCBpcyB1c2VkIGludGVybmFsbHkgb25seSBhbmQgY2Fubm90IGJlIG92ZXJ3cml0dGVuLiIpO2NvbnN0IGE9QXJyYXkuaXNBcnJheShjKSxkPWw9PT11dGU7''@;'; put 'put ''bGV0IGg9MDtpZihhKXtjb25zdCBmPWNbMF07MD09PWMubGVuZ3RoP2g9MTpkJiZmIGluc3RhbmNlb2YgX04/aD0zOmQmJkFycmF5LmlzQXJyYXkoZik/aD10QyhmLF9tZSk6Yy5sZW5ndGg+PTImJmMubGVuZ3RoPD00JiYhYy5zb21lKChNLEQpPT4hbGN0W0RdLmluY2x1ZGVzKHR5cGVvZiBN''@;'; put 'put ''KSkmJihoPTIpfXJldHVybiBofWZ1bmN0aW9uIG1rKGMpe2xldHtjcmVhdGVDZWxsQ29vcmRzOmwsY3JlYXRlQ2VsbFJhbmdlOmEsa2VlcERpcmVjdGlvbjpkPSExLHByb3BUb0NvbDpofT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307''@;'; put 'put ''aWYoIXNjdC5pbmNsdWRlcyhjKSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHNlbGVjdGlvbiByYW5nZXMgc2NoZW1hIHR5cGUgd2FzIHByb3ZpZGVkLiIpO3JldHVybiBmdW5jdGlvbihmKXtjb25zdCB2PTM9PT1jO2xldCBNPXY/Zi5mcm9tLnJvdzpmWzBdLEQ9dj9mLmZyb20uY29s''@;'; put 'put ''OmZbMV0sVT12P2YudG8ucm93OmZbMl0sdGU9dj9mLnRvLmNvbDpmWzNdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBoJiYoInN0cmluZyI9PXR5cGVvZiBEJiYoRD1oKEQpKSwic3RyaW5nIj09dHlwZW9mIHRlJiYodGU9aCh0ZSkpKSxiYyhVKSYmKFU9TSksYmModGUpJiYodGU9RCksIWQpe2Nv''@;'; put 'put ''bnN0IEZlPU0sV2U9RCxudD1VLGR0PXRlO009TWF0aC5taW4oRmUsbnQpLEQ9TWF0aC5taW4oV2UsZHQpLFU9TWF0aC5tYXgoRmUsbnQpLHRlPU1hdGgubWF4KFdlLGR0KX1jb25zdCBvZT12P2YuaGlnaGxpZ2h0LmNsb25lKCk6bChNLEQpLHZlPWwoTSxEKSx3ZT1sKFUsdGUpO3JldHVybiBh''@;'; put 'put ''KG9lLHZlLHdlKX19ZnVuY3Rpb24gZHYoYyxsLGEpeyhmdW5jdGlvbiBkY3QoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEp''@;'; put 'put ''fWZ1bmN0aW9uIGh2KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBoY3QoYyl7dmFyIGw9ZnVuY3Rpb24gZmN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8''@;'; put 'put ''ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1''@;'; put 'put ''cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBaYyhjLGwpe3JldHVybiBjLmdldCh3bWUoYyxsKSl9''@;'; put 'put ''ZnVuY3Rpb24gRDIoYyxsLGEpe3JldHVybiBjLnNldCh3bWUoYyxsKSxhKSxhfWZ1bmN0aW9uIHdtZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBl''@;'; put 'put ''bGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIEkyPW5ldyBXZWFrTWFwLG5DPW5ldyBXZWFrTWFwLEdOPW5ldyBXZWFrTWFwLEg2PW5ldyBXZWFrTWFwLCROPW5ldyBXZWFrTWFwLHZrPW5ldyBXZWFrTWFwLEtOPW5ldyBXZWFrTWFwO2NsYXNzIENtZXtjb25zdHJ1''@;'; put 'put ''Y3RvcihsLGEpe3ZhciBkPXRoaXM7aHYodGhpcywic2V0dGluZ3MiLHZvaWQgMCksaHYodGhpcywidGFibGVQcm9wcyIsdm9pZCAwKSxodih0aGlzLCJpblByb2dyZXNzIiwhMSksaHYodGhpcywic2VsZWN0ZWRSYW5nZSIsbmV3IGVjdCgoaCxmLHYpPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRl''@;'; put 'put ''Q2VsbFJhbmdlKGgsZix2KSkpLGh2KHRoaXMsImhpZ2hsaWdodCIsdm9pZCAwKSxkdih0aGlzLEkyLHZvaWQgMCksZHYodGhpcyxuQyx2b2lkIDApLGh2KHRoaXMsInNlbGVjdGVkQnlSb3dIZWFkZXIiLG5ldyBTZXQpLGh2KHRoaXMsInNlbGVjdGVkQnlDb2x1bW5IZWFkZXIiLG5ldyBTZXQp''@;'; put 'put ''LGR2KHRoaXMsR04sITEpLGR2KHRoaXMsSDYsITEpLGR2KHRoaXMsJE4sInVua25vd24iKSxkdih0aGlzLHZrLC0xKSxkdih0aGlzLEtOLDApLHRoaXMuc2V0dGluZ3M9bCx0aGlzLnRhYmxlUHJvcHM9YSx0aGlzLmhpZ2hsaWdodD1uZXcgcWx0KHtoZWFkZXJDbGFzc05hbWU6bC5jdXJyZW50''@;'; put 'put ''SGVhZGVyQ2xhc3NOYW1lLGFjdGl2ZUhlYWRlckNsYXNzTmFtZTpsLmFjdGl2ZUhlYWRlckNsYXNzTmFtZSxyb3dDbGFzc05hbWU6bC5jdXJyZW50Um93Q2xhc3NOYW1lLGNvbHVtbkNsYXNzTmFtZTpsLmN1cnJlbnRDb2xDbGFzc05hbWUsY2VsbEF0dHJpYnV0ZXM6W1siYXJpYS1zZWxlY3Rl''@;'; put 'put ''ZCIsInRydWUiXV0scm93SW5kZXhNYXBwZXI6dGhpcy50YWJsZVByb3BzLnJvd0luZGV4TWFwcGVyLGNvbHVtbkluZGV4TWFwcGVyOnRoaXMudGFibGVQcm9wcy5jb2x1bW5JbmRleE1hcHBlcixkaXNhYmxlZENlbGxTZWxlY3Rpb246KGgsZik9PnRoaXMudGFibGVQcm9wcy5pc0Rpc2FibGVk''@;'; put 'put ''Q2VsbFNlbGVjdGlvbihoLGYpLGNlbGxDb3JuZXJWaXNpYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGQuaXNDZWxsQ29ybmVyVmlzaWJsZSguLi5hcmd1bWVudHMpfSxhcmVhQ29ybmVyVmlzaWJsZTpmdW5jdGlvbigpe3JldHVybiBkLmlzQXJlYUNvcm5lclZpc2libGUoLi4uYXJndW1lbnRzKX0s''@;'; put 'put ''dmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzOmg9PnRoaXMudGFibGVQcm9wcy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoaCkscmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzOmg9PnRoaXMudGFibGVQcm9wcy5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMoaCksY3JlYXRlQ2VsbENvb3JkczooaCxm''@;'; put 'put ''KT0+dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoaCxmKSxjcmVhdGVDZWxsUmFuZ2U6KGgsZix2KT0+dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxSYW5nZShoLGYsdil9KSxEMihJMix0aGlzLG5ldyBhY3QodGhpcy5zZWxlY3RlZFJhbmdlLHsuLi50aGlzLnRhYmxlUHJvcHMs''@;'; put 'put ''bmF2aWdhYmxlSGVhZGVyczooKT0+bC5uYXZpZ2FibGVIZWFkZXJzLGZpeGVkUm93c0JvdHRvbTooKT0+bC5maXhlZFJvd3NCb3R0b20sbWluU3BhcmVSb3dzOigpPT5sLm1pblNwYXJlUm93cyxtaW5TcGFyZUNvbHM6KCk9PmwubWluU3BhcmVDb2xzLGF1dG9XcmFwUm93OigpPT5sLmF1dG9X''@;'; put 'put ''cmFwUm93LGF1dG9XcmFwQ29sOigpPT5sLmF1dG9XcmFwQ29sfSkpLEQyKG5DLHRoaXMsbmV3IG9jdCh0aGlzLnNlbGVjdGVkUmFuZ2Usey4uLnRoaXMudGFibGVQcm9wcyxuYXZpZ2FibGVIZWFkZXJzOigpPT5sLm5hdmlnYWJsZUhlYWRlcnMsZml4ZWRSb3dzQm90dG9tOigpPT4wLG1pblNw''@;'; put 'put ''YXJlUm93czooKT0+MCxtaW5TcGFyZUNvbHM6KCk9PjAsYXV0b1dyYXBSb3c6KCk9PiEwLGF1dG9XcmFwQ29sOigpPT4hMH0pKSxaYyhJMix0aGlzKS5hZGRMb2NhbEhvb2soImJlZm9yZVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3''@;'; put 'put ''IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImJlZm9yZU1vZGlmeVRyYW5zZm9ybVN0YXJ0IiwuLi5mKX0pLFpjKEkyLHRoaXMpLmFkZExvY2FsSG9vaygiYWZ0ZXJUcmFuc2Zvcm1TdGFydCIsZnVuY3Rpb24oKXtmb3IodmFy''@;'; put 'put ''IGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0IiwuLi5mKX0pLFpjKEkyLHRoaXMpLmFkZExvY2FsSG9vaygiYmVmb3JlVHJhbnNmb3Jt''@;'; put 'put ''RW5kIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImJlZm9yZU1vZGlmeVRyYW5zZm9ybUVuZCIsLi4uZil9KSxaYyhJMix0aGlzKS5hZGRMb2Nh''@;'; put 'put ''bEhvb2soImFmdGVyVHJhbnNmb3JtRW5kIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImFmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kIiwuLi5mKX0p''@;'; put 'put ''LFpjKEkyLHRoaXMpLmFkZExvY2FsSG9vaygiaW5zZXJ0Um93UmVxdWlyZSIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJpbnNlcnRSb3dSZXF1''@;'; put 'put ''aXJlIiwuLi5mKX0pLFpjKEkyLHRoaXMpLmFkZExvY2FsSG9vaygiaW5zZXJ0Q29sUmVxdWlyZSIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJp''@;'; put 'put ''bnNlcnRDb2xSZXF1aXJlIiwuLi5mKX0pLFpjKEkyLHRoaXMpLmFkZExvY2FsSG9vaygiYmVmb3JlUm93V3JhcCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5ydW5Mb2Nh''@;'; put 'put ''bEhvb2tzKCJiZWZvcmVSb3dXcmFwIiwuLi5mKX0pLFpjKEkyLHRoaXMpLmFkZExvY2FsSG9vaygiYmVmb3JlQ29sdW1uV3JhcCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4g''@;'; put 'put ''ZC5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVDb2x1bW5XcmFwIiwuLi5mKX0pLFpjKG5DLHRoaXMpLmFkZExvY2FsSG9vaygiYmVmb3JlVHJhbnNmb3JtU3RhcnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1''@;'; put 'put ''bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxIb29rcygiYmVmb3JlTW9kaWZ5VHJhbnNmb3JtRm9jdXMiLC4uLmYpfSksWmMobkMsdGhpcykuYWRkTG9jYWxIb29rKCJhZnRlclRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5''@;'; put 'put ''KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImFmdGVyTW9kaWZ5VHJhbnNmb3JtRm9jdXMiLC4uLmYpfSl9Z2V0U2VsZWN0ZWRSYW5nZSgpe3JldHVybiB0aGlzLnNlbGVjdGVkUmFuZ2V9Z2V0QWN0aXZlU2VsZWN0ZWRSYW5nZSgpe3Jl''@;'; put 'put ''dHVybiB0aGlzLnNlbGVjdGVkUmFuZ2UucGVla0J5SW5kZXgoWmMoS04sdGhpcykpfWdldEFjdGl2ZVNlbGVjdGlvbkxheWVySW5kZXgoKXtyZXR1cm4gWmMoS04sdGhpcyl9c2V0QWN0aXZlU2VsZWN0aW9uTGF5ZXJJbmRleChsKXtEMihLTix0aGlzLGwpfW1hcmtTb3VyY2UobCl7RDIoJE4s''@;'; put 'put ''dGhpcyxsKX1tYXJrRW5kU291cmNlKCl7RDIoJE4sdGhpcywidW5rbm93biIpfWdldFNlbGVjdGlvblNvdXJjZSgpe3JldHVybiBaYygkTix0aGlzKX1zZXRFeHBlY3RlZExheWVycyhsKXtEMih2ayx0aGlzLGwpfWJlZ2luKCl7dGhpcy5pblByb2dyZXNzPSEwfWZpbmlzaCgpe3RoaXMucnVu''@;'; put 'put ''TG9jYWxIb29rcygiYWZ0ZXJTZWxlY3Rpb25GaW5pc2hlZCIsQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkUmFuZ2UpKSx0aGlzLmluUHJvZ3Jlc3M9ITEsRDIodmssdGhpcywtMSl9aXNJblByb2dyZXNzKCl7cmV0dXJuIHRoaXMuaW5Qcm9ncmVzc31zZXRSYW5nZVN0YXJ0KGwsYSl7bGV0IGQ9''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTpsO2NvbnN0IGY9Im11bHRpcGxlIj09PXRoaXMuc2V0dGluZ3Muc2VsZWN0aW9uTW9kZSx2''@;'; put 'put ''PWJjKGEpP3RoaXMudGFibGVQcm9wcy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCk6YSxNPWwuY2xvbmUoKTtEMihINix0aGlzLCExKSxEMihHTix0aGlzLCExKSx0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVNldFJhbmdlU3RhcnQiKyhkPyJPbmx5IjoiIiksTSksKCFm''@;'; put 'put ''fHxmJiYhdiYmYmMoYSkpJiYodGhpcy5zZWxlY3RlZFJhbmdlLmNsZWFyKCksS24odGhpcy5oaWdobGlnaHQuZ2V0QXJlYXMoKSxEPT57RC5jbGVhcigpfSksS24odGhpcy5oaWdobGlnaHQuZ2V0TGF5ZXJlZEFyZWFzKCksRD0+e0QuY2xlYXIoKX0pLEtuKHRoaXMuaGlnaGxpZ2h0LmdldFJv''@;'; put 'put ''d0hlYWRlcnMoKSxEPT57RC5jbGVhcigpfSksS24odGhpcy5oaWdobGlnaHQuZ2V0Q29sdW1uSGVhZGVycygpLEQ9PntELmNsZWFyKCl9KSxLbih0aGlzLmhpZ2hsaWdodC5nZXRBY3RpdmVSb3dIZWFkZXJzKCksRD0+e0QuY2xlYXIoKX0pLEtuKHRoaXMuaGlnaGxpZ2h0LmdldEFjdGl2ZUNv''@;'; put 'put ''bHVtbkhlYWRlcnMoKSxEPT57RC5jbGVhcigpfSksS24odGhpcy5oaWdobGlnaHQuZ2V0QWN0aXZlQ29ybmVySGVhZGVycygpLEQ9PntELmNsZWFyKCl9KSxLbih0aGlzLmhpZ2hsaWdodC5nZXRSb3dIaWdobGlnaHRzKCksRD0+e0QuY2xlYXIoKX0pLEtuKHRoaXMuaGlnaGxpZ2h0LmdldENv''@;'; put 'put ''bHVtbkhpZ2hsaWdodHMoKSxEPT57RC5jbGVhcigpfSkpLHRoaXMuc2VsZWN0ZWRSYW5nZS5hZGQoTSkuY3VycmVudCgpLnNldEhpZ2hsaWdodChoLmNsb25lKCkpLDA9PT10aGlzLmdldExheWVyTGV2ZWwoKSYmKHRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5jbGVhcigpLHRoaXMuc2VsZWN0''@;'; put 'put ''ZWRCeUNvbHVtbkhlYWRlci5jbGVhcigpKSxkfHx0aGlzLnNldFJhbmdlRW5kKGwpfXNldFJhbmdlU3RhcnRPbmx5KGwsYSl7dGhpcy5zZXRSYW5nZVN0YXJ0KGwsYSwhMCxhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bCl9c2V0UmFuZ2VF''@;'; put 'put ''bmQobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRoaXMuZ2V0TGF5ZXJMZXZlbCgpO2lmKHRoaXMuc2VsZWN0ZWRSYW5nZS5pc0VtcHR5KCkpcmV0dXJuO3RoaXMuc2V0QWN0aXZlU2VsZWN0aW9uTGF5ZXJJbmRleChhKTtj''@;'; put 'put ''b25zdCBkPWwuY2xvbmUoKSxoPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxmPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKSx2PXRoaXMuZ2V0QWN0aXZlU2VsZWN0ZWRSYW5nZSgpLmNsb25lKCkuc2V0VG8obCkuaXNTaW5nbGVIZWFkZXIoKTtpZigoaD4wfHxmPjApJiYoMD09PWgm''@;'; put 'put ''JmQuY29sPDAmJiF2fHwwPT09ZiYmZC5yb3c8MCYmIXYpKXJldHVybjt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVNldFJhbmdlRW5kIixkKSx0aGlzLmJlZ2luKCk7Y29uc3QgTT10aGlzLmdldEFjdGl2ZVNlbGVjdGVkUmFuZ2UoKTtpZih0aGlzLnNldHRpbmdzLm5hdmlnYWJsZUhlYWRl''@;'; put 'put ''cnN8fE0uaGlnaGxpZ2h0Lm5vcm1hbGl6ZSgpLCJzaW5nbGUiPT09dGhpcy5zZXR0aW5ncy5zZWxlY3Rpb25Nb2RlKU0uc2V0RnJvbShNLmhpZ2hsaWdodCksTS5zZXRUbyhNLmhpZ2hsaWdodCk7ZWxzZXtjb25zdCBVPU0uZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpLHRlPU0uZ2V0VmVydGlj''@;'; put 'put ''YWxEaXJlY3Rpb24oKSxvZT10aGlzLmlzTXVsdGlwbGUoKTtNLnNldFRvKGQpLG9lJiYoVSE9PU0uZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpfHwxPT09TS5nZXRXaWR0aCgpJiYhTS5pbmNsdWRlcyhNLmhpZ2hsaWdodCkpJiZNLmZyb20uYXNzaWduKHtjb2w6TS5oaWdobGlnaHQuY29sfSks''@;'; put 'put ''b2UmJih0ZSE9PU0uZ2V0VmVydGljYWxEaXJlY3Rpb24oKXx8MT09PU0uZ2V0SGVpZ2h0KCkmJiFNLmluY2x1ZGVzKE0uaGlnaGxpZ2h0KSkmJk0uZnJvbS5hc3NpZ24oe3JvdzpNLmhpZ2hsaWdodC5yb3d9KX1oPjAmJmY+MCYmKCF0aGlzLnNldHRpbmdzLm5hdmlnYWJsZUhlYWRlcnN8fHRo''@;'; put 'put ''aXMuc2V0dGluZ3MubmF2aWdhYmxlSGVhZGVycyYmIU0uaXNTaW5nbGVIZWFkZXIoKSkmJk0udG8ubm9ybWFsaXplKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVIaWdobGlnaHRTZXQiKSx0aGlzLnNldFJhbmdlRm9jdXModGhpcy5nZXRBY3RpdmVTZWxlY3RlZFJhbmdlKCkuaGlnaGxp''@;'; put 'put ''Z2h0LGEpLHRoaXMuYXBwbHlBbmRDb21taXQodGhpcy5nZXRBY3RpdmVTZWxlY3RlZFJhbmdlKCksYSk7Y29uc3QgRD0tMT09PVpjKHZrLHRoaXMpfHx0aGlzLnNlbGVjdGVkUmFuZ2Uuc2l6ZSgpPT09WmModmssdGhpcyk7dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclNldFJhbmdlRW5kIixs''@;'; put 'put ''LEQpfWFwcGx5QW5kQ29tbWl0KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0QWN0aXZlU2VsZWN0ZWRSYW5nZSgpLGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRz''@;'; put 'put ''WzFdOnRoaXMuZ2V0TGF5ZXJMZXZlbCgpO2NvbnN0IGQ9dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpLGg9dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpO3RoaXMuaGlnaGxpZ2h0LnVzZUxheWVyTGV2ZWwoYSk7Y29uc3QgZj10aGlzLmhpZ2hsaWdodC5jcmVhdGVBcmVhKCksdj10aGlz''@;'; put 'put ''LmhpZ2hsaWdodC5jcmVhdGVMYXllcmVkQXJlYSgpLE09dGhpcy5oaWdobGlnaHQuY3JlYXRlUm93SGVhZGVyKCksRD10aGlzLmhpZ2hsaWdodC5jcmVhdGVDb2x1bW5IZWFkZXIoKSxVPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFjdGl2ZVJvd0hlYWRlcigpLHRlPXRoaXMuaGlnaGxpZ2h0LmNy''@;'; put 'put ''ZWF0ZUFjdGl2ZUNvbHVtbkhlYWRlcigpLG9lPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFjdGl2ZUNvcm5lckhlYWRlcigpLHZlPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZVJvd0hpZ2hsaWdodCgpLHdlPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUNvbHVtbkhpZ2hsaWdodCgpO2lmKGYuY2xlYXIoKSx2''@;'; put 'put ''LmNsZWFyKCksTS5jbGVhcigpLEQuY2xlYXIoKSxVLmNsZWFyKCksdGUuY2xlYXIoKSxvZS5jbGVhcigpLHZlLmNsZWFyKCksd2UuY2xlYXIoKSx0aGlzLmhpZ2hsaWdodC5pc0VuYWJsZWRGb3IoImFyZWEiLGwuaGlnaGxpZ2h0KSYmKHRoaXMuaXNNdWx0aXBsZSgpfHxhPj0xKSYmKGYuYWRk''@;'; put 'put ''KGwuZnJvbSkuYWRkKGwudG8pLmNvbW1pdCgpLHYuYWRkKGwuZnJvbSkuYWRkKGwudG8pLmNvbW1pdCgpLDE9PT1hKSl7Y29uc3QgRmU9dGhpcy5zZWxlY3RlZFJhbmdlLnBlZWtCeUluZGV4KGEtMSk7dGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZlbChhLTEpLHRoaXMuaGlnaGxpZ2h0LmNy''@;'; put 'put ''ZWF0ZUFyZWEoKS5hZGQoRmUuZnJvbSkuY29tbWl0KCkuc3luY1dpdGgoRmUpLHRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUxheWVyZWRBcmVhKCkuYWRkKEZlLmZyb20pLmNvbW1pdCgpLnN5bmNXaXRoKEZlKSx0aGlzLmhpZ2hsaWdodC51c2VMYXllckxldmVsKGEpfWlmKHRoaXMuaGlnaGxpZ2h0''@;'; put 'put ''LmlzRW5hYmxlZEZvcihudGUsbC5oaWdobGlnaHQpKXtpZighbC5pc1NpbmdsZUhlYWRlcigpKXtjb25zdCBudD10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heChsLmZyb20ucm93LDApLC0xKSxkdD10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhsLnRv''@;'; put 'put ''LnJvdywtMSksbXQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoLTEsTWF0aC5tYXgobC5mcm9tLmNvbCwwKSksJHQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoLTEsbC50by5jb2wpOyJzaW5nbGUiPT09dGhpcy5zZXR0aW5ncy5zZWxlY3Rpb25Nb2RlPyhNLmFk''@;'; put 'put ''ZChudCkuY29tbWl0KCksRC5hZGQobXQpLmNvbW1pdCgpLHZlLmFkZChudCkuY29tbWl0KCksd2UuYWRkKG10KS5jb21taXQoKSk6KE0uYWRkKG50KS5hZGQoZHQpLmNvbW1pdCgpLEQuYWRkKG10KS5hZGQoJHQpLmNvbW1pdCgpLHZlLmFkZChudCkuYWRkKGR0KS5jb21taXQoKSx3ZS5hZGQo''@;'; put 'put ''bXQpLmFkZCgkdCkuY29tbWl0KCkpfWNvbnN0IEZlPSFaYyhINix0aGlzKSYmdGhpcy5pc0VudGlyZVJvd1NlbGVjdGVkKCkmJihoPjAmJmg9PT1sLmdldFdpZHRoKCl8fDA9PT1oJiZ0aGlzLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKSxXZT0hWmMoSDYsdGhpcykmJnRoaXMuaXNFbnRpcmVD''@;'; put 'put ''b2x1bW5TZWxlY3RlZCgpJiYoZD4wJiZkPT09bC5nZXRIZWlnaHQoKXx8MD09PWQmJnRoaXMuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpO0ZlJiZVLmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heChsLmZyb20ucm93LDApLE1hdGgubWluKC10aGlzLnRh''@;'; put 'put ''YmxlUHJvcHMuY291bnRSb3dIZWFkZXJzKCksLTEpKSkuYWRkKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KGwudG8ucm93LDApLC0xKSkuY29tbWl0KCksV2UmJnRlLmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbigtdGhpcy50''@;'; put 'put ''YWJsZVByb3BzLmNvdW50Q29sSGVhZGVycygpLC0xKSxNYXRoLm1heChsLmZyb20uY29sLDApKSkuYWRkKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKC0xLE1hdGgubWF4KGwudG8uY29sLDApKSkuY29tbWl0KCksRmUmJldlJiZvZS5hZGQodGhpcy50YWJsZVByb3BzLmNyZWF0''@;'; put 'put ''ZUNlbGxDb29yZHMoLXRoaXMudGFibGVQcm9wcy5jb3VudENvbEhlYWRlcnMoKSwtdGhpcy50YWJsZVByb3BzLmNvdW50Um93SGVhZGVycygpKSkuYWRkKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKC0xLC0xKSkuY29tbWl0KCl9fXNldFJhbmdlRm9jdXMobCl7bGV0IGE9YXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRoaXMuZ2V0TGF5ZXJMZXZlbCgpO2lmKHRoaXMuc2VsZWN0ZWRSYW5nZS5pc0VtcHR5KCkpcmV0dXJuO3RoaXMuc2V0QWN0aXZlU2VsZWN0aW9uTGF5ZXJJbmRleChhKSxaYyhJMix0aGlzKS5zZXRB''@;'; put 'put ''Y3RpdmVMYXllckluZGV4KGEpLFpjKG5DLHRoaXMpLnNldEFjdGl2ZUxheWVySW5kZXgoYSk7Y29uc3QgZD10aGlzLmdldEFjdGl2ZVNlbGVjdGVkUmFuZ2UoKTt0aGlzLmluUHJvZ3Jlc3N8fHRoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlU2V0Rm9jdXMiLGwpO2NvbnN0IGg9dGhpcy5oaWdo''@;'; put 'put ''bGlnaHQuZ2V0Rm9jdXMoKTtoLmNsZWFyKCksZC5zZXRIaWdobGlnaHQobCksdGhpcy5pblByb2dyZXNzfHx0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZUhpZ2hsaWdodFNldCIpLHRoaXMuaGlnaGxpZ2h0LmlzRW5hYmxlZEZvcihqTixkLmhpZ2hsaWdodCkmJmguYWRkKGQuaGlnaGxpZ2h0''@;'; put 'put ''KS5jb21taXQoKS5zeW5jV2l0aChkKSx0aGlzLmluUHJvZ3Jlc3N8fChEMihHTix0aGlzLCEwKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyU2V0Rm9jdXMiLGQuaGlnaGxpZ2h0KSl9dHJhbnNmb3JtU3RhcnQobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3Vt''@;'; put 'put ''ZW50c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0e3Zpc3VhbENvb3JkczpofT1aYyhJMix0aGlzKS50cmFuc2Zvcm1TdGFydChsLGEsZCk7dGhpcy5zZXRSYW5nZVN0YXJ0KGgpfXRyYW5zZm9ybUVuZChsLGEpe2NvbnN0e3Zpc3VhbENvb3JkczpkLHNlbGVjdGlvbkxheWVyOmh9PVpjKEkyLHRo''@;'; put 'put ''aXMpLnRyYW5zZm9ybUVuZChsLGEpO3RoaXMuc2V0UmFuZ2VFbmQoZCxoKX10cmFuc2Zvcm1Gb2N1cyhsLGEpe2NvbnN0e3NlbGVjdGlvbkxheWVyOmQsdmlzdWFsQ29vcmRzOmh9PVpjKG5DLHRoaXMpLnRyYW5zZm9ybVN0YXJ0KGwsYSk7dGhpcy5zZXRSYW5nZUZvY3VzKGgubm9ybWFsaXpl''@;'; put 'put ''KCksZCl9c2hpZnRSb3dzKGwsYSl7aWYoIXRoaXMuaXNTZWxlY3RlZCgpKXJldHVybjtjb25zdCBkPXRoaXMuZ2V0QWN0aXZlU2VsZWN0ZWRSYW5nZSgpO2lmKHRoaXMuaXNTZWxlY3RlZEJ5Q29ybmVyKCkpdGhpcy5zZWxlY3RBbGwoITAsITAse2Rpc2FibGVIZWFkZXJzSGlnaGxpZ2h0OiEw''@;'; put 'put ''fSk7ZWxzZSBpZih0aGlzLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHxkLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKS5yb3c+PWwpe2NvbnN0e2Zyb206aCx0bzpmLGhpZ2hsaWdodDp2fT1kLE09dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpLEQ9dGhpcy5pc1NlbGVjdGVkQnlSb3dI''@;'; put 'put ''ZWFkZXIoKSxVPXRoaXMuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCksdGU9VT8tMTowLG9lPVU/MDphO3RoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLnBvcCgpO2NvbnN0IHZlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGdzKGgucm93K29lLHRlLE0tMSksaC5jb2wpLHdlPXRo''@;'; put 'put ''aXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGdzKGYucm93K2EsdGUsTS0xKSxmLmNvbCk7dGhpcy5tYXJrU291cmNlKCJzaGlmdCIpLHYucm93Pj1sP3RoaXMuc2V0UmFuZ2VTdGFydE9ubHkodmUsITAsdGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoZ3Modi5yb3crYSww''@;'; put 'put ''LE0tMSksdi5jb2wpKTp0aGlzLnNldFJhbmdlU3RhcnRPbmx5KHZlLCEwKSxEJiZ0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSxVJiZ0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSx0aGlzLnNldFJh''@;'; put 'put ''bmdlRW5kKHdlKSx0aGlzLm1hcmtFbmRTb3VyY2UoKX19c2hpZnRDb2x1bW5zKGwsYSl7aWYoIXRoaXMuaXNTZWxlY3RlZCgpKXJldHVybjtjb25zdCBkPXRoaXMuZ2V0QWN0aXZlU2VsZWN0ZWRSYW5nZSgpO2lmKHRoaXMuaXNTZWxlY3RlZEJ5Q29ybmVyKCkpdGhpcy5zZWxlY3RBbGwoITAs''@;'; put 'put ''ITAse2Rpc2FibGVIZWFkZXJzSGlnaGxpZ2h0OiEwfSk7ZWxzZSBpZih0aGlzLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpfHxkLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKS5jb2w+PWwpe2NvbnN0e2Zyb206aCx0bzpmLGhpZ2hsaWdodDp2fT1kLE09dGhpcy50YWJsZVByb3BzLmNvdW50Q29s''@;'; put 'put ''cygpLEQ9dGhpcy5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSxVPXRoaXMuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCksdGU9RD8tMTowLG9lPUQ/MDphO3RoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLnBvcCgpO2NvbnN0IHZlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGgucm93''@;'; put 'put ''LGdzKGguY29sK29lLHRlLE0tMSkpLHdlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGYucm93LGdzKGYuY29sK2EsdGUsTS0xKSk7dGhpcy5tYXJrU291cmNlKCJzaGlmdCIpLHYuY29sPj1sP3RoaXMuc2V0UmFuZ2VTdGFydE9ubHkodmUsITAsdGhpcy50YWJsZVByb3BzLmNy''@;'; put 'put ''ZWF0ZUNlbGxDb29yZHModi5yb3csZ3Modi5jb2wrYSwwLE0tMSkpKTp0aGlzLnNldFJhbmdlU3RhcnRPbmx5KHZlLCEwKSxEJiZ0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSxVJiZ0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuYWRkKHRoaXMu''@;'; put 'put ''Z2V0TGF5ZXJMZXZlbCgpKSx0aGlzLnNldFJhbmdlRW5kKHdlKSx0aGlzLm1hcmtFbmRTb3VyY2UoKX19Z2V0TGF5ZXJMZXZlbCgpe3JldHVybiB0aGlzLnNlbGVjdGVkUmFuZ2Uuc2l6ZSgpLTF9aXNTZWxlY3RlZCgpe3JldHVybiF0aGlzLnNlbGVjdGVkUmFuZ2UuaXNFbXB0eSgpfWlzTXVs''@;'; put 'put ''dGlwbGUoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXRBY3RpdmVTZWxlY3RlZFJhbmdlKCk7aWYoIXRoaXMuaXNTZWxlY3RlZCgpKXJldHVybiExO2NvbnN0IGE9dmgoIWwuaXNTaW5nbGUoKSk7cmV0dXJuIHRo''@;'; put 'put ''aXMucnVuTG9jYWxIb29rcygiYWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uIixhKSxhLnZhbHVlfWlzRm9jdXNTZWxlY3Rpb25DaGFuZ2VkKCl7cmV0dXJuIHRoaXMuaXNTZWxlY3RlZCgpJiZaYyhHTix0aGlzKX1pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXRMYXllckxldmVsKCk7cmV0dXJuIXRoaXMuaXNTZWxlY3RlZEJ5Q29ybmVyKGwpJiYoLTE9PT1sP3RoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5zaXplPjA6dGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLmhhcyhs''@;'; put 'put ''KSl9aXNFbnRpcmVSb3dTZWxlY3RlZCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdldExheWVyTGV2ZWwoKTtjb25zdCBhPWg9Pntjb25zdHtjb2w6Zn09aC5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksdj10aGlz''@;'; put 'put ''LnRhYmxlUHJvcHMuY291bnRSb3dIZWFkZXJzKCksTT10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCk7cmV0dXJuKHY+MCYmZjwwfHwwPT09dikmJmguZ2V0V2lkdGgoKT09PU19O2lmKC0xPT09bClyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkUmFuZ2UpLnNvbWUoaD0+YShoKSk7''@;'; put 'put ''Y29uc3QgZD10aGlzLnNlbGVjdGVkUmFuZ2UucGVla0J5SW5kZXgobCk7cmV0dXJuISFkJiZhKGQpfWlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdldExheWVyTGV2ZWwo''@;'; put 'put ''KTtyZXR1cm4hdGhpcy5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmKC0xPT09bD90aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuc2l6ZT4wOnRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5oYXMobCkpfWlzRW50aXJlQ29sdW1uU2VsZWN0ZWQoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAm''@;'; put 'put ''JnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXRMYXllckxldmVsKCk7Y29uc3QgYT1oPT57Y29uc3R7cm93OmZ9PWguZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLHY9dGhpcy50YWJsZVByb3BzLmNvdW50Q29sSGVhZGVycygpLE09dGhpcy50YWJsZVByb3BzLmNv''@;'; put 'put ''dW50Um93cygpO3JldHVybih2PjAmJmY8MHx8MD09PXYpJiZoLmdldEhlaWdodCgpPT09TX07aWYoLTE9PT1sKXJldHVybiBBcnJheS5mcm9tKHRoaXMuc2VsZWN0ZWRSYW5nZSkuc29tZShoPT5hKGgpKTtjb25zdCBkPXRoaXMuc2VsZWN0ZWRSYW5nZS5wZWVrQnlJbmRleChsKTtyZXR1cm4h''@;'; put 'put ''IWQmJmEoZCl9aXNTZWxlY3RlZEJ5QW55SGVhZGVyKCl7cmV0dXJuIHRoaXMuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKC0xKXx8dGhpcy5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoLTEpfHx0aGlzLmlzU2VsZWN0ZWRCeUNvcm5lcigpfWlzU2VsZWN0ZWRCeUNvcm5lcigpe3JldHVybiB0aGlz''@;'; put 'put ''LnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuaGFzKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSYmdGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLmhhcyh0aGlzLmdldExheWVyTGV2ZWwoKSl9aW5JblNlbGVjdGlvbihsKXtyZXR1cm4gdGhpcy5zZWxlY3RlZFJhbmdlLmluY2x1ZGVzKGwpfWlzQ2VsbENv''@;'; put 'put ''cm5lclZpc2libGUoKXtyZXR1cm4gdGhpcy5zZXR0aW5ncy5maWxsSGFuZGxlJiYhdGhpcy50YWJsZVByb3BzLmlzRWRpdG9yT3BlbmVkKCkmJiF0aGlzLmlzTXVsdGlwbGUoKX1pc0NlbGxWaXNpYmxlKGwpe2NvbnN0IGE9dGhpcy50YWJsZVByb3BzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3Jk''@;'; put 'put ''cyhsKTtyZXR1cm4gbnVsbCE9PWEucm93JiZudWxsIT09YS5jb2x9aXNBcmVhQ29ybmVyVmlzaWJsZShsKXtyZXR1cm4oIU51bWJlci5pc0ludGVnZXIobCl8fGw9PT10aGlzLmdldExheWVyTGV2ZWwoKSkmJnRoaXMuc2V0dGluZ3MuZmlsbEhhbmRsZSYmIXRoaXMudGFibGVQcm9wcy5pc0Vk''@;'; put 'put ''aXRvck9wZW5lZCgpJiZ0aGlzLmlzTXVsdGlwbGUoKX1jbGVhcigpe3RoaXMuc2VsZWN0ZWRSYW5nZS5jbGVhcigpLHRoaXMuaGlnaGxpZ2h0LmNsZWFyKCl9ZGVzZWxlY3QoKXt0aGlzLmlzU2VsZWN0ZWQoKSYmKHRoaXMuaW5Qcm9ncmVzcz0hMSx0aGlzLmNsZWFyKCksdGhpcy5ydW5Mb2Nh''@;'; put 'put ''bEhvb2tzKCJhZnRlckRlc2VsZWN0IikpfXNlbGVjdEFsbCgpe3ZhciBsO2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sZD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLGg9''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOntmb2N1c1Bvc2l0aW9uOiExLGRpc2FibGVIZWFkZXJzSGlnaGxpZ2h0OiExfTtjb25zdCBmPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSx2PXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMo''@;'; put 'put ''KSxNPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd0hlYWRlcnMoKSxEPXRoaXMudGFibGVQcm9wcy5jb3VudENvbEhlYWRlcnMoKSxVPWQ/LUQ6MCx0ZT1hPy1NOjA7aWYoMD09PVUmJjA9PT10ZSYmKDA9PT1mfHwwPT09dikpcmV0dXJuO2xldCBvZT1udWxsPT09KGw9dGhpcy5nZXRBY3RpdmVT''@;'; put 'put ''ZWxlY3RlZFJhbmdlKCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmhpZ2hsaWdodDtjb25zdHtmb2N1c1Bvc2l0aW9uOnZlLGRpc2FibGVIZWFkZXJzSGlnaGxpZ2h0OndlfT1oO3ZlJiZOdW1iZXIuaXNJbnRlZ2VyKHZlPy5yb3cpJiZOdW1iZXIuaXNJbnRlZ2VyKHZlPy5jb2wpJiYob2U9dGhp''@;'; put 'put ''cy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoZ3ModmUucm93LFUsZi0xKSxncyh2ZS5jb2wsdGUsdi0xKSkpO2NvbnN0IEZlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKFUsdGUpLFdlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGYtMSx2LTEpO3RoaXMu''@;'; put 'put ''Y2xlYXIoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVNlbGVjdEFsbCIsRmUsV2Usb2UpLHRoaXMuc2V0UmFuZ2VTdGFydE9ubHkoRmUsdm9pZCAwLG9lKSxEMihINix0aGlzLHdlKSx0ZTwwJiZ0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSxV''@;'; put 'put ''PDAmJnRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLHRoaXMuc2V0UmFuZ2VFbmQoV2UpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJTZWxlY3RBbGwiLEZlLFdlLG9lKSx0aGlzLmZpbmlzaCgpfXNlbGVjdENlbGxzKGwpe3ZhciBhPXRoaXM7''@;'; put 'put ''Y29uc3QgZD10QyhsKTtpZigxPT09ZClyZXR1cm4hMTtpZigwPT09ZCl0aHJvdyBuZXcgRXJyb3IoWHNgVW5zdXBwb3J0ZWQgZm9ybWF0IG9mIHRoZSBzZWxlY3Rpb24gcmFuZ2VzIHdhcyBwYXNzZWQuIFRvIHNlbGVjdCBjZWxscyBwYXNzXHgyMAogICAgICAgIHRoZSBjb29yZGluYXRlcyBh''@;'; put 'put ''cyBhbiBhcnJheSBvZiBhcnJheXMgKFtbcm93U3RhcnQsIGNvbHVtblN0YXJ0L2NvbHVtblByb3BTdGFydCwgcm93RW5kLFx4MjAKICAgICAgICBjb2x1bW5FbmQvY29sdW1uUHJvcEVuZF1dKSBvciBhcyBhbiBhcnJheSBvZiBDZWxsUmFuZ2Ugb2JqZWN0cy5gKTtjb25zdCBoPW1rKGQse2Ny''@;'; put 'put ''ZWF0ZUNlbGxDb29yZHM6ZnVuY3Rpb24oKXtyZXR1cm4gYS50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoLi4uYXJndW1lbnRzKX0sY3JlYXRlQ2VsbFJhbmdlOmZ1bmN0aW9uKCl7cmV0dXJuIGEudGFibGVQcm9wcy5jcmVhdGVDZWxsUmFuZ2UoLi4uYXJndW1lbnRzKX0scHJvcFRvQ29s''@;'; put 'put ''OkQ9PnRoaXMudGFibGVQcm9wcy5wcm9wVG9Db2woRCksa2VlcERpcmVjdGlvbjohMH0pLGY9dGhpcy5zZXR0aW5ncy5uYXZpZ2FibGVIZWFkZXJzLHY9e2NvdW50Um93czp0aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCksY291bnRDb2xzOnRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKSxj''@;'; put 'put ''b3VudFJvd0hlYWRlcnM6Zj90aGlzLnRhYmxlUHJvcHMuY291bnRSb3dIZWFkZXJzKCk6MCxjb3VudENvbEhlYWRlcnM6Zj90aGlzLnRhYmxlUHJvcHMuY291bnRDb2xIZWFkZXJzKCk6MH0sTT0hbC5zb21lKEQ9Pntjb25zdCBVPWgoRCksdGU9VS5pc1ZhbGlkKHYpO3JldHVybiEodGUmJiFV''@;'; put 'put ''LmNvbnRhaW5zSGVhZGVycygpfHx0ZSYmVS5jb250YWluc0hlYWRlcnMoKSYmVS5pc1NpbmdsZUhlYWRlcigpKX0pO3JldHVybiBNJiYodGhpcy5jbGVhcigpLHRoaXMuc2V0RXhwZWN0ZWRMYXllcnMobC5sZW5ndGgpLEtuKGwsRD0+e2NvbnN0e2Zyb206VSx0bzp0ZX09aChEKTt0aGlzLnNl''@;'; put 'put ''dFJhbmdlU3RhcnRPbmx5KFUuY2xvbmUoKSwhMSksdGhpcy5zZXRSYW5nZUVuZCh0ZS5jbG9uZSgpKX0pLHRoaXMuZmluaXNoKCkpLE19c2VsZWN0Q29sdW1ucyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bCxkPWFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTowO2NvbnN0IGg9InN0cmluZyI9PXR5cGVvZiBsP3RoaXMudGFibGVQcm9wcy5wcm9wVG9Db2wobCk6bCxmPSJzdHJpbmciPT10eXBlb2YgYT90aGlzLnRhYmxlUHJvcHMucHJvcFRvQ29sKGEpOmEsdj10''@;'; put 'put ''aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCksTT10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCksRD10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xIZWFkZXJzKCksVT0wPT09RD8wOi1ELHRlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKFUsaCksb2U9dGhpcy50YWJsZVByb3Bz''@;'; put 'put ''LmNyZWF0ZUNlbGxDb29yZHModi0xLGYpLHZlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsUmFuZ2UodGUsdGUsb2UpLmlzVmFsaWQoe2NvdW50Um93czp2LGNvdW50Q29sczpNLGNvdW50Um93SGVhZGVyczowLGNvdW50Q29sSGVhZGVyczpEfSk7aWYodmUpe2xldCB3ZT0wLEZlPTA7TnVt''@;'; put 'put ''YmVyLmlzSW50ZWdlcihkPy5yb3cpJiZOdW1iZXIuaXNJbnRlZ2VyKGQ/LmNvbCk/KHdlPWdzKGQucm93LFUsdi0xKSxGZT1ncyhkLmNvbCxNYXRoLm1pbihoLGYpLE1hdGgubWF4KGgsZikpKTood2U9Z3MoZCxVLHYtMSksRmU9aCk7Y29uc3QgV2U9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNl''@;'; put 'put ''bGxDb29yZHMod2UsRmUpLG50PTA9PT1EPzA6Z3MoV2Uucm93LFUsLTEpLGR0PXYtMSxtdD10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhudCxoKSwkdD10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhkdCxmKTt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVNlbGVj''@;'; put 'put ''dENvbHVtbnMiLG10LCR0LFdlKSx0aGlzLnNldFJhbmdlU3RhcnRPbmx5KG10LHZvaWQgMCxXZSksdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSksdGhpcy5zZXRSYW5nZUVuZCgkdCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclNlbGVjdENv''@;'; put 'put ''bHVtbnMiLG10LCR0LFdlKSx0aGlzLmZpbmlzaCgpfXJldHVybiB2ZX1zZWxlY3RSb3dzKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJn''@;'; put 'put ''dW1lbnRzWzJdOjA7Y29uc3QgaD10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCksZj10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCksdj10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dIZWFkZXJzKCksTT0wPT09dj8wOi12LEQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMobCxN''@;'; put 'put ''KSxVPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGEsZi0xKSx0ZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbFJhbmdlKEQsRCxVKS5pc1ZhbGlkKHtjb3VudFJvd3M6aCxjb3VudENvbHM6Zixjb3VudFJvd0hlYWRlcnM6dixjb3VudENvbEhlYWRlcnM6MH0pO2lmKHRlKXts''@;'; put 'put ''ZXQgb2U9MCx2ZT0wO051bWJlci5pc0ludGVnZXIoZD8ucm93KSYmTnVtYmVyLmlzSW50ZWdlcihkPy5jb2wpPyhvZT1ncyhkLnJvdyxNYXRoLm1pbihsLGEpLE1hdGgubWF4KGwsYSkpLHZlPWdzKGQuY29sLE0sZi0xKSk6KG9lPWwsdmU9Z3MoZCxNLGYtMSkpO2NvbnN0IHdlPXRoaXMudGFi''@;'; put 'put ''bGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKG9lLHZlKSxGZT0wPT09dj8wOmdzKHdlLmNvbCxNLC0xKSxXZT1mLTEsbnQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMobCxGZSksZHQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoYSxXZSk7dGhpcy5ydW5Mb2NhbEhv''@;'; put 'put ''b2tzKCJiZWZvcmVTZWxlY3RSb3dzIixudCxkdCx3ZSksdGhpcy5zZXRSYW5nZVN0YXJ0T25seShudCx2b2lkIDAsd2UpLHRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLHRoaXMuc2V0UmFuZ2VFbmQoZHQpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0''@;'; put 'put ''ZXJTZWxlY3RSb3dzIixudCxkdCx3ZSksdGhpcy5maW5pc2goKX1yZXR1cm4gdGV9aW1wb3J0U2VsZWN0aW9uKGwpe2xldHtyYW5nZXM6YSxhY3RpdmVSYW5nZTpkLGFjdGl2ZVNlbGVjdGlvbkxheWVyOmgsc2VsZWN0ZWRCeVJvd0hlYWRlcjpmLHNlbGVjdGVkQnlDb2x1bW5IZWFkZXI6dixk''@;'; put 'put ''aXNhYmxlSGVhZGVyc0hpZ2hsaWdodDpNfT1sOzAhPT1hLmxlbmd0aCYmKHRoaXMuc2VsZWN0ZWRSYW5nZS5jbGVhcigpLHRoaXMuaGlnaGxpZ2h0LmNsZWFyKCksdGhpcy5pblByb2dyZXNzPSExLEQyKEg2LHRoaXMsTSksdGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyPW5ldyBTZXQoZiksdGhp''@;'; put 'put ''cy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyPW5ldyBTZXQodiksdGhpcy5zZXRBY3RpdmVTZWxlY3Rpb25MYXllckluZGV4KDApLGEuZm9yRWFjaCgoRCxVKT0+e3RoaXMuc2VsZWN0ZWRSYW5nZS5wdXNoKEQpLHRoaXMuYXBwbHlBbmRDb21taXQoRCxVKX0pLHRoaXMuc2V0UmFuZ2VGb2N1cyhk''@;'; put 'put ''LmhpZ2hsaWdodCxoKSxEMihINix0aGlzLCExKSx0aGlzLmluUHJvZ3Jlc3M9ITEpfWV4cG9ydFNlbGVjdGlvbigpe3JldHVybntyYW5nZXM6QXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkUmFuZ2UpLm1hcChsPT5sLmNsb25lKCkpLGFjdGl2ZVJhbmdlOnRoaXMuZ2V0QWN0aXZlU2VsZWN0ZWRS''@;'; put 'put ''YW5nZSgpLGFjdGl2ZVNlbGVjdGlvbkxheWVyOnRoaXMuZ2V0QWN0aXZlU2VsZWN0aW9uTGF5ZXJJbmRleCgpLHNlbGVjdGVkQnlSb3dIZWFkZXI6QXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIpLHNlbGVjdGVkQnlDb2x1bW5IZWFkZXI6QXJyYXkuZnJvbSh0aGlzLnNlbGVj''@;'; put 'put ''dGVkQnlDb2x1bW5IZWFkZXIpLGRpc2FibGVIZWFkZXJzSGlnaGxpZ2h0OlpjKEg2LHRoaXMpfX1yZWZyZXNoKCl7aWYoIXRoaXMuaXNTZWxlY3RlZCgpKXJldHVybjtjb25zdCBsPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxhPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKTtpZigw''@;'; put 'put ''PT09bHx8MD09PWEpcmV0dXJuIHZvaWQgdGhpcy5kZXNlbGVjdCgpO2NvbnN0IGQ9dGhpcy5zZWxlY3RlZFJhbmdlLnJhbmdlcy5tYXAodj0+di5jbG9uZSgpKTt0aGlzLm1hcmtTb3VyY2UoInJlZnJlc2giKTtjb25zdCBoPW5ldyBTZXQodGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyKSxmPW5l''@;'; put 'put ''dyBTZXQodGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKTt0aGlzLmNsZWFyKCksdGhpcy5zZXRFeHBlY3RlZExheWVycyhkLmxlbmd0aCksZC5mb3JFYWNoKHY9Pntjb25zdHtmcm9tOk0sdG86RCxoaWdobGlnaHQ6VX09dix0ZT1sLTEsb2U9YS0xO1UuYXNzaWduKHtyb3c6Z3MoVS5yb3cs''@;'; put 'put ''dGhpcy5zZXR0aW5ncy5uYXZpZ2FibGVIZWFkZXJzPy0xLzA6MCx0ZSksY29sOmdzKFUuY29sLHRoaXMuc2V0dGluZ3MubmF2aWdhYmxlSGVhZGVycz8tMS8wOjAsb2UpfSksTS5hc3NpZ24oe3JvdzpncyhNLnJvdywtMS8wLHRlKSxjb2w6Z3MoTS5jb2wsLTEvMCxvZSl9KSxELmFzc2lnbih7''@;'; put 'put ''cm93OmdzKEQucm93LC0xLzAsdGUpLGNvbDpncyhELmNvbCwtMS8wLG9lKX0pLHRoaXMuc2V0UmFuZ2VTdGFydE9ubHkoTSwhMCxVKSx0aGlzLnNldFJhbmdlRW5kKEQpfSksdGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyPWgsdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyPWYsdGhpcy5maW5p''@;'; put 'put ''c2goKSx0aGlzLm1hcmtFbmRTb3VyY2UoKX1jb21taXQoKXtpZih0aGlzLmhpZ2hsaWdodC5nZXRDdXN0b21TZWxlY3Rpb25zKCkuZm9yRWFjaChoPT57aC5jb21taXQoKX0pLCF0aGlzLmlzU2VsZWN0ZWQoKSlyZXR1cm47Y29uc3QgYT10aGlzLmdldExheWVyTGV2ZWwoKSxkPXRoaXMuZ2V0''@;'; put 'put ''QWN0aXZlU2VsZWN0ZWRSYW5nZSgpO3RoaXMuaGlnaGxpZ2h0LmlzRW5hYmxlZEZvcihqTixkLmhpZ2hsaWdodCkmJnRoaXMuaGlnaGxpZ2h0LmdldEZvY3VzKCkuY29tbWl0KCkuc3luY1dpdGgoZCk7Zm9yKGxldCBoPTA7aDx0aGlzLnNlbGVjdGVkUmFuZ2Uuc2l6ZSgpO2grPTEpe3RoaXMu''@;'; put 'put ''aGlnaGxpZ2h0LnVzZUxheWVyTGV2ZWwoaCk7Y29uc3QgZj10aGlzLmhpZ2hsaWdodC5jcmVhdGVBcmVhKCksdj10aGlzLmhpZ2hsaWdodC5jcmVhdGVMYXllcmVkQXJlYSgpLE09dGhpcy5oaWdobGlnaHQuY3JlYXRlUm93SGVhZGVyKCksRD10aGlzLmhpZ2hsaWdodC5jcmVhdGVDb2x1bW5I''@;'; put 'put ''ZWFkZXIoKSxVPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFjdGl2ZVJvd0hlYWRlcigpLHRlPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFjdGl2ZUNvbHVtbkhlYWRlcigpLG9lPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFjdGl2ZUNvcm5lckhlYWRlcigpLHZlPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZVJv''@;'; put 'put ''d0hpZ2hsaWdodCgpLHdlPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUNvbHVtbkhpZ2hsaWdodCgpO2YuY29tbWl0KCksdi5jb21taXQoKSxNLmNvbW1pdCgpLEQuY29tbWl0KCksVS5jb21taXQoKSx0ZS5jb21taXQoKSxvZS5jb21taXQoKSx2ZS5jb21taXQoKSx3ZS5jb21taXQoKX10aGlzLmhp''@;'; put 'put ''Z2hsaWdodC51c2VMYXllckxldmVsKGEpfX1wbChDbWUsWjApO2NvbnN0IHBjdD1DbWUse3JlZ2lzdGVyOmdjdCxnZXRJdGVtOm1jdCxoYXNJdGVtOlNtZSxnZXROYW1lczp2Y3R9PU5mKCJjZWxsVHlwZXMiKTtmdW5jdGlvbiBkdGUoYyl7aWYoIVNtZShjKSl0aHJvdyBFcnJvcihgWW91IGRl''@;'; put 'put ''Y2xhcmVkIGNlbGwgdHlwZSAiJHtjfSIgYXMgYSBzdHJpbmcgdGhhdCBpcyBub3QgbWFwcGVkIHRvIGEga25vd24gb2JqZWN0LlxuICAgICAgICAgICAgICAgICBDZWxsIHR5cGUgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYSBzdHJpbmcgbWFwcGVkIHRvIGFuIG9iamVjdCByZWdpc3RlcmVkIGJ5''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgICJIYW5kc29udGFibGUuY2VsbFR5cGVzLnJlZ2lzdGVyQ2VsbFR5cGUiIG1ldGhvZGApO3JldHVybiBtY3QoYyl9ZnVuY3Rpb24gV2YoYyxsKXsic3RyaW5nIiE9dHlwZW9mIGMmJihjPShsPWMpLkNFTExfVFlQRSk7Y29uc3R7ZWRpdG9yOmEscmVuZGVyZXI6''@;'; put 'put ''ZCx2YWxpZGF0b3I6aH09bDthJiZ5aChjLGEpLGQmJkEyKGMsZCksaCYmbnYoYyxoKSxnY3QoYyxsKX1mdW5jdGlvbiBYTihjLGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpjO2NvbnN0IGQ9InN0cmluZyI9PXR5cGVvZiBs''@;'; put 'put ''LnR5cGU/ZHRlKGwudHlwZSk6bC50eXBlO2lmKGMuX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcyYmYXMobCwoZix2KT0+e2MuX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcy5kZWxldGUodil9KSwhbW8oZCkpcmV0dXJuO2E9PT1jJiYhYy5fYXV0b21hdGljYWxseUFzc2ln''@;'; put 'put ''bmVkTWV0YVByb3BzJiYoYy5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzPW5ldyBTZXQpO2NvbnN0IGg9e307YXMoZCwoZix2KT0+e3ZhciBNOyhmdW5jdGlvbiB5Y3QoYyxsKXt2YXIgYTtyZXR1cm4iQ0VMTF9UWVBFIiE9PWMmJigobnVsbD09PShhPWwuX2F1dG9tYXRpY2FsbHlB''@;'; put 'put ''c3NpZ25lZE1ldGFQcm9wcyl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaGFzKGMpKXx8IW51KGwsYykpfSkodixhKSYmKGhbdl09ZixudWxsPT09KE09Yy5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzKXx8dm9pZCAwPT09TXx8TS5hZGQodikpfSksUHUoYyxoKX1mdW5jdGlvbiBxTihj''@;'; put 'put ''LGwpe2lmKCFjKCkpdGhyb3cgbmV3IEVycm9yKGBBc3NlcnRpb24gZmFpbGVkOiAke2x9YCl9ZnVuY3Rpb24geWsoYyl7cmV0dXJuIG51bGw9PWN9Y29uc3QgTW1lPSgpPT4oe19hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHM6dm9pZCAwLGFjdGl2ZUhlYWRlckNsYXNzTmFtZToiaHRf''@;'; put 'put ''X2FjdGl2ZV9oaWdobGlnaHQiLGFsbG93RW1wdHk6ITAsYWxsb3dIdG1sOiExLGFsbG93SW5zZXJ0Q29sdW1uOiEwLGFsbG93SW5zZXJ0Um93OiEwLGFsbG93SW52YWxpZDohMCxhbGxvd1JlbW92ZUNvbHVtbjohMCxhbGxvd1JlbW92ZVJvdzohMCxhcmlhVGFnczohMCxhdXRvQ29sdW1uU2l6''@;'; put 'put ''ZTp2b2lkIDAsYXV0b1Jvd1NpemU6dm9pZCAwLGF1dG9XcmFwQ29sOiExLGF1dG9XcmFwUm93OiExLGJpbmRSb3dzV2l0aEhlYWRlcnM6dm9pZCAwLGNlbGw6W10sY2VsbHM6dm9pZCAwLGNoZWNrZWRUZW1wbGF0ZTp2b2lkIDAsY2xhc3NOYW1lOnZvaWQgMCxjb2xIZWFkZXJzOm51bGwsY29s''@;'; put 'put ''bGFwc2libGVDb2x1bW5zOnZvaWQgMCxjb2x1bW5IZWFkZXJIZWlnaHQ6dm9pZCAwLGNvbHVtbnM6dm9pZCAwLGNvbHVtblNvcnRpbmc6dm9pZCAwLGNvbHVtblN1bW1hcnk6dm9pZCAwLGNvbFdpZHRoczp2b2lkIDAsY29tbWVudGVkQ2VsbENsYXNzTmFtZToiaHRDb21tZW50Q2VsbCIsY29t''@;'; put 'put ''bWVudHM6ITEsY29udGV4dE1lbnU6dm9pZCAwLGNvcHlhYmxlOiEwLGNvcHlQYXN0ZTohMCxjb3JyZWN0Rm9ybWF0OiExLGN1cnJlbnRDb2xDbGFzc05hbWU6dm9pZCAwLGN1cnJlbnRIZWFkZXJDbGFzc05hbWU6Imh0X19oaWdobGlnaHQiLGN1cnJlbnRSb3dDbGFzc05hbWU6dm9pZCAwLGN1''@;'; put 'put ''c3RvbUJvcmRlcnM6ITEsZGF0YTp2b2lkIDAsZGF0YURvdE5vdGF0aW9uOiEwLGRhdGFTY2hlbWE6dm9pZCAwLGRhdGVGb3JtYXQ6IkREL01NL1lZWVkiLHRpbWVGb3JtYXQ6Img6bW06c3MgYSIsZGF0ZVBpY2tlckNvbmZpZzp2b2lkIDAsZGVmYXVsdERhdGU6dm9pZCAwLGRpc2FibGVWaXN1''@;'; put 'put ''YWxTZWxlY3Rpb246ITEsZGlhbG9nOiExLGRyYWdUb1Njcm9sbDohMCxkcm9wZG93bk1lbnU6dm9pZCAwLGVkaXRvcjp2b2lkIDAsZW1wdHlEYXRhU3RhdGU6ITEsZW50ZXJCZWdpbnNFZGl0aW5nOiEwLGVudGVyTW92ZXM6e2NvbDowLHJvdzoxfSxmaWxsSGFuZGxlOnthdXRvSW5zZXJ0Um93''@;'; put 'put ''OiExfSxmaWx0ZXI6ITAsZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZTohMSxmaWx0ZXJzOnZvaWQgMCxmaXhlZENvbHVtbnNMZWZ0OjAsZml4ZWRDb2x1bW5zU3RhcnQ6MCxmaXhlZFJvd3NCb3R0b206MCxmaXhlZFJvd3NUb3A6MCxmb3JtdWxhczp2b2lkIDAsZnJhZ21lbnRTZWxlY3Rpb246ITEs''@;'; put 'put ''aGVhZGVyQ2xhc3NOYW1lOnZvaWQgMCxoZWlnaHQ6dm9pZCAwLGhpZGRlbkNvbHVtbnM6dm9pZCAwLGhpZGRlblJvd3M6dm9pZCAwLGluaXRpYWxTdGF0ZTp2b2lkIDAsaW52YWxpZENlbGxDbGFzc05hbWU6Imh0SW52YWxpZCIsaW1lRmFzdEVkaXQ6ITEsaXNFbXB0eUNvbChjKXtsZXQgbCxh''@;'; put 'put ''LGQ7Zm9yKGw9MCxhPXRoaXMuY291bnRSb3dzKCk7bDxhO2wrKylpZihkPXRoaXMuZ2V0RGF0YUF0Q2VsbChsLGMpLCExPT09dHUoZCkpcmV0dXJuITE7cmV0dXJuITB9LGlzRW1wdHlSb3coYyl7bGV0IGwsYSxkLGg7Zm9yKGw9MCxhPXRoaXMuY291bnRDb2xzKCk7bDxhO2wrKylpZihkPXRo''@;'; put 'put ''aXMuZ2V0RGF0YUF0Q2VsbChjLGwpLCExPT09dHUoZCkpcmV0dXJuIm9iamVjdCI9PXR5cGVvZiBkJiYoaD10aGlzLmdldENlbGxNZXRhKGMsbCksRkEodGhpcy5nZXRTY2hlbWEoKVtoLnByb3BdLGQpKTtyZXR1cm4hMH0sbGFiZWw6dm9pZCAwLGxhbmd1YWdlOiJlbi1VUyIsbGF5b3V0RGly''@;'; put 'put ''ZWN0aW9uOiJpbmhlcml0IixsaWNlbnNlS2V5OnZvaWQgMCxsb2NhbGU6ImVuLVVTIixsb2FkaW5nOiExLG1hbnVhbENvbHVtbkZyZWV6ZTp2b2lkIDAsbWFudWFsQ29sdW1uTW92ZTp2b2lkIDAsbWFudWFsQ29sdW1uUmVzaXplOnZvaWQgMCxtYW51YWxSb3dNb3ZlOnZvaWQgMCxtYW51YWxS''@;'; put 'put ''b3dSZXNpemU6dm9pZCAwLG1heENvbHM6MS8wLG1heFJvd3M6MS8wLG1lcmdlQ2VsbHM6ITEsbWluQ29sczowLG1pblJvd0hlaWdodHM6dm9pZCAwLG1pblJvd3M6MCxtaW5TcGFyZUNvbHM6MCxtaW5TcGFyZVJvd3M6MCxtdWx0aUNvbHVtblNvcnRpbmc6dm9pZCAwLG5hdmlnYWJsZUhlYWRl''@;'; put 'put ''cnM6ITEsdGFiTmF2aWdhdGlvbjohMCxuZXN0ZWRIZWFkZXJzOnZvaWQgMCxuZXN0ZWRSb3dzOnZvaWQgMCxub1dvcmRXcmFwQ2xhc3NOYW1lOiJodE5vV3JhcCIsbnVtZXJpY0Zvcm1hdDp2b2lkIDAsb2JzZXJ2ZURPTVZpc2liaWxpdHk6ITAsb3V0c2lkZUNsaWNrRGVzZWxlY3RzOiEwLHBh''@;'; put 'put ''Z2luYXRpb246dm9pZCAwLHBlcnNpc3RlbnRTdGF0ZTp2b2lkIDAscGxhY2Vob2xkZXI6dm9pZCAwLHBsYWNlaG9sZGVyQ2VsbENsYXNzTmFtZToiaHRQbGFjZWhvbGRlciIscHJldmVudE92ZXJmbG93OiExLHByZXZlbnRXaGVlbDohMSxyZWFkT25seTohMSxyZWFkT25seUNlbGxDbGFzc05h''@;'; put 'put ''bWU6Imh0RGltbWVkIixyZW5kZXJBbGxSb3dzOiExLHJlbmRlckFsbENvbHVtbnM6ITEscmVuZGVyZXI6dm9pZCAwLHJvd0hlYWRlcnM6dm9pZCAwLHJvd0hlYWRlcldpZHRoOnZvaWQgMCxyb3dIZWlnaHRzOnZvaWQgMCxzZWFyY2g6ITEsc2VsZWN0aW9uTW9kZToibXVsdGlwbGUiLHNlbGVj''@;'; put 'put ''dE9wdGlvbnM6dm9pZCAwLHNraXBDb2x1bW5PblBhc3RlOiExLHNraXBSb3dPblBhc3RlOiExLHNvcnRCeVJlbGV2YW5jZTohMCxzb3VyY2U6dm9pZCAwLHN0YXJ0Q29sczo1LHN0YXJ0Um93czo1LHN0cmV0Y2hIOiJub25lIixzdHJpY3Q6dm9pZCAwLHRhYmxlQ2xhc3NOYW1lOnZvaWQgMCx0''@;'; put 'put ''ZXh0RWxsaXBzaXM6ITEsdGhlbWVOYW1lOnZvaWQgMCx0YWJNb3Zlczp7cm93OjAsY29sOjF9LHRpdGxlOnZvaWQgMCx0cmltRHJvcGRvd246ITAsdHJpbVJvd3M6dm9pZCAwLHRyaW1XaGl0ZXNwYWNlOiEwLHR5cGU6InRleHQiLHVuY2hlY2tlZFRlbXBsYXRlOnZvaWQgMCx1bmRvOiEwLHZh''@;'; put 'put ''bGlkYXRvcjp2b2lkIDAsdmFsdWVHZXR0ZXI6dm9pZCAwLHZhbHVlU2V0dGVyOnZvaWQgMCx2aWV3cG9ydENvbHVtblJlbmRlcmluZ09mZnNldDoiYXV0byIsdmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQ6ImF1dG8iLHZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nVGhyZXNob2xkOjAsdmlld3Bv''@;'; put 'put ''cnRSb3dSZW5kZXJpbmdUaHJlc2hvbGQ6MCx2aXNpYmxlUm93czoxMCx3aWR0aDp2b2lkIDAsd29yZFdyYXA6ITB9KTtmdW5jdGlvbiB4bWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIF9jdChjKXt2YXIgbD1mdW5jdGlvbiB3Y3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJl''@;'; put 'put ''dHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0''@;'; put 'put ''aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJs''@;'; put 'put ''ZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFNjdHtjb25zdHJ1Y3RvcihsKXt4bWUodGhpcywibWV0YUN0b3IiLGNsYXNze30pLHhtZSh0aGlzLCJtZXRhIix2b2lkIDApLHRoaXMubWV0YT10aGlzLm1ldGFDdG9yLnByb3RvdHlwZSxQdSh0aGlzLm1ldGEsTW1lKCkpLHRoaXMu''@;'; put 'put ''bWV0YS5pbnN0YW5jZT1sfWdldE1ldGFDb25zdHJ1Y3Rvcigpe3JldHVybiB0aGlzLm1ldGFDdG9yfWdldE1ldGEoKXtyZXR1cm4gdGhpcy5tZXRhfXVwZGF0ZU1ldGEobCl7dmFyIGE7UHUodGhpcy5tZXRhLGwpLFhOKHRoaXMubWV0YSx7Li4ubCx0eXBlOm51bGwhPT0oYT1sLnR5cGUpJiZ2''@;'; put 'put ''b2lkIDAhPT1hP2E6dGhpcy5tZXRhLnR5cGV9LGwpfX1jbGFzcyBUY3R7Y29uc3RydWN0b3IobCl7IWZ1bmN0aW9uIE1jdChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24geGN0KGMpe3ZhciBsPWZ1bmN0aW9uIEVjdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFy''@;'; put 'put ''IGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUu''@;'; put 'put ''Iil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRh''@;'; put 'put ''YmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsIm1ldGEiLHZvaWQgMCk7Y29uc3QgYT1sLmdldE1ldGFDb25zdHJ1Y3RvcigpO3RoaXMubWV0YT1uZXcgYX1nZXRNZXRhKCl7cmV0dXJuIHRoaXMubWV0YX11cGRhdGVNZXRhKGwpe1B1KHRoaXMubWV0YSxsKSxYTih0aGlzLm1ldGEsbCxsKX19ZnVu''@;'; put 'put ''Y3Rpb24gSk4oYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEFjdChjKXt2YXIgbD1mdW5jdGlvbiBrY3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVm''@;'; put 'put ''YXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJz''@;'; put 'put ''eW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFFOe2NvbnN0cnVjdG9yKGwpe0pOKHRoaXMsInZhbHVlRmFjdG9y''@;'; put 'put ''eSIsdm9pZCAwKSxKTih0aGlzLCJkYXRhIixbXSksSk4odGhpcywiaW5kZXgiLFtdKSxKTih0aGlzLCJob2xlcyIsbmV3IFNldCksdGhpcy52YWx1ZUZhY3Rvcnk9bH1vYnRhaW4obCl7cU4oKCk9PnR2KGwpLCJFeHBlY3RpbmcgYW4gdW5zaWduZWQgbnVtYmVyLiIpO2NvbnN0IGE9dGhpcy5f''@;'; put 'put ''Z2V0U3RvcmFnZUluZGV4QnlLZXkobCk7bGV0IGQ7aWYoYT49MClkPXRoaXMuZGF0YVthXSx2b2lkIDA9PT1kJiYoZD10aGlzLnZhbHVlRmFjdG9yeShsKSx0aGlzLmRhdGFbYV09ZCk7ZWxzZSBpZihkPXRoaXMudmFsdWVGYWN0b3J5KGwpLHRoaXMuaG9sZXMuc2l6ZT4wKXtjb25zdCBoPXRo''@;'; put 'put ''aXMuaG9sZXMudmFsdWVzKCkubmV4dCgpLnZhbHVlO3RoaXMuaG9sZXMuZGVsZXRlKGgpLHRoaXMuZGF0YVtoXT1kLHRoaXMuaW5kZXhbbF09aH1lbHNlIHRoaXMuZGF0YS5wdXNoKGQpLHRoaXMuaW5kZXhbbF09dGhpcy5kYXRhLmxlbmd0aC0xO3JldHVybiBkfWluc2VydChsKXtsZXQgYT1h''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MTtxTigoKT0+dHYobCl8fHlrKGwpLCJFeHBlY3RpbmcgYW4gdW5zaWduZWQgbnVtYmVyIG9yIG51bGwvdW5kZWZpbmVkIGFyZ3VtZW50LiIpO2NvbnN0IGQ9W10saD10aGlzLmRhdGEubGVuZ3Ro''@;'; put 'put ''O2ZvcihsZXQgdj0wO3Y8YTt2KyspZC5wdXNoKGgrdiksdGhpcy5kYXRhLnB1c2godm9pZCAwKTtjb25zdCBmPXlrKGwpP3RoaXMuaW5kZXgubGVuZ3RoOmw7dGhpcy5pbmRleD1bLi4udGhpcy5pbmRleC5zbGljZSgwLGYpLC4uLmQsLi4udGhpcy5pbmRleC5zbGljZShmKV19cmVtb3ZlKGwp''@;'; put 'put ''e2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxO3FOKCgpPT50dihsKXx8eWsobCksIkV4cGVjdGluZyBhbiB1bnNpZ25lZCBudW1iZXIgb3IgbnVsbC91bmRlZmluZWQgYXJndW1lbnQuIik7Y29uc3QgZD10aGlzLmluZGV4LnNw''@;'; put 'put ''bGljZSh5ayhsKT90aGlzLmluZGV4Lmxlbmd0aC1hOmwsYSk7Zm9yKGxldCBoPTA7aDxkLmxlbmd0aDtoKyspe2NvbnN0IGY9ZFtoXTsibnVtYmVyIj09dHlwZW9mIGYmJnRoaXMuaG9sZXMuYWRkKGYpfX1zaXplKCl7cmV0dXJuIHRoaXMuZGF0YS5sZW5ndGgtdGhpcy5ob2xlcy5zaXplfXZh''@;'; put 'put ''bHVlcygpe3JldHVybiB0aGlzLmRhdGEuZmlsdGVyKChsLGEpPT52b2lkIDAhPT1sJiYhdGhpcy5ob2xlcy5oYXMoYSkpW1N5bWJvbC5pdGVyYXRvcl0oKX1lbnRyaWVzKCl7Y29uc3QgbD1bXTtmb3IobGV0IGQ9MDtkPHRoaXMuZGF0YS5sZW5ndGg7ZCsrKXtjb25zdCBoPXRoaXMuX2dldEtl''@;'; put 'put ''eUJ5U3RvcmFnZUluZGV4KGQpOy0xIT09aCYmdm9pZCAwIT09dGhpcy5kYXRhW2RdJiZsLnB1c2goW2gsdGhpcy5kYXRhW2RdXSl9bGV0IGE9MDtyZXR1cm57bmV4dDooKT0+e2lmKGE8bC5sZW5ndGgpe2NvbnN0IGQ9bFthXTtyZXR1cm4gYSs9MSx7dmFsdWU6ZCxkb25lOiExfX1yZXR1cm57''@;'; put 'put ''ZG9uZTohMH19fX1jbGVhcigpe3RoaXMuZGF0YT1bXSx0aGlzLmluZGV4PVtdLHRoaXMuaG9sZXMuY2xlYXIoKX1fZ2V0U3RvcmFnZUluZGV4QnlLZXkobCl7cmV0dXJuIHRoaXMuaW5kZXgubGVuZ3RoPmw/dGhpcy5pbmRleFtsXTotMX1fZ2V0S2V5QnlTdG9yYWdlSW5kZXgobCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuaW5kZXguaW5kZXhPZihsKX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzLmVudHJpZXMoKX19ZnVuY3Rpb24gRW1lKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBEY3QoYyl7dmFyIGw9ZnVuY3Rpb24gSWN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1''@;'; put 'put ''cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2''@;'; put 'put ''ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6''@;'; put 'put ''ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBSY3Q9WyJkYXRhIiwid2lkdGgiXTtjbGFzcyBMY3R7Y29uc3RydWN0b3IobCl7RW1lKHRoaXMsImdsb2JhbE1ldGEiLHZvaWQgMCksRW1lKHRoaXMsIm1ldGFzIixuZXcgUU4oKCk9PnRoaXMuX2NyZWF0ZU1ldGEoKSkpLHRoaXMuZ2xv''@;'; put 'put ''YmFsTWV0YT1sLHRoaXMubWV0YXM9bmV3IFFOKCgpPT50aGlzLl9jcmVhdGVNZXRhKCkpfXVwZGF0ZU1ldGEobCxhKXtjb25zdCBkPXRoaXMuZ2V0TWV0YShsKTtQdShkLGEpLFhOKGQsYSl9Y3JlYXRlQ29sdW1uKGwsYSl7dGhpcy5tZXRhcy5pbnNlcnQobCxhKX1yZW1vdmVDb2x1bW4obCxh''@;'; put 'put ''KXt0aGlzLm1ldGFzLnJlbW92ZShsLGEpfWdldE1ldGEobCl7cmV0dXJuIHRoaXMubWV0YXMub2J0YWluKGwpfWdldE1ldGFDb25zdHJ1Y3RvcihsKXtyZXR1cm4gdGhpcy5tZXRhcy5vYnRhaW4obCkuY29uc3RydWN0b3J9Y2xlYXJDYWNoZSgpe3RoaXMubWV0YXMuY2xlYXIoKX1fY3JlYXRl''@;'; put 'put ''TWV0YSgpe3JldHVybiBmdW5jdGlvbiBiY3QoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdO2Z1bmN0aW9uIGEoKXt9SjRlKGEsYyk7Zm9yKGxldCBkPTA7ZDxsLmxlbmd0aDtkKyspYS5wcm90b3R5cGVbbFtkXV09dm9p''@;'; put 'put ''ZCAwO3JldHVybiBhfSh0aGlzLmdsb2JhbE1ldGEuZ2V0TWV0YUNvbnN0cnVjdG9yKCksUmN0KS5wcm90b3R5cGV9fWZ1bmN0aW9uIFRtZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gT2N0KGMpe3ZhciBsPWZ1bmN0aW9uIFBjdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0''@;'; put 'put ''dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRp''@;'; put 'put ''dmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxl''@;'; put 'put ''OiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgRmN0e2NvbnN0cnVjdG9yKGwpe1RtZSh0aGlzLCJjb2x1bW5NZXRhIix2b2lkIDApLFRtZSh0aGlzLCJtZXRhcyIsbmV3IFFOKCgpPT50aGlzLl9jcmVhdGVSb3coKSkpLHRoaXMuY29sdW1uTWV0YT1sfXVwZGF0ZU1ldGEobCxhLGQp''@;'; put 'put ''e2NvbnN0IGg9dGhpcy5nZXRNZXRhKGwsYSk7UHUoaCxkKSxYTihoLGQpfWNyZWF0ZVJvdyhsLGEpe3RoaXMubWV0YXMuaW5zZXJ0KGwsYSl9Y3JlYXRlQ29sdW1uKGwsYSl7Zm9yKGxldCBkPTA7ZDx0aGlzLm1ldGFzLnNpemUoKTtkKyspdGhpcy5tZXRhcy5vYnRhaW4oZCkuaW5zZXJ0KGws''@;'; put 'put ''YSl9cmVtb3ZlUm93KGwsYSl7dGhpcy5tZXRhcy5yZW1vdmUobCxhKX1yZW1vdmVDb2x1bW4obCxhKXtmb3IobGV0IGQ9MDtkPHRoaXMubWV0YXMuc2l6ZSgpO2QrKyl0aGlzLm1ldGFzLm9idGFpbihkKS5yZW1vdmUobCxhKX1nZXRNZXRhKGwsYSxkKXtjb25zdCBoPXRoaXMubWV0YXMub2J0''@;'; put 'put ''YWluKGwpLm9idGFpbihhKTtyZXR1cm4gdm9pZCAwPT09ZD9oOmhbZF19c2V0TWV0YShsLGEsZCxoKXt2YXIgZjtjb25zdCB2PXRoaXMubWV0YXMub2J0YWluKGwpLm9idGFpbihhKTtudWxsPT09KGY9di5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzKXx8dm9pZCAwPT09Znx8Zi5k''@;'; put 'put ''ZWxldGUoZCksdltkXT1ofXJlbW92ZU1ldGEobCxhLGQpe2RlbGV0ZSB0aGlzLm1ldGFzLm9idGFpbihsKS5vYnRhaW4oYSlbZF19Z2V0TWV0YXMoKXtjb25zdCBsPVtdLGE9QXJyYXkuZnJvbSh0aGlzLm1ldGFzLnZhbHVlcygpKTtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrKylNYShhW2Rd''@;'; put 'put ''KSYmbC5wdXNoKC4uLmFbZF0udmFsdWVzKCkpO3JldHVybiBsfWdldE1ldGFzQXRSb3cobCl7cU4oKCk9PnR2KGwpLCJFeHBlY3RpbmcgYW4gdW5zaWduZWQgbnVtYmVyLiIpO2NvbnN0IGE9bmV3IE1hcCh0aGlzLm1ldGFzKTtyZXR1cm4gYS5oYXMobCk/QXJyYXkuZnJvbShhLmdldChsKS52''@;'; put 'put ''YWx1ZXMoKSk6W119Y2xlYXJDYWNoZSgpe3RoaXMubWV0YXMuY2xlYXIoKX1fY3JlYXRlUm93KCl7cmV0dXJuIG5ldyBRTihsPT50aGlzLl9jcmVhdGVNZXRhKGwpKX1fY3JlYXRlTWV0YShsKXtyZXR1cm4gbmV3KHRoaXMuY29sdW1uTWV0YS5nZXRNZXRhQ29uc3RydWN0b3IobCkpfX1jbGFz''@;'; put 'put ''cyBBbWV7Y29uc3RydWN0b3IobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOltdO3RoaXMuaG90PWwsdGhpcy5nbG9i''@;'; put 'put ''YWxNZXRhPW5ldyBTY3QobCksdGhpcy50YWJsZU1ldGE9bmV3IFRjdCh0aGlzLmdsb2JhbE1ldGEpLHRoaXMuY29sdW1uTWV0YT1uZXcgTGN0KHRoaXMuZ2xvYmFsTWV0YSksdGhpcy5jZWxsTWV0YT1uZXcgRmN0KHRoaXMuY29sdW1uTWV0YSksZC5mb3JFYWNoKGg9Pm5ldyBoKHRoaXMpKSx0''@;'; put 'put ''aGlzLmdsb2JhbE1ldGEudXBkYXRlTWV0YShhKX1nZXRHbG9iYWxNZXRhKCl7cmV0dXJuIHRoaXMuZ2xvYmFsTWV0YS5nZXRNZXRhKCl9dXBkYXRlR2xvYmFsTWV0YShsKXt0aGlzLmdsb2JhbE1ldGEudXBkYXRlTWV0YShsKX1nZXRUYWJsZU1ldGEoKXtyZXR1cm4gdGhpcy50YWJsZU1ldGEu''@;'; put 'put ''Z2V0TWV0YSgpfXVwZGF0ZVRhYmxlTWV0YShsKXt0aGlzLnRhYmxlTWV0YS51cGRhdGVNZXRhKGwpfWdldENvbHVtbk1ldGEobCl7cmV0dXJuIHRoaXMuY29sdW1uTWV0YS5nZXRNZXRhKGwpfXVwZGF0ZUNvbHVtbk1ldGEobCxhKXt0aGlzLmNvbHVtbk1ldGEudXBkYXRlTWV0YShsLGEpfWdl''@;'; put 'put ''dENlbGxNZXRhKGwsYSxkKXtjb25zdCBoPXRoaXMuY2VsbE1ldGEuZ2V0TWV0YShsLGEpO3JldHVybiBoLnZpc3VhbFJvdz1kLnZpc3VhbFJvdyxoLnZpc3VhbENvbD1kLnZpc3VhbENvbHVtbixoLnJvdz1sLGguY29sPWEsZC5za2lwTWV0YUV4dGVuc2lvbnx8dGhpcy5ydW5Mb2NhbEhvb2tz''@;'; put 'put ''KCJhZnRlckdldENlbGxNZXRhIixoKSxofWdldENlbGxNZXRhS2V5VmFsdWUobCxhLGQpe2lmKCJzdHJpbmciIT10eXBlb2YgZCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBwYXNzZWQgY2VsbCBtZXRhIG9iamVjdCBrZXkgaXMgbm90IGEgc3RyaW5nIik7cmV0dXJuIHRoaXMuY2VsbE1ldGEuZ2V0''@;'; put 'put ''TWV0YShsLGEsZCl9c2V0Q2VsbE1ldGEobCxhLGQsaCl7dGhpcy5jZWxsTWV0YS5zZXRNZXRhKGwsYSxkLGgpfXVwZGF0ZUNlbGxNZXRhKGwsYSxkKXt0aGlzLmNlbGxNZXRhLnVwZGF0ZU1ldGEobCxhLGQpfXJlbW92ZUNlbGxNZXRhKGwsYSxkKXt0aGlzLmNlbGxNZXRhLnJlbW92ZU1ldGEo''@;'; put 'put ''bCxhLGQpfWdldENlbGxzTWV0YSgpe3JldHVybiB0aGlzLmNlbGxNZXRhLmdldE1ldGFzKCl9Z2V0Q2VsbHNNZXRhQXRSb3cobCl7cmV0dXJuIHRoaXMuY2VsbE1ldGEuZ2V0TWV0YXNBdFJvdyhsKX1jcmVhdGVSb3cobCl7dGhpcy5jZWxsTWV0YS5jcmVhdGVSb3cobCxhcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSl9cmVtb3ZlUm93KGwpe3RoaXMuY2VsbE1ldGEucmVtb3ZlUm93KGwsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEpfWNyZWF0ZUNvbHVtbihsKXtsZXQgYT1h''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MTt0aGlzLmNlbGxNZXRhLmNyZWF0ZUNvbHVtbihsLGEpLHRoaXMuY29sdW1uTWV0YS5jcmVhdGVDb2x1bW4obCxhKX1yZW1vdmVDb2x1bW4obCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2''@;'; put 'put ''b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjE7dGhpcy5jZWxsTWV0YS5yZW1vdmVDb2x1bW4obCxhKSx0aGlzLmNvbHVtbk1ldGEucmVtb3ZlQ29sdW1uKGwsYSl9Y2xlYXJDZWxsc0NhY2hlKCl7dGhpcy5jZWxsTWV0YS5jbGVhckNhY2hlKCl9Y2xlYXJDYWNoZSgpe3RoaXMu''@;'; put 'put ''Y2VsbE1ldGEuY2xlYXJDYWNoZSgpLHRoaXMuY29sdW1uTWV0YS5jbGVhckNhY2hlKCl9fWZ1bmN0aW9uIGttZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gSGN0KGMpe3ZhciBsPWZ1bmN0aW9uIE5jdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tT''@;'; put 'put ''eW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0''@;'; put 'put ''dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEw''@;'; put 'put ''fSk6Y1tsXT1hLGN9cGwoQW1lLFowKTtjbGFzcyBWY3R7Y29uc3RydWN0b3IobCl7dmFyIGE9dGhpcztrbWUodGhpcywibWV0YU1hbmFnZXIiLHZvaWQgMCksa21lKHRoaXMsIm1ldGFTeW5jTWVtbyIsbmV3IE1hcCksdGhpcy5tZXRhTWFuYWdlcj1sLGwuYWRkTG9jYWxIb29rKCJhZnRlckdl''@;'; put 'put ''dENlbGxNZXRhIixmdW5jdGlvbigpe3JldHVybiBhLmV4dGVuZENlbGxNZXRhKC4uLmFyZ3VtZW50cyl9KSxBYS5nZXRTaW5nbGV0b24oKS5hZGQoImJlZm9yZVJlbmRlciIsZD0+e2QmJnRoaXMubWV0YVN5bmNNZW1vLmNsZWFyKCl9LHRoaXMubWV0YU1hbmFnZXIuaG90KX1leHRlbmRDZWxs''@;'; put 'put ''TWV0YShsKXt2YXIgYTtjb25zdHtyb3c6ZCxjb2w6aH09bDtpZihudWxsIT09KGE9dGhpcy5tZXRhU3luY01lbW8uZ2V0KGQpKSYmdm9pZCAwIT09YSYmYS5oYXMoaCkpcmV0dXJuO2NvbnN0e3Zpc3VhbFJvdzpmLHZpc3VhbENvbDp2fT1sLE09dGhpcy5tZXRhTWFuYWdlci5ob3QsRD1NLmNv''@;'; put 'put ''bFRvUHJvcCh2KTtsLnByb3A9RCxNLnJ1bkhvb2tzKCJiZWZvcmVHZXRDZWxsTWV0YSIsZix2LGwpO2NvbnN0IFU9bnUobCwidHlwZSIpP2wudHlwZTpudWxsO2xldCB0ZT1pbChsLmNlbGxzKT9sLmNlbGxzKGQsaCxEKTpudWxsO2lmKFUpaWYodGUpe3ZhciBvZTt0ZS50eXBlPW51bGwhPT0o''@;'; put 'put ''b2U9dGUudHlwZSkmJnZvaWQgMCE9PW9lP29lOlV9ZWxzZSB0ZT17dHlwZTpVfTt0ZSYmdGhpcy5tZXRhTWFuYWdlci51cGRhdGVDZWxsTWV0YShkLGgsdGUpLE0ucnVuSG9va3MoImFmdGVyR2V0Q2VsbE1ldGEiLGYsdixsKSx0aGlzLm1ldGFTeW5jTWVtby5oYXMoZCl8fHRoaXMubWV0YVN5''@;'; put 'put ''bmNNZW1vLnNldChkLG5ldyBTZXQpLHRoaXMubWV0YVN5bmNNZW1vLmdldChkKS5hZGQoaCl9fWZ1bmN0aW9uIGh0ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gemN0KGMpe3ZhciBsPWZ1bmN0aW9uIFVjdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9''@;'; put 'put ''Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9''@;'; put 'put ''cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxl''@;'; put 'put ''OiEwfSk6Y1tsXT1hLGN9dmFyIERtZT1uZXcgV2Vha01hcDtjbGFzcyBZY3R7Y29uc3RydWN0b3IobCl7aHRlKHRoaXMsIm1ldGFNYW5hZ2VyIix2b2lkIDApLGh0ZSh0aGlzLCJ1c2FnZVRyYWNrZXIiLG5ldyBTZXQpLGh0ZSh0aGlzLCJwcm9wRGVzY3JpcHRvcnMiLG5ldyBNYXAoW1siYXJp''@;'; put 'put ''YVRhZ3MiLHtpbml0T25seTohMH1dLFsiZml4ZWRDb2x1bW5zTGVmdCIse3RhcmdldDoiZml4ZWRDb2x1bW5zU3RhcnQiLG9uQ2hhbmdlKGEpe2lmKHRoaXMubWV0YU1hbmFnZXIuaG90LmlzUnRsKCkmJiJmaXhlZENvbHVtbnNMZWZ0Ij09PWEpdGhyb3cgbmV3IEVycm9yKCJUaGUgYGZpeGVk''@;'; put 'put ''Q29sdW1uc0xlZnRgIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFJUTC4gUGxlYXNlIHVzZSBvcHRpb24gYGZpeGVkQ29sdW1uc1N0YXJ0YC4iKTtpZih0aGlzLnVzYWdlVHJhY2tlci5oYXMoImZpeGVkQ29sdW1uc0xlZnQiKSYmdGhpcy51c2FnZVRyYWNrZXIuaGFzKCJmaXhlZENvbHVtbnNTdGFy''@;'; put 'put ''dCIpKXRocm93IG5ldyBFcnJvcigiVGhlIGBmaXhlZENvbHVtbnNMZWZ0YCBhbmQgYGZpeGVkQ29sdW1uc1N0YXJ0YCBzaG91bGQgbm90IGJlIHVzZWQgdG9nZXRoZXIuIFBsZWFzZSB1c2Ugb25seSB0aGUgb3B0aW9uIGBmaXhlZENvbHVtbnNTdGFydGAuIil9fV0sWyJsYXlvdXREaXJlY3Rp''@;'; put 'put ''b24iLHtpbml0T25seTohMH1dLFsicmVuZGVyQWxsQ29sdW1ucyIse2luaXRPbmx5OiEwfV0sWyJyZW5kZXJBbGxSb3dzIix7aW5pdE9ubHk6ITB9XV0pKSxmdW5jdGlvbiBCY3QoYyxsLGEpeyhmdW5jdGlvbiBqY3QoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5u''@;'; put 'put ''b3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfSh0aGlzLERtZSwoYSxkLGgpPT57aWYoIWgpdGhyb3cgbmV3IEVycm9yKGBUaGUgXGAke2F9XGAgb3B0aW9uIGNhbiBub3QgYmUgdXBkYXRlZCBhZnRl''@;'; put 'put ''ciB0aGUgSGFuZHNvbnRhYmxlIGlzIGluaXRpYWxpemVkLmApfSksdGhpcy5tZXRhTWFuYWdlcj1sLHRoaXMuZXh0ZW5kTWV0YVByb3BzKCl9ZXh0ZW5kTWV0YVByb3BzKCl7dGhpcy5wcm9wRGVzY3JpcHRvcnMuZm9yRWFjaCgobCxhKT0+e2NvbnN0e2luaXRPbmx5OmQsdGFyZ2V0Omgsb25D''@;'; put 'put ''aGFuZ2U6Zn09bCx2PSJzdHJpbmciPT10eXBlb2YgaCxNPXY/aDphLEQ9YF8ke019YDt0aGlzLm1ldGFNYW5hZ2VyLmdsb2JhbE1ldGEubWV0YVtEXT10aGlzLm1ldGFNYW5hZ2VyLmdsb2JhbE1ldGEubWV0YVtNXSxmPyh0aGlzLmluc3RhbGxQcm9wV2F0Y2hlcihhLEQsZiksdiYmdGhpcy5p''@;'; put 'put ''bnN0YWxsUHJvcFdhdGNoZXIoaCxELGYpKTpkJiYodGhpcy5pbnN0YWxsUHJvcFdhdGNoZXIoYSxELGZ1bmN0aW9uIFpjdChjLGwpe3JldHVybiBjLmdldChmdW5jdGlvbiBXY3QoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfShjLGwpKX0oRG1lLHRoaXMpKSx0aGlzLm1ldGFNYW5hZ2VyLmdsb2JhbE1ldGEubWV0YS5faW5pdE9ubHlTZXR0aW5nc3x8KHRoaXMubWV0YU1h''@;'; put 'put ''bmFnZXIuZ2xvYmFsTWV0YS5tZXRhLl9pbml0T25seVNldHRpbmdzPVtdKSx0aGlzLm1ldGFNYW5hZ2VyLmdsb2JhbE1ldGEubWV0YS5faW5pdE9ubHlTZXR0aW5ncy5wdXNoKGEpKX0pfWluc3RhbGxQcm9wV2F0Y2hlcihsLGEsZCl7Y29uc3QgaD10aGlzO09iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eSh0aGlzLm1ldGFNYW5hZ2VyLmdsb2JhbE1ldGEubWV0YSxsLHtnZXQoKXtyZXR1cm4gdGhpc1thXX0sc2V0KGYpe2NvbnN0IHY9IWgudXNhZ2VUcmFja2VyLmhhcyhsKTtoLnVzYWdlVHJhY2tlci5hZGQobCksZC5jYWxsKGgsbCxmLHYpLHRoaXNbYV09Zn0sZW51bWVyYWJsZTohMCxjb25m''@;'; put 'put ''aWd1cmFibGU6ITB9KX19Y29uc3QgSW1lPS9eKFxyXG58XG5ccnxccnxcbikvLEdjdD0vXlteXHRcclxuXSsvLFJtZT0vXlx0LztmdW5jdGlvbiBlVihjKXtsZXQgbCxhLGQsaCx2LGY9IiI7Zm9yKGw9MCxhPWMubGVuZ3RoO2w8YTtsKz0xKXtmb3IoaD1jW2xdLmxlbmd0aCxkPTA7ZDxoO2Qr''@;'; put 'put ''PTEpZD4wJiYoZis9Ilx0Iiksdj1jW2xdW2RdLCJzdHJpbmciPT10eXBlb2Ygdj92LmluZGV4T2YoIlxuIik+LTE/Zis9YCIke3YucmVwbGFjZSgvIi9nLCciIicpfSJgOmYrPXY6Zis9bnVsbD09dj8iIjp2O2whPT1hLTEmJihmKz0iXG4iKX1yZXR1cm4gZn1mdW5jdGlvbiBmdGUoYyxsKXtj''@;'; put 'put ''b25zdHtpbnN0YW5jZTphLHZpc3VhbFJvdzpkLHZpc3VhbENvbDpoLHZhbHVlU2V0dGVyOmZ9PWw7cmV0dXJuIGlsKGYpP2YuY2FsbChhLGMsZCxoLGwpOmN9ZnVuY3Rpb24gZnYoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFhjdChjKXt2YXIgbD1mdW5jdGlvbiBxY3QoYyxsKXtpZigib2Jq''@;'; put 'put ''ZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZl''@;'; put 'put ''IG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVt''@;'; put 'put ''ZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHJDe3N0YXRpYyBnZXQgREVTVElOQVRJT05fUkVOREVSRVIoKXtyZXR1cm4gMX1zdGF0aWMgZ2V0IERFU1RJTkFUSU9OX0NMSVBCT0FSRF9HRU5FUkFUT1IoKXtyZXR1cm4gMn1jb25zdHJ1Y3Rv''@;'; put 'put ''cihsLGEsZCl7ZnYodGhpcywiaG90Iix2b2lkIDApLGZ2KHRoaXMsIm1ldGFNYW5hZ2VyIix2b2lkIDApLGZ2KHRoaXMsInRhYmxlTWV0YSIsdm9pZCAwKSxmdih0aGlzLCJkYXRhU291cmNlIix2b2lkIDApLGZ2KHRoaXMsImR1Y2tTY2hlbWEiLHZvaWQgMCksZnYodGhpcywiY29sVG9Qcm9w''@;'; put 'put ''Q2FjaGUiLHZvaWQgMCksZnYodGhpcywicHJvcFRvQ29sQ2FjaGUiLHZvaWQgMCksdGhpcy5ob3Q9bCx0aGlzLm1ldGFNYW5hZ2VyPWQsdGhpcy50YWJsZU1ldGE9ZC5nZXRUYWJsZU1ldGEoKSx0aGlzLmRhdGFTb3VyY2U9YSx0aGlzLnJlZnJlc2hEdWNrU2NoZW1hKCksdGhpcy5jcmVhdGVN''@;'; put 'put ''YXAoKX1jcmVhdGVNYXAoKXtjb25zdCBsPXRoaXMuZ2V0U2NoZW1hKCk7aWYodHlwZW9mIGw+InUiKXRocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIGNyZWF0ZSBgY29sdW1uc2AgZGVmaW5pdGlvbiBidXQgeW91IGRpZG4ndCBwcm92aWRlIGBzY2hlbWFgIG5vciBgZGF0YWAiKTtjb25zdCBh''@;'; put 'put ''PXRoaXMudGFibGVNZXRhLmNvbHVtbnM7bGV0IGQ7aWYodGhpcy5jb2xUb1Byb3BDYWNoZT1bXSx0aGlzLnByb3BUb0NvbENhY2hlPW5ldyBNYXAsYSl7bGV0IGg9MCxmPTAsdj0hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYSl7Y29uc3QgTT1RSChsKTtoPU0+MD9NOnRoaXMuY291bnRGaXJz''@;'; put 'put ''dFJvd0tleXMoKSx2PSEwfWVsc2UgaD1NYXRoLm1pbih0aGlzLnRhYmxlTWV0YS5tYXhDb2xzLGEubGVuZ3RoKTtmb3IoZD0wO2Q8aDtkKyspe2NvbnN0IE09dj9hKGQpOmFbZF07aWYobW8oTSkpe2lmKHR5cGVvZiBNLmRhdGE8InUiKXtjb25zdCBEPXY/ZjpkO3RoaXMuY29sVG9Qcm9wQ2Fj''@;'; put 'put ''aGVbRF09TS5kYXRhLHRoaXMucHJvcFRvQ29sQ2FjaGUuc2V0KE0uZGF0YSxEKX1mKz0xfX19ZWxzZSB0aGlzLnJlY3Vyc2l2ZUR1Y2tDb2x1bW5zKGwpfWNvdW50Rmlyc3RSb3dLZXlzKCl7cmV0dXJuIG9RKHRoaXMuZGF0YVNvdXJjZSl9cmVjdXJzaXZlRHVja0NvbHVtbnMobCxhLGQpe2xl''@;'; put 'put ''dCB2LGg9YSxmPWQ7cmV0dXJuIHR5cGVvZiBoPiJ1IiYmKGg9MCxmPSIiKSwib2JqZWN0Ij09dHlwZW9mIGwmJiFBcnJheS5pc0FycmF5KGwpJiZhcyhsLChNLEQpPT57bnVsbD09PU0/KHY9ZitELHRoaXMuY29sVG9Qcm9wQ2FjaGUucHVzaCh2KSx0aGlzLnByb3BUb0NvbENhY2hlLnNldCh2''@;'; put 'put ''LGgpLGgrPTEpOmg9dGhpcy5yZWN1cnNpdmVEdWNrQ29sdW1ucyhNLGgsYCR7RH0uYCl9KSxofWNvbFRvUHJvcChsKXtpZighMT09PU51bWJlci5pc0ludGVnZXIobCkpcmV0dXJuIGw7Y29uc3QgYT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpO3JldHVybiBudWxsPT09YT9sOnRoaXMu''@;'; put 'put ''Y29sVG9Qcm9wQ2FjaGUmJk1hKHRoaXMuY29sVG9Qcm9wQ2FjaGVbYV0pP3RoaXMuY29sVG9Qcm9wQ2FjaGVbYV06YX1wcm9wVG9Db2wobCl7Y29uc3QgYT10aGlzLnByb3BUb0NvbENhY2hlLmdldChsKTtpZihNYShhKSlyZXR1cm4gdGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oYSk7Y29uc3Qg''@;'; put 'put ''ZD10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihsKTtyZXR1cm4gbnVsbD09PWQ/bDpkfWdldFNjaGVtYSgpe2NvbnN0IGw9dGhpcy50YWJsZU1ldGEuZGF0YVNjaGVtYTtyZXR1cm4gbD8iZnVuY3Rpb24iPT10eXBlb2YgbD9sKCk6bDp0aGlzLmR1Y2tTY2hlbWF9Y3JlYXRlRHVja1NjaGVtYSgp''@;'; put 'put ''e3JldHVybiB0aGlzLmRhdGFTb3VyY2UmJnRoaXMuZGF0YVNvdXJjZVswXT9Qdyh0aGlzLmRhdGFTb3VyY2VbMF0pOnt9fXJlZnJlc2hEdWNrU2NoZW1hKCl7dGhpcy5kdWNrU2NoZW1hPXRoaXMuY3JlYXRlRHVja1NjaGVtYSgpfWNyZWF0ZVJvdyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSx7c291cmNlOmQsbW9kZTpoPSJhYm92ZSJ9PWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtjb25zdCBmPXRoaXMuaG90LmNvdW50U291cmNlUm93cygpO2xldCB2''@;'; put 'put ''PWYsTT0wLEQ9bDtpZigoIm51bWJlciIhPXR5cGVvZiBEfHxEPj1mKSYmKEQ9ZiksRDx0aGlzLmhvdC5jb3VudFJvd3MoKSYmKHY9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhEKSksITE9PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ3JlYXRlUm93IixELGEsZCl8fG51bGw9PT12KXJldHVy''@;'; put 'put ''bntkZWx0YTowfTtjb25zdCB0ZT10aGlzLnRhYmxlTWV0YS5tYXhSb3dzLG9lPXRoaXMuZ2V0U2NoZW1hKCkubGVuZ3RoLHZlPVtdO2Zvcig7TTxhJiZmK008dGU7KXtsZXQgRmU9bnVsbDsiYXJyYXkiPT09dGhpcy5ob3QuZGF0YVR5cGU/dGhpcy50YWJsZU1ldGEuZGF0YVNjaGVtYT9GZT1C''@;'; put 'put ''MSh0aGlzLmdldFNjaGVtYSgpKTooRmU9W10sUWEob2UtMSwoKT0+RmUucHVzaChudWxsKSkpOiJmdW5jdGlvbiI9PT10aGlzLmhvdC5kYXRhVHlwZT9GZT10aGlzLnRhYmxlTWV0YS5kYXRhU2NoZW1hKEQrTSk6KEZlPXt9LFBBKEZlLHRoaXMuZ2V0U2NoZW1hKCkpKSx2ZS5wdXNoKEZlKSxN''@;'; put 'put ''Kz0xfXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmluc2VydEluZGV4ZXMoRCxNKSwiYmVsb3ciPT09aCYmKHY9TWF0aC5taW4odisxLGYpKSx0aGlzLnNwbGljZURhdGEodiwwLHZlKTtjb25zdCB3ZT10aGlzLmhvdC50b1Zpc3VhbFJvdyh2KTtyZXR1cm4gdGhpcy5ob3QuY291bnRTb3VyY2VS''@;'; put 'put ''b3dzKCk9PT12ZS5sZW5ndGgmJnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmluaXRUb0xlbmd0aCh0aGlzLmhvdC5nZXRJbml0aWFsQ29sdW1uQ291bnQoKSksTT4wJiYobnVsbD09bD90aGlzLm1ldGFNYW5hZ2VyLmNyZWF0ZVJvdyhudWxsLE0pOiJhdXRvIiE9PWQmJnRoaXMubWV0YU1h''@;'; put 'put ''bmFnZXIuY3JlYXRlUm93KHYsYSkpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNyZWF0ZVJvdyIsd2UsTSxkKSx7ZGVsdGE6TSxzdGFydFBoeXNpY2FsSW5kZXg6dn19Y3JlYXRlQ29sKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50''@;'; put 'put ''c1sxXToxLHtzb3VyY2U6ZCxtb2RlOmg9InN0YXJ0In09YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9O2lmKCF0aGlzLmhvdC5pc0NvbHVtbk1vZGlmaWNhdGlvbkFsbG93ZWQoKSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjcmVhdGUg''@;'; put 'put ''bmV3IGNvbHVtbi4gV2hlbiBkYXRhIHNvdXJjZSBpbiBhbiBvYmplY3QsIHlvdSBjYW4gb25seSBoYXZlIGFzIG11Y2ggY29sdW1ucyBhcyBkZWZpbmVkIGluIGZpcnN0IGRhdGEgcm93LCBkYXRhIHNjaGVtYSBvciBpbiB0aGUgJ2NvbHVtbnMnIHNldHRpbmcuSWYgeW91IHdhbnQgdG8gYmUg''@;'; put 'put ''YWJsZSB0byBhZGQgbmV3IGNvbHVtbnMsIHlvdSBoYXZlIHRvIHVzZSBhcnJheSBkYXRhc291cmNlLiIpO2NvbnN0IGY9dGhpcy5kYXRhU291cmNlLHY9dGhpcy50YWJsZU1ldGEubWF4Q29scyxNPXRoaXMuaG90LmNvdW50U291cmNlQ29scygpLEQ9dGhpcy5ob3QuY291bnRDb2xzKCksVT10''@;'; put 'put ''aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKSx0ZT0ibnVtYmVyIj09dHlwZW9mIGwmJmw8PU0/bDpEO2lmKCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNyZWF0ZUNvbCIsdGUsYSxkKSlyZXR1cm57ZGVsdGE6MH07Y29uc3Qgb2U9dGU8RD90aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1u''@;'; put 'put ''KHRlKTpNLHZlPSJlbmQiPT09aD9NYXRoLm1pbihvZSsxLE0pOm9lO2xldCB3ZT0wO2ZvcihsZXQgRmU9dmU7d2U8YSYmRCt3ZTx2O0ZlKyspe2lmKCJudW1iZXIiIT10eXBlb2YgdGV8fHRlPj1EK3dlKWlmKFU+MClmb3IobGV0IFdlPTA7V2U8VTtXZSs9MSl0eXBlb2YgZltXZV0+InUiJiYo''@;'; put 'put ''ZltXZV09W10pLGZbV2VdLnB1c2gobnVsbCk7ZWxzZSBmLnB1c2goW251bGxdKTtlbHNlIGZvcihsZXQgV2U9MDtXZTxVO1dlKyspZltXZV0uc3BsaWNlKEZlLDAsbnVsbCk7d2UrPTF9cmV0dXJuIHdlPjAmJihudWxsPT1sP3RoaXMubWV0YU1hbmFnZXIuY3JlYXRlQ29sdW1uKG51bGwsd2Up''@;'; put 'put ''OiJhdXRvIiE9PWQmJnRoaXMubWV0YU1hbmFnZXIuY3JlYXRlQ29sdW1uKHZlLGEpKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5pbnNlcnRJbmRleGVzKHRlLHdlLGgpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNyZWF0ZUNvbCIsdGhpcy5ob3QudG9WaXN1YWxDb2x1bW4odmUpLHdl''@;'; put 'put ''LGQpLHRoaXMucmVmcmVzaER1Y2tTY2hlbWEoKSx7ZGVsdGE6d2Usc3RhcnRQaHlzaWNhbEluZGV4OnZlfX1yZW1vdmVSb3cobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEsZD1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1l''@;'; put 'put ''bnRzWzJdOnZvaWQgMCxoPU51bWJlci5pc0ludGVnZXIobCk/bDotYTtjb25zdCBmPXRoaXMudmlzdWFsUm93c1RvUGh5c2ljYWwoaCxhKSx2PXRoaXMuaG90LmNvdW50U291cmNlUm93cygpO2lmKGg9KHYraCkldiwhMT09PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSZW1vdmVSb3ciLGgs''@;'; put 'put ''Zi5sZW5ndGgsZixkKSlyZXR1cm4hMTtjb25zdCBEPWYubGVuZ3RoO2lmKHRoaXMuZmlsdGVyRGF0YShoLEQsZiksaDx0aGlzLmhvdC5jb3VudFJvd3MoKSl7dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVtb3ZlSW5kZXhlcyhmKTtjb25zdCB0ZT1NYSh0aGlzLnRhYmxlTWV0YS5jb2x1bW5z''@;'; put 'put ''KXx8TWEodGhpcy50YWJsZU1ldGEuZGF0YVNjaGVtYSl8fHRoaXMudGFibGVNZXRhLmNvbEhlYWRlcnM7MD09PXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCkmJiF0ZSYmdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVl''@;'; put 'put ''bmNlKFtdKX1yZXR1cm4gZi5zbGljZSgwKS5zb3J0KCh0ZSxvZSk9Pm9lLXRlKS5mb3JFYWNoKHRlPT57dGhpcy5tZXRhTWFuYWdlci5yZW1vdmVSb3codGUsMSl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSZW1vdmVSb3ciLGgsRCxmLGQpLCEwfXJlbW92ZUNvbChsKXtsZXQgYT1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSxkPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCJvYmplY3QiPT09dGhpcy5ob3QuZGF0YVR5cGV8fHRoaXMudGFibGVNZXRhLmNvbHVtbnMpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJjYW5ub3QgcmVtb3ZlIGNvbHVtbiB3aXRoIG9iamVjdCBkYXRhIHNvdXJjZSBvciBjb2x1bW5zIG9wdGlvbiBzcGVjaWZpZWQiKTtsZXQgaD0ibnVtYmVyIiE9dHlwZW9mIGw/LWE6bDtoPSh0aGlzLmhvdC5jb3VudENvbHMoKStoKSV0aGlzLmhvdC5jb3VudENvbHMoKTtjb25zdCBmPXRo''@;'; put 'put ''aXMudmlzdWFsQ29sdW1uc1RvUGh5c2ljYWwoaCxhKSx2PWYuc2xpY2UoMCkuc29ydCgob2UsdmUpPT52ZS1vZSk7aWYoITE9PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVtb3ZlQ29sIixoLGEsZixkKSlyZXR1cm4hMTtsZXQgRD0hMDtjb25zdCBVPXYubGVuZ3RoLHRlPXRoaXMuZGF0''@;'; put 'put ''YVNvdXJjZTtmb3IobGV0IG9lPTA7b2U8VTtvZSsrKUQmJmZbMF0hPT1mW29lXS1vZSYmKEQ9ITEpO2lmKEQpZm9yKGxldCBvZT0wLHZlPXRoaXMuaG90LmNvdW50U291cmNlUm93cygpO29lPHZlO29lKyspdGVbb2VdLnNwbGljZShmWzBdLGEpLDA9PT1vZSYmdGhpcy5tZXRhTWFuYWdlci5y''@;'; put 'put ''ZW1vdmVDb2x1bW4oZlswXSxhKTtlbHNlIGZvcihsZXQgb2U9MCx2ZT10aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKTtvZTx2ZTtvZSsrKWZvcihsZXQgd2U9MDt3ZTxVO3dlKyspdGVbb2VdLnNwbGljZSh2W3dlXSwxKSwwPT09b2UmJnRoaXMubWV0YU1hbmFnZXIucmVtb3ZlQ29sdW1uKHZb''@;'; put 'put ''d2VdLDEpO3JldHVybiBoPHRoaXMuaG90LmNvdW50Q29scygpJiYodGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVtb3ZlSW5kZXhlcyhmKSwhdGhpcy50YWJsZU1ldGEucm93SGVhZGVycyYmMD09PXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVu''@;'; put 'put ''Z3RoKCkmJnRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZShbXSkpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJlbW92ZUNvbCIsaCxhLGYsZCksdGhpcy5yZWZyZXNoRHVja1NjaGVtYSgpLCEwfXNwbGljZUNvbChsLGEsZCl7Y29uc3QgaD10aGlzLmhvdC5nZXRE''@;'; put 'put ''YXRhQXRDb2wobCksZj1oLnNsaWNlKGEsYStkKSx2PWguc2xpY2UoYStkKTtmb3IodmFyIE09YXJndW1lbnRzLmxlbmd0aCxEPW5ldyBBcnJheShNPjM/TS0zOjApLFU9MztVPE07VSsrKURbVS0zXT1hcmd1bWVudHNbVV07QnEoRCx2KTtsZXQgdGU9MDtmb3IoO3RlPGQ7KUQucHVzaChudWxs''@;'; put 'put ''KSx0ZSs9MTtyZXR1cm4gUjRlKEQpLHRoaXMuaG90LnBvcHVsYXRlRnJvbUFycmF5KGEsbCxELG51bGwsbnVsbCwic3BsaWNlQ29sIiksZn1zcGxpY2VSb3cobCxhLGQpe2NvbnN0IGg9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Um93KGwpLGY9aC5zbGljZShhLGErZCksdj1oLnNsaWNlKGEr''@;'; put 'put ''ZCk7Zm9yKHZhciBNPWFyZ3VtZW50cy5sZW5ndGgsRD1uZXcgQXJyYXkoTT4zP00tMzowKSxVPTM7VTxNO1UrKylEW1UtM109YXJndW1lbnRzW1VdO0JxKEQsdik7bGV0IHRlPTA7Zm9yKDt0ZTxkOylELnB1c2gobnVsbCksdGUrPTE7cmV0dXJuIHRoaXMuaG90LnBvcHVsYXRlRnJvbUFycmF5''@;'; put 'put ''KGwsYSxbRF0sbnVsbCxudWxsLCJzcGxpY2VSb3ciKSxmfXNwbGljZURhdGEobCxhLGQpe2lmKCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZURhdGFTcGxpY2UiLGwsYSxkKSl7Y29uc3QgZj1bLi4udGhpcy5kYXRhU291cmNlLnNsaWNlKDAsbCksLi4uZCwuLi50aGlzLmRhdGFTb3Vy''@;'; put 'put ''Y2Uuc2xpY2UobCldO3RoaXMuZGF0YVNvdXJjZS5sZW5ndGg9MCxmLmZvckVhY2godj0+dGhpcy5kYXRhU291cmNlLnB1c2godikpfX1maWx0ZXJEYXRhKGwsYSxkKXtsZXQgaD10aGlzLmhvdC5ydW5Ib29rcygiZmlsdGVyRGF0YSIsbCxhLGQpOyExPT09QXJyYXkuaXNBcnJheShoKSYmKGg9''@;'; put 'put ''dGhpcy5kYXRhU291cmNlLmZpbHRlcigoZix2KT0+LTE9PT1kLmluZGV4T2YodikpKSx0aGlzLmRhdGFTb3VyY2UubGVuZ3RoPTAsQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcy5kYXRhU291cmNlLGgpfWdldChsLGEpe2NvbnN0IGQ9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKTts''@;'; put 'put ''ZXQgaD10aGlzLmRhdGFTb3VyY2VbZF07Y29uc3QgZj10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Um93RGF0YSIsZCk7aD1pc05hTihmKT9mOmg7Y29uc3R7ZGF0YURvdE5vdGF0aW9uOnZ9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7bGV0IE09bnVsbDtpZihoJiZoLmhhc093blByb3BlcnR5''@;'; put 'put ''JiZudShoLGEpKU09aFthXTtlbHNlIGlmKHYmJiJzdHJpbmciPT10eXBlb2YgYSYmYS5pbmRleE9mKCIuIik+LTEpe2xldCB0ZT1oO2lmKCF0ZSlyZXR1cm4gbnVsbDtjb25zdCBvZT1hLnNwbGl0KCIuIik7Zm9yKGxldCB2ZT0wLHdlPW9lLmxlbmd0aDt2ZTx3ZTt2ZSsrKWlmKHRlPXRlW29l''@;'; put 'put ''W3ZlXV0sdHlwZW9mIHRlPiJ1IilyZXR1cm4gbnVsbDtNPXRlfWVsc2UiZnVuY3Rpb24iPT10eXBlb2YgYSYmKE09YSh0aGlzLmRhdGFTb3VyY2Uuc2xpY2UoZCxkKzEpWzBdKSk7Y29uc3QgRD10aGlzLnByb3BUb0NvbChhKSxVPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oRCk7aWYodHYo''@;'; put 'put ''ZCkmJnR2KFUpJiYoTT1mdW5jdGlvbiBLY3QoYyxsKXtjb25zdHtpbnN0YW5jZTphLHZpc3VhbFJvdzpkLHZpc3VhbENvbDpoLHZhbHVlR2V0dGVyOmZ9PWw7cmV0dXJuIGlsKGYpP2YuY2FsbChhLGMsZCxoLGwpOmN9KE0sdGhpcy5tZXRhTWFuYWdlci5nZXRDZWxsTWV0YShkLFUse3Zpc3Vh''@;'; put 'put ''bFJvdzpsLHZpc3VhbENvbHVtbjpELHNraXBNZXRhRXh0ZW5zaW9uOiEwfSkpKSx0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlEYXRhIikpe2NvbnN0IHRlPXZoKE0pO3RoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlEYXRhIixsLEQsdGUsImdldCIpLHRlLmlzVG91Y2hlZCgpJiYoTT10ZS52YWx1''@;'; put 'put ''ZSl9cmV0dXJuIE19Z2V0Q29weWFibGUobCxhKXtyZXR1cm4gdGhpcy5ob3QuZ2V0Q2VsbE1ldGEobCx0aGlzLnByb3BUb0NvbChhKSkuY29weWFibGU/dGhpcy5nZXQobCxhKToiIn1zZXQobCxhLGQpe2NvbnN0IGg9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKTtsZXQgZj1kLHY9dGhpcy5k''@;'; put 'put ''YXRhU291cmNlW2hdO2NvbnN0IE09dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVJvd0RhdGEiLGgpO2lmKHY9aXNOYU4oTSk/TTp2LHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeURhdGEiKSl7Y29uc3QgVT12aChmKTt0aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5RGF0YSIsbCx0aGlzLnByb3BU''@;'; put 'put ''b0NvbChhKSxVLCJzZXQiKSxVLmlzVG91Y2hlZCgpJiYoZj1VLnZhbHVlKX1jb25zdHtkYXRhRG90Tm90YXRpb246RH09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtpZih2JiZ2Lmhhc093blByb3BlcnR5JiZudSh2LGEpKXZbYV09ZjtlbHNlIGlmKEQmJiJzdHJpbmciPT10eXBlb2YgYSYmYS5p''@;'; put 'put ''bmRleE9mKCIuIik+LTEpe2xldCBvZSxVPXYsdGU9MDtjb25zdCB2ZT1hLnNwbGl0KCIuIik7Zm9yKHRlPTAsb2U9dmUubGVuZ3RoLTE7dGU8b2U7dGUrKyl7aWYoIl9fcHJvdG9fXyI9PT12ZVt0ZV18fCJjb25zdHJ1Y3RvciI9PT12ZVt0ZV18fCJwcm90b3R5cGUiPT09dmVbdGVdKXJldHVy''@;'; put 'put ''bjt0eXBlb2YgVVt2ZVt0ZV1dPiJ1IiYmKFVbdmVbdGVdXT17fSksVT1VW3ZlW3RlXV19VVt2ZVt0ZV1dPWZ9ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgYSlhKHRoaXMuZGF0YVNvdXJjZS5zbGljZShoLGgrMSlbMF0sZik7ZWxzZXtpZigiX19wcm90b19fIj09PWF8fCJjb25zdHJ1Y3Rv''@;'; put 'put ''ciI9PT1hfHwicHJvdG90eXBlIj09PWEpcmV0dXJuO3ZbYV09Zn19dmlzdWFsUm93c1RvUGh5c2ljYWwobCxhKXtjb25zdCBkPXRoaXMuaG90LmNvdW50U291cmNlUm93cygpLGg9W107bGV0IE0sZj0oZCtsKSVkLHY9YTtmb3IoO2Y8ZCYmdjspTT10aGlzLmhvdC50b1BoeXNpY2FsUm93KGYp''@;'; put 'put ''LGgucHVzaChNKSx2LT0xLGYrPTE7cmV0dXJuIGh9dmlzdWFsQ29sdW1uc1RvUGh5c2ljYWwobCxhKXtjb25zdCBkPXRoaXMuaG90LmNvdW50Q29scygpLGg9W107bGV0IGY9KGQrbCklZCx2PWE7Zm9yKDtmPGQmJnY7KXtjb25zdCBNPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oZik7aC5w''@;'; put 'put ''dXNoKE0pLHYtPTEsZis9MX1yZXR1cm4gaH1jbGVhcigpe2ZvcihsZXQgbD0wO2w8dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk7bCsrKWZvcihsZXQgYT0wO2E8dGhpcy5ob3QuY291bnRDb2xzKCk7YSsrKXRoaXMuc2V0KGwsdGhpcy5jb2xUb1Byb3AoYSksIiIpfWdldExlbmd0aCgpe2Nv''@;'; put 'put ''bnN0IGw9dGhpcy50YWJsZU1ldGEubWF4Um93cztsZXQgYTthPWw8MHx8MD09PWw/MDpsfHwxLzA7Y29uc3QgZD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpO3JldHVybiBNYXRoLm1pbihkLGEpfWdldEFsbCgpe2NvbnN0IGw9e3JvdzowLGNv''@;'; put 'put ''bDowfSxhPXtyb3c6TWF0aC5tYXgodGhpcy5ob3QuY291bnRSb3dzKCktMSwwKSxjb2w6TWF0aC5tYXgodGhpcy5ob3QuY291bnRDb2xzKCktMSwwKX07cmV0dXJuIGwucm93LWEucm93IT0wfHx0aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKT90aGlzLmdldFJhbmdlKGwsYSxyQy5ERVNUSU5B''@;'; put 'put ''VElPTl9SRU5ERVJFUik6W119Y291bnRDYWNoZWRDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY29sVG9Qcm9wQ2FjaGUubGVuZ3RofWdldFJhbmdlKGwsYSxkKXtjb25zdCBoPVtdO2xldCBmLHYsTTtjb25zdCBEPXRoaXMudGFibGVNZXRhLm1heFJvd3MsVT10aGlzLnRhYmxlTWV0YS5tYXhDb2xz''@;'; put 'put ''O2lmKDA9PT1EfHwwPT09VSlyZXR1cm5bXTtjb25zdCB0ZT1kPT09ckMuREVTVElOQVRJT05fQ0xJUEJPQVJEX0dFTkVSQVRPUj90aGlzLmdldENvcHlhYmxlOnRoaXMuZ2V0LG9lPU1hdGgubWluKE1hdGgubWF4KEQtMSwwKSxNYXRoLm1heChsLnJvdyxhLnJvdykpLHZlPU1hdGgubWluKE1h''@;'; put 'put ''dGgubWF4KFUtMSwwKSxNYXRoLm1heChsLmNvbCxhLmNvbCkpO2ZvcihmPU1hdGgubWluKGwucm93LGEucm93KTtmPD1vZTtmKyspe009W107Y29uc3Qgd2U9Zj49MD90aGlzLmhvdC50b1BoeXNpY2FsUm93KGYpOmY7Zm9yKHY9TWF0aC5taW4obC5jb2wsYS5jb2wpO3Y8PXZlJiZudWxsIT09''@;'; put 'put ''d2U7disrKU0ucHVzaCh0ZS5jYWxsKHRoaXMsZix0aGlzLmNvbFRvUHJvcCh2KSkpO251bGwhPT13ZSYmaC5wdXNoKE0pfXJldHVybiBofWdldFRleHQobCxhKXtyZXR1cm4gZVYodGhpcy5nZXRSYW5nZShsLGEsckMuREVTVElOQVRJT05fUkVOREVSRVIpKX1nZXRDb3B5YWJsZVRleHQobCxh''@;'; put 'put ''KXtyZXR1cm4gZVYodGhpcy5nZXRSYW5nZShsLGEsckMuREVTVElOQVRJT05fQ0xJUEJPQVJEX0dFTkVSQVRPUikpfWRlc3Ryb3koKXt0aGlzLmhvdD1udWxsLHRoaXMubWV0YU1hbmFnZXI9bnVsbCx0aGlzLmRhdGFTb3VyY2U9bnVsbCx0aGlzLmR1Y2tTY2hlbWE9bnVsbCx0aGlzLmNvbFRv''@;'; put 'put ''UHJvcENhY2hlLmxlbmd0aD0wLHRoaXMucHJvcFRvQ29sQ2FjaGUuY2xlYXIoKSx0aGlzLnByb3BUb0NvbENhY2hlPXZvaWQgMH19Y29uc3QgSmN0PXJDO2Z1bmN0aW9uIExtZShjLGwsYSxkKXtjb25zdHtob3RJbnN0YW5jZTpoLGRhdGFNYXA6ZixkYXRhU291cmNlOnYsaW50ZXJuYWxTb3Vy''@;'; put 'put ''Y2U6TSxzb3VyY2U6RCxtZXRhTWFuYWdlcjpVLGZpcnN0UnVuOnRlfT1kLG9lPVYxKE0pLHZlPWguZ2V0U2V0dGluZ3MoKTtoLmRhdGFUeXBlPUFycmF5LmlzQXJyYXkodmUuZGF0YVNjaGVtYSk/ImFycmF5IjppbCh2ZS5kYXRhU2NoZW1hKT8iZnVuY3Rpb24iOiJvYmplY3QiLGYmJmYuZGVz''@;'; put 'put ''dHJveSgpLGM9aC5ydW5Ib29rcyhgYmVmb3JlJHtvZX1gLGMsdGUsRCk7Y29uc3Qgd2U9bmV3IEpjdChoLGMsVSk7aWYobCh3ZSksIm9iamVjdCI9PXR5cGVvZiBjJiZudWxsIT09YyljLnB1c2gmJmMuc3BsaWNlfHwoYz1bY10pO2Vsc2V7aWYobnVsbCE9PWMpdGhyb3cgbmV3IEVycm9yKGAk''@;'; put 'put ''e019IG9ubHkgYWNjZXB0cyBhcnJheSBvZiBvYmplY3RzIG9yIGFycmF5IG9mIGFycmF5cyAoJHt0eXBlb2YgY30gZ2l2ZW4pYCk7e2NvbnN0IEZlPXdlLmdldFNjaGVtYSgpO2M9W107bGV0IFdlLG50PTAsZHQ9MDtmb3IobnQ9MCxkdD12ZS5zdGFydFJvd3M7bnQ8ZHQ7bnQrKylpZigib2Jq''@;'; put 'put ''ZWN0IiE9PWguZGF0YVR5cGUmJiJmdW5jdGlvbiIhPT1oLmRhdGFUeXBlfHwhdmUuZGF0YVNjaGVtYSlpZigiYXJyYXkiPT09aC5kYXRhVHlwZSlXZT1CMShGZVswXSksYy5wdXNoKFdlKTtlbHNle1dlPVtdO2ZvcihsZXQgbXQ9MCwkdD12ZS5zdGFydENvbHM7bXQ8JHQ7bXQrKylXZS5wdXNo''@;'; put 'put ''KG51bGwpO2MucHVzaChXZSl9ZWxzZSBXZT1CMShGZSksYy5wdXNoKFdlKX19QXJyYXkuaXNBcnJheShjWzBdKSYmKGguZGF0YVR5cGU9ImFycmF5IiksdmUuZGF0YT1jLHdlLmRhdGFTb3VyY2U9Yyx2LmRhdGE9Yyx2LmRhdGFUeXBlPWguZGF0YVR5cGUsdi5jb2xUb1Byb3A9d2UuY29sVG9Q''@;'; put 'put ''cm9wLmJpbmQod2UpLHYucHJvcFRvQ29sPXdlLnByb3BUb0NvbC5iaW5kKHdlKSx2LmNvdW50Q2FjaGVkQ29sdW1ucz13ZS5jb3VudENhY2hlZENvbHVtbnMuYmluZCh3ZSksYSh3ZSksaC5ydW5Ib29rcyhgYWZ0ZXIke29lfWAsYyx0ZSxEKSx0ZXx8KGgucnVuSG9va3MoImFmdGVyQ2hhbmdl''@;'; put 'put ''IixudWxsLE0pLGgudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSxoLnJlbmRlcigpKSxoLmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJlphKGgucm9vdEVsZW1lbnQsW0c0ZSgtMSksWEgoaC5jb3VudENvbHMoKSsoaC52aWV3P2guY291bnRSb3dIZWFkZXJzKCk6MCkpXSl9ZnVuY3Rpb24gT21l''@;'; put 'put ''KGMsbCxhKXtQbWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFBtZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gRm1lKGMsbCl7cmV0''@;'; put 'put ''dXJuIGMuZ2V0KGlDKGMsbCkpfWZ1bmN0aW9uIEhtZShjLGwsYSl7cmV0dXJuIGMuc2V0KGlDKGMsbCksYSksYX1mdW5jdGlvbiBpQyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5''@;'; put 'put ''cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIHB0ZT1uZXcgV2Vha01hcCxndGU9bmV3IFdlYWtNYXAsYms9bmV3IFdlYWtTZXQ7Y2xhc3MgZXV0e2NvbnN0cnVjdG9yKGwpe2xldHtyb3dJbmRleE1hcHBlcjphLGNvbHVtbkluZGV4''@;'; put 'put ''TWFwcGVyOmR9PWw7KGZ1bmN0aW9uIFFjdChjLGwpe1BtZShjLGwpLGwuYWRkKGMpfSkodGhpcyxiayksT21lKHRoaXMscHRlLHZvaWQgMCksT21lKHRoaXMsZ3RlLHZvaWQgMCksSG1lKHB0ZSx0aGlzLGEpLEhtZShndGUsdGhpcyxkKX10b1JlbmRlcmFibGUobCl7Y29uc3QgYT0iTi1TIj09''@;'; put 'put ''PWwuZ2V0VmVydGljYWxEaXJlY3Rpb24oKT8xOi0xLGQ9IlctRSI9PT1sLmdldEhvcml6b250YWxEaXJlY3Rpb24oKT8xOi0xLGg9aUMoYmssdGhpcyxObWUpLmNhbGwodGhpcyxsLmZyb20sYSxkKTtpZihudWxsPT09aClyZXR1cm4gbnVsbDtjb25zdCBmPWlDKGJrLHRoaXMsTm1lKS5jYWxs''@;'; put 'put ''KHRoaXMsbC50bywtYSwtZCk7aWYobnVsbD09PWYpcmV0dXJuIG51bGw7Y29uc3Qgdj1sLmNsb25lKCk7cmV0dXJuIHYuZnJvbT1oLHYudG89Zix2LmluY2x1ZGVzKGwuaGlnaGxpZ2h0KXx8KHYuaGlnaGxpZ2h0PWgpLHZ9fWZ1bmN0aW9uIE5tZShjLGwpe2xldCBhPWFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpsO2NvbnN0IGQ9aUMoYmssdGhpcyxWbWUpLmNhbGwodGhpcyxGbWUocHRlLHRoaXMpLGMucm93LGwpO2lmKG51bGw9PT1kKXJldHVybiBudWxsO2NvbnN0IGg9aUMoYmssdGhpcyxWbWUpLmNhbGwodGhpcyxGbWUoZ3Rl''@;'; put 'put ''LHRoaXMpLGMuY29sLGEpO3JldHVybiBudWxsPT09aD9udWxsOmMuY2xvbmUoKS5hc3NpZ24oe3JvdzpkLGNvbDpofSl9ZnVuY3Rpb24gVm1lKGMsbCxhKXtyZXR1cm4gbDwwP2w6Yy5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobCxhKX1mdW5jdGlvbiBhQyhjKXtFNChjKSYmYy5zY3JvbGxJ''@;'; put 'put ''bnRvVmlldyh7YmxvY2s6Im5lYXJlc3QiLGlubGluZToibmVhcmVzdCJ9KX1mdW5jdGlvbiB0VihjKXtjb25zdHtzZWxlY3Rpb246bCx2aWV3OmF9PWMsZD1jLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSxoPWwuZ2V0U2VsZWN0aW9uU291cmNlKCksZj1hLmdldEZpcnN0RnVsbHlWaXNpYmxl''@;'; put 'put ''Q29sdW1uKCksdj1hLmdldExhc3RGdWxseVZpc2libGVDb2x1bW4oKSxNPWQuZ2V0VG9wU3RhcnRDb3JuZXIoKS5jb2wsRD1kLmdldEJvdHRvbUVuZENvcm5lcigpLmNvbCxVPU08PWYsdGU9RD49dixvZT1hLmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCksdmU9YS5nZXRMYXN0RnVsbHlWaXNp''@;'; put 'put ''YmxlUm93KCksd2U9ZC5nZXRUb3BTdGFydENvcm5lcigpLnJvdyxGZT1kLmdldEJvdHRvbUVuZENvcm5lcigpLnJvdyxXZT13ZTw9b2UsbnQ9RmU+PXZlO3JldHVybntnZXRDb21wdXRlZENvbHVtblRhcmdldDpkdD0+Im1vdXNlIj09PWh8fCJrZXlib2FyZCI9PT1oP2R0LmNvbDpVJiZ0ZT9k''@;'; put 'put ''LmhpZ2hsaWdodC5jb2w6VT9NOnRlP0Q6ZHQuY29sLGdldENvbXB1dGVkUm93VGFyZ2V0OmR0PT4ibW91c2UiPT09aHx8ImtleWJvYXJkIj09PWg/ZHQucm93OldlJiZudD9kLmhpZ2hsaWdodC5yb3c6V2U/d2U6bnQ/RmU6ZHQucm93fX1mdW5jdGlvbiBvQyhjLGwsYSl7Qm1lKGMsbCksbC5z''@;'; put 'put ''ZXQoYyxhKX1mdW5jdGlvbiBCbWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFpsKGMsbCl7cmV0dXJuIGMuZ2V0KHRwKGMsbCkpfWZ1''@;'; put 'put ''bmN0aW9uIHB2KGMsbCxhKXtyZXR1cm4gYy5zZXQodHAoYyxsKSxhKSxhfWZ1bmN0aW9uIHRwKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1l''@;'; put 'put ''bnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBzQz1PYmplY3QuZnJlZXplKHtDRUxMOiJjZWxsIixNSVhFRDoibWl4ZWQifSk7dmFyIEN1PW5ldyBXZWFrTWFwLG5WPW5ldyBXZWFrTWFwLHJWPW5ldyBXZWFrTWFwLGlWPW5ldyBXZWFrTWFwLGFWPW5ldyBXZWFrTWFw''@;'; put 'put ''LG9WPW5ldyBXZWFrTWFwLE80PW5ldyBXZWFrU2V0O2NsYXNzIHV1dHtjb25zdHJ1Y3RvcihsKXsoZnVuY3Rpb24gY3V0KGMsbCl7Qm1lKGMsbCksbC5hZGQoYyl9KSh0aGlzLE80KSxvQyh0aGlzLEN1LHZvaWQgMCksb0ModGhpcyxuVix2b2lkIDApLG9DKHRoaXMsclYsMSksb0ModGhpcyxp''@;'; put 'put ''VixudWxsKSxvQyh0aGlzLGFWLG5ldyBNYXApLG9DKHRoaXMsb1YsITEpLHB2KEN1LHRoaXMsbCl9aW5pdCgpe3ZhciBsPXRoaXM7Y29uc3QgYT1abChDdSx0aGlzKS5nZXRTZXR0aW5ncygpO3B2KG5WLHRoaXMsYS5pbWVGYXN0RWRpdD9zQy5NSVhFRDpzQy5DRUxMKSxabChDdSx0aGlzKS5h''@;'; put 'put ''ZGRIb29rKCJhZnRlclVwZGF0ZVNldHRpbmdzIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB0cChPNCxsLHB1dCkuY2FsbChsLC4uLmgpfSksWmwoQ3UsdGhpcykuYWRkSG9v''@;'; put 'put ''aygiYWZ0ZXJTZWxlY3Rpb24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHRwKE80LGwsam1lKS5jYWxsKGwsLi4uaCl9KSxabChDdSx0aGlzKS5hZGRIb29rKCJhZnRlclNl''@;'; put 'put ''bGVjdGlvbkZvY3VzU2V0IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB0cChPNCxsLGptZSkuY2FsbChsLC4uLmgpfSksWmwoQ3UsdGhpcykuYWRkSG9vaygiYWZ0ZXJTZWxl''@;'; put 'put ''Y3Rpb25FbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHRwKE80LGwsaHV0KS5jYWxsKGwsLi4uaCl9KSxabChDdSx0aGlzKS5hZGRIb29rKCJhZnRlclJlbmRlciIsZnVu''@;'; put 'put ''Y3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gdHAoTzQsbCxmdXQpLmNhbGwobCwuLi5oKX0pfWdldEZvY3VzTW9kZSgpe3JldHVybiBabChuVix0aGlzKX1zZXRGb2N1c01vZGUobCl7''@;'; put 'put ''T2JqZWN0LnZhbHVlcyhzQykuaW5jbHVkZXMobCk/cHYoblYsdGhpcyxsKTpvcyhgIiR7bH0iIGlzIG5vdCBhIHZhbGlkIGZvY3VzIG1vZGUuYCl9Z2V0UmVmb2N1c0RlbGF5KCl7cmV0dXJuIFpsKHJWLHRoaXMpfXNldFJlZm9jdXNEZWxheShsKXtwdihyVix0aGlzLGwpfXNldFJlZm9jdXNF''@;'; put 'put ''bGVtZW50R2V0dGVyKGwpe3B2KGlWLHRoaXMsbCl9Z2V0UmVmb2N1c0VsZW1lbnQoKXt2YXIgbDtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgWmwoaVYsdGhpcyk/WmwoaVYsdGhpcykuY2FsbCh0aGlzKTpudWxsPT09KGw9WmwoQ3UsdGhpcykuZ2V0QWN0aXZlRWRpdG9yKCkpfHx2b2lkIDA9''@;'; put 'put ''PT1sP3ZvaWQgMDpsLlRFWFRBUkVBfWZvY3VzT25IaWdobGlnaHRlZENlbGwobCl7Y29uc3QgYT1kPT57dmFyIGgsZjtjb25zdCB2PW51bGw9PT0oaD1abChDdSx0aGlzKS5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmhpZ2hsaWdodDtpZighdilyZXR1''@;'; put 'put ''cm47bGV0IE09WmwoQ3UsdGhpcykucnVuSG9va3MoIm1vZGlmeUZvY3VzZWRFbGVtZW50Iix2LnJvdyx2LmNvbCxkKTtFNChNKXx8KE09ZCksTSYmKG51bGw9PT0oZj1abChDdSx0aGlzKS5nZXRBY3RpdmVFZGl0b3IoKSl8fHZvaWQgMD09PWZ8fCFmLmlzT3BlbmVkKCkpJiZNLmZvY3VzKHtw''@;'; put 'put ''cmV2ZW50U2Nyb2xsOiEwfSl9O2w/YShsKTp0cChPNCx0aGlzLG10ZSkuY2FsbCh0aGlzLGQ9PmEoZCkpfXJlZm9jdXNUb0VkaXRvclRleHRhcmVhKCl7dmFyIGw7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOlpsKHJWLHRoaXMp''@;'; put 'put ''O3ZhciBkLGg7IVpsKEN1LHRoaXMpLmdldFNldHRpbmdzKCkuaW1lRmFzdEVkaXR8fG51bGwhPT0obD1abChDdSx0aGlzKS5nZXRBY3RpdmVFZGl0b3IoKSkmJnZvaWQgMCE9PWwmJmwuaXNPcGVuZWQoKXx8KG51bGw9PT0oZD1abChDdSx0aGlzKS5nZXRBY3RpdmVFZGl0b3IoKSl8fHZvaWQg''@;'; put 'put ''MD09PWR8fG51bGw9PT0oaD1kLnJlZnJlc2hWYWx1ZSl8fHZvaWQgMD09PWh8fGguY2FsbChkKSxabChhVix0aGlzKS5oYXMoYSl8fFpsKGFWLHRoaXMpLnNldChhLCRBKCgpPT57dmFyIGY7WmwoQ3UsdGhpcykuaXNEZXN0cm95ZWR8fG51bGw9PT0oZj10aGlzLmdldFJlZm9jdXNFbGVtZW50''@;'; put 'put ''KCkpfHx2b2lkIDA9PT1mfHxmLnNlbGVjdCgpfSxhKSksWmwoYVYsdGhpcykuZ2V0KGEpKCkpfX1mdW5jdGlvbiBtdGUoYyl7dmFyIGw7Y29uc3QgYT1udWxsPT09KGw9WmwoQ3UsdGhpcykuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5oaWdobGlnaHQ7''@;'; put 'put ''aWYoIWF8fCFabChDdSx0aGlzKS5zZWxlY3Rpb24uaXNDZWxsVmlzaWJsZShhKSlyZXR1cm4gdm9pZCBjKG51bGwpO2NvbnN0IGQ9WmwoQ3UsdGhpcykuZ2V0Q2VsbChhLnJvdyxhLmNvbCwhMCk7bnVsbD09PWQ/WmwoQ3UsdGhpcykuYWRkSG9va09uY2UoImFmdGVyU2Nyb2xsIiwoKT0+e2Mo''@;'; put 'put ''WmwoQ3UsdGhpcykuZ2V0Q2VsbChhLnJvdyxhLmNvbCwhMCkpfSk6YyhkKX1mdW5jdGlvbiBkdXQoKXt0cChPNCx0aGlzLG10ZSkuY2FsbCh0aGlzLGM9Pntjb25zdHthY3RpdmVFbGVtZW50Omx9PVpsKEN1LHRoaXMpLnJvb3REb2N1bWVudDtsJiZzTihsKSYmbC5ibHVyKCksdGhpcy5mb2N1''@;'; put 'put ''c09uSGlnaGxpZ2h0ZWRDZWxsKGMpfSl9ZnVuY3Rpb24gaHV0KCl7dHAoTzQsdGhpcyxtdGUpLmNhbGwodGhpcyxjPT57dGhpcy5nZXRGb2N1c01vZGUoKT09PXNDLk1JWEVEJiYiVEQiPT09Yz8ubm9kZU5hbWUmJnRoaXMucmVmb2N1c1RvRWRpdG9yVGV4dGFyZWEoKX0pfWZ1bmN0aW9uIGpt''@;'; put 'put ''ZSgpe3B2KG9WLHRoaXMsITApfWZ1bmN0aW9uIGZ1dCgpe1psKG9WLHRoaXMpJiYocHYob1YsdGhpcywhMSksdHAoTzQsdGhpcyxkdXQpLmNhbGwodGhpcykpfWZ1bmN0aW9uIHB1dChjKXsiYm9vbGVhbiI9PXR5cGVvZiBjLmltZUZhc3RFZGl0JiZ0aGlzLnNldEZvY3VzTW9kZShjLmltZUZh''@;'; put 'put ''c3RFZGl0P3NDLk1JWEVEOnNDLkNFTEwpfWNvbnN0IGd1dD1PYmplY3QuZnJlZXplKHtJTkxJTkU6ImlubGluZSIsTU9EQUw6Im1vZGFsIn0pLGd2PU9iamVjdC5mcmVlemUoe1VOS05PV046InVua25vd24iLENMSUNLOiJjbGljayIsVEFCX0ZST01fQUJPVkU6InRhYl9mcm9tX2Fib3ZlIixU''@;'; put 'put ''QUJfRlJPTV9CRUxPVzoidGFiX2Zyb21fYmVsb3cifSk7ZnVuY3Rpb24gem1lKGMsbCl7Y29uc3QgZD1jLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3JldHVybiBkLnR5cGU9InRleHQiLGQubmFtZT0iaHRGb2N1c0NhdGNoZXIiLGQuY2xhc3NMaXN0LmFkZCgiaHRGb2N1''@;'; put 'put ''c0NhdGNoZXIiKSxkLmRhdGFzZXQuaHRGb2N1c1NvdXJjZT1sLGMuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmWmEoZCxbeDIoIkZvY3VzIGNhdGNoZXIiKV0pLGR9ZnVuY3Rpb24gX3V0KGMpe2NvbnN0IGw9S0Eoe2Vycm9ySWRFeGlzdHM6RmU9PmBUaGUgIiR7RmV9IiBmb2N1cyBzY29wZSBp''@;'; put 'put ''cyBhbHJlYWR5IHJlZ2lzdGVyZWQuYH0pLGE9Yy5nZXRTaG9ydGN1dE1hbmFnZXIoKTtsZXQgZD1udWxsO2Z1bmN0aW9uIFUoRmUpe2xldCBXZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Z3YuVU5LTk9XTjtkIT09RmUmJihudWxsIT09''@;'; put 'put ''ZCYmdGUoZCksZD1GZSxkLmFjdGl2YXRlKFdlKSxhLnNldEFjdGl2ZUNvbnRleHROYW1lKEZlLmdldFNob3J0Y3V0c0NvbnRleHROYW1lKCkpKX1mdW5jdGlvbiB0ZShGZSl7b2UoKSxkPT09RmUmJihkPW51bGwsRmUuZGVhY3RpdmF0ZSgpKX1mdW5jdGlvbiBvZSgpe2NvbnN0IEZlPWwuZ2V0''@;'; put 'put ''VmFsdWVzKCksV2U9RmUuZmlsdGVyKG50PT5udC5ydW5Pbmx5SWYoKSYmIm1vZGFsIj09PW50LmdldFR5cGUoKSk7RmUuZm9yRWFjaChudD0+e1dlLmxlbmd0aD4wJiZXZS5pbmNsdWRlcyhudCl8fDA9PT1XZS5sZW5ndGh8fG50Lmhhc0NvbnRhaW5lckRldGFjaGVkKCk/bnQuZW5hYmxlKCk6''@;'; put 'put ''bnQuZGlzYWJsZSgpLG50PT09ZD9udC5jb250YWlucyhjLnJvb3REb2N1bWVudC5hY3RpdmVFbGVtZW50KT9udC5kZWFjdGl2YXRlRm9jdXNDYXRjaGVycygpOm50LmFjdGl2YXRlRm9jdXNDYXRjaGVycygpOm50LnJ1bk9ubHlJZigpP250LmFjdGl2YXRlRm9jdXNDYXRjaGVycygpOm50LmRl''@;'; put 'put ''YWN0aXZhdGVGb2N1c0NhdGNoZXJzKCl9KX1mdW5jdGlvbiB2ZShGZSxXZSl7aWYoIUZlLmlzQ29ubmVjdGVkfHwhazYoRmUpKXJldHVybjtjb25zdCBudD1sLmdldFZhbHVlcygpLmZpbHRlcihtdD0+bXQucnVuT25seUlmKCkpO2xldCBkdD0hMTtudC5mb3JFYWNoKG10PT57IWR0JiZtdC5j''@;'; put 'put ''b250YWlucyhGZSkmJihkdD0hMCxXZSE9PWd2LlVOS05PV04mJmMubGlzdGVuKCksVShtdCxXZSkpfSksIWR0JiZkJiYodGUoZCksYy51bmxpc3RlbigpKX1jb25zdCB3ZT1mdW5jdGlvbiBidXQoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJn''@;'; put 'put ''dW1lbnRzWzFdOnt9LGE9ITE7ZnVuY3Rpb24gZCh0ZSl7dmFyIG9lO2F8fG51bGw9PT0ob2U9bC5vbkZvY3VzKXx8dm9pZCAwPT09b2V8fG9lLmNhbGwobCx0ZSl9ZnVuY3Rpb24gaCh0ZSl7dmFyIG9lO251bGw9PT0ob2U9bC5vbkNsaWNrKXx8dm9pZCAwPT09b2V8fG9lLmNhbGwobCx0ZSl9''@;'; put 'put ''ZnVuY3Rpb24gZih0ZSl7dmFyIG9lOyJUYWIiPT09dGUua2V5JiYobnVsbD09PShvZT1sLm9uVGFiS2V5RG93bil8fHZvaWQgMD09PW9lfHxvZS5jYWxsKGwsdGUpKX1mdW5jdGlvbiB2KCl7YT0hMH1mdW5jdGlvbiBNKCl7YT0hMX1yZXR1cm57bW91bnQ6KCk9PntsZXQgdGU9Yztmb3IoO3Rl''@;'; put 'put ''Oyl7Y29uc3R7ZG9jdW1lbnRFbGVtZW50Om9lfT10ZS5kb2N1bWVudDtvZS5hZGRFdmVudExpc3RlbmVyKCJmb2N1c2luIixkKSxvZS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsaCksb2UuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZiksb2UuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vk''@;'; put 'put ''b3duIix2KSxvZS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixNKSx0ZT1nNSh0ZSl9fSx1bm1vdW50OigpPT57bGV0IHRlPWM7Zm9yKDt0ZTspe2NvbnN0e2RvY3VtZW50RWxlbWVudDpvZX09dGUuZG9jdW1lbnQ7b2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsZCksb2UucmVt''@;'; put 'put ''b3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLGgpLG9lLnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLGYpLG9lLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdiksb2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsTSksdGU9ZzUodGUpfX19fShjLnJvb3RXaW5kb3cs''@;'; put 'put ''e29uRm9jdXM6RmU9Pnt2YXIgV2U7dmUoRmUudGFyZ2V0LG51bGwhPT0oV2U9RmUudGFyZ2V0LmRhdGFzZXQuaHRGb2N1c1NvdXJjZSkmJnZvaWQgMCE9PVdlP1dlOmd2LlVOS05PV04pfSxvbkNsaWNrOkZlPT57dmUoRmUudGFyZ2V0LGd2LkNMSUNLKX0sb25UYWJLZXlEb3duOigpPT57b2Uo''@;'; put 'put ''KX19KTtyZXR1cm4gd2UubW91bnQoKSx7Z2V0QWN0aXZlU2NvcGVJZDpmdW5jdGlvbiBoKCl7cmV0dXJuIGQ/bC5nZXRJZChkKTpudWxsfSxyZWdpc3RlclNjb3BlOmZ1bmN0aW9uIGYoRmUsV2Upe2xldCBudD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1''@;'; put 'put ''bWVudHNbMl06e307aWYobC5oYXNJdGVtKEZlKSl0aHJvdyBuZXcgRXJyb3IoYFNjb3BlIHdpdGggaWQgIiR7RmV9IiBhbHJlYWR5IHJlZ2lzdGVyZWRgKTtjb25zdCBkdD1mdW5jdGlvbiB5dXQoYyxsKXtjb25zdCBkPXtzaG9ydGN1dHNDb250ZXh0TmFtZToiZ3JpZCIsdHlwZTpndXQuSU5M''@;'; put 'put ''SU5FLGNvbnRhaW5zOndlPT53ZT09PWx8fGwuY29udGFpbnMod2UpLHJ1bk9ubHlJZjooKT0+ITAsLi4uYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9fSxoPWZ1bmN0aW9uIHZ1dChjLGwpe2NvbnN0IGE9em1lKGMsZ3YuVEFCX0ZST01f''@;'; put 'put ''QUJPVkUpLGQ9em1lKGMsZ3YuVEFCX0ZST01fQkVMT1cpO3JldHVybiBsLnByZXBlbmQoYSksbC5hcHBlbmQoZCkse2FjdGl2YXRlKCl7YS50YWJJbmRleD0wLGQudGFiSW5kZXg9MH0sZGVhY3RpdmF0ZSgpe2EudGFiSW5kZXg9LTEsZC50YWJJbmRleD0tMX0sZGVzdHJveSgpe2EucmVtb3Zl''@;'; put 'put ''KCksZC5yZW1vdmUoKX19fShjLGwpO3JldHVybntnZXRUeXBlOigpPT5kLnR5cGUsaGFzQ29udGFpbmVyRGV0YWNoZWQ6KCk9PiFjLnJvb3RXcmFwcGVyRWxlbWVudC5jb250YWlucyhsKSxnZXRTaG9ydGN1dHNDb250ZXh0TmFtZTooKT0+ZC5zaG9ydGN1dHNDb250ZXh0TmFtZSxydW5Pbmx5''@;'; put 'put ''SWY6KCk9PmQucnVuT25seUlmKCksY29udGFpbnM6d2U9PmQuY29udGFpbnMod2UpLGFjdGl2YXRlOmZ1bmN0aW9uKCl7dmFyIHdlO251bGw9PT0od2U9ZC5vbkFjdGl2YXRlKXx8dm9pZCAwPT09d2V8fHdlLmNhbGwoZCxhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1sw''@;'; put 'put ''XT9hcmd1bWVudHNbMF06Z3YuVU5LTk9XTil9LGRlYWN0aXZhdGU6KCk9Pnt2YXIgd2U7bnVsbD09PSh3ZT1kLm9uRGVhY3RpdmF0ZSl8fHZvaWQgMD09PXdlfHx3ZS5jYWxsKGQpfSxhY3RpdmF0ZUZvY3VzQ2F0Y2hlcnM6KCk9PntoPy5hY3RpdmF0ZSgpfSxkZWFjdGl2YXRlRm9jdXNDYXRj''@;'; put 'put ''aGVyczooKT0+e2g/LmRlYWN0aXZhdGUoKX0sZW5hYmxlOigpPT57bC5yZW1vdmVBdHRyaWJ1dGUoImluZXJ0Iil9LGRpc2FibGU6KCk9PntsLnNldEF0dHJpYnV0ZSgiaW5lcnQiLCJ0cnVlIil9LGRlc3Ryb3k6KCk9PntoPy5kZXN0cm95KCl9fX0oYyxXZSxudCk7bC5hZGRJdGVtKEZlLGR0''@;'; put 'put ''KSxhLmdldE9yQ3JlYXRlQ29udGV4dChkdC5nZXRTaG9ydGN1dHNDb250ZXh0TmFtZSgpKX0sdW5yZWdpc3RlclNjb3BlOmZ1bmN0aW9uIHYoRmUpe2lmKCFsLmhhc0l0ZW0oRmUpKXRocm93IG5ldyBFcnJvcihgU2NvcGUgd2l0aCBpZCAiJHtGZX0iIG5vdCBmb3VuZGApO2wuZ2V0SXRlbShG''@;'; put 'put ''ZSkuZGVzdHJveSgpLGwucmVtb3ZlSXRlbShGZSl9LGFjdGl2YXRlU2NvcGU6RmU9PmZ1bmN0aW9uIE0oRmUpe2lmKCFsLmhhc0l0ZW0oRmUpKXRocm93IG5ldyBFcnJvcihgU2NvcGUgd2l0aCBpZCAiJHtGZX0iIG5vdCBmb3VuZGApO1UobC5nZXRJdGVtKEZlKSl9KEZlKSxkZWFjdGl2YXRl''@;'; put 'put ''U2NvcGU6RmU9PmZ1bmN0aW9uIEQoRmUpe2lmKCFsLmhhc0l0ZW0oRmUpKXRocm93IG5ldyBFcnJvcihgU2NvcGUgd2l0aCBpZCAiJHtGZX0iIG5vdCBmb3VuZGApO3RlKGwuZ2V0SXRlbShGZSkpfShGZSksZGVzdHJveTooKT0+d2UudW5tb3VudCgpfX1mdW5jdGlvbiB2dGUoYyl7Y29uc3R7''@;'; put 'put ''cm93SW5kZXhNYXBwZXI6bCxjb2x1bW5JbmRleE1hcHBlcjphfT1jLHtuYXZpZ2FibGVIZWFkZXJzOmR9PWMuZ2V0U2V0dGluZ3MoKTtsZXQgaD1kJiZjLmNvdW50Q29sSGVhZGVycygpPjA/LWMuY291bnRDb2xIZWFkZXJzKCk6MCxmPWQmJmMuY291bnRSb3dIZWFkZXJzKCk+MD8tYy5jb3Vu''@;'; put 'put ''dFJvd0hlYWRlcnMoKTowO3JldHVybiAwPT09aCYmKGg9bC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGgpKSwwPT09ZiYmKGY9YS5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGYpKSxudWxsPT09aHx8bnVsbD09PWY/bnVsbDpjLl9jcmVhdGVDZWxsQ29vcmRzKGgsZil9ZnVu''@;'; put 'put ''Y3Rpb24geXRlKGMpe3ZhciBsLGE7Y29uc3R7cm93SW5kZXhNYXBwZXI6ZCxjb2x1bW5JbmRleE1hcHBlcjpofT1jLHtuYXZpZ2FibGVIZWFkZXJzOmZ9PWMuZ2V0U2V0dGluZ3MoKTtsZXQgdj1kLmdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCktMSxNPWguZ2V0UmVuZGVyYWJsZUluZGV4''@;'; put 'put ''ZXNMZW5ndGgoKS0xO2lmKHY8MCl7aWYoIWZ8fDA9PT1jLmNvdW50Q29sSGVhZGVycygpKXJldHVybiBudWxsO3Y9LTF9aWYoTTwwKXtpZighZnx8MD09PWMuY291bnRDb2xIZWFkZXJzKCkpcmV0dXJuIG51bGw7TT0tMX1yZXR1cm4gYy5fY3JlYXRlQ2VsbENvb3JkcyhudWxsIT09KGw9ZC5n''@;'; put 'put ''ZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHYpKSYmdm9pZCAwIT09bD9sOnYsbnVsbCE9PShhPWguZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChNKSkmJnZvaWQgMCE9PWE/YTpNKX1jb25zdCBfaz0iZ3JpZERlZmF1bHQiLHNWPSJncmlkLnRhYk5hdmlnYXRpb24iLE42PSJlZGl0''@;'; put 'put ''b3JNYW5hZ2VyLmhhbmRsaW5nRWRpdG9yIjtmdW5jdGlvbiBTdXQoYyl7dmFyIGw7Y29uc3QgYT1mdW5jdGlvbiB3dXQoYyl7cmV0dXJuIGw9PntpZighbClyZXR1cm4gbnVsbDtjb25zdHtyb3dJbmRleE1hcHBlcjphLGNvbHVtbkluZGV4TWFwcGVyOmR9PWM7aWYoYS5pc0hpZGRlbihsLnJv''@;'; put 'put ''dyl8fGQuaXNIaWRkZW4obC5jb2wpKXJldHVybiBudWxsO2NvbnN0IGg9dnRlKGMpLGY9eXRlKGMpO3JldHVybiBudWxsPT09aHx8bnVsbD09PWY/bnVsbDoobC5yb3c9Z3MobC5yb3csaC5yb3csZi5yb3cpLGwuY29sPWdzKGwuY29sLGguY29sLGYuY29sKSxsKX19KGMpLGQ9e3dyYXBwZWQ6''@;'; put 'put ''ITEsZmxpcHBlZDohMX07bGV0IGgsZj0hMCx2PSExO2MuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb24iLCgpPT57dmFyIFU7ZiYmKGg9bnVsbD09PShVPWMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpKXx8dm9pZCAwPT09VT92b2lkIDA6VS5oaWdobGlnaHQpfSksYy5hZGRIb29rKCJiZWZvcmVS''@;'; put 'put ''b3dXcmFwIiwoVSx0ZSxvZSk9PntkLndyYXBwZWQ9ITAsZC5mbGlwcGVkPW9lfSksYy5hZGRIb29rKCJiZWZvcmVFbXB0eURhdGFTdGF0ZVNob3ciLCgpPT57dj0hMH0pLGMuYWRkSG9vaygiYmVmb3JlRW1wdHlEYXRhU3RhdGVIaWRlIiwoKT0+e3Y9ITF9KSxjLmdldFNob3J0Y3V0TWFuYWdl''@;'; put 'put ''cigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIlRhYiJdLFsiU2hpZnQiLCJUYWIiXV0scHJldmVudERlZmF1bHQ6ITEsc3RvcFByb3BhZ2F0aW9uOiExLHJlbGF0aXZlVG9Hcm91cDpfayxncm91cDpzVixwb3NpdGlvbjoiYmVmb3JlIixjYWxsYmFjaygpe2Nv''@;'; put 'put ''bnN0e3RhYk5hdmlnYXRpb246VX09Yy5nZXRTZXR0aW5ncygpO2MuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpJiYhVSYmKGY9ITEpfX0se2tleXM6W1siVGFiIl0sWyJTaGlmdCIsIlRhYiJdXSxwcmV2ZW50RGVmYXVsdDohMSxzdG9wUHJvcGFnYXRpb246ITEscmVsYXRpdmVUb0dyb3VwOl9r''@;'; put 'put ''LGdyb3VwOnNWLGNhbGxiYWNrKFUpe2NvbnN0e3RhYk5hdmlnYXRpb246dGUsYXV0b1dyYXBSb3c6b2V9PWMuZ2V0U2V0dGluZ3MoKTtmPSEwLCghdGV8fCFjLnNlbGVjdGlvbi5pc1NlbGVjdGVkKCl8fG9lJiZkLndyYXBwZWQmJmQuZmxpcHBlZHx8IW9lJiZkLndyYXBwZWQpJiYob2UmJmQu''@;'; put 'put ''d3JhcHBlZCYmZC5mbGlwcGVkJiYoaD1VLnNoaWZ0S2V5P3Z0ZShjKTp5dGUoYykpLGQud3JhcHBlZD0hMSxkLmZsaXBwZWQ9ITEpfSxwb3NpdGlvbjoiYWZ0ZXIifV0pO2NvbnN0IEQ9bnVsbCE9PShsPWMucm9vdEdyaWRFbGVtZW50KSYmdm9pZCAwIT09bD9sOmMucm9vdEVsZW1lbnQ7Yy5n''@;'; put 'put ''ZXRGb2N1c1Njb3BlTWFuYWdlcigpLnJlZ2lzdGVyU2NvcGUoImdyaWQiLEQse2NvbnRhaW5zOlU9PiEoRCE9PVUmJiFELmNvbnRhaW5zKFUpKXx8bnVsbD09PVUuY2xvc2VzdCgiLmh0TWVudSIpJiZjLnJvb3RQb3J0YWxFbGVtZW50LmNvbnRhaW5zKFUpLHJ1bk9ubHlJZjooKT0+e2NvbnN0''@;'; put 'put ''e25hdmlnYWJsZUhlYWRlcnM6VX09Yy5nZXRTZXR0aW5ncygpO3JldHVybiEoKHZ8fCFVKSYmMD09PWMuY291bnRSZW5kZXJlZFJvd3MoKSYmMD09PWMuY291bnRSZW5kZXJlZENvbHMoKSYmYy5jb3VudFJvd0hlYWRlcnMoKT4wJiZjLmNvdW50Q29sSGVhZGVycygpPjApJiYoIVUmJmMuY291''@;'; put 'put ''bnRSZW5kZXJlZFJvd3MoKT4wJiZjLmNvdW50UmVuZGVyZWRDb2xzKCk+MHx8VSYmKGMuY291bnRSb3dIZWFkZXJzKCk+MHx8Yy5jb3VudENvbEhlYWRlcnMoKT4wKSl9LG9uQWN0aXZhdGU6VT0+e2lmKCJ0YWJfZnJvbV9hYm92ZSI9PT1VKXt2YXIgdGU7Y29uc3QgdmU9bnVsbCE9PSh0ZT1h''@;'; put 'put ''KGgpKSYmdm9pZCAwIT09dGU/dGU6dnRlKGMpO3ZlJiYhMSE9PWMucnVuSG9va3MoIm1vZGlmeUZvY3VzT25UYWJOYXZpZ2F0aW9uIiwiZnJvbV9hYm92ZSIsdmUpJiZjLnNlbGVjdENlbGwodmUucm93LHZlLmNvbCl9ZWxzZSBpZigidGFiX2Zyb21fYmVsb3ciPT09VSl7dmFyIG9lO2NvbnN0''@;'; put 'put ''IHZlPW51bGwhPT0ob2U9YShoKSkmJnZvaWQgMCE9PW9lP29lOnl0ZShjKTt2ZSYmITEhPT1jLnJ1bkhvb2tzKCJtb2RpZnlGb2N1c09uVGFiTmF2aWdhdGlvbiIsImZyb21fYmVsb3ciLHZlKSYmYy5zZWxlY3RDZWxsKHZlLnJvdyx2ZS5jb2wpfX19KX1jb25zdCBVbWU9bmV3IE1hcChbWyIg''@;'; put 'put ''Iiwic3BhY2UiXSxbInNwYWNlYmFyIiwic3BhY2UiXSxbInNjcm9sbCIsInNjcm9sbGxvY2siXSxbImRlbCIsImRlbGV0ZSJdLFsiZXNjIiwiZXNjYXBlIl0sWyJtZWRpYW5leHR0cmFjayIsIm1lZGlhdHJhY2tuZXh0Il0sWyJtZWRpYXByZXZpb3VzdHJhY2siLCJtZWRpYXRyYWNrcHJldmlv''@;'; put 'put ''dXMiXSxbInZvbHVtZXVwIiwiYXVkaW92b2x1bWV1cCJdLFsidm9sdW1lZG93biIsImF1ZGlvdm9sdW1lZG93biJdLFsidm9sdW1lbXV0ZSIsImF1ZGlvdm9sdW1lbXV0ZSJdLFsibXVsdGlwbHkiLCIqIl0sWyJhZGQiLCIrIl0sWyJkaXZpZGUiLCIvIl0sWyJzdWJ0cmFjdCIsIi0iXSxbImxl''@;'; put 'put ''ZnQiLCJhcnJvd2xlZnQiXSxbInJpZ2h0IiwiYXJyb3dyaWdodCJdLFsidXAiLCJhcnJvd3VwIl0sWyJkb3duIiwiYXJyb3dkb3duIl1dKSxsVj1jPT5jLm1hcChsPT57Y29uc3QgYT1sLnRvTG93ZXJDYXNlKCk7cmV0dXJuIFVtZS5oYXMoYSk/VW1lLmdldChhKTphfSkuc29ydCgpLmpvaW4o''@;'; put 'put ''IisiKSxabWU9bmV3IE1hcChbWzk2LCJudW1wYWQwIl0sWzk3LCJudW1wYWQxIl0sWzk4LCJudW1wYWQyIl0sWzk5LCJudW1wYWQzIl0sWzEwMCwibnVtcGFkNCJdLFsxMDEsIm51bXBhZDUiXSxbMTAyLCJudW1wYWQ2Il0sWzEwMywibnVtcGFkNyJdLFsxMDQsIm51bXBhZDgiXSxbMTA1LCJu''@;'; put 'put ''dW1wYWQ5Il0sWzEwNiwibXVsdGlwbHkiXSxbMTA3LCJhZGQiXSxbMTA4LCJkZWNpbWFsIl0sWzEwOSwic3VidHJhY3QiXSxbMTEwLCJkZWNpbWFsIl0sWzExMSwiZGl2aWRlIl0sWzExMiwiZjEiXSxbMTEzLCJmMiJdLFsxMTQsImYzIl0sWzExNSwiZjQiXSxbMTE2LCJmNSJdLFsxMTcsImY2''@;'; put 'put ''Il0sWzExOCwiZjciXSxbMTE5LCJmOCJdLFsxMjAsImY5Il0sWzEyMSwiZjEwIl0sWzEyMiwiZjExIl0sWzEyMywiZjEyIl0sWzE4Niwic2VtaWNvbG9uIl0sWzE4NywiZXF1YWwiXSxbMTg4LCJjb21tYSJdLFsxODksIm1pbnVzIl0sWzE5MCwicGVyaW9kIl0sWzE5MSwic2xhc2giXSxbMTky''@;'; put 'put ''LCJiYWNrcXVvdGUiXSxbMjE5LCJicmFja2V0bGVmdCJdLFsyMjAsImJhY2tzbGFzaCJdLFsyMjEsImJyYWNrZXRyaWdodCJdLFsyMjIsInF1b3RlIl1dKSxfdGU9Yz0+e2xldHt3aGljaDpsLGtleTphfT1jO2lmKFptZS5oYXMobCkpcmV0dXJuIFptZS5nZXQobCk7Y29uc3QgZD1TdHJpbmcu''@;'; put 'put ''ZnJvbUNoYXJDb2RlKGwpLnRvTG93ZXJDYXNlKCk7cmV0dXJuL15bYS16MC05XSQvLnRlc3QoZCk/ZDphLnRvTG93ZXJDYXNlKCl9LFdtZT1TeW1ib2woInNob3J0Y3V0LWNvbnRleHQiKTtmdW5jdGlvbiB3dGUoYyl7cmV0dXJuIG1vKGMpJiZjLl9fa2luZE9mPT09V21lfWNvbnN0IEF1dD1b''@;'; put 'put ''Im1ldGEiLCJhbHQiLCJzaGlmdCIsImNvbnRyb2wiXSx3az1mdW5jdGlvbiBUdXQoKXtjb25zdCBjPW5ldyBTZXQ7cmV0dXJue3ByZXNzKGwpe2MuYWRkKGwpfSxyZWxlYXNlKGwpe2MuZGVsZXRlKGwpfSxyZWxlYXNlQWxsKCl7Yy5jbGVhcigpfSxpc1ByZXNzZWQ6bD0+Yy5oYXMobCl9fSgp''@;'; put 'put ''LENrPVtdO2xldCBjVj0wO2NvbnN0IEl1dD17bmFtZToiZWRpdG9yQ2xvc2VBbmRTYXZlIixjYWxsYmFjayhjKXtjLl9nZXRFZGl0b3JNYW5hZ2VyKCkuY2xvc2VFZGl0b3JBbmRTYXZlQ2hhbmdlcygpfX0sWW1lPXtfaG9va3NTdG9yYWdlOk9iamVjdC5jcmVhdGUobnVsbCksYWRkSG9vayhj''@;'; put 'put ''LGwpe3JldHVybiB0aGlzLl9ob29rc1N0b3JhZ2VbY118fCh0aGlzLl9ob29rc1N0b3JhZ2VbY109W10pLHRoaXMuaG90LmFkZEhvb2soYyxsKSx0aGlzLl9ob29rc1N0b3JhZ2VbY10ucHVzaChsKSx0aGlzfSxyZW1vdmVIb29rc0J5S2V5KGMpe0tuKHRoaXMuX2hvb2tzU3RvcmFnZVtjXXx8''@;'; put 'put ''W10sbD0+e3RoaXMuaG90LnJlbW92ZUhvb2soYyxsKX0pfSxjbGVhckhvb2tzKCl7YXModGhpcy5faG9va3NTdG9yYWdlLChjLGwpPT50aGlzLnJlbW92ZUhvb2tzQnlLZXkobCkpLHRoaXMuX2hvb2tzU3RvcmFnZT17fX19O1M0KFltZSwiTUlYSU5fTkFNRSIsImhvb2tzUmVmUmVnaXN0ZXJl''@;'; put 'put ''ciIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCBMdXQ9WW1lO2Z1bmN0aW9uIG5wKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBPdXQoYyl7dmFyIGw9ZnVuY3Rpb24gUHV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50''@;'; put 'put ''b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0''@;'; put 'put ''cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xd''@;'; put 'put ''PWEsY31jb25zdCBTdT1PYmplY3QuZnJlZXplKHtWSVJHSU46IlNUQVRFX1ZJUkdJTiIsRURJVElORzoiU1RBVEVfRURJVElORyIsV0FJVElORzoiU1RBVEVfV0FJVElORyIsRklOSVNIRUQ6IlNUQVRFX0ZJTklTSEVEIn0pO2NsYXNzIGxDe3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1''@;'; put 'put ''cm4iYmFzZSJ9Y29uc3RydWN0b3IobCl7bnAodGhpcywiaG90Iix2b2lkIDApLG5wKHRoaXMsInN0YXRlIixTdS5WSVJHSU4pLG5wKHRoaXMsIl9vcGVuZWQiLCExKSxucCh0aGlzLCJfZnVsbEVkaXRNb2RlIiwhMSksbnAodGhpcywiX2Nsb3NlQ2FsbGJhY2siLG51bGwpLG5wKHRoaXMsIlRE''@;'; put 'put ''IixudWxsKSxucCh0aGlzLCJyb3ciLG51bGwpLG5wKHRoaXMsImNvbCIsbnVsbCksbnAodGhpcywicHJvcCIsbnVsbCksbnAodGhpcywib3JpZ2luYWxWYWx1ZSIsbnVsbCksbnAodGhpcywiY2VsbFByb3BlcnRpZXMiLG51bGwpLHRoaXMuaG90PWwsdGhpcy5pbml0KCl9X2ZpcmVDYWxsYmFj''@;'; put 'put ''a3MobCl7dGhpcy5fY2xvc2VDYWxsYmFjayYmKHRoaXMuX2Nsb3NlQ2FsbGJhY2sobCksdGhpcy5fY2xvc2VDYWxsYmFjaz1udWxsKX1pbml0KCl7fWdldFZhbHVlKCl7dGhyb3cgRXJyb3IoIkVkaXRvciBnZXRWYWx1ZSgpIG1ldGhvZCB1bmltcGxlbWVudGVkIil9c2V0VmFsdWUoKXt0aHJv''@;'; put 'put ''dyBFcnJvcigiRWRpdG9yIHNldFZhbHVlKCkgbWV0aG9kIHVuaW1wbGVtZW50ZWQiKX1vcGVuKCl7dGhyb3cgRXJyb3IoIkVkaXRvciBvcGVuKCkgbWV0aG9kIHVuaW1wbGVtZW50ZWQiKX1jbG9zZSgpe3Rocm93IEVycm9yKCJFZGl0b3IgY2xvc2UoKSBtZXRob2QgdW5pbXBsZW1lbnRlZCIp''@;'; put 'put ''fXByZXBhcmUobCxhLGQsaCxmLHYpe3RoaXMuVEQ9aCx0aGlzLnJvdz1sLHRoaXMuY29sPWEsdGhpcy5wcm9wPWQsdGhpcy5vcmlnaW5hbFZhbHVlPWYsdGhpcy5jZWxsUHJvcGVydGllcz12LHRoaXMuc3RhdGU9dGhpcy5pc09wZW5lZCgpP3RoaXMuc3RhdGU6U3UuVklSR0lOfWV4dGVuZCgp''@;'; put 'put ''e3JldHVybiBjbGFzcyBleHRlbmRzIHRoaXMuY29uc3RydWN0b3J7fX1zYXZlVmFsdWUobCxhKXtsZXQgZCxoLGYsdjtpZihhKXtjb25zdCBEPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSxVPUQuZ2V0VG9wU3RhcnRDb3JuZXIoKSx0ZT1ELmdldEJvdHRvbUVuZENvcm5lcigp''@;'; put 'put ''O2Q9VS5yb3csaD1VLmNvbCxmPXRlLnJvdyx2PXRlLmNvbH1lbHNlW2QsaCxmLHZdPVt0aGlzLnJvdyx0aGlzLmNvbCxudWxsLG51bGxdO2NvbnN0IE09dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUdldENlbGxDb29yZHMiLGQsaCwhMSwibWV0YSIpO0FycmF5LmlzQXJyYXkoTSkmJihbZCxo''@;'; put 'put ''XT1NKSx0aGlzLmhvdC5wb3B1bGF0ZUZyb21BcnJheShkLGgsbCxmLHYsImVkaXQiKX1iZWdpbkVkaXRpbmcobCxhKXtpZih0aGlzLnN0YXRlIT09U3UuVklSR0lOKXJldHVybjtjb25zdCBkPXRoaXMuaG90LGg9ZC5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4''@;'; put 'put ''KHRoaXMucm93KSxmPWQuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh0aGlzLmNvbCksdj0oKT0+e2lmKHRoaXMuc3RhdGU9U3UuRURJVElORyx0aGlzLmlzSW5GdWxsRWRpdE1vZGUoKSl7Y29uc3QgRD10aGlzLmNlbGxQcm9wZXJ0aWVzLnZhbHVlR2V0''@;'; put 'put ''dGVyP3RoaXMuY2VsbFByb3BlcnRpZXMudmFsdWVHZXR0ZXIodGhpcy5vcmlnaW5hbFZhbHVlKTp0aGlzLm9yaWdpbmFsVmFsdWUsVT0ic3RyaW5nIj09dHlwZW9mIGw/bDpyYyhEKTt0aGlzLnNldFZhbHVlKFUpfXRoaXMub3BlbihhKSx0aGlzLl9vcGVuZWQ9ITAsdGhpcy5mb2N1cygpLGQu''@;'; put 'put ''dmlldy5yZW5kZXIoKSxkLnJ1bkhvb2tzKCJhZnRlckJlZ2luRWRpdGluZyIsdGhpcy5yb3csdGhpcy5jb2wpfTt0aGlzLmhvdC5hZGRIb29rT25jZSgiYWZ0ZXJTY3JvbGwiLHYpLGQudmlldy5zY3JvbGxWaWV3cG9ydChkLl9jcmVhdGVDZWxsQ29vcmRzKGgsZikpfHwodGhpcy5ob3QucmVt''@;'; put 'put ''b3ZlSG9vaygiYWZ0ZXJTY3JvbGwiLHYpLHYoKSksdGhpcy5hZGRIb29rKCJiZWZvcmVEaWFsb2dTaG93IiwoKT0+dGhpcy5jYW5jZWxDaGFuZ2VzKCkpfWZpbmlzaEVkaXRpbmcobCxhLGQpe2xldCBoO2lmKGQpe2NvbnN0IGY9dGhpcy5fY2xvc2VDYWxsYmFjazt0aGlzLl9jbG9zZUNhbGxi''@;'; put 'put ''YWNrPXY9PntmJiZmKHYpLGQodiksdGhpcy5ob3Qudmlldy5yZW5kZXIoKX19aWYoIXRoaXMuaXNXYWl0aW5nKCkpe2lmKHRoaXMuc3RhdGU9PT1TdS5WSVJHSU4pcmV0dXJuIHZvaWQgdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3RoaXMuX2ZpcmVDYWxsYmFja3MoITApfSk7aWYo''@;'; put 'put ''dGhpcy5zdGF0ZT09PVN1LkVESVRJTkcpe2lmKGwpcmV0dXJuIHRoaXMuY2FuY2VsQ2hhbmdlcygpLHZvaWQgdGhpcy5ob3Qudmlldy5yZW5kZXIoKTtjb25zdCBmPXRoaXMuZ2V0VmFsdWUoKTtoPXRoaXMuY2VsbFByb3BlcnRpZXMudHJpbVdoaXRlc3BhY2U/W1sic3RyaW5nIj09dHlwZW9m''@;'; put 'put ''IGY/U3RyaW5nLnByb3RvdHlwZS50cmltLmNhbGwoZnx8IiIpOmZdXTpbW2ZdXSx0aGlzLnN0YXRlPVN1LldBSVRJTkcsdGhpcy5zYXZlVmFsdWUoaCxhKSx0aGlzLmhvdC5nZXRDZWxsVmFsaWRhdG9yKHRoaXMuY2VsbFByb3BlcnRpZXMpP3RoaXMuaG90LmFkZEhvb2tPbmNlKCJwb3N0QWZ0''@;'; put 'put ''ZXJWYWxpZGF0ZSIsdj0+e3RoaXMuc3RhdGU9U3UuRklOSVNIRUQsdGhpcy5kaXNjYXJkRWRpdG9yKHYpfSk6KHRoaXMuc3RhdGU9U3UuRklOSVNIRUQsdGhpcy5kaXNjYXJkRWRpdG9yKCEwKSl9fX1jYW5jZWxDaGFuZ2VzKCl7dGhpcy5zdGF0ZT1TdS5GSU5JU0hFRCx0aGlzLmRpc2NhcmRF''@;'; put 'put ''ZGl0b3IoKX1kaXNjYXJkRWRpdG9yKGwpe3RoaXMuc3RhdGU9PT1TdS5GSU5JU0hFRCYmKCExPT09bCYmITAhPT10aGlzLmNlbGxQcm9wZXJ0aWVzLmFsbG93SW52YWxpZD8odGhpcy5ob3Quc2VsZWN0Q2VsbCh0aGlzLnJvdyx0aGlzLmNvbCksdGhpcy5mb2N1cygpLHRoaXMuc3RhdGU9U3Uu''@;'; put 'put ''RURJVElORyx0aGlzLl9maXJlQ2FsbGJhY2tzKCExKSk6KHRoaXMuY2xvc2UoKSx0aGlzLl9vcGVuZWQ9ITEsdGhpcy5fZnVsbEVkaXRNb2RlPSExLHRoaXMuc3RhdGU9U3UuVklSR0lOLHRoaXMuX2ZpcmVDYWxsYmFja3MoITApLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFj''@;'; put 'put ''dGl2ZUNvbnRleHROYW1lKCJncmlkIikpKX1lbmFibGVGdWxsRWRpdE1vZGUoKXt0aGlzLl9mdWxsRWRpdE1vZGU9ITB9aXNJbkZ1bGxFZGl0TW9kZSgpe3JldHVybiB0aGlzLl9mdWxsRWRpdE1vZGV9aXNPcGVuZWQoKXtyZXR1cm4gdGhpcy5fb3BlbmVkfWlzV2FpdGluZygpe3JldHVybiB0''@;'; put 'put ''aGlzLnN0YXRlPT09U3UuV0FJVElOR31nZXRFZGl0ZWRDZWxsUmVjdCgpe3ZhciBsO2NvbnN0IGE9dGhpcy5nZXRFZGl0ZWRDZWxsKCk7aWYoIWEpcmV0dXJuO2NvbnN0e3d0T3ZlcmxheXM6ZCx3dFZpZXdwb3J0Omh9PXRoaXMuaG90LnZpZXcuX3d0LGY9dGhpcy5ob3Qucm9vdFdpbmRvdyx2''@;'; put 'put ''PWQxKGEpLE09X3UoYSksRD1kMSh0aGlzLmhvdC5yb290RWxlbWVudCksVT1fdSh0aGlzLmhvdC5yb290RWxlbWVudCksdGU9ZC50b3BPdmVybGF5LmhvbGRlcixvZT1kLmlubGluZVN0YXJ0T3ZlcmxheS5ob2xkZXIsdmU9dGUhPT1mP3RlLnNjcm9sbFRvcDowLHdlPW9lIT09Zj9vZS5zY3Jv''@;'; put 'put ''bGxMZWZ0OjAsRmU9Zi5pbm5lcldpZHRoLUQubGVmdC1VLHt3dFRhYmxlOldlfT1udWxsIT09KGw9ZC5nZXRQYXJlbnRPdmVybGF5KGEpKSYmdm9pZCAwIT09bD9sOnRoaXMuaG90LnZpZXcuX3d0LG50PVdlLm5hbWUsZHQ9WyJtYXN0ZXIiLCJpbmxpbmVfc3RhcnQiXS5pbmNsdWRlcyhudCk/''@;'; put 'put ''dmU6MCxtdD1bIm1hc3RlciIsInRvcCIsImJvdHRvbSJdLmluY2x1ZGVzKG50KT93ZTowO2xldCB6dD12LnRvcC1ELnRvcC0odi50b3A9PT1ELnRvcD8wOjEpLWR0LHluPTA7eW49dGhpcy5ob3QuaXNSdGwoKT9mLmlubmVyV2lkdGgtdi5sZWZ0LU0tRmUtMSttdDp2LmxlZnQtRC5sZWZ0LTEt''@;'; put 'put ''bXQsWyJ0b3AiLCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKG50KSYmKHp0Kz1kLnRvcE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpKSxbImlubGluZV9zdGFydCIsInRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMobnQpJiYoeW4rPU1hdGguYWJzKGQuaW5s''@;'; put 'put ''aW5lU3RhcnRPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKSkpO2NvbnN0IGduPXRoaXMuaG90Lmhhc0NvbEhlYWRlcnMoKSx3bj10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHRoaXMucm93KSxSbj10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBl''@;'; put 'put ''ci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHRoaXMuY29sKSxMcj10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpLXRoaXMuaG90LnZpZXcuX3d0LmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpOyhnbiYmd248PTB8fHduPT09THIp''@;'; put 'put ''JiYoenQrPTEpLFJuPD0wJiYoeW4rPTEpO2NvbnN0IGRyPWgucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbixNcj1oLmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24sdmk9TWF0aC5hYnMoZC5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24o''@;'; put 'put ''KSksTm49ZC50b3BPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCksQnI9d3UodGhpcy5ob3Qucm9vdERvY3VtZW50KTtsZXQgZXI9YS5vZmZzZXRUb3A7aWYoWyJpbmxpbmVfc3RhcnQiLCJtYXN0ZXIiXS5pbmNsdWRlcyhudCkmJihlcis9ZHItTm4pLFsiYm90dG9tIiwiYm90dG9tX2lubGlu''@;'; put 'put ''ZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRlcyhudCkpe2NvbnN0e3d0Vmlld3BvcnQ6TG4sd3RUYWJsZTppcn09ZC5ib3R0b21PdmVybGF5LmNsb25lO2VyKz1Mbi5nZXRXb3Jrc3BhY2VIZWlnaHQoKS1pci5nZXRIZWlnaHQoKS1Ccn1sZXQgVHI9YS5vZmZzZXRMZWZ0O3RoaXMuaG90LmlzUnRs''@;'; put 'put ''KCk/KFRyPVRyPj0wP1dlLmdldFdpZHRoKCktYS5vZmZzZXRMZWZ0Ok1hdGguYWJzKFRyKSxUcis9TXItdmktTSk6WyJ0b3AiLCJtYXN0ZXIiLCJib3R0b20iXS5pbmNsdWRlcyhudCkmJihUcis9TXItdmkpO2NvbnN0ICRyPWYuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLlREKSxiaT10aGlzLmhv''@;'; put 'put ''dC5pc1J0bCgpPyJib3JkZXJSaWdodFdpZHRoIjoiYm9yZGVyTGVmdFdpZHRoIixOaT1wYXJzZUludCgkcltiaV0sMTApPjA/MDoxLHZhPXBhcnNlSW50KCRyLmJvcmRlclRvcFdpZHRoLDEwKT4wPzA6MSx4YT1fdShhKStOaSxwYT1GdShhKSt2YSxacj1pSih0ZSk/QnI6MCx5dD1hSihvZSk/''@;'; put 'put ''QnI6MCxOdD10aGlzLmhvdC52aWV3Lm1heGltdW1WaXNpYmxlRWxlbWVudFdpZHRoKFRyKS1acitOaTtyZXR1cm57dG9wOnp0LHN0YXJ0OnluLGhlaWdodDpwYSxtYXhIZWlnaHQ6TWF0aC5tYXgodGhpcy5ob3Qudmlldy5tYXhpbXVtVmlzaWJsZUVsZW1lbnRIZWlnaHQoZXIpLXl0K3ZhLHRo''@;'; put 'put ''aXMuaG90LnN0eWxlc0hhbmRsZXIuZ2V0RGVmYXVsdFJvd0hlaWdodCgpKSx3aWR0aDp4YSxtYXhXaWR0aDpOdH19Z2V0RWRpdGVkQ2VsbHNMYXllckNsYXNzKCl7c3dpdGNoKHRoaXMuY2hlY2tFZGl0b3JTZWN0aW9uKCkpe2Nhc2UiaW5saW5lLXN0YXJ0IjpyZXR1cm4iaHRfY2xvbmVfbGVm''@;'; put 'put ''dCBodF9jbG9uZV9pbmxpbmVfc3RhcnQiO2Nhc2UiYm90dG9tIjpyZXR1cm4iaHRfY2xvbmVfYm90dG9tIjtjYXNlImJvdHRvbS1pbmxpbmUtc3RhcnQtY29ybmVyIjpyZXR1cm4iaHRfY2xvbmVfYm90dG9tX2xlZnRfY29ybmVyIGh0X2Nsb25lX2JvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVy''@;'; put 'put ''IjtjYXNlInRvcCI6cmV0dXJuImh0X2Nsb25lX3RvcCI7Y2FzZSJ0b3AtaW5saW5lLXN0YXJ0LWNvcm5lciI6cmV0dXJuImh0X2Nsb25lX3RvcF9sZWZ0X2Nvcm5lciBodF9jbG9uZV90b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciI7ZGVmYXVsdDpyZXR1cm4iaHRfY2xvbmVfbWFzdGVyIn19Z2V0''@;'; put 'put ''RWRpdGVkQ2VsbCgpe3JldHVybiB0aGlzLmhvdC5nZXRDZWxsKHRoaXMucm93LHRoaXMuY29sLCEwKX1jaGVja0VkaXRvclNlY3Rpb24oKXtjb25zdCBsPXRoaXMuaG90LmNvdW50Um93cygpO2xldCBhPSIiO3JldHVybiB0aGlzLnJvdzx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkUm93''@;'; put 'put ''c1RvcD9hPXRoaXMuY29sPHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQ/InRvcC1pbmxpbmUtc3RhcnQtY29ybmVyIjoidG9wIjp0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkUm93c0JvdHRvbSYmdGhpcy5yb3c+PWwtdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5m''@;'; put 'put ''aXhlZFJvd3NCb3R0b20/YT10aGlzLmNvbDx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0PyJib3R0b20taW5saW5lLXN0YXJ0LWNvcm5lciI6ImJvdHRvbSI6dGhpcy5jb2w8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCYmKGE9ImlubGlu''@;'; put 'put ''ZS1zdGFydCIpLGF9fXBsKGxDLEx1dCk7Y29uc3QgSHV0PXtuYW1lOiJlZGl0b3JDbG9zZUFuZFNhdmVCeUFycm93S2V5cyIsY2FsbGJhY2soYyxsLGEpe2NvbnN0IGQ9Yy5fZ2V0RWRpdG9yTWFuYWdlcigpLGg9ZC5nZXRBY3RpdmVFZGl0b3IoKTtoLmlzSW5GdWxsRWRpdE1vZGUoKSYmaC5z''@;'; put 'put ''dGF0ZT09PVN1LkVESVRJTkd8fChkLmNsb3NlRWRpdG9yQW5kU2F2ZUNoYW5nZXMoKSxjLmdldFNlbGVjdGVkKCkmJihhLmluY2x1ZGVzKCJhcnJvd2Rvd24iKT9jLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgxLDApOmEuaW5jbHVkZXMoImFycm93dXAiKT9jLnNlbGVjdGlvbi50cmFuc2Zv''@;'; put 'put ''cm1TdGFydCgtMSwwKTphLmluY2x1ZGVzKCJhcnJvd2xlZnQiKT9jLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgwLC0xKmMuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpOmEuaW5jbHVkZXMoImFycm93cmlnaHQiKSYmYy5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoMCxjLmdldERpcmVjdGlvbkZh''@;'; put 'put ''Y3RvcigpKSksbC5wcmV2ZW50RGVmYXVsdCgpKX19LE51dD17bmFtZToiZWRpdG9yQ2xvc2VBbmRTYXZlQnlFbnRlciIsY2FsbGJhY2soYyxsKXtjb25zdCBhPWMuX2dldEVkaXRvck1hbmFnZXIoKTthLmNsb3NlRWRpdG9yQW5kU2F2ZUNoYW5nZXMobC5jdHJsS2V5fHxsLm1ldGFLZXkpLGEu''@;'; put 'put ''bW92ZVNlbGVjdGlvbkFmdGVyRW50ZXIobCl9fSxWdXQ9e25hbWU6ImVkaXRvckNsb3NlV2l0aG91dFNhdmluZyIsY2FsbGJhY2soYyl7Y29uc3QgbD1jLl9nZXRFZGl0b3JNYW5hZ2VyKCk7bC5jbG9zZUVkaXRvckFuZFJlc3RvcmVPcmlnaW5hbFZhbHVlKGMuZ2V0U2hvcnRjdXRNYW5hZ2Vy''@;'; put 'put ''KCkuaXNDdHJsUHJlc3NlZCgpKSxsLmFjdGl2ZUVkaXRvci5mb2N1cygpfX0sQnV0PXtuYW1lOiJlZGl0b3JGYXN0T3BlbiIsY2FsbGJhY2soYyxsKXtjb25zdHtoaWdobGlnaHQ6YX09Yy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7YS5pc0hlYWRlcigpfHxjLl9nZXRFZGl0b3JNYW5hZ2Vy''@;'; put 'put ''KCkub3BlbkVkaXRvcihudWxsLGwsITApfX0sanV0PXtuYW1lOiJlZGl0b3JPcGVuIixjYWxsYmFjayhjLGwsYSl7Y29uc3R7c2VsZWN0aW9uOmR9PWMsaD1jLl9nZXRFZGl0b3JNYW5hZ2VyKCksZj1jLmdldFNlbGVjdGVkUmFuZ2UoKSx2PWMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLHto''@;'; put 'put ''aWdobGlnaHQ6TX09djtpZigoZi5zb21lKEQ9PmQuaXNNdWx0aXBsZShEKSl8fGYubGVuZ3RoPjEpJiYhdi5pc0hlYWRlcigpJiZjLmNvdW50UmVuZGVyZWRDb2xzKCk+MCYmYy5jb3VudFJlbmRlcmVkUm93cygpPjApe2NvbnN0IEQ9Yy5nZXRTZXR0aW5ncygpLFU9ImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIEQuZW50ZXJNb3Zlcz9ELmVudGVyTW92ZXMobCk6RC5lbnRlck1vdmVzO2EuaW5jbHVkZXMoInNoaWZ0Iik/ZC50cmFuc2Zvcm1Gb2N1cygtVS5yb3csLVUuY29sKTpkLnRyYW5zZm9ybUZvY3VzKFUucm93LFUuY29sKX1lbHNlIE0uaXNIZWFkZXIoKXx8KGMuZ2V0U2V0dGluZ3MoKS5l''@;'; put 'put ''bnRlckJlZ2luc0VkaXRpbmc/aC5jZWxsUHJvcGVydGllcy5yZWFkT25seT9oLm1vdmVTZWxlY3Rpb25BZnRlckVudGVyKGwpOmgub3BlbkVkaXRvcihudWxsLGwsITApOmgubW92ZVNlbGVjdGlvbkFmdGVyRW50ZXIobCksRTIobCkpfX0sVXV0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlv''@;'; put 'put ''bkRvd24iLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsfT1jLHtoaWdobGlnaHQ6YX09Yy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7IWwuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkmJiFsLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiYoYS5pc0NlbGwoKXx8YS5pc0hlYWRlcigpJiZs''@;'; put 'put ''LmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKSYmKGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnRyYW5zZm9ybUVuZCgxLDApLGwubWFya0VuZFNvdXJjZSgpKX19LFp1dD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Eb3duQnlWaWV3cG9ydEhlaWdodCIsY2FsbGJhY2soYyl7Y29uc3R7''@;'; put 'put ''c2VsZWN0aW9uOmwscm93SW5kZXhNYXBwZXI6YX09Yyx7dG86ZH09Yy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksaD1NYXRoLm1pbihkLnJvdytjLmNvdW50VmlzaWJsZVJvd3MoKSxjLmNvdW50Um93cygpLTEpLGY9YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoaCwtMSk7aWYobnVsbCE9''@;'; put 'put ''PWYpe2NvbnN0IHY9Yy5fY3JlYXRlQ2VsbENvb3JkcyhmLGQuY29sKSxNPWQucm93LWMuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKSxEPU1hdGgubWluKHYucm93LU0sYy5jb3VudFJvd3MoKS0xKTtsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZUVuZCh2LGMuZ2V0QWN0aXZl''@;'; put 'put ''U2VsZWN0aW9uTGF5ZXJJbmRleCgpKSxsLm1hcmtFbmRTb3VyY2UoKSxjLnNjcm9sbFZpZXdwb3J0VG8oe3JvdzpELHZlcnRpY2FsU25hcDoidG9wIixob3Jpem9udGFsU25hcDoic3RhcnQifSl9fX0sV3V0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvbkxlZnQiLGNhbGxiYWNrKGMpe2Nv''@;'; put 'put ''bnN0e3NlbGVjdGlvbjpsfT1jLHtoaWdobGlnaHQ6YX09Yy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7IWwuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkmJiFsLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiYoYS5pc0NlbGwoKXx8YS5pc0hlYWRlcigpJiZsLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRl''@;'; put 'put ''cigpKSYmKGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnRyYW5zZm9ybUVuZCgwLC0xKmMuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpLGwubWFya0VuZFNvdXJjZSgpKX19LFl1dD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25SaWdodCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9''@;'; put 'put ''PWMse2hpZ2hsaWdodDphfT1jLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTshbC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmIWwuaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJihhLmlzQ2VsbCgpfHxhLmlzSGVhZGVyKCkmJmwuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpJiYobC5tYXJrU291''@;'; put 'put ''cmNlKCJrZXlib2FyZCIpLGwudHJhbnNmb3JtRW5kKDAsYy5nZXREaXJlY3Rpb25GYWN0b3IoKSksbC5tYXJrRW5kU291cmNlKCkpfX0sR3V0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblRvQ29sdW1ucyIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWMse2hpZ2hsaWdodDph''@;'; put 'put ''LGZyb206ZCx0bzpofT1jLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKT9sLnNlbGVjdEFsbCghMCwhMCk6Yy5zZWxlY3RDb2x1bW5zKGQuY29sLGguY29sLGEpLGwubWFya0VuZFNvdXJjZSgpfX0sJHV0''@;'; put 'put ''PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdEJvdHRvbSIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwscm93SW5kZXhNYXBwZXI6YX09Yyx7aGlnaGxpZ2h0OmQsZnJvbTpoLHRvOmZ9PWMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLHY9ZC5pc0hlYWRlcigpJiZsLmlz''@;'; put 'put ''U2VsZWN0ZWRCeVJvd0hlYWRlcigpO2lmKGQuaXNDZWxsKCl8fHYpe2NvbnN0IE09YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYy5jb3VudFJvd3MoKS0xLC0xKSxEPWguY2xvbmUoKTtELnJvdz1kLnJvdyxsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KEQsdm9p''@;'; put 'put ''ZCAwLCExLGQuY2xvbmUoKSksdiYmbC5zZWxlY3RlZEJ5Um93SGVhZGVyLmFkZChsLmdldExheWVyTGV2ZWwoKSksbC5zZXRSYW5nZUVuZChjLl9jcmVhdGVDZWxsQ29vcmRzKE0sZi5jb2wpKSxsLm1hcmtFbmRTb3VyY2UoKX19fSxLdXQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9N''@;'; put 'put ''b3N0SW5saW5lRW5kIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxjb2x1bW5JbmRleE1hcHBlcjphfT1jLHtoaWdobGlnaHQ6ZCxmcm9tOmgsdG86Zn09Yy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYoIWwuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkmJiFsLmlzU2VsZWN0ZWRC''@;'; put 'put ''eUNvcm5lcigpJiZkLmlzQ2VsbCgpKXtjb25zdCB2PWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGMuY291bnRDb2xzKCktMSwtMSksTT1oLmNsb25lKCk7TS5jb2w9ZC5jb2wsbC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChNLHZvaWQgMCwhMSxkLmNsb25lKCkp''@;'; put 'put ''LGwuc2V0UmFuZ2VFbmQoYy5fY3JlYXRlQ2VsbENvb3JkcyhmLnJvdyx2KSksbC5tYXJrRW5kU291cmNlKCl9fX0sWHV0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdElubGluZVN0YXJ0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxjb2x1bW5JbmRleE1hcHBlcjph''@;'; put 'put ''fT1jLHtoaWdobGlnaHQ6ZCxmcm9tOmgsdG86Zn09Yy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYoIWwuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkmJiFsLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiZkLmlzQ2VsbCgpKXtjb25zdCB2PXBhcnNlSW50KGMuZ2V0U2V0dGluZ3MoKS5maXhlZENv''@;'; put 'put ''bHVtbnNTdGFydCwxMCksTT1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh2LDEpLEQ9aC5jbG9uZSgpO0QuY29sPWQuY29sLGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoRCx2b2lkIDAsITEsZC5jbG9uZSgpKSxsLnNldFJhbmdlRW5kKGMuX2NyZWF0ZUNlbGxD''@;'; put 'put ''b29yZHMoZi5yb3csTSkpLGwubWFya0VuZFNvdXJjZSgpfX19LHF1dD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RMZWZ0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxjb2x1bW5JbmRleE1hcHBlcjphfT1jLHtoaWdobGlnaHQ6ZCxmcm9tOmgsdG86Zn09Yy5nZXRT''@;'; put 'put ''ZWxlY3RlZFJhbmdlQWN0aXZlKCksdj1kLmlzSGVhZGVyKCkmJmwuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCk7aWYoZC5pc0NlbGwoKXx8dil7Y29uc3QgTT1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCguLi5jLmlzUnRsKCk/W2MuY291bnRDb2xzKCktMSwtMV06WzAsMV0pLEQ9aC5j''@;'; put 'put ''bG9uZSgpO0QuY29sPWQuY29sLGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoRCx2b2lkIDAsITEsZC5jbG9uZSgpKSx2JiZsLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuYWRkKGwuZ2V0TGF5ZXJMZXZlbCgpKSxsLnNldFJhbmdlRW5kKGMuX2NyZWF0ZUNlbGxDb29y''@;'; put 'put ''ZHMoZi5yb3csTSkpLGwubWFya0VuZFNvdXJjZSgpfX19LEp1dD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RSaWdodCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwsY29sdW1uSW5kZXhNYXBwZXI6YX09Yyx7aGlnaGxpZ2h0OmQsZnJvbTpoLHRvOmZ9PWMuZ2V0U2Vs''@;'; put 'put ''ZWN0ZWRSYW5nZUFjdGl2ZSgpLHY9ZC5pc0hlYWRlcigpJiZsLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpO2lmKGQuaXNDZWxsKCl8fHYpe2NvbnN0IE09YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoLi4uYy5pc1J0bCgpP1swLDFdOltjLmNvdW50Q29scygpLTEsLTFdKSxEPWguY2xv''@;'; put 'put ''bmUoKTtELmNvbD1kLmNvbCxsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KEQsdm9pZCAwLCExLGQuY2xvbmUoKSksdiYmbC5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmFkZChsLmdldExheWVyTGV2ZWwoKSksbC5zZXRSYW5nZUVuZChjLl9jcmVhdGVDZWxsQ29vcmRz''@;'; put 'put ''KGYucm93LE0pKSxsLm1hcmtFbmRTb3VyY2UoKX19fSxRdXQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0VG9wIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxyb3dJbmRleE1hcHBlcjphfT1jLHtoaWdobGlnaHQ6ZCxmcm9tOmgsdG86Zn09Yy5nZXRTZWxlY3RlZFJh''@;'; put 'put ''bmdlQWN0aXZlKCksdj1kLmlzSGVhZGVyKCkmJmwuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCk7aWYoZC5pc0NlbGwoKXx8dil7Y29uc3QgTT1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCgwLDEpLEQ9aC5jbG9uZSgpO0Qucm93PWQucm93LGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNl''@;'; put 'put ''dFJhbmdlU3RhcnQoRCx2b2lkIDAsITEsZC5jbG9uZSgpKSx2JiZsLnNlbGVjdGVkQnlSb3dIZWFkZXIuYWRkKGwuZ2V0TGF5ZXJMZXZlbCgpKSxsLnNldFJhbmdlRW5kKGMuX2NyZWF0ZUNlbGxDb29yZHMoTSxmLmNvbCkpLGwubWFya0VuZFNvdXJjZSgpfX19LGUwdD17bmFtZToiZXh0ZW5k''@;'; put 'put ''Q2VsbHNTZWxlY3Rpb25Ub1Jvd3MiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsfT1jLHtoaWdobGlnaHQ6YSxmcm9tOmQsdG86aH09Yy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCk/bC5z''@;'; put 'put ''ZWxlY3RBbGwoITAsITApOmMuc2VsZWN0Um93cyhkLnJvdyxoLnJvdyxhKSxsLm1hcmtFbmRTb3VyY2UoKX19LHQwdD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25VcCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWMse2hpZ2hsaWdodDphfT1jLmdldFNlbGVjdGVkUmFuZ2VB''@;'; put 'put ''Y3RpdmUoKTshbC5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSYmIWwuaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJihhLmlzQ2VsbCgpfHxhLmlzSGVhZGVyKCkmJmwuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkpJiYobC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwudHJhbnNmb3JtRW5kKC0xLDAp''@;'; put 'put ''LGwubWFya0VuZFNvdXJjZSgpKX19LG4wdD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25VcEJ5Vmlld3BvcnRIZWlnaHQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLHJvd0luZGV4TWFwcGVyOmF9PWMse3RvOmR9PWMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLGg9TWF0aC5t''@;'; put 'put ''YXgoZC5yb3ctYy5jb3VudFZpc2libGVSb3dzKCksMCksZj1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChoLDEpO2lmKG51bGwhPT1mKXtjb25zdCB2PWMuX2NyZWF0ZUNlbGxDb29yZHMoZixkLmNvbCksTT1kLnJvdy1jLmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCksRD1NYXRoLm1heCh2''@;'; put 'put ''LnJvdy1NLDApO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlRW5kKHYsYy5nZXRBY3RpdmVTZWxlY3Rpb25MYXllckluZGV4KCkpLGwubWFya0VuZFNvdXJjZSgpLGMuc2Nyb2xsVmlld3BvcnRUbyh7cm93OkQsdmVydGljYWxTbmFwOiJ0b3AiLGhvcml6b250YWxTbmFwOiJz''@;'; put 'put ''dGFydCJ9KX19fSxpMHQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uRG93biIsY2FsbGJhY2soYyl7bGV0e3NlbGVjdGlvbjpsfT1jO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnRyYW5zZm9ybVN0YXJ0KDEsMCksbC5tYXJrRW5kU291cmNlKCl9fSxhMHQ9e25hbWU6Im1vdmVDZWxsU2Vs''@;'; put 'put ''ZWN0aW9uRG93bkJ5Vmlld3BvcnRIZWlnaHQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsfT1jLHtuYXZpZ2FibGVIZWFkZXJzOmF9PWMuZ2V0U2V0dGluZ3MoKSxkPWE/Yy5jb3VudENvbEhlYWRlcnMoKTowLHtyb3c6aH09Yy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkuaGlnaGxp''@;'; put 'put ''Z2h0O2xldCBmPWMuY291bnRWaXNpYmxlUm93cygpK2Q7Zj0wPT09Zj8xOmYsaD09PWMuY291bnRSb3dzKCktMT9mPTE6aCtmPmMuY291bnRSb3dzKCkmJihmPWMuY291bnRSb3dzKCktaC0xKSxsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC50cmFuc2Zvcm1TdGFydChmLDApLGwubWFya0Vu''@;'; put 'put ''ZFNvdXJjZSgpLGMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLmhpZ2hsaWdodC5yb3c8MCYmYy5zY3JvbGxWaWV3cG9ydFRvKHtyb3c6MH0pfX0sbzB0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvbklubGluZUVuZCIsY2FsbGJhY2soYyxsKXtjb25zdHtzZWxlY3Rpb246YX09YyxkPWMuZ2V0''@;'; put 'put ''U2V0dGluZ3MoKSxoPWMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGY9Yy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksdj0iZnVuY3Rpb24iPT10eXBlb2YgZC50YWJNb3Zlcz9kLnRhYk1vdmVzKGwpOmQudGFiTW92ZXM7YS5tYXJrU291cmNlKCJrZXlib2FyZCIpLChoLnNvbWUoTT0+YS5pc011bHRp''@;'; put 'put ''cGxlKE0pKXx8aC5sZW5ndGg+MSkmJiFmLmlzSGVhZGVyKCkmJmMuY291bnRSZW5kZXJlZENvbHMoKT4wJiZjLmNvdW50UmVuZGVyZWRSb3dzKCk+MD9hLnRyYW5zZm9ybUZvY3VzKC12LnJvdywtdi5jb2wpOmEudHJhbnNmb3JtU3RhcnQoLXYucm93LC12LmNvbCksYS5tYXJrRW5kU291cmNl''@;'; put 'put ''KCl9fSxzMHQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uSW5saW5lU3RhcnQiLGNhbGxiYWNrKGMsbCl7Y29uc3R7c2VsZWN0aW9uOmF9PWMsZD1jLmdldFNldHRpbmdzKCksaD1jLmdldFNlbGVjdGVkUmFuZ2UoKSxmPWMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLHY9ImZ1bmN0aW9uIj09''@;'; put 'put ''dHlwZW9mIGQudGFiTW92ZXM/ZC50YWJNb3ZlcyhsKTpkLnRhYk1vdmVzO2EubWFya1NvdXJjZSgia2V5Ym9hcmQiKSwoaC5zb21lKE09PmEuaXNNdWx0aXBsZShNKSl8fGgubGVuZ3RoPjEpJiYhZi5pc0hlYWRlcigpJiZjLmNvdW50UmVuZGVyZWRDb2xzKCk+MCYmYy5jb3VudFJlbmRlcmVk''@;'; put 'put ''Um93cygpPjA/YS50cmFuc2Zvcm1Gb2N1cyh2LnJvdyx2LmNvbCk6YS50cmFuc2Zvcm1TdGFydCh2LnJvdyx2LmNvbCksYS5tYXJrRW5kU291cmNlKCl9fSxsMHQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uTGVmdCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWM7bC5tYXJrU291''@;'; put 'put ''cmNlKCJrZXlib2FyZCIpLGwudHJhbnNmb3JtU3RhcnQoMCwtMSpjLmdldERpcmVjdGlvbkZhY3RvcigpKSxsLm1hcmtFbmRTb3VyY2UoKX19LGMwdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25SaWdodCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWM7bC5tYXJrU291cmNlKCJr''@;'; put 'put ''ZXlib2FyZCIpLGwudHJhbnNmb3JtU3RhcnQoMCxjLmdldERpcmVjdGlvbkZhY3RvcigpKSxsLm1hcmtFbmRTb3VyY2UoKX19LHUwdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RCb3R0b20iLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsfT1jLHtjb2w6YX09Yy5nZXRTZWxl''@;'; put 'put ''Y3RlZFJhbmdlQWN0aXZlKCkuaGlnaGxpZ2h0O2xldCBkPWMucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGMuY291bnRSb3dzKCktMSwtMSk7bnVsbD09PWQmJihkPS0xKSxsLnNldFJhbmdlU3RhcnQoYy5fY3JlYXRlQ2VsbENvb3JkcyhkLGEpKX19LGQwdD17bmFt''@;'; put 'put ''ZToibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RCb3R0b21JbmxpbmVFbmQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLHJvd0luZGV4TWFwcGVyOmEsY29sdW1uSW5kZXhNYXBwZXI6ZH09YyxoPXBhcnNlSW50KGMuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NCb3R0b20sMTApLGY9YS5n''@;'; put 'put ''ZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYy5jb3VudFJvd3MoKS1oLTEsLTEpLHY9ZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYy5jb3VudENvbHMoKS0xLC0xKTtsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KGMuX2NyZWF0ZUNlbGxDb29yZHMoZix2KSksbC5t''@;'; put 'put ''YXJrRW5kU291cmNlKCl9fSxoMHQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0SW5saW5lRW5kIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxjb2x1bW5JbmRleE1hcHBlcjphfT1jO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoYy5fY3JlYXRl''@;'; put 'put ''Q2VsbENvb3JkcyhjLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKS5oaWdobGlnaHQucm93LGEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGMuY291bnRDb2xzKCktMSwtMSkpKSxsLm1hcmtFbmRTb3VyY2UoKX19LGYwdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RJbmxpbmVTdGFy''@;'; put 'put ''dCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwsY29sdW1uSW5kZXhNYXBwZXI6YX09YyxkPXBhcnNlSW50KGMuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCwxMCksaD1jLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKS5oaWdobGlnaHQucm93LGY9YS5nZXROZWFyZXN0Tm90''@;'; put 'put ''SGlkZGVuSW5kZXgoZCwxKTtsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KGMuX2NyZWF0ZUNlbGxDb29yZHMoaCxmKSksbC5tYXJrRW5kU291cmNlKCl9fSxwMHQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0TGVmdCIsY2FsbGJhY2soYyl7Y29uc3R7c2Vs''@;'; put 'put ''ZWN0aW9uOmwsY29sdW1uSW5kZXhNYXBwZXI6YX09YyxkPWMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLmhpZ2hsaWdodC5yb3c7bGV0IGg9YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoLi4uYy5pc1J0bCgpP1tjLmNvdW50Q29scygpLTEsLTFdOlswLDFdKTtudWxsPT09aCYmKGg9Yy5p''@;'; put 'put ''c1J0bCgpPy0xOi1jLmNvdW50Um93SGVhZGVycygpKSxsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KGMuX2NyZWF0ZUNlbGxDb29yZHMoZCxoKSksbC5tYXJrRW5kU291cmNlKCl9fSxnMHQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0UmlnaHQiLGNhbGxi''@;'; put 'put ''YWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLGNvbHVtbkluZGV4TWFwcGVyOmF9PWMse3JvdzpkfT1jLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKS5oaWdobGlnaHQ7bGV0IGg9YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoLi4uYy5pc1J0bCgpP1swLDFdOltjLmNvdW50Q29scygpLTEsLTFd''@;'; put 'put ''KTtudWxsPT09aCYmKGg9Yy5pc1J0bCgpPy1jLmNvdW50Um93SGVhZGVycygpOi0xKSxsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KGMuX2NyZWF0ZUNlbGxDb29yZHMoZCxoKSksbC5tYXJrRW5kU291cmNlKCl9fSxtMHQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9u''@;'; put 'put ''VG9Nb3N0VG9wIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bH09Yyx7Y29sOmF9PWMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLmhpZ2hsaWdodDtsZXQgZD1jLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCgwLDEpO251bGw9PT1kJiYoZD0tYy5jb3VudENv''@;'; put 'put ''bEhlYWRlcnMoKSksbC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChjLl9jcmVhdGVDZWxsQ29vcmRzKGQsYSkpLGwubWFya0VuZFNvdXJjZSgpfX0sdjB0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdFRvcElubGluZVN0YXJ0IixjYWxsYmFjayhjKXtjb25z''@;'; put 'put ''dHtzZWxlY3Rpb246bCxyb3dJbmRleE1hcHBlcjphLGNvbHVtbkluZGV4TWFwcGVyOmR9PWMsaD1wYXJzZUludChjLmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wLDEwKSxmPXBhcnNlSW50KGMuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCwxMCksdj1hLmdldE5lYXJlc3ROb3RI''@;'; put 'put ''aWRkZW5JbmRleChoLDEpLE09ZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZiwxKTtsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KGMuX2NyZWF0ZUNlbGxDb29yZHModixNKSksbC5tYXJrRW5kU291cmNlKCl9fSx5MHQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9u''@;'; put 'put ''VXAiLGNhbGxiYWNrKGMpe2xldHtzZWxlY3Rpb246bH09YztsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC50cmFuc2Zvcm1TdGFydCgtMSwwKSxsLm1hcmtFbmRTb3VyY2UoKX19LGIwdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25VcEJ5Vmlld3BvcnRIaWdodCIsY2FsbGJhY2soYyl7Y29u''@;'; put 'put ''c3R7c2VsZWN0aW9uOmx9PWMse25hdmlnYWJsZUhlYWRlcnM6YX09Yy5nZXRTZXR0aW5ncygpLGQ9YT9jLmNvdW50Q29sSGVhZGVycygpOjAse3JvdzpofT1jLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKS5oaWdobGlnaHQ7bGV0IGY9Yy5jb3VudFZpc2libGVSb3dzKCkrZDtmPTA9PT1mPy0x''@;'; put 'put ''Oi1mLGg9PT0tZD9mPS0xOmgrZjxkJiYoZj0tKGgrZCkpLGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnRyYW5zZm9ybVN0YXJ0KGYsMCksbC5tYXJrRW5kU291cmNlKCksYy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkuaGlnaGxpZ2h0LnJvdzwwJiZjLnNjcm9sbFZpZXdwb3J0VG8oe3Jv''@;'; put 'put ''dzowfSl9fSx3MHQ9e25hbWU6ImVtcHR5U2VsZWN0ZWRDZWxscyIsY2FsbGJhY2soYyl7Yy5lbXB0eVNlbGVjdGVkQ2VsbHMoKSxjLl9nZXRFZGl0b3JNYW5hZ2VyKCkucHJlcGFyZUVkaXRvcigpfX0sQzB0PXtuYW1lOiJzY3JvbGxUb0ZvY3VzZWRDZWxsIixjYWxsYmFjayhjKXtjb25zdHto''@;'; put 'put ''aWdobGlnaHQ6bH09Yy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksYT1jLmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCktMSxkPWMuZ2V0Rmlyc3RGdWxseVZpc2libGVDb2x1bW4oKS0xLGg9Yy5nZXRMYXN0RnVsbHlWaXNpYmxlUm93KCkrMSxmPWMuZ2V0TGFzdEZ1bGx5VmlzaWJsZUNvbHVt''@;'; put 'put ''bigpKzEsdj1jLl9jcmVhdGVDZWxsQ29vcmRzKGEsZCksTT1jLl9jcmVhdGVDZWxsQ29vcmRzKGgsZik7aWYoIWMuX2NyZWF0ZUNlbGxSYW5nZSh2LHYsTSkuaW5jbHVkZXMobCkmJihsLnJvdz49MHx8bC5jb2w+PTApKXtjb25zdCBVPXt9O2lmKGwuY29sPj0wKXtjb25zdCB0ZT1NYXRoLmZs''@;'; put 'put ''b29yKGMuY291bnRWaXNpYmxlQ29scygpLzIpO1UuY29sPU1hdGgubWF4KGwuY29sLXRlLDApfWlmKGwucm93Pj0wKXtjb25zdCB0ZT1NYXRoLmZsb29yKGMuY291bnRWaXNpYmxlUm93cygpLzIpO1Uucm93PU1hdGgubWF4KGwucm93LXRlLDApfWMuc2Nyb2xsVmlld3BvcnRUbyh7Li4uVSx2''@;'; put 'put ''ZXJ0aWNhbFNuYXA6InRvcCIsaG9yaXpvbnRhbFNuYXA6InN0YXJ0In0pfX19LFMwdD17bmFtZToic2VsZWN0QWxsQ2VsbHMiLGNhbGxiYWNrKGMpe2xldHtzZWxlY3Rpb246bH09YztsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZWxlY3RBbGwoITAsITAse2Rpc2FibGVIZWFkZXJzSGln''@;'; put 'put ''aGxpZ2h0OiEwfSksbC5tYXJrRW5kU291cmNlKCl9fSxNMHQ9e25hbWU6InNlbGVjdEFsbENlbGxzQW5kSGVhZGVycyIsY2FsbGJhY2soYyl7bGV0e3NlbGVjdGlvbjpsfT1jO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNlbGVjdEFsbCghMCwhMCx7ZGlzYWJsZUhlYWRlcnNIaWdobGln''@;'; put 'put ''aHQ6ITF9KSxsLm1hcmtFbmRTb3VyY2UoKX19LHgwdD17bmFtZToicG9wdWxhdGVTZWxlY3RlZENlbGxzRGF0YSIsY2FsbGJhY2soYyl7Y29uc3QgbD1jLmdldFNlbGVjdGVkUmFuZ2UoKSx7cm93OmEsY29sOmR9PWxbbC5sZW5ndGgtMV0uaGlnaGxpZ2h0Lm5vcm1hbGl6ZSgpLGg9Yy5nZXRE''@;'; put 'put ''YXRhQXRDZWxsKGEsZCksZj1uZXcgTWFwO2ZvcihsZXQgdj0wO3Y8bC5sZW5ndGg7disrKWxbdl0uZm9yQWxsKChNLEQpPT57aWYoTT49MCYmRD49MCYmKE0hPT1hfHxEIT09ZCkpe2NvbnN0e3JlYWRPbmx5OlV9PWMuZ2V0Q2VsbE1ldGEoTSxEKTtVfHxmLnNldChgJHtNfXgke0R9YCxbTSxE''@;'; put 'put ''LGhdKX19KTtjLnNldERhdGFBdENlbGwoQXJyYXkuZnJvbShmLnZhbHVlcygpKSl9fSxFMHQ9e25hbWU6InRhYk5hdmlnYXRpb24iLGNhbGxiYWNrKGMpe2NvbnN0IGw9e3dyYXBwZWQ6ITEsZmxpcHBlZDohMX07bGV0IGE9ITEsZD0hMTtyZXR1cm4gYy5hZGRIb29rKCJhZnRlclNlbGVjdGlv''@;'; put 'put ''biIsKGgsZix2LE0sRCk9PnthJiYobC53cmFwcGVkJiZsLmZsaXBwZWR8fGQpJiYoZD0hMSxELnZhbHVlPSEwKX0pLGMuYWRkSG9vaygiYmVmb3JlUm93V3JhcCIsKGgsZix2KT0+e2wud3JhcHBlZD0hMCxsLmZsaXBwZWQ9dn0pLHtiZWZvcmUoKXtjb25zdHt0YWJOYXZpZ2F0aW9uOmh9PWMu''@;'; put 'put ''Z2V0U2V0dGluZ3MoKTthPSEwLGh8fChkPSEwKX0sYWZ0ZXIoaCl7Y29uc3R7dGFiTmF2aWdhdGlvbjpmLGF1dG9XcmFwUm93OnZ9PWMuZ2V0U2V0dGluZ3MoKTtpZihhPSExLCFmfHwhYy5zZWxlY3Rpb24uaXNTZWxlY3RlZCgpfHx2JiZsLndyYXBwZWQmJmwuZmxpcHBlZHx8IXYmJmwud3Jh''@;'; put 'put ''cHBlZClyZXR1cm4gbC53cmFwcGVkPSExLGwuZmxpcHBlZD0hMSxjLmRlc2VsZWN0Q2VsbCgpLCExO2gucHJldmVudERlZmF1bHQoKX19fX0sVDB0PVsuLi5mdW5jdGlvbiB6dXQoKXtyZXR1cm5bSXV0LEh1dCxOdXQsVnV0LEJ1dCxqdXRdfSgpLC4uLmZ1bmN0aW9uIHIwdCgpe3JldHVybltV''@;'; put 'put ''dXQsWnV0LFd1dCxZdXQsR3V0LCR1dCxLdXQsWHV0LHF1dCxKdXQsUXV0LGUwdCx0MHQsbjB0XX0oKSwuLi5mdW5jdGlvbiBfMHQoKXtyZXR1cm5baTB0LGEwdCxvMHQsczB0LGwwdCxjMHQsdTB0LGQwdCxoMHQsZjB0LHAwdCxnMHQsbTB0LHYwdCx5MHQsYjB0XX0oKSx3MHQsQzB0LFMwdCxN''@;'; put 'put ''MHQseDB0LEUwdF07ZnVuY3Rpb24gR21lKGMpe2NvbnN0IGw9e307cmV0dXJuIFQwdC5mb3JFYWNoKGE9PntsZXR7bmFtZTpkLGNhbGxiYWNrOmh9PWE7bFtkXT1mdW5jdGlvbigpe2Zvcih2YXIgZj1hcmd1bWVudHMubGVuZ3RoLHY9bmV3IEFycmF5KGYpLE09MDtNPGY7TSsrKXZbTV09YXJn''@;'; put 'put ''dW1lbnRzW01dO3JldHVybiBoKGMsLi4udil9fSksbH1mdW5jdGlvbiBBMHQoYyl7Y29uc3QgbD1jLmdldFNob3J0Y3V0TWFuYWdlcigpLmFkZENvbnRleHQoImVkaXRvciIpLGE9R21lKGMpLGQ9e2dyb3VwOk42fTtsLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siRW50ZXIiXSxbIkVudGVyIiwi''@;'; put 'put ''U2hpZnQiXV0sY2FsbGJhY2s6KGgsZik9PmEuZWRpdG9yQ2xvc2VBbmRTYXZlQnlFbnRlcihoLGYpfSx7a2V5czpbWyJFbnRlciIsIkNvbnRyb2wvTWV0YSJdLFsiRW50ZXIiLCJDb250cm9sL01ldGEiLCJTaGlmdCJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooaCxmKT0+YS5lZGl0b3JD''@;'; put 'put ''bG9zZUFuZFNhdmVCeUVudGVyKGgsZil9LHtrZXlzOltbIlRhYiJdLFsiVGFiIiwiU2hpZnQiXSxbIlBhZ2VEb3duIl0sWyJQYWdlVXAiXV0sZm9yd2FyZFRvQ29udGV4dDpjLmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKSxjYWxsYmFjazooaCxmKT0+YS5lZGl0b3JD''@;'; put 'put ''bG9zZUFuZFNhdmUoaCxmKX0se2tleXM6W1siQXJyb3dEb3duIl0sWyJBcnJvd1VwIl0sWyJBcnJvd0xlZnQiXSxbIkFycm93UmlnaHQiXV0scHJldmVudERlZmF1bHQ6ITEsY2FsbGJhY2s6KGgsZik9PmEuZWRpdG9yQ2xvc2VBbmRTYXZlQnlBcnJvd0tleXMoaCxmKX0se2tleXM6W1siRXNj''@;'; put 'put ''YXBlIl0sWyJFc2NhcGUiLCJDb250cm9sL01ldGEiXV0sY2FsbGJhY2s6KCk9PmEuZWRpdG9yQ2xvc2VXaXRob3V0U2F2aW5nKCl9XSxkKX1mdW5jdGlvbiBrMHQoYyl7Y29uc3QgbD1jLmdldFNob3J0Y3V0TWFuYWdlcigpLmFkZENvbnRleHQoImdyaWQiKSxhPUdtZShjKSxkPXtydW5Pbmx5''@;'; put 'put ''SWY6KCk9Pntjb25zdHtuYXZpZ2FibGVIZWFkZXJzOmZ9PWMuZ2V0U2V0dGluZ3MoKTtyZXR1cm4gTWEoYy5nZXRTZWxlY3RlZCgpKSYmKGZ8fCFmJiZjLmNvdW50UmVuZGVyZWRSb3dzKCk+MCYmYy5jb3VudFJlbmRlcmVkQ29scygpPjApfSxncm91cDpfa307bC5hZGRTaG9ydGN1dHMoW3tr''@;'; put 'put ''ZXlzOltbIkYyIl1dLGNhbGxiYWNrOmY9PmEuZWRpdG9yRmFzdE9wZW4oZil9LHtrZXlzOltbIkVudGVyIl0sWyJFbnRlciIsIlNoaWZ0Il1dLGNhbGxiYWNrOihmLHYpPT5hLmVkaXRvck9wZW4oZix2KX0se2tleXM6W1siQmFja3NwYWNlIl0sWyJEZWxldGUiXV0sY2FsbGJhY2s6KCk9PmEu''@;'; put 'put ''ZW1wdHlTZWxlY3RlZENlbGxzKCl9XSx7Z3JvdXA6TjYscnVuT25seUlmOigpPT5NYShjLmdldFNlbGVjdGVkKCkpfSksbC5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkNvbnRyb2wvTWV0YSIsIkEiXV0sY2FsbGJhY2s6KCk9PmEuc2VsZWN0QWxsQ2VsbHMoKSxydW5Pbmx5SWY6KCk9Pnt2YXIg''@;'; put 'put ''ZjtyZXR1cm4hKG51bGwhPT0oZj1jLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSkmJnZvaWQgMCE9PWYmJmYuaGlnaGxpZ2h0LmlzSGVhZGVyKCkpfX0se2tleXM6W1siQ29udHJvbC9NZXRhIiwiQSJdXSxjYWxsYmFjazooKT0+e30scnVuT25seUlmOigpPT57dmFyIGY7cmV0dXJuIG51bGw9''@;'; put 'put ''PT0oZj1jLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSl8fHZvaWQgMD09PWY/dm9pZCAwOmYuaGlnaGxpZ2h0LmlzSGVhZGVyKCl9LHByZXZlbnREZWZhdWx0OiEwfSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJTaGlmdCIsIlNwYWNlIl1dLGNhbGxiYWNrOigpPT5hLnNlbGVjdEFsbENlbGxz''@;'; put 'put ''QW5kSGVhZGVycygpfSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJFbnRlciJdXSxjYWxsYmFjazooKT0+YS5wb3B1bGF0ZVNlbGVjdGVkQ2VsbHNEYXRhKCkscnVuT25seUlmOigpPT57dmFyIGYsdjtyZXR1cm4hKG51bGwhPT0oZj1jLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSkmJnZvaWQg''@;'; put 'put ''MCE9PWYmJmYuaGlnaGxpZ2h0LmlzSGVhZGVyKCkpJiYobnVsbD09PSh2PWMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpKXx8dm9pZCAwPT09dj92b2lkIDA6di5nZXRDZWxsc0NvdW50KCkpPjF9fSx7a2V5czpbWyJDb250cm9sIiwiU3BhY2UiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6''@;'; put 'put ''KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub0NvbHVtbnMoKX0se2tleXM6W1siU2hpZnQiLCJTcGFjZSJdXSxzdG9wUHJvcGFnYXRpb246ITAsY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub1Jvd3MoKX0se2tleXM6W1siQXJyb3dVcCJdXSxjYWxsYmFjazooKT0+YS5t''@;'; put 'put ''b3ZlQ2VsbFNlbGVjdGlvblVwKCl9LHtrZXlzOltbIkFycm93VXAiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RUb3AoKX0se2tleXM6W1siQXJyb3dVcCIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT5hLmV4dGVu''@;'; put 'put ''ZENlbGxzU2VsZWN0aW9uVXAoKX0se2tleXM6W1siQXJyb3dVcCIsIlNoaWZ0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0VG9wKCkscnVuT25seUlmOigpPT4hKGMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRC''@;'; put 'put ''eUNvcm5lcigpfHxjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSl9LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvbkRvd24oKX0se2tleXM6W1siQXJyb3dEb3duIiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEw''@;'; put 'put ''LGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0Qm90dG9tKCl9LHtrZXlzOltbIkFycm93RG93biIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uRG93bigpfSx7a2V5czpbWyJBcnJvd0Rvd24iLCJTaGlmdCIsIkNvbnRyb2wvTWV0YSJd''@;'; put 'put ''XSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdEJvdHRvbSgpLHJ1bk9ubHlJZjooKT0+IShjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8Yy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpfSx7a2V5czpb''@;'; put 'put ''WyJBcnJvd0xlZnQiXV0sY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25MZWZ0KCl9LHtrZXlzOltbIkFycm93TGVmdCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdExlZnQoKX0se2tleXM6W1siQXJy''@;'; put 'put ''b3dMZWZ0IiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25MZWZ0KCl9LHtrZXlzOltbIkFycm93TGVmdCIsIlNoaWZ0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0TGVm''@;'; put 'put ''dCgpLHJ1bk9ubHlJZjooKT0+IShjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8Yy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkpfSx7a2V5czpbWyJBcnJvd1JpZ2h0Il1dLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uUmlnaHQoKX0se2tleXM6W1si''@;'; put 'put ''QXJyb3dSaWdodCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdFJpZ2h0KCl9LHtrZXlzOltbIkFycm93UmlnaHQiLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvblJpZ2h0KCl9''@;'; put 'put ''LHtrZXlzOltbIkFycm93UmlnaHQiLCJTaGlmdCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdFJpZ2h0KCkscnVuT25seUlmOigpPT4hKGMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHxjLnNl''@;'; put 'put ''bGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSl9LHtrZXlzOltbIkhvbWUiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RJbmxpbmVTdGFydCgpLHJ1bk9ubHlJZjooKT0+Yy52aWV3LmlzTWFpblRhYmxlTm90RnVsbHlDb3ZlcmVk''@;'; put 'put ''QnlPdmVybGF5cygpfSx7a2V5czpbWyJIb21lIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RJbmxpbmVTdGFydCgpfSx7a2V5czpbWyJIb21lIiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxs''@;'; put 'put ''U2VsZWN0aW9uVG9Nb3N0VG9wSW5saW5lU3RhcnQoKSxydW5Pbmx5SWY6KCk9PmMudmlldy5pc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3ZlcmxheXMoKX0se2tleXM6W1siRW5kIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0SW5s''@;'; put 'put ''aW5lRW5kKCkscnVuT25seUlmOigpPT5jLnZpZXcuaXNNYWluVGFibGVOb3RGdWxseUNvdmVyZWRCeU92ZXJsYXlzKCl9LHtrZXlzOltbIkVuZCIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0SW5saW5lRW5kKCl9LHtrZXlzOltbIkVuZCIsIkNv''@;'; put 'put ''bnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdEJvdHRvbUlubGluZUVuZCgpLHJ1bk9ubHlJZjooKT0+Yy52aWV3LmlzTWFpblRhYmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpfSx7a2V5czpbWyJQYWdlVXAiXV0s''@;'; put 'put ''Y2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25VcEJ5Vmlld3BvcnRIaWdodCgpfSx7a2V5czpbWyJQYWdlVXAiLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvblVwQnlWaWV3cG9ydEhlaWdodCgpfSx7a2V5czpbWyJQYWdlRG93biJdXSxjYWxsYmFj''@;'; put 'put ''azooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvbkRvd25CeVZpZXdwb3J0SGVpZ2h0KCl9LHtrZXlzOltbIlBhZ2VEb3duIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Eb3duQnlWaWV3cG9ydEhlaWdodCgpfSx7a2V5czpbWyJUYWIiXV0scHJldmVudERlZmF1''@;'; put 'put ''bHQ6ITEsY2FsbGJhY2s6Zj0+YS5tb3ZlQ2VsbFNlbGVjdGlvbklubGluZVN0YXJ0KGYpfSx7a2V5czpbWyJTaGlmdCIsIlRhYiJdXSxwcmV2ZW50RGVmYXVsdDohMSxjYWxsYmFjazpmPT5hLm1vdmVDZWxsU2VsZWN0aW9uSW5saW5lRW5kKGYpfSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJC''@;'; put 'put ''YWNrc3BhY2UiXV0sY2FsbGJhY2s6KCk9PmEuc2Nyb2xsVG9Gb2N1c2VkQ2VsbCgpfV0sZCk7Y29uc3QgaD1hLnRhYk5hdmlnYXRpb24oKTtsLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siVGFiIl0sWyJTaGlmdCIsIlRhYiJdXSxwcmV2ZW50RGVmYXVsdDohMSxzdG9wUHJvcGFnYXRpb246ITEs''@;'; put 'put ''cmVsYXRpdmVUb0dyb3VwOl9rLGdyb3VwOnNWLHBvc2l0aW9uOiJiZWZvcmUiLGNhbGxiYWNrOmY9PmguYmVmb3JlKGYpfSx7a2V5czpbWyJUYWIiXSxbIlNoaWZ0IiwiVGFiIl1dLHByZXZlbnREZWZhdWx0OiExLHN0b3BQcm9wYWdhdGlvbjohMSxyZWxhdGl2ZVRvR3JvdXA6X2ssZ3JvdXA6''@;'; put 'put ''c1YsY2FsbGJhY2s6Zj0+aC5hZnRlcihmKSxwb3NpdGlvbjoiYWZ0ZXIifV0pfWZ1bmN0aW9uICRtZShjKXtjb25zdHtjbGFzc05hbWVzOmx9PWxnZShjLC9odC10aGVtZS1bYS16QS1aMC05Xy1dKy8pO3JldHVybiBsLnBvcCgpfWZ1bmN0aW9uIE01KGMsbCxhKXtLbWUoYyxsKSxsLnNldChj''@;'; put 'put ''LGEpfWZ1bmN0aW9uIEttZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gYXUoYyxsKXtyZXR1cm4gYy5nZXQocnAoYyxsKSl9ZnVuY3Rp''@;'; put 'put ''b24gU2goYyxsLGEpe3JldHVybiBjLnNldChycChjLGwpLGEpLGF9ZnVuY3Rpb24gcnAoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBp''@;'; put 'put ''cyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBDdGU9bmV3IFdlYWtNYXAsUDQ9bmV3IFdlYWtNYXAsdVY9bmV3IFdlYWtNYXAsU3RlPW5ldyBXZWFrTWFwLE10ZT1uZXcgV2Vha01hcCxWNj1uZXcgV2Vha01hcCxTaz1uZXcgV2Vha01hcCxNaz1uZXcgV2Vha01hcCx4az1uZXcg''@;'; put 'put ''V2Vha01hcCxGND1uZXcgV2Vha1NldDtjbGFzcyBSMHR7Y29uc3RydWN0b3IobCl7bGV0e2hvdDphLHJvb3RFbGVtZW50OmQscm9vdERvY3VtZW50Omgsb25UaGVtZUNoYW5nZTpmPSgpPT57fX09bDsoZnVuY3Rpb24gSTB0KGMsbCl7S21lKGMsbCksbC5hZGQoYyl9KSh0aGlzLEY0KSxNNSh0''@;'; put 'put ''aGlzLEN0ZSx2b2lkIDApLE01KHRoaXMsUDQsdm9pZCAwKSxNNSh0aGlzLHVWLHZvaWQgMCksTTUodGhpcyxTdGUsdm9pZCAwKSxNNSh0aGlzLE10ZSx2b2lkIDApLE01KHRoaXMsVjYsITApLE01KHRoaXMsU2sse30pLE01KHRoaXMsTWsse30pLE01KHRoaXMseGssdm9pZCAwKSxTaChDdGUs''@;'; put 'put ''dGhpcyxhKSxTaCh1Vix0aGlzLGQpLFNoKE10ZSx0aGlzLGgpLFNoKHhrLHRoaXMsZil9aXNDbGFzc2ljVGhlbWUoKXtyZXR1cm4gYXUoVjYsdGhpcyl9Z2V0Q1NTVmFyaWFibGVWYWx1ZShsKXt2YXIgYTtpZihhdShWNix0aGlzKSlyZXR1cm4gbnVsbDtpZihhdShTayx0aGlzKVtgLS1odC0k''@;'; put 'put ''e2x9YF0pcmV0dXJuIGF1KFNrLHRoaXMpW2AtLWh0LSR7bH1gXTtjb25zdCBkPW51bGwhPT0oYT1ycChGNCx0aGlzLFAwdCkuY2FsbCh0aGlzLGAtLWh0LSR7bH1gKSkmJnZvaWQgMCE9PWE/YTpycChGNCx0aGlzLHFtZSkuY2FsbCh0aGlzLGAtLWh0LSR7bH1gKTtyZXR1cm4gbnVsbCE9PWQ/''@;'; put 'put ''KGF1KFNrLHRoaXMpW2AtLWh0LSR7bH1gXT1kLGQpOnZvaWQgMH1nZXRTdHlsZUZvclREKGwpe3ZhciBhO3JldHVybiBudWxsPT09KGE9YXUoTWssdGhpcykpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnRkW2xdfWdldERlZmF1bHRSb3dIZWlnaHQobCl7aWYoYXUoVjYsdGhpcykpcmV0dXJuIDIz''@;'; put 'put ''O2NvbnN0IGE9cnAoRjQsdGhpcyxMMHQpLmNhbGwodGhpcyk7cmV0dXJuIGE/dm9pZCAwIT09bCYmbD09PWF1KEN0ZSx0aGlzKS52aWV3LmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlUm93KCk/YSsxOmE6MjN9YXJlQ2VsbHNCb3JkZXJCb3goKXtyZXR1cm4iYm9yZGVyLWJveCI9PT10aGlzLmdl''@;'; put 'put ''dFN0eWxlRm9yVEQoImJveC1zaXppbmciKX11c2VUaGVtZShsKXtpZighbClyZXR1cm4gU2goUDQsdGhpcyx2b2lkIDApLFNoKFY2LHRoaXMsITApLGF1KHhrLHRoaXMpLmNhbGwodGhpcyxhdShQNCx0aGlzKSksdm9pZCBycChGNCx0aGlzLHh0ZSkuY2FsbCh0aGlzKTtpZihsJiZsIT09YXUo''@;'; put 'put ''UDQsdGhpcykpe2lmKCEvaHQtdGhlbWUtLiovLnRlc3QobCkpcmV0dXJuIG9zKGBJbnZhbGlkIHRoZW1lIG5hbWU6ICR7bH0uIFBsZWFzZSBwcm92aWRlIGEgdmFsaWQgdGhlbWUgbmFtZS5gKSxTaChQNCx0aGlzLHZvaWQgMCksU2goVjYsdGhpcywhMSksYXUoeGssdGhpcykuY2FsbCh0aGlz''@;'; put 'put ''LGF1KFA0LHRoaXMpKSx2b2lkIHJwKEY0LHRoaXMseHRlKS5jYWxsKHRoaXMpO2F1KFA0LHRoaXMpJiZycChGNCx0aGlzLEYwdCkuY2FsbCh0aGlzKSxTaChQNCx0aGlzLGwpLFNoKFY2LHRoaXMsITEpLGF1KHhrLHRoaXMpLmNhbGwodGhpcyxhdShQNCx0aGlzKSkscnAoRjQsdGhpcyx4dGUp''@;'; put 'put ''LmNhbGwodGhpcyl9fWdldFRoZW1lTmFtZSgpe3JldHVybiBhdShQNCx0aGlzKX19ZnVuY3Rpb24gTDB0KCl7Y29uc3QgYz10aGlzLmdldENTU1ZhcmlhYmxlVmFsdWUoImxpbmUtaGVpZ2h0IiksbD10aGlzLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtdmVydGljYWwtcGFkZGluZyIpLGE9''@;'; put 'put ''TWF0aC5jZWlsKHBhcnNlRmxvYXQodGhpcy5nZXRTdHlsZUZvclREKCJib3JkZXItYm90dG9tLXdpZHRoIikpKTtyZXR1cm4gbnVsbD09PWN8fG51bGw9PT1sfHxpc05hTihhKT9udWxsOmMrMipsK2F9ZnVuY3Rpb24geHRlKCl7dGhpcy5pc0NsYXNzaWNUaGVtZSgpfHxTaChTdGUsdGhpcyxn''@;'; put 'put ''ZXRDb21wdXRlZFN0eWxlKGF1KHVWLHRoaXMpKSk7Y29uc3QgYz1ycChGNCx0aGlzLE8wdCkuY2FsbCh0aGlzLFsiYm94LXNpemluZyIsImJvcmRlci1ib3R0b20td2lkdGgiXSk7YXUoTWssdGhpcykudGQ9ey4uLmF1KE1rLHRoaXMpLnRkLCJib3gtc2l6aW5nIjpjWyJib3gtc2l6aW5nIl0s''@;'; put 'put ''ImJvcmRlci1ib3R0b20td2lkdGgiOmNbImJvcmRlci1ib3R0b20td2lkdGgiXX19ZnVuY3Rpb24gTzB0KGMpe2NvbnN0IGw9YXUoTXRlLHRoaXMpLGE9YXUodVYsdGhpcyksZD1sLmNyZWF0ZUVsZW1lbnQoInRhYmxlIiksaD1sLmNyZWF0ZUVsZW1lbnQoInRib2R5IiksZj1sLmNyZWF0ZUVs''@;'; put 'put ''ZW1lbnQoInRyIiksdj1sLmNyZWF0ZUVsZW1lbnQoInRyIiksTT1sLmNyZWF0ZUVsZW1lbnQoInRkIik7di5hcHBlbmRDaGlsZChNKSxoLmFwcGVuZENoaWxkKGYpLGguYXBwZW5kQ2hpbGQodiksZC5hcHBlbmRDaGlsZChoKSxhLmFwcGVuZENoaWxkKGQpO2NvbnN0IEQ9Z2V0Q29tcHV0ZWRT''@;'; put 'put ''dHlsZShNKSxVPXt9O3JldHVybiBjLmZvckVhY2godGU9PntVW3RlXT1ELmdldFByb3BlcnR5VmFsdWUodGUpfSksYS5yZW1vdmVDaGlsZChkKSxVfWZ1bmN0aW9uIFAwdChjKXtjb25zdCBsPU1hdGguY2VpbChwYXJzZUZsb2F0KHJwKEY0LHRoaXMscW1lKS5jYWxsKHRoaXMsYykpKTtyZXR1''@;'; put 'put ''cm4gTnVtYmVyLmlzTmFOKGwpP251bGw6bH1mdW5jdGlvbiBxbWUoYyl7Y29uc3QgbD1hdShTdGUsdGhpcykuZ2V0UHJvcGVydHlWYWx1ZShjKTtyZXR1cm4iIj09PWw/bnVsbDpsfWZ1bmN0aW9uIEYwdCgpe1NoKE1rLHRoaXMse30pLFNoKFNrLHRoaXMse30pLFNoKFY2LHRoaXMsITApfWxl''@;'; put 'put ''dCBSMj1udWxsLGRWPTAsRXRlPW51bGw7Y29uc3QgaFY9bmV3IFdlYWtTZXQsVHRlPW5ldyBNYXA7ZnVuY3Rpb24gSm1lKGMsbCl7dmFyIGEsZCxoPXRoaXM7bGV0IGY9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSx2PXRoaXM7Y29uc3Qg''@;'; put 'put ''TT1uZXcgVmYodik7bGV0IEQsVSx0ZSxvZSx2ZSx3ZSxGZT0hMDtjb25zdCBXZT17Li4ubC5pbml0aWFsU3RhdGUsLi4ubH07KGZ1bmN0aW9uIExzdChjKXtyZXR1cm4gYz09PWVRfSkoZikmJmZ1bmN0aW9uIFJzdChjKXtONWUuc2V0KGMsITApfSh0aGlzKSx0aGlzLnJvb3RDb250YWluZXI9''@;'; put 'put ''Yyx0aGlzLnJvb3RXcmFwcGVyRWxlbWVudD12b2lkIDAsdGhpcy5yb290R3JpZEVsZW1lbnQ9dm9pZCAwLHRoaXMucm9vdFBvcnRhbEVsZW1lbnQ9dm9pZCAwLHRoaXMucm9vdEVsZW1lbnQ9STQodGhpcyk/Yy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOmMsdGhpcy5yb290''@;'; put 'put ''RG9jdW1lbnQ9Yy5vd25lckRvY3VtZW50LHRoaXMucm9vdFdpbmRvdz10aGlzLnJvb3REb2N1bWVudC5kZWZhdWx0VmlldyxJNCh0aGlzKSYmKHRoaXMucm9vdFdyYXBwZXJFbGVtZW50PXRoaXMucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMucm9vdEdyaWRFbGVtZW50''@;'; put 'put ''PXRoaXMucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMucm9vdFBvcnRhbEVsZW1lbnQ9dGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksaWkodGhpcy5yb290RWxlbWVudCxbImh0LXdyYXBwZXIiLCJoYW5kc29udGFibGUiXSksaWkodGhpcy5yb290''@;'; put 'put ''V3JhcHBlckVsZW1lbnQsImh0LXJvb3Qtd3JhcHBlciIpLGlpKHRoaXMucm9vdEdyaWRFbGVtZW50LCJodC1ncmlkIiksdGhpcy5yb290R3JpZEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5yb290RWxlbWVudCksdGhpcy5yb290V3JhcHBlckVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5yb290''@;'; put 'put ''R3JpZEVsZW1lbnQpLHRoaXMucm9vdENvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnJvb3RXcmFwcGVyRWxlbWVudCksaWkodGhpcy5yb290UG9ydGFsRWxlbWVudCwiaHQtcG9ydGFsIiksdGhpcy5yb290RG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLnJvb3RQb3J0YWxFbGVtZW50''@;'; put 'put ''KSksdGhpcy5pc0Rlc3Ryb3llZD0hMSx0aGlzLnJlbmRlclN1c3BlbmRlZENvdW50ZXI9MCx0aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXI9MDtjb25zdCBudD1udWxsIT09KGE9V2U/LmxheW91dERpcmVjdGlvbikmJnZvaWQgMCE9PWE/YToiaW5oZXJpdCIsZHQ9WyJydGwiLCJsdHIi''@;'; put 'put ''XS5pbmNsdWRlcyhudCk/bnQ6dGhpcy5yb290V2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5yb290RWxlbWVudCkuZGlyZWN0aW9uO3RoaXMucm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKCJkaXIiLGR0KSxudWxsPT09KGQ9dGhpcy5yb290V3JhcHBlckVsZW1lbnQpfHx2b2lkIDA9PT1k''@;'; put 'put ''fHxkLnNldEF0dHJpYnV0ZSgiZGlyIixkdCksdGhpcy5pc1J0bD1mdW5jdGlvbigpe3JldHVybiJydGwiPT09ZHR9LHRoaXMuaXNMdHI9ZnVuY3Rpb24oKXtyZXR1cm4hdi5pc1J0bCgpfSx0aGlzLmdldERpcmVjdGlvbkZhY3Rvcj1mdW5jdGlvbigpe3JldHVybiB2LmlzTHRyKCk/MTotMX0s''@;'; put 'put ''dGhpcy5zdHlsZXNIYW5kbGVyPW5ldyBSMHQoe2hvdDp2LHJvb3RFbGVtZW50OnYucm9vdEVsZW1lbnQscm9vdERvY3VtZW50OnYucm9vdERvY3VtZW50LG9uVGhlbWVDaGFuZ2U6eXQ9PntJNCh0aGlzKSYmKFZhKHRoaXMucm9vdFdyYXBwZXJFbGVtZW50LC9odC10aGVtZS0uKi9nKSxWYSh0''@;'; put 'put ''aGlzLnJvb3RQb3J0YWxFbGVtZW50LC9odC10aGVtZS0uKi9nKSx5dCYmKGlpKHRoaXMucm9vdFdyYXBwZXJFbGVtZW50LHl0KSxpaSh0aGlzLnJvb3RQb3J0YWxFbGVtZW50LHl0KSxnZXRDb21wdXRlZFN0eWxlKHRoaXMucm9vdFdyYXBwZXJFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKCIt''@;'; put 'put ''LWh0LWxpbmUtaGVpZ2h0Iil8fG9zKGBUaGUgIiR7eXR9IiB0aGVtZSBpcyBlbmFibGVkLCBidXQgaXRzIHN0eWxlc2hlZXRzIGFyZSBtaXNzaW5nIG9yIG5vdCBpbXBvcnRlZCBjb3JyZWN0bHkuICAgICAgICAgICAgICAgSW1wb3J0IHRoZSBjb3JyZWN0IENTUyBmaWxlcyBpbiBvcmRlciB0''@;'; put 'put ''byB1c2UgdGhhdCB0aGVtZS5gKSkpfX0pLFdlLmxhbmd1YWdlPWZ1bmN0aW9uIGtsdChjKXtsZXQgbD1RNWUoYyk7cmV0dXJuIHR0ZShsKXx8KGw9ZXRlLGVtZShjKSksbH0oV2UubGFuZ3VhZ2UpO2NvbnN0IG10PU9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhXZSkuZmlsdGVy''@;'; put 'put ''KHl0PT57bGV0W050XT15dDtyZXR1cm4hKEFhLmdldFNpbmdsZXRvbigpLmlzUmVnaXN0ZXJlZChOdCl8fEFhLmdldFNpbmdsZXRvbigpLmlzRGVwcmVjYXRlZChOdCkpfSkpLCR0PW5ldyBBbWUodixtdCxbVmN0LFljdF0pLHp0PSR0LmdldFRhYmxlTWV0YSgpLHluPSR0LmdldEdsb2JhbE1l''@;'; put 'put ''dGEoKSxnbj1LQSgpO3RoaXMuY29udGFpbmVyPXRoaXMucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMucm9vdEVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuY29udGFpbmVyLHRoaXMucm9vdEVsZW1lbnQuZmlyc3RDaGlsZCksdGhpcy5ndWlkPWBodF8ke1pxKCl9YCxU''@;'; put 'put ''dGUuc2V0KHRoaXMuZ3VpZCx0aGlzKSx0aGlzLmNvbHVtbkluZGV4TWFwcGVyPW5ldyBtUSx0aGlzLnJvd0luZGV4TWFwcGVyPW5ldyBtUSx0aGlzLmNvbHVtbkluZGV4TWFwcGVyLmFkZExvY2FsSG9vaygiaW5kZXhlc1NlcXVlbmNlQ2hhbmdlIix5dD0+e3YucnVuSG9va3MoImFmdGVyQ29s''@;'; put 'put ''dW1uU2VxdWVuY2VDaGFuZ2UiLHl0KX0pLHRoaXMucm93SW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJpbmRleGVzU2VxdWVuY2VDaGFuZ2UiLHl0PT57di5ydW5Ib29rcygiYWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZSIseXQpfSksTS5hZGRFdmVudExpc3RlbmVyKHRoaXMucm9vdERvY3VtZW50''@;'; put 'put ''LmRvY3VtZW50RWxlbWVudCwiY29tcG9zaXRpb25zdGFydCIseXQ9Pnt2LnJ1bkhvb2tzKCJiZWZvcmVDb21wb3NpdGlvblN0YXJ0Iix5dCl9KSxVPW5ldyAkc3Qodik7Y29uc3Qgd249TmYodGhpcy5ndWlkKTt3bi5yZWdpc3RlcigiY2VsbFJhbmdlTWFwcGVyIixuZXcgZXV0KHtyb3dJbmRl''@;'; put 'put ''eE1hcHBlcjp0aGlzLnJvd0luZGV4TWFwcGVyLGNvbHVtbkluZGV4TWFwcGVyOnRoaXMuY29sdW1uSW5kZXhNYXBwZXJ9KSksKCF0aGlzLnJvb3RFbGVtZW50LmlkfHwiaHRfIj09PXRoaXMucm9vdEVsZW1lbnQuaWQuc3Vic3RyaW5nKDAsMykpJiYodGhpcy5yb290RWxlbWVudC5pZD10aGlz''@;'; put 'put ''Lmd1aWQpO2xldCBNcj1uZXcgcGN0KHp0LHtyb3dJbmRleE1hcHBlcjp2LnJvd0luZGV4TWFwcGVyLGNvbHVtbkluZGV4TWFwcGVyOnYuY29sdW1uSW5kZXhNYXBwZXIsY291bnRDb2xzOigpPT52LmNvdW50Q29scygpLGNvdW50Um93czooKT0+di5jb3VudFJvd3MoKSxwcm9wVG9Db2w6eXQ9''@;'; put 'put ''PkQucHJvcFRvQ29sKHl0KSxpc0VkaXRvck9wZW5lZDooKT0+ISF2LmdldEFjdGl2ZUVkaXRvcigpJiZ2LmdldEFjdGl2ZUVkaXRvcigpLmlzT3BlbmVkKCksY291bnRSZW5kZXJhYmxlQ29sdW1uczooKT0+dGhpcy52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSxjb3VudFJlbmRlcmFi''@;'; put 'put ''bGVSb3dzOigpPT50aGlzLnZpZXcuY291bnRSZW5kZXJhYmxlUm93cygpLGNvdW50Um93SGVhZGVyczooKT0+dGhpcy5jb3VudFJvd0hlYWRlcnMoKSxjb3VudENvbEhlYWRlcnM6KCk9PnRoaXMuY291bnRDb2xIZWFkZXJzKCksY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2U6ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gaC52aWV3LmNvdW50UmVuZGVyYWJsZVJvd3NJblJhbmdlKC4uLmFyZ3VtZW50cyl9LGNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlOmZ1bmN0aW9uKCl7cmV0dXJuIGgudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZSguLi5hcmd1bWVudHMpfSxnZXRTaG9y''@;'; put 'put ''dGN1dE1hbmFnZXI6KCk9PnYuZ2V0U2hvcnRjdXRNYW5hZ2VyKCksY3JlYXRlQ2VsbENvb3JkczooeXQsTnQpPT52Ll9jcmVhdGVDZWxsQ29vcmRzKHl0LE50KSxjcmVhdGVDZWxsUmFuZ2U6KHl0LE50LFF0KT0+di5fY3JlYXRlQ2VsbFJhbmdlKHl0LE50LFF0KSx2aXN1YWxUb1JlbmRlcmFi''@;'; put 'put ''bGVDb29yZHM6eXQ9Pntjb25zdHtyb3c6TnQsY29sOlF0fT15dDtyZXR1cm4gdi5fY3JlYXRlQ2VsbENvb3JkcyhOdD49MD92LnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoTnQpOk50LFF0Pj0wP3YuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZy''@;'; put 'put ''b21WaXN1YWxJbmRleChRdCk6UXQpfSxyZW5kZXJhYmxlVG9WaXN1YWxDb29yZHM6eXQ9Pntjb25zdHtyb3c6TnQsY29sOlF0fT15dDtyZXR1cm4gdi5fY3JlYXRlQ2VsbENvb3JkcyhOdD49MD92LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoTnQpOk50LFF0''@;'; put 'put ''Pj0wP3YuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChRdCk6UXQpfSxmaW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlUm93Oih5dCxOdCk9Pntjb25zdCBRdD1OdD55dD8xOi0xLExuPU1hdGgubWluKHl0LE50KSxpcj1NYXRoLm1heCh5dCxOdCksRXQ9''@;'; put 'put ''di5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoeXQsUXQpO3JldHVybiBudWxsPT09RXR8fDE9PT1RdCYmRXQ+aXJ8fC0xPT09UXQmJkV0PExuP251bGw6RXQ+PTA/di5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEV0KTpFdH0sZmlu''@;'; put 'put ''ZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZUNvbHVtbjooeXQsTnQpPT57Y29uc3QgUXQ9TnQ+eXQ/MTotMSxMbj1NYXRoLm1pbih5dCxOdCksaXI9TWF0aC5tYXgoeXQsTnQpLEV0PXYuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHl0LFF0KTtyZXR1cm4gbnVs''@;'; put 'put ''bD09PUV0fHwxPT09UXQmJkV0PmlyfHwtMT09PVF0JiZFdDxMbj9udWxsOkV0Pj0wP3YuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChFdCk6RXR9LGlzRGlzYWJsZWRDZWxsU2VsZWN0aW9uOih5dCxOdCk9Pnl0PDB8fE50PDA/di5nZXRTZXR0aW5ncygp''@;'; put 'put ''LmRpc2FibGVWaXN1YWxTZWxlY3Rpb246di5nZXRDZWxsTWV0YSh5dCxOdCkuZGlzYWJsZVZpc3VhbFNlbGVjdGlvbn0pO3RoaXMuc2VsZWN0aW9uPU1yO2NvbnN0IHZpPXl0PT57bGV0e2hpZGRlbkluZGV4ZXNDaGFuZ2VkOk50fT15dDt0aGlzLmZvcmNlRnVsbFJlbmRlcj0hMCxOdCYmdGhp''@;'; put 'put ''cy5zZWxlY3Rpb24uY29tbWl0KCl9O2Z1bmN0aW9uIEJyKHl0LE50KXtjb25zdCBRdD0iY2xhc3NOYW1lIj09PXl0P3Yucm9vdEVsZW1lbnQ6di50YWJsZTtpZihGZSlpaShRdCxOdCk7ZWxzZXtsZXQgTG49W10saXI9W107eW5beXRdJiYoTG49QXJyYXkuaXNBcnJheSh5blt5dF0pP3luW3l0''@;'; put 'put ''XTp6cSh5blt5dF0pKSxOdCYmKGlyPUFycmF5LmlzQXJyYXkoTnQpP050OnpxKE50KSk7Y29uc3QgRXQ9anEoTG4saXIpLFh0PWpxKGlyLExuKTtFdC5sZW5ndGgmJlZhKFF0LEV0KSxYdC5sZW5ndGgmJmlpKFF0LFh0KX15blt5dF09TnR9ZnVuY3Rpb24gZXIoKXtsZXQgeXQ9ITE7cmV0dXJu''@;'; put 'put ''e3ZhbGlkYXRvcnNJblF1ZXVlOjAsdmFsaWQ6ITAsYWRkVmFsaWRhdG9yVG9RdWV1ZSgpe3RoaXMudmFsaWRhdG9yc0luUXVldWUrPTEseXQ9ITF9LHJlbW92ZVZhbGlkYXRvckZvcm1RdWV1ZSgpe3RoaXMudmFsaWRhdG9yc0luUXVldWU9dGhpcy52YWxpZGF0b3JzSW5RdWV1ZS0xPDA/MDp0''@;'; put 'put ''aGlzLnZhbGlkYXRvcnNJblF1ZXVlLTEsdGhpcy5jaGVja0lmUXVldWVJc0VtcHR5KCl9LG9uUXVldWVFbXB0eSgpe30sY2hlY2tJZlF1ZXVlSXNFbXB0eSgpezA9PT10aGlzLnZhbGlkYXRvcnNJblF1ZXVlJiYhMT09PXl0JiYoeXQ9ITAsdGhpcy5vblF1ZXVlRW1wdHkodGhpcy52YWxpZCkp''@;'; put 'put ''fX19ZnVuY3Rpb24gVHIoeXQsTnQsUXQpe2lmKCF5dC5sZW5ndGgpcmV0dXJuIHZvaWQgUXQoKTtjb25zdCBMbj12LmdldEFjdGl2ZUVkaXRvcigpLGlyPW5ldyBlcjtsZXQgRXQ9ITA7aXIub25RdWV1ZUVtcHR5PSgpPT57TG4mJkV0JiZMbi5jYW5jZWxDaGFuZ2VzKCksUXQoKX07Zm9yKGxl''@;'; put 'put ''dCBYdD15dC5sZW5ndGgtMTtYdD49MDtYdC0tKXtjb25zdFtfbixRbiwsUG5dPXl0W1h0XSxFbj1ELnByb3BUb0NvbChRbik7bGV0IF9yO19yPU51bWJlci5pc0ludGVnZXIoRW4pP3YuZ2V0Q2VsbE1ldGEoX24sRW4pOnsuLi5PYmplY3QuZ2V0UHJvdG90eXBlT2YoenQpLC4uLnp0fSx2Lmdl''@;'; put 'put ''dENlbGxWYWxpZGF0b3IoX3IpJiYoaXIuYWRkVmFsaWRhdG9yVG9RdWV1ZSgpLHYudmFsaWRhdGVDZWxsKFBuLF9yLGZ1bmN0aW9uKEhuLHpuKXtyZXR1cm4gZnVuY3Rpb24oT3Ipe2lmKCJib29sZWFuIiE9dHlwZW9mIE9yKXRocm93IG5ldyBFcnJvcigiVmFsaWRhdGlvbiBlcnJvcjogcmVz''@;'; put 'put ''dWx0IGlzIG5vdCBib29sZWFuIik7ITE9PT1PciYmITE9PT16bi5hbGxvd0ludmFsaWQmJihFdD0hMSx5dC5zcGxpY2UoSG4sMSksem4udmFsaWQ9ITApLGlyLnJlbW92ZVZhbGlkYXRvckZvcm1RdWV1ZSgpfX0oWHQsX3IpLE50KSl9aXIuY2hlY2tJZlF1ZXVlSXNFbXB0eSgpfWZ1bmN0aW9u''@;'; put 'put ''ICRyKHl0LE50KXtmb3IobGV0IExuPXl0Lmxlbmd0aC0xO0xuPj0wO0xuLS0pe2xldCBpcj0hMTtpZihudWxsIT09eXRbTG5dKXtpZihudWxsIT15dFtMbl1bMl18fG51bGwhPXl0W0xuXVszXSl7aWYoenQuYWxsb3dJbnNlcnRSb3cpZm9yKDt5dFtMbl1bMF0+di5jb3VudFJvd3MoKS0xOyl7''@;'; put 'put ''Y29uc3R7ZGVsdGE6RXR9PUQuY3JlYXRlUm93KHZvaWQgMCx2b2lkIDAse3NvdXJjZToiYXV0byJ9KTtpZigwPT09RXQpe2lyPSEwO2JyZWFrfX1pZigiYXJyYXkiPT09di5kYXRhVHlwZSYmKCF6dC5jb2x1bW5zfHwwPT09enQuY29sdW1ucy5sZW5ndGgpJiZ6dC5hbGxvd0luc2VydENvbHVt''@;'; put 'put ''bilmb3IoO0QucHJvcFRvQ29sKHl0W0xuXVsxXSk+di5jb3VudENvbHMoKS0xOyl7Y29uc3R7ZGVsdGE6RXR9PUQuY3JlYXRlQ29sKHZvaWQgMCx2b2lkIDAse3NvdXJjZToiYXV0byJ9KTtpZigwPT09RXQpe2lyPSEwO2JyZWFrfX1pcnx8RC5zZXQoeXRbTG5dWzBdLHl0W0xuXVsxXSx5dFtM''@;'; put 'put ''bl1bM10pfX1lbHNlIHl0LnNwbGljZShMbiwxKX1pZih5dC5sZW5ndGg+MCl7dGUuYWRqdXN0Um93c0FuZENvbHMoKSx2LnJ1bkhvb2tzKCJiZWZvcmVDaGFuZ2VSZW5kZXIiLHl0LE50KSxvZS5jbG9zZUVkaXRvcigpLHYudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSx2LnJlbmRlcigpLG9l''@;'; put 'put ''LnByZXBhcmVFZGl0b3IoKSx2LnJ1bkhvb2tzKCJhZnRlckNoYW5nZSIseXQsTnR8fCJlZGl0Iik7Y29uc3QgTG49di5nZXRBY3RpdmVFZGl0b3IoKTtMbiYmTWEoTG4ucmVmcmVzaFZhbHVlKSYmTG4ucmVmcmVzaFZhbHVlKCl9ZWxzZSB2LnJlbmRlcigpfWZ1bmN0aW9uIGJpKHl0LE50LFF0''@;'; put 'put ''KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh5dCk/eXQ6W1t5dCxOdCxRdF1dfWZ1bmN0aW9uIE5pKHl0LE50KXtjb25zdCBRdD12LnJ1bkhvb2tzKCJiZWZvcmVDaGFuZ2UiLHl0LE50fHwiZWRpdCIpLExuPXl0LmZpbHRlcihFdD0+bnVsbCE9PUV0KTt2YXIgaXI7aWYoITE9PT1RdHx8MD09PUxu''@;'; put 'put ''Lmxlbmd0aClyZXR1cm4gbnVsbD09PShpcj12LmdldEFjdGl2ZUVkaXRvcigpKXx8dm9pZCAwPT09aXJ8fGlyLmNhbmNlbENoYW5nZXMoKSxbXTtmb3IobGV0IEV0PUxuLmxlbmd0aC0xO0V0Pj0wO0V0LS0pe2NvbnN0W1h0LF9uLCxRbl09TG5bRXRdLFBuPUQucHJvcFRvQ29sKF9uKTtsZXQg''@;'; put 'put ''RW47RW49TnVtYmVyLmlzSW50ZWdlcihQbik/di5nZXRDZWxsTWV0YShYdCxQbik6ey4uLk9iamVjdC5nZXRQcm90b3R5cGVPZih6dCksLi4uenR9LExuW0V0XVszXT1mdGUoUW4sRW4pfXJldHVybiBMbn10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmFkZExvY2FsSG9vaygiY2FjaGVVcGRhdGVk''@;'; put 'put ''Iix5dD0+e3ZpKHl0KSx0aGlzLnJ1bkhvb2tzKCJhZnRlckNvbHVtblNlcXVlbmNlQ2FjaGVVcGRhdGUiLHl0KX0pLHRoaXMucm93SW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJjYWNoZVVwZGF0ZWQiLHl0PT57dmkoeXQpLHRoaXMucnVuSG9va3MoImFmdGVyUm93U2VxdWVuY2VDYWNoZVVw''@;'; put 'put ''ZGF0ZSIseXQpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlclNldFJhbmdlRW5kIiwoeXQsTnQpPT57Y29uc3QgUXQ9dmgoITEpLExuPXRoaXMuc2VsZWN0aW9uLmdldFNlbGVjdGVkUmFuZ2UoKSx7ZnJvbTppcix0bzpFdH09TG4uY3VycmVudCgpLFh0PUxuLnNpemUoKS0x''@;'; put 'put ''O3RoaXMucnVuSG9va3MoImFmdGVyU2VsZWN0aW9uIixpci5yb3csaXIuY29sLEV0LnJvdyxFdC5jb2wsUXQsWHQpLHRoaXMucnVuSG9va3MoImFmdGVyU2VsZWN0aW9uQnlQcm9wIixpci5yb3csdi5jb2xUb1Byb3AoaXIuY29sKSxFdC5yb3csdi5jb2xUb1Byb3AoRXQuY29sKSxRdCxYdCks''@;'; put 'put ''TnQmJighUXQuaXNUb3VjaGVkKCl8fFF0LmlzVG91Y2hlZCgpJiYhUXQudmFsdWUpJiZ3ZS5zY3JvbGxUbyh5dCk7Y29uc3QgX249TXIuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCksUW49TXIuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCk7X24mJlFuP2lpKHRoaXMucm9vdEVsZW1lbnQsWyJo''@;'; put 'put ''dF9fc2VsZWN0aW9uLS1yb3dzIiwiaHRfX3NlbGVjdGlvbi0tY29sdW1ucyJdKTpfbj8oVmEodGhpcy5yb290RWxlbWVudCwiaHRfX3NlbGVjdGlvbi0tY29sdW1ucyIpLGlpKHRoaXMucm9vdEVsZW1lbnQsImh0X19zZWxlY3Rpb24tLXJvd3MiKSk6UW4/KFZhKHRoaXMucm9vdEVsZW1lbnQs''@;'; put 'put ''Imh0X19zZWxlY3Rpb24tLXJvd3MiKSxpaSh0aGlzLnJvb3RFbGVtZW50LCJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIikpOlZhKHRoaXMucm9vdEVsZW1lbnQsWyJodF9fc2VsZWN0aW9uLS1yb3dzIiwiaHRfX3NlbGVjdGlvbi0tY29sdW1ucyJdKSxbInNoaWZ0IiwicmVmcmVzaCJdLmluY2x1''@;'; put 'put ''ZGVzKE1yLmdldFNlbGVjdGlvblNvdXJjZSgpKXx8b2UuY2xvc2VFZGl0b3IobnVsbCksInJlZnJlc2giIT09TXIuZ2V0U2VsZWN0aW9uU291cmNlKCkmJih2LnZpZXcucmVuZGVyKCksb2UucHJlcGFyZUVkaXRvcigpKX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYmVmb3JlU2V0''@;'; put 'put ''Rm9jdXMiLHl0PT57dGhpcy5ydW5Ib29rcygiYmVmb3JlU2VsZWN0aW9uRm9jdXNTZXQiLHl0LnJvdyx5dC5jb2wpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlclNldEZvY3VzIix5dD0+e2NvbnN0IE50PXZoKCExKTt0aGlzLnJ1bkhvb2tzKCJhZnRlclNlbGVjdGlvbkZv''@;'; put 'put ''Y3VzU2V0Iix5dC5yb3cseXQuY29sLE50KSwoIU50LmlzVG91Y2hlZCgpfHxOdC5pc1RvdWNoZWQoKSYmIU50LnZhbHVlKSYmd2Uuc2Nyb2xsVG8oeXQpLG9lLmNsb3NlRWRpdG9yKCksdi52aWV3LnJlbmRlcigpLG9lLnByZXBhcmVFZGl0b3IoKX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2Fs''@;'; put 'put ''SG9vaygiYWZ0ZXJTZWxlY3Rpb25GaW5pc2hlZCIseXQ9Pntjb25zdCBOdD15dC5sZW5ndGgtMSx7ZnJvbTpRdCx0bzpMbn09eXRbTnRdO3RoaXMucnVuSG9va3MoImFmdGVyU2VsZWN0aW9uRW5kIixRdC5yb3csUXQuY29sLExuLnJvdyxMbi5jb2wsTnQpLHRoaXMucnVuSG9va3MoImFmdGVy''@;'; put 'put ''U2VsZWN0aW9uRW5kQnlQcm9wIixRdC5yb3csdi5jb2xUb1Byb3AoUXQuY29sKSxMbi5yb3csdi5jb2xUb1Byb3AoTG4uY29sKSxOdCksInJlZnJlc2giPT09TXIuZ2V0U2VsZWN0aW9uU291cmNlKCkmJih2LnZpZXcucmVuZGVyKCksb2UucHJlcGFyZUVkaXRvcigpKX0pLHRoaXMuc2VsZWN0''@;'; put 'put ''aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uIix5dD0+e2NvbnN0IE50PXRoaXMucnVuSG9va3MoImFmdGVySXNNdWx0aXBsZVNlbGVjdGlvbiIseXQudmFsdWUpO3l0LnZhbHVlJiYoeXQudmFsdWU9TnQpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJh''@;'; put 'put ''ZnRlckRlc2VsZWN0IiwoKT0+e29lLmNsb3NlRWRpdG9yKCksdi52aWV3LnJlbmRlcigpLFZhKHRoaXMucm9vdEVsZW1lbnQsWyJodF9fc2VsZWN0aW9uLS1yb3dzIiwiaHRfX3NlbGVjdGlvbi0tY29sdW1ucyJdKSx0aGlzLnJ1bkhvb2tzKCJhZnRlckRlc2VsZWN0Iil9KSx0aGlzLnNlbGVj''@;'; put 'put ''dGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZUhpZ2hsaWdodFNldCIsKCk9PnRoaXMucnVuSG9va3MoImJlZm9yZVNlbGVjdGlvbkhpZ2hsaWdodFNldCIpKS5hZGRMb2NhbEhvb2soImJlZm9yZVNldFJhbmdlU3RhcnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciB5dD1hcmd1bWVudHMubGVuZ3RoLE50''@;'; put 'put ''PW5ldyBBcnJheSh5dCksUXQ9MDtRdDx5dDtRdCsrKU50W1F0XT1hcmd1bWVudHNbUXRdO3JldHVybiBoLnJ1bkhvb2tzKCJiZWZvcmVTZXRSYW5nZVN0YXJ0IiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImJlZm9yZVNldFJhbmdlU3RhcnRPbmx5IixmdW5jdGlvbigpe2Zvcih2YXIgeXQ9YXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJyYXkoeXQpLFF0PTA7UXQ8eXQ7UXQrKylOdFtRdF09YXJndW1lbnRzW1F0XTtyZXR1cm4gaC5ydW5Ib29rcygiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLC4uLk50KX0pLmFkZExvY2FsSG9vaygiYmVmb3JlU2V0UmFuZ2VFbmQiLGZ1bmN0aW9uKCl7''@;'; put 'put ''Zm9yKHZhciB5dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh5dCksUXQ9MDtRdDx5dDtRdCsrKU50W1F0XT1hcmd1bWVudHNbUXRdO3JldHVybiBoLnJ1bkhvb2tzKCJiZWZvcmVTZXRSYW5nZUVuZCIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJiZWZvcmVTZWxlY3RDb2x1bW5zIixm''@;'; put 'put ''dW5jdGlvbigpe2Zvcih2YXIgeXQ9YXJndW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJyYXkoeXQpLFF0PTA7UXQ8eXQ7UXQrKylOdFtRdF09YXJndW1lbnRzW1F0XTtyZXR1cm4gaC5ydW5Ib29rcygiYmVmb3JlU2VsZWN0Q29sdW1ucyIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJhZnRlclNlbGVj''@;'; put 'put ''dENvbHVtbnMiLGZ1bmN0aW9uKCl7Zm9yKHZhciB5dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh5dCksUXQ9MDtRdDx5dDtRdCsrKU50W1F0XT1hcmd1bWVudHNbUXRdO3JldHVybiBoLnJ1bkhvb2tzKCJhZnRlclNlbGVjdENvbHVtbnMiLC4uLk50KX0pLmFkZExvY2FsSG9vaygi''@;'; put 'put ''YmVmb3JlU2VsZWN0Um93cyIsZnVuY3Rpb24oKXtmb3IodmFyIHl0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHl0KSxRdD0wO1F0PHl0O1F0KyspTnRbUXRdPWFyZ3VtZW50c1tRdF07cmV0dXJuIGgucnVuSG9va3MoImJlZm9yZVNlbGVjdFJvd3MiLC4uLk50KX0pLmFkZExvY2Fs''@;'; put 'put ''SG9vaygiYWZ0ZXJTZWxlY3RSb3dzIixmdW5jdGlvbigpe2Zvcih2YXIgeXQ9YXJndW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJyYXkoeXQpLFF0PTA7UXQ8eXQ7UXQrKylOdFtRdF09YXJndW1lbnRzW1F0XTtyZXR1cm4gaC5ydW5Ib29rcygiYWZ0ZXJTZWxlY3RSb3dzIiwuLi5OdCl9KS5hZGRM''@;'; put 'put ''b2NhbEhvb2soImJlZm9yZVNlbGVjdEFsbCIsZnVuY3Rpb24oKXtmb3IodmFyIHl0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHl0KSxRdD0wO1F0PHl0O1F0KyspTnRbUXRdPWFyZ3VtZW50c1tRdF07cmV0dXJuIGgucnVuSG9va3MoImJlZm9yZVNlbGVjdEFsbCIsLi4uTnQpfSku''@;'; put 'put ''YWRkTG9jYWxIb29rKCJhZnRlclNlbGVjdEFsbCIsZnVuY3Rpb24oKXtmb3IodmFyIHl0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHl0KSxRdD0wO1F0PHl0O1F0KyspTnRbUXRdPWFyZ3VtZW50c1tRdF07cmV0dXJuIGgucnVuSG9va3MoImFmdGVyU2VsZWN0QWxsIiwuLi5OdCl9''@;'; put 'put ''KS5hZGRMb2NhbEhvb2soImJlZm9yZU1vZGlmeVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgeXQ9YXJndW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJyYXkoeXQpLFF0PTA7UXQ8eXQ7UXQrKylOdFtRdF09YXJndW1lbnRzW1F0XTtyZXR1cm4gaC5ydW5Ib29rcygibW9kaWZ5VHJh''@;'; put 'put ''bnNmb3JtU3RhcnQiLC4uLk50KX0pLmFkZExvY2FsSG9vaygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1TdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIHl0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHl0KSxRdD0wO1F0PHl0O1F0KyspTnRbUXRdPWFyZ3VtZW50c1tRdF07cmV0dXJuIGgu''@;'; put 'put ''cnVuSG9va3MoImFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLC4uLk50KX0pLmFkZExvY2FsSG9vaygiYmVmb3JlTW9kaWZ5VHJhbnNmb3JtRm9jdXMiLGZ1bmN0aW9uKCl7Zm9yKHZhciB5dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh5dCksUXQ9MDtRdDx5dDtRdCsrKU50W1F0''@;'; put 'put ''XT1hcmd1bWVudHNbUXRdO3JldHVybiBoLnJ1bkhvb2tzKCJtb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJhZnRlck1vZGlmeVRyYW5zZm9ybUZvY3VzIixmdW5jdGlvbigpe2Zvcih2YXIgeXQ9YXJndW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJyYXkoeXQpLFF0''@;'; put 'put ''PTA7UXQ8eXQ7UXQrKylOdFtRdF09YXJndW1lbnRzW1F0XTtyZXR1cm4gaC5ydW5Ib29rcygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJiZWZvcmVNb2RpZnlUcmFuc2Zvcm1FbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciB5dD1hcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoLE50PW5ldyBBcnJheSh5dCksUXQ9MDtRdDx5dDtRdCsrKU50W1F0XT1hcmd1bWVudHNbUXRdO3JldHVybiBoLnJ1bkhvb2tzKCJtb2RpZnlUcmFuc2Zvcm1FbmQiLC4uLk50KX0pLmFkZExvY2FsSG9vaygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1FbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciB5''@;'; put 'put ''dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh5dCksUXQ9MDtRdDx5dDtRdCsrKU50W1F0XT1hcmd1bWVudHNbUXRdO3JldHVybiBoLnJ1bkhvb2tzKCJhZnRlck1vZGlmeVRyYW5zZm9ybUVuZCIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJiZWZvcmVSb3dXcmFwIixmdW5jdGlvbigp''@;'; put 'put ''e2Zvcih2YXIgeXQ9YXJndW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJyYXkoeXQpLFF0PTA7UXQ8eXQ7UXQrKylOdFtRdF09YXJndW1lbnRzW1F0XTtyZXR1cm4gaC5ydW5Ib29rcygiYmVmb3JlUm93V3JhcCIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJiZWZvcmVDb2x1bW5XcmFwIixmdW5jdGlv''@;'; put 'put ''bigpe2Zvcih2YXIgeXQ9YXJndW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJyYXkoeXQpLFF0PTA7UXQ8eXQ7UXQrKylOdFtRdF09YXJndW1lbnRzW1F0XTtyZXR1cm4gaC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uV3JhcCIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJpbnNlcnRSb3dSZXF1aXJlIix5''@;'; put 'put ''dD0+dGhpcy5hbHRlcigiaW5zZXJ0X3Jvd19hYm92ZSIseXQsMSwiYXV0byIpKS5hZGRMb2NhbEhvb2soImluc2VydENvbFJlcXVpcmUiLHl0PT50aGlzLmFsdGVyKCJpbnNlcnRfY29sX3N0YXJ0Iix5dCwxLCJhdXRvIikpLHRlPXthbHRlcih5dCxOdCl7bGV0IFF0PWFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxLExuPWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106dm9pZCAwLGlyPWFyZ3VtZW50cy5sZW5ndGg+ND9hcmd1bWVudHNbNF06dm9pZCAwO2NvbnN0IEV0PVh0PT57aWYoMD09PVh0Lmxlbmd0aClyZXR1cm5b''@;'; put 'put ''XTtjb25zdCBfbj1bLi4uWHRdO3JldHVybiBfbi5zb3J0KChQbixFbik9PntsZXRbX3JdPVBuLFtIbl09RW47cmV0dXJuIF9yPT09SG4/MDpfcj5Ibj8xOi0xfSksYTAoX24sKFBuLEVuKT0+e2xldFtfcixIbl09RW47Y29uc3Qgem49UG5bUG4ubGVuZ3RoLTFdLFtPcixFcl09em4sdWk9T3Ir''@;'; put 'put ''RXI7aWYoX3I8PXVpKXtjb25zdCBJYT1NYXRoLm1heChIbi0odWktX3IpLDApO3puWzFdKz1JYX1lbHNlIFBuLnB1c2goW19yLEhuXSk7cmV0dXJuIFBufSxbX25bMF1dKX07c3dpdGNoKHl0KXtjYXNlImluc2VydF9yb3dfYmVsb3ciOmNhc2UiaW5zZXJ0X3Jvd19hYm92ZSI6Y29uc3QgWHQ9''@;'; put 'put ''di5jb3VudFNvdXJjZVJvd3MoKTtpZih6dC5tYXhSb3dzPT09WHQpcmV0dXJuO2NvbnN0IF9uPSJpbnNlcnRfcm93X2JlbG93Ij09PXl0PyJiZWxvdyI6ImFib3ZlIjtOdD1OdD8/KCJiZWxvdyI9PT1fbj9YdDowKTtjb25zdHtkZWx0YTpRbixzdGFydFBoeXNpY2FsSW5kZXg6UG59PUQuY3Jl''@;'; put 'put ''YXRlUm93KE50LFF0LHtzb3VyY2U6TG4sbW9kZTpfbn0pO01yLnNoaWZ0Um93cyh2LnRvVmlzdWFsUm93KFBuKSxRbik7YnJlYWs7Y2FzZSJpbnNlcnRfY29sX3N0YXJ0IjpjYXNlImluc2VydF9jb2xfZW5kIjpjb25zdCBFbj0iaW5zZXJ0X2NvbF9lbmQiPT09eXQ/ImVuZCI6InN0YXJ0IjtO''@;'; put 'put ''dD1OdD8/KCJlbmQiPT09RW4/di5jb3VudFNvdXJjZUNvbHMoKTowKTtjb25zdHtkZWx0YTpfcixzdGFydFBoeXNpY2FsSW5kZXg6SG59PUQuY3JlYXRlQ29sKE50LFF0LHtzb3VyY2U6TG4sbW9kZTpFbn0pO2lmKF9yKXtpZihBcnJheS5pc0FycmF5KHp0LmNvbEhlYWRlcnMpKXtjb25zdCBF''@;'; put 'put ''cj1bdi50b1Zpc3VhbENvbHVtbihIbiksMF07RXIubGVuZ3RoKz1fcixBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KHp0LmNvbEhlYWRlcnMsRXIpfU1yLnNoaWZ0Q29sdW1ucyh2LnRvVmlzdWFsQ29sdW1uKEhuKSxfcil9YnJlYWs7Y2FzZSJyZW1vdmVfcm93Ijpjb25zdCB6bj1Fcj0+''@;'; put 'put ''e2xldCB1aT0wO0tuKEVyLElhPT57bGV0W3lhLGxvXT1JYTtjb25zdCB0cz10dSh5YSk/di5jb3VudFJvd3MoKS0xOk1hdGgubWF4KHlhLXVpLDApO2lmKE51bWJlci5pc0ludGVnZXIoeWEpJiYoeWE9TWF0aC5tYXgoeWEtdWksMCkpLCFELnJlbW92ZVJvdyh5YSxsbyxMbikpcmV0dXJuO2lm''@;'; put 'put ''KE1yLmlzU2VsZWN0ZWQoKSl7Y29uc3R7cm93OkVsfT12LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKS5oaWdobGlnaHQ7RWw+PXlhJiZFbDw9eWErbG8tMSYmb2UuY2xvc2VFZGl0b3IoITApfWNvbnN0IEVvPXYuY291bnRSb3dzKCkscW89enQuZml4ZWRSb3dzVG9wO3FvPj10cysxJiYoenQu''@;'; put 'put ''Zml4ZWRSb3dzVG9wLT1NYXRoLm1pbihsbyxxby10cykpO2NvbnN0IHFzPXp0LmZpeGVkUm93c0JvdHRvbTtpZihxcyYmdHM+PUVvLXFzJiYoenQuZml4ZWRSb3dzQm90dG9tLT1NYXRoLm1pbihsbyxxcykpLDA9PT1FbylNci5kZXNlbGVjdCgpO2Vsc2UgaWYoIkNvbnRleHRNZW51LnJlbW92''@;'; put 'put ''ZVJvdyI9PT1Mbil7Y29uc3QgRWw9TXIuZ2V0U2VsZWN0ZWRSYW5nZSgpLEkwPUVsLnBvcCgpO0VsLmNsZWFyKCkuc2V0KEkwLmZyb20pLmN1cnJlbnQoKS5zZXRUbyhJMC50byksTXIucmVmcmVzaCgpfWVsc2UgTXIuc2hpZnRSb3dzKHlhLC1sbyk7dWkrPWxvfSl9O0FycmF5LmlzQXJyYXko''@;'; put 'put ''TnQpP3puKEV0KE50KSk6em4oW1tOdCxRdF1dKTticmVhaztjYXNlInJlbW92ZV9jb2wiOmNvbnN0IE9yPUVyPT57bGV0IHVpPTA7S24oRXIsSWE9PntsZXRbeWEsbG9dPUlhO2NvbnN0IHRzPXR1KHlhKT92LmNvdW50Q29scygpLTE6TWF0aC5tYXgoeWEtdWksMCk7bGV0IHhzPXYudG9QaHlz''@;'; put 'put ''aWNhbENvbHVtbih0cyk7aWYoTnVtYmVyLmlzSW50ZWdlcih5YSkmJih5YT1NYXRoLm1heCh5YS11aSwwKSksIUQucmVtb3ZlQ29sKHlhLGxvLExuKSlyZXR1cm47aWYoTXIuaXNTZWxlY3RlZCgpKXtjb25zdHtjb2w6RWx9PXYuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLmhpZ2hsaWdodDtF''@;'; put 'put ''bD49eWEmJkVsPD15YStsby0xJiZvZS5jbG9zZUVkaXRvcighMCl9aWYoMD09PXYuY291bnRDb2xzKCkpTXIuZGVzZWxlY3QoKTtlbHNlIGlmKCJDb250ZXh0TWVudS5yZW1vdmVDb2x1bW4iPT09TG4pe2NvbnN0IEVsPU1yLmdldFNlbGVjdGVkUmFuZ2UoKSxJMD1FbC5wb3AoKTtFbC5jbGVh''@;'; put 'put ''cigpLnNldChJMC5mcm9tKS5jdXJyZW50KCkuc2V0VG8oSTAudG8pLE1yLnJlZnJlc2goKX1lbHNlIE1yLnNoaWZ0Q29sdW1ucyh5YSwtbG8pO2NvbnN0IHFzPXp0LmZpeGVkQ29sdW1uc1N0YXJ0O3FzPj10cysxJiYoenQuZml4ZWRDb2x1bW5zU3RhcnQtPU1hdGgubWluKGxvLHFzLXRzKSks''@;'; put 'put ''QXJyYXkuaXNBcnJheSh6dC5jb2xIZWFkZXJzKSYmKHR5cGVvZiB4cz4idSImJih4cz0tMSksenQuY29sSGVhZGVycy5zcGxpY2UoeHMsbG8pKSx1aSs9bG99KX07QXJyYXkuaXNBcnJheShOdCk/T3IoRXQoTnQpKTpPcihbW050LFF0XV0pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KGBUaGVyZSBpcyBubyBzdWNoIGFjdGlvbiAiJHt5dH0iYCl9aXJ8fHRlLmFkanVzdFJvd3NBbmRDb2xzKCksdi52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHYudmlldy5yZW5kZXIoKX0sYWRqdXN0Um93c0FuZENvbHMoKXtjb25zdCB5dD16dC5taW5Sb3dzLE50PXp0Lm1pblNwYXJlUm93''@;'; put 'put ''cyxRdD16dC5taW5Db2xzLExuPXp0Lm1pblNwYXJlQ29scztpZih5dCl7Y29uc3QgaXI9di5jb3VudFJvd3MoKTtpcjx5dCYmRC5jcmVhdGVSb3coaXIseXQtaXIse3NvdXJjZToiYXV0byJ9KX1pZihOdCl7Y29uc3QgaXI9di5jb3VudEVtcHR5Um93cyghMCk7aWYoaXI8TnQpe2NvbnN0IFh0''@;'; put 'put ''PU1hdGgubWluKE50LWlyLHp0Lm1heFJvd3Mtdi5jb3VudFNvdXJjZVJvd3MoKSk7RC5jcmVhdGVSb3codi5jb3VudFJvd3MoKSxYdCx7c291cmNlOiJhdXRvIn0pfX17bGV0IGlyOyhRdHx8TG4pJiYoaXI9di5jb3VudEVtcHR5Q29scyghMCkpO2xldCBFdD12LmNvdW50Q29scygpO2lmKFF0''@;'; put 'put ''JiYhenQuY29sdW1ucyYmRXQ8UXQpe2NvbnN0IFh0PVF0LUV0O2lyKz1YdCxELmNyZWF0ZUNvbChFdCxYdCx7c291cmNlOiJhdXRvIn0pfWlmKExuJiYhenQuY29sdW1ucyYmImFycmF5Ij09PXYuZGF0YVR5cGUmJmlyPExuKXtFdD12LmNvdW50Q29scygpO2NvbnN0IF9uPU1hdGgubWluKExu''@;'; put 'put ''LWlyLHp0Lm1heENvbHMtRXQpO0QuY3JlYXRlQ29sKEV0LF9uLHtzb3VyY2U6ImF1dG8ifSl9fX0scG9wdWxhdGVGcm9tQXJyYXkoeXQsTnQsUXQsTG4saXIpe2xldCBFdCxYdCxfbixRbjtjb25zdCBQbj1bXSxFbj17fSxfcj1bXSxIbj15dC5yb3csem49eXQuY29sO2lmKFh0PU50Lmxlbmd0''@;'; put 'put ''aCwwPT09WHQpcmV0dXJuITE7bGV0IE9yPTAsRXI9MDtzd2l0Y2gobW8oUXQpJiYoT3I9UXQuY29sLXpuKzEsRXI9UXQucm93LUhuKzEpLGlyKXtjYXNlInNoaWZ0X2Rvd24iOmNvbnN0IElhPURBKE50KSx5YT1JYS5sZW5ndGgsbG89TWF0aC5tYXgoeWEsT3IpLHRzPXYuZ2V0RGF0YSgpLnNs''@;'; put 'put ''aWNlKEhuKSx4cz1EQSh0cykuc2xpY2Uoem4sem4rbG8pO2Zvcihfbj0wO19uPGxvO19uKz0xKWlmKF9uPHlhKXtmb3IoRXQ9MCxYdD1JYVtfbl0ubGVuZ3RoO0V0PEVyLVh0O0V0Kz0xKUlhW19uXS5wdXNoKElhW19uXVtFdCVYdF0pO19yLnB1c2goSWFbX25dLmNvbmNhdChfbjx4cy5sZW5n''@;'; put 'put ''dGg/eHNbX25dOm5ldyBBcnJheSh0cy5sZW5ndGgpLmZpbGwobnVsbCkpKX1lbHNlIF9yLnB1c2goSWFbX24leWFdLmNvbmNhdCh4c1tfbl0pKTt2LnBvcHVsYXRlRnJvbUFycmF5KEhuLHpuLERBKF9yKSk7YnJlYWs7Y2FzZSJzaGlmdF9yaWdodCI6Y29uc3QgRW89TnQubGVuZ3RoLHFvPU1h''@;'; put 'put ''dGgubWF4KEVvLEVyKSxxcz12LmdldERhdGEoKS5zbGljZShIbikubWFwKERzPT5Ecy5zbGljZSh6bikpO2ZvcihFdD0wO0V0PHFvO0V0Kz0xKWlmKEV0PEVvKXtmb3IoX249MCxRbj1OdFtFdF0ubGVuZ3RoO19uPE9yLVFuO19uKz0xKU50W0V0XS5wdXNoKE50W0V0XVtfbiVRbl0pO2lmKEV0''@;'; put 'put ''PHFzLmxlbmd0aClmb3IobGV0IERzPTA7RHM8cXNbRXRdLmxlbmd0aDtEcys9MSlOdFtFdF0ucHVzaChxc1tFdF1bRHNdKTtlbHNlIE50W0V0XS5wdXNoKC4uLm5ldyBBcnJheShxc1swXS5sZW5ndGgpLmZpbGwobnVsbCkpfWVsc2UgTnQucHVzaChOdFtFdCVYdF0uc2xpY2UoMCxxbykuY29u''@;'; put 'put ''Y2F0KHFzW0V0XSkpO3YucG9wdWxhdGVGcm9tQXJyYXkoSG4sem4sTnQpO2JyZWFrO2RlZmF1bHQ6RW4ucm93PXl0LnJvdyxFbi5jb2w9eXQuY29sO2xldCBSYyxFbD0wLEkwPTAsSjE9ITA7Y29uc3QgZ289ZnVuY3Rpb24ocGcpe2xldCBnZz1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9''@;'; put 'put ''PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDtjb25zdCBRMT1OdFtwZyVOdC5sZW5ndGhdO3JldHVybiBudWxsIT09Z2c/UTFbZ2clUTEubGVuZ3RoXTpRMX0sY2M9TnQubGVuZ3RoLFZsPVF0P1F0LnJvdy15dC5yb3crMTowO2ZvcihYdD1RdD9WbDpNYXRoLm1heChjYyxWbCksRXQ9''@;'; put 'put ''MDtFdDxYdCYmIShRdCYmRW4ucm93PlF0LnJvdyYmVmw+Y2N8fCF6dC5hbGxvd0luc2VydFJvdyYmRW4ucm93PnYuY291bnRSb3dzKCktMXx8RW4ucm93Pj16dC5tYXhSb3dzKTtFdCsrKXtjb25zdCBEcz1FdC1FbCxwZz1nbyhEcykubGVuZ3RoLGdnPVF0P1F0LmNvbC15dC5jb2wrMTowO2lm''@;'; put 'put ''KFFuPVF0P2dnOk1hdGgubWF4KHBnLGdnKSxFbi5jb2w9eXQuY29sLFJjPXYuZ2V0Q2VsbE1ldGEoRW4ucm93LEVuLmNvbCksIkNvcHlQYXN0ZS5wYXN0ZSIhPT1MbiYmIkF1dG9maWxsLmZpbGwiIT09TG58fCFSYy5za2lwUm93T25QYXN0ZSl7Zm9yKEkwPTAsX249MDtfbjxRbjtfbisrKXt2''@;'; put 'put ''YXIgdWk7aWYoUXQmJkVuLmNvbD5RdC5jb2wmJmdnPnBnfHwhenQuYWxsb3dJbnNlcnRDb2x1bW4mJkVuLmNvbD52LmNvdW50Q29scygpLTF8fEVuLmNvbD49enQubWF4Q29scylicmVhaztpZihSYz12LmdldENlbGxNZXRhKEVuLnJvdyxFbi5jb2wpLCgiQ29weVBhc3RlLnBhc3RlIj09PUxu''@;'; put 'put ''fHwiQXV0b2ZpbGwuZmlsbCI9PT1MbikmJlJjLnNraXBDb2x1bW5PblBhc3RlKXtJMCs9MSxFbi5jb2wrPTEsUW4rPTE7Y29udGludWV9aWYoUmMucmVhZE9ubHkmJiJVbmRvUmVkby51bmRvIiE9PUxuKXtFbi5jb2wrPTE7Y29udGludWV9Y29uc3QgUGg9ISFSYy52YWx1ZVNldHRlcjtsZXQg''@;'; put 'put ''Rmg9Z28oRHMsX24tSTApLFIwPW51bGwhPT0odWk9di5nZXRTb3VyY2VEYXRhQXRDZWxsKEVuLnJvdyxFbi5jb2wpKSYmdm9pZCAwIT09dWk/dWk6bnVsbDtpZihudWxsIT09RmgmJiJvYmplY3QiPT10eXBlb2YgRmgpaWYoQXJyYXkuaXNBcnJheShGaCkmJm51bGw9PT1SMCYmKFIwPVtdKSxQ''@;'; put 'put ''aHx8Im9iamVjdCI9PXR5cGVvZiBSMCYmbnVsbCE9PVIwKXtpZihudWxsIT09UjApe2NvbnN0IHdTPVB3KEFycmF5LmlzQXJyYXkoUjApP1IwOlIwWzBdfHxSMCksQ1M9UHcoQXJyYXkuaXNBcnJheShGaCk/Rmg6RmhbMF18fEZoKTtQaHx8RkEod1MsQ1MpfHxBcnJheS5pc0FycmF5KHdTKSYm''@;'; put 'put ''QXJyYXkuaXNBcnJheShDUyk/Rmg9QjEoRmgpOkoxPSExfX1lbHNlIEoxPSExO2Vsc2UhUGgmJm51bGwhPT1SMCYmIm9iamVjdCI9PXR5cGVvZiBSMCYmKEoxPSExKTtKMSYmUG4ucHVzaChbRW4ucm93LEVuLmNvbCxGaF0pLEoxPSEwLEVuLmNvbCs9MX1Fbi5yb3crPTF9ZWxzZSBFbCs9MSxF''@;'; put 'put ''bi5yb3crPTEsWHQrPTF9di5zZXREYXRhQXRDZWxsKFBuLG51bGwsbnVsbCxMbnx8InBvcHVsYXRlRnJvbUFycmF5Iil9fX0sdGhpcy5pbml0PWZ1bmN0aW9uKCl7VS5zZXREYXRhKHp0LmRhdGEpLHYucnVuSG9va3MoImJlZm9yZUluaXQiKSwoWDMoKXx8dE4oKSkmJmlpKHYucm9vdEVsZW1l''@;'; put 'put ''bnQsIm1vYmlsZSIpLHRoaXMudXBkYXRlU2V0dGluZ3MoV2UsITApLHRoaXMudmlldz1uZXcgQnN0KHRoaXMpLG9lPXlpdC5nZXRJbnN0YW5jZSh2LHp0LE1yKSx3ZT1mdW5jdGlvbiBsdXQoYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWM7bGV0IGE9ITEsZD0hMTtyZXR1cm57cmVzdW1lKCl7ZD0h''@;'; put 'put ''MX0sc3VzcGVuZCgpe2Q9ITB9LHNraXBOZXh0U2Nyb2xsQ3ljbGUoKXthPSEwfSxzY3JvbGxUbyhoKXt2YXIgZjtpZihhfHxkKXJldHVybiB2b2lkKGE9ITEpO2xldCB2O2wuaXNGb2N1c1NlbGVjdGlvbkNoYW5nZWQoKT92PWZ1bmN0aW9uIHJ1dChjKXtyZXR1cm4gbD0+e2Muc2Nyb2xsVmll''@;'; put 'put ''d3BvcnRUbyhsLnRvT2JqZWN0KCksKCk9Pntjb25zdCBhPWMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCFhKXJldHVybjtjb25zdHtyb3c6ZCxjb2w6aH09YS5oaWdobGlnaHQ7YUMoYy5nZXRDZWxsKGQsaCwhMCkpfSl9fShjKTpsLmlzU2VsZWN0ZWRCeUNvcm5lcigpP3Y9KCk9Pnt9''@;'; put 'put ''OmwuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCk/dj1mdW5jdGlvbiBvdXQoYyl7cmV0dXJuIGw9Pntjb25zdCBhPXRWKGMpLmdldENvbXB1dGVkUm93VGFyZ2V0KGwpO2Muc2Nyb2xsVmlld3BvcnRUbyh7cm93OmF9LCgpPT57Y29uc3QgZD0hIWMuZ2V0U2V0dGluZ3MoKS5yb3dIZWFkZXJzO2FD''@;'; put 'put ''KGMuZ2V0Q2VsbChhLGQ/LTE6MCwhMCkpfSl9fShjKTpsLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpP3Y9ZnVuY3Rpb24gdHV0KGMpe3JldHVybiBsPT57Y29uc3QgYT10VihjKS5nZXRDb21wdXRlZENvbHVtblRhcmdldChsKTtjLnNjcm9sbFZpZXdwb3J0VG8oe2NvbDphfSwoKT0+e2Nv''@;'; put 'put ''bnN0IGQ9ISFjLmdldFNldHRpbmdzKCkuY29sSGVhZGVyczthQyhjLmdldENlbGwoZD8tMTowLGEsITApKX0pfX0oYyk6MT09PWwuZ2V0U2VsZWN0ZWRSYW5nZSgpLnNpemUoKSYmbC5pc011bHRpcGxlKCk/dj1mdW5jdGlvbiBpdXQoYyl7cmV0dXJuIGw9Pntjb25zdCBhPXRWKGMpLGQ9e3Jv''@;'; put 'put ''dzphLmdldENvbXB1dGVkUm93VGFyZ2V0KGwpLGNvbDphLmdldENvbXB1dGVkQ29sdW1uVGFyZ2V0KGwpfTtjLnNjcm9sbFZpZXdwb3J0VG8oZCwoKT0+e2NvbnN0e3JvdzpoLGNvbDpmfT1kO2FDKGMuZ2V0Q2VsbChoLGYsITApKX0pfX0oYyk6MSE9PWwuZ2V0U2VsZWN0ZWRSYW5nZSgpLnNp''@;'; put 'put ''emUoKXx8bC5pc011bHRpcGxlKCk/bC5nZXRTZWxlY3RlZFJhbmdlKCkuc2l6ZSgpPjEmJih2PWZ1bmN0aW9uIGF1dChjKXtyZXR1cm4gbD0+e2NvbnN0IGE9dFYoYyksZD17cm93OmEuZ2V0Q29tcHV0ZWRSb3dUYXJnZXQobCksY29sOmEuZ2V0Q29tcHV0ZWRDb2x1bW5UYXJnZXQobCl9O2Mu''@;'; put 'put ''c2Nyb2xsVmlld3BvcnRUbyhkLCgpPT57Y29uc3R7cm93OmgsY29sOmZ9PWQ7YUMoYy5nZXRDZWxsKGgsZiwhMCkpfSl9fShjKSk6dj1mdW5jdGlvbiBzdXQoYyl7cmV0dXJuIGw9Pntjb25zdCBhPWMuc2VsZWN0aW9uLmdldFNlbGVjdGlvblNvdXJjZSgpLHtyb3c6ZCxjb2w6aH09bCxmPSgp''@;'; put 'put ''PT57YUMoYy5nZXRDZWxsKGQsaCwhMCkpfTtpZihkPDAmJmg+PTApYy5zY3JvbGxWaWV3cG9ydFRvKHtjb2w6aH0sZik7ZWxzZSBpZihoPDAmJmQ+PTApYy5zY3JvbGxWaWV3cG9ydFRvKHtyb3c6ZH0sZik7ZWxzZXtpZigibW91c2UiPT09YSYmKGg9PT1jLnZpZXcuZ2V0TGFzdFBhcnRpYWxs''@;'; put 'put ''eVZpc2libGVDb2x1bW4oKXx8ZD09PWMudmlldy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpKSlyZXR1cm47Yy5zY3JvbGxWaWV3cG9ydFRvKHtyb3c6ZCxjb2w6aH0sZil9fX0oYyksbnVsbD09PShmPXYpfHx2b2lkIDA9PT1mfHxmKGgpfX19KHYpLHZlLmluaXQoKSxJNCh0aGlzKSYm''@;'; put 'put ''KGZ1bmN0aW9uIEgwdChjKXtpZighUjIpe1IyPWMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxSMi5zZXRBdHRyaWJ1dGUoInJvbGUiLCJzdGF0dXMiKSxSMi5zZXRBdHRyaWJ1dGUoImFyaWEtbGl2ZSIsImFzc2VydGl2ZSIpLFIyLnNldEF0dHJpYnV0ZSgiYXJpYS1hdG9t''@;'; put 'put ''aWMiLCJ0cnVlIik7Y29uc3QgYT1SMi5zdHlsZTthLnBvc2l0aW9uPSJhYnNvbHV0ZSIsYS53aWR0aD0iMXB4IixhLmhlaWdodD0iMXB4IixhLm1hcmdpbj0iLTFweCIsYS5vdmVyZmxvdz0iaGlkZGVuIixhLmNsaXBQYXRoPSJyZWN0KDAgMCAwIDApIixhLndoaXRlU3BhY2U9Im5vd3JhcCIs''@;'; put 'put ''Yy5hcHBlbmRDaGlsZChSMil9ZFYrPTF9KHYucm9vdFBvcnRhbEVsZW1lbnQpLGo0ZShXZS5saWNlbnNlS2V5LHRoaXMucm9vdFdyYXBwZXJFbGVtZW50KSksdi5ydW5Ib29rcygiaW5pdCIpLHRoaXMucmVuZGVyKCksRmUmJm51bGw9PT12LnJvb3RFbGVtZW50Lm9mZnNldFBhcmVudCYmeWdl''@;'; put 'put ''KHYucm9vdEVsZW1lbnQsKCk9Pnt2LnZpZXcuX3d0Lnd0T3ZlcmxheXMudXBkYXRlTGFzdFNwcmVhZGVyU2l6ZSgpLHYudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSx2LnJlbmRlcigpfSksIm9iamVjdCI9PXR5cGVvZiBGZSYmKHYucnVuSG9va3MoImFmdGVyQ2hhbmdlIixGZVswXSxGZVsx''@;'; put 'put ''XSksRmU9ITEpLHYucnVuSG9va3MoImFmdGVySW5pdCIpfSx0aGlzLl9jcmVhdGVDZWxsQ29vcmRzPWZ1bmN0aW9uKHl0LE50KXtyZXR1cm4gdi52aWV3Ll93dC5jcmVhdGVDZWxsQ29vcmRzKHl0LE50KX0sdGhpcy5fY3JlYXRlQ2VsbFJhbmdlPWZ1bmN0aW9uKHl0LE50LFF0KXtyZXR1cm4g''@;'; put 'put ''di52aWV3Ll93dC5jcmVhdGVDZWxsUmFuZ2UoeXQsTnQsUXQpfSx0aGlzLnZhbGlkYXRlQ2VsbD1mdW5jdGlvbih5dCxOdCxRdCxMbil7bGV0IGlyPXYuZ2V0Q2VsbFZhbGlkYXRvcihOdCk7ZnVuY3Rpb24gRXQoWHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRz''@;'; put 'put ''WzFdJiYhYXJndW1lbnRzWzFdfHwhMD09PU50LmhpZGRlbilyZXR1cm4gdm9pZCBRdChYdCk7Y29uc3QgUW49TnQudmlzdWFsQ29sLFBuPU50LnZpc3VhbFJvdyxFbj12LmdldENlbGwoUG4sUW4sITApO2lmKEVuJiYiVEgiIT09RW4ubm9kZU5hbWUpe2NvbnN0IF9yPXYucm93SW5kZXhNYXBw''@;'; put 'put ''ZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChQbiksSG49di5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFFuKTt2LnZpZXcuX3d0LmdldFNldHRpbmcoImNlbGxSZW5kZXJlciIsX3IsSG4sRW4pfVF0KFh0KX1GNGUoaXIpJiYoaXI9ZnVuY3Rp''@;'; put 'put ''b24oWHQpe3JldHVybiBmdW5jdGlvbihfbixRbil7UW4oWHQudGVzdChfbikpfX0oaXIpKSxpbChpcik/KHl0PXYucnVuSG9va3MoImJlZm9yZVZhbGlkYXRlIix5dCxOdC52aXN1YWxSb3csTnQucHJvcCxMbiksdi5fcmVnaXN0ZXJJbW1lZGlhdGUoKCk9Pntpci5jYWxsKE50LHl0LFh0PT57''@;'; put 'put ''diYmKFh0PXYucnVuSG9va3MoImFmdGVyVmFsaWRhdGUiLFh0LHl0LE50LnZpc3VhbFJvdyxOdC5wcm9wLExuKSxOdC52YWxpZD1YdCxFdChYdCksdi5ydW5Ib29rcygicG9zdEFmdGVyVmFsaWRhdGUiLFh0LHl0LE50LnZpc3VhbFJvdyxOdC5wcm9wLExuKSl9KX0pKTp2Ll9yZWdpc3Rlcklt''@;'; put 'put ''bWVkaWF0ZSgoKT0+e050LnZhbGlkPSEwLEV0KE50LnZhbGlkLCExKX0pfSx0aGlzLnNldERhdGFBdENlbGw9ZnVuY3Rpb24oeXQsTnQsUXQsTG4pe2NvbnN0IGlyPWJpKHl0LE50LFF0KSxFdD1bXTtsZXQgX24sUW4sUG4sWHQ9TG47Zm9yKF9uPTAsUW49aXIubGVuZ3RoO19uPFFuO19uKysp''@;'; put 'put ''e2NvbnN0W19yLEhuLHpuXT1pcltfbl07aWYoIm9iamVjdCIhPXR5cGVvZiBpcltfbl0pdGhyb3cgbmV3IEVycm9yKCJNZXRob2QgYHNldERhdGFBdENlbGxgIGFjY2VwdHMgcm93IG51bWJlciBvciBjaGFuZ2VzIGFycmF5IG9mIGFycmF5cyBhcyBpdHMgZmlyc3QgcGFyYW1ldGVyIik7aWYo''@;'; put 'put ''Im51bWJlciIhPXR5cGVvZiBIbil0aHJvdyBuZXcgRXJyb3IoIk1ldGhvZCBgc2V0RGF0YUF0Q2VsbGAgYWNjZXB0cyByb3cgYW5kIGNvbHVtbiBudW1iZXIgYXMgaXRzIHBhcmFtZXRlcnMuIElmIHlvdSB3YW50IHRvIHVzZSBvYmplY3QgcHJvcGVydHkgbmFtZSwgdXNlIG1ldGhvZCBgc2V0''@;'; put 'put ''RGF0YUF0Um93UHJvcGAiKTtQbj1Ibj49dGhpcy5jb3VudENvbHMoKT9IbjpELmNvbFRvUHJvcChIbiksRXQucHVzaChbX3IsUG4sVS5nZXRBdENlbGwodGhpcy50b1BoeXNpY2FsUm93KF9yKSxIbiksem5dKX0hWHQmJiJvYmplY3QiPT10eXBlb2YgeXQmJihYdD1OdCk7Y29uc3QgRW49Tmko''@;'; put 'put ''RXQsWHQpO3YucnVuSG9va3MoImFmdGVyU2V0RGF0YUF0Q2VsbCIsRW4sWHQpLFRyKEVuLFh0LCgpPT57JHIoRW4sWHQpfSl9LHRoaXMuc2V0RGF0YUF0Um93UHJvcD1mdW5jdGlvbih5dCxOdCxRdCxMbil7Y29uc3QgaXI9YmkoeXQsTnQsUXQpLEV0PVtdO2xldCBfbixRbixYdD1Mbjtmb3Io''@;'; put 'put ''X249MCxRbj1pci5sZW5ndGg7X248UW47X24rKyl7Y29uc3RbRW4sX3IsSG5dPWlyW19uXTtFdC5wdXNoKFtFbixfcixVLmdldEF0Q2VsbCh0aGlzLnRvUGh5c2ljYWxSb3coRW4pLF9yKSxIbl0pfSFYdCYmIm9iamVjdCI9PXR5cGVvZiB5dCYmKFh0PU50KTtjb25zdCBQbj1OaShFdCxMbik7''@;'; put 'put ''di5ydW5Ib29rcygiYWZ0ZXJTZXREYXRhQXRSb3dQcm9wIixQbixYdCksVHIoUG4sWHQsKCk9PnskcihQbixYdCl9KX0sdGhpcy5saXN0ZW49ZnVuY3Rpb24oKXt2JiYhdi5pc0xpc3RlbmluZygpJiYoVHRlLmZvckVhY2goeXQ9Pnt2IT09eXQmJnl0LnVubGlzdGVuKCl9KSxFdGU9di5ndWlk''@;'; put 'put ''LHYucnVuSG9va3MoImFmdGVyTGlzdGVuIikpfSx0aGlzLnVubGlzdGVuPWZ1bmN0aW9uKCl7dGhpcy5pc0xpc3RlbmluZygpJiYoRXRlPW51bGwsdi5ydW5Ib29rcygiYWZ0ZXJVbmxpc3RlbiIpKX0sdGhpcy5pc0xpc3RlbmluZz1mdW5jdGlvbigpe3JldHVybiBFdGU9PT12Lmd1aWR9LHRo''@;'; put 'put ''aXMuZGVzdHJveUVkaXRvcj1mdW5jdGlvbigpe2xldCBOdD0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO29lLmNsb3NlRWRpdG9yKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0p''@;'; put 'put ''LHYudmlldy5yZW5kZXIoKSxOdCYmTXIuaXNTZWxlY3RlZCgpJiZvZS5wcmVwYXJlRWRpdG9yKCl9LHRoaXMucG9wdWxhdGVGcm9tQXJyYXk9ZnVuY3Rpb24oeXQsTnQsUXQsTG4saXIsRXQsWHQpe2lmKCJvYmplY3QiIT10eXBlb2YgUXR8fCJvYmplY3QiIT10eXBlb2YgUXRbMF0pdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJwb3B1bGF0ZUZyb21BcnJheSBwYXJhbWV0ZXIgYGlucHV0YCBtdXN0IGJlIGFuIGFycmF5IG9mIGFycmF5cyIpO2NvbnN0IF9uPSJudW1iZXIiPT10eXBlb2YgTG4/di5fY3JlYXRlQ2VsbENvb3JkcyhMbixpcik6bnVsbDtyZXR1cm4gdGUucG9wdWxhdGVGcm9tQXJyYXko''@;'; put 'put ''di5fY3JlYXRlQ2VsbENvb3Jkcyh5dCxOdCksUXQsX24sRXQsWHQpfSx0aGlzLnNwbGljZUNvbD1mdW5jdGlvbih5dCxOdCxRdCl7Zm9yKHZhciBMbj1hcmd1bWVudHMubGVuZ3RoLGlyPW5ldyBBcnJheShMbj4zP0xuLTM6MCksRXQ9MztFdDxMbjtFdCsrKWlyW0V0LTNdPWFyZ3VtZW50c1tF''@;'; put 'put ''dF07cmV0dXJuIEQuc3BsaWNlQ29sKHl0LE50LFF0LC4uLmlyKX0sdGhpcy5zcGxpY2VSb3c9ZnVuY3Rpb24oeXQsTnQsUXQpe2Zvcih2YXIgTG49YXJndW1lbnRzLmxlbmd0aCxpcj1uZXcgQXJyYXkoTG4+Mz9Mbi0zOjApLEV0PTM7RXQ8TG47RXQrKylpcltFdC0zXT1hcmd1bWVudHNbRXRd''@;'; put 'put ''O3JldHVybiBELnNwbGljZVJvdyh5dCxOdCxRdCwuLi5pcil9LHRoaXMuZ2V0U2VsZWN0ZWQ9ZnVuY3Rpb24oKXtpZihNci5pc1NlbGVjdGVkKCkpcmV0dXJuIFpzKE1yLmdldFNlbGVjdGVkUmFuZ2UoKSx5dD0+e2xldHtmcm9tOk50LHRvOlF0fT15dDtyZXR1cm5bTnQucm93LE50LmNvbCxR''@;'; put 'put ''dC5yb3csUXQuY29sXX0pfSx0aGlzLmdldFNlbGVjdGVkTGFzdD1mdW5jdGlvbigpe2NvbnN0IHl0PXRoaXMuZ2V0U2VsZWN0ZWQoKTtsZXQgTnQ7cmV0dXJuIHl0JiZ5dC5sZW5ndGg+MCYmKE50PXl0W3l0Lmxlbmd0aC0xXSksTnR9LHRoaXMuZ2V0U2VsZWN0ZWRBY3RpdmU9ZnVuY3Rpb24o''@;'; put 'put ''KXtjb25zdCB5dD10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZigheXQpcmV0dXJuO2NvbnN0e2Zyb206TnQsdG86UXR9PXl0O3JldHVybltOdC5yb3csTnQuY29sLFF0LnJvdyxRdC5jb2xdfSx0aGlzLmdldFNlbGVjdGVkUmFuZ2U9ZnVuY3Rpb24oKXtpZihNci5pc1NlbGVjdGVk''@;'; put 'put ''KCkpcmV0dXJuIEFycmF5LmZyb20oTXIuZ2V0U2VsZWN0ZWRSYW5nZSgpKX0sdGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdD1mdW5jdGlvbigpe2NvbnN0IHl0PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpO2xldCBOdDtyZXR1cm4geXQmJnl0Lmxlbmd0aD4wJiYoTnQ9eXRbeXQubGVuZ3RoLTFd''@;'; put 'put ''KSxOdH0sdGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIE1yLmdldEFjdGl2ZVNlbGVjdGVkUmFuZ2UoKX0sdGhpcy5nZXRBY3RpdmVTZWxlY3Rpb25MYXllckluZGV4PWZ1bmN0aW9uKCl7cmV0dXJuIE1yLmdldEFjdGl2ZVNlbGVjdGlvbkxheWVySW5kZXgo''@;'; put 'put ''KX0sdGhpcy5lbXB0eVNlbGVjdGVkQ2VsbHM9ZnVuY3Rpb24oeXQpe2lmKCFNci5pc1NlbGVjdGVkKCl8fDA9PT10aGlzLmNvdW50Um93cygpfHwwPT09dGhpcy5jb3VudENvbHMoKSlyZXR1cm47Y29uc3QgTnQ9W107S24oTXIuZ2V0U2VsZWN0ZWRSYW5nZSgpLFF0PT57aWYoUXQuaXNTaW5n''@;'; put 'put ''bGVIZWFkZXIoKSlyZXR1cm47Y29uc3QgTG49UXQuZ2V0VG9wU3RhcnRDb3JuZXIoKSxpcj1RdC5nZXRCb3R0b21FbmRDb3JuZXIoKTtRYShMbi5yb3csaXIucm93LEV0PT57UWEoTG4uY29sLGlyLmNvbCxYdD0+e3RoaXMuZ2V0Q2VsbE1ldGEoRXQsWHQpLnJlYWRPbmx5fHxOdC5wdXNoKFtF''@;'; put 'put ''dCxYdCxudWxsXSl9KX0pfSksTnQubGVuZ3RoPjAmJnRoaXMuc2V0RGF0YUF0Q2VsbChOdCx5dCl9LHRoaXMuaXNSZW5kZXJTdXNwZW5kZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyPjB9LHRoaXMuc3VzcGVuZFJlbmRlcj1mdW5jdGlvbigpe3RoaXMu''@;'; put 'put ''cmVuZGVyU3VzcGVuZGVkQ291bnRlcis9MX0sdGhpcy5yZXN1bWVSZW5kZXI9ZnVuY3Rpb24oKXtjb25zdCB5dD10aGlzLnJlbmRlclN1c3BlbmRlZENvdW50ZXItMTt0aGlzLnJlbmRlclN1c3BlbmRlZENvdW50ZXI9TWF0aC5tYXgoeXQsMCksIXRoaXMuaXNSZW5kZXJTdXNwZW5kZWQoKSYm''@;'; put 'put ''eXQ9PT10aGlzLnJlbmRlclN1c3BlbmRlZENvdW50ZXImJnYudmlldy5yZW5kZXIoKX0sdGhpcy5yZW5kZXI9ZnVuY3Rpb24oKXt0aGlzLnZpZXcmJih0aGlzLmZvcmNlRnVsbFJlbmRlcj0hMCx0aGlzLmlzUmVuZGVyU3VzcGVuZGVkKCl8fHYudmlldy5yZW5kZXIoKSl9LHRoaXMuYmF0Y2hS''@;'; put 'put ''ZW5kZXI9ZnVuY3Rpb24oeXQpe3RoaXMuc3VzcGVuZFJlbmRlcigpO2NvbnN0IE50PXl0KCk7cmV0dXJuIHRoaXMucmVzdW1lUmVuZGVyKCksTnR9LHRoaXMuaXNFeGVjdXRpb25TdXNwZW5kZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyPjB9LHRo''@;'; put 'put ''aXMuc3VzcGVuZEV4ZWN1dGlvbj1mdW5jdGlvbigpe3RoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlcis9MSx0aGlzLmNvbHVtbkluZGV4TWFwcGVyLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5yb3dJbmRleE1hcHBlci5zdXNwZW5kT3BlcmF0aW9ucygpfSx0aGlzLnJlc3VtZUV4ZWN1''@;'; put 'put ''dGlvbj1mdW5jdGlvbigpe2xldCB5dD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2NvbnN0IE50PXRoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlci0xO3RoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlcj1NYXRoLm1heChOdCww''@;'; put 'put ''KSwoIXRoaXMuaXNFeGVjdXRpb25TdXNwZW5kZWQoKSYmTnQ9PT10aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXJ8fHl0KSYmKHRoaXMuY29sdW1uSW5kZXhNYXBwZXIucmVzdW1lT3BlcmF0aW9ucygpLHRoaXMucm93SW5kZXhNYXBwZXIucmVzdW1lT3BlcmF0aW9ucygpKX0sdGhpcy5i''@;'; put 'put ''YXRjaEV4ZWN1dGlvbj1mdW5jdGlvbih5dCl7bGV0IE50PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07dGhpcy5zdXNwZW5kRXhlY3V0aW9uKCk7Y29uc3QgUXQ9eXQoKTtyZXR1cm4gdGhpcy5yZXN1bWVFeGVjdXRpb24oTnQpLFF0fSx0''@;'; put 'put ''aGlzLmJhdGNoPWZ1bmN0aW9uKHl0KXt0aGlzLnN1c3BlbmRSZW5kZXIoKSx0aGlzLnN1c3BlbmRFeGVjdXRpb24oKTtjb25zdCBOdD15dCgpO3JldHVybiB0aGlzLnJlc3VtZUV4ZWN1dGlvbigpLHRoaXMucmVzdW1lUmVuZGVyKCksTnR9LHRoaXMucmVmcmVzaERpbWVuc2lvbnM9ZnVuY3Rp''@;'; put 'put ''b24oKXtpZighdi52aWV3KXJldHVybjtjb25zdCB5dD12LnZpZXcse3dpZHRoOk50LGhlaWdodDpRdH09eXQuZ2V0TGFzdFNpemUoKSx7d2lkdGg6TG4saGVpZ2h0OmlyfT12LnJvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEV0PUxuIT09TnR8fGlyIT09UXQ7ITEhPT12LnJ1''@;'; put 'put ''bkhvb2tzKCJiZWZvcmVSZWZyZXNoRGltZW5zaW9ucyIse3dpZHRoOk50LGhlaWdodDpRdH0se3dpZHRoOkxuLGhlaWdodDppcn0sRXQpJiYoKEV0fHx5dC5fd3Qud3RPdmVybGF5cy5zY3JvbGxhYmxlRWxlbWVudD09PXYucm9vdFdpbmRvdykmJih5dC5zZXRMYXN0U2l6ZShMbixpcikseXQu''@;'; put 'put ''YWRqdXN0RWxlbWVudHNTaXplKCksdi5yZW5kZXIoKSksdi5ydW5Ib29rcygiYWZ0ZXJSZWZyZXNoRGltZW5zaW9ucyIse3dpZHRoOk50LGhlaWdodDpRdH0se3dpZHRoOkxuLGhlaWdodDppcn0sRXQpKX0sdGhpcy51cGRhdGVEYXRhPWZ1bmN0aW9uKHl0LE50KXtMbWUoeXQsUXQ9PntEPVF0''@;'; put 'put ''fSxRdD0+e0Q9UXQsdi5jb2x1bW5JbmRleE1hcHBlci5maXRUb0xlbmd0aCh0aGlzLmdldEluaXRpYWxDb2x1bW5Db3VudCgpKSx2LnJvd0luZGV4TWFwcGVyLmZpdFRvTGVuZ3RoKHRoaXMuY291bnRTb3VyY2VSb3dzKCkpLHRlLmFkanVzdFJvd3NBbmRDb2xzKCksTXIucmVmcmVzaCgpfSx7''@;'; put 'put ''aG90SW5zdGFuY2U6dixkYXRhTWFwOkQsZGF0YVNvdXJjZTpVLGludGVybmFsU291cmNlOiJ1cGRhdGVEYXRhIixzb3VyY2U6TnQsbWV0YU1hbmFnZXI6JHQsZmlyc3RSdW46RmV9KX0sdGhpcy5sb2FkRGF0YT1mdW5jdGlvbih5dCxOdCl7TG1lKHl0LFF0PT57RD1RdH0sKCk9PnskdC5jbGVh''@;'; put 'put ''ckNlbGxzQ2FjaGUoKSx2LmluaXRJbmRleE1hcHBlcnMoKSx0ZS5hZGp1c3RSb3dzQW5kQ29scygpLE1yLnJlZnJlc2goKSxGZSYmKEZlPVtudWxsLCJsb2FkRGF0YSJdKX0se2hvdEluc3RhbmNlOnYsZGF0YU1hcDpELGRhdGFTb3VyY2U6VSxpbnRlcm5hbFNvdXJjZToibG9hZERhdGEiLHNv''@;'; put 'put ''dXJjZTpOdCxtZXRhTWFuYWdlcjokdCxmaXJzdFJ1bjpGZX0pfSx0aGlzLmdldEluaXRpYWxDb2x1bW5Db3VudD1mdW5jdGlvbigpe2NvbnN0IHl0PXp0LmNvbHVtbnM7bGV0IE50PTA7aWYoQXJyYXkuaXNBcnJheSh5dCkpTnQ9eXQubGVuZ3RoO2Vsc2UgaWYoaWwoeXQpKWlmKCJhcnJheSI9''@;'; put 'put ''PT12LmRhdGFUeXBlKXtjb25zdCBRdD10aGlzLmNvdW50U291cmNlQ29scygpO2ZvcihsZXQgTG49MDtMbjxRdDtMbis9MSl5dChMbikmJihOdCs9MSl9ZWxzZSgib2JqZWN0Ij09PXYuZGF0YVR5cGV8fCJmdW5jdGlvbiI9PT12LmRhdGFUeXBlKSYmKE50PUQuY29sVG9Qcm9wQ2FjaGUubGVu''@;'; put 'put ''Z3RoKTtlbHNlIGlmKE1hKHp0LmRhdGFTY2hlbWEpKXtjb25zdCBRdD1ELmdldFNjaGVtYSgpO050PUFycmF5LmlzQXJyYXkoUXQpP1F0Lmxlbmd0aDpRSChRdCl9ZWxzZSBOdD10aGlzLmNvdW50U291cmNlQ29scygpO3JldHVybiBOdH0sdGhpcy5pbml0SW5kZXhNYXBwZXJzPWZ1bmN0aW9u''@;'; put 'put ''KCl7dGhpcy5jb2x1bW5JbmRleE1hcHBlci5pbml0VG9MZW5ndGgodGhpcy5nZXRJbml0aWFsQ29sdW1uQ291bnQoKSksdGhpcy5yb3dJbmRleE1hcHBlci5pbml0VG9MZW5ndGgodGhpcy5jb3VudFNvdXJjZVJvd3MoKSl9LHRoaXMuZ2V0RGF0YT1mdW5jdGlvbih5dCxOdCxRdCxMbil7cmV0''@;'; put 'put ''dXJuIGJjKHl0KT9ELmdldEFsbCgpOkQuZ2V0UmFuZ2Uodi5fY3JlYXRlQ2VsbENvb3Jkcyh5dCxOdCksdi5fY3JlYXRlQ2VsbENvb3JkcyhRdCxMbiksRC5ERVNUSU5BVElPTl9SRU5ERVJFUil9LHRoaXMuZ2V0Q29weWFibGVUZXh0PWZ1bmN0aW9uKHl0LE50LFF0LExuKXtyZXR1cm4gRC5n''@;'; put 'put ''ZXRDb3B5YWJsZVRleHQodi5fY3JlYXRlQ2VsbENvb3Jkcyh5dCxOdCksdi5fY3JlYXRlQ2VsbENvb3JkcyhRdCxMbikpfSx0aGlzLmdldENvcHlhYmxlRGF0YT1mdW5jdGlvbih5dCxOdCl7cmV0dXJuIEQuZ2V0Q29weWFibGUoeXQsRC5jb2xUb1Byb3AoTnQpKX0sdGhpcy5nZXRDb3B5YWJs''@;'; put 'put ''ZVNvdXJjZURhdGE9ZnVuY3Rpb24oeXQsTnQpe3JldHVybiBVLmdldENvcHlhYmxlKHl0LEQuY29sVG9Qcm9wKE50KSl9LHRoaXMuZ2V0U2NoZW1hPWZ1bmN0aW9uKCl7cmV0dXJuIEQuZ2V0U2NoZW1hKCl9LHRoaXMudXBkYXRlU2V0dGluZ3M9ZnVuY3Rpb24oeXQpe2xldCBOdD1hcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IFF0PShGZT92LmxvYWREYXRhOnYudXBkYXRlRGF0YSkuYmluZCh0aGlzKTtsZXQgaXIsRXQsTG49ITE7aWYoTWEoeXQucm93cykpdGhyb3cgbmV3IEVycm9yKCdUaGUgInJvd3MiIHNldHRpbmcg''@;'; put 'put ''aXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gRG8geW91IG1lYW4gc3RhcnRSb3dzLCBtaW5Sb3dzIG9yIG1heFJvd3M/Jyk7aWYoTWEoeXQuY29scykpdGhyb3cgbmV3IEVycm9yKCdUaGUgImNvbHMiIHNldHRpbmcgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gRG8geW91IG1lYW4gc3RhcnRDb2xz''@;'; put 'put ''LCBtaW5Db2xzIG9yIG1heENvbHM/Jyk7aWYoTWEoeXQuZ2FudHRDaGFydCkpdGhyb3cgbmV3IEVycm9yKCdTaW5jZSA4LjAuMCB0aGUgImdhbnR0Q2hhcnQiIHNldHRpbmcgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4nKTtmb3IoaXIgaW4gTWEoeXQucm93SGVpZ2h0cykmJk1hKHl0Lm1pblJv''@;'; put 'put ''d0hlaWdodHMpJiZvcygiQm90aCBgcm93SGVpZ2h0c2AgYW5kIGBtaW5Sb3dIZWlnaHRzYCBhcmUgZGVmaW5lZCBpbiB5b3VyIGNvbmZpZ3VyYXRpb24uIEFzIG9uZSBpcyB0aGUgYWxpYXMgb2YgdGhlIG90aGVyLCBvbmx5IG9uZSBvZiB0aGVtIGNhbiBiZSB1c2VkIGF0IGEgdGltZS4gYHJv''@;'; put 'put ''d0hlaWdodHNgIHdpbGwgYmUgdXNlZCBhcyB0aGUgcm93IGhlaWdodCBjb25maWd1cmF0aW9uLiIpLHl0KWlmKCJkYXRhIiE9PWlyJiYibGFuZ3VhZ2UiIT09aXIpaWYoImNsYXNzTmFtZSI9PT1pcilCcigiY2xhc3NOYW1lIix5dC5jbGFzc05hbWUpO2Vsc2UgaWYoInRhYmxlQ2xhc3NOYW1l''@;'; put 'put ''Ij09PWlyJiZ2LnRhYmxlKUJyKCJ0YWJsZUNsYXNzTmFtZSIseXQudGFibGVDbGFzc05hbWUpLHYudmlldy5fd3Qud3RPdmVybGF5cy5zeW5jT3ZlcmxheVRhYmxlQ2xhc3NOYW1lcygpO2Vsc2UgaWYoQWEuZ2V0U2luZ2xldG9uKCkuaXNSZWdpc3RlcmVkKGlyKXx8QWEuZ2V0U2luZ2xldG9u''@;'; put 'put ''KCkuaXNEZXByZWNhdGVkKGlyKSl7Y29uc3QgRW49eXRbaXJdO2lsKEVuKT8oQWEuZ2V0U2luZ2xldG9uKCkuYWRkQXNGaXhlZChpcixFbix2KSx6dFtpcl09RW4pOkFycmF5LmlzQXJyYXkoRW4pJiYoQWEuZ2V0U2luZ2xldG9uKCkuYWRkKGlyLEVuLHYpLHp0W2lyXT1Fbil9ZWxzZSFOdCYm''@;'; put 'put ''bnUoeXQsaXIpJiYoeW5baXJdPXl0W2lyXSk7aWYoTnQpdi51c2VUaGVtZSh6dC50aGVtZU5hbWV8fCRtZSh2LnJvb3RDb250YWluZXIpKTtlbHNle2NvbnN0IEVuPXYuZ2V0Q3VycmVudFRoZW1lTmFtZSgpO251KHl0LCJ0aGVtZU5hbWUiKSYmRW4hPT15dC50aGVtZU5hbWUmJnYudXNlVGhl''@;'; put 'put ''bWUoeXQudGhlbWVOYW1lKX1oVi5oYXModikmJnZvaWQgMCE9PXYuc3R5bGVzSGFuZGxlci5nZXRUaGVtZU5hbWUoKSYmaFYuZGVsZXRlKHYpLEk0KHYpJiYhaFYuaGFzKHYpJiZ2LnN0eWxlc0hhbmRsZXIuaXNDbGFzc2ljVGhlbWUoKSYmKEVnZSgiVGhlIHN0eWxlc2hlZXQgeW91IGFyZSB1''@;'; put 'put ''c2luZyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdmVyc2lvbiAxNy4wLiBQbGVhc2UgdXBkYXRlIHlvdXIgdGhlbWUgY29uZmlndXJhdGlvbiB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSB3aXRoIGZ1dHVyZSByZWxlYXNlcy4iKSxoVi5hZGQodikpLHZvaWQgMD09PXl0''@;'; put 'put ''LmRhdGEmJnZvaWQgMD09PXp0LmRhdGE/UXQobnVsbCwidXBkYXRlU2V0dGluZ3MiKTp2b2lkIDAhPT15dC5kYXRhP1F0KHl0LmRhdGEsInVwZGF0ZVNldHRpbmdzIik6dm9pZCAwIT09eXQuY29sdW1ucyYmKEQuY3JlYXRlTWFwKCksdi5pbml0SW5kZXhNYXBwZXJzKCkpLCFGZSYmeXQubGFu''@;'; put 'put ''Z3VhZ2UmJmZ1bmN0aW9uIE5uKHl0KXtjb25zdCBOdD1RNWUoeXQpO3R0ZShOdCk/KHYucnVuSG9va3MoImJlZm9yZUxhbmd1YWdlQ2hhbmdlIixOdCkseW4ubGFuZ3VhZ2U9TnQsdi5ydW5Ib29rcygiYWZ0ZXJMYW5ndWFnZUNoYW5nZSIsTnQpKTplbWUoeXQpfSh5dC5sYW5ndWFnZSk7Y29u''@;'; put 'put ''c3QgWHQ9di5jb3VudENvbHMoKSxfbj16dC5jb2x1bW5zO2lmKF9uJiZpbChfbikmJihMbj0hMCksKHZvaWQgMCE9PXl0LmNlbGx8fHZvaWQgMCE9PXl0LmNlbGxzfHx2b2lkIDAhPT15dC5jb2x1bW5zKSYmJHQuY2xlYXJDYWNoZSgpLFh0PjApZm9yKGlyPTAsRXQ9MDtpcjxYdDtpcisrKXtp''@;'; put 'put ''Zihfbil7Y29uc3QgRW49TG4/X24oaXIpOl9uW0V0XTtFbiYmJHQudXBkYXRlQ29sdW1uTWV0YShFdCxFbil9RXQrPTF9TWEoeXQuY2VsbCkmJmFzKHl0LmNlbGwsRW49Pnt2LnNldENlbGxNZXRhT2JqZWN0KEVuLnJvdyxFbi5jb2wsRW4pfSksdi5ydW5Ib29rcygiYWZ0ZXJDZWxsTWV0YVJl''@;'; put 'put ''c2V0Iik7bGV0IFFuPXYucm9vdEVsZW1lbnQuc3R5bGUuaGVpZ2h0OyIiIT09UW4mJihRbj1wYXJzZUludCh2LnJvb3RFbGVtZW50LnN0eWxlLmhlaWdodCwxMCkpLE50JiZ2LnJvb3RFbGVtZW50LmdldEF0dHJpYnV0ZSgic3R5bGUiKSYmdi5yb290RWxlbWVudC5zZXRBdHRyaWJ1dGUoImRh''@;'; put 'put ''dGEtaW5pdGlhbHN0eWxlIix2LnJvb3RFbGVtZW50LmdldEF0dHJpYnV0ZSgic3R5bGUiKSk7bGV0IFBuPXl0LmhlaWdodDtpZih0eXBlb2YgeXQuaGVpZ2h0PCJ1IilpZihpbChQbikmJihQbj1QbigpKSxQbj12LnJ1bkhvb2tzKCJiZWZvcmVIZWlnaHRDaGFuZ2UiLFBuKSxudWxsPT09UG4p''@;'; put 'put ''e2NvbnN0IEVuPXYucm9vdEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLWluaXRpYWxzdHlsZSIpO0VuJiYoRW4uaW5kZXhPZigiaGVpZ2h0Iik+LTF8fEVuLmluZGV4T2YoIm92ZXJmbG93Iik+LTEpP3Yucm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKCJzdHlsZSIsRW4pOih2LnJvb3RFbGVt''@;'; put 'put ''ZW50LnN0eWxlLmhlaWdodD0iIix2LnJvb3RFbGVtZW50LnN0eWxlLm92ZXJmbG93PSIiKX1lbHNlIHZvaWQgMCE9PVBuJiYodi5yb290RWxlbWVudC5zdHlsZS5oZWlnaHQ9aXNOYU4oUG4pP2Ake1BufWA6YCR7UG59cHhgLHYucm9vdEVsZW1lbnQuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIp''@;'; put 'put ''O2lmKHR5cGVvZiB5dC53aWR0aDwidSIpe2xldCBFbj15dC53aWR0aDtpbChFbikmJihFbj1FbigpKSxFbj12LnJ1bkhvb2tzKCJiZWZvcmVXaWR0aENoYW5nZSIsRW4pLHYucm9vdEVsZW1lbnQuc3R5bGUud2lkdGg9aXNOYU4oRW4pP2Ake0VufWA6YCR7RW59cHhgfU50fHwodi52aWV3JiYo''@;'; put 'put ''di52aWV3Ll93dC53dFZpZXdwb3J0LnJlc2V0SGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZCgpLHYudmlldy5fd3QuZXhwb3J0U2V0dGluZ3NBc0NsYXNzTmFtZXMoKSksdi5ydW5Ib29rcygiYWZ0ZXJVcGRhdGVTZXR0aW5ncyIseXQpKSx0ZS5hZGp1c3RSb3dzQW5kQ29scygpLHYu''@;'; put 'put ''dmlldyYmIUZlJiYodi5yZW5kZXIoKSx2LnZpZXcuX3d0Lnd0T3ZlcmxheXMuYWRqdXN0RWxlbWVudHNTaXplKCkpLCFOdCYmdi52aWV3JiYoIiI9PT1Rbnx8IiI9PT1Qbnx8dm9pZCAwPT09UG4pJiZRbiE9PVBuJiZ2LnZpZXcuX3d0Lnd0T3ZlcmxheXMudXBkYXRlTWFpblNjcm9sbGFibGVF''@;'; put 'put ''bGVtZW50cygpfSx0aGlzLmdldFZhbHVlPWZ1bmN0aW9uKCl7Y29uc3QgeXQ9di5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYoenQuZ2V0VmFsdWUpe2lmKGlsKHp0LmdldFZhbHVlKSlyZXR1cm4genQuZ2V0VmFsdWUuY2FsbCh2KTtpZih5dClyZXR1cm4gdi5nZXREYXRhKClbeXQuaGln''@;'; put 'put ''aGxpZ2h0LnJvd11benQuZ2V0VmFsdWVdfWVsc2UgaWYoeXQpcmV0dXJuIHYuZ2V0RGF0YUF0Q2VsbCh5dC5oaWdobGlnaHQucm93LHl0LmhpZ2hsaWdodC5jb2wpO3JldHVybiBudWxsfSx0aGlzLmdldFNldHRpbmdzPWZ1bmN0aW9uKCl7cmV0dXJuIHp0fSx0aGlzLmNsZWFyPWZ1bmN0aW9u''@;'; put 'put ''KCl7dGhpcy5zZWxlY3RBbGwoKSx0aGlzLmVtcHR5U2VsZWN0ZWRDZWxscygpfSx0aGlzLmFsdGVyPWZ1bmN0aW9uKHl0LE50LFF0LExuLGlyKXt0ZS5hbHRlcih5dCxOdCxRdCxMbixpcil9LHRoaXMuZ2V0Q2VsbD1mdW5jdGlvbih5dCxOdCl7bGV0IFF0PWFyZ3VtZW50cy5sZW5ndGg+MiYm''@;'; put 'put ''dm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0sTG49TnQsaXI9eXQ7aWYoTnQ+PTApe2lmKHRoaXMuY29sdW1uSW5kZXhNYXBwZXIuaXNIaWRkZW4odGhpcy50b1BoeXNpY2FsQ29sdW1uKE50KSkpcmV0dXJuIG51bGw7TG49dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5k''@;'; put 'put ''ZXJhYmxlRnJvbVZpc3VhbEluZGV4KE50KX1pZih5dD49MCl7aWYodGhpcy5yb3dJbmRleE1hcHBlci5pc0hpZGRlbih0aGlzLnRvUGh5c2ljYWxSb3coeXQpKSlyZXR1cm4gbnVsbDtpcj10aGlzLnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoeXQpfXJldHVy''@;'; put 'put ''biBudWxsPT09aXJ8fG51bGw9PT1Mbnx8dm9pZCAwPT09aXJ8fHZvaWQgMD09PUxuP251bGw6di52aWV3LmdldENlbGxBdENvb3Jkcyh2Ll9jcmVhdGVDZWxsQ29vcmRzKGlyLExuKSxRdCl9LHRoaXMuZ2V0Q29vcmRzPWZ1bmN0aW9uKHl0KXtjb25zdCBOdD10aGlzLnZpZXcuX3d0Lnd0VGFi''@;'; put 'put ''bGUuZ2V0Q29vcmRzKHl0KTtpZihudWxsPT09TnQpcmV0dXJuIG51bGw7Y29uc3R7cm93OlF0LGNvbDpMbn09TnQ7bGV0IGlyPVF0LEV0PUxuO3JldHVybiBRdD49MCYmKGlyPXRoaXMucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChRdCkpLExuPj0wJiYoRXQ9''@;'; put 'put ''dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KExuKSksdi5fY3JlYXRlQ2VsbENvb3JkcyhpcixFdCl9LHRoaXMuY29sVG9Qcm9wPWZ1bmN0aW9uKHl0KXtyZXR1cm4gRC5jb2xUb1Byb3AoeXQpfSx0aGlzLnByb3BUb0NvbD1mdW5jdGlvbih5dCl7''@;'; put 'put ''cmV0dXJuIEQucHJvcFRvQ29sKHl0KX0sdGhpcy50b1Zpc3VhbFJvdz15dD0+dGhpcy5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleCh5dCksdGhpcy50b1Zpc3VhbENvbHVtbj15dD0+dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJ''@;'; put 'put ''bmRleCh5dCksdGhpcy50b1BoeXNpY2FsUm93PXl0PT50aGlzLnJvd0luZGV4TWFwcGVyLmdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4KHl0KSx0aGlzLnRvUGh5c2ljYWxDb2x1bW49eXQ9PnRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgoeXQpLHRo''@;'; put 'put ''aXMuZ2V0RGF0YUF0Q2VsbD1mdW5jdGlvbih5dCxOdCl7cmV0dXJuIEQuZ2V0KHl0LEQuY29sVG9Qcm9wKE50KSl9LHRoaXMuZ2V0RGF0YUF0Um93UHJvcD1mdW5jdGlvbih5dCxOdCl7cmV0dXJuIEQuZ2V0KHl0LE50KX0sdGhpcy5nZXREYXRhQXRDb2w9ZnVuY3Rpb24oeXQpe2NvbnN0IE50''@;'; put 'put ''PVtdLFF0PUQuZ2V0UmFuZ2Uodi5fY3JlYXRlQ2VsbENvb3JkcygwLHl0KSx2Ll9jcmVhdGVDZWxsQ29vcmRzKHp0LmRhdGEubGVuZ3RoLTEseXQpLEQuREVTVElOQVRJT05fUkVOREVSRVIpO2ZvcihsZXQgTG49MDtMbjxRdC5sZW5ndGg7TG4rPTEpZm9yKGxldCBpcj0wO2lyPFF0W0xuXS5s''@;'; put 'put ''ZW5ndGg7aXIrPTEpTnQucHVzaChRdFtMbl1baXJdKTtyZXR1cm4gTnR9LHRoaXMuZ2V0RGF0YUF0UHJvcD1mdW5jdGlvbih5dCl7Y29uc3QgTnQ9W10sUXQ9RC5nZXRSYW5nZSh2Ll9jcmVhdGVDZWxsQ29vcmRzKDAsRC5wcm9wVG9Db2woeXQpKSx2Ll9jcmVhdGVDZWxsQ29vcmRzKHp0LmRh''@;'; put 'put ''dGEubGVuZ3RoLTEsRC5wcm9wVG9Db2woeXQpKSxELkRFU1RJTkFUSU9OX1JFTkRFUkVSKTtmb3IobGV0IExuPTA7TG48UXQubGVuZ3RoO0xuKz0xKWZvcihsZXQgaXI9MDtpcjxRdFtMbl0ubGVuZ3RoO2lyKz0xKU50LnB1c2goUXRbTG5dW2lyXSk7cmV0dXJuIE50fSx0aGlzLmdldFNvdXJj''@;'; put 'put ''ZURhdGE9ZnVuY3Rpb24oeXQsTnQsUXQsTG4pe2xldCBpcjtyZXR1cm4gaXI9dm9pZCAwPT09eXQ/VS5nZXREYXRhKCk6VS5nZXRCeVJhbmdlKHYuX2NyZWF0ZUNlbGxDb29yZHMoeXQsTnQpLHYuX2NyZWF0ZUNlbGxDb29yZHMoUXQsTG4pKSxpcn0sdGhpcy5nZXRTb3VyY2VEYXRhQXJyYXk9''@;'; put 'put ''ZnVuY3Rpb24oeXQsTnQsUXQsTG4pe2xldCBpcjtyZXR1cm4gaXI9dm9pZCAwPT09eXQ/VS5nZXREYXRhKCEwKTpVLmdldEJ5UmFuZ2Uodi5fY3JlYXRlQ2VsbENvb3Jkcyh5dCxOdCksdi5fY3JlYXRlQ2VsbENvb3JkcyhRdCxMbiksITApLGlyfSx0aGlzLmdldFNvdXJjZURhdGFBdENvbD1m''@;'; put 'put ''dW5jdGlvbih5dCl7cmV0dXJuIFUuZ2V0QXRDb2x1bW4oeXQpfSx0aGlzLnNldFNvdXJjZURhdGFBdENlbGw9ZnVuY3Rpb24oeXQsTnQsUXQsTG4pe2NvbnN0IGlyPWJpKHl0LE50LFF0KSxFdD10aGlzLmhhc0hvb2soImFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCIpLFh0PVtdLF9uPShQbixF''@;'; put 'put ''bik9Pntjb25zdCBfcj10aGlzLnRvVmlzdWFsUm93KFBuKSxIbj10aGlzLnRvVmlzdWFsQ29sdW1uKEVuKTtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihIbik/dGhpcy5nZXRDZWxsTWV0YShfcixIbik6ey4uLk9iamVjdC5nZXRQcm90b3R5cGVPZih6dCksLi4uenR9fTtFdCYmS24oaXIsUG49''@;'; put 'put ''PntsZXRbRW4sX3IsSG5dPVBuO2NvbnN0IHpuPWZ0ZShIbixfbihFbixfcikpO1h0LnB1c2goW0VuLF9yLFUuZ2V0QXRDZWxsKEVuLF9yKSx6bl0pfSksS24oaXIsUG49PntsZXRbRW4sX3IsSG5dPVBuO2NvbnN0IHpuPWZ0ZShIbixfbihFbixfcikpO1Uuc2V0QXRDZWxsKEVuLF9yLHpuKX0p''@;'; put 'put ''LEV0JiZ0aGlzLnJ1bkhvb2tzKCJhZnRlclNldFNvdXJjZURhdGFBdENlbGwiLFh0LExuKSx0aGlzLnJlbmRlcigpO2NvbnN0IFFuPXYuZ2V0QWN0aXZlRWRpdG9yKCk7UW4mJk1hKFFuLnJlZnJlc2hWYWx1ZSkmJlFuLnJlZnJlc2hWYWx1ZSgpfSx0aGlzLmdldFNvdXJjZURhdGFBdFJvdz1m''@;'; put 'put ''dW5jdGlvbih5dCl7cmV0dXJuIFUuZ2V0QXRSb3coeXQpfSx0aGlzLmdldFNvdXJjZURhdGFBdENlbGw9ZnVuY3Rpb24oeXQsTnQpe3JldHVybiBVLmdldEF0Q2VsbCh5dCxOdCl9LHRoaXMuZ2V0RGF0YUF0Um93PWZ1bmN0aW9uKHl0KXtyZXR1cm4gRC5nZXRSYW5nZSh2Ll9jcmVhdGVDZWxs''@;'; put 'put ''Q29vcmRzKHl0LDApLHYuX2NyZWF0ZUNlbGxDb29yZHMoeXQsdGhpcy5jb3VudENvbHMoKS0xKSxELkRFU1RJTkFUSU9OX1JFTkRFUkVSKVswXXx8W119LHRoaXMuZ2V0RGF0YVR5cGU9ZnVuY3Rpb24oeXQsTnQsUXQsTG4pe2NvbnN0IGlyPXZvaWQgMD09PXl0P1swLDAsdGhpcy5jb3VudFJv''@;'; put 'put ''d3MoKSx0aGlzLmNvdW50Q29scygpXTpbeXQsTnQsUXQsTG5dLFtFdCxYdF09aXI7bGV0WywsX24sUW5dPWlyLFBuPW51bGwsRW49bnVsbDt2b2lkIDA9PT1fbiYmKF9uPUV0KSx2b2lkIDA9PT1RbiYmKFFuPVh0KTtsZXQgX3I9Im1peGVkIjtyZXR1cm4gUWEoTWF0aC5tYXgoTWF0aC5taW4o''@;'; put 'put ''RXQsX24pLDApLE1hdGgubWF4KEV0LF9uKSxIbj0+e2xldCB6bj0hMDtyZXR1cm4gUWEoTWF0aC5tYXgoTWF0aC5taW4oWHQsUW4pLDApLE1hdGgubWF4KFh0LFFuKSxPcj0+KEVuPXRoaXMuZ2V0Q2VsbE1ldGEoSG4sT3IpLnR5cGUsUG4/em49UG49PT1FbjpQbj1Fbix6bikpLF9yPXpuP0Vu''@;'; put 'put ''OiJtaXhlZCIsem59KSxfcn0sdGhpcy5yZW1vdmVDZWxsTWV0YT1mdW5jdGlvbih5dCxOdCxRdCl7Y29uc3RbTG4saXJdPVt0aGlzLnRvUGh5c2ljYWxSb3coeXQpLHRoaXMudG9QaHlzaWNhbENvbHVtbihOdCldO2xldCBFdD0kdC5nZXRDZWxsTWV0YUtleVZhbHVlKExuLGlyLFF0KTshMSE9''@;'; put 'put ''PXYucnVuSG9va3MoImJlZm9yZVJlbW92ZUNlbGxNZXRhIix5dCxOdCxRdCxFdCkmJigkdC5yZW1vdmVDZWxsTWV0YShMbixpcixRdCksdi5ydW5Ib29rcygiYWZ0ZXJSZW1vdmVDZWxsTWV0YSIseXQsTnQsUXQsRXQpKSxFdD1udWxsfSx0aGlzLnNwbGljZUNlbGxzTWV0YT1mdW5jdGlvbih5''@;'; put 'put ''dCl7bGV0IE50PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO2Zvcih2YXIgUXQ9YXJndW1lbnRzLmxlbmd0aCxMbj1uZXcgQXJyYXkoUXQ+Mj9RdC0yOjApLGlyPTI7aXI8UXQ7aXIrKylMbltpci0yXT1hcmd1bWVudHNbaXJdO2lmKExu''@;'; put 'put ''Lmxlbmd0aD4wJiYhQXJyYXkuaXNBcnJheShMblswXSkpdGhyb3cgbmV3IEVycm9yKCJUaGUgM3JkIGFyZ3VtZW50IChjZWxsTWV0YVJvd3MpIGhhcyB0byBiZSBwYXNzZWQgYXMgYW4gYXJyYXkgb2YgY2VsbCBtZXRhIG9iamVjdHMgYXJyYXkuIik7TnQ+MCYmJHQucmVtb3ZlUm93KHRoaXMu''@;'; put 'put ''dG9QaHlzaWNhbFJvdyh5dCksTnQpLExuLmxlbmd0aD4wJiZLbihMbi5yZXZlcnNlKCksRXQ9PnskdC5jcmVhdGVSb3codGhpcy50b1BoeXNpY2FsUm93KHl0KSksS24oRXQsKFh0LF9uKT0+dGhpcy5zZXRDZWxsTWV0YU9iamVjdCh5dCxfbixYdCkpfSksdi5yZW5kZXIoKX0sdGhpcy5zZXRD''@;'; put 'put ''ZWxsTWV0YU9iamVjdD1mdW5jdGlvbih5dCxOdCxRdCl7Im9iamVjdCI9PXR5cGVvZiBRdCYmYXMoUXQsKExuLGlyKT0+e3RoaXMuc2V0Q2VsbE1ldGEoeXQsTnQsaXIsTG4pfSl9LHRoaXMuc2V0Q2VsbE1ldGE9ZnVuY3Rpb24oeXQsTnQsUXQsTG4pe2lmKCExPT09di5ydW5Ib29rcygiYmVm''@;'; put 'put ''b3JlU2V0Q2VsbE1ldGEiLHl0LE50LFF0LExuKSlyZXR1cm47bGV0IEV0PXl0LFh0PU50O3l0PHRoaXMuY291bnRSb3dzKCkmJihFdD10aGlzLnRvUGh5c2ljYWxSb3coeXQpKSxOdDx0aGlzLmNvdW50Q29scygpJiYoWHQ9dGhpcy50b1BoeXNpY2FsQ29sdW1uKE50KSksJHQuc2V0Q2VsbE1l''@;'; put 'put ''dGEoRXQsWHQsUXQsTG4pLHYucnVuSG9va3MoImFmdGVyU2V0Q2VsbE1ldGEiLHl0LE50LFF0LExuKX0sdGhpcy5nZXRDZWxsc01ldGE9ZnVuY3Rpb24oKXtyZXR1cm4gJHQuZ2V0Q2VsbHNNZXRhKCl9LHRoaXMuZ2V0Q2VsbE1ldGE9ZnVuY3Rpb24oeXQsTnQpe2xldCBRdD1hcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e3NraXBNZXRhRXh0ZW5zaW9uOiExfSxMbj10aGlzLnRvUGh5c2ljYWxSb3coeXQpLGlyPXRoaXMudG9QaHlzaWNhbENvbHVtbihOdCk7cmV0dXJuIG51bGw9PT1MbiYmKExuPXl0KSxudWxsPT09aXImJihpcj1O''@;'; put 'put ''dCksJHQuZ2V0Q2VsbE1ldGEoTG4saXIse3Zpc3VhbFJvdzp5dCx2aXN1YWxDb2x1bW46TnQsLi4uUXR9KX0sdGhpcy5nZXRDb2x1bW5NZXRhPWZ1bmN0aW9uKHl0KXtyZXR1cm4gJHQuZ2V0Q29sdW1uTWV0YSh0aGlzLnRvUGh5c2ljYWxDb2x1bW4oeXQpKX0sdGhpcy5nZXRDZWxsTWV0YUF0''@;'; put 'put ''Um93PWZ1bmN0aW9uKHl0KXtyZXR1cm4gJHQuZ2V0Q2VsbHNNZXRhQXRSb3coeXQpfSx0aGlzLmlzQ29sdW1uTW9kaWZpY2F0aW9uQWxsb3dlZD1mdW5jdGlvbigpe3JldHVybiEoIm9iamVjdCI9PT12LmRhdGFUeXBlfHx6dC5jb2x1bW5zKX0sdGhpcy5nZXRDZWxsUmVuZGVyZXI9ZnVuY3Rp''@;'; put 'put ''b24oeXQsTnQpe2NvbnN0IFF0PSJudW1iZXIiPT10eXBlb2YgeXQ/di5nZXRDZWxsTWV0YSh5dCxOdCkucmVuZGVyZXI6eXQucmVuZGVyZXI7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBRdD9wTihRdCk6YmMoUXQpP3BOKCJ0ZXh0Iik6UXR9LHRoaXMuZ2V0Q2VsbEVkaXRvcj1mdW5jdGlvbih5''@;'; put 'put ''dCxOdCl7Y29uc3QgUXQ9Im51bWJlciI9PXR5cGVvZiB5dD92LmdldENlbGxNZXRhKHl0LE50KS5lZGl0b3I6eXQuZWRpdG9yO3JldHVybiJzdHJpbmciPT10eXBlb2YgUXQ/ZE4oUXQpOmJjKFF0KT9kTigidGV4dCIpOlF0fSx0aGlzLmdldENlbGxWYWxpZGF0b3I9ZnVuY3Rpb24oeXQsTnQp''@;'; put 'put ''e2NvbnN0IFF0PSJudW1iZXIiPT10eXBlb2YgeXQ/di5nZXRDZWxsTWV0YSh5dCxOdCkudmFsaWRhdG9yOnl0LnZhbGlkYXRvcjtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIFF0P2tKKFF0KTpRdH0sdGhpcy52YWxpZGF0ZUNlbGxzPWZ1bmN0aW9uKHl0KXt0aGlzLl92YWxpZGF0ZUNlbGxzKHl0''@;'; put 'put ''KX0sdGhpcy52YWxpZGF0ZVJvd3M9ZnVuY3Rpb24oeXQsTnQpe2lmKCFBcnJheS5pc0FycmF5KHl0KSl0aHJvdyBuZXcgRXJyb3IoInZhbGlkYXRlUm93cyBwYXJhbWV0ZXIgYHJvd3NgIG11c3QgYmUgYW4gYXJyYXkiKTt0aGlzLl92YWxpZGF0ZUNlbGxzKE50LHl0KX0sdGhpcy52YWxpZGF0''@;'; put 'put ''ZUNvbHVtbnM9ZnVuY3Rpb24oeXQsTnQpe2lmKCFBcnJheS5pc0FycmF5KHl0KSl0aHJvdyBuZXcgRXJyb3IoInZhbGlkYXRlQ29sdW1ucyBwYXJhbWV0ZXIgYGNvbHVtbnNgIG11c3QgYmUgYW4gYXJyYXkiKTt0aGlzLl92YWxpZGF0ZUNlbGxzKE50LHZvaWQgMCx5dCl9LHRoaXMuX3ZhbGlk''@;'; put 'put ''YXRlQ2VsbHM9ZnVuY3Rpb24oeXQsTnQsUXQpe2NvbnN0IExuPW5ldyBlcjt5dCYmKExuLm9uUXVldWVFbXB0eT15dCk7bGV0IGlyPXYuY291bnRSb3dzKCktMTtmb3IoO2lyPj0wOyl7aWYodm9pZCAwIT09TnQmJi0xPT09TnQuaW5kZXhPZihpcikpe2lyLT0xO2NvbnRpbnVlfWxldCBFdD12''@;'; put 'put ''LmNvdW50Q29scygpLTE7Zm9yKDtFdD49MDspdm9pZCAwPT09UXR8fC0xIT09UXQuaW5kZXhPZihFdCk/KExuLmFkZFZhbGlkYXRvclRvUXVldWUoKSx2LnZhbGlkYXRlQ2VsbCh2LmdldERhdGFBdENlbGwoaXIsRXQpLHYuZ2V0Q2VsbE1ldGEoaXIsRXQpLFh0PT57aWYoImJvb2xlYW4iIT10''@;'; put 'put ''eXBlb2YgWHQpdGhyb3cgbmV3IEVycm9yKCJWYWxpZGF0aW9uIGVycm9yOiByZXN1bHQgaXMgbm90IGJvb2xlYW4iKTshMT09PVh0JiYoTG4udmFsaWQ9ITEpLExuLnJlbW92ZVZhbGlkYXRvckZvcm1RdWV1ZSgpfSwidmFsaWRhdGVDZWxscyIpLEV0LT0xKTpFdC09MTtpci09MX1Mbi5jaGVj''@;'; put 'put ''a0lmUXVldWVJc0VtcHR5KCl9LHRoaXMuZ2V0Um93SGVhZGVyPWZ1bmN0aW9uKHl0KXtsZXQgTnQ9enQucm93SGVhZGVycyxRdD15dDtyZXR1cm4gdm9pZCAwIT09UXQmJihRdD12LnJ1bkhvb2tzKCJtb2RpZnlSb3dIZWFkZXIiLFF0KSksdm9pZCAwPT09UXQ/KE50PVtdLFFhKHYuY291bnRS''@;'; put 'put ''b3dzKCktMSxMbj0+e050LnB1c2godi5nZXRSb3dIZWFkZXIoTG4pKX0pKTpBcnJheS5pc0FycmF5KE50KSYmdm9pZCAwIT09TnRbUXRdP050PU50W1F0XTppbChOdCk/TnQ9TnQoUXQpOk50JiYic3RyaW5nIiE9dHlwZW9mIE50JiYibnVtYmVyIiE9dHlwZW9mIE50JiYoTnQ9UXQrMSksTnR9''@;'; put 'put ''LHRoaXMuaGFzUm93SGVhZGVycz1mdW5jdGlvbigpe3JldHVybiEhenQucm93SGVhZGVyc30sdGhpcy5oYXNDb2xIZWFkZXJzPWZ1bmN0aW9uKCl7aWYobnVsbCE9enQuY29sSGVhZGVycylyZXR1cm4hIXp0LmNvbEhlYWRlcnM7Zm9yKGxldCB5dD0wLE50PXYuY291bnRDb2xzKCk7eXQ8TnQ7''@;'; put 'put ''eXQrKylpZih2LmdldENvbEhlYWRlcih5dCkpcmV0dXJuITA7cmV0dXJuITF9LHRoaXMuZ2V0Q29sSGVhZGVyPWZ1bmN0aW9uKHl0KXtsZXQgTnQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOi0xO2NvbnN0IFF0PXYucnVuSG9va3MoIm1v''@;'; put 'put ''ZGlmeUNvbEhlYWRlciIseXQpO2lmKHZvaWQgMD09PVF0KXtjb25zdCBfbj1bXSxRbj12LmNvdW50Q29scygpO2ZvcihsZXQgUG49MDtQbjxRbjtQbisrKV9uLnB1c2godi5nZXRDb2xIZWFkZXIoUG4pKTtyZXR1cm4gX259bGV0IExuPXp0LmNvbEhlYWRlcnM7Y29uc3QgRXQ9di50b1BoeXNp''@;'; put 'put ''Y2FsQ29sdW1uKFF0KSxYdD1mdW5jdGlvbihfbil7Y29uc3QgUW49W10sUG49di5jb3VudENvbHMoKTtsZXQgRW49MDtmb3IoO0VuPFBuO0VuKyspaWwoenQuY29sdW1ucykmJnp0LmNvbHVtbnMoRW4pJiZRbi5wdXNoKEVuKTtyZXR1cm4gUW5bX25dfShFdCk7cmV0dXJuITE9PT16dC5jb2xI''@;'; put 'put ''ZWFkZXJzP0xuPW51bGw6enQuY29sdW1ucyYmaWwoenQuY29sdW1ucykmJnp0LmNvbHVtbnMoWHQpJiZ6dC5jb2x1bW5zKFh0KS50aXRsZT9Mbj16dC5jb2x1bW5zKFh0KS50aXRsZTp6dC5jb2x1bW5zJiZ6dC5jb2x1bW5zW0V0XSYmenQuY29sdW1uc1tFdF0udGl0bGU/TG49enQuY29sdW1u''@;'; put 'put ''c1tFdF0udGl0bGU6QXJyYXkuaXNBcnJheSh6dC5jb2xIZWFkZXJzKSYmdm9pZCAwIT09enQuY29sSGVhZGVyc1tFdF0/TG49enQuY29sSGVhZGVyc1tFdF06aWwoenQuY29sSGVhZGVycyk/TG49enQuY29sSGVhZGVycyhFdCk6enQuY29sSGVhZGVycyYmInN0cmluZyIhPXR5cGVvZiB6dC5j''@;'; put 'put ''b2xIZWFkZXJzJiYibnVtYmVyIiE9dHlwZW9mIHp0LmNvbEhlYWRlcnMmJihMbj1UTihRdCkpLExuPXYucnVuSG9va3MoIm1vZGlmeUNvbHVtbkhlYWRlclZhbHVlIixMbix5dCxOdCksTG59LHRoaXMuX2dldENvbFdpZHRoRnJvbVNldHRpbmdzPWZ1bmN0aW9uKHl0KXtsZXQgTnQ7aWYoeXQ+''@;'; put 'put ''PTAmJihOdD12LmdldENlbGxNZXRhKDAseXQpLndpZHRoKSwodm9pZCAwPT09TnR8fE50PT09enQud2lkdGgpJiYoTnQ9enQuY29sV2lkdGhzKSxudWxsIT1OdCl7c3dpdGNoKHR5cGVvZiBOdCl7Y2FzZSJvYmplY3QiOk50PU50W3l0XTticmVhaztjYXNlImZ1bmN0aW9uIjpOdD1OdCh5dCl9''@;'; put 'put ''InN0cmluZyI9PXR5cGVvZiBOdCYmKE50PU51bWJlci5wYXJzZUludChOdCwxMCkpfXJldHVybiBOdH0sdGhpcy5nZXRDb2xXaWR0aD1mdW5jdGlvbih5dCxOdCl7bGV0IFF0PXYuX2dldENvbFdpZHRoRnJvbVNldHRpbmdzKHl0KTtyZXR1cm4gUXQ9di5ydW5Ib29rcygibW9kaWZ5Q29sV2lk''@;'; put 'put ''dGgiLFF0LHl0LE50KSx2b2lkIDA9PT1RdCYmKFF0PTUwKSxRdH0sdGhpcy5fZ2V0Um93SGVpZ2h0RnJvbVNldHRpbmdzPWZ1bmN0aW9uKHl0KXt2YXIgTnQ7Y29uc3QgUXQ9di5zdHlsZXNIYW5kbGVyLmdldERlZmF1bHRSb3dIZWlnaHQoeXQpO2xldCBMbj1udWxsIT09KE50PXp0LnJvd0hl''@;'; put 'put ''aWdodHMpJiZ2b2lkIDAhPT1OdD9OdDp6dC5taW5Sb3dIZWlnaHRzO2lmKG51bGwhPUxuKXtzd2l0Y2godHlwZW9mIExuKXtjYXNlIm9iamVjdCI6TG49TG5beXRdO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOkxuPUxuKHl0KX0ic3RyaW5nIj09dHlwZW9mIExuJiYoTG49TnVtYmVyLnBhcnNlSW50''@;'; put 'put ''KExuLDEwKSl9cmV0dXJuIG51bGwhPUxuJiZMbjxRdD9RdDpMbn0sdGhpcy5nZXRSb3dIZWlnaHQ9ZnVuY3Rpb24oeXQsTnQpe2xldCBRdD12Ll9nZXRSb3dIZWlnaHRGcm9tU2V0dGluZ3MoeXQpO3JldHVybiBRdD12LnJ1bkhvb2tzKCJtb2RpZnlSb3dIZWlnaHQiLFF0LHl0LE50KSxRdH0s''@;'; put 'put ''dGhpcy5jb3VudFNvdXJjZVJvd3M9ZnVuY3Rpb24oKXtyZXR1cm4gVS5jb3VudFJvd3MoKX0sdGhpcy5jb3VudFNvdXJjZUNvbHM9ZnVuY3Rpb24oKXtyZXR1cm4gVS5jb3VudEZpcnN0Um93S2V5cygpfSx0aGlzLmNvdW50Um93cz1mdW5jdGlvbigpe3JldHVybiBELmdldExlbmd0aCgpfSx0''@;'; put 'put ''aGlzLmNvdW50Q29scz1mdW5jdGlvbigpe2NvbnN0IHl0PXp0Lm1heENvbHMsTnQ9dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpO3JldHVybiBNYXRoLm1pbih5dCxOdCl9LHRoaXMuY291bnRSZW5kZXJlZFJvd3M9ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''di52aWV3Ll93dC5kcmF3bj92LnZpZXcuX3d0Lnd0VGFibGUuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKTotMX0sdGhpcy5jb3VudFZpc2libGVSb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIHYudmlldy5fd3QuZHJhd24/di52aWV3Ll93dC53dFRhYmxlLmdldFZpc2libGVSb3dzQ291bnQoKTotMX0s''@;'; put 'put ''dGhpcy5jb3VudFJlbmRlcmVkQ29scz1mdW5jdGlvbigpe3JldHVybiB2LnZpZXcuX3d0LmRyYXduP3Yudmlldy5fd3Qud3RUYWJsZS5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpOi0xfSx0aGlzLmNvdW50VmlzaWJsZUNvbHM9ZnVuY3Rpb24oKXtyZXR1cm4gdi52aWV3Ll93dC5kcmF3bj92''@;'; put 'put ''LnZpZXcuX3d0Lnd0VGFibGUuZ2V0VmlzaWJsZUNvbHVtbnNDb3VudCgpOi0xfSx0aGlzLmNvdW50Um93SGVhZGVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZpZXcuZ2V0Um93SGVhZGVyc0NvdW50KCl9LHRoaXMuY291bnRDb2xIZWFkZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmll''@;'; put 'put ''dy5nZXRDb2x1bW5IZWFkZXJzQ291bnQoKX0sdGhpcy5jb3VudEVtcHR5Um93cz1mdW5jdGlvbigpe2xldCB5dD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLE50PTA7cmV0dXJuIFNKKHYuY291bnRSb3dzKCktMSxRdD0+e2lmKHYuaXNF''@;'; put 'put ''bXB0eVJvdyhRdCkpTnQrPTE7ZWxzZSBpZighMD09PXl0KXJldHVybiExfSksTnR9LHRoaXMuY291bnRFbXB0eUNvbHM9ZnVuY3Rpb24oKXtsZXQgeXQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSxOdD0wO3JldHVybiBTSih2LmNvdW50''@;'; put 'put ''Q29scygpLTEsUXQ9PntpZih2LmlzRW1wdHlDb2woUXQpKU50Kz0xO2Vsc2UgaWYoITA9PT15dClyZXR1cm4hMX0pLE50fSx0aGlzLmlzRW1wdHlSb3c9ZnVuY3Rpb24oeXQpe3JldHVybiB6dC5pc0VtcHR5Um93LmNhbGwodix5dCl9LHRoaXMuaXNFbXB0eUNvbD1mdW5jdGlvbih5dCl7cmV0''@;'; put 'put ''dXJuIHp0LmlzRW1wdHlDb2wuY2FsbCh2LHl0KX0sdGhpcy5zZWxlY3RDZWxsPWZ1bmN0aW9uKHl0LE50LFF0LExuKXtsZXQgaXI9IShhcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XSl8fGFyZ3VtZW50c1s0XSxFdD0hKGFyZ3VtZW50cy5sZW5ndGg+NSYmdm9pZCAw''@;'; put 'put ''IT09YXJndW1lbnRzWzVdKXx8YXJndW1lbnRzWzVdO3JldHVybiFiYyh5dCkmJiFiYyhOdCkmJnRoaXMuc2VsZWN0Q2VsbHMoW1t5dCxOdCxRdCxMbl1dLGlyLEV0KX0sdGhpcy5zZWxlY3RDZWxscz1mdW5jdGlvbigpe2xldCB5dD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3Vt''@;'; put 'put ''ZW50c1swXT9hcmd1bWVudHNbMF06W1tdXSxRdD0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdOyExPT09KCEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0pJiZ3ZS5zdXNwZW5k''@;'; put 'put ''KCk7Y29uc3QgTG49TXIuc2VsZWN0Q2VsbHMoeXQpO3JldHVybiBMbiYmUXQmJnYubGlzdGVuKCksd2UucmVzdW1lKCksTG59LHRoaXMuc2VsZWN0Q29sdW1ucz1mdW5jdGlvbih5dCl7cmV0dXJuIE1yLnNlbGVjdENvbHVtbnMoeXQsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1''@;'; put 'put ''bWVudHNbMV0/YXJndW1lbnRzWzFdOnl0LGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0sdGhpcy5zZWxlY3RSb3dzPWZ1bmN0aW9uKHl0KXtyZXR1cm4gTXIuc2VsZWN0Um93cyh5dCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1''@;'; put 'put ''bWVudHNbMV06eXQsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSx0aGlzLmRlc2VsZWN0Q2VsbD1mdW5jdGlvbigpe01yLmRlc2VsZWN0KCl9LHRoaXMuc2VsZWN0QWxsPWZ1bmN0aW9uKCl7bGV0IHl0PSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1''@;'; put 'put ''bWVudHNbMF0pfHxhcmd1bWVudHNbMF0sTnQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnl0LFF0PWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO3dlLnNraXBOZXh0U2Nyb2xsQ3ljbGUoKSxNci5zZWxlY3RBbGwo''@;'; put 'put ''eXQsTnQsUXQpfTtjb25zdCB2YT0oeXQsTnQpPT55dC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoTnQsMSwhMCk7dGhpcy5zY3JvbGxWaWV3cG9ydFRvPWZ1bmN0aW9uKHl0LE50KXt2YXIgUXQ7Im51bWJlciI9PXR5cGVvZiB5dCYmKHl0PXtyb3c6YXJndW1lbnRzWzBdLGNvbDphcmd1bWVu''@;'; put 'put ''dHNbMV0sdmVydGljYWxTbmFwOmFyZ3VtZW50c1syXT8iYm90dG9tIjoidG9wIixob3Jpem9udGFsU25hcDphcmd1bWVudHNbM10/ImVuZCI6InN0YXJ0Iixjb25zaWRlckhpZGRlbkluZGV4ZXM6bnVsbD09PShRdD1hcmd1bWVudHNbNF0pfHx2b2lkIDA9PT1RdHx8UXR9KTtjb25zdHtyb3c6''@;'; put 'put ''TG4sY29sOmlyLGNvbnNpZGVySGlkZGVuSW5kZXhlczpFdH09eXQ/P3t9O2xldCBYdD1Mbixfbj1pcjtpZihpbChOdCkmJnRoaXMuYWRkSG9va09uY2UoImFmdGVyU2Nyb2xsIixOdCksdm9pZCAwPT09RXR8fEV0KXtjb25zdCBfcj1OdW1iZXIuaXNJbnRlZ2VyKExuKSYmTG4+PTAsSG49TnVt''@;'; put 'put ''YmVyLmlzSW50ZWdlcihpcikmJmlyPj0wLHpuPV9yP3ZhKHRoaXMucm93SW5kZXhNYXBwZXIsTG4pOnZvaWQgMCxPcj1Ibj92YSh0aGlzLmNvbHVtbkluZGV4TWFwcGVyLGlyKTp2b2lkIDA7aWYobnVsbD09PXpufHxudWxsPT09T3IpcmV0dXJuITE7WHQ9X3I/di5yb3dJbmRleE1hcHBlci5n''@;'; put 'put ''ZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHpuKTpMbixfbj1Ibj92LmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoT3IpOmlyfWNvbnN0IFFuPU51bWJlci5pc0ludGVnZXIoWHQpLFBuPU51bWJlci5pc0ludGVnZXIoX24pO2xldCBFbj0hMTtyZXR1''@;'; put 'put ''cm4gUW4mJlh0Pj0wJiZQbiYmX24+PTA/RW49di52aWV3LnNjcm9sbFZpZXdwb3J0KHYuX2NyZWF0ZUNlbGxDb29yZHMoWHQsX24pLHl0Lmhvcml6b250YWxTbmFwLHl0LnZlcnRpY2FsU25hcCk6UW4mJlh0Pj0wJiYoUG4mJl9uPDB8fCFQbik/RW49di52aWV3LnNjcm9sbFZpZXdwb3J0VmVy''@;'; put 'put ''dGljYWxseShYdCx5dC52ZXJ0aWNhbFNuYXApOlBuJiZfbj49MCYmKFFuJiZYdDwwfHwhUW4pJiYoRW49di52aWV3LnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KF9uLHl0Lmhvcml6b250YWxTbmFwKSksaWwoTnQpJiYoRW4/dGhpcy52aWV3LnJlbmRlcigpOih0aGlzLnJlbW92ZUhvb2so''@;'; put 'put ''ImFmdGVyU2Nyb2xsIixOdCksdGhpcy5fcmVnaXN0ZXJNaWNyb3Rhc2soKCk9Pk50KCkpKSksRW59LHRoaXMuc2Nyb2xsVG9Gb2N1c2VkQ2VsbD1mdW5jdGlvbih5dCl7aWYoIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWQoKSlyZXR1cm4hMTtpbCh5dCkmJnRoaXMuYWRkSG9va09uY2UoImFm''@;'; put 'put ''dGVyU2Nyb2xsIix5dCk7Y29uc3R7aGlnaGxpZ2h0Ok50fT10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSxRdD10aGlzLnNjcm9sbFZpZXdwb3J0VG8oTnQudG9PYmplY3QoKSk7cmV0dXJuIFF0P3RoaXMudmlldy5yZW5kZXIoKTppbCh5dCkmJih0aGlzLnJlbW92ZUhvb2soImFmdGVy''@;'; put 'put ''U2Nyb2xsIix5dCksdGhpcy5fcmVnaXN0ZXJNaWNyb3Rhc2soKCk9Pnl0KCkpKSxRdH0sdGhpcy5kZXN0cm95PWZ1bmN0aW9uKCl7di5fY2xlYXJUaW1lb3V0cygpLHYuX2NsZWFySW1tZWRpYXRlcygpLHYudmlldyYmdi52aWV3LmRlc3Ryb3koKSxVJiZVLmRlc3Ryb3koKSxVPW51bGwsSTQo''@;'; put 'put ''dGhpcykmJihmdW5jdGlvbiBOMHQoKXswIT09ZFYmJigxPT09ZFYmJihSMi5yZW1vdmUoKSxSMj1udWxsKSxkVi09MSl9KCksdGhpcy5nZXRGb2N1c1Njb3BlTWFuYWdlcigpLmRlc3Ryb3koKSksdGhpcy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5kZXN0cm95KCksd24uY2xlYXIoKSwkdC5jbGVh''@;'; put 'put ''ckNhY2hlKCksVHRlLmRlbGV0ZSh0aGlzLmd1aWQpLE0uZGVzdHJveSgpLG9lJiZvZS5kZXN0cm95KCksdi5yb290Q29udGFpbmVyJiZ4NCh2LnJvb3RDb250YWluZXIpLHYucm9vdFBvcnRhbEVsZW1lbnQmJnYucm9vdFBvcnRhbEVsZW1lbnQucmVtb3ZlKCksdi5iYXRjaEV4ZWN1dGlvbigo''@;'; put 'put ''KT0+e3Yucm93SW5kZXhNYXBwZXIudW5yZWdpc3RlckFsbCgpLHYuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3RlckFsbCgpLGduLmdldEl0ZW1zKCkuZm9yRWFjaCh5dD0+e2xldFssTnRdPXl0O050LmRlc3Ryb3koKX0pLGduLmNsZWFyKCksdi5ydW5Ib29rcygiYWZ0ZXJEZXN0cm95Iil9''@;'; put 'put ''LCEwKSxBYS5nZXRTaW5nbGV0b24oKS5kZXN0cm95KHYpLGFzKHYsKHl0LE50LFF0KT0+e2lsKHl0KT9RdFtOdF09ZnVuY3Rpb24geGEoeXQpe3JldHVybigpPT57dGhyb3cgbmV3IEVycm9yKGBUaGUgIiR7eXR9IiBtZXRob2QgY2Fubm90IGJlIGNhbGxlZCBiZWNhdXNlIHRoaXMgSGFuZHNv''@;'; put 'put ''bnRhYmxlIGluc3RhbmNlIGhhcyBiZWVuIGRlc3Ryb3llZGApfX0oTnQpOiJndWlkIiE9PU50JiYoUXRbTnRdPW51bGwpfSksdi5pc0Rlc3Ryb3llZD0hMCxEJiZELmRlc3Ryb3koKSxEPW51bGwsdGU9bnVsbCxNcj1udWxsLG9lPW51bGwsdj1udWxsfSx0aGlzLmdldEFjdGl2ZUVkaXRvcj1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBvZS5nZXRBY3RpdmVFZGl0b3IoKX0sdGhpcy5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZVJvdz1mdW5jdGlvbigpe3JldHVybiB2LnZpZXcuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVSb3coKX0sdGhpcy5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlUm93PWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHYudmlldy5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlUm93KCl9LHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW49ZnVuY3Rpb24oKXtyZXR1cm4gdi52aWV3LmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCl9LHRoaXMuZ2V0TGFzdFJlbmRlcmVkVmlzaWJs''@;'; put 'put ''ZUNvbHVtbj1mdW5jdGlvbigpe3JldHVybiB2LnZpZXcuZ2V0TGFzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpfSx0aGlzLmdldEZpcnN0RnVsbHlWaXNpYmxlUm93PWZ1bmN0aW9uKCl7cmV0dXJuIHYudmlldy5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpfSx0aGlzLmdldExhc3RGdWxseVZp''@;'; put 'put ''c2libGVSb3c9ZnVuY3Rpb24oKXtyZXR1cm4gdi52aWV3LmdldExhc3RGdWxseVZpc2libGVSb3coKX0sdGhpcy5nZXRGaXJzdEZ1bGx5VmlzaWJsZUNvbHVtbj1mdW5jdGlvbigpe3JldHVybiB2LnZpZXcuZ2V0Rmlyc3RGdWxseVZpc2libGVDb2x1bW4oKX0sdGhpcy5nZXRMYXN0RnVsbHlW''@;'; put 'put ''aXNpYmxlQ29sdW1uPWZ1bmN0aW9uKCl7cmV0dXJuIHYudmlldy5nZXRMYXN0RnVsbHlWaXNpYmxlQ29sdW1uKCl9LHRoaXMuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93PWZ1bmN0aW9uKCl7cmV0dXJuIHYudmlldy5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKX0sdGhpcy5nZXRM''@;'; put 'put ''YXN0UGFydGlhbGx5VmlzaWJsZVJvdz1mdW5jdGlvbigpe3JldHVybiB2LnZpZXcuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKX0sdGhpcy5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW49ZnVuY3Rpb24oKXtyZXR1cm4gdi52aWV3LmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNv''@;'; put 'put ''bHVtbigpfSx0aGlzLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uPWZ1bmN0aW9uKCl7cmV0dXJuIHYudmlldy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpfSx0aGlzLmdldFBsdWdpbj1mdW5jdGlvbih5dCl7cmV0dXJuIGduLmdldEl0ZW0oVjEoeXQpKX0sdGhpcy5nZXRQ''@;'; put 'put ''bHVnaW5OYW1lPWZ1bmN0aW9uKHl0KXtyZXR1cm4geXQ9PT10aGlzLnVuZG9SZWRvP3RoaXMudW5kb1JlZG8uY29uc3RydWN0b3IuUExVR0lOX0tFWTpnbi5nZXRJZCh5dCl9LHRoaXMuZ2V0SW5zdGFuY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdn0sdGhpcy5hZGRIb29rPWZ1bmN0aW9uKHl0LE50''@;'; put 'put ''LFF0KXtBYS5nZXRTaW5nbGV0b24oKS5hZGQoeXQsTnQsdixRdCl9LHRoaXMuaGFzSG9vaz1mdW5jdGlvbih5dCl7cmV0dXJuIEFhLmdldFNpbmdsZXRvbigpLmhhcyh5dCx2KXx8QWEuZ2V0U2luZ2xldG9uKCkuaGFzKHl0KX0sdGhpcy5hZGRIb29rT25jZT1mdW5jdGlvbih5dCxOdCxRdCl7''@;'; put 'put ''QWEuZ2V0U2luZ2xldG9uKCkub25jZSh5dCxOdCx2LFF0KX0sdGhpcy5yZW1vdmVIb29rPWZ1bmN0aW9uKHl0LE50KXtBYS5nZXRTaW5nbGV0b24oKS5yZW1vdmUoeXQsTnQsdil9LHRoaXMucnVuSG9va3M9ZnVuY3Rpb24oeXQsTnQsUXQsTG4saXIsRXQsWHQpe3JldHVybiBBYS5nZXRTaW5n''@;'; put 'put ''bGV0b24oKS5ydW4odix5dCxOdCxRdCxMbixpcixFdCxYdCl9LHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZT1mdW5jdGlvbih5dCxOdCl7cmV0dXJuIGNtZSh6dC5sYW5ndWFnZSx5dCxOdCl9LHRoaXMudG9IVE1MPSgpPT5fSih0aGlzKSx0aGlzLnRvVGFibGVFbGVtZW50PSgpPT57Y29uc3Qg''@;'; put 'put ''eXQ9dGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHl0Lmluc2VydEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdpbiIsX0oodGhpcykpLHl0LmZpcnN0RWxlbWVudENoaWxkfSx0aGlzLnRpbWVvdXRzPVtdLHRoaXMudXNlVGhlbWU9eXQ9Pntjb25zdCBOdD0hIUZl''@;'; put 'put ''O3RoaXMuc3R5bGVzSGFuZGxlci51c2VUaGVtZSh5dCk7Y29uc3QgUXQ9dGhpcy5zdHlsZXNIYW5kbGVyLmdldFRoZW1lTmFtZSgpO050fHwodi5yZW5kZXIoKSx2LnNjcm9sbFZpZXdwb3J0VG8oMCwwKSwkbWUodGhpcy5yb290Q29udGFpbmVyKSYmKFZhKHRoaXMucm9vdENvbnRhaW5lciwv''@;'; put 'put ''aHQtdGhlbWUtLiovZyksUXQmJmlpKHRoaXMucm9vdENvbnRhaW5lcixRdCkpKSx0aGlzLnJ1bkhvb2tzKCJhZnRlclNldFRoZW1lIixRdCxOdCl9LHRoaXMuZ2V0Q3VycmVudFRoZW1lTmFtZT0oKT0+dGhpcy5zdHlsZXNIYW5kbGVyLmdldFRoZW1lTmFtZSgpLHRoaXMuZ2V0VGFibGVIZWln''@;'; put 'put ''aHQ9KCk9PnRoaXMucm9vdEVsZW1lbnQub2Zmc2V0SGVpZ2h0LHRoaXMuZ2V0VGFibGVXaWR0aD0oKT0+dGhpcy5yb290RWxlbWVudC5vZmZzZXRXaWR0aCx0aGlzLl9yZWdpc3RlclRpbWVvdXQ9ZnVuY3Rpb24oeXQpe2xldCBRdD15dDsiZnVuY3Rpb24iPT10eXBlb2YgUXQmJihRdD1zZXRU''@;'; put 'put ''aW1lb3V0KFF0LGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowKSksdGhpcy50aW1lb3V0cy5wdXNoKFF0KX0sdGhpcy5fY2xlYXJUaW1lb3V0cz1mdW5jdGlvbigpe0tuKHRoaXMudGltZW91dHMseXQ9PntjbGVhclRpbWVvdXQoeXQpfSl9''@;'; put 'put ''LHRoaXMuaW1tZWRpYXRlcz1bXSx0aGlzLl9yZWdpc3RlckltbWVkaWF0ZT1mdW5jdGlvbih5dCl7dGhpcy5pbW1lZGlhdGVzLnB1c2goc2V0SW1tZWRpYXRlKHl0KSl9LHRoaXMuX2NsZWFySW1tZWRpYXRlcz1mdW5jdGlvbigpe0tuKHRoaXMuaW1tZWRpYXRlcyx5dD0+e2NsZWFySW1tZWRp''@;'; put 'put ''YXRlKHl0KX0pfSx0aGlzLl9yZWdpc3Rlck1pY3JvdGFzaz1mdW5jdGlvbih5dCl7dGhpcy5yb290V2luZG93LnF1ZXVlTWljcm90YXNrKCgpPT57dGhpcy5pc0Rlc3Ryb3llZHx8eXQoKX0pfSx0aGlzLl9nZXRFZGl0b3JNYW5hZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuIG9lfTtjb25zdCBwYT0o''@;'; put 'put ''Yz0+e2xldHtvd25lcldpbmRvdzpsLGhhbmRsZUV2ZW50OmEsYmVmb3JlS2V5RG93bjpkLGFmdGVyS2V5RG93bjpofT1jO2NvbnN0IGY9S0Eoe2Vycm9ySWRFeGlzdHM6bnQ9PmBUaGUgIiR7bnR9IiBjb250ZXh0IG5hbWUgaXMgYWxyZWFkeSByZWdpc3RlcmVkLmB9KTtsZXQgdj0iZ3JpZCI7''@;'; put 'put ''Y29uc3QgTT1mdW5jdGlvbihudCl7Y29uc3QgbXQ9ZnVuY3Rpb24oYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJ0YWJsZSI7Y29uc3QgYT1LQSh7ZXJyb3JJZEV4aXN0czpVPT5gVGhlICIke1V9IiBzaG9ydGN1dCBpcyBh''@;'; put 'put ''bHJlYWR5IHJlZ2lzdGVyZWQgaW4gdGhlICIke2N9IiBjb250ZXh0LmB9KSxkPWZ1bmN0aW9uKCl7bGV0e2tleXM6VSxjYWxsYmFjazp0ZSxncm91cDpvZSxydW5Pbmx5SWY6dmU9KCk9PiEwLGNhcHR1cmVDdHJsOndlPSExLHByZXZlbnREZWZhdWx0OkZlPSEwLHN0b3BQcm9wYWdhdGlvbjpX''@;'; put 'put ''ZT0hMSxyZWxhdGl2ZVRvR3JvdXA6bnQscG9zaXRpb246ZHQsZm9yd2FyZFRvQ29udGV4dDptdH09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2lmKGJjKG9lKSl0aHJvdyBuZXcgRXJyb3IoIllvdSBuZWVkIHRvIGRlZmluZSB0aGUg''@;'; put 'put ''c2hvcnRjdXQncyBncm91cC4iKTtpZighMT09PWlsKHRlKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBzaG9ydGN1dCdzIGNhbGxiYWNrIG5lZWRzIHRvIGJlIGEgZnVuY3Rpb24uIik7aWYoITE9PT1BcnJheS5pc0FycmF5KFUpKXRocm93IG5ldyBFcnJvcihYc2BQYXNzIHRoZSBzaG9ydGN1dFwn''@;'; put 'put ''cyBrZXlzIGFzIGFuIGFycmF5IG9mIGFycmF5cyxceDIwCiAgICAgIHVzaW5nIHRoZSBLZXlib2FyZEV2ZW50LmtleSBwcm9wZXJ0aWVzOlx4MjAKICAgICAgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQva2V5L0tleV9WYWx1''@;'; put 'put ''ZXMuYCk7Y29uc3QgJHQ9e2NhbGxiYWNrOnRlLGdyb3VwOm9lLHJ1bk9ubHlJZjp2ZSxjYXB0dXJlQ3RybDp3ZSxwcmV2ZW50RGVmYXVsdDpGZSxzdG9wUHJvcGFnYXRpb246V2V9O01hKG50KSYmKCR0LnJlbGF0aXZlVG9Hcm91cD1udCwkdC5wb3NpdGlvbj1kdCksd3RlKG10KSYmKCR0LmZv''@;'; put 'put ''cndhcmRUb0NvbnRleHQ9bXQpLFUuZm9yRWFjaCh6dD0+e2NvbnN0IHluPWxWKHp0KTtpZihhLmhhc0l0ZW0oeW4pKXtjb25zdCB3bj1hLmdldEl0ZW0oeW4pO2xldCBSbj13bi5maW5kSW5kZXgoRHI9PkRyLmdyb3VwPT09bnQpOy0xIT09Um4/ImJlZm9yZSI9PT1kdD9Sbi09MTpSbis9MTpS''@;'; put 'put ''bj13bi5sZW5ndGgsd24uc3BsaWNlKFJuLDAsJHQpfWVsc2UgYS5hZGRJdGVtKHluLFskdF0pfSl9LGY9VT0+e2NvbnN0IHRlPWxWKFUpO2EucmVtb3ZlSXRlbSh0ZSl9O3JldHVybntfX2tpbmRPZjpXbWUsc2NvcGU6bCxhZGRTaG9ydGN1dDpkLGFkZFNob3J0Y3V0czpmdW5jdGlvbihVKXts''@;'; put 'put ''ZXQgdGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O1UuZm9yRWFjaChvZT0+e2FzKHRlLCh2ZSx3ZSk9PnshMT09PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvZSx3ZSkmJihvZVt3ZV09dGVbd2VdKX0pLGQo''@;'; put 'put ''b2UpfSl9LGdldFNob3J0Y3V0czpVPT57Y29uc3QgdGU9bFYoVSksb2U9YS5nZXRJdGVtKHRlKTtyZXR1cm4gTWEob2UpP29lLnNsaWNlKCk6W119LGhhc1Nob3J0Y3V0OlU9Pntjb25zdCB0ZT1sVihVKTtyZXR1cm4gYS5oYXNJdGVtKHRlKX0scmVtb3ZlU2hvcnRjdXRzQnlLZXlzOmYscmVt''@;'; put 'put ''b3ZlU2hvcnRjdXRzQnlHcm91cDpVPT57YS5nZXRJdGVtcygpLmZvckVhY2gob2U9PntsZXRbdmUsd2VdPW9lO2NvbnN0IEZlPXdlLmZpbHRlcihXZT0+V2UuZ3JvdXAhPT1VKTswPT09RmUubGVuZ3RoP2YoKGM9PmMuc3BsaXQoIisiKSkodmUpKTood2UubGVuZ3RoPTAsd2UucHVzaCguLi5G''@;'; put 'put ''ZSkpfSl9fX0obnQsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJ0YWJsZSIpO3JldHVybiBmLmFkZEl0ZW0obnQsbXQpLG10fSxEPSgpPT52LFU9bnQ9PmYuZ2V0SXRlbShudCk7bGV0IHZlPSExO2NvbnN0IHdlPWZ1bmN0aW9uKG50LGR0''@;'; put 'put ''KXtsZXQgbXQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOkQoKTtjb25zdCAkdD13dGUobXQpP210OlUobXQpO2xldCB6dD0hMTtpZighJHQuaGFzU2hvcnRjdXQoZHQpKXJldHVybiB6dDtjb25zdCB5bj0kdC5nZXRTaG9ydGN1dHMoZHQp''@;'; put 'put ''O2ZvcihsZXQgZ249MDtnbjx5bi5sZW5ndGg7Z24rKyl7Y29uc3R7Y2FsbGJhY2s6d24scnVuT25seUlmOlJuLHByZXZlbnREZWZhdWx0OkRyLHN0b3BQcm9wYWdhdGlvbjpMcixjYXB0dXJlQ3RybDpkcixmb3J3YXJkVG9Db250ZXh0Ok1yfT15bltnbl07aWYoITA9PT1SbihudCkpe2lmKHZl''@;'; put 'put ''PWRyLHp0PSExPT09d24obnQsZHQpLHZlPSExLERyJiZudC5wcmV2ZW50RGVmYXVsdCgpLExyJiYoRTIobnQpLG50LnN0b3BQcm9wYWdhdGlvbigpKSx6dClicmVhaztNciYmd2UobnQsZHQsTXIpfX1yZXR1cm4genR9LFdlPWZ1bmN0aW9uIGt1dChjLGwsYSxkLGgpe2NvbnN0IGY9d2U9PkF1''@;'; put 'put ''dC5pbmNsdWRlcyh3ZSksdj1mdW5jdGlvbih3ZSl7bGV0IEZlPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3QgV2U9W107cmV0dXJuIHdlLmFsdEtleSYmV2UucHVzaCgiYWx0IiksRmUmJih3ZS5jdHJsS2V5fHx3ZS5tZXRhS2V5''@;'; put 'put ''KT9XZS5wdXNoKCJjb250cm9sL21ldGEiKTood2UuY3RybEtleSYmV2UucHVzaCgiY29udHJvbCIpLHdlLm1ldGFLZXkmJldlLnB1c2goIm1ldGEiKSksd2Uuc2hpZnRLZXkmJldlLnB1c2goInNoaWZ0IiksV2V9LE09d2U9PntpZighMT09PWwod2UpfHwhMT09PWEod2UpfHwyMjk9PT13ZS5r''@;'; put 'put ''ZXlDb2RlfHwic3RyaW5nIiE9dHlwZW9mIHdlLmtleXx8RDYod2UpKXJldHVybjtjb25zdCBXZT1fdGUod2UpO2xldCBudD1bXTtmKFdlKXx8KG50PXYod2UpKTtjb25zdCBkdD1bV2VdLmNvbmNhdChudCk7IWgod2UsZHQpJiYock4oKSYmbnQuaW5jbHVkZXMoIm1ldGEiKXx8IXJOKCkmJm50''@;'; put 'put ''LmluY2x1ZGVzKCJjb250cm9sIikpJiZoKHdlLFtXZV0uY29uY2F0KHYod2UsITApKSksZCh3ZSl9LEQ9d2U9PntpZigic3RyaW5nIj09dHlwZW9mIHdlLmtleSl7Y29uc3QgRmU9X3RlKHdlKTtmKEZlKSYmd2sucHJlc3MoRmUpfX0sVT13ZT0+e2lmKCJzdHJpbmciPT10eXBlb2Ygd2Uua2V5''@;'; put 'put ''KXtjb25zdCBGZT1fdGUod2UpO2YoRmUpJiZ3ay5yZWxlYXNlKEZlKX19LHRlPSgpPT57d2sucmVsZWFzZUFsbCgpfTtyZXR1cm57bW91bnQ6KCk9PntsZXQgd2U9Yztmb3IoY1YrPTE7d2U7KTE9PT1jViYmKHdlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJr''@;'; put 'put ''ZXlkb3duIixEKSxDay5wdXNoKHtldmVudDoia2V5ZG93biIsbGlzdGVuZXI6RH0pLHdlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsVSksQ2sucHVzaCh7ZXZlbnQ6ImtleXVwIixsaXN0ZW5lcjpVfSkpLHdlLmRvY3VtZW50LmRvY3VtZW50RWxl''@;'; put 'put ''bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixNKSx3ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGUpLHdlPWc1KHdlKX0sdW5tb3VudDooKT0+e2xldCB3ZT1jO2ZvcihjVi09MTt3ZTspe2lmKDA9PT1jVil7Zm9yKGxldCBGZT0wO0Zl''@;'; put 'put ''PENrLmxlbmd0aDtGZSsrKXtjb25zdHtldmVudDpXZSxsaXN0ZW5lcjpudH09Q2tbRmVdO3dlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFdlLG50KX1Day5sZW5ndGg9MH13ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5l''@;'; put 'put ''cigia2V5ZG93biIsTSksd2UuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLHRlKSx3ZT1nNSh3ZSl9fSxpc1ByZXNzZWQ6d2U9PndrLmlzUHJlc3NlZCh3ZSkscmVsZWFzZVByZXNzZWRLZXlzOigpPT53ay5yZWxlYXNlQWxsKCl9fShsLG50PT57''@;'; put 'put ''Y29uc3QgZHQ9RCgpLG10PXd0ZShkdCk/ZHQ6VShkdCk7cmV0dXJuIGEobnQsbXQuc2NvcGUpfSxkLGgsd2UpO3JldHVybiBXZS5tb3VudCgpLHthZGRDb250ZXh0Ok0sZ2V0QWN0aXZlQ29udGV4dE5hbWU6RCxnZXRDb250ZXh0OlUsZ2V0T3JDcmVhdGVDb250ZXh0OmZ1bmN0aW9uKG50KXt2''@;'; put 'put ''YXIgZHQ7bGV0IG10PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToidGFibGUiO3JldHVybiBudWxsIT09KGR0PVUobnQpKSYmdm9pZCAwIT09ZHQ/ZHQ6TShudCxtdCl9LHNldEFjdGl2ZUNvbnRleHROYW1lOm50PT57aWYoIWYuaGFzSXRl''@;'; put 'put ''bShudCkpdGhyb3cgbmV3IEVycm9yKFhzYFlvdSd2ZSB0cmllZCB0byBhY3RpdmF0ZSB0aGUgIiR7bnR9IiBzaG9ydGN1dCBjb250ZXh0XHgyMAogICAgICAgIHRoYXQgZG9lcyBub3QgZXhpc3QuIEJlZm9yZSBhY3RpdmF0aW9uLCByZWdpc3RlciB0aGUgY29udGV4dCB1c2luZyB0aGUgImFk''@;'; put 'put ''ZENvbnRleHQiIG1ldGhvZC5gKTt2PW50fSxpc0N0cmxQcmVzc2VkOigpPT4hdmUmJihXZS5pc1ByZXNzZWQoImNvbnRyb2wiKXx8V2UuaXNQcmVzc2VkKCJtZXRhIikpLHJlbGVhc2VQcmVzc2VkS2V5czooKT0+V2UucmVsZWFzZVByZXNzZWRLZXlzKCksZGVzdHJveTooKT0+V2UudW5tb3Vu''@;'; put 'put ''dCgpfX0pKHtoYW5kbGVFdmVudDooKT0+di5pc0xpc3RlbmluZygpLGJlZm9yZUtleURvd246eXQ9PnRoaXMucnVuSG9va3MoImJlZm9yZUtleURvd24iLHl0KSxhZnRlcktleURvd246eXQ9Pnt0aGlzLmlzRGVzdHJveWVkfHx2LnJ1bkhvb2tzKCJhZnRlckRvY3VtZW50S2V5RG93biIseXQp''@;'; put 'put ''fSxvd25lcldpbmRvdzp0aGlzLnJvb3RXaW5kb3d9KTt0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIseXQ9PnshMT09PXl0LmN0cmxLZXkmJiExPT09eXQubWV0YUtleSYmcGEucmVsZWFzZVByZXNzZWRLZXlzKCl9KSx0aGlzLmdldFNob3J0Y3V0TWFuYWdlcj1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBwYX0sdmU9bmV3IHV1dCh2KTtjb25zdCBacj1JNCh0aGlzKT9fdXQodik6bnVsbDt0aGlzLmdldEZvY3VzTWFuYWdlcj1mdW5jdGlvbigpe3JldHVybiB2ZX0sdGhpcy5nZXRGb2N1c1Njb3BlTWFuYWdlcj1mdW5jdGlvbigpe2lmKCFJNCh2KSl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''IlRoZSBGb2N1c1Njb3BlTWFuYWdlciBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgdGhlIG1haW4gSGFuZHNvbnRhYmxlIGluc3RhbmNlLiIpO3JldHVybiBacn0sQUooKS5mb3JFYWNoKHl0PT57Y29uc3QgTnQ9WEEoeXQpO2duLmFkZEl0ZW0oeXQsbmV3IE50KHRoaXMpKX0pLGZ1bmN0aW9uIEQw''@;'; put 'put ''dChjKXtbazB0LEEwdF0uZm9yRWFjaChsPT5sKGMpKX0odiksSTQodGhpcykmJmZ1bmN0aW9uIE11dChjKXtbU3V0XS5mb3JFYWNoKGw9PmwoYykpfSh2KSxwYS5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZ3JpZCIpLEFhLmdldFNpbmdsZXRvbigpLnJ1bih2LCJjb25zdHJ1Y3QiKX1mdW5jdGlv''@;'; put 'put ''biBRbWUoYyxsLGEpe2MuYWRkRXZlbnRMaXN0ZW5lcihsLGEsITEpfWZ1bmN0aW9uIGU2ZShjLGwsYSl7Yy5yZW1vdmVFdmVudExpc3RlbmVyKGwsYSwhMSl9ZnVuY3Rpb24gZlYoYyl7cmV0dXJuIGMub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGMpfWZ1bmN0''@;'; put 'put ''aW9uIHQ2ZShjKXtjb25zdCBhPXttaW5IZWlnaHQ6MjAwLG1heEhlaWdodDozMDAsbWluV2lkdGg6MTAwLG1heFdpZHRoOjMwMCx0ZXh0Q29udGVudDpvZT0+b2UudmFsdWUsLi4uYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9fSxkPWMu''@;'; put 'put ''Ym9keSxoPWMuY3JlYXRlVGV4dE5vZGUoIiIpLGY9Yy5jcmVhdGVFbGVtZW50KCJzcGFuIik7bGV0IHY7ZnVuY3Rpb24gTSgpe3ZhciBvZSx2ZTtoLnRleHRDb250ZW50PWEudGV4dENvbnRlbnQodiksZi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGYuc3R5bGUuZm9udFNpemU9ZlYodiku''@;'; put 'put ''Zm9udFNpemUsZi5zdHlsZS5mb250RmFtaWx5PWZWKHYpLmZvbnRGYW1pbHksZi5zdHlsZS53aGl0ZVNwYWNlPSJwcmUiLGQuYXBwZW5kQ2hpbGQoZik7Y29uc3Qgd2U9cGFyc2VJbnQoKG51bGw9PT0ob2U9ZlYodikpfHx2b2lkIDA9PT1vZT92b2lkIDA6b2UucGFkZGluZ0lubGluZVN0YXJ0''@;'; put 'put ''KXx8MCwxMCksRmU9cGFyc2VJbnQoKG51bGw9PT0odmU9ZlYodikpfHx2b2lkIDA9PT12ZT92b2lkIDA6dmUucGFkZGluZ0lubGluZUVuZCl8fDAsMTApLFdlPWYuY2xpZW50V2lkdGgrd2UrRmUrMTtkLnJlbW92ZUNoaWxkKGYpO2NvbnN0IG50PXYuc3R5bGU7bnQuaGVpZ2h0PWAke2EubWlu''@;'; put 'put ''SGVpZ2h0fXB4YCxudC53aWR0aD1hLm1pbldpZHRoPldlP2Ake2EubWluV2lkdGh9cHhgOldlPmEubWF4V2lkdGg/YCR7YS5tYXhXaWR0aH1weGA6YCR7V2V9cHhgO2NvbnN0IGR0PXYuc2Nyb2xsSGVpZ2h0P3Yuc2Nyb2xsSGVpZ2h0LTE6MDthLm1pbkhlaWdodD5kdD9udC5oZWlnaHQ9YCR7''@;'; put 'put ''YS5taW5IZWlnaHR9cHhgOmEubWF4SGVpZ2h0PGR0PyhudC5oZWlnaHQ9YCR7YS5tYXhIZWlnaHR9cHhgLG50Lm92ZXJmbG93WT0idmlzaWJsZSIpOm50LmhlaWdodD1gJHtkdH1weGB9ZnVuY3Rpb24gRCgpe2MuZGVmYXVsdFZpZXcuc2V0VGltZW91dChNLDApfXJldHVybntpbml0OmZ1bmN0''@;'; put 'put ''aW9uIHRlKG9lLHZlKXtsZXQgd2U9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTt2PW9lLGZ1bmN0aW9uIFUob2Upe2lmKG9lJiZvZS5taW5IZWlnaHQpaWYoImluaGVyaXQiPT09b2UubWluSGVpZ2h0KWEubWluSGVpZ2h0PXYuY2xpZW50''@;'; put 'put ''SGVpZ2h0O2Vsc2V7Y29uc3QgdmU9cGFyc2VJbnQob2UubWluSGVpZ2h0LDEwKTtpc05hTih2ZSl8fChhLm1pbkhlaWdodD12ZSl9aWYob2UmJm9lLm1heEhlaWdodClpZigiaW5oZXJpdCI9PT1vZS5tYXhIZWlnaHQpYS5tYXhIZWlnaHQ9di5jbGllbnRIZWlnaHQ7ZWxzZXtjb25zdCB2ZT1w''@;'; put 'put ''YXJzZUludChvZS5tYXhIZWlnaHQsMTApO2lzTmFOKHZlKXx8KGEubWF4SGVpZ2h0PXZlKX1pZihvZSYmb2UubWluV2lkdGgpaWYoImluaGVyaXQiPT09b2UubWluV2lkdGgpYS5taW5XaWR0aD12LmNsaWVudFdpZHRoO2Vsc2V7Y29uc3QgdmU9cGFyc2VJbnQob2UubWluV2lkdGgsMTApO2lz''@;'; put 'put ''TmFOKHZlKXx8KGEubWluV2lkdGg9dmUpfWlmKG9lJiZvZS5tYXhXaWR0aClpZigiaW5oZXJpdCI9PT1vZS5tYXhXaWR0aClhLm1heFdpZHRoPXYuY2xpZW50V2lkdGg7ZWxzZXtjb25zdCB2ZT1wYXJzZUludChvZS5tYXhXaWR0aCwxMCk7aXNOYU4odmUpfHwoYS5tYXhXaWR0aD12ZSl9Zi5m''@;'; put 'put ''aXJzdENoaWxkfHwoZi5jbGFzc05hbWU9ImF1dG9SZXNpemUiLGYuc3R5bGUuZGlzcGxheT0iaW5saW5lLWJsb2NrIixmLmFwcGVuZENoaWxkKGgpKX0odmUpLCJURVhUQVJFQSI9PT12Lm5vZGVOYW1lJiYodi5zdHlsZS5yZXNpemU9Im5vbmUiLHYuc3R5bGUuaGVpZ2h0PWAke2EubWluSGVp''@;'; put 'put ''Z2h0fXB4YCx2LnN0eWxlLm1pbldpZHRoPWAke2EubWluV2lkdGh9cHhgLHYuc3R5bGUubWF4V2lkdGg9YCR7YS5tYXhXaWR0aH1weGAsdi5zdHlsZS5vdmVyZmxvd1k9ImhpZGRlbiIpLHdlJiYoUW1lKHYsImlucHV0IixNKSxRbWUodiwia2V5ZG93biIsRCkpLE0oKX0scmVzaXplOk0sdW5P''@;'; put 'put ''YnNlcnZlKCl7ZTZlKHYsImlucHV0IixNKSxlNmUodiwia2V5ZG93biIsRCl9fX1mdW5jdGlvbiBuNmUoYyxsKXtjb25zdCBhPXRKKGwpLGQ9bC52YWx1ZS5zcGxpdCgiXG4iKTtsZXQgaD1hLGY9MDtmb3IobGV0IHY9MDt2PGQubGVuZ3RoO3YrKyl7MCE9PXYmJihmKz1kW3YtMV0ubGVuZ3Ro''@;'; put 'put ''KzEpO2NvbnN0IEQ9ZitkW3ZdLmxlbmd0aDtpZigiaG9tZSI9PT1jP2g9ZjoiZW5kIj09PWMmJihoPUQpLGE8PUQpYnJlYWt9V0EobCxoKX1mdW5jdGlvbiBtdihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gQjB0KGMpe3ZhciBsPWZ1bmN0aW9uIGowdChjLGwpe2lmKCJvYmplY3QiIT10eXBl''@;'; put 'put ''b2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1''@;'; put 'put ''cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAs''@;'; put 'put ''Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgcFY9Imh0X2VkaXRvcl9oaWRkZW4iLHI2ZT0idGV4dEVkaXRvciI7Y2xhc3MgdnYgZXh0ZW5kcyBsQ3tzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuInRleHQifWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwp''@;'; put 'put ''LG12KHRoaXMsImV2ZW50TWFuYWdlciIsbmV3IFZmKHRoaXMpKSxtdih0aGlzLCJhdXRvUmVzaXplIix0NmUodGhpcy5ob3Qucm9vdERvY3VtZW50KSksbXYodGhpcywiVEVYVEFSRUEiLHZvaWQgMCksbXYodGhpcywidGV4dGFyZWFTdHlsZSIsdm9pZCAwKSxtdih0aGlzLCJURVhUQVJFQV9Q''@;'; put 'put ''QVJFTlQiLHZvaWQgMCksbXYodGhpcywidGV4dGFyZWFQYXJlbnRTdHlsZSIsdm9pZCAwKSxtdih0aGlzLCJsYXllckNsYXNzIix2b2lkIDApLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBWZih0aGlzKSx0aGlzLmNyZWF0ZUVsZW1lbnRzKCksdGhpcy5iaW5kRXZlbnRzKCksdGhpcy5ob3QuYWRk''@;'; put 'put ''SG9va09uY2UoImFmdGVyRGVzdHJveSIsKCk9PnRoaXMuZGVzdHJveSgpKX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLlRFWFRBUkVBLnZhbHVlfXNldFZhbHVlKGwpe3RoaXMuVEVYVEFSRUEudmFsdWU9bH1vcGVuKCl7dGhpcy5fb3BlbmVkPSEwLHRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSx0''@;'; put 'put ''aGlzLnNob3dFZGl0YWJsZUVsZW1lbnQoKSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZWRpdG9yIiksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpfWNsb3NlKCl7dGhpcy5fb3BlbmVkPSExLHRoaXMuYXV0b1Jlc2l6ZS51bk9ic2VydmUoKSxq''@;'; put 'put ''QSh0aGlzLmhvdC5yb290RG9jdW1lbnQuYWN0aXZlRWxlbWVudCx0aGlzLmhvdC5yb290RWxlbWVudCkmJnRoaXMuaG90Lmxpc3RlbigpLHRoaXMuaGlkZUVkaXRhYmxlRWxlbWVudCgpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpfXByZXBhcmUobCxhLGQsaCxmLHYpe2NvbnN0IE09dGhp''@;'; put 'put ''cy5zdGF0ZTtpZihzdXBlci5wcmVwYXJlKGwsYSxkLGgsZix2KSwhdi5yZWFkT25seSl7dGhpcy5yZWZyZXNoRGltZW5zaW9ucyghMCk7Y29uc3R7YWxsb3dJbnZhbGlkOkR9PXY7RCYmIXRoaXMuaXNPcGVuZWQoKSYmKHRoaXMuVEVYVEFSRUEudmFsdWU9IiIpLE0hPT1TdS5GSU5JU0hFRCYm''@;'; put 'put ''IXRoaXMuaXNPcGVuZWQoKSYmdGhpcy5oaWRlRWRpdGFibGVFbGVtZW50KCl9fWJlZ2luRWRpdGluZyhsLGEpe3RoaXMuc3RhdGU9PT1TdS5WSVJHSU4mJih0aGlzLlRFWFRBUkVBLnZhbHVlPSIiLHN1cGVyLmJlZ2luRWRpdGluZyhsLGEpKX1mb2N1cygpe3RoaXMuVEVYVEFSRUEuc2VsZWN0''@;'; put 'put ''KCksV0EodGhpcy5URVhUQVJFQSx0aGlzLlRFWFRBUkVBLnZhbHVlLmxlbmd0aCl9Y3JlYXRlRWxlbWVudHMoKXtjb25zdHtyb290RG9jdW1lbnQ6bH09dGhpcy5ob3Q7dGhpcy5URVhUQVJFQT1sLmNyZWF0ZUVsZW1lbnQoIlRFWFRBUkVBIiksWmEodGhpcy5URVhUQVJFQSxbWyJkYXRhLWhv''@;'; put 'put ''dC1pbnB1dCIsIiJdLCQzKC0xKV0pLGlpKHRoaXMuVEVYVEFSRUEsImhhbmRzb250YWJsZUlucHV0IiksdGhpcy50ZXh0YXJlYVN0eWxlPXRoaXMuVEVYVEFSRUEuc3R5bGUsdGhpcy50ZXh0YXJlYVN0eWxlLndpZHRoPTAsdGhpcy50ZXh0YXJlYVN0eWxlLmhlaWdodD0wLHRoaXMudGV4dGFy''@;'; put 'put ''ZWFTdHlsZS5vdmVyZmxvd1k9InZpc2libGUiLHRoaXMuVEVYVEFSRUFfUEFSRU5UPWwuY3JlYXRlRWxlbWVudCgiRElWIiksaWkodGhpcy5URVhUQVJFQV9QQVJFTlQsImhhbmRzb250YWJsZUlucHV0SG9sZGVyIiksQ28odGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNsYXNzKSYm''@;'; put 'put ''VmEodGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNsYXNzKSxpaSh0aGlzLlRFWFRBUkVBX1BBUkVOVCxwViksdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlPXRoaXMuVEVYVEFSRUFfUEFSRU5ULnN0eWxlLHRoaXMuVEVYVEFSRUFfUEFSRU5ULmFwcGVuZENoaWxkKHRoaXMuVEVYVEFS''@;'; put 'put ''RUEpLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuVEVYVEFSRUFfUEFSRU5UKX1oaWRlRWRpdGFibGVFbGVtZW50KCl7YWdlKCkmJih0aGlzLnRleHRhcmVhU3R5bGUudGV4dEluZGVudD0iLTk5OTk5cHgiKSx0aGlzLnRleHRhcmVhU3R5bGUub3ZlcmZsb3dZPSJ2aXNp''@;'; put 'put ''YmxlIix0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUub3BhY2l0eT0iMCIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLmhlaWdodD0iMXB4IixWYSh0aGlzLlRFWFRBUkVBX1BBUkVOVCx0aGlzLmxheWVyQ2xhc3MpLGlpKHRoaXMuVEVYVEFSRUFfUEFSRU5ULHBWKX1zaG93RWRpdGFibGVFbGVt''@;'; put 'put ''ZW50KCl7dGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLmhlaWdodD0iIix0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUub3ZlcmZsb3c9IiIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLnBvc2l0aW9uPSIiLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZVt0aGlzLmhvdC5pc1J0bCgpPyJsZWZ0Ijoi''@;'; put 'put ''cmlnaHQiXT0iYXV0byIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLm9wYWNpdHk9IjEiLHRoaXMudGV4dGFyZWFTdHlsZS50ZXh0SW5kZW50PSIiO2NvbnN0IGw9dGhpcy5URVhUQVJFQV9QQVJFTlQuY2hpbGROb2RlcztsZXQgYT0hMTtRYShsLmxlbmd0aC0xLGQ9PntpZihDbyhsW2RdLCJo''@;'; put 'put ''YW5kc29udGFibGVFZGl0b3IiKSlyZXR1cm4gYT0hMCwhMX0pLENvKHRoaXMuVEVYVEFSRUFfUEFSRU5ULHBWKSYmVmEodGhpcy5URVhUQVJFQV9QQVJFTlQscFYpLGE/KHRoaXMubGF5ZXJDbGFzcz0iaHRfZWRpdG9yX3Zpc2libGUiLGlpKHRoaXMuVEVYVEFSRUFfUEFSRU5ULHRoaXMubGF5''@;'; put 'put ''ZXJDbGFzcykpOih0aGlzLmxheWVyQ2xhc3M9dGhpcy5nZXRFZGl0ZWRDZWxsc0xheWVyQ2xhc3MoKSxpaSh0aGlzLlRFWFRBUkVBX1BBUkVOVCx0aGlzLmxheWVyQ2xhc3MpKX1yZWZyZXNoVmFsdWUoKXtjb25zdCBsPXRoaXMuaG90LnRvUGh5c2ljYWxSb3codGhpcy5yb3cpLGE9dGhpcy5o''@;'; put 'put ''b3QuZ2V0U291cmNlRGF0YUF0Q2VsbChsLHRoaXMuY29sKTt0aGlzLm9yaWdpbmFsVmFsdWU9YSx0aGlzLnNldFZhbHVlKGEpLHRoaXMucmVmcmVzaERpbWVuc2lvbnMoKX1yZWZyZXNoRGltZW5zaW9ucygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBd''@;'; put 'put ''JiZhcmd1bWVudHNbMF07aWYodGhpcy5zdGF0ZSE9PVN1LkVESVRJTkcmJiFsKXJldHVybjtpZih0aGlzLlREPXRoaXMuZ2V0RWRpdGVkQ2VsbCgpLCF0aGlzLlREKXJldHVybiB2b2lkKGx8fHRoaXMuY2xvc2UoKSk7Y29uc3R7dG9wOmEsc3RhcnQ6ZCx3aWR0aDpoLG1heFdpZHRoOmYsaGVp''@;'; put 'put ''Z2h0OnYsbWF4SGVpZ2h0Ok19PXRoaXMuZ2V0RWRpdGVkQ2VsbFJlY3QoKTt0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUudG9wPWAke2F9cHhgLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZVt0aGlzLmhvdC5pc1J0bCgpPyJyaWdodCI6ImxlZnQiXT1gJHtkfXB4YCx0aGlzLnNob3dFZGl0YWJs''@;'; put 'put ''ZUVsZW1lbnQoKTtjb25zdCBEPXRoaXMuaG90LnJvb3RXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLlREKTt0aGlzLlRFWFRBUkVBLnN0eWxlLmZvbnRTaXplPUQuZm9udFNpemUsdGhpcy5URVhUQVJFQS5zdHlsZS5mb250RmFtaWx5PUQuZm9udEZhbWlseSx0aGlzLlRFWFRBUkVBLnN0''@;'; put 'put ''eWxlLmJhY2tncm91bmRDb2xvcj10aGlzLlRELnN0eWxlLmJhY2tncm91bmRDb2xvcix0aGlzLmF1dG9SZXNpemUuaW5pdCh0aGlzLlRFWFRBUkVBLHttaW5XaWR0aDpNYXRoLm1pbihoLGYpLG1pbkhlaWdodDpNYXRoLm1pbih2LE0pLG1heFdpZHRoOmYsbWF4SGVpZ2h0Ok19LCEwKX1iaW5k''@;'; put 'put ''RXZlbnRzKCl7WHEoKSYmdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLlRFWFRBUkVBLCJmb2N1c291dCIsKCk9PnRoaXMuZmluaXNoRWRpdGluZyghMSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNp''@;'; put 'put ''b25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKSx0aGlzLmFkZEhvb2soImFmdGVyQ29sdW1uUmVzaXplIiwoKT0+e3RoaXMucmVmcmVzaERpbWVuc2lvbnMoKSx0aGlzLnN0YXRlPT09U3UuRURJVElORyYmdGhp''@;'; put 'put ''cy5mb2N1cygpfSksdGhpcy5hZGRIb29rKCJhZnRlclJvd1Jlc2l6ZSIsKCk9Pnt0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCksdGhpcy5zdGF0ZT09PVN1LkVESVRJTkcmJnRoaXMuZm9jdXMoKX0pfWRlc3Ryb3koKXt0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCksdGhpcy5jbGVhckhvb2tz''@;'; put 'put ''KCl9cmVnaXN0ZXJTaG9ydGN1dHMoKXtjb25zdCBhPXRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLGg9KCk9Pnt0aGlzLmhvdC5yb290RG9jdW1lbnQuZXhlY0NvbW1hbmQoImluc2VydFRleHQiLCExLCJcbiIpfTthLmFkZFNob3J0Y3V0cyhbe2tl''@;'; put 'put ''eXM6W1siQ29udHJvbCIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT4oaCgpLCExKSxydW5Pbmx5SWY6Zj0+IXRoaXMuaG90LnNlbGVjdGlvbi5pc011bHRpcGxlKCkmJiFmLmFsdEtleX0se2tleXM6W1siTWV0YSIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT4oaCgpLCExKSxydW5Pbmx5SWY6KCk9''@;'; put 'put ''PiF0aGlzLmhvdC5zZWxlY3Rpb24uaXNNdWx0aXBsZSgpfSx7a2V5czpbWyJBbHQiLCJFbnRlciJdXSxjYWxsYmFjazooKT0+KGgoKSwhMSl9LHtrZXlzOltbIkhvbWUiXV0sY2FsbGJhY2s6KGYsdik9PntsZXRbTV09djtuNmUoTSx0aGlzLlRFWFRBUkVBKX19LHtrZXlzOltbIkVuZCJdXSxj''@;'; put 'put ''YWxsYmFjazooZix2KT0+e2xldFtNXT12O242ZShNLHRoaXMuVEVYVEFSRUEpfX1dLHtydW5Pbmx5SWY6KCk9Pk1hKHRoaXMuaG90LmdldFNlbGVjdGVkKCkpLGdyb3VwOnI2ZX0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0''@;'; put 'put ''KCJlZGl0b3IiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKHI2ZSl9fWZ1bmN0aW9uIEVrKGMsbCxhLGQsaCxmLHYpe2NvbnN0IE09di5hcmlhVGFncyxEPVtdLFU9W10sdGU9W10sb2U9W107di5jbGFzc05hbWUmJmlpKGwsdi5jbGFzc05hbWUpLHYucmVhZE9ubHk/KEQucHVzaCh2LnJlYWRP''@;'; put 'put ''bmx5Q2VsbENsYXNzTmFtZSksTSYmb2UucHVzaChbImFyaWEtcmVhZG9ubHkiLCJ0cnVlIl0pKTpNJiZ0ZS5wdXNoKCJhcmlhLXJlYWRvbmx5IiksITE9PT12LnZhbGlkJiZ2LmludmFsaWRDZWxsQ2xhc3NOYW1lPyhELnB1c2godi5pbnZhbGlkQ2VsbENsYXNzTmFtZSksTSYmb2UucHVzaChb''@;'; put 'put ''ImFyaWEtaW52YWxpZCIsInRydWUiXSkpOihVLnB1c2godi5pbnZhbGlkQ2VsbENsYXNzTmFtZSksTSYmdGUucHVzaCgiYXJpYS1pbnZhbGlkIikpLCExPT09di53b3JkV3JhcCYmdi5ub1dvcmRXcmFwQ2xhc3NOYW1lJiZELnB1c2godi5ub1dvcmRXcmFwQ2xhc3NOYW1lKSwhZiYmdi5wbGFj''@;'; put 'put ''ZWhvbGRlciYmRC5wdXNoKHYucGxhY2Vob2xkZXJDZWxsQ2xhc3NOYW1lKSx2LnRleHRFbGxpcHNpcyYmRC5wdXNoKCJodFRleHRFbGxpcHNpcyIpLFZhKGwsVSksaWkobCxEKSxNNChsLHRlKSxaYShsLG9lKX1mdW5jdGlvbiB4NShjLGwsYSxkLGgsZix2KXtFay5hcHBseSh0aGlzLFtjLGws''@;'; put 'put ''YSxkLGgsZix2XSk7bGV0IE09ZjshTSYmdi5wbGFjZWhvbGRlciYmKE09di5wbGFjZWhvbGRlciksTT1yYyhNKSx2LnRyaW1XaGl0ZXNwYWNlJiYoTT1NLnRyaW0oKSksQTYobCxNKX1Fay5SRU5ERVJFUl9UWVBFPSJiYXNlIix4NS5SRU5ERVJFUl9UWVBFPSJ0ZXh0Ijtjb25zdCBpNmU9e0NF''@;'; put 'put ''TExfVFlQRToidGV4dCIsZWRpdG9yOnZ2LHJlbmRlcmVyOng1fTtmdW5jdGlvbiBpcChjLGwpe2NvbnN0IGE9bmV3IEptZShjLGx8fHt9LGVRKTtyZXR1cm4gYS5pbml0KCksYX1XZihpNmUpLGlwLmVkaXRvcnM9e0Jhc2VFZGl0b3I6bEN9LGlwLkNvcmU9ZnVuY3Rpb24oYyl7cmV0dXJuIG5l''@;'; put 'put ''dyBKbWUoYyxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sZVEpfSxpcC5EZWZhdWx0U2V0dGluZ3M9TW1lKCksaXAuaG9va3M9QWEuZ2V0U2luZ2xldG9uKCksaXAuQ2VsbENvb3Jkcz1iTixpcC5DZWxsUmFuZ2U9X04saXAucGFja2Fn''@;'; put 'put ''ZU5hbWU9ImhhbmRzb250YWJsZSIsaXAuYnVpbGREYXRlPSIyMC8xMS8yMDI1IDEzOjI2OjU0IixpcC52ZXJzaW9uPSIxNi4yLjAiLGlwLmxhbmd1YWdlcz17ZGljdGlvbmFyeUtleXM6Q2x0LGdldExhbmd1YWdlRGljdGlvbmFyeTpsbWUsZ2V0TGFuZ3VhZ2VzRGljdGlvbmFyaWVzOmZ1bmN0''@;'; put 'put ''aW9uIFRsdCgpe3JldHVybiB4bHQoKX0scmVnaXN0ZXJMYW5ndWFnZURpY3Rpb25hcnk6c21lLGdldFRyYW5zbGF0ZWRQaHJhc2U6Y21lfTtjb25zdCB2cz1pcDtmdW5jdGlvbiBhNmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEcwdChjKXt2YXIgbD1mdW5jdGlvbiAkMHQoYyxsKXtpZigi''@;'; put 'put ''b2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0''@;'; put 'put ''aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxl''@;'; put 'put ''bnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IG82ZT0iaGFuZHNvbnRhYmxlRWRpdG9yIjtjbGFzcyBBdGUgZXh0ZW5kcyB2dntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksYTZlKHRoaXMsImlzRmxpcHBlZFZlcnRpY2Fs''@;'; put 'put ''bHkiLCExKSxhNmUodGhpcywiaXNGbGlwcGVkSG9yaXpvbnRhbGx5IiwhMSl9c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJoYW5kc29udGFibGUifW9wZW4oKXtzdXBlci5vcGVuKCk7Y29uc3QgbD10aGlzLmh0Q29udGFpbmVyLnN0eWxlO3RoaXMuaHRFZGl0b3ImJih0aGlzLmh0''@;'; put 'put ''RWRpdG9yLmRlc3Ryb3koKSxsLndpZHRoPSIiLGwuaGVpZ2h0PSIiLGwub3ZlcmZsb3c9IiIpLCJub25lIj09PWwuZGlzcGxheSYmKGwuZGlzcGxheT0iIiksdGhpcy5odEVkaXRvcj1uZXcgdGhpcy5ob3QuY29uc3RydWN0b3IodGhpcy5odENvbnRhaW5lcix0aGlzLmh0T3B0aW9ucyksdGhp''@;'; put 'put ''cy5odEVkaXRvci5pbml0KCksdGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZS5kaXNwbGF5PSIiLHRoaXMuY2VsbFByb3BlcnRpZXMuc3RyaWN0P3RoaXMuaHRFZGl0b3Iuc2VsZWN0Q2VsbCgwLDApOnRoaXMuaHRFZGl0b3IuZGVzZWxlY3RDZWxsKCksV0EodGhpcy5URVhUQVJFQSww''@;'; put 'put ''LHRoaXMuVEVYVEFSRUEudmFsdWUubGVuZ3RoKSx0aGlzLmh0RWRpdG9yLnVwZGF0ZVNldHRpbmdzKHt3aWR0aDp0aGlzLmdldFRhcmdldERyb3Bkb3duV2lkdGgoKSxoZWlnaHQ6dGhpcy5nZXRUYXJnZXREcm9wZG93bkhlaWdodCgpfSksdGhpcy5yZWZyZXNoRGltZW5zaW9ucygpLHRoaXMu''@;'; put 'put ''ZmxpcERyb3Bkb3duVmVydGljYWxseUlmTmVlZGVkKCksdGhpcy5mbGlwRHJvcGRvd25Ib3Jpem9udGFsbHlJZk5lZWRlZCgpfWNsb3NlKCl7dGhpcy5odEVkaXRvciYmKHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGUuZGlzcGxheT0ibm9uZSIpLHRoaXMucmVtb3ZlSG9va3NCeUtl''@;'; put 'put ''eSgiYmVmb3JlS2V5RG93biIpLHN1cGVyLmNsb3NlKCl9cHJlcGFyZShsLGEsZCxoLGYsdil7c3VwZXIucHJlcGFyZShsLGEsZCxoLGYsdik7Y29uc3QgTT10aGlzLEQ9e3N0YXJ0Um93czowLHN0YXJ0Q29sczowLG1pblJvd3M6MCxtaW5Db2xzOjAsY2xhc3NOYW1lOiJsaXN0Ym94Iixjb3B5''@;'; put 'put ''UGFzdGU6ITEsYXV0b0NvbHVtblNpemU6ITEsYXV0b1Jvd1NpemU6ITEscmVhZE9ubHk6ITAsZmlsbEhhbmRsZTohMSxhdXRvV3JhcENvbDohMSxhdXRvV3JhcFJvdzohMSxhcmlhVGFnczohMSx0aGVtZU5hbWU6dGhpcy5ob3QuZ2V0Q3VycmVudFRoZW1lTmFtZSgpLGFmdGVyT25DZWxsTW91''@;'; put 'put ''c2VEb3duKFUsdGUpe2NvbnN0IG9lPXRoaXMuZ2V0U291cmNlRGF0YSh0ZS5yb3csdGUuY29sKTt2b2lkIDAhPT1vZSYmTS5zZXRWYWx1ZShvZSksTS5ob3QuZGVzdHJveUVkaXRvcigpfSxwcmV2ZW50V2hlZWw6ITAsbGF5b3V0RGlyZWN0aW9uOnRoaXMuaG90LmlzUnRsKCk/InJ0bCI6Imx0''@;'; put 'put ''ciJ9O3RoaXMuY2VsbFByb3BlcnRpZXMuaGFuZHNvbnRhYmxlJiZQdShELHYuaGFuZHNvbnRhYmxlKSx0aGlzLmh0T3B0aW9ucz1EfWJlZ2luRWRpdGluZyhsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5vbkJlZ2luRWRpdGluZztkJiYhMT09PWQoKXx8c3VwZXIuYmVnaW5F''@;'; put 'put ''ZGl0aW5nKGwsYSl9Y3JlYXRlRWxlbWVudHMoKXtzdXBlci5jcmVhdGVFbGVtZW50cygpO2NvbnN0IGw9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpO2wuY2xhc3NOYW1lPSJoYW5kc29udGFibGVFZGl0b3IiLHRoaXMuVEVYVEFSRUFfUEFSRU5ULmFwcGVuZENo''@;'; put 'put ''aWxkKGwpLHRoaXMuaHRDb250YWluZXI9bCx0aGlzLmFzc2lnbkhvb2tzKCl9ZmluaXNoRWRpdGluZyhsLGEsZCl7aWYodGhpcy5odEVkaXRvciYmdGhpcy5odEVkaXRvci5pc0xpc3RlbmluZygpJiZ0aGlzLmhvdC5saXN0ZW4oKSx0aGlzLmh0RWRpdG9yJiZ0aGlzLmh0RWRpdG9yLmdldFNl''@;'; put 'put ''bGVjdGVkQWN0aXZlKCkpe2NvbnN0IGg9dGhpcy5odEVkaXRvci5nZXRWYWx1ZSgpO3ZvaWQgMCE9PWgmJnRoaXMuc2V0VmFsdWUoaCl9c3VwZXIuZmluaXNoRWRpdGluZyhsLGEsZCl9ZmxpcERyb3Bkb3duVmVydGljYWxseUlmTmVlZGVkKCl7Y29uc3R7dmlldzpsfT10aGlzLmhvdCxhPXRo''@;'; put 'put ''aXMuZ2V0RWRpdGVkQ2VsbFJlY3QoKTtsZXQgZD1hLnRvcDtpZihsLmlzVmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdygpKXtjb25zdCBNPWwuZ2V0VGFibGVPZmZzZXQoKS50b3AtdGhpcy5ob3Qucm9vdFdpbmRvdy5zY3JvbGxZO2Q9TWF0aC5tYXgoZCtNLDApfWNvbnN0IGg9dGhpcy5n''@;'; put 'put ''ZXREcm9wZG93bkhlaWdodCgpLGY9bC5nZXRXb3Jrc3BhY2VIZWlnaHQoKS1kLWEuaGVpZ2h0LHY9aD5mJiZkPmYrYS5oZWlnaHQ7cmV0dXJuIHY/dGhpcy5mbGlwRHJvcGRvd25WZXJ0aWNhbGx5KCk6dGhpcy51bmZsaXBEcm9wZG93blZlcnRpY2FsbHkoKSx7aXNGbGlwcGVkOnYsc3BhY2VB''@;'; put 'put ''Ym92ZTpkLHNwYWNlQmVsb3c6Zn19ZmxpcERyb3Bkb3duVmVydGljYWxseSgpe2NvbnN0IGw9dGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZTtsLnBvc2l0aW9uPSJhYnNvbHV0ZSIsbC50b3A9LXRoaXMuZ2V0RHJvcGRvd25IZWlnaHQoKSsicHgiLHRoaXMuaXNGbGlwcGVkVmVydGlj''@;'; put 'put ''YWxseT0hMH11bmZsaXBEcm9wZG93blZlcnRpY2FsbHkoKXtjb25zdCBsPXRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGU7bC5wb3NpdGlvbj0iYWJzb2x1dGUiLGwudG9wPSIiLHRoaXMuaXNGbGlwcGVkVmVydGljYWxseT0hMX1mbGlwRHJvcGRvd25Ib3Jpem9udGFsbHlJZk5lZWRl''@;'; put 'put ''ZCgpe2NvbnN0e3ZpZXc6bH09dGhpcy5ob3QsYT10aGlzLmdldEVkaXRlZENlbGxSZWN0KCk7bGV0IGQ9YS5zdGFydCthLndpZHRoO2lmKGwuaXNIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKSl7Y29uc3QgTT1sLmdldFRhYmxlT2Zmc2V0KCkubGVmdC10aGlzLmhvdC5yb290V2lu''@;'; put 'put ''ZG93LnNjcm9sbFg7ZD1NYXRoLm1heChkK00sMCl9Y29uc3QgaD10aGlzLmdldERyb3Bkb3duV2lkdGgoKSxmPWwuZ2V0V29ya3NwYWNlV2lkdGgoKS1kK2Eud2lkdGgsdj1oPmYmJmQ+ZjtyZXR1cm4gdj90aGlzLmZsaXBEcm9wZG93bkhvcml6b250YWxseSgpOnRoaXMudW5mbGlwRHJvcGRv''@;'; put 'put ''d25Ib3Jpem9udGFsbHkoKSx7aXNGbGlwcGVkOnYsc3BhY2VJbmxpbmVTdGFydDpkLHNwYWNlSW5saW5lRW5kOmZ9fWZsaXBEcm9wZG93bkhvcml6b250YWxseSgpe2NvbnN0IGw9dGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZSx7d2lkdGg6YX09dGhpcy5nZXRFZGl0ZWRDZWxsUmVj''@;'; put 'put ''dCgpO2wucG9zaXRpb249ImFic29sdXRlIixsW3RoaXMuaG90LmlzUnRsKCk/InJpZ2h0IjoibGVmdCJdPS0odGhpcy5nZXREcm9wZG93bldpZHRoKCktYSkrInB4Iix0aGlzLmlzRmxpcHBlZEhvcml6b250YWxseT0hMH11bmZsaXBEcm9wZG93bkhvcml6b250YWxseSgpe2NvbnN0IGw9dGhp''@;'; put 'put ''cy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZTtsLnBvc2l0aW9uPSJhYnNvbHV0ZSIsbFt0aGlzLmhvdC5pc1J0bCgpPyJyaWdodCI6ImxlZnQiXT0iIix0aGlzLmlzRmxpcHBlZEhvcml6b250YWxseT0hMX1nZXREcm9wZG93bkhlaWdodCgpe3JldHVybiB0aGlzLmh0RWRpdG9yLmdldFRh''@;'; put 'put ''YmxlSGVpZ2h0KCl9Z2V0RHJvcGRvd25XaWR0aCgpe3JldHVybiB0aGlzLmh0RWRpdG9yLmdldFRhYmxlV2lkdGgoKX1nZXRUYXJnZXREcm9wZG93bldpZHRoKCl7cmV0dXJuIHRoaXMuaHRFZGl0b3Iudmlldy5nZXRUYWJsZVdpZHRoKCl9Z2V0VGFyZ2V0RHJvcGRvd25IZWlnaHQoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5odEVkaXRvci52aWV3LmdldFRhYmxlSGVpZ2h0KCkrMX1hc3NpZ25Ib29rcygpe3RoaXMuaG90LmFkZEhvb2soImFmdGVyRGVzdHJveSIsKCk9Pnt2YXIgbDtudWxsPT09KGw9dGhpcy5odEVkaXRvcil8fHZvaWQgMD09PWx8fGwuZGVzdHJveSgpfSksdGhpcy5ob3QuYWRkSG9v''@;'; put 'put ''aygiYWZ0ZXJTZXRUaGVtZSIsKGwsYSk9PnthfHx0aGlzLmNsb3NlKCl9KX1yZWdpc3RlclNob3J0Y3V0cygpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIik7c3VwZXIucmVnaXN0ZXJTaG9ydGN1dHMoKTtjb25zdCBoPShmLHYpPT57''@;'; put 'put ''Y29uc3QgTT10aGlzLmh0RWRpdG9yO2lmKHZvaWQgMCE9PWYmJihmPDB8fHRoaXMuaXNGbGlwcGVkVmVydGljYWxseSYmZj5NLmNvdW50Um93cygpLTE/TS5kZXNlbGVjdENlbGwoKTpNLnNlbGVjdENlbGwoZiwwKSxNLmdldERhdGEoKS5sZW5ndGgpKXJldHVybiB2LnByZXZlbnREZWZhdWx0''@;'; put 'put ''KCksRTIodiksdGhpcy5ob3QubGlzdGVuKCksdGhpcy5URVhUQVJFQS5mb2N1cygpLCExfTthLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siQXJyb3dVcCJdXSxjYWxsYmFjazpmPT57Y29uc3Qgdj10aGlzLmh0RWRpdG9yO2xldCBNLEQ7cmV0dXJuIXYuZ2V0U2VsZWN0ZWRBY3RpdmUoKSYmdGhp''@;'; put 'put ''cy5pc0ZsaXBwZWRWZXJ0aWNhbGx5P009di5jb3VudFJvd3MoKS0xOnYuZ2V0U2VsZWN0ZWRBY3RpdmUoKSYmKHRoaXMuaXNGbGlwcGVkVmVydGljYWxseT8oRD12LmdldFNlbGVjdGVkQWN0aXZlKClbMF0sTT1NYXRoLm1heCgwLEQtMSkpOihEPXYuZ2V0U2VsZWN0ZWRBY3RpdmUoKVswXSxN''@;'; put 'put ''PUQtMSkpLGgoTSxmKX0scHJldmVudERlZmF1bHQ6ITF9LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazpmPT57Y29uc3Qgdj10aGlzLmh0RWRpdG9yO2xldCBNLEQ7aWYodi5nZXRTZWxlY3RlZEFjdGl2ZSgpfHx0aGlzLmlzRmxpcHBlZFZlcnRpY2FsbHkpe2lmKHYuZ2V0U2VsZWN0''@;'; put 'put ''ZWRBY3RpdmUoKSlpZih0aGlzLmlzRmxpcHBlZFZlcnRpY2FsbHkpTT12LmdldFNlbGVjdGVkQWN0aXZlKClbMF0rMTtlbHNlIGlmKCF0aGlzLmlzRmxpcHBlZFZlcnRpY2FsbHkpe2NvbnN0IFU9di5jb3VudFJvd3MoKS0xO0Q9di5nZXRTZWxlY3RlZEFjdGl2ZSgpWzBdLE09TWF0aC5taW4o''@;'; put 'put ''VSxEKzEpfX1lbHNlIE09MDtyZXR1cm4gaChNLGYpfSxwcmV2ZW50RGVmYXVsdDohMX1dLHtncm91cDpvNmUscmVsYXRpdmVUb0dyb3VwOk42LHBvc2l0aW9uOiJiZWZvcmUifSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3N1cGVyLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSx0aGlzLmhvdC5nZXRT''@;'; put 'put ''aG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKG82ZSl9fWZ1bmN0aW9uIHM2ZShjLGwsYSl7bDZlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBsNmUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3Qg''@;'; put 'put ''aW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGt0ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gcTB0KGMpe3ZhciBsPWZ1bmN0aW9uIEowdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFy''@;'; put 'put ''IGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUu''@;'; put 'put ''Iil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRh''@;'; put 'put ''YmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gRHRlKGMsbCl7cmV0dXJuIGMuZ2V0KEI2KGMsbCkpfWZ1bmN0aW9uIEI2KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9y''@;'; put 'put ''KCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgSXRlPW5ldyBXZWFrTWFwLGM2ZT1uZXcgV2Vha01hcCxqNj1uZXcgV2Vha1NldDtjbGFzcyBSdGUgZXh0ZW5kcyBBdGV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9u''@;'; put 'put ''IFgwdChjLGwpe2w2ZShjLGwpLGwuYWRkKGMpfSh0aGlzLGo2KSxrdGUodGhpcywicXVlcnkiLG51bGwpLGt0ZSh0aGlzLCJzdHJpcHBlZENob2ljZXMiLFtdKSxrdGUodGhpcywicmF3Q2hvaWNlcyIsW10pLHM2ZSh0aGlzLEl0ZSx0aGlzLmhvdC5ndWlkLnNsaWNlKDAsOSkpLHM2ZSh0aGlz''@;'; put 'put ''LGM2ZSwkQSgoKT0+e3RoaXMuZm9jdXMoKX0sMTAwKSl9c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJhdXRvY29tcGxldGUifWdldFZhbHVlKCl7Y29uc3QgbD10aGlzLnJhd0Nob2ljZXMuZmluZChhPT57Y29uc3QgZD10aGlzLnN0cmlwVmFsdWVJZk5lZWRlZChhKTtyZXR1cm4o''@;'; put 'put ''QjYoajYsdGhpcyxUaykuY2FsbCh0aGlzLGQpP2QudmFsdWU6ZCk9PT10aGlzLlRFWFRBUkVBLnZhbHVlfSk7cmV0dXJuIE1hKGwpP2w6dGhpcy5URVhUQVJFQS52YWx1ZX1jcmVhdGVFbGVtZW50cygpe3N1cGVyLmNyZWF0ZUVsZW1lbnRzKCksaWkodGhpcy5odENvbnRhaW5lciwiYXV0b2Nv''@;'; put 'put ''bXBsZXRlRWRpdG9yIiksaWkodGhpcy5odENvbnRhaW5lciwtMT09PXRoaXMuaG90LnJvb3RXaW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLmluZGV4T2YoIk1hYyIpPyIiOiJodE1hY1Njcm9sbCIpLHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJlphKHRoaXMuVEVYVEFSRUEsW1si''@;'; put 'put ''dHlwZSIsInRleHQiXSxbInJvbGUiLCJjb21ib2JveCJdLFk0ZSgibGlzdGJveCIpLFsiYXJpYS1hdXRvY29tcGxldGUiLCJsaXN0Il1dKX1wcmVwYXJlKGwsYSxkLGgsZix2KXtzdXBlci5wcmVwYXJlKGwsYSxkLGgsZix2KSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiZaYSh0''@;'; put 'put ''aGlzLlRFWFRBUkVBLFtGZigiZmFsc2UiKSxUcnQoYCR7RHRlKEl0ZSx0aGlzKX0tbGlzdGJveC0ke2x9LSR7YX1gKV0pLHRoaXMuaHRPcHRpb25zPXsuLi50aGlzLmh0T3B0aW9ucyx2YWx1ZUdldHRlcjpNPT5CNihqNix0aGlzLFRrKS5jYWxsKHRoaXMsTSk/TS52YWx1ZTpNfX1vcGVuKCl7''@;'; put 'put ''c3VwZXIub3BlbigpO2NvbnN0IGw9dm9pZCAwPT09dGhpcy5jZWxsUHJvcGVydGllcy50cmltRHJvcGRvd258fHRoaXMuY2VsbFByb3BlcnRpZXMudHJpbURyb3Bkb3duLGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyxkPUFycmF5LmlzQXJyYXkodGhpcy5jZWxsUHJvcGVydGll''@;'; put 'put ''cy5zb3VyY2UpP3RoaXMuY2VsbFByb3BlcnRpZXMuc291cmNlOm51bGwsaD1kPy5sZW5ndGgse3JvdzpmLGNvbDp2fT10aGlzO3RoaXMuc2hvd0VkaXRhYmxlRWxlbWVudCgpLHRoaXMuZm9jdXMoKSx0aGlzLmFkZEhvb2soImJlZm9yZUtleURvd24iLE09PnRoaXMub25CZWZvcmVLZXlEb3du''@;'; put 'put ''KE0pKSx0aGlzLmh0RWRpdG9yLmFkZEhvb2soImFmdGVyU2Nyb2xsIixEdGUoYzZlLHRoaXMpKSx0aGlzLmh0RWRpdG9yLnVwZGF0ZVNldHRpbmdzKHtjb2xXaWR0aHM6bD9bX3UodGhpcy5URVhUQVJFQSktMl06dm9pZCAwLGF1dG9Db2x1bW5TaXplOiEwLHJlbmRlcmVyOihNLEQsVSx0ZSxv''@;'; put 'put ''ZSx2ZSx3ZSk9Pnt4NShNLEQsVSx0ZSxvZSx2ZSx3ZSk7Y29uc3R7ZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZTpGZSxhbGxvd0h0bWw6V2UsbG9jYWxlOm50fT10aGlzLmNlbGxQcm9wZXJ0aWVzLGR0PXRoaXMucXVlcnk7bGV0ICR0LHp0LG10PXJjKHZlKTttdCYmIVdlJiYoJHQ9ITA9PT1GZT9t''@;'; put 'put ''dC5pbmRleE9mKGR0KTptdC50b0xvY2FsZUxvd2VyQ2FzZShudCkuaW5kZXhPZihkdC50b0xvY2FsZUxvd2VyQ2FzZShudCkpLC0xIT09JHQmJih6dD1tdC5zdWJzdHIoJHQsZHQubGVuZ3RoKSxtdD1tdC5yZXBsYWNlKHp0LGA8c3Ryb25nPiR7enR9PC9zdHJvbmc+YCkpKSxhJiZaYShELFtb''@;'; put 'put ''InJvbGUiLCJvcHRpb24iXSwuLi5kP1tJcnQoaCldOltdLC4uLmQ/W1JydChkLmluZGV4T2YodmUpKzEpXTpbXSxbImlkIixgJHt0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LmlkfV8ke1V9LSR7dGV9YF1dKSxELmlubmVySFRNTD1tdH0sYWZ0ZXJTZWxlY3Rpb25FbmQ6KE0sRCk9PntpZihh''@;'; put 'put ''KXtjb25zdCBVPW9lPT57WmEob2UsW1siYXJpYS1zZWxlY3RlZCIsInRydWUiXV0pLFphKHRoaXMuVEVYVEFSRUEsLi4uKGM9PlsiYXJpYS1hY3RpdmVkZXNjZW5kYW50IixjXSkob2UuaWQpKX0sdGU9dGhpcy5odEVkaXRvci5nZXRDZWxsKE0sRCwhMCk7bnVsbCE9PXRlP1UodGUpOnRoaXMu''@;'; put 'put ''aHRFZGl0b3IuYWRkSG9va09uY2UoImFmdGVyU2Nyb2xsVmVydGljYWxseSIsKCk9Pntjb25zdCBvZT10aGlzLmh0RWRpdG9yLmdldENlbGwoTSxELCEwKTtVKG9lKX0pfX19KSxhJiYoWmEodGhpcy5odEVkaXRvci52aWV3Ll93dC53dE92ZXJsYXlzLnd0VGFibGUuVEFCTEUsInJvbGUiLCJw''@;'; put 'put ''cmVzZW50YXRpb24iKSxaYSh0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LFtbInJvbGUiLCJsaXN0Ym94Il0sa3J0KCJwb2xpdGUiKSxEcnQoInRleHQiKSxbImlkIixgJHtEdGUoSXRlLHRoaXMpfS1saXN0Ym94LSR7Zn0tJHt2fWBdXSksWmEodGhpcy5URVhUQVJFQSwuLi5GZigidHJ1ZSIp''@;'; put 'put ''KSksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3RoaXMucXVlcnlDaG9pY2VzKHRoaXMuVEVYVEFSRUEudmFsdWUpfSl9Y2xvc2UoKXt0aGlzLnJlbW92ZUhvb2tzQnlLZXkoImJlZm9yZUtleURvd24iKSxzdXBlci5jbG9zZSgpLHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRh''@;'; put 'put ''Z3MmJlphKHRoaXMuVEVYVEFSRUEsW0ZmKCJmYWxzZSIpXSl9ZGlzY2FyZEVkaXRvcihsKXtzdXBlci5kaXNjYXJkRWRpdG9yKGwpLHRoaXMuaG90LnZpZXcucmVuZGVyKCl9ZmluaXNoRWRpdGluZyhsLGEsZCl7aWYodGhpcy5pc09wZW5lZCgpKXtjb25zdCBoPXRoaXMuaG90LmdldFNlbGVj''@;'; put 'put ''dGVkUmFuZ2VBY3RpdmUoKTsoYmMoaCl8fE1hKGgpJiYhaC5pbmNsdWRlcyh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyh0aGlzLnJvdyx0aGlzLmNvbCkpKSYmKGw9ITApfXN1cGVyLmZpbmlzaEVkaXRpbmcobCxhLGQpfXF1ZXJ5Q2hvaWNlcyhsKXtjb25zdCBhPXRoaXMuY2VsbFByb3Bl''@;'; put 'put ''cnRpZXMuc291cmNlO3RoaXMucXVlcnk9bCwiZnVuY3Rpb24iPT10eXBlb2YgYT9hLmNhbGwodGhpcy5jZWxsUHJvcGVydGllcyxsLGQ9Pnt0aGlzLnJhd0Nob2ljZXM9ZCx0aGlzLnVwZGF0ZUNob2ljZXNMaXN0KHRoaXMuc3RyaXBWYWx1ZXNJZk5lZWRlZChkKSl9KTpBcnJheS5pc0FycmF5''@;'; put 'put ''KGEpPyh0aGlzLnJhd0Nob2ljZXM9YSx0aGlzLnVwZGF0ZUNob2ljZXNMaXN0KHRoaXMuc3RyaXBWYWx1ZXNJZk5lZWRlZChhKSkpOnRoaXMudXBkYXRlQ2hvaWNlc0xpc3QoW10pfXVwZGF0ZUNob2ljZXNMaXN0KGwpe2NvbnN0IGE9dEoodGhpcy5URVhUQVJFQSksZD1tZ2UodGhpcy5URVhU''@;'; put 'put ''QVJFQSksaD10aGlzLmNlbGxQcm9wZXJ0aWVzLnNvcnRCeVJlbGV2YW5jZSxmPXRoaXMuY2VsbFByb3BlcnRpZXMuZmlsdGVyLHY9dGhpcy5zdHJpcFZhbHVlSWZOZWVkZWQodGhpcy5nZXRWYWx1ZSgpKSxNPUI2KGo2LHRoaXMsVGspLmNhbGwodGhpcyx2KT92LnZhbHVlOnY7bGV0IEQ9bnVs''@;'; put 'put ''bCxVPWw7aHx8KFU9VS50b1NvcnRlZCgpKTtjb25zdCB0ZT1bXSxvZT10aGlzLmNlbGxQcm9wZXJ0aWVzLmxvY2FsZSx2ZT10aGlzLmNlbGxQcm9wZXJ0aWVzLmZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUsd2U9dmU/TTpNLnRvTG9jYWxlTG93ZXJDYXNlKG9lKTtmb3IobGV0IEZlPTA7RmU8VS5s''@;'; put 'put ''ZW5ndGg7RmUrKyl7Y29uc3QgV2U9QjYoajYsdGhpcyxUaykuY2FsbCh0aGlzLFVbRmVdKT9DNChyYyhVW0ZlXS52YWx1ZSkpOkM0KHJjKFVbRmVdKSk7aWYoLTEhPT0odmU/V2U6V2UudG9Mb2NhbGVMb3dlckNhc2Uob2UpKS5pbmRleE9mKHdlKSYmKHRlLnB1c2goRmUpLCExPT09ZikpYnJl''@;'; put 'put ''YWt9ITE9PT1mP3YubGVuZ3RoPjAmJihEPXRlWzBdKTooVT10ZS5tYXAoRmU9PlVbRmVdKSxEPVUuaW5kZXhPZih3ZSk+LTE/VS5pbmRleE9mKHdlKTowKSx0aGlzLnN0cmlwcGVkQ2hvaWNlcz1VLHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGUuZGlzcGxheT0wPT09VS5sZW5ndGg/''@;'; put 'put ''Im5vbmUiOiIiLHRoaXMuaHRFZGl0b3IubG9hZERhdGEoREEoW1VdKSksVS5sZW5ndGg+MCYmKHRoaXMudXBkYXRlRHJvcGRvd25EaW1lbnNpb25zKCksdGhpcy5mbGlwRHJvcGRvd25WZXJ0aWNhbGx5SWZOZWVkZWQoKSwhMD09PXRoaXMuY2VsbFByb3BlcnRpZXMuc3RyaWN0JiZ0aGlzLmhp''@;'; put 'put ''Z2hsaWdodEJlc3RNYXRjaGluZ0Nob2ljZShEKSksdGhpcy5ob3QubGlzdGVuKCksV0EodGhpcy5URVhUQVJFQSxhLGE9PT1kP3ZvaWQgMDpkKX1mbGlwRHJvcGRvd25WZXJ0aWNhbGx5SWZOZWVkZWQoKXtjb25zdCBsPXN1cGVyLmZsaXBEcm9wZG93blZlcnRpY2FsbHlJZk5lZWRlZCgpLHtp''@;'; put 'put ''c0ZsaXBwZWQ6YSxzcGFjZUFib3ZlOmQsc3BhY2VCZWxvdzpofT1sO3JldHVybiB0aGlzLmxpbWl0RHJvcGRvd25JZk5lZWRlZChhP2Q6aCksbH1saW1pdERyb3Bkb3duSWZOZWVkZWQobCl7Y29uc3QgYT10aGlzLmdldERyb3Bkb3duSGVpZ2h0KCk7aWYoYT5sKXtsZXQgZD0wLGg9MCxmPW51''@;'; put 'put ''bGw7ZG97aD10aGlzLmh0RWRpdG9yLnN0eWxlc0hhbmRsZXIuZ2V0RGVmYXVsdFJvd0hlaWdodCgpLGQrPWh9d2hpbGUoZDxsKTtmPWQtaCx0aGlzLmlzRmxpcHBlZFZlcnRpY2FsbHkmJih0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlLnRvcD1wYXJzZUludCh0aGlzLmh0RWRpdG9y''@;'; put 'put ''LnJvb3RFbGVtZW50LnN0eWxlLnRvcCwxMCkrYS1mKyJweCIpLHRoaXMuc2V0RHJvcGRvd25IZWlnaHQoZC1oKX19dXBkYXRlRHJvcGRvd25EaW1lbnNpb25zKCl7Y29uc3QgbD12Z2UoKSxhPXRoaXMuZ2V0VGFyZ2V0RWRpdG9yV2lkdGgoKStsLGQ9dGhpcy5nZXRUYXJnZXRFZGl0b3JIZWln''@;'; put 'put ''aHQoKStsO3RoaXMuaHRFZGl0b3IudXBkYXRlU2V0dGluZ3Moe3dpZHRoOmEsaGVpZ2h0OmR9KSxCNihqNix0aGlzLHU2ZSkuY2FsbCh0aGlzKSx0aGlzLmh0RWRpdG9yLnZpZXcuX3d0Lnd0VGFibGUuYWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpfXNldERyb3Bkb3duSGVp''@;'; put 'put ''Z2h0KGwpe3RoaXMuaHRFZGl0b3IudXBkYXRlU2V0dGluZ3Moe2hlaWdodDpsfSksQjYoajYsdGhpcyx1NmUpLmNhbGwodGhpcyksdGhpcy5odEVkaXRvci52aWV3Ll93dC53dFRhYmxlLmFsaWduT3ZlcmxheXNXaXRoVHJpbW1pbmdDb250YWluZXIoKX1oaWdobGlnaHRCZXN0TWF0Y2hpbmdD''@;'; put 'put ''aG9pY2UobCl7Im51bWJlciI9PXR5cGVvZiBsP3RoaXMuaHRFZGl0b3Iuc2VsZWN0Q2VsbChsLDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsITEpOnRoaXMuaHRFZGl0b3IuZGVzZWxlY3RDZWxsKCl9Z2V0VGFyZ2V0RWRpdG9ySGVpZ2h0KCl7bGV0IGw9MDtpZighdGhpcy5ob3QuZ2V0Q3VycmVu''@;'; put 'put ''dFRoZW1lTmFtZSgpKXtjb25zdCBoPXRoaXMuaG90LnJvb3RXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmh0Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIi5odENvcmUiKSk7bD1wYXJzZUludChoLmJvcmRlclRvcFdpZHRoLDEwKStwYXJzZUludChoLmJvcmRlckJvdHRvbVdpZHRoLDEw''@;'; put 'put ''KX1jb25zdCBhPU1hdGgubWluKHRoaXMuY2VsbFByb3BlcnRpZXMudmlzaWJsZVJvd3MsdGhpcy5zdHJpcHBlZENob2ljZXMubGVuZ3RoKTtyZXR1cm4gQXJyYXkuZnJvbSh7bGVuZ3RoOmF9LChoLGYpPT5mKS5yZWR1Y2UoKGgsZik9PmgrKHRoaXMuaG90LnN0eWxlc0hhbmRsZXIuZ2V0RGVm''@;'; put 'put ''YXVsdFJvd0hlaWdodCgpKygwPT09Zj8xOjApKSwwKStsfWdldFRhcmdldEVkaXRvcldpZHRoKCl7bGV0IGw9MDtpZighdGhpcy5ob3QuZ2V0Q3VycmVudFRoZW1lTmFtZSgpKXtjb25zdCBhPXRoaXMuaG90LnJvb3RXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmh0Q29udGFpbmVyLnF1''@;'; put 'put ''ZXJ5U2VsZWN0b3IoIi5odENvcmUiKSk7bD1wYXJzZUludChhLmJvcmRlcklubGluZVN0YXJ0V2lkdGgsMTApK3BhcnNlSW50KGEuYm9yZGVySW5saW5lRW5kV2lkdGgsMTApfXJldHVybiB0aGlzLmh0RWRpdG9yLmdldENvbFdpZHRoKDApK2x9c3RyaXBWYWx1ZUlmTmVlZGVkKGwpe3JldHVy''@;'; put 'put ''biB0aGlzLnN0cmlwVmFsdWVzSWZOZWVkZWQoW2xdKVswXX1zdHJpcFZhbHVlc0lmTmVlZGVkKGwpe2NvbnN0e2FsbG93SHRtbDphfT10aGlzLmNlbGxQcm9wZXJ0aWVzLGQ9aD0+cmMoYT9oOkM0KGgpKTtyZXR1cm4gbC5ldmVyeShoPT5CNihqNix0aGlzLFRrKS5jYWxsKHRoaXMsaCkpP2wu''@;'; put 'put ''bWFwKGg9Pih7a2V5OmQoaC5rZXkpLHZhbHVlOmQoaC52YWx1ZSl9KSk6bC5tYXAoaD0+ZChoKSl9b25CZWZvcmVLZXlEb3duKGwpe2lmKENnZShsLmtleUNvZGUpfHxsLmtleUNvZGU9PT1yby5CQUNLU1BBQ0V8fGwua2V5Q29kZT09PXJvLkRFTEVURXx8bC5rZXlDb2RlPT09cm8uSU5TRVJU''@;'; put 'put ''KXtsZXQgYT0xMDtpZihsLmtleUNvZGU9PT1yby5DJiYobC5jdHJsS2V5fHxsLm1ldGFLZXkpKXJldHVybjt0aGlzLmlzT3BlbmVkKCl8fChhKz0xMCksdGhpcy5odEVkaXRvciYmdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3RoaXMucXVlcnlDaG9pY2VzKHRoaXMuVEVYVEFSRUEu''@;'; put 'put ''dmFsdWUpfSxhKX19fWZ1bmN0aW9uIHU2ZSgpe3RoaXMuaHRFZGl0b3Iudmlldy5oYXNWZXJ0aWNhbFNjcm9sbCgpJiZ0aGlzLmh0RWRpdG9yLnVwZGF0ZVNldHRpbmdzKHt3aWR0aDp0aGlzLmdldFRhcmdldEVkaXRvcldpZHRoKCkrd3UodGhpcy5ob3Qucm9vdERvY3VtZW50KX0pfWZ1bmN0''@;'; put 'put ''aW9uIFRrKGMpe3JldHVybiBtbyhjKSYmTWEoYy5rZXkpJiZNYShjLnZhbHVlKX1jbGFzcyBkNmUgZXh0ZW5kcyBsQ3tzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuImNoZWNrYm94In1iZWdpbkVkaXRpbmcobCxhKXtpZihhJiYibW91c2V1cCI9PT1hLnR5cGUmJiJURCI9PT1hLnRh''@;'; put 'put ''cmdldC5ub2RlTmFtZSl7Y29uc3QgZD10aGlzLlRELnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9ImNoZWNrYm94Il0nKTtDbyhkLCJodEJhZFZhbHVlIil8fGQuY2xpY2soKX19ZmluaXNoRWRpdGluZygpe31pbml0KCl7fW9wZW4oKXt9Y2xvc2UoKXt9Z2V0VmFsdWUoKXt9c2V0VmFsdWUo''@;'; put 'put ''KXt9Zm9jdXMoKXt9fWNvbnN0IHo2PSgpPT53aW5kb3csWWY9KCk9PndpbmRvdy5kb2N1bWVudCxMdGU9KGMsbCk9PndpbmRvdy5zZXRUaW1lb3V0KGMsbCksSDQ9ZnVuY3Rpb24oYyxsLGEsZCl7Yy5hZGRFdmVudExpc3RlbmVyKGwsYSwhIWQpfSxFNT1mdW5jdGlvbihjLGwsYSxkKXtjLnJl''@;'; put 'put ''bW92ZUV2ZW50TGlzdGVuZXIobCxhLCEhZCl9LEwyPWZ1bmN0aW9uKGMsbCl7cmV0dXJuLTEhPT0oIiAiK2MuY2xhc3NOYW1lKyIgIikuaW5kZXhPZigiICIrbCsiICIpfSxPdGU9ZnVuY3Rpb24oYyxsKXtMMihjLGwpfHwoYy5jbGFzc05hbWU9IiI9PT1jLmNsYXNzTmFtZT9sOmMuY2xhc3NO''@;'; put 'put ''YW1lKyIgIitsKX0sUHRlPWZ1bmN0aW9uKGMsbCl7Yy5jbGFzc05hbWU9ZnVuY3Rpb24oYyl7cmV0dXJuIGMudHJpbT9jLnRyaW0oKTpjLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0oKCIgIitjLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoIiAiK2wrIiAiLCIgIikpfSxGdGU9ZnVuY3Rpb24o''@;'; put 'put ''Yyl7cmV0dXJuL0FycmF5Ly50ZXN0KE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKSl9LE8yPWZ1bmN0aW9uKGMpe3JldHVybi9EYXRlLy50ZXN0KE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKSkmJiFpc05hTihjLmdldFRpbWUoKSl9LG4xdD1mdW5jdGlvbihjKXts''@;'; put 'put ''ZXQgbD1jLmdldERheSgpO3JldHVybiAwPT09bHx8Nj09PWx9LHIxdD1mdW5jdGlvbihjKXtyZXR1cm4gYyU0PT0wJiZjJTEwMCE9MHx8YyU0MDA9PTB9LGg2ZT1mdW5jdGlvbihjLGwpe3JldHVyblszMSxyMXQoYyk/Mjk6MjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdW2xdfSxn''@;'; put 'put ''Vj1mdW5jdGlvbihjKXtPMihjKSYmYy5zZXRIb3VycygwLDAsMCwwKX0sbVY9ZnVuY3Rpb24oYyxsKXtyZXR1cm4gYy5nZXRUaW1lKCk9PT1sLmdldFRpbWUoKX0sdlY9ZnVuY3Rpb24oYyxsLGEpe2xldCBkLGg7Zm9yKGQgaW4gbCloPXZvaWQgMCE9PWNbZF0saCYmIm9iamVjdCI9PXR5cGVv''@;'; put 'put ''ZiBsW2RdJiZudWxsIT09bFtkXSYmdm9pZCAwPT09bFtkXS5ub2RlTmFtZT9PMihsW2RdKT9hJiYoY1tkXT1uZXcgRGF0ZShsW2RdLmdldFRpbWUoKSkpOkZ0ZShsW2RdKT9hJiYoY1tkXT1sW2RdLnNsaWNlKDApKTpjW2RdPXZWKHt9LGxbZF0sYSk6KGF8fCFoKSYmKGNbZF09bFtkXSk7cmV0''@;'; put 'put ''dXJuIGN9LGY2ZT1mdW5jdGlvbihjLGwsYSl7bGV0IGQ9WWYoKS5jcmVhdGVFdmVudCgiSFRNTEV2ZW50cyIpO2QuaW5pdEV2ZW50KGwsITAsITEpLGQ9dlYoZCxhKSxjLmRpc3BhdGNoRXZlbnQoZCl9LHA2ZT1mdW5jdGlvbihjKXtyZXR1cm4gYy5tb250aDwwJiYoYy55ZWFyLT1NYXRoLmNl''@;'; put 'put ''aWwoTWF0aC5hYnMoYy5tb250aCkvMTIpLGMubW9udGgrPTEyKSxjLm1vbnRoPjExJiYoYy55ZWFyKz1NYXRoLmZsb29yKE1hdGguYWJzKGMubW9udGgpLzEyKSxjLm1vbnRoLT0xMiksY30sTjQ9e2ZpZWxkOm51bGwsYm91bmQ6dm9pZCAwLGFyaWFMYWJlbDoiVXNlIHRoZSBhcnJvdyBrZXlz''@;'; put 'put ''IHRvIHBpY2sgYSBkYXRlIixwb3NpdGlvbjoiYm90dG9tIGxlZnQiLHJlcG9zaXRpb246ITAsZm9ybWF0OiJZWVlZLU1NLUREIix0b1N0cmluZzpudWxsLHBhcnNlOm51bGwsZGVmYXVsdERhdGU6bnVsbCxzZXREZWZhdWx0RGF0ZTohMSxmaXJzdERheTowLGZpcnN0V2Vla09mWWVhck1pbkRh''@;'; put 'put ''eXM6NCxmb3JtYXRTdHJpY3Q6ITEsbWluRGF0ZTpudWxsLG1heERhdGU6bnVsbCx5ZWFyUmFuZ2U6MTAsc2hvd1dlZWtOdW1iZXI6ITEscGlja1dob2xlV2VlazohMSxtaW5ZZWFyOjAsbWF4WWVhcjo5OTk5LG1pbk1vbnRoOnZvaWQgMCxtYXhNb250aDp2b2lkIDAsc3RhcnRSYW5nZTpudWxs''@;'; put 'put ''LGVuZFJhbmdlOm51bGwsaXNSVEw6ITEseWVhclN1ZmZpeDoiIixzaG93TW9udGhBZnRlclllYXI6ITEsc2hvd0RheXNJbk5leHRBbmRQcmV2aW91c01vbnRoczohMSxlbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6ITEsbnVtYmVyT2ZNb250aHM6MSxtYWluQ2Fs''@;'; put 'put ''ZW5kYXI6ImxlZnQiLGNvbnRhaW5lcjp2b2lkIDAsYmx1ckZpZWxkT25TZWxlY3Q6ITAsaTE4bjp7cHJldmlvdXNNb250aDoiUHJldmlvdXMgTW9udGgiLG5leHRNb250aDoiTmV4dCBNb250aCIsbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1''@;'; put 'put ''bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSx3ZWVrZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sd2Vla2RheXNTaG9ydDpbIlN1''@;'; put 'put ''biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdfSx0aGVtZTpudWxsLGV2ZW50czpbXSxvblNlbGVjdDpudWxsLG9uT3BlbjpudWxsLG9uQ2xvc2U6bnVsbCxvbkRyYXc6bnVsbCxrZXlib2FyZElucHV0OiEwfSxnNmU9ZnVuY3Rpb24oYyxsLGEpe2ZvcihsKz1jLmZpcnN0''@;'; put 'put ''RGF5O2w+PTc7KWwtPTc7cmV0dXJuIGE/Yy5pMThuLndlZWtkYXlzU2hvcnRbbF06Yy5pMThuLndlZWtkYXlzW2xdfSxpMXQ9ZnVuY3Rpb24oYyl7bGV0IGw9W10sYT0iZmFsc2UiO2lmKGMuaXNFbXB0eSl7aWYoIWMuc2hvd0RheXNJbk5leHRBbmRQcmV2aW91c01vbnRocylyZXR1cm4nPHRk''@;'; put 'put ''IGNsYXNzPSJpcy1lbXB0eSI+PC90ZD4nO2wucHVzaCgiaXMtb3V0c2lkZS1jdXJyZW50LW1vbnRoIiksYy5lbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHN8fGwucHVzaCgiaXMtc2VsZWN0aW9uLWRpc2FibGVkIil9cmV0dXJuIGMuaXNEaXNhYmxlZCYmbC5wdXNo''@;'; put 'put ''KCJpcy1kaXNhYmxlZCIpLGMuaXNUb2RheSYmbC5wdXNoKCJpcy10b2RheSIpLGMuaXNTZWxlY3RlZCYmKGwucHVzaCgiaXMtc2VsZWN0ZWQiKSxhPSJ0cnVlIiksYy5oYXNFdmVudCYmbC5wdXNoKCJoYXMtZXZlbnQiKSxjLmlzSW5SYW5nZSYmbC5wdXNoKCJpcy1pbnJhbmdlIiksYy5pc1N0''@;'; put 'put ''YXJ0UmFuZ2UmJmwucHVzaCgiaXMtc3RhcnRyYW5nZSIpLGMuaXNFbmRSYW5nZSYmbC5wdXNoKCJpcy1lbmRyYW5nZSIpLCc8dGQgZGF0YS1kYXk9IicrYy5kYXkrJyIgY2xhc3M9IicrbC5qb2luKCIgIikrJyIgYXJpYS1zZWxlY3RlZD0iJythKyciPjxidXR0b24gY2xhc3M9InBpa2EtYnV0''@;'; put 'put ''dG9uIHBpa2EtZGF5IiB0eXBlPSJidXR0b24iIGRhdGEtcGlrYS15ZWFyPSInK2MueWVhcisnIiBkYXRhLXBpa2EtbW9udGg9IicrYy5tb250aCsnIiBkYXRhLXBpa2EtZGF5PSInK2MuZGF5KyciPicrYy5kYXkrIjwvYnV0dG9uPjwvdGQ+In0sbzF0PWZ1bmN0aW9uKGMsbCxhLGQsaCl7bGV0''@;'; put 'put ''IGY9bmV3IERhdGUoZCxhLGwpO3JldHVybic8dGQgY2xhc3M9InBpa2Etd2VlayI+JysoYy5oYXNNb21lbnQ/Yy5tb21lbnQoZikuaXNvV2VlaygpOmZ1bmN0aW9uKGMsbCl7Yy5zZXRIb3VycygwLDAsMCwwKTtsZXQgYT1jLmdldERhdGUoKSxkPWMuZ2V0RGF5KCksaD1sLGY9aC0xLE09ZnVu''@;'; put 'put ''Y3Rpb24odmUpe3JldHVybih2ZSs3LTEpJTd9O2Muc2V0RGF0ZShhK2YtTShkKSk7bGV0IEQ9bmV3IERhdGUoYy5nZXRGdWxsWWVhcigpLDAsaCksdGU9KGMuZ2V0VGltZSgpLUQuZ2V0VGltZSgpKS84NjRlNTtyZXR1cm4gMStNYXRoLnJvdW5kKCh0ZS1mK00oRC5nZXREYXkoKSkpLzcpfShm''@;'; put 'put ''LGgpKSsiPC90ZD4ifSxzMXQ9ZnVuY3Rpb24oYyxsLGEsZCl7cmV0dXJuJzx0ciBjbGFzcz0icGlrYS1yb3cnKyhhPyIgcGljay13aG9sZS13ZWVrIjoiIikrKGQ/IiBpcy1zZWxlY3RlZCI6IiIpKyciPicrKGw/Yy5yZXZlcnNlKCk6Yykuam9pbigiIikrIjwvdHI+In0sdTF0PWZ1bmN0aW9u''@;'; put 'put ''KGMsbCxhLGQsaCxmKXtsZXQgdixNLEQsd2UsRmUsVT1jLl9vLHRlPWE9PT1VLm1pblllYXIsb2U9YT09PVUubWF4WWVhcix2ZT0nPGRpdiBpZD0iJytmKyciIGNsYXNzPSJwaWthLXRpdGxlIiByb2xlPSJoZWFkaW5nIiBhcmlhLWxpdmU9InBvbGl0ZSI+JyxXZT0hMCxudD0hMDtmb3IoRD1b''@;'; put 'put ''XSx2PTA7djwxMjt2KyspRC5wdXNoKCc8b3B0aW9uIHZhbHVlPSInKyhhPT09aD92LWw6MTIrdi1sKSsnIicrKHY9PT1kPycgc2VsZWN0ZWQ9InNlbGVjdGVkIic6IiIpKyh0ZSYmdjxVLm1pbk1vbnRofHxvZSYmdj5VLm1heE1vbnRoPycgZGlzYWJsZWQ9ImRpc2FibGVkIic6IiIpKyI+IitV''@;'; put 'put ''LmkxOG4ubW9udGhzW3ZdKyI8L29wdGlvbj4iKTtmb3Iod2U9JzxkaXYgY2xhc3M9InBpa2EtbGFiZWwiPicrVS5pMThuLm1vbnRoc1tkXSsnPHNlbGVjdCBjbGFzcz0icGlrYS1zZWxlY3QgcGlrYS1zZWxlY3QtbW9udGgiIHRhYmluZGV4PSItMSI+JytELmpvaW4oIiIpKyI8L3NlbGVjdD48''@;'; put 'put ''L2Rpdj4iLEZ0ZShVLnllYXJSYW5nZSk/KHY9VS55ZWFyUmFuZ2VbMF0sTT1VLnllYXJSYW5nZVsxXSsxKToodj1hLVUueWVhclJhbmdlLE09MSthK1UueWVhclJhbmdlKSxEPVtdO3Y8TSYmdjw9VS5tYXhZZWFyO3YrKyl2Pj1VLm1pblllYXImJkQucHVzaCgnPG9wdGlvbiB2YWx1ZT0iJyt2''@;'; put 'put ''KyciJysodj09PWE/JyBzZWxlY3RlZD0ic2VsZWN0ZWQiJzoiIikrIj4iK3YrIjwvb3B0aW9uPiIpO3JldHVybiBGZT0nPGRpdiBjbGFzcz0icGlrYS1sYWJlbCI+JythK1UueWVhclN1ZmZpeCsnPHNlbGVjdCBjbGFzcz0icGlrYS1zZWxlY3QgcGlrYS1zZWxlY3QteWVhciIgdGFiaW5kZXg9''@;'; put 'put ''Ii0xIj4nK0Quam9pbigiIikrIjwvc2VsZWN0PjwvZGl2PiIsdmUrPVUuc2hvd01vbnRoQWZ0ZXJZZWFyP0ZlK3dlOndlK0ZlLHRlJiYoMD09PWR8fFUubWluTW9udGg+PWQpJiYoV2U9ITEpLG9lJiYoMTE9PT1kfHxVLm1heE1vbnRoPD1kKSYmKG50PSExKSwwPT09bCYmKHZlKz0nPGJ1dHRv''@;'; put 'put ''biBjbGFzcz0icGlrYS1wcmV2JysoV2U/IiI6IiBpcy1kaXNhYmxlZCIpKyciIHR5cGU9ImJ1dHRvbiI+JytVLmkxOG4ucHJldmlvdXNNb250aCsiPC9idXR0b24+IiksbD09PWMuX28ubnVtYmVyT2ZNb250aHMtMSYmKHZlKz0nPGJ1dHRvbiBjbGFzcz0icGlrYS1uZXh0JysobnQ/IiI6IiBp''@;'; put 'put ''cy1kaXNhYmxlZCIpKyciIHR5cGU9ImJ1dHRvbiI+JytVLmkxOG4ubmV4dE1vbnRoKyI8L2J1dHRvbj4iKSx2ZSsiPC9kaXY+In07ZnVuY3Rpb24gSHRlKGMpe2xldCBsPXRoaXMsYT1sLmNvbmZpZyhjKTtsLl9vbk1vdXNlRG93bj1mdW5jdGlvbihoKXtpZighbC5fdilyZXR1cm47bGV0IGY9''@;'; put 'put ''KGg9aHx8ejYoKS5ldmVudCkudGFyZ2V0fHxoLnNyY0VsZW1lbnQ7aWYoZilpZihMMihmLCJpcy1kaXNhYmxlZCIpfHwoIUwyKGYsInBpa2EtYnV0dG9uIil8fEwyKGYsImlzLWVtcHR5Iil8fEwyKGYucGFyZW50Tm9kZSwiaXMtZGlzYWJsZWQiKT9MMihmLCJwaWthLXByZXYiKT9sLnByZXZN''@;'; put 'put ''b250aCgpOkwyKGYsInBpa2EtbmV4dCIpJiZsLm5leHRNb250aCgpOihsLnNldERhdGUobmV3IERhdGUoZi5nZXRBdHRyaWJ1dGUoImRhdGEtcGlrYS15ZWFyIiksZi5nZXRBdHRyaWJ1dGUoImRhdGEtcGlrYS1tb250aCIpLGYuZ2V0QXR0cmlidXRlKCJkYXRhLXBpa2EtZGF5IikpKSxhLmJv''@;'; put 'put ''dW5kJiZMdGUoZnVuY3Rpb24oKXtsLmhpZGUoKSxhLmJsdXJGaWVsZE9uU2VsZWN0JiZhLmZpZWxkJiZhLmZpZWxkLmJsdXIoKX0sMTAwKSkpLEwyKGYsInBpa2Etc2VsZWN0IikpbC5fYz0hMDtlbHNle2lmKCFoLnByZXZlbnREZWZhdWx0KXJldHVybiBoLnJldHVyblZhbHVlPSExLCExO2gu''@;'; put 'put ''cHJldmVudERlZmF1bHQoKX19LGwuX29uQ2hhbmdlPWZ1bmN0aW9uKGgpe2xldCBmPShoPWh8fHo2KCkuZXZlbnQpLnRhcmdldHx8aC5zcmNFbGVtZW50O2YmJihMMihmLCJwaWthLXNlbGVjdC1tb250aCIpP2wuZ290b01vbnRoKGYudmFsdWUpOkwyKGYsInBpa2Etc2VsZWN0LXllYXIiKSYm''@;'; put 'put ''bC5nb3RvWWVhcihmLnZhbHVlKSl9LGwuX29uS2V5Q2hhbmdlPWZ1bmN0aW9uKGgpe2lmKGg9aHx8ejYoKS5ldmVudCxsLmlzVmlzaWJsZSgpKXN3aXRjaChoLmtleUNvZGUpe2Nhc2UgMTM6Y2FzZSAyNzphLmZpZWxkJiZhLmZpZWxkLmJsdXIoKTticmVhaztjYXNlIDM3OmwuYWRqdXN0RGF0''@;'; put 'put ''ZSgic3VidHJhY3QiLDEpO2JyZWFrO2Nhc2UgMzg6bC5hZGp1c3REYXRlKCJzdWJ0cmFjdCIsNyk7YnJlYWs7Y2FzZSAzOTpsLmFkanVzdERhdGUoImFkZCIsMSk7YnJlYWs7Y2FzZSA0MDpsLmFkanVzdERhdGUoImFkZCIsNyk7YnJlYWs7Y2FzZSA4OmNhc2UgNDY6bC5zZXREYXRlKG51bGwp''@;'; put 'put ''fX0sbC5fcGFyc2VGaWVsZFZhbHVlPWZ1bmN0aW9uKCl7aWYoYS5wYXJzZSlyZXR1cm4gYS5wYXJzZShhLmZpZWxkLnZhbHVlLGEuZm9ybWF0KTtpZih0aGlzLmhhc01vbWVudCl7bGV0IGg9dGhpcy5tb21lbnQoYS5maWVsZC52YWx1ZSxhLmZvcm1hdCxhLmZvcm1hdFN0cmljdCk7cmV0dXJu''@;'; put 'put ''IGgmJmguaXNWYWxpZCgpP2gudG9EYXRlKCk6bnVsbH1yZXR1cm4gbmV3IERhdGUoRGF0ZS5wYXJzZShhLmZpZWxkLnZhbHVlKSl9LGwuX29uSW5wdXRDaGFuZ2U9ZnVuY3Rpb24oaCl7bGV0IGY7aC5maXJlZEJ5IT09bCYmKGY9bC5fcGFyc2VGaWVsZFZhbHVlKCksTzIoZikmJmwuc2V0RGF0''@;'; put 'put ''ZShmKSxsLl92fHxsLnNob3coKSl9LGwuX29uSW5wdXRGb2N1cz1mdW5jdGlvbigpe2wuc2hvdygpfSxsLl9vbklucHV0Q2xpY2s9ZnVuY3Rpb24oKXtsLnNob3coKX0sbC5fb25JbnB1dEJsdXI9ZnVuY3Rpb24oKXtsZXQgaD1ZZigpLmFjdGl2ZUVsZW1lbnQ7ZG97aWYoTDIoaCwicGlrYS1z''@;'; put 'put ''aW5nbGUiKSlyZXR1cm59d2hpbGUoaD1oLnBhcmVudE5vZGUpO2wuX2N8fChsLl9iPUx0ZShmdW5jdGlvbigpe2wuaGlkZSgpfSw1MCkpLGwuX2M9ITF9LGwuX29uQ2xpY2s9ZnVuY3Rpb24oaCl7bGV0IGY9KGg9aHx8ejYoKS5ldmVudCkudGFyZ2V0fHxoLnNyY0VsZW1lbnQsdj1mO2lmKGYp''@;'; put 'put ''eyFoYXNFdmVudExpc3RlbmVycyYmTDIoZiwicGlrYS1zZWxlY3QiKSYmKGYub25jaGFuZ2V8fChmLnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCJyZXR1cm47IiksSDQoZiwiY2hhbmdlIixsLl9vbkNoYW5nZSkpKTtkb3tpZihMMih2LCJwaWthLXNpbmdsZSIpfHx2PT09YS50cmlnZ2VyKXJl''@;'; put 'put ''dHVybn13aGlsZSh2PXYucGFyZW50Tm9kZSk7bC5fdiYmZiE9PWEudHJpZ2dlciYmdiE9PWEudHJpZ2dlciYmbC5oaWRlKCl9fSxsLmVsPVlmKCkuY3JlYXRlRWxlbWVudCgiZGl2IiksbC5lbC5jbGFzc05hbWU9InBpa2Etc2luZ2xlIisoYS5pc1JUTD8iIGlzLXJ0bCI6IiIpKyhhLnRoZW1l''@;'; put 'put ''PyIgIithLnRoZW1lOiIiKSxINChsLmVsLCJtb3VzZWRvd24iLGwuX29uTW91c2VEb3duLCEwKSxINChsLmVsLCJ0b3VjaGVuZCIsbC5fb25Nb3VzZURvd24sITApLEg0KGwuZWwsImNoYW5nZSIsbC5fb25DaGFuZ2UpLGEua2V5Ym9hcmRJbnB1dCYmSDQoWWYoKSwia2V5ZG93biIsbC5fb25L''@;'; put 'put ''ZXlDaGFuZ2UpLGEuZmllbGQmJihhLmNvbnRhaW5lcj9hLmNvbnRhaW5lci5hcHBlbmRDaGlsZChsLmVsKTphLmJvdW5kP1lmKCkuYm9keS5hcHBlbmRDaGlsZChsLmVsKTphLmZpZWxkLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGwuZWwsYS5maWVsZC5uZXh0U2libGluZyksSDQoYS5maWVs''@;'; put 'put ''ZCwiY2hhbmdlIixsLl9vbklucHV0Q2hhbmdlKSxhLmRlZmF1bHREYXRlfHwoYS5kZWZhdWx0RGF0ZT1sLl9wYXJzZUZpZWxkVmFsdWUoKSxhLnNldERlZmF1bHREYXRlPSEwKSk7bGV0IGQ9YS5kZWZhdWx0RGF0ZTtPMihkKT9hLnNldERlZmF1bHREYXRlP2wuc2V0RGF0ZShkLCEwKTpsLmdv''@;'; put 'put ''dG9EYXRlKGQpOmwuZ290b0RhdGUobmV3IERhdGUpLGEuYm91bmQ/KHRoaXMuaGlkZSgpLGwuZWwuY2xhc3NOYW1lKz0iIGlzLWJvdW5kIixINChhLnRyaWdnZXIsImNsaWNrIixsLl9vbklucHV0Q2xpY2spLEg0KGEudHJpZ2dlciwiZm9jdXMiLGwuX29uSW5wdXRGb2N1cyksSDQoYS50cmln''@;'; put 'put ''Z2VyLCJibHVyIixsLl9vbklucHV0Qmx1cikpOnRoaXMuc2hvdygpfWZ1bmN0aW9uIG02ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gcDF0KGMpe3ZhciBsPWZ1bmN0aW9uIGcxdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9Qcmlt''@;'; put 'put ''aXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmci''@;'; put 'put ''PT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9''@;'; put 'put ''ZnVuY3Rpb24gTnRlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1IdGUucHJv''@;'; put 'put ''dG90eXBlPXtjb25maWc6ZnVuY3Rpb24oYyl7dGhpcy5fb3x8KHRoaXMuX289dlYoe30sTjQsITApKTtsZXQgbD12Vih0aGlzLl9vLGMsITApO2wuaXNSVEw9ISFsLmlzUlRMLGwuZmllbGQ9bC5maWVsZCYmbC5maWVsZC5ub2RlTmFtZT9sLmZpZWxkOm51bGwsbC50aGVtZT0ic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIGwudGhlbWUmJmwudGhlbWU/bC50aGVtZTpudWxsLGwuYm91bmQ9ISEodm9pZCAwIT09bC5ib3VuZD9sLmZpZWxkJiZsLmJvdW5kOmwuZmllbGQpLGwudHJpZ2dlcj1sLnRyaWdnZXImJmwudHJpZ2dlci5ub2RlTmFtZT9sLnRyaWdnZXI6bC5maWVsZCxsLmRpc2FibGVXZWVrZW5k''@;'; put 'put ''cz0hIWwuZGlzYWJsZVdlZWtlbmRzLGwuZGlzYWJsZURheUZuPSJmdW5jdGlvbiI9PXR5cGVvZiBsLmRpc2FibGVEYXlGbj9sLmRpc2FibGVEYXlGbjpudWxsO2xldCBhPXBhcnNlSW50KGwubnVtYmVyT2ZNb250aHMsMTApfHwxO2lmKGwubnVtYmVyT2ZNb250aHM9YT40PzQ6YSxPMihsLm1p''@;'; put 'put ''bkRhdGUpfHwobC5taW5EYXRlPSExKSxPMihsLm1heERhdGUpfHwobC5tYXhEYXRlPSExKSxsLm1pbkRhdGUmJmwubWF4RGF0ZSYmbC5tYXhEYXRlPGwubWluRGF0ZSYmKGwubWF4RGF0ZT1sLm1pbkRhdGU9ITEpLGwubWluRGF0ZSYmdGhpcy5zZXRNaW5EYXRlKGwubWluRGF0ZSksbC5tYXhE''@;'; put 'put ''YXRlJiZ0aGlzLnNldE1heERhdGUobC5tYXhEYXRlKSxGdGUobC55ZWFyUmFuZ2UpKXtsZXQgZD0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCktMTA7bC55ZWFyUmFuZ2VbMF09cGFyc2VJbnQobC55ZWFyUmFuZ2VbMF0sMTApfHxkLGwueWVhclJhbmdlWzFdPXBhcnNlSW50KGwueWVhclJhbmdl''@;'; put 'put ''WzFdLDEwKXx8ZH1lbHNlIGwueWVhclJhbmdlPU1hdGguYWJzKHBhcnNlSW50KGwueWVhclJhbmdlLDEwKSl8fE40LnllYXJSYW5nZSxsLnllYXJSYW5nZT4xMDAmJihsLnllYXJSYW5nZT0xMDApO3JldHVybiBsfSx0b1N0cmluZzpmdW5jdGlvbihjKXtyZXR1cm4gYz1jfHx0aGlzLl9vLmZv''@;'; put 'put ''cm1hdCxPMih0aGlzLl9kKT90aGlzLl9vLnRvU3RyaW5nP3RoaXMuX28udG9TdHJpbmcodGhpcy5fZCxjKTp0aGlzLmhhc01vbWVudD90aGlzLm1vbWVudCh0aGlzLl9kKS5mb3JtYXQoYyk6dGhpcy5fZC50b0RhdGVTdHJpbmcoKToiIn0sZ2V0TW9tZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuaGFzTW9tZW50P3RoaXMubW9tZW50KHRoaXMuX2QpOm51bGx9LHNldE1vbWVudDpmdW5jdGlvbihjLGwpe3RoaXMuaGFzTW9tZW50JiZ0aGlzLm1vbWVudC5pc01vbWVudChjKSYmdGhpcy5zZXREYXRlKGMudG9EYXRlKCksbCl9LHVzZU1vbWVudDpmdW5jdGlvbihjKXt0aGlzLmhhc01v''@;'; put 'put ''bWVudD0hMCx0aGlzLm1vbWVudD1jfSxnZXREYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIE8yKHRoaXMuX2QpP25ldyBEYXRlKHRoaXMuX2QuZ2V0VGltZSgpKTpudWxsfSxzZXREYXRlOmZ1bmN0aW9uKGMsbCl7aWYoIWMpcmV0dXJuIHRoaXMuX2Q9bnVsbCx0aGlzLl9vLmZpZWxkJiYodGhpcy5f''@;'; put 'put ''by5maWVsZC52YWx1ZT0iIixmNmUodGhpcy5fby5maWVsZCwiY2hhbmdlIix7ZmlyZWRCeTp0aGlzfSkpLHRoaXMuZHJhdygpO2lmKCJzdHJpbmciPT10eXBlb2YgYyYmKGM9bmV3IERhdGUoRGF0ZS5wYXJzZShjKSkpLCFPMihjKSlyZXR1cm47bGV0IGE9dGhpcy5fby5taW5EYXRlLGQ9dGhp''@;'; put 'put ''cy5fby5tYXhEYXRlO08yKGEpJiZjPGE/Yz1hOk8yKGQpJiZjPmQmJihjPWQpLHRoaXMuX2Q9bmV3IERhdGUoYy5nZXRUaW1lKCkpLGdWKHRoaXMuX2QpLHRoaXMuZ290b0RhdGUodGhpcy5fZCksdGhpcy5fby5maWVsZCYmKHRoaXMuX28uZmllbGQudmFsdWU9dGhpcy50b1N0cmluZygpLGY2''@;'; put 'put ''ZSh0aGlzLl9vLmZpZWxkLCJjaGFuZ2UiLHtmaXJlZEJ5OnRoaXN9KSksIWwmJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl9vLm9uU2VsZWN0JiZ0aGlzLl9vLm9uU2VsZWN0LmNhbGwodGhpcyx0aGlzLmdldERhdGUoKSl9LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5zZXREYXRlKG51bGwpfSxn''@;'; put 'put ''b3RvRGF0ZTpmdW5jdGlvbihjKXtsZXQgbD0hMDtpZihPMihjKSl7aWYodGhpcy5jYWxlbmRhcnMpe2xldCBhPW5ldyBEYXRlKHRoaXMuY2FsZW5kYXJzWzBdLnllYXIsdGhpcy5jYWxlbmRhcnNbMF0ubW9udGgsMSksZD1uZXcgRGF0ZSh0aGlzLmNhbGVuZGFyc1t0aGlzLmNhbGVuZGFycy5s''@;'; put 'put ''ZW5ndGgtMV0ueWVhcix0aGlzLmNhbGVuZGFyc1t0aGlzLmNhbGVuZGFycy5sZW5ndGgtMV0ubW9udGgsMSksaD1jLmdldFRpbWUoKTtkLnNldE1vbnRoKGQuZ2V0TW9udGgoKSsxKSxkLnNldERhdGUoZC5nZXREYXRlKCktMSksbD1oPGEuZ2V0VGltZSgpfHxkLmdldFRpbWUoKTxofWwmJih0''@;'; put 'put ''aGlzLmNhbGVuZGFycz1be21vbnRoOmMuZ2V0TW9udGgoKSx5ZWFyOmMuZ2V0RnVsbFllYXIoKX1dLCJyaWdodCI9PT10aGlzLl9vLm1haW5DYWxlbmRhciYmKHRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoKz0xLXRoaXMuX28ubnVtYmVyT2ZNb250aHMpKSx0aGlzLmFkanVzdENhbGVuZGFycygp''@;'; put 'put ''fX0sYWRqdXN0RGF0ZTpmdW5jdGlvbihjLGwpe2xldCBoLGE9dGhpcy5nZXREYXRlKCl8fG5ldyBEYXRlLGQ9MjQqcGFyc2VJbnQobCkqNjAqNjAqMWUzOyJhZGQiPT09Yz9oPW5ldyBEYXRlKGEudmFsdWVPZigpK2QpOiJzdWJ0cmFjdCI9PT1jJiYoaD1uZXcgRGF0ZShhLnZhbHVlT2YoKS1k''@;'; put 'put ''KSksdGhpcy5zZXREYXRlKGgpfSxhZGp1c3RDYWxlbmRhcnM6ZnVuY3Rpb24oKXt0aGlzLmNhbGVuZGFyc1swXT1wNmUodGhpcy5jYWxlbmRhcnNbMF0pO2ZvcihsZXQgYz0xO2M8dGhpcy5fby5udW1iZXJPZk1vbnRocztjKyspdGhpcy5jYWxlbmRhcnNbY109cDZlKHttb250aDp0aGlzLmNh''@;'; put 'put ''bGVuZGFyc1swXS5tb250aCtjLHllYXI6dGhpcy5jYWxlbmRhcnNbMF0ueWVhcn0pO3RoaXMuZHJhdygpfSxnb3RvVG9kYXk6ZnVuY3Rpb24oKXt0aGlzLmdvdG9EYXRlKG5ldyBEYXRlKX0sZ290b01vbnRoOmZ1bmN0aW9uKGMpe2lzTmFOKGMpfHwodGhpcy5jYWxlbmRhcnNbMF0ubW9udGg9''@;'; put 'put ''cGFyc2VJbnQoYywxMCksdGhpcy5hZGp1c3RDYWxlbmRhcnMoKSl9LG5leHRNb250aDpmdW5jdGlvbigpe3RoaXMuY2FsZW5kYXJzWzBdLm1vbnRoKyssdGhpcy5hZGp1c3RDYWxlbmRhcnMoKX0scHJldk1vbnRoOmZ1bmN0aW9uKCl7dGhpcy5jYWxlbmRhcnNbMF0ubW9udGgtLSx0aGlzLmFk''@;'; put 'put ''anVzdENhbGVuZGFycygpfSxnb3RvWWVhcjpmdW5jdGlvbihjKXtpc05hTihjKXx8KHRoaXMuY2FsZW5kYXJzWzBdLnllYXI9cGFyc2VJbnQoYywxMCksdGhpcy5hZGp1c3RDYWxlbmRhcnMoKSl9LHNldE1pbkRhdGU6ZnVuY3Rpb24oYyl7YyBpbnN0YW5jZW9mIERhdGU/KGdWKGMpLHRoaXMu''@;'; put 'put ''X28ubWluRGF0ZT1jLHRoaXMuX28ubWluWWVhcj1jLmdldEZ1bGxZZWFyKCksdGhpcy5fby5taW5Nb250aD1jLmdldE1vbnRoKCkpOih0aGlzLl9vLm1pbkRhdGU9TjQubWluRGF0ZSx0aGlzLl9vLm1pblllYXI9TjQubWluWWVhcix0aGlzLl9vLm1pbk1vbnRoPU40Lm1pbk1vbnRoLHRoaXMu''@;'; put 'put ''X28uc3RhcnRSYW5nZT1ONC5zdGFydFJhbmdlKSx0aGlzLmRyYXcoKX0sc2V0TWF4RGF0ZTpmdW5jdGlvbihjKXtjIGluc3RhbmNlb2YgRGF0ZT8oZ1YoYyksdGhpcy5fby5tYXhEYXRlPWMsdGhpcy5fby5tYXhZZWFyPWMuZ2V0RnVsbFllYXIoKSx0aGlzLl9vLm1heE1vbnRoPWMuZ2V0TW9u''@;'; put 'put ''dGgoKSk6KHRoaXMuX28ubWF4RGF0ZT1ONC5tYXhEYXRlLHRoaXMuX28ubWF4WWVhcj1ONC5tYXhZZWFyLHRoaXMuX28ubWF4TW9udGg9TjQubWF4TW9udGgsdGhpcy5fby5lbmRSYW5nZT1ONC5lbmRSYW5nZSksdGhpcy5kcmF3KCl9LHNldFN0YXJ0UmFuZ2U6ZnVuY3Rpb24oYyl7dGhpcy5f''@;'; put 'put ''by5zdGFydFJhbmdlPWN9LHNldEVuZFJhbmdlOmZ1bmN0aW9uKGMpe3RoaXMuX28uZW5kUmFuZ2U9Y30sZHJhdzpmdW5jdGlvbihjKXtpZighdGhpcy5fdiYmIWMpcmV0dXJuO2xldCBNLGw9dGhpcy5fbyxhPWwubWluWWVhcixkPWwubWF4WWVhcixoPWwubWluTW9udGgsZj1sLm1heE1vbnRo''@;'; put 'put ''LHY9IiI7dGhpcy5feTw9YSYmKHRoaXMuX3k9YSwhaXNOYU4oaCkmJnRoaXMuX208aCYmKHRoaXMuX209aCkpLHRoaXMuX3k+PWQmJih0aGlzLl95PWQsIWlzTmFOKGYpJiZ0aGlzLl9tPmYmJih0aGlzLl9tPWYpKTtmb3IobGV0IEQ9MDtEPGwubnVtYmVyT2ZNb250aHM7RCsrKU09InBpa2Et''@;'; put 'put ''dGl0bGUtIitNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5yZXBsYWNlKC9bXmEtel0rL2csIiIpLnN1YnN0cigwLDIpLHYrPSc8ZGl2IGNsYXNzPSJwaWthLWxlbmRhciI+Jyt1MXQodGhpcyxELHRoaXMuY2FsZW5kYXJzW0RdLnllYXIsdGhpcy5jYWxlbmRhcnNbRF0ubW9udGgsdGhpcy5j''@;'; put 'put ''YWxlbmRhcnNbMF0ueWVhcixNKSt0aGlzLnJlbmRlcih0aGlzLmNhbGVuZGFyc1tEXS55ZWFyLHRoaXMuY2FsZW5kYXJzW0RdLm1vbnRoLE0pKyI8L2Rpdj4iO3RoaXMuZWwuaW5uZXJIVE1MPXYsbC5ib3VuZCYmImhpZGRlbiIhPT1sLmZpZWxkLnR5cGUmJkx0ZShmdW5jdGlvbigpe2wudHJp''@;'; put 'put ''Z2dlci5mb2N1cygpfSwxKSwiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5fby5vbkRyYXcmJnRoaXMuX28ub25EcmF3KHRoaXMpLGwuYm91bmQmJmwuZmllbGQuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIixsLmFyaWFMYWJlbCl9LGFkanVzdFBvc2l0aW9uOmZ1bmN0aW9uKCl7bGV0IGMsbCxh''@;'; put 'put ''LGQsaCxmLHYsTSxELFUsdGU7dGhpcy5fby5jb250YWluZXJ8fCh0aGlzLmVsLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsYz10aGlzLl9vLnRyaWdnZXIsbD10aGlzLmVsLm9mZnNldFdpZHRoLGE9dGhpcy5lbC5vZmZzZXRIZWlnaHQsZD16NigpLmlubmVyV2lkdGh8fFlmKCkuZG9jdW1l''@;'; put 'put ''bnRFbGVtZW50LmNsaWVudFdpZHRoLGg9ejYoKS5pbm5lckhlaWdodHx8WWYoKS5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LGY9WWYoKS5ib2R5LnNjcm9sbFRvcHx8WWYoKS5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wLFU9ITAsdGU9ITAsRD1jLmdldEJvdW5kaW5nQ2xpZW50UmVj''@;'; put 'put ''dCgpLHY9RC5sZWZ0K3o2KCkucGFnZVhPZmZzZXQsTT1ELmJvdHRvbSt6NigpLnBhZ2VZT2Zmc2V0LCh0aGlzLl9vLnJlcG9zaXRpb24mJnYrbD5kfHx0aGlzLl9vLnBvc2l0aW9uLmluZGV4T2YoInJpZ2h0Iik+LTEmJnYtbCtjLm9mZnNldFdpZHRoPjApJiYodj12LWwrYy5vZmZzZXRXaWR0''@;'; put 'put ''aCxVPSExKSwodGhpcy5fby5yZXBvc2l0aW9uJiZNK2E+aCtmfHx0aGlzLl9vLnBvc2l0aW9uLmluZGV4T2YoInRvcCIpPi0xJiZNLWEtYy5vZmZzZXRIZWlnaHQ+MCkmJihNPU0tYS1jLm9mZnNldEhlaWdodCx0ZT0hMSksdjwwJiYodj0wKSxNPDAmJihNPTApLHRoaXMuZWwuc3R5bGUubGVm''@;'; put 'put ''dD12KyJweCIsdGhpcy5lbC5zdHlsZS50b3A9TSsicHgiLE90ZSh0aGlzLmVsLFU/ImxlZnQtYWxpZ25lZCI6InJpZ2h0LWFsaWduZWQiKSxPdGUodGhpcy5lbCx0ZT8iYm90dG9tLWFsaWduZWQiOiJ0b3AtYWxpZ25lZCIpLFB0ZSh0aGlzLmVsLFU/InJpZ2h0LWFsaWduZWQiOiJsZWZ0LWFs''@;'; put 'put ''aWduZWQiKSxQdGUodGhpcy5lbCx0ZT8idG9wLWFsaWduZWQiOiJib3R0b20tYWxpZ25lZCIpKX0scmVuZGVyOmZ1bmN0aW9uKGMsbCxhKXtsZXQgZD10aGlzLl9vLGg9bmV3IERhdGUsZj1oNmUoYyxsKSx2PW5ldyBEYXRlKGMsbCwxKS5nZXREYXkoKSxNPVtdLEQ9W107Z1YoaCksZC5maXJz''@;'; put 'put ''dERheT4wJiYodi09ZC5maXJzdERheSx2PDAmJih2Kz03KSk7bGV0IFU9MD09PWw/MTE6bC0xLHRlPTExPT09bD8wOmwrMSxvZT0wPT09bD9jLTE6Yyx2ZT0xMT09PWw/YysxOmMsd2U9aDZlKG9lLFUpLEZlPWYrdixXZT1GZTtmb3IoO1dlPjc7KVdlLT03O0ZlKz03LVdlO2xldCBudD0hMTtm''@;'; put 'put ''b3IobGV0IGR0PTAsbXQ9MDtkdDxGZTtkdCsrKXtsZXQgJHQ9bmV3IERhdGUoYyxsLGR0LXYrMSksenQ9ISFPMih0aGlzLl9kKSYmbVYoJHQsdGhpcy5fZCkseW49bVYoJHQsaCksZ249LTEhPT1kLmV2ZW50cy5pbmRleE9mKCR0LnRvRGF0ZVN0cmluZygpKSx3bj1kdDx2fHxkdD49Zit2LFJu''@;'; put 'put ''PWR0LXYrMSxEcj1sLExyPWMsZHI9ZC5zdGFydFJhbmdlJiZtVihkLnN0YXJ0UmFuZ2UsJHQpLE1yPWQuZW5kUmFuZ2UmJm1WKGQuZW5kUmFuZ2UsJHQpLHZpPWQuc3RhcnRSYW5nZSYmZC5lbmRSYW5nZSYmZC5zdGFydFJhbmdlPCR0JiYkdDxkLmVuZFJhbmdlLE5uPWQubWluRGF0ZSYmJHQ8''@;'; put 'put ''ZC5taW5EYXRlfHxkLm1heERhdGUmJiR0PmQubWF4RGF0ZXx8ZC5kaXNhYmxlV2Vla2VuZHMmJm4xdCgkdCl8fGQuZGlzYWJsZURheUZuJiZkLmRpc2FibGVEYXlGbigkdCk7d24mJihkdDx2PyhSbj13ZStSbixEcj1VLExyPW9lKTooUm4tPWYsRHI9dGUsTHI9dmUpKSxkLnBpY2tXaG9sZVdl''@;'; put 'put ''ZWsmJnp0JiYobnQ9ITApLEQucHVzaChpMXQoe2RheTpSbixtb250aDpEcix5ZWFyOkxyLGhhc0V2ZW50OmduLGlzU2VsZWN0ZWQ6enQsaXNUb2RheTp5bixpc0Rpc2FibGVkOk5uLGlzRW1wdHk6d24saXNTdGFydFJhbmdlOmRyLGlzRW5kUmFuZ2U6TXIsaXNJblJhbmdlOnZpLHNob3dEYXlz''@;'; put 'put ''SW5OZXh0QW5kUHJldmlvdXNNb250aHM6ZC5zaG93RGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzLGVuYWJsZVNlbGVjdGlvbkRheXNJbk5leHRBbmRQcmV2aW91c01vbnRoczpkLmVuYWJsZVNlbGVjdGlvbkRheXNJbk5leHRBbmRQcmV2aW91c01vbnRoc30pKSw3PT0rK210JiYoZC5zaG93''@;'; put 'put ''V2Vla051bWJlciYmRC51bnNoaWZ0KG8xdCh0aGlzLGR0LXYsbCxjLGQuZmlyc3RXZWVrT2ZZZWFyTWluRGF5cykpLE0ucHVzaChzMXQoRCxkLmlzUlRMLGQucGlja1dob2xlV2VlayxudCkpLEQ9W10sbXQ9MCxudD0hMSl9cmV0dXJuIGZ1bmN0aW9uKGMsbCxhKXtyZXR1cm4nPHRhYmxlIGNl''@;'; put 'put ''bGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InBpa2EtdGFibGUiIHJvbGU9ImdyaWQiIGFyaWEtbGFiZWxsZWRieT0iJythKyciPicrZnVuY3Rpb24oYyl7bGV0IGwsYT1bXTtmb3IoYy5zaG93V2Vla051bWJlciYmYS5wdXNoKCI8dGg+PC90aD4iKSxsPTA7bDw3O2wrKylh''@;'; put 'put ''LnB1c2goJzx0aCBzY29wZT0iY29sIj48YWJiciB0aXRsZT0iJytnNmUoYyxsKSsnIj4nK2c2ZShjLGwsITApKyI8L2FiYnI+PC90aD4iKTtyZXR1cm4iPHRoZWFkPjx0cj4iKyhjLmlzUlRMP2EucmV2ZXJzZSgpOmEpLmpvaW4oIiIpKyI8L3RyPjwvdGhlYWQ+In0oYykrZnVuY3Rpb24oYyl7''@;'; put 'put ''cmV0dXJuIjx0Ym9keT4iK2Muam9pbigiIikrIjwvdGJvZHk+In0obCkrIjwvdGFibGU+In0oZCxNLGEpfSxpc1Zpc2libGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdn0sc2hvdzpmdW5jdGlvbigpe3RoaXMuaXNWaXNpYmxlKCl8fCh0aGlzLl92PSEwLHRoaXMuZHJhdygpLFB0ZSh0aGlz''@;'; put 'put ''LmVsLCJpcy1oaWRkZW4iKSx0aGlzLl9vLmJvdW5kJiYoSDQoWWYoKSwiY2xpY2siLHRoaXMuX29uQ2xpY2spLHRoaXMuYWRqdXN0UG9zaXRpb24oKSksImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX28ub25PcGVuJiZ0aGlzLl9vLm9uT3Blbi5jYWxsKHRoaXMpKX0saGlkZTpmdW5jdGlvbigp''@;'; put 'put ''e2xldCBjPXRoaXMuX3Y7ITEhPT1jJiYodGhpcy5fby5ib3VuZCYmRTUoWWYoKSwiY2xpY2siLHRoaXMuX29uQ2xpY2spLHRoaXMuX28uY29udGFpbmVyfHwodGhpcy5lbC5zdHlsZS5wb3NpdGlvbj0ic3RhdGljIix0aGlzLmVsLnN0eWxlLmxlZnQ9ImF1dG8iLHRoaXMuZWwuc3R5bGUudG9w''@;'; put 'put ''PSJhdXRvIiksT3RlKHRoaXMuZWwsImlzLWhpZGRlbiIpLHRoaXMuX3Y9ITEsdm9pZCAwIT09YyYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX28ub25DbG9zZSYmdGhpcy5fby5vbkNsb3NlLmNhbGwodGhpcykpfSxkZXN0cm95OmZ1bmN0aW9uKCl7bGV0IGM9dGhpcy5fbzt0aGlzLmhpZGUo''@;'; put 'put ''KSxFNSh0aGlzLmVsLCJtb3VzZWRvd24iLHRoaXMuX29uTW91c2VEb3duLCEwKSxFNSh0aGlzLmVsLCJ0b3VjaGVuZCIsdGhpcy5fb25Nb3VzZURvd24sITApLEU1KHRoaXMuZWwsImNoYW5nZSIsdGhpcy5fb25DaGFuZ2UpLGMua2V5Ym9hcmRJbnB1dCYmRTUoWWYoKSwia2V5ZG93biIsdGhp''@;'; put 'put ''cy5fb25LZXlDaGFuZ2UpLGMuZmllbGQmJihFNShjLmZpZWxkLCJjaGFuZ2UiLHRoaXMuX29uSW5wdXRDaGFuZ2UpLGMuYm91bmQmJihFNShjLnRyaWdnZXIsImNsaWNrIix0aGlzLl9vbklucHV0Q2xpY2spLEU1KGMudHJpZ2dlciwiZm9jdXMiLHRoaXMuX29uSW5wdXRGb2N1cyksRTUoYy50''@;'; put 'put ''cmlnZ2VyLCJibHVyIix0aGlzLl9vbklucHV0Qmx1cikpKSx0aGlzLmVsLnBhcmVudE5vZGUmJnRoaXMuZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmVsKX19O2NvbnN0IHk2ZT0iZGF0ZUVkaXRvciI7dmFyIHlWPW5ldyBXZWFrU2V0O2NsYXNzIGI2ZSBleHRlbmRzIHZ2e2NvbnN0''@;'; put 'put ''cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBoMXQoYyxsKXsoZnVuY3Rpb24gZjF0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0p''@;'; put 'put ''KGMsbCksbC5hZGQoYyl9KHRoaXMseVYpLG02ZSh0aGlzLCJwYXJlbnREZXN0cm95ZWQiLCExKSxtNmUodGhpcywiJGRhdGVQaWNrZXIiLG51bGwpfXN0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4iZGF0ZSJ9aW5pdCgpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiAkcyl0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIllvdSBuZWVkIHRvIGluY2x1ZGUgbW9tZW50LmpzIHRvIHlvdXIgcHJvamVjdC4iKTtzdXBlci5pbml0KCksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJEZXN0cm95IiwoKT0+e3RoaXMucGFyZW50RGVzdHJveWVkPSEwLHRoaXMuZGVzdHJveUVsZW1lbnRzKCl9KSx0aGlzLmhvdC5h''@;'; put 'put ''ZGRIb29rKCJhZnRlclNldFRoZW1lIiwobCxhKT0+e2F8fHRoaXMuY2xvc2UoKX0pfWNyZWF0ZUVsZW1lbnRzKCl7c3VwZXIuY3JlYXRlRWxlbWVudHMoKSx0aGlzLmRhdGVQaWNrZXI9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHRoaXMuZGF0ZVBpY2tlclN0''@;'; put 'put ''eWxlPXRoaXMuZGF0ZVBpY2tlci5zdHlsZSx0aGlzLmRhdGVQaWNrZXJTdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHRoaXMuZGF0ZVBpY2tlclN0eWxlLnRvcD0wLHRoaXMuZGF0ZVBpY2tlclN0eWxlLmxlZnQ9MCx0aGlzLmRhdGVQaWNrZXJTdHlsZS56SW5kZXg9OTk5OSx0aGlzLmRhdGVQ''@;'; put 'put ''aWNrZXIuc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuaG90LmlzUnRsKCk/InJ0bCI6Imx0ciIpLGlpKHRoaXMuZGF0ZVBpY2tlciwiaHREYXRlcGlja2VySG9sZGVyIiksdGhpcy5ob3Qucm9vdFBvcnRhbEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5kYXRlUGlja2VyKSx0aGlzLmV2ZW50TWFu''@;'; put 'put ''YWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuZGF0ZVBpY2tlciwibW91c2Vkb3duIixsPT57Q28obC50YXJnZXQsInBpa2EtZGF5IikmJnRoaXMuaGlkZURhdGVwaWNrZXIoKSxsLnN0b3BQcm9wYWdhdGlvbigpfSl9ZGVzdHJveUVsZW1lbnRzKCl7Y29uc3QgbD10aGlzLmRhdGVQaWNrZXIu''@;'; put 'put ''cGFyZW50Tm9kZTt0aGlzLiRkYXRlUGlja2VyJiZ0aGlzLiRkYXRlUGlja2VyLmRlc3Ryb3koKSxsJiZsLnJlbW92ZUNoaWxkKHRoaXMuZGF0ZVBpY2tlcil9cHJlcGFyZShsLGEsZCxoLGYsdil7c3VwZXIucHJlcGFyZShsLGEsZCxoLGYsdil9b3Blbigpe2xldCBsPWFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIik7dGhpcy5zaG93RGF0ZXBpY2tlcihsKSxzdXBlci5vcGVuKCksZC5hZGRTaG9ydGN1dHMoW3trZXlzOltb''@;'; put 'put ''IkFycm93TGVmdCJdXSxjYWxsYmFjazooKT0+e3RoaXMuJGRhdGVQaWNrZXIuYWRqdXN0RGF0ZSgic3VidHJhY3QiLDEpfX0se2tleXM6W1siQXJyb3dSaWdodCJdXSxjYWxsYmFjazooKT0+e3RoaXMuJGRhdGVQaWNrZXIuYWRqdXN0RGF0ZSgiYWRkIiwxKX19LHtrZXlzOltbIkFycm93VXAi''@;'; put 'put ''XV0sY2FsbGJhY2s6KCk9Pnt0aGlzLiRkYXRlUGlja2VyLmFkanVzdERhdGUoInN1YnRyYWN0Iiw3KX19LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazooKT0+e3RoaXMuJGRhdGVQaWNrZXIuYWRqdXN0RGF0ZSgiYWRkIiw3KX19XSx7Z3JvdXA6eTZlfSl9Y2xvc2UoKXt2YXIgbDtu''@;'; put 'put ''dWxsIT09KGw9dGhpcy4kZGF0ZVBpY2tlcikmJnZvaWQgMCE9PWwmJmwuZGVzdHJveSYmdGhpcy4kZGF0ZVBpY2tlci5kZXN0cm95KCksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e2NvbnN0IGg9dGhpcy5ob3QuX2dldEVkaXRvck1hbmFnZXIoKTtoLmNsb3NlRWRpdG9yKCksdGhp''@;'; put 'put ''cy5ob3Qudmlldy5yZW5kZXIoKSxoLnByZXBhcmVFZGl0b3IoKX0pLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoeTZlKSxzdXBlci5jbG9zZSgpfWZpbmlzaEVkaXRpbmcoKXtzdXBlci5maW5pc2hFZGl0''@;'; put 'put ''aW5nKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSl9c2hvd0RhdGVwaWNrZXIobCl7Y29uc3QgYT1OdGUoeVYsdGhpcyxWdGUpLmNhbGwo''@;'; put 'put ''dGhpcyksZD10aGlzLmhvdC52aWV3LmlzTW91c2VEb3duKCksaD0hIWwmJnVKKGwua2V5Q29kZSk7bGV0IGY7dGhpcy5kYXRlUGlja2VyLnN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLiRkYXRlUGlja2VyPW5ldyBIdGUodGhpcy5nZXREYXRlUGlja2VyQ29uZmlnKCkpLCJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiB0aGlzLiRkYXRlUGlja2VyLnVzZU1vbWVudCYmdGhpcy4kZGF0ZVBpY2tlci51c2VNb21lbnQoJHMpLHRoaXMuJGRhdGVQaWNrZXIuX29uSW5wdXRGb2N1cz1mdW5jdGlvbigpe30sdGhpcy5vcmlnaW5hbFZhbHVlPyhmPXRoaXMub3JpZ2luYWxWYWx1ZSwkcyhmLGEsITApLmlz''@;'; put 'put ''VmFsaWQoKSYmdGhpcy4kZGF0ZVBpY2tlci5zZXRNb21lbnQoJHMoZixhKSwhMCksdGhpcy5nZXRWYWx1ZSgpIT09dGhpcy5vcmlnaW5hbFZhbHVlJiZ0aGlzLnNldFZhbHVlKHRoaXMub3JpZ2luYWxWYWx1ZSksIWgmJiFkJiZ0aGlzLnNldFZhbHVlKCIiKSk6dGhpcy5jZWxsUHJvcGVydGll''@;'; put 'put ''cy5kZWZhdWx0RGF0ZT8oZj10aGlzLmNlbGxQcm9wZXJ0aWVzLmRlZmF1bHREYXRlLCRzKGYsYSwhMCkuaXNWYWxpZCgpJiZ0aGlzLiRkYXRlUGlja2VyLnNldE1vbWVudCgkcyhmLGEpLCEwKSwhaCYmIWQmJnRoaXMuc2V0VmFsdWUoIiIpKTp0aGlzLiRkYXRlUGlja2VyLmdvdG9Ub2RheSgp''@;'; put 'put ''fWhpZGVEYXRlcGlja2VyKCl7dGhpcy5kYXRlUGlja2VyU3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy4kZGF0ZVBpY2tlci5oaWRlKCl9Z2V0RGF0ZVBpY2tlckNvbmZpZygpe3ZhciBsO2NvbnN0IGE9dGhpcy5URVhUQVJFQSxkPXt9O3RoaXMuY2VsbFByb3BlcnRpZXMmJnRoaXMuY2VsbFBy''@;'; put 'put ''b3BlcnRpZXMuZGF0ZVBpY2tlckNvbmZpZyYmUEEoZCx0aGlzLmNlbGxQcm9wZXJ0aWVzLmRhdGVQaWNrZXJDb25maWcpO2NvbnN0IGg9ZC5vblNlbGVjdCxmPWQub25DbG9zZTtyZXR1cm4gZC5maWVsZD1hLGQudHJpZ2dlcj1hLGQuY29udGFpbmVyPXRoaXMuZGF0ZVBpY2tlcixkLmJvdW5k''@;'; put 'put ''PSExLGQua2V5Ym9hcmRJbnB1dD0hMSxkLmZvcm1hdD1udWxsIT09KGw9ZC5mb3JtYXQpJiZ2b2lkIDAhPT1sP2w6TnRlKHlWLHRoaXMsVnRlKS5jYWxsKHRoaXMpLGQucmVwb3NpdGlvbj1kLnJlcG9zaXRpb258fCExLGQuaXNSVEw9ITEsZC5vblNlbGVjdD12PT57bGV0IE09djtpc05hTihN''@;'; put 'put ''LmdldFRpbWUoKSl8fChNPSRzKE0pLmZvcm1hdChOdGUoeVYsdGhpcyxWdGUpLmNhbGwodGhpcykpKSx0aGlzLnNldFZhbHVlKE0pLGgmJmgoKSxYMygpJiZ0aGlzLmhpZGVEYXRlcGlja2VyKCl9LGQub25DbG9zZT0oKT0+e3RoaXMucGFyZW50RGVzdHJveWVkfHx0aGlzLmZpbmlzaEVkaXRp''@;'; put 'put ''bmcoITEpLGYmJmYoKX0sZH1yZWZyZXNoRGltZW5zaW9ucyhsKXt2YXIgYTtpZihzdXBlci5yZWZyZXNoRGltZW5zaW9ucyhsKSx0aGlzLnN0YXRlIT09U3UuRURJVElORylyZXR1cm47aWYodGhpcy5URD10aGlzLmdldEVkaXRlZENlbGwoKSwhdGhpcy5URClyZXR1cm4gdm9pZCB0aGlzLmhp''@;'; put 'put ''ZGVEYXRlcGlja2VyKCk7Y29uc3R7cm93SW5kZXhNYXBwZXI6ZCxjb2x1bW5JbmRleE1hcHBlcjpofT10aGlzLmhvdCx7d3RPdmVybGF5czpmfT10aGlzLmhvdC52aWV3Ll93dCx7d3RUYWJsZTp2fT1udWxsIT09KGE9Zi5nZXRQYXJlbnRPdmVybGF5KHRoaXMuVEQpKSYmdm9pZCAwIT09YT9h''@;'; put 'put ''OnRoaXMuaG90LnZpZXcuX3d0LE09ZC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHYuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCkpLEQ9ZC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHYuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKSksVT1oLmdldFZpc3VhbEZy''@;'; put 'put ''b21SZW5kZXJhYmxlSW5kZXgodi5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKSksdGU9aC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHYuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKSk7aWYodGhpcy5yb3c+PU0mJnRoaXMucm93PD1EJiZ0aGlzLmNvbD49VSYm''@;'; put 'put ''dGhpcy5jb2w8PXRlKXtjb25zdCBvZT10aGlzLlRELmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuZGF0ZVBpY2tlclN0eWxlLnRvcD1gJHt0aGlzLmhvdC5yb290V2luZG93LnBhZ2VZT2Zmc2V0K29lLnRvcCtGdSh0aGlzLlREKX1weGA7bGV0IHZlPXRoaXMuaG90LnJvb3RXaW5kb3cu''@;'; put 'put ''cGFnZVhPZmZzZXQ7dGhpcy5ob3QuaXNSdGwoKT92ZSs9b2UucmlnaHQtX3UodGhpcy5kYXRlUGlja2VyKTp2ZSs9b2UubGVmdCx0aGlzLmRhdGVQaWNrZXJTdHlsZS5sZWZ0PWAke3ZlfXB4YH1lbHNlIHRoaXMuaGlkZURhdGVwaWNrZXIoKX19ZnVuY3Rpb24gVnRlKCl7dmFyIGM7cmV0dXJu''@;'; put 'put ''IG51bGwhPT0oYz10aGlzLmNlbGxQcm9wZXJ0aWVzLmRhdGVGb3JtYXQpJiZ2b2lkIDAhPT1jP2M6IkREL01NL1lZWVkifWNsYXNzIF82ZSBleHRlbmRzIFJ0ZXtzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuImRyb3Bkb3duIn1wcmVwYXJlKGwsYSxkLGgsZix2KXt2LmZpbHRlcj0h''@;'; put 'put ''MSx2LnN0cmljdD0hMCxzdXBlci5wcmVwYXJlKGwsYSxkLGgsZix2KX19Y2xhc3MgdzZlIGV4dGVuZHMgdnZ7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJudW1lcmljIn19Y2xhc3MgQzZlIGV4dGVuZHMgdnZ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0''@;'; put 'put ''aW9uIGIxdChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gXzF0KGMpe3ZhciBsPWZ1bmN0aW9uIHcxdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZh''@;'; put 'put ''dWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5''@;'; put 'put ''bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsImF1dG9SZXNpemUiLHQ2ZSh0aGlzLmhvdC5yb290RG9jdW1lbnQs''@;'; put 'put ''e3RleHRDb250ZW50Omw9PiJcdTIwMjIiLnJlcGVhdChsLnZhbHVlLmxlbmd0aCl9KSl9c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJwYXNzd29yZCJ9Y3JlYXRlRWxlbWVudHMoKXtzdXBlci5jcmVhdGVFbGVtZW50cygpLHRoaXMuVEVYVEFSRUE9dGhpcy5ob3Qucm9vdERvY3Vt''@;'; put 'put ''ZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0IiksdGhpcy5URVhUQVJFQS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJwYXNzd29yZCIpLHRoaXMuVEVYVEFSRUEuc2V0QXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIsIiIpLHRoaXMuVEVYVEFSRUEuY2xhc3NOYW1lPSJoYW5kc29udGFibGVJbnB1dCIs''@;'; put 'put ''dGhpcy50ZXh0YXJlYVN0eWxlPXRoaXMuVEVYVEFSRUEuc3R5bGUsdGhpcy50ZXh0YXJlYVN0eWxlLndpZHRoPTAsdGhpcy50ZXh0YXJlYVN0eWxlLmhlaWdodD0wLHg0KHRoaXMuVEVYVEFSRUFfUEFSRU5UKSx0aGlzLlRFWFRBUkVBLnNldEF0dHJpYnV0ZSguLi4kMygtMSkpLHRoaXMuVEVY''@;'; put 'put ''VEFSRUFfUEFSRU5ULmFwcGVuZENoaWxkKHRoaXMuVEVYVEFSRUEpfX1jb25zdCBCdGU9Imh0X2VkaXRvcl92aXNpYmxlIixTNmU9InNlbGVjdEVkaXRvciI7Y2xhc3MgTTZlIGV4dGVuZHMgbEN7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJzZWxlY3QifWluaXQoKXt0aGlzLnNl''@;'; put 'put ''bGVjdFdyYXBwZXI9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuc2VsZWN0PXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSx0aGlzLnNlbGVjdC5zZXRBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0IiwidHJ1ZSIpLHRo''@;'; put 'put ''aXMuc2VsZWN0V3JhcHBlci5zdHlsZS5kaXNwbGF5PSJub25lIjtjb25zdCBsPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxhPXRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3M7bC5jbGFzc05hbWU9Imh0QXV0b2NvbXBsZXRlQXJyb3ciLGEmJmwuc2V0''@;'; put 'put ''QXR0cmlidXRlKC4uLlg5KCkpLGwuYXBwZW5kQ2hpbGQodGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJcdTI1YmMiKSksaWkodGhpcy5zZWxlY3RXcmFwcGVyLCJodFNlbGVjdEVkaXRvciIpLHRoaXMuc2VsZWN0V3JhcHBlci5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdCks''@;'; put 'put ''dGhpcy5zZWxlY3RXcmFwcGVyLmluc2VydEJlZm9yZShsLHRoaXMuc2VsZWN0V3JhcHBlci5maXJzdENoaWxkKSx0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdFdyYXBwZXIpLHRoaXMucmVnaXN0ZXJIb29rcygpfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuc2Vs''@;'; put 'put ''ZWN0LnZhbHVlfXNldFZhbHVlKGwpe3RoaXMuc2VsZWN0LnZhbHVlPWx9b3Blbigpe3RoaXMuX29wZW5lZD0hMCx0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCksdGhpcy5zZWxlY3RXcmFwcGVyLnN0eWxlLmRpc3BsYXk9IiIsdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuc2V0QWN0aXZl''@;'; put 'put ''Q29udGV4dE5hbWUoImVkaXRvciIpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKX1jbG9zZSgpe3RoaXMuX29wZW5lZD0hMSx0aGlzLnNlbGVjdFdyYXBwZXIuc3R5bGUuZGlzcGxheT0ibm9uZSIsQ28odGhpcy5zZWxlY3RXcmFwcGVyLEJ0ZSkmJlZhKHRoaXMuc2VsZWN0V3JhcHBlcixCdGUp''@;'; put 'put ''LHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMuY2xlYXJIb29rcygpfWZvY3VzKCl7dGhpcy5zZWxlY3QuZm9jdXMoKX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbEhvcml6b250YWxseSIsKCk9PnRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSksdGhpcy5h''@;'; put 'put ''ZGRIb29rKCJhZnRlclNjcm9sbFZlcnRpY2FsbHkiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb2x1bW5SZXNpemUiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJSb3dSZXNpemUiLCgpPT50aGlzLnJl''@;'; put 'put ''ZnJlc2hEaW1lbnNpb25zKCkpfXByZXBhcmUobCxhLGQsaCxmLHYpe3N1cGVyLnByZXBhcmUobCxhLGQsaCxmLHYpO2NvbnN0IE09dGhpcy5jZWxsUHJvcGVydGllcy5zZWxlY3RPcHRpb25zO2xldCBEO0Q9dGhpcy5wcmVwYXJlT3B0aW9ucygiZnVuY3Rpb24iPT10eXBlb2YgTT9NKHRoaXMu''@;'; put 'put ''cm93LHRoaXMuY29sLHRoaXMucHJvcCk6TSkseDQodGhpcy5zZWxlY3QpLGFzKEQsKFUsdGUpPT57Y29uc3Qgb2U9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIk9QVElPTiIpO29lLnZhbHVlPXRlLFQ2KG9lLFUpLHRoaXMuc2VsZWN0LmFwcGVuZENoaWxkKG9lKX0pfXBy''@;'; put 'put ''ZXBhcmVPcHRpb25zKGwpe2xldCBhPXt9O2lmKEFycmF5LmlzQXJyYXkobCkpZm9yKGxldCBkPTAsaD1sLmxlbmd0aDtkPGg7ZCsrKWFbbFtkXV09bFtkXTtlbHNlIm9iamVjdCI9PXR5cGVvZiBsJiYoYT1sKTtyZXR1cm4gYX1yZWZyZXNoVmFsdWUoKXtjb25zdCBsPXRoaXMuaG90LmdldFNv''@;'; put 'put ''dXJjZURhdGFBdENlbGwodGhpcy5yb3csdGhpcy5wcm9wKTt0aGlzLm9yaWdpbmFsVmFsdWU9bCx0aGlzLnNldFZhbHVlKGwpLHRoaXMucmVmcmVzaERpbWVuc2lvbnMoKX1yZWZyZXNoRGltZW5zaW9ucygpe2lmKHRoaXMuc3RhdGUhPT1TdS5FRElUSU5HKXJldHVybjtpZih0aGlzLlREPXRo''@;'; put 'put ''aXMuZ2V0RWRpdGVkQ2VsbCgpLCF0aGlzLlREKXJldHVybiB2b2lkIHRoaXMuY2xvc2UoKTtjb25zdHt0b3A6bCxzdGFydDphLHdpZHRoOmQsaGVpZ2h0Omh9PXRoaXMuZ2V0RWRpdGVkQ2VsbFJlY3QoKSxmPXRoaXMuc2VsZWN0V3JhcHBlci5zdHlsZTtmLmhlaWdodD1gJHtofXB4YCxmLndp''@;'; put 'put ''ZHRoPWAke2R9cHhgLGYudG9wPWAke2x9cHhgLGZbdGhpcy5ob3QuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Il09YCR7YX1weGAsZi5tYXJnaW49IjBweCIsaWkodGhpcy5zZWxlY3RXcmFwcGVyLEJ0ZSl9cmVnaXN0ZXJTaG9ydGN1dHMoKXtjb25zdCBhPXRoaXMuaG90LmdldFNob3J0Y3V0TWFu''@;'; put 'put ''YWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLGQ9e2dyb3VwOlM2ZX07dGhpcy5pc0luRnVsbEVkaXRNb2RlKCkmJmEuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJBcnJvd1VwIl1dLGNhbGxiYWNrOigpPT57Y29uc3QgaD10aGlzLnNlbGVjdC5zZWxlY3RlZEluZGV4LTE7aD49MCYmKHRoaXMu''@;'; put 'put ''c2VsZWN0W2hdLnNlbGVjdGVkPSEwKX19LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazooKT0+e2NvbnN0IGg9dGhpcy5zZWxlY3Quc2VsZWN0ZWRJbmRleCsxO2g8PXRoaXMuc2VsZWN0Lmxlbmd0aC0xJiYodGhpcy5zZWxlY3RbaF0uc2VsZWN0ZWQ9ITApfX1dLGQpfXVucmVnaXN0''@;'; put 'put ''ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKFM2ZSl9fWNsYXNzIHg2ZSBleHRlbmRzIHZ2e3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4idGltZSJ9cHJlcGFyZShsLGEs''@;'; put 'put ''ZCxoLGYsdil7c3VwZXIucHJlcGFyZShsLGEsZCxoLGYsdiksdGhpcy5URVhUQVJFQS5kaXI9Imx0ciJ9fWZ1bmN0aW9uIGp0ZShjLGwsYSxkLGgsZix2KXtFay5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZix2XSksVDYobCxmPz8iIiwhMSl9ZnVuY3Rpb24gY0MoYyxsLGEsZCxoLGYsdil7Y29u''@;'; put 'put ''c3R7cm9vdERvY3VtZW50Ok19PWMsRD12LmFsbG93SHRtbD9qdGU6eDUsVT1NLmNyZWF0ZUVsZW1lbnQoIkRJViIpLHRlPWMuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncztpZihVLmNsYXNzTmFtZT0iaHRBdXRvY29tcGxldGVBcnJvdyIsdGUmJlUuc2V0QXR0cmlidXRlKC4uLlg5KCkpLFUuYXBw''@;'; put 'put ''ZW5kQ2hpbGQoTS5jcmVhdGVUZXh0Tm9kZSgiXHUyNWJjIikpLEQuYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pLGwuZmlyc3RDaGlsZHx8bC5hcHBlbmRDaGlsZChNLmNyZWF0ZVRleHROb2RlKCJceGEwIikpLGwuaW5zZXJ0QmVmb3JlKFUsbC5maXJzdENoaWxkKSxpaShsLCJodEF1dG9j''@;'; put 'put ''b21wbGV0ZSIpLCFjLmFjQXJyb3dMaXN0ZW5lcil7Y29uc3Qgb2U9bmV3IFZmKGMpO2MuYWNBcnJvd0xpc3RlbmVyPWZ1bmN0aW9uKHZlKXtDbyh2ZS50YXJnZXQsImh0QXV0b2NvbXBsZXRlQXJyb3ciKSYmYy52aWV3Ll93dC5nZXRTZXR0aW5nKCJvbkNlbGxEYmxDbGljayIsbnVsbCxjLl9j''@;'; put 'put ''cmVhdGVDZWxsQ29vcmRzKGEsZCksbCl9LG9lLmFkZEV2ZW50TGlzdGVuZXIoYy5yb290RWxlbWVudCwibW91c2Vkb3duIixjLmFjQXJyb3dMaXN0ZW5lciksYy5hZGRIb29rT25jZSgiYWZ0ZXJEZXN0cm95IiwoKT0+e29lLmRlc3Ryb3koKX0pfX1mdW5jdGlvbiB6dGUoYyxsLGEsZCxoLGYs''@;'; put 'put ''dil7Y0MuYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pfWp0ZS5SRU5ERVJFUl9UWVBFPSJodG1sIixjQy5SRU5ERVJFUl9UWVBFPSJhdXRvY29tcGxldGUiLHp0ZS5SRU5ERVJFUl9UWVBFPSJkcm9wZG93biI7Y29uc3QgRTZlPW5ldyBXZWFrTWFwLFQ2ZT1uZXcgV2Vha01hcCx1Qz0iZGF0''@;'; put 'put ''YS1yb3ciLGRDPSJkYXRhLWNvbCI7ZnVuY3Rpb24gVXRlKGMsbCxhLGQsaCxmLHYpe2NvbnN0e3Jvb3REb2N1bWVudDpNfT1jLEQ9Yy5nZXRTZXR0aW5ncygpLmFyaWFUYWdzO0VrLmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxmLHZdKSxmdW5jdGlvbiBJMXQoYyl7bGV0IGw9VDZlLmdldChjKTtp''@;'; put 'put ''ZighbCl7Y29uc3R7cm9vdEVsZW1lbnQ6YX09YztsPW5ldyBWZihjKSxsLmFkZEV2ZW50TGlzdGVuZXIoYSwiY2xpY2siLGQ9PmZ1bmN0aW9uIFAxdChjLGwpe2NvbnN0e3RhcmdldDphfT1jO2lmKCFadGUoYSl8fCFhLmhhc0F0dHJpYnV0ZSh1Qyl8fCFhLmhhc0F0dHJpYnV0ZShkQykpcmV0''@;'; put 'put ''dXJuO2NvbnN0IGQ9cGFyc2VJbnQoYS5nZXRBdHRyaWJ1dGUodUMpLDEwKSxoPXBhcnNlSW50KGEuZ2V0QXR0cmlidXRlKGRDKSwxMCk7bC5nZXRDZWxsTWV0YShkLGgpLnJlYWRPbmx5JiZjLnByZXZlbnREZWZhdWx0KCl9KGQsYykpLGwuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZXVwIixk''@;'; put 'put ''PT5mdW5jdGlvbiBPMXQoYyxsKXtjb25zdHt0YXJnZXQ6YX09YztadGUoYSkmJighYS5oYXNBdHRyaWJ1dGUodUMpfHwhYS5oYXNBdHRyaWJ1dGUoZEMpfHxzZXRUaW1lb3V0KGwubGlzdGVuLDEwKSl9KGQsYykpLGwuYWRkRXZlbnRMaXN0ZW5lcihhLCJjaGFuZ2UiLGQ9PmZ1bmN0aW9uIEYx''@;'; put 'put ''dChjLGwpe2NvbnN0e3RhcmdldDphfT1jO2lmKCFadGUoYSl8fCFhLmhhc0F0dHJpYnV0ZSh1Qyl8fCFhLmhhc0F0dHJpYnV0ZShkQykpcmV0dXJuO2NvbnN0IGQ9cGFyc2VJbnQoYS5nZXRBdHRyaWJ1dGUodUMpLDEwKSxoPXBhcnNlSW50KGEuZ2V0QXR0cmlidXRlKGRDKSwxMCksZj1sLmdl''@;'; put 'put ''dENlbGxNZXRhKGQsaCk7aWYoIWYucmVhZE9ubHkpe2xldCB2PW51bGw7dj1jLnRhcmdldC5jaGVja2VkP3ZvaWQgMD09PWYudW5jaGVja2VkVGVtcGxhdGV8fGYuY2hlY2tlZFRlbXBsYXRlOnZvaWQgMCE9PWYudW5jaGVja2VkVGVtcGxhdGUmJmYudW5jaGVja2VkVGVtcGxhdGUsbC5zZXRE''@;'; put 'put ''YXRhQXRDZWxsKGQsaCx2KX19KGQsYykpLFQ2ZS5zZXQoYyxsKX19KGMpO2xldCBVPWZ1bmN0aW9uIFIxdChjKXtjb25zdCBsPWMuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtyZXR1cm4gbC5jbGFzc05hbWU9Imh0Q2hlY2tib3hSZW5kZXJlcklucHV0IixsLnR5cGU9ImNoZWNrYm94IixsLnNl''@;'; put 'put ''dEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLGwuY2xvbmVOb2RlKCExKX0oTSk7Y29uc3QgdGU9di5sYWJlbDtsZXQgb2U9ITE7aWYodHlwZW9mIHYuY2hlY2tlZFRlbXBsYXRlPiJ1IiYmKHYuY2hlY2tlZFRlbXBsYXRlPSEwKSx0eXBlb2Ygdi51bmNoZWNrZWRUZW1wbGF0ZT4idSImJih2''@;'; put 'put ''LnVuY2hlY2tlZFRlbXBsYXRlPSExKSx4NChsKSxmPT09di5jaGVja2VkVGVtcGxhdGV8fHJjKGYpLnRvTG9jYWxlTG93ZXJDYXNlKHYubG9jYWxlKT09PXJjKHYuY2hlY2tlZFRlbXBsYXRlKS50b0xvY2FsZUxvd2VyQ2FzZSh2LmxvY2FsZSk/VS5jaGVja2VkPSEwOmY9PT12LnVuY2hlY2tl''@;'; put 'put ''ZFRlbXBsYXRlfHxyYyhmKS50b0xvY2FsZUxvd2VyQ2FzZSh2LmxvY2FsZSk9PT1yYyh2LnVuY2hlY2tlZFRlbXBsYXRlKS50b0xvY2FsZUxvd2VyQ2FzZSh2LmxvY2FsZSk/VS5jaGVja2VkPSExOnR1KGYpP2lpKFUsIm5vVmFsdWUiKTooVS5zdHlsZS5kaXNwbGF5PSJub25lIixpaShVLCJo''@;'; put 'put ''dEJhZFZhbHVlIiksb2U9ITApLFphKFUsW1t1QyxhXSxbZEMsZF1dKSxEJiZaYShVLFt4MihjLmdldFRyYW5zbGF0ZWRQaHJhc2UoVS5jaGVja2VkP1llZTpHZWUpKSxxNGUoVS5jaGVja2VkKSxbInJvbGUiLCJjaGVja2JveCJdXSksIW9lJiZ0ZSl7bGV0IFdlPSIiO2lmKHRlLnZhbHVlKVdl''@;'; put 'put ''PSJmdW5jdGlvbiI9PXR5cGVvZiB0ZS52YWx1ZT90ZS52YWx1ZS5jYWxsKHRoaXMsYSxkLGgsZik6dGUudmFsdWU7ZWxzZSBpZih0ZS5wcm9wZXJ0eSl7Y29uc3QgZHQ9Yy5nZXREYXRhQXRSb3dQcm9wKGEsdGUucHJvcGVydHkpO1dlPW51bGwhPT1kdD9kdDoiIn1jb25zdCBudD1mdW5jdGlv''@;'; put 'put ''biBMMXQoYyxsLGEpe2NvbnN0IGQ9Yy5jcmVhdGVFbGVtZW50KCJsYWJlbCIpO2QuY2xhc3NOYW1lPSJodENoZWNrYm94UmVuZGVyZXJMYWJlbCAiKyhhPyJmdWxsV2lkdGgiOiIiKTtjb25zdCBoPWMuY3JlYXRlVGV4dE5vZGUobCk7aWYoYSl7Y29uc3QgZj1jLmNyZWF0ZUVsZW1lbnQoInNw''@;'; put 'put ''YW4iKTtmLmFwcGVuZENoaWxkKGgpLGQuYXBwZW5kQ2hpbGQoZil9ZWxzZSBkLmFwcGVuZENoaWxkKGgpO3JldHVybiBkLmNsb25lTm9kZSghMCl9KE0sV2UsITAhPT10ZS5zZXBhcmF0ZWQpOyJiZWZvcmUiPT09dGUucG9zaXRpb24/dGUuc2VwYXJhdGVkPyhsLmFwcGVuZENoaWxkKG50KSxs''@;'; put 'put ''LmFwcGVuZENoaWxkKFUpKToobnQuYXBwZW5kQ2hpbGQoVSksVT1udCk6KCF0ZS5wb3NpdGlvbnx8ImFmdGVyIj09PXRlLnBvc2l0aW9uKSYmKHRlLnNlcGFyYXRlZD8obC5hcHBlbmRDaGlsZChVKSxsLmFwcGVuZENoaWxkKG50KSk6KG50Lmluc2VydEJlZm9yZShVLG50LmZpcnN0Q2hpbGQp''@;'; put 'put ''LFU9bnQpKX1mdW5jdGlvbiB3ZSgpe2xldCBXZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2NvbnN0IG50PWMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGR0PVtdLG10PW5ldyBNYXA7bGV0ICR0PVtdLHp0PTA7aWYobnQpe2ZvcihsZXQgeW49''@;'; put 'put ''MDt5bjxudC5sZW5ndGg7eW4rKyl7Y29uc3R7cm93OmduLGNvbDp3bn09bnRbeW5dLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpSbixjb2w6RHJ9PW50W3luXS5nZXRCb3R0b21FbmRDb3JuZXIoKTtmb3IobGV0IExyPWduO0xyPD1SbjtMcis9MSlmb3IobGV0IGRyPXduO2RyPD1Ecjtkcis9''@;'; put 'put ''MSl7Y29uc3QgTXI9Yy5nZXRDZWxsTWV0YShMcixkcik7aWYoTXIuaGlkZGVuKWNvbnRpbnVlO2NvbnN0IHZpPXtjaGVja2VkVGVtcGxhdGU6TXIuY2hlY2tlZFRlbXBsYXRlLHVuY2hlY2tlZFRlbXBsYXRlOk1yLnVuY2hlY2tlZFRlbXBsYXRlfTtpZigiY2hlY2tib3giIT09TXIudHlwZSl7''@;'; put 'put ''ITA9PT1XZSYmIU1yLnJlYWRPbmx5JiYobXQuaGFzKGR0Lmxlbmd0aCk/bXQuc2V0KGR0Lmxlbmd0aCxbLi4ubXQuZ2V0KGR0Lmxlbmd0aCksW0xyLGRyLG51bGxdXSk6bXQuc2V0KGR0Lmxlbmd0aCxbW0xyLGRyLG51bGxdXSkpO2NvbnRpbnVlfWlmKCEwPT09TXIucmVhZE9ubHkpY29udGlu''@;'; put 'put ''dWU7dHlwZW9mIE1yLmNoZWNrZWRUZW1wbGF0ZT4idSImJihNci5jaGVja2VkVGVtcGxhdGU9ITApLHR5cGVvZiBNci51bmNoZWNrZWRUZW1wbGF0ZT4idSImJihNci51bmNoZWNrZWRUZW1wbGF0ZT0hMSk7Y29uc3QgTm49Yy5nZXREYXRhQXRDZWxsKExyLGRyKTshMT09PVdlP1tNci5jaGVj''@;'; put 'put ''a2VkVGVtcGxhdGUsTXIuY2hlY2tlZFRlbXBsYXRlLnRvU3RyaW5nKCldLmluY2x1ZGVzKE5uKT8kdC5wdXNoKFtMcixkcixNci51bmNoZWNrZWRUZW1wbGF0ZSx2aV0pOltNci51bmNoZWNrZWRUZW1wbGF0ZSxNci51bmNoZWNrZWRUZW1wbGF0ZS50b1N0cmluZygpLG51bGwsdm9pZCAwXS5p''@;'; put 'put ''bmNsdWRlcyhObikmJiR0LnB1c2goW0xyLGRyLE1yLmNoZWNrZWRUZW1wbGF0ZSx2aV0pOiR0LnB1c2goW0xyLGRyLE1yLnVuY2hlY2tlZFRlbXBsYXRlLHZpXSksenQrPTF9ZHQucHVzaCh6dCksenQ9MH0kdD0kdC5ldmVyeSh5bj0+e2xldFssLGduXT15bjtyZXR1cm4gZ249PT0kdFswXVsy''@;'; put 'put ''XX0pPyR0Lm1hcCh5bj0+e2xldFtnbix3bixSbl09eW47cmV0dXJuW2duLHduLFJuXX0pOiR0Lm1hcCh5bj0+e2xldFtnbix3biwsUm5dPXluO3JldHVybltnbix3bixSbi5jaGVja2VkVGVtcGxhdGVdfSksJHQubGVuZ3RoPjAmJmR0LmZvckVhY2goKHluLGduKT0+e2xldCB3bj0kdC5zcGxp''@;'; put 'put ''Y2UoMCx5bik7bXQuc2l6ZSYmbXQuaGFzKGduKSYmKHduPVsuLi53biwuLi5tdC5nZXQoZ24pXSksYy5zZXREYXRhQXRDZWxsKHduKX0pfX1mdW5jdGlvbiBGZSgpe2NvbnN0IFdlPWMuZ2V0U2VsZWN0ZWRSYW5nZSgpO2lmKFdlKXtmb3IobGV0IG50PTA7bnQ8V2UubGVuZ3RoO250Kyspe2Nv''@;'; put 'put ''bnN0IGR0PVdlW250XS5nZXRUb3BTdGFydENvcm5lcigpLG10PVdlW250XS5nZXRCb3R0b21FbmRDb3JuZXIoKTtmb3IobGV0ICR0PWR0LnJvdzskdDw9bXQucm93OyR0KyspZm9yKGxldCB6dD1kdC5jb2w7enQ8PW10LmNvbDt6dCsrKXtpZihjLmdldENlbGxNZXRhKCR0LHp0KS5yZWFkT25s''@;'; put 'put ''eSljb250aW51ZTtjb25zdCBnbj1jLmdldENlbGwoJHQsenQpO2lmKEU0KGduKSYmZ24ucXVlcnlTZWxlY3RvckFsbCgiaW5wdXRbdHlwZT1jaGVja2JveF0iKS5sZW5ndGg+MClyZXR1cm4hMH19cmV0dXJuITF9fSghdGV8fHRlJiYhdGUuc2VwYXJhdGVkKSYmbC5hcHBlbmRDaGlsZChVKSxv''@;'; put 'put ''ZSYmbC5hcHBlbmRDaGlsZChNLmNyZWF0ZVRleHROb2RlKCIjYmFkLXZhbHVlIyIpKSxFNmUuaGFzKGMpfHwoRTZlLnNldChjLCEwKSxmdW5jdGlvbiB2ZSgpe2MuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0cyhbe2tleXM6W1sic3BhY2UiXV0s''@;'; put 'put ''Y2FsbGJhY2s6KCk9Pih3ZSgpLCFGZSgpKSxydW5Pbmx5SWY6KCk9Pnt2YXIgbXQ7cmV0dXJuIG51bGw9PT0obXQ9Yy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkpfHx2b2lkIDA9PT1tdD92b2lkIDA6bXQuaGlnaGxpZ2h0LmlzQ2VsbCgpfX0se2tleXM6W1siZW50ZXIiXV0sY2FsbGJhY2s6''@;'; put 'put ''KCk9Pih3ZSgpLCFGZSgpKSxydW5Pbmx5SWY6KCk9Pntjb25zdCBtdD1jLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtyZXR1cm4gYy5nZXRTZXR0aW5ncygpLmVudGVyQmVnaW5zRWRpdGluZyYmbXQ/LmhpZ2hsaWdodC5pc0NlbGwoKSYmIWMuc2VsZWN0aW9uLmlzTXVsdGlwbGUoKX19LHtr''@;'; put 'put ''ZXlzOltbImRlbGV0ZSJdLFsiYmFja3NwYWNlIl1dLGNhbGxiYWNrOigpPT4od2UoITApLCFGZSgpKSxydW5Pbmx5SWY6KCk9Pnt2YXIgbXQ7cmV0dXJuIG51bGw9PT0obXQ9Yy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkpfHx2b2lkIDA9PT1tdD92b2lkIDA6bXQuaGlnaGxpZ2h0LmlzQ2Vs''@;'; put 'put ''bCgpfX1dLHtncm91cDoiY2hlY2tib3hSZW5kZXJlciIscmVsYXRpdmVUb0dyb3VwOk42LHBvc2l0aW9uOiJiZWZvcmUifSl9KCkpfWZ1bmN0aW9uIFp0ZShjKXtyZXR1cm4iSU5QVVQiPT09Yy50YWdOYW1lJiYiY2hlY2tib3giPT09Yy5nZXRBdHRyaWJ1dGUoInR5cGUiKX1mdW5jdGlvbiBX''@;'; put 'put ''dGUoYyxsLGEsZCxoLGYsdil7Y0MuYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pfUFhLmdldFNpbmdsZXRvbigpLmFkZCgibW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIixmdW5jdGlvbihjLGwsYSl7Y29uc3R7bGFiZWw6ZCx0eXBlOmgscm93OmYsY29sdW1uOnYscHJvcDpNfT1sO2lmKCJj''@;'; put 'put ''aGVja2JveCIhPT1ofHwhZClyZXR1cm47Y29uc3R7dmFsdWU6RCxwcm9wZXJ0eTpVfT1kO2xldCB0ZT1hO2lmKEQpdGU9ImZ1bmN0aW9uIj09dHlwZW9mIEQ/RChmLHYsTSxhKTpEO2Vsc2UgaWYoVSl7Y29uc3Qgb2U9dGhpcy5nZXREYXRhQXRSb3dQcm9wKGYsVSk7dGU9bnVsbCE9PW9lP29l''@;'; put 'put ''OmF9cmV0dXJuYCR7cmModGUpLmxlbmd0aH1gfSksVXRlLlJFTkRFUkVSX1RZUEU9ImNoZWNrYm94IixXdGUuUkVOREVSRVJfVFlQRT0iaGFuZHNvbnRhYmxlIjt2YXIgWXRlLGs2ZSxHdGUsRDZlLCR0ZSxSNmUsTjF0PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiB3''@;'; put 'put ''aW5kb3c8InUiP3dpbmRvdzp0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6e307ZnVuY3Rpb24gVjF0KGMpe3JldHVybiBjJiZjLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjLCJkZWZhdWx0Iik/Yy5kZWZhdWx0''@;'; put 'put ''OmN9ZnVuY3Rpb24gSTZlKCl7aWYoRDZlKXJldHVybiBHdGU7RDZlPTE7Y29uc3QgYz1be2tleToiWmlCIixmYWN0b3I6TWF0aC5wb3coMTAyNCw3KX0se2tleToiWkIiLGZhY3RvcjpNYXRoLnBvdygxZTMsNyl9LHtrZXk6IllpQiIsZmFjdG9yOk1hdGgucG93KDEwMjQsOCl9LHtrZXk6IllC''@;'; put 'put ''IixmYWN0b3I6TWF0aC5wb3coMWUzLDgpfSx7a2V5OiJUaUIiLGZhY3RvcjpNYXRoLnBvdygxMDI0LDQpfSx7a2V5OiJUQiIsZmFjdG9yOk1hdGgucG93KDFlMyw0KX0se2tleToiUGlCIixmYWN0b3I6TWF0aC5wb3coMTAyNCw1KX0se2tleToiUEIiLGZhY3RvcjpNYXRoLnBvdygxZTMsNSl9''@;'; put 'put ''LHtrZXk6Ik1pQiIsZmFjdG9yOk1hdGgucG93KDEwMjQsMil9LHtrZXk6Ik1CIixmYWN0b3I6TWF0aC5wb3coMWUzLDIpfSx7a2V5OiJLaUIiLGZhY3RvcjpNYXRoLnBvdygxMDI0LDEpfSx7a2V5OiJLQiIsZmFjdG9yOk1hdGgucG93KDFlMywxKX0se2tleToiR2lCIixmYWN0b3I6TWF0aC5w''@;'; put 'put ''b3coMTAyNCwzKX0se2tleToiR0IiLGZhY3RvcjpNYXRoLnBvdygxZTMsMyl9LHtrZXk6IkVpQiIsZmFjdG9yOk1hdGgucG93KDEwMjQsNil9LHtrZXk6IkVCIixmYWN0b3I6TWF0aC5wb3coMWUzLDYpfSx7a2V5OiJCIixmYWN0b3I6MX1dO2Z1bmN0aW9uIGwoRCl7cmV0dXJuIEQucmVwbGFj''@;'; put 'put ''ZSgvWy0vXFxeJCorPy4oKXxbXF17fV0vZywiXFwkJiIpfWZ1bmN0aW9uIGEoRCxVLHRlLG9lLHZlLHdlLEZlKXtpZighaXNOYU4oK0QpKXJldHVybitEO2xldCBXZT0iIixudD1ELnJlcGxhY2UoLyheW14oXSopXCgoLiopXCkoW14pXSokKS8sIiQxJDIkMyIpO2lmKG50IT09RClyZXR1cm4t''@;'; put 'put ''MSphKG50LFUsdGUsb2UsdmUsd2UpO2ZvcihsZXQgZ249MDtnbjxjLmxlbmd0aDtnbisrKXtsZXQgd249Y1tnbl07aWYoV2U9RC5yZXBsYWNlKFJlZ0V4cChgKFswLTkgXSkoJHt3bi5rZXl9KSRgKSwiJDEiKSxXZSE9PUQpcmV0dXJuIGEoV2UsVSx0ZSxvZSx2ZSx3ZSkqd24uZmFjdG9yfWlm''@;'; put 'put ''KFdlPUQucmVwbGFjZSgiJSIsIiIpLFdlIT09RClyZXR1cm4gYShXZSxVLHRlLG9lLHZlLHdlKS8xMDA7bGV0IGR0PXBhcnNlRmxvYXQoRCk7aWYoaXNOYU4oZHQpKXJldHVybjtsZXQgbXQ9b2UoZHQpO2lmKG10JiYiLiIhPT1tdCYmKFdlPUQucmVwbGFjZShuZXcgUmVnRXhwKGAke2wobXQp''@;'; put 'put ''fSRgKSwiIiksV2UhPT1EKSlyZXR1cm4gYShXZSxVLHRlLG9lLHZlLHdlKTtsZXQgJHQ9e307T2JqZWN0LmtleXMod2UpLmZvckVhY2goZ249PnskdFt3ZVtnbl1dPWdufSk7bGV0IHp0PU9iamVjdC5rZXlzKCR0KS5zb3J0KCkucmV2ZXJzZSgpLHluPXp0Lmxlbmd0aDtmb3IobGV0IGduPTA7''@;'; put 'put ''Z248eW47Z24rKyl7bGV0IHduPXp0W2duXSxSbj0kdFt3bl07aWYoV2U9RC5yZXBsYWNlKHduLCIiKSxXZSE9PUQpe2xldCBEcjtzd2l0Y2goUm4pe2Nhc2UidGhvdXNhbmQiOkRyPU1hdGgucG93KDEwLDMpO2JyZWFrO2Nhc2UibWlsbGlvbiI6RHI9TWF0aC5wb3coMTAsNik7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJiaWxsaW9uIjpEcj1NYXRoLnBvdygxMCw5KTticmVhaztjYXNlInRyaWxsaW9uIjpEcj1NYXRoLnBvdygxMCwxMil9cmV0dXJuIGEoV2UsVSx0ZSxvZSx2ZSx3ZSkqRHJ9fX1mdW5jdGlvbiBoKEQsVSx0ZT0iIixvZSx2ZSx3ZSxGZSl7aWYoIiI9PT1EKXJldHVybjtpZihEPT09dmUpcmV0''@;'; put 'put ''dXJuIDA7bGV0IFdlPWZ1bmN0aW9uIGQoRCxVLHRlKXtsZXQgb2U9RC5yZXBsYWNlKHRlLCIiKTtyZXR1cm4gb2U9b2UucmVwbGFjZShuZXcgUmVnRXhwKGAoWzAtOV0pJHtsKFUudGhvdXNhbmRzKX0oWzAtOV0pYCwiZyIpLCIkMSQyIiksb2U9b2UucmVwbGFjZShVLmRlY2ltYWwsIi4iKSxv''@;'; put 'put ''ZX0oRCxVLHRlKTtyZXR1cm4gYShXZSxVLHRlLG9lLHZlLHdlKX1yZXR1cm4gR3RlPXt1bmZvcm1hdDpmdW5jdGlvbiBNKEQsVSl7Y29uc3QgdGU9SnRlKCk7bGV0IG50LG9lPXRlLmN1cnJlbnREZWxpbWl0ZXJzKCksdmU9dGUuY3VycmVudEN1cnJlbmN5KCkuc3ltYm9sLHdlPXRlLmN1cnJl''@;'; put 'put ''bnRPcmRpbmFsKCksRmU9dGUuZ2V0WmVyb0Zvcm1hdCgpLFdlPXRlLmN1cnJlbnRBYmJyZXZpYXRpb25zKCk7aWYoInN0cmluZyI9PXR5cGVvZiBEKW50PWZ1bmN0aW9uIGYoRCxVKXtpZighRC5pbmRleE9mKCI6Iil8fCI6Ij09PVUudGhvdXNhbmRzKXJldHVybiExO2xldCBvZT1ELnNwbGl0''@;'; put 'put ''KCI6Iik7aWYoMyE9PW9lLmxlbmd0aClyZXR1cm4hMTtsZXQgd2U9K29lWzFdLEZlPStvZVsyXTtyZXR1cm4haXNOYU4oK29lWzBdKSYmIWlzTmFOKHdlKSYmIWlzTmFOKEZlKX0oRCxvZSk/ZnVuY3Rpb24gdihEKXtsZXQgVT1ELnNwbGl0KCI6Iik7cmV0dXJuK1VbMl0rNjAqK1VbMV0rMzYw''@;'; put 'put ''MCorVVswXX0oRCk6aChELG9lLHZlLHdlLEZlLFdlKTtlbHNle2lmKCJudW1iZXIiIT10eXBlb2YgRClyZXR1cm47bnQ9RH1pZih2b2lkIDAhPT1udClyZXR1cm4gbnR9fX1mdW5jdGlvbiBLdGUoKXtpZihSNmUpcmV0dXJuICR0ZTtSNmU9MTtsZXQgYz1JNmUoKTtjb25zdCBsPS9eW2Etel17''@;'; put 'put ''MiwzfSgtW2EtekEtWl17NH0pPygtKFtBLVpdezJ9fFswLTldezN9KSk/JC8sVT17b3V0cHV0Ont0eXBlOiJzdHJpbmciLHZhbGlkVmFsdWVzOlsiY3VycmVuY3kiLCJwZXJjZW50IiwiYnl0ZSIsInRpbWUiLCJvcmRpbmFsIiwibnVtYmVyIl19LGJhc2U6e3R5cGU6InN0cmluZyIsdmFsaWRW''@;'; put 'put ''YWx1ZXM6WyJkZWNpbWFsIiwiYmluYXJ5IiwiZ2VuZXJhbCJdLHJlc3RyaWN0aW9uOihudCxkdCk9PiJieXRlIj09PWR0Lm91dHB1dCxtZXNzYWdlOiJgYmFzZWAgbXVzdCBiZSBwcm92aWRlZCBvbmx5IHdoZW4gdGhlIG91dHB1dCBpcyBgYnl0ZWAiLG1hbmRhdG9yeTpudD0+ImJ5dGUiPT09''@;'; put 'put ''bnQub3V0cHV0fSxjaGFyYWN0ZXJpc3RpYzp7dHlwZToibnVtYmVyIixyZXN0cmljdGlvbjpudD0+bnQ+PTAsbWVzc2FnZToidmFsdWUgbXVzdCBiZSBwb3NpdGl2ZSJ9LHByZWZpeDoic3RyaW5nIixwb3N0Zml4OiJzdHJpbmciLGZvcmNlQXZlcmFnZTp7dHlwZToic3RyaW5nIix2YWxpZFZh''@;'; put 'put ''bHVlczpbInRyaWxsaW9uIiwiYmlsbGlvbiIsIm1pbGxpb24iLCJ0aG91c2FuZCJdfSxhdmVyYWdlOiJib29sZWFuIixsb3dQcmVjaXNpb246e3R5cGU6ImJvb2xlYW4iLHJlc3RyaWN0aW9uOihudCxkdCk9PiEwPT09ZHQuYXZlcmFnZSxtZXNzYWdlOiJgbG93UHJlY2lzaW9uYCBtdXN0IGJl''@;'; put 'put ''IHByb3ZpZGVkIG9ubHkgd2hlbiB0aGUgb3B0aW9uIGBhdmVyYWdlYCBpcyBzZXQifSxjdXJyZW5jeVBvc2l0aW9uOnt0eXBlOiJzdHJpbmciLHZhbGlkVmFsdWVzOlsicHJlZml4IiwiaW5maXgiLCJwb3N0Zml4Il19LGN1cnJlbmN5U3ltYm9sOiJzdHJpbmciLHRvdGFsTGVuZ3RoOnt0eXBl''@;'; put 'put ''OiJudW1iZXIiLHJlc3RyaWN0aW9uczpbe3Jlc3RyaWN0aW9uOm50PT5udD49MCxtZXNzYWdlOiJ2YWx1ZSBtdXN0IGJlIHBvc2l0aXZlIn0se3Jlc3RyaWN0aW9uOihudCxkdCk9PiFkdC5leHBvbmVudGlhbCxtZXNzYWdlOiJgdG90YWxMZW5ndGhgIGlzIGluY29tcGF0aWJsZSB3aXRoIGBl''@;'; put 'put ''eHBvbmVudGlhbGAifV19LG1hbnRpc3NhOnt0eXBlOiJudW1iZXIiLHJlc3RyaWN0aW9uOm50PT5udD49MCxtZXNzYWdlOiJ2YWx1ZSBtdXN0IGJlIHBvc2l0aXZlIn0sb3B0aW9uYWxNYW50aXNzYToiYm9vbGVhbiIsdHJpbU1hbnRpc3NhOiJib29sZWFuIixyb3VuZGluZ0Z1bmN0aW9uOiJm''@;'; put 'put ''dW5jdGlvbiIsb3B0aW9uYWxDaGFyYWN0ZXJpc3RpYzoiYm9vbGVhbiIsdGhvdXNhbmRTZXBhcmF0ZWQ6ImJvb2xlYW4iLHNwYWNlU2VwYXJhdGVkOiJib29sZWFuIixzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiJib29sZWFuIixzcGFjZVNlcGFyYXRlZEFiYnJldmlhdGlvbjoiYm9vbGVhbiIs''@;'; put 'put ''YWJicmV2aWF0aW9uczp7dHlwZToib2JqZWN0IixjaGlsZHJlbjp7dGhvdXNhbmQ6InN0cmluZyIsbWlsbGlvbjoic3RyaW5nIixiaWxsaW9uOiJzdHJpbmciLHRyaWxsaW9uOiJzdHJpbmcifX0sbmVnYXRpdmU6e3R5cGU6InN0cmluZyIsdmFsaWRWYWx1ZXM6WyJzaWduIiwicGFyZW50aGVz''@;'; put 'put ''aXMiXX0sZm9yY2VTaWduOiJib29sZWFuIixleHBvbmVudGlhbDp7dHlwZToiYm9vbGVhbiJ9LHByZWZpeFN5bWJvbDp7dHlwZToiYm9vbGVhbiIscmVzdHJpY3Rpb246KG50LGR0KT0+InBlcmNlbnQiPT09ZHQub3V0cHV0LG1lc3NhZ2U6ImBwcmVmaXhTeW1ib2xgIGNhbiBiZSBwcm92aWRl''@;'; put 'put ''ZCBvbmx5IHdoZW4gdGhlIG91dHB1dCBpcyBgcGVyY2VudGAifX0sdGU9e2xhbmd1YWdlVGFnOnt0eXBlOiJzdHJpbmciLG1hbmRhdG9yeTohMCxyZXN0cmljdGlvbjpudD0+bnQubWF0Y2gobCksbWVzc2FnZToidGhlIGxhbmd1YWdlIHRhZyBtdXN0IGZvbGxvdyB0aGUgQkNQIDQ3IHNwZWNp''@;'; put 'put ''ZmljYXRpb24gKHNlZSBodHRwczovL3Rvb2xzLmllZnQub3JnL2h0bWwvYmNwNDcpIn0sZGVsaW1pdGVyczp7dHlwZToib2JqZWN0IixjaGlsZHJlbjp7dGhvdXNhbmRzOiJzdHJpbmciLGRlY2ltYWw6InN0cmluZyIsdGhvdXNhbmRzU2l6ZToibnVtYmVyIn0sbWFuZGF0b3J5OiEwfSxhYmJy''@;'; put 'put ''ZXZpYXRpb25zOnt0eXBlOiJvYmplY3QiLGNoaWxkcmVuOnt0aG91c2FuZDp7dHlwZToic3RyaW5nIixtYW5kYXRvcnk6ITB9LG1pbGxpb246e3R5cGU6InN0cmluZyIsbWFuZGF0b3J5OiEwfSxiaWxsaW9uOnt0eXBlOiJzdHJpbmciLG1hbmRhdG9yeTohMH0sdHJpbGxpb246e3R5cGU6InN0''@;'; put 'put ''cmluZyIsbWFuZGF0b3J5OiEwfX0sbWFuZGF0b3J5OiEwfSxzcGFjZVNlcGFyYXRlZDoiYm9vbGVhbiIsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeToiYm9vbGVhbiIsb3JkaW5hbDp7dHlwZToiZnVuY3Rpb24iLG1hbmRhdG9yeTohMH0sYnl0ZXM6e3R5cGU6Im9iamVjdCIsY2hpbGRyZW46e2Jp''@;'; put 'put ''bmFyeVN1ZmZpeGVzOiJvYmplY3QiLGRlY2ltYWxTdWZmaXhlczoib2JqZWN0In19LGN1cnJlbmN5Ont0eXBlOiJvYmplY3QiLGNoaWxkcmVuOntzeW1ib2w6InN0cmluZyIscG9zaXRpb246InN0cmluZyIsY29kZToic3RyaW5nIn0sbWFuZGF0b3J5OiEwfSxkZWZhdWx0czoiZm9ybWF0Iixv''@;'; put 'put ''cmRpbmFsRm9ybWF0OiJmb3JtYXQiLGJ5dGVGb3JtYXQ6ImZvcm1hdCIscGVyY2VudGFnZUZvcm1hdDoiZm9ybWF0IixjdXJyZW5jeUZvcm1hdDoiZm9ybWF0Iix0aW1lRGVmYXVsdHM6ImZvcm1hdCIsZm9ybWF0czp7dHlwZToib2JqZWN0IixjaGlsZHJlbjp7Zm91ckRpZ2l0czp7dHlwZToi''@;'; put 'put ''Zm9ybWF0IixtYW5kYXRvcnk6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e3R5cGU6ImZvcm1hdCIsbWFuZGF0b3J5OiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7dHlwZToiZm9ybWF0IixtYW5kYXRvcnk6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7dHlwZToiZm9ybWF0Iixt''@;'; put 'put ''YW5kYXRvcnk6ITB9fX19O2Z1bmN0aW9uIHZlKG50KXtyZXR1cm4gdm9pZCAwIT09Yy51bmZvcm1hdChudCl9ZnVuY3Rpb24gd2UobnQsZHQsbXQsJHQ9ITEpe2xldCB6dD1PYmplY3Qua2V5cyhudCkubWFwKHluPT57aWYoIWR0W3luXSlyZXR1cm4gY29uc29sZS5lcnJvcihgJHttdH0gSW52''@;'; put 'put ''YWxpZCBrZXk6ICR7eW59YCksITE7bGV0IGduPW50W3luXSx3bj1kdFt5bl07aWYoInN0cmluZyI9PXR5cGVvZiB3biYmKHduPXt0eXBlOndufSksImZvcm1hdCI9PT13bi50eXBlKXtpZighd2UoZ24sVSxgW1ZhbGlkYXRlICR7eW59XWAsITApKXJldHVybiExfWVsc2UgaWYodHlwZW9mIGdu''@;'; put 'put ''IT09d24udHlwZSlyZXR1cm4gY29uc29sZS5lcnJvcihgJHttdH0gJHt5bn0gdHlwZSBtaXNtYXRjaGVkOiAiJHt3bi50eXBlfSIgZXhwZWN0ZWQsICIke3R5cGVvZiBnbn0iIHByb3ZpZGVkYCksITE7aWYod24ucmVzdHJpY3Rpb25zJiZ3bi5yZXN0cmljdGlvbnMubGVuZ3RoKXtsZXQgUm49''@;'; put 'put ''d24ucmVzdHJpY3Rpb25zLmxlbmd0aDtmb3IobGV0IERyPTA7RHI8Um47RHIrKyl7bGV0e3Jlc3RyaWN0aW9uOkxyLG1lc3NhZ2U6ZHJ9PXduLnJlc3RyaWN0aW9uc1tEcl07aWYoIUxyKGduLG50KSlyZXR1cm4gY29uc29sZS5lcnJvcihgJHttdH0gJHt5bn0gaW52YWxpZCB2YWx1ZTogJHtk''@;'; put 'put ''cn1gKSwhMX19cmV0dXJuIHduLnJlc3RyaWN0aW9uJiYhd24ucmVzdHJpY3Rpb24oZ24sbnQpPyhjb25zb2xlLmVycm9yKGAke210fSAke3lufSBpbnZhbGlkIHZhbHVlOiAke3duLm1lc3NhZ2V9YCksITEpOnduLnZhbGlkVmFsdWVzJiYtMT09PXduLnZhbGlkVmFsdWVzLmluZGV4T2YoZ24p''@;'; put 'put ''Pyhjb25zb2xlLmVycm9yKGAke210fSAke3lufSBpbnZhbGlkIHZhbHVlOiBtdXN0IGJlIGFtb25nICR7SlNPTi5zdHJpbmdpZnkod24udmFsaWRWYWx1ZXMpfSwgIiR7Z259IiBwcm92aWRlZGApLCExKTohKHduLmNoaWxkcmVuJiYhd2UoZ24sd24uY2hpbGRyZW4sYFtWYWxpZGF0ZSAke3lu''@;'; put 'put ''fV1gKSl9KTtyZXR1cm4gJHR8fHp0LnB1c2goLi4uT2JqZWN0LmtleXMoZHQpLm1hcCh5bj0+e2xldCBnbj1kdFt5bl07aWYoInN0cmluZyI9PXR5cGVvZiBnbiYmKGduPXt0eXBlOmdufSksZ24ubWFuZGF0b3J5KXtsZXQgd249Z24ubWFuZGF0b3J5O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB3''@;'; put 'put ''biYmKHduPXduKG50KSksd24mJnZvaWQgMD09PW50W3luXSlyZXR1cm4gY29uc29sZS5lcnJvcihgJHttdH0gTWlzc2luZyBtYW5kYXRvcnkga2V5ICIke3lufSJgKSwhMX1yZXR1cm4hMH0pKSx6dC5yZWR1Y2UoKHluLGduKT0+eW4mJmduLCEwKX1mdW5jdGlvbiBGZShudCl7cmV0dXJuIHdl''@;'; put 'put ''KG50LFUsIltWYWxpZGF0ZSBmb3JtYXRdIil9cmV0dXJuICR0ZT17dmFsaWRhdGU6ZnVuY3Rpb24gb2UobnQsZHQpe2xldCBtdD12ZShudCksJHQ9RmUoZHQpO3JldHVybiBtdCYmJHR9LHZhbGlkYXRlRm9ybWF0OkZlLHZhbGlkYXRlSW5wdXQ6dmUsdmFsaWRhdGVMYW5ndWFnZTpmdW5jdGlv''@;'; put 'put ''biBXZShudCl7cmV0dXJuIHdlKG50LHRlLCJbVmFsaWRhdGUgbGFuZ3VhZ2VdIil9fX12YXIgcXRlLEw2ZSxYdGU9e3BhcnNlRm9ybWF0OmZ1bmN0aW9uIG5kdChjLGw9e30pe3JldHVybiJzdHJpbmciIT10eXBlb2YgYz9jOihjPWZ1bmN0aW9uIGoxdChjLGwpe2xldCBhPWMubWF0Y2goL157''@;'; put 'put ''KFtefV0qKX0vKTtyZXR1cm4gYT8obC5wcmVmaXg9YVsxXSxjLnNsaWNlKGFbMF0ubGVuZ3RoKSk6Y30oYyxsKSxjPWZ1bmN0aW9uIHoxdChjLGwpe2xldCBhPWMubWF0Y2goL3soW159XSopfSQvKTtyZXR1cm4gYT8obC5wb3N0Zml4PWFbMV0sYy5zbGljZSgwLC1hWzBdLmxlbmd0aCkpOmN9''@;'; put 'put ''KGMsbCksZnVuY3Rpb24gVTF0KGMsbCl7aWYoLTE9PT1jLmluZGV4T2YoIiQiKSl7aWYoLTE9PT1jLmluZGV4T2YoIiUiKSlyZXR1cm4tMSE9PWMuaW5kZXhPZigiYmQiKT8obC5vdXRwdXQ9ImJ5dGUiLHZvaWQobC5iYXNlPSJnZW5lcmFsIikpOi0xIT09Yy5pbmRleE9mKCJiIik/KGwub3V0''@;'; put 'put ''cHV0PSJieXRlIix2b2lkKGwuYmFzZT0iYmluYXJ5IikpOi0xIT09Yy5pbmRleE9mKCJkIik/KGwub3V0cHV0PSJieXRlIix2b2lkKGwuYmFzZT0iZGVjaW1hbCIpKTp2b2lkKC0xPT09Yy5pbmRleE9mKCI6Iik/LTEhPT1jLmluZGV4T2YoIm8iKSYmKGwub3V0cHV0PSJvcmRpbmFsIik6bC5v''@;'; put 'put ''dXRwdXQ9InRpbWUiKTtsLm91dHB1dD0icGVyY2VudCJ9ZWxzZSBsLm91dHB1dD0iY3VycmVuY3kifShjLGwpLGZ1bmN0aW9uIFkxdChjLGwpe2xldCBhPWMubWF0Y2goL1sxLTldK1swLTldKi8pO2EmJihsLnRvdGFsTGVuZ3RoPSthWzBdKX0oYyxsKSxmdW5jdGlvbiBHMXQoYyxsKXtsZXQg''@;'; put 'put ''ZD1jLnNwbGl0KCIuIilbMF0ubWF0Y2goLzArLyk7ZCYmKGwuY2hhcmFjdGVyaXN0aWM9ZFswXS5sZW5ndGgpfShjLGwpLGZ1bmN0aW9uIFExdChjLGwpe2lmKC0xIT09Yy5pbmRleE9mKCIuIikpe2xldCBhPWMuc3BsaXQoIi4iKVswXTtsLm9wdGlvbmFsQ2hhcmFjdGVyaXN0aWM9LTE9PT1h''@;'; put 'put ''LmluZGV4T2YoIjAiKX19KGMsbCksZnVuY3Rpb24gWDF0KGMsbCl7LTEhPT1jLmluZGV4T2YoImEiKSYmKGwuYXZlcmFnZT0hMCl9KGMsbCksZnVuY3Rpb24gcTF0KGMsbCl7LTEhPT1jLmluZGV4T2YoIksiKT9sLmZvcmNlQXZlcmFnZT0idGhvdXNhbmQiOi0xIT09Yy5pbmRleE9mKCJNIik/''@;'; put 'put ''bC5mb3JjZUF2ZXJhZ2U9Im1pbGxpb24iOi0xIT09Yy5pbmRleE9mKCJCIik/bC5mb3JjZUF2ZXJhZ2U9ImJpbGxpb24iOi0xIT09Yy5pbmRleE9mKCJUIikmJihsLmZvcmNlQXZlcmFnZT0idHJpbGxpb24iKX0oYyxsKSxmdW5jdGlvbiAkMXQoYyxsKXtsZXQgYT1jLnNwbGl0KCIuIilbMV07''@;'; put 'put ''aWYoYSl7bGV0IGQ9YS5tYXRjaCgvMCsvKTtkJiYobC5tYW50aXNzYT1kWzBdLmxlbmd0aCl9fShjLGwpLGZ1bmN0aW9uIEoxdChjLGwpe2MubWF0Y2goL1xbXC5dLyk/bC5vcHRpb25hbE1hbnRpc3NhPSEwOmMubWF0Y2goL1wuLykmJihsLm9wdGlvbmFsTWFudGlzc2E9ITEpfShjLGwpLGZ1''@;'; put 'put ''bmN0aW9uIEsxdChjLGwpe2NvbnN0IGE9Yy5zcGxpdCgiLiIpWzFdO2EmJihsLnRyaW1NYW50aXNzYT0tMSE9PWEuaW5kZXhPZigiWyIpKX0oYyxsKSxmdW5jdGlvbiBaMXQoYyxsKXstMSE9PWMuaW5kZXhPZigiLCIpJiYobC50aG91c2FuZFNlcGFyYXRlZD0hMCl9KGMsbCksZnVuY3Rpb24g''@;'; put 'put ''VzF0KGMsbCl7LTEhPT1jLmluZGV4T2YoIiAiKSYmKGwuc3BhY2VTZXBhcmF0ZWQ9ITAsbC5zcGFjZVNlcGFyYXRlZEN1cnJlbmN5PSEwLChsLmF2ZXJhZ2V8fGwuZm9yY2VBdmVyYWdlKSYmKGwuc3BhY2VTZXBhcmF0ZWRBYmJyZXZpYXRpb249ITApKX0oYyxsKSxmdW5jdGlvbiBlZHQoYyxs''@;'; put 'put ''KXtjLm1hdGNoKC9eXCs/XChbXildKlwpJC8pJiYobC5uZWdhdGl2ZT0icGFyZW50aGVzaXMiKSxjLm1hdGNoKC9eXCs/LS8pJiYobC5uZWdhdGl2ZT0ic2lnbiIpfShjLGwpLGZ1bmN0aW9uIHRkdChjLGwpe2MubWF0Y2goL15cKy8pJiYobC5mb3JjZVNpZ249ITApfShjLGwpLGwpfX07ZnVu''@;'; put 'put ''Y3Rpb24gSnRlKCl7aWYoTDZlKXJldHVybiBxdGU7TDZlPTE7Y29uc3QgYz1mdW5jdGlvbiBCMXQoKXtyZXR1cm4gazZlfHwoazZlPTEsWXRlPXtsYW5ndWFnZVRhZzoiZW4tVVMiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5k''@;'; put 'put ''OiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LHNwYWNlU2VwYXJhdGVkOiExLG9yZGluYWw6ZnVuY3Rpb24oYyl7bGV0IGw9YyUxMDtyZXR1cm4gMT09fn4oYyUxMDAvMTApPyJ0aCI6MT09PWw/InN0IjoyPT09bD8ibmQiOjM9PT1sPyJyZCI6InRoIn0sYnl0ZXM6''@;'; put 'put ''e2JpbmFyeVN1ZmZpeGVzOlsiQiIsIktpQiIsIk1pQiIsIkdpQiIsIlRpQiIsIlBpQiIsIkVpQiIsIlppQiIsIllpQiJdLGRlY2ltYWxTdWZmaXhlczpbIkIiLCJLQiIsIk1CIiwiR0IiLCJUQiIsIlBCIiwiRUIiLCJaQiIsIllCIl19LGN1cnJlbmN5OntzeW1ib2w6IiQiLHBvc2l0aW9uOiJw''@;'; put 'put ''cmVmaXgiLGNvZGU6IlVTRCJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6''@;'; put 'put ''ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjJ9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5Ont0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYToyfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1''@;'; put 'put ''dDoiY3VycmVuY3kiLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pLFl0ZX0oKSxsPUt0ZSgpLGE9WHRlO2xldCBoLGQ9e30sZj17fSx2PW51bGwsTT17fTtmdW5jdGlvbiBEKHRlKXtoPXRlfWZ1bmN0aW9uIFUoKXtyZXR1cm4gZltoXX1yZXR1cm4gZC5sYW5ndWFnZXM9KCk9''@;'; put 'put ''Pk9iamVjdC5hc3NpZ24oe30sZiksZC5jdXJyZW50TGFuZ3VhZ2U9KCk9PmgsZC5jdXJyZW50Qnl0ZXM9KCk9PlUoKS5ieXRlc3x8e30sZC5jdXJyZW50Q3VycmVuY3k9KCk9PlUoKS5jdXJyZW5jeSxkLmN1cnJlbnRBYmJyZXZpYXRpb25zPSgpPT5VKCkuYWJicmV2aWF0aW9ucyxkLmN1cnJl''@;'; put 'put ''bnREZWxpbWl0ZXJzPSgpPT5VKCkuZGVsaW1pdGVycyxkLmN1cnJlbnRPcmRpbmFsPSgpPT5VKCkub3JkaW5hbCxkLmN1cnJlbnREZWZhdWx0cz0oKT0+T2JqZWN0LmFzc2lnbih7fSxVKCkuZGVmYXVsdHMsTSksZC5jdXJyZW50T3JkaW5hbERlZmF1bHRGb3JtYXQ9KCk9Pk9iamVjdC5hc3Np''@;'; put 'put ''Z24oe30sZC5jdXJyZW50RGVmYXVsdHMoKSxVKCkub3JkaW5hbEZvcm1hdCksZC5jdXJyZW50Qnl0ZURlZmF1bHRGb3JtYXQ9KCk9Pk9iamVjdC5hc3NpZ24oe30sZC5jdXJyZW50RGVmYXVsdHMoKSxVKCkuYnl0ZUZvcm1hdCksZC5jdXJyZW50UGVyY2VudGFnZURlZmF1bHRGb3JtYXQ9KCk9''@;'; put 'put ''Pk9iamVjdC5hc3NpZ24oe30sZC5jdXJyZW50RGVmYXVsdHMoKSxVKCkucGVyY2VudGFnZUZvcm1hdCksZC5jdXJyZW50Q3VycmVuY3lEZWZhdWx0Rm9ybWF0PSgpPT5PYmplY3QuYXNzaWduKHt9LGQuY3VycmVudERlZmF1bHRzKCksVSgpLmN1cnJlbmN5Rm9ybWF0KSxkLmN1cnJlbnRUaW1l''@;'; put 'put ''RGVmYXVsdEZvcm1hdD0oKT0+T2JqZWN0LmFzc2lnbih7fSxkLmN1cnJlbnREZWZhdWx0cygpLFUoKS50aW1lRm9ybWF0KSxkLnNldERlZmF1bHRzPXRlPT57dGU9YS5wYXJzZUZvcm1hdCh0ZSksbC52YWxpZGF0ZUZvcm1hdCh0ZSkmJihNPXRlKX0sZC5nZXRaZXJvRm9ybWF0PSgpPT52LGQu''@;'; put 'put ''c2V0WmVyb0Zvcm1hdD10ZT0+dj0ic3RyaW5nIj09dHlwZW9mIHRlP3RlOm51bGwsZC5oYXNaZXJvRm9ybWF0PSgpPT5udWxsIT09dixkLmxhbmd1YWdlRGF0YT10ZT0+e2lmKHRlKXtpZihmW3RlXSlyZXR1cm4gZlt0ZV07dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHRhZyAiJHt0ZX0iYCl9''@;'; put 'put ''cmV0dXJuIFUoKX0sZC5yZWdpc3Rlckxhbmd1YWdlPSh0ZSxvZT0hMSk9PntpZighbC52YWxpZGF0ZUxhbmd1YWdlKHRlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGFuZ3VhZ2UgZGF0YSIpO2ZbdGUubGFuZ3VhZ2VUYWddPXRlLG9lJiZEKHRlLmxhbmd1YWdlVGFnKX0sZC5zZXRMYW5n''@;'; put 'put ''dWFnZT0odGUsb2U9Yy5sYW5ndWFnZVRhZyk9PntpZighZlt0ZV0pe2xldCB2ZT10ZS5zcGxpdCgiLSIpWzBdLHdlPU9iamVjdC5rZXlzKGYpLmZpbmQoRmU9PkZlLnNwbGl0KCItIilbMF09PT12ZSk7cmV0dXJuIGZbd2VdP3ZvaWQgRCh3ZSk6dm9pZCBEKG9lKX1EKHRlKX0sZC5yZWdpc3Rl''@;'; put 'put ''ckxhbmd1YWdlKGMpLGg9Yy5sYW5ndWFnZVRhZyxxdGU9ZH12YXIgTzZlPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oYyl7IWZ1bmN0aW9uKGwpe3ZhciBhLGQ9L14tPyg/OlxkKyg/OlwuXGQqKT98XC5cZCspKD86ZVsrLV0/XGQrKT8kL2ksaD1NYXRoLmNlaWwsZj1NYXRoLmZsb29yLHY9IltC''@;'; put 'put ''aWdOdW1iZXIgRXJyb3JdICIsTT12KyJOdW1iZXIgcHJpbWl0aXZlIGhhcyBtb3JlIHRoYW4gMTUgc2lnbmlmaWNhbnQgZGlnaXRzOiAiLEQ9MWUxNCxVPTE0LHRlPTkwMDcxOTkyNTQ3NDA5OTEsb2U9WzEsMTAsMTAwLDFlMywxZTQsMWU1LDFlNiwxZTcsMWU4LDFlOSwxZTEwLDFlMTEsMWUx''@;'; put 'put ''MiwxZTEzXSx2ZT0xZTcsd2U9MWU5O2Z1bmN0aW9uIFdlKGduKXt2YXIgd249MHxnbjtyZXR1cm4gZ24+MHx8Z249PT13bj93bjp3bi0xfWZ1bmN0aW9uIG50KGduKXtmb3IodmFyIHduLFJuLERyPTEsTHI9Z24ubGVuZ3RoLGRyPWduWzBdKyIiO0RyPExyOyl7Zm9yKHduPWduW0RyKytdKyIi''@;'; put 'put ''LFJuPVUtd24ubGVuZ3RoO1JuLS07d249IjAiK3duKTtkcis9d259Zm9yKExyPWRyLmxlbmd0aDs0OD09PWRyLmNoYXJDb2RlQXQoLS1Mcik7KTtyZXR1cm4gZHIuc2xpY2UoMCxMcisxfHwxKX1mdW5jdGlvbiBkdChnbix3bil7dmFyIFJuLERyLExyPWduLmMsZHI9d24uYyxNcj1nbi5zLHZp''@;'; put 'put ''PXduLnMsTm49Z24uZSxCcj13bi5lO2lmKCFNcnx8IXZpKXJldHVybiBudWxsO2lmKERyPWRyJiYhZHJbMF0sKFJuPUxyJiYhTHJbMF0pfHxEcilyZXR1cm4gUm4/RHI/MDotdmk6TXI7aWYoTXIhPXZpKXJldHVybiBNcjtpZihSbj1NcjwwLERyPU5uPT1CciwhTHJ8fCFkcilyZXR1cm4gRHI/''@;'; put 'put ''MDohTHJeUm4/MTotMTtpZighRHIpcmV0dXJuIE5uPkJyXlJuPzE6LTE7Zm9yKHZpPShObj1Mci5sZW5ndGgpPChCcj1kci5sZW5ndGgpP05uOkJyLE1yPTA7TXI8dmk7TXIrKylpZihMcltNcl0hPWRyW01yXSlyZXR1cm4gTHJbTXJdPmRyW01yXV5Sbj8xOi0xO3JldHVybiBObj09QnI/MDpO''@;'; put 'put ''bj5Ccl5Sbj8xOi0xfWZ1bmN0aW9uIG10KGduLHduLFJuLERyKXtpZihnbjx3bnx8Z24+Um58fGduIT09ZihnbikpdGhyb3cgRXJyb3IodisoRHJ8fCJBcmd1bWVudCIpKygibnVtYmVyIj09dHlwZW9mIGduP2duPHdufHxnbj5Sbj8iIG91dCBvZiByYW5nZTogIjoiIG5vdCBhbiBpbnRlZ2Vy''@;'; put 'put ''OiAiOiIgbm90IGEgcHJpbWl0aXZlIG51bWJlcjogIikrU3RyaW5nKGduKSl9ZnVuY3Rpb24gJHQoZ24pe3ZhciB3bj1nbi5jLmxlbmd0aC0xO3JldHVybiBXZShnbi5lL1UpPT13biYmZ24uY1t3bl0lMiE9MH1mdW5jdGlvbiB6dChnbix3bil7cmV0dXJuKGduLmxlbmd0aD4xP2duLmNoYXJB''@;'; put 'put ''dCgwKSsiLiIrZ24uc2xpY2UoMSk6Z24pKyh3bjwwPyJlIjoiZSsiKSt3bn1mdW5jdGlvbiB5bihnbix3bixSbil7dmFyIERyLExyO2lmKHduPDApe2ZvcihMcj1SbisiLiI7Kyt3bjtMcis9Um4pO2duPUxyK2dufWVsc2UgaWYoKyt3bj4oRHI9Z24ubGVuZ3RoKSl7Zm9yKExyPVJuLHduLT1E''@;'; put 'put ''cjstLXduO0xyKz1Sbik7Z24rPUxyfWVsc2Ugd248RHImJihnbj1nbi5zbGljZSgwLHduKSsiLiIrZ24uc2xpY2Uod24pKTtyZXR1cm4gZ259YT1mdW5jdGlvbiBGZShnbil7dmFyIHduLFJuLERyLEV0LFh0LExyPVpyLnByb3RvdHlwZT17Y29uc3RydWN0b3I6WnIsdG9TdHJpbmc6bnVsbCx2''@;'; put 'put ''YWx1ZU9mOm51bGx9LGRyPW5ldyBacigxKSxNcj0yMCx2aT00LE5uPS03LEJyPTIxLGVyPS0xZTcsVHI9MWU3LCRyPSExLGJpPTEsTmk9MCx2YT17cHJlZml4OiIiLGdyb3VwU2l6ZTozLHNlY29uZGFyeUdyb3VwU2l6ZTowLGdyb3VwU2VwYXJhdG9yOiIsIixkZWNpbWFsU2VwYXJhdG9yOiIu''@;'; put 'put ''IixmcmFjdGlvbkdyb3VwU2l6ZTowLGZyYWN0aW9uR3JvdXBTZXBhcmF0b3I6Ilx4YTAiLHN1ZmZpeDoiIn0seGE9IjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIscGE9ITA7ZnVuY3Rpb24gWnIoRXQsWHQpe3ZhciBfbixRbixQbixFbixfcixIbix6bixPcixFcj10aGlz''@;'; put 'put ''O2lmKCEoRXIgaW5zdGFuY2VvZiBacikpcmV0dXJuIG5ldyBacihFdCxYdCk7aWYobnVsbD09WHQpe2lmKEV0JiYhMD09PUV0Ll9pc0JpZ051bWJlcilyZXR1cm4gRXIucz1FdC5zLHZvaWQoIUV0LmN8fEV0LmU+VHI/RXIuYz1Fci5lPW51bGw6RXQuZTxlcj9Fci5jPVtFci5lPTBdOihFci5l''@;'; put 'put ''PUV0LmUsRXIuYz1FdC5jLnNsaWNlKCkpKTtpZigoSG49Im51bWJlciI9PXR5cGVvZiBFdCkmJjAqRXQ9PTApe2lmKEVyLnM9MS9FdDwwPyhFdD0tRXQsLTEpOjEsRXQ9PT1+fkV0KXtmb3IoRW49MCxfcj1FdDtfcj49MTA7X3IvPTEwLEVuKyspO3JldHVybiB2b2lkKEVuPlRyP0VyLmM9RXIu''@;'; put 'put ''ZT1udWxsOihFci5lPUVuLEVyLmM9W0V0XSkpfU9yPVN0cmluZyhFdCl9ZWxzZXtpZighZC50ZXN0KE9yPVN0cmluZyhFdCkpKXJldHVybiBEcihFcixPcixIbik7RXIucz00NT09T3IuY2hhckNvZGVBdCgwKT8oT3I9T3Iuc2xpY2UoMSksLTEpOjF9KEVuPU9yLmluZGV4T2YoIi4iKSk+LTEm''@;'; put 'put ''JihPcj1Pci5yZXBsYWNlKCIuIiwiIikpLChfcj1Pci5zZWFyY2goL2UvaSkpPjA/KEVuPDAmJihFbj1fciksRW4rPStPci5zbGljZShfcisxKSxPcj1Pci5zdWJzdHJpbmcoMCxfcikpOkVuPDAmJihFbj1Pci5sZW5ndGgpfWVsc2V7aWYobXQoWHQsMix4YS5sZW5ndGgsIkJhc2UiKSwxMD09''@;'; put 'put ''WHQmJnBhKXJldHVybiBMbihFcj1uZXcgWnIoRXQpLE1yK0VyLmUrMSx2aSk7aWYoT3I9U3RyaW5nKEV0KSxIbj0ibnVtYmVyIj09dHlwZW9mIEV0KXtpZigwKkV0IT0wKXJldHVybiBEcihFcixPcixIbixYdCk7aWYoRXIucz0xL0V0PDA/KE9yPU9yLnNsaWNlKDEpLC0xKToxLFpyLkRFQlVH''@;'; put 'put ''JiZPci5yZXBsYWNlKC9eMFwuMCp8XC4vLCIiKS5sZW5ndGg+MTUpdGhyb3cgRXJyb3IoTStFdCl9ZWxzZSBFci5zPTQ1PT09T3IuY2hhckNvZGVBdCgwKT8oT3I9T3Iuc2xpY2UoMSksLTEpOjE7Zm9yKF9uPXhhLnNsaWNlKDAsWHQpLEVuPV9yPTAsem49T3IubGVuZ3RoO19yPHpuO19yKysp''@;'; put 'put ''aWYoX24uaW5kZXhPZihRbj1Pci5jaGFyQXQoX3IpKTwwKXtpZigiLiI9PVFuKXtpZihfcj5Fbil7RW49em47Y29udGludWV9fWVsc2UgaWYoIVBuJiYoT3I9PU9yLnRvVXBwZXJDYXNlKCkmJihPcj1Pci50b0xvd2VyQ2FzZSgpKXx8T3I9PU9yLnRvTG93ZXJDYXNlKCkmJihPcj1Pci50b1Vw''@;'; put 'put ''cGVyQ2FzZSgpKSkpe1BuPSEwLF9yPS0xLEVuPTA7Y29udGludWV9cmV0dXJuIERyKEVyLFN0cmluZyhFdCksSG4sWHQpfUhuPSExLChFbj0oT3I9Um4oT3IsWHQsMTAsRXIucykpLmluZGV4T2YoIi4iKSk+LTE/T3I9T3IucmVwbGFjZSgiLiIsIiIpOkVuPU9yLmxlbmd0aH1mb3IoX3I9MDs0''@;'; put 'put ''OD09PU9yLmNoYXJDb2RlQXQoX3IpO19yKyspO2Zvcih6bj1Pci5sZW5ndGg7NDg9PT1Pci5jaGFyQ29kZUF0KC0tem4pOyk7aWYoT3I9T3Iuc2xpY2UoX3IsKyt6bikpe2lmKHpuLT1fcixIbiYmWnIuREVCVUcmJnpuPjE1JiYoRXQ+dGV8fEV0IT09ZihFdCkpKXRocm93IEVycm9yKE0rRXIu''@;'; put 'put ''cypFdCk7aWYoKEVuPUVuLV9yLTEpPlRyKUVyLmM9RXIuZT1udWxsO2Vsc2UgaWYoRW48ZXIpRXIuYz1bRXIuZT0wXTtlbHNle2lmKEVyLmU9RW4sRXIuYz1bXSxfcj0oRW4rMSklVSxFbjwwJiYoX3IrPVUpLF9yPHpuKXtmb3IoX3ImJkVyLmMucHVzaCgrT3Iuc2xpY2UoMCxfcikpLHpuLT1V''@;'; put 'put ''O19yPHpuOylFci5jLnB1c2goK09yLnNsaWNlKF9yLF9yKz1VKSk7X3I9VS0oT3I9T3Iuc2xpY2UoX3IpKS5sZW5ndGh9ZWxzZSBfci09em47Zm9yKDtfci0tO09yKz0iMCIpO0VyLmMucHVzaCgrT3IpfX1lbHNlIEVyLmM9W0VyLmU9MF19ZnVuY3Rpb24geXQoRXQsWHQsX24sUW4pe3ZhciBQ''@;'; put 'put ''bixFbixfcixIbix6bjtpZihudWxsPT1fbj9fbj12aTptdChfbiwwLDgpLCFFdC5jKXJldHVybiBFdC50b1N0cmluZygpO2lmKFBuPUV0LmNbMF0sX3I9RXQuZSxudWxsPT1YdCl6bj1udChFdC5jKSx6bj0xPT1Rbnx8Mj09UW4mJihfcjw9Tm58fF9yPj1Ccik/enQoem4sX3IpOnluKHpuLF9y''@;'; put 'put ''LCIwIik7ZWxzZSBpZihFbj0oRXQ9TG4obmV3IFpyKEV0KSxYdCxfbikpLmUsSG49KHpuPW50KEV0LmMpKS5sZW5ndGgsMT09UW58fDI9PVFuJiYoWHQ8PUVufHxFbjw9Tm4pKXtmb3IoO0huPFh0O3puKz0iMCIsSG4rKyk7em49enQoem4sRW4pfWVsc2UgaWYoWHQtPV9yLHpuPXluKHpuLEVu''@;'; put 'put ''LCIwIiksRW4rMT5Ibil7aWYoLS1YdD4wKWZvcih6bis9Ii4iO1h0LS07em4rPSIwIik7fWVsc2UgaWYoKFh0Kz1Fbi1Ibik+MClmb3IoRW4rMT09SG4mJih6bis9Ii4iKTtYdC0tO3puKz0iMCIpO3JldHVybiBFdC5zPDAmJlBuPyItIit6bjp6bn1mdW5jdGlvbiBOdChFdCxYdCl7Zm9yKHZh''@;'; put 'put ''ciBfbixRbixQbj0xLEVuPW5ldyBacihFdFswXSk7UG48RXQubGVuZ3RoO1BuKyspKCEoUW49bmV3IFpyKEV0W1BuXSkpLnN8fChfbj1kdChFbixRbikpPT09WHR8fDA9PT1fbiYmRW4ucz09PVh0KSYmKEVuPVFuKTtyZXR1cm4gRW59ZnVuY3Rpb24gUXQoRXQsWHQsX24pe2Zvcih2YXIgUW49''@;'; put 'put ''MSxQbj1YdC5sZW5ndGg7IVh0Wy0tUG5dO1h0LnBvcCgpKTtmb3IoUG49WHRbMF07UG4+PTEwO1BuLz0xMCxRbisrKTtyZXR1cm4oX249UW4rX24qVS0xKT5Ucj9FdC5jPUV0LmU9bnVsbDpfbjxlcj9FdC5jPVtFdC5lPTBdOihFdC5lPV9uLEV0LmM9WHQpLEV0fWZ1bmN0aW9uIExuKEV0LFh0''@;'; put 'put ''LF9uLFFuKXt2YXIgUG4sRW4sX3IsSG4sem4sT3IsRXIsdWk9RXQuYyxJYT1vZTtpZih1aSl7ZTp7Zm9yKFBuPTEsSG49dWlbMF07SG4+PTEwO0huLz0xMCxQbisrKTtpZigoRW49WHQtUG4pPDApRW4rPVUsem49dWlbT3I9MF0sRXI9Zih6bi9JYVtQbi0oX3I9WHQpLTFdJTEwKTtlbHNlIGlm''@;'; put 'put ''KChPcj1oKChFbisxKS9VKSk+PXVpLmxlbmd0aCl7aWYoIVFuKWJyZWFrIGU7Zm9yKDt1aS5sZW5ndGg8PU9yO3VpLnB1c2goMCkpO3puPUVyPTAsUG49MSxfcj0oRW4lPVUpLVUrMX1lbHNle2Zvcih6bj1Ibj11aVtPcl0sUG49MTtIbj49MTA7SG4vPTEwLFBuKyspO0VyPShfcj0oRW4lPVUp''@;'; put 'put ''LVUrUG4pPDA/MDpmKHpuL0lhW1BuLV9yLTFdJTEwKX1pZihRbj1Rbnx8WHQ8MHx8bnVsbCE9dWlbT3IrMV18fChfcjwwP3puOnpuJUlhW1BuLV9yLTFdKSxRbj1fbjw0PyhFcnx8UW4pJiYoMD09X258fF9uPT0oRXQuczwwPzM6MikpOkVyPjV8fDU9PUVyJiYoND09X258fFFufHw2PT1fbiYm''@;'; put 'put ''KEVuPjA/X3I+MD96bi9JYVtQbi1fcl06MDp1aVtPci0xXSklMTAmMXx8X249PShFdC5zPDA/ODo3KSksWHQ8MXx8IXVpWzBdKXJldHVybiB1aS5sZW5ndGg9MCxRbj8odWlbMF09SWFbKFUtKFh0LT1FdC5lKzEpJVUpJVVdLEV0LmU9LVh0fHwwKTp1aVswXT1FdC5lPTAsRXQ7aWYoMD09RW4/''@;'; put 'put ''KHVpLmxlbmd0aD1PcixIbj0xLE9yLS0pOih1aS5sZW5ndGg9T3IrMSxIbj1JYVtVLUVuXSx1aVtPcl09X3I+MD9mKHpuL0lhW1BuLV9yXSVJYVtfcl0pKkhuOjApLFFuKWZvcig7Oyl7aWYoMD09T3Ipe2ZvcihFbj0xLF9yPXVpWzBdO19yPj0xMDtfci89MTAsRW4rKyk7Zm9yKF9yPXVpWzBd''@;'; put 'put ''Kz1IbixIbj0xO19yPj0xMDtfci89MTAsSG4rKyk7RW4hPUhuJiYoRXQuZSsrLHVpWzBdPT1EJiYodWlbMF09MSkpO2JyZWFrfWlmKHVpW09yXSs9SG4sdWlbT3JdIT1EKWJyZWFrO3VpW09yLS1dPTAsSG49MX1mb3IoRW49dWkubGVuZ3RoOzA9PT11aVstLUVuXTt1aS5wb3AoKSk7fUV0LmU+''@;'; put 'put ''VHI/RXQuYz1FdC5lPW51bGw6RXQuZTxlciYmKEV0LmM9W0V0LmU9MF0pfXJldHVybiBFdH1mdW5jdGlvbiBpcihFdCl7dmFyIFh0LF9uPUV0LmU7cmV0dXJuIG51bGw9PT1fbj9FdC50b1N0cmluZygpOihYdD1udChFdC5jKSxYdD1fbjw9Tm58fF9uPj1Ccj96dChYdCxfbik6eW4oWHQsX24s''@;'; put 'put ''IjAiKSxFdC5zPDA/Ii0iK1h0Olh0KX1yZXR1cm4gWnIuY2xvbmU9RmUsWnIuUk9VTkRfVVA9MCxaci5ST1VORF9ET1dOPTEsWnIuUk9VTkRfQ0VJTD0yLFpyLlJPVU5EX0ZMT09SPTMsWnIuUk9VTkRfSEFMRl9VUD00LFpyLlJPVU5EX0hBTEZfRE9XTj01LFpyLlJPVU5EX0hBTEZfRVZFTj02''@;'; put 'put ''LFpyLlJPVU5EX0hBTEZfQ0VJTD03LFpyLlJPVU5EX0hBTEZfRkxPT1I9OCxaci5FVUNMSUQ9OSxaci5jb25maWc9WnIuc2V0PWZ1bmN0aW9uKEV0KXt2YXIgWHQsX247aWYobnVsbCE9RXQpe2lmKCJvYmplY3QiIT10eXBlb2YgRXQpdGhyb3cgRXJyb3IodisiT2JqZWN0IGV4cGVjdGVkOiAi''@;'; put 'put ''K0V0KTtpZihFdC5oYXNPd25Qcm9wZXJ0eShYdD0iREVDSU1BTF9QTEFDRVMiKSYmKG10KF9uPUV0W1h0XSwwLHdlLFh0KSxNcj1fbiksRXQuaGFzT3duUHJvcGVydHkoWHQ9IlJPVU5ESU5HX01PREUiKSYmKG10KF9uPUV0W1h0XSwwLDgsWHQpLHZpPV9uKSxFdC5oYXNPd25Qcm9wZXJ0eShY''@;'; put 'put ''dD0iRVhQT05FTlRJQUxfQVQiKSYmKChfbj1FdFtYdF0pJiZfbi5wb3A/KG10KF9uWzBdLC13ZSwwLFh0KSxtdChfblsxXSwwLHdlLFh0KSxObj1fblswXSxCcj1fblsxXSk6KG10KF9uLC13ZSx3ZSxYdCksTm49LShCcj1fbjwwPy1fbjpfbikpKSxFdC5oYXNPd25Qcm9wZXJ0eShYdD0iUkFO''@;'; put 'put ''R0UiKSlpZigoX249RXRbWHRdKSYmX24ucG9wKW10KF9uWzBdLC13ZSwtMSxYdCksbXQoX25bMV0sMSx3ZSxYdCksZXI9X25bMF0sVHI9X25bMV07ZWxzZXtpZihtdChfbiwtd2Usd2UsWHQpLCFfbil0aHJvdyBFcnJvcih2K1h0KyIgY2Fubm90IGJlIHplcm86ICIrX24pO2VyPS0oVHI9X248''@;'; put 'put ''MD8tX246X24pfWlmKEV0Lmhhc093blByb3BlcnR5KFh0PSJDUllQVE8iKSl7aWYoKF9uPUV0W1h0XSkhPT0hIV9uKXRocm93IEVycm9yKHYrWHQrIiBub3QgdHJ1ZSBvciBmYWxzZTogIitfbik7aWYoX24pe2lmKCEodHlwZW9mIGNyeXB0bzwidSImJmNyeXB0byYmKGNyeXB0by5nZXRSYW5k''@;'; put 'put ''b21WYWx1ZXN8fGNyeXB0by5yYW5kb21CeXRlcykpKXRocm93ICRyPSFfbixFcnJvcih2KyJjcnlwdG8gdW5hdmFpbGFibGUiKTskcj1fbn1lbHNlICRyPV9ufWlmKEV0Lmhhc093blByb3BlcnR5KFh0PSJNT0RVTE9fTU9ERSIpJiYobXQoX249RXRbWHRdLDAsOSxYdCksYmk9X24pLEV0Lmhh''@;'; put 'put ''c093blByb3BlcnR5KFh0PSJQT1dfUFJFQ0lTSU9OIikmJihtdChfbj1FdFtYdF0sMCx3ZSxYdCksTmk9X24pLEV0Lmhhc093blByb3BlcnR5KFh0PSJGT1JNQVQiKSl7aWYoIm9iamVjdCIhPXR5cGVvZihfbj1FdFtYdF0pKXRocm93IEVycm9yKHYrWHQrIiBub3QgYW4gb2JqZWN0OiAiK19u''@;'; put 'put ''KTt2YT1fbn1pZihFdC5oYXNPd25Qcm9wZXJ0eShYdD0iQUxQSEFCRVQiKSl7aWYoInN0cmluZyIhPXR5cGVvZihfbj1FdFtYdF0pfHwvXi4/JHxbK1wtLlxzXXwoLikuKlwxLy50ZXN0KF9uKSl0aHJvdyBFcnJvcih2K1h0KyIgaW52YWxpZDogIitfbik7cGE9IjAxMjM0NTY3ODkiPT1fbi5z''@;'; put 'put ''bGljZSgwLDEwKSx4YT1fbn19cmV0dXJue0RFQ0lNQUxfUExBQ0VTOk1yLFJPVU5ESU5HX01PREU6dmksRVhQT05FTlRJQUxfQVQ6W05uLEJyXSxSQU5HRTpbZXIsVHJdLENSWVBUTzokcixNT0RVTE9fTU9ERTpiaSxQT1dfUFJFQ0lTSU9OOk5pLEZPUk1BVDp2YSxBTFBIQUJFVDp4YX19LFpy''@;'; put 'put ''LmlzQmlnTnVtYmVyPWZ1bmN0aW9uKEV0KXtpZighRXR8fCEwIT09RXQuX2lzQmlnTnVtYmVyKXJldHVybiExO2lmKCFaci5ERUJVRylyZXR1cm4hMDt2YXIgWHQsX24sUW49RXQuYyxQbj1FdC5lLEVuPUV0LnM7ZTppZigiW29iamVjdCBBcnJheV0iPT17fS50b1N0cmluZy5jYWxsKFFuKSl7''@;'; put 'put ''aWYoKDE9PT1Fbnx8LTE9PT1FbikmJlBuPj0td2UmJlBuPD13ZSYmUG49PT1mKFBuKSl7aWYoMD09PVFuWzBdKXtpZigwPT09UG4mJjE9PT1Rbi5sZW5ndGgpcmV0dXJuITA7YnJlYWsgZX1pZigoWHQ9KFBuKzEpJVUpPDEmJihYdCs9VSksU3RyaW5nKFFuWzBdKS5sZW5ndGg9PVh0KXtmb3Io''@;'; put 'put ''WHQ9MDtYdDxRbi5sZW5ndGg7WHQrKylpZigoX249UW5bWHRdKTwwfHxfbj49RHx8X24hPT1mKF9uKSlicmVhayBlO2lmKDAhPT1fbilyZXR1cm4hMH19fWVsc2UgaWYobnVsbD09PVFuJiZudWxsPT09UG4mJihudWxsPT09RW58fDE9PT1Fbnx8LTE9PT1FbikpcmV0dXJuITA7dGhyb3cgRXJy''@;'; put 'put ''b3IodisiSW52YWxpZCBCaWdOdW1iZXI6ICIrRXQpfSxaci5tYXhpbXVtPVpyLm1heD1mdW5jdGlvbigpe3JldHVybiBOdChhcmd1bWVudHMsLTEpfSxaci5taW5pbXVtPVpyLm1pbj1mdW5jdGlvbigpe3JldHVybiBOdChhcmd1bWVudHMsMSl9LFpyLnJhbmRvbT0oRXQ9OTAwNzE5OTI1NDc0''@;'; put 'put ''MDk5MixYdD1NYXRoLnJhbmRvbSgpKkV0JjIwOTcxNTE/ZnVuY3Rpb24oKXtyZXR1cm4gZihNYXRoLnJhbmRvbSgpKkV0KX06ZnVuY3Rpb24oKXtyZXR1cm4gODM4ODYwOCooMTA3Mzc0MTgyNCpNYXRoLnJhbmRvbSgpfDApKyg4Mzg4NjA4Kk1hdGgucmFuZG9tKCl8MCl9LGZ1bmN0aW9uKF9u''@;'; put 'put ''KXt2YXIgUW4sUG4sRW4sX3IsSG4sem49MCxPcj1bXSxFcj1uZXcgWnIoZHIpO2lmKG51bGw9PV9uP19uPU1yOm10KF9uLDAsd2UpLF9yPWgoX24vVSksJHIpaWYoY3J5cHRvLmdldFJhbmRvbVZhbHVlcyl7Zm9yKFFuPWNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KF9y''@;'; put 'put ''Kj0yKSk7em48X3I7KShIbj0xMzEwNzIqUW5bem5dKyhRblt6bisxXT4+PjExKSk+PTllMTU/KFBuPWNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDIpKSxRblt6bl09UG5bMF0sUW5bem4rMV09UG5bMV0pOihPci5wdXNoKEhuJTFlMTQpLHpuKz0yKTt6bj1fci8yfWVs''@;'; put 'put ''c2V7aWYoIWNyeXB0by5yYW5kb21CeXRlcyl0aHJvdyAkcj0hMSxFcnJvcih2KyJjcnlwdG8gdW5hdmFpbGFibGUiKTtmb3IoUW49Y3J5cHRvLnJhbmRvbUJ5dGVzKF9yKj03KTt6bjxfcjspKEhuPTI4MTQ3NDk3NjcxMDY1NiooMzEmUW5bem5dKSsxMDk5NTExNjI3Nzc2KlFuW3puKzFdKzQy''@;'; put 'put ''OTQ5NjcyOTYqUW5bem4rMl0rMTY3NzcyMTYqUW5bem4rM10rKFFuW3puKzRdPDwxNikrKFFuW3puKzVdPDw4KStRblt6bis2XSk+PTllMTU/Y3J5cHRvLnJhbmRvbUJ5dGVzKDcpLmNvcHkoUW4sem4pOihPci5wdXNoKEhuJTFlMTQpLHpuKz03KTt6bj1fci83fWlmKCEkcilmb3IoO3puPF9y''@;'; put 'put ''OykoSG49WHQoKSk8OWUxNSYmKE9yW3puKytdPUhuJTFlMTQpO2Zvcihfcj1PclstLXpuXSxfbiU9VSxfciYmX24mJihPclt6bl09Zihfci8oSG49b2VbVS1fbl0pKSpIbik7MD09PU9yW3puXTtPci5wb3AoKSx6bi0tKTtpZih6bjwwKU9yPVtFbj0wXTtlbHNle2ZvcihFbj0tMTswPT09T3Jb''@;'; put 'put ''MF07T3Iuc3BsaWNlKDAsMSksRW4tPVUpO2Zvcih6bj0xLEhuPU9yWzBdO0huPj0xMDtIbi89MTAsem4rKyk7em48VSYmKEVuLT1VLXpuKX1yZXR1cm4gRXIuZT1FbixFci5jPU9yLEVyfSksWnIuc3VtPWZ1bmN0aW9uKCl7Zm9yKHZhciBFdD0xLFh0PWFyZ3VtZW50cyxfbj1uZXcgWnIoWHRb''@;'; put 'put ''MF0pO0V0PFh0Lmxlbmd0aDspX249X24ucGx1cyhYdFtFdCsrXSk7cmV0dXJuIF9ufSxSbj1mdW5jdGlvbigpe3ZhciBFdD0iMDEyMzQ1Njc4OSI7ZnVuY3Rpb24gWHQoX24sUW4sUG4sRW4pe2Zvcih2YXIgX3Isem4sSG49WzBdLE9yPTAsRXI9X24ubGVuZ3RoO09yPEVyOyl7Zm9yKHpuPUhu''@;'; put 'put ''Lmxlbmd0aDt6bi0tO0huW3puXSo9UW4pO2ZvcihIblswXSs9RW4uaW5kZXhPZihfbi5jaGFyQXQoT3IrKykpLF9yPTA7X3I8SG4ubGVuZ3RoO19yKyspSG5bX3JdPlBuLTEmJihudWxsPT1IbltfcisxXSYmKEhuW19yKzFdPTApLEhuW19yKzFdKz1Ibltfcl0vUG58MCxIbltfcl0lPVBuKX1y''@;'; put 'put ''ZXR1cm4gSG4ucmV2ZXJzZSgpfXJldHVybiBmdW5jdGlvbihfbixRbixQbixFbixfcil7dmFyIEhuLHpuLE9yLEVyLHVpLElhLHlhLGxvLHRzPV9uLmluZGV4T2YoIi4iKSx4cz1NcixFbz12aTtmb3IodHM+PTAmJihFcj1OaSxOaT0wLF9uPV9uLnJlcGxhY2UoIi4iLCIiKSxJYT0obG89bmV3''@;'; put 'put ''IFpyKFFuKSkucG93KF9uLmxlbmd0aC10cyksTmk9RXIsbG8uYz1YdCh5bihudChJYS5jKSxJYS5lLCIwIiksMTAsUG4sRXQpLGxvLmU9bG8uYy5sZW5ndGgpLE9yPUVyPSh5YT1YdChfbixRbixQbixfcj8oSG49eGEsRXQpOihIbj1FdCx4YSkpKS5sZW5ndGg7MD09eWFbLS1Fcl07eWEucG9w''@;'; put 'put ''KCkpO2lmKCF5YVswXSlyZXR1cm4gSG4uY2hhckF0KDApO2lmKHRzPDA/LS1PcjooSWEuYz15YSxJYS5lPU9yLElhLnM9RW4seWE9KElhPXduKElhLGxvLHhzLEVvLFBuKSkuYyx1aT1JYS5yLE9yPUlhLmUpLHRzPXlhW3puPU9yK3hzKzFdLEVyPVBuLzIsdWk9dWl8fHpuPDB8fG51bGwhPXlh''@;'; put 'put ''W3puKzFdLHVpPUVvPDQ/KG51bGwhPXRzfHx1aSkmJigwPT1Fb3x8RW89PShJYS5zPDA/MzoyKSk6dHM+RXJ8fHRzPT1FciYmKDQ9PUVvfHx1aXx8Nj09RW8mJjEmeWFbem4tMV18fEVvPT0oSWEuczwwPzg6NykpLHpuPDF8fCF5YVswXSlfbj11aT95bihIbi5jaGFyQXQoMSksLXhzLEhuLmNo''@;'; put 'put ''YXJBdCgwKSk6SG4uY2hhckF0KDApO2Vsc2V7aWYoeWEubGVuZ3RoPXpuLHVpKWZvcigtLVBuOysreWFbLS16bl0+UG47KXlhW3puXT0wLHpufHwoKytPcix5YT1bMV0uY29uY2F0KHlhKSk7Zm9yKEVyPXlhLmxlbmd0aDsheWFbLS1Fcl07KTtmb3IodHM9MCxfbj0iIjt0czw9RXI7X24rPUhu''@;'; put 'put ''LmNoYXJBdCh5YVt0cysrXSkpO19uPXluKF9uLE9yLEhuLmNoYXJBdCgwKSl9cmV0dXJuIF9ufX0oKSx3bj1mdW5jdGlvbigpe2Z1bmN0aW9uIEV0KFFuLFBuLEVuKXt2YXIgX3IsSG4sem4sT3IsRXI9MCx1aT1Rbi5sZW5ndGgsSWE9UG4ldmUseWE9UG4vdmV8MDtmb3IoUW49UW4uc2xpY2Uo''@;'; put 'put ''KTt1aS0tOylFcj0oKEhuPUlhKih6bj1Rblt1aV0ldmUpKyhfcj15YSp6bisoT3I9UW5bdWldL3ZlfDApKklhKSV2ZSp2ZStFcikvRW58MCkrKF9yL3ZlfDApK3lhKk9yLFFuW3VpXT1IbiVFbjtyZXR1cm4gRXImJihRbj1bRXJdLmNvbmNhdChRbikpLFFufWZ1bmN0aW9uIFh0KFFuLFBuLEVu''@;'; put 'put ''LF9yKXt2YXIgSG4sem47aWYoRW4hPV9yKXpuPUVuPl9yPzE6LTE7ZWxzZSBmb3IoSG49em49MDtIbjxFbjtIbisrKWlmKFFuW0huXSE9UG5bSG5dKXt6bj1RbltIbl0+UG5bSG5dPzE6LTE7YnJlYWt9cmV0dXJuIHpufWZ1bmN0aW9uIF9uKFFuLFBuLEVuLF9yKXtmb3IodmFyIEhuPTA7RW4t''@;'; put 'put ''LTspUW5bRW5dLT1IbixRbltFbl09KEhuPVFuW0VuXTxQbltFbl0/MTowKSpfcitRbltFbl0tUG5bRW5dO2Zvcig7IVFuWzBdJiZRbi5sZW5ndGg+MTtRbi5zcGxpY2UoMCwxKSk7fXJldHVybiBmdW5jdGlvbihRbixQbixFbixfcixIbil7dmFyIHpuLE9yLEVyLHVpLElhLHlhLGxvLHRzLHhz''@;'; put 'put ''LEVvLHFvLHFzLEVsLEkwLEoxLFJjLGdvLGNjPVFuLnM9PVBuLnM/MTotMSxWbD1Rbi5jLERzPVBuLmM7aWYoIShWbCYmVmxbMF0mJkRzJiZEc1swXSkpcmV0dXJuIG5ldyBacihRbi5zJiZQbi5zJiYoVmw/IURzfHxWbFswXSE9RHNbMF06RHMpP1ZsJiYwPT1WbFswXXx8IURzPzAqY2M6Y2Mv''@;'; put 'put ''MDpOYU4pO2Zvcih4cz0odHM9bmV3IFpyKGNjKSkuYz1bXSxjYz1FbisoT3I9UW4uZS1Qbi5lKSsxLEhufHwoSG49RCxPcj1XZShRbi5lL1UpLVdlKFBuLmUvVSksY2M9Y2MvVXwwKSxFcj0wO0RzW0VyXT09KFZsW0VyXXx8MCk7RXIrKyk7aWYoRHNbRXJdPihWbFtFcl18fDApJiZPci0tLGNj''@;'; put 'put ''PDApeHMucHVzaCgxKSx1aT0hMDtlbHNle2ZvcihJMD1WbC5sZW5ndGgsUmM9RHMubGVuZ3RoLEVyPTAsY2MrPTIsKElhPWYoSG4vKERzWzBdKzEpKSk+MSYmKERzPUV0KERzLElhLEhuKSxWbD1FdChWbCxJYSxIbiksUmM9RHMubGVuZ3RoLEkwPVZsLmxlbmd0aCksRWw9UmMscW89KEVvPVZs''@;'; put 'put ''LnNsaWNlKDAsUmMpKS5sZW5ndGg7cW88UmM7RW9bcW8rK109MCk7Z289RHMuc2xpY2UoKSxnbz1bMF0uY29uY2F0KGdvKSxKMT1Ec1swXSxEc1sxXT49SG4vMiYmSjErKztkb3tpZihJYT0wLCh6bj1YdChEcyxFbyxSYyxxbykpPDApe2lmKHFzPUVvWzBdLFJjIT1xbyYmKHFzPXFzKkhuKyhF''@;'; put 'put ''b1sxXXx8MCkpLChJYT1mKHFzL0oxKSk+MSlmb3IoSWE+PUhuJiYoSWE9SG4tMSksbG89KHlhPUV0KERzLElhLEhuKSkubGVuZ3RoLHFvPUVvLmxlbmd0aDsxPT1YdCh5YSxFbyxsbyxxbyk7KUlhLS0sX24oeWEsUmM8bG8/Z286RHMsbG8sSG4pLGxvPXlhLmxlbmd0aCx6bj0xO2Vsc2UgMD09''@;'; put 'put ''SWEmJih6bj1JYT0xKSxsbz0oeWE9RHMuc2xpY2UoKSkubGVuZ3RoO2lmKGxvPHFvJiYoeWE9WzBdLmNvbmNhdCh5YSkpLF9uKEVvLHlhLHFvLEhuKSxxbz1Fby5sZW5ndGgsLTE9PXpuKWZvcig7WHQoRHMsRW8sUmMscW8pPDE7KUlhKyssX24oRW8sUmM8cW8/Z286RHMscW8sSG4pLHFvPUVv''@;'; put 'put ''Lmxlbmd0aH1lbHNlIDA9PT16biYmKElhKyssRW89WzBdKTt4c1tFcisrXT1JYSxFb1swXT9Fb1txbysrXT1WbFtFbF18fDA6KEVvPVtWbFtFbF1dLHFvPTEpfXdoaWxlKChFbCsrPEkwfHxudWxsIT1Fb1swXSkmJmNjLS0pO3VpPW51bGwhPUVvWzBdLHhzWzBdfHx4cy5zcGxpY2UoMCwxKX1p''@;'; put 'put ''ZihIbj09RCl7Zm9yKEVyPTEsY2M9eHNbMF07Y2M+PTEwO2NjLz0xMCxFcisrKTtMbih0cyxFbisodHMuZT1FcitPcipVLTEpKzEsX3IsdWkpfWVsc2UgdHMuZT1Pcix0cy5yPSt1aTtyZXR1cm4gdHN9fSgpLERyPWZ1bmN0aW9uKCl7dmFyIEV0PS9eKC0/KTAoW3hib10pKD89XHdbXHcuXSok''@;'; put 'put ''KS9pLFh0PS9eKFteLl0rKVwuJC8sX249L15cLihbXi5dKykkLyxRbj0vXi0/KEluZmluaXR5fE5hTikkLyxQbj0vXlxzKlwrKD89W1x3Ll0pfF5ccyt8XHMrJC9nO3JldHVybiBmdW5jdGlvbihFbixfcixIbix6bil7dmFyIE9yLEVyPUhuP19yOl9yLnJlcGxhY2UoUG4sIiIpO2lmKFFuLnRl''@;'; put 'put ''c3QoRXIpKUVuLnM9aXNOYU4oRXIpP251bGw6RXI8MD8tMToxO2Vsc2V7aWYoIUhuJiYoRXI9RXIucmVwbGFjZShFdCxmdW5jdGlvbih1aSxJYSx5YSl7cmV0dXJuIE9yPSJ4Ij09KHlhPXlhLnRvTG93ZXJDYXNlKCkpPzE2OiJiIj09eWE/Mjo4LHpuJiZ6biE9T3I/dWk6SWF9KSx6biYmKE9y''@;'; put 'put ''PXpuLEVyPUVyLnJlcGxhY2UoWHQsIiQxIikucmVwbGFjZShfbiwiMC4kMSIpKSxfciE9RXIpKXJldHVybiBuZXcgWnIoRXIsT3IpO2lmKFpyLkRFQlVHKXRocm93IEVycm9yKHYrIk5vdCBhIisoem4/IiBiYXNlICIrem46IiIpKyIgbnVtYmVyOiAiK19yKTtFbi5zPW51bGx9RW4uYz1Fbi5l''@;'; put 'put ''PW51bGx9fSgpLExyLmFic29sdXRlVmFsdWU9THIuYWJzPWZ1bmN0aW9uKCl7dmFyIEV0PW5ldyBacih0aGlzKTtyZXR1cm4gRXQuczwwJiYoRXQucz0xKSxFdH0sTHIuY29tcGFyZWRUbz1mdW5jdGlvbihFdCxYdCl7cmV0dXJuIGR0KHRoaXMsbmV3IFpyKEV0LFh0KSl9LExyLmRlY2ltYWxQ''@;'; put 'put ''bGFjZXM9THIuZHA9ZnVuY3Rpb24oRXQsWHQpe3ZhciBfbixRbixQbjtpZihudWxsIT1FdClyZXR1cm4gbXQoRXQsMCx3ZSksbnVsbD09WHQ/WHQ9dmk6bXQoWHQsMCw4KSxMbihuZXcgWnIodGhpcyksRXQrdGhpcy5lKzEsWHQpO2lmKCEoX249dGhpcy5jKSlyZXR1cm4gbnVsbDtpZihRbj0o''@;'; put 'put ''KFBuPV9uLmxlbmd0aC0xKS1XZSh0aGlzLmUvVSkpKlUsUG49X25bUG5dKWZvcig7UG4lMTA9PTA7UG4vPTEwLFFuLS0pO3JldHVybiBRbjwwJiYoUW49MCksUW59LExyLmRpdmlkZWRCeT1Mci5kaXY9ZnVuY3Rpb24oRXQsWHQpe3JldHVybiB3bih0aGlzLG5ldyBacihFdCxYdCksTXIsdmkp''@;'; put 'put ''fSxMci5kaXZpZGVkVG9JbnRlZ2VyQnk9THIuaWRpdj1mdW5jdGlvbihFdCxYdCl7cmV0dXJuIHduKHRoaXMsbmV3IFpyKEV0LFh0KSwwLDEpfSxMci5leHBvbmVudGlhdGVkQnk9THIucG93PWZ1bmN0aW9uKEV0LFh0KXt2YXIgX24sUW4sUG4sRW4sSG4sem4sT3IsRXIsdWk9dGhpcztpZigo''@;'; put 'put ''RXQ9bmV3IFpyKEV0KSkuYyYmIUV0LmlzSW50ZWdlcigpKXRocm93IEVycm9yKHYrIkV4cG9uZW50IG5vdCBhbiBpbnRlZ2VyOiAiK2lyKEV0KSk7aWYobnVsbCE9WHQmJihYdD1uZXcgWnIoWHQpKSxIbj1FdC5lPjE0LCF1aS5jfHwhdWkuY1swXXx8MT09dWkuY1swXSYmIXVpLmUmJjE9PXVp''@;'; put 'put ''LmMubGVuZ3RofHwhRXQuY3x8IUV0LmNbMF0pcmV0dXJuIEVyPW5ldyBacihNYXRoLnBvdygraXIodWkpLEhuP0V0LnMqKDItJHQoRXQpKToraXIoRXQpKSksWHQ/RXIubW9kKFh0KTpFcjtpZih6bj1FdC5zPDAsWHQpe2lmKFh0LmM/IVh0LmNbMF06IVh0LnMpcmV0dXJuIG5ldyBacihOYU4p''@;'; put 'put ''OyhRbj0hem4mJnVpLmlzSW50ZWdlcigpJiZYdC5pc0ludGVnZXIoKSkmJih1aT11aS5tb2QoWHQpKX1lbHNle2lmKEV0LmU+OSYmKHVpLmU+MHx8dWkuZTwtMXx8KDA9PXVpLmU/dWkuY1swXT4xfHxIbiYmdWkuY1sxXT49MjRlNzp1aS5jWzBdPDhlMTN8fEhuJiZ1aS5jWzBdPD05OTk5OTc1''@;'; put 'put ''ZTcpKSlyZXR1cm4gRW49dWkuczwwJiYkdChFdCk/LTA6MCx1aS5lPi0xJiYoRW49MS9FbiksbmV3IFpyKHpuPzEvRW46RW4pO05pJiYoRW49aChOaS9VKzIpKX1mb3IoSG4/KF9uPW5ldyBaciguNSksem4mJihFdC5zPTEpLE9yPSR0KEV0KSk6T3I9KFBuPU1hdGguYWJzKCtpcihFdCkpKSUy''@;'; put 'put ''LEVyPW5ldyBacihkcik7Oyl7aWYoT3Ipe2lmKCEoRXI9RXIudGltZXModWkpKS5jKWJyZWFrO0VuP0VyLmMubGVuZ3RoPkVuJiYoRXIuYy5sZW5ndGg9RW4pOlFuJiYoRXI9RXIubW9kKFh0KSl9aWYoUG4pe2lmKDA9PT0oUG49ZihQbi8yKSkpYnJlYWs7T3I9UG4lMn1lbHNlIGlmKExuKEV0''@;'; put 'put ''PUV0LnRpbWVzKF9uKSxFdC5lKzEsMSksRXQuZT4xNClPcj0kdChFdCk7ZWxzZXtpZigwPT0oUG49K2lyKEV0KSkpYnJlYWs7T3I9UG4lMn11aT11aS50aW1lcyh1aSksRW4/dWkuYyYmdWkuYy5sZW5ndGg+RW4mJih1aS5jLmxlbmd0aD1Fbik6UW4mJih1aT11aS5tb2QoWHQpKX1yZXR1cm4g''@;'; put 'put ''UW4/RXI6KHpuJiYoRXI9ZHIuZGl2KEVyKSksWHQ/RXIubW9kKFh0KTpFbj9MbihFcixOaSx2aSx2b2lkIDApOkVyKX0sTHIuaW50ZWdlclZhbHVlPWZ1bmN0aW9uKEV0KXt2YXIgWHQ9bmV3IFpyKHRoaXMpO3JldHVybiBudWxsPT1FdD9FdD12aTptdChFdCwwLDgpLExuKFh0LFh0LmUrMSxF''@;'; put 'put ''dCl9LExyLmlzRXF1YWxUbz1Mci5lcT1mdW5jdGlvbihFdCxYdCl7cmV0dXJuIDA9PT1kdCh0aGlzLG5ldyBacihFdCxYdCkpfSxMci5pc0Zpbml0ZT1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5jfSxMci5pc0dyZWF0ZXJUaGFuPUxyLmd0PWZ1bmN0aW9uKEV0LFh0KXtyZXR1cm4gZHQodGhp''@;'; put 'put ''cyxuZXcgWnIoRXQsWHQpKT4wfSxMci5pc0dyZWF0ZXJUaGFuT3JFcXVhbFRvPUxyLmd0ZT1mdW5jdGlvbihFdCxYdCl7cmV0dXJuIDE9PT0oWHQ9ZHQodGhpcyxuZXcgWnIoRXQsWHQpKSl8fDA9PT1YdH0sTHIuaXNJbnRlZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmMmJldlKHRoaXMu''@;'; put 'put ''ZS9VKT50aGlzLmMubGVuZ3RoLTJ9LExyLmlzTGVzc1RoYW49THIubHQ9ZnVuY3Rpb24oRXQsWHQpe3JldHVybiBkdCh0aGlzLG5ldyBacihFdCxYdCkpPDB9LExyLmlzTGVzc1RoYW5PckVxdWFsVG89THIubHRlPWZ1bmN0aW9uKEV0LFh0KXtyZXR1cm4tMT09PShYdD1kdCh0aGlzLG5ldyBa''@;'; put 'put ''cihFdCxYdCkpKXx8MD09PVh0fSxMci5pc05hTj1mdW5jdGlvbigpe3JldHVybiF0aGlzLnN9LExyLmlzTmVnYXRpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zPDB9LExyLmlzUG9zaXRpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zPjB9LExyLmlzWmVybz1mdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biEhdGhpcy5jJiYwPT10aGlzLmNbMF19LExyLm1pbnVzPWZ1bmN0aW9uKEV0LFh0KXt2YXIgX24sUW4sUG4sRW4sX3I9dGhpcyxIbj1fci5zO2lmKFh0PShFdD1uZXcgWnIoRXQsWHQpKS5zLCFIbnx8IVh0KXJldHVybiBuZXcgWnIoTmFOKTtpZihIbiE9WHQpcmV0dXJuIEV0LnM9LVh0LF9y''@;'; put 'put ''LnBsdXMoRXQpO3ZhciB6bj1fci5lL1UsT3I9RXQuZS9VLEVyPV9yLmMsdWk9RXQuYztpZighem58fCFPcil7aWYoIUVyfHwhdWkpcmV0dXJuIEVyPyhFdC5zPS1YdCxFdCk6bmV3IFpyKHVpP19yOk5hTik7aWYoIUVyWzBdfHwhdWlbMF0pcmV0dXJuIHVpWzBdPyhFdC5zPS1YdCxFdCk6bmV3''@;'; put 'put ''IFpyKEVyWzBdP19yOjM9PXZpPy0wOjApfWlmKHpuPVdlKHpuKSxPcj1XZShPciksRXI9RXIuc2xpY2UoKSxIbj16bi1Pcil7Zm9yKChFbj1IbjwwKT8oSG49LUhuLFBuPUVyKTooT3I9em4sUG49dWkpLFBuLnJldmVyc2UoKSxYdD1IbjtYdC0tO1BuLnB1c2goMCkpO1BuLnJldmVyc2UoKX1l''@;'; put 'put ''bHNlIGZvcihRbj0oRW49KEhuPUVyLmxlbmd0aCk8KFh0PXVpLmxlbmd0aCkpP0huOlh0LEhuPVh0PTA7WHQ8UW47WHQrKylpZihFcltYdF0hPXVpW1h0XSl7RW49RXJbWHRdPHVpW1h0XTticmVha31pZihFbiYmKFBuPUVyLEVyPXVpLHVpPVBuLEV0LnM9LUV0LnMpLChYdD0oUW49dWkubGVu''@;'; put 'put ''Z3RoKS0oX249RXIubGVuZ3RoKSk+MClmb3IoO1h0LS07RXJbX24rK109MCk7Zm9yKFh0PUQtMTtRbj5Ibjspe2lmKEVyWy0tUW5dPHVpW1FuXSl7Zm9yKF9uPVFuO19uJiYhRXJbLS1fbl07RXJbX25dPVh0KTstLUVyW19uXSxFcltRbl0rPUR9RXJbUW5dLT11aVtRbl19Zm9yKDswPT1Fclsw''@;'; put 'put ''XTtFci5zcGxpY2UoMCwxKSwtLU9yKTtyZXR1cm4gRXJbMF0/UXQoRXQsRXIsT3IpOihFdC5zPTM9PXZpPy0xOjEsRXQuYz1bRXQuZT0wXSxFdCl9LExyLm1vZHVsbz1Mci5tb2Q9ZnVuY3Rpb24oRXQsWHQpe3ZhciBfbixRbixQbj10aGlzO3JldHVybiBFdD1uZXcgWnIoRXQsWHQpLCFQbi5j''@;'; put 'put ''fHwhRXQuc3x8RXQuYyYmIUV0LmNbMF0/bmV3IFpyKE5hTik6IUV0LmN8fFBuLmMmJiFQbi5jWzBdP25ldyBacihQbik6KDk9PWJpPyhRbj1FdC5zLEV0LnM9MSxfbj13bihQbixFdCwwLDMpLEV0LnM9UW4sX24ucyo9UW4pOl9uPXduKFBuLEV0LDAsYmkpLCEoRXQ9UG4ubWludXMoX24udGlt''@;'; put 'put ''ZXMoRXQpKSkuY1swXSYmMT09YmkmJihFdC5zPVBuLnMpLEV0KX0sTHIubXVsdGlwbGllZEJ5PUxyLnRpbWVzPWZ1bmN0aW9uKEV0LFh0KXt2YXIgX24sUW4sUG4sRW4sX3IsSG4sem4sT3IsRXIsdWksSWEseWEsbG8sdHMseHMsRW89dGhpcyxxbz1Fby5jLHFzPShFdD1uZXcgWnIoRXQsWHQp''@;'; put 'put ''KS5jO2lmKCEocW8mJnFzJiZxb1swXSYmcXNbMF0pKXJldHVybiFFby5zfHwhRXQuc3x8cW8mJiFxb1swXSYmIXFzfHxxcyYmIXFzWzBdJiYhcW8/RXQuYz1FdC5lPUV0LnM9bnVsbDooRXQucyo9RW8ucyxxbyYmcXM/KEV0LmM9WzBdLEV0LmU9MCk6RXQuYz1FdC5lPW51bGwpLEV0O2ZvcihR''@;'; put 'put ''bj1XZShFby5lL1UpK1dlKEV0LmUvVSksRXQucyo9RW8ucywoem49cW8ubGVuZ3RoKTwodWk9cXMubGVuZ3RoKSYmKGxvPXFvLHFvPXFzLHFzPWxvLFBuPXpuLHpuPXVpLHVpPVBuKSxQbj16bit1aSxsbz1bXTtQbi0tO2xvLnB1c2goMCkpO2Zvcih0cz1ELHhzPXZlLFBuPXVpOy0tUG4+PTA7''@;'; put 'put ''KXtmb3IoX249MCxJYT1xc1tQbl0leHMseWE9cXNbUG5dL3hzfDAsRW49UG4rKF9yPXpuKTtFbj5QbjspX249KChPcj1JYSooT3I9cW9bLS1fcl0leHMpKyhIbj15YSpPcisoRXI9cW9bX3JdL3hzfDApKklhKSV4cyp4cytsb1tFbl0rX24pL3RzfDApKyhIbi94c3wwKSt5YSpFcixsb1tFbi0t''@;'; put 'put ''XT1PciV0cztsb1tFbl09X259cmV0dXJuIF9uPysrUW46bG8uc3BsaWNlKDAsMSksUXQoRXQsbG8sUW4pfSxMci5uZWdhdGVkPWZ1bmN0aW9uKCl7dmFyIEV0PW5ldyBacih0aGlzKTtyZXR1cm4gRXQucz0tRXQuc3x8bnVsbCxFdH0sTHIucGx1cz1mdW5jdGlvbihFdCxYdCl7dmFyIF9uLFFu''@;'; put 'put ''PXRoaXMsUG49UW4ucztpZihYdD0oRXQ9bmV3IFpyKEV0LFh0KSkucywhUG58fCFYdClyZXR1cm4gbmV3IFpyKE5hTik7aWYoUG4hPVh0KXJldHVybiBFdC5zPS1YdCxRbi5taW51cyhFdCk7dmFyIEVuPVFuLmUvVSxfcj1FdC5lL1UsSG49UW4uYyx6bj1FdC5jO2lmKCFFbnx8IV9yKXtpZigh''@;'; put 'put ''SG58fCF6bilyZXR1cm4gbmV3IFpyKFBuLzApO2lmKCFIblswXXx8IXpuWzBdKXJldHVybiB6blswXT9FdDpuZXcgWnIoSG5bMF0/UW46MCpQbil9aWYoRW49V2UoRW4pLF9yPVdlKF9yKSxIbj1Ibi5zbGljZSgpLFBuPUVuLV9yKXtmb3IoUG4+MD8oX3I9RW4sX249em4pOihQbj0tUG4sX249''@;'; put 'put ''SG4pLF9uLnJldmVyc2UoKTtQbi0tO19uLnB1c2goMCkpO19uLnJldmVyc2UoKX1mb3IoKFBuPUhuLmxlbmd0aCktKFh0PXpuLmxlbmd0aCk8MCYmKF9uPXpuLHpuPUhuLEhuPV9uLFh0PVBuKSxQbj0wO1h0OylQbj0oSG5bLS1YdF09SG5bWHRdK3puW1h0XStQbikvRHwwLEhuW1h0XT1EPT09''@;'; put 'put ''SG5bWHRdPzA6SG5bWHRdJUQ7cmV0dXJuIFBuJiYoSG49W1BuXS5jb25jYXQoSG4pLCsrX3IpLFF0KEV0LEhuLF9yKX0sTHIucHJlY2lzaW9uPUxyLnNkPWZ1bmN0aW9uKEV0LFh0KXt2YXIgX24sUW4sUG47aWYobnVsbCE9RXQmJkV0IT09ISFFdClyZXR1cm4gbXQoRXQsMSx3ZSksbnVsbD09''@;'; put 'put ''WHQ/WHQ9dmk6bXQoWHQsMCw4KSxMbihuZXcgWnIodGhpcyksRXQsWHQpO2lmKCEoX249dGhpcy5jKSlyZXR1cm4gbnVsbDtpZihRbj0oUG49X24ubGVuZ3RoLTEpKlUrMSxQbj1fbltQbl0pe2Zvcig7UG4lMTA9PTA7UG4vPTEwLFFuLS0pO2ZvcihQbj1fblswXTtQbj49MTA7UG4vPTEwLFFu''@;'; put 'put ''KyspO31yZXR1cm4gRXQmJnRoaXMuZSsxPlFuJiYoUW49dGhpcy5lKzEpLFFufSxMci5zaGlmdGVkQnk9ZnVuY3Rpb24oRXQpe3JldHVybiBtdChFdCwtdGUsdGUpLHRoaXMudGltZXMoIjFlIitFdCl9LExyLnNxdWFyZVJvb3Q9THIuc3FydD1mdW5jdGlvbigpe3ZhciBFdCxYdCxfbixRbixQ''@;'; put 'put ''bixFbj10aGlzLF9yPUVuLmMsSG49RW4ucyx6bj1Fbi5lLE9yPU1yKzQsRXI9bmV3IFpyKCIwLjUiKTtpZigxIT09SG58fCFfcnx8IV9yWzBdKXJldHVybiBuZXcgWnIoIUhufHxIbjwwJiYoIV9yfHxfclswXSk/TmFOOl9yP0VuOjEvMCk7aWYoMD09KEhuPU1hdGguc3FydCgraXIoRW4pKSl8''@;'; put 'put ''fEhuPT0xLzA/KCgoWHQ9bnQoX3IpKS5sZW5ndGgrem4pJTI9PTAmJihYdCs9IjAiKSxIbj1NYXRoLnNxcnQoK1h0KSx6bj1XZSgoem4rMSkvMiktKHpuPDB8fHpuJTIpLF9uPW5ldyBacihYdD1Ibj09MS8wPyI1ZSIrem46KFh0PUhuLnRvRXhwb25lbnRpYWwoKSkuc2xpY2UoMCxYdC5pbmRl''@;'; put 'put ''eE9mKCJlIikrMSkrem4pKTpfbj1uZXcgWnIoSG4rIiIpLF9uLmNbMF0pZm9yKChIbj0oem49X24uZSkrT3IpPDMmJihIbj0wKTs7KWlmKF9uPUVyLnRpbWVzKChQbj1fbikucGx1cyh3bihFbixQbixPciwxKSkpLG50KFBuLmMpLnNsaWNlKDAsSG4pPT09KFh0PW50KF9uLmMpKS5zbGljZSgw''@;'; put 'put ''LEhuKSl7aWYoX24uZTx6biYmLS1IbiwiOTk5OSIhPShYdD1YdC5zbGljZShIbi0zLEhuKzEpKSYmKFFufHwiNDk5OSIhPVh0KSl7KCErWHR8fCErWHQuc2xpY2UoMSkmJiI1Ij09WHQuY2hhckF0KDApKSYmKExuKF9uLF9uLmUrTXIrMiwxKSxFdD0hX24udGltZXMoX24pLmVxKEVuKSk7YnJl''@;'; put 'put ''YWt9aWYoIVFuJiYoTG4oUG4sUG4uZStNcisyLDApLFBuLnRpbWVzKFBuKS5lcShFbikpKXtfbj1QbjticmVha31Pcis9NCxIbis9NCxRbj0xfXJldHVybiBMbihfbixfbi5lK01yKzEsdmksRXQpfSxMci50b0V4cG9uZW50aWFsPWZ1bmN0aW9uKEV0LFh0KXtyZXR1cm4gbnVsbCE9RXQmJiht''@;'; put 'put ''dChFdCwwLHdlKSxFdCsrKSx5dCh0aGlzLEV0LFh0LDEpfSxMci50b0ZpeGVkPWZ1bmN0aW9uKEV0LFh0KXtyZXR1cm4gbnVsbCE9RXQmJihtdChFdCwwLHdlKSxFdD1FdCt0aGlzLmUrMSkseXQodGhpcyxFdCxYdCl9LExyLnRvRm9ybWF0PWZ1bmN0aW9uKEV0LFh0LF9uKXt2YXIgUW47aWYo''@;'; put 'put ''bnVsbD09X24pbnVsbCE9RXQmJlh0JiYib2JqZWN0Ij09dHlwZW9mIFh0Pyhfbj1YdCxYdD1udWxsKTpFdCYmIm9iamVjdCI9PXR5cGVvZiBFdD8oX249RXQsRXQ9WHQ9bnVsbCk6X249dmE7ZWxzZSBpZigib2JqZWN0IiE9dHlwZW9mIF9uKXRocm93IEVycm9yKHYrIkFyZ3VtZW50IG5vdCBh''@;'; put 'put ''biBvYmplY3Q6ICIrX24pO2lmKFFuPXRoaXMudG9GaXhlZChFdCxYdCksdGhpcy5jKXt2YXIgRW4sX3I9UW4uc3BsaXQoIi4iKSxIbj0rX24uZ3JvdXBTaXplLHpuPStfbi5zZWNvbmRhcnlHcm91cFNpemUsT3I9X24uZ3JvdXBTZXBhcmF0b3J8fCIiLEVyPV9yWzBdLHVpPV9yWzFdLElhPXRo''@;'; put 'put ''aXMuczwwLHlhPUlhP0VyLnNsaWNlKDEpOkVyLGxvPXlhLmxlbmd0aDtpZih6biYmKEVuPUhuLEhuPXpuLHpuPUVuLGxvLT1FbiksSG4+MCYmbG8+MCl7Zm9yKEVyPXlhLnN1YnN0cigwLEVuPWxvJUhufHxIbik7RW48bG87RW4rPUhuKUVyKz1Pcit5YS5zdWJzdHIoRW4sSG4pO3puPjAmJihF''@;'; put 'put ''cis9T3IreWEuc2xpY2UoRW4pKSxJYSYmKEVyPSItIitFcil9UW49dWk/RXIrKF9uLmRlY2ltYWxTZXBhcmF0b3J8fCIiKSsoKHpuPStfbi5mcmFjdGlvbkdyb3VwU2l6ZSk/dWkucmVwbGFjZShuZXcgUmVnRXhwKCJcXGR7Iit6bisifVxcQiIsImciKSwiJCYiKyhfbi5mcmFjdGlvbkdyb3Vw''@;'; put 'put ''U2VwYXJhdG9yfHwiIikpOnVpKTpFcn1yZXR1cm4oX24ucHJlZml4fHwiIikrUW4rKF9uLnN1ZmZpeHx8IiIpfSxMci50b0ZyYWN0aW9uPWZ1bmN0aW9uKEV0KXt2YXIgWHQsX24sUW4sUG4sRW4sX3IsSG4sem4sT3IsRXIsdWksSWEseWE9dGhpcyxsbz15YS5jO2lmKG51bGwhPUV0JiYoIShI''@;'; put 'put ''bj1uZXcgWnIoRXQpKS5pc0ludGVnZXIoKSYmKEhuLmN8fDEhPT1Ibi5zKXx8SG4ubHQoZHIpKSl0aHJvdyBFcnJvcih2KyJBcmd1bWVudCAiKyhIbi5pc0ludGVnZXIoKT8ib3V0IG9mIHJhbmdlOiAiOiJub3QgYW4gaW50ZWdlcjogIikraXIoSG4pKTtpZighbG8pcmV0dXJuIG5ldyBacih5''@;'; put 'put ''YSk7Zm9yKFh0PW5ldyBacihkciksT3I9X249bmV3IFpyKGRyKSxRbj16bj1uZXcgWnIoZHIpLElhPW50KGxvKSxFbj1YdC5lPUlhLmxlbmd0aC15YS5lLTEsWHQuY1swXT1vZVsoX3I9RW4lVSk8MD9VK19yOl9yXSxFdD0hRXR8fEhuLmNvbXBhcmVkVG8oWHQpPjA/RW4+MD9YdDpPcjpIbixf''@;'; put 'put ''cj1UcixUcj0xLzAsSG49bmV3IFpyKElhKSx6bi5jWzBdPTA7RXI9d24oSG4sWHQsMCwxKSwxIT0oUG49X24ucGx1cyhFci50aW1lcyhRbikpKS5jb21wYXJlZFRvKEV0KTspX249UW4sUW49UG4sT3I9em4ucGx1cyhFci50aW1lcyhQbj1PcikpLHpuPVBuLFh0PUhuLm1pbnVzKEVyLnRpbWVz''@;'; put 'put ''KFBuPVh0KSksSG49UG47cmV0dXJuIFBuPXduKEV0Lm1pbnVzKF9uKSxRbiwwLDEpLHpuPXpuLnBsdXMoUG4udGltZXMoT3IpKSxfbj1fbi5wbHVzKFBuLnRpbWVzKFFuKSksem4ucz1Pci5zPXlhLnMsdWk9d24oT3IsUW4sRW4qPTIsdmkpLm1pbnVzKHlhKS5hYnMoKS5jb21wYXJlZFRvKHdu''@;'; put 'put ''KHpuLF9uLEVuLHZpKS5taW51cyh5YSkuYWJzKCkpPDE/W09yLFFuXTpbem4sX25dLFRyPV9yLHVpfSxMci50b051bWJlcj1mdW5jdGlvbigpe3JldHVybitpcih0aGlzKX0sTHIudG9QcmVjaXNpb249ZnVuY3Rpb24oRXQsWHQpe3JldHVybiBudWxsIT1FdCYmbXQoRXQsMSx3ZSkseXQodGhp''@;'; put 'put ''cyxFdCxYdCwyKX0sTHIudG9TdHJpbmc9ZnVuY3Rpb24oRXQpe3ZhciBYdCxfbj10aGlzLFFuPV9uLnMsUG49X24uZTtyZXR1cm4gbnVsbD09PVBuP1FuPyhYdD0iSW5maW5pdHkiLFFuPDAmJihYdD0iLSIrWHQpKTpYdD0iTmFOIjoobnVsbD09RXQ/WHQ9UG48PU5ufHxQbj49QnI/enQobnQo''@;'; put 'put ''X24uYyksUG4pOnluKG50KF9uLmMpLFBuLCIwIik6MTA9PT1FdCYmcGE/WHQ9eW4obnQoKF9uPUxuKG5ldyBacihfbiksTXIrUG4rMSx2aSkpLmMpLF9uLmUsIjAiKToobXQoRXQsMix4YS5sZW5ndGgsIkJhc2UiKSxYdD1Sbih5bihudChfbi5jKSxQbiwiMCIpLDEwLEV0LFFuLCEwKSksUW48''@;'; put 'put ''MCYmX24uY1swXSYmKFh0PSItIitYdCkpLFh0fSxMci52YWx1ZU9mPUxyLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiBpcih0aGlzKX0sTHIuX2lzQmlnTnVtYmVyPSEwLG51bGwhPWduJiZaci5zZXQoZ24pLFpyfSgpLGEuZGVmYXVsdD1hLkJpZ051bWJlcj1hLGMuZXhwb3J0cz9jLmV4cG9y''@;'; put 'put ''dHM9YToobHx8KGw9dHlwZW9mIHNlbGY8InUiJiZzZWxmP3NlbGY6d2luZG93KSxsLkJpZ051bWJlcj1hKX0oTjF0KX0oTzZlKTt2YXIgUDZlPU82ZS5leHBvcnRzO2NvbnN0IGFwPUp0ZSgpLG9kdD1LdGUoKSxzZHQ9WHRlLGxkdD1QNmUsZjE9e3RyaWxsaW9uOk1hdGgucG93KDEwLDEyKSxi''@;'; put 'put ''aWxsaW9uOk1hdGgucG93KDEwLDkpLG1pbGxpb246TWF0aC5wb3coMTAsNiksdGhvdXNhbmQ6TWF0aC5wb3coMTAsMyl9LEFrPXt0b3RhbExlbmd0aDowLGNoYXJhY3RlcmlzdGljOjAsZm9yY2VBdmVyYWdlOiExLGF2ZXJhZ2U6ITEsbWFudGlzc2E6LTEsb3B0aW9uYWxNYW50aXNzYTohMCx0''@;'; put 'put ''aG91c2FuZFNlcGFyYXRlZDohMSxzcGFjZVNlcGFyYXRlZDohMSxuZWdhdGl2ZToic2lnbiIsZm9yY2VTaWduOiExLHJvdW5kaW5nRnVuY3Rpb246TWF0aC5yb3VuZCxzcGFjZVNlcGFyYXRlZEFiYnJldmlhdGlvbjohMX0se2JpbmFyeVN1ZmZpeGVzOkY2ZSxkZWNpbWFsU3VmZml4ZXM6YlZ9''@;'; put 'put ''PWFwLmN1cnJlbnRCeXRlcygpLFF0ZT17Z2VuZXJhbDp7c2NhbGU6MTAyNCxzdWZmaXhlczpiVixtYXJrZXI6ImJkIn0sYmluYXJ5OntzY2FsZToxMDI0LHN1ZmZpeGVzOkY2ZSxtYXJrZXI6ImIifSxkZWNpbWFsOntzY2FsZToxZTMsc3VmZml4ZXM6YlYsbWFya2VyOiJkIn19O2Z1bmN0aW9u''@;'; put 'put ''IF9WKGMsbCxhKXtsZXQgZD1sWzBdLGg9TWF0aC5hYnMoYyk7aWYoaD49YSl7Zm9yKGxldCBmPTE7ZjxsLmxlbmd0aDsrK2Ype2xldCB2PU1hdGgucG93KGEsZiksTT1NYXRoLnBvdyhhLGYrMSk7aWYoaD49diYmaDxNKXtkPWxbZl0sYy89djticmVha319ZD09PWxbMF0mJihjLz1NYXRoLnBv''@;'; put 'put ''dyhhLGwubGVuZ3RoLTEpLGQ9bFtsLmxlbmd0aC0xXSl9cmV0dXJue3ZhbHVlOmMsc3VmZml4OmR9fWZ1bmN0aW9uIHdWKGMpe2xldCBsPSIiO2ZvcihsZXQgYT0wO2E8YzthKyspbCs9IjAiO3JldHVybiBsfWZ1bmN0aW9uIGtrKHtpbnN0YW5jZTpjLHByb3ZpZGVkRm9ybWF0Omwsc3RhdGU6''@;'; put 'put ''YT1hcCxkZWNpbWFsU2VwYXJhdG9yOmQsZGVmYXVsdHM6aD1hLmN1cnJlbnREZWZhdWx0cygpfSl7bGV0IGY9Yy5fdmFsdWU7aWYoMD09PWYmJmEuaGFzWmVyb0Zvcm1hdCgpKXJldHVybiBhLmdldFplcm9Gb3JtYXQoKTtpZighaXNGaW5pdGUoZikpcmV0dXJuIGYudG9TdHJpbmcoKTtsZXQg''@;'; put 'put ''dj1PYmplY3QuYXNzaWduKHt9LEFrLGgsbCksTT12LnRvdGFsTGVuZ3RoLEQ9TT8wOnYuY2hhcmFjdGVyaXN0aWMsVT12Lm9wdGlvbmFsQ2hhcmFjdGVyaXN0aWMsdGU9di5mb3JjZUF2ZXJhZ2UsdmU9ISFNfHwhIXRlfHx2LmF2ZXJhZ2Usd2U9TT8tMTp2ZSYmdm9pZCAwPT09bC5tYW50aXNz''@;'; put 'put ''YT8wOnYubWFudGlzc2EsRmU9IU0mJih2b2lkIDA9PT1sLm9wdGlvbmFsTWFudGlzc2E/LTE9PT13ZTp2Lm9wdGlvbmFsTWFudGlzc2EpLFdlPXYudHJpbU1hbnRpc3NhLG50PXYudGhvdXNhbmRTZXBhcmF0ZWQsZHQ9di5zcGFjZVNlcGFyYXRlZCxtdD12Lm5lZ2F0aXZlLCR0PXYuZm9yY2VT''@;'; put 'put ''aWduLHp0PXYuZXhwb25lbnRpYWwseW49di5yb3VuZGluZ0Z1bmN0aW9uLGduPSIiO2lmKHZlKXtsZXQgUm49ZnVuY3Rpb24gYmR0KHt2YWx1ZTpjLGZvcmNlQXZlcmFnZTpsLGxvd1ByZWNpc2lvbjphPSEwLGFiYnJldmlhdGlvbnM6ZCxzcGFjZVNlcGFyYXRlZDpoPSExLHRvdGFsTGVuZ3Ro''@;'; put 'put ''OmY9MCxyb3VuZGluZ0Z1bmN0aW9uOnY9TWF0aC5yb3VuZH0pe2xldCBNPSIiLEQ9TWF0aC5hYnMoYyksVT0tMTtpZihsJiZkW2xdJiZmMVtsXT8oTT1kW2xdLGMvPWYxW2xdKTpEPj1mMS50cmlsbGlvbnx8YSYmMT09PXYoRC9mMS50cmlsbGlvbik/KE09ZC50cmlsbGlvbixjLz1mMS50cmls''@;'; put 'put ''bGlvbik6RDxmMS50cmlsbGlvbiYmRD49ZjEuYmlsbGlvbnx8YSYmMT09PXYoRC9mMS5iaWxsaW9uKT8oTT1kLmJpbGxpb24sYy89ZjEuYmlsbGlvbik6RDxmMS5iaWxsaW9uJiZEPj1mMS5taWxsaW9ufHxhJiYxPT09dihEL2YxLm1pbGxpb24pPyhNPWQubWlsbGlvbixjLz1mMS5taWxsaW9u''@;'; put 'put ''KTooRDxmMS5taWxsaW9uJiZEPj1mMS50aG91c2FuZHx8YSYmMT09PXYoRC9mMS50aG91c2FuZCkpJiYoTT1kLnRob3VzYW5kLGMvPWYxLnRob3VzYW5kKSxNJiYoTT0oaD8iICI6IiIpK00pLGYpe2xldCBvZT1jPDAsdmU9Yy50b1N0cmluZygpLnNwbGl0KCIuIilbMF07VT1NYXRoLm1heChm''@;'; put 'put ''LShvZT92ZS5sZW5ndGgtMTp2ZS5sZW5ndGgpLDApfXJldHVybnt2YWx1ZTpjLGFiYnJldmlhdGlvbjpNLG1hbnRpc3NhUHJlY2lzaW9uOlV9fSh7dmFsdWU6Zixmb3JjZUF2ZXJhZ2U6dGUsbG93UHJlY2lzaW9uOnYubG93UHJlY2lzaW9uLGFiYnJldmlhdGlvbnM6YS5jdXJyZW50QWJicmV2''@;'; put 'put ''aWF0aW9ucygpLHNwYWNlU2VwYXJhdGVkOmR0LHJvdW5kaW5nRnVuY3Rpb246eW4sdG90YWxMZW5ndGg6TX0pO2Y9Um4udmFsdWUsZ24rPVJuLmFiYnJldmlhdGlvbixNJiYod2U9Um4ubWFudGlzc2FQcmVjaXNpb24pfWlmKHp0KXtsZXQgUm49ZnVuY3Rpb24gX2R0KHt2YWx1ZTpjLGNoYXJh''@;'; put 'put ''Y3RlcmlzdGljUHJlY2lzaW9uOmx9KXtsZXRbYSxkXT1jLnRvRXhwb25lbnRpYWwoKS5zcGxpdCgiZSIpLGg9K2E7cmV0dXJuIGw/KDE8bCYmKGgqPU1hdGgucG93KDEwLGwtMSksZD0rZC0obC0xKSxkPWQ+PTA/YCske2R9YDpkKSx7dmFsdWU6aCxhYmJyZXZpYXRpb246YGUke2R9YH0pOnt2''@;'; put 'put ''YWx1ZTpoLGFiYnJldmlhdGlvbjpgZSR7ZH1gfX0oe3ZhbHVlOmYsY2hhcmFjdGVyaXN0aWNQcmVjaXNpb246RH0pO2Y9Um4udmFsdWUsZ249Um4uYWJicmV2aWF0aW9uK2dufWxldCB3bj1mdW5jdGlvbiBTZHQoYyxsLGEsZCxoLGYpe2lmKC0xPT09ZClyZXR1cm4gYztsZXQgdj1mdW5jdGlv''@;'; put 'put ''biBDZHQoYyxsLGE9TWF0aC5yb3VuZCl7cmV0dXJuLTEhPT1jLnRvU3RyaW5nKCkuaW5kZXhPZigiZSIpP2Z1bmN0aW9uIHdkdChjLGwpe2xldCBhPWMudG9TdHJpbmcoKSxbZCxoXT1hLnNwbGl0KCJlIiksW2Ysdj0iIl09ZC5zcGxpdCgiLiIpO2lmKCtoPjApYT1mK3Yrd1YoaC12Lmxlbmd0''@;'; put 'put ''aCk7ZWxzZXtsZXQgTT0iLiI7TT0rZjwwP2AtMCR7TX1gOmAwJHtNfWA7bGV0IEQ9KHdWKC1oLTEpK01hdGguYWJzKGYpK3YpLnN1YnN0cigwLGwpO0QubGVuZ3RoPGwmJihEKz13VihsLUQubGVuZ3RoKSksYT1NK0R9cmV0dXJuK2g+MCYmbD4wJiYoYSs9YC4ke3dWKGwpfWApLGF9KGMsbCk6''@;'; put 'put ''bmV3IGxkdChhKCtgJHtjfWUrJHtsfWApL01hdGgucG93KDEwLGwpKS50b0ZpeGVkKGwpfShsLGQsZiksW00sRD0iIl09di50b1N0cmluZygpLnNwbGl0KCIuIik7aWYoRC5tYXRjaCgvXjArJC8pJiYoYXx8aCkpcmV0dXJuIE07bGV0IFU9RC5tYXRjaCgvMCskLyk7cmV0dXJuIGgmJlU/YCR7''@;'; put 'put ''TX0uJHtELnRvU3RyaW5nKCkuc2xpY2UoMCxVLmluZGV4KX1gOnYudG9TdHJpbmcoKX0oZi50b1N0cmluZygpLGYsRmUsd2UsV2UseW4pO3JldHVybiB3bj1mdW5jdGlvbiBNZHQoYyxsLGEsZCl7bGV0IGg9YyxbZix2XT1oLnRvU3RyaW5nKCkuc3BsaXQoIi4iKTtpZihmLm1hdGNoKC9eLT8w''@;'; put 'put ''JC8pJiZhKXJldHVybiB2P2Ake2YucmVwbGFjZSgiMCIsIiIpfS4ke3Z9YDpmLnJlcGxhY2UoIjAiLCIiKTtjb25zdCBNPWw8MCYmMD09PWYuaW5kZXhPZigiLSIpO2lmKE0mJihmPWYuc2xpY2UoMSksaD1oLnNsaWNlKDEpKSxmLmxlbmd0aDxkKXtsZXQgRD1kLWYubGVuZ3RoO2ZvcihsZXQg''@;'; put 'put ''VT0wO1U8RDtVKyspaD1gMCR7aH1gfXJldHVybiBNJiYoaD1gLSR7aH1gKSxoLnRvU3RyaW5nKCl9KHduLGYsVSxEKSx3bj1mdW5jdGlvbiBFZHQoYyxsLGEsZCxoKXtsZXQgZj1kLmN1cnJlbnREZWxpbWl0ZXJzKCksdj1mLnRob3VzYW5kcztoPWh8fGYuZGVjaW1hbDtsZXQgTT1mLnRob3Vz''@;'; put 'put ''YW5kc1NpemV8fDMsRD1jLnRvU3RyaW5nKCksVT1ELnNwbGl0KCIuIilbMF0sdGU9RC5zcGxpdCgiLiIpWzFdO2NvbnN0IG9lPWw8MCYmMD09PVUuaW5kZXhPZigiLSIpO3JldHVybiBhJiYob2UmJihVPVUuc2xpY2UoMSkpLGZ1bmN0aW9uIHhkdChjLGwpe2xldCBhPVtdLGQ9MDtmb3IobGV0''@;'; put 'put ''IGg9YztoPjA7aC0tKWQ9PT1sJiYoYS51bnNoaWZ0KGgpLGQ9MCksZCsrO3JldHVybiBhfShVLmxlbmd0aCxNKS5mb3JFYWNoKCh3ZSxGZSk9PntVPVUuc2xpY2UoMCx3ZStGZSkrditVLnNsaWNlKHdlK0ZlKX0pLG9lJiYoVT1gLSR7VX1gKSksRD10ZT9VK2grdGU6VSxEfSh3bixmLG50LGEs''@;'; put 'put ''ZCksKHZlfHx6dCkmJih3bj1mdW5jdGlvbiBUZHQoYyxsKXtyZXR1cm4gYytsfSh3bixnbikpLCgkdHx8ZjwwKSYmKHduPWZ1bmN0aW9uIEFkdChjLGwsYSl7cmV0dXJuIDA9PT1sP2M6MD09K2M/Yy5yZXBsYWNlKCItIiwiIik6bD4wP2ArJHtjfWA6InNpZ24iPT09YT9jOmAoJHtjLnJlcGxh''@;'; put 'put ''Y2UoIi0iLCIiKX0pYH0od24sZixtdCkpLHdufWZ1bmN0aW9uIGhDKGMsbCl7aWYoIWMpcmV0dXJuIGw7bGV0IGE9T2JqZWN0LmtleXMoYyk7cmV0dXJuIDE9PT1hLmxlbmd0aCYmIm91dHB1dCI9PT1hWzBdP2w6Y31jb25zdCBUNT1QNmU7ZnVuY3Rpb24gSDZlKGMsbCxhKXtsZXQgZD1uZXcg''@;'; put 'put ''VDUoYy5fdmFsdWUpLGg9bDtyZXR1cm4gYS5pc051bWJybyhsKSYmKGg9bC5fdmFsdWUpLGg9bmV3IFQ1KGgpLGMuX3ZhbHVlPWQubWludXMoaCkudG9OdW1iZXIoKSxjfWNvbnN0IFY0PUp0ZSgpLFZkdD1LdGUoKSxCZHQ9KGM9Pih7bG9hZExhbmd1YWdlc0luTm9kZTpsPT5mdW5jdGlvbiBp''@;'; put 'put ''ZHQoYyxsKXtjLmZvckVhY2goYT0+e2xldCBkO3RyeXtkPWZ1bmN0aW9uIHJkdChjKXt0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBkeW5hbWljYWxseSByZXF1aXJlICInK2MrJyIuIFBsZWFzZSBjb25maWd1cmUgdGhlIGR5bmFtaWNSZXF1aXJlVGFyZ2V0cyBvci9hbmQgaWdub3JlRHlu''@;'; put 'put ''YW1pY1JlcXVpcmVzIG9wdGlvbiBvZiBAcm9sbHVwL3BsdWdpbi1jb21tb25qcyBhcHByb3ByaWF0ZWx5IGZvciB0aGlzIHJlcXVpcmUgY2FsbCB0byB3b3JrLicpfShgLi4vbGFuZ3VhZ2VzLyR7YX1gKX1jYXRjaHtjb25zb2xlLmVycm9yKGBVbmFibGUgdG8gbG9hZCAiJHthfSIuIE5vIG1h''@;'; put 'put ''dGNoaW5nIGxhbmd1YWdlIGZpbGUgZm91bmQuYCl9ZCYmbC5yZWdpc3Rlckxhbmd1YWdlKGQpfSl9KGwsYyl9KSkoTXUpLGpkdD1JNmUoKTtsZXQgeXY9KGM9Pih7Zm9ybWF0OiguLi5sKT0+ZnVuY3Rpb24gY2R0KGMsbD17fSxhKXtpZigic3RyaW5nIj09dHlwZW9mIGwmJihsPXNkdC5wYXJz''@;'; put 'put ''ZUZvcm1hdChsKSksIW9kdC52YWxpZGF0ZUZvcm1hdChsKSlyZXR1cm4iRVJST1I6IGludmFsaWQgZm9ybWF0IjtsZXQgaD1sLnByZWZpeHx8IiIsZj1sLnBvc3RmaXh8fCIiLHY9ZnVuY3Rpb24gdWR0KGMsbCxhKXtzd2l0Y2gobC5vdXRwdXQpe2Nhc2UiY3VycmVuY3kiOnJldHVybiBmdW5j''@;'; put 'put ''dGlvbiB5ZHQoYyxsLGEpe2NvbnN0IGQ9YS5jdXJyZW50Q3VycmVuY3koKTtsZXQgdixoPU9iamVjdC5hc3NpZ24oe30sbCksZj1PYmplY3QuYXNzaWduKHt9LEFrLGgpLE09IiIsRD0hIWYudG90YWxMZW5ndGh8fCEhZi5mb3JjZUF2ZXJhZ2V8fGYuYXZlcmFnZSxVPWguY3VycmVuY3lQb3Np''@;'; put 'put ''dGlvbnx8ZC5wb3NpdGlvbix0ZT1oLmN1cnJlbmN5U3ltYm9sfHxkLnN5bWJvbDtjb25zdCBvZT12b2lkIDAhPT1mLnNwYWNlU2VwYXJhdGVkQ3VycmVuY3k/Zi5zcGFjZVNlcGFyYXRlZEN1cnJlbmN5OmYuc3BhY2VTZXBhcmF0ZWQ7dm9pZCAwPT09aC5sb3dQcmVjaXNpb24mJihoLmxvd1By''@;'; put 'put ''ZWNpc2lvbj0hMSksb2UmJihNPSIgIiksImluZml4Ij09PVUmJih2PU0rdGUrTSk7bGV0IHZlPWtrKHtpbnN0YW5jZTpjLHByb3ZpZGVkRm9ybWF0Omgsc3RhdGU6YSxkZWNpbWFsU2VwYXJhdG9yOnZ9KTtyZXR1cm4icHJlZml4Ij09PVUmJih2ZT1jLl92YWx1ZTwwJiYic2lnbiI9PT1mLm5l''@;'; put 'put ''Z2F0aXZlP2AtJHtNfSR7dGV9JHt2ZS5zbGljZSgxKX1gOmMuX3ZhbHVlPjAmJmYuZm9yY2VTaWduP2ArJHtNfSR7dGV9JHt2ZS5zbGljZSgxKX1gOnRlK00rdmUpLCghVXx8InBvc3RmaXgiPT09VSkmJihNPSFmLnNwYWNlU2VwYXJhdGVkQWJicmV2aWF0aW9uJiZEPyIiOk0sdmU9dmUrTSt0''@;'; put 'put ''ZSksdmV9KGMsbD1oQyhsLGFwLmN1cnJlbnRDdXJyZW5jeURlZmF1bHRGb3JtYXQoKSksYXApO2Nhc2UicGVyY2VudCI6cmV0dXJuIGZ1bmN0aW9uIHZkdChjLGwsYSxkKXtsZXQgaD1sLnByZWZpeFN5bWJvbCxmPWtrKHtpbnN0YW5jZTpkKDEwMCpjLl92YWx1ZSkscHJvdmlkZWRGb3JtYXQ6''@;'; put 'put ''bCxzdGF0ZTphfSksdj1PYmplY3QuYXNzaWduKHt9LEFrLGwpO3JldHVybiBoP2AlJHt2LnNwYWNlU2VwYXJhdGVkPyIgIjoiIn0ke2Z9YDpgJHtmfSR7di5zcGFjZVNlcGFyYXRlZD8iICI6IiJ9JWB9KGMsbD1oQyhsLGFwLmN1cnJlbnRQZXJjZW50YWdlRGVmYXVsdEZvcm1hdCgpKSxhcCxh''@;'; put 'put ''KTtjYXNlImJ5dGUiOnJldHVybiBmdW5jdGlvbiBwZHQoYyxsLGEsZCl7bGV0IGg9bC5iYXNlfHwiYmluYXJ5IixmPU9iamVjdC5hc3NpZ24oe30sQWssbCk7Y29uc3R7YmluYXJ5U3VmZml4ZXM6dixkZWNpbWFsU3VmZml4ZXM6TX09YS5jdXJyZW50Qnl0ZXMoKTtsZXQgVT17Z2VuZXJhbDp7''@;'; put 'put ''c2NhbGU6MTAyNCxzdWZmaXhlczpNfHxiVixtYXJrZXI6ImJkIn0sYmluYXJ5OntzY2FsZToxMDI0LHN1ZmZpeGVzOnZ8fEY2ZSxtYXJrZXI6ImIifSxkZWNpbWFsOntzY2FsZToxZTMsc3VmZml4ZXM6TXx8YlYsbWFya2VyOiJkIn19W2hdLHt2YWx1ZTp0ZSxzdWZmaXg6b2V9PV9WKGMuX3Zh''@;'; put 'put ''bHVlLFUuc3VmZml4ZXMsVS5zY2FsZSk7cmV0dXJuYCR7a2soe2luc3RhbmNlOmQodGUpLHByb3ZpZGVkRm9ybWF0Omwsc3RhdGU6YSxkZWZhdWx0czphLmN1cnJlbnRCeXRlRGVmYXVsdEZvcm1hdCgpfSl9JHtmLnNwYWNlU2VwYXJhdGVkPyIgIjoiIn0ke29lfWB9KGMsbD1oQyhsLGFwLmN1''@;'; put 'put ''cnJlbnRCeXRlRGVmYXVsdEZvcm1hdCgpKSxhcCxhKTtjYXNlInRpbWUiOnJldHVybiBsPWhDKGwsYXAuY3VycmVudFRpbWVEZWZhdWx0Rm9ybWF0KCkpLGZ1bmN0aW9uIG1kdChjKXtsZXQgbD1NYXRoLmZsb29yKGMuX3ZhbHVlLzYwLzYwKSxhPU1hdGguZmxvb3IoKGMuX3ZhbHVlLTYwKmwq''@;'; put 'put ''NjApLzYwKSxkPU1hdGgucm91bmQoYy5fdmFsdWUtNjAqbCo2MC02MCphKTtyZXR1cm5gJHtsfToke2E8MTA/IjAiOiIifSR7YX06JHtkPDEwPyIwIjoiIn0ke2R9YH0oYyk7Y2FzZSJvcmRpbmFsIjpyZXR1cm4gZnVuY3Rpb24gZ2R0KGMsbCxhKXtsZXQgZD1hLmN1cnJlbnRPcmRpbmFsKCks''@;'; put 'put ''aD1PYmplY3QuYXNzaWduKHt9LEFrLGwpLGY9a2soe2luc3RhbmNlOmMscHJvdmlkZWRGb3JtYXQ6bCxzdGF0ZTphfSksdj1kKGMuX3ZhbHVlKTtyZXR1cm5gJHtmfSR7aC5zcGFjZVNlcGFyYXRlZD8iICI6IiJ9JHt2fWB9KGMsbD1oQyhsLGFwLmN1cnJlbnRPcmRpbmFsRGVmYXVsdEZvcm1h''@;'; put 'put ''dCgpKSxhcCk7ZGVmYXVsdDpyZXR1cm4ga2soe2luc3RhbmNlOmMscHJvdmlkZWRGb3JtYXQ6bCxudW1icm86YX0pfX0oYyxsLGEpO3JldHVybiB2PWZ1bmN0aW9uIGtkdChjLGwpe3JldHVybiBsK2N9KHYsaCksdj1mdW5jdGlvbiBEZHQoYyxsKXtyZXR1cm4gYytsfSh2LGYpLHZ9KC4uLmws''@;'; put 'put ''YyksZ2V0Qnl0ZVVuaXQ6KC4uLmwpPT5mdW5jdGlvbiBmZHQoYyl7bGV0IGw9UXRlLmdlbmVyYWw7cmV0dXJuIF9WKGMuX3ZhbHVlLGwuc3VmZml4ZXMsbC5zY2FsZSkuc3VmZml4fSguLi5sLGMpLGdldEJpbmFyeUJ5dGVVbml0OiguLi5sKT0+ZnVuY3Rpb24gaGR0KGMpe2xldCBsPVF0ZS5i''@;'; put 'put ''aW5hcnk7cmV0dXJuIF9WKGMuX3ZhbHVlLGwuc3VmZml4ZXMsbC5zY2FsZSkuc3VmZml4fSguLi5sLGMpLGdldERlY2ltYWxCeXRlVW5pdDooLi4ubCk9PmZ1bmN0aW9uIGRkdChjKXtsZXQgbD1RdGUuZGVjaW1hbDtyZXR1cm4gX1YoYy5fdmFsdWUsbC5zdWZmaXhlcyxsLnNjYWxlKS5zdWZm''@;'; put 'put ''aXh9KC4uLmwsYyksZm9ybWF0T3JEZWZhdWx0OmhDfSkpKE11KSxidj0oYz0+KHthZGQ6KGwsYSk9PmZ1bmN0aW9uIFJkdChjLGwsYSl7bGV0IGQ9bmV3IFQ1KGMuX3ZhbHVlKSxoPWw7cmV0dXJuIGEuaXNOdW1icm8obCkmJihoPWwuX3ZhbHVlKSxoPW5ldyBUNShoKSxjLl92YWx1ZT1kLnBs''@;'; put 'put ''dXMoaCkudG9OdW1iZXIoKSxjfShsLGEsYyksc3VidHJhY3Q6KGwsYSk9Pkg2ZShsLGEsYyksbXVsdGlwbHk6KGwsYSk9PmZ1bmN0aW9uIExkdChjLGwsYSl7bGV0IGQ9bmV3IFQ1KGMuX3ZhbHVlKSxoPWw7cmV0dXJuIGEuaXNOdW1icm8obCkmJihoPWwuX3ZhbHVlKSxoPW5ldyBUNShoKSxj''@;'; put 'put ''Ll92YWx1ZT1kLnRpbWVzKGgpLnRvTnVtYmVyKCksY30obCxhLGMpLGRpdmlkZToobCxhKT0+ZnVuY3Rpb24gT2R0KGMsbCxhKXtsZXQgZD1uZXcgVDUoYy5fdmFsdWUpLGg9bDtyZXR1cm4gYS5pc051bWJybyhsKSYmKGg9bC5fdmFsdWUpLGg9bmV3IFQ1KGgpLGMuX3ZhbHVlPWQuZGl2aWRl''@;'; put 'put ''ZEJ5KGgpLnRvTnVtYmVyKCksY30obCxhLGMpLHNldDoobCxhKT0+ZnVuY3Rpb24gUGR0KGMsbCxhKXtsZXQgZD1sO3JldHVybiBhLmlzTnVtYnJvKGwpJiYoZD1sLl92YWx1ZSksYy5fdmFsdWU9ZCxjfShsLGEsYyksZGlmZmVyZW5jZToobCxhKT0+ZnVuY3Rpb24gRmR0KGMsbCxhKXtsZXQg''@;'; put 'put ''ZD1hKGMuX3ZhbHVlKTtyZXR1cm4gSDZlKGQsbCxhKSxNYXRoLmFicyhkLl92YWx1ZSl9KGwsYSxjKSxCaWdOdW1iZXI6VDV9KSkoTXUpO2NvbnN0IHpkdD1YdGU7Y2xhc3MgTjZle2NvbnN0cnVjdG9yKGwpe3RoaXMuX3ZhbHVlPWx9Y2xvbmUoKXtyZXR1cm4gTXUodGhpcy5fdmFsdWUpfWZv''@;'; put 'put ''cm1hdChsPXt9KXtyZXR1cm4geXYuZm9ybWF0KHRoaXMsbCl9Zm9ybWF0Q3VycmVuY3kobCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBsJiYobD16ZHQucGFyc2VGb3JtYXQobCkpLChsPXl2LmZvcm1hdE9yRGVmYXVsdChsLFY0LmN1cnJlbnRDdXJyZW5jeURlZmF1bHRGb3JtYXQoKSkpLm91''@;'; put 'put ''dHB1dD0iY3VycmVuY3kiLHl2LmZvcm1hdCh0aGlzLGwpfWZvcm1hdFRpbWUobD17fSl7cmV0dXJuIGwub3V0cHV0PSJ0aW1lIix5di5mb3JtYXQodGhpcyxsKX1iaW5hcnlCeXRlVW5pdHMoKXtyZXR1cm4geXYuZ2V0QmluYXJ5Qnl0ZVVuaXQodGhpcyl9ZGVjaW1hbEJ5dGVVbml0cygpe3Jl''@;'; put 'put ''dHVybiB5di5nZXREZWNpbWFsQnl0ZVVuaXQodGhpcyl9Ynl0ZVVuaXRzKCl7cmV0dXJuIHl2LmdldEJ5dGVVbml0KHRoaXMpfWRpZmZlcmVuY2UobCl7cmV0dXJuIGJ2LmRpZmZlcmVuY2UodGhpcyxsKX1hZGQobCl7cmV0dXJuIGJ2LmFkZCh0aGlzLGwpfXN1YnRyYWN0KGwpe3JldHVybiBi''@;'; put 'put ''di5zdWJ0cmFjdCh0aGlzLGwpfW11bHRpcGx5KGwpe3JldHVybiBidi5tdWx0aXBseSh0aGlzLGwpfWRpdmlkZShsKXtyZXR1cm4gYnYuZGl2aWRlKHRoaXMsbCl9c2V0KGwpe3JldHVybiBidi5zZXQodGhpcyxWNmUobCkpfXZhbHVlKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfXZhbHVlT2YoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fdmFsdWV9fWZ1bmN0aW9uIFY2ZShjKXtsZXQgbD1jO3JldHVybiBNdS5pc051bWJybyhjKT9sPWMuX3ZhbHVlOiJzdHJpbmciPT10eXBlb2YgYz9sPU11LnVuZm9ybWF0KGMpOmlzTmFOKGMpJiYobD1OYU4pLGx9ZnVuY3Rpb24gTXUoYyl7cmV0dXJuIG5ldyBONmUoVjZl''@;'; put 'put ''KGMpKX1NdS52ZXJzaW9uPSIyLjUuMCIsTXUuaXNOdW1icm89ZnVuY3Rpb24oYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBONmV9LE11Lmxhbmd1YWdlPVY0LmN1cnJlbnRMYW5ndWFnZSxNdS5yZWdpc3Rlckxhbmd1YWdlPVY0LnJlZ2lzdGVyTGFuZ3VhZ2UsTXUuc2V0TGFuZ3VhZ2U9VjQuc2V0''@;'; put 'put ''TGFuZ3VhZ2UsTXUubGFuZ3VhZ2VzPVY0Lmxhbmd1YWdlcyxNdS5sYW5ndWFnZURhdGE9VjQubGFuZ3VhZ2VEYXRhLE11Lnplcm9Gb3JtYXQ9VjQuc2V0WmVyb0Zvcm1hdCxNdS5kZWZhdWx0Rm9ybWF0PVY0LmN1cnJlbnREZWZhdWx0cyxNdS5zZXREZWZhdWx0cz1WNC5zZXREZWZhdWx0cyxN''@;'; put 'put ''dS5kZWZhdWx0Q3VycmVuY3lGb3JtYXQ9VjQuY3VycmVudEN1cnJlbmN5RGVmYXVsdEZvcm1hdCxNdS52YWxpZGF0ZT1WZHQudmFsaWRhdGUsTXUubG9hZExhbmd1YWdlc0luTm9kZT1CZHQubG9hZExhbmd1YWdlc0luTm9kZSxNdS51bmZvcm1hdD1qZHQudW5mb3JtYXQsTXUuQmlnTnVtYmVy''@;'; put 'put ''PWJ2LkJpZ051bWJlcjt2YXIgVTY9VjF0KE11KTtmdW5jdGlvbiBCNmUoYyxsKXtpZihqMShjKSl7Y29uc3QgYT1sLm51bWVyaWNGb3JtYXQsZD1hJiZhLmN1bHR1cmV8fCItIixoPWEmJmEucGF0dGVybjtpZih0eXBlb2YgZDwidSImJiFVNi5sYW5ndWFnZXMoKVtkXSl7Y29uc3QgZj1kLnJl''@;'; put 'put ''cGxhY2UoIi0iLCIiKSx2PVU2LmFsbExhbmd1YWdlcz9VNi5hbGxMYW5ndWFnZXNbZF06VTZbZl07diYmVTYucmVnaXN0ZXJMYW5ndWFnZSh2KX1VNi5zZXRMYW5ndWFnZShkKSxjPVU2KGMpLmZvcm1hdChofHwiMCIpfXJldHVybiBjfWZ1bmN0aW9uIGVuZShjLGwsYSxkLGgsZix2KXtsZXQg''@;'; put 'put ''TT1mO2lmKGoxKE0pKXtsZXQgVT1bXTtpZihBcnJheS5pc0FycmF5KHYuY2xhc3NOYW1lKSlVPXYuY2xhc3NOYW1lO2Vsc2V7dmFyIEQ7Y29uc3QgdGU9bnVsbCE9PShEPXYuY2xhc3NOYW1lKSYmdm9pZCAwIT09RD9EOiIiO3RlLmxlbmd0aCYmKFU9dGUuc3BsaXQoIiAiKSl9TT1CNmUoTSx2''@;'; put 'put ''KSxVLmluZGV4T2YoImh0TGVmdCIpPDAmJlUuaW5kZXhPZigiaHRDZW50ZXIiKTwwJiZVLmluZGV4T2YoImh0UmlnaHQiKTwwJiZVLmluZGV4T2YoImh0SnVzdGlmeSIpPDAmJlUucHVzaCgiaHRSaWdodCIpLFUuaW5kZXhPZigiaHROdW1lcmljIik8MCYmVS5wdXNoKCJodE51bWVyaWMiKSx2''@;'; put 'put ''LmNsYXNzTmFtZT1VLmpvaW4oIiAiKSxsLmRpcj0ibHRyIn14NShjLGwsYSxkLGgsTSx2KX1mdW5jdGlvbiB0bmUoYyxsLGEsZCxoLGYsdil7eDUuYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pO2NvbnN0IEQ9di5oYXNoU3ltYm9sfHwiKiI7bGV0IFU9IiI7UWEoKHYuaGFzaExlbmd0aHx8''@;'; put 'put ''bC5pbm5lckhUTUwubGVuZ3RoKS0xLCgpPT57VSs9RH0pLFQ2KGwsVSl9ZnVuY3Rpb24gbm5lKGMsbCxhLGQsaCxmLHYpe3g1LmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxmLHZdKX1mdW5jdGlvbiBybmUoYyxsLGEsZCxoLGYsdil7eDUuYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pLGwuZGly''@;'; put 'put ''PSJsdHIifWZ1bmN0aW9uIERrKGMsbCl7bGV0IGE9YztudWxsPT1hJiYoYT0iIiksdGhpcy5hbGxvd0VtcHR5JiYiIj09PWE/bCghMCk6dGhpcy5zdHJpY3QmJnRoaXMuc291cmNlPyJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnNvdXJjZT90aGlzLnNvdXJjZShhLGo2ZShhLGwpKTpqNmUoYSxs''@;'; put 'put ''KSh0aGlzLnNvdXJjZSk6bCghMCl9ZnVuY3Rpb24gajZlKGMsbCl7Y29uc3QgYT1jO3JldHVybiBmdW5jdGlvbihkKXtsZXQgaD0hMTtmb3IobGV0IGY9MCx2PWQubGVuZ3RoO2Y8djtmKyspaWYoRkEoYSxkW2ZdKSl7aD0hMDticmVha31sKGgpfX1mdW5jdGlvbiB6NmUoYyl7Y29uc3QgbD1u''@;'; put 'put ''ZXcgRGF0ZShjKTtyZXR1cm4gaXNOYU4obmV3IERhdGUoYCR7Y31UMDA6MDBgKS5nZXREYXRlKCkpP2w6bmV3IERhdGUobC5nZXRUaW1lKCkrNmU0KmwuZ2V0VGltZXpvbmVPZmZzZXQoKSl9ZnVuY3Rpb24gQ1YoYyxsKXtjb25zdCBhPUxnZSgiZGF0ZSIsdGhpcy5pbnN0YW5jZSk7bGV0IGQ9''@;'; put 'put ''YyxoPSEwO251bGw9PWQmJihkPSIiKTtsZXQgZj0kcyhkLHRoaXMuZGF0ZUZvcm1hdHx8YS5kZWZhdWx0RGF0ZUZvcm1hdCwhMCkuaXNWYWxpZCgpLHY9JHMobmV3IERhdGUoZCkpLmlzVmFsaWQoKXx8ZjtpZih0aGlzLmFsbG93RW1wdHkmJiIiPT09ZCYmKHY9ITAsZj0hMCksdnx8KGg9ITEp''@;'; put 'put ''LCF2JiZmJiYoaD0hMCksdiYmIWYpaWYoITA9PT10aGlzLmNvcnJlY3RGb3JtYXQpe2NvbnN0IE09ZnVuY3Rpb24gcWR0KGMsbCl7Y29uc3QgYT0kcyh6NmUoYykpLGQ9JHMoYyxsKSxoPWMuc2VhcmNoKC9bQS1aYS16XS9nKT4tMTtsZXQgZjtyZXR1cm4gZj1hLmlzVmFsaWQoKSYmYS5mb3Jt''@;'; put 'put ''YXQoIngiKT09PWQuZm9ybWF0KCJ4Iil8fCFkLmlzVmFsaWQoKXx8aD9hOmQsZi5mb3JtYXQobCl9KGQsdGhpcy5kYXRlRm9ybWF0KTt0aGlzLmluc3RhbmNlLnNldERhdGFBdENlbGwodGhpcy52aXN1YWxSb3csdGhpcy52aXN1YWxDb2wsTSwiZGF0ZVZhbGlkYXRvciIpLGg9ITB9ZWxzZSBo''@;'; put 'put ''PSExO2woaCl9ZnVuY3Rpb24gaW5lKGMsbCl7RGsuYXBwbHkodGhpcyxbYyxsXSl9ZnVuY3Rpb24gYW5lKGMsbCl7bGV0IGE9YztudWxsPT1hJiYoYT0iIiksbCghKCF0aGlzLmFsbG93RW1wdHl8fCIiIT09YSl8fCIiIT09YSYmajEoYykpfWVuZS5SRU5ERVJFUl9UWVBFPSJudW1lcmljIix0''@;'; put 'put ''bmUuUkVOREVSRVJfVFlQRT0icGFzc3dvcmQiLG5uZS5SRU5ERVJFUl9UWVBFPSJzZWxlY3QiLHJuZS5SRU5ERVJFUl9UWVBFPSJ0aW1lIixEay5WQUxJREFUT1JfVFlQRT0iYXV0b2NvbXBsZXRlIixDVi5WQUxJREFUT1JfVFlQRT0iZGF0ZSIsaW5lLlZBTElEQVRPUl9UWVBFPSJkcm9wZG93''@;'; put 'put ''biIsYW5lLlZBTElEQVRPUl9UWVBFPSJudW1lcmljIjtjb25zdCBlaHQ9WyJZWVlZLU1NLUREVEhIOm1tOnNzLlNTU1oiLCJYIiwieCJdO2Z1bmN0aW9uIFNWKGMsbCl7Y29uc3QgYT10aGlzLnRpbWVGb3JtYXR8fCJoOm1tOnNzIGEiO2xldCBkPSEwLGg9YztudWxsPT09aCYmKGg9IiIpLGg9''@;'; put 'put ''L15cZHszLH0kLy50ZXN0KGgpP3BhcnNlSW50KGgsMTApOmg7Y29uc3QgZj0vXlxkezEsMn0kLy50ZXN0KGgpO2YmJihoKz0iOjAwIik7Y29uc3Qgdj0kcyhoLGVodCwhMCkuaXNWYWxpZCgpPyRzKGgpOiRzKGgsYSk7bGV0IE09di5pc1ZhbGlkKCksRD0kcyhoLGEsITApLmlzVmFsaWQoKSYm''@;'; put 'put ''IWY7aWYodGhpcy5hbGxvd0VtcHR5JiYiIj09PWgmJihNPSEwLEQ9ITApLE18fChkPSExKSwhTSYmRCYmKGQ9ITApLE0mJiFEKWlmKCEwPT09dGhpcy5jb3JyZWN0Rm9ybWF0KXtjb25zdCBVPXYuZm9ybWF0KGEpO3RoaXMuaW5zdGFuY2Uuc2V0RGF0YUF0Q2VsbCh0aGlzLnZpc3VhbFJvdyx0''@;'; put 'put ''aGlzLnZpc3VhbENvbCxVLCJ0aW1lVmFsaWRhdG9yIiksZD0hMH1lbHNlIGQ9ITE7bChkKX1mdW5jdGlvbiBVNmUoYyl7cmV0dXJuIG1vKGMpJiZ2b2lkIDAhPT1jLnZhbHVlP2MudmFsdWU6Y31mdW5jdGlvbiBaNmUoYyxsLGEpe2NvbnN0IGg9Zj0+bW8oZikmJk1hKGYua2V5KSYmTWEoZi52''@;'; put 'put ''YWx1ZSk7cmV0dXJuIGgodGhpcy5nZXRTb3VyY2VEYXRhQXRDZWxsKHRoaXMudG9QaHlzaWNhbFJvdyhsKSx0aGlzLnRvUGh5c2ljYWxDb2x1bW4oYSkpKT9oKGMpP2M6e2tleTpjLHZhbHVlOmN9OmN9U1YuVkFMSURBVE9SX1RZUEU9InRpbWUiO2NvbnN0IHJodD17Q0VMTF9UWVBFOiJhdXRv''@;'; put 'put ''Y29tcGxldGUiLGVkaXRvcjpSdGUscmVuZGVyZXI6Y0MsdmFsaWRhdG9yOkRrLHZhbHVlR2V0dGVyOlU2ZSx2YWx1ZVNldHRlcjpaNmV9LGFodD17Q0VMTF9UWVBFOiJjaGVja2JveCIsZWRpdG9yOmQ2ZSxyZW5kZXJlcjpVdGUsdmFsdWVTZXR0ZXI6ZnVuY3Rpb24gaWh0KGMsbCxhKXtjb25z''@;'; put 'put ''dHtjaGVja2VkVGVtcGxhdGU6ZCx1bmNoZWNrZWRUZW1wbGF0ZTpofT10aGlzLmdldENlbGxNZXRhKGwsYSksZj1yYyhjKSx2PWY9PT1yYyhkKSxNPWY9PT1yYyhoKTtyZXR1cm4gdnx8TT92P2Q6aDpjfX07ZnVuY3Rpb24gVzZlKGMsbCxhLGQsaCxmLHYpe2NDLmFwcGx5KHRoaXMsW2MsbCxh''@;'; put 'put ''LGQsaCxmLHZdKX1XNmUuUkVOREVSRVJfVFlQRT0iZGF0ZSI7Y29uc3Qgc2h0PXtDRUxMX1RZUEU6ImRhdGUiLGVkaXRvcjpiNmUscmVuZGVyZXI6VzZlLHZhbGlkYXRvcjpDVn0sdWh0PXtDRUxMX1RZUEU6ImRyb3Bkb3duIixlZGl0b3I6XzZlLHJlbmRlcmVyOnp0ZSx2YWxpZGF0b3I6aW5l''@;'; put 'put ''LGZpbHRlcjohMSxzdHJpY3Q6ITAsdmFsdWVHZXR0ZXI6ZnVuY3Rpb24gbGh0KGMpe3JldHVybiBVNmUuY2FsbCh0aGlzLGMpfSx2YWx1ZVNldHRlcjpmdW5jdGlvbiBjaHQoYyxsLGEsZCl7cmV0dXJuIFo2ZS5jYWxsKHRoaXMsYyxsLGEsZCl9fSxkaHQ9e0NFTExfVFlQRToiaGFuZHNvbnRh''@;'; put 'put ''YmxlIixlZGl0b3I6QXRlLHJlbmRlcmVyOld0ZX0sZmh0PXtDRUxMX1RZUEU6Im51bWVyaWMiLGVkaXRvcjp3NmUscmVuZGVyZXI6ZW5lLHZhbGlkYXRvcjphbmUsZGF0YVR5cGU6Im51bWJlciIsdmFsdWVTZXR0ZXI6ZnVuY3Rpb24gaGh0KGMpe2lmKCJzdHJpbmciPT10eXBlb2YgYyYmSGdl''@;'; put 'put ''KGMpKXtjb25zdCBsPU5nZShjKTtyZXR1cm4geWsobCk/YzpsfXJldHVybiBjfX0scGh0PXtDRUxMX1RZUEU6InBhc3N3b3JkIixlZGl0b3I6QzZlLHJlbmRlcmVyOnRuZSxjb3B5YWJsZTohMX0sZ2h0PXtDRUxMX1RZUEU6InNlbGVjdCIsZWRpdG9yOk02ZSxyZW5kZXJlcjpubmV9LG1odD17''@;'; put 'put ''Q0VMTF9UWVBFOiJ0aW1lIixlZGl0b3I6eDZlLHJlbmRlcmVyOnJuZSx2YWxpZGF0b3I6U1Z9O2Z1bmN0aW9uIGZDKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBiaHQoYyl7dmFyIGw9ZnVuY3Rpb24gX2h0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1j''@;'; put 'put ''W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1y''@;'; put 'put ''ZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6''@;'; put 'put ''ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBZNmUoYyxsLGEpe0c2ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gRzZlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmpl''@;'; put 'put ''Y3QiKX1mdW5jdGlvbiBNVihjLGwsYSl7cmV0dXJuIGMuc2V0KG9uZShjLGwpLGEpLGF9ZnVuY3Rpb24geHUoYyxsKXtyZXR1cm4gYy5nZXQob25lKGMsbCkpfWZ1bmN0aW9uIG9uZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgJDZlPW5ldyBNYXAoW1sicGx1Z2luIixmdW5jdGlvbiBBaXQoYyl7cmV0dXJuISFYQShjKX1dLFsiY2VsbC10eXBlIixTbWVdLFsi''@;'; put 'put ''ZWRpdG9yIixSZ2VdLFsicmVuZGVyZXIiLHpnZV0sWyJ2YWxpZGF0b3IiLFVnZV1dKSxLNmU9U3ltYm9sKCJtYWluU2V0dGluZyIpLHhWPVtdO2xldCBfdj1udWxsO3ZhciBOdT1uZXcgV2Vha01hcCx3dj1uZXcgV2Vha01hcCxYNmU9bmV3IFdlYWtTZXQ7Y2xhc3MgTXN7c3RhdGljIGdldCBQ''@;'; put 'put ''TFVHSU5fS0VZKCl7cmV0dXJuImJhc2UifXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuW3RoaXMuUExVR0lOX0tFWV19c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue319c3RhdGljIGdldCBTRVRUSU5HU19WQUxJREFUT1JTKCl7cmV0dXJuIG51bGx9Y29uc3Ry''@;'; put 'put ''dWN0b3IobCl7KGZ1bmN0aW9uIHlodChjLGwpe0c2ZShjLGwpLGwuYWRkKGMpfSkodGhpcyxYNmUpLFk2ZSh0aGlzLE51LG51bGwpLGZDKHRoaXMsImV2ZW50TWFuYWdlciIsbmV3IFZmKHRoaXMpKSxmQyh0aGlzLCJwbHVnaW5OYW1lIixudWxsKSxmQyh0aGlzLCJwbHVnaW5zSW5pdGlhbGl6''@;'; put 'put ''ZWRDYWxsYmFja3MiLFtdKSxmQyh0aGlzLCJpc1BsdWdpbnNSZWFkeSIsITEpLGZDKHRoaXMsImVuYWJsZWQiLCExKSxmQyh0aGlzLCJpbml0aWFsaXplZCIsITEpLFk2ZSh0aGlzLHd2LHt9KSxTNCh0aGlzLCJob3QiLGwse3dyaXRhYmxlOiExfSksX3Y9bnVsbCx0aGlzLmhvdC5hZGRIb29r''@;'; put 'put ''KCJhZnRlclBsdWdpbnNJbml0aWFsaXplZCIsKCk9PnRoaXMub25BZnRlclBsdWdpbnNJbml0aWFsaXplZCgpKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclVwZGF0ZVNldHRpbmdzIixhPT50aGlzLm9uVXBkYXRlU2V0dGluZ3MoYSkpLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZUluaXQiLCgp''@;'; put 'put ''PT50aGlzLmluaXQoKSl9aW5pdCgpe3RoaXMucGx1Z2luTmFtZT10aGlzLmhvdC5nZXRQbHVnaW5OYW1lKHRoaXMpLHRoaXMudXBkYXRlUGx1Z2luU2V0dGluZ3ModGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0aGlzLmNvbnN0cnVjdG9yLlBMVUdJTl9LRVldKTtjb25zdCBsPXRoaXMuY29uc3Ry''@;'; put 'put ''dWN0b3IuUExVR0lOX0RFUFMsYT1BcnJheS5pc0FycmF5KGwpP2w6W107aWYoYS5sZW5ndGg+MCl7Y29uc3QgaD1bXTtpZihhLmZvckVhY2goZj0+e2NvbnN0W3YsTV09Zi5zcGxpdCgiOiIpO2lmKCEkNmUuaGFzKHYpKXRocm93IG5ldyBFcnJvcihgVW5rbm93biBwbHVnaW4gZGVwZW5kZW5j''@;'; put 'put ''eSB0eXBlICIke3Z9IiB3YXMgZm91bmQuYCk7JDZlLmdldCh2KShNKXx8aC5wdXNoKGAgLSAke019ICgke3Z9KWApfSksaC5sZW5ndGg+MCl7Y29uc3QgZj1bYFRoZSAke3RoaXMucGx1Z2luTmFtZX0gcGx1Z2luIHJlcXVpcmVzIHRoZSBmb2xsb3dpbmcgbW9kdWxlczpcbmAsYCR7aC5qb2lu''@;'; put 'put ''KCJcbiIpfVxuYF0uam9pbigiIik7eFYucHVzaChmKX19aWYoX3Z8fChfdj1BSigpKSxfdi5pbmRleE9mKHRoaXMucGx1Z2luTmFtZSk+PTAmJl92LnNwbGljZShfdi5pbmRleE9mKHRoaXMucGx1Z2luTmFtZSksMSksdGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyUGx1Z2luc0luaXRpYWxp''@;'; put 'put ''emVkIiwoKT0+e3RoaXMuaXNFbmFibGVkJiZ0aGlzLmlzRW5hYmxlZCgpJiZ0aGlzLmVuYWJsZVBsdWdpbigpfSksMD09PV92Lmxlbmd0aCl7aWYoeFYubGVuZ3RoPjApe2NvbnN0IGg9W2Ake3hWLmpvaW4oIlxuIil9XG5gLCJZb3UgaGF2ZSB0byBpbXBvcnQgYW5kIHJlZ2lzdGVyIHRoZW0g''@;'; put 'put ''bWFudWFsbHkuIl0uam9pbigiIik7dGhyb3cgeFYubGVuZ3RoPTAsbmV3IEVycm9yKGgpfXRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclBsdWdpbnNJbml0aWFsaXplZCIpfXRoaXMuaW5pdGlhbGl6ZWQ9ITB9ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkPSEwfWRpc2FibGVQbHVnaW4oKXt2''@;'; put 'put ''YXIgbDtudWxsPT09KGw9dGhpcy5ldmVudE1hbmFnZXIpfHx2b2lkIDA9PT1sfHxsLmNsZWFyKCksdGhpcy5jbGVhckhvb2tzKCksdGhpcy5lbmFibGVkPSExfWdldFNldHRpbmcobCl7dmFyIGE9dGhpcztjb25zdCBkPXRoaXMuY29uc3RydWN0b3IuREVGQVVMVF9TRVRUSU5HUyxoPXRoaXMu''@;'; put 'put ''Y29uc3RydWN0b3IuU0VUVElOR1NfVkFMSURBVE9SUztpZih2b2lkIDA9PT1sKXJldHVybiBtbyh4dShOdSx0aGlzKSk/SEEoeHUoTnUsdGhpcyksZCk6eHUoTnUsdGhpcyk7bGV0IGY7aWYoKEFycmF5LmlzQXJyYXkoeHUoTnUsdGhpcykpfHxtbyh4dShOdSx0aGlzKSkpJiZkW0s2ZV09PT1s''@;'; put 'put ''KWlmKEFycmF5LmlzQXJyYXkoeHUoTnUsdGhpcykpKWY9eHUoTnUsdGhpcyk7ZWxzZXt2YXIgdjtmPW51bGwhPT0odj14dShOdSx0aGlzKVtsXSkmJnZvaWQgMCE9PXY/djpkW2xdfWVsc2UgaWYobC5pbmNsdWRlcygiLiIpKXtjb25zdCBNPXFIKHh1KE51LHRoaXMpLGwpLEQ9cUgoZCxsKTtm''@;'; put 'put ''PW1vKE0pP0hBKE0sRCk6dm9pZCAwIT09TT9NOkR9ZWxzZSBmPW1vKHh1KE51LHRoaXMpKT9IQSh4dShOdSx0aGlzKSxkKVtsXTpkW2xdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBmJiZoJiYib2JqZWN0Ij09dHlwZW9mIGgpe2NvbnN0IE09aFtsXTtpZihNJiYiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''TSlyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIEQ9YXJndW1lbnRzLmxlbmd0aCxVPW5ldyBBcnJheShEKSx0ZT0wO3RlPEQ7dGUrKylVW3RlXT1hcmd1bWVudHNbdGVdO2NvbnN0IG9lPWYoLi4uVSk7aWYoITEhPT1NKG9lKSlyZXR1cm4gb2U7e2NvbnN0IHdlPVUubWFwKFdlPT4ic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mIFdlP2AiJHtXZX0iYDoiIikuam9pbigiLCAiKTtvcyhgJHthLnBsdWdpbk5hbWV9IFBsdWdpbjogIiR7bH0iIGZ1bmN0aW9uICgke1UubGVuZ3RoPjA/d2U6IiJ9KSByZXN1bHQgICAgICAgICAgICAgICAgaXMgbm90IHZhbGlkIGFuZCB3aWxsIGJlIGlnbm9yZWQuYCl9fX1y''@;'; put 'put ''ZXR1cm4gZn11cGRhdGVQbHVnaW5TZXR0aW5ncyhsKXtjb25zdCBhPXRoaXMuY29uc3RydWN0b3IuU0VUVElOR1NfVkFMSURBVE9SUztyZXR1cm4gYSYmImZ1bmN0aW9uIj09dHlwZW9mIGEmJiJvYmplY3QiIT10eXBlb2YgbD8hMT09PWEobCk/dm9pZCBvcyhgJHt0aGlzLnBsdWdpbk5hbWV9''@;'; put 'put ''IFBsdWdpbjogb3B0aW9uIGlzIG5vdCB2YWxpZCBhbmQgaXQgd2lsbCBiZSBpZ25vcmVkLmApOihNVihOdSx0aGlzLGwpLHh1KE51LHRoaXMpKTphJiYib2JqZWN0Ij09dHlwZW9mIGEmJiJvYmplY3QiPT10eXBlb2YgbD8oKG51bGw9PT14dShOdSx0aGlzKXx8Im9iamVjdCIhPXR5cGVvZiB4''@;'; put 'put ''dShOdSx0aGlzKSkmJk1WKE51LHRoaXMsey4uLnRoaXMuY29uc3RydWN0b3IuREVGQVVMVF9TRVRUSU5HU30pLE9iamVjdC5rZXlzKGEpLmZvckVhY2goZD0+e2lmKCEoZCBpbiBsKSlyZXR1cm47Y29uc3QgaD1hW2RdOyExIT09KCFofHxoKGxbZF0pKT94dShOdSx0aGlzKVtkXT1sW2RdOm9z''@;'; put 'put ''KGAke3RoaXMucGx1Z2luTmFtZX0gUGx1Z2luOiAiJHtkfSIgb3B0aW9uIGlzIG5vdCB2YWxpZCBhbmQgaXQgd2lsbCBiZSBpZ25vcmVkLmApfSkseHUoTnUsdGhpcykpOihNVihOdSx0aGlzLGwpLGwpfWFkZEhvb2sobCxhLGQpe3h1KHd2LHRoaXMpW2xdPXh1KHd2LHRoaXMpW2xdfHxbXTtj''@;'; put 'put ''b25zdCBoPXh1KHd2LHRoaXMpW2xdO3RoaXMuaG90LmFkZEhvb2sobCxhLGQpLGgucHVzaChhKSx4dSh3dix0aGlzKVtsXT1ofXJlbW92ZUhvb2tzKGwpe0tuKHh1KHd2LHRoaXMpW2xdfHxbXSxhPT57dGhpcy5ob3QucmVtb3ZlSG9vayhsLGEpfSl9Y2xlYXJIb29rcygpe2NvbnN0IGw9eHUo''@;'; put 'put ''d3YsdGhpcyk7YXMobCwoYSxkKT0+dGhpcy5yZW1vdmVIb29rcyhkKSksbC5sZW5ndGg9MH1jYWxsT25QbHVnaW5zUmVhZHkobCl7dGhpcy5pc1BsdWdpbnNSZWFkeT9sKCk6dGhpcy5wbHVnaW5zSW5pdGlhbGl6ZWRDYWxsYmFja3MucHVzaChsKX1vbkFmdGVyUGx1Z2luc0luaXRpYWxpemVk''@;'; put 'put ''KCl7S24odGhpcy5wbHVnaW5zSW5pdGlhbGl6ZWRDYWxsYmFja3MsbD0+bCgpKSx0aGlzLnBsdWdpbnNJbml0aWFsaXplZENhbGxiYWNrcy5sZW5ndGg9MCx0aGlzLmlzUGx1Z2luc1JlYWR5PSEwfW9uVXBkYXRlU2V0dGluZ3MobCl7Y29uc3QgYT1vbmUoWDZlLHRoaXMsQ2h0KS5jYWxsKHRo''@;'; put 'put ''aXMsbCk7dGhpcy5pc0VuYWJsZWQmJih0aGlzLmVuYWJsZWQmJiF0aGlzLmlzRW5hYmxlZCgpJiZ0aGlzLmRpc2FibGVQbHVnaW4oKSwhdGhpcy5lbmFibGVkJiZ0aGlzLmlzRW5hYmxlZCgpJiZ0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlZCYmdGhpcy5pc0VuYWJsZWQoKSYmYSYm''@;'; put 'put ''KHRoaXMudXBkYXRlUGx1Z2luU2V0dGluZ3MobFt0aGlzLmNvbnN0cnVjdG9yLlBMVUdJTl9LRVldKSx0aGlzLnVwZGF0ZVBsdWdpbihsKSkpfXVwZGF0ZVBsdWdpbigpe31kZXN0cm95KCl7dmFyIGw7TVYoTnUsdGhpcyxudWxsKSxudWxsPT09KGw9dGhpcy5ldmVudE1hbmFnZXIpfHx2b2lk''@;'; put 'put ''IDA9PT1sfHxsLmRlc3Ryb3koKSx0aGlzLmNsZWFySG9va3MoKSxhcyh0aGlzLChhLGQpPT57ImhvdCIhPT1kJiYodGhpc1tkXT1udWxsKX0pLGRlbGV0ZSB0aGlzLnQsZGVsZXRlIHRoaXMuaG90fX1mdW5jdGlvbiBDaHQoYyl7aWYoIWMpcmV0dXJuITE7Y29uc3QgbD10aGlzLmNvbnN0cnVj''@;'; put 'put ''dG9yLlNFVFRJTkdfS0VZUztpZigiYm9vbGVhbiI9PXR5cGVvZiBsKXJldHVybiBsO2ZvcihsZXQgYT0wO2E8bC5sZW5ndGg7YSsrKWlmKHZvaWQgMCE9PWNbbFthXV0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gQ3YoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFNodChjKXt2YXIgbD1m''@;'; put 'put ''dW5jdGlvbiBNaHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IHNuZT1jbGFzcyB4aHR7Y29uc3RydWN0b3IobCl7Q3YodGhpcywiaG90IixudWxsKSxDdih0aGlzLCJjb250YWluZXIiLG51bGwpLEN2KHRoaXMsImlu''@;'; put 'put ''amVjdGVkIiwhMSksQ3YodGhpcywicm93cyIsW10pLEN2KHRoaXMsImNvbHVtbnMiLFtdKSxDdih0aGlzLCJzYW1wbGVzIixudWxsKSxDdih0aGlzLCJzZXR0aW5ncyIse3VzZUhlYWRlcnM6ITB9KSx0aGlzLmhvdD1sfWFkZFJvdyhsLGEpe2lmKHRoaXMuY29sdW1ucy5sZW5ndGgpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJEb2Vzbid0IHN1cHBvcnQgbXVsdGktZGltZW5zaW9uYWwgdGFibGUiKTt0aGlzLnJvd3MubGVuZ3RofHwodGhpcy5jb250YWluZXI9dGhpcy5jcmVhdGVDb250YWluZXIodGhpcy5ob3Qucm9vdEVsZW1lbnQuY2xhc3NOYW1lKSk7Y29uc3QgZD17cm93Omx9O3RoaXMucm93''@;'; put 'put ''cy5wdXNoKGQpLHRoaXMuc2FtcGxlcz1hLHRoaXMudGFibGU9dGhpcy5jcmVhdGVUYWJsZSh0aGlzLmhvdC50YWJsZS5jbGFzc05hbWUpLHRoaXMudGFibGUuY29sR3JvdXAuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb2xHcm91cHNDb2wobCkpLHRoaXMudGFibGUudHIuYXBwZW5kQ2hpbGQo''@;'; put 'put ''dGhpcy5jcmVhdGVSb3cobCkpLHRoaXMuY29udGFpbmVyLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnRhYmxlLmZyYWdtZW50KSxkLnRhYmxlPXRoaXMudGFibGUudGFibGV9YWRkQ29sdW1uSGVhZGVyc1JvdyhsKXtpZihudWxsIT10aGlzLmhvdC5nZXRDb2xIZWFkZXIoMCkpe2NvbnN0''@;'; put 'put ''IGQ9e3JvdzotMX07dGhpcy5yb3dzLnB1c2goZCksdGhpcy5jb250YWluZXI9dGhpcy5jcmVhdGVDb250YWluZXIodGhpcy5ob3Qucm9vdEVsZW1lbnQuY2xhc3NOYW1lKSx0aGlzLnNhbXBsZXM9bCx0aGlzLnRhYmxlPXRoaXMuY3JlYXRlVGFibGUodGhpcy5ob3QudGFibGUuY2xhc3NOYW1l''@;'; put 'put ''KSx0aGlzLnRhYmxlLmNvbEdyb3VwLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29sR3JvdXBzQ29sKCkpLHRoaXMuYXBwZW5kQ29sdW1uSGVhZGVyc1JvdygpLHRoaXMuY29udGFpbmVyLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnRhYmxlLmZyYWdtZW50KSxkLnRhYmxlPXRoaXMudGFi''@;'; put 'put ''bGUudGFibGV9fWFkZENvbHVtbihsLGEpe2lmKHRoaXMucm93cy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJEb2Vzbid0IHN1cHBvcnQgbXVsdGktZGltZW5zaW9uYWwgdGFibGUiKTt0aGlzLmNvbHVtbnMubGVuZ3RofHwodGhpcy5jb250YWluZXI9dGhpcy5jcmVhdGVDb250YWluZXIodGhp''@;'; put 'put ''cy5ob3Qucm9vdEVsZW1lbnQuY2xhc3NOYW1lKSk7Y29uc3QgZD17Y29sOmx9O3RoaXMuY29sdW1ucy5wdXNoKGQpLHRoaXMuc2FtcGxlcz1hLHRoaXMudGFibGU9dGhpcy5jcmVhdGVUYWJsZSh0aGlzLmhvdC50YWJsZS5jbGFzc05hbWUpLHRoaXMuZ2V0U2V0dGluZygidXNlSGVhZGVycyIp''@;'; put 'put ''JiZudWxsIT09dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKGwpJiZ0aGlzLmhvdC52aWV3LmFwcGVuZENvbEhlYWRlcihsLHRoaXMudGFibGUudGgsdm9pZCAwLC0xKSx0aGlzLnRhYmxlLnRCb2R5LmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29sKGwpKSx0aGlzLmNvbnRhaW5lci5jb250YWluZXIu''@;'; put 'put ''YXBwZW5kQ2hpbGQodGhpcy50YWJsZS5mcmFnbWVudCksZC50YWJsZT10aGlzLnRhYmxlLnRhYmxlfWdldEhlaWdodHMobCl7dGhpcy5pbmplY3RlZHx8dGhpcy5pbmplY3RUYWJsZSgpLEtuKHRoaXMucm93cyxhPT57Y29uc3R7aGVpZ2h0OmR9PWEudGFibGUuZ2V0Qm91bmRpbmdDbGllbnRS''@;'; put 'put ''ZWN0KCk7bChhLnJvdyxNYXRoLmNlaWwoZCkpfSl9Z2V0V2lkdGhzKGwpe3RoaXMuaW5qZWN0ZWR8fHRoaXMuaW5qZWN0VGFibGUoKSxLbih0aGlzLmNvbHVtbnMsYT0+e2NvbnN0e3dpZHRoOmR9PWEudGFibGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bChhLmNvbCxNYXRoLmNlaWwoZCkp''@;'; put 'put ''fSl9c2V0U2V0dGluZ3MobCl7dGhpcy5zZXR0aW5ncz1sfXNldFNldHRpbmcobCxhKXt0aGlzLnNldHRpbmdzfHwodGhpcy5zZXR0aW5ncz17fSksdGhpcy5zZXR0aW5nc1tsXT1hfWdldFNldHRpbmdzKCl7cmV0dXJuIHRoaXMuc2V0dGluZ3N9Z2V0U2V0dGluZyhsKXtyZXR1cm4gdGhpcy5z''@;'; put 'put ''ZXR0aW5ncz90aGlzLnNldHRpbmdzW2xdOm51bGx9Y3JlYXRlQ29sR3JvdXBzQ29sKGwpe2NvbnN0IGE9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtyZXR1cm4gdGhpcy5ob3QuaGFzUm93SGVhZGVycygpJiZhLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRl''@;'; put 'put ''Q29sRWxlbWVudCgtMSwtMSkpLHRoaXMuc2FtcGxlcy5mb3JFYWNoKGQ9PntLbihkLnN0cmluZ3MsaD0+e2EuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb2xFbGVtZW50KGguY29sLGwpKX0pfSksYX1jcmVhdGVSb3cobCl7Y29uc3R7cm9vdERvY3VtZW50OmF9PXRoaXMuaG90LGQ9YS5jcmVh''@;'; put 'put ''dGVEb2N1bWVudEZyYWdtZW50KCksaD1hLmNyZWF0ZUVsZW1lbnQoInRoIik7cmV0dXJuIHRoaXMuaG90Lmhhc1Jvd0hlYWRlcnMoKSYmKHRoaXMuaG90LnZpZXcuYXBwZW5kUm93SGVhZGVyKGwsaCksZC5hcHBlbmRDaGlsZChoKSksdGhpcy5zYW1wbGVzLmZvckVhY2goZj0+e0tuKGYuc3Ry''@;'; put 'put ''aW5ncyx2PT57Y29uc3QgTT12LmNvbCxEPXRoaXMuaG90LmdldENlbGxNZXRhKGwsTSksVT10aGlzLmhvdC5nZXRDZWxsUmVuZGVyZXIoRCksdGU9YS5jcmVhdGVFbGVtZW50KCJ0ZCIpO3RlLnNldEF0dHJpYnV0ZSgiZ2hvc3QtdGFibGUiLDEpLFUodGhpcy5ob3QsdGUsbCxNLHRoaXMuaG90''@;'; put 'put ''LmNvbFRvUHJvcChNKSx2LnZhbHVlLEQpLGQuYXBwZW5kQ2hpbGQodGUpfSl9KSxkfWFwcGVuZENvbHVtbkhlYWRlcnNSb3coKXtjb25zdHtyb290RG9jdW1lbnQ6bH09dGhpcy5ob3QsYT1sLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxkPVtdO2lmKHRoaXMuaG90Lmhhc1Jvd0hlYWRlcnMo''@;'; put 'put ''KSl7Y29uc3QgaD1sLmNyZWF0ZUVsZW1lbnQoInRoIik7ZC5wdXNoKFstMSxoXSksYS5hcHBlbmRDaGlsZChoKX10aGlzLnNhbXBsZXMuZm9yRWFjaChoPT57S24oaC5zdHJpbmdzLGY9Pntjb25zdCB2PWYuY29sLE09bC5jcmVhdGVFbGVtZW50KCJ0aCIpO2QucHVzaChbdixNXSksYS5hcHBl''@;'; put 'put ''bmRDaGlsZChNKX0pfSksdGhpcy50YWJsZS50SGVhZC5hcHBlbmRDaGlsZChhKSxLbihkLGg9Pntjb25zdFtmLHZdPWg7dGhpcy5ob3Qudmlldy5hcHBlbmRDb2xIZWFkZXIoZix2KX0pfWNyZWF0ZUNvbChsKXtjb25zdHtyb290RG9jdW1lbnQ6YX09dGhpcy5ob3QsZD1hLmNyZWF0ZURvY3Vt''@;'; put 'put ''ZW50RnJhZ21lbnQoKTtyZXR1cm4gdGhpcy5zYW1wbGVzLmZvckVhY2goaD0+e0tuKGguc3RyaW5ncyxmPT57Y29uc3Qgdj1mLnJvdyxNPXRoaXMuaG90LmdldENlbGxNZXRhKHYsbCksRD10aGlzLmhvdC5nZXRDZWxsUmVuZGVyZXIoTSksVT1hLmNyZWF0ZUVsZW1lbnQoInRkIiksdGU9YS5j''@;'; put 'put ''cmVhdGVFbGVtZW50KCJ0ciIpO1Uuc2V0QXR0cmlidXRlKCJnaG9zdC10YWJsZSIsMSksRCh0aGlzLmhvdCxVLHYsbCx0aGlzLmhvdC5jb2xUb1Byb3AobCksZi52YWx1ZSxNKSx0ZS5hcHBlbmRDaGlsZChVKSxkLmFwcGVuZENoaWxkKHRlKX0pfSksZH1jbGVhbigpe3RoaXMucm93cy5sZW5n''@;'; put 'put ''dGg9MCx0aGlzLnJvd3NbLTFdPXZvaWQgMCx0aGlzLmNvbHVtbnMubGVuZ3RoPTAsdGhpcy5zYW1wbGVzJiZ0aGlzLnNhbXBsZXMuY2xlYXIoKSx0aGlzLnNhbXBsZXM9bnVsbCx0aGlzLnJlbW92ZVRhYmxlKCl9aW5qZWN0VGFibGUoKXt0aGlzLmluamVjdGVkfHwoKChhcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbCl8fHRoaXMuaG90LnJvb3RFbGVtZW50KS5hcHBlbmRDaGlsZCh0aGlzLmNvbnRhaW5lci5mcmFnbWVudCksdGhpcy5pbmplY3RlZD0hMCl9cmVtb3ZlVGFibGUoKXt0aGlzLmluamVjdGVkJiZ0aGlzLmNvbnRh''@;'; put 'put ''aW5lci5jb250YWluZXIucGFyZW50Tm9kZSYmKHRoaXMuY29udGFpbmVyLmNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyLmNvbnRhaW5lciksdGhpcy5jb250YWluZXI9bnVsbCx0aGlzLmluamVjdGVkPSExKX1jcmVhdGVDb2xFbGVtZW50KGwsYSl7Y29u''@;'; put 'put ''c3QgZD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY29sIik7bGV0IGg9MDthPj0wJiZsPj0wJiYoaD10aGlzLmhvdC5nZXRDZWxsTWV0YShhLGwpLmNvbHNwYW4pO2xldCBmPXRoaXMuaG90LmdldENvbFdpZHRoKGwpO2lmKGg+MSlmb3IobGV0IHY9bCsxO3Y8bCtoO3Yr''@;'; put 'put ''KylmKz10aGlzLmhvdC5nZXRDb2xXaWR0aCh2KTtyZXR1cm4gZC5zdHlsZS53aWR0aD1gJHtmfXB4YCxkfWNyZWF0ZVRhYmxlKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiIiO2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlz''@;'; put 'put ''LmhvdCxkPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGg9YS5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpLGY9YS5jcmVhdGVFbGVtZW50KCJ0aGVhZCIpLHY9YS5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpLE09YS5jcmVhdGVFbGVtZW50KCJjb2xncm91cCIpLEQ9YS5jcmVhdGVFbGVtZW50KCJ0''@;'; put 'put ''ciIpLFU9YS5jcmVhdGVFbGVtZW50KCJ0aCIpO3JldHVybiB0aGlzLmlzVmVydGljYWwoKSYmaC5hcHBlbmRDaGlsZChNKSx0aGlzLmlzSG9yaXpvbnRhbCgpJiYoRC5hcHBlbmRDaGlsZChVKSxmLmFwcGVuZENoaWxkKEQpLGguc3R5bGUudGFibGVMYXlvdXQ9ImF1dG8iLGguc3R5bGUud2lk''@;'; put 'put ''dGg9ImF1dG8iKSxoLmFwcGVuZENoaWxkKGYpLHRoaXMuaXNWZXJ0aWNhbCgpJiZ2LmFwcGVuZENoaWxkKEQpLGguYXBwZW5kQ2hpbGQodiksaWkoaCxsKSxkLmFwcGVuZENoaWxkKGgpLHtmcmFnbWVudDpkLHRhYmxlOmgsdEhlYWQ6Zix0Qm9keTp2LGNvbEdyb3VwOk0sdHI6RCx0aDpVfX1j''@;'; put 'put ''cmVhdGVDb250YWluZXIoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06IiI7Y29uc3R7cm9vdERvY3VtZW50OmF9PXRoaXMuaG90LGQ9YS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaD1hLmNyZWF0ZUVsZW1lbnQoImRpdiIp''@;'; put 'put ''O3JldHVybiBpaShoLGBodEdob3N0VGFibGUgaHRBdXRvU2l6ZSAke2wudHJpbSgpfWApLGQuYXBwZW5kQ2hpbGQoaCkse2ZyYWdtZW50OmQsY29udGFpbmVyOmh9fWlzVmVydGljYWwoKXtyZXR1cm4hKCF0aGlzLnJvd3MubGVuZ3RofHx0aGlzLmNvbHVtbnMubGVuZ3RoKX1pc0hvcml6b250''@;'; put 'put ''YWwoKXtyZXR1cm4hKCF0aGlzLmNvbHVtbnMubGVuZ3RofHx0aGlzLnJvd3MubGVuZ3RoKX19O2Z1bmN0aW9uIElrKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBFaHQoYyl7dmFyIGw9ZnVuY3Rpb24gVGh0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1j''@;'; put 'put ''W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1y''@;'; put 'put ''ZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6''@;'; put 'put ''ITB9KTpjW2xdPWEsY31jbGFzcyBsbmV7c3RhdGljIGdldCBTQU1QTEVfQ09VTlQoKXtyZXR1cm4gM31jb25zdHJ1Y3RvcihsKXtJayh0aGlzLCJzYW1wbGVzIixudWxsKSxJayh0aGlzLCJkYXRhRmFjdG9yeSIsbnVsbCksSWsodGhpcywiY3VzdG9tU2FtcGxlQ291bnQiLG51bGwpLElrKHRo''@;'; put 'put ''aXMsImFsbG93RHVwbGljYXRlcyIsITEpLElrKHRoaXMsImluY2x1ZGVIaWRkZW4iLCExKSx0aGlzLmRhdGFGYWN0b3J5PWx9Z2V0U2FtcGxlQ291bnQoKXtyZXR1cm4gdGhpcy5jdXN0b21TYW1wbGVDb3VudD90aGlzLmN1c3RvbVNhbXBsZUNvdW50OmxuZS5TQU1QTEVfQ09VTlR9c2V0U2Ft''@;'; put 'put ''cGxlQ291bnQobCl7dGhpcy5jdXN0b21TYW1wbGVDb3VudD1sfXNldEFsbG93RHVwbGljYXRlcyhsKXt0aGlzLmFsbG93RHVwbGljYXRlcz1sfXNldEluY2x1ZGVIaWRkZW4obCl7dGhpcy5pbmNsdWRlSGlkZGVuPWx9Z2VuZXJhdGVSb3dTYW1wbGVzKGwsYSl7cmV0dXJuIHRoaXMuZ2VuZXJh''@;'; put 'put ''dGVTYW1wbGVzKCJyb3ciLGEsbCl9Z2VuZXJhdGVDb2x1bW5TYW1wbGVzKGwsYSl7cmV0dXJuIHRoaXMuZ2VuZXJhdGVTYW1wbGVzKCJjb2wiLGEsbCl9Z2VuZXJhdGVTYW1wbGVzKGwsYSxkKXtjb25zdCBoPW5ldyBNYXAse2Zyb206Zix0bzp2fT0ibnVtYmVyIj09dHlwZW9mIGQ/e2Zyb206''@;'; put 'put ''ZCx0bzpkfTpkO3JldHVybiBRYShmLHYsTT0+e2NvbnN0IEQ9dGhpcy5nZW5lcmF0ZVNhbXBsZShsLGEsTSk7aC5zZXQoTSxEKX0pLGh9Z2VuZXJhdGVTYW1wbGUobCxhLGQpe2lmKCJyb3ciIT09bCYmImNvbCIhPT1sKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc2FtcGxlIHR5cGUi''@;'; put 'put ''KTtjb25zdCBoPW5ldyBNYXAsZj0icm93Ij09PWw/ImNvbCI6InJvdyIsdj1bXTtyZXR1cm4gUWEoYS5mcm9tLGEudG8sTT0+e2NvbnN0IEQ9InJvdyI9PT1sP3RoaXMuZGF0YUZhY3RvcnkoZCxNLHRoaXMpOnRoaXMuZGF0YUZhY3RvcnkoTSxkLHRoaXMpO2lmKCExPT09RClyZXR1cm47Y29u''@;'; put 'put ''c3R7dmFsdWU6VSxidW5kbGVTZWVkOnRlfT1ELG9lPSJzdHJpbmciPT10eXBlb2YgdGUmJnRlLmxlbmd0aD4wO2xldCB2ZTt2ZT1vZT90ZTptbyhVKT9gJHtPYmplY3Qua2V5cyhVKS5sZW5ndGh9YDpBcnJheS5pc0FycmF5KFUpP2Ake1UubGVuZ3RofWA6YCR7cmMoVSkubGVuZ3RofWAsaC5o''@;'; put 'put ''YXModmUpfHxoLnNldCh2ZSx7bmVlZGVkOnRoaXMuZ2V0U2FtcGxlQ291bnQoKSxzdHJpbmdzOltdfSk7Y29uc3Qgd2U9aC5nZXQodmUpO3dlLm5lZWRlZCYmKCEodi5pbmRleE9mKFUpPi0xKXx8dGhpcy5hbGxvd0R1cGxpY2F0ZXN8fG9lKSYmKHdlLnN0cmluZ3MucHVzaCh7dmFsdWU6VSxb''@;'; put 'put ''Zl06TX0pLHYucHVzaChVKSx3ZS5uZWVkZWQtPTEpfSksaH19Y29uc3QgcTZlPWxuZTtmdW5jdGlvbiBjbmUoYyxsLGEpe0o2ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gSjZlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNh''@;'; put 'put ''bWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBSayhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24ga2h0KGMpe3ZhciBsPWZ1bmN0aW9uIERodChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9Qcmlt''@;'; put 'put ''aXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmci''@;'; put 'put ''PT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9''@;'; put 'put ''ZnVuY3Rpb24gWjYoYyxsKXtyZXR1cm4gYy5nZXQoTWgoYyxsKSl9ZnVuY3Rpb24gRVYoYyxsLGEpe3JldHVybiBjLnNldChNaChjLGwpLGEpLGF9ZnVuY3Rpb24gTWgoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfUFhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiKTtjb25zdCB1bmU9ImF1dG9Db2x1bW5TaXplIjt2YXIgZG5l''@;'; put 'put ''PW5ldyBXZWFrTWFwLHBDPW5ldyBXZWFrTWFwLGdDPW5ldyBXZWFrTWFwLFAyPW5ldyBXZWFrU2V0O2NsYXNzIExrIGV4dGVuZHMgTXN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIHVuZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxMH1zdGF0aWMgZ2V0IFNF''@;'; put 'put ''VFRJTkdfS0VZUygpe3JldHVybiEwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybnt1c2VIZWFkZXJzOiEwLHNhbXBsaW5nUmF0aW86bnVsbCxhbGxvd1NhbXBsZUR1cGxpY2F0ZXM6ITF9fXN0YXRpYyBnZXQgQ0FMQ1VMQVRJT05fU1RFUCgpe3JldHVybiA1MH1zdGF0aWMg''@;'; put 'put ''Z2V0IFNZTkNfQ0FMQ1VMQVRJT05fTElNSVQoKXtyZXR1cm4gNTB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksZnVuY3Rpb24gQWh0KGMsbCl7SjZlKGMsbCksbC5hZGQoYyl9KHRoaXMsUDIpLFJrKHRoaXMsImdob3N0VGFibGUiLG5ldyBzbmUodGhpcy5ob3QpKSxSayh0aGlzLCJzYW1wbGVz''@;'; put 'put ''R2VuZXJhdG9yIixuZXcgcTZlKChhLGQpPT57Y29uc3QgaD10aGlzLmhvdC50b1BoeXNpY2FsUm93KGEpLGY9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihkKTtpZih0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pc0hpZGRlbihoKXx8dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuaXNIaWRk''@;'; put 'put ''ZW4oZikpcmV0dXJuITE7Y29uc3Qgdj10aGlzLmhvdC5nZXRDZWxsTWV0YShhLGQpO2xldCBNPSIiO3Yuc3Bhbm5lZHx8KE09dGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbChhLGQpKTtsZXQgRD0iIjtyZXR1cm4gdGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIikmJihE''@;'; put 'put ''PXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiLEQsdixNKSkse3ZhbHVlOk0sYnVuZGxlU2VlZDpEfX0pKSxSayh0aGlzLCJpblByb2dyZXNzIiwhMSksUmsodGhpcywibWVhc3VyZWRDb2x1bW5zIiwwKSxSayh0aGlzLCJjb2x1bW5XaWR0aHNNYXAiLG5ldyBG''@;'; put 'put ''NiksY25lKHRoaXMsZG5lLCExKSxjbmUodGhpcyxwQyxbXSksY25lKHRoaXMsZ0MsW10pLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJhdXRvQ29sdW1uU2l6ZSIsdGhpcy5jb2x1bW5XaWR0aHNNYXApLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29sdW1uUmVzaXplIiwo''@;'; put 'put ''YSxkLGgpPT5NaChQMix0aGlzLHQ4ZSkuY2FsbCh0aGlzLGEsZCxoKSl9aXNFbmFibGVkKCl7cmV0dXJuITEhPT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW3VuZV0mJiF0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmNvbFdpZHRoc31lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO2lmKHRoaXMuZW5h''@;'; put 'put ''YmxlZClyZXR1cm47dGhpcy5naG9zdFRhYmxlLnNldFNldHRpbmcoInVzZUhlYWRlcnMiLHRoaXMuZ2V0U2V0dGluZygidXNlSGVhZGVycyIpKSx0aGlzLnNhbXBsZXNHZW5lcmF0b3Iuc2V0QWxsb3dEdXBsaWNhdGVzKHRoaXMuZ2V0U2V0dGluZygiYWxsb3dTYW1wbGVEdXBsaWNhdGVzIikp''@;'; put 'put ''O2NvbnN0IGE9dGhpcy5nZXRTZXR0aW5nKCJzYW1wbGluZ1JhdGlvIik7YSYmIWlzTmFOKGEpJiZ0aGlzLnNhbXBsZXNHZW5lcmF0b3Iuc2V0U2FtcGxlQ291bnQocGFyc2VJbnQoYSwxMCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gTWgoUDIsbCxQaHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ2hhbmdlUmVuZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9''@;'; put 'put ''bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBNaChQMixsLEZodCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFy''@;'; put 'put ''cmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBNaChQMixsLE5odCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW5kZXIiLCgpPT5NaChQMix0aGlzLE9odCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2xXaWR0aCIsKGQs''@;'; put 'put ''aCk9PnRoaXMuZ2V0Q29sdW1uV2lkdGgoaCxkKSksdGhpcy5hZGRIb29rKCJpbml0IiwoKT0+TWgoUDIsdGhpcyxIaHQpLmNhbGwodGhpcykpLHN1cGVyLmVuYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe0VWKGdDLHRoaXMsdGhpcy5maW5kQ29sdW1uc1doZXJlSGVhZGVyV2FzQ2hhbmdl''@;'; put 'put ''ZCgpKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29sdW1uUmVzaXplIiwobCxhLGQpPT5NaChQMix0aGlzLHQ4ZSkuY2FsbCh0aGlzLGwsYSxkKSl9Y2FsY3VsYXRlVmlzaWJsZUNvbHVtbnNX''@;'; put 'put ''aWR0aCgpe2lmKCF0aGlzLmhvdC5jb3VudFJvd3MoKSlyZXR1cm47Y29uc3QgbD10aGlzLmdldEZpcnN0VmlzaWJsZUNvbHVtbigpLGE9dGhpcy5nZXRMYXN0VmlzaWJsZUNvbHVtbigpOy0xIT09bCYmLTEhPT1hJiZ0aGlzLmNhbGN1bGF0ZUNvbHVtbnNXaWR0aCh7ZnJvbTpsLHRvOmF9LHZv''@;'; put 'put ''aWQgMCx0aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXIpfWNhbGN1bGF0ZUNvbHVtbnNXaWR0aCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Q29scygpLTF9LGE9YXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRSb3dzKCktMX0sZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0IGg9Im51bWJlciI9PXR5cGVvZiBsP3tm''@;'; put 'put ''cm9tOmwsdG86bH06bCxmPSJudW1iZXIiPT10eXBlb2YgYT97ZnJvbTphLHRvOmF9OmE7UWEoaC5mcm9tLGgudG8sdj0+e2xldCBNPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4odik7bnVsbD09PU0mJihNPXYpLChkfHxudWxsPT09dGhpcy5jb2x1bW5XaWR0aHNNYXAuZ2V0VmFsdWVBdElu''@;'; put 'put ''ZGV4KE0pJiYhdGhpcy5ob3QuX2dldENvbFdpZHRoRnJvbVNldHRpbmdzKE0pKSYmTWgoUDIsdGhpcyxRNmUpLmNhbGwodGhpcyx2LGYpfSksdGhpcy5naG9zdFRhYmxlLmNvbHVtbnMubGVuZ3RoJiYoTWgoUDIsdGhpcyxlOGUpLmNhbGwodGhpcyksdGhpcy5tZWFzdXJlZENvbHVtbnM9aC50''@;'; put 'put ''bysxLHRoaXMuZ2hvc3RUYWJsZS5jbGVhbigpKX1jYWxjdWxhdGVBbGxDb2x1bW5zV2lkdGgoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudFJvd3MoKS0xfSxhPWFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0sZD0wO2NvbnN0IGg9dGhpcy5ob3QuY291bnRDb2xzKCktMTtsZXQgZj1udWxsO3RoaXMuaW5Qcm9ncmVzcz0hMDtjb25zdCB2PSgpPT57aWYoIXRoaXMuaG90KXJldHVybiBWQShmKSx2b2lkKHRoaXMuaW5Qcm9n''@;'; put 'put ''cmVzcz0hMSk7dGhpcy5jYWxjdWxhdGVDb2x1bW5zV2lkdGgoe2Zyb206ZCx0bzpNYXRoLm1pbihkK0xrLkNBTENVTEFUSU9OX1NURVAsaCl9LGwsYSksZD1kK0xrLkNBTENVTEFUSU9OX1NURVArMSxkPGg/Zj1OQSh2KTooVkEoZiksdGhpcy5pblByb2dyZXNzPSExLHRoaXMuaG90LnZpZXcu''@;'; put 'put ''YWRqdXN0RWxlbWVudHNTaXplKCkpfSxNPXRoaXMuZ2V0U3luY0NhbGN1bGF0aW9uTGltaXQoKTtNPj0wJiYodGhpcy5jYWxjdWxhdGVDb2x1bW5zV2lkdGgoe2Zyb206MCx0bzpNfSxsLGEpLGQ9TSsxKSxkPGg/digpOnRoaXMuaW5Qcm9ncmVzcz0hMX1yZWNhbGN1bGF0ZUFsbENvbHVtbnNX''@;'; put 'put ''aWR0aCgpe3RoaXMuaG90LnZpZXcuaXNWaXNpYmxlKCkmJnRoaXMuY2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKHtmcm9tOjAsdG86dGhpcy5ob3QuY291bnRSb3dzKCktMX0sITApfWdldFN5bmNDYWxjdWxhdGlvbkxpbWl0KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW3VuZV07''@;'; put 'put ''bGV0IGE9TGsuU1lOQ19DQUxDVUxBVElPTl9MSU1JVDtjb25zdCBkPXRoaXMuaG90LmNvdW50Q29scygpLTE7cmV0dXJuIG1vKGwpJiYoYT1sLnN5bmNMaW1pdCxXcShhKT9hPU1KKGQsYSk6YT4+PTApLE1hdGgubWluKGEsZCl9Z2V0Q29sdW1uV2lkdGgobCxhKXtsZXQgZD0hKGFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdLGg9YTtyZXR1cm4gdm9pZCAwPT09aCYmKGg9dGhpcy5jb2x1bW5XaWR0aHNNYXAuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpLGQmJiJudW1iZXIiPT10eXBlb2YgaCYm''@;'; put 'put ''KGg9TWF0aC5tYXgoaCw1MCkpKSxofWdldEZpcnN0VmlzaWJsZUNvbHVtbigpe3ZhciBsO3JldHVybiBudWxsIT09KGw9dGhpcy5ob3QuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKSkmJnZvaWQgMCE9PWw/bDotMX1nZXRMYXN0VmlzaWJsZUNvbHVtbigpe3ZhciBsO3JldHVybiBu''@;'; put 'put ''dWxsIT09KGw9dGhpcy5ob3QuZ2V0TGFzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpKSYmdm9pZCAwIT09bD9sOi0xfWZpbmRDb2x1bW5zV2hlcmVIZWFkZXJXYXNDaGFuZ2VkKCl7cmV0dXJuIHRoaXMuaG90LmdldENvbEhlYWRlcigpLnJlZHVjZSgoZCxoLGYpPT57Y29uc3Qgdj1aNihwQyx0''@;'; put 'put ''aGlzKS5sZW5ndGg7cmV0dXJuKHYtMTxmfHxaNihwQyx0aGlzKVtmXSE9PWgpJiZkLnB1c2godGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oZikpLHYtMTxmP1o2KHBDLHRoaXMpLnB1c2goaCk6WjYocEMsdGhpcylbZl09aCxkfSxbXSl9Y2xlYXJDYWNoZShsKXtBcnJheS5pc0FycmF5KGwpP3Ro''@;'; put 'put ''aXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57bC5mb3JFYWNoKGE9Pnt0aGlzLmNvbHVtbldpZHRoc01hcC5zZXRWYWx1ZUF0SW5kZXgoYSxudWxsKX0pfSwhMCk6dGhpcy5jb2x1bW5XaWR0aHNNYXAuY2xlYXIoKX1pc05lZWRSZWNhbGN1bGF0ZSgpe3JldHVybiEhdGhpcy5jb2x1bW5XaWR0''@;'; put 'put ''aHNNYXAuZ2V0VmFsdWVzKCkuc2xpY2UoMCx0aGlzLm1lYXN1cmVkQ29sdW1ucykuZmlsdGVyKGw9Pm51bGw9PT1sKS5sZW5ndGh9ZGVzdHJveSgpe3RoaXMuZ2hvc3RUYWJsZS5jbGVhbigpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gTGh0KGMpe2NvbnN0IGw9e2Zyb206MCx0bzp0aGlz''@;'; put 'put ''LmhvdC5jb3VudFJvd3MoKS0xfTtjLmZvckVhY2goYT0+e2NvbnN0IGQ9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihhKTtudWxsIT09ZCYmKHRoaXMuaG90Ll9nZXRDb2xXaWR0aEZyb21TZXR0aW5ncyhkKXx8TWgoUDIsdGhpcyxRNmUpLmNhbGwodGhpcyxhLGwpKX0pLHRoaXMuZ2hvc3RU''@;'; put 'put ''YWJsZS5jb2x1bW5zLmxlbmd0aCYmKE1oKFAyLHRoaXMsZThlKS5jYWxsKHRoaXMpLHRoaXMuZ2hvc3RUYWJsZS5jbGVhbigpKX1mdW5jdGlvbiBRNmUoYyxsKXt0aGlzLnNhbXBsZXNHZW5lcmF0b3IuZ2VuZXJhdGVDb2x1bW5TYW1wbGVzKGMsbCkuZm9yRWFjaCgoZCxoKT0+dGhpcy5naG9z''@;'; put 'put ''dFRhYmxlLmFkZENvbHVtbihoLGQpKX1mdW5jdGlvbiBlOGUoKXt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e3RoaXMuZ2hvc3RUYWJsZS5nZXRXaWR0aHMoKGMsbCk9Pntjb25zdCBhPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oYyk7dGhpcy5jb2x1bW5XaWR0aHNNYXAuc2V0VmFs''@;'; put 'put ''dWVBdEluZGV4KGEsbCl9KX0sITApfWZ1bmN0aW9uIE9odCgpe3RoaXMuY2FsY3VsYXRlVmlzaWJsZUNvbHVtbnNXaWR0aCgpLHRoaXMuaW5Qcm9ncmVzc3x8KE1oKFAyLHRoaXMsTGh0KS5jYWxsKHRoaXMsWjYoZ0MsdGhpcykpLEVWKGdDLHRoaXMsW10pKX1mdW5jdGlvbiBQaHQoYyxsKXts''@;'; put 'put ''fHx0aGlzLnJlY2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKCl9ZnVuY3Rpb24gRmh0KGMpe2NvbnN0IGw9Yy5yZWR1Y2UoKGEsZCk9PntsZXRbLGhdPWQ7Y29uc3QgZj10aGlzLmhvdC5wcm9wVG9Db2woaCk7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZikmJi0xPT09YS5pbmRleE9mKGYpJiZh''@;'; put 'put ''LnB1c2goZiksYX0sW10pO1o2KGdDLHRoaXMpLnB1c2goLi4ubCl9ZnVuY3Rpb24gdDhlKGMsbCxhKXtsZXQgZD1jO3JldHVybiBhJiYodGhpcy5jYWxjdWxhdGVDb2x1bW5zV2lkdGgobCx2b2lkIDAsITApLGQ9dGhpcy5nZXRDb2x1bW5XaWR0aChsLHZvaWQgMCwhMSkpLGR9ZnVuY3Rpb24g''@;'; put 'put ''SGh0KCl7RVYocEMsdGhpcyx0aGlzLmhvdC5nZXRDb2xIZWFkZXIoKSksdGhpcy5yZWNhbGN1bGF0ZUFsbENvbHVtbnNXaWR0aCgpLEVWKGRuZSx0aGlzLCEwKX1mdW5jdGlvbiBOaHQoYyl7aWYoIVo2KGRuZSx0aGlzKSlyZXR1cm47Y29uc3QgbD1jLnJlZHVjZSgoYSxkKT0+e3ZhciBoO2Nv''@;'; put 'put ''bnN0IGY9bnVsbD09PShoPWQuYWRkcmVzcyl8fHZvaWQgMD09PWg/dm9pZCAwOmguY29sO2lmKE51bWJlci5pc0ludGVnZXIoZikpe2NvbnN0IHY9dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oZik7LTE9PT1hLmluZGV4T2YodikmJmEucHVzaCh2KX1yZXR1cm4gYX0sW10pO1o2KGdDLHRoaXMp''@;'; put 'put ''LnB1c2goLi4ubCl9Y29uc3QgU3Y9e2hvcml6b250YWw6Imhvcml6b250YWwiLHZlcnRpY2FsOiJ2ZXJ0aWNhbCJ9O2Z1bmN0aW9uIG1DKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBVaHQoYyl7dmFyIGw9ZnVuY3Rpb24gWmh0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1''@;'; put 'put ''cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2''@;'; put 'put ''ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6''@;'; put 'put ''ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiB2QyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50''@;'; put 'put ''IG9uIHRoaXMgb2JqZWN0Iil9QWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoIm1vZGlmeUF1dG9maWxsUmFuZ2UiKSxBYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQXV0b2ZpbGwiKSxBYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJBdXRvZmlsbCIpO2NvbnN0IFlo''@;'; put 'put ''dD1bImZpbGxIYW5kbGUiXTt2YXIgTXY9bmV3IFdlYWtTZXQ7Y2xhc3MgS2h0IGV4dGVuZHMgTXN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIGpodChjLGwpeyhmdW5jdGlvbiB6aHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5u''@;'; put 'put ''b3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxNdiksbUModGhpcywiYWRkaW5nU3RhcnRlZCIsITEpLG1DKHRoaXMsIm1vdXNlRG93bk9uQ2VsbENvcm5lciIsITEpLG1DKHRoaXMsIm1vdXNl''@;'; put 'put ''RHJhZ091dHNpZGUiLCExKSxtQyh0aGlzLCJoYW5kbGVEcmFnZ2VkQ2VsbHMiLDApLG1DKHRoaXMsImRpcmVjdGlvbnMiLFtdKSxtQyh0aGlzLCJhdXRvSW5zZXJ0Um93IiwhMSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuImF1dG9maWxsIn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklP''@;'; put 'put ''UklUWSgpe3JldHVybiAyMH1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVyblsiYXV0b2ZpbGwiLC4uLllodF19aXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuaG90LmdldFNldHRpbmdzKCkuZmlsbEhhbmRsZX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLm1hcFNldHRp''@;'; put 'put ''bmdzKCksdGhpcy5yZWdpc3RlckV2ZW50cygpLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd24iLGw9PnZDKE12LHRoaXMsSmh0KS5jYWxsKHRoaXMsbCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxDb3JuZXJEYmxDbGljayIsbD0+dkMoTXYsdGhpcyxxaHQpLmNh''@;'; put 'put ''bGwodGhpcyxsKSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLChsLGEpPT52QyhNdix0aGlzLFFodCkuY2FsbCh0aGlzLGEpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxz''@;'; put 'put ''dXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5jbGVhck1hcHBlZFNldHRpbmdzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfWdldFNlbGVjdGlvbkRhdGEoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBd''@;'; put 'put ''O2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx7cm93OmQsY29sOmh9PWEuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93OmYsY29sOnZ9PWEuZ2V0Qm90dG9tRW5kQ29ybmVyKCksTT10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Q29weWFibGVSYW5nZSIsW3tzdGFydFJv''@;'; put 'put ''dzpkLHN0YXJ0Q29sOmgsZW5kUm93OmYsZW5kQ29sOnZ9XSksRD1bXSxVPVtdLHRlPVtdO3JldHVybiBLbihNLG9lPT57Zm9yKGxldCB2ZT1vZS5zdGFydFJvdzt2ZTw9b2UuZW5kUm93O3ZlKz0xKS0xPT09RC5pbmRleE9mKHZlKSYmRC5wdXNoKHZlKTtmb3IobGV0IHZlPW9lLnN0YXJ0Q29s''@;'; put 'put ''O3ZlPD1vZS5lbmRDb2w7dmUrPTEpLTE9PT1VLmluZGV4T2YodmUpJiZVLnB1c2godmUpfSksS24oRCxvZT0+e2NvbnN0IHZlPVtdO0tuKFUsd2U9Pntjb25zdCBGZT1sP3RoaXMuaG90LmdldFNvdXJjZURhdGFBdENlbGwob2Usd2UpOm51bGw7bCYmbW8oRmUpP3ZlLnB1c2godGhpcy5ob3Qu''@;'; put 'put ''Z2V0Q29weWFibGVTb3VyY2VEYXRhKG9lLHdlKSk6dmUucHVzaCh0aGlzLmhvdC5nZXRDb3B5YWJsZURhdGEob2Usd2UpKX0pLHRlLnB1c2godmUpfSksdGV9ZmlsbEluKCl7aWYodGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuaXNFbXB0eSgpKXJldHVybiExO2NvbnN0''@;'; put 'put ''W2wsYSxkLGhdPXRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmdldFZpc3VhbENvcm5lcnMoKSxmPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksdj1mLmdldFRvcFN0YXJ0Q29ybmVyKCksTT1mLmdldEJvdHRvbUVuZENvcm5lcigpO3RoaXMucmVzZXRTZWxl''@;'; put 'put ''Y3Rpb25PZkRyYWdnZWRBcmVhKCk7Y29uc3QgRD1bdi5yb3csdi5jb2wsTS5yb3csTS5jb2xdLFU9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUF1dG9maWxsUmFuZ2UiLFtNYXRoLm1pbih2LnJvdyxsKSxNYXRoLm1pbih2LmNvbCxhKSxNYXRoLm1heChNLnJvdyxkKSxNYXRoLm1heChNLmNv''@;'; put 'put ''bCxoKV0sRCkse2RpcmVjdGlvbk9mRHJhZzp0ZSxzdGFydE9mRHJhZ0Nvb3JkczpvZSxlbmRPZkRyYWdDb29yZHM6dmV9PWZ1bmN0aW9uIFZodChjLGwsYSl7bGV0IGQsaCxmO3JldHVybiBsWzBdPT09Y1swXSYmbFsxXTxjWzFdPyhmPSJsZWZ0IixkPWEobFswXSxsWzFdKSxoPWEobFsyXSxj''@;'; put 'put ''WzFdLTEpKTpsWzJdPT09Y1syXSYmbFswXT09PWNbMF0mJmxbM10+Y1szXT8oZj0icmlnaHQiLGQ9YShsWzBdLGNbM10rMSksaD1hKGxbMl0sbFszXSkpOmxbMF08Y1swXSYmbFsxXT09PWNbMV0/KGY9InVwIixkPWEobFswXSxsWzFdKSxoPWEoY1swXS0xLGxbM10pKTpsWzJdPmNbMl0mJmxb''@;'; put 'put ''MV09PT1jWzFdJiYoZj0iZG93biIsZD1hKGNbMl0rMSxsWzFdKSxoPWEobFsyXSxsWzNdKSksZCYmZC5ub3JtYWxpemUoKSxoJiZoLm5vcm1hbGl6ZSgpLHtkaXJlY3Rpb25PZkRyYWc6ZixzdGFydE9mRHJhZ0Nvb3JkczpkLGVuZE9mRHJhZ0Nvb3JkczpofX0oRCxVLCh3ZSxGZSk9PnRoaXMu''@;'; put 'put ''aG90Ll9jcmVhdGVDZWxsQ29vcmRzKHdlLEZlKSk7aWYob2UmJm9lLnJvdz4tMSYmb2UuY29sPi0xKXtjb25zdCB3ZT10aGlzLmdldFNlbGVjdGlvbkRhdGEoKSxGZT10aGlzLmdldFNlbGVjdGlvbkRhdGEoITApLFdlPWYuY2xvbmUoKSxudD10aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKG9l''@;'; put 'put ''LG9lLHZlKSxkdD10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQXV0b2ZpbGwiLHdlLFdlLG50LHRlKTtpZighMT09PWR0KXJldHVybiB0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5jbGVhcigpLHRoaXMuaG90LnJlbmRlcigpLCExO2xldCBtdD1kdDtjb25zdCAkdD1k''@;'; put 'put ''dDtpZihbInVwIiwibGVmdCJdLmluZGV4T2YodGUpPi0xJiYoMSE9PSR0Lmxlbmd0aHx8MCE9PSR0WzBdLmxlbmd0aCkpaWYobXQ9W10sInVwIj09PXRlKXtjb25zdCB6dD12ZS5yb3ctb2Uucm93KzEseW49enQlJHQubGVuZ3RoO2ZvcihsZXQgZ249MDtnbjx6dDtnbisrKW10LnB1c2goJHRb''@;'; put 'put ''KGduKygkdC5sZW5ndGgteW4pKSUkdC5sZW5ndGhdKX1lbHNle2NvbnN0IHp0PXZlLmNvbC1vZS5jb2wrMSx5bj16dCUkdFswXS5sZW5ndGg7Zm9yKGxldCBnbj0wO2duPCR0Lmxlbmd0aDtnbisrKXttdC5wdXNoKFtdKTtmb3IobGV0IHduPTA7d248enQ7d24rKyltdFtnbl0ucHVzaCgkdFtn''@;'; put 'put ''bl1bKHduKygkdFtnbl0ubGVuZ3RoLXluKSklJHRbZ25dLmxlbmd0aF0pfX1pZihGZS5zb21lKHp0PT56dC5zb21lKHluPT5tbyh5bikpKSl7Y29uc3QgenQ9dkMoTXYsdGhpcyxYaHQpLmNhbGwodGhpcyxtdCxGZSxvZSx2ZSx0ZSk7enQubGVuZ3RoJiYobXQ9enQpfXRoaXMuaG90LnBvcHVs''@;'; put 'put ''YXRlRnJvbUFycmF5KG9lLnJvdyxvZS5jb2wsbXQsdmUucm93LHZlLmNvbCxgJHt0aGlzLnBsdWdpbk5hbWV9LmZpbGxgLG51bGwpLHRoaXMuc2V0U2VsZWN0aW9uKFUpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckF1dG9maWxsIixtdCxXZSxudCx0ZSksdGhpcy5ob3QucmVuZGVyKCl9ZWxz''@;'; put 'put ''ZSB0aGlzLmhvdC52aWV3LnJlbmRlcigpO3JldHVybiEwfXJlZHVjZVNlbGVjdGlvbkFyZWFJZk5lZWRlZChsKXtyZXR1cm4gbC5yb3c8MCYmKGwucm93PTApLGwuY29sPDAmJihsLmNvbD0wKSxsfWdldENvb3Jkc09mRHJhZ0FuZERyb3BCb3JkZXJzKGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0''@;'; put 'put ''U2VsZWN0ZWRSYW5nZUxhc3QoKSxkPWEuZ2V0Qm90dG9tRW5kQ29ybmVyKCk7bGV0IGg9bDtpZih0aGlzLmRpcmVjdGlvbnMuaW5jbHVkZXMoU3YudmVydGljYWwpJiZ0aGlzLmRpcmVjdGlvbnMuaW5jbHVkZXMoU3YuaG9yaXpvbnRhbCkpe2NvbnN0IGY9YS5nZXRUb3BTdGFydENvcm5lcigp''@;'; put 'put ''OyhkLmNvbDw9bC5jb2x8fGYuY29sPj1sLmNvbCkmJihoPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGQucm93LGwuY29sKSksKGQucm93PGwucm93fHxmLnJvdz5sLnJvdykmJihoPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwucm93LGQuY29sKSl9ZWxzZSBpZih0aGlzLmRpcmVj''@;'; put 'put ''dGlvbnMuaW5jbHVkZXMoU3YudmVydGljYWwpKWg9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3csZC5jb2wpO2Vsc2V7aWYoIXRoaXMuZGlyZWN0aW9ucy5pbmNsdWRlcyhTdi5ob3Jpem9udGFsKSlyZXR1cm47aD10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhkLnJvdyxsLmNv''@;'; put 'put ''bCl9cmV0dXJuIHRoaXMucmVkdWNlU2VsZWN0aW9uQXJlYUlmTmVlZGVkKGgpfXNob3dCb3JkZXIobCl7Y29uc3QgYT10aGlzLmdldENvb3Jkc09mRHJhZ0FuZERyb3BCb3JkZXJzKGwpO2EmJnRoaXMucmVkcmF3Qm9yZGVycyhhKX1hZGRSb3coKXt0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0''@;'; put 'put ''KCgpPT57dGhpcy5ob3QuYWx0ZXIoImluc2VydF9yb3dfYmVsb3ciLHZvaWQgMCwxLGAke3RoaXMucGx1Z2luTmFtZX0uZmlsbGApLHRoaXMuYWRkaW5nU3RhcnRlZD0hMX0sMjAwKX1hZGROZXdSb3dJZk5lZWRlZCgpe2lmKCF0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwo''@;'; put 'put ''KS5pc0VtcHR5KCkmJiExPT09dGhpcy5hZGRpbmdTdGFydGVkJiZ0aGlzLmF1dG9JbnNlcnRSb3cpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCksYT10aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5nZXRWaXN1YWxDb3JuZXJzKCksZD10aGlzLmhvdC5j''@;'; put 'put ''b3VudFJvd3MoKTtsWzJdPGQtMSYmYVsyXT09PWQtMSYmKHRoaXMuYWRkaW5nU3RhcnRlZD0hMCx0aGlzLmFkZFJvdygpKX19Z2V0SW5kZXhPZkxhc3RBZGphY2VudEZpbGxlZEluUm93KGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0RGF0YSgpLGQ9dGhpcy5ob3QuY291bnRSb3dzKCk7bGV0IGg7''@;'; put 'put ''Zm9yKGxldCBmPWxbMl0rMTtmPGQ7ZisrKXtmb3IobGV0IEQ9bFsxXTtEPD1sWzNdO0QrKylpZighdHUoYVtmXVtEXSkpcmV0dXJuLTE7Y29uc3QgTT1hW2ZdW2xbM10rMV07KCF0dShhW2ZdW2xbMV0tMV0pfHwhdHUoTSkpJiYoaD1mKX1yZXR1cm4gaH1hZGRTZWxlY3Rpb25Gcm9tU3RhcnRB''@;'; put 'put ''cmVhVG9TcGVjaWZpY1Jvd0luZGV4KGwsYSl7dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuY2xlYXIoKS5hZGQodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobFswXSxsWzFdKSkuYWRkKHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEsbFszXSkpLmNvbW1pdCgp''@;'; put 'put ''fXNldFNlbGVjdGlvbihsKXt0aGlzLmhvdC5zZWxlY3RDZWxsKC4uLlpzKGwsYT0+TWF0aC5tYXgoYSwwKSksITEsITEpfXNlbGVjdEFkamFjZW50KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKSxhPXRoaXMuZ2V0SW5kZXhPZkxhc3RBZGphY2VudEZpbGxlZEluUm93KGwp''@;'; put 'put ''O3JldHVybi0xIT09YSYmdm9pZCAwIT09YSYmKHRoaXMuYWRkU2VsZWN0aW9uRnJvbVN0YXJ0QXJlYVRvU3BlY2lmaWNSb3dJbmRleChsLGEpLCEwKX1yZXNldFNlbGVjdGlvbk9mRHJhZ2dlZEFyZWEoKXt0aGlzLmhhbmRsZURyYWdnZWRDZWxscz0wLHRoaXMuaG90LnNlbGVjdGlvbi5oaWdo''@;'; put 'put ''bGlnaHQuZ2V0RmlsbCgpLmNsZWFyKCl9cmVkcmF3Qm9yZGVycyhsKXt0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5jbGVhcigpLmFkZCh0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmZyb20pLmFkZCh0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgp''@;'; put 'put ''LnRvKS5hZGQobCkuY29tbWl0KCksdGhpcy5ob3Qudmlldy5yZW5kZXIoKX1nZXRJZk1vdXNlV2FzRHJhZ2dlZE91dHNpZGUobCl7Y29uc3R7ZG9jdW1lbnRFbGVtZW50OmF9PXRoaXMuaG90LnJvb3REb2N1bWVudCxkPWQxKHRoaXMuaG90LnRhYmxlKS50b3AtKHRoaXMuaG90LnJvb3RXaW5k''@;'; put 'put ''b3cucGFnZVlPZmZzZXR8fGEuc2Nyb2xsVG9wKStGdSh0aGlzLmhvdC50YWJsZSksaD1kMSh0aGlzLmhvdC50YWJsZSkubGVmdC0odGhpcy5ob3Qucm9vdFdpbmRvdy5wYWdlWE9mZnNldHx8YS5zY3JvbGxMZWZ0KStfdSh0aGlzLmhvdC50YWJsZSk7cmV0dXJuIGwuY2xpZW50WT5kJiZsLmNs''@;'; put 'put ''aWVudFg8PWh9cmVnaXN0ZXJFdmVudHMoKXtjb25zdHtkb2N1bWVudEVsZW1lbnQ6bH09dGhpcy5ob3Qucm9vdERvY3VtZW50O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PnZDKE12LHRoaXMsZTJ0KS5jYWxsKHRoaXMpKSx0aGlzLmV2ZW50TWFu''@;'; put 'put ''YWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlbW92ZSIsYT0+dkMoTXYsdGhpcyx0MnQpLmNhbGwodGhpcyxhKSl9Y2xlYXJNYXBwZWRTZXR0aW5ncygpe3RoaXMuZGlyZWN0aW9ucy5sZW5ndGg9MCx0aGlzLmF1dG9JbnNlcnRSb3c9ITF9bWFwU2V0dGluZ3MoKXtjb25zdCBsPWZ1bmN0''@;'; put 'put ''aW9uIEJodChjKXtjb25zdCBsPXt9O3JldHVybiEwPT09Yz8obC5kaXJlY3Rpb25zPU9iamVjdC5rZXlzKFN2KSxsLmF1dG9JbnNlcnRSb3c9ITApOm1vKGMpPyhsLmF1dG9JbnNlcnRSb3c9ISFNYShjLmF1dG9JbnNlcnRSb3cpJiZjLmRpcmVjdGlvbiE9PVN2Lmhvcml6b250YWwmJmMuYXV0''@;'; put 'put ''b0luc2VydFJvdyxsLmRpcmVjdGlvbnM9TWEoYy5kaXJlY3Rpb24pP1tjLmRpcmVjdGlvbl06T2JqZWN0LmtleXMoU3YpKToic3RyaW5nIj09dHlwZW9mIGM/KGwuZGlyZWN0aW9ucz1bY10sbC5hdXRvSW5zZXJ0Um93PSEwKToobC5kaXJlY3Rpb25zPVtdLGwuYXV0b0luc2VydFJvdz0hMSks''@;'; put 'put ''bH0odGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maWxsSGFuZGxlKTt0aGlzLmRpcmVjdGlvbnM9bC5kaXJlY3Rpb25zLHRoaXMuYXV0b0luc2VydFJvdz1sLmF1dG9JbnNlcnRSb3d9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gWGh0KGMsbCxhLGQpe2NvbnN0IGg9W107Zm9y''@;'; put 'put ''KGxldCBmPU1hdGgubWluKGEucm93LGQucm93KTtmPD1NYXRoLm1heChhLnJvdyxkLnJvdyk7Zis9MSl7aC5wdXNoKFtdKTtmb3IobGV0IHY9TWF0aC5taW4oYS5jb2wsZC5jb2wpO3Y8PU1hdGgubWF4KGEuY29sLGQuY29sKTt2Kz0xKXtjb25zdCBNPXRoaXMuaG90LmdldFNvdXJjZURhdGFB''@;'; put 'put ''dENlbGwoZix2KSxEPWYtTWF0aC5taW4oYS5yb3csZC5yb3cpLFU9di1NYXRoLm1pbihhLmNvbCxkLmNvbCksdGU9RCVsLmxlbmd0aCxvZT1VJWxbMF0ubGVuZ3RoO2hbRF1bVV09bW8oTSk/bFt0ZV1bb2VdOmNbdGVdW29lXX19cmV0dXJuIGh9ZnVuY3Rpb24gcWh0KCl7dGhpcy5zZWxlY3RB''@;'; put 'put ''ZGphY2VudCgpJiZ0aGlzLmZpbGxJbigpfWZ1bmN0aW9uIEpodCgpe3RoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPTEsdGhpcy5tb3VzZURvd25PbkNlbGxDb3JuZXI9ITB9ZnVuY3Rpb24gUWh0KGMpe3RoaXMubW91c2VEb3duT25DZWxsQ29ybmVyJiYhdGhpcy5ob3Qudmlldy5pc01vdXNlRG93''@;'; put 'put ''bigpJiZ0aGlzLmhhbmRsZURyYWdnZWRDZWxscyYmKHRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzKz0xLHRoaXMuc2hvd0JvcmRlcihjKSx0aGlzLmFkZE5ld1Jvd0lmTmVlZGVkKCkpfWZ1bmN0aW9uIGUydCgpe3RoaXMuaGFuZGxlRHJhZ2dlZENlbGxzJiYodGhpcy5oYW5kbGVEcmFnZ2VkQ2Vs''@;'; put 'put ''bHM+MSYmdGhpcy5maWxsSW4oKSx0aGlzLmhhbmRsZURyYWdnZWRDZWxscz0wLHRoaXMubW91c2VEb3duT25DZWxsQ29ybmVyPSExKX1mdW5jdGlvbiB0MnQoYyl7Y29uc3QgbD10aGlzLmdldElmTW91c2VXYXNEcmFnZ2VkT3V0c2lkZShjKTshMT09PXRoaXMuYWRkaW5nU3RhcnRlZCYmdGhp''@;'; put 'put ''cy5oYW5kbGVEcmFnZ2VkQ2VsbHM+MCYmbD8odGhpcy5tb3VzZURyYWdPdXRzaWRlPSEwLHRoaXMuYWRkaW5nU3RhcnRlZD0hMCk6dGhpcy5tb3VzZURyYWdPdXRzaWRlPSExLHRoaXMubW91c2VEcmFnT3V0c2lkZSYmdGhpcy5hdXRvSW5zZXJ0Um93JiZ0aGlzLmFkZFJvdygpfWZ1bmN0aW9u''@;'; put 'put ''IHI4ZShjLGwsYSl7aThlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBpOGUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHlDKGMsbCxh''@;'; put 'put ''KXtyZXR1cm4obD1mdW5jdGlvbiByMnQoYyl7dmFyIGw9ZnVuY3Rpb24gaTJ0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2Jq''@;'; put 'put ''ZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9m''@;'; put 'put ''IGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBhOGUoYyxsLGEpe3JldHVybiBjLnNldChGMihjLGwpLGEpLGF9ZnVuY3Rpb24gVFYo''@;'; put 'put ''YyxsKXtyZXR1cm4gYy5nZXQoRjIoYyxsKSl9ZnVuY3Rpb24gRjIoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2Vu''@;'; put 'put ''dCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IGhuZT0iYXV0b1Jvd1NpemUiLG84ZT0iaHRGaXJzdERhdGFzZXRDb2x1bW5Ob3RSZW5kZXJlZCIsczhlPSJodEF1dG9Sb3dTaXplIjt2YXIgT2s9bmV3IFdlYWtNYXAsZm5lPW5ldyBXZWFrTWFwLEdmPW5ldyBXZWFrU2V0O2NsYXNzIFBrIGV4dGVu''@;'; put 'put ''ZHMgTXN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIGhuZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA0MH1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybiEwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybnt1c2VIZWFkZXJzOiEw''@;'; put 'put ''LHNhbXBsaW5nUmF0aW86bnVsbCxhbGxvd1NhbXBsZUR1cGxpY2F0ZXM6ITF9fXN0YXRpYyBnZXQgQ0FMQ1VMQVRJT05fU1RFUCgpe3JldHVybiA1MH1zdGF0aWMgZ2V0IFNZTkNfQ0FMQ1VMQVRJT05fTElNSVQoKXtyZXR1cm4gNTAwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLGZ1bmN0aW9u''@;'; put 'put ''IG4ydChjLGwpe2k4ZShjLGwpLGwuYWRkKGMpfSh0aGlzLEdmKSx5Qyh0aGlzLCJoZWFkZXJIZWlnaHQiLG51bGwpLHlDKHRoaXMsImdob3N0VGFibGUiLG5ldyBzbmUodGhpcy5ob3QpKSx5Qyh0aGlzLCJzYW1wbGVzR2VuZXJhdG9yIixuZXcgcTZlKChhLGQpPT57Y29uc3QgaD10aGlzLmhv''@;'; put 'put ''dC50b1BoeXNpY2FsQ29sdW1uKGQpO2lmKHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmlzSGlkZGVuKGgpfHxhPj0wJiZkPj0wJiZ0aGlzLmhvdC5nZXRDZWxsTWV0YShhLGQpLmhpZGRlbilyZXR1cm4hMTtsZXQgZjtyZXR1cm4gYT49MD9mPXRoaXMuaG90LmdldERhdGFBdENlbGwoYSxk''@;'; put 'put ''KTotMT09PWEmJihmPXRoaXMuaG90LmdldENvbEhlYWRlcihkKSkse3ZhbHVlOmZ9fSkpLHlDKHRoaXMsImluUHJvZ3Jlc3MiLCExKSx5Qyh0aGlzLCJtZWFzdXJlZFJvd3MiLDApLHlDKHRoaXMsInJvd0hlaWdodHNNYXAiLG5ldyBGNikscjhlKHRoaXMsT2ssW10pLHI4ZSh0aGlzLGZuZSwh''@;'; put 'put ''MSksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAoImF1dG9Sb3dTaXplIix0aGlzLnJvd0hlaWdodHNNYXApLHRoaXMuYWRkSG9vaygiYmVmb3JlUm93UmVzaXplIiwoYSxkLGgpPT5GMihHZix0aGlzLGM4ZSkuY2FsbCh0aGlzLGEsZCxoKSl9aXNFbmFibGVkKCl7Y29uc3Qg''@;'; put 'put ''bD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW2huZV07cmV0dXJuITA9PT1sfHxtbyhsKX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47dGhpcy5zYW1wbGVzR2VuZXJhdG9yLnNldEFsbG93RHVwbGljYXRlcyh0aGlzLmdldFNldHRpbmcoImFsbG93U2Ft''@;'; put 'put ''cGxlRHVwbGljYXRlcyIpKTtjb25zdCBhPXRoaXMuZ2V0U2V0dGluZygic2FtcGxpbmdSYXRpbyIpO2EmJiFpc05hTihhKSYmdGhpcy5zYW1wbGVzR2VuZXJhdG9yLnNldFNhbXBsZUNvdW50KHBhcnNlSW50KGEsMTApKSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7''@;'; put 'put ''Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIEYyKEdmLGwsdTJ0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNoYW5nZVJlbmRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gRjIoR2YsbCxkMnQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29sdW1uUmVzaXplIiwoKT0+dGhpcy5yZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKSks''@;'; put 'put ''dGhpcy5hZGRIb29rKCJhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBGMihHZixsLGYydCkuY2FsbChsLC4uLmgpfSksdGhpcy5h''@;'; put 'put ''ZGRIb29rKCJiZWZvcmVWaWV3UmVuZGVyIiwoKT0+RjIoR2YsdGhpcyxsMnQpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVuZGVyIiwoKT0+RjIoR2YsdGhpcyxjMnQpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93SGVpZ2h0IiwoZCxoKT0+dGhpcy5nZXRS''@;'; put 'put ''b3dIZWlnaHQoaCxkKSksdGhpcy5hZGRIb29rKCJpbml0IiwoKT0+RjIoR2YsdGhpcyxoMnQpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29sdW1uSGVhZGVySGVpZ2h0IiwoKT0+dGhpcy5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKSksaWkodGhpcy5ob3Qucm9vdEVsZW1lbnQs''@;'; put 'put ''czhlKSxzdXBlci5lbmFibGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5oZWFkZXJIZWlnaHQ9bnVsbCxWYSh0aGlzLmhvdC5yb290RWxlbWVudCxzOGUpLHN1cGVyLmRpc2FibGVQbHVnaW4oKSxGMihHZix0aGlzLGw4ZSkuY2FsbCh0aGlzLCExKSx0aGlzLmFkZEhvb2soImJlZm9y''@;'; put 'put ''ZVJvd1Jlc2l6ZSIsKGwsYSxkKT0+RjIoR2YsdGhpcyxjOGUpLmNhbGwodGhpcyxsLGEsZCkpfWNhbGN1bGF0ZVZpc2libGVSb3dzSGVpZ2h0KCl7aWYoIXRoaXMuaG90LmNvdW50Q29scygpKXJldHVybjtjb25zdCBsPXRoaXMuZ2V0Rmlyc3RWaXNpYmxlUm93KCksYT10aGlzLmdldExhc3RW''@;'; put 'put ''aXNpYmxlUm93KCk7LTEhPT1sJiYtMSE9PWEmJnRoaXMuY2FsY3VsYXRlUm93c0hlaWdodCh7ZnJvbTpsLHRvOmF9LHZvaWQgMCx0aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXIpfWNhbGN1bGF0ZVJvd3NIZWlnaHQoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50''@;'; put 'put ''c1swXT9hcmd1bWVudHNbMF06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudFJvd3MoKS0xfSxhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Q29scygpLTF9LGQ9YXJndW1lbnRzLmxlbmd0aD4y''@;'; put 'put ''JiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCBoPSJudW1iZXIiPT10eXBlb2YgbD97ZnJvbTpsLHRvOmx9OmwsZj0ibnVtYmVyIj09dHlwZW9mIGE/e2Zyb206YSx0bzphfTphO2lmKG51bGwhPT10aGlzLmhvdC5nZXRDb2xIZWFkZXIoMCkpe2NvbnN0IHY9dGhp''@;'; put 'put ''cy5zYW1wbGVzR2VuZXJhdG9yLmdlbmVyYXRlUm93U2FtcGxlcygtMSxmKTt0aGlzLmdob3N0VGFibGUuYWRkQ29sdW1uSGVhZGVyc1Jvdyh2LmdldCgtMSkpfVFhKGguZnJvbSxoLnRvLHY9PntsZXQgTT10aGlzLmhvdC50b1BoeXNpY2FsUm93KHYpO251bGw9PT1NJiYoTT12KSwoZHx8bnVs''@;'; put 'put ''bD09PXRoaXMucm93SGVpZ2h0c01hcC5nZXRWYWx1ZUF0SW5kZXgoTSkpJiZ0aGlzLnNhbXBsZXNHZW5lcmF0b3IuZ2VuZXJhdGVSb3dTYW1wbGVzKHYsZikuZm9yRWFjaCgoVSx0ZSk9PnRoaXMuZ2hvc3RUYWJsZS5hZGRSb3codGUsVSkpfSksdGhpcy5naG9zdFRhYmxlLnJvd3MubGVuZ3Ro''@;'; put 'put ''JiYodGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0aGlzLmdob3N0VGFibGUuZ2V0SGVpZ2h0cygodixNKT0+e3Y8MD90aGlzLmhlYWRlckhlaWdodD1NOnRoaXMucm93SGVpZ2h0c01hcC5zZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbFJvdyh2KSxNKX0pfSwhMCksdGhp''@;'; put 'put ''cy5tZWFzdXJlZFJvd3M9aC50bysxLHRoaXMuZ2hvc3RUYWJsZS5jbGVhbigpKX1jYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRDb2xzKCkt''@;'; put 'put ''MX0sYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLGQ9MDtjb25zdCBoPXRoaXMuaG90LmNvdW50Um93cygpLTE7bGV0IGY9bnVsbDt0aGlzLmluUHJvZ3Jlc3M9ITA7Y29uc3Qgdj0oKT0+e2lmKCF0aGlzLmhvdClyZXR1cm4gVkEoZiks''@;'; put 'put ''dm9pZCh0aGlzLmluUHJvZ3Jlc3M9ITEpO3RoaXMuY2FsY3VsYXRlUm93c0hlaWdodCh7ZnJvbTpkLHRvOk1hdGgubWluKGQrUGsuQ0FMQ1VMQVRJT05fU1RFUCxoKX0sbCxhKSxkPWQrUGsuQ0FMQ1VMQVRJT05fU1RFUCsxLGQ8aD9mPU5BKHYpOihWQShmKSx0aGlzLmluUHJvZ3Jlc3M9ITEs''@;'; put 'put ''dGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSl9LE09dGhpcy5nZXRTeW5jQ2FsY3VsYXRpb25MaW1pdCgpO00+PTAmJih0aGlzLmNhbGN1bGF0ZVJvd3NIZWlnaHQoe2Zyb206MCx0bzpNfSxsLGEpLGQ9TSsxKSxkPGg/digpOih0aGlzLmluUHJvZ3Jlc3M9ITEsdGhpcy5ob3Qu''@;'; put 'put ''dmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSl9cmVjYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCl7dGhpcy5ob3Qudmlldy5pc1Zpc2libGUoKSYmdGhpcy5jYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KHtmcm9tOjAsdG86dGhpcy5ob3QuY291bnRDb2xzKCktMX0sITApfWdldFN5bmNDYWxjdWxhdGlv''@;'; put 'put ''bkxpbWl0KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW2huZV07bGV0IGE9UGsuU1lOQ19DQUxDVUxBVElPTl9MSU1JVDtjb25zdCBkPXRoaXMuaG90LmNvdW50Um93cygpLTE7cmV0dXJuIG1vKGwpJiYoYT1sLnN5bmNMaW1pdCxXcShhKT9hPU1KKGQsYSk6YT4+PTApLE1hdGgu''@;'; put 'put ''bWluKGEsZCl9Z2V0Um93SGVpZ2h0KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLmhvdC5zdHlsZXNIYW5kbGVyLmdldERlZmF1bHRSb3dIZWlnaHQobCk7dmFyIGQ7aWYobDwwKXJldHVybiBudWxsIT09KGQ9dGhp''@;'; put 'put ''cy5oZWFkZXJIZWlnaHQpJiZ2b2lkIDAhPT1kP2Q6YTtjb25zdCBoPXRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCk7aWYodGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuaXNIaWRkZW4oaCkpcmV0dXJuIGE7Y29uc3QgZj10aGlzLnJvd0hlaWdodHNNYXAuZ2V0VmFsdWVBdEluZGV4KGgpO2xldCB2''@;'; put 'put ''PWE7cmV0dXJuIG51bGwhPT1mJiZmPmEmJih2PWYsIXRoaXMuaG90LnN0eWxlc0hhbmRsZXIuaXNDbGFzc2ljVGhlbWUoKSYmbD09PXRoaXMuaG90LnZpZXcuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVSb3coKSYmKHYrPTEpKSx2fWdldENvbHVtbkhlYWRlckhlaWdodCgpe3JldHVybiB0aGlz''@;'; put 'put ''LmhlYWRlckhlaWdodH1nZXRGaXJzdFZpc2libGVSb3coKXt2YXIgbDtyZXR1cm4gbnVsbCE9PShsPXRoaXMuaG90LmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlUm93KCkpJiZ2b2lkIDAhPT1sP2w6LTF9Z2V0TGFzdFZpc2libGVSb3coKXt2YXIgbDtyZXR1cm4gbnVsbCE9PShsPXRoaXMuaG90''@;'; put 'put ''LmdldExhc3RSZW5kZXJlZFZpc2libGVSb3coKSkmJnZvaWQgMCE9PWw/bDotMX1jbGVhckNhY2hlKGwpe3RoaXMuaGVhZGVySGVpZ2h0PW51bGwsQXJyYXkuaXNBcnJheShsKT90aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e2wuZm9yRWFjaChhPT57dGhpcy5yb3dIZWlnaHRzTWFwLnNl''@;'; put 'put ''dFZhbHVlQXRJbmRleChhLG51bGwpfSl9LCEwKTp0aGlzLnJvd0hlaWdodHNNYXAuY2xlYXIoKX1jbGVhckNhY2hlQnlSYW5nZShsKXtjb25zdHtmcm9tOmEsdG86ZH09Im51bWJlciI9PXR5cGVvZiBsP3tmcm9tOmwsdG86bH06bDt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e1FhKE1h''@;'; put 'put ''dGgubWluKGEsZCksTWF0aC5tYXgoYSxkKSxoPT57dGhpcy5yb3dIZWlnaHRzTWFwLnNldFZhbHVlQXRJbmRleChoLG51bGwpfSl9LCEwKX1pc05lZWRSZWNhbGN1bGF0ZSgpe3JldHVybiEhdGhpcy5yb3dIZWlnaHRzTWFwLmdldFZhbHVlcygpLnNsaWNlKDAsdGhpcy5tZWFzdXJlZFJvd3Mp''@;'; put 'put ''LmZpbHRlcihsPT5udWxsPT09bCkubGVuZ3RofWRlc3Ryb3koKXt0aGlzLmdob3N0VGFibGUuY2xlYW4oKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIHMydChjKXtjb25zdCBsPXtmcm9tOjAsdG86dGhpcy5ob3QuY291bnRDb2xzKCktMX07Yy5mb3JFYWNoKGE9Pnt0aGlzLnNhbXBsZXNH''@;'; put 'put ''ZW5lcmF0b3IuZ2VuZXJhdGVSb3dTYW1wbGVzKGEsbCkuZm9yRWFjaCgoaCxmKT0+dGhpcy5naG9zdFRhYmxlLmFkZFJvdyhmLGgpKX0pLHRoaXMuZ2hvc3RUYWJsZS5yb3dzLmxlbmd0aCYmKHRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57dGhpcy5naG9zdFRhYmxlLmdldEhlaWdodHMo''@;'; put 'put ''KGEsZCk9Pntjb25zdCBoPXRoaXMuaG90LnRvUGh5c2ljYWxSb3coYSk7dGhpcy5yb3dIZWlnaHRzTWFwLnNldFZhbHVlQXRJbmRleChoLGQpfSl9LCEwKSx0aGlzLmdob3N0VGFibGUuY2xlYW4oKSl9ZnVuY3Rpb24gbDhlKGMpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0Rmlyc3RSZW5kZXJlZFZp''@;'; put 'put ''c2libGVDb2x1bW4oKSxhPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4KGwpOyExPT09Y3x8YT09PXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFBoeXNpY2FsRnJvbVJlbmRlcmFibGVJbmRleCgwKT9WYSh0aGlzLmhvdC5yb290RWxl''@;'; put 'put ''bWVudCxvOGUpOmlpKHRoaXMuaG90LnJvb3RFbGVtZW50LG84ZSl9ZnVuY3Rpb24gbDJ0KCl7RjIoR2YsdGhpcyxsOGUpLmNhbGwodGhpcyl9ZnVuY3Rpb24gYzJ0KCl7dGhpcy5jYWxjdWxhdGVWaXNpYmxlUm93c0hlaWdodCgpLHRoaXMuaW5Qcm9ncmVzc3x8KEYyKEdmLHRoaXMsczJ0KS5j''@;'; put 'put ''YWxsKHRoaXMsVFYoT2ssdGhpcykpLGE4ZShPayx0aGlzLFtdKSl9ZnVuY3Rpb24gYzhlKGMsbCxhKXtsZXQgZD1jO3JldHVybiBhJiYodGhpcy5jYWxjdWxhdGVSb3dzSGVpZ2h0KGwsdm9pZCAwLCEwKSxkPXRoaXMuZ2V0Um93SGVpZ2h0KGwpKSxkfWZ1bmN0aW9uIHUydChjLGwpe2x8fHRo''@;'; put 'put ''aXMucmVjYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCl9ZnVuY3Rpb24gZDJ0KGMpe2NvbnN0IGw9Yy5yZWR1Y2UoKGEsZCk9PntsZXRbaF09ZDtyZXR1cm4tMT09PWEuaW5kZXhPZihoKSYmYS5wdXNoKGgpLGF9LFtdKTtUVihPayx0aGlzKS5wdXNoKC4uLmwpfWZ1bmN0aW9uIGgydCgpe3RoaXMu''@;'; put 'put ''cmVjYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCksYThlKGZuZSx0aGlzLCEwKX1mdW5jdGlvbiBmMnQoYyl7aWYoIVRWKGZuZSx0aGlzKSlyZXR1cm47Y29uc3QgbD1jLnJlZHVjZSgoYSxkKT0+e3ZhciBoO2NvbnN0IGY9bnVsbD09PShoPWQuYWRkcmVzcyl8fHZvaWQgMD09PWg/dm9pZCAwOmgu''@;'; put 'put ''cm93O2lmKE51bWJlci5pc0ludGVnZXIoZikpe2NvbnN0IHY9dGhpcy5ob3QudG9WaXN1YWxSb3coZik7LTE9PT1hLmluZGV4T2YodikmJmEucHVzaCh2KX1yZXR1cm4gYX0sW10pO1RWKE9rLHRoaXMpLnB1c2goLi4ubCl9Y29uc3QgdThlPW5ldyBNYXAoW1siaW5kZXhlc1NlcXVlbmNlIix7''@;'; put 'put ''Z2V0TGlzdFdpdGhJbnNlcnRlZEl0ZW1zOnNRLGdldExpc3RXaXRoUmVtb3ZlZEl0ZW1zOmhrfV0sWyJwaHlzaWNhbGx5SW5kZXhlZCIse2dldExpc3RXaXRoSW5zZXJ0ZWRJdGVtczp1USxnZXRMaXN0V2l0aFJlbW92ZWRJdGVtczpkUX1dXSksZDhlPWM9PntpZighMT09PXU4ZS5oYXMoYykp''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKGBBbHRlciBzdHJhdGVneSB3aXRoIElEICcke2N9JyBkb2VzIG5vdCBleGlzdC5gKTtyZXR1cm4gdThlLmdldChjKX0se2dldExpc3RXaXRoSW5zZXJ0ZWRJdGVtczpwMnQsZ2V0TGlzdFdpdGhSZW1vdmVkSXRlbXM6ZzJ0fT1kOGUoInBoeXNpY2FsbHlJbmRleGVk''@;'; put 'put ''Iikse2dldExpc3RXaXRoSW5zZXJ0ZWRJdGVtczp5MnQsZ2V0TGlzdFdpdGhSZW1vdmVkSXRlbXM6YjJ0fT1kOGUoInBoeXNpY2FsbHlJbmRleGVkIik7Y29uc3QgaDhlPSJiaW5kUm93c1dpdGhIZWFkZXJzIixmOGU9bmV3IE1hcChbWyJsb29zZSIsY2xhc3MgbTJ0IGV4dGVuZHMgY3Z7Y29u''@;'; put 'put ''c3RydWN0b3IoKXtzdXBlcihsPT5sKX1pbnNlcnQobCxhKXtjb25zdCBkPWNRKHRoaXMuaW5kZXhlZFZhbHVlcyxhKTt0aGlzLmluZGV4ZWRWYWx1ZXM9cDJ0KGQsbCxhLHRoaXMuaW5pdFZhbHVlT3JGbiksc3VwZXIuaW5zZXJ0KGwsYSl9cmVtb3ZlKGwpe2NvbnN0IGE9ZzJ0KHRoaXMuaW5k''@;'; put 'put ''ZXhlZFZhbHVlcyxsKTt0aGlzLmluZGV4ZWRWYWx1ZXM9bFEoYSxsKSxzdXBlci5yZW1vdmUobCl9fV0sWyJzdHJpY3QiLGNsYXNzIF8ydCBleHRlbmRzIGN2e2NvbnN0cnVjdG9yKCl7c3VwZXIobD0+bCl9aW5zZXJ0KGwsYSl7dGhpcy5pbmRleGVkVmFsdWVzPXkydCh0aGlzLmluZGV4ZWRW''@;'; put 'put ''YWx1ZXMsbCxhLChkLGgpPT50aGlzLmdldE5leHRWYWx1ZShoKSksc3VwZXIuaW5zZXJ0KGwsYSl9cmVtb3ZlKGwpe3RoaXMuaW5kZXhlZFZhbHVlcz1iMnQodGhpcy5pbmRleGVkVmFsdWVzLGwpLHN1cGVyLnJlbW92ZShsKX1nZXROZXh0VmFsdWUobCl7cmV0dXJuIE1hdGgubWF4KC4uLnRo''@;'; put 'put ''aXMuZ2V0VmFsdWVzKCkpKzErbH19XV0pO3ZhciBwOGU9bmV3IFdlYWtTZXQ7Y2xhc3MgRDJ0IGV4dGVuZHMgTXN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIEMydChjLGwpeyhmdW5jdGlvbiBTMnQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVy''@;'; put 'put ''cm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxwOGUpLGZ1bmN0aW9uIE0ydChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24geDJ0KGMpe3ZhciBsPWZ1bmN0aW9uIEUydChjLGwp''@;'; put 'put ''e2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9Q''@;'; put 'put ''cmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1''@;'; put 'put ''ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsImhlYWRlckluZGV4ZXMiLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBoOGV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjEwfWlzRW5h''@;'; put 'put ''YmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtoOGVdfWVuYWJsZVBsdWdpbigpe3ZhciBsO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47Y29uc3QgYT1udWxsIT09KGw9ZjhlLmdldCh0aGlzLmdldFNldHRpbmcoKSkpJiZ2b2lkIDAhPT1sP2w6ZjhlLmdldCgibG9vc2UiKTt0''@;'; put 'put ''aGlzLmhlYWRlckluZGV4ZXM9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAoImJpbmRSb3dzV2l0aEhlYWRlcnMiLG5ldyBhKSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0hlYWRlciIsZD0+ZnVuY3Rpb24gVDJ0KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09''@;'; put 'put ''bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX0ocDhlLHRoaXMsSTJ0KS5jYWxsKHRoaXMsZCkpLHN1cGVyLmVuYWJsZVBsdWdpbigpfWRpc2Fi''@;'; put 'put ''bGVQbHVnaW4oKXt0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKCJiaW5kUm93c1dpdGhIZWFkZXJzIiksc3VwZXIuZGlzYWJsZVBsdWdpbigpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIEkydChjKXtyZXR1cm4gdGhpcy5oZWFkZXJJbmRleGVzLmdl''@;'; put 'put ''dFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KGMpKX1mdW5jdGlvbiBnOGUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9u''@;'; put 'put ''IG04ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gTzJ0KGMpe3ZhciBsPWZ1bmN0aW9uIFAydChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0''@;'; put 'put ''Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJv''@;'; put 'put ''bCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gdjhlKGMsbCl7cmV0dXJuIGMuZ2V0KGJDKGMsbCkpfWZ1bmN0aW9u''@;'; put 'put ''IHBuZShjLGwsYSl7cmV0dXJuIGMuc2V0KGJDKGMsbCksYSksYX1mdW5jdGlvbiBiQyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlz''@;'; put 'put ''IG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgQVY9ImNvbGxhcHNpYmxlQ29sdW1ucyIsSDJ0PVsibmVzdGVkSGVhZGVycyJdLF9DPSJjb2xsYXBzaWJsZUluZGljYXRvciIseThlPUFWLGI4ZT1uZXcgTWFwKFtbImNvbGxhcHNlIix7aGlkZUNvbHVtbjohMCxiZWZvcmVIb29r''@;'; put 'put ''OiJiZWZvcmVDb2x1bW5Db2xsYXBzZSIsYWZ0ZXJIb29rOiJhZnRlckNvbHVtbkNvbGxhcHNlIn1dLFsiZXhwYW5kIix7aGlkZUNvbHVtbjohMSxiZWZvcmVIb29rOiJiZWZvcmVDb2x1bW5FeHBhbmQiLGFmdGVySG9vazoiYWZ0ZXJDb2x1bW5FeHBhbmQifV1dKTt2YXIgd0M9bmV3IFdlYWtN''@;'; put 'put ''YXAsRms9bmV3IFdlYWtTZXQ7Y2xhc3MgTjJ0IGV4dGVuZHMgTXN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIFIydChjLGwpe2c4ZShjLGwpLGwuYWRkKGMpfSh0aGlzLEZrKSxtOGUodGhpcywibmVzdGVkSGVhZGVyc1BsdWdpbiIsbnVsbCksbThlKHRoaXMs''@;'; put 'put ''ImhlYWRlclN0YXRlTWFuYWdlciIsbnVsbCksZnVuY3Rpb24gTDJ0KGMsbCxhKXtnOGUoYyxsKSxsLnNldChjLGEpfSh0aGlzLHdDLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBBVn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyOTB9c3RhdGljIGdl''@;'; put 'put ''dCBQTFVHSU5fREVQUygpe3JldHVyblsicGx1Z2luOk5lc3RlZEhlYWRlcnMiXX1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybltBViwuLi5IMnRdfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtBVl19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztp''@;'; put 'put ''Zih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0e25lc3RlZEhlYWRlcnM6YX09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTthfHxvcygiWW91IG5lZWQgdG8gY29uZmlndXJlIHRoZSBOZXN0ZWQgSGVhZGVycyBwbHVnaW4gaW4gb3JkZXIgdG8gdXNlIGNvbGxhcHNpYmxlIGhlYWRlcnMuIikscG5l''@;'; put 'put ''KHdDLHRoaXMsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuY3JlYXRlQW5kUmVnaXN0ZXJJbmRleE1hcCh0aGlzLnBsdWdpbk5hbWUsImhpZGluZyIpKSx0aGlzLm5lc3RlZEhlYWRlcnNQbHVnaW49dGhpcy5ob3QuZ2V0UGx1Z2luKCJuZXN0ZWRIZWFkZXJzIiksdGhpcy5oZWFkZXJTdGF0''@;'; put 'put ''ZU1hbmFnZXI9dGhpcy5uZXN0ZWRIZWFkZXJzUGx1Z2luLmdldFN0YXRlTWFuYWdlcigpLHRoaXMuYWRkSG9vaygiaW5pdCIsKCk9PmJDKEZrLHRoaXMsajJ0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGJDKEZrLGwsejJ0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q29sSGVhZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFy''@;'; put 'put ''cmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBiQyhGayxsLFYydCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLChkLGgsZik9PmJDKEZrLHRoaXMsQjJ0KS5jYWxsKHRoaXMsZCxoLGYpKSx0aGlzLnJlZ2lzdGVy''@;'; put 'put ''U2hvcnRjdXRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCksdGhpcy51cGRhdGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXtpZih0aGlzLmhvdC52aWV3KXtpZighdGhpcy5uZXN0ZWRIZWFkZXJzUGx1Z2luLmRldGVjdGVkT3ZlcmxhcHBlZEhlYWRlcnMpe2NvbnN0e2NvbGxhcHNpYmxlQ29sdW1u''@;'; put 'put ''czpsfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpOyJib29sZWFuIj09dHlwZW9mIGw/dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIubWFwU3RhdGUoYT0+KHtjb2xsYXBzaWJsZTphLm9yaWdDb2xzcGFuPjF9KSk6QXJyYXkuaXNBcnJheShsKSYmKHRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLm1hcFN0''@;'; put 'put ''YXRlKCgpPT4oe2NvbGxhcHNpYmxlOiExfSkpLHRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLm1lcmdlU3RhdGVXaXRoKGwpKX1zdXBlci51cGRhdGVQbHVnaW4oKX19ZGlzYWJsZVBsdWdpbigpe3RoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1l''@;'; put 'put ''KSxwbmUod0MsdGhpcyxudWxsKSx0aGlzLm5lc3RlZEhlYWRlcnNQbHVnaW49bnVsbCx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSx0aGlzLmNsZWFyQnV0dG9ucygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdl''@;'; put 'put ''cigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dCh7a2V5czpbWyJFbnRlciJdXSxjYWxsYmFjazooKT0+e3ZhciBsO2NvbnN0e3JvdzphLGNvbDpkfT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkuaGlnaGxpZ2h0LHtjb2xsYXBzaWJsZTpoLGlzQ29sbGFwc2VkOmYs''@;'; put 'put ''Y29sdW1uSW5kZXg6dn09bnVsbCE9PShsPXRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLmdldEhlYWRlclRyZWVOb2RlRGF0YShhLGQpKSYmdm9pZCAwIT09bD9sOnt9O2lmKGgpcmV0dXJuIGY/dGhpcy5leHBhbmRTZWN0aW9uKHtyb3c6YSxjb2w6dn0pOnRoaXMuY29sbGFwc2VTZWN0aW9uKHty''@;'; put 'put ''b3c6YSxjb2w6dn0pLCExfSxydW5Pbmx5SWY6KCk9Pnt2YXIgbCxhO3JldHVybihudWxsPT09KGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5pc1NpbmdsZSgpKSYmKG51bGw9PT0oYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0''@;'; put 'put ''aXZlKCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmhpZ2hsaWdodC5pc0hlYWRlcigpKX0sZ3JvdXA6eThlLHJlbGF0aXZlVG9Hcm91cDpONixwb3NpdGlvbjoiYmVmb3JlIn0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJn''@;'; put 'put ''cmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cCh5OGUpfWNsZWFyQnV0dG9ucygpe2lmKCF0aGlzLmhvdC52aWV3KXJldHVybjtjb25zdCBsPXRoaXMuaG90LnZpZXcuX3d0LmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGgsYT10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLlRI''@;'; put 'put ''RUFELGQ9dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy50b3BPdmVybGF5LmNsb25lLnd0VGFibGUuVEhFQUQsaD10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheT90aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnRvcElubGluZVN0''@;'; put 'put ''YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZS53dFRhYmxlLlRIRUFEOm51bGwsZj1mdW5jdGlvbih2KXt2JiZ2LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodil9O1FhKDAsbC0xLHY9Pntjb25zdCBNPWEuY2hpbGROb2Rlc1t2XSxEPWQuY2hpbGROb2Rlc1t2XSxVPWg/aC5jaGlsZE5vZGVzW3ZdOm51''@;'; put 'put ''bGw7UWEoMCxNLmNoaWxkTm9kZXMubGVuZ3RoLTEsdGU9PntsZXQgb2U9TS5jaGlsZE5vZGVzW3RlXS5xdWVyeVNlbGVjdG9yKGAuJHtfQ31gKTtmKG9lKSxEJiZELmNoaWxkTm9kZXNbdGVdJiYob2U9RC5jaGlsZE5vZGVzW3RlXS5xdWVyeVNlbGVjdG9yKGAuJHtfQ31gKSxmKG9lKSksaCYm''@;'; put 'put ''VSYmVS5jaGlsZE5vZGVzW3RlXSYmKG9lPVUuY2hpbGROb2Rlc1t0ZV0ucXVlcnlTZWxlY3RvcihgLiR7X0N9YCksZihvZSkpfSl9KX1leHBhbmRTZWN0aW9uKGwpe3RoaXMudG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKFtsXSwiZXhwYW5kIil9Y29sbGFwc2VTZWN0aW9uKGwpe3RoaXMudG9n''@;'; put 'put ''Z2xlQ29sbGFwc2libGVTZWN0aW9uKFtsXSwiY29sbGFwc2UiKX10b2dnbGVBbGxDb2xsYXBzaWJsZVNlY3Rpb25zKGwpe2NvbnN0IGE9dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIubWFwTm9kZXMoZD0+e2NvbnN0e2NvbGxhcHNpYmxlOmgsb3JpZ0NvbHNwYW46ZixoZWFkZXJMZXZlbDp2LGNv''@;'; put 'put ''bHVtbkluZGV4Ok0saXNDb2xsYXBzZWQ6RH09ZDtpZighMD09PWgmJmY+MSYmKEQmJiJleHBhbmQiPT09bHx8IUQmJiJjb2xsYXBzZSI9PT1sKSlyZXR1cm57cm93OnRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLmxldmVsVG9Sb3dDb29yZHModiksY29sOk19fSk7dGhpcy50b2dnbGVDb2xsYXBz''@;'; put 'put ''aWJsZVNlY3Rpb24oYSxsKX1jb2xsYXBzZUFsbCgpe3RoaXMudG9nZ2xlQWxsQ29sbGFwc2libGVTZWN0aW9ucygiY29sbGFwc2UiKX1leHBhbmRBbGwoKXt0aGlzLnRvZ2dsZUFsbENvbGxhcHNpYmxlU2VjdGlvbnMoImV4cGFuZCIpfXRvZ2dsZUNvbGxhcHNpYmxlU2VjdGlvbihsLGEpe2lm''@;'; put 'put ''KCFiOGUuaGFzKGEpKXRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgYWN0aW9uIGlzIHBhc3NlZCAoJHthfSkuYCk7aWYoIUFycmF5LmlzQXJyYXkobCkpcmV0dXJuO2NvbnN0IGQ9UzYobCx3ZT0+e2xldHtyb3c6RmV9PXdlO3JldHVybiBGZTwwfSk7bGV0IGg9ZC5sZW5ndGg+MDtLbihk''@;'; put 'put ''LHdlPT57dmFyIEZlO2xldHtyb3c6V2UsY29sOm50fT13ZTtjb25zdHtjb2xsYXBzaWJsZTpkdCxpc0NvbGxhcHNlZDptdH09bnVsbCE9PShGZT10aGlzLmhlYWRlclN0YXRlTWFuYWdlci5nZXRIZWFkZXJTZXR0aW5ncyhXZSxudCkpJiZ2b2lkIDAhPT1GZT9GZTp7fTtpZighZHR8fG10JiYi''@;'; put 'put ''Y29sbGFwc2UiPT09YXx8IW10JiYiZXhwYW5kIj09PWEpcmV0dXJuIGg9ITEsITF9KTtjb25zdCBmPVtdLHY9W107aCYmS24oZCx3ZT0+e2xldHtyb3c6RmUsY29sOldlfT13ZTtjb25zdHtjb2xzcGFuQ29tcGVuc2F0aW9uOm50LGFmZmVjdGVkQ29sdW1uczpkdCxyb2xsYmFja01vZGlmaWNh''@;'; put 'put ''dGlvbjptdH09dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIudHJpZ2dlck5vZGVNb2RpZmljYXRpb24oYSxGZSxXZSk7bnQ+MCYmKHYucHVzaCguLi5kdCksZi5wdXNoKG10KSl9KTtjb25zdCBNPXRoaXMuZ2V0Q29sbGFwc2VkQ29sdW1ucygpO2xldCBEPVtdOyJjb2xsYXBzZSI9PT1hP0Q9UDRl''@;'; put 'put ''KFsuLi5NLC4uLnZdKToiZXhwYW5kIj09PWEmJihEPVM2KE0sd2U9PiF2LmluY2x1ZGVzKHdlKSkpO2NvbnN0IFU9YjhlLmdldChhKTtpZighMT09PXRoaXMuaG90LnJ1bkhvb2tzKFUuYmVmb3JlSG9vayxNLEQsaCkpcmV0dXJuIHZvaWQgS24oZix3ZT0+e3dlKCl9KTt0aGlzLmhvdC5iYXRj''@;'; put 'put ''aEV4ZWN1dGlvbigoKT0+e0tuKHYsd2U9Pnt2OGUod0MsdGhpcykuc2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4od2UpLFUuaGlkZUNvbHVtbil9KX0sITApO2NvbnN0IG9lPXRoaXMuZ2V0Q29sbGFwc2VkQ29sdW1ucygpLmxlbmd0aCE9PU0ubGVuZ3RoLHZlPXRo''@;'; put 'put ''aXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZigiY29sbGFwc2UiPT09YSYmb2UmJnZlKXtjb25zdHtyb3c6d2UsY29sOkZlfT12ZS5oaWdobGlnaHQ7aWYoKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmlzSGlkZGVuKHdlKXx8dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuaXNI''@;'; put 'put ''aWRkZW4oRmUpKSYmdi5pbmNsdWRlcyhGZSkpe2NvbnN0IG50PXdlPj0wP3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh3ZSwxLCEwKTp3ZSxkdD1GZT49MD90aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgo''@;'; put 'put ''RmUsMSwhMCk6RmU7bnVsbCE9PW50JiZudWxsIT09ZHQmJnRoaXMuaG90LnNlbGVjdENlbGwobnQsZHQpfX10aGlzLmhvdC5ydW5Ib29rcyhVLmFmdGVySG9vayxNLEQsaCxvZSksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLmhvdC5yZW5kZXIoKX1nZXRDb2xsYXBz''@;'; put 'put ''ZWRDb2x1bW5zKCl7cmV0dXJuIHY4ZSh3Qyx0aGlzKS5nZXRIaWRkZW5JbmRleGVzKCl9ZGVzdHJveSgpe3BuZSh3Qyx0aGlzLG51bGwpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gVjJ0KGMsbCxhKXt2YXIgZDtjb25zdHtjb2xsYXBzaWJsZTpoLG9yaWdDb2xzcGFuOmYsaXNDb2xsYXBz''@;'; put 'put ''ZWQ6dn09bnVsbCE9PShkPXRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLmdldEhlYWRlclNldHRpbmdzKGEsYykpJiZ2b2lkIDAhPT1kP2Q6e30sTT1oJiZmPjEmJmM+PXRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQsRD10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFU''@;'; put 'put ''YWdzO2xldCBVPWwucXVlcnlTZWxlY3RvcihgLiR7X0N9YCk7dmFyIHRlO000KGwsW0ZmKCIiKVswXV0pLE0/KFV8fChVPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxpaShVLF9DKSxsLnF1ZXJ5U2VsZWN0b3IoImRpdjpmaXJzdC1jaGlsZCIpLmFwcGVuZENo''@;'; put 'put ''aWxkKFUpKSxWYShVLFsiY29sbGFwc2VkIiwiZXhwYW5kZWQiXSksdj8oaWkoVSwiY29sbGFwc2VkIiksQTYoVSwiKyIpLEQmJlphKGwsLi4uRmYoITEpKSk6KGlpKFUsImV4cGFuZGVkIiksQTYoVSwiLSIpLEQmJlphKGwsLi4uRmYoITApKSksRCYmWmEoVSwuLi5YOSgpKSk6bnVsbD09PSh0''@;'; put 'put ''ZT1VKXx8dm9pZCAwPT09dGV8fHRlLnJlbW92ZSgpfWZ1bmN0aW9uIEIydChjLGwpe0NvKGMudGFyZ2V0LF9DKSYmKENvKGMudGFyZ2V0LCJleHBhbmRlZCIpPyh0aGlzLmV2ZW50TWFuYWdlci5maXJlRXZlbnQoYy50YXJnZXQsIm1vdXNldXAiKSx0aGlzLnRvZ2dsZUNvbGxhcHNpYmxlU2Vj''@;'; put 'put ''dGlvbihbbF0sImNvbGxhcHNlIikpOkNvKGMudGFyZ2V0LCJjb2xsYXBzZWQiKSYmKHRoaXMuZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChjLnRhcmdldCwibW91c2V1cCIpLHRoaXMudG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKFtsXSwiZXhwYW5kIikpLEUyKGMpKX1mdW5jdGlvbiBqMnQoKXt0''@;'; put 'put ''aGlzLnVwZGF0ZVBsdWdpbigpfWZ1bmN0aW9uIHoydChjLGwpe2x8fHRoaXMudXBkYXRlUGx1Z2luKCl9ZnVuY3Rpb24geHYoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFUydChjKXt2YXIgbD1mdW5jdGlvbiBaMnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3Zh''@;'; put 'put ''ciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVl''@;'; put 'put ''LiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0''@;'; put 'put ''YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IFcydD1bInNvcnRFbXB0eUNlbGxzIiwiaW5kaWNhdG9yIiwiaGVhZGVyQWN0aW9uIiwiY29tcGFyZUZ1bmN0aW9uRmFjdG9yeSJdO2NsYXNzIEsydHtjb25zdHJ1Y3RvcihsLGEpe3h2KHRoaXMsImhvdCIsdm9pZCAwKSx4dih0aGlzLCJzb3J0aW5n''@;'; put 'put ''U3RhdGVzIixuZXcga04pLHh2KHRoaXMsInNvcnRFbXB0eUNlbGxzIiwhMSkseHYodGhpcywiaW5kaWNhdG9yIiwhMCkseHYodGhpcywiaGVhZGVyQWN0aW9uIiwhMCkseHYodGhpcywiY29tcGFyZUZ1bmN0aW9uRmFjdG9yeSIsdm9pZCAwKSx4dih0aGlzLCJtYXBOYW1lIix2b2lkIDApLHRo''@;'; put 'put ''aXMuaG90PWwsdGhpcy5tYXBOYW1lPWEsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAoYSx0aGlzLnNvcnRpbmdTdGF0ZXMpfXVwZGF0ZUFsbENvbHVtbnNQcm9wZXJ0aWVzKGwpe21vKGwpJiZhcyhsLChhLGQpPT57VzJ0LmluY2x1ZGVzKGQpJiYodGhpc1tkXT1hKX0p''@;'; put 'put ''fWdldEFsbENvbHVtbnNQcm9wZXJ0aWVzKCl7Y29uc3QgbD17c29ydEVtcHR5Q2VsbHM6dGhpcy5zb3J0RW1wdHlDZWxscyxpbmRpY2F0b3I6dGhpcy5pbmRpY2F0b3IsaGVhZGVyQWN0aW9uOnRoaXMuaGVhZGVyQWN0aW9ufTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5jb21wYXJl''@;'; put 'put ''RnVuY3Rpb25GYWN0b3J5JiYobC5jb21wYXJlRnVuY3Rpb25GYWN0b3J5PXRoaXMuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeSksbH1nZXRTb3J0T3JkZXJPZkNvbHVtbihsKXt2YXIgYTtyZXR1cm4gbnVsbD09PShhPXRoaXMuc29ydGluZ1N0YXRlcy5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3Qu''@;'; put 'put ''dG9QaHlzaWNhbENvbHVtbihsKSkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnNvcnRPcmRlcn1nZXRJbmRleE9mQ29sdW1uSW5Tb3J0UXVldWUobCl7cmV0dXJuIGw9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSx0aGlzLnNvcnRpbmdTdGF0ZXMuZ2V0RW50cmllcygpLmZpbmRJbmRleChh''@;'; put 'put ''PT57bGV0W2RdPWE7cmV0dXJuIGQ9PT1sfSl9Z2V0TnVtYmVyT2ZTb3J0ZWRDb2x1bW5zKCl7cmV0dXJuIHRoaXMuc29ydGluZ1N0YXRlcy5nZXRMZW5ndGgoKX1pc0xpc3RPZlNvcnRlZENvbHVtbnNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5nZXROdW1iZXJPZlNvcnRlZENvbHVtbnMoKX1p''@;'; put 'put ''c0NvbHVtblNvcnRlZChsKXtyZXR1cm4gbW8odGhpcy5zb3J0aW5nU3RhdGVzLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpKSl9Z2V0U29ydFN0YXRlcygpe3JldHVybiBudWxsPT09dGhpcy5zb3J0aW5nU3RhdGVzP1tdOnRoaXMuc29ydGluZ1N0YXRlcy5n''@;'; put 'put ''ZXRFbnRyaWVzKCkubWFwKGE9PntsZXRbZCxoXT1hO3JldHVybntjb2x1bW46dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oZCksLi4uaH19KX1nZXRDb2x1bW5Tb3J0U3RhdGUobCl7Y29uc3QgYT10aGlzLmdldFNvcnRPcmRlck9mQ29sdW1uKGwpO2lmKE1hKGEpKXJldHVybntjb2x1bW46bCxz''@;'; put 'put ''b3J0T3JkZXI6YX19c2V0U29ydFN0YXRlcyhsKXt0aGlzLnNvcnRpbmdTdGF0ZXMuY2xlYXIoKTtmb3IobGV0IGE9MDthPGwubGVuZ3RoO2ErPTEpdGhpcy5zb3J0aW5nU3RhdGVzLnNldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGxbYV0uY29sdW1uKSx7c29ydE9y''@;'; put 'put ''ZGVyOmxbYV0uc29ydE9yZGVyfSl9ZGVzdHJveSgpe3RoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5tYXBOYW1lKSx0aGlzLnNvcnRpbmdTdGF0ZXM9bnVsbH19ZnVuY3Rpb24gXzhlKGMsbCxhKXtjb25zdCBkPWwubG9jYWxlO3JldHVybiBmdW5jdGlvbiho''@;'; put 'put ''LGYpe2NvbnN0e3NvcnRFbXB0eUNlbGxzOnZ9PWE7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBoJiYoaD1oLnRvTG9jYWxlTG93ZXJDYXNlKGQpKSwic3RyaW5nIj09dHlwZW9mIGYmJihmPWYudG9Mb2NhbGVMb3dlckNhc2UoZCkpLGg9PT1mP0I0OnR1KGgpP3R1KGYpP0I0OnYmJiJhc2MiPT09''@;'; put 'put ''Yz9vdTpzdTp0dShmKT92JiYiYXNjIj09PWM/c3U6b3U6aXNOYU4oaCkmJiFpc05hTihmKT8iYXNjIj09PWM/c3U6b3U6IWlzTmFOKGgpJiZpc05hTihmKXx8KGlzTmFOKGgpfHxpc05hTihmKXx8KGg9cGFyc2VGbG9hdChoKSxmPXBhcnNlRmxvYXQoZikpLGg8Zik/ImFzYyI9PT1jP291OnN1''@;'; put 'put ''Omg+Zj8iYXNjIj09PWM/c3U6b3U6QjR9fWNvbnN0e3JlZ2lzdGVyOkhrLGdldEl0ZW06QzhlLGhhc0l0ZW06aWZ0fT1OZigic29ydGluZy5jb21wYXJlRnVuY3Rpb25GYWN0b3J5Iikse3JlZ2lzdGVyOlM4ZSxnZXRJdGVtOmFmdH09TmYoInNvcnRpbmcubWFpblNvcnRDb21wYXJhdG9yIik7''@;'; put 'put ''ZnVuY3Rpb24gTThlKGMpe3JldHVybiBpZnQoYyk/QzhlKGMpOkM4ZSgiZGVmYXVsdCIpfUhrKCJjaGVja2JveCIsZnVuY3Rpb24gSjJ0KGMsbCxhKXtjb25zdCBkPWwuY2hlY2tlZFRlbXBsYXRlLGg9bC51bmNoZWNrZWRUZW1wbGF0ZSx7c29ydEVtcHR5Q2VsbHM6Zn09YTtyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24odixNKXtjb25zdCBEPXR1KHYpLFU9dHUoTSksdGU9RD9oOnYsb2U9VT9oOk0sdmU9dGU9PT1ofHx0ZT09PWQsd2U9b2U9PT1ofHxvZT09PWQ7aWYoITE9PT1mKXtpZihEJiYhMT09PVUpcmV0dXJuIHN1O2lmKCExPT09RCYmVSlyZXR1cm4gb3V9cmV0dXJuITE9PT12ZSYmd2U/ImFz''@;'; put 'put ''YyI9PT1jP291OnN1OnZlJiYhMT09PXdlPyJhc2MiPT09Yz9zdTpvdTohMT09PXZlJiYhMT09PXdlP184ZShjLGwsYSkodixNKTp0ZT09PWgmJm9lPT09ZD8iYXNjIj09PWM/b3U6c3U6dGU9PT1kJiZvZT09PWg/ImFzYyI9PT1jP3N1Om91OkI0fX0pLEhrKCJkYXRlIixmdW5jdGlvbiBlZnQo''@;'; put 'put ''YyxsLGEpe3JldHVybiBrOGUoYyxsLmRhdGVGb3JtYXQsYSl9KSxIaygiZGVmYXVsdCIsXzhlKSxIaygibnVtZXJpYyIsZnVuY3Rpb24gWDJ0KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oZCxoKXtjb25zdCBmPXBhcnNlRmxvYXQoZCksdj1wYXJzZUZsb2F0KGgpLHtzb3J0RW1wdHlDZWxsczpN''@;'; put 'put ''fT1hO2lmKGY9PT12fHxpc05hTihmKSYmaXNOYU4odikpcmV0dXJuIEI0O2lmKE0pe2lmKHR1KGQpKXJldHVybiJhc2MiPT09Yz9vdTpzdTtpZih0dShoKSlyZXR1cm4iYXNjIj09PWM/c3U6b3V9cmV0dXJuIGlzTmFOKGYpP3N1OmlzTmFOKHYpP291OmY8dj8iYXNjIj09PWM/b3U6c3U6Zj52''@;'; put 'put ''PyJhc2MiPT09Yz9zdTpvdTpCNH19KSxIaygidGltZSIsZnVuY3Rpb24gbmZ0KGMsbCxhKXtyZXR1cm4gazhlKGMsbC50aW1lRm9ybWF0LGEpfSk7Y29uc3QgQjQ9MCxvdT0tMSxzdT0xLGtWPSJhc2MiLERWPSJkZXNjIjtmdW5jdGlvbiBFOGUoYyl7aWYoYyE9PURWKXJldHVybiBjPT09a1Y/''@;'; put 'put ''RFY6a1Z9ZnVuY3Rpb24gVDhlKGMpe3JldHVybiBjLnF1ZXJ5U2VsZWN0b3IoIi5jb2xIZWFkZXIiKX1mdW5jdGlvbiBBOGUoYyxsKXtpZihjPDB8fCFsLnBhcmVudE5vZGUpcmV0dXJuITE7Y29uc3QgYT1sLnBhcmVudE5vZGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzO3JldHVybiBBcnJheS5m''@;'; put 'put ''cm9tKGEpLmluZGV4T2YobC5wYXJlbnROb2RlKS1hLmxlbmd0aD09LTF9ZnVuY3Rpb24gZ25lKGMsbCxhKXtyZXR1cm4tMT09PWMmJmw+PTAmJiExPT09STYoYSl9ZnVuY3Rpb24gazhlKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oZCxoKXtjb25zdHtzb3J0RW1wdHlDZWxsczpmfT1hO2lmKGQ9''@;'; put 'put ''PT1oKXJldHVybiBCNDtpZih0dShkKSlyZXR1cm4gdHUoaCk/QjQ6ZiYmImFzYyI9PT1jP291OnN1O2lmKHR1KGgpKXJldHVybiBmJiYiYXNjIj09PWM/c3U6b3U7Y29uc3Qgdj0kcyhkLGwpLE09JHMoaCxsKTtyZXR1cm4gdi5pc1ZhbGlkKCk/TS5pc1ZhbGlkKCk/TS5pc0FmdGVyKHYpPyJh''@;'; put 'put ''c2MiPT09Yz9vdTpzdTpNLmlzQmVmb3JlKHYpPyJhc2MiPT09Yz9zdTpvdTpCNDpvdTpzdX19Y29uc3QgRDhlPSJpbmRpY2F0b3JEaXNhYmxlZCIsSThlPSJjb2x1bW5Tb3J0aW5nIixSOGU9InNvcnRBY3Rpb24iLEw4ZT1uZXcgTWFwKFtba1YsImFzY2VuZGluZyJdLFtEViwiZGVzY2VuZGlu''@;'; put 'put ''ZyJdXSk7ZnVuY3Rpb24gSVYoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHZmdChjKXt2YXIgbD1mdW5jdGlvbiB5ZnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwo''@;'; put 'put ''YyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIp''@;'; put 'put ''O3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIENDKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBSVj0iY29sdW1uU29ydGluZyIsTFY9ImFwcGVuZCIsTzhlPVJW''@;'; put 'put ''O1M4ZShSVixmdW5jdGlvbiBwZnQoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSxkKXtjb25zdFssLi4uaF09YSxbLC4uLmZdPWQ7cmV0dXJuIGZ1bmN0aW9uKCl7Y29uc3QgRD1jWzBdLFU9bFswXSx0ZT1oWzBdLG9lPWZbMF0sdmU9VS5jb2x1bW5Tb3J0aW5nO3JldHVybih2ZS5jb21wYXJlRnVu''@;'; put 'put ''Y3Rpb25GYWN0b3J5P3ZlLmNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk6TThlKFUudHlwZSkpKEQsVSx2ZSkodGUsb2UpfSgpfX0pLEFhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb2x1bW5Tb3J0IiksQWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29sdW1uU29ydCIp''@;'; put 'put ''O2NvbnN0IE5rPW5ldyBXZWFrTWFwO3ZhciBFdj1uZXcgV2Vha1NldDtjbGFzcyBQOGUgZXh0ZW5kcyBNc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gZ2Z0KGMsbCl7KGZ1bmN0aW9uIG1mdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3Io''@;'; put 'put ''IkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLEV2KSxJVih0aGlzLCJjb2x1bW5TdGF0ZXNNYW5hZ2VyIixudWxsKSxJVih0aGlzLCJjb2x1bW5NZXRhQ2FjaGUiLG51bGwpLElWKHRo''@;'; put 'put ''aXMsInBsdWdpbktleSIsUlYpLElWKHRoaXMsImluZGV4ZXNTZXF1ZW5jZUNhY2hlIixudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gUlZ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gNTB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0''@;'; put 'put ''aW5ncygpW3RoaXMucGx1Z2luS2V5XX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO2lmKE5rLmhhcyh0aGlzLmhvdCkmJk5rLmdldCh0aGlzLmhvdCkhPT10aGlzLnBsdWdpbktleSlyZXR1cm4gdGhpcy5ob3QudXBkYXRlU2V0dGluZ3Moe1t0aGlzLnBsdWdpbktleV06ITF9KSx2b2lkIGZ1''@;'; put 'put ''bmN0aW9uIGNmdChjLGwpe29zKFhzYFBsdWdpbnMgXGBjb2x1bW5Tb3J0aW5nXGAgYW5kIFxgbXVsdGlDb2x1bW5Tb3J0aW5nXGAgc2hvdWxkIG5vdCBiZSBlbmFibGVkIHNpbXVsdGFuZW91c2x5Llx4MjAKICAgIE9ubHkgXGAke2N9XGAgd2lsbCB3b3JrLiBUaGUgXGAke2x9XGAgcGx1Z2lu''@;'; put 'put ''IHdpbGwgcmVtYWluIGRpc2FibGVkLmApfShOay5nZXQodGhpcy5ob3QpLHRoaXMucGx1Z2luS2V5KTt0aGlzLmVuYWJsZWR8fChOay5zZXQodGhpcy5ob3QsdGhpcy5wbHVnaW5LZXkpLHRoaXMuY29sdW1uU3RhdGVzTWFuYWdlcj1uZXcgSzJ0KHRoaXMuaG90LGAke3RoaXMucGx1Z2luS2V5''@;'; put 'put ''fS5zb3J0aW5nU3RhdGVzYCksdGhpcy5jb2x1bW5NZXRhQ2FjaGU9bmV3IEY2KGE9PntsZXQgZD10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihhKTtyZXR1cm4gbnVsbD09PWQmJihkPWEpLHRoaXMuZ2V0TWVyZ2VkUGx1Z2luU2V0dGluZ3MoZCl9KSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBl''@;'; put 'put ''ci5yZWdpc3Rlck1hcChgJHt0aGlzLnBsdWdpbktleX0uY29sdW1uTWV0YWAsdGhpcy5jb2x1bW5NZXRhQ2FjaGUpLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIiLChhLGQpPT5DQyhFdix0aGlzLHdmdCkuY2FsbCh0aGlzLGEsZCkpLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxs''@;'; put 'put ''TW91c2VEb3duIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBDQyhFdixsLFNmdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbE1vdXNlRG93biIs''@;'; put 'put ''KGEsZCk9PnRoaXMub25BZnRlck9uQ2VsbE1vdXNlRG93bihhLGQpKSx0aGlzLmFkZEhvb2soImFmdGVySW5pdCIsKCk9PkNDKEV2LHRoaXMsbW5lKS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgs''@;'; put 'put ''ZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIENDKEV2LGwsQ2Z0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmhvdC52aWV3JiZDQyhFdix0aGlzLG1uZSkuY2FsbCh0aGlzKSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZW5hYmxlUGx1Z2lu''@;'; put 'put ''KCkpfWRpc2FibGVQbHVnaW4oKXtjb25zdCBsPShhLGQpPT57Y29uc3QgaD1UOGUoZCk7ITE9PT1BOGUoYSxkKXx8bnVsbD09PWh8fHRoaXMudXBkYXRlSGVhZGVyQ2xhc3NlcyhoKX07TmsuZGVsZXRlKHRoaXMuaG90KSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsbCks''@;'; put 'put ''dGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsKCk9Pnt0aGlzLmhvdC5yZW1vdmVIb29rKCJhZnRlckdldENvbEhlYWRlciIsbCl9KSx0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e251bGwhPT10aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlJiYodGhpcy5ob3Qucm93''@;'; put 'put ''SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUuZ2V0VmFsdWVzKCkpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5LZXkpLHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGU9bnVsbCl9LCEwKSx0aGlz''@;'; put 'put ''LmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKGAke3RoaXMucGx1Z2luS2V5fS5jb2x1bW5NZXRhYCksdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmRlc3Ryb3koKSx0aGlzLmNvbHVtbk1ldGFDYWNoZT1udWxsLHRoaXMuY29sdW1uU3RhdGVzTWFuYWdlcj1udWxsLHRoaXMu''@;'; put 'put ''dW5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dCh7a2V5czpbWyJFbnRlciJdXSxjYWxsYmFjazooKT0+e2NvbnN0e2hp''@;'; put 'put ''Z2hsaWdodDpsfT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7cmV0dXJuIHRoaXMuc29ydCh0aGlzLmdldENvbHVtbk5leHRDb25maWcobC5jb2wpKSwhMX0scnVuT25seUlmOigpPT57dmFyIGwsYTtjb25zdCBkPW51bGw9PT0obD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdl''@;'; put 'put ''QWN0aXZlKCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmhpZ2hsaWdodDtyZXR1cm4gZCYmKG51bGw9PT0oYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmlzU2luZ2xlKCkpJiZ0aGlzLmhvdC5zZWxlY3Rpb24uaXNDZWxsVmlzaWJsZShk''@;'; put 'put ''KSYmLTE9PT1kLnJvdyYmZC5jb2w+PTB9LHJlbGF0aXZlVG9Hcm91cDpONixwb3NpdGlvbjoiYmVmb3JlIixncm91cDpPOGV9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3Jv''@;'; put 'put ''dXAoTzhlKX1zb3J0KGwpe2NvbnN0IGE9dGhpcy5nZXRTb3J0Q29uZmlnKCksZD10aGlzLmdldE5vcm1hbGl6ZWRTb3J0Q29uZmlncyhsKSxoPXRoaXMuYXJlVmFsaWRTb3J0Q29uZmlncyhkKTshMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5Tb3J0IixhLGQsaCkmJigwPT09''@;'; put 'put ''YS5sZW5ndGgmJm51bGw9PT10aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlJiYodGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZT10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbktleSxuZXcgWTVlKSx0aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlLnNldFZhbHVl''@;'; put 'put ''cyh0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSkpLGgmJih0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuc2V0U29ydFN0YXRlcyhkKSx0aGlzLnNvcnRCeVByZXNldFNvcnRTdGF0ZXMoZCksdGhpcy5zYXZlQWxsU29ydFNldHRpbmdzKGQpKSx0aGlzLmhvdC5y''@;'; put 'put ''dW5Ib29rcygiYWZ0ZXJDb2x1bW5Tb3J0IixhLGg/ZDphLGgpLGgmJnRoaXMuaG90LnJlbmRlcigpKX1jbGVhclNvcnQoKXt0aGlzLnNvcnQoW10pfWlzU29ydGVkKCl7cmV0dXJuIHRoaXMuZW5hYmxlZCYmIXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5pc0xpc3RPZlNvcnRlZENvbHVtbnNF''@;'; put 'put ''bXB0eSgpfWdldFNvcnRDb25maWcobCl7cmV0dXJuIE1hKGwpP3RoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRDb2x1bW5Tb3J0U3RhdGUobCk6dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldFNvcnRTdGF0ZXMoKX1zZXRTb3J0Q29uZmlnKGwpe2NvbnN0IGE9dGhpcy5nZXROb3JtYWxp''@;'; put 'put ''emVkU29ydENvbmZpZ3MobCk7dGhpcy5hcmVWYWxpZFNvcnRDb25maWdzKGEpJiZ0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuc2V0U29ydFN0YXRlcyhhKX1nZXROb3JtYWxpemVkU29ydENvbmZpZ3MoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9h''@;'; put 'put ''cmd1bWVudHNbMF06W107cmV0dXJuIEFycmF5LmlzQXJyYXkobCk/bC5zbGljZSgwLDEpOltsXX1hcmVWYWxpZFNvcnRDb25maWdzKGwpe2NvbnN0IGE9dGhpcy5ob3QuY291bnRDb2xzKCk7cmV0dXJuIGZ1bmN0aW9uIGxmdChjKXtpZihjLnNvbWUoYT0+ITE9PT1mdW5jdGlvbiBzZnQoYyl7''@;'; put 'put ''aWYoITE9PT1tbyhjKSlyZXR1cm4hMTtjb25zdHtjb2x1bW46bCxzb3J0T3JkZXI6YX09YztyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihsKSYmW2tWLERWXS5pbmNsdWRlcyhhKX0oYSkpKXJldHVybiExO2NvbnN0IGw9Yy5tYXAoYT0+e2xldHtjb2x1bW46ZH09YTtyZXR1cm4gZH0pO3JldHVy''@;'; put 'put ''biBuZXcgU2V0KGwpLnNpemU9PT1sLmxlbmd0aH0obCkmJmwuZXZlcnkoZD0+e2xldHtjb2x1bW46aH09ZDtyZXR1cm4gaDw9YSYmaD49MH0pfXNhdmVBbGxTb3J0U2V0dGluZ3MobCl7Y29uc3QgYT10aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0QWxsQ29sdW1uc1Byb3BlcnRpZXMoKTth''@;'; put 'put ''LmluaXRpYWxDb25maWc9WnMobCxoPT57bGV0e2NvbHVtbjpmLC4uLnZ9PWg7cmV0dXJue2NvbHVtbjp0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGYpLC4uLnZ9fSksdGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZVNhdmUiLCJjb2x1bW5Tb3J0aW5nIixhKX1nZXRBbGxTYXZl''@;'; put 'put ''ZFNvcnRTZXR0aW5ncygpe2NvbnN0IGw9e307dGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZUxvYWQiLCJjb2x1bW5Tb3J0aW5nIixsKTtjb25zdCBhPWwudmFsdWU7cmV0dXJuIE1hKGEpJiZBcnJheS5pc0FycmF5KGEuaW5pdGlhbENvbmZpZykmJihhLmluaXRpYWxDb25maWc9''@;'; put 'put ''WnMoYS5pbml0aWFsQ29uZmlnLGg9PntsZXR7Y29sdW1uOmYsLi4udn09aDtyZXR1cm57Y29sdW1uOnRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGYpLC4uLnZ9fSkpLGF9Z2V0Q29sdW1uTmV4dENvbmZpZyhsKXtjb25zdCBhPXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRTb3J0T3JkZXJP''@;'; put 'put ''ZkNvbHVtbihsKTtpZihNYShhKSl7Y29uc3QgaD1FOGUoYSk7cmV0dXJuIE1hKGgpP3tjb2x1bW46bCxzb3J0T3JkZXI6aH06dm9pZCAwfWNvbnN0IGQ9dGhpcy5ob3QuY291bnRDb2xzKCk7aWYoTnVtYmVyLmlzSW50ZWdlcihsKSYmbD49MCYmbDxkKXJldHVybntjb2x1bW46bCxzb3J0T3Jk''@;'; put 'put ''ZXI6RThlKCl9fWdldE5leHRTb3J0Q29uZmlnKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpMVjtjb25zdCBkPXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRJbmRleE9mQ29sdW1uSW5Tb3J0UXVldWUobCksaD0tMSE9''@;'; put 'put ''PWQsZj10aGlzLmdldFNvcnRDb25maWcoKSx2PXRoaXMuZ2V0Q29sdW1uTmV4dENvbmZpZyhsKTtpZihoKXtpZihiYyh2KSlyZXR1cm5bLi4uZi5zbGljZSgwLGQpLC4uLmYuc2xpY2UoZCsxKV07aWYoYT09PUxWKXJldHVyblsuLi5mLnNsaWNlKDAsZCksLi4uZi5zbGljZShkKzEpLHZdO2lm''@;'; put 'put ''KCJyZXBsYWNlIj09PWEpcmV0dXJuWy4uLmYuc2xpY2UoMCxkKSx2LC4uLmYuc2xpY2UoZCsxKV19cmV0dXJuIE1hKHYpP2YuY29uY2F0KHYpOmZ9Z2V0UGx1Z2luQ29sdW1uQ29uZmlnKGwpe2lmKG1vKGwpKXtjb25zdCBhPWxbdGhpcy5wbHVnaW5LZXldO2lmKG1vKGEpKXJldHVybiBhfXJl''@;'; put 'put ''dHVybnt9fWdldE1lcmdlZFBsdWdpblNldHRpbmdzKGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0aGlzLnBsdWdpbktleV0sZD10aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0QWxsQ29sdW1uc1Byb3BlcnRpZXMoKSxoPXRoaXMuaG90LmdldENlbGxNZXRhKDAsbCksZj1P''@;'; put 'put ''YmplY3QuZ2V0UHJvdG90eXBlT2YoaCk7cmV0dXJuIEFycmF5LmlzQXJyYXkoZi5jb2x1bW5zKT9PYmplY3QuYXNzaWduKGQsYSx0aGlzLmdldFBsdWdpbkNvbHVtbkNvbmZpZyhmLmNvbHVtbnNbbF0pKTppbChmLmNvbHVtbnMpP09iamVjdC5hc3NpZ24oZCxhLHRoaXMuZ2V0UGx1Z2luQ29s''@;'; put 'put ''dW1uQ29uZmlnKGYuY29sdW1ucyhsKSkpOk9iamVjdC5hc3NpZ24oZCxhKX1nZXRGaXJzdENlbGxTZXR0aW5ncyhsKXtjb25zdCBhPXRoaXMuaG90LmdldENlbGxNZXRhKDAsbCksZD1PYmplY3QuY3JlYXRlKGEpO3JldHVybiBkW3RoaXMucGx1Z2luS2V5XT10aGlzLmNvbHVtbk1ldGFDYWNo''@;'; put 'put ''ZS5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSksZH1nZXROdW1iZXJPZlJvd3NUb1NvcnQobCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO3JldHVybiBhLm1heFJvd3M8PWw/YS5tYXhSb3dzOmwtYS5taW5TcGFyZVJvd3N9c29ydEJ5UHJlc2V0''@;'; put 'put ''U29ydFN0YXRlcyhsKXtpZih0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UodGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZS5nZXRWYWx1ZXMoKSksMD09PWwubGVuZ3RoKXJldHVybjtjb25zdCBhPVtdLGQ9dGhpcy5ob3QuY291bnRSb3dzKCksaD1VPT5acyhsLHRl''@;'; put 'put ''PT50aGlzLmhvdC5nZXREYXRhQXRDZWxsKFUsdGUuY29sdW1uKSk7Zm9yKGxldCBVPTA7VTx0aGlzLmdldE51bWJlck9mUm93c1RvU29ydChkKTtVKz0xKWEucHVzaChbdGhpcy5ob3QudG9QaHlzaWNhbFJvdyhVKV0uY29uY2F0KGgoVSkpKTtjb25zdCBmPVpzKGEsVT0+VVswXSk7IWZ1bmN0''@;'; put 'put ''aW9uIG9mdChjLGwpe2NvbnN0IGE9YWZ0KGwpO2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQ+Mj9kLTI6MCksZj0yO2Y8ZDtmKyspaFtmLTJdPWFyZ3VtZW50c1tmXTtjLnNvcnQoYSguLi5oKSl9KGEsdGhpcy5wbHVnaW5LZXksWnMobCxVPT5VLnNvcnRPcmRlciks''@;'; put 'put ''WnMobCxVPT50aGlzLmdldEZpcnN0Q2VsbFNldHRpbmdzKFUuY29sdW1uKSkpO2ZvcihsZXQgVT1hLmxlbmd0aDtVPGQ7VSs9MSlhLnB1c2goW1VdLmNvbmNhdChoKFUpKSk7Y29uc3Qgdj1acyhhLFU9PlVbMF0pLE09bmV3IE1hcChacyhmLChVLHRlKT0+W1Usdlt0ZV1dKSksRD1acyh0aGlz''@;'; put 'put ''LmhvdC5yb3dJbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSxVPT5NLmhhcyhVKT9NLmdldChVKTpVKTt0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UoRCl9c29ydEJ5U2V0dGluZ3MobCl7aWYobW8obCkpe3RoaXMuY29sdW1uU3RhdGVzTWFuYWdlci51''@;'; put 'put ''cGRhdGVBbGxDb2x1bW5zUHJvcGVydGllcyhsKTtjb25zdCBhPWwuaW5pdGlhbENvbmZpZzsoQXJyYXkuaXNBcnJheShhKXx8bW8oYSkpJiZ0aGlzLnNvcnQoYSl9ZWxzZSB0aGlzLmhvdC5yZW5kZXIoKX11cGRhdGVIZWFkZXJDbGFzc2VzKGwpe2lmKFZhKGwsZnVuY3Rpb24gZmZ0KCl7cmV0''@;'; put 'put ''dXJuIEFycmF5LmZyb20oTDhlLnZhbHVlcygpKS5jb25jYXQoUjhlLEQ4ZSxJOGUpfSgpKSwhMSE9PXRoaXMuZW5hYmxlZCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYT4xP2EtMTowKSxoPTE7aDxhO2grKylkW2gtMV09YXJndW1lbnRzW2hdO2lpKGwsZnVuY3Rp''@;'; put 'put ''b24gaGZ0KGMsbCxhLGQpe2NvbnN0IGg9W0k4ZV07aWYoZCYmaC5wdXNoKFI4ZSksITE9PT1hKXJldHVybiBoLnB1c2goRDhlKSxoO2NvbnN0IGY9Yy5nZXRTb3J0T3JkZXJPZkNvbHVtbihsKTtyZXR1cm4gTWEoZikmJmgucHVzaChMOGUuZ2V0KGYpKSxofSguLi5kKSl9fW9uVXBkYXRlU2V0''@;'; put 'put ''dGluZ3MobCl7c3VwZXIub25VcGRhdGVTZXR0aW5ncyhsKSxudWxsIT09dGhpcy5jb2x1bW5NZXRhQ2FjaGUmJnRoaXMuY29sdW1uTWV0YUNhY2hlLmluaXQodGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TnVtYmVyT2ZJbmRleGVzKCkpLE1hKGxbdGhpcy5wbHVnaW5LZXldKSYmdGhp''@;'; put 'put ''cy5zb3J0QnlTZXR0aW5ncyhsW3RoaXMucGx1Z2luS2V5XSl9d2FzQ2xpY2thYmxlSGVhZGVyQ2xpY2tlZChsLGEpe3JldHVybiB0aGlzLmdldEZpcnN0Q2VsbFNldHRpbmdzKGEpW3RoaXMucGx1Z2luS2V5XS5oZWFkZXJBY3Rpb24mJkNvKGwudGFyZ2V0LCJjb2xIZWFkZXIiKX1vbkFmdGVy''@;'; put 'put ''T25DZWxsTW91c2VEb3duKGwsYSl7aWYoITEhPT1nbmUoYS5yb3csYS5jb2wsbCkmJnRoaXMud2FzQ2xpY2thYmxlSGVhZGVyQ2xpY2tlZChsLGEuY29sKSl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuaXNDdHJsUHJlc3NlZCgpJiYodGhpcy5ob3QuZGVzZWxlY3RDZWxsKCksdGhp''@;'; put 'put ''cy5ob3Quc2VsZWN0Q29sdW1ucyhhLmNvbCkpO2NvbnN0IGQ9dGhpcy5ob3QuZ2V0QWN0aXZlRWRpdG9yKCksaD10aGlzLmdldENvbHVtbk5leHRDb25maWcoYS5jb2wpO251bGwhPWQmJmQuaXNPcGVuZWQoKSYmdGhpcy5ob3QuZ2V0Q2VsbFZhbGlkYXRvcihkLnJvdyxkLmNvbCk/dGhpcy5o''@;'; put 'put ''b3QuYWRkSG9va09uY2UoInBvc3RBZnRlclZhbGlkYXRlIiwoKT0+e3RoaXMuc29ydChoKX0pOnRoaXMuc29ydChoKX19ZGVzdHJveSgpe3ZhciBsO251bGw9PT0obD10aGlzLmNvbHVtblN0YXRlc01hbmFnZXIpfHx2b2lkIDA9PT1sfHxsLmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fWZ1''@;'; put 'put ''bmN0aW9uIG1uZSgpe2NvbnN0IGM9dGhpcy5nZXRBbGxTYXZlZFNvcnRTZXR0aW5ncygpO2lmKG1vKGMpKXRoaXMuc29ydEJ5U2V0dGluZ3MoYyk7ZWxzZXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbdGhpcy5wbHVnaW5LZXldO3RoaXMuc29ydEJ5U2V0dGluZ3MobCl9fWZ1bmN0''@;'; put 'put ''aW9uIHdmdChjLGwpe2NvbnN0IGE9VDhlKGwpO2lmKCExPT09QThlKGMsbCl8fG51bGw9PT1hKXJldHVybjtjb25zdCBkPXRoaXMuZ2V0Rmlyc3RDZWxsU2V0dGluZ3MoYylbdGhpcy5wbHVnaW5LZXldO2lmKHRoaXMudXBkYXRlSGVhZGVyQ2xhc3NlcyhhLHRoaXMuY29sdW1uU3RhdGVzTWFu''@;'; put 'put ''YWdlcixjLGQuaW5kaWNhdG9yLGQuaGVhZGVyQWN0aW9uKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzKXtjb25zdCB2PXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRTb3J0T3JkZXJPZkNvbHVtbihjKTtaYShsLC4uLihjPT5bImFyaWEtc29ydCIsY10pKHY/YCR7dn1lbmRp''@;'; put 'put ''bmdgOiJub25lIikpfX1mdW5jdGlvbiBDZnQoYyl7ITA9PT1jJiZ0aGlzLmhvdC52aWV3JiZDQyhFdix0aGlzLG1uZSkuY2FsbCh0aGlzKX1mdW5jdGlvbiBTZnQoYyxsLGEsZCl7ITEhPT1nbmUobC5yb3csbC5jb2wsYykmJnRoaXMud2FzQ2xpY2thYmxlSGVhZGVyQ2xpY2tlZChjLGwuY29s''@;'; put 'put ''KSYmdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuaXNDdHJsUHJlc3NlZCgpJiYoZC5jb2x1bW49ITApfWZ1bmN0aW9uIHZuZShjKXtyZXR1cm4gbnVsbD09Y3x8aXNOYU4oYyl9ZnVuY3Rpb24gVHYoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHhmdChjKXt2YXIgbD1mdW5jdGlvbiBF''@;'; put 'put ''ZnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9y''@;'; put 'put ''KCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMs''@;'; put 'put ''bCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IEFmdD1jbGFzcyBUZnR7Y29uc3RydWN0b3IobCxhKXtUdih0aGlzLCJwbHVnaW4iLHZvaWQgMCksVHYodGhpcywiaG90Iix2b2lkIDApLFR2KHRoaXMsImVuZHBvaW50''@;'; put 'put ''cyIsW10pLFR2KHRoaXMsInNldHRpbmdzIix2b2lkIDApLFR2KHRoaXMsInNldHRpbmdzVHlwZSIsImFycmF5IiksVHYodGhpcywiY3VycmVudEVuZHBvaW50IixudWxsKSxUdih0aGlzLCJjZWxsc1RvU2V0Q2FjaGUiLFtdKSx0aGlzLnBsdWdpbj1sLHRoaXMuaG90PXRoaXMucGx1Z2luLmhv''@;'; put 'put ''dCx0aGlzLnNldHRpbmdzPWF9aW5pdEVuZHBvaW50cygpe3RoaXMuZW5kcG9pbnRzPXRoaXMucGFyc2VTZXR0aW5ncygpLHRoaXMucmVmcmVzaEFsbEVuZHBvaW50cygpfWdldEVuZHBvaW50KGwpe3JldHVybiJmdW5jdGlvbiI9PT10aGlzLnNldHRpbmdzVHlwZT90aGlzLmZpbGxNaXNzaW5n''@;'; put 'put ''RW5kcG9pbnREYXRhKHRoaXMuc2V0dGluZ3MpW2xdOnRoaXMuZW5kcG9pbnRzW2xdfWdldEFsbEVuZHBvaW50cygpe3JldHVybiJmdW5jdGlvbiI9PT10aGlzLnNldHRpbmdzVHlwZT90aGlzLmZpbGxNaXNzaW5nRW5kcG9pbnREYXRhKHRoaXMuc2V0dGluZ3MpOnRoaXMuZW5kcG9pbnRzfWZp''@;'; put 'put ''bGxNaXNzaW5nRW5kcG9pbnREYXRhKGwpe3JldHVybiB0aGlzLnBhcnNlU2V0dGluZ3MobC5jYWxsKHRoaXMpKX1wYXJzZVNldHRpbmdzKGwpe2NvbnN0IGE9W107bGV0IGQ9bDtpZihkfHwiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5zZXR0aW5ncylyZXR1cm4gZHx8KGQ9dGhpcy5zZXR0aW5n''@;'; put 'put ''cyksS24oZCxoPT57Y29uc3QgZj17fTt0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJyYW5nZXMiLFtbMCx0aGlzLmhvdC5jb3VudFJvd3MoKS0xXV0pLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsInJldmVyc2VkUm93Q29vcmRzIiwhMSksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwiZGVzdGluYXRp''@;'; put 'put ''b25Sb3ciLG5ldyBFcnJvcigiXG4gICAgICAgIFlvdSBtdXN0IHByb3ZpZGUgYSBkZXN0aW5hdGlvbiByb3cgZm9yIHRoZSBDb2x1bW4gU3VtbWFyeSBwbHVnaW4gaW4gb3JkZXIgdG8gd29yayBwcm9wZXJseSFcbiAgICAgICIpKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJkZXN0aW5hdGlv''@;'; put 'put ''bkNvbHVtbiIsbmV3IEVycm9yKCJcbiAgICAgICAgWW91IG11c3QgcHJvdmlkZSBhIGRlc3RpbmF0aW9uIGNvbHVtbiBmb3IgdGhlIENvbHVtbiBTdW1tYXJ5IHBsdWdpbiBpbiBvcmRlciB0byB3b3JrIHByb3Blcmx5IVxuICAgICAgIikpLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsInNvdXJj''@;'; put 'put ''ZUNvbHVtbiIsaC5kZXN0aW5hdGlvbkNvbHVtbiksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwidHlwZSIsInN1bSIpLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsImZvcmNlTnVtZXJpYyIsITEpLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsInN1cHByZXNzRGF0YVR5cGVFcnJvcnMiLCEwKSx0aGlz''@;'; put 'put ''LmFzc2lnblNldHRpbmcoaCxmLCJjdXN0b21GdW5jdGlvbiIsbnVsbCksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwicmVhZE9ubHkiLCEwKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJyb3VuZEZsb2F0IiwhMSksYS5wdXNoKGYpfSksYTt0aGlzLnNldHRpbmdzVHlwZT0iZnVuY3Rpb24ifWFz''@;'; put 'put ''c2lnblNldHRpbmcobCxhLGQsaCl7aWYoInJhbmdlcyIhPT1kfHx2b2lkIDAhPT1sW2RdKXtpZigicmFuZ2VzIiE9PWR8fDAhPT1sW2RdLmxlbmd0aClpZih2b2lkIDA9PT1sW2RdKXtpZihoIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgaDthW2RdPWh9ZWxzZSBhW2RdPSJkZXN0aW5hdGlvblJv''@;'; put 'put ''dyI9PT1kJiZhLnJldmVyc2VkUm93Q29vcmRzP3RoaXMuaG90LmNvdW50Um93cygpLWxbZF0tMTpsW2RdfWVsc2UgYVtkXT1ofXJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKGwsYSxkKXtpZigiZnVuY3Rpb24iIT09dGhpcy5zZXR0aW5nc1R5cGUpcmV0dXJuO2NvbnN0IGg9''@;'; put 'put ''bC5pbmRleE9mKCJyb3ciKT4tMT8icm93IjoiY29sIixmPXRoaXMuZ2V0QWxsRW5kcG9pbnRzKCk7S24oZix2PT57InJvdyI9PT1oJiZ2LmRlc3RpbmF0aW9uUm93Pj1hJiYoImluc2VydF9yb3ciPT09bD92LmFsdGVyUm93T2Zmc2V0PWQ6InJlbW92ZV9yb3ciPT09bCYmKHYuYWx0ZXJSb3dP''@;'; put 'put ''ZmZzZXQ9LTEqZCkpLCJjb2wiPT09aCYmdi5kZXN0aW5hdGlvbkNvbHVtbj49YSYmKCJpbnNlcnRfY29sIj09PWw/di5hbHRlckNvbHVtbk9mZnNldD1kOiJyZW1vdmVfY29sIj09PWwmJih2LmFsdGVyQ29sdW1uT2Zmc2V0PS0xKmQpKX0pLHRoaXMucmVzZXRBbGxFbmRwb2ludHMoZiwhMSl9''@;'; put 'put ''cmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbihsLGEsZCxoLGYpe2xldCB2PSEoYXJndW1lbnRzLmxlbmd0aD41JiZ2b2lkIDAhPT1hcmd1bWVudHNbNV0pfHxhcmd1bWVudHNbNV07aWYoImF1dG8iPT09ZilyZXR1cm47aWYoImZ1bmN0aW9uIj09PXRoaXMuc2V0dGluZ3NUeXBl''@;'; put 'put ''KXtjb25zdCB2ZT0oKT0+KHRoaXMuaG90LnJlbW92ZUhvb2soImJlZm9yZVZpZXdSZW5kZXIiLHZlKSx0aGlzLnJlZnJlc2hBbGxFbmRwb2ludHMoKSk7cmV0dXJuIHZvaWQgdGhpcy5ob3QuYWRkSG9va09uY2UoImJlZm9yZVZpZXdSZW5kZXIiLHZlKX1jb25zdCBNPWwuaW5kZXhPZigicm93''@;'; put 'put ''Iik+LTE/InJvdyI6ImNvbCIsRD1sLmluZGV4T2YoInJlbW92ZSIpPi0xPy0xOjEsVT10aGlzLmdldEFsbEVuZHBvaW50cygpLHRlPTA9PT1sLmluZGV4T2YoIm1vdmVfcm93Iiksb2U9YTtLbihVLHZlPT57InJvdyI9PT1NJiZ2ZS5kZXN0aW5hdGlvblJvdz49b2UmJih2ZS5hbHRlclJvd09m''@;'; put 'put ''ZnNldD1EKmQpLCJjb2wiPT09TSYmdmUuZGVzdGluYXRpb25Db2x1bW4+PW9lJiYodmUuYWx0ZXJDb2x1bW5PZmZzZXQ9RCpkKX0pLHRoaXMucmVzZXRBbGxFbmRwb2ludHMoVSwhdGUpLEtuKFUsdGU/dmU9Pnt0aGlzLmV4dGVuZEVuZHBvaW50UmFuZ2VzKHZlLG9lLGhbMF0saC5sZW5ndGgp''@;'; put 'put ''LHRoaXMucmVjcmVhdGVQaHlzaWNhbFJhbmdlcyh2ZSksdGhpcy5jbGVhck9mZnNldEluZm9ybWF0aW9uKHZlKX06dmU9Pnt0aGlzLnNoaWZ0RW5kcG9pbnRDb29yZGluYXRlcyh2ZSxvZSl9KSx2JiZ0aGlzLnJlZnJlc2hBbGxFbmRwb2ludHMoKX1jbGVhck9mZnNldEluZm9ybWF0aW9uKGwp''@;'; put 'put ''e2wuYWx0ZXJSb3dPZmZzZXQ9dm9pZCAwLGwuYWx0ZXJDb2x1bW5PZmZzZXQ9dm9pZCAwfWV4dGVuZEVuZHBvaW50UmFuZ2VzKGwsYSxkLGgpe0tuKGwucmFuZ2VzLGY9PntmWzFdJiYoYT49ZlswXSYmYTw9ZlsxXT9kPmZbMV0/ZlsxXSs9aDpkPGZbMF0mJihmWzBdLT1oKTpkPj1mWzBdJiZk''@;'; put 'put ''PD1mWzFdJiYoZlsxXS09aCxhPD1mWzBdJiYoZlswXSs9MSxmWzFdKz0xKSkpfSl9cmVjcmVhdGVQaHlzaWNhbFJhbmdlcyhsKXtjb25zdCBkPVtdLGg9W107S24obC5yYW5nZXMsZj0+e2NvbnN0IHY9W107aWYoZlsxXSlmb3IobGV0IE09ZlswXTtNPD1mWzFdO00rKyl2LnB1c2godGhpcy5o''@;'; put 'put ''b3QudG9QaHlzaWNhbFJvdyhNKSk7ZWxzZSB2LnB1c2godGhpcy5ob3QudG9QaHlzaWNhbFJvdyhmWzBdKSk7aC5wdXNoKHYpfSksS24oaCxmPT57bGV0IHY9W107S24oZiwoTSxEKT0+ezA9PT1EP3YucHVzaChNKTpmW0RdIT09ZltELTFdKzEmJih2LnB1c2goZltELTFdKSxkLnB1c2godiks''@;'; put 'put ''dj1bXSx2LnB1c2goTSkpLEQ9PT1mLmxlbmd0aC0xJiYodi5wdXNoKE0pLGQucHVzaCh2KSl9KX0pLGwucmFuZ2VzPWR9c2hpZnRFbmRwb2ludENvb3JkaW5hdGVzKGwsYSl7bC5hbHRlclJvd09mZnNldCYmMCE9PWwuYWx0ZXJSb3dPZmZzZXQ/KGwuZGVzdGluYXRpb25Sb3crPWwuYWx0ZXJS''@;'; put 'put ''b3dPZmZzZXR8fDAsS24obC5yYW5nZXMsZD0+e0tuKGQsKGgsZik9PntoPj1hJiYoZFtmXSs9bC5hbHRlclJvd09mZnNldHx8MCl9KX0pKTpsLmFsdGVyQ29sdW1uT2Zmc2V0JiYwIT09bC5hbHRlckNvbHVtbk9mZnNldCYmKGwuZGVzdGluYXRpb25Db2x1bW4rPWwuYWx0ZXJDb2x1bW5PZmZz''@;'; put 'put ''ZXR8fDAsbC5zb3VyY2VDb2x1bW4rPWwuYWx0ZXJDb2x1bW5PZmZzZXR8fDApfXJlc2V0QWxsRW5kcG9pbnRzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0QWxsRW5kcG9pbnRzKCksYT0hKGFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO2wuc29tZShoPT57Y29uc3Qgdj1oLmFsdGVyQ29sdW1uT2Zmc2V0fHwwO3JldHVybiBoLmRlc3RpbmF0aW9uUm93KyhoLmFsdGVyUm93T2Zmc2V0fHwwKT49dGhpcy5ob3QuY291bnRSb3dzKCl8fGguZGVzdGlu''@;'; put 'put ''YXRpb25Db2x1bW4rdj49dGhpcy5ob3QuY291bnRDb2xzKCl9KXx8KHRoaXMuY2VsbHNUb1NldENhY2hlPVtdLEtuKGwsaD0+e3RoaXMucmVzZXRFbmRwb2ludFZhbHVlKGgsYSl9KSx0aGlzLmNlbGxzVG9TZXRDYWNoZS5sZW5ndGgmJnRoaXMuaG90LnNldERhdGFBdENlbGwodGhpcy5jZWxs''@;'; put 'put ''c1RvU2V0Q2FjaGUsIkNvbHVtblN1bW1hcnkucmVzZXQiKSx0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXSl9cmVmcmVzaEFsbEVuZHBvaW50cygpe3RoaXMuY2VsbHNUb1NldENhY2hlPVtdLEtuKHRoaXMuZ2V0QWxsRW5kcG9pbnRzKCksbD0+e3RoaXMuY3VycmVudEVuZHBvaW50PWwsdGhpcy5w''@;'; put 'put ''bHVnaW4uY2FsY3VsYXRlKGwpLHRoaXMuc2V0RW5kcG9pbnRWYWx1ZShsLCJpbml0Iil9KSx0aGlzLmN1cnJlbnRFbmRwb2ludD1udWxsLHRoaXMuY2VsbHNUb1NldENhY2hlLmxlbmd0aCYmdGhpcy5ob3Quc2V0RGF0YUF0Q2VsbCh0aGlzLmNlbGxzVG9TZXRDYWNoZSwiQ29sdW1uU3VtbWFy''@;'; put 'put ''eS5yZXNldCIpLHRoaXMuY2VsbHNUb1NldENhY2hlPVtdfXJlZnJlc2hDaGFuZ2VkRW5kcG9pbnRzKGwpe2NvbnN0IGE9W107dGhpcy5jZWxsc1RvU2V0Q2FjaGU9W10sS24obCwoZCxoLGYpPT57YCR7ZFsyXXx8IiJ9YCE9YCR7ZFszXX1gJiZLbih0aGlzLmdldEFsbEVuZHBvaW50cygpLCh2''@;'; put 'put ''LE0pPT57dGhpcy5ob3QucHJvcFRvQ29sKGZbaF1bMV0pPT09di5zb3VyY2VDb2x1bW4mJi0xPT09YS5pbmRleE9mKE0pJiZhLnB1c2goTSl9KX0pLEtuKGEsZD0+e3RoaXMucmVmcmVzaEVuZHBvaW50KHRoaXMuZ2V0RW5kcG9pbnQoZCkpfSksdGhpcy5jZWxsc1RvU2V0Q2FjaGUubGVuZ3Ro''@;'; put 'put ''JiZ0aGlzLmhvdC5zZXREYXRhQXRDZWxsKHRoaXMuY2VsbHNUb1NldENhY2hlLCJDb2x1bW5TdW1tYXJ5LnJlc2V0IiksdGhpcy5jZWxsc1RvU2V0Q2FjaGU9W119cmVmcmVzaENlbGxNZXRhcygpe3RoaXMuZW5kcG9pbnRzLmZvckVhY2gobD0+e2NvbnN0IGE9dGhpcy5ob3QudG9WaXN1YWxS''@;'; put 'put ''b3cobC5kZXN0aW5hdGlvblJvdyk7aWYobnVsbCE9PWEpe2NvbnN0IGQ9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoYSxsLmRlc3RpbmF0aW9uQ29sdW1uKTtkLnJlYWRPbmx5PWwucmVhZE9ubHksZC5jbGFzc05hbWU9ImNvbHVtblN1bW1hcnlSZXN1bHQifX0pfXJlZnJlc2hFbmRwb2ludChsKXt0''@;'; put 'put ''aGlzLmN1cnJlbnRFbmRwb2ludD1sLHRoaXMucGx1Z2luLmNhbGN1bGF0ZShsKSx0aGlzLnNldEVuZHBvaW50VmFsdWUobCksdGhpcy5jdXJyZW50RW5kcG9pbnQ9bnVsbH1yZXNldEVuZHBvaW50VmFsdWUobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50''@;'; put 'put ''c1sxXSl8fGFyZ3VtZW50c1sxXTtjb25zdCBoPWwuYWx0ZXJDb2x1bW5PZmZzZXR8fDA7dGhpcy5jZWxsc1RvU2V0Q2FjaGUucHVzaChbdGhpcy5ob3QudG9WaXN1YWxSb3cobC5kZXN0aW5hdGlvblJvdysoYSYmbC5hbHRlclJvd09mZnNldHx8MCkpLHRoaXMuaG90LnRvVmlzdWFsQ29sdW1u''@;'; put 'put ''KGwuZGVzdGluYXRpb25Db2x1bW4rKGE/aDowKSksIiJdKX1zZXRFbmRwb2ludFZhbHVlKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCBoPXRoaXMuaG90LnRvVmlzdWFsUm93KGwuZGVzdGluYXRpb25Sb3cp''@;'; put 'put ''O2lmKGwuZGVzdGluYXRpb25Sb3c+PXRoaXMuaG90LmNvdW50Um93cygpfHxsLmRlc3RpbmF0aW9uQ29sdW1uPj10aGlzLmhvdC5jb3VudENvbHMoKSlyZXR1cm4gdm9pZCB0aGlzLnRocm93T3V0T2ZCb3VuZHNXYXJuaW5nKCk7Y29uc3QgZj10aGlzLmhvdC50b1Zpc3VhbFJvdyhsLmRlc3Rp''@;'; put 'put ''bmF0aW9uUm93KTtpZihudWxsIT09Zil7Y29uc3Qgdj10aGlzLmhvdC5nZXRDZWxsTWV0YShmLGwuZGVzdGluYXRpb25Db2x1bW4pOygiaW5pdCI9PT1hfHx2LnJlYWRPbmx5IT09bC5yZWFkT25seSkmJih2LnJlYWRPbmx5PWwucmVhZE9ubHksdi5jbGFzc05hbWU9ImNvbHVtblN1bW1hcnlS''@;'; put 'put ''ZXN1bHQiKX1sLnJlc3VsdD1mdW5jdGlvbiBNZnQoYyxsKXtpZigibnVtYmVyIiE9dHlwZW9mIGMpcmV0dXJuIGM7Y29uc3QgYT1kPT5kLnRvU3RyaW5nKCk7c3dpdGNoKHR5cGVvZiBsKXtjYXNlIm51bWJlciI6cmV0dXJuIGEoYy50b0ZpeGVkKE1hdGgubWluKE1hdGgubWF4KDAsbCksMTAw''@;'; put 'put ''KSkpO2Nhc2UiYm9vbGVhbiI6cmV0dXJuIGw/YShNYXRoLnJvdW5kKGMpKTpjO2Nhc2Uic3RyaW5nIjppZigiYXV0byI9PT1sKXtjb25zdCBkPU1hdGgucm91bmQoYykudG9TdHJpbmcoKS5sZW5ndGg7cmV0dXJuIGEoYy50b0ZpeGVkKDgtZCkpfXJldHVybiBjO2RlZmF1bHQ6cmV0dXJuIGN9''@;'; put 'put ''fShsLnJlc3VsdCxsLnJvdW5kRmxvYXQpLGQ/dGhpcy5ob3Quc2V0RGF0YUF0Q2VsbChoLGwuZGVzdGluYXRpb25Db2x1bW4sbC5yZXN1bHQsIkNvbHVtblN1bW1hcnkuc2V0Iik6dGhpcy5jZWxsc1RvU2V0Q2FjaGUucHVzaChbaCxsLmRlc3RpbmF0aW9uQ29sdW1uLGwucmVzdWx0XSksbC5h''@;'; put 'put ''bHRlclJvd09mZnNldD12b2lkIDAsbC5hbHRlckNvbHVtbk9mZnNldD12b2lkIDB9dGhyb3dPdXRPZkJvdW5kc1dhcm5pbmcoKXtvcygiT25lIG9mIHRoZSBDb2x1bW4gU3VtbWFyeSBwbHVnaW5zJyBkZXN0aW5hdGlvbiBwb2ludHMgeW91IHByb3ZpZGVkIGlzIGJleW9uZCB0aGUgdGFibGUg''@;'; put 'put ''Ym91bmRhcmllcyEiKX19O2Z1bmN0aW9uIFNDKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBv''@;'; put 'put ''YmplY3QiKX1jb25zdCB5bmU9ImNvbHVtblN1bW1hcnkiO3ZhciBBdj1uZXcgV2Vha1NldDtjbGFzcyBQZnQgZXh0ZW5kcyBNc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24ga2Z0KGMsbCl7KGZ1bmN0aW9uIERmdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLEF2KSxmdW5jdGlvbiBJZnQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFJmdChjKXt2YXIgbD1mdW5jdGlvbiBM''@;'; put 'put ''ZnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9y''@;'; put 'put ''KCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMs''@;'; put 'put ''bCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJlbmRwb2ludHMiLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiB5bmV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjIwfWlz''@;'; put 'put ''RW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt5bmVdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5zZXR0aW5ncz10aGlzLmhvdC5nZXRTZXR0aW5ncygpW3luZV0sdGhpcy5lbmRwb2ludHM9bmV3IEFmdCh0aGlzLHRoaXMuc2V0''@;'; put 'put ''dGluZ3MpLHRoaXMuYWRkSG9vaygiYWZ0ZXJJbml0IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBTQyhBdixsLEZmdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJh''@;'; put 'put ''ZnRlckNoYW5nZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gU0MoQXYsbCxOZnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJVcGRhdGVTZXR0aW5ncyIs''@;'; put 'put ''ZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gU0MoQXYsbCxIZnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFy''@;'; put 'put ''IGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gU0MoQXYsbCxWZnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJVcGRhdGVEYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBTQyhBdixsLEJmdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDcmVhdGVSb3ciLChhLGQsaCk9PnRoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVB''@;'; put 'put ''bHRlcmF0aW9uKCJpbnNlcnRfcm93IixhLGQsbnVsbCxoKSksdGhpcy5hZGRIb29rKCJiZWZvcmVDcmVhdGVDb2wiLChhLGQsaCk9PnRoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJpbnNlcnRfY29sIixhLGQsbnVsbCxoKSksdGhpcy5hZGRIb29r''@;'; put 'put ''KCJiZWZvcmVSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGwuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJyZW1vdmVf''@;'; put 'put ''cm93IiwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlQ29sIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBsLmVuZHBvaW50cy5yZXNldFNldHVwQmVmb3JlU3Ry''@;'; put 'put ''dWN0dXJlQWx0ZXJhdGlvbigicmVtb3ZlX2NvbCIsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlUm93IiwoYSxkLGgpPT50aGlzLmVuZHBvaW50cy5yZXNldFNldHVwQWZ0ZXJTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJpbnNlcnRfcm93IixhLGQsbnVsbCxoKSksdGhpcy5hZGRIb29r''@;'; put 'put ''KCJhZnRlckNyZWF0ZUNvbCIsKGEsZCxoKT0+dGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbigiaW5zZXJ0X2NvbCIsYSxkLG51bGwsaCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGwuZW5kcG9pbnRzLnJlc2V0U2V0dXBBZnRlclN0cnVjdHVyZUFsdGVyYXRpb24oInJlbW92ZV9yb3ciLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZUNvbCIsZnVuY3Rpb24o''@;'; put 'put ''KXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbC5lbmRwb2ludHMucmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbigicmVtb3ZlX2NvbCIsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFm''@;'; put 'put ''dGVyUm93TW92ZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gU0MoQXYsbCxqZnQpLmNhbGwobCwuLi5kKX0pLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2lu''@;'; put 'put ''KCl7dGhpcy5lbmRwb2ludHM9bnVsbCx0aGlzLnNldHRpbmdzPW51bGwsdGhpcy5jdXJyZW50RW5kcG9pbnQ9bnVsbCxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLmVuZHBvaW50cy5pbml0''@;'; put 'put ''RW5kcG9pbnRzKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9Y2FsY3VsYXRlKGwpe3N3aXRjaChsLnR5cGUudG9Mb3dlckNhc2UoKSl7Y2FzZSJzdW0iOmwucmVzdWx0PXRoaXMuY2FsY3VsYXRlU3VtKGwpO2JyZWFrO2Nhc2UibWluIjpjYXNlIm1heCI6bC5yZXN1bHQ9dGhpcy5jYWxjdWxhdGVN''@;'; put 'put ''aW5NYXgobCxsLnR5cGUpO2JyZWFrO2Nhc2UiY291bnQiOmwucmVzdWx0PXRoaXMuY291bnRFbnRyaWVzKGwpO2JyZWFrO2Nhc2UiYXZlcmFnZSI6bC5yZXN1bHQ9dGhpcy5jYWxjdWxhdGVBdmVyYWdlKGwpO2JyZWFrO2Nhc2UiY3VzdG9tIjpsLnJlc3VsdD1sLmN1c3RvbUZ1bmN0aW9uLmNh''@;'; put 'put ''bGwodGhpcyxsKX19Y2FsY3VsYXRlU3VtKGwpe2xldCBhPTA7cmV0dXJuIGFzKGwucmFuZ2VzLGQ9PnthKz10aGlzLmdldFBhcnRpYWxTdW0oZCxsLnNvdXJjZUNvbHVtbil9KSxhfWdldFBhcnRpYWxTdW0obCxhKXtsZXQgZD0wLGg9bFsxXXx8bFswXSxmPW51bGwsdj0wO2Rve2lmKGY9dGhp''@;'; put 'put ''cy5nZXRDZWxsVmFsdWUoaCxhKSxmPXZuZShmKT9udWxsOmYsbnVsbCE9PWYpe2NvbnN0IE09KGAke2Z9YC5zcGxpdCgiLiIpWzFdfHxbXSkubGVuZ3RofHwxO00+diYmKHY9TSl9ZCs9Znx8MCxoLT0xfXdoaWxlKGg+PWxbMF0pO3JldHVybiBNYXRoLnJvdW5kKGQqMTAqKnYpLzEwKip2fWNh''@;'; put 'put ''bGN1bGF0ZU1pbk1heChsLGEpe2xldCBkPW51bGw7cmV0dXJuIGFzKGwucmFuZ2VzLGg9Pntjb25zdCBmPXRoaXMuZ2V0UGFydGlhbE1pbk1heChoLGwuc291cmNlQ29sdW1uLGEpO2lmKG51bGw9PT1kJiZudWxsIT09ZiYmKGQ9ZiksbnVsbCE9PWYpc3dpdGNoKGEpe2Nhc2UibWluIjpkPU1h''@;'; put 'put ''dGgubWluKGQsZik7YnJlYWs7Y2FzZSJtYXgiOmQ9TWF0aC5tYXgoZCxmKX19KSxudWxsPT09ZD8iTm90IGVub3VnaCBkYXRhIjpkfWdldFBhcnRpYWxNaW5NYXgobCxhLGQpe2xldCB2LGg9bnVsbCxmPWxbMV18fGxbMF07ZG97aWYodj10aGlzLmdldENlbGxWYWx1ZShmLGEpLHY9dm5lKHYp''@;'; put 'put ''P251bGw6dixudWxsPT09aCloPXY7ZWxzZSBpZihudWxsIT09dilzd2l0Y2goZCl7Y2FzZSJtaW4iOmg9TWF0aC5taW4oaCx2KTticmVhaztjYXNlIm1heCI6aD1NYXRoLm1heChoLHYpfWYtPTF9d2hpbGUoZj49bFswXSk7cmV0dXJuIGh9Y291bnRFbXB0eShsLGEpe2xldCBkLGg9MCxmPWxb''@;'; put 'put ''MV18fGxbMF07ZG97ZD10aGlzLmdldENlbGxWYWx1ZShmLGEpLGQ9dm5lKGQpP251bGw6ZCxudWxsPT09ZCYmKGgrPTEpLGYtPTF9d2hpbGUoZj49bFswXSk7cmV0dXJuIGh9Y291bnRFbnRyaWVzKGwpe2xldCBhPTA7cmV0dXJuIGFzKGwucmFuZ2VzLGg9Pntjb25zdCBmPXZvaWQgMD09PWhb''@;'; put 'put ''MV0/MTpoWzFdLWhbMF0rMSx2PXRoaXMuY291bnRFbXB0eShoLGwuc291cmNlQ29sdW1uKTthKz1mLGEtPXZ9KSxhfWNhbGN1bGF0ZUF2ZXJhZ2UobCl7cmV0dXJuIHRoaXMuY2FsY3VsYXRlU3VtKGwpL3RoaXMuY291bnRFbnRyaWVzKGwpfWdldENlbGxWYWx1ZShsLGEpe2NvbnN0IGQ9dGhp''@;'; put 'put ''cy5ob3QudG9WaXN1YWxSb3cobCksaD10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihhKTtsZXQgZj10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKGwsYSksdj0iIjtpZihudWxsIT09ZCYmbnVsbCE9PWgmJih2PXRoaXMuaG90LmdldENlbGxNZXRhKGQsaCkuY2xhc3NOYW1lfHwiIiksdi5p''@;'; put 'put ''bmRleE9mKCJjb2x1bW5TdW1tYXJ5UmVzdWx0Iik+LTEpcmV0dXJuIG51bGw7aWYodGhpcy5lbmRwb2ludHMuY3VycmVudEVuZHBvaW50LmZvcmNlTnVtZXJpYyYmKCJzdHJpbmciPT10eXBlb2YgZiYmKGY9Zi5yZXBsYWNlKC8sLywiLiIpKSxmPXBhcnNlRmxvYXQoZikpLGlzTmFOKGYpJiYh''@;'; put 'put ''dGhpcy5lbmRwb2ludHMuY3VycmVudEVuZHBvaW50LnN1cHByZXNzRGF0YVR5cGVFcnJvcnMpdGhyb3cgbmV3IEVycm9yKFhzYENvbHVtblN1bW1hcnkgcGx1Z2luOiBjZWxsIGF0ICgke2x9LCAke2F9KSBpcyBub3QgaW4gYVx4MjAKICAgICAgICAgIG51bWVyaWMgZm9ybWF0LiBDYW5ub3Qg''@;'; put 'put ''ZG8gdGhlIGNhbGN1bGF0aW9uLmApO3JldHVybiBmfX1mdW5jdGlvbiBGZnQoKXt0aGlzLmVuZHBvaW50cy5pbml0RW5kcG9pbnRzKCl9ZnVuY3Rpb24gSGZ0KGMpe3ZvaWQgMCE9PWMuY29sdW1ucyYmdGhpcy5lbmRwb2ludHMucmVmcmVzaENlbGxNZXRhcygpfWZ1bmN0aW9uIE5mdChjLGwp''@;'; put 'put ''e2MmJiJDb2x1bW5TdW1tYXJ5LnJlc2V0IiE9PWwmJiJDb2x1bW5TdW1tYXJ5LnNldCIhPT1sJiYibG9hZERhdGEiIT09bCYmdGhpcy5lbmRwb2ludHMucmVmcmVzaENoYW5nZWRFbmRwb2ludHMoYyl9ZnVuY3Rpb24gVmZ0KGMsbCl7bHx8dGhpcy5lbmRwb2ludHMucmVmcmVzaEFsbEVuZHBv''@;'; put 'put ''aW50cygpfWZ1bmN0aW9uIEJmdChjLGwpe2x8fHRoaXMuZW5kcG9pbnRzLnJlZnJlc2hBbGxFbmRwb2ludHMoKX1mdW5jdGlvbiBqZnQoYyxsKXt0aGlzLmVuZHBvaW50cy5yZXNldFNldHVwQmVmb3JlU3RydWN0dXJlQWx0ZXJhdGlvbigibW92ZV9yb3ciLGNbMF0sYy5sZW5ndGgsYyx0aGlz''@;'; put 'put ''LnBsdWdpbk5hbWUpLHRoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBBZnRlclN0cnVjdHVyZUFsdGVyYXRpb24oIm1vdmVfcm93IixsLGMubGVuZ3RoLGMsdGhpcy5wbHVnaW5OYW1lKX1mdW5jdGlvbiBibmUoYyxsLGEpe0Y4ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gRjhlKGMsbCl7aWYo''@;'; put 'put ''bC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBNQyhjLGwpe3JldHVybiBjLmdldCh3bmUoYyxsKSl9ZnVuY3Rpb24gX25lKGMsbCxhKXtyZXR1cm4gYy5z''@;'; put 'put ''ZXQod25lKGMsbCksYSksYX1mdW5jdGlvbiB3bmUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlz''@;'; put 'put ''IG9iamVjdCIpfXZhciBPVj1uZXcgV2Vha01hcCxQVj1uZXcgV2Vha01hcCxGVj1uZXcgV2Vha01hcCxIOGU9bmV3IFdlYWtTZXQ7Y2xhc3MgTjhle2NvbnN0cnVjdG9yKCl7KGZ1bmN0aW9uIHpmdChjLGwpe0Y4ZShjLGwpLGwuYWRkKGMpfSkodGhpcyxIOGUpLGJuZSh0aGlzLE9WLCEwKSxi''@;'; put 'put ''bmUodGhpcyxQVixudWxsKSxibmUodGhpcyxGVixuZXcgUmVzaXplT2JzZXJ2ZXIobD0+d25lKEg4ZSx0aGlzLFVmdCkuY2FsbCh0aGlzLGwpKSl9c2V0T2JzZXJ2ZWRFbGVtZW50KGwpe19uZShQVix0aGlzLGwpfXVub2JzZXJ2ZSgpe01DKEZWLHRoaXMpLnVub2JzZXJ2ZShNQyhQVix0aGlz''@;'; put 'put ''KSl9b2JzZXJ2ZSgpe19uZShPVix0aGlzLCEwKSxNQyhGVix0aGlzKS5vYnNlcnZlKE1DKFBWLHRoaXMpKX1kZXN0cm95KCl7TUMoRlYsdGhpcykuZGlzY29ubmVjdCgpfX1mdW5jdGlvbiBVZnQoYyl7IU1DKE9WLHRoaXMpJiZBcnJheS5pc0FycmF5KGMpJiZjLmxlbmd0aD9jLmZvckVhY2go''@;'; put 'put ''bD0+e2xldHtib3JkZXJCb3hTaXplOmF9PWw7Y29uc3R7aW5saW5lU2l6ZTpkLGJsb2NrU2l6ZTpofT1hWzBdO3RoaXMucnVuTG9jYWxIb29rcygicmVzaXplIixkLGgpfSk6X25lKE9WLHRoaXMsITEpfWZ1bmN0aW9uIFc2KGMsbCxhKXsoZnVuY3Rpb24gWmZ0KGMsbCl7aWYobC5oYXMoYykp''@;'; put 'put ''dGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBXbChjLGwpe3JldHVybiBjLmdldChWOGUoYyxsKSl9ZnVuY3Rpb24gajQoYyxsLGEpe3Jl''@;'; put 'put ''dHVybiBjLnNldChWOGUoYyxsKSxhKSxhfWZ1bmN0aW9uIFY4ZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50''@;'; put 'put ''IG9uIHRoaXMgb2JqZWN0Iil9cGwoTjhlLFowKTt2YXIgeEM9bmV3IFdlYWtNYXAsQ25lPW5ldyBXZWFrTWFwLFNuZT1uZXcgV2Vha01hcCxBNT1uZXcgV2Vha01hcCxZNj1uZXcgV2Vha01hcCxHNj1uZXcgV2Vha01hcCxIVj1uZXcgV2Vha01hcCxFQz1uZXcgV2Vha01hcDtjbGFzcyBrdntz''@;'; put 'put ''dGF0aWMgZ2V0IENMQVNTX0VESVRPUl9DT05UQUlORVIoKXtyZXR1cm4iaHRDb21tZW50c0NvbnRhaW5lciJ9c3RhdGljIGdldCBDTEFTU19FRElUT1IoKXtyZXR1cm4iaHRDb21tZW50cyJ9c3RhdGljIGdldCBDTEFTU19JTlBVVCgpe3JldHVybiJodENvbW1lbnRUZXh0QXJlYSJ9c3RhdGlj''@;'; put 'put ''IGdldCBDTEFTU19DRUxMKCl7cmV0dXJuImh0Q29tbWVudENlbGwifWNvbnN0cnVjdG9yKGwsYSxkKXt2YXIgaD10aGlzO1c2KHRoaXMseEMsdm9pZCAwKSxXNih0aGlzLENuZSx2b2lkIDApLFc2KHRoaXMsU25lLCExKSxXNih0aGlzLEE1LG51bGwpLFc2KHRoaXMsWTYsdm9pZCAwKSxXNih0''@;'; put 'put ''aGlzLEc2LHZvaWQgMCksVzYodGhpcyxIViwhMCksVzYodGhpcyxFQyxuZXcgTjhlKSxqNCh4Qyx0aGlzLGwpLGo0KENuZSx0aGlzLGQpLGo0KFNuZSx0aGlzLGEpLGo0KFk2LHRoaXMsdGhpcy5jcmVhdGVFZGl0b3IoKSksajQoRzYsdGhpcyxXbChZNix0aGlzKS5zdHlsZSksV2woRUMsdGhp''@;'; put 'put ''cykuc2V0T2JzZXJ2ZWRFbGVtZW50KHRoaXMuZ2V0SW5wdXRFbGVtZW50KCkpLFdsKEVDLHRoaXMpLmFkZExvY2FsSG9vaygicmVzaXplIixmdW5jdGlvbigpe2Zvcih2YXIgZj1hcmd1bWVudHMubGVuZ3RoLHY9bmV3IEFycmF5KGYpLE09MDtNPGY7TSsrKXZbTV09YXJndW1lbnRzW01dO3Jl''@;'; put 'put ''dHVybiBoLnJ1bkxvY2FsSG9va3MoInJlc2l6ZSIsLi4udil9KSx0aGlzLmhpZGUoKX1zZXRQb3NpdGlvbihsLGEpe1dsKEc2LHRoaXMpLmxlZnQ9YCR7bH1weGAsV2woRzYsdGhpcykudG9wPWAke2F9cHhgfXNldFNpemUobCxhKXtpZihsJiZhKXtjb25zdCBkPXRoaXMuZ2V0SW5wdXRFbGVt''@;'; put 'put ''ZW50KCk7ZC5zdHlsZS53aWR0aD1gJHtsfXB4YCxkLnN0eWxlLmhlaWdodD1gJHthfXB4YH19Z2V0U2l6ZSgpe3JldHVybnt3aWR0aDpfdSh0aGlzLmdldElucHV0RWxlbWVudCgpKSxoZWlnaHQ6RnUodGhpcy5nZXRJbnB1dEVsZW1lbnQoKSl9fW9ic2VydmVTaXplKCl7V2woRUMsdGhpcyku''@;'; put 'put ''b2JzZXJ2ZSgpfXJlc2V0U2l6ZSgpe2NvbnN0IGw9dGhpcy5nZXRJbnB1dEVsZW1lbnQoKTtsLnN0eWxlLndpZHRoPSIiLGwuc3R5bGUuaGVpZ2h0PSIifXNldFJlYWRPbmx5U3RhdGUobCl7dGhpcy5nZXRJbnB1dEVsZW1lbnQoKS5yZWFkT25seT1sfXNob3coKXtXbChHNix0aGlzKS5kaXNw''@;'; put 'put ''bGF5PSJibG9jayIsajQoSFYsdGhpcywhMSl9aGlkZSgpe1dsKEVDLHRoaXMpLnVub2JzZXJ2ZSgpLFdsKEhWLHRoaXMpfHwoV2woRzYsdGhpcykuZGlzcGxheT0ibm9uZSIpLGo0KEhWLHRoaXMsITApfWlzVmlzaWJsZSgpe3JldHVybiJibG9jayI9PT1XbChHNix0aGlzKS5kaXNwbGF5fXNl''@;'; put 'put ''dFZhbHVlKCl7Y29uc3QgYT0oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiIiKXx8IiI7dGhpcy5nZXRJbnB1dEVsZW1lbnQoKS52YWx1ZT1hfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuZ2V0SW5wdXRFbGVtZW50KCkudmFsdWV9aXNGb2N1''@;'; put 'put ''c2VkKCl7cmV0dXJuIFdsKHhDLHRoaXMpLmFjdGl2ZUVsZW1lbnQ9PT10aGlzLmdldElucHV0RWxlbWVudCgpfWZvY3VzKCl7dGhpcy5nZXRJbnB1dEVsZW1lbnQoKS5mb2N1cygpfWNyZWF0ZUVkaXRvcigpe2NvbnN0IGw9V2woeEMsdGhpcykuY3JlYXRlRWxlbWVudCgiZGl2IiksYT1XbCh4''@;'; put 'put ''Qyx0aGlzKS5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpO3JldHVybiBsLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGo0KEE1LHRoaXMsV2woeEMsdGhpcykuY3JlYXRlRWxlbWVudCgiZGl2IikpLFdsKEE1LHRoaXMpLnNldEF0dHJpYnV0ZSgiZGlyIixXbChTbmUsdGhpcyk/InJ0bCI6Imx0ciIp''@;'; put 'put ''LGlpKFdsKEE1LHRoaXMpLGt2LkNMQVNTX0VESVRPUl9DT05UQUlORVIpLFdsKENuZSx0aGlzKS5hcHBlbmRDaGlsZChXbChBNSx0aGlzKSksaWkobCxrdi5DTEFTU19FRElUT1IpLGlpKGEsa3YuQ0xBU1NfSU5QVVQpLGEuc2V0QXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIsITApLGwuYXBw''@;'; put 'put ''ZW5kQ2hpbGQoYSksV2woQTUsdGhpcykuYXBwZW5kQ2hpbGQobCksbH1nZXRJbnB1dEVsZW1lbnQoKXtyZXR1cm4gV2woWTYsdGhpcykucXVlcnlTZWxlY3RvcihgLiR7a3YuQ0xBU1NfSU5QVVR9YCl9Z2V0RWRpdG9yRWxlbWVudCgpe3JldHVybiBXbChZNix0aGlzKX1kZXN0cm95KCl7Y29u''@;'; put 'put ''c3QgbD1XbChBNSx0aGlzKT9XbChBNSx0aGlzKS5wYXJlbnROb2RlOm51bGw7V2woWTYsdGhpcykucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChXbChZNix0aGlzKSksajQoWTYsdGhpcyxudWxsKSxqNChHNix0aGlzLG51bGwpLFdsKEVDLHRoaXMpLmRlc3Ryb3koKSxsJiZsLnJlbW92ZUNoaWxk''@;'; put 'put ''KFdsKEE1LHRoaXMpKX19cGwoa3YsWjApO2NvbnN0IFdmdD1rdjtmdW5jdGlvbiBNbmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFlmdChjKXt2YXIgbD1mdW5jdGlvbiBHZnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0''@;'; put 'put ''aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09''@;'; put 'put ''PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNs''@;'; put 'put ''YXNzIEI4ZXtjb25zdHJ1Y3RvcihsKXtNbmUodGhpcywid2FzTGFzdEFjdGlvblNob3ciLCEwKSxNbmUodGhpcywic2hvd0RlYm91bmNlZCIsbnVsbCksTW5lKHRoaXMsImhpZGluZ1RpbWVyIixudWxsKSx0aGlzLnVwZGF0ZURlbGF5KGwpfWhpZGUoKXt0aGlzLndhc0xhc3RBY3Rpb25TaG93''@;'; put 'put ''PSExLHRoaXMuaGlkaW5nVGltZXI9c2V0VGltZW91dCgoKT0+eyExPT09dGhpcy53YXNMYXN0QWN0aW9uU2hvdyYmdGhpcy5ydW5Mb2NhbEhvb2tzKCJoaWRlIil9LDI1MCl9c2hvdyhsKXt0aGlzLndhc0xhc3RBY3Rpb25TaG93PSEwLHRoaXMuc2hvd0RlYm91bmNlZChsKX1jYW5jZWxIaWRp''@;'; put 'put ''bmcoKXt0aGlzLndhc0xhc3RBY3Rpb25TaG93PSEwLGNsZWFyVGltZW91dCh0aGlzLmhpZGluZ1RpbWVyKSx0aGlzLmhpZGluZ1RpbWVyPW51bGx9dXBkYXRlRGVsYXkoKXt0aGlzLnNob3dEZWJvdW5jZWQ9JEEoYT0+e3RoaXMud2FzTGFzdEFjdGlvblNob3cmJnRoaXMucnVuTG9jYWxIb29r''@;'; put 'put ''cygic2hvdyIsYS5mcm9tLnJvdyxhLmZyb20uY29sKX0sYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjI1MCl9ZGVzdHJveSgpe3RoaXMuY2xlYXJMb2NhbEhvb2tzKCl9fXBsKEI4ZSxaMCk7Y29uc3QgWGZ0PUI4ZSx5cz0iLS0tLS0tLS0t''@;'; put 'put ''IjtmdW5jdGlvbiBEdihjLGwpe2NvbnN0IGE9e307cmV0dXJuIEtuKGMsZD0+e2QuZm9yQWxsKChoLGYpPT57aD49MCYmZj49MCYmKGFbaF18fChhW2hdPVtdKSxhW2hdW2ZdPWwoaCxmKSl9KX0pLGF9ZnVuY3Rpb24gJDYoYyxsLGEsZCxoKXtLbihjLGY9PntmLmZvckFsbCgodixNKT0+e3Y+''@;'; put 'put ''PTAmJk0+PTAmJmZ1bmN0aW9uIG4zdChjLGwsYSxkLGgsZil7Y29uc3Qgdj1oKGMsbCk7bGV0IE09ZDt2LmNsYXNzTmFtZSYmKE09InZlcnRpY2FsIj09PWE/ZnVuY3Rpb24gZTN0KGMsbCl7cmV0dXJuLTEhPT1jLmluZGV4T2YobCk/YzpgJHtjLnJlcGxhY2UoImh0VG9wIiwiIikucmVwbGFj''@;'; put 'put ''ZSgiaHRNaWRkbGUiLCIiKS5yZXBsYWNlKCJodEJvdHRvbSIsIiIpLnJlcGxhY2UoIiAgIiwiIil9ICR7bH1gfSh2LmNsYXNzTmFtZSxkKTpmdW5jdGlvbiB0M3QoYyxsKXtyZXR1cm4tMSE9PWMuaW5kZXhPZihsKT9jOmAke2MucmVwbGFjZSgiaHRMZWZ0IiwiIikucmVwbGFjZSgiaHRDZW50''@;'; put 'put ''ZXIiLCIiKS5yZXBsYWNlKCJodFJpZ2h0IiwiIikucmVwbGFjZSgiaHRKdXN0aWZ5IiwiIikucmVwbGFjZSgiICAiLCIiKX0gJHtsfWB9KHYuY2xhc3NOYW1lLGQpKSxmKGMsbCwiY2xhc3NOYW1lIixNKX0odixNLGwsYSxkLGgpfSl9KX1mdW5jdGlvbiBqOGUoYyl7cmV0dXJuYDxzcGFuIGNs''@;'; put 'put ''YXNzPSJzZWxlY3RlZCI+XHUyNzEzPC9zcGFuPiR7Y31gfWZ1bmN0aW9uIE5WKGMsbCl7bGV0IGE9ITE7cmV0dXJuIEFycmF5LmlzQXJyYXkoYykmJktuKGMsZD0+KGQuZm9yQWxsKChoLGYpPT57aWYoaD49MCYmZj49MCYmbChoLGYpKXJldHVybiBhPSEwLCExfSksYSkpLGF9ZnVuY3Rpb24g''@;'; put 'put ''VlYoYyxsKXtjb25zdCBhPXt0b3A6MCxsZWZ0OjB9O2lmKGwhPT1jLm93bmVyRG9jdW1lbnQpe2NvbnN0e2ZyYW1lRWxlbWVudDpkfT1sLmRlZmF1bHRWaWV3LHt0b3A6aCxsZWZ0OmZ9PWQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7YS50b3A9aCxhLmxlZnQ9Zn1yZXR1cm4gYX1mdW5jdGlv''@;'; put 'put ''biBJdihjLGwsYSl7ejhlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiB6OGUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHo0KGMsbCxh''@;'; put 'put ''KXtyZXR1cm4gYy5zZXQoRTAoYyxsKSxhKSxhfWZ1bmN0aW9uIHNzKGMsbCl7cmV0dXJuIGMuZ2V0KEUwKGMsbCkpfWZ1bmN0aW9uIEUwKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBCVj0iY29tbWVudHMiLGs1PSJjb21tZW50IixWaz0idmFsdWUiLFU4ZT0ic3R5bGUiLGpWPSJyZWFkT25seSIsQms9QlYseG5lPWBwbHVnaW46JHtCVn1gO3ZhciBZbD1uZXcg''@;'; put 'put ''V2Vha01hcCxVND1uZXcgV2Vha01hcCx6Vj1uZXcgV2Vha01hcCxVVj1uZXcgV2Vha01hcCxaVj1uZXcgV2Vha01hcCxFbmU9bmV3IFdlYWtNYXAsV1Y9bmV3IFdlYWtNYXAsVzA9bmV3IFdlYWtTZXQ7Y2xhc3MgYzN0IGV4dGVuZHMgTXN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVu''@;'; put 'put ''dHMpLGZ1bmN0aW9uIGkzdChjLGwpe3o4ZShjLGwpLGwuYWRkKGMpfSh0aGlzLFcwKSxmdW5jdGlvbiBhM3QoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIG8zdChjKXt2YXIgbD1mdW5jdGlvbiBzM3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3lt''@;'; put 'put ''Ym9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVy''@;'; put 'put ''bigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0p''@;'; put 'put ''OmNbbF09YSxjfSh0aGlzLCJyYW5nZSIse30pLEl2KHRoaXMsWWwsbnVsbCksSXYodGhpcyxVNCxudWxsKSxJdih0aGlzLHpWLCExKSxJdih0aGlzLFVWLCExKSxJdih0aGlzLFpWLCExKSxJdih0aGlzLEVuZSxudWxsKSxJdih0aGlzLFdWLCIiKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXty''@;'; put 'put ''ZXR1cm4gQlZ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gNjB9c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue2Rpc3BsYXlEZWxheToyNTB9fWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtCVl19ZW5hYmxlUGx1Z2luKCl7''@;'; put 'put ''dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fChzcyhZbCx0aGlzKXx8KHo0KFlsLHRoaXMsbmV3IFdmdCh0aGlzLmhvdC5yb290RG9jdW1lbnQsdGhpcy5ob3QuaXNSdGwoKSx0aGlzLmhvdC5yb290UG9ydGFsRWxlbWVudCkpLHNzKFlsLHRoaXMpLmFkZExvY2FsSG9vaygicmVzaXplIixmdW5j''@;'; put 'put ''dGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBFMChXMCxsLHYzdCkuY2FsbChsLC4uLmQpfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJTZXRUaGVtZSIsKGEsZCk9PntkfHx0aGlzLmhp''@;'; put 'put ''ZGUoKX0pKSxzcyhVNCx0aGlzKXx8ejQoVTQsdGhpcyxuZXcgWGZ0KHRoaXMuZ2V0U2V0dGluZygiZGlzcGxheURlbGF5IikpKSx0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsYT0+dGhpcy5hZGRUb0NvbnRleHRNZW51KGEpKSx0aGlzLmFkZEhvb2soImFm''@;'; put 'put ''dGVyUmVuZGVyZXIiLChhLGQsaCxmLHYsTSk9PkUwKFcwLHRoaXMscDN0KS5jYWxsKHRoaXMsYSxNKSksdGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbCIsKCk9PkUwKFcwLHRoaXMseTN0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyQmVnaW5FZGl0aW5nIiwoKT0+dGhpcy5oaWRl''@;'; put 'put ''KCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJEb2N1bWVudEtleURvd24iLGE9PkUwKFcwLHRoaXMsWjhlKS5jYWxsKHRoaXMsYSkpLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29tcG9zaXRpb25TdGFydCIsYT0+RTAoVzAsdGhpcyxaOGUpLmNhbGwodGhpcyxhKSksc3MoVTQsdGhpcykuYWRkTG9jYWxI''@;'; put 'put ''b29rKCJoaWRlIiwoKT0+dGhpcy5oaWRlKCkpLHNzKFU0LHRoaXMpLmFkZExvY2FsSG9vaygic2hvdyIsKGEsZCk9PnRoaXMuc2hvd0F0Q2VsbChhLGQpKSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5yZWdpc3Rlckxpc3RlbmVycygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRh''@;'; put 'put ''dGVQbHVnaW4oKXtzcyhVNCx0aGlzKS51cGRhdGVEZWxheSh0aGlzLmdldFNldHRpbmcoImRpc3BsYXlEZWxheSIpKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXJlZ2lzdGVyU2hv''@;'; put 'put ''cnRjdXRzKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKSxhPWwuZ2V0Q29udGV4dCgiZ3JpZCIpLGQ9bC5hZGRDb250ZXh0KHhuZSk7YS5hZGRTaG9ydGN1dCh7a2V5czpbWyJDb250cm9sIiwiQWx0IiwiTSJdXSxjYWxsYmFjazooKT0+e2NvbnN0IGg9dGhpcy5ob3Qu''@;'; put 'put ''Z2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO3o0KFVWLHRoaXMsITApLHRoaXMuaG90LnNjcm9sbFRvRm9jdXNlZENlbGwoKCk9Pnt0aGlzLnNldFJhbmdlKGgpLHRoaXMuc2hvdygpLHRoaXMuZm9jdXNFZGl0b3IoKSxsLnNldEFjdGl2ZUNvbnRleHROYW1lKHhuZSksdGhpcy5ob3QuX3JlZ2lz''@;'; put 'put ''dGVyVGltZW91dCgoKT0+e3o0KFVWLHRoaXMsITEpfSl9KX0sc3RvcFByb3BhZ2F0aW9uOiEwLHJ1bk9ubHlJZjooKT0+e3ZhciBoO3JldHVybiBudWxsPT09KGg9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpKXx8dm9pZCAwPT09aD92b2lkIDA6aC5oaWdobGlnaHQuaXNDZWxs''@;'; put 'put ''KCl9LGdyb3VwOkJrfSksZC5hZGRTaG9ydGN1dCh7a2V5czpbWyJFc2NhcGUiXV0sY2FsbGJhY2s6KCk9PntzcyhZbCx0aGlzKS5zZXRWYWx1ZShzcyhXVix0aGlzKSksdGhpcy5oaWRlKCksbC5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZ3JpZCIpfSxydW5Pbmx5SWY6KCk9PnNzKFlsLHRoaXMp''@;'; put 'put ''LmlzVmlzaWJsZSgpJiZzcyhZbCx0aGlzKS5pc0ZvY3VzZWQoKSxncm91cDpCa30pLGQuYWRkU2hvcnRjdXQoe2tleXM6W1siQ29udHJvbC9NZXRhIiwiRW50ZXIiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLmhpZGUoKSxsLnNldEFjdGl2ZUNvbnRleHROYW1lKCJncmlkIil9LHJ1bk9ubHlJZjoo''@;'; put 'put ''KT0+c3MoWWwsdGhpcykuaXNWaXNpYmxlKCkmJnNzKFlsLHRoaXMpLmlzRm9jdXNlZCgpLGdyb3VwOkJrfSksZC5hZGRTaG9ydGN1dCh7a2V5czpbWyJTaGlmdCIsIlRhYiJdLFsiVGFiIl1dLGZvcndhcmRUb0NvbnRleHQ6bC5nZXRDb250ZXh0KCJncmlkIiksY2FsbGJhY2s6KCk9Pnt6NCha''@;'; put 'put ''Vix0aGlzLCEwKSxzcyhZbCx0aGlzKS5zZXRWYWx1ZShzcyhZbCx0aGlzKS5nZXRWYWx1ZSgpKSx0aGlzLnNldENvbW1lbnQoKSx0aGlzLmhpZGUoKSxsLnNldEFjdGl2ZUNvbnRleHROYW1lKCJncmlkIil9LGdyb3VwOkJrfSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNo''@;'; put 'put ''b3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKEJrKX1yZWdpc3Rlckxpc3RlbmVycygpe2NvbnN0e3Jvb3REb2N1bWVudDpsfT10aGlzLmhvdCxhPXRoaXMuZ2V0RWRpdG9ySW5wdXRFbGVtZW50KCk7dGhpcy5ldmVudE1hbmFnZXIuYWRk''@;'; put 'put ''RXZlbnRMaXN0ZW5lcihsLCJtb3VzZW92ZXIiLGQ9PkUwKFcwLHRoaXMsaDN0KS5jYWxsKHRoaXMsZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2Vkb3duIixkPT5FMChXMCx0aGlzLHUzdCkuY2FsbCh0aGlzLGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRF''@;'; put 'put ''dmVudExpc3RlbmVyKGwsIm1vdXNldXAiLCgpPT5FMChXMCx0aGlzLGYzdCkuY2FsbCh0aGlzKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJmb2N1cyIsKCk9PkUwKFcwLHRoaXMsbTN0KS5jYWxsKHRoaXMpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3Rl''@;'; put 'put ''bmVyKGEsImJsdXIiLCgpPT5FMChXMCx0aGlzLGczdCkuY2FsbCh0aGlzKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmdldEVkaXRvcklucHV0RWxlbWVudCgpLCJtb3VzZWRvd24iLGQ9PkUwKFcwLHRoaXMsZDN0KS5jYWxsKHRoaXMsZCkpfXNldFJhbmdlKGwp''@;'; put 'put ''e3RoaXMucmFuZ2U9bH1jbGVhclJhbmdlKCl7dGhpcy5yYW5nZT17fX10YXJnZXRJc0NlbGxXaXRoQ29tbWVudChsKXtjb25zdCBhPU02KGwudGFyZ2V0LCJURCIsIlRCT0RZIik7cmV0dXJuISEoYSYmQ28oYSwiaHRDb21tZW50Q2VsbCIpJiZNNihhLFt0aGlzLmhvdC5yb290RWxlbWVudF0p''@;'; put 'put ''KX10YXJnZXRJc0NvbW1lbnRUZXh0QXJlYShsKXtyZXR1cm4gdGhpcy5nZXRFZGl0b3JJbnB1dEVsZW1lbnQoKT09PWwudGFyZ2V0fXNldENvbW1lbnQobCl7aWYoIXRoaXMucmFuZ2UuZnJvbSl0aHJvdyBuZXcgRXJyb3IoJ0JlZm9yZSB1c2luZyB0aGlzIG1ldGhvZCwgZmlyc3Qgc2V0IGNl''@;'; put 'put ''bGwgcmFuZ2UgKGhvdC5nZXRQbHVnaW4oImNvbW1lbnQiKS5zZXRSYW5nZSgpKScpO2NvbnN0IGE9c3MoWWwsdGhpcykuZ2V0VmFsdWUoKTtsZXQgZD0iIjtudWxsIT1sP2Q9bDpudWxsIT1hJiYoZD1hKTtjb25zdHtyb3c6aCxjb2w6Zn09RTAoVzAsdGhpcyxUQykuY2FsbCh0aGlzKTt0aGlz''@;'; put 'put ''LnVwZGF0ZUNvbW1lbnRNZXRhKGgsZix7W1ZrXTpkfSksdGhpcy5ob3QucmVuZGVyKCl9c2V0Q29tbWVudEF0Q2VsbChsLGEsZCl7dGhpcy5zZXRSYW5nZSh7ZnJvbTp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLGEpfSksdGhpcy5zZXRDb21tZW50KGQpfXJlbW92ZUNvbW1lbnQoKXts''@;'; put 'put ''ZXQgbD0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdO2lmKCF0aGlzLnJhbmdlLmZyb20pdGhyb3cgbmV3IEVycm9yKCdCZWZvcmUgdXNpbmcgdGhpcyBtZXRob2QsIGZpcnN0IHNldCBjZWxsIHJhbmdlIChob3QuZ2V0UGx1Z2luKCJj''@;'; put 'put ''b21tZW50Iikuc2V0UmFuZ2UoKSknKTtjb25zdHtyb3c6YSxjb2w6ZH09RTAoVzAsdGhpcyxUQykuY2FsbCh0aGlzKTt0aGlzLmhvdC5zZXRDZWxsTWV0YShhLGQsazUpLGwmJnRoaXMuaG90LnJlbmRlcigpLHRoaXMuaGlkZSgpfXJlbW92ZUNvbW1lbnRBdENlbGwobCxhKXtsZXQgZD0hKGFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO3RoaXMuc2V0UmFuZ2Uoe2Zyb206dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxhKX0pLHRoaXMucmVtb3ZlQ29tbWVudChkKX1nZXRDb21tZW50KCl7Y29uc3R7cm93OmwsY29sOmF9PUUw''@;'; put 'put ''KFcwLHRoaXMsVEMpLmNhbGwodGhpcyk7cmV0dXJuIHRoaXMuZ2V0Q29tbWVudE1ldGEobCxhLFZrKX1nZXRDb21tZW50QXRDZWxsKGwsYSl7cmV0dXJuIHRoaXMuZ2V0Q29tbWVudE1ldGEobCxhLFZrKX1zaG93KCl7dmFyIGw7aWYoIXRoaXMucmFuZ2UuZnJvbSl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''J0JlZm9yZSB1c2luZyB0aGlzIG1ldGhvZCwgZmlyc3Qgc2V0IGNlbGwgcmFuZ2UgKGhvdC5nZXRQbHVnaW4oImNvbW1lbnQiKS5zZXRSYW5nZSgpKScpO2NvbnN0e3JvdzphLGNvbDpkfT1FMChXMCx0aGlzLFRDKS5jYWxsKHRoaXMpO2lmKGE8MHx8YT50aGlzLmhvdC5jb3VudFNvdXJjZVJv''@;'; put 'put ''d3MoKS0xfHxkPDB8fGQ+dGhpcy5ob3QuY291bnRTb3VyY2VDb2xzKCktMSlyZXR1cm4hMTtjb25zdCBoPXRoaXMuaG90LmdldENlbGxNZXRhKGEsZCk7cmV0dXJuIHNzKFU0LHRoaXMpLmNhbmNlbEhpZGluZygpLHNzKFlsLHRoaXMpLnNldFZhbHVlKG51bGwhPT0obD1oW2s1XT9oW2s1XVtW''@;'; put 'put ''a106bnVsbCkmJnZvaWQgMCE9PWw/bDoiIiksc3MoWWwsdGhpcykuc2hvdygpLHRoaXMucmVmcmVzaEVkaXRvcighMCksITB9c2hvd0F0Q2VsbChsLGEpe3JldHVybiB0aGlzLnNldFJhbmdlKHtmcm9tOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwsYSl9KSx0aGlzLnNob3coKX1oaWRl''@;'; put 'put ''KCl7c3MoWWwsdGhpcykuaGlkZSgpfXJlZnJlc2hFZGl0b3IoKXtpZighKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF18fHRoaXMucmFuZ2UuZnJvbSYmc3MoWWwsdGhpcykuaXNWaXNpYmxlKCkpKXJldHVybjtjb25zdHtyb3dJbmRleE1h''@;'; put 'put ''cHBlcjphLGNvbHVtbkluZGV4TWFwcGVyOmR9PXRoaXMuaG90LHtyb3c6aCxjb2w6Zn09RTAoVzAsdGhpcyxUQykuY2FsbCh0aGlzKTtsZXQgdj1hLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaCksTT1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZik7Y29uc3QgRD1udWxs''@;'; put 'put ''PT09djtzcyhZbCx0aGlzKS5zZXRQb3NpdGlvbigwLDApLG51bGw9PT12JiYodj1hLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoYS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoaCwtMSkpKSxudWxsPT09TSYmKE09ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGQuZ2V0TmVh''@;'; put 'put ''cmVzdE5vdEhpZGRlbkluZGV4KGYsLTEpKSk7Y29uc3QgVT1udWxsPT09dix0ZT1udWxsPT09TTt2PXY/PzAsTT1NPz8wO2NvbnN0e3Jvb3RXaW5kb3c6b2Usdmlldzp7X3d0OnZlfX09dGhpcy5ob3Qse3d0VGFibGU6d2V9PXZlLEZlPXZlLmdldENlbGwoe3Jvdzp2LGNvbDpNfSwhMCksV2U9''@;'; put 'put ''dGhpcy5nZXRDb21tZW50TWV0YShoLGYsInN0eWxlIik7V2U/c3MoWWwsdGhpcykuc2V0U2l6ZShXZS53aWR0aCxXZS5oZWlnaHQpOnNzKFlsLHRoaXMpLnJlc2V0U2l6ZSgpO2NvbnN0IG50PXRlPzA6d2UuZ2V0Q29sdW1uV2lkdGgoTSksZHQ9RCYmIVU/RnUoRmUpOjAse2xlZnQ6bXQsdG9w''@;'; put 'put ''OiR0LHdpZHRoOnp0LGhlaWdodDp5bn09RmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkse3dpZHRoOmduLGhlaWdodDp3bn09c3MoWWwsdGhpcykuZ2V0U2l6ZSgpLHtpbm5lcldpZHRoOlJuLGlubmVySGVpZ2h0OkRyfT10aGlzLmhvdC5yb290V2luZG93LExyPXRoaXMuaG90LnJvb3REb2N1''@;'; put 'put ''bWVudC5kb2N1bWVudEVsZW1lbnQsZHI9d3UodGhpcy5ob3Qucm9vdERvY3VtZW50KSxNcj1pSih0aGlzLmhvdC5yb290V2luZG93KT9kcjowLHZpPWFKKHRoaXMuaG90LnJvb3RXaW5kb3cpP2RyOjA7bGV0IE5uPW10K29lLnNjcm9sbFgrbnQsQnI9JHQrb2Uuc2Nyb2xsWStkdDt0aGlzLmhv''@;'; put 'put ''dC5pc1J0bCgpJiYoTm4tPWduK250KSx0aGlzLmhvdC5pc0x0cigpJiZtdCt6dCtnbj5Sbi1Ncj9Obj1tdCtvZS5zY3JvbGxYLWduLTE6dGhpcy5ob3QuaXNSdGwoKSYmTm48LShMci5zY3JvbGxXaWR0aC1Mci5jbGllbnRXaWR0aCkmJihObj1tdCtvZS5zY3JvbGxYK250KzEpLCR0K3duPkRy''@;'; put 'put ''LXZpJiYoQnItPXduLXluKzEpLHNzKFlsLHRoaXMpLnNldFBvc2l0aW9uKE5uLEJyKSxzcyhZbCx0aGlzKS5zZXRSZWFkT25seVN0YXRlKHRoaXMuZ2V0Q29tbWVudE1ldGEoaCxmLGpWKSksc3MoWWwsdGhpcykub2JzZXJ2ZVNpemUoKX1mb2N1c0VkaXRvcigpe3NzKFlsLHRoaXMpLmZvY3Vz''@;'; put 'put ''KCl9dXBkYXRlQ29tbWVudE1ldGEobCxhLGQpe2NvbnN0IGg9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEobCxhKVtrNV07bGV0IGY7aD8oZj1CMShoKSxQQShmLGQpKTpmPWQsdGhpcy5ob3Quc2V0Q2VsbE1ldGEobCxhLGs1LGYpfWdldENvbW1lbnRNZXRhKGwsYSxkKXtjb25zdCBoPXRoaXMuaG90''@;'; put 'put ''LmdldENlbGxNZXRhKGwsYSk7aWYoaFtrNV0pcmV0dXJuIGhbazVdW2RdfWFkZFRvQ29udGV4dE1lbnUobCl7bC5pdGVtcy5wdXNoKHtuYW1lOnlzfSxmdW5jdGlvbiBKZnQoYyl7cmV0dXJue2tleToiY29tbWVudHNBZGRFZGl0IixuYW1lKCl7dmFyIGw7Y29uc3QgYT1udWxsPT09KGw9dGhp''@;'; put 'put ''cy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmhpZ2hsaWdodDtyZXR1cm4gbnVsbCE9YSYmYS5pc0NlbGwoKSYmYy5nZXRDb21tZW50QXRDZWxsKGEucm93LGEuY29sKT90aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoVlEpOnRoaXMuZ2V0VHJhbnNsYXRl''@;'; put 'put ''ZFBocmFzZShOUSl9LGNhbGxiYWNrKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtjLnNldFJhbmdlKGwpLGMuc2hvdygpLGMuZm9jdXNFZGl0b3IoKX0sZGlzYWJsZWQoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO3JldHVybiEhKCFsfHxs''@;'; put 'put ''LmhpZ2hsaWdodC5pc0hlYWRlcigpfHx0aGlzLnNlbGVjdGlvbi5pc0VudGlyZVJvd1NlbGVjdGVkKCkmJnRoaXMuc2VsZWN0aW9uLmlzRW50aXJlQ29sdW1uU2VsZWN0ZWQoKXx8MD09PXRoaXMuY291bnRSZW5kZXJlZFJvd3MoKXx8MD09PXRoaXMuY291bnRSZW5kZXJlZENvbHMoKSl9fX0o''@;'; put 'put ''dGhpcyksZnVuY3Rpb24gUWZ0KGMpe3JldHVybntrZXk6ImNvbW1lbnRzUmVtb3ZlIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShCUSl9LGNhbGxiYWNrKCl7dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkuZm9yQWxsKChhLGQpPT57YT49MCYmZD49MCYmYy5y''@;'; put 'put ''ZW1vdmVDb21tZW50QXRDZWxsKGEsZCwhMSl9KSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZCgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7cmV0dXJuISEoIWx8fGwuaGlnaGxpZ2h0LmlzSGVhZGVyKCl8fHRoaXMuc2VsZWN0aW9uLmlzRW50aXJlUm93U2VsZWN0ZWQo''@;'; put 'put ''KSYmdGhpcy5zZWxlY3Rpb24uaXNFbnRpcmVDb2x1bW5TZWxlY3RlZCgpfHwwPT09dGhpcy5jb3VudFJlbmRlcmVkUm93cygpfHwwPT09dGhpcy5jb3VudFJlbmRlcmVkQ29scygpKX19fSh0aGlzKSxmdW5jdGlvbiByM3QoYyl7cmV0dXJue2tleToiY29tbWVudHNSZWFkT25seSIsbmFtZSgp''@;'; put 'put ''e2NvbnN0IGw9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGpRKTtyZXR1cm4gTlYodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksKGQsaCk9PmMuZ2V0Q29tbWVudE1ldGEoZCxoLGpWKSk/ajhlKGwpOmx9LGNhbGxiYWNrKCl7dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkuZm9yQWxsKChh''@;'; put 'put ''LGQpPT57aWYoYT49MCYmZD49MCl7Y29uc3QgaD0hIWMuZ2V0Q29tbWVudE1ldGEoYSxkLGpWKTtjLnVwZGF0ZUNvbW1lbnRNZXRhKGEsZCx7W2pWXTohaH0pfX0pfSxkaXNhYmxlZCgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7cmV0dXJuISEoIWx8fGwuaGlnaGxp''@;'; put 'put ''Z2h0LmlzSGVhZGVyKCl8fCFjLmdldENvbW1lbnRBdENlbGwobC5oaWdobGlnaHQucm93LGwuaGlnaGxpZ2h0LmNvbCl8fHRoaXMuc2VsZWN0aW9uLmlzRW50aXJlUm93U2VsZWN0ZWQoKSYmdGhpcy5zZWxlY3Rpb24uaXNFbnRpcmVDb2x1bW5TZWxlY3RlZCgpfHwwPT09dGhpcy5jb3VudFJl''@;'; put 'put ''bmRlcmVkUm93cygpfHwwPT09dGhpcy5jb3VudFJlbmRlcmVkQ29scygpKX19fSh0aGlzKSl9Z2V0RWRpdG9ySW5wdXRFbGVtZW50KCl7cmV0dXJuIHNzKFlsLHRoaXMpLmdldElucHV0RWxlbWVudCgpfWRlc3Ryb3koKXt2YXIgbCxhO251bGw9PT0obD1zcyhZbCx0aGlzKSl8fHZvaWQgMD09''@;'; put 'put ''PWx8fGwuZGVzdHJveSgpLG51bGw9PT0oYT1zcyhVNCx0aGlzKSl8fHZvaWQgMD09PWF8fGEuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gdTN0KGMpe2lmKHRoaXMuaG90LnZpZXcmJnRoaXMuaG90LnZpZXcuX3d0JiYhc3MoelYsdGhpcykmJiF0aGlzLnRhcmdldElzQ29t''@;'; put 'put ''bWVudFRleHRBcmVhKGMpKXtjb25zdCBsPU02KGMudGFyZ2V0LCJURCIsIlRCT0RZIik7bGV0IGE9bnVsbDtsJiYoYT10aGlzLmhvdC5nZXRDb29yZHMobCkpLCghbHx8dGhpcy5yYW5nZS5mcm9tJiZhJiYodGhpcy5yYW5nZS5mcm9tLnJvdyE9PWEucm93fHx0aGlzLnJhbmdlLmZyb20uY29s''@;'; put 'put ''IT09YS5jb2wpKSYmdGhpcy5oaWRlKCl9fWZ1bmN0aW9uIGQzdChjKXtjLnN0b3BQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIGgzdChjKXtjb25zdHtyb290RG9jdW1lbnQ6bH09dGhpcy5ob3Q7aWYoIShzcyh6Vix0aGlzKXx8c3MoWWwsdGhpcykuaXNGb2N1c2VkKCl8fENvKGMudGFyZ2V0LCJ3''@;'; put 'put ''dEJvcmRlciIpfHxzcyhFbmUsdGhpcyk9PT1jLnRhcmdldCkmJnNzKFlsLHRoaXMpKWlmKHo0KEVuZSx0aGlzLGwuZWxlbWVudEZyb21Qb2ludChjLmNsaWVudFgsYy5jbGllbnRZKSksdGhpcy50YXJnZXRJc0NlbGxXaXRoQ29tbWVudChjKSl7Y29uc3QgYT10aGlzLmhvdC5fY3JlYXRlQ2Vs''@;'; put 'put ''bFJhbmdlKHRoaXMuaG90LmdldENvb3JkcyhjLnRhcmdldCkpO3NzKFU0LHRoaXMpLnNob3coYSl9ZWxzZSB4NihjLnRhcmdldCxsKSYmIXRoaXMudGFyZ2V0SXNDb21tZW50VGV4dEFyZWEoYykmJnNzKFU0LHRoaXMpLmhpZGUoKX1mdW5jdGlvbiBmM3QoKXt6NCh6Vix0aGlzLCExKX1mdW5j''@;'; put 'put ''dGlvbiBwM3QoYyxsKXtsW2s1XSYmbFtrNV1bVmtdJiZpaShjLGwuY29tbWVudGVkQ2VsbENsYXNzTmFtZSl9ZnVuY3Rpb24gZzN0KCl7c3MoWlYsdGhpcyk/ejQoWlYsdGhpcywhMSk6KHo0KFdWLHRoaXMsIiIpLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFjdGl2ZUNvbnRl''@;'; put 'put ''eHROYW1lKCJncmlkIiksdGhpcy5zZXRDb21tZW50KCkpfWZ1bmN0aW9uIG0zdCgpe3o0KFdWLHRoaXMsdGhpcy5nZXRDb21tZW50KCkpLHRoaXMuaG90Lmxpc3RlbigpLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFjdGl2ZUNvbnRleHROYW1lKHhuZSl9ZnVuY3Rpb24gdjN0''@;'; put 'put ''KGMsbCl7Y29uc3R7cm93OmEsY29sOmR9PUUwKFcwLHRoaXMsVEMpLmNhbGwodGhpcyk7dGhpcy51cGRhdGVDb21tZW50TWV0YShhLGQse1tVOGVdOnt3aWR0aDpjLGhlaWdodDpsfX0pfWZ1bmN0aW9uIFo4ZShjKXtzcyhZbCx0aGlzKS5pc0ZvY3VzZWQoKSYmRTIoYyl9ZnVuY3Rpb24geTN0''@;'; put 'put ''KCl7c3MoVVYsdGhpcyl8fHRoaXMuaGlkZSgpfWZ1bmN0aW9uIFRDKCl7cmV0dXJuIHRoaXMucmFuZ2UgaW5zdGFuY2VvZiBfTj90aGlzLnJhbmdlLmhpZ2hsaWdodDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyh0aGlzLnJhbmdlLmZyb20ucm93LHRoaXMucmFuZ2UuZnJvbS5jb2wpfWZ1''@;'; put 'put ''bmN0aW9uIFRuZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gYjN0KGMpe3ZhciBsPWZ1bmN0aW9uIF8zdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJk''@;'; put 'put ''ZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJu''@;'; put 'put ''InN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgVzhle2NvbnN0cnVjdG9yKGwpe1RuZSh0aGlzLCJob3QiLHZv''@;'; put 'put ''aWQgMCksVG5lKHRoaXMsImNvbW1hbmRzIix7fSksVG5lKHRoaXMsImNvbW1vbkNhbGxiYWNrIixudWxsKSx0aGlzLmhvdD1sfXJlZ2lzdGVyQ29tbWFuZChsLGEpe3RoaXMuY29tbWFuZHNbbF09YX1zZXRDb21tb25DYWxsYmFjayhsKXt0aGlzLmNvbW1vbkNhbGxiYWNrPWx9ZXhlY3V0ZShs''@;'; put 'put ''KXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhPjE/YS0xOjApLGg9MTtoPGE7aCsrKWRbaC0xXT1hcmd1bWVudHNbaF07Y29uc3QgZj1sLnNwbGl0KCI6Iiksdj1mWzBdLE09Mj09PWYubGVuZ3RoP2ZbMV06bnVsbDtsZXQgRD10aGlzLmNvbW1hbmRzW3ZdO2lmKCFE''@;'; put 'put ''KXRocm93IG5ldyBFcnJvcihgTWVudSBjb21tYW5kICcke3Z9JyBub3QgZXhpc3RzLmApO2lmKE0mJkQuc3VibWVudSYmKEQ9ZnVuY3Rpb24gdzN0KGMsbCl7bGV0IGE7cmV0dXJuIEtuKGwsZD0+e2NvbnN0IGg9ZC5rZXk/ZC5rZXkuc3BsaXQoIjoiKTpudWxsO2lmKEFycmF5LmlzQXJyYXko''@;'; put 'put ''aCkmJmhbMV09PT1jKXJldHVybiBhPWQsITF9KSxhfShNLEQuc3VibWVudS5pdGVtcykpLCEwPT09RC5kaXNhYmxlZHx8ImZ1bmN0aW9uIj09dHlwZW9mIEQuZGlzYWJsZWQmJiEwPT09RC5kaXNhYmxlZC5jYWxsKHRoaXMuaG90KXx8bnUoRCwic3VibWVudSIpKXJldHVybjtjb25zdCBVPVtd''@;'; put 'put ''OyJmdW5jdGlvbiI9PXR5cGVvZiBELmNhbGxiYWNrJiZVLnB1c2goRC5jYWxsYmFjayksImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuY29tbW9uQ2FsbGJhY2smJlUucHVzaCh0aGlzLmNvbW1vbkNhbGxiYWNrKSxkLnVuc2hpZnQoZi5qb2luKCI6IikpLEtuKFUsdGU9PnRlLmFwcGx5KHRoaXMu''@;'; put 'put ''aG90LGQpKX19Y29uc3QgJGY9ImFsaWdubWVudCIsWVY9ImNsZWFyX2NvbHVtbiIsams9ImNvbF9sZWZ0Iix6az0iY29sX3JpZ2h0IixVaz0ibWFrZV9yZWFkX29ubHkiLEdWPSJyZWRvIixaaz0icmVtb3ZlX2NvbCIsJFY9InJlbW92ZV9yb3ciLEtWPSJyb3dfYWJvdmUiLFhWPSJyb3dfYmVs''@;'; put 'put ''b3ciLFdrPSJub19pdGVtcyIscVY9InVuZG8iLFk4ZT1bS1YsWFYsamssemssWVYsJFYsWmsscVYsR1YsVWssJGYseXMsV2tdLEc4ZT17W3lzXTpmdW5jdGlvbiBxZnQoKXtyZXR1cm57bmFtZTp5c319LFtXa106ZnVuY3Rpb24gUjN0KCl7cmV0dXJue2tleTpXayxuYW1lKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuZ2V0VHJhbnNsYXRlZFBocmFzZShiUSl9LGRpc2FibGVkOiEwLGlzQ29tbWFuZDohMX19LFtLVl06ZnVuY3Rpb24gRDN0KCl7cmV0dXJue2tleTpLVixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShfUSl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVj''@;'; put 'put ''dGVkUmFuZ2VBY3RpdmUoKS5nZXRUb3BMZWZ0Q29ybmVyKCk7dGhpcy5hbHRlcigiaW5zZXJ0X3Jvd19hYm92ZSIsYy5yb3csMSwiQ29udGV4dE1lbnUucm93QWJvdmUiKX0sZGlzYWJsZWQoKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO3JldHVybiEhKCFjfHx0aGlz''@;'; put 'put ''LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8Yy5pc1NpbmdsZUhlYWRlcigpJiZjLmhpZ2hsaWdodC5yb3c8MHx8dGhpcy5jb3VudFNvdXJjZVJvd3MoKT49dGhpcy5nZXRTZXR0aW5ncygpLm1heFJvd3MpfHwhIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5l''@;'; put 'put ''cigpJiYwPT09dGhpcy5jb3VudFJvd3MoKX0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd0luc2VydFJvd319fSxbWFZdOmZ1bmN0aW9uIEkzdCgpe3JldHVybntrZXk6WFYsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2Uod1EpfSxjYWxsYmFj''@;'; put 'put ''aygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkuZ2V0Qm90dG9tUmlnaHRDb3JuZXIoKTt0aGlzLmFsdGVyKCJpbnNlcnRfcm93X2JlbG93IixjLnJvdywxLCJDb250ZXh0TWVudS5yb3dCZWxvdyIpfSxkaXNhYmxlZCgpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJh''@;'; put 'put ''bmdlQWN0aXZlKCk7cmV0dXJuISEoIWN8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHxjLmlzU2luZ2xlSGVhZGVyKCkmJmMuaGlnaGxpZ2h0LnJvdzwwfHx0aGlzLmNvdW50U291cmNlUm93cygpPj10aGlzLmdldFNldHRpbmdzKCkubWF4Um93cyl9LGhpZGRl''@;'; put 'put ''bigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dJbnNlcnRSb3d9fX0sW2prXTpmdW5jdGlvbiBNM3QoKXtyZXR1cm57a2V5OmprLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKENRKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5n''@;'; put 'put ''ZUFjdGl2ZSgpLmdldFRvcExlZnRDb3JuZXIoKSxsPXRoaXMuaXNSdGwoKT8iaW5zZXJ0X2NvbF9lbmQiOiJpbnNlcnRfY29sX3N0YXJ0Ijt0aGlzLmFsdGVyKGwsYy5jb2wsMSwiQ29udGV4dE1lbnUuY29sdW1uTGVmdCIpfSxkaXNhYmxlZCgpe2lmKCF0aGlzLmlzQ29sdW1uTW9kaWZpY2F0''@;'; put 'put ''aW9uQWxsb3dlZCgpKXJldHVybiEwO2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7cmV0dXJuISEoIWN8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpfHxjLmlzU2luZ2xlSGVhZGVyKCkmJmMuaGlnaGxpZ2h0LmNvbDwwfHx0aGlzLmNvdW50U291''@;'; put 'put ''cmNlQ29scygpPj10aGlzLmdldFNldHRpbmdzKCkubWF4Q29scyl8fCEhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJjA9PT10aGlzLmNvdW50Q29scygpfSxoaWRkZW4oKXtyZXR1cm4hdGhpcy5nZXRTZXR0aW5ncygpLmFsbG93SW5zZXJ0Q29sdW1ufX19LFt6a106ZnVu''@;'; put 'put ''Y3Rpb24geDN0KCl7cmV0dXJue2tleTp6ayxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShTUSl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKS5nZXRUb3BSaWdodENvcm5lcigpLGw9dGhpcy5pc1J0bCgpPyJpbnNlcnRfY29s''@;'; put 'put ''X3N0YXJ0IjoiaW5zZXJ0X2NvbF9lbmQiO3RoaXMuYWx0ZXIobCxjLmNvbCwxLCJDb250ZXh0TWVudS5jb2x1bW5SaWdodCIpfSxkaXNhYmxlZCgpe2lmKCF0aGlzLmlzQ29sdW1uTW9kaWZpY2F0aW9uQWxsb3dlZCgpKXJldHVybiEwO2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0''@;'; put 'put ''aXZlKCk7cmV0dXJuISEoIWN8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpfHxjLmlzU2luZ2xlSGVhZGVyKCkmJmMuaGlnaGxpZ2h0LmNvbDwwfHx0aGlzLmNvdW50U291cmNlQ29scygpPj10aGlzLmdldFNldHRpbmdzKCkubWF4Q29scyl9LGhpZGRlbigpe3JldHVy''@;'; put 'put ''biF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dJbnNlcnRDb2x1bW59fX0sW1lWXTpmdW5jdGlvbiBTM3QoKXtyZXR1cm57a2V5OllWLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEFRKX0sY2FsbGJhY2soYyxsKXtjb25zdCBhPWxbMF0uc3RhcnQuY29sLGQ9bFswXS5l''@;'; put 'put ''bmQuY29sO3RoaXMuY291bnRSb3dzKCkmJnRoaXMucG9wdWxhdGVGcm9tQXJyYXkoMCxhLFtbbnVsbF1dLE1hdGgubWF4KGxbMF0uc3RhcnQucm93LGxbMF0uZW5kLnJvdyksZCwiQ29udGV4dE1lbnUuY2xlYXJDb2x1bW4iKX0sZGlzYWJsZWQoKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRS''@;'; put 'put ''YW5nZUFjdGl2ZSgpO2lmKCFjfHxjLmlzU2luZ2xlSGVhZGVyKCkmJmMuaGlnaGxpZ2h0LmNvbDwwfHwhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpcmV0dXJuITA7bGV0IGw9ITE7cmV0dXJuIGMuZm9yQWxsKChhLGQpPT57aWYoYTwwfHxkPDApcmV0dXJuITA7''@;'; put 'put ''Y29uc3R7cmVhZE9ubHk6aH09dGhpcy5nZXRDZWxsTWV0YShhLGQpO3JldHVybiEhaHx8KGw9ITAsITEpfSksIWx9fX0sWyRWXTpmdW5jdGlvbiBrM3QoKXtyZXR1cm57a2V5OiRWLG5hbWUoKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWQoKTtsZXQgbD0wO2lmKGMpaWYoYy5sZW5ndGg+MSls''@;'; put 'put ''PTE7ZWxzZXtjb25zdFthLCxkXT1jWzBdO2EtZCE9MCYmKGw9MSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShNUSxsKX0sY2FsbGJhY2soKXt0aGlzLmFsdGVyKCJyZW1vdmVfcm93IixmdW5jdGlvbiB1Y3QoYyl7Y29uc3QgbD10QyhjLmdldFNlbGVjdGVkKCkpO2lmKDA9PT1s''@;'; put 'put ''fHwxPT09bClyZXR1cm5bXTtjb25zdCBhPW1rKGwse2NyZWF0ZUNlbGxDb29yZHM6Yy5fY3JlYXRlQ2VsbENvb3Jkcy5iaW5kKGMpLGNyZWF0ZUNlbGxSYW5nZTpjLl9jcmVhdGVDZWxsUmFuZ2UuYmluZChjKX0pLGQ9bmV3IFNldDtyZXR1cm4gS24oYy5nZXRTZWxlY3RlZCgpLHY9Pntjb25z''@;'; put 'put ''dHtmcm9tOk0sdG86RH09YSh2KSxVPU1hdGgubWF4KE0ucm93LDApO0tuKEFycmF5LmZyb20obmV3IEFycmF5KEQucm93LVUrMSksKG9lLHZlKT0+VSt2ZSksb2U9PntkLmhhcyhvZSl8fGQuYWRkKG9lKX0pfSksYTAoQXJyYXkuZnJvbShkKS5zb3J0KCh2LE0pPT52LU0pLCh2LE0sRCxVKT0+''@;'; put 'put ''KDAhPT1EJiZNPT09VVtELTFdKzE/dlt2Lmxlbmd0aC0xXVsxXSs9MTp2LnB1c2goW00sMV0pLHYpLFtdKX0odGhpcyksMSwiQ29udGV4dE1lbnUucmVtb3ZlUm93Iil9LGRpc2FibGVkKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZighY3x8Yy5pc1NpbmdsZUhl''@;'; put 'put ''YWRlcigpJiZjLmhpZ2hsaWdodC5yb3c8MClyZXR1cm4hMDtjb25zdCBsPXRoaXMuY291bnRSb3dzKCk7cmV0dXJuIHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpPzA9PT1sOnRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHwwPT09bH0saGlkZGVu''@;'; put 'put ''KCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd1JlbW92ZVJvd319fSxbWmtdOmZ1bmN0aW9uIEEzdCgpe3JldHVybntrZXk6WmssbmFtZSgpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZCgpO2xldCBsPTA7aWYoYylpZihjLmxlbmd0aD4xKWw9MTtlbHNle2NvbnN0WyxhLCxkXT1j''@;'; put 'put ''WzBdO2EtZCE9MCYmKGw9MSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSh4USxsKX0sY2FsbGJhY2soKXt0aGlzLmFsdGVyKCJyZW1vdmVfY29sIixmdW5jdGlvbiBjY3QoYyl7Y29uc3QgbD10QyhjLmdldFNlbGVjdGVkKCkpO2lmKDA9PT1sfHwxPT09bClyZXR1cm5bXTtjb25z''@;'; put 'put ''dCBhPW1rKGwse2NyZWF0ZUNlbGxDb29yZHM6Yy5fY3JlYXRlQ2VsbENvb3Jkcy5iaW5kKGMpLGNyZWF0ZUNlbGxSYW5nZTpjLl9jcmVhdGVDZWxsUmFuZ2UuYmluZChjKX0pLGQ9bmV3IFNldDtyZXR1cm4gS24oYy5nZXRTZWxlY3RlZCgpLHY9Pntjb25zdHtmcm9tOk0sdG86RH09YSh2KSxV''@;'; put 'put ''PU1hdGgubWF4KE0uY29sLDApO0tuKEFycmF5LmZyb20obmV3IEFycmF5KEQuY29sLVUrMSksKG9lLHZlKT0+VSt2ZSksb2U9PntkLmhhcyhvZSl8fGQuYWRkKG9lKX0pfSksYTAoQXJyYXkuZnJvbShkKS5zb3J0KCh2LE0pPT52LU0pLCh2LE0sRCxVKT0+KDAhPT1EJiZNPT09VVtELTFdKzE/''@;'; put 'put ''dlt2Lmxlbmd0aC0xXVsxXSs9MTp2LnB1c2goW00sMV0pLHYpLFtdKX0odGhpcyksbnVsbCwiQ29udGV4dE1lbnUucmVtb3ZlQ29sdW1uIil9LGRpc2FibGVkKCl7aWYoIXRoaXMuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkKCkpcmV0dXJuITA7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVk''@;'; put 'put ''UmFuZ2VBY3RpdmUoKTtpZighY3x8Yy5pc1NpbmdsZUhlYWRlcigpJiZjLmhpZ2hsaWdodC5jb2w8MClyZXR1cm4hMDtjb25zdCBsPXRoaXMuY291bnRDb2xzKCk7cmV0dXJuIHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpPzA9PT1sOnRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0''@;'; put 'put ''ZWRCeVJvd0hlYWRlcigpfHwwPT09bH0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd1JlbW92ZUNvbHVtbn19fSxbcVZdOmZ1bmN0aW9uIEwzdCgpe3JldHVybntrZXk6cVYsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoRVEpfSxjYWxsYmFj''@;'; put 'put ''aygpe3RoaXMuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIpLnVuZG8oKX0saGlkZGVuKCl7Y29uc3QgYz10aGlzLmdldFBsdWdpbigidW5kb1JlZG8iKTtyZXR1cm4hY3x8IWMuaXNFbmFibGVkKCl9LGRpc2FibGVkKCl7cmV0dXJuIXRoaXMuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIpLmlzVW5kb0F2YWls''@;'; put 'put ''YWJsZSgpfX19LFtHVl06ZnVuY3Rpb24gVDN0KCl7cmV0dXJue2tleTpHVixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShUUSl9LGNhbGxiYWNrKCl7dGhpcy5nZXRQbHVnaW4oInVuZG9SZWRvIikucmVkbygpfSxoaWRkZW4oKXtjb25zdCBjPXRoaXMuZ2V0UGx1Z2lu''@;'; put 'put ''KCJ1bmRvUmVkbyIpO3JldHVybiFjfHwhYy5pc0VuYWJsZWQoKX0sZGlzYWJsZWQoKXtyZXR1cm4hdGhpcy5nZXRQbHVnaW4oInVuZG9SZWRvIikuaXNSZWRvQXZhaWxhYmxlKCl9fX0sW1VrXTpmdW5jdGlvbiBFM3QoKXtyZXR1cm57a2V5OlVrLGNoZWNrYWJsZTohMCxhcmlhQ2hlY2tlZCgp''@;'; put 'put ''e3JldHVybiBOVih0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSwobCxhKT0+dGhpcy5nZXRDZWxsTWV0YShsLGEpLnJlYWRPbmx5KX0sYXJpYUxhYmVsKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShGTil9LG5hbWUoKXtsZXQgYz10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoRk4p''@;'; put 'put ''O3JldHVybiBOVih0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSwoYSxkKT0+dGhpcy5nZXRDZWxsTWV0YShhLGQpLnJlYWRPbmx5KSYmKGM9ajhlKGMpKSxjfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD1OVihjLChhLGQpPT50aGlzLmdldENlbGxNZXRhKGEs''@;'; put 'put ''ZCkucmVhZE9ubHkpO0tuKGMsYT0+e2EuZm9yQWxsKChkLGgpPT57ZD49MCYmaD49MCYmdGhpcy5zZXRDZWxsTWV0YShkLGgsInJlYWRPbmx5IiwhbCl9KX0pLHRoaXMucmVuZGVyKCl9LGRpc2FibGVkKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtyZXR1cm4hKGMm''@;'; put 'put ''JiFjLmlzU2luZ2xlSGVhZGVyKCkmJiF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmMCE9PXRoaXMuY291bnRSb3dzKCkmJjAhPT10aGlzLmNvdW50Q29scygpJiZ0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSYmMCE9PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLmxlbmd0aCl9''@;'; put 'put ''fX0sWyRmXTpmdW5jdGlvbiBDM3QoKXtyZXR1cm57a2V5OiRmLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHpRKX0sZGlzYWJsZWQoKXtpZigwPT09dGhpcy5jb3VudFJvd3MoKXx8MD09PXRoaXMuY291bnRDb2xzKCkpcmV0dXJuITA7Y29uc3QgYz10aGlzLmdldFNl''@;'; put 'put ''bGVjdGVkUmFuZ2VBY3RpdmUoKTtyZXR1cm4hKGMmJiFjLmlzU2luZ2xlSGVhZGVyKCkmJnRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpJiYhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkpfSxzdWJtZW51OntpdGVtczpbe2tleTpgJHskZn06bGVmdGAsbmFtZSgpe3JldHVybiB0''@;'; put 'put ''aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoVVEpfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD1EdihjLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJob3Jpem9udGFsIixkPSJodExlZnQiO3RoaXMucnVuSG9va3MoImJlZm9y''@;'; put 'put ''ZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLCQ2KGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZix2LE0pPT50aGlzLnNldENlbGxNZXRhKGgsZix2LE0pKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHskZn06Y2VudGVyYCxuYW1lKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuZ2V0VHJhbnNsYXRlZFBocmFzZShaUSl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPUR2KGMsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9Imhvcml6b250YWwiLGQ9Imh0Q2VudGVyIjt0aGlzLnJ1bkhvb2tzKCJiZWZv''@;'; put 'put ''cmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSwkNihjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsdixNKT0+dGhpcy5zZXRDZWxsTWV0YShoLGYsdixNKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9LHtrZXk6YCR7JGZ9OnJpZ2h0YCxuYW1lKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuZ2V0VHJhbnNsYXRlZFBocmFzZShXUSl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPUR2KGMsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9Imhvcml6b250YWwiLGQ9Imh0UmlnaHQiO3RoaXMucnVuSG9va3MoImJlZm9y''@;'; put 'put ''ZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLCQ2KGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZix2LE0pPT50aGlzLnNldENlbGxNZXRhKGgsZix2LE0pKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHskZn06anVzdGlmeWAsbmFtZSgpe3JldHVybiB0''@;'; put 'put ''aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoWVEpfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD1EdihjLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJob3Jpem9udGFsIixkPSJodEp1c3RpZnkiO3RoaXMucnVuSG9va3MoImJl''@;'; put 'put ''Zm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLCQ2KGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZix2LE0pPT50aGlzLnNldENlbGxNZXRhKGgsZix2LE0pKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se25hbWU6eXN9LHtrZXk6YCR7JGZ9OnRvcGAsbmFtZSgp''@;'; put 'put ''e3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoR1EpfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD1EdihjLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJ2ZXJ0aWNhbCIsZD0iaHRUb3AiO3RoaXMucnVuSG9va3Mo''@;'; put 'put ''ImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLCQ2KGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZix2LE0pPT50aGlzLnNldENlbGxNZXRhKGgsZix2LE0pKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHskZn06bWlkZGxlYCxuYW1lKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSgkUSl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPUR2KGMsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9InZlcnRpY2FsIixkPSJodE1pZGRsZSI7dGhpcy5ydW5Ib29rcygi''@;'; put 'put ''YmVmb3JlQ2VsbEFsaWdubWVudCIsbCxjLGEsZCksJDYoYyxhLGQsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKSwoaCxmLHYsTSk9PnRoaXMuc2V0Q2VsbE1ldGEoaCxmLHYsTSkpLHRoaXMucmVuZGVyKCl9LGRpc2FibGVkOiExfSx7a2V5OmAkeyRmfTpib3R0b21gLG5hbWUoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEtRKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9RHYoYywoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLmNsYXNzTmFtZSksYT0idmVydGljYWwiLGQ9Imh0Qm90dG9tIjt0aGlzLnJ1bkhvb2tzKCJi''@;'; put 'put ''ZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSwkNihjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsdixNKT0+dGhpcy5zZXRDZWxsTWV0YShoLGYsdixNKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9XX19fX07ZnVuY3Rpb24gJDhlKCl7Y29uc3QgYz17fTty''@;'; put 'put ''ZXR1cm4gYXMoRzhlLChsLGEpPT57Y1thXT1sKCl9KSxjfWZ1bmN0aW9uIEFuZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gTzN0KGMpe3ZhciBsPWZ1bmN0aW9uIFAzdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVd''@;'; put 'put ''O2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9T''@;'; put 'put ''dHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3Mg''@;'; put 'put ''Szhle2NvbnN0cnVjdG9yKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO0FuZSh0aGlzLCJob3QiLHZvaWQgMCksQW5lKHRoaXMsInByZWRlZmluZWRJdGVtcyIsJDhlKCkpLEFuZSh0aGlzLCJkZWZhdWx0T3JkZXJQ''@;'; put 'put ''YXR0ZXJuIix2b2lkIDApLHRoaXMuaG90PWwsdGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuPWF9c2V0UHJlZGVmaW5lZEl0ZW1zKGwpe2NvbnN0IGE9e307dGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuLmxlbmd0aD0wLGFzKGwsKGQsaCk9PntsZXQgZj0iIjtkLm5hbWU9PT15cz8oYVt5c109ZCxm''@;'; put 'put ''PXlzKTppc05hTihwYXJzZUludChoLDEwKSk/KGQua2V5PXZvaWQgMD09PWQua2V5P2g6ZC5rZXksYVtoXT1kLGY9ZC5rZXkpOihhW2Qua2V5XT1kLGY9ZC5rZXkpLHRoaXMuZGVmYXVsdE9yZGVyUGF0dGVybi5wdXNoKGYpfSksdGhpcy5wcmVkZWZpbmVkSXRlbXM9YX1nZXRJdGVtcygpe3Jl''@;'; put 'put ''dHVybiBmdW5jdGlvbiBGM3QoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10sYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307Y29uc3QgZD1bXTtsZXQgaD1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtyZXR1cm4gaCYmaC5pdGVtcz9oPWguaXRlbXM6QXJyYXkuaXNBcnJheShoKXx8KGg9bCksbW8oaCk/YXMoaCwoZix2KT0+e2xldCBNPWFbInN0cmluZyI9PXR5cGVvZiBmP2Y6dl07TXx8KE09''@;'; put 'put ''ZiksbW8oZik/UHUoTSxmKToic3RyaW5nIj09dHlwZW9mIE0mJihNPXtuYW1lOk19KSx2b2lkIDA9PT1NLmtleSYmKE0ua2V5PXYpLGQucHVzaChNKX0pOktuKGgsKGYsdik9PntsZXQgTT1hW2ZdOyFNJiZZOGUuaW5kZXhPZihmKT49MHx8KE18fChNPXtuYW1lOmYsa2V5OmAke3Z9YH0pLG1v''@;'; put 'put ''KGYpJiZQdShNLGYpLHZvaWQgMD09PU0ua2V5JiYoTS5rZXk9diksZC5wdXNoKE0pKX0pLGR9KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLHRoaXMuZGVmYXVsdE9yZGVyUGF0dGVybix0aGlzLnByZWRlZmluZWRJdGVtcyl9fWZ1''@;'; put 'put ''bmN0aW9uIEs2KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBIM3QoYyl7dmFyIGw9ZnVuY3Rpb24gTjN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRl''@;'; put 'put ''ZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4i''@;'; put 'put ''c3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBWM3R7Y29uc3RydWN0b3IobCxhKXtLNih0aGlzLCJ0b3AiLHZv''@;'; put 'put ''aWQgMCksSzYodGhpcywidG9wUmVsYXRpdmUiLHZvaWQgMCksSzYodGhpcywibGVmdCIsdm9pZCAwKSxLNih0aGlzLCJsZWZ0UmVsYXRpdmUiLHZvaWQgMCksSzYodGhpcywic2Nyb2xsVG9wIix2b2lkIDApLEs2KHRoaXMsInNjcm9sbExlZnQiLHZvaWQgMCksSzYodGhpcywiY2VsbEhlaWdo''@;'; put 'put ''dCIsdm9pZCAwKSxLNih0aGlzLCJjZWxsV2lkdGgiLHZvaWQgMCk7Y29uc3QgZD1hLnNjcm9sbFksaD1hLnNjcm9sbFg7bGV0IGYsdixNLEQsVSx0ZTt0aGlzLnJvb3RXaW5kb3c9YSx0aGlzLnR5cGU9dGhpcy5nZXRTb3VyY2VUeXBlKGwpLCJsaXRlcmFsIj09PXRoaXMudHlwZT8oZj1wYXJz''@;'; put 'put ''ZUludChsLnRvcCwxMCksTT1wYXJzZUludChsLmxlZnQsMTApLFU9bC5oZWlnaHR8fDAsdGU9bC53aWR0aHx8MCx2PWYsRD1NLGYrPWQsTSs9aCk6ImV2ZW50Ij09PXRoaXMudHlwZSYmKGY9cGFyc2VJbnQobC5wYWdlWSwxMCksTT1wYXJzZUludChsLnBhZ2VYLDEwKSxVPWwudGFyZ2V0LmNs''@;'; put 'put ''aWVudEhlaWdodCx0ZT1sLnRhcmdldC5jbGllbnRXaWR0aCx2PWYtZCxEPU0taCksdGhpcy50b3A9Zix0aGlzLnRvcFJlbGF0aXZlPXYsdGhpcy5sZWZ0PU0sdGhpcy5sZWZ0UmVsYXRpdmU9RCx0aGlzLnNjcm9sbFRvcD1kLHRoaXMuc2Nyb2xsTGVmdD1oLHRoaXMuY2VsbEhlaWdodD1VLHRo''@;'; put 'put ''aXMuY2VsbFdpZHRoPXRlfWdldFNvdXJjZVR5cGUobCl7bGV0IGE9ImxpdGVyYWwiO3JldHVybiBsIGluc3RhbmNlb2YgRXZlbnQmJihhPSJldmVudCIpLGF9Zml0c0Fib3ZlKGwpe3JldHVybiB0aGlzLnRvcFJlbGF0aXZlPj1sLm9mZnNldEhlaWdodH1maXRzQmVsb3cobCl7cmV0dXJuIHRo''@;'; put 'put ''aXMudG9wUmVsYXRpdmUrbC5vZmZzZXRIZWlnaHQ8PShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhpcy5yb290V2luZG93LmlubmVySGVpZ2h0KX1maXRzT25SaWdodChsKXtyZXR1cm4gdGhpcy5sZWZ0UmVsYXRpdmUrdGhpcy5jZWxs''@;'; put 'put ''V2lkdGgrbC5vZmZzZXRXaWR0aDw9KGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLnJvb3RXaW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKX1maXRzT25MZWZ0KGwpe3JldHVybiB0aGlzLmxlZnRSZWxh''@;'; put 'put ''dGl2ZT49bC5vZmZzZXRXaWR0aH19ZnVuY3Rpb24gWWsoYyxsLGEpeyhmdW5jdGlvbiBCM3QoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxs''@;'; put 'put ''LnNldChjLGEpfWZ1bmN0aW9uIFFvKGMsbCl7cmV0dXJuIGMuZ2V0KFg4ZShjLGwpKX1mdW5jdGlvbiBKVihjLGwsYSl7cmV0dXJuIGMuc2V0KFg4ZShjLGwpLGEpLGF9ZnVuY3Rpb24gWDhlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgSWQ9bmV3IFdlYWtNYXAseGg9bmV3IFdlYWtNYXAsRWg9bmV3IFdlYWtNYXAsa25lPW5ldyBXZWFrTWFwLEFDPW5ldyBXZWFr''@;'; put 'put ''TWFwO2NsYXNzIGozdHtjb25zdHJ1Y3RvcihsKXtZayh0aGlzLElkLHZvaWQgMCksWWsodGhpcyx4aCx2b2lkIDApLFlrKHRoaXMsRWgsdm9pZCAwKSxZayh0aGlzLGtuZSwhMSksWWsodGhpcyxBQyx7YWJvdmU6MCxiZWxvdzowLGxlZnQ6MCxyaWdodDowfSksSlYoa25lLHRoaXMsbCl9c2V0''@;'; put 'put ''T2Zmc2V0KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3JldHVybiBRbyhBQyx0aGlzKVtsXT1hLHRoaXN9c2V0RWxlbWVudChsKXtyZXR1cm4gSlYoSWQsdGhpcyxsKSx0aGlzfXNldFBhcmVudEVsZW1lbnQobCl7cmV0''@;'; put 'put ''dXJuIEpWKHhoLHRoaXMsbCksdGhpc311cGRhdGVQb3NpdGlvbihsKXtKVihFaCx0aGlzLG5ldyBWM3QobCxRbyhJZCx0aGlzKS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSksUW8oa25lLHRoaXMpPyhRbyhFaCx0aGlzKS5maXRzQmVsb3coUW8oSWQsdGhpcykpP3RoaXMuc2V0UG9zaXRp''@;'; put 'put ''b25CZWxvd0N1cnNvcigpOlFvKEVoLHRoaXMpLmZpdHNBYm92ZShRbyhJZCx0aGlzKSk/dGhpcy5zZXRQb3NpdGlvbkFib3ZlQ3Vyc29yKCk6dGhpcy5zZXRQb3NpdGlvbkJlbG93Q3Vyc29yKCksdGhpcy51cGRhdGVIb3Jpem9udGFsUG9zaXRpb24oKSk6KHRoaXMuc2V0UG9zaXRpb25CZWxv''@;'; put 'put ''d0N1cnNvcigpLHRoaXMuc2V0UG9zaXRpb25PblJpZ2h0T2ZDdXJzb3IoKSl9dXBkYXRlSG9yaXpvbnRhbFBvc2l0aW9uKCl7InJ0bCI9PT1RbyhJZCx0aGlzKS5kaXI/UW8oRWgsdGhpcykuZml0c09uTGVmdChRbyhJZCx0aGlzKSk/dGhpcy5zZXRQb3NpdGlvbk9uTGVmdE9mQ3Vyc29yKCk6''@;'; put 'put ''dGhpcy5zZXRQb3NpdGlvbk9uUmlnaHRPZkN1cnNvcigpOlFvKEVoLHRoaXMpLmZpdHNPblJpZ2h0KFFvKElkLHRoaXMpKT90aGlzLnNldFBvc2l0aW9uT25SaWdodE9mQ3Vyc29yKCk6dGhpcy5zZXRQb3NpdGlvbk9uTGVmdE9mQ3Vyc29yKCl9c2V0UG9zaXRpb25BYm92ZUN1cnNvcigpe2xl''@;'; put 'put ''dCBsPVFvKEFDLHRoaXMpLmFib3ZlK1FvKEVoLHRoaXMpLnRvcC1RbyhJZCx0aGlzKS5vZmZzZXRIZWlnaHQ7aWYoUW8oeGgsdGhpcykpe2NvbnN0IGQ9UW8oeGgsdGhpcykub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKFFvKHhoLHRoaXMpLnF1ZXJ5U2VsZWN0''@;'; put 'put ''b3IoIi5odF9tYXN0ZXIiKSksaD1OdW1iZXIucGFyc2VJbnQoZC5wYWRkaW5nVG9wLDEwKSxmPU51bWJlci5wYXJzZUludChkLmJvcmRlclRvcCwxMCk7bD1RbyhFaCx0aGlzKS50b3ArUW8oRWgsdGhpcykuY2VsbEhlaWdodC1RbyhJZCx0aGlzKS5zY3JvbGxIZWlnaHQraCtmfVFvKElkLHRo''@;'; put 'put ''aXMpLnN0eWxlLnRvcD1gJHtsfXB4YH1zZXRQb3NpdGlvbkJlbG93Q3Vyc29yKCl7bGV0IGw9UW8oQUMsdGhpcykuYmVsb3crUW8oRWgsdGhpcykudG9wKzE7aWYoUW8oeGgsdGhpcykpe2NvbnN0IGQ9UW8oeGgsdGhpcykub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0''@;'; put 'put ''eWxlKFFvKHhoLHRoaXMpLnF1ZXJ5U2VsZWN0b3IoIi5odF9tYXN0ZXIiKSksaD1OdW1iZXIucGFyc2VJbnQoZC5wYWRkaW5nVG9wLDEwKSxmPU51bWJlci5wYXJzZUludChkLmJvcmRlclRvcCwxMCk7bD1RbyhFaCx0aGlzKS50b3AtaC1mfVFvKElkLHRoaXMpLnN0eWxlLnRvcD1gJHtsfXB4''@;'; put 'put ''YH1zZXRQb3NpdGlvbk9uUmlnaHRPZkN1cnNvcigpe2xldCBsPVFvKEVoLHRoaXMpLmxlZnQ7aWYoUW8oeGgsdGhpcykpe2NvbnN0IGE9UW8oeGgsdGhpcykub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyxkPU51bWJlci5wYXJzZUludChhLmdldENvbXB1dGVkU3R5bGUoUW8oeGgsdGhpcyku''@;'; put 'put ''cXVlcnlTZWxlY3RvcigiLmh0Q29yZSIpKS5ib3JkZXJSaWdodFdpZHRoLDEwKTtsKz1RbyhFaCx0aGlzKS5jZWxsV2lkdGgrZH1lbHNlIGwrPVFvKEFDLHRoaXMpLnJpZ2h0O1FvKElkLHRoaXMpLnN0eWxlLmxlZnQ9YCR7bH1weGB9c2V0UG9zaXRpb25PbkxlZnRPZkN1cnNvcigpe2xldCBs''@;'; put 'put ''PVFvKEFDLHRoaXMpLmxlZnQrUW8oRWgsdGhpcykubGVmdC1RbyhJZCx0aGlzKS5vZmZzZXRXaWR0aDtpZihRbyh4aCx0aGlzKSl7Y29uc3QgYT1Rbyh4aCx0aGlzKS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O2wtPU51bWJlci5wYXJzZUludChhLmdldENvbXB1dGVkU3R5bGUoUW8oeGgs''@;'; put 'put ''dGhpcykucXVlcnlTZWxlY3RvcigiLmh0Q29yZSIpKS5ib3JkZXJMZWZ0V2lkdGgsMTApfVFvKElkLHRoaXMpLnN0eWxlLmxlZnQ9YCR7bH1weGB9fWZ1bmN0aW9uIHE4ZShjKXtsZXR7aW5pdGlhbFBhZ2U6bD0tMSxzaXplOmE9KCk9PjAsb25JdGVtU2VsZWN0OmQ9KCk9Pnt9LG9uQ2xlYXI6''@;'; put 'put ''aD0oKT0+e319PWM7Y29uc3QgZj1uZXcgU2V0O2xldCB2PWdzKGwsLTEsV2UoKS0xKTtmdW5jdGlvbiBNKGR0LG10KXtjb25zdCAkdD1XZSgpLTE7cmV0dXJuIGR0PDAmJihkdD0kdCksZHQ+JHQmJihkdD0wKSxmLmhhcyhkdCk/LTE6KGYuYWRkKGR0KSwhMT09PWQoZHQsITEpJiYoZHQ9TSgx''@;'; put 'put ''PT09bXQ/KytkdDotLWR0LG10KSksZHQpfWZ1bmN0aW9uIFdlKCl7cmV0dXJuIE1hdGgubWF4KGEoKSwwKX1yZXR1cm57c2V0Q3VycmVudFBhZ2U6ZnVuY3Rpb24gRChkdCl7ZHQ+LTEmJmR0PFdlKCkmJiExIT09ZChkdCwhMCkmJih2PWR0KX0sc2V0UGFnZUN1cnNvckF0OmZ1bmN0aW9uIFUo''@;'; put 'put ''ZHQpe2R0Pi0xJiZkdDxXZSgpJiYodj1kdCl9LGdldEN1cnJlbnRQYWdlOmZ1bmN0aW9uIHRlKCl7cmV0dXJuIHZ9LHRvRmlyc3RJdGVtOmZ1bmN0aW9uIG9lKCl7V2UoKT4wJiYoZi5jbGVhcigpLHY9TSgwLDEpKX0sdG9MYXN0SXRlbTpmdW5jdGlvbiB2ZSgpe1dlKCk+MCYmKGYuY2xlYXIo''@;'; put 'put ''KSx2PU0oV2UoKS0xLC0xKSl9LHRvTmV4dEl0ZW06ZnVuY3Rpb24gd2UoKXtXZSgpPjAmJihmLmNsZWFyKCksdj1NKCsrdiwxKSl9LHRvUHJldmlvdXNJdGVtOmZ1bmN0aW9uIEZlKCl7V2UoKT4wJiYoZi5jbGVhcigpLHY9TSgtLXYsLTEpKX0sZ2V0U2l6ZTpXZSxjbGVhcjpmdW5jdGlvbiBu''@;'; put 'put ''dCgpe2YuY2xlYXIoKSx2PWwsaCgpfX19ZnVuY3Rpb24gRG5lKGMpe3JldHVybiBudShjLCJzdWJtZW51Iil9ZnVuY3Rpb24gSW5lKGMpe3JldHVybiBuZXcgUmVnRXhwKHlzLCJpIikudGVzdChjLm5hbWUpfWZ1bmN0aW9uIFFWKGMsbCl7cmV0dXJuITA9PT1jLmRpc2FibGVkfHwiZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgYy5kaXNhYmxlZCYmITA9PT1jLmRpc2FibGVkLmNhbGwobCl9ZnVuY3Rpb24gSjhlKGMpe3JldHVybiBudShjLCJkaXNhYmxlU2VsZWN0aW9uIil9ZnVuY3Rpb24gUThlKGMsbCl7Y29uc3QgYT1jLnNsaWNlKDApO2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGgmJmFbZF0ubmFt''@;'; put 'put ''ZT09PWw7KWEuc2hpZnQoKTtyZXR1cm4gYX1mdW5jdGlvbiBxM3QoYyl7cmV0dXJuITA9PT1jLmNoZWNrYWJsZX1mdW5jdGlvbiB0cHQoYyl7cmV0dXJuKGwsYSxkLGgsZix2KT0+e2NvbnN0IE09bC5nZXRTb3VyY2VEYXRhQXRSb3coZCksRD1jLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50''@;'; put 'put ''KCJkaXYiKSxVPSJmdW5jdGlvbiI9PXR5cGVvZiB2P3YuY2FsbChjKTp2LHRlPSJmdW5jdGlvbiI9PXR5cGVvZiBNLmFyaWFMYWJlbD9NLmFyaWFMYWJlbC5jYWxsKGMpOk0uYXJpYUxhYmVsLG9lPSJmdW5jdGlvbiI9PXR5cGVvZiBNLmFyaWFDaGVja2VkP00uYXJpYUNoZWNrZWQuY2FsbChj''@;'; put 'put ''KTpNLmFyaWFDaGVja2VkO2lmKHg0KGEpLGlpKEQsImh0SXRlbVdyYXBwZXIiKSxjLmdldFNldHRpbmdzKCkuYXJpYVRhZ3Mpe2NvbnN0IHZlPSFRVihNLGMpJiYhSjhlKE0pJiYhSW5lKE0pO1phKGEsWy4uLnEzdChNKT9bWyJyb2xlIiwibWVudWl0ZW1jaGVja2JveCJdLHgyKHRlKSxxNGUo''@;'; put 'put ''b2UpXTpbWyJyb2xlIiwibWVudWl0ZW0iXSx4MihVKV0sLi4udmU/WyQzKC0xKV06W10sLi4uUVYoTSxjKT9bT0EoKV06W10sLi4uRG5lKE0pP1tGZighMSldOltdXSl9YS5jbGFzc05hbWU9IiIsYS5hcHBlbmRDaGlsZChEKSxJbmUoTSk/aWkoYSwiaHRTZXBhcmF0b3IiKToiZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgTS5yZW5kZXJlcj8oaWkoYSwiaHRDdXN0b21NZW51UmVuZGVyZXIiKSxhLmFwcGVuZENoaWxkKE0ucmVuZGVyZXIobCxELGQsaCxmLFUpKSk6VDYoRCxVKSxRVihNLGMpP2lpKGEsImh0RGlzYWJsZWQiKTpKOGUoTSk/aWkoYSwiaHRTZWxlY3Rpb25EaXNhYmxlZCIpOkRuZShN''@;'; put 'put ''KSYmaWkoYSwiaHRTdWJtZW51Iil9fWZ1bmN0aW9uIFJuZShjLGwsYSl7KGZ1bmN0aW9uIG5wdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwp''@;'; put 'put ''LGwuc2V0KGMsYSl9ZnVuY3Rpb24gWjQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHJwdChjKXt2YXIgbD1mdW5jdGlvbiBpcHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1h''@;'; put 'put ''LmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0''@;'; put 'put ''cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIExuZShjLGwsYSl7cmV0dXJuIGMu''@;'; put 'put ''c2V0KG43ZShjLGwpLGEpLGF9ZnVuY3Rpb24gWDYoYyxsKXtyZXR1cm4gYy5nZXQobjdlKGMsbCkpfWZ1bmN0aW9uIG43ZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIGtDPW5ldyBXZWFrTWFwLGVCPW5ldyBXZWFrTWFwLHRCPW5ldyBXZWFrTWFwO2NsYXNzIERDe2dldCB0YWJsZUJvcmRlcldpZHRoKCl7cmV0dXJuIHZvaWQgMD09PVg2KHRCLHRoaXMpJiZ0aGlz''@;'; put 'put ''LmhvdE1lbnUmJkxuZSh0Qix0aGlzLHBhcnNlSW50KHRoaXMuaG90TWVudS5yb290V2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5ob3RNZW51LnZpZXcuX3d0Lnd0VGFibGUuVEFCTEUpLmJvcmRlcldpZHRoLDEwKSksWDYodEIsdGhpcyl9Y29uc3RydWN0b3IobCxhKXt2YXIgZD10aGlz''@;'; put 'put ''O1o0KHRoaXMsImhvdCIsdm9pZCAwKSxaNCh0aGlzLCJvcHRpb25zIix2b2lkIDApLFo0KHRoaXMsImV2ZW50TWFuYWdlciIsbmV3IFZmKHRoaXMpKSxaNCh0aGlzLCJjb250YWluZXIiLHZvaWQgMCksWjQodGhpcywicG9zaXRpb25lciIsdm9pZCAwKSxaNCh0aGlzLCJob3RNZW51IixudWxs''@;'; put 'put ''KSxaNCh0aGlzLCJob3RTdWJNZW51cyIse30pLFo0KHRoaXMsInBhcmVudE1lbnUiLHZvaWQgMCksWjQodGhpcywibWVudUl0ZW1zIixudWxsKSxaNCh0aGlzLCJvcmlnT3V0c2lkZUNsaWNrRGVzZWxlY3RzIixudWxsKSxSbmUodGhpcyxrQyx2b2lkIDApLFJuZSh0aGlzLGVCLHZvaWQgMCks''@;'; put 'put ''Um5lKHRoaXMsdEIsdm9pZCAwKSx0aGlzLmhvdD1sLHRoaXMub3B0aW9ucz1hfHx7cGFyZW50Om51bGwsbmFtZTpudWxsLGNsYXNzTmFtZToiIixrZWVwSW5WaWV3cG9ydDohMCxzdGFuZGFsb25lOiExLG1pbldpZHRoOjIxNSxjb250YWluZXI6dGhpcy5ob3Qucm9vdFBvcnRhbEVsZW1lbnR9''@;'; put 'put ''LHRoaXMuY29udGFpbmVyPXRoaXMuY3JlYXRlQ29udGFpbmVyKHRoaXMub3B0aW9ucy5uYW1lKSx0aGlzLnBvc2l0aW9uZXI9bmV3IGozdCh0aGlzLm9wdGlvbnMua2VlcEluVmlld3BvcnQpLHRoaXMucGFyZW50TWVudT10aGlzLm9wdGlvbnMucGFyZW50fHxudWxsLHRoaXMucmVnaXN0ZXJF''@;'; put 'put ''dmVudHMoKSx0aGlzLmlzU3ViTWVudSgpJiZ0aGlzLmFkZExvY2FsSG9vaygiYWZ0ZXJTZWxlY3Rpb25DaGFuZ2UiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucGFyZW50''@;'; put 'put ''TWVudS5ydW5Mb2NhbEhvb2tzKCJhZnRlclNlbGVjdGlvbkNoYW5nZSIsLi4uZil9KSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclNldFRoZW1lIiwoaCxmKT0+e3RoaXMub3B0aW9ucy5jb250YWluZXIhPT10aGlzLmhvdC5yb290UG9ydGFsRWxlbWVudCYmKFZhKHRoaXMub3B0aW9ucy5jb250''@;'; put 'put ''YWluZXIsL2h0LXRoZW1lLS4qL2cpLGlpKHRoaXMub3B0aW9ucy5jb250YWluZXIsaCkpLGZ8fHRoaXMuY2xvc2UoKX0pfXJlZ2lzdGVyRXZlbnRzKCl7bGV0IGw9dGhpcy5ob3Qucm9vdFdpbmRvdztmb3IoO2w7KXRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobC5kb2N1bWVu''@;'; put 'put ''dCwibW91c2Vkb3duIixhPT50aGlzLm9uRG9jdW1lbnRNb3VzZURvd24oYSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobC5kb2N1bWVudCwidG91Y2hzdGFydCIsYT0+dGhpcy5vbkRvY3VtZW50TW91c2VEb3duKGEpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExp''@;'; put 'put ''c3RlbmVyKGwuZG9jdW1lbnQsImNvbnRleHRtZW51IixhPT50aGlzLm9uRG9jdW1lbnRDb250ZXh0TWVudShhKSksbD1nNShsKX1zZXRNZW51SXRlbXMobCl7dGhpcy5tZW51SXRlbXM9bH1nZXROYXZpZ2F0b3IoKXtyZXR1cm4gWDYoa0MsdGhpcyl9Z2V0S2V5Ym9hcmRTaG9ydGN1dHNDdHJs''@;'; put 'put ''KCl7cmV0dXJuIFg2KGVCLHRoaXMpfWdldFNlbGVjdGVkSXRlbSgpe3JldHVybiB0aGlzLmhhc1NlbGVjdGVkSXRlbSgpP3RoaXMuaG90TWVudS5nZXRTb3VyY2VEYXRhQXRSb3codGhpcy5ob3RNZW51LmdldFNlbGVjdGVkQWN0aXZlKClbMF0pOm51bGx9aGFzU2VsZWN0ZWRJdGVtKCl7cmV0''@;'; put 'put ''dXJuIEFycmF5LmlzQXJyYXkodGhpcy5ob3RNZW51LmdldFNlbGVjdGVkQWN0aXZlKCkpfWlzU3ViTWVudSgpe3JldHVybiBudWxsIT09dGhpcy5wYXJlbnRNZW51fW9wZW4oKXt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZU9wZW4iKSx0aGlzLmNvbnRhaW5lci5yZW1vdmVBdHRyaWJ1dGUo''@;'; put 'put ''InN0eWxlIiksdGhpcy5jb250YWluZXIuc3R5bGUuZGlzcGxheT0iYmxvY2siO2NvbnN0IGw9JEEoTT0+dGhpcy5vcGVuU3ViTWVudShNKSwzMDApLGE9dGhpcy5vcHRpb25zLm1pbldpZHRofHwyMTU7bGV0IGQ9ITEsaD1TNih0aGlzLm1lbnVJdGVtcyxNPT4oTS5rZXk9PT1XayYmKGQ9ITAp''@;'; put 'put ''LGZ1bmN0aW9uIEczdChjLGwpe3JldHVybiFjLmhpZGRlbnx8ISgiZnVuY3Rpb24iPT10eXBlb2YgYy5oaWRkZW4mJmMuaGlkZGVuLmNhbGwobCkpfShNLHRoaXMuaG90KSkpO2lmKGgubGVuZ3RoPDEmJiFkKWgucHVzaCgkOGUoKVtXa10pO2Vsc2UgaWYoMD09PWgubGVuZ3RoKXJldHVybjto''@;'; put 'put ''PWZ1bmN0aW9uIFgzdChjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06eXMsYT1jLnNsaWNlKDApO3JldHVybiBhPVE4ZShhLGwpLGE9ZnVuY3Rpb24gJDN0KGMsbCl7bGV0IGE9Yy5zbGljZSgwKTtyZXR1cm4gYS5yZXZlcnNl''@;'; put 'put ''KCksYT1ROGUoYSxsKSxhLnJldmVyc2UoKSxhfShhLGwpLGE9ZnVuY3Rpb24gSzN0KGMpe2NvbnN0IGw9W107cmV0dXJuIEtuKGMsKGEsZCk9PntkPjA/bFtsLmxlbmd0aC0xXS5uYW1lIT09YS5uYW1lJiZsLnB1c2goYSk6bC5wdXNoKGEpfSksbH0oYSksYX0oaCx5cyk7bGV0IGY9ITE7Y29u''@;'; put 'put ''c3Qgdj17ZGF0YTpoLGNvbEhlYWRlcnM6ITEsYXV0b0NvbHVtblNpemU6ITAsYXV0b1dyYXBSb3c6ITEsbW9kaWZ5Q29sV2lkdGg6TT0+TWEoTSkmJk08YT9hOk0sYXV0b1Jvd1NpemU6ITEscmVhZE9ubHk6ITAsZWRpdG9yOiExLGNvcHlQYXN0ZTohMSxoaWRkZW5Sb3dzOiEwLG1heENvbHM6''@;'; put 'put ''MSxjb2x1bW5zOlt7ZGF0YToibmFtZSIscmVuZGVyZXI6dHB0KHRoaXMuaG90KX1dLHJlbmRlckFsbFJvd3M6ITAsZnJhZ21lbnRTZWxlY3Rpb246ITEsb3V0c2lkZUNsaWNrRGVzZWxlY3RzOiExLGRpc2FibGVWaXN1YWxTZWxlY3Rpb246ImFyZWEiLGxheW91dERpcmVjdGlvbjp0aGlzLmhv''@;'; put 'put ''dC5pc1J0bCgpPyJydGwiOiJsdHIiLGFyaWFUYWdzOiExLHRoZW1lTmFtZTp0aGlzLmhvdC5nZXRDdXJyZW50VGhlbWVOYW1lKCksYmVmb3JlUmVmcmVzaERpbWVuc2lvbnM6KCk9PiExLGJlZm9yZU9uQ2VsbE1vdXNlT3ZlcjooTSxEKT0+e3RoaXMuaG90TWVudS5zdHlsZXNIYW5kbGVyLmlz''@;'; put 'put ''Q2xhc3NpY1RoZW1lKCk/WDYoa0MsdGhpcykuc2V0Q3VycmVudFBhZ2UoRC5yb3cpOlg2KGtDLHRoaXMpLnNldFBhZ2VDdXJzb3JBdChELnJvdyl9LGFmdGVyT25DZWxsTW91c2VPdmVyOihNLEQpPT57dGhpcy5pc0FsbFN1Yk1lbnVzQ2xvc2VkKCk/bChELnJvdyk6dGhpcy5vcGVuU3ViTWVu''@;'; put 'put ''dShELnJvdyl9LGFmdGVyT25DZWxsQ29udGV4dE1lbnU6TT0+e00ucHJldmVudERlZmF1bHQoKSxuTigpJiZmJiZ0aGlzLmhhc1NlbGVjdGVkSXRlbSgpJiZ0aGlzLmNsb3NlKCEwKX0sYWZ0ZXJTZWxlY3Rpb246KE0sRCxVLHRlLG9lKT0+e3RoaXMuaG90TWVudS52aWV3LmlzTW91c2VEb3du''@;'; put 'put ''KCkmJihvZS52YWx1ZT0hMCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclNlbGVjdGlvbkNoYW5nZSIsdGhpcy5nZXRTZWxlY3RlZEl0ZW0oKSl9LGJlZm9yZU9uQ2VsbE1vdXNlVXA6TT0+e3RoaXMuaGFzU2VsZWN0ZWRJdGVtKCkmJihmPSF0aGlzLmlzQ29tbWFuZFBhc3NpdmUodGhpcy5n''@;'; put 'put ''ZXRTZWxlY3RlZEl0ZW0oKSksdGhpcy5leGVjdXRlQ29tbWFuZChNKSl9LGFmdGVyT25DZWxsTW91c2VVcDpNPT57KCFuTigpfHwhSTYoTSkpJiZmJiZ0aGlzLmhhc1NlbGVjdGVkSXRlbSgpJiYoWDMoKXx8dE4oKT90aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT50aGlzLmNsb3NlKCEw''@;'; put 'put ''KSwzMjUpOnRoaXMuY2xvc2UoITApKX0sYWZ0ZXJVbmxpc3RlbjooKT0+eyF0aGlzLmhhc1NlbGVjdGVkSXRlbSgpJiZ0aGlzLmlzT3BlbmVkKCkmJnRoaXMuaG90TWVudS5saXN0ZW4oKX19O3RoaXMub3JpZ091dHNpZGVDbGlja0Rlc2VsZWN0cz10aGlzLmhvdC5nZXRTZXR0aW5ncygpLm91''@;'; put 'put ''dHNpZGVDbGlja0Rlc2VsZWN0cyx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLm91dHNpZGVDbGlja0Rlc2VsZWN0cz0hMSx0aGlzLmhvdE1lbnU9bmV3IHRoaXMuaG90LmNvbnN0cnVjdG9yKHRoaXMuY29udGFpbmVyLHYpLHRoaXMuaG90TWVudS5hZGRIb29rKCJhZnRlckluaXQiLCgpPT50aGlz''@;'; put 'put ''Lm9uQWZ0ZXJJbml0KCkpLHRoaXMuaG90TWVudS5pbml0KCksTG5lKGtDLHRoaXMsZnVuY3Rpb24gSjN0KGMpe3JldHVybiBxOGUoe3NpemU6KCk9PmMuY291bnRSb3dzKCksb25JdGVtU2VsZWN0KGwsYSl7Y29uc3QgZD1jLmdldENlbGwobCwwKTtpZighZHx8ZnVuY3Rpb24gVTN0KGMpe3Jl''@;'; put 'put ''dHVybiBDbyhjLCJodFNlcGFyYXRvciIpfShkKXx8ZnVuY3Rpb24gVzN0KGMpe3JldHVybiBDbyhjLCJodERpc2FibGVkIil9KGQpfHxmdW5jdGlvbiBZM3QoYyl7cmV0dXJuIENvKGMsImh0U2VsZWN0aW9uRGlzYWJsZWQiKX0oZCkpcmV0dXJuITE7Yy5zZWxlY3RDZWxsKGwsMCwuLi5hP1ts''@;'; put 'put ''LDAsITEsITFdOltdKX0sb25DbGVhcigpe2MuZGVzZWxlY3RDZWxsKCl9fSl9KHRoaXMuaG90TWVudSkpLExuZShlQix0aGlzLGZ1bmN0aW9uIGVwdChjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W107Y29uc3QgYT1bXTtm''@;'; put 'put ''dW5jdGlvbiBkKFUsdGUpe00odGUpLmFkZFNob3J0Y3V0cyhVLHtncm91cDoibWVudSJ9KX1mdW5jdGlvbiBoKFUsdGUpe2NvbnN0IG9lPU0odGUpO1UuZm9yRWFjaCh2ZT0+e2xldHtrZXlzOndlfT12ZTt3ZS5mb3JFYWNoKEZlPT5vZS5yZW1vdmVTaG9ydGN1dHNCeUtleXMoRmUpKX0pLGEu''@;'; put 'put ''cHVzaCh7c2hvcnRjdXRzOlUsY29udGV4dE5hbWU6dGV9KSxkKFUsdGUpfWZ1bmN0aW9uIHYoVSl7cmV0dXJuIFU/YG1lbnU6JHtVfWA6Im1lbnUifWZ1bmN0aW9uIE0oVSl7dmFyIHRlO2NvbnN0IG9lPWMuaG90TWVudS5nZXRTaG9ydGN1dE1hbmFnZXIoKSx2ZT12KFUpO3JldHVybiBudWxs''@;'; put 'put ''IT09KHRlPW9lLmdldENvbnRleHQodmUpKSYmdm9pZCAwIT09dGU/dGU6b2UuYWRkQ29udGV4dCh2ZSl9cmV0dXJuIGQoZnVuY3Rpb24gUTN0KGMpe2NvbnN0e2hvdDpsLGhvdE1lbnU6YX09YztyZXR1cm5be2tleXM6W1siQ29udHJvbC9NZXRhIiwiQSJdXSxmb3J3YXJkVG9Db250ZXh0Omwu''@;'; put 'put ''Z2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLGNhbGxiYWNrOigpPT5jLmNsb3NlKCEwKX0se2tleXM6W1siVGFiIl0sWyJTaGlmdCIsIlRhYiJdXSxjYWxsYmFjazooZCxoKT0+e2NvbnN0IGY9bC5nZXRTZXR0aW5ncygpLHY9ImZ1bmN0aW9uIj09dHlwZW9mIGYudGFi''@;'; put 'put ''TW92ZXM/Zi50YWJNb3ZlcyhkKTpmLnRhYk1vdmVzO2guaW5jbHVkZXMoInNoaWZ0Iik/bC5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoLXYucm93LC12LmNvbCk6bC5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQodi5yb3csdi5jb2wpLGMuY2xvc2UoITApfX0se2tleXM6W1siRXNjYXBlIl1d''@;'; put 'put ''LGNhbGxiYWNrOigpPT5jLmNsb3NlKCl9LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazooKT0+Yy5nZXROYXZpZ2F0b3IoKS50b05leHRJdGVtKCl9LHtrZXlzOltbIkFycm93VXAiXV0sY2FsbGJhY2s6KCk9PmMuZ2V0TmF2aWdhdG9yKCkudG9QcmV2aW91c0l0ZW0oKX0se2tleXM6''@;'; put 'put ''W1tsLmlzUnRsKCk/IkFycm93TGVmdCI6IkFycm93UmlnaHQiXV0sY2FsbGJhY2s6KCk9Pntjb25zdCBkPWEuZ2V0U2VsZWN0ZWRBY3RpdmUoKTtpZihkKXtjb25zdCBoPWMub3BlblN1Yk1lbnUoZFswXSk7aCYmaC5nZXROYXZpZ2F0b3IoKS50b0ZpcnN0SXRlbSgpfX19LHtrZXlzOltbbC5p''@;'; put 'put ''c1J0bCgpPyJBcnJvd1JpZ2h0IjoiQXJyb3dMZWZ0Il1dLGNhbGxiYWNrOigpPT57YS5nZXRTZWxlY3RlZEFjdGl2ZSgpJiZjLmlzU3ViTWVudSgpJiYoYy5jbG9zZSgpLGMuaXNTdWJNZW51KCkmJmMucGFyZW50TWVudS5ob3RNZW51Lmxpc3RlbigpKX19LHtrZXlzOltbIkNvbnRyb2wvTWV0''@;'; put 'put ''YSIsIkFycm93VXAiXSxbIkhvbWUiXV0sY2FsbGJhY2s6KCk9PmMuZ2V0TmF2aWdhdG9yKCkudG9GaXJzdEl0ZW0oKX0se2tleXM6W1siQ29udHJvbC9NZXRhIiwiQXJyb3dEb3duIl0sWyJFbmQiXV0sY2FsbGJhY2s6KCk9PmMuZ2V0TmF2aWdhdG9yKCkudG9MYXN0SXRlbSgpfSx7a2V5czpb''@;'; put 'put ''WyJFbnRlciJdLFsiU3BhY2UiXV0sY2FsbGJhY2s6ZD0+e2NvbnN0IGg9YS5nZXRTZWxlY3RlZEFjdGl2ZSgpO2gmJihhLmdldFNvdXJjZURhdGFBdFJvdyhoWzBdKS5zdWJtZW51P2Mub3BlblN1Yk1lbnUoaFswXSkuZ2V0TmF2aWdhdG9yKCkudG9GaXJzdEl0ZW0oKTooYy5leGVjdXRlQ29t''@;'; put 'put ''bWFuZChkKSxjLmNsb3NlKCEwKSkpfX0se2tleXM6W1siUGFnZVVwIl1dLGNhbGxiYWNrOigpPT57YS5nZXRTZWxlY3RlZEFjdGl2ZSgpP2Euc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KC1hLmNvdW50VmlzaWJsZVJvd3MoKSwwKTpjLmdldE5hdmlnYXRvcigpLnRvRmlyc3RJdGVtKCl9fSx7''@;'; put 'put ''a2V5czpbWyJQYWdlRG93biJdXSxjYWxsYmFjazooKT0+e2EuZ2V0U2VsZWN0ZWRBY3RpdmUoKT9hLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydChhLmNvdW50VmlzaWJsZVJvd3MoKSwwKTpjLmdldE5hdmlnYXRvcigpLnRvTGFzdEl0ZW0oKX19XX0oYykpLGwuZm9yRWFjaChVPT57bGV0e3No''@;'; put 'put ''b3J0Y3V0czp0ZSxjb250ZXh0TmFtZTpvZX09VTtoKHRlLG9lKX0pLHthZGRDdXN0b21TaG9ydGN1dHM6aCxnZXRDdXN0b21TaG9ydGN1dHM6ZnVuY3Rpb24gZigpe3JldHVyblsuLi5hXX0sZ2V0Q29udGV4dDpNLGxpc3RlbjpmdW5jdGlvbiBEKFUpe2MuaG90TWVudS5nZXRTaG9ydGN1dE1h''@;'; put 'put ''bmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZSh2KFUpKX19fSh0aGlzKSksWDYoZUIsdGhpcykubGlzdGVuKCksdGhpcy5mb2N1cygpLHRoaXMuaXNTdWJNZW51KCkmJnRoaXMuYWRkTG9jYWxIb29rKCJhZnRlck9wZW4iLCgpPT50aGlzLnBhcmVudE1lbnUucnVuTG9jYWxIb29rcygiYWZ0''@;'; put 'put ''ZXJTdWJtZW51T3BlbiIsdGhpcykpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJPcGVuIix0aGlzKX1jbG9zZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYodGhpcy5pc09wZW5lZCgpKWlmKGwmJnRoaXMuaXNTdWJN''@;'; put 'put ''ZW51KCkpdGhpcy5wYXJlbnRNZW51LmNsb3NlKCk7ZWxzZSBpZihYNihrQyx0aGlzKS5jbGVhcigpLHRoaXMuY2xvc2VBbGxTdWJNZW51cygpLHRoaXMuY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuaG90TWVudS5kZXN0cm95KCksdGhpcy5ob3RNZW51PW51bGwsdGhpcy5o''@;'; put 'put ''b3QuZ2V0U2V0dGluZ3MoKS5vdXRzaWRlQ2xpY2tEZXNlbGVjdHM9dGhpcy5vcmlnT3V0c2lkZUNsaWNrRGVzZWxlY3RzLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJDbG9zZSIpLHRoaXMuaXNTdWJNZW51KCkpe2lmKHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3Mpe2NvbnN0IGE9''@;'; put 'put ''dGhpcy5wYXJlbnRNZW51LmhvdE1lbnUuZ2V0U2VsZWN0ZWRBY3RpdmUoKTthJiZaYSh0aGlzLnBhcmVudE1lbnUuaG90TWVudS5nZXRDZWxsKGFbMF0sMCksW0ZmKCExKV0pfXRoaXMucGFyZW50TWVudS5ob3RNZW51Lmxpc3RlbigpfX1vcGVuU3ViTWVudShsKXtpZighdGhpcy5ob3RNZW51''@;'; put 'put ''KXJldHVybiExO2NvbnN0IGE9dGhpcy5ob3RNZW51LmdldENlbGwobCwwKTtpZih0aGlzLmNsb3NlQWxsU3ViTWVudXMoKSwhYXx8IWZ1bmN0aW9uIFozdChjKXtyZXR1cm4gQ28oYywiaHRTdWJtZW51Iil9KGEpKXJldHVybiExO2NvbnN0IGQ9dGhpcy5ob3RNZW51LmdldFNvdXJjZURhdGFB''@;'; put 'put ''dFJvdyhsKSxoPW5ldyBEQyh0aGlzLmhvdCx7cGFyZW50OnRoaXMsbmFtZTpkLm5hbWUsY2xhc3NOYW1lOnRoaXMub3B0aW9ucy5jbGFzc05hbWUsa2VlcEluVmlld3BvcnQ6ITAsY29udGFpbmVyOnRoaXMub3B0aW9ucy5jb250YWluZXJ9KTtyZXR1cm4gaC5zZXRNZW51SXRlbXMoZC5zdWJt''@;'; put 'put ''ZW51Lml0ZW1zKSxoLm9wZW4oKSxoLnNldFBvc2l0aW9uKGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLHRoaXMuaG90U3ViTWVudXNbZC5rZXldPWgsdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmWmEoYSxbRmYoITApXSksaH1jbG9zZVN1Yk1lbnUobCl7Y29uc3QgYT10aGlz''@;'; put 'put ''LmhvdE1lbnUuZ2V0U291cmNlRGF0YUF0Um93KGwpLGQ9dGhpcy5ob3RTdWJNZW51c1thLmtleV07aWYoZCl7ZC5kZXN0cm95KCksZGVsZXRlIHRoaXMuaG90U3ViTWVudXNbYS5rZXldO2NvbnN0IGg9dGhpcy5ob3RNZW51LmdldENlbGwobCwwKTt0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFy''@;'; put 'put ''aWFUYWdzJiZaYShoLFtGZighMSldKX19Y2xvc2VBbGxTdWJNZW51cygpe0tuKHRoaXMuaG90TWVudS5nZXREYXRhKCksKGwsYSk9PnRoaXMuY2xvc2VTdWJNZW51KGEpKX1pc0FsbFN1Yk1lbnVzQ2xvc2VkKCl7cmV0dXJuIDA9PT1PYmplY3Qua2V5cyh0aGlzLmhvdFN1Yk1lbnVzKS5sZW5n''@;'; put 'put ''dGh9Zm9jdXMoKXt0aGlzLmlzT3BlbmVkKCkmJih0aGlzLmhvdE1lbnUucm9vdEVsZW1lbnQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KSx0aGlzLmdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpLmxpc3RlbigpLHRoaXMuaG90TWVudS5saXN0ZW4oKSl9ZGVzdHJveSgpe2NvbnN0IGw9dGhp''@;'; put 'put ''cy5jb250YWluZXIucGFyZW50Tm9kZTt0aGlzLmNsZWFyTG9jYWxIb29rcygpLHRoaXMuY2xvc2UoKSx0aGlzLnBhcmVudE1lbnU9bnVsbCx0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCksbCYmbC5yZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lcil9aXNPcGVuZWQoKXtyZXR1cm4gbnVsbCE9''@;'; put 'put ''PXRoaXMuaG90TWVudX1leGVjdXRlQ29tbWFuZChsKXtpZighdGhpcy5pc09wZW5lZCgpfHwhdGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSlyZXR1cm47Y29uc3QgYT10aGlzLmdldFNlbGVjdGVkSXRlbSgpO2lmKHRoaXMucnVuTG9jYWxIb29rcygic2VsZWN0IixhLGwpLHRoaXMuaXNDb21tYW5k''@;'; put 'put ''UGFzc2l2ZShhKSlyZXR1cm47Y29uc3QgZD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlKCksaD1kP2Z1bmN0aW9uIHozdChjKXtyZXR1cm4gWnMoYyxsPT4oe3N0YXJ0OmwuZ2V0VG9wU3RhcnRDb3JuZXIoKSxlbmQ6bC5nZXRCb3R0b21FbmRDb3JuZXIoKX0pKX0oZCk6W107dGhpcy5ydW5M''@;'; put 'put ''b2NhbEhvb2tzKCJleGVjdXRlQ29tbWFuZCIsYS5rZXksaCxsKSx0aGlzLmlzU3ViTWVudSgpJiZ0aGlzLnBhcmVudE1lbnUucnVuTG9jYWxIb29rcygiZXhlY3V0ZUNvbW1hbmQiLGEua2V5LGgsbCl9aXNDb21tYW5kUGFzc2l2ZShsKXtyZXR1cm4hMT09PWwuaXNDb21tYW5kfHxJbmUobCl8''@;'; put 'put ''fFFWKGwsdGhpcy5ob3QpfHxEbmUobCl9c2V0T2Zmc2V0KGwpe3RoaXMucG9zaXRpb25lci5zZXRPZmZzZXQobCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCl9c2V0UG9zaXRpb24obCl7dGhpcy5pc1N1Yk1lbnUoKSYmdGhpcy5wb3Np''@;'; put 'put ''dGlvbmVyLnNldFBhcmVudEVsZW1lbnQodGhpcy5wYXJlbnRNZW51LmNvbnRhaW5lciksdGhpcy5wb3NpdGlvbmVyLnNldEVsZW1lbnQodGhpcy5jb250YWluZXIpLnVwZGF0ZVBvc2l0aW9uKGwpfXVwZGF0ZU1lbnVEaW1lbnNpb25zKCl7Y29uc3R7d3RUYWJsZTpsfT10aGlzLmhvdE1lbnUu''@;'; put 'put ''dmlldy5fd3QsYT10aGlzLmhvdE1lbnUuZ2V0U2V0dGluZ3MoKS5kYXRhLGQ9bC5oaWRlci5zdHlsZSxoPWwuaG9sZGVyLnN0eWxlLGY9cGFyc2VJbnQoZC53aWR0aCwxMCksdj1hMChhLChNLEQsVSk9Pntjb25zdCBvZT10aGlzLmhvdE1lbnUuZ2V0Q2VsbChVLDApP0Z1KHRoaXMuaG90TWVu''@;'; put 'put ''dS5nZXRDZWxsKFUsMCkpOjA7cmV0dXJuIE0rKEQubmFtZT09PXlzPzE6b2UpfSwwKTt0aGlzLmhvdE1lbnUuc3R5bGVzSGFuZGxlci5pc0NsYXNzaWNUaGVtZSgpPyhoLndpZHRoPWAke2YrM31weGAsaC5oZWlnaHQ9YCR7diszfXB4YCk6KGgud2lkdGg9YCR7Zn1weGAsaC5oZWlnaHQ9YCR7''@;'; put 'put ''dn1weGApLGQuaGVpZ2h0PWguaGVpZ2h0fWNyZWF0ZUNvbnRhaW5lcigpe2NvbnN0IGE9dGhpcy5vcHRpb25zLmNvbnRhaW5lci5vd25lckRvY3VtZW50O2xldCBoLGQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7cmV0dXJuIGQm''@;'; put 'put ''JihpbChkKSYmKGQ9ZC5jYWxsKHRoaXMuaG90KSxkPW51bGw9PT1kfHxiYyhkKT8iIjpkLnRvU3RyaW5nKCkpLGQ9ZC5yZXBsYWNlKC9bXkEtWmEtejAtOV0vZywiXyIpLGQ9YCR7dGhpcy5vcHRpb25zLmNsYXNzTmFtZX1TdWJfJHtkfWAsaD1hLnF1ZXJ5U2VsZWN0b3IoYC4ke3RoaXMub3B0''@;'; put 'put ''aW9ucy5jbGFzc05hbWV9LiR7ZH1gKSksaHx8KGg9YS5jcmVhdGVFbGVtZW50KCJkaXYiKSxpaShoLGBodE1lbnUgaGFuZHNvbnRhYmxlICR7dGhpcy5vcHRpb25zLmNsYXNzTmFtZX1gKSxkJiZpaShoLGQpLHRoaXMub3B0aW9ucy5jb250YWluZXIuYXBwZW5kQ2hpbGQoaCkpLGh9b25BZnRl''@;'; put 'put ''ckluaXQoKXt0aGlzLnVwZGF0ZU1lbnVEaW1lbnNpb25zKCksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmWmEodGhpcy5ob3RNZW51LnJvb3RFbGVtZW50LFtbInJvbGUiLCJtZW51Il0sJDMoLTEpXSl9b25Eb2N1bWVudE1vdXNlRG93bihsKXt0aGlzLmlzT3BlbmVkKCkmJih0''@;'; put 'put ''aGlzLm9wdGlvbnMuc3RhbmRhbG9uZSYmdGhpcy5ob3RNZW51JiYheDYobC50YXJnZXQsdGhpcy5ob3RNZW51LnJvb3RFbGVtZW50KXx8KHRoaXMuaXNBbGxTdWJNZW51c0Nsb3NlZCgpfHx0aGlzLmlzU3ViTWVudSgpKSYmIXg2KGwudGFyZ2V0LCIuaHRNZW51IikpJiZ0aGlzLmNsb3NlKCEw''@;'; put 'put ''KX1vbkRvY3VtZW50Q29udGV4dE1lbnUobCl7dGhpcy5pc09wZW5lZCgpJiZDbyhsLnRhcmdldCwiaHRDb3JlIikmJng2KGwudGFyZ2V0LHRoaXMuaG90TWVudS5yb290RWxlbWVudCkmJmwucHJldmVudERlZmF1bHQoKX19ZnVuY3Rpb24gT25lKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBz''@;'; put 'put ''cHQoYyl7dmFyIGw9ZnVuY3Rpb24gbHB0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJu''@;'; put 'put ''IGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBuQihjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9cGwoREMsWjApO2NvbnN0IEdrPSJjb250ZXh0TWVudSIsaTdlPUdrO0FhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbnRleHRNZW51RGVm''@;'; put 'put ''YXVsdE9wdGlvbnMiKSxBYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ29udGV4dE1lbnVTaG93IiksQWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29udGV4dE1lbnVTaG93IiksQWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29udGV4dE1lbnVIaWRl''@;'; put 'put ''IiksQWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29udGV4dE1lbnVFeGVjdXRlIik7dmFyICRrPW5ldyBXZWFrU2V0O2NsYXNzIHJCIGV4dGVuZHMgTXN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIGFwdChjLGwpeyhmdW5jdGlvbiBvcHQoYyxs''@;'; put 'put ''KXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcywkayksT25lKHRoaXMsImNvbW1hbmRFeGVjdXRvciIsbmV3IFc4ZSh0aGlz''@;'; put 'put ''LmhvdCkpLE9uZSh0aGlzLCJpdGVtc0ZhY3RvcnkiLG51bGwpLE9uZSh0aGlzLCJtZW51IixudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gR2t9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gNzB9c3RhdGljIGdldCBQTFVHSU5fREVQUygpe3JldHVyblsi''@;'; put 'put ''cGx1Z2luOkF1dG9Db2x1bW5TaXplIl19c3RhdGljIGdldCBERUZBVUxUX0lURU1TKCl7cmV0dXJuW0tWLFhWLHlzLGprLHprLHlzLCRWLFprLHlzLHFWLEdWLHlzLFVrLHlzLCRmXX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbR2tdfWVuYWJsZVBsdWdpbigp''@;'; put 'put ''e3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKClbR2tdOyJmdW5jdGlvbiI9PXR5cGVvZiBhLmNhbGxiYWNrJiZ0aGlzLmNvbW1hbmRFeGVjdXRvci5zZXRDb21tb25DYWxsYmFjayhhLmNhbGxiYWNrKSx0aGlzLm1lbnU9bmV3''@;'; put 'put ''IERDKHRoaXMuaG90LHtjbGFzc05hbWU6Imh0Q29udGV4dE1lbnUiLGtlZXBJblZpZXdwb3J0OiEwLGNvbnRhaW5lcjphLnVpQ29udGFpbmVyfHx0aGlzLmhvdC5yb290UG9ydGFsRWxlbWVudH0pLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImJlZm9yZU9wZW4iLCgpPT5uQigkayx0aGlzLGRw''@;'; put 'put ''dCkuY2FsbCh0aGlzKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYWZ0ZXJPcGVuIiwoKT0+bkIoJGssdGhpcyxocHQpLmNhbGwodGhpcykpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgpPT5uQigkayx0aGlzLGZwdCkuY2FsbCh0aGlzKSksdGhpcy5tZW51LmFkZExv''@;'; put 'put ''Y2FsSG9vaygiZXhlY3V0ZUNvbW1hbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGwuZXhlY3V0ZUNvbW1hbmQuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRl''@;'; put 'put ''ck9uQ2VsbENvbnRleHRNZW51IixkPT5uQigkayx0aGlzLHVwdCkuY2FsbCh0aGlzLGQpKSx0aGlzLmFkZEhvb2soImJlZm9yZURpYWxvZ1Nob3ciLCgpPT50aGlzLmNsb3NlKCkpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0''@;'; put 'put ''aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmNsb3NlKCksdGhpcy5tZW51JiYodGhpcy5tZW51LmRlc3Ryb3koKSx0aGlzLm1lbnU9bnVsbCksdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCks''@;'; put 'put ''c3VwZXIuZGlzYWJsZVBsdWdpbigpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0KHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIlNoaWZ0IiwiQmFja3NsYXNoIl0sWyJTaGlmdCIsIkYxMCJdXSxj''@;'; put 'put ''YWxsYmFjazooKT0+e2NvbnN0e2hpZ2hsaWdodDpsfT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7dGhpcy5ob3Quc2Nyb2xsVG9Gb2N1c2VkQ2VsbCgpO2NvbnN0IGE9dGhpcy5ob3QuZ2V0Q2VsbChsLnJvdyxsLmNvbCwhMCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZD1W''@;'; put 'put ''Vih0aGlzLm1lbnUuY29udGFpbmVyLHRoaXMuaG90LnJvb3REb2N1bWVudCk7dGhpcy5vcGVuKHtsZWZ0OmEubGVmdCtkLmxlZnQsdG9wOmEudG9wK2QudG9wLTErYS5oZWlnaHR9LHtsZWZ0OmEud2lkdGgsYWJvdmU6LWEuaGVpZ2h0fSksdGhpcy5tZW51LmdldE5hdmlnYXRvcigpLnRvRmly''@;'; put 'put ''c3RJdGVtKCl9LHJ1bk9ubHlJZjooKT0+e3ZhciBsO2NvbnN0IGE9bnVsbD09PShsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaGlnaGxpZ2h0O3JldHVybiBhJiZ0aGlzLmhvdC5zZWxlY3Rpb24uaXNDZWxsVmlzaWJsZShhKSYmIXRo''@;'; put 'put ''aXMubWVudS5pc09wZW5lZCgpfSxncm91cDppN2V9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoaTdlKX1vcGVuKGwpe3ZhciBhO2xldCBkPWFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7YWJvdmU6MCxiZWxvdzowLGxlZnQ6MCxyaWdodDowfTtudWxsIT09KGE9dGhpcy5tZW51KSYmdm9pZCAwIT09YSYmYS5pc09wZW5lZCgpfHwodGhpcy5wcmVwYXJlTWVudUl0ZW1zKCksdGhpcy5tZW51Lm9wZW4oKSxh''@;'; put 'put ''cyhkLChoLGYpPT57dGhpcy5tZW51LnNldE9mZnNldChmLGgpfSksdGhpcy5tZW51LnNldFBvc2l0aW9uKGwpKX1jbG9zZSgpe3ZhciBsO251bGw9PT0obD10aGlzLm1lbnUpfHx2b2lkIDA9PT1sfHxsLmNsb3NlKCksdGhpcy5pdGVtc0ZhY3Rvcnk9bnVsbH1leGVjdXRlQ29tbWFuZChsKXtu''@;'; put 'put ''dWxsPT09dGhpcy5pdGVtc0ZhY3RvcnkmJnRoaXMucHJlcGFyZU1lbnVJdGVtcygpO2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGE+MT9hLTE6MCksaD0xO2g8YTtoKyspZFtoLTFdPWFyZ3VtZW50c1toXTt0aGlzLmNvbW1hbmRFeGVjdXRvci5leGVjdXRlKGwsLi4u''@;'; put 'put ''ZCl9cHJlcGFyZU1lbnVJdGVtcygpe3RoaXMuaXRlbXNGYWN0b3J5PW5ldyBLOGUodGhpcy5ob3QsckIuREVGQVVMVF9JVEVNUyk7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW0drXSxhPXtpdGVtczp0aGlzLml0ZW1zRmFjdG9yeS5nZXRJdGVtcyhsKX07dGhpcy5ob3QucnVuSG9v''@;'; put 'put ''a3MoImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsYSksdGhpcy5pdGVtc0ZhY3Rvcnkuc2V0UHJlZGVmaW5lZEl0ZW1zKGEuaXRlbXMpO2NvbnN0IGQ9dGhpcy5pdGVtc0ZhY3RvcnkuZ2V0SXRlbXMobCk7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbnRleHRNZW51U2V0SXRl''@;'; put 'put ''bXMiLGQpLHRoaXMubWVudS5zZXRNZW51SXRlbXMoZCksS24oZCxoPT50aGlzLmNvbW1hbmRFeGVjdXRvci5yZWdpc3RlckNvbW1hbmQoaC5rZXksaCkpfWRlc3Ryb3koKXt0aGlzLmNsb3NlKCksdGhpcy5tZW51JiZ0aGlzLm1lbnUuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rp''@;'; put 'put ''b24gdXB0KGMpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxhPWwucm93SGVhZGVycyxkPWwuY29sSGVhZGVycyxmPWMudGFyZ2V0O2lmKHRoaXMuY2xvc2UoKSxDbyhmLCJoYW5kc29udGFibGVJbnB1dCIpfHwoYy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcFByb3BhZ2F0aW9uKCks''@;'; put 'put ''IShhfHxkfHxmdW5jdGlvbiBoKE0pe3JldHVybiJURCI9PT1NLm5vZGVOYW1lfHwiVEQiPT09TS5wYXJlbnROb2RlLm5vZGVOYW1lfShmKXx8Q28oZiwiY3VycmVudCIpJiZDbyhmLCJ3dEJvcmRlciIpKSkpcmV0dXJuO2NvbnN0IHY9VlYodGhpcy5tZW51LmNvbnRhaW5lcix0aGlzLmhvdC5y''@;'; put 'put ''b290RG9jdW1lbnQpO3RoaXMub3Blbih7dG9wOmMuY2xpZW50WSt2LnRvcCxsZWZ0OmMuY2xpZW50WCt2LmxlZnR9KX1mdW5jdGlvbiBkcHQoKXt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29udGV4dE1lbnVTaG93Iix0aGlzKX1mdW5jdGlvbiBocHQoKXt0aGlzLmhvdC5ydW5Ib29rcygi''@;'; put 'put ''YWZ0ZXJDb250ZXh0TWVudVNob3ciLHRoaXMpfWZ1bmN0aW9uIGZwdCgpe3RoaXMuaG90Lmxpc3RlbigpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbnRleHRNZW51SGlkZSIsdGhpcyl9ckIuU0VQQVJBVE9SPXtuYW1lOnlzfTtjbGFzcyBicHR7Y29uc3RydWN0b3IoKXt0aGlzLmRhdGE9''@;'; put 'put ''e319c2V0RGF0YShsLGEpe3RoaXMuZGF0YVtsXT1hfWdldERhdGEobCl7cmV0dXJuIHRoaXMuZGF0YVtsXXx8dm9pZCAwfX1jbGFzcyBfcHR7Y29uc3RydWN0b3IoKXt0aGlzLmNsaXBib2FyZERhdGE9bmV3IGJwdH1wcmV2ZW50RGVmYXVsdCgpe31jb21wb3NlZFBhdGgoKXtyZXR1cm5bXX19''@;'; put 'put ''ZnVuY3Rpb24gSUMoYyxsLGEpe2E3ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gYTdlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBS''@;'; put 'put ''ZChjLGwpe3JldHVybiBjLmdldChMQyhjLGwpKX1mdW5jdGlvbiBSQyhjLGwsYSl7cmV0dXJuIGMuc2V0KExDKGMsbCksYSksYX1mdW5jdGlvbiBMQyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIHE2PW5ldyBXZWFrTWFwLFBuZT1uZXcgV2Vha01hcCxLaz1uZXcgV2Vha01hcCxGbmU9bmV3IFdlYWtNYXAsSG5lPW5ldyBXZWFrTWFwLFhrPW5ldyBXZWFrTWFwLHFr''@;'; put 'put ''PW5ldyBXZWFrU2V0O2NsYXNzIENwdHtjb25zdHJ1Y3RvcihsKXtsZXR7Y291bnRSb3dzOmEsY291bnRDb2x1bW5zOmQscm93c0xpbWl0OmgsY29sdW1uc0xpbWl0OmYsY291bnRDb2x1bW5IZWFkZXJzOnZ9PWw7KGZ1bmN0aW9uIHdwdChjLGwpe2E3ZShjLGwpLGwuYWRkKGMpfSkodGhpcyxx''@;'; put 'put ''ayksSUModGhpcyxxNix2b2lkIDApLElDKHRoaXMsUG5lLHZvaWQgMCksSUModGhpcyxLayx2b2lkIDApLElDKHRoaXMsRm5lLHZvaWQgMCksSUModGhpcyxIbmUsdm9pZCAwKSxJQyh0aGlzLFhrLHZvaWQgMCksUkMoUG5lLHRoaXMsYSksUkMoS2ssdGhpcyxkKSxSQyhGbmUsdGhpcyxoKSxS''@;'; put 'put ''QyhIbmUsdGhpcyxmKSxSQyhYayx0aGlzLHYpfXNldFNlbGVjdGVkUmFuZ2UobCl7UkMocTYsdGhpcyxsKX1nZXRDZWxsc1JhbmdlKCl7aWYoMD09PVJkKFBuZSx0aGlzKS5jYWxsKHRoaXMpfHwwPT09UmQoS2ssdGhpcykuY2FsbCh0aGlzKSlyZXR1cm4gbnVsbDtjb25zdHtyb3c6bCxjb2w6''@;'; put 'put ''YX09UmQocTYsdGhpcykuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93OmQsY29sOmh9PVJkKHE2LHRoaXMpLmdldEJvdHRvbUVuZENvcm5lcigpLGY9TEMocWssdGhpcyxTcHQpLmNhbGwodGhpcyxsLGQpLHY9TEMocWssdGhpcyxObmUpLmNhbGwodGhpcyxhLGgpO3JldHVybntpc1JhbmdlVHJp''@;'; put 'put ''bW1lZDpkIT09Znx8aCE9PXYsc3RhcnRSb3c6bCxzdGFydENvbDphLGVuZFJvdzpmLGVuZENvbDp2fX1nZXRNb3N0Qm90dG9tQ29sdW1uSGVhZGVyc1JhbmdlKCl7aWYoMD09PVJkKEtrLHRoaXMpLmNhbGwodGhpcyl8fDA9PT1SZChYayx0aGlzKS5jYWxsKHRoaXMpKXJldHVybiBudWxsO2Nv''@;'; put 'put ''bnN0e2NvbDpsfT1SZChxNix0aGlzKS5nZXRUb3BTdGFydENvcm5lcigpLHtjb2w6YX09UmQocTYsdGhpcykuZ2V0Qm90dG9tRW5kQ29ybmVyKCksZD1MQyhxayx0aGlzLE5uZSkuY2FsbCh0aGlzLGwsYSk7cmV0dXJue2lzUmFuZ2VUcmltbWVkOmEhPT1kLHN0YXJ0Um93Oi0xLHN0YXJ0Q29s''@;'; put 'put ''OmwsZW5kUm93Oi0xLGVuZENvbDpkfX1nZXRBbGxDb2x1bW5IZWFkZXJzUmFuZ2UoKXtpZigwPT09UmQoS2ssdGhpcykuY2FsbCh0aGlzKXx8MD09PVJkKFhrLHRoaXMpLmNhbGwodGhpcykpcmV0dXJuIG51bGw7Y29uc3R7Y29sOmx9PVJkKHE2LHRoaXMpLmdldFRvcFN0YXJ0Q29ybmVyKCks''@;'; put 'put ''e2NvbDphfT1SZChxNix0aGlzKS5nZXRCb3R0b21FbmRDb3JuZXIoKSxkPUxDKHFrLHRoaXMsTm5lKS5jYWxsKHRoaXMsbCxhKTtyZXR1cm57aXNSYW5nZVRyaW1tZWQ6YSE9PWQsc3RhcnRSb3c6LVJkKFhrLHRoaXMpLmNhbGwodGhpcyksc3RhcnRDb2w6bCxlbmRSb3c6LTEsZW5kQ29sOmR9''@;'; put 'put ''fX1mdW5jdGlvbiBObmUoYyxsKXtyZXR1cm4gTWF0aC5taW4obCxNYXRoLm1heChjK1JkKEhuZSx0aGlzKS5jYWxsKHRoaXMpLTEsYykpfWZ1bmN0aW9uIFNwdChjLGwpe3JldHVybiBNYXRoLm1pbihsLE1hdGgubWF4KGMrUmQoRm5lLHRoaXMpLmNhbGwodGhpcyktMSxjKSl9ZnVuY3Rpb24g''@;'; put 'put ''bzdlKGMpe2NvbnN0IGw9W10sYT1bXTtyZXR1cm4gS24oYyxkPT57UWEoTWF0aC5taW4oZC5zdGFydFJvdyxkLmVuZFJvdyksTWF0aC5tYXgoZC5zdGFydFJvdyxkLmVuZFJvdyksRD0+ey0xPT09bC5pbmRleE9mKEQpJiZsLnB1c2goRCl9KSxRYShNYXRoLm1pbihkLnN0YXJ0Q29sLGQuZW5k''@;'; put 'put ''Q29sKSxNYXRoLm1heChkLnN0YXJ0Q29sLGQuZW5kQ29sKSxEPT57LTE9PT1hLmluZGV4T2YoRCkmJmEucHVzaChEKX0pfSkse3Jvd3M6bCxjb2x1bW5zOmF9fWZ1bmN0aW9uIEo2KGMsbCxhKXtzN2UoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHM3ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93''@;'; put 'put ''IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gSmsoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHhwdChjKXt2YXIgbD1mdW5jdGlvbiBFcHQoYyxsKXtpZigib2JqZWN0IiE9dHlw''@;'; put 'put ''ZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0''@;'; put 'put ''dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEw''@;'; put 'put ''LGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIFRoKGMsbCl7cmV0dXJuIGMuZ2V0KFoxKGMsbCkpfWZ1bmN0aW9uIG9wKGMsbCxhKXtyZXR1cm4gYy5zZXQoWjEoYyxsKSxhKSxhfWZ1bmN0aW9uIFoxKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''Yz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1BYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb3B5TGltaXQiKSxBYS5n''@;'; put 'put ''ZXRTaW5nbGV0b24oKS5yZWdpc3RlcigibW9kaWZ5Q29weWFibGVSYW5nZSIpLEFhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDdXQiKSxBYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDdXQiKSxBYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlUGFzdGUi''@;'; put 'put ''KSxBYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJQYXN0ZSIpLEFhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb3B5IiksQWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29weSIpO2NvbnN0IFZuZT0iY29weVBhc3RlIixBcHQ9WyJmcmFnbWVudFNlbGVj''@;'; put 'put ''dGlvbiJdLGw3ZT0iYXBwbGljYXRpb24vaHQtc291cmNlLWRhdGEtanNvbi1odG1sIixjN2U9Wyc8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkhhbmRzb250YWJsZSIvPicsJzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+dGR7d2hpdGUtc3BhY2U6bm9ybWFsfWJye21zby1kYXRhLXBs''@;'; put 'put ''YWNlbWVudDpzYW1lLWNlbGx9PC9zdHlsZT4nXS5qb2luKCIiKTt2YXIgQm5lPW5ldyBXZWFrTWFwLGpuZT1uZXcgV2Vha01hcCx6bmU9bmV3IFdlYWtNYXAsT0M9bmV3IFdlYWtNYXAsaUI9bmV3IFdlYWtNYXAsYUI9bmV3IFdlYWtNYXAsUEM9bmV3IFdlYWtNYXAsb0I9bmV3IFdlYWtNYXAs''@;'; put 'put ''TGQ9bmV3IFdlYWtTZXQ7Y2xhc3Mga3B0IGV4dGVuZHMgTXN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIE1wdChjLGwpe3M3ZShjLGwpLGwuYWRkKGMpfSh0aGlzLExkKSxKayh0aGlzLCJjb2x1bW5zTGltaXQiLDEvMCksSmsodGhpcywicm93c0xpbWl0Iiwx''@;'; put 'put ''LzApLEprKHRoaXMsInBhc3RlTW9kZSIsIm92ZXJ3cml0ZSIpLEprKHRoaXMsInVpQ29udGFpbmVyIix0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keSksSjYodGhpcyxCbmUsITEpLEo2KHRoaXMsam5lLCExKSxKNih0aGlzLHpuZSwhMSksSjYodGhpcyxPQywiY2VsbHMtb25seSIpLEo2KHRo''@;'; put 'put ''aXMsaUIsITEpLEo2KHRoaXMsYUIsITEpLEo2KHRoaXMsUEMsbmV3IENwdCh7Y291bnRSb3dzOigpPT50aGlzLmhvdC5jb3VudFJvd3MoKSxjb3VudENvbHVtbnM6KCk9PnRoaXMuaG90LmNvdW50Q29scygpLHJvd3NMaW1pdDooKT0+dGhpcy5yb3dzTGltaXQsY29sdW1uc0xpbWl0OigpPT50''@;'; put 'put ''aGlzLmNvbHVtbnNMaW1pdCxjb3VudENvbHVtbkhlYWRlcnM6KCk9PnRoaXMuaG90LnZpZXcuZ2V0Q29sdW1uSGVhZGVyc0NvdW50KCl9KSksSjYodGhpcyxvQiwhMSksSmsodGhpcywiY29weWFibGVSYW5nZXMiLFtdKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gVm5lfXN0YXRp''@;'; put 'put ''YyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuW1ZuZSwuLi5BcHRdfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDgwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybntwYXN0ZU1vZGU6Im92ZXJ3cml0ZSIscm93c0xpbWl0OjEvMCxjb2x1bW5zTGltaXQ6''@;'; put 'put ''MS8wLGNvcHlDb2x1bW5IZWFkZXJzOiExLGNvcHlDb2x1bW5Hcm91cEhlYWRlcnM6ITEsY29weUNvbHVtbkhlYWRlcnNPbmx5OiExfX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbVm5lXX1lbmFibGVQbHVnaW4oKXt2YXIgbCxhLGQ9dGhpczt0aGlzLmVuYWJs''@;'; put 'put ''ZWR8fCh0aGlzLnBhc3RlTW9kZT1udWxsIT09KGw9dGhpcy5nZXRTZXR0aW5nKCJwYXN0ZU1vZGUiKSkmJnZvaWQgMCE9PWw/bDp0aGlzLnBhc3RlTW9kZSx0aGlzLnJvd3NMaW1pdD1pc05hTih0aGlzLmdldFNldHRpbmcoInJvd3NMaW1pdCIpKT90aGlzLnJvd3NMaW1pdDp0aGlzLmdldFNl''@;'; put 'put ''dHRpbmcoInJvd3NMaW1pdCIpLHRoaXMuY29sdW1uc0xpbWl0PWlzTmFOKHRoaXMuZ2V0U2V0dGluZygiY29sdW1uc0xpbWl0IikpP3RoaXMuY29sdW1uc0xpbWl0OnRoaXMuZ2V0U2V0dGluZygiY29sdW1uc0xpbWl0Iiksb3AoQm5lLHRoaXMsdGhpcy5nZXRTZXR0aW5nKCJjb3B5Q29sdW1u''@;'; put 'put ''SGVhZGVycyIpKSxvcChqbmUsdGhpcyx0aGlzLmdldFNldHRpbmcoImNvcHlDb2x1bW5Hcm91cEhlYWRlcnMiKSksb3Aoem5lLHRoaXMsdGhpcy5nZXRTZXR0aW5nKCJjb3B5Q29sdW1uSGVhZGVyc09ubHkiKSksdGhpcy51aUNvbnRhaW5lcj1udWxsIT09KGE9dGhpcy5nZXRTZXR0aW5nKCJ1''@;'; put 'put ''aUNvbnRhaW5lciIpKSYmdm9pZCAwIT09YT9hOnRoaXMudWlDb250YWluZXIsdGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGg9PloxKExkLHRoaXMsUnB0KS5jYWxsKHRoaXMsaCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb24iLGZ1bmN0aW9uKCl7''@;'; put 'put ''Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIFoxKExkLGQsTHB0KS5jYWxsKGQsLi4uZil9KSx0aGlzLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uRW5kIiwoKT0+WjEoTGQsdGhpcyxPcHQpLmNhbGwo''@;'; put 'put ''dGhpcykpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ob3Qucm9vdERvY3VtZW50LCJjb3B5IixmdW5jdGlvbigpe3JldHVybiBkLm9uQ29weSguLi5hcmd1bWVudHMpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290RG9j''@;'; put 'put ''dW1lbnQsImN1dCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkN1dCguLi5hcmd1bWVudHMpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290RG9jdW1lbnQsInBhc3RlIixmdW5jdGlvbigpe3JldHVybiBkLm9uUGFzdGUoLi4uYXJndW1lbnRzKX0pLEJB''@;'; put 'put ''KCkmJih0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5LCJtb3VzZWVudGVyIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3Jl''@;'; put 'put ''dHVybiBaMShMZCxkLFBwdCkuY2FsbChkLC4uLmYpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keSwibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7''@;'; put 'put ''djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gWjEoTGQsZCxGcHQpLmNhbGwoZCwuLi5mKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb24iLCgpPT5aMShMZCx0aGlzLEhwdCkuY2FsbCh0aGlzKSkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlz''@;'; put 'put ''LmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCl9Y29weSgpe29wKE9DLHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRz''@;'; put 'put ''WzBdOiJjZWxscy1vbmx5Iiksb3AoaUIsdGhpcywhMCksWjEoTGQsdGhpcyx1N2UpLmNhbGwodGhpcywiY29weSIpfWNvcHlDZWxsc09ubHkoKXt0aGlzLmNvcHkoImNlbGxzLW9ubHkiKX1jb3B5Q29sdW1uSGVhZGVyc09ubHkoKXt0aGlzLmNvcHkoImNvbHVtbi1oZWFkZXJzLW9ubHkiKX1j''@;'; put 'put ''b3B5V2l0aEFsbENvbHVtbkhlYWRlcnMoKXt0aGlzLmNvcHkoIndpdGgtY29sdW1uLWdyb3VwLWhlYWRlcnMiKX1jb3B5V2l0aENvbHVtbkhlYWRlcnMoKXt0aGlzLmNvcHkoIndpdGgtY29sdW1uLWhlYWRlcnMiKX1jdXQoKXtvcChhQix0aGlzLCEwKSxaMShMZCx0aGlzLHU3ZSkuY2FsbCh0''@;'; put 'put ''aGlzLCJjdXQiKX1nZXRSYW5nZWRDb3B5YWJsZURhdGEobCl7cmV0dXJuIGVWKHRoaXMuZ2V0UmFuZ2VkRGF0YShsKSl9Z2V0UmFuZ2VkRGF0YShsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IGQ9W10se3Jvd3M6''@;'; put 'put ''aCxjb2x1bW5zOmZ9PW83ZShsKTtyZXR1cm4gS24oaCx2PT57Y29uc3QgTT1bXTtLbihmLEQ9PntpZih2PDApTS5wdXNoKHRoaXMuaG90LmdldENvbEhlYWRlcihELHYpKTtlbHNle2xldCBVPWE/dGhpcy5ob3QuZ2V0Q29weWFibGVTb3VyY2VEYXRhKHYsRCk6dGhpcy5ob3QuZ2V0Q29weWFi''@;'; put 'put ''bGVEYXRhKHYsRCk7YSYmbW8oVSkmJihVPUpTT04uc3RyaW5naWZ5KFUpKSxNLnB1c2goVSl9fSksZC5wdXNoKE0pfSksZH1wYXN0ZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiIixhPWFyZ3VtZW50cy5sZW5ndGg+MSYm''@;'; put 'put ''dm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsO2lmKCFsJiYhYSlyZXR1cm47Y29uc3QgZD1uZXcgX3B0O2wmJmQuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L3BsYWluIixsKSxhJiZkLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9odG1sIixhKSx0aGlzLm9uUGFz''@;'; put 'put ''dGUoZCl9c2V0Q29weWFibGVUZXh0KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYoIWwpcmV0dXJuO2lmKGwuaXNTaW5nbGVIZWFkZXIoKSlyZXR1cm4gdm9pZCh0aGlzLmNvcHlhYmxlUmFuZ2VzPVtdKTtUaChQQyx0aGlzKS5zZXRTZWxlY3RlZFJhbmdl''@;'; put 'put ''KGwpO2NvbnN0IGE9bmV3IE1hcChbWyJoZWFkZXJzIixudWxsXSxbImNlbGxzIixudWxsXV0pOyJjb2x1bW4taGVhZGVycy1vbmx5Ij09PVRoKE9DLHRoaXMpP2Euc2V0KCJoZWFkZXJzIixUaChQQyx0aGlzKS5nZXRNb3N0Qm90dG9tQ29sdW1uSGVhZGVyc1JhbmdlKCkpOigid2l0aC1jb2x1''@;'; put 'put ''bW4taGVhZGVycyI9PT1UaChPQyx0aGlzKT9hLnNldCgiaGVhZGVycyIsVGgoUEMsdGhpcykuZ2V0TW9zdEJvdHRvbUNvbHVtbkhlYWRlcnNSYW5nZSgpKToid2l0aC1jb2x1bW4tZ3JvdXAtaGVhZGVycyI9PT1UaChPQyx0aGlzKSYmYS5zZXQoImhlYWRlcnMiLFRoKFBDLHRoaXMpLmdldEFs''@;'; put 'put ''bENvbHVtbkhlYWRlcnNSYW5nZSgpKSxhLnNldCgiY2VsbHMiLFRoKFBDLHRoaXMpLmdldENlbGxzUmFuZ2UoKSkpLHRoaXMuY29weWFibGVSYW5nZXM9QXJyYXkuZnJvbShhLnZhbHVlcygpKS5maWx0ZXIoaD0+bnVsbCE9PWgpLm1hcChoPT57bGV0e3N0YXJ0Um93OmYsc3RhcnRDb2w6dixl''@;'; put 'put ''bmRSb3c6TSxlbmRDb2w6RH09aDtyZXR1cm57c3RhcnRSb3c6ZixzdGFydENvbDp2LGVuZFJvdzpNLGVuZENvbDpEfX0pLHRoaXMuY29weWFibGVSYW5nZXM9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUNvcHlhYmxlUmFuZ2UiLHRoaXMuY29weWFibGVSYW5nZXMpO2NvbnN0IGQ9YS5nZXQo''@;'; put 'put ''ImNlbGxzIik7aWYobnVsbCE9PWQmJmQuaXNSYW5nZVRyaW1tZWQpe2NvbnN0e3N0YXJ0Um93Omgsc3RhcnRDb2w6ZixlbmRSb3c6dixlbmRDb2w6TX09ZDt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb3B5TGltaXQiLHYtaCsxLE0tZisxLHRoaXMucm93c0xpbWl0LHRoaXMuY29sdW1uc0xp''@;'; put 'put ''bWl0KX19aXNFZGl0b3JPcGVuZWQoKXt2YXIgbDtyZXR1cm4gbnVsbD09PShsPXRoaXMuaG90LmdldEFjdGl2ZUVkaXRvcigpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5pc09wZW5lZCgpfXBvcHVsYXRlVmFsdWVzKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1''@;'; put 'put ''bWVudHNbMl0/YXJndW1lbnRzWzJdOnRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZighbC5sZW5ndGgpcmV0dXJuW251bGwsbnVsbCxudWxsLG51bGxdO2NvbnN0IGg9bC5sZW5ndGgsZj1sWzBdLmxlbmd0aCx2PVtdLHtyb3c6TSxjb2w6RH09ZC5nZXRUb3BTdGFydENvcm5l''@;'; put 'put ''cigpLHtyb3c6VSxjb2w6dGV9PWQuZ2V0Qm90dG9tRW5kQ29ybmVyKCk7bGV0IG9lPU0sdmU9RCx3ZT1NLEZlPUQ7Zm9yKDt2Lmxlbmd0aDxofHxvZTw9VTspe2NvbnN0e3NraXBSb3dPblBhc3RlOm50LHZpc3VhbFJvdzpkdH09dGhpcy5ob3QuZ2V0Q2VsbE1ldGEob2UsRCk7aWYob2U9ZHQr''@;'; put 'put ''MSwhMD09PW50KWNvbnRpbnVlO3dlPWR0LHZlPUQ7Y29uc3QgbXQ9W10sJHQ9di5sZW5ndGglaDtmb3IoO210Lmxlbmd0aDxmfHx2ZTw9dGU7KXt2YXIgV2U7Y29uc3R7c2tpcENvbHVtbk9uUGFzdGU6enQsdmlzdWFsQ29sOnlufT10aGlzLmhvdC5nZXRDZWxsTWV0YShkdCx2ZSksZ249dGhp''@;'; put 'put ''cy5ob3QuZ2V0U291cmNlRGF0YUF0Q2VsbChkdCx2ZSksd249bXQubGVuZ3RoJWY7aWYodmU9eW4rMSwhMD09PXp0KWNvbnRpbnVlO0ZlPXluO2NvbnN0IFJuPW51bGw9PWF8fG51bGw9PT0oV2U9YVskdF0pfHx2b2lkIDA9PT1XZT92b2lkIDA6V2Vbd25dO2xldCBEcj1sWyR0XVt3bl07aWYo''@;'; put 'put ''YSYmejRlKFJuKSl7Y29uc3QgTHI9SlNPTi5wYXJzZShSbik7KG1vKGduKXx8bnVsbD09PWduKSYmKERyPUxyKX1tdC5wdXNoKERyKX12LnB1c2gobXQpfXJldHVybiBvcChvQix0aGlzLCEwKSx0aGlzLmhvdC5wb3B1bGF0ZUZyb21BcnJheShNLEQsdix2b2lkIDAsdm9pZCAwLCJDb3B5UGFz''@;'; put 'put ''dGUucGFzdGUiLHRoaXMucGFzdGVNb2RlKSxbTSxELHdlLEZlXX1vbkNvcHkobCl7Y29uc3QgYT1sLmNvbXBvc2VkUGF0aCgpWzBdLGQ9dGhpcy5ob3QuZ2V0Rm9jdXNNYW5hZ2VyKCkuZ2V0UmVmb2N1c0VsZW1lbnQoKSxoPWE/Lmhhc0F0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiKTtpZigh''@;'; put 'put ''dGhpcy5ob3QuaXNMaXN0ZW5pbmcoKSYmIVRoKGlCLHRoaXMpfHx0aGlzLmlzRWRpdG9yT3BlbmVkKCl8fEU0KGEpJiYoaCYmYSE9PWR8fCFoJiZhIT09dGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHkmJiFqQShhLHRoaXMuaG90LnJvb3RFbGVtZW50KSkpcmV0dXJuO2wucHJldmVudERlZmF1''@;'; put 'put ''bHQoKSx0aGlzLnNldENvcHlhYmxlVGV4dCgpLG9wKGlCLHRoaXMsITEpO2NvbnN0IGY9dGhpcy5nZXRSYW5nZWREYXRhKHRoaXMuY29weWFibGVSYW5nZXMpLHY9dGhpcy5nZXRSYW5nZWREYXRhKHRoaXMuY29weWFibGVSYW5nZXMsITApLE09WjEoTGQsdGhpcyxEcHQpLmNhbGwodGhpcyx0''@;'; put 'put ''aGlzLmNvcHlhYmxlUmFuZ2VzKTshIXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb3B5IixmLHRoaXMuY29weWFibGVSYW5nZXMsTSkmJihaMShMZCx0aGlzLGg3ZSkuY2FsbCh0aGlzLGwsZix2KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb3B5IixmLHRoaXMuY29weWFibGVSYW5nZXMs''@;'; put 'put ''TSkpLG9wKE9DLHRoaXMsImNlbGxzLW9ubHkiKX1vbkN1dChsKXtjb25zdCBhPWwuY29tcG9zZWRQYXRoKClbMF0sZD10aGlzLmhvdC5nZXRGb2N1c01hbmFnZXIoKS5nZXRSZWZvY3VzRWxlbWVudCgpLGg9YT8uaGFzQXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIpO2lmKCF0aGlzLmhvdC5p''@;'; put 'put ''c0xpc3RlbmluZygpJiYhVGgoYUIsdGhpcyl8fHRoaXMuaXNFZGl0b3JPcGVuZWQoKXx8RTQoYSkmJihoJiZhIT09ZHx8IWgmJmEhPT10aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keSYmIWpBKGEsdGhpcy5ob3Qucm9vdEVsZW1lbnQpKSlyZXR1cm47bC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMu''@;'; put 'put ''c2V0Q29weWFibGVUZXh0KCksb3AoYUIsdGhpcywhMSk7Y29uc3QgZj10aGlzLmdldFJhbmdlZERhdGEodGhpcy5jb3B5YWJsZVJhbmdlcyksdj10aGlzLmdldFJhbmdlZERhdGEodGhpcy5jb3B5YWJsZVJhbmdlcywhMCk7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUN1dCIsZix0aGlzLmNv''@;'; put 'put ''cHlhYmxlUmFuZ2VzKSYmKFoxKExkLHRoaXMsaDdlKS5jYWxsKHRoaXMsbCxmLHYpLHRoaXMuaG90LmVtcHR5U2VsZWN0ZWRDZWxscygiQ29weVBhc3RlLmN1dCIpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckN1dCIsZix0aGlzLmNvcHlhYmxlUmFuZ2VzKSl9b25QYXN0ZShsKXtjb25zdCBh''@;'; put 'put ''PWwuY29tcG9zZWRQYXRoKClbMF0sZD10aGlzLmhvdC5nZXRGb2N1c01hbmFnZXIoKS5nZXRSZWZvY3VzRWxlbWVudCgpLGg9YT8uaGFzQXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIpO2lmKCF0aGlzLmhvdC5pc0xpc3RlbmluZygpfHx0aGlzLmlzRWRpdG9yT3BlbmVkKCl8fCF0aGlzLmhv''@;'; put 'put ''dC5nZXRTZWxlY3RlZCgpfHxFNChhKSYmKGgmJmEhPT1kfHwhaCYmYSE9PXRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5JiYhakEoYSx0aGlzLmhvdC5yb290RWxlbWVudCkpKXJldHVybjtsZXQgZix2O2lmKGwucHJldmVudERlZmF1bHQoKSxsJiZ0eXBlb2YgbC5jbGlwYm9hcmREYXRhPCJ1''@;'; put 'put ''Iil7Y29uc3Qgb2U9bC5jbGlwYm9hcmREYXRhLmdldERhdGEobDdlKTtvZSYmKHY9Q0oob2UsdGhpcy5ob3Qucm9vdERvY3VtZW50KS5kYXRhKTtjb25zdCB2ZT1LSChsLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgidGV4dC9odG1sIikse0FERF9UQUdTOlsibWV0YSJdLEFERF9BVFRSOlsiY29u''@;'; put 'put ''dGVudCJdLEZPUkNFX0JPRFk6ITB9KTtmPXZlJiYvKDx0YWJsZSl8KDxUQUJMRSkvZy50ZXN0KHZlKT9DSih2ZSx0aGlzLmhvdC5yb290RG9jdW1lbnQpLmRhdGE6bC5jbGlwYm9hcmREYXRhLmdldERhdGEoInRleHQvcGxhaW4iKX1lbHNlIHR5cGVvZiBDbGlwYm9hcmRFdmVudD4idSImJnR5''@;'; put 'put ''cGVvZiB0aGlzLmhvdC5yb290V2luZG93LmNsaXBib2FyZERhdGE8InUiJiYoZj10aGlzLmhvdC5yb290V2luZG93LmNsaXBib2FyZERhdGEuZ2V0RGF0YSgiVGV4dCIpKTtpZigic3RyaW5nIj09dHlwZW9mIGYmJihmPWZ1bmN0aW9uICRjdChjKXtjb25zdCBsPVtbIiJdXTtpZigwPT09Yy5s''@;'; put 'put ''ZW5ndGgpcmV0dXJuIGw7bGV0IGgsYT0wLGQ9MDtmb3IoO2MubGVuZ3RoPjAmJmghPT1jLmxlbmd0aDspaWYoaD1jLmxlbmd0aCxjLm1hdGNoKFJtZSkpYz1jLnJlcGxhY2UoUm1lLCIiKSxhKz0xLGxbZF1bYV09IiI7ZWxzZSBpZihjLm1hdGNoKEltZSkpYz1jLnJlcGxhY2UoSW1lLCIiKSxh''@;'; put 'put ''PTAsZCs9MSxsW2RdPVsiIl07ZWxzZXtsZXQgZj0iIjtpZihjLnN0YXJ0c1dpdGgoJyInKSl7bGV0IHY9MCxNPSEwO2Zvcig7TTspe2NvbnN0IEQ9Yy5zbGljZSgwLDEpOyciJz09PUQmJih2Kz0xKSxmKz1ELCgwPT09KGM9Yy5zbGljZSgxKSkubGVuZ3RofHxjLm1hdGNoKC9eW1x0XHJcbl0v''@;'; put 'put ''KSYmdiUyPT0wKSYmKE09ITEpfWY9Zi5yZXBsYWNlKC9eIi8sIiIpLnJlcGxhY2UoLyIkLywiIikucmVwbGFjZSgvWyJdKi9nLEQ9Pm5ldyBBcnJheShNYXRoLmZsb29yKEQubGVuZ3RoLzIpKS5maWxsKCciJykuam9pbigiIikpfWVsc2V7Y29uc3Qgdj1jLm1hdGNoKEdjdCk7Zj12P3ZbMF06''@;'; put 'put ''IiIsYz1jLnNsaWNlKGYubGVuZ3RoKX1sW2RdW2FdPWZ9cmV0dXJuIGx9KGYpKSx2b2lkIDA9PT1mfHxmJiYwPT09Zi5sZW5ndGh8fCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVBhc3RlIixmLHRoaXMuY29weWFibGVSYW5nZXMpKXJldHVybjtjb25zdFtNLEQsVSx0ZV09dGhpcy5w''@;'; put 'put ''b3B1bGF0ZVZhbHVlcyhmLHYpO251bGwhPT1NJiZudWxsIT09RCYmdGhpcy5ob3Quc2VsZWN0Q2VsbChNLEQsTWF0aC5taW4odGhpcy5ob3QuY291bnRSb3dzKCktMSxVKSxNYXRoLm1pbih0aGlzLmhvdC5jb3VudENvbHMoKS0xLHRlKSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUGFzdGUi''@;'; put 'put ''LGYsdGhpcy5jb3B5YWJsZVJhbmdlcyl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gdTdlKGMpe2lmKEJBKCkpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKGwpe2NvbnN0e3JvdzphLGNvbDpkfT1sLmhpZ2hsaWdodCxoPXRoaXMuaG90''@;'; put 'put ''LmdldENlbGwoYSxkLCEwKTtoJiZiZ2UoaCwoKT0+e3RoaXMuaG90LnJvb3REb2N1bWVudC5leGVjQ29tbWFuZChjKX0pfX1lbHNlIHRoaXMuaG90LnJvb3REb2N1bWVudC5leGVjQ29tbWFuZChjKX1mdW5jdGlvbiBEcHQoYyl7Y29uc3R7cm93czpsfT1vN2UoYyk7bGV0IGE9MDtmb3IobGV0''@;'; put 'put ''IGQ9MDtkPGwubGVuZ3RoJiYhKGxbZF0+PTApO2QrKylhKz0xO3JldHVybntjb2x1bW5IZWFkZXJzQ291bnQ6YX19ZnVuY3Rpb24gSXB0KCl7aWYodGhpcy5ob3QuaXNMaXN0ZW5pbmcoKSl7Y29uc3QgYz10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYoYyl7Y29uc3R7cm93''@;'; put 'put ''OmwsY29sOmF9PWMuaGlnaGxpZ2h0LGQ9dGhpcy5ob3QuZ2V0Q2VsbChsLGEsITApO2QmJnNKKGQpfX19ZnVuY3Rpb24gZDdlKCl7aWYodGhpcy5ob3QuaXNMaXN0ZW5pbmcoKSl7Y29uc3QgYz10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYoYyl7Y29uc3R7cm93OmwsY29s''@;'; put 'put ''OmF9PWMuaGlnaGxpZ2h0LGQ9dGhpcy5ob3QuZ2V0Q2VsbChsLGEsITApO251bGwhPWQmJmQuaGFzQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKSYmbEooZCl9fX1mdW5jdGlvbiBoN2UoYyxsLGEpe2NvbnN0IGQ9ZVYobCk7aWYoYyYmYy5jbGlwYm9hcmREYXRhKXtjb25zdCBoPXdKKGwp''@;'; put 'put ''LGY9d0ooYSk7Yy5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQvcGxhaW4iLGQpLGMuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L2h0bWwiLFtjN2UsaF0uam9pbigiIikpLGMuY2xpcGJvYXJkRGF0YS5zZXREYXRhKGw3ZSxbYzdlLGZdLmpvaW4oIiIpKX1lbHNlIHR5cGVvZiBDbGlw''@;'; put 'put ''Ym9hcmRFdmVudD4idSImJnRoaXMuaG90LnJvb3RXaW5kb3cuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJUZXh0IixkKX1mdW5jdGlvbiBScHQoYyl7Yy5pdGVtcy5wdXNoKHtuYW1lOiItLS0tLS0tLS0ifSxmdW5jdGlvbiBwcHQoYyl7cmV0dXJue2tleToiY29weSIsbmFtZSgpe3JldHVybiB0''@;'; put 'put ''aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2Uoa1EpfSxjYWxsYmFjaygpe2MuY29weUNlbGxzT25seSgpfSxkaXNhYmxlZCgpe2lmKDA9PT10aGlzLmNvdW50Um93cygpfHwwPT09dGhpcy5jb3VudENvbHMoKSlyZXR1cm4hMDtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lm''@;'; put 'put ''KCFsfHxsLmlzU2luZ2xlSGVhZGVyKCkpcmV0dXJuITA7Y29uc3QgYT10aGlzLmdldFNlbGVjdGVkKCk7cmV0dXJuIWF8fGEubGVuZ3RoPjF9LGhpZGRlbjohMX19KHRoaXMpKSxUaChCbmUsdGhpcykmJmMuaXRlbXMucHVzaChmdW5jdGlvbiB2cHQoYyl7cmV0dXJue2tleToiY29weV93aXRo''@;'; put 'put ''X2NvbHVtbl9oZWFkZXJzIixuYW1lKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSxhPWw/Z3MobC5nZXRXaWR0aCgpLTEsMCwxKTowO3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoRFEsYSl9LGNhbGxiYWNrKCl7Yy5jb3B5V2l0aENvbHVtbkhlYWRlcnMo''@;'; put 'put ''KX0sZGlzYWJsZWQoKXtpZighdGhpcy5oYXNDb2xIZWFkZXJzKCkpcmV0dXJuITA7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZighbHx8bC5pc1NpbmdsZUhlYWRlcigpKXJldHVybiEwO2NvbnN0IGE9dGhpcy5nZXRTZWxlY3RlZCgpO3JldHVybiFhfHxhLmxlbmd0''@;'; put 'put ''aD4xfSxoaWRkZW46ITF9fSh0aGlzKSksVGgoam5lLHRoaXMpJiZjLml0ZW1zLnB1c2goZnVuY3Rpb24gbXB0KGMpe3JldHVybntrZXk6ImNvcHlfd2l0aF9jb2x1bW5fZ3JvdXBfaGVhZGVycyIsbmFtZSgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksYT1sP2dzKGwu''@;'; put 'put ''Z2V0V2lkdGgoKS0xLDAsMSk6MDtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKElRLGEpfSxjYWxsYmFjaygpe2MuY29weVdpdGhBbGxDb2x1bW5IZWFkZXJzKCl9LGRpc2FibGVkKCl7aWYoIXRoaXMuaGFzQ29sSGVhZGVycygpfHwhdGhpcy5nZXRTZXR0aW5ncygpLm5lc3RlZEhl''@;'; put 'put ''YWRlcnMpcmV0dXJuITA7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZighbHx8bC5pc1NpbmdsZUhlYWRlcigpKXJldHVybiEwO2NvbnN0IGE9dGhpcy5nZXRTZWxlY3RlZCgpO3JldHVybiFhfHxhLmxlbmd0aD4xfSxoaWRkZW46ITF9fSh0aGlzKSksVGgoem5lLHRo''@;'; put 'put ''aXMpJiZjLml0ZW1zLnB1c2goZnVuY3Rpb24gZ3B0KGMpe3JldHVybntrZXk6ImNvcHlfY29sdW1uX2hlYWRlcnNfb25seSIsbmFtZSgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksYT1sP2dzKGwuZ2V0V2lkdGgoKS0xLDAsMSk6MDtyZXR1cm4gdGhpcy5nZXRUcmFu''@;'; put 'put ''c2xhdGVkUGhyYXNlKFJRLGEpfSxjYWxsYmFjaygpe2MuY29weUNvbHVtbkhlYWRlcnNPbmx5KCl9LGRpc2FibGVkKCl7aWYoIXRoaXMuaGFzQ29sSGVhZGVycygpKXJldHVybiEwO2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYoIWx8fGwuaXNTaW5nbGVIZWFkZXIo''@;'; put 'put ''KSlyZXR1cm4hMDtjb25zdCBhPXRoaXMuZ2V0U2VsZWN0ZWQoKTtyZXR1cm4hYXx8YS5sZW5ndGg+MX0saGlkZGVuOiExfX0odGhpcykpLGMuaXRlbXMucHVzaChmdW5jdGlvbiB5cHQoYyl7cmV0dXJue2tleToiY3V0IixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShM''@;'; put 'put ''USl9LGNhbGxiYWNrKCl7Yy5jdXQoKX0sZGlzYWJsZWQoKXtpZigwPT09dGhpcy5jb3VudFJvd3MoKXx8MD09PXRoaXMuY291bnRDb2xzKCkpcmV0dXJuITA7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZighbHx8bC5pc1NpbmdsZUhlYWRlcigpKXJldHVybiEwO2Nv''@;'; put 'put ''bnN0IGE9dGhpcy5nZXRTZWxlY3RlZCgpO3JldHVybiFhfHxhLmxlbmd0aD4xfSxoaWRkZW46ITF9fSh0aGlzKSl9ZnVuY3Rpb24gTHB0KGMsbCxhLGQsaCl7VGgob0IsdGhpcykmJihoLnZhbHVlPSEwKSxvcChvQix0aGlzLCExKX1mdW5jdGlvbiBPcHQoKXt0aGlzLmlzRWRpdG9yT3BlbmVk''@;'; put 'put ''KCl8fHRoaXMuaG90LmdldFNldHRpbmdzKCkuZnJhZ21lbnRTZWxlY3Rpb258fHRoaXMuc2V0Q29weWFibGVUZXh0KCl9ZnVuY3Rpb24gUHB0KCl7WjEoTGQsdGhpcyxkN2UpLmNhbGwodGhpcyl9ZnVuY3Rpb24gRnB0KCl7WjEoTGQsdGhpcyxJcHQpLmNhbGwodGhpcyl9ZnVuY3Rpb24gSHB0''@;'; put 'put ''KCl7WjEoTGQsdGhpcyxkN2UpLmNhbGwodGhpcyl9ZnVuY3Rpb24gZjdlKGMsbCl7cmV0dXJuYGJvcmRlcl9yb3cke2N9Y29sJHtsfWB9ZnVuY3Rpb24gVW5lKGMpe3ZhciBsLGE7cmV0dXJuKE1hKGMuc3RhcnQpfHxNYShjLmxlZnQpKSYmKGMuc3RhcnQ9bnVsbCE9PShsPWMuc3RhcnQpJiZ2''@;'; put 'put ''b2lkIDAhPT1sP2w6Yy5sZWZ0KSwoTWEoYy5lbmQpfHxNYShjLnJpZ2h0KSkmJihjLmVuZD1udWxsIT09KGE9Yy5lbmQpJiZ2b2lkIDAhPT1hP2E6Yy5yaWdodCksZGVsZXRlIGMubGVmdCxkZWxldGUgYy5yaWdodCxjfWZ1bmN0aW9uIGVEKGMpe3JldHVybiBNYShjLnN0YXJ0KSYmKGMubGVm''@;'; put 'put ''dD1jLnN0YXJ0KSxNYShjLmVuZCkmJihjLnJpZ2h0PWMuZW5kKSxjfWZ1bmN0aW9uIFpuZShjLGwpe3JldHVybntpZDpmN2UoYyxsKSxib3JkZXI6e3dpZHRoOjEsY29sb3I6IiMwMDAiLGNvcm5lclZpc2libGU6ITF9LHJvdzpjLGNvbDpsLHRvcDp7aGlkZTohMH0sYm90dG9tOntoaWRlOiEw''@;'; put 'put ''fSxzdGFydDp7aGlkZTohMH0sZW5kOntoaWRlOiEwfX19ZnVuY3Rpb24gSTUoYyxsKXtsZXQgYT0hMTtyZXR1cm4gS24oYy5nZXRTZWxlY3RlZFJhbmdlKCksZD0+e2QuZm9yQWxsKChoLGYpPT57aWYoaDwwfHxmPDApcmV0dXJuO2NvbnN0IHY9Yy5nZXRDZWxsTWV0YShoLGYpLmJvcmRlcnM7''@;'; put 'put ''aWYodil7aWYoIWwpcmV0dXJuIGE9ITAsITE7aWYoIW51KHZbbF0sImhpZGUiKXx8ITE9PT12W2xdLmhpZGUpcmV0dXJuIGE9ITAsITF9fSl9KSxhfWZ1bmN0aW9uIHNCKGMpe3JldHVybmA8c3BhbiBjbGFzcz0ic2VsZWN0ZWQiPlx1MjcxMzwvc3Bhbj4ke2N9YH1jb25zdCB6cHQ9bmV3IE1h''@;'; put 'put ''cChbWyJsZWZ0Iiwic3RhcnQiXSxbInJpZ2h0IiwiZW5kIl1dKTtmdW5jdGlvbiBacHQoYyl7cmV0dXJue2tleToiYm9yZGVyczp0b3AiLG5hbWUoKXtsZXQgbD10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UocVEpO3JldHVybiBJNSh0aGlzLCJ0b3AiKSYmKGw9c0IobCkpLGx9LGNhbGxiYWNr''@;'; put 'put ''KGwsYSl7Y29uc3QgZD1JNSh0aGlzLCJ0b3AiKTtjLnByZXBhcmVCb3JkZXIoYSwidG9wIixkKX19fWZ1bmN0aW9uIFdwdChjKXtjb25zdCBsPWMuaG90LmlzUnRsKCk/InN0YXJ0IjoiZW5kIjtyZXR1cm57a2V5OiJib3JkZXJzOnJpZ2h0IixuYW1lKCl7bGV0IGE9dGhpcy5nZXRUcmFuc2xh''@;'; put 'put ''dGVkUGhyYXNlKEpRKTtyZXR1cm4gSTUodGhpcyxsKSYmKGE9c0IoYSkpLGF9LGNhbGxiYWNrKGEsZCl7Y29uc3QgaD1JNSh0aGlzLGwpO2MucHJlcGFyZUJvcmRlcihkLGwsaCl9fX1mdW5jdGlvbiBZcHQoYyl7cmV0dXJue2tleToiYm9yZGVyczpib3R0b20iLG5hbWUoKXtsZXQgbD10aGlz''@;'; put 'put ''LmdldFRyYW5zbGF0ZWRQaHJhc2UoUVEpO3JldHVybiBJNSh0aGlzLCJib3R0b20iKSYmKGw9c0IobCkpLGx9LGNhbGxiYWNrKGwsYSl7Y29uc3QgZD1JNSh0aGlzLCJib3R0b20iKTtjLnByZXBhcmVCb3JkZXIoYSwiYm90dG9tIixkKX19fWZ1bmN0aW9uIEdwdChjKXtjb25zdCBsPWMuaG90''@;'; put 'put ''LmlzUnRsKCk/ImVuZCI6InN0YXJ0IjtyZXR1cm57a2V5OiJib3JkZXJzOmxlZnQiLG5hbWUoKXtsZXQgYT10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoZWVlKTtyZXR1cm4gSTUodGhpcyxsKSYmKGE9c0IoYSkpLGF9LGNhbGxiYWNrKGEsZCl7Y29uc3QgaD1JNSh0aGlzLGwpO2MucHJlcGFy''@;'; put 'put ''ZUJvcmRlcihkLGwsaCl9fX1mdW5jdGlvbiAkcHQoYyl7cmV0dXJue2tleToiYm9yZGVyczpub19ib3JkZXJzIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSh0ZWUpfSxjYWxsYmFjayhsLGEpe2MucHJlcGFyZUJvcmRlcihhLCJub0JvcmRlcnMiKX0sZGlzYWJsZWQo''@;'; put 'put ''KXtyZXR1cm4hSTUodGhpcyl9fX1mdW5jdGlvbiBXbmUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0''@;'; put 'put ''aGlzIG9iamVjdCIpfWNvbnN0IGxCPSJjdXN0b21Cb3JkZXJzIixwN2U9WyJkYXNoZWQiLCJkb3R0ZWQiLCJzb2xpZCJdO3ZhciBjQj1uZXcgV2Vha1NldDtjbGFzcyB0NHQgZXh0ZW5kcyBNc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gS3B0KGMsbCl7KGZ1''@;'; put 'put ''bmN0aW9uIFhwdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLGNCKSxmdW5jdGlvbiBxcHQoYyxsLGEpe3JldHVy''@;'; put 'put ''bihsPWZ1bmN0aW9uIEpwdChjKXt2YXIgbD1mdW5jdGlvbiBRcHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10''@;'; put 'put ''eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwr''@;'; put 'put ''IiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJzYXZlZEJvcmRlcnMiLFtdKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gbEJ9c3RhdGlj''@;'; put 'put ''IGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gOTB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2xCXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsbD0+V25lKGNC''@;'; put 'put ''LHRoaXMscjR0KS5jYWxsKHRoaXMsbCkpLHRoaXMuYWRkSG9vaygiaW5pdCIsKCk9PlduZShjQix0aGlzLGk0dCkuY2FsbCh0aGlzKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmhpZGVCb3JkZXJzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBs''@;'; put 'put ''dWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5jaGFuZ2VCb3JkZXJTZXR0aW5ncygpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfXNldEJvcmRlcnMobCxhKXtsZXQgZD1bInRvcCIsImJvdHRvbSIsInN0YXJ0IiwiZW5kIl0saD1udWxsO2EmJih0aGlz''@;'; put 'put ''LmNoZWNrU2V0dGluZ3NDb2hlc2lvbihbYV0pLGQ9T2JqZWN0LmtleXMoYSksaD1VbmUoYSkpO2NvbnN0IHY9bWsodEMobCkse2NyZWF0ZUNlbGxDb29yZHM6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMuYmluZCh0aGlzLmhvdCksY3JlYXRlQ2VsbFJhbmdlOnRoaXMuaG90Ll9jcmVhdGVD''@;'; put 'put ''ZWxsUmFuZ2UuYmluZCh0aGlzLmhvdCl9KTtLbihsLE09Pnt2KE0pLmZvckFsbCgoRCxVKT0+e0tuKGQsdGU9Pnt0aGlzLnByZXBhcmVCb3JkZXJGcm9tQ3VzdG9tQWRkZWQoRCxVLGgsZnVuY3Rpb24gVXB0KGMpe3ZhciBsO3JldHVybiBudWxsIT09KGw9enB0LmdldChjKSkmJnZvaWQgMCE9''@;'; put 'put ''PWw/bDpjfSh0ZSkpfSl9KX0pLHRoaXMuaG90LnZpZXcucmVuZGVyKCl9Z2V0Qm9yZGVycyhsKXtpZighQXJyYXkuaXNBcnJheShsKSlyZXR1cm4gdGhpcy5zYXZlZEJvcmRlcnM7Y29uc3QgZD1tayh0QyhsKSx7Y3JlYXRlQ2VsbENvb3Jkczp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcy5i''@;'; put 'put ''aW5kKHRoaXMuaG90KSxjcmVhdGVDZWxsUmFuZ2U6dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZS5iaW5kKHRoaXMuaG90KX0pLGg9W107cmV0dXJuIEtuKGwsZj0+e2QoZikuZm9yQWxsKCh2LE0pPT57S24odGhpcy5zYXZlZEJvcmRlcnMsRD0+e0Qucm93PT09diYmRC5jb2w9PT1NJiZoLnB1''@;'; put 'put ''c2goZUQoRCkpfSl9KX0pLGh9Y2xlYXJCb3JkZXJzKGwpe2w/dGhpcy5zZXRCb3JkZXJzKGwpOihLbih0aGlzLnNhdmVkQm9yZGVycyxhPT57dGhpcy5jbGVhckJvcmRlcnNGcm9tU2VsZWN0aW9uU2V0dGluZ3MoYS5pZCksdGhpcy5jbGVhck51bGxDZWxsUmFuZ2UoKSx0aGlzLmhvdC5yZW1v''@;'; put 'put ''dmVDZWxsTWV0YShhLnJvdyxhLmNvbCwiYm9yZGVycyIpfSksdGhpcy5zYXZlZEJvcmRlcnMubGVuZ3RoPTApfWluc2VydEJvcmRlckludG9TZXR0aW5ncyhsLGEpe3RoaXMuY2hlY2tTYXZlZEJvcmRlcnMobCl8fHRoaXMuc2F2ZWRCb3JkZXJzLnB1c2gobCk7Y29uc3QgaD10aGlzLmhvdC5f''@;'; put 'put ''Y3JlYXRlQ2VsbFJhbmdlKHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwucm93LGwuY29sKSk7dGhpcy5jaGVja0N1c3RvbVNlbGVjdGlvbnMobCxoLGEpfHx0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmFkZEN1c3RvbVNlbGVjdGlvbih7Ym9yZGVyOmwsdmlzdWFsQ2VsbFJhbmdl''@;'; put 'put ''Omh9KX1wcmVwYXJlQm9yZGVyRnJvbUN1c3RvbUFkZGVkKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5ob3QuY291bnRSb3dzKCksdj10aGlzLmhvdC5jb3VudENvbHMoKTtpZihsPj1mfHxhPj12KXJldHVybjtsZXQgTT1abmUobCxhKTtkJiYoTT1mdW5jdGlvbiBWcHQoYyxsKXtyZXR1cm4gbnUo''@;'; put 'put ''bCwiYm9yZGVyIikmJmwuYm9yZGVyJiYoYy5ib3JkZXI9bC5ib3JkZXIpLG51KGwsInRvcCIpJiZNYShsLnRvcCkmJihsLnRvcD8obW8obC50b3ApfHwobC50b3A9e3dpZHRoOjEsY29sb3I6IiMwMDAifSksYy50b3A9bC50b3ApOihsLnRvcD17aGlkZTohMH0sYy50b3A9bC50b3ApKSxudShs''@;'; put 'put ''LCJib3R0b20iKSYmTWEobC5ib3R0b20pJiYobC5ib3R0b20/KG1vKGwuYm90dG9tKXx8KGwuYm90dG9tPXt3aWR0aDoxLGNvbG9yOiIjMDAwIn0pLGMuYm90dG9tPWwuYm90dG9tKToobC5ib3R0b209e2hpZGU6ITB9LGMuYm90dG9tPWwuYm90dG9tKSksbnUobCwic3RhcnQiKSYmTWEobC5z''@;'; put 'put ''dGFydCkmJihsLnN0YXJ0PyhtbyhsLnN0YXJ0KXx8KGwuc3RhcnQ9e3dpZHRoOjEsY29sb3I6IiMwMDAifSksYy5zdGFydD1sLnN0YXJ0KToobC5zdGFydD17aGlkZTohMH0sYy5zdGFydD1sLnN0YXJ0KSksbnUobCwiZW5kIikmJk1hKGwuZW5kKSYmKGwuZW5kPyhtbyhsLmVuZCl8fChsLmVu''@;'; put 'put ''ZD17d2lkdGg6MSxjb2xvcjoiIzAwMCJ9KSxjLmVuZD1sLmVuZCk6KGwuZW5kPXtoaWRlOiEwfSxjLmVuZD1sLmVuZCkpLGN9KE0sZCksS24odGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLEQ9PntpZihNLmlkPT09RC5zZXR0aW5ncy5pZClyZXR1cm4gT2Jq''@;'; put 'put ''ZWN0LmFzc2lnbihELnNldHRpbmdzLGQpLE0uaWQ9RC5zZXR0aW5ncy5pZCxNLnRvcD1ELnNldHRpbmdzLnRvcCxNLmJvdHRvbT1ELnNldHRpbmdzLmJvdHRvbSxNLnN0YXJ0PUQuc2V0dGluZ3Muc3RhcnQsTS5lbmQ9RC5zZXR0aW5ncy5lbmQsITF9KSksdGhpcy5ob3Quc2V0Q2VsbE1ldGEo''@;'; put 'put ''bCxhLCJib3JkZXJzIixlRChNKSksdGhpcy5pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MoTSxoKX1wcmVwYXJlQm9yZGVyRnJvbUN1c3RvbUFkZGVkUmFuZ2UobCxhKXtjb25zdCBkPU1hdGgubWluKGwudG8ucm93LHRoaXMuaG90LmNvdW50Um93cygpLTEpLGg9TWF0aC5taW4obC50by5jb2ws''@;'; put 'put ''dGhpcy5ob3QuY291bnRDb2xzKCktMSk7UWEobC5mcm9tLnJvdyxkLGY9PntRYShsLmZyb20uY29sLGgsdj0+e2NvbnN0IE09Wm5lKGYsdik7bGV0IEQ9MDtmPT09bC5mcm9tLnJvdyYmbnUoYSwidG9wIikmJihEKz0xLE0udG9wPWEudG9wKSxmPT09bC50by5yb3cmJm51KGEsImJvdHRvbSIp''@;'; put 'put ''JiYoRCs9MSxNLmJvdHRvbT1hLmJvdHRvbSksdj09PWwuZnJvbS5jb2wmJm51KGEsInN0YXJ0IikmJihEKz0xLE0uc3RhcnQ9YS5zdGFydCksdj09PWwudG8uY29sJiZudShhLCJlbmQiKSYmKEQrPTEsTS5lbmQ9YS5lbmQpLEQ+MCYmKHRoaXMuaG90LnNldENlbGxNZXRhKGYsdiwiYm9yZGVy''@;'; put 'put ''cyIsZUQoTSkpLHRoaXMuaW5zZXJ0Qm9yZGVySW50b1NldHRpbmdzKE0pKX0pfSl9cmVtb3ZlQWxsQm9yZGVycyhsLGEpe2NvbnN0IGQ9ZjdlKGwsYSk7dGhpcy5zcGxpY2VCb3JkZXIoZCksdGhpcy5jbGVhckJvcmRlcnNGcm9tU2VsZWN0aW9uU2V0dGluZ3MoZCksdGhpcy5jbGVhck51bGxD''@;'; put 'put ''ZWxsUmFuZ2UoKSx0aGlzLmhvdC5yZW1vdmVDZWxsTWV0YShsLGEsImJvcmRlcnMiKX1zZXRCb3JkZXIobCxhLGQsaCl7bGV0IGY9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEobCxhKS5ib3JkZXJzO2Y9ZiYmdm9pZCAwIT09Zi5ib3JkZXI/VW5lKGYpOlpuZShsLGEpLGg/KGZbZF09e2hpZGU6ITB9''@;'; put 'put ''LDQ9PT10aGlzLmNvdW50SGlkZShmKT90aGlzLnJlbW92ZUFsbEJvcmRlcnMobCxhKToodGhpcy5jaGVja0N1c3RvbVNlbGVjdGlvbnNGcm9tQ29udGV4dE1lbnUoZixkLGgpfHx0aGlzLmluc2VydEJvcmRlckludG9TZXR0aW5ncyhmKSx0aGlzLmhvdC5zZXRDZWxsTWV0YShsLGEsImJvcmRl''@;'; put 'put ''cnMiLGVEKGYpKSkpOihmW2RdPXt3aWR0aDoxLGNvbG9yOiIjMDAwIn0sdGhpcy5jaGVja0N1c3RvbVNlbGVjdGlvbnNGcm9tQ29udGV4dE1lbnUoZixkLGgpfHx0aGlzLmluc2VydEJvcmRlckludG9TZXR0aW5ncyhmKSx0aGlzLmhvdC5zZXRDZWxsTWV0YShsLGEsImJvcmRlcnMiLGVEKGYp''@;'; put 'put ''KSl9cHJlcGFyZUJvcmRlcihsLGEsZCl7S24obCxoPT57bGV0e3N0YXJ0OmYsZW5kOnZ9PWg7aWYoZi5yb3c9PT12LnJvdyYmZi5jb2w9PT12LmNvbCkibm9Cb3JkZXJzIj09PWE/dGhpcy5yZW1vdmVBbGxCb3JkZXJzKGYucm93LGYuY29sKTp0aGlzLnNldEJvcmRlcihmLnJvdyxmLmNvbCxh''@;'; put 'put ''LGQpO2Vsc2Ugc3dpdGNoKGEpe2Nhc2Uibm9Cb3JkZXJzIjpRYShmLmNvbCx2LmNvbCxNPT57UWEoZi5yb3csdi5yb3csRD0+e3RoaXMucmVtb3ZlQWxsQm9yZGVycyhELE0pfSl9KTticmVhaztjYXNlInRvcCI6UWEoZi5jb2wsdi5jb2wsTT0+e3RoaXMuc2V0Qm9yZGVyKGYucm93LE0sYSxk''@;'; put 'put ''KX0pO2JyZWFrO2Nhc2UiYm90dG9tIjpRYShmLmNvbCx2LmNvbCxNPT57dGhpcy5zZXRCb3JkZXIodi5yb3csTSxhLGQpfSk7YnJlYWs7Y2FzZSJzdGFydCI6UWEoZi5yb3csdi5yb3csTT0+e3RoaXMuc2V0Qm9yZGVyKE0sZi5jb2wsYSxkKX0pO2JyZWFrO2Nhc2UiZW5kIjpRYShmLnJvdyx2''@;'; put 'put ''LnJvdyxNPT57dGhpcy5zZXRCb3JkZXIoTSx2LmNvbCxhLGQpfSl9fSl9Y3JlYXRlQ3VzdG9tQm9yZGVycyhsKXtLbihsLGE9Pntjb25zdCBkPVVuZShhKTthLnJhbmdlP3RoaXMucHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZFJhbmdlKGEucmFuZ2UsZCk6dGhpcy5wcmVwYXJlQm9yZGVy''@;'; put 'put ''RnJvbUN1c3RvbUFkZGVkKGEucm93LGEuY29sLGQpfSl9Y291bnRIaWRlKGwpe2NvbnN0e3RvcDphLGJvdHRvbTpkLHN0YXJ0OmgsZW5kOmZ9PWw7cmV0dXJuIGEwKFthLGQsaCxmXSwoTSxEKT0+e2xldCBVPU07cmV0dXJuIEQmJkQuaGlkZSYmKFUrPTEpLFV9LDApfWNsZWFyQm9yZGVyc0Zy''@;'; put 'put ''b21TZWxlY3Rpb25TZXR0aW5ncyhsKXtjb25zdCBhPVpzKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucyxkPT5kLnNldHRpbmdzLmlkKS5pbmRleE9mKGwpO2E+LTEmJnRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9uc1thXS5j''@;'; put 'put ''bGVhcigpfWNsZWFyTnVsbENlbGxSYW5nZSgpe0tuKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucywobCxhKT0+e2lmKG51bGw9PT1sLmNlbGxSYW5nZSlyZXR1cm4gdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zW2FdLmRl''@;'; put 'put ''c3Ryb3koKSx0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnMuc3BsaWNlKGEsMSksITF9KX1oaWRlQm9yZGVycygpe0tuKHRoaXMuc2F2ZWRCb3JkZXJzLGw9Pnt0aGlzLmNsZWFyQm9yZGVyc0Zyb21TZWxlY3Rpb25TZXR0aW5ncyhsLmlkKSx0aGlzLmNsZWFy''@;'; put 'put ''TnVsbENlbGxSYW5nZSgpfSl9c3BsaWNlQm9yZGVyKGwpe2NvbnN0IGE9WnModGhpcy5zYXZlZEJvcmRlcnMsZD0+ZC5pZCkuaW5kZXhPZihsKTthPi0xJiZ0aGlzLnNhdmVkQm9yZGVycy5zcGxpY2UoYSwxKX1jaGVja1NhdmVkQm9yZGVycyhsKXtsZXQgYT0hMTtyZXR1cm4gND09PXRoaXMu''@;'; put 'put ''Y291bnRIaWRlKGwpPyh0aGlzLnNwbGljZUJvcmRlcihsLmlkKSxhPSEwKTpLbih0aGlzLnNhdmVkQm9yZGVycywoaCxmKT0+e2lmKGwuaWQ9PT1oLmlkKXJldHVybiB0aGlzLnNhdmVkQm9yZGVyc1tmXT1sLGE9ITAsITF9KSxhfWNoZWNrQ3VzdG9tU2VsZWN0aW9uc0Zyb21Db250ZXh0TWVu''@;'; put 'put ''dShsLGEsZCl7bGV0IGg9ITE7cmV0dXJuIEtuKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucyxmPT57aWYobC5pZD09PWYuc2V0dGluZ3MuaWQpcmV0dXJuIEtuKHRoaXMuaG90LnZpZXcuX3d0LnNlbGVjdGlvbk1hbmFnZXIuZ2V0Qm9yZGVySW5zdGFuY2Vz''@;'; put 'put ''KGYpLE09PntNLnRvZ2dsZUhpZGRlbkNsYXNzKGEsZCl9KSxoPSEwLCExfSksaH1jaGVja0N1c3RvbVNlbGVjdGlvbnMobCxhLGQpe2NvbnN0IGg9dGhpcy5jb3VudEhpZGUobCk7bGV0IGY9ITE7cmV0dXJuIDQ9PT1oPyh0aGlzLnJlbW92ZUFsbEJvcmRlcnMobC5yb3csbC5jb2wpLGY9ITAp''@;'; put 'put ''OktuKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucyx2PT57aWYobC5pZD09PXYuc2V0dGluZ3MuaWQpcmV0dXJuIHYudmlzdWFsQ2VsbFJhbmdlPWEsdi5jb21taXQoKSxkJiZLbih0aGlzLmhvdC52aWV3Ll93dC5zZWxlY3Rpb25NYW5hZ2VyLmdldEJvcmRl''@;'; put 'put ''ckluc3RhbmNlcyh2KSxEPT57RC5jaGFuZ2VCb3JkZXJTdHlsZShkLGwpfSksZj0hMCwhMX0pLGZ9Y2hhbmdlQm9yZGVyU2V0dGluZ3MoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbbEJdO2lmKEFycmF5LmlzQXJyYXkobCkpe2NvbnN0IGE9QjEobCk7dGhpcy5jaGVja1NldHRp''@;'; put 'put ''bmdzQ29oZXNpb24oYSksYS5sZW5ndGh8fCh0aGlzLnNhdmVkQm9yZGVycz1hKSx0aGlzLmNyZWF0ZUN1c3RvbUJvcmRlcnMoYSl9ZWxzZSB2b2lkIDAhPT1sJiZ0aGlzLmNyZWF0ZUN1c3RvbUJvcmRlcnModGhpcy5zYXZlZEJvcmRlcnMpfWNoZWNrU2V0dGluZ3NDb2hlc2lvbihsKXtjb25z''@;'; put 'put ''dCBhPWZ1bmN0aW9uIEJwdChjKXtyZXR1cm4gYy5zb21lKGw9Pk1hKGwubGVmdCl8fE1hKGwucmlnaHQpKX0obCksZD1mdW5jdGlvbiBqcHQoYyl7cmV0dXJuIGMuc29tZShsPT5NYShsLnN0YXJ0KXx8TWEobC5lbmQpKX0obCk7aWYoYSYmZCl0aHJvdyBuZXcgRXJyb3IoJ1RoZSAibGVmdCIv''@;'; put 'put ''InJpZ2h0IiBhbmQgInN0YXJ0Ii8iZW5kIiBvcHRpb25zIHNob3VsZCBub3QgYmUgdXNlZCB0b2dldGhlci4gUGxlYXNlIHVzZSBvbmx5IHRoZSBvcHRpb24gInN0YXJ0Ii8iZW5kIi4nKTtpZih0aGlzLmhvdC5pc1J0bCgpJiZhKXRocm93IG5ldyBFcnJvcignVGhlICJsZWZ0Ii8icmlnaHQi''@;'; put 'put ''IHByb3BlcnRpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIFJUTC4gUGxlYXNlIHVzZSBvcHRpb24gInN0YXJ0Ii8iZW5kIi4nKTtXbmUoY0IsdGhpcyxuNHQpLmNhbGwodGhpcyxsKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBuNHQoYyl7Yy5mb3JFYWNoKGw9PntPYmpl''@;'; put 'put ''Y3Qua2V5cyhsKS5mb3JFYWNoKGE9Pntjb25zdCBkPWxbYV0uc3R5bGU7TWEoZCkmJiFwN2UuaW5jbHVkZXMoZCk/KG9zKGBUaGUgIiR7ZH0iIGJvcmRlciBzdHlsZSBpcyBub3Qgc3VwcG9ydGVkLiBQbGVhc2UgdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHN0eWxlczogJHtwN2Uuam9pbigi''@;'; put 'put ''LCAiKX0uXG5UaGUgYm9yZGVyIHN0eWxlIHdpbGwgYmUgaWdub3JlZC5gKSxkZWxldGUgbFthXS5zdHlsZSk6TWEoZCkmJiJzb2xpZCI9PT1kJiZkZWxldGUgbFthXS5zdHlsZX0pfSl9ZnVuY3Rpb24gcjR0KGMpe3RoaXMuaG90LmdldFNldHRpbmdzKClbbEJdJiZjLml0ZW1zLnB1c2goe25h''@;'; put 'put ''bWU6Ii0tLS0tLS0tLSJ9LHtrZXk6ImJvcmRlcnMiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFhRKX0sZGlzYWJsZWQoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO3JldHVybiEobCYmIWwuaXNTaW5nbGVIZWFkZXIoKSl8fHRoaXMuc2Vs''@;'; put 'put ''ZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfSxzdWJtZW51OntpdGVtczpbWnB0KHRoaXMpLFdwdCh0aGlzKSxZcHQodGhpcyksR3B0KHRoaXMpLCRwdCh0aGlzKV19fSl9ZnVuY3Rpb24gaTR0KCl7dGhpcy5jaGFuZ2VCb3JkZXJTZXR0aW5ncygpfWZ1bmN0aW9uIFluZShjLGwsYSl7cmV0''@;'; put 'put ''dXJuKGw9ZnVuY3Rpb24gczR0KGMpe3ZhciBsPWZ1bmN0aW9uIGw0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIh''@;'; put 'put ''PXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6''@;'; put 'put ''bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gZzdlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1''@;'; put 'put ''cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBtN2U9ImRyYWdUb1Njcm9sbCI7dmFyIEduZT1uZXcgV2Vha1NldDtjbGFzcyB1NHQgZXh0ZW5kcyBNc3tjb25z''@;'; put 'put ''dHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gYTR0KGMsbCl7KGZ1bmN0aW9uIG80dChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9''@;'; put 'put ''KShjLGwpLGwuYWRkKGMpfSh0aGlzLEduZSksWW5lKHRoaXMsImJvdW5kYXJpZXMiLG51bGwpLFluZSh0aGlzLCJjYWxsYmFjayIsbnVsbCksWW5lKHRoaXMsImxpc3RlbmluZyIsITEpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBtN2V9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJ''@;'; put 'put ''VFkoKXtyZXR1cm4gMTAwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVttN2VdfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLGw9Pmc3ZShHbmUsdGhpcyx2N2UpLmNhbGwodGhpcyxsKSks''@;'; put 'put ''dGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbENvcm5lck1vdXNlRG93biIsbD0+ZzdlKEduZSx0aGlzLHY3ZSkuY2FsbCh0aGlzLGwpKSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5h''@;'; put 'put ''YmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMudW5yZWdpc3RlckV2ZW50cygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1zZXRCb3VuZGFyaWVzKCl7dGhpcy5ib3VuZGFyaWVzPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRz''@;'; put 'put ''WzBdP2FyZ3VtZW50c1swXTp7bGVmdDowLHJpZ2h0OnRoaXMuaG90LnJvb3RXaW5kb3cuaW5uZXJXaWR0aCx0b3A6MCxib3R0b206dGhpcy5ob3Qucm9vdFdpbmRvdy5pbm5lckhlaWdodH19c2V0Q2FsbGJhY2sobCl7dGhpcy5jYWxsYmFjaz1sfWNoZWNrKGwsYSl7bGV0IGQ9MCxoPTA7YTx0''@;'; put 'put ''aGlzLmJvdW5kYXJpZXMudG9wP2g9YS10aGlzLmJvdW5kYXJpZXMudG9wOmE+dGhpcy5ib3VuZGFyaWVzLmJvdHRvbSYmKGg9YS10aGlzLmJvdW5kYXJpZXMuYm90dG9tKSxsPHRoaXMuYm91bmRhcmllcy5sZWZ0P2Q9bC10aGlzLmJvdW5kYXJpZXMubGVmdDpsPnRoaXMuYm91bmRhcmllcy5y''@;'; put 'put ''aWdodCYmKGQ9bC10aGlzLmJvdW5kYXJpZXMucmlnaHQpLHRoaXMuY2FsbGJhY2soZCxoKX1saXN0ZW4oKXt0aGlzLmxpc3RlbmluZz0hMH11bmxpc3Rlbigpe3RoaXMubGlzdGVuaW5nPSExfWlzTGlzdGVuaW5nKCl7cmV0dXJuIHRoaXMubGlzdGVuaW5nfXJlZ2lzdGVyRXZlbnRzKCl7Y29u''@;'; put 'put ''c3R7cm9vdFdpbmRvdzpsfT10aGlzLmhvdDtsZXQgYT1sO2Zvcig7YTspdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLmRvY3VtZW50LCJjb250ZXh0bWVudSIsKCk9PnRoaXMudW5saXN0ZW4oKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLmRvY3Vt''@;'; put 'put ''ZW50LCJtb3VzZXVwIiwoKT0+dGhpcy51bmxpc3RlbigpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEuZG9jdW1lbnQsIm1vdXNlbW92ZSIsZD0+dGhpcy5vbk1vdXNlTW92ZShkKSksYT1nNShhKX11bnJlZ2lzdGVyRXZlbnRzKCl7dGhpcy5ldmVudE1hbmFnZXIuY2xl''@;'; put 'put ''YXIoKX1vbk1vdXNlTW92ZShsKXt0aGlzLmlzTGlzdGVuaW5nKCkmJnRoaXMuY2hlY2sobC5jbGllbnRYLGwuY2xpZW50WSl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gdjdlKGMpe2lmKEk2KGMpKXJldHVybjtjb25zdCBsPXRoaXMuaG90LnZpZXcuX3d0Lnd0T3Zlcmxh''@;'; put 'put ''eXMudG9wT3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudDt0aGlzLnNldEJvdW5kYXJpZXMobCE9PXRoaXMuaG90LnJvb3RXaW5kb3c/bC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTp2b2lkIDApLHRoaXMuc2V0Q2FsbGJhY2soKGEsZCk9Pnt2YXIgaCxmO2NvbnN0IHY9bnVsbCE9''@;'; put 'put ''PShoPWwuc2Nyb2xsTGVmdCkmJnZvaWQgMCE9PWg/aDpsLnNjcm9sbFgsTT1udWxsIT09KGY9bC5zY3JvbGxUb3ApJiZ2b2lkIDAhPT1mP2Y6bC5zY3JvbGxZO2wuc2Nyb2xsKHYrNTAqTWF0aC5zaWduKGEpLE0rMjAqTWF0aC5zaWduKGQpKX0pLHRoaXMubGlzdGVuKCl9ZnVuY3Rpb24geTdl''@;'; put 'put ''KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiAkbmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGY0dChjKXt2YXIgbD1mdW5jdGlvbiBw''@;'; put 'put ''NHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9y''@;'; put 'put ''KCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMs''@;'; put 'put ''bCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIGI3ZShjLGwsYSl7cmV0dXJuIGMuc2V0KEtmKGMsbCksYSksYX1mdW5jdGlvbiBLZihjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMo''@;'; put 'put ''bCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9QWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMiKSxB''@;'; put 'put ''YS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlRHJvcGRvd25NZW51U2hvdyIpLEFhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckRyb3Bkb3duTWVudVNob3ciKSxBYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJEcm9wZG93bk1lbnVIaWRlIiksQWEuZ2V0U2lu''@;'; put 'put ''Z2xldG9uKCkucmVnaXN0ZXIoImFmdGVyRHJvcGRvd25NZW51RXhlY3V0ZSIpO2NvbnN0IHVCPSJkcm9wZG93bk1lbnUiLHREPSJjaGFuZ2VUeXBlIixLbmU9dUI7dmFyIGRCPW5ldyBXZWFrTWFwLHNwPW5ldyBXZWFrU2V0O2NsYXNzIGhCIGV4dGVuZHMgTXN7c3RhdGljIGdldCBQTFVHSU5f''@;'; put 'put ''S0VZKCl7cmV0dXJuIHVCfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDIzMH1zdGF0aWMgZ2V0IFBMVUdJTl9ERVBTKCl7cmV0dXJuWyJwbHVnaW46QXV0b0NvbHVtblNpemUiXX1zdGF0aWMgZ2V0IERFRkFVTFRfSVRFTVMoKXtyZXR1cm5bamssemsseXMsWmsseXMsWVYs''@;'; put 'put ''eXMsVWsseXMsJGZdfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLGZ1bmN0aW9uIGQ0dChjLGwpe3k3ZShjLGwpLGwuYWRkKGMpfSh0aGlzLHNwKSwkbmUodGhpcywiY29tbWFuZEV4ZWN1dG9yIixuZXcgVzhlKHRoaXMuaG90KSksJG5lKHRoaXMsIml0ZW1zRmFjdG9yeSIsbnVsbCksJG5lKHRo''@;'; put 'put ''aXMsIm1lbnUiLG51bGwpLGZ1bmN0aW9uIGg0dChjLGwsYSl7eTdlKGMsbCksbC5zZXQoYyxhKX0odGhpcyxkQiwhMSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIiLChhLGQpPT5LZihzcCx0aGlzLHk0dCkuY2FsbCh0aGlzLGEsZCkpfWlzRW5hYmxlZCgpe3JldHVybiB0''@;'; put 'put ''aGlzLmhvdC5nZXRTZXR0aW5ncygpW3VCXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47dGhpcy5pdGVtc0ZhY3Rvcnk9bmV3IEs4ZSh0aGlzLmhvdCxoQi5ERUZBVUxUX0lURU1TKSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIs''@;'; put 'put ''ZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gS2Yoc3AsbCxNNHQpLmNhbGwobCwuLi5mKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlVmlld3BvcnRTY3JvbGxIb3Jpem9udGFsbHki''@;'; put 'put ''LGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIEtmKHNwLGwsUzR0KS5jYWxsKGwsLi4uZil9KSx0aGlzLmFkZEhvb2soImJlZm9yZURpYWxvZ1Nob3ciLCgpPT50aGlzLmNsb3Nl''@;'; put 'put ''KCkpO2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt1Ql0sZD17aXRlbXM6dGhpcy5pdGVtc0ZhY3RvcnkuZ2V0SXRlbXMoYSl9O3RoaXMucmVnaXN0ZXJFdmVudHMoKSwiZnVuY3Rpb24iPT10eXBlb2YgYS5jYWxsYmFjayYmdGhpcy5jb21tYW5kRXhlY3V0b3Iuc2V0Q29tbW9uQ2Fs''@;'; put 'put ''bGJhY2soYS5jYWxsYmFjayksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpLHRoaXMuY2FsbE9uUGx1Z2luc1JlYWR5KCgpPT57dGhpcy5ob3QucnVuSG9va3MoImFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMiLGQpLHRoaXMuaXRlbXNGYWN0b3J5''@;'; put 'put ''LnNldFByZWRlZmluZWRJdGVtcyhkLml0ZW1zKTtjb25zdCBoPXRoaXMuaXRlbXNGYWN0b3J5LmdldEl0ZW1zKGEpO3RoaXMubWVudSYmdGhpcy5tZW51LmRlc3Ryb3koKSx0aGlzLm1lbnU9bmV3IERDKHRoaXMuaG90LHtjbGFzc05hbWU6Imh0RHJvcGRvd25NZW51IixrZWVwSW5WaWV3cG9y''@;'; put 'put ''dDohMCxjb250YWluZXI6YS51aUNvbnRhaW5lcnx8dGhpcy5ob3Qucm9vdFBvcnRhbEVsZW1lbnR9KSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlRHJvcGRvd25NZW51U2V0SXRlbXMiLGgpLHRoaXMubWVudS5zZXRNZW51SXRlbXMoaCksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYmVmb3Jl''@;'; put 'put ''T3BlbiIsKCk9PktmKHNwLHRoaXMsYjR0KS5jYWxsKHRoaXMpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJhZnRlck9wZW4iLCgpPT5LZihzcCx0aGlzLF80dCkuY2FsbCh0aGlzKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYWZ0ZXJTdWJtZW51T3BlbiIsZj0+S2Yoc3AsdGhpcyx3NHQp''@;'; put 'put ''LmNhbGwodGhpcyxmKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsKCk9PktmKHNwLHRoaXMsQzR0KS5jYWxsKHRoaXMpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJleGVjdXRlQ29tbWFuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCx2PW5l''@;'; put 'put ''dyBBcnJheShmKSxNPTA7TTxmO00rKyl2W01dPWFyZ3VtZW50c1tNXTtyZXR1cm4gbC5leGVjdXRlQ29tbWFuZC5jYWxsKGwsLi4udil9KSxLbihoLGY9PnRoaXMuY29tbWFuZEV4ZWN1dG9yLnJlZ2lzdGVyQ29tbWFuZChmLmtleSxmKSl9KX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQ''@;'; put 'put ''bHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmNsb3NlKCksdGhpcy5tZW51JiZ0aGlzLm1lbnUuZGVzdHJveSgpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3Rl''@;'; put 'put ''clNob3J0Y3V0cygpe2NvbnN0IGE9KCk9Pntjb25zdHtoaWdobGlnaHQ6ZH09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKChkLmlzSGVhZGVyKCkmJi0xPT09ZC5yb3d8fGQuaXNDZWxsKCkpJiZkLmNvbD49MCl7dGhpcy5ob3Quc2VsZWN0Q29sdW1ucyhkLmNvbCxkLmNv''@;'; put 'put ''bCwtMSk7Y29uc3R7ZnJvbTpofT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksZj1WVih0aGlzLm1lbnUuY29udGFpbmVyLHRoaXMuaG90LnJvb3REb2N1bWVudCksdj10aGlzLmhvdC5nZXRDZWxsKC0xLGguY29sLCEwKS5xdWVyeVNlbGVjdG9yKGAuJHt0RH1gKSxNPXYuZ2V0''@;'; put 'put ''Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5vcGVuKHtsZWZ0Ok0ubGVmdCtmLmxlZnQsdG9wOk0udG9wK3Yub2Zmc2V0SGVpZ2h0K2YudG9wfSx7bGVmdDpNLndpZHRoLHJpZ2h0OjAsYWJvdmU6MCxiZWxvdzozfSksdGhpcy5tZW51LmdldE5hdmlnYXRvcigpLnRvRmlyc3RJdGVtKCl9fTt0''@;'; put 'put ''aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJTaGlmdCIsIkFsdCIsIkFycm93RG93biJdLFsiQ29udHJvbC9NZXRhIiwiRW50ZXIiXV0sY2FsbGJhY2s6YSxydW5Pbmx5SWY6KCk9Pnt2YXIgZDtjb25zdCBoPW51''@;'; put 'put ''bGw9PT0oZD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmhpZ2hsaWdodDtyZXR1cm4gaCYmdGhpcy5ob3Quc2VsZWN0aW9uLmlzQ2VsbFZpc2libGUoaCkmJmguaXNIZWFkZXIoKSYmIXRoaXMubWVudS5pc09wZW5lZCgpfSxjYXB0dXJl''@;'; put 'put ''Q3RybDohMCxncm91cDpLbmV9LHtrZXlzOltbIlNoaWZ0IiwiQWx0IiwiQXJyb3dEb3duIl1dLGNhbGxiYWNrOmEscnVuT25seUlmOigpPT57dmFyIGQ7Y29uc3QgaD1udWxsPT09KGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5oaWdo''@;'; put 'put ''bGlnaHQ7cmV0dXJuIGgmJnRoaXMuaG90LnNlbGVjdGlvbi5pc0NlbGxWaXNpYmxlKGgpJiZoLmlzQ2VsbCgpJiYhdGhpcy5tZW51LmlzT3BlbmVkKCl9LGdyb3VwOktuZX1dKX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgi''@;'; put 'put ''Z3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoS25lKX1yZWdpc3RlckV2ZW50cygpe3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ob3Qucm9vdEVsZW1lbnQsImNsaWNrIixsPT5LZihzcCx0aGlzLHY0dCkuY2FsbCh0aGlzLGwpKX1vcGVuKGwpe3ZhciBhO2xl''@;'; put 'put ''dCBkPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7YWJvdmU6MCxiZWxvdzowLGxlZnQ6MCxyaWdodDowfTtudWxsIT09KGE9dGhpcy5tZW51KSYmdm9pZCAwIT09YSYmYS5pc09wZW5lZCgpfHwodGhpcy5tZW51Lm9wZW4oKSxhcyhkLCho''@;'; put 'put ''LGYpPT57dGhpcy5tZW51LnNldE9mZnNldChmLGgpfSksdGhpcy5tZW51LnNldFBvc2l0aW9uKGwpKX1jbG9zZSgpe3ZhciBsO251bGw9PT0obD10aGlzLm1lbnUpfHx2b2lkIDA9PT1sfHxsLmNsb3NlKCl9ZXhlY3V0ZUNvbW1hbmQobCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1u''@;'; put 'put ''ZXcgQXJyYXkoYT4xP2EtMTowKSxoPTE7aDxhO2grKylkW2gtMV09YXJndW1lbnRzW2hdO3RoaXMuY29tbWFuZEV4ZWN1dG9yLmV4ZWN1dGUobCwuLi5kKX1zZXRMaXN0ZW5pbmcoKXtsZXQgbD0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRz''@;'; put 'put ''WzBdO3RoaXMubWVudS5pc09wZW5lZCgpJiYobD90aGlzLm1lbnUuaG90TWVudS5saXN0ZW4oKTp0aGlzLm1lbnUuaG90TWVudS51bmxpc3RlbigpKX1kZXN0cm95KCl7dGhpcy5jbG9zZSgpLHRoaXMubWVudSYmdGhpcy5tZW51LmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9u''@;'; put 'put ''IF83ZShjKXtjLmdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpLmFkZEN1c3RvbVNob3J0Y3V0cyhbe2tleXM6W1siQ29udHJvbC9NZXRhIiwiQSJdXSxjYWxsYmFjazooKT0+ITF9XSl9ZnVuY3Rpb24gdjR0KGMpe2lmKENvKGMudGFyZ2V0LHREKSl7Y29uc3QgbD1WVih0aGlzLm1lbnUuY29u''@;'; put 'put ''dGFpbmVyLHRoaXMuaG90LnJvb3REb2N1bWVudCksYT1jLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjLnN0b3BQcm9wYWdhdGlvbigpLGI3ZShkQix0aGlzLCExKSx0aGlzLm9wZW4oe2xlZnQ6YS5sZWZ0K2wubGVmdCx0b3A6YS50b3ArYy50YXJnZXQub2Zmc2V0SGVpZ2h0K2wu''@;'; put 'put ''dG9wfSx7bGVmdDphLndpZHRoLHJpZ2h0OjAsYWJvdmU6MCxiZWxvdzozfSl9fWZ1bmN0aW9uIHk0dChjLGwpe2NvbnN0IGE9bC5wYXJlbnROb2RlO2lmKCFhKXJldHVybjtjb25zdCBkPWEucGFyZW50Tm9kZS5jaGlsZE5vZGVzLGg9QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChkLGEp''@;'; put 'put ''O2lmKGM8MHx8aCE9PWQubGVuZ3RoLTEpcmV0dXJuO2NvbnN0IGY9bC5xdWVyeVNlbGVjdG9yKGAuJHt0RH1gKTtpZih0aGlzLmVuYWJsZWQmJmYpcmV0dXJuO2lmKCF0aGlzLmVuYWJsZWQpcmV0dXJuIHZvaWQoZiYmZi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGYpKTtjb25zdCB2PXRoaXMu''@;'; put 'put ''aG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTt2LmNsYXNzTmFtZT10RCx2LnR5cGU9ImJ1dHRvbiIsdi50YWJJbmRleD0tMSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiYoWmEodixbWDkoKSx4MigiICIpXSksWmEobCxbWTRlKCJtZW51IildKSksdi5v''@;'; put 'put ''bmNsaWNrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuZmlyc3RDaGlsZC5pbnNlcnRCZWZvcmUodixsLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gYjR0KCl7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZURyb3Bkb3duTWVudVNob3ciLHRoaXMpfWZ1bmN0aW9uIF80dCgpe3RoaXMu''@;'; put 'put ''aG90LnJ1bkhvb2tzKCJhZnRlckRyb3Bkb3duTWVudVNob3ciLHRoaXMpLEtmKHNwLHRoaXMsXzdlKS5jYWxsKHRoaXMsdGhpcy5tZW51KX1mdW5jdGlvbiB3NHQoYyl7S2Yoc3AsdGhpcyxfN2UpLmNhbGwodGhpcyxjKX1mdW5jdGlvbiBDNHQoKXt0aGlzLmhvdC5saXN0ZW4oKSx0aGlzLmhv''@;'; put 'put ''dC5ydW5Ib29rcygiYWZ0ZXJEcm9wZG93bk1lbnVIaWRlIix0aGlzKX1mdW5jdGlvbiBTNHQoYyl7cmV0dXJuIGZ1bmN0aW9uIGc0dChjLGwpe3JldHVybiBjLmdldChLZihjLGwpKX0oZEIsdGhpcyk/bnVsbDpjfWZ1bmN0aW9uIE00dChjKXtDbyhjLnRhcmdldCx0RCkmJmI3ZShkQix0aGlz''@;'; put 'put ''LCEwKX1mdW5jdGlvbiB3N2UoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHg0dChjKXt2YXIgbD1mdW5jdGlvbiBFNHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwo''@;'; put 'put ''YyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIp''@;'; put 'put ''O3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWhCLlNFUEFSQVRPUj17bmFtZTp5c307Y29uc3QgQTR0PWNs''@;'; put 'put ''YXNzIFQ0dHtjb25zdHJ1Y3RvcihsKXt3N2UodGhpcywiaG90Iix2b2lkIDApLHc3ZSh0aGlzLCJvcHRpb25zIix7fSksdGhpcy5ob3Q9bH1zZXRPcHRpb25zKGwpe3RoaXMub3B0aW9ucz1sfWdldERhdGEoKXtjb25zdHtzdGFydFJvdzpsLHN0YXJ0Q29sOmEsZW5kUm93OmQsZW5kQ29sOmh9''@;'; put 'put ''PXRoaXMuX2dldERhdGFSYW5nZSgpLGY9dGhpcy5vcHRpb25zLHY9W107cmV0dXJuIFFhKGwsZCxNPT57Y29uc3QgRD1bXTshZi5leHBvcnRIaWRkZW5Sb3dzJiZ0aGlzLl9pc0hpZGRlblJvdyhNKXx8KFFhKGEsaCxVPT57IWYuZXhwb3J0SGlkZGVuQ29sdW1ucyYmdGhpcy5faXNIaWRkZW5D''@;'; put 'put ''b2x1bW4oVSl8fEQucHVzaCh0aGlzLmhvdC5nZXREYXRhQXRDZWxsKE0sVSkpfSksdi5wdXNoKEQpKX0pLHZ9Z2V0Um93SGVhZGVycygpe2NvbnN0IGw9W107aWYodGhpcy5vcHRpb25zLnJvd0hlYWRlcnMpe2NvbnN0e3N0YXJ0Um93OmEsZW5kUm93OmR9PXRoaXMuX2dldERhdGFSYW5nZSgp''@;'; put 'put ''LGg9dGhpcy5ob3QuZ2V0Um93SGVhZGVyKCk7UWEoYSxkLGY9PnshdGhpcy5vcHRpb25zLmV4cG9ydEhpZGRlblJvd3MmJnRoaXMuX2lzSGlkZGVuUm93KGYpfHxsLnB1c2goaFtmXSl9KX1yZXR1cm4gbH1nZXRDb2x1bW5IZWFkZXJzKCl7Y29uc3QgbD1bXTtpZih0aGlzLm9wdGlvbnMuY29s''@;'; put 'put ''dW1uSGVhZGVycyl7Y29uc3R7c3RhcnRDb2w6YSxlbmRDb2w6ZH09dGhpcy5fZ2V0RGF0YVJhbmdlKCksaD10aGlzLmhvdC5nZXRDb2xIZWFkZXIoKTtRYShhLGQsZj0+eyF0aGlzLm9wdGlvbnMuZXhwb3J0SGlkZGVuQ29sdW1ucyYmdGhpcy5faXNIaWRkZW5Db2x1bW4oZil8fGwucHVzaCho''@;'; put 'put ''W2ZdKX0pfXJldHVybiBsfV9nZXREYXRhUmFuZ2UoKXtjb25zdCBsPXRoaXMuaG90LmNvdW50Q29scygpLTEsYT10aGlzLmhvdC5jb3VudFJvd3MoKS0xO2xldFtkPTAsaD0wLGY9YSx2PWxdPXRoaXMub3B0aW9ucy5yYW5nZTtyZXR1cm4gZD1NYXRoLm1heChkLDApLGg9TWF0aC5tYXgoaCww''@;'; put 'put ''KSxmPU1hdGgubWluKGYsYSksdj1NYXRoLm1pbih2LGwpLHtzdGFydFJvdzpkLHN0YXJ0Q29sOmgsZW5kUm93OmYsZW5kQ29sOnZ9fV9pc0hpZGRlblJvdyhsKXtyZXR1cm4gdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuaXNIaWRkZW4odGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSl9X2lzSGlk''@;'; put 'put ''ZGVuQ29sdW1uKGwpe3JldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5pc0hpZGRlbih0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpKX19O2Z1bmN0aW9uIEM3ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gazR0KGMpe3ZhciBsPWZ1bmN0aW9uIEQ0dChjLGwpe2lmKCJvYmpl''@;'; put 'put ''Y3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUg''@;'; put 'put ''bXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1l''@;'; put 'put ''cmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgWG5le3N0YXRpYyBnZXQgREVGQVVMVF9PUFRJT05TKCl7cmV0dXJue21pbWVUeXBlOiJ0ZXh0L3BsYWluIixmaWxlRXh0ZW5zaW9uOiJ0eHQiLGZpbGVuYW1lOiJIYW5kc29udGFibGUgW1lZWVld''@;'; put 'put ''LVtNTV0tW0REXSIsZW5jb2Rpbmc6InV0Zi04Iixib206ITEsY29sdW1uSGVhZGVyczohMSxyb3dIZWFkZXJzOiExLGV4cG9ydEhpZGRlbkNvbHVtbnM6ITEsZXhwb3J0SGlkZGVuUm93czohMSxyYW5nZTpbXX19Y29uc3RydWN0b3IobCxhKXtDN2UodGhpcywiZGF0YVByb3ZpZGVyIix2b2lk''@;'; put 'put ''IDApLEM3ZSh0aGlzLCJvcHRpb25zIix2b2lkIDApLHRoaXMuZGF0YVByb3ZpZGVyPWwsdGhpcy5vcHRpb25zPXRoaXMuX21lcmdlT3B0aW9ucyhhKSx0aGlzLmRhdGFQcm92aWRlci5zZXRPcHRpb25zKHRoaXMub3B0aW9ucyl9X21lcmdlT3B0aW9ucyhsKXtsZXQgYT1LMyh0aGlzLmNvbnN0''@;'; put 'put ''cnVjdG9yLkRFRkFVTFRfT1BUSU9OUyk7Y29uc3QgZD1uZXcgRGF0ZTtyZXR1cm4gYT1QdShLMyhYbmUuREVGQVVMVF9PUFRJT05TKSxhKSxhPVB1KGEsbCksYS5maWxlbmFtZT0kSChhLmZpbGVuYW1lLHtZWVlZOmQuZ2V0RnVsbFllYXIoKSxNTTpgJHtkLmdldE1vbnRoKCkrMX1gLnBhZFN0''@;'; put 'put ''YXJ0KDIsIjAiKSxERDpgJHtkLmdldERhdGUoKX1gLnBhZFN0YXJ0KDIsIjAiKX0pLGF9fWNvbnN0IEk0dD1YbmU7ZnVuY3Rpb24gUzdlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgcW5lPW5ldyBXZWFrU2V0O2Z1bmN0aW9uIHo0dChjKXtyZXR1cm4gYy5zdGFydHNXaXRoKCI9Iil8fGMuc3RhcnRzV2l0aCgiKyIpfHxjLnN0YXJ0c1dpdGgoIi0iKXx8Yy5zdGFy''@;'; put 'put ''dHNXaXRoKCJAIil8fGMuc3RhcnRzV2l0aCgiXHQiKXx8Yy5zdGFydHNXaXRoKCJcciIpP2AnJHtjfWA6Y31mdW5jdGlvbiBVNHQoYyxsKXtyZXR1cm4gbC50ZXN0KGMpP2AnJHtjfWA6Y31jb25zdCBXNHQ9ImNzdiIsSm5lPXtbVzR0XTpjbGFzcyBqNHQgZXh0ZW5kcyBJNHR7Y29uc3RydWN0''@;'; put 'put ''b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIFI0dChjLGwpeyhmdW5jdGlvbiBMNHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxs''@;'; put 'put ''KSxsLmFkZChjKX0odGhpcyxxbmUpfXN0YXRpYyBnZXQgREVGQVVMVF9PUFRJT05TKCl7cmV0dXJue21pbWVUeXBlOiJ0ZXh0L2NzdiIsZmlsZUV4dGVuc2lvbjoiY3N2Iixib206ITAsY29sdW1uRGVsaW1pdGVyOiIsIixyb3dEZWxpbWl0ZXI6IlxyXG4iLHNhbml0aXplVmFsdWVzOiExfX1l''@;'; put 'put ''eHBvcnQoKXtjb25zdCBsPXRoaXMub3B0aW9ucyxhPXRoaXMuZGF0YVByb3ZpZGVyLmdldERhdGEoKTtsZXQgZD10aGlzLmRhdGFQcm92aWRlci5nZXRDb2x1bW5IZWFkZXJzKCk7Y29uc3QgaD1kLmxlbmd0aD4wLGY9dGhpcy5kYXRhUHJvdmlkZXIuZ2V0Um93SGVhZGVycygpLHY9Zi5sZW5n''@;'; put 'put ''dGg+MDtsZXQgTT1sLmJvbT8iXHVmZWZmIjoiIjtyZXR1cm4gaCYmKGQ9WnMoZCxEPT50aGlzLl9lc2NhcGVDZWxsKEQse2ZvcmNlOiEwLHNhbml0aXplVmFsdWU6bC5zYW5pdGl6ZVZhbHVlc30pKSx2JiYoTSs9bC5jb2x1bW5EZWxpbWl0ZXIpLE0rPWQuam9pbihsLmNvbHVtbkRlbGltaXRl''@;'; put 'put ''ciksTSs9bC5yb3dEZWxpbWl0ZXIpLEtuKGEsKEQsVSk9PntVPjAmJihNKz1sLnJvd0RlbGltaXRlciksdiYmKE0rPXRoaXMuX2VzY2FwZUNlbGwoZltVXSx7c2FuaXRpemVWYWx1ZTpsLnNhbml0aXplVmFsdWVzfSksTSs9bC5jb2x1bW5EZWxpbWl0ZXIpO2NvbnN0IHRlPUQubWFwKG9lPT50''@;'; put 'put ''aGlzLl9lc2NhcGVDZWxsKG9lLHtzYW5pdGl6ZVZhbHVlOmwuc2FuaXRpemVWYWx1ZXN9KSkuam9pbihsLmNvbHVtbkRlbGltaXRlcik7TSs9dGV9KSxNfV9lc2NhcGVDZWxsKGwpe2xldHtmb3JjZTphPSExLHNhbml0aXplVmFsdWU6ZD0hMX09YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAh''@;'; put 'put ''PT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LGg9cmMobCk7cmV0dXJuIiI9PT1ofHwoZCYmKGE9ITApLGQgaW5zdGFuY2VvZiBSZWdFeHA/aD1TN2UocW5lLHRoaXMsVTR0KS5jYWxsKHRoaXMsaCxkKToiZnVuY3Rpb24iPT10eXBlb2YgZD9oPWQoaCk6ZCYmKGg9UzdlKHFuZSx0aGlz''@;'; put 'put ''LHo0dCkuY2FsbCh0aGlzLGgpKSwoYXx8aC5pbmRleE9mKCJcciIpPj0wfHxoLmluZGV4T2YoJyInKT49MHx8aC5pbmRleE9mKCJcbiIpPj0wfHxoLmluZGV4T2YodGhpcy5vcHRpb25zLmNvbHVtbkRlbGltaXRlcik+PTApJiYoaD1oLnJlcGxhY2UobmV3IFJlZ0V4cCgnIicsImciKSwnIiIn''@;'; put 'put ''KSxoPWAiJHtofSJgKSksaH19fTtjbGFzcyBLNHQgZXh0ZW5kcyBNc3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4iZXhwb3J0RmlsZSJ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjQwfWlzRW5hYmxlZCgpe3JldHVybiEwfWV4cG9ydEFzU3RyaW5nKGwpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9jcmVhdGVUeXBlRm9ybWF0dGVyKGwsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9KS5leHBvcnQoKX1leHBvcnRBc0Jsb2IobCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUJsb2IodGhpcy5fY3JlYXRlVHlwZUZvcm1hdHRl''@;'; put 'put ''cihsLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSkpfWRvd25sb2FkRmlsZShsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307Y29uc3R7cm9vdERvY3VtZW50OmQs''@;'; put 'put ''cm9vdFdpbmRvdzpofT10aGlzLmhvdCxmPXRoaXMuX2NyZWF0ZVR5cGVGb3JtYXR0ZXIobCxhKSx2PXRoaXMuX2NyZWF0ZUJsb2IoZiksTT1oLlVSTHx8aC53ZWJraXRVUkwsRD1kLmNyZWF0ZUVsZW1lbnQoImEiKSxVPWAke2Yub3B0aW9ucy5maWxlbmFtZX0uJHtmLm9wdGlvbnMuZmlsZUV4''@;'; put 'put ''dGVuc2lvbn1gO2lmKHZvaWQgMCE9PUQuZG93bmxvYWQpe2NvbnN0IHRlPU0uY3JlYXRlT2JqZWN0VVJMKHYpO0Quc3R5bGUuZGlzcGxheT0ibm9uZSIsRC5zZXRBdHRyaWJ1dGUoImhyZWYiLHRlKSxELnNldEF0dHJpYnV0ZSgiZG93bmxvYWQiLFUpLGQuYm9keS5hcHBlbmRDaGlsZChEKSxE''@;'; put 'put ''LmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoImNsaWNrIikpLGQuYm9keS5yZW1vdmVDaGlsZChEKSxzZXRUaW1lb3V0KCgpPT57TS5yZXZva2VPYmplY3RVUkwodGUpfSwxMDApfWVsc2UgbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2ImJm5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9i''@;'; put 'put ''KHYsVSl9X2NyZWF0ZVR5cGVGb3JtYXR0ZXIobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2lmKCFKbmVbbF0pdGhyb3cgbmV3IEVycm9yKGBFeHBvcnQgZm9ybWF0IHR5cGUgIiR7bH0iIGlzIG5vdCBzdXBwb3J0ZWQu''@;'; put 'put ''YCk7cmV0dXJuIGZ1bmN0aW9uIFk0dChjLGwsYSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEpuZVtjXT9uZXcgSm5lW2NdKGwsYSk6bnVsbH0obCxuZXcgQTR0KHRoaXMuaG90KSxhKX1fY3JlYXRlQmxvYihsKXtsZXQgYT1udWxsO3JldHVybiB0eXBlb2YgQmxvYjwidSImJihhPW5ldyBC''@;'; put 'put ''bG9iKFtsLmV4cG9ydCgpXSx7dHlwZTpgJHtsLm9wdGlvbnMubWltZVR5cGV9O2NoYXJzZXQ9JHtsLm9wdGlvbnMuZW5jb2Rpbmd9YH0pKSxhfX1mdW5jdGlvbiBGQyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gWDR0KGMpe3ZhciBsPWZ1bmN0aW9uIHE0dChjLGwpe2lmKCJvYmplY3QiIT10''@;'; put 'put ''eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCBy''@;'; put 'put ''ZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6''@;'; put 'put ''ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgbkR7Y29uc3RydWN0b3IobCxhKXtsZXR7aWQ6ZCxzdGF0ZWxlc3M6aD0hMH09YTtGQyh0aGlzLCJob3QiLHZvaWQgMCksRkModGhpcywiaWQiLHZvaWQgMCksRkModGhpcywiZWxlbWVudHMiLFtdKSxGQyh0''@;'; put 'put ''aGlzLCJoaWRkZW4iLCExKSxGQyh0aGlzLCJzdGF0ZUlkIiwiIiksRkModGhpcywic3RhdGUiLHZvaWQgMCksdGhpcy5ob3Q9bCx0aGlzLmlkPWQsdGhpcy5zdGF0ZUlkPWBGaWx0ZXJzLmNvbXBvbmVudC4ke3RoaXMuaWR9YCx0aGlzLnN0YXRlPWg/bnVsbDp0aGlzLmhvdC5jb2x1bW5JbmRl''@;'; put 'put ''eE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnN0YXRlSWQsbmV3IGtOKX1nZXRFbGVtZW50cygpe3JldHVybiB0aGlzLmVsZW1lbnRzfXJlc2V0KCl7S24odGhpcy5lbGVtZW50cyxsPT5sLnJlc2V0KCkpfWhpZGUoKXt0aGlzLmhpZGRlbj0hMH1zaG93KCl7dGhpcy5oaWRkZW49ITF9aXNIaWRk''@;'; put 'put ''ZW4oKXtyZXR1cm4gbnVsbD09PXRoaXMuaG90fHx0aGlzLmhpZGRlbn1yZXN0b3JlU3RhdGUobCl7dGhpcy5zdGF0ZSYmdGhpcy5zZXRTdGF0ZSh0aGlzLnN0YXRlLmdldFZhbHVlQXRJbmRleChsKSl9c2V0U3RhdGUoKXt0aHJvdyBuZXcgRXJyb3IoIlRoZSBzdGF0ZSBzZXR0aW5nIGxvZ2lj''@;'; put 'put ''IGlzIG5vdCBpbXBsZW1lbnRlZCIpfXNhdmVTdGF0ZShsKXt0aGlzLnN0YXRlJiZ0aGlzLnN0YXRlLnNldFZhbHVlQXRJbmRleChsLHRoaXMuZ2V0U3RhdGUoKSl9Z2V0U3RhdGUoKXt0aHJvdyBuZXcgRXJyb3IoIlRoZSBzdGF0ZSBnYXRoZXJpbmcgbG9naWMgaXMgbm90IGltcGxlbWVudGVk''@;'; put 'put ''Iil9ZGVzdHJveSgpe3RoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5zdGF0ZUlkKSx0aGlzLmNsZWFyTG9jYWxIb29rcygpLEtuKHRoaXMuZWxlbWVudHMsbD0+bC5kZXN0cm95KCkpLHRoaXMuc3RhdGU9bnVsbCx0aGlzLmVsZW1lbnRzPW51bGwsdGhpcy5o''@;'; put 'put ''b3Q9bnVsbH19cGwobkQsWjApO2NvbnN0IHJEPXt9O2Z1bmN0aW9uIFE2KGMsbCl7aWYoIXJEW2NdKXRocm93IEVycm9yKGBGaWx0ZXIgY29uZGl0aW9uICIke2N9IiBkb2VzIG5vdCBleGlzdC5gKTtjb25zdHtjb25kaXRpb246YSxkZXNjcmlwdG9yOmR9PXJEW2NdO2xldCBoPWw7cmV0dXJu''@;'; put 'put ''IGQuaW5wdXRWYWx1ZXNEZWNvcmF0b3ImJihoPWQuaW5wdXRWYWx1ZXNEZWNvcmF0b3IoaCkpLGZ1bmN0aW9uKGYpe3JldHVybiBhLmFwcGx5KGYubWV0YS5pbnN0YW5jZSxbXS5jb25jYXQoW2ZdLFtoXSkpfX1mdW5jdGlvbiBSdihjKXtpZighckRbY10pdGhyb3cgRXJyb3IoYEZpbHRlciBj''@;'; put 'put ''b25kaXRpb24gIiR7Y30iIGRvZXMgbm90IGV4aXN0LmApO3JldHVybiByRFtjXS5kZXNjcmlwdG9yfWZ1bmN0aW9uIFZ1KGMsbCxhKXthLmtleT1jLHJEW2NdPXtjb25kaXRpb246bCxkZXNjcmlwdG9yOmF9fWNvbnN0IFkwPSJub25lIjtWdShZMCxmdW5jdGlvbiBKNHQoKXtyZXR1cm4hMH0s''@;'; put 'put ''e25hbWU6SE4saW5wdXRzQ291bnQ6MCxzaG93T3BlcmF0b3JzOiExfSk7Y29uc3QgaUQ9ImVtcHR5IjtWdShpRCxmdW5jdGlvbiBRNHQoYyl7cmV0dXJuIHR1KGMudmFsdWUpfSx7bmFtZTpsZWUsaW5wdXRzQ291bnQ6MCxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgZkI9Im5vdF9lbXB0eSI7''@;'; put 'put ''VnUoZkIsZnVuY3Rpb24gZWd0KGMsbCl7cmV0dXJuIVE2KGlELGwpKGMpfSx7bmFtZTpjZWUsaW5wdXRzQ291bnQ6MCxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgYUQ9ImVxIjtWdShhRCxmdW5jdGlvbiB0Z3QoYyxsKXtsZXRbYV09bDtyZXR1cm4gcmMoYy52YWx1ZSkudG9Mb2NhbGVMb3dl''@;'; put 'put ''ckNhc2UoYy5tZXRhLmxvY2FsZSk9PT1yYyhhKX0se25hbWU6dWVlLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IHBCPSJuZXEiO1Z1KHBCLGZ1bmN0aW9uIG5ndChjLGwpe3JldHVybiFRNihhRCxsKShjKX0se25hbWU6ZGVlLGlucHV0c0NvdW50OjEsc2hvd09wZXJh''@;'; put 'put ''dG9yczohMH0pLFZ1KCJndCIsZnVuY3Rpb24gcmd0KGMsbCl7bGV0W2FdPWwsZD1hO3JldHVybiJudW1lcmljIj09PWMubWV0YS50eXBlJiYoZD1wYXJzZUZsb2F0KGQsMTApKSxjLnZhbHVlPmR9LHtuYW1lOm1lZSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KSxWdSgiZ3RlIixm''@;'; put 'put ''dW5jdGlvbiBpZ3QoYyxsKXtsZXRbYV09bCxkPWE7cmV0dXJuIm51bWVyaWMiPT09Yy5tZXRhLnR5cGUmJihkPXBhcnNlRmxvYXQoZCwxMCkpLGMudmFsdWU+PWR9LHtuYW1lOnZlZSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KSxWdSgibHQiLGZ1bmN0aW9uIGFndChjLGwpe2xl''@;'; put 'put ''dFthXT1sLGQ9YTtyZXR1cm4ibnVtZXJpYyI9PT1jLm1ldGEudHlwZSYmKGQ9cGFyc2VGbG9hdChkLDEwKSksYy52YWx1ZTxkfSx7bmFtZTp5ZWUsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSksVnUoImx0ZSIsZnVuY3Rpb24gb2d0KGMsbCl7bGV0W2FdPWwsZD1hO3JldHVybiJu''@;'; put 'put ''dW1lcmljIj09PWMubWV0YS50eXBlJiYoZD1wYXJzZUZsb2F0KGQsMTApKSxjLnZhbHVlPD1kfSx7bmFtZTpiZWUsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgUW5lPSJkYXRlX2FmdGVyIjtWdShRbmUsZnVuY3Rpb24gc2d0KGMsbCl7bGV0W2FdPWw7Y29uc3QgZD0k''@;'; put 'put ''cyhjLnZhbHVlLGMubWV0YS5kYXRlRm9ybWF0KSxoPSRzKGEsYy5tZXRhLmRhdGVGb3JtYXQpO3JldHVybiEoIWQuaXNWYWxpZCgpfHwhaC5pc1ZhbGlkKCkpJiZkLmRpZmYoaCk+PTB9LHtuYW1lOkNlZSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBlcmU9ImRhdGVf''@;'; put 'put ''YmVmb3JlIjtWdShlcmUsZnVuY3Rpb24gbGd0KGMsbCl7bGV0W2FdPWw7Y29uc3QgZD0kcyhjLnZhbHVlLGMubWV0YS5kYXRlRm9ybWF0KSxoPSRzKGEsYy5tZXRhLmRhdGVGb3JtYXQpO3JldHVybiEoIWQuaXNWYWxpZCgpfHwhaC5pc1ZhbGlkKCkpJiZkLmRpZmYoaCk8PTB9LHtuYW1lOlNl''@;'; put 'put ''ZSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBnQj0iYmV0d2VlbiI7VnUoZ0IsZnVuY3Rpb24gY2d0KGMsbCl7bGV0W2EsZF09bCxoPWEsZj1kO2lmKCJudW1lcmljIj09PWMubWV0YS50eXBlKXtjb25zdCB2PXBhcnNlRmxvYXQoaCwxMCksTT1wYXJzZUZsb2F0KGYs''@;'; put 'put ''MTApO2g9TWF0aC5taW4odixNKSxmPU1hdGgubWF4KHYsTSl9ZWxzZSBpZigiZGF0ZSI9PT1jLm1ldGEudHlwZSl7Y29uc3Qgdj1RNihlcmUsW2ZdKSxNPVE2KFFuZSxbaF0pO3JldHVybiB2KGMpJiZNKGMpfXJldHVybiBjLnZhbHVlPj1oJiZjLnZhbHVlPD1mfSx7bmFtZTpfZWUsaW5wdXRz''@;'; put 'put ''Q291bnQ6MixzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgazdlPSJub3RfYmV0d2VlbiI7VnUoazdlLGZ1bmN0aW9uIHVndChjLGwpe3JldHVybiFRNihnQixsKShjKX0se25hbWU6d2VlLGlucHV0c0NvdW50OjIsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IEQ3ZT0iYmVnaW5zX3dpdGgiO1Z1''@;'; put 'put ''KEQ3ZSxmdW5jdGlvbiBkZ3QoYyxsKXtsZXRbYV09bDtyZXR1cm4gcmMoYy52YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoYy5tZXRhLmxvY2FsZSkuc3RhcnRzV2l0aChyYyhhKSl9LHtuYW1lOmhlZSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KSxWdSgiZW5kc193aXRoIixmdW5j''@;'; put 'put ''dGlvbiBoZ3QoYyxsKXtsZXRbYV09bDtyZXR1cm4gcmMoYy52YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoYy5tZXRhLmxvY2FsZSkuZW5kc1dpdGgocmMoYSkpfSx7bmFtZTpmZWUsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgdHJlPSJjb250YWlucyI7VnUodHJlLGZ1''@;'; put 'put ''bmN0aW9uIGZndChjLGwpe2xldFthXT1sO3JldHVybiByYyhjLnZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZShjLm1ldGEubG9jYWxlKS5pbmRleE9mKHJjKGEpKT49MH0se25hbWU6cGVlLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IFI3ZT0ibm90X2NvbnRhaW5zIjtW''@;'; put 'put ''dShSN2UsZnVuY3Rpb24gcGd0KGMsbCl7cmV0dXJuIVE2KHRyZSxsKShjKX0se25hbWU6Z2VlLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IEw3ZT0iZGF0ZV90b21vcnJvdyI7VnUoTDdlLGZ1bmN0aW9uIGdndChjKXtjb25zdCBsPSRzKGMudmFsdWUsYy5tZXRhLmRh''@;'; put 'put ''dGVGb3JtYXQpO3JldHVybiEhbC5pc1ZhbGlkKCkmJmwuaXNTYW1lKCRzKCkuc3VidHJhY3QoLTEsImRheXMiKS5zdGFydE9mKCJkYXkiKSwiZCIpfSx7bmFtZTp4ZWUsaW5wdXRzQ291bnQ6MH0pO2NvbnN0IE83ZT0iZGF0ZV90b2RheSI7VnUoTzdlLGZ1bmN0aW9uIG1ndChjKXtjb25zdCBs''@;'; put 'put ''PSRzKGMudmFsdWUsYy5tZXRhLmRhdGVGb3JtYXQpO3JldHVybiEhbC5pc1ZhbGlkKCkmJmwuaXNTYW1lKCRzKCkuc3RhcnRPZigiZGF5IiksImQiKX0se25hbWU6TWVlLGlucHV0c0NvdW50OjB9KTtjb25zdCBQN2U9ImRhdGVfeWVzdGVyZGF5IjtWdShQN2UsZnVuY3Rpb24gdmd0KGMpe2Nv''@;'; put 'put ''bnN0IGw9JHMoYy52YWx1ZSxjLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISFsLmlzVmFsaWQoKSYmbC5pc1NhbWUoJHMoKS5zdWJ0cmFjdCgxLCJkYXlzIikuc3RhcnRPZigiZGF5IiksImQiKX0se25hbWU6RWVlLGlucHV0c0NvdW50OjB9KTtjb25zdCB5Z3Q9Im51bWVyaWMiLEY3ZT0idGV4''@;'; put 'put ''dCIsYmd0PSJkYXRlIixIN2U9e1t5Z3RdOltZMCx5cyxpRCxmQix5cyxhRCxwQix5cywiZ3QiLCJndGUiLCJsdCIsImx0ZSIsZ0IsazdlXSxbRjdlXTpbWTAseXMsaUQsZkIseXMsYUQscEIseXMsRDdlLCJlbmRzX3dpdGgiLHlzLHRyZSxSN2VdLFtiZ3RdOltZMCx5cyxpRCxmQix5cyxhRCxw''@;'; put 'put ''Qix5cyxlcmUsUW5lLGdCLHlzLEw3ZSxPN2UsUDdlXX07ZnVuY3Rpb24gb0QoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHdndChjKXt2YXIgbD1mdW5jdGlvbiBDZ3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtp''@;'; put 'put ''Zih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3Ry''@;'; put 'put ''aW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IHJy''@;'; put 'put ''ZT0iYnVpbGRpbmciLE43ZT1bImNsaWNrIiwiaW5wdXQiLCJrZXlkb3duIiwia2V5cHJlc3MiLCJrZXl1cCIsImZvY3VzIiwiYmx1ciIsImNoYW5nZSJdO2NsYXNzIEgye3N0YXRpYyBnZXQgREVGQVVMVFMoKXtyZXR1cm4gSzMoe2NsYXNzTmFtZToiIix2YWx1ZToiIix0YWdOYW1lOiJkaXYi''@;'; put 'put ''LGNoaWxkcmVuOltdLHdyYXBJdDohMH0pfWNvbnN0cnVjdG9yKGwsYSl7b0QodGhpcywiaG90Iix2b2lkIDApLG9EKHRoaXMsImV2ZW50TWFuYWdlciIsbmV3IFZmKHRoaXMpKSxvRCh0aGlzLCJvcHRpb25zIix2b2lkIDApLG9EKHRoaXMsIl9lbGVtZW50Iix2b2lkIDApLG9EKHRoaXMsImJ1''@;'; put 'put ''aWxkU3RhdGUiLHZvaWQgMCksdGhpcy5ob3Q9bCx0aGlzLm9wdGlvbnM9UHUoSDIuREVGQVVMVFMsYSksdGhpcy5fZWxlbWVudD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLm9wdGlvbnMud3JhcEl0PyJkaXYiOnRoaXMub3B0aW9ucy50YWdOYW1lKX1zZXRWYWx1''@;'; put 'put ''ZShsKXt0aGlzLm9wdGlvbnMudmFsdWU9bCx0aGlzLnVwZGF0ZSgpfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZX1nZXQgZWxlbWVudCgpe3JldHVybiB0aGlzLmJ1aWxkU3RhdGU9PT1ycmU/dGhpcy5fZWxlbWVudDoiYnVpbHQiPT09dGhpcy5idWlsZFN0YXRlPyh0aGlz''@;'; put 'put ''LnVwZGF0ZSgpLHRoaXMuX2VsZW1lbnQpOih0aGlzLmJ1aWxkU3RhdGU9cnJlLHRoaXMuYnVpbGQoKSx0aGlzLmJ1aWxkU3RhdGU9ImJ1aWx0Iix0aGlzLl9lbGVtZW50KX1pc0J1aWx0KCl7cmV0dXJuImJ1aWx0Ij09PXRoaXMuYnVpbGRTdGF0ZX10cmFuc2xhdGVJZlBvc3NpYmxlKGwpe3Jl''@;'; put 'put ''dHVybiJzdHJpbmciPT10eXBlb2YgbCYmbC5zdGFydHNXaXRoKERkKT90aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKGwpOmx9YnVpbGQoKXtjb25zdCBsPShhLGQpPT57dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLGQsaD0+dGhpcy5ydW5Mb2NhbEhvb2tzKGQsaCx0''@;'; put 'put ''aGlzKSl9O2lmKHRoaXMuYnVpbGRTdGF0ZXx8KHRoaXMuYnVpbGRTdGF0ZT1ycmUpLHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIsITApLHZvaWQgMCE9PXRoaXMub3B0aW9ucy50YWJJbmRleCYmdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4''@;'; put 'put ''Iix0aGlzLm9wdGlvbnMudGFiSW5kZXgpLHZvaWQgMCE9PXRoaXMub3B0aW9ucy5yb2xlJiZ0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgicm9sZSIsdGhpcy5vcHRpb25zLnJvbGUpLHRoaXMub3B0aW9ucy5jbGFzc05hbWUmJmlpKHRoaXMuX2VsZW1lbnQsdGhpcy5vcHRpb25zLmNsYXNz''@;'; put 'put ''TmFtZSksdGhpcy5vcHRpb25zLmNoaWxkcmVuLmxlbmd0aClLbih0aGlzLm9wdGlvbnMuY2hpbGRyZW4sYT0+dGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChhLmVsZW1lbnQpKTtlbHNlIGlmKHRoaXMub3B0aW9ucy53cmFwSXQpe2NvbnN0IGE9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0''@;'; put 'put ''ZUVsZW1lbnQodGhpcy5vcHRpb25zLnRhZ05hbWUpO2Euc2V0QXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIsITApLGFzKHRoaXMub3B0aW9ucywoZCxoKT0+e3ZvaWQgMCE9PWFbaF0mJiJjbGFzc05hbWUiIT09aCYmInRhZ05hbWUiIT09aCYmImNoaWxkcmVuIiE9PWgmJihhW2hdPXRoaXMu''@;'; put 'put ''dHJhbnNsYXRlSWZQb3NzaWJsZShkKSl9KSx0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGEpLEtuKE43ZSxkPT5sKGEsZCkpfWVsc2UgS24oTjdlLGE9PmwodGhpcy5fZWxlbWVudCxhKSl9dXBkYXRlKCl7fXJlc2V0KCl7dGhpcy5vcHRpb25zLnZhbHVlPSIiLHRoaXMudXBkYXRlKCl9c2hv''@;'; put 'put ''dygpe3RoaXMuZWxlbWVudC5zdHlsZS5kaXNwbGF5PSIifWhpZGUoKXt0aGlzLmVsZW1lbnQuc3R5bGUuZGlzcGxheT0ibm9uZSJ9Zm9jdXMoKXt9ZGVzdHJveSgpe3RoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKSx0aGlzLmV2ZW50TWFuYWdlcj1udWxsLHRoaXMuaG90PW51bGwsdGhpcy5f''@;'; put 'put ''ZWxlbWVudC5wYXJlbnROb2RlJiZ0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudD1udWxsfX1mdW5jdGlvbiBWN2UoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUg''@;'; put 'put ''c2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIG1CKGMsbCl7cmV0dXJuIGMuZ2V0KGlyZShjLGwpKX1mdW5jdGlvbiBpcmUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXBsKEgyLFowKTt2YXIgSEM9bmV3IFdlYWtNYXAsQjdlPW5ldyBXZWFrU2V0O2NsYXNzIGU4IGV4dGVuZHMgSDJ7c3RhdGljIGdldCBERUZBVUxUUygpe3Jl''@;'; put 'put ''dHVybiBLMyh7cGxhY2Vob2xkZXI6IiIsdHlwZToidGV4dCIsdGFnTmFtZToiaW5wdXQiLHRhYkluZGV4Oi0xfSl9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLFB1KGU4LkRFRkFVTFRTLGEpKSxmdW5jdGlvbiBTZ3QoYyxsKXtWN2UoYyxsKSxsLmFkZChjKX0odGhpcyxCN2UpLGZ1bmN0aW9u''@;'; put 'put ''IE1ndChjLGwsYSl7VjdlKGMsbCksbC5zZXQoYyxhKX0odGhpcyxIQyx2b2lkIDApLHRoaXMucmVnaXN0ZXJIb29rcygpfXJlZ2lzdGVySG9va3MoKXt0aGlzLmFkZExvY2FsSG9vaygia2V5dXAiLGw9PmlyZShCN2UsdGhpcyxFZ3QpLmNhbGwodGhpcyxsKSl9YnVpbGQoKXtzdXBlci5idWls''@;'; put 'put ''ZCgpO2NvbnN0IGw9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOyhmdW5jdGlvbiB4Z3QoYyxsLGEpe2Muc2V0KGlyZShjLGwpLGEpfSkoSEMsdGhpcyx0aGlzLl9lbGVtZW50LmZpcnN0Q2hpbGQpLGlpKHRoaXMuX2VsZW1lbnQsImh0VUlJbnB1dCIpLGlpKGws''@;'; put 'put ''Imh0VUlJbnB1dEljb24iKSx0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGwpLHRoaXMudXBkYXRlKCl9dXBkYXRlKCl7dGhpcy5pc0J1aWx0KCkmJihtQihIQyx0aGlzKS50eXBlPXRoaXMub3B0aW9ucy50eXBlLG1CKEhDLHRoaXMpLnBsYWNlaG9sZGVyPXRoaXMudHJhbnNsYXRlSWZQb3Nz''@;'; put 'put ''aWJsZSh0aGlzLm9wdGlvbnMucGxhY2Vob2xkZXIpLG1CKEhDLHRoaXMpLnZhbHVlPXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZSh0aGlzLm9wdGlvbnMudmFsdWUpKX1mb2N1cygpe3RoaXMuaXNCdWlsdCgpJiZtQihIQyx0aGlzKS5mb2N1cygpfX1mdW5jdGlvbiBFZ3QoYyl7dGhpcy5vcHRp''@;'; put 'put ''b25zLnZhbHVlPWMudGFyZ2V0LnZhbHVlfWZ1bmN0aW9uIHNEKGMsbCxhKXtqN2UoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIGo3ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ug''@;'; put 'put ''b24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gTkMoYyxsLGEpe3JldHVybiBjLnNldChsRChjLGwpLGEpLGF9ZnVuY3Rpb24gbHUoYyxsKXtyZXR1cm4gYy5nZXQobEQoYyxsKSl9ZnVuY3Rpb24gbEQoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBh''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBUMD1uZXcgV2Vha01hcCx2Qj1uZXcgV2Vha01hcCx5Qj1uZXcgV2Vha01hcCxhcmU9bmV3IFdlYWtNYXAsYkI9bmV3IFdl''@;'; put 'put ''YWtNYXAsX0I9bmV3IFdlYWtTZXQ7Y2xhc3MgY0QgZXh0ZW5kcyBIMntzdGF0aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIEszKHtjbGFzc05hbWU6Imh0VUlTZWxlY3QiLHdyYXBJdDohMSx0YWJJbmRleDotMX0pfWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxQdShjRC5ERUZBVUxUUyxhKSks''@;'; put 'put ''ZnVuY3Rpb24gVGd0KGMsbCl7ajdlKGMsbCksbC5hZGQoYyl9KHRoaXMsX0IpLHNEKHRoaXMsVDAsbnVsbCksc0QodGhpcyx2QixbXSksc0QodGhpcyx5Qix2b2lkIDApLHNEKHRoaXMsYXJlLHZvaWQgMCksc0QodGhpcyxiQix2b2lkIDApLHRoaXMucmVnaXN0ZXJIb29rcygpfWdldE1lbnUo''@;'; put 'put ''KXtyZXR1cm4gbHUoVDAsdGhpcyl9cmVnaXN0ZXJIb29rcygpe3RoaXMuYWRkTG9jYWxIb29rKCJjbGljayIsKCk9PmxEKF9CLHRoaXMsRGd0KS5jYWxsKHRoaXMpKX1zZXRJdGVtcyhsKXtOQyh2Qix0aGlzLHRoaXMudHJhbnNsYXRlTmFtZXMobCkpLGx1KFQwLHRoaXMpJiZsdShUMCx0aGlz''@;'; put 'put ''KS5zZXRNZW51SXRlbXMobHUodkIsdGhpcykpfXRyYW5zbGF0ZU5hbWVzKGwpe3JldHVybiBLbihsLGE9PnthLm5hbWU9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKGEubmFtZSl9KSxsfWJ1aWxkKCl7c3VwZXIuYnVpbGQoKSxOQyhUMCx0aGlzLG5ldyBEQyh0aGlzLmhvdCx7Y2xhc3NOYW1l''@;'; put 'put ''OiJodFNlbGVjdFVJIGh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IixrZWVwSW5WaWV3cG9ydDohMSxzdGFuZGFsb25lOiEwLGNvbnRhaW5lcjp0aGlzLm9wdGlvbnMubWVudUNvbnRhaW5lcn0pKSxsdShUMCx0aGlzKS5zZXRNZW51SXRlbXMobHUodkIsdGhpcykpO2NvbnN0IGw9bmV3IEgyKHRo''@;'; put 'put ''aXMuaG90LHtjbGFzc05hbWU6Imh0VUlTZWxlY3RDYXB0aW9uIn0pLGE9bmV3IEgyKHRoaXMuaG90LHtjbGFzc05hbWU6Imh0VUlTZWxlY3REcm9wZG93biJ9KTtOQyh5Qix0aGlzLGwpLE5DKGFyZSx0aGlzLGwuZWxlbWVudCksTkMoYkIsdGhpcyxhKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygp''@;'; put 'put ''LmFyaWFUYWdzJiYoWmEoYS5lbGVtZW50LFtYOSgpXSksWmEodGhpcy5fZWxlbWVudCxbWyJyb2xlIiwibGlzdGJveCJdXSkpLEtuKFtsLGFdLGQ9PnRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoZC5lbGVtZW50KSksbHUoVDAsdGhpcykuYWRkTG9jYWxIb29rKCJzZWxlY3QiLGQ9PmxEKF9C''@;'; put 'put ''LHRoaXMsQWd0KS5jYWxsKHRoaXMsZCkpLGx1KFQwLHRoaXMpLmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsKCk9PmxEKF9CLHRoaXMsa2d0KS5jYWxsKHRoaXMpKSx0aGlzLnVwZGF0ZSgpfXVwZGF0ZSgpe2lmKCF0aGlzLmlzQnVpbHQoKSlyZXR1cm47bGV0IGw7bD10aGlzLm9wdGlvbnMu''@;'; put 'put ''dmFsdWU/dGhpcy5vcHRpb25zLnZhbHVlLm5hbWU6bHUoVDAsdGhpcykuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoSE4pLGx1KGFyZSx0aGlzKS50ZXh0Q29udGVudD1sLHN1cGVyLnVwZGF0ZSgpfW9wZW5PcHRpb25zKCl7Y29uc3QgbD10aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRS''@;'; put 'put ''ZWN0KCk7bHUoVDAsdGhpcykmJihsdShUMCx0aGlzKS5vcGVuKCksbHUoVDAsdGhpcykuc2V0UG9zaXRpb24oe2xlZnQ6dGhpcy5ob3QuaXNMdHIoKT9sLmxlZnQtNTpsLmxlZnQtMzEsdG9wOmwudG9wLTEsd2lkdGg6bC53aWR0aCxoZWlnaHQ6bC5oZWlnaHR9KSxsdShUMCx0aGlzKS5nZXRO''@;'; put 'put ''YXZpZ2F0b3IoKS50b0ZpcnN0SXRlbSgpLGx1KFQwLHRoaXMpLmdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpLmFkZEN1c3RvbVNob3J0Y3V0cyhbe2tleXM6W1siVGFiIl0sWyJTaGlmdCIsIlRhYiJdXSxjYWxsYmFjazphPT57dGhpcy5jbG9zZU9wdGlvbnMoKSx0aGlzLnJ1bkxvY2FsSG9v''@;'; put 'put ''a3MoInRhYktleWRvd24iLGEpfX0se2tleXM6W1siQ29udHJvbC9NZXRhIiwiQSJdXSxjYWxsYmFjazooKT0+ITF9XSkpfWNsb3NlT3B0aW9ucygpe2x1KFQwLHRoaXMpJiZsdShUMCx0aGlzKS5jbG9zZSgpfWZvY3VzKCl7dGhpcy5pc0J1aWx0KCkmJnRoaXMuZWxlbWVudC5mb2N1cygpfWRl''@;'; put 'put ''c3Ryb3koKXtsdShUMCx0aGlzKSYmKGx1KFQwLHRoaXMpLmRlc3Ryb3koKSxOQyhUMCx0aGlzLG51bGwpKSxsdSh5Qix0aGlzKSYmbHUoeUIsdGhpcykuZGVzdHJveSgpLGx1KGJCLHRoaXMpJiZsdShiQix0aGlzKS5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBBZ3QoYyl7''@;'; put 'put ''Yy5uYW1lIT09eXMmJih0aGlzLm9wdGlvbnMudmFsdWU9Yyx0aGlzLnVwZGF0ZSgpLHRoaXMucnVuTG9jYWxIb29rcygic2VsZWN0Iix0aGlzLm9wdGlvbnMudmFsdWUpKX1mdW5jdGlvbiBrZ3QoKXt0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyQ2xvc2UiKX1mdW5jdGlvbiBEZ3QoKXt0aGlz''@;'; put 'put ''Lm9wZW5PcHRpb25zKCl9ZnVuY3Rpb24gejdlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBMZ3QoYyl7dmFyIGw9ZnVuY3Rpb24gT2d0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFy''@;'; put 'put ''IGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShj''@;'; put 'put ''LCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBVN2UoYyxsLGEpe2lmKCJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBvcmU9bmV3IFdlYWtTZXQ7Y2xhc3Mgc3JlIGV4''@;'; put 'put ''dGVuZHMgbkR7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLHtpZDphLmlkLHN0YXRlbGVzczohMX0pLGZ1bmN0aW9uIElndChjLGwpeyhmdW5jdGlvbiBSZ3QoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVs''@;'; put 'put ''ZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxvcmUpLHo3ZSh0aGlzLCJuYW1lIiwiIiksejdlKHRoaXMsImFkZFNlcGFyYXRvciIsITEpLHRoaXMubmFtZT1hLm5hbWUsdGhpcy5hZGRTZXBhcmF0b3I9YS5hZGRTZXBhcmF0b3IsdGhpcy5lbGVtZW50''@;'; put 'put ''cy5wdXNoKG5ldyBjRCh0aGlzLmhvdCx7bWVudUNvbnRhaW5lcjphLm1lbnVDb250YWluZXJ9KSksdGhpcy5lbGVtZW50cy5wdXNoKG5ldyBlOCh0aGlzLmhvdCx7cGxhY2Vob2xkZXI6UGVlfSkpLHRoaXMuZWxlbWVudHMucHVzaChuZXcgZTgodGhpcy5ob3Qse3BsYWNlaG9sZGVyOkZlZX0p''@;'; put 'put ''KSx0aGlzLnJlZ2lzdGVySG9va3MoKX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5nZXRTZWxlY3RFbGVtZW50KCkuYWRkTG9jYWxIb29rKCJzZWxlY3QiLGw9PlU3ZShvcmUsdGhpcyxQZ3QpLmNhbGwodGhpcyxsKSkuYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIiwoKT0+dGhpcy5ydW5Mb2NhbEhv''@;'; put 'put ''b2tzKCJhZnRlckNsb3NlIikpLmFkZExvY2FsSG9vaygidGFiS2V5ZG93biIsbD0+dGhpcy5ydW5Mb2NhbEhvb2tzKCJzZWxlY3RUYWJLZXlkb3duIixsKSksS24odGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksbD0+e2wuYWRkTG9jYWxIb29rKCJrZXlkb3duIixhPT5VN2Uob3JlLHRoaXMsRmd0''@;'; put 'put ''KS5jYWxsKHRoaXMsYSkpfSl9c2V0U3RhdGUobCl7aWYodGhpcy5yZXNldCgpLCFsKXJldHVybjtjb25zdCBhPUszKGwuY29tbWFuZCk7YS5uYW1lLnN0YXJ0c1dpdGgoaXUpJiYoYS5uYW1lPXRoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoYS5uYW1lKSksdGhpcy5nZXRTZWxlY3RFbGVt''@;'; put 'put ''ZW50KCkuc2V0VmFsdWUoYSksS24obC5hcmdzLChkLGgpPT57aWYoaD5hLmlucHV0c0NvdW50LTEpcmV0dXJuITE7Y29uc3QgZj10aGlzLmdldElucHV0RWxlbWVudChoKTtmLnNldFZhbHVlKGQpLGZbYS5pbnB1dHNDb3VudD5oPyJzaG93IjoiaGlkZSJdKCksaHx8dGhpcy5ob3QuX3JlZ2lz''@;'; put 'put ''dGVyVGltZW91dCgoKT0+Zi5mb2N1cygpLDEwKX0pfWdldFN0YXRlKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdEVsZW1lbnQoKS5nZXRWYWx1ZSgpfHxSdihZMCksYT1bXTtyZXR1cm4gS24odGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksKGQsaCk9PntsLmlucHV0c0NvdW50PmgmJmEucHVzaChk''@;'; put 'put ''LmdldFZhbHVlKCkpfSkse2NvbW1hbmQ6bCxhcmdzOmF9fXVwZGF0ZVN0YXRlKGwsYSl7Y29uc3QgZD1SdihsP2wubmFtZTpZMCk7dGhpcy5zdGF0ZS5zZXRWYWx1ZUF0SW5kZXgoYSx7Y29tbWFuZDpkLGFyZ3M6bD9sLmFyZ3M6W119KSxsfHxLbih0aGlzLmdldElucHV0RWxlbWVudHMoKSxo''@;'; put 'put ''PT5oLnNldFZhbHVlKG51bGwpKX1nZXRTZWxlY3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuZWxlbWVudHMuZmlsdGVyKGw9PmwgaW5zdGFuY2VvZiBjRClbMF19Z2V0SW5wdXRFbGVtZW50KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRz''@;'; put 'put ''WzBdOjA7cmV0dXJuIHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpW2xdfWdldElucHV0RWxlbWVudHMoKXtyZXR1cm4gdGhpcy5lbGVtZW50cy5maWx0ZXIobD0+bCBpbnN0YW5jZW9mIGU4KX1nZXRNZW51SXRlbURlc2NyaXB0b3IoKXtyZXR1cm57a2V5OnRoaXMuaWQsbmFtZTp0aGlzLm5hbWUs''@;'; put 'put ''aXNDb21tYW5kOiExLGRpc2FibGVTZWxlY3Rpb246ITAsaGlkZGVuOigpPT50aGlzLmlzSGlkZGVuKCkscmVuZGVyZXI6KGwsYSxkLGgsZix2KT0+e2lpKGEucGFyZW50Tm9kZSwiaHRGaWx0ZXJzTWVudUNvbmRpdGlvbiIpLHRoaXMuYWRkU2VwYXJhdG9yJiZpaShhLnBhcmVudE5vZGUsImJv''@;'; put 'put ''cmRlciIpO2NvbnN0IE09dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBpaShNLCJodEZpbHRlcnNNZW51TGFiZWwiKSxNLnRleHRDb250ZW50PXYsYS5hcHBlbmRDaGlsZChNKSxhLnBhcmVudEVsZW1lbnQuaGFzQXR0cmlidXRlKCJnaG9zdC10YWJs''@;'; put 'put ''ZSIpfHxLbih0aGlzLmVsZW1lbnRzLEQ9PmEuYXBwZW5kQ2hpbGQoRC5lbGVtZW50KSksYX19fXJlc2V0KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRQbHVnaW4oImZpbHRlcnMiKS5nZXRTZWxlY3RlZENvbHVtbigpO2xldCBhPVtSdihZMCldO2lmKG51bGwhPT1sKXtjb25zdHt2aXN1YWxJbmRl''@;'; put 'put ''eDpkfT1sO2E9ZnVuY3Rpb24gX2d0KGMpe2NvbnN0IGw9W107bGV0IGE9YztyZXR1cm4gSDdlW2FdfHwoYT0idGV4dCIpLEtuKEg3ZVthXSxkPT57bGV0IGg7aD1kPT09eXM/e25hbWU6eXN9OkszKFJ2KGQpKSxsLnB1c2goaCl9KSxsfSh0aGlzLmhvdC5nZXREYXRhVHlwZSgwLGQsdGhpcy5o''@;'; put 'put ''b3QuY291bnRSb3dzKCksZCkpfUtuKHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpLGQ9PmQuaGlkZSgpKSx0aGlzLmdldFNlbGVjdEVsZW1lbnQoKS5zZXRJdGVtcyhhKSxzdXBlci5yZXNldCgpLHRoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLnNldFZhbHVlKGFbMF0pfX1mdW5jdGlvbiBQZ3QoYyl7''@;'; put 'put ''S24odGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksKGwsYSk9PntsW2MuaW5wdXRzQ291bnQ+YT8ic2hvdyI6ImhpZGUiXSgpLDA9PT1hJiZ0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT5sLmZvY3VzKCksMTApfSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGMpfWZ1bmN0aW9uIEZn''@;'; put 'put ''dChjKXtxOShjLmtleUNvZGUsIkVTQ0FQRSIpJiYodGhpcy5ydW5Mb2NhbEhvb2tzKCJjYW5jZWwiKSxFMihjKSl9Y29uc3QgdUQ9e307ZnVuY3Rpb24gTmd0KGMpe3JldHVybiB1RFtjXS5uYW1lfWZ1bmN0aW9uIGxyZShjLGwsYSl7dURbY109e25hbWU6bCxmdW5jOmF9fWNvbnN0IHQ4PSJj''@;'; put 'put ''b25qdW5jdGlvbiI7bHJlKHQ4LGtlZSxmdW5jdGlvbiBCZ3QoYyxsKXtyZXR1cm4gYy5ldmVyeShhPT5hLmZ1bmMobCkpfSk7Y29uc3Qgd0I9ImRpc2p1bmN0aW9uIjtscmUod0IsTk4sZnVuY3Rpb24gemd0KGMsbCl7cmV0dXJuIGMuc29tZShhPT5hLmZ1bmMobCkpfSk7Y29uc3QgY3JlPSJk''@;'; put 'put ''aXNqdW5jdGlvbldpdGhFeHRyYUNvbmRpdGlvbiI7ZnVuY3Rpb24gWjdlKGMsbCxhKXsoZnVuY3Rpb24gV2d0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3Qi''@;'; put 'put ''KX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBkRChjLGwpe3JldHVybiBjLmdldChZN2UoYyxsKSl9ZnVuY3Rpb24gVzdlKGMsbCxhKXtyZXR1cm4gYy5zZXQoWTdlKGMsbCksYSksYX1mdW5jdGlvbiBZN2UoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwp''@;'; put 'put ''KXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWxyZShjcmUsTk4sZnVuY3Rpb24gWmd0KGMsbCl7aWYoYy5sZW5ndGg8Myl0aHJvdyBFcnJvcigiT3BlcmF0aW9u''@;'; put 'put ''IGRvZXNuJ3Qgd29yayBvbiBsZXNzIHRoZW4gdGhyZWUgY29uZGl0aW9ucy4iKTtyZXR1cm4gYy5zbGljZSgwLGMubGVuZ3RoLTEpLnNvbWUoYT0+YS5mdW5jKGwpKSYmY1tjLmxlbmd0aC0xXS5mdW5jKGwpfSk7dmFyIFZDPW5ldyBXZWFrTWFwLHVyZT1uZXcgV2Vha01hcDtjbGFzcyBDQiBl''@;'; put 'put ''eHRlbmRzIEgye3N0YXRpYyBnZXQgREVGQVVMVFMoKXtyZXR1cm4gSzMoe3R5cGU6InJhZGlvIix0YWdOYW1lOiJpbnB1dCIsY2xhc3NOYW1lOiJodFVJUmFkaW8iLGxhYmVsOnt9fSl9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLFB1KENCLkRFRkFVTFRTLGEpKSxaN2UodGhpcyxWQyx2b2lk''@;'; put 'put ''IDApLFo3ZSh0aGlzLHVyZSx2b2lkIDApfWJ1aWxkKCl7c3VwZXIuYnVpbGQoKTtjb25zdCBsPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsYWJlbCIpO2wudGV4dENvbnRlbnQ9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy5sYWJlbC50ZXh0Q29u''@;'; put 'put ''dGVudCksbC5odG1sRm9yPXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZSh0aGlzLm9wdGlvbnMubGFiZWwuaHRtbEZvciksVzdlKHVyZSx0aGlzLGwpLFc3ZShWQyx0aGlzLHRoaXMuX2VsZW1lbnQuZmlyc3RDaGlsZCksZEQoVkMsdGhpcykuY2hlY2tlZD10aGlzLm9wdGlvbnMuY2hlY2tlZCx0''@;'; put 'put ''aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGwpLHRoaXMudXBkYXRlKCl9dXBkYXRlKCl7dGhpcy5pc0J1aWx0KCkmJihkRCh1cmUsdGhpcykudGV4dENvbnRlbnQ9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy5sYWJlbC50ZXh0Q29udGVudCkpfWlzQ2hlY2tlZCgpe3Jl''@;'; put 'put ''dHVybiEhdGhpcy5pc0J1aWx0KCkmJmREKFZDLHRoaXMpLmNoZWNrZWR9c2V0Q2hlY2tlZCgpe2xldCBsPSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF07dGhpcy5pc0J1aWx0KCkmJihkRChWQyx0aGlzKS5jaGVja2VkPWwpfWZvY3Vz''@;'; put 'put ''KCl7dGhpcy5pc0J1aWx0KCkmJmREKFZDLHRoaXMpLmZvY3VzKCl9fXZhciAkN2U9bmV3IFdlYWtTZXQ7Y2xhc3MgSmd0IGV4dGVuZHMgbkR7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLHtpZDphLmlkLHN0YXRlbGVzczohMX0pLGZ1bmN0aW9uIFlndChjLGwpeyhmdW5jdGlvbiBHZ3QoYyxs''@;'; put 'put ''KXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcywkN2UpLGZ1bmN0aW9uICRndChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24g''@;'; put 'put ''S2d0KGMpe3ZhciBsPWZ1bmN0aW9uIFhndChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVy''@;'; put 'put ''biBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9P''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsIm5hbWUiLCIiKSx0aGlzLm5hbWU9YS5uYW1lLHRoaXMuYnVpbGRPcGVyYXRvcnNFbGVtZW50KCl9Z2V0TWVudUl0ZW1EZXNj''@;'; put 'put ''cmlwdG9yKCl7cmV0dXJue2tleTp0aGlzLmlkLG5hbWU6dGhpcy5uYW1lLGlzQ29tbWFuZDohMSxkaXNhYmxlU2VsZWN0aW9uOiEwLGhpZGRlbjooKT0+dGhpcy5pc0hpZGRlbigpLHJlbmRlcmVyOihsLGEpPT4oaWkoYS5wYXJlbnROb2RlLCJodEZpbHRlcnNNZW51T3BlcmF0b3JzIiksS24o''@;'; put 'put ''dGhpcy5lbGVtZW50cyxkPT5hLmFwcGVuZENoaWxkKGQuZWxlbWVudCkpLGEpfX1idWlsZE9wZXJhdG9yc0VsZW1lbnQoKXtjb25zdCBsPVt0OCx3Ql07S24obCxhPT57Y29uc3QgZD1uZXcgQ0IodGhpcy5ob3Qse25hbWU6Im9wZXJhdG9yIixsYWJlbDp7aHRtbEZvcjphLHRleHRDb250ZW50''@;'; put 'put ''Ok5ndChhKX0sdmFsdWU6YSxjaGVja2VkOmE9PT1sWzBdLGlkOmF9KTtkLmFkZExvY2FsSG9vaygiY2hhbmdlIixoPT5mdW5jdGlvbiBxZ3QoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfSgkN2UsdGhpcyxRZ3QpLmNhbGwodGhpcyxoKSksdGhpcy5lbGVtZW50cy5wdXNoKGQpfSl9c2V0Q2hlY2tlZChsKXtpZih0aGlzLmVsZW1lbnRzLmxlbmd0aDxsKXRocm93IEVycm9y''@;'; put 'put ''KFhzYFJhZGlvIGJ1dHRvbiB3aXRoIGluZGV4ICR7bH0gZG9lc24ndCBleGlzdC5gKTtLbih0aGlzLmVsZW1lbnRzLChhLGQpPT57YS5zZXRDaGVja2VkKGQ9PT1sKX0pfWdldEFjdGl2ZU9wZXJhdGlvbklkKCl7Y29uc3QgbD10aGlzLmVsZW1lbnRzLmZpbmQoYT0+YSBpbnN0YW5jZW9mIENC''@;'; put 'put ''JiZhLmlzQ2hlY2tlZCgpKTtyZXR1cm4gbD9sLmdldFZhbHVlKCk6dDh9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5nZXRBY3RpdmVPcGVyYXRpb25JZCgpfXNldFN0YXRlKGwpe3RoaXMucmVzZXQoKSxsJiZ0aGlzLmdldEFjdGl2ZU9wZXJhdGlvbklkKCkhPT1sJiZLbih0aGlzLmVsZW1lbnRz''@;'; put 'put ''LGE9PnthLnNldENoZWNrZWQoYS5nZXRWYWx1ZSgpPT09bCl9KX11cGRhdGVTdGF0ZSgpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0ODtkPT09Y3JlJiYoZD13QiksdGhpcy5zdGF0ZS5zZXRWYWx1ZUF0SW5kZXgoYXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsZCl9cmVzZXQoKXt0aGlzLnNldENoZWNrZWQoMCl9fWZ1bmN0aW9uIFFndChjKXt0aGlzLnNldFN0YXRlKGMudGFyZ2V0LnZhbHVlKX1mdW5jdGlvbiB0NXQoYyxsKXtsZXQgYT1jO3JldHVybiIiPT09YSYmKGE9YCgke2x9KWApLGF9''@;'; put 'put ''ZnVuY3Rpb24gaEQoYyl7Y29uc3QgbD1uZXcgU2V0KGMpO3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gbC5oYXMoYSl9fWZ1bmN0aW9uIGRyZShjKXtyZXR1cm4gYz8/IiJ9ZnVuY3Rpb24gaHJlKGMpe3JldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoYykpLm1hcChsPT5kcmUobCkpLnNvcnQo''@;'; put 'put ''KGwsYSk9PiJudW1iZXIiPT10eXBlb2YgbCYmIm51bWJlciI9PXR5cGVvZiBhP2wtYTpsPT09YT8wOmw+YT8xOi0xKX1mdW5jdGlvbiBLN2UoYyxsLGEsZCl7Y29uc3QgaD1bXSxmPWM9PT1sO2xldCB2O3JldHVybiBmfHwodj1oRChsKSksYy5mb3JFYWNoKE09PntsZXQgRD0hMTsoZnx8dihN''@;'; put 'put ''KSkmJihEPSEwKTtjb25zdCBVPXtjaGVja2VkOkQsdmFsdWU6TSx2aXN1YWxWYWx1ZTp0NXQoTSxhKX07ZCYmZChVKSxoLnB1c2goVSl9KSxofWZ1bmN0aW9uIGZyZShjLGwpe3JldHVybiBjLmdldChYN2UoYyxsKSl9ZnVuY3Rpb24gWDdlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''Yz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1lZ2UoKTt2YXIgZkQ9bmV3IFdlYWtNYXA7Y2xhc3MgcEQgZXh0ZW5kcyBIMntzdGF0''@;'; put 'put ''aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIEszKHtocmVmOiIjIix0YWdOYW1lOiJhIix0YWJJbmRleDotMSxyb2xlOiJidXR0b24ifSl9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLFB1KHBELkRFRkFVTFRTLGEpKSxmdW5jdGlvbiBuNXQoYyxsLGEpeyhmdW5jdGlvbiByNXQoYyxsKXtpZihs''@;'; put 'put ''LmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfSh0aGlzLGZELHZvaWQgMCl9YnVpbGQoKXtzdXBlci5idWlsZCgpLGZ1bmN0aW9uIGk1dChj''@;'; put 'put ''LGwsYSl7Yy5zZXQoWDdlKGMsbCksYSl9KGZELHRoaXMsdGhpcy5fZWxlbWVudC5maXJzdENoaWxkKX11cGRhdGUoKXt0aGlzLmlzQnVpbHQoKSYmKGZyZShmRCx0aGlzKS50ZXh0Q29udGVudD10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLnRleHRDb250ZW50KSl9Zm9j''@;'; put 'put ''dXMoKXt0aGlzLmlzQnVpbHQoKSYmZnJlKGZELHRoaXMpLmZvY3VzKCl9YWN0aXZhdGUoKXtmcmUoZkQsdGhpcykuY2xpY2soKX19ZnVuY3Rpb24gQkMoYyxsLGEpe3E3ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gcTdlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigi''@;'; put 'put ''Q2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBVbyhjLGwpe3JldHVybiBjLmdldChqQyhjLGwpKX1mdW5jdGlvbiBscChjLGwsYSl7cmV0dXJuIGMuc2V0KGpDKGMsbCksYSksYX1mdW5jdGlvbiBqQyhjLGws''@;'; put 'put ''YSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgSjdlPSJtdWx0aXBsZVNlbGVj''@;'; put 'put ''dC5pdGVtQm94Ijt2YXIgY3A9bmV3IFdlYWtNYXAsa2M9bmV3IFdlYWtNYXAscHJlPW5ldyBXZWFrTWFwLFI1PW5ldyBXZWFrTWFwLG44PW5ldyBXZWFrTWFwLHI4PW5ldyBXZWFrTWFwLGdEPW5ldyBXZWFrU2V0O2NsYXNzIG1EIGV4dGVuZHMgSDJ7c3RhdGljIGdldCBERUZBVUxUUygpe3Jl''@;'; put 'put ''dHVybiBLMyh7Y2xhc3NOYW1lOiJodFVJTXVsdGlwbGVTZWxlY3QiLHZhbHVlOltdfSl9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLFB1KG1ELkRFRkFVTFRTLGEpKSxmdW5jdGlvbiBhNXQoYyxsKXtxN2UoYyxsKSxsLmFkZChjKX0odGhpcyxnRCksQkModGhpcyxjcCxbXSksQkModGhpcyxr''@;'; put 'put ''Yyx2b2lkIDApLEJDKHRoaXMscHJlLHZvaWQgMCksQkModGhpcyxSNSx2b2lkIDApLEJDKHRoaXMsbjgsdm9pZCAwKSxCQyh0aGlzLHI4LHZvaWQgMCksbHAoUjUsdGhpcyxuZXcgZTgodGhpcy5ob3Qse3BsYWNlaG9sZGVyOk9lZSxjbGFzc05hbWU6Imh0VUlNdWx0aXBsZVNlbGVjdFNlYXJj''@;'; put 'put ''aCJ9KSksbHAobjgsdGhpcyxuZXcgcEQodGhpcy5ob3Qse3RleHRDb250ZW50OkRlZSxjbGFzc05hbWU6Imh0VUlTZWxlY3RBbGwifSkpLGxwKHI4LHRoaXMsbmV3IHBEKHRoaXMuaG90LHt0ZXh0Q29udGVudDpJZWUsY2xhc3NOYW1lOiJodFVJQ2xlYXJBbGwifSkpLHRoaXMucmVnaXN0ZXJI''@;'; put 'put ''b29rcygpfWdldEl0ZW1zQm94KCl7cmV0dXJuIFVvKGtjLHRoaXMpfXJlZ2lzdGVySG9va3MoKXtVbyhSNSx0aGlzKS5hZGRMb2NhbEhvb2soImtleWRvd24iLGw9PmpDKGdELHRoaXMsczV0KS5jYWxsKHRoaXMsbCkpLFVvKFI1LHRoaXMpLmFkZExvY2FsSG9vaygiaW5wdXQiLGw9PmpDKGdE''@;'; put 'put ''LHRoaXMsbzV0KS5jYWxsKHRoaXMsbCkpLFVvKG44LHRoaXMpLmFkZExvY2FsSG9vaygiY2xpY2siLGw9PmpDKGdELHRoaXMsbDV0KS5jYWxsKHRoaXMsbCkpLFVvKHI4LHRoaXMpLmFkZExvY2FsSG9vaygiY2xpY2siLGw9PmpDKGdELHRoaXMsYzV0KS5jYWxsKHRoaXMsbCkpfXNldEl0ZW1z''@;'; put 'put ''KGwpe3ZhciBhO2xwKGNwLHRoaXMsbCksbnVsbD09PShhPVVvKGtjLHRoaXMpKXx8dm9pZCAwPT09YXx8YS5sb2FkRGF0YShVbyhjcCx0aGlzKSl9c2V0TG9jYWxlKGwpe2xwKHByZSx0aGlzLGwpfWdldExvY2FsZSgpe3JldHVybiBVbyhwcmUsdGhpcyl9Z2V0SXRlbXMoKXtyZXR1cm5bLi4u''@;'; put 'put ''VW8oY3AsdGhpcyldfWdldFZhbHVlKCl7cmV0dXJuIGZ1bmN0aW9uIGQ1dChjKXtjb25zdCBsPVtdO3JldHVybiBjLmZvckVhY2goYT0+e2EuY2hlY2tlZCYmbC5wdXNoKGEudmFsdWUpfSksbH0oVW8oY3AsdGhpcykpfWdldFNlYXJjaElucHV0RWxlbWVudCgpe3JldHVybiBVbyhSNSx0aGlz''@;'; put 'put ''KX1nZXRTZWxlY3RBbGxFbGVtZW50KCl7cmV0dXJuIFVvKG44LHRoaXMpfWdldENsZWFyQWxsRWxlbWVudCgpe3JldHVybiBVbyhyOCx0aGlzKX1pc1NlbGVjdGVkQWxsVmFsdWVzKCl7cmV0dXJuIFVvKGNwLHRoaXMpLmxlbmd0aD09PXRoaXMuZ2V0VmFsdWUoKS5sZW5ndGh9YnVpbGQoKXt2''@;'; put 'put ''YXIgbDtzdXBlci5idWlsZCgpO2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlzLmhvdCxkPWEuY3JlYXRlRWxlbWVudCgiZGl2IiksaD1uZXcgSDIodGhpcy5ob3Qse2NsYXNzTmFtZToiaHRVSVNlbGVjdGlvbkNvbnRyb2xzIixjaGlsZHJlbjpbVW8objgsdGhpcyksVW8ocjgsdGhpcyldfSk7''@;'; put 'put ''dGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChVbyhSNSx0aGlzKS5lbGVtZW50KSx0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGguZWxlbWVudCksdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChkKSxudWxsPT09KGw9VW8oa2MsdGhpcykpfHx2b2lkIDA9PT1sfHxsLmRlc3Ryb3koKSxpaShk''@;'; put 'put ''LCJodFVJTXVsdGlwbGVTZWxlY3RIb3QiKSxscChrYyx0aGlzLG5ldyB0aGlzLmhvdC5jb25zdHJ1Y3RvcihkLHtkYXRhOltbXV0sY29sdW1uczpbe2RhdGE6ImNoZWNrZWQiLHR5cGU6ImNoZWNrYm94IixsYWJlbDp7cHJvcGVydHk6InZpc3VhbFZhbHVlIixwb3NpdGlvbjoiYWZ0ZXIifX1d''@;'; put 'put ''LGJlZm9yZVJlbmRlcmVyOihNLEQsVSx0ZSxvZSx2ZSk9PntNLnRpdGxlPXZlLmluc3RhbmNlLmdldERhdGFBdFJvd1Byb3AoRCx2ZS5sYWJlbC5wcm9wZXJ0eSl9LGFmdGVyTGlzdGVuOigpPT57dGhpcy5ydW5Mb2NhbEhvb2tzKCJmb2N1cyIsdGhpcyl9LGJlZm9yZU9uQ2VsbE1vdXNlVXA6''@;'; put 'put ''KCk9PntVbyhrYyx0aGlzKS5saXN0ZW4oKX0sbW9kaWZ5Q29sV2lkdGg6TT0+e2NvbnN0IEQ9VW8oa2MsdGhpcykuY29udGFpbmVyLnNjcm9sbFdpZHRoLXd1KGEpO3JldHVybiB2b2lkIDAhPT1NJiZNPEQ/RDpNfSxhdXRvQ29sdW1uU2l6ZTohMCxhdXRvUm93U2l6ZTohMSxoaWRkZW5Sb3dz''@;'; put 'put ''OiEwLG1heENvbHM6MSxhdXRvV3JhcENvbDohMCxoZWlnaHQ6MTEwLGNvcHlQYXN0ZTohMSxkaXNhYmxlVmlzdWFsU2VsZWN0aW9uOiJhcmVhIixmaWxsSGFuZGxlOiExLGZyYWdtZW50U2VsZWN0aW9uOiJjZWxsIix0YWJNb3Zlczp7cm93OjEsY29sOjB9LHRoZW1lTmFtZTp0aGlzLmhvdC5n''@;'; put 'put ''ZXRDdXJyZW50VGhlbWVOYW1lKCksbGF5b3V0RGlyZWN0aW9uOnRoaXMuaG90LmlzUnRsKCk/InJ0bCI6Imx0ciJ9KSksVW8oa2MsdGhpcykuaW5pdCgpO2NvbnN0IHY9VW8oa2MsdGhpcykuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpO3YucmVtb3ZlU2hvcnRjdXRz''@;'; put 'put ''QnlLZXlzKFsiVGFiIl0pLHYucmVtb3ZlU2hvcnRjdXRzQnlLZXlzKFsiU2hpZnQiLCJUYWIiXSksdi5hZGRTaG9ydGN1dCh7a2V5czpbWyJFc2NhcGUiXV0sY2FsbGJhY2s6TT0+e3RoaXMucnVuTG9jYWxIb29rcygia2V5ZG93biIsTSx0aGlzKX0sZ3JvdXA6SjdlfSksdi5hZGRTaG9ydGN1''@;'; put 'put ''dCh7a2V5czpbWyJUYWIiXSxbIlNoaWZ0IiwiVGFiIl1dLGNhbGxiYWNrOk09PntVbyhrYyx0aGlzKS5kZXNlbGVjdENlbGwoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImtleWRvd24iLE0sdGhpcyksdGhpcy5ydW5Mb2NhbEhvb2tzKCJsaXN0VGFiS2V5ZG93biIsTSx0aGlzKX0sZ3JvdXA6Sjdl''@;'; put 'put ''fSl9Zm9jdXMoKXt0aGlzLmlzQnVpbHQoKSYmVW8oa2MsdGhpcykubGlzdGVuKCl9cmVzZXQoKXtVbyhSNSx0aGlzKS5yZXNldCgpLFVvKG44LHRoaXMpLnJlc2V0KCksVW8ocjgsdGhpcykucmVzZXQoKX11cGRhdGUoKXshdGhpcy5pc0J1aWx0KCl8fDA9PT1VbyhrYyx0aGlzKS5yb290RWxl''@;'; put 'put ''bWVudC5vZmZzZXRIZWlnaHR8fChVbyhrYyx0aGlzKS51cGRhdGVTZXR0aW5ncyh7ZGF0YTp1NXQoVW8oY3AsdGhpcyksdGhpcy5vcHRpb25zLnZhbHVlKX0pLHN1cGVyLnVwZGF0ZSgpKX1kZXN0cm95KCl7dmFyIGw7bnVsbD09PShsPVVvKGtjLHRoaXMpKXx8dm9pZCAwPT09bHx8bC5kZXN0''@;'; put 'put ''cm95KCksVW8oUjUsdGhpcykuZGVzdHJveSgpLFVvKHI4LHRoaXMpLmRlc3Ryb3koKSxVbyhuOCx0aGlzKS5kZXN0cm95KCksbHAoUjUsdGhpcyxudWxsKSxscChyOCx0aGlzLG51bGwpLGxwKG44LHRoaXMsbnVsbCksbHAoa2MsdGhpcyxudWxsKSxscChjcCx0aGlzLG51bGwpLHN1cGVyLmRl''@;'; put 'put ''c3Ryb3koKX19ZnVuY3Rpb24gbzV0KGMpe2NvbnN0IGw9Yy50YXJnZXQudmFsdWUudG9Mb2NhbGVMb3dlckNhc2UodGhpcy5nZXRMb2NhbGUoKSk7aWYoImFwcGx5Ij09PXRoaXMub3B0aW9ucy5zZWFyY2hNb2RlKXtjb25zdCBhPVVvKGtjLHRoaXMpLmdldFBsdWdpbigiaGlkZGVuUm93cyIp''@;'; put 'put ''O2Euc2hvd1Jvd3MoYS5nZXRIaWRkZW5Sb3dzKCkpLFVvKGNwLHRoaXMpLmZvckVhY2goKGQsaCk9PntkLmNoZWNrZWQ9YCR7ZC52YWx1ZX1gLnRvTG9jYWxlTG93ZXJDYXNlKHRoaXMuZ2V0TG9jYWxlKCkpLmluZGV4T2YobCk+PTAsZC5jaGVja2VkfHxhLmhpZGVSb3coaCl9KSxVbyhrYyx0''@;'; put 'put ''aGlzKS52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLFVvKGtjLHRoaXMpLnJlbmRlcigpfWVsc2V7bGV0IGE7YT0iIj09PWw/Wy4uLlVvKGNwLHRoaXMpXTpVbyhjcCx0aGlzKS5maWx0ZXIoZD0+YCR7ZC52YWx1ZX1gLnRvTG9jYWxlTG93ZXJDYXNlKHRoaXMuZ2V0TG9jYWxlKCkpLmluZGV4''@;'; put 'put ''T2YobCk+PTApLFVvKGtjLHRoaXMpLmxvYWREYXRhKGEpfX1mdW5jdGlvbiBzNXQoYyl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJrZXlkb3duIixjLHRoaXMpLGNKKHE5LGMua2V5Q29kZSkoIkFSUk9XX0RPV04iKSYmKGMucHJldmVudERlZmF1bHQoKSxFMihjKSxVbyhrYyx0aGlzKS5saXN0ZW4o''@;'; put 'put ''KSxVbyhrYyx0aGlzKS5zZWxlY3RDZWxsKDAsMCkpfWZ1bmN0aW9uIGw1dChjKXtjb25zdCBsPVtdO2MucHJldmVudERlZmF1bHQoKSxVbyhrYyx0aGlzKS5nZXRTb3VyY2VEYXRhKCkuZm9yRWFjaCgoYSxkKT0+e2EuY2hlY2tlZD0hMCxsLnB1c2goYVEoYSxkKVswXSl9KSxVbyhrYyx0aGlz''@;'; put 'put ''KS5zZXRTb3VyY2VEYXRhQXRDZWxsKGwpfWZ1bmN0aW9uIGM1dChjKXtjb25zdCBsPVtdO2MucHJldmVudERlZmF1bHQoKSxVbyhrYyx0aGlzKS5nZXRTb3VyY2VEYXRhKCkuZm9yRWFjaCgoYSxkKT0+e2EuY2hlY2tlZD0hMSxsLnB1c2goYVEoYSxkKVswXSl9KSxVbyhrYyx0aGlzKS5zZXRT''@;'; put 'put ''b3VyY2VEYXRhQXRDZWxsKGwpfWZ1bmN0aW9uIHU1dChjLGwpe2NvbnN0IGE9aEQobCk7cmV0dXJuIGMubWFwKGQ9PihkLmNoZWNrZWQ9YShkLnZhbHVlKSxkKSl9Y29uc3QgTHY9ImJ5X3ZhbHVlIjtmdW5jdGlvbiBRN2UoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGc1dChjKXt2YXIgbD1m''@;'; put 'put ''dW5jdGlvbiBtNXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIFNCKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1WdShMdixmdW5jdGlvbiBoNXQoYyxsKXtsZXRbYV09bDtyZXR1cm4gYShjLnZhbHVlKX0se25hbWU6IkJ5IHZhbHVlIixpbnB1dHNDb3VudDowLGlucHV0VmFsdWVzRGVjb3Jh''@;'; put 'put ''dG9yKGMpe2xldFtsXT1jO3JldHVybltoRChsKV19LHNob3dPcGVyYXRvcnM6ITF9KTt2YXIgdDllLHZEPW5ldyBXZWFrU2V0O2NsYXNzIHY1dCBleHRlbmRzIG5Ee2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCx7aWQ6YS5pZCxzdGF0ZWxlc3M6ITF9KSxmdW5jdGlvbiBmNXQoYyxsKXsoZnVu''@;'; put 'put ''Y3Rpb24gcDV0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsdkQpLFE3ZSh0aGlzLCJuYW1lIiwiIiksUTdlKHRo''@;'; put 'put ''aXMsInNlYXJjaE1vZGUiLHZvaWQgMCksdGhpcy5uYW1lPWEubmFtZSx0aGlzLnNlYXJjaE1vZGU9YS5zZWFyY2hNb2RlLHRoaXMuZWxlbWVudHMucHVzaChuZXcgbUQodGhpcy5ob3Qse3NlYXJjaE1vZGU6dGhpcy5zZWFyY2hNb2RlfSkpLHRoaXMucmVnaXN0ZXJIb29rcygpfXJlZ2lzdGVy''@;'; put 'put ''SG9va3MoKXt0aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpLmFkZExvY2FsSG9vaygia2V5ZG93biIsbD0+U0IodkQsdGhpcyx5NXQpLmNhbGwodGhpcyxsKSkuYWRkTG9jYWxIb29rKCJsaXN0VGFiS2V5ZG93biIsbD0+dGhpcy5ydW5Mb2NhbEhvb2tzKCJsaXN0VGFiS2V5ZG93biIs''@;'; put 'put ''bCkpLHRoaXMuaG90LmFkZEhvb2soIm1vZGlmeUZpbHRlcnNNdWx0aVNlbGVjdFZhbHVlIiwobCxhKT0+U0IodkQsdGhpcyxiNXQpLmNhbGwodGhpcyxsLGEpKX1nZXRFbGVtZW50cygpe2NvbnN0IGw9dGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKTtyZXR1cm5bbC5nZXRTZWFyY2hJ''@;'; put 'put ''bnB1dEVsZW1lbnQoKSxsLmdldFNlbGVjdEFsbEVsZW1lbnQoKSxsLmdldENsZWFyQWxsRWxlbWVudCgpLHRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCldfXNldFN0YXRlKGwpe2lmKHRoaXMucmVzZXQoKSxsJiZsLmNvbW1hbmQua2V5PT09THYpe2NvbnN0IGE9dGhpcy5nZXRNdWx0''@;'; put 'put ''aXBsZVNlbGVjdEVsZW1lbnQoKTthLnNldEl0ZW1zKGwuaXRlbXNTbmFwc2hvdCksYS5zZXRWYWx1ZShsLmFyZ3NbMF0pLGEuc2V0TG9jYWxlKGwubG9jYWxlKX19Z2V0U3RhdGUoKXtjb25zdCBsPXRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCksYT1sLmdldEl0ZW1zKCk7cmV0dXJu''@;'; put 'put ''e2NvbW1hbmQ6e2tleTpsLmlzU2VsZWN0ZWRBbGxWYWx1ZXMoKXx8IWEubGVuZ3RoP1kwOkx2fSxhcmdzOltsLmdldFZhbHVlKCldLGl0ZW1zU25hcHNob3Q6YX19dXBkYXRlU3RhdGUobCl7Y29uc3QgYT0oZCxoLGYsdixNKT0+e2NvbnN0W0RdPVM2KGgsb2U9Pm9lLm5hbWU9PT1MdiksVT17''@;'; put 'put ''fSx0ZT10aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKFZOKTtpZihEKXtjb25zdCBvZT12KGQsTSksdmU9WnMob2UsbXQ9Pm10LnZhbHVlKSx3ZT1uZXcgTWFwKG9lLm1hcChtdD0+W210LnZhbHVlLHRoaXMuaG90LmdldENlbGxNZXRhKG10Lm1ldGEudmlzdWFsUm93LG10Lm1ldGEudmlz''@;'; put 'put ''dWFsQ29sKV0pKSxGZT1ocmUodmUpO2YmJihELmFyZ3NbMF09Zik7Y29uc3QgV2U9W10sbnQ9SzdlKEZlLEQuYXJnc1swXSx0ZSxtdD0+e210LmNoZWNrZWQmJldlLnB1c2gobXQudmFsdWUpLFNCKHZELHRoaXMsZTllKS5jYWxsKHRoaXMsbXQsd2UpfSk7VS5sb2NhbGU9dGhpcy5ob3QuZ2V0''@;'; put 'put ''Q2VsbE1ldGEoMCxsLmVkaXRlZENvbmRpdGlvblN0YWNrLmNvbHVtbikubG9jYWxlLFUuYXJncz1bV2VdLFUuY29tbWFuZD1SdihMdiksVS5pdGVtc1NuYXBzaG90PW50fWVsc2UgVS5hcmdzPVtdLFUuY29tbWFuZD1SdihZMCk7dGhpcy5zdGF0ZS5zZXRWYWx1ZUF0SW5kZXgoZCxVKX07YShs''@;'; put 'put ''LmVkaXRlZENvbmRpdGlvblN0YWNrLmNvbHVtbixsLmVkaXRlZENvbmRpdGlvblN0YWNrLmNvbmRpdGlvbnMsbC5jb25kaXRpb25BcmdzQ2hhbmdlLGwuZmlsdGVyZWRSb3dzRmFjdG9yeSksbC5kZXBlbmRlbnRDb25kaXRpb25TdGFja3MubGVuZ3RoJiZhKGwuZGVwZW5kZW50Q29uZGl0aW9u''@;'; put 'put ''U3RhY2tzWzBdLmNvbHVtbixsLmRlcGVuZGVudENvbmRpdGlvblN0YWNrc1swXS5jb25kaXRpb25zLGwuY29uZGl0aW9uQXJnc0NoYW5nZSxsLmZpbHRlcmVkUm93c0ZhY3RvcnksbC5lZGl0ZWRDb25kaXRpb25TdGFjayl9Z2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''ZWxlbWVudHMuZmlsdGVyKGw9PmwgaW5zdGFuY2VvZiBtRClbMF19Z2V0TWVudUl0ZW1EZXNjcmlwdG9yKCl7cmV0dXJue2tleTp0aGlzLmlkLG5hbWU6dGhpcy5uYW1lLGlzQ29tbWFuZDohMSxkaXNhYmxlU2VsZWN0aW9uOiEwLGhpZGRlbjooKT0+dGhpcy5pc0hpZGRlbigpLHJlbmRlcmVy''@;'; put 'put ''OihsLGEsZCxoLGYsdik9PntpaShhLnBhcmVudE5vZGUsImh0RmlsdGVyc01lbnVWYWx1ZSIpO2NvbnN0IE09dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBpaShNLCJodEZpbHRlcnNNZW51TGFiZWwiKSxNLnRleHRDb250ZW50PXYsYS5hcHBlbmRD''@;'; put 'put ''aGlsZChNKSxhLnBhcmVudEVsZW1lbnQuaGFzQXR0cmlidXRlKCJnaG9zdC10YWJsZSIpfHxLbih0aGlzLmVsZW1lbnRzLEQ9PmEuYXBwZW5kQ2hpbGQoRC5lbGVtZW50KSksYX19fXJlc2V0KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKFZOKSxhPXRoaXMuX2dldENv''@;'; put 'put ''bHVtblZpc2libGVWYWx1ZXMoKSxkPWEubWFwKEQ9PkQudmFsdWUpLGg9bmV3IE1hcChhLm1hcChEPT5bRC52YWx1ZSxELm1ldGFdKSksZj1ocmUoZCksdj1LN2UoZixmLGwsRD0+e1NCKHZELHRoaXMsZTllKS5jYWxsKHRoaXMsRCxoKX0pO3RoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50''@;'; put 'put ''KCkuc2V0SXRlbXModiksc3VwZXIucmVzZXQoKSx0aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpLnNldFZhbHVlKGYpO2NvbnN0IE09dGhpcy5ob3QuZ2V0UGx1Z2luKCJmaWx0ZXJzIikuZ2V0U2VsZWN0ZWRDb2x1bW4oKTtudWxsIT09TSYmdGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVs''@;'; put 'put ''ZW1lbnQoKS5zZXRMb2NhbGUodGhpcy5ob3QuZ2V0Q2VsbE1ldGEoMCxNLnZpc3VhbEluZGV4KS5sb2NhbGUpfV9nZXRDb2x1bW5WaXNpYmxlVmFsdWVzKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRQbHVnaW4oImZpbHRlcnMiKS5nZXRTZWxlY3RlZENvbHVtbigpO3JldHVybiBudWxsPT09bD9b''@;'; put 'put ''XTpacyh0aGlzLmhvdC5nZXREYXRhQXRDb2wobC52aXN1YWxJbmRleCksKGEsZCk9Pih7dmFsdWU6ZHJlKGEpLG1ldGE6dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZCxsLnZpc3VhbEluZGV4KX0pKX19ZnVuY3Rpb24geTV0KGMpe3E5KGMua2V5Q29kZSwiRVNDQVBFIikmJih0aGlzLnJ1bkxvY2Fs''@;'; put 'put ''SG9va3MoImNhbmNlbCIpLEUyKGMpKSxxOShjLmtleUNvZGUsIkVOVEVSIikmJigiYXBwbHkiPT09dGhpcy5zZWFyY2hNb2RlJiZ0aGlzLnJ1bkxvY2FsSG9va3MoImFjY2VwdCIpLEUyKGMpKX1mdW5jdGlvbiBlOWUoYyxsKXt0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlGaWx0ZXJzTXVsdGlT''@;'; put 'put ''ZWxlY3RWYWx1ZSIpJiYoYy52aXN1YWxWYWx1ZT10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5RmlsdGVyc011bHRpU2VsZWN0VmFsdWUiLGMudmlzdWFsVmFsdWUsbC5nZXQoYy52YWx1ZSkpKX1mdW5jdGlvbiBiNXQoYyxsKXtyZXR1cm4ibnVtZXJpYyI9PT1sLnR5cGU/QjZlKGMsbCk6Y312''@;'; put 'put ''YXIgbjllPW5ldyBXZWFrU2V0O2NsYXNzIHlEIGV4dGVuZHMgbkR7c3RhdGljIGdldCBCVVRUT05fT0soKXtyZXR1cm4ib2sifXN0YXRpYyBnZXQgQlVUVE9OX0NBTkNFTCgpe3JldHVybiJjYW5jZWwifWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCx7aWQ6YS5pZCxzdGF0ZWxlc3M6ITB9KSxm''@;'; put 'put ''dW5jdGlvbiBfNXQoYyxsKXsoZnVuY3Rpb24gdzV0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsbjllKSxmdW5j''@;'; put 'put ''dGlvbiBDNXQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFM1dChjKXt2YXIgbD1mdW5jdGlvbiBNNXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVm''@;'; put 'put ''YXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJz''@;'; put 'put ''eW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJuYW1lIiwiIiksdGhpcy5uYW1lPWEubmFtZSx0aGlzLmVsZW1l''@;'; put 'put ''bnRzLnB1c2gobmV3IGU4KHRoaXMuaG90LHt0eXBlOiJidXR0b24iLHZhbHVlOlJlZSxjbGFzc05hbWU6Imh0VUlCdXR0b24gaHRVSUJ1dHRvbk9LIixpZGVudGlmaWVyOnlELkJVVFRPTl9PS30pKSx0aGlzLmVsZW1lbnRzLnB1c2gobmV3IGU4KHRoaXMuaG90LHt0eXBlOiJidXR0b24iLHZh''@;'; put 'put ''bHVlOkxlZSxjbGFzc05hbWU6Imh0VUlCdXR0b24gaHRVSUJ1dHRvbkNhbmNlbCIsaWRlbnRpZmllcjp5RC5CVVRUT05fQ0FOQ0VMfSkpLHRoaXMucmVnaXN0ZXJIb29rcygpfXJlZ2lzdGVySG9va3MoKXtLbih0aGlzLmVsZW1lbnRzLGw9PntsLmFkZExvY2FsSG9vaygiY2xpY2siLChhLGQp''@;'; put 'put ''PT5mdW5jdGlvbiB4NXQoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfShuOWUs''@;'; put 'put ''dGhpcyxFNXQpLmNhbGwodGhpcyxhLGQpKX0pfWdldE1lbnVJdGVtRGVzY3JpcHRvcigpe3JldHVybntrZXk6dGhpcy5pZCxuYW1lOnRoaXMubmFtZSxpc0NvbW1hbmQ6ITEsZGlzYWJsZVNlbGVjdGlvbjohMCxoaWRkZW46KCk9PnRoaXMuaXNIaWRkZW4oKSxyZW5kZXJlcjoobCxhKT0+KGlp''@;'; put 'put ''KGEucGFyZW50Tm9kZSwiaHRGaWx0ZXJzTWVudUFjdGlvbkJhciIpLEtuKHRoaXMuZWxlbWVudHMsZD0+YS5hcHBlbmRDaGlsZChkLmVsZW1lbnQpKSxhKX19YWNjZXB0KCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJhY2NlcHQiKX1jYW5jZWwoKXt0aGlzLnJ1bkxvY2FsSG9va3MoImNhbmNlbCIp''@;'; put 'put ''fX1mdW5jdGlvbiBFNXQoYyxsKXtsLm9wdGlvbnMuaWRlbnRpZmllcj09PXQ5ZS5CVVRUT05fT0s/dGhpcy5hY2NlcHQoKTp0aGlzLmNhbmNlbCgpfWZ1bmN0aW9uIGdyZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gVDV0KGMpe3ZhciBsPWZ1bmN0aW9uIEE1dChjLGwpe2lmKCJvYmplY3Qi''@;'; put 'put ''IT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVz''@;'; put 'put ''dCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFi''@;'; put 'put ''bGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9dDllPXlEO2NvbnN0IHI5ZT0iQ29uZGl0aW9uQ29sbGVjdGlvbi5maWx0ZXJpbmdTdGF0ZXMiO2NsYXNzIGk5ZXtjb25zdHJ1Y3RvcihsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJn''@;'; put 'put ''dW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO2dyZSh0aGlzLCJob3QiLHZvaWQgMCksZ3JlKHRoaXMsImlzTWFwUmVnaXN0cmFibGUiLHZvaWQgMCksZ3JlKHRoaXMsImZpbHRlcmluZ1N0YXRlcyIsbmV3IGtOKSx0aGlzLmhvdD1sLHRoaXMuaXNNYXBSZWdpc3RyYWJsZT1hLCEwPT09dGhpcy5p''@;'; put 'put ''c01hcFJlZ2lzdHJhYmxlP3RoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHI5ZSx0aGlzLmZpbHRlcmluZ1N0YXRlcyk6dGhpcy5maWx0ZXJpbmdTdGF0ZXMuaW5pdCh0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROdW1iZXJPZkluZGV4ZXMoKSl9aXNFbXB0eSgp''@;'; put 'put ''e3JldHVybiAwPT09dGhpcy5nZXRGaWx0ZXJlZENvbHVtbnMoKS5sZW5ndGh9aXNNYXRjaChsLGEpe3ZhciBkO2NvbnN0IGg9dGhpcy5maWx0ZXJpbmdTdGF0ZXMuZ2V0VmFsdWVBdEluZGV4KGEpLGY9bnVsbCE9PShkPWg/LmNvbmRpdGlvbnMpJiZ2b2lkIDAhPT1kP2Q6W10sdj1oPy5vcGVy''@;'; put 'put ''YXRpb247cmV0dXJuIHRoaXMuaXNNYXRjaEluQ29uZGl0aW9ucyhmLGwsdil9aXNNYXRjaEluQ29uZGl0aW9ucyhsLGEpe3JldHVybiFsLmxlbmd0aHx8ZnVuY3Rpb24gSGd0KGMpe2lmKCF1RFtjXSl0aHJvdyBFcnJvcihgT3BlcmF0aW9uIHdpdGggaWQgIiR7Y30iIGRvZXMgbm90IGV4aXN0''@;'; put 'put ''LmApO2NvbnN0IGw9dURbY10uZnVuYztyZXR1cm4gZnVuY3Rpb24oYSxkKXtyZXR1cm4gbChhLGQpfX0oYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnQ4KShsLGEpfWFkZENvbmRpdGlvbihsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+''@;'; put 'put ''MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp0OCxoPWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106dm9pZCAwO2NvbnN0IGY9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoMCxsKS5sb2NhbGUsdj1hLmFyZ3MubWFwKHRlPT4ic3RyaW5nIj09dHlwZW9mIHRlP3RlLnRv''@;'; put 'put ''TG9jYWxlTG93ZXJDYXNlKGYpOnRlKSxNPWEubmFtZXx8YS5jb21tYW5kLmtleTt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZUFkZCIsbCk7Y29uc3QgRD10aGlzLmdldE9wZXJhdGlvbihsKTtpZihEKXtpZihEIT09ZCl0aHJvdyBFcnJvcihYc2BUaGUgY29sdW1uIG9mIGluZGV4ICR7bH0g''@;'; put 'put ''aGFzIGJlZW4gYWxyZWFkeSBhcHBsaWVkIHdpdGggYSBcYCR7RH1cYFx4MjAKICAgICAgICBmaWx0ZXIgb3BlcmF0aW9uLiBVc2UgXGByZW1vdmVDb25kaXRpb25zXGAgdG8gY2xlYXIgdGhlIGN1cnJlbnQgY29uZGl0aW9ucyBhbmQgdGhlbiBhZGQgbmV3IG9uZXMuXHgyMAogICAgICAgIE1p''@;'; put 'put ''bmQgdGhhdCB5b3UgY2Fubm90IG1peCBkaWZmZXJlbnQgdHlwZXMgb2Ygb3BlcmF0aW9ucyAoZm9yIGluc3RhbmNlLCBpZiB5b3UgdXNlIFxgY29uanVuY3Rpb25cYCxceDIwCiAgICAgICAgdXNlIGl0IGNvbnNlcXVlbnRseSBmb3IgYSBwYXJ0aWN1bGFyIGNvbHVtbikuYCl9ZWxzZSBpZihi''@;'; put 'put ''Yyh1RFtkXSkpdGhyb3cgbmV3IEVycm9yKFhzYFVuZXhwZWN0ZWQgb3BlcmF0aW9uIG5hbWVkIFxgJHtkfVxgLiBQb3NzaWJsZSBvbmVzIGFyZVx4MjAKICAgICAgICBcYGRpc2p1bmN0aW9uXGAgYW5kIFxgY29uanVuY3Rpb25cYC5gKTtjb25zdCBVPXRoaXMuZ2V0Q29uZGl0aW9ucyhsKTsw''@;'; put 'put ''PT09VS5sZW5ndGg/dGhpcy5maWx0ZXJpbmdTdGF0ZXMuc2V0VmFsdWVBdEluZGV4KGwse29wZXJhdGlvbjpkLGNvbmRpdGlvbnM6W3tuYW1lOk0sYXJnczp2LGZ1bmM6UTYoTSx2KX1dfSxoKTpVLnB1c2goe25hbWU6TSxhcmdzOnYsZnVuYzpRNihNLHYpfSksdGhpcy5ydW5Mb2NhbEhvb2tz''@;'; put 'put ''KCJhZnRlckFkZCIsbCl9Z2V0Q29uZGl0aW9ucyhsKXt2YXIgYSxkO3JldHVybiBudWxsIT09KGE9bnVsbD09PShkPXRoaXMuZmlsdGVyaW5nU3RhdGVzLmdldFZhbHVlQXRJbmRleChsKSl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuY29uZGl0aW9ucykmJnZvaWQgMCE9PWE/YTpbXX1nZXRPcGVy''@;'; put 'put ''YXRpb24obCl7dmFyIGE7cmV0dXJuIG51bGw9PT0oYT10aGlzLmZpbHRlcmluZ1N0YXRlcy5nZXRWYWx1ZUF0SW5kZXgobCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLm9wZXJhdGlvbn1nZXRGaWx0ZXJlZENvbHVtbnMoKXtyZXR1cm4gdGhpcy5maWx0ZXJpbmdTdGF0ZXMuZ2V0RW50cmllcygp''@;'; put 'put ''Lm1hcChsPT57bGV0W2FdPWw7cmV0dXJuIGF9KX1nZXRDb2x1bW5TdGFja1Bvc2l0aW9uKGwpe3JldHVybiB0aGlzLmdldEZpbHRlcmVkQ29sdW1ucygpLmluZGV4T2YobCl9ZXhwb3J0QWxsQ29uZGl0aW9ucygpe3JldHVybiB0aGlzLmZpbHRlcmluZ1N0YXRlcy5nZXRFbnRyaWVzKCkucmVk''@;'; put 'put ''dWNlKChsLGEpPT57bGV0W2Qse29wZXJhdGlvbjpoLGNvbmRpdGlvbnM6Zn1dPWE7cmV0dXJuIGwucHVzaCh7Y29sdW1uOmQsb3BlcmF0aW9uOmgsY29uZGl0aW9uczpmLm1hcCh2PT57bGV0e25hbWU6TSxhcmdzOkR9PXY7cmV0dXJue25hbWU6TSxhcmdzOlsuLi5EXX19KX0pLGx9LFtdKX1p''@;'; put 'put ''bXBvcnRBbGxDb25kaXRpb25zKGwpe3RoaXMuY2xlYW4oKSxsLmZvckVhY2goYT0+e2EuY29uZGl0aW9ucy5mb3JFYWNoKGQ9PnRoaXMuYWRkQ29uZGl0aW9uKGEuY29sdW1uLGQpKX0pfXJlbW92ZUNvbmRpdGlvbnMobCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVSZW1vdmUiLGwpLHRo''@;'; put 'put ''aXMuZmlsdGVyaW5nU3RhdGVzLmNsZWFyVmFsdWUobCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclJlbW92ZSIsbCl9Y2xlYW4oKXt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZUNsZWFuIiksdGhpcy5maWx0ZXJpbmdTdGF0ZXMuY2xlYXIoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVy''@;'; put 'put ''Q2xlYW4iKX1oYXNDb25kaXRpb25zKGwsYSl7Y29uc3QgZD10aGlzLmdldENvbmRpdGlvbnMobCk7cmV0dXJuIGE/ZC5zb21lKGg9PmgubmFtZT09PWEpOmQubGVuZ3RoPjB9ZGVzdHJveSgpe3RoaXMuaXNNYXBSZWdpc3RyYWJsZSYmdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdp''@;'; put 'put ''c3Rlck1hcChyOWUpLHRoaXMuZmlsdGVyaW5nU3RhdGVzPW51bGwsdGhpcy5jbGVhckxvY2FsSG9va3MoKX19cGwoaTllLFowKTtjb25zdCBhOWU9aTllO2Z1bmN0aW9uIG85ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gazV0KGMpe3ZhciBsPWZ1bmN0aW9uIEQ1dChjLGwpe2lmKCJvYmpl''@;'; put 'put ''Y3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUg''@;'; put 'put ''bXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1l''@;'; put 'put ''cmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgczllPWNsYXNzIEk1dHtjb25zdHJ1Y3RvcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06KCk9PltdO285ZSh0aGlzLCJjb25k''@;'; put 'put ''aXRpb25Db2xsZWN0aW9uIix2b2lkIDApLG85ZSh0aGlzLCJjb2x1bW5EYXRhRmFjdG9yeSIsdm9pZCAwKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb249bCx0aGlzLmNvbHVtbkRhdGFGYWN0b3J5PWF9ZmlsdGVyKCl7bGV0IGw9W107cmV0dXJuIEtuKHRoaXMuY29uZGl0aW9uQ29sbGVjdGlv''@;'; put 'put ''bi5nZXRGaWx0ZXJlZENvbHVtbnMoKSwoYSxkKT0+e2xldCBoPXRoaXMuY29sdW1uRGF0YUZhY3RvcnkoYSk7ZCYmKGg9dGhpcy5fZ2V0SW50ZXJzZWN0RGF0YShoLGwpKSxsPXRoaXMuZmlsdGVyQnlDb2x1bW4oYSxoKX0pLGx9ZmlsdGVyQnlDb2x1bW4obCl7Y29uc3QgZD1bXTtyZXR1cm4g''@;'; put 'put ''S24oYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdLGg9Pnt2b2lkIDAhPT1oJiZ0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uaXNNYXRjaChoLGwpJiZkLnB1c2goaCl9KSxkfV9nZXRJbnRlcnNlY3REYXRhKGwsYSl7Y29uc3QgZD1bXTty''@;'; put 'put ''ZXR1cm4gS24oYSxoPT57Y29uc3QgZj1oLm1ldGEudmlzdWFsUm93O3ZvaWQgMCE9PWxbZl0mJihkW2ZdPWxbZl0pfSksZH19O2Z1bmN0aW9uIE92KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBPNXQoYyl7dmFyIGw9ZnVuY3Rpb24gUDV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwh''@;'; put 'put ''YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHBy''@;'; put 'put ''aW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1''@;'; put 'put ''cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBtcmUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3Qg''@;'; put 'put ''cHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBNQj1uZXcgV2Vha1NldDtjbGFzcyBsOWV7Y29uc3RydWN0b3IobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06KCk9PltdOyhmdW5jdGlvbiBSNXQoYyxsKXsoZnVuY3Rp''@;'; put 'put ''b24gTDV0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KSh0aGlzLE1CKSxPdih0aGlzLCJob3QiLHZvaWQgMCksT3YodGhp''@;'; put 'put ''cywiY29uZGl0aW9uQ29sbGVjdGlvbiIsdm9pZCAwKSxPdih0aGlzLCJjb2x1bW5EYXRhRmFjdG9yeSIsdm9pZCAwKSxPdih0aGlzLCJjaGFuZ2VzIixbXSksT3YodGhpcywiZ3JvdXBpbmciLCExKSxPdih0aGlzLCJsYXRlc3RFZGl0ZWRDb2x1bW5Qb3NpdGlvbiIsLTEpLE92KHRoaXMsImxh''@;'; put 'put ''dGVzdE9yZGVyU3RhY2siLFtdKSx0aGlzLmhvdD1sLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj1hLHRoaXMuY29sdW1uRGF0YUZhY3Rvcnk9ZCx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJiZWZvcmVSZW1vdmUiLGg9Pm1yZShNQix0aGlzLEY1dCkuY2FsbCh0aGlz''@;'; put 'put ''LGgpKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlclJlbW92ZSIsaD0+dGhpcy51cGRhdGVTdGF0ZXNBdENvbHVtbihoKSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJBZGQiLGg9PnRoaXMudXBkYXRlU3RhdGVzQXRDb2x1''@;'; put 'put ''bW4oaCkpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZUNsZWFuIiwoKT0+bXJlKE1CLHRoaXMsSDV0KS5jYWxsKHRoaXMpKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlckNsZWFuIiwoKT0+bXJlKE1CLHRoaXMsTjV0KS5j''@;'; put 'put ''YWxsKHRoaXMpKX1ncm91cENoYW5nZXMoKXt0aGlzLmdyb3VwaW5nPSEwfWZsdXNoKCl7dGhpcy5ncm91cGluZz0hMSxLbih0aGlzLmNoYW5nZXMsbD0+e3RoaXMudXBkYXRlU3RhdGVzQXRDb2x1bW4obCl9KSx0aGlzLmNoYW5nZXMubGVuZ3RoPTB9dXBkYXRlU3RhdGVzQXRDb2x1bW4obCxh''@;'; put 'put ''KXt2YXIgZD10aGlzO2lmKHRoaXMuZ3JvdXBpbmcpcmV0dXJuIHZvaWQoLTE9PT10aGlzLmNoYW5nZXMuaW5kZXhPZihsKSYmdGhpcy5jaGFuZ2VzLnB1c2gobCkpO2NvbnN0IGg9dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmV4cG9ydEFsbENvbmRpdGlvbnMoKTtsZXQgZj10aGlzLmNvbmRp''@;'; put 'put ''dGlvbkNvbGxlY3Rpb24uZ2V0Q29sdW1uU3RhY2tQb3NpdGlvbihsKTstMT09PWYmJihmPXRoaXMubGF0ZXN0RWRpdGVkQ29sdW1uUG9zaXRpb24pO2NvbnN0IHY9aC5zbGljZSgwLGYpLE09aC5zbGljZShmKTtNLmxlbmd0aCYmTVswXS5jb2x1bW49PT1sJiZNLnNoaWZ0KCk7Y29uc3QgRD13''@;'; put 'put ''Z2UoZnVuY3Rpb24odGUsb2Upe2xldCB2ZT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06W107Y29uc3Qgd2U9bmV3IGE5ZShkLmhvdCwhMSksRmU9W10uY29uY2F0KHRlLHZlKTt3ZS5pbXBvcnRBbGxDb25kaXRpb25zKEZlKTtjb25zdCBX''@;'; put 'put ''ZT1kLmNvbHVtbkRhdGFGYWN0b3J5KG9lKTtsZXQgbnQ7bnQ9d2UuaXNFbXB0eSgpP1dlOm5ldyBzOWUod2UsbXQ9PmQuY29sdW1uRGF0YUZhY3RvcnkobXQpKS5maWx0ZXIoKSxudD1acyhudCxtdD0+bXQubWV0YS52aXN1YWxSb3cpO2NvbnN0IGR0PWhEKG50KTtyZXR1cm4gd2UuZGVzdHJv''@;'; put 'put ''eSgpLFM2KFdlLG10PT5kdChtdC5tZXRhLnZpc3VhbFJvdykpfSkodiksVT1bXS5jb25jYXQodGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldENvbmRpdGlvbnMobCkpO3RoaXMucnVuTG9jYWxIb29rcygidXBkYXRlIix7ZWRpdGVkQ29uZGl0aW9uU3RhY2s6e2NvbHVtbjpsLGNvbmRpdGlv''@;'; put 'put ''bnM6VX0sZGVwZW5kZW50Q29uZGl0aW9uU3RhY2tzOk0sZmlsdGVyZWRSb3dzRmFjdG9yeTpELGNvbmRpdGlvbkFyZ3NDaGFuZ2U6YX0pfWRlc3Ryb3koKXt0aGlzLmNsZWFyTG9jYWxIb29rcygpLGFzKHRoaXMsKGwsYSk9Pnt0aGlzW2FdPW51bGx9KX19ZnVuY3Rpb24gRjV0KGMpe3RoaXMu''@;'; put 'put ''bGF0ZXN0RWRpdGVkQ29sdW1uUG9zaXRpb249dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldENvbHVtblN0YWNrUG9zaXRpb24oYyl9ZnVuY3Rpb24gSDV0KCl7dGhpcy5sYXRlc3RPcmRlclN0YWNrPXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRGaWx0ZXJlZENvbHVtbnMoKX1mdW5j''@;'; put 'put ''dGlvbiBONXQoKXtLbih0aGlzLmxhdGVzdE9yZGVyU3RhY2ssYz0+e3RoaXMudXBkYXRlU3RhdGVzQXRDb2x1bW4oYyl9KX1wbChsOWUsWjApO2NvbnN0IFY1dD1sOWUsYkQ9ImZpbHRlcnMiO2Z1bmN0aW9uIHZyZShjLGwsYSl7YzllKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBjOWUoYyxs''@;'; put 'put ''KXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIF9EKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBVNXQoYyl7dmFyIGw9ZnVuY3Rpb24gWjV0KGMs''@;'; put 'put ''bCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0''@;'; put 'put ''b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3Zh''@;'; put 'put ''bHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiB4QihjLGwsYSl7cmV0dXJuIGMuc2V0KEFoKGMsbCksYSksYX1mdW5jdGlvbiBYZihjLGwpe3JldHVybiBjLmdldChBaChjLGwpKX1mdW5jdGlvbiBBaChjLGwsYSl7aWYo''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgeXJlPSJmaWx0ZXJzIix1OWU9eXJlO3Zh''@;'; put 'put ''ciBMNT1uZXcgV2Vha01hcCxicmU9bmV3IFdlYWtNYXAsUHY9bmV3IFdlYWtNYXAsTjI9bmV3IFdlYWtTZXQ7Y2xhc3MgWTV0IGV4dGVuZHMgTXN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIHlyZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyNTB9c3RhdGlj''@;'; put 'put ''IGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue3NlYXJjaE1vZGU6InNob3cifX1zdGF0aWMgZ2V0IFNFVFRJTkdTX1ZBTElEQVRPUlMoKXtyZXR1cm57c2VhcmNoTW9kZTpsPT4ic3RyaW5nIj09dHlwZW9mIGwmJlsic2hvdyIsImFwcGx5Il0uaW5jbHVkZXMobCl9fXN0YXRpYyBnZXQg''@;'; put 'put ''UExVR0lOX0RFUFMoKXtyZXR1cm5bInBsdWdpbjpEcm9wZG93bk1lbnUiLCJwbHVnaW46SGlkZGVuUm93cyIsImNlbGwtdHlwZTpjaGVja2JveCJdfWNvbnN0cnVjdG9yKGwpe3ZhciBhO3N1cGVyKGwpLGE9dGhpcyxmdW5jdGlvbiB6NXQoYyxsKXtjOWUoYyxsKSxsLmFkZChjKX0odGhpcyxO''@;'; put 'put ''MiksX0QodGhpcywiZHJvcGRvd25NZW51UGx1Z2luIixudWxsKSxfRCh0aGlzLCJjb25kaXRpb25Db2xsZWN0aW9uIixudWxsKSxfRCh0aGlzLCJjb25kaXRpb25VcGRhdGVPYnNlcnZlciIsbnVsbCksX0QodGhpcywiY29tcG9uZW50cyIsbmV3IE1hcChbWyJmaWx0ZXJfYnlfY29uZGl0aW9u''@;'; put 'put ''IixudWxsXSxbImZpbHRlcl9vcGVyYXRvcnMiLG51bGxdLFsiZmlsdGVyX2J5X2NvbmRpdGlvbjIiLG51bGxdLFsiZmlsdGVyX2J5X3ZhbHVlIixudWxsXSxbImZpbHRlcl9hY3Rpb25fYmFyIixudWxsXV0pKSxfRCh0aGlzLCJmaWx0ZXJzUm93c01hcCIsbnVsbCksdnJlKHRoaXMsTDUsdm9p''@;'; put 'put ''ZCAwKSx2cmUodGhpcyxicmUsbmV3IFdlYWtTZXQpLHZyZSh0aGlzLFB2LFtdKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tm''@;'; put 'put ''XTtyZXR1cm4gQWgoTjIsYSxRNXQpLmNhbGwoYSwuLi5oKX0pfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt5cmVdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjt0aGlzLmZpbHRlcnNSb3dzTWFwPXRoaXMuaG90LnJv''@;'; put 'put ''d0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSxuZXcgZmspLHRoaXMuZHJvcGRvd25NZW51UGx1Z2luPXRoaXMuaG90LmdldFBsdWdpbigiZHJvcGRvd25NZW51Iik7Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmRyb3Bkb3duTWVudSxkPWEmJmEudWlDb250''@;'; put 'put ''YWluZXJ8fHRoaXMuaG90LnJvb3RQb3J0YWxFbGVtZW50LGg9TT0+KE0uYWRkTG9jYWxIb29rKCJhY2NlcHQiLCgpPT5BaChOMix0aGlzLGQ5ZSkuY2FsbCh0aGlzLCJhY2NlcHQiKSksTS5hZGRMb2NhbEhvb2soImNhbmNlbCIsKCk9PkFoKE4yLHRoaXMsZDllKS5jYWxsKHRoaXMsImNhbmNl''@;'; put 'put ''bCIpKSxNLmFkZExvY2FsSG9vaygiY2hhbmdlIixEPT5BaChOMix0aGlzLEo1dCkuY2FsbCh0aGlzLE0sRCkpLE0pLGY9KCk9PmAke3RoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoVGVlKX06YCx2PSgpPT5gJHt0aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKEFlZSl9OmA7aWYoIXRo''@;'; put 'put ''aXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24iKSl7Y29uc3QgTT1uZXcgc3JlKHRoaXMuaG90LHtpZDoiZmlsdGVyX2J5X2NvbmRpdGlvbiIsbmFtZTpmLGFkZFNlcGFyYXRvcjohMSxtZW51Q29udGFpbmVyOmR9KTtNLmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsKCk9''@;'; put 'put ''PkFoKE4yLHRoaXMsaDllKS5jYWxsKHRoaXMpKSx0aGlzLmNvbXBvbmVudHMuc2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIixoKE0pKX1pZih0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfb3BlcmF0b3JzIil8fHRoaXMuY29tcG9uZW50cy5zZXQoImZpbHRlcl9vcGVyYXRvcnMiLG5ldyBK''@;'; put 'put ''Z3QodGhpcy5ob3Qse2lkOiJmaWx0ZXJfb3BlcmF0b3JzIixuYW1lOiJPcGVyYXRvcnMifSkpLCF0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uMiIpKXtjb25zdCBNPW5ldyBzcmUodGhpcy5ob3Qse2lkOiJmaWx0ZXJfYnlfY29uZGl0aW9uMiIsbmFtZToiIixhZGRT''@;'; put 'put ''ZXBhcmF0b3I6ITAsbWVudUNvbnRhaW5lcjpkfSk7TS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgpPT5BaChOMix0aGlzLGg5ZSkuY2FsbCh0aGlzKSksdGhpcy5jb21wb25lbnRzLnNldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIiLGgoTSkpfWlmKCF0aGlzLmNvbXBvbmVudHMuZ2V0KCJm''@;'; put 'put ''aWx0ZXJfYnlfdmFsdWUiKSl7Y29uc3QgTT10aGlzLmdldFNldHRpbmcoInNlYXJjaE1vZGUiKTt0aGlzLmNvbXBvbmVudHMuc2V0KCJmaWx0ZXJfYnlfdmFsdWUiLGgobmV3IHY1dCh0aGlzLmhvdCx7aWQ6ImZpbHRlcl9ieV92YWx1ZSIsbmFtZTp2LHNlYXJjaE1vZGU6TX0pKSl9aWYodGhp''@;'; put 'put ''cy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2FjdGlvbl9iYXIiKXx8dGhpcy5jb21wb25lbnRzLnNldCgiZmlsdGVyX2FjdGlvbl9iYXIiLGgobmV3IHlEKHRoaXMuaG90LHtpZDoiZmlsdGVyX2FjdGlvbl9iYXIiLG5hbWU6IkFjdGlvbiBiYXIifSkpKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rp''@;'; put 'put ''b258fCh0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb249bmV3IGE5ZSh0aGlzLmhvdCkpLHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXJ8fCh0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyPW5ldyBWNXQodGhpcy5ob3QsdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLE09PnRoaXMuZ2V0RGF0''@;'; put 'put ''YU1hcEF0Q29sdW1uKE0pKSx0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyLmFkZExvY2FsSG9vaygidXBkYXRlIixNPT5BaChOMix0aGlzLGVtdCkuY2FsbCh0aGlzLE0pKSksdGhpcy5jb21wb25lbnRzLmZvckVhY2goTT0+TS5zaG93KCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJEcm9wZG93''@;'; put 'put ''bk1lbnVEZWZhdWx0T3B0aW9ucyIsZnVuY3Rpb24oKXtmb3IodmFyIE09YXJndW1lbnRzLmxlbmd0aCxEPW5ldyBBcnJheShNKSxVPTA7VTxNO1UrKylEW1VdPWFyZ3VtZW50c1tVXTtyZXR1cm4gQWgoTjIsbCxxNXQpLmNhbGwobCwuLi5EKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlRHJvcGRv''@;'; put 'put ''d25NZW51U2hvdyIsKCk9PkFoKE4yLHRoaXMsWDV0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyRHJvcGRvd25NZW51U2hvdyIsKCk9PkFoKE4yLHRoaXMsJDV0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyRHJvcGRvd25NZW51SGlkZSIsKCk9PkFoKE4yLHRoaXMs''@;'; put 'put ''SzV0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyQ2hhbmdlIixNPT5BaChOMix0aGlzLEc1dCkuY2FsbCh0aGlzLE0pKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmRyb3Bkb3duTWVudSYmdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4mJih0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5k''@;'; put 'put ''aXNhYmxlUGx1Z2luKCksdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4uZW5hYmxlUGx1Z2luKCkpLCFYZihMNSx0aGlzKSYmdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4uZW5hYmxlZCl7Y29uc3QgTT1be2ZvY3VzOigpPT57Y29uc3QgVT1YZihMNSx0aGlzKS5nZXRNZW51KCksdGU9VS5nZXROYXZp''@;'; put 'put ''Z2F0b3IoKSxvZT1YZihMNSx0aGlzKS5nZXRMYXN0TWVudVBhZ2UoKTtVLmZvY3VzKCksb2U+MD90ZS5zZXRDdXJyZW50UGFnZShvZSk6dGUudG9GaXJzdEl0ZW0oKX19LC4uLkFycmF5LmZyb20odGhpcy5jb21wb25lbnRzKS5tYXAoVT0+e2xldFssdGVdPVU7cmV0dXJuIHRlLmdldEVsZW1l''@;'; put 'put ''bnRzKCl9KS5mbGF0KCldO3hCKEw1LHRoaXMsZnVuY3Rpb24gajV0KGMsbCl7bGV0IGQsYT0tMTtjb25zdCBoPWZ1bmN0aW9uIEI1dChjKXtyZXR1cm4gcThlKHtpbml0aWFsUGFnZTowLHNpemU6KCk9PmMubGVuZ3RoLG9uSXRlbVNlbGVjdDooYSxkKT0+e2NvbnN0IGg9Y1thXTtyZXR1cm4g''@;'; put 'put ''aCBpbnN0YW5jZW9mIG1EP2Q6IShoLmVsZW1lbnQmJiFrNihoLmVsZW1lbnQpKSYmdm9pZCBoLmZvY3VzKCl9fSl9KGwpLGY9b2U9PigpPT57ZC5pc09wZW5lZCgpJiZkLmdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpLmxpc3RlbihiRCksaC5zZXRDdXJyZW50UGFnZShsLmluZGV4T2Yob2Up''@;'; put 'put ''KX07ZnVuY3Rpb24gdihvZSl7Y29uc3QgdmU9ZC5nZXRLZXlib2FyZFNob3J0Y3V0c0N0cmwoKSx3ZT1vZS5nZXRLZXlib2FyZFNob3J0Y3V0c0N0cmwoKTtoLmNsZWFyKCksd2UuYWRkQ3VzdG9tU2hvcnRjdXRzKFt7a2V5czpbWyJUYWIiXSxbIlNoaWZ0IiwiVGFiIl1dLGZvcndhcmRUb0Nv''@;'; put 'put ''bnRleHQ6dmUuZ2V0Q29udGV4dChiRCksY2FsbGJhY2s6KCk9PntvZS5pc1N1Yk1lbnUoKSYmb2UuY2xvc2UoKSx2ZS5saXN0ZW4oYkQpfX1dKSwhb2UuaXNTdWJNZW51KCkmJnZlLmFkZEN1c3RvbVNob3J0Y3V0cyhbe2tleXM6W1siVGFiIl0sWyJTaGlmdCIsIlRhYiJdXSxjYWxsYmFjazpG''@;'; put 'put ''ZT0+e2NvbnN0IFdlPWQuZ2V0TmF2aWdhdG9yKCk7V2UuZ2V0Q3VycmVudFBhZ2UoKT4tMSYmKGE9V2UuZ2V0Q3VycmVudFBhZ2UoKSksV2UuY2xlYXIoKSxGZS5zaGlmdEtleT9oLnRvUHJldmlvdXNJdGVtKCk6aC50b05leHRJdGVtKCl9fSx7a2V5czpbWyJFc2NhcGUiXV0sY2FsbGJhY2s6''@;'; put 'put ''KCk9PntkLmNsb3NlKCl9fSx7a2V5czpbWyJFbnRlciJdLFsiU3BhY2UiXV0scHJldmVudERlZmF1bHQ6ITEsY2FsbGJhY2s6RmU9Pntjb25zdCBXZT1sW2guZ2V0Q3VycmVudFBhZ2UoKV07V2UgaW5zdGFuY2VvZiBjRCYmKFdlLm9wZW5PcHRpb25zKCksRmUucHJldmVudERlZmF1bHQoKSks''@;'; put 'put ''V2UgaW5zdGFuY2VvZiBwRCYmKFdlLmFjdGl2YXRlKCksRmUucHJldmVudERlZmF1bHQoKSksV2UgaW5zdGFuY2VvZiBIMnx8RmUucHJldmVudERlZmF1bHQoKX19XSxiRCl9ZnVuY3Rpb24gRChvZSl7b2UuYWRkTG9jYWxIb29rKCJhZnRlclNlbGVjdGlvbkNoYW5nZSIsdmU9Pnt2ZS5rZXku''@;'; put 'put ''c3RhcnRzV2l0aCgiZmlsdGVyXyIpfHxoLmNsZWFyKCl9KSxvZS5hZGRMb2NhbEhvb2soImFmdGVyU3VibWVudU9wZW4iLHYpLG9lLmFkZExvY2FsSG9vaygiYWZ0ZXJPcGVuIix2KSxkPW9lfXJldHVybiBsLmZvckVhY2gob2U9PntvZSBpbnN0YW5jZW9mIEgyJiYob2UuYWRkTG9jYWxIb29r''@;'; put 'put ''KCJjbGljayIsZihvZSkpLG9lLmFkZExvY2FsSG9vaygiZm9jdXMiLGYob2UpKSxvZS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLGYob2UpKSl9KSxEKGMpLHsuLi5oLGxpc3RlbjpmdW5jdGlvbiBNKCl7ZC5mb2N1cygpLGQuZ2V0S2V5Ym9hcmRTaG9ydGN1dHNDdHJsKCkubGlzdGVuKGJE''@;'; put 'put ''KX0sc2V0TWVudTpELGdldE1lbnU6ZnVuY3Rpb24gVSgpe3JldHVybiBkfSxnZXRMYXN0TWVudVBhZ2U6ZnVuY3Rpb24gdGUoKXtyZXR1cm4gYX19fSh0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51LE0pKTtjb25zdCBEPVU9PntYZihMNSx0aGlzKS5saXN0ZW4oKSxVLnByZXZlbnREZWZh''@;'; put 'put ''dWx0KCkscTkoVS5rZXlDb2RlLCJUQUIiKSYmKFUuc2hpZnRLZXk/WGYoTDUsdGhpcykudG9QcmV2aW91c0l0ZW0oKTpYZihMNSx0aGlzKS50b05leHRJdGVtKCkpfTt0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfdmFsdWUiKS5hZGRMb2NhbEhvb2soImxpc3RUYWJLZXlkb3duIixE''@;'; put 'put ''KSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIikuYWRkTG9jYWxIb29rKCJzZWxlY3RUYWJLZXlkb3duIixEKX10aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhp''@;'; put 'put ''cy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dmFyIGw7dGhpcy5lbmFibGVkJiYobnVsbCE9PShsPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luKSYmdm9pZCAwIT09bCYmbC5lbmFibGVkJiZ0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51LmNs''@;'; put 'put ''ZWFyTG9jYWxIb29rcygpLHRoaXMuY29tcG9uZW50cy5mb3JFYWNoKChhLGQpPT57YS5kZXN0cm95KCksdGhpcy5jb21wb25lbnRzLnNldChkLG51bGwpfSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmRlc3Ryb3koKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb249bnVsbCx0aGlzLmhvdC5y''@;'; put 'put ''b3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSkpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5h''@;'; put 'put ''ZGRTaG9ydGN1dCh7a2V5czpbWyJBbHQiLCJBIl1dLHN0b3BQcm9wYWdhdGlvbjohMCxjYWxsYmFjazooKT0+e2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWQoKTt0aGlzLmNsZWFyQ29uZGl0aW9ucygpLHRoaXMuZmlsdGVyKCksbCYmdGhpcy5ob3Quc2VsZWN0Q2VsbHMobCl9LGdyb3Vw''@;'; put 'put ''OnU5ZX0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cCh1OWUpfWFkZENvbmRpdGlvbihsLGEsZCl7bGV0IGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1''@;'; put 'put ''bWVudHNbM10/YXJndW1lbnRzWzNdOnQ4O2NvbnN0IGY9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKTt0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkQ29uZGl0aW9uKGYse2NvbW1hbmQ6e2tleTphfSxhcmdzOmR9LGgpfXJlbW92ZUNvbmRpdGlvbnMobCl7Y29uc3QgYT10aGlzLmhv''@;'; put 'put ''dC50b1BoeXNpY2FsQ29sdW1uKGwpO3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5yZW1vdmVDb25kaXRpb25zKGEpfWNsZWFyQ29uZGl0aW9ucyhsKXtpZih2b2lkIDA9PT1sKXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5jbGVhbigpO2Vsc2V7Y29uc3QgYT10aGlzLmhvdC50b1BoeXNpY2Fs''@;'; put 'put ''Q29sdW1uKGwpO3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5yZW1vdmVDb25kaXRpb25zKGEpfX1pbXBvcnRDb25kaXRpb25zKGwpe3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5pbXBvcnRBbGxDb25kaXRpb25zKGwpfWV4cG9ydENvbmRpdGlvbnMoKXtyZXR1cm4gdGhpcy5jb25kaXRpb25D''@;'; put 'put ''b2xsZWN0aW9uLmV4cG9ydEFsbENvbmRpdGlvbnMoKX1maWx0ZXIoKXtjb25zdHtuYXZpZ2FibGVIZWFkZXJzOmx9PXRoaXMuaG90LmdldFNldHRpbmdzKCksYT10aGlzLl9jcmVhdGVEYXRhRmlsdGVyKCksZD0hdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmlzRW1wdHkoKTtsZXQgaD1bXTtj''@;'; put 'put ''b25zdCBmPXRoaXMuZXhwb3J0Q29uZGl0aW9ucygpLHY9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUZpbHRlciIsZixYZihQdix0aGlzKSk7aWYoITEhPT12JiZkKXtjb25zdCBNPVtdO3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57dGhpcy5maWx0ZXJzUm93c01hcC5jbGVhcigpLGg9''@;'; put 'put ''WnMoYS5maWx0ZXIoKSxVPT5VLm1ldGEudmlzdWFsUm93KTtjb25zdCBEPWhEKGgpO1FhKHRoaXMuaG90LmNvdW50U291cmNlUm93cygpLTEsVT0+e0QoVSl8fE0ucHVzaChVKX0pLEtuKE0sVT0+e3RoaXMuZmlsdGVyc1Jvd3NNYXAuc2V0VmFsdWVBdEluZGV4KFUsITApfSl9LCEwKSwhbCYm''@;'; put 'put ''IWgubGVuZ3RoJiZ0aGlzLmhvdC5kZXNlbGVjdENlbGwoKSx4QihQdix0aGlzLHRoaXMuZXhwb3J0Q29uZGl0aW9ucygpKX1lbHNlITE9PT12fHxkP3RoaXMuaW1wb3J0Q29uZGl0aW9ucyhYZihQdix0aGlzKSk6KHhCKFB2LHRoaXMsdGhpcy5leHBvcnRDb25kaXRpb25zKCkpLHRoaXMuZmls''@;'; put 'put ''dGVyc1Jvd3NNYXAuY2xlYXIoKSk7dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWQoKSYmdGhpcy5ob3Quc2VsZWN0Q2VsbChsPy0xOjAsdGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLmhpZ2hsaWdodC5jb2wpLCExIT09diYmKHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckZp''@;'; put 'put ''bHRlciIsZiksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLmhvdC5yZW5kZXIoKSl9Z2V0U2VsZWN0ZWRDb2x1bW4oKXt2YXIgbDtjb25zdCBhPW51bGw9PT0obD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmhp''@;'; put 'put ''Z2hsaWdodDtyZXR1cm4gYT97dmlzdWFsSW5kZXg6YS5jb2wscGh5c2ljYWxJbmRleDp0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGEuY29sKX06bnVsbH1nZXREYXRhTWFwQXRDb2x1bW4obCl7Y29uc3QgYT10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihsKSxkPVtdO3JldHVybiBLbih0aGlz''@;'; put 'put ''LmhvdC5nZXRTb3VyY2VEYXRhQXRDb2woYSksKGgsZik9Pnt2YXIgdjtjb25zdHtyb3c6TSxjb2w6RCx2aXN1YWxDb2w6VSx2aXN1YWxSb3c6dGUsdHlwZTpvZSxpbnN0YW5jZTp2ZSxkYXRlRm9ybWF0OndlLGxvY2FsZTpGZX09dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZixhKSxXZT1udWxsIT09''@;'; put 'put ''KHY9dGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbCh0aGlzLmhvdC50b1Zpc3VhbFJvdyhmKSxhKSkmJnZvaWQgMCE9PXY/djpoO2QucHVzaCh7bWV0YTp7cm93Ok0sY29sOkQsdmlzdWFsQ29sOlUsdmlzdWFsUm93OnRlLHR5cGU6b2UsaW5zdGFuY2U6dmUsZGF0ZUZvcm1hdDp3ZSxsb2NhbGU6RmV9''@;'; put 'put ''LHZhbHVlOmRyZShXZSl9KX0pLGR9dXBkYXRlVmFsdWVDb21wb25lbnRDb25kaXRpb24obCl7Y29uc3QgZD1ocmUodGhpcy5ob3QuZ2V0RGF0YUF0Q29sKGwpKTt0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyLnVwZGF0ZVN0YXRlc0F0Q29sdW1uKGwsZCl9cmVzdG9yZUNvbXBvbmVudHMo''@;'; put 'put ''bCl7dmFyIGE7Y29uc3QgZD1udWxsPT09KGE9dGhpcy5nZXRTZWxlY3RlZENvbHVtbigpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5waHlzaWNhbEluZGV4O2wuZm9yRWFjaChoPT57aC5pc0hpZGRlbigpfHxoLnJlc3RvcmVTdGF0ZShkKX0pLHRoaXMudXBkYXRlRGVwZW5kZW50Q29tcG9uZW50''@;'; put 'put ''c1Zpc2liaWxpdHkoKX1nZXRPcGVyYXRpb25CYXNlZE9uQXJndW1lbnRzKGwsYSxkLGgpe2xldCBmPWw7cmV0dXJuIGY9PT13QiYmYS5jb21tYW5kLmtleSE9PVkwJiZkLmNvbW1hbmQua2V5IT09WTAmJmguY29tbWFuZC5rZXkhPT1ZMD9mPWNyZTpoLmNvbW1hbmQua2V5IT09WTAmJihhLmNv''@;'; put 'put ''bW1hbmQua2V5PT09WTB8fGQuY29tbWFuZC5rZXk9PT1ZMCkmJihmPXQ4KSxmfXNldExpc3RlbmluZ0Ryb3Bkb3duTWVudSgpe3RoaXMuZHJvcGRvd25NZW51UGx1Z2luJiZ0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5zZXRMaXN0ZW5pbmcoKX11cGRhdGVEZXBlbmRlbnRDb21wb25lbnRzVmlz''@;'; put 'put ''aWJpbGl0eSgpe2NvbnN0IGw9dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpLHtjb21tYW5kOmF9PWwuZ2V0U3RhdGUoKSxkPVt0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uMiIpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9vcGVy''@;'; put 'put ''YXRvcnMiKV07YS5zaG93T3BlcmF0b3JzP3RoaXMuc2hvd0NvbXBvbmVudHMoLi4uZCk6dGhpcy5oaWRlQ29tcG9uZW50cyguLi5kKX1fY3JlYXRlRGF0YUZpbHRlcigpe3JldHVybiBuZXcgczllKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1sw''@;'; put 'put ''XTp0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24sYT0+dGhpcy5nZXREYXRhTWFwQXRDb2x1bW4oYSkpfWdldEluZGV4ZXNPZkNvbXBvbmVudHMoKXtjb25zdCBsPVtdO2lmKCF0aGlzLmRyb3Bkb3duTWVudVBsdWdpbilyZXR1cm4gbDtjb25zdCBhPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1l''@;'; put 'put ''bnU7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIEtuKGgsdj0+e0tuKGEubWVudUl0ZW1zLChNLEQpPT57TS5rZXk9PT12LmdldE1lbnVJdGVtRGVzY3JpcHRvcigpLmtleSYmbC5wdXNoKEQpfSl9''@;'; put 'put ''KSxsfWNoYW5nZUNvbXBvbmVudHNWaXNpYmlsaXR5KCl7bGV0IGw9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXTtpZighdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4pcmV0dXJuO2NvbnN0IGQ9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4u''@;'; put 'put ''bWVudS5ob3RNZW51LGg9ZC5nZXRQbHVnaW4oImhpZGRlblJvd3MiKTtmb3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCx2PW5ldyBBcnJheShmPjE/Zi0xOjApLE09MTtNPGY7TSsrKXZbTS0xXT1hcmd1bWVudHNbTV07Y29uc3QgRD10aGlzLmdldEluZGV4ZXNPZkNvbXBvbmVudHMoLi4udik7''@;'; put 'put ''bD9oLnNob3dSb3dzKEQpOmguaGlkZVJvd3MoRCksZC5yZW5kZXIoKX1oaWRlQ29tcG9uZW50cygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMuY2hhbmdlQ29tcG9uZW50c1Zpc2liaWxpdHkoITEs''@;'; put 'put ''Li4uYSl9c2hvd0NvbXBvbmVudHMoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLmNoYW5nZUNvbXBvbmVudHNWaXNpYmlsaXR5KCEwLC4uLmEpfWRlc3Ryb3koKXt0aGlzLmVuYWJsZWQmJih0aGlz''@;'; put 'put ''LmNvbXBvbmVudHMuZm9yRWFjaCgobCxhKT0+e251bGwhPT1sJiYobC5kZXN0cm95KCksdGhpcy5jb21wb25lbnRzLnNldChhLG51bGwpKX0pLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5kZXN0cm95KCksdGhpcy5jb25kaXRpb25VcGRhdGVPYnNlcnZlci5kZXN0cm95KCksdGhpcy5ob3Qu''@;'; put 'put ''cm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIEc1dChjKXtjJiZLbihjLGw9Pntjb25zdFssYV09bCxkPXRoaXMuaG90LnByb3BUb0NvbChhKTt0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uaGFzQ29uZGl0aW9u''@;'; put 'put ''cyhkKSYmdGhpcy51cGRhdGVWYWx1ZUNvbXBvbmVudENvbmRpdGlvbihkKX0pfWZ1bmN0aW9uICQ1dCgpe2NvbnN0IGM9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4ubWVudTt0aGlzLnJlc3RvcmVDb21wb25lbnRzKEFycmF5LmZyb20odGhpcy5jb21wb25lbnRzLnZhbHVlcygpKSksYy51cGRh''@;'; put 'put ''dGVNZW51RGltZW5zaW9ucygpfWZ1bmN0aW9uIEs1dCgpe3RoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24iKS5nZXRTZWxlY3RFbGVtZW50KCkuY2xvc2VPcHRpb25zKCksdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIiKS5nZXRTZWxlY3RF''@;'; put 'put ''bGVtZW50KCkuY2xvc2VPcHRpb25zKCl9ZnVuY3Rpb24gWDV0KCl7Y29uc3QgYz10aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51O1hmKGJyZSx0aGlzKS5oYXMoYyl8fFhmKEw1LHRoaXMpLnNldE1lbnUoYyksWGYoYnJlLHRoaXMpLmFkZChjKX1mdW5jdGlvbiBxNXQoYyl7Yy5pdGVtcy5w''@;'; put 'put ''dXNoKHtuYW1lOnlzfSksdGhpcy5jb21wb25lbnRzLmZvckVhY2gobD0+e2MuaXRlbXMucHVzaChsLmdldE1lbnVJdGVtRGVzY3JpcHRvcigpKX0pfWZ1bmN0aW9uIGQ5ZShjKXt2YXIgbDtpZigiYWNjZXB0Ij09PWMpe2NvbnN0IGQ9dGhpcy5nZXRTZWxlY3RlZENvbHVtbigpO3ZhciBhO2lm''@;'; put 'put ''KG51bGw9PT1kKXJldHVybiB2b2lkKG51bGw9PT0oYT10aGlzLmRyb3Bkb3duTWVudVBsdWdpbil8fHZvaWQgMD09PWF8fGEuY2xvc2UoKSk7Y29uc3R7cGh5c2ljYWxJbmRleDpofT1kLGY9dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpLmdldFN0YXRlKCksdj10''@;'; put 'put ''aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uMiIpLmdldFN0YXRlKCksTT10aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfdmFsdWUiKS5nZXRTdGF0ZSgpLEQ9dGhpcy5nZXRPcGVyYXRpb25CYXNlZE9uQXJndW1lbnRzKHRoaXMuY29tcG9uZW50cy5nZXQoImZp''@;'; put 'put ''bHRlcl9vcGVyYXRvcnMiKS5nZXRBY3RpdmVPcGVyYXRpb25JZCgpLGYsdixNKTt0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyLmdyb3VwQ2hhbmdlcygpO2xldCBVPXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRDb2x1bW5TdGFja1Bvc2l0aW9uKGgpOy0xPT09VSYmKFU9dm9pZCAw''@;'; put 'put ''KSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24ucmVtb3ZlQ29uZGl0aW9ucyhoKSxmLmNvbW1hbmQua2V5IT09WTAmJih0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkQ29uZGl0aW9uKGgsZixELFUpLHYuY29tbWFuZC5rZXkhPT1ZMCYmdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZENv''@;'; put 'put ''bmRpdGlvbihoLHYsRCxVKSksTS5jb21tYW5kLmtleSE9PVkwJiZ0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkQ29uZGl0aW9uKGgsTSxELFUpLHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIuZmx1c2goKSx0aGlzLmNvbXBvbmVudHMuZm9yRWFjaCh0ZT0+dGUuc2F2ZVN0YXRlKGgp''@;'; put 'put ''KSx0aGlzLmZpbHRlcigpfW51bGw9PT0obD10aGlzLmRyb3Bkb3duTWVudVBsdWdpbil8fHZvaWQgMD09PWx8fGwuY2xvc2UoKX1mdW5jdGlvbiBKNXQoYyxsKXtjb25zdCBhPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnU7dGhpcy51cGRhdGVEZXBlbmRlbnRDb21wb25lbnRzVmlzaWJp''@;'; put 'put ''bGl0eSgpLGMuY29uc3RydWN0b3I9PT1zcmUmJiFsLmlucHV0c0NvdW50JiZ0aGlzLnNldExpc3RlbmluZ0Ryb3Bkb3duTWVudSgpLGEudXBkYXRlTWVudURpbWVuc2lvbnMoKX1mdW5jdGlvbiBoOWUoKXt0aGlzLnNldExpc3RlbmluZ0Ryb3Bkb3duTWVudSgpfWZ1bmN0aW9uIFE1dChjLGws''@;'; put 'put ''YSl7Y29uc3QgZD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGMpO3RoaXMuZW5hYmxlZCYmdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmhhc0NvbmRpdGlvbnMoZCkmJmE9PT10aGlzLmhvdC52aWV3LmdldENvbHVtbkhlYWRlcnNDb3VudCgpLTE/aWkobCwiaHRGaWx0ZXJzQWN0aXZlIik6''@;'; put 'put ''VmEobCwiaHRGaWx0ZXJzQWN0aXZlIil9ZnVuY3Rpb24gZW10KGMpe3ZhciBsO2lmKG51bGw9PT0obD10aGlzLmRyb3Bkb3duTWVudVBsdWdpbil8fHZvaWQgMD09PWx8fCFsLmVuYWJsZWQpcmV0dXJuO2NvbnN0e2VkaXRlZENvbmRpdGlvblN0YWNrOntjb25kaXRpb25zOmEsY29sdW1uOmR9''@;'; put 'put ''LGNvbmRpdGlvbkFyZ3NDaGFuZ2U6aH09YztBcnJheS5pc0FycmF5KGgpJiZ4QihQdix0aGlzLFhmKFB2LHRoaXMpLm1hcChNPT4oTS5jb2x1bW49PT1kJiZhLmxlbmd0aD4wJiZNLmNvbmRpdGlvbnMuZm9yRWFjaChEPT57ImJ5X3ZhbHVlIj09PUQubmFtZSYmKEQuYXJncz1bWy4uLmhdXSl9''@;'; put 'put ''KSxNKSkpO2NvbnN0IGY9YS5maWx0ZXIoTT0+TS5uYW1lPT09THYpLHY9YS5maWx0ZXIoTT0+TS5uYW1lIT09THYpO2lmKGYubGVuZ3RoPj0yfHx2Lmxlbmd0aD49MylvcyhYc2BUaGUgZmlsdGVyIGNvbmRpdGlvbnMgaGF2ZSBiZWVuIGFwcGxpZWQgcHJvcGVybHksIGJ1dCBjb3VsZG7igJl0''@;'; put 'put ''IGJlIGRpc3BsYXllZCB2aXN1YWxseS5ceDIwCiAgICAgICAgVGhlIG92ZXJhbGwgYW1vdW50IG9mIGNvbmRpdGlvbnMgZXhjZWVkIHRoZSBjYXBhYmlsaXR5IG9mIHRoZSBkcm9wZG93biBtZW51Llx4MjAKICAgICAgICBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUgZG9jdW1lbnRhdGlvbi5g''@;'; put 'put ''KTtlbHNle2NvbnN0IE09dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldE9wZXJhdGlvbihkKTt0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIikudXBkYXRlU3RhdGUodlswXSxkKSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uMiIpLnVw''@;'; put 'put ''ZGF0ZVN0YXRlKHZbMV0sZCksdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX29wZXJhdG9ycyIpLnVwZGF0ZVN0YXRlKE0sZCksdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X3ZhbHVlIikudXBkYXRlU3RhdGUoYyl9fWNvbnN0IGY5ZT0iaW50ZXJuYWwtdXNlLWluLWhhbmRzb250''@;'; put 'put ''YWJsZSIsX3JlPXtsaWNlbnNlS2V5OmY5ZSx1c2VBcnJheUFyaXRobWV0aWM6ITAsdXNlQ29sdW1uSW5kZXg6ITEsdXNlU3RhdHM6ITEsZXZhbHVhdGVOdWxsVG9aZXJvOiEwLHByZWNpc2lvbkVwc2lsb246MWUtMTMscHJlY2lzaW9uUm91bmRpbmc6MTQsc21hcnRSb3VuZGluZzohMCxsZWFw''@;'; put 'put ''WWVhcjE5MDA6ITEsbnVsbERhdGU6e3llYXI6MTg5OSxtb250aDoxMixkYXk6MzB9LG51bGxZZWFyOjMwLGRhdGVGb3JtYXRzOlsiREQvTU0vWVlZWSIsIkREL01NL1lZIl0sdGltZUZvcm1hdHM6WyJoaDptbSIsImhoOm1tOnNzLnNzcyJdLG1hdGNoV2hvbGVDZWxsOiEwLHVzZVJlZ3VsYXJF''@;'; put 'put ''eHByZXNzaW9uczohMSx1c2VXaWxkY2FyZHM6ITAsZnVuY3Rpb25BcmdTZXBhcmF0b3I6IiwiLHRob3VzYW5kU2VwYXJhdG9yOiIiLGRlY2ltYWxTZXBhcmF0b3I6Ii4iLGxhbmd1YWdlOiJlbkdCIn07ZnVuY3Rpb24gcDllKGMpe3ZhciBsO3JldHVybnttYXhDb2x1bW5zOmMubWF4Q29sdW1u''@;'; put 'put ''cyxtYXhSb3dzOmMubWF4Um93cyxsYW5ndWFnZTpudWxsPT09KGw9Y1tXMV0pfHx2b2lkIDA9PT1sfHxudWxsPT09KGw9bC5sYW5ndWFnZSl8fHZvaWQgMD09PWw/dm9pZCAwOmwubGFuZ0NvZGV9fWZ1bmN0aW9uIGc5ZShjKXtyZXR1cm4gT2JqZWN0LmtleXMoYykucmVkdWNlKChsLGEpPT4o''@;'; put 'put ''Imh5cGVyZm9ybXVsYSIhPT1hJiYobFthXT1jW2FdKSxsKSx7fSl9ZnVuY3Rpb24gRUIoKXtjb25zdCBjPSJlbmdpbmVfcmVsYXRpb25zaGlwIixsPU5mKFcxKTtyZXR1cm4gbC5oYXNJdGVtKGMpfHxsLnJlZ2lzdGVyKGMsbmV3IE1hcCksbC5nZXRJdGVtKGMpfWZ1bmN0aW9uIHdyZSgpe2Nv''@;'; put 'put ''bnN0IGM9InNoYXJlZF9lbmdpbmVfdXNhZ2UiLGw9TmYoVzEpO3JldHVybiBsLmhhc0l0ZW0oYyl8fGwucmVnaXN0ZXIoYyxuZXcgTWFwKSxsLmdldEl0ZW0oYyl9ZnVuY3Rpb24gbTllKGMpe3ZhciBsO2NvbnN0IGE9RUIoKSxkPTA9PT1hLnNpemU/W106QXJyYXkuZnJvbShudWxsIT09KGw9''@;'; put 'put ''YS5nZXQoYykpJiZ2b2lkIDAhPT1sP2w6W10pO3JldHVybiBuZXcgTWFwKGQubWFwKGg9PltoLmdldFBsdWdpbigiZm9ybXVsYXMiKS5zaGVldElkLGhdKSl9ZnVuY3Rpb24gdjllKGMsbCl7aWYoYyl7Y29uc3QgYT1FQigpLGQ9YS5nZXQoYyksaD13cmUoKSxmPWguZ2V0KGMpO2QmJmQuaW5j''@;'; put 'put ''bHVkZXMobCkmJihkLnNwbGljZShkLmluZGV4T2YobCksMSksMD09PWQubGVuZ3RoJiZhLmRlbGV0ZShjKSksZiYmZi5pbmNsdWRlcyhsLmd1aWQpJiYoZi5zcGxpY2UoZi5pbmRleE9mKGwuZ3VpZCksMSksMD09PWYubGVuZ3RoJiYoaC5kZWxldGUoYyksYy5kZXN0cm95KCkpKX19Y29uc3Qg''@;'; put 'put ''eTllPSJERC9NTS9ZWVlZIjtmdW5jdGlvbiBDcmUoYyxsKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGMmJiJkYXRlIj09PWx9ZnVuY3Rpb24gYjllKGMsbCl7cmV0dXJuICRzKGMsbCwhMCkuaXNWYWxpZCgpfWZ1bmN0aW9uIF85ZShjLGwpe3JldHVybiAkcyhjLGwsITApLmZvcm1hdCh5OWUp''@;'; put 'put ''fWZ1bmN0aW9uIGZtdChjLGwpe3JldHVybiAkcyhjLHk5ZSwhMCkuZm9ybWF0KGwpfWZ1bmN0aW9uIHc5ZShjLGwpe2NvbnN0IGQ9bmV3IERhdGUoRGF0ZS5VVEMoMCwwLGMrLTEpKTtyZXR1cm4gJHMoZCkuZm9ybWF0KGwpfWZ1bmN0aW9uIFNyZShjLGwsYSl7Y29uc3QgZD1mdW5jdGlvbiBn''@;'; put 'put ''bXQoYyxsKXtjb25zdCBhPVtdO3JldHVybiBjLmZvckVhY2goZD0+e2NvbnN0IGg9e2Zyb206ZCx0bzpsfTthLmZvckVhY2goZj0+e2YuZnJvbT5oLmZyb20mJmYudG88PWguZnJvbSYmZi5mcm9tPmYudG8mJihoLmZyb20rPTEpfSksaC5mcm9tPj1sJiYobCs9MSksYS5wdXNoKGgpfSksYX0o''@;'; put 'put ''YyxmdW5jdGlvbiBwbXQoYyxsLGEpe2NvbnN0IGQ9QXJyYXkuZnJvbShBcnJheShhKS5rZXlzKCkpLmZpbHRlcihmPT4hMT09PWMuaW5jbHVkZXMoZikpO3ZhciBoO3JldHVybiAwPT09bD9udWxsIT09KGg9ZFtsXSkmJnZvaWQgMCE9PWg/aDowOmRbbC0xXSsxfShjLGwsYSkpO3JldHVybiBm''@;'; put 'put ''dW5jdGlvbiBtbXQoYyl7cmV0dXJuIGMuZm9yRWFjaCgobCxhKT0+e2Muc2xpY2UoYSsxKS5mb3JFYWNoKGg9PntoLmZyb20+bC5mcm9tJiZoLmZyb208aC50byYmKGguZnJvbS09MSl9KX0pLGN9KGQpfWZ1bmN0aW9uIEZ2KGMsbCxhKXsoZnVuY3Rpb24gdm10KGMsbCl7aWYobC5oYXMoYykp''@;'; put 'put ''dGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBEYyhjLGwpe3JldHVybiBjLmdldChDOWUoYyxsKSl9ZnVuY3Rpb24gaTgoYyxsLGEpe3Jl''@;'; put 'put ''dHVybiBjLnNldChDOWUoYyxsKSxhKSxhfWZ1bmN0aW9uIEM5ZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50''@;'; put 'put ''IG9uIHRoaXMgb2JqZWN0Iil9dmFyIHdEPW5ldyBXZWFrTWFwLGE4PW5ldyBXZWFrTWFwLFYyPW5ldyBXZWFrTWFwLFRCPW5ldyBXZWFrTWFwLE1yZT1uZXcgV2Vha01hcCx4cmU9bmV3IFdlYWtNYXAsQUI9bmV3IFdlYWtNYXA7Y29uc3QgUzllPWNsYXNzIHltdHtjb25zdHJ1Y3RvcihsLGEs''@;'; put 'put ''ZCl7RnYodGhpcyx3RCx2b2lkIDApLEZ2KHRoaXMsYTgsdm9pZCAwKSxGdih0aGlzLFYyLHZvaWQgMCksRnYodGhpcyxUQixbXSksRnYodGhpcyxNcmUsW10pLEZ2KHRoaXMseHJlLHZvaWQgMCksRnYodGhpcyxBQixbXSksaTgod0QsdGhpcyxsKSxpOChhOCx0aGlzLGEpLGk4KFYyLHRoaXMs''@;'; put 'put ''ZCl9c2V0UmVtb3ZlZEhmSW5kZXhlcyhsKXtyZXR1cm4gaTgoQUIsdGhpcyxsLm1hcChhPT57Y29uc3QgZD1EYyhhOCx0aGlzKS5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleChhKTtyZXR1cm4gdGhpcy5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGQpfSkpLERjKEFCLHRoaXMpfWdldFJl''@;'; put 'put ''bW92ZWRIZkluZGV4ZXMoKXtyZXR1cm4gRGMoQUIsdGhpcyl9Z2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChsKXtjb25zdCBhPURjKGE4LHRoaXMpLmdldEluZGV4ZXNTZXF1ZW5jZSgpLGQ9RGMoYTgsdGhpcykuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoKTtyZXR1cm4gYS5pbmRleE9mKGRbbF0s''@;'; put 'put ''bCl9c3luY01vdmVzKGwpe2NvbnN0IGQ9YG1vdmUke1YxKERjKHdELHRoaXMpKX1zYDtEYyhWMix0aGlzKS5nZXRFbmdpbmUoKS5iYXRjaCgoKT0+e2wuZm9yRWFjaChoPT57aC5mcm9tIT09aC50byYmaC5mcm9tKzEhPT1oLnRvJiZEYyhWMix0aGlzKS5nZXRFbmdpbmUoKVtkXShEYyhWMix0''@;'; put 'put ''aGlzKS5nZXRTaGVldElkKCksaC5mcm9tLDEsaC50byl9KX0pfXN0b3JlTW92ZXNJbmZvcm1hdGlvbihsLGEsZCl7ITEhPT1kJiYoaTgoTXJlLHRoaXMsbC5tYXAoaD0+dGhpcy5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGgpKSksaTgoeHJlLHRoaXMsdGhpcy5nZXRIZkluZGV4RnJvbVZp''@;'; put 'put ''c3VhbEluZGV4KGEpKSl9Y2FsY3VsYXRlQW5kU3luY01vdmVzKGwsYSl7aWYoRGMoVjIsdGhpcykuaXNQZXJmb3JtaW5nVW5kb1JlZG8oKXx8ITE9PT1sfHwhMT09PWEpcmV0dXJuO2NvbnN0IGQ9U3JlKERjKE1yZSx0aGlzKSxEYyh4cmUsdGhpcyksRGMoYTgsdGhpcykuZ2V0TnVtYmVyT2ZJ''@;'; put 'put ''bmRleGVzKCkpO251bGw9PT1EYyhWMix0aGlzKS5nZXRTaGVldElkKCk/RGMoVjIsdGhpcykuZ2V0UG9zdHBvbmVBY3Rpb24oKCk9PnRoaXMuc3luY01vdmVzKGQpKTp0aGlzLnN5bmNNb3ZlcyhkKX1nZXRJbmRleGVzQ2hhbmdlU3luY01ldGhvZCgpe2NvbnN0IGw9YHNldCR7VjEoRGMod0Qs''@;'; put 'put ''dGhpcykpfU9yZGVyYDtyZXR1cm4gYT0+e2lmKERjKFYyLHRoaXMpLmlzUGVyZm9ybWluZ1VuZG9SZWRvKCkpcmV0dXJuO2NvbnN0IGQ9RGMoYTgsdGhpcykuZ2V0SW5kZXhlc1NlcXVlbmNlKCk7aWYoInVwZGF0ZSI9PT1hJiZkLmxlbmd0aD4wKXtjb25zdCBoPURjKFRCLHRoaXMpLm1hcChE''@;'; put 'put ''PT5kLmluZGV4T2YoRCkpLGY9RGMoVjIsdGhpcykuZ2V0RW5naW5lKCkuZ2V0U2hlZXREaW1lbnNpb25zKERjKFYyLHRoaXMpLmdldFNoZWV0SWQoKSk7bGV0IHY7dj0icm93Ij09PURjKHdELHRoaXMpP2YuaGVpZ2h0OmYud2lkdGg7Zm9yKGxldCBEPWgubGVuZ3RoO0Q8djtEKz0xKWgucHVz''@;'; put 'put ''aChEKTtEYyhWMix0aGlzKS5nZXRFbmdpbmUoKVtsXShEYyhWMix0aGlzKS5nZXRTaGVldElkKCksaCl9aTgoVEIsdGhpcyxkKX19aW5pdCgpe2k4KFRCLHRoaXMsRGMoYTgsdGhpcykuZ2V0SW5kZXhlc1NlcXVlbmNlKCkpfX07ZnVuY3Rpb24gSHYoYyxsLGEpeyhmdW5jdGlvbiBibXQoYyxs''@;'; put 'put ''KXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIE81KGMsbCl7cmV0dXJuIGMuZ2V0KE05ZShjLGwpKX1mdW5jdGlv''@;'; put 'put ''biBOdihjLGwsYSl7cmV0dXJuIGMuc2V0KE05ZShjLGwpLGEpLGF9ZnVuY3Rpb24gTTllKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQg''@;'; put 'put ''aXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIga0I9bmV3IFdlYWtNYXAsREI9bmV3IFdlYWtNYXAsRXJlPW5ldyBXZWFrTWFwLFRyZT1uZXcgV2Vha01hcCxBcmU9bmV3IFdlYWtNYXAsa3JlPW5ldyBXZWFrTWFwLERyZT1uZXcgV2Vha01hcDtjb25zdCB3bXQ9Y2xhc3MgX210''@;'; put 'put ''e2NvbnN0cnVjdG9yKGwsYSxkKXtIdih0aGlzLGtCLHZvaWQgMCksSHYodGhpcyxEQix2b2lkIDApLEh2KHRoaXMsRXJlLHZvaWQgMCksSHYodGhpcyxUcmUsITEpLEh2KHRoaXMsQXJlLCExKSxIdih0aGlzLGtyZSxudWxsKSxIdih0aGlzLERyZSxudWxsKSxOdihrQix0aGlzLG5ldyBTOWUo''@;'; put 'put ''InJvdyIsbCx0aGlzKSksTnYoREIsdGhpcyxuZXcgUzllKCJjb2x1bW4iLGEsdGhpcykpLE52KEVyZSx0aGlzLGQpfWdldEZvckF4aXMobCl7cmV0dXJuIE81KCJyb3ciPT09bD9rQjpEQix0aGlzKX1zZXRQZXJmb3JtVW5kbyhsKXtOdihUcmUsdGhpcyxsKX1zZXRQZXJmb3JtUmVkbyhsKXtO''@;'; put 'put ''dihBcmUsdGhpcyxsKX1pc1BlcmZvcm1pbmdVbmRvUmVkbygpe3JldHVybiBPNShUcmUsdGhpcyl8fE81KEFyZSx0aGlzKX1nZXRTaGVldElkKCl7cmV0dXJuIE81KERyZSx0aGlzKX1nZXRFbmdpbmUoKXtyZXR1cm4gTzUoa3JlLHRoaXMpfWdldFBvc3Rwb25lQWN0aW9uKCl7cmV0dXJuIE81''@;'; put 'put ''KEVyZSx0aGlzKX1zZXR1cFN5bmNFbmRwb2ludChsLGEpe052KGtyZSx0aGlzLGwpLE52KERyZSx0aGlzLGEpLE81KGtCLHRoaXMpLmluaXQoKSxPNShEQix0aGlzKS5pbml0KCl9fTtmdW5jdGlvbiBWdihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gU210KGMpe3ZhciBsPWZ1bmN0aW9uIE1t''@;'; put 'put ''dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3Io''@;'; put 'put ''IkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxs''@;'; put 'put ''LHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gSXJlKGMsbCxhKXt4OWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHg5ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0''@;'; put 'put ''aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gbzgoYyxsLGEpe3JldHVybiBjLnNldChscyhjLGwpLGEpLGF9ZnVuY3Rpb24gQnYoYyxsKXtyZXR1cm4gYy5nZXQobHMoYyxsKSl9ZnVuY3Rpb24gbHMoYyxsLGEpe2lmKCJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IFcxPSJmb3JtdWxhcyIseG10PVsibWF4Um93cyIs''@;'; put 'put ''Im1heENvbHVtbnMiLCJsYW5ndWFnZSJdO0FhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkIiksQWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyTmFtZWRFeHByZXNzaW9uUmVtb3ZlZCIpLEFhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVy''@;'; put 'put ''KCJhZnRlclNoZWV0QWRkZWQiKSxBYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJTaGVldFJlbW92ZWQiKSxBYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJTaGVldFJlbmFtZWQiKSxBYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJGb3JtdWxhc1ZhbHVlc1Vw''@;'; put 'put ''ZGF0ZSIpO2NvbnN0IHpDPWM9PiJVbmRvUmVkby51bmRvIj09PWN8fCJVbmRvUmVkby5yZWRvIj09PWN8fCJhdXRvIj09PWM7dmFyIFA1PW5ldyBXZWFrTWFwLElCPW5ldyBXZWFrTWFwLENEPW5ldyBXZWFrTWFwLGJzPW5ldyBXZWFrU2V0O2NsYXNzIFRtdCBleHRlbmRzIE1ze2NvbnN0cnVj''@;'; put 'put ''dG9yKCl7dmFyIGw7c3VwZXIoLi4uYXJndW1lbnRzKSxsPXRoaXMsZnVuY3Rpb24gQ210KGMsbCl7eDllKGMsbCksbC5hZGQoYyl9KHRoaXMsYnMpLElyZSh0aGlzLFA1LCExKSxJcmUodGhpcyxJQiwhMSksSXJlKHRoaXMsQ0QsW1sidmFsdWVzVXBkYXRlZCIsZnVuY3Rpb24oKXtmb3IodmFy''@;'; put 'put ''IGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbHMoYnMsbCxVbXQpLmNhbGwobCwuLi5kKX1dLFsibmFtZWRFeHByZXNzaW9uQWRkZWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1u''@;'; put 'put ''ZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGxzKGJzLGwsWm10KS5jYWxsKGwsLi4uZCl9XSxbIm5hbWVkRXhwcmVzc2lvblJlbW92ZWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTto''@;'; put 'put ''KyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGxzKGJzLGwsV210KS5jYWxsKGwsLi4uZCl9XSxbInNoZWV0QWRkZWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGxzKGJz''@;'; put 'put ''LGwsWW10KS5jYWxsKGwsLi4uZCl9XSxbInNoZWV0UmVuYW1lZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbHMoYnMsbCxHbXQpLmNhbGwobCwuLi5kKX1dLFsic2hlZXRS''@;'; put 'put ''ZW1vdmVkIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBscyhicyxsLCRtdCkuY2FsbChsLC4uLmQpfV1dKSxWdih0aGlzLCJzdGF0aWNSZWdpc3RlciIsTmYoImZvcm11bGFz''@;'; put 'put ''IikpLFZ2KHRoaXMsImVuZ2luZSIsbnVsbCksVnYodGhpcywic2hlZXRJZCIsbnVsbCksVnYodGhpcywic2hlZXROYW1lIixudWxsKSxWdih0aGlzLCJpbmRleFN5bmNlciIsbnVsbCksVnYodGhpcywicm93QXhpc1N5bmNlciIsbnVsbCksVnYodGhpcywiY29sdW1uQXhpc1N5bmNlciIsbnVs''@;'; put 'put ''bCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIFcxfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDI2MH1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybltXMSwuLi54bXRdfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtX''@;'; put 'put ''MV19ZW5hYmxlUGx1Z2luKCl7dmFyIGwsYT10aGlzO2lmKCF0aGlzLmVuYWJsZWQpe2lmKHRoaXMuZW5naW5lPW51bGwhPT0obD1mdW5jdGlvbiBpbXQoYyl7Y29uc3QgbD1jLmdldFNldHRpbmdzKCksYT1sW1cxXSxkPWE/LmVuZ2luZTtpZighMD09PWF8fGJjKGQpKXJldHVybiBudWxsO3Zh''@;'; put 'put ''ciBoO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBkLmh5cGVyZm9ybXVsYXx8ImZ1bmN0aW9uIj09dHlwZW9mIGQpcmV0dXJuIGZ1bmN0aW9uIGFtdChjLGwsYSl7Y29uc3QgZD1sW1cxXSxoPWZ1bmN0aW9uIHRtdChjKXt2YXIgbDtjb25zdCBhPWNbVzFdLGQ9ZzllKG51bGwhPWEmJm51bGwhPT0o''@;'; put 'put ''bD1hLmVuZ2luZSkmJnZvaWQgMCE9PWwmJmwuaHlwZXJmb3JtdWxhP2EuZW5naW5lOnt9KSxoPXA5ZShjKTtyZXR1cm57Li4uX3JlLC4uLmQsLi4uaH19KGwpLGY9RUIoKSx2PXdyZSgpOyhmdW5jdGlvbiBvbXQoYyxsKXtsJiZsLmZvckVhY2goYT0+e2NvbnN0e25hbWU6ZCxwbHVnaW46aCx0''@;'; put 'put ''cmFuc2xhdGlvbnM6Zn09YTt0cnl7Yy5yZWdpc3RlckZ1bmN0aW9uKGQsaCxmKX1jYXRjaCh2KXtvcyh2Lm1lc3NhZ2UpfX0pfSkoYyxkLmZ1bmN0aW9ucyksZnVuY3Rpb24gc210KGMsbCl7aWYobCl7Y29uc3R7bGFuZ0NvZGU6YX09bDt0cnl7Yy5yZWdpc3Rlckxhbmd1YWdlKGEsbCl9Y2F0''@;'; put 'put ''Y2goZCl7b3MoZC5tZXNzYWdlKX19fShjLGQubGFuZ3VhZ2UpO2NvbnN0IE09Yy5idWlsZEVtcHR5KGgpO3JldHVybiBmLnNldChNLFthXSksdi5zZXQoTSxbYS5ndWlkXSksZnVuY3Rpb24gbG10KGMsbCl7bCYmKGMuc3VzcGVuZEV2YWx1YXRpb24oKSxsLmZvckVhY2goYT0+e2NvbnN0e25h''@;'; put 'put ''bWU6ZCxleHByZXNzaW9uOmgsc2NvcGU6ZixvcHRpb25zOnZ9PWE7dHJ5e2MuYWRkTmFtZWRFeHByZXNzaW9uKGQsaCxmLHYpfWNhdGNoKE0pe29zKE0ubWVzc2FnZSl9fSksYy5yZXN1bWVFdmFsdWF0aW9uKCkpfShNLGQubmFtZWRFeHByZXNzaW9ucyksTS5vbigic2hlZXRBZGRlZCIsKCk9''@;'; put 'put ''PntNLnJlYnVpbGRBbmRSZWNhbGN1bGF0ZSgpfSksTS5vbigic2hlZXRSZW1vdmVkIiwoKT0+e00ucmVidWlsZEFuZFJlY2FsY3VsYXRlKCl9KSxNfShudWxsIT09KGg9ZC5oeXBlcmZvcm11bGEpJiZ2b2lkIDAhPT1oP2g6ZCxsLGMpO2lmKCJvYmplY3QiPT10eXBlb2YgZCYmYmMoZC5oeXBl''@;'; put 'put ''cmZvcm11bGEpKXtjb25zdCBmPUVCKCksdj13cmUoKS5nZXQoZCk7cmV0dXJuIGYuaGFzKGQpfHxmLnNldChkLFtdKSxmLmdldChkKS5wdXNoKGMpLHYmJnYucHVzaChjLmd1aWQpLGQuZ2V0Q29uZmlnKCkubGljZW5zZUtleXx8ZC51cGRhdGVDb25maWcoe2xpY2Vuc2VLZXk6ZjllfSksKGQu''@;'; put 'put ''Z2V0Q29uZmlnKCkubGVhcFllYXIxOTAwIT09X3JlLmxlYXBZZWFyMTkwMHx8ITE9PT1GQShkLmdldENvbmZpZygpLm51bGxEYXRlLF9yZS5udWxsRGF0ZSkpJiZvcyhYc2BJZiB5b3UgdXNlIEh5cGVyRm9ybXVsYSB3aXRoIEhhbmRzb250YWJsZSwga2VlcCB0aGUgZGVmYXVsdCBcYGxlYXBZ''@;'; put 'put ''ZWFyMTkwMFxgIGFuZCBcYG51bGxEYXRlXGAgCiAgICAgIHNldHRpbmdzLiBPdGhlcndpc2UsIEh5cGVyRm9ybXVsYSdzIGRhdGVzIG1heSBub3Qgc3luYyBjb3JyZWN0bHkgd2l0aCBIYW5kc29udGFibGUncyBkYXRlcy5gKSxkfXJldHVybiBudWxsfSh0aGlzLmhvdCkpJiZ2b2lkIDAhPT1s''@;'; put 'put ''P2w6dGhpcy5lbmdpbmUsIXRoaXMuZW5naW5lKXJldHVybiB2b2lkIG9zKCJNaXNzaW5nIHRoZSByZXF1aXJlZCBgZW5naW5lYCBrZXkgaW4gdGhlIEZvcm11bGFzIHNldHRpbmdzLiBQbGVhc2UgZmlsbCBpdCB3aXRoIGVpdGhlciBhbiBlbmdpbmUgY2xhc3Mgb3IgYW4gZW5naW5lIGluc3Rh''@;'; put 'put ''bmNlLiIpO2lmKG51bGwhPT10aGlzLnNoZWV0TmFtZSYmIXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKSl7Y29uc3QgZD10aGlzLmFkZFNoZWV0KHRoaXMuc2hlZXROYW1lLGxzKGJzLHRoaXMsTUQpLmNhbGwodGhpcykpOyExIT09ZCYmbHMoYnMsdGhpcyxTRCku''@;'; put 'put ''Y2FsbCh0aGlzLGQpfXRoaXMuYWRkSG9vaygiYmVmb3JlTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGxzKGJzLGEsVDllKS5jYWxsKGEsLi4uaCl9KSx0aGlz''@;'; put 'put ''LmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGxzKGJzLGEsQTllKS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVVw''@;'; put 'put ''ZGF0ZURhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGxzKGJzLGEsVDllKS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyVXBkYXRlRGF0YSIsZnVuY3Rp''@;'; put 'put ''b24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gbHMoYnMsYSxBOWUpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5RGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gbHMoYnMsYSxJbXQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5U291cmNlRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5l''@;'; put 'put ''dyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gbHMoYnMsYSxSbXQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlVmFsaWRhdGUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8''@;'; put 'put ''ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGxzKGJzLGEsQW10KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKylo''@;'; put 'put ''W2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gbHMoYnMsYSxMbXQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZXREYXRhQXRDZWxsIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRz''@;'; put 'put ''W2ZdO3JldHVybiBscyhicyxhLGs5ZSkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlclNldERhdGFBdFJvd1Byb3AiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJu''@;'; put 'put ''IGxzKGJzLGEsazllKS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNyZWF0ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gbHMoYnMsYSxPbXQpLmNh''@;'; put 'put ''bGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ3JlYXRlQ29sIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBscyhicyxhLFBtdCkuY2FsbChhLC4uLmgpfSksdGhp''@;'; put 'put ''cy5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gbHMoYnMsYSxObXQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJD''@;'; put 'put ''cmVhdGVDb2wiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGxzKGJzLGEsVm10KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZVJvdyIsZnVuY3Rp''@;'; put 'put ''b24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gbHMoYnMsYSxGbXQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlQ29sIixmdW5jdGlvbigpe2Zvcih2YXIgZD1h''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBscyhicyxhLEhtdCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxo''@;'; put 'put ''PW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gbHMoYnMsYSxCbXQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVDb2wiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0w''@;'; put 'put ''O2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGxzKGJzLGEsam10KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmluZGV4U3luY2VyPW5ldyB3bXQodGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsZD0+e3RoaXMuaG90LmFkZEhvb2tPbmNlKCJp''@;'; put 'put ''bml0IiwoKT0+e2QoKX0pfSksdGhpcy5yb3dBeGlzU3luY2VyPXRoaXMuaW5kZXhTeW5jZXIuZ2V0Rm9yQXhpcygicm93IiksdGhpcy5jb2x1bW5BeGlzU3luY2VyPXRoaXMuaW5kZXhTeW5jZXIuZ2V0Rm9yQXhpcygiY29sdW1uIiksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJSb3dTZXF1ZW5j''@;'; put 'put ''ZUNoYW5nZSIsdGhpcy5yb3dBeGlzU3luY2VyLmdldEluZGV4ZXNDaGFuZ2VTeW5jTWV0aG9kKCkpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2UiLHRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRJbmRleGVzQ2hhbmdlU3luY01ldGhvZCgpKSx0aGlzLmhvdC5h''@;'; put 'put ''ZGRIb29rKCJiZWZvcmVSb3dNb3ZlIiwoZCxoLGYsdik9Pnt0aGlzLnJvd0F4aXNTeW5jZXIuc3RvcmVNb3Zlc0luZm9ybWF0aW9uKGQsaCx2KX0pLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZUNvbHVtbk1vdmUiLChkLGgsZix2KT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5zdG9yZU1vdmVz''@;'; put 'put ''SW5mb3JtYXRpb24oZCxoLHYpfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJSb3dNb3ZlIiwoZCxoLGYsdixNKT0+e3RoaXMucm93QXhpc1N5bmNlci5jYWxjdWxhdGVBbmRTeW5jTW92ZXModixNKX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyQ29sdW1uTW92ZSIsKGQsaCxmLHYsTSk9Pnt0''@;'; put 'put ''aGlzLmNvbHVtbkF4aXNTeW5jZXIuY2FsY3VsYXRlQW5kU3luY01vdmVzKHYsTSl9KSx0aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVDb2x1bW5GcmVlemUiLChkLGgpPT57dGhpcy5jb2x1bW5BeGlzU3luY2VyLnN0b3JlTW92ZXNJbmZvcm1hdGlvbihbZF0sdGhpcy5ob3QuZ2V0U2V0dGluZ3Mo''@;'; put 'put ''KS5maXhlZENvbHVtbnNTdGFydCxoKX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyQ29sdW1uRnJlZXplIiwoZCxoKT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5jYWxjdWxhdGVBbmRTeW5jTW92ZXMoaCxoKX0pLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZUNvbHVtblVuZnJlZXplIiwoZCxo''@;'; put 'put ''KT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5zdG9yZU1vdmVzSW5mb3JtYXRpb24oW2RdLHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQtMSxoKX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyQ29sdW1uVW5mcmVlemUiLChkLGgpPT57dGhpcy5jb2x1bW5BeGlzU3lu''@;'; put 'put ''Y2VyLmNhbGN1bGF0ZUFuZFN5bmNNb3ZlcyhoLGgpfSksdGhpcy5hZGRIb29rKCJhZnRlckNlbGxNZXRhUmVzZXQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGxzKGJzLGEs''@;'; put 'put ''RG10KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVVuZG8iLCgpPT57dGhpcy5pbmRleFN5bmNlci5zZXRQZXJmb3JtVW5kbyghMCksdGhpcy5lbmdpbmUudW5kbygpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZWRvIiwoKT0+e3RoaXMuaW5kZXhTeW5jZXIuc2V0UGVyZm9y''@;'; put 'put ''bVJlZG8oITApLHRoaXMuZW5naW5lLnJlZG8oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJVbmRvIiwoKT0+e3RoaXMuaW5kZXhTeW5jZXIuc2V0UGVyZm9ybVVuZG8oITEpfSksdGhpcy5hZGRIb29rKCJhZnRlclVuZG8iLCgpPT57dGhpcy5pbmRleFN5bmNlci5zZXRQZXJmb3JtUmVkbyghMSl9''@;'; put 'put ''KSx0aGlzLmFkZEhvb2soImFmdGVyRGV0YWNoQ2hpbGQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGxzKGJzLGEsem10KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2so''@;'; put 'put ''ImJlZm9yZUF1dG9maWxsIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBscyhicyxhLGttdCkuY2FsbChhLC4uLmgpfSksQnYoQ0QsdGhpcykuZm9yRWFjaChkPT57bGV0W2gs''@;'; put 'put ''Zl09ZDtyZXR1cm4gdGhpcy5lbmdpbmUub24oaCxmKX0pLHN1cGVyLmVuYWJsZVBsdWdpbigpfX1kaXNhYmxlUGx1Z2luKCl7QnYoQ0QsdGhpcykuZm9yRWFjaChsPT57bGV0W2EsZF09bDtyZXR1cm4gdGhpcy5lbmdpbmUub2ZmKGEsZCl9KSx2OWUodGhpcy5lbmdpbmUsdGhpcy5ob3QpLHRo''@;'; put 'put ''aXMuZW5naW5lPW51bGwsc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbihsKXtjb25zdCBhPWZ1bmN0aW9uIG5tdChjKXt2YXIgbDtjb25zdCBhPWNbVzFdO3JldHVybnsuLi5nOWUobnVsbCE9YSYmbnVsbCE9PShsPWEuZW5naW5lKSYmdm9pZCAwIT09bCYmbC5oeXBlcmZvcm11''@;'; put 'put ''bGE/YS5lbmdpbmU6e30pLC4uLnA5ZShjKX19KHRoaXMuaG90LmdldFNldHRpbmdzKCkpOyhmdW5jdGlvbiBybXQoYyxsKXtyZXR1cm4gT2JqZWN0LmtleXMobCkuc29tZShhPT52b2lkIDAhPT1sW2FdJiZsW2FdIT09Y1thXSl9KSh0aGlzLmVuZ2luZS5nZXRDb25maWcoKSxhKSYmdGhpcy5l''@;'; put 'put ''bmdpbmUudXBkYXRlQ29uZmlnKGEpO2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtXMV07aWYoTWEoZCkmJk1hKGQuc2hlZXROYW1lKSYmZC5zaGVldE5hbWUhPT10aGlzLnNoZWV0TmFtZSYmdGhpcy5zd2l0Y2hTaGVldChkLnNoZWV0TmFtZSksIWwuZGF0YSYmbnVsbD09PXRoaXMu''@;'; put 'put ''c2hlZXROYW1lKXtjb25zdCBoPXRoaXMuaG90LmdldFNldHRpbmdzKClbVzFdLnNoZWV0TmFtZTtpZihoJiZ0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdChoKSl0aGlzLnN3aXRjaFNoZWV0KHRoaXMuc2hlZXROYW1lKTtlbHNle2NvbnN0IGY9dGhpcy5hZGRTaGVldChoPz92b2lkIDAsbHMo''@;'; put 'put ''YnMsdGhpcyxNRCkuY2FsbCh0aGlzKSk7bHMoYnMsdGhpcyxTRCkuY2FsbCh0aGlzLGYpfX1zdXBlci51cGRhdGVQbHVnaW4obCl9ZGVzdHJveSgpe0J2KENELHRoaXMpLmZvckVhY2gobD0+e3ZhciBhO2xldFtkLGhdPWw7cmV0dXJuIG51bGw9PT0oYT10aGlzLmVuZ2luZSl8fHZvaWQgMD09''@;'; put 'put ''PWE/dm9pZCAwOmEub2ZmKGQsaCl9KSxvOChDRCx0aGlzLG51bGwpLHY5ZSh0aGlzLmVuZ2luZSx0aGlzLmhvdCksdGhpcy5lbmdpbmU9bnVsbCxzdXBlci5kZXN0cm95KCl9YWRkU2hlZXQobCxhKXtpZihNYShhKSYmIXo1ZShhKSlyZXR1cm4gb3MoIlRoZSBwcm92aWRlZCBkYXRhIHNob3Vs''@;'; put 'put ''ZCBiZSBhbiBhcnJheSBvZiBhcnJheXMuIiksITE7aWYobnVsbCE9bCYmdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QobCkpcmV0dXJuIG9zKCJTaGVldCB3aXRoIHRoZSBwcm92aWRlZCBuYW1lIGFscmVhZHkgZXhpc3RzLiIpLCExO3RyeXtjb25zdCBkPXRoaXMuZW5naW5lLmFkZFNoZWV0''@;'; put 'put ''KGw/P3ZvaWQgMCk7cmV0dXJuIGEmJnRoaXMuZW5naW5lLnNldFNoZWV0Q29udGVudCh0aGlzLmVuZ2luZS5nZXRTaGVldElkKGQpLGEpLGR9Y2F0Y2goZCl7cmV0dXJuIG9zKGQubWVzc2FnZSksITF9fXN3aXRjaFNoZWV0KGwpe2lmKCF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdChsKSly''@;'; put 'put ''ZXR1cm4gdm9pZCBkSihgVGhlIHNoZWV0IG5hbWVkIFxgJHtsfVxgIGRvZXMgbm90IGV4aXN0LCBzd2l0Y2ggYWJvcnRlZC5gKTtscyhicyx0aGlzLFNEKS5jYWxsKHRoaXMsbCk7Y29uc3QgYT10aGlzLmVuZ2luZS5nZXRTaGVldFNlcmlhbGl6ZWQodGhpcy5zaGVldElkKTthLmxlbmd0aD4w''@;'; put 'put ''JiZ0aGlzLmhvdC5sb2FkRGF0YShhLGAke1YxKFcxKX0uc3dpdGNoU2hlZXRgKX1nZXRDZWxsVHlwZShsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp0aGlzLnNoZWV0SWQ7Y29uc3QgaD10aGlzLmhvdC50b1BoeXNpY2Fs''@;'; put 'put ''Um93KGwpLGY9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihhKTtyZXR1cm4gbnVsbCE9PWgmJm51bGwhPT1mP3RoaXMuZW5naW5lLmdldENlbGxUeXBlKHtzaGVldDpkLHJvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChsKSxjb2w6dGhpcy5jb2x1bW5B''@;'; put 'put ''eGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYSl9KToiRU1QVFkifWlzRm9ybXVsYUNlbGxUeXBlKGwsYSl7cmV0dXJuIHRoaXMuZW5naW5lLmRvZXNDZWxsSGF2ZUZvcm11bGEoe3NoZWV0OmFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3Vt''@;'; put 'put ''ZW50c1syXTp0aGlzLnNoZWV0SWQscm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChhKX0pfXJlbmRlckRlcGVuZGVudFNoZWV0cyhsKXtsZXQgYT1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IGQ9bmV3IFNldDtsLmZvckVhY2goaD0+e3ZhciBmO2NvbnN0IHY9bnVsbD09aHx8bnVsbD09PShmPWguYWRkcmVzcyl8fHZvaWQgMD09PWY/dm9pZCAwOmYuc2hlZXQ7dm9pZCAwIT09diYm''@;'; put 'put ''KGQuaGFzKHYpfHxkLmFkZCh2KSl9KSxtOWUodGhpcy5lbmdpbmUpLmZvckVhY2goKGgsZik9Pnt2YXIgdjsoYXx8ZiE9PXRoaXMuc2hlZXRJZCkmJmQuaGFzKGYpJiYoaC5yZW5kZXIoKSxudWxsPT09KHY9aC52aWV3KXx8dm9pZCAwPT09dnx8di5hZGp1c3RFbGVtZW50c1NpemUoKSl9KX12''@;'; put 'put ''YWxpZGF0ZURlcGVuZGVudENlbGxzKGwpe2NvbnN0IGQ9Zj0+e3ZhciB2O2NvbnN0e3JvdzpNLGNvbDpELHNoZWV0OlV9PW51bGwhPT0odj1mPy5hZGRyZXNzKSYmdm9pZCAwIT09dj92Ont9O3JldHVybiBNYShVKT9gJHtVfToke019eCR7RH1gOiIifSxoPW5ldyBTZXQoKGFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXSkubWFwKGY9PmQoZikpKTtsLmZvckVhY2goZj0+e3ZhciB2LE07Y29uc3R7cm93OkQsY29sOlV9PW51bGwhPT0odj1mLmFkZHJlc3MpJiZ2b2lkIDAhPT12P3Y6e307aWYoITE9PT1NYShEKXx8ITE9PT1NYShV''@;'; put 'put ''KXx8RD49dGhpcy5ob3QuY291bnRSb3dzKCl8fFU+PXRoaXMuaG90LmNvdW50Q29scygpKXJldHVybjtjb25zdCB0ZT1udWxsPT1mfHxudWxsPT09KE09Zi5hZGRyZXNzKXx8dm9pZCAwPT09TT92b2lkIDA6TS5zaGVldCxvZT1kKGYpO2lmKHZvaWQgMCE9PXRlJiYhaC5oYXMob2UpKXtjb25z''@;'; put 'put ''dCB2ZT1tOWUodGhpcy5lbmdpbmUpLmdldCh0ZSk7aWYoIXZlKXJldHVybjt2ZS52YWxpZGF0ZUNlbGwodmUuZ2V0RGF0YUF0Q2VsbChELFUpLHZlLmdldENlbGxNZXRhKEQsVSksKCk9Pnt9KX19KX1zeW5jQ2hhbmdlV2l0aEVuZ2luZShsLGEsZCl7Y29uc3QgaD17cm93OnRoaXMucm93QXhp''@;'; put 'put ''c1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChhKSxzaGVldDp0aGlzLnNoZWV0SWR9O2lmKCF0aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1NldENlbGxDb250ZW50cyhoKSlyZXR1''@;'; put 'put ''cm4gdm9pZCBvcyhgTm90IHBvc3NpYmxlIHRvIHNldCBjZWxsIGRhdGEgYXQgJHtKU09OLnN0cmluZ2lmeShoKX1gKTtjb25zdCBmPXRoaXMuaG90LmdldENlbGxNZXRhKGwsYSk7cmV0dXJuIENyZShkLGYudHlwZSkmJihiOWUoZCxmLmRhdGVGb3JtYXQpP2Q9XzllKGQsZi5kYXRlRm9ybWF0''@;'; put 'put ''KTohMT09PWZ1bmN0aW9uIGhtdChjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGMmJmMuc3RhcnRzV2l0aCgiPSIpfShkKSYmKGQ9YCcke2R9YCkpLHRoaXMuZW5naW5lLnNldENlbGxDb250ZW50cyhoLGQpfX1mdW5jdGlvbiBTRChjKXt0aGlzLnNoZWV0TmFtZT1jLHRoaXMuc2hlZXRJZD10''@;'; put 'put ''aGlzLmVuZ2luZS5nZXRTaGVldElkKHRoaXMuc2hlZXROYW1lKX1mdW5jdGlvbiBFOWUoYyxsLGEpe2lmKG1vKGEpJiZudWxsIT09YSl7Y29uc3QgZD10aGlzLmhvdC50b1Zpc3VhbFJvdyhjKSxoPXRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGwpLGY9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZCxo''@;'; put 'put ''KS52YWx1ZUdldHRlcjtyZXR1cm4gZj9mLmNhbGwodGhpcy5ob3QsYSk6YS50b1N0cmluZygpfXJldHVybiBhfWZ1bmN0aW9uIE1EKGMsbCxhLGQpe3JldHVybiB0aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXJyYXkoYyxsLGEsZCkubWFwKChoLGYpPT5oLm1hcCgodixNKT0+bHMoYnMsdGhpcyxF''@;'; put 'put ''OWUpLmNhbGwodGhpcyxmLE0sdikpKX1mdW5jdGlvbiBBbXQoYyxsLGEpe2NvbnN0IGQ9dGhpcy5ob3QucHJvcFRvQ29sKGEpO2lmKHRoaXMuaXNGb3JtdWxhQ2VsbFR5cGUobCxkKSl7Y29uc3QgaD17cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwp''@;'; put 'put ''LGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChkKSxzaGVldDp0aGlzLnNoZWV0SWR9LGY9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEobCxkKTtsZXQgdj10aGlzLmVuZ2luZS5nZXRDZWxsVmFsdWUoaCk7cmV0dXJuImRhdGUiPT09Zi50eXBlJiZqMSh2''@;'; put 'put ''KSYmKHY9dzllKHYsZi5kYXRlRm9ybWF0KSksIm9iamVjdCI9PXR5cGVvZiB2JiZudWxsIT09dj92LnZhbHVlOnZ9cmV0dXJuIGN9ZnVuY3Rpb24ga210KGMsbCxhKXtjb25zdHtyb3c6ZCxjb2w6aH09bC5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6Zixjb2w6dn09bC5nZXRCb3R0b21FbmRD''@;'; put 'put ''b3JuZXIoKSx7cm93Ok0sY29sOkR9PWEuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93OlUsY29sOnRlfT1hLmdldEJvdHRvbUVuZENvcm5lcigpLG9lPXtzdGFydDp7cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGQpLGNvbDp0aGlzLmNvbHVtbkF4aXNT''@;'; put 'put ''eW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChoKSxzaGVldDp0aGlzLnNoZWV0SWR9LGVuZDp7cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGYpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleCh2''@;'; put 'put ''KSxzaGVldDp0aGlzLnNoZWV0SWR9fSx2ZT17c3RhcnQ6e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChNKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoRCksc2hlZXQ6dGhpcy5zaGVldElkfSxlbmQ6''@;'; put 'put ''e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChVKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgodGUpLHNoZWV0OnRoaXMuc2hlZXRJZH19O2lmKCExPT09dGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9T''@;'; put 'put ''ZXRDZWxsQ29udGVudHModmUpKXJldHVybiExO2NvbnN0IHdlPXRoaXMuZW5naW5lLmdldEZpbGxSYW5nZURhdGEob2UsdmUpLHtyb3c6RmUsY29sOldlfT1vZS5zdGFydCx7cm93Om50LGNvbDpkdH09b2UuZW5kLG10PW50LUZlKzEsJHQ9ZHQtV2UrMTtmb3IobGV0IHp0PTA7enQ8d2UubGVu''@;'; put 'put ''Z3RoO3p0Kz0xKWZvcihsZXQgeW49MDt5bjx3ZVt6dF0ubGVuZ3RoO3luKz0xKXtjb25zdCBnbj13ZVt6dF1beW5dLHduPUZlK3p0JW10LFJuPVdlK3luJSR0LERyPXRoaXMuaG90LmdldENlbGxNZXRhKHduLFJuKTtDcmUoZ24sRHIudHlwZSkmJihnbi5zdGFydHNXaXRoKCInIik/d2VbenRd''@;'; put 'put ''W3luXT1nbi5zbGljZSgxKTohMT09PXRoaXMuaXNGb3JtdWxhQ2VsbFR5cGUod24sUm4sdGhpcy5zaGVldElkKSYmKHdlW3p0XVt5bl09Zm10KGduLERyLmRhdGVGb3JtYXQpKSl9cmV0dXJuIHdlfWZ1bmN0aW9uIFQ5ZShjLGwpeyhhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3Vt''@;'; put 'put ''ZW50c1syXT9hcmd1bWVudHNbMl06IiIpLmluY2x1ZGVzKFYxKFcxKSl8fG84KElCLHRoaXMsYmModGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5kYXRhKSl9ZnVuY3Rpb24gRG10KCl7aWYoQnYoSUIsdGhpcykpcmV0dXJuIHZvaWQgdGhpcy5zd2l0Y2hTaGVldCh0aGlzLnNoZWV0TmFtZSk7Y29u''@;'; put 'put ''c3QgYz1scyhicyx0aGlzLE1EKS5jYWxsKHRoaXMpO2MuZm9yRWFjaCgoYSxkKT0+e2EuZm9yRWFjaCgoaCxmKT0+e2NvbnN0IHY9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZCxmLHtza2lwTWV0YUV4dGVuc2lvbjohMH0pLE09di5kYXRlRm9ybWF0O0NyZShoLHYudHlwZSkmJihiOWUoaCxNKT9j''@;'; put 'put ''W2RdW2ZdPV85ZShoLE0pOmguc3RhcnRzV2l0aCgiPSIpfHwoY1tkXVtmXT1gJyR7aH1gKSl9KX0pLG84KFA1LHRoaXMsITApO2NvbnN0IGw9dGhpcy5lbmdpbmUuc2V0U2hlZXRDb250ZW50KHRoaXMuc2hlZXRJZCxjKTt0aGlzLmluZGV4U3luY2VyLnNldHVwU3luY0VuZHBvaW50KHRoaXMu''@;'; put 'put ''ZW5naW5lLHRoaXMuc2hlZXRJZCksdGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMobCksbzgoUDUsdGhpcywhMSl9ZnVuY3Rpb24gQTllKGMsbCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiIiO2lmKGEuaW5jbHVkZXMoVjEo''@;'; put 'put ''VzEpKSlyZXR1cm47Y29uc3QgZD1mdW5jdGlvbiBjbXQoYyxsKXtyZXR1cm4oYmMobCl8fCFjLmRvZXNTaGVldEV4aXN0KGwpKSYmKGw9Yy5hZGRTaGVldChsKSksbH0odGhpcy5lbmdpbmUsdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtXMV0uc2hlZXROYW1lKTtpZihscyhicyx0aGlzLFNEKS5j''@;'; put 'put ''YWxsKHRoaXMsZCksInVwZGF0ZVNldHRpbmdzIiE9PWEpaWYoQnYoSUIsdGhpcykpdGhpcy5zd2l0Y2hTaGVldCh0aGlzLnNoZWV0TmFtZSk7ZWxzZXtjb25zdCBoPWxzKGJzLHRoaXMsTUQpLmNhbGwodGhpcyk7aWYodGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9SZXBsYWNlU2hlZXRDb250''@;'; put 'put ''ZW50KHRoaXMuc2hlZXRJZCxoKSl7bzgoUDUsdGhpcywhMCk7Y29uc3QgZj10aGlzLmVuZ2luZS5zZXRTaGVldENvbnRlbnQodGhpcy5zaGVldElkLGgpO3RoaXMuaW5kZXhTeW5jZXIuc2V0dXBTeW5jRW5kcG9pbnQodGhpcy5lbmdpbmUsdGhpcy5zaGVldElkKSx0aGlzLnJlbmRlckRlcGVu''@;'; put 'put ''ZGVudFNoZWV0cyhmKSxvOChQNSx0aGlzLCExKX19fWZ1bmN0aW9uIEltdChjLGwsYSxkKXtpZigiZ2V0IiE9PWR8fEJ2KFA1LHRoaXMpfHxudWxsPT09dGhpcy5zaGVldE5hbWV8fCF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdCh0aGlzLnNoZWV0TmFtZSl8fG51bGw9PT1jfHxudWxsPT09''@;'; put 'put ''bClyZXR1cm47Y29uc3QgaD10aGlzLmdldENlbGxUeXBlKGMsbCk7aWYoIlZBTFVFIj09PWh8fCJFTVBUWSI9PT1oKXJldHVybiB2b2lkKGEudmFsdWU9ZnVuY3Rpb24gZG10KGMpe3JldHVybiBmdW5jdGlvbiB1bXQoYyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjJiYiJyI9PT1jLmNoYXJB''@;'; put 'put ''dCgwKSYmIj0iPT09Yy5jaGFyQXQoMSl9KGMpP2Muc3Vic3RyKDEpOmN9KGEudmFsdWUpKTtjb25zdCBmPXtyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYyksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4''@;'; put 'put ''KGwpLHNoZWV0OnRoaXMuc2hlZXRJZH07bGV0IHY9dGhpcy5lbmdpbmUuZ2V0Q2VsbFZhbHVlKGYpO2NvbnN0IE09dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoYyxsLHtza2lwTWV0YUV4dGVuc2lvbjohMH0pOyJkYXRlIj09PU0udHlwZSYmajEodikmJih2PXc5ZSh2LE0uZGF0ZUZvcm1hdCkpLGEu''@;'; put 'put ''dmFsdWU9Im9iamVjdCI9PXR5cGVvZiB2JiZudWxsIT09dj92LnZhbHVlOnZ9ZnVuY3Rpb24gUm10KGMsbCxhLGQpe2lmKCJnZXQiIT09ZHx8QnYoUDUsdGhpcyl8fG51bGw9PT10aGlzLnNoZWV0TmFtZXx8IXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKSlyZXR1''@;'; put 'put ''cm47Y29uc3QgaD10aGlzLmhvdC50b1Zpc3VhbFJvdyhjKSxmPXRoaXMuaG90LnByb3BUb0NvbChsKTtpZihudWxsPT09aHx8bnVsbD09PWYpcmV0dXJuO2NvbnN0IHY9dGhpcy5nZXRDZWxsVHlwZShoLGYpO2lmKCJWQUxVRSI9PT12fHwiRU1QVFkiPT09dilyZXR1cm47Y29uc3QgTT10aGlz''@;'; put 'put ''LmVuZ2luZS5nZXRTaGVldERpbWVuc2lvbnModGhpcy5lbmdpbmUuZ2V0U2hlZXRJZCh0aGlzLnNoZWV0TmFtZSkpO2lmKDA9PT1NLndpZHRoJiYwPT09TS5oZWlnaHQpcmV0dXJuO2NvbnN0IEQ9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChoKSxj''@;'; put 'put ''b2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoZiksc2hlZXQ6dGhpcy5zaGVldElkfTthLnZhbHVlPXRoaXMuZW5naW5lLmdldENlbGxTZXJpYWxpemVkKEQpfWZ1bmN0aW9uIGs5ZShjLGwpe2lmKHpDKGwpKXJldHVybjtjb25zdCBhPVtdLGQ9W10s''@;'; put 'put ''aD10aGlzLmVuZ2luZS5iYXRjaCgoKT0+e2MuZm9yRWFjaChmPT57bGV0W3YsTSwsRF09Zjtjb25zdCBVPXRoaXMuaG90LnByb3BUb0NvbChNKSx0ZT10aGlzLmhvdC50b1BoeXNpY2FsUm93KHYpLG9lPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oVSksdmU9e3Jvdzp0aGlzLnJvd0F4aXNT''@;'; put 'put ''eW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleCh2KSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoVSksc2hlZXQ6dGhpcy5zaGVldElkfTtEPWxzKGJzLHRoaXMsRTllKS5jYWxsKHRoaXMsdGUsb2UsRCksbnVsbCE9PXRlJiZudWxsIT09''@;'; put 'put ''b2U/dGhpcy5zeW5jQ2hhbmdlV2l0aEVuZ2luZSh2LFUsRCk6YS5wdXNoKFt2LFUsRF0pLGQucHVzaCh7YWRkcmVzczp2ZX0pfSl9KTthLmxlbmd0aCYmdGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyQ2hhbmdlIiwoKT0+e2NvbnN0IGY9dGhpcy5lbmdpbmUuYmF0Y2goKCk9PnthLmZvckVh''@;'; put 'put ''Y2godj0+e2xldFtNLEQsVV09djt0aGlzLnN5bmNDaGFuZ2VXaXRoRW5naW5lKE0sRCxVKX0pfSk7dGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoZiwhMCl9KSx0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhoKSx0aGlzLnZhbGlkYXRlRGVwZW5kZW50Q2VsbHMoaCxkKX1mdW5jdGlvbiBM''@;'; put 'put ''bXQoYyxsKXtpZih6QyhsKSlyZXR1cm47Y29uc3QgYT1bXSxkPVtdO2MuZm9yRWFjaChoPT57bGV0W2YsdiwsTV09aDtjb25zdCBEPXRoaXMuaG90LnByb3BUb0NvbCh2KTtpZighajEoRCkpcmV0dXJuO2NvbnN0IFU9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1''@;'; put 'put ''YWxJbmRleChmKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoRCksc2hlZXQ6dGhpcy5zaGVldElkfTt0aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1NldENlbGxDb250ZW50cyhVKT8oZC5wdXNoKHthZGRyZXNzOlV9KSxhLnB1c2goLi4udGhp''@;'; put 'put ''cy5lbmdpbmUuc2V0Q2VsbENvbnRlbnRzKFUsTSkpKTpvcyhgTm90IHBvc3NpYmxlIHRvIHNldCBzb3VyY2UgY2VsbCBkYXRhIGF0ICR7SlNPTi5zdHJpbmdpZnkoVSl9YCl9KSx0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhhKSx0aGlzLnZhbGlkYXRlRGVwZW5kZW50Q2VsbHMoYSxkKX1m''@;'; put 'put ''dW5jdGlvbiBPbXQoYyxsKXtsZXQgYT10aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChjKTtpZihjPj10aGlzLmhvdC5jb3VudFJvd3MoKSYmKGE9YyksbnVsbD09PXRoaXMuc2hlZXRJZHx8IXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXRO''@;'; put 'put ''YW1lKXx8IXRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvQWRkUm93cyh0aGlzLnNoZWV0SWQsW2EsbF0pKXJldHVybiExfWZ1bmN0aW9uIFBtdChjLGwpe2xldCBhPXRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGMpO2lmKGM+PXRoaXMuaG90LmNvdW50''@;'; put 'put ''Q29scygpJiYoYT1jKSxudWxsPT09dGhpcy5zaGVldElkfHwhdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QodGhpcy5zaGVldE5hbWUpfHwhdGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9BZGRDb2x1bW5zKHRoaXMuc2hlZXRJZCxbYSxsXSkpcmV0dXJuITF9ZnVuY3Rpb24gRm10KGMsbCxh''@;'; put 'put ''KXtyZXR1cm4hMSE9PXRoaXMucm93QXhpc1N5bmNlci5zZXRSZW1vdmVkSGZJbmRleGVzKGEpLmV2ZXJ5KGY9PnRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvUmVtb3ZlUm93cyh0aGlzLnNoZWV0SWQsW2YsMV0pKSYmdm9pZCAwfWZ1bmN0aW9uIEhtdChjLGwsYSl7cmV0dXJuITEhPT10aGlz''@;'; put 'put ''LmNvbHVtbkF4aXNTeW5jZXIuc2V0UmVtb3ZlZEhmSW5kZXhlcyhhKS5ldmVyeShmPT50aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1JlbW92ZUNvbHVtbnModGhpcy5zaGVldElkLFtmLDFdKSkmJnZvaWQgMH1mdW5jdGlvbiBObXQoYyxsLGEpe2lmKHpDKGEpKXJldHVybjtjb25zdCBkPXRo''@;'; put 'put ''aXMuZW5naW5lLmFkZFJvd3ModGhpcy5zaGVldElkLFt0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChjKSxsXSk7dGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoZCl9ZnVuY3Rpb24gVm10KGMsbCxhKXtpZih6QyhhKSlyZXR1cm47Y29uc3QgZD10aGlzLmVu''@;'; put 'put ''Z2luZS5hZGRDb2x1bW5zKHRoaXMuc2hlZXRJZCxbdGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYyksbF0pO3RoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGQpfWZ1bmN0aW9uIEJtdChjLGwsYSxkKXtpZih6QyhkKSlyZXR1cm47Y29uc3QgaD10aGlz''@;'; put 'put ''LnJvd0F4aXNTeW5jZXIuZ2V0UmVtb3ZlZEhmSW5kZXhlcygpLnNvcnQoKHYsTSk9Pk0tdiksZj10aGlzLmVuZ2luZS5iYXRjaCgoKT0+e2guZm9yRWFjaCh2PT57dGhpcy5lbmdpbmUucmVtb3ZlUm93cyh0aGlzLnNoZWV0SWQsW3YsMV0pfSl9KTt0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0''@;'; put 'put ''cyhmKX1mdW5jdGlvbiBqbXQoYyxsLGEsZCl7aWYoekMoZCkpcmV0dXJuO2NvbnN0IGg9dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldFJlbW92ZWRIZkluZGV4ZXMoKS5zb3J0KCh2LE0pPT5NLXYpLGY9dGhpcy5lbmdpbmUuYmF0Y2goKCk9PntoLmZvckVhY2godj0+e3RoaXMuZW5naW5lLnJl''@;'; put 'put ''bW92ZUNvbHVtbnModGhpcy5zaGVldElkLFt2LDFdKX0pfSk7dGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoZil9ZnVuY3Rpb24gem10KGMsbCxhKXt2YXIgZDtvOChQNSx0aGlzLCEwKTtjb25zdCBoPWxzKGJzLHRoaXMsTUQpLmNhbGwodGhpcyxhLDAsYSsoKG51bGw9PT0oZD1sLl9fY2hp''@;'; put 'put ''bGRyZW4pfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmxlbmd0aCl8fDApLHRoaXMuaG90LmNvdW50U291cmNlQ29scygpKTtvOChQNSx0aGlzLCExKSxoLmZvckVhY2goKGYsdik9PntmLmZvckVhY2goKE0sRCk9Pnt0aGlzLmVuZ2luZS5zZXRDZWxsQ29udGVudHMoe2NvbDpELHJvdzphK3Ysc2hl''@;'; put 'put ''ZXQ6dGhpcy5zaGVldElkfSxbW01dXSl9KX0pfWZ1bmN0aW9uIFVtdChjKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZSIsYyl9ZnVuY3Rpb24gWm10KGMsbCl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyTmFtZWRFeHByZXNzaW9uQWRkZWQiLGMsbCl9ZnVu''@;'; put 'put ''Y3Rpb24gV210KGMsbCl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyTmFtZWRFeHByZXNzaW9uUmVtb3ZlZCIsYyxsKX1mdW5jdGlvbiBZbXQoYyl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2hlZXRBZGRlZCIsYyl9ZnVuY3Rpb24gR210KGMsbCl7bHMoYnMsdGhpcyxTRCkuY2FsbCh0aGlz''@;'; put 'put ''LGwpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclNoZWV0UmVuYW1lZCIsYyxsKX1mdW5jdGlvbiAkbXQoYyxsKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJTaGVldFJlbW92ZWQiLGMsbCl9ZnVuY3Rpb24gRDllKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90''@;'; put 'put ''IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBqdihjLGwpe3JldHVybiBjLmdldChzOChjLGwpKX1mdW5jdGlvbiBJOWUoYyxsLGEpe3JldHVybiBjLnNldChzOChjLGwpLGEpLGF9ZnVuY3Rpb24gczgoYyxsLGEpe2lm''@;'; put 'put ''KCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfUFhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJi''@;'; put 'put ''ZWZvcmVIaWRlQ29sdW1ucyIpLEFhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckhpZGVDb2x1bW5zIiksQWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZVVuaGlkZUNvbHVtbnMiKSxBYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJVbmhpZGVDb2x1bW5zIik7''@;'; put 'put ''Y29uc3QgUjllPSJoaWRkZW5Db2x1bW5zIjt2YXIgVzQ9bmV3IFdlYWtNYXAsenY9bmV3IFdlYWtTZXQ7Y2xhc3MgZTZ0IGV4dGVuZHMgTXN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIHFtdChjLGwpe0Q5ZShjLGwpLGwuYWRkKGMpfSh0aGlzLHp2KSxmdW5j''@;'; put 'put ''dGlvbiBKbXQoYyxsLGEpe0Q5ZShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsVzQsbnVsbCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIFI5ZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAzMTB9c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue2Nv''@;'; put 'put ''cHlQYXN0ZUVuYWJsZWQ6ITAsaW5kaWNhdG9yczohMSxjb2x1bW5zOltdfX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbUjllXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KEk5ZShXNCx0aGlzLG5ldyBBTiksanYoVzQsdGhpcyku''@;'; put 'put ''YWRkTG9jYWxIb29rKCJpbml0IiwoKT0+czgoenYsdGhpcyxvNnQpLmNhbGwodGhpcykpLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSxqdihXNCx0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMi''@;'; put 'put ''LGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIHM4KHp2LGwsYTZ0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q2VsbE1ldGEiLChhLGQsaCk9PnM4KHp2''@;'; put 'put ''LHRoaXMsbjZ0KS5jYWxsKHRoaXMsYSxkLGgpKSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbFdpZHRoIiwoYSxkKT0+czgoenYsdGhpcyx0NnQpLmNhbGwodGhpcyxhLGQpLDIpLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIHM4KHp2LGwsaTZ0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvcHlhYmxlUmFuZ2UiLGE9PnM4KHp2LHRoaXMscjZ0KS5jYWxsKHRoaXMsYSkpLHN1cGVyLmVuYWJs''@;'; put 'put ''ZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1h''@;'; put 'put ''cCh0aGlzLnBsdWdpbk5hbWUpLHRoaXMucmVzZXRDZWxsc01ldGEoKX1zaG93Q29sdW1ucyhsKXtjb25zdCBhPXRoaXMuZ2V0SGlkZGVuQ29sdW1ucygpLGQ9dGhpcy5pc1ZhbGlkQ29uZmlnKGwpO2xldCBoPWE7Y29uc3QgZj1qdihXNCx0aGlzKS5nZXRWYWx1ZXMoKS5zbGljZSgpLHY9bC5s''@;'; put 'put ''ZW5ndGg+MDtkJiZ2JiYoS24obC5tYXAoVT0+dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihVKSksVT0+e2ZbVV09ITF9KSxoPWEwKGYsKFUsdGUsb2UpPT4odGUmJlUucHVzaCh0aGlzLmhvdC50b1Zpc3VhbENvbHVtbihvZSkpLFUpLFtdKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVm''@;'; put 'put ''b3JlVW5oaWRlQ29sdW1ucyIsYSxoLGQmJnYpJiYoZCYmdiYmanYoVzQsdGhpcykuc2V0VmFsdWVzKGYpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5oaWRlQ29sdW1ucyIsYSxoLGQmJnYsZCYmaC5sZW5ndGg8YS5sZW5ndGgp''@;'; put 'put ''KX1zaG93Q29sdW1uKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy5zaG93Q29sdW1ucyhhKX1oaWRlQ29sdW1ucyhsKXtjb25zdCBhPXRoaXMuZ2V0SGlkZGVuQ29sdW1ucygpLGQ9dGhpcy5pc1Zh''@;'; put 'put ''bGlkQ29uZmlnKGwpO2xldCBoPWE7ZCYmKGg9QXJyYXkuZnJvbShuZXcgU2V0KGEuY29uY2F0KGwpKSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUhpZGVDb2x1bW5zIixhLGgsZCkmJihkJiZ0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e0tuKGwsdj0+e2p2KFc0LHRoaXMp''@;'; put 'put ''LnNldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKHYpLCEwKX0pfSwhMCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVySGlkZUNvbHVtbnMiLGEsaCxkLGQmJmgubGVuZ3RoPmEubGVuZ3RoKSl9aGlkZUNvbHVtbigpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9''@;'; put 'put ''bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMuaGlkZUNvbHVtbnMoYSl9Z2V0SGlkZGVuQ29sdW1ucygpe3JldHVybiBacyhqdihXNCx0aGlzKS5nZXRIaWRkZW5JbmRleGVzKCksbD0+dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4obCkpfWlzSGlkZGVuKGwp''@;'; put 'put ''e3JldHVybiBqdihXNCx0aGlzKS5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSl8fCExfWlzVmFsaWRDb25maWcobCl7Y29uc3QgYT10aGlzLmhvdC5jb3VudENvbHMoKTtyZXR1cm4hIShBcnJheS5pc0FycmF5KGwpJiZsLmxlbmd0aD4wKSYmbC5ldmVyeShk''@;'; put 'put ''PT5OdW1iZXIuaXNJbnRlZ2VyKGQpJiZkPj0wJiZkPGEpfXJlc2V0Q2VsbHNNZXRhKCl7S24odGhpcy5ob3QuZ2V0Q2VsbHNNZXRhKCksbD0+e2wuc2tpcENvbHVtbk9uUGFzdGU9ITF9KX1kZXN0cm95KCl7STllKFc0LHRoaXMsbnVsbCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiB0NnQo''@;'; put 'put ''YyxsKXtyZXR1cm4gdGhpcy5pc0hpZGRlbihsKT8wOnRoaXMuZ2V0U2V0dGluZygiaW5kaWNhdG9ycyIpJiYodGhpcy5pc0hpZGRlbihsKzEpfHx0aGlzLmlzSGlkZGVuKGwtMSkpJiYibnVtYmVyIj09dHlwZW9mIGMmJnRoaXMuaG90Lmhhc0NvbEhlYWRlcnMoKT9jKzE1OnZvaWQgMH1mdW5j''@;'; put 'put ''dGlvbiBuNnQoYyxsLGEpe2lmKCExPT09dGhpcy5nZXRTZXR0aW5nKCJjb3B5UGFzdGVFbmFibGVkIikmJnRoaXMuaXNIaWRkZW4obCkmJihhLnNraXBDb2x1bW5PblBhc3RlPSEwKSx0aGlzLmlzSGlkZGVuKGwtMSkpYS5jbGFzc05hbWU9YS5jbGFzc05hbWV8fCIiLC0xPT09YS5jbGFzc05h''@;'; put 'put ''bWUuaW5kZXhPZigiYWZ0ZXJIaWRkZW5Db2x1bW4iKSYmKGEuY2xhc3NOYW1lKz0iIGFmdGVySGlkZGVuQ29sdW1uIik7ZWxzZSBpZihhLmNsYXNzTmFtZSl7Y29uc3QgZD1hLmNsYXNzTmFtZS5zcGxpdCgiICIpO2lmKGQubGVuZ3RoPjApe2NvbnN0IGg9ZC5pbmRleE9mKCJhZnRlckhpZGRl''@;'; put 'put ''bkNvbHVtbiIpO2g+LTEmJmQuc3BsaWNlKGgsMSksYS5jbGFzc05hbWU9ZC5qb2luKCIgIil9fX1mdW5jdGlvbiByNnQoYyl7aWYodGhpcy5nZXRTZXR0aW5nKCJjb3B5UGFzdGVFbmFibGVkIikpcmV0dXJuIGM7Y29uc3QgbD1bXSxhPShkLGgsZix2KT0+e2wucHVzaCh7c3RhcnRSb3c6ZCxl''@;'; put 'put ''bmRSb3c6aCxzdGFydENvbDpmLGVuZENvbDp2fSl9O3JldHVybiBLbihjLGQ9PntsZXQgaD0hMCxmPTA7UWEoZC5zdGFydENvbCxkLmVuZENvbCx2PT57dGhpcy5pc0hpZGRlbih2KT8oaHx8YShkLnN0YXJ0Um93LGQuZW5kUm93LGYsdi0xKSxoPSEwKTooaCYmKGY9diksdj09PWQuZW5kQ29s''@;'; put 'put ''JiZhKGQuc3RhcnRSb3csZC5lbmRSb3csZix2KSxoPSExKX0pfSksbH1mdW5jdGlvbiBpNnQoYyxsKXtpZighdGhpcy5nZXRTZXR0aW5nKCJpbmRpY2F0b3JzIil8fGM8MClyZXR1cm47Y29uc3QgYT1bXTtjPj0xJiZ0aGlzLmlzSGlkZGVuKGMtMSkmJmEucHVzaCgiYWZ0ZXJIaWRkZW5Db2x1''@;'; put 'put ''bW4iKSxjPHRoaXMuaG90LmNvdW50Q29scygpLTEmJnRoaXMuaXNIaWRkZW4oYysxKSYmYS5wdXNoKCJiZWZvcmVIaWRkZW5Db2x1bW4iKSxpaShsLGEpfWZ1bmN0aW9uIGE2dChjKXtjLml0ZW1zLnB1c2goe25hbWU6eXN9LGZ1bmN0aW9uIEttdChjKXtyZXR1cm57a2V5OiJoaWRkZW5fY29s''@;'; put 'put ''dW1uc19oaWRlIixuYW1lKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkQWN0aXZlKCk7bGV0IGE9MDtpZihBcnJheS5pc0FycmF5KGwpKXtjb25zdFssZCwsaF09bDtkLWghPTAmJihhPTEpfXJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoaWVlLGEpfSxjYWxsYmFjaygpe2NvbnN0''@;'; put 'put ''e2Zyb206bCx0bzphfT10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSxkPU1hdGgubWF4KE1hdGgubWluKGwuY29sLGEuY29sKSwwKSxoPU1hdGgubWF4KGwuY29sLGEuY29sKSxmPVtdO2ZvcihsZXQgRD1kO0Q8PWg7RCs9MSlmLnB1c2goRCk7Yy5oaWRlQ29sdW1ucyhmKTtjb25zdCBN''@;'; put 'put ''PXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGZbZi5sZW5ndGgtMV0sMSwhMCk7TnVtYmVyLmlzSW50ZWdlcihNKSYmTT49MD90aGlzLnNlbGVjdENvbHVtbnMoTSk6dGhpcy5kZXNlbGVjdENlbGwoKSx0aGlzLnZpZXcuYWRqdXN0RWxlbWVudHNTaXpl''@;'; put 'put ''KCksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITEsaGlkZGVuKCl7cmV0dXJuISh0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkpfX19KHRoaXMpLGZ1bmN0aW9uIFhtdChjKXtjb25zdCBsPVtdO3Jl''@;'; put 'put ''dHVybntrZXk6ImhpZGRlbl9jb2x1bW5zX3Nob3ciLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGFlZSxsLmxlbmd0aD4xPzE6MCl9LGNhbGxiYWNrKCl7dmFyIGEsZDtpZigwPT09bC5sZW5ndGgpcmV0dXJuO2xldCBoPWxbMF0sZj1sW2wubGVuZ3RoLTFdO2g9bnVs''@;'; put 'put ''bCE9PShhPXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGgtMSwtMSkpJiZ2b2lkIDAhPT1hP2E6MCxmPW51bGwhPT0oZD10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmKzEsMSkpJiZ2b2lkIDAhPT1kP2Q6dGhp''@;'; put 'put ''cy5jb3VudENvbHMoKS0xLGMuc2hvd0NvbHVtbnMobCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMucmVuZGVyKCksZi1oKzE9PT10aGlzLmNvdW50Q29scygpfHx0aGlzLnNlbGVjdENvbHVtbnMoaCxmKX0sZGlzYWJsZWQ6ITEsaGlkZGVuKCl7Y29uc3QgYT1acyhjLmdl''@;'; put 'put ''dEhpZGRlbkNvbHVtbnMoKSxvZT0+dGhpcy50b1BoeXNpY2FsQ29sdW1uKG9lKSk7aWYoIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpJiYhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fGEubGVuZ3RoPDEpcmV0dXJuITA7bC5sZW5ndGg9MDtj''@;'; put 'put ''b25zdCBkPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLGg9ZC5nZXRUb3BTdGFydENvcm5lcigpLmNvbCxmPWQuZ2V0Qm90dG9tRW5kQ29ybmVyKCkuY29sLHY9dGhpcy5jb2x1bW5JbmRleE1hcHBlcixNPXYuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChoKSxEPXYuZ2V0UmVu''@;'; put 'put ''ZGVyYWJsZUZyb21WaXN1YWxJbmRleChmKSxVPXYuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoKSx0ZT1bXTtpZihoIT09Zil7aWYoZi1oKzE+RC1NKzEpe2NvbnN0IHdlPVUuc2xpY2UoaCxmKzEpO3RlLnB1c2goLi4ud2UuZmlsdGVyKEZlPT5hLmluY2x1ZGVzKEZlKSkpfX1lbHNlIGlmKDA9PT1N''@;'; put 'put ''JiZNPGgpdGUucHVzaCguLi5VLnNsaWNlKDAsaCkpO2Vsc2UgaWYobnVsbD09PU0pdGUucHVzaCguLi5VLnNsaWNlKDAsdGhpcy5jb3VudENvbHMoKSkpO2Vsc2V7Y29uc3Qgb2U9dGhpcy5jb3VudENvbHMoKS0xO0Q9PT12LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodi5nZXROZWFy''@;'; put 'put ''ZXN0Tm90SGlkZGVuSW5kZXgob2UsLTEpKSYmb2U+ZiYmdGUucHVzaCguLi5VLnNsaWNlKGYrMSkpfXJldHVybiBLbih0ZSxvZT0+e2wucHVzaCh0aGlzLnRvVmlzdWFsQ29sdW1uKG9lKSl9KSwwPT09bC5sZW5ndGh9fX0odGhpcykpfWZ1bmN0aW9uIG82dCgpe2NvbnN0IGM9dGhpcy5nZXRT''@;'; put 'put ''ZXR0aW5nKCJjb2x1bW5zIik7QXJyYXkuaXNBcnJheShjKSYmdGhpcy5oaWRlQ29sdW1ucyhjKX1mdW5jdGlvbiBMOWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9i''@;'; put 'put ''amVjdCIpfWZ1bmN0aW9uIFV2KGMsbCl7cmV0dXJuIGMuZ2V0KGw4KGMsbCkpfWZ1bmN0aW9uIE85ZShjLGwsYSl7cmV0dXJuIGMuc2V0KGw4KGMsbCksYSksYX1mdW5jdGlvbiBsOChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9QWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUhpZGVSb3dzIiksQWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVySGlk''@;'; put 'put ''ZVJvd3MiKSxBYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlVW5oaWRlUm93cyIpLEFhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclVuaGlkZVJvd3MiKTtjb25zdCBQOWU9ImhpZGRlblJvd3MiO3ZhciBZND1uZXcgV2Vha01hcCxadj1uZXcgV2Vha1NldDtjbGFzcyBo''@;'; put 'put ''NnQgZXh0ZW5kcyBNc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gYzZ0KGMsbCl7TDllKGMsbCksbC5hZGQoYyl9KHRoaXMsWnYpLGZ1bmN0aW9uIHU2dChjLGwsYSl7TDllKGMsbCksbC5zZXQoYyxhKX0odGhpcyxZNCxudWxsKX1zdGF0aWMgZ2V0IFBMVUdJ''@;'; put 'put ''Tl9LRVkoKXtyZXR1cm4gUDllfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDMyMH1zdGF0aWMgZ2V0IERFRkFVTFRfU0VUVElOR1MoKXtyZXR1cm57Y29weVBhc3RlRW5hYmxlZDohMCxpbmRpY2F0b3JzOiExLHJvd3M6W119fWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5o''@;'; put 'put ''b3QuZ2V0U2V0dGluZ3MoKVtQOWVdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwoTzllKFk0LHRoaXMsbmV3IEFOKSxVdihZNCx0aGlzKS5hZGRMb2NhbEhvb2soImluaXQiLCgpPT5sOChadix0aGlzLHk2dCkuY2FsbCh0aGlzKSksdGhpcy5ob3Qucm93SW5kZXhN''@;'; put 'put ''YXBwZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lLFV2KFk0LHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFy''@;'; put 'put ''Z3VtZW50c1toXTtyZXR1cm4gbDgoWnYsbCx2NnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDZWxsTWV0YSIsKGEsZCxoKT0+bDgoWnYsdGhpcyxwNnQpLmNhbGwodGhpcyxhLGQsaCkpLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93SGVpZ2h0IiwoYSxkKT0+bDgoWnYs''@;'; put 'put ''dGhpcyxmNnQpLmNhbGwodGhpcyxhLGQpKSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Um93SGVhZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBsOChadixsLG02dCkuY2Fs''@;'; put 'put ''bChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb3B5YWJsZVJhbmdlIixhPT5sOChadix0aGlzLGc2dCkuY2FsbCh0aGlzLGEpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51''@;'; put 'put ''cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSx0aGlzLnJlc2V0Q2VsbHNNZXRhKCl9c2hvd1Jvd3MobCl7Y29uc3QgYT10aGlzLmdldEhpZGRlblJv''@;'; put 'put ''d3MoKSxkPXRoaXMuaXNWYWxpZENvbmZpZyhsKTtsZXQgaD1hO2NvbnN0IGY9VXYoWTQsdGhpcykuZ2V0VmFsdWVzKCkuc2xpY2UoKSx2PWwubGVuZ3RoPjA7ZCYmdiYmKEtuKGwubWFwKFU9PnRoaXMuaG90LnRvUGh5c2ljYWxSb3coVSkpLFU9PntmW1VdPSExfSksaD1hMChmLChVLHRlLG9l''@;'; put 'put ''KT0+KHRlJiZVLnB1c2godGhpcy5ob3QudG9WaXN1YWxSb3cob2UpKSxVKSxbXSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVuaGlkZVJvd3MiLGEsaCxkJiZ2KSYmKGQmJnYmJlV2KFk0LHRoaXMpLnNldFZhbHVlcyhmKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJVbmhpZGVS''@;'; put 'put ''b3dzIixhLGgsZCYmdixkJiZoLmxlbmd0aDxhLmxlbmd0aCkpfXNob3dSb3coKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLnNob3dSb3dzKGEpfWhpZGVSb3dzKGwpe2NvbnN0IGE9dGhpcy5nZXRI''@;'; put 'put ''aWRkZW5Sb3dzKCksZD10aGlzLmlzVmFsaWRDb25maWcobCk7bGV0IGg9YTtkJiYoaD1BcnJheS5mcm9tKG5ldyBTZXQoYS5jb25jYXQobCkpKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlSGlkZVJvd3MiLGEsaCxkKSYmKGQmJnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57''@;'; put 'put ''S24obCx2PT57VXYoWTQsdGhpcykuc2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxSb3codiksITApfSl9LCEwKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJIaWRlUm93cyIsYSxoLGQsZCYmaC5sZW5ndGg+YS5sZW5ndGgpKX1oaWRlUm93KCl7Zm9yKHZhciBsPWFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy5oaWRlUm93cyhhKX1nZXRIaWRkZW5Sb3dzKCl7cmV0dXJuIFpzKFV2KFk0LHRoaXMpLmdldEhpZGRlbkluZGV4ZXMoKSxsPT50aGlzLmhvdC50b1Zpc3VhbFJvdyhsKSl9aXNIaWRkZW4o''@;'; put 'put ''bCl7cmV0dXJuIFV2KFk0LHRoaXMpLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpKXx8ITF9aXNWYWxpZENvbmZpZyhsKXtjb25zdCBhPXRoaXMuaG90LmNvdW50Um93cygpO3JldHVybiEhKEFycmF5LmlzQXJyYXkobCkmJmwubGVuZ3RoPjApJiZsLmV2ZXJ5KGQ9''@;'; put 'put ''Pk51bWJlci5pc0ludGVnZXIoZCkmJmQ+PTAmJmQ8YSl9cmVzZXRDZWxsc01ldGEoKXtLbih0aGlzLmhvdC5nZXRDZWxsc01ldGEoKSxsPT57bC5za2lwUm93T25QYXN0ZT0hMX0pfWRlc3Ryb3koKXtPOWUoWTQsdGhpcyxudWxsKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIGY2dChjLGwp''@;'; put 'put ''e3JldHVybiB0aGlzLmlzSGlkZGVuKGwpPzA6Y31mdW5jdGlvbiBwNnQoYyxsLGEpe2lmKCExPT09dGhpcy5nZXRTZXR0aW5nKCJjb3B5UGFzdGVFbmFibGVkIikmJnRoaXMuaXNIaWRkZW4oYykmJihhLnNraXBSb3dPblBhc3RlPSEwKSx0aGlzLmlzSGlkZGVuKGMtMSkpYS5jbGFzc05hbWU9''@;'; put 'put ''YS5jbGFzc05hbWV8fCIiLC0xPT09YS5jbGFzc05hbWUuaW5kZXhPZigiYWZ0ZXJIaWRkZW5Sb3ciKSYmKGEuY2xhc3NOYW1lKz0iIGFmdGVySGlkZGVuUm93Iik7ZWxzZSBpZihhLmNsYXNzTmFtZSl7Y29uc3QgZD1hLmNsYXNzTmFtZS5zcGxpdCgiICIpO2lmKGQubGVuZ3RoPjApe2NvbnN0''@;'; put 'put ''IGg9ZC5pbmRleE9mKCJhZnRlckhpZGRlblJvdyIpO2g+LTEmJmQuc3BsaWNlKGgsMSksYS5jbGFzc05hbWU9ZC5qb2luKCIgIil9fX1mdW5jdGlvbiBnNnQoYyl7aWYodGhpcy5nZXRTZXR0aW5nKCJjb3B5UGFzdGVFbmFibGVkIikpcmV0dXJuIGM7Y29uc3QgbD1bXSxhPShkLGgsZix2KT0+''@;'; put 'put ''e2wucHVzaCh7c3RhcnRSb3c6ZCxlbmRSb3c6aCxzdGFydENvbDpmLGVuZENvbDp2fSl9O3JldHVybiBLbihjLGQ9PntsZXQgaD0hMCxmPTA7UWEoZC5zdGFydFJvdyxkLmVuZFJvdyx2PT57dGhpcy5pc0hpZGRlbih2KT8oaHx8YShmLHYtMSxkLnN0YXJ0Q29sLGQuZW5kQ29sKSxoPSEwKToo''@;'; put 'put ''aCYmKGY9diksdj09PWQuZW5kUm93JiZhKGYsdixkLnN0YXJ0Q29sLGQuZW5kQ29sKSxoPSExKX0pfSksbH1mdW5jdGlvbiBtNnQoYyxsKXtpZighdGhpcy5nZXRTZXR0aW5nKCJpbmRpY2F0b3JzIil8fGM8MClyZXR1cm47Y29uc3QgYT1bXTtjPj0xJiZ0aGlzLmlzSGlkZGVuKGMtMSkmJmEu''@;'; put 'put ''cHVzaCgiYWZ0ZXJIaWRkZW5Sb3ciKSxjPHRoaXMuaG90LmNvdW50Um93cygpLTEmJnRoaXMuaXNIaWRkZW4oYysxKSYmYS5wdXNoKCJiZWZvcmVIaWRkZW5Sb3ciKSxpaShsLGEpfWZ1bmN0aW9uIHY2dChjKXtjLml0ZW1zLnB1c2goe25hbWU6eXN9LGZ1bmN0aW9uIHM2dChjKXtyZXR1cm57''@;'; put 'put ''a2V5OiJoaWRkZW5fcm93c19oaWRlIixuYW1lKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkQWN0aXZlKCk7bGV0IGE9MDtpZihBcnJheS5pc0FycmF5KGwpKXtjb25zdFtkLCxoXT1sO2QtaCE9MCYmKGE9MSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShvZWUsYSl9LGNhbGxi''@;'; put 'put ''YWNrKCl7Y29uc3R7ZnJvbTpsLHRvOmF9PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLGQ9TWF0aC5tYXgoTWF0aC5taW4obC5yb3csYS5yb3cpLDApLGg9TWF0aC5tYXgobC5yb3csYS5yb3cpLGY9W107Zm9yKGxldCBEPWQ7RDw9aDtEKz0xKWYucHVzaChEKTtjLmhpZGVSb3dzKGYp''@;'; put 'put ''O2NvbnN0IE09dGhpcy5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZltmLmxlbmd0aC0xXSwxLCEwKTtOdW1iZXIuaXNJbnRlZ2VyKE0pJiZNPj0wP3RoaXMuc2VsZWN0Um93cyhNKTp0aGlzLmRlc2VsZWN0Q2VsbCgpLHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1Np''@;'; put 'put ''emUoKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMSxoaWRkZW4oKXtyZXR1cm4hKHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSl9fX0odGhpcyksZnVuY3Rpb24gbDZ0KGMpe2NvbnN0IGw9W107cmV0''@;'; put 'put ''dXJue2tleToiaGlkZGVuX3Jvd3Nfc2hvdyIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2Uoc2VlLGwubGVuZ3RoPjE/MTowKX0sY2FsbGJhY2soKXt2YXIgYSxkO2lmKDA9PT1sLmxlbmd0aClyZXR1cm47bGV0IGg9bFswXSxmPWxbbC5sZW5ndGgtMV07aD1udWxsIT09''@;'; put 'put ''KGE9dGhpcy5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoaC0xLC0xKSkmJnZvaWQgMCE9PWE/YTowLGY9bnVsbCE9PShkPXRoaXMucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGYrMSwxKSkmJnZvaWQgMCE9PWQ/ZDp0aGlzLmNvdW50Um93''@;'; put 'put ''cygpLTEsYy5zaG93Um93cyhsKSx0aGlzLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5yZW5kZXIoKSxmLWgrMT09PXRoaXMuY291bnRSb3dzKCl8fHRoaXMuc2VsZWN0Um93cyhoLGYpfSxkaXNhYmxlZDohMSxoaWRkZW4oKXtjb25zdCBhPVpzKGMuZ2V0SGlkZGVuUm93cygpLG9l''@;'; put 'put ''PT50aGlzLnRvUGh5c2ljYWxSb3cob2UpKTtpZighdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkmJiF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8YS5sZW5ndGg8MSlyZXR1cm4hMDtsLmxlbmd0aD0wO2NvbnN0IGQ9dGhpcy5nZXRTZWxlY3RlZFJh''@;'; put 'put ''bmdlQWN0aXZlKCksaD1kLmdldFRvcFN0YXJ0Q29ybmVyKCkucm93LGY9ZC5nZXRCb3R0b21FbmRDb3JuZXIoKS5yb3csdj10aGlzLnJvd0luZGV4TWFwcGVyLE09di5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGgpLEQ9di5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGYpLFU9''@;'; put 'put ''di5nZXROb3RUcmltbWVkSW5kZXhlcygpLHRlPVtdO2lmKGghPT1mKXtpZihmLWgrMT5ELU0rMSl7Y29uc3Qgd2U9VS5zbGljZShoLGYrMSk7dGUucHVzaCguLi53ZS5maWx0ZXIoRmU9PmEuaW5jbHVkZXMoRmUpKSl9fWVsc2UgaWYoMD09PU0mJk08aCl0ZS5wdXNoKC4uLlUuc2xpY2UoMCxo''@;'; put 'put ''KSk7ZWxzZSBpZihudWxsPT09TSl0ZS5wdXNoKC4uLlUuc2xpY2UoMCx0aGlzLmNvdW50Um93cygpKSk7ZWxzZXtjb25zdCBvZT10aGlzLmNvdW50Um93cygpLTE7RD09PXYuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh2LmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChvZSwtMSkpJiZv''@;'; put 'put ''ZT5mJiZ0ZS5wdXNoKC4uLlUuc2xpY2UoZisxKSl9cmV0dXJuIEtuKHRlLG9lPT57bC5wdXNoKHRoaXMudG9WaXN1YWxSb3cob2UpKX0pLDA9PT1sLmxlbmd0aH19fSh0aGlzKSl9ZnVuY3Rpb24geTZ0KCl7Y29uc3QgYz10aGlzLmdldFNldHRpbmcoInJvd3MiKTtBcnJheS5pc0FycmF5KGMp''@;'; put 'put ''JiZ0aGlzLmhpZGVSb3dzKGMpfWZ1bmN0aW9uIEY5ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gUnJlKGMsbCl7cmV0dXJuIGMuZ2V0''@;'; put 'put ''KFJCKGMsbCkpfWZ1bmN0aW9uIExyZShjLGwsYSl7cmV0dXJuIGMuc2V0KFJCKGMsbCksYSksYX1mdW5jdGlvbiBSQihjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigi''@;'; put 'put ''UHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9QWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvbHVtbkZyZWV6ZSIpLEFhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbHVtbkZyZWV6ZSIpLEFhLmdldFNpbmdsZXRvbigpLnJl''@;'; put 'put ''Z2lzdGVyKCJiZWZvcmVDb2x1bW5VbmZyZWV6ZSIpLEFhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbHVtblVuZnJlZXplIik7Y29uc3QgSDllPSJtYW51YWxDb2x1bW5GcmVlemUiO3ZhciBXdj1uZXcgV2Vha01hcCxPcmU9bmV3IFdlYWtTZXQ7Y2xhc3MgTTZ0IGV4dGVuZHMg''@;'; put 'put ''TXN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIHc2dChjLGwpe0Y5ZShjLGwpLGwuYWRkKGMpfSh0aGlzLE9yZSksZnVuY3Rpb24gQzZ0KGMsbCxhKXtGOWUoYyxsKSxsLnNldChjLGEpfSh0aGlzLFd2LCExKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1''@;'; put 'put ''cm4gSDllfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDExMH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbSDllXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0''@;'; put 'put ''aW9ucyIsbD0+UkIoT3JlLHRoaXMseDZ0KS5jYWxsKHRoaXMsbCkpLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29sdW1uTW92ZSIsKGwsYSk9PlJCKE9yZSx0aGlzLEU2dCkuY2FsbCh0aGlzLGwsYSkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7THJlKFd2LHRoaXMsITEp''@;'; put 'put ''LHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWZyZWV6ZUNvbHVtbihsKXtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKCksZD1hLmZpeGVkQ29sdW1uc1N0''@;'; put 'put ''YXJ0PHRoaXMuaG90LmNvdW50Q29scygpJiZsPmEuZml4ZWRDb2x1bW5zU3RhcnQtMTtScmUoV3YsdGhpcyl8fExyZShXdix0aGlzLCEwKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5GcmVlemUiLGwsZCkmJihkJiYodGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIubW92''@;'; put 'put ''ZUluZGV4ZXMobCxhLmZpeGVkQ29sdW1uc1N0YXJ0KSxhLl9maXhlZENvbHVtbnNTdGFydCs9MSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29sdW1uRnJlZXplIixsLGQpKX11bmZyZWV6ZUNvbHVtbihsKXtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKCksZD1hLmZpeGVkQ29sdW1u''@;'; put 'put ''c1N0YXJ0PjAmJmw8PWEuZml4ZWRDb2x1bW5zU3RhcnQtMTtScmUoV3YsdGhpcyl8fExyZShXdix0aGlzLCEwKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5VbmZyZWV6ZSIsbCxkKSYmKGQmJihhLl9maXhlZENvbHVtbnNTdGFydC09MSx0aGlzLmhvdC5jb2x1bW5JbmRl''@;'; put 'put ''eE1hcHBlci5tb3ZlSW5kZXhlcyhsLGEuZml4ZWRDb2x1bW5zU3RhcnQpKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5VbmZyZWV6ZSIsbCxkKSl9fWZ1bmN0aW9uIHg2dChjKXtjLml0ZW1zLnB1c2goe25hbWU6Ii0tLS0tLS0tLSJ9LGZ1bmN0aW9uIGI2dChjKXtyZXR1cm57a2V5''@;'; put 'put ''OiJmcmVlemVfY29sdW1uIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShPUSl9LGNhbGxiYWNrKGwsYSl7Y29uc3Rbe3N0YXJ0Ontjb2w6ZH19XT1hO2MuZnJlZXplQ29sdW1uKGQpLHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLnJlbmRlcigpfSxo''@;'; put 'put ''aWRkZW4oKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpO2xldCBhPSExO3JldHVybih2b2lkIDA9PT1sfHxsLmxlbmd0aD4xfHxsWzBdLmZyb20uY29sIT09bFswXS50by5jb2x8fGxbMF0uZnJvbS5jb2w8PXRoaXMuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydC0xKSYm''@;'; put 'put ''KGE9ITApLGF9fX0odGhpcyksZnVuY3Rpb24gXzZ0KGMpe3JldHVybntrZXk6InVuZnJlZXplX2NvbHVtbiIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoUFEpfSxjYWxsYmFjayhsLGEpe2NvbnN0W3tzdGFydDp7Y29sOmR9fV09YTtjLnVuZnJlZXplQ29sdW1uKGQp''@;'; put 'put ''LHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLnJlbmRlcigpfSxoaWRkZW4oKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpO2xldCBhPSExO3JldHVybih2b2lkIDA9PT1sfHxsLmxlbmd0aD4xfHxsWzBdLmZyb20uY29sIT09bFswXS50by5jb2x8fGxbMF0uZnJv''@;'; put 'put ''bS5jb2w+PXRoaXMuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCkmJihhPSEwKSxhfX19KHRoaXMpKX1mdW5jdGlvbiBFNnQoYyxsKXtpZihScmUoV3YsdGhpcykpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydDtpZihsPGF8fGMuc29tZShk''@;'; put 'put ''PT5kPGEpKXJldHVybiExfX1mdW5jdGlvbiBMQihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gVDZ0KGMpe3ZhciBsPWZ1bmN0aW9uIEE2dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3Zh''@;'; put 'put ''ciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0o''@;'; put 'put ''Yywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgVUM9InB4IixCOWU9Y2xhc3Mg''@;'; put 'put ''azZ0e2NvbnN0cnVjdG9yKGwpe0xCKHRoaXMsImhvdCIsdm9pZCAwKSxMQih0aGlzLCJfZWxlbWVudCIsbnVsbCksTEIodGhpcywic3RhdGUiLDApLExCKHRoaXMsImlubGluZVByb3BlcnR5Iix2b2lkIDApLHRoaXMuaG90PWwsdGhpcy5pbmxpbmVQcm9wZXJ0eT1sLmlzUnRsKCk/InJpZ2h0''@;'; put 'put ''IjoibGVmdCJ9YXBwZW5kVG8obCl7bC5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLnN0YXRlPTJ9YnVpbGQoKXswPT09dGhpcy5zdGF0ZSYmKHRoaXMuX2VsZW1lbnQ9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuc3RhdGU9MSl9ZGVzdHJv''@;'; put 'put ''eSgpe3RoaXMuaXNBcHBlbmRlZCgpJiZ0aGlzLl9lbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudD1udWxsLHRoaXMuc3RhdGU9MH1pc0FwcGVuZGVkKCl7cmV0dXJuIDI9PT10aGlzLnN0YXRlfWlzQnVpbHQoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5zdGF0ZT49MX1zZXRQb3NpdGlvbihsLGEpe2oxKGwpJiYodGhpcy5fZWxlbWVudC5zdHlsZS50b3A9bCtVQyksajEoYSkmJih0aGlzLl9lbGVtZW50LnN0eWxlW3RoaXMuaW5saW5lUHJvcGVydHldPWErVUMpfWdldFBvc2l0aW9uKCl7Y29uc3QgbD10aGlzLl9lbGVtZW50LnN0eWxlO3Jl''@;'; put 'put ''dHVybnt0b3A6bC50b3A/cGFyc2VJbnQobC50b3AsMTApOjAsc3RhcnQ6bFt0aGlzLmlubGluZVByb3BlcnR5XT9wYXJzZUludChsW3RoaXMuaW5saW5lUHJvcGVydHldLDEwKTowfX1zZXRTaXplKGwsYSl7ajEobCkmJih0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoPWwrVUMpLGoxKGEpJiYo''@;'; put 'put ''dGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQ9YStVQyl9Z2V0U2l6ZSgpe3JldHVybnt3aWR0aDp0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoP3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGgsMTApOjAsaGVpZ2h0OnRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0P3BhcnNlSW50''@;'; put 'put ''KHRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0LDEwKTowfX1zZXRPZmZzZXQobCxhKXtqMShsKSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luVG9wPWwrVUMpLGoxKGEpJiYodGhpcy5fZWxlbWVudC5zdHlsZVtgbWFyZ2luJHtWMSh0aGlzLmlubGluZVByb3BlcnR5KX1gXT1hK1VDKX1n''@;'; put 'put ''ZXRPZmZzZXQoKXtjb25zdCBsPXRoaXMuX2VsZW1lbnQuc3R5bGUsYT1gbWFyZ2luJHtWMSh0aGlzLmlubGluZVByb3BlcnR5KX1gO3JldHVybnt0b3A6bC5tYXJnaW5Ub3A/cGFyc2VJbnQobC5tYXJnaW5Ub3AsMTApOjAsc3RhcnQ6bFthXT9wYXJzZUludChsW2FdLDEwKTowfX19LFI2dD1j''@;'; put 'put ''bGFzcyBJNnQgZXh0ZW5kcyBCOWV7YnVpbGQoKXtzdXBlci5idWlsZCgpLGlpKHRoaXMuX2VsZW1lbnQsImh0X19tYW51YWxDb2x1bW5Nb3ZlLS1iYWNrbGlnaHQiKX19LFA2dD1jbGFzcyBPNnQgZXh0ZW5kcyBCOWV7YnVpbGQoKXtzdXBlci5idWlsZCgpLGlpKHRoaXMuX2VsZW1lbnQsImh0''@;'; put 'put ''X19tYW51YWxDb2x1bW5Nb3ZlLS1ndWlkZWxpbmUiKX19O2Z1bmN0aW9uIHVwKGMsbCxhKXtqOWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIGo5ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVu''@;'; put 'put ''dHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24ga2goYyxsLGEpe3JldHVybiBjLnNldChjOChjLGwpLGEpLGF9ZnVuY3Rpb24gR2EoYyxsKXtyZXR1cm4gYy5nZXQoYzgoYyxsKSl9ZnVuY3Rpb24gYzgoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwp''@;'; put 'put ''KXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfUFhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb2x1bW5Nb3ZlIiksQWEuZ2V0U2luZ2xldG9uKCku''@;'; put 'put ''cmVnaXN0ZXIoImFmdGVyQ29sdW1uTW92ZSIpO2NvbnN0IEZyZT0ibWFudWFsQ29sdW1uTW92ZSIsejllPSJodF9fbWFudWFsQ29sdW1uTW92ZSIsT0I9InNob3ctdWkiLEhyZT0ib24tbW92aW5nLS1jb2x1bW5zIixOcmU9ImFmdGVyLXNlbGVjdGlvbi0tY29sdW1ucyI7dmFyIE9kPW5ldyBX''@;'; put 'put ''ZWFrTWFwLHU4PW5ldyBXZWFrTWFwLEY1PW5ldyBXZWFrTWFwLFBCPW5ldyBXZWFrTWFwLGQ4PW5ldyBXZWFrTWFwLFBkPW5ldyBXZWFrTWFwLEZCPW5ldyBXZWFrTWFwLHFmPW5ldyBXZWFrTWFwLFpDPW5ldyBXZWFrTWFwLEhCPW5ldyBXZWFrTWFwLHhEPW5ldyBXZWFrTWFwLFl2PW5ldyBX''@;'; put 'put ''ZWFrU2V0O2NsYXNzIE42dCBleHRlbmRzIE1ze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBGNnQoYyxsKXtqOWUoYyxsKSxsLmFkZChjKX0odGhpcyxZdiksdXAodGhpcyxPZCxuZXcgUjZ0KHRoaXMuaG90KSksdXAodGhpcyx1OCxuZXcgUDZ0KHRoaXMuaG90''@;'; put 'put ''KSksdXAodGhpcyxGNSxbXSksdXAodGhpcyxQQiwwKSx1cCh0aGlzLGQ4LCExKSx1cCh0aGlzLFBkLHt9KSx1cCh0aGlzLEZCLHZvaWQgMCksdXAodGhpcyxxZix2b2lkIDApLHVwKHRoaXMsWkMsdm9pZCAwKSx1cCh0aGlzLEhCLHZvaWQgMCksdXAodGhpcyx4RCx2b2lkIDApfXN0YXRpYyBn''@;'; put 'put ''ZXQgUExVR0lOX0tFWSgpe3JldHVybiBGcmV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTIwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtGcmVdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRI''@;'; put 'put ''b29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGM4KFl2LGwsVjZ0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9y''@;'; put 'put ''ZU9uQ2VsbE1vdXNlT3ZlciIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gYzgoWXYsbCxqNnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxWZXJ0''@;'; put 'put ''aWNhbGx5IiwoKT0+YzgoWXYsdGhpcyxVNnQpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gYzgoWXYs''@;'; put 'put ''bCxaNnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYnVpbGRQbHVnaW5VSSgpLHRoaXMucmVnaXN0ZXJFdmVudHMoKSxpaSh0aGlzLmhvdC5yb290RWxlbWVudCx6OWUpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBs''@;'; put 'put ''dWdpbigpLHRoaXMubW92ZUJ5U2V0dGluZ3NPckxvYWQoKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7VmEodGhpcy5ob3Qucm9vdEVsZW1lbnQsejllKSx0aGlzLnVucmVnaXN0ZXJFdmVudHMoKSxHYShPZCx0aGlzKS5kZXN0cm95KCksR2EodTgsdGhpcykuZGVzdHJv''@;'; put 'put ''eSgpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1tb3ZlQ29sdW1uKGwsYSl7cmV0dXJuIHRoaXMubW92ZUNvbHVtbnMoW2xdLGEpfW1vdmVDb2x1bW5zKGwsYSl7Y29uc3QgZD1HYShGQix0aGlzKSxoPXRoaXMuaXNNb3ZlUG9zc2libGUobCxhKSxmPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVD''@;'; put 'put ''b2x1bW5Nb3ZlIixsLGEsZCxoKTtpZihraChGQix0aGlzLHZvaWQgMCksITE9PT1mKXJldHVybjtoJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5tb3ZlSW5kZXhlcyhsLGEpO2NvbnN0IHY9aCYmdGhpcy5pc0NvbHVtbk9yZGVyQ2hhbmdlZChsLGEpO3JldHVybiB0aGlzLmhvdC5ydW5I''@;'; put 'put ''b29rcygiYWZ0ZXJDb2x1bW5Nb3ZlIixsLGEsZCxoLHYpLHZ9ZHJhZ0NvbHVtbihsLGEpe3JldHVybiB0aGlzLmRyYWdDb2x1bW5zKFtsXSxhKX1kcmFnQ29sdW1ucyhsLGEpe2NvbnN0IGQ9dGhpcy5jb3VudEZpbmFsSW5kZXgobCxhKTtyZXR1cm4ga2goRkIsdGhpcyxhKSx0aGlzLm1vdmVD''@;'; put 'put ''b2x1bW5zKGwsZCl9aXNNb3ZlUG9zc2libGUobCxhKXtjb25zdCBkPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCksaD1sLmxlbmd0aCthPmQsZj1hPDAsdj1sLnNvbWUoRD0+RDwwKSxNPWwuc29tZShEPT5EPj1kKTtyZXR1cm4hKGh8fGZ8''@;'; put 'put ''fHZ8fE0pfWlzQ29sdW1uT3JkZXJDaGFuZ2VkKGwsYSl7cmV0dXJuIGwuc29tZSgoZCxoKT0+ZC1oIT09YSl9Y291bnRGaW5hbEluZGV4KGwsYSl7Y29uc3QgZD1hMChsLChoLGYpPT4oZjxhJiYoaCs9MSksaCksMCk7cmV0dXJuIGEtZH1nZXRDb2x1bW5zV2lkdGgobCxhKXtjb25zdCBkPXRo''@;'; put 'put ''aXMuaG90LmNvbHVtbkluZGV4TWFwcGVyO2xldCBoPTA7Zm9yKGxldCBmPWw7Zjw9YTtmKz0xKXtjb25zdCB2PWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChmKTtmPDA/aCs9dGhpcy5ob3Qudmlldy5fd3Qud3RWaWV3cG9ydC5nZXRSb3dIZWFkZXJXaWR0aCgpfHwwOm51bGwhPT12''@;'; put 'put ''JiYoaCs9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZS5nZXRDb2x1bW5XaWR0aCh2KXx8MCl9cmV0dXJuIGh9bW92ZUJ5U2V0dGluZ3NPckxvYWQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbRnJlXTtpZihBcnJheS5pc0FycmF5KGwpKXRoaXMubW92ZUNvbHVtbnMobCwwKTtl''@;'; put 'put ''bHNlIGlmKHZvaWQgMCE9PWwpe2NvbnN0IGE9dGhpcy5wZXJzaXN0ZW50U3RhdGVMb2FkKCk7YS5sZW5ndGgmJnRoaXMubW92ZUNvbHVtbnMoYSwwKX19aXNGaXhlZENvbHVtbnNTdGFydChsKXtyZXR1cm4gbDx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0fXBlcnNp''@;'; put 'put ''c3RlbnRTdGF0ZVNhdmUoKXt0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlU2F2ZSIsIm1hbnVhbENvbHVtbk1vdmUiLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpKX1wZXJzaXN0ZW50U3RhdGVMb2FkKCl7Y29uc3QgbD17fTtyZXR1cm4g''@;'; put 'put ''dGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZUxvYWQiLCJtYW51YWxDb2x1bW5Nb3ZlIixsKSxsLnZhbHVlP2wudmFsdWU6W119cHJlcGFyZUNvbHVtbnNUb01vdmluZyhsLGEpe2NvbnN0IGQ9W107cmV0dXJuIFFhKGwsYSxoPT57ZC5wdXNoKGgpfSksZH1yZWZyZXNoUG9zaXRp''@;'; put 'put ''b25zKCl7Y29uc3QgbD10aGlzLmhvdC52aWV3LmdldEZpcnN0RnVsbHlWaXNpYmxlQ29sdW1uKCk7dGhpcy5pc0ZpeGVkQ29sdW1uc1N0YXJ0KEdhKHFmLHRoaXMpKSYmbD4wJiZ0aGlzLmhvdC5zY3JvbGxWaWV3cG9ydFRvKHtjb2w6dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVh''@;'; put 'put ''cmVzdE5vdEhpZGRlbkluZGV4KGwtMSwtMSl9KTtjb25zdCBhPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUsZD10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnNjcm9sbGFibGVFbGVtZW50LGg9Im51bWJlciI9PXR5cGVvZiBkLnNjcm9sbFg/ZC5zY3JvbGxYOmQuc2Nyb2xsTGVmdDts''@;'; put 'put ''ZXQgZj10aGlzLmhvdC52aWV3LlRIRUFELm9mZnNldExlZnQrdGhpcy5nZXRDb2x1bW5zV2lkdGgoMCxHYShxZix0aGlzKS0xKTtjb25zdCB2PWEuaGlkZXIub2Zmc2V0V2lkdGgsTT1hLlRCT0RZLm9mZnNldExlZnQsRD1HYShPZCx0aGlzKS5nZXRPZmZzZXQoKS5zdGFydCxVPUdhKE9kLHRo''@;'; put 'put ''aXMpLmdldFNpemUoKS53aWR0aDtsZXQgdGU9MCxvZT0wO2lmKHRoaXMuaG90LmlzUnRsKCkpe2NvbnN0IEZlPXRoaXMuaG90LnJvb3RXaW5kb3csV2U9X3UodGhpcy5ob3Qucm9vdEVsZW1lbnQpLG50PUZlLmlubmVyV2lkdGgtR2EoWkMsdGhpcyktV2U7b2U9RmUuaW5uZXJXaWR0aC1HYShQ''@;'; put 'put ''ZCx0aGlzKS5ldmVudFBhZ2VYLW50LSh2b2lkIDA9PT1kLnNjcm9sbFg/aDowKX1lbHNlIG9lPUdhKFBkLHRoaXMpLmV2ZW50UGFnZVgtKEdhKFpDLHRoaXMpLSh2b2lkIDA9PT1kLnNjcm9sbFg/aDowKSk7aWYoR2EoSEIsdGhpcykmJih0ZT10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlz''@;'; put 'put ''LmlubGluZVN0YXJ0T3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENvbHVtbkhlYWRlcigtMSkub2Zmc2V0V2lkdGgpLHRoaXMuaXNGaXhlZENvbHVtbnNTdGFydChHYShxZix0aGlzKSkmJihmKz1oKSxmKz10ZSxHYShxZix0aGlzKTwwKUdhKHhELHRoaXMpPjA/R2EoUGQsdGhpcykuY29sPTA6''@;'; put 'put ''R2EoUGQsdGhpcykuY29sPWw+MD9sLTE6bDtlbHNlIGlmKEdhKFBkLHRoaXMpLlRELm9mZnNldFdpZHRoLzIrZjw9b2Upe2NvbnN0IEZlPUdhKHFmLHRoaXMpPj1HYShQQix0aGlzKT9HYShQQix0aGlzKS0xOkdhKHFmLHRoaXMpO0dhKFBkLHRoaXMpLmNvbD1GZSsxLGYrPUdhKFBkLHRoaXMp''@;'; put 'put ''LlRELm9mZnNldFdpZHRofWVsc2UgR2EoUGQsdGhpcykuY29sPUdhKHFmLHRoaXMpO2xldCB2ZT1vZSx3ZT1mO29lK1UrRD49dj92ZT12LVUtRDpvZStEPE0rdGUmJih2ZT1NK3RlK01hdGguYWJzKEQpKSxmPj12LTE/d2U9di0xOjA9PT13ZT93ZT0xOnZvaWQgMCE9PWQuc2Nyb2xsWCYmR2Eo''@;'; put 'put ''cWYsdGhpcyk8R2EoeEQsdGhpcykmJih3ZS09R2EoWkMsdGhpcyk8PWQuc2Nyb2xsWD9HYShaQyx0aGlzKTowKSxHYShPZCx0aGlzKS5zZXRQb3NpdGlvbihudWxsLHZlKSxHYSh1OCx0aGlzKS5zZXRQb3NpdGlvbihudWxsLHdlKX1yZWdpc3RlckV2ZW50cygpe2NvbnN0e2RvY3VtZW50RWxl''@;'; put 'put ''bWVudDpsfT10aGlzLmhvdC5yb290RG9jdW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZW1vdmUiLGE9PmM4KFl2LHRoaXMsQjZ0KS5jYWxsKHRoaXMsYSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PmM4''@;'; put 'put ''KFl2LHRoaXMsejZ0KS5jYWxsKHRoaXMpKX11bnJlZ2lzdGVyRXZlbnRzKCl7dGhpcy5ldmVudE1hbmFnZXIuY2xlYXIoKX1idWlsZFBsdWdpblVJKCl7R2EoT2QsdGhpcykuYnVpbGQoKSxHYSh1OCx0aGlzKS5idWlsZCgpfWRlc3Ryb3koKXtHYShPZCx0aGlzKS5kZXN0cm95KCksR2EodTgs''@;'; put 'put ''dGhpcykuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gVjZ0KGMsbCxhLGQpe2NvbnN0IGg9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSxmPXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSx2PXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VB''@;'; put 'put ''Y3RpdmUoKSxNPUNvKGMudGFyZ2V0LCJzb3J0QWN0aW9uIik7aWYoIXZ8fCFmfHxHYShkOCx0aGlzKXx8MCE9PWMuYnV0dG9ufHxNKXJldHVybiBraChkOCx0aGlzLCExKSxHYShGNSx0aGlzKS5sZW5ndGg9MCx2b2lkIFZhKHRoaXMuaG90LnJvb3RFbGVtZW50LFtIcmUsT0JdKTtjb25zdCBE''@;'; put 'put ''PUdhKHU4LHRoaXMpLmlzQnVpbHQoKSYmIUdhKHU4LHRoaXMpLmlzQXBwZW5kZWQoKSxVPUdhKE9kLHRoaXMpLmlzQnVpbHQoKSYmIUdhKE9kLHRoaXMpLmlzQXBwZW5kZWQoKTtEJiZVJiYoR2EodTgsdGhpcykuYXBwZW5kVG8oaC5oaWRlciksR2EoT2QsdGhpcykuYXBwZW5kVG8oaC5oaWRl''@;'; put 'put ''cikpO2NvbnN0e2Zyb206dGUsdG86b2V9PXYsdmU9TWF0aC5taW4odGUuY29sLG9lLmNvbCksd2U9TWF0aC5tYXgodGUuY29sLG9lLmNvbCk7aWYobC5yb3c8MCYmbC5jb2w+PXZlJiZsLmNvbDw9d2Upe2QuY29sdW1uPSEwLGtoKGQ4LHRoaXMsITApO2NvbnN0IEZlPWEuZmlyc3RDaGlsZD94''@;'; put 'put ''Z2UoYyxhLmZpcnN0Q2hpbGQpLng6Yy5vZmZzZXRYO0dhKFBkLHRoaXMpLmV2ZW50UGFnZVg9Yy5wYWdlWCxraChxZix0aGlzLGwuY29sKSxHYShQZCx0aGlzKS5URD1hLEdhKFBkLHRoaXMpLmNvbD1sLmNvbCxraChGNSx0aGlzLHRoaXMucHJlcGFyZUNvbHVtbnNUb01vdmluZyh2ZSx3ZSkp''@;'; put 'put ''LGtoKEhCLHRoaXMsISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnJvd0hlYWRlcnMpLGtoKFBCLHRoaXMsdGhpcy5ob3QuY291bnRDb2xzKCkpLGtoKHhELHRoaXMsdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCksa2goWkMsdGhpcyxkMSh0aGlzLmhvdC5yb290RWxl''@;'; put 'put ''bWVudCkubGVmdCk7Y29uc3QgV2U9R2EoSEIsdGhpcyk/LTE6MCxudD1oLmhvbGRlci5zY3JvbGxUb3AraC5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoMCkrMSxkdD1sLmNvbDxHYSh4RCx0aGlzKSxtdD10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRP''@;'; put 'put ''dmVybGF5T2Zmc2V0KCksJHQ9TWF0aC5hYnMoRmUtKHRoaXMuaG90LmlzUnRsKCk/YS5vZmZzZXRXaWR0aDowKSksenQ9dGhpcy5nZXRDb2x1bW5zV2lkdGgodmUsbC5jb2wtMSkrJHQseW49dGhpcy5nZXRDb2x1bW5zV2lkdGgoV2UsdmUtMSkrKGR0P210OjApK3p0O0dhKE9kLHRoaXMpLnNl''@;'; put 'put ''dFBvc2l0aW9uKG50LHluKSxHYShPZCx0aGlzKS5zZXRTaXplKHRoaXMuZ2V0Q29sdW1uc1dpZHRoKHZlLHdlKSxoLmhpZGVyLm9mZnNldEhlaWdodC1udCksR2EoT2QsdGhpcykuc2V0T2Zmc2V0KG51bGwsLXp0KSxpaSh0aGlzLmhvdC5yb290RWxlbWVudCxIcmUpfWVsc2UgVmEodGhpcy5o''@;'; put 'put ''b3Qucm9vdEVsZW1lbnQsTnJlKSxraChkOCx0aGlzLCExKSxHYShGNSx0aGlzKS5sZW5ndGg9MH1mdW5jdGlvbiBCNnQoYyl7R2EoZDgsdGhpcykmJihHYShQZCx0aGlzKS5ldmVudFBhZ2VYPWMucGFnZVgsdGhpcy5yZWZyZXNoUG9zaXRpb25zKCkpfWZ1bmN0aW9uIGo2dChjLGwsYSxkKXsh''@;'; put 'put ''dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpfHwhR2EoZDgsdGhpcyl8fChHYShGNSx0aGlzKS5pbmRleE9mKGwuY29sKT4tMT9WYSh0aGlzLmhvdC5yb290RWxlbWVudCxPQik6aWkodGhpcy5ob3Qucm9vdEVsZW1lbnQsT0IpLGQucm93PSEwLGQuY29sdW1uPSEwLGQuY2VsbD0h''@;'; put 'put ''MCxraChxZix0aGlzLGwuY29sKSxHYShQZCx0aGlzKS5URD1hKX1mdW5jdGlvbiB6NnQoKXtjb25zdCBjPUdhKFBkLHRoaXMpLmNvbCxsPUdhKEY1LHRoaXMpLmxlbmd0aDtpZihraChxZix0aGlzLHZvaWQgMCksa2goZDgsdGhpcywhMSksVmEodGhpcy5ob3Qucm9vdEVsZW1lbnQsW0hyZSxP''@;'; put 'put ''QixOcmVdKSx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkmJmlpKHRoaXMuaG90LnJvb3RFbGVtZW50LE5yZSksbDwxfHx2b2lkIDA9PT1jKXJldHVybjtjb25zdCBhPUdhKEY1LHRoaXMpWzBdLGQ9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihhKSxoPXRo''@;'; put 'put ''aXMuZHJhZ0NvbHVtbnMoR2EoRjUsdGhpcyksYyk7aWYoR2EoRjUsdGhpcykubGVuZ3RoPTAsITA9PT1oKXt0aGlzLnBlcnNpc3RlbnRTdGF0ZVNhdmUoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuaG90LnJlbmRlcigpO2NvbnN0IGY9dGhpcy5ob3QudG9WaXN1''@;'; put 'put ''YWxDb2x1bW4oZCk7dGhpcy5ob3Quc2VsZWN0Q29sdW1ucyhmLGYrbC0xKX19ZnVuY3Rpb24gVTZ0KCl7Y29uc3QgYz10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLGQ9Yy5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoMCkrMStjLmhvbGRlci5zY3JvbGxUb3A7R2EoT2QsdGhpcykuc2V0UG9zaXRp''@;'; put 'put ''b24oZCksR2EoT2QsdGhpcykuc2V0U2l6ZShudWxsLGMuaGlkZXIub2Zmc2V0SGVpZ2h0LWQpfWZ1bmN0aW9uIFo2dCgpe3RoaXMubW92ZUJ5U2V0dGluZ3NPckxvYWQoKX1mdW5jdGlvbiBZMShjLGwsYSl7VTllKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBVOWUoYyxsKXtpZihsLmhhcyhj''@;'; put 'put ''KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIEV1KGMsbCxhKXtyZXR1cm4gYy5zZXQoZHAoYyxsKSxhKSxhfWZ1bmN0aW9uIGthKGMsbCl7cmV0dXJuIGMuZ2V0KGRw''@;'; put 'put ''KGMsbCkpfWZ1bmN0aW9uIGRwKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1j''@;'; put 'put ''b25zdCBOQj0ibWFudWFsQ29sdW1uUmVzaXplIixaOWU9Im1hbnVhbENvbHVtbldpZHRocyI7dmFyIEg1PW5ldyBXZWFrTWFwLFZCPW5ldyBXZWFrTWFwLEIyPW5ldyBXZWFrTWFwLEJCPW5ldyBXZWFrTWFwLEc0PW5ldyBXZWFrTWFwLEc2dD1uZXcgV2Vha01hcCxXQz1uZXcgV2Vha01hcCxq''@;'; put 'put ''Qj1uZXcgV2Vha01hcCxEaD1uZXcgV2Vha01hcCxONT1uZXcgV2Vha01hcCxHdj1uZXcgV2Vha01hcCx6Qj1uZXcgV2Vha01hcCxZQz1uZXcgV2Vha01hcCxFRD1uZXcgV2Vha01hcCxqMj1uZXcgV2Vha01hcCxURD1uZXcgV2Vha01hcCwkND1uZXcgV2Vha1NldDtjbGFzcyAkNnQgZXh0ZW5k''@;'; put 'put ''cyBNc3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gTkJ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTMwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLGZ1bmN0aW9uIFc2dChjLGwpe1U5ZShjLGwpLGwuYWRkKGMpfSh0aGlzLCQ0KSxZMSh0aGlzLEg1LG51bGwp''@;'; put 'put ''LFkxKHRoaXMsVkIsbnVsbCksWTEodGhpcyxCMixbXSksWTEodGhpcyxCQixudWxsKSxZMSh0aGlzLEc0LG51bGwpLFkxKHRoaXMsRzZ0LG51bGwpLFkxKHRoaXMsV0MsbnVsbCksWTEodGhpcyxqQixudWxsKSxZMSh0aGlzLERoLHRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50''@;'; put 'put ''KCJESVYiKSksWTEodGhpcyxONSx0aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIikpLFkxKHRoaXMsR3YsbnVsbCksWTEodGhpcyx6QiwhMSksWTEodGhpcyxZQywwKSxZMSh0aGlzLEVELG51bGwpLFkxKHRoaXMsajIsdm9pZCAwKSxZMSh0aGlzLFRELHZvaWQgMCks''@;'; put 'put ''aWkoa2EoRGgsdGhpcyksIm1hbnVhbENvbHVtblJlc2l6ZXIiKSxpaShrYShONSx0aGlzKSwibWFudWFsQ29sdW1uUmVzaXplckd1aWRlIil9Z2V0IGlubGluZURpcigpe3JldHVybiB0aGlzLmhvdC5pc1J0bCgpPyJyaWdodCI6ImxlZnQifWlzRW5hYmxlZCgpe3JldHVybiB0aGlzLmhvdC5n''@;'; put 'put ''ZXRTZXR0aW5ncygpW05CXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KEV1KGoyLHRoaXMsbmV3IEY2KSxrYShqMix0aGlzKS5hZGRMb2NhbEhvb2soImluaXQiLCgpPT5kcCgkNCx0aGlzLEs2dCkuY2FsbCh0aGlzKSksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBw''@;'; put 'put ''ZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lLGthKGoyLHRoaXMpKSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbFdpZHRoIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBk''@;'; put 'put ''cCgkNCxsLHQ4dCkuY2FsbChsLC4uLmQpfSwxKSx0aGlzLmFkZEhvb2soImJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gZHAo''@;'; put 'put ''JDQsbCxuOHQpLmNhbGwobCwuLi5kKX0sMSksdGhpcy5hZGRIb29rKCJiZWZvcmVDb2x1bW5SZXNpemUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGRwKCQ0LGwscjh0KS5j''@;'; put 'put ''YWxsKGwsLi4uZCl9KSx0aGlzLmJpbmRFdmVudHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7RXUoVEQsdGhpcyxrYShqMix0''@;'; put 'put ''aGlzKS5nZXRWYWx1ZXMoKSksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1zYXZlTWFudWFsQ29sdW1uV2lkdGhzKCl7dGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZVNhdmUiLFo5''@;'; put 'put ''ZSxrYShqMix0aGlzKS5nZXRWYWx1ZXMoKSl9bG9hZE1hbnVhbENvbHVtbldpZHRocygpe2NvbnN0IGw9e307cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVMb2FkIixaOWUsbCksbC52YWx1ZX1zZXRNYW51YWxTaXplKGwsYSl7Y29uc3QgZD1NYXRoLm1heChhLDIw''@;'; put 'put ''KSxoPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCk7cmV0dXJuIGthKGoyLHRoaXMpLnNldFZhbHVlQXRJbmRleChoLGQpLGR9Y2xlYXJNYW51YWxTaXplKGwpe2NvbnN0IGE9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKTtrYShqMix0aGlzKS5zZXRWYWx1ZUF0SW5kZXgoYSxudWxs''@;'; put 'put ''KX1zZXR1cEhhbmRsZVBvc2l0aW9uKGwpe2lmKCFsLnBhcmVudE5vZGV8fGthKFlDLHRoaXMpPjEpcmV0dXJuO0V1KEg1LHRoaXMsbCk7Y29uc3R7X3d0OmF9PXRoaXMuaG90LnZpZXcsZD1hLnd0VGFibGUuZ2V0Q29vcmRzKGthKEg1LHRoaXMpKSxoPWQuY29sO2lmKGg8MClyZXR1cm47Y29u''@;'; put 'put ''c3QgZj1GdShrYShINSx0aGlzKSksdj1rYShINSx0aGlzKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgRDtoPGEuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSYmKEQ9YS53dE92ZXJsYXlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5nZXRSZWxhdGl2ZUNlbGxQb3Np''@;'; put 'put ''dGlvbihrYShINSx0aGlzKSxkLnJvdyxkLmNvbCkpLER8fChEPWEud3RPdmVybGF5cy50b3BPdmVybGF5LmdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uKGthKEg1LHRoaXMpLGQucm93LGQuY29sKSksRXUoVkIsdGhpcyx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVu''@;'; put 'put ''ZGVyYWJsZUluZGV4KGgpKSxFdShCMix0aGlzLFtdKTtjb25zdCBVPXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpO3RoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkKCkmJlUmJktu''@;'; put 'put ''KHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2UoKSxvZT0+e1FhKG9lLmdldFRvcFN0YXJ0Q29ybmVyKCkuY29sLG9lLmdldEJvdHRvbUVuZENvcm5lcigpLmNvbCxGZT0+e2thKEIyLHRoaXMpLmluY2x1ZGVzKEZlKXx8a2EoQjIsdGhpcykucHVzaChGZSl9KX0pLGthKEIyLHRoaXMpLmluY2x1''@;'; put 'put ''ZGVzKGthKFZCLHRoaXMpKXx8RXUoQjIsdGhpcyxba2EoVkIsdGhpcyldKSxFdShqQix0aGlzLEQuc3RhcnQtNiksRXUoV0MsdGhpcyxwYXJzZUludCh2LndpZHRoLDEwKSksa2EoRGgsdGhpcykuc3R5bGUudG9wPWAke0QudG9wfXB4YCxrYShEaCx0aGlzKS5zdHlsZVt0aGlzLmlubGluZURp''@;'; put 'put ''cl09YCR7a2EoakIsdGhpcykra2EoV0MsdGhpcyl9cHhgLGthKERoLHRoaXMpLnN0eWxlLmhlaWdodD1gJHtmfXB4YCx0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZChrYShEaCx0aGlzKSl9cmVmcmVzaEhhbmRsZVBvc2l0aW9uKCl7a2EoRGgsdGhpcykuc3R5bGVbdGhpcy5pbmxp''@;'; put 'put ''bmVEaXJdPWAke2thKGpCLHRoaXMpK2thKEJCLHRoaXMpfXB4YH1zZXR1cEd1aWRlUG9zaXRpb24oKXtjb25zdCBsPXBhcnNlSW50KEZ1KGthKERoLHRoaXMpKSwxMCksYT1wYXJzZUludChrYShEaCx0aGlzKS5zdHlsZS50b3AsMTApK2wsZD10aGlzLmhvdC52aWV3LmdldFRhYmxlSGVpZ2h0''@;'; put 'put ''KCk7aWkoa2EoRGgsdGhpcyksImFjdGl2ZSIpLGlpKGthKE41LHRoaXMpLCJhY3RpdmUiKSxrYShONSx0aGlzKS5zdHlsZS50b3A9YCR7YX1weGAsdGhpcy5yZWZyZXNoR3VpZGVQb3NpdGlvbigpLGthKE41LHRoaXMpLnN0eWxlLmhlaWdodD1kLWwrInB4Iix0aGlzLmhvdC5yb290RWxlbWVu''@;'; put 'put ''dC5hcHBlbmRDaGlsZChrYShONSx0aGlzKSl9cmVmcmVzaEd1aWRlUG9zaXRpb24oKXtrYShONSx0aGlzKS5zdHlsZVt0aGlzLmlubGluZURpcl09a2EoRGgsdGhpcykuc3R5bGVbdGhpcy5pbmxpbmVEaXJdfWhpZGVIYW5kbGVBbmRHdWlkZSgpe1ZhKGthKERoLHRoaXMpLCJhY3RpdmUiKSxW''@;'; put 'put ''YShrYShONSx0aGlzKSwiYWN0aXZlIil9Y2hlY2tJZkNvbHVtbkhlYWRlcihsKXtjb25zdCBhPU02KGwsWyJUSEVBRCJdLHRoaXMuaG90LnJvb3RFbGVtZW50KSx7dG9wT3ZlcmxheTpkLHRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheTpofT10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlz''@;'; put 'put ''O3JldHVybltkLmNsb25lLnd0VGFibGUuVEhFQUQsaC5jbG9uZS53dFRhYmxlLlRIRUFEXS5pbmNsdWRlcyhhKX1nZXRDbG9zZXN0VEhQYXJlbnQobCl7cmV0dXJuIlRBQkxFIiE9PWwudGFnTmFtZT8iVEgiPT09bC50YWdOYW1lP2w6dGhpcy5nZXRDbG9zZXN0VEhQYXJlbnQobC5wYXJlbnRO''@;'; put 'put ''b2RlKTpudWxsfWFmdGVyTW91c2VEb3duVGltZW91dCgpe2NvbnN0IGw9KCk9Pnt0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuaG90LnJlbmRlcigpfSxhPShkLGgpPT57Y29uc3QgZj10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uUmVzaXplIixrYShHNCx0''@;'; put 'put ''aGlzKSxkLCEwKTt2b2lkIDAhPT1mJiZFdShHNCx0aGlzLGYpLHRoaXMuc2V0TWFudWFsU2l6ZShkLGthKEc0LHRoaXMpKSx0aGlzLnNhdmVNYW51YWxDb2x1bW5XaWR0aHMoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5SZXNpemUiLGthKEc0LHRoaXMpLGQsITApLGgmJmwoKX07''@;'; put 'put ''a2EoWUMsdGhpcyk+PTImJihrYShCMix0aGlzKS5sZW5ndGg+MT8oS24oa2EoQjIsdGhpcyksaD0+e2EoaCl9KSxsKCkpOktuKGthKEIyLHRoaXMpLGg9PnthKGgsITApfSkpLEV1KFlDLHRoaXMsMCksRXUoRUQsdGhpcyxudWxsKX1iaW5kRXZlbnRzKCl7Y29uc3R7cm9vdFdpbmRvdzpsLHJv''@;'; put 'put ''b3RFbGVtZW50OmF9PXRoaXMuaG90O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwibW91c2VvdmVyIixkPT5kcCgkNCx0aGlzLFg2dCkuY2FsbCh0aGlzLGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlZG93biIsZD0+ZHAoJDQsdGhp''@;'; put 'put ''cyxxNnQpLmNhbGwodGhpcyxkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZW1vdmUiLGQ9PmRwKCQ0LHRoaXMsSjZ0KS5jYWxsKHRoaXMsZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PmRwKCQ0LHRoaXMs''@;'; put 'put ''UTZ0KS5jYWxsKHRoaXMpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGthKERoLHRoaXMpLCJjb250ZXh0bWVudSIsKCk9PmRwKCQ0LHRoaXMsZTh0KS5jYWxsKHRoaXMpKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBLNnQoKXtjb25zdCBjPXRoaXMu''@;'; put 'put ''aG90LmdldFNldHRpbmdzKClbTkJdLGw9dGhpcy5sb2FkTWFudWFsQ29sdW1uV2lkdGhzKCk7dHlwZW9mIGw8InUiP3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57bC5mb3JFYWNoKChhLGQpPT57a2EoajIsdGhpcykuc2V0VmFsdWVBdEluZGV4KGQsYSl9KX0sITApOkFycmF5LmlzQXJy''@;'; put 'put ''YXkoYyk/KHRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57Yy5mb3JFYWNoKChhLGQpPT57a2EoajIsdGhpcykuc2V0VmFsdWVBdEluZGV4KGQsYSl9KX0sITApLEV1KFRELHRoaXMsYykpOiEwPT09YyYmQXJyYXkuaXNBcnJheShrYShURCx0aGlzKSkmJnRoaXMuaG90LmJhdGNoRXhlY3V0''@;'; put 'put ''aW9uKCgpPT57a2EoVEQsdGhpcykuZm9yRWFjaCgoYSxkKT0+e2thKGoyLHRoaXMpLnNldFZhbHVlQXRJbmRleChkLGEpfSl9LCEwKX1mdW5jdGlvbiBYNnQoYyl7aWYoIW9KKGMudGFyZ2V0KSYmITAhPT1rYSh6Qix0aGlzKSYmdGhpcy5jaGVja0lmQ29sdW1uSGVhZGVyKGMudGFyZ2V0KSl7''@;'; put 'put ''Y29uc3QgbD10aGlzLmdldENsb3Nlc3RUSFBhcmVudChjLnRhcmdldCk7aWYoIWwpcmV0dXJuO2NvbnN0IGE9bC5nZXRBdHRyaWJ1dGUoImNvbHNwYW4iKTtsJiYobnVsbD09PWF8fCIxIj09PWEpJiYoa2EoR3YsdGhpcyl8fHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbihsKSl9fWZ1bmN0aW9u''@;'; put 'put ''IHE2dChjKXtjLnRhcmdldC5wYXJlbnROb2RlPT09dGhpcy5ob3Qucm9vdEVsZW1lbnQmJkNvKGMudGFyZ2V0LCJtYW51YWxDb2x1bW5SZXNpemVyIikmJih0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24oa2EoSDUsdGhpcykpLHRoaXMuc2V0dXBHdWlkZVBvc2l0aW9uKCksRXUoR3YsdGhpcywh''@;'; put 'put ''MCksbnVsbD09PWthKEVELHRoaXMpJiYoRXUoRUQsdGhpcyxzZXRUaW1lb3V0KCgpPT50aGlzLmFmdGVyTW91c2VEb3duVGltZW91dCgpLDUwMCkpLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoa2EoRUQsdGhpcykpKSxFdShZQyx0aGlzLGthKFlDLHRoaXMpKzEpLHRoaXMuc3RhcnRYPWMu''@;'; put 'put ''cGFnZVgsRXUoRzQsdGhpcyxrYShXQyx0aGlzKSkpfWZ1bmN0aW9uIEo2dChjKXtpZihrYShHdix0aGlzKSl7Y29uc3QgbD0oYy5wYWdlWC10aGlzLnN0YXJ0WCkqdGhpcy5ob3QuZ2V0RGlyZWN0aW9uRmFjdG9yKCk7RXUoQkIsdGhpcyxrYShXQyx0aGlzKStsKSxLbihrYShCMix0aGlzKSxh''@;'; put 'put ''PT57RXUoRzQsdGhpcyx0aGlzLnNldE1hbnVhbFNpemUoYSxrYShCQix0aGlzKSkpfSksdGhpcy5yZWZyZXNoSGFuZGxlUG9zaXRpb24oKSx0aGlzLnJlZnJlc2hHdWlkZVBvc2l0aW9uKCl9fWZ1bmN0aW9uIFE2dCgpe2NvbnN0IGM9KCk9Pnt0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRz''@;'; put 'put ''U2l6ZSgpLHRoaXMuaG90LnJlbmRlcigpfSxsPShhLGQpPT57dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbHVtblJlc2l6ZSIsa2EoRzQsdGhpcyksYSwhMSksZCYmYygpLHRoaXMuc2F2ZU1hbnVhbENvbHVtbldpZHRocygpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbHVtblJlc2l6''@;'; put 'put ''ZSIsa2EoRzQsdGhpcyksYSwhMSl9O2thKEd2LHRoaXMpJiYodGhpcy5oaWRlSGFuZGxlQW5kR3VpZGUoKSxFdShHdix0aGlzLCExKSxrYShHNCx0aGlzKSE9PWthKFdDLHRoaXMpJiYoa2EoQjIsdGhpcykubGVuZ3RoPjE/KEtuKGthKEIyLHRoaXMpLGQ9PntsKGQpfSksYygpKTpLbihrYShC''@;'; put 'put ''Mix0aGlzKSxkPT57bChkLCEwKX0pKSx0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24oa2EoSDUsdGhpcykpKX1mdW5jdGlvbiBlOHQoKXt0aGlzLmhpZGVIYW5kbGVBbmRHdWlkZSgpLHRoaXMuaG90LnJvb3RFbGVtZW50LnJlbW92ZUNoaWxkKGthKERoLHRoaXMpKSx0aGlzLmhvdC5yb290RWxl''@;'; put 'put ''bWVudC5yZW1vdmVDaGlsZChrYShONSx0aGlzKSksRXUoR3YsdGhpcywhMSksRXUoekIsdGhpcywhMCksdGhpcy5ob3QuX3JlZ2lzdGVySW1tZWRpYXRlKCgpPT57RXUoekIsdGhpcywhMSl9KX1mdW5jdGlvbiB0OHQoYyxsKXtsZXQgYT1jO2lmKHRoaXMuZW5hYmxlZCl7Y29uc3QgZD10aGlz''@;'; put 'put ''LmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpLGg9a2EoajIsdGhpcykuZ2V0VmFsdWVBdEluZGV4KGQpO3RoaXMuaG90LmdldFNldHRpbmdzKClbTkJdJiZoJiYoYT1oKX1yZXR1cm4gYX1mdW5jdGlvbiBuOHQoYyxsKXtjb25zdCBhPWthKGoyLHRoaXMpLmdldFZhbHVlQXRJbmRleCh0aGlzLmhv''@;'; put 'put ''dC50b1BoeXNpY2FsQ29sdW1uKGwpKTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGE/YTpjfWZ1bmN0aW9uIHI4dCgpe3RoaXMuaG90LnZpZXcuX3d0Lnd0Vmlld3BvcnQucmVzZXRIYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkKCl9ZnVuY3Rpb24gVnJlKGMsbCxhKXtyZXR1cm4obD1m''@;'; put 'put ''dW5jdGlvbiBpOHQoYyl7dmFyIGw9ZnVuY3Rpb24gYTh0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9m''@;'; put 'put ''IGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShs''@;'; put 'put ''KSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBHQz0icHgiLEc5ZT1jbGFzcyBvOHR7Y29uc3RydWN0b3IobCl7VnJlKHRoaXMsImhvdCIsdm9pZCAwKSxWcmUo''@;'; put 'put ''dGhpcywiX2VsZW1lbnQiLG51bGwpLFZyZSh0aGlzLCJzdGF0ZSIsMCksdGhpcy5ob3Q9bH1hcHBlbmRUbyhsKXtsLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQpLHRoaXMuc3RhdGU9Mn1idWlsZCgpezA9PT10aGlzLnN0YXRlJiYodGhpcy5fZWxlbWVudD10aGlzLmhvdC5yb290RG9jdW1l''@;'; put 'put ''bnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5zdGF0ZT0xKX1kZXN0cm95KCl7dGhpcy5pc0FwcGVuZGVkKCkmJnRoaXMuX2VsZW1lbnQucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLl9lbGVtZW50PW51bGwsdGhpcy5zdGF0ZT0wfWlzQXBwZW5kZWQo''@;'; put 'put ''KXtyZXR1cm4gMj09PXRoaXMuc3RhdGV9aXNCdWlsdCgpe3JldHVybiB0aGlzLnN0YXRlPj0xfXNldFBvc2l0aW9uKGwsYSl7dm9pZCAwIT09bCYmKHRoaXMuX2VsZW1lbnQuc3R5bGUudG9wPWwrR0MpLHZvaWQgMCE9PWEmJih0aGlzLl9lbGVtZW50LnN0eWxlLmxlZnQ9YStHQyl9Z2V0UG9z''@;'; put 'put ''aXRpb24oKXtyZXR1cm57dG9wOnRoaXMuX2VsZW1lbnQuc3R5bGUudG9wP3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUudG9wLDEwKTowLGxlZnQ6dGhpcy5fZWxlbWVudC5zdHlsZS5sZWZ0P3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUubGVmdCwxMCk6MH19c2V0U2l6ZShsLGEp''@;'; put 'put ''e2wmJih0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoPWwrR0MpLGEmJih0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodD1hK0dDKX1nZXRTaXplKCl7cmV0dXJue3dpZHRoOnRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGg/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aCwxMCk6MCxo''@;'; put 'put ''ZWlnaHQ6dGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQ/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQsMTApOjB9fXNldE9mZnNldChsLGEpe2wmJih0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpblRvcD1sK0dDKSxhJiYodGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5MZWZ0''@;'; put 'put ''PWErR0MpfWdldE9mZnNldCgpe3JldHVybnt0b3A6dGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5Ub3A/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5Ub3AsMTApOjAsbGVmdDp0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpbkxlZnQ/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5z''@;'; put 'put ''dHlsZS5tYXJnaW5MZWZ0LDEwKTowfX19LGM4dD1jbGFzcyBsOHQgZXh0ZW5kcyBHOWV7YnVpbGQoKXtzdXBlci5idWlsZCgpLGlpKHRoaXMuX2VsZW1lbnQsImh0X19tYW51YWxSb3dNb3ZlLS1iYWNrbGlnaHQiKX19LGg4dD1jbGFzcyBkOHQgZXh0ZW5kcyBHOWV7YnVpbGQoKXtzdXBlci5i''@;'; put 'put ''dWlsZCgpLGlpKHRoaXMuX2VsZW1lbnQsImh0X19tYW51YWxSb3dNb3ZlLS1ndWlkZWxpbmUiKX19O2Z1bmN0aW9uICRDKGMsbCxhKXskOWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uICQ5ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXpl''@;'; put 'put ''IHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gJHYoYyxsLGEpe3JldHVybiBjLnNldChoOChjLGwpLGEpLGF9ZnVuY3Rpb24gR28oYyxsKXtyZXR1cm4gYy5nZXQoaDgoYyxsKSl9ZnVuY3Rpb24gaDgoYyxsLGEpe2lmKCJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfUFhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVSb3dNb3Zl''@;'; put 'put ''IiksQWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyUm93TW92ZSIpO2NvbnN0IGpyZT0ibWFudWFsUm93TW92ZSIsSzllPSJodF9fbWFudWFsUm93TW92ZSIsVUI9InNob3ctdWkiLHpyZT0ib24tbW92aW5nLS1yb3dzIixVcmU9ImFmdGVyLXNlbGVjdGlvbi0tcm93cyI7dmFyIEZk''@;'; put 'put ''PW5ldyBXZWFrTWFwLGY4PW5ldyBXZWFrTWFwLFY1PW5ldyBXZWFrTWFwLHA4PW5ldyBXZWFrTWFwLEloPW5ldyBXZWFrTWFwLFpCPW5ldyBXZWFrTWFwLEt2PW5ldyBXZWFrU2V0O2NsYXNzIGc4dCBleHRlbmRzIE1ze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlv''@;'; put 'put ''biBmOHQoYyxsKXskOWUoYyxsKSxsLmFkZChjKX0odGhpcyxLdiksJEModGhpcyxGZCxuZXcgYzh0KHRoaXMuaG90KSksJEModGhpcyxmOCxuZXcgaDh0KHRoaXMuaG90KSksJEModGhpcyxWNSxbXSksJEModGhpcyxwOCx2b2lkIDApLCRDKHRoaXMsSWgse30pLCRDKHRoaXMsWkIsdm9pZCAw''@;'; put 'put ''KX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4ganJlfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDE0MH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbanJlXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8''@;'; put 'put ''KHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBoOChLdixsLG04dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRI''@;'; put 'put ''b29rKCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGg4KEt2LGwseTh0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVy''@;'; put 'put ''U2Nyb2xsSG9yaXpvbnRhbGx5IiwoKT0+aDgoS3YsdGhpcyxfOHQpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTty''@;'; put 'put ''ZXR1cm4gaDgoS3YsbCx3OHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYnVpbGRQbHVnaW5VSSgpLHRoaXMucmVnaXN0ZXJFdmVudHMoKSxpaSh0aGlzLmhvdC5yb290RWxlbWVudCxLOWUpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0''@;'; put 'put ''aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMubW92ZUJ5U2V0dGluZ3NPckxvYWQoKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7VmEodGhpcy5ob3Qucm9vdEVsZW1lbnQsSzllKSx0aGlzLnVucmVnaXN0ZXJFdmVudHMoKSxHbyhGZCx0aGlzKS5kZXN0cm95KCksR28oZjgs''@;'; put 'put ''dGhpcykuZGVzdHJveSgpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1tb3ZlUm93KGwsYSl7cmV0dXJuIHRoaXMubW92ZVJvd3MoW2xdLGEpfW1vdmVSb3dzKGwsYSl7Y29uc3QgZD1HbyhaQix0aGlzKSxoPXRoaXMuaXNNb3ZlUG9zc2libGUobCxhKSxmPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZv''@;'; put 'put ''cmVSb3dNb3ZlIixsLGEsZCxoKTtpZigkdihaQix0aGlzLHZvaWQgMCksITE9PT1mKXJldHVybjtoJiZ0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5tb3ZlSW5kZXhlcyhsLGEpO2NvbnN0IHY9aCYmdGhpcy5pc1Jvd09yZGVyQ2hhbmdlZChsLGEpO3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygi''@;'; put 'put ''YWZ0ZXJSb3dNb3ZlIixsLGEsZCxoLHYpLHZ9ZHJhZ1JvdyhsLGEpe3JldHVybiB0aGlzLmRyYWdSb3dzKFtsXSxhKX1kcmFnUm93cyhsLGEpe2NvbnN0IGQ9dGhpcy5jb3VudEZpbmFsSW5kZXgobCxhKTtyZXR1cm4gJHYoWkIsdGhpcyxhKSx0aGlzLm1vdmVSb3dzKGwsZCl9aXNNb3ZlUG9z''@;'; put 'put ''c2libGUobCxhKXtjb25zdCBkPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCksaD1sLmxlbmd0aCthPmQsZj1hPDAsdj1sLnNvbWUoRD0+RDwwKSxNPWwuc29tZShEPT5EPj1kKTtyZXR1cm4hKGh8fGZ8fHZ8fE0pfWlzUm93T3JkZXJDaGFuZ2Vk''@;'; put 'put ''KGwsYSl7cmV0dXJuIGwuc29tZSgoZCxoKT0+ZC1oIT09YSl9Y291bnRGaW5hbEluZGV4KGwsYSl7Y29uc3QgZD1hMChsLChoLGYpPT4oZjxhJiYoaCs9MSksaCksMCk7cmV0dXJuIGEtZH1nZXRSb3dzSGVpZ2h0KGwsYSl7Y29uc3QgZD10aGlzLmhvdC5yb3dJbmRleE1hcHBlcjtsZXQgaD0w''@;'; put 'put ''O2ZvcihsZXQgZj1sO2Y8PWE7ZisrKXtjb25zdCB2PWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChmKTtudWxsIT09diYmKGgrPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuZ2V0Um93SGVpZ2h0KHYpfHx0aGlzLmhvdC5zdHlsZXNIYW5kbGVyLmdldERlZmF1bHRSb3dIZWlnaHQo''@;'; put 'put ''KSl9cmV0dXJuIGh9bW92ZUJ5U2V0dGluZ3NPckxvYWQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbanJlXTtpZihBcnJheS5pc0FycmF5KGwpKXRoaXMubW92ZVJvd3MobCwwKTtlbHNlIGlmKHZvaWQgMCE9PWwpe2NvbnN0IGE9dGhpcy5wZXJzaXN0ZW50U3RhdGVMb2FkKCk7''@;'; put 'put ''YS5sZW5ndGgmJnRoaXMubW92ZVJvd3MoYSwwKX19aXNGaXhlZFJvd1RvcChsKXtyZXR1cm4gbDx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkUm93c1RvcH1pc0ZpeGVkUm93Qm90dG9tKGwpe3JldHVybiBsPnRoaXMuaG90LmNvdW50Um93cygpLTEtdGhpcy5ob3QuZ2V0U2V0dGluZ3Mo''@;'; put 'put ''KS5maXhlZFJvd3NCb3R0b219cGVyc2lzdGVudFN0YXRlU2F2ZSgpe3RoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVTYXZlIiwibWFudWFsUm93TW92ZSIsdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1NlcXVlbmNlKCkpfXBlcnNpc3RlbnRTdGF0ZUxvYWQoKXtj''@;'; put 'put ''b25zdCBsPXt9O3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlTG9hZCIsIm1hbnVhbFJvd01vdmUiLGwpLGwudmFsdWU/bC52YWx1ZTpbXX1wcmVwYXJlUm93c1RvTW92aW5nKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksYT1bXTtp''@;'; put 'put ''ZighbClyZXR1cm4gYTtjb25zdHtmcm9tOmQsdG86aH09bDtyZXR1cm4gUWEoTWF0aC5taW4oZC5yb3csaC5yb3cpLE1hdGgubWF4KGQucm93LGgucm93KSxNPT57YS5wdXNoKE0pfSksYX1yZWZyZXNoUG9zaXRpb25zKCl7Y29uc3QgbD1HbyhJaCx0aGlzKS5jb29yZHMsYT10aGlzLmhvdC5n''@;'; put 'put ''ZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpLGQ9dGhpcy5ob3QuZ2V0TGFzdEZ1bGx5VmlzaWJsZVJvdygpLGg9dGhpcy5ob3QuY291bnRSb3dzKCk7dGhpcy5pc0ZpeGVkUm93VG9wKGwucm93KSYmYT4wJiZ0aGlzLmhvdC5zY3JvbGxWaWV3cG9ydFRvKHRoaXMuaG90LnJvd0luZGV4TWFwcGVy''@;'; put 'put ''LmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhLTEsLTEpKSx0aGlzLmlzRml4ZWRSb3dCb3R0b20obC5yb3cpJiZkPGgmJnRoaXMuaG90LnNjcm9sbFZpZXdwb3J0VG8odGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQrMSwxKSx2b2lkIDAsITApO2Nv''@;'; put 'put ''bnN0IGY9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSx2PUdvKEloLHRoaXMpLlRELE09dGhpcy5ob3Qucm9vdEVsZW1lbnQsRD1kMShNKSxVPU53KE0pLHRlPWYuaG9sZGVyLnNjcm9sbFRvcCx2ZT1ELnRvcC0odGhpcy5ob3Qucm9vdFdpbmRvdyE9PVU/VS5zY3JvbGxUb3A6MCksd2U9R28o''@;'; put 'put ''SWgsdGhpcykuZXZlbnRQYWdlWS12ZSt0ZSxGZT1mLmhpZGVyLm9mZnNldEhlaWdodCxXZT1mLlRCT0RZLm9mZnNldFRvcCxudD1HbyhGZCx0aGlzKS5nZXRPZmZzZXQoKS50b3AsZHQ9R28oRmQsdGhpcykuZ2V0U2l6ZSgpLmhlaWdodCxtdD12Lm9mZnNldEhlaWdodC8yLCR0PXYub2Zmc2V0''@;'; put 'put ''SGVpZ2h0O2xldCB6dD10aGlzLmhvdC52aWV3LlRIRUFELm9mZnNldEhlaWdodCt0aGlzLmdldFJvd3NIZWlnaHQoMCxsLnJvdy0xKTtjb25zdCB5bj13ZT49enQrbXQ7dGhpcy5pc0ZpeGVkUm93VG9wKGwucm93KSYmKHp0Kz10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnRvcE92ZXJs''@;'; put 'put ''YXkuZ2V0T3ZlcmxheU9mZnNldCgpKSxsLnJvdzwwP0dvKEloLHRoaXMpLnJvdz1hPjA/YS0xOmE6eW4/KEdvKEloLHRoaXMpLnJvdz1sLnJvdysxLHp0Kz0wPT09bC5yb3c/JHQtMTokdCk6R28oSWgsdGhpcykucm93PWwucm93O2xldCBnbj13ZSx3bj16dDt3ZStkdCtudD49RmU/Z249RmUt''@;'; put 'put ''ZHQtbnQ6d2UrbnQ8V2UmJihnbj1XZStNYXRoLmFicyhudCkpLHp0Pj1GZS0xJiYod249RmUtMSksR28oRmQsdGhpcykuc2V0UG9zaXRpb24oZ24pLEdvKGY4LHRoaXMpLnNldFBvc2l0aW9uKHduKX1yZWdpc3RlckV2ZW50cygpe2NvbnN0e2RvY3VtZW50RWxlbWVudDpsfT10aGlzLmhvdC5y''@;'; put 'put ''b290RG9jdW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZW1vdmUiLGE9Pmg4KEt2LHRoaXMsdjh0KS5jYWxsKHRoaXMsYSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9Pmg4KEt2LHRoaXMsYjh0KS5jYWxs''@;'; put 'put ''KHRoaXMpKX11bnJlZ2lzdGVyRXZlbnRzKCl7dGhpcy5ldmVudE1hbmFnZXIuY2xlYXIoKX1idWlsZFBsdWdpblVJKCl7R28oRmQsdGhpcykuYnVpbGQoKSxHbyhmOCx0aGlzKS5idWlsZCgpfWRlc3Ryb3koKXtHbyhGZCx0aGlzKS5kZXN0cm95KCksR28oZjgsdGhpcykuZGVzdHJveSgpLHN1''@;'; put 'put ''cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gbTh0KGMsbCxhLGQpe2NvbnN0e3d0VGFibGU6aCx3dFZpZXdwb3J0OmZ9PXRoaXMuaG90LnZpZXcuX3d0LHY9dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpLE09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgp''@;'; put 'put ''O2lmKCFNfHwhdnx8R28ocDgsdGhpcyl8fDAhPT1jLmJ1dHRvbilyZXR1cm4gJHYocDgsdGhpcywhMSksR28oVjUsdGhpcykubGVuZ3RoPTAsdm9pZCBWYSh0aGlzLmhvdC5yb290RWxlbWVudCxbenJlLFVCXSk7Y29uc3QgRD1HbyhmOCx0aGlzKS5pc0J1aWx0KCkmJiFHbyhmOCx0aGlzKS5p''@;'; put 'put ''c0FwcGVuZGVkKCksVT1HbyhGZCx0aGlzKS5pc0J1aWx0KCkmJiFHbyhGZCx0aGlzKS5pc0FwcGVuZGVkKCk7RCYmVSYmKEdvKGY4LHRoaXMpLmFwcGVuZFRvKGguaGlkZXIpLEdvKEZkLHRoaXMpLmFwcGVuZFRvKGguaGlkZXIpKTtjb25zdHtmcm9tOnRlLHRvOm9lfT1NLHZlPU1hdGgubWlu''@;'; put 'put ''KHRlLnJvdyxvZS5yb3cpLHdlPU1hdGgubWF4KHRlLnJvdyxvZS5yb3cpO2lmKGwuY29sPDAmJmwucm93Pj12ZSYmbC5yb3c8PXdlKXtkLnJvdz0hMCwkdihwOCx0aGlzLCEwKSxHbyhJaCx0aGlzKS5ldmVudFBhZ2VZPWMucGFnZVksR28oSWgsdGhpcykuY29vcmRzPWwsR28oSWgsdGhpcyku''@;'; put 'put ''VEQ9YSwkdihWNSx0aGlzLHRoaXMucHJlcGFyZVJvd3NUb01vdmluZygpKTtjb25zdCBGZT1oLmhvbGRlci5zY3JvbGxMZWZ0K2YuZ2V0Um93SGVhZGVyV2lkdGgoKSxXZT10aGlzLmdldFJvd3NIZWlnaHQodmUsbC5yb3ctMSkrKGMuY2xpZW50WS1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgp''@;'; put 'put ''LnRvcCk7R28oRmQsdGhpcykuc2V0UG9zaXRpb24obnVsbCxGZSksR28oRmQsdGhpcykuc2V0U2l6ZShoLmhpZGVyLm9mZnNldFdpZHRoLUZlLHRoaXMuZ2V0Um93c0hlaWdodCh2ZSx3ZSkpLEdvKEZkLHRoaXMpLnNldE9mZnNldCgtV2UsbnVsbCksaWkodGhpcy5ob3Qucm9vdEVsZW1lbnQs''@;'; put 'put ''enJlKSx0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKX1lbHNlIFZhKHRoaXMuaG90LnJvb3RFbGVtZW50LFVyZSksJHYocDgsdGhpcywhMSksR28oVjUsdGhpcykubGVuZ3RoPTB9ZnVuY3Rpb24gdjh0KGMpe0dvKHA4LHRoaXMpJiYoR28oSWgsdGhpcykuZXZlbnRQYWdlWT1jLnBhZ2VZLHRoaXMu''@;'; put 'put ''cmVmcmVzaFBvc2l0aW9ucygpKX1mdW5jdGlvbiB5OHQoYyxsLGEsZCl7IXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKXx8IUdvKHA4LHRoaXMpfHwoR28oVjUsdGhpcykuaW5kZXhPZihsLnJvdyk+LTE/VmEodGhpcy5ob3Qucm9vdEVsZW1lbnQsVUIpOmlpKHRoaXMuaG90LnJv''@;'; put 'put ''b3RFbGVtZW50LFVCKSxkLnJvdz0hMCxkLmNvbHVtbj0hMCxkLmNlbGw9ITAsR28oSWgsdGhpcykuY29vcmRzPWwsR28oSWgsdGhpcykuVEQ9YSl9ZnVuY3Rpb24gYjh0KCl7Y29uc3QgYz1HbyhJaCx0aGlzKS5yb3csbD1HbyhWNSx0aGlzKS5sZW5ndGg7aWYoJHYocDgsdGhpcywhMSksVmEo''@;'; put 'put ''dGhpcy5ob3Qucm9vdEVsZW1lbnQsW3pyZSxVQixVcmVdKSx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkmJmlpKHRoaXMuaG90LnJvb3RFbGVtZW50LFVyZSksbDwxfHx2b2lkIDA9PT1jKXJldHVybjtjb25zdCBhPUdvKFY1LHRoaXMpWzBdLGQ9dGhpcy5ob3Qu''@;'; put 'put ''dG9QaHlzaWNhbFJvdyhhKSxoPXRoaXMuZHJhZ1Jvd3MoR28oVjUsdGhpcyksYyk7aWYoR28oVjUsdGhpcykubGVuZ3RoPTAsITA9PT1oKXt0aGlzLnBlcnNpc3RlbnRTdGF0ZVNhdmUoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuaG90LnJlbmRlcigpO2NvbnN0''@;'; put 'put ''IGY9dGhpcy5ob3QudG9WaXN1YWxSb3coZCk7dGhpcy5ob3Quc2VsZWN0Um93cyhmLGYrbC0xKX19ZnVuY3Rpb24gXzh0KCl7Y29uc3QgYz10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLGQ9dGhpcy5ob3Qudmlldy5fd3Qud3RWaWV3cG9ydC5nZXRSb3dIZWFkZXJXaWR0aCgpK2MuaG9sZGVy''@;'; put 'put ''LnNjcm9sbExlZnQ7R28oRmQsdGhpcykuc2V0UG9zaXRpb24obnVsbCxkKSxHbyhGZCx0aGlzKS5zZXRTaXplKGMuaGlkZXIub2Zmc2V0V2lkdGgtZCl9ZnVuY3Rpb24gdzh0KCl7dGhpcy5tb3ZlQnlTZXR0aW5nc09yTG9hZCgpfWZ1bmN0aW9uIEcxKGMsbCxhKXtYOWUoYyxsKSxsLnNldChj''@;'; put 'put ''LGEpfWZ1bmN0aW9uIFg5ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gY3UoYyxsLGEpe3JldHVybiBjLnNldChCNShjLGwpLGEpLGF9''@;'; put 'put ''ZnVuY3Rpb24gVGEoYyxsKXtyZXR1cm4gYy5nZXQoQjUoYyxsKSl9ZnVuY3Rpb24gQjUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBp''@;'; put 'put ''cyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IFdCPSJtYW51YWxSb3dSZXNpemUiLHE5ZT0ibWFudWFsUm93SGVpZ2h0cyI7dmFyIEs0PW5ldyBXZWFrTWFwLFlCPW5ldyBXZWFrTWFwLHoyPW5ldyBXZWFrTWFwLEFEPW5ldyBXZWFrTWFwLGc4PW5ldyBXZWFrTWFwLFpyZT1u''@;'; put 'put ''ZXcgV2Vha01hcCxLQz1uZXcgV2Vha01hcCxHQj1uZXcgV2Vha01hcCxIZD1uZXcgV2Vha01hcCxYND1uZXcgV2Vha01hcCxYdj1uZXcgV2Vha01hcCwkQj1uZXcgV2Vha01hcCxYQz1uZXcgV2Vha01hcCxrRD1uZXcgV2Vha01hcCxocD1uZXcgV2Vha01hcCxERD1uZXcgV2Vha01hcCxtOD1u''@;'; put 'put ''ZXcgV2Vha1NldDtjbGFzcyBNOHQgZXh0ZW5kcyBNc3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gV0J9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMzB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksZnVuY3Rpb24gQzh0KGMsbCl7WDllKGMsbCksbC5hZGQoYyl9''@;'; put 'put ''KHRoaXMsbTgpLEcxKHRoaXMsSzQsbnVsbCksRzEodGhpcyxZQixudWxsKSxHMSh0aGlzLHoyLFtdKSxHMSh0aGlzLEFELG51bGwpLEcxKHRoaXMsZzgsbnVsbCksRzEodGhpcyxacmUsbnVsbCksRzEodGhpcyxLQyxudWxsKSxHMSh0aGlzLEdCLG51bGwpLEcxKHRoaXMsSGQsdGhpcy5ob3Qu''@;'; put 'put ''cm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpKSxHMSh0aGlzLFg0LHRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSksRzEodGhpcyxYdiwhMSksRzEodGhpcywkQiwhMSksRzEodGhpcyxYQywwKSxHMSh0aGlzLGtELG51bGwpLEcxKHRoaXMsaHAsdm9p''@;'; put 'put ''ZCAwKSxHMSh0aGlzLERELHZvaWQgMCksaWkoVGEoSGQsdGhpcyksIm1hbnVhbFJvd1Jlc2l6ZXIiKSxpaShUYShYNCx0aGlzKSwibWFudWFsUm93UmVzaXplckd1aWRlIil9Z2V0IGlubGluZURpcigpe3JldHVybiB0aGlzLmhvdC5pc1J0bCgpPyJyaWdodCI6ImxlZnQifWlzRW5hYmxlZCgp''@;'; put 'put ''e3JldHVybiB0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1dCXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fChjdShocCx0aGlzLG5ldyBGNiksVGEoaHAsdGhpcykuYWRkTG9jYWxIb29rKCJpbml0IiwoKT0+QjUobTgsdGhpcyxJOHQpLmNhbGwodGhpcykpLHRoaXMuaG90LnJvd0luZGV4''@;'; put 'put ''TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSxUYShocCx0aGlzKSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dIZWlnaHQiLChsLGEpPT5CNShtOCx0aGlzLEQ4dCkuY2FsbCh0aGlzLGwsYSkpLHRoaXMuYmluZEV2ZW50cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQ''@;'; put 'put ''bHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtjdShERCx0aGlzLFRhKGhwLHRoaXMpLmdldFZhbHVlcygpKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMu''@;'; put 'put ''cGx1Z2luTmFtZSksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXNhdmVNYW51YWxSb3dIZWlnaHRzKCl7dGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZVNhdmUiLHE5ZSxUYShocCx0aGlzKS5nZXRWYWx1ZXMoKSl9bG9hZE1hbnVhbFJvd0hlaWdodHMoKXtjb25zdCBsPXt9O3JldHVy''@;'; put 'put ''biB0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlTG9hZCIscTllLGwpLGwudmFsdWV9c2V0TWFudWFsU2l6ZShsLGEpe2NvbnN0IGQ9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSxoPU1hdGgubWF4KGEsdGhpcy5ob3Quc3R5bGVzSGFuZGxlci5nZXREZWZhdWx0Um93SGVpZ2h0''@;'; put 'put ''KCkpO3JldHVybiBUYShocCx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgoZCxoKSxofWdldExhc3REZXNpcmVkUm93SGVpZ2h0KCl7cmV0dXJuIFRhKEFELHRoaXMpfXNldHVwSGFuZGxlUG9zaXRpb24obCl7aWYoVGEoWEMsdGhpcyk+MSlyZXR1cm47Y3UoSzQsdGhpcyxsKTtjb25zdHt2aWV3OmF9''@;'; put 'put ''PXRoaXMuaG90LHtfd3Q6ZH09YSxoPWQud3RUYWJsZS5nZXRDb29yZHMoVGEoSzQsdGhpcykpLGY9aC5yb3c7aWYoZjwwKXJldHVybjtjb25zdCB2PV91KFRhKEs0LHRoaXMpKSxNPVRhKEs0LHRoaXMpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEQ9ZjxkLmdldFNldHRpbmcoImZpeGVkUm93''@;'; put 'put ''c1RvcCIpLFU9Zj49YS5jb3VudE5vdEhpZGRlblJvd0luZGV4ZXMoMCwxKS1kLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpO2xldCB0ZTtEP3RlPWQud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24oVGEoSzQsdGhpcyks''@;'; put 'put ''aC5yb3csaC5jb2wpOlUmJih0ZT1kLnd0T3ZlcmxheXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uKFRhKEs0LHRoaXMpLGgucm93LGguY29sKSksdGV8fCh0ZT1kLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmdldFJlbGF0aXZl''@;'; put 'put ''Q2VsbFBvc2l0aW9uKFRhKEs0LHRoaXMpLGgucm93LGguY29sKSksY3UoWUIsdGhpcyx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGYpKSxjdSh6Mix0aGlzLFtdKTtjb25zdCBvZT10aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29y''@;'; put 'put ''bmVyKCl8fHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKTt0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZCgpJiZvZSYmS24odGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZSgpLHdlPT57UWEod2UuZ2V0VG9wU3RhcnRDb3JuZXIoKS5yb3csd2UuZ2V0Qm90dG9t''@;'; put 'put ''U3RhcnRDb3JuZXIoKS5yb3csbnQ9PntUYSh6Mix0aGlzKS5pbmNsdWRlcyhudCl8fFRhKHoyLHRoaXMpLnB1c2gobnQpfSl9KSxUYSh6Mix0aGlzKS5pbmNsdWRlcyhUYShZQix0aGlzKSl8fGN1KHoyLHRoaXMsW1RhKFlCLHRoaXMpXSksY3UoR0IsdGhpcyx0ZS50b3AtNiksY3UoS0MsdGhp''@;'; put 'put ''cyxwYXJzZUludChNLmhlaWdodCwxMCkpLFRhKEhkLHRoaXMpLnN0eWxlLnRvcD1gJHtUYShHQix0aGlzKStUYShLQyx0aGlzKX1weGAsVGEoSGQsdGhpcykuc3R5bGVbdGhpcy5pbmxpbmVEaXJdPWAke3RlLnN0YXJ0fXB4YCxUYShIZCx0aGlzKS5zdHlsZS53aWR0aD1gJHt2fXB4YCx0aGlz''@;'; put 'put ''LmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZChUYShIZCx0aGlzKSl9cmVmcmVzaEhhbmRsZVBvc2l0aW9uKCl7VGEoSGQsdGhpcykuc3R5bGUudG9wPWAke1RhKEdCLHRoaXMpK1RhKEFELHRoaXMpfXB4YH1zZXR1cEd1aWRlUG9zaXRpb24oKXtjb25zdCBsPXBhcnNlSW50KF91KFRhKEhk''@;'; put 'put ''LHRoaXMpKSwxMCksYT1wYXJzZUludChUYShIZCx0aGlzKS5zdHlsZVt0aGlzLmlubGluZURpcl0sMTApK2wsZD10aGlzLmhvdC52aWV3LmdldFRhYmxlV2lkdGgoKTtpaShUYShIZCx0aGlzKSwiYWN0aXZlIiksaWkoVGEoWDQsdGhpcyksImFjdGl2ZSIpLFRhKFg0LHRoaXMpLnN0eWxlLnRv''@;'; put 'put ''cD1UYShIZCx0aGlzKS5zdHlsZS50b3AsVGEoWDQsdGhpcykuc3R5bGVbdGhpcy5pbmxpbmVEaXJdPWAke2F9cHhgLFRhKFg0LHRoaXMpLnN0eWxlLndpZHRoPWQtbCsicHgiLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKFRhKFg0LHRoaXMpKX1yZWZyZXNoR3VpZGVQb3NpdGlv''@;'; put 'put ''bigpe1RhKFg0LHRoaXMpLnN0eWxlLnRvcD1UYShIZCx0aGlzKS5zdHlsZS50b3B9aGlkZUhhbmRsZUFuZEd1aWRlKCl7VmEoVGEoSGQsdGhpcyksImFjdGl2ZSIpLFZhKFRhKFg0LHRoaXMpLCJhY3RpdmUiKX1jaGVja0lmUm93SGVhZGVyKGwpe2NvbnN0IGE9TTYobCxbIlRCT0RZIl0sdGhp''@;'; put 'put ''cy5ob3Qucm9vdEVsZW1lbnQpLHtpbmxpbmVTdGFydE92ZXJsYXk6ZCx0b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXk6aCxib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXk6Zn09dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cztyZXR1cm5bZC5jbG9uZS53dFRhYmxlLlRCT0RZLGgu''@;'; put 'put ''Y2xvbmUud3RUYWJsZS5UQk9EWSxmLmNsb25lLnd0VGFibGUuVEJPRFldLmluY2x1ZGVzKGEpfWdldENsb3Nlc3RUSFBhcmVudChsKXtyZXR1cm4iVEFCTEUiIT09bC50YWdOYW1lPyJUSCI9PT1sLnRhZ05hbWU/bDp0aGlzLmdldENsb3Nlc3RUSFBhcmVudChsLnBhcmVudE5vZGUpOm51bGx9''@;'; put 'put ''Z2V0QWN0dWFsUm93SGVpZ2h0KGwpe2NvbnN0IGE9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZS5nZXRSb3dIZWlnaHQobCk7cmV0dXJuIHZvaWQgMCE9PWEmJlRhKGc4LHRoaXMpPGE/YTpUYShnOCx0aGlzKX1hZnRlck1vdXNlRG93blRpbWVvdXQoKXtjb25zdCBsPSgpPT57dGhpcy5ob3Qu''@;'; put 'put ''dmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLmhvdC5yZW5kZXIoKX0sYT0oZCxoKT0+e2NvbnN0IGY9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJvd1Jlc2l6ZSIsdGhpcy5nZXRBY3R1YWxSb3dIZWlnaHQoZCksZCwhMCk7dm9pZCAwIT09ZiYmY3UoZzgsdGhpcyxmKSx0aGlzLnNl''@;'; put 'put ''dE1hbnVhbFNpemUoZCxUYShnOCx0aGlzKSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUm93UmVzaXplIix0aGlzLmdldEFjdHVhbFJvd0hlaWdodChkKSxkLCEwKSxoJiZsKCl9O1RhKFhDLHRoaXMpPj0yJiYoVGEoejIsdGhpcykubGVuZ3RoPjE/KEtuKFRhKHoyLHRoaXMpLGg9PnthKGgp''@;'; put 'put ''fSksbCgpKTpLbihUYSh6Mix0aGlzKSxoPT57YShoLCEwKX0pKSxjdShYQyx0aGlzLDApLGN1KGtELHRoaXMsbnVsbCl9YmluZEV2ZW50cygpe2NvbnN0e3Jvb3RFbGVtZW50Omwscm9vdFdpbmRvdzphfT10aGlzLmhvdDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1v''@;'; put 'put ''dXNlb3ZlciIsZD0+QjUobTgsdGhpcyx4OHQpLmNhbGwodGhpcyxkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZWRvd24iLGQ9PkI1KG04LHRoaXMsRTh0KS5jYWxsKHRoaXMsZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwibW91''@;'; put 'put ''c2Vtb3ZlIixkPT5CNShtOCx0aGlzLFQ4dCkuY2FsbCh0aGlzLGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNldXAiLCgpPT5CNShtOCx0aGlzLEE4dCkuY2FsbCh0aGlzKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihUYShIZCx0aGlz''@;'; put 'put ''KSwiY29udGV4dG1lbnUiLCgpPT5CNShtOCx0aGlzLGs4dCkuY2FsbCh0aGlzKSl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24geDh0KGMpe2lmKCFvSihjLnRhcmdldCkmJiEwIT09VGEoJEIsdGhpcykmJnRoaXMuY2hlY2tJZlJvd0hlYWRlcihjLnRhcmdldCkpe2NvbnN0''@;'; put 'put ''IGw9dGhpcy5nZXRDbG9zZXN0VEhQYXJlbnQoYy50YXJnZXQpO2wmJihUYShYdix0aGlzKXx8dGhpcy5zZXR1cEhhbmRsZVBvc2l0aW9uKGwpKX19ZnVuY3Rpb24gRTh0KGMpe0NvKGMudGFyZ2V0LCJtYW51YWxSb3dSZXNpemVyIikmJih0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24oVGEoSzQs''@;'; put 'put ''dGhpcykpLHRoaXMuc2V0dXBHdWlkZVBvc2l0aW9uKCksY3UoWHYsdGhpcywhMCksbnVsbD09PVRhKGtELHRoaXMpJiYoY3Uoa0QsdGhpcyxzZXRUaW1lb3V0KCgpPT50aGlzLmFmdGVyTW91c2VEb3duVGltZW91dCgpLDUwMCkpLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoVGEoa0QsdGhp''@;'; put 'put ''cykpKSxjdShYQyx0aGlzLFRhKFhDLHRoaXMpKzEpLGN1KFpyZSx0aGlzLGMucGFnZVkpLGN1KGc4LHRoaXMsVGEoS0MsdGhpcykpKX1mdW5jdGlvbiBUOHQoYyl7VGEoWHYsdGhpcykmJihjdShBRCx0aGlzLFRhKEtDLHRoaXMpKyhjLnBhZ2VZLVRhKFpyZSx0aGlzKSkpLEtuKFRhKHoyLHRo''@;'; put 'put ''aXMpLGw9PntjdShnOCx0aGlzLHRoaXMuc2V0TWFudWFsU2l6ZShsLFRhKEFELHRoaXMpKSl9KSx0aGlzLnJlZnJlc2hIYW5kbGVQb3NpdGlvbigpLHRoaXMucmVmcmVzaEd1aWRlUG9zaXRpb24oKSl9ZnVuY3Rpb24gQTh0KCl7Y29uc3QgYz0oKT0+e3RoaXMuaG90LnZpZXcuYWRqdXN0RWxl''@;'; put 'put ''bWVudHNTaXplKCksdGhpcy5ob3QucmVuZGVyKCl9LGw9KGEsZCk9Pnt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUm93UmVzaXplIix0aGlzLmdldEFjdHVhbFJvd0hlaWdodChhKSxhLCExKSxkJiZjKCksdGhpcy5zYXZlTWFudWFsUm93SGVpZ2h0cygpLHRoaXMuaG90LnJ1bkhvb2tzKCJh''@;'; put 'put ''ZnRlclJvd1Jlc2l6ZSIsdGhpcy5nZXRBY3R1YWxSb3dIZWlnaHQoYSksYSwhMSl9O1RhKFh2LHRoaXMpJiYodGhpcy5oaWRlSGFuZGxlQW5kR3VpZGUoKSxjdShYdix0aGlzLCExKSxUYShnOCx0aGlzKSE9PVRhKEtDLHRoaXMpJiYoVGEoejIsdGhpcykubGVuZ3RoPjE/KEtuKFRhKHoyLHRo''@;'; put 'put ''aXMpLGQ9PntsKGQpfSksYygpKTpLbihUYSh6Mix0aGlzKSxkPT57bChkLCEwKX0pKSx0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24oVGEoSzQsdGhpcykpKX1mdW5jdGlvbiBrOHQoKXt0aGlzLmhpZGVIYW5kbGVBbmRHdWlkZSgpLHRoaXMuaG90LnJvb3RFbGVtZW50LnJlbW92ZUNoaWxkKFRh''@;'; put 'put ''KEhkLHRoaXMpKSx0aGlzLmhvdC5yb290RWxlbWVudC5yZW1vdmVDaGlsZChUYShYNCx0aGlzKSksY3UoWHYsdGhpcywhMSksY3UoJEIsdGhpcywhMCksdGhpcy5ob3QuX3JlZ2lzdGVySW1tZWRpYXRlKCgpPT57Y3UoJEIsdGhpcywhMSl9KX1mdW5jdGlvbiBEOHQoYyxsKXtsZXQgYT1jO2lm''@;'; put 'put ''KHRoaXMuZW5hYmxlZCl7Y29uc3QgaD10aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpLGY9VGEoaHAsdGhpcykuZ2V0VmFsdWVBdEluZGV4KGgpO3ZhciBkO3RoaXMuaG90LmdldFNldHRpbmdzKClbV0JdJiZmJiYoYT1udWxsIT09KGQ9dGhpcy5ob3QuZ2V0UGx1Z2luKCJhdXRvUm93U2l6ZSIp''@;'; put 'put ''KSYmdm9pZCAwIT09ZCYmZC5pc0VuYWJsZWQoKT9NYXRoLm1heChmLGE/PzApOmYpfXJldHVybiBhfWZ1bmN0aW9uIEk4dCgpe2NvbnN0IGM9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtXQl0sbD10aGlzLmxvYWRNYW51YWxSb3dIZWlnaHRzKCk7dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9''@;'; put 'put ''Pnt0eXBlb2YgbDwidSI/bC5mb3JFYWNoKChhLGQpPT57VGEoaHAsdGhpcykuc2V0VmFsdWVBdEluZGV4KGQsYSl9KTpBcnJheS5pc0FycmF5KGMpPyhjLmZvckVhY2goKGEsZCk9PntUYShocCx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgoZCxhKX0pLGN1KERELHRoaXMsYykpOiEwPT09YyYmQXJy''@;'; put 'put ''YXkuaXNBcnJheShUYShERCx0aGlzKSkmJlRhKERELHRoaXMpLmZvckVhY2goKGEsZCk9PntUYShocCx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgoZCxhKX0pfSwhMCl9ZnVuY3Rpb24gcXYoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIE84dChjKXt2YXIgbD1mdW5jdGlvbiBQOHQoYyxsKXtpZigi''@;'; put 'put ''b2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0''@;'; put 'put ''aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxl''@;'; put 'put ''bnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIEo5ZShjLGwpe3JldHVybiBjLmdldChROWUoYyxsKSl9ZnVuY3Rpb24gS0IoYyxsLGEpe3JldHVybiBjLnNldChROWUoYyxsKSxhKSxhfWZ1bmN0aW9uIFE5ZShjLGwsYSl7aWYoImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Yig2ODE0NiksYig3NDk5KTt2YXIgSnY9bmV3IFdlYWtN''@;'; put 'put ''YXA7Y29uc3QgcTQ9Y2xhc3MgRjh0e2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2KXtxdih0aGlzLCJyb3ciLHZvaWQgMCkscXYodGhpcywiY29sIix2b2lkIDApLHF2KHRoaXMsInJvd3NwYW4iLHZvaWQgMCkscXYodGhpcywiY29sc3BhbiIsdm9pZCAwKSxxdih0aGlzLCJyZW1vdmVkIiwhMSks''@;'; put 'put ''cXYodGhpcywiY2VsbENvb3Jkc0ZhY3RvcnkiLHZvaWQgMCkscXYodGhpcywiY2VsbFJhbmdlRmFjdG9yeSIsdm9pZCAwKSxmdW5jdGlvbiBSOHQoYyxsLGEpeyhmdW5jdGlvbiBMOHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUg''@;'; put 'put ''c2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfSh0aGlzLEp2LG51bGwpLHRoaXMucm93PWwsdGhpcy5jb2w9YSx0aGlzLnJvd3NwYW49ZCx0aGlzLmNvbHNwYW49aCx0aGlzLmNlbGxDb29yZHNGYWN0b3J5PWYsdGhpcy5jZWxsUmFu''@;'; put 'put ''Z2VGYWN0b3J5PXZ9c3RhdGljIE5FR0FUSVZFX1ZBTFVFU19XQVJOSU5HKGwpe2xldHtyb3c6YSxjb2w6ZCxyb3dzcGFuOmgsY29sc3BhbjpmfT1sO3JldHVybiBYc2BUaGUgbWVyZ2VkIGNlbGwgZGVjbGFyZWQgd2l0aCB7cm93OiAke2F9LCBjb2w6ICR7ZH0sXHgyMAogICAgICByb3dzcGFu''@;'; put 'put ''OiAke2h9LCBjb2xzcGFuOiAke2Z9fSBjb250YWlucyBuZWdhdGl2ZSB2YWx1ZXMsIHdoaWNoIGlzXHgyMAogICAgICBub3Qgc3VwcG9ydGVkLiBJdCB3aWxsIG5vdCBiZSBhZGRlZCB0byB0aGUgY29sbGVjdGlvbi5gfXN0YXRpYyBJU19PVVRfT0ZfQk9VTkRTX1dBUk5JTkcobCl7bGV0e3Jv''@;'; put 'put ''dzphLGNvbDpkfT1sO3JldHVybiBYc2BUaGUgbWVyZ2VkIGNlbGwgZGVjbGFyZWQgYXQgWyR7YX0sICR7ZH1dIGlzIHBvc2l0aW9uZWRceDIwCiAgICAgIChvciBwb3NpdGlvbmVkIHBhcnRpYWxseSkgb3V0c2lkZSBvZiB0aGUgdGFibGUgcmFuZ2UuIEl0IHdhcyBub3QgYWRkZWQgdG8gdGhl''@;'; put 'put ''IHRhYmxlLCBwbGVhc2UgZml4IHlvdXIgc2V0dXAuYH1zdGF0aWMgSVNfU0lOR0xFX0NFTEwobCl7bGV0e3JvdzphLGNvbDpkfT1sO3JldHVybiBYc2BUaGUgbWVyZ2VkIGNlbGwgZGVjbGFyZWQgYXQgWyR7YX0sICR7ZH1dIGhhcyBib3RoICJyb3dzcGFuIlx4MjAKICAgICAgYW5kICJjb2xz''@;'; put 'put ''cGFuIiBkZWNsYXJlZCBhcyAiMSIsIHdoaWNoIG1ha2VzIGl0IGEgc2luZ2xlIGNlbGwuIEl0IGNhbm5vdCBiZSBhZGRlZCB0byB0aGUgY29sbGVjdGlvbi5gfXN0YXRpYyBaRVJPX1NQQU5fV0FSTklORyhsKXtsZXR7cm93OmEsY29sOmR9PWw7cmV0dXJuIFhzYFRoZSBtZXJnZWQgY2VsbCBk''@;'; put 'put ''ZWNsYXJlZCBhdCBbJHthfSwgJHtkfV0gaGFzICJyb3dzcGFuIlx4MjAKICAgICAgb3IgImNvbHNwYW4iIGRlY2xhcmVkIGFzICIwIiwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZC4gSXQgY2Fubm90IGJlIGFkZGVkIHRvIHRoZSBjb2xsZWN0aW9uLmB9c3RhdGljIGNvbnRhaW5zTmVnYXRpdmVW''@;'; put 'put ''YWx1ZXMobCl7bGV0e3JvdzphLGNvbDpkLHJvd3NwYW46aCxjb2xzcGFuOmZ9PWw7cmV0dXJuIGE8MHx8ZDwwfHxoPDB8fGY8MH1zdGF0aWMgaXNTaW5nbGVDZWxsKGwpe2xldHtyb3dzcGFuOmEsY29sc3BhbjpkfT1sO3JldHVybiAxPT09ZCYmMT09PWF9c3RhdGljIGNvbnRhaW5zWmVyb1Nw''@;'; put 'put ''YW4obCl7bGV0e3Jvd3NwYW46YSxjb2xzcGFuOmR9PWw7cmV0dXJuIDA9PT1kfHwwPT09YX1zdGF0aWMgaXNPdXRPZkJvdW5kcyhsLGEsZCl7cmV0dXJuIGwucm93PDB8fGwuY29sPDB8fGwucm93Pj1hfHxsLnJvdytsLnJvd3NwYW4tMT49YXx8bC5jb2w+PWR8fGwuY29sK2wuY29sc3Bhbi0x''@;'; put 'put ''Pj1kfW5vcm1hbGl6ZShsKXtjb25zdCBhPWwuY291bnRSb3dzKCksZD1sLmNvdW50Q29scygpO3RoaXMucm93PDA/dGhpcy5yb3c9MDp0aGlzLnJvdz5hLTEmJih0aGlzLnJvdz1hLTEpLHRoaXMuY29sPDA/dGhpcy5jb2w9MDp0aGlzLmNvbD5kLTEmJih0aGlzLmNvbD1kLTEpLHRoaXMucm93''@;'; put 'put ''K3RoaXMucm93c3Bhbj5hLTEmJih0aGlzLnJvd3NwYW49YS10aGlzLnJvdyksdGhpcy5jb2wrdGhpcy5jb2xzcGFuPmQtMSYmKHRoaXMuY29sc3Bhbj1kLXRoaXMuY29sKSxLQihKdix0aGlzLG51bGwpfWluY2x1ZGVzKGwsYSl7cmV0dXJuIHRoaXMucm93PD1sJiZ0aGlzLmNvbDw9YSYmdGhp''@;'; put 'put ''cy5yb3crdGhpcy5yb3dzcGFuLTE+PWwmJnRoaXMuY29sK3RoaXMuY29sc3Bhbi0xPj1hfWluY2x1ZGVzSG9yaXpvbnRhbGx5KGwpe3JldHVybiB0aGlzLmNvbDw9bCYmdGhpcy5jb2wrdGhpcy5jb2xzcGFuLTE+PWx9aW5jbHVkZXNWZXJ0aWNhbGx5KGwpe3JldHVybiB0aGlzLnJvdzw9bCYm''@;'; put 'put ''dGhpcy5yb3crdGhpcy5yb3dzcGFuLTE+PWx9c2hpZnQobCxhKXtjb25zdCBkPWxbMF18fGxbMV0saD1hK01hdGguYWJzKGxbMF18fGxbMV0pLTEsZj1sWzBdPyJjb2xzcGFuIjoicm93c3BhbiIsdj1sWzBdPyJjb2wiOiJyb3ciLE09TWF0aC5taW4oYSxoKSxEPU1hdGgubWF4KGEsaCksVT10''@;'; put 'put ''aGlzW3ZdLHRlPXRoaXNbdl0rdGhpc1tmXS0xO2lmKFU+PWEmJih0aGlzW3ZdKz1kKSxkPjApYTw9dGUmJmE+VSYmKHRoaXNbZl0rPWQpO2Vsc2UgaWYoZDwwKXtpZihNPD1VJiZEPj10ZSlyZXR1cm4gdGhpcy5yZW1vdmVkPSEwLEtCKEp2LHRoaXMsbnVsbCksITE7aWYoVT49TSYmVTw9RCl7''@;'; put 'put ''Y29uc3Qgb2U9RC1VKzEsdmU9TWF0aC5hYnMoZCktb2U7dGhpc1t2XS09dmUrZCx0aGlzW2ZdLT1vZX1lbHNlIFU8PU0mJnRlPj1EP3RoaXNbZl0rPWQ6VTw9TSYmdGU+PU0mJnRlPEQmJih0aGlzW2ZdLT10ZS1NKzEpfXJldHVybiBLQihKdix0aGlzLG51bGwpLCEwfWlzRmFydGhlcihsLGEp''@;'; put 'put ''e3JldHVybiFsfHwoImRvd24iPT09YT9sLnJvdytsLnJvd3NwYW4tMTx0aGlzLnJvdyt0aGlzLnJvd3NwYW4tMToidXAiPT09YT9sLnJvdz50aGlzLnJvdzoicmlnaHQiPT09YT9sLmNvbCtsLmNvbHNwYW4tMTx0aGlzLmNvbCt0aGlzLmNvbHNwYW4tMToibGVmdCI9PT1hP2wuY29sPnRoaXMu''@;'; put 'put ''Y29sOm51bGwpfWdldExhc3RSb3coKXtyZXR1cm4gdGhpcy5yb3crdGhpcy5yb3dzcGFuLTF9Z2V0TGFzdENvbHVtbigpe3JldHVybiB0aGlzLmNvbCt0aGlzLmNvbHNwYW4tMX1nZXRSYW5nZSgpe3JldHVybiBKOWUoSnYsdGhpcyl8fEtCKEp2LHRoaXMsdGhpcy5jZWxsUmFuZ2VGYWN0b3J5''@;'; put 'put ''KHRoaXMuY2VsbENvb3Jkc0ZhY3RvcnkodGhpcy5yb3csdGhpcy5jb2wpLHRoaXMuY2VsbENvb3Jkc0ZhY3RvcnkodGhpcy5yb3csdGhpcy5jb2wpLHRoaXMuY2VsbENvb3Jkc0ZhY3RvcnkodGhpcy5nZXRMYXN0Um93KCksdGhpcy5nZXRMYXN0Q29sdW1uKCkpKSksSjllKEp2LHRoaXMpfX07''@;'; put 'put ''ZnVuY3Rpb24gWEIoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFY4dChjKXt2YXIgbD1mdW5jdGlvbiBCOHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwi''@;'; put 'put ''ZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVy''@;'; put 'put ''biJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIFF2KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''Yz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgdjg9bmV3IFdlYWtTZXQ7Y2xhc3MgcUJ7Y29uc3RydWN0b3IobCl7KGZ1bmN0''@;'; put 'put ''aW9uIEg4dChjLGwpeyhmdW5jdGlvbiBOOHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0pKHRoaXMsdjgpLFhCKHRoaXMs''@;'; put 'put ''InBsdWdpbiIsdm9pZCAwKSxYQih0aGlzLCJtZXJnZWRDZWxscyIsW10pLFhCKHRoaXMsIm1lcmdlZENlbGxzTWF0cml4IixuZXcgTWFwKSxYQih0aGlzLCJob3QiLHZvaWQgMCksdGhpcy5wbHVnaW49bCx0aGlzLmhvdD1sLmhvdH1zdGF0aWMgSVNfT1ZFUkxBUFBJTkdfV0FSTklORyhsKXts''@;'; put 'put ''ZXR7cm93OmEsY29sOmR9PWw7cmV0dXJuIFhzYFRoZSBtZXJnZWQgY2VsbCBkZWNsYXJlZCBhdCBbJHthfSwgJHtkfV0sIG92ZXJsYXBzXHgyMAogICAgICB3aXRoIHRoZSBvdGhlciBkZWNsYXJlZCBtZXJnZWQgY2VsbC4gVGhlIG92ZXJsYXBwaW5nIG1lcmdlZCBjZWxsIHdhcyBub3QgYWRk''@;'; put 'put ''ZWQgdG8gdGhlIHRhYmxlLCBwbGVhc2VceDIwCiAgICAgIGZpeCB5b3VyIHNldHVwLmB9Z2V0KGwsYSl7dmFyIGQ7cmV0dXJuISghdGhpcy5tZXJnZWRDZWxsc01hdHJpeC5oYXMobCl8fG51bGw9PT0oZD10aGlzLm1lcmdlZENlbGxzTWF0cml4LmdldChsKS5nZXQoYSkpfHx2b2lkIDA9PT1k''@;'; put 'put ''KSYmZH1nZXRCeVJhbmdlKGwpe2NvbnN0e3JvdzphLGNvbDpkfT1sLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpoLGNvbDpmfT1sLmdldEJvdHRvbUVuZENvcm5lcigpLHY9dGhpcy5tZXJnZWRDZWxscy5sZW5ndGg7bGV0IE09ITE7Zm9yKGxldCBEPTA7RDx2O0QrKyl7Y29uc3QgVT10aGlz''@;'; put 'put ''Lm1lcmdlZENlbGxzW0RdLHtyb3c6dGUsY29sOm9lLHJvd3NwYW46dmUsY29sc3Bhbjp3ZX09VTtpZih0ZT49YSYmdGUrdmUtMTw9aCYmb2U+PWQmJm9lK3dlLTE8PWYpe009VTticmVha319cmV0dXJuIE19ZmlsdGVyT3ZlcmxhcHBpbmdNZXJnZUNlbGxzKGwpe2NvbnN0IGE9bmV3IFNldDty''@;'; put 'put ''ZXR1cm4gdGhpcy5tZXJnZWRDZWxscy5mb3JFYWNoKGg9Pntjb25zdHtyb3c6Zixjb2w6dixjb2xzcGFuOk0scm93c3BhbjpEfT1oO2ZvcihsZXQgVT1mO1U8ZitEO1UrKylmb3IobGV0IHRlPXY7dGU8ditNO3RlKyspYS5hZGQoYHIke1V9LGMke3RlfWApfSksbC5maWx0ZXIoaD0+e2NvbnN0''@;'; put 'put ''e3JvdzpmLGNvbDp2LGNvbHNwYW46TSxyb3dzcGFuOkR9PWgsVT1uZXcgU2V0O2xldCB0ZT0hMTtmb3IobGV0IG9lPWY7b2U8ZitEO29lKyspe2ZvcihsZXQgdmU9djt2ZTx2K007dmUrKyl7Y29uc3Qgd2U9YHIke29lfSxjJHt2ZX1gO2lmKGEuaGFzKHdlKSl7b3MocUIuSVNfT1ZFUkxBUFBJ''@;'; put 'put ''TkdfV0FSTklORyhoKSksdGU9ITA7YnJlYWt9VS5hZGQod2UpfWlmKHRlKWJyZWFrfXJldHVybiB0ZXx8YS5hZGQoLi4uVSksIXRlfSl9Z2V0V2l0aGluUmFuZ2UobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdHty''@;'; put 'put ''b3c6ZCxjb2w6aH09bC5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6Zixjb2w6dn09bC5nZXRCb3R0b21FbmRDb3JuZXIoKSxNPVtdO2ZvcihsZXQgRD1kO0Q8PWY7RCsrKWZvcihsZXQgVT1oO1U8PXY7VSsrKXtjb25zdCB0ZT10aGlzLmdldChELFUpO3RlJiYoYXx8IWEmJnRlLnJvdz09PUQm''@;'; put 'put ''JnRlLmNvbD09PVUpJiZNLnB1c2godGUpfXJldHVybiBNfWFkZChsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IGQ9bC5yb3csaD1sLmNvbCxNPW5ldyBxNChkLGgsbC5yb3dzcGFuLGwuY29sc3Bhbix0aGlzLmhv''@;'; put 'put ''dC5fY3JlYXRlQ2VsbENvb3Jkcyx0aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKSxEPXRoaXMuZ2V0KGQsaCksVT0hYSYmdGhpcy5pc092ZXJsYXBwaW5nKE0pO3JldHVybiBEfHxVPyhVJiZvcyhxQi5JU19PVkVSTEFQUElOR19XQVJOSU5HKE0pKSwhMSk6KHRoaXMuaG90JiZNLm5vcm1hbGl6''@;'; put 'put ''ZSh0aGlzLmhvdCksdGhpcy5tZXJnZWRDZWxscy5wdXNoKE0pLFF2KHY4LHRoaXMsZXZlKS5jYWxsKHRoaXMsTSksTSl9cmVtb3ZlKGwsYSl7Y29uc3QgZD10aGlzLmdldChsLGEpLGg9ZD90aGlzLm1lcmdlZENlbGxzLmluZGV4T2YoZCk6LTE7cmV0dXJuISghZHx8LTE9PT1oKSYmKHRoaXMu''@;'; put 'put ''bWVyZ2VkQ2VsbHMuc3BsaWNlKGgsMSksUXYodjgsdGhpcyxqOHQpLmNhbGwodGhpcyxkKSxkKX1jbGVhcigpe0tuKHRoaXMubWVyZ2VkQ2VsbHMsbD0+e2xldHtyb3c6YSxjb2w6ZCxyb3dzcGFuOmgsY29sc3BhbjpmfT1sO1FhKGEsYStoLHY9PntRYShkLGQrZixNPT57Y29uc3QgRD10aGlz''@;'; put 'put ''LmhvdC5nZXRDZWxsKHYsTSk7RCYmKEQucmVtb3ZlQXR0cmlidXRlKCJyb3dzcGFuIiksRC5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxELnN0eWxlLmRpc3BsYXk9IiIpfSl9KX0pLHRoaXMubWVyZ2VkQ2VsbHMubGVuZ3RoPTAsdGhpcy5tZXJnZWRDZWxsc01hdHJpeD1uZXcgTWFwfWlz''@;'; put 'put ''T3ZlcmxhcHBpbmcobCl7Y29uc3QgYT1sLmdldFJhbmdlKCk7Zm9yKGxldCBkPTA7ZDx0aGlzLm1lcmdlZENlbGxzLmxlbmd0aDtkKyspaWYodGhpcy5tZXJnZWRDZWxsc1tkXS5nZXRSYW5nZSgpLm92ZXJsYXBzKGEpKXJldHVybiEwO3JldHVybiExfWlzRmlyc3RSZW5kZXJhYmxlTWVyZ2Vk''@;'; put 'put ''Q2VsbChsLGEpe2NvbnN0IGQ9dGhpcy5nZXQobCxhKTtpZighZClyZXR1cm4hMTtjb25zdHtyb3c6aCxjb2w6Zixyb3dzcGFuOnYsY29sc3BhbjpNfT1kLEQ9dGhpcy5ob3Qudmlldy5nZXRBY3RpdmVPdmVybGF5TmFtZSgpLFU9WyJ0b3AiLCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciJdLmlu''@;'; put 'put ''Y2x1ZGVzKEQpPzA6dGhpcy5ob3QuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVSb3coKSx0ZT1bImlubGluZV9zdGFydCIsInRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIiwiYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRlcyhEKT8wOnRoaXMuaG90LmdldEZpcnN0UmVuZGVyZWRW''@;'; put 'put ''aXNpYmxlQ29sdW1uKCksb2U9Z3MoVSxoLGgrdi0xKSx2ZT1ncyh0ZSxmLGYrTS0xKTtyZXR1cm4gdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KG9lLDEpPT09bCYmdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbklu''@;'; put 'put ''ZGV4KHZlLDEpPT09YX1nZXRGaXJzdFJlbmRlcmFibGVDb29yZHMobCxhKXtjb25zdCBkPXRoaXMuZ2V0KGwsYSk7aWYoIWR8fHRoaXMuaXNGaXJzdFJlbmRlcmFibGVNZXJnZWRDZWxsKGwsYSkpcmV0dXJuIHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwsYSk7Y29uc3QgaD10aGlzLmhv''@;'; put 'put ''dC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZC5yb3csMSksZj10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZC5jb2wsMSk7cmV0dXJuIHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGgsZil9Z2V0U3RhcnRNb3N0''@;'; put 'put ''Q29sdW1uSW5kZXgobCxhKXtjb25zdCBkPVF2KHY4LHRoaXMsSkIpLmNhbGwodGhpcyxsLCJjb2wiLC0xKTtsZXQgaD1hO2ZvcihsZXQgZj0wO2Y8ZC5sZW5ndGg7ZisrKWlmKGRbZl08PWEpe2g9ZFtmXTticmVha31yZXR1cm4gaH1nZXRFbmRNb3N0Q29sdW1uSW5kZXgobCxhKXtjb25zdCBk''@;'; put 'put ''PVF2KHY4LHRoaXMsSkIpLmNhbGwodGhpcyxsLCJjb2wiLDEpO2xldCBoPWE7Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKyspaWYoZFtmXT49YSl7aD1kW2ZdO2JyZWFrfXJldHVybiBofWdldFRvcE1vc3RSb3dJbmRleChsLGEpe2NvbnN0IGQ9UXYodjgsdGhpcyxKQikuY2FsbCh0aGlzLGws''@;'; put 'put ''InJvdyIsLTEpO2xldCBoPWE7Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKyspaWYoZFtmXTw9YSl7aD1kW2ZdO2JyZWFrfXJldHVybiBofWdldEJvdHRvbU1vc3RSb3dJbmRleChsLGEpe2NvbnN0IGQ9UXYodjgsdGhpcyxKQikuY2FsbCh0aGlzLGwsInJvdyIsMSk7bGV0IGg9YTtmb3IobGV0''@;'; put 'put ''IGY9MDtmPGQubGVuZ3RoO2YrKylpZihkW2ZdPj1hKXtoPWRbZl07YnJlYWt9cmV0dXJuIGh9c2hpZnRDb2xsZWN0aW9ucyhsLGEsZCl7Y29uc3QgaD1bMCwwXTtzd2l0Y2gobCl7Y2FzZSJyaWdodCI6aFswXSs9ZDticmVhaztjYXNlImxlZnQiOmhbMF0tPWQ7YnJlYWs7Y2FzZSJkb3duIjpo''@;'; put 'put ''WzFdKz1kO2JyZWFrO2Nhc2UidXAiOmhbMV0tPWR9Y29uc3QgZj1bXTt0aGlzLm1lcmdlZENlbGxzLmZvckVhY2godj0+e3Yuc2hpZnQoaCxhKSx2LnJlbW92ZWQmJmYucHVzaCh2KX0pLGYuZm9yRWFjaCh2PT57dGhpcy5tZXJnZWRDZWxscy5zcGxpY2UodGhpcy5tZXJnZWRDZWxscy5pbmRl''@;'; put 'put ''eE9mKHYpLDEpfSksdGhpcy5tZXJnZWRDZWxsc01hdHJpeC5jbGVhcigpLHRoaXMubWVyZ2VkQ2VsbHMuZm9yRWFjaCh2PT57UXYodjgsdGhpcyxldmUpLmNhbGwodGhpcyx2KX0pfX1mdW5jdGlvbiBKQihjLGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRz''@;'; put 'put ''WzJdP2FyZ3VtZW50c1syXToxO2NvbnN0IGQ9bmV3IE1hcCxoPTE9PT1hP2MuZ2V0VG9wU3RhcnRDb3JuZXIoKTpjLmdldEJvdHRvbUVuZENvcm5lcigpLGY9MT09PWE/Yy5nZXRCb3R0b21FbmRDb3JuZXIoKTpjLmdldFRvcFN0YXJ0Q29ybmVyKCk7Zm9yKGxldCB2PWgucm93OzE9PT1hP3Y8''@;'; put 'put ''PWYucm93OnY+PWYucm93O3YrPWEpZm9yKGxldCBNPWguY29sOzE9PT1hP008PWYuY29sOk0+PWYuY29sO00rPWEpe2NvbnN0IEQ9InJvdyI9PT1sP3Y6TSxVPXRoaXMuZ2V0KHYsTSk7bGV0IHRlPUQ7VSYmKHRlPTE9PT1hP1VbbF0rVVtgJHtsfXNwYW5gXS0xOlVbbF0pLGQuaGFzKEQpfHxk''@;'; put 'put ''LnNldChELG5ldyBTZXQpLGQuZ2V0KEQpLmFkZCh0ZSl9cmV0dXJuIEFycmF5LmZyb20obmV3IFNldChBcnJheS5mcm9tKGQuZW50cmllcygpKS5maWx0ZXIodj0+e2xldFssTV09djtyZXR1cm4gMT09PU0uc2l6ZX0pLmZsYXRNYXAodj0+e2xldFssTV09djtyZXR1cm4gQXJyYXkuZnJvbShN''@;'; put 'put ''KX0pKSl9ZnVuY3Rpb24gZXZlKGMpe2ZvcihsZXQgbD1jLnJvdztsPGMucm93K2Mucm93c3BhbjtsKyspZm9yKGxldCBhPWMuY29sO2E8Yy5jb2wrYy5jb2xzcGFuO2ErKyl0aGlzLm1lcmdlZENlbGxzTWF0cml4LmhhcyhsKXx8dGhpcy5tZXJnZWRDZWxsc01hdHJpeC5zZXQobCxuZXcgTWFw''@;'; put 'put ''KSx0aGlzLm1lcmdlZENlbGxzTWF0cml4LmdldChsKS5zZXQoYSxjKX1mdW5jdGlvbiBqOHQoYyl7Zm9yKGxldCBsPWMucm93O2w8Yy5yb3crYy5yb3dzcGFuO2wrKylmb3IobGV0IGE9Yy5jb2w7YTxjLmNvbCtjLmNvbHNwYW47YSsrKXRoaXMubWVyZ2VkQ2VsbHNNYXRyaXguZ2V0KGwpLmRl''@;'; put 'put ''bGV0ZShhKX1jb25zdCB6OHQ9cUI7ZnVuY3Rpb24gV3JlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBVOHQoYyl7dmFyIGw9ZnVuY3Rpb24gWjh0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09''@;'; put 'put ''YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIp''@;'; put 'put ''KGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBZOHQ9Y2xhc3MgVzh0''@;'; put 'put ''e2NvbnN0cnVjdG9yKGwpe1dyZSh0aGlzLCJwbHVnaW4iLHZvaWQgMCksV3JlKHRoaXMsIm1lcmdlZENlbGxzQ29sbGVjdGlvbiIsdm9pZCAwKSxXcmUodGhpcywiY3VycmVudEZpbGxEYXRhIixudWxsKSx0aGlzLnBsdWdpbj1sLHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uPXRoaXMucGx1''@;'; put 'put ''Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbn1nZXREaXJlY3Rpb24obCxhKXtsZXQgZD1udWxsO3JldHVybiBkPWFbMF09PT1sWzBdJiZhWzFdPT09bFsxXSYmYVszXT09PWxbM10/ImRvd24iOmFbMl09PT1sWzJdJiZhWzFdPT09bFsxXSYmYVszXT09PWxbM10/InVwIjphWzFdPT09bFsxXSYm''@;'; put 'put ''YVsyXT09PWxbMl0/InJpZ2h0IjoibGVmdCIsZH1zbmFwRHJhZ0FyZWEobCxhLGQsaCl7Y29uc3QgZj1hLnNsaWNlKDApLHY9dGhpcy5nZXRBdXRvZmlsbFNpemUobCxhLGQpLFtNLEQsVSx0ZV09bCx2ZT1bInVwIiwiZG93biJdLmluZGV4T2YoZCk+LTE/VS1NKzE6dGUtRCsxLEZlPXYtTWF0''@;'; put 'put ''aC5mbG9vcih2L3ZlKSp2ZSxXZT10aGlzLmdldEZhcnRoZXN0Q29sbGVjdGlvbihsLGEsZCxoKTtpZihXZSlpZigiZG93biI9PT1kKXtjb25zdCBudD1XZS5yb3crV2Uucm93c3Bhbi1NLUZlO2ZbMl0rbnQ+PXRoaXMucGx1Z2luLmhvdC5jb3VudFJvd3MoKT9mWzJdLT1GZTpmWzJdKz1GZT9u''@;'; put 'put ''dDowfWVsc2UgaWYoInJpZ2h0Ij09PWQpe2NvbnN0IG50PVdlLmNvbCtXZS5jb2xzcGFuLUQtRmU7ZlszXStudD49dGhpcy5wbHVnaW4uaG90LmNvdW50Q29scygpP2ZbM10tPUZlOmZbM10rPUZlP250OjB9ZWxzZSBpZigidXAiPT09ZCl7Y29uc3QgbnQ9VS1GZS1XZS5yb3crMTtmWzBdK250''@;'; put 'put ''PDA/ZlswXSs9RmU6ZlswXS09RmU/bnQ6MH1lbHNlIGlmKCJsZWZ0Ij09PWQpe2NvbnN0IG50PXRlLUZlLVdlLmNvbCsxO2ZbMV0rbnQ8MD9mWzFdKz1GZTpmWzFdLT1GZT9udDowfXJldHVybiB0aGlzLnVwZGF0ZUN1cnJlbnRGaWxsQ2FjaGUoe2Jhc2VBcmVhOmwsZHJhZ0RpcmVjdGlvbjpk''@;'; put 'put ''LGZvdW5kTWVyZ2VkQ2VsbHM6aCxmaWxsU2l6ZTp2LGRyYWdBcmVhOmYsY3ljbGVMZW5ndGg6dmV9KSxmfXVwZGF0ZUN1cnJlbnRGaWxsQ2FjaGUobCl7dGhpcy5jdXJyZW50RmlsbERhdGF8fCh0aGlzLmN1cnJlbnRGaWxsRGF0YT17fSksUHUodGhpcy5jdXJyZW50RmlsbERhdGEsbCl9Z2V0''@;'; put 'put ''QXV0b2ZpbGxTaXplKGwsYSxkKXtjb25zdFtoLGYsdixNXT1sLFtELFUsdGUsb2VdPWE7c3dpdGNoKGQpe2Nhc2UidXAiOnJldHVybiBoLUQ7Y2FzZSJkb3duIjpyZXR1cm4gdGUtdjtjYXNlImxlZnQiOnJldHVybiBmLVU7Y2FzZSJyaWdodCI6cmV0dXJuIG9lLU07ZGVmYXVsdDpyZXR1cm4g''@;'; put 'put ''bnVsbH19Z2V0RHJhZ0FyZWEobCxhLGQpe2NvbnN0W2gsZix2LE1dPWwsW0QsVSx0ZSxvZV09YTtzd2l0Y2goZCl7Y2FzZSJ1cCI6cmV0dXJuW0QsVSxoLTEsTV07Y2FzZSJkb3duIjp7Y29uc3QgdmU9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KHRlLE0pO3JldHVyblt2KzEsZix0''@;'; put 'put ''ZSsodmU/dmUucm93c3Bhbi0xOjApLE1dfWNhc2UibGVmdCI6cmV0dXJuW0QsVSx2LGYtMV07Y2FzZSJyaWdodCI6e2NvbnN0IHZlPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldCh0ZSxNKTtyZXR1cm5baCxNKyh2ZT92ZS5jb2xzcGFuLTE6MCksdGUsb2VdfWRlZmF1bHQ6cmV0dXJu''@;'; put 'put ''IG51bGx9fWdldEZhcnRoZXN0Q29sbGVjdGlvbihsLGEsZCxoKXtjb25zdFtmLHYsTSxEXT1sLFU9WyJ1cCIsImRvd24iXS5pbmRleE9mKGQpPi0xLHRlPVU/TTpELG9lPVU/Zjp2LHZlPXRoaXMuZ2V0QXV0b2ZpbGxTaXplKGwsYSxkKSx3ZT1VP00tZisxOkQtdisxLFdlPXZlLU1hdGguZmxv''@;'; put 'put ''b3IodmUvd2UpKndlO2xldCBudD1udWxsLGR0PW51bGwsbXQ9bnVsbDtzd2l0Y2goZCl7Y2FzZSJ1cCI6bnQ9ImluY2x1ZGVzVmVydGljYWxseSIsbXQ9dGUtV2UrMTticmVhaztjYXNlImxlZnQiOm50PSJpbmNsdWRlc0hvcml6b250YWxseSIsbXQ9dGUtV2UrMTticmVhaztjYXNlImRvd24i''@;'; put 'put ''Om50PSJpbmNsdWRlc1ZlcnRpY2FsbHkiLG10PW9lK1dlLTE7YnJlYWs7Y2FzZSJyaWdodCI6bnQ9ImluY2x1ZGVzSG9yaXpvbnRhbGx5IixtdD1vZStXZS0xfXJldHVybiBLbihoLCR0PT57JHRbbnRdKG10KSYmJHQuaXNGYXJ0aGVyKGR0LGQpJiYoZHQ9JHQpfSksZHR9cmVjcmVhdGVBZnRl''@;'; put 'put ''ckRhdGFQb3B1bGF0aW9uKGwpe2lmKCF0aGlzLmN1cnJlbnRGaWxsRGF0YSlyZXR1cm47Y29uc3QgYT10aGlzLmdldFJhbmdlRnJvbUNoYW5nZXMobCksZD10aGlzLmN1cnJlbnRGaWxsRGF0YS5mb3VuZE1lcmdlZENlbGxzLGg9dGhpcy5jdXJyZW50RmlsbERhdGEuZHJhZ0RpcmVjdGlvbixm''@;'; put 'put ''PShVLHRlKT0+e3N3aXRjaChoKXtjYXNlInVwIjpyZXR1cm4gVS5yb3ctdGU+PWEuZnJvbS5yb3c7Y2FzZSJkb3duIjpyZXR1cm4gVS5yb3crVS5yb3dzcGFuLTErdGU8PWEudG8ucm93O2Nhc2UibGVmdCI6cmV0dXJuIFUuY29sLXRlPj1hLmZyb20uY29sdW1uO2Nhc2UicmlnaHQiOnJldHVy''@;'; put 'put ''biBVLmNvbCtVLmNvbHNwYW4tMSt0ZTw9YS50by5jb2x1bW47ZGVmYXVsdDpyZXR1cm4gbnVsbH19O2xldCB2PTAsTT1udWxsLEQ9MTtkb3tmb3IobGV0IFU9MDtVPGQubGVuZ3RoO1UrPTEpe2lmKE09ZFtVXSx2PUQqdGhpcy5jdXJyZW50RmlsbERhdGEuY3ljbGVMZW5ndGgsZihNLHYpKXN3''@;'; put 'put ''aXRjaChoKXtjYXNlInVwIjp0aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uYWRkKHtyb3c6TS5yb3ctdixyb3dzcGFuOk0ucm93c3Bhbixjb2w6TS5jb2wsY29sc3BhbjpNLmNvbHNwYW59LCEwKTticmVhaztjYXNlImRvd24iOnRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVj''@;'; put 'put ''dGlvbi5hZGQoe3JvdzpNLnJvdyt2LHJvd3NwYW46TS5yb3dzcGFuLGNvbDpNLmNvbCxjb2xzcGFuOk0uY29sc3Bhbn0sITApO2JyZWFrO2Nhc2UibGVmdCI6dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZCh7cm93Ok0ucm93LHJvd3NwYW46TS5yb3dzcGFuLGNvbDpNLmNv''@;'; put 'put ''bC12LGNvbHNwYW46TS5jb2xzcGFufSwhMCk7YnJlYWs7Y2FzZSJyaWdodCI6dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZCh7cm93Ok0ucm93LHJvd3NwYW46TS5yb3dzcGFuLGNvbDpNLmNvbCt2LGNvbHNwYW46TS5jb2xzcGFufSwhMCl9VT09PWQubGVuZ3RoLTEmJihE''@;'; put 'put ''Kz0xKX19d2hpbGUoZihNLHYpKTt0aGlzLmN1cnJlbnRGaWxsRGF0YT1udWxsLHRoaXMucGx1Z2luLmhvdC5yZW5kZXIoKSxkLmxlbmd0aD4wJiZ0aGlzLnBsdWdpbi5pZkNocm9tZUZvcmNlUmVwYWludCgpfWdldFJhbmdlRnJvbUNoYW5nZXMobCl7Y29uc3QgYT17bWluOm51bGwsbWF4Om51''@;'; put 'put ''bGx9LGQ9e21pbjpudWxsLG1heDpudWxsfTtyZXR1cm4gS24obCxoPT57Y29uc3QgZj1oWzBdLHY9dGhpcy5wbHVnaW4uaG90LnByb3BUb0NvbChoWzFdKTsobnVsbD09PWEubWlufHxmPGEubWluKSYmKGEubWluPWYpLChudWxsPT09YS5tYXh8fGY+YS5tYXgpJiYoYS5tYXg9ZiksKG51bGw9''@;'; put 'put ''PT1kLm1pbnx8djxkLm1pbikmJihkLm1pbj12KSwobnVsbD09PWQubWF4fHx2PmQubWF4KSYmKGQubWF4PXYpfSkse2Zyb206e3JvdzphLm1pbixjb2x1bW46ZC5taW59LHRvOntyb3c6YS5tYXgsY29sdW1uOmQubWF4fX19ZHJhZ0FyZWFPdmVybGFwc0NvbGxlY3Rpb25zKGwsYSxkKXtjb25z''@;'; put 'put ''dCBoPXRoaXMuZ2V0RHJhZ0FyZWEobCxhLGQpLFtmLHYsTSxEXT1oLFU9dGhpcy5wbHVnaW4uaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGYsdiksdGU9dGhpcy5wbHVnaW4uaG90Ll9jcmVhdGVDZWxsQ29vcmRzKE0sRCksb2U9dGhpcy5wbHVnaW4uaG90Ll9jcmVhdGVDZWxsUmFuZ2UoVSxVLHRl''@;'; put 'put ''KTtpZigwPT09dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0V2l0aGluUmFuZ2Uob2UsITApLmxlbmd0aClyZXR1cm4hMTtjb25zdCB3ZT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZShvZSwhMSk7cmV0dXJuIDA9PT13ZS5sZW5ndGh8fCgidXAiPT09ZHx8''@;'; put 'put ''ImRvd24iPT09ZD8hd2UuZXZlcnkoRmU9PntsZXR7Y29sc3BhbjpXZX09RmU7cmV0dXJuIFdlPT09b2UuZ2V0V2lkdGgoKX0pOiF3ZS5ldmVyeShGZT0+e2xldHtyb3dzcGFuOldlfT1GZTtyZXR1cm4gV2U9PT1vZS5nZXRIZWlnaHQoKX0pKX19O2Z1bmN0aW9uIFlyZShjLGwsYSl7cmV0dXJu''@;'; put 'put ''KGw9ZnVuY3Rpb24gRzh0KGMpe3ZhciBsPWZ1bmN0aW9uICQ4dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5''@;'; put 'put ''cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsi''@;'; put 'put ''In0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgWDh0PWNsYXNzIEs4dHtjb25zdHJ1Y3RvcihsKXtZcmUodGhpcywicGx1Z2luIix2b2lkIDApLFlyZSh0''@;'; put 'put ''aGlzLCJob3QiLHZvaWQgMCksWXJlKHRoaXMsImZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lIiwiZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwiKSx0aGlzLnBsdWdpbj1sLHRoaXMuaG90PWwuaG90fWdldFNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZShsLGEsZCxoKXtjb25zdCBm''@;'; put 'put ''PU1hdGgubWluKGRbMF0sZFsyXSksdj1NYXRoLm1pbihkWzFdLGRbM10pLE09TWF0aC5tYXgoZFswXSxkWzJdKSxEPU1hdGgubWF4KGRbMV0sZFszXSk7aWYodm9pZCAwPT09aHx8IXRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5pc0ZpcnN0UmVuZGVyYWJsZU1lcmdlZENlbGwo''@;'; put 'put ''bCxhKSlyZXR1cm47Y29uc3QgdGU9dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChsLGEpO2lmKCF0ZSlyZXR1cm47Y29uc3Qgb2U9dGUuZ2V0TGFzdFJvdygpLHZlPXRlLmdldExhc3RDb2x1bW4oKTtyZXR1cm4gZjw9dGUucm93JiZ2PD10ZS5jb2wmJk0+PW9lJiZEPj12''@;'; put 'put ''ZT9gJHt0aGlzLmZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lfS0ke2h9YDp0aGlzLmlzTWVyZ2VDZWxsRnVsbHlTZWxlY3RlZCh0ZSx0aGlzLnBsdWdpbi5ob3QuZ2V0U2VsZWN0ZWRSYW5nZSgpKT9gJHt0aGlzLmZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lfS1tdWx0''@;'; put 'put ''aXBsZWA6dm9pZCAwfWlzTWVyZ2VDZWxsRnVsbHlTZWxlY3RlZChsLGEpe2NvbnN0IGQ9W107aWYoIWF8fCFsKXJldHVybiExO2ZvcihsZXQgaD0wO2g8bC5yb3dzcGFuO2grPTEpZm9yKGxldCBmPTA7ZjxsLmNvbHNwYW47Zis9MSlkLnB1c2godGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMo''@;'; put 'put ''bC5yb3craCxsLmNvbCtmKSk7Zm9yKGxldCBoPTA7aDxkLmxlbmd0aDtoKz0xKXtjb25zdCBmPVtdO2ZvcihsZXQgdj0wO3Y8YS5sZW5ndGg7dis9MSlmW3ZdPWFbdl0uaW5jbHVkZXMoZFtoXSk7aWYoIWYuaW5jbHVkZXMoITApKXJldHVybiExfXJldHVybiEwfWdldFNlbGVjdGVkTWVyZ2Vk''@;'; put 'put ''Q2VsbENsYXNzTmFtZVRvUmVtb3ZlKCl7Y29uc3QgbD1bXTtmb3IobGV0IGE9MDthPD03O2ErPTEpbC5wdXNoKGAke3RoaXMuZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWV9LSR7YX1gKTtyZXR1cm4gbC5wdXNoKGAke3RoaXMuZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05h''@;'; put 'put ''bWV9LW11bHRpcGxlYCksbH19O2Z1bmN0aW9uIElEKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBKOHQoYyl7dmFyIGw9ZnVuY3Rpb24gUTh0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7''@;'; put 'put ''dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMp''@;'; put 'put ''fShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyB0dmV7Y29uc3RydWN0b3Io''@;'; put 'put ''bCl7SUQodGhpcywiZGF0YSIsdm9pZCAwKSxJRCh0aGlzLCJuZXh0IixudWxsKSxJRCh0aGlzLCJwcmV2IixudWxsKSx0aGlzLmRhdGE9bH19Y29uc3QgUUI9Y2xhc3MgZTd0e2NvbnN0cnVjdG9yKCl7SUQodGhpcywiZmlyc3QiLG51bGwpLElEKHRoaXMsImxhc3QiLG51bGwpfXB1c2gobCl7''@;'; put 'put ''Y29uc3QgYT1uZXcgdHZlKGwpO2lmKG51bGw9PT10aGlzLmZpcnN0KXRoaXMuZmlyc3Q9YSx0aGlzLmxhc3Q9YTtlbHNle2NvbnN0IGQ9dGhpcy5sYXN0O3RoaXMubGFzdD1hLGEucHJldj1kLGQubmV4dD1hfXJldHVybiBhfXVuc2hpZnQobCl7Y29uc3QgYT1uZXcgdHZlKGwpO2lmKG51bGw9''@;'; put 'put ''PT10aGlzLmZpcnN0KXRoaXMuZmlyc3Q9YSx0aGlzLmxhc3Q9YTtlbHNle2NvbnN0IGQ9dGhpcy5maXJzdDt0aGlzLmZpcnN0PWEsYS5uZXh0PWQsZC5wcmV2PWF9fWlub3JkZXIobCl7bGV0IGE9dGhpcy5maXJzdDtmb3IoO2E7KXtjb25zdCBkPWwoYSk7aWYoYT09PXRoaXMubGFzdHx8ITA9''@;'; put 'put ''PT1kKWJyZWFrO2E9YS5uZXh0fX1yZW1vdmUobCl7aWYobnVsbD09PXRoaXMuZmlyc3QpcmV0dXJuITE7bGV0IGQsaCxhPXRoaXMuZmlyc3Q7Zm9yKDthOyl7aWYoYS5kYXRhPT09bClyZXR1cm4gZD1hLm5leHQsaD1hLnByZXYsZCYmKGQucHJldj1oKSxoJiYoaC5uZXh0PWQpLGE9PT10aGlz''@;'; put 'put ''LmZpcnN0JiYodGhpcy5maXJzdD1kKSxhPT09dGhpcy5sYXN0JiYodGhpcy5sYXN0PWgpLCEwO2E9YS5uZXh0fXJldHVybiExfWhhc0N5Y2xlKCl7bGV0IGw9dGhpcy5maXJzdCxhPXRoaXMuZmlyc3Q7Zm9yKDs7KXtpZihudWxsPT09bHx8KGw9bC5uZXh0LG51bGw9PT1sKSlyZXR1cm4hMTtp''@;'; put 'put ''ZihsPWwubmV4dCxhPWEubmV4dCxsPT09YSlyZXR1cm4hMH19cG9wKCl7aWYobnVsbD09PXRoaXMubGFzdClyZXR1cm4gbnVsbDtjb25zdCBsPXRoaXMubGFzdDtyZXR1cm4gdGhpcy5sYXN0PXRoaXMubGFzdC5wcmV2LGx9c2hpZnQoKXtpZihudWxsPT09dGhpcy5maXJzdClyZXR1cm4gbnVs''@;'; put 'put ''bDtjb25zdCBsPXRoaXMuZmlyc3Q7cmV0dXJuIHRoaXMuZmlyc3Q9dGhpcy5maXJzdC5uZXh0LGx9cmVjdXJzaXZlUmV2ZXJzZSgpe2lmKCF0aGlzLmZpcnN0KXJldHVybjsoZnVuY3Rpb24gbChkLGgpe2gmJihsKGgsaC5uZXh0KSxoLm5leHQ9ZCl9KSh0aGlzLmZpcnN0LHRoaXMuZmlyc3Qu''@;'; put 'put ''bmV4dCksdGhpcy5maXJzdC5uZXh0PW51bGw7Y29uc3QgYT10aGlzLmZpcnN0O3RoaXMuZmlyc3Q9dGhpcy5sYXN0LHRoaXMubGFzdD1hfXJldmVyc2UoKXtpZighdGhpcy5maXJzdHx8IXRoaXMuZmlyc3QubmV4dClyZXR1cm47bGV0IGQsbD10aGlzLmZpcnN0Lm5leHQsYT10aGlzLmZpcnN0''@;'; put 'put ''O2Zvcig7bDspZD1sLm5leHQsbC5uZXh0PWEsYS5wcmV2PWwsYT1sLGw9ZDt0aGlzLmZpcnN0Lm5leHQ9bnVsbCx0aGlzLmxhc3QucHJldj1udWxsLGQ9dGhpcy5maXJzdCx0aGlzLmZpcnN0PWEsdGhpcy5sYXN0PWR9fTtmdW5jdGlvbiBleShjLGwsYSl7bnZlKGMsbCksbC5zZXQoYyxhKX1m''@;'; put 'put ''dW5jdGlvbiBudmUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHhsKGMsbCl7cmV0dXJuIGMuZ2V0KGVqKGMsbCkpfWZ1bmN0aW9uIFUy''@;'; put 'put ''KGMsbCxhKXtyZXR1cm4gYy5zZXQoZWooYyxsKSxhKSxhfWZ1bmN0aW9uIGVqKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90''@;'; put 'put ''IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgSjQ9bmV3IFdlYWtNYXAsUTQ9bmV3IFdlYWtNYXAsZWc9bmV3IFdlYWtNYXAsdGc9bmV3IFdlYWtNYXAsR3JlPW5ldyBXZWFrTWFwLHRqPW5ldyBXZWFrTWFwLG5qPW5ldyBXZWFrTWFwLCRyZT1uZXcgV2Vha1NldDtjbGFzcyBuN3R7Y29u''@;'; put 'put ''c3RydWN0b3IobCl7bGV0e21lcmdlZENlbGxzR2V0dGVyOmEscm93SW5kZXhNYXBwZXI6ZCxjb2x1bW5JbmRleE1hcHBlcjpofT1sOyhmdW5jdGlvbiB0N3QoYyxsKXtudmUoYyxsKSxsLmFkZChjKX0pKHRoaXMsJHJlKSxleSh0aGlzLEo0LG5ldyBRQiksZXkodGhpcyxRNCxuZXcgUUIpLGV5''@;'; put 'put ''KHRoaXMsZWcsbnVsbCksZXkodGhpcyx0ZyxudWxsKSxleSh0aGlzLEdyZSxudWxsKSxleSh0aGlzLHRqLG51bGwpLGV5KHRoaXMsbmosbnVsbCksVTIoR3JlLHRoaXMsYSksVTIodGosdGhpcyxkKSxVMihuaix0aGlzLGgpfWdldEN1cnJlbnRWZXJ0aWNhbE5vZGUoKXtyZXR1cm4geGwodGcs''@;'; put 'put ''dGhpcykuZGF0YX1nZXRGaXJzdFZlcnRpY2FsTm9kZSgpe3JldHVybiB4bChRNCx0aGlzKS5maXJzdC5kYXRhfWdldE5leHRWZXJ0aWNhbE5vZGUoKXtyZXR1cm4geGwodGcsdGhpcykubmV4dC5kYXRhfWdldFByZXZWZXJ0aWNhbE5vZGUoKXtyZXR1cm4geGwodGcsdGhpcykucHJldi5kYXRh''@;'; put 'put ''fWdldEN1cnJlbnRIb3Jpem9udGFsTm9kZSgpe3JldHVybiB4bChlZyx0aGlzKS5kYXRhfWdldEZpcnN0SG9yaXpvbnRhbE5vZGUoKXtyZXR1cm4geGwoSjQsdGhpcykuZmlyc3QuZGF0YX1nZXROZXh0SG9yaXpvbnRhbE5vZGUoKXtyZXR1cm4geGwoZWcsdGhpcykubmV4dC5kYXRhfWdldFBy''@;'; put 'put ''ZXZIb3Jpem9udGFsTm9kZSgpe3JldHVybiB4bChlZyx0aGlzKS5wcmV2LmRhdGF9c2V0UHJldk5vZGVBc0FjdGl2ZSgpe1UyKHRnLHRoaXMseGwodGcsdGhpcykucHJldiksVTIoZWcsdGhpcyx4bChlZyx0aGlzKS5wcmV2KX1zZXROZXh0Tm9kZUFzQWN0aXZlKCl7VTIodGcsdGhpcyx4bCh0''@;'; put 'put ''Zyx0aGlzKS5uZXh0KSxVMihlZyx0aGlzLHhsKGVnLHRoaXMpLm5leHQpfWJ1aWxkRm9jdXNPcmRlcihsKXtVMihKNCx0aGlzLG5ldyBRQiksbC5mb3JFYWNoKChhLGQpPT57Y29uc3QgaD1uZXcgV2Vha1NldCxmPWEuZ2V0VG9wU3RhcnRDb3JuZXIoKSx2PWEuZ2V0Qm90dG9tRW5kQ29ybmVy''@;'; put 'put ''KCk7Zm9yKGxldCBNPWYucm93O008PXYucm93O00rKylpZigheGwodGosdGhpcykuaXNIaWRkZW4oTSkpZm9yKGxldCBEPWYuY29sO0Q8PXYuY29sO0QrKyl7aWYoeGwobmosdGhpcykuaXNIaWRkZW4oRCkpY29udGludWU7Y29uc3QgVT1laigkcmUsdGhpcyxydmUpLmNhbGwodGhpcyx7c2Vs''@;'; put 'put ''ZWN0ZWRSYW5nZTphLHNlbGVjdGlvbkxheWVyOmQsbGlzdE9yZGVyOnhsKEo0LHRoaXMpLG1lcmdlQ2VsbHNWaXNpdG9yOmgscm93Ok0sY29sdW1uOkR9KTtVJiZVMihlZyx0aGlzLFUpfX0pLHhsKEo0LHRoaXMpLmZpcnN0JiYoeGwoSjQsdGhpcykuZmlyc3QucHJldj14bChKNCx0aGlzKS5s''@;'; put 'put ''YXN0LHhsKEo0LHRoaXMpLmxhc3QubmV4dD14bChKNCx0aGlzKS5maXJzdCksVTIoUTQsdGhpcyxuZXcgUUIpLGwuZm9yRWFjaCgoYSxkKT0+e2NvbnN0IGg9bmV3IFdlYWtTZXQsZj1hLmdldFRvcFN0YXJ0Q29ybmVyKCksdj1hLmdldEJvdHRvbUVuZENvcm5lcigpO2ZvcihsZXQgTT1mLmNv''@;'; put 'put ''bDtNPD12LmNvbDtNKyspaWYoIXhsKG5qLHRoaXMpLmlzSGlkZGVuKE0pKWZvcihsZXQgRD1mLnJvdztEPD12LnJvdztEKyspe2lmKHhsKHRqLHRoaXMpLmlzSGlkZGVuKEQpKWNvbnRpbnVlO2NvbnN0IFU9ZWooJHJlLHRoaXMscnZlKS5jYWxsKHRoaXMse3NlbGVjdGVkUmFuZ2U6YSxzZWxl''@;'; put 'put ''Y3Rpb25MYXllcjpkLGxpc3RPcmRlcjp4bChRNCx0aGlzKSxtZXJnZUNlbGxzVmlzaXRvcjpoLHJvdzpELGNvbHVtbjpNfSk7VSYmVTIodGcsdGhpcyxVKX19KSx4bChRNCx0aGlzKS5maXJzdCYmKHhsKFE0LHRoaXMpLmZpcnN0LnByZXY9eGwoUTQsdGhpcykubGFzdCx4bChRNCx0aGlzKS5s''@;'; put 'put ''YXN0Lm5leHQ9eGwoUTQsdGhpcykuZmlyc3QpfXNldEFjdGl2ZU5vZGUobCxhLGQpe3JldHVybiB4bChKNCx0aGlzKS5pbm9yZGVyKGg9Pntjb25zdHtzZWxlY3Rpb25MYXllcjpmLHJvd1N0YXJ0OnYscm93RW5kOk0sY29sU3RhcnQ6RCxjb2xFbmQ6VX09aC5kYXRhO2lmKGY9PT1kJiZsPj12''@;'; put 'put ''JiZsPD1NJiZhPj1EJiZhPD1VKXJldHVybiBVMihlZyx0aGlzLGgpLCEwfSkseGwoUTQsdGhpcykuaW5vcmRlcihoPT57Y29uc3R7c2VsZWN0aW9uTGF5ZXI6Zixyb3dTdGFydDp2LHJvd0VuZDpNLGNvbFN0YXJ0OkQsY29sRW5kOlV9PWguZGF0YTtpZihmPT09ZCYmbD49diYmbDw9TSYmYT49''@;'; put 'put ''RCYmYTw9VSlyZXR1cm4gVTIodGcsdGhpcyxoKSwhMH0pLHRoaXN9fWZ1bmN0aW9uIHJ2ZShjKXtsZXR7c2VsZWN0ZWRSYW5nZTpsLHNlbGVjdGlvbkxheWVyOmEsbGlzdE9yZGVyOmQsbWVyZ2VDZWxsc1Zpc2l0b3I6aCxyb3c6Zixjb2x1bW46dn09Yztjb25zdCBNPWwuZ2V0VG9wU3RhcnRD''@;'; put 'put ''b3JuZXIoKSxEPWwuZ2V0Qm90dG9tRW5kQ29ybmVyKCksVT1sLmhpZ2hsaWdodC5jbG9uZSgpLm5vcm1hbGl6ZSgpLHRlPXhsKEdyZSx0aGlzKS5jYWxsKHRoaXMsZix2KTtpZih0ZSYmaC5oYXModGUpKXJldHVybiBudWxsO2NvbnN0IG9lPXtzZWxlY3Rpb25MYXllcjphLGNvbFN0YXJ0OnYs''@;'; put 'put ''Y29sRW5kOnYscm93U3RhcnQ6Zixyb3dFbmQ6Zn07aWYodGUpe2lmKGguYWRkKHRlKSx0ZS5yb3c8TS5yb3d8fHRlLnJvdyt0ZS5yb3dzcGFuLTE+RC5yb3d8fHRlLmNvbDxNLmNvbHx8dGUuY29sK3RlLmNvbHNwYW4tMT5ELmNvbClyZXR1cm4gbnVsbDtvZS5jb2xTdGFydD10ZS5jb2wsb2Uu''@;'; put 'put ''Y29sRW5kPXRlLmNvbCt0ZS5jb2xzcGFuLTEsb2Uucm93U3RhcnQ9dGUucm93LG9lLnJvd0VuZD10ZS5yb3crdGUucm93c3Bhbi0xfWNvbnN0IHZlPWQucHVzaChvZSk7cmV0dXJuIGY9PT1VLnJvdyYmdj09PVUuY29sfHx0ZSYmVS5yb3c+PXRlLnJvdyYmVS5yb3c8PXRlLnJvdyt0ZS5yb3dz''@;'; put 'put ''cGFuLTEmJlUuY29sPj10ZS5jb2wmJlUuY29sPD10ZS5jb2wrdGUuY29sc3Bhbi0xP3ZlOm51bGx9ZnVuY3Rpb24gaXZlKGMsbCxhKXtjb25zdHtyb3dJbmRleE1hcHBlcjpkLHN0eWxlc0hhbmRsZXI6aH09YztsZXQgZj0wO2ZvcihsZXQgTT1sO008bCthO00rKylpZighZC5pc0hpZGRlbihN''@;'; put 'put ''KSl7dmFyIHY7Zis9bnVsbCE9PSh2PWMuZ2V0Um93SGVpZ2h0KE0pKSYmdm9pZCAwIT09dj92OmguZ2V0RGVmYXVsdFJvd0hlaWdodChNKX1yZXR1cm4gZn1mdW5jdGlvbiByaihjLGwsYSl7YXZlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBhdmUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBu''@;'; put 'put ''ZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIEtyZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gYTd0KGMpe3ZhciBsPWZ1bmN0aW9uIG83dChjLGwpe2lmKCJvYmplY3QiIT10eXBl''@;'; put 'put ''b2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1''@;'; put 'put ''cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAs''@;'; put 'put ''Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gUkQoYyxsLGEpe3JldHVybiBjLnNldChQbChjLGwpLGEpLGF9ZnVuY3Rpb24gbGMoYyxsKXtyZXR1cm4gYy5nZXQoUGwoYyxsKSl9ZnVuY3Rpb24gUGwoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBj''@;'; put 'put ''P2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfUFhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVNZXJnZUNlbGxzIiksQWEu''@;'; put 'put ''Z2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyTWVyZ2VDZWxscyIpLEFhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVVbm1lcmdlQ2VsbHMiKSxBYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJVbm1lcmdlQ2VsbHMiKTtjb25zdCBYcmU9Im1lcmdlQ2VsbHMiLG92''@;'; put 'put ''ZT1YcmU7dmFyIEpmPW5ldyBXZWFrTWFwLFFmPW5ldyBXZWFrTWFwLG5nPW5ldyBXZWFrTWFwLHN2ZT1uZXcgV2Vha01hcCxHbD1uZXcgV2Vha1NldDtjbGFzcyBsN3QgZXh0ZW5kcyBNc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gaTd0KGMsbCl7YXZlKGMs''@;'; put 'put ''bCksbC5hZGQoYyl9KHRoaXMsR2wpLEtyZSh0aGlzLCJtZXJnZWRDZWxsc0NvbGxlY3Rpb24iLG51bGwpLEtyZSh0aGlzLCJhdXRvZmlsbENhbGN1bGF0aW9ucyIsbnVsbCksS3JlKHRoaXMsInNlbGVjdGlvbkNhbGN1bGF0aW9ucyIsbnVsbCkscmoodGhpcyxKZixudWxsKSxyaih0aGlzLFFm''@;'; put 'put ''LHtyb3c6MCxjb2w6MH0pLHJqKHRoaXMsbmcsbmV3IG43dCh7bWVyZ2VkQ2VsbHNHZXR0ZXI6KGwsYSk9PnRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChsLGEpLHJvd0luZGV4TWFwcGVyOnRoaXMuaG90LnJvd0luZGV4TWFwcGVyLGNvbHVtbkluZGV4TWFwcGVyOnRoaXMuaG90LmNv''@;'; put 'put ''bHVtbkluZGV4TWFwcGVyfSkpLHJqKHRoaXMsc3ZlLGZ1bmN0aW9uIHI3dChjKXtjb25zdHtob3Q6bH09Yyx7cm93SW5kZXhNYXBwZXI6YSxjb2x1bW5JbmRleE1hcHBlcjpkfT1sLGg9bmV3IE1hcDtyZXR1cm57YmVmb3JlOmZ1bmN0aW9uIGYoKXt9LGFmdGVyOmZ1bmN0aW9uIHYoTSxELFUp''@;'; put 'put ''e2NvbnN0IHRlPWMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChELFUpO2lmKCFtbyh0ZSkpcmV0dXJuIE0ucmVtb3ZlQXR0cmlidXRlKCJyb3dzcGFuIiksTS5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxoLmhhcyhEKSYmIWwuZ2V0U2V0dGluZ3MoKS5yb3dIZWFkZXJzJiYoTS5zdHls''@;'; put 'put ''ZS5oZWlnaHQ9YCR7aC5nZXQoRCl9cHhgLGguZGVsZXRlKEQpKSx2b2lkKE0uc3R5bGUuZGlzcGxheT0iIik7Y29uc3R7cm93Om9lLGNvbDp2ZSxjb2xzcGFuOndlLHJvd3NwYW46RmV9PXRlLFtXZSxudF09Yy50cmFuc2xhdGVNZXJnZWRDZWxsVG9SZW5kZXJhYmxlKG9lLEZlLHZlLHdlKSxk''@;'; put 'put ''dD1jLmdldFNldHRpbmcoInZpcnR1YWxpemVkIik7aWYoMD09PXZlJiYhbC5nZXRTZXR0aW5ncygpLnJvd0hlYWRlcnMpe2NvbnN0IExyPWwuX2dldFJvd0hlaWdodEZyb21TZXR0aW5ncyhEKTtpZih2b2lkIDAhPT1Mcil7Y29uc3QgTXI9bC5zdHlsZXNIYW5kbGVyLmFyZUNlbGxzQm9yZGVy''@;'; put 'put ''Qm94KCk/MDoxO2guc2V0KEQsTHItTXIpfWVsc2UgaWYoQkEoKSl7Y29uc3QgZHI9aXZlKGwsb2UsRmUpO2guc2V0KEQsZHIvRmUpfX1jb25zdCB6dD1XZS1hLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoRCkrMSx5bj1udC1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoVSkr''@;'; put 'put ''MTtsZXQgZ249YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgob2UsMSksd249ZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodmUsMSk7aWYoZHQpe2NvbnN0IExyPWwudmlldy5nZXRBY3RpdmVPdmVybGF5TmFtZSgpO1sidG9wIiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRl''@;'; put 'put ''cyhMcil8fChnbj1NYXRoLm1heChnbixsLmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlUm93KCkpKSxbImlubGluZV9zdGFydCIsInRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIiwiYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRlcyhMcil8fCh3bj1NYXRoLm1heCh3bixsLmdldEZp''@;'; put 'put ''cnN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCkpKX1jb25zdCBSbj1NYXRoLm1pbihGZSx6dCksRHI9TWF0aC5taW4od2UseW4pO2duPT09RCYmd249PT1VPyhNLnNldEF0dHJpYnV0ZSgicm93c3BhbiIsUm4pLE0uc2V0QXR0cmlidXRlKCJjb2xzcGFuIixEcikpOihNLnJlbW92ZUF0dHJpYnV0''@;'; put 'put ''ZSgicm93c3BhbiIpLE0ucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksTS5zdHlsZS5kaXNwbGF5PSJub25lIil9fX0odGhpcykpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBYcmV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTUwfXN0YXRpYyBnZXQgREVG''@;'; put 'put ''QVVMVF9TRVRUSU5HUygpe3JldHVybntbSzZlXToiY2VsbHMiLHZpcnR1YWxpemVkOiExLGNlbGxzOltdfX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbWHJlXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMubWVyZ2VkQ2Vs''@;'; put 'put ''bHNDb2xsZWN0aW9uPW5ldyB6OHQodGhpcyksdGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucz1uZXcgWTh0KHRoaXMpLHRoaXMuc2VsZWN0aW9uQ2FsY3VsYXRpb25zPW5ldyBYOHQodGhpcyksdGhpcy5hZGRIb29rKCJhZnRlckluaXQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIFBsKEdsLGwsYzd0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVRyYW5zZm9ybUZvY3VzIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3''@;'; put 'put ''IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBQbChHbCxsLGQ3dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlUcmFuc2Zvcm1TdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxo''@;'; put 'put ''PTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gUGwoR2wsbCxoN3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5VHJhbnNmb3JtRW5kIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRb''@;'; put 'put ''aF09YXJndW1lbnRzW2hdO3JldHVybiBQbChHbCxsLGY3dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVTZWxlY3Rpb25IaWdobGlnaHRTZXQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1h''@;'; put 'put ''cmd1bWVudHNbaF07cmV0dXJuIFBsKEdsLGwscDd0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVNldFJhbmdlU3RhcnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07''@;'; put 'put ''cmV0dXJuIFBsKEdsLGwsY3ZlKS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVNldFJhbmdlU3RhcnRPbmx5IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBQ''@;'; put 'put ''bChHbCxsLGN2ZSkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVTZWxlY3Rpb25Gb2N1c1NldCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gUGwoR2wsbCxt''@;'; put 'put ''N3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb25Gb2N1c1NldCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gUGwoR2wsbCx2N3QpLmNhbGwo''@;'; put 'put ''bCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb25FbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIFBsKEdsLGwseTd0KS5jYWxsKGwsLi4uZCl9KSx0aGlz''@;'; put 'put ''LmFkZEhvb2soIm1vZGlmeUdldENlbGxDb29yZHMiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIFBsKEdsLGwsbHZlKS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1v''@;'; put 'put ''ZGlmeUdldENvb3Jkc0VsZW1lbnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIFBsKEdsLGwsbHZlKS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVySXNNdWx0''@;'; put 'put ''aXBsZVNlbGVjdGlvbiIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gUGwoR2wsbCx1N3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW5kZXJlciIsZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gbGMoc3ZlLGwpLmFmdGVyKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFy''@;'; put 'put ''Z3VtZW50c1toXTtyZXR1cm4gUGwoR2wsbCxnN3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDZWxsTWV0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1''@;'; put 'put ''cm4gUGwoR2wsbCxiN3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJWaWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTty''@;'; put 'put ''ZXR1cm4gUGwoR2wsbCxfN3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50''@;'; put 'put ''c1toXTtyZXR1cm4gUGwoR2wsbCx3N3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5QXV0b2ZpbGxSYW5nZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4g''@;'; put 'put ''UGwoR2wsbCxDN3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVDb2wiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIFBsKEdsLGwsUzd0KS5jYWxs''@;'; put 'put ''KGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlQ29sIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBQbChHbCxsLE03dCkuY2FsbChsLC4uLmQpfSksdGhpcy5h''@;'; put 'put ''ZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gUGwoR2wsbCx4N3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1v''@;'; put 'put ''dmVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIFBsKEdsLGwsRTd0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ2hhbmdlIixmdW5jdGlvbigpe2Zv''@;'; put 'put ''cih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBQbChHbCxsLFQ3dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVEcmF3Qm9yZGVycyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gUGwoR2wsbCxBN3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJEcmF3U2VsZWN0aW9uIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9''@;'; put 'put ''bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBQbChHbCxsLGs3dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBB''@;'; put 'put ''cnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gUGwoR2wsbCxEN3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQmVnaW5FZGl0aW5nIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDto''@;'; put 'put ''PGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBQbChHbCxsLEk3dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dIZWlnaHRCeU92ZXJsYXlOYW1lIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7''@;'; put 'put ''aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBQbChHbCxsLFI3dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVVbmRvU3RhY2tDaGFuZ2UiLChhLGQpPT57aWYoIk1lcmdlQ2VsbHMiPT09ZClyZXR1cm4hMX0pLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5l''@;'; put 'put ''bmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuY2xlYXJDb2xsZWN0aW9ucygpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMuaG90LnJlbmRlcigpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVu''@;'; put 'put ''YWJsZVBsdWdpbigpLHRoaXMuZ2VuZXJhdGVGcm9tU2V0dGluZ3MoKSxzdXBlci51cGRhdGVQbHVnaW4oKX1pZkNocm9tZUZvcmNlUmVwYWludCgpe2lmKCFLcSgpKXJldHVybjtjb25zdCBsPVtdO2xldCBhPVtdO3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzLmZvckVh''@;'; put 'put ''Y2goZD0+e2NvbnN0e3JvdzpoLHJvd3NwYW46Zn09ZDtmb3IobGV0IHY9aCsxO3Y8aCtmO3YrKylhLnB1c2godil9KSxhPVsuLi5uZXcgU2V0KGEpXSxhLmZvckVhY2goZD0+e2NvbnN0IGg9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChkKTt0''@;'; put 'put ''aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLmdldE92ZXJsYXlzKCEwKS5tYXAoZj0+Im1hc3RlciI9PT1mPy5uYW1lP2Y6Zi5jbG9uZS53dFRhYmxlKS5mb3JFYWNoKGY9Pntjb25zdCB2PWYuZ2V0Um93KGgpO3YmJih2LnN0eWxlLmJhY2tncm91bmQ9WkEodiwiYmFja2dyb3VuZENvbG9y''@;'; put 'put ''IikucmVwbGFjZSgiKSIsIiwgMC45OSkiKSxsLnB1c2godikpfSl9KSx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57bC5mb3JFYWNoKGQ9Pnt2YXIgaDtkLnN0eWxlLmJhY2tncm91bmQ9bnVsbD09PShoPVpBKGQsImJhY2tncm91bmRDb2xvciIpKXx8dm9pZCAwPT09aD92b2lkIDA6''@;'; put 'put ''aC5yZXBsYWNlKCIsIDAuOTkpIiwiKSIpfSl9LDEpfXZhbGlkYXRlU2V0dGluZyhsKXtyZXR1cm4hKCFsfHwocTQuY29udGFpbnNOZWdhdGl2ZVZhbHVlcyhsKT8ob3MocTQuTkVHQVRJVkVfVkFMVUVTX1dBUk5JTkcobCkpLDEpOnE0LmlzT3V0T2ZCb3VuZHMobCx0aGlzLmhvdC5jb3VudFJv''@;'; put 'put ''d3MoKSx0aGlzLmhvdC5jb3VudENvbHMoKSk/KG9zKHE0LklTX09VVF9PRl9CT1VORFNfV0FSTklORyhsKSksMSk6cTQuaXNTaW5nbGVDZWxsKGwpPyhvcyhxNC5JU19TSU5HTEVfQ0VMTChsKSksMSk6cTQuY29udGFpbnNaZXJvU3BhbihsKSYmKG9zKHE0LlpFUk9fU1BBTl9XQVJOSU5HKGwp''@;'; put 'put ''KSwxKSkpfWdlbmVyYXRlRnJvbVNldHRpbmdzKCl7Y29uc3QgbD10aGlzLmdldFNldHRpbmcoImNlbGxzIikuZmlsdGVyKGg9PnRoaXMudmFsaWRhdGVTZXR0aW5nKGgpKSxhPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmZpbHRlck92ZXJsYXBwaW5nTWVyZ2VDZWxscyhsKSxkPVtdO2Eu''@;'; put 'put ''Zm9yRWFjaChoPT57Y29uc3R7cm93OmYsY29sOnYscm93c3BhbjpNLGNvbHNwYW46RH09aCxVPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGYsdiksdGU9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZitNLTEsditELTEpLG9lPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UoVSxVLHRl''@;'; put 'put ''KTt0aGlzLm1lcmdlUmFuZ2Uob2UsITAsITApO2ZvcihsZXQgdmU9Zjt2ZTxmK007dmUrKylmb3IobGV0IHdlPXY7d2U8ditEO3dlKyspKHZlIT09Znx8d2UhPT12KSYmZC5wdXNoKFt2ZSx3ZSxudWxsXSl9KSwwIT09ZC5sZW5ndGgmJnRoaXMuaG90LnNldERhdGFBdENlbGwoZCx2b2lkIDAs''@;'; put 'put ''dm9pZCAwLHRoaXMucGx1Z2luTmFtZSl9Y2xlYXJDb2xsZWN0aW9ucygpe3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmNsZWFyKCl9Y2FuTWVyZ2VSYW5nZShsKXtyZXR1cm4hIShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdKXx8dGhp''@;'; put 'put ''cy52YWxpZGF0ZVNldHRpbmcobCl9bWVyZ2VTZWxlY3Rpb24oKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCFsKXJldHVybjtsLnNldERpcmVjdGlvbih0aGlz''@;'; put 'put ''LmhvdC5pc1J0bCgpPyJORS1TVyI6Ik5XLVNFIik7Y29uc3R7ZnJvbTphLHRvOmR9PWw7dGhpcy51bm1lcmdlUmFuZ2UobCwhMCksdGhpcy5tZXJnZVJhbmdlKGwpLHRoaXMuaG90LnNlbGVjdENlbGwoYS5yb3csYS5jb2wsZC5yb3csZC5jb2wsITEpfXVubWVyZ2VTZWxlY3Rpb24oKXtsZXQg''@;'; put 'put ''bD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCFsKXJldHVybjtjb25zdHtmcm9tOmEsdG86ZH09bDt0aGlzLnVubWVyZ2VSYW5nZShsLCEwKSx0aGlzLmhvdC5zZWxlY3RD''@;'; put 'put ''ZWxsKGEucm93LGEuY29sLGQucm93LGQuY29sLCExKX1tZXJnZVJhbmdlKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0sZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJd''@;'; put 'put ''O2NvbnN0IGg9bC5nZXRUb3BTdGFydENvcm5lcigpLGY9bC5nZXRCb3R0b21FbmRDb3JuZXIoKSx2PXtyb3c6aC5yb3csY29sOmguY29sLHJvd3NwYW46Zi5yb3ctaC5yb3crMSxjb2xzcGFuOmYuY29sLWguY29sKzF9LE09W107bGV0IEQ9bnVsbDtyZXR1cm4hIXRoaXMuY2FuTWVyZ2VSYW5n''@;'; put 'put ''ZSh2LGEpJiYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZU1lcmdlQ2VsbHMiLGwsYSksUWEoMCx2LnJvd3NwYW4tMSx0ZT0+e1FhKDAsdi5jb2xzcGFuLTEsb2U9PntsZXQgdmU9bnVsbDtNW3RlXXx8KE1bdGVdPVtdKSwwPT09dGUmJjA9PT1vZT92ZT10aGlzLmhvdC5nZXRTb3VyY2VEYXRh''@;'; put 'put ''QXRDZWxsKHRoaXMuaG90LnRvUGh5c2ljYWxSb3codi5yb3cpLHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4odi5jb2wpKTp0aGlzLmhvdC5zZXRDZWxsTWV0YSh2LnJvdyt0ZSx2LmNvbCtvZSwiaGlkZGVuIiwhMCksTVt0ZV1bb2VdPXZlfSl9KSx0aGlzLmhvdC5zZXRDZWxsTWV0YSh2LnJv''@;'; put 'put ''dyx2LmNvbCwic3Bhbm5lZCIsITApLCF0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5hZGQodixhKXx8KGQ/RD1bdi5yb3csdi5jb2wsTV06dGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkodi5yb3csdi5jb2wsTSx2b2lkIDAsdm9pZCAwLHRoaXMucGx1Z2luTmFtZSksYXx8dGhpcy5pZkNo''@;'; put 'put ''cm9tZUZvcmNlUmVwYWludCgpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck1lcmdlQ2VsbHMiLGwsdixhKSxEKSl9dW5tZXJnZVJhbmdlKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3QgZD10aGlzLm1lcmdlZENl''@;'; put 'put ''bGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZShsKTswIT09ZC5sZW5ndGgmJih0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5tZXJnZUNlbGxzIixsLGEpLEtuKGQsaD0+e3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLnJlbW92ZShoLnJvdyxoLmNvbCksUWEoMCxoLnJvd3NwYW4tMSxm''@;'; put 'put ''PT57UWEoMCxoLmNvbHNwYW4tMSx2PT57dGhpcy5ob3QucmVtb3ZlQ2VsbE1ldGEoaC5yb3crZixoLmNvbCt2LCJoaWRkZW4iKSx0aGlzLmhvdC5yZW1vdmVDZWxsTWV0YShoLnJvdytmLGguY29sK3YsImNvcHlhYmxlIil9KX0pLHRoaXMuaG90LnJlbW92ZUNlbGxNZXRhKGgucm93LGguY29s''@;'; put 'put ''LCJzcGFubmVkIil9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJVbm1lcmdlQ2VsbHMiLGwsYSksdGhpcy5ob3QucmVuZGVyKCkpfXRvZ2dsZU1lcmdlKGwpe2NvbnN0e2Zyb206YSx0bzpkfT1sLmNsb25lKCkubm9ybWFsaXplKCksaD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQo''@;'; put 'put ''YS5yb3csYS5jb2wpO2gucm93PT09YS5yb3cmJmguY29sPT09YS5jb2wmJmgucm93K2gucm93c3Bhbi0xPT09ZC5yb3cmJmguY29sK2guY29sc3Bhbi0xPT09ZC5jb2w/dGhpcy51bm1lcmdlUmFuZ2UobCk6dGhpcy5tZXJnZVNlbGVjdGlvbihsKX1tZXJnZShsLGEsZCxoKXtjb25zdCBmPXRo''@;'; put 'put ''aXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwsYSksdj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhkLGgpO3RoaXMubWVyZ2VSYW5nZSh0aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKGYsZix2KSl9dW5tZXJnZShsLGEsZCxoKXtjb25zdCBmPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRz''@;'; put 'put ''KGwsYSksdj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhkLGgpO3RoaXMudW5tZXJnZVJhbmdlKHRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UoZixmLHYpKX1yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRT''@;'; put 'put ''aG9ydGN1dCh7a2V5czpbWyJDb250cm9sIiwibSJdXSxjYWxsYmFjazooKT0+e2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2QmJiFkLmlzU2luZ2xlSGVhZGVyKCkmJih0aGlzLnRvZ2dsZU1lcmdlKGQpLHRoaXMuaG90LnJlbmRlcigpKX0scnVuT25seUlmOmQ9''@;'; put 'put ''PiFkLmFsdEtleSxncm91cDpvdmV9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAob3ZlKX1tb2RpZnlWaWV3cG9ydFJvd1N0YXJ0KGwsYSl7Y29uc3QgZD10aGlzLmhv''@;'; put 'put ''dC5yb3dJbmRleE1hcHBlcixoPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsLnN0YXJ0Um93KTtmb3IobGV0IGY9MDtmPGE7Zis9MSl7Y29uc3Qgdj10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoaCxmKTtpZihtbyh2KSl7Y29uc3QgTT1kLmdldFJlbmRlcmFibGVGcm9t''@;'; put 'put ''VmlzdWFsSW5kZXgoZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodi5yb3csMSkpO2lmKE08bC5zdGFydFJvdylyZXR1cm4gbC5zdGFydFJvdz1NLHZvaWQgdGhpcy5tb2RpZnlWaWV3cG9ydFJvd1N0YXJ0KGwsYSl9fX1tb2RpZnlWaWV3cG9ydFJvd0VuZChsLGEpe2NvbnN0IGQ9dGhpcy5o''@;'; put 'put ''b3Qucm93SW5kZXhNYXBwZXIsaD1kLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobC5lbmRSb3cpO2ZvcihsZXQgZj0wO2Y8YTtmKz0xKXtjb25zdCB2PXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChoLGYpO2lmKG1vKHYpKXtjb25zdCBEPWQuZ2V0UmVuZGVyYWJsZUZyb21W''@;'; put 'put ''aXN1YWxJbmRleChkLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh2LnJvdyt2LnJvd3NwYW4tMSwtMSkpO2lmKEQ+bC5lbmRSb3cpcmV0dXJuIGwuZW5kUm93PUQsdm9pZCB0aGlzLm1vZGlmeVZpZXdwb3J0Um93RW5kKGwsYSl9fX1tb2RpZnlWaWV3cG9ydENvbHVtblN0YXJ0KGwsYSl7Y29u''@;'; put 'put ''c3QgZD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixoPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsLnN0YXJ0Q29sdW1uKTtmb3IobGV0IGY9MDtmPGE7Zis9MSl7Y29uc3Qgdj10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoZixoKTtpZihtbyh2KSl7Y29uc3QgTT1k''@;'; put 'put ''LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodi5jb2wsMSkpO2lmKE08bC5zdGFydENvbHVtbilyZXR1cm4gbC5zdGFydENvbHVtbj1NLHZvaWQgdGhpcy5tb2RpZnlWaWV3cG9ydENvbHVtblN0YXJ0KGwsYSl9fX1tb2RpZnlWaWV3cG9y''@;'; put 'put ''dENvbHVtbkVuZChsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsaD1kLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobC5lbmRDb2x1bW4pO2ZvcihsZXQgZj0wO2Y8YTtmKz0xKXtjb25zdCB2PXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChmLGgpO2lm''@;'; put 'put ''KG1vKHYpKXtjb25zdCBEPWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChkLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh2LmNvbCt2LmNvbHNwYW4tMSwtMSkpO2lmKEQ+bC5lbmRDb2x1bW4pcmV0dXJuIGwuZW5kQ29sdW1uPUQsdm9pZCB0aGlzLm1vZGlmeVZpZXdwb3J0Q29sdW1u''@;'; put 'put ''RW5kKGwsYSl9fX10cmFuc2xhdGVNZXJnZWRDZWxsVG9SZW5kZXJhYmxlKGwsYSxkLGgpe2NvbnN0e3Jvd0luZGV4TWFwcGVyOmYsY29sdW1uSW5kZXhNYXBwZXI6dn09dGhpcy5ob3Q7bGV0IE0sRDtyZXR1cm4gTT0wPT09YT9mLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLDEpOmYuZ2V0''@;'; put 'put ''TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwrYS0xLC0xKSxEPTA9PT1oP3YuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQsMSk6di5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZCtoLTEsLTEpLFtsPj0wP2YuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChNKTpsLGQ+PTA/di5nZXRSZW5k''@;'; put 'put ''ZXJhYmxlRnJvbVZpc3VhbEluZGV4KEQpOmRdfX1mdW5jdGlvbiBjN3QoKXt0aGlzLmdlbmVyYXRlRnJvbVNldHRpbmdzKCksdGhpcy5ob3QucmVuZGVyKCl9ZnVuY3Rpb24gdTd0KGMpe2lmKGMpe2NvbnN0IGw9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHMsYT10aGlz''@;'; put 'put ''LmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksZD1hLmdldFRvcFN0YXJ0Q29ybmVyKCksaD1hLmdldEJvdHRvbUVuZENvcm5lcigpO2ZvcihsZXQgZj0wO2Y8bC5sZW5ndGg7Zis9MSlpZihkLnJvdz09PWxbZl0ucm93JiZkLmNvbD09PWxbZl0uY29sJiZoLnJvdz09PWxbZl0ucm93K2xb''@;'; put 'put ''Zl0ucm93c3Bhbi0xJiZoLmNvbD09PWxbZl0uY29sK2xbZl0uY29sc3Bhbi0xKXJldHVybiExfXJldHVybiBjfWZ1bmN0aW9uIGQ3dChjKXtsYyhRZix0aGlzKS5yb3c9Yy5yb3csbGMoUWYsdGhpcykuY29sPWMuY29sfWZ1bmN0aW9uIGg3dChjKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVj''@;'; put 'put ''dGVkUmFuZ2VBY3RpdmUoKSx7aGlnaGxpZ2h0OmF9PWwse2NvbHVtbkluZGV4TWFwcGVyOmQscm93SW5kZXhNYXBwZXI6aH09dGhpcy5ob3Q7bGMoSmYsdGhpcykmJihudWxsIT09aC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGxjKEpmLHRoaXMpLnJvdykmJihhLnJvdz1sYyhKZix0''@;'; put 'put ''aGlzKS5yb3cpLG51bGwhPT1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgobGMoSmYsdGhpcykuY29sKSYmKGEuY29sPWxjKEpmLHRoaXMpLmNvbCksUkQoSmYsdGhpcyxudWxsKSk7Y29uc3QgZj10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoYS5yb3csYS5jb2wpO2lmKCFm''@;'; put 'put ''KXJldHVybjtjb25zdCB2PWYuY29sLE09Zi5jb2wrZi5jb2xzcGFuLTE7aWYoYy5jb2w8MCl7Y29uc3Qgb2U9ZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYS5jb2w+PXYmJmEuY29sPD1NP3YtMTpNLC0xKTtjLmNvbD1udWxsPT09b2U/LXRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxl''@;'; put 'put ''Q29sdW1uc0luUmFuZ2UoMCxhLmNvbCk6LU1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2Uob2UsYS5jb2wpLTEsMSl9ZWxzZSBpZihjLmNvbD4wKXtjb25zdCBvZT1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhLmNvbD49diYmYS5jb2w8PU0/''@;'; put 'put ''TSsxOnYsMSk7Yy5jb2w9bnVsbD09PW9lP3RoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoYS5jb2wsdGhpcy5ob3QuY291bnRDb2xzKCkpOk1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoYS5jb2wsb2UpLTEsMSl9''@;'; put 'put ''Y29uc3QgRD1mLnJvdyxVPWYucm93K2Yucm93c3Bhbi0xO2lmKGMucm93PDApe2NvbnN0IG9lPWguZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGEucm93Pj1EJiZhLnJvdzw9VT9ELTE6VSwtMSk7Yy5yb3c9bnVsbD09PW9lPy10aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZVJvd3NJblJh''@;'; put 'put ''bmdlKDAsYS5yb3cpOi1NYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZVJvd3NJblJhbmdlKG9lLGEucm93KS0xLDEpfWVsc2UgaWYoYy5yb3c+MCl7Y29uc3Qgb2U9aC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYS5yb3c+PUQmJmEucm93PD1VP1UrMTpELDEpO2Mucm93''@;'; put 'put ''PW51bGw9PT1vZT90aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZVJvd3NJblJhbmdlKGEucm93LHRoaXMuaG90LmNvdW50Um93cygpKTpNYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZVJvd3NJblJhbmdlKGEucm93LG9lKS0xLDEpfX1mdW5jdGlvbiBmN3QoYyl7Y29u''@;'; put 'put ''c3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksYT1sLmNsb25lKCkse3RvOmR9PWwse2NvbHVtbkluZGV4TWFwcGVyOmgscm93SW5kZXhNYXBwZXI6Zn09dGhpcy5ob3Qsdj0oTSxEKT0+e2EuZXhwYW5kKHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKE0sRCkpO2Zvcihs''@;'; put 'put ''ZXQgVT0wO1U8dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHMubGVuZ3RoO1UrPTEpYS5leHBhbmRCeVJhbmdlKHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzW1VdLmdldFJhbmdlKCkpfTtpZihjLmNvbDwwKXtsZXQgTT10aGlzLm1lcmdlZENlbGxz''@;'; put 'put ''Q29sbGVjdGlvbi5nZXRTdGFydE1vc3RDb2x1bW5JbmRleChsLGQuY29sKStjLmNvbDt2KGQucm93LE0pLCJFLVciPT09bC5nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCkmJiJFLVciPT09YS5nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCkmJihNPWEuZ2V0VG9wU3RhcnRDb3JuZXIoKS5jb2wpO2Nv''@;'; put 'put ''bnN0IEQ9aC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoTSwxKTtudWxsIT09RCYmKGMuY29sPS1NYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKEQsZC5jb2wpLTEsMSkpfWVsc2UgaWYoYy5jb2w+MCl7bGV0IE09dGhpcy5tZXJnZWRDZWxsc0Nv''@;'; put 'put ''bGxlY3Rpb24uZ2V0RW5kTW9zdENvbHVtbkluZGV4KGwsZC5jb2wpK2MuY29sO3YoZC5yb3csTSksIlctRSI9PT1sLmdldEhvcml6b250YWxEaXJlY3Rpb24oKSYmIlctRSI9PT1hLmdldEhvcml6b250YWxEaXJlY3Rpb24oKSYmKE09YS5nZXRCb3R0b21FbmRDb3JuZXIoKS5jb2wpO2NvbnN0''@;'; put 'put ''IEQ9aC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoTSwtMSk7bnVsbCE9PUQmJihjLmNvbD1NYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKGQuY29sLEQpLTEsMSkpfWlmKGMucm93PDApe2xldCBNPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9u''@;'; put 'put ''LmdldFRvcE1vc3RSb3dJbmRleChsLGQucm93KStjLnJvdzt2KE0sZC5jb2wpLCJTLU4iPT09bC5nZXRWZXJ0aWNhbERpcmVjdGlvbigpJiYiUy1OIj09PWEuZ2V0VmVydGljYWxEaXJlY3Rpb24oKSYmKE09YS5nZXRUb3BTdGFydENvcm5lcigpLnJvdyk7Y29uc3QgRD1mLmdldE5lYXJlc3RO''@;'; put 'put ''b3RIaWRkZW5JbmRleChNLDEpO251bGwhPT1EJiYoYy5yb3c9LU1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoRCxkLnJvdyktMSwxKSl9ZWxzZSBpZihjLnJvdz4wKXtsZXQgTT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRCb3R0b21Nb3N0''@;'; put 'put ''Um93SW5kZXgobCxkLnJvdykrYy5yb3c7dihNLGQuY29sKSwiTi1TIj09PWwuZ2V0VmVydGljYWxEaXJlY3Rpb24oKSYmIk4tUyI9PT1hLmdldFZlcnRpY2FsRGlyZWN0aW9uKCkmJihNPWEuZ2V0Qm90dG9tU3RhcnRDb3JuZXIoKS5yb3cpO2NvbnN0IEQ9Zi5nZXROZWFyZXN0Tm90SGlkZGVu''@;'; put 'put ''SW5kZXgoTSwtMSk7bnVsbCE9PUQmJihjLnJvdz1NYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZVJvd3NJblJhbmdlKGQucm93LEQpLTEsMSkpfX1mdW5jdGlvbiBwN3QoKXtjb25zdCBjPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkse2hpZ2hsaWdodDpsfT1j''@;'; put 'put ''O2lmKHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKXJldHVybiB2b2lkIFJEKEpmLHRoaXMsbC5jbG9uZSgpKTtmb3IobGV0IGQ9MDtkPHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0''@;'; put 'put ''aW9uLm1lcmdlZENlbGxzLmxlbmd0aDtkKz0xKWMuZXhwYW5kQnlSYW5nZSh0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxsc1tkXS5nZXRSYW5nZSgpLCExKTtmb3IobGV0IGQ9MDtkPHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzLmxlbmd0aDtkKz0x''@;'; put 'put ''KWMuZXhwYW5kQnlSYW5nZSh0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxsc1tkXS5nZXRSYW5nZSgpLCExKTtjb25zdCBhPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChsLnJvdyxsLmNvbCk7UkQoSmYsdGhpcyxsLmNsb25lKCkpLGEmJmwuYXNzaWduKGEpfWZ1''@;'; put 'put ''bmN0aW9uIGx2ZShjLGwsYSxkKXtpZihjPDB8fGw8MClyZXR1cm47Y29uc3QgaD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoYyxsKTtpZighaClyZXR1cm47Y29uc3R7cm93OmYsY29sOnYsY29sc3BhbjpNLHJvd3NwYW46RH09aCxVPWYsdGU9dixvZT1mK0QtMSx2ZT12K00tMTtp''@;'; put 'put ''ZigicmVuZGVyIj09PWQmJnRoaXMuZ2V0U2V0dGluZygidmlydHVhbGl6ZWQiKSl7Y29uc3Qgd2U9dGhpcy5ob3Qudmlldy5nZXRBY3RpdmVPdmVybGF5TmFtZSgpLEZlPVsidG9wIiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRlcyh3ZSk/MDp0aGlzLmhvdC5nZXRGaXJzdFJl''@;'; put 'put ''bmRlcmVkVmlzaWJsZVJvdygpLFdlPVsiaW5saW5lX3N0YXJ0IiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiLCJib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKHdlKT8wOnRoaXMuaG90LmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCk7cmV0dXJuW2dzKEZlLFUs''@;'; put 'put ''b2UpLGdzKFdlLHRlLHZlKSxncyh0aGlzLmhvdC5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlUm93KCksVSxvZSksZ3ModGhpcy5ob3QuZ2V0TGFzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpLHRlLHZlKV19cmV0dXJuW1UsdGUsb2UsdmVdfWZ1bmN0aW9uIGc3dChjKXtjLml0ZW1zLnB1c2goe25h''@;'; put 'put ''bWU6Ii0tLS0tLS0tLSJ9LGZ1bmN0aW9uIHE4dChjKXtyZXR1cm57a2V5OiJtZXJnZUNlbGxzIixuYW1lKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkQWN0aXZlKCk7aWYobCl7Y29uc3QgYT1jLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobFswXSxsWzFdKTtpZihhLnJvdz09PWxbMF0m''@;'; put 'put ''JmEuY29sPT09bFsxXSYmYS5yb3crYS5yb3dzcGFuLTE9PT1sWzJdJiZhLmNvbCthLmNvbHNwYW4tMT09PWxbM10pcmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShIUSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShGUSl9LGNhbGxiYWNrKCl7Y29uc3QgbD10aGlzLmdl''@;'; put 'put ''dFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZighbClyZXR1cm47bC5zZXREaXJlY3Rpb24odGhpcy5pc1J0bCgpPyJORS1TVyI6Ik5XLVNFIik7Y29uc3R7ZnJvbTphLHRvOmR9PWw7Yy50b2dnbGVNZXJnZShsKSx0aGlzLnNlbGVjdENlbGwoYS5yb3csYS5jb2wsZC5yb3csZC5jb2wsITEpfSxk''@;'; put 'put ''aXNhYmxlZCgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZEFjdGl2ZSgpO3JldHVybiFsfHxxNC5pc1NpbmdsZUNlbGwoe3JvdzpsWzBdLGNvbDpsWzFdLHJvd3NwYW46bFsyXS1sWzBdKzEsY29sc3BhbjpsWzNdLWxbMV0rMX0pfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIo''@;'; put 'put ''KX0saGlkZGVuOiExfX0odGhpcykpfWZ1bmN0aW9uIGN2ZSgpe1JEKEpmLHRoaXMsbnVsbCl9ZnVuY3Rpb24gbTd0KCl7aWYobGMoSmYsdGhpcykuaXNDZWxsKCkpcmV0dXJuO2NvbnN0IGM9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLGw9Yy5nZXRWZXJ0aWNhbERpcmVjdGlv''@;'; put 'put ''bigpLGE9Yy5nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCksZD1sYyhKZix0aGlzKS5jbG9uZSgpLm5vcm1hbGl6ZSgpO2xjKG5nLHRoaXMpLnNldEFjdGl2ZU5vZGUoZC5yb3csZC5jb2wpLGxjKFFmLHRoaXMpLnJvdz4wfHxsYyhRZix0aGlzKS5jb2w+MD9sYyhuZyx0aGlzKS5zZXRQcmV2Tm9k''@;'; put 'put ''ZUFzQWN0aXZlKCk6KCJFLVciPT09YSYmbGMoUWYsdGhpcykuY29sPDB8fCJTLU4iPT09bCYmbGMoUWYsdGhpcykucm93PDApJiZsYyhuZyx0aGlzKS5zZXROZXh0Tm9kZUFzQWN0aXZlKCl9ZnVuY3Rpb24gdjd0KGMsbCl7Y29uc3R7Y29sdW1uSW5kZXhNYXBwZXI6YSxyb3dJbmRleE1hcHBl''@;'; put 'put ''cjpkfT10aGlzLmhvdDtsZXQgaD10aGlzLmhvdC5nZXRBY3RpdmVTZWxlY3Rpb25MYXllckluZGV4KCksZj1udWxsLHY9bnVsbDtpZihsYyhRZix0aGlzKS5jb2w8MCl7Y29uc3R7cm93RW5kOk0sY29sRW5kOkQsc2VsZWN0aW9uTGF5ZXI6VX09bGMobmcsdGhpcykuZ2V0UHJldkhvcml6b250''@;'; put 'put ''YWxOb2RlKCk7dj1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChELC0xKSxmPWQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE0sLTEpLGg9VX1lbHNlIGlmKGxjKFFmLHRoaXMpLmNvbD4wKXtjb25zdHtyb3dTdGFydDpNLGNvbFN0YXJ0OkQsc2VsZWN0aW9uTGF5ZXI6VX09bGMobmcsdGhp''@;'; put 'put ''cykuZ2V0TmV4dEhvcml6b250YWxOb2RlKCk7dj1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChELDEpLGY9ZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoTSwxKSxoPVV9ZWxzZSBpZihsYyhRZix0aGlzKS5yb3c8MCl7Y29uc3R7cm93RW5kOk0sY29sRW5kOkQsc2VsZWN0aW9uTGF5ZXI6''@;'; put 'put ''VX09bGMobmcsdGhpcykuZ2V0UHJldlZlcnRpY2FsTm9kZSgpO3Y9YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoRCwtMSksZj1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChNLC0xKSxoPVV9ZWxzZSBpZihsYyhRZix0aGlzKS5yb3c+MCl7Y29uc3R7cm93U3RhcnQ6TSxjb2xTdGFydDpE''@;'; put 'put ''LHNlbGVjdGlvbkxheWVyOlV9PWxjKG5nLHRoaXMpLmdldE5leHRWZXJ0aWNhbE5vZGUoKTt2PWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KEQsMSksZj1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChNLDEpLGg9VX1pZihudWxsIT09Znx8bnVsbCE9PXYpe3RoaXMuaG90LnNlbGVjdGlv''@;'; put 'put ''bi5zZXRBY3RpdmVTZWxlY3Rpb25MYXllckluZGV4KGgpO2NvbnN0IE09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLEQ9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZix2KSxVPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChELnJvdyxELmNvbCksdGU9dGhpcy5o''@;'; put 'put ''b3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGb2N1cygpO2M9RC5yb3csbD1ELmNvbCxNLmhpZ2hsaWdodC5hc3NpZ24oVT97cm93OnRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChVLnJvdywxKSxjb2w6dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIu''@;'; put 'put ''Z2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KFUuY29sLDEpfTpEKSx0ZS5jbGVhcigpLHRlLmFkZChEKS5jb21taXQoKX1sYyhuZyx0aGlzKS5zZXRBY3RpdmVOb2RlKGMsbCxoKSxSRChRZix0aGlzLHtyb3c6MCxjb2w6MH0pfWZ1bmN0aW9uIHk3dCgpe2xjKG5nLHRoaXMpLmJ1aWxkRm9jdXNP''@;'; put 'put ''cmRlcih0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlKCkpfWZ1bmN0aW9uIGI3dChjLGwsYSl7Y29uc3QgZD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoYyxsKTtkJiYoZC5yb3chPT1jfHxkLmNvbCE9PWw/YS5jb3B5YWJsZT0hMTooYS5yb3dzcGFuPWQucm93c3BhbixhLmNvbHNw''@;'; put 'put ''YW49ZC5jb2xzcGFuKSl9ZnVuY3Rpb24gXzd0KGMpe2lmKHRoaXMuZ2V0U2V0dGluZygidmlydHVhbGl6ZWQiKSlyZXR1cm47Y29uc3QgbD10aGlzLmhvdC5jb3VudENvbHMoKTt0aGlzLm1vZGlmeVZpZXdwb3J0Um93U3RhcnQoYyxsKSx0aGlzLm1vZGlmeVZpZXdwb3J0Um93RW5kKGMsbCl9''@;'; put 'put ''ZnVuY3Rpb24gdzd0KGMpe2lmKHRoaXMuZ2V0U2V0dGluZygidmlydHVhbGl6ZWQiKSlyZXR1cm47Y29uc3QgbD10aGlzLmhvdC5jb3VudFJvd3MoKTt0aGlzLm1vZGlmeVZpZXdwb3J0Q29sdW1uU3RhcnQoYyxsKSx0aGlzLm1vZGlmeVZpZXdwb3J0Q29sdW1uRW5kKGMsbCl9ZnVuY3Rpb24g''@;'; put 'put ''Qzd0KGMsbCl7Y29uc3QgYT10aGlzLmF1dG9maWxsQ2FsY3VsYXRpb25zLmdldERpcmVjdGlvbihsLGMpO2lmKHRoaXMuYXV0b2ZpbGxDYWxjdWxhdGlvbnMuZHJhZ0FyZWFPdmVybGFwc0NvbGxlY3Rpb25zKGwsYyxhKSlyZXR1cm4gbDtjb25zdCBkPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29v''@;'; put 'put ''cmRzKGxbMF0sbFsxXSksaD10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsWzJdLGxbM10pLGY9dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShkLGQsaCksdj10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZShmKTtyZXR1cm4gMD09PXYubGVuZ3RoP2M6dGhpcy5h''@;'; put 'put ''dXRvZmlsbENhbGN1bGF0aW9ucy5zbmFwRHJhZ0FyZWEobCxjLGEsdil9ZnVuY3Rpb24gUzd0KGMsbCl7dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uc2hpZnRDb2xsZWN0aW9ucygicmlnaHQiLGMsbCl9ZnVuY3Rpb24gTTd0KGMsbCl7dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uc2hp''@;'; put 'put ''ZnRDb2xsZWN0aW9ucygibGVmdCIsYyxsKX1mdW5jdGlvbiB4N3QoYyxsLGEpeyJhdXRvIiE9PWEmJnRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLnNoaWZ0Q29sbGVjdGlvbnMoImRvd24iLGMsbCl9ZnVuY3Rpb24gRTd0KGMsbCl7dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uc2hpZnRD''@;'; put 'put ''b2xsZWN0aW9ucygidXAiLGMsbCl9ZnVuY3Rpb24gVDd0KGMsbCl7IkF1dG9maWxsLmZpbGwiPT09bCYmdGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucy5yZWNyZWF0ZUFmdGVyRGF0YVBvcHVsYXRpb24oYyl9ZnVuY3Rpb24gQTd0KGMsbCl7aWYobCYmImFyZWEiPT09bCl7Y29uc3QgYT10aGlz''@;'; put 'put ''LmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7S24odGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0V2l0aGluUmFuZ2UoYSksaD0+e2EuZ2V0Qm90dG9tRW5kQ29ybmVyKCkucm93PT09aC5nZXRMYXN0Um93KCkmJmEuZ2V0Qm90dG9tRW5kQ29ybmVyKCkuY29sPT09aC5nZXRMYXN0''@;'; put 'put ''Q29sdW1uKCkmJihjWzJdPWgucm93LGNbM109aC5jb2wpfSl9fWZ1bmN0aW9uIGs3dChjLGwsYSxkKXtpZihhKXJldHVybiB0aGlzLnNlbGVjdGlvbkNhbGN1bGF0aW9ucy5nZXRTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWUoYyxsLGEsZCl9ZnVuY3Rpb24gRDd0KCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''c2VsZWN0aW9uQ2FsY3VsYXRpb25zLmdldFNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZVRvUmVtb3ZlKCl9ZnVuY3Rpb24gSTd0KGMsbCxhLGQpe2lmKCEoZCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQpKXJldHVybjtjb25zdCBoPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSxm''@;'; put 'put ''PXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldEJ5UmFuZ2UoaCk7aWYoIWYpcmV0dXJuO2NvbnN0IHY9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZi5yb3csZi5jb2wpLE09dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZi5yb3crZi5yb3dzcGFuLTEsZi5jb2wrZi5jb2xzcGFu''@;'; put 'put ''LTEpO3JldHVybiAwPT09dGhpcy5ob3Quc2VsZWN0aW9uLmdldExheWVyTGV2ZWwoKSYmaC5pc0VxdWFsKHRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2Uodix2LE0pKX1mdW5jdGlvbiBSN3QoYyxsLGEpe2lmKHRoaXMuaG90LmdldFNldHRpbmdzKCkucm93SGVhZGVyc3x8ImJvdHRvbSI9PT1h''@;'; put 'put ''fHwiYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIiPT09YSlyZXR1cm4gYztsZXQgZCxoO2lmKCJtYXN0ZXIiPT09YSlkPXRoaXMuaG90LmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCksaD10aGlzLmhvdC5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCk7ZWxzZXtjb25zdCB2''@;'; put 'put ''ZT10aGlzLmhvdC52aWV3LmdldE92ZXJsYXlCeU5hbWUoYSk7ZD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHZlLmNsb25lLnd0VGFibGUuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpKSxoPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVy''@;'; put 'put ''LmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodmUuY2xvbmUud3RUYWJsZS5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKSl9aWYoIXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChsLGQpKXJldHVybiBjO2NvbnN0IHY9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxkKSxNPXRo''@;'; put 'put ''aXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwsaCksRD10aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKHYsdixNKSxVPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFdpdGhpblJhbmdlKEQsITApLHRlPVUucmVkdWNlKCh2ZSx3ZSk9PntsZXR7cm93c3BhbjpGZX09d2U7cmV0dXJuIE1h''@;'; put 'put ''dGgubWF4KHZlLEZlKX0sMSk7bGV0IG9lPTA7cmV0dXJuIFUubGVuZ3RoPjEmJlVbMF0ucm93c3Bhbjx0ZSYmKG9lPXRlLVVbMF0ucm93c3BhbiksVS5mb3JFYWNoKHZlPT57bGV0e3Jvd3NwYW46d2V9PXZlLEZlPTA7RmU9InRvcCI9PT1hfHwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiPT09''@;'; put 'put ''YT9NYXRoLm1pbih0ZSx0aGlzLmhvdC52aWV3LmNvdW50Tm90SGlkZGVuRml4ZWRSb3dzVG9wKCktbCk6d2Utb2UsYz1NYXRoLm1heChjPz8wLGl2ZSh0aGlzLmhvdCxsLEZlKSl9KSxjfWNvbnN0IGlqPSJtdWx0aUNvbHVtblNvcnRpbmciLGR2ZT1pajtTOGUoaWosZnVuY3Rpb24gTDd0KGMs''@;'; put 'put ''bCl7cmV0dXJuIGZ1bmN0aW9uKGEsZCl7Y29uc3RbLC4uLmhdPWEsWywuLi5mXT1kO3JldHVybiBmdW5jdGlvbiB2KE0pe2NvbnN0IEQ9Y1tNXSxVPWxbTV0sdGU9aFtNXSxvZT1mW01dLHZlPVUubXVsdGlDb2x1bW5Tb3J0aW5nLEZlPSh2ZS5jb21wYXJlRnVuY3Rpb25GYWN0b3J5P3ZlLmNv''@;'; put 'put ''bXBhcmVGdW5jdGlvbkZhY3Rvcnk6TThlKFUudHlwZSkpKEQsVSx2ZSkodGUsb2UpO2lmKEZlPT09QjQpe2NvbnN0IFdlPU0rMTtpZih0eXBlb2YgbFtXZV08InUiKXJldHVybiB2KFdlKX1yZXR1cm4gRmV9KDApfX0pO2NsYXNzIEI3dCBleHRlbmRzIFA4ZXtjb25zdHJ1Y3Rvcigpe3N1cGVy''@;'; put 'put ''KC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gRjd0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBIN3QoYyl7dmFyIGw9ZnVuY3Rpb24gTjd0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFy''@;'; put 'put ''IGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShj''@;'; put 'put ''LCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywicGx1Z2luS2V5Iixpail9c3Rh''@;'; put 'put ''dGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIGlqfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDE3MH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbdGhpcy5wbHVnaW5LZXldfWVuYWJsZVBsdWdpbigpe3N1cGVyLmVuYWJsZVBsdWdpbigp''@;'; put 'put ''fWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCl9cmVnaXN0ZXJTaG9ydGN1dHMoKXtzdXBlci5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dCh7a2V5czpbWyJTaGlmdCIsIkVu''@;'; put 'put ''dGVyIl1dLGNhbGxiYWNrOigpPT57Y29uc3R7aGlnaGxpZ2h0Omx9PXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtyZXR1cm4tMT09PWwucm93JiZsLmNvbD49MCYmdGhpcy5zb3J0KHRoaXMuZ2V0TmV4dFNvcnRDb25maWcobC5jb2wsTFYpKSwhMX0scnVuT25seUlmOigpPT57''@;'; put 'put ''dmFyIGwsYTtjb25zdCBkPW51bGw9PT0obD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmhpZ2hsaWdodDtyZXR1cm4gZCYmKG51bGw9PT0oYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkpfHx2b2lkIDA9PT1hP3ZvaWQg''@;'; put 'put ''MDphLmlzU2luZ2xlKCkpJiZ0aGlzLmhvdC5zZWxlY3Rpb24uaXNDZWxsVmlzaWJsZShkKSYmZC5pc0hlYWRlcigpfSxyZWxhdGl2ZVRvR3JvdXA6TjYscG9zaXRpb246ImJlZm9yZSIsZ3JvdXA6ZHZlfSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3N1cGVyLnVucmVnaXN0ZXJTaG9ydGN1dHMo''@;'; put 'put ''KSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChkdmUpfXNvcnQobCl7c3VwZXIuc29ydChsKX1jbGVhclNvcnQoKXtzdXBlci5jbGVhclNvcnQoKX1pc1NvcnRlZCgpe3JldHVybiBzdXBlci5pc1NvcnRlZCgp''@;'; put 'put ''fWdldFNvcnRDb25maWcobCl7cmV0dXJuIHN1cGVyLmdldFNvcnRDb25maWcobCl9c2V0U29ydENvbmZpZyhsKXtzdXBlci5zZXRTb3J0Q29uZmlnKGwpfWdldE5vcm1hbGl6ZWRTb3J0Q29uZmlncygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2Fy''@;'; put 'put ''Z3VtZW50c1swXTpbXTtyZXR1cm4gQXJyYXkuaXNBcnJheShsKT9sOltsXX11cGRhdGVIZWFkZXJDbGFzc2VzKGwpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGE+MT9hLTE6MCksaD0xO2g8YTtoKyspZFtoLTFdPWFyZ3VtZW50c1toXTtzdXBlci51cGRhdGVIZWFk''@;'; put 'put ''ZXJDbGFzc2VzKGwsLi4uZCksVmEobCxmdW5jdGlvbiBQN3QoYyl7Y29uc3QgbD1jLmNsYXNzTmFtZS5zcGxpdCgiICIpLGE9bmV3IFJlZ0V4cCgiXnNvcnQtWzAtOV17MSwyfSQiKTtyZXR1cm4gbC5maWx0ZXIoZD0+YS50ZXN0KGQpKX0obCkpLCExIT09dGhpcy5lbmFibGVkJiZpaShsLGZ1''@;'; put 'put ''bmN0aW9uIE83dChjLGwsYSl7Y29uc3QgZD1bXTtyZXR1cm4hMT09PWF8fGMuaXNDb2x1bW5Tb3J0ZWQobCkmJmMuZ2V0TnVtYmVyT2ZTb3J0ZWRDb2x1bW5zKCk+MSYmZC5wdXNoKGBzb3J0LSR7Yy5nZXRJbmRleE9mQ29sdW1uSW5Tb3J0UXVldWUobCkrMX1gKSxkfSguLi5kKSl9b25BZnRl''@;'; put 'put ''ck9uQ2VsbE1vdXNlRG93bihsLGEpeyExIT09Z25lKGEucm93LGEuY29sLGwpJiZ0aGlzLndhc0NsaWNrYWJsZUhlYWRlckNsaWNrZWQobCxhLmNvbCkmJih0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCk/KHRoaXMuaG90LmRlc2VsZWN0Q2VsbCgpLHRoaXMu''@;'; put 'put ''aG90LnNlbGVjdENvbHVtbnMoYS5jb2wpLHRoaXMuc29ydCh0aGlzLmdldE5leHRTb3J0Q29uZmlnKGEuY29sLExWKSkpOnRoaXMuc29ydCh0aGlzLmdldENvbHVtbk5leHRDb25maWcoYS5jb2wpKSl9fWZ1bmN0aW9uIGh2ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gajd0KGMpe3ZhciBs''@;'; put 'put ''PWZ1bmN0aW9uIHo3dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgVzd0IGV4dGVuZHMgTXN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGh2ZSh0aGlzLCJkcmFnZ2VkIixbXSksaHZlKHRoaXMsImxh''@;'; put 'put ''c3RTZXRDZWxsIixudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4ibXVsdGlwbGVTZWxlY3Rpb25IYW5kbGVzIn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxNjB9aXNFbmFibGVkKCl7cmV0dXJuIFgzKCl9ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVk''@;'; put 'put ''fHwodGhpcy5yZWdpc3Rlckxpc3RlbmVycygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1yZWdpc3Rlckxpc3RlbmVycygpe2NvbnN0IGw9dGhpcyx7cm9vdEVsZW1lbnQ6YX09dGhpcy5ob3Q7ZnVuY3Rpb24gZChoKXtpZigxPT09bC5kcmFnZ2VkLmxlbmd0aClyZXR1cm4gbC5kcmFnZ2VkLnNw''@;'; put 'put ''bGljZSgwLGwuZHJhZ2dlZC5sZW5ndGgpLCEwO2NvbnN0IGY9bC5kcmFnZ2VkLmluZGV4T2YoaCk7aWYoLTE9PT1mKXJldHVybiExOzA9PT1mP2wuZHJhZ2dlZD1sLmRyYWdnZWQuc2xpY2UoMCwxKToxPT09ZiYmKGwuZHJhZ2dlZD1sLmRyYWdnZWQuc2xpY2UoLTEpKX10aGlzLmV2ZW50TWFu''@;'; put 'put ''YWdlci5hZGRFdmVudExpc3RlbmVyKGEsInRvdWNoc3RhcnQiLGg9PntsZXQgZjtyZXR1cm4gQ28oaC50YXJnZXQsInRvcFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIik/KGY9bC5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLGwuZHJhZ2dlZC5wdXNoKCJ0b3AiKSxsLnRvdWNoU3RhcnRS''@;'; put 'put ''YW5nZT17d2lkdGg6Zi5nZXRXaWR0aCgpLGhlaWdodDpmLmdldEhlaWdodCgpLGRpcmVjdGlvbjpmLmdldERpcmVjdGlvbigpfSxoLnByZXZlbnREZWZhdWx0KCksITEpOkNvKGgudGFyZ2V0LCJib3R0b21TZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSIpPyhmPWwuaG90LmdldFNlbGVjdGVkUmFu''@;'; put 'put ''Z2VBY3RpdmUoKSxsLmRyYWdnZWQucHVzaCgiYm90dG9tIiksbC50b3VjaFN0YXJ0UmFuZ2U9e3dpZHRoOmYuZ2V0V2lkdGgoKSxoZWlnaHQ6Zi5nZXRIZWlnaHQoKSxkaXJlY3Rpb246Zi5nZXREaXJlY3Rpb24oKX0saC5wcmV2ZW50RGVmYXVsdCgpLCExKTp2b2lkIDB9KSx0aGlzLmV2ZW50''@;'; put 'put ''TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsInRvdWNoZW5kIixoPT5DbyhoLnRhcmdldCwidG9wU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEiKT8oZC5jYWxsKGwsInRvcCIpLGwudG91Y2hTdGFydFJhbmdlPXZvaWQgMCxoLnByZXZlbnREZWZhdWx0KCksITEpOkNvKGgudGFyZ2V0LCJib3R0''@;'; put 'put ''b21TZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSIpPyhkLmNhbGwobCwiYm90dG9tIiksbC50b3VjaFN0YXJ0UmFuZ2U9dm9pZCAwLGgucHJldmVudERlZmF1bHQoKSwhMSk6dm9pZCAwKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsInRvdWNobW92ZSIsaD0+e2NvbnN0e3Jv''@;'; put 'put ''b3REb2N1bWVudDpmfT10aGlzLmhvdDtsZXQgdixNLEQsVSx0ZSxvZTtpZigwPT09bC5kcmFnZ2VkLmxlbmd0aClyZXR1cm47Y29uc3QgdmU9Zi5lbGVtZW50RnJvbVBvaW50KGgudG91Y2hlc1swXS5jbGllbnRYLGgudG91Y2hlc1swXS5jbGllbnRZKTshdmV8fHZlPT09bC5sYXN0U2V0Q2Vs''@;'; put 'put ''bHx8KCgiVEQiPT09dmUubm9kZU5hbWV8fCJUSCI9PT12ZS5ub2RlTmFtZSkmJih2PWwuaG90LmdldENvb3Jkcyh2ZSksLTE9PT12LmNvbCYmKHYuY29sPTApLE09bC5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLEQ9TS5nZXRXaWR0aCgpLFU9TS5nZXRIZWlnaHQoKSx0ZT1NLmdldERp''@;'; put 'put ''cmVjdGlvbigpLDE9PT1EJiYxPT09VSYmbC5ob3Quc2VsZWN0aW9uLnNldFJhbmdlRW5kKHYpLG9lPWwuZ2V0Q3VycmVudFJhbmdlQ29vcmRzKE0sdixsLnRvdWNoU3RhcnRSYW5nZS5kaXJlY3Rpb24sdGUsbC5kcmFnZ2VkWzBdKSxudWxsIT09b2Uuc3RhcnQmJmwuaG90LnNlbGVjdGlvbi5z''@;'; put 'put ''ZXRSYW5nZVN0YXJ0KG9lLnN0YXJ0KSxsLmhvdC5zZWxlY3Rpb24uc2V0UmFuZ2VFbmQob2UuZW5kKSxsLmxhc3RTZXRDZWxsPXZlKSxoLnByZXZlbnREZWZhdWx0KCkpfSl9Z2V0Q3VycmVudFJhbmdlQ29vcmRzKGwsYSxkLGgsZil7Y29uc3Qgdj1sLmdldFRvcFN0YXJ0Q29ybmVyKCksTT1s''@;'; put 'put ''LmdldEJvdHRvbUVuZENvcm5lcigpLEQ9bC5nZXRCb3R0b21TdGFydENvcm5lcigpLFU9bC5nZXRUb3BFbmRDb3JuZXIoKTtsZXQgdGU9e3N0YXJ0Om51bGwsZW5kOm51bGx9O3N3aXRjaChkKXtjYXNlIk5FLVNXIjpzd2l0Y2goaCl7Y2FzZSJORS1TVyI6Y2FzZSJOVy1TRSI6dGU9InRvcCI9''@;'; put 'put ''PT1mP3tzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyxsLmhpZ2hsaWdodC5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhELnJvdyxhLmNvbCl9OntzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLmhpZ2hsaWdodC5yb3csYS5jb2wpLGVu''@;'; put 'put ''ZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyx2LmNvbCl9O2JyZWFrO2Nhc2UiU0UtTlciOiJib3R0b20iPT09ZiYmKHRlPXtzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhNLnJvdyxhLmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LHYu''@;'; put 'put ''Y29sKX0pfWJyZWFrO2Nhc2UiTlctU0UiOnN3aXRjaChoKXtjYXNlIk5FLVNXIjoidG9wIj09PWY/dGU9e3N0YXJ0OmEsZW5kOkR9OnRlLmVuZD1hO2JyZWFrO2Nhc2UiTlctU0UiOiJ0b3AiPT09Zj90ZT17c3RhcnQ6YSxlbmQ6TX06dGUuZW5kPWE7YnJlYWs7Y2FzZSJTRS1OVyI6InRvcCI9''@;'; put 'put ''PT1mP3RlPXtzdGFydDphLGVuZDp2fTp0ZS5lbmQ9YTticmVhaztjYXNlIlNXLU5FIjoidG9wIj09PWY/dGU9e3N0YXJ0OmEsZW5kOlV9OnRlLmVuZD1hfWJyZWFrO2Nhc2UiU1ctTkUiOnN3aXRjaChoKXtjYXNlIk5XLVNFIjp0ZT0iYm90dG9tIj09PWY/e3N0YXJ0OnRoaXMuaG90Ll9jcmVh''@;'; put 'put ''dGVDZWxsQ29vcmRzKGEucm93LHYuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoRC5yb3csYS5jb2wpfTp7c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHModi5yb3csYS5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyxNLmNvbCl9O2Jy''@;'; put 'put ''ZWFrO2Nhc2UiU1ctTkUiOnRlPSJ0b3AiPT09Zj97c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5oaWdobGlnaHQucm93LGEuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3csTS5jb2wpfTp7c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMo''@;'; put 'put ''YS5yb3csdi5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyh2LnJvdyxhLmNvbCl9O2JyZWFrO2Nhc2UiU0UtTlciOiJib3R0b20iPT09Zj90ZT17c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3csVS5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENv''@;'; put 'put ''b3Jkcyh2LnJvdyxhLmNvbCl9OiJ0b3AiPT09ZiYmKHRlPXtzdGFydDpELGVuZDphfSl9YnJlYWs7Y2FzZSJTRS1OVyI6c3dpdGNoKGgpe2Nhc2UiTlctU0UiOmNhc2UiTkUtU1ciOmNhc2UiU1ctTkUiOiJ0b3AiPT09ZiYmKHRlLmVuZD1hKTticmVhaztjYXNlIlNFLU5XIjoidG9wIj09PWY/''@;'; put 'put ''dGUuZW5kPWE6dGU9e3N0YXJ0OmEsZW5kOnZ9fX1yZXR1cm4gdGV9aXNEcmFnZ2VkKCl7cmV0dXJuIHRoaXMuZHJhZ2dlZC5sZW5ndGg+MH19ZnVuY3Rpb24gcXJlKCl7bGV0e2xhYmVsOmM9IiIsY29sc3BhbjpsPTEsb3JpZ0NvbHNwYW46YT0xLGNvbGxhcHNpYmxlOmQ9ITEsY3Jvc3NIaWRk''@;'; put 'put ''ZW5Db2x1bW5zOmg9W10saXNDb2xsYXBzZWQ6Zj0hMSxpc0hpZGRlbjp2PSExLGlzUm9vdDpNPSExLGlzUGxhY2Vob2xkZXI6RD0hMSxoZWFkZXJDbGFzc05hbWVzOlU9W119PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtyZXR1cm57''@;'; put 'put ''bGFiZWw6Yyxjb2xzcGFuOmwsb3JpZ0NvbHNwYW46YSxjb2xsYXBzaWJsZTpkLGlzQ29sbGFwc2VkOmYsY3Jvc3NIaWRkZW5Db2x1bW5zOmgsaXNIaWRkZW46dixpc1Jvb3Q6TSxpc1BsYWNlaG9sZGVyOkQsaGVhZGVyQ2xhc3NOYW1lczpVfX1mdW5jdGlvbiBKcmUoYyxsLGEpeyhmdW5jdGlv''@;'; put 'put ''biBHN3QoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIGZwKGMsbCl7cmV0dXJuIGMuZ2V0KHB2ZShjLGwp''@;'; put 'put ''KX1mdW5jdGlvbiBMRChjLGwsYSl7cmV0dXJuIGMuc2V0KHB2ZShjLGwpLGEpLGF9ZnVuY3Rpb24gcHZlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRl''@;'; put 'put ''IGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBndmU9WyJsYWJlbCIsImNvbGxhcHNpYmxlIl07dmFyIGo1PW5ldyBXZWFrTWFwLHR5PW5ldyBXZWFrTWFwLFFyZT1uZXcgV2Vha01hcDtjbGFzcyAkN3R7Y29uc3RydWN0b3IoKXtKcmUodGhpcyxqNSxbXSks''@;'; put 'put ''SnJlKHRoaXMsdHksMCksSnJlKHRoaXMsUXJlLDEvMCl9c2V0Q29sdW1uc0xpbWl0KGwpe0xEKFFyZSx0aGlzLGwpfXNldERhdGEoKXtMRChqNSx0aGlzLGZ1bmN0aW9uIFk3dChjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06''@;'; put 'put ''MS8wO2NvbnN0IGE9W107aWYoMD09PWwpcmV0dXJuIGE7S24oYyxoPT57Y29uc3QgZj1bXTtsZXQgdj0wO2EucHVzaChmKSxLbihoLE09Pntjb25zdCBEPXFyZSgpO2lmKG1vKE0pKXtjb25zdHtsYWJlbDp0ZSxjb2xzcGFuOm9lLGhlYWRlckNsYXNzTmFtZTp2ZX09TTtELmxhYmVsPXJjKHRl''@;'; put 'put ''KSwibnVtYmVyIj09dHlwZW9mIG9lJiZvZT4xJiYoRC5jb2xzcGFuPW9lLEQub3JpZ0NvbHNwYW49b2UpLCJzdHJpbmciPT10eXBlb2YgdmUmJihELmhlYWRlckNsYXNzTmFtZXM9Wy4uLnZlLnNwbGl0KCIgIildKX1lbHNlIEQubGFiZWw9cmMoTSk7dis9RC5vcmlnQ29sc3BhbjtsZXQgVT0h''@;'; put 'put ''MTtpZih2Pj1sJiYoRC5jb2xzcGFuPUQub3JpZ0NvbHNwYW4tKHYtbCksRC5vcmlnQ29sc3Bhbj1ELmNvbHNwYW4sVT0hMCksZi5wdXNoKEQpLEQuY29sc3Bhbj4xKWZvcihsZXQgdGU9MDt0ZTxELmNvbHNwYW4tMTt0ZSsrKWYucHVzaCh7bGFiZWw6IiIsaXNQbGFjZWhvbGRlcjohMH0pO3Jl''@;'; put 'put ''dHVybiFVfSl9KTtjb25zdCBkPU1hdGgubWF4KC4uLlpzKGEsaD0+aC5sZW5ndGgpKTtyZXR1cm4gS24oYSxoPT57aWYoaC5sZW5ndGg8ZCl7Y29uc3QgZj1acyhuZXcgQXJyYXkoZC1oLmxlbmd0aCksKCk9PnFyZSgpKTtoLnNwbGljZShoLmxlbmd0aCwwLC4uLmYpfX0pLGF9KGFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXSxmcChRcmUsdGhpcykpKSxMRCh0eSx0aGlzLGZwKGo1LHRoaXMpLmxlbmd0aCl9Z2V0RGF0YSgpe3JldHVybiBmcChqNSx0aGlzKX1tZXJnZVdpdGgobCl7S24obCxhPT57bGV0e3JvdzpkLGNvbDpoLC4u''@;'; put 'put ''LmZ9PWE7Y29uc3Qgdj10aGlzLmdldEhlYWRlclNldHRpbmdzKGQsaCk7bnVsbCE9PXYmJlB1KHYsZixndmUpfSl9bWFwKGwpe0tuKGZwKGo1LHRoaXMpLGE9PntLbihhLGQ9Pntjb25zdCBoPWwoey4uLmR9KTttbyhoKSYmUHUoZCxoLGd2ZSl9KX0pfWdldEhlYWRlclNldHRpbmdzKGwsYSl7''@;'; put 'put ''dmFyIGQ7aWYobD49ZnAodHksdGhpcyl8fGw8MClyZXR1cm4gbnVsbDtjb25zdCBoPWZwKGo1LHRoaXMpW2xdO3JldHVybiExPT09QXJyYXkuaXNBcnJheShoKXx8YT49aC5sZW5ndGg/bnVsbDpudWxsIT09KGQ9aFthXSkmJnZvaWQgMCE9PWQ/ZDpudWxsfWdldEhlYWRlcnNTZXR0aW5ncyhs''@;'; put 'put ''LGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxO2NvbnN0IGg9W107aWYobD49ZnAodHksdGhpcyl8fGw8MClyZXR1cm4gaDtjb25zdCBmPWZwKGo1LHRoaXMpW2xdO2xldCB2PTA7Zm9yKGxldCBNPWE7TTxmLmxlbmd0aDtN''@;'; put 'put ''Kyspe2NvbnN0IEQ9ZltNXTtpZihELmlzUGxhY2Vob2xkZXIpdGhyb3cgbmV3IEVycm9yKCJUaGUgZmlyc3QgY29sdW1uIHNldHRpbmdzIGNhbm5vdCBvdmVybGFwIHRoZSBvdGhlciBoZWFkZXIgbGF5ZXJzIik7aWYodis9RC5jb2xzcGFuLGgucHVzaChEKSxELmNvbHNwYW4+MSYmKE0rPUQu''@;'; put 'put ''Y29sc3Bhbi0xKSx2PT09ZClicmVhaztpZih2PmQpdGhyb3cgbmV3IEVycm9yKCJUaGUgbGFzdCBjb2x1bW4gc2V0dGluZ3MgY2Fubm90IG92ZXJsYXAgdGhlIG90aGVyIGhlYWRlciBsYXllcnMiKX1yZXR1cm4gaH1nZXRMYXllcnNDb3VudCgpe3JldHVybiBmcCh0eSx0aGlzKX1nZXRDb2x1''@;'; put 'put ''bW5zQ291bnQoKXtyZXR1cm4gZnAodHksdGhpcyk+MD9mcChqNSx0aGlzKVswXS5sZW5ndGg6MH1jbGVhcigpe0xEKGo1LHRoaXMsW10pLExEKHR5LHRoaXMsMCl9fWZ1bmN0aW9uIGVpZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gSzd0KGMpe3ZhciBsPWZ1bmN0aW9uIFg3dChjLGwpe2lm''@;'; put 'put ''KCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9Qcmlt''@;'; put 'put ''aXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTph''@;'; put 'put ''LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgbXZlPSJERi1wcmUtb3JkZXIiLF92ZT1uZXcgTWFwKFtbbXZlLGZ1bmN0aW9uIHZ2ZShjLGwpe2xldCBhPWMuY2FsbChsLHRoaXMpO2ZvcihsZXQgZD0wO2Q8dGhpcy5jaGlsZHMubGVu''@;'; put 'put ''Z3RoO2QrKyl7aWYoITE9PT1hKXJldHVybiExO2E9dnZlLmNhbGwodGhpcy5jaGlsZHNbZF0sYyxsKX1yZXR1cm4gYX1dLFsiREYtcG9zdC1vcmRlciIsZnVuY3Rpb24geXZlKGMsbCl7Zm9yKGxldCBhPTA7YTx0aGlzLmNoaWxkcy5sZW5ndGg7YSsrKWlmKCExPT09eXZlLmNhbGwodGhpcy5j''@;'; put 'put ''aGlsZHNbYV0sYyxsKSlyZXR1cm4hMTtyZXR1cm4gYy5jYWxsKGwsdGhpcyl9XSxbIkJGIixmdW5jdGlvbiBKN3QoYyxsKXtjb25zdCBhPVt0aGlzXTshZnVuY3Rpb24gZCgpe2lmKDA9PT1hLmxlbmd0aClyZXR1cm47Y29uc3QgaD1hLnNoaWZ0KCk7YS5wdXNoKC4uLmguY2hpbGRzKSwhMSE9''@;'; put 'put ''PWMuY2FsbChsLGgpJiZkKCl9KCl9XV0pO2NsYXNzIGFqe2NvbnN0cnVjdG9yKGwpe2VpZSh0aGlzLCJkYXRhIix7fSksZWllKHRoaXMsInBhcmVudCIsbnVsbCksZWllKHRoaXMsImNoaWxkcyIsW10pLHRoaXMuZGF0YT1sfWFkZENoaWxkKGwpe2wucGFyZW50PXRoaXMsdGhpcy5jaGlsZHMu''@;'; put 'put ''cHVzaChsKX1jbG9uZVRyZWUoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcztjb25zdCBhPW5ldyBhaih7Li4ubC5kYXRhfSk7Zm9yKGxldCBkPTA7ZDxsLmNoaWxkcy5sZW5ndGg7ZCsrKWEuYWRkQ2hpbGQodGhpcy5j''@;'; put 'put ''bG9uZVRyZWUobC5jaGlsZHNbZF0pKTtyZXR1cm4gYX1yZXBsYWNlVHJlZVdpdGgobCl7dGhpcy5kYXRhPXsuLi5sLmRhdGF9LHRoaXMuY2hpbGRzPVtdO2ZvcihsZXQgYT0wO2E8bC5jaGlsZHMubGVuZ3RoO2ErKyl0aGlzLmFkZENoaWxkKGwuY2hpbGRzW2FdKX13YWxrRG93bihsKXtsZXQg''@;'; put 'put ''YT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06IkJGIjtpZighX3ZlLmhhcyhhKSl0aHJvdyBuZXcgRXJyb3IoYFRyYXZlcnNhbCBzdHJhdGVneSAiJHthfSIgZG9lcyBub3QgZXhpc3RgKTtfdmUuZ2V0KGEpLmNhbGwodGhpcyxsLHRoaXMp''@;'; put 'put ''fXdhbGtVcChsKXtjb25zdCBhPXRoaXMsZD1oPT57ITEhPT1sLmNhbGwoYSxoKSYmbnVsbCE9PWgucGFyZW50JiZkKGgucGFyZW50KX07ZCh0aGlzKX19ZnVuY3Rpb24gdGllKGMsbCxhKXsoZnVuY3Rpb24gZTl0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90''@;'; put 'put ''IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBOZChjLGwpe3JldHVybiBjLmdldCh3dmUoYyxsKSl9ZnVuY3Rpb24gd3ZlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09''@;'; put 'put ''bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgcUM9bmV3IFdlYWtNYXAsbnk9bmV3IFdlYWtNYXAsSkM9bmV3IFdlYWtNYXA7Y2xhc3Mg''@;'; put 'put ''bjl0e2NvbnN0cnVjdG9yKGwpe3RpZSh0aGlzLHFDLG5ldyBNYXApLHRpZSh0aGlzLG55LG5ldyBNYXApLHRpZSh0aGlzLEpDLG51bGwpLGZ1bmN0aW9uIHQ5dChjLGwsYSl7Yy5zZXQod3ZlKGMsbCksYSl9KEpDLHRoaXMsbCl9Z2V0Um9vdHMoKXtyZXR1cm4gQXJyYXkuZnJvbShOZChxQyx0''@;'; put 'put ''aGlzKS52YWx1ZXMoKSl9Z2V0Um9vdEJ5Q29sdW1uKGwpe2xldCBhO3JldHVybiBOZChueSx0aGlzKS5oYXMobCkmJihhPU5kKHFDLHRoaXMpLmdldChOZChueSx0aGlzKS5nZXQobCkpKSxhfWdldE5vZGUobCxhKXtjb25zdCBkPXRoaXMuZ2V0Um9vdEJ5Q29sdW1uKGEpO2lmKCFkKXJldHVy''@;'; put 'put ''bjtjb25zdCBoPWEtTmQobnksdGhpcykuZ2V0KGEpO2xldCB2LGY9MDtyZXR1cm4gZC53YWxrRG93bihNPT57Y29uc3R7ZGF0YTp7b3JpZ0NvbHNwYW46RCxoZWFkZXJMZXZlbDpVfX09TTtpZihsPT09VSl7aWYoaD49ZiYmaDw9ZitELTEpcmV0dXJuIHY9TSx2LmRhdGEuaXNSb290PWE9PT12''@;'; put 'put ''LmRhdGEuY29sdW1uSW5kZXgsITE7Zis9RH19KSx2fXJlYnVpbGRUcmVlSW5kZXgoKXtsZXQgbD0wO05kKG55LHRoaXMpLmNsZWFyKCksS24oTmQocUMsdGhpcyksYT0+e2xldFsse2RhdGE6e2NvbHNwYW46ZH19XT1hO2ZvcihsZXQgaD1sO2g8bCtkO2grKylOZChueSx0aGlzKS5zZXQoaCxs''@;'; put 'put ''KTtsKz1kfSl9YnVpbGRUcmVlKCl7dGhpcy5jbGVhcigpO2NvbnN0IGw9TmQoSkMsdGhpcykuZ2V0Q29sdW1uc0NvdW50KCk7bGV0IGE9MDtmb3IoO2E8bDspe2NvbnN0IGQ9TmQoSkMsdGhpcykuZ2V0SGVhZGVyU2V0dGluZ3MoMCxhKSxoPW5ldyBhajtOZChxQyx0aGlzKS5zZXQoYSxoKSx0''@;'; put 'put ''aGlzLmJ1aWxkTGVhdmVzKGgsYSwwLGQub3JpZ0NvbHNwYW4pLGErPWQub3JpZ0NvbHNwYW59dGhpcy5yZWJ1aWxkVHJlZUluZGV4KCl9YnVpbGRMZWF2ZXMobCxhLGQpe2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXToxO2NvbnN0''@;'; put 'put ''IGY9TmQoSkMsdGhpcykuZ2V0SGVhZGVyc1NldHRpbmdzKGQsYSxoKTtkKz0xLEtuKGYsdj0+e2NvbnN0IE09ey4uLnYsaGVhZGVyTGV2ZWw6ZC0xLGNvbHVtbkluZGV4OmF9O2xldCBEOzE9PT1kPyhsLmRhdGE9TSxEPWwpOihEPW5ldyBhaihNKSxsLmFkZENoaWxkKEQpKSxkPE5kKEpDLHRo''@;'; put 'put ''aXMpLmdldExheWVyc0NvdW50KCkmJnRoaXMuYnVpbGRMZWF2ZXMoRCxhLGQsdi5vcmlnQ29sc3BhbiksYSs9di5vcmlnQ29sc3Bhbn0pfWNsZWFyKCl7TmQocUMsdGhpcykuY2xlYXIoKSxOZChueSx0aGlzKS5jbGVhcigpfX1mdW5jdGlvbiBDdmUoYyxsKXtjLndhbGtEb3duKGE9PntsZXR7''@;'; put 'put ''ZGF0YTpkLGNoaWxkczpofT1hO2lmKCFkLmlzSGlkZGVuJiYobChkLmNvbHVtbkluZGV4KSwwPT09aC5sZW5ndGgpKWZvcihsZXQgZj0xO2Y8ZC5jb2xzcGFuO2YrKylsKGQuY29sdW1uSW5kZXgrZil9KX1mdW5jdGlvbiBvaihjLGwpe2xldHtjaGlsZHM6YX09YztpZigwIT09YS5sZW5ndGgp''@;'; put 'put ''cmV0dXJuIGFbMF0uZGF0YVtsXX1mdW5jdGlvbiBzaihjKXtyZXR1cm4gb2ooYywib3JpZ0NvbHNwYW4iKT09PWMuZGF0YS5vcmlnQ29sc3Bhbn1mdW5jdGlvbiBuaWUoYyl7Y29uc3R7ZGF0YTpsLGNoaWxkczphfT1jO2lmKCFsLmlzQ29sbGFwc2VkfHxsLmlzSGlkZGVufHxsLm9yaWdDb2xz''@;'; put 'put ''cGFuPD0xKXJldHVybntyb2xsYmFja01vZGlmaWNhdGlvbjooKT0+e30sYWZmZWN0ZWRDb2x1bW5zOltdLGNvbHNwYW5Db21wZW5zYXRpb246MH07aWYoc2ooYykpcmV0dXJuIG5pZShhWzBdKTtsLmlzQ29sbGFwc2VkPSExO2NvbnN0IGg9YS5zbGljZSgxKSxmPW5ldyBTZXQ7bGV0IHY9MDtp''@;'; put 'put ''ZihoLmxlbmd0aD4wKUtuKGgsTT0+e00ucmVwbGFjZVRyZWVXaXRoKE0uZGF0YS5jbG9uZWRUcmVlKSxNLmRhdGEuY2xvbmVkVHJlZT1udWxsLHYrPU0uZGF0YS5jb2xzcGFuLEN2ZShNLFU9PntmLmFkZChVKX0pfSk7ZWxzZXtjb25zdHtjb2xzcGFuOk0sb3JpZ0NvbHNwYW46RCxjb2x1bW5J''@;'; put 'put ''bmRleDpVfT1sO3Y9RC1NO2ZvcihsZXQgdGU9MTt0ZTxEO3RlKyspZi5hZGQoVSt0ZSl9cmV0dXJuIGMud2Fsa1VwKE09Pntjb25zdHtkYXRhOkR9PU07RC5jb2xzcGFuKz12LEQuY29sc3Bhbj49RC5vcmlnQ29sc3Bhbj8oRC5jb2xzcGFuPUQub3JpZ0NvbHNwYW4sRC5pc0NvbGxhcHNlZD0h''@;'; put 'put ''MSk6c2ooTSkmJihELmlzQ29sbGFwc2VkPW9qKE0sImlzQ29sbGFwc2VkIikpfSkse3JvbGxiYWNrTW9kaWZpY2F0aW9uOigpPT5yaWUoYyksYWZmZWN0ZWRDb2x1bW5zOkFycmF5LmZyb20oZiksY29sc3BhbkNvbXBlbnNhdGlvbjp2fX1mdW5jdGlvbiByaWUoYyl7dmFyIGw7Y29uc3R7ZGF0''@;'; put 'put ''YTphLGNoaWxkczpkfT1jO2lmKGEuaXNDb2xsYXBzZWR8fGEuaXNIaWRkZW58fGEub3JpZ0NvbHNwYW48PTEpcmV0dXJue3JvbGxiYWNrTW9kaWZpY2F0aW9uOigpPT57fSxhZmZlY3RlZENvbHVtbnM6W10sY29sc3BhbkNvbXBlbnNhdGlvbjowfTtpZihzaihjKSlyZXR1cm4gcmllKGRbMF0p''@;'; put 'put ''O2EuaXNDb2xsYXBzZWQ9ITA7Y29uc3QgZj1kLnNsaWNlKDEpLHY9bmV3IFNldDtpZihmLmxlbmd0aD4wKUtuKGYsRD0+e0N2ZShELFU9Pnt2LmFkZChVKX0pLEQuZGF0YS5jbG9uZWRUcmVlPUQuY2xvbmVUcmVlKCksRC53YWxrRG93bihVPT57bGV0e2RhdGE6dGV9PVU7dGUuaXNIaWRkZW49''@;'; put 'put ''ITB9KX0pO2Vsc2V7Y29uc3R7b3JpZ0NvbHNwYW46RCxjb2x1bW5JbmRleDpVfT1hO2ZvcihsZXQgdGU9MTt0ZTxEO3RlKyspdi5hZGQoVSt0ZSl9Y29uc3QgTT1hLmNvbHNwYW4tKG51bGwhPT0obD1vaihjLCJjb2xzcGFuIikpJiZ2b2lkIDAhPT1sP2w6MSk7cmV0dXJuIGMud2Fsa1VwKEQ9''@;'; put 'put ''Pntjb25zdHtkYXRhOlV9PUQ7VS5jb2xzcGFuLT1NLFUuY29sc3Bhbjw9MT8oVS5jb2xzcGFuPTEsVS5pc0NvbGxhcHNlZD0hMCk6c2ooRCkmJihVLmlzQ29sbGFwc2VkPW9qKEQsImlzQ29sbGFwc2VkIikpfSkse3JvbGxiYWNrTW9kaWZpY2F0aW9uOigpPT5uaWUoYyksYWZmZWN0ZWRDb2x1''@;'; put 'put ''bW5zOkFycmF5LmZyb20odiksY29sc3BhbkNvbXBlbnNhdGlvbjpNfX1jb25zdCBTdmU9bmV3IE1hcChbWyJjb2xsYXBzZSIscmllXSxbImV4cGFuZCIsbmllXSxbImhpZGUtY29sdW1uIixmdW5jdGlvbiByOXQoYyxsKXtpZighTnVtYmVyLmlzSW50ZWdlcihsKSl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''IlRoZSBwYXNzZWQgZ3JpZENvbHVtbkluZGV4IGFyZ3VtZW50IGhhcyBpbnZhbGlkIHR5cGUuIik7aWYoYy5jaGlsZHMubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKFhzYFRoZSBwYXNzZWQgbm9kZSBpcyBub3QgdGhlIGxhc3Qgbm9kZSBvbiB0aGUgdHJlZS4gT25seSBmb3JceDIwCnRoZSBs''@;'; put 'put ''YXN0IG5vZGUsIHRoZSBoaWRlIGNvbHVtbiBtb2RpZmljYXRpb24gY2FuIGJlIGFwcGxpZWQuYCk7Y29uc3R7Y3Jvc3NIaWRkZW5Db2x1bW5zOmF9PWMuZGF0YTtpZihhLmluY2x1ZGVzKGwpKXJldHVybjtsZXQgZD0hMTtjLndhbGtVcChoPT57Y29uc3R7ZGF0YTp7Y29sbGFwc2libGU6Zn19''@;'; put 'put ''PWg7aWYoZilyZXR1cm4gZD0hMCwhMX0pLCFkJiZjLndhbGtVcChoPT57Y29uc3R7ZGF0YTpmfT1oO2YuY3Jvc3NIaWRkZW5Db2x1bW5zLnB1c2gobCksZi5jb2xzcGFuPjE/Zi5jb2xzcGFuLT0xOmYuaXNIaWRkZW49ITB9KX1dLFsic2hvdy1jb2x1bW4iLGZ1bmN0aW9uIGk5dChjLGwpe2lm''@;'; put 'put ''KCFOdW1iZXIuaXNJbnRlZ2VyKGwpKXRocm93IG5ldyBFcnJvcigiVGhlIHBhc3NlZCBncmlkQ29sdW1uSW5kZXggYXJndW1lbnQgaGFzIGludmFsaWQgdHlwZS4iKTtpZihjLmNoaWxkcy5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoWHNgVGhlIHBhc3NlZCBub2RlIGlzIG5vdCB0aGUgbGFz''@;'; put 'put ''dCBub2RlIG9uIHRoZSB0cmVlLiBPbmx5IGZvclx4MjAKdGhlIGxhc3Qgbm9kZSwgdGhlIHNob3cgY29sdW1uIG1vZGlmaWNhdGlvbiBjYW4gYmUgYXBwbGllZC5gKTtjb25zdHtjcm9zc0hpZGRlbkNvbHVtbnM6YX09Yy5kYXRhO2lmKCFhLmluY2x1ZGVzKGwpKXJldHVybjtsZXQgZD0hMTtj''@;'; put 'put ''LndhbGtVcChoPT57Y29uc3R7ZGF0YTp7Y29sbGFwc2libGU6Zn19PWg7aWYoZilyZXR1cm4gZD0hMCwhMX0pLCFkJiZjLndhbGtVcChoPT57Y29uc3R7ZGF0YTpmfT1oO2YuY3Jvc3NIaWRkZW5Db2x1bW5zLnNwbGljZShmLmNyb3NzSGlkZGVuQ29sdW1ucy5pbmRleE9mKGwpLDEpLCFmLmlz''@;'; put 'put ''SGlkZGVuJiZmLmNvbHNwYW48Zi5vcmlnQ29sc3BhbiYmKGYuY29sc3Bhbis9MSksZi5pc0hpZGRlbj0hMX0pfV1dKTtmdW5jdGlvbiBsaihjKXtjb25zdCBsPVtdO3JldHVybiBLbihjLGE9PnthLndhbGtEb3duKGQ9Pntjb25zdCBoPWQuZGF0YSx7b3JpZ0NvbHNwYW46Zixjb2x1bW5JbmRl''@;'; put 'put ''eDp2LGhlYWRlckxldmVsOk0sY3Jvc3NIaWRkZW5Db2x1bW5zOkR9PWgsVT1mdW5jdGlvbiBzOXQoYyxsKXtsZXQgYTtyZXR1cm4gQXJyYXkuaXNBcnJheShjW2xdKT9hPWNbbF06KGE9W10sY1tsXT1hKSxhfShsLE0pO2xldCB0ZT0hMTtmb3IobGV0IG9lPXY7b2U8ditmO29lKyspaWYoRC5p''@;'; put 'put ''bmNsdWRlcyhvZSl8fHRlKVUucHVzaCh7bGFiZWw6IiIsaXNQbGFjZWhvbGRlcjohMH0pO2Vsc2V7Y29uc3Qgd2U9bzl0KGgpO3dlLmlzUm9vdD0hMCxVLnB1c2god2UpLHRlPSEwfX0pfSksbH1mdW5jdGlvbiBvOXQoYyl7Y29uc3R7Y3Jvc3NIaWRkZW5Db2x1bW5zOmwsLi4uYX09cXJlKGMp''@;'; put 'put ''O3JldHVybiBhfWZ1bmN0aW9uIGlpZShjLGwsYSl7KGZ1bmN0aW9uIGw5dChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9''@;'; put 'put ''ZnVuY3Rpb24gT0QoYyxsLGEpe3JldHVybiBjLnNldChNdmUoYyxsKSxhKSxhfWZ1bmN0aW9uIHV1KGMsbCl7cmV0dXJuIGMuZ2V0KE12ZShjLGwpKX1mdW5jdGlvbiBNdmUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciByZz1uZXcgV2Vha01hcCxSaD1uZXcgV2Vha01hcCxyeT1uZXcgV2Vha01hcDtjbGFzcyBjOXR7Y29uc3RydWN0b3IoKXtpaWUodGhpcyxyZyxu''@;'; put 'put ''ZXcgJDd0KSxpaWUodGhpcyxSaCxuZXcgbjl0KHV1KHJnLHRoaXMpKSksaWllKHRoaXMscnksW1tdXSl9c2V0U3RhdGUobCl7dXUocmcsdGhpcykuc2V0RGF0YShsKTtsZXQgYT0hMTt0cnl7dXUoUmgsdGhpcykuYnVpbGRUcmVlKCl9Y2F0Y2h7dXUoUmgsdGhpcykuY2xlYXIoKSx1dShyZyx0''@;'; put 'put ''aGlzKS5jbGVhcigpLGE9ITB9cmV0dXJuIE9EKHJ5LHRoaXMsbGoodXUoUmgsdGhpcykuZ2V0Um9vdHMoKSkpLGF9c2V0Q29sdW1uc0xpbWl0KGwpe3V1KHJnLHRoaXMpLnNldENvbHVtbnNMaW1pdChsKX1tZXJnZVN0YXRlV2l0aChsKXtjb25zdCBhPVpzKGwsZD0+e2xldHtyb3c6aCwuLi5m''@;'; put 'put ''fT1kO3JldHVybntyb3c6aDwwP3RoaXMucm93Q29vcmRzVG9MZXZlbChoKTpoLC4uLmZ9fSk7dXUocmcsdGhpcykubWVyZ2VXaXRoKGEpLHV1KFJoLHRoaXMpLmJ1aWxkVHJlZSgpLE9EKHJ5LHRoaXMsbGoodXUoUmgsdGhpcykuZ2V0Um9vdHMoKSkpfW1hcFN0YXRlKGwpe3V1KHJnLHRoaXMp''@;'; put 'put ''Lm1hcChsKSx1dShSaCx0aGlzKS5idWlsZFRyZWUoKSxPRChyeSx0aGlzLGxqKHV1KFJoLHRoaXMpLmdldFJvb3RzKCkpKX1tYXBOb2RlcyhsKXtyZXR1cm4gYTAodXUoUmgsdGhpcykuZ2V0Um9vdHMoKSwoYSxkKT0+KGQud2Fsa0Rvd24oaD0+e2NvbnN0IGY9bChoLmRhdGEpO3ZvaWQgMCE9''@;'; put 'put ''PWYmJmEucHVzaChmKX0pLGEpLFtdKX10cmlnZ2VyTm9kZU1vZGlmaWNhdGlvbihsLGEsZCl7YTwwJiYoYT10aGlzLnJvd0Nvb3Jkc1RvTGV2ZWwoYSkpO2NvbnN0IGg9dXUoUmgsdGhpcykuZ2V0Tm9kZShhLGQpO2xldCBmO3JldHVybiBoJiYoZj1mdW5jdGlvbiBhOXQoYyxsLGEpe2lmKCFT''@;'; put 'put ''dmUuaGFzKGMpKXRocm93IG5ldyBFcnJvcihgVGhlIG5vZGUgbW9kaWZpZXIgYWN0aW9uICgiJHtjfSIpIGRvZXMgbm90IGV4aXN0LmApO3JldHVybiBTdmUuZ2V0KGMpKGwsYSl9KGwsaCxkKSxPRChyeSx0aGlzLGxqKHV1KFJoLHRoaXMpLmdldFJvb3RzKCkpKSksZn10cmlnZ2VyQ29sdW1u''@;'; put 'put ''TW9kaWZpY2F0aW9uKGwsYSl7cmV0dXJuIHRoaXMudHJpZ2dlck5vZGVNb2RpZmljYXRpb24obCwtMSxhKX1yb3dDb29yZHNUb0xldmVsKGwpe2lmKGw+PTApcmV0dXJuIG51bGw7Y29uc3QgYT1sK01hdGgubWF4KHRoaXMuZ2V0TGF5ZXJzQ291bnQoKSwxKTtyZXR1cm4gYTwwP251bGw6YX1s''@;'; put 'put ''ZXZlbFRvUm93Q29vcmRzKGwpe2lmKGw8MClyZXR1cm4gbnVsbDtjb25zdCBhPWwtTWF0aC5tYXgodGhpcy5nZXRMYXllcnNDb3VudCgpLDEpO3JldHVybiBhPj0wP251bGw6YX1nZXRIZWFkZXJTZXR0aW5ncyhsLGEpe3ZhciBkLGg7cmV0dXJuIGw8MCYmKGw9dGhpcy5yb3dDb29yZHNUb0xl''@;'; put 'put ''dmVsKGwpKSxudWxsPT09bHx8bD49dGhpcy5nZXRMYXllcnNDb3VudCgpP251bGw6bnVsbCE9PShkPW51bGw9PT0oaD11dShyeSx0aGlzKVtsXSl8fHZvaWQgMD09PWg/dm9pZCAwOmhbYV0pJiZ2b2lkIDAhPT1kP2Q6bnVsbH1nZXRIZWFkZXJUcmVlTm9kZURhdGEobCxhKXtjb25zdCBkPXRo''@;'; put 'put ''aXMuZ2V0SGVhZGVyVHJlZU5vZGUobCxhKTtyZXR1cm4gZD97Li4uZC5kYXRhfTpudWxsfWdldEhlYWRlclRyZWVOb2RlKGwsYSl7cmV0dXJuIGw8MCYmKGw9dGhpcy5yb3dDb29yZHNUb0xldmVsKGwpKSxudWxsPT09bHx8bD49dGhpcy5nZXRMYXllcnNDb3VudCgpP251bGw6dXUoUmgsdGhp''@;'; put 'put ''cykuZ2V0Tm9kZShsLGEpfHxudWxsfWZpbmRUb3BNb3N0RW50aXJlSGVhZGVyTGV2ZWwobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmw7Y29uc3QgZD1hLWwrMTtsZXQgaD0hMSxmPW51bGw7Zm9yKGxldCB2PWw7djw9YTt2''@;'; put 'put ''Kyspe2NvbnN0IE09dXUoUmgsdGhpcykuZ2V0Um9vdEJ5Q29sdW1uKHYpO2lmKCFNKWJyZWFrO2g9ITAsTS53YWxrRG93bihEPT57Y29uc3R7Y29sdW1uSW5kZXg6VSxoZWFkZXJMZXZlbDp0ZSxvcmlnQ29sc3BhbjpvZSxpc0hpZGRlbjp2ZX09RC5kYXRhO3ZlfHxvZTw9ZCYmVT49bCYmVStv''@;'; put 'put ''ZS0xPD1hJiYobnVsbD09PWZ8fHRlPGYpJiYoZj10ZSl9LG12ZSl9cmV0dXJuIGgmJm51bGw9PT1mPy0xOnRoaXMubGV2ZWxUb1Jvd0Nvb3JkcyhmPz8wKX1maW5kTGVmdE1vc3RDb2x1bW5JbmRleChsLGEpe3ZhciBkO2NvbnN0e2lzUm9vdDpofT1udWxsIT09KGQ9dGhpcy5nZXRIZWFkZXJT''@;'; put 'put ''ZXR0aW5ncyhsLGEpKSYmdm9pZCAwIT09ZD9kOntpc1Jvb3Q6ITB9O2lmKGgpcmV0dXJuIGE7bGV0IGY9YS0xO2Zvcig7Zj49MDspe3ZhciB2O2NvbnN0e2lzUm9vdDpNfT1udWxsIT09KHY9dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhsLGYpKSYmdm9pZCAwIT09dj92Ontpc1Jvb3Q6ITB9O2lm''@;'; put 'put ''KE0pYnJlYWs7Zi09MX1yZXR1cm4gZn1maW5kUmlnaHRNb3N0Q29sdW1uSW5kZXgobCxhKXt2YXIgZDtjb25zdHtpc1Jvb3Q6aCxvcmlnQ29sc3BhbjpmfT1udWxsIT09KGQ9dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhsLGEpKSYmdm9pZCAwIT09ZD9kOntpc1Jvb3Q6ITAsb3JpZ0NvbHNwYW46''@;'; put 'put ''MX07aWYoaClyZXR1cm4gYStmLTE7bGV0IHY9YSsxO2Zvcig7djx0aGlzLmdldENvbHVtbnNDb3VudCgpOyl7dmFyIE07Y29uc3R7aXNSb290OkR9PW51bGwhPT0oTT10aGlzLmdldEhlYWRlclNldHRpbmdzKGwsdikpJiZ2b2lkIDAhPT1NP006e2lzUm9vdDohMH07aWYoRClicmVhazt2Kz0x''@;'; put 'put ''fXJldHVybiB2LTF9Z2V0TGF5ZXJzQ291bnQoKXtyZXR1cm4gdXUocmcsdGhpcykuZ2V0TGF5ZXJzQ291bnQoKX1nZXRDb2x1bW5zQ291bnQoKXtyZXR1cm4gdXUocmcsdGhpcykuZ2V0Q29sdW1uc0NvdW50KCl9Y2xlYXIoKXtPRChyeSx0aGlzLFtdKSx1dShyZyx0aGlzKS5jbGVhcigpLHV1''@;'; put 'put ''KFJoLHRoaXMpLmNsZWFyKCl9fWZ1bmN0aW9uIFBEKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB1OXQoYyl7dmFyIGw9ZnVuY3Rpb24gZDl0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7''@;'; put 'put ''dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMp''@;'; put 'put ''fShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBmOXQ9Y2xhc3MgaDl0e2Nv''@;'; put 'put ''bnN0cnVjdG9yKGwsYSl7UEQodGhpcywiaG90Iix2b2lkIDApLFBEKHRoaXMsIm5lc3RlZEhlYWRlclNldHRpbmdzR2V0dGVyIix2b2lkIDApLFBEKHRoaXMsImxheWVyc0NvdW50IiwwKSxQRCh0aGlzLCJjb250YWluZXIiLHZvaWQgMCksUEQodGhpcywid2lkdGhzTWFwIix2b2lkIDApLHRo''@;'; put 'put ''aXMuaG90PWwsdGhpcy5uZXN0ZWRIZWFkZXJTZXR0aW5nc0dldHRlcj1hLHRoaXMud2lkdGhzTWFwPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmNyZWF0ZUFuZFJlZ2lzdGVySW5kZXhNYXAoIm5lc3RlZEhlYWRlcnMud2lkdGhzTWFwIiwicGh5c2ljYWxJbmRleFRvVmFsdWUiKX1zZXRM''@;'; put 'put ''YXllcnNDb3VudChsKXtyZXR1cm4gdGhpcy5sYXllcnNDb3VudD1sLHRoaXN9Z2V0V2lkdGgobCl7cmV0dXJuIHRoaXMud2lkdGhzTWFwLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpKX1idWlsZFdpZHRoc01hcCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0Q3Vy''@;'; put 'put ''cmVudFRoZW1lTmFtZSgpO3RoaXMuY29udGFpbmVyPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJoYW5kc29udGFibGUiLCJodEdob3N0VGFibGUiLCJodEF1dG9TaXplIiksbCYmdGhpcy5jb250YWluZXIu''@;'; put 'put ''Y2xhc3NMaXN0LmFkZChsKSx0aGlzLl9idWlsZEdob3N0VGFibGUodGhpcy5jb250YWluZXIpLHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuY29udGFpbmVyKTtjb25zdCBhPXRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoInRyOmxhc3Qtb2YtdHlw''@;'; put 'put ''ZSB0aCIpLGQ9YS5sZW5ndGg7dGhpcy53aWR0aHNNYXAuY2xlYXIoKTtmb3IobGV0IGg9MDtoPGQ7aCsrKXtjb25zdCBmPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoaCksdj10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGYpO3RoaXMu''@;'; put 'put ''d2lkdGhzTWFwLnNldFZhbHVlQXRJbmRleCh2LGFbaF0ub2Zmc2V0V2lkdGgpfXRoaXMuY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5jb250YWluZXIpLHRoaXMuY29udGFpbmVyPW51bGx9X2J1aWxkR2hvc3RUYWJsZShsKXtjb25zdHtyb290RG9jdW1lbnQ6YSxjb2x1''@;'; put 'put ''bW5JbmRleE1hcHBlcjpkfT10aGlzLmhvdCxoPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGY9YS5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpLHY9ISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmRyb3Bkb3duTWVudSxNPWQuZ2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKTtmb3IobGV0IEQ9''@;'; put 'put ''MDtEPHRoaXMubGF5ZXJzQ291bnQ7RCsrKXtjb25zdCBVPWEuY3JlYXRlRWxlbWVudCgidHIiKTtmb3IobGV0IHRlPTA7dGU8TTt0ZSsrKXtsZXQgb2U9ZC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRlKTtudWxsPT09b2UmJihvZT10ZSk7Y29uc3QgdmU9YS5jcmVhdGVFbGVtZW50''@;'; put 'put ''KCJ0aCIpLHdlPXRoaXMubmVzdGVkSGVhZGVyU2V0dGluZ3NHZXR0ZXIoRCxvZSk7aWYod2UmJighd2UuaXNQbGFjZWhvbGRlcnx8d2UuaXNIaWRkZW4pKXtsZXQgRmU9d2UubGFiZWw7diYmKEZlKz0nPGJ1dHRvbiBjbGFzcz0iY2hhbmdlVHlwZSI+PC9idXR0b24+JyksVDYodmUsRmUpLHZl''@;'; put 'put ''LmNvbFNwYW49d2UuY29sc3BhbixVLmFwcGVuZENoaWxkKHZlKX19Zi5hcHBlbmRDaGlsZChVKX1oLmFwcGVuZENoaWxkKGYpLGwuYXBwZW5kQ2hpbGQoaCl9Y2xlYXIoKXt0aGlzLndpZHRoc01hcC5jbGVhcigpLHRoaXMuY29udGFpbmVyPW51bGx9fTtmdW5jdGlvbiB4dmUoYyxsLGEpe3Jl''@;'; put 'put ''dHVybihsPWZ1bmN0aW9uIGc5dChjKXt2YXIgbD1mdW5jdGlvbiBtOXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3Qi''@;'; put 'put ''IT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9s''@;'; put 'put ''OmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIFFDKGMsbCxhKXtFdmUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIEV2ZShjLGwpe2lmKGwu''@;'; put 'put ''aGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gejUoYyxsLGEpe3JldHVybiBjLnNldChBMChjLGwpLGEpLGF9ZnVuY3Rpb24gZXMoYyxsKXtyZXR1cm4gYy5n''@;'; put 'put ''ZXQoQTAoYyxsKSl9ZnVuY3Rpb24gQTAoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVj''@;'; put 'put ''dCIpfWNvbnN0IFR2ZT0ibmVzdGVkSGVhZGVycyI7dmFyIEZsPW5ldyBXZWFrTWFwLHk4PW5ldyBXZWFrTWFwLEZEPW5ldyBXZWFrTWFwLGNqPW5ldyBXZWFrTWFwLHVqPW5ldyBXZWFrTWFwLGl5PW5ldyBXZWFrTWFwLEcwPW5ldyBXZWFrU2V0O2NsYXNzIHk5dCBleHRlbmRzIE1ze2NvbnN0''@;'; put 'put ''cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBwOXQoYyxsKXtFdmUoYyxsKSxsLmFkZChjKX0odGhpcyxHMCksUUModGhpcyxGbCxuZXcgYzl0KSxRQyh0aGlzLHk4LG51bGwpLFFDKHRoaXMsRkQsbnVsbCksUUModGhpcyxjaiwhMSksUUModGhpcyx1aixudWxsKSx4dmUo''@;'; put 'put ''dGhpcywiZ2hvc3RUYWJsZSIsbmV3IGY5dCh0aGlzLmhvdCwobCxhKT0+dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhsLGEpKSkseHZlKHRoaXMsImRldGVjdGVkT3ZlcmxhcHBlZEhlYWRlcnMiLCExKSxRQyh0aGlzLGl5LCgpPT57dmFyIGw7Y29uc3QgYT1udWxsPT09KGw9dGhpcy5ob3QpfHx2''@;'; put 'put ''b2lkIDA9PT1sP3ZvaWQgMDpsLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZighYSlyZXR1cm47Y29uc3R7aGlnaGxpZ2h0OmR9PWE7aWYoZC5pc0hlYWRlcigpJiZkLmNvbD49MCl7Y29uc3QgZj1lcyhGbCx0aGlzKS5maW5kTGVmdE1vc3RDb2x1bW5JbmRleChkLnJvdyxkLmNvbCksdj10''@;'; put 'put ''aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZvY3VzKCk7di52aXN1YWxDZWxsUmFuZ2UuaGlnaGxpZ2h0LmNvbD1mLHYudmlzdWFsQ2VsbFJhbmdlLmZyb20uY29sPWYsdi52aXN1YWxDZWxsUmFuZ2UudG8uY29sPWYsdi5jb21taXQoKX19KX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVko''@;'; put 'put ''KXtyZXR1cm4gVHZlfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDI4MH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbVHZlXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47Y29uc3R7bmVzdGVkSGVh''@;'; put 'put ''ZGVyczphfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpOyghQXJyYXkuaXNBcnJheShhKXx8IUFycmF5LmlzQXJyYXkoYVswXSkpJiZvcyhYc2BZb3VyIE5lc3RlZCBIZWFkZXJzIHBsdWdpbiBjb25maWd1cmF0aW9uIGlzIGludmFsaWQuIFRoZSBzZXR0aW5ncyBoYXMgdG8gYmVceDIwCiAgICAg''@;'; put 'put ''ICAgICAgICAgICAgICAgICAgIHBhc3NlZCBhcyBhbiBhcnJheSBvZiBhcnJheXMgZS5xLiBbWydBMScsIHsgbGFiZWw6ICdBMicsIGNvbHNwYW46IDIgfV1dYCksdGhpcy5hZGRIb29rKCJpbml0IiwoKT0+QTAoRzAsdGhpcyxPOXQpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJM''@;'; put 'put ''b2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gQTAoRzAsbCxQOXQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixm''@;'; put 'put ''dW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBBMChHMCxsLEM5dCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbE1vdXNlRG93biIsZnVuY3Rpb24oKXtm''@;'; put 'put ''b3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gQTAoRzAsbCxTOXQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VPdmVyIixmdW5jdGlvbigpe2Zvcih2YXIgZD1h''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBBMChHMCxsLE05dCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZVVwIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBBMChHMCxsLHg5dCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVTZWxlY3Rpb25IaWdobGlnaHRTZXQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgs''@;'; put 'put ''aD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIEEwKEcwLGwsRTl0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5''@;'; put 'put ''KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBBMChHMCxsLFQ5dCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbiIsKCk9PmVzKGl5LHRoaXMpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb25Gb2N1c1NldCIs''@;'; put 'put ''KCk9PmVzKGl5LHRoaXMpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYmVmb3JlVmlld3BvcnRTY3JvbGxIb3Jpem9udGFsbHkiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJu''@;'; put 'put ''IEEwKEcwLGwsYjl0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzIixkPT5BMChHMCx0aGlzLGs5dCkuY2FsbCh0aGlzLGQpKSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbFdpZHRoIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBBMChHMCxsLEk5dCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2x1bW5IZWFkZXJWYWx1ZSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gQTAoRzAsbCxSOXQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''LGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBBMChHMCxsLF85dCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDb3B5IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtm''@;'; put 'put ''PGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBBMChHMCxsLHc5dCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVTZWxlY3RDb2x1bW5zIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09''@;'; put 'put ''YXJndW1lbnRzW2ZdO3JldHVybiBBMChHMCxsLEE5dCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7Zisr''@;'; put 'put ''KWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBBMChHMCxsLEQ5dCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlGb2N1c2VkRWxlbWVudCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3Vt''@;'; put 'put ''ZW50c1tmXTtyZXR1cm4gQTAoRzAsbCxMOXQpLmNhbGwobCwuLi5oKX0pLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmFkZExvY2FsSG9vaygiY2FjaGVVcGRhdGVkIixlcyhpeSx0aGlzKSksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJjYWNoZVVwZGF0ZWQiLGVz''@;'; put 'put ''KGl5LHRoaXMpKSxzdXBlci5lbmFibGVQbHVnaW4oKSx0aGlzLnVwZGF0ZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe2lmKCF0aGlzLmhvdC52aWV3KXJldHVybjtjb25zdHtuZXN0ZWRIZWFkZXJzOmx9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7ZXMoRmwsdGhpcykuc2V0Q29sdW1uc0xpbWl0''@;'; put 'put ''KHRoaXMuaG90LmNvdW50Q29scygpKSxBcnJheS5pc0FycmF5KGwpJiYodGhpcy5kZXRlY3RlZE92ZXJsYXBwZWRIZWFkZXJzPWVzKEZsLHRoaXMpLnNldFN0YXRlKGwpKSx0aGlzLmRldGVjdGVkT3ZlcmxhcHBlZEhlYWRlcnMmJm9zKFhzYFlvdXIgTmVzdGVkIEhlYWRlcnMgcGx1Z2luIHNl''@;'; put 'put ''dHVwIGNvbnRhaW5zIG92ZXJsYXBwaW5nIGhlYWRlcnMuIFRoaXMga2luZCBvZiBjb25maWd1cmF0aW9uXHgyMAogICAgICAgICAgICAgICAgICAgICAgICBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC5gKSx0aGlzLmVuYWJsZWQmJnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmhpZGlu''@;'; put 'put ''Z01hcHNDb2xsZWN0aW9uLmdldE1lcmdlZFZhbHVlcygpLmZvckVhY2goKGEsZCk9Pntjb25zdCBoPSEwPT09YT8iaGlkZS1jb2x1bW4iOiJzaG93LWNvbHVtbiI7ZXMoRmwsdGhpcykudHJpZ2dlckNvbHVtbk1vZGlmaWNhdGlvbihoLGQpfSksIWVzKHk4LHRoaXMpJiZ0aGlzLmVuYWJsZWQm''@;'; put 'put ''Jno1KHk4LHRoaXMsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuY3JlYXRlQ2hhbmdlc09ic2VydmVyKCJoaWRpbmciKS5zdWJzY3JpYmUoYT0+e2EuZm9yRWFjaChkPT57bGV0e29wOmgsaW5kZXg6ZixuZXdWYWx1ZTp2fT1kO2lmKCJyZXBsYWNlIj09PWgpe2NvbnN0IE09ITA9PT12PyJo''@;'; put 'put ''aWRlLWNvbHVtbiI6InNob3ctY29sdW1uIjtlcyhGbCx0aGlzKS50cmlnZ2VyQ29sdW1uTW9kaWZpY2F0aW9uKE0sZil9fSksdGhpcy5naG9zdFRhYmxlLmJ1aWxkV2lkdGhzTWFwKCl9KSksdGhpcy5naG9zdFRhYmxlLnNldExheWVyc0NvdW50KHRoaXMuZ2V0TGF5ZXJzQ291bnQoKSkuYnVp''@;'; put 'put ''bGRXaWR0aHNNYXAoKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVtb3ZlTG9jYWxIb29rKCJjYWNoZVVwZGF0ZWQiLGVzKGl5LHRoaXMpKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZW1vdmVMb2NhbEhvb2soImNh''@;'; put 'put ''Y2hlVXBkYXRlZCIsZXMoaXksdGhpcykpLHRoaXMuY2xlYXJDb2xzcGFucygpLGVzKEZsLHRoaXMpLmNsZWFyKCksZXMoeTgsdGhpcykudW5zdWJzY3JpYmUoKSx6NSh5OCx0aGlzLG51bGwpLHRoaXMuZ2hvc3RUYWJsZS5jbGVhcigpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1nZXRTdGF0ZU1h''@;'; put 'put ''bmFnZXIoKXtyZXR1cm4gZXMoRmwsdGhpcyl9Z2V0TGF5ZXJzQ291bnQoKXtyZXR1cm4gZXMoRmwsdGhpcykuZ2V0TGF5ZXJzQ291bnQoKX1nZXRIZWFkZXJTZXR0aW5ncyhsLGEpe3JldHVybiBlcyhGbCx0aGlzKS5nZXRIZWFkZXJTZXR0aW5ncyhsLGEpfWNsZWFyQ29sc3BhbnMoKXtpZigh''@;'; put 'put ''dGhpcy5ob3QudmlldylyZXR1cm47Y29uc3R7X3d0Omx9PXRoaXMuaG90LnZpZXcsYT1sLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGgsZD1sLnd0VGFibGUuVEhFQUQsaD1sLnd0T3ZlcmxheXMudG9wT3ZlcmxheS5jbG9uZS53dFRhYmxlLlRIRUFELGY9bC53dE92ZXJsYXlz''@;'; put 'put ''LnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheT9sLnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lLnd0VGFibGUuVEhFQUQ6bnVsbDtmb3IobGV0IHY9MDt2PGE7disrKXtjb25zdCBNPWQuY2hpbGROb2Rlc1t2XTtpZighTSlicmVhaztjb25zdCBEPWguY2hp''@;'; put 'put ''bGROb2Rlc1t2XSxVPWY/Zi5jaGlsZE5vZGVzW3ZdOm51bGw7Zm9yKGxldCB0ZT0wLG9lPU0uY2hpbGROb2Rlcy5sZW5ndGg7dGU8b2U7dGUrKylNLmNoaWxkTm9kZXNbdGVdLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLFZhKE0uY2hpbGROb2Rlc1t0ZV0sImhpZGRlbkhlYWRlciIpLEQm''@;'; put 'put ''JkQuY2hpbGROb2Rlc1t0ZV0mJihELmNoaWxkTm9kZXNbdGVdLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLFZhKEQuY2hpbGROb2Rlc1t0ZV0sImhpZGRlbkhlYWRlciIpKSxmJiZVJiZVLmNoaWxkTm9kZXNbdGVdJiYoVS5jaGlsZE5vZGVzW3RlXS5yZW1vdmVBdHRyaWJ1dGUoImNvbHNw''@;'; put 'put ''YW4iKSxWYShVLmNoaWxkTm9kZXNbdGVdLCJoaWRkZW5IZWFkZXIiKSl9fWhlYWRlclJlbmRlcmVyRmFjdG9yeShsKXt2YXIgYT10aGlzO2NvbnN0IGQ9dGhpcy5ob3Qudmlldy5fd3QuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKTtyZXR1cm4oaCxmKT0+e3ZhciB2O2NvbnN0e2Nv''@;'; put 'put ''bHVtbkluZGV4TWFwcGVyOk0sdmlldzpEfT10aGlzLmhvdDtsZXQgVT1NLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoaCk7bnVsbD09PVUmJihVPWgpLGYucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksVmEoZiwiaGlkZGVuSGVhZGVyIiksVmEoZiwiaGlkZGVuSGVhZGVyVGV4dCIp''@;'; put 'put ''O2NvbnN0e2NvbHNwYW46dGUsaXNIaWRkZW46b2UsaXNQbGFjZWhvbGRlcjp2ZSxoZWFkZXJDbGFzc05hbWVzOndlfT1udWxsIT09KHY9ZXMoRmwsdGhpcykuZ2V0SGVhZGVyU2V0dGluZ3MobCxVKSkmJnZvaWQgMCE9PXY/djp7bGFiZWw6IiJ9O2lmKHZlfHxvZSlpaShmLCJoaWRkZW5IZWFk''@;'; put 'put ''ZXIiKTtlbHNlIGlmKHRlPjEpe3ZhciBGZSxXZSxudDtjb25zdHt3dE92ZXJsYXlzOmR0fT1ELl93dCxtdD1udWxsPT09KEZlPWR0LnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSl8fHZvaWQgMD09PUZlP3ZvaWQgMDpGZS5jbG9uZS53dFRhYmxlLlRIRUFELmNvbnRhaW5zKGYpLCR0PW51''@;'; put 'put ''bGw9PT0oV2U9ZHQuaW5saW5lU3RhcnRPdmVybGF5KXx8dm9pZCAwPT09V2U/dm9pZCAwOldlLmNsb25lLnd0VGFibGUuVEhFQUQuY29udGFpbnMoZik7KG51bGw9PT0obnQ9ZHQudG9wT3ZlcmxheSl8fHZvaWQgMD09PW50P3ZvaWQgMDpudC5jbG9uZS53dFRhYmxlLlRIRUFELmNvbnRhaW5z''@;'; put 'put ''KGYpKSYmVTxkJiZpaShmLCJoaWRkZW5IZWFkZXJUZXh0Iik7Y29uc3QgeW49bXR8fCR0P01hdGgubWluKHRlLGQtaCk6dGU7eW4+MSYmZi5zZXRBdHRyaWJ1dGUoImNvbHNwYW4iLHluKX1pZih0aGlzLmhvdC52aWV3LmFwcGVuZENvbEhlYWRlcihVLGYsZnVuY3Rpb24oKXtyZXR1cm4gYS5n''@;'; put 'put ''ZXRDb2x1bW5IZWFkZXJWYWx1ZSguLi5hcmd1bWVudHMpfSxsKSwhdmUmJiFvZSl7Y29uc3QgZHQ9Zi5xdWVyeVNlbGVjdG9yKCJkaXYucmVsYXRpdmUiKTtkdCYmd2UmJndlLmxlbmd0aD4wJiYoVmEoZHQsdGhpcy5ob3QuZ2V0Q29sdW1uTWV0YShVKS5oZWFkZXJDbGFzc05hbWUpLGlpKGR0''@;'; put 'put ''LHdlKSl9fX1nZXRDb2x1bW5IZWFkZXJWYWx1ZShsLGEpe3ZhciBkO2NvbnN0e2lzSGlkZGVuOmgsaXNQbGFjZWhvbGRlcjpmfT1udWxsIT09KGQ9ZXMoRmwsdGhpcykuZ2V0SGVhZGVyU2V0dGluZ3MoYSxsKSkmJnZvaWQgMCE9PWQ/ZDp7fTtyZXR1cm4gZnx8aD8iIjp0aGlzLmhvdC5nZXRD''@;'; put 'put ''b2xIZWFkZXIobCxhKX1kZXN0cm95KCl7ejUoRmwsdGhpcyxudWxsKSxudWxsIT09ZXMoeTgsdGhpcykmJihlcyh5OCx0aGlzKS51bnN1YnNjcmliZSgpLHo1KHk4LHRoaXMsbnVsbCkpLHN1cGVyLmRlc3Ryb3koKX1fZ2V0SGVhZGVyVHJlZU5vZGVEYXRhQnlDb29yZHMobCl7aWYoIShsLnJv''@;'; put 'put ''dz49MHx8bC5jb2w8MCkpcmV0dXJuIGVzKEZsLHRoaXMpLmdldEhlYWRlclRyZWVOb2RlRGF0YShsLnJvdyxsLmNvbCl9fWZ1bmN0aW9uIGI5dChjLGwpe3ZhciBhO2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCFkKXJldHVybiBjO2NvbnN0e2hpZ2hsaWdo''@;'; put 'put ''dDpofT1kLHtuYXZpZ2FibGVIZWFkZXJzOmZ9PXRoaXMuaG90LmdldFNldHRpbmdzKCksdj10aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCksTT1mP2gucm93Om51bGw9PT0oYT1lcyh1aix0aGlzKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEucm93LEQ9dj9jOmgu''@;'; put 'put ''Y29sLFU9TTwwJiZEPj0wO2lmKHo1KHVqLHRoaXMsbnVsbCksIVUpcmV0dXJuIGM7Y29uc3QgdGU9dGhpcy5ob3QuZ2V0Rmlyc3RGdWxseVZpc2libGVDb2x1bW4oKSxvZT10aGlzLmhvdC5nZXRMYXN0RnVsbHlWaXNpYmxlQ29sdW1uKCksdmU9b2UtdGUrMSx3ZT1lcyhGbCx0aGlzKS5maW5k''@;'; put 'put ''TGVmdE1vc3RDb2x1bW5JbmRleChNLEQpLEZlPWVzKEZsLHRoaXMpLmZpbmRSaWdodE1vc3RDb2x1bW5JbmRleChNLEQpLFdlPUZlLXdlKzE7aWYod2U8dGUmJkZlPm9lKXJldHVybiB3ZTtpZih2KXtsZXQgbnQ9bnVsbDtyZXR1cm4gd2U+PXRlJiZGZT5vZT9XZT52ZT8obC52YWx1ZT0ic3Rh''@;'; put 'put ''cnQiLG50PXdlKToobC52YWx1ZT0iZW5kIixudD1GZSk6d2U8dGUmJkZlPD1vZSYmKFdlPnZlPyhsLnZhbHVlPSJlbmQiLG50PUZlKToobC52YWx1ZT0ic3RhcnQiLG50PXdlKSksbnR9cmV0dXJuIHdlPD10ZT93ZTpGZX1mdW5jdGlvbiBfOXQoYyxsLGEpe2NvbnN0IGQ9ZXMoRmwsdGhpcyku''@;'; put 'put ''Z2V0SGVhZGVyVHJlZU5vZGVEYXRhKGwsYyk7aWYoIWQpcmV0dXJuIGM7Y29uc3R7Y29sdW1uQ3Vyc29yOmgsc2VsZWN0aW9uVHlwZTpmLHNlbGVjdGlvbldpZHRoOnZ9PWEse2lzUm9vdDpNLGNvbHNwYW46RH09ZXMoRmwsdGhpcykuZ2V0SGVhZGVyU2V0dGluZ3MobCxjKTtpZihmPT09bnRl''@;'; put 'put ''KXtpZighTSlyZXR1cm4gZC5jb2x1bW5JbmRleH1lbHNlIGlmKGY9PT11bWUmJihEPnYtaHx8IU0pKXJldHVybiBudWxsO3JldHVybiBjfWZ1bmN0aW9uIHc5dChjLGwsYSl7bGV0e2NvbHVtbkhlYWRlcnNDb3VudDpkfT1hO2lmKDAhPT1kKWZvcihsZXQgZj0wO2Y8bC5sZW5ndGg7ZisrKXtj''@;'; put 'put ''b25zdHtzdGFydFJvdzp2LHN0YXJ0Q29sOk0sZW5kUm93OkQsZW5kQ29sOlV9PWxbZl0sdGU9RC12KzE7aWYodj49MHx8MT09TS1VKzEpYnJlYWs7Zm9yKGxldCB2ZT1NO3ZlPD1VO3ZlKyspZm9yKGxldCB3ZT12O3dlPD1EO3dlKyspe3ZhciBoO2NvbnN0IEZlPXRlK3dlLFdlPXZlLU07MCE9''@;'; put 'put ''PVdlJiYhMT09PShudWxsPT09KGg9ZXMoRmwsdGhpcykuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKHdlLHZlKSl8fHZvaWQgMD09PWg/dm9pZCAwOmguaXNSb290KSYmKGNbRmVdW1dlXT0iIil9fX1mdW5jdGlvbiBDOXQoYyxsLGEsZCl7dGhpcy5fZ2V0SGVhZGVyVHJlZU5vZGVEYXRhQnlDb29y''@;'; put 'put ''ZHMobCkmJihkLmNvbHVtbj0hMCl9ZnVuY3Rpb24gUzl0KGMsbCl7Y29uc3QgYT10aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3JkcyhsKTtpZighYSlyZXR1cm47ejUoRkQsdGhpcyxsLmNsb25lKCkpLHo1KGNqLHRoaXMsITApO2NvbnN0e3NlbGVjdGlvbjpkfT10aGlzLmhvdCxo''@;'; put 'put ''PWQuaXNTZWxlY3RlZCgpP2QuZ2V0U2VsZWN0ZWRSYW5nZSgpLmN1cnJlbnQoKTpudWxsLGY9W10se2NvbHVtbkluZGV4OnYsb3JpZ0NvbHNwYW46TX09YSxEPSFkLmluSW5TZWxlY3Rpb24obCk7Yy5zaGlmdEtleSYmaD9sLmNvbDxoLmZyb20uY29sP2YucHVzaChoLmdldFRvcEVuZENvcm5l''@;'; put 'put ''cigpLmNvbCx2LGwucm93KTpmLnB1c2gobC5jb2w+aC5mcm9tLmNvbD9oLmdldFRvcFN0YXJ0Q29ybmVyKCkuY29sOnYsditNLTEsbC5yb3cpOihjTihjKXx8STYoYykmJkR8fE1nZShjKSkmJmYucHVzaCh2LHYrTS0xLGwucm93KSxkLnNlbGVjdENvbHVtbnMoLi4uZil9ZnVuY3Rpb24gTTl0''@;'; put 'put ''KGMsbCxhLGQpe2lmKCF0aGlzLmhvdC52aWV3LmlzTW91c2VEb3duKCl8fGQuY29sdW1uKXJldHVybjtjb25zdCBoPXRoaXMuX2dldEhlYWRlclRyZWVOb2RlRGF0YUJ5Q29vcmRzKGwpO2lmKCFoKXJldHVybjtjb25zdHtjb2x1bW5JbmRleDpmLG9yaWdDb2xzcGFuOnZ9PWgsTT10aGlzLmhv''@;'; put 'put ''dC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksRD1NLmdldFRvcFN0YXJ0Q29ybmVyKCksVT1NLmdldEJvdHRvbUVuZENvcm5lcigpLHtmcm9tOnRlfT1NO2QuY29sdW1uPSEwLGQuY2VsbD0hMDtjb25zdCBvZT1bXSx2ZT1ncyhsLnJvdywtMS8wLC0xKTtsLmNvbDx0ZS5jb2w/b2UucHVzaChV''@;'; put 'put ''LmNvbCxmLHZlKTpvZS5wdXNoKGwuY29sPnRlLmNvbD9ELmNvbDpmLGYrdi0xLHZlKSx0aGlzLmhvdC5zZWxlY3Rpb24uc2VsZWN0Q29sdW1ucyguLi5vZSl9ZnVuY3Rpb24geDl0KCl7ejUoY2osdGhpcywhMSl9ZnVuY3Rpb24gRTl0KCl7Y29uc3R7bmF2aWdhYmxlSGVhZGVyczpjfT10aGlz''@;'; put 'put ''LmhvdC5nZXRTZXR0aW5ncygpO2lmKCF0aGlzLmhvdC52aWV3LmlzTW91c2VEb3duKCl8fCFlcyhjaix0aGlzKXx8IWMpcmV0dXJuO2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPWwuZ2V0VG9wU3RhcnRDb3JuZXIoKS5jb2wsZD1sLmdldEJvdHRvbUVuZENvcm5l''@;'; put 'put ''cigpLmNvbCx7Y29sdW1uSW5kZXg6aCxvcmlnQ29sc3BhbjpmfT1lcyhGbCx0aGlzKS5nZXRIZWFkZXJUcmVlTm9kZURhdGEoZXMoRkQsdGhpcykucm93LGVzKEZELHRoaXMpLmNvbCk7aWYobC5zZXRIaWdobGlnaHQoZXMoRkQsdGhpcykpLGY+bC5nZXRXaWR0aCgpfHxoPGF8fGgrZi0xPmQp''@;'; put 'put ''e2NvbnN0IHY9ZXMoRmwsdGhpcykuZmluZFRvcE1vc3RFbnRpcmVIZWFkZXJMZXZlbChncyhhLGgsaCtmLTEpLGdzKGQsaCxoK2YtMSkpO2wuaGlnaGxpZ2h0LnJvdz12LGwuaGlnaGxpZ2h0LmNvbD1sLmZyb20uY29sfX1mdW5jdGlvbiBUOXQoYyl7Y29uc3R7aGlnaGxpZ2h0Omx9PXRoaXMu''@;'; put 'put ''aG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSxhPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwucm93K2Mucm93LGwuY29sK2MuY29sKTtpZighKGEuaXNIZWFkZXIoKSYmYS5jb2w+PTApKXJldHVybjtjb25zdCBoPWVzKEZsLHRoaXMpLmZpbmRMZWZ0TW9zdENvbHVtbkluZGV4KGEu''@;'; put 'put ''cm93LGEuY29sKSxmPWVzKEZsLHRoaXMpLmZpbmRSaWdodE1vc3RDb2x1bW5JbmRleChhLnJvdyxhLmNvbCk7aWYoYy5jb2w8MCl7Y29uc3QgTT10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobC5jb2w+PWgmJmwuY29sPD1mP2gtMTpmLC0xKTtj''@;'; put 'put ''LmNvbD1udWxsPT09TT8tdGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZSgwLGwuY29sKTotTWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShNLGwuY29sKS0xLDEpfWVsc2UgaWYoYy5jb2w+MCl7Y29uc3QgTT10aGlz''@;'; put 'put ''LmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobC5jb2w+PWgmJmwuY29sPD1mP2YrMTpoLDEpO2MuY29sPW51bGw9PT1NP3RoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UobC5jb2wsdGhpcy5ob3QuY291bnRDb2xzKCkpOk1h''@;'; put 'put ''dGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UobC5jb2wsTSktMSwxKX19ZnVuY3Rpb24gQTl0KGMsbCxhKXtjb25zdCBkPWMucm93LGg9dGhpcy5fZ2V0SGVhZGVyVHJlZU5vZGVEYXRhQnlDb29yZHMoe3JvdzpkLGNvbDpjLmNvbH0pLGY9dGhpcy5f''@;'; put 'put ''Z2V0SGVhZGVyVHJlZU5vZGVEYXRhQnlDb29yZHMoe3JvdzpkLGNvbDpsLmNvbH0pO3o1KHVqLHRoaXMsYS5jbG9uZSgpKSxsLmNvbDxjLmNvbD8oaCYmKGMuY29sPWguY29sdW1uSW5kZXgraC5vcmlnQ29sc3Bhbi0xKSxmJiYobC5jb2w9Zi5jb2x1bW5JbmRleCkpOmwuY29sPj1jLmNvbCYm''@;'; put 'put ''KGgmJihjLmNvbD1oLmNvbHVtbkluZGV4KSxmJiYobC5jb2w9Zi5jb2x1bW5JbmRleCtmLm9yaWdDb2xzcGFuLTEpKX1mdW5jdGlvbiBrOXQoYyl7aWYoZXMoRmwsdGhpcykuZ2V0TGF5ZXJzQ291bnQoKT4wKXtjLmxlbmd0aD0wO2ZvcihsZXQgbD0wO2w8ZXMoRmwsdGhpcykuZ2V0TGF5ZXJz''@;'; put 'put ''Q291bnQoKTtsKyspYy5wdXNoKHRoaXMuaGVhZGVyUmVuZGVyZXJGYWN0b3J5KGwpKX19ZnVuY3Rpb24gRDl0KGMpe2NvbnN0IGw9ZXMoRmwsdGhpcykuZ2V0TGF5ZXJzQ291bnQoKTtsZXQgYT1jLnN0YXJ0Q29sdW1uLGQ9ISFsO2ZvcihsZXQgaD0wO2g8bDtoKyspe2NvbnN0IGY9ZXMoRmws''@;'; put 'put ''dGhpcykuZmluZExlZnRNb3N0Q29sdW1uSW5kZXgoaCxjLnN0YXJ0Q29sdW1uKSx2PXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZik7aWYoZj49MCYmKGQ9ITEpLGoxKHYpJiZ2PGMuc3RhcnRDb2x1bW4pe2E9djticmVha319Yy5zdGFy''@;'; put 'put ''dENvbHVtbj1kP2VzKEZsLHRoaXMpLmdldEhlYWRlclRyZWVOb2RlRGF0YSgwLGEpLmNvbHVtbkluZGV4OmF9ZnVuY3Rpb24gSTl0KGMsbCl7Y29uc3QgYT10aGlzLmdob3N0VGFibGUuZ2V0V2lkdGgobCk7cmV0dXJuIGM+YT9jOmF9ZnVuY3Rpb24gUjl0KGMsbCxhKXt2YXIgZDtjb25zdHts''@;'; put 'put ''YWJlbDpofT1udWxsIT09KGQ9ZXMoRmwsdGhpcykuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKGEsbCkpJiZ2b2lkIDAhPT1kP2Q6e2xhYmVsOiIifTtyZXR1cm4gaH1mdW5jdGlvbiBMOXQoYyxsKXtpZihjPDApcmV0dXJuIHRoaXMuaG90LmdldENlbGwoYyxlcyhGbCx0aGlzKS5maW5kTGVmdE1v''@;'; put 'put ''c3RDb2x1bW5JbmRleChjLGwpLCEwKX1mdW5jdGlvbiBPOXQoKXt0aGlzLnVwZGF0ZVBsdWdpbigpfWZ1bmN0aW9uIFA5dChjLGwpe2x8fHRoaXMudXBkYXRlUGx1Z2luKCl9ZnVuY3Rpb24gSEQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEY5dChjKXt2YXIgbD1mdW5jdGlvbiBIOXQoYyxs''@;'; put 'put ''KXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRv''@;'; put 'put ''UHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFs''@;'; put 'put ''dWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IFY5dD1jbGFzcyBOOXR7Y29uc3RydWN0b3IobCxhKXtIRCh0aGlzLCJob3QiLHZvaWQgMCksSEQodGhpcywiZGF0YSIsbnVsbCksSEQodGhpcywicGx1Z2luIix2b2lkIDApLEhE''@;'; put 'put ''KHRoaXMsInBhcmVudFJlZmVyZW5jZSIsbmV3IFdlYWtNYXApLEhEKHRoaXMsImNhY2hlIix7bGV2ZWxzOltdLGxldmVsQ291bnQ6MCxyb3dzOltdLG5vZGVJbmZvOm5ldyBXZWFrTWFwfSksdGhpcy5ob3Q9YSx0aGlzLnBsdWdpbj1sfXNldERhdGEobCl7dGhpcy5kYXRhPWx9Z2V0RGF0YSgp''@;'; put 'put ''e3JldHVybiB0aGlzLmRhdGF9Z2V0UmF3U291cmNlRGF0YSgpe2xldCBsPW51bGw7cmV0dXJuIHRoaXMucGx1Z2luLmRpc2FibGVDb3JlQVBJTW9kaWZpZXJzKCksbD10aGlzLmhvdC5nZXRTb3VyY2VEYXRhKCksdGhpcy5wbHVnaW4uZW5hYmxlQ29yZUFQSU1vZGlmaWVycygpLGx9dXBkYXRl''@;'; put 'put ''V2l0aERhdGEobCl7dGhpcy5zZXREYXRhKGwpLHRoaXMucmV3cml0ZUNhY2hlKCl9cmV3cml0ZUNhY2hlKCl7dGhpcy5jYWNoZT17bGV2ZWxzOltdLGxldmVsQ291bnQ6MCxyb3dzOltdLG5vZGVJbmZvOm5ldyBXZWFrTWFwfSxRYSgwLHRoaXMuZGF0YS5sZW5ndGgtMSxsPT57dGhpcy5jYWNo''@;'; put 'put ''ZU5vZGUodGhpcy5kYXRhW2xdLDAsbnVsbCl9KX1jYWNoZU5vZGUobCxhLGQpe3RoaXMuY2FjaGUubGV2ZWxzW2FdfHwodGhpcy5jYWNoZS5sZXZlbHNbYV09W10sdGhpcy5jYWNoZS5sZXZlbENvdW50Kz0xKSx0aGlzLmNhY2hlLmxldmVsc1thXS5wdXNoKGwpLHRoaXMuY2FjaGUucm93cy5w''@;'; put 'put ''dXNoKGwpLHRoaXMuY2FjaGUubm9kZUluZm8uc2V0KGwse3BhcmVudDpkLHJvdzp0aGlzLmNhY2hlLnJvd3MubGVuZ3RoLTEsbGV2ZWw6YX0pLHRoaXMuaGFzQ2hpbGRyZW4obCkmJktuKGwuX19jaGlsZHJlbixoPT57dGhpcy5jYWNoZU5vZGUoaCxhKzEsbCl9KX1nZXREYXRhT2JqZWN0KGwp''@;'; put 'put ''e3JldHVybiBudWxsPT1sP251bGw6dGhpcy5jYWNoZS5yb3dzW2xdfXJlYWRUcmVlTm9kZXMobCxhLGQsaCl7bGV0IGY9ITEsdj1hO2lmKGlzTmFOKHYpJiZ2LmVuZClyZXR1cm4gdjtsZXQgTT1sO3JldHVybiBNfHwoTT17X19jaGlsZHJlbjp0aGlzLmRhdGF9LGY9ITAsdi09MSksbnVsbCE9''@;'; put 'put ''ZCYmdj09PWQ/e3Jlc3VsdDpNLGVuZDohMH06bnVsbCE9aCYmTT09PWg/e3Jlc3VsdDp2LGVuZDohMH06KHYrPTEsTS5fX2NoaWxkcmVuJiZLbihNLl9fY2hpbGRyZW4sRD0+e2lmKHRoaXMucGFyZW50UmVmZXJlbmNlLnNldChELGY/bnVsbDpNKSx2PXRoaXMucmVhZFRyZWVOb2RlcyhELHYs''@;'; put 'put ''ZCxoKSxpc05hTih2KSYmdi5lbmQpcmV0dXJuITF9KSx2KX1tb2NrUGFyZW50KCl7Y29uc3QgbD10aGlzLm1vY2tOb2RlKCk7cmV0dXJuIGwuX19jaGlsZHJlbj10aGlzLmRhdGEsbH1tb2NrTm9kZSgpe2NvbnN0IGw9e307cmV0dXJuIGFzKHRoaXMuZGF0YVswXSwoYSxkKT0+e2xbZF09bnVs''@;'; put 'put ''bH0pLGx9Z2V0Um93SW5kZXgobCl7cmV0dXJuIG51bGw9PWw/bnVsbDp0aGlzLmNhY2hlLm5vZGVJbmZvLmdldChsKS5yb3d9Z2V0Um93SW5kZXhXaXRoaW5QYXJlbnQobCl7bGV0IGE9bnVsbDthPWlzTmFOKGwpP2w6dGhpcy5nZXREYXRhT2JqZWN0KGwpO2NvbnN0IGQ9dGhpcy5nZXRSb3dQ''@;'; put 'put ''YXJlbnQobCk7cmV0dXJuIG51bGw9PWQ/dGhpcy5kYXRhLmluZGV4T2YoYSk6ZC5fX2NoaWxkcmVuLmluZGV4T2YoYSl9Y291bnRBbGxSb3dzKCl7cmV0dXJuIHRoaXMuY291bnRDaGlsZHJlbih7X19jaGlsZHJlbjp0aGlzLmRhdGF9KX1jb3VudENoaWxkcmVuKGwpe2xldCBhPTAsZD1sO3Jl''@;'; put 'put ''dHVybiBpc05hTihkKXx8KGQ9dGhpcy5nZXREYXRhT2JqZWN0KGQpKSxkJiZkLl9fY2hpbGRyZW4/KEtuKGQuX19jaGlsZHJlbixoPT57YSs9MSxoLl9fY2hpbGRyZW4mJihhKz10aGlzLmNvdW50Q2hpbGRyZW4oaCkpfSksYSk6MH1nZXRSb3dQYXJlbnQobCl7bGV0IGE7cmV0dXJuIGE9aXNO''@;'; put 'put ''YU4obCk/bDp0aGlzLmdldERhdGFPYmplY3QobCksdGhpcy5nZXRSb3dPYmplY3RQYXJlbnQoYSl9Z2V0Um93T2JqZWN0UGFyZW50KGwpe3JldHVybiBsJiYib2JqZWN0Ij09dHlwZW9mIGw/dGhpcy5jYWNoZS5ub2RlSW5mby5nZXQobCkucGFyZW50Om51bGx9Z2V0Um93TGV2ZWwobCl7bGV0''@;'; put 'put ''IGE9bnVsbDtyZXR1cm4gYT1pc05hTihsKT9sOnRoaXMuZ2V0RGF0YU9iamVjdChsKSxhP3RoaXMuZ2V0Um93T2JqZWN0TGV2ZWwoYSk6bnVsbH1nZXRSb3dPYmplY3RMZXZlbChsKXtyZXR1cm4gbnVsbD09bD9udWxsOnRoaXMuY2FjaGUubm9kZUluZm8uZ2V0KGwpLmxldmVsfWhhc0NoaWxk''@;'; put 'put ''cmVuKGwpe2xldCBhPWw7cmV0dXJuIGlzTmFOKGEpfHwoYT10aGlzLmdldERhdGFPYmplY3QoYSkpLCEoIWEuX19jaGlsZHJlbnx8IWEuX19jaGlsZHJlbi5sZW5ndGgpfWlzQ2hpbGQobCl7cmV0dXJuIG51bGwhPT10aGlzLmdldFJvd1BhcmVudChsKX1nZXRDaGlsZChsLGEpe3ZhciBkO3Jl''@;'; put 'put ''dHVybihudWxsPT09KGQ9bC5fX2NoaWxkcmVuKXx8dm9pZCAwPT09ZD92b2lkIDA6ZFthXSl8fG51bGx9aXNSb3dIaWdoZXN0TGV2ZWwobCl7cmV0dXJuIXRoaXMuaXNDaGlsZChsKX1pc1BhcmVudChsKXt2YXIgYTtsZXQgZD1sO3JldHVybiBpc05hTihkKXx8KGQ9dGhpcy5nZXREYXRhT2Jq''@;'; put 'put ''ZWN0KGQpKSxkJiYhIWQuX19jaGlsZHJlbiYmMCE9PShudWxsPT09KGE9ZC5fX2NoaWxkcmVuKXx8dm9pZCAwPT09YT92b2lkIDA6YS5sZW5ndGgpfWFkZENoaWxkKGwsYSl7bGV0IGQ9YTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQWRkQ2hpbGQiLGwsZCk7bGV0IGg9bnVsbDtsJiYoaD10''@;'; put 'put ''aGlzLmdldFJvd0luZGV4KGwpKSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ3JlYXRlUm93IixoK3RoaXMuY291bnRDaGlsZHJlbihsKSsxLDEpO2xldCBmPWw7bHx8KGY9dGhpcy5tb2NrUGFyZW50KCkpLGYuX19jaGlsZHJlbnx8KGYuX19jaGlsZHJlbj1bXSksZHx8KGQ9dGhpcy5tb2Nr''@;'; put 'put ''Tm9kZSgpKSxmLl9fY2hpbGRyZW4ucHVzaChkKSx0aGlzLnJld3JpdGVDYWNoZSgpO2NvbnN0IHY9dGhpcy5nZXRSb3dJbmRleChkKTt0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pbnNlcnRJbmRleGVzKHYsMSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ3JlYXRlUm93Iix2LDEpLHRoaXMu''@;'; put 'put ''aG90LnJ1bkhvb2tzKCJhZnRlckFkZENoaWxkIixsLGQpfWFkZENoaWxkQXRJbmRleChsLGEsZCl7bGV0IGYsaD1kO2lmKGh8fChoPXRoaXMubW9ja05vZGUoKSksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUFkZENoaWxkIixsLGgsYSksbCl7Y29uc3QgTT10aGlzLmdldFJvd0luZGV4KGwp''@;'; put 'put ''K2ErMTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ3JlYXRlUm93IixNLDEpLGwuX19jaGlsZHJlbi5zcGxpY2UoYSxudWxsLGgpLHRoaXMucmV3cml0ZUNhY2hlKCksdGhpcy5wbHVnaW4uZGlzYWJsZUNvcmVBUElNb2RpZmllcnMoKSx0aGlzLmhvdC5zZXRTb3VyY2VEYXRhQXRDZWxsKHRo''@;'; put 'put ''aXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQobCksIl9fY2hpbGRyZW4iLGwuX19jaGlsZHJlbiwiTmVzdGVkUm93cy5hZGRDaGlsZEF0SW5kZXgiKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pbnNlcnRJbmRleGVzKE0sMSksdGhpcy5wbHVnaW4uZW5hYmxlQ29yZUFQSU1vZGlmaWVycygp''@;'; put 'put ''LHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNyZWF0ZVJvdyIsTSwxKSxmPU19ZWxzZSB0aGlzLnBsdWdpbi5kaXNhYmxlQ29yZUFQSU1vZGlmaWVycygpLHRoaXMuaG90LmFsdGVyKCJpbnNlcnRfcm93X2Fib3ZlIixhLDEsIk5lc3RlZFJvd3MuYWRkQ2hpbGRBdEluZGV4IiksdGhpcy5wbHVn''@;'; put 'put ''aW4uZW5hYmxlQ29yZUFQSU1vZGlmaWVycygpLGY9dGhpcy5nZXRSb3dJbmRleCh0aGlzLmRhdGFbYV0pO2g9dGhpcy5nZXREYXRhT2JqZWN0KGYpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckFkZENoaWxkIixsLGgsYSl9YWRkU2libGluZyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEm''@;'; put 'put ''JnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06ImJlbG93Ijtjb25zdCBkPXRoaXMudHJhbnNsYXRlVHJpbW1lZFJvdyhsKSxoPXRoaXMuZ2V0Um93UGFyZW50KGQpLGY9dGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChkKTtzd2l0Y2goYSl7Y2FzZSJiZWxvdyI6dGhpcy5h''@;'; put 'put ''ZGRDaGlsZEF0SW5kZXgoaCxmKzEsbnVsbCk7YnJlYWs7Y2FzZSJhYm92ZSI6dGhpcy5hZGRDaGlsZEF0SW5kZXgoaCxmLG51bGwpfX1kZXRhY2hGcm9tUGFyZW50KGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sZD1u''@;'; put 'put ''dWxsO2NvbnN0IGg9W107QXJyYXkuaXNBcnJheShsKT8oUWEobFswXSxsWzJdLHZlPT57Y29uc3Qgd2U9dGhpcy50cmFuc2xhdGVUcmltbWVkUm93KHZlKTtoLnB1c2godGhpcy5nZXREYXRhT2JqZWN0KHdlKSl9KSxRYSgwLGgubGVuZ3RoLTIsdmU9Pnt0aGlzLmRldGFjaEZyb21QYXJlbnQo''@;'; put 'put ''aFt2ZV0sITEpfSksZD1oW2gubGVuZ3RoLTFdKTpkPWw7Y29uc3QgZj10aGlzLmdldFJvd0luZGV4KGQpLHY9dGhpcy5jb3VudENoaWxkcmVuKGQpLE09dGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChkKSxEPXRoaXMuZ2V0Um93UGFyZW50KGQpLFU9dGhpcy5nZXRSb3dQYXJlbnQoRCks''@;'; put 'put ''dGU9dGhpcy5nZXRSb3dJbmRleChVKTtsZXQgb2U9bnVsbDtpZih0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlRGV0YWNoQ2hpbGQiLEQsZCksbnVsbCE9TSl7Y29uc3QgdmU9QXJyYXkuZnJvbShuZXcgQXJyYXkoZit2KzEpLmtleXMoKSkuc3BsaWNlKC0xKih2KzEpKTtpZih0aGlzLmhvdC5y''@;'; put 'put ''dW5Ib29rcygiYmVmb3JlUmVtb3ZlUm93IixmLHYrMSx2ZSx0aGlzLnBsdWdpbi5wbHVnaW5OYW1lKSxELl9fY2hpbGRyZW4uc3BsaWNlKE0sMSksdGhpcy5yZXdyaXRlQ2FjaGUoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSZW1vdmVSb3ciLGYsdisxLHZlLHRoaXMucGx1Z2luLnBsdWdp''@;'; put 'put ''bk5hbWUpLFUpe29lPXRlK3RoaXMuY291bnRDaGlsZHJlbihVKTtjb25zdCB3ZT10aGlzLmdldENoaWxkKFUsdGhpcy5jb3VudENoaWxkcmVuKFUpLTEpLEZlPXRoaXMuZ2V0Um93SW5kZXgod2UpO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLEZlKzEsdisxLHRoaXMucGx1''@;'; put 'put ''Z2luLnBsdWdpbk5hbWUpLFUuX19jaGlsZHJlbi5wdXNoKGQpfWVsc2Ugb2U9dGhpcy5ob3QuY291bnRSb3dzKCkrMSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ3JlYXRlUm93IixvZS0yLHYrMSx0aGlzLnBsdWdpbi5wbHVnaW5OYW1lKSx0aGlzLmRhdGEucHVzaChkKX10aGlzLnJld3Jp''@;'; put 'put ''dGVDYWNoZSgpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNyZWF0ZVJvdyIsb2UtMix2KzEsdGhpcy5wbHVnaW4ucGx1Z2luTmFtZSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyRGV0YWNoQ2hpbGQiLEQsZCx0aGlzLmdldFJvd0luZGV4KGQpKSxhJiZ0aGlzLmhvdC5yZW5kZXIoKX1maWx0''@;'; put 'put ''ZXJEYXRhKGwsYSxkKXtjb25zdCBoPVtdO0tuKGQsZj0+e2gucHVzaCh0aGlzLmdldERhdGFPYmplY3QoZikpfSksS24oaCxmPT57Y29uc3Qgdj10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGYpLE09dGhpcy5nZXRSb3dQYXJlbnQoZik7bnVsbD09PU0/dGhpcy5kYXRhLnNwbGljZSh2''@;'; put 'put ''LDEpOk0uX19jaGlsZHJlbi5zcGxpY2UodiwxKX0pLHRoaXMucmV3cml0ZUNhY2hlKCl9c3BsaWNlRGF0YShsLGEsZCl7Y29uc3QgaD10aGlzLmdldERhdGFPYmplY3QobC0xKTtsZXQgZj1udWxsLHY9bDtoJiZoLl9fY2hpbGRyZW4mJjA9PT1oLl9fY2hpbGRyZW4ubGVuZ3RoPyhmPWgsdj0w''@;'; put 'put ''KTpsPHRoaXMuY291bnRBbGxSb3dzKCkmJihmPXRoaXMuZ2V0Um93UGFyZW50KGwpLHY9dGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChsKSksZj9kP2YuX19jaGlsZHJlbi5zcGxpY2UodixhLC4uLmQpOmYuX19jaGlsZHJlbi5zcGxpY2UodixhKTpkP3RoaXMuZGF0YS5zcGxpY2Uodixh''@;'; put 'put ''LC4uLmQpOnRoaXMuZGF0YS5zcGxpY2UodixhKSx0aGlzLnJld3JpdGVDYWNoZSgpfXN5bmNSb3dXaXRoUmF3U291cmNlKGwpe2xldCBhPWwsZD1hO2Rve2Q9dGhpcy5nZXRSb3dQYXJlbnQoZCksbnVsbCE9PWQmJihhPWQpfXdoaWxlKG51bGwhPT1kKTt0aGlzLnBsdWdpbi5kaXNhYmxlQ29y''@;'; put 'put ''ZUFQSU1vZGlmaWVycygpLHRoaXMuaG90LnNldFNvdXJjZURhdGFBdENlbGwodGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChhKSwiX19jaGlsZHJlbiIsYS5fX2NoaWxkcmVuLCJOZXN0ZWRSb3dzLnN5bmNSb3dXaXRoUmF3U291cmNlIiksdGhpcy5wbHVnaW4uZW5hYmxlQ29yZUFQSU1v''@;'; put 'put ''ZGlmaWVycygpfW1vdmVSb3cobCxhLGQsaCl7Y29uc3QgZj1hPT09dGhpcy5ob3QuY291bnRSb3dzKCksdj10aGlzLmdldFJvd1BhcmVudChsKSxNPXRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQobCksRD12Ll9fY2hpbGRyZW4uc2xpY2UoTSxNKzEpLFU9bD5hO2xldCB0ZT10aGlzLmdl''@;'; put 'put ''dFJvd1BhcmVudChmP2EtMTphKTtudWxsPT10ZSYmKHRlPXRoaXMuZ2V0Um93UGFyZW50KGEtMSkpLG51bGw9PXRlJiYodGU9dGhpcy5nZXREYXRhT2JqZWN0KGEtMSkpLHRlP3RlLl9fY2hpbGRyZW58fCh0ZS5fX2NoaWxkcmVuPVtdKToodGU9dGhpcy5nZXREYXRhT2JqZWN0KGEpLHRlLl9f''@;'; put 'put ''Y2hpbGRyZW49W10pO2NvbnN0IG9lPWZ8fGR8fGg/dGUuX19jaGlsZHJlbi5sZW5ndGg6dGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChhKSx2ZT12PT09dGU7dGUuX19jaGlsZHJlbi5zcGxpY2Uob2UsMCxEWzBdKSx2Ll9fY2hpbGRyZW4uc3BsaWNlKE0rKFUmJnZlPzE6MCksMSksdGhp''@;'; put 'put ''cy5zeW5jUm93V2l0aFJhd1NvdXJjZSh2KSx2ZXx8dGhpcy5zeW5jUm93V2l0aFJhd1NvdXJjZSh0ZSl9dHJhbnNsYXRlVHJpbW1lZFJvdyhsKXtyZXR1cm4gdGhpcy5wbHVnaW4uY29sbGFwc2luZ1VJP3RoaXMucGx1Z2luLmNvbGxhcHNpbmdVSS50cmFuc2xhdGVUcmltbWVkUm93KGwpOmx9''@;'; put 'put ''dW50cmFuc2xhdGVUcmltbWVkUm93KGwpe3JldHVybiB0aGlzLnBsdWdpbi5jb2xsYXBzaW5nVUk/dGhpcy5wbHVnaW4uY29sbGFwc2luZ1VJLnVudHJhbnNsYXRlVHJpbW1lZFJvdyhsKTpsfX07ZnVuY3Rpb24gQXZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBCOXQoYyl7dmFyIGw9ZnVu''@;'; put 'put ''Y3Rpb24gajl0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5''@;'; put 'put ''cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBhaWU9Y2xhc3Mgejl0e2NvbnN0cnVjdG9yKGwsYSl7QXZlKHRoaXMsImhvdCIsdm9pZCAwKSxBdmUodGhpcywicGx1Z2luIix2b2lkIDApLHRoaXMuaG90''@;'; put 'put ''PWEsdGhpcy5wbHVnaW49bH19O2NsYXNzIFU1IGV4dGVuZHMgYWlle3N0YXRpYyBnZXQgQ1NTX0NMQVNTRVMoKXtyZXR1cm57aW5kaWNhdG9yQ29udGFpbmVyOiJodF9uZXN0aW5nTGV2ZWxzIixwYXJlbnQ6Imh0X25lc3RpbmdQYXJlbnQiLGluZGljYXRvcjoiaHRfbmVzdGluZ0xldmVsIixl''@;'; put 'put ''bXB0eUluZGljYXRvcjoiaHRfbmVzdGluZ0xldmVsX2VtcHR5IixidXR0b246Imh0X25lc3RpbmdCdXR0b24iLGV4cGFuZEJ1dHRvbjoiaHRfbmVzdGluZ0V4cGFuZCIsY29sbGFwc2VCdXR0b246Imh0X25lc3RpbmdDb2xsYXBzZSJ9fWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxhKSx0aGlz''@;'; put 'put ''LmRhdGFNYW5hZ2VyPXRoaXMucGx1Z2luLmRhdGFNYW5hZ2VyLHRoaXMuY29sbGFwc2luZ1VJPXRoaXMucGx1Z2luLmNvbGxhcHNpbmdVSSx0aGlzLnJvd0hlYWRlcldpZHRoQ2FjaGU9bnVsbH1hcHBlbmRMZXZlbEluZGljYXRvcnMobCxhKXtjb25zdCBkPXRoaXMuaG90LnRvUGh5c2ljYWxS''@;'; put 'put ''b3cobCksaD10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QoZCk7aWYoIWgpcmV0dXJuO2NvbnN0IGY9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dMZXZlbChkKSx2PWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkRJViIpWzBdLE09di5xdWVyeVNlbGVjdG9yKCJzcGFuLnJvd0hlYWRlciIp''@;'; put 'put ''LEQ9di5xdWVyeVNlbGVjdG9yQWxsKCdbY2xhc3NePSJodF9uZXN0aW5nIl0nKSxVPXRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3M7aWYoS24oRCx0ZT0+e3RlJiZ2LnJlbW92ZUNoaWxkKHRlKX0pLGlpKGEsVTUuQ1NTX0NMQVNTRVMuaW5kaWNhdG9yQ29udGFpbmVyKSxmKXtjb25z''@;'; put 'put ''dHtyb290RG9jdW1lbnQ6dGV9PXRoaXMuaG90LG9lPU0uY2xvbmVOb2RlKCEwKTt2LmlubmVySFRNTD0iIixRYSgwLGYtMSwoKT0+e2NvbnN0IHZlPXRlLmNyZWF0ZUVsZW1lbnQoIlNQQU4iKTtpaSh2ZSxVNS5DU1NfQ0xBU1NFUy5lbXB0eUluZGljYXRvciksdi5hcHBlbmRDaGlsZCh2ZSl9''@;'; put 'put ''KSx2LmFwcGVuZENoaWxkKG9lKX1pZih0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGgpKXtjb25zdCB0ZT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7VSYmWmEodGUsW1g5KCldKSxpaShhLFU1LkNTU19DTEFTU0VTLnBhcmVudCksdGhpcy5jb2xsYXBz''@;'; put 'put ''aW5nVUkuYXJlQ2hpbGRyZW5Db2xsYXBzZWQoZCk/KGlpKHRlLGAke1U1LkNTU19DTEFTU0VTLmJ1dHRvbn0gJHtVNS5DU1NfQ0xBU1NFUy5leHBhbmRCdXR0b259YCksVSYmWmEoYSxbRmYoITEpXSkpOihpaSh0ZSxgJHtVNS5DU1NfQ0xBU1NFUy5idXR0b259ICR7VTUuQ1NTX0NMQVNTRVMu''@;'; put 'put ''Y29sbGFwc2VCdXR0b259YCksVSYmWmEoYSxbRmYoITApXSkpLHYuYXBwZW5kQ2hpbGQodGUpfX11cGRhdGVSb3dIZWFkZXJXaWR0aChsKXtsZXQgYT1sO2F8fChhPXRoaXMuZGF0YU1hbmFnZXIuY2FjaGUubGV2ZWxDb3VudCk7bGV0IGQ9MTE7dGhpcy5ob3Quc3R5bGVzSGFuZGxlci5pc0Ns''@;'; put 'put ''YXNzaWNUaGVtZSgpfHwoZD0yKnRoaXMuaG90LnN0eWxlc0hhbmRsZXIuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1ob3Jpem9udGFsLXBhZGRpbmciKSksdGhpcy5yb3dIZWFkZXJXaWR0aENhY2hlPU1hdGgubWF4KDUwLGQrMTAqYSsyNSksdGhpcy5ob3QucmVuZGVyKCl9fWNvbnN0IGt2''@;'; put 'put ''ZT1VNSxaOXQ9Y2xhc3MgVTl0IGV4dGVuZHMgYWlle2NvbnN0cnVjdG9yKGwsYSl7dmFyIGQ7c3VwZXIobCxhKSxkPXRoaXMsdGhpcy5kYXRhTWFuYWdlcj10aGlzLnBsdWdpbi5kYXRhTWFuYWdlcix0aGlzLmNvbGxhcHNlZFJvd3M9W10sdGhpcy5jb2xsYXBzZWRSb3dzU3Rhc2g9e3N0YXNo''@;'; put 'put ''OmZ1bmN0aW9uKCl7bGV0IGg9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtkLmxhc3RDb2xsYXBzZWRSb3dzPWQuY29sbGFwc2VkUm93cy5zbGljZSgwKSxkLmV4cGFuZE11bHRpcGxlQ2hpbGRyZW4oZC5sYXN0Q29sbGFwc2VkUm93cyxo''@;'; put 'put ''KX0sc2hpZnRTdGFzaDpmdW5jdGlvbihoLGYpe2xldCB2PWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxO251bGw9PWYmJihmPTEvMCksS24oZC5sYXN0Q29sbGFwc2VkUm93cywoTSxEKT0+e00+PWgmJk08ZiYmKGQubGFzdENvbGxhcHNl''@;'; put 'put ''ZFJvd3NbRF09TSt2KX0pfSxhcHBseVN0YXNoOmZ1bmN0aW9uKCl7ZC5jb2xsYXBzZU11bHRpcGxlQ2hpbGRyZW4oZC5sYXN0Q29sbGFwc2VkUm93cywhKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdKSxkLmxhc3RDb2xsYXBzZWRSb3dz''@;'; put 'put ''PXZvaWQgMH0sdHJpbVN0YXNoOihoLGYpPT57UWEoaCxoK2YtMSx2PT57Y29uc3QgTT10aGlzLmxhc3RDb2xsYXBzZWRSb3dzLmluZGV4T2Yodik7TT4tMSYmdGhpcy5sYXN0Q29sbGFwc2VkUm93cy5zcGxpY2UoTSwxKX0pfX19Y29sbGFwc2VDaGlsZHJlbihsKXtsZXQgYT0hKGFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtjb25zdCBoPVtdO2xldCBmPW51bGwsdj1udWxsLE09bnVsbDtyZXR1cm4gaXNOYU4obCk/KGY9''@;'; put 'put ''bCx2PXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoZikpOihmPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChsKSx2PWwpLHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oZikmJktuKGYuX19jaGlsZHJlbixEPT57aC5wdXNoKHRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5k''@;'; put 'put ''ZXgoRCkpfSksTT10aGlzLmNvbGxhcHNlUm93cyhoLCEwLCExKSxkJiZ0aGlzLnRyaW1Sb3dzKE0pLGEmJnRoaXMucmVuZGVyQW5kQWRqdXN0KCksLTE9PT10aGlzLmNvbGxhcHNlZFJvd3MuaW5kZXhPZih2KSYmdGhpcy5jb2xsYXBzZWRSb3dzLnB1c2godiksTX1jb2xsYXBzZU11bHRpcGxl''@;'; put 'put ''Q2hpbGRyZW4obCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07Y29uc3QgaD1bXTtLbihsLGY9PntoLnB1c2go''@;'; put 'put ''Li4udGhpcy5jb2xsYXBzZUNoaWxkcmVuKGYsITEsITEpKX0pLGQmJnRoaXMudHJpbVJvd3MoaCksYSYmdGhpcy5yZW5kZXJBbmRBZGp1c3QoKX1jb2xsYXBzZVJvdyhsKXt0aGlzLmNvbGxhcHNlUm93cyhbbF0sIShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8''@;'; put 'put ''fGFyZ3VtZW50c1sxXSl9Y29sbGFwc2VSb3dzKGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0IGg9W107''@;'; put 'put ''cmV0dXJuIEtuKGwsZj0+e2gucHVzaChmKSxhJiZ0aGlzLmNvbGxhcHNlQ2hpbGRSb3dzKGYsaCl9KSxkJiZ0aGlzLnRyaW1Sb3dzKGgpLGh9Y29sbGFwc2VDaGlsZFJvd3MobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltd''@;'; put 'put ''LGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTt0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGwpJiZLbih0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCkuX19jaGlsZHJlbix2PT57Y29uc3QgTT10aGlzLmRhdGFNYW5h''@;'; put 'put ''Z2VyLmdldFJvd0luZGV4KHYpO2EucHVzaChNKSx0aGlzLmNvbGxhcHNlQ2hpbGRSb3dzKE0sYSl9KSxoJiZ0aGlzLnRyaW1Sb3dzKGEpfWV4cGFuZFJvdyhsKXt0aGlzLmV4cGFuZFJvd3MoW2xdLCEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVu''@;'; put 'put ''dHNbMV0pfWV4cGFuZFJvd3MobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD1bXTtyZXR1cm4gS24o''@;'; put 'put ''bCxmPT57aC5wdXNoKGYpLGEmJnRoaXMuZXhwYW5kQ2hpbGRSb3dzKGYsaCl9KSxkJiZ0aGlzLnVudHJpbVJvd3MoaCksaH1leHBhbmRDaGlsZFJvd3MobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdLGg9YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTt0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGwpJiZLbih0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCkuX19jaGlsZHJlbix2PT57aWYoIXRoaXMuaXNBbnlQYXJlbnRDb2xsYXBzZWQodikp''@;'; put 'put ''e2NvbnN0IE09dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleCh2KTthLnB1c2goTSksdGhpcy5leHBhbmRDaGlsZFJvd3MoTSxhKX19KSxoJiZ0aGlzLnVudHJpbVJvd3MoYSl9ZXhwYW5kQ2hpbGRyZW4obCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50''@;'; put 'put ''c1sxXSl8fGFyZ3VtZW50c1sxXSxkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07Y29uc3QgaD1bXTtsZXQgZj1udWxsLHY9bnVsbCxNPW51bGw7cmV0dXJuIGlzTmFOKGwpPyhmPWwsdj10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0lu''@;'; put 'put ''ZGV4KGwpKTooZj10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCksdj1sKSx0aGlzLmNvbGxhcHNlZFJvd3Muc3BsaWNlKHRoaXMuY29sbGFwc2VkUm93cy5pbmRleE9mKHYpLDEpLHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oZikmJktuKGYuX19jaGlsZHJlbixEPT57Y29u''@;'; put 'put ''c3QgVT10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KEQpO2gucHVzaChVKX0pLE09dGhpcy5leHBhbmRSb3dzKGgsITAsITEpLGQmJnRoaXMudW50cmltUm93cyhNKSxhJiZ0aGlzLnJlbmRlckFuZEFkanVzdCgpLE19ZXhwYW5kTXVsdGlwbGVDaGlsZHJlbihsKXtsZXQgYT0hKGFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtjb25zdCBoPVtdO0tuKGwsZj0+e2gucHVzaCguLi50aGlzLmV4cGFuZENoaWxkcmVuKGYs''@;'; put 'put ''ITEsITEpKX0pLGQmJnRoaXMudW50cmltUm93cyhoKSxhJiZ0aGlzLnJlbmRlckFuZEFkanVzdCgpfWNvbGxhcHNlQWxsKCl7Y29uc3QgbD10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGEoKSxhPVtdO0tuKGwsZD0+e3RoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oZCkmJmEucHVzaChkKX0p''@;'; put 'put ''LHRoaXMuY29sbGFwc2VNdWx0aXBsZUNoaWxkcmVuKGEpLHRoaXMucmVuZGVyQW5kQWRqdXN0KCl9ZXhwYW5kQWxsKCl7Y29uc3QgbD10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGEoKSxhPVtdO0tuKGwsZD0+e3RoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oZCkmJmEucHVzaChkKX0pLHRo''@;'; put 'put ''aXMuZXhwYW5kTXVsdGlwbGVDaGlsZHJlbihhKSx0aGlzLnJlbmRlckFuZEFkanVzdCgpfXRyaW1Sb3dzKGwpe3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57S24obCxhPT57dGhpcy5wbHVnaW4uY29sbGFwc2VkUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgoYSwhMCl9KX0sITApfXVudHJp''@;'; put 'put ''bVJvd3MobCl7dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntLbihsLGE9Pnt0aGlzLnBsdWdpbi5jb2xsYXBzZWRSb3dzTWFwLnNldFZhbHVlQXRJbmRleChhLCExKX0pfSwhMCl9YXJlQ2hpbGRyZW5Db2xsYXBzZWQobCl7bGV0IGE9aXNOYU4obCk/bDp0aGlzLmRhdGFNYW5hZ2VyLmdl''@;'; put 'put ''dERhdGFPYmplY3QobCksZD0hMDtyZXR1cm4gbnVsbD09PWEmJihhPXtfX2NoaWxkcmVuOnRoaXMuZGF0YU1hbmFnZXIuZGF0YX0pLHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oYSkmJktuKGEuX19jaGlsZHJlbixoPT57Y29uc3QgZj10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4''@;'; put 'put ''KGgpO2lmKCF0aGlzLnBsdWdpbi5jb2xsYXBzZWRSb3dzTWFwLmdldFZhbHVlQXRJbmRleChmKSlyZXR1cm4gZD0hMSwhMX0pLGR9aXNBbnlQYXJlbnRDb2xsYXBzZWQobCl7bGV0IGE9bDtmb3IoO251bGwhPT1hOyl7YT10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd1BhcmVudChhKTtjb25zdCBk''@;'; put 'put ''PXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoYSk7aWYodGhpcy5jb2xsYXBzZWRSb3dzLmluZGV4T2YoZCk+LTEpcmV0dXJuITB9cmV0dXJuITF9dG9nZ2xlU3RhdGUobCxhKXtpZihhLmNvbD49MClyZXR1cm47Y29uc3QgZD10aGlzLnRyYW5zbGF0ZVRyaW1tZWRSb3coYS5yb3cpO0Nv''@;'; put 'put ''KGwudGFyZ2V0LGt2ZS5DU1NfQ0xBU1NFUy5idXR0b24pJiYodGhpcy5hcmVDaGlsZHJlbkNvbGxhcHNlZChkKT90aGlzLmV4cGFuZENoaWxkcmVuKGQpOnRoaXMuY29sbGFwc2VDaGlsZHJlbihkKSxFMihsKSl9dHJhbnNsYXRlVHJpbW1lZFJvdyhsKXtyZXR1cm4gdGhpcy5ob3QudG9QaHlz''@;'; put 'put ''aWNhbFJvdyhsKX11bnRyYW5zbGF0ZVRyaW1tZWRSb3cobCl7cmV0dXJuIHRoaXMuaG90LnRvVmlzdWFsUm93KGwpfXJlbmRlckFuZEFkanVzdCgpe3RoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5ob3QucmVuZGVyKCl9fTt2YXIgRHZlPW5ldyBXZWFrTWFwO2NvbnN0''@;'; put 'put ''IFE5dD1jbGFzcyBKOXQgZXh0ZW5kcyBhaWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIEc5dChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gJDl0KGMpe3ZhciBsPWZ1bmN0aW9uIEs5dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7''@;'; put 'put ''dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFs''@;'; put 'put ''dWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdy''@;'; put 'put ''aXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsImRhdGFNYW5hZ2VyIix0aGlzLnBsdWdpbi5kYXRhTWFuYWdlciksZnVuY3Rpb24gVzl0KGMsbCxhKXsoZnVuY3Rpb24gWTl0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUg''@;'; put 'put ''cHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX0odGhpcyxEdmUse3Jvd19hYm92ZToobCxhKT0+e3RoaXMuZGF0YU1hbmFnZXIuYWRkU2libGluZyhhW2EubGVuZ3RoLTFdLnN0YXJ0LnJvdywiYWJvdmUiKX0scm93X2JlbG93OihsLGEpPT57''@;'; put 'put ''dGhpcy5kYXRhTWFuYWdlci5hZGRTaWJsaW5nKGFbYS5sZW5ndGgtMV0uc3RhcnQucm93LCJiZWxvdyIpfX0pfWFwcGVuZE9wdGlvbnMobCl7Y29uc3QgYT1be2tleToiYWRkX2NoaWxkIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShuZWUpfSxjYWxsYmFjazooKT0+''@;'; put 'put ''e2NvbnN0IGQ9dGhpcy5kYXRhTWFuYWdlci50cmFuc2xhdGVUcmltbWVkUm93KHRoaXMuaG90LmdldFNlbGVjdGVkQWN0aXZlKClbMF0pLGg9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGQpO3RoaXMuZGF0YU1hbmFnZXIuYWRkQ2hpbGQoaCl9LGRpc2FibGVkOigpPT57Y29uc3Qg''@;'; put 'put ''ZD10aGlzLmhvdC5nZXRTZWxlY3RlZEFjdGl2ZSgpO3JldHVybiFkfHxkWzBdPDB8fHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8dGhpcy5ob3QuY291bnRSb3dzKCk+PXRoaXMuaG90LmdldFNldHRpbmdzKCkubWF4Um93c319LHtrZXk6ImRldGFjaF9m''@;'; put 'put ''cm9tX3BhcmVudCIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UocmVlKX0sY2FsbGJhY2s6KCk9Pnt0aGlzLmRhdGFNYW5hZ2VyLmRldGFjaEZyb21QYXJlbnQodGhpcy5ob3QuZ2V0U2VsZWN0ZWRBY3RpdmUoKSl9LGRpc2FibGVkOigpPT57Y29uc3QgZD10aGlzLmhv''@;'; put 'put ''dC5nZXRTZWxlY3RlZEFjdGl2ZSgpLGg9dGhpcy5kYXRhTWFuYWdlci50cmFuc2xhdGVUcmltbWVkUm93KGRbMF0pO3JldHVybiF0aGlzLmRhdGFNYW5hZ2VyLmdldFJvd1BhcmVudChoKXx8IWR8fGRbMF08MHx8dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigp''@;'; put 'put ''fHx0aGlzLmhvdC5jb3VudFJvd3MoKT49dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5tYXhSb3dzfX0se25hbWU6Ii0tLS0tLS0tLSJ9XTtyZXR1cm4gUWEoMCxsLml0ZW1zLmxlbmd0aC0xLGQ9PntpZigwPT09ZClyZXR1cm4gS24oYSwoaCxmKT0+e2wuaXRlbXMuc3BsaWNlKGQrZiwwLGgpfSks''@;'; put 'put ''ITF9KSx0aGlzLm1vZGlmeVJvd0luc2VydGluZ09wdGlvbnMobCl9bW9kaWZ5Um93SW5zZXJ0aW5nT3B0aW9ucyhsKXtyZXR1cm4gUWEoMCxsLml0ZW1zLmxlbmd0aC0xLGE9Pntjb25zdCBkPWZ1bmN0aW9uIFg5dChjLGwpe3JldHVybiBjLmdldChmdW5jdGlvbiBxOXQoYyxsLGEpe2lmKCJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfShjLGwpKX0oRHZlLHRoaXMpW2wuaXRlbXNbYV0ua2V5''@;'; put 'put ''XTtudWxsIT1kJiYobC5pdGVtc1thXS5jYWxsYmFjaz1kKX0pLGx9fTtmdW5jdGlvbiBkaihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gZXZ0KGMpe3ZhciBsPWZ1bmN0aW9uIHR2dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9Qcmlt''@;'; put 'put ''aXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmci''@;'; put 'put ''PT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9''@;'; put 'put ''Y2xhc3MgbnZ0e2NvbnN0cnVjdG9yKGwpe2RqKHRoaXMsInBsdWdpbiIsdm9pZCAwKSxkaih0aGlzLCJob3QiLHZvaWQgMCksZGoodGhpcywiZGF0YU1hbmFnZXIiLHZvaWQgMCksZGoodGhpcywiY29sbGFwc2luZ1VJIix2b2lkIDApLHRoaXMucGx1Z2luPWwsdGhpcy5ob3Q9bC5ob3QsdGhp''@;'; put 'put ''cy5kYXRhTWFuYWdlcj1sLmRhdGFNYW5hZ2VyLHRoaXMuY29sbGFwc2luZ1VJPWwuY29sbGFwc2luZ1VJfW9uQmVmb3JlUm93TW92ZShsLGEsZCxoKXtpZih0aGlzLmRpc3BsYXlBUElDb21wYXRpYmlsaXR5V2FybmluZyh7cm93czpsLGZpbmFsSW5kZXg6YSxkcm9wSW5kZXg6ZCxtb3ZlUG9z''@;'; put 'put ''c2libGU6aH0pKXJldHVybiExO3RoaXMubW92ZWRUb0NvbGxhcHNlZD0hMTtjb25zdCB2PWQ9PT10aGlzLmhvdC5jb3VudFJvd3MoKSxNPXY/dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk6dGhpcy5kYXRhTWFuYWdlci50cmFuc2xhdGVUcmltbWVkUm93KGQpO2xldCBEPSEwO2NvbnN0IFU9''@;'; put 'put ''bC5tYXAoRmU9PntpZighRClyZXR1cm4hMTtjb25zdCBXZT10aGlzLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3coRmUpO3JldHVybiBEPXRoaXMuc2hvdWxkQWxsb3dNb3ZpbmcoV2UsTSksV2V9KSx0ZT0tMT09PVUuaW5kZXhPZihNKTtpZighRHx8IXRlKXJldHVybiExO2NvbnN0''@;'; put 'put ''IG9lPXRoaXMuZ2V0QmFzZVBhcmVudChVKSx2ZT10aGlzLmdldFRhcmdldFBhcmVudCh2LE0pLHdlPW9lPT09dmU7cmV0dXJuIHRoaXMubW92ZWRUb0NvbGxhcHNlZD10aGlzLmNvbGxhcHNpbmdVSS5hcmVDaGlsZHJlbkNvbGxhcHNlZCh2ZSksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2Vk''@;'; put 'put ''Um93c1N0YXNoLnN0YXNoKCksdGhpcy5zaGlmdENvbGxhcHNpYmxlUGFyZW50c0xvY2F0aW9ucyhVLE0sd2UpLHRoaXMubW92ZVJvd3MoVSxNLHZlKSx0aGlzLmRhdGFNYW5hZ2VyLnJld3JpdGVDYWNoZSgpLHRoaXMubW92ZUNlbGxzTWV0YShVLE0pLHRoaXMuY29sbGFwc2luZ1VJLmNvbGxh''@;'; put 'put ''cHNlZFJvd3NTdGFzaC5hcHBseVN0YXNoKCExKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSb3dNb3ZlIixsLGEsZCxoLGgmJnRoaXMuaXNSb3dPcmRlckNoYW5nZWQobCxhKSksdGhpcy5ob3QucmVuZGVyKCksdGhpcy5zZWxlY3RDZWxscyhsLGQpLCExfWRpc3BsYXlBUElDb21wYXRpYmls''@;'; put 'put ''aXR5V2FybmluZyhsKXtjb25zdHtyb3dzOmEsZmluYWxJbmRleDpkLGRyb3BJbmRleDpoLG1vdmVQb3NzaWJsZTpmfT1sO2xldCB2PSExO3JldHVybiBiYyhoKSYmKG9zKFhzYFNpbmNlIHZlcnNpb24gOC4wLjAgb2YgdGhlIEhhbmRzb250YWJsZSB0aGUgJ21vdmVSb3dzJyBtZXRob2QgaXNu''@;'; put 'put ''J3QgdXNlZCBmb3IgbW92aW5nIHJvd3NceDIwCiAgICAgIHdoZW4gdGhlIE5lc3RlZFJvd3MgcGx1Z2luIGlzIGVuYWJsZWQuIFBsZWFzZSB1c2UgdGhlICdkcmFnUm93cycgbWV0aG9kIGluc3RlYWQuYCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUm93TW92ZSIsYSxkLGgsZiwhMSksdj0h''@;'; put 'put ''MCksdn1zaG91bGRBbGxvd01vdmluZyhsLGEpe3JldHVybiEodGhpcy5kYXRhTWFuYWdlci5pc1BhcmVudChsKXx8dGhpcy5kYXRhTWFuYWdlci5pc1Jvd0hpZ2hlc3RMZXZlbChsKXx8bD09PWF8fDA9PT1hKX1nZXRCYXNlUGFyZW50KGwpe3JldHVybiB0aGlzLmRhdGFNYW5hZ2VyLmdldFJv''@;'; put 'put ''d1BhcmVudChsWzBdKX1nZXRUYXJnZXRQYXJlbnQobCxhKXtsZXQgZD10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd1BhcmVudChsP2EtMTphKTtyZXR1cm4gbnVsbD09ZCYmKGQ9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dQYXJlbnQoYS0xKSksZH1zaGlmdENvbGxhcHNpYmxlUGFyZW50c0xvY2F0''@;'; put 'put ''aW9ucyhsLGEsZCl7ZHx8KE1hdGgubWF4KC4uLmwpPD1hP3RoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zaGlmdFN0YXNoKGxbMF0sYSwtMSpsLmxlbmd0aCk6dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2goYSxsWzBdLGwubGVuZ3Ro''@;'; put 'put ''KSl9bW92ZVJvd3MobCxhLGQpe2NvbnN0IGg9YT09PXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoZCkrdGhpcy5kYXRhTWFuYWdlci5jb3VudENoaWxkcmVuKGQpKzE7dGhpcy5ob3QuYmF0Y2hSZW5kZXIoKCk9PntsLmZvckVhY2goZj0+e3RoaXMuZGF0YU1hbmFnZXIubW92ZVJvdyhm''@;'; put 'put ''LGEsdGhpcy5tb3ZlZFRvQ29sbGFwc2VkLGgpfSl9KX1tb3ZlQ2VsbHNNZXRhKGwsYSl7Y29uc3QgZD1bXSxoPU1hdGgubWF4KC4uLmwpPGE7bC5mb3JFYWNoKGY9PntkLnB1c2godGhpcy5ob3QuZ2V0Q2VsbE1ldGFBdFJvdyhmKSl9KSx0aGlzLmhvdC5zcGxpY2VDZWxsc01ldGEobFswXSxs''@;'; put 'put ''Lmxlbmd0aCksdGhpcy5ob3Quc3BsaWNlQ2VsbHNNZXRhKGEtKGg/ZC5sZW5ndGg6MCksMCwuLi5kKX1zZWxlY3RDZWxscyhsLGEpe2NvbnN0IGQ9bC5sZW5ndGg7bGV0IGg9MCxmPTA7aWYodGhpcy5tb3ZlZFRvQ29sbGFwc2VkKXtsZXQgdj1udWxsO3Y9dGhpcy5kYXRhTWFuYWdlci50cmFu''@;'; put 'put ''c2xhdGVUcmltbWVkUm93KGxbZC0xXTxhP2EtZDphKTtjb25zdCBNPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KG51bGw9PT12P3RoaXMuaG90LmNvdW50U291cmNlUm93cygpLTE6di0xKSxEPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoTSk7aD10aGlzLmRhdGFNYW5hZ2Vy''@;'; put 'put ''LnVudHJhbnNsYXRlVHJpbW1lZFJvdyhEKSxmPWh9ZWxzZSBsW2QtMV08YT8oZj1hLTEsaD1mLWQrMSk6KGg9YSxmPWgrZC0xKTt0aGlzLmhvdC5zZWxlY3RDZWxscyhbW2gsMCxmLHRoaXMuaG90LmNvdW50Q29scygpLTFdXSwhMSl9aXNSb3dPcmRlckNoYW5nZWQobCxhKXtyZXR1cm4gbC5z''@;'; put 'put ''b21lKChkLGgpPT5kLWghPT1hKX19ZnVuY3Rpb24gSXZlKGMsbCxhKXtSdmUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFJ2ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24g''@;'; put 'put ''YW4gb2JqZWN0Iil9ZnVuY3Rpb24gb2llKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBpdnQoYyl7dmFyIGw9ZnVuY3Rpb24gYXZ0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9''@;'; put 'put ''YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJz''@;'; put 'put ''dHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBoaihjLGwpe3JldHVybiBjLmdl''@;'; put 'put ''dChrMChjLGwpKX1mdW5jdGlvbiBmaihjLGwsYSl7cmV0dXJuIGMuc2V0KGswKGMsbCksYSksYX1mdW5jdGlvbiBrMChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigi''@;'; put 'put ''UHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgcGo9Im5lc3RlZFJvd3MiLEx2ZT1wajt2YXIgZ2o9bmV3IFdlYWtNYXAsZVM9bmV3IFdlYWtNYXAsJDA9bmV3IFdlYWtTZXQ7Y2xhc3MgbHZ0IGV4dGVuZHMgTXN7Y29uc3RydWN0b3IoKXtzdXBl''@;'; put 'put ''ciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIHJ2dChjLGwpe1J2ZShjLGwpLGwuYWRkKGMpfSh0aGlzLCQwKSxvaWUodGhpcywiZGF0YU1hbmFnZXIiLG51bGwpLG9pZSh0aGlzLCJoZWFkZXJzVUkiLG51bGwpLG9pZSh0aGlzLCJjb2xsYXBzZWRSb3dzTWFwIixudWxsKSxJdmUodGhpcyxnaiwh''@;'; put 'put ''MSksSXZlKHRoaXMsZVMsITEpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBwan1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAzMDB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3BqXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlz''@;'; put 'put ''O3RoaXMuZW5hYmxlZHx8KHRoaXMuY29sbGFwc2VkUm93c01hcD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCgibmVzdGVkUm93cyIsbmV3IGZrKSx0aGlzLmRhdGFNYW5hZ2VyPW5ldyBWOXQodGhpcyx0aGlzLmhvdCksdGhpcy5jb2xsYXBzaW5nVUk9bmV3IFo5dCh0aGlz''@;'; put 'put ''LHRoaXMuaG90KSx0aGlzLmhlYWRlcnNVST1uZXcga3ZlKHRoaXMsdGhpcy5ob3QpLHRoaXMuY29udGV4dE1lbnVVST1uZXcgUTl0KHRoaXMsdGhpcy5ob3QpLHRoaXMucm93TW92ZUNvbnRyb2xsZXI9bmV3IG52dCh0aGlzKSx0aGlzLmFkZEhvb2soImFmdGVySW5pdCIsZnVuY3Rpb24oKXtm''@;'; put 'put ''b3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gazAoJDAsbCxDdnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlVmlld1JlbmRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gazAoJDAsbCxTdnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93RGF0YSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbk1vZGlmeVJvd0RhdGEoLi4uYXJndW1l''@;'; put 'put ''bnRzKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5U291cmNlTGVuZ3RoIixmdW5jdGlvbigpe3JldHVybiBsLm9uTW9kaWZ5U291cmNlTGVuZ3RoKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZURhdGFTcGxpY2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVEYXRhU3Bs''@;'; put 'put ''aWNlKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImZpbHRlckRhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGswKCQwLGwsZHZ0KS5jYWxsKGwsLi4uZCl9KSx0''@;'; put 'put ''aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gazAoJDAsbCxodnQpLmNhbGwobCwuLi5kKX0pLHRo''@;'; put 'put ''aXMuYWRkSG9vaygiYWZ0ZXJHZXRSb3dIZWFkZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGswKCQwLGwsZnZ0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJl''@;'; put 'put ''Zm9yZU9uQ2VsbE1vdXNlRG93biIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gazAoJDAsbCx1dnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3Zl''@;'; put 'put ''Um93IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrMCgkMCxsLG12dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsZnVuY3Rpb24oKXtm''@;'; put 'put ''b3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gazAoJDAsbCxndnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQWRkQ2hpbGQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGswKCQwLGwsdnZ0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQWRkQ2hpbGQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJy''@;'; put 'put ''YXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGswKCQwLGwseXZ0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZURldGFjaENoaWxkIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7''@;'; put 'put ''aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrMCgkMCxsLGJ2dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckRldGFjaENoaWxkIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1l''@;'; put 'put ''bnRzW2hdO3JldHVybiBrMCgkMCxsLF92dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dIZWFkZXJXaWR0aCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1''@;'; put 'put ''cm4gazAoJDAsbCxwdnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGswKCQwLGwsd3Z0KS5j''@;'; put 'put ''YWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJvd01vdmUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGswKCQwLGwsY3Z0KS5jYWxsKGwsLi4uZCl9KSx0aGlz''@;'; put 'put ''LmFkZEhvb2soImJlZm9yZUxvYWREYXRhIixhPT5rMCgkMCx0aGlzLE92ZSkuY2FsbCh0aGlzLGEpKSx0aGlzLmFkZEhvb2soImJlZm9yZVVwZGF0ZURhdGEiLGE9PmswKCQwLHRoaXMsT3ZlKS5jYWxsKHRoaXMsYSkpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5lbmFibGVQbHVn''@;'; put 'put ''aW4oKSl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAoIm5lc3RlZFJvd3MiKSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCk7Y29uc3Qg''@;'; put 'put ''bD10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGEoKTt0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMuZGF0YU1hbmFnZXIudXBkYXRlV2l0aERhdGEobCksc3VwZXIudXBkYXRlUGx1Z2luKCl9cmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0''@;'; put 'put ''KCJncmlkIikuYWRkU2hvcnRjdXQoe2tleXM6W1siRW50ZXIiXV0sY2FsbGJhY2s6KCk9Pntjb25zdHtoaWdobGlnaHQ6bH09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLGE9dGhpcy5jb2xsYXBzaW5nVUkudHJhbnNsYXRlVHJpbW1lZFJvdyhsLnJvdyk7cmV0dXJuIHRoaXMu''@;'; put 'put ''Y29sbGFwc2luZ1VJLmFyZUNoaWxkcmVuQ29sbGFwc2VkKGEpP3RoaXMuY29sbGFwc2luZ1VJLmV4cGFuZENoaWxkcmVuKGEpOnRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlQ2hpbGRyZW4oYSksITF9LHJ1bk9ubHlJZjooKT0+e3ZhciBsLGE7Y29uc3QgZD1udWxsPT09KGw9dGhpcy5ob3Qu''@;'; put 'put ''Z2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5oaWdobGlnaHQ7cmV0dXJuIGQmJihudWxsPT09KGE9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5pc1NpbmdsZSgpKSYmdGhpcy5ob3Quc2VsZWN0aW9u''@;'; put 'put ''LmlzQ2VsbFZpc2libGUoZCkmJi0xPT09ZC5jb2wmJmQucm93Pj0wfSxncm91cDpMdmUscmVsYXRpdmVUb0dyb3VwOk42LHBvc2l0aW9uOiJiZWZvcmUifSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1v''@;'; put 'put ''dmVTaG9ydGN1dHNCeUdyb3VwKEx2ZSl9ZGlzYWJsZUNvcmVBUElNb2RpZmllcnMoKXtmaihlUyx0aGlzLCEwKX1lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCl7ZmooZVMsdGhpcywhMSl9b25Nb2RpZnlSb3dEYXRhKGwpe2lmKCFoaihlUyx0aGlzKSlyZXR1cm4gdGhpcy5kYXRhTWFuYWdlci5n''@;'; put 'put ''ZXREYXRhT2JqZWN0KGwpfW9uTW9kaWZ5U291cmNlTGVuZ3RoKCl7aWYoIWhqKGVTLHRoaXMpKXJldHVybiB0aGlzLmRhdGFNYW5hZ2VyLmNvdW50QWxsUm93cygpfW9uQmVmb3JlRGF0YVNwbGljZShsLGEsZCl7cmV0dXJuISghaGooZVMsdGhpcykmJiF0aGlzLmRhdGFNYW5hZ2VyLmlzUm93''@;'; put 'put ''SGlnaGVzdExldmVsKGwpJiYodGhpcy5kYXRhTWFuYWdlci5zcGxpY2VEYXRhKGwsYSxkKSwxKSl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gY3Z0KGMsbCxhLGQpe3JldHVybiB0aGlzLnJvd01vdmVDb250cm9sbGVyLm9uQmVmb3JlUm93TW92ZShjLGwsYSxkKX1mdW5j''@;'; put 'put ''dGlvbiB1dnQoYyxsLGEpe3RoaXMuY29sbGFwc2luZ1VJLnRvZ2dsZVN0YXRlKGMsbCxhKX1mdW5jdGlvbiBkdnQoYyxsLGEpe3JldHVybiB0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc3Rhc2goKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2gudHJp''@;'; put 'put ''bVN0YXNoKGFbMF0sbCksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2goYVswXSxudWxsLC0xKmwpLHRoaXMuZGF0YU1hbmFnZXIuZmlsdGVyRGF0YShjLGwsYSksZmooZ2osdGhpcywhMCksdGhpcy5kYXRhTWFuYWdlci5nZXREYXRhKCkuc2xpY2UoKX1m''@;'; put 'put ''dW5jdGlvbiBodnQoYyl7cmV0dXJuIHRoaXMuY29udGV4dE1lbnVVSS5hcHBlbmRPcHRpb25zKGMpfWZ1bmN0aW9uIGZ2dChjLGwpe3RoaXMuaGVhZGVyc1VJLmFwcGVuZExldmVsSW5kaWNhdG9ycyhjLGwpfWZ1bmN0aW9uIHB2dChjKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5oZWFkZXJzVUku''@;'; put 'put ''cm93SGVhZGVyV2lkdGhDYWNoZSxjKX1mdW5jdGlvbiBndnQoYyxsLGEsZCl7ZCE9PXRoaXMucGx1Z2luTmFtZSYmdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e2ZqKGdqLHRoaXMsITEpLHRoaXMuaGVhZGVyc1VJLnVwZGF0ZVJvd0hlYWRlcldpZHRoKCksdGhpcy5jb2xsYXBzaW5n''@;'; put 'put ''VUkuY29sbGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2goKX0pfWZ1bmN0aW9uIG12dChjLGwsYSl7Y29uc3QgZD1BcnJheS5mcm9tKGEucmVkdWNlKChoLGYpPT57aWYodGhpcy5kYXRhTWFuYWdlci5pc1BhcmVudChmKSl7Y29uc3Qgdj10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3Qo''@;'; put 'put ''ZikuX19jaGlsZHJlbjtyZXR1cm4gaC5hZGQoZiksQXJyYXkuaXNBcnJheSh2KSYmdi5mb3JFYWNoKE09PmguYWRkKHRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoTSkpKSxofXJldHVybiBoLmFkZChmKX0sbmV3IFNldCkpO2EubGVuZ3RoPTAsYS5wdXNoKC4uLmQpfWZ1bmN0aW9uIHZ2''@;'; put 'put ''dCgpe3RoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zdGFzaCgpfWZ1bmN0aW9uIHl2dChjLGwpe3RoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zaGlmdFN0YXNoKHRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgobCkpLHRoaXMuY29sbGFwc2luZ1VJ''@;'; put 'put ''LmNvbGxhcHNlZFJvd3NTdGFzaC5hcHBseVN0YXNoKCksdGhpcy5oZWFkZXJzVUkudXBkYXRlUm93SGVhZGVyV2lkdGgoKX1mdW5jdGlvbiBidnQoKXt0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc3Rhc2goKX1mdW5jdGlvbiBfdnQoYyxsLGEpe3RoaXMuY29sbGFwc2lu''@;'; put 'put ''Z1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zaGlmdFN0YXNoKGEsbnVsbCwtMSksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2goKSx0aGlzLmhlYWRlcnNVSS51cGRhdGVSb3dIZWFkZXJXaWR0aCgpfWZ1bmN0aW9uIHd2dCgpe3RoaXMuZGF0YU1hbmFnZXIu''@;'; put 'put ''cmV3cml0ZUNhY2hlKCl9ZnVuY3Rpb24gQ3Z0KCl7dGhpcy5oZWFkZXJzVUkudXBkYXRlUm93SGVhZGVyV2lkdGgoKX1mdW5jdGlvbiBTdnQoYyxsKXtoaihnaix0aGlzKSYmKGwuc2tpcFJlbmRlcj0hMCl9ZnVuY3Rpb24gT3ZlKGMpe2lmKCFVNWUoYykpcmV0dXJuIGRKKCJUaGUgTmVzdGVk''@;'; put 'put ''IFJvd3MgcGx1Z2luIHJlcXVpcmVzIGFuIEFycmF5IG9mIE9iamVjdHMgYXMgYSBkYXRhc2V0IHRvIGJlIHByb3ZpZGVkLiBUaGUgcGx1Z2luIGhhcyBiZWVuIGRpc2FibGVkLiIpLHRoaXMuaG90LmdldFNldHRpbmdzKClbcGpdPSExLHZvaWQgdGhpcy5kaXNhYmxlUGx1Z2luKCk7dGhpcy5k''@;'; put 'put ''YXRhTWFuYWdlci5zZXREYXRhKGMpLHRoaXMuZGF0YU1hbmFnZXIucmV3cml0ZUNhY2hlKCl9ZnVuY3Rpb24gYjgoYyxsLGEpe1B2ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gUHZlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhl''@;'; put 'put ''IHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBrcyhjLGwpe3JldHVybiBjLmdldChORChjLGwpKX1mdW5jdGlvbiBpZyhjLGwsYSl7cmV0dXJuIGMuc2V0KE5EKGMsbCksYSksYX1mdW5jdGlvbiBORChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIHRTPW5ldyBXZWFrTWFwLGF5PW5ldyBXZWFrTWFwLHNpZT1uZXcgV2Vh''@;'; put 'put ''a01hcCwkMT1uZXcgV2Vha01hcCxuUz1uZXcgV2Vha01hcCxlMz1uZXcgV2Vha01hcCxsaWU9bmV3IFdlYWtNYXAsY2llPW5ldyBXZWFrTWFwLG1qPW5ldyBXZWFrU2V0O2NsYXNzIEZ2ZXtjb25zdHJ1Y3RvcihsKXtsZXR7cm9vdEVsZW1lbnQ6YSx1aUNvbnRhaW5lcjpkLGlzUnRsOmgsdGhl''@;'; put 'put ''bWVOYW1lOmYscGhyYXNlVHJhbnNsYXRvcjp2LHNob3VsZEhhdmVCb3JkZXI6TSxhMTF5QW5ub3VuY2VyOkR9PWw7KGZ1bmN0aW9uIE12dChjLGwpe1B2ZShjLGwpLGwuYWRkKGMpfSkodGhpcyxtaiksYjgodGhpcyx0Uyx2b2lkIDApLGI4KHRoaXMsYXksdm9pZCAwKSxiOCh0aGlzLHNpZSwh''@;'; put 'put ''MSksYjgodGhpcywkMSx2b2lkIDApLGI4KHRoaXMsblMsdm9pZCAwKSxiOCh0aGlzLGUzLHZvaWQgMCksYjgodGhpcyxsaWUsdm9pZCAwKSxiOCh0aGlzLGNpZSx2b2lkIDApLGlnKHRTLHRoaXMsYSksaWcoYXksdGhpcyxkKSxpZyhzaWUsdGhpcyxoKSxpZyhuUyx0aGlzLGYpLGlnKGUzLHRo''@;'; put 'put ''aXMsdiksaWcobGllLHRoaXMsTSksaWcoY2llLHRoaXMsRCksdGhpcy5pbnN0YWxsKCl9aW5zdGFsbCgpe3ZhciBsO2lmKG51bGwhPT0obD1rcygkMSx0aGlzKSkmJnZvaWQgMCE9PWwmJmwuY29udGFpbmVyKXJldHVybjtjb25zdCBhPU93YCR7J1xuPGRpdiBkYXRhLXJlZj0iY29udGFpbmVy''@;'; put 'put ''IiBjbGFzcz0iaHQtcGFnaW5hdGlvbiBoYW5kc29udGFibGUiPlxuICA8ZGl2IGNsYXNzPSJodC1wYWdpbmF0aW9uX19pbm5lciI+XG4gICAgPGRpdiBkYXRhLXJlZj0icGFnZVNpemVTZWN0aW9uIiBjbGFzcz0iaHQtcGFnZS1zaXplLXNlY3Rpb24iPlxuICAgICAgPHNwYW4gZGF0YS1yZWY9''@;'; put 'put ''InBhZ2VTaXplTGFiZWwiIGNsYXNzPSJodC1wYWdlLXNpemUtc2VjdGlvbl9fbGFiZWwiPjwvc3Bhbj5cbiAgICAgIDxkaXYgY2xhc3M9Imh0LXBhZ2Utc2l6ZS1zZWN0aW9uX19zZWxlY3Qtd3JhcHBlciI+XG4gICAgICAgIDxzZWxlY3QgZGF0YS1yZWY9InBhZ2VTaXplU2VsZWN0IiBuYW1l''@;'; put 'put ''PSJwYWdlU2l6ZSIgZGF0YS1ob3QtaW5wdXQ+PC9zZWxlY3Q+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGRhdGEtcmVmPSJwYWdlQ291bnRlclNlY3Rpb24iIGNsYXNzPSJodC1wYWdlLWNvdW50ZXItc2VjdGlvbiI+PC9kaXY+XG4gICAgPG5hdiBkYXRhLXJlZj0icGFn''@;'; put 'put ''ZU5hdlNlY3Rpb24iIGNsYXNzPSJodC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbiI+XG4gICAgICA8YnV0dG9uIGRhdGEtcmVmPSJmaXJzdCIgY2xhc3M9Imh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uX19idXR0b24gaHQtcGFnZS1maXJzdCI+PC9idXR0b24+XG4gICAgICA8YnV0dG9uIGRh''@;'; put 'put ''dGEtcmVmPSJwcmV2IiBjbGFzcz0iaHQtcGFnZS1uYXZpZ2F0aW9uLXNlY3Rpb25fX2J1dHRvbiBodC1wYWdlLXByZXYiPjwvYnV0dG9uPlxuICAgICAgPHNwYW4gZGF0YS1yZWY9InBhZ2VOYXZMYWJlbCIgY2xhc3M9Imh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uX19sYWJlbCI+PC9zcGFu''@;'; put 'put ''PlxuICAgICAgPGJ1dHRvbiBkYXRhLXJlZj0ibmV4dCIgY2xhc3M9Imh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uX19idXR0b24gaHQtcGFnZS1uZXh0Ij48L2J1dHRvbj5cbiAgICAgIDxidXR0b24gZGF0YS1yZWY9Imxhc3QiIGNsYXNzPSJodC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbl9f''@;'; put 'put ''YnV0dG9uIGh0LXBhZ2UtbGFzdCI+PC9idXR0b24+XG4gICAgPC9uYXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4nfWAse2NvbnRhaW5lcjpkLGZpcnN0OmgscHJldjpmLG5leHQ6dixsYXN0Ok0scGFnZVNpemVTZWxlY3Q6RH09YS5yZWZzO2lnKCQxLHRoaXMsYS5yZWZzKSxkLnNldEF0dHJpYnV0''@;'; put 'put ''ZSgiZGlyIixrcyhzaWUsdGhpcyk/InJ0bCI6Imx0ciIpLGQudGFiSW5kZXg9LTE7Y29uc3QgdGU9KG9lLHZlLHdlKT0+e3ZlLmFkZEV2ZW50TGlzdGVuZXIob2UsRmU9Pnsob2U9Pm9lLmN1cnJlbnRUYXJnZXQuZGlzYWJsZWQpKEZlKXx8d2UoKX0pfTt0ZSgiY2xpY2siLGgsKCk9PnRoaXMu''@;'; put 'put ''cnVuTG9jYWxIb29rcygiZmlyc3RQYWdlQ2xpY2siKSksdGUoImNsaWNrIixmLCgpPT50aGlzLnJ1bkxvY2FsSG9va3MoInByZXZQYWdlQ2xpY2siKSksdGUoImNsaWNrIix2LCgpPT50aGlzLnJ1bkxvY2FsSG9va3MoIm5leHRQYWdlQ2xpY2siKSksdGUoImNsaWNrIixNLCgpPT50aGlzLnJ1''@;'; put 'put ''bkxvY2FsSG9va3MoImxhc3RQYWdlQ2xpY2siKSksRC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCgpPT57Y29uc3Qgb2U9ImF1dG8iPT09RC52YWx1ZT8iYXV0byI6TnVtYmVyLnBhcnNlSW50KEQudmFsdWUsMTApO3RoaXMucnVuTG9jYWxIb29rcygicGFnZVNpemVDaGFuZ2UiLG9lKX0p''@;'; put 'put ''LHRoaXMuc2V0Q291bnRlclNlY3Rpb25WaXNpYmlsaXR5KCExKSx0aGlzLnNldE5hdmlnYXRpb25TZWN0aW9uVmlzaWJpbGl0eSghMSksdGhpcy5zZXRQYWdlU2l6ZVNlY3Rpb25WaXNpYmlsaXR5KCExKSxrcyhheSx0aGlzKT8oa3MoYXksdGhpcykuYXBwZW5kQ2hpbGQoYS5mcmFnbWVudCks''@;'; put 'put ''aWkoZCxba3MoblMsdGhpcyksImhhbmRzb250YWJsZSJdKSk6a3ModFMsdGhpcykuYWZ0ZXIoYS5mcmFnbWVudCl9Z2V0Q29udGFpbmVyKCl7cmV0dXJuIGtzKCQxLHRoaXMpLmNvbnRhaW5lcn1nZXRGb2N1c2FibGVFbGVtZW50cygpe2NvbnN0e2ZpcnN0OmwscHJldjphLG5leHQ6ZCxsYXN0''@;'; put 'put ''OmgscGFnZVNpemVTZWxlY3Q6Zn09a3MoJDEsdGhpcyk7cmV0dXJuW2YsbCxhLGQsaF0uZmlsdGVyKHY9PiF2LmRpc2FibGVkKX11cGRhdGVXaWR0aChsKXtyZXR1cm4ga3MoJDEsdGhpcykuY29udGFpbmVyLnN0eWxlLndpZHRoPWAke2x9cHhgLHRoaXN9dXBkYXRlVGhlbWUobCl7aWYoaWco''@;'; put 'put ''blMsdGhpcyxsKSxrcyhheSx0aGlzKSl7Y29uc3R7Y29udGFpbmVyOmF9PWtzKCQxLHRoaXMpO1ZhKGEsL2h0LXRoZW1lLS4qL2cpLGtzKG5TLHRoaXMpJiZpaShhLGtzKG5TLHRoaXMpKX1yZXR1cm4gdGhpc31nZXRIZWlnaHQoKXtyZXR1cm4ga3MoJDEsdGhpcykuY29udGFpbmVyLm9mZnNl''@;'; put 'put ''dEhlaWdodH1yZWZyZXNoQm9yZGVyU3RhdGUoKXtjb25zdHtjb250YWluZXI6bH09a3MoJDEsdGhpcyk7cmV0dXJuIGtzKGF5LHRoaXMpfHxrcyhsaWUsdGhpcykuY2FsbCh0aGlzKT9paShsLCJodC1wYWdpbmF0aW9uLS1ib3JkZXJlZCIpOlZhKGwsImh0LXBhZ2luYXRpb24tLWJvcmRlcmVk''@;'; put 'put ''IiksdGhpc311cGRhdGVTdGF0ZShsKXtsZXR7Y3VycmVudFBhZ2U6YSx0b3RhbFBhZ2VzOmQsZmlyc3RWaXNpYmxlUm93SW5kZXg6aCxsYXN0VmlzaWJsZVJvd0luZGV4OmYsdG90YWxSZW5kZXJlZFJvd3M6dixwYWdlU2l6ZUxpc3Q6TSxwYWdlU2l6ZTpELGF1dG9QYWdlU2l6ZTpVfT1sO2Nv''@;'; put 'put ''bnN0e2ZpcnN0OnRlLHByZXY6b2UsbmV4dDp2ZSxsYXN0OndlLHBhZ2VDb3VudGVyU2VjdGlvbjpGZSxwYWdlTmF2U2VjdGlvbjpXZSxwYWdlTmF2TGFiZWw6bnQscGFnZVNpemVTZWxlY3Q6ZHQscGFnZVNpemVMYWJlbDptdH09a3MoJDEsdGhpcyksJHQ9a3MoZTMsdGhpcykuY2FsbCh0aGlz''@;'; put 'put ''LFZlZSx7c3RhcnQ6aCsxLGVuZDpmKzEsdG90YWw6dn0pLHp0PWtzKGUzLHRoaXMpLmNhbGwodGhpcyxCZWUse2N1cnJlbnRQYWdlOmEsdG90YWxQYWdlczpkfSkseW49a3MoZTMsdGhpcykuY2FsbCh0aGlzLEJOKTtGZS50ZXh0Q29udGVudD0kdCxudC50ZXh0Q29udGVudD16dCxkdC50ZXh0''@;'; put 'put ''Q29udGVudD0iIixtdC50ZXh0Q29udGVudD1gJHt5bn06YCxaYShXZSxbeDIoa3MoZTMsdGhpcykuY2FsbCh0aGlzLEhlZSkpXSksWmEoZHQsW3gyKGtzKGUzLHRoaXMpLmNhbGwodGhpcyxCTikpXSksa3MoY2llLHRoaXMpLmNhbGwodGhpcyx6dCksdGhpcy5yZWZyZXNoQm9yZGVyU3RhdGUo''@;'; put 'put ''KSxNLmZvckVhY2goUm49Pntjb25zdCBEcj0iYXV0byI9PT1Sbj9rcyhlMyx0aGlzKS5jYWxsKHRoaXMsTmVlKTpSbixMcj1uZXcgT3B0aW9uKERyLFJuKTsoVSYmImF1dG8iPT09Um58fCFVJiZSbj09PUQpJiYoTHIuc2VsZWN0ZWQ9ITApLGR0LmFkZChMcil9KTtjb25zdCBnbj0xPT09YSx3''@;'; put 'put ''bj1hPT09ZDtpZigibm9uZSIhPT1XZS5zdHlsZS5kaXNwbGF5KXtjb25zdCBSbj1rcyh0Uyx0aGlzKS5vd25lckRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7Z24/KGlpKHRlLCJodC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbl9fYnV0dG9uLS1kaXNhYmxlZCIpLGlpKG9lLCJodC1wYWdlLW5hdmln''@;'; put 'put ''YXRpb24tc2VjdGlvbl9fYnV0dG9uLS1kaXNhYmxlZCIpLHRlLmRpc2FibGVkPSEwLG9lLmRpc2FibGVkPSEwKTooVmEodGUsImh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uX19idXR0b24tLWRpc2FibGVkIiksVmEob2UsImh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uX19idXR0b24tLWRp''@;'; put 'put ''c2FibGVkIiksdGUuZGlzYWJsZWQ9ITEsb2UuZGlzYWJsZWQ9ITEpLHduPyhpaSh2ZSwiaHQtcGFnZS1uYXZpZ2F0aW9uLXNlY3Rpb25fX2J1dHRvbi0tZGlzYWJsZWQiKSxpaSh3ZSwiaHQtcGFnZS1uYXZpZ2F0aW9uLXNlY3Rpb25fX2J1dHRvbi0tZGlzYWJsZWQiKSx2ZS5kaXNhYmxlZD0h''@;'; put 'put ''MCx3ZS5kaXNhYmxlZD0hMCk6KFZhKHZlLCJodC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbl9fYnV0dG9uLS1kaXNhYmxlZCIpLFZhKHdlLCJodC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbl9fYnV0dG9uLS1kaXNhYmxlZCIpLHZlLmRpc2FibGVkPSExLHdlLmRpc2FibGVkPSExKSxbdGUsb2Us''@;'; put 'put ''dmUsd2VdLmluY2x1ZGVzKFJuKSYmKG9lLmRpc2FibGVkP3ZlLmZvY3VzKCk6dmUuZGlzYWJsZWQmJm9lLmZvY3VzKCkpfXJldHVybiBaYSh0ZSxbeDIoa3MoZTMsdGhpcykuY2FsbCh0aGlzLGplZSkpLE9BKGduKV0pLFphKG9lLFt4MihrcyhlMyx0aGlzKS5jYWxsKHRoaXMsemVlKSksT0Eo''@;'; put 'put ''Z24pXSksWmEodmUsW3gyKGtzKGUzLHRoaXMpLmNhbGwodGhpcyxVZWUpKSxPQSh3bildKSxaYSh3ZSxbeDIoa3MoZTMsdGhpcykuY2FsbCh0aGlzLFplZSkpLE9BKHduKV0pLHRoaXN9c2V0UGFnZVNpemVTZWN0aW9uVmlzaWJpbGl0eShsKXtjb25zdHtwYWdlU2l6ZVNlY3Rpb246YSxwYWdl''@;'; put 'put ''U2l6ZVNlbGVjdDpkfT1rcygkMSx0aGlzKTtyZXR1cm4gYS5zdHlsZS5kaXNwbGF5PWw/IiI6Im5vbmUiLGQuZGlzYWJsZWQ9IWwsTkQobWosdGhpcyx1aWUpLmNhbGwodGhpcyksdGhpc31zZXRDb3VudGVyU2VjdGlvblZpc2liaWxpdHkobCl7cmV0dXJuIGtzKCQxLHRoaXMpLnBhZ2VDb3Vu''@;'; put 'put ''dGVyU2VjdGlvbi5zdHlsZS5kaXNwbGF5PWw/IiI6Im5vbmUiLE5EKG1qLHRoaXMsdWllKS5jYWxsKHRoaXMpLHRoaXN9c2V0TmF2aWdhdGlvblNlY3Rpb25WaXNpYmlsaXR5KGwpe2NvbnN0e3BhZ2VOYXZTZWN0aW9uOmEsZmlyc3Q6ZCxwcmV2OmgsbmV4dDpmLGxhc3Q6dn09a3MoJDEsdGhp''@;'; put 'put ''cyk7cmV0dXJuIGEuc3R5bGUuZGlzcGxheT1sPyIiOiJub25lIixkLmRpc2FibGVkPSFsLGguZGlzYWJsZWQ9IWwsZi5kaXNhYmxlZD0hbCx2LmRpc2FibGVkPSFsLE5EKG1qLHRoaXMsdWllKS5jYWxsKHRoaXMpLHRoaXN9ZGVzdHJveSgpe3ZhciBsO251bGw9PT0obD1rcygkMSx0aGlzKSl8''@;'; put 'put ''fHZvaWQgMD09PWx8fGwuY29udGFpbmVyLnJlbW92ZSgpLGlnKCQxLHRoaXMsbnVsbCl9fWZ1bmN0aW9uIHVpZSgpe2NvbnN0e2NvbnRhaW5lcjpjLHBhZ2VTaXplU2VjdGlvbjpsLHBhZ2VDb3VudGVyU2VjdGlvbjphLHBhZ2VOYXZTZWN0aW9uOmR9PWtzKCQxLHRoaXMpLGg9Im5vbmUiIT09''@;'; put 'put ''bC5zdHlsZS5kaXNwbGF5fHwibm9uZSIhPT1hLnN0eWxlLmRpc3BsYXl8fCJub25lIiE9PWQuc3R5bGUuZGlzcGxheTtrcyhheSx0aGlzKXx8KGg/aWkoa3ModFMsdGhpcykucXVlcnlTZWxlY3RvcigiLmh0LXdyYXBwZXIiKSwiaHRQYWdpbmF0aW9uIik6VmEoa3ModFMsdGhpcykucXVlcnlT''@;'; put 'put ''ZWxlY3RvcigiLmh0LXdyYXBwZXIiKSwiaHRQYWdpbmF0aW9uIikpLGMuc3R5bGUuZGlzcGxheT1oPyIiOiJub25lIn1wbChGdmUsWjApO2NvbnN0IEV2dD1bIm5lc3RlZFJvd3MiLCJtZXJnZUNlbGxzIiwiZml4ZWRSb3dzVG9wIiwiZml4ZWRSb3dzQm90dG9tIl07ZnVuY3Rpb24gZGllKGMs''@;'; put 'put ''bCxhKXtyZXR1cm4obD1mdW5jdGlvbiBBdnQoYyl7dmFyIGw9ZnVuY3Rpb24ga3Z0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigi''@;'; put 'put ''b2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlw''@;'; put 'put ''ZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBIdmU9bmV3IE1hcChbWyJmaXhlZCIsY2xhc3MgRHZ0e2NvbnN0cnVjdG9yKCl7ZGll''@;'; put 'put ''KHRoaXMsInBhZ2VTaXplIiwxKSxkaWUodGhpcywidG90YWxJdGVtcyIsMCksZGllKHRoaXMsInRvdGFsUGFnZXMiLDApfWNhbGN1bGF0ZShsKXtsZXR7cGFnZVNpemU6YSx0b3RhbEl0ZW1zOmR9PWw7dGhpcy5wYWdlU2l6ZT1NYXRoLm1heChhLDEpLHRoaXMudG90YWxJdGVtcz1kLHRoaXMu''@;'; put 'put ''dG90YWxQYWdlcz1NYXRoLm1heCgxLE1hdGguY2VpbCh0aGlzLnRvdGFsSXRlbXMvdGhpcy5wYWdlU2l6ZSkpfWdldFRvdGFsUGFnZXMoKXtyZXR1cm4gdGhpcy50b3RhbFBhZ2VzfWdldFN0YXRlKGwpe2lmKChsLT0xKTwwfHxsPj10aGlzLmdldFRvdGFsUGFnZXMoKSlyZXR1cm47Y29uc3Qg''@;'; put 'put ''YT1sKnRoaXMucGFnZVNpemU7cmV0dXJue3N0YXJ0SW5kZXg6YSxlbmRJbmRleDpNYXRoLm1heCgwLE1hdGgubWluKGErdGhpcy5wYWdlU2l6ZS0xLHRoaXMudG90YWxJdGVtcy0xKSkscGFnZVNpemU6dGhpcy5wYWdlU2l6ZX19fV0sWyJhdXRvIixjbGFzcyBPdnR7Y29uc3RydWN0b3IoKXsh''@;'; put 'put ''ZnVuY3Rpb24gSXZ0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBSdnQoYyl7dmFyIGw9ZnVuY3Rpb24gTHZ0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8''@;'; put 'put ''ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1''@;'; put 'put ''cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywicGFnZXMiLFtdKX1jYWxjdWxhdGUobCl7bGV0e2l0ZW1z''@;'; put 'put ''U2l6ZVByb3ZpZGVyOmEsdmlld3BvcnRTaXplUHJvdmlkZXI6ZH09bDtjb25zdCBoPWEoKSxmPWQoKSx2PVtdO2xldCBNPTAsRD0wLFU9MDtmb3IobGV0IHRlPTA7dGU8aC5sZW5ndGg7dGUrKyl7Y29uc3Qgb2U9aFt0ZV07VT4wJiZEK29lPj1mJiYodi5wdXNoKHtzdGFydEluZGV4Ok0sZW5k''@;'; put 'put ''SW5kZXg6dGUtMSxwYWdlU2l6ZTpVfSksTT10ZSxEPTAsVT0wKSxEKz1vZSxVKz0xfXYucHVzaCh7c3RhcnRJbmRleDpNLGVuZEluZGV4Ok1hdGgubWF4KDAsaC5sZW5ndGgtMSkscGFnZVNpemU6VX0pLHRoaXMucGFnZXM9dn1nZXRUb3RhbFBhZ2VzKCl7cmV0dXJuIHRoaXMucGFnZXMubGVu''@;'; put 'put ''Z3RofWdldFN0YXRlKGwpe2lmKCEoKGwtPTEpPDB8fGw+PXRoaXMuZ2V0VG90YWxQYWdlcygpKSlyZXR1cm4gdGhpcy5wYWdlc1tsXX19XV0pO2Z1bmN0aW9uIE52ZShjKXtpZighSHZlLmhhcyhjKSl0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcGFnaW5hdGlvbiBzdHJhdGVneSB0eXBlOiAk''@;'; put 'put ''e2N9YCk7cmV0dXJuIG5ldyhIdmUuZ2V0KGMpKX1mdW5jdGlvbiBfOChjLGwsYSl7VnZlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBWdmUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3''@;'; put 'put ''aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFBvKGMsbCl7cmV0dXJuIGMuZ2V0KF9jKGMsbCkpfWZ1bmN0aW9uIHAxKGMsbCxhKXtyZXR1cm4gYy5zZXQoX2MoYyxsKSxhKSxhfWZ1bmN0aW9uIF9jKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1''@;'; put 'put ''cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBveT0icGFnaW5hdGlvbiIsSHZ0PWBwbHVnaW46JHtveX1gLEJ2ZT1Yc2BUaGUgXGBhdXRvXGAgcGFnZSBzaXpl''@;'; put 'put ''IHNldHRpbmcgcmVxdWlyZXMgdGhlIFxgYXV0b1Jvd1NpemVcYFx4MjAKICBwbHVnaW4gdG8gYmUgZW5hYmxlZC4gU2V0IHRoZSBcYGF1dG9Sb3dTaXplOiB0cnVlXGAgaW4gdGhlIGNvbmZpZ3VyYXRpb24gdG8gZW5zdXJlIGNvcnJlY3QgYmVoYXZpb3IuYDt2YXIgVkQ9bmV3IFdlYWtNYXAs''@;'; put 'put ''VmQ9bmV3IFdlYWtNYXAscHA9bmV3IFdlYWtNYXAsVHU9bmV3IFdlYWtNYXAsZ3A9bmV3IFdlYWtNYXAsdmo9bmV3IFdlYWtNYXAseWo9bmV3IFdlYWtNYXAsSWM9bmV3IFdlYWtTZXQsaGllPW5ldyBXZWFrTWFwO2NsYXNzIE52dCBleHRlbmRzIE1ze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4u''@;'; put 'put ''YXJndW1lbnRzKSxmdW5jdGlvbiBQdnQoYyxsKXtWdmUoYyxsKSxsLmFkZChjKX0odGhpcyxJYyksXzgodGhpcyxWRCxudWxsKSxfOCh0aGlzLFZkLDEpLF84KHRoaXMscHAsMTApLF84KHRoaXMsVHUsbnVsbCksXzgodGhpcyxncCxudWxsKSxfOCh0aGlzLHZqLCExKSxfOCh0aGlzLHlqLCEx''@;'; put 'put ''KSxfOCh0aGlzLGhpZSwoKT0+e3ZhciBsOyFQbyh2aix0aGlzKSYmbnVsbCE9PShsPXRoaXMuaG90KSYmdm9pZCAwIT09bCYmbC52aWV3JiZfYyhJYyx0aGlzLHN5KS5jYWxsKHRoaXMpfSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIG95fXN0YXRpYyBnZXQgUExVR0lOX1BSSU9S''@;'; put 'put ''SVRZKCl7cmV0dXJuIDkwMH1zdGF0aWMgZ2V0IERFRkFVTFRfU0VUVElOR1MoKXtyZXR1cm57cGFnZVNpemU6MTAscGFnZVNpemVMaXN0OlsiYXV0byIsNSwxMCwyMCw1MCwxMDBdLGluaXRpYWxQYWdlOjEsc2hvd1BhZ2VTaXplOiEwLHNob3dDb3VudGVyOiEwLHNob3dOYXZpZ2F0aW9uOiEw''@;'; put 'put ''LHVpQ29udGFpbmVyOm51bGx9fWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtveV19ZW5hYmxlUGx1Z2luKCl7dmFyIGwsYT10aGlzO2lmKGZ1bmN0aW9uIFR2dChjKXtyZXR1cm4gRXZ0LnNvbWUobD0+e2NvbnN0IGE9ISFjW2xdO3JldHVybiBhJiZvcyhYc2BU''@;'; put 'put ''aGUgXGBwYWdpbmF0aW9uXGAgcGx1Z2luIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhlIFxgJHtsfVxgIG9wdGlvbi5ceDIwCiAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgY29tYmluYXRpb24gaXMgbm90IHN1cHBvcnRlZC4gVGhlIHBsdWdpbiB3aWxsIHJlbWFpbiBkaXNhYmxlZC5gKSxh''@;'; put 'put ''fSl9KHRoaXMuaG90LmdldFNldHRpbmdzKCkpKXJldHVybiB2b2lkKHRoaXMuaG90LmdldFNldHRpbmdzKClbb3ldPSExKTtpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtveV07dm9pZCAwIT09ZD8uaW5pdGlhbFBhZ2UmJnAxKFZkLHRoaXMs''@;'; put 'put ''dGhpcy5nZXRTZXR0aW5nKCJpbml0aWFsUGFnZSIpKSx2b2lkIDAhPT1kPy5wYWdlU2l6ZSYmcDEocHAsdGhpcyx0aGlzLmdldFNldHRpbmcoInBhZ2VTaXplIikpLHAxKFZELHRoaXMsdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuY3JlYXRlQW5kUmVnaXN0ZXJJbmRleE1hcCh0aGlzLnBsdWdp''@;'; put 'put ''bk5hbWUsImhpZGluZyIsITEpKSwiYXV0byI9PT1QbyhwcCx0aGlzKSYmIShudWxsIT09KGw9dGhpcy5ob3QuZ2V0UGx1Z2luKCJhdXRvUm93U2l6ZSIpKSYmdm9pZCAwIT09bCYmbC5lbmFibGVkKSYmb3MoQnZlKSxwMShncCx0aGlzLE52ZSgiYXV0byI9PT1QbyhwcCx0aGlzKT8iYXV0byI6''@;'; put 'put ''ImZpeGVkIikpLFBvKFR1LHRoaXMpfHwocDEoVHUsdGhpcyxuZXcgRnZlKHtyb290RWxlbWVudDp0aGlzLmhvdC5yb290R3JpZEVsZW1lbnQsdWlDb250YWluZXI6dGhpcy5nZXRTZXR0aW5nKCJ1aUNvbnRhaW5lciIpLGlzUnRsOnRoaXMuaG90LmlzUnRsKCksdGhlbWVOYW1lOnRoaXMuaG90''@;'; put 'put ''LmdldFNldHRpbmdzKCkudGhlbWVOYW1lLHBocmFzZVRyYW5zbGF0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gYS5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZSguLi5hcmd1bWVudHMpfSxzaG91bGRIYXZlQm9yZGVyOigpPT5fYyhJYyx0aGlzLFZ2dCkuY2FsbCh0aGlzKSxhMTF5QW5ub3VuY2VyOmg9''@;'; put 'put ''PmZ1bmN0aW9uIFYwdChjKXtSMiYmKFIyLnRleHRDb250ZW50PSIiLHNldFRpbWVvdXQoKCk9PntSMiYmKFIyLnRleHRDb250ZW50PWMpfSwxMDApKX0oaCl9KSksX2MoSWMsdGhpcyxqdmUpLmNhbGwodGhpcyksUG8oVHUsdGhpcykuYWRkTG9jYWxIb29rKCJmaXJzdFBhZ2VDbGljayIsKCk9''@;'; put 'put ''PnRoaXMuZmlyc3RQYWdlKCkpLmFkZExvY2FsSG9vaygicHJldlBhZ2VDbGljayIsKCk9PnRoaXMucHJldlBhZ2UoKSkuYWRkTG9jYWxIb29rKCJuZXh0UGFnZUNsaWNrIiwoKT0+dGhpcy5uZXh0UGFnZSgpKS5hZGRMb2NhbEhvb2soImxhc3RQYWdlQ2xpY2siLCgpPT50aGlzLmxhc3RQYWdl''@;'; put 'put ''KCkpLmFkZExvY2FsSG9vaygicGFnZVNpemVDaGFuZ2UiLGg9PnRoaXMuc2V0UGFnZVNpemUoaCkpKSx0aGlzLmFkZEhvb2soImluaXQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0''@;'; put 'put ''dXJuIF9jKEljLGEsJHZ0KS5jYWxsKGEsLi4uZil9LC0xKSx0aGlzLmFkZEhvb2soImJlZm9yZVNlbGVjdEFsbCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gX2MoSWMsYSx6''@;'; put 'put ''dmUpLmNhbGwoYSwuLi5mKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2VsZWN0Q29sdW1ucyIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gX2MoSWMsYSx6dmUpLmNhbGwoYSwu''@;'; put 'put ''Li5mKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2V0UmFuZ2VFbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIF9jKEljLGEsenZ0KS5jYWxsKGEsLi4uZil9KSx0aGlzLmFk''@;'; put 'put ''ZEhvb2soImJlZm9yZVNlbGVjdGlvbkhpZ2hsaWdodFNldCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gX2MoSWMsYSxVdnQpLmNhbGwoYSwuLi5mKX0pLHRoaXMuYWRkSG9v''@;'; put 'put ''aygiYmVmb3JlUGFzdGUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIF9jKEljLGEsWnZ0KS5jYWxsKGEsLi4uZil9KSx0aGlzLmFkZEhvb2soImFmdGVyVmlld1JlbmRlciIs''@;'; put 'put ''ZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gX2MoSWMsYSxXdnQpLmNhbGwoYSwuLi5mKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW5kZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBo''@;'; put 'put ''PWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIF9jKEljLGEsWXZ0KS5jYWxsKGEsLi4uZil9KSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsVmVydGljYWxseSIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gX2MoSWMsYSxLdnQpLmNhbGwoYSwuLi5mKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJMYW5ndWFnZUNoYW5nZSIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5l''@;'; put 'put ''dyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gX2MoSWMsYSxYdnQpLmNhbGwoYSwuLi5mKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlSGVpZ2h0Q2hhbmdlIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9''@;'; put 'put ''MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBfYyhJYyxhLEd2dCkuY2FsbChhLC4uLmYpfSksdGhpcy5hZGRIb29rKCJhZnRlclNldFRoZW1lIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJn''@;'; put 'put ''dW1lbnRzW3ZdO3JldHVybiBfYyhJYyxhLHF2dCkuY2FsbChhLC4uLmYpfSksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJjYWNoZVVwZGF0ZWQiLFBvKGhpZSx0aGlzKSksX2MoSWMsdGhpcyxCdnQpLmNhbGwodGhpcyksc3VwZXIuZW5hYmxlUGx1Z2luKCl9dXBkYXRl''@;'; put 'put ''UGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxfYyhJYyx0aGlzLHN5KS5jYWxsKHRoaXMpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZW1vdmVMb2NhbEhvb2soImNhY2hlVXBkYXRl''@;'; put 'put ''ZCIsUG8oaGllLHRoaXMpKS51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSksX2MoSWMsdGhpcyxqdnQpLmNhbGwodGhpcyksUG8oVHUsdGhpcykuZGVzdHJveSgpLHAxKFR1LHRoaXMsbnVsbCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfWdldFBhZ2luYXRpb25EYXRhKCl7Y29uc3QgbD1Q''@;'; put 'put ''byhncCx0aGlzKS5nZXRUb3RhbFBhZ2VzKCk7bGV0IGE9LTEsZD0tMTtjb25zdHtwYWdlU2l6ZTpoLHN0YXJ0SW5kZXg6Zn09UG8oZ3AsdGhpcykuZ2V0U3RhdGUoUG8oVmQsdGhpcykpLHY9dGhpcy5ob3QuY291bnRSb3dzKCk7bGV0IE09MDtmb3IobGV0IEQ9ZjtNPGgmJiEoRD49dik7RCsr''@;'; put 'put ''KXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmlzSGlkZGVuKHRoaXMuaG90LnRvUGh5c2ljYWxSb3coRCkpfHwoLTE9PT1hJiYoYT1EKSxkPUQsTSs9MSk7cmV0dXJue2N1cnJlbnRQYWdlOlBvKFZkLHRoaXMpLHRvdGFsUGFnZXM6bCxwYWdlU2l6ZTpoLHBhZ2VTaXplTGlzdDpbLi4udGhpcy5n''@;'; put 'put ''ZXRTZXR0aW5nKCJwYWdlU2l6ZUxpc3QiKV0sYXV0b1BhZ2VTaXplOiJhdXRvIj09PVBvKHBwLHRoaXMpLG51bWJlck9mUmVuZGVyZWRSb3dzOnRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCksZmlyc3RWaXNpYmxlUm93SW5kZXg6YSxsYXN0Vmlz''@;'; put 'put ''aWJsZVJvd0luZGV4OmR9fXNldFBhZ2UobCl7Y29uc3QgYT1QbyhWZCx0aGlzKTshMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVQYWdlQ2hhbmdlIixhLGwpJiYocDEoVmQsdGhpcyxsKSxfYyhJYyx0aGlzLHN5KS5jYWxsKHRoaXMpLHRoaXMuaG90LnNjcm9sbFZpZXdwb3J0VG8oe3Jv''@;'; put 'put ''dzowfSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUGFnZUNoYW5nZSIsYSxQbyhWZCx0aGlzKSksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLmhvdC5yZW5kZXIoKSl9cmVzZXRQYWdlKCl7dGhpcy5zZXRQYWdlKHRoaXMuZ2V0U2V0dGluZygiaW5pdGlhbFBhZ2Ui''@;'; put 'put ''KSl9c2V0UGFnZVNpemUobCl7dmFyIGE7Y29uc3QgZD1QbyhwcCx0aGlzKTshMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVQYWdlU2l6ZUNoYW5nZSIsZCxsKSYmKCJhdXRvIj09PWwmJiEobnVsbCE9PShhPXRoaXMuaG90LmdldFBsdWdpbigiYXV0b1Jvd1NpemUiKSkmJnZvaWQgMCE9''@;'; put 'put ''PWEmJmEuZW5hYmxlZCkmJm9zKEJ2ZSkscDEoZ3AsdGhpcyxOdmUoImF1dG8iPT09bD8iYXV0byI6ImZpeGVkIikpLHAxKHBwLHRoaXMsbCksX2MoSWMsdGhpcyxzeSkuY2FsbCh0aGlzKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJQYWdlU2l6ZUNoYW5nZSIsZCxQbyhwcCx0aGlzKSksdGhp''@;'; put 'put ''cy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLmhvdC5yZW5kZXIoKSl9cmVzZXRQYWdlU2l6ZSgpe3RoaXMuc2V0UGFnZVNpemUodGhpcy5nZXRTZXR0aW5nKCJwYWdlU2l6ZSIpKX1yZXNldFBhZ2luYXRpb24oKXt0aGlzLnJlc2V0UGFnZSgpLHRoaXMucmVzZXRQYWdlU2l6''@;'; put 'put ''ZSgpLF9jKEljLHRoaXMsanZlKS5jYWxsKHRoaXMpfW5leHRQYWdlKCl7dGhpcy5zZXRQYWdlKFBvKFZkLHRoaXMpKzEpfXByZXZQYWdlKCl7dGhpcy5zZXRQYWdlKFBvKFZkLHRoaXMpLTEpfWZpcnN0UGFnZSgpe3RoaXMuc2V0UGFnZSgxKX1sYXN0UGFnZSgpe3RoaXMuc2V0UGFnZShQbyhn''@;'; put 'put ''cCx0aGlzKS5nZXRUb3RhbFBhZ2VzKCkpfWhhc1ByZXZpb3VzUGFnZSgpe3JldHVybiBQbyhWZCx0aGlzKT4xfWhhc05leHRQYWdlKCl7cmV0dXJuIFBvKFZkLHRoaXMpPFBvKGdwLHRoaXMpLmdldFRvdGFsUGFnZXMoKX1nZXRDdXJyZW50UGFnZURhdGEoKXtjb25zdHtmaXJzdFZpc2libGVS''@;'; put 'put ''b3dJbmRleDpsLGxhc3RWaXNpYmxlUm93SW5kZXg6YX09dGhpcy5nZXRQYWdpbmF0aW9uRGF0YSgpO3JldHVybi0xPT09bHx8LTE9PT1hP1tdOnRoaXMuaG90LmdldERhdGEobCwwLGEsdGhpcy5ob3QuY291bnRDb2xzKCktMSl9c2hvd1BhZ2VTaXplU2VjdGlvbigpe1BvKFR1LHRoaXMpLnNl''@;'; put 'put ''dFBhZ2VTaXplU2VjdGlvblZpc2liaWxpdHkoITApLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclBhZ2VTaXplVmlzaWJpbGl0eUNoYW5nZSIsITApfWhpZGVQYWdlU2l6ZVNlY3Rpb24oKXtQbyhUdSx0aGlzKS5zZXRQYWdlU2l6ZVNlY3Rpb25WaXNpYmlsaXR5KCExKSx0aGlzLmhvdC5ydW5I''@;'; put 'put ''b29rcygiYWZ0ZXJQYWdlU2l6ZVZpc2liaWxpdHlDaGFuZ2UiLCExKX1zaG93UGFnZUNvdW50ZXJTZWN0aW9uKCl7UG8oVHUsdGhpcykuc2V0Q291bnRlclNlY3Rpb25WaXNpYmlsaXR5KCEwKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJQYWdlQ291bnRlclZpc2liaWxpdHlDaGFuZ2UiLCEw''@;'; put 'put ''KX1oaWRlUGFnZUNvdW50ZXJTZWN0aW9uKCl7UG8oVHUsdGhpcykuc2V0Q291bnRlclNlY3Rpb25WaXNpYmlsaXR5KCExKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJQYWdlQ291bnRlclZpc2liaWxpdHlDaGFuZ2UiLCExKX1zaG93UGFnZU5hdmlnYXRpb25TZWN0aW9uKCl7UG8oVHUsdGhp''@;'; put 'put ''cykuc2V0TmF2aWdhdGlvblNlY3Rpb25WaXNpYmlsaXR5KCEwKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJQYWdlTmF2aWdhdGlvblZpc2liaWxpdHlDaGFuZ2UiLCEwKX1oaWRlUGFnZU5hdmlnYXRpb25TZWN0aW9uKCl7UG8oVHUsdGhpcykuc2V0TmF2aWdhdGlvblNlY3Rpb25WaXNpYmls''@;'; put 'put ''aXR5KCExKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJQYWdlTmF2aWdhdGlvblZpc2liaWxpdHlDaGFuZ2UiLCExKX1kZXN0cm95KCl7dmFyIGw7cDEoVkQsdGhpcyxudWxsKSxwMShncCx0aGlzLG51bGwpLG51bGw9PT0obD1QbyhUdSx0aGlzKSl8fHZvaWQgMD09PWx8fGwuZGVzdHJveSgp''@;'; put 'put ''LHAxKFR1LHRoaXMsbnVsbCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBqdmUoKXt0aGlzLmdldFNldHRpbmcoInNob3dQYWdlU2l6ZSIpP3RoaXMuc2hvd1BhZ2VTaXplU2VjdGlvbigpOnRoaXMuaGlkZVBhZ2VTaXplU2VjdGlvbigpLHRoaXMuZ2V0U2V0dGluZygic2hvd0NvdW50ZXIi''@;'; put 'put ''KT90aGlzLnNob3dQYWdlQ291bnRlclNlY3Rpb24oKTp0aGlzLmhpZGVQYWdlQ291bnRlclNlY3Rpb24oKSx0aGlzLmdldFNldHRpbmcoInNob3dOYXZpZ2F0aW9uIik/dGhpcy5zaG93UGFnZU5hdmlnYXRpb25TZWN0aW9uKCk6dGhpcy5oaWRlUGFnZU5hdmlnYXRpb25TZWN0aW9uKCl9ZnVu''@;'; put 'put ''Y3Rpb24gc3koKXtwMSh2aix0aGlzLCEwKSxQbyhWRCx0aGlzKS5jbGVhcigpO2NvbnN0IGM9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUluZGV4ZXMoKSxsPWMubGVuZ3RoLHtzdHlsZXNIYW5kbGVyOmF9PXRoaXMuaG90O1BvKGdwLHRoaXMpLmNhbGN1bGF0ZSh7cGFn''@;'; put 'put ''ZVNpemU6UG8ocHAsdGhpcyksdG90YWxJdGVtczpsLHZpZXdwb3J0U2l6ZVByb3ZpZGVyOigpPT57Y29uc3R7dmlldzpmfT10aGlzLmhvdDtpZihmLmlzVmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdygpKXtjb25zdCBNPWdldENvbXB1dGVkU3R5bGUodGhpcy5ob3Qucm9vdERvY3VtZW50''@;'; put 'put ''LmJvZHkpLEQ9TnVtYmVyLnBhcnNlSW50KE0ubWFyZ2luVG9wLDEwKStOdW1iZXIucGFyc2VJbnQoTS5tYXJnaW5Cb3R0b20sMTApLFU9dGhpcy5ob3QuaGFzQ29sSGVhZGVycygpP2YuX3d0Lnd0VGFibGUuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KCk6MCx0ZT1QbyhUdSx0aGlzKS5nZXRIZWln''@;'; put 'put ''aHQoKTtyZXR1cm4gZi5nZXRXb3Jrc3BhY2VIZWlnaHQoKS10ZS1VLUR9Y29uc3Qgdj1mLmhhc0hvcml6b250YWxTY3JvbGwoKT93dSgpOjA7cmV0dXJuIGYuZ2V0Vmlld3BvcnRIZWlnaHQoKS12fSxpdGVtc1NpemVQcm92aWRlcjooKT0+dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0UmVu''@;'; put 'put ''ZGVyYWJsZUluZGV4ZXMoKS5tYXAodj0+e3ZhciBNO2NvbnN0IEQ9dGhpcy5ob3QudG9WaXN1YWxSb3codik7cmV0dXJuIG51bGwhPT0oTT10aGlzLmhvdC5nZXRSb3dIZWlnaHQoRCkpJiZ2b2lkIDAhPT1NP006YS5nZXREZWZhdWx0Um93SGVpZ2h0KEQpfSl9KTtjb25zdCBkPVBvKGdwLHRo''@;'; put 'put ''aXMpLmdldFRvdGFsUGFnZXMoKTtpZihwMShWZCx0aGlzLGdzKFBvKFZkLHRoaXMpLDEsZCkpLGMubGVuZ3RoPjApe2NvbnN0e3N0YXJ0SW5kZXg6ZixwYWdlU2l6ZTp2fT1QbyhncCx0aGlzKS5nZXRTdGF0ZShQbyhWZCx0aGlzKSk7Yy5zcGxpY2UoZix2KX1jLmxlbmd0aD4wP3RoaXMuaG90''@;'; put 'put ''LmJhdGNoRXhlY3V0aW9uKCgpPT57Yy5mb3JFYWNoKGY9PlBvKFZELHRoaXMpLnNldFZhbHVlQXRJbmRleChmLCEwKSl9LCEwKTp0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51cGRhdGVDYWNoZSghMCkscDEodmosdGhpcywhMSk7Y29uc3QgaD10aGlzLmdldFBhZ2luYXRpb25EYXRhKCk7UG8o''@;'; put 'put ''VHUsdGhpcykudXBkYXRlU3RhdGUoey4uLmgsdG90YWxSZW5kZXJlZFJvd3M6bH0pfWZ1bmN0aW9uIFZ2dCgpe2lmKCF0aGlzLmhvdC52aWV3KXJldHVybiEwO2NvbnN0e3ZpZXc6Y309dGhpcy5ob3Q7aWYoYy5pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKSlyZXR1cm4hMTtpZihj''@;'; put 'put ''Lmhhc0hvcml6b250YWxTY3JvbGwoKXx8Yy5nZXRUYWJsZUhlaWdodCgpPGMuZ2V0V29ya3NwYWNlSGVpZ2h0KCkpcmV0dXJuITA7Y29uc3R7bGFzdFZpc2libGVSb3dJbmRleDpsfT10aGlzLmdldFBhZ2luYXRpb25EYXRhKCk7cmV0dXJuIGMuZ2V0TGFzdEZ1bGx5VmlzaWJsZVJvdygpIT09''@;'; put 'put ''bH1mdW5jdGlvbiBCdnQoKXt0aGlzLmhvdC5nZXRGb2N1c1Njb3BlTWFuYWdlcigpLnJlZ2lzdGVyU2NvcGUob3ksUG8oVHUsdGhpcykuZ2V0Q29udGFpbmVyKCkse3Nob3J0Y3V0c0NvbnRleHROYW1lOkh2dCxydW5Pbmx5SWY6KCk9PnRoaXMuZ2V0U2V0dGluZygic2hvd1BhZ2VTaXplIil8''@;'; put 'put ''fHRoaXMuZ2V0U2V0dGluZygic2hvd05hdmlnYXRpb24iKSxvbkFjdGl2YXRlOmM9Pntjb25zdCBsPVBvKFR1LHRoaXMpLmdldEZvY3VzYWJsZUVsZW1lbnRzKCk7bC5sZW5ndGg+MCYmKCJ0YWJfZnJvbV9hYm92ZSI9PT1jP2wuYXQoMCkuZm9jdXMoKToidGFiX2Zyb21fYmVsb3ciPT09YyYm''@;'; put 'put ''bC5hdCgtMSkuZm9jdXMoKSl9fSl9ZnVuY3Rpb24ganZ0KCl7dGhpcy5ob3QuZ2V0Rm9jdXNTY29wZU1hbmFnZXIoKS51bnJlZ2lzdGVyU2NvcGUob3kpfWZ1bmN0aW9uIHp2ZShjLGwpe2NvbnN0e2ZpcnN0VmlzaWJsZVJvd0luZGV4OmEsbGFzdFZpc2libGVSb3dJbmRleDpkfT10aGlzLmdl''@;'; put 'put ''dFBhZ2luYXRpb25EYXRhKCk7KFBvKFZkLHRoaXMpPjF8fGMucm93Pj0wKSYmKGMucm93PWEpLGwucm93PWR9ZnVuY3Rpb24genZ0KGMpe2lmKHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSl7Y29uc3R7bGFzdFZpc2libGVSb3dJbmRleDpsfT10aGlzLmdl''@;'; put 'put ''dFBhZ2luYXRpb25EYXRhKCk7Yy5yb3c9bH19ZnVuY3Rpb24gVXZ0KCl7aWYoIXRoaXMuaG90LmdldFNldHRpbmdzKCkubmF2aWdhYmxlSGVhZGVycylyZXR1cm47Y29uc3QgYz10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFjLmlzU2luZ2xlKCkpe2NvbnN0e2hpZ2hsaWdo''@;'; put 'put ''dDpsfT1jO2wucm93PWdzKGwucm93LGMuZ2V0VG9wU3RhcnRDb3JuZXIoKS5yb3csYy5nZXRCb3R0b21FbmRDb3JuZXIoKS5yb3cpfX1mdW5jdGlvbiBadnQoYyxsKXtjb25zdHtmaXJzdFZpc2libGVSb3dJbmRleDphLGxhc3RWaXNpYmxlUm93SW5kZXg6ZH09dGhpcy5nZXRQYWdpbmF0aW9u''@;'; put 'put ''RGF0YSgpO2lmKC0xPT09YXx8LTE9PT1kKXJldHVybiExO2wuZm9yRWFjaChoPT57bGV0e3N0YXJ0Um93OmZ9PWg7aWYoMD09PWMubGVuZ3RoKXJldHVybjtjb25zdCB2PU1hdGgubWluKGMubGVuZ3RoLShkLWYrMSksYy5sZW5ndGgpO2Muc3BsaWNlKDAsdil9KX1mdW5jdGlvbiBXdnQoKXsi''@;'; put 'put ''YXV0byIhPT1QbyhwcCx0aGlzKXx8UG8oeWosdGhpcyk/cDEoeWosdGhpcywhMSk6KF9jKEljLHRoaXMsc3kpLmNhbGwodGhpcykscDEoeWosdGhpcywhMCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLmhvdC5yZW5kZXIoKSl9ZnVuY3Rpb24gWXZ0KCl7Y29uc3R7''@;'; put 'put ''dmlldzpjfT10aGlzLmhvdCxsPWMuaXNIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKT9jLmdldFRvdGFsVGFibGVXaWR0aCgpOmMuZ2V0V29ya3NwYWNlV2lkdGgoKTtQbyhUdSx0aGlzKS51cGRhdGVXaWR0aChsKS5yZWZyZXNoQm9yZGVyU3RhdGUoKX1mdW5jdGlvbiBHdnQoYyl7''@;'; put 'put ''cmV0dXJuIHRoaXMuZ2V0U2V0dGluZygidWlDb250YWluZXIiKXx8ISgibnVtYmVyIj09dHlwZW9mIGN8fCJzdHJpbmciPT10eXBlb2YgYyYmL15cZCskLy50ZXN0KGMpfHwic3RyaW5nIj09dHlwZW9mIGMmJmMuZW5kc1dpdGgoInB4IikpP2M6YGNhbGMoJHsic3RyaW5nIj09dHlwZW9mIGMm''@;'; put 'put ''JmMuZW5kc1dpdGgoInB4Iik/YzpgJHtjfXB4YH0gLSAke1BvKFR1LHRoaXMpLmdldEhlaWdodCgpfXB4KWB9ZnVuY3Rpb24gJHZ0KCl7ImF1dG8iIT09UG8ocHAsdGhpcykmJl9jKEljLHRoaXMsc3kpLmNhbGwodGhpcyl9ZnVuY3Rpb24gS3Z0KCl7UG8oVHUsdGhpcykucmVmcmVzaEJvcmRl''@;'; put 'put ''clN0YXRlKCl9ZnVuY3Rpb24gWHZ0KCl7X2MoSWMsdGhpcyxzeSkuY2FsbCh0aGlzKX1mdW5jdGlvbiBxdnQoYyl7UG8oVHUsdGhpcykudXBkYXRlVGhlbWUoYyl9ZnVuY3Rpb24gZmllKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBKdnQoYyl7dmFyIGw9ZnVuY3Rpb24gUXZ0KGMsbCl7aWYo''@;'; put 'put ''Im9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1p''@;'; put 'put ''dGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEs''@;'; put 'put ''ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCB0eXQ9Y2xhc3MgZXl0e2NvbnN0cnVjdG9yKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp3aW5kb3c7ZmllKHRoaXMs''@;'; put 'put ''InJvb3RXaW5kb3ciLHZvaWQgMCksZmllKHRoaXMsInByZWZpeCIsdm9pZCAwKSxmaWUodGhpcywic2F2ZWRLZXlzIixbXSksdGhpcy5yb290V2luZG93PWEsdGhpcy5wcmVmaXg9bCx0aGlzLmxvYWRTYXZlZEtleXMoKX1zYXZlVmFsdWUobCxhKXt0aGlzLnJvb3RXaW5kb3cubG9jYWxTdG9y''@;'; put 'put ''YWdlLnNldEl0ZW0oYCR7dGhpcy5wcmVmaXh9XyR7bH1gLEpTT04uc3RyaW5naWZ5KGEpKSwtMT09PXRoaXMuc2F2ZWRLZXlzLmluZGV4T2YobCkmJih0aGlzLnNhdmVkS2V5cy5wdXNoKGwpLHRoaXMuc2F2ZVNhdmVkS2V5cygpKX1sb2FkVmFsdWUobCxhKXtjb25zdCBoPXRoaXMucm9vdFdp''@;'; put 'put ''bmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShgJHt0aGlzLnByZWZpeH1fJHt0eXBlb2YgbD4idSI/YTpsfWApO3JldHVybiBudWxsPT09aD92b2lkIDA6SlNPTi5wYXJzZShoKX1yZXNldChsKXt0aGlzLnJvb3RXaW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYCR7dGhpcy5wcmVmaXh9''@;'; put 'put ''XyR7bH1gKX1yZXNldEFsbCgpe0tuKHRoaXMuc2F2ZWRLZXlzLChsLGEpPT57dGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGAke3RoaXMucHJlZml4fV8ke3RoaXMuc2F2ZWRLZXlzW2FdfWApfSksdGhpcy5jbGVhclNhdmVkS2V5cygpfWxvYWRTYXZlZEtleXMoKXtj''@;'; put 'put ''b25zdCBsPXRoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShgJHt0aGlzLnByZWZpeH1fX3BlcnNpc3RlbnRTdGF0ZUtleXNgKSxhPSJzdHJpbmciPT10eXBlb2YgbD9KU09OLnBhcnNlKGwpOnZvaWQgMDt0aGlzLnNhdmVkS2V5cz1hfHxbXX1zYXZlU2F2ZWRLZXlzKCl7dGhp''@;'; put 'put ''cy5yb290V2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGAke3RoaXMucHJlZml4fV9fcGVyc2lzdGVudFN0YXRlS2V5c2AsSlNPTi5zdHJpbmdpZnkodGhpcy5zYXZlZEtleXMpKX1jbGVhclNhdmVkS2V5cygpe3RoaXMuc2F2ZWRLZXlzLmxlbmd0aD0wLHRoaXMuc2F2ZVNhdmVkS2V5cygp''@;'; put 'put ''fX07QWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoInBlcnNpc3RlbnRTdGF0ZVNhdmUiKSxBYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigicGVyc2lzdGVudFN0YXRlTG9hZCIpLEFhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJwZXJzaXN0ZW50U3RhdGVSZXNldCIpO2NvbnN0IFV2ZT0i''@;'; put 'put ''cGVyc2lzdGVudFN0YXRlIixadmU9bmV3IFdlYWtTZXQ7Y2xhc3Mgb3l0IGV4dGVuZHMgTXN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIG55dChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gcnl0KGMpe3ZhciBsPWZ1bmN0aW9uIGl5dChjLGwpe2lmKCJvYmpl''@;'; put 'put ''Y3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUg''@;'; put 'put ''bXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1l''@;'; put 'put ''cmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsInN0b3JhZ2UiLHZvaWQgMCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIFV2ZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAwfWlzRW5hYmxlZCgpe3JldHVybiEh''@;'; put 'put ''dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtVdmVdfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KFp2ZS5oYXModGhpcy5ob3QpfHwoWnZlLmFkZCh0aGlzLmhvdCksRWdlKCJUaGUgUGVyc2lzdGVudFN0YXRlIHBsdWdpbiBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4g''@;'; put 'put ''dmVyc2lvbiAxNy4wLiBQbGVhc2UgdXBkYXRlIHlvdXIgc2V0dGluZ3MgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgd2l0aCBmdXR1cmUgdmVyc2lvbnMuIikpLHRoaXMuc3RvcmFnZXx8KHRoaXMuc3RvcmFnZT1uZXcgdHl0KHRoaXMuaG90LnJvb3RDb250YWluZXIuaWR8fHRoaXMuaG90LnJv''@;'; put 'put ''b3RFbGVtZW50LmlkLHRoaXMuaG90LnJvb3RXaW5kb3cpKSx0aGlzLmFkZEhvb2soInBlcnNpc3RlbnRTdGF0ZVNhdmUiLChsLGEpPT50aGlzLnNhdmVWYWx1ZShsLGEpKSx0aGlzLmFkZEhvb2soInBlcnNpc3RlbnRTdGF0ZUxvYWQiLChsLGEpPT50aGlzLmxvYWRWYWx1ZShsLGEpKSx0aGlz''@;'; put 'put ''LmFkZEhvb2soInBlcnNpc3RlbnRTdGF0ZVJlc2V0IiwoKT0+dGhpcy5yZXNldFZhbHVlKCkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5zdG9yYWdlPXZvaWQgMCxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1''@;'; put 'put ''Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1sb2FkVmFsdWUobCxhKXthLnZhbHVlPXRoaXMuc3RvcmFnZS5sb2FkVmFsdWUobCl9c2F2ZVZhbHVlKGwsYSl7dGhpcy5zdG9yYWdlLnNhdmVWYWx1ZShsLGEpfXJlc2V0VmFsdWUobCl7dHlwZW9mIGw+InUi''@;'; put 'put ''P3RoaXMuc3RvcmFnZS5yZXNldEFsbCgpOnRoaXMuc3RvcmFnZS5yZXNldChsKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBwaWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGN5dChjKXt2YXIgbD1mdW5jdGlvbiB1eXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8''@;'; put 'put ''fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEg''@;'; put 'put ''cHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZp''@;'; put 'put ''Z3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIFd2ZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5v''@;'; put 'put ''dCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgZ2llPSJzZWFyY2giLGZ5dD1mdW5jdGlvbihjLGwsYSxkLGgpe2MuZ2V0Q2VsbE1ldGEobCxhKS5pc1NlYXJjaFJlc3VsdD1ofSxweXQ9ZnVuY3Rpb24oYyxsLGEpe3JldHVybiEoYmMoYyl8fG51bGw9PT1jfHwhYy50b0xvY2FsZUxv''@;'; put 'put ''d2VyQ2FzZXx8MD09PWMubGVuZ3RofHxiYyhsKXx8bnVsbD09PWwpJiYtMSE9PWwudG9TdHJpbmcoKS50b0xvY2FsZUxvd2VyQ2FzZShhLmxvY2FsZSkuaW5kZXhPZihjLnRvTG9jYWxlTG93ZXJDYXNlKGEubG9jYWxlKSl9O3ZhciBtaWU9bmV3IFdlYWtTZXQ7Y2xhc3MgZ3l0IGV4dGVuZHMg''@;'; put 'put ''TXN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIHN5dChjLGwpeyhmdW5jdGlvbiBseXQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9i''@;'; put 'put ''amVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxtaWUpLHBpZSh0aGlzLCJjYWxsYmFjayIsZnl0KSxwaWUodGhpcywicXVlcnlNZXRob2QiLHB5dCkscGllKHRoaXMsInNlYXJjaFJlc3VsdENsYXNzIiwiaHRTZWFyY2hSZXN1bHQiKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4g''@;'; put 'put ''Z2llfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDE5MH1pc0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtnaWVdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdCBhPXRoaXMuaG90LmdldFNldHRp''@;'; put 'put ''bmdzKClbZ2llXTt0aGlzLnVwZGF0ZVBsdWdpblNldHRpbmdzKGEpLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVuZGVyZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIFd2ZSht''@;'; put 'put ''aWUsbCxZdmUpLmNhbGwobCwuLi5oKX0pLHN1cGVyLmVuYWJsZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt2YXIgbD10aGlzO2NvbnN0IGE9ZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTty''@;'; put 'put ''ZXR1cm4gV3ZlKG1pZSxsLFl2ZSkuY2FsbChsLC4uLmgpfTt0aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVSZW5kZXJlciIsYSksdGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsKCk9Pnt0aGlzLmhvdC5yZW1vdmVIb29rKCJiZWZvcmVSZW5kZXJlciIsYSl9KSxzdXBlci5k''@;'; put 'put ''aXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1xdWVyeShsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhp''@;'; put 'put ''cy5nZXRDYWxsYmFjaygpLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnRoaXMuZ2V0UXVlcnlNZXRob2QoKTtjb25zdCBoPXRoaXMuaG90LmNvdW50Um93cygpLGY9dGhpcy5ob3QuY291bnRDb2xzKCksdj1bXSxNPXRoaXMuaG90O3Jl''@;'; put 'put ''dHVybiBRYSgwLGgtMSxEPT57UWEoMCxmLTEsVT0+e2NvbnN0IHRlPXRoaXMuaG90LmdldERhdGFBdENlbGwoRCxVKSxvZT10aGlzLmhvdC5nZXRDZWxsTWV0YShELFUpLHZlPW9lLnNlYXJjaC5jYWxsYmFja3x8YSxGZT0ob2Uuc2VhcmNoLnF1ZXJ5TWV0aG9kfHxkKShsLHRlLG9lKTtGZSYm''@;'; put 'put ''di5wdXNoKHtyb3c6RCxjb2w6VSxkYXRhOnRlfSksdmUmJnZlKE0sRCxVLHRlLEZlKX0pfSksdn1nZXRDYWxsYmFjaygpe3JldHVybiB0aGlzLmNhbGxiYWNrfXNldENhbGxiYWNrKGwpe3RoaXMuY2FsbGJhY2s9bH1nZXRRdWVyeU1ldGhvZCgpe3JldHVybiB0aGlzLnF1ZXJ5TWV0aG9kfXNl''@;'; put 'put ''dFF1ZXJ5TWV0aG9kKGwpe3RoaXMucXVlcnlNZXRob2Q9bH1nZXRTZWFyY2hSZXN1bHRDbGFzcygpe3JldHVybiB0aGlzLnNlYXJjaFJlc3VsdENsYXNzfXNldFNlYXJjaFJlc3VsdENsYXNzKGwpe3RoaXMuc2VhcmNoUmVzdWx0Q2xhc3M9bH11cGRhdGVQbHVnaW5TZXR0aW5ncyhsKXttbyhs''@;'; put 'put ''KSYmKGwuc2VhcmNoUmVzdWx0Q2xhc3MmJnRoaXMuc2V0U2VhcmNoUmVzdWx0Q2xhc3MobC5zZWFyY2hSZXN1bHRDbGFzcyksbC5xdWVyeU1ldGhvZCYmdGhpcy5zZXRRdWVyeU1ldGhvZChsLnF1ZXJ5TWV0aG9kKSxsLmNhbGxiYWNrJiZ0aGlzLnNldENhbGxiYWNrKGwuY2FsbGJhY2spKX1k''@;'; put 'put ''ZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBZdmUoYyxsLGEsZCxoLGYpe2NvbnN0IHY9Zi5jbGFzc05hbWV8fFtdO2xldCBNPVtdOyJzdHJpbmciPT10eXBlb2Ygdj9NPXYuc3BsaXQoIiAiKTpNLnB1c2goLi4udiksdGhpcy5pc0VuYWJsZWQoKSYmZi5pc1NlYXJjaFJlc3Vs''@;'; put 'put ''dD9NLmluY2x1ZGVzKHRoaXMuc2VhcmNoUmVzdWx0Q2xhc3MpfHxNLnB1c2goYCR7dGhpcy5zZWFyY2hSZXN1bHRDbGFzc31gKTpNLmluY2x1ZGVzKHRoaXMuc2VhcmNoUmVzdWx0Q2xhc3MpJiZNLnNwbGljZShNLmluZGV4T2YodGhpcy5zZWFyY2hSZXN1bHRDbGFzcyksMSksZi5jbGFzc05h''@;'; put 'put ''bWU9TS5qb2luKCIgIil9ZnVuY3Rpb24gYmooYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIG15dChjKXt2YXIgbD1mdW5jdGlvbiB2eXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIg''@;'; put 'put ''ZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMs''@;'; put 'put ''InN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIEd2ZXtjb25zdHJ1Y3RvcihsKXti''@;'; put 'put ''aih0aGlzLCJ2aWV3cG9ydFdpZHRoIix2b2lkIDApLGJqKHRoaXMsIm92ZXJ3cml0ZUNvbHVtbldpZHRoRm4iLHZvaWQgMCksYmoodGhpcywiYmFzZVdpZHRocyIsbmV3IE1hcCksYmoodGhpcywic3RyZXRjaGVkV2lkdGhzIixuZXcgTWFwKSx0aGlzLm92ZXJ3cml0ZUNvbHVtbldpZHRoRm49''@;'; put 'put ''bH1wcmVwYXJlKGwpe2xldHt2aWV3cG9ydFdpZHRoOmF9PWw7dGhpcy52aWV3cG9ydFdpZHRoPWEsdGhpcy5iYXNlV2lkdGhzLmNsZWFyKCksdGhpcy5zdHJldGNoZWRXaWR0aHMuY2xlYXIoKX1zZXRDb2x1bW5CYXNlV2lkdGgobCxhKXt0aGlzLmJhc2VXaWR0aHMuc2V0KGwsYSl9Y2FsY3Vs''@;'; put 'put ''YXRlKCl7fWdldFdpZHRocygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuc3RyZXRjaGVkV2lkdGhzKX19Y2xhc3MgeXl0IGV4dGVuZHMgR3Zle2NhbGN1bGF0ZSgpe2NvbnN0IGw9QXJyYXkuZnJvbSh0aGlzLmJhc2VXaWR0aHMpLnJlZHVjZSgob2UsdmUpPT57bGV0Wyx3ZV09dmU7cmV0dXJu''@;'; put 'put ''IG9lK3dlfSwwKTtpZih0aGlzLnZpZXdwb3J0V2lkdGgtbDwwKXJldHVybiB2b2lkIHRoaXMuc3RyZXRjaGVkV2lkdGhzLmNsZWFyKCk7Y29uc3QgZD10aGlzLnZpZXdwb3J0V2lkdGgvbCxoPVtdLGY9W107bGV0IHY9dGhpcy52aWV3cG9ydFdpZHRoLE09MDtpZih0aGlzLmJhc2VXaWR0aHMu''@;'; put 'put ''Zm9yRWFjaCgob2UsdmUpPT57Y29uc3Qgd2U9TWF0aC5yb3VuZChvZSpkKSxGZT10aGlzLm92ZXJ3cml0ZUNvbHVtbldpZHRoRm4od2UsdmUpO3dlPT09RmUmJndlPj01MD8oaC5wdXNoKFt2ZSxGZV0pLE0rPUZlKTp3ZSE9PUZlJiYoaC5wdXNoKFt2ZSxGZV0pLGYucHVzaCh2ZSksdi09RmUp''@;'; put 'put ''fSksdjw9NTApcmV0dXJuIHZvaWQgdGhpcy5zdHJldGNoZWRXaWR0aHMuY2xlYXIoKTtjb25zdCBEPXYvTTtsZXQgVT0tMSx0ZT0wO2guZm9yRWFjaCgob2UsdmUpPT57bGV0W3dlLEZlXT1vZSxXZT1GZTtmLmluY2x1ZGVzKHdlKXx8KFdlPU1hdGgucm91bmQoRmUqRCkpLHRoaXMuc3RyZXRj''@;'; put 'put ''aGVkV2lkdGhzLnNldCh3ZSxXZSksVT13ZSx2ZTxoLmxlbmd0aC0xJiYodGUrPVdlKX0pLHRoaXMuc3RyZXRjaGVkV2lkdGhzLnNpemU+MSYmdGhpcy5zdHJldGNoZWRXaWR0aHMuc2V0KFUsTWF0aC5yb3VuZCh0aGlzLnZpZXdwb3J0V2lkdGgtdGUpKX19ZnVuY3Rpb24gJHZlKGMsbCxhKXso''@;'; put 'put ''ZnVuY3Rpb24gYnl0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiB2aWUoYyxsKXtyZXR1cm4gYy5nZXQo''@;'; put 'put ''S3ZlKGMsbCkpfWZ1bmN0aW9uIF9qKGMsbCxhKXtyZXR1cm4gYy5zZXQoS3ZlKGMsbCksYSksYX1mdW5jdGlvbiBLdmUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3Io''@;'; put 'put ''IlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciB3aj1uZXcgV2Vha01hcCxCRD1uZXcgV2Vha01hcDtjbGFzcyBfeXQgZXh0ZW5kcyBHdmV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLCR2ZSh0aGlzLHdqLDApLCR2ZSh0aGlzLEJE''@;'; put 'put ''LC0xKX1wcmVwYXJlKGwpe3N1cGVyLnByZXBhcmUobCksX2ood2osdGhpcywwKSxfaihCRCx0aGlzLC0xKX1zZXRDb2x1bW5CYXNlV2lkdGgobCxhKXtzdXBlci5zZXRDb2x1bW5CYXNlV2lkdGgobCxhKSxfaihCRCx0aGlzLGwpLF9qKHdqLHRoaXMsYSl9Y2FsY3VsYXRlKCl7aWYoLTE9PT12''@;'; put 'put ''aWUoQkQsdGhpcykpcmV0dXJuO2NvbnN0IGw9QXJyYXkuZnJvbSh0aGlzLmJhc2VXaWR0aHMpLnJlZHVjZSgoZCxoKT0+e2xldFssZl09aDtyZXR1cm4gZCtmfSwwKSxhPU1hdGgubWF4KHRoaXMudmlld3BvcnRXaWR0aC1sK3ZpZSh3aix0aGlzKSwwKTt0aGlzLnN0cmV0Y2hlZFdpZHRocy5z''@;'; put 'put ''ZXQodmllKEJELHRoaXMpLGEpfX1mdW5jdGlvbiBDaihjLGwsYSl7WHZlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBYdmUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFu''@;'; put 'put ''IG9iamVjdCIpfWZ1bmN0aW9uIFdjKGMsbCl7cmV0dXJuIGMuZ2V0KHJTKGMsbCkpfWZ1bmN0aW9uIHlpZShjLGwsYSl7cmV0dXJuIGMuc2V0KHJTKGMsbCksYSksYX1mdW5jdGlvbiByUyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIEswPW5ldyBXZWFrTWFwLGlTPW5ldyBXZWFrTWFwLGJpZT1uZXcgV2Vha01hcCxTaj1uZXcgV2Vha01hcCxqRD1uZXcgV2Vha1Nl''@;'; put 'put ''dDtjbGFzcyBTeXR7Y29uc3RydWN0b3IobCl7KGZ1bmN0aW9uIHd5dChjLGwpe1h2ZShjLGwpLGwuYWRkKGMpfSkodGhpcyxqRCksQ2oodGhpcyxLMCx2b2lkIDApLENqKHRoaXMsaVMsdm9pZCAwKSxDaih0aGlzLGJpZSxuZXcgTWFwKFtbImFsbCIsbmV3IHl5dChyUyhqRCx0aGlzLHF2ZSku''@;'; put 'put ''YmluZCh0aGlzKSldLFsibGFzdCIsbmV3IF95dChyUyhqRCx0aGlzLHF2ZSkuYmluZCh0aGlzKSldXSkpLENqKHRoaXMsU2osIm5vbmUiKSx5aWUoSzAsdGhpcyxsKSx5aWUoaVMsdGhpcyxXYyhLMCx0aGlzKS5jb2x1bW5JbmRleE1hcHBlci5jcmVhdGVBbmRSZWdpc3RlckluZGV4TWFwKCJz''@;'; put 'put ''dHJldGNoQ29sdW1ucyIsInBoeXNpY2FsSW5kZXhUb1ZhbHVlIikpfXVzZVN0cmF0ZWd5KGwpe3lpZShTaix0aGlzLFdjKGJpZSx0aGlzKS5oYXMobCk/bDoibm9uZSIpfXJlZnJlc2hTdHJldGNoaW5nKCl7Im5vbmUiIT09V2MoU2osdGhpcyk/V2MoSzAsdGhpcykuYmF0Y2hFeGVjdXRpb24o''@;'; put 'put ''KCk9PntXYyhpUyx0aGlzKS5jbGVhcigpO2NvbnN0IGw9V2MoYmllLHRoaXMpLmdldChXYyhTaix0aGlzKSk7bGV0IGQ9V2MoSzAsdGhpcykudmlldy5nZXRWaWV3cG9ydFdpZHRoKCk7clMoakQsdGhpcyxNeXQpLmNhbGwodGhpcykmJihkLT13dShXYyhLMCx0aGlzKS5yb290RG9jdW1lbnQp''@;'; put 'put ''KSxsLnByZXBhcmUoe3ZpZXdwb3J0V2lkdGg6ZH0pO2ZvcihsZXQgaD0wO2g8V2MoSzAsdGhpcykuY291bnRDb2xzKCk7aCsrKVdjKEswLHRoaXMpLmNvbHVtbkluZGV4TWFwcGVyLmlzSGlkZGVuKFdjKEswLHRoaXMpLnRvUGh5c2ljYWxDb2x1bW4oaCkpfHxsLnNldENvbHVtbkJhc2VXaWR0''@;'; put 'put ''aChoLHJTKGpELHRoaXMseHl0KS5jYWxsKHRoaXMsaCkpO2wuY2FsY3VsYXRlKCksbC5nZXRXaWR0aHMoKS5mb3JFYWNoKGg9PntsZXRbZix2XT1oO1djKGlTLHRoaXMpLnNldFZhbHVlQXRJbmRleChXYyhLMCx0aGlzKS50b1BoeXNpY2FsQ29sdW1uKGYpLHYpfSl9LCEwKTpXYyhpUyx0aGlz''@;'; put 'put ''KS5jbGVhcigpfWdldFN0cmV0Y2hlZFdpZHRoKGwpe3JldHVybiBXYyhpUyx0aGlzKS5nZXRWYWx1ZUF0SW5kZXgoV2MoSzAsdGhpcykudG9QaHlzaWNhbENvbHVtbihsKSl9fWZ1bmN0aW9uIE15dCgpe2NvbnN0e3ZpZXc6YyxzdHlsZXNIYW5kbGVyOmx9PVdjKEswLHRoaXMpO2lmKGMuaXNW''@;'; put 'put ''ZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCkpcmV0dXJuITE7Y29uc3QgYT1jLmdldFZpZXdwb3J0SGVpZ2h0KCksZD1XYyhLMCx0aGlzKS5jb3VudFJvd3MoKSxoPWwuZ2V0RGVmYXVsdFJvd0hlaWdodCgpLGY9bC5pc0NsYXNzaWNUaGVtZSgpLHY9dGU9PmYmJjA9PT10ZT8xOjA7bGV0''@;'; put 'put ''IE09MCxEPSExO2ZvcihsZXQgdGU9MDt0ZTxkO3RlKyspe3ZhciBVO2lmKCFXYyhLMCx0aGlzKS5yb3dJbmRleE1hcHBlci5pc0hpZGRlbihXYyhLMCx0aGlzKS50b1BoeXNpY2FsUm93KHRlKSkmJihNKz0obnVsbCE9PShVPVdjKEswLHRoaXMpLmdldFJvd0hlaWdodCh0ZSkpJiZ2b2lkIDAh''@;'; put 'put ''PT1VP1U6aCkrdih0ZSksTT5hKSl7RD0hMDticmVha319cmV0dXJuIER9ZnVuY3Rpb24geHl0KGMpe3ZhciBsO3JldHVybiBudWxsIT09KGw9V2MoSzAsdGhpcykuZ2V0Q29sV2lkdGgoYywiU3RyZXRjaENvbHVtbnMiKSkmJnZvaWQgMCE9PWw/bDo1MH1mdW5jdGlvbiBxdmUoYyxsKXtyZXR1''@;'; put 'put ''cm4gV2MoSzAsdGhpcykucnVuSG9va3MoImJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aCIsYyxsKX1mdW5jdGlvbiBfaWUoYyxsLGEpe0p2ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gSnZlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxp''@;'; put 'put ''emUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiB3aWUoYyxsLGEpe3JldHVybiBjLnNldChNaihjLGwpLGEpLGF9ZnVuY3Rpb24gWjUoYyxsKXtyZXR1cm4gYy5nZXQoTWooYyxsKSl9ZnVuY3Rpb24gTWooYyxsLGEpe2lmKCJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBhUz1uZXcgV2Vha01hcCx4aj1uZXcgV2Vha01hcCx6RD1u''@;'; put 'put ''ZXcgV2Vha01hcCxDaWU9bmV3IFdlYWtTZXQ7Y2xhc3Mga3l0IGV4dGVuZHMgTXN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIEV5dChjLGwpe0p2ZShjLGwpLGwuYWRkKGMpfSh0aGlzLENpZSksX2llKHRoaXMsYVMsbmV3IFN5dCh0aGlzLmhvdCkpLF9pZSh0''@;'; put 'put ''aGlzLHhqLG51bGwpLF9pZSh0aGlzLHpELG5ldyBSZXNpemVPYnNlcnZlcihsPT57cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dmFyIGE7bnVsbCE9PShhPXRoaXMuaG90KSYmdm9pZCAwIT09YSYmYS52aWV3LmlzSG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCkmJmwuZm9yRWFj''@;'; put 'put ''aChkPT57bGV0e2NvbnRlbnRSZWN0Omh9PWQ7bnVsbCE9PVo1KHhqLHRoaXMpJiZaNSh4aix0aGlzKSE9PWgud2lkdGgmJih0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuaG90LnJlZnJlc2hEaW1lbnNpb25zKCkpLHdpZSh4aix0aGlzLGgud2lkdGgpfSl9KX0pKX1z''@;'; put 'put ''dGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4ic3RyZXRjaENvbHVtbnMifXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDE1NX1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybiEwfWlzRW5hYmxlZCgpe3JldHVyblsiYWxsIiwibGFzdCJdLmluY2x1ZGVzKHRo''@;'; put 'put ''aXMuaG90LmdldFNldHRpbmdzKCkuc3RyZXRjaEgpfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwoWjUoYVMsdGhpcykudXNlU3RyYXRlZ3kodGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5zdHJldGNoSCksWjUoekQsdGhpcykub2JzZXJ2ZSh0aGlzLmhvdC5yb290RWxl''@;'; put 'put ''bWVudCksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW5kZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIE1qKENpZSxsLEl5dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29r''@;'; put 'put ''KCJtb2RpZnlDb2xXaWR0aCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gTWooQ2llLGwsRHl0KS5jYWxsKGwsLi4uZCl9LDEwKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBk''@;'; put 'put ''YXRlUGx1Z2luKCl7WjUoYVMsdGhpcykudXNlU3RyYXRlZ3kodGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5zdHJldGNoSCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKSxaNSh6RCx0aGlzKS51bm9ic2VydmUodGhpcy5ob3Qucm9vdEVs''@;'; put 'put ''ZW1lbnQpfWdldENvbHVtbldpZHRoKGwpe3JldHVybiBaNShhUyx0aGlzKS5nZXRTdHJldGNoZWRXaWR0aChsKX1kZXN0cm95KCl7WjUoekQsdGhpcykuZGlzY29ubmVjdCgpLHdpZSh6RCx0aGlzLG51bGwpLHdpZShhUyx0aGlzLG51bGwpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gRHl0''@;'; put 'put ''KGMsbCxhKXtpZihhPT09dGhpcy5wbHVnaW5OYW1lKXJldHVybjtjb25zdCBkPXRoaXMuZ2V0Q29sdW1uV2lkdGgobCk7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBkP2Q6Y31mdW5jdGlvbiBJeXQoYyl7YyYmWjUoYVMsdGhpcykucmVmcmVzaFN0cmV0Y2hpbmcoKX1mdW5jdGlvbiBFaihjLGws''@;'; put 'put ''YSl7cmV0dXJuKGw9ZnVuY3Rpb24gT3l0KGMpe3ZhciBsPWZ1bmN0aW9uIFB5dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9i''@;'; put 'put ''amVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVv''@;'; put 'put ''ZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gU2llKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhs''@;'; put 'put ''KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgVGo9bmV3IFdlYWtTZXQ7Y2xhc3MgTnl0IGV4dGVuZHMgTXN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5h''@;'; put 'put ''cmd1bWVudHMpLGZ1bmN0aW9uIFJ5dChjLGwpeyhmdW5jdGlvbiBMeXQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhp''@;'; put 'put ''cyxUaiksRWoodGhpcywic2Nyb2xsYmFycyIsW10pLEVqKHRoaXMsImNsb25lcyIsW10pLEVqKHRoaXMsImxvY2tlZENvbGxlY3Rpb24iLCExKSxFaih0aGlzLCJmcmVlemVPdmVybGF5cyIsITEpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiJ0b3VjaFNjcm9sbCJ9c3RhdGljIGdl''@;'; put 'put ''dCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjAwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuITB9aXNFbmFibGVkKCl7cmV0dXJuICRxKCl9ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJhZnRlclZpZXdSZW5kZXIiLCgpPT5TaWUoVGosdGhp''@;'; put 'put ''cyxWeXQpLmNhbGwodGhpcykpLHRoaXMucmVnaXN0ZXJFdmVudHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5sb2NrZWRDb2xsZWN0aW9uPSExLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCl9cmVn''@;'; put 'put ''aXN0ZXJFdmVudHMoKXt0aGlzLmFkZEhvb2soImJlZm9yZVRvdWNoU2Nyb2xsIiwoKT0+U2llKFRqLHRoaXMsQnl0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyTW9tZW50dW1TY3JvbGwiLCgpPT5TaWUoVGosdGhpcyxqeXQpLmNhbGwodGhpcykpfX1mdW5jdGlvbiBWeXQoKXtp''@;'; put 'put ''Zih0aGlzLmxvY2tlZENvbGxlY3Rpb24pcmV0dXJuO2NvbnN0e3RvcE92ZXJsYXk6Yyxib3R0b21PdmVybGF5OmwsaW5saW5lU3RhcnRPdmVybGF5OmEsdG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5OmQsYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5Omh9PXRoaXMuaG90LnZpZXcu''@;'; put 'put ''X3d0Lnd0T3ZlcmxheXM7dGhpcy5sb2NrZWRDb2xsZWN0aW9uPSEwLHRoaXMuc2Nyb2xsYmFycy5sZW5ndGg9MCx0aGlzLnNjcm9sbGJhcnMucHVzaChjKSxsLmNsb25lJiZ0aGlzLnNjcm9sbGJhcnMucHVzaChsKSx0aGlzLnNjcm9sbGJhcnMucHVzaChhKSxkJiZ0aGlzLnNjcm9sbGJhcnMu''@;'; put 'put ''cHVzaChkKSxoJiZoLmNsb25lJiZ0aGlzLnNjcm9sbGJhcnMucHVzaChoKSx0aGlzLmNsb25lcz1bXSxjLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLmNsb25lcy5wdXNoKGMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSksbC5uZWVkRnVsbFJlbmRlciYmdGhpcy5jbG9uZXMucHVzaChs''@;'; put 'put ''LmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpLGEubmVlZEZ1bGxSZW5kZXImJnRoaXMuY2xvbmVzLnB1c2goYS5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKSxkJiZ0aGlzLmNsb25lcy5wdXNoKGQuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSksaCYmaC5j''@;'; put 'put ''bG9uZSYmdGhpcy5jbG9uZXMucHVzaChoLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpfWZ1bmN0aW9uIEJ5dCgpe3RoaXMuZnJlZXplT3ZlcmxheXM9ITAsS24odGhpcy5jbG9uZXMsYz0+e2lpKGMsImhpZGUtdHdlZW4iKX0pfWZ1bmN0aW9uIGp5dCgpe3RoaXMuZnJlZXplT3Zl''@;'; put 'put ''cmxheXM9ITEsS24odGhpcy5jbG9uZXMsYz0+e1ZhKGMsImhpZGUtdHdlZW4iKSxpaShjLCJzaG93LXR3ZWVuIil9KSx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57S24odGhpcy5jbG9uZXMsYz0+e1ZhKGMsInNob3ctdHdlZW4iKX0pfSw0MDApLEtuKHRoaXMuc2Nyb2xsYmFycyxj''@;'; put 'put ''PT57Yy5yZWZyZXNoKCksYy5yZXNldEZpeGVkUG9zaXRpb24oKX0pLHRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuc3luY1Njcm9sbFdpdGhNYXN0ZXIoKX1jb25zdCBBaj0idHJpbVJvd3MiO3ZhciBRdmU9bmV3IFdlYWtTZXQ7Y2xhc3MgS3l0IGV4dGVuZHMgTXN7Y29uc3RydWN0b3Io''@;'; put 'put ''KXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIHp5dChjLGwpeyhmdW5jdGlvbiBVeXQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxs''@;'; put 'put ''LmFkZChjKX0odGhpcyxRdmUpLGZ1bmN0aW9uIFp5dChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gV3l0KGMpe3ZhciBsPWZ1bmN0aW9uIFl5dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEp''@;'; put 'put ''e3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShj''@;'; put 'put ''KX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsInRyaW1tZWRSb3dzTWFw''@;'; put 'put ''IixudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gQWp9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMzMwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtBal19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy50''@;'; put 'put ''cmltbWVkUm93c01hcD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCgidHJpbVJvd3MiLG5ldyBmayksdGhpcy50cmltbWVkUm93c01hcC5hZGRMb2NhbEhvb2soImluaXQiLCgpPT5mdW5jdGlvbiBHeXQoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMu''@;'; put 'put ''aGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfShRdmUsdGhpcyxYeXQpLmNhbGwodGhpcykpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVn''@;'; put 'put ''aW4oKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbQWpdO0FycmF5LmlzQXJyYXkobCkmJnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57dGhpcy50cmltbWVkUm93c01hcC5jbGVhcigpLEtuKGwsYT0+e3RoaXMudHJpbW1lZFJvd3NNYXAuc2V0VmFsdWVBdEluZGV4KGEsITAp''@;'; put 'put ''fSl9LCEwKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCgidHJpbVJvd3MiKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9Z2V0VHJpbW1lZFJvd3MoKXtyZXR1cm4gdGhpcy50cmltbWVkUm93c01hcC5nZXRU''@;'; put 'put ''cmltbWVkSW5kZXhlcygpfXRyaW1Sb3dzKGwpe2NvbnN0IGE9dGhpcy5nZXRUcmltbWVkUm93cygpLGQ9dGhpcy5pc1ZhbGlkQ29uZmlnKGwpO2xldCBoPWE7ZCYmKGg9QXJyYXkuZnJvbShuZXcgU2V0KGEuY29uY2F0KGwpKSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVRyaW1S''@;'; put 'put ''b3ciLGEsaCxkKSYmKGQmJnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57S24obCx2PT57dGhpcy50cmltbWVkUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgodiwhMCl9KX0sITApLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclRyaW1Sb3ciLGEsaCxkLGQmJmgubGVuZ3RoPmEubGVuZ3RoKSl9''@;'; put 'put ''dHJpbVJvdygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMudHJpbVJvd3MoYSl9dW50cmltUm93cyhsKXtjb25zdCBhPXRoaXMuZ2V0VHJpbW1lZFJvd3MoKSxkPXRoaXMuaXNWYWxpZENvbmZpZyhs''@;'; put 'put ''KTtsZXQgaD1hO2NvbnN0IGY9dGhpcy50cmltbWVkUm93c01hcC5nZXRWYWx1ZXMoKS5zbGljZSgpLHY9bC5sZW5ndGg+MDtkJiZ2JiYoS24obCxEPT57ZltEXT0hMX0pLGg9YTAoZiwoRCxVLHRlKT0+KFUmJkQucHVzaCh0ZSksRCksW10pKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZv''@;'; put 'put ''cmVVbnRyaW1Sb3ciLGEsaCxkJiZ2KSYmKGQmJnYmJnRoaXMudHJpbW1lZFJvd3NNYXAuc2V0VmFsdWVzKGYpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclVudHJpbVJvdyIsYSxoLGQmJnYsZCYmaC5sZW5ndGg8YS5sZW5ndGgpKX11bnRyaW1Sb3coKXtmb3IodmFyIGw9YXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLnVudHJpbVJvd3MoYSl9aXNUcmltbWVkKGwpe3JldHVybiB0aGlzLnRyaW1tZWRSb3dzTWFwLmdldFZhbHVlQXRJbmRleChsKXx8ITF9dW50cmltQWxsKCl7dGhpcy51bnRyaW1Sb3dzKHRoaXMu''@;'; put 'put ''Z2V0VHJpbW1lZFJvd3MoKSl9aXNWYWxpZENvbmZpZyhsKXtjb25zdCBhPXRoaXMuaG90LmNvdW50U291cmNlUm93cygpO3JldHVybiBsLmV2ZXJ5KGQ9Pk51bWJlci5pc0ludGVnZXIoZCkmJmQ+PTAmJmQ8YSl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gWHl0KCl7Y29u''@;'; put 'put ''c3QgYz10aGlzLmhvdC5nZXRTZXR0aW5ncygpW0FqXTtBcnJheS5pc0FycmF5KGMpJiZ0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e0tuKGMsbD0+e3RoaXMudHJpbW1lZFJvd3NNYXAuc2V0VmFsdWVBdEluZGV4KGwsITApfSl9LCEwKX1jbGFzcyB0M3tjb25zdHJ1Y3RvcihsKXsoZnVu''@;'; put 'put ''Y3Rpb24gcXl0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBKeXQoYyl7dmFyIGw9ZnVuY3Rpb24gUXl0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRl''@;'; put 'put ''ZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4i''@;'; put 'put ''c3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30pKHRoaXMsImFjdGlvblR5cGUiLCIiKSx0aGlzLmFjdGlvblR5cGU9bH11''@;'; put 'put ''bmRvKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX1yZWRvKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX19ZnVuY3Rpb24ga2ooYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGVidChjKXt2YXIgbD1mdW5jdGlvbiB0YnQoYyxsKXtpZigib2JqZWN0IiE9''@;'; put 'put ''dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3Qg''@;'; put 'put ''cmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxl''@;'; put 'put ''OiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIE1pZSBleHRlbmRzIHQze2NvbnN0cnVjdG9yKGwpe2xldHtzdGF0ZUJlZm9yZTphLHJhbmdlOmQsdHlwZTpoLGFsaWdubWVudDpmfT1sO3N1cGVyKCJjZWxsX2FsaWdubWVudCIpLGtqKHRoaXMsInN0YXRl''@;'; put 'put ''QmVmb3JlIix2b2lkIDApLGtqKHRoaXMsInJhbmdlIix2b2lkIDApLGtqKHRoaXMsInR5cGUiLHZvaWQgMCksa2oodGhpcywiYWxpZ25tZW50Iix2b2lkIDApLHRoaXMuc3RhdGVCZWZvcmU9YSx0aGlzLnJhbmdlPWQsdGhpcy50eXBlPWgsdGhpcy5hbGlnbm1lbnQ9Zn1zdGF0aWMgc3RhcnRS''@;'; put 'put ''ZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYmVmb3JlQ2VsbEFsaWdubWVudCIsKGQsaCxmLHYpPT57YS5kb25lKCgpPT5uZXcgTWllKHtzdGF0ZUJlZm9yZTpkLHJhbmdlOmgsdHlwZTpmLGFsaWdubWVudDp2fSkpfSl9dW5kbyhsLGEpe0tuKHRoaXMucmFuZ2UsZD0+e2QuZm9y''@;'; put 'put ''QWxsKChoLGYpPT57aD49MCYmZj49MCYmbC5zZXRDZWxsTWV0YShoLGYsImNsYXNzTmFtZSIsdGhpcy5zdGF0ZUJlZm9yZVtoXVtmXXx8IiBodExlZnQiKX0pfSksbC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxsLnJlbmRlcigpfXJlZG8obCxhKXskNih0aGlzLnJhbmdlLHRo''@;'; put 'put ''aXMudHlwZSx0aGlzLmFsaWdubWVudCwoZCxoKT0+bC5nZXRDZWxsTWV0YShkLGgpLChkLGgsZix2KT0+bC5zZXRDZWxsTWV0YShkLGgsZix2KSksbC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxsLnJlbmRlcigpfX1mdW5jdGlvbiBleWUoYyxsLGEpe3JldHVybihsPWZ1bmN0''@;'; put 'put ''aW9uIG5idChjKXt2YXIgbD1mdW5jdGlvbiByYnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZCly''@;'; put 'put ''ZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWlu''@;'; put 'put ''IGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHhpZSBleHRlbmRzIHQze2NvbnN0cnVjdG9yKGwpe2xldHtjb2x1bW5zOmEsZmluYWxJbmRleDpkfT1sO3N1cGVyKCJj''@;'; put 'put ''b2xfbW92ZSIpLGV5ZSh0aGlzLCJjb2x1bW5zIix2b2lkIDApLGV5ZSh0aGlzLCJmaW5hbENvbHVtbkluZGV4Iix2b2lkIDApLHRoaXMuY29sdW1ucz1hLnNsaWNlKCksdGhpcy5maW5hbENvbHVtbkluZGV4PWR9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2so''@;'; put 'put ''ImJlZm9yZUNvbHVtbk1vdmUiLChkLGgpPT57ITEhPT1kJiZhLmRvbmUoKCk9Pm5ldyB4aWUoe2NvbHVtbnM6ZCxmaW5hbEluZGV4Omh9KSl9KX11bmRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigibWFudWFsQ29sdW1uTW92ZSIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIs''@;'; put 'put ''YSksU3JlKHRoaXMuY29sdW1ucyx0aGlzLmZpbmFsQ29sdW1uSW5kZXgsbC5jb2x1bW5JbmRleE1hcHBlci5nZXROdW1iZXJPZkluZGV4ZXMoKSkucmV2ZXJzZSgpLmZvckVhY2goZj0+e2xldHtmcm9tOnYsdG86TX09Zjt2PE0mJihNLT0xKSxkLm1vdmVDb2x1bW4oTSx2KX0pLGwucmVuZGVy''@;'; put 'put ''KCksbC5kZXNlbGVjdENlbGwoKSxsLnNlbGVjdENvbHVtbnModGhpcy5jb2x1bW5zWzBdLHRoaXMuY29sdW1uc1swXSt0aGlzLmNvbHVtbnMubGVuZ3RoLTEpfXJlZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJtYW51YWxDb2x1bW5Nb3ZlIik7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3''@;'; put 'put ''UmVuZGVyIixhKSxkLm1vdmVDb2x1bW5zKHRoaXMuY29sdW1ucy5zbGljZSgpLHRoaXMuZmluYWxDb2x1bW5JbmRleCksbC5yZW5kZXIoKSxsLmRlc2VsZWN0Q2VsbCgpLGwuc2VsZWN0Q29sdW1ucyh0aGlzLmZpbmFsQ29sdW1uSW5kZXgsdGhpcy5maW5hbENvbHVtbkluZGV4K3RoaXMuY29s''@;'; put 'put ''dW1ucy5sZW5ndGgtMSl9fWZ1bmN0aW9uIHR5ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gaWJ0KGMpe3ZhciBsPWZ1bmN0aW9uIGFidChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3Zh''@;'; put 'put ''ciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0o''@;'; put 'put ''Yywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgRWllIGV4dGVuZHMgdDN7Y29u''@;'; put 'put ''c3RydWN0b3IobCl7bGV0e2N1cnJlbnRTb3J0U3RhdGU6YSxuZXdTb3J0U3RhdGU6ZH09bDtzdXBlcigiY29sX3NvcnQiKSx0eWUodGhpcywicHJldmlvdXNTb3J0U3RhdGUiLHZvaWQgMCksdHllKHRoaXMsIm5leHRTb3J0U3RhdGUiLHZvaWQgMCksdGhpcy5wcmV2aW91c1NvcnRTdGF0ZT1h''@;'; put 'put ''LHRoaXMubmV4dFNvcnRTdGF0ZT1kfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJiZWZvcmVDb2x1bW5Tb3J0IiwoZCxoLGYpPT57ZiYmYS5kb25lKCgpPT5uZXcgRWllKHtjdXJyZW50U29ydFN0YXRlOmQsbmV3U29ydFN0YXRlOmh9KSl9KX11bmRvKGws''@;'; put 'put ''YSl7Y29uc3QgZD1sLmdldFBsdWdpbigiY29sdW1uU29ydGluZyIpLGg9bC5nZXRQbHVnaW4oIm11bHRpQ29sdW1uU29ydGluZyIpLGY9aC5pc0VuYWJsZWQoKT9oOmQ7dGhpcy5wcmV2aW91c1NvcnRTdGF0ZS5sZW5ndGg/Zi5zb3J0KHRoaXMucHJldmlvdXNTb3J0U3RhdGUpOmYuY2xlYXJT''@;'; put 'put ''b3J0KCksYSgpfXJlZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJjb2x1bW5Tb3J0aW5nIiksaD1sLmdldFBsdWdpbigibXVsdGlDb2x1bW5Tb3J0aW5nIik7KGguaXNFbmFibGVkKCk/aDpkKS5zb3J0KHRoaXMubmV4dFNvcnRTdGF0ZSksYSgpfX1mdW5jdGlvbiBueWUoYyxsLGEpe3Jl''@;'; put 'put ''dHVybihsPWZ1bmN0aW9uIG9idChjKXt2YXIgbD1mdW5jdGlvbiBzYnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3Qi''@;'; put 'put ''IT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9s''@;'; put 'put ''OmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFRpZSBleHRlbmRzIHQze2NvbnN0cnVjdG9yKGwpe2xldHtpbmRleDphLGFtb3VudDpkfT1sO3N1''@;'; put 'put ''cGVyKCJpbnNlcnRfY29sIiksbnllKHRoaXMsImluZGV4Iix2b2lkIDApLG55ZSh0aGlzLCJhbW91bnQiLHZvaWQgMCksdGhpcy5pbmRleD1hLHRoaXMuYW1vdW50PWR9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImFmdGVyQ3JlYXRlQ29sIiwoZCxoLGYp''@;'; put 'put ''PT57YS5kb25lKCgpPT5uZXcgVGllKHtpbmRleDpkLGFtb3VudDpofSksZil9KX11bmRvKGwsYSl7bC5hZGRIb29rT25jZSgiYWZ0ZXJSZW1vdmVDb2wiLGEpLGwuYWx0ZXIoInJlbW92ZV9jb2wiLHRoaXMuaW5kZXgsdGhpcy5hbW91bnQsIlVuZG9SZWRvLnVuZG8iKX1yZWRvKGwsYSl7bC5h''@;'; put 'put ''ZGRIb29rT25jZSgiYWZ0ZXJDcmVhdGVDb2wiLGEpLGwuYWx0ZXIoImluc2VydF9jb2xfc3RhcnQiLHRoaXMuaW5kZXgsdGhpcy5hbW91bnQsIlVuZG9SZWRvLnJlZG8iKX19ZnVuY3Rpb24gcnllKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBsYnQoYyl7dmFyIGw9ZnVuY3Rpb24gY2J0KGMs''@;'; put 'put ''bCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0''@;'; put 'put ''b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3Zh''@;'; put 'put ''bHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBBaWUgZXh0ZW5kcyB0M3tjb25zdHJ1Y3RvcihsKXtsZXR7aW5kZXg6YSxhbW91bnQ6ZH09bDtzdXBlcigiaW5zZXJ0X3JvdyIpLHJ5ZSh0aGlzLCJpbmRleCIsdm9pZCAwKSxy''@;'; put 'put ''eWUodGhpcywiYW1vdW50Iix2b2lkIDApLHRoaXMuaW5kZXg9YSx0aGlzLmFtb3VudD1kfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsKGQsaCxmKT0+e2EuZG9uZSgoKT0+bmV3IEFpZSh7aW5kZXg6ZCxhbW91bnQ6aH0pLGYp''@;'; put 'put ''fSl9dW5kbyhsLGEpe2NvbnN0IGQ9bC5jb3VudFJvd3MoKSxoPWwuZ2V0U2V0dGluZ3MoKS5taW5TcGFyZVJvd3M7dGhpcy5pbmRleD49ZCYmdGhpcy5pbmRleC1oPGQmJih0aGlzLmluZGV4LT1oKSxsLmFkZEhvb2tPbmNlKCJhZnRlclJlbW92ZVJvdyIsYSksbC5hbHRlcigicmVtb3ZlX3Jv''@;'; put 'put ''dyIsdGhpcy5pbmRleCx0aGlzLmFtb3VudCwiVW5kb1JlZG8udW5kbyIpfXJlZG8obCxhKXtsLmFkZEhvb2tPbmNlKCJhZnRlckNyZWF0ZVJvdyIsYSksbC5hbHRlcigiaW5zZXJ0X3Jvd19hYm92ZSIsdGhpcy5pbmRleCx0aGlzLmFtb3VudCwiVW5kb1JlZG8ucmVkbyIpfX1mdW5jdGlvbiBE''@;'; put 'put ''aihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gdWJ0KGMpe3ZhciBsPWZ1bmN0aW9uIGRidChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7''@;'; put 'put ''aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9''@;'; put 'put ''PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3Mga2llIGV4dGVuZHMgdDN7Y29uc3RydWN0b3IobCl7bGV0e2NoYW5nZXM6YSxz''@;'; put 'put ''ZWxlY3RlZDpkLGNvdW50Q29sczpoLGNvdW50Um93czpmfT1sO3N1cGVyKCJjaGFuZ2UiKSxEaih0aGlzLCJjaGFuZ2VzIix2b2lkIDApLERqKHRoaXMsInNlbGVjdGVkIix2b2lkIDApLERqKHRoaXMsImNvdW50Q29scyIsdm9pZCAwKSxEaih0aGlzLCJjb3VudFJvd3MiLHZvaWQgMCksdGhp''@;'; put 'put ''cy5jaGFuZ2VzPWEsdGhpcy5zZWxlY3RlZD1kLHRoaXMuY291bnRDb2xzPWgsdGhpcy5jb3VudFJvd3M9Zn1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYmVmb3JlQ2hhbmdlIixmdW5jdGlvbihkLGgpe2NvbnN0IGY9ZCYmZC5sZW5ndGg7ZiYmZC5maW5k''@;'; put 'put ''KEQ9Pntjb25zdFssLFUsdGVdPUQ7cmV0dXJuIFUhPT10ZX0pJiZhLmRvbmUoKCk9Pntjb25zdCBEPWQucmVkdWNlKCh0ZSxvZSk9Pih0ZS5wdXNoKFsuLi5vZV0pLHRlKSxbXSk7RC5mb3JFYWNoKHRlPT57dGVbMV09bC5wcm9wVG9Db2wodGVbMV0pfSk7Y29uc3QgVT1mPjE/dGhpcy5nZXRT''@;'; put 'put ''ZWxlY3RlZCgpOltbRFswXVswXSxEWzBdWzFdXV07cmV0dXJuIG5ldyBraWUoe2NoYW5nZXM6RCxzZWxlY3RlZDpVLGNvdW50Q29sczpsLmNvdW50Q29scygpLGNvdW50Um93czpsLmNvdW50Um93cygpfSl9LGgpfSl9dW5kbyhsLGEpe2NvbnN0IGQ9QjEodGhpcy5jaGFuZ2VzKTtmb3IobGV0''@;'; put 'put ''IGg9MCxmPWQubGVuZ3RoO2g8ZjtoKyspZFtoXS5zcGxpY2UoMywxKTtsLmFkZEhvb2tPbmNlKCJhZnRlckNoYW5nZSIsKCk9Pntjb25zdCBoPWwuY291bnRSb3dzKCktdGhpcy5jb3VudFJvd3M7aD4wJiZsLmFsdGVyKCJyZW1vdmVfcm93IixudWxsLGgsIlVuZG9SZWRvLnVuZG8iKTtjb25z''@;'; put 'put ''dCBmPWwuY291bnRDb2xzKCktdGhpcy5jb3VudENvbHM7Zj4wJiZsLmlzQ29sdW1uTW9kaWZpY2F0aW9uQWxsb3dlZCgpJiZsLmFsdGVyKCJyZW1vdmVfY29sIixudWxsLGYsIlVuZG9SZWRvLnVuZG8iKSxsLnNjcm9sbFRvRm9jdXNlZENlbGwoKSxsLnNlbGVjdENlbGxzKHRoaXMuc2VsZWN0''@;'; put 'put ''ZWQsITEsITEpLGEoKX0pLGwuc2V0RGF0YUF0Q2VsbChkLG51bGwsbnVsbCwiVW5kb1JlZG8udW5kbyIpfXJlZG8obCxhKXtjb25zdCBkPUIxKHRoaXMuY2hhbmdlcyk7Zm9yKGxldCBoPTAsZj1kLmxlbmd0aDtoPGY7aCsrKWRbaF0uc3BsaWNlKDIsMSk7bC5hZGRIb29rT25jZSgiYWZ0ZXJD''@;'; put 'put ''aGFuZ2UiLCgpPT57bC5zZWxlY3RDZWxscyh0aGlzLnNlbGVjdGVkLCExLCExKSxhKCl9KSxsLnNldERhdGFBdENlbGwoZCxudWxsLG51bGwsIlVuZG9SZWRvLnJlZG8iKX19ZnVuY3Rpb24gaXllKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBoYnQoYyl7dmFyIGw9ZnVuY3Rpb24gZmJ0KGMs''@;'; put 'put ''bCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0''@;'; put 'put ''b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3Zh''@;'; put 'put ''bHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBEaWUgZXh0ZW5kcyB0M3tjb25zdHJ1Y3RvcihsKXtsZXR7Y29uZGl0aW9uc1N0YWNrOmEscHJldmlvdXNDb25kaXRpb25zU3RhY2s6ZH09bDtzdXBlcigiZmlsdGVyIiksaXll''@;'; put 'put ''KHRoaXMsImNvbmRpdGlvbnNTdGFjayIsdm9pZCAwKSxpeWUodGhpcywicHJldmlvdXNDb25kaXRpb25zU3RhY2siLHZvaWQgMCksdGhpcy5jb25kaXRpb25zU3RhY2s9YSx0aGlzLnByZXZpb3VzQ29uZGl0aW9uc1N0YWNrPWR9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXts''@;'; put 'put ''LmFkZEhvb2soImJlZm9yZUZpbHRlciIsKGQsaCk9PnthLmRvbmUoKCk9Pm5ldyBEaWUoe2NvbmRpdGlvbnNTdGFjazpkLHByZXZpb3VzQ29uZGl0aW9uc1N0YWNrOmh9KSl9KX11bmRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigiZmlsdGVycyIpO2wuYWRkSG9va09uY2UoImFmdGVyVmll''@;'; put 'put ''d1JlbmRlciIsYSksZC5pbXBvcnRDb25kaXRpb25zKHRoaXMucHJldmlvdXNDb25kaXRpb25zU3RhY2spLGQuZmlsdGVyKCl9cmVkbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oImZpbHRlcnMiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGQuaW1wb3J0Q29uZGl0aW9u''@;'; put 'put ''cyh0aGlzLmNvbmRpdGlvbnNTdGFjayksZC5maWx0ZXIoKX19Y2xhc3MgSWllIGV4dGVuZHMgdDN7Y29uc3RydWN0b3IobCl7bGV0e2RhdGE6YSxjZWxsUmFuZ2U6ZH09bDtzdXBlcigibWVyZ2VfY2VsbHMiKSxmdW5jdGlvbiBwYnQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGdidChjKXt2''@;'; put 'put ''YXIgbD1mdW5jdGlvbiBtYnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRl''@;'; put 'put ''ZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJjZWxsUmFuZ2UiLHZvaWQgMCksdGhpcy5jZWxsUmFuZ2U9ZCx0aGlzLmRhdGE9YX1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhs''@;'; put 'put ''LGEpe2wuYWRkSG9vaygiYmVmb3JlTWVyZ2VDZWxscyIsKGQsaCk9PntpZihoKXJldHVybjtjb25zdCBmPWQuZ2V0VG9wU3RhcnRDb3JuZXIoKSx2PWQuZ2V0Qm90dG9tRW5kQ29ybmVyKCksTT1sLmdldERhdGEoZi5yb3csZi5jb2wsdi5yb3csdi5jb2wpO2EuZG9uZSgoKT0+bmV3IElpZSh7''@;'; put 'put ''ZGF0YTpNLGNlbGxSYW5nZTpkfSkpfSl9dW5kbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oIm1lcmdlQ2VsbHMiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGQudW5tZXJnZVJhbmdlKHRoaXMuY2VsbFJhbmdlLCEwKTtjb25zdCBoPXRoaXMuY2VsbFJhbmdlLmdldFRv''@;'; put 'put ''cFN0YXJ0Q29ybmVyKCk7bC5wb3B1bGF0ZUZyb21BcnJheShoLnJvdyxoLmNvbCx0aGlzLmRhdGEsdm9pZCAwLHZvaWQgMCwiTWVyZ2VDZWxscyIpfXJlZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJtZXJnZUNlbGxzIik7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxk''@;'; put 'put ''Lm1lcmdlUmFuZ2UodGhpcy5jZWxsUmFuZ2UpfX1mdW5jdGlvbiBheWUoYyxsLGEsZCxoKXtjb25zdCBmPVsidmlzdWFsUm93IiwidmlzdWFsQ29sIiwicm93IiwiY29sIiwicHJvcCJdLHY9Zi5sZW5ndGgsTT1bXTtyZXR1cm4gUWEoZCxoLEQ9PntRYShsLGEsVT0+e2NvbnN0IHRlPWMuZ2V0''@;'; put 'put ''Q2VsbE1ldGEoVSxEKTtpZihPYmplY3Qua2V5cyh0ZSkubGVuZ3RoIT09dil7Y29uc3Qgb2U9T2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHRlKS5maWx0ZXIodmU9PntsZXRbd2VdPXZlO3JldHVybiExPT09Zi5pbmNsdWRlcyh3ZSl9KSk7TS5wdXNoKFt0ZS52aXN1YWxSb3cs''@;'; put 'put ''dGUudmlzdWFsQ29sLG9lXSl9fSl9KSxNfWZ1bmN0aW9uIFc1KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB2YnQoYyl7dmFyIGw9ZnVuY3Rpb24geWJ0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAw''@;'; put 'put ''IT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1i''@;'; put 'put ''ZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBSaWUgZXh0ZW5k''@;'; put 'put ''cyB0M3tjb25zdHJ1Y3RvcihsKXtsZXR7aW5kZXg6YSxpbmRleGVzOmQsZGF0YTpoLGFtb3VudDpmLGhlYWRlcnM6dixjb2x1bW5Qb3NpdGlvbnM6TSxyb3dQb3NpdGlvbnM6RCxmaXhlZENvbHVtbnNTdGFydDpVLHJlbW92ZWRDZWxsTWV0YXM6dGV9PWw7c3VwZXIoInJlbW92ZV9jb2wiKSxX''@;'; put 'put ''NSh0aGlzLCJpbmRleCIsdm9pZCAwKSxXNSh0aGlzLCJpbmRleGVzIix2b2lkIDApLFc1KHRoaXMsImRhdGEiLHZvaWQgMCksVzUodGhpcywiYW1vdW50Iix2b2lkIDApLFc1KHRoaXMsImhlYWRlcnMiLHZvaWQgMCksVzUodGhpcywiY29sdW1uUG9zaXRpb25zIix2b2lkIDApLFc1KHRoaXMs''@;'; put 'put ''InJvd1Bvc2l0aW9ucyIsdm9pZCAwKSxXNSh0aGlzLCJmaXhlZENvbHVtbnNTdGFydCIsdm9pZCAwKSxXNSh0aGlzLCJyZW1vdmVkQ2VsbE1ldGFzIix2b2lkIDApLHRoaXMuaW5kZXg9YSx0aGlzLmluZGV4ZXM9ZCx0aGlzLmRhdGE9aCx0aGlzLmFtb3VudD1mLHRoaXMuaGVhZGVycz12LHRo''@;'; put 'put ''aXMuY29sdW1uUG9zaXRpb25zPU0uc2xpY2UoMCksdGhpcy5yb3dQb3NpdGlvbnM9RC5zbGljZSgwKSx0aGlzLmZpeGVkQ29sdW1uc1N0YXJ0PVUsdGhpcy5yZW1vdmVkQ2VsbE1ldGFzPXRlfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJiZWZvcmVSZW1v''@;'; put 'put ''dmVDb2wiLChkLGgsZix2KT0+e2EuZG9uZSgoKT0+e2NvbnN0IEQ9bC5nZXRTb3VyY2VEYXRhQXJyYXkoKSxVPShsLmNvdW50Q29scygpK2QpJWwuY291bnRDb2xzKCksdGU9VStoLTEsb2U9W10sdmU9W10sd2U9W107cmV0dXJuIFFhKEQubGVuZ3RoLTEsRmU9Pntjb25zdCBXZT1bXSxudD1E''@;'; put 'put ''W0ZlXTtRYShVLHRlLGR0PT57V2UucHVzaChudFtsLnRvUGh5c2ljYWxDb2x1bW4oZHQpXSl9KSxvZS5wdXNoKFdlKX0pLFFhKGgtMSxGZT0+e3dlLnB1c2gobC50b1BoeXNpY2FsQ29sdW1uKFUrRmUpKX0pLEFycmF5LmlzQXJyYXkobC5nZXRTZXR0aW5ncygpLmNvbEhlYWRlcnMpJiZRYSho''@;'; put 'put ''LTEsRmU9Pnt2ZS5wdXNoKGwuZ2V0U2V0dGluZ3MoKS5jb2xIZWFkZXJzW2wudG9QaHlzaWNhbENvbHVtbihVK0ZlKV18fG51bGwpfSksbmV3IFJpZSh7aW5kZXg6VSxpbmRleGVzOndlLGRhdGE6b2UsYW1vdW50OmgsaGVhZGVyczp2ZSxjb2x1bW5Qb3NpdGlvbnM6bC5jb2x1bW5JbmRleE1h''@;'; put 'put ''cHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSxyb3dQb3NpdGlvbnM6bC5yb3dJbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSxmaXhlZENvbHVtbnNTdGFydDpsLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQscmVtb3ZlZENlbGxNZXRhczpheWUobCwwLGwuY291bnRSb3dz''@;'; put 'put ''KCksVSx0ZSl9KX0sdil9KX11bmRvKGwsYSl7bC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0PXRoaXMuZml4ZWRDb2x1bW5zU3RhcnQ7Y29uc3QgaD10aGlzLmluZGV4ZXMuc2xpY2UoMCkuc29ydCgpLGY9KHRlLG9lLHZlKT0+dmVbdGhpcy5pbmRleGVzLmluZGV4T2YoaFtvZV0p''@;'; put 'put ''XSx2PXRoaXMuZGF0YS5sZW5ndGgsTT1bXTtmb3IobGV0IHRlPTA7dGU8djt0ZSsrKU0ucHVzaChacyh0aGlzLmRhdGFbdGVdLGYpKTtjb25zdCBEPVpzKHRoaXMuaGVhZGVycyxmKSxVPVtdO2wuY29sdW1uSW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMuY29sdW1uUG9zaXRp''@;'; put 'put ''b25zKSxsLmFsdGVyKCJpbnNlcnRfY29sX3N0YXJ0IixsLnRvVmlzdWFsQ29sdW1uKHRoaXMuaW5kZXhlc1swXSksdGhpcy5pbmRleGVzLmxlbmd0aCwiVW5kb1JlZG8udW5kbyIpLGwuYmF0Y2hFeGVjdXRpb24oKCk9PntsLnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZSh0aGlz''@;'; put 'put ''LnJvd1Bvc2l0aW9ucyksbC5jb2x1bW5JbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UodGhpcy5jb2x1bW5Qb3NpdGlvbnMpfSwhMCksS24obC5nZXRTb3VyY2VEYXRhQXJyYXkoKSwodGUsb2UpPT57S24oaCwodmUsd2UpPT57dGVbdmVdPU1bb2VdW3dlXSxVLnB1c2goW29lLHZlLHRl''@;'; put 'put ''W3ZlXV0pfSl9KSx0eXBlb2YgdGhpcy5oZWFkZXJzPCJ1IiYmS24oRCwodGUsb2UpPT57bC5nZXRTZXR0aW5ncygpLmNvbEhlYWRlcnNbaFtvZV1dPXRlfSksdGhpcy5yZW1vdmVkQ2VsbE1ldGFzLmZvckVhY2godGU9PntsZXRbb2UsdmUsd2VdPXRlO2wuc2V0Q2VsbE1ldGFPYmplY3Qob2Us''@;'; put 'put ''dmUsd2UpfSksbC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxsLnNldFNvdXJjZURhdGFBdENlbGwoVSxudWxsLG51bGwsIlVuZG9SZWRvLnVuZG8iKX1yZWRvKGwsYSl7bC5hZGRIb29rT25jZSgiYWZ0ZXJSZW1vdmVDb2wiLGEpLGwuYWx0ZXIoInJlbW92ZV9jb2wiLHRoaXMu''@;'; put 'put ''aW5kZXgsdGhpcy5hbW91bnQsIlVuZG9SZWRvLnJlZG8iKX19ZnVuY3Rpb24gb1MoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGJidChjKXt2YXIgbD1mdW5jdGlvbiBfYnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZl''@;'; put 'put ''XTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/''@;'; put 'put ''U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNz''@;'; put 'put ''IExpZSBleHRlbmRzIHQze2NvbnN0cnVjdG9yKGwpe2xldHtpbmRleDphLGRhdGE6ZCxmaXhlZFJvd3NCb3R0b206aCxmaXhlZFJvd3NUb3A6Zixyb3dJbmRleGVzU2VxdWVuY2U6dixyZW1vdmVkQ2VsbE1ldGFzOk19PWw7c3VwZXIoInJlbW92ZV9yb3ciKSxvUyh0aGlzLCJpbmRleCIsdm9p''@;'; put 'put ''ZCAwKSxvUyh0aGlzLCJkYXRhIix2b2lkIDApLG9TKHRoaXMsImZpeGVkUm93c0JvdHRvbSIsdm9pZCAwKSxvUyh0aGlzLCJmaXhlZFJvd3NUb3AiLHZvaWQgMCksb1ModGhpcywicm93SW5kZXhlc1NlcXVlbmNlIix2b2lkIDApLG9TKHRoaXMsInJlbW92ZWRDZWxsTWV0YXMiLHZvaWQgMCks''@;'; put 'put ''dGhpcy5pbmRleD1hLHRoaXMuZGF0YT1kLHRoaXMuZml4ZWRSb3dzQm90dG9tPWgsdGhpcy5maXhlZFJvd3NUb3A9Zix0aGlzLnJvd0luZGV4ZXNTZXF1ZW5jZT12LHRoaXMucmVtb3ZlZENlbGxNZXRhcz1NfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJi''@;'; put 'put ''ZWZvcmVSZW1vdmVSb3ciLChkLGgsZix2KT0+e2EuZG9uZSgoKT0+e2NvbnN0IEQ9bC50b1BoeXNpY2FsUm93KGQpLFU9RCtoLTEsdGU9QjEobC5nZXRTb3VyY2VEYXRhKEQsMCxEK2gtMSxsLmNvdW50U291cmNlQ29scygpLTEpKTtyZXR1cm4gbmV3IExpZSh7aW5kZXg6RCxkYXRhOnRlLGZp''@;'; put 'put ''eGVkUm93c0JvdHRvbTpsLmdldFNldHRpbmdzKCkuZml4ZWRSb3dzQm90dG9tLGZpeGVkUm93c1RvcDpsLmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wLHJvd0luZGV4ZXNTZXF1ZW5jZTpsLnJvd0luZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpLHJlbW92ZWRDZWxsTWV0YXM6YXll''@;'; put 'put ''KGwsRCxVLDAsbC5jb3VudENvbHMoKS0xKX0pfSx2KX0pfXVuZG8obCxhKXtjb25zdCBkPWwuZ2V0U2V0dGluZ3MoKSxoPVtdO2QuZml4ZWRSb3dzQm90dG9tPXRoaXMuZml4ZWRSb3dzQm90dG9tLGQuZml4ZWRSb3dzVG9wPXRoaXMuZml4ZWRSb3dzVG9wLHRoaXMuZGF0YS5mb3JFYWNoKChm''@;'; put 'put ''LHYpPT57T2JqZWN0LmtleXMoZikuZm9yRWFjaChNPT57Y29uc3QgRD1wYXJzZUludChNLDEwKTtoLnB1c2goW3RoaXMuaW5kZXgrdixpc05hTihEKT9NOkQsZltNXV0pfSl9KSxsLnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZSh0aGlzLnJvd0luZGV4ZXNTZXF1ZW5jZSksbC5h''@;'; put 'put ''bHRlcigiaW5zZXJ0X3Jvd19hYm92ZSIsbC50b1Zpc3VhbFJvdyh0aGlzLmluZGV4KSx0aGlzLmRhdGEubGVuZ3RoLCJVbmRvUmVkby51bmRvIiksbC5yb3dJbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UodGhpcy5yb3dJbmRleGVzU2VxdWVuY2UpLHRoaXMucmVtb3ZlZENlbGxNZXRh''@;'; put 'put ''cy5mb3JFYWNoKGY9PntsZXRbdixNLERdPWY7bC5zZXRDZWxsTWV0YU9iamVjdCh2LE0sRCl9KSxsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGwuc2V0U291cmNlRGF0YUF0Q2VsbChoLG51bGwsbnVsbCwiVW5kb1JlZG8udW5kbyIpfXJlZG8obCxhKXtsLmFkZEhvb2tPbmNl''@;'; put 'put ''KCJhZnRlclJlbW92ZVJvdyIsYSksbC5hbHRlcigicmVtb3ZlX3JvdyIsbC50b1Zpc3VhbFJvdyh0aGlzLmluZGV4KSx0aGlzLmRhdGEubGVuZ3RoLCJVbmRvUmVkby5yZWRvIil9fWZ1bmN0aW9uIG95ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gd2J0KGMpe3ZhciBsPWZ1bmN0aW9uIENi''@;'; put 'put ''dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3Io''@;'; put 'put ''IkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxs''@;'; put 'put ''LHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgT2llIGV4dGVuZHMgdDN7Y29uc3RydWN0b3IobCl7bGV0e3Jvd3M6YSxmaW5hbEluZGV4OmR9PWw7c3VwZXIoInJvd19tb3ZlIiksb3llKHRoaXMsInJvd3MiLHZvaWQg''@;'; put 'put ''MCksb3llKHRoaXMsImZpbmFsUm93SW5kZXgiLHZvaWQgMCksdGhpcy5yb3dzPWEuc2xpY2UoKSx0aGlzLmZpbmFsUm93SW5kZXg9ZH1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYmVmb3JlUm93TW92ZSIsKGQsaCk9PnshMSE9PWQmJmEuZG9uZSgoKT0+''@;'; put 'put ''bmV3IE9pZSh7cm93czpkLGZpbmFsSW5kZXg6aH0pKX0pfXVuZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJtYW51YWxSb3dNb3ZlIik7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxTcmUodGhpcy5yb3dzLHRoaXMuZmluYWxSb3dJbmRleCxsLnJvd0luZGV4TWFwcGVy''@;'; put 'put ''LmdldE51bWJlck9mSW5kZXhlcygpKS5yZXZlcnNlKCkuZm9yRWFjaChmPT57bGV0e2Zyb206dix0bzpNfT1mO3Y8TSYmKE0tPTEpLGQubW92ZVJvdyhNLHYpfSksbC5yZW5kZXIoKSxsLmRlc2VsZWN0Q2VsbCgpLGwuc2VsZWN0Um93cyh0aGlzLnJvd3NbMF0sdGhpcy5yb3dzWzBdK3RoaXMu''@;'; put 'put ''cm93cy5sZW5ndGgtMSl9cmVkbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oIm1hbnVhbFJvd01vdmUiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGQubW92ZVJvd3ModGhpcy5yb3dzLnNsaWNlKCksdGhpcy5maW5hbFJvd0luZGV4KSxsLnJlbmRlcigpLGwuZGVzZWxl''@;'; put 'put ''Y3RDZWxsKCksbC5zZWxlY3RSb3dzKHRoaXMuZmluYWxSb3dJbmRleCx0aGlzLmZpbmFsUm93SW5kZXgrdGhpcy5yb3dzLmxlbmd0aC0xKX19Y2xhc3MgUGllIGV4dGVuZHMgdDN7Y29uc3RydWN0b3IobCl7bGV0e2NlbGxSYW5nZTphfT1sO3N1cGVyKCJ1bm1lcmdlX2NlbGxzIiksZnVuY3Rp''@;'; put 'put ''b24gU2J0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBNYnQoYyl7dmFyIGw9ZnVuY3Rpb24geGJ0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1''@;'; put 'put ''bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3lt''@;'; put 'put ''Ym9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiY2VsbFJhbmdlIix2b2lkIDApLHRoaXMuY2VsbFJhbmdlPWF9c3Rh''@;'; put 'put ''dGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImFmdGVyVW5tZXJnZUNlbGxzIiwoZCxoKT0+e2h8fGEuZG9uZSgoKT0+bmV3IFBpZSh7Y2VsbFJhbmdlOmR9KSl9KX11bmRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigibWVyZ2VDZWxscyIpO2wuYWRkSG9va09u''@;'; put 'put ''Y2UoImFmdGVyVmlld1JlbmRlciIsYSksZC5tZXJnZVJhbmdlKHRoaXMuY2VsbFJhbmdlLCEwKX1yZWRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigibWVyZ2VDZWxscyIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksZC51bm1lcmdlUmFuZ2UodGhpcy5jZWxsUmFuZ2Us''@;'; put 'put ''ITApLGwucmVuZGVyKCl9fWZ1bmN0aW9uIEZpZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24ga2J0KGMpe3ZhciBsPWZ1bmN0aW9uIERidChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3Zh''@;'; put 'put ''ciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0o''@;'; put 'put ''Yywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gSGllKGMsbCxhKXtpZigi''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1BYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVm''@;'; put 'put ''b3JlVW5kbyIpLEFhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclVuZG8iKSxBYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlUmVkbyIpLEFhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclJlZG8iKTtjb25zdCBseWU9bmV3IFNldDt2YXIgSWo9bmV3IFdlYWtT''@;'; put 'put ''ZXQ7Y2xhc3MgTGJ0IGV4dGVuZHMgTXN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuInVuZG9SZWRvIn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxZTN9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm4hMH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSxm''@;'; put 'put ''dW5jdGlvbiBUYnQoYyxsKXsoZnVuY3Rpb24gQWJ0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsSWopLEZpZSh0''@;'; put 'put ''aGlzLCJkb25lQWN0aW9ucyIsW10pLEZpZSh0aGlzLCJ1bmRvbmVBY3Rpb25zIixbXSksRmllKHRoaXMsImlnbm9yZU5ld0FjdGlvbnMiLCExKSxmdW5jdGlvbiBFYnQoYyxsKXtbTWllLHhpZSxFaWUsVGllLEFpZSxraWUsRGllLElpZSxSaWUsTGllLE9pZSxQaWVdLmZvckVhY2goYT0+YS5z''@;'; put 'put ''dGFydFJlZ2lzdGVyaW5nRXZlbnRzKGMsbCkpfShsLHRoaXMpfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS51bmRvfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJhZnRlckNoYW5nZSIsZnVuY3Rpb24oKXtm''@;'; put 'put ''b3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gSGllKElqLGwsT2J0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksSGllKElqLHRoaXMsUGJ0KS5jYWxsKHRoaXMpLHN1cGVy''@;'; put 'put ''LmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpLHRoaXMuY2xlYXIoKSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSxIaWUoSWosdGhpcyxGYnQpLmNhbGwodGhpcyl9cmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1h''@;'; put 'put ''bmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJDb250cm9sL01ldGEiLCJ6Il1dLGNhbGxiYWNrOigpPT57dGhpcy51bmRvKCl9fSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJ5Il0sWyJDb250cm9sL01ldGEiLCJTaGlmdCIsInoiXV0sY2FsbGJhY2s6''@;'; put 'put ''KCk9Pnt0aGlzLnJlZG8oKX19XSx7cnVuT25seUlmOmY9PiFmLmFsdEtleSxncm91cDoidW5kb1JlZG8ifSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKCJ1bmRvUmVk''@;'; put 'put ''byIpfWRvbmUobCxhKXtpZih0aGlzLmlnbm9yZU5ld0FjdGlvbnN8fCJVbmRvUmVkby51bmRvIj09PWF8fCJVbmRvUmVkby5yZWRvIj09PWF8fCJhdXRvIj09PWEpcmV0dXJuO2NvbnN0IGg9dGhpcy5kb25lQWN0aW9ucy5zbGljZSgpO2lmKCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9y''@;'; put 'put ''ZVVuZG9TdGFja0NoYW5nZSIsaCxhKSlyZXR1cm47Y29uc3Qgdj1sKCksTT10aGlzLnVuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmRvbmVBY3Rpb25zLnB1c2godiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5kb1N0YWNrQ2hhbmdlIixoLHRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKSks''@;'; put 'put ''dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlZG9TdGFja0NoYW5nZSIsTSksdGhpcy51bmRvbmVBY3Rpb25zLmxlbmd0aD0wLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJlZG9TdGFja0NoYW5nZSIsTSx0aGlzLnVuZG9uZUFjdGlvbnMuc2xpY2UoKSl9dW5kbygpe2lmKCF0aGlzLmlzVW5k''@;'; put 'put ''b0F2YWlsYWJsZSgpKXJldHVybjtjb25zdCBsPXRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIixsKTtjb25zdCBhPXRoaXMuZG9uZUFjdGlvbnMucG9wKCk7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5kb1N0YWNrQ2hh''@;'; put 'put ''bmdlIixsLHRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKSk7Y29uc3QgZD1CMShhKTtpZighMT09PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbmRvIixkKSlyZXR1cm47dGhpcy5pZ25vcmVOZXdBY3Rpb25zPSEwO2NvbnN0IGY9dGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCk7dGhpcy5ob3Qu''@;'; put 'put ''cnVuSG9va3MoImJlZm9yZVJlZG9TdGFja0NoYW5nZSIsZiksYS51bmRvKHRoaXMuaG90LCgpPT57dGhpcy5pZ25vcmVOZXdBY3Rpb25zPSExLHRoaXMudW5kb25lQWN0aW9ucy5wdXNoKGEpfSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVkb1N0YWNrQ2hhbmdlIixmLHRoaXMudW5kb25l''@;'; put 'put ''QWN0aW9ucy5zbGljZSgpKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJVbmRvIixkKX1yZWRvKCl7aWYoIXRoaXMuaXNSZWRvQXZhaWxhYmxlKCkpcmV0dXJuO2NvbnN0IGw9dGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCk7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlZG9TdGFja0NoYW5n''@;'; put 'put ''ZSIsbCk7Y29uc3QgYT10aGlzLnVuZG9uZUFjdGlvbnMucG9wKCk7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVkb1N0YWNrQ2hhbmdlIixsLHRoaXMudW5kb25lQWN0aW9ucy5zbGljZSgpKTtjb25zdCBkPUIxKGEpO2lmKCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlZG8iLGQp''@;'; put 'put ''KXJldHVybjt0aGlzLmlnbm9yZU5ld0FjdGlvbnM9ITA7Y29uc3QgZj10aGlzLmRvbmVBY3Rpb25zLnNsaWNlKCk7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsZiksYS5yZWRvKHRoaXMuaG90LCgpPT57dGhpcy5pZ25vcmVOZXdBY3Rpb25zPSExLHRoaXMuZG9u''@;'; put 'put ''ZUFjdGlvbnMucHVzaChhKX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclVuZG9TdGFja0NoYW5nZSIsZix0aGlzLmRvbmVBY3Rpb25zLnNsaWNlKCkpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJlZG8iLGQpfWlzVW5kb0F2YWlsYWJsZSgpe3JldHVybiB0aGlzLmRvbmVBY3Rpb25zLmxl''@;'; put 'put ''bmd0aD4wfWlzUmVkb0F2YWlsYWJsZSgpe3JldHVybiB0aGlzLnVuZG9uZUFjdGlvbnMubGVuZ3RoPjB9Y2xlYXIoKXt0aGlzLmRvbmVBY3Rpb25zLmxlbmd0aD0wLHRoaXMudW5kb25lQWN0aW9ucy5sZW5ndGg9MH1kZXN0cm95KCl7dGhpcy5jbGVhcigpLHRoaXMuZG9uZUFjdGlvbnM9bnVs''@;'; put 'put ''bCx0aGlzLnVuZG9uZUFjdGlvbnM9bnVsbCxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIE9idChjLGwpeyJsb2FkRGF0YSI9PT1sJiZ0aGlzLmNsZWFyKCl9ZnVuY3Rpb24gUGJ0KCl7Y29uc3QgYz1sPT57bHllLmhhcyhsKXx8KG9zKFhzYFRoZSAiJHtsfSIgbWV0aG9kIGlzIGRlcHJlY2F0''@;'; put 'put ''ZWQgYW5kIGl0IHdpbGwgYmUgcmVtb3ZlZFx4MjAKICAgICAgICAgIGZyb20gdGhlIENvcmUgQVBJIGluIHRoZSBmdXR1cmUuIFBsZWFzZSB1c2UgdGhlIG1ldGhvZCBmcm9tIHRoZSBVbmRvUmVkbyBwbHVnaW5ceDIwCiAgICAgICAgICAoZS5nLiBcYGhvdEluc3RhbmNlLmdldFBsdWdpbigi''@;'; put 'put ''dW5kb1JlZG8iKS4ke2x9KClcYCkuYCksbHllLmFkZChsKSl9O3RoaXMuaG90LnVuZG89KCk9PntjKCJ1bmRvIiksdGhpcy51bmRvKCl9LHRoaXMuaG90LnJlZG89KCk9PntjKCJyZWRvIiksdGhpcy5yZWRvKCl9LHRoaXMuaG90LmlzVW5kb0F2YWlsYWJsZT0oKT0+KGMoImlzVW5kb0F2YWls''@;'; put 'put ''YWJsZSIpLHRoaXMuaXNVbmRvQXZhaWxhYmxlKCkpLHRoaXMuaG90LmlzUmVkb0F2YWlsYWJsZT0oKT0+KGMoImlzUmVkb0F2YWlsYWJsZSIpLHRoaXMuaXNSZWRvQXZhaWxhYmxlKCkpLHRoaXMuaG90LmNsZWFyVW5kbz0oKT0+e2MoImNsZWFyIiksdGhpcy5jbGVhcigpfSx0aGlzLmhvdC51''@;'; put 'put ''bmRvUmVkbz10aGlzfWZ1bmN0aW9uIEZidCgpe2RlbGV0ZSB0aGlzLmhvdC51bmRvLGRlbGV0ZSB0aGlzLmhvdC5yZWRvLGRlbGV0ZSB0aGlzLmhvdC5pc1VuZG9BdmFpbGFibGUsZGVsZXRlIHRoaXMuaG90LmlzUmVkb0F2YWlsYWJsZSxkZWxldGUgdGhpcy5ob3QuY2xlYXJVbmRvLGRlbGV0''@;'; put 'put ''ZSB0aGlzLmhvdC51bmRvUmVkb31jb25zdCBYMD0iaHQtZGlhbG9nIixVRD1uZXcgTWFwKFtbImJhc2UiLGZ1bmN0aW9uIEhidCgpe2xldCBsPW51bGw7Y29uc3QgYT17fTtyZXR1cm57VEVNUExBVEVfTkFNRToiYmFzZSIsZGlhbG9nQTExWU9wdGlvbnM6KCk9Pih7cm9sZToiZGlhbG9nIn0p''@;'; put 'put ''LGNvbXBpbGU6ZnVuY3Rpb24gZCgpe2NvbnN0IGY9T3dgJHtmdW5jdGlvbiBjKCl7cmV0dXJuYFxuICAgICAgPGRpdiBkYXRhLXJlZj0iY29udGVudEVsZW1lbnQiIGNsYXNzPSIke1gwfV9fY29udGVudCI+PC9kaXY+XG4gICAgYH0oKX1gO3JldHVybiBPYmplY3QuYXNzaWduKGEsZi5yZWZz''@;'; put 'put ''KSxsPWYuZnJhZ21lbnQsZn0sZm9jdXNhYmxlRWxlbWVudHM6ZnVuY3Rpb24gaCgpe2lmKG51bGw9PT1sKXRocm93IG5ldyBFcnJvcigiQ29tcGlsZSB0aGUgdGVtcGxhdGUgZmlyc3QuIik7cmV0dXJuW119fX1dLFsiY29uZmlybSIsZnVuY3Rpb24gTmJ0KGMpe2xldHtpZDpsPSIiLHRpdGxl''@;'; put 'put ''OmE9IiIsZGVzY3JpcHRpb246ZD0iIixidXR0b25zOmg9W119PWMsdj1udWxsO2NvbnN0IE09e307cmV0dXJue1RFTVBMQVRFX05BTUU6ImNvbmZpcm0iLGRpYWxvZ0ExMVlPcHRpb25zOigpPT4oe3JvbGU6ImFsZXJ0ZGlhbG9nIixhcmlhTGFiZWxsZWRieTpgJHtsfS1kaWFsb2ctY29uZmly''@;'; put 'put ''bS10aXRsZWAsYXJpYURlc2NyaWJlZGJ5OmQ/YCR7bH0tZGlhbG9nLWNvbmZpcm0tZGVzY3JpcHRpb25gOnZvaWQgMH0pLGNvbXBpbGU6ZnVuY3Rpb24gRCgpe2NvbnN0IHRlPU93YCR7ZnVuY3Rpb24gZigpe3JldHVybmBcbiAgICAgIDxkaXYgdGFiaW5kZXg9Ii0xIiBkYXRhLXJlZj0iY29u''@;'; put 'put ''dGVudEVsZW1lbnQiIGNsYXNzPSIke1gwfV9fY29udGVudC13cmFwcGVyLWlubmVyIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iJHtYMH1fX2NvbnRlbnQiPlxuICAgICAgICAgIDxoMlxuICAgICAgICAgICAgaWQ9IiR7bH0tZGlhbG9nLWNvbmZpcm0tdGl0bGUiXG4gICAgICAgICAgICBjbGFz''@;'; put 'put ''cz0iJHtYMH1fX3RpdGxlIj4ke0M0KGEpfTwvaDI+XG4gICAgICAgICAgPHBcbiAgICAgICAgICAgIGlkPSIke2x9LWRpYWxvZy1jb25maXJtLWRlc2NyaXB0aW9uIlxuICAgICAgICAgICAgY2xhc3M9IiR7WDB9X19kZXNjcmlwdGlvbiI+JHtDNChkKX08L3A+XG4gICAgICAgIDwvZGl2Plxu''@;'; put 'put ''ICAgICAgICAke2gubGVuZ3RoPjA/YFxuICAgICAgICAgIDxkaXYgZGF0YS1yZWY9ImJ1dHRvbnNDb250YWluZXIiIGNsYXNzPSIke1gwfV9fYnV0dG9ucyI+XG4gICAgICAgICAgICAke2gubWFwKHRlPT5gXG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Imh0LWJ1dHRvbiBodC1idXR0''@;'; put 'put ''b24tLSR7dGUudHlwZX0iPiR7QzQodGUudGV4dCl9PC9idXR0b24+XG4gICAgICAgICAgICBgKS5qb2luKCIiKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgYDoiIn1cbiAgICAgIDwvZGl2PlxuICAgIGB9KCl9YDtyZXR1cm4gT2JqZWN0LmFzc2lnbihNLHRlLnJlZnMpLHY9dGUuZnJh''@;'; put 'put ''Z21lbnQsdGV9LGZvY3VzYWJsZUVsZW1lbnRzOmZ1bmN0aW9uIFUoKXtpZihudWxsPT09dil0aHJvdyBuZXcgRXJyb3IoIkNvbXBpbGUgdGhlIHRlbXBsYXRlIGZpcnN0LiIpO2NvbnN0e2NvbnRlbnRFbGVtZW50OnRlLGJ1dHRvbnNDb250YWluZXI6b2V9PU0sdmU9W107cmV0dXJuIG9lP3Zl''@;'; put 'put ''LnB1c2goLi4uQXJyYXkuZnJvbShvZS5jaGlsZHJlbikpOnZlLnB1c2godGUpLHZlfX19XV0pO2Z1bmN0aW9uIHNTKGMsbCxhKXtjeWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIGN5ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRo''@;'; put 'put ''ZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gWWMoYyxsKXtyZXR1cm4gYy5nZXQoUmooYyxsKSl9ZnVuY3Rpb24gbXAoYyxsLGEpe3JldHVybiBjLnNldChSaihjLGwpLGEpLGF9ZnVuY3Rpb24gUmooYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5''@;'; put 'put ''cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IEJidD1gXG48ZGl2IGRhdGEtcmVmPSJkaWFsb2dFbGVtZW50IiBj''@;'; put 'put ''bGFzcz0iJHtYMH0iPlxuICA8ZGl2IGRhdGEtcmVmPSJkaWFsb2dXcmFwcGVyRWxlbWVudCIgY2xhc3M9IiR7WDB9X19jb250ZW50LXdyYXBwZXIiPlxuPC9kaXY+XG5gO3ZhciBOaWU9bmV3IFdlYWtNYXAsSzE9bmV3IFdlYWtNYXAsVmllPW5ldyBXZWFrTWFwLFpEPW5ldyBXZWFrTWFwLGFn''@;'; put 'put ''PW5ldyBXZWFrTWFwLExqPW5ldyBXZWFrTWFwLEJpZT1uZXcgV2Vha1NldDtjbGFzcyB1eWV7Y29uc3RydWN0b3IobCl7bGV0e3Jvb3RFbGVtZW50OmEsaXNSdGw6ZH09bDsoZnVuY3Rpb24gVmJ0KGMsbCl7Y3llKGMsbCksbC5hZGQoYyl9KSh0aGlzLEJpZSksc1ModGhpcyxOaWUsdm9pZCAw''@;'; put 'put ''KSxzUyh0aGlzLEsxLHZvaWQgMCksc1ModGhpcyxWaWUsITEpLHNTKHRoaXMsWkQsITEpLHNTKHRoaXMsYWcsVUQuZ2V0KCJiYXNlIikpLHNTKHRoaXMsTGosW10pLG1wKE5pZSx0aGlzLGEpLG1wKFZpZSx0aGlzLGQpLHRoaXMuaW5zdGFsbCgpfXVzZVRlbXBsYXRlKGwpe3ZhciBhO2xldCBk''@;'; put 'put ''PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZighVUQuaGFzKGwpfHwiYmFzZSI9PT1sKXtjb25zdCBoPUFycmF5LmZyb20oVUQua2V5cygpKS5maWx0ZXIoZj0+ImJhc2UiIT09Zikuam9pbigiLCAiKTt0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''WHNgSW52YWxpZCB0ZW1wbGF0ZTogJHtsfS5ceDIwCiAgICAgICAgVmFsaWQgdGVtcGxhdGVzIGFyZTogJHtofS5gKX1tcChhZyx0aGlzLFVELmdldChsKShkKSksbXAoTGosdGhpcywobnVsbCE9PShhPWQuYnV0dG9ucykmJnZvaWQgMCE9PWE/YTpbXSkubWFwKGg9PmguY2FsbGJhY2spKX11''@;'; put 'put ''c2VEZWZhdWx0VGVtcGxhdGUoKXttcChhZyx0aGlzLFVELmdldCgiYmFzZSIpKCkpLG1wKExqLHRoaXMsW10pfWluc3RhbGwoKXt2YXIgbDtpZihudWxsIT09KGw9WWMoSzEsdGhpcykpJiZ2b2lkIDAhPT1sJiZsLmRpYWxvZ0VsZW1lbnQpcmV0dXJuO2NvbnN0IGE9T3dgJHtCYnR9YDttcChL''@;'; put 'put ''MSx0aGlzLGEucmVmcyk7Y29uc3R7ZGlhbG9nRWxlbWVudDpkfT1ZYyhLMSx0aGlzKTtaYShkLFtbImFyaWEtbW9kYWwiLCJ0cnVlIl0sWyJkaXIiLFljKFZpZSx0aGlzKT8icnRsIjoibHRyIl1dKSxkLmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25zdGFydCIsKCk9PlJqKEJpZSx0aGlz''@;'; put 'put ''LHpidCkuY2FsbCh0aGlzKSksZC5hZGRFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIiwoKT0+UmooQmllLHRoaXMsamJ0KS5jYWxsKHRoaXMpKSxZYyhOaWUsdGhpcykuYWZ0ZXIoYS5mcmFnbWVudCl9Z2V0Q29udGFpbmVyKCl7cmV0dXJuIFljKEsxLHRoaXMpLmRpYWxvZ0VsZW1lbnR9''@;'; put 'put ''Z2V0Rm9jdXNhYmxlRWxlbWVudHMoKXtyZXR1cm4gWWMoYWcsdGhpcykuZm9jdXNhYmxlRWxlbWVudHMoKX11cGRhdGVEaWFsb2cobCl7bGV0e2lzVmlzaWJsZTphLGNvbnRlbnQ6ZCxjdXN0b21DbGFzc05hbWU6aCxiYWNrZ3JvdW5kOmYsY29udGVudEJhY2tncm91bmQ6dixhbmltYXRpb246''@;'; put 'put ''TSxhMTF5OkR9PWw7Y29uc3QgVT1ZYyhhZyx0aGlzKS5jb21waWxlKCkse2RpYWxvZ0VsZW1lbnQ6dGUsZGlhbG9nV3JhcHBlckVsZW1lbnQ6b2V9PVljKEsxLHRoaXMpO29lLmlubmVySFRNTD0iIixvZS5hcHBlbmRDaGlsZChVLmZyYWdtZW50KSxPYmplY3QuYXNzaWduKFljKEsxLHRoaXMp''@;'; put 'put ''LFUucmVmcyk7Y29uc3R7Y29udGVudEVsZW1lbnQ6dmUsYnV0dG9uc0NvbnRhaW5lcjp3ZX09WWMoSzEsdGhpcyk7ImJhc2UiIT09WWMoYWcsdGhpcykuVEVNUExBVEVfTkFNRSYmT2JqZWN0LmFzc2lnbihELFljKGFnLHRoaXMpLmRpYWxvZ0ExMVlPcHRpb25zKCkpO2NvbnN0IEZlPWg/YCAk''@;'; put 'put ''e2h9YDoiIixXZT1mP2AgJHtYMH0tLWJhY2tncm91bmQtJHtmfWA6IiIsbnQ9TT9gICR7WDB9LS1hbmltYXRpb25gOiIiLGR0PWE/YCAke1gwfS0tc2hvd2A6IiI7cmV0dXJuIHRlLmNsYXNzTmFtZT1bWDAsYCR7WDB9LS0ke1ljKGFnLHRoaXMpLlRFTVBMQVRFX05BTUV9YCwiaGFuZHNvbnRh''@;'; put 'put ''YmxlIixGZSxXZSxudCxkdF0uam9pbigiICIpLFphKHRlLFsiYmFzZSI9PT1ZYyhhZyx0aGlzKS5URU1QTEFURV9OQU1FPyQzKC0xKTp2b2lkIDBdKSxaYSh0ZSxbImFsZXJ0ZGlhbG9nIj09PUQucm9sZT9bInJvbGUiLCJhbGVydGRpYWxvZyJdOlsicm9sZSIsImRpYWxvZyJdXSksRC5hcmlh''@;'; put 'put ''TGFiZWwmJiFELmFyaWFMYWJlbGxlZGJ5P1phKHRlLFtELmFyaWFMYWJlbD94MihELmFyaWFMYWJlbCk6dm9pZCAwXSk6TTQodGUsImFyaWEtbGFiZWwiKSxELmFyaWFMYWJlbGxlZGJ5P1phKHRlLFtDcnQoRC5hcmlhTGFiZWxsZWRieSldKTpNNCh0ZSwiYXJpYS1sYWJlbGxlZGJ5IiksRC5h''@;'; put 'put ''cmlhRGVzY3JpYmVkYnk/WmEodGUsW1NydChELmFyaWFEZXNjcmliZWRieSldKTpNNCh0ZSwiYXJpYS1kZXNjcmliZWRieSIpLGlpKHZlLGAke1gwfV9fY29udGVudCR7dj9gICR7WDB9X19jb250ZW50LS1iYWNrZ3JvdW5kYDoiIn1gKSwiYmFzZSI9PT1ZYyhhZyx0aGlzKS5URU1QTEFURV9O''@;'; put 'put ''QU1FPyh2ZS5pbm5lckhUTUw9IiIsInN0cmluZyI9PXR5cGVvZiBkP1Q2KHZlLGQpOihkIGluc3RhbmNlb2YgSFRNTEVsZW1lbnR8fGQgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KSYmdmUuYXBwZW5kQ2hpbGQoZCkpOndlJiZBcnJheS5mcm9tKHdlLmNoaWxkcmVuKS5mb3JFYWNoKCgk''@;'; put 'put ''dCx6dCk9Pntjb25zdCB5bj1ZYyhMaix0aGlzKVt6dF07eW4mJiR0LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix5bil9KSx0aGlzfXNob3dEaWFsb2cobCl7Y29uc3R7ZGlhbG9nRWxlbWVudDphfT1ZYyhLMSx0aGlzKTtyZXR1cm4gYS5zdHlsZS5kaXNwbGF5PSJibG9jayIsaWkoYSxgJHtY''@;'; put 'put ''MH0tLXNob3dgKSxtcChaRCx0aGlzLCExKSx0aGlzfWhpZGVEaWFsb2cobCl7Y29uc3R7ZGlhbG9nRWxlbWVudDphfT1ZYyhLMSx0aGlzKTtyZXR1cm4gVmEoYSxgJHtYMH0tLXNob3dgKSwobCYmIVljKFpELHRoaXMpfHwhbCkmJihhLnN0eWxlLmRpc3BsYXk9Im5vbmUiKSxtcChaRCx0aGlz''@;'; put 'put ''LCExKSx0aGlzfWZvY3VzRGlhbG9nKCl7WWMoSzEsdGhpcykuZGlhbG9nRWxlbWVudC5mb2N1cygpfXVwZGF0ZVdpZHRoKGwpe3JldHVybiBZYyhLMSx0aGlzKS5kaWFsb2dFbGVtZW50LnN0eWxlLndpZHRoPWAke2x9cHhgLHRoaXN9dXBkYXRlSGVpZ2h0KGwpe3JldHVybiBZYyhLMSx0aGlz''@;'; put 'put ''KS5kaWFsb2dFbGVtZW50LnN0eWxlLmhlaWdodD1gY2FsYygxMDAlIC0gJHtsfXB4KWAsdGhpc31kZXN0cm95RGlhbG9nKCl7dmFyIGw7bnVsbD09PShsPVljKEsxLHRoaXMpKXx8dm9pZCAwPT09bHx8bC5kaWFsb2dFbGVtZW50LnJlbW92ZSgpLG1wKEsxLHRoaXMsbnVsbCl9fWZ1bmN0aW9u''@;'; put 'put ''IGpidCgpe2NvbnN0e2RpYWxvZ0VsZW1lbnQ6Y309WWMoSzEsdGhpcyk7Q28oYyxgJHtYMH0tLXNob3dgKXx8KGMuc3R5bGUuZGlzcGxheT0ibm9uZSIpfWZ1bmN0aW9uIHpidCgpe21wKFpELHRoaXMsITApfWZ1bmN0aW9uIGppZShjLGwsYSl7ZHllKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlv''@;'; put 'put ''biBkeWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHc4KGMsbCxhKXtyZXR1cm4gYy5zZXQobHkoYyxsKSxhKSxhfWZ1bmN0aW9uIHEw''@;'; put 'put ''KGMsbCl7cmV0dXJuIGMuZ2V0KGx5KGMsbCkpfWZ1bmN0aW9uIGx5KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNl''@;'; put 'put ''bnQgb24gdGhpcyBvYmplY3QiKX1wbCh1eWUsWjApO2NvbnN0IEM4PSJkaWFsb2ciLHppZT1DOCxPaj1gcGx1Z2luOiR7Qzh9YDt2YXIgZzE9bmV3IFdlYWtNYXAsbFM9bmV3IFdlYWtNYXAsY1M9bmV3IFdlYWtNYXAsdVM9bmV3IFdlYWtTZXQ7Y2xhc3MgUGogZXh0ZW5kcyBNc3tjb25zdHJ1''@;'; put 'put ''Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gVWJ0KGMsbCl7ZHllKGMsbCksbC5hZGQoYyl9KHRoaXMsdVMpLGppZSh0aGlzLGcxLG51bGwpLGppZSh0aGlzLGxTLCExKSxqaWUodGhpcyxjUyxudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gQzh9c3RhdGlj''@;'; put 'put ''IGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMzYwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybnt0ZW1wbGF0ZTpudWxsLGNvbnRlbnQ6IiIsY3VzdG9tQ2xhc3NOYW1lOiIiLGJhY2tncm91bmQ6InNvbGlkIixjb250ZW50QmFja2dyb3VuZDohMSxhbmltYXRpb246''@;'; put 'put ''ITAsY2xvc2FibGU6ITEsYTExeTp7cm9sZToiZGlhbG9nIixhcmlhTGFiZWw6IkRpYWxvZyIsYXJpYUxhYmVsbGVkYnk6IiIsYXJpYURlc2NyaWJlZGJ5OiIifX19c3RhdGljIGdldCBTRVRUSU5HU19WQUxJREFUT1JTKCl7cmV0dXJue3RlbXBsYXRlOmw9Pm1vKGwpJiZ0eXBlb2ZbImFsZXJ0''@;'; put 'put ''IiwiY29uZmlybSJdLmluY2x1ZGVzKGwudHlwZSkmJiJzdHJpbmciPT10eXBlb2YgbC50aXRsZSYmKHR5cGVvZiBsPy5kZXNjcmlwdGlvbj4idSJ8fCJzdHJpbmciPT10eXBlb2YgbD8uZGVzY3JpcHRpb24pJiYodHlwZW9mIGw/LmJ1dHRvbnM+InUifHxBcnJheS5pc0FycmF5KGw/LmJ1dHRv''@;'; put 'put ''bnMpJiZsLmJ1dHRvbnMuZXZlcnkoYT0+Im9iamVjdCI9PXR5cGVvZiBhJiYic3RyaW5nIj09dHlwZW9mIGEudGV4dCYmWyJwcmltYXJ5Iiwic2Vjb25kYXJ5Il0uaW5jbHVkZXMoYS50eXBlKSYmKHR5cGVvZiBhLmNhbGxiYWNrPiJ1Inx8ImZ1bmN0aW9uIj09dHlwZW9mIGEuY2FsbGJhY2sp''@;'; put 'put ''KSksY29udGVudDpsPT4ic3RyaW5nIj09dHlwZW9mIGx8fHR5cGVvZiBIVE1MRWxlbWVudDwidSImJmwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudHx8dHlwZW9mIERvY3VtZW50RnJhZ21lbnQ8InUiJiZsIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCxjdXN0b21DbGFzc05hbWU6bD0+InN0''@;'; put 'put ''cmluZyI9PXR5cGVvZiBsLGJhY2tncm91bmQ6bD0+WyJzb2xpZCIsInNlbWktdHJhbnNwYXJlbnQiXS5pbmNsdWRlcyhsKSxjb250ZW50QmFja2dyb3VuZDpsPT4iYm9vbGVhbiI9PXR5cGVvZiBsLGFuaW1hdGlvbjpsPT4iYm9vbGVhbiI9PXR5cGVvZiBsLGNsb3NhYmxlOmw9PiJib29sZWFu''@;'; put 'put ''Ij09dHlwZW9mIGwsYTExeTpsPT5tbyhsKSYmKHR5cGVvZiBsPy5yb2xlPiJ1Inx8WyJkaWFsb2ciLCJhbGVydGRpYWxvZyJdLmluY2x1ZGVzKGw/LnJvbGUpKSYmKHR5cGVvZiBsPy5hcmlhTGFiZWw+InUifHwic3RyaW5nIj09dHlwZW9mIGw/LmFyaWFMYWJlbCkmJih0eXBlb2YgbD8uYXJp''@;'; put 'put ''YUxhYmVsbGVkYnk+InUifHwic3RyaW5nIj09dHlwZW9mIGw/LmFyaWFMYWJlbGxlZGJ5KSYmKHR5cGVvZiBsPy5hcmlhRGVzY3JpYmVkYnk+InUifHwic3RyaW5nIj09dHlwZW9mIGw/LmFyaWFEZXNjcmliZWRieSl9fWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3Mo''@;'; put 'put ''KVtDOF19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwocTAoZzEsdGhpcyl8fHc4KGcxLHRoaXMsbmV3IHV5ZSh7cm9vdEVsZW1lbnQ6dGhpcy5ob3Qucm9vdEdyaWRFbGVtZW50LGlzUnRsOnRoaXMuaG90LmlzUnRsKCl9KSksbHkodVMsdGhpcyxXYnQpLmNhbGwodGhpcyksbHkodVMs''@;'; put 'put ''dGhpcyxHYnQpLmNhbGwodGhpcyksdGhpcy5hZGRIb29rKCJhZnRlclZpZXdSZW5kZXIiLCgpPT5seSh1Uyx0aGlzLEtidCkuY2FsbCh0aGlzKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3Vw''@;'; put 'put ''ZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuaGlkZSgpLGx5KHVTLHRoaXMsWWJ0KS5jYWxsKHRoaXMpLGx5KHVTLHRoaXMsJGJ0KS5jYWxsKHRoaXMpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1pc1Zpc2libGUoKXtyZXR1cm4gcTAobFMsdGhpcyl9c2hvdygpe2xldCBs''@;'; put 'put ''PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtpZih0aGlzLmVuYWJsZWQpe2lmKHRoaXMuaXNWaXNpYmxlKCkpcmV0dXJuIHZvaWQgdGhpcy51cGRhdGUobCk7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZURpYWxvZ1Nob3ciKSx0aGlz''@;'; put 'put ''LnVwZGF0ZShsKSxxMChnMSx0aGlzKS5zaG93RGlhbG9nKHRoaXMuZ2V0U2V0dGluZygiYW5pbWF0aW9uIikpLHc4KGxTLHRoaXMsITApLHRoaXMuaG90LmdldEZvY3VzU2NvcGVNYW5hZ2VyKCkuYWN0aXZhdGVTY29wZShDOCksdzgoY1MsdGhpcyx0aGlzLmhvdC5zZWxlY3Rpb24uZXhwb3J0''@;'; put 'put ''U2VsZWN0aW9uKCkpLHRoaXMuaG90LmRlc2VsZWN0Q2VsbCgpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckRpYWxvZ1Nob3ciKX19aGlkZSgpe3ZhciBsO3RoaXMuaXNWaXNpYmxlKCkmJih0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlRGlhbG9nSGlkZSIpLHEwKGcxLHRoaXMpLmhpZGVEaWFs''@;'; put 'put ''b2codGhpcy5nZXRTZXR0aW5nKCJhbmltYXRpb24iKSksdzgobFMsdGhpcywhMSksdGhpcy5ob3QuZ2V0Rm9jdXNTY29wZU1hbmFnZXIoKS5kZWFjdGl2YXRlU2NvcGUoQzgpLChudWxsPT09KGw9cTAoY1MsdGhpcykpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLnJhbmdlcy5sZW5ndGgpPjA/KHRo''@;'; put 'put ''aXMuaG90LnNlbGVjdGlvbi5pbXBvcnRTZWxlY3Rpb24ocTAoY1MsdGhpcykpLHRoaXMuaG90LnZpZXcucmVuZGVyKCksdzgoY1MsdGhpcyxudWxsKSk6dGhpcy5ob3Quc2VsZWN0Q2VsbCgwLDApLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckRpYWxvZ0hpZGUiKSl9dXBkYXRlKGwpe2lmKCF0''@;'; put 'put ''aGlzLmVuYWJsZWQpcmV0dXJuO3RoaXMudXBkYXRlUGx1Z2luU2V0dGluZ3MobCk7Y29uc3QgYT10aGlzLmdldFNldHRpbmcoInRlbXBsYXRlIik7aWYoYSE9PVBqLkRFRkFVTFRfU0VUVElOR1MudGVtcGxhdGUmJnRoaXMuZ2V0U2V0dGluZygiY29udGVudCIpIT09UGouREVGQVVMVF9TRVRU''@;'; put 'put ''SU5HUy5jb250ZW50KXRocm93IG5ldyBFcnJvcigiVGhlIGB0ZW1wbGF0ZWAgb3B0aW9uIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggdGhlIGBjb250ZW50YCBvcHRpb24uIik7YT9xMChnMSx0aGlzKS51c2VUZW1wbGF0ZShhLnR5cGUse2lkOnRoaXMuaG90Lmd1aWQsLi4uYX0pOnEw''@;'; put 'put ''KGcxLHRoaXMpLnVzZURlZmF1bHRUZW1wbGF0ZSgpLHEwKGcxLHRoaXMpLnVwZGF0ZURpYWxvZyh7aXNWaXNpYmxlOnRoaXMuaXNWaXNpYmxlKCksY29udGVudDp0aGlzLmdldFNldHRpbmcoImNvbnRlbnQiKSxjdXN0b21DbGFzc05hbWU6dGhpcy5nZXRTZXR0aW5nKCJjdXN0b21DbGFzc05h''@;'; put 'put ''bWUiKSxiYWNrZ3JvdW5kOnRoaXMuZ2V0U2V0dGluZygiYmFja2dyb3VuZCIpLGNvbnRlbnRCYWNrZ3JvdW5kOnRoaXMuZ2V0U2V0dGluZygiY29udGVudEJhY2tncm91bmQiKSxhbmltYXRpb246dGhpcy5nZXRTZXR0aW5nKCJhbmltYXRpb24iKSxhMTF5OnRoaXMuZ2V0U2V0dGluZygiYTEx''@;'; put 'put ''eSIpfSl9c2hvd0FsZXJ0KGwsYSl7Y29uc3R7dGl0bGU6ZD0iQWxlcnQiLGRlc2NyaXB0aW9uOmh9PW1vKGwpP2w6e3RpdGxlOmx9O3RoaXMuc2hvdyh7dGVtcGxhdGU6e3R5cGU6ImNvbmZpcm0iLHRpdGxlOmQsZGVzY3JpcHRpb246aCxidXR0b25zOlt7dGV4dDp0aGlzLmhvdC5nZXRUcmFu''@;'; put 'put ''c2xhdGVkUGhyYXNlKFBOKSx0eXBlOiJwcmltYXJ5IixjYWxsYmFjazpmdW5jdGlvbigpe2Zvcih2YXIgZj1hcmd1bWVudHMubGVuZ3RoLHY9bmV3IEFycmF5KGYpLE09MDtNPGY7TSsrKXZbTV09YXJndW1lbnRzW01dO3JldHVybiBhPy4oLi4udil9fV19LGNvbnRlbnRCYWNrZ3JvdW5kOiEx''@;'; put 'put ''LGJhY2tncm91bmQ6InNvbGlkIixhbmltYXRpb246ITAsY2xvc2FibGU6ITF9KX1zaG93Q29uZmlybShsLGEsZCl7Y29uc3R7dGl0bGU6aD0iQ29uZmlybSIsZGVzY3JpcHRpb246Zn09bW8obCk/bDp7dGl0bGU6bH07dGhpcy5zaG93KHt0ZW1wbGF0ZTp7dHlwZToiY29uZmlybSIsdGl0bGU6''@;'; put 'put ''aCxkZXNjcmlwdGlvbjpmLGJ1dHRvbnM6W3t0ZXh0OnRoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoeVEpLHR5cGU6InNlY29uZGFyeSIsY2FsbGJhY2s6ZnVuY3Rpb24oKXtmb3IodmFyIHY9YXJndW1lbnRzLmxlbmd0aCxNPW5ldyBBcnJheSh2KSxEPTA7RDx2O0QrKylNW0RdPWFyZ3Vt''@;'; put 'put ''ZW50c1tEXTtyZXR1cm4gZD8uKC4uLk0pfX0se3RleHQ6dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShQTiksdHlwZToicHJpbWFyeSIsY2FsbGJhY2s6ZnVuY3Rpb24oKXtmb3IodmFyIHY9YXJndW1lbnRzLmxlbmd0aCxNPW5ldyBBcnJheSh2KSxEPTA7RDx2O0QrKylNW0RdPWFyZ3Vt''@;'; put 'put ''ZW50c1tEXTtyZXR1cm4gYT8uKC4uLk0pfX1dfSxjb250ZW50QmFja2dyb3VuZDohMCxiYWNrZ3JvdW5kOiJzZW1pLXRyYW5zcGFyZW50IixhbmltYXRpb246ITAsY2xvc2FibGU6ITF9KX1mb2N1cygpe3EwKGcxLHRoaXMpLmZvY3VzRGlhbG9nKCl9ZGVzdHJveSgpe3ZhciBsO251bGw9PT0o''@;'; put 'put ''bD1xMChnMSx0aGlzKSl8fHZvaWQgMD09PWx8fGwuZGVzdHJveURpYWxvZygpLHc4KGcxLHRoaXMsbnVsbCksdzgobFMsdGhpcywhMSksdzgoY1MsdGhpcyxudWxsKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIFdidCgpe3ZhciBjO2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5h''@;'; put 'put ''Z2VyKCksYT1udWxsIT09KGM9bC5nZXRDb250ZXh0KE9qKSkmJnZvaWQgMCE9PWM/YzpsLmFkZENvbnRleHQoT2opO2EuYWRkU2hvcnRjdXQoe2tleXM6W1siRXNjYXBlIl1dLGNhbGxiYWNrOigpPT57dGhpcy5oaWRlKCl9LHJ1bk9ubHlJZjooKT0+cTAobFMsdGhpcykmJnRoaXMuZ2V0U2V0''@;'; put 'put ''dGluZygiY2xvc2FibGUiKSxncm91cDp6aWV9KSxhLmFkZFNob3J0Y3V0KHtrZXlzOltbIlNoaWZ0IiwiVGFiIl0sWyJUYWIiXV0scHJldmVudERlZmF1bHQ6ITEsY2FsbGJhY2s6ZD0+e3RoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9Pnt0aGlzLmhvdC5ydW5Ib29rcyhkLnNoaWZ0S2V5''@;'; put 'put ''PyJkaWFsb2dGb2N1c1ByZXZpb3VzRWxlbWVudCI6ImRpYWxvZ0ZvY3VzTmV4dEVsZW1lbnQiKX0pfSxncm91cDp6aWV9KX1mdW5jdGlvbiBZYnQoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KE9qKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKHppZSl9ZnVuY3Rp''@;'; put 'put ''b24gR2J0KCl7dGhpcy5ob3QuZ2V0Rm9jdXNTY29wZU1hbmFnZXIoKS5yZWdpc3RlclNjb3BlKEM4LHEwKGcxLHRoaXMpLmdldENvbnRhaW5lcigpLHtzaG9ydGN1dHNDb250ZXh0TmFtZTpPaix0eXBlOiJtb2RhbCIscnVuT25seUlmOigpPT50aGlzLmlzVmlzaWJsZSgpLG9uQWN0aXZhdGU6''@;'; put 'put ''Yz0+e2NvbnN0IGw9dGhpcy5ob3QuaXNMaXN0ZW5pbmcoKSxhPXEwKGcxLHRoaXMpLmdldEZvY3VzYWJsZUVsZW1lbnRzKCk7YS5sZW5ndGg+MD8idGFiX2Zyb21fYWJvdmUiPT09Yz9hLmF0KDApLmZvY3VzKCk6InRhYl9mcm9tX2JlbG93Ij09PWMmJmEuYXQoLTEpLmZvY3VzKCk6InRhYl9m''@;'; put 'put ''cm9tX2Fib3ZlIiE9PWMmJiJ0YWJfZnJvbV9iZWxvdyIhPT1jJiZsJiYhcTAoZzEsdGhpcykuZ2V0Q29udGFpbmVyKCkuY29udGFpbnModGhpcy5ob3Qucm9vdERvY3VtZW50LmFjdGl2ZUVsZW1lbnQpJiZxMChnMSx0aGlzKS5nZXRDb250YWluZXIoKS5mb2N1cygpLGwmJnRoaXMuaG90LnJ1''@;'; put 'put ''bkhvb2tzKCJhZnRlckRpYWxvZ0ZvY3VzIiwidW5rbm93biI9PT1jPyJzaG93IjpjKX19KX1mdW5jdGlvbiAkYnQoKXt0aGlzLmhvdC5nZXRGb2N1c1Njb3BlTWFuYWdlcigpLnVucmVnaXN0ZXJTY29wZShDOCl9ZnVuY3Rpb24gS2J0KCl7Y29uc3R7dmlldzpjLHJvb3RXcmFwcGVyRWxlbWVu''@;'; put 'put ''dDpsLHJvb3RXaW5kb3c6YX09dGhpcy5ob3QsZD1jLmlzSG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCk/Yy5nZXRUb3RhbFRhYmxlV2lkdGgoKTpjLmdldFdvcmtzcGFjZVdpZHRoKCk7cTAoZzEsdGhpcykudXBkYXRlV2lkdGgoZCk7Y29uc3QgaD1sLnF1ZXJ5U2VsZWN0b3IoIi5o''@;'; put 'put ''b3QtZGlzcGxheS1saWNlbnNlLWluZm8iKTtpZihoKXtjb25zdCBmPWgub2Zmc2V0SGVpZ2h0LHY9TnVtYmVyLnBhcnNlRmxvYXQoYS5nZXRDb21wdXRlZFN0eWxlKGgpLm1hcmdpblRvcCk7cTAoZzEsdGhpcykudXBkYXRlSGVpZ2h0KGYrdil9fWZ1bmN0aW9uIGh5ZShjLGwpe2lmKGwuaGFz''@;'; put 'put ''KGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gZnllKGMsbCxhKXtyZXR1cm4gYy5zZXQoVWllKGMsbCksYSksYX1mdW5jdGlvbiBaMihjLGwpe3JldHVybiBjLmdl''@;'; put 'put ''dChVaWUoYyxsKSl9ZnVuY3Rpb24gVWllKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmpl''@;'; put 'put ''Y3QiKX1jb25zdCBjeT0ibG9hZGluZyIsdXk9YGh0LSR7Y3l9YDt2YXIgWDE9bmV3IFdlYWtNYXAscHllPW5ldyBXZWFrU2V0O2NsYXNzIGVfdCBleHRlbmRzIE1ze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBxYnQoYyxsKXtoeWUoYyxsKSxsLmFkZChjKX0o''@;'; put 'put ''dGhpcyxweWUpLGZ1bmN0aW9uIEpidChjLGwsYSl7aHllKGMsbCksbC5zZXQoYyxhKX0odGhpcyxYMSxudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gY3l9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMzUwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5H''@;'; put 'put ''Uygpe3JldHVybntpY29uOmA8c3ZnIGNsYXNzPSIke3V5fV9faWNvbi1zdmciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMTUg''@;'; put 'put ''OGE3IDcgMCAxIDEtMy41LTYuMDYyIj48L3BhdGg+PC9zdmc+YCx0aXRsZTp2b2lkIDAsZGVzY3JpcHRpb246IiJ9fXN0YXRpYyBnZXQgU0VUVElOR1NfVkFMSURBVE9SUygpe3JldHVybntpY29uOmw9PiJzdHJpbmciPT10eXBlb2YgbCx0aXRsZTpsPT4ic3RyaW5nIj09dHlwZW9mIGwsZGVz''@;'; put 'put ''Y3JpcHRpb246bD0+InN0cmluZyI9PXR5cGVvZiBsfX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbY3ldfWVuYWJsZVBsdWdpbigpe3ZhciBsO3RoaXMuZW5hYmxlZHx8KG51bGw9PT1aMihYMSx0aGlzKSYmKGZ5ZShYMSx0aGlzLHRoaXMuaG90LmdldFBsdWdp''@;'; put 'put ''bigiZGlhbG9nIikpLG51bGwhPT0obD1aMihYMSx0aGlzKSkmJnZvaWQgMCE9PWwmJmwuaXNFbmFibGVkKCl8fCh0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmRpYWxvZz0hMCksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJEaWFsb2dGb2N1cyIsKCk9PlVpZShweWUsdGhpcyx0X3QpLmNhbGwodGhp''@;'; put 'put ''cykpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5oaWRlKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfWlzVmlzaWJsZSgp''@;'; put 'put ''e3ZhciBsLGE7cmV0dXJuIG51bGwhPT0obD1udWxsPT09KGE9WjIoWDEsdGhpcykpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmlzVmlzaWJsZSgpKSYmdm9pZCAwIT09bCYmbH1zaG93KCl7dmFyIGw7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1l''@;'; put 'put ''bnRzWzBdOnt9O3RoaXMuaXNFbmFibGVkKCkmJloyKFgxLHRoaXMpJiZudWxsIT09KGw9WjIoWDEsdGhpcykpJiZ2b2lkIDAhPT1sJiZsLmlzRW5hYmxlZCgpJiYodGhpcy5pc1Zpc2libGUoKT90aGlzLnVwZGF0ZShhKTohMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVMb2FkaW5nU2hv''@;'; put 'put ''dyIpJiYodGhpcy51cGRhdGUoYSksWjIoWDEsdGhpcykuc2hvdygpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckxvYWRpbmdTaG93IikpKX1oaWRlKCl7dmFyIGw7IVoyKFgxLHRoaXMpfHxudWxsPT09KGw9WjIoWDEsdGhpcykpfHx2b2lkIDA9PT1sfHwhbC5pc0VuYWJsZWQoKXx8IXRoaXMu''@;'; put 'put ''aXNWaXNpYmxlKCl8fCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUxvYWRpbmdIaWRlIil8fChaMihYMSx0aGlzKS5oaWRlKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyTG9hZGluZ0hpZGUiKSl9dXBkYXRlKGwpe3ZhciBhLGQ7aWYoIXRoaXMuaXNFbmFibGVkKCl8fCFaMihYMSx0''@;'; put 'put ''aGlzKXx8bnVsbD09PShhPVoyKFgxLHRoaXMpKXx8dm9pZCAwPT09YXx8IWEuaXNFbmFibGVkKCkpcmV0dXJuO3RoaXMudXBkYXRlUGx1Z2luU2V0dGluZ3MobCk7Y29uc3QgaD10aGlzLmhvdC5ndWlkLGY9dGhpcy5nZXRTZXR0aW5nKCJpY29uIiksdj1udWxsIT09KGQ9dGhpcy5nZXRTZXR0''@;'; put 'put ''aW5nKCJ0aXRsZSIpKSYmdm9pZCAwIT09ZD9kOnRoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoJGVlKSxNPXRoaXMuZ2V0U2V0dGluZygiZGVzY3JpcHRpb24iKSxEPWZ1bmN0aW9uIFhidChjKXtsZXR7aWQ6bCxpY29uOmEsdGl0bGU6ZCxkZXNjcmlwdGlvbjpofT1jO3JldHVybmBcbiAg''@;'; put 'put ''ICA8ZGl2IGNsYXNzPSIke3V5fV9fY29udGVudCI+XG4gICAgICA8aSBjbGFzcz0iJHt1eX1fX2ljb24iPiR7YX08L2k+XG4gICAgICA8ZGl2IGNsYXNzPSIke3V5fV9fdGV4dCI+XG4gICAgICAgIDxoMiBpZD0iJHtsfS0ke2N5fS10aXRsZSIgY2xhc3M9IiR7dXl9X190aXRsZSI+JHtkfTwv''@;'; put 'put ''aDI+XG4gICAgICAgICR7aD9gPHAgaWQ9IiR7bH0tJHtjeX0tZGVzY3JpcHRpb24iIGNsYXNzPSIke3V5fV9fZGVzY3JpcHRpb24iPiR7aH08L3A+YDoiIn1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgfSh7aWQ6aCxpY29uOmYsdGl0bGU6dixkZXNjcmlwdGlvbjpNfSk7WjIoWDEs''@;'; put 'put ''dGhpcykudXBkYXRlKHtjb250ZW50OkQsY3VzdG9tQ2xhc3NOYW1lOnV5LGJhY2tncm91bmQ6MD09PXRoaXMuaG90LmNvdW50U291cmNlUm93cygpPyJzb2xpZCI6InNlbWktdHJhbnNwYXJlbnQiLGExMXk6e3JvbGU6ImFsZXJ0ZGlhbG9nIixhcmlhTGFiZWxsZWRieTpgJHtofS0ke2N5fS10''@;'; put 'put ''aXRsZWAsYXJpYURlc2NyaWJlZGJ5Ok0/YCR7aH0tJHtjeX0tZGVzY3JpcHRpb25gOnZvaWQgMH19KX1kZXN0cm95KCl7ZnllKFgxLHRoaXMsbnVsbCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiB0X3QoKXtaMihYMSx0aGlzKS5mb2N1cygpfWZ1bmN0aW9uIEZqKGMsbCxhKXsoZnVuY3Rp''@;'; put 'put ''b24gbl90KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBHYyhjLGwpe3JldHVybiBjLmdldChneWUoYyxs''@;'; put 'put ''KSl9ZnVuY3Rpb24gWTUoYyxsLGEpe3JldHVybiBjLnNldChneWUoYyxsKSxhKSxhfWZ1bmN0aW9uIGd5ZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0''@;'; put 'put ''ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgQmQ9Imh0LWVtcHR5LWRhdGEtc3RhdGUiLGlfdD1gPGRpdiBkYXRhLXJlZj0iZW1wdHlEYXRhU3RhdGVFbGVtZW50IiBjbGFzcz0iJHtCZH0gaGFuZHNvbnRhYmxlIj5cbiAgPGRpdiBjbGFzcz0iJHtCZH1f''@;'; put 'put ''X2NvbnRlbnQtd3JhcHBlciI+XG4gICAgPGRpdiBkYXRhLXJlZj0iZW1wdHlEYXRhU3RhdGVJbm5lciIgY2xhc3M9IiR7QmR9X19jb250ZW50LXdyYXBwZXItaW5uZXIiPjwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PmA7dmFyIFppZT1uZXcgV2Vha01hcCxXaWU9bmV3IFdlYWtNYXAsSjA9bmV3''@;'; put 'put ''IFdlYWtNYXAsVzI9bmV3IFdlYWtNYXA7Y2xhc3Mgb190e2NvbnN0cnVjdG9yKGwpe2xldHtyb290RWxlbWVudDphLHJvb3REb2N1bWVudDpkfT1sO0ZqKHRoaXMsWmllLHZvaWQgMCksRmoodGhpcyxXaWUsdm9pZCAwKSxGaih0aGlzLEowLHZvaWQgMCksRmoodGhpcyxXMix2b2lkIDApLFk1''@;'; put 'put ''KFppZSx0aGlzLGEpLFk1KFdpZSx0aGlzLGQpLHRoaXMuaW5zdGFsbCgpfWluc3RhbGwoKXt2YXIgbDtpZihudWxsIT09KGw9R2MoSjAsdGhpcykpJiZ2b2lkIDAhPT1sJiZsLmVtcHR5RGF0YVN0YXRlRWxlbWVudClyZXR1cm47Y29uc3QgYT1Pd2Ake2lfdH1gO1k1KEowLHRoaXMsYS5yZWZz''@;'; put 'put ''KTtjb25zdHtlbXB0eURhdGFTdGF0ZUlubmVyOmQsZW1wdHlEYXRhU3RhdGVFbGVtZW50Omh9PUdjKEowLHRoaXMpO1phKGQsWyQzKC0xKV0pLFphKGgsWyQzKC0xKV0pLEdjKFppZSx0aGlzKS5hZnRlcihhLmZyYWdtZW50KX1nZXRFbGVtZW50KCl7dmFyIGw7cmV0dXJuIG51bGw9PT0obD1H''@;'; put 'put ''YyhKMCx0aGlzKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuZW1wdHlEYXRhU3RhdGVFbGVtZW50fWdldEZvY3VzYWJsZUVsZW1lbnRzKCl7Y29uc3R7ZW1wdHlEYXRhU3RhdGVCdXR0b25zOmwsZW1wdHlEYXRhU3RhdGVJbm5lcjphfT1HYyhKMCx0aGlzKSxkPUFycmF5LmZyb20obD8uY2hpbGRy''@;'; put 'put ''ZW4pO3JldHVybiAwPT09ZC5sZW5ndGg/W2FdOmR9c2hvdygpe3ZhciBsO251bGwhPT0obD1HYyhKMCx0aGlzKSkmJnZvaWQgMCE9PWwmJmwuZW1wdHlEYXRhU3RhdGVFbGVtZW50JiYoR2MoSjAsdGhpcykuZW1wdHlEYXRhU3RhdGVFbGVtZW50LnN0eWxlLmRpc3BsYXk9ImJsb2NrIil9aGlk''@;'; put 'put ''ZSgpe3ZhciBsLGE7bnVsbCE9PShsPUdjKEowLHRoaXMpKSYmdm9pZCAwIT09bCYmbC5lbXB0eURhdGFTdGF0ZUVsZW1lbnQmJihudWxsPT09KGE9R2MoVzIsdGhpcykpfHx2b2lkIDA9PT1hfHxhLnJlbW92ZSgpLFk1KFcyLHRoaXMsbnVsbCksR2MoSjAsdGhpcykuZW1wdHlEYXRhU3RhdGVF''@;'; put 'put ''bGVtZW50LnN0eWxlLmRpc3BsYXk9Im5vbmUiKX11cGRhdGVDb250ZW50KGwpe3ZhciBhO2NvbnN0e2VtcHR5RGF0YVN0YXRlSW5uZXI6ZH09R2MoSjAsdGhpcyk7bGV0IGg9IiI7aD0ic3RyaW5nIj09dHlwZW9mIGw/e3RpdGxlOmx9Ont0aXRsZTpsPy50aXRsZSxkZXNjcmlwdGlvbjpsPy5k''@;'; put 'put ''ZXNjcmlwdGlvbixidXR0b25zOmw/LmJ1dHRvbnN9O2NvbnN0IGY9T3dgJHsoYz0+e2xldHt0aXRsZTpsLGRlc2NyaXB0aW9uOmEsYnV0dG9uczpkfT1jO3JldHVybmBcbiAgPGRpdiBjbGFzcz0iJHtCZH1fX2NvbnRlbnQiPlxuICAgICR7bD9gPGgyIGNsYXNzPSIke0JkfV9fdGl0bGUiPiR7''@;'; put 'put ''QzQobCl9PC9oMj5gOiIifVxuICAgICR7YT9gPHAgY2xhc3M9IiR7QmR9X19kZXNjcmlwdGlvbiI+JHtDNChhKX08L3A+YDoiIn1cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICBkYXRhLXJlZj0iZW1wdHlEYXRhU3RhdGVCdXR0b25zIlxuICAgIGNsYXNzPSIke0JkfV9fYnV0dG9ucyR7ZD8ubGVu''@;'; put 'put ''Z3RoPjA/YCAke0JkfV9fYnV0dG9ucy0taGFzLWJ1dHRvbnNgOiIifSJcbiAgPiR7ZD8ubGVuZ3RoPjA/ZC5tYXAoaD0+YDxidXR0b24gY2xhc3M9Imh0LWJ1dHRvbiBodC1idXR0b24tLSR7aC50eXBlfSI+JHtDNChoLnRleHQpfTwvYnV0dG9uPmApLmpvaW4oIiIpOiIifTwvZGl2PmB9KSho''@;'; put 'put ''KX1gO1k1KEowLHRoaXMsey4uLkdjKEowLHRoaXMpLC4uLmYucmVmc30pLGQuaW5uZXJIVE1MPSIiLGQuYXBwZW5kQ2hpbGQoZi5mcmFnbWVudCksKG51bGw9PT0oYT1oLmJ1dHRvbnMpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmxlbmd0aCk+MCYmQXJyYXkuZnJvbShHYyhKMCx0aGlzKS5lbXB0''@;'; put 'put ''eURhdGFTdGF0ZUJ1dHRvbnMuY2hpbGRyZW4pLmZvckVhY2goKHYsTSk9Pnt2LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixoLmJ1dHRvbnNbTV0uY2FsbGJhY2spfSl9dXBkYXRlQ2xhc3NOYW1lcyhsKXtjb25zdHtlbXB0eURhdGFTdGF0ZUVsZW1lbnQ6YX09R2MoSjAsdGhpcyk7bC5jb3Vu''@;'; put 'put ''dFJlbmRlcmFibGVDb2x1bW5zKCk+MCYmbC5nZXRDb2x1bW5IZWFkZXJzQ291bnQoKT4wP2lpKGEsYCR7QmR9LS1kaXNhYmxlLXRvcC1ib3JkZXJgKTpWYShhLGAke0JkfS0tZGlzYWJsZS10b3AtYm9yZGVyYCksbC5jb3VudFJlbmRlcmFibGVSb3dzKCk+MCYmbC5nZXRSb3dIZWFkZXJzQ291''@;'; put 'put ''bnQoKT4wP2lpKGEsYCR7QmR9LS1kaXNhYmxlLWlubGluZS1ib3JkZXJgKTpWYShhLGAke0JkfS0tZGlzYWJsZS1pbmxpbmUtYm9yZGVyYCksbC5oYXNIb3Jpem9udGFsU2Nyb2xsKCkmJiFsLmlzSG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCk/aWkoYSxgJHtCZH0tLWRpc2FibGUt''@;'; put 'put ''Ym90dG9tLWJvcmRlcmApOlZhKGEsYCR7QmR9LS1kaXNhYmxlLWJvdHRvbS1ib3JkZXJgKX11cGRhdGVTaXplKGwpe2NvbnN0e2VtcHR5RGF0YVN0YXRlRWxlbWVudDphfT1HYyhKMCx0aGlzKSxkPWwuaGFzSG9yaXpvbnRhbFNjcm9sbCgpP3d1KGwuaG90LnJvb3REb2N1bWVudCk6MCxoPWwu''@;'; put 'put ''Y291bnRSZW5kZXJhYmxlUm93cygpLGY9bC5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCksdj1sLmdldENvbHVtbkhlYWRlcnNDb3VudCgpO3ZhciBNO2Euc3R5bGUudG9wPWY+MD9gJHtsLmdldENvbHVtbkhlYWRlckhlaWdodCgpfXB4YDoiMHB4IixhLnN0eWxlLmluc2V0SW5saW5lU3RhcnQ9''@;'; put 'put ''aD4wP2Ake2wuZ2V0Um93SGVhZGVyV2lkdGgoKX1weGA6IjBweCIsMD09PWg/KEdjKFcyLHRoaXMpfHwoWTUoVzIsdGhpcyxHYyhXaWUsdGhpcykuY3JlYXRlRWxlbWVudCgiZGl2IikpLEdjKFcyLHRoaXMpLmNsYXNzTGlzdC5hZGQoYCR7QmR9LXBsYWNlaG9sZGVyYCksbC5fd3Qud3RUYWJs''@;'; put 'put ''ZS5ob2xkZXIuYXBwZW5kQ2hpbGQoR2MoVzIsdGhpcykpKSxHYyhXMix0aGlzKS5zdHlsZS53aWR0aD0iMTAwJSIsR2MoVzIsdGhpcykuc3R5bGUuaGVpZ2h0PSIxNTBweCIpOihudWxsPT09KE09R2MoVzIsdGhpcykpfHx2b2lkIDA9PT1NfHxNLnJlbW92ZSgpLFk1KFcyLHRoaXMsbnVsbCkp''@;'; put 'put ''O2xldCBEPWwuZ2V0V29ya3NwYWNlV2lkdGgoKSxVPWwuZ2V0VGFibGVIZWlnaHQoKTtsLmlzSG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCk/Zj4wP0Q9bC5nZXRUb3RhbFRhYmxlV2lkdGgoKTpoPjAmJihEPWwuZ2V0Vmlld3BvcnRXaWR0aCgpKTpoPjA/RD1sLmdldFZpZXdwb3J0''@;'; put 'put ''V2lkdGgoKTpsLmdldFRhYmxlV2lkdGgoKS1sLmdldFJvd0hlYWRlcldpZHRoKCk8bC5nZXRWaWV3cG9ydFdpZHRoKCkmJmY+MCYmKEQ9bC5nZXRUYWJsZVdpZHRoKCkpLGwuaXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCl8fGwuaGFzVmVydGljYWxTY3JvbGwoKT9VPWY+MD9sLmhv''@;'; put 'put ''dC5nZXRUYWJsZUhlaWdodCgpLWwuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KCk6bC5ob3QuZ2V0VGFibGVIZWlnaHQoKTp2PjAmJmY+MD9VPWwuZ2V0Vmlld3BvcnRIZWlnaHQoKS1kOnY+MCYmMD09PWYmJihVPWwuZ2V0V29ya3NwYWNlSGVpZ2h0KCktZCksYS5zdHlsZS53aWR0aD1gJHtEfXB4''@;'; put 'put ''YCxhLnN0eWxlLmhlaWdodD1gJHtVfXB4YH1kZXN0cm95KCl7dmFyIGwsYTtudWxsPT09KGw9R2MoSjAsdGhpcykpfHx2b2lkIDA9PT1sfHxudWxsPT09KGw9bC5lbXB0eURhdGFTdGF0ZUVsZW1lbnQpfHx2b2lkIDA9PT1sfHxsLnJlbW92ZSgpLG51bGw9PT0oYT1HYyhXMix0aGlzKSl8fHZv''@;'; put 'put ''aWQgMD09PWF8fGEucmVtb3ZlKCksWTUoVzIsdGhpcyxudWxsKSxZNShKMCx0aGlzLG51bGwpfX1mdW5jdGlvbiBXRChjLGwsYSl7bXllKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBteWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0''@;'; put 'put ''aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIExoKGMsbCxhKXtyZXR1cm4gYy5zZXQoQnUoYyxsKSxhKSxhfWZ1bmN0aW9uIGR1KGMsbCl7cmV0dXJuIGMuZ2V0KEJ1KGMsbCkpfWZ1bmN0aW9uIEJ1KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBkeT0iZW1wdHlEYXRhU3RhdGUiLFlpZT1PYmplY3QuZnJlZXpl''@;'; put 'put ''KHtVTktOT1dOOiJ1bmtub3duIixGSUxURVJTOiJmaWx0ZXJzIn0pLGNfdD1gcGx1Z2luOiR7ZHl9YDt2YXIgS2llLFhpZSxxaWUsSmllLFFpZSxoeT1uZXcgV2Vha01hcCxEMD1uZXcgV2Vha01hcCxkUz1uZXcgV2Vha01hcCxIaj1uZXcgV2Vha01hcCxoUz1uZXcgV2Vha01hcCxsMD1uZXcg''@;'; put 'put ''V2Vha1NldDtjbGFzcyB1X3QgZXh0ZW5kcyBNc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gc190KGMsbCl7bXllKGMsbCksbC5hZGQoYyl9KHRoaXMsbDApLFdEKHRoaXMsaHksITEpLFdEKHRoaXMsRDAsbnVsbCksV0QodGhpcyxkUyxudWxsKSxXRCh0aGlz''@;'; put 'put ''LEhqLCExKSxXRCh0aGlzLGhTLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBkeX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAzNzB9c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue21lc3NhZ2U6dm9pZCAwfX1zdGF0aWMgZ2V0IFNF''@;'; put 'put ''VFRJTkdTX1ZBTElEQVRPUlMoKXtyZXR1cm57bWVzc2FnZTpsPT4ic3RyaW5nIj09dHlwZW9mIGx8fCJmdW5jdGlvbiI9PXR5cGVvZiBsfHxtbyhsKSYmKHR5cGVvZiBsPy50aXRsZT4idSJ8fCJzdHJpbmciPT10eXBlb2YgbD8udGl0bGUpJiYodHlwZW9mIGw/LmRlc2NyaXB0aW9uPiJ1Inx8''@;'; put 'put ''InN0cmluZyI9PXR5cGVvZiBsPy5kZXNjcmlwdGlvbikmJih0eXBlb2YgbD8uYnV0dG9ucz4idSJ8fEFycmF5LmlzQXJyYXkobD8uYnV0dG9ucykmJmw/LmJ1dHRvbnMuZXZlcnkoYT0+Im9iamVjdCI9PXR5cGVvZiBhJiYic3RyaW5nIj09dHlwZW9mIGEudGV4dCYmInN0cmluZyI9PXR5cGVv''@;'; put 'put ''ZiBhLnR5cGUmJlsicHJpbWFyeSIsInNlY29uZGFyeSJdLmluY2x1ZGVzKGEudHlwZSkmJiJmdW5jdGlvbiI9PXR5cGVvZiBhLmNhbGxiYWNrKSl8fHZvaWQgMD09PWx9fWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtkeV19ZW5hYmxlUGx1Z2luKCl7dGhpcy5l''@;'; put 'put ''bmFibGVkfHwoZHUoRDAsdGhpcyl8fChMaChEMCx0aGlzLG5ldyBvX3Qoe3Jvb3RFbGVtZW50OnRoaXMuaG90LnJvb3RHcmlkRWxlbWVudCxyb290RG9jdW1lbnQ6dGhpcy5ob3Qucm9vdERvY3VtZW50fSkpLEJ1KGwwLHRoaXMscF90KS5jYWxsKHRoaXMpLEJ1KGwwLHRoaXMsZF90KS5jYWxs''@;'; put 'put ''KHRoaXMpLEJ1KGwwLHRoaXMsaF90KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVySW5pdCIsKCk9PkJ1KGwwLHRoaXMsYl90KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyUmVuZGVyIiwoKT0+QnUobDAsdGhpcyxfX3QpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygi''@;'; put 'put ''YWZ0ZXJSb3dTZXF1ZW5jZUNhY2hlVXBkYXRlIiwoKT0+QnUobDAsdGhpcyxHaWUpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNhY2hlVXBkYXRlIiwoKT0+QnUobDAsdGhpcyxHaWUpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYmVmb3JlRmlsdGVy''@;'; put 'put ''IixsPT5CdShsMCx0aGlzLHdfdCkuY2FsbCh0aGlzLGwpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxCdShsMCx0aGlzLCRpZSkuY2FsbCh0aGlzKSx0aGlzLmlzVmlzaWJsZSgpJiZkdShEMCx0''@;'; put 'put ''aGlzKS5zaG93KCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe0J1KGwwLHRoaXMsZ190KS5jYWxsKHRoaXMpLEJ1KGwwLHRoaXMsZl90KS5jYWxsKHRoaXMpLGR1KEQwLHRoaXMpLmRlc3Ryb3koKSxMaChEMCx0aGlzLG51bGwpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1p''@;'; put 'put ''c1Zpc2libGUoKXtyZXR1cm4gZHUoaHksdGhpcyl9ZGVzdHJveSgpe3ZhciBsO0xoKGh5LHRoaXMsITEpLG51bGw9PT0obD1kdShEMCx0aGlzKSl8fHZvaWQgMD09PWx8fGwuZGVzdHJveSgpLExoKEQwLHRoaXMsbnVsbCksTGgoZFMsdGhpcyxudWxsKSxMaChIaix0aGlzLCExKSxMaChoUyx0''@;'; put 'put ''aGlzLG51bGwpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gZF90KCl7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihkdShEMCx0aGlzKS5nZXRFbGVtZW50KCksIndoZWVsIixjPT5CdShsMCx0aGlzLHlfdCkuY2FsbCh0aGlzLGMpKX1mdW5jdGlvbiBoX3QoKXtMaChkUyx0''@;'; put 'put ''aGlzLG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpPT57aWYoIXRoaXMuaG90KXJldHVybjtjb25zdCBjPWR1KEQwLHRoaXMpLmdldEVsZW1lbnQoKTt0aGlzLmhvdC5yb290R3JpZEVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nIT09YyYmdGhpcy5ob3Qucm9vdEdyaWRFbGVtZW50LmFmdGVyKGMp''@;'; put 'put ''fSkpLGR1KGRTLHRoaXMpLm9ic2VydmUodGhpcy5ob3Qucm9vdFdyYXBwZXJFbGVtZW50LHtjaGlsZExpc3Q6ITB9KX1mdW5jdGlvbiBmX3QoKXtkdShkUyx0aGlzKS5kaXNjb25uZWN0KCksTGgoZFMsdGhpcyxudWxsKX1mdW5jdGlvbiBwX3QoKXt0aGlzLmhvdC5nZXRGb2N1c1Njb3BlTWFu''@;'; put 'put ''YWdlcigpLnJlZ2lzdGVyU2NvcGUoZHksZHUoRDAsdGhpcykuZ2V0RWxlbWVudCgpLHtzaG9ydGN1dHNDb250ZXh0TmFtZTpjX3QscnVuT25seUlmOigpPT50aGlzLmlzVmlzaWJsZSgpLG9uQWN0aXZhdGU6Yz0+e3ZhciBsO2NvbnN0IGE9bnVsbD09PShsPWR1KEQwLHRoaXMpKXx8dm9pZCAw''@;'; put 'put ''PT09bD92b2lkIDA6bC5nZXRGb2N1c2FibGVFbGVtZW50cygpO2EubGVuZ3RoPjAmJigidGFiX2Zyb21fYWJvdmUiPT09Yz9hLmF0KDApLmZvY3VzKCk6InRhYl9mcm9tX2JlbG93Ij09PWMmJmEuYXQoLTEpLmZvY3VzKCkpfX0pfWZ1bmN0aW9uIGdfdCgpe3RoaXMuaG90LmdldEZvY3VzU2Nv''@;'; put 'put ''cGVNYW5hZ2VyKCkudW5yZWdpc3RlclNjb3BlKGR5KX1mdW5jdGlvbiB2eWUoYyl7dmFyIGwsYSxkO2xldCBoO3JldHVybiBoPSJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmdldFNldHRpbmcoIm1lc3NhZ2UiKT90aGlzLmdldFNldHRpbmcoIm1lc3NhZ2UiKShjKTp0aGlzLmdldFNldHRpbmco''@;'; put 'put ''Im1lc3NhZ2UiKSwic3RyaW5nIj09dHlwZW9mIGgmJihoPXt0aXRsZTpofSksIShudWxsIT09KGw9aCkmJnZvaWQgMCE9PWwmJmwudGl0bGUpJiYhKG51bGwhPT0oYT1oKSYmdm9pZCAwIT09YSYmYS5kZXNjcmlwdGlvbikmJiEobnVsbCE9PShkPWgpJiZ2b2lkIDAhPT1kJiZkLmJ1dHRvbnMp''@;'; put 'put ''JiYoaD17fSxjPT09WWllLkZJTFRFUlM/KGgudGl0bGU9dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShxZWUpLGguZGVzY3JpcHRpb249dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShKZWUpLGguYnV0dG9ucz1be3RleHQ6dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShRZWUp''@;'; put 'put ''LHR5cGU6InNlY29uZGFyeSIsY2FsbGJhY2s6KCk9Pntjb25zdCBmPXRoaXMuaG90LmdldFBsdWdpbigiZmlsdGVycyIpO2YmJihmLmNsZWFyQ29uZGl0aW9ucygpLGYuZmlsdGVyKCkpfX1dKTooaC50aXRsZT10aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKEtlZSksaC5kZXNjcmlwdGlv''@;'; put 'put ''bj10aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKFhlZSkpKSxofWZ1bmN0aW9uIEdpZSgpe3RoaXMuaG90LnZpZXcmJigwPT09dGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCl8fDA9PT10aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZVJvd3MoKT9CdShsMCx0aGlz''@;'; put 'put ''LG1fdCkuY2FsbCh0aGlzKTpCdShsMCx0aGlzLHZfdCkuY2FsbCh0aGlzKSl9ZnVuY3Rpb24gbV90KCl7ZHUoaHksdGhpcyl8fCh0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlRW1wdHlEYXRhU3RhdGVTaG93IiksQnUobDAsdGhpcywkaWUpLmNhbGwodGhpcyksZHUoRDAsdGhpcykuc2hvdygp''@;'; put 'put ''LExoKGh5LHRoaXMsITApLExoKGhTLHRoaXMsdGhpcy5ob3Quc2VsZWN0aW9uLmV4cG9ydFNlbGVjdGlvbigpKSx0aGlzLmhvdC5nZXRGb2N1c1Njb3BlTWFuYWdlcigpLmFjdGl2YXRlU2NvcGUoZHkpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckVtcHR5RGF0YVN0YXRlU2hvdyIpKX1mdW5j''@;'; put 'put ''dGlvbiAkaWUoKXtkdShIaix0aGlzKT9kdShEMCx0aGlzKS51cGRhdGVDb250ZW50KEJ1KGwwLHRoaXMsdnllKS5jYWxsKHRoaXMsWWllLkZJTFRFUlMpKTpkdShEMCx0aGlzKS51cGRhdGVDb250ZW50KEJ1KGwwLHRoaXMsdnllKS5jYWxsKHRoaXMsWWllLlVOS05PV04pKX1mdW5jdGlvbiB2''@;'; put 'put ''X3QoKXt2YXIgYztkdShoeSx0aGlzKSYmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVFbXB0eURhdGFTdGF0ZUhpZGUiKSxkdShEMCx0aGlzKS5oaWRlKCksTGgoaHksdGhpcywhMSksdGhpcy5ob3QuZ2V0Rm9jdXNTY29wZU1hbmFnZXIoKS5kZWFjdGl2YXRlU2NvcGUoZHkpLChudWxsPT09''@;'; put 'put ''KGM9ZHUoaFMsdGhpcykpfHx2b2lkIDA9PT1jP3ZvaWQgMDpjLnJhbmdlcy5sZW5ndGgpPjA/KHRoaXMuaG90LnNlbGVjdGlvbi5pbXBvcnRTZWxlY3Rpb24oZHUoaFMsdGhpcykpLHRoaXMuaG90LnZpZXcucmVuZGVyKCksTGgoaFMsdGhpcyxudWxsKSk6dGhpcy5ob3Quc2VsZWN0Q2VsbCgw''@;'; put 'put ''LDApLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckVtcHR5RGF0YVN0YXRlSGlkZSIpKX1mdW5jdGlvbiB5X3QoYyl7Y29uc3QgbD1OdW1iZXIuaXNOYU4oYy5kZWx0YVgpPy0xKmMud2hlZWxEZWx0YVg6Yy5kZWx0YVg7MCE9PWwmJnRoaXMuaG90LnZpZXcuaGFzSG9yaXpvbnRhbFNjcm9sbCgp''@;'; put 'put ''JiYhdGhpcy5ob3Qudmlldy5pc0hvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdygpJiYodGhpcy5ob3Qudmlldy5zZXRUYWJsZVNjcm9sbFBvc2l0aW9uKHtsZWZ0OnRoaXMuaG90LnZpZXcuZ2V0VGFibGVTY3JvbGxQb3NpdGlvbigpLmxlZnQrbH0pLGMucHJldmVudERlZmF1bHQoKSl9''@;'; put 'put ''ZnVuY3Rpb24gYl90KCl7QnUobDAsdGhpcyxHaWUpLmNhbGwodGhpcyksdGhpcy5ob3QucmVuZGVyKCl9ZnVuY3Rpb24gX190KCl7dmFyIGM7bnVsbCE9PShjPWR1KEQwLHRoaXMpKSYmdm9pZCAwIT09YyYmYy5nZXRFbGVtZW50KCkmJnRoaXMuaXNWaXNpYmxlKCkmJihkdShEMCx0aGlzKS51''@;'; put 'put ''cGRhdGVTaXplKHRoaXMuaG90LnZpZXcpLGR1KEQwLHRoaXMpLnVwZGF0ZUNsYXNzTmFtZXModGhpcy5ob3QudmlldykpfWZ1bmN0aW9uIHdfdChjKXtMaChIaix0aGlzLGM/Lmxlbmd0aD4wKSx0aGlzLmlzVmlzaWJsZSgpJiZCdShsMCx0aGlzLCRpZSkuY2FsbCh0aGlzKX1mdW5jdGlvbiBZ''@;'; put 'put ''RCgpeyhmdW5jdGlvbiB4MXQoKXt5aChsQykseWgoUnRlKSx5aChkNmUpLHloKGI2ZSkseWgoXzZlKSx5aChBdGUpLHloKHc2ZSkseWgoQzZlKSx5aChNNmUpLHloKHZ2KSx5aCh4NmUpfSkoKSxmdW5jdGlvbiAkZHQoKXtBMihjQyksQTIoRWspLEEyKFV0ZSksQTIoenRlKSxBMihXdGUpLEEy''@;'; put 'put ''KGp0ZSksQTIoZW5lKSxBMih0bmUpLEEyKG5uZSksQTIoeDUpLEEyKHJuZSl9KCksZnVuY3Rpb24gbmh0KCl7bnYoRGspLG52KGluZSksbnYoQ1YpLG52KGFuZSksbnYoU1YpfSgpLGZ1bmN0aW9uIHZodCgpe1dmKHJodCksV2YoYWh0KSxXZihzaHQpLFdmKHVodCksV2YoZGh0KSxXZihmaHQp''@;'; put 'put ''LFdmKHBodCksV2YoZ2h0KSxXZihpNmUpLFdmKG1odCl9KCksZnVuY3Rpb24gQ190KCl7U3MoTGspLFNzKEtodCksU3MoUGspLFNzKEQydCksU3MoTjJ0KSxTcyhQOGUpLFNzKFBmdCksU3MoYzN0KSxTcyhyQiksU3Moa3B0KSxTcyh0NHQpLFNzKHU0dCksU3MoaEIpLFNzKEs0dCksU3MoWTV0''@;'; put 'put ''KSxTcyhUbXQpLFNzKGU2dCksU3MoaDZ0KSxTcyhNNnQpLFNzKE42dCksU3MoJDZ0KSxTcyhnOHQpLFNzKE04dCksU3MobDd0KSxTcyhCN3QpLFNzKFc3dCksU3MoeTl0KSxTcyhsdnQpLFNzKE52dCksU3Mob3l0KSxTcyhneXQpLFNzKGt5dCksU3MoTnl0KSxTcyhLeXQpLFNzKExidCksU3Mo''@;'; put 'put ''UGopLFNzKGVfdCksU3ModV90KX0oKX1ZRCgpLGZ1bmN0aW9uIFNfdChjKXtjb25zdCBsPSEodHlwZW9mIHdpbmRvdz4idSIpJiZ3aW5kb3cualF1ZXJ5O2wmJihsLmZuLmhhbmRzb250YWJsZT1mdW5jdGlvbihhKXtjb25zdCBkPXRoaXMuZmlyc3QoKTtsZXQgZixoPWQuZGF0YSgiaGFuZHNv''@;'; put 'put ''bnRhYmxlIik7aWYoInN0cmluZyIhPXR5cGVvZiBhKXtjb25zdCBVPWF8fHt9O3JldHVybiBoP2gudXBkYXRlU2V0dGluZ3MoVSk6KGg9bmV3IGMuQ29yZShkWzBdLFUpLGQuZGF0YSgiaGFuZHNvbnRhYmxlIixoKSxoLmluaXQoKSksZH1pZihoKXtpZighKHR5cGVvZiBoW2FdPCJ1IikpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKGBIYW5kc29udGFibGUgZG8gbm90IHByb3ZpZGUgYWN0aW9uOiAke2F9YCk7Zm9yKHZhciB2PWFyZ3VtZW50cy5sZW5ndGgsTT1uZXcgQXJyYXkodj4xP3YtMTowKSxEPTE7RDx2O0QrKylNW0QtMV09YXJndW1lbnRzW0RdO2Y9aFthXS5jYWxsKGgsLi4uTSksImRlc3Ry''@;'; put 'put ''b3kiPT09YSYmZC5yZW1vdmVEYXRhKCl9cmV0dXJuIGZ9KX0odnMpLHZzLl9fR2hvc3RUYWJsZT1zbmUsdnMuX2dldExpc3RlbmVyc0NvdW50ZXI9ZnVuY3Rpb24gaGl0KCl7cmV0dXJuIGhOfSx2cy5fZ2V0UmVnaXN0ZXJlZE1hcHNDb3VudGVyPWZ1bmN0aW9uIGFsdCgpe3JldHVybiBoUX0s''@;'; put 'put ''dnMuRXZlbnRNYW5hZ2VyPVZmO2NvbnN0IE1fdD1bSSxQLFosVyx3LFIsXyxLLFYscCx6LE9dLHhfdD1bRixOXTt2cy5oZWxwZXI9e30sdnMuZG9tPXt9LEtuKE1fdCxjPT57S24oT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYyksbD0+eyJfIiE9PWwuY2hhckF0KDApJiYodnMuaGVscGVy''@;'; put 'put ''W2xdPWNbbF0pfSl9KSxLbih4X3QsYz0+e0tuKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGMpLGw9PnsiXyIhPT1sLmNoYXJBdCgwKSYmKHZzLmRvbVtsXT1jW2xdKX0pfSksdnMuY2VsbFR5cGVzPW51bGwhPT0oS2llPXZzLmNlbGxUeXBlcykmJnZvaWQgMCE9PUtpZT9LaWU6e30sS24o''@;'; put 'put ''dmN0KCksYz0+e3ZzLmNlbGxUeXBlc1tjXT1kdGUoYyl9KSx2cy5jZWxsVHlwZXMucmVnaXN0ZXJDZWxsVHlwZT1XZix2cy5jZWxsVHlwZXMuZ2V0Q2VsbFR5cGU9ZHRlLHZzLmVkaXRvcnM9bnVsbCE9PShYaWU9dnMuZWRpdG9ycykmJnZvaWQgMCE9PVhpZT9YaWU6e30sS24oYWl0KCksYz0+''@;'; put 'put ''e3ZzLmVkaXRvcnNbYCR7VjEoYyl9RWRpdG9yYF09ZE4oYyl9KSx2cy5lZGl0b3JzLnJlZ2lzdGVyRWRpdG9yPXloLHZzLmVkaXRvcnMuZ2V0RWRpdG9yPWROLHZzLnJlbmRlcmVycz1udWxsIT09KHFpZT12cy5yZW5kZXJlcnMpJiZ2b2lkIDAhPT1xaWU/cWllOnt9LEtuKExpdCgpLGM9Pntj''@;'; put 'put ''b25zdCBsPXBOKGMpOyJiYXNlIj09PWMmJih2cy5yZW5kZXJlcnMuY2VsbERlY29yYXRvcj1sKSx2cy5yZW5kZXJlcnNbYCR7VjEoYyl9UmVuZGVyZXJgXT1sfSksdnMucmVuZGVyZXJzLnJlZ2lzdGVyUmVuZGVyZXI9QTIsdnMucmVuZGVyZXJzLmdldFJlbmRlcmVyPXBOLHZzLnZhbGlkYXRv''@;'; put 'put ''cnM9bnVsbCE9PShKaWU9dnMudmFsaWRhdG9ycykmJnZvaWQgMCE9PUppZT9KaWU6e30sS24oRml0KCksYz0+e3ZzLnZhbGlkYXRvcnNbYCR7VjEoYyl9VmFsaWRhdG9yYF09a0ooYyl9KSx2cy52YWxpZGF0b3JzLnJlZ2lzdGVyVmFsaWRhdG9yPW52LHZzLnZhbGlkYXRvcnMuZ2V0VmFsaWRh''@;'; put 'put ''dG9yPWtKLHZzLnBsdWdpbnM9bnVsbCE9PShRaWU9dnMucGx1Z2lucykmJnZvaWQgMCE9PVFpZT9RaWU6e30sS24oQUooKSxjPT57dnMucGx1Z2luc1tjXT1YQShjKX0pLHZzLnBsdWdpbnNbYCR7VjEoTXMuUExVR0lOX0tFWSl9UGx1Z2luYF09TXMsdnMucGx1Z2lucy5yZWdpc3RlclBsdWdp''@;'; put 'put ''bj1Tcyx2cy5wbHVnaW5zLmdldFBsdWdpbj1YQTtjb25zdCBmUz12cyxFX3Q9WyJpbnB1dFBsYWNlaG9sZGVyIl07ZnVuY3Rpb24gVF90KGMsbCl7fWNvbnN0IEFfdD1bImNvbnRhaW5lciJdO2xldCBrX3Q9KCgpPT57Y2xhc3MgY3t0b3A7bGVmdDtoZWlnaHQ7d2lkdGg7c2V0IGlzVmlzaWJs''@;'; put 'put ''ZShhKXt0aGlzLl9pc1Zpc2libGU9YX1zZXQgY29tcG9uZW50UmVmKGEpe2EmJnRoaXMuY29udGFpbmVyLmluc2VydChhLmhvc3RWaWV3KX1jb250YWluZXI7Z2V0IGRpc3BsYXkoKXtyZXR1cm4gdGhpcy5faXNWaXNpYmxlPyJibG9jayI6Im5vbmUifV9pc1Zpc2libGU9ITE7ZGV0YWNoRWRp''@;'; put 'put ''dG9yKCl7dGhpcy5jb250YWluZXIuZGV0YWNoKCl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1Y21wPWFyKHt0eXBlOmMsc2VsZWN0b3JzOltbIm5nLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQm''@;'; put 'put ''JlVhKEVfdCw3LGJlKSwyJmQpe2xldCBmO2dpKGY9bWkoKSkmJihoLmNvbnRhaW5lcj1mLmZpcnN0KX19LGlucHV0czp7dG9wOiJ0b3AiLGxlZnQ6ImxlZnQiLGhlaWdodDoiaGVpZ2h0Iix3aWR0aDoid2lkdGgiLGlzVmlzaWJsZToiaXNWaXNpYmxlIixjb21wb25lbnRSZWY6ImNvbXBvbmVu''@;'; put 'put ''dFJlZiJ9LHN0YW5kYWxvbmU6ITEsZGVjbHM6Myx2YXJzOjE0LGNvbnN0czpbWyJpbnB1dFBsYWNlaG9sZGVyIiwiIl0sWzEsImhhbmRzb250YWJsZUlucHV0SG9sZGVyIiwiaHRfY2xvbmVfbWFzdGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwxKSxndCgx''@;'; put 'put ''LFRfdCwwLDAsIm5nLXRlbXBsYXRlIixudWxsLDAseGMpLGhlKCkpLDImZCYmbWQoImRpc3BsYXkiLGguZGlzcGxheSkoIndpZHRoIixoLndpZHRoLCJweCIpKCJoZWlnaHQiLGguaGVpZ2h0LCJweCIpKCJtYXgtd2lkdGgiLGgud2lkdGgsInB4IikoIm1heC1oZWlnaHQiLGguaGVpZ2h0LCJw''@;'; put 'put ''eCIpKCJ0b3AiLGgudG9wLCJweCIpKCJsZWZ0IixoLmxlZnQsInB4Iil9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pfXJldHVybiBjfSkoKTtjbGFzcyBEX3QgZXh0ZW5kcyBmUy5lZGl0b3JzLkJhc2VFZGl0b3J7X2NvbXBvbmVudFJlZjtfZWRpdG9yUGxhY2VIb2xkZXJS''@;'; put 'put ''ZWY7X2lzUGxhY2Vob2xkZXJSZWFkeT0hMTtfZmluaXNoRWRpdFN1YnNjcmlwdGlvbjtfY2FuY2VsRWRpdFN1YnNjcmlwdGlvbjtjb25zdHJ1Y3RvcihsKXtzdXBlcihsKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclJvd1Jlc2l6ZSIsdGhpcy5vbkFmdGVyUm93UmVzaXplLmJpbmQodGhpcykp''@;'; put 'put ''LHRoaXMuaG90LmFkZEhvb2soImFmdGVyQ29sdW1uUmVzaXplIix0aGlzLm9uQWZ0ZXJDb2x1bW5SZXNpemUuYmluZCh0aGlzKSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJEZXN0cm95Iix0aGlzLm9uQWZ0ZXJEZXN0cm95LmJpbmQodGhpcykpfXByZXBhcmUobCxhLGQsaCxmLHYpe2lmKCF0''@;'; put 'put ''aGlzLmlzT3BlbmVkKCkpe3N1cGVyLnByZXBhcmUobCxhLGQsaCxmLHYpO2NvbnN0IE09dGhpcy5ob3QuZ2V0Q29sdW1uTWV0YShhKTt0aGlzLl9pc1BsYWNlaG9sZGVyUmVhZHl8fCh0aGlzLmNyZWF0ZUVkaXRvclBsYWNlaG9sZGVyKE0uX2Vudmlyb25tZW50SW5qZWN0b3IpLHRoaXMuX2lz''@;'; put 'put ''UGxhY2Vob2xkZXJSZWFkeT0hMCksdGhpcy5fY29tcG9uZW50UmVmPU0uX2VkaXRvckNvbXBvbmVudFJlZmVyZW5jZSx0aGlzLl9maW5pc2hFZGl0U3Vic2NyaXB0aW9uJiYodGhpcy5fZmluaXNoRWRpdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2ZpbmlzaEVkaXRTdWJzY3Jp''@;'; put 'put ''cHRpb249dm9pZCAwKSx0aGlzLl9jYW5jZWxFZGl0U3Vic2NyaXB0aW9uJiYodGhpcy5fY2FuY2VsRWRpdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2NhbmNlbEVkaXRTdWJzY3JpcHRpb249dm9pZCAwKSx0aGlzLl9maW5pc2hFZGl0U3Vic2NyaXB0aW9uPXRoaXMuX2NvbXBv''@;'; put 'put ''bmVudFJlZi5pbnN0YW5jZS5maW5pc2hFZGl0LnBpcGUoUDMoMSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuZmluaXNoRWRpdGluZygpfSksdGhpcy5fY2FuY2VsRWRpdFN1YnNjcmlwdGlvbj10aGlzLl9jb21wb25lbnRSZWYuaW5zdGFuY2UuY2FuY2VsRWRpdC5waXBlKFAzKDEpKS5zdWJzY3Jp''@;'; put 'put ''YmUoKCk9Pnt0aGlzLmNhbmNlbENoYW5nZXMoKX0pfX1jbG9zZSgpe3RoaXMuaXNPcGVuZWQoKSYmKHRoaXMucmVzZXRFZGl0b3JTdGF0ZSgpLHRoaXMuX2VkaXRvclBsYWNlSG9sZGVyUmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSx0aGlzLl9lZGl0b3JQbGFjZUhvbGRl''@;'; put 'put ''clJlZi5pbnN0YW5jZS5kZXRhY2hFZGl0b3IoKSx0aGlzLl9jb21wb25lbnRSZWYuaW5zdGFuY2Uub25DbG9zZSgpKX1mb2N1cygpe3RoaXMuX2NvbXBvbmVudFJlZi5pbnN0YW5jZS5vbkZvY3VzKCl9Z2V0VmFsdWUoKXtyZXR1cm4gdGhpcy5fY29tcG9uZW50UmVmLmluc3RhbmNlPy5nZXRW''@;'; put 'put ''YWx1ZSgpfW9wZW4obCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuc2V0QWN0aXZlQ29udGV4dE5hbWUoImVkaXRvciIpLHRoaXMuYXBwbHlQcm9wc1RvRWRpdG9yKCksdGhpcy5fY29tcG9uZW50UmVmLmluc3RhbmNlLm9uT3BlbihsKX1zZXRWYWx1ZShsKXt0aGlzLl9jb21wb25l''@;'; put 'put ''bnRSZWYuaW5zdGFuY2U/LnNldFZhbHVlKGwpLHRoaXMuX2NvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCl9YXBwbHlQcm9wc1RvRWRpdG9yKCl7Y29uc3QgbD10aGlzLmdldEVkaXRlZENlbGxSZWN0KCk7dGhpcy5pc0luRnVsbEVkaXRNb2RlKCl8fHRoaXMu''@;'; put 'put ''X2NvbXBvbmVudFJlZi5pbnN0YW5jZS5zZXRWYWx1ZShudWxsKSx0aGlzLl9jb21wb25lbnRSZWYuc2V0SW5wdXQoIm9yaWdpbmFsVmFsdWUiLHRoaXMub3JpZ2luYWxWYWx1ZSksdGhpcy5fY29tcG9uZW50UmVmLnNldElucHV0KCJyb3ciLHRoaXMucm93KSx0aGlzLl9jb21wb25lbnRSZWYu''@;'; put 'put ''c2V0SW5wdXQoImNvbHVtbiIsdGhpcy5jb2wpLHRoaXMuX2NvbXBvbmVudFJlZi5zZXRJbnB1dCgicHJvcCIsdGhpcy5wcm9wKSx0aGlzLl9jb21wb25lbnRSZWYuc2V0SW5wdXQoImNlbGxQcm9wZXJ0aWVzIix0aGlzLmNlbGxQcm9wZXJ0aWVzKSx0aGlzLl9lZGl0b3JQbGFjZUhvbGRlclJl''@;'; put 'put ''Zi5zZXRJbnB1dCgidG9wIixsLnRvcCksdGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuc2V0SW5wdXQoImxlZnQiLGwuc3RhcnQpLHRoaXMuX2VkaXRvclBsYWNlSG9sZGVyUmVmLnNldElucHV0KCJoZWlnaHQiLGwuaGVpZ2h0KSx0aGlzLl9lZGl0b3JQbGFjZUhvbGRlclJlZi5zZXRJbnB1''@;'; put 'put ''dCgid2lkdGgiLGwud2lkdGgpLHRoaXMuX2VkaXRvclBsYWNlSG9sZGVyUmVmLnNldElucHV0KCJpc1Zpc2libGUiLCEwKSx0aGlzLl9lZGl0b3JQbGFjZUhvbGRlclJlZi5zZXRJbnB1dCgiY29tcG9uZW50UmVmIix0aGlzLl9jb21wb25lbnRSZWYpLHRoaXMuX2VkaXRvclBsYWNlSG9sZGVy''@;'; put 'put ''UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKX1jcmVhdGVFZGl0b3JQbGFjZWhvbGRlcihsKXt0aGlzLl9lZGl0b3JQbGFjZUhvbGRlclJlZj1DUChrX3Qse2Vudmlyb25tZW50SW5qZWN0b3I6bH0pLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2Vk''@;'; put 'put ''aXRvclBsYWNlSG9sZGVyUmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpfW9uQWZ0ZXJDb2x1bW5SZXNpemUoKXt0aGlzLmlzT3BlbmVkKCkmJnRoaXMuYXBwbHlQcm9wc1RvRWRpdG9yKCl9b25BZnRlclJvd1Jlc2l6ZSgpe3RoaXMuaXNPcGVuZWQoKSYmdGhpcy5hcHBseVByb3BzVG9FZGl0''@;'; put 'put ''b3IoKX1vbkFmdGVyRGVzdHJveSgpe3RoaXMuX2VkaXRvclBsYWNlSG9sZGVyUmVmPy5kZXN0cm95KCl9cmVzZXRFZGl0b3JTdGF0ZSgpe3RoaXMuX2VkaXRvclBsYWNlSG9sZGVyUmVmLnNldElucHV0KCJ0b3AiLHZvaWQgMCksdGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuc2V0SW5wdXQo''@;'; put 'put ''ImxlZnQiLHZvaWQgMCksdGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuc2V0SW5wdXQoImhlaWdodCIsdm9pZCAwKSx0aGlzLl9lZGl0b3JQbGFjZUhvbGRlclJlZi5zZXRJbnB1dCgid2lkdGgiLHZvaWQgMCksdGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuc2V0SW5wdXQoImlzVmlzaWJs''@;'; put 'put ''ZSIsITEpLHRoaXMuX2VkaXRvclBsYWNlSG9sZGVyUmVmLnNldElucHV0KCJjb21wb25lbnRSZWYiLHZvaWQgMCl9fWNsYXNzIE5qe3N0YXRpYyBSRU5ERVJFUl9NQVJLRVI9U3ltYm9sKCJIb3RDZWxsUmVuZGVyZXJDb21wb25lbnQiKTt2YWx1ZT0iIjtpbnN0YW5jZTt0ZDtyb3c7Y29sO3By''@;'; put 'put ''b3A7Y2VsbFByb3BlcnRpZXM7Z2V0UHJvcHMoKXtyZXR1cm4gdGhpcy5jZWxsUHJvcGVydGllcz8ucmVuZGVyZXJQcm9wcz8/e319c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fE5qKX07c3RhdGljIFx1MDI3NWNtcD1hcih7dHlwZTpOaixzZWxlY3RvcnM6W1si''@;'; put 'put ''aG90LWNlbGwtcmVuZGVyZXIiXV0saW5wdXRzOnt2YWx1ZToidmFsdWUiLGluc3RhbmNlOiJpbnN0YW5jZSIsdGQ6InRkIixyb3c6InJvdyIsY29sOiJjb2wiLHByb3A6InByb3AiLGNlbGxQcm9wZXJ0aWVzOiJjZWxsUHJvcGVydGllcyJ9LHN0YW5kYWxvbmU6ITEsZGVjbHM6MCx2YXJzOjAs''@;'; put 'put ''dGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXt9LGVuY2Fwc3VsYXRpb246Mn0pfWZ1bmN0aW9uIHl5ZShjKXtyZXR1cm4gYz8uUkVOREVSRVJfTUFSS0VSPT09TmouUkVOREVSRVJfTUFSS0VSfWxldCBMX3Q9KCgpPT57Y2xhc3MgY3thcHBSZWY7ZW52aXJvbm1lbnRJbmplY3Rvcjtjb25zdHJ1Y3Rv''@;'; put 'put ''cihhLGQpe3RoaXMuYXBwUmVmPWEsdGhpcy5lbnZpcm9ubWVudEluamVjdG9yPWR9Y3JlYXRlUmVuZGVyZXJGcm9tQ29tcG9uZW50KGEsZD17fSxoPSExKXtyZXR1cm4oZix2LE0sRCxVLHRlLG9lKT0+e2NvbnN0IHZlPXt2YWx1ZTp0ZSxpbnN0YW5jZTpmLHRkOnYscm93Ok0sY29sOkQscHJv''@;'; put 'put ''cDpVLGNlbGxQcm9wZXJ0aWVzOm9lfTtpZihkJiZPYmplY3QuYXNzaWduKG9lLHtyZW5kZXJlclByb3BzOmR9KSxmUy5yZW5kZXJlcnMuQmFzZVJlbmRlcmVyLmFwcGx5KHRoaXMsW2YsdixNLEQsVSx0ZSxvZV0pLHYuaW5uZXJIVE1MPSIiLGZ1bmN0aW9uIFJfdChjKXtyZXR1cm4gYyYmImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIGMuY3JlYXRlRW1iZWRkZWRWaWV3fShhKSl0aGlzLmF0dGFjaFRlbXBsYXRlVG9FbGVtZW50KGEsdix2ZSk7ZWxzZSBpZih5eWUoYSkpe2NvbnN0IEZlPXRoaXMuY3JlYXRlQ29tcG9uZW50KGEsdmUpO3RoaXMuYXR0YWNoQ29tcG9uZW50VG9FbGVtZW50KEZlLHYp''@;'; put 'put ''fWVsc2UgY29uc29sZS53YXJuKCJUaGUgcHJvdmlkZWQgcmVuZGVyZXIgY29tcG9uZW50IHdhcyBub3QgcmVjb2duaXplZCBhcyBhIHZhbGlkIGN1c3RvbSByZW5kZXJlci4gSXQgbXVzdCBlaXRoZXIgZXh0ZW5kIEhvdENlbGxSZW5kZXJlckNvbXBvbmVudCBvciBiZSBhIHZhbGlkIFRlbXBs''@;'; put 'put ''YXRlUmVmLiBQbGVhc2UgZW5zdXJlIHRoYXQgeW91ciBjdXN0b20gcmVuZGVyZXIgaXMgaW1wbGVtZW50ZWQgY29ycmVjdGx5IGFuZCBpbXBvcnRlZCBmcm9tIHRoZSBwcm9wZXIgc291cmNlLiIpO3JldHVybiBoJiZ5eWUoYSkmJmZTLnJlbmRlcmVycy5yZWdpc3RlclJlbmRlcmVyKGEuY29u''@;'; put 'put ''c3RydWN0b3IubmFtZSxhKSx2fX1hdHRhY2hUZW1wbGF0ZVRvRWxlbWVudChhLGQsaCl7Y29uc3QgZj1hLmNyZWF0ZUVtYmVkZGVkVmlldyh7JGltcGxpY2l0OmgudmFsdWUsLi4uaH0pO2YuZGV0ZWN0Q2hhbmdlcygpLGYucm9vdE5vZGVzLmZvckVhY2godj0+e2QuYXBwZW5kQ2hpbGQodil9''@;'; put 'put ''KX1jcmVhdGVDb21wb25lbnQoYSxkKXtjb25zdCBoPUNQKGEse2Vudmlyb25tZW50SW5qZWN0b3I6dGhpcy5lbnZpcm9ubWVudEluamVjdG9yfSk7cmV0dXJuIE9iamVjdC5rZXlzKGQpLmZvckVhY2goZj0+e2QuaGFzT3duUHJvcGVydHkoZik/aC5zZXRJbnB1dChmLGRbZl0pOmNvbnNvbGUu''@;'; put 'put ''d2FybihgSW5wdXQgcHJvcGVydHkgIiR7Zn0iIGRvZXMgbm90IGV4aXN0IG9uIGNvbXBvbmVudCBpbnN0YW5jZTogJHthPy5uYW1lfS5gKX0pLGguY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuYXBwUmVmLmF0dGFjaFZpZXcoaC5ob3N0VmlldyksaH1hdHRhY2hDb21w''@;'; put 'put ''b25lbnRUb0VsZW1lbnQoYSxkKXtkLmFwcGVuZENoaWxkKGEuaG9zdFZpZXcucm9vdE5vZGVzWzBdKX1kZXN0cm95Q29tcG9uZW50KGEpe3RoaXMuYXBwUmVmLmRldGFjaFZpZXcoYS5ob3N0VmlldyksYS5kZXN0cm95KCl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3''@;'; put 'put ''KGR8fGMpKEhyKGdkKSxIcihxbCkpfTtzdGF0aWMgXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpO2NvbnN0IE9fdD1PYmplY3Qua2V5cyh2cy5EZWZhdWx0U2V0dGluZ3MpLGJ5ZT12cy5ob29rcy5nZXRS''@;'; put 'put ''ZWdpc3RlcmVkKCk7bGV0IF95ZT0oKCk9PntjbGFzcyBje2R5bmFtaWNDb21wb25lbnRTZXJ2aWNlO2Vudmlyb25tZW50SW5qZWN0b3I7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlPWEsdGhpcy5lbnZpcm9ubWVudEluamVjdG9yPWR9YXBwbHlDdXN0b21T''@;'; put 'put ''ZXR0aW5ncyhhLGQpe2NvbnN0IGg9YTtyZXR1cm4gdGhpcy51cGRhdGVDb2x1bW5SZW5kZXJlckZvckdpdmVuQ3VzdG9tUmVuZGVyZXIoaCksdGhpcy51cGRhdGVDb2x1bW5FZGl0b3JGb3JHaXZlbkN1c3RvbUVkaXRvcihoKSx0aGlzLnVwZGF0ZUNvbHVtblZhbGlkYXRvckZvckdpdmVuQ3Vz''@;'; put 'put ''dG9tVmFsaWRhdG9yKGgpLHRoaXMud3JhcEhvb2tzSW5OZ1pvbmUoaCxkKSxoPz97fX13cmFwSG9va3NJbk5nWm9uZShhLGQpe2J5ZS5jb25jYXQoT190KS5mb3JFYWNoKGY9Pntjb25zdCB2PWJ5ZS5pbmRleE9mKGYpPi0xO2xldCBNO3YmJihNPWFbZl0pLHZvaWQgMCE9PU0mJihhW2ZdPWQm''@;'; put 'put ''JiJmdW5jdGlvbiI9PXR5cGVvZiBNJiZ2P2Z1bmN0aW9uKC4uLkQpe3JldHVybiBkLnJ1bigoKT0+TS5hcHBseSh0aGlzLEQpKX06TSl9KX11cGRhdGVDb2x1bW5SZW5kZXJlckZvckdpdmVuQ3VzdG9tUmVuZGVyZXIoYSl7QXJyYXkuaXNBcnJheShhPy5jb2x1bW5zKSYmYT8uY29sdW1ucz8u''@;'; put 'put ''ZmlsdGVyKGQ9PnRoaXMuaXNSZW5kZXJlckNvbXBvbmVudFJlZlR5cGUoZC5yZW5kZXJlcil8fHRoaXMuaXNUZW1wbGF0ZVJlZihkLnJlbmRlcmVyKSk/LmZvckVhY2goZD0+e2NvbnN0IGg9KHRoaXMuaXNUZW1wbGF0ZVJlZihkLnJlbmRlcmVyKSxkLnJlbmRlcmVyKTtkLnJlbmRlcmVyPXRo''@;'; put 'put ''aXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UuY3JlYXRlUmVuZGVyZXJGcm9tQ29tcG9uZW50KGgsZC5yZW5kZXJlclByb3BzPz97fSl9KX11cGRhdGVDb2x1bW5FZGl0b3JGb3JHaXZlbkN1c3RvbUVkaXRvcihhKXtBcnJheS5pc0FycmF5KGE/LmNvbHVtbnMpJiZhPy5jb2x1bW5zPy5maWx0''@;'; put 'put ''ZXIoZD0+dGhpcy5pc0VkaXRvckNvbXBvbmVudFJlZlR5cGUoZC5lZGl0b3IpKT8uZm9yRWFjaChkPT57ZC5fZWRpdG9yQ29tcG9uZW50UmVmZXJlbmNlPUNQKGQuZWRpdG9yLHtlbnZpcm9ubWVudEluamVjdG9yOnRoaXMuZW52aXJvbm1lbnRJbmplY3Rvcn0pLGQuX2Vudmlyb25tZW50SW5q''@;'; put 'put ''ZWN0b3I9dGhpcy5lbnZpcm9ubWVudEluamVjdG9yLGQuZWRpdG9yPURfdH0pfXVwZGF0ZUNvbHVtblZhbGlkYXRvckZvckdpdmVuQ3VzdG9tVmFsaWRhdG9yKGEpe0FycmF5LmlzQXJyYXkoYT8uY29sdW1ucykmJmE/LmNvbHVtbnM/LmZpbHRlcihkPT50aGlzLmlzQ3VzdG9tVmFsaWRhdG9y''@;'; put 'put ''Rm4oZC52YWxpZGF0b3IpKT8uZm9yRWFjaChkPT57Y29uc3QgaD1kLnZhbGlkYXRvcjtkLnZhbGlkYXRvcj0oZix2KT0+e3YoaChmKSl9fSl9aXNDdXN0b21WYWxpZGF0b3JGbihhKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYSYmMT09PWEubGVuZ3RofWlzRWRpdG9yQ29tcG9uZW50UmVm''@;'; put 'put ''VHlwZShhKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYSYmISFhPy5cdTAyNzVjbXB9aXNSZW5kZXJlckNvbXBvbmVudFJlZlR5cGUoYSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGEmJiEhYT8uXHUwMjc1Y21wfWlzVGVtcGxhdGVSZWYoYSl7cmV0dXJuIGEmJiJmdW5jdGlvbiI9PXR5''@;'; put 'put ''cGVvZiBhLmNyZWF0ZUVtYmVkZGVkVmlld31zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoSHIoTF90KSxIcihxbCkpfTtzdGF0aWMgXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9cmV0dXJuIGN9KSgpO2NvbnN0IEZfdD1u''@;'; put 'put ''ZXcgam4oIkhPVF9HTE9CQUxfQ09ORklHIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+KHt9KX0pO2xldCBIX3Q9KCgpPT57Y2xhc3MgY3tkZWZhdWx0Q29uZmlnPXtsaWNlbnNlOnZvaWQgMCx0aGVtZU5hbWU6IiJ9O2NvbmZpZ1N1YmplY3Q9bmV3IE1pKHRoaXMuZGVmYXVsdENv''@;'; put 'put ''bmZpZyk7Z2V0IGNvbmZpZyQoKXtyZXR1cm4gdGhpcy5jb25maWdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpfWNvbnN0cnVjdG9yKGEpe3RoaXMuZGVmYXVsdENvbmZpZz17Li4udGhpcy5kZWZhdWx0Q29uZmlnLC4uLmF9LHRoaXMuY29uZmlnU3ViamVjdC5uZXh0KHRoaXMuZGVmYXVsdENvbmZp''@;'; put 'put ''Zyl9c2V0Q29uZmlnKGEpe3RoaXMuY29uZmlnU3ViamVjdC5uZXh0KHsuLi50aGlzLmRlZmF1bHRDb25maWcsLi4uYX0pfWdldENvbmZpZygpe3JldHVybiB0aGlzLmNvbmZpZ1N1YmplY3QudmFsdWV9cmVzZXRDb25maWcoKXt0aGlzLmNvbmZpZ1N1YmplY3QubmV4dCh7Li4udGhpcy5kZWZh''@;'; put 'put ''dWx0Q29uZmlnfSl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEhyKEZfdCkpfTtzdGF0aWMgXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpLEc1PSgoKT0+e2NsYXNz''@;'; put 'put ''IGN7X2hvdFNldHRpbmdzUmVzb2x2ZXI7X2hvdENvbmZpZztuZ1pvbmU7ZGF0YT1udWxsO3NldHRpbmdzPXt9O2NvbnRhaW5lcjtfX2hvdEluc3RhbmNlPW51bGw7Y29uZmlnU3Vic2NyaXB0aW9uO2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9ob3RTZXR0aW5nc1Jlc29sdmVyPWEsdGhpcy5f''@;'; put 'put ''aG90Q29uZmlnPWQsdGhpcy5uZ1pvbmU9aH1nZXQgaG90SW5zdGFuY2UoKXtyZXR1cm4hdGhpcy5fX2hvdEluc3RhbmNlfHx0aGlzLl9faG90SW5zdGFuY2UmJiF0aGlzLl9faG90SW5zdGFuY2UuaXNEZXN0cm95ZWQ/dGhpcy5fX2hvdEluc3RhbmNlOihjb25zb2xlLndhcm4oIlRoZSBIYW5k''@;'; put 'put ''c29udGFibGUgaW5zdGFuY2UgYm91bmQgdG8gdGhpcyBjb21wb25lbnQgd2FzIGRlc3Ryb3llZCBhbmQgY2Fubm90IGJlIHVzZWQgcHJvcGVybHkuIiksbnVsbCl9c2V0IGhvdEluc3RhbmNlKGEpe3RoaXMuX19ob3RJbnN0YW5jZT1hfW5nQWZ0ZXJWaWV3SW5pdCgpe2xldCBhPXRoaXMuX2hv''@;'; put 'put ''dFNldHRpbmdzUmVzb2x2ZXIuYXBwbHlDdXN0b21TZXR0aW5ncyh0aGlzLnNldHRpbmdzLHRoaXMubmdab25lKTtjb25zdCBkPXRoaXMuZ2V0TmVnb3RpYXRlZFNldHRpbmdzKGEpO2E9ey4uLmEsLi4uZCxkYXRhOnRoaXMuZGF0YX0sdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9''@;'; put 'put ''Pnt0aGlzLmhvdEluc3RhbmNlPW5ldyB2cy5Db3JlKHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsYSksdGhpcy5ob3RJbnN0YW5jZS5pbml0KCl9KSx0aGlzLmNvbmZpZ1N1YnNjcmlwdGlvbj10aGlzLl9ob3RDb25maWcuY29uZmlnJC5zdWJzY3JpYmUoaD0+e2lmKHRoaXMuaG90SW5z''@;'; put 'put ''dGFuY2Upe2NvbnN0IGY9dGhpcy5nZXROZWdvdGlhdGVkU2V0dGluZ3ModGhpcy5zZXR0aW5ncyk7dGhpcy51cGRhdGVIb3RUYWJsZShmKX19KX1uZ09uQ2hhbmdlcyhhKXtpZihudWxsIT09dGhpcy5ob3RJbnN0YW5jZSl7aWYoYS5zZXR0aW5ncyYmIWEuc2V0dGluZ3MuZmlyc3RDaGFuZ2Up''@;'; put 'put ''e2NvbnN0IGQ9dGhpcy5faG90U2V0dGluZ3NSZXNvbHZlci5hcHBseUN1c3RvbVNldHRpbmdzKGEuc2V0dGluZ3MuY3VycmVudFZhbHVlLHRoaXMubmdab25lKTt0aGlzLnVwZGF0ZUhvdFRhYmxlKGQpfWEuZGF0YSYmIWEuZGF0YS5maXJzdENoYW5nZSYmdGhpcy5ob3RJbnN0YW5jZT8udXBk''@;'; put 'put ''YXRlRGF0YShhLmRhdGEuY3VycmVudFZhbHVlKX19bmdPbkRlc3Ryb3koKXt0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2lmKCF0aGlzLmhvdEluc3RhbmNlKXJldHVybjtjb25zdCBhPXRoaXMuaG90SW5zdGFuY2UuZ2V0U2V0dGluZ3MoKS5jb2x1bW5zO2EmJkFycmF5Lmlz''@;'; put 'put ''QXJyYXkoYSkmJmEuZm9yRWFjaChkPT57ZC5fZWRpdG9yQ29tcG9uZW50UmVmZXJlbmNlJiZkLl9lZGl0b3JDb21wb25lbnRSZWZlcmVuY2UuZGVzdHJveSgpfSksdGhpcy5ob3RJbnN0YW5jZS5kZXN0cm95KCl9KSx0aGlzLmNvbmZpZ1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXVwZGF0''@;'; put 'put ''ZUhvdFRhYmxlKGEpe3RoaXMuaG90SW5zdGFuY2UmJnRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5ob3RJbnN0YW5jZT8udXBkYXRlU2V0dGluZ3MoYSwhMSl9KX1nZXROZWdvdGlhdGVkU2V0dGluZ3MoYSl7Y29uc3QgZD10aGlzLl9ob3RDb25maWcuZ2V0Q29uZmln''@;'; put 'put ''KCksaD17fTtyZXR1cm4gaC5saWNlbnNlS2V5PWEubGljZW5zZUtleT8/ZC5saWNlbnNlLGgudGhlbWVOYW1lPWEudGhlbWVOYW1lPz9kLnRoZW1lTmFtZSxoLmxhbmd1YWdlPWEubGFuZ3VhZ2U/P2QubGFuZ3VhZ2UsdGhpcy5fX2hvdEluc3RhbmNlfHwoaC5sYXlvdXREaXJlY3Rpb249YS5s''@;'; put 'put ''YXlvdXREaXJlY3Rpb24/P2QubGF5b3V0RGlyZWN0aW9uKSxofXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShfeWUpLHFlKEhfdCkscWUoWGEpKX07c3RhdGljIFx1MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9yczpbWyJob3QtdGFibGUiXV0sdmll''@;'; put 'put ''d1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiZVYShBX3QsNSksMiZkKXtsZXQgZjtnaShmPW1pKCkpJiYoaC5jb250YWluZXI9Zi5maXJzdCl9fSxpbnB1dHM6e2RhdGE6ImRhdGEiLHNldHRpbmdzOiJzZXR0aW5ncyJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hhKFtfeWVdKSxXb10s''@;'; put 'put ''ZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbImNvbnRhaW5lciIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmR3QoMCwiZGl2IixudWxsLDApfSxzdHlsZXM6WyI6aG9zdHtkaXNwbGF5OmJsb2NrfVxuIl0sZW5jYXBzdWxhdGlvbjoyfSl9cmV0dXJuIGN9KSgpLGZ5PSgoKT0+e2Ns''@;'; put 'put ''YXNzIGN7c3RhdGljIHZlcnNpb249IjE2LjAuMSI7Y29uc3RydWN0b3IoKXt9c3RhdGljIGZvclJvb3QoKXtyZXR1cm57bmdNb2R1bGU6Y319c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1bW9kPUVpKHt0eXBlOmN9KTtzdGF0aWMg''@;'; put 'put ''XHUwMjc1aW5qPXlpKHt9KX1yZXR1cm4gY30pKCksbjM9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPUVpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9eWkoe2ltcG9y''@;'; put 'put ''dHM6W05hXX0pfX1yZXR1cm4gY30pKCkscFM9KCgpPT57Y2xhc3MgY3tuZ09uSW5pdCgpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPUVpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9eWko''@;'; put 'put ''e3Byb3ZpZGVyczpbSCQsSXBlXSxpbXBvcnRzOltOYSxVYyxldSx1MSxuM119KX19cmV0dXJuIGN9KSgpLEdEPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1FaSh7dHlwZTpjfSl9''@;'; put 'put ''c3RhdGlje3RoaXMuXHUwMjc1aW5qPXlpKHtpbXBvcnRzOltOYV19KX19cmV0dXJuIGN9KSgpLHd5ZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9RWkoe3R5cGU6Y30pfXN0YXRp''@;'; put 'put ''Y3t0aGlzLlx1MDI3NWluaj15aSh7aW1wb3J0czpbTmEsdTEsTmEsVWNdfSl9fXJldHVybiBjfSkoKSxweT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9RWkoe3R5cGU6Y30pfXN0''@;'; put 'put ''YXRpY3t0aGlzLlx1MDI3NWluaj15aSh7aW1wb3J0czpbTmEsVWMsdTEsZXUscFMsR0QsbjMsd3llXX0pfX1yZXR1cm4gY30pKCk7Y2xhc3MgZWFle2NvbnN0cnVjdG9yKCl7dGhpcy5xdWV1ZT1bXX1hZGRUb1F1ZXVlKGwpe3RoaXMucXVldWUucHVzaCguLi5sKX19Y29uc3QgdGFlPShjLGws''@;'; put 'put ''YSk9Pntmb3IobGV0IGQgb2YgYyl7Y29uc3QgaD1sLmZpbmQodj0+di5kYXRhPT09ZC5OQU1FKSxmPWEudmFyc1tkLk5BTUVdO2YmJihkLlRZUEU9WyJEQVRFIiwiREFURVRJTUUiLCJUSU1FIl0uaW5jbHVkZXMoZC5ERFRZUEUpPyJudW0iOmYudHlwZSksaCYmZC5ERVNDJiYoaC5kZXNjPWQu''@;'; put 'put ''REVTQyksaCYmZi5sZW5ndGgmJihoLmxlbmd0aD1wYXJzZUludChmLmxlbmd0aCkpLGgmJmQuQ0xTX1JVTEUmJihoLmNsc1J1bGU9ZC5DTFNfUlVMRSl9cmV0dXJuIGx9O2Z1bmN0aW9uIG5hZShjLGwpe2lmKG51bGw9PWN8fCFpc05hTihjKSYmaXNGaW5pdGUoYykpcmV0dXJuIGwmJmwoITAp''@;'; put 'put ''LCEwO2NvbnN0IGE9KDAsaDUuaXNTcGVjaWFsTWlzc2luZykoYyk7cmV0dXJuIGwmJmwoYSksYX1jb25zdCBDeWU9e0NBU0U6KGMsbCk9Pntzd2l0Y2gobCl7Y2FzZSJVUENBU0UiOnJldHVybiEhW3ZvaWQgMCxudWxsXS5pbmNsdWRlcyhjKXx8InN0cmluZyI9PXR5cGVvZiBjJiZjLnRvU3Ry''@;'; put 'put ''aW5nKCk9PT1jLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKTtjYXNlIkxPV0NBU0UiOnJldHVybiEhW3ZvaWQgMCxudWxsXS5pbmNsdWRlcyhjKXx8InN0cmluZyI9PXR5cGVvZiBjJiZjLnRvU3RyaW5nKCk9PT1jLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKX1yZXR1cm4hMH0sTUlOVkFMOihj''@;'; put 'put ''LGwpPT57Y29uc3QgYT1uYWUoYyksZD1wYXJzZUZsb2F0KGMpO3JldHVybighYXx8IWlzTmFOKGQpKSYmZD49TnVtYmVyKGwudG9TdHJpbmcoKSl9LE1BWFZBTDooYyxsKT0+e2NvbnN0IGE9bmFlKGMpLGQ9cGFyc2VGbG9hdChjKTtyZXR1cm4hKCFhfHwhaXNOYU4oZCkpfHxkPD1OdW1iZXIo''@;'; put 'put ''bC50b1N0cmluZygpKX0sTk9UTlVMTDooYyxsKT0+bnVsbCE9YyYmYy50b1N0cmluZygpLmxlbmd0aD4wfTt2YXIgcmFlPWIoNzgzNzUpO2NsYXNzIFVfdCBleHRlbmRzIGZTLmVkaXRvcnMuQXV0b2NvbXBsZXRlRWRpdG9ye2NvbnN0cnVjdG9yKGwpe3N1cGVyKGwpfWNyZWF0ZUVsZW1lbnRz''@;'; put 'put ''KCl7c3VwZXIuY3JlYXRlRWxlbWVudHMoKX1vcGVuKGwpe3N1cGVyLm9wZW4obCksdGhpcy5pc0NlbGxOdW1lcmljKCk/dGhpcy5odENvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJudW1lcmljTGlzdGJveCIpOnRoaXMuaHRDb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgibnVtZXJpY0xpc3Ri''@;'; put 'put ''b3giKX1pc0NlbGxOdW1lcmljKCl7cmV0dXJuIHRoaXMuY2VsbFByb3BlcnRpZXM/LmNsYXNzTmFtZT8uaW5jbHVkZXMoImh0TnVtZXJpYyIpfX1jbGFzcyBTeWV7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYpe3RoaXMucnVsZXM9W10sdGhpcy5kcXJ1bGVzPVtdLHRoaXMuZHFkYXRhPVtdLHRo''@;'; put 'put ''aXMuaGlkZGVuQ29sdW1ucz1bXSx0aGlzLnByaW1hcnlLZXlzPVtdLHRoaXMuZXhlY3V0ZUhvdFZhbGlkYXRvcj0oTSxELFUpPT57Y29uc3QgdGU9ey4uLk0sdmFsaWRhdG9yOnZvaWQgMCxjb3JyZWN0Rm9ybWF0OiExLHJvdzowLGNvbDowLGluc3RhbmNlOm5ldyBmUyhkb2N1bWVudC5jcmVh''@;'; put 'put ''dGVFbGVtZW50KCJkaXYiKSx7fSksdmlzdWFsUm93OjAsdmlzdWFsQ29sOjAscHJvcDowfTtudWxsPT1EJiYoRD0iIiksTSYmTS52YWxpZGF0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBNLnZhbGlkYXRvcj9NLnZhbGlkYXRvci5jYWxsKHRlLEQsb2U9PntVJiZVKG9lKX0pOlUmJlUoITEpfSx0''@;'; put 'put ''aGlzLnJlZ2lzdGVyQ3VzdG9tRWRpdG9ycygpLHRoaXMuc2FzcGFyYW1zPWwsdGhpcy5ob3RJbnN0YW5jZT12LHRoaXMucnVsZXM9KGM9Pnt0cnl7cmV0dXJuIEpTT04ucGFyc2UoYFske2N9XWApfWNhdGNoe3JldHVybltdfX0pKGwuQ09MVFlQRSksdGhpcy5ydWxlcz10YWUoZCx0aGlzLnJ1''@;'; put 'put ''bGVzLGEpLHRoaXMucnVsZXM9KGM9PntpZighcmFlW3dpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2VdKXJldHVybiBjO2ZvcihsZXQgYSBvZiBjKSJudW1lcmljIj09PWEudHlwZSYmKGEubnVtZXJpY0Zvcm1hdD17cGF0dGVybjoiMCwwIixjdWx0dXJlOndpbmRvdy5uYXZpZ2F0b3IubGFuZ3Vh''@;'; put 'put ''Z2V9KTtyZXR1cm4gY30pKHRoaXMucnVsZXMpLHRoaXMuZHFydWxlcz1oLHRoaXMuZHFkYXRhPWYsdGhpcy5wcmltYXJ5S2V5cz1sLlBLLnNwbGl0KCIgIiksdGhpcy51cGRhdGVEcURhdGEoKSx0aGlzLnNldHVwVmFsaWRhdGlvbnMoKX1yZWdpc3RlckN1c3RvbUVkaXRvcnMoKXtmUy5lZGl0''@;'; put 'put ''b3JzLnJlZ2lzdGVyRWRpdG9yKCJhdXRvY29tcGxldGUuY3VzdG9tIixVX3QpfWdldFJ1bGVzKCl7cmV0dXJuIHRoaXMucnVsZXN9Z2V0UnVsZShsKXtjb25zdCBhPXRoaXMuZ2V0UnVsZUluZGV4KGwpO3JldHVybiB0aGlzLnJ1bGVzW2FdfWdldEhpZGRlbkNvbHVtbnMoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5oaWRkZW5Db2x1bW5zfXVwZGF0ZVJ1bGUobCxhKXtsZXQgZD10aGlzLmdldFJ1bGVJbmRleChsKTt0aGlzLnJ1bGVzW2RdPXsuLi50aGlzLnJ1bGVzW2RdLC4uLmF9fXJlbW92ZVJ1bGUobCl7Y29uc3QgYT10aGlzLmdldFJ1bGVJbmRleChsKTt0aGlzLnJ1bGVzLnNwbGljZShhLDEpfWdl''@;'; put 'put ''dERxRGV0YWlscyhsKXtyZXR1cm4gbD90aGlzLmRxcnVsZXMuZmlsdGVyKGE9PmEuQkFTRV9DT0w9PT1sKTp0aGlzLmRxcnVsZXN9aXNEcUNvbChsKXtyZXR1cm4hIXRoaXMuZHFydWxlcy5maW5kKGE9PmEuQkFTRV9DT0w9PT1sKX1oYXNEcVJ1bGVzKGwsYSxkPSExKXtyZXR1cm4gZD90aGlz''@;'; put 'put ''LmRxcnVsZXMuZmlsdGVyKGg9PmguQkFTRV9DT0w9PT1sJiZhLmluY2x1ZGVzKGguUlVMRV9UWVBFKSkubGVuZ3RoPT09YS5sZW5ndGg6ISF0aGlzLmRxcnVsZXMuZmluZChoPT5oLkJBU0VfQ09MPT09bCYmYS5pbmNsdWRlcyhoLlJVTEVfVFlQRSkpfWdldERxRHJvcGRvd25Tb3VyY2UobCl7''@;'; put 'put ''bGV0IGE9W107cmV0dXJuIHRoaXMuZHFydWxlcy5mb3JFYWNoKGQ9PntkLkJBU0VfQ09MLnRvU3RyaW5nKCk9PT1sLmRhdGEmJmwuZGF0YS50b1N0cmluZygpJiZbIkhBUkRTRUxFQ1QiLCJTT0ZUU0VMRUNUIiwiSEFSRFNFTEVDVF9IT09LIiwiU09GVFNFTEVDVF9IT09LIl0uaW5jbHVkZXMo''@;'; put 'put ''ZC5SVUxFX1RZUEUudG9TdHJpbmcoKSkmJnRoaXMuZHFkYXRhLmZpbHRlcihoPT5oLkJBU0VfQ09MPT09ZC5CQVNFX0NPTCkuZm9yRWFjaChoPT57YS5wdXNoKGwudHlwZSYmIm51bWVyaWMiPT09bC50eXBlP051bWJlcihoLlJVTEVfREFUQSk6aC5SVUxFX0RBVEEpfSl9KSxhfXVwZGF0ZURx''@;'; put 'put ''RGF0YSgpe3RoaXMuZHFkYXRhLmxlbmd0aD4wJiYoKCk9Pntjb25zdCBsPVtdO3JldHVybiB0aGlzLmRxZGF0YS5mb3JFYWNoKGE9PntsLmluY2x1ZGVzKGEuQkFTRV9DT0wpfHxsLnB1c2goYS5CQVNFX0NPTCl9KSxsfSkoKS5mb3JFYWNoKGE9PntsZXQgZD0hMTt0aGlzLmRxcnVsZXMubGVu''@;'; put 'put ''Z3RoPjAmJnRoaXMuZHFydWxlcy5mb3JFYWNoKGg9PntoLkJBU0VfQ09MPT09YSYmKCJTT0ZUU0VMRUNUIj09PWguUlVMRV9UWVBFfHwiSEFSRFNFTEVDVCI9PT1oLlJVTEVfVFlQRSkmJihkPSEwKX0pLGR8fHRoaXMuZHFydWxlcy5wdXNoKHtCQVNFX0NPTDphLFJVTEVfVFlQRToiU09GVFNF''@;'; put 'put ''TEVDVCIsUlVMRV9WQUxVRTphLFg6MX0pfSl9c2V0dXBWYWxpZGF0aW9ucygpe2ZvcihsZXQgbD0wO2w8dGhpcy5ydWxlcy5sZW5ndGg7bCsrKXtjb25zdCBhPXRoaXMucnVsZXNbbF0uZGF0YXx8IiI7aWYoIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIhPT1hKXtpZih0aGlzLmlz''@;'; put 'put ''RHFDb2woYSkpe2xldCBoPXRoaXMuZ2V0RHFEcm9wZG93blNvdXJjZSh0aGlzLnJ1bGVzW2xdKTtoLmxlbmd0aD4wJiYodGhpcy5ydWxlc1tsXS5zb3VyY2U9aCx0aGlzLnJ1bGVzW2xdLnR5cGU9ImF1dG9jb21wbGV0ZSIsdGhpcy5ydWxlc1tsXS5lZGl0b3I9ImF1dG9jb21wbGV0ZS5jdXN0''@;'; put 'put ''b20iLHRoaXMucnVsZXNbbF0uZmlsdGVyPSExKSx0aGlzLmhhc0RxUnVsZXMoYSxbIlNPRlRTRUxFQ1QiXSkmJih0aGlzLnJ1bGVzW2xdLnN0cmljdD0hMSksdGhpcy5oYXNEcVJ1bGVzKGEsWyJIQVJEU0VMRUNUIl0pJiYodGhpcy5ydWxlc1tsXS5zdHJpY3Q9ITApLHRoaXMuaGFzRHFSdWxl''@;'; put 'put ''cyhhLFsiU09GVFNFTEVDVF9IT09LIl0pJiYodGhpcy5ydWxlc1tsXS5zdHJpY3Q9ITEpLHRoaXMuaGFzRHFSdWxlcyhhLFsiSEFSRFNFTEVDVF9IT09LIl0pJiYodGhpcy5ydWxlc1tsXS5zdHJpY3Q9ITApLHRoaXMuaGFzRHFSdWxlcyhhLFsiTk9UTlVMTCJdKSYmKHRoaXMucnVsZXNbbF0u''@;'; put 'put ''YWxsb3dFbXB0eT0hMSl9InRydWUiPT09dGhpcy5ydWxlc1tsXS5jb3JyZWN0Rm9ybWF0JiYodGhpcy5ydWxlc1tsXS5jb3JyZWN0Rm9ybWF0PSEwKSx0aGlzLnNldERlZmF1bHRWYWxpZGF0b3IodGhpcyxsKSx0aGlzLnNldENvbHVtbkxldmVsU2VjdXJpdHkobCl9fXRoaXMuc2FzcGFyYW1z''@;'; put 'put ''Py5DTFNfRkxBRyYmdGhpcy5oaWRkZW5Db2x1bW5zLnB1c2goMCl9c2V0RGVmYXVsdFZhbGlkYXRvcihsLGEpe3RoaXMucnVsZXNbYV0udmFsaWRhdG9yPWZ1bmN0aW9uKGQsaCl7Y29uc3QgZj1sLnJ1bGVzW2FdLmRhdGE/LnRvU3RyaW5nKCksdj1sLnJ1bGVzW2FdLnR5cGV8fCIiO2xldCBN''@;'; put 'put ''PW51bGw7cmV0dXJuImF1dG9jb21wbGV0ZSIhPT10aGlzLmVkaXRvciYmImF1dG9jb21wbGV0ZS5jdXN0b20iIT09dGhpcy5lZGl0b3J8fChsLmdldEhhbmRzb250YWJsZVZhbGlkYXRvcigiYXV0b2NvbXBsZXRlIikuY2FsbCh0aGlzLGQsRD0+e009RH0pLE0pPyhsLmdldEhhbmRzb250YWJs''@;'; put 'put ''ZVZhbGlkYXRvcih2KS5jYWxsKHRoaXMsZCxEPT57TT1EfSksTT9sLmxlbmd0aENoZWNrKGQsbC5ydWxlc1thXS5sZW5ndGgsdik/bC5pc0RxQ29sKGZ8fCIiKSYmISgoYyxsKT0+e2ZvcihsZXQgYSBvZiBjKWlmKEN5ZVthLlJVTEVfVFlQRV0mJiFDeWVbYS5SVUxFX1RZUEVdKGwsYS5SVUxF''@;'; put 'put ''X1ZBTFVFKSlyZXR1cm4gY29uc29sZS53YXJuKGBEUSBJbnZhbGlkIFJlYXNvbjogJHthLlJVTEVfVFlQRX1cblZhbHVlOiAke2x9KVxuUnVsZSBWYWx1ZTogJHthLlJVTEVfVkFMVUUubGVuZ3RoPjAmJiIgIiE9PWEuUlVMRV9WQUxVRT9hLlJVTEVfVkFMVUU6Ik5vdCBkZWZpbmVkIn1gKSwh''@;'; put 'put ''MTtyZXR1cm4hMH0pKGwuZ2V0RHFEZXRhaWxzKGZ8fCIiKSxkKT8oY29uc29sZS53YXJuKGBEUSBWYWxpZGF0aW9uIC0gaW52YWxpZCAoVmFsdWU6ICR7ZH0pYCksdm9pZCBoKCExKSk6dm9pZCBoKCEwKTooY29uc29sZS53YXJuKGBMZW5ndGggVmFsaWRhdGlvbiAtIGludmFsaWQgKFZhbHVl''@;'; put 'put ''OiAke2R9KWApLHZvaWQgaCghMSkpOihjb25zb2xlLndhcm4oYEhPVCBOYXRpdmUgVmFsaWRhdGlvbiAtIGludmFsaWQgKFZhbHVlOiAke2R9KWApLHZvaWQgaCghMSkpKTooY29uc29sZS53YXJuKGBIT1QgTmF0aXZlIFZhbGlkYXRpb24gKGF1dG9jb21wbGV0ZSkgLSBpbnZhbGlkIChWYWx1''@;'; put 'put ''ZTogJHtkfSlgKSx2b2lkIGgoITEpKX19bGVuZ3RoQ2hlY2sobCxhLGQpe2lmKCgwLGg1LmlzU3BlY2lhbE1pc3NpbmcpKGwpfHxudWxsPT1sfHxudWxsPT1hKXJldHVybiEwO2lmKCJudW1lcmljIj09PWQpe2lmKDg9PT1hKXJldHVybiEwO2lmKGE8M3x8YT44fHwhTnVtYmVyLmlzSW50ZWdl''@;'; put 'put ''cihhKSlyZXR1cm4gY29uc29sZS53YXJuKCJpbnZhbGlkIGxlbmd0aCBmcm9tIFNBUywgcnVsZSBsZW5ndGggY2FuIG9ubHkgYmUgYW4gaW50ZWdlciBiZXR3ZWVuIDMtOCIpLCExO2NvbnN0IGg9TnVtYmVyKGwpPT09bCYmbCUxIT0wO2lmKGE8OCYmaClyZXR1cm4gY29uc29sZS53YXJuKCJy''@;'; put 'put ''ZWR1Y2VkIGxlbmd0aCBudW1lcmljcyBjYW5ub3QgY29udGFpbiBkZWNpbWFscyBlbHNlIHByZWNpc2lvbiB3aWxsIGJlIGFmZmVjdGVkIiksITE7c3dpdGNoKGEpe2Nhc2UgMzpyZXR1cm4gbDw9ODE5MjtjYXNlIDQ6cmV0dXJuIGw8PTIwOTcxNTI7Y2FzZSA1OnJldHVybiBsPD01MzY4NzA5''@;'; put 'put ''MTI7Y2FzZSA2OnJldHVybiBsPD0xMzc0Mzg5NTM0NzI7Y2FzZSA3OnJldHVybiBsPD0zNTE4NDM3MjA4ODgzMn19cmV0dXJuIGwudG9TdHJpbmcoKS5sZW5ndGg8PWF9Z2V0SGFuZHNvbnRhYmxlVmFsaWRhdG9yKGwpe3N3aXRjaChsKXtjYXNlImF1dG9jb21wbGV0ZSI6cmV0dXJuIERrO2Nh''@;'; put 'put ''c2UibnVtZXJpYyI6cmV0dXJuIG5hZTtjYXNlImRhdGUiOnJldHVybiBDVjtjYXNlInRpbWUiOnJldHVybiBTVjtkZWZhdWx0OnJldHVybihhLGQpPT5kP2QoITApOm51bGx9fWdldFJ1bGVJbmRleChsKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGw/bDp0aGlzLnJ1bGVzLmZpbmRJbmRleChh''@;'; put 'put ''PT5hLmRhdGE9PT1sKX1zZXRDb2x1bW5MZXZlbFNlY3VyaXR5KGwpe2lmKCF0aGlzLnNhc3BhcmFtcz8uQ0xTX0ZMQUcpcmV0dXJuO2NvbnN0IGE9dGhpcy5ydWxlc1tsXTtpZih0aGlzLnByaW1hcnlLZXlzLmluY2x1ZGVzKGEuZGF0YSkmJihhLmNsc1J1bGU9IlJFQUQiKSwiSElERSI9PT1h''@;'; put 'put ''LmNsc1J1bGUmJnRoaXMuaGlkZGVuQ29sdW1ucy5wdXNoKGwpLCJSRUFEIj09PWEuY2xzUnVsZSYmKGEucmVhZE9ubHk9ITApLCJFRElUIj09PWEuY2xzUnVsZSl7YS5yZWFkT25seT0hMTtjb25zdCBkPXRoaXMuaGlkZGVuQ29sdW1ucy5pbmRleE9mKGwpO3RoaXMuaGlkZGVuQ29sdW1ucy5z''@;'; put 'put ''cGxpY2UoZCwxKX19fWNvbnN0IFZqPXtudW1lcmljOiIiLGRlZmF1bHQ6IiJ9LFpfdD0oYyxsKT0+Yz8iYXV0b2NvbXBsZXRlIj09PWM/bCYmbC5zb3VyY2U/bC5zb3VyY2VbMF06W106VmouaGFzT3duUHJvcGVydHkoYyk/VmpbY106VmouZGVmYXVsdDpWai5kZWZhdWx0LGlhZT1jPT5uZXcg''@;'; put 'put ''RGF0ZShNYXRoLnJvdW5kKDg2NDAwKihjLTI1NTY5KSoxZTMpKSxZX3Q9KGMsbCxhLGQsaCxmLHYpPT4ob2FlKGwpLGwuaW5uZXJIVE1MPWAke2Y/Zi50b1N0cmluZygpOiIifSA8Y2RzLWljb24gc2hhcGU9ImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIiBzdGF0dXM9Indhcm5pbmciPjwvY2RzLWlj''@;'; put 'put ''b24+YCxsKSxhYWU9KGMsbCxhLGQsaCxmLHYpPT4ob2FlKGwpLGwuaW5uZXJIVE1MPWZ8fCIiLGwpLEdfdD0oYyxsLGEsZCxoLGYsdik9PihvYWUobCksbC5pbm5lckhUTUw9YCR7Zj9mLnRvU3RyaW5nKCk6IiJ9IDxzcGFuIGNsYXNzPSJzcGlubmVyIHNwaW5uZXItc20gdmVydGljYWwtYWxp''@;'; put 'put ''Z24tbWlkZGxlIj48L3NwYW4+YCxsKSxvYWU9Yz0+e2MuY2xhc3NMaXN0LmNvbnRhaW5zKCJodERhcmsiKXx8Yy5jbGFzc0xpc3QuYWRkKCJodERhcmsiKX0sTXllPWM9PntsZXQgbD0oIjAiK2MuZ2V0VVRDSG91cnMoKSkuc2xpY2UoLTIpKyI6IjtyZXR1cm4gbD1sKygiMCIrYy5nZXRVVENN''@;'; put 'put ''aW51dGVzKCkpLnNsaWNlKC0yKSsiOiIsbCs9KCIwIitjLmdldFVUQ1NlY29uZHMoKSkuc2xpY2UoLTIpLGx9LHNhZT1jPT5jLmdldEZ1bGxZZWFyKCkrIi0iKygiMCIrKGMuZ2V0TW9udGgoKSsxKSkuc2xpY2UoLTIpKyItIisoIjAiK2MuZ2V0RGF0ZSgpKS5zbGljZSgtMiksbGFlPWM9PiEh''@;'; put 'put ''L14tezAsMX1cZCskLy50ZXN0KGMpLHh5ZT1jPT4hIS9eXGQrXC5cZCskLy50ZXN0KGMpLGNhZT0oYyxsKT0+bmV3IEZpbGUoW2NdLGwse2xhc3RNb2RpZmllZDoobmV3IERhdGUpLmdldFRpbWUoKX0pO3ZhciBqdT1iKDYzNTc4KSxFeWU9Yig5NDI0OCksVHllPWIoODM4MzgpO2NsYXNzIEF5''@;'; put 'put ''ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmxpY2VuY2VTdGF0ZT1sLmxpY2VuY2VTdGF0ZX1wYXJzZVNwcmVhZHNoZWV0RmlsZShsLGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBuZXcgUHJvbWlzZSgodixNKT0+e2NvbnN0IEQ9bC51cGxvYWRlcnx8bmV3IGVhZTtpZihsLndvcmtib29rKXRoaXMu''@;'; put 'put ''cGFyc2VFeGNlbEZpbGUobCxsLndvcmtib29rLEQsaCkudGhlbihVPT57dihVKX0pLmNhdGNoKFU9PntNKFUpfSk7ZWxzZXtjb25zdCB0ZT1sLmZpbGU7bC5lbmNvZGluZ3x8KGwuZW5jb2Rpbmc9IlVURi04IiksZCYmZChgTG9hZGluZyAke3RlLm5hbWV9IGludG8gdGhlIGJyb3dzZXJgKTts''@;'; put 'put ''ZXQgb2U9dGUubmFtZS5zbGljZSh0ZS5uYW1lLmxhc3RJbmRleE9mKCIuIikrMSx0ZS5uYW1lLmxhc3RJbmRleE9mKCIuIikrNCk7aWYoInhscyIhPT1vZS50b0xvd2VyQ2FzZSgpKXtpZigiY3N2Ij09PW9lLnRvTG93ZXJDYXNlKCkpcmV0dXJuIHRoaXMucGFyc2VDc3ZGaWxlKGwsRCxvZSku''@;'; put 'put ''dGhlbih2ZT0+dih2ZSkpLmNhdGNoKHZlPT5NKHZlKSk7e2xldCB2ZT0nSW52YWxpZCBmaWxlIHR5cGUgIjxiPicrbC5maWxlLm5hbWUrJzwvYj4iLiBQbGVhc2UgdXBsb2FkIGNzdiBvciBleGNlbCBmaWxlLic7cmV0dXJuIEQucXVldWUucG9wKCksTSh2ZSl9fXtsZXQgdmU9bmV3IEZpbGVS''@;'; put 'put ''ZWFkZXI7dmUub25sb2FkPWZ1bmN0aW9uKCl7dmFyIEZlPWVlKGZ1bmN0aW9uKihXZSl7Y29uc3QgbnQ9eWllbGQgZi54c2x4U3RhcnRSZWFkaW5nKFdlLGEsbC5wYXNzd29yZCk7aWYoIW50KXJldHVybiBNKCJObyB3b3JrYm9vayBmb3VuZC4iKTtmLnBhcnNlRXhjZWxGaWxlKGwsbnQsRCxo''@;'; put 'put ''KS50aGVuKGR0PT57dihkdCl9KS5jYXRjaChkdD0+e00oZHQpfSl9KTtyZXR1cm4gZnVuY3Rpb24oV2Upe3JldHVybiBGZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLHZlLnJlYWRBc0FycmF5QnVmZmVyKHRlKX19fSl9cGFyc2VFeGNlbEZpbGUobCxhLGQsaCl7cmV0dXJuIG5ldyBQcm9t''@;'; put 'put ''aXNlKChmLHYpPT57bGV0IE09ITEsRD1bXTtjb25zdCBVPVsiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIiwuLi5sLmhlYWRlckFycmF5XSx0ZT10aGlzLnNlYXJjaERhdGFJbkV4Y2VsKGEsbCk7bGV0IG9lPVtdO2lmKHRlLmZvdW5kPyhNPSEwLG9lPXRlLmZvdW5kLmFycmF5RGF0''@;'; put 'put ''YSx0ZS5mb3VuZC5oZWFkZXJzLmluY2x1ZGVzKCJfX19fX2RlbGV0ZV9fdGhpc19fcmVjb3JkX19fX18iKXx8KG9lPW9lLm1hcChGZT0+KEZlLnVuc2hpZnQoe3Y6IiJ9KSxGZSkpKSxoJiZoKGBTaGVldDogJHt0ZS5mb3VuZC5zaGVldE5hbWV9XG5SYW5nZTogJHt0ZS5mb3VuZC5zdGFydEFk''@;'; put 'put ''ZHJlc3N9OiR7dGUuZm91bmQuZW5kQWRkcmVzc31gKSk6RD10ZS5taXNzaW5nfHxbXSxELmxlbmd0aD4wKXtsZXQgRmU9RC5tYXAoV2U9PmBTaGVldDogJHtXZS5zaGVldE5hbWV9LlxuTWlzc2luZyBjb2x1bW5zOiAke1dlLm1pc3NpbmdIZWFkZXJzLmpvaW4oIiwiKX1gKS5qb2luKCJcblxu''@;'; put 'put ''Iik7cmV0dXJuIGQucXVldWUucG9wKCksdihGZSl9aWYoMD09PW9lLmxlbmd0aHx8MD09PW9lWzBdLmxlbmd0aCl7bGV0IEZlPSJObyByZWxldmFudCBkYXRhIGZvdW5kIGluIEZpbGUgISI7cmV0dXJuIGQucXVldWUucG9wKCksdihGZSl9aWYoKGwuZGF0ZVRpbWVIZWFkZXJzLmxlbmd0aD4w''@;'; put 'put ''fHxsLmRhdGVIZWFkZXJzLmxlbmd0aD4wfHxsLnRpbWVIZWFkZXJzLmxlbmd0aD4wKSYmKG9lPXRoaXMudXBkYXRlRGF0ZVRpbWVDb2xzKFUsb2UsbCkpLGwueGxSdWxlcy5sZW5ndGg+MCYmKG9lPXRoaXMudXBkYXRlWExSdWxlQ29scyhVLG9lLGwpKSwhTSl7bGV0IEZlPSIiO3JldHVybiBG''@;'; put 'put ''ZT0wPT09RC5sZW5ndGg/Ik5vIHJlbGV2YW50IGRhdGEgZm91bmQgaW4gRmlsZSAhIjpELm1hcChXZT0+YFNoZWV0OiAke1dlLnNoZWV0TmFtZX0uXG5NaXNzaW5nIGNvbHVtbnM6ICR7V2UubWlzc2luZ0hlYWRlcnMuam9pbigiLCIpfWApLmpvaW4oIlxuXG4iKSxkLnF1ZXVlLnBvcCgpLHYo''@;'; put 'put ''RmUpfXtsLmhlYWRlclNob3c9VSxvZT1vZS5tYXAoJHQ9PiR0Lm1hcCh6dD0+Im4iPT09enQudHx8enQudz96dC52OiJzdHJpbmciPT10eXBlb2YgenQudj96dC52LnRyaW0oKTp6dC52KSksb2U9b2UubWFwKCR0PT4kdC5tYXAoKHp0LHluKT0+eyF6dCYmMCE9PXp0JiYoenQ9IiIpO2NvbnN0''@;'; put 'put ''IGduPWwuaGVhZGVyU2hvd1t5bl07cmV0dXJuIm51bWVyaWMiPT09bC5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShnbik/LnR5cGUmJigwLGg1LmlzU3BlY2lhbE1pc3NpbmcpKHp0KSYmIXp0LmluY2x1ZGVzKCIuIikmJih6dD0iLiIrenQpLHp0fSkpO2NvbnN0IEZlPW9lLnNsaWNlKDAsdGhpcy5s''@;'; put 'put ''aWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQpO2xldCBkdCxXZT1qdS51dGlscy5qc29uX3RvX3NoZWV0KEZlLHtza2lwSGVhZGVyOiEwfSksbnQ9anUudXRpbHMuc2hlZXRfdG9fY3N2KFdlKTtpZihudD1VLmpvaW4oIiwiKSsiXG4iK250LCJXTEFUSU4xIj09PWwuZW5jb2Rp''@;'; put 'put ''bmcpe2xldCAkdD1FeWUuZGVjb2RlKFR5ZS5CdWZmZXIuZnJvbShudCksIkNQLTEyNTIiKTtkdD1uZXcgQmxvYihbJHRdLHt0eXBlOiJhcHBsaWNhdGlvbi9jc3YifSl9ZWxzZSBkdD1uZXcgQmxvYihbbnRdLHt0eXBlOiJhcHBsaWNhdGlvbi9jc3YifSk7bGV0IG10PWNhZShkdCxsLmZpbGUu''@;'; put 'put ''bmFtZSsiLmNzdiIpO2QuYWRkVG9RdWV1ZShbbXRdKX1pZigwPT09b2UubGVuZ3RoKXJldHVybiB2KGBUYWJsZSBpbiB0aGUgZmlsZSBpcyBlbXB0eS4gRGF0YSBmb3VuZCBvbiBzaGVldDogJHt0ZS5mb3VuZD8uc2hlZXROYW1lfHwiIn1gKTtpZighdGUuZm91bmQpcmV0dXJuIHYoIk5vIHJl''@;'; put 'put ''bGV2YW50IGRhdGEgZm91bmQuICdmb3VuZCcgb2JqZWN0IGlzIGVtcHR5LCB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkLiIpO2NvbnN0IHZlPXRlLmZvdW5kLnN0YXJ0QWRkcmVzc3x8IiIsd2U9dGUuZm91bmQuZW5kQWRkcmVzc3x8IiI7cmV0dXJuIGYoe3VwbG9hZGVyOmQsZGF0YTpvZSxy''@;'; put 'put ''YW5nZVNoZWV0UmVzOntmb3VuZDohIXRlLmZvdW5kLHNoZWV0TmFtZTp0ZS5mb3VuZC5zaGVldE5hbWUscmFuZ2VTdGFydEFkZHJlc3M6dmUscmFuZ2VFbmRBZGRyZXNzOndlLHJhbmdlQWRkcmVzczpgJHt2ZX06JHt3ZX1gLG1pc3NpbmdIZWFkZXJzOkR9LGhlYWRlclNob3c6bC5oZWFkZXJT''@;'; put 'put ''aG93fSl9KX1wYXJzZUNzdkZpbGUobCxhLGQpe3JldHVybiBuZXcgUHJvbWlzZSgoaCxmKT0+e2lmKHRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0IT09MS8wKXJldHVybiBhLnF1ZXVlLnBvcCgpLGYoIkV4Y2VsIGZpbGVzIG9ubHkuIFRvIHVubG9jayBDU1YgdXBs''@;'; put 'put ''b2FkcywgcGxlYXNlIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpO2lmKCJXTEFUSU4xIiE9PWwuZW5jb2RpbmcpcmV0dXJuIGgoe3VwbG9hZGVyOmF9KTt7bGV0IHY9bmV3IEZpbGVSZWFkZXI7di5vbmxvYWQ9RD0+e2xldCBVPUV5ZS5kZWNvZGUoVHllLkJ1ZmZlci5mcm9t''@;'; put 'put ''KEQudGFyZ2V0LnJlc3VsdCksIkNQLTEyNTIiKSx0ZT1uZXcgQmxvYihbVV0se3R5cGU6ZH0pLG9lPWNhZSh0ZSxsLmZpbGUubmFtZSk7cmV0dXJuIGEucXVldWUucG9wKCksYS5hZGRUb1F1ZXVlKFtvZV0pLGgoe3VwbG9hZGVyOmF9KX0sdi5yZWFkQXNBcnJheUJ1ZmZlcihsLmZpbGUpfX0p''@;'; put 'put ''fWJ5dGVzVG9NQihsKXtyZXR1cm4gcGFyc2VGbG9hdCgobC8xMDQ4NTc2KS50b0ZpeGVkKDIpKX14c2x4U3RhcnRSZWFkaW5nKGwsYSxkKXt2YXIgaD10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBmPWVlKGZ1bmN0aW9uKih2LE0pe2NvbnN0IEQ9aC50b0JzdHIobC50''@;'; put 'put ''YXJnZXQucmVzdWx0KTtsZXQgVSx0ZT0hMTtjb25zdCBvZT17dHlwZToiYmluYXJ5IixjZWxsRGF0ZXM6ITEsY2VsbEZvcm11bGE6ITAsY2VsbFN0eWxlczohMCxjZWxsTkY6ITEsY2VsbFRleHQ6ITEscGFzc3dvcmQ6ZH07dHJ5e1U9eWllbGQgaC54bHN4UmVhZChELHsuLi5vZX0pfWNhdGNo''@;'; put 'put ''KHZlKXtpZighdmUubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCJwYXNzd29yZCIpKXJldHVybiBNKCJFcnJvciByZWFkaW5nIHRoZSBmaWxlIik7e3RlPSEwO2xldCB3ZT0hMTtmb3IoO3RlOyl7Y29uc3QgRmU9eWllbGQgYSh7ZXJyb3I6d2V9KTtpZihGZSl0cnl7VT15aWVsZCBo''@;'; put 'put ''Lnhsc3hSZWFkKEQsey4uLm9lLHBhc3N3b3JkOkZlfSksdGU9ITEsd2U9ITF9Y2F0Y2goV2Upe3dlPSEwLFdlLm1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygicGFzc3dvcmQiKXx8KHRlPSExKX1lbHNlIHRlPSExfX19cmV0dXJuIFU/dihVKTpNKCJGYWlsZWQgdG8gcGFyc2UgYSB3''@;'; put 'put ''b3JrYm9vayIpfSk7cmV0dXJuIGZ1bmN0aW9uKHYsTSl7cmV0dXJuIGYuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9eGxzeFJlYWQobCxhKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9PntpZihhJiZhLnBhc3N3b3JkKXJldHVybiBjb25zb2xlLmluZm8oIk5vdCB1c2luZyB3b3JrZXIg''@;'; put 'put ''dG8gcGFyc2UgdGhlIFhMU1ggLSBoYXMgcGFzc3dvcmQiKSxkKGp1LnJlYWQobCxhKSk7aWYodHlwZW9mIFdvcmtlcj4idSIpcmV0dXJuIGNvbnNvbGUuaW5mbygiTm90IHVzaW5nIHdvcmtlciB0byBwYXJzZSB0aGUgWExTWCAtIG5vIFdvcmtlciBhdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9u''@;'; put 'put ''bWVudCIpLGQoanUucmVhZChsLGEpKTtjb25zb2xlLmluZm8oIlVzaW5nIHdvcmtlciB0byBwYXJzZSB0aGUgWExTWCIpO2NvbnN0IGY9bmV3IFdvcmtlcihiLnR1KG5ldyBVUkwoYi5wK2IudSg0MTEpLGIuYikpKTtmLm9ubWVzc2FnZT0oe2RhdGE6dn0pPT57InJlYWRpbmdfZW5kIj09PXYu''@;'; put 'put ''ZXZlbnQ/ZCh2Lndvcmtib29rKTp2LmVycm9yP2godi5lcnJvcik6KGNvbnNvbGUuaW5mbygiV29ya2VyIGZhaWxlZCB0byBwYXJzZSB0aGUgWExTWCAtIGZhbGxiYWNrIHRvIG5vbiB3b3JrZXIgcGFyc2luZyIpLGQoanUucmVhZCh2LGEpKSl9LGYucG9zdE1lc3NhZ2Uoe2RhdGE6bCxvcHRz''@;'; put 'put ''OmF9KSxzZXRUaW1lb3V0KCgpPT5kKGp1LnJlYWQobCxhKSksNmU1KX0pfXNlYXJjaERhdGFJbkV4Y2VsKGwsYSl7bGV0IGQsaCxmLHYsTT0iIixEPVtdLHRlPVsiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIiwuLi5hLmhlYWRlckFycmF5XS5tYXAodmU9PnZlLnRvTG93ZXJDYXNl''@;'; put 'put ''KCkpLG9lPXRlLnJlZHVjZSgodmUsd2UpPT4odmVbd2VdPS0xLHZlKSx7fSk7Zm9yKGxldCB2ZSBvZiBsLlNoZWV0TmFtZXMpe2Q9dm9pZCAwLGg9dm9pZCAwLG9lPXRlLnJlZHVjZSgoZ24sd24pPT4oZ25bd25dPS0xLGduKSx7fSk7bGV0IHdlPVtdO009dmU7Y29uc3QgRmU9bC5TaGVldHNb''@;'; put 'put ''TV07aWYoT2JqZWN0LmtleXMoRmUpLmZvckVhY2goZ249Pntjb25zdCB3bj1GZVtnbl0udjtpZih3biYmInN0cmluZyI9PXR5cGVvZiB3bil7Y29uc3QgUm49d24udG9Mb3dlckNhc2UoKTt0ZS5pbmRleE9mKFJuKT4tMSYmKG9lW1JuXT1nbixkfHwoZD1nbiksaD1nbil9fSksLTE9PT1vZS5f''@;'; put 'put ''X19fX2RlbGV0ZV9fdGhpc19fcmVjb3JkX19fX18mJmRlbGV0ZSBvZS5fX19fX2RlbGV0ZV9fdGhpc19fcmVjb3JkX19fX18sd2U9T2JqZWN0LmtleXMob2UpLmZpbHRlcihnbj0+LTE9PT1vZVtnbl0pLHdlLmxlbmd0aD4wKXtELnB1c2goe3NoZWV0TmFtZTpNLG1pc3NpbmdIZWFkZXJzOndl''@;'; put 'put ''Lm1hcChnbj0+Z24udG9VcHBlckNhc2UoKSl9KTtjb250aW51ZX1jb25zdCBXZT1PYmplY3Qua2V5cyhvZSk7bGV0IG10LG50PVtdLGR0PVtdO1dlLnNvcnQoKGduLHduKT0+e2NvbnN0IFJuPWEuaGVhZGVyUGtzLmluY2x1ZGVzKGduKT8xOjA7cmV0dXJuKGEuaGVhZGVyUGtzLmluY2x1ZGVz''@;'; put 'put ''KHduKT8xOjApLVJufSkuZm9yRWFjaChnbj0+e2NvbnN0IHduPW9lW2duXSxSbj13bi5tYXRjaCgvXEQrLyksRHI9d24ubWF0Y2goL1xkKy8pLExyPShSbj9SblswXTotMSl8fC0xLE1yPXBhcnNlSW50KChEcj9EclswXTotMSl8fC0xKSsxO2xldCB2aT0wO2lmKG10KWZvcihsZXQgTm49TXI7''@;'; put 'put ''Tm48PW10O05uKyspe2NvbnN0IGVyPUZlW2Ake0xyfSR7Tm59YF07aWYoYS5oZWFkZXJQa3MuaW5jbHVkZXMoZ24pJiYodm9pZCAwPT09ZXJ8fHZvaWQgMD09PWVyLnYpKXttdD1ObjticmVha31udFt2aV18fG50LnB1c2goe30pLGVyJiYobnRbdmldW2duXT0ic3RyaW5nIj09dHlwZW9mIGVy''@;'; put 'put ''LnY/ZXIudi50cmltKCk6ZXIudiksZHRbdmldfHxkdC5wdXNoKFtdKSxkdFt2aV0ucHVzaChlcj8/e3Y6IiJ9KSx2aSsrfWVsc2V7bGV0IE5uPU1yO2Zvcig7dm9pZCAwPT09bXQ7KXtjb25zdCBCcj1gJHtMcn0ke05ufWAsZXI9RmVbQnJdO2lmKCFlcnx8dm9pZCAwPT09ZXIudil7bXQ9Tm4t''@;'; put 'put ''MTticmVha31udFt2aV18fG50LnB1c2goe30pLG50W3ZpXVtnbl09Im4iPT09RmVbQnJdLnQ/RmVbQnJdLnY6RmVbQnJdLnc/RmVbQnJdLnc6InN0cmluZyI9PXR5cGVvZiBGZVtCcl0udj9GZVtCcl0udi50cmltKCk6RmVbQnJdLnYsZHRbdmldfHxkdC5wdXNoKFtdKSxkdFt2aV0ucHVzaChl''@;'; put 'put ''cj8/e3Y6IiJ9KSxObisrLHZpKyt9fWlmKGQmJmgpe2NvbnN0IE5uPWgubWF0Y2goL1xEKy8pO2Y9ZCx2PWAke05ufSR7bXR9YH19KTtjb25zdCB6dD1bXTtsZXQgeW47cmV0dXJuIG50LmZvckVhY2goKGduLHduKT0+e2xldCBSbj0hMTthLmhlYWRlclBrcy5mb3JFYWNoKERyPT57dm9pZCAw''@;'; put 'put ''PT09Z25bRHIudG9Mb3dlckNhc2UoKV0mJihSbj0hMCl9KSxSbiYmKHp0LnB1c2god24pLHlufHwoeW49d24pKX0pLHluPyhudC5zcGxpY2UoeW4sMS8wKSxkdC5zcGxpY2UoeW4sMS8wKSk6enQuc29ydCgoZ24sd24pPT53bi1nbikuZm9yRWFjaChnbj0+e250LnNwbGljZShnbiwxKSxkdC5z''@;'; put 'put ''cGxpY2UoZ24sMSl9KSxkdC5sZW5ndGg/e2ZvdW5kOntkYXRhOm50LGFycmF5RGF0YTpkdCxzaGVldE5hbWU6TSxzdGFydEFkZHJlc3M6ZixlbmRBZGRyZXNzOnYsaGVhZGVyczpXZX19Ont9fXJldHVybnttaXNzaW5nOkR9fXVwZGF0ZURhdGVUaW1lQ29scyhsLGEsZCl7aWYoZC5kYXRlSGVh''@;'; put 'put ''ZGVycy5sZW5ndGg+MCl7Y29uc3QgaD1bXTtkLmRhdGVIZWFkZXJzLmZvckVhY2goZj0+ey0xIT09bC5pbmRleE9mKGYpJiZoLnB1c2gobC5pbmRleE9mKGYpKX0pLGEuZm9yRWFjaChmPT57aC5mb3JFYWNoKHY9Pntjb25zdCBNPWZbdl07aWYobGFlKE0udikpe2NvbnN0IEQ9aWFlKE51bWJl''@;'; put 'put ''cihNLnYpKTtNLnY9RC5nZXRGdWxsWWVhcigpKyItIisoIjAiKyhELmdldE1vbnRoKCkrMSkpLnNsaWNlKC0yKSsiLSIrKCIwIitELmdldERhdGUoKSkuc2xpY2UoLTIpfWVsc2UgaWYoTSYmTS52JiYtMT09PU0udi50b1N0cmluZygpLmluZGV4T2YoIjoiKSl7Y29uc3QgRD1uZXcgRGF0ZShN''@;'; put 'put ''LnYpOyJJbnZhbGlkIERhdGUiIT09RC50b1VUQ1N0cmluZygpJiYoTS52PXNhZShEKSl9Zlt2XT1NfSl9KX1pZihkLnRpbWVIZWFkZXJzLmxlbmd0aD4wKXtsZXQgaD1bXTtkLnRpbWVIZWFkZXJzLmZvckVhY2goZj0+ey0xIT09bC5pbmRleE9mKGYpJiZoLnB1c2gobC5pbmRleE9mKGYpKX0p''@;'; put 'put ''LGEuZm9yRWFjaChmPT57aC5mb3JFYWNoKHY9Pntjb25zdCBNPWZbdl07aWYobGFlKE0udil8fHh5ZShNLnYpfHxNLnYuaW5jbHVkZXMoIkUtIikpe2NvbnN0IEQ9aWFlKE51bWJlcihNLnYpKTtNLnY9TXllKEQpfWZbdl09TX0pfSl9aWYoZC5kYXRlVGltZUhlYWRlcnMubGVuZ3RoPjApe2xl''@;'; put 'put ''dCBoPVtdO2QuZGF0ZVRpbWVIZWFkZXJzLmZvckVhY2goZj0+ey0xIT09bC5pbmRleE9mKGYpJiZoLnB1c2gobC5pbmRleE9mKGYpKX0pLGEuZm9yRWFjaChmPT57aC5mb3JFYWNoKHY9Pntjb25zdCBNPWZbdl07aWYobGFlKE0udil8fHh5ZShNLnYpKXtjb25zdCBEPWlhZShOdW1iZXIoTS52''@;'; put 'put ''KSk7TS52PXNhZShEKSsiICIrTXllKEQpfWVsc2V7aWYoLTE9PT1NLnYuaW5kZXhPZigiICIpJiYtMSE9PU0udi5pbmRleE9mKCI6Iikpe2xldCBVPU0udi5zdWJzdHJpbmcoMCxNLnYuaW5kZXhPZigiOiIpKTtVPVUrIiAiK00udi5zdWJzdHJpbmcoTS52LmluZGV4T2YoIjoiKSsxKSxNLnY9''@;'; put 'put ''VX1jb25zdCBEPW5ldyBEYXRlKE0udik7IkludmFsaWQgRGF0ZSIhPT1ELnRvVVRDU3RyaW5nKCkmJihNLnY9c2FlKEQpKyIgIisoYz0+e2xldCBsPSgiMCIrYy5nZXRIb3VycygpKS5zbGljZSgtMikrIjoiO3JldHVybiBsPWwrKCIwIitjLmdldE1pbnV0ZXMoKSkuc2xpY2UoLTIpKyI6Iixs''@;'; put 'put ''Kz0oIjAiK2MuZ2V0U2Vjb25kcygpKS5zbGljZSgtMiksbH0pKEQpKX1mW3ZdPU19KX0pfXJldHVybiBhfXVwZGF0ZVhMUnVsZUNvbHMobCxhLGQpe2lmKGQueGxSdWxlcy5sZW5ndGg+MCl7Y29uc3QgaD1bXTtkLnhsUnVsZXMuZm9yRWFjaChmPT57LTEhPT1sLmluZGV4T2YoZi5YTF9DT0xV''@;'; put 'put ''TU4pJiYoZi5pbmRleD1sLmluZGV4T2YoZi5YTF9DT0xVTU4pLGgucHVzaChmKSl9KSxhLmZvckVhY2goZj0+e2guZm9yRWFjaCh2PT57Y29uc3QgTT1mW3YuaW5kZXhdOyJGT1JNVUxBIj09PXYuWExfUlVMRSYmImYiaW4gTSYmKCJuIj09PU0udD9NLnY9Ij0iK00uZjpNLnc9Ij0iK00uZiks''@;'; put 'put ''Zlt2XT1NfSl9KX1yZXR1cm4gYX10b0JzdHIobCl7bGV0IGE9bmV3IFVpbnQ4QXJyYXkobCksZD0iIixoPWEuYnl0ZUxlbmd0aDtmb3IobGV0IGY9MDtmPGg7ZisrKWQrPVN0cmluZy5mcm9tQ2hhckNvZGUoYVtmXSk7cmV0dXJuIGR9fWxldCBreWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rv''@;'; put 'put ''cihhLGQsaCl7dGhpcy5leGNlbFBhc3N3b3JkTW9kYWxTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLmxpY2VuY2VTZXJ2aWNlPWgsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5wcm9tcHRFeGNlbFBhc3N3b3JkPWY9Pm5l''@;'; put 'put ''dyBQcm9taXNlKCh2LE0pPT57dGhpcy5leGNlbFBhc3N3b3JkTW9kYWxTZXJ2aWNlLm9wZW4oZikuc3Vic2NyaWJlKEQ9Pnt2KEQucGFzc3dvcmQpfSl9KX1wYXJzZUV4Y2VsRmlsZShhLGQsaCl7cmV0dXJuIG5ldyBBeWUoe2xpY2VuY2VTdGF0ZTp0aGlzLmxpY2VuY2VTdGF0ZX0pLnBhcnNl''@;'; put 'put ''U3ByZWFkc2hlZXRGaWxlKGEsdGhpcy5wcm9tcHRFeGNlbFBhc3N3b3JkLGQsaCl9eGxzeFJlYWRGaWxlKGEpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2NvbnN0IGY9bmV3IEF5ZSh7bGljZW5jZVN0YXRlOnRoaXMubGljZW5jZVN0YXRlfSk7bGV0IHY9bmV3IEZpbGVSZWFkZXI7di5v''@;'; put 'put ''bmxvYWQ9TT0+e2YueHNseFN0YXJ0UmVhZGluZyhNLHRoaXMucHJvbXB0RXhjZWxQYXNzd29yZCkudGhlbihEPT57ZChEKX0pLmNhdGNoKEQ9PntoKEQpfSl9LHYucmVhZEFzQXJyYXlCdWZmZXIoYSl9KX1wYXJzZUV4Y2VsU2hlZXROYW1lcyhhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5j''@;'; put 'put ''dGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGgsZik9Pntjb25zdCB2PW5ldyBGaWxlUmVhZGVyO2lmKCFhKXJldHVybiBjb25zb2xlLndhcm4oImZpbGUgaXMgbWlzc2luZyIpLGgoe3NoZWV0TmFtZXM6W119KTt2Lm9ubG9hZD1mdW5jdGlvbigpe3ZhciBNPWVlKGZ1bmN0aW9uKihEKXtp''@;'; put 'put ''ZighRD8udGFyZ2V0KXJldHVybiB2b2lkIGNvbnNvbGUud2FybigiRmlsZSByZWFkZXIgZXZlbnQudGFyZ2V0IGlzIG1pc3NpbmciKTtsZXQgVSxvZSx0ZT0hMTtjb25zdCB2ZT1ELnRhcmdldC5yZXN1bHQ7dHJ5e1U9anUucmVhZCh2ZSx7Ym9va1NoZWV0czohMCx0eXBlOiJiaW5hcnkifSl9''@;'; put 'put ''Y2F0Y2god2Upe2lmKCF3ZS5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInBhc3N3b3JkIikpcmV0dXJuIGYoIkVycm9yIHJlYWRpbmcgdGhlIGZpbGUiKTt7dGU9ITA7bGV0IEZlPSExO2Zvcig7dGU7KXtpZihvZT15aWVsZCBkLnByb21wdEV4Y2VsUGFzc3dvcmQoe2Vycm9yOkZl''@;'; put 'put ''fSksIW9lKXJldHVybiB0ZT0hMSxmKCJObyBwYXNzd29yZCBwcm92aWRlZCIpO3RyeXtVPWp1LnJlYWQodmUse2Jvb2tTaGVldHM6ITAsdHlwZToiYmluYXJ5IixwYXNzd29yZDpvZX0pLHRlPSExLEZlPSExfWNhdGNoKFdlKXtGZT0hMCxXZS5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVk''@;'; put 'put ''ZXMoInBhc3N3b3JkIil8fCh0ZT0hMSl9aWYoIW9lKXJldHVybiBmKCJJbnZhbGlkIHBhc3N3b3JkLCBmYWlsZWQgdG8gZGVjcnlwdCB0aGUgZmlsZSIpfX19aWYoIVUpcmV0dXJuIGYoIkVycm9yIHBhcnNpbmcgdGhlIHdvcmtib29rIik7dHJ5e3JldHVybiBoKHtzaGVldE5hbWVzOlUuU2hl''@;'; put 'put ''ZXROYW1lcyxwYXNzd29yZDpvZX0pfWNhdGNoKHdlKXtjb25zb2xlLmVycm9yKHdlKX19KTtyZXR1cm4gZnVuY3Rpb24oRCl7cmV0dXJuIE0uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSx2Lm9uZXJyb3I9ZnVuY3Rpb24oTSl7Y29uc29sZS5sb2coTSl9LHYucmVhZEFzQmluYXJ5U3RyaW5n''@;'; put 'put ''KGEpfSl9KSgpfWJ5dGVzVG9NQihhKXtyZXR1cm4gcGFyc2VGbG9hdCgoYS8xMDQ4NTc2KS50b0ZpeGVkKDIpKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShIcihScGUpLEhyKEVjKSxIcihPMSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWZy''@;'; put 'put ''KHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IGd5PXZvaWQgMCxxX3Q9WyJlbi1HQiIsW1siYSIsInAiXSxbImFtIiwicG0iXSxneV0sW1siYW0iLCJwbSJdLGd5LGd5XSxbWyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYi''@;'; put 'put ''LCJTIl0sWyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sWyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdXSxneSxb''@;'; put 'put ''WyJKIiwiRiIsIk0iLCJBIiwiTSIsIkoiLCJKIiwiQSIsIlMiLCJPIiwiTiIsIkQiXSxbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcHQiLCJPY3QiLCJOb3YiLCJEZWMiXSxbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJN''@;'; put 'put ''YXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl1dLGd5LFtbIkIiLCJBIl0sWyJCQyIsIkFEIl0sWyJCZWZvcmUgQ2hyaXN0IiwiQW5ubyBEb21pbmkiXV0sMSxbNiwwXSxbImRkL01NL3kiLCJkIE1NTSB5IiwiZCBN''@;'; put 'put ''TU1NIHkiLCJFRUVFLCBkIE1NTU0geSJdLFsiSEg6bW0iLCJISDptbTpzcyIsIkhIOm1tOnNzIHoiLCJISDptbTpzcyB6enp6Il0sWyJ7MX0sIHswfSIsZ3ksInsxfSAnYXQnIHswfSIsZ3ldLFsiLiIsIiwiLCI7IiwiJSIsIisiLCItIiwiRSIsIlx4ZDciLCJcdTIwMzAiLCJcdTIyMWUiLCJO''@;'; put 'put ''YU4iLCI6Il0sWyIjLCMjMC4jIyMiLCIjLCMjMCUiLCJceGE0IywjIzAuMDAiLCIjRTAiXSwiR0JQIiwiXHhhMyIsIkJyaXRpc2ggUG91bmQiLHtKUFk6WyJKUFx4YTUiLCJceGE1Il0sVVNEOlsiVVMkIiwiJCJdfSwibHRyIixmdW5jdGlvbiBYX3QoYyl7Y29uc3QgYT1NYXRoLmZsb29yKE1h''@;'; put 'put ''dGguYWJzKGMpKSxkPWMudG9TdHJpbmcoKS5yZXBsYWNlKC9eW14uXSpcLj8vLCIiKS5sZW5ndGg7cmV0dXJuIDE9PT1hJiYwPT09ZD8xOjV9XSxKX3Q9WyJpbnB1dCJdLFFfdD1bIioiXSxld3Q9KGMsbCk9Pih7IndpZHRoLnB4IjpjLCJtYXgtaGVpZ2h0LnB4IjpsfSk7ZnVuY3Rpb24gdHd0''@;'; put 'put ''KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiw3KSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLElyKCIgIixhLmxvYWRpbmdNb3JlPyJMb2FkaW5nLi4uIjoiTE9BRCBNT1JFIiwiICIpfX1sZXQgRHllPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5jZHI9''@;'; put 'put ''YSx0aGlzLmlucHV0SWQ9IiIsdGhpcy5wbGFjZWhvbGRlcj0iIix0aGlzLnZhbHVlPSIiLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy50eXBlPSJ0ZXh0Iix0aGlzLmF1dG9jb21wbGV0ZT0ib2ZmIix0aGlzLnRhYmluZGV4PSIiLHRoaXMuZW1pdE9ubHlTZWxlY3RlZD0hMSx0aGlzLmVuYWJsZUxv''@;'; put 'put ''YWRNb3JlPSExLHRoaXMub25JbnB1dEtleWRvd249bmV3IFhyLHRoaXMub25JbnB1dENoYW5nZT1uZXcgWHIsdGhpcy52YWx1ZUNoYW5nZT1uZXcgWHIsdGhpcy5vbkxvYWRpbmdNb3JlPW5ldyBYcix0aGlzLmRhdGFsaXN0T3Blbj0hMSx0aGlzLmFmdGVyT3BlbkxvY2tEZWxheT0xNTAsdGhp''@;'; put 'put ''cy5hZnRlck9wZW5Mb2NrPSExLHRoaXMuaW5wdXRGb2N1c2VkPSExLHRoaXMuaW5wdXRDbGllbnRSZWN0PXt9LHRoaXMucHJldmVudERhdGFsaXN0Q2xvc2U9ITEsdGhpcy5sb2FkaW5nTW9yZT0hMX1uZ09uSW5pdCgpe31uZ0FmdGVyVmlld0luaXQoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5j''@;'; put 'put ''YWxjdWxhdGVJbnB1dFBvc2l0aW9uKCl9LDUwMCl9b25JbnB1dEZpcmVkKGEsZCxoKXt0aGlzLm9wZW5EYXRhbGlzdCgiY2xpY2siIT09aCksdGhpcy51bnNlbGVjdEFsbE9wdGlvbnMoKSx0aGlzLmZpbHRlck9wdGlvbnNMaXN0KCksKCF0aGlzLmVtaXRPbmx5U2VsZWN0ZWR8fGQpJiYodGhp''@;'; put 'put ''cy5vbklucHV0Q2hhbmdlLmVtaXQoe3RhcmdldDp7dmFsdWU6dGhpcy52YWx1ZX19KSx0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSkpfW9uSW5wdXRDbGljayhhKXt0aGlzLm9wZW5EYXRhbGlzdCgpfW9wZW5EYXRhbGlzdChhPSEwKXt0aGlzLmRhdGFsaXN0T3Blbj0hMCxhJiYo''@;'; put 'put ''dGhpcy5hZnRlck9wZW5Mb2NrPSEwLHRoaXMuYWZ0ZXJPcGVuTG9ja0RlbGF5VGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5hZnRlck9wZW5Mb2NrPSExfSx0aGlzLmFmdGVyT3BlbkxvY2tEZWxheSkpfWNsb3NlRGF0YWxpc3QoKXtjbGVhclRpbWVvdXQodGhpcy5hZnRlck9wZW5Mb2Nr''@;'; put 'put ''RGVsYXlUaW1lb3V0KSx0aGlzLmFmdGVyT3BlbkxvY2s9ITEsdGhpcy5kYXRhbGlzdE9wZW49ITF9cmVzZXREYXRhbGlzdEZpbHRlcigpe3RoaXMuZmlsdGVyT3B0aW9uc0xpc3QoITApfW9uSW5wdXRGb2N1c2luKGEpe3RoaXMuaW5wdXRGb2N1c2VkPSEwfW9uSW5wdXRGb2N1c291dChhKXt0''@;'; put 'put ''aGlzLmlucHV0Rm9jdXNlZD0hMSx0aGlzLnNldFRvQ2xvc2VEYXRhbGlzdCgpfW9uSW5wdXRNb3VzZWVudGVyKGEpe3RoaXMuaW5wdXRDbGllbnRSZWN0LndpZHRofHx0aGlzLmNhbGN1bGF0ZUlucHV0UG9zaXRpb24oKX1maWx0ZXJPcHRpb25zTGlzdChhKXtjb25zdCBkPWRvY3VtZW50LnF1''@;'; put 'put ''ZXJ5U2VsZWN0b3JBbGwoYCNkYXRhbGlzdF8ke3RoaXMuaW5wdXRJZH0gb3B0aW9uYCk7Zm9yKGxldCBoPTA7aDxkLmxlbmd0aDtoKyspe2NvbnN0IGY9ZFtoXTtpZigwPT09dGhpcy52YWx1ZS5sZW5ndGgpe2YuY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIik7Y29udGludWV9aWYoYSl7Zi5j''@;'; put 'put ''bGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTtjb250aW51ZX1jb25zdCB2PWYuaW5uZXJUZXh0fHwiIixNPWYudmFsdWV8fCIiOyh2K00pPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMudmFsdWUudG9Mb3dlckNhc2UoKSk/Zi5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTpmLmNsYXNz''@;'; put 'put ''TGlzdC5hZGQoImhpZGRlbiIpfX1zZXRUb0Nsb3NlRGF0YWxpc3QoKXt0aGlzLmRhdGFsaXN0Q2xvc2VUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLnByZXZlbnREYXRhbGlzdENsb3NlfHx0aGlzLmFmdGVyT3BlbkxvY2t8fCh0aGlzLmNsb3NlRGF0YWxpc3QoKSx0aGlzLnVuc2VsZWN0''@;'; put 'put ''QWxsT3B0aW9ucygpLHRoaXMucmVzZXREYXRhbGlzdEZpbHRlcigpKX0sMTAwKX1jYWxjdWxhdGVJbnB1dFBvc2l0aW9uKCl7Y29uc3QgZD10aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtkLndpZHRoPjAmJmQuaGVpZ2h0PjAmJih0aGlz''@;'; put 'put ''LmlucHV0Q2xpZW50UmVjdD17d2lkdGg6ZC53aWR0aCxib3R0b206ZC5ib3R0b219KSx0aGlzLmlubmVySGVpZ2h0PXdpbmRvdy5pbm5lckhlaWdodH1vbkRhdGFMaXN0TW91c2VFbnRlcihhKXt0aGlzLnByZXZlbnREYXRhbGlzdENsb3NlPSEwfW9uRGF0YUxpc3RNb3VzZUxlYXZlKGEpe3Ro''@;'; put 'put ''aXMucHJldmVudERhdGFsaXN0Q2xvc2U9ITEsdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpfW9uRGF0YUxpc3RTY3JvbGwoYSl7dGhpcy5zZXRUb0Nsb3NlRGF0YWxpc3QoKX1vbkRhdGFMaXN0Q2xpY2soYSl7Y29uc3QgZD1hLnRhcmdldDsibG9hZC1tb3JlIiE9PWQu''@;'; put 'put ''ZGF0YXNldD8udHlwZT8iT1BUSU9OIiE9PWQudGFnTmFtZXx8dGhpcy5zZXRPcHRpb25WYWx1ZShkLmlubmVyVGV4dCxkLnZhbHVlKTp0aGlzLmxvYWRNb3JlKCl9bG9hZE1vcmUoKXt0aGlzLm9uTG9hZGluZ01vcmUuZW1pdCh7bG9hZE1vcmVGaW5pc2hlZDphPT57dGhpcy5sb2FkaW5nTW9y''@;'; put 'put ''ZT0hMSx0aGlzLmVuYWJsZUxvYWRNb3JlPWF9fSksdGhpcy5sb2FkaW5nTW9yZT0hMH1zZXRPcHRpb25WYWx1ZShhLGQpeyhhfHxkKSYmKGR8fChkPWEpKSxkJiYodGhpcy5wcmV2ZW50RGF0YWxpc3RDbG9zZT0hMSx0aGlzLnZhbHVlPWQsdGhpcy5vbklucHV0RmlyZWQobnVsbCwhMCwiY2xp''@;'; put 'put ''Y2siKSx0aGlzLnNldFRvQ2xvc2VEYXRhbGlzdCgpKX1vbk1haW5LZXlkb3duKGEpe3N3aXRjaChhLmtleSl7Y2FzZSJBcnJvd1VwIjp0aGlzLmdldE9wdGlvbnNNb3ZlRm9jdXMoInVwIik7YnJlYWs7Y2FzZSJBcnJvd0Rvd24iOnRoaXMuZ2V0T3B0aW9uc01vdmVGb2N1cygiZG93biIpO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiRW50ZXIiOnRoaXMuc2VsZWN0Rm9jdXNlZE9wdGlvbigpfX1vbklucHV0S2V5dXAoYSl7cmV0dXJuIXRoaXMuZGF0YWxpc3RPcGVufHwoIkVzY2FwZSI9PT1hLmtleT8oYS5zdG9wUHJvcGFnYXRpb24oKSxhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHRoaXMuc2V0VG9D''@;'; put 'put ''bG9zZURhdGFsaXN0KCksITEpOnZvaWQgMCl9dW5zZWxlY3RBbGxPcHRpb25zKCl7Y29uc3QgYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjZGF0YWxpc3RfJHt0aGlzLmlucHV0SWR9IG9wdGlvbmApO2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCsrKWFbZF0uY2xhc3NMaXN0LnJlbW92''@;'; put 'put ''ZSgiZm9jdXNlZCIpfXNlbGVjdEZvY3VzZWRPcHRpb24oKXtjb25zdCBhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCNkYXRhbGlzdF8ke3RoaXMuaW5wdXRJZH0gb3B0aW9uLmZvY3VzZWRgKTthJiZ0aGlzLm9uRGF0YUxpc3RDbGljayh7dGFyZ2V0OmF9KSx0aGlzLnNldFRvQ2xvc2VEYXRh''@;'; put 'put ''bGlzdCgpfWdldE9wdGlvbnNNb3ZlRm9jdXMoYSl7Y29uc3QgZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjZGF0YWxpc3RfJHt0aGlzLmlucHV0SWR9IG9wdGlvbjpub3QoLmhpZGRlbilgKTtsZXQgaD0wO2ZvcihsZXQgZj0wO2Y8ZC5sZW5ndGg7ZisrKXtjb25zdCB2PWRbZl07aWYo''@;'; put 'put ''di5jbGFzc0xpc3QuY29udGFpbnMoImZvY3VzZWQiKSl7aD0iZG93biI9PT1hP2YrMTpmLTEsaDwwJiYoaD1kLmxlbmd0aC0xKSxoPmQubGVuZ3RoLTEmJihoPTApLHYuY2xhc3NMaXN0LnJlbW92ZSgiZm9jdXNlZCIpO2JyZWFrfX1kW2hdLmNsYXNzTGlzdC5hZGQoImZvY3VzZWQiKX1vblJl''@;'; put 'put ''c2l6ZShhKXt0aGlzLmNhbGN1bGF0ZUlucHV0UG9zaXRpb24oKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShIcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWF1dG9jb21wbGV0ZSJdXSx2''@;'; put 'put ''aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJlVhKEpfdCw1KSwyJmQpe2xldCBmO2dpKGY9bWkoKSkmJihoLmlucHV0RWxlbWVudD1mLmZpcnN0KX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmT3QoInJlc2l6ZSIsZnVuY3Rpb24odil7cmV0dXJuIGgub25SZXNpemUo''@;'; put 'put ''dil9LDAsX3gpfSxpbnB1dHM6e2lucHV0SWQ6ImlucHV0SWQiLHBsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIsdmFsdWU6InZhbHVlIixkaXNhYmxlZDoiZGlzYWJsZWQiLHR5cGU6InR5cGUiLGF1dG9jb21wbGV0ZToiYXV0b2NvbXBsZXRlIix0YWJpbmRleDoidGFiaW5kZXgiLGVtaXRPbmx5''@;'; put 'put ''U2VsZWN0ZWQ6ImVtaXRPbmx5U2VsZWN0ZWQiLGVuYWJsZUxvYWRNb3JlOiJlbmFibGVMb2FkTW9yZSJ9LG91dHB1dHM6e29uSW5wdXRLZXlkb3duOiJvbklucHV0S2V5ZG93biIsb25JbnB1dENoYW5nZToib25JbnB1dENoYW5nZSIsdmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIixvbkxvYWRp''@;'; put 'put ''bmdNb3JlOiJvbkxvYWRpbmdNb3JlIn0sc3RhbmRhbG9uZTohMSxuZ0NvbnRlbnRTZWxlY3RvcnM6UV90LGRlY2xzOjksdmFyczoxNSxjb25zdHM6W1siaW5wdXQiLCIiXSxbIm9wdGlvbnMiLCIiXSxbMSwiYXV0b2NvbXBsZXRlLXdyYXBwZXIiLDMsImtleWRvd24iXSxbInR5cGUiLCJ0ZXh0''@;'; put 'put ''IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwiYXV0b2ZvY3VzIiwiIiwidGFiaW5kZXgiLCIwIiwxLCJpbnB1dC12YWwiLDMsIm5nTW9kZWxDaGFuZ2UiLCJjbGljayIsIm1vdXNlZW50ZXIiLCJmb2N1cyIsImZvY3Vzb3V0Iiwia2V5dXAiLCJpZCIsInBsYWNlaG9sZGVyIiwibmdNb2RlbCIsImRp''@;'; put 'put ''c2FibGVkIl0sWzEsIm92ZXJsYXkiXSxbMSwiZGF0YWxpc3QiLDMsImNsaWNrIiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJzY3JvbGwiLCJuZ1N0eWxlIiwiaWQiXSxbImRhdGEtdHlwZSIsImxvYWQtbW9yZSIsImNsYXNzIiwibG9hZC1tb3JlIiw0LCJuZ0lmIl0sWyJkYXRhLXR5cGUi''@;'; put 'put ''LCJsb2FkLW1vcmUiLDEsImxvYWQtbW9yZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe2lmKDEmZCl7Y29uc3QgZj1PbigpO3NhKCksZGUoMCwiZGl2IiwyKSxPdCgia2V5ZG93biIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25NYWluS2V5ZG93bihNKSl9KSxkZSgxLCJpbnB1''@;'; put 'put ''dCIsMywwKSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGZpKGgudmFsdWUsTSl8fChoLnZhbHVlPU0pLEN0KE0pfSksT3QoImNsaWNrIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbklucHV0Q2xpY2soTSkpfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1''@;'; put 'put ''bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uSW5wdXRGaXJlZChNKSl9KSgibW91c2VlbnRlciIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25JbnB1dE1vdXNlZW50ZXIoTSkpfSkoImZvY3VzIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbklucHV0Rm9jdXNp''@;'; put 'put ''bihNKSl9KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uSW5wdXRGb2N1c291dChNKSl9KSgia2V5dXAiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uSW5wdXRLZXl1cChNKSl9KSxoZSgpLEd0KDMsImRpdiIsNCksZGUoNCwiZGl2Iiw1KSxPdCgi''@;'; put 'put ''Y2xpY2siLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uRGF0YUxpc3RDbGljayhNKSl9KSgibW91c2VlbnRlciIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25EYXRhTGlzdE1vdXNlRW50ZXIoTSkpfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChm''@;'; put 'put ''KSxDdChoLm9uRGF0YUxpc3RNb3VzZUxlYXZlKE0pKX0pKCJzY3JvbGwiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uRGF0YUxpc3RTY3JvbGwoTSkpfSksZGUoNSwiZGl2IixudWxsLDEpLFdyKDcpLGhlKCksZ3QoOCx0d3QsMiwxLCJvcHRpb24iLDYpLGhlKCkoKX1pZigyJmQp''@;'; put 'put ''e2NvbnN0IGY9ZmEoNik7ZmUoKSxFZSgiaWQiLGguaW5wdXRJZCkoInBsYWNlaG9sZGVyIixoLnBsYWNlaG9sZGVyKSxsaSgibmdNb2RlbCIsaC52YWx1ZSksRWUoImRpc2FibGVkIixoLmRpc2FibGVkKSxOcigibGlzdCIsImRhdGFsaXN0XyIraC5pbnB1dElkKSxmZSgyKSx4cigiaGlkZGVu''@;'; put 'put ''IiwhaC5kYXRhbGlzdE9wZW4pLGZlKCkseHIoImhpZGRlbiIsIWguZGF0YWxpc3RPcGVuKSxFZSgibmdTdHlsZSIsbzQoMTIsZXd0LGguaW5wdXRDbGllbnRSZWN0LndpZHRoLGguaW5uZXJIZWlnaHQmJmguaW5wdXRDbGllbnRSZWN0LmJvdHRvbT9oLmlubmVySGVpZ2h0LWguaW5wdXRDbGll''@;'; put 'put ''bnRSZWN0LmJvdHRvbTp2b2lkIDApKSgiaWQiLCJkYXRhbGlzdF8iK2guaW5wdXRJZCksZmUoNCksRWUoIm5nSWYiLGYuY2hpbGRyZW4ubGVuZ3RoPjAmJmguZW5hYmxlTG9hZE1vcmUpfX0sZGVwZW5kZW5jaWVzOltDYSxBdWUseGYsRWYsbmMsaGwscmxdLGVuY2Fwc3VsYXRpb246Mn0pfX1y''@;'; put 'put ''ZXR1cm4gY30pKCksbnd0PSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEsZCl7aWYoInN0cmluZyI9PXR5cGVvZiBhJiZhLmxlbmd0aDwxKXJldHVybiBhO3N3aXRjaChkKXtjYXNlImRhdGUiOnJldHVybiBhaCgpKGEsIkRETU1NWVlZWTpoaDptbTpzcyIpLmZvcm1hdCgiREQvTU0vWVlZWSIp''@;'; put 'put ''O2Nhc2UidGltZSI6e2lmKCJzdHJpbmciIT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3IoIkVycm9yIHBhcnNpbmcgdGltZS4gVmFsdWUgaXMgbm90IHN0cmluZy4iKTtjb25zdCBoPXBhcnNlSW50KGEuc3BsaXQoIjoiKVswXSksZj1wYXJzZUludChhLnNwbGl0KCI6IilbMV0pLHY9cGFyc2VJ''@;'; put 'put ''bnQoYS5zcGxpdCgiOiIpWzJdKTtyZXR1cm5gJHtoPDEwPyIwIitoOmh9OiR7ZjwxMD8iMCIrZjpmfToke3Y8MTA/IjAiK3Y6dn1gfX1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIGE/YTphLnRvU3RyaW5nKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8''@;'; put 'put ''Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXBpcGU9TGwoe25hbWU6ImRhdGVUaW1lRm9ybWF0dGVyIix0eXBlOmMscHVyZTohMCxzdGFuZGFsb25lOiExfSl9fXJldHVybiBjfSkoKTtjb25zdCByd3Q9WyJpbnB1dCJdLGl3dD1bIioiXTtmdW5jdGlvbiBhd3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9''@;'; put 'put ''T24oKTtvaSgwKSxQZSgxLCIgLyAiKSxkZSgyLCJzcGFuIiw1KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDIpLm9uQ2hhbmdlTGFiZWwoInNlY29uZCIpKX0pLFBlKDMpLGhlKCksc2koKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7ZmUoMikseHIoInZhbHVlLXR5''@;'; put 'put ''cGUtc2VsZWN0ZWQiLCJzZWNvbmQiPT09YS5sYWJlbFNlbGVjdGVkKSxmZSgpLENyKGEuc2Vjb25kTGFiZWwpfX1mdW5jdGlvbiBvd3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJsYWJlbCIsNCkoMSwic3BhbiIsNSksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChh''@;'; put 'put ''KSxDdChPZSgpLm9uQ2hhbmdlTGFiZWwoImZpcnN0IikpfSksUGUoMiksaGUoKSxndCgzLGF3dCw0LDMsIm5nLWNvbnRhaW5lciIsNiksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoKTt4cigic2Vjb25kTGFiZWxBY3RpdmUiLGEuc2Vjb25kTGFiZWwmJmEuc2Vjb25kTGFiZWwubGVuZ3RoPjAp''@;'; put 'put ''LGZlKCkseHIoInZhbHVlLXR5cGUtc2VsZWN0ZWQiLCJmaXJzdCI9PT1hLmxhYmVsU2VsZWN0ZWQpLGZlKCksQ3IoYS5sYWJlbCksZmUoKSxFZSgibmdJZiIsYS5zZWNvbmRMYWJlbCl9fWZ1bmN0aW9uIHN3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO29pKDApLGRlKDEsImNsci1kYXRl''@;'; put 'put ''LWNvbnRhaW5lciIpKDIsImlucHV0Iiw3KSxkbCgzLCJkYXRlVGltZUZvcm1hdHRlciIpLE90KCJjbHJEYXRlQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5vbkRhdGVJbnB1dEZpcmVkKGgpKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2Uo''@;'; put 'put ''KS5pbnB1dEZvY3VzZWQ9ITApfSkoImZvY3Vzb3V0IixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmlucHV0Rm9jdXNlZD0hMSl9KSgiZm9jdXNpbiIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkub25Gb2N1c2luSW5wdXQoaCkpfSkoIm1vdXNlb3ZlciIsZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5vbklucHV0TW91c2VPdmVyKCkpfSkoIm1vdXNlb3V0IixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLm9uSW5wdXRNb3VzZU91dCgpKX0pLGhlKCkoKSxzaSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO2ZlKDIpLEVlKCJpZCIsYS5pbnB1''@;'; put 'put ''dElkKSgicGxhY2Vob2xkZXIiLFg3KDMsNSxhLnRlbXAsImRhdGUiKSkoImNsckRhdGUiLGEudmFsdWUpKCJkaXNhYmxlZCIsYS5kaXNhYmxlZCksTnIoImxpc3QiLCJkYXRhbGlzdF8iK2EuaW5wdXRJZCl9fWZ1bmN0aW9uIGx3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO29pKDApLGRl''@;'; put 'put ''KDEsImlucHV0Iiw4KSxPdCgiaW5wdXQiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgpLm9uSW5wdXRGaXJlZChoKSl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuaW5wdXRGb2N1c2VkPSEwKX0pKCJmb2N1c291dCIsZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''d3QoYSksQ3QoT2UoKS5pbnB1dEZvY3VzZWQ9ITEpfSkoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgpLm9uRm9jdXNpbklucHV0KGgpKX0pKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkub25JbnB1dE1vdXNlT3ZlcigpKX0pKCJt''@;'; put 'put ''b3VzZW91dCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5vbklucHV0TW91c2VPdXQoKSl9KSxoZSgpLHNpKCl9aWYoMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSxFZSgidmFsdWUiLGEudmFsdWUpKCJpZCIsYS5pbnB1dElkKSgiZGlzYWJsZWQiLGEuZGlzYWJsZWQpLE5yKCJsaXN0''@;'; put 'put ''IiwiZGF0YWxpc3RfIithLmlucHV0SWQpfX1mdW5jdGlvbiBjd3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtvaSgwKSxkZSgxLCJhcHAtYXV0b2NvbXBsZXRlIiw5LDApLE90KCJvbklucHV0Q2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5vbklucHV0RmlyZWQo''@;'; put 'put ''aCkpfSkoIm9uTG9hZGluZ01vcmUiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgpLmF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKGgpKX0pLFdyKDMpLGhlKCksc2koKX1pZigyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLEVlKCJpbnB1dElkIixhLmlucHV0SWQpKCJ2YWx1ZSIsKG51bGw9''@;'; put 'put ''PWEudmFsdWU/bnVsbDphLnZhbHVlLnRvU3RyaW5nKCkpfHwiIikoImVuYWJsZUxvYWRNb3JlIixhLmVuYWJsZUxvYWRNb3JlKSgiZW1pdE9ubHlTZWxlY3RlZCIsYS5lbWl0T25seVNlbGVjdGVkKSgiZGlzYWJsZWQiLGEuZGlzYWJsZWQpfX1sZXQgSXllPSgoKT0+e2NsYXNzIGN7Y29uc3Ry''@;'; put 'put ''dWN0b3IoKXt0aGlzLmlucHV0SWQ9IiIsdGhpcy52YWx1ZT0iIix0aGlzLmRpc2FibGVkPSExLHRoaXMudHlwZT0idGV4dCIsdGhpcy5kaXNhYmxlU29mdHNlbGVjdD0hMSx0aGlzLmVtaXRPbmx5U2VsZWN0ZWQ9ITEsdGhpcy5lbmFibGVMb2FkTW9yZT0hMSx0aGlzLnZhbHVlQ2hhbmdlPW5l''@;'; put 'put ''dyBYcix0aGlzLm9uSW5wdXRFdmVudD1uZXcgWHIsdGhpcy5mb2N1c2luSW5wdXQ9bmV3IFhyLHRoaXMub25BdXRvY29tcGxldGVMb2FkaW5nTW9yZT1uZXcgWHIsdGhpcy5zZWxlY3RlZExhYmVsQ2hhbmdlPW5ldyBYcix0aGlzLnRlbXA9IiIsdGhpcy5pbnB1dEZvY3VzZWQ9ITEsdGhpcy5s''@;'; put 'put ''YWJlbFNlbGVjdGVkPSJmaXJzdCJ9bmdPbkNoYW5nZXMoYSl7YS52YWx1ZSYmYS52YWx1ZS5jdXJyZW50VmFsdWUhPT1hLnZhbHVlLnByZXZpb3VzVmFsdWUmJnRoaXMudmFsdWVDaGFuZ2UuZW1pdChhLnZhbHVlLmN1cnJlbnRWYWx1ZSl9bmdPbkluaXQoKXt9YXV0b2NvbXBsZXRlTG9hZGlu''@;'; put 'put ''Z01vcmUoYSl7dGhpcy5vbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlLmVtaXQoYSl9b25JbnB1dEZpcmVkKGEpe2NvbnN0IGQ9YS50YXJnZXQudmFsdWU7dGhpcy50ZW1wPWQsdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGQpLHRoaXMub25JbnB1dEV2ZW50LmVtaXQoYSl9b25EYXRlSW5wdXRGaXJl''@;'; put 'put ''ZChhKXt0aGlzLnRlbXA9YSx0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoYSksdGhpcy5vbklucHV0RXZlbnQuZW1pdChhKX1vbklucHV0TW91c2VPdXQoKXt0aGlzLmRpc2FibGVTb2Z0c2VsZWN0fHwodGhpcy52YWx1ZT10aGlzLnRlbXAsdGhpcy50ZW1wPSIiKX1vbklucHV0TW91c2VPdmVyKCl7''@;'; put 'put ''dGhpcy5kaXNhYmxlU29mdHNlbGVjdHx8KHRoaXMudGVtcD10aGlzLnZhbHVlP3RoaXMudmFsdWU6IiIsdGhpcy52YWx1ZT0iIil9b25Gb2N1c2luSW5wdXQoYSl7dGhpcy5mb2N1c2luSW5wdXQuZW1pdChhKX1vbkNoYW5nZUxhYmVsKGEpe3RoaXMubGFiZWxTZWxlY3RlZD1hLHRoaXMuc2Vs''@;'; put 'put ''ZWN0ZWRMYWJlbENoYW5nZS5lbWl0KCJmaXJzdCI9PT1hP3RoaXMubGFiZWw6dGhpcy5zZWNvbmRMYWJlbCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAt''@;'; put 'put ''c29mdC1zZWxlY3QiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiZVYShyd3QsNSksMiZkKXtsZXQgZjtnaShmPW1pKCkpJiYoaC5pbnB1dEVsZW1lbnQ9Zi5maXJzdCl9fSxpbnB1dHM6e2lucHV0SWQ6ImlucHV0SWQiLGxhYmVsOiJsYWJlbCIsc2Vjb25kTGFiZWw6InNlY29u''@;'; put 'put ''ZExhYmVsIix2YWx1ZToidmFsdWUiLGRpc2FibGVkOiJkaXNhYmxlZCIsdHlwZToidHlwZSIsZGlzYWJsZVNvZnRzZWxlY3Q6ImRpc2FibGVTb2Z0c2VsZWN0IixlbWl0T25seVNlbGVjdGVkOiJlbWl0T25seVNlbGVjdGVkIixlbmFibGVMb2FkTW9yZToiZW5hYmxlTG9hZE1vcmUifSxvdXRw''@;'; put 'put ''dXRzOnt2YWx1ZUNoYW5nZToidmFsdWVDaGFuZ2UiLG9uSW5wdXRFdmVudDoib25JbnB1dEV2ZW50Iixmb2N1c2luSW5wdXQ6ImZvY3VzaW5JbnB1dCIsb25BdXRvY29tcGxldGVMb2FkaW5nTW9yZToib25BdXRvY29tcGxldGVMb2FkaW5nTW9yZSIsc2VsZWN0ZWRMYWJlbENoYW5nZToic2Vs''@;'; put 'put ''ZWN0ZWRMYWJlbENoYW5nZSJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W1dvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6aXd0LGRlY2xzOjUsdmFyczo1LGNvbnN0czpbWyJpbnB1dCIsIiJdLFsiY2xhc3MiLCJjbHItY29udHJvbC1sYWJlbCIsMywic2Vjb25kTGFiZWxBY3RpdmUiLDQsIm5nSWYi''@;'; put 'put ''XSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzEsImNsci1jb250cm9sLWxhYmVsIl0sWzMsImNsaWNrIl0sWzQsIm5nSWYiXSxbInR5cGUiLCJkYXRlIiwiY2xyRGF0ZSIsIiIsMywiY2xyRGF0ZUNoYW5nZSIsImZvY3VzIiwiZm9jdXNvdXQiLCJmb2N1c2luIiwibW91c2Vv''@;'; put 'put ''dmVyIiwibW91c2VvdXQiLCJpZCIsInBsYWNlaG9sZGVyIiwiY2xyRGF0ZSIsImRpc2FibGVkIl0sWyJ0eXBlIiwidGltZSIsInN0ZXAiLCIxIiwxLCJpbnB1dC12YWwiLDMsImlucHV0IiwiZm9jdXMiLCJmb2N1c291dCIsImZvY3VzaW4iLCJtb3VzZW92ZXIiLCJtb3VzZW91dCIsInZhbHVl''@;'; put 'put ''IiwiaWQiLCJkaXNhYmxlZCJdLFsidHlwZSIsInRleHQiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJhdXRvZm9jdXMiLCIiLDEsImlucHV0LXZhbCIsMywib25JbnB1dENoYW5nZSIsIm9uTG9hZGluZ01vcmUiLCJpbnB1dElkIiwidmFsdWUiLCJlbmFibGVMb2FkTW9yZSIsImVtaXRPbmx5U2Vs''@;'; put 'put ''ZWN0ZWQiLCJkaXNhYmxlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKHNhKCksZ3QoMCxvd3QsNCw2LCJsYWJlbCIsMSksb2koMSwyKSxndCgyLHN3dCw0LDgsIm5nLWNvbnRhaW5lciIsMykoMyxsd3QsMiw0LCJuZy1jb250YWluZXIiLDMpKDQsY3d0LDQsNSwibmctY29udGFp''@;'; put 'put ''bmVyIiwzKSxzaSgpKSwyJmQmJihFZSgibmdJZiIsaC5sYWJlbCksZmUoKSxFZSgibmdTd2l0Y2giLGgudHlwZSksZmUoKSxFZSgibmdTd2l0Y2hDYXNlIiwiZGF0ZSIpLGZlKCksRWUoIm5nU3dpdGNoQ2FzZSIsInRpbWUiKSxmZSgpLEVlKCJuZ1N3aXRjaENhc2UiLCJ0ZXh0IikpfSxkZXBl''@;'; put 'put ''bmRlbmNpZXM6W0NhLENmLGw0LENzLGRBLG1ILEhYLER5ZSxud3RdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCksZ1M9KCgpPT57Y2xhc3MgY3tzZXQgbmdWYXIoYSl7dGhpcy5jb250ZXh0LiRpbXBsaWNpdD10aGlzLmNvbnRleHQubmdWYXI9YSx0aGlzLmhhc1ZpZXd8fCh0aGlz''@;'; put 'put ''LnZjUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlUmVmLHRoaXMuY29udGV4dCksdGhpcy5oYXNWaWV3PSEwKX1jb25zdHJ1Y3RvcihhLGQpe3RoaXMudGVtcGxhdGVSZWY9YSx0aGlzLnZjUmVmPWQsdGhpcy5jb250ZXh0PXskaW1wbGljaXQ6bnVsbCxuZ1ZhcjpudWxsfSx0''@;'; put 'put ''aGlzLmhhc1ZpZXc9ITF9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUoSWwpLHFlKGJlKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Zcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ1ZhciIsIiJdXSxpbnB1dHM6e25nVmFyOiJuZ1ZhciJ9''@;'; put 'put ''LHN0YW5kYWxvbmU6ITF9KX19cmV0dXJuIGN9KSgpLHV3dD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaGVscGVyU2VydmljZT1hfXRyYW5zZm9ybShhLGQ9ImRheXMiLGg9ITEpe2lmKHZvaWQgMD09PWEmJihhPSIiKSwic3RyaW5nIiE9dHlwZW9mIGEmJihhPWEudG9TdHJp''@;'; put 'put ''bmcoKSksMD09PWEubGVuZ3RoKXtpZigiZGF5cyI9PT1kKXJldHVybiBudWxsO2lmKCJzZWNvbmRzIj09PWQpcmV0dXJuIGg/IjExOjAwOjAwIjpudWxsfWxldCBmPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0U2FzRGF5c1RvSnNEYXRlKGEsZCk7aWYoND09PWEuc3BsaXQoIjoiKS5sZW5n''@;'; put 'put ''dGgpe2NvbnN0IE09YS5zcGxpdCgiOiIpO2Y9bmV3IERhdGUoTVswXSksZi5zZXRIb3VycyhwYXJzZUludChNWzFdKSksZi5zZXRNaW51dGVzKHBhcnNlSW50KE1bMl0pKSxmLnNldFNlY29uZHMocGFyc2VJbnQoTVszXSkpfWVsc2UgaXNOYU4oTnVtYmVyKGEpKSYmKGY9bmV3IERhdGUoYSkp''@;'; put 'put ''O2xldCB2PWAke3RoaXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5nWmVybyhmLmdldEhvdXJzKCkudG9TdHJpbmcoKSl9OiR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGYuZ2V0TWludXRlcygpLnRvU3RyaW5nKCkpfToke3RoaXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5n''@;'; put 'put ''WmVybyhmLmdldFNlY29uZHMoKS50b1N0cmluZygpKX1gO3JldHVybiBoP3Y6Zn1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShMdSwxNikpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPUxsKHtuYW1lOiJzYXNUb0pzRGF0ZSIsdHlwZTpjLHB1''@;'; put 'put ''cmU6ITAsc3RhbmRhbG9uZTohMX0pfX1yZXR1cm4gY30pKCksZHd0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5oZWxwZXJTZXJ2aWNlPWF9dHJhbnNmb3JtKGEpe2lmKG51bGw9PWF8fCIiPT09YSlyZXR1cm4iIjtsZXQgZCxoLGY7aWYoInN0cmluZyI9PXR5cGVvZiBhJiYz''@;'; put 'put ''PT09YS5zcGxpdCgiOiIpLmxlbmd0aCl7Y29uc3Qgdj1hLnNwbGl0KCI6Iik7ZD12WzBdLGg9dlsxXSxmPXZbMl19ZWxzZSJudW1iZXIiIT10eXBlb2YgYSYmKGE9cGFyc2VJbnQoYSkpLGQ9TWF0aC5mbG9vcihhLzM2MDApLGg9TWF0aC5mbG9vcihhJTM2MDAvNjApLGY9TWF0aC5mbG9vcihh''@;'; put 'put ''JTM2MDAlNjApO3JldHVybmAke3RoaXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5nWmVybyhkKX06JHt0aGlzLmhlbHBlclNlcnZpY2UuYWRkTGVhZGluZ1plcm8oaCl9OiR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGYpfWB9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0''@;'; put 'put ''aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUoTHUsMTYpKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1MbCh7bmFtZToic2Vjb25kc1BhcnNlciIsdHlwZTpjLHB1cmU6ITAsc3RhbmRhbG9uZTohMX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgaHd0PShjLGwsYSk9Pih7cXVlcnk6YyxxdWVyeUlu''@;'; put 'put ''ZGV4OmwsY2xhdXNlSW5kZXg6YX0pLGZ3dD0oYyxsLGEsZCk9Pih7cXVlcnk6YyxxdWVyeUluZGV4OmwsY2xhdXNlSW5kZXg6YSxpc0RhdGVUaW1lOmR9KSxwd3Q9KGMsbCxhLGQpPT4oe3JhbmdlOiJzdGFydCIscXVlcnk6YyxxdWVyeVZhbHVlSW5kZXg6MCxxdWVyeUluZGV4OmwsY2xhdXNl''@;'; put 'put ''SW5kZXg6YSxpc0RhdGVUaW1lOmR9KSxnd3Q9KGMsbCxhLGQpPT4oe3JhbmdlOiJlbmQiLHF1ZXJ5OmMscXVlcnlWYWx1ZUluZGV4OjEscXVlcnlJbmRleDpsLGNsYXVzZUluZGV4OmEsaXNEYXRlVGltZTpkfSk7ZnVuY3Rpb24gbXd0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiwyMiks''@;'; put 'put ''UGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0VlKCJzZWxlY3RlZCIsT2UoKS5sb2dpY09wZXJhdG9yc1swXSksZmUoKSxJcigiICIsYSwiICIpfX1mdW5jdGlvbiB2d3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDIzKSxQZSgxLCJcbiAgICAgICAgIiksR3QoMiwicHJvZ3Jl''@;'; put 'put ''c3MiKSxQZSgzLCJcbiAgICAgICIpLGhlKCkpfWZ1bmN0aW9uIHl3dChjLGwpezEmYyYmR3QoMCwiZGl2Iil9ZnVuY3Rpb24gYnd0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiwyMiksUGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0VlKCJzZWxlY3RlZCIsT2UoMiku''@;'; put 'put ''bG9naWNPcGVyYXRvcnNbMF0pLGZlKCksSXIoIiAiLGEsIiAiKX19ZnVuY3Rpb24gX3d0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiYnV0dG9uIiwzMiksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5hZGRHcm91cENsYXVzZSgpKX0pLEd0KDEs''@;'; put 'put ''ImNsci1pY29uIiwzMyksZGUoMiwic3BhbiIpLFBlKDMsIkdyb3VwIiksaGUoKSgpfX1mdW5jdGlvbiB3d3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItaWNvbiIsMzQpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCkuaW5kZXg7cmV0dXJuIEN0''@;'; put 'put ''KE9lKCkucmVtb3ZlR3JvdXBDbGF1c2UoaCkpfSksaGUoKX19ZnVuY3Rpb24gQ3d0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiksUGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksSXIoIiAiLGEuTkFNRSwiICIpfX1mdW5jdGlvbiBTd3QoYyxsKXtpZigxJmMm''@;'; put 'put ''JihkZSgwLCJvcHRpb24iKSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxDcihhKX19ZnVuY3Rpb24gTXd0KGMsbCl7MSZjJiZ6bCgwKX1mdW5jdGlvbiB4d3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDUxKSgxLCJidXR0b24iLDUyKSxP''@;'; put 'put ''dCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgyKS5pbmRleCxmPU9lKCkuaW5kZXgsdj1PZSgpO3JldHVybiB2LmN1cnJlbnRRdWVyeUluZGV4PWgsQ3Qodi5jdXJyZW50Q2xhdXNlSW5kZXg9Zil9KSxQZSgyLCIgQ2hvb3NlIHZhbHVlcyAiKSxoZSgpLGd0KDMsTXd0LDEs''@;'; put 'put ''MCwibmctY29udGFpbmVyIiw1MyksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoMiksZD1hLiRpbXBsaWNpdCxoPWEuaW5kZXgsZj1PZSgpLmluZGV4O09lKCk7Y29uc3Qgdj1mYSgzNyk7ZmUoMyksRWUoIm5nVGVtcGxhdGVPdXRsZXQiLHYpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsa0Uo''@;'; put 'put ''Mixod3QsZCxoLGYpKX19ZnVuY3Rpb24gRXd0KGMsbCl7MSZjJiZ6bCgwKX1mdW5jdGlvbiBUd3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDU0KSxndCgxLEV3dCwxLDAsIm5nLWNvbnRhaW5lciIsNTMpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpLm5nVmFyLGQ9T2UoKSxoPWQuJGltcGxp''@;'; put 'put ''Y2l0LGY9ZC5pbmRleCx2PU9lKCkuaW5kZXgsTT1PZSgpLEQ9ZmEoMzEpLFU9ZmEoMzMpO2ZlKCksRWUoIm5nVGVtcGxhdGVPdXRsZXQiLGEmJk0udXNlUGlja2Vycz9EOlUpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsY1AoMixmd3QsaCxmLHYsYSkpfX1mdW5jdGlvbiBBd3QoYyxsKXsx''@;'; put 'put ''JmMmJnpsKDApfWZ1bmN0aW9uIGt3dChjLGwpezEmYyYmemwoMCl9ZnVuY3Rpb24gRHd0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw1NSkoMSwiZGl2Iiw1NiksZ3QoMixBd3QsMSwwLCJuZy1jb250YWluZXIiLDUzKSxoZSgpLGRlKDMsImRpdiIsNTcpLGd0KDQsa3d0LDEsMCwibmctY29u''@;'; put 'put ''dGFpbmVyIiw1MyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKS5uZ1ZhcixkPU9lKCksaD1kLiRpbXBsaWNpdCxmPWQuaW5kZXgsdj1PZSgpLmluZGV4LE09T2UoKSxEPWZhKDMxKSxVPWZhKDM1KTtmZSgyKSxFZSgibmdUZW1wbGF0ZU91dGxldCIsYSYmTS51c2VQaWNrZXJzP0Q6VSkoIm5n''@;'; put 'put ''VGVtcGxhdGVPdXRsZXRDb250ZXh0IixjUCg0LHB3dCxoLGYsdixhKSksZmUoMiksRWUoIm5nVGVtcGxhdGVPdXRsZXQiLGEmJk0udXNlUGlja2Vycz9EOlUpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsY1AoOSxnd3QsaCxmLHYsYSkpfX1mdW5jdGlvbiBJd3QoYyxsKXtpZigxJmMpe2Nv''@;'; put 'put ''bnN0IGE9T24oKTtkZSgwLCJkaXYiLDU4KSgxLCJsYWJlbCIsNyksUGUoMiwiVmFsdWUiKSxoZSgpLGRlKDMsImlucHV0Iiw1OSksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoMikuJGltcGxpY2l0O3JldHVybiBmaShmLnZhbHVlLGgpfHwoZi52YWx1''@;'; put 'put ''ZT1oKSxDdChoKX0pLE90KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDIpLmluZGV4LHY9T2UoKS5pbmRleDtyZXR1cm4gQ3QoT2UoKS5zZXRWYXJpYWJsZVZhbHVlcyhoLGYsdikpfSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgyKS4kaW1wbGljaXQ7''@;'; put 'put ''ZmUoMyksbGkoIm5nTW9kZWwiLGEudmFsdWUpfX1mdW5jdGlvbiBSd3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQ2KSxndCgxLHh3dCw0LDYsImRpdiIsNDcpKDIsVHd0LDIsNywiZGl2Iiw0OCkoMyxEd3QsNSwxNCwiZGl2Iiw0OSkoNCxJd3QsNCwxLCJkaXYiLDUwKSxoZSgpKSwyJmMp''@;'; put 'put ''e2NvbnN0IGE9T2UoKS4kaW1wbGljaXQ7ZmUoKSxFZSgibmdJZiIsIklOIj09PWEub3BlcmF0b3J8fCJOT1QgSU4iPT09YS5vcGVyYXRvciksZmUoKSxFZSgibmdJZiIsIkJFVFdFRU4iIT09YS5vcGVyYXRvciYmIklOIiE9PWEub3BlcmF0b3ImJiJOT1QgSU4iIT09YS5vcGVyYXRvciYmIkxJ''@;'; put 'put ''S0UiIT09YS5vcGVyYXRvciYmIkNPTlRBSU5TIiE9PWEub3BlcmF0b3ImJiJCRUdJTlNfV0lUSCIhPT1hLm9wZXJhdG9yKSxmZSgpLEVlKCJuZ0lmIiwiQkVUV0VFTiI9PT1hLm9wZXJhdG9yKSxmZSgpLEVlKCJuZ0lmIiwiTElLRSI9PT1hLm9wZXJhdG9yfHwiQkVHSU5TX1dJVEgiPT09YS5v''@;'; put 'put ''cGVyYXRvcnx8IkNPTlRBSU5TIj09PWEub3BlcmF0b3IpfX1mdW5jdGlvbiBMd3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDEwKSgxLCJkaXYiLDM1KSgyLCJkaXYiLDM2KSgzLCJhcHAtc29mdC1zZWxlY3QiLDM3KSxjaSgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgp''@;'; put 'put ''e2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0O3JldHVybiBmaShmLnZhcmlhYmxlLGgpfHwoZi52YXJpYWJsZT1oKSxDdChoKX0pLE90KCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSksdj1mLiRpbXBsaWNpdCxNPWYuaW5kZXgsRD1PZSgpLmluZGV4O3JldHVybiBDdChP''@;'; put 'put ''ZSgpLnZhcmlhYmxlSW5wdXRDaGFuZ2Uodi52YXJpYWJsZSxNLEQsaCkpfSksZ3QoNCxDd3QsMiwxLCJvcHRpb24iLDM4KSxoZSgpKCkoKSxkZSg1LCJkaXYiLDM5KSg2LCJjbHItc2VsZWN0LWNvbnRhaW5lciIpKDcsImxhYmVsIiksUGUoOCwiT3BlcmF0b3IiKSxoZSgpLGRlKDksInNlbGVj''@;'; put 'put ''dCIsNDApLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gZmkoZi5vcGVyYXRvcixoKXx8KGYub3BlcmF0b3I9aCksQ3QoaCl9KSxPdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLGY9aC4kaW1wbGlj''@;'; put 'put ''aXQsdj1oLmluZGV4LE09T2UoKS5pbmRleDtyZXR1cm4gQ3QoT2UoKS5zZXRWYXJpYWJsZU9wZXJhdG9yKHYsZi5vcGVyYXRvcixNKSl9KSxndCgxMCxTd3QsMiwxLCJvcHRpb24iLDM4KSxoZSgpKCkoKSxndCgxMSxSd3QsNSw0LCJkaXYiLDQxKSxkZSgxMiwiZGl2Iiw0MikoMTMsImJ1dHRv''@;'; put 'put ''biIsNDMpLE90KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLmluZGV4LGY9T2UoKS5pbmRleDtyZXR1cm4gQ3QoT2UoKS5yZW1vdmVDbGF1c2UoaCxmKSl9KSxHdCgxNCwiY2xyLWljb24iLDQ0KSgxNSwic3BhbiIpLGhlKCksZGUoMTYsImJ1dHRvbiIsNDUpLE90KCJjbGljayIs''@;'; put 'put ''ZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCkuaW5kZXg7cmV0dXJuIEN0KE9lKCkuYWRkQ2xhdXNlKGgpKX0pLEd0KDE3LCJjbHItaWNvbiIsMzMpKDE4LCJzcGFuIiksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleCxoPU9lKCkuaW5kZXgsZj1PZSgp''@;'; put 'put ''O3hyKCJpbnZhbGlkLWNsYXVzZSIsYS5pbnZhbGlkQ2xhdXNlKSxmZSgzKSxFZSgiaWQiLCJzZWxlY3RfdmFsc192YXJfaWQiK2QrIl8iK2gpKCJpbnB1dElkIiwidmFsc192YXJfaWQiK2QrIl8iK2gpKCJlbWl0T25seVNlbGVjdGVkIiwhMCksbGkoInZhbHVlIixhLnZhcmlhYmxlKSxmZSgp''@;'; put 'put ''LEVlKCJuZ0Zvck9mIixmLmNvbHMpLGZlKDUpLGxpKCJuZ01vZGVsIixhLm9wZXJhdG9yKSxmZSgpLEVlKCJuZ0Zvck9mIixhLm9wZXJhdG9ycyksZmUoKSxFZSgibmdWYXIiLCJEQVRFIj09PWEuZGR0eXBlfHwiREFURVRJTUUiPT09YS5kZHR5cGV8fCJUSU1FIj09PWEuZGR0eXBlKSxmZSgy''@;'; put 'put ''KSxFZSgiZGlzYWJsZWQiLDE9PT1mLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHMubGVuZ3RoKX19ZnVuY3Rpb24gT3d0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2IiwyNCkoMSwiZGl2IiwxMCkoMiwiZGl2IiwyNSkoMywiZGl2IiwyNikoNCwiY2xyLXNlbGVjdC1j''@;'; put 'put ''b250YWluZXIiKSg1LCJsYWJlbCIpLFBlKDYsIkxvZ2ljIiksaGUoKSxkZSg3LCJzZWxlY3QiLDI3KSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIGZpKGYuY2xhdXNlTG9naWMsaCl8fChmLmNsYXVzZUxvZ2ljPWgpLEN0KGgp''@;'; put 'put ''fSksT3QoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuc2V0TG9naWMoKSl9KSxndCg4LGJ3dCwyLDIsIm9wdGlvbiIsMTMpLGhlKCkoKSgpLEd0KDksImJyIiksZ3QoMTAsX3d0LDQsMCwiYnV0dG9uIiwyOCksaGUoKSxkZSgxMSwiZGl2IiwyOSksZ3Qo''@;'; put 'put ''MTIsd3d0LDEsMCwiY2xyLWljb24iLDMwKSgxMyxMd3QsMTksMTEsImRpdiIsMzEpLGhlKCkoKSxHdCgxNCwiYnIiKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPU9lKCk7ZmUoKSx4cigiaW52YWxpZC1jbGF1c2UiLGEuaW52YWxpZENsYXVzZSksZmUoNiksbGkoIm5nTW9k''@;'; put 'put ''ZWwiLGEuY2xhdXNlTG9naWMpLEVlKCJkaXNhYmxlZCIsYS5lbGVtZW50cy5sZW5ndGg8MiksZmUoKSxFZSgibmdGb3JPZiIsZC5sb2dpY09wZXJhdG9ycyksZmUoMiksRWUoIm5nSWYiLGQuaW5uZXJXaWR0aD43NjgpLGZlKDIpLEVlKCJuZ0lmIixkLmNsYXVzZXMucXVlcnlPYmoubGVuZ3Ro''@;'; put 'put ''PjEpLGZlKCksRWUoIm5nRm9yT2YiLGEuZWxlbWVudHMpfX1mdW5jdGlvbiBQd3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtvaSgwKSxkZSgxLCJhcHAtc29mdC1zZWxlY3QiLDYyKSxkbCgyLCJzYXNUb0pzRGF0ZSIpLGRsKDMsInNhc1RvSnNEYXRlIiksT3QoInZhbHVlQ2hhbmdlIixm''@;'; put 'put ''dW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCksdj1mLnF1ZXJ5LE09Zi5xdWVyeVZhbHVlSW5kZXgsRD1mLnF1ZXJ5SW5kZXgsVT1mLmNsYXVzZUluZGV4O3JldHVybiBDdChPZSgpLmRhdGVDaGFuZ2UoaCx2LEQsVSxNKSl9KSxoZSgpLHNpKCl9aWYoMiZjKXtjb25zdCBhPU9lKCksZD1h''@;'; put 'put ''LnF1ZXJ5LGg9YS5xdWVyeVZhbHVlSW5kZXgsZj1hLnF1ZXJ5SW5kZXgsdj1hLmNsYXVzZUluZGV4O2ZlKCksRWUoImRpc2FibGVTb2Z0c2VsZWN0IiwhMCkoImlucHV0SWQiLCJ2YWxzX2RhdGUiK2YrIl8iK3YpKCJ2YWx1ZSIsdm9pZCAwIT09aD9qYygyLDMsZC52YWx1ZVtoXSk6amMoMyw1''@;'; put 'put ''LGQudmFsdWUpKX19ZnVuY3Rpb24gRnd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7b2koMCksZGUoMSwiYXBwLXNvZnQtc2VsZWN0Iiw2MyksZGwoMiwic2FzVG9Kc0RhdGUiKSxkbCgzLCJzYXNUb0pzRGF0ZSIpLE90KCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3Qg''@;'; put 'put ''Zj1PZSgpLHY9Zi5xdWVyeUluZGV4LE09Zi5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoT2UoKS5nZXRRdWVyeURhdGVUaW1lKE0sdikuZGF0ZT1oKX0pKCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpLGY9aC5xdWVyeSx2PWgucXVlcnlWYWx1ZUluZGV4LE09aC5x''@;'; put 'put ''dWVyeUluZGV4LEQ9aC5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoT2UoKS5kYXRlVGltZUNoYW5nZShmLE0sRCx2KSl9KSxoZSgpLGRlKDQsImFwcC1zb2Z0LXNlbGVjdCIsNjQpLGRsKDUsInNhc1RvSnNEYXRlIiksZGwoNiwic2FzVG9Kc0RhdGUiKSxPdCgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9u''@;'; put 'put ''KGgpe3d0KGEpO2NvbnN0IGY9T2UoKSx2PWYucXVlcnlJbmRleCxNPWYuY2xhdXNlSW5kZXg7cmV0dXJuIEN0KE9lKCkuZ2V0UXVlcnlEYXRlVGltZShNLHYpLnRpbWU9aCl9KSgib25JbnB1dEV2ZW50IixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKSxmPWgucXVlcnksdj1oLnF1ZXJ5''@;'; put 'put ''VmFsdWVJbmRleCxNPWgucXVlcnlJbmRleCxEPWguY2xhdXNlSW5kZXg7cmV0dXJuIEN0KE9lKCkuZGF0ZVRpbWVDaGFuZ2UoZixNLEQsdikpfSksaGUoKSxzaSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpLGQ9YS5xdWVyeSxoPWEucXVlcnlWYWx1ZUluZGV4LGY9YS5xdWVyeUluZGV4LHY9YS5j''@;'; put 'put ''bGF1c2VJbmRleDtmZSgpLEVlKCJkaXNhYmxlU29mdHNlbGVjdCIsITApKCJpbnB1dElkIiwidmFsc19kYXRlIitmKyJfIit2KSgidmFsdWUiLHZvaWQgMCE9PWg/WDcoMiw2LGQudmFsdWVbaF0sInNlY29uZHMiKTpYNygzLDksZC52YWx1ZSwic2Vjb25kcyIpKSxmZSgzKSxFZSgiZGlzYWJs''@;'; put 'put ''ZVNvZnRzZWxlY3QiLCEwKSgiaW5wdXRJZCIsInZhbHNfdGltZSIrZisiXyIrdikoInZhbHVlIix2b2lkIDAhPT1oPyRZKDUsMTIsZC52YWx1ZVtoXSwic2Vjb25kcyIsITApOiRZKDYsMTYsZC52YWx1ZSwic2Vjb25kcyIsITApKX19ZnVuY3Rpb24gSHd0KGMsbCl7aWYoMSZjKXtjb25zdCBh''@;'; put 'put ''PU9uKCk7b2koMCksZGUoMSwiYXBwLXNvZnQtc2VsZWN0Iiw2NSksZGwoMiwic2Vjb25kc1BhcnNlciIpLGRsKDMsInNlY29uZHNQYXJzZXIiKSxPdCgib25JbnB1dEV2ZW50IixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCksdj1mLnF1ZXJ5LE09Zi5xdWVyeVZhbHVlSW5kZXgsRD1m''@;'; put 'put ''LnF1ZXJ5SW5kZXgsVT1mLmNsYXVzZUluZGV4O3JldHVybiBDdChPZSgpLnRpbWVDaGFuZ2UoaCx2LEQsVSxNKSl9KSxoZSgpLHNpKCl9aWYoMiZjKXtjb25zdCBhPU9lKCksZD1hLnF1ZXJ5LGg9YS5xdWVyeVZhbHVlSW5kZXgsZj1hLnF1ZXJ5SW5kZXgsdj1hLmNsYXVzZUluZGV4O2ZlKCks''@;'; put 'put ''RWUoImRpc2FibGVTb2Z0c2VsZWN0IiwhMCkoImlucHV0SWQiLCJ2YWxzXyIrZisiXyIrdikoInZhbHVlIix2b2lkIDAhPT1oP2pjKDIsMyxkLnZhbHVlW2hdKTpqYygzLDUsZC52YWx1ZSkpfX1mdW5jdGlvbiBOd3QoYyxsKXsxJmMmJihvaSgwLDYwKSxndCgxLFB3dCw0LDcsIm5nLWNvbnRh''@;'; put 'put ''aW5lciIsNjEpKDIsRnd0LDcsMjAsIm5nLWNvbnRhaW5lciIsNjEpKDMsSHd0LDQsNywibmctY29udGFpbmVyIiw2MSksc2koKSksMiZjJiYoRWUoIm5nU3dpdGNoIixsLnF1ZXJ5LmRkdHlwZSksZmUoKSxFZSgibmdTd2l0Y2hDYXNlIiwiREFURSIpLGZlKCksRWUoIm5nU3dpdGNoQ2FzZSIs''@;'; put 'put ''IkRBVEVUSU1FIiksZmUoKSxFZSgibmdTd2l0Y2hDYXNlIiwiVElNRSIpKX1mdW5jdGlvbiBWd3QoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDY4KSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7RWUoInZhbHVlIixhLnVuZm9ybWF0dGVkKSxmZSgpLElyKCIgIixh''@;'; put 'put ''LmZvcm1hdHRlZC50cmltKCksIiAiKX19ZnVuY3Rpb24gQnd0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiksZ3QoMSxWd3QsMiwyLCJvcHRpb24iLDY3KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKS5xdWVyeTtmZSgpLEVlKCJuZ0Zvck9mIixhLnZhbHVlcyl9fWZ1bmN0aW9uIGp3dChjLGwp''@;'; put 'put ''e2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsNjgpLFBlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpLiRpbXBsaWNpdDtFZSgidmFsdWUiLGEuTkFNRSksZmUoKSxJcigiICIsYS5OQU1FLCIgIil9fWZ1bmN0aW9uIHp3dChjLGwpe2lmKDEmYyYmKG9pKDApLGd0KDEsand0LDIsMiwib3B0aW9u''@;'; put 'put ''Iiw2OSksc2koKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9T2UoMikucXVlcnk7ZmUoKSxFZSgibmdJZiIsYS5UWVBFPT09ZC50eXBlKX19ZnVuY3Rpb24gVXd0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiksZ3QoMSx6d3QsMiwxLCJuZy1jb250YWluZXIiLDM4KSxoZSgpKSwyJmMp''@;'; put 'put ''e2NvbnN0IGE9T2UoMik7ZmUoKSxFZSgibmdGb3JPZiIsYS5jb2xzKX19ZnVuY3Rpb24gWnd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiYXBwLXNvZnQtc2VsZWN0Iiw2NiksT3QoInNlbGVjdGVkTGFiZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkucXVlcnk7''@;'; put 'put ''cmV0dXJuIEN0KE9lKCkuc2VsZWN0ZWRMYWJlbENoYW5nZShoLGYpKX0pLGNpKCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS5xdWVyeTtyZXR1cm4gZmkoZi52YWx1ZSxoKXx8KGYudmFsdWU9aCksQ3QoaCl9KSxPdCgib25JbnB1dEV2ZW50IixmdW5jdGlvbihoKXtj''@;'; put 'put ''b25zdCBmPXd0KGEpLHY9Zi5xdWVyeUluZGV4LE09Zi5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoT2UoKS5zZXRWYXJpYWJsZVZhbHVlcyhoLnRhcmdldC52YWx1ZSx2LE0pKX0pKCJvbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLHY9Zi5xdWVyeSxN''@;'; put 'put ''PWYucXVlcnlJbmRleCxEPWYuY2xhdXNlSW5kZXg7cmV0dXJuIEN0KE9lKCkub25BdXRvY29tcGxldGVMb2FkaW5nTW9yZShoLHYudmFyaWFibGUsTSxEKSl9KSxndCgxLEJ3dCwyLDEsImRpdiIsMjApKDIsVXd0LDIsMSwiZGl2IiwyMCksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC5xdWVyeSxk''@;'; put 'put ''PWwucXVlcnlJbmRleCxoPWwuY2xhdXNlSW5kZXg7RWUoInNlY29uZExhYmVsIiwiVmFyaWFibGUiKSgiZW1pdE9ubHlTZWxlY3RlZCIsYS52YWx1ZVZhcmlhYmxlKSgiaW5wdXRJZCIsInZhbHNfIitkKyJfIitoKSxsaSgidmFsdWUiLGEudmFsdWUpLEVlKCJlbmFibGVMb2FkTW9yZSIsYS5u''@;'; put 'put ''b2JzPmEudmFsdWVzLmxlbmd0aCksZmUoKSxFZSgibmdJZiIsIWEudmFsdWVWYXJpYWJsZSksZmUoKSxFZSgibmdJZiIsYS52YWx1ZVZhcmlhYmxlKX19ZnVuY3Rpb24gV3d0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiw2OCksUGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxp''@;'; put 'put ''Y2l0O0VlKCJ2YWx1ZSIsYS5mb3JtYXR0ZWQpLGZlKCksSXIoIiAiLGEuZm9ybWF0dGVkLCIgIil9fWZ1bmN0aW9uIFl3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImFwcC1zb2Z0LXNlbGVjdCIsNzApLGNpKCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChh''@;'; put 'put ''KSx2PWYucXVlcnksTT1mLnF1ZXJ5VmFsdWVJbmRleDtyZXR1cm4gZmkodi52YWx1ZVtNXSxoKXx8KHYudmFsdWVbTV09aCksQ3QoaCl9KSxPdCgib25JbnB1dEV2ZW50IixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSksZj1oLnF1ZXJ5LHY9aC5xdWVyeUluZGV4LE09aC5jbGF1c2VJbmRleDty''@;'; put 'put ''ZXR1cm4gQ3QoT2UoKS5zZXRWYXJpYWJsZVZhbHVlcyhmLnZhbHVlLHYsTSkpfSkoIm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSksdj1mLnF1ZXJ5LE09Zi5xdWVyeUluZGV4LEQ9Zi5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoT2UoKS5vbkF1dG9j''@;'; put 'put ''b21wbGV0ZUxvYWRpbmdNb3JlKGgsdi52YXJpYWJsZSxNLEQpKX0pLGd0KDEsV3d0LDIsMiwib3B0aW9uIiw2NyksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC5yYW5nZSxkPWwucXVlcnksaD1sLnF1ZXJ5VmFsdWVJbmRleDtFZSgiaW5wdXRJZCIsInZhbHMtIithKyJfIitsLnF1ZXJ5SW5kZXgr''@;'; put 'put ''Il8iK2wuY2xhdXNlSW5kZXgpLGxpKCJ2YWx1ZSIsZC52YWx1ZVtoXSksRWUoImVuYWJsZUxvYWRNb3JlIixkLm5vYnM+ZC52YWx1ZXMubGVuZ3RoKSgiZGlzYWJsZWQiLHZvaWQgMCE9PWgmJiJzdGFydCIhPT1hJiYhZC52YWx1ZVswXSksZmUoKSxFZSgibmdGb3JPZiIsZC52YWx1ZXMpfX1m''@;'; put 'put ''dW5jdGlvbiBHd3QoYyxsKXsxJmMmJihkZSgwLCJoNSIsNzgpLFBlKDEsIiBObyB2YWx1ZXMgYXZhaWxhYmxlLiAiKSxoZSgpKX1mdW5jdGlvbiAkd3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDEsImlucHV0Iiw4MCksY2koIm5nTW9k''@;'; put 'put ''ZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuaW5kZXgsdj1PZSgyKS5xdWVyeTtyZXR1cm4gZmkodi52YWx1ZVtmXS5jaGVja2VkLGgpfHwodi52YWx1ZVtmXS5jaGVja2VkPWgpLEN0KGgpfSksT3QoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9''@;'; put 'put ''T2UoMiksdj1mLnF1ZXJ5SW5kZXgsTT1mLmNsYXVzZUluZGV4O3JldHVybiBDdChPZSgpLnNldFZhcmlhYmxlVmFsdWVzKGgsdixNKSl9KSxoZSgpLGRlKDIsImxhYmVsIiksUGUoMyksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1PZSgyKS5xdWVyeTtm''@;'; put 'put ''ZSgpLGxpKCJuZ01vZGVsIixoLnZhbHVlW2RdLmNoZWNrZWQpLGZlKDIpLElyKCIgIixhLmZvcm1hdHRlZCwiICIpfX1mdW5jdGlvbiBLd3QoYyxsKXtpZigxJmMmJihkZSgwLCJzZWN0aW9uIiw3OSkoMSwiY2xyLWNoZWNrYm94LWNvbnRhaW5lciIpLGd0KDIsJHd0LDQsMiwiY2xyLWNoZWNr''@;'; put 'put ''Ym94LXdyYXBwZXIiLDM4KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgpLnF1ZXJ5O2ZlKDIpLEVlKCJuZ0Zvck9mIixhLnZhbHVlcyl9fWZ1bmN0aW9uIFh3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1tb2RhbCIsNzEpKDEsImgzIiw3MiksUGUoMiwiU2VsZWN0IHZh''@;'; put 'put ''bHVlcyIpLGhlKCksZGUoMywiZGl2Iiw3MyksZ3QoNCxHd3QsMiwwLCJoNSIsNzQpKDUsS3d0LDMsMSwic2VjdGlvbiIsNzUpLGhlKCksZGUoNiwiZGl2Iiw3NikoNywiYnV0dG9uIiw3NyksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKTtyZXR1cm4gaC5jdXJyZW50''@;'; put 'put ''UXVlcnlJbmRleD0tMSxDdChoLmN1cnJlbnRDbGF1c2VJbmRleD0tMSl9KSxQZSg4LCIgQXBwbHkgIiksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwucXVlcnksZD1sLnF1ZXJ5SW5kZXgsaD1sLmNsYXVzZUluZGV4LGY9T2UoKTtFZSgiY2xyTW9kYWxPcGVuIixmLmN1cnJlbnRRdWVyeUlu''@;'; put 'put ''ZGV4PT09ZCYmZi5jdXJyZW50Q2xhdXNlSW5kZXg9PT1oKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDQpLEVlKCJuZ0lmIiwhZi5pc0FycihhLnZhbHVlKSksZmUoKSxFZSgibmdJZiIsZi5pc0FycihhLnZhbHVlKSl9fSFmdW5jdGlvbiBSVmUoYyxsLGEpeyhmdW5jdGlvbiBWU2UoYyxs''@;'; put 'put ''LGEpeyJzdHJpbmciIT10eXBlb2YgbCYmKGE9bCxsPWNbYWMuTG9jYWxlSWRdKSxsPWwudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKSx4X1tsXT1jLGEmJih4X1tsXVthYy5FeHRyYURhdGFdPWEpfSkoYyxsLGEpfShxX3QpO2xldCB1YWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rv''@;'; put 'put ''cihhLGQsaCxmKXt0aGlzLnNhc1N0b3JlU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5oZWxwZXJTZXJ2aWNlPWgsdGhpcy5jZGY9Zix0aGlzLmNhY2hpbmc9ITAsdGhpcy5yb3dzX2luY3JlbWVudD0xMDAsdGhpcy5pbml0aWFsX3Jvd3M9MWUzLHRoaXMuY2xhdXNlQW10PVsi''@;'; put 'put ''Il0sdGhpcy5udW1PcGVyYXRvcnM9WyI9IiwiPCIsIj4iLCI8PSIsIj49IiwiQkVUV0VFTiIsIklOIiwiTk9UIElOIiwiTkUiXSx0aGlzLmNoYXJPcGVyYXRvcnM9WyI9IiwiPCIsIj4iLCI8PSIsIj49IiwiQ09OVEFJTlMiLCJJTiIsIk5PVCBJTiIsIk5FIl0sdGhpcy5ub3RJbj0hMSx0aGlz''@;'; put 'put ''Lm5vdEFycj0hMCx0aGlzLndhc0JldHdlZW49ITEsdGhpcy53aGVyZUNsYXVzZUxvYWRpbmc9ITEsdGhpcy5keW5hbWljV2hlcmVDbGF1c2U9ITAsdGhpcy51c2VQaWNrZXJzPSExLHRoaXMucXVlcnlPYmo9e2VsZW1lbnRzOlt7bG9naWM6bnVsbCx0eXBlOm51bGwsZGR0eXBlOm51bGwsdmFy''@;'; put 'put ''aWFibGU6bnVsbCxvcGVyYXRvcjpudWxsLHZhbHVlOm51bGwsdmFsdWVWYXJpYWJsZTohMSxzdGFydHJvdzowLHJvd3M6MCxub2JzOjAsdmFsdWVzOltdLG9wZXJhdG9yczpbXX1dLGNsYXVzZUxvZ2ljOiIiLGludmFsaWRDbGF1c2U6ITF9LHRoaXMuc2VsVmFyPXtpbmRleDpudWxsLGZvcm1h''@;'; put 'put ''dDpudWxsLHR5cGU6bnVsbH0sdGhpcy5pbk9iaj1be2NoZWNrZWQ6ITEsdmFsdWU6bnVsbH1dLHRoaXMuZ3JvdXBMb2dpYz0iQU5EIix0aGlzLmNsYXVzZXM9e3F1ZXJ5T2JqOlt0aGlzLnF1ZXJ5T2JqXSxjbGF1c2VMb2dpYzpbXSxncm91cExvZ2ljOnRoaXMuZ3JvdXBMb2dpY30sdGhpcy5s''@;'; put 'put ''b2dpY09wZXJhdG9ycz1bIkFORCIsIk9SIl0sdGhpcy5xdWVyeURhdGVUaW1lPVtdLHRoaXMuY3VycmVudENsYXVzZUluZGV4PS0xLHRoaXMuY3VycmVudFF1ZXJ5SW5kZXg9LTEsdGhpcy5wZW5kaW5nSU5WYWx1ZXNTZXQ9bnVsbCx0aGlzLmlubmVyV2lkdGg9d2luZG93LnNjcmVlbi53aWR0''@;'; put 'put ''aCx0aGlzLmlubmVyV2lkdGg+NzY4JiYodGhpcy5ub0JvcmRlcj0iYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCBncmF5OyIpfWdldFF1ZXJ5RGF0ZVRpbWUoYSxkKXtsZXQgaD10aGlzLnF1ZXJ5RGF0ZVRpbWUuZmluZChmPT5mLmNsYXVzZUluZGV4PT09YSYmZi5xdWVyeUluZGV4PT09ZCk7aWYo''@;'; put 'put ''IWgpe2NvbnN0IGY9dGhpcy5xdWVyeURhdGVUaW1lLnB1c2goe2NsYXVzZUluZGV4OmEscXVlcnlJbmRleDpkLGRhdGU6IiIsdGltZToiIn0pLTE7aD10aGlzLnF1ZXJ5RGF0ZVRpbWVbZl19cmV0dXJuIGh9dXNlUGlja2Vyc0NoYW5nZSgpe3RoaXMucXVlcnlEYXRlVGltZT1bXSx0aGlzLnVz''@;'; put 'put ''ZVBpY2tlcnMmJnRoaXMuY2xhdXNlcy5xdWVyeU9iai5mb3JFYWNoKGE9PnthLmVsZW1lbnRzLmZvckVhY2goZD0+e1siREFURVRJTUUiLCJUSU1FIiwiREFURSJdLmluY2x1ZGVzKGQuZGR0eXBlKSYmZC52YWx1ZVZhcmlhYmxlJiYoZC52YWx1ZT0iIixkLnZhbHVlVmFyaWFibGU9ITEpfSl9''@;'; put 'put ''KX1yZXNldEZpbHRlcigpe3RoaXMud2hlcmVTdHJpbmc9dm9pZCAwLHRoaXMud2hlcmVDbGF1c2U9dm9pZCAwLHRoaXMucXVlcnlPYmo9e2VsZW1lbnRzOlt7bG9naWM6bnVsbCx0eXBlOm51bGwsZGR0eXBlOm51bGwsdmFyaWFibGU6bnVsbCxvcGVyYXRvcjpudWxsLHZhbHVlOm51bGwsdmFs''@;'; put 'put ''dWVzOltdLG9wZXJhdG9yczpbXX1dfSx0aGlzLmNsYXVzZXM9e3F1ZXJ5T2JqOlt0aGlzLnF1ZXJ5T2JqXSxjbGF1c2VMb2dpYzpbXSxncm91cExvZ2ljOnRoaXMuZ3JvdXBMb2dpY30sdGhpcy53aGVyZUNsYXVzZUZuKCEwKX1zZXRUb0dsb2JhbHMoKXtpZighdGhpcy5jYWNoaW5nKXJldHVy''@;'; put 'put ''bjtsZXQgYT0iIjsiaG9tZSI9PT1Ybi5yb290UGFyYW18fCJlZGl0b3IiPT09WG4ucm9vdFBhcmFtP2E9dGhpcy52aWV3Ym94SWQ/YHZpZXdib3hlcy4ke3RoaXMudmlld2JveElkfWA6ImVkaXRvciI6InZpZXciPT09WG4ucm9vdFBhcmFtJiYoYT0idmlld2VyIiksQWMoWG4sYSkuZmlsdGVy''@;'; put 'put ''Lmdyb3VwTG9naWM9dGhpcy5ncm91cExvZ2ljLCJzdHJpbmciPT10eXBlb2YgdGhpcy53aGVyZUNsYXVzZSYmKEFjKFhuLGEpLmZpbHRlci53aGVyZUNsYXVzZT10aGlzLndoZXJlQ2xhdXNlKSwic3RyaW5nIj09dHlwZW9mIHRoaXMubGliZHMmJihBYyhYbixhKS5maWx0ZXIubGliZHM9dGhp''@;'; put 'put ''cy5saWJkcyksQWMoWG4sYSkuZmlsdGVyLmNsYXVzZXM9dGhpcy5jbGF1c2VzfWdldEZyb21HbG9iYWxzKCl7aWYoIXRoaXMuY2FjaGluZylyZXR1cm47bGV0IGE9IiI7ImhvbWUiPT09WG4ucm9vdFBhcmFtfHwiZWRpdG9yIj09PVhuLnJvb3RQYXJhbT9hPXRoaXMudmlld2JveElkP2B2aWV3''@;'; put 'put ''Ym94ZXMuJHt0aGlzLnZpZXdib3hJZH1gOiJlZGl0b3IiOiJ2aWV3Ij09PVhuLnJvb3RQYXJhbSYmKGE9InZpZXdlciIpLEFjKFhuLGEpLmZpbHRlci5jb2xzLmxlbmd0aD4wJiYodGhpcy5jb2xzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoQWMoWG4sYSkuZmlsdGVyLmNvbHMpKSksQWMo''@;'; put 'put ''WG4sYSkuZmlsdGVyLnZhbHMubGVuZ3RoPjAmJih0aGlzLnZhbHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShBYyhYbixhKS5maWx0ZXIudmFscykpKSwiIiE9PUFjKFhuLGEpLmZpbHRlci5ncm91cExvZ2ljJiYodGhpcy5ncm91cExvZ2ljPUFjKFhuLGEpLmZpbHRlci5ncm91cExvZ2lj''@;'; put 'put ''LHRoaXMud2hlcmVDbGF1c2U9QWMoWG4sYSkuZmlsdGVyLndoZXJlQ2xhdXNlLHRoaXMubGliZHM9QWMoWG4sYSkuZmlsdGVyLmxpYmRzLHRoaXMuY2xhdXNlcz1BYyhYbixhKS5maWx0ZXIuY2xhdXNlcyx0aGlzLndoZXJlQ2xhdXNlRm4oKSl9c2V0R3JvdXBMb2dpYyhhKXt0aGlzLmdyb3Vw''@;'; put 'put ''TG9naWM9YSx0aGlzLmNsYXVzZXMuZ3JvdXBMb2dpYz1hLHRoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMuc2V0VG9HbG9iYWxzKCl9ZGF0ZUNoYW5nZShhLGQsaCxmLHYpe2xldCBNPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0SnNEYXRlVG9TYXNEYXRlKGEpOyJCRVRXRUVOIj09PWQub3Bl''@;'; put 'put ''cmF0b3ImJnZvaWQgMCE9PXYmJih0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbaF0udmFsdWVbdl09TSksdGhpcy5zZXRWYXJpYWJsZVZhbHVlcyhNLGgsZil9ZGF0ZVRpbWVDaGFuZ2UoYSxkLGgsZil7Y29uc3Qgdj10aGlzLmdldFF1ZXJ5RGF0ZVRpbWUoaCxkKTtpZigiIj09''@;'; put 'put ''PXYuZGF0ZSl7aWYoIiI9PT1hLnZhbHVlKXJldHVybjt2LmRhdGU9YS52YWx1ZS5zcGxpdCgiOiIpWzBdfWNvbnN0IE09cGFyc2VJbnQodi50aW1lLnNwbGl0KCI6IilbMF0pLEQ9cGFyc2VJbnQodi50aW1lLnNwbGl0KCI6IilbMV0pLFU9cGFyc2VJbnQodi50aW1lLnNwbGl0KCI6IilbMl0p''@;'; put 'put ''fHwwO2xldCB0ZT1uZXcgRGF0ZSh2LmRhdGUpLG9lPW5ldyBEYXRlKHRlLmdldEZ1bGxZZWFyKCksdGUuZ2V0TW9udGgoKSx0ZS5nZXREYXRlKCksTSxELFUpLHZlPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0SnNEYXRlVG9TYXNEYXRlKG9lLCJzZWNvbmRzIik7IkJFVFdFRU4iPT09YS5v''@;'; put 'put ''cGVyYXRvciYmdm9pZCAwIT09ZiYmKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS52YWx1ZVtmXT12ZSksdGhpcy5zZXRWYXJpYWJsZVZhbHVlcyh2ZSxkLGgpfXRpbWVDaGFuZ2UoYSxkLGgsZix2KXthPWEudGFyZ2V0LnZhbHVlO2xldCB2ZT02MCpwYXJzZUludChhLnNw''@;'; put 'put ''bGl0KCI6IilbMF0pKjYwKzYwKnBhcnNlSW50KGEuc3BsaXQoIjoiKVsxXSkrKHBhcnNlSW50KGEuc3BsaXQoIjoiKVsyXSl8fDApOyJCRVRXRUVOIj09PWQub3BlcmF0b3ImJnZvaWQgMCE9PXYmJih0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbaF0udmFsdWVbdl09dmUpLHRo''@;'; put 'put ''aXMuc2V0VmFyaWFibGVWYWx1ZXModmUsaCxmKX1keW5hbWljV2hlcmVDbGF1c2VDcmVhdG9yKGEsZCl7bGV0IGg9W107aWYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aD4xfHx0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHMubGVuZ3RoPjEpZm9yKGxldCBmPTA7Zjx0aGlz''@;'; put 'put ''LmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoO2YrKylmb3IobGV0IHY9MDt2PHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50cy5sZW5ndGg7disrKXtpZihmPT09YSYmdj09PWR8fFtudWxsLHZvaWQgMF0uaW5jbHVkZXModGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3Zd''@;'; put 'put ''LnZhcmlhYmxlKXx8W251bGwsdm9pZCAwXS5pbmNsdWRlcyh0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0ub3BlcmF0b3IpfHxbbnVsbCx2b2lkIDBdLmluY2x1ZGVzKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1t2XS52YWx1ZSkpY29udGludWU7bGV0IE09''@;'; put 'put ''IiI7Y29uc3QgRD10aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0ub3BlcmF0b3IsVT10aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0udmFyaWFibGU7IkJFVFdFRU4iPT09RD9NPWAke3RoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1t2XS52YWx1''@;'; put 'put ''ZVswXX0gQU5EICR7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdW3ZdLnZhbHVlWzFdfWA6IklOIj09PUR8fCJOT1QgSU4iPT09RD8odGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdW3ZdLnZhbHVlLmZvckVhY2godGU9PntpZih0ZS5jaGVja2VkKXtsZXQgb2U9dGUudmFsOyJzdHJpbmciIT10eXBl''@;'; put 'put ''b2Ygb2V8fCgwLGg1LmlzU3BlY2lhbE1pc3NpbmcpKG9lKT9NLmxlbmd0aD4wP00rPWAsJHtvZX1gOk09YCgke29lfWA6TS5sZW5ndGg+MD9NKz1gLCcke29lfSdgOk09YCgnJHtvZX0nYH19KSxNLmxlbmd0aD4wJiYoTSs9IikiKSk6IiI9PT10aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxl''@;'; put 'put ''bWVudHNbdl0udmFsdWU/TT0iY2hhciI9PT10aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0udHlwZT8iJyAnIjoiLiI6ImNoYXIiPT09dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLnR5cGUmJihNPWAnJHt0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxl''@;'; put 'put ''bWVudHNbdl0udmFsdWV9J2ApLGgucHVzaCh7R1JPVVBfTE9HSUM6dGhpcy5jbGF1c2VzLmdyb3VwTG9naWMsU1VCR1JPVVBfTE9HSUM6dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmNsYXVzZUxvZ2ljfHwiQU5EIixTVUJHUk9VUF9JRDpmLFZBUklBQkxFX05NOlUsT1BFUkFUT1JfTk06RCxS''@;'; put 'put ''QVdfVkFMVUU6TXx8dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLnZhbHVlfSl9cmV0dXJuIGh9Z2V0VmFsdWVzTG9hZE1vcmUoYSxkLGgsZil7dmFyIHY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Y29uc3QgTT12LmxpYmRzfHwiIjt0cnl7aWYodm9pZCAwIT09di5j''@;'; put 'put ''b2xzKXtmb3IobGV0IFdlPTA7V2U8di5jb2xzLmxlbmd0aDtXZSsrKXYuY29sc1tXZV0uTkFNRT09PWQmJih2LnNlbFZhci5pbmRleD1XZSk7Y29uc3QgRD12LmNvbHNbdi5zZWxWYXIuaW5kZXhdLkREVFlQRSx7c3RhcnRyb3c6VSxyb3dzOnRlfT12LmNsYXVzZXMucXVlcnlPYmpbZl0uZWxl''@;'; put 'put ''bWVudHNbaF0sb2U9di5yb3dzX2luY3JlbWVudCx2ZT1VK3RlO2xldCB3ZT1bXTt2LmR5bmFtaWNXaGVyZUNsYXVzZSYmKHdlPXYuZHluYW1pY1doZXJlQ2xhdXNlQ3JlYXRvcihmLGgpKTtjb25zdCBGZT1bIkRBVEVUSU1FIiwiVElNRSIsIkRBVEUiXS5pbmNsdWRlcyhEKTt2LnNhc1N0b3Jl''@;'; put 'put ''U2VydmljZS5nZXRRdWVyeVZhbHVlcyhkLE0sd2UsdmUsb2UpLnRoZW4oV2U9Pntjb25zdCBudD1XZS52YWxzLHtTVEFSVFJPVzpkdCxST1dTOm10LE5PQlM6JHR9PVdlLm1ldGFbMF07aWYodi5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnN0YXJ0cm93PWR0LHYuY2xhdXNlcy5x''@;'; put 'put ''dWVyeU9ialtmXS5lbGVtZW50c1toXS5yb3dzPW10LHYuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS5ub2JzPSR0LDE9PT1udC5sZW5ndGgmJiIiPT09bnRbMF0uRk9STUFUVEVEJiYiIj09PW50WzBdLlVORk9STUFUVEVEP2EubG9hZE1vcmVGaW5pc2hlZCghMSk6KHYuY2xhdXNl''@;'; put 'put ''cy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS52YWx1ZXMucHVzaCguLi5udC5tYXAoZ249Pntjb25zdCB3bj0ibnVtIj09PVdlLiR2YWxzLnZhcnMuVU5GT1JNQVRURUQudHlwZTtsZXQgRHI9d24mJigwLGg1LmlzU3BlY2lhbE1pc3NpbmcpKGduLlVORk9STUFUVEVEKT8iLiIrZ24uVU5GT1JN''@;'; put 'put ''QVRURUQ6Z24uVU5GT1JNQVRURUQ7cmV0dXJuIHduJiZudWxsPT09RHImJihEcj0iLiIpLHtmb3JtYXR0ZWQ6RmU/Z24uRk9STUFUVEVELnNwbGl0KCIuIilbMF06Z24uRk9STUFUVEVELHVuZm9ybWF0dGVkOkRyfX0pKSxhLmxvYWRNb3JlRmluaXNoZWQoJHQtdi5jbGF1c2VzLnF1ZXJ5T2Jq''@;'; put 'put ''W2ZdLmVsZW1lbnRzW2hdLnZhbHVlcy5sZW5ndGg+MCkpLHYud2hlcmVDbGF1c2VGbigpLHYuc2V0VG9HbG9iYWxzKCksdi53aGVyZUNsYXVzZUxvYWRpbmc9ITEsbnVsbCE9PXYucGVuZGluZ0lOVmFsdWVzU2V0KXtjb25zdHtjbGF1c2VJbmRleDp6dCxxdWVyeUluZGV4OnlufT12LnBlbmRp''@;'; put 'put ''bmdJTlZhbHVlc1NldDt2LnNldElOVmFsdWVzKHp0LHluKSx2LnBlbmRpbmdJTlZhbHVlc1NldD1udWxsfXYuY2RmLmRldGVjdENoYW5nZXMoKX0pLmNhdGNoKFdlPT57di53aGVyZUNsYXVzZUxvYWRpbmc9ITF9KX19Y2F0Y2goRCl7di5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9y''@;'; put 'put ''KCJwdWJsaWMvZ2V0Y29sdmFscyIsRCl9fSkoKX1nZXRWYWx1ZXMoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2Yud2hlcmVDbGF1c2VMb2FkaW5nPSEwO2xldCB2PSIiO3ZvaWQgMCE9PWYubGliZHMmJih2PWYubGliZHMpLGYuY2xlYXJWYWx1ZXMoZCxoKSxmLmNs''@;'; put 'put ''YXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udmFsdWVzPVtdLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS52YWx1ZT0iIixmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0ub3BlcmF0b3I9Ij0iLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS52''@;'; put 'put ''YXJpYWJsZT1hO3RyeXtpZih2b2lkIDAhPT1mLmNvbHMpe2ZvcihsZXQgdGU9MDt0ZTxmLmNvbHMubGVuZ3RoO3RlKyspZi5jb2xzW3RlXS5OQU1FPT09YSYmKGYuc2VsVmFyLmluZGV4PXRlKTtjb25zdCBNPWYuY29sc1tmLnNlbFZhci5pbmRleF0uRERUWVBFO2YuY2xhdXNlcy5xdWVyeU9i''@;'; put 'put ''altoXS5lbGVtZW50c1tkXS5kZHR5cGU9TSxmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udHlwZT1mLmNvbHNbZi5zZWxWYXIuaW5kZXhdLlRZUEUsZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLm9wZXJhdG9ycz0ibnVtIj09PWYuY2xhdXNlcy5xdWVyeU9ialto''@;'; put 'put ''XS5lbGVtZW50c1tkXS50eXBlP2YubnVtT3BlcmF0b3JzOmYuY2hhck9wZXJhdG9ycztsZXQgRD1bXTtmLmR5bmFtaWNXaGVyZUNsYXVzZSYmKEQ9Zi5keW5hbWljV2hlcmVDbGF1c2VDcmVhdG9yKGgsZCkpO2NvbnN0IFU9WyJEQVRFVElNRSIsIlRJTUUiLCJEQVRFIl0uaW5jbHVkZXMoTSk7''@;'; put 'put ''Zi5zYXNTdG9yZVNlcnZpY2UuZ2V0UXVlcnlWYWx1ZXMoYSx2LEQsMSxmLmluaXRpYWxfcm93cykudGhlbih0ZT0+e2NvbnN0IG9lPXRlLnZhbHMse1NUQVJUUk9XOnZlLFJPV1M6d2UsTk9CUzpGZX09dGUubWV0YVswXTtpZihmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0uc3Rh''@;'; put 'put ''cnRyb3c9dmUsZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnJvd3M9d2UsZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLm5vYnM9RmUsZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnZhbHVlcz1vZS5tYXAoV2U9Pntjb25zdCBudD0ibnVtIj09PXRl''@;'; put 'put ''LiR2YWxzLnZhcnMuVU5GT1JNQVRURUQudHlwZTtsZXQgbXQ9bnQmJigwLGg1LmlzU3BlY2lhbE1pc3NpbmcpKFdlLlVORk9STUFUVEVEKT8iLiIrV2UuVU5GT1JNQVRURUQ6V2UuVU5GT1JNQVRURUQ7cmV0dXJuIG50JiZudWxsPT09bXQmJihtdD0iLiIpLHtmb3JtYXR0ZWQ6VT9XZS5GT1JN''@;'; put 'put ''QVRURUQuc3BsaXQoIi4iKVswXTpXZS5GT1JNQVRURUQsdW5mb3JtYXR0ZWQ6bXR9fSkuc2xpY2UoMCwyZTMpLGYud2hlcmVDbGF1c2VGbigpLGYuc2V0VG9HbG9iYWxzKCksZi53aGVyZUNsYXVzZUxvYWRpbmc9ITEsbnVsbCE9PWYucGVuZGluZ0lOVmFsdWVzU2V0KXtjb25zdHtjbGF1c2VJ''@;'; put 'put ''bmRleDpXZSxxdWVyeUluZGV4Om50fT1mLnBlbmRpbmdJTlZhbHVlc1NldDtmLnNldElOVmFsdWVzKFdlLG50KSxmLnBlbmRpbmdJTlZhbHVlc1NldD1udWxsfWYuY2RmLmRldGVjdENoYW5nZXMoKX0pLmNhdGNoKHRlPT57Zi53aGVyZUNsYXVzZUxvYWRpbmc9ITF9KX19Y2F0Y2goTSl7Zi5l''@;'; put 'put ''dmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJwdWJsaWMvZ2V0Y29sdmFscyIsTSl9fSkoKX1nZXRsb2dpYyhhKXt0aGlzLmxvZ2ljPWEsdGhpcy53aGVyZUNsYXVzZUZuKCl9c2V0TG9naWMoKXt0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfWlzQXJyKGEp''@;'; put 'put ''e3JldHVybiBhIGluc3RhbmNlb2YgQXJyYXkmJmEubGVuZ3RoPjAmJnR5cGVvZiBhWzBdLmNoZWNrZWQ8InUifXNlbGVjdGVkTGFiZWxDaGFuZ2UoYSxkKXtkLnZhbHVlVmFyaWFibGU9IlZhcmlhYmxlIj09PWEsZC52YWx1ZT0iIix0aGlzLndoZXJlQ2xhdXNlRm4oKX12YXJpYWJsZUlucHV0''@;'; put 'put ''Q2hhbmdlKGEsZCxoLGYpe3RoaXMuZ2V0VmFsdWVzKGEsZCxoKX1zZXRWYXJpYWJsZVZhbHVlcyhhLGQsaCl7bGV0IGY9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLm9wZXJhdG9yOyJCRVRXRUVOIiE9PWYmJiJJTiIhPT1mJiYiTk9UIElOIiE9PWYmJih0aGlzLmNsYXVz''@;'; put 'put ''ZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udmFsdWU9YS50b1N0cmluZygpKSx0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfXNldFZhcmlhYmxlT3BlcmF0b3IoYSxkLGgpe2xldCBmPXRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS52YWx1ZTtm''@;'; put 'put ''IGluc3RhbmNlb2YgQXJyYXkmJiJJTiIhPT1kJiYiTk9UIElOIiE9PWQmJihmPWYgaW5zdGFuY2VvZiBBcnJheSYmMj09PWYubGVuZ3RoJiYic3RyaW5nIj09dHlwZW9mIGZbMF0/ZlswXToiIiksdGhpcy5jbGVhclZhbHVlc09wZXJhdG9yKGEsaCksdGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hd''@;'; put 'put ''LmVsZW1lbnRzW2FdLm9wZXJhdG9yPWQsKCI9Ij09PWR8fCI+Ij09PWR8fCI8Ij09PWR8fCI8PSI9PT1kfHwiPj0iPT09ZHx8Ik5FIj09PWQpJiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2FdLnZhbHVlPWYpLCJCRVRXRUVOIj09PWQmJih0aGlzLmNsYXVzZXMucXVlcnlP''@;'; put 'put ''YmpbaF0uZWxlbWVudHNbYV0udmFsdWU9W10sdGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2FdLnZhbHVlLnB1c2goZiksdGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2FdLnZhbHVlLnB1c2goIiIpKSwoIklOIj09PWR8fCJOT1QgSU4iPT09ZCkmJnRoaXMuc2V0''@;'; put 'put ''SU5WYWx1ZXMoaCxhKSx0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfXNldElOVmFsdWVzKGEsZCl7Y29uc3QgaD1bXSxmPXRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50c1tkXS52YWx1ZXM7Zi5sZW5ndGg8MSYmKHRoaXMucGVuZGluZ0lOVmFsdWVzU2V0''@;'; put 'put ''PXtjbGF1c2VJbmRleDphLHF1ZXJ5SW5kZXg6ZH0pO2ZvcihsZXQgdj0wO3Y8Zi5sZW5ndGg7disrKWgucHVzaCh7Y2hlY2tlZDohMSx2YWw6Zlt2XS5mb3JtYXR0ZWR9KTt0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHNbZF0udmFsdWU9aH1jbGVhclZhbHVlcyhhLGQpe3RoaXMu''@;'; put 'put ''Y2xhdXNlcy5xdWVyeU9ialtkXS5lbGVtZW50c1thXS52YWx1ZT0iIn1jbGVhclZhbHVlc09wZXJhdG9yKGEsZCl7bGV0IGg9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2RdLmVsZW1lbnRzW2FdLm9wZXJhdG9yOygiQkVUV0VFTiI9PT1ofHwiSU4iPT09aHx8Ik5PVCBJTiI9PT1ofHwiQ09OVEFJ''@;'; put 'put ''TlMiPT09aCkmJnRoaXMuY2xlYXJWYWx1ZXMoYSxkKX1oYXNJbnZhbGlkQ2x1YXNlKGEpe2ZvcihsZXQgZCBvZiBhKWlmKGQuaW52YWxpZENsYXVzZT0hMSwiIj09PWQudmFsdWUmJiJORSIhPT1kLm9wZXJhdG9yJiYiQ09OVEFJTlMiIT09ZC5vcGVyYXRvcnx8bnVsbD09PWQudmFyaWFibGV8''@;'; put 'put ''fG51bGw9PT1kLm9wZXJhdG9yfHxudWxsPT09ZC52YWx1ZSlyZXR1cm4gZC5pbnZhbGlkQ2xhdXNlPSEwLCEwO3JldHVybiBhLmludmFsaWRDbGF1c2U9ITEsITF9aGFzSW52YWxpZEdyb3VwQ2x1YXNlKCl7Zm9yKGxldCBhPTA7YTx0aGlzLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoO2ErKyl7''@;'; put 'put ''aWYodGhpcy5oYXNJbnZhbGlkQ2x1YXNlKHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50cykpcmV0dXJuIHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5pbnZhbGlkQ2xhdXNlPSEwLCEwO3RoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5pbnZhbGlkQ2xhdXNlPSExfXJldHVybiExfWFk''@;'; put 'put ''ZENsYXVzZShhKXtpZih0aGlzLmhhc0ludmFsaWRDbHVhc2UodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzKSlyZXR1cm4gdm9pZCB0aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIkNhbm5vdCBhZGQgbmV3IGNsYXVzZSwgd2hlbiBvbmUgb3IgbW9yZSBj''@;'; put 'put ''bGF1c2VzIGFyZSBpbnZhbGlkIG9yIGVtcHR5LiIpO3RoaXMuY2xhdXNlQW10LnB1c2goIiIpLHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50cy5wdXNoKHtsb2dpYzpudWxsLHR5cGU6bnVsbCx2YXJpYWJsZTpudWxsLG9wZXJhdG9yOm51bGwsdmFsdWU6bnVsbCx2YWx1ZXM6W10s''@;'; put 'put ''b3BlcmF0b3JzOltdfSk7bGV0IGQ9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmNsYXVzZUxvZ2ljO3RoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5jbGF1c2VMb2dpYz10eXBlb2YgZD4idSI/IkFORCI6Ik9SIj09PWQ/Ik9SIjoiQU5EIix0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRv''@;'; put 'put ''R2xvYmFscygpfWFkZEdyb3VwQ2xhdXNlKCl7dGhpcy5oYXNJbnZhbGlkR3JvdXBDbHVhc2UoKT90aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIkNhbm5vdCBhZGQgbmV3IGNsYXVzZSwgd2hlbiBvbmUgb3IgbW9yZSBjbGF1c2VzIGFyZSBpbnZhbGlkIG9yIGVtcHR5''@;'; put 'put ''LiIpOih0aGlzLmNsYXVzZXMucXVlcnlPYmoucHVzaCh7ZWxlbWVudHM6W3tsb2dpYzpudWxsLHR5cGU6bnVsbCx2YXJpYWJsZTpudWxsLG9wZXJhdG9yOm51bGwsdmFsdWU6bnVsbCx2YWx1ZXM6W10sb3BlcmF0b3JzOltdfV19KSx0aGlzLnNldFRvR2xvYmFscygpKX1pc0luSHRtbENvbGxl''@;'; put 'put ''Y3Rpb24oYSxkKXtmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grKylpZihkW2hdLnZhbHVlPT09YSlyZXR1cm4hMDtyZXR1cm4hMX1yZW1vdmVHcm91cENsYXVzZShhKXt0aGlzLmNsYXVzZXMucXVlcnlPYmouc3BsaWNlKGEsMSksdGhpcy53aGVyZUNsYXVzZUZuKCl9cmVtb3ZlQ2xhdXNlKGEs''@;'; put 'put ''ZCl7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2RdLmVsZW1lbnRzLnNwbGljZShhLDEpLHRoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMuc2V0VG9HbG9iYWxzKCl9d2hlcmVDbGF1c2VGbihhPSExKXtjb25zdCBkPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5jbGF1c2VzKTtpZihh''@;'; put 'put ''JiYoZC5xdWVyeU9ialswXS5lbGVtZW50cz1bXSksdm9pZCAwIT09dGhpcy5saWJkcyl7bGV0IGg9dGhpcy5zYXNTdG9yZVNlcnZpY2Uud2hlcmVDbGF1c2VDcmVhdG9yKGQsdGhpcy5ncm91cExvZ2ljLHRoaXMubGliZHMpO2F8fCh0aGlzLndoZXJlQ2xhdXNlPWgud2hlcmVDbGF1c2UsdGhp''@;'; put 'put ''cy53aGVyZVN0cmluZz1oLnN0cmluZyl9fW5nQWZ0ZXJWaWV3SW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2EuX3JlbW92ZVFyeT1hLnNhc1N0b3JlU2VydmljZS5yZW1vdmVRdWVyeS5zdWJzY3JpYmUoZD0+e2EuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGg+PTEmJihh''@;'; put 'put ''LmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoPTEsYS5jbGF1c2VzLnF1ZXJ5T2JqWzBdLmVsZW1lbnRzLmxlbmd0aD49MSYmKGEuY2xhdXNlcy5xdWVyeU9ialswXS5lbGVtZW50cy5sZW5ndGg9MSxhLmNsYXVzZXMucXVlcnlPYmpbMF0uZWxlbWVudHM9W10sYS5jbGF1c2VzLnF1ZXJ5T2JqWzBd''@;'; put 'put ''LmVsZW1lbnRzLnB1c2goe2xvZ2ljOm51bGwsdHlwZTpudWxsLHZhcmlhYmxlOm51bGwsb3BlcmF0b3I6bnVsbCx2YWx1ZTpudWxsLHZhbHVlczpbXSxvcGVyYXRvcnM6W119KSxhLndoZXJlQ2xhdXNlRm4oKSkpfSksYS5jb2x1bW5zU3ViPWEuc2FzU3RvcmVTZXJ2aWNlLmNvbHVtbnMuc3Vi''@;'; put 'put ''c2NyaWJlKGQ9PntsZXQgaD1kLmRhdGEuY29sczsiaG9tZSIhPT1Ybi5yb290UGFyYW0mJiJlZGl0b3IiIT09WG4ucm9vdFBhcmFtfHwoYS5jb2xzPWgsYS5saWJkcz1kLmxpYmRzLFhuLmVkaXRvci5maWx0ZXIuY29scz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGgpKSksInZpZXciPT09''@;'; put 'put ''WG4ucm9vdFBhcmFtJiZYbi52aWV3ZXIuZmlsdGVyLmNvbHMubGVuZ3RoPDEmJihhLmNvbHM9aCxhLmxpYmRzPWQubGliZHMsWG4udmlld2VyLmZpbHRlci5jb2xzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaCkpKSxhLmxpYmRzfHwoYS5saWJkcz1kLmxpYmRzKX0pLGEudmFsdWVzU3Vi''@;'; put 'put ''PWEuc2FzU3RvcmVTZXJ2aWNlLnZhbHVlcy5zdWJzY3JpYmUoZD0+eygiaG9tZSI9PT1Ybi5yb290UGFyYW18fCJlZGl0b3IiPT09WG4ucm9vdFBhcmFtKSYmWG4uZWRpdG9yLmZpbHRlci52YWxzLmxlbmd0aDwxJiYoYS52YWxzPWQudmFscyxYbi5lZGl0b3IuZmlsdGVyLnZhbHM9SlNPTi5w''@;'; put 'put ''YXJzZShKU09OLnN0cmluZ2lmeShkLnZhbHMpKSksInZpZXciPT09WG4ucm9vdFBhcmFtJiZYbi52aWV3ZXIuZmlsdGVyLnZhbHMubGVuZ3RoPDEmJihhLnZhbHM9ZC52YWxzLFhuLnZpZXdlci5maWx0ZXIudmFscz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGQudmFscykpKX0pfSkoKX1v''@;'; put 'put ''bkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKGEsZCxoLGYpe3RoaXMuZ2V0VmFsdWVzTG9hZE1vcmUoYSxkLGgsZil9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5nZXRGcm9tR2xvYmFscygpLHNldFRpbWVvdXQoKCk9PntsZXQgYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjdmFsc192YXJf''@;'; put 'put ''aWQwXzAiKTthJiZhLmZvY3VzKCl9LDUwMCl9bmdPbkRlc3Ryb3koKXt0aGlzLmNvbHVtbnNTdWImJnRoaXMuY29sdW1uc1N1Yi51bnN1YnNjcmliZSgpLHRoaXMudmFsdWVzU3ViJiZ0aGlzLnZhbHVlc1N1Yi51bnN1YnNjcmliZSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihk''@;'; put 'put ''KXtyZXR1cm4gbmV3KGR8fGMpKHFlKE0yKSxxZShFYykscWUoTHUpLHFlKEhzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtcXVlcnkiXV0saW5wdXRzOntjYWNoaW5nOiJjYWNoaW5nIix2aWV3Ym94SWQ6InZpZXdib3hJZCJ9LHN0YW5kYWxv''@;'; put 'put ''bmU6ITEsZmVhdHVyZXM6W2hhKFt7cHJvdmlkZTpzNCx1c2VWYWx1ZToiZW4tR0IifV0pXSxkZWNsczozOCx2YXJzOjExLGNvbnN0czpbWyJwaWNrZXIiLCIiXSxbIm5vdFBpY2tlciIsIiJdLFsibm90UGlja2VyUmFuZ2UiLCIiXSxbImNoZWNrYm94VmFsdWVzIiwiIl0sWzEsImNsci1mbGV4''@;'; put 'put ''LXJvdyIsImNsci1mb3JtLWNvbnRyb2wiLCJtLTAiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIl0sWyJjbHJDaGVja2JveCIsIiIsInR5cGUiLCJjaGVja2JveCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMSwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbMSwiY2xyLWNvbnRyb2wt''@;'; put 'put ''Y29udGFpbmVyIiwibWwtMTUiXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwiaWQiLCJ1c2VQaWNrZXJzIiwzLCJuZ01vZGVsQ2hhbmdlIiwiY2hhbmdlIiwibmdNb2RlbCJdLFsxLCJjbHItcm93Il0sWzEsInNlbGVjdCIsImNsci1jb2wtbWQtMiIsIm1iLTMwIl0sWyJj''@;'; put 'put ''bHJTZWxlY3QiLCIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxbMywic2VsZWN0ZWQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjbHItY29sLW1kLTEwIiwibWItMzAiXSxbMSwibGluZS1udW1iZXJzIiwibGFuZ3VhZ2UtbWFya3VwIl0sWyJjbGFzcyIsInBy''@;'; put 'put ''b2dyZXNTdGF0aWMgcHJvZ3Jlc3MgbG9vcCIsNCwibmdJZiJdLFsxLCJsYW5ndWFnZS1zcWwiXSxbMSwiY29udGVudCJdLFsxLCJjbGF1c2VzLWNvbnRhaW5lciIsImNsci1jb2wtbWQtMTIiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJjbGF1c2Utcm93Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxb''@;'; put 'put ''Mywic2VsZWN0ZWQiXSxbMSwicHJvZ3Jlc1N0YXRpYyIsInByb2dyZXNzIiwibG9vcCJdLFsxLCJjbGF1c2Utcm93Il0sWzEsImNsYXVzZS1sb2dpYyIsImNsci1jb2wtbWQtMiJdLFsxLCJzZWxlY3QiXSxbImNsclNlbGVjdCIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJkaXNh''@;'; put 'put ''YmxlZCJdLFsiY2xhc3MiLCJidG4gYnRuLXByaW1hcnkgYnRuLWJsb2NrIG10LTEwIiwzLCJjbGljayIsNCwibmdJZiJdLFsxLCJjbGF1c2UtcXVlcnkiLCJjbHItY29sLW1kLTEwIl0sWyJzaGFwZSIsInRpbWVzIiwic2l6ZSIsIjM2IiwiY2xhc3MiLCJyZW1vdmUtZ3JvdXAtY2xhdXNlLWJ1''@;'; put 'put ''dHRvbiIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXJvdyIsMywiaW52YWxpZC1jbGF1c2UiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsImJ0bi1ibG9jayIsIm10LTEwIiwzLCJjbGljayJdLFsic2hhcGUiLCJwbHVzIl0sWyJzaGFwZSIs''@;'; put 'put ''InRpbWVzIiwic2l6ZSIsIjM2IiwxLCJyZW1vdmUtZ3JvdXAtY2xhdXNlLWJ1dHRvbiIsMywiY2xpY2siXSxbMSwidmFyaWFibGUtY29sIiwiZm9ybS1ncm91cCIsImNsci1jb2wtbWQtMyJdLFsxLCJkYXRhbGlzdC13cmFwcGVyIl0sWyJsYWJlbCIsIlZhcmlhYmxlIiwzLCJ2YWx1ZUNoYW5n''@;'; put 'put ''ZSIsIm9uSW5wdXRFdmVudCIsImlkIiwiaW5wdXRJZCIsImVtaXRPbmx5U2VsZWN0ZWQiLCJ2YWx1ZSJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwib3BlcmF0b3ItY29sIiwiZm9ybS1ncm91cCIsImNsci1jb2wtbWQtMyJdLFsiY2xyU2VsZWN0IiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwi''@;'; put 'put ''bmdNb2RlbCJdLFsiY2xhc3MiLCJ2YWx1ZS1jb2wgZm9ybS1ncm91cCBjbHItY29sLW1kLTMiLDQsIm5nVmFyIl0sWzEsImNsYXVzZS1idXR0b25zIiwiY2xyLWNvbC1tZC0yIiwiYnRuLWdyb3VwIl0sWzEsImJ0biIsImJ0bi13YXJuaW5nIiwiYnRuLWJsb2NrIiwzLCJjbGljayIsImRpc2Fi''@;'; put 'put ''bGVkIl0sWyJzaGFwZSIsIm1pbnVzIl0sWzEsImJ0biIsImJ0bi1zdWNjZXNzIiwiYnRuLWJsb2NrIiwzLCJjbGljayJdLFsxLCJ2YWx1ZS1jb2wiLCJmb3JtLWdyb3VwIiwiY2xyLWNvbC1tZC0zIl0sWyJjbGFzcyIsImNoZWNrYm94LXZhbHMiLDQsIm5nSWYiXSxbImNsYXNzIiwic2luZ2xl''@;'; put 'put ''LWZpZWxkLXZhbHMiLDQsIm5nSWYiXSxbImNsYXNzIiwicmFuZ2UtdmFscyIsNCwibmdJZiJdLFsiY2xhc3MiLCJjb250YWlucy12YWxzIiw0LCJuZ0lmIl0sWzEsImNoZWNrYm94LXZhbHMiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1saW5rIiwzLCJjbGljayJdLFs0LCJuZ1Rl''@;'; put 'put ''bXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXSxbMSwic2luZ2xlLWZpZWxkLXZhbHMiXSxbMSwicmFuZ2UtdmFscyJdLFsxLCJmcm9tIl0sWzEsInRvIl0sWzEsImNvbnRhaW5zLXZhbHMiXSxbInR5cGUiLCJ0ZXh0IiwxLCJpbnB1dC12YWwiLDMsIm5nTW9kZWxDaGFu''@;'; put 'put ''Z2UiLCJuZ01vZGVsIl0sWzMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsibGFiZWwiLCJWYWx1ZSIsInR5cGUiLCJkYXRlIiwzLCJ2YWx1ZUNoYW5nZSIsImRpc2FibGVTb2Z0c2VsZWN0IiwiaW5wdXRJZCIsInZhbHVlIl0sWyJsYWJlbCIsIlZhbHVlIiwidHlwZSIsImRhdGUi''@;'; put 'put ''LDMsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50IiwiZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1dElkIiwidmFsdWUiXSxbInR5cGUiLCJ0aW1lIiwzLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCIsImRpc2FibGVTb2Z0c2VsZWN0IiwiaW5wdXRJZCIsInZhbHVlIl0sWyJsYWJlbCIs''@;'; put 'put ''IlZhbHVlIiwidHlwZSIsInRpbWUiLDMsIm9uSW5wdXRFdmVudCIsImRpc2FibGVTb2Z0c2VsZWN0IiwiaW5wdXRJZCIsInZhbHVlIl0sWyJsYWJlbCIsIlZhbHVlIiwzLCJzZWxlY3RlZExhYmVsQ2hhbmdlIiwidmFsdWVDaGFuZ2UiLCJvbklucHV0RXZlbnQiLCJvbkF1dG9jb21wbGV0ZUxv''@;'; put 'put ''YWRpbmdNb3JlIiwic2Vjb25kTGFiZWwiLCJlbWl0T25seVNlbGVjdGVkIiwiaW5wdXRJZCIsInZhbHVlIiwiZW5hYmxlTG9hZE1vcmUiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJ2YWx1ZSJdLFszLCJ2YWx1ZSIsNCwibmdJZiJdLFsibGFiZWwiLCJWYWx1ZSIsMywi''@;'; put 'put ''dmFsdWVDaGFuZ2UiLCJvbklucHV0RXZlbnQiLCJvbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlIiwiaW5wdXRJZCIsInZhbHVlIiwiZW5hYmxlTG9hZE1vcmUiLCJkaXNhYmxlZCJdLFsxLCJpbi12YWx1ZXMtbW9kYWwiLDMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwi''@;'; put 'put ''bW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsiY2xhc3MiLCJuby12YWx1ZXMiLDQsIm5nSWYiXSxbImNsYXNzIiwiZm9ybS1ibG9jayIsNCwibmdJZiJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsx''@;'; put 'put ''LCJuby12YWx1ZXMiXSxbMSwiZm9ybS1ibG9jayJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyQ2hlY2tib3giLCIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZkKXtjb25zdCBmPU9uKCk7ZGUoMCwiZGl2Iiw0KSgxLCJkaXYiLDUp''@;'; put 'put ''KDIsImNsci1jaGVja2JveC13cmFwcGVyIikoMywiaW5wdXQiLDYpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksZmkoaC5keW5hbWljV2hlcmVDbGF1c2UsTSl8fChoLmR5bmFtaWNXaGVyZUNsYXVzZT1NKSxDdChNKX0pLGhlKCksZGUoNCwibGFiZWwiLDcp''@;'; put 'put ''LFBlKDUsIkR5bmFtaWMgd2hlcmUgY2xhdXNlIiksaGUoKSgpKCksZGUoNiwiZGl2Iiw4KSg3LCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDgsImlucHV0Iiw5KSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGZpKGgudXNlUGlja2VycyxNKXx8KGgudXNlUGlj''@;'; put 'put ''a2Vycz1NKSxDdChNKX0pLE90KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgudXNlUGlja2Vyc0NoYW5nZSgpKX0pLGhlKCksZGUoOSwibGFiZWwiLDcpLFBlKDEwLCIgVXNlIHBpY2tlcnMgIiksaGUoKSgpKCkoKSxkZSgxMSwiZGl2IiwxMCkoMTIsImRpdiIsMTEpKDEz''@;'; put 'put ''LCJjbHItc2VsZWN0LWNvbnRhaW5lciIpKDE0LCJsYWJlbCIpLFBlKDE1LCJHcm91cCBsb2dpYyIpLGhlKCksZGUoMTYsInNlbGVjdCIsMTIpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksZmkoaC5ncm91cExvZ2ljLE0pfHwoaC5ncm91cExvZ2ljPU0pLEN0''@;'; put 'put ''KE0pfSksT3QoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguc2V0R3JvdXBMb2dpYyhoLmdyb3VwTG9naWMpKX0pLGd0KDE3LG13dCwyLDIsIm9wdGlvbiIsMTMpLGhlKCkoKSgpLGRlKDE4LCJkaXYiLDE0KSgxOSwicHJlIiwxNSksUGUoMjAsIiAgICAgICIp''@;'; put 'put ''LGd0KDIxLHZ3dCw0LDAsImRpdiIsMTYpLFBlKDIyLCJcblxuICAgICAgIiksZGUoMjMsImNvZGUiLDE3KSxQZSgyNCksaGUoKSxQZSgyNSwiXG4gICAgIiksaGUoKSgpKCksZGUoMjYsImRpdiIsMTgpKDI3LCJkaXYiLDE5KSxndCgyOCx5d3QsMSwwLCJkaXYiLDIwKSgyOSxPd3QsMTUsOCwi''@;'; put 'put ''ZGl2IiwyMSksaGUoKSgpLGd0KDMwLE53dCw0LDQsIm5nLXRlbXBsYXRlIixudWxsLDAseGMpKDMyLFp3dCwzLDcsIm5nLXRlbXBsYXRlIixudWxsLDEseGMpKDM0LFl3dCwyLDUsIm5nLXRlbXBsYXRlIixudWxsLDIseGMpKDM2LFh3dCw5LDQsIm5nLXRlbXBsYXRlIixudWxsLDMseGMpfTIm''@;'; put 'put ''ZCYmKGZlKDMpLGxpKCJuZ01vZGVsIixoLmR5bmFtaWNXaGVyZUNsYXVzZSksZmUoNSksbGkoIm5nTW9kZWwiLGgudXNlUGlja2VycyksZmUoOCksRWUoImRpc2FibGVkIiwobnVsbD09aC5jbGF1c2VzfHxudWxsPT1oLmNsYXVzZXMucXVlcnlPYmo/bnVsbDpoLmNsYXVzZXMucXVlcnlPYmou''@;'; put 'put ''bGVuZ3RoKTwxKSxsaSgibmdNb2RlbCIsaC5ncm91cExvZ2ljKSxmZSgpLEVlKCJuZ0Zvck9mIixoLmxvZ2ljT3BlcmF0b3JzKSxmZSg0KSxFZSgibmdJZiIsaC53aGVyZUNsYXVzZUxvYWRpbmcpLGZlKDMpLENyKGgud2hlcmVDbGF1c2UpLGZlKDMpLHhyKCJjbHItY29sLW1kLTEwIiwobnVs''@;'; put 'put ''bD09aC5jbGF1c2VzfHxudWxsPT1oLmNsYXVzZXMucXVlcnlPYmo/bnVsbDpoLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoKT4xKSxmZSgpLEVlKCJuZ0lmIiwobnVsbD09aC5jbGF1c2VzfHxudWxsPT1oLmNsYXVzZXMucXVlcnlPYmo/bnVsbDpoLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoKT4x''@;'; put 'put ''KSxmZSgpLEVlKCJuZ0Zvck9mIixoLmNsYXVzZXMucXVlcnlPYmopKX0sZGVwZW5kZW5jaWVzOltocyxDYSx5ZCxDZixsNCxVbCxidSxyMCxDcyxoaCxwdyx5MixOOSxDdyx4ZixFZixuYyxzaCxNZixobCxybCxJeWUsZ1MsdXd0LGR3dF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSko''@;'; put 'put ''KSxvZz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW9uQ2xpY2soYSl7YS50YXJnZXQuZm9jdXMoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPVlyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImFw''@;'; put 'put ''cFN0ZWFsRm9jdXMiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZPdCgiY2xpY2siLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uQ2xpY2sodil9KX0sc3RhbmRhbG9uZTohMX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgcXd0PVsic2VhcmNoTGliVHJlZUlucHV0Il07ZnVuY3Rp''@;'; put 'put ''b24gSnd0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMTEpfWZ1bmN0aW9uIFF3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1pY29uIiwxMiksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMik7cmV0dXJuIGgubGlicmFyaWVzU2VhcmNoPSIi''@;'; put 'put ''LEN0KGgubGlicmFyeU9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gZUN0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsNikoMSwiZGl2Iiw3KSgyLCJpbnB1dCIsOCwwKSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3Qg''@;'; put 'put ''Zj1PZSgpO3JldHVybiBmaShmLmxpYnJhcmllc1NlYXJjaCxoKXx8KGYubGlicmFyaWVzU2VhcmNoPWgpLEN0KGgpfSksT3QoImtleXVwIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmxpYnJhcnlPbkZpbHRlcigpKX0pLGhlKCksZ3QoNCxKd3QsMSwwLCJjbHItaWNvbiIsOSko''@;'; put 'put ''NSxRd3QsMSwwLCJjbHItaWNvbiIsMTApLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9ZmEoMyksZD1PZSgpO2ZlKDIpLGxpKCJuZ01vZGVsIixkLmxpYnJhcmllc1NlYXJjaCksZmUoMiksRWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksRWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjAp''@;'; put 'put ''fX1mdW5jdGlvbiB0Q3QoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwxMSl9ZnVuY3Rpb24gbkN0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLWljb24iLDEyKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSksT2UoKTtjb25zdCBoPWZhKDMpLGY9T2UoMikuJGltcGxp''@;'; put 'put ''Y2l0LHY9T2UoKTtyZXR1cm4gaC52YWx1ZT0iIixmLnNlYXJjaFN0cmluZz0iIixDdCh2LnRyZWVPbkZpbHRlcihmLCJ0YWJsZXMuVEFCTEVOQU1FIikpfSksaGUoKX19ZnVuY3Rpb24gckN0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsNikoMSwiZGl2''@;'; put 'put ''Iiw3KSgyLCJpbnB1dCIsMTgsMiksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoMikuJGltcGxpY2l0O3JldHVybiBmaShmLnNlYXJjaFN0cmluZyxoKXx8KGYuc2VhcmNoU3RyaW5nPWgpLEN0KGgpfSksT3QoImtleXVwIixmdW5jdGlvbigpe3d0KGEp''@;'; put 'put ''O2NvbnN0IGg9T2UoMikuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLnRyZWVPbkZpbHRlcihoLCJ0YWJsZXMiKSl9KSxoZSgpLGd0KDQsdEN0LDEsMCwiY2xyLWljb24iLDkpKDUsbkN0LDEsMCwiY2xyLWljb24iLDEwKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWZhKDMpLGQ9T2UoMikuJGlt''@;'; put 'put ''cGxpY2l0O2ZlKDIpLGxpKCJuZ01vZGVsIixkLnNlYXJjaFN0cmluZyksZmUoMiksRWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksRWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBpQ3QoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwyNil9ZnVuY3Rpb24gYUN0''@;'; put 'put ''KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMjcpfWZ1bmN0aW9uIG9DdChjLGwpezEmYyYmKGRlKDAsInNwYW4iKSxQZSgxLCIgVG8gdW5sb2NrIGFsbCB0YWJsZXMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKSxoZSgpKX1mdW5jdGlvbiBzQ3QoYyxsKXtpZigxJmMm''@;'; put 'put ''JihkZSgwLCJjbHItdG9vbHRpcC1jb250ZW50IiwyOCksZ3QoMSxvQ3QsMiwwLCJzcGFuIiwyNSksaGUoKSksMiZjKXtjb25zdCBhPU9lKCkubmdWYXI7ZmUoKSxFZSgibmdJZiIsYSl9fWZ1bmN0aW9uIGxDdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDExKX1mdW5jdGlvbiBjQ3QoYyxs''@;'; put 'put ''KXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItaWNvbiIsMTIpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKSxPZSgpO2NvbnN0IGg9ZmEoMyksZj1PZSgzKS4kaW1wbGljaXQsdj1PZSgzKTtyZXR1cm4gaC52YWx1ZT0iIixmLnNlYXJjaFN0cmluZz0iIixDdCh2LnRyZWVPbkZp''@;'; put 'put ''bHRlcihmLCJjb2x1bW5zLkNPTE5BTUUiKSl9KSxoZSgpfX1mdW5jdGlvbiB1Q3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiw2KSgxLCJkaXYiLDcpKDIsImlucHV0IiwyOSwyKSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29u''@;'; put 'put ''c3QgZj1PZSgzKS4kaW1wbGljaXQ7cmV0dXJuIGZpKGYuc2VhcmNoU3RyaW5nLGgpfHwoZi5zZWFyY2hTdHJpbmc9aCksQ3QoaCl9KSxPdCgia2V5dXAiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgzKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKDMpLnRyZWVPbkZpbHRlcihoLCJjb2x1''@;'; put 'put ''bW5zLkNPTE5BTUUiKSl9KSxoZSgpLGd0KDQsbEN0LDEsMCwiY2xyLWljb24iLDkpKDUsY0N0LDEsMCwiY2xyLWljb24iLDEwKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWZhKDMpLGQ9T2UoMykuJGltcGxpY2l0O2ZlKDIpLGxpKCJuZ01vZGVsIixkLnNlYXJjaFN0cmluZyksZmUoMiksRWUo''@;'; put 'put ''Im5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksRWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBkQ3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdHJlZS1ub2RlIikoMSwiYnV0dG9uIiwzMCksT3QoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9''@;'; put 'put ''d3QoYSkuJGltcGxpY2l0LGY9T2UoMykuJGltcGxpY2l0LHY9T2UoMikuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLmNvbHVtbk9uQ2xpY2soaCx2LGYpKX0pLEd0KDIsImNsci1pY29uIiwzMSksUGUoMyksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPU9lKDYpO2ZlKCks''@;'; put 'put ''eHIoImNvbHVtbi1hY3RpdmUiLGQubGliQ29sdW1uQWN0aXZlKGEuQ09MVVJJKSksZmUoMiksSXIoIiAiLGEuQ09MTkFNRSwiICIpfX1mdW5jdGlvbiBoQ3QoYyxsKXtpZigxJmMmJihvaSgwKSxndCgxLHVDdCw2LDMsImNsci10cmVlLW5vZGUiLDMpKDIsZEN0LDQsMywiY2xyLXRyZWUtbm9k''@;'; put 'put ''ZSIsNCksc2koKSksMiZjKXtjb25zdCBhPU9lKDIpLiRpbXBsaWNpdDtmZSgpLEVlKCJuZ0lmIixhLmNvbHVtbnMpLGZlKCksRWUoIm5nRm9yT2YiLGEuY29sdW1ucyl9fWZ1bmN0aW9uIGZDdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci10b29sdGlwIikoMSwiYnV0dG9u''@;'; put 'put ''IiwyMCksT3QoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkubmdWYXIsZj1PZSgpLiRpbXBsaWNpdCx2PU9lKDIpLiRpbXBsaWNpdCxNPU9lKCk7cmV0dXJuIEN0KGg/IiI6TS50YWJsZU9uQ2xpY2soZi5UQUJMRVVSSSxmLHYpKX0pLG9pKDIsMjEpLGd0KDMsaUN0LDEsMCwiY2xy''@;'; put 'put ''LWljb24iLDIyKSg0LGFDdCwxLDAsImNsci1pY29uIiwyMyksc2koKSxQZSg1KSxoZSgpLGd0KDYsc0N0LDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIsMjQpKDcsaEN0LDMsMiwibmctY29udGFpbmVyIiwyNSksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC5uZ1ZhcixkPU9lKCkuJGltcGxpY2l0''@;'; put 'put ''LGg9T2UoMikuJGltcGxpY2l0LGY9T2UoKTtmZSgpLHhyKCJkYy1sb2NrZWQtY29udHJvbCIsYSkoImFjdGl2ZSIsZi5saWJUYWJBY3RpdmUoaC5MSUJSQVJZUkVGLGQpKSxmZSgpLEVlKCJuZ1N3aXRjaCIsZC5pbmNsdWRlcygiLUZDIikpLGZlKCksRWUoIm5nU3dpdGNoQ2FzZSIsITApLGZl''@;'; put 'put ''KCksRWUoIm5nU3dpdGNoQ2FzZSIsITEpLGZlKCksSXIoIiAiLGQucmVwbGFjZSgiLUZDIiwiIiksIiAiKSxmZSgyKSxFZSgibmdJZiIsZi5oYXNDb2x1bW5zKX19ZnVuY3Rpb24gcEN0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMTQpLE90KCJjbGlj''@;'; put 'put ''ayIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQsdj1PZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkudHJlZU5vZGVDbGlja2VkKGgsZix2LnRhYmxlcykpfSksY2koImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdDty''@;'; put 'put ''ZXR1cm4gZmkoZi5leHBhbmRlZCxoKXx8KGYuZXhwYW5kZWQ9aCksQ3QoaCl9KSxndCgxLGZDdCw4LDksImNsci10b29sdGlwIiwxOSksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9T2UoMyk7eHIoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCksbGkoImNs''@;'; put 'put ''ckV4cGFuZGVkIixhLmV4cGFuZGVkKSxFZSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nQ29sdW1ucyYmIWEuY29sdW1ucyksZmUoKSxFZSgibmdWYXIiLGQrMT5oLmxpY2VuY2VTdGF0ZS52YWx1ZS50YWJsZXNfaW5fbGlicmFyeV9saW1pdCl9fWZ1bmN0aW9uIGdDdChjLGwpe2lmKDEmYyl7Y29u''@;'; put 'put ''c3QgYT1PbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDE0LDEpLE90KCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpLiRpbXBsaWNpdCx2PU9lKCk7cmV0dXJuIEN0KHYudHJlZU5vZGVDbGlja2VkKGgsZix2LmxpYnJhcnlMaXN0KSl9KSxjaSgiY2xyRXhwYW5kZWRDaGFu''@;'; put 'put ''Z2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKS4kaW1wbGljaXQ7cmV0dXJuIGZpKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksZGUoMiwicCIsMTUpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPWZhKDEpLGY9T2UoKS4kaW1wbGljaXQs''@;'; put 'put ''dj1PZSgpO3JldHVybiB2LmxpYj1mLkxJQlJBUllJRCxDdCh2LmxpYnJhcnlPbkNsaWNrKHYubGlifHwiIixmLGgpKX0pLEd0KDMsImNsci1pY29uIiwxNiksUGUoNCksaGUoKSxndCg1LHJDdCw2LDMsImNsci10cmVlLW5vZGUiLDMpKDYscEN0LDIsNSwiY2xyLXRyZWUtbm9kZSIsMTcpLGhl''@;'; put 'put ''KCl9aWYoMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O3hyKCJjbHItZXhwYW5kZWQiLGEuZXhwYW5kZWQpLGxpKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCksRWUoImNsckxvYWRpbmciLGEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxmZSg0KSxJcigiICIsYS5MSUJSQVJZTkFNRSwi''@;'; put 'put ''ICIpLGZlKCksRWUoIm5nSWYiLGEudGFibGVzKSxmZSgpLEVlKCJuZ0Zvck9mIixhLnRhYmxlcyl9fWZ1bmN0aW9uIG1DdChjLGwpe2lmKDEmYyYmKG9pKDApLGd0KDEsZ0N0LDcsNywiY2xyLXRyZWUtbm9kZSIsMTMpLHNpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLEVlKCJu''@;'; put 'put ''Z0lmIiwhYS5oaWRkZW4mJmEuaW5Gb3JlZ3JvdW5kKX19ZnVuY3Rpb24gdkN0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwzMikoMSwic3BhbiIsMzMpLFBlKDIsIiBMb2FkaW5nLi4uICIpLGhlKCkoKSl9bGV0IHlDdD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5oZWxwZXJT''@;'; put 'put ''ZXJ2aWNlPWEsdGhpcy5saWNlbmNlU2VydmljZT1kLHRoaXMuc2VhcmNoTGliSW5wdXRMaXN0PW5ldyBEZyx0aGlzLnRhYmxlT25DbGlja0VtaXR0ZXI9bmV3IFhyLHRoaXMubGlicmFyeU9uQ2xpY2tFbWl0dGVyPW5ldyBYcix0aGlzLmhhc0NvbHVtbnM9ITEsdGhpcy5wYWdpbmc9ITAsdGhp''@;'; put 'put ''cy5saWJyYXJpZXNTZWFyY2g9IiIsdGhpcy5saWI9IiIsdGhpcy50YWJsZT0iIix0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZX1uZ09uSW5pdCgpe31uZ0FmdGVyVmlld0luaXQoKXtzZXRUaW1lb3V0KCgp''@;'; put 'put ''PT57dGhpcy5zZWFyY2hMaWJJbnB1dExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC5mb2N1cygpfSl9bmdPbkNoYW5nZXMoYSl7YS5saWJyYXJ5TGlzdD8uY3VycmVudFZhbHVlJiZ0aGlzLmxpYnJhcnlMaXN0JiZ0aGlzLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyh0aGlzLmxpYnJh''@;'; put 'put ''cnlMaXN0KX10cmVlT25GaWx0ZXIoYSxkKXt0aGlzLmhlbHBlclNlcnZpY2UudHJlZU9uRmlsdGVyKGEsZCl9bGlicmFyeU9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmxpYnJhcnlMaXN0LHRoaXMubGlicmFyaWVzU2VhcmNoLCJMSUJSQVJZTkFN''@;'; put 'put ''RSIpLFhuLmxpbmVhZ2UubGlicmFyaWVzU2VhcmNoPXRoaXMubGlicmFyaWVzU2VhcmNofXRyZWVOb2RlQ2xpY2tlZChhLGQsaCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlVHJlZUl0ZW1zKGgsZCl9bGlicmFyeU9uQ2xpY2soYSxkLGgpe2QuaW5Gb3JlZ3Jv''@;'; put 'put ''dW5kPSEwO2NvbnN0IGY9KCk9PnNldFRpbWVvdXQoKCk9PmguY29udGVudENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvcigiaW5wdXQiKS5mb2N1cygpKTtpZihkLnRhYmxlcylkLmV4cGFuZGVkPSFkLmV4cGFuZGVkLHRoaXMubGlicmFyeU9uQ2xp''@;'; put 'put ''Y2tFbWl0dGVyLmVtaXQoe2xpYmlkOmEsbGlicmFyeTpkLHRhYmxlc0xvYWRlZDohMH0pO2Vsc2V7ZC5sb2FkaW5nVGFibGVzPSEwLHRoaXMubGlicmFyeU9uQ2xpY2tFbWl0dGVyLmVtaXQoe2xpYmlkOmEsbGlicmFyeTpkLHRhYmxlc0xvYWRlZDohMX0pO2NvbnN0IHY9c2V0SW50ZXJ2YWwo''@;'; put 'put ''KCk9PntkLmxvYWRpbmdUYWJsZXN8fChmKCksY2xlYXJJbnRlcnZhbCh2KSl9LDUwMCl9ZC5leHBhbmRlZCYmZigpLHRoaXMuY29sbGFwc2VUcmVlSXRlbXModGhpcy5saWJyYXJ5TGlzdCxkKX10YWJsZU9uQ2xpY2soYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2Yu''@;'; put 'put ''aGVscGVyU2VydmljZS5kZWJvdW5jZUNhbGwoNTAsKCk9PntmLmhhc0NvbHVtbnM/KGQuY29sdW1ucz8oZC5leHBhbmRlZD0hZC5leHBhbmRlZCwhMD09PWQuZXhwYW5kZWQmJihmLnRhYmxlPWEsZi50YWJsZU9uQ2xpY2tFbWl0dGVyLmVtaXQoe3RhYmxldXJpOmEsbGliVGFibGU6ZCxsaWJy''@;'; put 'put ''YXJ5OmgsY29sdW1uc0xvYWRlZDohMH0pKSk6KGQuZXhwYW5kZWQ9IWQuZXhwYW5kZWQsZC5sb2FkaW5nQ29sdW1ucz0hMCxmLnRhYmxlPWEsZi50YWJsZU9uQ2xpY2tFbWl0dGVyLmVtaXQoe3RhYmxldXJpOmEsbGliVGFibGU6ZCxsaWJyYXJ5OmgsY29sdW1uc0xvYWRlZDohMX0pKSxmLmNv''@;'; put 'put ''bGxhcHNlVHJlZUl0ZW1zKGgudGFibGVzLGQpKTpmLnRhYmxlT25DbGlja0VtaXR0ZXIuZW1pdCh7dGFibGV1cmk6YSxsaWJUYWJsZTpkLGxpYnJhcnk6aCxjb2x1bW5zTG9hZGVkOiExfSl9KX0pKCl9Y29sdW1uT25DbGljayhhLGQsaCl7dGhpcy5saWI9ZC5MSUJSQVJZSUQsdGhpcy50YWJs''@;'; put 'put ''ZT1oLlRBQkxFVVJJLHRoaXMuY29sdW1uPWEuQ09MVVJJfWxpYlRhYkFjdGl2ZShhLGQpe3JldHVybiEoIXRoaXMubGlifHwhdGhpcy50YWJsZSkmJmE9PT10aGlzLmxpYiYmZD09PXRoaXMudGFibGV9bGliQ29sdW1uQWN0aXZlKGEpe2lmKCF0aGlzLmNvbHVtbilyZXR1cm4hMTtsZXQgZD1h''@;'; put 'put ''LnNwbGl0KCJcXCIpLGg9dGhpcy5jb2x1bW4uc3BsaXQoIlxcIik7cmV0dXJuIGRbZC5sZW5ndGgtMV09PWhbaC5sZW5ndGgtMV19Y29sbGFwc2VUcmVlSXRlbXMoYSxkKXthLmZvckVhY2goaD0+e0pTT04uc3RyaW5naWZ5KGgpIT09SlNPTi5zdHJpbmdpZnkoZCkmJihoLmV4cGFuZGVkPSEx''@;'; put 'put ''KX0pfWxvYWRNb3JlTGlicmFyaWVzKCl7dGhpcy5saWJyYXJpZXNQYWdpbmd8fCh0aGlzLmxpYnJhcmllc1BhZ2luZz0hMCx0aGlzLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyh0aGlzLmxpYnJhcnlMaXN0LCEwKSx0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSl9aGFuZGxlU2Nyb2xs''@;'; put 'put ''KGEpe2xldCBkPWEudGFyZ2V0O2QmJmQuc2Nyb2xsVG9wPj1kLnNjcm9sbEhlaWdodC1kLm9mZnNldEhlaWdodC0xMCYmdGhpcy5sb2FkTW9yZUxpYnJhcmllcygpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHFlKEx1KSxxZShPMSkpfX1zdGF0''@;'; put 'put ''aWN7dGhpcy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siZGMtdHJlZSJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJlVhKHF3dCw1KSwyJmQpe2xldCBmO2dpKGY9bWkoKSkmJihoLnNlYXJjaExpYklucHV0TGlzdD1mKX19LGhvc3RCaW5kaW5nczpmdW5jdGlv''@;'; put 'put ''bihkLGgpezEmZCYmT3QoInNjcm9sbCIsZnVuY3Rpb24odil7cmV0dXJuIGguaGFuZGxlU2Nyb2xsKHYpfSl9LGlucHV0czp7aGFzQ29sdW1uczoiaGFzQ29sdW1ucyIscGFnaW5nOiJwYWdpbmciLGxpYnJhcnlMaXN0OiJsaWJyYXJ5TGlzdCJ9LG91dHB1dHM6e3RhYmxlT25DbGlja0VtaXR0''@;'; put 'put ''ZXI6InRhYmxlT25DbGlja0VtaXR0ZXIiLGxpYnJhcnlPbkNsaWNrRW1pdHRlcjoibGlicmFyeU9uQ2xpY2tFbWl0dGVyIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbV29dLGRlY2xzOjQsdmFyczozLGNvbnN0czpbWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbImxpYlRyZWVOb2RlIiwi''@;'; put 'put ''Il0sWyJzZWFyY2hUcmVlSW5wdXQiLCIiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxb''@;'; put 'put ''ImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiTGlicmFyaWVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hh''@;'; put 'put ''cGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMs''@;'; put 'put ''ImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsci1leHBhbmRlZCIsImNs''@;'; put 'put ''aWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJUYWJsZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIs''@;'; put 'put ''Im5nTW9kZWwiXSxbNCwibmdWYXIiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwxLCJjbHItdHJlZW5vZGUtbGluayIsMywiY2xpY2siXSxbMywibmdTd2l0Y2giXSxbInNoYXBlIiwiYm9sdCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJzaGFwZSIsInRhYmxlIiw0LCJuZ1N3aXRjaENhc2UiXSxb''@;'; put 'put ''ImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbNCwibmdJZiJdLFsic2hhcGUiLCJib2x0Il0sWyJzaGFwZSIsInRhYmxlIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyJdLFsiYXBwU3RlYWxGb2N1''@;'; put 'put ''cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJDb2x1bW5zIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWzEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFsic2hhcGUiLCJvYmpl''@;'; put 'put ''Y3RzIl0sWzEsInctMTAwIiwidGV4dC1jZW50ZXIiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItc20iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJjbHItdHJlZSIpLGd0KDEsZUN0LDYsMywiY2xyLXRyZWUtbm9kZSIsMykoMixtQ3QsMiwxLCJuZy1jb250YWluZXIiLDQp''@;'; put 'put ''LGhlKCksZ3QoMyx2Q3QsMywwLCJkaXYiLDUpKSwyJmQmJihmZSgpLEVlKCJuZ0lmIixoLmxpYnJhcnlMaXN0KSxmZSgpLEVlKCJuZ0Zvck9mIixoLmxpYnJhcnlMaXN0KSxmZSgpLEVlKCJuZ0lmIixoLmxpYnJhcmllc1BhZ2luZykpfSxkZXBlbmRlbmNpZXM6W2hzLENhLENmLGw0LHcyLG1o''@;'; put 'put ''LHU1LFVsLGMxLElmLE1kLGs5LEk5LEQ5LG5jLGhsLHJsLGdTLG9nXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IGJDdD1bInJlc2l6ZUJveCJdLF9DdD1bImRyYWdIYW5kbGVDb3JuZXIiXSx3Q3Q9KGMsbCxhKT0+KHtjb2xIZWFkZXJzSGlkZGVuOmMsY29sSGVhZGVy''@;'; put 'put ''c1Zpc2libGU6bCxoZWFkZXJQa3M6YX0pLENDdD0oYyxsKT0+KHt4OmMseTpsfSksU0N0PSgpPT4oe30pO2Z1bmN0aW9uIE1DdChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDM3KSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLFh1KCJUbyB1bmxvY2sgbW9yZSB0aGVuICIs''@;'; put 'put ''YS5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdCwiICIsMT09PWEubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3hfbGltaXQ/InZpZXdib3giOiJ2aWV3Ym94ZXMiLCIsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpfX1mdW5jdGlvbiB4Q3QoYyxsKXsxJmMmJihk''@;'; put 'put ''ZSgwLCJkaXYiLDM4KSxHdCgxLCJjbHItc3Bpbm5lciIsMzkpLGhlKCkpfWZ1bmN0aW9uIEVDdChjLGwpezEmYyYmKGRlKDAsInAiLDQwKSxQZSgxLCIgVmlld2JveCBvcGVuIGxpbWl0IHJlYWNoZWQgIiksaGUoKSl9ZnVuY3Rpb24gVEN0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUo''@;'; put 'put ''MCwiZGMtdHJlZSIsNDEpLE90KCJsaWJyYXJ5T25DbGlja0VtaXR0ZXIiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgpLmxpYnJhcnlPbkNsaWNrKGgpKX0pKCJ0YWJsZU9uQ2xpY2tFbWl0dGVyIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS50YWJsZU9uQ2xpY2so''@;'; put 'put ''aCkpfSksaGUoKX0yJmMmJkVlKCJsaWJyYXJ5TGlzdCIsT2UoKS5saWJyYXJpZXMpfWZ1bmN0aW9uIEFDdChjLGwpezEmYyYmKGRlKDAsInAiLDQyKSxQZSgxLCIgUGljayB0YWJsZSBmcm9tIHRoZSBsaXN0IG9uIHRoZSBsZWZ0ICIpLGhlKCkpfWZ1bmN0aW9uIGtDdChjLGwpezEmYyYmR3Qo''@;'; put 'put ''MCwiY2xyLXNwaW5uZXIiLDUwKX1mdW5jdGlvbiBEQ3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJhIiwxNyksT3QoImNsaWNrIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCkuJGltcGxpY2l0LHY9T2UoKTtyZXR1cm4gdi5taW5pbWl6ZShmKSxDdCh2LnN0b3BQcm9w''@;'; put 'put ''YWdhdGlvbihoKSl9KSxHdCgxLCJjbHItaWNvbiIsMjApLGRlKDIsInNwYW4iLDE5KSxQZSgzLCJNaW5pbWl6ZSB2aWV3Ym94IiksaGUoKSgpfX1mdW5jdGlvbiBJQ3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJhIiwxNyksT3QoImNsaWNrIixmdW5jdGlvbihoKXt3dChhKTtj''@;'; put 'put ''b25zdCBmPU9lKCkuJGltcGxpY2l0LHY9T2UoKTtyZXR1cm4gdi5yZXN0b3JlKGYpLEN0KHYuc3RvcFByb3BhZ2F0aW9uKGgpKX0pLEd0KDEsImNsci1pY29uIiwyMSksZGUoMiwic3BhbiIsMTkpLFBlKDMsIlJlc3RvcmUgdmlld2JveCIpLGhlKCkoKX19ZnVuY3Rpb24gUkN0KGMsbCl7aWYo''@;'; put 'put ''MSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2Iiw0MyksT3QoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLnNlbGVjdFZpZXdib3goaCkpfSksZGUoMSwiZGl2Iiw0NCksUGUoMiksZ3QoMyxrQ3QsMSwwLCJjbHItc3Bpbm5lciIsNDUp''@;'; put 'put ''LGhlKCksZGUoNCwiZGl2IikoNSwiYSIsNDYpLE90KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQsdj1PZSgpO3JldHVybiB2LnJlc2V0UG9zU2l6ZShmKSxDdCh2LnN0b3BQcm9wYWdhdGlvbihoKSl9KSxHdCg2LCJjbHItaWNvbiIsNDcpLGRlKDcsInNwYW4i''@;'; put 'put ''LDE5KSxQZSg4LCJSZXNldCBwb3NpdGlvbiBhbmQgc2l6ZSIpLGhlKCkoKSxndCg5LERDdCw0LDAsImEiLDQ4KSgxMCxJQ3QsNCwwLCJhIiw0OCksZGUoMTEsImEiLDE3KSxPdCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0LHY9T2UoKTtyZXR1cm4gdi5jbG9z''@;'; put 'put ''ZShmKSxDdCh2LnN0b3BQcm9wYWdhdGlvbihoKSl9KSxHdCgxMiwiY2xyLWljb24iLDQ5KSxkZSgxMywic3BhbiIsMTkpLFBlKDE0LCJDbG9zZSB2aWV3Ym94IiksaGUoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1PZSgpO3hyKCJzZWxlY3RlZCIsKG51bGw9PWQuc2Vs''@;'; put 'put ''ZWN0ZWRWaWV3Ym94P251bGw6ZC5zZWxlY3RlZFZpZXdib3guaWQpPT09YS5pZCksZmUoMiksazMoIiAjIixhLmlkLCIgIixhLmxpYnJhcnksIi4iLGEudGFibGUsIiAiKSxmZSgpLEVlKCJuZ0lmIixhLmxvYWRpbmdEYXRhKSxmZSgyKSx4cigiZGlzYWJsZWQiLDA9PT1hLngmJjA9PT1hLnkp''@;'; put 'put ''LGZlKDQpLEVlKCJuZ0lmIiwhYS5taW5pbWl6ZWQpLGZlKCksRWUoIm5nSWYiLGEubWluaW1pemVkKX19ZnVuY3Rpb24gTEN0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiksUGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksSXIoIiAiLGEsIiAiKX19ZnVuY3Rp''@;'; put 'put ''b24gT0N0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7b2koMCksZGUoMSwiZGl2Iiw1MykoMiwiYXBwLWF1dG9jb21wbGV0ZSIsNTQsMCksT3QoInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPWZhKDMpLHY9T2UoKS5uZ1ZhcjtyZXR1cm4gQ3QoT2UoKS5vbkNvbHNl''@;'; put 'put ''YXJjaENoYW5nZShmLGgsdi5jb2xIZWFkZXJzSGlkZGVuKSl9KSxndCg0LExDdCwyLDEsIm9wdGlvbiIsNTUpLGhlKCkoKSxzaSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpLm5nVmFyO2ZlKDIpLEVlKCJpbnB1dElkIiwidmlld2JveC1jb2x1bW4tc2VhcmNoIikoImVtaXRPbmx5U2VsZWN0ZWQi''@;'; put 'put ''LCEwKSxmZSgyKSxFZSgibmdGb3JPZiIsYS5jb2xIZWFkZXJzSGlkZGVuKX19ZnVuY3Rpb24gUEN0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsNjEpfWZ1bmN0aW9uIEZDdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1pY29uIiw2MiksT3QoImNsaWNrIixmdW5jdGlv''@;'; put 'put ''bigpe3d0KGEpO2NvbnN0IGg9T2UoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKDMpLm9uQ29sUmVtb3ZlKGgpKX0pLGhlKCl9fWZ1bmN0aW9uIEhDdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNTgpKDEsInNwYW4iKSxQZSgyKSxndCgzLFBDdCwxLDAsImNsci1pY29uIiw1OSksaGUoKSxn''@;'; put 'put ''dCg0LEZDdCwxLDAsImNsci1pY29uIiw2MCksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9T2UoMikubmdWYXIsaD1PZSgpO0pzZSgiY29sLWJveCBjb2x1bW4tIixhLCIiKSx4cigiY3Vyc29yLWRlZmF1bHQtaSIsZC5oZWFkZXJQa3MuaW5jbHVkZXMoYSkpKCJwcmltYXJ5S2V5''@;'; put 'put ''SGVhZGVyU3R5bGUiLGQuaGVhZGVyUGtzLmluY2x1ZGVzKGEpKSxFZSgiY2RrRHJhZ0RhdGEiLGEpKCJjZGtEcmFnRGlzYWJsZWQiLGQuaGVhZGVyUGtzLmluY2x1ZGVzKGEpKSxmZSgyKSxYdSgiICIsYSwiICIsIm51bSI9PT0obnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZXx8bnVsbD09''@;'; put 'put ''aC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZT9udWxsOmguc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuJGRhdGFmb3JtYXRzLnZhcnNbYV0udHlwZSk/IihudW1lcmljKSI6IiIsIiAiKSxmZSgpLEVlKCJuZ0lmIixkLmhlYWRlclBrcy5pbmNsdWRlcyhhKSksZmUoKSxFZSgi''@;'; put 'put ''bmdJZiIsIWQuaGVhZGVyUGtzLmluY2x1ZGVzKGEpKX19ZnVuY3Rpb24gTkN0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7b2koMCksZGUoMSwicCIsMTApLFBlKDIsIkNvbHVtbnMgVG8gRGlzcGxheSAoZHJhZyBhbmQgcmUtb3JkZXIpIiksaGUoKSxkZSgzLCJkaXYiLDU2KSxPdCgiY2Rr''@;'; put 'put ''RHJvcExpc3REcm9wcGVkIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikuY29sdW1uc0Ryb3AoaCkpfSksZ3QoNCxIQ3QsNSwxMywiZGl2Iiw1NyksaGUoKSxzaSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpLm5nVmFyO2ZlKDMpLEVlKCJjZGtEcm9wTGlzdERhdGEiLGEuY29sSGVh''@;'; put 'put ''ZGVyc1Zpc2libGUpLGZlKCksRWUoIm5nRm9yT2YiLGEuY29sSGVhZGVyc1Zpc2libGUpfX1mdW5jdGlvbiBWQ3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDUxKSxndCgxLE9DdCw1LDMsIm5nLWNvbnRhaW5lciIsNTIpKDIsTkN0LDUsMiwibmctY29udGFpbmVyIiw1MiksaGUoKSksMiZj''@;'; put 'put ''KXtjb25zdCBhPWwubmdWYXI7ZmUoKSxFZSgibmdJZiIsYS5jb2xIZWFkZXJzSGlkZGVuKSxmZSgpLEVlKCJuZ0lmIixhLmNvbEhlYWRlcnNWaXNpYmxlKX19ZnVuY3Rpb24gQkN0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLWljb24iLDg2KSxPdCgiY2xpY2siLGZ1bmN0''@;'; put 'put ''aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoKS5jb2xsYXBzZShoKSl9KSxoZSgpfX1mdW5jdGlvbiBqQ3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItaWNvbiIsODcpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBo''@;'; put 'put ''PU9lKCkuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLmV4cGFuZChoKSl9KSxoZSgpfX1mdW5jdGlvbiB6Q3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItaWNvbiIsODgpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCkuJGltcGxpY2l0LGY9ZmEo''@;'; put 'put ''MTYpO3JldHVybiBDdChPZSgpLnNlYXJjaFRhYmxlKGYsaCkpfSksaGUoKX19ZnVuY3Rpb24gVUN0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsODkpLFBlKDEsIiBMb2FkaW5nLi4uICIpLGhlKCkpfWZ1bmN0aW9uIFpDdChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDkwKSxQZSgxLCJMb2FkaW5n''@;'; put 'put ''Li4uIiksaGUoKSl9ZnVuY3Rpb24gV0N0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLWljb24iLDkxKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpLiRpbXBsaWNpdCxmPWZhKDE2KTtyZXR1cm4gT2UoKS5yZWxvYWRUYWJsZURhdGEoaCksQ3Qo''@;'; put 'put ''Zi52YWx1ZT0iIil9KSxoZSgpfX1mdW5jdGlvbiBZQ3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDk1KSxHdCgxLCJjbHItc3Bpbm5lciIsMzkpLGhlKCkpfWZ1bmN0aW9uIEdDdChjLGwpe2lmKDEmYyYmR3QoMCwiaG90LXRhYmxlIiw5NiksMiZjKXtjb25zdCBhPU9lKDIpLiRpbXBsaWNpdDtF''@;'; put 'put ''ZSgic2V0dGluZ3MiLE9lKCkudmlld2JveEhvdFNldHRpbmdzLmdldChhLmlkKXx8dGwoMixTQ3QpKSgiaWQiLCJob3RUYWJsZV8iK2EuaWQpfX1mdW5jdGlvbiAkQ3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDkyKSxndCgxLFlDdCwyLDAsImRpdiIsOTMpKDIsR0N0LDEsMywiaG90LXRh''@;'; put 'put ''YmxlIiw5NCksaGUoKSksMiZjKXtjb25zdCBhPWwubmdWYXIsZD1PZSgpLiRpbXBsaWNpdCxoPU9lKCk7bWQoImRpc3BsYXkiLGQuY29sbGFwc2VkPyJub25lIjoiIiksZmUoKSxFZSgibmdJZiIsZC5sb2FkaW5nRGF0YSYmYTwwKSxmZSgpLEVlKCJuZ0lmIixhPi0xJiZoLnZpZXdib3hIb3RT''@;'; put 'put ''ZXR0aW5ncy5nZXQoZC5pZCkpfX1mdW5jdGlvbiBLQ3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDYzLDEpLE90KCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkuZm9jdXNWaWV3Ym94KGgpKX0pKCJjZGtE''@;'; put 'put ''cmFnRW5kZWQiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLnZpZXdib3hEcmFnRW5kZWQoaCxmKSl9KSxkZSgyLCJkaXYiLDY0KSgzLCJzcGFuIiw2NSksUGUoNCksaGUoKSxkZSg1LCJkaXYiLDY2KSxndCg2LEJDdCwxLDAsImNsci1pY29uIiw2''@;'; put 'put ''NykoNyxqQ3QsMSwwLCJjbHItaWNvbiIsNjgpLGRlKDgsImNsci1pY29uIiw2OSksT3QoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLm1pbmltaXplKGgpKX0pLGhlKCksZGUoOSwiY2xyLWljb24iLDcwKSxPdCgiY2xpY2siLGZ1bmN0''@;'; put 'put ''aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkuY2xvc2UoaCkpfSksaGUoKSgpKCksZGUoMTAsInNwYW4iLDcxLDIpLE90KCJjZGtEcmFnTW92ZWQiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0LHY9ZmEoMSksTT1mYSgxMSk7cmV0dXJuIEN0''@;'; put 'put ''KE9lKCkuZHJhZ01vdmUoTSx2LGYsaCkpfSksaGUoKSxkZSgxMiwiZm9ybSIsNzIpKDEzLCJkaXYiLDczKSgxNCwiZGl2Iiw3NCkoMTUsImlucHV0Iiw3NSwzKSxPdCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQsZj1mYSgxNik7cmV0dXJuIEN0KE9l''@;'; put 'put ''KCkuc2VhcmNoVGFibGUoZixoKSl9KSxoZSgpLGd0KDE3LHpDdCwxLDAsImNsci1pY29uIiw3NikoMTgsVUN0LDIsMCwic3BhbiIsNzcpLGhlKCksZGUoMTksImNsci1jaGVja2JveC1jb250YWluZXIiKSgyMCwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgyMSwiaW5wdXQiLDc4KSxjaSgibmdN''@;'; put 'put ''b2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIGZpKGYuc2VhcmNoTnVtZXJpYyxoKXx8KGYuc2VhcmNoTnVtZXJpYz1oKSxDdChoKX0pLGhlKCksZGUoMjIsImxhYmVsIiksUGUoMjMsIk51bWVyaWMiKSxoZSgpKCkoKSgpLGRlKDI0LCJkaXYi''@;'; put 'put ''LDQ0KSxndCgyNSxaQ3QsMiwwLCJzcGFuIiw3OSkoMjYsV0N0LDEsMCwiY2xyLWljb24iLDgwKSxkZSgyNywiYSIsODEpLE90KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdCxmPWZhKDE2KTtyZXR1cm4gT2UoKS5vcGVuRmlsdGVyKGgpLEN0KGYudmFsdWU9IiIp''@;'; put 'put ''fSksR3QoMjgsImNsci1pY29uIiw4MiksZGUoMjksInNwYW4iLDgzKSxQZSgzMCksaGUoKSgpLGRlKDMxLCJjbHItaWNvbiIsODQpLE90KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoKS5vcGVuVGFibGVFZGl0KGgpKX0pLGhlKCkoKSgp''@;'; put 'put ''LGd0KDMyLCRDdCwzLDQsImRpdiIsODUpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9T2UoKTttZCgiZGlzcGxheSIsYS5taW5pbWl6ZWQ/Im5vbmUiOiIiKSgid2lkdGgiLGEud2lkdGgsInB4IikoImhlaWdodCIsYS5oZWlnaHQsInB4IikoInBvaW50ZXItZXZlbnRzIixh''@;'; put 'put ''LmNvbGxhcHNlZD8ibm9uZSI6IiIpKCJib3gtc2hhZG93IixhLmNvbGxhcHNlZD8ibm9uZSI6IiIpLHhyKCJmb2N1c2VkIixhLmZvY3VzZWQpLEVlKCJjZGtEcmFnRnJlZURyYWdQb3NpdGlvbiIsbzQoMzQsQ0N0LGEueCxhLnkpKSgiaWQiLCJ2aWV3Ym94XyIrYS5pZCksZmUoNCksazMoIiAj''@;'; put 'put ''IixhLmlkLCIgIixhLmxpYnJhcnksIi4iLGEudGFibGUsIiAiKSxmZSgyKSxFZSgibmdJZiIsIWEuY29sbGFwc2VkKSxmZSgpLEVlKCJuZ0lmIixhLmNvbGxhcHNlZCksZmUoMyksRWUoImlkIiwiaGFuZGxlX3ZpZXdib3hfIithLmlkKSxmZSgyKSxtZCgiZGlzcGxheSIsYS5jb2xsYXBzZWQ/''@;'; put 'put ''Im5vbmUiOiIiKSxmZSgzKSxFZSgidHlwZSIsYS5zZWFyY2hOdW1lcmljPyJudW1iZXIiOiJ0ZXh0IiksZmUoMiksRWUoIm5nSWYiLCFhLnNlYXJjaExvYWRpbmcpLGZlKCksRWUoIm5nSWYiLGEuc2VhcmNoTG9hZGluZyksZmUoMyksbGkoIm5nTW9kZWwiLGEuc2VhcmNoTnVtZXJpYyksZmUo''@;'; put 'put ''NCksRWUoIm5nSWYiLGEubG9hZGluZ0RhdGEpLGZlKCksRWUoIm5nSWYiLCFhLmxvYWRpbmdEYXRhKSxmZSgyKSx4cigiZmlsdGVyLWFjdGl2ZSIsIjAiIT09YS5maWx0ZXJfcGspLGZlKDIpLENyKGEuZmlsdGVyVGV4dCksZmUoKSx4cigiZGlzYWJsZWQiLCFkLnRhYmxlRWRpdEV4aXN0cyhh''@;'; put 'put ''KSksZmUoKSxFZSgibmdWYXIiLGQuZ2V0Vmlld2JveFRhYmxlSW5kZXgoYSkpfX1mdW5jdGlvbiBYQ3QoYyxsKXtpZigxJmMmJkd0KDAsImFwcC1xdWVyeSIsOTcsNCksMiZjKXtjb25zdCBhPU9lKCk7RWUoInZpZXdib3hJZCIsbnVsbD09YS5maWx0ZXJpbmdWaWV3Ym94P251bGw6YS5maWx0''@;'; put 'put ''ZXJpbmdWaWV3Ym94LmlkKX19bGV0IFJ5ZT0oKCk9PntjbGFzcyBje2dldCB2aWV3Ym94TW9kYWwoKXtyZXR1cm4gdGhpcy5fdmlld2JveE1vZGFsfXNldCB2aWV3Ym94TW9kYWwoYSl7aWYoITE9PT10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94JiZhKXJldHVybiB0aGlzLmV2ZW50''@;'; put 'put ''U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIlZpZXdib3hlcyIpLHZvaWQgdGhpcy52aWV3Ym94TW9kYWxDaGFuZ2UuZW1pdCghMSk7dGhpcy5fdmlld2JveE1vZGFsPWEsYSYmdGhpcy51bnNldFNlbGVjdGVkVmlld2JveCgpfWNvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQsVSx0ZSxvZSl7''@;'; put 'put ''dGhpcy5uZ1pvbmU9YSx0aGlzLmxpY2VuY2VTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5ldmVudFNlcnZpY2U9Zix0aGlzLnNhc1N0b3JlU2VydmljZT12LHRoaXMubG9nZ2VyU2VydmljZT1NLHRoaXMuaGVscGVyU2VydmljZT1ELHRoaXMucm91dGVyPVUsdGhpcy5hY3RpdmF0''@;'; put 'put ''ZWRSb3V0ZT10ZSx0aGlzLmNkZj1vZSx0aGlzLl92aWV3Ym94TW9kYWw9ITEsdGhpcy52aWV3Ym94TW9kYWxDaGFuZ2U9bmV3IFhyLHRoaXMubGliaW5mbz1udWxsLHRoaXMubGlicmFyaWVzTG9hZGluZz0hMCx0aGlzLnZpZXdib3hlcz1bXSx0aGlzLmRlZmF1bHRDb25maWc9e2lkOi0xLGxp''@;'; put 'put ''YnJhcnk6IiIsdGFibGU6IiIsd2lkdGg6NTAwLGhlaWdodDozMDAseDowLHk6MTUwLGNvbHVtbnM6W119LHRoaXMuc2FzanNDb25maWc9bmV3IGQyLlNBU2pzQ29uZmlnLHRoaXMuaG90VGFibGVEZWZhdWx0PXtkYXRhOltdLGhlYWRlclBrczpbXSwkZGF0YWZvcm1hdHM6e30sYWxsQ29sSGVh''@;'; put 'put ''ZGVyczpbXSxjb2xIZWFkZXJzSGlkZGVuOltdLGNvbEhlYWRlcnNWaXNpYmxlOltdLGNvbEhlYWRlcnM6W10sY29udGV4dE1lbnU6WyJjb3B5X3dpdGhfY29sdW1uX2hlYWRlcnMiLCJjb3B5X2NvbHVtbl9oZWFkZXJzX29ubHkiXSxjb3B5UGFzdGU6e2NvcHlDb2x1bW5IZWFkZXJzOiEwLGNv''@;'; put 'put ''cHlDb2x1bW5IZWFkZXJzT25seTohMH0sY29sdW1uczpbXSxjb2xzOltdLGhlaWdodDoyMDAsc2V0dGluZ3M6e30saGlkZGVuQ29sdW1uczohMCxtYW51YWxDb2x1bW5Nb3ZlOiExLGFmdGVyR2V0Q29sSGVhZGVyOnZvaWQgMCxsaWNlbnNlS2V5OnZvaWQgMCxkcm9wZG93bk1lbnU6dm9pZCAw''@;'; put 'put ''fSx0aGlzLnZpZXdib3hIb3RTZXR0aW5ncz1uZXcgTWFwLHRoaXMudmlld2JveFRhYmxlcz1bXSx0aGlzLmZpbHRlcj0hMSx0aGlzLmZpbHRlckxvYWRpbmc9ITEsdGhpcy5udWxsVmFyaWFibGVzPSExLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRl''@;'; put 'put ''LHRoaXMuSW5maW5pdHk9MS8wLHRoaXMubWF4Vmlld2JveGVzPXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3hfbGltaXQ9PT0xLzA/Njp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0fHw2fW5nT25Jbml0KCl7dGhpcy5zYXNTdG9yZVNlcnZpY2Uudmlld0xpYnMo''@;'; put 'put ''KS50aGVuKGQ9Pnt0aGlzLmxpYnJhcmllcz1kLnNhc2xpYnN9KS5jYXRjaChkPT57dGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKGQpfSkuZmluYWxseSgoKT0+e3RoaXMubGlicmFyaWVzTG9hZGluZz0hMX0pLHRoaXMuX3F1ZXJ5PXRoaXMuc2FzU3RvcmVTZXJ2aWNlLnF1ZXJ5LnN1YnNjcmli''@;'; put 'put ''ZShkPT57dGhpcy5jbGF1c2VzPWQub2JqLHRoaXMuZmlsdGVyTGliZHM9ZC5saWJkc30pLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksdGhpcy5saWNlbmNlU2VydmljZS5ob3RfbGljZW5zZV9rZXkuc3Vic2NyaWJlKGQ9Pnt0aGlzLmhvdFRhYmxl''@;'; put 'put ''RGVmYXVsdC5saWNlbnNlS2V5PWR9KTtjb25zdCBhPXRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMudmlld2JveGVzO2EmJighMT09PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3g/KHNldFRpbWVvdXQoKCk9PnRoaXMuZXZlbnRTZXJ2aWNlLnNob3dEZW1v''@;'; put 'put ''TGltaXRNb2RhbCgiTGlua2luZyBWaWV3Ym94ZXMiKSksdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10se3JlbGF0aXZlVG86dGhpcy5hY3RpdmF0ZWRSb3V0ZSxxdWVyeVBhcmFtczp7fX0pKToodGhpcy52aWV3Ym94ZXM9dGhpcy5kZWNvZGVVcmxEYXRhKGEpLHNldFRpbWVvdXQoKCk9Pnt0aGlz''@;'; put 'put ''LnNldEFsbEhhbmRsZVRyYW5zZm9ybSgpfSkpKSx0aGlzLnJlTG9hZFZpZXdib3h0YWJsZXModGhpcy52aWV3Ym94ZXMpfW5nQWZ0ZXJWaWV3SW5pdCgpe3NldFRpbWVvdXQoKCk9Pnt0aGlzLnNldEFsbEhhbmRsZVRyYW5zZm9ybSgpLHRoaXMudmlld2JveGVzLmZvckVhY2goYT0+e3RoaXMu''@;'; put 'put ''Z2V0Vmlld2JveFRhYmxlSW5kZXgoYSk+LTEmJnRoaXMucmVmcmVzaFRhYmxlQWZ0ZXJSZXNpemUoYSl9KX0sMWUzKX1nZXQgdmlld2JveExpbWl0UmVhY2hlZCgpe3JldHVybiB0aGlzLnZpZXdib3hlcy5sZW5ndGg+PXRoaXMubWF4Vmlld2JveGVzfWNsck1vZGFsT3BlbkNoYW5nZShhKXt0''@;'; put 'put ''aGlzLnZpZXdib3hNb2RhbENoYW5nZS5lbWl0KGEpfWxpYnJhcnlPbkNsaWNrKGEpe2EudGFibGVzTG9hZGVkfHx0aGlzLmxvYWRUYWJsZXMoYS5saWJyYXJ5LkxJQlJBUllSRUYsYS5saWJyYXJ5KX10YWJsZU9uQ2xpY2soYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aWYo''@;'; put 'put ''ZC52aWV3Ym94TGltaXRSZWFjaGVkKXJldHVybjtjb25zdCBoPXsuLi5kLmRlZmF1bHRDb25maWcsdGFibGU6YS5saWJUYWJsZSxsaWJyYXJ5OmEubGlicmFyeS5MSUJSQVJZTkFNRSxsb2FkaW5nRGF0YTohMCxmaWx0ZXJfcGs6IjAiLGlkOmQudmlld2JveGVzLmxlbmd0aCsxLHg6d2luZG93''@;'; put 'put ''LmlubmVyV2lkdGgtZC5kZWZhdWx0Q29uZmlnLndpZHRoLHk6MTUwfTtkLnZpZXdib3hlcy5wdXNoKGgpLHNldFRpbWVvdXQoKCk9PntkLnNldEFsbEhhbmRsZVRyYW5zZm9ybSgpfSk7Y29uc3QgZj1gJHthLmxpYnJhcnkuTElCUkFSWVJFRn0uJHthLmxpYlRhYmxlfWA7eWllbGQgZC5sb2Fk''@;'; put 'put ''RGF0YShmLGgpLGgubG9hZGluZ0RhdGE9ITEsZC5ldmVudFNlcnZpY2UuZGlzcGF0Y2hFdmVudCgicmVzaXplIiksZC5zbmFwVG9HcmlkKCl9KSgpfWxvYWRUYWJsZXMoYSxkKXt0aGlzLnNhc1N0b3JlU2VydmljZS52aWV3VGFibGVzKGEpLnRoZW4oaD0+e2xldCBmPWgubXB0YWJsZXMubWFw''@;'; put 'put ''KGZ1bmN0aW9uKHYpe3JldHVybiB2Lk1FTU5BTUV9KTt0aGlzLmxpYmluZm89aC5saWJpbmZvfHxbXSx0aGlzLnRhYmxlcz1mLGQmJihkLnRhYmxlcz1mLGQubGliaW5mbz10aGlzLmxpYmluZm8sZC5sb2FkaW5nVGFibGVzPSExLGYubGVuZ3RoPjAmJihkLmV4cGFuZGVkPSEwKSl9KS5jYXRj''@;'; put 'put ''aChoPT57dGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKGgpfSl9cmVsb2FkRGF0YShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoZix2KT0+e2xldCBNPWgudmlld2JveFRhYmxlcy5maW5kKEQ9PkQudmlld2JveElkPT09ZC5pZCk7aC5z''@;'; put 'put ''YXNTdG9yZVNlcnZpY2Uudmlld0RhdGEoYSxwYXJzZUludChkLmZpbHRlcl9wa3x8IjAiKSkudGhlbihEPT57TSYmKE0uaG90VGFibGUuZGF0YT1ELnZpZXdkYXRhLGguY3JlYXRlVmlld2JveFRhYmxlU2V0dGluZ3MoZCkpLGYobnVsbCl9KS5jYXRjaCgoKT0+e3YoKX0pfSl9KSgpfWxvYWRE''@;'; put 'put ''YXRhKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChmLHYpPT57bGV0IE09ITEsRD1oLnZpZXdib3hUYWJsZXMuZmluZChVPT5VLnZpZXdib3hJZD09PWQuaWQpO0QmJigiMCI9PT1kLmZpbHRlcl9wa3x8IWQuZmlsdGVyX3BrKSYmZigp''@;'; put 'put ''LGguc2FzU3RvcmVTZXJ2aWNlLnZpZXdEYXRhKGEscGFyc2VJbnQoZC5maWx0ZXJfcGt8fCIwIikpLnRoZW4oVT0+e0Q/TT0hMDpEPXt2aWV3Ym94SWQ6ZC5pZCx2aWV3Ym94TGliRGF0YXNldDphLGhvdFRhYmxlOl9GKGguaG90VGFibGVEZWZhdWx0KX0sRC5ob3RUYWJsZS5kYXRhPVUudmll''@;'; put 'put ''d2RhdGEsRC5ob3RUYWJsZS4kZGF0YWZvcm1hdHM9VS4kdmlld2RhdGEsRC5ob3RUYWJsZS5jb2xzPVUuY29scyx0YWUoRC5ob3RUYWJsZS5jb2xzLFtdLFUuJHZpZXdkYXRhKTtsZXQgdGU9W10sb2U9W107Zm9yKGxldCB2ZSBpbiBVLnZpZXdkYXRhWzBdKXZlJiZvZS5wdXNoKHZlKTtmb3Io''@;'; put 'put ''bGV0IHZlPTA7dmU8b2UubGVuZ3RoO3ZlKyspdGUucHVzaCh7ZGF0YTpvZVt2ZV19KTtELmhvdFRhYmxlLmhlYWRlclBrcz1fRihVLnNhc3BhcmFtc1swXS5QS19GSUVMRFMuc3BsaXQoIiAiKSksRC5ob3RUYWJsZS5hbGxDb2xIZWFkZXJzPW9lLmZpbHRlcih2ZT0+IUQuaG90VGFibGUuaGVh''@;'; put 'put ''ZGVyUGtzLmluY2x1ZGVzKHZlKSksRC5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuPV9GKEQuaG90VGFibGUuYWxsQ29sSGVhZGVycyksRC5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZT1vZS5maWx0ZXIodmU9PkQuaG90VGFibGUuaGVhZGVyUGtzLmluY2x1ZGVzKHZlKSksRC5ob3RUYWJs''@;'; put 'put ''ZS5jb2xIZWFkZXJzPW9lLEQuaG90VGFibGUuY29sdW1ucz10ZSxkLmNvbHVtbnMmJmQuY29sdW1ucy5sZW5ndGg+MD8oRC5ob3RUYWJsZS5tYW51YWxDb2x1bW5Nb3ZlPWQuY29sdW1ucyxkLmNvbHVtbnM/Lm1hcCgodmUsd2UpPT57Y29uc3QgRmU9b2VbdmVdLFdlPUQuaG90VGFibGUuY29s''@;'; put 'put ''SGVhZGVyc0hpZGRlbi5pbmRleE9mKEZlKTtXZT4tMSYmKEQuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbi5zcGxpY2UoV2UsMSksRC5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZVt3ZV09RmUpfSkpOkQuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUucHVzaCguLi5ELmhvdFRhYmxlLmNv''@;'; put 'put ''bEhlYWRlcnNIaWRkZW4uc3BsaWNlKDAsMTApKSxELmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlPUQuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUuZmlsdGVyKHZlPT52ZSksTXx8aC52aWV3Ym94VGFibGVzLnB1c2goRCksZC5xdWVyeT1oLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKFUu''@;'; put 'put ''cXVlcnkpLGQuZmlsdGVyVGV4dD1VLnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVCxoLmNyZWF0ZVZpZXdib3hUYWJsZVNldHRpbmdzKGQpLHNldFRpbWVvdXQoKCk9PntoLnVwZGF0ZUhvdENvbHVtbnMoRC5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVufHxbXSxkLmlkKSxzZXRUaW1lb3V0KCgp''@;'; put 'put ''PT57Y29uc3QgdmU9aC5nZXRWaWV3Ym94SG90SW5zdGFuY2UoZC5pZCk7dmUmJih2ZS51cGRhdGVTZXR0aW5ncyh7bWFudWFsQ29sdW1uTW92ZTpELmhvdFRhYmxlLm1hbnVhbENvbHVtbk1vdmUsYWZ0ZXJHZXRDb2xIZWFkZXI6KHdlLEZlKT0+e2NvbnN0IFdlPXZlPy5jb2xUb1Byb3Aod2Up''@;'; put 'put ''O1dlJiZELmhvdFRhYmxlLmhlYWRlclBrcy5pbmRleE9mKFdlKT4tMSYmRmUuY2xhc3NMaXN0LmFkZCgicHJpbWFyeUtleUhlYWRlclN0eWxlIiksRmUuY2xhc3NMaXN0LmFkZChYbi5oYW5kc29udGFibGUuZGFya1RhYmxlSGVhZGVyQ2xhc3MpfX0pLHZlLnJlbmRlcigpKSxoLnNlbGVjdGVk''@;'; put 'put ''Vmlld2JveCYmaC5yZXNldFNlbGVjdGVkVmlld2JveChkKX0sNTAwKX0sMTAwKSxmKCl9KS5jYXRjaChVPT57aC5sb2dnZXJTZXJ2aWNlLmVycm9yKFUpLHYoKX0pfSl9KSgpfXJlTG9hZFZpZXdib3h0YWJsZXMoYSl7YS5tYXAoZD0+e2NvbnN0IGg9YCR7ZC5saWJyYXJ5fS4ke2QudGFibGV9''@;'; put 'put ''YDtkLmxvYWRpbmdEYXRhPSEwLHRoaXMubG9hZERhdGEoaCxkKS50aGVuKCgpPT57ZC5sb2FkaW5nRGF0YT0hMX0pfSl9bWF4V2lkdGhDaGVrZXIoYSxkKXtyZXR1cm4gYT4yMDA/MjAwOmF9Z2V0Vmlld2JveFRhYmxlSW5kZXgoYSl7cmV0dXJuIHRoaXMudmlld2JveFRhYmxlcy5maW5kSW5k''@;'; put 'put ''ZXgoaD0+aC52aWV3Ym94SWQ9PT1hLmlkKX1jcmVhdGVWaWV3Ym94VGFibGVTZXR0aW5ncyhhKXtjb25zdCBkPXRoaXMuZ2V0Vmlld2JveFRhYmxlSW5kZXgoYSk7aWYoLTE9PT1kKXJldHVybiB2b2lkIHRoaXMudmlld2JveEhvdFNldHRpbmdzLnNldChhLmlkLHt9KTtjb25zdCBoPXRoaXMu''@;'; put 'put ''dmlld2JveFRhYmxlc1tkXSxmPXRoaXMuY2FsY3VsYXRlVGFibGVIZWlnaHQoYSk7dGhpcy52aWV3Ym94SG90U2V0dGluZ3Muc2V0KGEuaWQse2NvbEhlYWRlcnM6aC5ob3RUYWJsZS5jb2xIZWFkZXJzLGNvbHVtbnM6aC5ob3RUYWJsZS5jb2x1bW5zLGhlaWdodDpmLHJlYWRPbmx5OiEwLG1v''@;'; put 'put ''ZGlmeUNvbFdpZHRoOnRoaXMubWF4V2lkdGhDaGVrZXIsY29weVBhc3RlOmguaG90VGFibGUuY29weVBhc3RlLGNvbnRleHRNZW51OmguaG90VGFibGUuY29udGV4dE1lbnUsbXVsdGlDb2x1bW5Tb3J0aW5nOiEwLHZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0OjUwLGZpbHRlcnM6ITAsZHJv''@;'; put 'put ''cGRvd25NZW51OmguaG90VGFibGUuZHJvcGRvd25NZW51LHN0cmV0Y2hIOiJhbGwiLGNlbGxzOmguaG90VGFibGUuY2VsbHMsbWF4Um93czpoLmhvdFRhYmxlLm1heFJvd3N8fDEvMCxtYW51YWxDb2x1bW5SZXNpemU6ITAscm93SGVhZGVyczohMCxsaWNlbnNlS2V5OmguaG90VGFibGUubGlj''@;'; put 'put ''ZW5zZUtleX0pLHNldFRpbWVvdXQoKCk9Pnt0aGlzLmNkZi5kZXRlY3RDaGFuZ2VzKCksc2V0VGltZW91dCgoKT0+e2NvbnN0IE09dGhpcy5nZXRWaWV3Ym94SG90SW5zdGFuY2UoYS5pZCk7TSYmKE0ubG9hZERhdGEoaC5ob3RUYWJsZS5kYXRhKSxNLnJlbmRlcigpKX0sNTAwKX0pfWdldFZp''@;'; put 'put ''ZXdib3hUYWJsZVNldHRpbmdzKGEpe3JldHVybiB0aGlzLnZpZXdib3hIb3RTZXR0aW5ncy5nZXQoYS5pZCl8fHt9fXJlc2l6ZShhLGQpe2NvbnN0IGg9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxmPWQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdj1oLmxlZnQtZi5sZWZ0K2gud2lkdGgs''@;'; put 'put ''TT1oLnRvcC1mLnRvcCtoLmhlaWdodDtyZXR1cm4gZC5zdHlsZS53aWR0aD12KyJweCIsZC5zdHlsZS5oZWlnaHQ9TSsicHgiLHRoaXMuc2V0QWxsSGFuZGxlVHJhbnNmb3JtKCksdGhpcy5oZWxwZXJTZXJ2aWNlLmRlYm91bmNlQ2FsbCgxZTMsKCk9Pnt0aGlzLnZpZXdib3hDaGFuZ2VkKCks''@;'; put 'put ''dGhpcy5ldmVudFNlcnZpY2UuZGlzcGF0Y2hFdmVudCgicmVzaXplIiksdGhpcy52aWV3Ym94ZXMuZm9yRWFjaChEPT57dGhpcy5yZWZyZXNoVGFibGVBZnRlclJlc2l6ZShEKX0pfSkse3dpZHRoOnYsaGVpZ2h0Ok19fWRyYWdNb3ZlKGEsZCxoLGYpe3RoaXMubmdab25lLnJ1bk91dHNpZGVB''@;'; put 'put ''bmd1bGFyKCgpPT57Y29uc3Qgdj10aGlzLnJlc2l6ZShhLGQpO2gud2lkdGg9di53aWR0aCxoLmhlaWdodD12LmhlaWdodH0pfXNldEFsbEhhbmRsZVRyYW5zZm9ybSgpe3RoaXMucmVzaXplQm94UXVlcnkuZm9yRWFjaChhPT57Y29uc3QgZD1hLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdD''@;'; put 'put ''bGllbnRSZWN0KCksaD1gaGFuZGxlXyR7YS5uYXRpdmVFbGVtZW50LmlkfWAsZj10aGlzLmRyYWdIYW5kbGVDb3JuZXJRdWVyeS5maW5kKCh2LE0pPT52Lm5hdGl2ZUVsZW1lbnQuaWQ9PT1oKTt0aGlzLnNldEhhbmRsZVRyYW5zZm9ybShmPy5uYXRpdmVFbGVtZW50LGQsImJvdGgiKX0pfXNl''@;'; put 'put ''dEhhbmRsZVRyYW5zZm9ybShhLGQsaCl7Y29uc3QgZj1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCB2PWQud2lkdGgtZi53aWR0aCxNPWQuaGVpZ2h0LWYuaGVpZ2h0O3YrPTUsTSs9NSwieCI9PT1oJiYoYS5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZSgke3Z9cHgsIDApYCksInki''@;'; put 'put ''PT09aCYmKGEuc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGUoMCwgJHtNfXB4KWApLCJib3RoIj09PWgmJihhLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlKCR7dn1weCwgJHtNfXB4KWApfWZvY3VzVmlld2JveChhKXt0aGlzLnZpZXdib3hlcy5tYXAoZD0+e2QuZm9jdXNlZD0hMX0pLGEu''@;'; put 'put ''Zm9jdXNlZD0hMH12aWV3Ym94RHJhZ0VuZGVkKGEsZCl7bGV0IGY9YS5zb3VyY2UuZ2V0Um9vdEVsZW1lbnQoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtkLng9Zi5sZWZ0LGQueT1mLnRvcCx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9c25hcFRvR3JpZCgpe2NvbnN0IGE9d2luZG93LmlubmVy''@;'; put 'put ''V2lkdGgsZD13aW5kb3cuaW5uZXJIZWlnaHQsTT1NYXRoLmNlaWwodGhpcy52aWV3Ym94ZXMubGVuZ3RoLzIpLEQ9TWF0aC5mbG9vcih0aGlzLnZpZXdib3hlcy5sZW5ndGgvMiksb2U9KGEtNSooTSsxKSkvTSx2ZT0oYS01KihEKzEpKS9EO2xldCBGZT0wLG50PShkLTI1MC02MCkvMixkdD0w''@;'; put 'put ''LG10PTA7Zm9yKGxldCAkdD0wOyR0PHRoaXMudmlld2JveGVzLmxlbmd0aDskdCsrKXtsZXQgenQ9dGhpcy52aWV3Ym94ZXNbJHRdLHluPSEoJHQ+TS0xKTtjb25zdCBnbj15bj9vZTp2ZTsheW4mJjA9PT1tdCYmKGR0PTAsbXQrKyxGZT0wKSx6dC54PTUrRmUrZHQqKGduKzUpLHp0Lnk9MjUw''@;'; put 'put ''K210KihudCs1KSx6dC53aWR0aD1nbix6dC5oZWlnaHQ9bnQsZHQrK310aGlzLnZpZXdib3hDaGFuZ2VkKCksc2V0VGltZW91dCgoKT0+e3RoaXMuc2V0QWxsSGFuZGxlVHJhbnNmb3JtKCksdGhpcy52aWV3Ym94ZXMuZm9yRWFjaCgkdD0+e3RoaXMucmVmcmVzaFRhYmxlQWZ0ZXJSZXNpemUo''@;'; put 'put ''JHQpfSl9KX1taW5pbWl6ZUFsbCgpe3RoaXMudmlld2JveGVzLmZvckVhY2goYT0+e2EubWluaW1pemVkPSEwfSksdGhpcy52aWV3Ym94Q2hhbmdlZCgpfXJlc3RvcmVBbGwoKXt0aGlzLnZpZXdib3hlcy5mb3JFYWNoKGE9PnthLm1pbmltaXplZD0hMX0pLHRoaXMudmlld2JveENoYW5nZWQo''@;'; put 'put ''KX1yZXNldFBvc1NpemUoYSl7YS54PXdpbmRvdy5pbm5lcldpZHRoLXRoaXMuZGVmYXVsdENvbmZpZy53aWR0aCxhLnk9dGhpcy5kZWZhdWx0Q29uZmlnLnksYS53aWR0aD10aGlzLmRlZmF1bHRDb25maWcud2lkdGgsYS5oZWlnaHQ9dGhpcy5kZWZhdWx0Q29uZmlnLmhlaWdodCx0aGlzLnZp''@;'; put 'put ''ZXdib3hDaGFuZ2VkKCl9bWluaW1pemUoYSl7YS5taW5pbWl6ZWQ9ITAsdGhpcy52aWV3Ym94Q2hhbmdlZCgpfXJlc3RvcmUoYSl7YS5taW5pbWl6ZWQ9ITEsdGhpcy52aWV3Ym94Q2hhbmdlZCgpLHNldFRpbWVvdXQoKCk9Pnt0aGlzLnJlZnJlc2hUYWJsZUFmdGVyUmVzaXplKGEpfSwxMDAp''@;'; put 'put ''fWNvbGxhcHNlKGEpe2EuY29sbGFwc2VkPSEwLHRoaXMudmlld2JveENoYW5nZWQoKX1leHBhbmQoYSl7YS5jb2xsYXBzZWQ9ITEsdGhpcy52aWV3Ym94Q2hhbmdlZCgpLHNldFRpbWVvdXQoKCk9Pnt0aGlzLnJlZnJlc2hUYWJsZUFmdGVyUmVzaXplKGEpfSwxMDApfWNsb3NlKGEpe2NvbnN0''@;'; put 'put ''IGQ9dGhpcy52aWV3Ym94ZXMuZmluZEluZGV4KGY9PmYuaWQ9PT1hLmlkKSxoPXRoaXMudmlld2JveFRhYmxlcy5maW5kSW5kZXgoZj0+Zi52aWV3Ym94SWQ9PT1hLmlkKTtkPi0xJiZ0aGlzLnZpZXdib3hlcy5zcGxpY2UoZCwxKSxoPi0xJiZ0aGlzLnZpZXdib3hUYWJsZXMuc3BsaWNlKGgs''@;'; put 'put ''MSksdGhpcy52aWV3Ym94SG90U2V0dGluZ3MuZGVsZXRlKGEuaWQpLHRoaXMuc2VsZWN0ZWRWaWV3Ym94Py5pZD09PWEuaWQmJnRoaXMudW5zZXRTZWxlY3RlZFZpZXdib3goKSxYbi52aWV3Ym94ZXNbYS5pZF09dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShPRyksdGhpcy52aWV3Ym94''@;'; put 'put ''Q2hhbmdlZCgpfXNlbGVjdFZpZXdib3goYSl7dm9pZCAwPT09dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZSYmdm9pZCAwPT09dGhpcy5zZWxlY3RlZFZpZXdib3g/dGhpcy5yZXNldFNlbGVjdGVkVmlld2JveChhKTphLmlkPT09dGhpcy5zZWxlY3RlZFZpZXdib3g/LmlkP3RoaXMudW5zZXRT''@;'; put 'put ''ZWxlY3RlZFZpZXdib3goKTp0aGlzLnJlc2V0U2VsZWN0ZWRWaWV3Ym94KGEpfWNvbHVtbnNEcm9wKGEpe3RoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4mJihhLnByZXZpb3VzQ29udGFpbmVyPT09YS5jb250YWluZXI/SksoYS5jb250YWluZXIu''@;'; put 'put ''ZGF0YSxhLnByZXZpb3VzSW5kZXgsYS5jdXJyZW50SW5kZXgpOmZ1bmN0aW9uIHNVZShjLGwsYSxkKXtjb25zdCBoPVdUKGEsYy5sZW5ndGgtMSksZj1XVChkLGwubGVuZ3RoKTtjLmxlbmd0aCYmbC5zcGxpY2UoZiwwLGMuc3BsaWNlKGgsMSlbMF0pfShhLnByZXZpb3VzQ29udGFpbmVyLmRh''@;'; put 'put ''dGEsYS5jb250YWluZXIuZGF0YSxhLnByZXZpb3VzSW5kZXgsYS5jdXJyZW50SW5kZXgpLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUmJiJvYmplY3QiPT10eXBlb2YgdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzKSYmdGhpcy51cGRhdGVD''@;'; put 'put ''b2x1bW5PcmRlckhvdChhLml0ZW0uZGF0YSxhLmN1cnJlbnRJbmRleCx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCl9b25Db2xzZWFyY2hDaGFuZ2UoYSxkLGgpe2NvbnN0IGY9aC5pbmRleE9mKGQpO2guc3BsaWNlKGYsMSksYS52YWx1ZT0iIix0aGlzLnNlbGVjdGVkVmll''@;'; put 'put ''d2JveFRhYmxlPy5ob3RUYWJsZSYmKHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUucHVzaChkKSx0aGlzLnVwZGF0ZUhvdENvbHVtbnModGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbix0aGlzLnNl''@;'; put 'put ''bGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCksdGhpcy51cGRhdGVDb2x1bW5PcmRlckhvdChkLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUubGVuZ3RoLTEsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpKX1vbkNvbFJl''@;'; put 'put ''bW92ZShhKXtpZih0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZSl7Y29uc3QgZD10aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLmluZGV4T2YoYSk7dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJz''@;'; put 'put ''VmlzaWJsZS5zcGxpY2UoZCwxKSx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4ucHVzaChhKSx0aGlzLnVwZGF0ZUhvdENvbHVtbnModGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbix0aGlzLnNlbGVj''@;'; put 'put ''dGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCksdGhpcy51cGRhdGVDb2x1bW5PcmRlckhvdChhLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUubGVuZ3RoLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveElkKX19cmVzZXRTZWxlY3Rl''@;'; put 'put ''ZFZpZXdib3goYSl7dGhpcy5zZWxlY3RlZFZpZXdib3g9YSx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPXRoaXMudmlld2JveFRhYmxlcy5maW5kKGQ9PmQudmlld2JveElkPT09YS5pZCl9dW5zZXRTZWxlY3RlZFZpZXdib3goKXt0aGlzLnNlbGVjdGVkVmlld2JveD12b2lkIDAsdGhpcy5z''@;'; put 'put ''ZWxlY3RlZFZpZXdib3hUYWJsZT12b2lkIDB9c3RvcFByb3BhZ2F0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCl9b3BlbkZpbHRlcihhKXt0aGlzLnNlbGVjdFZpZXdib3goYSk7Y29uc3QgZD10aGlzLnZpZXdib3hUYWJsZXNbdGhpcy5nZXRWaWV3Ym94VGFibGVJbmRleChhKV07dGhpcy5m''@;'; put 'put ''aWx0ZXJMaWJkcz1gJHthLmxpYnJhcnl9LiR7YS50YWJsZX1gLHRoaXMuZmlsdGVyaW5nVmlld2JveD1hLHRoaXMuZmlsdGVyPSEwLHRoaXMuY2RmLmRldGVjdENoYW5nZXMoKSx0aGlzLnNhc1N0b3JlU2VydmljZS5zZXRRdWVyeVZhcmlhYmxlcyh0aGlzLmZpbHRlckxpYmRzLGQuaG90VGFi''@;'; put 'put ''bGUuY29scyl9b3BlblRhYmxlRWRpdChhKXtjb25zdCBkPWEubGlicmFyeSsiLiIrYS50YWJsZTtsZXQgaD1sb2NhdGlvbi5ocmVmLnNsaWNlKDAsbG9jYXRpb24uaHJlZi5pbmRleE9mKCIjIikpO2g9YCR7aH0jL2VkaXRvci8ke2R9YCx3aW5kb3cub3BlbihoLCJfYmxhbmsiKX1yZXNldEZp''@;'; put 'put ''bHRlcigpe3RoaXMuZmlsdGVyaW5nVmlld2JveCYmKHRoaXMuZmlsdGVyaW5nVmlld2JveC5maWx0ZXJfcGs9IjAiLHRoaXMucmVsb2FkVGFibGVEYXRhKHRoaXMuZmlsdGVyaW5nVmlld2JveCksdGhpcy5maWx0ZXI9ITEsdGhpcy52aWV3Ym94Q2hhbmdlZCgpLFhuLnZpZXdib3hlc1t0aGlz''@;'; put 'put ''LmZpbHRlcmluZ1ZpZXdib3guaWRdPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoT0cpKX1zZW5kQ2xhdXNlKCl7dGhpcy5maWx0ZXJMb2FkaW5nPSEwO2xldCBhPVtdLGQ9W107aWYodHlwZW9mIHRoaXMuY2xhdXNlcz4idSIpcmV0dXJuIHRoaXMubnVsbFZhcmlhYmxlcz0hMCx2b2lk''@;'; put 'put ''KHRoaXMuZmlsdGVyTG9hZGluZz0hMSk7e2xldCBoPXRoaXMuY2xhdXNlcy5xdWVyeU9iajtmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKyl7Y29uc3Qgdj1oW2ZdLmVsZW1lbnRzO2E9di5maWx0ZXIoZnVuY3Rpb24oTSl7cmV0dXJuIG51bGw9PT1NLnZhcmlhYmxlfSksYS5sZW5ndGgmJmQu''@;'; put 'put ''cHVzaCh2KX19aWYoZC5sZW5ndGgpcmV0dXJuIHRoaXMubnVsbFZhcmlhYmxlcz0hMCx2b2lkKHRoaXMuZmlsdGVyTG9hZGluZz0hMSk7dHJ5e2lmKHZvaWQgMCE9PXRoaXMuY2xhdXNlcyYmdGhpcy5maWx0ZXJMaWJkcyl7Y29uc3QgaD17Z3JvdXBMb2dpYzp0aGlzLmNsYXVzZXMuZ3JvdXBM''@;'; put 'put ''b2dpYyxmaWx0ZXJHcm91cHM6W119O3RoaXMuY2xhdXNlcy5xdWVyeU9iai5mb3JFYWNoKHY9Pntjb25zdCBNPXtmaWx0ZXJDbGF1c2VzOltdfTt2LmVsZW1lbnRzLmZvckVhY2goRD0+e00uZmlsdGVyQ2xhdXNlcy5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoRCkpfSksTS5j''@;'; put 'put ''bGF1c2VMb2dpYz12LmNsYXVzZUxvZ2ljLGguZmlsdGVyR3JvdXBzLnB1c2godGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShNKSl9KTtjb25zdCBmPXRoaXMuc2FzU3RvcmVTZXJ2aWNlLmNyZWF0ZUZpbHRlclF1ZXJ5VGFibGUoaCk7dGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2F2ZVF1ZXJ5''@;'; put 'put ''KHRoaXMuZmlsdGVyTGliZHMsZikudGhlbih2PT57dGhpcy5maWx0ZXJpbmdWaWV3Ym94LmZpbHRlcl9waz12LnJlc3VsdFswXS5GSUxURVJfUkssdGhpcy5sb2FkRGF0YSh0aGlzLmZpbHRlckxpYmRzLHRoaXMuZmlsdGVyaW5nVmlld2JveCkudGhlbigoKT0+e3RoaXMuZmlsdGVyPSExLHRo''@;'; put 'put ''aXMuZmlsdGVyTG9hZGluZz0hMX0pLHRoaXMudmlld2JveENoYW5nZWQoKX0pLmNhdGNoKHY9Pnt0aGlzLmZpbHRlckxvYWRpbmc9ITF9KX19Y2F0Y2h7dGhpcy5maWx0ZXJMb2FkaW5nPSExfX1zZWFyY2hUYWJsZShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2Quc2Vh''@;'; put 'put ''cmNoTG9hZGluZz0hMDtsZXQgZj1hLnZhbHVlLHY9ZC5saWJyYXJ5KyIuIitkLnRhYmxlLE09cGFyc2VJbnQoZC5maWx0ZXJfcGt8fCIwIik7Y29uc3QgRD1oLnZpZXdib3hUYWJsZXMuZmluZChVPT5VLnZpZXdib3hJZD09PWQuaWQpO0QmJih5aWVsZCBoLnNhc1N0b3JlU2VydmljZS52aWV3''@;'; put 'put ''RGF0YVNlYXJjaChmLGQuc2VhcmNoTnVtZXJpYyx2LE0pLnRoZW4oVT0+e1Uuc2FzcGFyYW1zfHxVLnZpZXdEYXRhPyhELmhvdFRhYmxlLmRhdGE9VS52aWV3ZGF0YSxoLmNyZWF0ZVZpZXdib3hUYWJsZVNldHRpbmdzKGQpKTpkLnNlYXJjaExvYWRpbmc9ITB9KS5jYXRjaChVPT57aC5sb2dn''@;'; put 'put ''ZXJTZXJ2aWNlLmVycm9yKFUpfSksZC5zZWFyY2hMb2FkaW5nPSExKX0pKCl9cmVsb2FkVGFibGVEYXRhKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2NvbnN0IGg9YCR7YS5saWJyYXJ5fS4ke2EudGFibGV9YDthLmxvYWRpbmdEYXRhPSEwLHlpZWxkIGQucmVsb2FkRGF0''@;'; put 'put ''YShoLGEpLGEubG9hZGluZ0RhdGE9ITEsZC5ldmVudFNlcnZpY2UuZGlzcGF0Y2hFdmVudCgicmVzaXplIil9KSgpfXVwZGF0ZUhvdENvbHVtbnMoYSxkKXt0aGlzLnVwZGF0ZUhpZGRlbkNvbHVtbnNIb3QoYSxkKSx0aGlzLnNldENvbHVtbk9yZGVyKGQpfXVwZGF0ZUNvbHVtbk9yZGVySG90''@;'; put 'put ''KGEsZCxoKXtjb25zdCBmPXRoaXMuZ2V0Vmlld2JveEhvdEluc3RhbmNlKGgpO2lmKGYpe2NvbnN0IHY9Zi5wcm9wVG9Db2woYSk7Zi5nZXRQbHVnaW4oIm1hbnVhbENvbHVtbk1vdmUiKS5tb3ZlQ29sdW1uKHYsZCksZi5yZW5kZXIoKSx0aGlzLnNldENvbHVtbk9yZGVyKGgpfX10YWJsZUVk''@;'; put 'put ''aXRFeGlzdHMoYSl7Y29uc3QgZD1Ybi5lZGl0b3IubGlic0FuZFRhYmxlcyxoPWEubGlicmFyeTtyZXR1cm4hIWRbaF0mJmRbaF0uaW5jbHVkZXMoYS50YWJsZSl9c2V0Q29sdW1uT3JkZXIoYSl7Y29uc3QgZD10aGlzLnZpZXdib3hlcy5maW5kKGg9PmguaWQ9PT1hKTtpZihkKXtjb25zdCBo''@;'; put 'put ''PXRoaXMuY3JlYXRlQ29sdW1uT3JkZXIoYSk7ZC5jb2x1bW5zPWgubGVuZ3RoPjA/aDpkLmNvbHVtbnN9dGhpcy52aWV3Ym94Q2hhbmdlZCgpfWNyZWF0ZUNvbHVtbk9yZGVyKGEpe2NvbnN0IGQ9dGhpcy5nZXRWaWV3Ym94SG90SW5zdGFuY2UoYSk7aWYoIWQpcmV0dXJuW107Y29uc3QgaD1k''@;'; put 'put ''LmdldENvbEhlYWRlcigpLGY9dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUuY29sSGVhZGVycztpZighZilyZXR1cm5bXTtjb25zdCB2PXRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlPy5jb2xIZWFkZXJzVmlzaWJsZS5sZW5ndGh8fDUsTT1bXTtyZXR1cm4g''@;'; put 'put ''aC5tYXAoKEQsVSk9PntpZihVPHYpe2NvbnN0IHRlPWYuaW5kZXhPZihEKTt0ZT4tMSYmTS5wdXNoKHRlKX19KSxNfXVwZGF0ZUhpZGRlbkNvbHVtbnNIb3QoYSxkKXtjb25zdCBoPXRoaXMuZ2V0Vmlld2JveEhvdEluc3RhbmNlKGQpO2lmKGgpe2NvbnN0IGY9YS5tYXAodj0+aC5wcm9wVG9D''@;'; put 'put ''b2wodikpO2gudXBkYXRlU2V0dGluZ3Moe2hpZGRlbkNvbHVtbnM6e2NvbHVtbnM6Zn19KSxoLnJlbmRlcigpfX1jYWxjdWxhdGVUYWJsZUhlaWdodChhKXtyZXR1cm4gYS5oZWlnaHQtMjAtMzYtMn1yZWZyZXNoVGFibGVBZnRlclJlc2l6ZShhKXtjb25zdCBkPXRoaXMuZ2V0Vmlld2JveEhv''@;'; put 'put ''dEluc3RhbmNlKGEuaWQpO2QmJnNldFRpbWVvdXQoKCk9Pnt0cnl7ZC51cGRhdGVTZXR0aW5ncyh7aGVpZ2h0OnRoaXMuY2FsY3VsYXRlVGFibGVIZWlnaHQoYSl9KSxkLnJlZnJlc2hEaW1lbnNpb25zKCksZC5yZW5kZXIoKX1jYXRjaHtzZXRUaW1lb3V0KCgpPT57dHJ5e2QudXBkYXRlU2V0''@;'; put 'put ''dGluZ3Moe2hlaWdodDp0aGlzLmNhbGN1bGF0ZVRhYmxlSGVpZ2h0KGEpfSksZC5yZWZyZXNoRGltZW5zaW9ucygpfWNhdGNoKGYpe2NvbnNvbGUud2FybigiRmFpbGVkIHRvIHJlZnJlc2ggSE9UIGRpbWVuc2lvbnMgZm9yIHZpZXdib3giLGEuaWQsZil9fSw1MDApfX0sMTAwKX1nZXRWaWV3''@;'; put 'put ''Ym94SG90SW5zdGFuY2UoYSl7aWYoIWF8fCF0aGlzLmhvdFRhYmxlQ29tcG9uZW50cylyZXR1cm47Y29uc3QgZD10aGlzLnZpZXdib3hlcy5maW5kSW5kZXgoTT0+TS5pZD09PWEpO2lmKC0xPT09ZClyZXR1cm47Y29uc3QgaD10aGlzLmhvdFRhYmxlQ29tcG9uZW50cy50b0FycmF5KCk7bGV0''@;'; put 'put ''IGY9MDtmb3IobGV0IE09MDtNPGQ7TSsrKXRoaXMuZ2V0Vmlld2JveFRhYmxlSW5kZXgodGhpcy52aWV3Ym94ZXNbTV0pPi0xJiZmKys7cmV0dXJuIGhbZl0/LmhvdEluc3RhbmNlfHx2b2lkIDB9dmlld2JveENoYW5nZWQoKXtsZXQgYTtjb25zdCBkPXRoaXMuZW5jb2RlVXJsRGF0YSh0aGlz''@;'; put 'put ''LnZpZXdib3hlcyk7ZC5sZW5ndGg+MCYmKGE9e3ZpZXdib3hlczpkfSksdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10se3JlbGF0aXZlVG86dGhpcy5hY3RpdmF0ZWRSb3V0ZSxxdWVyeVBhcmFtczphfSksdGhpcy5wcmVwYXJlRmlsdGVyQ2FjaGUoKX1wcmVwYXJlRmlsdGVyQ2FjaGUoKXtmb3Io''@;'; put 'put ''bGV0IGEgb2YgdGhpcy52aWV3Ym94ZXMpaWYoWG4udmlld2JveGVzW2EuaWRdfHwoWG4udmlld2JveGVzW2EuaWRdPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoT0cpKSxhLnF1ZXJ5JiZhLnF1ZXJ5Lmxlbmd0aD4wKXtjb25zdCBkPXRoaXMudmlld2JveFRhYmxlcy5maW5kKGY9PmYu''@;'; put 'put ''dmlld2JveElkPT09YS5pZCksaD1gdmlld2JveGVzLiR7YS5pZH1gO1huLnZpZXdib3hlc1thLmlkXS5maWx0ZXIucXVlcnk9YS5xdWVyeSxYbi52aWV3Ym94ZXNbYS5pZF0uZmlsdGVyLmxpYmRzPWEubGlicmFyeSsiLiIrYS50YWJsZSx0aGlzLnNhc1N0b3JlU2VydmljZS5pbml0aWFsaXpl''@;'; put 'put ''R2xvYmFsRmlsdGVyQ2xhdXNlKGgsZD8uaG90VGFibGUuY29scyl9fWVuY29kZVVybERhdGEoYSl7bGV0IGQ9IiI7cmV0dXJuIGEubWFwKChoLGYpPT57ZCs9YCR7aC5pZH0tJHtoLmxpYnJhcnl9LSR7aC50YWJsZX0tJHtoLndpZHRofS0ke2guaGVpZ2h0fS0ke2gueH0tJHtoLnl9LSR7aC5j''@;'; put 'put ''b2xsYXBzZWQ/MTowfS0ke2gubWluaW1pemVkPzE6MH0tJHtoLmZpbHRlcl9wa3x8MH0ke2guY29sdW1ucyYmaC5jb2x1bW5zLmxlbmd0aD4wPyItIitoLmNvbHVtbnM/LmpvaW4oIiwiKToiIn1gLGYhPT1hLmxlbmd0aC0xJiYoZCs9IjsiKX0pLGR9ZGVjb2RlVXJsRGF0YShhKXtsZXQgaD1b''@;'; put 'put ''XTtyZXR1cm4gYS5zcGxpdCgiOyIpLm1hcCh2PT57Y29uc3QgTT12LnNwbGl0KCItIik7aC5wdXNoKHtpZDpwYXJzZUludChNWzBdKSxsaWJyYXJ5Ok1bMV0sdGFibGU6TVsyXSx3aWR0aDpwYXJzZUludChNWzNdKSxoZWlnaHQ6cGFyc2VJbnQoTVs0XSkseDpwYXJzZUludChNWzVdKSx5OnBh''@;'; put 'put ''cnNlSW50KE1bNl0pLGNvbGxhcHNlZDohIXBhcnNlSW50KE1bN10pLG1pbmltaXplZDohIXBhcnNlSW50KE1bOF0pLGNvbHVtbnM6TVsxMF0/LnNwbGl0KCIsIikubWFwKEQ9PnBhcnNlSW50KEQpKXx8W10sZmlsdGVyX3BrOk1bOV19KX0pLGh9bmdPbkRlc3Ryb3koKXt0aGlzLl9xdWVyeT8u''@;'; put 'put ''dW5zdWJzY3JpYmUoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShYYSkscWUoTzEpLHFlKEtzKSxxZShFYykscWUoTTIpLHFlKG9oKSxxZShMdSkscWUobmwpLHFlKHQwKSxxZShIcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9YXIoe3R5''@;'; put 'put ''cGU6YyxzZWxlY3RvcnM6W1siYXBwLXZpZXdib3hlcyJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJihVYShiQ3QsNSksVWEoX0N0LDUpLFVhKEc1LDUpKSwyJmQpe2xldCBmO2dpKGY9bWkoKSkmJihoLnJlc2l6ZUJveFF1ZXJ5PWYpLGdpKGY9bWkoKSkmJihoLmRyYWdIYW5k''@;'; put 'put ''bGVDb3JuZXJRdWVyeT1mKSxnaShmPW1pKCkpJiYoaC5ob3RUYWJsZUNvbXBvbmVudHM9Zil9fSxpbnB1dHM6e3ZpZXdib3hNb2RhbDoidmlld2JveE1vZGFsIn0sb3V0cHV0czp7dmlld2JveE1vZGFsQ2hhbmdlOiJ2aWV3Ym94TW9kYWxDaGFuZ2UifSxzdGFuZGFsb25lOiExLGRlY2xzOjU2''@;'; put 'put ''LHZhcnM6MjMsY29uc3RzOltbImlucHV0IiwiIl0sWyJyZXNpemVCb3giLCIiXSxbImRyYWdIYW5kbGVDb3JuZXIiLCIiXSxbInNlYXJjaEVsIiwiIl0sWyJxdWVyeUZpbHRlciIsIiJdLFsiYXBwRHJhZ05kcm9wIiwiIiwxLCJyb290LW1vZGFsIiwicG9zaXRpb24tcmVsYXRpdmUiLDMsImNs''@;'; put 'put ''ck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbFNpemUiXSxbMSwibW9kYWwtdGl0bGUiXSxbImNsYXNzIiwibGljZW5jZS1ub3RpY2UiLDQsIm5nSWYiXSxbMSwibW9kYWwtYm9keSIsImQtZmxleCJdLFsxLCJhZGQtbmV3IiwiZC1m''@;'; put 'put ''bGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWzEsIm10LTAiXSxbMSwidy0xMDAiXSxbImNsYXNzIiwibXktMTAtbXgtYXV0byB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJtLTAgdmlld2JveC1saW1pdC1ub3RpY2UiLDQsIm5nSWYiXSxbMywibGlicmFyeUxpc3QiLCJsaWJyYXJ5''@;'; put 'put ''T25DbGlja0VtaXR0ZXIiLCJ0YWJsZU9uQ2xpY2tFbWl0dGVyIiw0LCJuZ0lmIl0sWzEsImN1cnJlbnRseS1vcGVuIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiJdLFsicm9sZSIsInRvb2x0aXAiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsMSwidG9vbHRpcCIs''@;'; put 'put ''InRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwibWwtMyIsMywiY2xpY2siXSxbInNoYXBlIiwiZ3JpZC12aWV3Iiwic2l6ZSIsIjE5Il0sWzEsInRvb2x0aXAtY29udGVudCJdLFsic2hhcGUiLCJtaW51cyIsInNpemUiLCIxOSJdLFsic2hhcGUiLCJ3aW5kb3ctcmVzdG9yZSIs''@;'; put 'put ''InNpemUiLCIxOSJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciB3LTEwMCBtLTAiLDQsIm5nSWYiXSxbImNsYXNzIiwib3Blbi12aWV3Ym94IGQtZmxleCBjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4gY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsMywic2VsZWN0ZWQiLCJjbGljayIsNCwibmdG''@;'; put 'put ''b3IiLCJuZ0Zvck9mIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJtdC0xMCJdLFsxLCJtLTAiXSxbImNsYXNzIiwiY29uZmlndXJhdGlvbi13cmFwcGVyIiwiY2RrRHJvcExpc3RHcm91cCIsIiIsNCwibmdWYXIi''@;'; put 'put ''XSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbMSwidmlld2JveGVzLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJ2aWV3Ym94IiwiY2RrRHJhZ0JvdW5kYXJ5IiwiLnZpZXdib3hlcy1jb250YWluZXIi''@;'; put 'put ''LCJjZGtEcmFnIiwiIiwidGFiaW5kZXgiLCIwIiwzLCJmb2N1c2VkIiwiZGlzcGxheSIsIndpZHRoIiwiaGVpZ2h0IiwicG9pbnRlci1ldmVudHMiLCJib3gtc2hhZG93IiwiY2RrRHJhZ0ZyZWVEcmFnUG9zaXRpb24iLCJpZCIsIm1vdXNlZG93biIsImNka0RyYWdFbmRlZCIsNCwibmdGb3Ii''@;'; put 'put ''LCJuZ0Zvck9mIl0sWzEsImZpbHRlci1tb2RhbCIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSIsImNlbnRlciIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxb''@;'; put 'put ''MSwibW9kYWwtYm9keSJdLFszLCJ2aWV3Ym94SWQiLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siLCJj''@;'; put 'put ''bHJMb2FkaW5nIl0sWzEsImxpY2VuY2Utbm90aWNlIl0sWzEsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFsiY2xyTWVkaXVtIiwiIl0sWzEsIm0tMCIsInZpZXdib3gtbGltaXQtbm90aWNlIl0sWzMsImxpYnJhcnlPbkNsaWNrRW1pdHRlciIsInRhYmxlT25DbGlja0VtaXR0ZXIi''@;'; put 'put ''LCJsaWJyYXJ5TGlzdCJdLFsxLCJ0ZXh0LWNlbnRlciIsInctMTAwIiwibS0wIl0sWzEsIm9wZW4tdmlld2JveCIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDMsImNsaWNrIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1p''@;'; put 'put ''dGVtcy1jZW50ZXIiXSxbImNsclNtYWxsIiwiIiwiY2xhc3MiLCJtbC0zIiw0LCJuZ0lmIl0sWyJyb2xlIiwidG9vbHRpcCIsImFyaWEtaGFzcG9wdXAiLCJ0cnVlIiwxLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtYm90dG9tLWxlZnQiLDMsImNsaWNrIl0sWyJzaGFwZSIsImN1''@;'; put 'put ''cnNvci1tb3ZlIiwic2l6ZSIsIjEzIl0sWyJyb2xlIiwidG9vbHRpcCIsImFyaWEtaGFzcG9wdXAiLCJ0cnVlIiwiY2xhc3MiLCJ0b29sdGlwIHRvb2x0aXAtbWQgdG9vbHRpcC1ib3R0b20tbGVmdCBtbC0zIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsInNpemUiLCIx''@;'; put 'put ''OSJdLFsiY2xyU21hbGwiLCIiLDEsIm1sLTMiXSxbImNka0Ryb3BMaXN0R3JvdXAiLCIiLDEsImNvbmZpZ3VyYXRpb24td3JhcHBlciJdLFs0LCJuZ0lmIl0sWzEsImNvbHMtc2VhcmNoIl0sWyJ0eXBlIiwidGV4dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsImF1dG9mb2N1cyIsIiIsInBsYWNl''@;'; put 'put ''aG9sZGVyIiwiU2VhcmNoIGNvbHVtbnMiLCJ0YWJpbmRleCIsIjAiLDMsInZhbHVlQ2hhbmdlIiwiaW5wdXRJZCIsImVtaXRPbmx5U2VsZWN0ZWQiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjZGtEcm9wTGlzdCIsIiIsMSwiY29scy1saXN0IiwzLCJjZGtEcm9wTGlzdERyb3BwZWQiLCJj''@;'; put 'put ''ZGtEcm9wTGlzdERhdGEiXSxbImNka0RyYWciLCIiLDMsImNsYXNzIiwiY3Vyc29yLWRlZmF1bHQtaSIsInByaW1hcnlLZXlIZWFkZXJTdHlsZSIsImNka0RyYWdEYXRhIiwiY2RrRHJhZ0Rpc2FibGVkIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNka0RyYWciLCIiLDMsImNka0RyYWdEYXRh''@;'; put 'put ''IiwiY2RrRHJhZ0Rpc2FibGVkIl0sWyJzaGFwZSIsImtleSIsNCwibmdJZiJdLFsic2hhcGUiLCJ0cmFzaCIsImNsYXNzIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImtleSJdLFsic2hhcGUiLCJ0cmFzaCIsMSwiY3Vyc29yLXBvaW50ZXIiLDMsImNs''@;'; put 'put ''aWNrIl0sWyJjZGtEcmFnQm91bmRhcnkiLCIudmlld2JveGVzLWNvbnRhaW5lciIsImNka0RyYWciLCIiLCJ0YWJpbmRleCIsIjAiLDEsInZpZXdib3giLDMsIm1vdXNlZG93biIsImNka0RyYWdFbmRlZCIsImNka0RyYWdGcmVlRHJhZ1Bvc2l0aW9uIiwiaWQiXSxbImNka0RyYWdIYW5kbGUi''@;'; put 'put ''LCIiLDEsImRyYWctaGFuZGxlIiwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJ0YWJsZS10aXRsZSJdLFsxLCJhY3Rpb25zIl0sWyJzaGFwZSIsImFuZ2xlIHRvcCIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBl''@;'; put 'put ''IiwiYW5nbGUgZG93biIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwibWludXMiLDMsImNsaWNrIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFsiY2RrRHJhZyIsIiIsMSwiZHJhZ0hhbmRsZSIsImNvcm5lciIsMywiY2RrRHJhZ01vdmVkIiwiaWQiXSxbImNsckZvcm0iLCIi''@;'; put 'put ''LDEsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1mbGV4LXdyYXAiLCJ0YWJsZS1zZWFyY2gtd3JhcHBlciJdLFsxLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItZmxleC13cmFwIl0sWzEsImlucHV0LXdy''@;'; put 'put ''YXBwZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2giLCJuYW1lIiwic2VhcmNoLWlucHV0IiwzLCJrZXl1cC5lbnRlciIsInR5cGUiXSxbInNoYXBlIiwic2VhcmNoIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJzcGlubmVyIHNwaW5uZXItaW5saW5lIiw0''@;'; put 'put ''LCJuZ0lmIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJDaGVja2JveCIsIiIsIm5hbWUiLCJudW1lcmljX2NoZWNrIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsiY2xhc3MiLCJzcGlubmVyIHNwaW5uZXItc20iLDQsIm5nSWYiXSxbInNoYXBlIiwicmVmcmVzaCIsImNsYXNzIiwi''@;'; put 'put ''Y2xpY2staWNvbiIsMywiY2xpY2siLDQsIm5nSWYiXSxbInJvbGUiLCJ0b29sdGlwIiwiYXJpYS1oYXNwb3B1cCIsInRydWUiLDEsInRvb2x0aXAiLCJ0b29sdGlwLWxnIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsIm1sLTUiLDMsImNsaWNrIl0sWyJzaGFwZSIsImZpbHRlciIsMSwiY2xpY2st''@;'; put 'put ''aWNvbiJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiLCJ0b29sdGlwLWxvbmciXSxbInNoYXBlIiwicGVuY2lsIiwxLCJjbGljay1pY29uIiwibWwtNSIsMywiY2xpY2siXSxbImNsYXNzIiwiY29udGVudCIsMywiZGlzcGxheSIsNCwibmdWYXIiXSxbInNoYXBlIiwiYW5nbGUgdG9wIiwzLCJjbGlj''@;'; put 'put ''ayJdLFsic2hhcGUiLCJhbmdsZSBkb3duIiwzLCJjbGljayJdLFsic2hhcGUiLCJzZWFyY2giLDMsImNsaWNrIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLWlubGluZSJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1zbSJdLFsic2hhcGUiLCJyZWZyZXNoIiwxLCJjbGljay1pY29uIiwzLCJjbGlj''@;'; put 'put ''ayJdLFsxLCJjb250ZW50Il0sWyJjbGFzcyIsImhvdC1zcGlubmVyIG15LTEwLW14LWF1dG8gdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMywic2V0dGluZ3MiLCJpZCIsNCwibmdJZiJdLFsxLCJob3Qtc3Bpbm5lciIsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFszLCJzZXR0aW5n''@;'; put 'put ''cyIsImlkIl0sWzMsInZpZXdib3hJZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImNsci1tb2RhbCIsNSksT3QoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGguY2xyTW9kYWxPcGVuQ2hhbmdlKHYpfSksZGUoMSwiaDMiLDYpLFBlKDIsIiBW''@;'; put 'put ''aWV3Ym94ZXMgIiksZ3QoMyxNQ3QsMiwyLCJzcGFuIiw3KSxoZSgpLGRlKDQsImRpdiIsOCkoNSwiZGl2Iiw5KSg2LCJwIiwxMCksUGUoNywiQWRkIG5ldyIpLGhlKCksR3QoOCwiaHIiLDExKSxndCg5LHhDdCwyLDAsImRpdiIsMTIpKDEwLEVDdCwyLDAsInAiLDEzKSgxMSxUQ3QsMSwxLCJk''@;'; put 'put ''Yy10cmVlIiwxNCksaGUoKSxkZSgxMiwiZGl2IiwxNSkoMTMsImRpdiIsMTYpKDE0LCJwIiwxMCksUGUoMTUsIkN1cnJlbnRseSBvcGVuIiksaGUoKSxkZSgxNiwiZGl2IikoMTcsImEiLDE3KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGguc25hcFRvR3JpZCgpfSksR3QoMTgsImNs''@;'; put 'put ''ci1pY29uIiwxOCksZGUoMTksInNwYW4iLDE5KSxQZSgyMCwiU25hcCB2aWV3Ym94ZXMgdG8gZ3JpZCIpLGhlKCkoKSxkZSgyMSwiYSIsMTcpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5taW5pbWl6ZUFsbCgpfSksR3QoMjIsImNsci1pY29uIiwyMCksZGUoMjMsInNwYW4iLDE5''@;'; put 'put ''KSxQZSgyNCwiTWluaW1pemUgYWxsIHZpZXdib3hlcyIpLGhlKCkoKSxkZSgyNSwiYSIsMTcpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5yZXN0b3JlQWxsKCl9KSxHdCgyNiwiY2xyLWljb24iLDIxKSxkZSgyNywic3BhbiIsMTkpLFBlKDI4LCJSZXN0b3JlIGFsbCB2aWV3Ym94''@;'; put 'put ''ZXMiKSxoZSgpKCkoKSgpLEd0KDI5LCJociIpLGd0KDMwLEFDdCwyLDAsInAiLDIyKSgzMSxSQ3QsMTUsMTAsImRpdiIsMjMpLGRlKDMyLCJkaXYiLDI0KSgzMywicCIsMjUpLFBlKDM0KSxoZSgpKCksR3QoMzUsImhyIiksZ3QoMzYsVkN0LDMsMiwiZGl2IiwyNiksaGUoKSgpLGRlKDM3LCJk''@;'; put 'put ''aXYiLDI3KSgzOCwiYnV0dG9uIiwyOCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnZpZXdib3hNb2RhbD0hMX0pLFBlKDM5LCIgT2sgIiksaGUoKSgpKCksZGUoNDAsImRpdiIsMjkpLGd0KDQxLEtDdCwzMywzNywiZGl2IiwzMCksaGUoKSxkZSg0MiwiY2xyLW1vZGFsIiwzMSks''@;'; put 'put ''Y2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGZpKGguZmlsdGVyLHYpfHwoaC5maWx0ZXI9diksdn0pLGRlKDQzLCJoMyIsMzIpLFBlKDQ0LCIgRmlsdGVyIGZvciB2aWV3Ym94IHRhYmxlOiAiKSxkZSg0NSwic3BhbiIpLFBlKDQ2KSxoZSgpKCksZGUoNDcsImRp''@;'; put 'put ''diIsMzMpLGd0KDQ4LFhDdCwyLDEsImFwcC1xdWVyeSIsMzQpLGhlKCksZGUoNDksImRpdiIsMjcpKDUwLCJidXR0b24iLDM1KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgucmVzZXRGaWx0ZXIoKX0pLFBlKDUxLCIgcmVzZXQgZmlsdGVyICIpLGhlKCksZGUoNTIsImJ1dHRvbiIs''@;'; put 'put ''MjgpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5maWx0ZXI9ITF9KSxQZSg1MywiIENhbmNlbCAiKSxoZSgpLGRlKDU0LCJidXR0b24iLDM2KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGguc2VuZENsYXVzZSgpfSksUGUoNTUsIiBPayAiKSxoZSgpKCkoKSksMiZkJiYo''@;'; put 'put ''RWUoImNsck1vZGFsT3BlbiIsaC52aWV3Ym94TW9kYWwpKCJjbHJNb2RhbENsb3NhYmxlIiwhMCkoImNsck1vZGFsU2l6ZSIsImxnIiksZmUoMyksRWUoIm5nSWYiLGgubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3hfbGltaXQhPT1oLkluZmluaXR5KSxmZSg2KSxFZSgibmdJZiIsaC5saWJy''@;'; put 'put ''YXJpZXNMb2FkaW5nKSxmZSgpLEVlKCJuZ0lmIixoLnZpZXdib3hMaW1pdFJlYWNoZWQpLGZlKCksRWUoIm5nSWYiLGgudmlld2JveE1vZGFsKSxmZSgxOSksRWUoIm5nSWYiLGgudmlld2JveGVzLmxlbmd0aDwxKSxmZSgpLEVlKCJuZ0Zvck9mIixoLnZpZXdib3hlcyksZmUoMyksSXIoIiBD''@;'; put 'put ''b25maWd1cmF0aW9uICgiLG51bGwhPWguc2VsZWN0ZWRWaWV3Ym94VGFibGUmJmguc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveExpYkRhdGFzZXQ/IiMiKyhudWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxlP251bGw6aC5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpKyIgIiso''@;'; put 'put ''bnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZT9udWxsOmguc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveExpYkRhdGFzZXQpOiJzZWxlY3Qgdmlld2JveCBmcm9tIGFib3ZlIiwiKSAiKSxmZSgyKSxFZSgibmdWYXIiLGtFKDE5LHdDdCxudWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxl''@;'; put 'put ''fHxudWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlP251bGw6aC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGV8fG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGU/bnVs''@;'; put 'put ''bDpoLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGV8fG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGU/bnVsbDpoLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmhlYWRlclBr''@;'; put 'put ''cykpLGZlKDUpLEVlKCJuZ0Zvck9mIixoLnZpZXdib3hlcyksZmUoKSxsaSgiY2xyTW9kYWxPcGVuIixoLmZpbHRlciksRWUoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSg0KSxYdSgiICMiLG51bGw9PWguZmlsdGVyaW5nVmlld2JveD9udWxsOmguZmls''@;'; put 'put ''dGVyaW5nVmlld2JveC5pZCwiICIsaC5maWx0ZXJMaWJkcywiICIpLGZlKDIpLEVlKCJuZ0lmIixoLmZpbHRlciksZmUoNiksRWUoImNsckxvYWRpbmciLGguZmlsdGVyTG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W2hzLENhLFVsLGJ1LHIwLGMxLExmLENzLGIzZSxoaCxwdyx5MixNZCxmaCx5''@;'; put 'put ''OSx4ZixFZixzaCxobCxtOSxybCxWMyx1YWUsRzUsVmZlLE5mZSxyWCxIZmUsRHllLHlDdCxnUyxfQV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSxMeWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmZpbGVPdmVyPW5ldyBYcix0aGlzLmZpbGVEcm9wPW5ldyBY''@;'; put 'put ''cix0aGlzLmVsZW1lbnQ9YX1vbkRyb3AoYSl7dGhpcy5fcHJldmVudEFuZFN0b3AoYSk7Y29uc3QgZD1hLmRhdGFUcmFuc2Zlcj8uZmlsZXMsaD1bXTtpZihkKWZvcihsZXQgZj0wO2Y8ZC5sZW5ndGg7ZisrKWgucHVzaChkW2ZdKTt0aGlzLnVwbG9hZGVyPy5hZGRUb1F1ZXVlKGgpLHRoaXMu''@;'; put 'put ''ZmlsZU92ZXIuZW1pdCghMSksdGhpcy5maWxlRHJvcC5lbWl0KGgpfW9uRHJhZ092ZXIoYSl7dGhpcy5fcHJldmVudEFuZFN0b3AoYSk7Y29uc3QgZD1hLmRhdGFUcmFuc2ZlcjtpZihkKXtpZigtMT09PWQudHlwZXMuaW5kZXhPZigiRmlsZXMiKSlyZXR1cm47ZC5kcm9wRWZmZWN0PSJjb3B5''@;'; put 'put ''In10aGlzLmZpbGVPdmVyLmVtaXQoITApfW9uRHJhZ0xlYXZlKGEpe3RoaXMuX3ByZXZlbnRBbmRTdG9wKGEpLHRoaXMuZmlsZU92ZXIuZW1pdCghMSl9X3ByZXZlbnRBbmRTdG9wKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpfXN0YXRpY3t0aGlzLlx1MDI3NWZh''@;'; put 'put ''Yz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHFlKG5hKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Zcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJhcHBGaWxlRHJvcCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJk90KCJkcm9wIixmdW5jdGlvbih2KXtyZXR1''@;'; put 'put ''cm4gaC5vbkRyb3Aodil9KSgiZHJhZ292ZXIiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uRHJhZ092ZXIodil9KSgiZHJhZ2xlYXZlIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkRyYWdMZWF2ZSh2KX0pfSxpbnB1dHM6e3VwbG9hZGVyOiJ1cGxvYWRlciJ9LG91dHB1dHM6e2ZpbGVPdmVyOiJm''@;'; put 'put ''aWxlT3ZlciIsZmlsZURyb3A6ImZpbGVEcm9wIn0sc3RhbmRhbG9uZTohMX0pfX1yZXR1cm4gY30pKCksT3llPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5maWxlU2VsZWN0ZWQ9bmV3IFhyLHRoaXMuZWxlbWVudD1hfWlzRW1wdHlBZnRlclNlbGVjdGlvbigpe3JldHVybiEh''@;'; put 'put ''dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYXR0cmlidXRlcy5tdWx0aXBsZX1vbkNoYW5nZSgpe2NvbnN0IGE9dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZmlsZXM7dGhpcy51cGxvYWRlcj8uYWRkVG9RdWV1ZShhKSx0aGlzLmZpbGVTZWxlY3RlZC5lbWl0KGEpLHRoaXMuaXNFbXB0''@;'; put 'put ''eUFmdGVyU2VsZWN0aW9uKCkmJih0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZT0iIil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUobmEpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPVlyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIs''@;'; put 'put ''ImFwcEZpbGVTZWxlY3QiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZPdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBoLm9uQ2hhbmdlKCl9KX0saW5wdXRzOnt1cGxvYWRlcjoidXBsb2FkZXIifSxvdXRwdXRzOntmaWxlU2VsZWN0ZWQ6ImZpbGVTZWxlY3RlZCJ9''@;'; put 'put ''LHN0YW5kYWxvbmU6ITF9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHFDdChjLGwpezEmYyYmKGRlKDAsInAiLDgpLFBlKDEsIiBObyBkYXRhc2V0IG1ldGEgdG8gc2hvdy4gIiksaGUoKSl9ZnVuY3Rpb24gSkN0KGMsbCl7aWYoMSZjJiYob2koMCksZGUoMSwiY2xyLWRnLWNvbHVtbiIpLFBl''@;'; put 'put ''KDIpLGhlKCksc2koKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLENyKGEuY29sTmFtZXx8YS5jb2xLZXkpfX1mdW5jdGlvbiBRQ3QoYyxsKXtpZigxJmMmJihvaSgwKSxkZSgxLCJjbHItZGctY2VsbCIpLFBlKDIpLGhlKCksc2koKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0''@;'; put 'put ''LGQ9T2UoKS4kaW1wbGljaXQ7ZmUoMiksQ3IoZFthLmNvbEtleV0pfX1mdW5jdGlvbiBlU3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItZGctcm93IiwxMyksT3QoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0LGY9T2UoMikuJGltcGxpY2l0''@;'; put 'put ''O3JldHVybiBDdChmLm9uUm93Q2xpY2s/Zi5vblJvd0NsaWNrKGgpOiIiKX0pLGd0KDEsUUN0LDMsMSwibmctY29udGFpbmVyIiw1KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1PZSgyKS4kaW1wbGljaXQ7ZmUoKSxFZSgibmdGb3JPZiIsYS5jb2xzVG9EaXNwbGF5KX19ZnVuY3Rpb24gdFN0KGMs''@;'; put 'put ''bCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRhYi1jb250ZW50IiwxMSkoMSwiY2xyLWRhdGFncmlkIiksZ3QoMixKQ3QsMywxLCJuZy1jb250YWluZXIiLDUpKDMsZVN0LDIsMSwiY2xyLWRnLXJvdyIsMTIpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O2ZlKDIpLEVlKCJuZ0Zv''@;'; put 'put ''ck9mIixhLmNvbHNUb0Rpc3BsYXkpLGZlKCksRWUoIm5nRm9yT2YiLGEubWV0YSl9fWZ1bmN0aW9uIG5TdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10YWIiKSgxLCJidXR0b24iLDkpLFBlKDIpLGhlKCksZ3QoMyx0U3QsNCwyLCJjbHItdGFiLWNvbnRlbnQiLDEwKSxoZSgpKSwyJmMpe2Nv''@;'; put 'put ''bnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4O2ZlKDIpLENyKGEubmFtZSksZmUoKSxFZSgiY2xySWZBY3RpdmUiLDA9PT1kKX19bGV0IFB5ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5vcGVuPSExLHRoaXMuZHNtZXRhPVtdLHRoaXMudmVyc2lvbnM9W10sdGhpcy5vcGVu''@;'; put 'put ''Q2hhbmdlPW5ldyBYcix0aGlzLnJvd0NsaWNrZWQ9bmV3IFhyLHRoaXMuZHNtZXRhVGFicz1bXSx0aGlzLnZlcnNpb25zVGFicz1bXSx0aGlzLnRhYnM9W119bmdPbkluaXQoKXt9bmdPbkNoYW5nZXMoYSl7YS5kc21ldGE/LmN1cnJlbnRWYWx1ZT8ubGVuZ3RoPjAmJih0aGlzLnBhcnNlRFNN''@;'; put 'put ''ZXRhKCksdGhpcy5wYXJzZVZlcnNpb25zKCksdGhpcy50YWJzPVsuLi50aGlzLmRzbWV0YVRhYnMsLi4udGhpcy52ZXJzaW9uc1RhYnNdKX1wYXJzZURTTWV0YSgpe3RoaXMuZHNtZXRhVGFicz1bXTtmb3IobGV0IGEgb2YgdGhpcy5kc21ldGEpe2xldCBkPXRoaXMuZHNtZXRhVGFicy5maW5k''@;'; put 'put ''SW5kZXgoaD0+aC5uYW1lPT09YS5PRFNfVEFCTEUpO2Q8MCYmKGQ9dGhpcy5kc21ldGFUYWJzLnB1c2goe25hbWU6YS5PRFNfVEFCTEUsdGl0bGU6IkRhdGFzZXQgTWV0YSIsY29sc1RvRGlzcGxheTpbe2NvbEtleToiTkFNRSJ9LHtjb2xLZXk6IlZBTFVFIn1dLG1ldGE6W10sb25Sb3dDbGlj''@;'; put 'put ''azpoPT57dGhpcy5yb3dDbGlja2VkLmVtaXQoaCl9fSktMSksdGhpcy5kc21ldGFUYWJzW2RdLm1ldGEucHVzaChhKX19cGFyc2VWZXJzaW9ucygpe3RoaXMudmVyc2lvbnNUYWJzPVt7bmFtZToiVkVSU0lPTlMiLHRpdGxlOiJEYXRhc2V0IE1ldGEiLGNvbHNUb0Rpc3BsYXk6W3tjb2xLZXk6''@;'; put 'put ''IkxPQURfUkVGIn0se2NvbEtleToiVVNFUl9OTSJ9LHtjb2xLZXk6IlZFUlNJT05fRFRUTSJ9LHtjb2xLZXk6Ik5FV19SRUNPUkRTIixjb2xOYW1lOiJBREQifSx7Y29sS2V5OiJDSEFOR0VEX1JFQ09SRFMiLGNvbE5hbWU6Ik1PRCJ9LHtjb2xLZXk6IkRFTEVURURfUkVDT1JEUyIsY29sTmFt''@;'; put 'put ''ZToiREVMIn0se2NvbEtleToiVkVSU0lPTl9ERVNDIn1dLG1ldGE6dGhpcy52ZXJzaW9ucyxvblJvd0NsaWNrOmE9Pnt0aGlzLnJvd0NsaWNrZWQuZW1pdChhKX19XX1vbk9wZW5DaGFuZ2UoYSl7dGhpcy5vcGVuPWEsdGhpcy5vcGVuQ2hhbmdlLmVtaXQoYSl9b25DbG9zZUNsaWNrKCl7dGhp''@;'; put 'put ''cy5vbk9wZW5DaGFuZ2UoITEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWRhdGFzZXQtaW5mbyJdXSxpbnB1dHM6e29wZW46Im9wZW4iLGRzbWV0YToi''@;'; put 'put ''ZHNtZXRhIix2ZXJzaW9uczoidmVyc2lvbnMifSxvdXRwdXRzOntvcGVuQ2hhbmdlOiJvcGVuQ2hhbmdlIixyb3dDbGlja2VkOiJyb3dDbGlja2VkIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbV29dLGRlY2xzOjEwLHZhcnM6NSxjb25zdHM6W1szLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJj''@;'; put 'put ''bHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIiwiY2VudGVyIiwidGV4dC1jZW50ZXIiLCJjb2xvci1kYXJrZXItZ3JheSJdLFsxLCJtb2RhbC1ib2R5Il0sWyJjbGFzcyIsInRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbHJM''@;'; put 'put ''YXlvdXQiLCJ2ZXJ0aWNhbCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4taW5mby1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJ0ZXh0LWNlbnRlciJdLFsiY2xyVGFiTGluayIsIiIsImlkIiwi''@;'; put 'put ''bGluazEiXSxbImlkIiwiY29udGVudDEiLCJjbGFzcyIsImQtZmxleCBjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciB3LTEwMCIsNCwiY2xySWZBY3RpdmUiXSxbImlkIiwiY29udGVudDEiLDEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwidy0xMDAiXSxbImNsYXNz''@;'; put 'put ''IiwiY2xpY2thYmxlLXJvdyIsMywiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjbGlja2FibGUtcm93IiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImNsci1tb2RhbCIsMCksT3QoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7''@;'; put 'put ''cmV0dXJuIGgub25PcGVuQ2hhbmdlKHYpfSksZGUoMSwiaDMiLDEpLFBlKDIsIkRhdGFzZXQgTWV0YSIpLGhlKCksZGUoMywiZGl2IiwyKSxndCg0LHFDdCwyLDAsInAiLDMpLGRlKDUsImNsci10YWJzIiw0KSxndCg2LG5TdCw0LDIsImNsci10YWIiLDUpLGhlKCkoKSxkZSg3LCJkaXYiLDYp''@;'; put 'put ''KDgsImJ1dHRvbiIsNyksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLm9uQ2xvc2VDbGljaygpfSksUGUoOSwiIENsb3NlICIpLGhlKCkoKSgpKSwyJmQmJihFZSgiY2xyTW9kYWxPcGVuIixoLm9wZW4pKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMCks''@;'; put 'put ''ZmUoNCksRWUoIm5nSWYiLGguZHNtZXRhVGFicy5sZW5ndGg8MSksZmUoMiksRWUoIm5nRm9yT2YiLGgudGFicykpfSxkZXBlbmRlbmNpZXM6W2hzLENhLF82LFczLFo5LHk2LGI0LFc5LER3LGI2LGo5LHY2LHo5LGJ1LHIwLGR3LGg2LHA2LEg5LGY2LGQ2LFA5XSxlbmNhcHN1bGF0aW9uOjJ9''@;'; put 'put ''KX19cmV0dXJuIGN9KSgpO2NvbnN0IHJTdD0oKT0+WyJudW1lcmljIix2b2lkIDBdLEZ5ZT0oKT0+WyJhdXRvY29tcGxldGUiLCJhdXRvY29tcGxldGUuY3VzdG9tIl0sZGFlPShjLGwpPT4oe2NvbDpjLGNvbEluZGV4Omx9KSxpU3Q9KCk9Plt2b2lkIDBdLGFTdD0oKT0+WyJTT0ZUU0VMRUNU''@;'; put 'put ''IiwiU09GVFNFTEVDVF9IT09LIl07ZnVuY3Rpb24gb1N0KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIsMTUpLFBlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLENyKGEuZ2VuZXJhdGVkUmVjb3JkVXJsKX19ZnVuY3Rpb24gc1N0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7''@;'; put 'put ''ZGUoMCwiYnV0dG9uIiwxNiksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5nZW5lcmF0ZUVkaXRSZWNvcmRVcmwoKSl9KSxQZSgxKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1PZSgyKTtFZSgiZGlzYWJsZWQiLGEuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGlu''@;'; put 'put ''ZyksZmUoKSxJcigiICIsYS5nZW5lcmF0ZWRSZWNvcmRVcmw/ImNvcHkgdG8gY2xpcGJvYXJkIjphLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc/IkdlbmVyYXRpbmcgdXJsLi4uIjoiTGluayB0byB0aGlzIHJlY29yZCIsIiAiKX19ZnVuY3Rpb24gbFN0KGMsbCl7aWYoMSZjJiYob2ko''@;'; put 'put ''MCksZ3QoMSxvU3QsMiwxLCJzcGFuIiwxMykoMixzU3QsMiwyLCJidXR0b24iLDE0KSxzaSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLEVlKCJuZ0lmIiwhKG51bGwhPWEuY3VycmVudFJlY29yZCYmYS5jdXJyZW50UmVjb3JkLm5vTGlua09wdGlvbikpLGZlKCksRWUoIm5nSWYiLCEobnVs''@;'; put 'put ''bCE9YS5jdXJyZW50UmVjb3JkJiZhLmN1cnJlbnRSZWNvcmQubm9MaW5rT3B0aW9uKSl9fWZ1bmN0aW9uIGNTdChjLGwpezEmYyYmKGRlKDAsImRpdiIsMTcpKDEsInNwYW4iLDE4KSxQZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpKCkpfWZ1bmN0aW9uIHVTdChjLGwpezEmYyYmR3QoMCwiY2xy''@;'; put 'put ''LWljb24iLDMxKX1mdW5jdGlvbiBkU3QoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiwzMiksUGUoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24gaFN0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMzMpfWZ1bmN0aW9uIGZTdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAs''@;'; put 'put ''ImNsci1pbnB1dC1jb250YWluZXIiLDM1KSgxLCJpbnB1dCIsMzYpLE90KCJmb2N1c2luIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDMpLmluZGV4O3JldHVybiBDdChPZSgyKS5vblJlY29yZElucHV0Rm9jdXMoaCxmKSl9KSgicGFzdGUiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChh''@;'; put 'put ''KSxDdChPZSg1KS5yZWNvcmRJbnB1dFBhc3RlKGgpKX0pKCJpbnB1dCIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgzKS4kaW1wbGljaXQsdj1PZSgyKTtyZXR1cm4gdi5yZWNvcmRJbnB1dENoYW5nZShoLGYua2V5KSxDdCh2LmN1cnJlbnRSZWNvcmQubm9MaW5rT3B0aW9uPSEwKX0p''@;'; put 'put ''LGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDMpLiRpbXBsaWNpdCx2PU9lKDIpO3JldHVybiBmaSh2LmN1cnJlbnRSZWNvcmRbZi5rZXldLGgpfHwodi5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKSxDdChoKX0pLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9''@;'; put 'put ''T2UoMykuJGltcGxpY2l0LGQ9T2UoMik7eHIoImludmFsaWQtZGF0YSIsZC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuaW5jbHVkZXMoYS5rZXkpKSxmZSgpLGxpKCJuZ01vZGVsIixkLmN1cnJlbnRSZWNvcmRbYS5rZXldKX19ZnVuY3Rpb24gcFN0KGMsbCl7MSZjJiZ6bCgwKX1mdW5jdGlv''@;'; put 'put ''biBnU3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSxndCgxLHBTdCwxLDAsIm5nLWNvbnRhaW5lciIsMzcpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgzKSxkPWEuJGltcGxpY2l0LGg9YS5pbmRleDtPZSgyKTtjb25zdCBmPWZhKDE2KTtmZSgpLEVlKCJuZ1RlbXBsYXRlT3V0bGV0IixmKSgi''@;'; put 'put ''bmdUZW1wbGF0ZU91dGxldENvbnRleHQiLG80KDIsZGFlLGQsaCkpfX1mdW5jdGlvbiBtU3QoYyxsKXtpZigxJmMmJihvaSgwKSxndCgxLGZTdCwyLDMsImNsci1pbnB1dC1jb250YWluZXIiLDM0KSgyLGdTdCwyLDUsImRpdiIsNSksc2koKSksMiZjKXtsZXQgYSxkO2NvbnN0IGg9T2UoMiku''@;'; put 'put ''JGltcGxpY2l0LGY9T2UoMik7ZmUoKSxFZSgibmdJZiIsdGwoMixyU3QpLmluY2x1ZGVzKG51bGw9PWYuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGE9Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoaC5rZXkpKT9udWxsOmEuZWRpdG9yKSksZmUoKSxFZSgibmdJZiIs''@;'; put 'put ''dGwoMyxGeWUpLmluY2x1ZGVzKG51bGw9PWYuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGQ9Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoaC5rZXkpKT9udWxsOmQuZWRpdG9yKSl9fWZ1bmN0aW9uIHZTdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNs''@;'; put 'put ''ci10ZXh0YXJlYS1jb250YWluZXIiKSgxLCJ0ZXh0YXJlYSIsMzgsMSksT3QoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoMykuaW5kZXg7cmV0dXJuIEN0KE9lKDIpLm9uUmVjb3JkSW5wdXRGb2N1cyhoLGYpKX0pKCJwYXN0ZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0''@;'; put 'put ''KGEpLEN0KE9lKDUpLnJlY29yZElucHV0UGFzdGUoaCkpfSkoImlucHV0IixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDMpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoMikucmVjb3JkSW5wdXRDaGFuZ2UoaCxmLmtleSkpfSksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0''@;'; put 'put ''KGEpO2NvbnN0IGY9T2UoMykuJGltcGxpY2l0LHY9T2UoMik7cmV0dXJuIGZpKHYuY3VycmVudFJlY29yZFtmLmtleV0saCl8fCh2LmN1cnJlbnRSZWNvcmRbZi5rZXldPWgpLEN0KGgpfSksUGUoMywiICAgICAgICAgICAgICAgICAgIiksaGUoKSxkZSg0LCJjbHItY29udHJvbC1oZWxwZXIi''@;'; put 'put ''KSxQZSg1KSxoZSgpKCl9aWYoMiZjKXtsZXQgYSxkLGg7Y29uc3QgZj1mYSgyKSx2PU9lKDMpLiRpbXBsaWNpdCxNPU9lKDIpO2ZlKCkseHIoImludmFsaWQtZGF0YSIsTS5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuaW5jbHVkZXModi5rZXkpKSgibm90LWNoYXIiLG51bGw9PU0uY3VycmVu''@;'; put 'put ''dFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGE9TS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUodi5rZXkpKT9udWxsOmEudHlwZSksRWUoInJvd3MiLHYudmFsdWUubGVuZ3RoPjgwPzY6MSksbGkoIm5nTW9kZWwiLE0uY3VycmVudFJlY29yZFt2LmtleV0pLEVlKCJtYXhMZW5ndGgi''@;'; put 'put ''LG51bGw9PU0uY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGQ9TS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUodi5rZXkpKT9udWxsOmQubGVuZ3RoKSxmZSg0KSxYdSgiIixmLnZhbHVlLmxlbmd0aCwiIC8gIixudWxsPT1NLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51''@;'; put 'put ''bGw9PShoPU0uY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKHYua2V5KSk/bnVsbDpoLmxlbmd0aCwiIil9fWZ1bmN0aW9uIHlTdChjLGwpezEmYyYmemwoMCl9ZnVuY3Rpb24gYlN0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiksZ3QoMSx5U3QsMSwwLCJuZy1jb250YWluZXIiLDM3''@;'; put 'put ''KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMyksZD1hLiRpbXBsaWNpdCxoPWEuaW5kZXg7T2UoMik7Y29uc3QgZj1mYSgxNik7ZmUoKSxFZSgibmdUZW1wbGF0ZU91dGxldCIsZikoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixvNCgyLGRhZSxkLGgpKX19ZnVuY3Rpb24gX1N0KGMsbCl7aWYo''@;'; put 'put ''MSZjJiYob2koMCksZ3QoMSx2U3QsNiw5LCJjbHItdGV4dGFyZWEtY29udGFpbmVyIiw1KSgyLGJTdCwyLDUsImRpdiIsNSksc2koKSksMiZjKXtsZXQgYSxkO2NvbnN0IGg9T2UoMikuJGltcGxpY2l0LGY9T2UoMik7ZmUoKSxFZSgibmdJZiIsdGwoMixpU3QpLmluY2x1ZGVzKG51bGw9PWYu''@;'; put 'put ''Y3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGE9Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoaC5rZXkpKT9udWxsOmEuZWRpdG9yKSksZmUoKSxFZSgibmdJZiIsdGwoMyxGeWUpLmluY2x1ZGVzKG51bGw9PWYuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGQ9''@;'; put 'put ''Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoaC5rZXkpKT9udWxsOmQuZWRpdG9yKSl9fWZ1bmN0aW9uIHdTdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci10ZXh0YXJlYS1jb250YWluZXIiLDM5KSgxLCJ0ZXh0YXJlYSIsNDApLE90KCJwYXN0ZSIsZnVuY3Rp''@;'; put 'put ''b24oaCl7cmV0dXJuIHd0KGEpLEN0KE9lKDQpLnJlY29yZElucHV0UGFzdGUoaCkpfSkoImlucHV0IixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoMikucmVjb3JkSW5wdXRDaGFuZ2UoaCxmLmtleSkpfSksY2koIm5nTW9kZWxDaGFuZ2Ui''@;'; put 'put ''LGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoMikuJGltcGxpY2l0LHY9T2UoMik7cmV0dXJuIGZpKHYuY3VycmVudFJlY29yZFtmLmtleV0saCl8fCh2LmN1cnJlbnRSZWNvcmRbZi5rZXldPWgpLEN0KGgpfSksaGUoKSxkZSgyLCJjbHItY29udHJvbC1oZWxwZXIiKSxQZSgzLCJISDpt''@;'; put 'put ''bTpzcyIpLGhlKCkoKX1pZigyJmMpe2xldCBhO2NvbnN0IGQ9T2UoMikuJGltcGxpY2l0LGg9T2UoMik7ZmUoKSx4cigiaW52YWxpZC1kYXRhIixoLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5pbmNsdWRlcyhkLmtleSkpKCJub3QtY2hhciIsbnVsbD09aC5jdXJyZW50UmVjb3JkVmFsaWRh''@;'; put 'put ''dG9yfHxudWxsPT0oYT1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShkLmtleSkpP251bGw6YS50eXBlKSxFZSgicm93cyIsZC52YWx1ZS5sZW5ndGg+ODA/NjoxKSxsaSgibmdNb2RlbCIsaC5jdXJyZW50UmVjb3JkW2Qua2V5XSl9fWZ1bmN0aW9uIENTdChjLGwpe2lmKDEmYyl7''@;'; put 'put ''Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsMzkpKDEsInRleHRhcmVhIiw0MSksT3QoInBhc3RlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoNCkucmVjb3JkSW5wdXRQYXN0ZShoKSl9KSgiaW5wdXQiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoMikuJGltcGxpY2l0O3Jl''@;'; put 'put ''dHVybiBDdChPZSgyKS5yZWNvcmRJbnB1dENoYW5nZShoLGYua2V5KSl9KSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgyKS4kaW1wbGljaXQsdj1PZSgyKTtyZXR1cm4gZmkodi5jdXJyZW50UmVjb3JkW2Yua2V5XSxoKXx8KHYuY3VycmVudFJlY29y''@;'; put 'put ''ZFtmLmtleV09aCksQ3QoaCl9KSxoZSgpLGRlKDIsImNsci1kYXRlLWNvbnRhaW5lciIsNDIpKDMsImlucHV0Iiw0MyksT3QoImNsckRhdGVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoMikuJGltcGxpY2l0O3JldHVybiBDdChPZSgyKS5yZWNvcmREYXRlQ2hhbmdlKGgs''@;'; put 'put ''Zi5rZXkpKX0pLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgyKS4kaW1wbGljaXQsZD1PZSgyKTtmZSgpLHhyKCJpbnZhbGlkLWRhdGEiLGQuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmluY2x1ZGVzKGEua2V5KSksbGkoIm5nTW9kZWwiLGQuY3VycmVudFJlY29yZFthLmtleV0pfX1m''@;'; put 'put ''dW5jdGlvbiBTU3QoYyxsKXsxJmMmJnpsKDApfWZ1bmN0aW9uIE1TdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpLGd0KDEsU1N0LDEsMCwibmctY29udGFpbmVyIiwzNyksaGUoKSksMiZjKXtjb25zdCBhPU9lKDIpLGQ9YS4kaW1wbGljaXQsaD1hLmluZGV4O09lKDIpO2NvbnN0IGY9ZmEo''@;'; put 'put ''MTYpO2ZlKCksRWUoIm5nVGVtcGxhdGVPdXRsZXQiLGYpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsbzQoMixkYWUsZCxoKSl9fWZ1bmN0aW9uIHhTdChjLGwpe2lmKDEmYyYmKG9pKDApLGRlKDEsImRpdiIsMjApKDIsImRpdiIsMjEpKDMsInAiLDIyKSxQZSg0KSxndCg1LHVTdCwxLDAs''@;'; put 'put ''ImNsci1pY29uIiwyMyksaGUoKSxkZSg2LCJwIiwyNCksUGUoNyksaGUoKSgpLGRlKDgsImRpdiIsMjUpLGd0KDksZFN0LDIsMCwic3BhbiIsMjYpKDEwLGhTdCwxLDAsImNsci1pY29uIiwyNykoMTEsbVN0LDMsNCwibmctY29udGFpbmVyIiwyOCkoMTIsX1N0LDMsNCwibmctY29udGFpbmVy''@;'; put 'put ''IiwyOCkoMTMsd1N0LDQsNiwiY2xyLXRleHRhcmVhLWNvbnRhaW5lciIsMjkpKDE0LENTdCw0LDMsImRpdiIsMjkpKDE1LE1TdCwyLDUsImRpdiIsMjgpLGhlKCkoKSxHdCgxNiwiaHIiLDMwKSxzaSgpKSwyJmMpe2xldCBhLGQ7Y29uc3QgaD1PZSgpLGY9aC4kaW1wbGljaXQsdj1oLmluZGV4''@;'; put 'put ''LE09T2UoMik7ZmUoNCksSXIoIiAiLGYua2V5LCIgIiksZmUoKSxFZSgibmdJZiIsTS5pc0NvbFBrKGYua2V5KSksZmUoMiksSXIoIiAiLG51bGw9PU0uY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGE9TS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoZi5rZXkpKT9udWxs''@;'; put 'put ''OmEuZGVzYywiICIpLGZlKCksRWUoIm5nU3dpdGNoIixudWxsPT1NLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShkPU0uY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGYua2V5KSk/bnVsbDpkLnR5cGUpLGZlKCksRWUoIm5nSWYiLE0uY3VycmVudFJlY29yZExvYWRpbmdz''@;'; put 'put ''LmluY2x1ZGVzKHYpKSxmZSgpLEVlKCJuZ0lmIixNLmN1cnJlbnRSZWNvcmRFcnJvcnMuaW5jbHVkZXModikpLGZlKCksRWUoIm5nU3dpdGNoQ2FzZSIsIm51bWVyaWMiKSxmZSgpLEVlKCJuZ1N3aXRjaENhc2UiLHZvaWQgMCksZmUoKSxFZSgibmdTd2l0Y2hDYXNlIiwidGltZSIpLGZlKCks''@;'; put 'put ''RWUoIm5nU3dpdGNoQ2FzZSIsImRhdGUiKSxmZSgpLEVlKCJuZ1N3aXRjaENhc2UiLCJhdXRvY29tcGxldGUiKX19ZnVuY3Rpb24gRVN0KGMsbCl7aWYoMSZjJiYob2koMCksZ3QoMSx4U3QsMTcsMTEsIm5nLWNvbnRhaW5lciIsNSksc2koKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2Zl''@;'; put 'put ''KCksRWUoIm5nSWYiLCJBY3Rpb24iIT09YS5rZXkmJiJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iIT09YS5rZXkmJiJub0xpbmtPcHRpb24iIT09YS5rZXkpfX1mdW5jdGlvbiBUU3QoYyxsKXtpZigxJmMmJihvaSgwKSxndCgxLEVTdCwyLDEsIm5nLWNvbnRhaW5lciIsMTkpLGRs''@;'; put 'put ''KDIsImtleXZhbHVlIiksc2koKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSxFZSgibmdGb3JPZiIsWDcoMiwyLGEuY3VycmVudFJlY29yZCxhLm9yaWdpbmFsT3JkZXIpKSgibmdGb3JUcmFja0J5IixhLnRyYWNrQnlGbil9fWZ1bmN0aW9uIEFTdChjLGwpezEmYyYmKGRlKDAsImNsci1hbGVy''@;'; put 'put ''dCIsNDQpKDEsImNsci1hbGVydC1pdGVtIikoMiwic3BhbiIsNDUpLFBlKDMsIiBEYXRhIFZhbGlkYXRpb24gRXJyb3JzIC0gUGxlYXNlIFJldmlldyAiKSxoZSgpKCkoKSksMiZjJiYobWQoInZpc2liaWxpdHkiLE9lKCkuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aD4wPyJ2aXNp''@;'; put 'put ''YmxlIjoiaGlkZGVuIiksRWUoImNsckFsZXJ0Q2xvc2FibGUiLCExKSgiY2xyQWxlcnRUeXBlIiwiZGFuZ2VyIikpfWZ1bmN0aW9uIGtTdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsNDYpKDEsImJ1dHRvbiIsNDcpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''d3QoYSksQ3QoT2UoKS5vblByZXZpb3VzUmVjb3JkQ2xpY2soKSl9KSxHdCgyLCJjbHItaWNvbiIsNDgpLGhlKCksZGUoMywicCIpLFBlKDQsIiBDdXJyZW50IHJvdzogIiksZGUoNSwic3Ryb25nIiksUGUoNiksaGUoKSgpLGRlKDcsImJ1dHRvbiIsNDcpLE90KCJjbGljayIsZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5vbk5leHRSZWNvcmRDbGljaygpKX0pLEd0KDgsImNsci1pY29uIiw0OSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO2ZlKCksRWUoImRpc2FibGVkIixhLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg+MCksZmUoNSksSXIoIiAiLGEu''@;'; put 'put ''Y3VycmVudFJlY29yZEluZGV4KzEsIiAiKSxmZSgpLEVlKCJkaXNhYmxlZCIsYS5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPjApfX1mdW5jdGlvbiBEU3QoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDUzKSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7''@;'; put 'put ''RWUoIm5nVmFsdWUiLGEpLGZlKCksSXIoIiAiLGEsIiAiKX19ZnVuY3Rpb24gSVN0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2IikoMSwiYXBwLXNvZnQtc2VsZWN0Iiw1MSksT3QoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKS5jb2xJbmRleDty''@;'; put 'put ''ZXR1cm4gQ3QoT2UoKS5vblJlY29yZElucHV0Rm9jdXMoaCxmKSl9KSxjaSgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKS5jb2wsdj1PZSgpO3JldHVybiBmaSh2LmN1cnJlbnRSZWNvcmRbZi5rZXldLGgpfHwodi5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKSxD''@;'; put 'put ''dChoKX0pLE90KCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpLGY9aC5jb2wsdj1oLmNvbEluZGV4O3JldHVybiBDdChPZSgpLm9uUmVjb3JkRHJvcGRvd25DaGFuZ2UoZi5rZXksdikpfSksZ3QoMixEU3QsMiwyLCJvcHRpb24iLDUyKSxoZSgpKCl9aWYoMiZj''@;'; put 'put ''KXtsZXQgYTtjb25zdCBkPU9lKCkuY29sLGg9T2UoKTtmZSgpLGxpKCJ2YWx1ZSIsaC5jdXJyZW50UmVjb3JkW2Qua2V5XSksRWUoImlucHV0SWQiLGQua2V5KSxmZSgpLEVlKCJuZ0Zvck9mIixudWxsPT1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShhPWguY3VycmVudFJlY29y''@;'; put 'put ''ZFZhbGlkYXRvci5nZXRSdWxlKGQua2V5KSk/bnVsbDphLnNvdXJjZSl9fWZ1bmN0aW9uIFJTdChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsNTYpLFBlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtFZSgidmFsdWUiLGEpLGZlKCksSXIoIiAiLGEsIiAiKX19ZnVuY3Rp''@;'; put 'put ''b24gTFN0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwic2VsZWN0Iiw1NCksT3QoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKS5jb2xJbmRleDtyZXR1cm4gQ3QoT2UoKS5vblJlY29yZElucHV0Rm9jdXMoaCxmKSl9KSxjaSgibmdNb2RlbENoYW5nZSIs''@;'; put 'put ''ZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpLmNvbCx2PU9lKCk7cmV0dXJuIGZpKHYuY3VycmVudFJlY29yZFtmLmtleV0saCl8fCh2LmN1cnJlbnRSZWNvcmRbZi5rZXldPWgpLEN0KGgpfSksZ3QoMSxSU3QsMiwyLCJvcHRpb24iLDU1KSxoZSgpfWlmKDImYyl7bGV0IGE7Y29uc3Qg''@;'; put 'put ''ZD1PZSgpLmNvbCxoPU9lKCk7bGkoIm5nTW9kZWwiLGguY3VycmVudFJlY29yZFtkLmtleV0pLGZlKCksRWUoIm5nRm9yT2YiLG51bGw9PWguY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGE9aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoZC5rZXkpKT9udWxsOmEuc291''@;'; put 'put ''cmNlKX19ZnVuY3Rpb24gT1N0KGMsbCl7aWYoMSZjJiZndCgwLElTdCwzLDMsImRpdiIsNTApKDEsTFN0LDIsMiwibmctdGVtcGxhdGUiLG51bGwsMix4YyksMiZjKXtjb25zdCBhPWwuY29sLGQ9ZmEoMiksaD1PZSgpO0VlKCJuZ0lmIixudWxsPT1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3I/''@;'; put 'put ''bnVsbDpoLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuaGFzRHFSdWxlcyhhLmtleSx0bCgyLGFTdCkpKSgibmdJZkVsc2UiLGQpfX1sZXQgUFN0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLnNhc1N0b3JlU2VydmljZT1hLHRoaXMuaGVscGVyU2VydmljZT1kLHRoaXMucmVj''@;'; put 'put ''b3JkQWN0aW9uPW51bGwsdGhpcy5maWx0ZXI9ITEsdGhpcy5zdWJtaXRMb2FkaW5nPSExLHRoaXMuaGVhZGVyUGtzPVtdLHRoaXMuY2VsbFZhbGlkYXRpb249W10sdGhpcy5jdXJyZW50UmVjb3JkSW5kZXg9LTEsdGhpcy5jdXJyZW50UmVjb3JkTG9hZGluZ3M9W10sdGhpcy5jdXJyZW50UmVj''@;'; put 'put ''b3JkRXJyb3JzPVtdLHRoaXMub25SZWNvcmRDaGFuZ2U9bmV3IFhyLHRoaXMub25SZWNvcmRJbnB1dEZvY3VzZWQ9bmV3IFhyLHRoaXMub25SZWNvcmREcm9wZG93bkNoYW5nZWQ9bmV3IFhyLHRoaXMub25SZWNvcmRFZGl0Q2xvc2U9bmV3IFhyLHRoaXMub25SZWNvcmRFZGl0Q29uZmlybT1u''@;'; put 'put ''ZXcgWHIsdGhpcy5vbk5leHRSZWNvcmQ9bmV3IFhyLHRoaXMub25QcmV2aW91c1JlY29yZD1uZXcgWHIsdGhpcy5jdXJyZW50UmVjb3JkSW52YWxpZENvbHM9W10sdGhpcy5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nPSExLHRoaXMuZ2VuZXJhdGVkUmVjb3JkVXJsPW51bGwsdGhpcy5h''@;'; put 'put ''ZGRSZWNvcmRVcmw9bnVsbCx0aGlzLnJlY29yZE5ld09yUGtNb2RpZmllZD0hMSx0aGlzLmFkZFJlY29yZExvYWRpbmc9ITEsdGhpcy5vcmlnaW5hbE9yZGVyPShoLGYpPT4wfW5nT25Jbml0KCl7fXZhbGlkYXRlUmVjb3JkQ29sKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24q''@;'; put 'put ''KCl7cmV0dXJuIG5ldyBQcm9taXNlKChmLHYpPT57aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yPy5leGVjdXRlSG90VmFsaWRhdG9yKGEsZCxNPT57ZihNKX0pfSl9KSgpfXJlY29yZERhdGVDaGFuZ2UoYSxkKXtsZXQgaD10aGlzLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3I/LmdldFJ1bGUoZCks''@;'; put 'put ''Zj1oP2guZGF0ZUZvcm1hdDoiIjt0aGlzLmN1cnJlbnRSZWNvcmQmJih0aGlzLmN1cnJlbnRSZWNvcmRbZF09YWgoKShhKS5mb3JtYXQoZikpfWNvbmZpcm1SZWNvcmRFZGl0KCl7dGhpcy5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPDEmJnRoaXMub25SZWNvcmRDaGFuZ2UuZW1p''@;'; put 'put ''dCh0aGlzLmN1cnJlbnRSZWNvcmQpfWNsb3NlUmVjb3JkRWRpdCgpe3RoaXMub25SZWNvcmRFZGl0Q2xvc2UuZW1pdCgpfW9uUmVjb3JkRHJvcGRvd25DaGFuZ2UoYSxkKXt0aGlzLm9uUmVjb3JkRHJvcGRvd25DaGFuZ2VkLmVtaXQoe2NvbE5hbWU6YSxjb2w6ZH0pfW9uUmVjb3JkSW5wdXRG''@;'; put 'put ''b2N1cyhhLGQpe3RoaXMub25SZWNvcmRJbnB1dEZvY3VzZWQuZW1pdCh7ZXZlbnQ6YSxjb2xOYW1lOmR9KX1yZWNvcmRJbnB1dFBhc3RlKGEpe3NldFRpbWVvdXQoKCk9PnthLnRhcmdldC52YWx1ZT1hLnRhcmdldC52YWx1ZS5yZXBsYWNlKC9ccyskLywiIil9LDApfXJlY29yZElucHV0Q2hh''@;'; put 'put ''bmdlKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Y29uc3QgZj1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3I/LmdldFJ1bGUoZCksdj1hLnRhcmdldC52YWx1ZTtoLmhlbHBlclNlcnZpY2UuZGVib3VuY2VDYWxsKDMwMCwoKT0+e2gudmFsaWRhdGVSZWNvcmRDb2woZix2''@;'; put 'put ''KS50aGVuKE09Pntjb25zdCBEPWguY3VycmVudFJlY29yZEludmFsaWRDb2xzLmluZGV4T2YoZCk7TT9EPi0xJiZoLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5zcGxpY2UoRCwxKTpEPDAmJmguY3VycmVudFJlY29yZEludmFsaWRDb2xzLnB1c2goZCl9KX0pfSkoKX1vbk5leHRSZWNvcmRD''@;'; put 'put ''bGljaygpe3RoaXMub25OZXh0UmVjb3JkLmVtaXQoKX1vblByZXZpb3VzUmVjb3JkQ2xpY2soKXt0aGlzLm9uUHJldmlvdXNSZWNvcmQuZW1pdCgpfWNvcHlUb0NsaXAoYSl7bmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoYSksdGhpcy5nZW5lcmF0ZWRSZWNvcmRVcmw9YX1nZW5lcmF0''@;'; put 'put ''ZUVkaXRSZWNvcmRVcmwoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtpZihhLmdlbmVyYXRlZFJlY29yZFVybClhLmNvcHlUb0NsaXAoYS5nZW5lcmF0ZWRSZWNvcmRVcmwpO2Vsc2V7YS5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nPSEwO2NvbnN0IGQ9W107YS5oZWFk''@;'; put 'put ''ZXJQa3MuZm9yRWFjaChoPT57bGV0IGY9IkMiLHY9IiI7Zm9yKGxldCBNPTA7TTxhLmNlbGxWYWxpZGF0aW9uLmxlbmd0aDtNKyspe2NvbnN0IEQ9YS5jZWxsVmFsaWRhdGlvbltNXTtpZihELmRhdGE9PT1oKXsoIm51bWVyaWMiPT09RC50eXBlfHwiZGF0ZSI9PT1ELnR5cGV8fCJ0aW1lIj09''@;'; put 'put ''PUQudHlwZSkmJihmPSJOIik7YnJlYWt9fXY9IkMiPT09Zj9gJyR7YS5jdXJyZW50UmVjb3JkW2hdfSdgOmEuY3VycmVudFJlY29yZFtoXS50b1N0cmluZygpLGQucHVzaCh7R1JPVVBfTE9HSUM6IkFORCIsU1VCR1JPVVBfTE9HSUM6IkFORCIsU1VCR1JPVVBfSUQ6MCxWQVJJQUJMRV9OTTpo''@;'; put 'put ''LE9QRVJBVE9SX05NOiI9IixSQVdfVkFMVUU6dn0pfSksZC5sZW5ndGg+MCYmYS5saWJkcyYmKHlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLnNhdmVRdWVyeShhLmxpYmRzLGQpLnRoZW4oaD0+e2EucXVlcnlGaWx0ZXI9e2lkOmgucmVzdWx0WzBdLkZJTFRFUl9SSyx0YWJsZTpoLnJlc3VsdFsw''@;'; put 'put ''XS5GSUxURVJfVEFCTEV9O2NvbnN0IE09bG9jYXRpb24uaHJlZi5zcGxpdCgiIyIpWzBdKyIjL2VkaXRvci9lZGl0LXJlY29yZC8iK2EucXVlcnlGaWx0ZXIudGFibGUrIi8iK2EucXVlcnlGaWx0ZXIuaWQ7YS5jb3B5VG9DbGlwKE0pLGEuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGluZz0h''@;'; put 'put ''MSxhLmZpbHRlcj0hMX0pLmNhdGNoKGg9PnthLnN1Ym1pdExvYWRpbmc9ITF9KSl9fSkoKX1pc0NvbFBrKGEpe3JldHVybiB0aGlzLmhlYWRlclBrcy5pbmRleE9mKGEpPi0xfXRyYWNrQnlGbihhLGQpe3JldHVybiBhfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4g''@;'; put 'put ''bmV3KGR8fGMpKHFlKE0yKSxxZShMdSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWVkaXQtcmVjb3JkIl1dLGlucHV0czp7Y3VycmVudFJlY29yZDoiY3VycmVudFJlY29yZCIscmVjb3JkQWN0aW9uOiJyZWNvcmRBY3Rpb24iLGxpYmRzOiJs''@;'; put 'put ''aWJkcyIscXVlcnlGaWx0ZXI6InF1ZXJ5RmlsdGVyIixmaWx0ZXI6ImZpbHRlciIsc3VibWl0TG9hZGluZzoic3VibWl0TG9hZGluZyIsaGVhZGVyUGtzOiJoZWFkZXJQa3MiLGNlbGxWYWxpZGF0aW9uOiJjZWxsVmFsaWRhdGlvbiIsY3VycmVudFJlY29yZEluZGV4OiJjdXJyZW50UmVjb3Jk''@;'; put 'put ''SW5kZXgiLGN1cnJlbnRSZWNvcmRMb2FkaW5nczoiY3VycmVudFJlY29yZExvYWRpbmdzIixjdXJyZW50UmVjb3JkRXJyb3JzOiJjdXJyZW50UmVjb3JkRXJyb3JzIixjdXJyZW50UmVjb3JkVmFsaWRhdG9yOiJjdXJyZW50UmVjb3JkVmFsaWRhdG9yIn0sb3V0cHV0czp7b25SZWNvcmRDaGFu''@;'; put 'put ''Z2U6Im9uUmVjb3JkQ2hhbmdlIixvblJlY29yZElucHV0Rm9jdXNlZDoib25SZWNvcmRJbnB1dEZvY3VzZWQiLG9uUmVjb3JkRHJvcGRvd25DaGFuZ2VkOiJvblJlY29yZERyb3Bkb3duQ2hhbmdlZCIsb25SZWNvcmRFZGl0Q2xvc2U6Im9uUmVjb3JkRWRpdENsb3NlIixvblJlY29yZEVkaXRD''@;'; put 'put ''b25maXJtOiJvblJlY29yZEVkaXRDb25maXJtIixvbk5leHRSZWNvcmQ6Im9uTmV4dFJlY29yZCIsb25QcmV2aW91c1JlY29yZDoib25QcmV2aW91c1JlY29yZCJ9LHN0YW5kYWxvbmU6ITEsZGVjbHM6MTcsdmFyczoxMSxjb25zdHM6W1siYXV0b2NvbXBsZXRlIiwiIl0sWyJjaGFyVGV4dGFy''@;'; put 'put ''ZWEiLCIiXSxbIm90aGVyX3RoYW5fc29mdF9zZWxlY3QiLCIiXSxbImlkIiwicmVjb3JkTW9kYWxSZWYiLDEsInJlY29yZC1lZGl0LW1vZGFsIiwicG9zaXRpb24tcmVsYXRpdmUiLDMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiXSxbNCwibmdJ''@;'; put 'put ''ZiJdLFsxLCJtb2RhbC1ib2R5Il0sWyJjbGFzcyIsImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMCBweS0xMCIsNCwibmdJZiJdLFsxLCJtb2RhbC1mb290ZXIiLCJwLTAiLCJjbHItZ2FwLTUiLCJjbHItZ2FwLW1kLTAiLCJjbHItZmxleC1j''@;'; put 'put ''b2x1bW4iLCJjbHItZmxleC1tZC1yb3ciXSxbImNsYXNzIiwidmFsaWRhdGlvbi1pbmZvLWFsZXJ0IiwzLCJ2aXNpYmlsaXR5IiwiY2xyQWxlcnRDbG9zYWJsZSIsImNsckFsZXJ0VHlwZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJwcmV2LW5leHQiLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24i''@;'; put 'put ''LDEsImJ0biIsImJ0bi1vdXRsaW5lIiwiZm9jdXNhYmxlIiwibXItNWkiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsImZvY3VzYWJsZSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsiY2xhc3MiLCJwb3NpdGlvbi1hYnNvbHV0ZSBnZW5lcmF0ZS1y''@;'; put 'put ''ZWNvcmQtdXJsIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImJ0biBidG4tbGluayBnZW5lcmF0ZS1yZWNvcmQtdXJsLWJ1dHRvbiBwb3NpdGlvbi1hYnNvbHV0ZSIsMywiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsxLCJwb3NpdGlvbi1hYnNvbHV0ZSIsImdlbmVyYXRlLXJlY29yZC11cmwi''@;'; put 'put ''XSxbMSwiYnRuIiwiYnRuLWxpbmsiLCJnZW5lcmF0ZS1yZWNvcmQtdXJsLWJ1dHRvbiIsInBvc2l0aW9uLWFic29sdXRlIiwzLCJjbGljayIsImRpc2FibGVkIl0sWzEsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJhbGlnbi1pdGVtcy1jZW50ZXIiLCJ3LTEwMCIsInB5LTEw''@;'; put 'put ''Il0sWzEsInNwaW5uZXIiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWzEsImNvbHVtbi1lbnRyeSIsImNsci1mbGV4LWNvbHVtbiIsImNsci1mbGV4LW1kLXJvdyJdLFsxLCJuYW1lLWlucHV0LXJvdyJdLFsxLCJmb250LXdlaWdodC1ib2xkIl0sWyJzaGFwZSIsImtl''@;'; put 'put ''eSIsNCwibmdJZiJdLFsxLCJjZWxsLWRlc2MiXSxbMSwiaW5wdXRzLXdyYXBwZXIiLCJwb3NpdGlvbi1yZWxhdGl2ZSIsMywibmdTd2l0Y2giXSxbImNsYXNzIiwic3Bpbm5lciBzcGlubmVyLWlubGluZSBmbGV4LXVuc2V0IHBvc2l0aW9uLWFic29sdXRlIGVudHJ5LWlucHV0LWxlZnQtb2Zm''@;'; put 'put ''c2V0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImZsZXgtdW5zZXQgcG9zaXRpb24tYWJzb2x1dGUgZW50cnktaW5wdXQtbGVmdC1vZmZzZXQiLCJzaGFwZSIsImVycm9yLXN0YW5kYXJkIiwic3RhdHVzIiwid2FybmluZyIsNCwibmdJZiJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwiZGF0''@;'; put 'put ''ZS1maWVsZCIsNCwibmdTd2l0Y2hDYXNlIl0sWzEsIm10LTEwIl0sWyJzaGFwZSIsImtleSJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiLCJmbGV4LXVuc2V0IiwicG9zaXRpb24tYWJzb2x1dGUiLCJlbnRyeS1pbnB1dC1sZWZ0LW9mZnNldCJdLFsic2hhcGUiLCJlcnJvci1zdGFu''@;'; put 'put ''ZGFyZCIsInN0YXR1cyIsIndhcm5pbmciLDEsImZsZXgtdW5zZXQiLCJwb3NpdGlvbi1hYnNvbHV0ZSIsImVudHJ5LWlucHV0LWxlZnQtb2Zmc2V0Il0sWyJjbGFzcyIsIm51bWVyaWMtaW5wdXQiLDMsImludmFsaWQtZGF0YSIsNCwibmdJZiJdLFsxLCJudW1lcmljLWlucHV0Il0sWyJjbHJJ''@;'; put 'put ''bnB1dCIsIiIsInR5cGUiLCJ0ZXh0IiwxLCJub3QtY2hhciIsMywiZm9jdXNpbiIsInBhc3RlIiwiaW5wdXQiLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXSxbImNsclRleHRhcmVhIiwiIiwzLCJmb2N1''@;'; put 'put ''c2luIiwicGFzdGUiLCJpbnB1dCIsIm5nTW9kZWxDaGFuZ2UiLCJyb3dzIiwibmdNb2RlbCIsIm1heExlbmd0aCJdLFsxLCJkYXRlLWZpZWxkIl0sWyJjbHJUZXh0YXJlYSIsIiIsMywicGFzdGUiLCJpbnB1dCIsIm5nTW9kZWxDaGFuZ2UiLCJyb3dzIiwibmdNb2RlbCJdLFsiY2xyVGV4dGFy''@;'; put 'put ''ZWEiLCIiLCJyb3dzIiwiMSIsImNvbHMiLCJhdXRvIiwxLCJub3QtY2hhciIsMywicGFzdGUiLCJpbnB1dCIsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzEsImRhdGUtcGlja2VyIl0sWyJ0eXBlIiwiZGF0ZSIsIm5hbWUiLCJkYXRlIiwiY2xyRGF0ZSIsIiIsMSwiZC1ub25lIiwzLCJj''@;'; put 'put ''bHJEYXRlQ2hhbmdlIl0sWzEsInZhbGlkYXRpb24taW5mby1hbGVydCIsMywiY2xyQWxlcnRDbG9zYWJsZSIsImNsckFsZXJ0VHlwZSJdLFsxLCJhbGVydC10ZXh0Il0sWzEsInByZXYtbmV4dCJdLFsidHlwZSIsImJ1dHRvbiIsInRhYmluZGV4IiwiMCIsMSwiYnRuIiwiYnRuLW91dGxpbmUi''@;'; put 'put ''LCJmb2N1c2FibGUiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwiYW5nbGUgbGVmdCIsInNpemUiLCIyMyJdLFsic2hhcGUiLCJhbmdsZSByaWdodCIsInNpemUiLCIyMyJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbMywiZm9jdXNpbiIsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2''@;'; put 'put ''ZW50IiwidmFsdWUiLCJpbnB1dElkIl0sWzMsIm5nVmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJuZ1ZhbHVlIl0sWyJjbHJTZWxlY3QiLCIiLDMsImZvY3VzaW4iLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZh''@;'; put 'put ''bHVlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZkKXtjb25zdCBmPU9uKCk7ZGUoMCwiY2xyLW1vZGFsIiwzKSgxLCJoMyIsNCksUGUoMiksZ3QoMyxsU3QsMywyLCJuZy1jb250YWluZXIiLDUpLGhlKCksZGUoNCwiZGl2Iiw2KSxndCg1LGNTdCwzLDAsImRpdiIsNykoNixUU3Qs''@;'; put 'put ''Myw1LCJuZy1jb250YWluZXIiLDUpLGhlKCksZGUoNywiZGl2Iiw4KSxndCg4LEFTdCw0LDQsImNsci1hbGVydCIsOSkoOSxrU3QsOSwzLCJkaXYiLDEwKSxkZSgxMCwiZGl2IikoMTEsImJ1dHRvbiIsMTEpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC5jdXJyZW50UmVj''@;'; put 'put ''b3JkLm5vTGlua09wdGlvbj0hMSxDdChoLmNsb3NlUmVjb3JkRWRpdCgpKX0pLFBlKDEyLCIgQ2FuY2VsICIpLGhlKCksZGUoMTMsImJ1dHRvbiIsMTIpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5jb25maXJtUmVjb3JkRWRpdCgpKX0pLFBlKDE0LCIgQ29uZmly''@;'; put 'put ''bSAiKSxoZSgpKCkoKSxndCgxNSxPU3QsMywzLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLHhjKSxoZSgpfTImZCYmKEVlKCJjbHJNb2RhbE9wZW4iLCEwKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDIpLGszKCIgIiwiQUREIj09PWgucmVjb3JkQWN0aW9uPyJBZGQiOiJFZGl0IiwiIHJlY29y''@;'; put 'put ''ZCBpbiAiLG51bGw9PWgubGliZHM/bnVsbDpoLmxpYmRzLnNwbGl0KCIuIilbMF0sIi4iLG51bGw9PWgubGliZHM/bnVsbDpoLmxpYmRzLnNwbGl0KCIuIilbMV0sIiAiKSxmZSgpLEVlKCJuZ0lmIiwiRURJVCI9PT1oLnJlY29yZEFjdGlvbiksZmUoMiksRWUoIm5nSWYiLGguYWRkUmVjb3Jk''@;'; put 'put ''TG9hZGluZyksZmUoKSxFZSgibmdJZiIsIWguYWRkUmVjb3JkTG9hZGluZyksZmUoMiksRWUoIm5nSWYiLGguY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aD4wKSxmZSgpLEVlKCJuZ0lmIixoLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg8MSksZmUoNCksRWUoImRpc2Fi''@;'; put 'put ''bGVkIixoLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg+MCkpfSxkZXBlbmRlbmNpZXM6W2hzLENhLHlkLENmLGw0LHhmLEVmLG5jLE1mLGhsLHJsLHZBLGhwZSx5QSxVbCxidSxyMCxhSCxkQSxtSCxIWCxNZCxkSCxOOSx2SCxqM2UsSXllLExQXSxlbmNhcHN1bGF0aW9uOjJ9KX19''@;'; put 'put ''cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIEZTdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDMpLFBlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLElyKCIgIixhLCIgIil9fWxldCBIU3Q9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuc3RhdGVzTGlzdD1bXSx0''@;'; put 'put ''aGlzLnByb2Nlc3NlZFN0YXRlcz1bXSx0aGlzLnN0YXRlckluUHJvZ3Jlc3M9ITEsdGhpcy5taW5EZWxheT0xZTN9bmdPbkluaXQoKXt9YXBwZW5kU3RhdGUoYSl7aWYoIntmaW5pc2h9Ij09PWEpcmV0dXJuIHRoaXMuc3RhdGVySW5Qcm9ncmVzcz0hMSx2b2lkIGNsZWFySW50ZXJ2YWwodGhp''@;'; put 'put ''cy5zdGF0ZUludGVydmFsKTt0aGlzLnN0YXRlc0xpc3QucHVzaChhKSx0aGlzLnByb2Nlc3NlZFN0YXRlcy5wdXNoKGEpfXJlcGxhY2VMYXN0U3RhdGUoYSl7dGhpcy5zdGF0ZXNMaXN0Lmxlbmd0aD4wPyh0aGlzLnN0YXRlc0xpc3QucG9wKCksdGhpcy5zdGF0ZXNMaXN0LnB1c2goYSkpOnRo''@;'; put 'put ''aXMucHJvY2Vzc2VkU3RhdGVzW3RoaXMucHJvY2Vzc2VkU3RhdGVzLmxlbmd0aC0xXT1hfWNsZWFyU3RhdGVzKCl7dGhpcy5wcm9jZXNzZWRTdGF0ZXM9W119c3RhcnRTdGF0ZXIoKXt0aGlzLnN0YXRlckluUHJvZ3Jlc3M9ITAsdGhpcy5zdGF0ZXNMaXN0Lmxlbmd0aD4wJiZ0aGlzLnByb2Nl''@;'; put 'put ''c3NlZFN0YXRlcy5wdXNoKHRoaXMuc3RhdGVzTGlzdC5zaGlmdCgpfHwiIiksdGhpcy5zdGF0ZUludGVydmFsPXNldEludGVydmFsKCgpPT57dGhpcy5zdGF0ZXNMaXN0Lmxlbmd0aD4wJiZ0aGlzLnByb2Nlc3NlZFN0YXRlcy5wdXNoKHRoaXMuc3RhdGVzTGlzdC5zaGlmdCgpfHwiIil9LHRo''@;'; put 'put ''aXMubWluRGVsYXkpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXVwbG9hZC1zdGF0ZXIiXV0sc3RhbmRhbG9uZTohMSxkZWNsczo1LHZhcnM6MSxjb25z''@;'; put 'put ''dHM6W1siY2xhc3MiLCJtLTAiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJ0ZXh0LWNlbnRlciJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1zbSIsInZlcnRpY2FsLWFsaWduLW1pZGRsZSJdLFsxLCJtLTAiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiKSxndCgx''@;'; put 'put ''LEZTdCwyLDEsInAiLDApLGhlKCksZGUoMiwiZGl2IiwxKSgzLCJzcGFuIiwyKSxQZSg0LCJMb2FkaW5nLi4uIiksaGUoKSgpKSwyJmQmJihmZSgpLEVlKCJuZ0Zvck9mIixoLnByb2Nlc3NlZFN0YXRlcykpfSxkZXBlbmRlbmNpZXM6W2hzXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9''@;'; put 'put ''KSgpLE5TdD0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhKXtyZXR1cm4gYS5yZXBsYWNlKC9cfC9nLCIgfCAiKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1MbCh7bmFtZToicGtTcGFjZVNlcGFyYXRl''@;'; put 'put ''Iix0eXBlOmMscHVyZTohMCxzdGFuZGFsb25lOiExfSl9fXJldHVybiBjfSkoKSxIeWU9KCgpPT57Y2xhc3MgY3t0cmFuc2Zvcm0oYSxkKXtyZXR1cm4gdGhpcy5hZGRTZXBhcmF0b3JzKGEudG9TdHJpbmcoKSxkKX1hZGRTZXBhcmF0b3JzKGEsZD0iICIpe2NvbnN0IGg9KGErPSIiKS5zcGxp''@;'; put 'put ''dCgiLiIpO2xldCBmPWhbMF07Y29uc3Qgdj1oLmxlbmd0aD4xPyIuIitoWzFdOiIiLE09LyhcZCspKFxkezN9KS87Zm9yKDtNLnRlc3QoZik7KWY9Zi5yZXBsYWNlKE0sIiQxIitkKyIkMiIpO3JldHVybiBmK3Z9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXco''@;'; put 'put ''ZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXBpcGU9TGwoe25hbWU6InRob3VzYW5kU2VwYXJhdG9yIix0eXBlOmMscHVyZTohMCxzdGFuZGFsb25lOiExfSl9fXJldHVybiBjfSkoKTtjb25zdCBWU3Q9WyJodCJdLEJTdD1bInVwbG9hZFN0YXRlciJdLGpTdD1bInF1ZXJ5RmlsdGVyIl0selN0''@;'; put 'put ''PVsiZmlsZVVwbG9hZElucHV0Il0sVVN0PShjLGwpPT4oe2xpYk5hbWU6Yyx0YWJsZU5hbWU6bH0pLE55ZT0oKT0+WyIiLCIgIl0sWlN0PWM9Pih7aGVhZGVyQmFyRmlsdGVyOmN9KSxXU3Q9KCk9PlsiL2hvbWUiXTtmdW5jdGlvbiBZU3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgw''@;'; put 'put ''LCJkaXYiLDY0KSgxLCJzcGFuIiw2NSkoMiwibGFiZWwiLDY2KSxQZSgzLCIgQnJvd3NlICIpLGhlKCkoKSxkZSg0LCJpbnB1dCIsNjcsMyksT3QoImNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuYXR0YWNoRmlsZShoKSl9KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBh''@;'; put 'put ''PU9lKCk7ZmUoNCksRWUoInVwbG9hZGVyIixhLnVwbG9hZGVyKX19ZnVuY3Rpb24gR1N0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2Iiw2OCkoMSwiYnV0dG9uIiw2OSksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLnVwbG9hZFBhcnNlZEZp''@;'; put 'put ''bGVzKCkpfSksUGUoMiwiIFVwbG9hZCAiKSxoZSgpKCl9MiZjJiYoZmUoKSxFZSgiZGlzYWJsZWQiLCEwKSl9ZnVuY3Rpb24gJFN0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiYnV0dG9uIiw3MCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLnNo''@;'; put 'put ''b3dVcGxvYWRNb2RhbD0hMSl9KSxQZSgxLCIgQ2xvc2UgIiksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoKTtFZSgiZGlzYWJsZWQiLGEuZXhjZWxGaWxlUGFyc2luZ3x8YS51cGxvYWRMb2FkaW5nKX19ZnVuY3Rpb24gS1N0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiYnV0dG9u''@;'; put 'put ''Iiw3MSksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLnNob3dVcGxvYWRNb2RhbD0hMSl9KSxQZSgxLCIgU2tpcCAiKSxoZSgpfX1mdW5jdGlvbiBYU3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDcyKSxHdCgxLCJhcHAtdXBsb2FkLXN0YXRlciIsbnVsbCw0KSxo''@;'; put 'put ''ZSgpKX1mdW5jdGlvbiBxU3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJhcHAtZWRpdC1yZWNvcmQiLDczKSxPdCgib25SZWNvcmRDaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuY29uZmlybVJlY29yZEVkaXQoKSl9KSgib25SZWNvcmRJbnB1dEZvY3Vz''@;'; put 'put ''ZWQiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgpLm9uUmVjb3JkSW5wdXRGb2N1cyhoKSl9KSgib25SZWNvcmRFZGl0Q2xvc2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuY2xvc2VSZWNvcmRFZGl0KCkpfSkoIm9uTmV4dFJlY29yZCIsZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gd3QoYSksQ3QoT2UoKS5vbk5leHRSZWNvcmQoKSl9KSgib25QcmV2aW91c1JlY29yZCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5vblByZXZpb3VzUmVjb3JkKCkpfSksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoKTtFZSgiY3VycmVudFJlY29yZCIsYS5jdXJyZW50RWRp''@;'; put 'put ''dFJlY29yZCkoInJlY29yZEFjdGlvbiIsYS5yZWNvcmRBY3Rpb24pKCJsaWJkcyIsYS5saWJkcykoInF1ZXJ5RmlsdGVyIixhLnF1ZXJ5RmlsdGVyKSgiZmlsdGVyIixhLmZpbHRlcikoInN1Ym1pdExvYWRpbmciLGEuc3VibWl0TG9hZGluZykoImhlYWRlclBrcyIsYS5oZWFkZXJQa3MpKCJj''@;'; put 'put ''ZWxsVmFsaWRhdGlvbiIsYS5jZWxsVmFsaWRhdGlvbikoImN1cnJlbnRSZWNvcmRJbmRleCIsYS5jdXJyZW50RWRpdFJlY29yZEluZGV4KSgiY3VycmVudFJlY29yZExvYWRpbmdzIixhLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3MpKCJjdXJyZW50UmVjb3JkRXJyb3JzIixhLmN1cnJlbnRF''@;'; put 'put ''ZGl0UmVjb3JkRXJyb3JzKSgiY3VycmVudFJlY29yZFZhbGlkYXRvciIsYS5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcil9fWZ1bmN0aW9uIEpTdChjLGwpezEmYyYmKGRlKDAsImRpdiIsNzQpLEd0KDEsInByb2dyZXNzIiksaGUoKSl9ZnVuY3Rpb24gUVN0KGMsbCl7aWYoMSZjKXtjb25z''@;'; put 'put ''dCBhPU9uKCk7ZGUoMCwiZGl2Iiw3NSkoMSwic3BhbiIsNzYpLEd0KDIsImNsci1pY29uIiw3NyksZGUoMywic3BhbiIsNzgpLFBlKDQsIkJhY2sgdG8gdGFibGUgc2VsZWN0aW9uIiksaGUoKSgpLGRlKDUsInNwYW4iLDc5KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0''@;'; put 'put ''KE9lKCkudmlld2JveE1hbmFnZXIoKSl9KSxHdCg2LCJjbHItaWNvbiIsODApLGRlKDcsInNwYW4iLDc4KSxQZSg4LCJWaWV3Ym94ZXMiKSxoZSgpKCkoKX0yJmMmJihmZSgpLEVlKCJyb3V0ZXJMaW5rIix0bCgxLFdTdCkpKX1mdW5jdGlvbiBlTXQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29u''@;'; put 'put ''Iiw4Nil9ZnVuY3Rpb24gdE10KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsODgpLFBlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgzKTtmZSgpLElyKCIgIixhLmRzTm90ZSwiICIpfX1mdW5jdGlvbiBuTXQoYyxsKXsxJmMmJihvaSgwKSxndCgxLHRNdCwyLDEs''@;'; put 'put ''ImNsci10b29sdGlwLWNvbnRlbnQiLDg3KSxzaSgpKX1mdW5jdGlvbiByTXQoYyxsKXtpZigxJmMmJihvaSgwKSxQZSgxKSxkbCgyLCJ0aG91c2FuZFNlcGFyYXRvciIpLHNpKCkpLDImYyl7Y29uc3QgYT1PZSgzKTtmZSgpLHNQKCIgKCIsWDcoMiw0LGEuZGF0YVNvdXJjZS5sZW5ndGgsIiwi''@;'; put 'put ''KSwiICIsMT09PWEuZGF0YVNvdXJjZS5sZW5ndGg/InJvdyI6InJvd3MiLCIsICIsYS5jb2xzLmxlbmd0aCwiIiwxPT09YS5jb2xzLmxlbmd0aD8iIGNvbCI6IiBjb2xzIiwiKSAiKX19ZnVuY3Rpb24gaU10KGMsbCl7MSZjJiYob2koMCksUGUoMSwiICgwIHJvd3MpICIpLHNpKCkpfWZ1bmN0''@;'; put 'put ''aW9uIGFNdChjLGwpe2lmKDEmYyYmKG9pKDApLGd0KDEsck10LDMsNywibmctY29udGFpbmVyIiwzOSkoMixpTXQsMiwwLCJuZy1jb250YWluZXIiLDM5KSxzaSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoKSxFZSgibmdJZiIsIWEuemVyb0ZpbHRlclJvd3MpLGZlKCksRWUoIm5nSWYiLGEu''@;'; put 'put ''emVyb0ZpbHRlclJvd3MpfX1mdW5jdGlvbiBvTXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJoNCIsODEpKDEsImNsci10b29sdGlwIikoMiwiY2xyLWljb24iLDgyKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuZGF0YXNldEluZm89ITApfSks''@;'; put 'put ''aGUoKSxndCgzLGVNdCwxLDAsImNsci1pY29uIiw4MyksZGUoNCwic3BhbiIsODQpLFBlKDUpLGRlKDYsImEiLDg1KSxQZSg3KSxoZSgpKCksZ3QoOCxuTXQsMiwwLCJuZy1jb250YWluZXIiLDM5KSxoZSgpLGd0KDksYU10LDMsMiwibmctY29udGFpbmVyIiwzOSksaGUoKX1pZigyJmMpe2Nv''@;'; put 'put ''bnN0IGE9bC5uZ1ZhcixkPU9lKCk7ZmUoMyksRWUoIm5nSWYiLGEudGFibGVOYW1lLmluY2x1ZGVzKCItRkMiKSksZmUoMiksSXIoIiAiLGEubGliTmFtZSwiLiIpLGZlKCksRWUoInJvdXRlckxpbmsiLCIvdmlldy9kYXRhLyIrZC5saWJkcyksZmUoKSxDcihhLnRhYmxlTmFtZS5yZXBsYWNl''@;'; put 'put ''KCItRkMiLCIiKSksZmUoKSxFZSgibmdJZiIsZC5kc05vdGUmJmQuZHNOb3RlLmxlbmd0aD4wKSxmZSgpLEVlKCJuZ0lmIixkLmRhdGFTb3VyY2UpfX1mdW5jdGlvbiBzTXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJidXR0b24iLDk1KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHd0KGEpLEN0KE9lKDMpLm9uU2hvd1VwbG9hZE1vZGFsKCkpfSksR3QoMSwiY2xyLWljb24iLDk2KSxkZSgyLCJzcGFuIiw3OCksUGUoMywiVXBsb2FkIiksaGUoKSgpfX1mdW5jdGlvbiBsTXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtvaSgwKSxkZSgxLCJidXR0b24iLDkw''@;'; put 'put ''KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDIpLm9wZW5RYigpKX0pLEd0KDIsImNsci1pY29uIiw5MSksZGUoMywic3BhbiIsNzgpLFBlKDQsIkZpbHRlciIpLGhlKCkoKSxkZSg1LCJidXR0b24iLDkyKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0''@;'; put 'put ''KGEpLEN0KE9lKDIpLmVkaXRUYWJsZSgpKX0pLEd0KDYsImNsci1pY29uIiw5MyksZGUoNywic3BhbiIsNzgpLFBlKDgsIkVkaXQiKSxoZSgpKCksZ3QoOSxzTXQsNCwwLCJidXR0b24iLDk0KSxzaSgpfWlmKDImYyl7Y29uc3QgYT1PZSgyKTtmZSg5KSxFZSgibmdJZiIsIWEuY29sdW1uTGV2''@;'; put 'put ''ZWxTZWN1cml0eUZsYWcpfX1mdW5jdGlvbiBjTXQoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiksUGUoMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKDQpO2ZlKCksWHUoIlRvIHVubG9jayBtb3JlIHRoYW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkLCIgIiwx''@;'; put 'put ''PT09YS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZD8icm93Ijoicm93cyIsIiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIil9fWZ1bmN0aW9uIHVNdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDg4KSxndCgxLGNNdCwy''@;'; put 'put ''LDIsInNwYW4iLDM5KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoKSxFZSgibmdJZiIsYS5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3cpfX1mdW5jdGlvbiBkTXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtvaSgwKSxkZSgxLCJidXR0b24iLDk3KSxPdCgiY2xpY2siLGZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDIpLmNhbmNlbEVkaXQoKSl9KSxHdCgyLCJjbHItaWNvbiIsOTgpLGRlKDMsInNwYW4iKSxQZSg0LCJDYW5jZWwiKSxoZSgpKCksZGUoNSwiY2xyLXRvb2x0aXAiKSg2LCJidXR0b24iLDk5KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29u''@;'; put 'put ''c3QgaD1PZSgyKTtyZXR1cm4gQ3QoaC5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3c/IiI6aC5hZGRSb3coKSl9KSxHdCg3LCJjbHItaWNvbiIsMTAwKSxQZSg4LCJBZGQgUm93ICIpLGhlKCksZ3QoOSx1TXQsMiwxLCJjbHItdG9vbHRpcC1jb250ZW50Iiw4NyksaGUoKSxkZSgxMCwiYnV0''@;'; put 'put ''dG9uIiw0NCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5jaGVja1NhdmUoKSl9KSxHdCgxMSwiY2xyLWljb24iLDEwMSksUGUoMTIsIlN1Ym1pdCAiKSxoZSgpLHNpKCl9aWYoMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDYpLHhyKCJkYy1sb2NrZWQtY29udHJv''@;'; put 'put ''bCIsYS5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3cpLEVlKCJjbHJMb2FkaW5nIixhLmFkZGluZ05ld1Jvdyl9fWZ1bmN0aW9uIGhNdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImJ1dHRvbiIsMTA1KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9l''@;'; put 'put ''KDMpLm1hbnVhbEZpbGVFZGl0TW9kYWw9ITApfSksR3QoMSwiY2xyLWljb24iLDkzKSxkZSgyLCJzcGFuIiksUGUoMywiRWRpdCIpLGhlKCkoKX19ZnVuY3Rpb24gZk10KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7b2koMCksZGUoMSwiYnV0dG9uIiwxMDIpLE90KCJjbGljayIsZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikuZGlzY2FyZFNvdXJjZUZpbGU9ITApfSksR3QoMiwiY2xyLWljb24iLDk4KSxkZSgzLCJzcGFuIiksUGUoNCwiRGlzY2FyZCBmaWxlIiksaGUoKSgpLGd0KDUsaE10LDQsMCwiYnV0dG9uIiwxMDMpLGRlKDYsImJ1dHRvbiIsMTA0KSxPdCgiY2xp''@;'; put 'put ''Y2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDIpLnN1Ym1pdEV4Y2VsKCkpfSksR3QoNywiY2xyLWljb24iLDEwMSksUGUoOCwiIFN1Ym1pdCAiKSxoZSgpLHNpKCl9aWYoMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDUpLEVlKCJuZ0lmIixhLmhvdFRhYmxlLnJlYWRPbmx5KSxmZSgp''@;'; put 'put ''LEVlKCJjbHJMb2FkaW5nIixhLnVwbG9hZExvYWRpbmcpfX1mdW5jdGlvbiBwTXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDg5KSxndCgxLGxNdCwxMCwxLCJuZy1jb250YWluZXIiLDM5KSgyLGRNdCwxMywzLCJuZy1jb250YWluZXIiLDM5KSgzLGZNdCw5LDIsIm5nLWNvbnRhaW5lciIs''@;'; put 'put ''MzkpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCksRWUoIm5nSWYiLGEuaG90VGFibGUucmVhZE9ubHkmJiFhLnVwbG9hZFByZXZpZXcpLGZlKCksRWUoIm5nSWYiLCFhLmhvdFRhYmxlLnJlYWRPbmx5JiYhYS51cGxvYWRQcmV2aWV3KSxmZSgpLEVlKCJuZ0lmIixhLnVwbG9hZFByZXZp''@;'; put 'put ''ZXcpfX1mdW5jdGlvbiBnTXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDEwNikoMSwic3BhbiIpLFBlKDIsIkZJTFRFUiA6ICIpLGRlKDMsImIiKSxQZSg0KSxoZSgpKCkoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoNCksQ3IoYS5xdWVyeVRleHQpfX1mdW5jdGlvbiBtTXQoYyxsKXsxJmMm''@;'; put 'put ''JihvaSgwKSxkZSgxLCJzcGFuIiwxMDkpLFBlKDIsIiBMb2FkaW5nLi4uICIpLGhlKCksZGUoMywiZGl2IiwxMTApKDQsInAiLDExMSksUGUoNSwiTG9hZGluZyB0YWJsZSIpLGhlKCkoKSxzaSgpKX1mdW5jdGlvbiB2TXQoYyxsKXsxJmMmJihvaSgwKSxkZSgxLCJzcGFuIiksR3QoMiwiY2xy''@;'; put 'put ''LWljb24iLDExMiksaGUoKSxkZSgzLCJkaXYiLDExMCkoNCwicCIsMTExKSxQZSg1LCJMb2FkaW5nIHRhYmxlIGVycm9yIiksaGUoKSgpLHNpKCkpfWZ1bmN0aW9uIHlNdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTA3KSgxLCJkaXYiLDEwOCksZ3QoMixtTXQsNiwwLCJuZy1jb250YWlu''@;'; put 'put ''ZXIiLDM5KSgzLHZNdCw2LDAsIm5nLWNvbnRhaW5lciIsMzkpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoMiksRWUoIm5nSWYiLCFhLmdldGRhdGFFcnJvciksZmUoKSxFZSgibmdJZiIsYS5nZXRkYXRhRXJyb3IpfX1mdW5jdGlvbiBiTXQoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFu''@;'; put 'put ''IiksUGUoMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKCksWHUoIlRvIHVubG9jayBtb3JlIHRoYW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkLCIgIiwxPT09YS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZD8icm93Ijoicm93''@;'; put 'put ''cyIsIiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIil9fWZ1bmN0aW9uIF9NdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDExNSksZ3QoMSxiTXQsMiwyLCJzcGFuIiwzOSksaGUoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKCksRWUoIm5nSWYi''@;'; put 'put ''LGEucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93KX19ZnVuY3Rpb24gd010KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRvb2x0aXAiKSgxLCJidXR0b24iLDExMyksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKTtyZXR1cm4gQ3QoaC5yZXN0''@;'; put 'put ''cmljdGlvbnMucmVzdHJpY3RBZGRSb3c/IiI6aC5hZGRSZWNvcmRCdXR0b25DbGljaygpKX0pLEd0KDIsImNsci1pY29uIiwxMDApLFBlKDMsIiBBZGQgUmVjb3JkICIpLGhlKCksZ3QoNCxfTXQsMiwxLCJjbHItdG9vbHRpcC1jb250ZW50IiwxMTQpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9l''@;'; put 'put ''KCk7ZmUoKSx4cigiZGMtbG9ja2VkLWNvbnRyb2wiLGEucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93KX19ZnVuY3Rpb24gQ010KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTE2KSxQZSgxKSxHdCgyLCJjb250YWN0LWxpbmsiKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLElyKCIg''@;'; put 'put ''VG8gZGlzcGxheSBtb3JlIHRoYW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkLCIgcm93cywgY29udGFjdCAiKX19ZnVuY3Rpb24gU010KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIsMTI4KSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoKSxY''@;'; put 'put ''dSgiT25seSAiLGEubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0LCIgIiwxPT09YS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQ/InJvdyI6InJvd3MiLCIgd2lsbCBiZSBzdWJtaXR0ZWQuIFRvIHJlbW92ZSB0aGUgcmVzdHJpY3Rpb24sIGNvbnRhY3Qg''@;'; put 'put ''c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpfX1mdW5jdGlvbiBNTXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDEyOSkoMSwiZGl2IiwxMzApKDIsImxhYmVsIiwxMzEpLFBlKDMsIk1lc3NhZ2UiKSxoZSgpLGRlKDQsInRleHRhcmVhIiwxMzIpLGNpKCJuZ01vZGVs''@;'; put 'put ''Q2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDIpO3JldHVybiBmaShmLm1lc3NhZ2UsaCl8fChmLm1lc3NhZ2U9aCksQ3QoaCl9KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7ZmUoNCksbGkoIm5nTW9kZWwiLGEubWVzc2FnZSksRWUoImRpc2FibGVkIiwhYS52''@;'; put 'put ''YWxpZGF0aW9uRG9uZSkoInZhbHVlIixhLnZhbGlkYXRpb25Eb25lPyIiOiJQbGVhc2Ugd2FpdCB3aGlsZSB3ZSB2YWxpZGF0ZSAiK2EuY29scy5sZW5ndGgqYS5tb2RpZmVkUm93c0luZGV4ZXMubGVuZ3RoKyIgY2VsbHMuIil9fWZ1bmN0aW9uIHhNdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1P''@;'; put 'put ''bigpO2RlKDAsImRpdiIsMTE3KSgxLCJkaXYiLDExOCkoMiwiZGl2IiwxMTkpKDMsImRpdiIsMTIwKSg0LCJidXR0b24iLDEyMSksR3QoNSwiY2xyLWljb24iLDEyMiksaGUoKSxkZSg2LCJoMyIsOCksUGUoNyksaGUoKSgpLGRlKDgsImRpdiIsOSksZ3QoOSxTTXQsMiwyLCJzcGFuIiwxMjMp''@;'; put 'put ''KDEwLE1NdCw1LDMsImRpdiIsMTI0KSxoZSgpLGRlKDExLCJkaXYiLDEyNSkoMTIsImJ1dHRvbiIsMTI2KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpO3JldHVybiBDdChoLnNhdmVUYWJsZShoLmhvdFRhYmxlLmRhdGEpKX0pLFBlKDEzLCIgU3VibWl0ICIpLGhl''@;'; put 'put ''KCksZGUoMTQsImJ1dHRvbiIsMTI3KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpO3JldHVybiBoLmNhbmNlbFN1Ym1pdCgpLGguc3VibWl0PSExLEN0KGgudmFsaWRhdGlvbkRvbmU9MCl9KSxQZSgxNSwiIENhbmNlbCAiKSxoZSgpKCkoKSgpKCl9aWYoMiZjKXtj''@;'; put 'put ''b25zdCBhPU9lKCk7ZmUoNyksazMoIiBTdWJtaXQgZm9yIEFwcHJvdmFsICgiLGEucm93c0NoYW5nZWQucm93c0FkZGVkLCIgYWRkZWQsICIsYS5yb3dzQ2hhbmdlZC5yb3dzVXBkYXRlZCwiIHVwZGF0ZWQsICIsYS5yb3dzQ2hhbmdlZC5yb3dzRGVsZXRlZCwiIGRlbGV0ZWQpICIpLGZlKDIp''@;'; put 'put ''LEVlKCJuZ0lmIixhLnRvdGFsUm93c0NoYW5nZWQ+YS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQmJmEubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0IT09YS5JbmZpbml0eSksZmUoKSxFZSgibmdJZiIsYS50YWJsZVRydWUpLGZlKDIpLEVlKCJkaXNh''@;'; put 'put ''YmxlZCIsIWEudmFsaWRhdGlvbkRvbmUpfX1mdW5jdGlvbiBFTXQoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiwxMzMpLFBlKDEpLGRsKDIsInBrU3BhY2VTZXBhcmF0ZSIpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPU9lKCk7ZmUoKSxYdSgiIE9uIHJvdyAiLGErMSwiOiAi''@;'; put 'put ''LGpjKDIsMixkLnBrRmllbGRzW2FdLnJlcGxhY2UoInwiLCIiKSksIiAiKX19ZnVuY3Rpb24gVE10KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIpLFBlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLGszKCIgIixhLmNvbCwiKCIsYS5sZW4sIiksICIsYS52YWwsIiAiKX19''@;'; put 'put ''ZnVuY3Rpb24gQU10KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2IiwxMzQpKDEsImRpdiIsMTM1KSgyLCJkaXYiLDExOSkoMywiZGl2IiwxMjApKDQsImJ1dHRvbiIsMTIxKSxHdCg1LCJjbHItaWNvbiIsMTIyKSxoZSgpLGRlKDYsImgzIiw4KSxQZSg3LCJFcnJvciIpLGhl''@;'; put 'put ''KCkoKSxkZSg4LCJkaXYiLDkpKDksInAiKSxQZSgxMCwiWW91IGNhbm5vdCBzdWJtaXQgZW1wdHkgY2xhdXNlcyIpLGhlKCkoKSxkZSgxMSwiZGl2IiwyMykoMTIsImJ1dHRvbiIsNDQpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5udWxsVmFyaWFibGVzPSEx''@;'; put 'put ''KX0pLFBlKDEzLCIgT2sgIiksaGUoKSgpKCkoKSgpfX1mdW5jdGlvbiBrTXQoYyxsKXsxJmMmJkd0KDAsImFwcC1xdWVyeSIsbnVsbCw1KX1mdW5jdGlvbiBETXQoYyxsKXsxJmMmJihkZSgwLCJwIiwxMzYpLFBlKDEsIiBTb3JyeSB0aGF0IGRpZG4ndCB3b3JrLCB0cnkgYWdhaW4uICIpLGhl''@;'; put 'put ''KCkpfWxldCBCaj0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLmNudD0wfXN0YXRpY3t0aGlzLm5vblBrQ250PTB9c3RhdGlje3RoaXMubGFzdENlbGw9MH11cGRhdGVIb3RUYWJsZVNldHRpbmdzKCl7dGhpcy5ob3RUYWJsZVNldHRpbmdzPXtjb2xIZWFkZXJzOnRoaXMuaG90VGFibGUuY29s''@;'; put 'put ''SGVhZGVycyxjb2x1bW5zOnRoaXMuaG90VGFibGUuY29sdW1ucyxoZWlnaHQ6dGhpcy5ob3RUYWJsZS5oZWlnaHQsbGljZW5zZUtleTp0aGlzLmhvdFRhYmxlLmxpY2Vuc2VLZXkscmVhZE9ubHk6dGhpcy5ob3RUYWJsZS5yZWFkT25seSxjb3B5UGFzdGU6dGhpcy5ob3RUYWJsZS5jb3B5UGFz''@;'; put 'put ''dGUsY29udGV4dE1lbnU6ITB9fWNvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQsVSx0ZSxvZSl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5sb2dnZXJTZXJ2aWNlPWgsdGhpcy5zYXNTdG9yZVNlcnZpY2U9Zix0aGlzLmhlbHBlclNlcnZpY2U9dix0aGlz''@;'; put 'put ''LnJvdXRlcj1NLHRoaXMucm91dGU9RCx0aGlzLnNhc1NlcnZpY2U9VSx0aGlzLmNkZj10ZSx0aGlzLnNwcmVhZHNoZWV0U2VydmljZT1vZSx0aGlzLnVwbG9hZFN0YXRlckNvbXBMaXN0PW5ldyBEZyx0aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3Q9bmV3IERnLHRoaXMuZmlsZVVwbG9hZElucHV0''@;'; put 'put ''Q29tcExpc3Q9bmV3IERnLHRoaXMubWVzc2FnZT0iIix0aGlzLiRkYXRhRm9ybWF0cz1udWxsLHRoaXMuY29scz1bXSx0aGlzLnJlc3RyaWN0aW9ucz17fSx0aGlzLmRhdGFzZXRJbmZvPSExLHRoaXMuZHNtZXRhPVtdLHRoaXMudmVyc2lvbnM9W10sdGhpcy5kc05vdGU9IiIsdGhpcy52aWV3''@;'; put 'put ''Ym94ZXM9ITEsdGhpcy5JbmZpbml0eT0xLzAsdGhpcy5ob3RUYWJsZVNldHRpbmdzPXt9LHRoaXMuaG90VGFibGU9e2RhdGE6W10sY29sSGVhZGVyczpbXSxoaWRkZW46ITAsY29sdW1uczpbXSxoZWlnaHQ6ImNhbGMoMTAwdmggLSAxNjBweCkiLGxpY2Vuc2VLZXk6dm9pZCAwLHJlYWRPbmx5''@;'; put 'put ''OiEwLGNvcHlQYXN0ZTp7Y29weUNvbHVtbkhlYWRlcnM6ITAsY29weUNvbHVtbkhlYWRlcnNPbmx5OiEwfSxzZXR0aW5nczp7Y29udGV4dE1lbnU6e2l0ZW1zOntlZGl0X3Jvdzp7bmFtZToiRWRpdCByb3ciLGhpZGRlbigpe2NvbnN0IEZlPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpO2lmKCFG''@;'; put 'put ''ZSlyZXR1cm4hMTtjb25zdCBXZT1GZVswXTtyZXR1cm4gV2UuZnJvbS5yb3chPT1XZS50by5yb3d9LGNhbGxiYWNrOih3ZSxGZSxXZSk9Pntjb25zdCBudD1GZVswXTtudC5zdGFydC5yb3c9PT1udC5lbmQucm93JiZ0aGlzLmVkaXRSZWNvcmQobnVsbCxudC5zdGFydC5yb3cpfX0scm93X2Fi''@;'; put 'put ''b3ZlOntuYW1lOiJJbnNlcnQgUm93IGFib3ZlIixjYWxsYmFjazood2UsRmUsV2UpPT57dGhpcy5pbnNlcnRSb3dBdFBvc2l0aW9uKEZlWzBdLnN0YXJ0LnJvdyl9fSxyb3dfYmVsb3c6e25hbWU6Ikluc2VydCBSb3cgYmVsb3ciLGNhbGxiYWNrOih3ZSxGZSxXZSk9Pnt0aGlzLmluc2VydFJv''@;'; put 'put ''d0F0UG9zaXRpb24oRmVbMF0uc3RhcnQucm93KzEpfX0scmVtb3ZlX3Jvdzp7bmFtZToiSWdub3JlIHJvdyJ9LGNvcHk6e25hbWU6IkNvcHkgd2l0aG91dCBoZWFkZXJzIn0sY29weV93aXRoX2NvbHVtbl9oZWFkZXJzOntuYW1lOiJDb3B5IHdpdGggaGVhZGVycyJ9LGNvcHlfY29sdW1uX2hl''@;'; put 'put ''YWRlcnNfb25seTp7bmFtZToiQ29weSBoZWFkZXJzIG9ubHkifSxzcDE6e25hbWU6Ii0tLS0tLS0tLSJ9LHVuZG86e25hbWU6IlVuZG8ifSxyZWRvOntuYW1lOiJSZWRvIn19fX19LHRoaXMuaG90Q2VsbHNQcm9wUm93PW51bGwsdGhpcy5maWx0ZXI9ITEsdGhpcy5zdWJtaXRMb2FkaW5nPSEx''@;'; put 'put ''LHRoaXMudXBsb2FkTG9hZGluZz0hMSx0aGlzLnJvd3NDaGFuZ2VkPXtyb3dzVXBkYXRlZDowLHJvd3NEZWxldGVkOjAscm93c0FkZGVkOjB9LHRoaXMubW9kaWZlZFJvd3NJbmRleGVzPVtdLHRoaXMucXVlcnlFcnI9ITEsdGhpcy5zdWNjZXNzRW5hYmxlPSExLHRoaXMubnVsbFZhcmlhYmxl''@;'; put 'put ''cz0hMSx0aGlzLnBrRmllbGRzPVtdLHRoaXMuZmlsZW5hbWU9IiIsdGhpcy5zdWJtaXRMaW1pdE5vdGljZT0hMSx0aGlzLmJhZEVkaXQ9ITEsdGhpcy5zYXZlTG9hZGluZz0hMSx0aGlzLmFwcHJvdmVycz1bXSx0aGlzLmVyclZhbGlkYXRpb249ITEsdGhpcy5wa051bGw9ITEsdGhpcy5ub1Br''@;'; put 'put ''TnVsbD0hMSx0aGlzLnRhYmxlRGF0YT1bXSx0aGlzLnF1ZXJ5VGV4dD0iIix0aGlzLnF1ZXJ5VGV4dFNhdmVkPSIiLHRoaXMuc2hvd0FwcHJvdmVycz0hMSx0aGlzLnBrRHVwcz0hMSx0aGlzLnZhbGlkYXRpb25Eb25lPTAsdGhpcy5kdXBsaWNhdGVQa0luZGV4ZXM9W10sdGhpcy5jb2x1bW5I''@;'; put 'put ''ZWFkZXI9W10sdGhpcy5zcGVjSW5mbz1bXSx0aGlzLnRvb0xvbmc9ITEsdGhpcy5leGNlZWRDZWxscz1bXSx0aGlzLnVwbG9hZGVyPW5ldyBlYWUsdGhpcy51cGxvYWRVcmw9IiIsdGhpcy5leGNlbEZpbGVSZWFkeT0hMSx0aGlzLnVwbG9hZFByZXZpZXc9ITEsdGhpcy5leGNlbEZpbGVQYXJz''@;'; put 'put ''aW5nPSExLHRoaXMuZXhjZWxVcGxvYWRTdGF0ZT1udWxsLHRoaXMuZGF0YT1bXSx0aGlzLmhlYWRlckFycmF5PVtdLHRoaXMuaG90RGF0YVNjaGVtYT17fSx0aGlzLmhlYWRlclNob3c9W10sdGhpcy5oZWFkZXJWaXNpYmxlPSExLHRoaXMuaGFzQmFzZURyb3Bab25lT3Zlcj0hMSx0aGlzLmhh''@;'; put 'put ''c0Fub3RoZXJEcm9wWm9uZU92ZXI9ITEsdGhpcy5oZWFkZXJQa3M9W10sdGhpcy5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZz0hMSx0aGlzLmRhdGVUaW1lSGVhZGVycz1bXSx0aGlzLnRpbWVIZWFkZXJzPVtdLHRoaXMuZGF0ZUhlYWRlcnM9W10sdGhpcy54bFJ1bGVzPVtdLHRoaXMuZW5jb2Rp''@;'; put 'put ''bmc9IlVURi04Iix0aGlzLmhlYWRlckNvbHVtbnM9W10sdGhpcy5jZWxsVmFsaWRhdGlvbj1bXSx0aGlzLmZpbGVQYXNzd29yZFN1YmplY3Q9bmV3IHVyLHRoaXMuZmlsZVVubG9ja0Vycm9yPSExLHRoaXMuZmlsZVBhc3N3b3JkTW9kYWw9ITEsdGhpcy5zaG93VXBsb2FkTW9kYWw9ITEsdGhp''@;'; put 'put ''cy5kaXNjYXJkU291cmNlRmlsZT0hMSx0aGlzLm1hbnVhbEZpbGVFZGl0TW9kYWw9ITEsdGhpcy5yZWNvcmRBY3Rpb249bnVsbCx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3M9W10sdGhpcy5jdXJyZW50RWRpdFJlY29yZEVycm9ycz1bXSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5k''@;'; put 'put ''ZXg9LTEsdGhpcy5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nPSExLHRoaXMuZ2VuZXJhdGVkUmVjb3JkVXJsPW51bGwsdGhpcy5hZGRSZWNvcmRVcmw9bnVsbCx0aGlzLnJlY29yZE5ld09yUGtNb2RpZmllZD0hMSx0aGlzLmFkZFJlY29yZExvYWRpbmc9ITEsdGhpcy5zaW5nbGVSb3dT''@;'; put 'put ''ZWxlY3RlZD0hMSx0aGlzLmFkZGluZ05ld1Jvdz0hMSx0aGlzLmdldGRhdGFFcnJvcj0hMSx0aGlzLnplcm9GaWx0ZXJSb3dzPSExLHRoaXMudGFibGVGaWxlRHJhZ092ZXI9ITEsdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZT1bXSx0aGlzLnZhbGlkYXRpb25UYWJsZUxpbWl0PTIwLHRoaXMu''@;'; put 'put ''ZXh0ZW5kZWRDZWxsVmFsaWRhdGlvbkZpZWxkcz17RElTUExBWV9JTkRFWDowLEVYVFJBX0NPTF9OQU1FOjEsRElTUExBWV9WQUxVRToyLERJU1BMQVlfVFlQRTozLFJBV19WQUxVRV9OVU06NCxSQVdfVkFMVUVfQ0hBUjo1LEZPUkNFX0ZMQUc6Nn0sdGhpcy5jZWxsVmFsaWRhdGlvbkZpZWxk''@;'; put 'put ''cz17RElTUExBWV9JTkRFWDowLERJU1BMQVlfVkFMVUU6MSxSQVdfVkFMVUU6Mn0sdGhpcy5kaXNhYmxlZEJhc2ljRHluYW1pY0NlbGxWYWxpZGF0aW9uTWFwPVtdLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMudGltZXNDbGlja2VkPTAs''@;'; put 'put ''cmFlW3dpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2VdJiZVNi5yZWdpc3Rlckxhbmd1YWdlKHJhZVt3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlXSksdGhpcy5wYXJzZVJlc3RyaWN0aW9ucygpLHRoaXMuc2V0UmVzdHJpY3Rpb25zKCl9cGFyc2VSZXN0cmljdGlvbnMoKXt0aGlzLnJlc3RyaWN0''@;'; put 'put ''aW9ucy5yZXN0cmljdEFkZFJlY29yZD0hMT09PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmFkZFJlY29yZCx0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEVkaXRSZWNvcmQ9ITE9PT10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0UmVjb3JkLHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0''@;'; put 'put ''RmlsZVVwbG9hZD0hMT09PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmZpbGVVcGxvYWR9c2V0UmVzdHJpY3Rpb25zKGEpe2EmJih0aGlzLnJlc3RyaWN0aW9ucz17Li4udGhpcy5yZXN0cmljdGlvbnMsLi4uYX0pLHRoaXMucmVzdHJpY3Rpb25zLnJlbW92ZUVkaXRSZWNvcmRCdXR0b24mJmRl''@;'; put 'put ''bGV0ZSh0aGlzLmhvdFRhYmxlPy5zZXR0aW5ncz8uY29udGV4dE1lbnUpLml0ZW1zLmVkaXRfcm93LHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93JiYoZGVsZXRlKHRoaXMuaG90VGFibGU/LnNldHRpbmdzPy5jb250ZXh0TWVudSkuaXRlbXMucm93X2Fib3ZlLGRlbGV0ZSh0aGlz''@;'; put 'put ''LmhvdFRhYmxlPy5zZXR0aW5ncz8uY29udGV4dE1lbnUpLml0ZW1zLnJvd19iZWxvdyxkZWxldGUodGhpcy5ob3RUYWJsZT8uc2V0dGluZ3M/LmNvbnRleHRNZW51KS5pdGVtcy5yZW1vdmVfcm93KX1jaGVja1Jvd0xpbWl0KCl7dGhpcy5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZ3x8dGhpcy5s''@;'; put 'put ''aWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCE9PTEvMCYmKHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93PXRoaXMuZGF0YVNvdXJjZT8ubGVuZ3RoPj10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkKX1yZXNldEZpbHRlcigpe3Ro''@;'; put 'put ''aXMucXVlcnlGaWx0ZXJDb21wTGlzdC5maXJzdCYmdGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0LmZpcnN0LnJlc2V0RmlsdGVyKCl9b25TaG93VXBsb2FkTW9kYWwoKXt0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEZpbGVVcGxvYWQ/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0RlbW9MaW1pdE1v''@;'; put 'put ''ZGFsKCJGaWxlIFVwbG9hZCIpOnRoaXMuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWc/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiSW5mb3JtYXRpb24iLCJVcGxvYWQgZmVhdHVyZSBpcyBkaXNhYmxlZCB3aGlsZSBDb2x1bW4gTGV2ZWwgU2VjdXJpdHkgcnVsZXMgYXJlIGFjdGl2''@;'; put 'put ''ZSIpOnRoaXMudXBsb2FkUHJldmlld3x8KHRoaXMuc2hvd1VwbG9hZE1vZGFsPSEwKX1maWxlT3ZlckJhc2UoYSl7dGhpcy5oYXNCYXNlRHJvcFpvbmVPdmVyPWF9YXR0YWNoRmlsZShhLGQ9ITEpe3ZhciBoPXRoaXM7Y29uc3QgZj1kP2FbMF06YS50YXJnZXQuZmlsZXNbMF07dGhpcy5leGNl''@;'; put 'put ''bFVwbG9hZFN0YXRlPSJMb2FkaW5nIix0aGlzLmV4Y2VsRmlsZVBhcnNpbmc9ITAsdGhpcy5leGNlbEZpbGVSZWFkeT0hMSx0aGlzLmZpbGVuYW1lPWYubmFtZSx0aGlzLnNwcmVhZHNoZWV0U2VydmljZS5wYXJzZUV4Y2VsRmlsZSh7ZmlsZTpmLHVwbG9hZGVyOnRoaXMudXBsb2FkZXIsZGNW''@;'; put 'put ''YWxpZGF0b3I6dGhpcy5kY1ZhbGlkYXRvcixoZWFkZXJQa3M6dGhpcy5oZWFkZXJQa3MsaGVhZGVyQXJyYXk6dGhpcy5oZWFkZXJBcnJheSxoZWFkZXJTaG93OnRoaXMuaGVhZGVyU2hvdyx0aW1lSGVhZGVyczp0aGlzLnRpbWVIZWFkZXJzLGRhdGVIZWFkZXJzOnRoaXMuZGF0ZUhlYWRlcnMs''@;'; put 'put ''ZGF0ZVRpbWVIZWFkZXJzOnRoaXMuZGF0ZVRpbWVIZWFkZXJzLHhsUnVsZXM6dGhpcy54bFJ1bGVzLGVuY29kaW5nOnRoaXMuZW5jb2Rpbmd9LHY9Pnt0aGlzLmFwcGVuZFVwbG9hZFN0YXRlKHYpfSx2PT57dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiVGFibGUgRm91bmQiLHYp''@;'; put 'put ''fSkudGhlbihmdW5jdGlvbigpe3ZhciB2PWVlKGZ1bmN0aW9uKihNKXtNJiYoaC5leGNlbEZpbGVSZWFkeT0hMCxoLnVwbG9hZGVyPU0udXBsb2FkZXIsTS5kYXRhJiZNLmhlYWRlclNob3c/KGguZGF0YT1NLmRhdGEsaC5oZWFkZXJTaG93PU0uaGVhZGVyU2hvdyxoLmdldFBlbmRpbmdFeGNl''@;'; put 'put ''bFByZXZpZXcoKSk6eWllbGQgaC51cGxvYWRQYXJzZWRGaWxlcygpKX0pO3JldHVybiBmdW5jdGlvbihNKXtyZXR1cm4gdi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKS5jYXRjaCh2PT57dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCx2LG51bGwpLHRoaXMuc2hvd1Vw''@;'; put 'put ''bG9hZE1vZGFsPSExLHRoaXMudXBsb2FkUHJldmlldz0hMSxzZXRUaW1lb3V0KCgpPT57dGhpcy5maWxlbmFtZT0iIn0pfSkuZmluYWxseSgoKT0+e3RoaXMuZXhjZWxGaWxlUGFyc2luZz0hMX0pfXN1Ym1pdEV4Y2VsKCl7dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGlt''@;'; put 'put ''aXQ9PT0xLzA/dGhpcy51cGxvYWRQYXJzZWRGaWxlcygpOnRoaXMuc3VibWl0TGltaXROb3RpY2U9ITB9dXBsb2FkUGFyc2VkRmlsZXMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtpZihhLmNoZWNrSW52YWxpZCgpKXJldHVybiB2b2lkIGEuZXZlbnRTZXJ2aWNlLnNob3dB''@;'; put 'put ''Ym9ydE1vZGFsKG51bGwsIkludmFsaWQgdmFsdWVzIGFyZSBwcmVzZW50LiIpO2lmKGEudmFsaWRhdGVQcmltYXJ5S2V5cygpLDAhPT1hLmR1cGxpY2F0ZVBrSW5kZXhlcy5sZW5ndGgpcmV0dXJuIGEucGtEdXBzPSEwLHZvaWQoYS5zdWJtaXQ9ITEpO2EucGtEdXBzPSExLGEudXBsb2FkTG9h''@;'; put 'put ''ZGluZz0hMDtjb25zdCBkPVtdO2Zvcihjb25zdCBoIG9mIGEudXBsb2FkZXIucXVldWUpZC5wdXNoKHtmaWxlOmgsZmlsZU5hbWU6aC5uYW1lfSk7eWllbGQgYS5zYXNTZXJ2aWNlLnVwbG9hZEZpbGUoYS51cGxvYWRVcmwsZCx7dGFibGU6YS5saWJkc30pLnRoZW4oaD0+e2lmKHR5cGVvZiBo''@;'; put 'put ''LmFkYXB0ZXJSZXNwb25zZS5zYXNqc0Fib3J0PiJ1Iil7aWYodHlwZW9mIGguYWRhcHRlclJlc3BvbnNlLnNhc3BhcmFtcz4idSIpcmV0dXJuO3thLnVwbG9hZExvYWRpbmc9ITE7Y29uc3QgZj1oLmFkYXB0ZXJSZXNwb25zZS5zYXNwYXJhbXNbMF07YS5zdWNjZXNzRW5hYmxlPSEwLGEudGFi''@;'; put 'put ''bGVJZD1mLkRTSUQsYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrYS50YWJsZUlkKX19ZWxzZXtjb25zdCBmPWguYWRhcHRlclJlc3BvbnNlLHY9Zi5zYXNqc0Fib3J0WzBdLk1TRyxNPWYuc2FzanNBYm9ydFswXS5NQUM7YS51cGxvYWRMb2FkaW5nPSExLGEuZmlsZW5hbWU9IiIs''@;'; put 'put ''YS5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKGEuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC52YWx1ZT0iIiksYS51cGxvYWRlci5xdWV1ZT1bXSxhLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiIix2LHtTWVNXQVJOSU5HVEVYVDpmLlNZ''@;'; put 'put ''U1dBUk5JTkdURVhULFNZU0VSUk9SVEVYVDpmLlNZU0VSUk9SVEVYVCxNQUM6TX0pfX0saD0+e2EudXBsb2FkTG9hZGluZz0hMSxhLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0JiYoYS5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LnZhbHVlPSIiKSxh''@;'; put 'put ''LnVwbG9hZGVyLnF1ZXVlPVtdLGEuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiZmlsZSB1cGxvYWQiLGguYWRhcHRlclJlc3BvbnNlKX0pfSkoKX1nZXRQZW5kaW5nRXhjZWxQcmV2aWV3KCl7dGhpcy5xdWVyeVRleHRTYXZlZD10aGlzLnF1ZXJ5VGV4dCx0aGlzLnF1ZXJ5VGV4''@;'; put 'put ''dD0iIix0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9IlBhcnNpbmciLHRoaXMudG9nZ2xlSG90UGx1Z2luKCJjb250ZXh0TWVudSIsITEpO2NvbnN0IGE9W107dGhpcy5kYXRhLm1hcChoPT57Y29uc3QgZj17fTt0aGlzLmhlYWRlclNob3cubWFwKCh2LE0pPT57Zlt2XT1oW01dfSksZi5fX19fX0RF''@;'; put 'put ''TEVURV9fVEhJU19fUkVDT1JEX19fX198fChmLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXz0iTm8iKSxhLnB1c2goZil9KSx0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2UpLHRoaXMuZGF0YVNvdXJjZT1h''@;'; put 'put ''LHRoaXMuaG90VGFibGUuZGF0YT1hO2NvbnN0IGQ9dGhpcy5ob3RJbnN0YW5jZTt0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9IlZhbGlkYXRpbmctSE9UIixkLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZSxtYXhSb3dzOjEvMH0sITEpLGQucmVuZGVyKCksdGhpcy5hcHBlbmRV''@;'; put 'put ''cGxvYWRTdGF0ZSgiVmFsaWRhdGluZyByb3dzIiksZC52YWxpZGF0ZUNlbGxzKCgpPT57dGhpcy5zaG93VXBsb2FkTW9kYWw9ITEsdGhpcy51cGxvYWRQcmV2aWV3PSEwLHRoaXMuZXhjZWxGaWxlUGFyc2luZz0hMSx0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9bnVsbH0pfWRpc2NhcmRQZW5kaW5n''@;'; put 'put ''RXhjZWwoYSl7dGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7bWF4Um93czp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkfSksYSYmdGhpcy5jYW5jZWxFZGl0KCksdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKHRoaXMuZmlsZVVw''@;'; put 'put ''bG9hZElucHV0Q29tcExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC52YWx1ZT0iIiksdGhpcy51cGxvYWRQcmV2aWV3PSExLHRoaXMuZXhjZWxGaWxlUmVhZHk9ITEsdGhpcy51cGxvYWRlci5xdWV1ZT1bXSxpc05hTihwYXJzZUludCh0aGlzLnJvdXRlci51cmwuc3BsaXQoIi8iKS5wb3AoKXx8''@;'; put 'put ''IiIpKXx8dGhpcy5xdWVyeVRleHRTYXZlZC5sZW5ndGg+MCYmKHRoaXMucXVlcnlUZXh0PXRoaXMucXVlcnlUZXh0U2F2ZWQsdGhpcy5xdWVyeVRleHRTYXZlZD0iIil9cHJldmlld1RhYmxlRWRpdENvbmZpcm0oKXt0aGlzLmRpc2NhcmRQZW5kaW5nRXhjZWwoKSx0aGlzLmNvbnZlcnRUb0Nv''@;'; put 'put ''cnJlY3RUeXBlcyh0aGlzLmRhdGFTb3VyY2UpLHRoaXMuZWRpdFRhYmxlKCEwKX1hcHBlbmRVcGxvYWRTdGF0ZShhLGQ9ITEpe3RoaXMuY2RmLmRldGVjdENoYW5nZXMoKSx0aGlzLnVwbG9hZFN0YXRlckNvbXBMaXN0LmZpcnN0JiYoZD90aGlzLnVwbG9hZFN0YXRlckNvbXBMaXN0LmZpcnN0''@;'; put 'put ''LnJlcGxhY2VMYXN0U3RhdGUoYSk6dGhpcy51cGxvYWRTdGF0ZXJDb21wTGlzdC5maXJzdC5hcHBlbmRTdGF0ZShhKSl9aXNDb2xQayhhKXtyZXR1cm4gdGhpcy5oZWFkZXJQa3MuaW5kZXhPZihhKT4tMX1pc1JlYWRvbmx5Q29sKGEpe3JldHVybiB0aGlzLmRjVmFsaWRhdG9yPy5nZXRSdWxl''@;'; put 'put ''KGEpPy5yZWFkT25seX1pc0NvbEhlYWRlcihhKXtyZXR1cm4gdGhpcy5oZWFkZXJBcnJheS5pbmRleE9mKGEudG9VcHBlckNhc2UoKSk+LTF9cmVtb3ZlUXVlcnkoKXt0aGlzLnNhc1N0b3JlU2VydmljZS5yZW1vdmVDbGF1c2UoKX1zZW5kQ2xhdXNlKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUo''@;'; put 'put ''ZnVuY3Rpb24qKCl7YS5zdWJtaXRMb2FkaW5nPSEwO2xldCBkPVtdO2NvbnN0IGg9W107aWYodHlwZW9mIGEuY2xhdXNlcz4idSIpcmV0dXJuIGEubnVsbFZhcmlhYmxlcz0hMCx2b2lkKGEuc3VibWl0TG9hZGluZz0hMSk7e2NvbnN0IGY9YS5jbGF1c2VzLnF1ZXJ5T2JqO2lmKGZbMF0uZWxl''@;'; put 'put ''bWVudHMubGVuZ3RoPDEpcmV0dXJuKCJob21lIj09PVhuLnJvb3RQYXJhbXx8ImVkaXRvciI9PT1Ybi5yb290UGFyYW0pJiYoWG4uZWRpdG9yLmZpbHRlci5jbGF1c2VzPVtdLFhuLmVkaXRvci5maWx0ZXIucXVlcnk9W10sWG4uZWRpdG9yLmZpbHRlci5ncm91cExvZ2ljPSIiKSx2b2lkIGEu''@;'; put 'put ''cm91dGVyLm5hdmlnYXRlKFsiL2VkaXRvci8iK2EubGliZHNdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KTtmb3IobGV0IHY9MDt2PGYubGVuZ3RoO3YrKyl7Y29uc3QgTT1mW3ZdLmVsZW1lbnRzO2Q9TS5maWx0ZXIoZnVuY3Rpb24oRCl7cmV0dXJuIG51bGw9PT1ELnZhcmlh''@;'; put 'put ''YmxlfSksZC5sZW5ndGgmJmgucHVzaChNKX19aWYoaC5sZW5ndGgpcmV0dXJuIGEubnVsbFZhcmlhYmxlcz0hMCx2b2lkKGEuc3VibWl0TG9hZGluZz0hMSk7dHJ5e2lmKHZvaWQgMCE9PWEuY2xhdXNlcyYmYS5saWJkcyl7Y29uc3QgZj17Z3JvdXBMb2dpYzphLmNsYXVzZXMuZ3JvdXBMb2dp''@;'; put 'put ''YyxmaWx0ZXJHcm91cHM6W119O2EuY2xhdXNlcy5xdWVyeU9iai5mb3JFYWNoKE09Pntjb25zdCBEPXtmaWx0ZXJDbGF1c2VzOltdfTtNLmVsZW1lbnRzLmZvckVhY2goVT0+e0QuZmlsdGVyQ2xhdXNlcy5wdXNoKGEuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoVSkpfSksRC5jbGF1c2VMb2dp''@;'; put 'put ''Yz1NLmNsYXVzZUxvZ2ljLGYuZmlsdGVyR3JvdXBzLnB1c2goYS5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShEKSl9KTtjb25zdCB2PWEuc2FzU3RvcmVTZXJ2aWNlLmNyZWF0ZUZpbHRlclF1ZXJ5VGFibGUoZik7eWllbGQgYS5zYXNTdG9yZVNlcnZpY2Uuc2F2ZVF1ZXJ5KGEubGliZHMsdiku''@;'; put 'put ''dGhlbihNPT57YS5xdWVyeUZpbHRlcj17aWQ6TS5yZXN1bHRbMF0uRklMVEVSX1JLLHRhYmxlOk0ucmVzdWx0WzBdLkZJTFRFUl9UQUJMRX0sYS5yb3V0ZXIubmF2aWdhdGUoWyIvIl0se3NraXBMb2NhdGlvbkNoYW5nZTohMCxxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KS50aGVu''@;'; put 'put ''KCgpPT5hLnJvdXRlci5uYXZpZ2F0ZShbIi9lZGl0b3IvIithLnF1ZXJ5RmlsdGVyLnRhYmxlKyIvIithLnF1ZXJ5RmlsdGVyLmlkXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSkpLGEuZmlsdGVyPSExfSkuY2F0Y2goTT0+e2Euc3VibWl0TG9hZGluZz0hMX0pfX1jYXRjaChm''@;'; put 'put ''KXthLnF1ZXJ5RXJyPSEwLGEuc3VibWl0TG9hZGluZz0hMSxhLnF1ZXJ5RXJyTWVzc2FnZT1mfX0pKCl9b3BlblFiKCl7dGhpcy5saWJkcyYmKHRoaXMuZmlsdGVyPSEwLHRoaXMuY2RmLmRldGVjdENoYW5nZXMoKSx0aGlzLnN1Ym1pdExvYWRpbmc9ITEsdGhpcy5zYXNTdG9yZVNlcnZpY2Uu''@;'; put 'put ''c2V0UXVlcnlWYXJpYWJsZXModGhpcy5saWJkcyx0aGlzLmNvbHMpKX1lZGl0VGFibGUoYSxkKXt0aGlzLnRvZ2dsZUhvdFBsdWdpbigiY29udGV4dE1lbnUiLCEwKTtjb25zdCBoPXRoaXMuaG90SW5zdGFuY2UsZj1oLmdldFBsdWdpbigibXVsdGlDb2x1bW5Tb3J0aW5nIiksdj1mLmdldFNv''@;'; put 'put ''cnRDb25maWcoKSxNPUFycmF5LmlzQXJyYXkodik/djpbdl07c2V0VGltZW91dCgoKT0+e2F8fCh0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2UpLGQmJnRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZC5wb3AoKSksdGhp''@;'; put 'put ''cy5ob3RUYWJsZS5yZWFkT25seT0hMSx0aGlzLmhvdFRhYmxlLmRhdGE9dGhpcy5kYXRhU291cmNlLGgudXBkYXRlU2V0dGluZ3Moe3JlYWRPbmx5OnRoaXMuaG90VGFibGUucmVhZE9ubHl9LCExKSxoLnJlbmRlcigpO2Zvcihjb25zdCBEIG9mIE0pZi5zb3J0KEQpO3RoaXMucmVTZXRDZWxs''@;'; put 'put ''VmFsaWRhdGlvblZhbHVlcygpLHNldFRpbWVvdXQoKCk9Pnt0aGlzLmZpeEFyaWFBY2Nlc3NpYmlsaXR5KCl9LDEwMCl9LDApfWNvbnZlcnRUb0NvcnJlY3RUeXBlcyhhKXtmb3IoY29uc3QgZCBvZiBhKWZvcihjb25zdCBoIGluIGQpe2NvbnN0IGY9dGhpcy5jb2xzLmZpbmQodj0+di5OQU1F''@;'; put 'put ''PT09aCk7ZiYmIiIhPT1kW2hdJiYibnVtIj09PWYuVFlQRSYmIWYuRERUWVBFLmluY2x1ZGVzKCJUSU1FIikmJiFmLkREVFlQRS5pbmNsdWRlcygiREFURSIpJiYoZFtoXT1wYXJzZUludChkW2hdKSl9fWNhbmNlbEVkaXQoKXt0aGlzLnRvZ2dsZUhvdFBsdWdpbigiY29udGV4dE1lbnUiLCEx''@;'; put 'put ''KSx0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlPVtdLHRoaXMuY2xlYXJEdXBsaWNhdGVWYWxpZGF0aW9uKCk7Y29uc3QgYT10aGlzLmhvdEluc3RhbmNlLGQ9YS5nZXRQbHVnaW4oIm11bHRpQ29sdW1uU29ydGluZyIpLGg9ZC5nZXRTb3J0Q29uZmlnKCksZj1BcnJheS5pc0FycmF5KGgpP2g6''@;'; put 'put ''W2hdO3RoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZCYmKHRoaXMuZGF0YVNvdXJjZT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZCkpLHRoaXMuaG90VGFibGUuZGF0YT10aGlzLmRhdGFTb3VyY2UsdGhpcy5ob3RUYWJsZS5yZWFkT25seT0hMCxh''@;'; put 'put ''LnVwZGF0ZVNldHRpbmdzKHtyZWFkT25seTp0aGlzLmhvdFRhYmxlLnJlYWRPbmx5LGRhdGE6dGhpcy5kYXRhU291cmNlfSwhMSksYS52YWxpZGF0ZVJvd3ModGhpcy5tb2RpZmVkUm93c0luZGV4ZXMpO2Zvcihjb25zdCB2IG9mIGYpZC5zb3J0KHYpO3RoaXMuY2hlY2tSb3dMaW1pdCgpfWhv''@;'; put 'put ''dENsaWNrZWQoKXsxPT09dGhpcy50aW1lc0NsaWNrZWQmJnRoaXMuaG90VGFibGUucmVhZE9ubHkmJnRoaXMuZWRpdFRhYmxlKCksMD09PXRoaXMudGltZXNDbGlja2VkJiYodGhpcy50aW1lc0NsaWNrZWQrKyxzZXRUaW1lb3V0KCgpPT57dGhpcy50aW1lc0NsaWNrZWQ9MH0sMjAwKSl9Y2xl''@;'; put 'put ''YW5FeGNlZWQoKXt0aGlzLmV4Y2VlZENlbGxzPVtdfWFwcHJvdmVyc1RvZ2dsZSgpe3RoaXMuc2hvd0FwcHJvdmVycz0hdGhpcy5zaG93QXBwcm92ZXJzfWFkZFJvdygpe3RoaXMuYWRkaW5nTmV3Um93PSEwLHNldFRpbWVvdXQoKCk9Pntjb25zdCBhPXRoaXMuaG90SW5zdGFuY2UsZD10aGlz''@;'; put 'put ''LmNyZWF0ZUVtcHR5Um93KCk7dGhpcy5kYXRhU291cmNlLnB1c2goZCksYS51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2V9LCExKSxhLnNlbGVjdENlbGwodGhpcy5kYXRhU291cmNlLmxlbmd0aC0xLDApLGEucmVuZGVyKCksdGhpcy5hZGRpbmdOZXdSb3c9ITEsdGhpcy5y''@;'; put 'put ''ZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCl9KX1jcmVhdGVFbXB0eVJvdygpe2NvbnN0IGE9e307cmV0dXJuIHRoaXMuaGVhZGVyQ29sdW1ucy5mb3JFYWNoKGQ9PnthW2RdPSIifSksYS5ub0xpbmtPcHRpb249ITAsYX1pbnNlcnRSb3dBdFBvc2l0aW9uKGEpe2NvbnN0IGQ9dGhpcy5jcmVh''@;'; put 'put ''dGVFbXB0eVJvdygpO3RoaXMuZGF0YVNvdXJjZS5zcGxpY2UoYSwwLGQpO2NvbnN0IGg9dGhpcy5ob3RJbnN0YW5jZTtoLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZX0sITEpLGgucmVuZGVyKCksdGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCl9Y2FuY2VsU3Vi''@;'; put 'put ''bWl0KCl7dGhpcy5kYXRhU291cmNlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlQmVmb3JlU3VibWl0KSx0aGlzLmRhdGFTb3VyY2VCZWZvcmVTdWJtaXQ9W10sdGhpcy5ob3RUYWJsZS5kYXRhPXRoaXMuZGF0YVNvdXJjZTtjb25zdCBhPXRoaXMuaG90SW5z''@;'; put 'put ''dGFuY2U7YS51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2UsY29sSGVhZGVyczp0aGlzLmhlYWRlckNvbHVtbnMsY29sdW1uczp0aGlzLmNlbGxWYWxpZGF0aW9uLG1vZGlmeUNvbFdpZHRoOmZ1bmN0aW9uKGQsaCl7cmV0dXJuIDA9PT1oPzYwOmQ+NTAwPzUwMDpkfX0sITEp''@;'; put 'put ''LGEuc2VsZWN0Q2VsbCgwLDApLGEucmVuZGVyKCksYS52YWxpZGF0ZVJvd3ModGhpcy5tb2RpZmVkUm93c0luZGV4ZXMpLHRoaXMucmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcygpfWdldFJvd3NTdWJtaXR0aW5nQ291bnQoKXt0aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKS5kZWJ1''@;'; put 'put ''ZyYmKHRoaXMubG9nZ2VyU2VydmljZS5sb2codGhpcy5kYXRhU291cmNlKSx0aGlzLmxvZ2dlclNlcnZpY2UubG9nKHRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZCkpO2xldCBhPTAsZD0wLGg9MDt0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcz1bXSx0aGlzLmRhdGFNb2RpZmllZD1bXTtmb3IobGV0''@;'; put 'put ''IGY9MDtmPHRoaXMuZGF0YVNvdXJjZS5sZW5ndGg7ZisrKXtjb25zdCB2PXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlW2ZdKTtpZigiWWVzIj09PXYuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fKXRoaXMuZGF0YU1vZGlmaWVkLnB1c2godiksZCsr''@;'; put 'put ''O2Vsc2V7Y29uc3QgTT10aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQuZmluZChEPT57Zm9yKGNvbnN0IFUgb2YgdGhpcy5oZWFkZXJQa3MpaWYoRFtVXSE9PXZbVV0pcmV0dXJuITE7cmV0dXJuITB9KTtNP0pTT04uc3RyaW5naWZ5KHYpIT09SlNPTi5zdHJpbmdpZnkoTSkmJih0aGlzLmRhdGFN''@;'; put 'put ''b2RpZmllZC5wdXNoKHYpLHRoaXMubW9kaWZlZFJvd3NJbmRleGVzLnB1c2goZiksYSsrKToodGhpcy5kYXRhTW9kaWZpZWQucHVzaCh2KSx0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcy5wdXNoKGYpLGgrKyl9fXRoaXMucm93c0NoYW5nZWQ9e3Jvd3NVcGRhdGVkOmEscm93c0RlbGV0ZWQ6ZCxy''@;'; put 'put ''b3dzQWRkZWQ6aH19Y2xlYXJEdXBsaWNhdGVWYWxpZGF0aW9uKCl7Y29uc3QgYT10aGlzLmhvdEluc3RhbmNlO2Zvcihjb25zdCBkIG9mIHRoaXMuZHVwbGljYXRlUGtJbmRleGVzKWZvcihsZXQgaD0xO2g8PXRoaXMucmVhZE9ubHlGaWVsZHM7aCsrKXthLnJlbW92ZUNlbGxNZXRhKGQsaCwi''@;'; put 'put ''dmFsaWQiKSxhLnJlbW92ZUNlbGxNZXRhKGQsaCwiZHVwS2V5Iik7Y29uc3QgZj1hLmdldENlbGxNZXRhKGQsaCk7aWYoZi5jbGFzc05hbWUpe2xldCB2O3Y9QXJyYXkuaXNBcnJheShmLmNsYXNzTmFtZSk/Zi5jbGFzc05hbWUuZmlsdGVyKE09PiJkYy1pbnZhbGlkLWNlbGwiIT09TSkuam9p''@;'; put 'put ''bigiICIpOmYuY2xhc3NOYW1lLnJlcGxhY2UoImRjLWludmFsaWQtY2VsbCIsIiIpLnRyaW0oKSxhLnNldENlbGxNZXRhKGQsaCwiY2xhc3NOYW1lIix2KX19dGhpcy5kdXBsaWNhdGVQa0luZGV4ZXM9W10sYS5yZW5kZXIoKX12YWxpZGF0ZVByaW1hcnlLZXlzKCl7Y29uc3QgYT10aGlzLmhv''@;'; put 'put ''dEluc3RhbmNlO3RoaXMuY2xlYXJEdXBsaWNhdGVWYWxpZGF0aW9uKCk7Y29uc3QgZD10aGlzLmRhdGFTb3VyY2U7dGhpcy5wa0ZpZWxkcz1bXTtmb3IobGV0IHY9MDt2PGQubGVuZ3RoO3YrKyl7bGV0IE09IiI7Zm9yKGxldCBEPTE7RDx0aGlzLnJlYWRPbmx5RmllbGRzKzE7RCsrKU09TSsi''@;'; put 'put ''fCIrKGRbdl1bdGhpcy5oZWFkZXJDb2x1bW5zW0RdXXx8IiIpO3RoaXMucGtGaWVsZHMucHVzaChNKX1jb25zdCBoPVtdO2lmKHRoaXMucGtGaWVsZHMubGVuZ3RoPjApZm9yKGxldCB2PTA7djx0aGlzLnBrRmllbGRzLmxlbmd0aDt2KyspZm9yKGxldCBNPTA7TTx0aGlzLnBrRmllbGRzLmxl''@;'; put 'put ''bmd0aDtNKyspdGhpcy5wa0ZpZWxkc1t2XT09PXRoaXMucGtGaWVsZHNbTV0mJk0hPT12JiYifCIhPT10aGlzLnBrRmllbGRzW3ZdJiZoLnB1c2goTSk7Zm9yKGxldCB2PTA7djxkLmxlbmd0aDt2KyspZm9yKGxldCBNPTA7TTx0aGlzLmhlYWRlckNvbHVtbnMubGVuZ3RoO00rKyl7Y29uc3Qg''@;'; put 'put ''RD1hLmdldENlbGxNZXRhKHYsTSk7RCYmKEQudmFsaWQ9ITAsRC5kdXBLZXk9ITEpfWZvcihsZXQgdj0wO3Y8aC5sZW5ndGg7disrKWZvcihsZXQgTT0xO008dGhpcy5yZWFkT25seUZpZWxkcysxO00rKylhLnNldENlbGxNZXRhKGhbdl0sTSwidmFsaWQiLCExKSxhLnNldENlbGxNZXRhKGhb''@;'; put 'put ''dl0sTSwiZHVwS2V5IiwhMCksYS5zZXRDZWxsTWV0YShoW3ZdLE0sImNsYXNzTmFtZSIsImRjLWludmFsaWQtY2VsbCIpO3RoaXMuZHVwbGljYXRlUGtJbmRleGVzPVsuLi5uZXcgU2V0KGguc29ydCgpKV0sYS5yZW5kZXIoKX1yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKGE9ITEsZCl7Y29u''@;'; put 'put ''c3QgaD10aGlzLmhvdEluc3RhbmNlO2Zvcihjb25zdCBmIG9mIHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2Upe2NvbnN0IHY9Zi52YWx1ZXMubWFwKE09Pk1bdGhpcy5jZWxsVmFsaWRhdGlvbkZpZWxkcy5SQVdfVkFMVUVdKTtoLmJhdGNoKCgpPT57Y29uc3QgTT1oLmdldENlbGxNZXRhKGYu''@;'; put 'put ''cm93LGYuY29sKSxEPXRoaXMuZGNWYWxpZGF0b3I/LmdldFJ1bGUoTS5kYXRhfHwiIik7bGV0IFU7RCYmKFU9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0RHFEcm9wZG93blNvdXJjZShEKSksVXx8KFU9W10pO2NvbnN0IHRlPVsuLi5uZXcgU2V0KFsuLi5VLC4uLnZdKV07dGhpcy5jdXJyZW50RWRp''@;'; put 'put ''dFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZShmLmNvbCx7c291cmNlOnRlfSksaC5zZXRDZWxsTWV0YShmLnJvdyxmLmNvbCwic291cmNlIix0ZSksZi52YWx1ZXMubGVuZ3RoPjAmJihoLnNldENlbGxNZXRhKGYucm93LGYuY29sLCJyZW5kZXJlciIsImF1dG9jb21wbGV0ZSIpLGguc2V0''@;'; put 'put ''Q2VsbE1ldGEoZi5yb3csZi5jb2wsImVkaXRvciIsImF1dG9jb21wbGV0ZS5jdXN0b20iKSxoLnNldENlbGxNZXRhKGYucm93LGYuY29sLCJzdHJpY3QiLGYuc3RyaWN0KSxoLnNldENlbGxNZXRhKGYucm93LGYuY29sLCJmaWx0ZXIiLCExKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRh''@;'; put 'put ''dG9yPy51cGRhdGVSdWxlKGYuY29sLHtyZW5kZXJlcjoiYXV0b2NvbXBsZXRlIixlZGl0b3I6ImF1dG9jb21wbGV0ZS5jdXN0b20iLHN0cmljdDpmLnN0cmljdCxmaWx0ZXI6ITF9KSksdGhpcy5yZVNldEV4dGVuZGVkQ2VsbFZhbGlkYXRpb25WYWx1ZXMoZix2b2lkIDAsYSxkKSxoLnJlbmRl''@;'; put 'put ''cigpfSl9fXJlU2V0RXh0ZW5kZWRDZWxsVmFsaWRhdGlvblZhbHVlcyhhLGQsaD0hMSxmKXtpZihhKXtkfHwoZD1hLnJvdyk7Y29uc3QgTT10aGlzLmdldEV4dGVuZGVkVmFsdWVzQnlDZWxsVmFsdWUoYSk7dGhpcy5zZXRFeHRlbmRlZFZhbHVlc1RvQ2VsbHMoYSxkLE0saCxmKX1lbHNlIGZv''@;'; put 'put ''cihjb25zdCBNIG9mIHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2Upe2NvbnN0IEQ9dGhpcy5nZXRFeHRlbmRlZFZhbHVlc0J5Q2VsbFZhbHVlKE0pO3RoaXMuc2V0RXh0ZW5kZWRWYWx1ZXNUb0NlbGxzKE0sTS5yb3csRCxoLGYpfX1zZXRFeHRlbmRlZFZhbHVlc1RvQ2VsbHMoYSxkLGgsZj0h''@;'; put 'put ''MSx2KXtjb25zdCBNPXRoaXMuaG90SW5zdGFuY2UsRD1bXTtmb3IoY29uc3QgVSBvZiBoKUQuaW5kZXhPZihVLkVYVFJBX0NPTF9OQU1FKTwwJiZELnB1c2goVS5FWFRSQV9DT0xfTkFNRSk7Zm9yKGNvbnN0IFUgb2YgRCl7Y29uc3QgdGU9aC5maWx0ZXIobXQ9Pm10LkVYVFJBX0NPTF9OQU1F''@;'; put 'put ''PT09VSk7bGV0IG9lPXRlLm1hcChtdD0+IkMiPT09bXQuRElTUExBWV9UWVBFP210LlJBV19WQUxVRV9DSEFSOm10LlJBV19WQUxVRV9OVU0pO2NvbnN0IHZlPU0ucHJvcFRvQ29sKFUpO3RoaXMuZGlzYWJsZWRCYXNpY0R5bmFtaWNDZWxsVmFsaWRhdGlvbk1hcC5maW5kKG10PT5tdC5yb3c9''@;'; put 'put ''PT1kJiZtdC5jb2w9PT12ZSl8fHRoaXMuZGlzYWJsZWRCYXNpY0R5bmFtaWNDZWxsVmFsaWRhdGlvbk1hcC5wdXNoKHtyb3c6ZCxjb2w6dmUsYWN0aXZlOiExfSksTS5zZXRDZWxsTWV0YShkLHZlLCJyZW5kZXJlciIsImF1dG9jb21wbGV0ZSIpLE0uc2V0Q2VsbE1ldGEoZCx2ZSwiZWRpdG9y''@;'; put 'put ''IiwiYXV0b2NvbXBsZXRlLmN1c3RvbSIpLE0uc2V0Q2VsbE1ldGEoZCx2ZSwic3RyaWN0IixhLnN0cmljdCksTS5zZXRDZWxsTWV0YShkLHZlLCJmaWx0ZXIiLCExKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKHZlLHtyZW5kZXJlcjoiYXV0b2NvbXBsZXRl''@;'; put 'put ''IixlZGl0b3I6ImF1dG9jb21wbGV0ZS5jdXN0b20iLHN0cmljdDphLnN0cmljdCxmaWx0ZXI6ITF9KTtjb25zdCBGZT1NLmdldENlbGxNZXRhKGQsdmUpLFdlPXRoaXMuZGNWYWxpZGF0b3I/LmdldFJ1bGUoRmUuZGF0YXx8IiIpO2xldCBudDtXZSYmKG50PXRoaXMuZGNWYWxpZGF0b3I/Lmdl''@;'; put 'put ''dERxRHJvcGRvd25Tb3VyY2UoV2UpKSxudHx8KG50PVtdKSwibnVtZXJpYyI9PT1XZT8udHlwZT8obnQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhudCwibnVtYmVyIiksb2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhvZSwibnVtYmVyIikp''@;'; put 'put ''OihudD10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKG50LCJzdHJpbmciKSxvZT10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKG9lLCJzdHJpbmciKSk7Y29uc3QgZHQ9Wy4uLm5ldyBTZXQoWy4uLm50LC4uLm9lXSldO2lmKE0uc2V0Q2VsbE1ldGEo''@;'; put 'put ''ZCx2ZSwic291cmNlIixkdCksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZSh2ZSx7c291cmNlOmR0fSksZil7aWYodiYmdiE9PWQpcmV0dXJuO2NvbnN0IG10PXRlLmZpbmQoJHQ9PjE9PT0kdC5GT1JDRV9GTEFHKTttdCYmc2V0VGltZW91dCgoKT0+e00uc2V0''@;'; put 'put ''RGF0YUF0Q2VsbChkLHZlLCJDIj09PW10LkRJU1BMQVlfVFlQRT9tdC5SQVdfVkFMVUVfQ0hBUjptdC5SQVdfVkFMVUVfTlVNLCJmb3JjZV9jZWxsX3ZhbGlkYXRpb25fdmFsdWUiKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9PT1kJiYodGhpcy5kYXRhU291cmNlW3RoaXMuY3VycmVu''@;'; put 'put ''dEVkaXRSZWNvcmRJbmRleF1bVV09IkMiPT09bXQuRElTUExBWV9UWVBFP210LlJBV19WQUxVRV9DSEFSOm10LlJBV19WQUxVRV9OVU0pfSl9fX1nZXRFeHRlbmRlZFZhbHVlc0J5Q2VsbFZhbHVlKGEsZCl7Y29uc3QgZj10aGlzLmhvdEluc3RhbmNlLmdldERhdGFBdENlbGwoZHx8YS5yb3cs''@;'; put 'put ''YS5jb2wpLHY9KGEudmFsdWVzLmZpbmQodGU9PnRlW3RoaXMuY2VsbFZhbGlkYXRpb25GaWVsZHMuUkFXX1ZBTFVFXT09PWYpfHxbXSlbdGhpcy5jZWxsVmFsaWRhdGlvbkZpZWxkcy5ESVNQTEFZX0lOREVYXSxNPWEuZXh0ZW5kZWRfdmFsdWVzPy5maWx0ZXIodGU9PnRlWzBdPT09diksRD10''@;'; put 'put ''aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZXh0ZW5kZWRDZWxsVmFsaWRhdGlvbkZpZWxkcyksVT1bXTtmb3IoY29uc3QgdGUgb2YgTXx8W10pe2NvbnN0IG9lPXt9O2Zvcihjb25zdCB2ZSBvZiBPYmplY3Qua2V5cyhEKSlvZVt2ZV09dGVbRFt2ZV1dO1UucHVzaChvZSl9cmV0''@;'; put 'put ''dXJuIFV9Y2hlY2tTYXZlKCl7aWYodGhpcy5nZXRSb3dzU3VibWl0dGluZ0NvdW50KCksMD09PXRoaXMucm93c0NoYW5nZWQucm93c0FkZGVkJiYwPT09dGhpcy5yb3dzQ2hhbmdlZC5yb3dzVXBkYXRlZCYmMD09PXRoaXMucm93c0NoYW5nZWQucm93c0RlbGV0ZWQpcmV0dXJuIHRoaXMuYmFk''@;'; put 'put ''RWRpdFRpdGxlPSJObyBjaGFuZ2VzIHRvIHN1Ym1pdCIsdGhpcy5iYWRFZGl0Q2F1c2U9IlBsZWFzZSBtb2RpZnkgc29tZSB2YWx1ZXMgYW5kIHRyeSBhZ2Fpbi4iLHZvaWQodGhpcy5iYWRFZGl0PSEwKTtjb25zdCBhPXRoaXMuaG90SW5zdGFuY2U7dGhpcy5kYXRhU291cmNlQmVmb3JlU3Vi''@;'; put 'put ''bWl0PXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlKTtmb3IobGV0IGQ9MDtkPHRoaXMuZGF0YVNvdXJjZS5sZW5ndGg7ZCsrKWRlbGV0ZSB0aGlzLmRhdGFTb3VyY2VbZF0ubm9MaW5rT3B0aW9uO2Zvcig7dGhpcy5kYXRhU291cmNlLmxlbmd0aD4wOyl7Y29u''@;'; put 'put ''c3QgZD10aGlzLmRhdGFTb3VyY2VbdGhpcy5kYXRhU291cmNlLmxlbmd0aC0xXTtpZighT2JqZWN0LmtleXMoZCkuZXZlcnkoZj0+Il9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyI9PT1mfHwhZFtmXXx8IiI9PT1kW2ZdKSlicmVhazt0aGlzLmRhdGFTb3VyY2UucG9wKCl9aWYoYS51''@;'; put 'put ''cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2UsY29sSGVhZGVyczp0aGlzLmhlYWRlckNvbHVtbnMsY29sdW1uczp0aGlzLmNlbGxWYWxpZGF0aW9uLG1vZGlmeUNvbFdpZHRoOmZ1bmN0aW9uKGQsaCl7cmV0dXJuIGQ+NTAwPzUwMDpkfX0sITEpLHRoaXMucmVTZXRDZWxsVmFs''@;'; put 'put ''aWRhdGlvblZhbHVlcygpLGMuY250PTAsYy5ub25Qa0NudD0wLHRoaXMudmFsaWRhdGVQcmltYXJ5S2V5cygpLDAhPT10aGlzLmR1cGxpY2F0ZVBrSW5kZXhlcy5sZW5ndGgpcmV0dXJuIHRoaXMucGtEdXBzPSEwLHRoaXMuc3VibWl0PSExLHZvaWQgdGhpcy5jYW5jZWxTdWJtaXQoKTt0aGlz''@;'; put 'put ''LnBrRHVwcz0hMSxhLnZhbGlkYXRlUm93cyh0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcywoKT0+e3RoaXMuY2hlY2tJbnZhbGlkKCk/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiVmFsaWRhdGlvbiBlcnJvciIsIkludmFsaWQgVmFsdWVzIGFyZSBQcmVzZW50Iik6KHRoaXMuc3Vi''@;'; put 'put ''bWl0PSEwLHRoaXMudmFsaWRhdGlvbkRvbmU9MSxzZXRUaW1lb3V0KCgpPT57Y29uc3QgZD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZm9ybUZpZWxkc184Iik7ZCYmZC5mb2N1cygpfSwyMDApKX0pfXNhdmVUYWJsZShhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtpZihk''@;'; put 'put ''LmhvdEluc3RhbmNlLmdldERhdGEoKSxhPShhPWEuZmlsdGVyKHY9PiEhZC5kYXRhTW9kaWZpZWQuZmluZChEPT57Zm9yKGNvbnN0IFUgb2YgZC5oZWFkZXJQa3MpaWYoRFtVXSE9PXZbVV0pcmV0dXJuITE7cmV0dXJuITB9KSkpLm1hcCh2PT57Y29uc3QgTT12Ll9fX19fREVMRVRFX19USElT''@;'; put 'put ''X19SRUNPUkRfX19fXztyZXR1cm4gZGVsZXRlIHYuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fLHYuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fPU0sT2JqZWN0LmtleXModikubWFwKEQ9PnsibnVtZXJpYyI9PT1kLmRjVmFsaWRhdG9yPy5nZXRSdWxlKEQpPy50eXBlJiYi''@;'; put 'put ''LiI9PT12W0RdJiYodltEXT1udWxsKX0pLHZ9KSxkLmxvZ2dlclNlcnZpY2UubG9nKCJEYXRhIHN1Ym1pdHRlZCIsYSksZC5jaGVja0ludmFsaWQoKSlyZXR1cm4gZC5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiVmFsaWRhdGlvbiBlcnJvciIsIkludmFsaWQgVmFsdWVzIGFyZSBQcmVz''@;'; put 'put ''ZW50IiksZC5jYW5jZWxTdWJtaXQoKSx2b2lkKGQuc3VibWl0PSExKTtpZihkLnZhbGlkYXRpb25Eb25lPTAsZC5zYXZlTG9hZGluZz0hMCxjLmNudDwxJiYwPT09ZC5kdXBsaWNhdGVQa0luZGV4ZXMubGVuZ3RoJiZjLm5vblBrQ250PDEpe2Quc2F2ZUxvYWRpbmc9ITAsZC5kaXNhYmxlU3Vi''@;'; put 'put ''bWl0PSExLGQuc3VibWl0PSEwO2NvbnN0IHY9e0FDVElPTjoiTE9BRCJ9O2lmKGQubWVzc2FnZT1kLm1lc3NhZ2UucmVwbGFjZSgvXG4vZywiLiAiKSx2Lk1FU1NBR0U9ZC5tZXNzYWdlLHYuTElCRFM9ZC5saWJkcyxkLmNvbHMpe2NvbnN0IE09YS5zbGljZSgwLGQubGljZW5jZVN0YXRlLnZh''@;'; put 'put ''bHVlLnN1Ym1pdF9yb3dzX2xpbWl0KTtpZih5aWVsZCBkLnNhc1N0b3JlU2VydmljZS51cGRhdGVUYWJsZSh2LE0sIlNBU0NvbnRyb2xUYWJsZSIsImVkaXRvcnMvc3RhZ2VkYXRhIixkLiRkYXRhRm9ybWF0cykudGhlbihVPT57aWYodHlwZW9mIFUuYWRhcHRlclJlc3BvbnNlLnNhc3BhcmFt''@;'; put 'put ''czwidSIpcmV0dXJuIGQucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK1UuYWRhcHRlclJlc3BvbnNlLnNhc3BhcmFtc1swXS5EU0lEKSwhMDtsZXQgdGU9IlN1Ym1pdCByZXF1ZXN0IGZhaWxlZCI7VSYmKHRlKz1gXG4keyJzdHJpbmciPT10eXBlb2YgVT9VOkpTT04uc3RyaW5naWZ5''@;'; put 'put ''KFUpfWApLGQuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJlZGl0b3JzL3N0YWdlZGF0YSIsdGUsbnVsbCwiU3VibWl0IGVycm9yIil9KS5jYXRjaChVPT57Y29uc29sZS5sb2coImVyciIsVSksYy5jbnQ9MCxjLm5vblBrQ250PTAsZC5kaXNhYmxlU3VibWl0PSEwLGQuc3VibWl0PSEx''@;'; put 'put ''O2NvbnN0IHRlPSJzdHJpbmciPT10eXBlb2YgVS5hZGFwdGVyUmVzcG5zZT9VLmFkYXB0ZXJSZXNwbnNlOkpTT04uc3RyaW5naWZ5KFUuYWRhcHRlclJlc3Buc2UpO3JldHVybiBkLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiZWRpdG9ycy9zdGFnZWRhdGEiLGBTdWJtaXQgcmVxdWVz''@;'; put 'put ''dCBmYWlsZWRcbiR7dGV9YCxudWxsLCJTdWJtaXQgZXJyb3IiKSwhMX0pKXJldHVybn19Yy5jbnQ+PTE/KGQucGtOdWxsPSEwLGQuc3VibWl0PSEwKTpkLnN1Ym1pdD0hMSxjLm5vblBrQ250Pj0xPyhkLm5vUGtOdWxsPSEwLGQuc3VibWl0PSEwKTpkLnN1Ym1pdD0hMSxkLmNhbmNlbFN1Ym1p''@;'; put 'put ''dCgpLGMuY250PTAsYy5ub25Qa0NudD0wLGQuZGlzYWJsZVN1Ym1pdD0hMH0pKCl9dmFsaWRhdG9yUnVsZVNvdXJjZShhKXtyZXR1cm4gdGhpcy5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShhKX1jaGVja0ludmFsaWQoKXtpZighdGhpcy5ob3RUYWJsZUNvbXBvbmVudHx8IXRoaXMuaG90VGFibGVD''@;'; put 'put ''b21wb25lbnQuaG90SW5zdGFuY2UpcmV0dXJuITE7Y29uc3QgYT10aGlzLmhvdFRhYmxlQ29tcG9uZW50LmhvdEluc3RhbmNlLnJvb3RFbGVtZW50O2lmKCFhKXJldHVybiExO2NvbnN0IGQ9YS5xdWVyeVNlbGVjdG9yQWxsKCIuaHRJbnZhbGlkIiksaD1hLnF1ZXJ5U2VsZWN0b3JBbGwoIi5k''@;'; put 'put ''Yy1pbnZhbGlkLWNlbGwiKTtyZXR1cm4gZC5sZW5ndGg+MHx8aC5sZW5ndGg+MH1nb1RvRWRpdG9yKCl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiLyIpfWNsb3NlUmVjb3JkRWRpdChhKXt0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9LTEsdGhpcy5jdXJyZW50RWRpdFJlY29yZD12''@;'; put 'put ''b2lkIDAsdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj12b2lkIDAsIkFERCI9PT10aGlzLnJlY29yZEFjdGlvbiYmIWEmJih0aGlzLmRhdGFTb3VyY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLnByZXZEYXRhU291cmNlKSx0aGlzLmhvdEluc3RhbmNlLnVwZGF0''@;'; put 'put ''ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZX0sITEpKX1jb25maXJtUmVjb3JkRWRpdChhPSEwKXtjb25zdCBkPXRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleDthJiYodGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PS0xKSx0aGlzLmNvbHVtbkhlYWRlci5tYXAoZj0+e2NvbnN0''@;'; put 'put ''IHY9dGhpcy5jdXJyZW50RWRpdFJlY29yZFtmXSxNPSJudW0iPT09dGhpcy4kZGF0YUZvcm1hdHM/LnZhcnNbZl0/LnR5cGUsRD0oMCxoNS5pc1NwZWNpYWxNaXNzaW5nKSh2KTtNJiYhaXNOYU4odikmJiFEJiYodGhpcy5jdXJyZW50RWRpdFJlY29yZFtmXT0xKnYpfSksdGhpcy5kYXRhU291''@;'; put 'put ''cmNlW2RdPXRoaXMuY3VycmVudEVkaXRSZWNvcmQsdGhpcy5ob3RUYWJsZS5kYXRhW2RdPXRoaXMuY3VycmVudEVkaXRSZWNvcmQsdGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2V9LCExKSxhJiYodGhpcy5jdXJyZW50RWRpdFJlY29yZD12b2lk''@;'; put 'put ''IDApfW9uTmV4dFJlY29yZCgpe3RoaXMuY29uZmlybVJlY29yZEVkaXQoITEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD10aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg+PXRoaXMuZGF0YVNvdXJjZS5sZW5ndGgtMT8wOnRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleCsxLHRoaXMu''@;'; put 'put ''ZWRpdFJlY29yZChudWxsLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleCl9b25QcmV2aW91c1JlY29yZCgpe3RoaXMuY29uZmlybVJlY29yZEVkaXQoITEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD10aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg8PTA/dGhpcy5kYXRhU291cmNl''@;'; put 'put ''Lmxlbmd0aC0xOnRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleC0xLHRoaXMuZWRpdFJlY29yZChudWxsLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleCl9YWRkUmVjb3JkQnV0dG9uQ2xpY2soKXt0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJlY29yZD90aGlzLmV2ZW50U2Vydmlj''@;'; put 'put ''ZS5zaG93RGVtb0xpbWl0TW9kYWwoIkFkZCBSZWNvcmQiKTp0aGlzLmFkZEVkaXROZXdSZWNvcmQoKX1hZGRFZGl0TmV3UmVjb3JkKCl7dGhpcy5hZGRSZWNvcmQoKSxzZXRUaW1lb3V0KCgpPT57dGhpcy5lZGl0UmVjb3JkKG51bGwsdGhpcy5kYXRhU291cmNlLmxlbmd0aC0xLCEwKX0sMWUz''@;'; put 'put ''KX1hZGRSZWNvcmQoKXt0aGlzLmFkZFJvdygpfWVkaXRSZWNvcmQoYSxkLGgpe2lmKHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0RWRpdFJlY29yZCl0aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIkVkaXQgUmVjb3JkIik7ZWxzZSBpZighKHZvaWQgMD09PWR8fGQ8MHx8''@;'; put 'put ''dGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RFZGl0UmVjb3JkKSl7aWYodGhpcy5yZWNvcmRBY3Rpb249aD8iQUREIjoiRURJVCIsdGhpcy5ob3RUYWJsZS5yZWFkT25seSYmdGhpcy5lZGl0VGFibGUoITEsaCksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj10aGlzLmhlbHBlclNl''@;'; put 'put ''cnZpY2UuZGVlcENsb25lKHRoaXMuZGNWYWxpZGF0b3IpLGgpdGhpcy5wcmV2RGF0YVNvdXJjZT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZSksdGhpcy5wcmV2RGF0YVNvdXJjZS5wb3AoKTtlbHNle2NvbnN0IGY9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBD''@;'; put 'put ''bG9uZSh0aGlzLmhvdEluc3RhbmNlLmdldENlbGxNZXRhQXRSb3coZCkpO2Zvcihjb25zdCB2IG9mIGYpaWYodil7Y29uc3QgTT12LnByb3A/LnRvU3RyaW5nKCk7ZGVsZXRlIHYucHJvcCxkZWxldGUgdi5kYXRhLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUo''@;'; put 'put ''di5jb2wsey4uLnYsZGF0YTpNfSl9fXRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD1kLHRoaXMuY3VycmVudEVkaXRSZWNvcmQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2VbZF0pfX10b2dnbGVIb3RQbHVnaW4oYSxkKXtjb25zdCBoPXRoaXMuaG90SW5z''@;'; put 'put ''dGFuY2U7aC5iYXRjaCgoKT0+e2NvbnN0IGY9aC5nZXRQbHVnaW4oYSk7Zj8oc2V0VGltZW91dCgoKT0+e2Q/Zi5lbmFibGVQbHVnaW4oKTpmLmRpc2FibGVQbHVnaW4oKX0sMTAwKSxoLnJlbmRlcigpKTpjb25zb2xlLndhcm4oIlRvZ2dsZSBIb3QgUGx1Z2luIGZhaWxlZCAtIFBsdWdpbiBu''@;'; put 'put ''YW1lZDogIithKyIgLSBjb3VsZCBub3QgYmUgZm91bmQuIil9KX1keW5hbWljQ2VsbFZhbGlkYXRpb25EaXNhYmxlZChhLGQpe3JldHVybiEhdGhpcy5kaXNhYmxlZEJhc2ljRHluYW1pY0NlbGxWYWxpZGF0aW9uTWFwLmZpbmQoZj0+Zi5yb3c9PT1hJiZmLmNvbD09PWQmJiFmLmFjdGl2ZSl9''@;'; put 'put ''ZHluYW1pY0NlbGxWYWxpZGF0aW9uKGEsZCl7aWYodGhpcy5keW5hbWljQ2VsbFZhbGlkYXRpb25EaXNhYmxlZChhLGQpKXJldHVybjtjb25zdCBoPXRoaXMuaG90SW5zdGFuY2U7aWYoaC5nZXRDZWxsTWV0YShhLGQpLnJlYWRPbmx5KXJldHVybjtjb25zdCB2PWguZ2V0RGF0YUF0Q2VsbChh''@;'; put 'put ''LGQpLE09dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2VbYV0pLEQ9T2JqZWN0LmtleXMoTSlbZF0sVT10aGlzLmhlbHBlclNlcnZpY2UuZGVsZXRlS2V5c0FuZEhhc2goTSxbRCwibm9MaW5rT3B0aW9uIl0sITEpLHRlPXRoaXMuY2VsbFZhbGlkYXRpb25Tb3Vy''@;'; put 'put ''Y2UuZmluZEluZGV4KG9lPT5vZS5oYXNoPT09VSk7aWYodGU+LTEpe2xldCBvZT10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlW3RlXS52YWx1ZXMubWFwKEZlPT5GZVt0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzLlJBV19WQUxVRV0pO2NvbnN0IHZlPShoLmdldENlbGxNZXRhKGEsZCkuc291''@;'; put 'put ''cmNlfHxbXSkubGVuZ3RoPDEsd2U9IiAiIT09djtoLmJhdGNoKCgpPT57Y29uc3QgRmU9aC5nZXRDZWxsTWV0YShhLGQpLFdlPXRoaXMuZGNWYWxpZGF0b3I/LmdldFJ1bGUoRmUuZGF0YXx8IiIpO2xldCBudDtXZSYmKG50PXRoaXMuZGNWYWxpZGF0b3I/LmdldERxRHJvcGRvd25Tb3VyY2Uo''@;'; put 'put ''V2UpKSxudHx8KG50PVtdKSwibnVtZXJpYyI9PT1XZT8udHlwZT8obnQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhudCwibnVtYmVyIiksb2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhvZSwibnVtYmVyIikpOihudD10aGlzLmhlbHBlclNl''@;'; put 'put ''cnZpY2UuY29udmVydEFycmF5VmFsdWVzKG50LCJzdHJpbmciKSxvZT10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKG9lLCJzdHJpbmciKSk7Y29uc3QgZHQ9Wy4uLm5ldyBTZXQoWy4uLm50LC4uLm9lXSldO2lmKGguc2V0Q2VsbE1ldGEoYSxkLCJzb3VyY2UiLGR0KSx0''@;'; put 'put ''aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKGQse3NvdXJjZTpkdH0pLHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbdGVdLnZhbHVlcy5sZW5ndGg+MCl7Y29uc3QgbXQ9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVt0ZV0uc3RyaWN0O2guc2V0Q2VsbE1ldGEo''@;'; put 'put ''YSxkLCJyZW5kZXJlciIsImF1dG9jb21wbGV0ZSIpLGguc2V0Q2VsbE1ldGEoYSxkLCJlZGl0b3IiLCJhdXRvY29tcGxldGUuY3VzdG9tIiksaC5zZXRDZWxsTWV0YShhLGQsInN0cmljdCIsbXQpLGguc2V0Q2VsbE1ldGEoYSxkLCJmaWx0ZXIiLCExKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3Jk''@;'; put 'put ''VmFsaWRhdG9yPy51cGRhdGVSdWxlKGQse3JlbmRlcmVyOiJhdXRvY29tcGxldGUiLGVkaXRvcjoiYXV0b2NvbXBsZXRlLmN1c3RvbSIsc3RyaWN0Om10LGZpbHRlcjohMX0pfXRoaXMucmVTZXRFeHRlbmRlZENlbGxWYWxpZGF0aW9uVmFsdWVzKHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2Vb''@;'; put 'put ''dGVdLGEsdmUmJndlKSxoLnJlbmRlcigpfSl9aWYodGU8MCl7Y29uc3Qgb2U9e1NBU0NvbnRyb2xUYWJsZTpbe2xpYmRzOnRoaXMubGliZHMsdmFyaWFibGVfbm06RH1dLHNvdXJjZV9yb3c6W01dfSx2ZT10aGlzLmRjVmFsaWRhdG9yPy5nZXREcURldGFpbHMoRCkuZmluZCh3ZT0+IlNPRlRT''@;'; put 'put ''RUxFQ1RfSE9PSyI9PT13ZS5SVUxFX1RZUEV8fCJIQVJEU0VMRUNUX0hPT0siPT09d2UuUlVMRV9UWVBFKTt2ZSYmKHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UucHVzaCh7cm93OmEsY29sOmQsc3RyaWN0OiJIQVJEU0VMRUNUX0hPT0siPT09dmUuUlVMRV9UWVBFLHZhbHVlczpbXSxoYXNo''@;'; put 'put ''OlUsY291bnQ6dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5sZW5ndGgrMX0pLGguc2V0Q2VsbE1ldGEoYSxkLCJyZW5kZXJlciIsR190KSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3MucHVzaChkKSxoLnJlbmRlcigpLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJlZGl0b3JzL2dl''@;'; put 'put ''dGR5bmFtaWNjb2x2YWxzIixvZSx2b2lkIDAse3N1cHByZXNzU3VjY2Vzc0Fib3J0TW9kYWw6ITAsc3VwcHJlc3NFcnJvckFib3J0TW9kYWw6ITB9KS50aGVuKHdlPT57aWYod2UuYWRhcHRlclJlc3BvbnNlLmR5bmFtaWNfdmFsdWVzLm1hcChXZT0+V2VbdGhpcy5jZWxsVmFsaWRhdGlvbkZp''@;'; put 'put ''ZWxkcy5SQVdfVkFMVUVdKS5sZW5ndGg+MCl7Y29uc3QgV2U9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5maW5kSW5kZXgobnQ9Pm50Lmhhc2g9PT1VKTtXZT4tMSYmKHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbV2VdPXsuLi50aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlW1dlXSxyb3c6''@;'; put 'put ''YSxjb2w6ZCx2YWx1ZXM6d2UuYWRhcHRlclJlc3BvbnNlLmR5bmFtaWNfdmFsdWVzLGV4dGVuZGVkX3ZhbHVlczp3ZS5hZGFwdGVyUmVzcG9uc2UuZHluYW1pY19leHRlbmRlZF92YWx1ZXN9KSxoLnNldENlbGxNZXRhKGEsZCwicmVuZGVyZXIiLGFhZSksdGhpcy5jdXJyZW50RWRpdFJlY29y''@;'; put 'put ''ZExvYWRpbmdzLnNwbGljZSh0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3MuaW5kZXhPZihkKSwxKSxoLmRlc2VsZWN0Q2VsbCgpLGgucmVuZGVyKCksaC5iYXRjaCgoKT0+e3NldFRpbWVvdXQoKCk9Pnt0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoITAsYSksaC5yZW5kZXIo''@;'; put 'put ''KSxoLnZhbGlkYXRlUm93cyhbYV0pfSwxMDApfSl9aWYoaC5zZXRDZWxsTWV0YShhLGQsInJlbmRlcmVyIixhYWUpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5zcGxpY2UodGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzLmluZGV4T2YoZCksMSksaC5kZXNlbGVjdENlbGwo''@;'; put 'put ''KSxoLnJlbmRlcigpLHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UubGVuZ3RoPnRoaXMudmFsaWRhdGlvblRhYmxlTGltaXQpe2NvbnN0IFdlPXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UucmVkdWNlKChkdCxtdCk9PmR0LmNvdW50PG10LmNvdW50P2R0Om10KSxudD10aGlzLmNlbGxWYWxp''@;'; put 'put ''ZGF0aW9uU291cmNlLmluZGV4T2YoV2UpO3RoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2Uuc3BsaWNlKG50LDEpfX0pLmNhdGNoKHdlPT57Y29uc3QgRmU9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5maW5kSW5kZXgoV2U9PldlLmhhc2g9PT1VKTt0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNl''@;'; put 'put ''LnNwbGljZShGZSwxKSxoLmJhdGNoKCgpPT57aC5zZXRDZWxsTWV0YShhLGQsInJlbmRlcmVyIixZX3QpLGgucmVuZGVyKCl9KSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3Muc3BsaWNlKHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5pbmRleE9mKGQpLDEpLHRoaXMuY3Vy''@;'; put 'put ''cmVudEVkaXRSZWNvcmRFcnJvcnMucHVzaChkKSxzZXRUaW1lb3V0KCgpPT57aC5zZXRDZWxsTWV0YShhLGQsInJlbmRlcmVyIixhYWUpLGgucmVuZGVyKCksdGhpcy5jdXJyZW50RWRpdFJlY29yZEVycm9ycy5zcGxpY2UodGhpcy5jdXJyZW50RWRpdFJlY29yZEVycm9ycy5pbmRleE9mKGQp''@;'; put 'put ''LDEpfSwzZTMpLHRoaXMucmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcygpLHRoaXMubG9nZ2VyU2VydmljZS5sb2coImdldGR5bmFtaWNjb2x2YWxzIGVycm9yOiIsd2UpfSkpfX1jaGVja0VtcHR5Um93V2hlbkZpbHRlcigpe3RoaXMuemVyb0ZpbHRlclJvd3M9ITEsdHlwZW9mIHRoaXMuZmls''@;'; put 'put ''dGVyX3BrPCJ1IiYmMT09PXRoaXMuaG90VGFibGUuZGF0YS5sZW5ndGgmJltudWxsLCIiXS5pbmNsdWRlcyh0aGlzLmhvdFRhYmxlLmRhdGFbMF1bdGhpcy5oZWFkZXJQa3NbMF1dKSYmKHRoaXMuemVyb0ZpbHRlclJvd3M9ITApfW9uUmVjb3JkSW5wdXRGb2N1cyhhKXt0aGlzLmR5bmFtaWND''@;'; put 'put ''ZWxsVmFsaWRhdGlvbih0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgsYS5jb2xOYW1lKX1leGVjdXRlRHluYW1pY0NlbGxWYWxpZGF0aW9uSWZBcHBsaWNhYmxlKGEsZCxoKXtjb25zdCBmPXRoaXMuaGVscGVyU2VydmljZS5kZWxldGVLZXlzQW5kSGFzaCh0aGlzLmRhdGFTb3VyY2VbaF0s''@;'; put 'put ''W2EsIm5vTGlua09wdGlvbiJdKSx2PXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UuZmluZChNPT5NLmhhc2g9PT1mJiZkPT09TS5jb2wpO2lmKHYmJnYuZXh0ZW5kZWRfdmFsdWVzJiZ2LmV4dGVuZGVkX3ZhbHVlcy5sZW5ndGg+MCl7Y29uc3QgTT10aGlzLmdldEV4dGVuZGVkVmFsdWVzQnlD''@;'; put 'put ''ZWxsVmFsdWUodixoKTt0aGlzLnNldEV4dGVuZGVkVmFsdWVzVG9DZWxscyh2LGgsTSwhMCl9fWRhdGFzZXRJbmZvTW9kYWxSb3dDbGlja2VkKGEpe3ZvaWQgMCE9PWEuTE9BRF9SRUYmJnRoaXMucm91dGVyLm5hdmlnYXRlKFtgL3N0YWdlLyR7YS5MT0FEX1JFRn1gXSl9dmlld2JveE1hbmFn''@;'; put 'put ''ZXIoKXt0aGlzLnZpZXdib3hlcz0hMH1nZXQgdG90YWxSb3dzQ2hhbmdlZCgpe3JldHVybiB0aGlzLnJvd3NDaGFuZ2VkLnJvd3NVcGRhdGVkK3RoaXMucm93c0NoYW5nZWQucm93c0RlbGV0ZWQrdGhpcy5yb3dzQ2hhbmdlZC5yb3dzQWRkZWR9c2V0Q2VsbEZpbHRlcihhKXtjb25zdCBkPXRo''@;'; put 'put ''aXMuaG90SW5zdGFuY2UuZ2V0U2VsZWN0ZWQoKTtpZighZClyZXR1cm47Y29uc3QgaD1kJiZkWzBdO2lmKGgpe2NvbnN0IGY9aFswXSxNPWhbMV07aWYoZj09PWhbMl0mJk09PT1oWzNdKXtjb25zdCBVPXRoaXMuaG90SW5zdGFuY2UuZ2V0Q2VsbE1ldGEoZixNKTtVJiZVLmZpbHRlcj09PSFh''@;'; put 'put ''JiZ0aGlzLmhvdEluc3RhbmNlLnNldENlbGxNZXRhKGYsTSwiZmlsdGVyIixhKX19fW5nT25Jbml0KCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS51cGRhdGVIb3RUYWJsZVNldHRpbmdzKCksYS5saWNlbmNlU2VydmljZS5ob3RfbGljZW5zZV9rZXkuc3Vic2NyaWJlKGg9''@;'; put 'put ''PnthLmhvdFRhYmxlLmxpY2Vuc2VLZXk9aCxhLnVwZGF0ZUhvdFRhYmxlU2V0dGluZ3MoKX0pLGEuX3F1ZXJ5PWEuc2FzU3RvcmVTZXJ2aWNlLnF1ZXJ5LnN1YnNjcmliZShoPT57aC5saWJkcz09PWEubGliZHMmJihhLndoZXJlU3RyaW5nPWguc3RyaW5nLGEuY2xhdXNlcz1oLm9iail9KTtj''@;'; put 'put ''b25zdCBkPXt9O3R5cGVvZiBhLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW08InUiJiYoYS5saWJkcz1hLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW0sYS5maWx0ZXJfcGs9YS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWQsImVkaXQtcmVjb3JkIj09PWEucm91dGUuc25h''@;'; put 'put ''cHNob3QudXJsWzBdLnBhdGgmJihhLnJlY29yZEFjdGlvbj10eXBlb2YgYS5maWx0ZXJfcGs8InUiPyJFRElUIjoiQUREIiksZC5MSUJEUz1hLmxpYmRzLHR5cGVvZiBhLmZpbHRlcl9wazwidSImJihkLkZJTFRFUl9SSz1wYXJzZUludChhLmZpbHRlcl9waykpLGQuT1VUREVTVD0iV0VCIixh''@;'; put 'put ''LmxpYmRzJiYoWG4uZWRpdG9yLmxpYnJhcnk9YS5saWJkcy5zcGxpdCgiLiIpWzBdLFhuLmVkaXRvci50YWJsZT1hLmxpYmRzLnNwbGl0KCIuIilbMV0pKSxhLmxpYmRzJiYoYS5nZXRkYXRhRXJyb3I9ITEseWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuY2FsbFNlcnZpY2UoZCwiU0FTQ29udHJv''@;'; put 'put ''bFRhYmxlIiwiZWRpdG9ycy9nZXRkYXRhIixhLmxpYmRzKS50aGVuKGg9PnthLmluaXRTZXR1cChoKX0pLmNhdGNoKGg9PnthLmdldGRhdGFFcnJvcj0hMCxhLnRhYmxlVHJ1ZT0hMH0pKX0pKCl9bmdBZnRlclZpZXdJbml0KCl7c2V0VGltZW91dCgoKT0+e3RoaXMuZml4QXJpYUFjY2Vzc2li''@;'; put 'put ''aWxpdHkoKX0sMWUzKSxzZXRUaW1lb3V0KCgpPT57aWYodGhpcy5ob3RUYWJsZUNvbXBvbmVudCYmdGhpcy5ob3RUYWJsZUNvbXBvbmVudC5ob3RJbnN0YW5jZSl7Y29uc3QgYT10aGlzLmhvdFRhYmxlQ29tcG9uZW50LmhvdEluc3RhbmNlLnJvb3RFbGVtZW50O2EmJmEuYWRkRXZlbnRMaXN0''@;'; put 'put ''ZW5lcigibW91c2Vkb3duIixkPT57dGhpcy51cGxvYWRQcmV2aWV3fHx0aGlzLmhvdENsaWNrZWQoKSxzZXRUaW1lb3V0KCgpPT57Y29uc3QgaD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuZGVidWctc3dpdGNoLWl0ZW0iKXx8dm9pZCAwO2gmJmguY2xpY2soKX0sMTAwKX0pfX0sMTAwKX1u''@;'; put 'put ''Z09uRGVzdHJveSgpe3RoaXMuYXJpYU9ic2VydmVyJiYodGhpcy5hcmlhT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHRoaXMuYXJpYU9ic2VydmVyPXZvaWQgMCksdGhpcy5hcmlhQ2hlY2tJbnRlcnZhbCYmKGNsZWFySW50ZXJ2YWwodGhpcy5hcmlhQ2hlY2tJbnRlcnZhbCksdGhpcy5hcmlhQ2hl''@;'; put 'put ''Y2tJbnRlcnZhbD12b2lkIDApfWZpeEFyaWFBY2Nlc3NpYmlsaXR5KCl7Y29uc3QgYT0oKT0+e2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5odC13cmFwcGVyLCAud3RIb2xkZXIsIFtpZF49Imh0XyJdJykuZm9yRWFjaChVPT57VS5yZW1vdmVBdHRyaWJ1dGUoInJvbGUiKSxVLnJlbW92''@;'; put 'put ''ZUF0dHJpYnV0ZSgiYXJpYS1yb3djb3VudCIpLFUucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWNvbGNvdW50IiksVS5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtbXVsdGlzZWxlY3RhYmxlIil9KTtjb25zdCBoPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tyb2xlPSJ0cmVlZ3JpZCJdJyksZj1k''@;'; put 'put ''b2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbcm9sZT0icHJlc2VudGF0aW9uIl0nKTtoLmZvckVhY2goVT0+e1UucmVtb3ZlQXR0cmlidXRlKCJyb2xlIiksVS5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtcm93Y291bnQiKSxVLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1jb2xjb3VudCIpLFUucmVt''@;'; put 'put ''b3ZlQXR0cmlidXRlKCJhcmlhLW11bHRpc2VsZWN0YWJsZSIpfSksZi5mb3JFYWNoKFU9PntVLnF1ZXJ5U2VsZWN0b3JBbGwoImJ1dHRvbiwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFt0YWJpbmRleF0sIFtvbmNsaWNrXSwgW2NvbnRlbnRlZGl0YWJsZV0iKS5sZW5ndGg+MCYmVS5yZW1v''@;'; put 'put ''dmVBdHRyaWJ1dGUoInJvbGUiKX0pLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1thcmlhLXJvd2NvdW50PSItMSJdJykuZm9yRWFjaChVPT57VS5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtcm93Y291bnQiKX0pLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInRhYmxlIikuZm9yRWFjaChV''@;'; put 'put ''PT57VS5nZXRBdHRyaWJ1dGUoInJvbGUiKXx8VS5zZXRBdHRyaWJ1dGUoInJvbGUiLCJ0YWJsZSIpLFUucXVlcnlTZWxlY3RvckFsbCgidGgiKS5mb3JFYWNoKG9lPT57b2UuZ2V0QXR0cmlidXRlKCJzY29wZSIpfHxvZS5zZXRBdHRyaWJ1dGUoInNjb3BlIiwiY29sIil9KX0pLGRvY3VtZW50''@;'; put 'put ''LnF1ZXJ5U2VsZWN0b3JBbGwoImJ1dHRvbiwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtjb250ZW50ZWRpdGFibGVdIikuZm9yRWFjaChVPT57aWYoIVUuZ2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIikmJiFVLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5Iikpe2NvbnN0IHRlPVUu''@;'; put 'put ''dGV4dENvbnRlbnQ/LnRyaW0oKTt0ZSYmVS5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLHRlKX19KX07YSgpLHNldFRpbWVvdXQoYSwxMDApLHNldFRpbWVvdXQoYSw1MDApLHNldFRpbWVvdXQoYSwxZTMpLHNldFRpbWVvdXQoYSwyZTMpLHRoaXMuYXJpYUNoZWNrSW50ZXJ2YWx8fCh0aGlz''@;'; put 'put ''LmFyaWFDaGVja0ludGVydmFsPXNldEludGVydmFsKGEsM2UzKSksdGhpcy5hcmlhT2JzZXJ2ZXJ8fCh0aGlzLmFyaWFPYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcihkPT57bGV0IGg9ITE7ZC5mb3JFYWNoKGY9PnsiYXR0cmlidXRlcyI9PT1mLnR5cGUmJigicm9sZSI9PT1mLmF0dHJp''@;'; put 'put ''YnV0ZU5hbWV8fCJhcmlhLXJvd2NvdW50Ij09PWYuYXR0cmlidXRlTmFtZSkmJihoPSEwKSwiY2hpbGRMaXN0Ij09PWYudHlwZSYmZi5hZGRlZE5vZGVzLmZvckVhY2godj0+e2lmKHYubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSl7Y29uc3QgTT12OyhNLmhhc0F0dHJpYnV0ZSgicm9s''@;'; put 'put ''ZSIpfHxNLmhhc0F0dHJpYnV0ZSgiYXJpYS1yb3djb3VudCIpKSYmKGg9ITApfX0pfSksaCYmc2V0VGltZW91dChhLDUwKX0pLHRoaXMuYXJpYU9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITAsYXR0cmlidXRlczohMCxhdHRyaWJ1dGVGaWx0''@;'; put 'put ''ZXI6WyJyb2xlIiwiYXJpYS1yb3djb3VudCIsImFyaWEtY29sY291bnQiLCJhcmlhLW11bHRpc2VsZWN0YWJsZSJdfSkpfWluaXRTZXR1cChhKXtpZih0aGlzLmhvdEluc3RhbmNlPXRoaXMuaG90VGFibGVDb21wb25lbnQuaG90SW5zdGFuY2UsdGhpcy5nZXRkYXRhRXJyb3J8fCFhfHwhYS5k''@;'; put 'put ''YXRhfHwhdGhpcy5ob3RJbnN0YW5jZSlyZXR1cm47dGhpcy5jb2xzPWEuZGF0YS5jb2xzLHRoaXMuZHNtZXRhPWEuZGF0YS5kc21ldGEsdGhpcy52ZXJzaW9ucz1hLmRhdGEudmVyc2lvbnN8fFtdO2NvbnN0IGQ9dGhpcy5kc21ldGEuZmluZChEPT4iTk9URVMiPT09RC5OQU1FKSxoPXRoaXMu''@;'; put 'put ''ZHNtZXRhLmZpbmQoRD0+IkREX0xPTkdERVNDIj09PUQuTkFNRSksZj10aGlzLmRzbWV0YS5maW5kKEQ9PiJERF9TSE9SVERFU0MiPT09RC5OQU1FKTt0aGlzLmRzTm90ZT1kJiZkLlZBTFVFP2QuVkFMVUU6aCYmaC5WQUxVRT9oLlZBTFVFOmYmJmYuVkFMVUU/Zi5WQUxVRToiIjtjb25zdCB2''@;'; put 'put ''PXRoaXMuaG90SW5zdGFuY2UsTT1hLmRhdGEuYXBwcm92ZXJzO3RoaXMuY29scyYmKHRoaXMuaGVhZGVyQXJyYXk9KGM9Pntjb25zdCBsPVtdO2ZvcihsZXQgYSBvZiBjKSJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iIT09YS5OQU1FJiZsLnB1c2goYS5OQU1FKTtyZXR1cm4gbH0p''@;'; put 'put ''KHRoaXMuY29scykpLE0uZm9yRWFjaChEPT57dGhpcy5hcHByb3ZlcnMucHVzaChELlBFUlNPTk5BTUUpfSksdGhpcy50YWJsZVRydWU9ITAsdGhpcy5saWJkcz1hLmxpYmRzLHRoaXMuaG90VGFibGUuZGF0YT1hLmRhdGEuc2FzZGF0YSx0aGlzLmhlYWRlckNvbHVtbnM9YS5kYXRhLnNhc3Bh''@;'; put 'put ''cmFtc1swXS5DT0xIRUFERVJTLnNwbGl0KCIsIiksdGhpcy5oZWFkZXJQa3M9YS5kYXRhLnNhc3BhcmFtc1swXS5QSy5zcGxpdCgiICIpLHRoaXMuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWc9ISFhLmRhdGEuc2FzcGFyYW1zWzBdLkNMU19GTEFHLHRoaXMuY29sdW1uTGV2ZWxTZWN1cml0eUZs''@;'; put 'put ''YWcmJnRoaXMuc2V0UmVzdHJpY3Rpb25zKHtyZXN0cmljdEFkZFJvdzohMCxyZW1vdmVFZGl0UmVjb3JkQnV0dG9uOiEwLHJlbW92ZUFkZFJlY29yZEJ1dHRvbjohMH0pLHRoaXMuY2hlY2tFbXB0eVJvd1doZW5GaWx0ZXIoKSwtMSE9PXRoaXMuaGVhZGVyQ29sdW1ucy5pbmRleE9mKCJfX19f''@;'; put 'put ''X0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iKSYmKHRoaXMuaGVhZGVyQ29sdW1uc1t0aGlzLmhlYWRlckNvbHVtbnMuaW5kZXhPZigiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIildPSJEZWxldGU/IiksdGhpcy5oZWFkZXJBcnJheT10aGlzLmhlYWRlckNvbHVtbnMuc2xpY2Uo''@;'; put 'put ''MSksIiIhPT1hLmRhdGEuc2FzcGFyYW1zWzBdLkRUVkFSUyYmKHRoaXMuZGF0ZUhlYWRlcnM9YS5kYXRhLnNhc3BhcmFtc1swXS5EVFZBUlMuc3BsaXQoIiAiKSksIiIhPT1hLmRhdGEuc2FzcGFyYW1zWzBdLlRNVkFSUyYmKHRoaXMudGltZUhlYWRlcnM9YS5kYXRhLnNhc3BhcmFtc1swXS5U''@;'; put 'put ''TVZBUlMuc3BsaXQoIiAiKSksIiIhPT1hLmRhdGEuc2FzcGFyYW1zWzBdLkRUVE1WQVJTJiYodGhpcy5kYXRlVGltZUhlYWRlcnM9YS5kYXRhLnNhc3BhcmFtc1swXS5EVFRNVkFSUy5zcGxpdCgiICIpKSxhLmRhdGEueGxfcnVsZXMubGVuZ3RoPjAmJih0aGlzLnhsUnVsZXM9dGhpcy5oZWxw''@;'; put 'put ''ZXJTZXJ2aWNlLmRlZXBDbG9uZShhLmRhdGEueGxfcnVsZXMpKSx0aGlzLmRjVmFsaWRhdG9yPW5ldyBTeWUoYS5kYXRhLnNhc3BhcmFtc1swXSxhLmRhdGEuJHNhc2RhdGEsdGhpcy5jb2xzLGEuZGF0YS5kcXJ1bGVzLGEuZGF0YS5kcWRhdGEpLHRoaXMuY2VsbFZhbGlkYXRpb249dGhpcy5k''@;'; put 'put ''Y1ZhbGlkYXRvci5nZXRSdWxlcygpLHRoaXMuZGF0YVNvdXJjZT1hLmRhdGEuc2FzZGF0YSx0aGlzLiRkYXRhRm9ybWF0cz1hLmRhdGEuJHNhc2RhdGE7Zm9yKGxldCBEPTA7RDx0aGlzLmhlYWRlckNvbHVtbnMubGVuZ3RoO0QrKyl0aGlzLmhvdERhdGFTY2hlbWFbdGhpcy5jZWxsVmFsaWRh''@;'; put 'put ''dGlvbltEXS5kYXRhXT1aX3QodGhpcy5jZWxsVmFsaWRhdGlvbltEXS50eXBlLHRoaXMuY2VsbFZhbGlkYXRpb25bRF0pO3RoaXMuY2hlY2tSb3dMaW1pdCgpLHYudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlLGNvbEhlYWRlcnM6dGhpcy5oZWFkZXJDb2x1bW5zLGNvbHVt''@;'; put 'put ''bnM6dGhpcy5jZWxsVmFsaWRhdGlvbixoZWlnaHQ6dGhpcy5ob3RUYWJsZS5oZWlnaHQsZm9ybXVsYXM6dGhpcy5ob3RUYWJsZS5mb3JtdWxhcyxzdHJldGNoSDoiYWxsIixyZWFkT25seTp0aGlzLmhvdFRhYmxlLnJlYWRPbmx5LGhpZGRlbkNvbHVtbnM6e2luZGljYXRvcnM6ITAsY29sdW1u''@;'; put 'put ''czp0aGlzLmRjVmFsaWRhdG9yLmdldEhpZGRlbkNvbHVtbnMoKX0sbW9kaWZ5Q29sV2lkdGg6ZnVuY3Rpb24oRCxVKXtyZXR1cm4gMD09PVU/NjA6RD41MDA/NTAwOkR9LGNvcHlQYXN0ZTp0aGlzLmhvdFRhYmxlLmNvcHlQYXN0ZSxtYW51YWxDb2x1bW5GcmVlemU6ITEsbXVsdGlDb2x1bW5T''@;'; put 'put ''b3J0aW5nOiEwLG1hbnVhbENvbHVtblJlc2l6ZTohMCxmaWx0ZXJzOiExLG1hbnVhbFJvd1Jlc2l6ZTohMCx2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldDo1MCxyb3dIZWFkZXJzOkQ9PiIgIixyb3dIZWFkZXJXaWR0aDoxNSxyb3dIZWlnaHRzOjI0LG1heFJvd3M6dGhpcy5saWNlbmNlU3Rh''@;'; put 'put ''dGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZHx8MS8wLGludmFsaWRDZWxsQ2xhc3NOYW1lOiJodEludmFsaWQiLGF1dG9XcmFwUm93OiExLGF1dG9XcmFwQ29sOiExLGJpbmRSb3dzV2l0aEhlYWRlcnM6ITEsZHJvcGRvd25NZW51OntpdGVtczp7bWFrZV9yZWFkX29ubHk6e25hbWU6Im1h''@;'; put 'put ''a2VfcmVhZF9vbmx5In0sYWxpZ25tZW50OntuYW1lOiJhbGlnbm1lbnQifSxzcDE6e25hbWU6Ii0tLS0tLS0tLSJ9LGluZm86e25hbWU6InRlc3QgaW5mbyIscmVuZGVyZXI6KEQsVSx0ZSxvZSx2ZSx3ZSk9Pntjb25zdCBGZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7bGV0IFdl''@;'; put 'put ''LG50PSJObyBpbmZvIGZvdW5kIjtpZih0aGlzLmhvdEluc3RhbmNlKXtjb25zdCBkdD10aGlzLmhvdEluc3RhbmNlLmdldFNlbGVjdGVkKCl8fFtdLG10PWR0P2R0WzBdWzFdOi0xLCR0PXRoaXMuaG90SW5zdGFuY2U/LmNvbFRvUHJvcChtdCk7V2U9dGhpcy4kZGF0YUZvcm1hdHM/LnZhcnNb''@;'; put 'put ''JHRdLFdlJiYobnQ9YExBQkVMOiAke1dlPy5sYWJlbH08YnI+VFlQRTogJHtXZT8udHlwZX08YnI+TEVOR1RIOiAke1dlPy5sZW5ndGh9PGJyPkZPUk1BVDogJHtXZT8uZm9ybWF0fWApfXJldHVybiBGZS5pbm5lckhUTUw9bnQsRmV9fX19LGRhdGFTY2hlbWE6dGhpcy5ob3REYXRhU2NoZW1h''@;'; put 'put ''LGNvbnRleHRNZW51OnRoaXMuaG90VGFibGUuc2V0dGluZ3MuY29udGV4dE1lbnUsY3VycmVudEhlYWRlckNsYXNzTmFtZToiY3VzdG9tSCIsYWZ0ZXJHZXRDb2xIZWFkZXI6KEQsVSk9Pntjb25zdCB0ZT10aGlzLmNvbHVtbkhlYWRlcltEXSxvZT10ZSYmdGhpcy5pc0NvbFBrKHRlKSx2ZT10''@;'; put 'put ''ZSYmdGhpcy5pc1JlYWRvbmx5Q29sKHRlKTtvZSYmVS5jbGFzc0xpc3QuYWRkKCJwcmltYXJ5S2V5SGVhZGVyU3R5bGUiKSx2ZSYmIW9lJiZVLmNsYXNzTGlzdC5hZGQoInJlYWRvbmx5Q2VsbCIpLDA9PT1EJiZVLmNsYXNzTGlzdC5hZGQoImZpcnN0Q29sdW1uSGVhZGVyU3R5bGUiKSxVLmNs''@;'; put 'put ''YXNzTGlzdC5hZGQoWG4uaGFuZHNvbnRhYmxlLmRhcmtUYWJsZUhlYWRlckNsYXNzKX0sYWZ0ZXJHZXRDZWxsTWV0YTooRCxVLHRlKT0+e2NvbnN0IG9lPVUmJnRoaXMuaXNSZWFkb25seUNvbChVKSx2ZT10aGlzLmR1cGxpY2F0ZVBrSW5kZXhlcy5pbmNsdWRlcyhEKSYmVT49MSYmVTw9dGhp''@;'; put 'put ''cy5yZWFkT25seUZpZWxkcyx3ZT10ZS5jbGFzc05hbWV8fCIiO2xldCBGZTtGZT1BcnJheS5pc0FycmF5KHdlKT9bLi4ud2VdOndlLnNwbGl0KCIgIikuZmlsdGVyKFdlPT5XZS5sZW5ndGg+MCksb2UmJiFGZS5pbmNsdWRlcygicmVhZG9ubHlDZWxsIikmJkZlLnB1c2goInJlYWRvbmx5Q2Vs''@;'; put 'put ''bCIpLHZlJiYoRmUuaW5jbHVkZXMoImRjLWludmFsaWQtY2VsbCIpfHxGZS5wdXNoKCJkYy1pbnZhbGlkLWNlbGwiKSx0ZS52YWxpZD0hMSx0ZS5kdXBLZXk9ITApLEZlLmxlbmd0aD4wJiYodGUuY2xhc3NOYW1lPUZlLmpvaW4oIiAiKSl9fSwhMSksdGhpcy5ob3RUYWJsZS5oaWRkZW49ITEs''@;'; put 'put ''dGhpcy50b2dnbGVIb3RQbHVnaW4oImNvbnRleHRNZW51IiwhMSksdGhpcy5xdWVyeVRleHQ9YS5kYXRhLnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVCx0aGlzLmNvbHVtbkhlYWRlcj1hLmRhdGEuc2FzcGFyYW1zWzBdLkNPTEhFQURFUlMuc3BsaXQoIiwiKSx0aGlzLmNvbHVtbkhlYWRlclsw''@;'; put 'put ''XT0iRGVsZXRlPyIsdGhpcy5yZWFkT25seUZpZWxkcz1hLmRhdGEuc2FzcGFyYW1zWzBdLlBLQ05ULHYuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb24iLChELFUsdGUsb2UsdmUsd2UpPT57RD09PXRlJiZVPT09b2UmJiExPT09dGhpcy5ob3RUYWJsZS5yZWFkT25seSYmdGhpcy5keW5hbWljQ2Vs''@;'; put 'put ''bFZhbGlkYXRpb24oRCxVKX0pLHYuYWRkSG9vaygiYWZ0ZXJCZWdpbkVkaXRpbmciLCgpPT57dGhpcy5zZXRDZWxsRmlsdGVyKCExKX0pLHYuYWRkSG9vaygiYmVmb3JlS2V5RG93biIsKCk9Pnt0aGlzLnNldENlbGxGaWx0ZXIoITApfSksdi5hZGRIb29rKCJhZnRlckNoYW5nZSIsKEQsVSk9''@;'; put 'put ''PntpZigiZWRpdCI9PT1VKXtjb25zdCB0ZT10aGlzLmhvdEluc3RhbmNlLG9lPURbMF1bMF0sdmU9RFswXVsxXSx3ZT10ZS5wcm9wVG9Db2wodmUpLEZlPXRlLmdldENlbGxNZXRhKG9lLHdlKTtGZSYmITE9PT1GZS5maWx0ZXImJnRlLnNldENlbGxNZXRhKG9lLHdlLCJmaWx0ZXIiLCEwKSx0''@;'; put 'put ''aGlzLmV4ZWN1dGVEeW5hbWljQ2VsbFZhbGlkYXRpb25JZkFwcGxpY2FibGUodmUsd2Usb2UpfX0pLHYuYWRkSG9vaygiYWZ0ZXJSZW5kZXIiLEQ9Pnt0aGlzLmV2ZW50U2VydmljZS5kaXNwYXRjaEV2ZW50KCJyZXNpemUiKSx0aGlzLmZpeEFyaWFBY2Nlc3NpYmlsaXR5KCl9KSx2LmFkZEhv''@;'; put 'put ''b2soImFmdGVyQ2hhbmdlIiwoKT0+e3NldFRpbWVvdXQoKCk9Pnt0aGlzLmZpeEFyaWFBY2Nlc3NpYmlsaXR5KCl9LDUwKX0pLHYuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLChELFUpPT57aWYoRD50aGlzLmRhdGFTb3VyY2UubGVuZ3RoKXtjb25zdCB0ZT1kb2N1bWVudC5xdWVyeVNlbGVj''@;'; put 'put ''dG9yKCIud3RIb2xkZXIiKTtzZXRUaW1lb3V0KCgpPT57dGUmJih0ZS5zY3JvbGxUb3A9dGUuc2Nyb2xsSGVpZ2h0KX0pfX0pLHYuYWRkSG9vaygiYmVmb3JlQ3JlYXRlUm93IiwoRCxVLHRlKT0+e2lmKCF0aGlzLmFkZGluZ05ld1JvdyYmIkNvbnRleHRNZW51Lmluc2VydF9yb3dfYWJvdmUi''@;'; put 'put ''IT09dGUmJiJDb250ZXh0TWVudS5pbnNlcnRfcm93X2JlbG93IiE9PXRlKXJldHVybiExfSksdi5hZGRIb29rKCJiZWZvcmVQYXN0ZSIsKEQsVSk9Pntjb25zdCB0ZT1VWzBdLnN0YXJ0Q29sO0RbMF09RFswXS5tYXAoKG9lLHZlKT0+e2NvbnN0IHdlPXRoaXMuY29sdW1uSGVhZGVyW3RlK3Zl''@;'; put 'put ''XSxGZT0ibnVtIj09PXRoaXMuJGRhdGFGb3JtYXRzPy52YXJzW3dlXT8udHlwZSxXZT0oMCxoNS5pc1NwZWNpYWxNaXNzaW5nKShvZSk7cmV0dXJuIEZlJiYhaXNOYU4ob2UpJiYhV2UmJihvZSo9MSksb2V9KX0pLHYuYWRkSG9vaygiYWZ0ZXJSZW1vdmVSb3ciLCgpPT57dGhpcy5jaGVja1Jv''@;'; put 'put ''d0xpbWl0KCl9KSx2LmFkZEhvb2soImFmdGVyQ3JlYXRlUm93IiwoKT0+e3RoaXMuY2hlY2tSb3dMaW1pdCgpfSksdGhpcy51cGxvYWRVcmw9InNlcnZpY2VzL2VkaXRvcnMvbG9hZGZpbGUiLG51bGwhPT10aGlzLnJlY29yZEFjdGlvbiYmKCJBREQiPT09dGhpcy5yZWNvcmRBY3Rpb24/KHRo''@;'; put 'put ''aXMuYWRkUmVjb3JkKCksdGhpcy5lZGl0UmVjb3JkKG51bGwsdGhpcy5kYXRhU291cmNlLmxlbmd0aC0xLCEwKSk6MT09PXRoaXMuZGF0YVNvdXJjZS5sZW5ndGgmJnRoaXMuZWRpdFJlY29yZChudWxsLDApKSxhLmRhdGEucXVlcnkubGVuZ3RoPjAmJigiaG9tZSI9PT1Ybi5yb290UGFyYW18''@;'; put 'put ''fCJlZGl0b3IiPT09WG4ucm9vdFBhcmFtKSYmMD09PVhuLmVkaXRvci5maWx0ZXIuY2xhdXNlcy5sZW5ndGgmJihYbi5lZGl0b3IuZmlsdGVyLnF1ZXJ5PXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoYS5kYXRhLnF1ZXJ5KSxYbi5lZGl0b3IuZmlsdGVyLmxpYmRzPXRoaXMucm91dGUu''@;'; put 'put ''c25hcHNob3QucGFyYW1zLmxpYk1lbSx0aGlzLnNhc1N0b3JlU2VydmljZS5pbml0aWFsaXplR2xvYmFsRmlsdGVyQ2xhdXNlKCJlZGl0b3IiLHRoaXMuY29scykpLHYucmVuZGVyKCksc2V0VGltZW91dCgoKT0+e3RoaXMuZml4QXJpYUFjY2Vzc2liaWxpdHkoKX0sNTAwKX1zdGF0aWN7dGhp''@;'; put 'put ''cy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShPMSkscWUoRWMpLHFlKG9oKSxxZShNMikscWUoTHUpLHFlKG5sKSxxZSh0MCkscWUoS3MpLHFlKEhzKSxxZShreWUpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPWFyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1l''@;'; put 'put ''ZGl0b3IiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiYoVWEoRzUsNSksVWEoVlN0LDcpLFVhKEJTdCw1KSxVYShqU3QsNSksVWEoelN0LDUpKSwyJmQpe2xldCBmO2dpKGY9bWkoKSkmJihoLmhvdFRhYmxlQ29tcG9uZW50PWYuZmlyc3QpLGdpKGY9bWkoKSkmJihoLmh0PWYu''@;'; put 'put ''Zmlyc3QpLGdpKGY9bWkoKSkmJihoLnVwbG9hZFN0YXRlckNvbXBMaXN0PWYpLGdpKGY9bWkoKSkmJihoLnF1ZXJ5RmlsdGVyQ29tcExpc3Q9ZiksZ2koZj1taSgpKSYmKGguZmlsZVVwbG9hZElucHV0Q29tcExpc3Q9Zil9fSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sc3Rh''@;'; put 'put ''bmRhbG9uZTohMSxkZWNsczoxNzcsdmFyczo3NSxjb25zdHM6W1siaHQiLCIiXSxbImhvdEluc3RhbmNlIiwiIl0sWyJmaWxlUGFzc3dvcmRJbnB1dCIsIiJdLFsiZmlsZVVwbG9hZElucHV0IiwiIl0sWyJ1cGxvYWRTdGF0ZXIiLCIiXSxbInF1ZXJ5RmlsdGVyIiwiIl0sWzEsImNvbnRlbnQt''@;'; put 'put ''YXJlYSIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiJdLFsiYXBwRmlsZURyb3AiLCIiLDEsInJlbGF0aXZlIiwzLCJmaWxlT3ZlciIsImZpbGVEcm9wIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIiwidXBsb2FkZXIiLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbFN0YXRpY0JhY2tkcm9wIiwiY2xy''@;'; put 'put ''TW9kYWxDbG9zYWJsZSIsImNsck1vZGFsT3BlbiJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsImRyb3AtYXJlYSJdLFsxLCJjbHItY29sLW1kLTEyIl0sWzEsImNsci1yb3ciLCJjYXJkLWJsb2NrIiwibXQtMTUiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtYmV0''@;'; put 'put ''d2VlbiJdLFsxLCJjbHItY29sLW1kLWF1dG8iXSxbMSwiZW5jb2RpbmctYmxvY2siXSxbImNscklubGluZSIsIiIsMSwibXQtMCJdLFsidHlwZSIsInJhZGlvIiwiY2xyUmFkaW8iLCIiLCJ2YWx1ZSIsIlVURi04IiwibmFtZSIsImVuY29kaW5nIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2Rl''@;'; put 'put ''bCIsImRpc2FibGVkIl0sWyJ0eXBlIiwicmFkaW8iLCJjbHJSYWRpbyIsIiIsInZhbHVlIiwiV0xBVElOMSIsIm5hbWUiLCJlbmNvZGluZyIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJkaXNhYmxlZCJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTMgZmlsdGVyQnRuIiw0LCJuZ0lmIl0s''@;'; put 'put ''WyJjbGFzcyIsImNsci1jb2wtbWQtMyBlZGl0QnRuIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLXByaW1hcnkgbXItMCIsMywiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1wcmltYXJ5IG1y''@;'; put 'put ''LTAiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImV4Y2VsLXBhcnNpbmcgY2xyLWNvbC1tZC0xMiIsNCwibmdJZiJdLFsxLCJtb2RhbC1mb290ZXIiXSxbMywiY3VycmVudFJlY29yZCIsInJlY29yZEFjdGlvbiIsImxpYmRzIiwicXVlcnlGaWx0ZXIiLCJmaWx0ZXIiLCJzdWJtaXRM''@;'; put 'put ''b2FkaW5nIiwiaGVhZGVyUGtzIiwiY2VsbFZhbGlkYXRpb24iLCJjdXJyZW50UmVjb3JkSW5kZXgiLCJjdXJyZW50UmVjb3JkTG9hZGluZ3MiLCJjdXJyZW50UmVjb3JkRXJyb3JzIiwiY3VycmVudFJlY29yZFZhbGlkYXRvciIsIm9uUmVjb3JkQ2hhbmdlIiwib25SZWNvcmRJbnB1dEZvY3Vz''@;'; put 'put ''ZWQiLCJvblJlY29yZEVkaXRDbG9zZSIsIm9uTmV4dFJlY29yZCIsIm9uUHJldmlvdXNSZWNvcmQiLDQsIm5nSWYiXSxbMSwiY2xyLWZsZXgtMSJdLFsiY2xhc3MiLCJwcm9ncmVzU3RhdGljIHByb2dyZXNzIGxvb3AiLDQsIm5nSWYiXSxbImFwcERyYWdOZHJvcCIsIiIsMSwiY2FyZCIsImJv''@;'; put 'put ''cmRlci0wIiwiYm94LXNoYWRvdy1ub25lLWkiLCJwb3NpdGlvbi1yZWxhdGl2ZSIsImgtMTAwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwiYmFja2dyb3VuZC10cmFuc3BhcmVudCIsMywiZmlsZURyYWdnZWRPdmVyIl0sWzEsImNhcmQtaGVhZGVyIiwiY2xyLXJvdyIsImJ1dHRvbkJh''@;'; put 'put ''ciIsImhlYWRlckJhciIsImNsci1mbGV4LW1kLXJvdyIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiY2xyLWp1c3RpZnktY29udGVudC1sZy1lbmQiXSxbImNsYXNzIiwiY2xyLWNvbC0xMiBjbHItY29sLW1kLTMgY2xyLWNvbC1sZy00IGJhY2tCdG4iLDQsIm5nSWYiXSxbMSwiY2xy''@;'; put 'put ''LWNvbC0xMiIsImNsci1jb2wtbWQtNSIsImNsci1jb2wtbGctNCIsImQtZmxleCIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFzcyIsImVkaXRvci10aXRsZSB0ZXh0LWNlbnRlciBtdC0wIiw0LCJuZ1ZhciJdLFsiY2xhc3MiLCJjbHItY29sLTEyIGNsci1jb2wt''@;'; put 'put ''bWQtNCBjbHItY29sLWxnLTQgYnRuQ3RybCIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTEyIGluZm9CYXIiLDQsIm5nSWYiXSxbMSwiY2FyZC1ibG9jayIsInAtMCIsImNsci1mbGV4LTEiLCJiYWNrZ3JvdW5kLXRyYW5zcGFyZW50IiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNh''@;'; put 'put ''cmQtdGV4dCIsNCwibmdJZiJdLFsxLCJjYXJkLXRleHQiLCJob3RFZGl0b3IiLCJoLTEwMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiIsImJhY2tncm91bmQtdHJhbnNwYXJlbnQiXSxbMSwiaG90LXdyYXBwZXIiLCJjbHItZmxleC0xIl0sWyJpZCIsImhvdFRhYmxlIiwxLCJlZGl0LWhv''@;'; put 'put ''dCIsMywiZGF0YSIsInNldHRpbmdzIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwibXQtMi1pIHctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm1vZGFsIiw0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiJdLFsxLCJtLTAiXSxbInR5cGUi''@;'; put 'put ''LCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWzEsImR1cGxpY2F0ZS1rZXlzLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4i''@;'; put 'put ''XSxbImNsYXNzIiwiZC1ibG9jayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJtb2RhbCB6LWluZGV4LWhpZ2hlc3QiLDQsIm5nSWYiXSxbMSwiZmlsdGVyLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJj''@;'; put 'put ''bHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIiwiY2VudGVyIiwidGV4dC1jZW50ZXIiLCJjb2xvci1kYXJrZXItZ3JheSJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9u''@;'; put 'put ''IiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMs''@;'; put 'put ''ImNsaWNrIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIl0sWzEsIm1vZGFsLWJvZHki''@;'; put 'put ''LCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiZGF0YS1scGlnbm9yZSIsInRydWUiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJpZCIsImZpbGVQYXNzd29yZElucHV0IiwidHlwZSIsInRleHQiLDEsImNsci1pbnB1dCIsImRpc2FibGUtcGFzc3dvcmQtbWFuYWdlciJd''@;'; put 'put ''LFsiY2xhc3MiLCJtLTAgY29sb3ItcmVkIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbGljayIsImRpc2FibGVkIl0sWzMsIm9wZW5DaGFuZ2UiLCJyb3dDbGlja2VkIiwib3BlbiIsImRzbWV0YSIsInZlcnNp''@;'; put 'put ''b25zIl0sWzMsInZpZXdib3hNb2RhbENoYW5nZSIsInZpZXdib3hNb2RhbCJdLFsxLCJjbHItY29sLW1kLTMiLCJmaWx0ZXJCdG4iXSxbMSwiZmlsdGVyQnRuIiwidy0xMDAiXSxbImZvciIsImZpbGUtdXBsb2FkIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsInByb2ZpbGUtYnV0''@;'; put 'put ''dG9ucyIsInctMTAwIl0sWyJoaWRkZW4iLCIiLCJpZCIsImZpbGUtdXBsb2FkIiwidHlwZSIsImZpbGUiLCJhcHBGaWxlU2VsZWN0IiwiIiwzLCJjaGFuZ2UiLCJ1cGxvYWRlciJdLFsxLCJjbHItY29sLW1kLTMiLCJlZGl0QnRuIl0sWzEsImJ0blZpZXciLCJidG4iLCJidG4tc20iLCJidG4t''@;'; put 'put ''c3VjY2VzcyIsInByb2ZpbGUtYnV0dG9ucyIsInctMTAwIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsIm1yLTAiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmltYXJ5Iiwi''@;'; put 'put ''bXItMCIsMywiY2xpY2siXSxbMSwiZXhjZWwtcGFyc2luZyIsImNsci1jb2wtbWQtMTIiXSxbMywib25SZWNvcmRDaGFuZ2UiLCJvblJlY29yZElucHV0Rm9jdXNlZCIsIm9uUmVjb3JkRWRpdENsb3NlIiwib25OZXh0UmVjb3JkIiwib25QcmV2aW91c1JlY29yZCIsImN1cnJlbnRSZWNvcmQi''@;'; put 'put ''LCJyZWNvcmRBY3Rpb24iLCJsaWJkcyIsInF1ZXJ5RmlsdGVyIiwiZmlsdGVyIiwic3VibWl0TG9hZGluZyIsImhlYWRlclBrcyIsImNlbGxWYWxpZGF0aW9uIiwiY3VycmVudFJlY29yZEluZGV4IiwiY3VycmVudFJlY29yZExvYWRpbmdzIiwiY3VycmVudFJlY29yZEVycm9ycyIsImN1cnJl''@;'; put 'put ''bnRSZWNvcmRWYWxpZGF0b3IiXSxbMSwicHJvZ3Jlc1N0YXRpYyIsInByb2dyZXNzIiwibG9vcCJdLFsxLCJjbHItY29sLTEyIiwiY2xyLWNvbC1tZC0zIiwiY2xyLWNvbC1sZy00IiwiYmFja0J0biJdLFsxLCJidG4iLCJpY29uLWNvbGxhcHNlIiwiYnRuLXNtIiwiYnRuLWljb24iLCJidG4t''@;'; put 'put ''ZGltbWVkIiwzLCJyb3V0ZXJMaW5rIl0sWyJzaGFwZSIsImNhcmV0IiwiZGlyIiwibGVmdCIsInNpemUiLCIyMCJdLFsxLCJ0ZXh0Il0sWzEsImJ0biIsImljb24tY29sbGFwc2UiLCJidG4tc20iLCJidG4taWNvbiIsImJ0bi1kaW1tZWQiLCJ2aWV3Ym94LW9wZW4iLDMsImNsaWNrIl0sWyJz''@;'; put 'put ''aGFwZSIsInZpZXctY2FyZHMiLCJzaXplIiwiMjAiXSxbMSwiZWRpdG9yLXRpdGxlIiwidGV4dC1jZW50ZXIiLCJtdC0wIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsInNoYXBlIiwiaW5mby1jaXJjbGUiLCJhcmlhLWxhYmVsIiwiVmlldyBkYXRhc2V0IG1ldGEgaW5mbyIsInNpemUiLCIy''@;'; put 'put ''NCIsMSwiaXMtaGlnaGxpZ2h0IiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImJvbHQiLCJjbGFzcyIsImNvbG9yLXllbGxvdyIsNCwibmdJZiJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiXSxbMSwibXItMTAiLCJ2aWV3LXRhYmxlIiwzLCJyb3V0ZXJMaW5rIl0sWyJz''@;'; put 'put ''aGFwZSIsImJvbHQiLDEsImNvbG9yLXllbGxvdyJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0IiwiY2xyU2l6ZSIsImxnIl0sWzEsImNsci1jb2wtMTIiLCJjbHItY29sLW1kLTQi''@;'; put 'put ''LCJjbHItY29sLWxnLTQiLCJidG5DdHJsIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG5WaWV3IiwiYnRuIiwiaWNvbi1jb2xsYXBzZSIsImJ0bi1zbSIsImJ0bi1pY29uIiwiYnRuLWJsb2NrIiwiYnRuLWRpbW1lZCIsMywiY2xpY2siXSxbInNoYXBlIiwiZmlsdGVyIl0sWyJ0eXBlIiwiYnV0''@;'; put 'put ''dG9uIiwxLCJidG4iLCJpY29uLWNvbGxhcHNlIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLCJidG4tYmxvY2siLDMsImNsaWNrIl0sWyJzaGFwZSIsIm5vdGUiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBpY29uLWNvbGxhcHNlIGJ0bi1zbSBidG4tc3VjY2VzcyBidG4tYmxvY2sg''@;'; put 'put ''bXItMCIsMywiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImljb24tY29sbGFwc2UiLCJidG4tc20iLCJidG4tc3VjY2VzcyIsImJ0bi1ibG9jayIsIm1yLTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsInVwbG9hZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwi''@;'; put 'put ''YnRuLXNtIiwiYnRuLWljb24iLCJidG4tb3V0bGluZS1kYW5nZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInRpbWVzIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwzLCJjbGljayIsImNsckxvYWRpbmciXSxb''@;'; put 'put ''InNoYXBlIiwicGx1cyIsInNpemUiLCIxNiJdLFsic2hhcGUiLCJjaGVjayIsInNpemUiLCIyMCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWljb24iLCJidG4tb3V0bGluZS1kYW5nZXIiLCJidG4tdXBsb2FkLXByZXZpZXciLDMsImNsaWNrIl0sWyJ0eXBlIiwi''@;'; put 'put ''YnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5IGJ0bi11cGxvYWQtcHJldmlldyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwicHJldmlldy1zdWJtaXQiLDMsImNsaWNrIiwiY2xyTG9hZGlu''@;'; put 'put ''ZyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLCJidG4tdXBsb2FkLXByZXZpZXciLDMsImNsaWNrIl0sWzEsImNsci1jb2wtbWQtMTIiLCJpbmZvQmFyIl0sWzEsImNhcmQtdGV4dCJdLFsxLCJoLTcwdmgiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRl''@;'; put 'put ''bnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwic3Bpbm5lciJdLFsxLCJtdC0xMCJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIl0sWyJzaGFwZSIsImVycm9yLXN0YW5kYXJkIiwxLCJlcnJvci1pY29uIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsInR5''@;'; put 'put ''cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwibXQtNS1pIiwzLCJjbGljayJdLFsiY2xyUG9zaXRpb24iLCJ0b3AtcmlnaHQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFsiY2xyUG9zaXRpb24iLCJ0b3AtcmlnaHQiLCJjbHJTaXplIiwibGciXSxb''@;'; put 'put ''MSwibXQtMi1pIiwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJtb2RhbCJdLFsicm9sZSIsImRpYWxvZyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibW9kYWwtZGlhbG9nIiwibW9kYWwtbGciXSxbMSwibW9kYWwtY29udGVudCJdLFsxLCJtb2RhbC1oZWFkZXIiXSxbImFyaWEtbGFiZWwi''@;'; put 'put ''LCJDbG9zZSIsInR5cGUiLCJidXR0b24iLDEsImNsb3NlIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJzaGFwZSIsImNsb3NlIl0sWyJjbGFzcyIsImQtYmxvY2sgdy0xMDAgdGV4dC1jZW50ZXIgY29sb3ItcmVkIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1vZmZzZXQtbWQtMiBjbHItY29s''@;'; put 'put ''LW1kLTgiLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIiwianVzdGlmeS1jb250ZW50LWNlbnRlci1pIl0sWyJpZCIsInN1Ym1pdEJ0biIsInR5cGUiLCJzdWJtaXQiLCJ0YWJpbmRleCIsIjAiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLCJtLTAiLDMsImNsaWNr''@;'; put 'put ''IiwiZGlzYWJsZWQiXSxbImlkIiwiY2FuY2VsU3VibWl0QnRuIiwidHlwZSIsImJ1dHRvbiIsInRhYmluZGV4IiwiMCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWzEsImQtYmxvY2siLCJ3LTEwMCIsInRleHQtY2VudGVyIiwiY29sb3ItcmVkIl0sWzEsImNs''@;'; put 'put ''ci1vZmZzZXQtbWQtMiIsImNsci1jb2wtbWQtOCJdLFsxLCJ0ZXh0LWFyZWEtZnVsbC13aWR0aCJdLFsiZm9yIiwiZm9ybUZpZWxkc184IiwxLCJtYi01IiwiZC1ibG9jayJdLFsiY2xyVGV4dGFyZWEiLCIiLCJ0YWJpbmRleCIsIjAiLCJ0eXBlIiwidGV4dCIsImlkIiwiZm9ybUZpZWxkc184''@;'; put 'put ''IiwxLCJzdWJtaXQtcmVhc29uIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsImRpc2FibGVkIiwidmFsdWUiXSxbMSwiZC1ibG9jayJdLFsxLCJtb2RhbCIsInotaW5kZXgtaGlnaGVzdCJdLFsicm9sZSIsImRpYWxvZyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibW9kYWwtZGlhbG9n''@;'; put 'put ''Il0sWzEsIm0tMCIsImNvbG9yLXJlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe2lmKDEmZCl7Y29uc3QgZj1PbigpO2RlKDAsImRpdiIsNikoMSwiY2xyLW1vZGFsIiw3KSxPdCgiZmlsZU92ZXIiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLmZpbGVPdmVyQmFzZShNKSl9KSgi''@;'; put 'put ''ZmlsZURyb3AiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLmF0dGFjaEZpbGUoTSwhMCkpfSksY2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGZpKGguc2hvd1VwbG9hZE1vZGFsLE0pfHwoaC5zaG93VXBsb2FkTW9kYWw9TSksQ3QoTSl9KSxk''@;'; put 'put ''ZSgyLCJoMyIsOCksUGUoMywiVXBsb2FkIEZpbGUiKSxoZSgpLGRlKDQsImRpdiIsOSkoNSwiZGl2IiwxMCkoNiwic3BhbiIpLFBlKDcsIkRyb3AgZmlsZSBhbnl3aGVyZSB0byB1cGxvYWQhIiksaGUoKSgpLGRlKDgsImRpdiIsMTEpKDksImRpdiIsMTIpKDEwLCJkaXYiLDEzKSgxMSwiZGl2''@;'; put 'put ''IiwxNCkoMTIsImNsci1yYWRpby1jb250YWluZXIiLDE1KSgxMywiY2xyLXJhZGlvLXdyYXBwZXIiKSgxNCwiaW5wdXQiLDE2KSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGZpKGguZW5jb2RpbmcsTSl8fChoLmVuY29kaW5nPU0pLEN0KE0pfSksaGUoKSxk''@;'; put 'put ''ZSgxNSwibGFiZWwiKSxQZSgxNiwiVVRGLTgiKSxoZSgpKCksZGUoMTcsImNsci1yYWRpby13cmFwcGVyIikoMTgsImlucHV0IiwxNyksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxmaShoLmVuY29kaW5nLE0pfHwoaC5lbmNvZGluZz1NKSxDdChNKX0pLGhl''@;'; put 'put ''KCksZGUoMTksImxhYmVsIiksUGUoMjAsIldMQVRJTjEiKSxoZSgpKCkoKSgpKCksZ3QoMjEsWVN0LDYsMSwiZGl2IiwxOCkoMjIsR1N0LDMsMSwiZGl2IiwxOSksZGUoMjMsImRpdiIsMTMpLGd0KDI0LCRTdCwyLDEsImJ1dHRvbiIsMjApKDI1LEtTdCwyLDAsImJ1dHRvbiIsMjEpLGhlKCks''@;'; put 'put ''Z3QoMjYsWFN0LDMsMCwiZGl2IiwyMiksaGUoKSgpKCksR3QoMjcsImRpdiIsMjMpLGhlKCksZ3QoMjgscVN0LDEsMTIsImFwcC1lZGl0LXJlY29yZCIsMjQpLGRlKDI5LCJkaXYiLDI1LDApLGd0KDMxLEpTdCwyLDAsImRpdiIsMjYpLGRlKDMyLCJkaXYiLDI3KSxPdCgiZmlsZURyYWdnZWRP''@;'; put 'put ''dmVyIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLm9uU2hvd1VwbG9hZE1vZGFsKCkpfSksZGUoMzMsImRpdiIsMjgpLGd0KDM0LFFTdCw5LDIsImRpdiIsMjkpLGRlKDM1LCJkaXYiLDMwKSxndCgzNixvTXQsMTAsNiwiaDQiLDMxKSxoZSgpLGd0KDM3LHBNdCw0LDMsImRpdiIsMzIp''@;'; put 'put ''KDM4LGdNdCw1LDEsImRpdiIsMzMpLGhlKCksZGUoMzksImRpdiIsMzQpLGd0KDQwLHlNdCw0LDIsImRpdiIsMzUpLGRlKDQxLCJkaXYiLDM2KSg0MiwiZGl2IiwzNyksR3QoNDMsImhvdC10YWJsZSIsMzgsMSksaGUoKSxkZSg0NSwiZGl2IiksZ3QoNDYsd010LDUsMiwiY2xyLXRvb2x0aXAi''@;'; put 'put ''LDM5KSg0NyxDTXQsMywxLCJwIiw0MCksaGUoKSxndCg0OCx4TXQsMTYsNiwiZGl2Iiw0MSksZGUoNDksImNsci1tb2RhbCIsNDIpLGNpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxmaShoLnN1Ym1pdExpbWl0Tm90aWNlLE0pfHwoaC5zdWJtaXRMaW1p''@;'; put 'put ''dE5vdGljZT1NKSxDdChNKX0pLGRlKDUwLCJoMyIsOCksUGUoNTEsIk5vdGljZSIpLGhlKCksZGUoNTIsImRpdiIsOSkoNTMsInAiLDQzKSxQZSg1NCksaGUoKSgpLGRlKDU1LCJkaXYiLDIzKSg1NiwiYnV0dG9uIiw0NCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdCho''@;'; put 'put ''LnN1Ym1pdExpbWl0Tm90aWNlPSExKX0pLFBlKDU3LCIgQ2FuY2VsICIpLGhlKCksZGUoNTgsImJ1dHRvbiIsNDQpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC51cGxvYWRQYXJzZWRGaWxlcygpLEN0KGguc3VibWl0TGltaXROb3RpY2U9ITEpfSksUGUoNTksIiBTdWJt''@;'; put 'put ''aXQgIiksaGUoKSgpKCksZGUoNjAsImNsci1tb2RhbCIsNDIpLGNpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxmaShoLmJhZEVkaXQsTSl8fChoLmJhZEVkaXQ9TSksQ3QoTSl9KSxkZSg2MSwiaDMiLDgpLFBlKDYyKSxoZSgpLGRlKDYzLCJkaXYiLDkp''@;'; put 'put ''KDY0LCJwIiksUGUoNjUpLGhlKCkoKSxkZSg2NiwiZGl2IiwyMykoNjcsImJ1dHRvbiIsNDQpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5iYWRFZGl0PSExKX0pLFBlKDY4LCIgT2sgIiksaGUoKSgpKCksZGUoNjksImNsci1tb2RhbCIsNDIpLGNpKCJjbHJNb2Rh''@;'; put 'put ''bE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxmaShoLnBrTnVsbCxNKXx8KGgucGtOdWxsPU0pLEN0KE0pfSksZGUoNzAsImgzIiw4KSxQZSg3MSwiRXJyb3IiKSxoZSgpLGRlKDcyLCJkaXYiLDkpKDczLCJwIiksUGUoNzQsIiBOdWxsIHZhbHVlcyBvciBpbmNvcnJlY3Qg''@;'; put 'put ''ZGF0YSB0eXBlcyBjYW5ub3QgYmUgc3VibWl0dGVkIGZvciBQcmltYXJ5IEtleSBjb2x1bW5zICIpLGhlKCkoKSxkZSg3NSwiZGl2IiwyMykoNzYsImJ1dHRvbiIsNDUpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC5wa051bGw9ITEsQ3QoaC5iYWRFZGl0PSExKX0pLFBl''@;'; put 'put ''KDc3LCIgT2sgIiksaGUoKSgpKCksZGUoNzgsImNsci1tb2RhbCIsNDIpLGNpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxmaShoLm5vUGtOdWxsLE0pfHwoaC5ub1BrTnVsbD1NKSxDdChNKX0pLGRlKDc5LCJoMyIsOCksUGUoODAsIkVycm9yIiksaGUo''@;'; put 'put ''KSxkZSg4MSwiZGl2Iiw5KSg4MiwicCIpLFBlKDgzLCJJbmNvcnJlY3QgZGF0YSB0eXBlcyBpbiBub24tUHJpbWFyeSBLZXkgY29sdW1ucyIpLGhlKCkoKSxkZSg4NCwiZGl2IiwyMykoODUsImJ1dHRvbiIsNDUpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC5ub1BrTnVs''@;'; put 'put ''bD0hMSxDdChoLmJhZEVkaXQ9ITEpfSksUGUoODYsIiBPayAiKSxoZSgpKCkoKSxkZSg4NywiY2xyLW1vZGFsIiw0NiksY2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGZpKGgucGtEdXBzLE0pfHwoaC5wa0R1cHM9TSksQ3QoTSl9KSxkZSg4OCwiaDMi''@;'; put 'put ''LDgpLFBlKDg5LCJFcnJvciIpLGhlKCksZGUoOTAsImRpdiIsOSkoOTEsInAiKSxQZSg5MiwiIER1cGxpY2F0ZSB2YWx1ZXMgY2Fubm90IGJlIHN1Ym1pdHRlZCBmb3IgUHJpbWFyeSBLZXkgY29sdW1ucyAiKSxoZSgpLGRlKDkzLCJwIiksUGUoOTQsIkR1cGxpY2F0ZXMgZm91bmQ6IiksaGUo''@;'; put 'put ''KSxndCg5NSxFTXQsMyw0LCJzcGFuIiw0NyksaGUoKSxkZSg5NiwiZGl2IiwyMykoOTcsImJ1dHRvbiIsNDUpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5wa0R1cHM9ITEpfSksUGUoOTgsIiBPayAiKSxoZSgpKCkoKSxkZSg5OSwiY2xyLW1vZGFsIiw0MiksY2ko''@;'; put 'put ''ImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGZpKGgudG9vTG9uZyxNKXx8KGgudG9vTG9uZz1NKSxDdChNKX0pLGRlKDEwMCwiaDMiLDgpLFBlKDEwMSwiRXJyb3IiKSxoZSgpLGRlKDEwMiwiZGl2Iiw5KSgxMDMsInAiKSxQZSgxMDQsIiBUaGUgZm9sbG93''@;'; put 'put ''aW5nIGNvbHVtbnMgaGF2ZSB2YWx1ZXMgdGhhdCBleGNlZWQgbGVuZ3RoIGxpbWl0czogIiksaGUoKSxndCgxMDUsVE10LDIsMywicCIsNDgpLGhlKCksZGUoMTA2LCJkaXYiLDIzKSgxMDcsImJ1dHRvbiIsNDUpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC50b29Mb25n''@;'; put 'put ''PSExLEN0KGguY2xlYW5FeGNlZWQoKSl9KSxQZSgxMDgsIiBPayAiKSxoZSgpKCkoKSgpKCkoKSgpKCksZ3QoMTA5LEFNdCwxNCwwLCJkaXYiLDQ5KSxkZSgxMTAsImNsci1tb2RhbCIsNTApLGNpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxmaShoLmZp''@;'; put 'put ''bHRlcixNKXx8KGguZmlsdGVyPU0pLEN0KE0pfSksZGUoMTExLCJoMyIsNTEpLFBlKDExMiwiIEZpbHRlciBmb3IgdGFibGU6ICIpLGRlKDExMywic3BhbiIpLFBlKDExNCksaGUoKSgpLGRlKDExNSwiZGl2Iiw5KSxndCgxMTYsa010LDIsMCwiYXBwLXF1ZXJ5IiwzOSksaGUoKSxkZSgxMTcs''@;'; put 'put ''ImRpdiIsMjMpKDExOCwiYnV0dG9uIiw1MiksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnJlc2V0RmlsdGVyKCkpfSksUGUoMTE5LCIgcmVzZXQgZmlsdGVyICIpLGhlKCksZGUoMTIwLCJidXR0b24iLDUzKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0''@;'; put 'put ''KGYpLEN0KGguZmlsdGVyPSExKX0pLFBlKDEyMSwiIENhbmNlbCAiKSxoZSgpLGRlKDEyMiwiYnV0dG9uIiw1NCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnNlbmRDbGF1c2UoKSl9KSxQZSgxMjMsIiBPayAiKSxoZSgpKCkoKSxkZSgxMjQsImNsci1tb2RhbCIs''@;'; put 'put ''NDIpLGNpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxmaShoLnF1ZXJ5RXJyLE0pfHwoaC5xdWVyeUVycj1NKSxDdChNKX0pLGRlKDEyNSwiaDMiLDgpLFBlKDEyNiwiRXJyb3IiKSxoZSgpLGRlKDEyNywiZGl2Iiw5KSgxMjgsInAiKSxQZSgxMjkpLGhl''@;'; put 'put ''KCkoKSxkZSgxMzAsImRpdiIsMjMpKDEzMSwiYnV0dG9uIiw1NSksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnF1ZXJ5RXJyPSExKX0pLFBlKDEzMiwiIENhbmNlbCAiKSxoZSgpLGRlKDEzMywiYnV0dG9uIiw0NSksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB3dChmKSxDdChoLnF1ZXJ5RXJyPSExKX0pLFBlKDEzNCwiIE9rICIpLGhlKCkoKSgpLGRlKDEzNSwiY2xyLW1vZGFsIiw1NiksY2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGZpKGguZGlzY2FyZFNvdXJjZUZpbGUsTSl8fChoLmRpc2NhcmRTb3Vy''@;'; put 'put ''Y2VGaWxlPU0pLEN0KE0pfSksZGUoMTM2LCJoMyIsNTEpLFBlKDEzNywiV2FybmluZyIpLGhlKCksZGUoMTM4LCJkaXYiLDkpLFBlKDEzOSwiIFRoaXMgYWN0aW9uIHdpbGwgZGlzY2FyZCB0aGUgc291cmNlIGZpbGUgYW5kIGl0J3MgbG9hZGVkIGRhdGEgIiksZGUoMTQwLCJiIiksUGUoMTQx''@;'; put 'put ''KSxoZSgpLFBlKDE0MiwiIERvIHlvdSB3aXNoIHRvIHByb2NlZWQ/ICIpLGhlKCksZGUoMTQzLCJkaXYiLDIzKSgxNDQsImJ1dHRvbiIsNTMpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5kaXNjYXJkU291cmNlRmlsZT0hMSl9KSxQZSgxNDUsIiBDYW5jZWwgIiks''@;'; put 'put ''aGUoKSxkZSgxNDYsImJ1dHRvbiIsNTcpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC5kaXNjYXJkU291cmNlRmlsZT0hMSxDdChoLmRpc2NhcmRQZW5kaW5nRXhjZWwoITApKX0pLFBlKDE0NywiIE9rICIpLGhlKCkoKSgpLGRlKDE0OCwiY2xyLW1vZGFsIiw1NiksY2ko''@;'; put 'put ''ImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGZpKGguZmlsZVBhc3N3b3JkTW9kYWwsTSl8fChoLmZpbGVQYXNzd29yZE1vZGFsPU0pLEN0KE0pfSksZGUoMTQ5LCJoMyIsNTEpLFBlKDE1MCwiIFBhc3N3b3JkIFByb3RlY3RlZCBGaWxlICIpLGhlKCksZGUo''@;'; put 'put ''MTUxLCJkaXYiLDU4KSgxNTIsInAiLDQzKSxQZSgxNTMsIlBsZWFzZSBlbnRlciBwYXNzd29yZDoiKSxoZSgpLEd0KDE1NCwiaW5wdXQiLDU5LDIpLGhlKCksZGUoMTU2LCJkaXYiLDIzKSxndCgxNTcsRE10LDIsMCwicCIsNjApLGRlKDE1OCwiYnV0dG9uIiw1MyksT3QoImNsaWNrIixmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiB3dChmKSxoLmZpbGVQYXNzd29yZE1vZGFsPSExLEN0KGguZmlsZVBhc3N3b3JkU3ViamVjdC5uZXh0KHZvaWQgMCkpfSksUGUoMTU5LCIgQ2FuY2VsIHVwbG9hZCAiKSxoZSgpLGRlKDE2MCwiYnV0dG9uIiw2MSksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGYpO2Nv''@;'; put 'put ''bnN0IE09ZmEoMTU1KTtyZXR1cm4gaC5maWxlUGFzc3dvcmRNb2RhbD0hMSxDdChoLmZpbGVQYXNzd29yZFN1YmplY3QubmV4dChNLnZhbHVlKSl9KSxQZSgxNjEsIiBVbmxvY2sgIiksaGUoKSgpKCksZGUoMTYyLCJjbHItbW9kYWwiLDU2KSxjaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5j''@;'; put 'put ''dGlvbihNKXtyZXR1cm4gd3QoZiksZmkoaC5tYW51YWxGaWxlRWRpdE1vZGFsLE0pfHwoaC5tYW51YWxGaWxlRWRpdE1vZGFsPU0pLEN0KE0pfSksZGUoMTYzLCJoMyIsNTEpLFBlKDE2NCwiV2FybmluZyIpLGhlKCksZGUoMTY1LCJkaXYiLDkpLFBlKDE2NiwiIE1hbnVhbGx5IGVkaXRpbmcg''@;'; put 'put ''dGhpcyBkYXRhIHdpbGwgbWVhbiB0aGUgc291cmNlIGZpbGUgIiksZGUoMTY3LCJiIiksUGUoMTY4KSxoZSgpLFBlKDE2OSwiIHdpbGwgYmUgZGlzY2FyZGVkLiBEbyB5b3Ugd2lzaCB0byBwcm9jZWVkPyAiKSxoZSgpLGRlKDE3MCwiZGl2IiwyMykoMTcxLCJidXR0b24iLDUzKSxPdCgiY2xp''@;'; put 'put ''Y2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgubWFudWFsRmlsZUVkaXRNb2RhbD0hMSl9KSxQZSgxNzIsIiBDYW5jZWwgIiksaGUoKSxkZSgxNzMsImJ1dHRvbiIsNTcpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC5tYW51YWxGaWxlRWRpdE1vZGFsPSExLEN0''@;'; put 'put ''KGgucHJldmlld1RhYmxlRWRpdENvbmZpcm0oKSl9KSxQZSgxNzQsIiBPayAiKSxoZSgpKCkoKSxkZSgxNzUsImFwcC1kYXRhc2V0LWluZm8iLDYyKSxjaSgib3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGZpKGguZGF0YXNldEluZm8sTSl8fChoLmRhdGFzZXRJbmZvPU0p''@;'; put 'put ''LEN0KE0pfSksT3QoInJvd0NsaWNrZWQiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLmRhdGFzZXRJbmZvTW9kYWxSb3dDbGlja2VkKE0pKX0pLGhlKCksZGUoMTc2LCJhcHAtdmlld2JveGVzIiw2MyksY2koInZpZXdib3hNb2RhbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0''@;'; put 'put ''KGYpLGZpKGgudmlld2JveGVzLE0pfHwoaC52aWV3Ym94ZXM9TSksQ3QoTSl9KSxoZSgpfWlmKDImZCl7Y29uc3QgZj1mYSgxNTUpO2ZlKCksRWUoInVwbG9hZGVyIixoLnVwbG9hZGVyKSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxTdGF0aWNCYWNrZHJvcCIsITEpKCJjbHJNb2Rh''@;'; put 'put ''bENsb3NhYmxlIiwiVmFsaWRhdGluZy1EUSI9PT1oLmV4Y2VsVXBsb2FkU3RhdGUpLGxpKCJjbHJNb2RhbE9wZW4iLGguc2hvd1VwbG9hZE1vZGFsKSxmZSgxMyksbGkoIm5nTW9kZWwiLGguZW5jb2RpbmcpLEVlKCJkaXNhYmxlZCIsIiIhPWguZmlsZW5hbWUpLGZlKDQpLGxpKCJuZ01vZGVs''@;'; put 'put ''IixoLmVuY29kaW5nKSxFZSgiZGlzYWJsZWQiLCIiIT1oLmZpbGVuYW1lKSxmZSgzKSxFZSgibmdJZiIsIWguZXhjZWxGaWxlUGFyc2luZyYmIWgudXBsb2FkTG9hZGluZyksZmUoKSxFZSgibmdJZiIsIWguZXhjZWxGaWxlUGFyc2luZyYmIWgudXBsb2FkTG9hZGluZyksZmUoMiksRWUoIm5n''@;'; put 'put ''SWYiLCJWYWxpZGF0aW5nIiE9PWguZXhjZWxVcGxvYWRTdGF0ZSksZmUoKSxFZSgibmdJZiIsIlZhbGlkYXRpbmctRFEiPT09aC5leGNlbFVwbG9hZFN0YXRlKSxmZSgpLEVlKCJuZ0lmIixoLmV4Y2VsRmlsZVBhcnNpbmcpLGZlKDIpLEVlKCJuZ0lmIixoLmN1cnJlbnRFZGl0UmVjb3JkSW5k''@;'; put 'put ''ZXg+LTEpLGZlKDMpLEVlKCJuZ0lmIiwhaC52YWxpZGF0aW9uRG9uZSYmaC5zdWJtaXQpLGZlKDMpLEVlKCJuZ0lmIixoLnRhYmxlVHJ1ZSksZmUoKSx4cigiY2xyLWNvbC1sZy0xMiIsIWgudGFibGVUcnVlKSxmZSgpLEVlKCJuZ1ZhciIsbzQoNjgsVVN0LG51bGw9PWgubGliZHM/bnVsbDpo''@;'; put 'put ''LmxpYmRzLnNwbGl0KCIuIilbMF0sbnVsbD09aC5saWJkcz9udWxsOmgubGliZHMuc3BsaXQoIi4iKVsxXSkpLGZlKCksRWUoIm5nSWYiLGgudGFibGVUcnVlKSxmZSgpLEVlKCJuZ0lmIiwhdGwoNzEsTnllKS5pbmNsdWRlcyhoLnF1ZXJ5VGV4dCkpLGZlKCksRWUoIm5nQ2xhc3MiLGE0KDcz''@;'; put 'put ''LFpTdCwhdGwoNzIsTnllKS5pbmNsdWRlcyhoLnF1ZXJ5VGV4dCkpKSxmZSgpLEVlKCJuZ0lmIiwhaC50YWJsZVRydWUpLGZlKDMpLHhyKCJoaWRkZW4iLGguaG90VGFibGUuaGlkZGVuKSxFZSgiZGF0YSIsaC5ob3RUYWJsZS5kYXRhKSgic2V0dGluZ3MiLGguaG90VGFibGVTZXR0aW5ncyks''@;'; put 'put ''ZmUoMyksRWUoIm5nSWYiLGgudGFibGVUcnVlJiYhaC5yZXN0cmljdGlvbnMucmVtb3ZlQWRkUmVjb3JkQnV0dG9uKSxmZSgpLEVlKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkIT09aC5JbmZpbml0eSYmaC5kYXRhU291cmNlJiZoLmRhdGFTb3VyY2Uu''@;'; put 'put ''bGVuZ3RoPmgubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQpLGZlKCksRWUoIm5nSWYiLGguc3VibWl0KSxmZSgpLGxpKCJjbHJNb2RhbE9wZW4iLGguc3VibWl0TGltaXROb3RpY2UpLGZlKDUpLElyKCIgRHVlIHRvIGN1cnJlbnQgbGljZW5jZSwgb25seSAiLGgubGlj''@;'; put 'put ''ZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0LCIgcm93cyBpbiBhIGZpbGUgd2lsbCBiZSBzdWJtaXR0ZWQuIFRvIHJlbW92ZSB0aGUgcmVzdHJpY3Rpb24sIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKSxmZSg2KSxsaSgiY2xyTW9kYWxPcGVuIixoLmJhZEVk''@;'; put 'put ''aXQpLGZlKDIpLENyKGguYmFkRWRpdFRpdGxlfHwiRXJyb3IiKSxmZSgzKSxDcihoLmJhZEVkaXRDYXVzZSksZmUoNCksbGkoImNsck1vZGFsT3BlbiIsaC5wa051bGwpLGZlKDkpLGxpKCJjbHJNb2RhbE9wZW4iLGgubm9Qa051bGwpLGZlKDkpLGxpKCJjbHJNb2RhbE9wZW4iLGgucGtEdXBz''@;'; put 'put ''KSxmZSg4KSxFZSgibmdGb3JPZiIsaC5kdXBsaWNhdGVQa0luZGV4ZXMpLGZlKDQpLGxpKCJjbHJNb2RhbE9wZW4iLGgudG9vTG9uZyksZmUoNiksRWUoIm5nRm9yT2YiLGguZXhjZWVkQ2VsbHMpLGZlKDQpLEVlKCJuZ0lmIixoLm51bGxWYXJpYWJsZXMpLGZlKCksbGkoImNsck1vZGFsT3Bl''@;'; put 'put ''biIsaC5maWx0ZXIpLEVlKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoNCksSXIoIiAiLGgubGliZHMsIiAiKSxmZSgyKSxFZSgibmdJZiIsaC5maWx0ZXIpLGZlKDYpLEVlKCJjbHJMb2FkaW5nIixoLnN1Ym1pdExvYWRpbmcpLGZlKDIpLGxpKCJjbHJN''@;'; put 'put ''b2RhbE9wZW4iLGgucXVlcnlFcnIpLGZlKDUpLENyKGgucXVlcnlFcnJNZXNzYWdlKSxmZSg2KSxsaSgiY2xyTW9kYWxPcGVuIixoLmRpc2NhcmRTb3VyY2VGaWxlKSxFZSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDYpLENyKGguZmlsZW5hbWUpLGZl''@;'; put 'put ''KDcpLGxpKCJjbHJNb2RhbE9wZW4iLGguZmlsZVBhc3N3b3JkTW9kYWwpLEVlKCJjbHJNb2RhbFNpemUiLCJtZCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoOSksRWUoIm5nSWYiLGguZmlsZVVubG9ja0Vycm9yKSxmZSgzKSxFZSgiZGlzYWJsZWQiLGYudmFsdWUubGVuZ3RoPDEpLGZl''@;'; put 'put ''KDIpLGxpKCJjbHJNb2RhbE9wZW4iLGgubWFudWFsRmlsZUVkaXRNb2RhbCksRWUoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSg2KSxDcihoLmZpbGVuYW1lKSxmZSg3KSxsaSgib3BlbiIsaC5kYXRhc2V0SW5mbyksRWUoImRzbWV0YSIsaC5kc21ldGEp''@;'; put 'put ''KCJ2ZXJzaW9ucyIsaC52ZXJzaW9ucyksZmUoKSxsaSgidmlld2JveE1vZGFsIixoLnZpZXdib3hlcyl9fSxkZXBlbmRlbmNpZXM6W1J5ZSxSdSxocyxDYSxuYyxORixobCxybCxQMSxVbCxidSxyMCxjMSxJZixMZixDcyxWWCxXWGUsTlgsdkgsazksSTksRDksRzUsZ1MsX0EsTHllLE95ZSxQ''@;'; put 'put ''eWUsUkgsdWFlLFBTdCxIU3QsTlN0LEh5ZV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCBJTXQ9W3twYXRoOiI6bGliTWVtIixjb21wb25lbnQ6Qmp9LHtwYXRoOiI6bGliTWVtLzpmaWx0ZXJJZCIsY29tcG9uZW50OkJqfSx7cGF0aDoiZWRpdC1yZWNvcmQvOmxpYk1l''@;'; put 'put ''bSIsY29tcG9uZW50OkJqfSx7cGF0aDoiZWRpdC1yZWNvcmQvOmxpYk1lbS86ZmlsdGVySWQiLGNvbXBvbmVudDpCan1dO2xldCBSTXQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9k''@;'; put 'put ''PUVpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9eWkoe2ltcG9ydHM6W05hLGV1LmZvckNoaWxkKElNdCksZXVdfSl9fXJldHVybiBjfSkoKSwkRD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7''@;'; put 'put ''dGhpcy5cdTAyNzVtb2Q9RWkoe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj15aSh7aW1wb3J0czpbTmEsdTEsTmEsVWMsbjNdfSl9fXJldHVybiBjfSkoKSxoYWU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19''@;'; put 'put ''c3RhdGlje3RoaXMuXHUwMjc1bW9kPUVpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9eWkoe2ltcG9ydHM6W05hLHUxLE5hLFVjLHB5LEdELG4zXX0pfX1yZXR1cm4gY30pKCk7WUQoKTtsZXQgVnllPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1FaSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPXlpKHtpbXBvcnRzOltOYSx1MSxOYSxVYyxoYWUsZnksQmZlLHd5ZSwkRCxuM119KX19cmV0dXJuIGN9KSgpO1lEKCk7bGV0IExNdD0oKCk9PntjbGFz''@;'; put 'put ''cyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9RWkoe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj15aSh7aW1wb3J0czpbVnllLE5hLFVjLFJNdCx1MSxmeSxweSxuMyxwUyxHRCwkRCxCZmUs''@;'; put 'put ''aGFlXX0pfX1yZXR1cm4gY30pKCksT010PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9bmdPbkRlc3Ryb3koKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1hcih7dHlwZTpj''@;'; put 'put ''LHNlbGVjdG9yczpbWyJhcHAtaG9tZS1yb3V0ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sc3RhbmRhbG9uZTohMSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmR3QoMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W1FnXSxl''@;'; put 'put ''bmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IFBNdD1bInNpZGViYXJOYXYiXSxGTXQ9WyIqIl0sSE10PSgpPT5bIi92aWV3L3VzZXJuYXYvdXNlcnMiXSxOTXQ9KCk9PlsiL3ZpZXcvdXNlcm5hdi9ncm91cHMiXSxWTXQ9KCk9PlsiL3ZpZXcvdXNlcm5hdi9yb2xlcyJdO2Z1''@;'; put 'put ''bmN0aW9uIEJNdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImEiLDE4KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDMpLm5hdmlnYXRlVG9WaWV3ZXIoKSl9KSxQZSgxLCJEYXRhIiksaGUoKX19ZnVuY3Rpb24gak10KGMsbCl7MSZjJiYoZGUoMCwi''@;'; put 'put ''YSIsMTkpLFBlKDEsIkFQSSBFeHBsb3JlciIpLGhlKCkpfWZ1bmN0aW9uIHpNdChjLGwpezEmYyYmKGRlKDAsImEiLDIwKSxQZSgxLCJMaW5lYWdlIiksaGUoKSl9ZnVuY3Rpb24gVU10KGMsbCl7MSZjJiYoZGUoMCwiYSIsMjEpLFBlKDEsIk1ldGFkYXRhIiksaGUoKSl9ZnVuY3Rpb24gWk10''@;'; put 'put ''KGMsbCl7MSZjJiYoZGUoMCwiYSIsMjIpLFBlKDEsIiBVc2VycyIpLGhlKCkpfWZ1bmN0aW9uIFdNdChjLGwpezEmYyYmKGRlKDAsImEiLDIzKSxQZSgxLCJTdWJtaXR0ZWQiKSxoZSgpKX1mdW5jdGlvbiBZTXQoYyxsKXsxJmMmJihkZSgwLCJhIiwyNCksUGUoMSwiVG8gQXBwcm92ZSIpLGhl''@;'; put 'put ''KCkpfWZ1bmN0aW9uIEdNdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1kcm9wZG93bi1tZW51IiksZ3QoMSxCTXQsMiwwLCJhIiwxMSkoMixqTXQsMiwwLCJhIiwxMikoMyx6TXQsMiwwLCJhIiwxMykoNCxVTXQsMiwwLCJhIiwxNCkoNSxaTXQsMiwwLCJhIiwxNSkoNixXTXQsMiwwLCJhIiwx''@;'; put 'put ''NikoNyxZTXQsMiwwLCJhIiwxNyksaGUoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKCksRWUoIm5nSWYiLGEuaXNNYWluUm91dGUoInZpZXciKSksZmUoKSxFZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgidmlldyIpJiYiU0FTVklZQSI9PT1hLnNlcnZlclR5cGUpLGZlKCksRWUoIm5nSWYiLGEu''@;'; put 'put ''aXNNYWluUm91dGUoInZpZXciKSYmIlNBUzkiPT09YS5zZXJ2ZXJUeXBlKSxmZSgpLEVlKCJuZ0lmIixhLmlzTWFpblJvdXRlKCJ2aWV3IikmJiJTQVM5Ij09PWEuc2VydmVyVHlwZSksZmUoKSxFZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgidmlldyIpKSxmZSgpLEVlKCJuZ0lmIixhLmlzTWFp''@;'; put 'put ''blJvdXRlKCJhcHByb3ZlIikpLGZlKCksRWUoIm5nSWYiLGEuaXNNYWluUm91dGUoImFwcHJvdmUiKSl9fWZ1bmN0aW9uICRNdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNykoMSwiY2xyLWRyb3Bkb3duIikoMiwiYnV0dG9uIiw4KSxQZSgzKSxHdCg0LCJjbHItaWNvbiIsOSksaGUoKSxn''@;'; put 'put ''dCg1LEdNdCw4LDcsImNsci1kcm9wZG93bi1tZW51IiwxMCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgzKSxJcigiICIsYS5nZXRTdWJQYWdlKCksIiAiKX19ZnVuY3Rpb24gS010KGMsbCl7MSZjJiZHdCgwLCJjbHItdGFiLWNvbnRlbnQiKX1mdW5jdGlvbiBYTXQoYyxsKXsxJmMm''@;'; put 'put ''Jkd0KDAsImNsci10YWItY29udGVudCIpfWZ1bmN0aW9uIHFNdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10YWIiKSgxLCJidXR0b24iLDI2KSgyLCJwIiwyNyksR3QoMywiY2xyLWljb24iLDMyKSxQZSg0LCIgUm9sZXMgIiksaGUoKSgpLGd0KDUsWE10LDEsMCwiY2xyLXRhYi1jb250ZW50''@;'; put 'put ''IiwzMCksaGUoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKCksRWUoInJvdXRlckxpbmsiLHRsKDIsVk10KSksZmUoNCksRWUoImNscklmQWN0aXZlIixhLmlzTWFpblJvdXRlKCIvdmlldy91c2VybmF2L3JvbGVzIikpfX1mdW5jdGlvbiBKTXQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFi''@;'; put 'put ''cyIsMjUpKDEsImNsci10YWIiKSgyLCJidXR0b24iLDI2KSgzLCJwIiwyNyksR3QoNCwiY2xyLWljb24iLDI4KSxQZSg1LCIgVXNlcnMiKSxoZSgpKCksR3QoNiwiY2xyLXRhYi1jb250ZW50IiksaGUoKSxkZSg3LCJjbHItdGFiIikoOCwiYnV0dG9uIiwyNikoOSwicCIsMjcpLEd0KDEwLCJj''@;'; put 'put ''bHItaWNvbiIsMjkpLFBlKDExLCIgR3JvdXBzIiksaGUoKSgpLGd0KDEyLEtNdCwxLDAsImNsci10YWItY29udGVudCIsMzApLGhlKCksZ3QoMTMscU10LDYsMywiY2xyLXRhYiIsMzEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDIpLEVlKCJyb3V0ZXJMaW5rIix0bCg0LEhNdCkpLGZl''@;'; put 'put ''KDYpLEVlKCJyb3V0ZXJMaW5rIix0bCg1LE5NdCkpLGZlKDQpLEVlKCJjbHJJZkFjdGl2ZSIsYS5pc01haW5Sb3V0ZSgiL3ZpZXcvdXNlcm5hdi9ncm91cHMiKSksZmUoKSxFZSgibmdJZiIsIlNBUzkiPT09YS5zZXJ2ZXJUeXBlKX19ZnVuY3Rpb24gUU10KGMsbCl7MSZjJiYoZGUoMCwiY2xy''@;'; put 'put ''LWRyb3Bkb3duLW1lbnUiKSgxLCJhIiwzMyksUGUoMiwiVGFibGVzIiksaGUoKSxkZSgzLCJhIiwzNCksUGUoNCwiRXhjZWwgTWFwcyIpLGhlKCksZGUoNSwiYSIsMzUpLFBlKDYsIk11bHRpIExvYWQiKSxoZSgpKCkpfWZ1bmN0aW9uIGV4dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNyko''@;'; put 'put ''MSwiY2xyLWRyb3Bkb3duIikoMiwiYnV0dG9uIiw4KSxQZSgzKSxHdCg0LCJjbHItaWNvbiIsOSksaGUoKSxndCg1LFFNdCw3LDAsImNsci1kcm9wZG93bi1tZW51IiwxMCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgzKSxJcigiICIsYS5nZXRTdWJQYWdlKCksIiAiKX19bGV0IHNn''@;'; put 'put ''PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX3JvdXRlcj1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5fc2FzU2VydmljZT1oLHRoaXMuc2Nyb2xsZWRUb0JvdHRvbT1uZXcgWHIsdGhpcy5zaWRlYmFyT3Blbj0hMCx0aGlzLnNpZGViYXJXaWR0aD1udWxsLHRoaXMu''@;'; put 'put ''c2lkZWJhck1heFdpZHRoPW51bGwsdGhpcy5yZXNpemluZz0hMSx0aGlzLnNhc2pzQ29uZmlnPW5ldyBkMi5TQVNqc0NvbmZpZyx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuX3Nhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLnNlcnZlclR5cGU9dGhpcy5fc2FzU2VydmljZS5nZXRTZXJ2''@;'; put 'put ''ZXJUeXBlKCl9bmdPbkluaXQoKXt0aGlzLmV2ZW50U2VydmljZS5vblNpZGViYXJUb2dnbGUuc3Vic2NyaWJlKGE9Pnt0aGlzLnNpZGViYXJPcGVuPWE/YS5vcGVuOiF0aGlzLnNpZGViYXJPcGVuLHRoaXMuZXZlbnRTZXJ2aWNlLmRpc3BhdGNoRXZlbnQoInJlc2l6ZSIpfSl9b25UcmVlU2Ny''@;'; put 'put ''b2xsKGEpe2xldCBkPWEudGFyZ2V0O2Quc2Nyb2xsVG9wPj1kLnNjcm9sbEhlaWdodC1kLm9mZnNldEhlaWdodC0xMCYmdGhpcy5zY3JvbGxlZFRvQm90dG9tLmVtaXQoKX1pc01haW5Sb3V0ZShhKXtyZXR1cm4gdGhpcy5fcm91dGVyLnVybC5pbmNsdWRlcyhhKX1nZXRTdWJQYWdlKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuX3JvdXRlci51cmwuc3BsaXQoIi8iKVsyXX1uYXZpZ2F0ZVRvVmlld2VyKCl7WG4udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249IiIsdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEiKX1yZXNpemVTdGFydCgpe3RoaXMucmVzaXppbmc9ITAsZG9jdW1lbnQu''@;'; put 'put ''Z2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXS5zdHlsZS5jc3NUZXh0PSJ1c2VyLXNlbGVjdDogbm9uZSJ9cmVzaXplRW5kKCl7dGhpcy5yZXNpemluZz0hMSxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLnN0eWxlLmNzc1RleHQ9IiJ9b25Nb3VzZU1vdmUo''@;'; put 'put ''YSl7aWYodGhpcy5yZXNpemluZyl7dGhpcy5zaWRlYmFyV2lkdGg9YS5jbGllbnRYO2xldCBkPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIm5hdi10cmVlIilbMF07dGhpcy5zaWRlYmFyV2lkdGgmJnRoaXMuaXNPdmVyZmxvd24oZCkmJih0aGlzLnNpZGViYXJNYXhXaWR0aD10''@;'; put 'put ''aGlzLnNpZGViYXJXaWR0aD49Mzc1P3RoaXMuc2lkZWJhcldpZHRoKzEwOnRoaXMuc2lkZWJhck1heFdpZHRoKX19b25Nb3VzZVVwKGEpe3RoaXMucmVzaXppbmcmJnRoaXMucmVzaXplRW5kKCl9aXNPdmVyZmxvd24oYSl7cmV0dXJuIGEuc2Nyb2xsV2lkdGg+YS5jbGllbnRXaWR0aH1zdGF0''@;'; put 'put ''aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShubCkscWUoRWMpLHFlKEtzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc2lkZWJhciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJlVh''@;'; put 'put ''KFBNdCw1KSwyJmQpe2xldCBmO2dpKGY9bWkoKSkmJihoLnNpZGViYXJOYXY9Zi5maXJzdCl9fSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJk90KCJtb3VzZW1vdmUiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uTW91c2VNb3ZlKHYpfSwwLE9tKSgibW91c2V1cCIsZnVuY3Rpb24o''@;'; put 'put ''dil7cmV0dXJuIGgub25Nb3VzZVVwKHYpfSwhMSxPbSl9LG91dHB1dHM6e3Njcm9sbGVkVG9Cb3R0b206InNjcm9sbGVkVG9Cb3R0b20ifSxzdGFuZGFsb25lOiExLG5nQ29udGVudFNlbGVjdG9yczpGTXQsZGVjbHM6OSx2YXJzOjEzLGNvbnN0czpbWyJzaWRlYmFyTmF2IiwiIl0sWyJpZCIs''@;'; put 'put ''InNpZGViYXJOYXYiXSxbImNsYXNzIiwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgc3ViLWRyb3Bkb3duIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInAtMTAiLDQsIm5nSWYiXSxbMSwibmF2LWRpdmlkZXIiXSxbMSwibmF2LXRyZWUiLDMsInNjcm9sbCJdLFsxLCJyZXNpemUtaGFuZGxl''@;'; put 'put ''IiwzLCJtb3VzZWRvd24iXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsInN1Yi1kcm9wZG93biJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwxLCJkcm9wZG93bi10b2dnbGUiLCJidG4iLCJidG4tcHJpbWFyeSJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWzQsImNs''@;'; put 'put ''cklmT3BlbiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy92aXlhLWFwaS1leHBsb3JlciIsInJvdXRlckxpbmtBY3RpdmUi''@;'; put 'put ''LCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy9saW5lYWdlIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L21ldGFkYXRh''@;'; put 'put ''Iiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiw0LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJM''@;'; put 'put ''aW5rIiwiL3Jldmlldy9hcHByb3ZlL3N1Ym1pdHRlZCIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvcmV2aWV3L2FwcHJvdmUvdG9hcHByb3ZlIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIs''@;'; put 'put ''NCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsMywiY2xpY2siXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy92aXlhLWFwaS1leHBsb3JlciIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUi''@;'; put 'put ''XSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy9saW5lYWdlIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L21ldGFkYXRhIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2''@;'; put 'put ''ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3Jldmlldy9hcHByb3ZlL3N1Ym1pdHRlZCIsInJvdXRlckxpbmtB''@;'; put 'put ''Y3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvcmV2aWV3L2FwcHJvdmUvdG9hcHByb3ZlIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsxLCJwLTEwIl0sWyJjbHJUYWJMaW5rIiwiIiwxLCJ1c2VyLW5hdi1idG4iLDMsInJvdXRl''@;'; put 'put ''ckxpbmsiXSxbMSwiemVyby1tYXJnaW4iXSxbInNoYXBlIiwidXNlciJdLFsic2hhcGUiLCJ1c2VycyJdLFs0LCJjbHJJZkFjdGl2ZSJdLFs0LCJuZ0lmIl0sWyJzaGFwZSIsImJsb2Nrcy1ncm91cCJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9ob21lL3RhYmxl''@;'; put 'put ''cyIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvaG9tZS9leGNlbC1tYXBzIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9ob21lL211''@;'; put 'put ''bHRpLWxvYWQiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZkKXtjb25zdCBmPU9uKCk7c2EoKSxkZSgwLCJjbHItdmVydGljYWwtbmF2IiwxLDApLGd0KDIsJE10LDYsMSwiZGl2IiwyKSgzLEpNdCwxNCw2LCJjbHItdGFicyIsMyko''@;'; put 'put ''NCxleHQsNiwxLCJkaXYiLDIpLEd0KDUsImRpdiIsNCksZGUoNiwiZGl2Iiw1KSxPdCgic2Nyb2xsIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vblRyZWVTY3JvbGwoTSkpfSksV3IoNyksaGUoKSxkZSg4LCJzcGFuIiw2KSxPdCgibW91c2Vkb3duIixmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB3dChmKSxDdChoLnJlc2l6ZVN0YXJ0KCkpfSksaGUoKSgpfTImZCYmKG1kKCJ3aWR0aCIsaC5zaWRlYmFyV2lkdGgsInB4IikoIm1heC13aWR0aCIsaC5zaWRlYmFyTWF4V2lkdGgsInB4IikseHIoImNsb3NlZCIsIWguc2lkZWJhck9wZW4pKCJyZXNpemluZyIsaC5yZXNpemluZyksZmUo''@;'; put 'put ''MiksRWUoIm5nSWYiLGguaXNNYWluUm91dGUoInZpZXciKSksZmUoKSxFZSgibmdJZiIsaC5pc01haW5Sb3V0ZSgidmlldy91c2VybmF2IikpLGZlKCksRWUoIm5nSWYiLGguaXNNYWluUm91dGUoImhvbWUiKSksZmUoNCkseHIoInJlc2l6aW5nIixoLnJlc2l6aW5nKSl9LGRlcGVuZGVuY2ll''@;'; put 'put ''czpbQ2EsVWwsZHcsSWYsaDYscDYsSDksZjYsZDYsUDksa1gsSVgscjUsVDksQTksUDEsSl9dLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gdHh0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMTMpfWZ1bmN0aW9uIG54dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1P''@;'; put 'put ''bigpO2RlKDAsImNsci1pY29uIiwxNCksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMik7cmV0dXJuIGgubGlicmFyaWVzU2VhcmNoPSIiLEN0KGgubGlicmFyeU9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gcnh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7''@;'; put 'put ''ZGUoMCwiY2xyLXRyZWUtbm9kZSIsOCkoMSwiZGl2Iiw5KSgyLCJpbnB1dCIsMTAsMCksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKTtyZXR1cm4gZmkoZi5saWJyYXJpZXNTZWFyY2gsaCl8fChmLmxpYnJhcmllc1NlYXJjaD1oKSxDdChoKX0pLE90''@;'; put 'put ''KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5saWJyYXJ5T25GaWx0ZXIoKSl9KSxoZSgpLGd0KDQsdHh0LDEsMCwiY2xyLWljb24iLDExKSg1LG54dCwxLDAsImNsci1pY29uIiwxMiksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1mYSgzKSxkPU9lKCk7ZmUoMiksbGko''@;'; put 'put ''Im5nTW9kZWwiLGQubGlicmFyaWVzU2VhcmNoKSxmZSgyKSxFZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxFZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIGl4dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDEzKX1mdW5jdGlvbiBheHQoYyxsKXtpZigxJmMp''@;'; put 'put ''e2NvbnN0IGE9T24oKTtkZSgwLCJjbHItaWNvbiIsMTQpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKSxPZSgpO2NvbnN0IGg9ZmEoMyksZj1PZSgyKS4kaW1wbGljaXQsdj1PZSgpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLEN0KHYudHJlZU9uRmlsdGVyKGYsInRh''@;'; put 'put ''YmxlcyIpKX0pLGhlKCl9fWZ1bmN0aW9uIG94dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDgpKDEsImRpdiIsOSkoMiwiaW5wdXQiLDE5LDEpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDIpLiRpbXBsaWNp''@;'; put 'put ''dDtyZXR1cm4gZmkoZi5zZWFyY2hTdHJpbmcsaCl8fChmLnNlYXJjaFN0cmluZz1oKSxDdChoKX0pLE90KCJrZXl1cCIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoKS50cmVlT25GaWx0ZXIoaCwidGFibGVzIikpfSksaGUoKSxndCg0LGl4''@;'; put 'put ''dCwxLDAsImNsci1pY29uIiwxMSkoNSxheHQsMSwwLCJjbHItaWNvbiIsMTIpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9ZmEoMyksZD1PZSgyKS4kaW1wbGljaXQ7ZmUoMiksbGkoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5nKSxmZSgyKSxFZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUo''@;'; put 'put ''KSxFZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIHN4dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDI2KX1mdW5jdGlvbiBseHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwyNyl9ZnVuY3Rpb24gY3h0KGMsbCl7MSZjJiYoZGUoMCwiY2xyLXRvb2x0aXAtY29udGVu''@;'; put 'put ''dCIsMjkpKDEsInNwYW4iKSxQZSgyLCIgVG8gdW5sb2NrIGFsbCB0YWJsZXMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKSxoZSgpKCkpfWZ1bmN0aW9uIHV4dChjLGwpezEmYyYmKG9pKDApLGd0KDEsY3h0LDMsMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMjgpLHNpKCkp''@;'; put 'put ''fWZ1bmN0aW9uIGR4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci10b29sdGlwIikoMSwiYnV0dG9uIiwyMSksT3QoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkubmdWYXIsZj1PZSgpLiRpbXBsaWNpdCx2PU9lKDIpLiRpbXBsaWNpdCxNPU9lKCk7cmV0dXJu''@;'; put 'put ''IEN0KGg/IiI6TS5vblRhYmxlQ2xpY2soZix2KSl9KSxvaSgyLDIyKSxndCgzLHN4dCwxLDAsImNsci1pY29uIiwyMykoNCxseHQsMSwwLCJjbHItaWNvbiIsMjQpLHNpKCksUGUoNSksaGUoKSxndCg2LHV4dCwyLDAsIm5nLWNvbnRhaW5lciIsMjUpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwu''@;'; put 'put ''bmdWYXIsZD1PZSgpLiRpbXBsaWNpdCxoPU9lKDIpLiRpbXBsaWNpdCxmPU9lKCk7ZmUoKSx4cigiZGMtbG9ja2VkLWNvbnRyb2wiLGEpKCJhY3RpdmUiLGYubGliVGFiQWN0aXZlKGguTElCUkFSWVJFRixkKSksZmUoKSxFZSgibmdTd2l0Y2giLGQuaW5jbHVkZXMoIi1GQyIpKSxmZSgpLEVl''@;'; put 'put ''KCJuZ1N3aXRjaENhc2UiLCEwKSxmZSgpLEVlKCJuZ1N3aXRjaENhc2UiLCExKSxmZSgpLElyKCIgIixkLnJlcGxhY2UoIi1GQyIsIiIpLCIgIiksZmUoKSxFZSgibmdJZiIsYSl9fWZ1bmN0aW9uIGh4dChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10cmVlLW5vZGUiKSxndCgxLGR4dCw3LDks''@;'; put 'put ''ImNsci10b29sdGlwIiwyMCksaGUoKSksMiZjKXtjb25zdCBhPWwuaW5kZXgsZD1PZSgzKTtmZSgpLEVlKCJuZ1ZhciIsYSsxPmQubGljZW5jZVN0YXRlLnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0KX19ZnVuY3Rpb24gZnh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwi''@;'; put 'put ''Y2xyLXRyZWUtbm9kZSIsMTYpLE90KCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpLiRpbXBsaWNpdCx2PU9lKCk7cmV0dXJuIHYudHJlZU5vZGVDbGlja2VkKGgsZiksQ3Qodi5saWI9Zi5MSUJSQVJZUkVGKX0pLGNpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24o''@;'; put 'put ''aCl7d3QoYSk7Y29uc3QgZj1PZSgpLiRpbXBsaWNpdDtyZXR1cm4gZmkoZi5leHBhbmRlZCxoKXx8KGYuZXhwYW5kZWQ9aCksQ3QoaCl9KSxkZSgxLCJwIiwxNyksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKS4kaW1wbGljaXQsZj1PZSgpO3JldHVybiBmLmxpYj1o''@;'; put 'put ''LkxJQlJBUllSRUYsQ3QoZi5saWJyYXJ5T25DbGljayhoLkxJQlJBUllSRUYsaCkpfSksR3QoMiwiY2xyLWljb24iLDE4KSxQZSgzKSxoZSgpLGd0KDQsb3h0LDYsMywiY2xyLXRyZWUtbm9kZSIsMikoNSxoeHQsMiwxLCJjbHItdHJlZS1ub2RlIiwzKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1P''@;'; put 'put ''ZSgpLiRpbXBsaWNpdDt4cigiY2xyLWV4cGFuZGVkIixhLmV4cGFuZGVkKSxsaSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLEVlKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdUYWJsZXMmJiFhLnRhYmxlcyksZmUoMyksSXIoIiAiLGEuTElCUkFSWVJFRiwiICIpLGZlKCksRWUoIm5nSWYiLGEu''@;'; put 'put ''dGFibGVzKSxmZSgpLEVlKCJuZ0Zvck9mIixhLnRhYmxlcyl9fWZ1bmN0aW9uIHB4dChjLGwpe2lmKDEmYyYmKG9pKDApLGd0KDEsZnh0LDYsNywiY2xyLXRyZWUtbm9kZSIsMTUpLHNpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLEVlKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5j''@;'; put 'put ''dGlvbiBneHQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDMwKSgxLCJkaXYiLDMxKSgyLCJzcGFuIiwzMiksUGUoMywiIExvYWRpbmcuLi4gIiksaGUoKSgpKCkpfWZ1bmN0aW9uIG14dChjLGwpezEmYyYmKGRlKDAsInAiLDM2KSxQZSgxLCIgUGxlYXNlIHNlbGVjdCBhIHRhYmxlICIpLGhlKCkp''@;'; put 'put ''fWZ1bmN0aW9uIHZ4dChjLGwpezEmYyYmKGRlKDAsInAiLDM2KSxQZSgxLCIgTm8gRWRpdGFibGUgVGFibGVzIENvbmZpZ3VyZWQgIiksaGUoKSl9ZnVuY3Rpb24geXh0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzMyksR3QoMSwiaW1nIiwzNCksZ3QoMixteHQsMiwwLCJwIiwzNSkoMyx2''@;'; put 'put ''eHQsMiwwLCJwIiwzNSksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoMiksRWUoIm5nSWYiLChudWxsPT1hLnRyZWVOb2RlTGlicmFyaWVzP251bGw6YS50cmVlTm9kZUxpYnJhcmllcy5sZW5ndGgpPjApLGZlKCksRWUoIm5nSWYiLChudWxsPT1hLnRyZWVOb2RlTGlicmFyaWVzP251bGw6''@;'; put 'put ''YS50cmVlTm9kZUxpYnJhcmllcy5sZW5ndGgpPDEpfX1sZXQgYnh0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMucm91dGU9YSx0aGlzLnJvdXRlcj1kLHRoaXMubGljZW5jZVNlcnZpY2U9aCx0aGlzLmhlbHBlclNlcnZpY2U9Zix0aGlzLmV2ZW50U2Vydmlj''@;'; put 'put ''ZT12LHRoaXMuc2FzU2VydmljZT1NLHRoaXMudHJlZU5vZGVMaWJyYXJpZXM9bnVsbCx0aGlzLmxpYnJhcmllc1NlYXJjaD0iIix0aGlzLmxpYj0iIix0aGlzLnRhYmxlPSIiLHRoaXMuZW5jb2Rpbmc9IlVURi04Iix0aGlzLmxvYWRpbmc9ITAsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNl''@;'; put 'put ''bmNlU2VydmljZS5saWNlbmNlU3RhdGV9Y29sbGFwc2VMaWJyYXJ5SXRlbXMoYSxkKXthLmZvckVhY2goaD0+e2guTElCUkFSWUlEIT09ZC5MSUJSQVJZSUQmJihoLmV4cGFuZGVkPSExKX0pfXRyZWVOb2RlQ2xpY2tlZChhLGQpeyJDb2xsYXBzZSI9PT1hLnRhcmdldC50aXRsZSYmdGhpcy5j''@;'; put 'put ''b2xsYXBzZUxpYnJhcnlJdGVtcyh0aGlzLmxpYnJhcmllcyxkKX1saWJyYXJ5T25DbGljayhhLGQpe2QuZXhwYW5kZWQ9IWQuZXhwYW5kZWQsZC5leHBhbmRlZCYmIXRoaXMudGFibGUmJnRoaXMuc2VsZWN0TGlicmFyeShhLCExLGQpLHRoaXMuY29sbGFwc2VMaWJyYXJ5SXRlbXModGhpcy5s''@;'; put 'put ''aWJyYXJpZXMsZCl9c2VsZWN0TGlicmFyeShhLGQsaCl7aC5sb2FkaW5nVGFibGVzPSEwO2xldCBmLHY9W107aWYodGhpcy5saWJzQW5kVGFibGVzJiYoZj10aGlzLmxpYnNBbmRUYWJsZXNbYV0sdGhpcy50YWJsZT12b2lkIDAsIlBsZWFzZSBzZWxlY3QgbGlicmFyeSIhPT1hKSl7bGV0IE09''@;'; put 'put ''Zi5maWx0ZXIoZnVuY3Rpb24oRCl7cmV0dXJuLTE9PT12LmluZGV4T2YoRCkmJih2LnB1c2goRCksITApfSk7dGhpcy50YWJsZXM9TSxYbi5lZGl0b3IubGlicmFyaWVzPXRoaXMubGlicmFyaWVzfVhuLmVkaXRvci5saWJyYXJ5PWEsZHx8dGhpcy5jbGVhckdsb2JhbHNGaWx0ZXIoKSxoLmxv''@;'; put 'put ''YWRpbmdUYWJsZXM9ITEsaC5leHBhbmRlZD0hMH1zZWxlY3RUYWJsZShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2gubGliVGFiPWgubGliKyIuIitoLnRhYmxlLGguc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLFhuLmVkaXRvci50YWJsZT1hLGR8fGguY2xlYXJH''@;'; put 'put ''bG9iYWxzRmlsdGVyKCl9KSgpfWNsZWFyR2xvYmFsc0ZpbHRlcigpe1huLmVkaXRvci5maWx0ZXIubGliZHM9IiIsWG4uZWRpdG9yLmZpbHRlci53aGVyZUNsYXVzZT0iIixYbi5lZGl0b3IuZmlsdGVyLmdyb3VwTG9naWM9IiIsWG4uZWRpdG9yLmZpbHRlci5jbGF1c2VzPVtdLFhuLmVkaXRv''@;'; put 'put ''ci5maWx0ZXIudmFscz1bXSxYbi5lZGl0b3IuZmlsdGVyLmNvbHM9W119bGliVGFiQWN0aXZlKGEsZCl7cmV0dXJuISghdGhpcy5saWJ8fCF0aGlzLnRhYmxlKSYmYT09PXRoaXMubGliJiZkPT09dGhpcy50YWJsZX10cmVlT25GaWx0ZXIoYSxkKXt0aGlzLmhlbHBlclNlcnZpY2UudHJlZU9u''@;'; put 'put ''RmlsdGVyKGEsZCl9bGlicmFyeU9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLnRyZWVOb2RlTGlicmFyaWVzLHRoaXMubGlicmFyaWVzU2VhcmNoLCJMSUJSQVJZUkVGIiksWG4ubGluZWFnZS5saWJyYXJpZXNTZWFyY2g9dGhpcy5saWJyYXJpZXNT''@;'; put 'put ''ZWFyY2h9b25UYWJsZUNsaWNrKGEsZCl7dGhpcy50YWJsZT1hLHRoaXMubGliPWQuTElCUkFSWVJFRix0aGlzLnNlbGVjdFRhYmxlKGEpLHRoaXMuZWRpdFRhYmxlKCl9ZWRpdFRhYmxlKCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvZWRpdG9yLyIrdGhpcy5saWIrIi4iK3RoaXMudGFi''@;'; put 'put ''bGUpfWdldExpYnJhcnlUYWJsZVN0YXRlKCl7aWYobnVsbCE9PVhuLmVkaXRvci50cmVlTm9kZUxpYnJhcmllcyYmKHRoaXMudHJlZU5vZGVMaWJyYXJpZXM9WG4uZWRpdG9yLnRyZWVOb2RlTGlicmFyaWVzKSwiIiE9PVhuLmVkaXRvci5saWJyYXJ5KXt0aGlzLmxpYj1Ybi5lZGl0b3IubGli''@;'; put 'put ''cmFyeTtsZXQgYT1udWxsO3RoaXMudHJlZU5vZGVMaWJyYXJpZXMmJihhPXRoaXMudHJlZU5vZGVMaWJyYXJpZXMuZmluZChkPT5kLkxJQlJBUllSRUY9PT10aGlzLmxpYikpLHRoaXMuc2VsZWN0TGlicmFyeShYbi5lZGl0b3IubGlicmFyeSwhMCxhKX19Z2V0RnJvbUdsb2JhbHMoKXt0aGlz''@;'; put 'put ''LmxpYnNBbmRUYWJsZXM9WG4uZWRpdG9yLmxpYnNBbmRUYWJsZXMsdGhpcy5saWJyYXJpZXM9WG4uZWRpdG9yLmxpYnJhcmllcyx0aGlzLmdldExpYnJhcnlUYWJsZVN0YXRlKCksdGhpcy5sb2FkaW5nPSExfW5nQWZ0ZXJDb250ZW50SW5pdCgpe1huLmVkaXRvci5zdGFydHVwU2V0P3RoaXMu''@;'; put 'put ''Z2V0RnJvbUdsb2JhbHMoKTp0aGlzLmV2ZW50U2VydmljZS5vblN0YXJ0dXBEYXRhTG9hZGVkLnN1YnNjcmliZSgoKT0+e3RoaXMuZ2V0RnJvbUdsb2JhbHMoKX0pfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHFlKG5sKSxxZSh0MCkscWUoTzEp''@;'; put 'put ''LHFlKEx1KSxxZShFYykscWUoS3MpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPWFyKHt0eXBlOmMsc2VsZWN0b3JzOltbImhvbWUtY29tcG9uZW50Il1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxzdGFuZGFsb25lOiExLGRlY2xzOjgsdmFyczo0LGNvbnN0czpbWyJzZWFy''@;'; put 'put ''Y2hMaWJUcmVlSW5wdXQiLCIiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQtYmxvY2siXSxbImNsYXNzIiwic3Bpbm5lci13cmFwcGVyLWZ1bGxw''@;'; put 'put ''YWdlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5vLXRhYmxlLXNlbGVjdGVkIiw0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwiYXBwU3RlYWxGb2N1cyIsIiIsInBsYWNlaG9sZGVyIiwiTGlicmFyaWVzIiwibmFtZSIs''@;'; put 'put ''ImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVz''@;'; put 'put ''IiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciXSxbMSwibS0wIiwi''@;'; put 'put ''Y3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlRhYmxlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtl''@;'; put 'put ''eXVwIiwibmdNb2RlbCJdLFs0LCJuZ1ZhciJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFszLCJuZ1N3aXRjaCJdLFsic2hhcGUiLCJib2x0Iiw0LCJuZ1N3aXRjaENhc2UiXSxbInNoYXBlIiwidGFibGUiLDQsIm5nU3dpdGNoQ2Fz''@;'; put 'put ''ZSJdLFs0LCJuZ0lmIl0sWyJzaGFwZSIsImJvbHQiXSxbInNoYXBlIiwidGFibGUiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIl0sWzEsInNwaW5u''@;'; put 'put ''ZXItd3JhcHBlci1mdWxscGFnZSJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWyJzcmMiLCIvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2VzL3NlbGVjdC10YWJs''@;'; put 'put ''ZS1wbmciLCJhbHQiLCJzZWxlY3QgdGFibGUgaWNvbiIsMSwic2VsZWN0LXRhYmxlLWljb24iXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgY29sb3ItZ3JheSBtdC0xMCIsImNkcy10ZXh0Iiwic2VjdGlvbiIsNCwibmdJZiJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIiwxLCJ0ZXh0LWNlbnRlciIs''@;'; put 'put ''ImNvbG9yLWdyYXkiLCJtdC0xMCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImFwcC1zaWRlYmFyIikoMSwiY2xyLXRyZWUiKSxndCgyLHJ4dCw2LDMsImNsci10cmVlLW5vZGUiLDIpKDMscHh0LDIsMSwibmctY29udGFpbmVyIiwzKSxoZSgpKCksZGUoNCwiZGl2Iiw0''@;'; put 'put ''KSg1LCJkaXYiLDUpLGd0KDYsZ3h0LDQsMCwiZGl2Iiw2KSg3LHl4dCw0LDIsImRpdiIsNyksaGUoKSgpKSwyJmQmJihmZSgyKSxFZSgibmdJZiIsKG51bGw9PWgudHJlZU5vZGVMaWJyYXJpZXM/bnVsbDpoLnRyZWVOb2RlTGlicmFyaWVzLmxlbmd0aCk+MCksZmUoKSxFZSgibmdGb3JPZiIs''@;'; put 'put ''aC50cmVlTm9kZUxpYnJhcmllcyksZmUoMyksRWUoIm5nSWYiLGgubG9hZGluZyksZmUoKSxFZSgibmdJZiIsIWgubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W25jLGhsLHJsLHcyLG1oLHU1LFVsLGMxLElmLE1kLGs5LEk5LEQ5LHNnLGhzLENhLENmLGw0LGdTLG9nXSxlbmNhcHN1bGF0aW9u''@;'; put 'put ''OjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IF94dD1jPT57Zm9yKGNvbnN0IGwgaW4gYylpZigiX19yb3dOdW1fXyIhPT1sKXJldHVybiExO3JldHVybiEwfSxmYWU9Yz0+e2NvbnN0IGE9Yy5tYXRjaCgvUlxbKFxkKylcXUNcWyhcZCspXF0vKTtyZXR1cm4gYT97cm93OnBhcnNlSW50KGFbMV0s''@;'; put 'put ''MTApLGNvbHVtbjpwYXJzZUludChhWzJdLDEwKX06bnVsbH0sQnllPShjLGwpPT57aWYoYy5zdGFydHNXaXRoKCJBQlNPTFVURSAiKSYmKGM9Yy5yZXBsYWNlKCJBQlNPTFVURSAiLCIiKSksYy5zdGFydHNXaXRoKCJSRUxBVElWRSAiKSl7Y29uc3QgYT1mYWUoYyk7aWYoYSl7Y29uc3R7cm93''@;'; put 'put ''OmQsY29sdW1uOmh9PWE7Yz1qdS51dGlscy5lbmNvZGVfY2VsbCh7cjpkLTEsYzpoLTF9KX19aWYoYy5zdGFydHNXaXRoKCJNQVRDSCAiKSl7bGV0IGE9IiI7Y29uc3QgZD1jLm1hdGNoKC9DXFtcZCtcXTooLispLyk7ZCYmKGE9ZFsxXSk7Y29uc3QgZj1jLnNwbGl0KCIgIilbMV07bGV0IHY9''@;'; put 'put ''IiIsTT0tMSxEPSIiO2lmKGlzTmFOKE51bWJlcihmKSk/dj1mOk09cGFyc2VJbnQoZiksLTEhPT1NKXtjb25zdCBvZT1sW00tMV07Zm9yKGNvbnN0IHZlIGluIG9lKWlmKCJfX3Jvd051bV9fIiE9PXZlJiZvZVt2ZV09PT1hKXtEPXZlK007YnJlYWt9fWVsc2UgZm9yKGxldCBvZT0wO29lPGwu''@;'; put 'put ''bGVuZ3RoO29lKyspaWYobFtvZV1bdl09PT1hKXtEPXYrKG9lKzEpO2JyZWFrfWNvbnN0IFU9anUudXRpbHMuZGVjb2RlX2NlbGwoRCksdGU9ZmFlKGMpO2lmKHRlKXtjb25zdHtyb3c6b2UsY29sdW1uOnZlfT10ZTtjPWp1LnV0aWxzLmVuY29kZV9jZWxsKHtyOlUucitvZSxjOlUuYyt2ZX0p''@;'; put 'put ''fX1yZXR1cm4gY30sQ3h0PVsiZmlsZVVwbG9hZElucHV0Il07ZnVuY3Rpb24gU3h0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwyOCksR3QoMSwiY2xyLXNwaW5uZXIiLDI5KSxoZSgpKX1mdW5jdGlvbiBNeHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwzMCl9ZnVuY3Rpb24geHh0KGMsbCl7''@;'; put 'put ''aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLWljb24iLDMxKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpO3JldHVybiBoLnNlYXJjaFN0cmluZz0iIixDdChoLnhsbWFwTGlzdE9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gRXh0KGMsbCl7aWYoMSZj''@;'; put 'put ''KXtjb25zdCBhPU9uKCk7b2koMCksZGUoMSwiY2xyLXRyZWUtbm9kZSIpKDIsImJ1dHRvbiIsMzIpLE90KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoKS54bG1hcE9uQ2xpY2soaCkpfSksR3QoMywiY2xyLWljb24iLDMzKSxQZSg0KSxo''@;'; put 'put ''ZSgpKCksc2koKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1PZSgpO2ZlKDIpLHhyKCJhY3RpdmUiLGQuaXNBY3RpdmVYTE1hcChhLmlkKSksZmUoMiksSXIoIiAiLGEuaWQsIiAiKX19ZnVuY3Rpb24gVHh0KGMsbCl7MSZjJiYoZGUoMCwicCIsMzcpLFBlKDEsIiBQbGVhc2Ugc2Vs''@;'; put 'put ''ZWN0IGEgbWFwICIpLGhlKCkpfWZ1bmN0aW9uIEF4dChjLGwpezEmYyYmKGRlKDAsInAiLDM3KSxQZSgxLCIgTm8gZXhjZWwgbWFwIGlzIGZvdW5kICIpLGhlKCkpfWZ1bmN0aW9uIGt4dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMzQpLEd0KDEsImltZyIsMzUpLGd0KDIsVHh0LDIsMCwi''@;'; put 'put ''cCIsMzYpKDMsQXh0LDIsMCwicCIsMzYpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDIpLEVlKCJuZ0lmIixhLnhsbWFwcy5sZW5ndGg+MCksZmUoKSxFZSgibmdJZiIsYS54bG1hcHMubGVuZ3RoPDEpfX1mdW5jdGlvbiBEeHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDM4KSgxLCJz''@;'; put 'put ''cGFuIiwzOSksUGUoMiwiIExvYWRpbmcuLi4gIiksaGUoKSxkZSgzLCJkaXYiKSg0LCJoNCIpLFBlKDUpLGhlKCkoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSg1KSxDcihhLmlzTG9hZGluZ0Rlc2MpfX1mdW5jdGlvbiBJeHQoYyxsKXsxJmMmJkd0KDAsImNsci10YWItY29udGVudCIpfWZ1''@;'; put 'put ''bmN0aW9uIFJ4dChjLGwpezEmYyYmR3QoMCwiY2xyLXRhYi1jb250ZW50Iil9ZnVuY3Rpb24gTHh0KGMsbCl7MSZjJiZ6bCgwKX1mdW5jdGlvbiBPeHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDQwKSxPdCgiZmlsZURyYWdnZWRPdmVyIixmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB3dChhKSxDdChPZSgpLm9uU2hvd1VwbG9hZE1vZGFsKCkpfSksZGUoMSwiY2xyLXRhYnMiKSgyLCJjbHItdGFiIikoMywiYnV0dG9uIiw0MSksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKTtyZXR1cm4gQ3QoaC5zZWxlY3RlZFRhYj1oLlRhYnNFbnVtLlJ1bGVz''@;'; put 'put ''KX0pLFBlKDQsIlJ1bGVzIiksaGUoKSxndCg1LEl4dCwxLDAsImNsci10YWItY29udGVudCIsNDIpLGhlKCksZGUoNiwiY2xyLXRhYiIpKDcsImJ1dHRvbiIsNDEpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCk7cmV0dXJuIEN0KGguc2VsZWN0ZWRUYWI9aC5UYWJz''@;'; put 'put ''RW51bS5EYXRhKX0pLFBlKDgsIkRhdGEiKSxoZSgpLGd0KDksUnh0LDEsMCwiY2xyLXRhYi1jb250ZW50Iiw0MiksaGUoKSgpLGd0KDEwLEx4dCwxLDAsIm5nLWNvbnRhaW5lciIsNDMpLGRlKDExLCJkaXYiLDQ0KSgxMiwiaDMiLDQ1KSxQZSgxMyksaGUoKSxkZSgxNCwiaSIsNDUpLFBlKDE1''@;'; put 'put ''KSxoZSgpLGRlKDE2LCJwIiw0NSksUGUoMTcsIiBSdWxlcyBTb3VyY2U6ICIpLGRlKDE4LCJhIiw0NiksUGUoMTkpLGhlKCkoKSxkZSgyMCwicCIsNDUpLFBlKDIxLCIgVGFyZ2V0IGRhdGFzZXQ6ICIpLGRlKDIyLCJhIiw0NiksUGUoMjMpLGhlKCkoKSgpLGRlKDI0LCJkaXYiLDQ3KSxHdCgy''@;'; put 'put ''NSwiaG90LXRhYmxlIiw0OCksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpLGQ9ZmEoNDEpO2ZlKDUpLEVlKCJjbHJJZkFjdGl2ZSIsYS5zZWxlY3RlZFRhYj09PWEuVGFic0VudW0uUnVsZXMpLGZlKDQpLEVlKCJjbHJJZkFjdGl2ZSIsYS5zZWxlY3RlZFRhYj09PWEuVGFic0VudW0uRGF0''@;'; put 'put ''YSksZmUoKSxFZSgibmdUZW1wbGF0ZU91dGxldCIsZCksZmUoMyksSXIoIiAiLGEuc2VsZWN0ZWRYTE1hcC5pZCwiICIpLGZlKDIpLENyKGEuc2VsZWN0ZWRYTE1hcC5kZXNjcmlwdGlvbiksZmUoMyksRWUoInJvdXRlckxpbmsiLCIvdmlldy9kYXRhLyIrYS5ydWxlc1NvdXJjZSksZmUoKSxJ''@;'; put 'put ''cigiICIsYS5ydWxlc1NvdXJjZSwiICIpLGZlKDMpLEVlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvZGF0YS8iK2Euc2VsZWN0ZWRYTE1hcC50YXJnZXREUyksZmUoKSxJcigiICIsYS5zZWxlY3RlZFhMTWFwLnRhcmdldERTLCIgIiksZmUoMiksRWUoImRhdGEiLGEuc2VsZWN0ZWRUYWI9PT1hLlRh''@;'; put 'put ''YnNFbnVtLlJ1bGVzP2EueGxtYXBSdWxlczphLnhsRGF0YSkoInNldHRpbmdzIixhLmhvdFRhYmxlU2V0dGluZ3MpfX1mdW5jdGlvbiBQeHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDUxKSgxLCJidXR0b24iLDUyKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHd0KGEpLEN0KE9lKDIpLm9uU2hvd1VwbG9hZE1vZGFsKCkpfSksR3QoMiwiY2xyLWljb24iLDUzKSxkZSgzLCJzcGFuIiksUGUoNCwiVXBsb2FkIiksaGUoKSgpKCl9fWZ1bmN0aW9uIEZ4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsNTEpKDEsImJ1dHRvbiIsNTIp''@;'; put 'put ''LE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikuc3VibWl0RXhjZWwoKSl9KSxHdCgyLCJjbHItaWNvbiIsNTMpLGRlKDMsInNwYW4iKSxQZSg0LCJTdWJtaXQiKSxoZSgpKCkoKX19ZnVuY3Rpb24gSHh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwi''@;'; put 'put ''ZGl2Iiw1MSkoMSwiYnV0dG9uIiw1NCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5kaXNjYXJkRXh0cmFjdGVkRGF0YSgpKX0pLEd0KDIsImNsci1pY29uIiw1NSksZGUoMywic3BhbiIpLFBlKDQsIkRpc2NhcmQiKSxoZSgpKCkoKX19ZnVuY3Rpb24gTnh0''@;'; put 'put ''KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw0OSksZ3QoMSxQeHQsNSwwLCJkaXYiLDUwKSgyLEZ4dCw1LDAsImRpdiIsNTApKDMsSHh0LDUsMCwiZGl2Iiw1MCksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSxFZSgibmdJZiIsYS5zdGF0dXM9PT1hLlN0YXR1c0VudW0uUmVhZHlUb1Vw''@;'; put 'put ''bG9hZCksZmUoKSxFZSgibmdJZiIsYS5zdGF0dXM9PT1hLlN0YXR1c0VudW0uUmVhZHlUb1N1Ym1pdCksZmUoKSxFZSgibmdJZiIsYS5zdGF0dXM9PT1hLlN0YXR1c0VudW0uUmVhZHlUb1N1Ym1pdCl9fXZhciByMz1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5vTWFwU2VsZWN0ZWQ9MF09Ik5v''@;'; put 'put ''TWFwU2VsZWN0ZWQiLGNbYy5GZXRjaGluZ1J1bGVzPTFdPSJGZXRjaGluZ1J1bGVzIixjW2MuUmVhZHlUb1VwbG9hZD0yXT0iUmVhZHlUb1VwbG9hZCIsY1tjLkV4dHJhY3RpbmdEYXRhPTNdPSJFeHRyYWN0aW5nRGF0YSIsY1tjLlJlYWR5VG9TdWJtaXQ9NF09IlJlYWR5VG9TdWJtaXQiLGNb''@;'; put 'put ''Yy5TdWJtaXR0aW5nRXh0cmFjdGVkRGF0YT01XT0iU3VibWl0dGluZ0V4dHJhY3RlZERhdGEiLGNbYy5TdWJtaXR0aW5nPTZdPSJTdWJtaXR0aW5nIixjfShyM3x8e30pLG1TPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuUnVsZXM9MF09IlJ1bGVzIixjW2MuRGF0YT0xXT0iRGF0YSIsY30obVN8''@;'; put 'put ''fHt9KTtsZXQganllPSgoKT0+e2NsYXNzIGN7Z2V0IGhvdFRhYmxlU2V0dGluZ3MoKXtyZXR1cm57bXVsdGlDb2x1bW5Tb3J0aW5nOiEwLHZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0OjUwLGNvbEhlYWRlcnM6dGhpcy5zZWxlY3RlZFRhYj09PXRoaXMuVGFic0VudW0uUnVsZXM/dGhpcy54''@;'; put 'put ''bG1hcFJ1bGVzSGVhZGVyczp0aGlzLnhsVXBsb2FkSGVhZGVyLGNvbHVtbnM6dGhpcy5zZWxlY3RlZFRhYj09PXRoaXMuVGFic0VudW0uUnVsZXM/dGhpcy54bG1hcFJ1bGVzQ29sdW1uczp0aGlzLnhsVXBsb2FkQ29sdW1ucyxmaWx0ZXJzOiEwLGhlaWdodDoiMTAwJSIsc3RyZXRjaEg6ImFs''@;'; put 'put ''bCIsYWZ0ZXJHZXRDb2xIZWFkZXI6dGhpcy5hZnRlckdldENvbEhlYWRlcixtb2RpZnlDb2xXaWR0aDp0aGlzLm1heFdpZHRoQ2hlY2tlcixjZWxsczp0aGlzLmdldENlbGxDb25maWd1cmF0aW9uLG1heFJvd3M6dGhpcy5ob3RUYWJsZU1heFJvd3MsbWFudWFsQ29sdW1uUmVzaXplOiEwLHJv''@;'; put 'put ''d0hlYWRlcnM6dGhpcy5yb3dIZWFkZXJzLHJvd0hlYWRlcldpZHRoOjE1LHJvd0hlaWdodHM6MjAsbGljZW5zZUtleTp0aGlzLmhvdFRhYmxlTGljZW5zZUtleSxjbGFzc05hbWU6Imh0RGFyayJ9fWNvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQpe3RoaXMuZXZlbnRTZXJ2aWNlPWEsdGhpcy5s''@;'; put 'put ''aWNlbmNlU2VydmljZT1kLHRoaXMubG9nZ2VyU2VydmljZT1oLHRoaXMucm91dGU9Zix0aGlzLnJvdXRlcj12LHRoaXMuc2FzU3RvcmVTZXJ2aWNlPU0sdGhpcy5zYXNTZXJ2aWNlPUQsdGhpcy5jb250ZW50Q29udGFpbmVyQ2xhc3M9ITAsdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdD1u''@;'; put 'put ''ZXcgRGcsdGhpcy5TdGF0dXNFbnVtPXIzLHRoaXMuVGFic0VudW09bVMsdGhpcy5zZWxlY3RlZFRhYj1tUy5SdWxlcyx0aGlzLnJ1bGVzU291cmNlPVhuLmRjTGliKyIuTVBFX1hMTUFQX1JVTEVTIix0aGlzLnhsbWFwcz1bXSx0aGlzLnNlbGVjdGVkWExNYXA9dm9pZCAwLHRoaXMuc2VhcmNo''@;'; put 'put ''U3RyaW5nPSIiLHRoaXMueGxtYXBzTG9hZGluZz0hMCx0aGlzLmlzTG9hZGluZz0hMSx0aGlzLmlzTG9hZGluZ0Rlc2M9IiIsdGhpcy5zdGF0dXM9cjMuTm9NYXBTZWxlY3RlZCx0aGlzLnhsbWFwUnVsZXNIZWFkZXJzPVsiWExNQVBfU0hFRVQiLCJYTE1BUF9SQU5HRV9JRCIsIlhMTUFQX1NU''@;'; put 'put ''QVJUIiwiWExNQVBfRklOSVNIIl0sdGhpcy54bG1hcFJ1bGVzQ29sdW1ucz1be2RhdGE6IlhMTUFQX1NIRUVUIn0se2RhdGE6IlhMTUFQX1JBTkdFX0lEIn0se2RhdGE6IlhMTUFQX1NUQVJUIn0se2RhdGE6IlhMTUFQX0ZJTklTSCJ9XSx0aGlzLnhsbWFwUnVsZXM9W10sdGhpcy54bFVwbG9h''@;'; put 'put ''ZEhlYWRlcj1bIlhMTUFQX1JBTkdFX0lEIiwiUk9XX05PIiwiQ09MX05PIiwiVkFMVUVfVFhUIl0sdGhpcy54bFVwbG9hZENvbHVtbnM9W3tkYXRhOiJYTE1BUF9SQU5HRV9JRCJ9LHtkYXRhOiJST1dfTk8ifSx7ZGF0YToiQ09MX05PIn0se2RhdGE6IlZBTFVFX1RYVCJ9XSx0aGlzLnhsRGF0''@;'; put 'put ''YT1bXSx0aGlzLnNob3dVcGxvYWRNb2RhbD0hMSx0aGlzLmhhc0Jhc2VEcm9wWm9uZU92ZXI9ITEsdGhpcy5maWxlbmFtZT0iIix0aGlzLnN1Ym1pdExpbWl0Tm90aWNlPSExLHRoaXMudXBsb2FkZXI9bmV3IGVhZSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2Vu''@;'; put 'put ''Y2VTdGF0ZSx0aGlzLmhvdFRhYmxlTGljZW5zZUtleT12b2lkIDAsdGhpcy5ob3RUYWJsZU1heFJvd3M9dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZHx8MS8wfWFmdGVyR2V0Q29sSGVhZGVyKGEsZCl7ZC5jbGFzc0xpc3QuYWRkKFhuLmhhbmRzb250YWJsZS5k''@;'; put 'put ''YXJrVGFibGVIZWFkZXJDbGFzcyl9eGxtYXBPbkNsaWNrKGEpe2EuaWQhPT10aGlzLnNlbGVjdGVkWExNYXA/LmlkJiYodGhpcy5zZWxlY3RlZFhMTWFwPWEsdGhpcy54bERhdGE9W10sdGhpcy5maWxlbmFtZT0iIix0aGlzLnVwbG9hZGVyLnF1ZXVlPVtdLHRoaXMuZmlsZVVwbG9hZElucHV0''@;'; put 'put ''Q29tcExpc3QuZmlyc3QmJih0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQudmFsdWU9IiIpLHRoaXMuc2VsZWN0ZWRUYWI9bVMuUnVsZXMsdGhpcy52aWV3WExNYXBSdWxlcygpLHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9ob21lL2V4Y2VsLW1h''@;'; put 'put ''cHMvIithLmlkKSl9eGxtYXBMaXN0T25GaWx0ZXIoKXt0aGlzLnhsbWFwcz10aGlzLnNlYXJjaFN0cmluZy5sZW5ndGg+MD9Ybi54bG1hcHMuZmlsdGVyKGQ9PmQuaWQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnNlYXJjaFN0cmluZy50b0xvd2VyQ2FzZSgpKSk6WG4ueGxtYXBzfWlz''@;'; put 'put ''QWN0aXZlWExNYXAoYSl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRYTE1hcD8uaWQ9PT1hfW1heFdpZHRoQ2hlY2tlcihhLGQpe3JldHVybiBhPjIwMD8yMDA6YX1nZXRDZWxsQ29uZmlndXJhdGlvbigpe3JldHVybntyZWFkT25seTohMH19cm93SGVhZGVycygpe3JldHVybiIgIn1vblNob3dVcGxv''@;'; put 'put ''YWRNb2RhbCgpe3RoaXMuc2hvd1VwbG9hZE1vZGFsPSEwfWZpbGVPdmVyQmFzZShhKXt0aGlzLmhhc0Jhc2VEcm9wWm9uZU92ZXI9YX1nZXRGaWxlRGVzYyhhLGQ9ITEpe3ZhciBoPXRoaXM7Y29uc3QgZj1kP2FbMF06YS50YXJnZXQuZmlsZXNbMF07aWYoIWYpcmV0dXJuO2NvbnN0IHY9Zi5u''@;'; put 'put ''YW1lO2lmKHRoaXMuZmlsZW5hbWU9diwieGxzIj09PXYuc2xpY2Uodi5sYXN0SW5kZXhPZigiLiIpKzEsdi5sYXN0SW5kZXhPZigiLiIpKzQpLnRvTG93ZXJDYXNlKCkpe3RoaXMuc2hvd1VwbG9hZE1vZGFsPSExLHRoaXMuaXNMb2FkaW5nPSEwLHRoaXMuaXNMb2FkaW5nRGVzYz0iRXh0cmFj''@;'; put 'put ''dGluZyBEYXRhIix0aGlzLnN0YXR1cz1yMy5FeHRyYWN0aW5nRGF0YTtjb25zdCBEPW5ldyBGaWxlUmVhZGVyO0Qub25sb2FkPWZ1bmN0aW9uKCl7dmFyIFU9ZWUoZnVuY3Rpb24qKHRlKXtjb25zdCBvZT0oYz0+e2NvbnN0IGw9bmV3IFVpbnQ4QXJyYXkoYyk7bGV0IGE9IiI7Y29uc3QgZD1s''@;'; put 'put ''LmJ5dGVMZW5ndGg7Zm9yKGxldCBoPTA7aDxkO2grKylhKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGxbaF0pO3JldHVybiBhfSkodGUudGFyZ2V0LnJlc3VsdCk7bGV0IHZlO2NvbnN0IHdlPXt0eXBlOiJiaW5hcnkiLGNlbGxEYXRlczohMSxjZWxsRm9ybXVsYTohMCxjZWxsU3R5bGVzOiEwLGNl''@;'; put 'put ''bGxORjohMSxjZWxsVGV4dDohMX07dHJ5e3ZlPWp1LnJlYWQob2Usey4uLndlfSl9Y2F0Y2goRmUpe2guZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsRmUsdm9pZCAwLCJFcnJvciByZWFkaW5nIGZpbGUiKX1pZighdmUpcmV0dXJuIGguaXNMb2FkaW5nPSExLGguaXNMb2FkaW5n''@;'; put 'put ''RGVzYz0iIixoLnN0YXR1cz1yMy5SZWFkeVRvVXBsb2FkLHZvaWQgaC51cGxvYWRlci5xdWV1ZS5wb3AoKTtoLmV4dHJhY3REYXRhKHZlKX0pO3JldHVybiBmdW5jdGlvbih0ZSl7cmV0dXJuIFUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxELnJlYWRBc0FycmF5QnVmZmVyKGYpfWVsc2Ug''@;'; put 'put ''dGhpcy5pc0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRpbmdEZXNjPSIiLHRoaXMuc3RhdHVzPXIzLlJlYWR5VG9VcGxvYWQsdGhpcy5zaG93VXBsb2FkTW9kYWw9ITAsdGhpcy51cGxvYWRlci5xdWV1ZS5wb3AoKSx0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLCdJbnZhbGlk''@;'; put 'put ''IGZpbGUgdHlwZSAiPGI+Jyt0aGlzLmZpbGVuYW1lKyc8L2I+Ii4gUGxlYXNlIHVwbG9hZCBleGNlbCBmaWxlLicpfWRpc2NhcmRFeHRyYWN0ZWREYXRhKCl7dGhpcy5pc0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRpbmdEZXNjPSIiLHRoaXMuc3RhdHVzPXIzLlJlYWR5VG9VcGxvYWQsdGhpcy54''@;'; put 'put ''bERhdGE9W10sdGhpcy5zZWxlY3RlZFRhYj1tUy5SdWxlcyx0aGlzLmZpbGVuYW1lPSIiLHRoaXMudXBsb2FkZXIucXVldWU9W10sdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC52YWx1''@;'; put 'put ''ZT0iIil9c3VibWl0RXhjZWwoKXt0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdD09PTEvMD90aGlzLnN1Ym1pdCgpOnRoaXMuc3VibWl0TGltaXROb3RpY2U9ITB9c3VibWl0KCl7aWYoIXRoaXMuc2VsZWN0ZWRYTE1hcHx8IXRoaXMueGxEYXRhLmxlbmd0aClyZXR1''@;'; put 'put ''cm47dGhpcy5zdGF0dXM9cjMuU3VibWl0dGluZyx0aGlzLmlzTG9hZGluZz0hMCx0aGlzLmlzTG9hZGluZ0Rlc2M9IlN1Ym1pdHRpbmcgZXh0cmFjdGVkIGRhdGEiO2NvbnN0IGE9W107Zm9yKGNvbnN0IE0gb2YgdGhpcy51cGxvYWRlci5xdWV1ZSlhLnB1c2goe2ZpbGU6TSxmaWxlTmFtZTpN''@;'; put 'put ''Lm5hbWV9KTtjb25zdCBkPU9iamVjdC5rZXlzKHRoaXMueGxEYXRhWzBdKS5qb2luKCIsIikrIlxuIit0aGlzLnhsRGF0YS5zbGljZSgwLHRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0KS5tYXAoTT0+T2JqZWN0LnZhbHVlcyhNKS5qb2luKCIsIikpLmpvaW4oIlxu''@;'; put 'put ''IiksaD1uZXcgQmxvYihbZF0se3R5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KSxmPWNhZShoLHRoaXMuZmlsZW5hbWUrIi5jc3YiKTthLnB1c2goe2ZpbGU6ZixmaWxlTmFtZTpmLm5hbWV9KSx0aGlzLnNhc1NlcnZpY2UudXBsb2FkRmlsZSgic2VydmljZXMvZWRpdG9ycy9sb2FkZmlsZSIsYSx7''@;'; put 'put ''dGFibGU6dGhpcy5zZWxlY3RlZFhMTWFwLnRhcmdldERTfSkudGhlbihNPT57aWYoTS5hZGFwdGVyUmVzcG9uc2Uuc2FzanNBYm9ydCl7Y29uc3QgRD1NLmFkYXB0ZXJSZXNwb25zZTt0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiIixELnNhc2pzQWJvcnRbMF0uTVNHLHtTWVNX''@;'; put 'put ''QVJOSU5HVEVYVDpELlNZU1dBUk5JTkdURVhULFNZU0VSUk9SVEVYVDpELlNZU0VSUk9SVEVYVCxNQUM6RC5zYXNqc0Fib3J0WzBdLk1BQ30pfWVsc2UgTS5hZGFwdGVyUmVzcG9uc2Uuc2FzcGFyYW1zJiZ0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIitNLmFkYXB0ZXJSZXNw''@;'; put 'put ''b25zZS5zYXNwYXJhbXNbMF0uRFNJRCl9KS5jYXRjaChNPT57dGhpcy5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJmaWxlIHVwbG9hZCIsTS5yZXNwb25zZSl9KS5maW5hbGx5KCgpPT57dGhpcy5zdGF0dXM9cjMuUmVhZHlUb1N1Ym1pdCx0aGlzLmlzTG9hZGluZz0hMSx0aGlz''@;'; put 'put ''LmlzTG9hZGluZ0Rlc2M9IiJ9KX1leHRyYWN0RGF0YShhKXtjb25zdCBkPVtdO3RoaXMueGxtYXBSdWxlcy5mb3JFYWNoKGg9PntsZXQgZj1oLlhMTUFQX1NIRUVUO2lmKGYuc3RhcnRzV2l0aCgiLyIpKXtjb25zdCB3ZT1mLnNwbGl0KCIvIilbMV0sRmU9cGFyc2VJbnQod2UpLTE7Zj1hLlNo''@;'; put 'put ''ZWV0TmFtZXNbRmVdfWNvbnN0IHY9YS5TaGVldHNbZl0sTT1qdS51dGlscy5zaGVldF90b19qc29uKHYse3JhdzohMCxoZWFkZXI6IkEiLGJsYW5rcm93czohMH0pLEQ9QnllKGguWExNQVBfU1RBUlQsTSksVT0oKGMsbCxhKT0+e2lmKCIiPT09bClyZXR1cm4gYztpZihsLnN0YXJ0c1dpdGgo''@;'; put 'put ''IkFCU09MVVRFICIpJiYobD1sLnJlcGxhY2UoIkFCU09MVVRFICIsIiIpKSxsLnN0YXJ0c1dpdGgoIlJFTEFUSVZFICIpKXtjb25zdCBkPWZhZShsKTtpZihkKXtjb25zdHtyb3c6aCxjb2x1bW46Zn09ZCx7cjp2LGM6TX09anUudXRpbHMuZGVjb2RlX2NlbGwoYyk7bD1qdS51dGlscy5lbmNv''@;'; put 'put ''ZGVfY2VsbCh7cjp2K2gsYzpNK2Z9KX19aWYobC5zdGFydHNXaXRoKCJNQVRDSCAiKSYmKGw9QnllKGwsYSkpLCJMQVNURE9XTiI9PT1sKXtjb25zdHtyOmQsYzpofT1qdS51dGlscy5kZWNvZGVfY2VsbChjKSxmPWp1LnV0aWxzLmVuY29kZV9jb2woaCk7bGV0IHY9ZDtmb3IobGV0IE09ZCsx''@;'; put 'put ''O008YS5sZW5ndGgmJmFbTV1bZl07TSsrKXY9TTtsPWYrKHYrMSl9aWYoIkJMQU5LUk9XIj09PWwpe2NvbnN0e3I6ZH09anUudXRpbHMuZGVjb2RlX2NlbGwoYyk7bGV0IGg9ZDtmb3IobGV0IEQ9ZCsxO0Q8YS5sZW5ndGgmJiFfeHQoYVtEXSk7RCsrKWg9RDtsPU9iamVjdC5rZXlzKGFbaF0p''@;'; put 'put ''LmZpbHRlcihEPT4iX19yb3dOdW1fXyIhPT1EKS5yZWR1Y2UoKEQsVSk9PlU+RD9VOkQsIiIpKyhoKzEpfXJldHVybiBsfSkoRCxoLlhMTUFQX0ZJTklTSCxNKSx0ZT1gJHtEfToke1V9YCxvZT1qdS51dGlscy5kZWNvZGVfcmFuZ2UodGUpLHZlPWp1LnV0aWxzLnNoZWV0X3RvX2pzb24odix7''@;'; put 'put ''cmF3OiEwLHJhbmdlOnRlLGhlYWRlcjoiQSIsYmxhbmtyb3dzOiEwfSk7Zm9yKGxldCB3ZT0wO3dlPHZlLmxlbmd0aDt3ZSsrKXtjb25zdCBGZT12ZVt3ZV07Zm9yKGxldCBXZT1vZS5zLmMsbnQ9MDtXZTw9b2UuZS5jO1dlKyssbnQrKyl7Y29uc3QgZHQ9anUudXRpbHMuZW5jb2RlX2NvbChX''@;'; put 'put ''ZSk7ZHQgaW4gRmUmJmQucHVzaCh7TE9BRF9SRUY6IjAiLFhMTUFQX0lEOmguWExNQVBfSUQsWExNQVBfUkFOR0VfSUQ6aC5YTE1BUF9SQU5HRV9JRCxST1dfTk86d2UrMSxDT0xfTk86bnQrMSxWQUxVRV9UWFQ6RmVbZHRdfSl9fX0pLHRoaXMuc3RhdHVzPXIzLlJlYWR5VG9TdWJtaXQsdGhp''@;'; put 'put ''cy5pc0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRpbmdEZXNjPSIiLHRoaXMueGxEYXRhPWQsdGhpcy5zZWxlY3RlZFRhYj1tUy5EYXRhfXZpZXdYTE1hcFJ1bGVzKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5zZWxlY3RlZFhMTWFwJiYoYS5pc0xvYWRpbmc9ITAsYS5pc0xv''@;'; put 'put ''YWRpbmdEZXNjPSJMb2FkaW5nIGV4Y2VsIHJ1bGVzIixhLnN0YXR1cz1yMy5GZXRjaGluZ1J1bGVzLHlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmdldFhMTWFwUnVsZXMoYS5zZWxlY3RlZFhMTWFwLmlkKS50aGVuKGQ9PnthLnhsbWFwUnVsZXM9ZC54bG1hcHJ1bGVzLGEuc3RhdHVzPXIzLlJl''@;'; put 'put ''YWR5VG9VcGxvYWR9KS5jYXRjaChkPT57YS5sb2dnZXJTZXJ2aWNlLmVycm9yKGQpfSksYS5pc0xvYWRpbmc9ITEsYS5pc0xvYWRpbmdEZXNjPSIiKX0pKCl9bG9hZCgpe3RoaXMueGxtYXBzPVhuLnhsbWFwcyx0aGlzLnhsbWFwc0xvYWRpbmc9ITE7Y29uc3QgYT10aGlzLnJvdXRlLnNuYXBz''@;'; put 'put ''aG90LnBhcmFtcy5pZDtpZihhKXtjb25zdCBkPXRoaXMueGxtYXBzLmZpbmQoaD0+aC5pZD09PWEpO2QmJih0aGlzLnNlbGVjdGVkWExNYXA9ZCx0aGlzLnZpZXdYTE1hcFJ1bGVzKCkpfX1uZ09uSW5pdCgpe3RoaXMubGljZW5jZVNlcnZpY2UuaG90X2xpY2Vuc2Vfa2V5LnN1YnNjcmliZShh''@;'; put 'put ''PT57dGhpcy5ob3RUYWJsZUxpY2Vuc2VLZXk9YX0pfW5nQWZ0ZXJWaWV3SW5pdCgpe31uZ0FmdGVyQ29udGVudEluaXQoKXtYbi5lZGl0b3Iuc3RhcnR1cFNldD90aGlzLmxvYWQoKTp0aGlzLmV2ZW50U2VydmljZS5vblN0YXJ0dXBEYXRhTG9hZGVkLnN1YnNjcmliZSgoKT0+e3RoaXMubG9h''@;'; put 'put ''ZCgpfSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUoRWMpLHFlKE8xKSxxZShvaCkscWUodDApLHFlKG5sKSxxZShNMikscWUoS3MpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPWFyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC14bG1hcCJd''@;'; put 'put ''XSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJlVhKEN4dCw1KSwyJmQpe2xldCBmO2dpKGY9bWkoKSkmJihoLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0PWYpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsyJmQmJnhyKCJjb250ZW50LWNvbnRhaW5lciIs''@;'; put 'put ''aC5jb250ZW50Q29udGFpbmVyQ2xhc3MpfSxzdGFuZGFsb25lOiExLGRlY2xzOjQyLHZhcnM6MTYsY29uc3RzOltbInNlYXJjaFhMTWFwVHJlZUlucHV0IiwiIl0sWyJmaWxlVXBsb2FkSW5wdXQiLCIiXSxbImFjdGlvbkJ1dHRvbnMiLCIiXSxbImNsYXNzIiwibXktMTAtbXgtYXV0byB0ZXh0''@;'; put 'put ''LWNlbnRlciIsNCwibmdJZiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkZpbHRlciBieSBJZCIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywi''@;'; put 'put ''bmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0''@;'; put 'put ''ZWQiLDQsIm5nSWYiXSxbImNsYXNzIiwibG9hZGluZ1NwaW5uZXIiLDQsIm5nSWYiXSxbImFwcERyYWdOZHJvcCIsIiIsImNsYXNzIiwiY2FyZCBoLTEwMCBkLWZsZXggY2xyLWZsZXgtY29sdW1uIiwzLCJmaWxlRHJhZ2dlZE92ZXIiLDQsIm5nSWYiXSxbImFwcEZpbGVEcm9wIiwiIiwxLCJy''@;'; put 'put ''ZWxhdGl2ZSIsMywiZmlsZU92ZXIiLCJmaWxlRHJvcCIsImNsck1vZGFsT3BlbkNoYW5nZSIsInVwbG9hZGVyIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxTdGF0aWNCYWNrZHJvcCIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbE9wZW4iXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9k''@;'; put 'put ''YWwtYm9keSJdLFsxLCJkcm9wLWFyZWEiXSxbMSwiY2xyLWNvbC1tZC0xMiJdLFsxLCJjbHItcm93IiwiY2FyZC1ibG9jayIsIm10LTE1IiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iXSxbMSwiY2xyLWNvbC1tZC0zIiwiZmlsdGVyQnRuIl0sWzEsImZpbHRlckJ0biIsInct''@;'; put 'put ''MTAwIl0sWyJmb3IiLCJmaWxlLXVwbG9hZCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJwcm9maWxlLWJ1dHRvbnMiLCJ3LTEwMCJdLFsiaGlkZGVuIiwiIiwiaWQiLCJmaWxlLXVwbG9hZCIsInR5cGUiLCJmaWxlIiwiYXBwRmlsZVNlbGVjdCIsIiIsMywiY2hhbmdlIiwidXBs''@;'; put 'put ''b2FkZXIiXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIl0sWzEsIm0tMCJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsxLCJteS0xMC1teC1hdXRvIiwidGV4dC1jZW50''@;'; put 'put ''ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFsic2hhcGUiLCJmaWxlIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWyJzcmMiLCIvU0FTU3RvcmVkUHJv''@;'; put 'put ''Y2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2VzL3NlbGVjdC10YWJsZS1wbmciLCJhbHQiLCJzZWxlY3QgdGFibGUgaWNvbiIsMSwic2VsZWN0LXRhYmxlLWljb24iXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgY29sb3ItZ3JheSBtdC0xMCIsImNkcy10''@;'; put 'put ''ZXh0Iiwic2VjdGlvbiIsNCwibmdJZiJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIiwxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiLCJtdC0xMCJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWyJhcHBEcmFnTmRyb3AiLCIiLDEsImNhcmQiLCJoLTEwMCIsImQtZmxleCIs''@;'; put 'put ''ImNsci1mbGV4LWNvbHVtbiIsMywiZmlsZURyYWdnZWRPdmVyIl0sWyJjbHJUYWJMaW5rIiwiIiwzLCJjbGljayJdLFs0LCJjbHJJZkFjdGl2ZSJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0Il0sWzEsImNsci1yb3ciLCJtLTAiLCJtYi0xMC1pIiwidmlld2VyVGl0bGUiXSxbMSwiZC1mbGV4Iiwi''@;'; put 'put ''Y2xyLWNvbC0xMiIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwibXQtNS1pIl0sWyJjZHMtdGV4dCIsImxhYmVsTGluayIsMSwibWwtMTAiLDMsInJvdXRlckxpbmsiXSxbMSwiY2xyLWZsZXgtMSJdLFsiaWQiLCJob3QtdGFibGUiLDMsImRhdGEiLCJzZXR0aW5ncyJdLFsxLCJjbHIt''@;'; put 'put ''cm93IiwibS0wIiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImNsYXNzIiwiZC1mbGV4IGNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGNsci1jb2wtMTIgY2xyLWNvbC1sZy00Iiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiY2xy''@;'; put 'put ''LWNvbC0xMiIsImNsci1jb2wtbGctNCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLCJidG4tYmxvY2siLCJtci0wIiwzLCJjbGljayJdLFsic2hhcGUiLCJ1cGxvYWQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRs''@;'; put 'put ''aW5lLWRhbmdlciIsImJ0bi1ibG9jayIsIm1yLTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsInRpbWVzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZkKXtjb25zdCBmPU9uKCk7ZGUoMCwiYXBwLXNpZGViYXIiKSxndCgxLFN4dCwyLDAsImRpdiIsMyksZGUoMiwiY2xyLXRyZWUiKSgz''@;'; put 'put ''LCJjbHItdHJlZS1ub2RlIiw0KSg0LCJkaXYiLDUpKDUsImlucHV0Iiw2LDApLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksZmkoaC5zZWFyY2hTdHJpbmcsTSl8fChoLnNlYXJjaFN0cmluZz1NKSxDdChNKX0pLE90KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gd3QoZiksQ3QoaC54bG1hcExpc3RPbkZpbHRlcigpKX0pLGhlKCksZ3QoNyxNeHQsMSwwLCJjbHItaWNvbiIsNykoOCx4eHQsMSwwLCJjbHItaWNvbiIsOCksaGUoKSgpLGd0KDksRXh0LDUsMywibmctY29udGFpbmVyIiw5KSxoZSgpKCksZGUoMTAsImRpdiIsMTApLGd0KDExLGt4dCw0''@;'; put 'put ''LDIsImRpdiIsMTEpKDEyLER4dCw2LDEsImRpdiIsMTIpKDEzLE94dCwyNiwxMSwiZGl2IiwxMyksZGUoMTQsImNsci1tb2RhbCIsMTQpLE90KCJmaWxlT3ZlciIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGguZmlsZU92ZXJCYXNlKE0pKX0pKCJmaWxlRHJvcCIsZnVuY3Rpb24oTSl7''@;'; put 'put ''cmV0dXJuIHd0KGYpLEN0KGguZ2V0RmlsZURlc2MoTSwhMCkpfSksY2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGZpKGguc2hvd1VwbG9hZE1vZGFsLE0pfHwoaC5zaG93VXBsb2FkTW9kYWw9TSksQ3QoTSl9KSxkZSgxNSwiaDMiLDE1KSxQZSgxNiwi''@;'; put 'put ''VXBsb2FkIEZpbGUiKSxoZSgpLGRlKDE3LCJkaXYiLDE2KSgxOCwiZGl2IiwxNykoMTksInNwYW4iKSxQZSgyMCwiRHJvcCBmaWxlIGFueXdoZXJlIHRvIHVwbG9hZCEiKSxoZSgpKCksZGUoMjEsImRpdiIsMTgpKDIyLCJkaXYiLDE5KSgyMywiZGl2IiwyMCkoMjQsInNwYW4iLDIxKSgyNSwi''@;'; put 'put ''bGFiZWwiLDIyKSxQZSgyNiwiIEJyb3dzZSAiKSxoZSgpKCksZGUoMjcsImlucHV0IiwyMywxKSxPdCgiY2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5nZXRGaWxlRGVzYyhNKSl9KSxoZSgpKCkoKSgpKCkoKSxkZSgyOSwiY2xyLW1vZGFsIiwyNCksY2koImNsck1vZGFs''@;'; put 'put ''T3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGZpKGguc3VibWl0TGltaXROb3RpY2UsTSl8fChoLnN1Ym1pdExpbWl0Tm90aWNlPU0pLEN0KE0pfSksZGUoMzAsImgzIiwxNSksUGUoMzEsIk5vdGljZSIpLGhlKCksZGUoMzIsImRpdiIsMTYpKDMzLCJwIiwyNSksUGUoMzQp''@;'; put 'put ''LGhlKCkoKSxkZSgzNSwiZGl2IiwyNikoMzYsImJ1dHRvbiIsMjcpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5zdWJtaXRMaW1pdE5vdGljZT0hMSl9KSxQZSgzNywiIENhbmNlbCAiKSxoZSgpLGRlKDM4LCJidXR0b24iLDI3KSxPdCgiY2xpY2siLGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHd0KGYpLGguc3VibWl0KCksQ3QoaC5zdWJtaXRMaW1pdE5vdGljZT0hMSl9KSxQZSgzOSwiIFN1Ym1pdCAiKSxoZSgpKCkoKSgpLGd0KDQwLE54dCw0LDMsIm5nLXRlbXBsYXRlIixudWxsLDIseGMpfWlmKDImZCl7Y29uc3QgZj1mYSg2KTtmZSgpLEVlKCJuZ0lmIixoLnhs''@;'; put 'put ''bWFwc0xvYWRpbmcpLGZlKDQpLGxpKCJuZ01vZGVsIixoLnNlYXJjaFN0cmluZyksZmUoMiksRWUoIm5nSWYiLGYudmFsdWUubGVuZ3RoPDEpLGZlKCksRWUoIm5nSWYiLGYudmFsdWUubGVuZ3RoPjApLGZlKCksRWUoIm5nRm9yT2YiLGgueGxtYXBzKSxmZSgyKSxFZSgibmdJZiIsIWguc2Vs''@;'; put 'put ''ZWN0ZWRYTE1hcCksZmUoKSxFZSgibmdJZiIsaC5pc0xvYWRpbmcpLGZlKCksRWUoIm5nSWYiLCFoLmlzTG9hZGluZyYmaC5zZWxlY3RlZFhMTWFwKSxmZSgpLEVlKCJ1cGxvYWRlciIsaC51cGxvYWRlcikoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCEx''@;'; put 'put ''KSgiY2xyTW9kYWxDbG9zYWJsZSIsITApLGxpKCJjbHJNb2RhbE9wZW4iLGguc2hvd1VwbG9hZE1vZGFsKSxmZSgxMyksRWUoInVwbG9hZGVyIixoLnVwbG9hZGVyKSxmZSgyKSxsaSgiY2xyTW9kYWxPcGVuIixoLnN1Ym1pdExpbWl0Tm90aWNlKSxmZSg1KSxJcigiIER1ZSB0byBjdXJyZW50''@;'; put 'put ''IGxpY2VuY2UsIG9ubHkgIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCwiIHJvd3MgaW4gYSBmaWxlIHdpbGwgYmUgc3VibWl0dGVkLiBUbyByZW1vdmUgdGhlIHJlc3RyaWN0aW9uLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8gIil9fSxkZXBlbmRl''@;'; put 'put ''bmNpZXM6W0c1LFAxLG5jLGhsLHJsLHcyLG1oLHU1LFVsLGJ1LHIwLGR3LENzLE1kLGg2LHA2LEg5LGY2LGQ2LFA5LGZoLHNnLGhzLENhLHlkLF9BLEx5ZSxPeWUsb2ddLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgVnh0PVt7cGF0aDoiIixjb21wb25lbnQ6KCgpPT57''@;'; put 'put ''Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31uZ09uRGVzdHJveSgpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPWFyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC14bG1hcC1yb3V0ZSJd''@;'; put 'put ''XSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sc3RhbmRhbG9uZTohMSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmR3QoMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W1FnXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgp''@;'; put 'put ''LGNoaWxkcmVuOlt7cGF0aDoiIixjb21wb25lbnQ6anllfSx7cGF0aDoiOmlkIixjb21wb25lbnQ6anllfV19XTtsZXQgQnh0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1FaSh7''@;'; put 'put ''dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPXlpKHtpbXBvcnRzOltldS5mb3JDaGlsZChWeHQpLGV1XX0pfX1yZXR1cm4gY30pKCk7WUQoKTtsZXQganh0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRp''@;'; put 'put ''Y3t0aGlzLlx1MDI3NW1vZD1FaSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPXlpKHtpbXBvcnRzOltmeSxCeHQsVWMsdTEscHksTmEsJEQsbjNdfSl9fXJldHVybiBjfSkoKSx6eHQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31uZ09uRGVzdHJveSgp''@;'; put 'put ''e31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPWFyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1tdWx0aS1kYXRhc2V0LXJvdXRlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxzdGFu''@;'; put 'put ''ZGFsb25lOiExLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiZHdCgwLCJyb3V0ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbUWddLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgcGFlPShjLGwsYSk9PntsLmNsYXNzTGlzdC5hZGQoWG4u''@;'; put 'put ''aGFuZHNvbnRhYmxlLmRhcmtUYWJsZUhlYWRlckNsYXNzKX0sVXh0PVsiY29udGVudEFyZWEiXSxaeHQ9WyJob3RJbnN0YW5jZU1haW4iXSxXeHQ9WyJob3RJbnN0YW5jZVVzZXJEYXRhc2V0Il07ZnVuY3Rpb24gWXh0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwyNiksR3QoMSwiY2xyLXNwaW5u''@;'; put 'put ''ZXIiLDI0KSxoZSgpKX1mdW5jdGlvbiBHeHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDI3KSgxLCJidXR0b24iLDI4KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KGZhKDQpLmNsaWNrKCkpfSksUGUoMiwiIEJyb3dzZSBmaWxlICIpLGhlKCks''@;'; put 'put ''ZGUoMywiaW5wdXQiLDI5LDEpLE90KCJjaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgpLm9uRmlsZUNoYW5nZShoKSl9KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSxFZSgiZGlzYWJsZWQiLG51bGwhPT1hLnNlbGVjdGVkRmlsZXx8YS5zdWJtaXR0aW5n''@;'; put 'put ''Q3N2KX19ZnVuY3Rpb24gJHh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2IiwyNykoMSwiYnV0dG9uIiwzMiksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5vbkRpc2NhcmQoKSl9KSxQZSgyLCIgRGlzY2FyZCAiKSxoZSgpLGRlKDMsImJ1''@;'; put 'put ''dHRvbiIsMzMpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikub25TdWJtaXRBbGwoKSl9KSxQZSg0LCIgU3VibWl0IEFsbCAiKSxoZSgpKCl9fWZ1bmN0aW9uIEt4dChjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDM4KX1mdW5jdGlvbiBYeHQoYyxsKXsxJmMm''@;'; put 'put ''Jkd0KDAsImNkcy1pY29uIiwzOSl9ZnVuY3Rpb24gcXh0KGMsbCl7aWYoMSZjJiYob2koMCksZ3QoMSxLeHQsMSwwLCJjZHMtaWNvbiIsMzYpKDIsWHh0LDEsMCwiY2RzLWljb24iLDM3KSxzaSgpKSwyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQ7ZmUoKSxFZSgibmdJZiIsYS5zdWJtaXRS''@;'; put 'put ''ZXN1bHQuZXJyb3IpLGZlKCksRWUoIm5nSWYiLGEuc3VibWl0UmVzdWx0LnN1Y2Nlc3MpfX1mdW5jdGlvbiBKeHQoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiwzOCl9ZnVuY3Rpb24gUXh0KGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsNDEpfWZ1bmN0aW9uIGVFdChjLGwpe2lmKDEmYyYm''@;'; put 'put ''KG9pKDApLGd0KDEsSnh0LDEsMCwiY2RzLWljb24iLDM2KSgyLFF4dCwxLDAsImNkcy1pY29uIiw0MCksc2koKSksMiZjKXtjb25zdCBhPU9lKDIpLiRpbXBsaWNpdDtmZSgpLEVlKCJuZ0lmIiwhKGEuZGF0YXNvdXJjZS5sZW5ndGgmJmEucGFyc2VSZXN1bHQpKSxmZSgpLEVlKCJuZ0lmIixh''@;'; put 'put ''LmRhdGFzb3VyY2UubGVuZ3RoJiZhLnBhcnNlUmVzdWx0KX19ZnVuY3Rpb24gdEV0KGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsNDEpfWZ1bmN0aW9uIG5FdChjLGwpezEmYyYmR3QoMCwiY2xyLXNwaW5uZXIiLDQzKX1mdW5jdGlvbiByRXQoYyxsKXtpZigxJmMmJihvaSgwKSxndCgxLHRF''@;'; put 'put ''dCwxLDAsImNkcy1pY29uIiw0MCkoMixuRXQsMSwwLCJjbHItc3Bpbm5lciIsNDIpLHNpKCkpLDImYyl7Y29uc3QgYT1PZSgyKS4kaW1wbGljaXQ7ZmUoKSxFZSgibmdJZiIsIWEucGFyc2luZ1RhYmxlKSxmZSgpLEVlKCJuZ0lmIixhLnBhcnNpbmdUYWJsZSl9fWZ1bmN0aW9uIGlFdChjLGwp''@;'; put 'put ''e2lmKDEmYyYmKG9pKDApLGd0KDEsZUV0LDMsMiwibmctY29udGFpbmVyIiw2KSgyLHJFdCwzLDIsIm5nLWNvbnRhaW5lciIsNiksc2koKSksMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O2ZlKCksRWUoIm5nSWYiLGEuZGF0YXNvdXJjZSksZmUoKSxFZSgibmdJZiIsIWEuZGF0YXNvdXJj''@;'; put 'put ''ZSl9fWZ1bmN0aW9uIGFFdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci10cmVlLW5vZGUiKSgxLCJidXR0b24iLDM0KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKDIpLm9uUGFyc2VkRGF0YXNldENsaWNrKGgp''@;'; put 'put ''KX0pLGd0KDIscXh0LDMsMiwibmctY29udGFpbmVyIiw2KSgzLGlFdCwzLDIsIm5nLWNvbnRhaW5lciIsNiksZGUoNCwic3BhbiIsMzUpLFBlKDUpLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLHhyKCJhY3RpdmUiLGEuYWN0aXZlKSxmZSgpLEVlKCJuZ0lmIixh''@;'; put 'put ''LnN1Ym1pdFJlc3VsdCksZmUoKSxFZSgibmdJZiIsIWEuc3VibWl0UmVzdWx0KSxmZSgyKSxJcigiICIsYS5saWJkcywiICIpfX1mdW5jdGlvbiBvRXQoYyxsKXtpZigxJmMmJihvaSgwKSxndCgxLCR4dCw1LDAsImRpdiIsNSksZGUoMiwicCIsMzApLFBlKDMsIkZvdW5kIHRhYmxlczoiKSxo''@;'; put 'put ''ZSgpLGRlKDQsImNsci10cmVlIiksZ3QoNSxhRXQsNiw1LCJjbHItdHJlZS1ub2RlIiwzMSksaGUoKSxzaSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLEVlKCJuZ0lmIiwhYS5leGNlbHNTdWJtaXR0ZWQpLGZlKDQpLEVlKCJuZ0Zvck9mIixhLnBhcnNlZERhdGFzZXRzKX19ZnVuY3Rpb24g''@;'; put 'put ''c0V0KGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsMzgpfWZ1bmN0aW9uIGxFdChjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDM5KX1mdW5jdGlvbiBjRXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdHJlZS1ub2RlIikoMSwiYnV0dG9uIiw0NSksT3QoImNsaWNrIixm''@;'; put 'put ''dW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChPZSgyKS5vblN1Ym1pdHRlZENzdkRhdGFzZXRDbGljayhoKSl9KSxndCgyLHNFdCwxLDAsImNkcy1pY29uIiwzNikoMyxsRXQsMSwwLCJjZHMtaWNvbiIsMzcpLEd0KDQsImNkcy1pY29uIiw0MSksUGUoNSksaGUo''@;'; put 'put ''KSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLHhyKCJhY3RpdmUiLGEuYWN0aXZlKSxmZSgpLEVlKCJuZ0lmIixhLmVycm9yKSxmZSgpLEVlKCJuZ0lmIixhLnN1Y2Nlc3MpLGZlKDIpLElyKCIgIixhLmxpYmRzLCIgIil9fWZ1bmN0aW9uIHVFdChjLGwpe2lmKDEmYyYmKG9p''@;'; put 'put ''KDApLGRlKDEsInAiLDQ0KSxQZSgyLCJTdWJtaXR0ZWQgdGFibGVzOiIpLGhlKCksZGUoMywiY2xyLXRyZWUiKSxndCg0LGNFdCw2LDUsImNsci10cmVlLW5vZGUiLDMxKSxoZSgpLHNpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDQpLEVlKCJuZ0Zvck9mIixhLnN1Ym1pdHRlZENzdkRhdGFz''@;'; put 'put ''ZXRzKX19ZnVuY3Rpb24gZEV0KGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw0NiksR3QoMSwiY2xyLWljb24iLDQ3KSxkZSgyLCJwIiw0OCksUGUoMywiIFBsZWFzZSB1cGxvYWQgYSBmaWxlICIpLGhlKCkoKSl9ZnVuY3Rpb24gaEV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7b2koMCksZGUo''@;'; put 'put ''MSwiZGl2Iiw0OSkoMiwiZGl2Iiw1MCkoMywicCIsNTEpLFBlKDQsIiBTZWxlY3RlZCBmaWxlOiAiKSxkZSg1LCJzdHJvbmciKSxQZSg2KSxoZSgpLGRlKDcsImNsci10b29sdGlwIikoOCwiY2RzLWljb24iLDUyKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDIp''@;'; put 'put ''Lm9uRGlzY2FyZEZpbGUoKSl9KSxoZSgpLGRlKDksImNsci10b29sdGlwLWNvbnRlbnQiKSxQZSgxMCwiIERpc2NhcmQgdGhlIGZpbGUgIiksaGUoKSgpKCksZGUoMTEsInAiLDUzKSxQZSgxMiwiIEZpbGUgc2l6ZTogIiksZGUoMTMsInN0cm9uZyIpLFBlKDE0KSxoZSgpKCksZGUoMTUsInAi''@;'; put 'put ''LDU0KSxQZSgxNiwiIFBhc3RlIG9yIHR5cGUgdGhlIGxpc3Qgb2YgZGF0YXNldHMgdG8gdXBsb2FkOiAiKSxoZSgpLGRlKDE3LCJjbHItY29udHJvbC1oZWxwZXIiLDU1KSxQZSgxOCwiRWFjaCByb3cgaXMgb25lIGRhdGFzZXQuIFdlIHdpbGwgYXV0b21hdGljYWxseSBkZXRlY3QgdGFibGVz''@;'; put 'put ''IGJ5IHRoZSBzaGVldG5hbWUgYW5kIHBvcHVsYXRlIGlmIGFueS4iKSxoZSgpLEd0KDE5LCJob3QtdGFibGUiLDU2LDIpLGRlKDIxLCJkaXYiLDU3KSgyMiwiYnV0dG9uIiw1OCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5vblN0YXJ0UGFyc2luZ0ZpbGUo''@;'; put 'put ''KSl9KSxQZSgyMywiIENvbnRpbnVlICIpLGhlKCkoKSgpKCksc2koKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7ZmUoNiksQ3IoYS5zZWxlY3RlZEZpbGUubmFtZSksZmUoOCksSXIoIiIsYS5zZWxlY3RlZEZpbGUuc2l6ZU1CLCIgTUIiKSxmZSg1KSxFZSgic2V0dGluZ3MiLGEuaG90VXNlckRh''@;'; put 'put ''dGFzZXRzU2V0dGluZ3MpLGZlKDMpLEVlKCJkaXNhYmxlZCIsIWEubWF0Y2hlZERhdGFzZXRzLmxlbmd0aCkoImNsckxvYWRpbmciLGEudXBsb2FkTG9hZGluZyl9fWZ1bmN0aW9uIGZFdChjLGwpe2lmKDEmYyYmKG9pKDApLEd0KDEsImNsci1pY29uIiw1OSksZGUoMiwicCIsNDgpLFBlKDMp''@;'; put 'put ''LGhlKCksc2koKSksMiZjKXtjb25zdCBhPU9lKDQpO2ZlKDMpLElyKCIgIixhLmZpbGVMb2FkaW5nU3RhdGUsIi4uLiAiKX19ZnVuY3Rpb24gcEV0KGMsbCl7MSZjJiYob2koMCksR3QoMSwiY2xyLWljb24iLDYwKSxkZSgyLCJwIiw0OCksUGUoMywiIFBsZWFzZSBzZWxlY3QgYSBkYXRhc2V0''@;'; put 'put ''IG9uIHRoZSBsZWZ0IHRvIHJldmlldyB0aGUgZGF0YSAiKSxoZSgpLHNpKCkpfWZ1bmN0aW9uIGdFdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNDYpLGd0KDEsZkV0LDQsMSwibmctY29udGFpbmVyIiw2KSgyLHBFdCw0LDAsIm5nLWNvbnRhaW5lciIsNiksaGUoKSksMiZjKXtjb25zdCBh''@;'; put 'put ''PU9lKDMpO2ZlKCksRWUoIm5nSWYiLGEuZmlsZUxvYWRpbmdTdGF0ZSE9PWEuRmlsZUxvYWRpbmdTdGF0ZS5wYXJzZWQpLGZlKCksRWUoIm5nSWYiLGEuZmlsZUxvYWRpbmdTdGF0ZT09PWEuRmlsZUxvYWRpbmdTdGF0ZS5wYXJzZWQpfX1mdW5jdGlvbiBtRXQoYyxsKXsxJmMmJihkZSgwLCJz''@;'; put 'put ''cGFuIiw3NykoMSwic3Ryb25nIiksUGUoMiwiU1VDQ0VTUyIpLGhlKCkoKSl9ZnVuY3Rpb24gdkV0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsNzgpKDEsInN0cm9uZyIpLFBlKDIsIkVSUk9SIiksaGUoKSgpKX1mdW5jdGlvbiB5RXQoYyxsKXsxJmMmJihkZSgwLCJwIiw2NSksUGUoMSwiIEVy''@;'; put 'put ''cm9yIGRldGFpbHM6ICIpLGhlKCkpfWZ1bmN0aW9uIGJFdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImJ1dHRvbiIsNzkpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDUpO3JldHVybiBDdChoLnJlU3VibWl0VGFibGUoaC5hY3RpdmVQYXJzZWREYXRh''@;'; put 'put ''c2V0KSl9KSxQZSgxLCIgUmVzdWJtaXQgIiksaGUoKX0yJmMmJkVlKCJjbHJMb2FkaW5nIixPZSg1KS5zdWJtaXRMb2FkaW5nKX1mdW5jdGlvbiBfRXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDcxKSgxLCJkaXYiKSgyLCJwIiw2NCksUGUoMywiIFN1Ym1pdCBTdGF0''@;'; put 'put ''dXM6ICIpLGd0KDQsbUV0LDMsMCwic3BhbiIsNzIpKDUsdkV0LDMsMCwic3BhbiIsNzMpLGhlKCksZ3QoNix5RXQsMiwwLCJwIiw3NCksaGUoKSxkZSg3LCJkaXYiKSxndCg4LGJFdCwyLDEsImJ1dHRvbiIsNzUpLGRlKDksImJ1dHRvbiIsNzYpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChh''@;'; put 'put ''KTtjb25zdCBoPU9lKDQpO3JldHVybiBDdChoLmRvd25sb2FkRmlsZShoLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0LmxvZ3x8aC5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5zdWNjZXNzfHxoLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0LmVycm9y''@;'; put 'put ''KSl9KSxQZSgxMCwiIERvd25sb2FkIGxvZyAiKSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoNCk7ZmUoNCksRWUoIm5nSWYiLG51bGw9PWEuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQ/bnVsbDphLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0LnN1Y2Nlc3Mp''@;'; put 'put ''LGZlKCksRWUoIm5nSWYiLG51bGw9PWEuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQ/bnVsbDphLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0LmVycm9yKSxmZSgpLEVlKCJuZ0lmIixudWxsPT1hLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0P251bGw6''@;'; put 'put ''YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5lcnJvciksZmUoMiksRWUoIm5nSWYiLCFhLnN1Ym1pdHRpbmdDc3YmJihudWxsPT1hLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0P251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5lcnJvcikp''@;'; put 'put ''fX1mdW5jdGlvbiB3RXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDgwKSgxLCJkaXYiLDgxKSxQZSgyKSxkbCgzLCJqc29uIiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoNCk7ZmUoMiksSXIoIiAiLGpjKDMsMSxudWxsPT1hLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0P251''@;'; put 'put ''bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5lcnJvciksIiAiKX19ZnVuY3Rpb24gQ0V0KGMsbCl7aWYoMSZjJiYob2koMCksZGUoMSwic3Ryb25nIiksUGUoMiksaGUoKSxzaSgpKSwyJmMpe2NvbnN0IGE9T2UoNCk7ZmUoMiksWHUoJyInLG51bGw9PWEuYWN0aXZlUGFy''@;'; put 'put ''c2VkRGF0YXNldC5wYXJzZVJlc3VsdC5yYW5nZVNoZWV0UmVzP251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNlUmVzdWx0LnJhbmdlU2hlZXRSZXMuc2hlZXROYW1lLCciIScsbnVsbD09YS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNlUmVzdWx0LnJhbmdlU2hlZXRSZXM/bnVsbDph''@;'; put 'put ''LmFjdGl2ZVBhcnNlZERhdGFzZXQucGFyc2VSZXN1bHQucmFuZ2VTaGVldFJlcy5yYW5nZUFkZHJlc3MsIiIpfX1mdW5jdGlvbiBTRXQoYyxsKXsxJmMmJihkZSgwLCJzdHJvbmciKSxQZSgxLCJObyBkYXRhIGZvdW5kIiksaGUoKSl9ZnVuY3Rpb24gTUV0KGMsbCl7MSZjJiYoZGUoMCwic3Bh''@;'; put 'put ''biIsODMpKDEsInN0cm9uZyIpLFBlKDIsIlNlYXJjaGluZyBmb3IgdGhlIGRhdGEuLi4iKSxoZSgpLEd0KDMsImNsci1zcGlubmVyIiw4NCksaGUoKSl9ZnVuY3Rpb24geEV0KGMsbCl7aWYoMSZjJiYob2koMCksZ3QoMSxTRXQsMiwwLCJzdHJvbmciLDYpKDIsTUV0LDQsMCwic3BhbiIsODIp''@;'; put 'put ''LHNpKCkpLDImYyl7Y29uc3QgYT1PZSg0KTtmZSgpLEVlKCJuZ0lmIiwhYS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNpbmdUYWJsZSksZmUoKSxFZSgibmdJZiIsYS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNpbmdUYWJsZSl9fWZ1bmN0aW9uIEVFdChjLGwpezEmYyYmKGRlKDAsImRpdiIs''@;'; put 'put ''ODUpLEd0KDEsImNsci1zcGlubmVyIiw4NiksaGUoKSl9ZnVuY3Rpb24gVEV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7b2koMCksZ3QoMSxfRXQsMTEsNCwiZGl2Iiw2MSkoMix3RXQsNCwzLCJkaXYiLDYyKSxkZSgzLCJkaXYiLDYzKSg0LCJkaXYiKSg1LCJwIiw2NCksUGUoNiwiIEZv''@;'; put 'put ''dW5kIGluIHJhbmdlOiAiKSxndCg3LENFdCwzLDIsIm5nLWNvbnRhaW5lciIsNikoOCx4RXQsMywyLCJuZy1jb250YWluZXIiLDYpLGhlKCksZGUoOSwicCIsNjUpLFBlKDEwLCIgRGF0YXNldDogIiksZGUoMTEsInN0cm9uZyIpKDEyLCJjbHItdG9vbHRpcCIpKDEzLCJhIiw2NiksUGUoMTQp''@;'; put 'put ''LGhlKCksZGUoMTUsImNsci10b29sdGlwLWNvbnRlbnQiLDY3KSxQZSgxNiwiIENsaWNrIHRvIGVkaXQgdGhlIHRhYmxlICIpLGhlKCkoKSgpKCkoKSxkZSgxNywiZGl2IikoMTgsImNsci10b2dnbGUtd3JhcHBlciIpKDE5LCJpbnB1dCIsNjgpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlv''@;'; put 'put ''bihoKXt3dChhKTtjb25zdCBmPU9lKDMpO3JldHVybiBmaShmLmFjdGl2ZVBhcnNlZERhdGFzZXQuaW5jbHVkZUluU3VibWlzc2lvbixoKXx8KGYuYWN0aXZlUGFyc2VkRGF0YXNldC5pbmNsdWRlSW5TdWJtaXNzaW9uPWgpLEN0KGgpfSksaGUoKSxkZSgyMCwibGFiZWwiKSxQZSgyMSwiSW5j''@;'; put 'put ''bHVkZSBpbiBzdWJtaXNzaW9uIiksaGUoKSgpKCkoKSxndCgyMixFRXQsMiwwLCJkaXYiLDY5KSxHdCgyMywiaG90LXRhYmxlIiw3MCwzKSxzaSgpfWlmKDImYyl7Y29uc3QgYT1PZSgzKTtmZSgpLEVlKCJuZ0lmIixhLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0KSxmZSgpLEVl''@;'; put 'put ''KCJuZ0lmIixudWxsPT1hLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0P251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5lcnJvciksZmUoNSksRWUoIm5nSWYiLGEuYWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzZVJlc3VsdCksZmUoKSxFZSgibmdJZiIsIWEu''@;'; put 'put ''YWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzZVJlc3VsdCksZmUoNSksRWUoInJvdXRlckxpbmsiLCIvZWRpdG9yLyIrYS5hY3RpdmVQYXJzZWREYXRhc2V0LmxpYmRzKSxmZSgpLENyKGEuYWN0aXZlUGFyc2VkRGF0YXNldC5saWJkcyksZmUoKSxFZSgiY2xyUG9zaXRpb24iLCJ0b3AtcmlnaHQi''@;'; put 'put ''KSgiY2xyU2l6ZSIsInNtIiksZmUoNCksbGkoIm5nTW9kZWwiLGEuYWN0aXZlUGFyc2VkRGF0YXNldC5pbmNsdWRlSW5TdWJtaXNzaW9uKSxFZSgiZGlzYWJsZWQiLCEoYS5hY3RpdmVQYXJzZWREYXRhc2V0LmRhdGFzb3VyY2UmJmEuYWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzZVJlc3VsdCkp''@;'; put 'put ''LGZlKDMpLEVlKCJuZ0lmIixhLmlzSG90SGlkZGVuKSxmZSgpLEVlKCJzZXR0aW5ncyIsYS5ob3RNYWluVGFibGVTZXR0aW5ncyl9fWZ1bmN0aW9uIEFFdChjLGwpe2lmKDEmYyYmKG9pKDApLGd0KDEsZ0V0LDMsMiwiZGl2IiwxMSkoMixURXQsMjUsMTIsIm5nLWNvbnRhaW5lciIsNiksc2ko''@;'; put 'put ''KSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKCksRWUoIm5nSWYiLCFhLmFjdGl2ZVBhcnNlZERhdGFzZXQpLGZlKCksRWUoIm5nSWYiLGEuYWN0aXZlUGFyc2VkRGF0YXNldCl9fWZ1bmN0aW9uIGtFdChjLGwpezEmYyYmKGRlKDAsImRpdiIsNDYpLEd0KDEsImNsci1pY29uIiw2MCksZGUoMiwi''@;'; put 'put ''cCIsNDgpLFBlKDMsIiBQbGVhc2Ugc2VsZWN0IGEgZGF0YXNldCBvbiB0aGUgbGVmdCB0byByZXZpZXcgdGhlIHN1Ym1pdCByZXN1bHRzICIpLGhlKCkoKSl9ZnVuY3Rpb24gREV0KGMsbCl7aWYoMSZjJiYob2koMCksZ3QoMSxrRXQsNCwwLCJkaXYiLDExKSxzaSgpKSwyJmMpe2NvbnN0IGE9''@;'; put 'put ''T2UoMik7ZmUoKSxFZSgibmdJZiIsIWEuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldCl9fWZ1bmN0aW9uIElFdChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDc3KSgxLCJzdHJvbmciKSxQZSgyLCJTVUNDRVNTIiksaGUoKSgpKX1mdW5jdGlvbiBSRXQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw3''@;'; put 'put ''OCkoMSwic3Ryb25nIiksUGUoMiwiRVJST1IiKSxoZSgpKCkpfWZ1bmN0aW9uIExFdChjLGwpezEmYyYmKGRlKDAsInAiLDY1KSxQZSgxLCIgRXJyb3IgZGV0YWlsczogIiksaGUoKSl9ZnVuY3Rpb24gT0V0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw4MCkoMSwiZGl2Iiw4MSksUGUoMiks''@;'; put 'put ''ZGwoMywianNvbiIpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKDIpLElyKCIgIixqYygzLDEsYS5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0LmVycm9yKSwiICIpfX1mdW5jdGlvbiBQRXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtvaSgwKSxkZSgxLCJkaXYiLDg3KSgyLCJk''@;'; put 'put ''aXYiKSgzLCJwIiw2NCksUGUoNCwiIE1hdGNoZWQgd2l0aCBkYXRhc2V0OiAiKSxkZSg1LCJzdHJvbmciKSg2LCJjbHItdG9vbHRpcCIpKDcsImEiLDY2KSxQZSg4KSxoZSgpLGRlKDksImNsci10b29sdGlwLWNvbnRlbnQiLDY3KSxQZSgxMCwiIENsaWNrIHRvIGVkaXQgdGhlIHRhYmxlICIp''@;'; put 'put ''LGhlKCkoKSgpKCksZGUoMTEsInAiLDY0KSxQZSgxMiwiIFN0YXR1czogIiksZ3QoMTMsSUV0LDMsMCwic3BhbiIsNzIpKDE0LFJFdCwzLDAsInNwYW4iLDczKSxoZSgpLGd0KDE1LExFdCwyLDAsInAiLDc0KSxoZSgpLGRlKDE2LCJkaXYiKSgxNywiYnV0dG9uIiw3NiksT3QoImNsaWNrIixm''@;'; put 'put ''dW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMik7cmV0dXJuIEN0KGguZG93bmxvYWRGaWxlKGguYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldC5zdWNjZXNzfHxoLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQuZXJyb3IpKX0pLFBlKDE4LCIgRG93bmxvYWQgbG9nICIpLGhlKCkoKSgpLGd0''@;'; put 'put ''KDE5LE9FdCw0LDMsImRpdiIsNjIpLHNpKCl9aWYoMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDcpLEVlKCJyb3V0ZXJMaW5rIiwiL2VkaXRvci8iK2EuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldC5saWJkcyksZmUoKSxDcihhLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQubGliZHMpLGZlKCks''@;'; put 'put ''RWUoImNsclBvc2l0aW9uIiwidG9wLXJpZ2h0IikoImNsclNpemUiLCJzbSIpLGZlKDQpLEVlKCJuZ0lmIixhLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQuc3VjY2VzcyksZmUoKSxFZSgibmdJZiIsYS5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0LmVycm9yKSxmZSgpLEVlKCJuZ0lmIixh''@;'; put 'put ''LmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQuZXJyb3IpLGZlKDQpLEVlKCJuZ0lmIixhLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQuZXJyb3IpfX1mdW5jdGlvbiBGRXQoYyxsKXtpZigxJmMmJihvaSgwKSxndCgxLGhFdCwyNCw1LCJuZy1jb250YWluZXIiLDYpKDIsQUV0LDMsMiwibmct''@;'; put 'put ''Y29udGFpbmVyIiw2KSgzLERFdCwyLDEsIm5nLWNvbnRhaW5lciIsNikoNCxQRXQsMjAsOCwibmctY29udGFpbmVyIiw2KSxzaSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLEVlKCJuZ0lmIiwhYS5wYXJzZWREYXRhc2V0cy5sZW5ndGgmJm51bGwhPT1hLnNlbGVjdGVkRmlsZSksZmUoKSxF''@;'; put 'put ''ZSgibmdJZiIsYS5wYXJzZWREYXRhc2V0cy5sZW5ndGgmJiFhLnN1Ym1pdHRlZENzdkRhdGFzZXRzLmxlbmd0aCksZmUoKSxFZSgibmdJZiIsYS5zdWJtaXR0ZWRDc3ZEYXRhc2V0cy5sZW5ndGgpLGZlKCksRWUoIm5nSWYiLGEuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldCl9fWZ1bmN0aW9u''@;'; put 'put ''IEhFdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDg4KSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLElyKCIgRHVlIHRvIGN1cnJlbnQgbGljZW5jZSwgb25seSAiLGEubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0LCIgcm93cyBpbiBlYWNoIGZpbGUgd2ls''@;'; put 'put ''bCBiZSBzdWJtaXR0ZWQuIFRvIHJlbW92ZSB0aGUgcmVzdHJpY3Rpb24sIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pby4gIil9fXZhciB2Uz1mdW5jdGlvbihjKXtyZXR1cm4gYy5yZWFkaW5nPSJSZWFkaW5nIHRoZSBmaWxlIixjLnBhcnNpbmc9IlNlYXJjaGluZyBmb3IgdGhl''@;'; put 'put ''IGRhdGEgaW4gdGhlIGZpbGUiLGMucGFyc2VkPSJTZWFyY2hpbmcgZm9yIHRoZSBkYXRhIGZpbmlzaGVkIixjLm5vdFNlbGVjdGVkPSJGaWxlIG5vdCBzZWxlY3RlZCIsY30odlN8fHt9KTtjb25zdCBORXQ9W3twYXRoOiIiLGNvbXBvbmVudDp6eHQsY2hpbGRyZW46W3twYXRoOiIiLGNvbXBv''@;'; put 'put ''bmVudDooKCk9PntjbGFzcyBje2luaXRpYWxpemVIb3RTZXR0aW5ncygpe3RoaXMuaG90TWFpblRhYmxlU2V0dGluZ3M9e2NsYXNzTmFtZTpbImh0RGFyayJdLGxpY2Vuc2VLZXk6dGhpcy5ob3RUYWJsZUxpY2Vuc2VLZXksbXVsdGlDb2x1bW5Tb3J0aW5nOiEwLHZpZXdwb3J0Um93UmVuZGVy''@;'; put 'put ''aW5nT2Zmc2V0OjUwLG1hbnVhbENvbHVtblJlc2l6ZTohMCxhdXRvQ29sdW1uU2l6ZTohMCxmaWx0ZXJzOiEwLHN0cmV0Y2hIOiJhbGwiLGFmdGVyR2V0Q29sSGVhZGVyOnBhZSxtb2RpZnlDb2xXaWR0aDp0aGlzLm1heFdpZHRoQ2hla2VyfTtjb25zdHtkYXRhOmEsLi4uZH09dGhpcy5ob3RV''@;'; put 'put ''c2VyRGF0YXNldHM7dGhpcy5ob3RVc2VyRGF0YXNldHNTZXR0aW5ncz17Li4uZCxsaWNlbnNlS2V5OnRoaXMuaG90VGFibGVMaWNlbnNlS2V5fX1tYXhXaWR0aENoZWtlcihhLGQpe3JldHVybiBhPjIwMD8yMDA6YX1jb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxEKXt0aGlzLmV2ZW50U2Vydmlj''@;'; put 'put ''ZT1hLHRoaXMubGljZW5jZVNlcnZpY2U9ZCx0aGlzLmhlbHBlclNlcnZpY2U9aCx0aGlzLnNhc1N0b3JlU2VydmljZT1mLHRoaXMuc3ByZWFkc2hlZXRTZXJ2aWNlPXYsdGhpcy5zYXNTZXJ2aWNlPU0sdGhpcy5jZHI9RCx0aGlzLmNvbnRlbnRDb250YWluZXJDbGFzcz0hMCx0aGlzLmxpY2Vu''@;'; put 'put ''Y2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLkluZmluaXR5PTEvMCx0aGlzLmZpbGVMb2FkaW5nU3RhdGU9dlMubm90U2VsZWN0ZWQsdGhpcy5GaWxlTG9hZGluZ1N0YXRlPXZTLHRoaXMuaG90VGFibGVMaWNlbnNlS2V5PXZvaWQgMCx0aGlzLmhvdFRhYmxl''@;'; put 'put ''TWF4Um93cz10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkfHwxLzAsdGhpcy5jc3ZGaWxlcz1bXSx0aGlzLmNzdlN1Ym1pdHRpbmc9ITEsdGhpcy5hdXRvRGV0ZWN0aW5nQ29sdW1ucz0hMSx0aGlzLnNlbGVjdGVkRmlsZT1udWxsLHRoaXMucGFyc2VkRGF0YXNl''@;'; put 'put ''dHM9W10sdGhpcy5zdWJtaXR0ZWRDc3ZEYXRhc2V0cz1bXSx0aGlzLmRhdGFzZXRzTG9hZGluZz0hMSx0aGlzLnVwbG9hZExvYWRpbmc9ITEsdGhpcy5zdWJtaXRMb2FkaW5nPSExLHRoaXMubWF0Y2hlZERhdGFzZXRzPVtdLHRoaXMuc2hlZXROYW1lcz1bXSx0aGlzLnVzZXJJbnB1dERhdGFz''@;'; put 'put ''ZXRzPSIiLHRoaXMubGlic0FuZFRhYmxlcz17fSx0aGlzLmhvdE1haW5UYWJsZVNldHRpbmdzPXt9LHRoaXMuaG90VXNlckRhdGFzZXRzU2V0dGluZ3M9e30sdGhpcy5zaG93U3VibWl0UmVhc29uTW9kYWw9ITEsdGhpcy5zdWJtaXRSZWFzb25NZXNzYWdlPSIiLHRoaXMuaG90VXNlckRhdGFz''@;'; put 'put ''ZXRzPXtjb2xIZWFkZXJzOlsiTGlicmFyeSIsIlRhYmxlIl0sZGF0YTpbWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl1dLGNvbHVtbnM6W3t0eXBlOiJhdXRvY29tcGxl''@;'; put 'put ''dGUiLGZpbHRlcjohMSxzb3VyY2U6W119LHt0eXBlOiJhdXRvY29tcGxldGUiLGZpbHRlcjohMSxzb3VyY2U6W119XSx3aWR0aDoiMTAwJSIsaGVpZ2h0OiIzMDVweCIsY2xhc3NOYW1lOlsiaHREYXJrIl0sY29udGV4dE1lbnU6e2l0ZW1zOntyb3dfYWJvdmU6e25hbWU6Ikluc2VydCBSb3cg''@;'; put 'put ''YWJvdmUifSxyb3dfYmVsb3c6e25hbWU6Ikluc2VydCBSb3cgYmVsb3cifX19LG1hbnVhbFJvd01vdmU6ITAsY29sdW1uU29ydGluZzohMCxhZnRlckdldENvbEhlYWRlcjpwYWUsc3RyZXRjaEg6ImFsbCJ9LHRoaXMuYWZ0ZXJHZXRDb2xIZWFkZXI9cGFlfW5nT25Jbml0KCl7dGhpcy5saWNl''@;'; put 'put ''bmNlU2VydmljZS5ob3RfbGljZW5zZV9rZXkuc3Vic2NyaWJlKGE9Pnt0aGlzLmhvdFRhYmxlTGljZW5zZUtleT1hLHRoaXMuaW5pdGlhbGl6ZUhvdFNldHRpbmdzKCl9KSx0aGlzLmluaXRpYWxpemVIb3RTZXR0aW5ncygpfW5nQWZ0ZXJWaWV3SW5pdCgpe3NldFRpbWVvdXQoKCk9Pnt0aGlz''@;'; put 'put ''LmhvdFRhYmxlVXNlckRhdGFzZXRDb21wb25lbnQmJiF0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQmJnRoaXMuaW5pdFVzZXJJbnB1dEhvdCgpLHRoaXMuaG90VGFibGVNYWluQ29tcG9uZW50JiYhdGhpcy5ob3RJbnN0YW5jZSYmdGhpcy5pbml0SG90KCl9LDUwKX1uZ0FmdGVyQ29udGVu''@;'; put 'put ''dEluaXQoKXtYbi5lZGl0b3Iuc3RhcnR1cFNldD90aGlzLmdldEZyb21HbG9iYWxzKCk6dGhpcy5ldmVudFNlcnZpY2Uub25TdGFydHVwRGF0YUxvYWRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLmdldEZyb21HbG9iYWxzKCl9KX1nZXRGcm9tR2xvYmFscygpe3RoaXMubGlic0FuZFRhYmxlcz1Y''@;'; put 'put ''bi5lZGl0b3IubGlic0FuZFRhYmxlcztjb25zdCBhPU9iamVjdC5rZXlzKHRoaXMubGlic0FuZFRhYmxlcyk7dGhpcy5ob3RVc2VyRGF0YXNldHM/LmNvbHVtbnMmJih0aGlzLmhvdFVzZXJEYXRhc2V0cy5jb2x1bW5zWzBdLnNvdXJjZT1hKX1vbkZpbGVDaGFuZ2UoYSl7dmFyIGQ9dGhpczty''@;'; put 'put ''ZXR1cm4gZWUoZnVuY3Rpb24qKCl7Y29uc3QgaD1hPy50YXJnZXQ/LmZpbGVzfHxbXTtpZihoLmxlbmd0aDwxKXJldHVybiB2b2lkIGQuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIk5vIGZpbGUgZm91bmQuIixudWxsLCJGaWxlIFVwbG9hZCIpO2xldCBmPSIiO2ZvcihsZXQg''@;'; put 'put ''diBvZiBoKXtjb25zdCBNPXYubmFtZS5zcGxpdCgiLiIpLnBvcCgpO2lmKGZ8fChmPU0pLGYhPT1NKXJldHVybiB2b2lkIGQuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIk1peGVkIGV4dGVuc2lvbnMgZXJyb3IiLCJQbGVhc2Ugc2VsZWN0IGZpbGVzIHdpdGggc2FtZSBleHRlbnNpb24u''@;'; put 'put ''Iik7Zj1NfWlmKFsieGxzeCIsInhsc20iLCJ4bG0iXS5pbmNsdWRlcyhmKSlkLnNlbGVjdGVkRmlsZT1hLnRhcmdldC5maWxlc1swXSxkLnNlbGVjdGVkRmlsZSYmKGQuZmlsZUxvYWRpbmdTdGF0ZT12Uy5yZWFkaW5nLGQuc2VsZWN0ZWRGaWxlLnNpemVNQj1kLnNwcmVhZHNoZWV0U2Vydmlj''@;'; put 'put ''ZS5ieXRlc1RvTUIoZC5zZWxlY3RlZEZpbGUuc2l6ZSksZC5zcHJlYWRzaGVldFNlcnZpY2UueGxzeFJlYWRGaWxlKGQuc2VsZWN0ZWRGaWxlKS50aGVuKHY9PntkLmZpbGVMb2FkaW5nU3RhdGU9dlMucGFyc2luZyxkLnNlbGVjdGVkRmlsZS53b3JrYm9vaz12fSkpLGQuaW5pdFVzZXJJbnB1''@;'; put 'put ''dEhvdCgpLHNldFRpbWVvdXQoKCk9PntkLm9uQXV0b0RldGVjdENvbHVtbnMoKX0sMTAwKTtlbHNle2lmKCJjc3YiIT09ZilyZXR1cm4gdm9pZCBkLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLCJPbmx5IGV4Y2VsIGV4dGVuc2lvbnMgYXJlIGFsbG93ZWQuICh4bHN4KSIsbnVs''@;'; put 'put ''bCwiRXh0ZW5zaW9uIEVycm9yIik7ZC5vbk11bHRpQ3N2RmlsZXMoYS50YXJnZXQuZmlsZXMpfWEudGFyZ2V0LnZhbHVlPSIifSkoKX1vbk11bHRpQ3N2RmlsZXMoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Zm9yKGxldCBoIG9mIGEpe2NvbnN0IGY9ZC5wYXJzZURhdGFz''@;'; put 'put ''ZXRGcm9tQ3N2TmFtZShoLm5hbWUpO2QuaXNWYWxpZERhdGFzZXRGb3JtYXQoZikmJmQuaXNWYWxpZERhdGFzZXRSZWZlcmVuY2UoZikmJmQuY3N2RmlsZXMucHVzaCh7ZmlsZTpoLGZpbGVOYW1lOmgubmFtZX0pfWQuY3N2RmlsZXMubGVuZ3RoPyhkLmNzdlN1Ym1pdHRpbmc9ITAseWllbGQg''@;'; put 'put ''ZC5zdWJtaXRDc3ZGaWxlcygpLGQuY3N2U3VibWl0dGluZz0hMSk6ZC5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiQ1NWIFVwbG9hZCIsIk5vbmUgb2YgdGhlIGF0dGFjaGVkIENTViBmaWxlIG5hbWVzIG1hdGNoZWQgYW4gYWN0dWFsIGRhdGFzZXQuIil9KSgpfW9uRGlzY2FyZEZpbGUo''@;'; put 'put ''KXt0aGlzLnNlbGVjdGVkRmlsZT1udWxsLHRoaXMudXNlcklucHV0RGF0YXNldHM9IiJ9b25TdGFydFBhcnNpbmdGaWxlKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS51cGxvYWRMb2FkaW5nPSEwO2NvbnN0IGQ9W107bGV0IGg9W107Zm9yKGxldCBmIG9mIGEubWF0Y2hl''@;'; put 'put ''ZERhdGFzZXRzKXtjb25zdCB2PWEuZmV0Y2hEYXRhc2V0KGYpO2QucHVzaCh2KX1Qcm9taXNlLmFsbFNldHRsZWQoZCkudGhlbihmPT57Zi5mb3JFYWNoKE09PnsiZnVsZmlsbGVkIj09PU0uc3RhdHVzJiZNLnZhbHVlJiZoLnB1c2goTS52YWx1ZSl9KSxhLnVwbG9hZExvYWRpbmc9ITEsYS5i''@;'; put 'put ''dWlsZERhdGFzZXRzT2JqZWN0cyhoKS5mb3JFYWNoKE09PnthLnBhcnNlZERhdGFzZXRzLnB1c2goe2xpYmRzOk0ubGliZHMsaW5jbHVkZUluU3VibWlzc2lvbjohMCxkYXRhc2V0SW5mbzpNLHBhcnNpbmdUYWJsZTohMH0pfSksYS53b3JrYm9va0xvYWRlZCgpLnRoZW4oTT0+e2ZvcihsZXQg''@;'; put 'put ''RCBvZiBhLnBhcnNlZERhdGFzZXRzKWEuc3ByZWFkc2hlZXRTZXJ2aWNlLnBhcnNlRXhjZWxGaWxlKHtmaWxlOmEuc2VsZWN0ZWRGaWxlLHdvcmtib29rOk0scGFzc3dvcmQ6YS5zZWxlY3RlZEZpbGUucGFzc3dvcmR8fHZvaWQgMCxkY1ZhbGlkYXRvcjpELmRhdGFzZXRJbmZvLmRjVmFsaWRh''@;'; put 'put ''dG9yLGhlYWRlclBrczpELmRhdGFzZXRJbmZvLmhlYWRlclBrcyxoZWFkZXJBcnJheTpELmRhdGFzZXRJbmZvLmhlYWRlckFycmF5LGhlYWRlclNob3c6W10sdGltZUhlYWRlcnM6RC5kYXRhc2V0SW5mby50aW1lSGVhZGVycyxkYXRlSGVhZGVyczpELmRhdGFzZXRJbmZvLmRhdGVIZWFkZXJz''@;'; put 'put ''LGRhdGVUaW1lSGVhZGVyczpELmRhdGFzZXRJbmZvLmRhdGVUaW1lSGVhZGVycyx4bFJ1bGVzOkQuZGF0YXNldEluZm8ueGxSdWxlc30pLnRoZW4oVT0+e2lmKGEuZmlsZUxvYWRpbmdTdGF0ZT12Uy5wYXJzZWQsVSYmVS5kYXRhKXtsZXQgdGU9W107VS5kYXRhLm1hcChvZT0+e2xldCB2ZT17''@;'; put 'put ''fTtVLmhlYWRlclNob3cubWFwKCh3ZSxGZSk9Pnt2ZVt3ZV09b2VbRmVdfSksdmUuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19ffHwodmUuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fPSJObyIpLHRlLnB1c2godmUpfSksRC5kYXRhc291cmNlPXRlLEQucGFyc2VSZXN1bHQ9''@;'; put 'put ''VSxELnBhcnNpbmdUYWJsZT0hMX19KS5jYXRjaChVPT57Y29uc29sZS53YXJuKCJQYXJzaW5nIGV4Y2VsIGZpbGUgZXJyb3IuIixVKSxELmRhdGFzb3VyY2U9W10sRC5pbmNsdWRlSW5TdWJtaXNzaW9uPSExLEQucGFyc2luZ1RhYmxlPSExfSl9KX0pfSkoKX1vblN1Ym1pdEFsbCgpe3RoaXMu''@;'; put 'put ''dGFibGVzVG9TdWJtaXQubGVuZ3RoP3RoaXMuc2hvd1N1Ym1pdFJlYXNvbk1vZGFsPSEwOnRoaXMuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIk5vIHRhYmxlcyB0byBzdWJtaXQiLCJQbGVhc2UgaW5jbHVkZSBhdCBsZWFzdCBvbmUgdGFibGUgdG8gcHJvY2VlZC4iKX1vbkRpc2NhcmQo''@;'; put 'put ''KXt0aGlzLnBhcnNlZERhdGFzZXRzPVtdLHRoaXMubWF0Y2hlZERhdGFzZXRzPVtdLHRoaXMuc2VsZWN0ZWRGaWxlPW51bGwsdGhpcy51c2VySW5wdXREYXRhc2V0cz0iIix0aGlzLnN1Ym1pdFJlYXNvbk1lc3NhZ2U9IiJ9aW5pdEhvdCgpe3NldFRpbWVvdXQoKCk9PntpZih0aGlzLmhvdFRh''@;'; put 'put ''YmxlTWFpbkNvbXBvbmVudD8uaG90SW5zdGFuY2Upe3RoaXMuaG90SW5zdGFuY2U9dGhpcy5ob3RUYWJsZU1haW5Db21wb25lbnQuaG90SW5zdGFuY2U7Y29uc3QgZD10aGlzLmNvbnRlbnRBcmVhUmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0LTE2MCsicHgiO3RoaXMuYWN0aXZlUGFy''@;'; put 'put ''c2VkRGF0YXNldCYmKHRoaXMuaG90SW5zdGFuY2UudXBkYXRlU2V0dGluZ3Moe2NvbEhlYWRlcnM6dGhpcy5hY3RpdmVQYXJzZWREYXRhc2V0LmRhdGFzZXRJbmZvLmhlYWRlckNvbHVtbnMsY29sdW1uczp0aGlzLmFjdGl2ZVBhcnNlZERhdGFzZXQuZGF0YXNldEluZm8uZGNWYWxpZGF0b3I/''@;'; put 'put ''LmdldFJ1bGVzKCkscmVhZE9ubHk6ITAsaGVpZ2h0OmR8fCIzMDBweCIsY2xhc3NOYW1lOlsiaHREYXJrIl19KSx0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCksc2V0VGltZW91dCgoKT0+e3RoaXMuYWN0aXZlUGFyc2VkRGF0YXNldCYmdGhpcy5hY3RpdmVQYXJzZWREYXRhc2V0LmRhdGFzb3Vy''@;'; put 'put ''Y2UmJih0aGlzLmhvdEluc3RhbmNlLmxvYWREYXRhKHRoaXMuYWN0aXZlUGFyc2VkRGF0YXNldC5kYXRhc291cmNlKSx0aGlzLmhvdEluc3RhbmNlLnJlbmRlcigpKX0sMTAwKSl9fSwxMDApfWluaXRVc2VySW5wdXRIb3QoKXt2YXIgYT10aGlzO3NldFRpbWVvdXQoKCk9Pnt0aGlzLmhvdFRh''@;'; put 'put ''YmxlVXNlckRhdGFzZXRDb21wb25lbnQ/LmhvdEluc3RhbmNlJiYodGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0PXRoaXMuaG90VGFibGVVc2VyRGF0YXNldENvbXBvbmVudC5ob3RJbnN0YW5jZSxzZXRUaW1lb3V0KCgpPT57dGhpcy5ob3RVc2VyRGF0YXNldHMuZGF0YSYmKHRoaXMuaG90''@;'; put 'put ''SW5zdGFuY2VVc2VyRGF0YXNldC5sb2FkRGF0YSh0aGlzLmhvdFVzZXJEYXRhc2V0cy5kYXRhKSx0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQucmVuZGVyKCkpfSw1MCksdGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LmFkZEhvb2soImJlZm9yZUNoYW5nZSIsKGQsaCk9PntpZihkKWZv''@;'; put 'put ''cihsZXQgZiBvZiBkKWYmJmZbM10mJihmWzNdPWZbM10udG9VcHBlckNhc2UoKSl9KSx0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLGZ1bmN0aW9uKCl7dmFyIGQ9ZWUoZnVuY3Rpb24qKGgsZil7aWYoaCl7ImVkaXQiPT09ZiYmKHlpZWxkIGEub25V''@;'; put 'put ''c2VySW5wdXREYXRhc2V0c0NoYW5nZSgpKTtmb3IobGV0IHYgb2YgaClhLm1hcmtVbm1hdGNoZWRSb3dzKHZbMF0pO2EuZHluYW1pY0NlbGxWYWxpZGF0aW9ucygpLGEuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5yZW5kZXIoKX19KTtyZXR1cm4gZnVuY3Rpb24oaCxmKXtyZXR1cm4gZC5hcHBs''@;'; put 'put ''eSh0aGlzLGFyZ3VtZW50cyl9fSgpKSx0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuYWRkSG9vaygiYWZ0ZXJSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7dmFyIGQ9ZWUoZnVuY3Rpb24qKGgsZix2LE0pe3lpZWxkIGEub25Vc2VySW5wdXREYXRhc2V0c0NoYW5nZSgpO2ZvcihsZXQgRCBvZiB2''@;'; put 'put ''KWEubWFya1VubWF0Y2hlZFJvd3MoRCl9KTtyZXR1cm4gZnVuY3Rpb24oaCxmLHYsTSl7cmV0dXJuIGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkpfSwxMDApfWR5bmFtaWNDZWxsVmFsaWRhdGlvbnMoKXt0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQmJnRoaXMuaG90SW5zdGFuY2VV''@;'; put 'put ''c2VyRGF0YXNldC5nZXREYXRhKCkuZm9yRWFjaCgoZCxoKT0+e2NvbnN0IGY9ZFswXTtmJiZmLmxlbmd0aCYmdGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LnNldENlbGxNZXRhKGgsMSwic291cmNlIix0aGlzLmxpYnNBbmRUYWJsZXNbZl0pfSl9bWFya1VubWF0Y2hlZFJvd3MoYSl7aWYo''@;'; put 'put ''IXRoaXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldClyZXR1cm47Y29uc3QgZD10aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuZ2V0RGF0YUF0Um93KGEpLGg9YCR7ZFswXX0uJHtkWzFdfWAsZj10aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuZ2V0Q2VsbE1ldGFBdFJvdyhhKTtkJiZkWzBd''@;'; put 'put ''JiZkWzFdP3RoaXMubWF0Y2hlZERhdGFzZXRzLmluY2x1ZGVzKGgpP2YuZm9yRWFjaCh2PT57dGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LnNldENlbGxNZXRhKGEsdi5jb2wsImNsYXNzTmFtZSIsIiIpfSk6Zi5mb3JFYWNoKHY9Pnt0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuc2V0''@;'; put 'put ''Q2VsbE1ldGEoYSx2LmNvbCwiY2xhc3NOYW1lIiwibm90LW1hdGNoZWQiKX0pOmYuZm9yRWFjaCh2PT57dGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LnNldENlbGxNZXRhKGEsdi5jb2wsImNsYXNzTmFtZSIsIiIpfSl9b25Vc2VySW5wdXREYXRhc2V0c0NoYW5nZSgpe3JldHVybiBuZXcg''@;'; put 'put ''UHJvbWlzZSgoYSxkKT0+e3RoaXMuaGVscGVyU2VydmljZS5kZWJvdW5jZUNhbGwoMTAwLCgpPT57Y29uc3QgaD10aGlzLmdldERhdGFzZXRzRnJvbUhvdCgpO3RoaXMubWF0Y2hlZERhdGFzZXRzPVtdLGguZm9yRWFjaChmPT57Y29uc3Qgdj1mLnRyaW0oKTt0aGlzLmlzVmFsaWREYXRhc2V0''@;'; put 'put ''Rm9ybWF0KHYpJiZ0aGlzLmlzVmFsaWREYXRhc2V0UmVmZXJlbmNlKHYpJiYhdGhpcy5tYXRjaGVkRGF0YXNldHMuaW5jbHVkZXModik/dGhpcy5tYXRjaGVkRGF0YXNldHMucHVzaCh2KTpjb25zb2xlLndhcm4oYFNoZWV0IG5hbWU6ICR7dn0gaXMgbm90IGFuIGFjdHVhbCBkYXRhc2V0IHJl''@;'; put 'put ''ZmVyZW5jZS5gKX0pLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSxhKHZvaWQgMCl9KX0pfW9uQXV0b0RldGVjdENvbHVtbnMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtpZighYS5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0KXtsZXQgdj0wO2NvbnN0IE09MjA7Zm9yKDshYS5o''@;'; put 'put ''b3RJbnN0YW5jZVVzZXJEYXRhc2V0JiZ2PE07KXlpZWxkIG5ldyBQcm9taXNlKEQ9PnNldFRpbWVvdXQoRCwxMDApKSx2Kys7aWYoIWEuaG90SW5zdGFuY2VVc2VyRGF0YXNldClyZXR1cm4gdm9pZCBjb25zb2xlLndhcm4oImhvdEluc3RhbmNlVXNlckRhdGFzZXQgbm90IHJlYWR5IGFmdGVy''@;'; put 'put ''IHdhaXRpbmciKX1sZXQgZD0hMTtpZih5aWVsZCBhLnBhcnNlRXhjZWxTaGVldE5hbWVzKCkudGhlbih2PT57YS5zaGVldE5hbWVzPXZ9KS5jYXRjaCh2PT57di5pbmNsdWRlcygicGFzc3dvcmQiKSYmKGQ9ITApfSksZClyZXR1cm4gYS5vbkRpc2NhcmRGaWxlKCksdm9pZCBhLmV2ZW50U2Vy''@;'; put 'put ''dmljZS5zaG93SW5mb01vZGFsKCJMb2NrZWQgZmlsZSIsIldlIGZhaWxlZCB0byB1bmxvY2sgdGhlIGZpbGUuIik7YS5zaGVldE5hbWVzJiYoYS5tYXRjaGVkRGF0YXNldHM9W10sYS51c2VySW5wdXREYXRhc2V0cz0iIixhLnNoZWV0TmFtZXMuZm9yRWFjaCgodixNKT0+e2NvbnN0IEQ9di50''@;'; put 'put ''cmltKCk7YS5pc1ZhbGlkRGF0YXNldEZvcm1hdChEKSYmYS5pc1ZhbGlkRGF0YXNldFJlZmVyZW5jZShEKT9hLm1hdGNoZWREYXRhc2V0cy5wdXNoKEQpOmNvbnNvbGUud2FybihgU2hlZXQgbmFtZTogJHtEfSBpcyBub3QgYW4gYWN0dWFsIGRhdGFzZXQgcmVmZXJlbmNlLmApfSkpLGEudXNl''@;'; put 'put ''cklucHV0RGF0YXNldHM9YS5tYXRjaGVkRGF0YXNldHMuam9pbigiXG4iKTtjb25zdCBoPWEubWF0Y2hlZERhdGFzZXRzLm1hcCh2PT5bdi5zcGxpdCgiLiIpWzBdLHYuc3BsaXQoIi4iKVsxXV0pLGY9YS5ob3RVc2VyRGF0YXNldHMuZGF0YS5sZW5ndGg7aWYoaC5sZW5ndGg8Zil7Y29uc3Qg''@;'; put 'put ''dj1mLWgubGVuZ3RoO2ZvcihsZXQgTT0wO008djtNKyspaC5wdXNoKFsiIiwiIl0pfWEuaG90SW5zdGFuY2VVc2VyRGF0YXNldCYmc2V0VGltZW91dCgoKT0+e2EuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5sb2FkRGF0YShoKSxhLmhvdEluc3RhbmNlVXNlckRhdGFzZXQucmVuZGVyKCl9LDEw''@;'; put 'put ''MCksYS5keW5hbWljQ2VsbFZhbGlkYXRpb25zKCl9KSgpfW9uUGFyc2VkRGF0YXNldENsaWNrKGEpe3RoaXMuZGVzZWxlY3RBbGxQYXJzZWREYXRhc2V0cygpLGEuYWN0aXZlPSEwLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSx0aGlzLmluaXRIb3QoKX1vblN1Ym1pdHRlZENzdkRhdGFzZXRD''@;'; put 'put ''bGljayhhKXt0aGlzLmRlc2VsZWN0QWxsU3VibWl0dGVkQ3N2RGF0YXNldHMoKSxhLmFjdGl2ZT0hMH1nZXQgYWN0aXZlUGFyc2VkRGF0YXNldCgpe3JldHVybiB0aGlzLnBhcnNlZERhdGFzZXRzLmZpbmQoYT0+YS5hY3RpdmUpfWdldCBhY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0KCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuc3VibWl0dGVkQ3N2RGF0YXNldHMuZmluZChhPT5hLmFjdGl2ZSl9Z2V0IG5vdEZvdW5kRGF0YXNldHMoKXtyZXR1cm4gdGhpcy5nZXREYXRhc2V0c0Zyb21Ib3QoKS5maWx0ZXIoZD0+IXRoaXMubWF0Y2hlZERhdGFzZXRzLmluY2x1ZGVzKGQudHJpbSgpKSkuZmlsdGVyKGQ9''@;'; put 'put ''PmQubGVuZ3RoKX1nZXQgaXNIb3RIaWRkZW4oKXtpZighdGhpcy5ob3RJbnN0YW5jZSlyZXR1cm4hMDt0cnl7Y29uc3QgYT10aGlzLmhvdEluc3RhbmNlLmdldFNldHRpbmdzKCkuY2xhc3NOYW1lO3JldHVybiEhYSYmYS5pbmNsdWRlcygiaHRDdXN0b21IaWRkZW4iKX1jYXRjaHtyZXR1cm4h''@;'; put 'put ''MH19Z2V0IHRhYmxlc1RvU3VibWl0KCl7cmV0dXJuIHRoaXMucGFyc2VkRGF0YXNldHMuZmlsdGVyKGE9PmEuZGF0YXNvdXJjZSYmYS5wYXJzZVJlc3VsdCYmYS5pbmNsdWRlSW5TdWJtaXNzaW9uKX1nZXQgc3VibWl0dGluZ0Nzdigpe3JldHVybiB0aGlzLmNzdkZpbGVzLmxlbmd0aD4wfWdl''@;'; put 'put ''dCBleGNlbHNTdWJtaXR0ZWQoKXtyZXR1cm4hIXRoaXMucGFyc2VkRGF0YXNldHMuZmlsdGVyKGE9PmEuc3VibWl0UmVzdWx0KS5sZW5ndGh9ZG93bmxvYWRGaWxlKGEpe3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGBzdGFnZWRhdGEtJHt0aGlzLmFjdGl2ZVN1Ym1pdHRl''@;'; put 'put ''ZENzdkRhdGFzZXQ/LmxpYmRzfS1sb2dgLEpTT04uc3RyaW5naWZ5KGEpKX1zdWJtaXRDc3ZGaWxlcygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBkPVtdO2ZvcihsZXQgaCBvZiBhLmNzdkZpbGVzKXtjb25zdCBmPWEucGFyc2VEYXRhc2V0RnJvbUNzdk5hbWUoaC5m''@;'; put 'put ''aWxlTmFtZSk7bGV0IHYsTTt5aWVsZCBhLnNhc1NlcnZpY2UudXBsb2FkRmlsZSgic2VydmljZXMvZWRpdG9ycy9sb2FkZmlsZSIsW2hdLHt0YWJsZTpmfSkudGhlbihEPT57dHlwZW9mIEQuYWRhcHRlclJlc3BvbnNlLnNhc2pzQWJvcnQ8InUiP3Y9RC5hZGFwdGVyUmVzcG9uc2Uuc2FzanNB''@;'; put 'put ''Ym9ydDpNPUQuYWRhcHRlclJlc3BvbnNlfSxEPT57Y29uc29sZS5lcnJvcigiZXJyIixEKSx2PUQuYWRhcHRlclJlc3BvbnNlfSksZC5wdXNoKHtzdWNjZXNzOk0sZXJyb3I6dixsaWJkczpmfSl9YS5zdWJtaXR0ZWRDc3ZEYXRhc2V0cz1kfSkoKX1mZXRjaERhdGFzZXQoYSl7dmFyIGQ9dGhp''@;'; put 'put ''cztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aWYoYSlyZXR1cm4gZC5zYXNTdG9yZVNlcnZpY2UuY2FsbFNlcnZpY2Uoe0xJQkRTOmEsT1VUREVTVDoiV0VCIn0sIlNBU0NvbnRyb2xUYWJsZSIsImVkaXRvcnMvZ2V0ZGF0YSIsYSkudGhlbihmPT5mKS5jYXRjaChmPT57Y29uc29sZS53YXJuKGBF''@;'; put 'put ''cnJvciBmZXRjaGluZyAke2F9YCxmKX0pfSkoKX1zdWJtaXRUYWJsZXMoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Y29uc29sZS5pbmZvKCJTdWJtaXR0aW5nIG11bHRpcGxlIHRhYmxlcyIsZC5wYXJzZWREYXRhc2V0cyksZC5zdWJtaXRMb2FkaW5nPSEwO2ZvcihsZXQg''@;'; put 'put ''aCBvZiBkLnBhcnNlZERhdGFzZXRzKXtpZighaC5wYXJzZVJlc3VsdHx8IWguZGF0YXNvdXJjZXx8IWguaW5jbHVkZUluU3VibWlzc2lvbnx8YSYmIWEuaW5jbHVkZXMoaC5saWJkcykpY29udGludWU7bGV0IGY9e307ZC5zdWJtaXRSZWFzb25NZXNzYWdlPWQuc3VibWl0UmVhc29uTWVzc2Fn''@;'; put 'put ''ZS5yZXBsYWNlKC9cbi9nLCIuICIpLGYuQUNUSU9OPSJMT0FEIixmLk1FU1NBR0U9ZC5zdWJtaXRSZWFzb25NZXNzYWdlLGYuTElCRFM9aC5saWJkcztsZXQgdj1oLmRhdGFzb3VyY2U7aWYodil7dj12Lm1hcCh2ZT0+e2xldCB3ZT12ZS5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX187''@;'; put 'put ''cmV0dXJuIGRlbGV0ZSB2ZS5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18sdmUuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fPXdlLE9iamVjdC5rZXlzKHZlKS5tYXAoRmU9PnsibnVtZXJpYyI9PT1oLmRhdGFzZXRJbmZvLmRjVmFsaWRhdG9yPy5nZXRSdWxlKEZlKT8udHlw''@;'; put 'put ''ZSYmIi4iPT09dmVbRmVdJiYodmVbRmVdPW51bGwpfSksdmV9KTtjb25zdCBNPXYuc2xpY2UoMCxkLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCk7bGV0IEQsVSx0ZTt5aWVsZCBkLnNhc1N0b3JlU2VydmljZS51cGRhdGVUYWJsZShmLE0sIlNBU0NvbnRyb2xUYWJsZSIs''@;'; put 'put ''ImVkaXRvcnMvc3RhZ2VkYXRhIixoLmRhdGFzZXRJbmZvLmRhdGEuJHNhc2RhdGEsITAse2RlYnVnOiEwfSkudGhlbih2ZT0+e1U9dmUuYWRhcHRlclJlc3BvbnNlLHRlPXZlLmxvZ30pLmNhdGNoKHZlPT57Y29uc29sZS5lcnJvcigiZXJyIix2ZSksRD12ZS5hZGFwdGVyUmVzcG9uc2UsdGU9''@;'; put 'put ''dmUubG9nfSksaC5zdWJtaXRSZXN1bHQ9e3N1Y2Nlc3M6VSxlcnJvcjpELGxvZzp0ZSxwYXJzZVJlc3VsdDpoLnBhcnNlUmVzdWx0LGxpYmRzOmgubGliZHN9fX1kLnNob3dTdWJtaXRSZWFzb25Nb2RhbD0hMSxkLnN1Ym1pdExvYWRpbmc9ITEsZC5kZXNlbGVjdEFsbFBhcnNlZERhdGFzZXRz''@;'; put 'put ''KCl9KSgpfXJlU3VibWl0VGFibGUoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7eWllbGQgZC5zdWJtaXRUYWJsZXMoW2EubGliZHNdKTtjb25zdCBoPWQucGFyc2VkRGF0YXNldHMuZmluZChmPT5mLmxpYmRzPT09YS5saWJkcyk7aCYmKGguYWN0aXZlPSEwKX0pKCl9d29y''@;'; put 'put ''a2Jvb2tMb2FkZWQoKXtyZXR1cm4gbmV3IFByb21pc2UoKGEsZCk9Pnt0aGlzLnNlbGVjdGVkRmlsZXx8ZCgiTm8gZmlsZSBzZWxlY3RlZCIpLHRoaXMud29ya2Jvb2tJbnRlcnZhbD1zZXRJbnRlcnZhbCgoKT0+e3RoaXMuc2VsZWN0ZWRGaWxlLndvcmtib29rJiYoY2xlYXJJbnRlcnZhbCh0''@;'; put 'put ''aGlzLndvcmtib29rSW50ZXJ2YWwpLGEodGhpcy5zZWxlY3RlZEZpbGUud29ya2Jvb2spKX0sNTAwKX0pfXBhcnNlRGF0YXNldEZyb21Dc3ZOYW1lKGEpe2NvbnN0IGQ9YS5zcGxpdCgiLiIpO3JldHVybiBkLnBvcCgpLGQuam9pbigiLiIpfWdldERhdGFzZXRzRnJvbUhvdCgpe3JldHVybiB0''@;'; put 'put ''aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQ/dGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LmdldERhdGEoKS5maWx0ZXIoZD0+ZFswXT8ubGVuZ3RoJiZkWzFdPy5sZW5ndGgpLm1hcChkPT5kP2Ake2RbMF19LiR7ZFsxXX1gOiIiKTpbXX1wYXJzZUV4Y2VsU2hlZXROYW1lcygpe3ZhciBh''@;'; put 'put ''PXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2lmKCFhLnNlbGVjdGVkRmlsZSlyZXR1cm4gZChbXSk7YS5zcHJlYWRzaGVldFNlcnZpY2UucGFyc2VFeGNlbFNoZWV0TmFtZXMoYS5zZWxlY3RlZEZpbGUpLnRoZW4oZj0+KGYucGFzc3dvcmQm''@;'; put 'put ''JihhLnNlbGVjdGVkRmlsZS5wYXNzd29yZD1mLnBhc3N3b3JkKSxkKGYuc2hlZXROYW1lcykpKS5jYXRjaChmPT5oKGYpKX0pfSkoKX1pc1ZhbGlkRGF0YXNldEZvcm1hdChhKXtyZXR1cm4vXlx3ezEsOH1cLlx3ezEsMzJ9JC9naW0udGVzdChhKX1pc1ZhbGlkRGF0YXNldFJlZmVyZW5jZShh''@;'; put 'put ''KXtjb25zdCBkPWEuc3BsaXQoIi4iKVswXSxoPWEuc3BsaXQoIi4iKVsxXTtyZXR1cm4hIXRoaXMubGlic0FuZFRhYmxlc1tkXT8uaW5jbHVkZXMoaCl9YnVpbGREYXRhc2V0c09iamVjdHMoYSl7aWYoIWEpcmV0dXJuW107Y29uc3QgZD1bXTtmb3IobGV0IGggb2YgYSlpZihoLmRhdGEpe2Nv''@;'; put 'put ''bnN0IGY9ey4uLmgsaG90VGFibGU6e2RhdGE6aC5kYXRhLnNhc2RhdGEsc2V0dGluZ3M6e319LGNvbHM6W10saGVhZGVyQ29sdW1uczpbXSxoZWFkZXJQa3M6W10saGVhZGVyQXJyYXk6W10sZGF0ZUhlYWRlcnM6W10sdGltZUhlYWRlcnM6W10sZGF0ZVRpbWVIZWFkZXJzOltdLHhsUnVsZXM6''@;'; put 'put ''W10sY29sdW1uSGVhZGVyOltdfTtmLmNvbHM9aC5kYXRhLmNvbHMsZi5oZWFkZXJDb2x1bW5zPWguZGF0YS5zYXNwYXJhbXNbMF0uQ09MSEVBREVSUy5zcGxpdCgiLCIpLGYuaGVhZGVyUGtzPWguZGF0YS5zYXNwYXJhbXNbMF0uUEsuc3BsaXQoIiAiKSwtMSE9PWYuaGVhZGVyQ29sdW1ucy5p''@;'; put 'put ''bmRleE9mKCJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iKSYmKGYuaGVhZGVyQ29sdW1uc1tmLmhlYWRlckNvbHVtbnMuaW5kZXhPZigiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIildPSJEZWxldGU/IiksZi5oZWFkZXJBcnJheT1mLmhlYWRlckNvbHVtbnMuc2xpY2Uo''@;'; put 'put ''MSksIiIhPT1oLmRhdGEuc2FzcGFyYW1zWzBdLkRUVkFSUyYmKGYuZGF0ZUhlYWRlcnM9aC5kYXRhLnNhc3BhcmFtc1swXS5EVFZBUlMuc3BsaXQoIiAiKSksIiIhPT1oLmRhdGEuc2FzcGFyYW1zWzBdLlRNVkFSUyYmKGYudGltZUhlYWRlcnM9aC5kYXRhLnNhc3BhcmFtc1swXS5UTVZBUlMu''@;'; put 'put ''c3BsaXQoIiAiKSksIiIhPT1oLmRhdGEuc2FzcGFyYW1zWzBdLkRUVE1WQVJTJiYoZi5kYXRlVGltZUhlYWRlcnM9aC5kYXRhLnNhc3BhcmFtc1swXS5EVFRNVkFSUy5zcGxpdCgiICIpKSxoLmRhdGEueGxfcnVsZXMubGVuZ3RoPjAmJihmLnhsUnVsZXM9dGhpcy5oZWxwZXJTZXJ2aWNlLmRl''@;'; put 'put ''ZXBDbG9uZShoLmRhdGEueGxfcnVsZXMpKSxmLmRjVmFsaWRhdG9yPW5ldyBTeWUoaC5kYXRhLnNhc3BhcmFtc1swXSxoLmRhdGEuJHNhc2RhdGEsaC5kYXRhLmNvbHMsaC5kYXRhLmRxcnVsZXMsaC5kYXRhLmRxZGF0YSksZi5jb2x1bW5IZWFkZXI9aC5kYXRhLnNhc3BhcmFtc1swXS5DT0xI''@;'; put 'put ''RUFERVJTLnNwbGl0KCIsIiksZC5wdXNoKGYpfXJldHVybiBkfWRlc2VsZWN0QWxsUGFyc2VkRGF0YXNldHMoKXtmb3IobGV0IGEgb2YgdGhpcy5wYXJzZWREYXRhc2V0cylhLmFjdGl2ZT0hMX1kZXNlbGVjdEFsbFN1Ym1pdHRlZENzdkRhdGFzZXRzKCl7Zm9yKGxldCBhIG9mIHRoaXMuc3Vi''@;'; put 'put ''bWl0dGVkQ3N2RGF0YXNldHMpYS5hY3RpdmU9ITF9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUoRWMpLHFlKE8xKSxxZShMdSkscWUoTTIpLHFlKGt5ZSkscWUoS3MpLHFlKEhzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1hcih7dHlwZTpj''@;'; put 'put ''LHNlbGVjdG9yczpbWyJhcHAtbXVsdGktZGF0YXNldCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJihVYShVeHQsNyksVWEoWnh0LDUpLFVhKFd4dCw1KSksMiZkKXtsZXQgZjtnaShmPW1pKCkpJiYoaC5jb250ZW50QXJlYVJlZj1mLmZpcnN0KSxnaShmPW1pKCkpJiYoaC5o''@;'; put 'put ''b3RUYWJsZU1haW5Db21wb25lbnQ9Zi5maXJzdCksZ2koZj1taSgpKSYmKGguaG90VGFibGVVc2VyRGF0YXNldENvbXBvbmVudD1mLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MiZkJiZ4cigiY29udGVudC1jb250YWluZXIiLGguY29udGVudENvbnRh''@;'; put 'put ''aW5lckNsYXNzKX0sc3RhbmRhbG9uZTohMSxkZWNsczozNyx2YXJzOjE4LGNvbnN0czpbWyJjb250ZW50QXJlYSIsIiJdLFsiZmlsZVVwbG9hZElucHV0IiwiIl0sWyJob3RJbnN0YW5jZVVzZXJEYXRhc2V0IiwiIl0sWyJob3RJbnN0YW5jZU1haW4iLCIiXSxbImNsYXNzIiwibXktMTAtbXgt''@;'; put 'put ''YXV0byB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBtYi0xMCIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjYXJkIiwibm8tYm9yZGVycyIsImgtMTAwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWzEsImhlYWRl''@;'; put 'put ''ci1yb3ciLCJjbHItcm93IiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsInctMTAwIiwibS0wIl0sWyJjZHMtdGV4dCIsInNlY3Rpb24iXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQgcG9pbnRlci1ldmVudHMtbm9uZSIsNCwibmdJ''@;'; put 'put ''ZiJdLFszLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbImNkcy10ZXh0IiwiYm9keSIsImNsYXNzIiwibGljZW5jZS1saW1pdC1ub3RpY2UgbXQtMCBtYi0xNSIsNCwibmdJ''@;'; put 'put ''ZiJdLFsxLCJ0ZXh0LWFyZWEtZnVsbC13aWR0aCJdLFsiZm9yIiwiZm9ybUZpZWxkc184IiwxLCJtYi01IiwiZC1ibG9jayJdLFsiY2xyVGV4dGFyZWEiLCIiLCJ0YWJpbmRleCIsIjAiLCJ0eXBlIiwidGV4dCIsImlkIiwiZm9ybUZpZWxkc184IiwxLCJzdWJtaXQtcmVhc29uIiwzLCJuZ01v''@;'; put 'put ''ZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsiY2RzLXRleHQiLCJjYXB0aW9uX2NsZWFuIiwxLCJtdC0xMCJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJ0eXBlIiwiYnV0dG9uIiwiaWQiLCJz''@;'; put 'put ''dWJtaXQtdGFibGVzIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWzEsInRleHQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiXSxbImNkcy10ZXh0IiwiY2FwdGlvbl9jbGVhbiIsMSwibXQtMTAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJteS0xMC1teC1hdXRv''@;'; put 'put ''IiwidGV4dC1jZW50ZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJtYi0xMCJdLFsiaWQiLCJicm93c2UtZmlsZSIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJidG4tc20iLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbImhpZGRlbiIsIiIsImlkIiwiZmlsZS11cGxvYWQiLCJ0eXBlIiwiZmlsZSIsIm11''@;'; put 'put ''bHRpcGxlIiwiIiwzLCJjaGFuZ2UiXSxbImNkcy10ZXh0IiwiY2FwdGlvbiIsMSwibWwtMTAiLCJtYi0xMCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiYnRuIiwiYnRuLWRhbmdlciIsImJ0bi1zbSIsIm1yLTEwIiwzLCJjbGljayJdLFsiaWQiLCJzdWJtaXQtYWxsIiwxLCJidG4iLCJi''@;'; put 'put ''dG4tcHJpbWFyeSIsImJ0bi1zbSIsMywiY2xpY2siXSxbMSwiY2xyLXRyZWVub2RlLWxpbmsiLCJ3aGl0ZXNwYWNlLW5vd3JhcCIsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDMsImNsaWNrIl0sWzEsIm1sLTUiXSxbInN0YXR1cyIsImRhbmdlciIsInNoYXBlIiwiZXhjbGFt''@;'; put 'put ''YXRpb24tY2lyY2xlIiw0LCJuZ0lmIl0sWyJzdGF0dXMiLCJzdWNjZXNzIiwic2hhcGUiLCJjaGVjay1jaXJjbGUiLDQsIm5nSWYiXSxbInN0YXR1cyIsImRhbmdlciIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIl0sWyJzdGF0dXMiLCJzdWNjZXNzIiwic2hhcGUiLCJjaGVjay1jaXJj''@;'; put 'put ''bGUiXSxbInNoYXBlIiwidGFibGUiLDQsIm5nSWYiXSxbInNoYXBlIiwidGFibGUiXSxbImNsclNtYWxsIiwiIiw0LCJuZ0lmIl0sWyJjbHJTbWFsbCIsIiJdLFsiY2RzLXRleHQiLCJjYXB0aW9uIiwxLCJtbC0xMCIsIm1iLTEwIiwibXQtMTAiXSxbMSwiY2xyLXRyZWVub2RlLWxpbmsiLCJ3''@;'; put 'put ''aGl0ZXNwYWNlLW5vd3JhcCIsMywiY2xpY2siXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQiLCJwb2ludGVyLWV2ZW50cy1ub25lIl0sWyJzaGFwZSIsInVwbG9hZC1jbG91ZCIsInNpemUiLCI0MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIiwxLCJ0''@;'; put 'put ''ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiLCJtdC0xMCJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsIm10LTE1Il0sWzEsImRhdGFzZXQtaW5wdXQtd3JhcHBlciJdLFsiY2RzLXRleHQiLCJzZWNvbmRhcnkgcmVndWxhciIsMSwibWItNSJdLFsiY2xyVG9vbHRp''@;'; put 'put ''cFRyaWdnZXIiLCIiLCJzaGFwZSIsInRyYXNoIiwic3RhdHVzIiwiZGFuZ2VyIiwxLCJtbC01IiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJjZHMtdGV4dCIsInNlY29uZGFyeSByZWd1bGFyIiwxLCJtYi0yMCJdLFsiY2RzLXRleHQiLCJzZWNvbmRhcnkgcmVndWxhciIsMSwibWIt''@;'; put 'put ''MTUiXSxbMSwibWItNSJdLFsiaWQiLCJob3RUYWJsZVVzZXJEYXRhc2V0IiwxLCJtdC0xNSIsMywic2V0dGluZ3MiXSxbMSwiZGF0YXNldC1zZWxlY3Rpb24tYWN0aW9ucyIsInRleHQtcmlnaHQiLCJtdC0xMCJdLFsiaWQiLCJjb250aW51ZS1idG4iLDEsImJ0biIsImJ0bi1wcmltYXJ5Iiwi''@;'; put 'put ''YnRuLXNtIiwzLCJjbGljayIsImRpc2FibGVkIiwiY2xyTG9hZGluZyJdLFsic2hhcGUiLCJwcm9jZXNzLW9uLXZtIiwic2l6ZSIsIjQwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNDAiLDEsImlzLWluZm8iLCJpY29u''@;'; put 'put ''LWRjLWZpbGwiXSxbImNsYXNzIiwiZC1mbGV4IGNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBwLTEwIG10LTE1IHN1Ym1pc3Npb24tcmVzdWx0cyIsNCwibmdJZiJdLFsiY2xhc3MiLCJlcnJvci1maWVsZCBtdC0xNSIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250''@;'; put 'put ''ZW50LWJldHdlZW4iLCJwLTEwIiwibXQtMTUiXSxbImNkcy10ZXh0Iiwic2Vjb25kYXJ5IHJlZ3VsYXIiLDEsIm1iLTEwIl0sWyJjZHMtdGV4dCIsInNlY29uZGFyeSByZWd1bGFyIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsMywicm91dGVyTGluayJdLFszLCJjbHJQb3NpdGlvbiIsImNs''@;'; put 'put ''clNpemUiXSxbInR5cGUiLCJjaGVja2JveCIsImNsclRvZ2dsZSIsIiIsIm5hbWUiLCJvcHRpb25zIiwicmVxdWlyZWQiLCIiLCJ2YWx1ZSIsIm9wdGlvbjEiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwiZGlzYWJsZWQiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgdy0xMDAiLDQsIm5n''@;'; put 'put ''SWYiXSxbImlkIiwiaG90VGFibGUiLDEsIm10LTE1IiwzLCJzZXR0aW5ncyJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJwLTEwIiwibXQtMTUiLCJzdWJtaXNzaW9uLXJlc3VsdHMiXSxbImNsYXNzIiwiY29sb3ItZ3JlZW4iLDQsIm5nSWYiXSxbImNsYXNz''@;'; put 'put ''IiwiY29sb3ItcmVkIiw0LCJuZ0lmIl0sWyJjZHMtdGV4dCIsInNlY29uZGFyeSByZWd1bGFyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImJ0biBidG4tcHJpbWFyeSBtdC0xMCIsMywiY2xyTG9hZGluZyIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5LW91dGxpbmUiLCJt''@;'; put 'put ''dC0xMCIsMywiY2xpY2siXSxbMSwiY29sb3ItZ3JlZW4iXSxbMSwiY29sb3ItcmVkIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwibXQtMTAiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsxLCJlcnJvci1maWVsZCIsIm10LTE1Il0sWzEsImxvZy13cmFwcGVyIl0sWyJjbGFzcyIsImQtZmxl''@;'; put 'put ''eCBjbHItYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsclNtYWxsIiwiIiwxLCJtbC01Il0sWzEsInRleHQtY2VudGVyIiwidy0xMDAiXSxbMSwic3Bpbm5lci1tZCJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlm''@;'; put 'put ''eS1jb250ZW50LWJldHdlZW4iLCJwLTEwIl0sWyJjZHMtdGV4dCIsImJvZHkiLDEsImxpY2VuY2UtbGltaXQtbm90aWNlIiwibXQtMCIsIm1iLTE1Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZkKXtjb25zdCBmPU9uKCk7ZGUoMCwiYXBwLXNpZGViYXIiKSxndCgxLFl4dCwyLDAs''@;'; put 'put ''ImRpdiIsNCkoMixHeHQsNSwxLCJkaXYiLDUpKDMsb0V0LDYsMiwibmctY29udGFpbmVyIiw2KSg0LHVFdCw1LDEsIm5nLWNvbnRhaW5lciIsNiksaGUoKSxkZSg1LCJkaXYiLDcsMCkoNywiZGl2Iiw4KSg4LCJkaXYiLDkpKDksInAiLDEwKSxQZSgxMCwiTXVsdGkgRGF0YXNldCBMb2FkIiks''@;'; put 'put ''aGUoKSgpLGd0KDExLGRFdCw0LDAsImRpdiIsMTEpKDEyLEZFdCw1LDQsIm5nLWNvbnRhaW5lciIsNiksaGUoKSgpLGRlKDEzLCJjbHItbW9kYWwiLDEyKSxjaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksZmkoaC5zaG93U3VibWl0UmVhc29uTW9kYWws''@;'; put 'put ''TSl8fChoLnNob3dTdWJtaXRSZWFzb25Nb2RhbD1NKSxDdChNKX0pLGRlKDE0LCJoMyIsMTMpLFBlKDE1KSxoZSgpLGRlKDE2LCJkaXYiLDE0KSxndCgxNyxIRXQsMiwxLCJwIiwxNSksZGUoMTgsImRpdiIsMTYpKDE5LCJsYWJlbCIsMTcpLFBlKDIwLCJNZXNzYWdlIiksaGUoKSxkZSgyMSwi''@;'; put 'put ''dGV4dGFyZWEiLDE4KSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGZpKGguc3VibWl0UmVhc29uTWVzc2FnZSxNKXx8KGguc3VibWl0UmVhc29uTWVzc2FnZT1NKSxDdChNKX0pLGhlKCkoKSxkZSgyMiwicCIsMTkpLFBlKDIzLCIgVGFibGVzIHdpbGwgYmUg''@;'; put 'put ''c2VudCBzZXF1ZW50aWFsbHksIGxvZ3Mgd2lsbCBiZSBhdmFpbGFibGUgYWZ0ZXIgYWxsIHRhYmxlcyBhcmUgc3VibWl0dGVkLiAiKSxoZSgpKCksZGUoMjQsImRpdiIsMjApKDI1LCJidXR0b24iLDIxKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguc2hvd1N1Ym1p''@;'; put 'put ''dFJlYXNvbk1vZGFsPSExKX0pLFBlKDI2LCIgQ2FuY2VsICIpLGhlKCksZGUoMjcsImJ1dHRvbiIsMjIpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5zdWJtaXRUYWJsZXMoKSl9KSxQZSgyOCwiIFN1Ym1pdCAiKSxoZSgpKCkoKSxkZSgyOSwiY2xyLW1vZGFsIiwx''@;'; put 'put ''MiksY2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGZpKGguY3N2U3VibWl0dGluZyxNKXx8KGguY3N2U3VibWl0dGluZz1NKSxDdChNKX0pLGRlKDMwLCJoMyIsMTMpLFBlKDMxKSxoZSgpLGRlKDMyLCJkaXYiLDE0KSgzMywiZGl2IiwyMyksR3QoMzQs''@;'; put 'put ''ImNsci1zcGlubmVyIiwyNCksaGUoKSxkZSgzNSwicCIsMjUpLFBlKDM2LCIgVGhpcyB3aWxsIHRha2UgZmV3IG1vbWVudHMgIiksaGUoKSgpKCl9MiZkJiYoZmUoKSxFZSgibmdJZiIsaC5kYXRhc2V0c0xvYWRpbmcpLGZlKCksRWUoIm5nSWYiLCFoLnBhcnNlZERhdGFzZXRzLmxlbmd0aCks''@;'; put 'put ''ZmUoKSxFZSgibmdJZiIsaC5wYXJzZWREYXRhc2V0cy5sZW5ndGgmJiFoLnN1Ym1pdHRlZENzdkRhdGFzZXRzLmxlbmd0aCksZmUoKSxFZSgibmdJZiIsaC5zdWJtaXR0ZWRDc3ZEYXRhc2V0cy5sZW5ndGgpLGZlKDcpLEVlKCJuZ0lmIixudWxsPT09aC5zZWxlY3RlZEZpbGUmJiFoLnN1Ym1p''@;'; put 'put ''dHRpbmdDc3YpLGZlKCksRWUoIm5nSWYiLG51bGwhPT1oLnNlbGVjdGVkRmlsZXx8aC5zdWJtaXR0aW5nQ3N2KSxmZSgpLGxpKCJjbHJNb2RhbE9wZW4iLGguc2hvd1N1Ym1pdFJlYXNvbk1vZGFsKSxFZSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDIpLFh1KCIgU3VibWl0ICIsaC50YWJs''@;'; put 'put ''ZXNUb1N1Ym1pdC5sZW5ndGgsIiAiLDE9PT1oLnRhYmxlc1RvU3VibWl0Lmxlbmd0aD8idGFibGUiOiJ0YWJsZXMiLCIgZm9yIGFwcHJvdmFsICIpLGZlKDIpLEVlKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCE9PWguSW5maW5pdHkpLGZlKDQpLGxpKCJu''@;'; put 'put ''Z01vZGVsIixoLnN1Ym1pdFJlYXNvbk1lc3NhZ2UpLGZlKDQpLEVlKCJkaXNhYmxlZCIsaC5zdWJtaXRMb2FkaW5nKSxmZSgyKSxFZSgiY2xyTG9hZGluZyIsaC5zdWJtaXRMb2FkaW5nKSxmZSgyKSxsaSgiY2xyTW9kYWxPcGVuIixoLmNzdlN1Ym1pdHRpbmcpLEVlKCJjbHJNb2RhbENsb3Nh''@;'; put 'put ''YmxlIiwhMSksZmUoMiksWHUoIiBTdWJtaXR0aW5nICIsaC5jc3ZGaWxlcy5sZW5ndGgsIiBDU1YgIiwxPT09aC5jc3ZGaWxlcy5sZW5ndGg/ImZpbGUiOiJmaWxlcyIsIiAiKSl9LGRlcGVuZGVuY2llczpbRzUsUDEsbmMsc2gsaGwsSUsscmwsdzIsbWgsdTUsVWwsZnMsYnUscjAsYzEsTGYs''@;'; put 'put ''Q3MsYUgsaGgseTIsdkgsazksSTksRDksZmgsc2csaHMsQ2EsU0ddLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCl9XX1dO2xldCBWRXQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUw''@;'; put 'put ''Mjc1bW9kPUVpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9eWkoe2ltcG9ydHM6W2V1LmZvckNoaWxkKE5FdCksZXVdfSl9fXJldHVybiBjfSkoKTtZRCgpO2xldCBCRXQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhk''@;'; put 'put ''fHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPUVpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9eWkoe2ltcG9ydHM6W2Z5LFZFdCxVYyx1MSxweSxOYSwkRCxuM119KX19cmV0dXJuIGN9KSgpO2NvbnN0IGpFdD1be3BhdGg6IiIsY29tcG9uZW50Ok9NdCxjaGlsZHJlbjpbe3Bh''@;'; put 'put ''dGg6IiIscGF0aE1hdGNoOiJmdWxsIixyZWRpcmVjdFRvOiJ0YWJsZXMifSx7cGF0aDoidGFibGVzIixjb21wb25lbnQ6Ynh0fSx7cGF0aDoiZXhjZWwtbWFwcyIsbG9hZENoaWxkcmVuOigpPT5qeHR9LHtwYXRoOiJtdWx0aS1sb2FkIixsb2FkQ2hpbGRyZW46KCk9PkJFdH1dfV07bGV0IHpF''@;'; put 'put ''dD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9RWkoe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj15aSh7aW1wb3J0czpbZXUuZm9yQ2hpbGQoakV0KSxldV19KX19cmV0''@;'; put 'put ''dXJuIGN9KSgpLFVFdD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9RWkoe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj15aSh7aW1wb3J0czpbekV0LFVjLHUxLHB5LE5h''@;'; put 'put ''LCRELG4zXX0pfX1yZXR1cm4gY30pKCksZ2FlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5yb3V0ZXI9ZH1jYW5BY3RpdmF0ZShhLGQpe3JldHVybiEhKHZvaWQgMCE9PWQ/LnJvb3QucXVlcnlQYXJhbXMuZm9yY2V8fGQ/LnVybC5p''@;'; put 'put ''bmNsdWRlcygibGljZW5zaW5nL3VwZGF0ZSIpJiZ0aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkfHxudWxsIT09dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC52YWx1ZSYmITE9PT10aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLnZhbHVlKXx8KHRo''@;'; put 'put ''aXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9ob21lIiksITEpfWNhbkRlYWN0aXZhdGUoYSxkLGgsZil7cmV0dXJuIShoPy51cmwuaW5jbHVkZXMoImxpY2Vuc2luZy9yZWdpc3RlciIpfHx0aGlzLmxpY2VuY2VTZXJ2aWNlLmFwcExvY2tlZC52YWx1ZSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoSHIoTzEpLEhyKG5sKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9ZnIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7bGV0IFM4PXthc3luYzohMSxiYXNlVXJsOm51bGwsYnJlYWtzOiExLGV4dGVuc2lv''@;'; put 'put ''bnM6bnVsbCxnZm06ITAsaGVhZGVySWRzOiEwLGhlYWRlclByZWZpeDoiIixoaWdobGlnaHQ6bnVsbCxob29rczpudWxsLGxhbmdQcmVmaXg6Imxhbmd1YWdlLSIsbWFuZ2xlOiEwLHBlZGFudGljOiExLHJlbmRlcmVyOm51bGwsc2FuaXRpemU6ITEsc2FuaXRpemVyOm51bGwsc2lsZW50OiEx''@;'; put 'put ''LHNtYXJ0eXBhbnRzOiExLHRva2VuaXplcjpudWxsLHdhbGtUb2tlbnM6bnVsbCx4aHRtbDohMX07ZnVuY3Rpb24genllKGMpe1M4PWN9Y29uc3QgVXllPS9bJjw+IiddLyxaRXQ9bmV3IFJlZ0V4cChVeWUuc291cmNlLCJnIiksWnllPS9bPD4iJ118Jig/ISgjXGR7MSw3fXwjW1h4XVthLWZB''@;'; put 'put ''LUYwLTldezEsNn18XHcrKTspLyxXRXQ9bmV3IFJlZ0V4cChaeWUuc291cmNlLCJnIiksWUV0PXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiMzOTsifSxXeWU9Yz0+WUV0W2NdO2Z1bmN0aW9uIHExKGMsbCl7aWYobCl7aWYoVXllLnRlc3Qo''@;'; put 'put ''YykpcmV0dXJuIGMucmVwbGFjZShaRXQsV3llKX1lbHNlIGlmKFp5ZS50ZXN0KGMpKXJldHVybiBjLnJlcGxhY2UoV0V0LFd5ZSk7cmV0dXJuIGN9Y29uc3QgR0V0PS8mKCMoPzpcZCspfCg/OiN4WzAtOUEtRmEtZl0rKXwoPzpcdyspKTs/L2dpO2Z1bmN0aW9uIFl5ZShjKXtyZXR1cm4gYy5y''@;'; put 'put ''ZXBsYWNlKEdFdCwobCxhKT0+ImNvbG9uIj09PShhPWEudG9Mb3dlckNhc2UoKSk/IjoiOiIjIj09PWEuY2hhckF0KDApPyJ4Ij09PWEuY2hhckF0KDEpP1N0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoYS5zdWJzdHJpbmcoMiksMTYpKTpTdHJpbmcuZnJvbUNoYXJDb2RlKCthLnN1YnN0''@;'; put 'put ''cmluZygxKSk6IiIpfWNvbnN0ICRFdD0vKF58W15cW10pXF4vZztmdW5jdGlvbiBIbChjLGwpe2M9InN0cmluZyI9PXR5cGVvZiBjP2M6Yy5zb3VyY2UsbD1sfHwiIjtjb25zdCBhPXtyZXBsYWNlOihkLGgpPT4oaD0oaD1oLnNvdXJjZXx8aCkucmVwbGFjZSgkRXQsIiQxIiksYz1jLnJlcGxh''@;'; put 'put ''Y2UoZCxoKSxhKSxnZXRSZWdleDooKT0+bmV3IFJlZ0V4cChjLGwpfTtyZXR1cm4gYX1jb25zdCBLRXQ9L1teXHc6XS9nLFhFdD0vXiR8XlthLXpdW2EtejAtOSsuLV0qOnxeWz8jXS9pO2Z1bmN0aW9uIEd5ZShjLGwsYSl7aWYoYyl7bGV0IGQ7dHJ5e2Q9ZGVjb2RlVVJJQ29tcG9uZW50KFl5''@;'; put 'put ''ZShhKSkucmVwbGFjZShLRXQsIiIpLnRvTG93ZXJDYXNlKCl9Y2F0Y2h7cmV0dXJuIG51bGx9aWYoMD09PWQuaW5kZXhPZigiamF2YXNjcmlwdDoiKXx8MD09PWQuaW5kZXhPZigidmJzY3JpcHQ6Iil8fDA9PT1kLmluZGV4T2YoImRhdGE6IikpcmV0dXJuIG51bGx9bCYmIVhFdC50ZXN0KGEp''@;'; put 'put ''JiYoYT1mdW5jdGlvbiBlVHQoYyxsKXtqalsiICIrY118fChqalsiICIrY109cUV0LnRlc3QoYyk/YysiLyI6VWooYywiLyIsITApKTtjb25zdCBhPS0xPT09KGM9ampbIiAiK2NdKS5pbmRleE9mKCI6Iik7cmV0dXJuIi8vIj09PWwuc3Vic3RyaW5nKDAsMik/YT9sOmMucmVwbGFjZShKRXQs''@;'; put 'put ''IiQxIikrbDoiLyI9PT1sLmNoYXJBdCgwKT9hP2w6Yy5yZXBsYWNlKFFFdCwiJDEiKStsOmMrbH0obCxhKSk7dHJ5e2E9ZW5jb2RlVVJJKGEpLnJlcGxhY2UoLyUyNS9nLCIlIil9Y2F0Y2h7cmV0dXJuIG51bGx9cmV0dXJuIGF9Y29uc3Qgamo9e30scUV0PS9eW146XSs6XC8qW14vXSokLyxK''@;'; put 'put ''RXQ9L14oW146XSs6KVtcc1xTXSokLyxRRXQ9L14oW146XSs6XC8qW14vXSopW1xzXFNdKiQvLHpqPXtleGVjOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gJHllKGMsbCl7Y29uc3QgZD1jLnJlcGxhY2UoL1x8L2csKGYsdixNKT0+e2xldCBEPSExLFU9djtmb3IoOy0tVT49MCYmIlxcIj09PU1b''@;'; put 'put ''VV07KUQ9IUQ7cmV0dXJuIEQ/InwiOiIgfCJ9KS5zcGxpdCgvIFx8Lyk7bGV0IGg9MDtpZihkWzBdLnRyaW0oKXx8ZC5zaGlmdCgpLGQubGVuZ3RoPjAmJiFkW2QubGVuZ3RoLTFdLnRyaW0oKSYmZC5wb3AoKSxkLmxlbmd0aD5sKWQuc3BsaWNlKGwpO2Vsc2UgZm9yKDtkLmxlbmd0aDxsOylk''@;'; put 'put ''LnB1c2goIiIpO2Zvcig7aDxkLmxlbmd0aDtoKyspZFtoXT1kW2hdLnRyaW0oKS5yZXBsYWNlKC9cXFx8L2csInwiKTtyZXR1cm4gZH1mdW5jdGlvbiBVaihjLGwsYSl7Y29uc3QgZD1jLmxlbmd0aDtpZigwPT09ZClyZXR1cm4iIjtsZXQgaD0wO2Zvcig7aDxkOyl7Y29uc3QgZj1jLmNoYXJB''@;'; put 'put ''dChkLWgtMSk7aWYoZiE9PWx8fGEpe2lmKGY9PT1sfHwhYSlicmVhaztoKyt9ZWxzZSBoKyt9cmV0dXJuIGMuc2xpY2UoMCxkLWgpfWZ1bmN0aW9uIEt5ZShjLGwsYSxkKXtjb25zdCBoPWwuaHJlZixmPWwudGl0bGU/cTEobC50aXRsZSk6bnVsbCx2PWNbMV0ucmVwbGFjZSgvXFwoW1xbXF1d''@;'; put 'put ''KS9nLCIkMSIpO2lmKCIhIiE9PWNbMF0uY2hhckF0KDApKXtkLnN0YXRlLmluTGluaz0hMDtjb25zdCBNPXt0eXBlOiJsaW5rIixyYXc6YSxocmVmOmgsdGl0bGU6Zix0ZXh0OnYsdG9rZW5zOmQuaW5saW5lVG9rZW5zKHYpfTtyZXR1cm4gZC5zdGF0ZS5pbkxpbms9ITEsTX1yZXR1cm57dHlw''@;'; put 'put ''ZToiaW1hZ2UiLHJhdzphLGhyZWY6aCx0aXRsZTpmLHRleHQ6cTEodil9fWNsYXNzIFpqe2NvbnN0cnVjdG9yKGwpe3RoaXMub3B0aW9ucz1sfHxTOH1zcGFjZShsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2submV3bGluZS5leGVjKGwpO2lmKGEmJmFbMF0ubGVuZ3RoPjApcmV0dXJue3R5''@;'; put 'put ''cGU6InNwYWNlIixyYXc6YVswXX19Y29kZShsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suY29kZS5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9YVswXS5yZXBsYWNlKC9eIHsxLDR9L2dtLCIiKTtyZXR1cm57dHlwZToiY29kZSIscmF3OmFbMF0sY29kZUJsb2NrU3R5bGU6ImluZGVudGVkIix0''@;'; put 'put ''ZXh0OnRoaXMub3B0aW9ucy5wZWRhbnRpYz9kOlVqKGQsIlxuIil9fX1mZW5jZXMobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmZlbmNlcy5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9YVswXSxoPWZ1bmN0aW9uIHJUdChjLGwpe2NvbnN0IGE9Yy5tYXRjaCgvXihccyspKD86YGBgKS8pO2lm''@;'; put 'put ''KG51bGw9PT1hKXJldHVybiBsO2NvbnN0IGQ9YVsxXTtyZXR1cm4gbC5zcGxpdCgiXG4iKS5tYXAoaD0+e2NvbnN0IGY9aC5tYXRjaCgvXlxzKy8pO2lmKG51bGw9PT1mKXJldHVybiBoO2NvbnN0W3ZdPWY7cmV0dXJuIHYubGVuZ3RoPj1kLmxlbmd0aD9oLnNsaWNlKGQubGVuZ3RoKTpofSku''@;'; put 'put ''am9pbigiXG4iKX0oZCxhWzNdfHwiIik7cmV0dXJue3R5cGU6ImNvZGUiLHJhdzpkLGxhbmc6YVsyXT9hWzJdLnRyaW0oKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpOmFbMl0sdGV4dDpofX19aGVhZGluZyhsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suaGVh''@;'; put 'put ''ZGluZy5leGVjKGwpO2lmKGEpe2xldCBkPWFbMl0udHJpbSgpO2lmKC8jJC8udGVzdChkKSl7Y29uc3QgaD1VaihkLCIjIik7KHRoaXMub3B0aW9ucy5wZWRhbnRpY3x8IWh8fC8gJC8udGVzdChoKSkmJihkPWgudHJpbSgpKX1yZXR1cm57dHlwZToiaGVhZGluZyIscmF3OmFbMF0sZGVwdGg6''@;'; put 'put ''YVsxXS5sZW5ndGgsdGV4dDpkLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShkKX19fWhyKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5oci5leGVjKGwpO2lmKGEpcmV0dXJue3R5cGU6ImhyIixyYXc6YVswXX19YmxvY2txdW90ZShsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suYmxv''@;'; put 'put ''Y2txdW90ZS5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9YVswXS5yZXBsYWNlKC9eICo+WyBcdF0/L2dtLCIiKSxoPXRoaXMubGV4ZXIuc3RhdGUudG9wO3RoaXMubGV4ZXIuc3RhdGUudG9wPSEwO2NvbnN0IGY9dGhpcy5sZXhlci5ibG9ja1Rva2VucyhkKTtyZXR1cm4gdGhpcy5sZXhlci5zdGF0''@;'; put 'put ''ZS50b3A9aCx7dHlwZToiYmxvY2txdW90ZSIscmF3OmFbMF0sdG9rZW5zOmYsdGV4dDpkfX19bGlzdChsKXtsZXQgYT10aGlzLnJ1bGVzLmJsb2NrLmxpc3QuZXhlYyhsKTtpZihhKXtsZXQgZCxoLGYsdixNLEQsVSx0ZSxvZSx2ZSx3ZSxGZSxXZT1hWzFdLnRyaW0oKTtjb25zdCBudD1XZS5s''@;'; put 'put ''ZW5ndGg+MSxkdD17dHlwZToibGlzdCIscmF3OiIiLG9yZGVyZWQ6bnQsc3RhcnQ6bnQ/K1dlLnNsaWNlKDAsLTEpOiIiLGxvb3NlOiExLGl0ZW1zOltdfTtXZT1udD9gXFxkezEsOX1cXCR7V2Uuc2xpY2UoLTEpfWA6YFxcJHtXZX1gLHRoaXMub3B0aW9ucy5wZWRhbnRpYyYmKFdlPW50P1dl''@;'; put 'put ''OiJbKistXSIpO2NvbnN0IG10PW5ldyBSZWdFeHAoYF4oIHswLDN9JHtXZX0pKCg/OltcdCBdW15cXG5dKik/KD86XFxufCQpKWApO2Zvcig7bCYmKEZlPSExLChhPW10LmV4ZWMobCkpJiYhdGhpcy5ydWxlcy5ibG9jay5oci50ZXN0KGwpKTspe2lmKGQ9YVswXSxsPWwuc3Vic3RyaW5nKGQu''@;'; put 'put ''bGVuZ3RoKSx0ZT1hWzJdLnNwbGl0KCJcbiIsMSlbMF0ucmVwbGFjZSgvXlx0Ky8senQ9PiIgIi5yZXBlYXQoMyp6dC5sZW5ndGgpKSxvZT1sLnNwbGl0KCJcbiIsMSlbMF0sdGhpcy5vcHRpb25zLnBlZGFudGljPyh2PTIsd2U9dGUudHJpbUxlZnQoKSk6KHY9YVsyXS5zZWFyY2goL1teIF0v''@;'; put 'put ''KSx2PXY+ND8xOnYsd2U9dGUuc2xpY2Uodiksdis9YVsxXS5sZW5ndGgpLEQ9ITEsIXRlJiYvXiAqJC8udGVzdChvZSkmJihkKz1vZSsiXG4iLGw9bC5zdWJzdHJpbmcob2UubGVuZ3RoKzEpLEZlPSEwKSwhRmUpe2NvbnN0IHp0PW5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLHYtMSl9''@;'; put 'put ''fSg/OlsqKy1dfFxcZHsxLDl9Wy4pXSkoKD86WyBcdF1bXlxcbl0qKT8oPzpcXG58JCkpYCkseW49bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsdi0xKX19KCg/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/OlxcKiAqKXszLH0pKD86XFxuK3wkKWApLGduPW5ldyBSZWdFeHAoYF4gezAs''@;'; put 'put ''JHtNYXRoLm1pbigzLHYtMSl9fSg/OlxgXGBcYHx+fn4pYCksd249bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsdi0xKX19I2ApO2Zvcig7bCYmKHZlPWwuc3BsaXQoIlxuIiwxKVswXSxvZT12ZSx0aGlzLm9wdGlvbnMucGVkYW50aWMmJihvZT1vZS5yZXBsYWNlKC9eIHsxLDR9KD89''@;'; put 'put ''KCB7NH0pKlteIF0pL2csIiAgIikpLCEoZ24udGVzdChvZSl8fHduLnRlc3Qob2UpfHx6dC50ZXN0KG9lKXx8eW4udGVzdChsKSkpOyl7aWYob2Uuc2VhcmNoKC9bXiBdLyk+PXZ8fCFvZS50cmltKCkpd2UrPSJcbiIrb2Uuc2xpY2Uodik7ZWxzZXtpZihEfHx0ZS5zZWFyY2goL1teIF0vKT49''@;'; put 'put ''NHx8Z24udGVzdCh0ZSl8fHduLnRlc3QodGUpfHx5bi50ZXN0KHRlKSlicmVhazt3ZSs9IlxuIitvZX0hRCYmIW9lLnRyaW0oKSYmKEQ9ITApLGQrPXZlKyJcbiIsbD1sLnN1YnN0cmluZyh2ZS5sZW5ndGgrMSksdGU9b2Uuc2xpY2Uodil9fWR0Lmxvb3NlfHwoVT9kdC5sb29zZT0hMDovXG4g''@;'; put 'put ''KlxuICokLy50ZXN0KGQpJiYoVT0hMCkpLHRoaXMub3B0aW9ucy5nZm0mJihoPS9eXFtbIHhYXVxdIC8uZXhlYyh3ZSksaCYmKGY9IlsgXSAiIT09aFswXSx3ZT13ZS5yZXBsYWNlKC9eXFtbIHhYXVxdICsvLCIiKSkpLGR0Lml0ZW1zLnB1c2goe3R5cGU6Imxpc3RfaXRlbSIscmF3OmQsdGFz''@;'; put 'put ''azohIWgsY2hlY2tlZDpmLGxvb3NlOiExLHRleHQ6d2V9KSxkdC5yYXcrPWR9ZHQuaXRlbXNbZHQuaXRlbXMubGVuZ3RoLTFdLnJhdz1kLnRyaW1SaWdodCgpLGR0Lml0ZW1zW2R0Lml0ZW1zLmxlbmd0aC0xXS50ZXh0PXdlLnRyaW1SaWdodCgpLGR0LnJhdz1kdC5yYXcudHJpbVJpZ2h0KCk7''@;'; put 'put ''Y29uc3QgJHQ9ZHQuaXRlbXMubGVuZ3RoO2ZvcihNPTA7TTwkdDtNKyspaWYodGhpcy5sZXhlci5zdGF0ZS50b3A9ITEsZHQuaXRlbXNbTV0udG9rZW5zPXRoaXMubGV4ZXIuYmxvY2tUb2tlbnMoZHQuaXRlbXNbTV0udGV4dCxbXSksIWR0Lmxvb3NlKXtjb25zdCB6dD1kdC5pdGVtc1tNXS50''@;'; put 'put ''b2tlbnMuZmlsdGVyKGduPT4ic3BhY2UiPT09Z24udHlwZSkseW49enQubGVuZ3RoPjAmJnp0LnNvbWUoZ249Pi9cbi4qXG4vLnRlc3QoZ24ucmF3KSk7ZHQubG9vc2U9eW59aWYoZHQubG9vc2UpZm9yKE09MDtNPCR0O00rKylkdC5pdGVtc1tNXS5sb29zZT0hMDtyZXR1cm4gZHR9fWh0bWwo''@;'; put 'put ''bCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmh0bWwuZXhlYyhsKTtpZihhKXtjb25zdCBkPXt0eXBlOiJodG1sIixibG9jazohMCxyYXc6YVswXSxwcmU6IXRoaXMub3B0aW9ucy5zYW5pdGl6ZXImJigicHJlIj09PWFbMV18fCJzY3JpcHQiPT09YVsxXXx8InN0eWxlIj09PWFbMV0pLHRl''@;'; put 'put ''eHQ6YVswXX07aWYodGhpcy5vcHRpb25zLnNhbml0aXplKXtjb25zdCBoPXRoaXMub3B0aW9ucy5zYW5pdGl6ZXI/dGhpcy5vcHRpb25zLnNhbml0aXplcihhWzBdKTpxMShhWzBdKTtkLnR5cGU9InBhcmFncmFwaCIsZC50ZXh0PWgsZC50b2tlbnM9dGhpcy5sZXhlci5pbmxpbmUoaCl9cmV0''@;'; put 'put ''dXJuIGR9fWRlZihsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suZGVmLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD1hWzFdLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXHMrL2csIiAiKSxoPWFbMl0/YVsyXS5yZXBsYWNlKC9ePCguKik+JC8sIiQxIikucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGlu''@;'; put 'put ''ZS5fZXNjYXBlcywiJDEiKToiIixmPWFbM10/YVszXS5zdWJzdHJpbmcoMSxhWzNdLmxlbmd0aC0xKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpOmFbM107cmV0dXJue3R5cGU6ImRlZiIsdGFnOmQscmF3OmFbMF0saHJlZjpoLHRpdGxlOmZ9fX10YWJsZShsKXtj''@;'; put 'put ''b25zdCBhPXRoaXMucnVsZXMuYmxvY2sudGFibGUuZXhlYyhsKTtpZihhKXtjb25zdCBkPXt0eXBlOiJ0YWJsZSIsaGVhZGVyOiR5ZShhWzFdKS5tYXAoaD0+KHt0ZXh0Omh9KSksYWxpZ246YVsyXS5yZXBsYWNlKC9eICp8XHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pLHJvd3M6YVszXSYm''@;'; put 'put ''YVszXS50cmltKCk/YVszXS5yZXBsYWNlKC9cblsgXHRdKiQvLCIiKS5zcGxpdCgiXG4iKTpbXX07aWYoZC5oZWFkZXIubGVuZ3RoPT09ZC5hbGlnbi5sZW5ndGgpe2QucmF3PWFbMF07bGV0IGYsdixNLEQsaD1kLmFsaWduLmxlbmd0aDtmb3IoZj0wO2Y8aDtmKyspZC5hbGlnbltmXT0vXiAq''@;'; put 'put ''LSs6ICokLy50ZXN0KGQuYWxpZ25bZl0pPyJyaWdodCI6L14gKjotKzogKiQvLnRlc3QoZC5hbGlnbltmXSk/ImNlbnRlciI6L14gKjotKyAqJC8udGVzdChkLmFsaWduW2ZdKT8ibGVmdCI6bnVsbDtmb3IoaD1kLnJvd3MubGVuZ3RoLGY9MDtmPGg7ZisrKWQucm93c1tmXT0keWUoZC5yb3dz''@;'; put 'put ''W2ZdLGQuaGVhZGVyLmxlbmd0aCkubWFwKFU9Pih7dGV4dDpVfSkpO2ZvcihoPWQuaGVhZGVyLmxlbmd0aCx2PTA7djxoO3YrKylkLmhlYWRlclt2XS50b2tlbnM9dGhpcy5sZXhlci5pbmxpbmUoZC5oZWFkZXJbdl0udGV4dCk7Zm9yKGg9ZC5yb3dzLmxlbmd0aCx2PTA7djxoO3YrKylmb3Io''@;'; put 'put ''RD1kLnJvd3Nbdl0sTT0wO008RC5sZW5ndGg7TSsrKURbTV0udG9rZW5zPXRoaXMubGV4ZXIuaW5saW5lKERbTV0udGV4dCk7cmV0dXJuIGR9fX1saGVhZGluZyhsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2subGhlYWRpbmcuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJoZWFkaW5nIixy''@;'; put 'put ''YXc6YVswXSxkZXB0aDoiPSI9PT1hWzJdLmNoYXJBdCgwKT8xOjIsdGV4dDphWzFdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShhWzFdKX19cGFyYWdyYXBoKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5wYXJhZ3JhcGguZXhlYyhsKTtpZihhKXtjb25zdCBkPSJcbiI9PT1hWzFdLmNo''@;'; put 'put ''YXJBdChhWzFdLmxlbmd0aC0xKT9hWzFdLnNsaWNlKDAsLTEpOmFbMV07cmV0dXJue3R5cGU6InBhcmFncmFwaCIscmF3OmFbMF0sdGV4dDpkLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShkKX19fXRleHQobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLnRleHQuZXhlYyhsKTtpZihhKXJl''@;'; put 'put ''dHVybnt0eXBlOiJ0ZXh0IixyYXc6YVswXSx0ZXh0OmFbMF0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKGFbMF0pfX1lc2NhcGUobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmlubGluZS5lc2NhcGUuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJlc2NhcGUiLHJhdzphWzBdLHRleHQ6cTEoYVsx''@;'; put 'put ''XSl9fXRhZyhsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLnRhZy5leGVjKGwpO2lmKGEpcmV0dXJuIXRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rJiYvXjxhIC9pLnRlc3QoYVswXSk/dGhpcy5sZXhlci5zdGF0ZS5pbkxpbms9ITA6dGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsmJi9ePFwvYT4v''@;'; put 'put ''aS50ZXN0KGFbMF0pJiYodGhpcy5sZXhlci5zdGF0ZS5pbkxpbms9ITEpLCF0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2smJi9ePChwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLnRlc3QoYVswXSk/dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSEwOnRoaXMubGV4ZXIuc3RhdGUu''@;'; put 'put ''aW5SYXdCbG9jayYmL148XC8ocHJlfGNvZGV8a2JkfHNjcmlwdCkoXHN8PikvaS50ZXN0KGFbMF0pJiYodGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSExKSx7dHlwZTp0aGlzLm9wdGlvbnMuc2FuaXRpemU/InRleHQiOiJodG1sIixyYXc6YVswXSxpbkxpbms6dGhpcy5sZXhlci5zdGF0''@;'; put 'put ''ZS5pbkxpbmssaW5SYXdCbG9jazp0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2ssYmxvY2s6ITEsdGV4dDp0aGlzLm9wdGlvbnMuc2FuaXRpemU/dGhpcy5vcHRpb25zLnNhbml0aXplcj90aGlzLm9wdGlvbnMuc2FuaXRpemVyKGFbMF0pOnExKGFbMF0pOmFbMF19fWxpbmsobCl7Y29uc3Qg''@;'; put 'put ''YT10aGlzLnJ1bGVzLmlubGluZS5saW5rLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD1hWzJdLnRyaW0oKTtpZighdGhpcy5vcHRpb25zLnBlZGFudGljJiYvXjwvLnRlc3QoZCkpe2lmKCEvPiQvLnRlc3QoZCkpcmV0dXJuO2NvbnN0IHY9VWooZC5zbGljZSgwLC0xKSwiXFwiKTtpZigoZC5sZW5n''@;'; put 'put ''dGgtdi5sZW5ndGgpJTI9PTApcmV0dXJufWVsc2V7Y29uc3Qgdj1mdW5jdGlvbiB0VHQoYyxsKXtpZigtMT09PWMuaW5kZXhPZihsWzFdKSlyZXR1cm4tMTtjb25zdCBhPWMubGVuZ3RoO2xldCBkPTAsaD0wO2Zvcig7aDxhO2grKylpZigiXFwiPT09Y1toXSloKys7ZWxzZSBpZihjW2hdPT09''@;'; put 'put ''bFswXSlkKys7ZWxzZSBpZihjW2hdPT09bFsxXSYmKGQtLSxkPDApKXJldHVybiBoO3JldHVybi0xfShhWzJdLCIoKSIpO2lmKHY+LTEpe2NvbnN0IEQ9KDA9PT1hWzBdLmluZGV4T2YoIiEiKT81OjQpK2FbMV0ubGVuZ3RoK3Y7YVsyXT1hWzJdLnN1YnN0cmluZygwLHYpLGFbMF09YVswXS5z''@;'; put 'put ''dWJzdHJpbmcoMCxEKS50cmltKCksYVszXT0iIn19bGV0IGg9YVsyXSxmPSIiO2lmKHRoaXMub3B0aW9ucy5wZWRhbnRpYyl7Y29uc3Qgdj0vXihbXiciXSpbXlxzXSlccysoWyciXSkoLiopXDIvLmV4ZWMoaCk7diYmKGg9dlsxXSxmPXZbM10pfWVsc2UgZj1hWzNdP2FbM10uc2xpY2UoMSwt''@;'; put 'put ''MSk6IiI7cmV0dXJuIGg9aC50cmltKCksL148Ly50ZXN0KGgpJiYoaD10aGlzLm9wdGlvbnMucGVkYW50aWMmJiEvPiQvLnRlc3QoZCk/aC5zbGljZSgxKTpoLnNsaWNlKDEsLTEpKSxLeWUoYSx7aHJlZjpoJiZoLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIiksdGl0''@;'; put 'put ''bGU6ZiYmZi5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpfSxhWzBdLHRoaXMubGV4ZXIpfX1yZWZsaW5rKGwsYSl7bGV0IGQ7aWYoKGQ9dGhpcy5ydWxlcy5pbmxpbmUucmVmbGluay5leGVjKGwpKXx8KGQ9dGhpcy5ydWxlcy5pbmxpbmUubm9saW5rLmV4ZWMobCkp''@;'; put 'put ''KXtsZXQgaD0oZFsyXXx8ZFsxXSkucmVwbGFjZSgvXHMrL2csIiAiKTtpZihoPWFbaC50b0xvd2VyQ2FzZSgpXSwhaCl7Y29uc3QgZj1kWzBdLmNoYXJBdCgwKTtyZXR1cm57dHlwZToidGV4dCIscmF3OmYsdGV4dDpmfX1yZXR1cm4gS3llKGQsaCxkWzBdLHRoaXMubGV4ZXIpfX1lbVN0cm9u''@;'; put 'put ''ZyhsLGEsZD0iIil7bGV0IGg9dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcubERlbGltLmV4ZWMobCk7aWYoISghaHx8aFszXSYmZC5tYXRjaCgvW1xwe0x9XHB7Tn1dL3UpKSYmKCFoWzFdJiYhaFsyXXx8IWR8fHRoaXMucnVsZXMuaW5saW5lLnB1bmN0dWF0aW9uLmV4ZWMoZCkpKXtjb25z''@;'; put 'put ''dCB2PWhbMF0ubGVuZ3RoLTE7bGV0IE0sRCxVPXYsdGU9MDtjb25zdCBvZT0iKiI9PT1oWzBdWzBdP3RoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nLnJEZWxpbUFzdDp0aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZy5yRGVsaW1VbmQ7Zm9yKG9lLmxhc3RJbmRleD0wLGE9YS5zbGljZSgtMSps''@;'; put 'put ''Lmxlbmd0aCt2KTtudWxsIT0oaD1vZS5leGVjKGEpKTspe2lmKE09aFsxXXx8aFsyXXx8aFszXXx8aFs0XXx8aFs1XXx8aFs2XSwhTSljb250aW51ZTtpZihEPU0ubGVuZ3RoLGhbM118fGhbNF0pe1UrPUQ7Y29udGludWV9aWYoKGhbNV18fGhbNl0pJiZ2JTMmJiEoKHYrRCklMykpe3RlKz1E''@;'; put 'put ''O2NvbnRpbnVlfWlmKFUtPUQsVT4wKWNvbnRpbnVlO0Q9TWF0aC5taW4oRCxEK1UrdGUpO2NvbnN0IHZlPWwuc2xpY2UoMCx2K2guaW5kZXgrRCsxKTtpZihNYXRoLm1pbih2LEQpJTIpe2NvbnN0IEZlPXZlLnNsaWNlKDEsLTEpO3JldHVybnt0eXBlOiJlbSIscmF3OnZlLHRleHQ6RmUsdG9r''@;'; put 'put ''ZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKEZlKX19Y29uc3Qgd2U9dmUuc2xpY2UoMiwtMik7cmV0dXJue3R5cGU6InN0cm9uZyIscmF3OnZlLHRleHQ6d2UsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKHdlKX19fX1jb2Rlc3BhbihsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5s''@;'; put 'put ''aW5lLmNvZGUuZXhlYyhsKTtpZihhKXtsZXQgZD1hWzJdLnJlcGxhY2UoL1xuL2csIiAiKTtjb25zdCBoPS9bXiBdLy50ZXN0KGQpLGY9L14gLy50ZXN0KGQpJiYvICQvLnRlc3QoZCk7cmV0dXJuIGgmJmYmJihkPWQuc3Vic3RyaW5nKDEsZC5sZW5ndGgtMSkpLGQ9cTEoZCwhMCkse3R5cGU6''@;'; put 'put ''ImNvZGVzcGFuIixyYXc6YVswXSx0ZXh0OmR9fX1icihsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLmJyLmV4ZWMobCk7aWYoYSlyZXR1cm57dHlwZToiYnIiLHJhdzphWzBdfX1kZWwobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmlubGluZS5kZWwuZXhlYyhsKTtpZihhKXJldHVybnt0eXBl''@;'; put 'put ''OiJkZWwiLHJhdzphWzBdLHRleHQ6YVsyXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnMoYVsyXSl9fWF1dG9saW5rKGwsYSl7Y29uc3QgZD10aGlzLnJ1bGVzLmlubGluZS5hdXRvbGluay5leGVjKGwpO2lmKGQpe2xldCBoLGY7cmV0dXJuIkAiPT09ZFsyXT8oaD1xMSh0aGlzLm9w''@;'; put 'put ''dGlvbnMubWFuZ2xlP2EoZFsxXSk6ZFsxXSksZj0ibWFpbHRvOiIraCk6KGg9cTEoZFsxXSksZj1oKSx7dHlwZToibGluayIscmF3OmRbMF0sdGV4dDpoLGhyZWY6Zix0b2tlbnM6W3t0eXBlOiJ0ZXh0IixyYXc6aCx0ZXh0Omh9XX19fXVybChsLGEpe2xldCBkO2lmKGQ9dGhpcy5ydWxlcy5p''@;'; put 'put ''bmxpbmUudXJsLmV4ZWMobCkpe2xldCBoLGY7aWYoIkAiPT09ZFsyXSloPXExKHRoaXMub3B0aW9ucy5tYW5nbGU/YShkWzBdKTpkWzBdKSxmPSJtYWlsdG86IitoO2Vsc2V7bGV0IHY7ZG97dj1kWzBdLGRbMF09dGhpcy5ydWxlcy5pbmxpbmUuX2JhY2twZWRhbC5leGVjKGRbMF0pWzBdfXdo''@;'; put 'put ''aWxlKHYhPT1kWzBdKTtoPXExKGRbMF0pLGY9Ind3dy4iPT09ZFsxXT8iaHR0cDovLyIrZFswXTpkWzBdfXJldHVybnt0eXBlOiJsaW5rIixyYXc6ZFswXSx0ZXh0OmgsaHJlZjpmLHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzpoLHRleHQ6aH1dfX19aW5saW5lVGV4dChsLGEpe2NvbnN0IGQ9''@;'; put 'put ''dGhpcy5ydWxlcy5pbmxpbmUudGV4dC5leGVjKGwpO2lmKGQpe2xldCBoO3JldHVybiBoPXRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz90aGlzLm9wdGlvbnMuc2FuaXRpemU/dGhpcy5vcHRpb25zLnNhbml0aXplcj90aGlzLm9wdGlvbnMuc2FuaXRpemVyKGRbMF0pOnExKGRbMF0pOmRb''@;'; put 'put ''MF06cTEodGhpcy5vcHRpb25zLnNtYXJ0eXBhbnRzP2EoZFswXSk6ZFswXSkse3R5cGU6InRleHQiLHJhdzpkWzBdLHRleHQ6aH19fX1jb25zdCBTbz17bmV3bGluZTovXig/OiAqKD86XG58JCkpKy8sY29kZTovXiggezR9W15cbl0rKD86XG4oPzogKig/OlxufCQpKSopPykrLyxmZW5jZXM6''@;'; put 'put ''L14gezAsM30oYHszLH0oPz1bXmBcbl0qKD86XG58JCkpfH57Myx9KShbXlxuXSopKD86XG58JCkoPzp8KFtcc1xTXSo/KSg/OlxufCQpKSg/OiB7MCwzfVwxW35gXSogKig/PVxufCQpfCQpLyxocjovXiB7MCwzfSgoPzotW1x0IF0qKXszLH18KD86X1sgXHRdKil7Myx9fCg/OlwqWyBcdF0q''@;'; put 'put ''KXszLH0pKD86XG4rfCQpLyxoZWFkaW5nOi9eIHswLDN9KCN7MSw2fSkoPz1cc3wkKSguKikoPzpcbit8JCkvLGJsb2NrcXVvdGU6L14oIHswLDN9PiA/KHBhcmFncmFwaHxbXlxuXSopKD86XG58JCkpKy8sbGlzdDovXiggezAsM31idWxsKShbIFx0XVteXG5dKz8pPyg/OlxufCQpLyxodG1s''@;'; put 'put ''OiJeIHswLDN9KD86PChzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKVtcXHM+XVtcXHNcXFNdKj8oPzo8L1xcMT5bXlxcbl0qXFxuK3wkKXxjb21tZW50W15cXG5dKihcXG4rfCQpfDxcXD9bXFxzXFxTXSo/KD86XFw/Plxcbip8JCl8PCFbQS1aXVtcXHNcXFNdKj8oPzo+XFxuKnwkKXw8IVxc''@;'; put 'put ''W0NEQVRBXFxbW1xcc1xcU10qPyg/OlxcXVxcXT5cXG4qfCQpfDwvPyh0YWcpKD86ICt8XFxufC8/PilbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKXw8KD8hc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSkoW2Etel1bXFx3LV0qKSg/OmF0dHJpYnV0ZSkqPyAqLz8+KD89WyBcXHRdKig/''@;'; put 'put ''OlxcbnwkKSlbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKXw8Lyg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpW2Etel1bXFx3LV0qXFxzKj4oPz1bIFxcdF0qKD86XFxufCQpKVtcXHNcXFNdKj8oPzooPzpcXG4gKikrXFxufCQpKSIsZGVmOi9eIHswLDN9XFsobGFiZWwpXF06ICoo''@;'; put 'put ''PzpcbiAqKT8oW148XHNdW15cc10qfDwuKj8+KSg/Oig/OiArKD86XG4gKik/fCAqXG4gKikodGl0bGUpKT8gKig/OlxuK3wkKS8sdGFibGU6emosbGhlYWRpbmc6L14oKD86KD8hXmJ1bGwgKS58XG4oPyFcbnxidWxsICkpKz8pXG4gezAsM30oPSt8LSspICooPzpcbit8JCkvLF9wYXJhZ3Jh''@;'; put 'put ''cGg6L14oW15cbl0rKD86XG4oPyFocnxoZWFkaW5nfGxoZWFkaW5nfGJsb2NrcXVvdGV8ZmVuY2VzfGxpc3R8aHRtbHx0YWJsZXwgK1xuKVteXG5dKykqKS8sdGV4dDovXlteXG5dKy8sX2xhYmVsOi8oPyFccypcXSkoPzpcXC58W15cW1xdXFxdKSsvLF90aXRsZTovKD86Iig/OlxcIj98W14i''@;'; put 'put ''XFxdKSoifCdbXidcbl0qKD86XG5bXidcbl0rKSpcbj8nfFwoW14oKV0qXCkpL307U28uZGVmPUhsKFNvLmRlZikucmVwbGFjZSgibGFiZWwiLFNvLl9sYWJlbCkucmVwbGFjZSgidGl0bGUiLFNvLl90aXRsZSkuZ2V0UmVnZXgoKSxTby5idWxsZXQ9Lyg/OlsqKy1dfFxkezEsOX1bLildKS8s''@;'; put 'put ''U28ubGlzdEl0ZW1TdGFydD1IbCgvXiggKikoYnVsbCkgKi8pLnJlcGxhY2UoImJ1bGwiLFNvLmJ1bGxldCkuZ2V0UmVnZXgoKSxTby5saXN0PUhsKFNvLmxpc3QpLnJlcGxhY2UoL2J1bGwvZyxTby5idWxsZXQpLnJlcGxhY2UoImhyIiwiXFxuKyg/PVxcMT8oPzooPzotICopezMsfXwoPzpf''@;'; put 'put ''ICopezMsfXwoPzpcXCogKil7Myx9KSg/Olxcbit8JCkpIikucmVwbGFjZSgiZGVmIiwiXFxuKyg/PSIrU28uZGVmLnNvdXJjZSsiKSIpLmdldFJlZ2V4KCksU28uX3RhZz0iYWRkcmVzc3xhcnRpY2xlfGFzaWRlfGJhc2V8YmFzZWZvbnR8YmxvY2txdW90ZXxib2R5fGNhcHRpb258Y2VudGVy''@;'; put 'put ''fGNvbHxjb2xncm91cHxkZHxkZXRhaWxzfGRpYWxvZ3xkaXJ8ZGl2fGRsfGR0fGZpZWxkc2V0fGZpZ2NhcHRpb258ZmlndXJlfGZvb3Rlcnxmb3JtfGZyYW1lfGZyYW1lc2V0fGhbMS02XXxoZWFkfGhlYWRlcnxocnxodG1sfGlmcmFtZXxsZWdlbmR8bGl8bGlua3xtYWlufG1lbnV8bWVudWl0''@;'; put 'put ''ZW18bWV0YXxuYXZ8bm9mcmFtZXN8b2x8b3B0Z3JvdXB8b3B0aW9ufHB8cGFyYW18c2VjdGlvbnxzb3VyY2V8c3VtbWFyeXx0YWJsZXx0Ym9keXx0ZHx0Zm9vdHx0aHx0aGVhZHx0aXRsZXx0cnx0cmFja3x1bCIsU28uX2NvbW1lbnQ9LzwhLS0oPyEtPz4pW1xzXFNdKj8oPzotLT58JCkvLFNv''@;'; put 'put ''Lmh0bWw9SGwoU28uaHRtbCwiaSIpLnJlcGxhY2UoImNvbW1lbnQiLFNvLl9jb21tZW50KS5yZXBsYWNlKCJ0YWciLFNvLl90YWcpLnJlcGxhY2UoImF0dHJpYnV0ZSIsLyArW2EtekEtWjpfXVtcdy46LV0qKD86ICo9ICoiW14iXG5dKiJ8ICo9IConW14nXG5dKid8ICo9ICpbXlxzIic9PD5g''@;'; put 'put ''XSspPy8pLmdldFJlZ2V4KCksU28ubGhlYWRpbmc9SGwoU28ubGhlYWRpbmcpLnJlcGxhY2UoL2J1bGwvZyxTby5idWxsZXQpLmdldFJlZ2V4KCksU28ucGFyYWdyYXBoPUhsKFNvLl9wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIixTby5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2''@;'; put 'put ''fSAiKS5yZXBsYWNlKCJ8bGhlYWRpbmciLCIiKS5yZXBsYWNlKCJ8dGFibGUiLCIiKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0Iiwi''@;'; put 'put ''IHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIsU28uX3RhZykuZ2V0UmVnZXgoKSxTby5ibG9ja3F1b3RlPUhsKFNvLmJsb2NrcXVv''@;'; put 'put ''dGUpLnJlcGxhY2UoInBhcmFncmFwaCIsU28ucGFyYWdyYXBoKS5nZXRSZWdleCgpLFNvLm5vcm1hbD17Li4uU299LFNvLmdmbT17Li4uU28ubm9ybWFsLHRhYmxlOiJeICooW15cXG4gXS4qXFx8LiopXFxuIHswLDN9KD86XFx8ICopPyg6Py0rOj8gKig/OlxcfCAqOj8tKzo/ICopKikoPzpc''@;'; put 'put ''XHwgKik/KD86XFxuKCg/Oig/ISAqXFxufGhyfGhlYWRpbmd8YmxvY2txdW90ZXxjb2RlfGZlbmNlc3xsaXN0fGh0bWwpLiooPzpcXG58JCkpKilcXG4qfCQpIn0sU28uZ2ZtLnRhYmxlPUhsKFNvLmdmbS50YWJsZSkucmVwbGFjZSgiaHIiLFNvLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHsw''@;'; put 'put ''LDN9I3sxLDZ9ICIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiY29kZSIsIiB7NH1bXlxcbl0iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/''@;'; put 'put ''OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLFNvLl90YWcpLmdldFJlZ2V4KCksU28uZ2ZtLnBhcmFncmFwaD1IbChTby5fcGFyYWdyYXBoKS5y''@;'; put 'put ''ZXBsYWNlKCJociIsU28uaHIpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0gIikucmVwbGFjZSgifGxoZWFkaW5nIiwiIikucmVwbGFjZSgidGFibGUiLFNvLmdmbS50YWJsZSkucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30o''@;'; put 'put ''PzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBs''@;'; put 'put ''YWNlKCJ0YWciLFNvLl90YWcpLmdldFJlZ2V4KCksU28ucGVkYW50aWM9ey4uLlNvLm5vcm1hbCxodG1sOkhsKCJeICooPzpjb21tZW50ICooPzpcXG58XFxzKiQpfDwodGFnKVtcXHNcXFNdKz88L1xcMT4gKig/OlxcbnsyLH18XFxzKiQpfDx0YWcoPzpcIlteXCJdKlwifCdbXiddKid8XFxz''@;'; put 'put ''W14nXCIvPlxcc10qKSo/Lz8+ICooPzpcXG57Mix9fFxccyokKSkiKS5yZXBsYWNlKCJjb21tZW50IixTby5fY29tbWVudCkucmVwbGFjZSgvdGFnL2csIig/ISg/OmF8ZW18c3Ryb25nfHNtYWxsfHN8Y2l0ZXxxfGRmbnxhYmJyfGRhdGF8dGltZXxjb2RlfHZhcnxzYW1wfGtiZHxzdWJ8c3Vw''@;'; put 'put ''fGl8Ynx1fG1hcmt8cnVieXxydHxycHxiZGl8YmRvfHNwYW58YnJ8d2JyfGluc3xkZWx8aW1nKVxcYilcXHcrKD8hOnxbXlxcd1xcc0BdKkApXFxiIikuZ2V0UmVnZXgoKSxkZWY6L14gKlxbKFteXF1dKylcXTogKjw/KFteXHM+XSspPj8oPzogKyhbIihdW15cbl0rWyIpXSkpPyAqKD86XG4r''@;'; put 'put ''fCQpLyxoZWFkaW5nOi9eKCN7MSw2fSkoLiopKD86XG4rfCQpLyxmZW5jZXM6emosbGhlYWRpbmc6L14oLis/KVxuIHswLDN9KD0rfC0rKSAqKD86XG4rfCQpLyxwYXJhZ3JhcGg6SGwoU28ubm9ybWFsLl9wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIixTby5ocikucmVwbGFjZSgiaGVhZGluZyIs''@;'; put 'put ''IiAqI3sxLDZ9ICpbXlxuXSIpLnJlcGxhY2UoImxoZWFkaW5nIixTby5saGVhZGluZykucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJ8ZmVuY2VzIiwiIikucmVwbGFjZSgifGxpc3QiLCIiKS5yZXBsYWNlKCJ8aHRtbCIsIiIpLmdldFJlZ2V4KCl9O2NvbnN0IEZh''@;'; put 'put ''PXtlc2NhcGU6L15cXChbISIjJCUmJygpKissXC0uLzo7PD0+P0BcW1xdXFxeX2B7fH1+XSkvLGF1dG9saW5rOi9ePChzY2hlbWU6W15cc1x4MDAtXHgxZjw+XSp8ZW1haWwpPi8sdXJsOnpqLHRhZzoiXmNvbW1lbnR8XjwvW2EtekEtWl1bXFx3Oi1dKlxccyo+fF48W2EtekEtWl1bXFx3LV0q''@;'; put 'put ''KD86YXR0cmlidXRlKSo/XFxzKi8/PnxePFxcP1tcXHNcXFNdKj9cXD8+fF48IVthLXpBLVpdK1xcc1tcXHNcXFNdKj8+fF48IVxcW0NEQVRBXFxbW1xcc1xcU10qP1xcXVxcXT4iLGxpbms6L14hP1xbKGxhYmVsKVxdXChccyooaHJlZikoPzpccysodGl0bGUpKT9ccypcKS8scmVmbGluazov''@;'; put 'put ''XiE/XFsobGFiZWwpXF1cWyhyZWYpXF0vLG5vbGluazovXiE/XFsocmVmKVxdKD86XFtcXSk/LyxyZWZsaW5rU2VhcmNoOiJyZWZsaW5rfG5vbGluayg/IVxcKCkiLGVtU3Ryb25nOntsRGVsaW06L14oPzpcKisoPzooKD8hXCopW3B1bmN0XSl8W15ccypdKSl8Xl8rKD86KCg/IV8pW3B1bmN0''@;'; put 'put ''XSl8KFteXHNfXSkpLyxyRGVsaW1Bc3Q6L15bXl8qXSo/X19bXl8qXSo/XCpbXl8qXSo/KD89X18pfFteKl0rKD89W14qXSl8KD8hXCopW3B1bmN0XShcKispKD89W1xzXXwkKXxbXnB1bmN0XHNdKFwqKykoPyFcKikoPz1bcHVuY3Rcc118JCl8KD8hXCopW3B1bmN0XHNdKFwqKykoPz1bXnB1''@;'; put 'put ''bmN0XHNdKXxbXHNdKFwqKykoPyFcKikoPz1bcHVuY3RdKXwoPyFcKilbcHVuY3RdKFwqKykoPyFcKikoPz1bcHVuY3RdKXxbXnB1bmN0XHNdKFwqKykoPz1bXnB1bmN0XHNdKS8sckRlbGltVW5kOi9eW15fKl0qP1wqXCpbXl8qXSo/X1teXypdKj8oPz1cKlwqKXxbXl9dKyg/PVteX10pfCg/''@;'; put 'put ''IV8pW3B1bmN0XShfKykoPz1bXHNdfCQpfFtecHVuY3Rcc10oXyspKD8hXykoPz1bcHVuY3Rcc118JCl8KD8hXylbcHVuY3Rcc10oXyspKD89W15wdW5jdFxzXSl8W1xzXShfKykoPyFfKSg/PVtwdW5jdF0pfCg/IV8pW3B1bmN0XShfKykoPyFfKSg/PVtwdW5jdF0pL30sY29kZTovXihgKyko''@;'; put 'put ''W15gXXxbXmBdW1xzXFNdKj9bXmBdKVwxKD8hYCkvLGJyOi9eKCB7Mix9fFxcKVxuKD8hXHMqJCkvLGRlbDp6aix0ZXh0Oi9eKGArfFteYF0pKD86KD89IHsyLH1cbil8W1xzXFNdKj8oPzooPz1bXFw8IVxbYCpfXXxcYl98JCl8W14gXSg/PSB7Mix9XG4pKSkvLHB1bmN0dWF0aW9uOi9eKCg/''@;'; put 'put ''IVsqX10pW1xzcHVuY3R1YXRpb25dKS99O2Z1bmN0aW9uIGlUdChjKXtyZXR1cm4gYy5yZXBsYWNlKC8tLS0vZywiXHUyMDE0IikucmVwbGFjZSgvLS0vZywiXHUyMDEzIikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbeyJcc10pJy9nLCIkMVx1MjAxOCIpLnJlcGxhY2UoLycvZywiXHUyMDE5''@;'; put 'put ''IikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbe1x1MjAxOFxzXSkiL2csIiQxXHUyMDFjIikucmVwbGFjZSgvIi9nLCJcdTIwMWQiKS5yZXBsYWNlKC9cLnszfS9nLCJcdTIwMjYiKX1mdW5jdGlvbiBYeWUoYyl7bGV0IGEsZCxsPSIiO2NvbnN0IGg9Yy5sZW5ndGg7Zm9yKGE9MDthPGg7YSsr''@;'; put 'put ''KWQ9Yy5jaGFyQ29kZUF0KGEpLE1hdGgucmFuZG9tKCk+LjUmJihkPSJ4IitkLnRvU3RyaW5nKDE2KSksbCs9IiYjIitkKyI7IjtyZXR1cm4gbH1GYS5fcHVuY3R1YXRpb249IlxccHtQfSQrPD0+YF58fiIsRmEucHVuY3R1YXRpb249SGwoRmEucHVuY3R1YXRpb24sInUiKS5yZXBsYWNlKC9w''@;'; put 'put ''dW5jdHVhdGlvbi9nLEZhLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxGYS5ibG9ja1NraXA9L1xbW15bXF1dKj9cXVwoW15cKFwpXSo/XCl8YFteYF0qP2B8PFtePD5dKj8+L2csRmEuYW55UHVuY3R1YXRpb249L1xcW3B1bmN0XS9nLEZhLl9lc2NhcGVzPS9cXChbcHVuY3RdKS9nLEZhLl9j''@;'; put 'put ''b21tZW50PUhsKFNvLl9jb21tZW50KS5yZXBsYWNlKCIoPzotLVx4M2V8JCkiLCItLVx4M2UiKS5nZXRSZWdleCgpLEZhLmVtU3Ryb25nLmxEZWxpbT1IbChGYS5lbVN0cm9uZy5sRGVsaW0sInUiKS5yZXBsYWNlKC9wdW5jdC9nLEZhLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxGYS5lbVN0''@;'; put 'put ''cm9uZy5yRGVsaW1Bc3Q9SGwoRmEuZW1TdHJvbmcuckRlbGltQXN0LCJndSIpLnJlcGxhY2UoL3B1bmN0L2csRmEuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLEZhLmVtU3Ryb25nLnJEZWxpbVVuZD1IbChGYS5lbVN0cm9uZy5yRGVsaW1VbmQsImd1IikucmVwbGFjZSgvcHVuY3QvZyxGYS5f''@;'; put 'put ''cHVuY3R1YXRpb24pLmdldFJlZ2V4KCksRmEuYW55UHVuY3R1YXRpb249SGwoRmEuYW55UHVuY3R1YXRpb24sImd1IikucmVwbGFjZSgvcHVuY3QvZyxGYS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksRmEuX2VzY2FwZXM9SGwoRmEuX2VzY2FwZXMsImd1IikucmVwbGFjZSgvcHVuY3QvZyxG''@;'; put 'put ''YS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksRmEuX3NjaGVtZT0vW2EtekEtWl1bYS16QS1aMC05Ky4tXXsxLDMxfS8sRmEuX2VtYWlsPS9bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dKyhAKVthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/Olwu''@;'; put 'put ''W2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSsoPyFbLV9dKS8sRmEuYXV0b2xpbms9SGwoRmEuYXV0b2xpbmspLnJlcGxhY2UoInNjaGVtZSIsRmEuX3NjaGVtZSkucmVwbGFjZSgiZW1haWwiLEZhLl9lbWFpbCkuZ2V0UmVnZXgoKSxGYS5fYXR0cmlidXRl''@;'; put 'put ''PS9ccytbYS16QS1aOl9dW1x3LjotXSooPzpccyo9XHMqIlteIl0qInxccyo9XHMqJ1teJ10qJ3xccyo9XHMqW15ccyInPTw+YF0rKT8vLEZhLnRhZz1IbChGYS50YWcpLnJlcGxhY2UoImNvbW1lbnQiLEZhLl9jb21tZW50KS5yZXBsYWNlKCJhdHRyaWJ1dGUiLEZhLl9hdHRyaWJ1dGUpLmdl''@;'; put 'put ''dFJlZ2V4KCksRmEuX2xhYmVsPS8oPzpcWyg/OlxcLnxbXlxbXF1cXF0pKlxdfFxcLnxgW15gXSpgfFteXFtcXVxcYF0pKj8vLEZhLl9ocmVmPS88KD86XFwufFteXG48PlxcXSkrPnxbXlxzXHgwMC1ceDFmXSovLEZhLl90aXRsZT0vIig/OlxcIj98W14iXFxdKSoifCcoPzpcXCc/fFteJ1xc''@;'; put 'put ''XSkqJ3xcKCg/OlxcXCk/fFteKVxcXSkqXCkvLEZhLmxpbms9SGwoRmEubGluaykucmVwbGFjZSgibGFiZWwiLEZhLl9sYWJlbCkucmVwbGFjZSgiaHJlZiIsRmEuX2hyZWYpLnJlcGxhY2UoInRpdGxlIixGYS5fdGl0bGUpLmdldFJlZ2V4KCksRmEucmVmbGluaz1IbChGYS5yZWZsaW5rKS5y''@;'; put 'put ''ZXBsYWNlKCJsYWJlbCIsRmEuX2xhYmVsKS5yZXBsYWNlKCJyZWYiLFNvLl9sYWJlbCkuZ2V0UmVnZXgoKSxGYS5ub2xpbms9SGwoRmEubm9saW5rKS5yZXBsYWNlKCJyZWYiLFNvLl9sYWJlbCkuZ2V0UmVnZXgoKSxGYS5yZWZsaW5rU2VhcmNoPUhsKEZhLnJlZmxpbmtTZWFyY2gsImciKS5y''@;'; put 'put ''ZXBsYWNlKCJyZWZsaW5rIixGYS5yZWZsaW5rKS5yZXBsYWNlKCJub2xpbmsiLEZhLm5vbGluaykuZ2V0UmVnZXgoKSxGYS5ub3JtYWw9ey4uLkZhfSxGYS5wZWRhbnRpYz17Li4uRmEubm9ybWFsLHN0cm9uZzp7c3RhcnQ6L15fX3xcKlwqLyxtaWRkbGU6L15fXyg/PVxTKShbXHNcU10qP1xT''@;'; put 'put ''KV9fKD8hXyl8XlwqXCooPz1cUykoW1xzXFNdKj9cUylcKlwqKD8hXCopLyxlbmRBc3Q6L1wqXCooPyFcKikvZyxlbmRVbmQ6L19fKD8hXykvZ30sZW06e3N0YXJ0Oi9eX3xcKi8sbWlkZGxlOi9eKClcKig/PVxTKShbXHNcU10qP1xTKVwqKD8hXCopfF5fKD89XFMpKFtcc1xTXSo/XFMpXyg/''@;'; put 'put ''IV8pLyxlbmRBc3Q6L1wqKD8hXCopL2csZW5kVW5kOi9fKD8hXykvZ30sbGluazpIbCgvXiE/XFsobGFiZWwpXF1cKCguKj8pXCkvKS5yZXBsYWNlKCJsYWJlbCIsRmEuX2xhYmVsKS5nZXRSZWdleCgpLHJlZmxpbms6SGwoL14hP1xbKGxhYmVsKVxdXHMqXFsoW15cXV0qKVxdLykucmVwbGFj''@;'; put 'put ''ZSgibGFiZWwiLEZhLl9sYWJlbCkuZ2V0UmVnZXgoKX0sRmEuZ2ZtPXsuLi5GYS5ub3JtYWwsZXNjYXBlOkhsKEZhLmVzY2FwZSkucmVwbGFjZSgiXSkiLCJ+fF0pIikuZ2V0UmVnZXgoKSxfZXh0ZW5kZWRfZW1haWw6L1tBLVphLXowLTkuXystXSsoQClbYS16QS1aMC05LV9dKyg/OlwuW2Et''@;'; put 'put ''ekEtWjAtOS1fXSpbYS16QS1aMC05XSkrKD8hWy1fXSkvLHVybDovXigoPzpmdHB8aHR0cHM/KTpcL1wvfHd3d1wuKSg/OlthLXpBLVowLTlcLV0rXC4/KStbXlxzPF0qfF5lbWFpbC8sX2JhY2twZWRhbDovKD86W14/IS4sOjsqXycifigpJl0rfFwoW14pXSpcKXwmKD8hW2EtekEtWjAtOV0r''@;'; put 'put ''OyQpfFs/IS4sOjsqXycifildKyg/ISQpKSsvLGRlbDovXih+fj8pKD89W15cc35dKShbXHNcU10qP1teXHN+XSlcMSg/PVtefl18JCkvLHRleHQ6L14oW2B+XSt8W15gfl0pKD86KD89IHsyLH1cbil8KD89W2EtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0rQCl8W1xzXFNdKj8oPzoo''@;'; put 'put ''Pz1bXFw8IVxbYCp+X118XGJffGh0dHBzPzpcL1wvfGZ0cDpcL1wvfHd3d1wufCQpfFteIF0oPz0gezIsfVxuKXxbXmEtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0oPz1bYS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXStAKSkpL30sRmEuZ2ZtLnVybD1IbChGYS5nZm0udXJs''@;'; put 'put ''LCJpIikucmVwbGFjZSgiZW1haWwiLEZhLmdmbS5fZXh0ZW5kZWRfZW1haWwpLmdldFJlZ2V4KCksRmEuYnJlYWtzPXsuLi5GYS5nZm0sYnI6SGwoRmEuYnIpLnJlcGxhY2UoInsyLH0iLCIqIikuZ2V0UmVnZXgoKSx0ZXh0OkhsKEZhLmdmbS50ZXh0KS5yZXBsYWNlKCJcXGJfIiwiXFxiX3wg''@;'; put 'put ''ezIsfVxcbiIpLnJlcGxhY2UoL1x7MixcfS9nLCIqIikuZ2V0UmVnZXgoKX07Y2xhc3MgbGd7Y29uc3RydWN0b3IobCl7dGhpcy50b2tlbnM9W10sdGhpcy50b2tlbnMubGlua3M9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLm9wdGlvbnM9bHx8UzgsdGhpcy5vcHRpb25zLnRva2VuaXplcj10''@;'; put 'put ''aGlzLm9wdGlvbnMudG9rZW5pemVyfHxuZXcgWmosdGhpcy50b2tlbml6ZXI9dGhpcy5vcHRpb25zLnRva2VuaXplcix0aGlzLnRva2VuaXplci5vcHRpb25zPXRoaXMub3B0aW9ucyx0aGlzLnRva2VuaXplci5sZXhlcj10aGlzLHRoaXMuaW5saW5lUXVldWU9W10sdGhpcy5zdGF0ZT17aW5M''@;'; put 'put ''aW5rOiExLGluUmF3QmxvY2s6ITEsdG9wOiEwfTtjb25zdCBhPXtibG9jazpTby5ub3JtYWwsaW5saW5lOkZhLm5vcm1hbH07dGhpcy5vcHRpb25zLnBlZGFudGljPyhhLmJsb2NrPVNvLnBlZGFudGljLGEuaW5saW5lPUZhLnBlZGFudGljKTp0aGlzLm9wdGlvbnMuZ2ZtJiYoYS5ibG9jaz1T''@;'; put 'put ''by5nZm0sYS5pbmxpbmU9dGhpcy5vcHRpb25zLmJyZWFrcz9GYS5icmVha3M6RmEuZ2ZtKSx0aGlzLnRva2VuaXplci5ydWxlcz1hfXN0YXRpYyBnZXQgcnVsZXMoKXtyZXR1cm57YmxvY2s6U28saW5saW5lOkZhfX1zdGF0aWMgbGV4KGwsYSl7cmV0dXJuIG5ldyBsZyhhKS5sZXgobCl9c3Rh''@;'; put 'put ''dGljIGxleElubGluZShsLGEpe3JldHVybiBuZXcgbGcoYSkuaW5saW5lVG9rZW5zKGwpfWxleChsKXtsZXQgYTtmb3IobD1sLnJlcGxhY2UoL1xyXG58XHIvZywiXG4iKSx0aGlzLmJsb2NrVG9rZW5zKGwsdGhpcy50b2tlbnMpO2E9dGhpcy5pbmxpbmVRdWV1ZS5zaGlmdCgpOyl0aGlzLmlu''@;'; put 'put ''bGluZVRva2VucyhhLnNyYyxhLnRva2Vucyk7cmV0dXJuIHRoaXMudG9rZW5zfWJsb2NrVG9rZW5zKGwsYT1bXSl7bGV0IGQsaCxmLHY7Zm9yKGw9dGhpcy5vcHRpb25zLnBlZGFudGljP2wucmVwbGFjZSgvXHQvZywiICAgICIpLnJlcGxhY2UoL14gKyQvZ20sIiIpOmwucmVwbGFjZSgvXigg''@;'; put 'put ''KikoXHQrKS9nbSwoTSxELFUpPT5EKyIgICAgIi5yZXBlYXQoVS5sZW5ndGgpKTtsOylpZighKHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5ibG9jayYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuYmxvY2suc29tZShNPT4hIShkPU0uY2FsbCh7bGV4''@;'; put 'put ''ZXI6dGhpc30sbCxhKSkmJihsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpLCEwKSkpKXtpZihkPXRoaXMudG9rZW5pemVyLnNwYWNlKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksMT09PWQucmF3Lmxlbmd0aCYmYS5sZW5ndGg+MD9hW2EubGVuZ3RoLTFdLnJh''@;'; put 'put ''dys9IlxuIjphLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5jb2RlKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksaD1hW2EubGVuZ3RoLTFdLCFofHwicGFyYWdyYXBoIiE9PWgudHlwZSYmInRleHQiIT09aC50eXBlP2EucHVzaChkKTooaC5yYXcrPSJcbiIr''@;'; put 'put ''ZC5yYXcsaC50ZXh0Kz0iXG4iK2QudGV4dCx0aGlzLmlubGluZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1oLnRleHQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuZmVuY2VzKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRp''@;'; put 'put ''bnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuaGVhZGluZyhsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmhyKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhp''@;'; put 'put ''cy50b2tlbml6ZXIuYmxvY2txdW90ZShsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmxpc3QobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2Vu''@;'; put 'put ''aXplci5odG1sKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuZGVmKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksaD1hW2EubGVuZ3RoLTFdLCFofHwicGFyYWdyYXBoIiE9PWgudHlwZSYmInRleHQi''@;'; put 'put ''IT09aC50eXBlP3RoaXMudG9rZW5zLmxpbmtzW2QudGFnXXx8KHRoaXMudG9rZW5zLmxpbmtzW2QudGFnXT17aHJlZjpkLmhyZWYsdGl0bGU6ZC50aXRsZX0pOihoLnJhdys9IlxuIitkLnJhdyxoLnRleHQrPSJcbiIrZC5yYXcsdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxl''@;'; put 'put ''bmd0aC0xXS5zcmM9aC50ZXh0KTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLnRhYmxlKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIubGhlYWRpbmcobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3Ro''@;'; put 'put ''KSxhLnB1c2goZCk7Y29udGludWV9aWYoZj1sLHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydEJsb2NrKXtsZXQgTT0xLzA7Y29uc3QgRD1sLnNsaWNlKDEpO2xldCBVO3RoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0QmxvY2suZm9yRWFj''@;'; put 'put ''aChmdW5jdGlvbih0ZSl7VT10ZS5jYWxsKHtsZXhlcjp0aGlzfSxEKSwibnVtYmVyIj09dHlwZW9mIFUmJlU+PTAmJihNPU1hdGgubWluKE0sVSkpfSksTTwxLzAmJk0+PTAmJihmPWwuc3Vic3RyaW5nKDAsTSsxKSl9aWYodGhpcy5zdGF0ZS50b3AmJihkPXRoaXMudG9rZW5pemVyLnBhcmFn''@;'; put 'put ''cmFwaChmKSkpe2g9YVthLmxlbmd0aC0xXSx2JiYicGFyYWdyYXBoIj09PWgudHlwZT8oaC5yYXcrPSJcbiIrZC5yYXcsaC50ZXh0Kz0iXG4iK2QudGV4dCx0aGlzLmlubGluZVF1ZXVlLnBvcCgpLHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWgudGV4''@;'; put 'put ''dCk6YS5wdXNoKGQpLHY9Zi5sZW5ndGghPT1sLmxlbmd0aCxsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci50ZXh0KGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksaD1hW2EubGVuZ3RoLTFdLGgmJiJ0ZXh0Ij09PWgudHlwZT8o''@;'; put 'put ''aC5yYXcrPSJcbiIrZC5yYXcsaC50ZXh0Kz0iXG4iK2QudGV4dCx0aGlzLmlubGluZVF1ZXVlLnBvcCgpLHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWgudGV4dCk6YS5wdXNoKGQpO2NvbnRpbnVlfWlmKGwpe2NvbnN0IE09IkluZmluaXRlIGxvb3Ag''@;'; put 'put ''b24gYnl0ZTogIitsLmNoYXJDb2RlQXQoMCk7aWYodGhpcy5vcHRpb25zLnNpbGVudCl7Y29uc29sZS5lcnJvcihNKTticmVha310aHJvdyBuZXcgRXJyb3IoTSl9fXJldHVybiB0aGlzLnN0YXRlLnRvcD0hMCxhfWlubGluZShsLGE9W10pe3JldHVybiB0aGlzLmlubGluZVF1ZXVlLnB1c2go''@;'; put 'put ''e3NyYzpsLHRva2VuczphfSksYX1pbmxpbmVUb2tlbnMobCxhPVtdKXtsZXQgZCxoLGYsTSxELFUsdj1sO2lmKHRoaXMudG9rZW5zLmxpbmtzKXtjb25zdCB0ZT1PYmplY3Qua2V5cyh0aGlzLnRva2Vucy5saW5rcyk7aWYodGUubGVuZ3RoPjApZm9yKDtudWxsIT0oTT10aGlzLnRva2VuaXpl''@;'; put 'put ''ci5ydWxlcy5pbmxpbmUucmVmbGlua1NlYXJjaC5leGVjKHYpKTspdGUuaW5jbHVkZXMoTVswXS5zbGljZShNWzBdLmxhc3RJbmRleE9mKCJbIikrMSwtMSkpJiYodj12LnNsaWNlKDAsTS5pbmRleCkrIlsiKyJhIi5yZXBlYXQoTVswXS5sZW5ndGgtMikrIl0iK3Yuc2xpY2UodGhpcy50b2tl''@;'; put 'put ''bml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2gubGFzdEluZGV4KSl9Zm9yKDtudWxsIT0oTT10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmV4ZWModikpOyl2PXYuc2xpY2UoMCxNLmluZGV4KSsiWyIrImEiLnJlcGVhdChNWzBdLmxlbmd0aC0yKSsiXSIrdi5z''@;'; put 'put ''bGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmxhc3RJbmRleCk7Zm9yKDtudWxsIT0oTT10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24uZXhlYyh2KSk7KXY9di5zbGljZSgwLE0uaW5kZXgpKyIrKyIrdi5zbGljZSh0aGlzLnRva2Vu''@;'; put 'put ''aXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24ubGFzdEluZGV4KTtmb3IoO2w7KWlmKER8fChVPSIiKSxEPSExLCEodGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLmlubGluZSYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuaW5saW5lLnNvbWUo''@;'; put 'put ''dGU9PiEhKGQ9dGUuY2FsbCh7bGV4ZXI6dGhpc30sbCxhKSkmJihsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpLCEwKSkpKXtpZihkPXRoaXMudG9rZW5pemVyLmVzY2FwZShsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihk''@;'; put 'put ''PXRoaXMudG9rZW5pemVyLnRhZyhsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGg9YVthLmxlbmd0aC0xXSxoJiYidGV4dCI9PT1kLnR5cGUmJiJ0ZXh0Ij09PWgudHlwZT8oaC5yYXcrPWQucmF3LGgudGV4dCs9ZC50ZXh0KTphLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRv''@;'; put 'put ''a2VuaXplci5saW5rKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIucmVmbGluayhsLHRoaXMudG9rZW5zLmxpbmtzKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGg9YVthLmxlbmd0aC0xXSxoJiYidGV4''@;'; put 'put ''dCI9PT1kLnR5cGUmJiJ0ZXh0Ij09PWgudHlwZT8oaC5yYXcrPWQucmF3LGgudGV4dCs9ZC50ZXh0KTphLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5lbVN0cm9uZyhsLHYsVSkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYo''@;'; put 'put ''ZD10aGlzLnRva2VuaXplci5jb2Rlc3BhbihsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmJyKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tl''@;'; put 'put ''bml6ZXIuZGVsKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuYXV0b2xpbmsobCxYeWUpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKCF0aGlzLnN0YXRlLmluTGlu''@;'; put 'put ''ayYmKGQ9dGhpcy50b2tlbml6ZXIudXJsKGwsWHllKSkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZj1sLHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydElubGluZSl7bGV0IHRlPTEvMDtjb25z''@;'; put 'put ''dCBvZT1sLnNsaWNlKDEpO2xldCB2ZTt0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydElubGluZS5mb3JFYWNoKGZ1bmN0aW9uKHdlKXt2ZT13ZS5jYWxsKHtsZXhlcjp0aGlzfSxvZSksIm51bWJlciI9PXR5cGVvZiB2ZSYmdmU+PTAmJih0ZT1NYXRoLm1pbih0ZSx2ZSkpfSksdGU8MS8w''@;'; put 'put ''JiZ0ZT49MCYmKGY9bC5zdWJzdHJpbmcoMCx0ZSsxKSl9aWYoZD10aGlzLnRva2VuaXplci5pbmxpbmVUZXh0KGYsaVR0KSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLCJfIiE9PWQucmF3LnNsaWNlKC0xKSYmKFU9ZC5yYXcuc2xpY2UoLTEpKSxEPSEwLGg9YVthLmxlbmd0aC0xXSxo''@;'; put 'put ''JiYidGV4dCI9PT1oLnR5cGU/KGgucmF3Kz1kLnJhdyxoLnRleHQrPWQudGV4dCk6YS5wdXNoKGQpO2NvbnRpbnVlfWlmKGwpe2NvbnN0IHRlPSJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrbC5jaGFyQ29kZUF0KDApO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpe2NvbnNvbGUuZXJyb3IodGUp''@;'; put 'put ''O2JyZWFrfXRocm93IG5ldyBFcnJvcih0ZSl9fXJldHVybiBhfX1jbGFzcyBXantjb25zdHJ1Y3RvcihsKXt0aGlzLm9wdGlvbnM9bHx8Uzh9Y29kZShsLGEsZCl7Y29uc3QgaD0oYXx8IiIpLm1hdGNoKC9cUyovKVswXTtpZih0aGlzLm9wdGlvbnMuaGlnaGxpZ2h0KXtjb25zdCBmPXRoaXMu''@;'; put 'put ''b3B0aW9ucy5oaWdobGlnaHQobCxoKTtudWxsIT1mJiZmIT09bCYmKGQ9ITAsbD1mKX1yZXR1cm4gbD1sLnJlcGxhY2UoL1xuJC8sIiIpKyJcbiIsaD8nPHByZT48Y29kZSBjbGFzcz0iJyt0aGlzLm9wdGlvbnMubGFuZ1ByZWZpeCtxMShoKSsnIj4nKyhkP2w6cTEobCwhMCkpKyI8L2NvZGU+''@;'; put 'put ''PC9wcmU+XG4iOiI8cHJlPjxjb2RlPiIrKGQ/bDpxMShsLCEwKSkrIjwvY29kZT48L3ByZT5cbiJ9YmxvY2txdW90ZShsKXtyZXR1cm5gPGJsb2NrcXVvdGU+XG4ke2x9PC9ibG9ja3F1b3RlPlxuYH1odG1sKGwsYSl7cmV0dXJuIGx9aGVhZGluZyhsLGEsZCxoKXtyZXR1cm4gdGhpcy5vcHRp''@;'; put 'put ''b25zLmhlYWRlcklkcz9gPGgke2F9IGlkPSIke3RoaXMub3B0aW9ucy5oZWFkZXJQcmVmaXgraC5zbHVnKGQpfSI+JHtsfTwvaCR7YX0+XG5gOmA8aCR7YX0+JHtsfTwvaCR7YX0+XG5gfWhyKCl7cmV0dXJuIHRoaXMub3B0aW9ucy54aHRtbD8iPGhyLz5cbiI6Ijxocj5cbiJ9bGlzdChsLGEs''@;'; put 'put ''ZCl7Y29uc3QgaD1hPyJvbCI6InVsIjtyZXR1cm4iPCIraCsoYSYmMSE9PWQ/JyBzdGFydD0iJytkKyciJzoiIikrIj5cbiIrbCsiPC8iK2grIj5cbiJ9bGlzdGl0ZW0obCl7cmV0dXJuYDxsaT4ke2x9PC9saT5cbmB9Y2hlY2tib3gobCl7cmV0dXJuIjxpbnB1dCAiKyhsPydjaGVja2VkPSIi''@;'; put 'put ''ICc6IiIpKydkaXNhYmxlZD0iIiB0eXBlPSJjaGVja2JveCInKyh0aGlzLm9wdGlvbnMueGh0bWw/IiAvIjoiIikrIj4gIn1wYXJhZ3JhcGgobCl7cmV0dXJuYDxwPiR7bH08L3A+XG5gfXRhYmxlKGwsYSl7cmV0dXJuIGEmJihhPWA8dGJvZHk+JHthfTwvdGJvZHk+YCksIjx0YWJsZT5cbjx0''@;'; put 'put ''aGVhZD5cbiIrbCsiPC90aGVhZD5cbiIrYSsiPC90YWJsZT5cbiJ9dGFibGVyb3cobCl7cmV0dXJuYDx0cj5cbiR7bH08L3RyPlxuYH10YWJsZWNlbGwobCxhKXtjb25zdCBkPWEuaGVhZGVyPyJ0aCI6InRkIjtyZXR1cm4oYS5hbGlnbj9gPCR7ZH0gYWxpZ249IiR7YS5hbGlnbn0iPmA6YDwk''@;'; put 'put ''e2R9PmApK2wrYDwvJHtkfT5cbmB9c3Ryb25nKGwpe3JldHVybmA8c3Ryb25nPiR7bH08L3N0cm9uZz5gfWVtKGwpe3JldHVybmA8ZW0+JHtsfTwvZW0+YH1jb2Rlc3BhbihsKXtyZXR1cm5gPGNvZGU+JHtsfTwvY29kZT5gfWJyKCl7cmV0dXJuIHRoaXMub3B0aW9ucy54aHRtbD8iPGJyLz4i''@;'; put 'put ''OiI8YnI+In1kZWwobCl7cmV0dXJuYDxkZWw+JHtsfTwvZGVsPmB9bGluayhsLGEsZCl7aWYobnVsbD09PShsPUd5ZSh0aGlzLm9wdGlvbnMuc2FuaXRpemUsdGhpcy5vcHRpb25zLmJhc2VVcmwsbCkpKXJldHVybiBkO2xldCBoPSc8YSBocmVmPSInK2wrJyInO3JldHVybiBhJiYoaCs9JyB0''@;'; put 'put ''aXRsZT0iJythKyciJyksaCs9Ij4iK2QrIjwvYT4iLGh9aW1hZ2UobCxhLGQpe2lmKG51bGw9PT0obD1HeWUodGhpcy5vcHRpb25zLnNhbml0aXplLHRoaXMub3B0aW9ucy5iYXNlVXJsLGwpKSlyZXR1cm4gZDtsZXQgaD1gPGltZyBzcmM9IiR7bH0iIGFsdD0iJHtkfSJgO3JldHVybiBhJiYo''@;'; put 'put ''aCs9YCB0aXRsZT0iJHthfSJgKSxoKz10aGlzLm9wdGlvbnMueGh0bWw/Ii8+IjoiPiIsaH10ZXh0KGwpe3JldHVybiBsfX1jbGFzcyB2YWV7c3Ryb25nKGwpe3JldHVybiBsfWVtKGwpe3JldHVybiBsfWNvZGVzcGFuKGwpe3JldHVybiBsfWRlbChsKXtyZXR1cm4gbH1odG1sKGwpe3JldHVy''@;'; put 'put ''biBsfXRleHQobCl7cmV0dXJuIGx9bGluayhsLGEsZCl7cmV0dXJuIiIrZH1pbWFnZShsLGEsZCl7cmV0dXJuIiIrZH1icigpe3JldHVybiIifX1jbGFzcyB5YWV7Y29uc3RydWN0b3IoKXt0aGlzLnNlZW49e319c2VyaWFsaXplKGwpe3JldHVybiBsLnRvTG93ZXJDYXNlKCkudHJpbSgpLnJl''@;'; put 'put ''cGxhY2UoLzxbIVwvYS16XS4qPz4vZ2ksIiIpLnJlcGxhY2UoL1tcdTIwMDAtXHUyMDZGXHUyRTAwLVx1MkU3RlxcJyEiIyQlJigpKissLi86Ozw9Pj9AW1xdXmB7fH1+XS9nLCIiKS5yZXBsYWNlKC9ccy9nLCItIil9Z2V0TmV4dFNhZmVTbHVnKGwsYSl7bGV0IGQ9bCxoPTA7aWYodGhpcy5z''@;'; put 'put ''ZWVuLmhhc093blByb3BlcnR5KGQpKXtoPXRoaXMuc2VlbltsXTtkb3toKyssZD1sKyItIitofXdoaWxlKHRoaXMuc2Vlbi5oYXNPd25Qcm9wZXJ0eShkKSl9cmV0dXJuIGF8fCh0aGlzLnNlZW5bbF09aCx0aGlzLnNlZW5bZF09MCksZH1zbHVnKGwsYT17fSl7Y29uc3QgZD10aGlzLnNlcmlh''@;'; put 'put ''bGl6ZShsKTtyZXR1cm4gdGhpcy5nZXROZXh0U2FmZVNsdWcoZCxhLmRyeXJ1bil9fWNsYXNzIGNne2NvbnN0cnVjdG9yKGwpe3RoaXMub3B0aW9ucz1sfHxTOCx0aGlzLm9wdGlvbnMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyfHxuZXcgV2osdGhpcy5yZW5kZXJlcj10aGlzLm9w''@;'; put 'put ''dGlvbnMucmVuZGVyZXIsdGhpcy5yZW5kZXJlci5vcHRpb25zPXRoaXMub3B0aW9ucyx0aGlzLnRleHRSZW5kZXJlcj1uZXcgdmFlLHRoaXMuc2x1Z2dlcj1uZXcgeWFlfXN0YXRpYyBwYXJzZShsLGEpe3JldHVybiBuZXcgY2coYSkucGFyc2UobCl9c3RhdGljIHBhcnNlSW5saW5lKGwsYSl7''@;'; put 'put ''cmV0dXJuIG5ldyBjZyhhKS5wYXJzZUlubGluZShsKX1wYXJzZShsLGE9ITApe2xldCBoLGYsdixNLEQsVSx0ZSxvZSx2ZSx3ZSxGZSxXZSxudCxkdCxtdCwkdCx6dCx5bixnbixkPSIiO2NvbnN0IHduPWwubGVuZ3RoO2ZvcihoPTA7aDx3bjtoKyspaWYod2U9bFtoXSx0aGlzLm9wdGlvbnMu''@;'; put 'put ''ZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbd2UudHlwZV0mJihnbj10aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbd2UudHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LHdlKSwhMSE9''@;'; put 'put ''PWdufHwhWyJzcGFjZSIsImhyIiwiaGVhZGluZyIsImNvZGUiLCJ0YWJsZSIsImJsb2NrcXVvdGUiLCJsaXN0IiwiaHRtbCIsInBhcmFncmFwaCIsInRleHQiXS5pbmNsdWRlcyh3ZS50eXBlKSkpZCs9Z258fCIiO2Vsc2Ugc3dpdGNoKHdlLnR5cGUpe2Nhc2Uic3BhY2UiOmNvbnRpbnVlO2Nh''@;'; put 'put ''c2UiaHIiOmQrPXRoaXMucmVuZGVyZXIuaHIoKTtjb250aW51ZTtjYXNlImhlYWRpbmciOmQrPXRoaXMucmVuZGVyZXIuaGVhZGluZyh0aGlzLnBhcnNlSW5saW5lKHdlLnRva2Vucyksd2UuZGVwdGgsWXllKHRoaXMucGFyc2VJbmxpbmUod2UudG9rZW5zLHRoaXMudGV4dFJlbmRlcmVyKSks''@;'; put 'put ''dGhpcy5zbHVnZ2VyKTtjb250aW51ZTtjYXNlImNvZGUiOmQrPXRoaXMucmVuZGVyZXIuY29kZSh3ZS50ZXh0LHdlLmxhbmcsd2UuZXNjYXBlZCk7Y29udGludWU7Y2FzZSJ0YWJsZSI6Zm9yKG9lPSIiLHRlPSIiLE09d2UuaGVhZGVyLmxlbmd0aCxmPTA7ZjxNO2YrKyl0ZSs9dGhpcy5yZW5k''@;'; put 'put ''ZXJlci50YWJsZWNlbGwodGhpcy5wYXJzZUlubGluZSh3ZS5oZWFkZXJbZl0udG9rZW5zKSx7aGVhZGVyOiEwLGFsaWduOndlLmFsaWduW2ZdfSk7Zm9yKG9lKz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KHRlKSx2ZT0iIixNPXdlLnJvd3MubGVuZ3RoLGY9MDtmPE07ZisrKXtmb3IoVT13ZS5y''@;'; put 'put ''b3dzW2ZdLHRlPSIiLEQ9VS5sZW5ndGgsdj0wO3Y8RDt2KyspdGUrPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMucGFyc2VJbmxpbmUoVVt2XS50b2tlbnMpLHtoZWFkZXI6ITEsYWxpZ246d2UuYWxpZ25bdl19KTt2ZSs9dGhpcy5yZW5kZXJlci50YWJsZXJvdyh0ZSl9ZCs9dGhpcy5y''@;'; put 'put ''ZW5kZXJlci50YWJsZShvZSx2ZSk7Y29udGludWU7Y2FzZSJibG9ja3F1b3RlIjp2ZT10aGlzLnBhcnNlKHdlLnRva2VucyksZCs9dGhpcy5yZW5kZXJlci5ibG9ja3F1b3RlKHZlKTtjb250aW51ZTtjYXNlImxpc3QiOmZvcihGZT13ZS5vcmRlcmVkLFdlPXdlLnN0YXJ0LG50PXdlLmxvb3Nl''@;'; put 'put ''LE09d2UuaXRlbXMubGVuZ3RoLHZlPSIiLGY9MDtmPE07ZisrKW10PXdlLml0ZW1zW2ZdLCR0PW10LmNoZWNrZWQsenQ9bXQudGFzayxkdD0iIixtdC50YXNrJiYoeW49dGhpcy5yZW5kZXJlci5jaGVja2JveCgkdCksbnQ/bXQudG9rZW5zLmxlbmd0aD4wJiYicGFyYWdyYXBoIj09PW10LnRv''@;'; put 'put ''a2Vuc1swXS50eXBlPyhtdC50b2tlbnNbMF0udGV4dD15bisiICIrbXQudG9rZW5zWzBdLnRleHQsbXQudG9rZW5zWzBdLnRva2VucyYmbXQudG9rZW5zWzBdLnRva2Vucy5sZW5ndGg+MCYmInRleHQiPT09bXQudG9rZW5zWzBdLnRva2Vuc1swXS50eXBlJiYobXQudG9rZW5zWzBdLnRva2Vu''@;'; put 'put ''c1swXS50ZXh0PXluKyIgIittdC50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQpKTptdC50b2tlbnMudW5zaGlmdCh7dHlwZToidGV4dCIsdGV4dDp5bn0pOmR0Kz15biksZHQrPXRoaXMucGFyc2UobXQudG9rZW5zLG50KSx2ZSs9dGhpcy5yZW5kZXJlci5saXN0aXRlbShkdCx6dCwkdCk7ZCs9''@;'; put 'put ''dGhpcy5yZW5kZXJlci5saXN0KHZlLEZlLFdlKTtjb250aW51ZTtjYXNlImh0bWwiOmQrPXRoaXMucmVuZGVyZXIuaHRtbCh3ZS50ZXh0LHdlLmJsb2NrKTtjb250aW51ZTtjYXNlInBhcmFncmFwaCI6ZCs9dGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgodGhpcy5wYXJzZUlubGluZSh3ZS50b2tl''@;'; put 'put ''bnMpKTtjb250aW51ZTtjYXNlInRleHQiOmZvcih2ZT13ZS50b2tlbnM/dGhpcy5wYXJzZUlubGluZSh3ZS50b2tlbnMpOndlLnRleHQ7aCsxPHduJiYidGV4dCI9PT1sW2grMV0udHlwZTspd2U9bFsrK2hdLHZlKz0iXG4iKyh3ZS50b2tlbnM/dGhpcy5wYXJzZUlubGluZSh3ZS50b2tlbnMp''@;'; put 'put ''OndlLnRleHQpO2QrPWE/dGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgodmUpOnZlO2NvbnRpbnVlO2RlZmF1bHQ6e2NvbnN0IFJuPSdUb2tlbiB3aXRoICInK3dlLnR5cGUrJyIgdHlwZSB3YXMgbm90IGZvdW5kLic7aWYodGhpcy5vcHRpb25zLnNpbGVudClyZXR1cm4gdm9pZCBjb25zb2xlLmVy''@;'; put 'put ''cm9yKFJuKTt0aHJvdyBuZXcgRXJyb3IoUm4pfX1yZXR1cm4gZH1wYXJzZUlubGluZShsLGEpe2E9YXx8dGhpcy5yZW5kZXJlcjtsZXQgaCxmLHYsZD0iIjtjb25zdCBNPWwubGVuZ3RoO2ZvcihoPTA7aDxNO2grKylpZihmPWxbaF0sdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0''@;'; put 'put ''aW9ucy5leHRlbnNpb25zLnJlbmRlcmVycyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2YudHlwZV0mJih2PXRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tmLnR5cGVdLmNhbGwoe3BhcnNlcjp0aGlzfSxmKSwhMSE9PXZ8fCFbImVzY2FwZSIsImh0bWwiLCJs''@;'; put 'put ''aW5rIiwiaW1hZ2UiLCJzdHJvbmciLCJlbSIsImNvZGVzcGFuIiwiYnIiLCJkZWwiLCJ0ZXh0Il0uaW5jbHVkZXMoZi50eXBlKSkpZCs9dnx8IiI7ZWxzZSBzd2l0Y2goZi50eXBlKXtjYXNlImVzY2FwZSI6Y2FzZSJ0ZXh0IjpkKz1hLnRleHQoZi50ZXh0KTticmVhaztjYXNlImh0bWwiOmQr''@;'; put 'put ''PWEuaHRtbChmLnRleHQpO2JyZWFrO2Nhc2UibGluayI6ZCs9YS5saW5rKGYuaHJlZixmLnRpdGxlLHRoaXMucGFyc2VJbmxpbmUoZi50b2tlbnMsYSkpO2JyZWFrO2Nhc2UiaW1hZ2UiOmQrPWEuaW1hZ2UoZi5ocmVmLGYudGl0bGUsZi50ZXh0KTticmVhaztjYXNlInN0cm9uZyI6ZCs9YS5z''@;'; put 'put ''dHJvbmcodGhpcy5wYXJzZUlubGluZShmLnRva2VucyxhKSk7YnJlYWs7Y2FzZSJlbSI6ZCs9YS5lbSh0aGlzLnBhcnNlSW5saW5lKGYudG9rZW5zLGEpKTticmVhaztjYXNlImNvZGVzcGFuIjpkKz1hLmNvZGVzcGFuKGYudGV4dCk7YnJlYWs7Y2FzZSJiciI6ZCs9YS5icigpO2JyZWFrO2Nh''@;'; put 'put ''c2UiZGVsIjpkKz1hLmRlbCh0aGlzLnBhcnNlSW5saW5lKGYudG9rZW5zLGEpKTticmVhaztkZWZhdWx0Ontjb25zdCBEPSdUb2tlbiB3aXRoICInK2YudHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZih0aGlzLm9wdGlvbnMuc2lsZW50KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3Io''@;'; put 'put ''RCk7dGhyb3cgbmV3IEVycm9yKEQpfX1yZXR1cm4gZH19Y2xhc3MgWWp7Y29uc3RydWN0b3IobCl7dGhpcy5vcHRpb25zPWx8fFM4fXN0YXRpYyBwYXNzVGhyb3VnaEhvb2tzPW5ldyBTZXQoWyJwcmVwcm9jZXNzIiwicG9zdHByb2Nlc3MiXSk7cHJlcHJvY2VzcyhsKXtyZXR1cm4gbH1wb3N0''@;'; put 'put ''cHJvY2VzcyhsKXtyZXR1cm4gbH19Y29uc3QgbXk9bmV3IGNsYXNzIGFUdHtkZWZhdWx0cz17YXN5bmM6ITEsYmFzZVVybDpudWxsLGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhlYWRlcklkczohMCxoZWFkZXJQcmVmaXg6IiIsaGlnaGxpZ2h0Om51bGwsaG9va3M6bnVsbCxs''@;'; put 'put ''YW5nUHJlZml4OiJsYW5ndWFnZS0iLG1hbmdsZTohMCxwZWRhbnRpYzohMSxyZW5kZXJlcjpudWxsLHNhbml0aXplOiExLHNhbml0aXplcjpudWxsLHNpbGVudDohMSxzbWFydHlwYW50czohMSx0b2tlbml6ZXI6bnVsbCx3YWxrVG9rZW5zOm51bGwseGh0bWw6ITF9O29wdGlvbnM9dGhpcy5z''@;'; put 'put ''ZXRPcHRpb25zO3BhcnNlPXRoaXMuI2UobGcubGV4LGNnLnBhcnNlKTtwYXJzZUlubGluZT10aGlzLiNlKGxnLmxleElubGluZSxjZy5wYXJzZUlubGluZSk7UGFyc2VyPWNnO3BhcnNlcj1jZy5wYXJzZTtSZW5kZXJlcj1XajtUZXh0UmVuZGVyZXI9dmFlO0xleGVyPWxnO2xleGVyPWxnLmxl''@;'; put 'put ''eDtUb2tlbml6ZXI9Wmo7U2x1Z2dlcj15YWU7SG9va3M9WWo7Y29uc3RydWN0b3IoLi4ubCl7dGhpcy51c2UoLi4ubCl9d2Fsa1Rva2VucyhsLGEpe2xldCBkPVtdO2Zvcihjb25zdCBoIG9mIGwpc3dpdGNoKGQ9ZC5jb25jYXQoYS5jYWxsKHRoaXMsaCkpLGgudHlwZSl7Y2FzZSJ0YWJsZSI6''@;'; put 'put ''Zm9yKGNvbnN0IGYgb2YgaC5oZWFkZXIpZD1kLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoZi50b2tlbnMsYSkpO2Zvcihjb25zdCBmIG9mIGgucm93cylmb3IoY29uc3QgdiBvZiBmKWQ9ZC5jb25jYXQodGhpcy53YWxrVG9rZW5zKHYudG9rZW5zLGEpKTticmVhaztjYXNlImxpc3QiOmQ9ZC5j''@;'; put 'put ''b25jYXQodGhpcy53YWxrVG9rZW5zKGguaXRlbXMsYSkpO2JyZWFrO2RlZmF1bHQ6dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zJiZ0aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnMmJnRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1toLnR5cGVdP3RoaXMuZGVm''@;'; put 'put ''YXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1toLnR5cGVdLmZvckVhY2goZj0+e2Q9ZC5jb25jYXQodGhpcy53YWxrVG9rZW5zKGhbZl0sYSkpfSk6aC50b2tlbnMmJihkPWQuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhoLnRva2VucyxhKSkpfXJldHVybiBkfXVzZSguLi5sKXtjb25zdCBh''@;'; put 'put ''PXRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9uc3x8e3JlbmRlcmVyczp7fSxjaGlsZFRva2Vuczp7fX07cmV0dXJuIGwuZm9yRWFjaChkPT57Y29uc3QgaD17Li4uZH07aWYoaC5hc3luYz10aGlzLmRlZmF1bHRzLmFzeW5jfHxoLmFzeW5jfHwhMSxkLmV4dGVuc2lvbnMmJihkLmV4dGVuc2lvbnMu''@;'; put 'put ''Zm9yRWFjaChmPT57aWYoIWYubmFtZSl0aHJvdyBuZXcgRXJyb3IoImV4dGVuc2lvbiBuYW1lIHJlcXVpcmVkIik7aWYoZi5yZW5kZXJlcil7Y29uc3Qgdj1hLnJlbmRlcmVyc1tmLm5hbWVdO2EucmVuZGVyZXJzW2YubmFtZV09dj9mdW5jdGlvbiguLi5NKXtsZXQgRD1mLnJlbmRlcmVyLmFw''@;'; put 'put ''cGx5KHRoaXMsTSk7cmV0dXJuITE9PT1EJiYoRD12LmFwcGx5KHRoaXMsTSkpLER9OmYucmVuZGVyZXJ9aWYoZi50b2tlbml6ZXIpe2lmKCFmLmxldmVsfHwiYmxvY2siIT09Zi5sZXZlbCYmImlubGluZSIhPT1mLmxldmVsKXRocm93IG5ldyBFcnJvcigiZXh0ZW5zaW9uIGxldmVsIG11c3Qg''@;'; put 'put ''YmUgJ2Jsb2NrJyBvciAnaW5saW5lJyIpO2FbZi5sZXZlbF0/YVtmLmxldmVsXS51bnNoaWZ0KGYudG9rZW5pemVyKTphW2YubGV2ZWxdPVtmLnRva2VuaXplcl0sZi5zdGFydCYmKCJibG9jayI9PT1mLmxldmVsP2Euc3RhcnRCbG9jaz9hLnN0YXJ0QmxvY2sucHVzaChmLnN0YXJ0KTphLnN0''@;'; put 'put ''YXJ0QmxvY2s9W2Yuc3RhcnRdOiJpbmxpbmUiPT09Zi5sZXZlbCYmKGEuc3RhcnRJbmxpbmU/YS5zdGFydElubGluZS5wdXNoKGYuc3RhcnQpOmEuc3RhcnRJbmxpbmU9W2Yuc3RhcnRdKSl9Zi5jaGlsZFRva2VucyYmKGEuY2hpbGRUb2tlbnNbZi5uYW1lXT1mLmNoaWxkVG9rZW5zKX0pLGgu''@;'; put 'put ''ZXh0ZW5zaW9ucz1hKSxkLnJlbmRlcmVyKXtjb25zdCBmPXRoaXMuZGVmYXVsdHMucmVuZGVyZXJ8fG5ldyBXaih0aGlzLmRlZmF1bHRzKTtmb3IoY29uc3QgdiBpbiBkLnJlbmRlcmVyKXtjb25zdCBNPWZbdl07Zlt2XT0oLi4uRCk9PntsZXQgVT1kLnJlbmRlcmVyW3ZdLmFwcGx5KGYsRCk7''@;'; put 'put ''cmV0dXJuITE9PT1VJiYoVT1NLmFwcGx5KGYsRCkpLFV9fWgucmVuZGVyZXI9Zn1pZihkLnRva2VuaXplcil7Y29uc3QgZj10aGlzLmRlZmF1bHRzLnRva2VuaXplcnx8bmV3IFpqKHRoaXMuZGVmYXVsdHMpO2Zvcihjb25zdCB2IGluIGQudG9rZW5pemVyKXtjb25zdCBNPWZbdl07Zlt2XT0o''@;'; put 'put ''Li4uRCk9PntsZXQgVT1kLnRva2VuaXplclt2XS5hcHBseShmLEQpO3JldHVybiExPT09VSYmKFU9TS5hcHBseShmLEQpKSxVfX1oLnRva2VuaXplcj1mfWlmKGQuaG9va3Mpe2NvbnN0IGY9dGhpcy5kZWZhdWx0cy5ob29rc3x8bmV3IFlqO2Zvcihjb25zdCB2IGluIGQuaG9va3Mpe2NvbnN0''@;'; put 'put ''IE09Zlt2XTtmW3ZdPVlqLnBhc3NUaHJvdWdoSG9va3MuaGFzKHYpP0Q9PntpZih0aGlzLmRlZmF1bHRzLmFzeW5jKXJldHVybiBQcm9taXNlLnJlc29sdmUoZC5ob29rc1t2XS5jYWxsKGYsRCkpLnRoZW4odGU9Pk0uY2FsbChmLHRlKSk7Y29uc3QgVT1kLmhvb2tzW3ZdLmNhbGwoZixEKTty''@;'; put 'put ''ZXR1cm4gTS5jYWxsKGYsVSl9OiguLi5EKT0+e2xldCBVPWQuaG9va3Nbdl0uYXBwbHkoZixEKTtyZXR1cm4hMT09PVUmJihVPU0uYXBwbHkoZixEKSksVX19aC5ob29rcz1mfWlmKGQud2Fsa1Rva2Vucyl7Y29uc3QgZj10aGlzLmRlZmF1bHRzLndhbGtUb2tlbnM7aC53YWxrVG9rZW5zPWZ1''@;'; put 'put ''bmN0aW9uKHYpe2xldCBNPVtdO3JldHVybiBNLnB1c2goZC53YWxrVG9rZW5zLmNhbGwodGhpcyx2KSksZiYmKE09TS5jb25jYXQoZi5jYWxsKHRoaXMsdikpKSxNfX10aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLmh9fSksdGhpc31zZXRPcHRpb25zKGwpe3JldHVybiB0aGlz''@;'; put 'put ''LmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLmx9LHRoaXN9I2UobCxhKXtyZXR1cm4oZCxoLGYpPT57ImZ1bmN0aW9uIj09dHlwZW9mIGgmJihmPWgsaD1udWxsKTtjb25zdCB2PXsuLi5ofTtoPXsuLi50aGlzLmRlZmF1bHRzLC4uLnZ9O2NvbnN0IE09dGhpcy4jdChoLnNpbGVudCxo''@;'; put 'put ''LmFzeW5jLGYpO2lmKHR5cGVvZiBkPiJ1Inx8bnVsbD09PWQpcmV0dXJuIE0obmV3IEVycm9yKCJtYXJrZWQoKTogaW5wdXQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCBvciBudWxsIikpO2lmKCJzdHJpbmciIT10eXBlb2YgZClyZXR1cm4gTShuZXcgRXJyb3IoIm1hcmtlZCgpOiBpbnB1dCBw''@;'; put 'put ''YXJhbWV0ZXIgaXMgb2YgdHlwZSAiK09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkKSsiLCBzdHJpbmcgZXhwZWN0ZWQiKSk7aWYoZnVuY3Rpb24gblR0KGMsbCl7IWN8fGMuc2lsZW50fHwobCYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogY2FsbGJhY2sgaXMgZGVwcmVjYXRlZCBz''@;'; put 'put ''aW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBSZWFkIG1vcmUgaGVyZTogaHR0cHM6Ly9tYXJrZWQuanMub3JnL3VzaW5nX3BybyNhc3luYyIpLChjLnNhbml0aXplfHxjLnNhbml0aXplcikmJmNvbnNvbGUu''@;'; put 'put ''d2FybigibWFya2VkKCk6IHNhbml0aXplIGFuZCBzYW5pdGl6ZXIgcGFyYW1ldGVycyBhcmUgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDAuNy4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBSZWFkIG1vcmUgaGVyZTogaHR0cHM6Ly9t''@;'; put 'put ''YXJrZWQuanMub3JnLyMvVVNJTkdfQURWQU5DRUQubWQjb3B0aW9ucyIpLChjLmhpZ2hsaWdodHx8Imxhbmd1YWdlLSIhPT1jLmxhbmdQcmVmaXgpJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBoaWdobGlnaHQgYW5kIGxhbmdQcmVmaXggcGFyYW1ldGVycyBhcmUgZGVwcmVjYXRlZCBzaW5j''@;'; put 'put ''ZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtaGlnaGxpZ2h0LiIpLGMubWFuZ2xlJiZjb25zb2xlLndhcm4oIm1hcmtlZCgp''@;'; put 'put ''OiBtYW5nbGUgcGFyYW1ldGVyIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBUbyBjbGVhciB0aGlzIHdhcm5pbmcsIGluc3RhbGwgaHR0cHM6Ly93d3cubnBtanMu''@;'; put 'put ''Y29tL3BhY2thZ2UvbWFya2VkLW1hbmdsZSwgb3IgZGlzYWJsZSBieSBzZXR0aW5nIGB7bWFuZ2xlOiBmYWxzZX1gLiIpLGMuYmFzZVVybCYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogYmFzZVVybCBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQg''@;'; put 'put ''bm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtYmFzZS11cmwuIiksYy5zbWFydHlwYW50cyYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogc21hcnR5cGFudHMgcGFyYW1l''@;'; put 'put ''dGVyIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gSW5zdGVhZCB1c2UgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLXNtYXJ0eXBhbnRzLiIpLGMueGh0bWwm''@;'; put 'put ''JmNvbnNvbGUud2FybigibWFya2VkKCk6IHhodG1sIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9w''@;'; put 'put ''YWNrYWdlL21hcmtlZC14aHRtbC4iKSwoYy5oZWFkZXJJZHN8fGMuaGVhZGVyUHJlZml4KSYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogaGVhZGVySWRzIGFuZCBoZWFkZXJQcmVmaXggcGFyYW1ldGVycyBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBhcmUgZGVwcmVjYXRlZCBzaW5jZSB2ZXJz''@;'; put 'put ''aW9uIDUuMC4wLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFRvIGNsZWFyIHRoaXMgd2FybmluZywgaW5zdGFsbCAgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLWdmbS1oZWFkaW5nLWlkLCBvciBkaXNhYmxlIGJ5IHNldHRpbmcgYHtoZWFkZXJJZHM6''@;'; put 'put ''IGZhbHNlfWAuIikpfShoLGYpLGguaG9va3MmJihoLmhvb2tzLm9wdGlvbnM9aCksZil7Y29uc3QgRD1oLmhpZ2hsaWdodDtsZXQgVTt0cnl7aC5ob29rcyYmKGQ9aC5ob29rcy5wcmVwcm9jZXNzKGQpKSxVPWwoZCxoKX1jYXRjaCh2ZSl7cmV0dXJuIE0odmUpfWNvbnN0IHRlPXZlPT57bGV0''@;'; put 'put ''IHdlO2lmKCF2ZSl0cnl7aC53YWxrVG9rZW5zJiZ0aGlzLndhbGtUb2tlbnMoVSxoLndhbGtUb2tlbnMpLHdlPWEoVSxoKSxoLmhvb2tzJiYod2U9aC5ob29rcy5wb3N0cHJvY2Vzcyh3ZSkpfWNhdGNoKEZlKXt2ZT1GZX1yZXR1cm4gaC5oaWdobGlnaHQ9RCx2ZT9NKHZlKTpmKG51bGwsd2Up''@;'; put 'put ''fTtpZighRHx8RC5sZW5ndGg8M3x8KGRlbGV0ZSBoLmhpZ2hsaWdodCwhVS5sZW5ndGgpKXJldHVybiB0ZSgpO2xldCBvZT0wO3JldHVybiB0aGlzLndhbGtUb2tlbnMoVSx2ZT0+eyJjb2RlIj09PXZlLnR5cGUmJihvZSsrLHNldFRpbWVvdXQoKCk9PntEKHZlLnRleHQsdmUubGFuZywod2Us''@;'; put 'put ''RmUpPT57aWYod2UpcmV0dXJuIHRlKHdlKTtudWxsIT1GZSYmRmUhPT12ZS50ZXh0JiYodmUudGV4dD1GZSx2ZS5lc2NhcGVkPSEwKSxvZS0tLDA9PT1vZSYmdGUoKX0pfSwwKSl9KSx2b2lkKDA9PT1vZSYmdGUoKSl9aWYoaC5hc3luYylyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGguaG9va3M/''@;'; put 'put ''aC5ob29rcy5wcmVwcm9jZXNzKGQpOmQpLnRoZW4oRD0+bChELGgpKS50aGVuKEQ9Pmgud2Fsa1Rva2Vucz9Qcm9taXNlLmFsbCh0aGlzLndhbGtUb2tlbnMoRCxoLndhbGtUb2tlbnMpKS50aGVuKCgpPT5EKTpEKS50aGVuKEQ9PmEoRCxoKSkudGhlbihEPT5oLmhvb2tzP2guaG9va3MucG9z''@;'; put 'put ''dHByb2Nlc3MoRCk6RCkuY2F0Y2goTSk7dHJ5e2guaG9va3MmJihkPWguaG9va3MucHJlcHJvY2VzcyhkKSk7Y29uc3QgRD1sKGQsaCk7aC53YWxrVG9rZW5zJiZ0aGlzLndhbGtUb2tlbnMoRCxoLndhbGtUb2tlbnMpO2xldCBVPWEoRCxoKTtyZXR1cm4gaC5ob29rcyYmKFU9aC5ob29rcy5w''@;'; put 'put ''b3N0cHJvY2VzcyhVKSksVX1jYXRjaChEKXtyZXR1cm4gTShEKX19fSN0KGwsYSxkKXtyZXR1cm4gaD0+e2lmKGgubWVzc2FnZSs9IlxuUGxlYXNlIHJlcG9ydCB0aGlzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJrZWRqcy9tYXJrZWQuIixsKXtjb25zdCBmPSI8cD5BbiBlcnJvciBvY2N1''@;'; put 'put ''cnJlZDo8L3A+PHByZT4iK3ExKGgubWVzc2FnZSsiIiwhMCkrIjwvcHJlPiI7cmV0dXJuIGE/UHJvbWlzZS5yZXNvbHZlKGYpOmQ/dm9pZCBkKG51bGwsZik6Zn1pZihhKXJldHVybiBQcm9taXNlLnJlamVjdChoKTtpZighZCl0aHJvdyBoO2QoaCl9fX0oUzgpO2Z1bmN0aW9uIE5sKGMsbCxh''@;'; put 'put ''KXtyZXR1cm4gbXkucGFyc2UoYyxsLGEpfU5sLm9wdGlvbnM9Tmwuc2V0T3B0aW9ucz1mdW5jdGlvbihjKXtyZXR1cm4gbXkuc2V0T3B0aW9ucyhjKSx6eWUoTmwuZGVmYXVsdHM9bXkuZGVmYXVsdHMpLE5sfSxObC5nZXREZWZhdWx0cz1mdW5jdGlvbiBtYWUoKXtyZXR1cm57YXN5bmM6ITEs''@;'; put 'put ''YmFzZVVybDpudWxsLGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhlYWRlcklkczohMCxoZWFkZXJQcmVmaXg6IiIsaGlnaGxpZ2h0Om51bGwsaG9va3M6bnVsbCxsYW5nUHJlZml4OiJsYW5ndWFnZS0iLG1hbmdsZTohMCxwZWRhbnRpYzohMSxyZW5kZXJlcjpudWxsLHNhbml0''@;'; put 'put ''aXplOiExLHNhbml0aXplcjpudWxsLHNpbGVudDohMSxzbWFydHlwYW50czohMSx0b2tlbml6ZXI6bnVsbCx3YWxrVG9rZW5zOm51bGwseGh0bWw6ITF9fSxObC5kZWZhdWx0cz1TOCxObC51c2U9ZnVuY3Rpb24oLi4uYyl7cmV0dXJuIG15LnVzZSguLi5jKSx6eWUoTmwuZGVmYXVsdHM9bXku''@;'; put 'put ''ZGVmYXVsdHMpLE5sfSxObC53YWxrVG9rZW5zPWZ1bmN0aW9uKGMsbCl7cmV0dXJuIG15LndhbGtUb2tlbnMoYyxsKX0sTmwucGFyc2VJbmxpbmU9bXkucGFyc2VJbmxpbmUsTmwuUGFyc2VyPWNnLE5sLnBhcnNlcj1jZy5wYXJzZSxObC5SZW5kZXJlcj1XaixObC5UZXh0UmVuZGVyZXI9dmFl''@;'; put 'put ''LE5sLkxleGVyPWxnLE5sLmxleGVyPWxnLmxleCxObC5Ub2tlbml6ZXI9WmosTmwuU2x1Z2dlcj15YWUsTmwuSG9va3M9WWosTmwucGFyc2U9Tmw7Y29uc3Qgc1R0PVsibWFya2Rvd25DYXJkIl07ZnVuY3Rpb24gbFR0KGMsbCl7MSZjJiZHdCgwLCJjbHItc3Bpbm5lciIsOCl9bGV0IGNUdD0o''@;'; put 'put ''KCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuYWdyZWVDaGVja2VkPSExLHRoaXMuYWdyZWVCb3hMb2NrZWQ9ITAsdGhpcy5hZ3JlZUNsaWNrZWQ9ITEsdGhpcy5ldWxhX21hcmtkb3duPSdcbkxpY2VuY2UgQWdyZWVtZW50IGZvciBEYXRhIENvbnRy''@;'; put 'put ''b2xsZXIgZm9yIFNBU1x4YWVcbj09PT09PT09PT09PT09PT09PT09XG5cbkNvcHlyaWdodCAoYykgQm93ZSBJTyBMdGRcblxuRGF0YSBDb250cm9sbGVyIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGJ5IDRHTCBBcHBzLCBhIGJyYW5kIG93bmVkIGJ5IEJvd2UgSU8gTHRkLCBhIFVLIExpbWl0''@;'; put 'put ''ZWQgQ29tcGFueSBoZWFkcXVhcnRlZCBpbiAyOSBPbGRmaWVsZCBSZCwgQ3VtYnJpYSwgcmVnaXN0ZXJlZCBhdCBDb21wYW5pZXMgSG91c2Ugd2l0aCBjb21wYW55IG51bWJlciAwODc3NzE3MSwgVkFUIG51bWJlcjogMjAzOTE0MjQwXG5cblRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5''@;'; put 'put ''IGFwcGxpY2FibGUgY29weXJpZ2h0IGxhd3MsIGluY2x1ZGluZyBpbnRlcm5hdGlvbmFsIHRyZWF0aWVzLCBhbmQgZHVhbC1saWNlbnNlZCBcdTIwMTMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgeW91ciB1c2UgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMsIG1lYW5pbmcgaW50ZW5kZWQgZm9yIG9y''@;'; put 'put ''IHJlc3VsdGluZyBpbiBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBtb25ldGFyeSBjb21wZW5zYXRpb24sIG9yIG5vdC5cblxuSWYgeW91ciB1c2UgaXMgc3RyaWN0bHkgcGVyc29uYWwgb3Igc29sZWx5IGZvciBldmFsdWF0aW9uIHB1cnBvc2VzLCBtZWFuaW5nIGZvciB0aGUgcHVycG9zZXMg''@;'; put 'put ''b2YgdGVzdGluZyB0aGUgc3VpdGFiaWxpdHksIHBlcmZvcm1hbmNlLCBhbmQgdXNlZnVsbmVzcyBvZiB0aGlzIHNvZnR3YXJlIG91dHNpZGUgdGhlIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQsIHlvdSBhZ3JlZSB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgaW5jbHVkZWQgaW4gdGhlICJsaWNl''@;'; put 'put ''bmNlLW5vbi1jb21tZXJjaWFsLWRhdGFjb250cm9sbGVyLm1kIiBmaWxlIGF2YWlsYWJsZSBoZXJlOiAgaHR0cHM6Ly9naXQuZGF0YWNvbnRyb2xsZXIuaW8vZGMvZGMvc3JjL2JyYW5jaC9tYWluL2xpY2VuY2Utbm9uLWNvbW1lcmNpYWwtZGF0YWNvbnRyb2xsZXIubWRcblxuWW91ciB1c2Ug''@;'; put 'put ''b2YgdGhpcyBzb2Z0d2FyZSBmb3IgY29tbWVyY2lhbCBwdXJwb3NlcyBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBpbmNsdWRlZCBpbiBhbiBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVtZW50LlxuXG5JbiBhbnkgY2FzZSwgeW91IG11c3Qgbm90IG1ha2UgYW55IHN1Y2ggdXNlIG9mIHRoaXMg''@;'; put 'put ''c29mdHdhcmUgYXMgdG8gZGV2ZWxvcCBzb2Z0d2FyZSB3aGljaCBtYXkgYmUgY29uc2lkZXJlZCBjb21wZXRpdGl2ZSB3aXRoIHRoaXMgc29mdHdhcmUuXG5cblVOTEVTUyBFWFBSRVNTTFkgQUdSRUVEIE9USEVSV0lTRSwgNEdMIEFQUFMgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBPTiBBTiAi''@;'; put 'put ''QVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgQU5EIElOIE5PIEVWRU5UIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFNIQUxMIDRHTCBBUFBTIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgRElS''@;'; put 'put ''RUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgQVJJU0lORyBGUk9NIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRISVMgU09GVFdBUkUuXG5cblxuJ31uZ09uSW5pdCgpe2NvbnN0IGE9Tmwuc2V0T3B0''@;'; put 'put ''aW9ucyh7fSk7dGhpcy5ldWxhX21hcmtkb3duPWEucGFyc2UodGhpcy5ldWxhX21hcmtkb3duKX1uZ0FmdGVyVmlld0luaXQoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5tYXJrZG93bkNhcmQmJnRoaXMubWFya2Rvd25DYXJkLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9t''@;'; put 'put ''RXZlbnQoInNjcm9sbCIpKX0pfXRlcm1zQWdyZWVDaGFuZ2UoKXt0aGlzLmFncmVlQ2hlY2tlZCYmKHRoaXMuYWdyZWVCb3hMb2NrZWQ9ITAsdGhpcy5hZ3JlZUNsaWNrZWQ9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9yZWdpc3RlcnVzZXIiLHtTQVNDb250cm9sVGFibGU6''@;'; put 'put ''W3tBQ0NFUFRFRDoieWVzIn1dfSkudGhlbihkPT57ZC5hZGFwdGVyUmVzcG9uc2UucmV0dXJuJiZkLmFkYXB0ZXJSZXNwb25zZS5yZXR1cm5bMF0mJiJTVUNDRVNTIj09PWQuYWRhcHRlclJlc3BvbnNlLnJldHVyblswXS5NU0cmJmxvY2F0aW9uLnJlbG9hZCgpfSkuY2F0Y2goZD0+ZCkuZmlu''@;'; put 'put ''YWxseSgoKT0+e3NldFRpbWVvdXQoKCk9Pnt0aGlzLmFncmVlQm94TG9ja2VkPSExLHRoaXMuYWdyZWVDbGlja2VkPSExLHRoaXMuYWdyZWVDaGVja2VkPSExfSwxZTMpfSkpfW9uQ2FyZEJsb2NrU2Nyb2xsKGEpe2lmKCF0aGlzLmFncmVlQ2xpY2tlZCl7bGV0IGQ9YS50YXJnZXQ7ZCYmKHRo''@;'; put 'put ''aXMuYWdyZWVCb3hMb2NrZWQ9IShkLnNjcm9sbFRvcCtkLm9mZnNldEhlaWdodD49ZC5zY3JvbGxIZWlnaHQtMjApKX19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUoS3MpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPWFyKHt0eXBlOmMsc2Vs''@;'; put 'put ''ZWN0b3JzOltbImFwcC10ZXJtcyJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJlVhKHNUdCw1KSwyJmQpe2xldCBmO2dpKGY9bWkoKSkmJihoLm1hcmtkb3duQ2FyZD1mLmZpcnN0KX19LHN0YW5kYWxvbmU6ITEsZGVjbHM6MTMsdmFyczo2LGNvbnN0czpbWyJtYXJrZG93bkNh''@;'; put 'put ''cmQiLCIiXSxbMSwiY2FyZCJdLFsxLCJjYXJkLWhlYWRlciJdLFsxLCJjYXJkLWJsb2NrIiwzLCJzY3JvbGwiLCJpbm5lckhUTUwiXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJhY2NlcHQtY2hlY2tib3giXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNo''@;'; put 'put ''ZWNrYm94IiwzLCJuZ01vZGVsQ2hhbmdlIiwiY2hhbmdlIiwibmdNb2RlbCIsImRpc2FibGVkIl0sWyJjbHJJbmxpbmUiLCJzbWFsbCIsNCwibmdJZiJdLFsiY2xySW5saW5lIiwic21hbGwiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9T24oKTtkZSgwLCJkaXYi''@;'; put 'put ''LDEpKDEsImRpdiIsMiksUGUoMiwiIEVuZCBVc2VyIExpY2Vuc2UgQWdyZWVtZW50ICIpLGRlKDMsInAiKSxQZSg0LCIgV2VsY29tZSB0byBEYXRhIENvbnRyb2xsZXIgZm9yIFNBUyEgUGxlYXNlIHJldmlldyBhbmQgYWNjZXB0IGFncmVlbWVudCBiZWxvdyBpbiBvcmRlciB0byBwcm9jZWVk''@;'; put 'put ''LiAiKSxoZSgpKCksZGUoNSwiZGl2IiwzLDApLE90KCJzY3JvbGwiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uQ2FyZEJsb2NrU2Nyb2xsKE0pKX0pLGhlKCksZGUoNywiZGl2Iiw0KSg4LCJjbHItY2hlY2tib3gtd3JhcHBlciIsNSkoOSwiaW5wdXQiLDYpLGNpKCJuZ01vZGVs''@;'; put 'put ''Q2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksZmkoaC5hZ3JlZUNoZWNrZWQsTSl8fChoLmFncmVlQ2hlY2tlZD1NKSxDdChNKX0pLE90KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgudGVybXNBZ3JlZUNoYW5nZSgpKX0pLGhlKCksZGUoMTAsImxhYmVsIiks''@;'; put 'put ''UGUoMTEsIkkgaGF2ZSByZWFkIGFuZCBhZ3JlZSB0byB0aGUgdGVybXMgb2YgYWJvdmUuIiksaGUoKSgpLGd0KDEyLGxUdCwxLDAsImNsci1zcGlubmVyIiw3KSxoZSgpKCl9MiZkJiYoZmUoNSksRWUoImlubmVySFRNTCIsaC5ldWxhX21hcmtkb3duLE9nKSxmZSgzKSx4cigiZGlzYWJsZWQi''@;'; put 'put ''LGguYWdyZWVCb3hMb2NrZWQpLGZlKCksbGkoIm5nTW9kZWwiLGguYWdyZWVDaGVja2VkKSxFZSgiZGlzYWJsZWQiLGguYWdyZWVCb3hMb2NrZWQpLGZlKDMpLEVlKCJuZ0lmIixoLmFncmVlQm94TG9ja2VkJiZoLmFncmVlQ2xpY2tlZCkpfSxkZXBlbmRlbmNpZXM6W0NhLHNoLGhsLHJsLENz''@;'; put 'put ''LGhoLHkyLGZoXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHVUdChjLGwpezEmYyYmKGRlKDAsInAiLDI5KSxQZSgxLCIgTGljZW5jZSBrZXkgaXMgaW52YWxpZC4gV2UgY2FuJ3QgcHJvdmlkZSB5b3UgbW9yZSBkZXRhaWxzIGF0IHRoZSBtb21lbnQgIiksaGUo''@;'; put 'put ''KSl9ZnVuY3Rpb24gZFR0KGMsbCl7aWYoMSZjJiZHdCgwLCJwIiwzMCksMiZjKXtjb25zdCBhPU9lKDMpO0VlKCJpbm5lckhUTUwiLGEubGljZW5zZUVycm9yc1thLmtleUVycm9yXSxPZyl9fWZ1bmN0aW9uIGhUdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiKSgxLCJzdHJvbmciKSxQZSgyLCJE''@;'; put 'put ''ZXRhaWxzOiIpLGhlKCksUGUoMyksaGUoKSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKDMpLElyKCIgIixhLmVycm9yRGV0YWlscywiIil9fWZ1bmN0aW9uIGZUdChjLGwpe2lmKDEmYyYmKG9pKDApLGd0KDEsdVR0LDIsMCwicCIsMjcpKDIsZFR0LDEsMSwicCIsMjgpKDMsaFR0LDQsMSwicCIs''@;'; put 'put ''NCksc2koKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKCksRWUoIm5nSWYiLCFhLmtleUVycm9yKSxmZSgpLEVlKCJuZ0lmIixhLmtleUVycm9yKSxmZSgpLEVlKCJuZ0lmIixhLmVycm9yRGV0YWlscyl9fWZ1bmN0aW9uIHBUdChjLGwpezEmYyYmKG9pKDApLGRlKDEsInAiLDI5KSxQZSgyLCIg''@;'; put 'put ''VGhlIHJlZ2lzdGVyZWQgbnVtYmVyIG9mIHVzZXJzIHJlYWNoZWQgdGhlIGxpbWl0IHNwZWNpZmllZCBmb3IgeW91ciBsaWNlbmNlLiBQbGVhc2UgY29udGFjdCAiKSxHdCgzLCJjb250YWN0LWxpbmsiLDMxKSxQZSg0LCIgb3IgeW91ciByZXNlbGxlciB0byBhcnJhbmdlIGFkZGl0aW9uYWwg''@;'; put 'put ''bGljZW5jZXMgZm9yIHRoaXMgcHJvZHVjdC4gIiksaGUoKSxzaSgpKX1mdW5jdGlvbiBnVHQoYyxsKXsxJmMmJihvaSgwKSxkZSgxLCJwIiwyOSksUGUoMiwiIFVwZGF0ZSB0aGUgbGljZW5zZSBrZXkgYnkgdXBsb2FkaW5nIHRoZSBsaWNlbmNlIGZpbGUgb3IgYnkgcGFzdGluZyBhIGxpY2Vu''@;'; put 'put ''c2Uga2V5IGFuZCBhY3RpdmF0aW9uIGtleSBpbiB0aGUgaW5wdXRzIGJlbG93LiAiKSxoZSgpLHNpKCkpfWZ1bmN0aW9uIG1UdChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9T2UoMik7eHIoIm1pc3Nr''@;'; put 'put ''ZXkiLGgubWlzc21hdGNoZWRLZXkmJmgubWlzc21hdGNoZWRLZXk9PT1hKSxmZSgpLFh1KCIgIixhLCIiLGQ9PT0obnVsbD09aC5zeXNzaXRlLnZhbHVlP251bGw6aC5zeXNzaXRlLnZhbHVlLmxlbmd0aCktMT8iIjoiLCIsIiAiKX19ZnVuY3Rpb24gdlR0KGMsbCl7aWYoMSZjJiYoZGUoMCwi''@;'; put 'put ''cCIsMzIpKDEsInN0cm9uZyIpLFBlKDIsIkFsbG93ZWQgdXNlcnM6IiksaGUoKSxQZSgzKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoMyksSXIoIiAiLGEubGljZW5zZUtleURhdGEudXNlcnNfYWxsb3dlZCwiICIpfX1mdW5jdGlvbiB5VHQoYyxsKXsxJmMmJkd0KDAsImNsci1zcGlu''@;'; put 'put ''bmVyIiwzMyl9ZnVuY3Rpb24gYlR0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiksUGUoMSwiIERyb3AgLyBCcm93c2UgbGljZW5jZSBmaWxlICIpLGhlKCkpfWZ1bmN0aW9uIF9UdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpLFBlKDEsIiBTZWxlY3RlZCBmaWxlOiAiKSxkZSgyLCJzdHJvbmci''@;'; put 'put ''KSxQZSgzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgzKTtmZSgzKSxDcihhLmxpY2VuY2VmaWxlLmZpbGVuYW1lKX19ZnVuY3Rpb24gd1R0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IikoMSwic3Ryb25nIiksUGUoMiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoMiksQ3IoYS5s''@;'; put 'put ''aWNlbmNlRmlsZUVycm9yKX19ZnVuY3Rpb24gQ1R0KGMsbCl7aWYoMSZjJiYob2koMCksZ3QoMSxiVHQsMiwwLCJkaXYiLDQpKDIsX1R0LDQsMSwiZGl2Iiw0KSgzLHdUdCwzLDEsImRpdiIsNCksc2koKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKCksRWUoIm5nSWYiLCIiPT09YS5saWNlbmNl''@;'; put 'put ''ZmlsZS5maWxlbmFtZSksZmUoKSxFZSgibmdJZiIsIiIhPT1hLmxpY2VuY2VmaWxlLmZpbGVuYW1lKSxmZSgpLEVlKCJuZ0lmIixhLmxpY2VuY2VGaWxlRXJyb3IpfX1mdW5jdGlvbiBTVHQoYyxsKXsxJmMmJihkZSgwLCJidXR0b24iLDM0KSxQZSgxLCIgQ29udGludWUgd2l0aCBmcmVlIHRp''@;'; put 'put ''ZXIgIiksaGUoKSl9ZnVuY3Rpb24gTVR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2Iiw1KSgxLCJkaXYiLDYpLFBlKDIsIkxpY2VuY2luZyIpLGhlKCksZGUoMywiZGl2Iiw3KSg0LCJkaXYiLDgpLGd0KDUsZlR0LDQsMywibmctY29udGFpbmVyIiw5KSg2LHBUdCw1LDAs''@;'; put 'put ''Im5nLWNvbnRhaW5lciIsOSkoNyxnVHQsMywwLCJuZy1jb250YWluZXIiLDkpLGRlKDgsInAiKSg5LCJzdHJvbmciKSxQZSgxMCwiU1lTU0lURToiKSxoZSgpLGd0KDExLG1UdCwyLDQsInNwYW4iLDEwKSxkZSgxMiwiYSIsMTEpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBo''@;'; put 'put ''PWZhKDE0KSxmPWZhKDE2KSx2PU9lKCk7cmV0dXJuIEN0KHYuY29weVN5c3NpdGUoaCxmLHYuc3lzc2l0ZS52YWx1ZXx8W10pKX0pLEd0KDEzLCJjbHItaWNvbiIsMTIsMCksZGUoMTUsInNwYW4iLDEzLDEpLFBlKDE3LCJDb3B5IHRvIGNsaXBib2FyZCIpLGhlKCkoKSgpLGd0KDE4LHZUdCw0''@;'; put 'put ''LDEsInAiLDE0KSxkZSgxOSwiY2xyLXRhYnMiKSgyMCwiY2xyLXRhYiIpKDIxLCJidXR0b24iLDE1KSxQZSgyMiwiVXBsb2FkIGxpY2VuY2UiKSxoZSgpLGRlKDIzLCJjbHItdGFiLWNvbnRlbnQiKSgyNCwiaW5wdXQiLDE2LDIpLE90KCJjaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChh''@;'; put 'put ''KSxDdChPZSgpLm9uRmlsZUNhcHR1cmUoaCkpfSksaGUoKSxkZSgyNiwiZGl2IiwxNyksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChmYSgyNSkuY2xpY2soKSl9KSgiZmlsZURyb3AiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgpLm9uRmlsZUNhcHR1cmUo''@;'; put 'put ''aCwhMCkpfSksZ3QoMjcseVR0LDEsMCwiY2xyLXNwaW5uZXIiLDE4KSgyOCxDVHQsNCwzLCJuZy1jb250YWluZXIiLDQpLGhlKCkoKSgpLGRlKDI5LCJjbHItdGFiIikoMzAsImJ1dHRvbiIsMTUpLFBlKDMxLCJQYXN0ZSBsaWNlbmNlIiksaGUoKSxkZSgzMiwiY2xyLXRhYi1jb250ZW50Iiko''@;'; put 'put ''MzMsImZvcm0iLDE5KSgzNCwicCIpLFBlKDM1LCJMaWNlbmNlIGtleToiKSxoZSgpLGRlKDM2LCJkaXYiLDIwKSgzNywidGV4dGFyZWEiLDIxKSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpO3JldHVybiBmaShmLmxpY2VuY2VLZXlWYWx1ZSxoKXx8''@;'; put 'put ''KGYubGljZW5jZUtleVZhbHVlPWgpLEN0KGgpfSksT3QoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkudHJpbUtleXMoKSl9KSxoZSgpKCkoKSxkZSgzOCwiZm9ybSIsMjIpKDM5LCJwIiksUGUoNDAsIkFjdGl2YXRpb24ga2V5OiIpLGhlKCksZGUoNDEsImRp''@;'; put 'put ''diIsMjApKDQyLCJ0ZXh0YXJlYSIsMjMpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCk7cmV0dXJuIGZpKGYuYWN0aXZhdGlvbktleVZhbHVlLGgpfHwoZi5hY3RpdmF0aW9uS2V5VmFsdWU9aCksQ3QoaCl9KSxPdCgibW91c2VsZWF2ZSIsZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS50cmltS2V5cygpKX0pLGhlKCkoKSgpKCkoKSgpKCksZGUoNDMsImRpdiIsMjQpKDQ0LCJidXR0b24iLDI1KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuYXBwbHlLZXlzKCkpfSksUGUoNDUsIiBBcHBseSBsaWNl''@;'; put 'put ''bmNlIGtleXMgIiksaGUoKSxndCg0NixTVHQsMiwwLCJidXR0b24iLDI2KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoKTtmZSgzKSxFZSgibmdTd2l0Y2giLGEuYWN0aW9uKSxmZSgyKSxFZSgibmdTd2l0Y2hDYXNlIiwia2V5IiksZmUoKSxFZSgibmdTd2l0Y2hDYXNlIiwibGltaXQi''@;'; put 'put ''KSxmZSgpLEVlKCJuZ1N3aXRjaENhc2UiLCJ1cGRhdGUiKSxmZSg0KSxFZSgibmdGb3JPZiIsYS5zeXNzaXRlLnZhbHVlKSxmZSg3KSxFZSgibmdJZiIsYS5saWNlbnNlS2V5RGF0YSYmYS51c2VyQ291bnRMaW1pdGF0aW9uKSxmZSg5KSxFZSgibmdJZiIsYS5saWNlbmNlRmlsZUxvYWRpbmcp''@;'; put 'put ''LGZlKCksRWUoIm5nSWYiLCFhLmxpY2VuY2VGaWxlTG9hZGluZyksZmUoOSksbGkoIm5nTW9kZWwiLGEubGljZW5jZUtleVZhbHVlKSxmZSg1KSxsaSgibmdNb2RlbCIsYS5hY3RpdmF0aW9uS2V5VmFsdWUpLGZlKDIpLEVlKCJjbHJMb2FkaW5nIixhLmFwcGx5aW5nS2V5cykoImRpc2FibGVk''@;'; put 'put ''IixhLmRpc2FibGVBcHBseUJ1dHRvbiksZmUoMiksRWUoIm5nSWYiLGEuaXNBcHBGcmVlVGllci52YWx1ZSl9fWZ1bmN0aW9uIHhUdChjLGwpezEmYyYmR3QoMCwiYXBwLXRlcm1zIil9dmFyIHF5ZT1mdW5jdGlvbihjKXtyZXR1cm4gYy5rZXk9ImtleSIsYy5yZWdpc3Rlcj0icmVnaXN0ZXIi''@;'; put 'put ''LGMubGltaXQ9ImxpbWl0IixjLnVwZGF0ZT0idXBkYXRlIixjfShxeWV8fHt9KTtjb25zdCBFVHQ9W3twYXRoOiI6YWN0aW9uIixjb21wb25lbnQ6KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMucm91dGU9YSx0aGlzLnJvdXRlcj1kLHRoaXMubGljZW5jZVNlcnZp''@;'; put 'put ''Y2U9aCx0aGlzLnNhc1NlcnZpY2U9Zix0aGlzLmFwcFNlcnZpY2U9dix0aGlzLmFjdGlvbj1udWxsLHRoaXMubGljZW5zZUVycm9ycz17bWlzc2luZzonTGljZW5jZSBrZXkgaXMgbWlzc2luZyAtIHBsZWFzZSBjb250YWN0IDxhIGNsYXNzPSJjb2xvci1ncmVlbiIgaHJlZj0ibWFpbHRvOiBz''@;'; put 'put ''dXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIj5zdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvPC9hPiBhbmQgZW50ZXIgdmFsaWQga2V5cyBiZWxvdy4nLGV4cGlyZWQ6J0xpY2VuY2Uga2V5IGlzIGV4cGlyZWQgLSBwbGVhc2UgY29udGFjdCA8YSBjbGFzcz0iY29sb3ItZ3JlZW4iIGhyZWY9Im1h''@;'; put 'put ''aWx0bzogc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyI+c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbzwvYT4gYW5kIGVudGVyIHZhbGlkIGtleXMgYmVsb3cuJyxpbnZhbGlkOidMaWNlbmNlIGtleSBpcyBpbnZhbGlkIC0gcGxlYXNlIGNvbnRhY3QgPGEgY2xhc3M9ImNvbG9yLWdyZWVuIiBo''@;'; put 'put ''cmVmPSJtYWlsdG86IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iPnN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW88L2E+IGFuZCBlbnRlciB2YWxpZCBrZXlzIGJlbG93LicsbWlzc21hdGNoOidZb3VyIFNZU1NJVEUgKGJlbG93KSBpcyBub3QgZm91bmQgaW4gdGhlIGxpY2VuY2Uga2V5IC0g''@;'; put 'put ''cGxlYXNlIGNvbnRhY3QgPGEgY2xhc3M9ImNvbG9yLWdyZWVuIiBocmVmPSJtYWlsdG86IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iPnN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW88L2E+IGFuZCBlbnRlciB2YWxpZCBrZXlzIGJlbG93Lid9LHRoaXMubGljZW5jZUtleVZhbHVlPSIiLHRo''@;'; put 'put ''aXMuYWN0aXZhdGlvbktleVZhbHVlPSIiLHRoaXMuYXBwbHlpbmdLZXlzPSExLHRoaXMuc3lzc2l0ZT10aGlzLmFwcFNlcnZpY2Uuc3lzc2l0ZSx0aGlzLmN1cnJlbnRMaWNlbmNlS2V5PXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZUtleSx0aGlzLmN1cnJlbnRBY3RpdmF0aW9uS2V5PXRo''@;'; put 'put ''aXMubGljZW5jZVNlcnZpY2UuYWN0aXZhdGlvbktleSx0aGlzLmlzQXBwRnJlZVRpZXI9dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEZyZWVUaWVyLHRoaXMudXNlckNvdW50TGltaXRhdGlvbj10aGlzLmxpY2VuY2VTZXJ2aWNlLnVzZXJDb3VudExpbWl0YXRpb24sdGhpcy5saWNlbnNlS2V5''@;'; put 'put ''RGF0YT1udWxsLHRoaXMuaW5wdXRUeXBlPSJmaWxlIix0aGlzLmxpY2VuY2VGaWxlTG9hZGluZz0hMSx0aGlzLmxpY2VuY2VmaWxlPXtmaWxlbmFtZToiIn19bmdPbkluaXQoKXt0aGlzLmxpY2VuY2VLZXlWYWx1ZT10aGlzLmN1cnJlbnRMaWNlbmNlS2V5fHwiIix0aGlzLmFjdGl2YXRpb25L''@;'; put 'put ''ZXlWYWx1ZT10aGlzLmN1cnJlbnRBY3RpdmF0aW9uS2V5fHwiIix0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZShhPT57dGhpcy5rZXlFcnJvcj1hLmVycm9yLHRoaXMubWlzc21hdGNoZWRLZXk9YS5taXNzbWF0Y2hJZCxhLmRldGFpbHMmJih0aGlzLmVycm9yRGV0YWlscz1hdG9i''@;'; put 'put ''KGEuZGV0YWlscykpfSksdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKGE9PntsZXQgZD1hLmFjdGlvbjtkJiZPYmplY3QudmFsdWVzKHF5ZSkuaW5jbHVkZXMoZCkmJih0aGlzLmFjdGlvbj1kKX0pLHRoaXMubGljZW5zZUtleURhdGE9dGhpcy5saWNlbmNlU2VydmljZS5nZXRMaWNlbnNl''@;'; put 'put ''S2V5RGF0YSgpfXRyaW1LZXlzKCl7dGhpcy5saWNlbmNlS2V5VmFsdWU9dGhpcy5saWNlbmNlS2V5VmFsdWUudHJpbSgpLHRoaXMuYWN0aXZhdGlvbktleVZhbHVlPXRoaXMuYWN0aXZhdGlvbktleVZhbHVlLnRyaW0oKX1jb3B5U3lzc2l0ZShhLGQsaCl7Y29uc3QgZj1oLmpvaW4oIlxuIik7''@;'; put 'put ''bmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoZikudGhlbigoKT0+e2Euc2V0QXR0cmlidXRlKCJzaGFwZSIsImNoZWNrIiksYS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwiaXMtc3VjY2VzcyIpLGQuaW5uZXJUZXh0PSJDb3BpZWQhIixzZXRUaW1lb3V0KCgpPT57YS5zZXRBdHRyaWJ1dGUo''@;'; put 'put ''InNoYXBlIiwiY29weSIpLGEucmVtb3ZlQXR0cmlidXRlKCJjbGFzcyIpLGQuaW5uZXJUZXh0PSJDb3B5IHRvIGNsaXBib2FyZCJ9LDFlMyl9KX1hcHBseUtleXMoKXt0aGlzLmFwcGx5aW5nS2V5cz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgiYWRtaW4vcmVnaXN0ZXJrZXkiLHtrZXl1''@;'; put 'put ''cGxvYWQ6W3tBQ1RJVkFUSU9OX0tFWTp0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZSxMSUNFTkNFX0tFWTp0aGlzLmxpY2VuY2VLZXlWYWx1ZX1dfSkudGhlbihkPT57ZC5hZGFwdGVyUmVzcG9uc2UucmV0dXJuJiZkLmFkYXB0ZXJSZXNwb25zZS5yZXR1cm5bMF0mJiJTVUNDRVNTIj09PWQuYWRh''@;'; put 'put ''cHRlclJlc3BvbnNlLnJldHVyblswXS5NU0cmJnRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi8iKS50aGVuKCgpPT57d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpfSl9KS5maW5hbGx5KCgpPT57dGhpcy5hcHBseWluZ0tleXM9ITF9KX1vbkZpbGVDYXB0dXJlKGEsZD0hMSl7bGV0IGg9ZD9h''@;'; put 'put ''WzBdOmEudGFyZ2V0LmZpbGVzWzBdO2lmKHRoaXMubGljZW5jZWZpbGUuZmlsZW5hbWU9aC5uYW1lLCFoKXJldHVybjt0aGlzLmxpY2VuY2VGaWxlTG9hZGluZz0hMDtjb25zdCBmPW5ldyBGaWxlUmVhZGVyO2Yub25sb2FkPXY9PntpZih0aGlzLmxpY2VuY2VGaWxlRXJyb3I9IkVycm9yIHJl''@;'; put 'put ''YWRpbmcgZmlsZS4iLCF2fHwhdi50YXJnZXR8fDIhPXYudGFyZ2V0LnJlYWR5U3RhdGV8fHYudGFyZ2V0LmVycm9yfHwhdi50YXJnZXQucmVzdWx0KXJldHVybjt0aGlzLmxpY2VuY2VGaWxlTG9hZGluZz0hMSx0aGlzLmxpY2VuY2VGaWxlRXJyb3I9dm9pZCAwO2NvbnN0IE09di50YXJnZXQu''@;'; put 'put ''cmVzdWx0LnRvU3RyaW5nKCkuc3BsaXQoIlxuIik7dGhpcy5hY3RpdmF0aW9uS2V5VmFsdWU9TVsxXSx0aGlzLmxpY2VuY2VLZXlWYWx1ZT1NWzBdfSxmLnJlYWRBc1RleHQoaCl9c3dpdGNoVHlwZShhKXt0aGlzLmlucHV0VHlwZT1hfWdldCBkaXNhYmxlQXBwbHlCdXR0b24oKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5saWNlbmNlS2V5VmFsdWUubGVuZ3RoPDF8fHRoaXMuYWN0aXZhdGlvbktleVZhbHVlLmxlbmd0aDwxfHx0aGlzLmxpY2VuY2VLZXlWYWx1ZT09PXRoaXMuY3VycmVudExpY2VuY2VLZXkmJnRoaXMuYWN0aXZhdGlvbktleVZhbHVlPT09dGhpcy5jdXJyZW50QWN0aXZhdGlvbktleX1z''@;'; put 'put ''dGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZSh0MCkscWUobmwpLHFlKE8xKSxxZShLcykscWUod0YpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPWFyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1saWNlbnNpbmciXV0sc3RhbmRhbG9uZTohMSxk''@;'; put 'put ''ZWNsczoyLHZhcnM6Mixjb25zdHM6W1siY29weUljb24iLCIiXSxbImNvcHlUb29sdGlwIiwiIl0sWyJsaWNlbmNlRmlsZSIsIiJdLFsiY2xhc3MiLCJjYXJkIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiY2FyZCJdLFsxLCJjYXJkLWhlYWRlciJdLFsxLCJjYXJkLWJsb2NrIiwzLCJuZ1N3''@;'; put 'put ''aXRjaCJdLFsxLCJjYXJkLXRleHQiXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzMsIm1pc3NrZXkiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtdG9wLXJpZ2h0IiwzLCJjbGljayJdLFsic2hhcGUiLCJjb3B5Iiwic2l6ZSIsIjE1IiwxLCJj''@;'; put 'put ''dXJzb3ItcG9pbnRlciJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbImNsYXNzIiwibS0wIiw0LCJuZ0lmIl0sWyJjbHJUYWJMaW5rIiwiIl0sWyJ0eXBlIiwiZmlsZSIsImhpZGRlbiIsIiIsMywiY2hhbmdlIl0sWyJhcHBGaWxlRHJvcCIsIiIsMSwiZHJvcC1hcmVhIiwzLCJjbGljayIsImZp''@;'; put 'put ''bGVEcm9wIl0sWyJjbGFzcyIsInNwaW5uZXItc20iLDQsIm5nSWYiXSxbMSwiY2xyLWZvcm0iLCJsaWNlbnNlLWtleS1mb3JtIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsibmFtZSIsImxpY2Vuc2Uta2V5LWFyZWEiLCJwbGFjZWhvbGRlciIsIlBhc3RlIGxpY2VuY2Uga2V5IGhl''@;'; put 'put ''cmUiLDEsImNsci10ZXh0YXJlYSIsMywibmdNb2RlbENoYW5nZSIsIm1vdXNlbGVhdmUiLCJuZ01vZGVsIl0sWzEsImNsci1mb3JtIiwiYWN0aXZhdGlvbi1rZXktZm9ybSJdLFsibmFtZSIsImFjdGl2YXRpb24ta2V5LWFyZWEiLCJwbGFjZWhvbGRlciIsIlBhc3RlIGFjdGl2YXRpb24ga2V5''@;'; put 'put ''IGhlcmUiLDEsImNsci10ZXh0YXJlYSIsMywibmdNb2RlbENoYW5nZSIsIm1vdXNlbGVhdmUiLCJuZ01vZGVsIl0sWzEsImNhcmQtZm9vdGVyIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsImFwcGx5LWtleXMiLDMsImNsaWNrIiwi''@;'; put 'put ''Y2xyTG9hZGluZyIsImRpc2FibGVkIl0sWyJyb3V0ZXJMaW5rIiwiLyIsImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4tbGluayIsNCwibmdJZiJdLFsiY2xhc3MiLCJrZXktZXJyb3IiLDQsIm5nSWYiXSxbImNsYXNzIiwia2V5LWVycm9yIiwzLCJpbm5lckhUTUwiLDQsIm5nSWYiXSxbMSwia2V5''@;'; put 'put ''LWVycm9yIl0sWzEsImtleS1lcnJvciIsMywiaW5uZXJIVE1MIl0sWyJjbGFzc2VzIiwiY29sb3ItZ3JlZW4iXSxbMSwibS0wIl0sWzEsInNwaW5uZXItc20iXSxbInJvdXRlckxpbmsiLCIvIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEm''@;'; put 'put ''ZCYmZ3QoMCxNVHQsNDcsMTMsImRpdiIsMykoMSx4VHQsMSwwLCJhcHAtdGVybXMiLDQpLDImZCYmKEVlKCJuZ0lmIiwicmVnaXN0ZXIiIT09aC5hY3Rpb24pLGZlKCksRWUoIm5nSWYiLCJyZWdpc3RlciI9PT1oLmFjdGlvbikpfSxkZXBlbmRlbmNpZXM6W2hzLENhLENmLGw0LHk5LG5jLGhs''@;'; put 'put ''LG05LHJsLFYzLFVsLGMxLExmLGg2LHA2LEg5LGY2LGQ2LFA5LGZoLFAxLGNUdCxSSF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSxjYW5BY3RpdmF0ZTpbZ2FlXSxjYW5EZWFjdGl2YXRlOltnYWVdfV07bGV0IFRUdD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZh''@;'; put 'put ''Yz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9RWkoe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj15aSh7aW1wb3J0czpbZXUuZm9yQ2hpbGQoRVR0KSxldV19KX19cmV0dXJuIGN9KSgpLEFUdD0oKCk9PntjbGFzcyBje3N0YXRpY3t0''@;'; put 'put ''aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9RWkoe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj15aSh7aW1wb3J0czpbTmEsVWMsdTEsVFR0LHBTXX0pfX1yZXR1cm4gY30pKCk7Y29uc3Qga1R0PSgpPT4oe3N0''@;'; put 'put ''YW5kYWxvbmU6ITB9KSxKeWU9KGMsbCxhKT0+KHthZGRlZFJvdzpjLGRlbGV0ZWRSb3c6bCx1cGRhdGVkUm93OmF9KSxReWU9Yz0+KHsiY2ggdG9vbHRpcCB0b29sdGlwLW1kIHRvb2x0aXAtdG9wLXJpZ2h0IjpjfSk7ZnVuY3Rpb24gRFR0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGQiLDE5KSxQ''@;'; put 'put ''ZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQsZD1PZSgpO0VlKCJyb3V0ZXJMaW5rIiwiL3N0YWdlLyIrZC5qc1BhcmFtc1thXSksZmUoKSxJcigiICIsZC5qc1BhcmFtc1thXSwiICIpfX1mdW5jdGlvbiBJVHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ZCIsNCksUGUoMSks''@;'; put 'put ''aGUoKSksMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0LGQ9T2UoKTtmZSgpLElyKCIgIixkLmpzUGFyYW1zW2FdLCIgIil9fWZ1bmN0aW9uIFJUdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDQpLFBlKDIpLGhlKCksZ3QoMyxEVHQsMiwyLCJ0ZCIsMTcpKDQsSVR0LDIsMSwi''@;'; put 'put ''dGQiLDE4KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMiksQ3IoYSksZmUoKSxFZSgibmdJZiIsYS5pbmNsdWRlcygiVEFCTEVfSUQiKSksZmUoKSxFZSgibmdJZiIsIWEuaW5jbHVkZXMoIlRBQkxFX0lEIikpfX1mdW5jdGlvbiBMVHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0''@;'; put 'put ''ciIpKDEsInRkIiw0KSxQZSgyKSxoZSgpLGRlKDMsInRkIiw0KSxQZSg0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPU9lKDMpO2ZlKDIpLENyKGEpLGZlKDIpLENyKGQuc3VibWl0RGV0YWlsc1thXSl9fWZ1bmN0aW9uIE9UdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10''@;'; put 'put ''YWItY29udGVudCIpKDEsImRpdiIsMjIpKDIsInRhYmxlIiwzKSgzLCJ0aGVhZCIpKDQsInRyIikoNSwidGgiLDQpLFBlKDYsIk5hbWUiKSxoZSgpLGRlKDcsInRoIiw0KSxQZSg4LCJWYWx1ZSIpLGhlKCkoKSgpLGRlKDksInRib2R5IiksZ3QoMTAsTFR0LDUsMiwidHIiLDUpLGhlKCkoKSgp''@;'; put 'put ''KCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgxMCksRWUoIm5nRm9yT2YiLGEuc3VibWl0QXJyKX19ZnVuY3Rpb24gUFR0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsNCksUGUoMiksaGUoKSxkZSgzLCJ0ZCIsNCksUGUoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGlj''@;'; put 'put ''aXQsZD1PZSgyKTtmZSgyKSxDcihhKSxmZSgyKSxDcihkLmpzUGFyYW1zW2FdKX19ZnVuY3Rpb24gRlR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRhYnMiKSgxLCJjbHItdGFiIikoMiwiYnV0dG9uIiwyMCksUGUoMywiU3VibWl0dGVkIFRhYmxlIERldGFpbHMiKSxoZSgpLGd0KDQsT1R0''@;'; put 'put ''LDExLDEsImNsci10YWItY29udGVudCIsMjEpLGhlKCksZGUoNSwiY2xyLXRhYiIpKDYsImJ1dHRvbiIsMjApLFBlKDcsIkJhc2UgVGFibGUgRGV0YWlscyIpLGhlKCksZGUoOCwiY2xyLXRhYi1jb250ZW50IikoOSwiZGl2IiwyMikoMTAsInRhYmxlIiwzKSgxMSwidGhlYWQiKSgxMiwidHIi''@;'; put 'put ''KSgxMywidGgiLDQpLFBlKDE0LCJOYW1lIiksaGUoKSxkZSgxNSwidGgiLDQpLFBlKDE2LCJWYWx1ZSIpLGhlKCkoKSgpLGRlKDE3LCJ0Ym9keSIpLGd0KDE4LFBUdCw1LDIsInRyIiw1KSxoZSgpKCkoKSgpKCkoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoNCksRWUoImNscklmQWN0aXZlIiwh''@;'; put 'put ''MCksZmUoMTQpLEVlKCJuZ0Zvck9mIixhLmtleXNBcnJheSl9fWZ1bmN0aW9uIEhUdChjLGwpezEmYyYmKGRlKDAsInAiLDcyKSxQZSgxLCIgVGhlcmUgYXJlIG5vIGRldGFpbHMgdG8gc2hvdyAiKSxoZSgpKX1mdW5jdGlvbiBOVHQoYyxsKXtpZigxJmMmJihvaSgwKSxkZSgxLCJkaXYiLDcz''@;'; put 'put ''KSgyLCJzcGFuIiksUGUoMywiVGFibGUgSWQ6IiksaGUoKSxkZSg0LCJzdHJvbmciLDc0KSxQZSg1KSxoZSgpKCksZGUoNiwiZGl2IikoNywic3BhbiIpLFBlKDgsIlN1Ym1pdHRlcjoiKSxoZSgpLGRlKDksInNwYW4iLDc1KSxQZSgxMCksaGUoKSgpLGRlKDExLCJkaXYiKSgxMiwic3BhbiIp''@;'; put 'put ''LFBlKDEzLCJTdWJtaXR0ZWQgb246IiksaGUoKSxkZSgxNCwic3BhbiIsNzUpLFBlKDE1KSxoZSgpKCksZGUoMTYsImRpdiIpKDE3LCJzcGFuIiksUGUoMTgsIlN1Ym1pdHRlZCBSZWFzb246IiksaGUoKSxkZSgxOSwic3BhbiIsNzUpLFBlKDIwKSxoZSgpKCksc2koKSksMiZjKXtjb25zdCBh''@;'; put 'put ''PU9lKDUpO2ZlKDQpLEVlKCJyb3V0ZXJMaW5rIiwiL3N0YWdlLyIrKG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuVEFCTEVfSUQpKSxmZSgpLElyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlRBQkxFX0lELCIgIiksZmUoNSks''@;'; put 'put ''SXIoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuU1VCTUlUVEVEX0JZX05NLCIgIiksZmUoNSksSXIoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuU1VCTUlUVEVEX09OX0RUVE0sIiAiKSxmZSg1KSxJcigiICIsbnVsbD09''@;'; put 'put ''YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5TVUJNSVRURURfUkVBU09OX1RYVCwiICIpfX1mdW5jdGlvbiBWVHQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw3NiksR3QoMSwiY2xyLWljb24iLDc3KSxQZSgyLCIgT25seSB0aGUgZmlyc3QgMTAwIGluc2VydHMsIHVwZGF0ZXMg''@;'; put 'put ''b3IgZGVsZXRlcyBhcmUgZGlzcGxheWVkICIpLGhlKCkpfWZ1bmN0aW9uIEJUdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsNDkpKDEsImRpdiIsNTApKDIsImRpdiIsNTEpLGd0KDMsSFR0LDIsMCwicCIsNDUpKDQsTlR0LDIxLDUsIm5nLWNvbnRhaW5lciIsOCksaGUo''@;'; put 'put ''KSxkZSg1LCJkaXYiLDUyKSg2LCJkaXYiLDUzKSg3LCJkaXYiLDU0KSg4LCJkaXYiLDU1KSg5LCJidXR0b24iLDU2KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSg0KTtyZXR1cm4gQ3QoaC5nb1RvQmFzZShudWxsPT1oLmpzUGFyYW1zP251bGw6aC5qc1BhcmFtcy5U''@;'; put 'put ''QUJMRV9OTSkpfSksUGUoMTAsIiBWaWV3IGJhc2UgdGFibGUgIiksaGUoKSxkZSgxMSwiYnV0dG9uIiw1NyksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoNCk7cmV0dXJuIEN0KGguZ2V0VGFibGUoaC50YWJsZUlkKSl9KSxQZSgxMiwiIFZpZXcgc3RhZ2VkIGRhdGEg''@;'; put 'put ''IiksaGUoKSxkZSgxMywiYnV0dG9uIiw1OCksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoNCk7cmV0dXJuIEN0KGguZ29CYWNrKG51bGw9PWguanNQYXJhbXM/bnVsbDpoLmpzUGFyYW1zLlRBQkxFX05NKSl9KSxQZSgxNCwiIEVkaXQgYmFzZSB0YWJsZSAiKSxoZSgp''@;'; put 'put ''KCkoKSgpLGRlKDE1LCJkaXYiLDU5KSgxNiwiYnV0dG9uIiw2MCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSg0KS5hcHByb3ZlVGFibGUoKSl9KSxQZSgxNywiIEFDQ0VQVCAiKSxoZSgpLGRlKDE4LCJidXR0b24iLDYxKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHd0KGEpLEN0KE9lKDQpLnJlamVjdE9wZW49ITApfSksUGUoMTksIiBSRUpFQ1QgIiksaGUoKSxkZSgyMCwiY2xyLXRvZ2dsZS1jb250YWluZXIiLDYyKSgyMSwiY2xyLXRvZ2dsZS13cmFwcGVyIikoMjIsImlucHV0Iiw2MyksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgp''@;'; put 'put ''e3d0KGEpO2NvbnN0IGY9T2UoNCk7cmV0dXJuIGZpKGYuZm9ybWF0dGVkVmFsdWVzLGgpfHwoZi5mb3JtYXR0ZWRWYWx1ZXM9aCksQ3QoaCl9KSxPdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSg0KS5mb3JtYXR0aW5nQ2hhbmdlZCgpKX0pLGhlKCksZGUoMjMsImxh''@;'; put 'put ''YmVsIiw2NCksUGUoMjQpLGhlKCkoKSgpKCksZGUoMjUsImRpdiIsNjUpLGd0KDI2LFZUdCwzLDAsInNwYW4iLDY2KSxkZSgyNywiZGl2IiwzMSkoMjgsImRpdiIsNjcpKDI5LCJzcGFuIiw2OCksUGUoMzAsIiBDaGFuZ2VkIFJvd3MgIiksZGUoMzEsInNwYW4iLDY5KSxQZSgzMiksaGUoKSgp''@;'; put 'put ''LGRlKDMzLCJzcGFuIiw3MCksUGUoMzQsIiBBZGRlZCBSb3dzICIpLGRlKDM1LCJzcGFuIiw2OSksUGUoMzYpLGhlKCkoKSxkZSgzNywic3BhbiIsNzEpLFBlKDM4LCIgRGVsZXRlZCBSb3dzICIpLGRlKDM5LCJzcGFuIiw2OSksUGUoNDApLGhlKCkoKSgpKCkoKSgpKCkoKX1pZigyJmMpe2Nv''@;'; put 'put ''bnN0IGE9T2UoNCk7ZmUoMyksRWUoIm5nSWYiLCFhLnRhYmxlRGV0YWlscyksZmUoKSxFZSgibmdJZiIsYS50YWJsZURldGFpbHMpLGZlKDEyKSxFZSgiY2xyTG9hZGluZyIsYS5hY2NlcHRMb2FkaW5nKSgiZGlzYWJsZWQiLCFhLmxvYWRpbmdUYWJsZXx8Ik5PIj09PShudWxsPT1hLnBhcmFt''@;'; put 'put ''cz9udWxsOmEucGFyYW1zLklTQVBQUk9WRVIpfHxhLm5vQ2hhbmdlcyksZmUoMiksRWUoImRpc2FibGVkIiwhYS5sb2FkaW5nVGFibGV8fCJOTyI9PT0obnVsbD09YS5wYXJhbXM/bnVsbDphLnBhcmFtcy5JU0FQUFJPVkVSKXx8YS5ub0NoYW5nZXMpLGZlKDQpLGxpKCJuZ01vZGVsIixhLmZv''@;'; put 'put ''cm1hdHRlZFZhbHVlcyksZmUoMiksQ3IoYS5mb3JtYXR0ZWRWYWx1ZXM/IkZvcm1hdHRlZCI6IlVuZm9ybWF0dGVkIiksZmUoMiksRWUoIm5nSWYiLGEuZGlmZnNMaW1pdCksZmUoNiksQ3IoYS5sZW5zLnVwZGF0ZWQpLGZlKDQpLENyKGEubGVucy5uZXcpLGZlKDQpLENyKGEubGVucy5kZWxl''@;'; put 'put ''dGVkKX19ZnVuY3Rpb24galR0KGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw3NSkoMSwicCIsODEpLFBlKDIsIkxvYWRpbmcgdGFibGUiKSxoZSgpKCkpfWZ1bmN0aW9uIHpUdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNzgpKDEsInNwYW4iLDc5KSxQZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgp''@;'; put 'put ''LGd0KDMsalR0LDMsMCwiZGl2Iiw4MCksaGUoKSksMiZjKXtjb25zdCBhPU9lKDQpO2ZlKDMpLEVlKCJuZ0lmIiwhYS5sb2FkaW5nVGFibGUpfX1mdW5jdGlvbiBVVHQoYyxsKXsxJmMmJihkZSgwLCJwIiw3MiksUGUoMSwiIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIHNob3cgIiksaGUoKSl9''@;'; put 'put ''ZnVuY3Rpb24gWlR0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGgiLDQpLFBlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLENyKGEpfX1mdW5jdGlvbiBXVHQoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiw4NiksUGUoMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKCkuaW5k''@;'; put 'put ''ZXgsZD1PZSgyKS5pbmRleCxoPU9lKDQpO2ZlKCksSXIoIk9yaWdpbmFsIHZhbHVlIGlzOiAiLGguYXJyT2ZDaGFuZ2VzW2RdW2FdLCIiKX19ZnVuY3Rpb24gWVR0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGQiLDg0KSxQZSgxKSxndCgyLFdUdCwyLDEsInNwYW4iLDg1KSxoZSgpKSwyJmMpe2Nv''@;'; put 'put ''bnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9T2UoMikuaW5kZXgsZj1PZSg0KTtFZSgibmdDbGFzcyIsYTQoMyxReWUsMT09Zi5hcnJDaGFuZ2VkW2hdW2RdJiYidXBkYXRlZCI9PWYuY2hBcnJbaF0pKSxmZSgpLElyKCIgIixmLmRpZmZUYWJsZS5kYXRhW2hdW2FdLCIgIiksZmUoKSxF''@;'; put 'put ''ZSgibmdJZiIsMT09Zi5hcnJDaGFuZ2VkW2hdW2RdJiYidXBkYXRlZCI9PWYuY2hBcnJbaF0pfX1mdW5jdGlvbiBHVHQoYyxsKXtpZigxJmMmJihvaSgwKSxndCgxLFlUdCwzLDUsInRkIiw4Myksc2koKSksMiZjKXtjb25zdCBhPU9lKCkuaW5kZXgsZD1PZSg0KTtmZSgpLEVlKCJuZ0Zvck9m''@;'; put 'put ''IixkLnJvd0tleXNbYV0pfX1mdW5jdGlvbiAkVHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ZCIsNCksUGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9T2UoMikuaW5kZXgsaD1PZSg0KTtmZSgpLElyKCIgIixoLmRpZmZUYWJsZS5kYXRhW2RdW2FdLCIgIil9fWZ1bmN0aW9u''@;'; put 'put ''IEtUdChjLGwpe2lmKDEmYyYmKG9pKDApLGd0KDEsJFR0LDIsMSwidGQiLDQ3KSxzaSgpKSwyJmMpe2NvbnN0IGE9T2UoKS5pbmRleCxkPU9lKDQpO2ZlKCksRWUoIm5nRm9yT2YiLGQucm93S2V5c1thXSl9fWZ1bmN0aW9uIFhUdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIiw4MiksZ3QoMSxH''@;'; put 'put ''VHQsMiwxLCJuZy1jb250YWluZXIiLDgpKDIsS1R0LDIsMSwibmctY29udGFpbmVyIiw4KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC5pbmRleCxkPU9lKDQpO0VlKCJuZ0NsYXNzIixrRSgzLEp5ZSwiYWRkZWQiPT1kLmNoQXJyW2FdLCJkZWxldGVkIj09ZC5jaEFyclthXSwidXBkYXRlZCI9PWQu''@;'; put 'put ''Y2hBcnJbYV0pKSxmZSgpLEVlKCJuZ0lmIiwidXBkYXRlZCI9PT1kLmNoQXJyW2FdKSxmZSgpLEVlKCJuZ0lmIiwidXBkYXRlZCIhPT1kLmNoQXJyW2FdKX19ZnVuY3Rpb24gcVR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2IiwyOSkoMSwiZGl2IiwzMCkoMiwiZGl2Iiwz''@;'; put 'put ''MSkoMywiZGl2IiwzMikoNCwic3BhbiIsMzMpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMykuZ29Ub0FwcHJvdmFsc0xpc3QoKSl9KSxHdCg1LCJjbHItaWNvbiIsMzQpLFBlKDYsIkJhY2sgdG8gYXBwcm92YWxzIGxpc3QgIiksaGUoKSgpLGRlKDcsImRpdiIs''@;'; put 'put ''MzUpKDgsImgzIiwzNiksUGUoOSksaGUoKSgpLGRlKDEwLCJkaXYiLDM3KSgxMSwiYSIsMzgpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMykuZ2V0RGV0YWlscygpKX0pLEd0KDEyLCJjbHItaWNvbiIsMzkpLGhlKCkoKSgpLGRlKDEzLCJwIiw0MCksUGUoMTQp''@;'; put 'put ''LGhlKCkoKSxkZSgxNSwiZGl2Iiw0MSksZ3QoMTYsQlR0LDQxLDExLCJkaXYiLDQyKSxoZSgpLGd0KDE3LHpUdCw0LDEsImRpdiIsNDMpLGRlKDE4LCJkaXYiLDQ0KSxndCgxOSxVVHQsMiwwLCJwIiw0NSksZGUoMjAsInRhYmxlIiwzKSgyMSwidGhlYWQiKSgyMiwidHIiLDQ2KSxndCgyMyxa''@;'; put 'put ''VHQsMiwxLCJ0aCIsNDcpLGhlKCkoKSxkZSgyNCwidGJvZHkiKSxndCgyNSxYVHQsMyw3LCJ0ciIsNDgpLGhlKCkoKSgpKCl9aWYoMiZjKXtjb25zdCBhPU9lKDMpO2ZlKDkpLElyKCIgIixudWxsPT1hLmpzUGFyYW1zP251bGw6YS5qc1BhcmFtcy5UQUJMRV9OTSwiICIpLGZlKDUpLElyKCIg''@;'; put 'put ''IixudWxsPT1hLmpzUGFyYW1zP251bGw6YS5qc1BhcmFtcy5UQUJMRV9ERVNDLCIgIiksZmUoMiksRWUoIm5nSWYiLGEubG9hZGVkKSxmZSgpLEVlKCJuZ0lmIiwhYS5sb2FkaW5nVGFibGUpLGZlKDIpLEVlKCJuZ0lmIixhLmxvYWRpbmdUYWJsZSYmYS5ub0NoYW5nZXMpLGZlKDQpLEVlKCJu''@;'; put 'put ''Z0Zvck9mIixhLnJvd0hlYWRlciksZmUoMiksRWUoIm5nRm9yT2YiLGEucm93S2V5cyl9fWZ1bmN0aW9uIEpUdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMjcpLGd0KDEscVR0LDI2LDcsImRpdiIsMjgpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLEVlKCJuZ0lmIixhLmxvYWRl''@;'; put 'put ''ZCl9fWZ1bmN0aW9uIFFUdChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDc5KSxQZSgxLCIgTG9hZGluZy4uLiAiKSxoZSgpKX1mdW5jdGlvbiBlQXQoYyxsKXsxJmMmJihkZSgwLCJkaXYiKSgxLCJoMyIpLFBlKDIsIkxvYWRpbmcgcHJldmlldyIpLGhlKCkoKSl9ZnVuY3Rpb24gdEF0KGMsbCl7''@;'; put 'put ''aWYoMSZjJiYoZGUoMCwiZGl2Iiw4NyksZ3QoMSxRVHQsMiwwLCJzcGFuIiw4OCkoMixlQXQsMywwLCJkaXYiLDgpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLEVlKCJuZ0lmIiwhYS5sb2FkZWQpLGZlKCksRWUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIG5BdChjLGwpe2lm''@;'; put 'put ''KDEmYyYmKGRlKDAsImRpdiIsMjMpLGd0KDEsSlR0LDIsMSwiZGl2IiwyNCksZGUoMiwiZGl2IiwyNSksZ3QoMyx0QXQsMywyLCJkaXYiLDI2KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCksRWUoIm5nSWYiLGEubG9hZGVkKSxmZSgyKSxFZSgibmdJZiIsIWEubG9hZGVkKX19ZnVu''@;'; put 'put ''Y3Rpb24gckF0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsNzYpLEd0KDEsImNsci1pY29uIiw3NyksUGUoMiwiIE9ubHkgdGhlIGZpcnN0IDEwMCBpbnNlcnRzLCB1cGRhdGVzIG9yIGRlbGV0ZXMgYXJlIGRpc3BsYXllZCAiKSxoZSgpKX1mdW5jdGlvbiBpQXQoYyxsKXsxJmMmJkd0KDAsImRp''@;'; put 'put ''diIsNDkpfWZ1bmN0aW9uIGFBdChjLGwpezEmYyYmKGRlKDAsImRpdiIsNzUpKDEsInAiLDgxKSxQZSgyLCJMb2FkaW5nIHRhYmxlIiksaGUoKSgpKX1mdW5jdGlvbiBvQXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDEwNCkoMSwic3BhbiIsNzkpLFBlKDIsIiBMb2FkaW5nLi4uICIpLGhl''@;'; put 'put ''KCksZ3QoMyxhQXQsMywwLCJkaXYiLDgwKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoNCk7ZmUoMyksRWUoIm5nSWYiLCFhLmxvYWRpbmdUYWJsZSl9fWZ1bmN0aW9uIHNBdChjLGwpe2lmKDEmYyYmKGRlKDAsInRoIiw0KSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUo''@;'; put 'put ''KSxDcihhKX19ZnVuY3Rpb24gbEF0KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIsODYpLFBlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpLmluZGV4LGQ9T2UoMikuaW5kZXgsaD1PZSg0KTtmZSgpLElyKCJPcmlnaW5hbCB2YWx1ZSBpczogIixoLmFyck9mQ2hhbmdlc1tkXVthXSwiIil9''@;'; put 'put ''fWZ1bmN0aW9uIGNBdChjLGwpe2lmKDEmYyYmKGRlKDAsInRkIiw4NCksUGUoMSksZ3QoMixsQXQsMiwxLCJzcGFuIiw4NSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleCxoPU9lKDIpLmluZGV4LGY9T2UoNCk7RWUoIm5nQ2xhc3MiLGE0KDMsUXllLDE9PWYuYXJy''@;'; put 'put ''Q2hhbmdlZFtoXVtkXSYmInVwZGF0ZWQiPT1mLmNoQXJyW2hdKSksZmUoKSxJcigiICIsZi5kaWZmVGFibGUuZGF0YVtoXVthXSwiICIpLGZlKCksRWUoIm5nSWYiLDE9PWYuYXJyQ2hhbmdlZFtoXVtkXSYmInVwZGF0ZWQiPT1mLmNoQXJyW2hdKX19ZnVuY3Rpb24gdUF0KGMsbCl7aWYoMSZj''@;'; put 'put ''JiYob2koMCksZ3QoMSxjQXQsMyw1LCJ0ZCIsODMpLHNpKCkpLDImYyl7Y29uc3QgYT1PZSgpLmluZGV4LGQ9T2UoNCk7ZmUoKSxFZSgibmdGb3JPZiIsZC5yb3dLZXlzW2FdKX19ZnVuY3Rpb24gZEF0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGQiLDQpLFBlKDEpLGhlKCkpLDImYyl7Y29uc3Qg''@;'; put 'put ''YT1sLiRpbXBsaWNpdCxkPU9lKDIpLmluZGV4LGg9T2UoNCk7ZmUoKSxJcigiICIsaC5kaWZmVGFibGUuZGF0YVtkXVthXSwiICIpfX1mdW5jdGlvbiBoQXQoYyxsKXtpZigxJmMmJihvaSgwKSxndCgxLGRBdCwyLDEsInRkIiw0Nyksc2koKSksMiZjKXtjb25zdCBhPU9lKCkuaW5kZXgsZD1P''@;'; put 'put ''ZSg0KTtmZSgpLEVlKCJuZ0Zvck9mIixkLnJvd0tleXNbYV0pfX1mdW5jdGlvbiBmQXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIsODIpLGd0KDEsdUF0LDIsMSwibmctY29udGFpbmVyIiw4KSgyLGhBdCwyLDEsIm5nLWNvbnRhaW5lciIsOCksaGUoKSksMiZjKXtjb25zdCBhPWwuaW5kZXgs''@;'; put 'put ''ZD1PZSg0KTtFZSgibmdDbGFzcyIsa0UoMyxKeWUsImFkZGVkIj09ZC5jaEFyclthXSwiZGVsZXRlZCI9PWQuY2hBcnJbYV0sInVwZGF0ZWQiPT1kLmNoQXJyW2FdKSksZmUoKSxFZSgibmdJZiIsInVwZGF0ZWQiPT09ZC5jaEFyclthXSksZmUoKSxFZSgibmdJZiIsInVwZGF0ZWQiIT09ZC5j''@;'; put 'put ''aEFyclthXSl9fWZ1bmN0aW9uIHBBdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsOTMpKDEsImRpdiIsOTQpKDIsImRpdiIsMzEpKDMsImRpdiIsMzIpKDQsInNwYW4iLDk1KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDMpLmdvVG9TdWJt''@;'; put 'put ''aXRMaXN0KCkpfSksR3QoNSwiY2RzLWljb24iLDk2KSxQZSg2LCJCYWNrIHRvIHN1Ym1pdHRlZCBsaXN0ICIpLGhlKCkoKSxkZSg3LCJkaXYiLDk3KSg4LCJoMyIsOTgpLFBlKDkpLGhlKCkoKSxkZSgxMCwiZGl2IiwzNykoMTEsImEiLDM4KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHd0KGEpLEN0KE9lKDMpLnRhYmxlRmxhZz0hMCl9KSxHdCgxMiwiY2xyLWljb24iLDM5KSxoZSgpKCkoKSxkZSgxMywicCIsOTkpLFBlKDE0KSxoZSgpKCksZGUoMTUsImRpdiIsNTApKDE2LCJkaXYiLDUxKSgxNywiZGl2Iiw3MykoMTgsInNwYW4iKSxQZSgxOSwiVGFibGUgSWQ6IiksaGUo''@;'; put 'put ''KSxkZSgyMCwic3Ryb25nIiw3NCkoMjEsInNwYW4iKSxQZSgyMiksaGUoKSgpKCksZGUoMjMsImRpdiIpKDI0LCJzcGFuIiksUGUoMjUsIlN1Ym1pdHRlZCBvbjoiKSxoZSgpLGRlKDI2LCJzcGFuIiw3NSksUGUoMjcpLGhlKCkoKSxkZSgyOCwiZGl2IikoMjksInNwYW4iKSxQZSgzMCwiU3Vi''@;'; put 'put ''bWl0IE1lc3NhZ2U6IiksaGUoKSxkZSgzMSwic3BhbiIpLFBlKDMyKSxoZSgpKCkoKSxkZSgzMywiZGl2Iiw1MikoMzQsImRpdiIsNTMpKDM1LCJkaXYiLDU0KSgzNiwiZGl2Iiw1NSkoMzcsImJ1dHRvbiIsNTYpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDMpO3Jl''@;'; put 'put ''dHVybiBDdChoLmdvVG9CYXNlKGguc3ViT2JqLmJhc2UpKX0pLFBlKDM4LCIgVmlldyBiYXNlIHRhYmxlICIpLGhlKCksZGUoMzksImJ1dHRvbiIsNTcpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDMpO3JldHVybiBDdChoLmdldFRhYmxlKGguc3ViT2JqLnRhYmxl''@;'; put 'put ''SWQpKX0pLFBlKDQwLCIgVmlldyBzdGFnZWQgZGF0YSAiKSxoZSgpLGRlKDQxLCJidXR0b24iLDU4KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgzKTtyZXR1cm4gQ3QoaC5nb0JhY2soaC5zdWJPYmouYmFzZSkpfSksUGUoNDIsIiBFZGl0IGJhc2UgdGFibGUgIiks''@;'; put 'put ''aGUoKSgpKCkoKSxkZSg0MywiZGl2Iiw2NSksZ3QoNDQsckF0LDMsMCwic3BhbiIsNjYpLGRlKDQ1LCJkaXYiLDMxKSg0NiwiZGl2Iiw2NykoNDcsInNwYW4iLDY4KSxQZSg0OCwiIENoYW5nZWQgUm93cyAiKSxkZSg0OSwic3BhbiIsNjkpLFBlKDUwKSxoZSgpKCksZGUoNTEsInNwYW4iLDcw''@;'; put 'put ''KSxQZSg1MiwiIEFkZGVkIFJvd3MgIiksZGUoNTMsInNwYW4iLDY5KSxQZSg1NCksaGUoKSgpLGRlKDU1LCJzcGFuIiw3MSksUGUoNTYsIiBEZWxldGVkIFJvd3MgIiksZGUoNTcsInNwYW4iLDY5KSxQZSg1OCksaGUoKSgpKCkoKSgpLGRlKDU5LCJkaXYiLDUzKSg2MCwiY2xyLXRvZ2dsZS1j''@;'; put 'put ''b250YWluZXIiLDEwMCkoNjEsImNsci10b2dnbGUtd3JhcHBlciIpKDYyLCJpbnB1dCIsNjMpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDMpO3JldHVybiBmaShmLmZvcm1hdHRlZFZhbHVlcyxoKXx8KGYuZm9ybWF0dGVkVmFsdWVzPWgpLEN0KGgp''@;'; put 'put ''fSksT3QoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMykuZm9ybWF0dGluZ0NoYW5nZWQoKSl9KSxoZSgpLGRlKDYzLCJsYWJlbCIpLFBlKDY0KSxoZSgpKCkoKSgpKCkoKSxkZSg2NSwiZGl2IiwxMDEpLGd0KDY2LGlBdCwxLDAsImRpdiIsNDIpLGhlKCksZ3QoNjcs''@;'; put 'put ''b0F0LDQsMSwiZGl2IiwxMDIpLGRlKDY4LCJkaXYiLDEwMykoNjksInRhYmxlIiwzKSg3MCwidGhlYWQiKSg3MSwidHIiLDQ2KSxndCg3MixzQXQsMiwxLCJ0aCIsNDcpLGhlKCkoKSxkZSg3MywidGJvZHkiKSxndCg3NCxmQXQsMyw3LCJ0ciIsNDgpLGhlKCkoKSgpKCl9aWYoMiZjKXtjb25z''@;'; put 'put ''dCBhPU9lKDMpO2ZlKDkpLElyKCIgIixhLnN1Yk9iai5iYXNlLCIgIiksZmUoNSksSXIoIiAiLGEudGFibGVEZXNjcmlwdGlvbiwiICIpLGZlKDYpLEVlKCJyb3V0ZXJMaW5rIiwiL3N0YWdlLyIrYS5zdWJPYmoudGFibGVJZCksZmUoMiksSXIoIiAiLGEuc3ViT2JqLnRhYmxlSWQsIiIpLGZl''@;'; put 'put ''KDUpLElyKCIgIixhLnN1Yk9iai5zdWJtaXR0ZWQsIiAiKSxmZSg1KSxJcigiICIsYS5zdWJPYmouc3VibWl0UmVhc29uLCIgIiksZmUoMTIpLEVlKCJuZ0lmIixhLmRpZmZzTGltaXQpLGZlKDYpLENyKGEubGVucy51cGRhdGVkKSxmZSg0KSxDcihhLmxlbnMubmV3KSxmZSg0KSxDcihhLmxl''@;'; put 'put ''bnMuZGVsZXRlZCksZmUoNCksbGkoIm5nTW9kZWwiLGEuZm9ybWF0dGVkVmFsdWVzKSxmZSgyKSxDcihhLmZvcm1hdHRlZFZhbHVlcz8iRm9ybWF0dGVkIjoiVW5mb3JtYXR0ZWQiKSxmZSgyKSxFZSgibmdJZiIsYS5sb2FkZWQpLGZlKCksRWUoIm5nSWYiLCFhLmxvYWRpbmdUYWJsZSksZmUo''@;'; put 'put ''NSksRWUoIm5nRm9yT2YiLGEucm93SGVhZGVyKSxmZSgyKSxFZSgibmdGb3JPZiIsYS5yb3dLZXlzKX19ZnVuY3Rpb24gZ0F0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw5MSksZ3QoMSxwQXQsNzUsMTYsImRpdiIsOTIpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLEVlKCJuZ0lm''@;'; put 'put ''IixhLmxvYWRlZCl9fWZ1bmN0aW9uIG1BdChjLGwpezEmYyYmKGRlKDAsImRpdiIpKDEsImgzIiksUGUoMiwiTG9hZGluZyBzdWJtaXR0ZWQgdGFibGUiKSxoZSgpKCkpfWZ1bmN0aW9uIHZBdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTA1KSgxLCJkaXYiLDEwNikoMiwic3BhbiIsNzkp''@;'; put 'put ''LFBlKDMsIiBMb2FkaW5nLi4uICIpLGhlKCksZ3QoNCxtQXQsMywwLCJkaXYiLDgpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDQpLEVlKCJuZ0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiB5QXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSxndCgxLGdBdCwyLDEsImRpdiIsODkp''@;'; put 'put ''KDIsdkF0LDUsMSwiZGl2Iiw5MCksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSxFZSgibmdJZiIsYS5sb2FkZWQpLGZlKCksRWUoIm5nSWYiLCFhLmxvYWRlZCl9fWxldCBlYmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlPWEs''@;'; put 'put ''dGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5ldmVudFNlcnZpY2U9aCx0aGlzLnJvdXRlcj1mLHRoaXMucm91dGU9dix0aGlzLmRldGFpbHNPcGVuPSExLHRoaXMucmVqZWN0T3Blbj0hMSx0aGlzLmxlbnM9e25ldzowLHVwZGF0ZWQ6MCxkZWxldGVkOjB9LHRoaXMubG9hZGVkPSExLHRoaXMubG9h''@;'; put 'put ''ZGluZ1RhYmxlPSExLHRoaXMuc3VibWl0UmVhc29uPSIiLHRoaXMuaW5zdGFuY2U9ImhvdEluc3RhbmNlIix0aGlzLmFjY2VwdExvYWRpbmc9ITEsdGhpcy5yZWplY3RMb2FkaW5nPSExLHRoaXMuc3VibWl0dGVkPSExLHRoaXMudGFibGVGbGFnPSExLHRoaXMucm93S2V5cz1bXSx0aGlzLmNo''@;'; put 'put ''QXJyPVtdLHRoaXMuc2Vjb25kT3Blbj0hMSx0aGlzLmZvcm1hdHRlZFZhbHVlcz0hMCx0aGlzLmNoYW5nZXNBcnI9W10sdGhpcy5kaWZmVGFibGU9e2RhdGE6W119LHRoaXMuZGlmZnNMaW1pdD0hMSx0aGlzLnJlY29yZHNMaW1pdD0xMDAsdGhpcy5yZWZyZXNoU3RhcnR1cHNlcnZpY2VBZnRl''@;'; put 'put ''ckFwcHJvdmU9ITF9Z2V0IG5vQ2hhbmdlcygpe3JldHVybiAwPT09dGhpcy5sZW5zLm5ldyYmMD09PXRoaXMubGVucy51cGRhdGVkJiYwPT09dGhpcy5sZW5zLmRlbGV0ZWR9Z29Ub0Jhc2UoYSl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9kYXRhLyIrYSl9Z29Ub0FwcHJvdmFs''@;'; put 'put ''c0xpc3QoKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9yZXZpZXcvYXBwcm92ZSIpfWdldFRhYmxlKGEpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrYSl9Z29CYWNrKGEpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK2EpfWdvVG9WaWV3ZXIoKXt0''@;'; put 'put ''aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEiKX1zaG93RGV0YWlsc1NlbGVjdChhKXthLnByZXZlbnREZWZhdWx0KCksdGhpcy50YWJsZUZsYWc9IXRoaXMudGFibGVGbGFnfWdldERldGFpbHMoKXt0aGlzLmRldGFpbHNPcGVuPSEwfW9uSG90U2VsZWN0aW9uKGEpe3RoaXMu''@;'; put 'put ''aG90U2VsZWN0aW9uPWEuc2xpY2UoMCw0KX1vbkhvdERlc2VsZWN0KCl7c2V0VGltZW91dCgoKT0+e3RoaXMuaG90U2VsZWN0aW9uPW51bGx9LDEwMCl9cmVqZWN0aW5nKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5yZWplY3RMb2FkaW5nPSEwLGEuc3VibWl0UmVhc29u''@;'; put 'put ''PWEuc3VibWl0UmVhc29uLnJlcGxhY2UoL1xuL2csIi4gIik7bGV0IGQ9e1NUUF9BQ1RJT046IlJFSkVDVF9UQUJMRSIsVEFCTEU6YS50YWJsZUlkLFNUUF9SRUFTT046YS5zdWJtaXRSZWFzb259O3lpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLnJlamVjdGluZyhkLCJCcm93c2VyUGFyYW1zIiwi''@;'; put 'put ''YXBwcm92ZXJzL3JlamVjdGlvbiIpLnRoZW4oaD0+e2Eucm91dGUubmF2aWdhdGVCeVVybCgiL3Jldmlldy9oaXN0b3J5Iil9KS5jYXRjaChoPT57YS5hY2NlcHRMb2FkaW5nPSExLGEucmVqZWN0TG9hZGluZz0hMX0pfSkoKX1hcHByb3ZlVGFibGUoKXt2YXIgYT10aGlzO3JldHVybiBlZShm''@;'; put 'put ''dW5jdGlvbiooKXthLmFjY2VwdExvYWRpbmc9ITA7bGV0IGQ9e0FDVElPTjoiQVBQUk9WRV9UQUJMRSIsVEFCTEU6YS50YWJsZUlkLERJRkZUSU1FOmEucGFyYW1zPy5ESUZGVElNRSxMSUJEUzphLnBhcmFtcz8uTElCRFN9O3lpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmFwcHJvdmVUYWJsZShk''@;'; put 'put ''LCJTQVNDb250cm9sVGFibGUiLCJhdWRpdG9ycy9wb3N0ZGF0YSIpLnRoZW4oaD0+e2EucmVmcmVzaFN0YXJ0dXBzZXJ2aWNlQWZ0ZXJBcHByb3ZlJiZhLnNhc1NlcnZpY2UucmVsb2FkU3RhcnR1cERhdGEoKSxhLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9yZXZpZXcvaGlzdG9yeSIpfSkuY2F0''@;'; put 'put ''Y2goaD0+e2EuYWNjZXB0TG9hZGluZz0hMX0pfSkoKX1nb1RvU3VibWl0TGlzdCgpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3Jldmlldy9zdWJtaXR0ZWQiKX1jYWxsQ2hhbmdlc0luZm8oYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7eWllbGQgZC5zYXNTdG9yZVNl''@;'; put 'put ''cnZpY2UuZ2V0Q2hhbmdlSW5mbyhhKS50aGVuKGg9PntkLnRhYmxlRGV0YWlscz1oLmpzcGFyYW1zWzBdLGQuanNQYXJhbXM9aC5qc3BhcmFtc1swXTtsZXQgZj1bXTtmb3IoY29uc3QgdiBpbiBkLmpzUGFyYW1zKWQuanNQYXJhbXMuaGFzT3duUHJvcGVydHkodikmJmYucHVzaCh2KTtkLmtl''@;'; put 'put ''eXNBcnJheT1mLCJNUEVfVEFCTEVTIj09PWguanNwYXJhbXNbMF0uQkFTRV9EUyYmKGQucmVmcmVzaFN0YXJ0dXBzZXJ2aWNlQWZ0ZXJBcHByb3ZlPSEwKX0pLmNhdGNoKGg9PntkLmFjY2VwdExvYWRpbmc9ITF9KS5maW5hbGx5KCgpPT57ZC5sb2FkZWQ9ITB9KX0pKCl9Zm9ybWF0dGluZ0No''@;'; put 'put ''YW5nZWQoKXt0aGlzLmNhbGNEaWZmKCl9Y2FsY0RpZmYoKXtpZighdGhpcy5yZXNwb25zZSlyZXR1cm47bGV0IGE9dGhpcy5yZXNwb25zZS5uZXcsZD10aGlzLnJlc3BvbnNlLnVwZGF0ZXMsaD10aGlzLnJlc3BvbnNlLmRlbGV0ZWQsZj10aGlzLnJlc3BvbnNlLm9yaWdpbmFsczt0aGlzLmZv''@;'; put 'put ''cm1hdHRlZFZhbHVlcyYmKGE9dGhpcy5yZXNwb25zZS5mbXRfbmV3LGQ9dGhpcy5yZXNwb25zZS5mbXRfdXBkYXRlcyxoPXRoaXMucmVzcG9uc2UuZm10X2RlbGV0ZWQsZj10aGlzLnJlc3BvbnNlLmZtdF9vcmlnaW5hbHMpLHRoaXMub3JpZ2luYWxzPWYsdGhpcy5yb3dLZXlzPVtdO2Zvcihs''@;'; put 'put ''ZXQgbXQ9MDttdDxkLmxlbmd0aDttdCsrKXtsZXQgJHQ9T2JqZWN0LmtleXMoZFttdF0pO2ZvcihsZXQgenQ9MDt6dDwkdC5sZW5ndGg7enQrKylkW210XVskdFt6dF1dIT09ZlttdF1bJHRbenRdXSYmdGhpcy5jaGFuZ2VzQXJyLnB1c2goe2luZDptdCxmaWVsZDokdFt6dF0scHJvcDpkW210''@;'; put 'put ''XVskdFt6dF1dLG9yaWdpbmFsOmZbbXRdWyR0W3p0XV19KX10aGlzLmxlbnM9e25ldzp0aGlzLnBhcmFtcz8uTlVNX0FEREVEfHwwLHVwZGF0ZWQ6dGhpcy5wYXJhbXM/Lk5VTV9VUERBVEVEfHwwLGRlbGV0ZWQ6dGhpcy5wYXJhbXM/Lk5VTV9ERUxFVEVEfHwwfTtsZXQgVT1bXSx0ZT1kLmNv''@;'; put 'put ''bmNhdChhLGgpO2ZvcihsZXQgbXQ9MDttdDx0aGlzLnJlc3BvbnNlLmNvbHMubGVuZ3RoO210KyspVS5wdXNoKHRoaXMucmVzcG9uc2UuY29sc1ttdF0uTkFNRSk7bGV0IG9lPXRoaXMubGVucy5uZXc+dGhpcy5yZWNvcmRzTGltaXQ/dGhpcy5yZWNvcmRzTGltaXQ6dGhpcy5sZW5zLm5ldyx2''@;'; put 'put ''ZT10aGlzLmxlbnMudXBkYXRlZD50aGlzLnJlY29yZHNMaW1pdD90aGlzLnJlY29yZHNMaW1pdDp0aGlzLmxlbnMudXBkYXRlZDt0aGlzLmRpZmZzTGltaXQ9dGhpcy5sZW5zLm5ldz50aGlzLnJlY29yZHNMaW1pdHx8dGhpcy5sZW5zLnVwZGF0ZWQ+dGhpcy5yZWNvcmRzTGltaXR8fHRoaXMu''@;'; put 'put ''bGVucy5kZWxldGVkPnRoaXMucmVjb3Jkc0xpbWl0LHRoaXMuYWRkQ291bnQ9b2U7bGV0IEZlPVtdLFdlPVtdO2ZvcihsZXQgbXQ9MDttdDxVLmxlbmd0aDttdCsrKVdlLnB1c2goe2RhdGE6VVttdF0scmVhZE9ubHk6ITB9KTt0aGlzLmRpZmZUYWJsZS5kYXRhPXRlO2ZvcihsZXQgbXQ9MDtt''@;'; put 'put ''dDx0ZS5sZW5ndGg7bXQrKyl7bGV0IHp0PU9iamVjdC5rZXlzKHRlW210XSk7dGhpcy5yb3dLZXlzLnB1c2goenQpfWxldCBudD1bXSxkdD1bXTtmb3IobGV0IG10PTA7bXQ8dGhpcy5kaWZmVGFibGUuZGF0YS5sZW5ndGg7bXQrKyl7aWYobXQ8dmUmJjAhPT12ZSl7bnQucHVzaChbXSksZHQu''@;'; put 'put ''cHVzaChbXSksRmUucHVzaCgidXBkYXRlZCIpO2xldCAkdD1PYmplY3Qua2V5cyh0aGlzLmRpZmZUYWJsZS5kYXRhW210XSk7Zm9yKGxldCB6dD0wO3p0PCR0Lmxlbmd0aDt6dCsrKXtsZXQgeW49JHRbenRdO2ZbbXRdW3luXSE9PWRbbXRdW3luXT8obnRbbXRdLnB1c2goITApLGR0W210XS5w''@;'; put 'put ''dXNoKGZbbXRdW3luXSkpOihudFttdF0ucHVzaCghMSksZHRbbXRdLnB1c2gobnVsbCkpfXRoaXMuYXJyQ2hhbmdlZD1udCx0aGlzLmFyck9mQ2hhbmdlcz1kdH1tdD49dmUmJm10PHZlK29lJiZGZS5wdXNoKCJhZGRlZCIpLG10Pm9lK3ZlLTEmJkZlLnB1c2goImRlbGV0ZWQiKX10aGlzLmNo''@;'; put 'put ''QXJyPUZlLHRoaXMucm93SGVhZGVyPXRoaXMucm93S2V5c1swXSx0aGlzLmRpZmZUYWJsZS5kYXRhPXRlfW5nQWZ0ZXJWaWV3SW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2lmKGEuX2RldGFpbHNTdWI9YS5zYXNTdG9yZVNlcnZpY2Uuc3VibWl0dERldGFpbC5zdWJz''@;'; put 'put ''Y3JpYmUoZnVuY3Rpb24oKXt2YXIgaD1lZShmdW5jdGlvbiooZil7YS5zdWJPYmo9Zi52aWV3RGF0YSxhLnRhYmxlSWQ9Zi52aWV3RGF0YS50YWJsZUlkLGEuc3VibWl0dGVkPWYudmlld0RhdGEuc3ViLGEuc3VibWl0RGV0YWlscz1mLmRhdGEsYS5zdWJtaXRBcnI9W107Zm9yKGxldCBNIGlu''@;'; put 'put ''IGEuc3VibWl0RGV0YWlscykic3ViIiE9PU0mJmEuc3VibWl0QXJyLnB1c2goTSk7bGV0IHY9e0FDVElPTjoiU0hPV19ESUZGUyIsVEFCTEU6YS50YWJsZUlkLERJRkZUSU1FOihuZXcgRGF0ZSkudG9VVENTdHJpbmcoKX07YS5zYXNTdG9yZVNlcnZpY2Uuc2hvd0RpZmZzKHYsIlNBU0NvbnRy''@;'; put 'put ''b2xUYWJsZSIsImF1ZGl0b3JzL3Bvc3RkYXRhIikudGhlbihNPT57YS5wYXJhbXM9TS5wYXJhbXNbMF0sYS5yZXNwb25zZT1NLGEuY2FsY0RpZmYoKSxhLmNhbGxDaGFuZ2VzSW5mbyhhLnRhYmxlSWQpfSkuY2F0Y2goTT0+TSkuZmluYWxseSgoKT0+e2EubG9hZGluZ1RhYmxlPSEwfSl9KTty''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24oZil7cmV0dXJuIGguYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSksdHlwZW9mIGEucm91dGVyLnNuYXBzaG90LnBhcmFtcy50YWJsZUlkPiJ1IilyZXR1cm47YS50YWJsZUlkPWEucm91dGVyLnNuYXBzaG90LnBhcmFtcy50YWJsZUlkO2xldCBkPXtBQ1RJT046IlNI''@;'; put 'put ''T1dfRElGRlMiLFRBQkxFOmEudGFibGVJZCxESUZGVElNRToobmV3IERhdGUpLnRvVVRDU3RyaW5nKCl9O2Euc2FzU3RvcmVTZXJ2aWNlLnNob3dEaWZmcyhkLCJTQVNDb250cm9sVGFibGUiLCJhdWRpdG9ycy9wb3N0ZGF0YSIpLnRoZW4oaD0+e2EucGFyYW1zPWgucGFyYW1zWzBdLGEucmVz''@;'; put 'put ''cG9uc2U9aCxhLmNhbGNEaWZmKCksYS5jYWxsQ2hhbmdlc0luZm8oYS50YWJsZUlkKX0pLmNhdGNoKGg9PnthLmFjY2VwdExvYWRpbmc9ITF9KS5maW5hbGx5KCgpPT57YS5sb2FkaW5nVGFibGU9ITAsYS5zZXRGb2N1cygpfSl9KSgpfW5nT25EZXN0cm95KCl7dGhpcy5fZGV0YWlsc1N1YiYm''@;'; put 'put ''dGhpcy5fZGV0YWlsc1N1Yi51bnN1YnNjcmliZSgpfXNldEZvY3VzKCl7c2V0VGltZW91dCgoKT0+e2xldCBhPXdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWNjZXB0QnRuIik7YSYmYS5mb2N1cygpfSwyMDApfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1''@;'; put 'put ''cm4gbmV3KGR8fGMpKHFlKE0yKSxxZShLcykscWUoRWMpLHFlKHQwKSxxZShubCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWFwcHJvdmUtZGV0YWlscyJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sc3RhbmRhbG9uZToh''@;'; put 'put ''MSxkZWNsczo0Mix2YXJzOjEyLGNvbnN0czpbWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsInRhYmxlIl0sWzEsImxlZnQiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIm1vZGFsLWZvb3RlciJd''@;'; put 'put ''LFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWzQsIm5nSWYiXSxbMSwiZm9ybS1ibG9jayJdLFsxLCJmb3JtLWdyb3VwIl0sWyJmb3IiLCJmb3JtRmllbGRzXzgiXSxbImlkIiwiZm9ybUZpZWxkc184Iiwicm93cyIsIjUiLDEsInct''@;'; put 'put ''MTAwIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsIm5nTW9kZWxPcHRpb25zIiwiaW5uZXJIVE1MIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNs''@;'; put 'put ''aWNrIiwiY2xyTG9hZGluZyJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJsZWZ0IGxpbmstaXQiLDMsInJvdXRlckxpbmsiLDQsIm5nSWYiXSxbImNsYXNzIiwibGVmdCIsNCwibmdJZiJdLFsxLCJsZWZ0IiwibGluay1pdCIsMywicm91''@;'; put 'put ''dGVyTGluayJdLFsiY2xyVGFiTGluayIsIiJdLFs0LCJjbHJJZkFjdGl2ZSJdLFsxLCJvdmVyZmxvdy1hdXRvIl0sWzEsImNhcmQiXSxbImNsYXNzIiwiY2FyZC1oZWFkZXIgZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwib3ZlcmZsb3ct''@;'; put 'put ''YXV0byIsIm1yLTEyIl0sWyJjbGFzcyIsImgtNzB2aCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiY2FyZC1oZWFkZXIiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImp1c3RpZnktY29udGVudC1jZW50''@;'; put 'put ''ZXIiXSxbImNsYXNzIiwibXQtMCIsNCwibmdJZiJdLFsxLCJtdC0wIl0sWzEsImNhcmQtaGVhZGVyIiwicC0wIl0sWzEsImNsci1yb3ciXSxbMSwiY2xyLWNvbC1tZC00IiwiYXBwcm92YWxCYWNrIl0sWzEsImJ0biIsImJ0bi1vdXRsaW5lIiwibS0wIiwzLCJjbGljayJdLFsic2hhcGUiLCJj''@;'; put 'put ''YXJldCIsImRpciIsImxlZnQiLCJzaXplIiwiMjAiXSxbMSwiY2xyLWNvbC1tZC00IiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJtdC0wIiwiZm9udC13ZWlnaHQtMzAwIl0sWzEsImNsci1jb2wtbWQtNCIsImFwcHJvdmFsSW5mbyJdLFsxLCJ0b29sdGlwIiwidG9v''@;'; put 'put ''bHRpcC1zbSIsInRvb2x0aXAtdG9wLWxlZnQiLDMsImNsaWNrIl0sWyJzaGFwZSIsImluZm8tc3RhbmRhcmQiLCJzaXplIiwiMjgiXSxbMSwidGV4dC1jZW50ZXIiLCJtdC0xMCJdLFsxLCJjYXJkLWJsb2NrIiwicC0wIl0sWyJjbGFzcyIsImNhcmQtdGV4dCIsNCwibmdJZiJdLFsiY2xhc3Mi''@;'; put 'put ''LCJoLTI0dmggZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWzEsInRhYmxlQ29udCIsIm10LTAiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgZm9udC1zaXplLTE4Iiw0LCJuZ0lmIl0sWzEsImQtZmxleCJdLFsi''@;'; put 'put ''Y2xhc3MiLCJsZWZ0Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwiZC1mbGV4IiwzLCJuZ0NsYXNzIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY2FyZC10ZXh0Il0sWzEsImNsci1yb3ciLCJmb250LXNpemUtMTUiXSxbMSwiY2xyLWNvbC1tZC01Il0sWzEsImNsci1jb2wtbWQt''@;'; put 'put ''NyJdLFsxLCJjYXJkLWJsb2NrIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwibXQtMCJdLFsxLCJjbHItcm93IiwiY2xyLWdhcC01IiwiY2xyLWdhcC1zbS0wIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1v''@;'; put 'put ''dXRsaW5lIiwidGV4dC1jZW50ZXIiLCJtdC01IiwibXItNWkiLDMsImNsaWNrIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm10LTUiLCJtci01aSIsMywiY2xpY2siXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWluZm8tb3V0bGluZSIs''@;'; put 'put ''InRleHQtY2VudGVyIiwibXQtNSIsMywiY2xpY2siXSxbMSwiY2FyZC1ibG9jayIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItZmxleC1jb2x1bW4iLCJjbHItZ2FwLTUiLCJjbHItZmxleC1zbS1yb3ciLCJjbHItZ2FwLXNtLTAiLCJjbHItYWxpZ24taXRlbXMtY2Vu''@;'; put 'put ''dGVyIl0sWyJpZCIsImFjY2VwdEJ0biIsInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwibXItNWkiLDMsImNsaWNrIiwiY2xyTG9hZGluZyIsImRpc2FibGVkIl0sWyJpZCIsInJlamVjdEJ0biIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuIiwiYnRuLWRhbmdl''@;'; put 'put ''ciIsIm1yLTVpIiwzLCJjbGljayIsImRpc2FibGVkIl0sWzEsIm0tMCIsIm1sLTIwaSJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyVG9nZ2xlIiwiIiwiY2hlY2tlZCIsIiIsMywibmdNb2RlbENoYW5nZSIsImNoYW5nZSIsIm5nTW9kZWwiXSxbMSwiZm9ybWF0dGVkLXZhbHVlcy10b2dnbGUi''@;'; put 'put ''XSxbMSwiY2FyZC1ibG9jayIsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItZmxleC1jb2x1bW4iXSxbImNsYXNzIiwicm93cy1ub3RpY2UiLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWdhcC01IiwiY2xyLWZsZXgtc20tcm93Iiwi''@;'; put 'put ''Y2xyLWdhcC1zbS0wIl0sWzEsImxhYmVsIiwibGFiZWwtd2FybmluZyJdLFsxLCJiYWRnZSJdLFsxLCJsYWJlbCIsImxhYmVsLXN1Y2Nlc3MiXSxbMSwibGFiZWwiLCJsYWJlbC1kYW5nZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJmb250LXNpemUtMTgiXSxbMSwibXQtMTUiXSxbMSwibGluay1p''@;'; put 'put ''dCIsMywicm91dGVyTGluayJdLFsxLCJtdC0xMCJdLFsxLCJyb3dzLW5vdGljZSJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi10cmlhbmdsZSIsMSwibWItNSIsImNvbG9yLW9yYW5nZSJdLFsxLCJoLTI0dmgiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImp1c3RpZnktY29udGVudC1jZW50ZXIi''@;'; put 'put ''LCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwic3Bpbm5lciJdLFsiY2xhc3MiLCJtdC0xMCIsNCwibmdJZiJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIl0sWzEsImQtZmxleCIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJsZWZ0IiwzLCJuZ0NsYXNzIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwi''@;'; put 'put ''bGVmdCIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJ0b29sdGlwLWNvbnRlbnQiLDQsIm5nSWYiXSxbMSwidG9vbHRpcC1jb250ZW50Il0sWzEsImgtNzB2aCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xh''@;'; put 'put ''c3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNhcmQtYmxvY2siLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiZmxleC1jb2x1bW4iLCJqdXN0aWZ5LWNvbnRlbnQtY2Vu''@;'; put 'put ''dGVyIl0sWyJjbGFzcyIsImNhcmQgbS0wIiw0LCJuZ0lmIl0sWzEsImNhcmQiLCJtLTAiXSxbMSwiY2FyZC1oZWFkZXIiXSxbMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVmdCIsInNpemUiLCIyMCJdLFsxLCJjbHItY29s''@;'; put 'put ''LW1kLTQiXSxbMSwibXQtMCIsImZvbnQtd2VpZ2h0LTMwMCIsInRleHQtY2VudGVyIl0sWzEsIm0tMCIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibS0wIiwibWwtMjAtaSJdLFsxLCJjYXJkLWJsb2NrIiwicC0wIiwib3ZlcmZsb3ctYXV0byIsIm1yLTEyIl0sWyJj''@;'; put 'put ''bGFzcyIsImgtMjV2aCBkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMSwidGFibGVDb250Il0sWzEsImgtMjV2aCIsImQtZmxleCIsImZsZXgtY29sdW1uIiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImFs''@;'; put 'put ''aWduLWl0ZW1zLWNlbnRlciJdLFsxLCJjYXJkLWJsb2NrIl0sWzEsImxvYWRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImNsci1tb2RhbCIsMCksY2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGZpKGguZGV0YWlsc09wZW4sdil8fCho''@;'; put 'put ''LmRldGFpbHNPcGVuPXYpLHZ9KSxkZSgxLCJoMyIsMSksUGUoMiwiQXBwcm92YWwgRGV0YWlscyIpLGhlKCksZGUoMywiZGl2IiwyKSg0LCJ0YWJsZSIsMykoNSwidGhlYWQiKSg2LCJ0ciIpKDcsInRoIiw0KSxQZSg4LCJOYW1lIiksaGUoKSxkZSg5LCJ0aCIsNCksUGUoMTAsIlZhbHVlIiks''@;'; put 'put ''aGUoKSgpKCksZGUoMTEsInRib2R5IiksZ3QoMTIsUlR0LDUsMywidHIiLDUpLGhlKCkoKSgpLGRlKDEzLCJkaXYiLDYpKDE0LCJidXR0b24iLDcpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5kZXRhaWxzT3Blbj0hMX0pLFBlKDE1LCIgT2sgIiksaGUoKSgpKCksZGUoMTYsImNs''@;'; put 'put ''ci1tb2RhbCIsMCksY2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGZpKGgudGFibGVGbGFnLHYpfHwoaC50YWJsZUZsYWc9diksdn0pLGRlKDE3LCJoMyIsMSksUGUoMTgsIkFsbCBEZXRhaWxzIiksaGUoKSxkZSgxOSwiZGl2IiwyKSxndCgyMCxGVHQsMTksMiwi''@;'; put 'put ''Y2xyLXRhYnMiLDgpLGhlKCksZGUoMjEsImRpdiIsNikoMjIsImJ1dHRvbiIsNyksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnRhYmxlRmxhZz0hMX0pLFBlKDIzLCIgT2sgIiksaGUoKSgpKCksZGUoMjQsImNsci1tb2RhbCIsMCksY2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVu''@;'; put 'put ''Y3Rpb24odil7cmV0dXJuIGZpKGgucmVqZWN0T3Blbix2KXx8KGgucmVqZWN0T3Blbj12KSx2fSksZGUoMjUsImgzIiwxKSxQZSgyNiwiUmVhc29uIE1lc3NhZ2UiKSxoZSgpLGRlKDI3LCJkaXYiLDIpKDI4LCJmb3JtIikoMjksInNlY3Rpb24iLDkpKDMwLCJkaXYiLDEwKSgzMSwibGFiZWwi''@;'; put 'put ''LDExKSxQZSgzMiwiUmVhc29uIGZvciByZWplY3Rpbmc/IiksaGUoKSxkZSgzMywidGV4dGFyZWEiLDEyKSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGZpKGguc3VibWl0UmVhc29uLHYpfHwoaC5zdWJtaXRSZWFzb249diksdn0pLGhlKCkoKSgpKCkoKSxkZSgzNCwi''@;'; put 'put ''ZGl2Iiw2KSgzNSwiYnV0dG9uIiwxMyksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnJlamVjdE9wZW49ITF9KSxQZSgzNiwiIENhbmNlbCAiKSxoZSgpLGRlKDM3LCJidXR0b24iLDE0KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgucmVqZWN0aW5nKCl9KSxQZSgzOCwi''@;'; put 'put ''IE9LICIpLGhlKCkoKSgpLGRlKDM5LCJkaXYiLDE1KSxndCg0MCxuQXQsNCwyLCJkaXYiLDE2KSg0MSx5QXQsMywyLCJkaXYiLDgpLGhlKCkpLDImZCYmKGxpKCJjbHJNb2RhbE9wZW4iLGguZGV0YWlsc09wZW4pLGZlKDEyKSxFZSgibmdGb3JPZiIsaC5rZXlzQXJyYXkpLGZlKDQpLGxpKCJj''@;'; put 'put ''bHJNb2RhbE9wZW4iLGgudGFibGVGbGFnKSxmZSg0KSxFZSgibmdJZiIsaC50YWJsZUZsYWcpLGZlKDQpLGxpKCJjbHJNb2RhbE9wZW4iLGgucmVqZWN0T3BlbiksZmUoOSksbGkoIm5nTW9kZWwiLGguc3VibWl0UmVhc29uKSxFZSgibmdNb2RlbE9wdGlvbnMiLHRsKDExLGtUdCkpKCJpbm5l''@;'; put 'put ''ckhUTUwiLGguc3VibWl0UmVhc29uLE9nKSxmZSg0KSxFZSgiY2xyTG9hZGluZyIsaC5yZWplY3RMb2FkaW5nKSxmZSgzKSxFZSgibmdJZiIsIWguc3VibWl0dGVkKSxmZSgpLEVlKCJuZ0lmIixoLnN1Ym1pdHRlZCkpfSxkZXBlbmRlbmNpZXM6W1J1LGhzLENhLHk5LG5jLHNoLGhsLG05LHJs''@;'; put 'put ''LFYzLFAxLFVsLGZzLGJ1LHIwLGMxLGR3LExmLENzLGhoLHB3LHkyLGg2LHA2LEg5LGY2LGQ2LFA5XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IGJBdD1jPT4oe25vQm9yZGVyOmN9KSxfQXQ9KCk9PlszLDUsMTAsMTVdO2Z1bmN0aW9uIHdBdChjLGwpezEmYyYmKGRl''@;'; put 'put ''KDAsImRpdiIsMTApKDEsImRpdiIsMTEpLEd0KDIsImNsci1pY29uIiwxMiksZGUoMywiaDMiLDEzKSxQZSg0LCJUaGVyZSBhcmUgbm8gYXBwcm92YWxzIHJlbWFpbmluZyIpLGhlKCkoKSgpKX1mdW5jdGlvbiBDQXQoYyxsKXsxJmMmJihkZSgwLCJoMyIsMTQpLFBlKDEsIiBSRVZJRVcgIiks''@;'; put 'put ''aGUoKSl9ZnVuY3Rpb24gU0F0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTUpLFBlKDEsIiBZb3UgaGF2ZSAiKSxkZSgyLCJzcGFuIiksUGUoMyksaGUoKSxQZSg0LCJhcHByb3ZhbHMgcmVtYWluaW5nICIpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDMpLElyKCIiLGEucmVtYWluZWQs''@;'; put 'put ''IiAiKX19ZnVuY3Rpb24gTUF0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsMTgpLFBlKDEsIiBMb2FkaW5nLi4uICIpLGhlKCkpfWZ1bmN0aW9uIHhBdChjLGwpezEmYyYmKGRlKDAsImRpdiIpKDEsImgzIiksUGUoMiwiTG9hZGluZyBhcHByb3ZhbHMgbGlzdCIpLGhlKCkoKSl9ZnVuY3Rpb24g''@;'; put 'put ''RUF0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxNiksZ3QoMSxNQXQsMiwwLCJzcGFuIiwxNykoMix4QXQsMywwLCJkaXYiLDkpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCksRWUoIm5nSWYiLCFhLmxvYWRlZCksZmUoKSxFZSgibmdJZiIsIWEubG9hZGVkKX19ZnVuY3Rpb24gVEF0''@;'; put 'put ''KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsNDApfWZ1bmN0aW9uIEFBdChjLGwpezEmYyYmR3QoMCwiY2xyLXNwaW5uZXIiLDQxKSwyJmMmJkVlKCJjbHJTbWFsbCIsITApfWZ1bmN0aW9uIGtBdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1kZy1yb3ciKSgxLCJjbHIt''@;'; put 'put ''ZGctY2VsbCIpLFBlKDIpLGhlKCksZGUoMywiY2xyLWRnLWNlbGwiKSxQZSg0KSxoZSgpLGRlKDUsImNsci1kZy1jZWxsIiksUGUoNiksaGUoKSxkZSg3LCJjbHItZGctY2VsbCIpLFBlKDgpLGhlKCksZGUoOSwiY2xyLWRnLWNlbGwiKSgxMCwiZGl2IiwyOCkoMTEsImEiLDI5KSxPdCgiY2xp''@;'; put 'put ''Y2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS5pbmRleDtyZXR1cm4gQ3QoT2UoMikuZ2V0Q2xpY2tlZChoKSl9KSxHdCgxMiwiY2xyLWljb24iLDMwKSxkZSgxMywic3BhbiIsMzEpLFBlKDE0LCJHbyB0byByZXZpZXcgcGFnZSBzY3JlZW4iKSxoZSgpKCksZGUoMTUsImEiLDMyKSxPdCgi''@;'; put 'put ''Y2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKSxmPWguJGltcGxpY2l0LHY9aC5pbmRleCxNPU9lKDIpO3JldHVybiBDdChmLnJlamVjdExvYWRpbmc/IiI6TS5yZWplY3RpbmcodikpfSksZ3QoMTYsVEF0LDEsMCwiY2xyLWljb24iLDMzKSgxNyxBQXQsMSwxLCJjbHItc3Bpbm5lciIs''@;'; put 'put ''MzQpLGRlKDE4LCJzcGFuIiwzMSksUGUoMTksIlJlamVjdCIpLGhlKCkoKSxkZSgyMCwiYSIsMzUpLE90KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoMikuZ2V0VGFibGUoaC50YWJsZUlkKSl9KSxHdCgyMSwiY2xyLWljb24iLDM2KSxk''@;'; put 'put ''ZSgyMiwic3BhbiIsMzEpLFBlKDIzLCJHbyB0byBzdGFnZWQgZGF0YSBzY3JlZW4iKSxoZSgpKCkoKSgpLGRlKDI0LCJjbHItZGctY2VsbCIsMzcpKDI1LCJidXR0b24iLDM4KSxPdCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0O3JldHVybiBPZSgyKS5kb3du''@;'; put 'put ''bG9hZChmLnRhYmxlSWQpLEN0KGguc3RvcFByb3BhZ2F0aW9uKCkpfSksR3QoMjYsImNsci1pY29uIiwzOSksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLENyKGEuc3VibWl0dGVyKSxmZSgyKSxDcihhLmJhc2VUYWJsZSksZmUoMiksQ3IoYS5zdWJtaXR0ZWQp''@;'; put 'put ''LGZlKDIpLENyKGEuc3VibWl0UmVhc29uKSxmZSg4KSxFZSgibmdJZiIsIWEucmVqZWN0TG9hZGluZyksZmUoKSxFZSgibmdJZiIsYS5yZWplY3RMb2FkaW5nKSxmZSg4KSxFZSgiaWQiLGEudGFibGVJZCl9fWZ1bmN0aW9uIERBdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsImNsci1k''@;'; put 'put ''YXRhZ3JpZCIsMTkpKDIsImNsci1kZy1jb2x1bW4iLDIwKSxQZSgzLCIgU1VCTUlUVEVSICIpLEd0KDQsImNsci1kZy1zdHJpbmctZmlsdGVyIiwyMSksaGUoKSxkZSg1LCJjbHItZGctY29sdW1uIiwyMCksUGUoNiwiIEJBU0UgVEFCTEUgIiksR3QoNywiY2xyLWRnLXN0cmluZy1maWx0ZXIi''@;'; put 'put ''LDIyKSxoZSgpLGRlKDgsImNsci1kZy1jb2x1bW4iLDIwKSxQZSg5LCIgU1VCTUlUVEVEICIpLEd0KDEwLCJjbHItZGctc3RyaW5nLWZpbHRlciIsMjMpLGhlKCksZGUoMTEsImNsci1kZy1jb2x1bW4iLDIwKSxQZSgxMiwiIFNVQk1JVCBSRUFTT04gIiksR3QoMTMsImNsci1kZy1zdHJpbmct''@;'; put 'put ''ZmlsdGVyIiwyNCksaGUoKSxkZSgxNCwiY2xyLWRnLWNvbHVtbiIpLFBlKDE1LCJBQ1RJT04iKSxoZSgpLGRlKDE2LCJjbHItZGctY29sdW1uIiksUGUoMTcsIkRPV05MT0FEIiksaGUoKSxndCgxOCxrQXQsMjcsNywiY2xyLWRnLXJvdyIsMjUpLGRlKDE5LCJjbHItZGctZm9vdGVyIikoMjAs''@;'; put 'put ''ImNsci1kZy1wYWdpbmF0aW9uIiwyNiwwKSgyMiwiY2xyLWRnLXBhZ2Utc2l6ZSIsMjcpLFBlKDIzLCJJdGVtcyBwZXIgcGFnZSIpLGhlKCksUGUoMjQpLGhlKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1mYSgyMSksZD1PZSgpO2ZlKDIpLEVlKCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVyIiksZmUo''@;'; put 'put ''MiksRWUoImNsckRnU3RyaW5nRmlsdGVyIixkLnN1Ym1pdHRlckZpbHRlciksZmUoKSxFZSgiY2xyRGdGaWVsZCIsImJhc2VUYWJsZSIpLGZlKDIpLEVlKCJjbHJEZ1N0cmluZ0ZpbHRlciIsZC5iYXNlVGFibGVGaWx0ZXIpLGZlKCksRWUoImNsckRnRmllbGQiLCJzdWJtaXR0ZWQiKSxmZSgy''@;'; put 'put ''KSxFZSgiY2xyRGdTdHJpbmdGaWx0ZXIiLGQuc3VibWl0dGVkRmlsdGVyKSxmZSgpLEVlKCJjbHJEZ0ZpZWxkIiwic3VibWl0UmVhc29uIiksZmUoMiksRWUoImNsckRnU3RyaW5nRmlsdGVyIixkLnN1Ym1pdFJlYXNvbkZpbHRlciksZmUoNSksRWUoImNsckRnSXRlbXNPZiIsZC5hcHByb3Zl''@;'; put 'put ''TGlzdCksZmUoMiksRWUoImNsckRnUGFnZVNpemUiLDEwKSxmZSgyKSxFZSgiY2xyUGFnZVNpemVPcHRpb25zIix0bCgxNCxfQXQpKSxmZSgyKSxrMygiICIsYS5maXJzdEl0ZW0rMSwiIC0gIixhLmxhc3RJdGVtKzEsIiBvZiAiLGEudG90YWxJdGVtcywiIGFwcHJvdmFscyAiKX19Y2xhc3Mg''@;'; put 'put ''SUF0e2FjY2VwdHMobCxhKXtyZXR1cm4gbC5zdWJtaXR0ZXIudG9Mb3dlckNhc2UoKS5pbmRleE9mKGEudG9Mb3dlckNhc2UoKSk+PTB9fWNsYXNzIFJBdHthY2NlcHRzKGwsYSl7cmV0dXJuIGwuYmFzZVRhYmxlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihhLnRvTG93ZXJDYXNlKCkpPj0wfX1j''@;'; put 'put ''bGFzcyBMQXR7YWNjZXB0cyhsLGEpe3JldHVybiBsLnN1Ym1pdHRlZC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoYS50b0xvd2VyQ2FzZSgpKT49MH19Y2xhc3MgT0F0e2FjY2VwdHMobCxhKXtyZXR1cm4gbC5zdWJtaXRSZWFzb24udG9Mb3dlckNhc2UoKS5pbmRleE9mKGEudG9Mb3dlckNhc2Uo''@;'; put 'put ''KSk+PTB9fWxldCBQQXQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLnJvdXRlPWgsdGhpcy5zYXNTZXJ2aWNlPWYsdGhpcy5jZHI9dix0aGlzLmxvYWRlZD0hMSx0aGlzLml0ZW1zTnVt''@;'; put 'put ''PTEwLHRoaXMuc3VibWl0dGVyRmlsdGVyPW5ldyBJQXQsdGhpcy5iYXNlVGFibGVGaWx0ZXI9bmV3IFJBdCx0aGlzLnN1Ym1pdHRlZEZpbHRlcj1uZXcgTEF0LHRoaXMuc3VibWl0UmVhc29uRmlsdGVyPW5ldyBPQXR9Z2V0VGFibGUoYSl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvc3Rh''@;'; put 'put ''Z2UvIithKX1nZXRDbGlja2VkKGEpe3ZvaWQgMCE9PXRoaXMuYXBwcm92ZUxpc3QmJih0aGlzLnRhYmxlSWQ9dGhpcy5hcHByb3ZlTGlzdFthXS50YWJsZUlkLHRoaXMucm91dGUubmF2aWdhdGVCeVVybCgicmV2aWV3L2FwcHJvdmVEZXQvIit0aGlzLmFwcHJvdmVMaXN0W2FdLnRhYmxlSWQp''@;'; put 'put ''KX1yZWplY3RpbmcoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7dm9pZCAwIT09ZC5hcHByb3ZlTGlzdCYmKGQudGFibGVJZD1kLmFwcHJvdmVMaXN0W2FdLnRhYmxlSWQpO2xldCBoPXtTVFBfQUNUSU9OOiJSRUpFQ1RfVEFCTEUiLFRBQkxFOmQudGFibGVJZCxTVFBfUkVB''@;'; put 'put ''U09OOiJxdWljayByZWplY3Rpb24ifTt0cnl7KGQuYXBwcm92ZUxpc3R8fFtdKVthXS5yZWplY3RMb2FkaW5nPSEwLCh5aWVsZCBkLnNhc1N0b3JlU2VydmljZS5yZWplY3RpbmcoaCwiQnJvd3NlclBhcmFtcyIsImFwcHJvdmVycy9yZWplY3Rpb24iKSkuZnJvbXNhc1swXS5SRVNQT05TRS5p''@;'; put 'put ''bmNsdWRlcygiU1VDQ0VTUyIpJiYoKGQuYXBwcm92ZUxpc3R8fFtdKVthXS5yZWplY3RMb2FkaW5nPSExLGQuYXBwcm92ZUxpc3Q/LnNwbGljZShhLDEpLGQucmVtYWluZWQtLSxkLmNkci5kZXRlY3RDaGFuZ2VzKCkpfWNhdGNoKGYpe2QuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJv''@;'; put 'put ''cigiYXBwcm92ZXJzL3JlamVjdGlvbiIsZil9fSkoKX1uZ09uSW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2EuZmV0Y2hBcHByb3ZhbHMoKX0pKCl9ZmV0Y2hBcHByb3ZhbHMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLml0ZW1zTnVtPTEwO2xl''@;'; put 'put ''dCBkPXtTVFBfQUNUSU9OOiJPUEVOX0FQUFJPVkFMUyJ9O3RyeXtsZXQgaD15aWVsZCBhLnNhc1N0b3JlU2VydmljZS5nZXRBcHByb3ZhbHMoZCwiQnJvd3NlclBhcmFtcyIsImFwcHJvdmVycy9nZXRhcHByb3ZhbHMiKTthLnJlbWFpbmVkPWguZnJvbXNhcy5sZW5ndGg7bGV0IGY9aC5mcm9t''@;'; put 'put ''c2FzLm1hcChmdW5jdGlvbih2KXtyZXR1cm57dGFibGVJZDp2LlRBQkxFX0lELHN1Ym1pdHRlcjp2LlNVQk1JVFRFRF9CWV9OTSxzdWJtaXR0ZWQ6di5TVUJNSVRURURfT05fRFRUTSxiYXNlVGFibGU6di5CQVNFX1RBQkxFLHN1Ym1pdFJlYXNvbjp2LlNVQk1JVFRFRF9SRUFTT05fVFhUfX0p''@;'; put 'put ''O2EuYXBwcm92ZUxpc3Q9ZixhLmxvYWRlZD0hMH1jYXRjaChoKXthLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImFwcHJvdmVycy9nZXRhcHByb3ZhbHMiLGgpfX0pKCl9ZG93bmxvYWQoYSl7bGV0IGQ9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksaD1kLnNlcnZl''@;'; put 'put ''clVybCxmPWQuYXBwTG9jLHY9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihoK3YrIi8/X3Byb2dyYW09IitmKyIvc2VydmljZXMvYXVkaXRvcnMvZ2V0YXVkaXRmaWxlJnRhYmxlPSIrYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3Jl''@;'; put 'put ''dHVybiBuZXcoZHx8YykocWUoTTIpLHFlKEVjKSxxZShubCkscWUoS3MpLHFlKEhzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtYXBwcm92ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sc3RhbmRhbG9uZTohMSxkZWNs''@;'; put 'put ''czo5LHZhcnM6OCxjb25zdHM6W1sicGFnaW5hdGlvbiIsIiJdLFsxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZCJdLFsiY2xhc3MiLCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjYXJkLWhlYWRlciIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJjZW50ZXIg''@;'; put 'put ''Y2xyLWNvbC1tZC0xMiB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBmb250LXdlaWdodC03MDAgY29sb3ItZGFyay1ncmF5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImFwcHJvdmFscy1saXN0LXdyYXBwZXIiLDQsIm5nSWYiXSxbIm5nLWlmIiwibG9hZGVkIiwx''@;'; put 'put ''LCJjbHItY29sLW1kLTEyIl0sWzQsIm5nSWYiXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJjYXJkLWJsb2NrIiwibm9hcHByb3ZhbHMtaW5mby13cmFwcGVyIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iLCJp''@;'; put 'put ''Y29uLWRjLWZpbGwiXSxbMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il0sWzEsImNlbnRlciIsImNsci1jb2wtbWQtMTIiLCJ0ZXh0LWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsImZvbnQtd2VpZ2h0LTcwMCIsImNvbG9yLWRhcmstZ3JheSJdLFsxLCJhcHByb3ZhbHMtbGlzdC13cmFw''@;'; put 'put ''cGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbMSwic3Bpbm5lciJdLFsxLCJkYXRhZ3JpZC1jb21wYWN0IiwiZGF0YWdyaWQtY3VzdG9tLWZvb3RlciJdLFszLCJjbHJEZ0ZpZWxkIl0sWyJhcmlhLWxhYmVsIiwiRmlsdGVyIHN1Ym1pdHRlciIsMywiY2xyRGdTdHJpbmdGaWx0''@;'; put 'put ''ZXIiXSxbImFyaWEtbGFiZWwiLCJGaWx0ZXIgYmFzZSB0YWJsZSIsMywiY2xyRGdTdHJpbmdGaWx0ZXIiXSxbImFyaWEtbGFiZWwiLCJGaWx0ZXIgc3VibWl0dGVkIGRhdGUiLDMsImNsckRnU3RyaW5nRmlsdGVyIl0sWyJhcmlhLWxhYmVsIiwiRmlsdGVyIHN1Ym1pdCByZWFzb24iLDMsImNs''@;'; put 'put ''ckRnU3RyaW5nRmlsdGVyIl0sWzQsImNsckRnSXRlbXMiLCJjbHJEZ0l0ZW1zT2YiXSxbMywiY2xyRGdQYWdlU2l6ZSJdLFszLCJjbHJQYWdlU2l6ZU9wdGlvbnMiXSxbInJvbGUiLCJ0b29sYmFyIiwiYXJpYS1sYWJlbCIsIlRhYmxlIGFjdGlvbnMiLDEsImNsci1yb3ciLCJkLWZsZXgiLCJq''@;'; put 'put ''dXN0aWZ5LWNvbnRlbnQtYXJvdW5kIl0sWzEsImNvbHVtbi1jZW50ZXIiLCJsaW5rcyIsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsImNvbG9yLWdyZWVuIiwzLCJjbGljayJdLFsic2hhcGUiLCJjaGVjayIsInNpemUiLCIyNCIsImFyaWEtaGlkZGVuIiwi''@;'; put 'put ''dHJ1ZSJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbMSwiY29sdW1uLWNlbnRlciIsImxpbmtzIiwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwiY29sb3ItcmVkIiwzLCJjbGljayJdLFsic2hhcGUiLCJiYW4iLCJzaXplIiwiMjIiLCJhcmlhLWhpZGRlbiIs''@;'; put 'put ''InRydWUiLDQsIm5nSWYiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsMywiY2xyU21hbGwiLDQsIm5nSWYiXSxbMSwiY29sdW1uLWNlbnRlciIsImxpbmtzIiwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwiY29sb3ItYmx1ZSIsMywiY2xpY2siXSxbInNoYXBl''@;'; put 'put ''IiwiY29kZSIsInNpemUiLCIyOCIsImFyaWEtaGlkZGVuIiwidHJ1ZSJdLFsxLCJwLTAiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJhcmlhLWxhYmVsIiwiRG93bmxvYWQgYXVkaXQgZmlsZSIsMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLDMsImNsaWNrIiwiaWQiXSxbInNo''@;'; put 'put ''YXBlIiwiZG93bmxvYWQiXSxbInNoYXBlIiwiYmFuIiwic2l6ZSIsIjIyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLDMsImNsclNtYWxsIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwxKSgxLCJkaXYiLDIpLGd0KDIsd0F0''@;'; put 'put ''LDUsMCwiZGl2IiwzKSxkZSgzLCJkaXYiLDQpLGd0KDQsQ0F0LDIsMCwiaDMiLDUpKDUsU0F0LDUsMSwicCIsNiksaGUoKSxndCg2LEVBdCwzLDIsImRpdiIsNyksZGUoNywiZGl2Iiw4KSxndCg4LERBdCwyNSwxNSwiZGl2Iiw5KSxoZSgpKCkoKSksMiZkJiYoZmUoMiksRWUoIm5nSWYiLDA9''@;'; put 'put ''PT1oLnJlbWFpbmVkKSxmZSgpLEVlKCJuZ0NsYXNzIixhNCg2LGJBdCwhaC5sb2FkZWQpKSxmZSgpLEVlKCJuZ0lmIixoLmxvYWRlZCYmMCE9PWgucmVtYWluZWQpLGZlKCksRWUoIm5nSWYiLGgubG9hZGVkJiYwIT09aC5yZW1haW5lZCksZmUoKSxFZSgibmdJZiIsIWgubG9hZGVkKSxmZSgy''@;'; put 'put ''KSxFZSgibmdJZiIsaC5hcHByb3ZlTGlzdCYmMCE9PWgucmVtYWluZWQpKX0sZGVwZW5kZW5jaWVzOltSdSxDYSxfNixXMyxaOSxUSCxUdyxtQSxBSCx5NixiNCxXOSxEdyxiNixqOSx2Nix6OSxTdyxVbCxmaF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCBGQXQ9Yz0+''@;'; put 'put ''KHtub0JvcmRlcjpjfSksSEF0PSgpPT5bMyw1LDEwLDE1XTtmdW5jdGlvbiBOQXQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDEzKSgxLCJkaXYiLDE0KSxHdCgyLCJjbHItaWNvbiIsMTUpLGRlKDMsImgzIiwxNiksUGUoNCwiIFlvdSBoYXZlIG5vdCBzdWJtaXR0ZWQgYW55IHRhYmxlcyAiKSxo''@;'; put 'put ''ZSgpKCkoKSl9ZnVuY3Rpb24gVkF0KGMsbCl7MSZjJiYoZGUoMCwiaDMiLDE3KSxQZSgxLCIgU1VCTUlUIFFVRVVFICIpLGhlKCkpfWZ1bmN0aW9uIEJBdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE4KSxQZSgxLCIgWW91IGhhdmUgIiksZGUoMiwic3BhbiIpLFBlKDMpLGhlKCksUGUoNCwi''@;'; put 'put ''c3VibWlzc2lvbnMgd2FpdGluZyB0byBiZSBhcHByb3ZlZCAiKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoMyksSXIoIiIsYS5yZW1haW5lZCwiICIpfX1mdW5jdGlvbiBqQXQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiwyMSksUGUoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rp''@;'; put 'put ''b24gekF0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxQZSgyLCJMb2FkaW5nIHN1Ym1pdHRlZCBsaXN0IiksaGUoKSgpKX1mdW5jdGlvbiBVQXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDE5KSxndCgxLGpBdCwyLDAsInNwYW4iLDIwKSgyLHpBdCwzLDAsImRpdiIsMyksaGUo''@;'; put 'put ''KSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKCksRWUoIm5nSWYiLCFhLmxvYWRlZCksZmUoKSxFZSgibmdJZiIsIWEubG9hZGVkKX19ZnVuY3Rpb24gWkF0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLWRnLXJvdyIsMzApLE90KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBo''@;'; put 'put ''PXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoNSkuZ29Ub0RldGFpbHMoaC50YWJsZUlkKSl9KSxkZSgxLCJjbHItZGctY2VsbCIpLFBlKDIpLGhlKCksZGUoMywiY2xyLWRnLWNlbGwiKSxQZSg0KSxoZSgpLGRlKDUsImNsci1kZy1jZWxsIiksUGUoNiksaGUoKSxkZSg3LCJjbHItZGct''@;'; put 'put ''Y2VsbCIpKDgsImRpdiIsMzEpKDksImEiLDMyKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKDUpLmdvVG9TdGFnZShoLnRhYmxlSWQpKX0pLEd0KDEwLCJjbHItaWNvbiIsMzMpLGRlKDExLCJzcGFuIiwzNCksUGUoMTIsIkdvIHRv''@;'; put 'put ''IHN0YWdlZCBkYXRhIHNjcmVlbiIpLGhlKCkoKSgpKCksZGUoMTMsImNsci1kZy1jZWxsIiwzNSkoMTQsImJ1dHRvbiIsMzYpLE90KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIE9lKDUpLmRvd25sb2FkKGYudGFibGVJZCksQ3QoaC5zdG9wUHJv''@;'; put 'put ''cGFnYXRpb24oKSl9KSxHdCgxNSwiY2xyLWljb24iLDM3KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMiksQ3IoYS5iYXNlKSxmZSgyKSxDcihhLnN1Ym1pdHRlZCksZmUoMiksQ3IoYS5zdWJtaXRSZWFzb24pfX1mdW5jdGlvbiBXQXQoYyxsKXtpZigxJmMmJihk''@;'; put 'put ''ZSgwLCJkaXYiKSgxLCJjbHItZGF0YWdyaWQiLDIzKSgyLCJjbHItZGctY29sdW1uIiksUGUoMywiQkFTRSBUQUJMRSIpLGhlKCksZGUoNCwiY2xyLWRnLWNvbHVtbiIsMjQpLFBlKDUsIiBTVUJNSVRURUQgIiksR3QoNiwiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDI1KSxoZSgpLGRlKDcsImNs''@;'; put 'put ''ci1kZy1jb2x1bW4iLDI0KSxQZSg4LCIgU1VCTUlUIFJFQVNPTiAiKSxHdCg5LCJjbHItZGctc3RyaW5nLWZpbHRlciIsMjYpLGhlKCksZGUoMTAsImNsci1kZy1jb2x1bW4iLDEzKSxQZSgxMSwiQUNUSU9OIiksaGUoKSxkZSgxMiwiY2xyLWRnLWNvbHVtbiIsMTMpLFBlKDEzLCJET1dOTE9B''@;'; put 'put ''RCIpLGhlKCksZ3QoMTQsWkF0LDE2LDMsImNsci1kZy1yb3ciLDI3KSxkZSgxNSwiY2xyLWRnLWZvb3RlciIpKDE2LCJjbHItZGctcGFnaW5hdGlvbiIsMjgsMCkoMTgsImNsci1kZy1wYWdlLXNpemUiLDI5KSxQZSgxOSwiSXRlbXMgcGVyIHBhZ2UiKSxoZSgpLFBlKDIwKSxoZSgpKCkoKSgp''@;'; put 'put ''KSwyJmMpe2NvbnN0IGE9ZmEoMTcpLGQ9T2UoNCk7ZmUoNCksRWUoImNsckRnRmllbGQiLCJzdWJtaXR0ZWQiKSxmZSgyKSxFZSgiY2xyRGdTdHJpbmdGaWx0ZXIiLGQuc3VibWl0dGVkRmlsdGVyKSxmZSgpLEVlKCJjbHJEZ0ZpZWxkIiwic3VibWl0UmVhc29uIiksZmUoMiksRWUoImNsckRn''@;'; put 'put ''U3RyaW5nRmlsdGVyIixkLnN1Ym1pdFJlYXNvbkZpbHRlciksZmUoNSksRWUoImNsckRnSXRlbXNPZiIsZC5zdWJtaXR0ZXJMaXN0KSxmZSgyKSxFZSgiY2xyRGdQYWdlU2l6ZSIsMTApLGZlKDIpLEVlKCJjbHJQYWdlU2l6ZU9wdGlvbnMiLHRsKDEwLEhBdCkpLGZlKDIpLGszKCIgIixhLmZp''@;'; put 'put ''cnN0SXRlbSsxLCIgLSAiLGEubGFzdEl0ZW0rMSwiIG9mICIsYS50b3RhbEl0ZW1zLCIgc3VibWlzc2lvbnMgIil9fWZ1bmN0aW9uIFlBdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMjIpLGd0KDEsV0F0LDIxLDExLCJkaXYiLDMpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgzKTtmZSgpLEVl''@;'; put 'put ''KCJuZ0lmIixhLnN1Ym1pdHRlckxpc3QmJjAhPT1hLnJlbWFpbmVkKX19ZnVuY3Rpb24gR0F0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw2KSxndCgxLE5BdCw1LDAsImRpdiIsNyksZGUoMiwiZGl2Iiw4KSxndCgzLFZBdCwyLDAsImgzIiw5KSg0LEJBdCw1LDEsInAiLDEwKSxoZSgpLGd0''@;'; put 'put ''KDUsVUF0LDMsMiwiZGl2IiwxMSkoNixZQXQsMiwxLCJkaXYiLDEyKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoKSxFZSgibmdJZiIsMD09PWEucmVtYWluZWQmJmEubG9hZGVkKSxmZSgpLEVlKCJuZ0NsYXNzIixhNCg2LEZBdCwhYS5sb2FkZWQpKSxmZSgpLEVlKCJuZ0lmIiwwIT09''@;'; put 'put ''YS5yZW1haW5lZCksZmUoKSxFZSgibmdJZiIsYS5sb2FkZWQmJjAhPT1hLnJlbWFpbmVkKSxmZSgpLEVlKCJuZ0lmIiwhYS5sb2FkZWQpLGZlKCksRWUoIm5nSWYiLGEubG9hZGVkKX19ZnVuY3Rpb24gJEF0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw0KSxndCgxLEdBdCw3LDgsImRpdiIs''@;'; put 'put ''NSksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSxFZSgibmdJZiIsIWEuc3ViUmVhZHkpfX1mdW5jdGlvbiBLQXQoYyxsKXsxJmMmJihkZSgwLCJkaXYiKSxHdCgxLCJhcHAtYXBwcm92ZS1kZXRhaWxzIiksaGUoKSl9Y2xhc3MgWEF0e2FjY2VwdHMobCxhKXtyZXR1cm4gbC5zdWJtaXR0''@;'; put 'put ''ZWQudG9Mb3dlckNhc2UoKS5pbmRleE9mKGEudG9Mb3dlckNhc2UoKSk+PTB9fWNsYXNzIHFBdHthY2NlcHRzKGwsYSl7cmV0dXJuIGwuc3VibWl0UmVhc29uLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihhLnRvTG93ZXJDYXNlKCkpPj0wfX1sZXQgdGJlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0''@;'; put 'put ''b3IoYSxkLGgsZix2KXt0aGlzLnNhc1N0b3JlU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5yb3V0ZXI9aCx0aGlzLnJvdXRlPWYsdGhpcy5zYXNTZXJ2aWNlPXYsdGhpcy5yZW1haW5lZD0wLHRoaXMubG9hZGVkPSExLHRoaXMuc3ViUmVhZHk9ITEsdGhpcy5kZXRhaWxzT3Bl''@;'; put 'put ''bj0hMSx0aGlzLnN1Ym1pdHRlZEZpbHRlcj1uZXcgWEF0LHRoaXMuc3VibWl0UmVhc29uRmlsdGVyPW5ldyBxQXR9Z29Ub1N0YWdlKGEpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK2EpfWdvVG9EZXRhaWxzKGEpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9yZXZp''@;'; put 'put ''ZXcvc3VibWl0dGVkLyIrYSl9Z2V0RGV0YWlscyhhLGQpe3RoaXMuc3ViUmVhZHk9ITAsc2V0VGltZW91dCgoKT0+e3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnNlbmREZXRhaWxzKGEsZCx0aGlzLnN1Ym1pdERhdGEpfSwwKX1uZ09uSW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9u''@;'; put 'put ''Kigpe2NvbnN0IGQ9YS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudGFibGVJZDthLml0ZW1zTnVtPTEwO3RyeXtsZXQgaD15aWVsZCBhLnNhc1N0b3JlU2VydmljZS5nZXRTdWJtaXR0cygpO2lmKGEucmVtYWluZWQ9aC5mcm9tc2FzLmxlbmd0aCxhLnJlbWFpbmVkPjApe2Euc3VibWl0dGVyPWgu''@;'; put 'put ''ZnJvbXNhc1swXS5TVUJNSVRURURfQllfTk07bGV0IGY9aC5mcm9tc2FzLm1hcChmdW5jdGlvbih2KXtyZXR1cm57dGFibGVJZDp2LlRBQkxFX0lELGJhc2U6di5CQVNFX1RBQkxFLHN1Ym1pdHRlZDp2LlNVQk1JVFRFRF9PTl9EVFRNLHN1Ym1pdHRlcjp2LlNVQk1JVFRFRF9CWV9OTSxzdWJt''@;'; put 'put ''aXRSZWFzb246di5TVUJNSVRURURfUkVBU09OX1RYVH19KTtpZihhLnN1Ym1pdHRlckxpc3Q9ZixhLnN1Ym1pdERhdGE9aC5mcm9tc2FzLHR5cGVvZiBkPCJ1Iil7Y29uc3Qgdj1hLnN1Ym1pdHRlckxpc3QuZmluZEluZGV4KE09Pk0udGFibGVJZD09PWQpO3Y+LTEmJmEuZ2V0RGV0YWlscyhh''@;'; put 'put ''LnN1Ym1pdHRlckxpc3Rbdl0sdil9fWEubG9hZGVkPSEwfWNhdGNoKGgpe2EuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiZWRpdG9ycy9nZXRzdWJtaXRzIixoKX19KSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3JlYWR5U3ViPXRoaXMuc2FzU3RvcmVTZXJ2aWNlLnNldFN1''@;'; put 'put ''Ym1pdC5zdWJzY3JpYmUoYT0+e3RoaXMuc3ViUmVhZHk9YX0pLHRoaXMuX2JhY2tUb1N1Yj10aGlzLnNhc1N0b3JlU2VydmljZS5zZXRTdWJtaXRMaXN0LnN1YnNjcmliZShhPT57dGhpcy5zdWJSZWFkeT0hdGhpcy5zdWJSZWFkeSx0aGlzLmRldGFpbHNPcGVuPSExfSl9ZG93bmxvYWQoYSl7''@;'; put 'put ''bGV0IGQ9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksaD1kLnNlcnZlclVybCxmPWQuYXBwTG9jLHY9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihoK3YrIi8/X3Byb2dyYW09IitmKyIvc2VydmljZXMvYXVkaXRvcnMvZ2V0YXVkaXRmaWxl''@;'; put 'put ''JnRhYmxlPSIrYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUoTTIpLHFlKEVjKSxxZShubCkscWUodDApLHFlKEtzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc3VibWl0dGVyIl1dLGhv''@;'; put 'put ''c3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxzdGFuZGFsb25lOiExLGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWyJwYWdpbmF0aW9uIiwiIl0sWzEsInctMTAwIl0sWyJjbGFzcyIsImNvbnRlbnQtYXJlYSIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsi''@;'; put 'put ''Y2xhc3MiLCJjYXJkIiw0LCJuZ0lmIl0sWzEsImNhcmQiXSxbImNsYXNzIiwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiY2FyZC1oZWFkZXIiLDMsIm5nQ2xhc3MiXSxbImNsYXNzIiwiY2VudGVyIGNsci1jb2wtbWQtMTIgdGV4dC1jZW50ZXIiLDQsIm5n''@;'; put 'put ''SWYiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgZm9udC13ZWlnaHQtNzAwIGNvbG9yLWRhcmstZ3JheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJoLTcwdmggZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFz''@;'; put 'put ''cyIsImNsci1jb2wtbWQtMTIiLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJuby1zdWJtaXR0ZWQtdGFibGVzIiwiY2FyZC1ibG9jayIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1z''@;'; put 'put ''LWNlbnRlciJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSJdLFsxLCJjZW50ZXIiLCJjbHItY29sLW1kLTEyIiwidGV4dC1jZW50ZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJmb250LXdlaWdo''@;'; put 'put ''dC03MDAiLCJjb2xvci1kYXJrLWdyYXkiXSxbMSwiaC03MHZoIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbMSwic3Bpbm5lciJdLFsxLCJjbHItY29sLW1k''@;'; put 'put ''LTEyIl0sWzEsImRhdGFncmlkLWNvbXBhY3QiLCJkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIl0sWzMsImNsckRnRmllbGQiXSxbImFyaWEtbGFiZWwiLCJGaWx0ZXIgc3VibWl0dGVkIGRhdGUiLDMsImNsckRnU3RyaW5nRmlsdGVyIl0sWyJhcmlhLWxhYmVsIiwiRmlsdGVyIHN1Ym1pdCByZWFz''@;'; put 'put ''b24iLDMsImNsckRnU3RyaW5nRmlsdGVyIl0sWyJjbGFzcyIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayIsNCwiY2xyRGdJdGVtcyIsImNsckRnSXRlbXNPZiJdLFszLCJjbHJEZ1BhZ2VTaXplIl0sWzMsImNsclBhZ2VTaXplT3B0aW9ucyJdLFsxLCJjdXJzb3ItcG9pbnRlciIsMywiY2xp''@;'; put 'put ''Y2siXSxbInJvbGUiLCJ0b29sdGlwIiwiYXJpYS1sYWJlbCIsIkdvIHRvIHN0YWdlZCBkYXRhIHNjcmVlbiIsMSwicm93IiwianVzdGlmeS1jb250ZW50LWFyb3VuZCJdLFsxLCJjb2x1bW4tY2VudGVyIiwibGlua3MiLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtYm90dG9tLWxl''@;'; put 'put ''ZnQiLCJjb2xvci1ibHVlIiwzLCJjbGljayJdLFsic2hhcGUiLCJjb2RlIiwic2l6ZSIsIjI4Il0sWzEsInRvb2x0aXAtY29udGVudCJdLFsxLCJwLTAiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJhcmlhLWxhYmVsIiwiRG93bmxvYWQgYXVkaXQgZmlsZSBmb3IgdGFi''@;'; put 'put ''bGUgcmVjb3JkIiwxLCJidG4iLCJidG4tc3VjY2VzcyIsMywiY2xpY2siXSxbInNoYXBlIiwiZG93bmxvYWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDEpLGd0KDEsJEF0LDIsMSwiZGl2IiwyKSgyLEtBdCwyLDAsImRpdiIsMyksaGUoKSksMiZkJiYoZmUo''@;'; put 'put ''KSxFZSgibmdJZiIsIWguc3ViUmVhZHkpLGZlKCksRWUoIm5nSWYiLGguc3ViUmVhZHkpKX0sZGVwZW5kZW5jaWVzOltSdSxDYSxfNixXMyxaOSxUSCxUdyxtQSxBSCx5NixiNCxXOSxEdyxiNixqOSx2Nix6OSxTdyxVbCxlYmVdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29u''@;'; put 'put ''c3QgSkF0PShjLGwpPT4oe3JlamVjdGVkOmMsYWNjZXB0ZWQ6bH0pO2Z1bmN0aW9uIFFBdChjLGwpezEmYyYmKGRlKDAsImRpdiIsMTIpLEd0KDEsImNsci1pY29uIiwxMyksZGUoMiwiaDMiLDE0KSxQZSgzLCJUaGVyZSBpcyBubyBoaXN0b3J5IHRvIHNob3ciKSxoZSgpKCkpfWZ1bmN0aW9u''@;'; put 'put ''IGVrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImEiLDE3KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpLiRpbXBsaWNpdCxmPU9lKCk7cmV0dXJuIEN0KGYuZ2V0VGFibGUoZi5hcHByb3ZlRGF0YVtoXSkpfSksUGUoMSksaGUoKX1pZigyJmMpe2Nv''@;'; put 'put ''bnN0IGE9T2UoKS4kaW1wbGljaXQsZD1PZSgpO2ZlKCksQ3IoZC5hcHByb3ZlRGF0YVthXSl9fWZ1bmN0aW9uIHRrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIpKDEsImEiLDE3KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpLiRpbXBsaWNp''@;'; put 'put ''dCxmPU9lKCk7cmV0dXJuIEN0KGYuZ2V0QmFzZVRhYmxlKGYuYXBwcm92ZURhdGFbaF0pKX0pLFBlKDIsIlZJRVciKSxoZSgpLGRlKDMsInNwYW4iKSxQZSg0LCIgLyAiKSxoZSgpLGRlKDUsImEiLDE3KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpLiRpbXBsaWNp''@;'; put 'put ''dCxmPU9lKCk7cmV0dXJuIEN0KGYuZ2V0RWRpdFRhYmxlKGYuYXBwcm92ZURhdGFbaF0pKX0pLFBlKDYsIkVESVQiKSxoZSgpKCl9fWZ1bmN0aW9uIG5rdChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQsZD1PZSgpO2Zl''@;'; put 'put ''KCksQ3IoZC5hcHByb3ZlRGF0YVthXSl9fWZ1bmN0aW9uIHJrdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDYpLFBlKDIpLGhlKCksZGUoMywidGQiLDYpLGd0KDQsZWt0LDIsMSwiYSIsMTUpKDUsdGt0LDcsMCwiZGl2IiwxNikoNixua3QsMiwxLCJzcGFuIiwxNiksaGUoKSgp''@;'; put 'put ''KSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4O2ZlKDIpLENyKGEpLGZlKDIpLEVlKCJuZ0lmIixkPDEpLGZlKCksRWUoIm5nSWYiLGQ8MiYmZD49MSksZmUoKSxFZSgibmdJZiIsZD49Mil9fWZ1bmN0aW9uIGlrdChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDIwKSxQZSgxLCIg''@;'; put 'put ''TG9hZGluZy4uLiAiKSxoZSgpKX1mdW5jdGlvbiBha3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiKSgxLCJoMyIpLFBlKDIsIkxvYWRpbmcgaGlzdG9yeSIpLGhlKCkoKSl9ZnVuY3Rpb24gb2t0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxOCksZ3QoMSxpa3QsMiwwLCJzcGFuIiwxOSkoMixh''@;'; put 'put ''a3QsMywwLCJkaXYiLDE2KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLEVlKCJuZ0lmIiwhYS5sb2FkZWQpLGZlKCksRWUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIHNrdChjLGwpezEmYyYmKGRlKDAsImgzIiwyOCksUGUoMSwiSElTVE9SWSIpLGhlKCkpfWZ1bmN0aW9uIGxr''@;'; put 'put ''dChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDI5KSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoKSxJcigiIFRvIHVubG9jayBtb3JlIHRoYW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCwiIHJlY29yZHMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRh''@;'; put 'put ''Y29udHJvbGxlci5pbyAiKX19ZnVuY3Rpb24gY2t0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLWRnLXJvdyIsMzkpLE90KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoMykuZ2V0QXBwckluZGV4KGgpKX0pLGRlKDEs''@;'; put 'put ''ImNsci1kZy1jZWxsIiw0MCkoMiwiYSIsNDEpLE90KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoMykuZ2V0QmFzZVRhYmxlKGguYmFzZXRhYmxlKSl9KSxQZSgzKSxoZSgpKCksZGUoNCwiY2xyLWRnLWNlbGwiLDQyKSxQZSg1KSxoZSgp''@;'; put 'put ''LGRlKDYsImNsci1kZy1jZWxsIiw0MCksUGUoNyksaGUoKSxkZSg4LCJjbHItZGctY2VsbCIsNDApLFBlKDkpLGhlKCksZGUoMTAsImNsci1kZy1jZWxsIiw0MCksUGUoMTEpLGhlKCksZGUoMTIsImNsci1kZy1jZWxsIiw0MCksUGUoMTMpLGhlKCksZGUoMTQsImNsci1kZy1jZWxsIiw0Myko''@;'; put 'put ''MTUsImJ1dHRvbiIsNDQpLE90KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIE9lKDMpLmRvd25sb2FkKGYudGFibGVJZCksQ3QoaC5zdG9wUHJvcGFnYXRpb24oKSl9KSxHdCgxNiwiY2xyLWljb24iLDQ1KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0''@;'; put 'put ''IGE9bC4kaW1wbGljaXQ7ZmUoMyksQ3IoYS5iYXNldGFibGUpLGZlKCksRWUoIm5nQ2xhc3MiLG80KDcsSkF0LCJSRUpFQ1RFRCI9PT1hLnN0YXR1cywiQVBQUk9WRUQiPT09YS5zdGF0dXMpKSxmZSgpLENyKGEuc3RhdHVzKSxmZSgyKSxDcihhLnN1Ym1pdHRlciksZmUoMiksQ3IoYS5zdWJt''@;'; put 'put ''aXR0ZWRSZWFzb24pLGZlKDIpLENyKGEuc3VibWl0dGVkKSxmZSgyKSxDcihhLnJldmlld2VkKX19ZnVuY3Rpb24gdWt0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWRhdGFncmlkIiwzMCkoMSwiY2xyLWRnLWNvbHVtbiIsMzEpLFBlKDIsIiBCQVNFX1RBQkxFICIpLEd0KDMsImNsci1kZy1z''@;'; put 'put ''dHJpbmctZmlsdGVyIiwzMiksaGUoKSxkZSg0LCJjbHItZGctY29sdW1uIiwzMSksUGUoNSwiIFNUQVRVUyAiKSxHdCg2LCJjbHItZGctc3RyaW5nLWZpbHRlciIsMzMpLGhlKCksZGUoNywiY2xyLWRnLWNvbHVtbiIsMzEpLFBlKDgsIiBTVUJNSVRURVIgIiksR3QoOSwiY2xyLWRnLXN0cmlu''@;'; put 'put ''Zy1maWx0ZXIiLDM0KSxoZSgpLGRlKDEwLCJjbHItZGctY29sdW1uIiwzMSksUGUoMTEsIiBTVUJNSVQgUkVBU09OICIpLEd0KDEyLCJjbHItZGctc3RyaW5nLWZpbHRlciIsMzUpLGhlKCksZGUoMTMsImNsci1kZy1jb2x1bW4iLDMxKSxQZSgxNCwiIFNVQk1JVFRFRCAiKSxHdCgxNSwiY2xy''@;'; put 'put ''LWRnLXN0cmluZy1maWx0ZXIiLDM2KSxoZSgpLGRlKDE2LCJjbHItZGctY29sdW1uIiwzMSksUGUoMTcsIiBBUFBST1ZFRCAvIFJFSkVDVEVEICIpLEd0KDE4LCJjbHItZGctc3RyaW5nLWZpbHRlciIsMzcpLGhlKCksZGUoMTksImNsci1kZy1jb2x1bW4iKSxQZSgyMCwiRE9XTkxPQUQiKSxo''@;'; put 'put ''ZSgpLGd0KDIxLGNrdCwxNywxMCwiY2xyLWRnLXJvdyIsMzgpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLEVlKCJjbHJEZ0ZpZWxkIiwiYmFzZXRhYmxlIiksZmUoMiksRWUoImNsckRnU3RyaW5nRmlsdGVyIixhLmJhc2VUYWJsZUZpbHRlciksZmUoKSxFZSgiY2xyRGdGaWVsZCIs''@;'; put 'put ''InN0YXR1cyIpLGZlKDIpLEVlKCJjbHJEZ1N0cmluZ0ZpbHRlciIsYS5zdGF0dXNGaWx0ZXIpLGZlKCksRWUoImNsckRnRmllbGQiLCJzdWJtaXR0ZXIiKSxmZSgyKSxFZSgiY2xyRGdTdHJpbmdGaWx0ZXIiLGEuc3VibWl0dGVyRmlsdGVyKSxmZSgpLEVlKCJjbHJEZ0ZpZWxkIiwic3VibWl0''@;'; put 'put ''dGVkUmVhc29uIiksZmUoMiksRWUoImNsckRnU3RyaW5nRmlsdGVyIixhLnN1Ym1pdFJlYXNvbkZpbHRlciksZmUoKSxFZSgiY2xyRGdGaWVsZCIsInN1Ym1pdHRlZCIpLGZlKDIpLEVlKCJjbHJEZ1N0cmluZ0ZpbHRlciIsYS5zdWJtaXR0ZWRGaWx0ZXIpLGZlKCksRWUoImNsckRnRmllbGQi''@;'; put 'put ''LCJyZXZpZXdlZCIpLGZlKDIpLEVlKCJjbHJEZ1N0cmluZ0ZpbHRlciIsYS5yZXZpZXdlZEZpbHRlciksZmUoMyksRWUoImNsckRnSXRlbXNPZiIsYS5oaXN0b3J5KX19ZnVuY3Rpb24gZGt0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiYnV0dG9uIiw0NiksT3QoImNsaWNrIixm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5sb2FkRGF0YSgpKX0pLFBlKDEpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKDIpO0VlKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdNb3JlKSxmZSgpLElyKCIgTG9hZCAiLGEucm93c0xlZnRUb0xvYWQsIiBtb3JlICIpfX1mdW5jdGlvbiBo''@;'; put 'put ''a3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDIxKSgxLCJkaXYiLDIyKSxndCgyLHNrdCwyLDAsImgzIiwyMykoMyxsa3QsMiwxLCJwIiwyNCksaGUoKSxndCg0LHVrdCwyMiwxMywiY2xyLWRhdGFncmlkIiwyNSksZGUoNSwiZGl2IiwyNiksZ3QoNixka3QsMiwyLCJidXR0b24iLDI3KSxo''@;'; put 'put ''ZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDIpLEVlKCJuZ0lmIixhLmxvYWRlZCksZmUoKSxFZSgibmdJZiIsYS5saWNlbmNlU3RhdGUudmFsdWUuaGlzdG9yeV9yb3dzX2FsbG93ZWQhPT1hLkluZmluaXR5KSxmZSgpLEVlKCJuZ0lmIixhLmxvYWRlZCksZmUoMiksRWUoIm5nSWYiLGEu''@;'; put 'put ''bGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkPT09YS5JbmZpbml0eSYmYS5yb3dzTGVmdFRvTG9hZD4wKX19Y2xhc3MgZmt0e2FjY2VwdHMobCxhKXtyZXR1cm4gbC5iYXNldGFibGUudG9Mb3dlckNhc2UoKS5pbmRleE9mKGEudG9Mb3dlckNhc2UoKSk+PTB9fWNsYXNz''@;'; put 'put ''IHBrdHthY2NlcHRzKGwsYSl7cmV0dXJuIGwuc3RhdHVzLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihhLnRvTG93ZXJDYXNlKCkpPj0wfX1jbGFzcyBna3R7YWNjZXB0cyhsLGEpe3JldHVybiBsLnN1Ym1pdHRlci50b0xvd2VyQ2FzZSgpLmluZGV4T2YoYS50b0xvd2VyQ2FzZSgpKT49MH19Y2xh''@;'; put 'put ''c3MgbWt0e2FjY2VwdHMobCxhKXtyZXR1cm4gbC5zdWJtaXR0ZWRSZWFzb24udG9Mb3dlckNhc2UoKS5pbmRleE9mKGEudG9Mb3dlckNhc2UoKSk+PTB9fWNsYXNzIHZrdHthY2NlcHRzKGwsYSl7cmV0dXJuIGwuc3VibWl0dGVkLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihhLnRvTG93ZXJDYXNl''@;'; put 'put ''KCkpPj0wfX1jbGFzcyB5a3R7YWNjZXB0cyhsLGEpe3JldHVybiBsLnJldmlld2VkLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihhLnRvTG93ZXJDYXNlKCkpPj0wfX1jb25zdCBia3Q9W3twYXRoOiJhcHByb3ZlIixjb21wb25lbnQ6UEF0fSx7cGF0aDoiYXBwcm92ZURldC86dGFibGVJZCIsY29t''@;'; put 'put ''cG9uZW50OmViZX0se3BhdGg6InN1Ym1pdHRlZCIsY29tcG9uZW50OnRiZX0se3BhdGg6InN1Ym1pdHRlZC86dGFibGVJZCIsY29tcG9uZW50OnRiZX0se3BhdGg6Imhpc3RvcnkiLGNvbXBvbmVudDooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5saWNlbmNlU2Vy''@;'; put 'put ''dmljZT1hLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPWQsdGhpcy5ldmVudFNlcnZpY2U9aCx0aGlzLnJvdXRlcj1mLHRoaXMuc2FzU2VydmljZT12LHRoaXMuaGlzdG9yeT1bXSx0aGlzLnRhYmxlVGl0bGVzPVtdLHRoaXMuaGlzdG9yeUFycj1bXSx0aGlzLmxvYWRlZD0hMSx0aGlzLml0ZW1zTnVt''@;'; put 'put ''PTEwLHRoaXMub3Blbk1vZGFsPSExLHRoaXMubm9EYXRhPSExLHRoaXMuYXBwcm92ZURhdGE9e30sdGhpcy5zYXNqc0NvbmZpZz1uZXcgZDIuU0FTanNDb25maWcsdGhpcy5iYXNlVGFibGVGaWx0ZXI9bmV3IGZrdCx0aGlzLnN0YXR1c0ZpbHRlcj1uZXcgcGt0LHRoaXMuc3VibWl0dGVyRmls''@;'; put 'put ''dGVyPW5ldyBna3QsdGhpcy5zdWJtaXRSZWFzb25GaWx0ZXI9bmV3IG1rdCx0aGlzLnN1Ym1pdHRlZEZpbHRlcj1uZXcgdmt0LHRoaXMucmV2aWV3ZWRGaWx0ZXI9bmV3IHlrdCx0aGlzLmhpc3RQYXJhbXM9e0hJU1Q6MCxTVEFSVFJPVzoxLE5PQlM6LTF9LHRoaXMubG9hZGluZ01vcmU9ITEs''@;'; put 'put ''dGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5JbmZpbml0eT0xLzAsdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKX1nZXRUYWJsZShhKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2Uv''@;'; put 'put ''IithKX1nZXRCYXNlVGFibGUoYSl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YS8iK2EpfWdldEVkaXRUYWJsZShhKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZWRpdG9yLyIrYSl9Z2V0QXBwckluZGV4KGEpe2NvbnN0IGQ9dGhpcy5oaXN0b3J5QXJyLmZpbmRJ''@;'; put 'put ''bmRleChoPT5oLlRBQkxFX0lEPT09YS50YWJsZUlkKTtkPi0xJiYodGhpcy5hcHByb3ZlRGF0YT10aGlzLmhpc3RvcnlBcnJbZF0sdGhpcy5vcGVuTW9kYWw9ITApfWdldCByb3dzTGVmdFRvTG9hZCgpe2NvbnN0IGE9dGhpcy5oaXN0UGFyYW1zLk5PQlMtdGhpcy5oaXN0b3J5Lmxlbmd0aCxk''@;'; put 'put ''PXRoaXMuaGlzdFBhcmFtcy5ISVNUO3JldHVybiBhPD0wPzA6YT5kP2Q6YX1kb3dubG9hZChhKXtsZXQgZD10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSxoPWQuc2VydmVyVXJsLGY9ZC5hcHBMb2Msdj10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO3dpbmRvdy5v''@;'; put 'put ''cGVuKGgrdisiLz9fcHJvZ3JhbT0iK2YrIi9zZXJ2aWNlcy9hdWRpdG9ycy9nZXRhdWRpdGZpbGUmdGFibGU9IithKyImX2NvbnRleHRuYW1lPSIrdGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZSl9bG9hZERhdGEoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgZD17''@;'; put 'put ''U1RBUlRST1c6YS5oaXN0UGFyYW1zLkhJU1QrYS5oaXN0UGFyYW1zLlNUQVJUUk9XfTthLmxvYWRpbmdNb3JlPSEwO3RyeXtsZXQgZixoPXlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmdldEhpc3RvcnkoZCwiQnJvd3NlclBhcmFtcyIsImFwcHJvdmVycy9nZXRoaXN0b3J5Iik7YS5sb2FkaW5n''@;'; put 'put ''TW9yZT0hMSxhLmhpc3RQYXJhbXM9aC5oaXN0cGFyYW1zWzBdO2NvbnN0IHY9aC5mcm9tc2FzLnNsaWNlKDAsYS5saWNlbmNlU3RhdGUudmFsdWUuaGlzdG9yeV9yb3dzX2FsbG93ZWQpO2lmKHYubGVuZ3RoPjApe2NvbnN0IE09djthLmhpc3RvcnlBcnI9dixmPU9iamVjdC5rZXlzKE1bMF0p''@;'; put 'put ''LGEudGFibGVUaXRsZXM9ZjtsZXQgRD12Lm1hcChmdW5jdGlvbihVKXtyZXR1cm57dGFibGVJZDpVLlRBQkxFX0lELHN1Ym1pdHRlcjpVLlNVQk1JVFRFUixzdWJtaXR0ZWRSZWFzb246VS5TVUJNSVRURURfUkVBU09OX1RYVCxzdWJtaXR0ZWQ6VS5TVUJNSVRURUQsc3RhdHVzOlUuU1RBVFVT''@;'; put 'put ''LHJldmlld1JlYXNvbjpVLlJFVklFV19SRUFTT05fVFhULHJldmlld2VyOlUuUkVWSUVXRVIscmV2aWV3ZWQ6VS5SRVZJRVdFRCxudW1PZkFwcHJvdmFsczpVLk5VTV9PRl9BUFBST1ZBTFNfUkVRVUlSRUQsYmFzZXRhYmxlOlUuQkFTRV9UQUJMRX19KTthLmhpc3RvcnkucHVzaCguLi5EKSxh''@;'; put 'put ''LmxvYWRlZD0hMH1lbHNlIGEubG9hZGVkPSEwLDA9PT1hLmhpc3RvcnkubGVuZ3RoJiYoYS5ub0RhdGE9ITApfWNhdGNoKGgpe2EuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiYXBwcm92ZXJzL2dldGhpc3RvcnkiLGgpLGEubG9hZGluZ01vcmU9ITF9fSkoKX1uZ09uSW5pdCgp''@;'; put 'put ''e3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2EubG9hZERhdGEoKX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUoTzEpLHFlKE0yKSxxZShFYykscWUobmwpLHFlKEtzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1hcih7''@;'; put 'put ''dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtaGlzdG9yeSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sc3RhbmRhbG9uZTohMSxkZWNsczoyMCx2YXJzOjYsY29uc3RzOltbMSwiY29udGVudC1hcmVhIl0sWyJpZCIsIm5vRGF0YUNvbnRhaW5lciIsImNsYXNzIiwiY2FyZC1i''@;'; put 'put ''bG9jayBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHki''@;'; put 'put ''XSxbMSwidGFibGUiXSxbMSwibGVmdCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwiYXJpYS1sYWJlbCIsIkNsb3NlIG1vZGFsIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbImNsYXNzIiwiaC03MHZoIGQtZmxl''@;'; put 'put ''eCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJjYXJkIiw0LCJuZ0lmIl0sWyJpZCIsIm5vRGF0YUNvbnRhaW5lciIsMSwiY2FyZC1ibG9jayIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIi''@;'; put 'put ''LCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSJdLFsiY2xhc3MiLCJjdXJzb3ItcG9pbnRlciB0YWJsZS1saW5rIiwzLCJjbGlj''@;'; put 'put ''ayIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsImN1cnNvci1wb2ludGVyIiwidGFibGUtbGluayIsMywiY2xpY2siXSxbMSwiaC03MHZoIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFzcyIsInNwaW5u''@;'; put 'put ''ZXIiLDQsIm5nSWYiXSxbMSwic3Bpbm5lciJdLFsxLCJjYXJkIl0sWzEsImNhcmQtaGVhZGVyIl0sWyJjbGFzcyIsImNlbnRlciBjbHItY29sLW1kLTEyIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGZvbnQtd2VpZ2h0LTcwMCBjb2xvci1kYXJrLWdyYXki''@;'; put 'put ''LDQsIm5nSWYiXSxbImNsYXNzIiwiZGF0YWdyaWQtaGlzdG9yeSBkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIiw0LCJuZ0lmIl0sWzEsImxvYWQtbW9yZSIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xhc3MiLCJidG4g''@;'; put 'put ''YnRuLXN1Y2Nlc3MiLDMsImNsckxvYWRpbmciLCJjbGljayIsNCwibmdJZiJdLFsxLCJjZW50ZXIiLCJjbHItY29sLW1kLTEyIiwidGV4dC1jZW50ZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJmb250LXdlaWdodC03MDAiLCJjb2xvci1kYXJrLWdyYXkiXSxbMSwiZGF0YWdyaWQtaGlzdG9yeSIs''@;'; put 'put ''ImRhdGFncmlkLWN1c3RvbS1mb290ZXIiXSxbMywiY2xyRGdGaWVsZCJdLFsiYXJpYS1sYWJlbCIsIkZpbHRlciBiYXNlIHRhYmxlIiwzLCJjbHJEZ1N0cmluZ0ZpbHRlciJdLFsiYXJpYS1sYWJlbCIsIkZpbHRlciBzdGF0dXMiLDMsImNsckRnU3RyaW5nRmlsdGVyIl0sWyJhcmlhLWxhYmVs''@;'; put 'put ''IiwiRmlsdGVyIHN1Ym1pdHRlciIsMywiY2xyRGdTdHJpbmdGaWx0ZXIiXSxbImFyaWEtbGFiZWwiLCJGaWx0ZXIgc3VibWl0IHJlYXNvbiIsMywiY2xyRGdTdHJpbmdGaWx0ZXIiXSxbImFyaWEtbGFiZWwiLCJGaWx0ZXIgc3VibWl0dGVkIGRhdGUiLDMsImNsckRnU3RyaW5nRmlsdGVyIl0s''@;'; put 'put ''WyJhcmlhLWxhYmVsIiwiRmlsdGVyIHJldmlld2VkIGRhdGUiLDMsImNsckRnU3RyaW5nRmlsdGVyIl0sWzMsImNsaWNrIiw0LCJjbHJEZ0l0ZW1zIiwiY2xyRGdJdGVtc09mIl0sWzMsImNsaWNrIl0sWzEsInZlckNlbnRlciJdLFsxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsIm0tMCIs''@;'; put 'put ''MywiY2xpY2siXSxbMSwidmVyQ2VudGVyIiwzLCJuZ0NsYXNzIl0sWzEsInZlckNlbnRlciIsInAtMCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImFyaWEtbGFiZWwiLCJEb3dubG9hZCBhdWRpdCBmaWxlIiwxLCJidG4iLCJidG4tc3VjY2VzcyIsMywiY2xpY2siXSxb''@;'; put 'put ''InNoYXBlIiwiZG93bmxvYWQiXSxbMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIsMCksZ3QoMSxRQXQsNCwwLCJkaXYiLDEpLGRlKDIsImNsci1tb2RhbCIsMiksY2koImNsck1vZGFs''@;'; put 'put ''T3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGZpKGgub3Blbk1vZGFsLHYpfHwoaC5vcGVuTW9kYWw9diksdn0pLGRlKDMsImg0IiwzKSxQZSg0LCJBcHByb3ZhbCBkZXRhaWxzIiksaGUoKSxkZSg1LCJkaXYiLDQpKDYsInRhYmxlIiw1KSg3LCJ0aGVhZCIpKDgsInRyIikoOSwidGgi''@;'; put 'put ''LDYpLFBlKDEwLCJOYW1lIiksaGUoKSxkZSgxMSwidGgiLDYpLFBlKDEyLCJWYWx1ZSIpLGhlKCkoKSgpLGRlKDEzLCJ0Ym9keSIpLGd0KDE0LHJrdCw3LDQsInRyIiw3KSxoZSgpKCkoKSxkZSgxNSwiZGl2Iiw4KSgxNiwiYnV0dG9uIiw5KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IGgub3Blbk1vZGFsPSExfSksUGUoMTcsIiBPSyAiKSxoZSgpKCkoKSxndCgxOCxva3QsMywyLCJkaXYiLDEwKSgxOSxoa3QsNyw0LCJkaXYiLDExKSxoZSgpKSwyJmQmJihmZSgpLEVlKCJuZ0lmIixoLm5vRGF0YSksZmUoKSxsaSgiY2xyTW9kYWxPcGVuIixoLm9wZW5Nb2RhbCksRWUoImNs''@;'; put 'put ''ck1vZGFsU2l6ZSIsInhsIiksZmUoMTIpLEVlKCJuZ0Zvck9mIixoLnRhYmxlVGl0bGVzKSxmZSg0KSxFZSgibmdJZiIsIWgubG9hZGVkKSxmZSgpLEVlKCJuZ0lmIiwhaC5ub0RhdGEmJmgubG9hZGVkKSl9LGRlcGVuZGVuY2llczpbUnUsaHMsQ2EsXzYsVzMsWjksVHcseTYsYjQsVzksRHcs''@;'; put 'put ''YjYsajksdjYsejksU3csVWwsYnUscjAsYzEsTGZdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCl9XTtsZXQgX2t0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1FaSh7''@;'; put 'put ''dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPXlpKHtpbXBvcnRzOltOYSxldS5mb3JDaGlsZChia3QpLGV1XX0pfX1yZXR1cm4gY30pKCksd2t0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlz''@;'; put 'put ''Llx1MDI3NW1vZD1FaSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPXlpKHtpbXBvcnRzOltOYSxVYyxfa3QsdTEsZnksbjMscFNdfSl9fXJldHVybiBjfSkoKSxDa3Q9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9''@;'; put 'put ''ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPWFyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1yZXZpZXctcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLHN0YW5kYWxvbmU6ITEsZGVjbHM6MSx2YXJzOjAsdGVtcGxh''@;'; put 'put ''dGU6ZnVuY3Rpb24oZCxoKXsxJmQmJkd0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltRZ10sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCBTa3Q9KGMsbCk9Pih7cmVqZWN0ZWQ6YyxhY2NlcHRlZDpsfSk7ZnVuY3Rpb24gTWt0KGMsbCl7MSZjJiYoZGUo''@;'; put 'put ''MCwic3BhbiIsNiksUGUoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24geGt0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxQZSgyLCJMb2FkaW5nIHN1Ym1pdHRlZCB0YWJsZSIpLGhlKCkoKSl9ZnVuY3Rpb24gRWt0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw0KSxn''@;'; put 'put ''dCgxLE1rdCwyLDAsInNwYW4iLDUpKDIseGt0LDMsMCwiZGl2IiwzKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLEVlKCJuZ0lmIiwhYS5sb2FkZWQpLGZlKCksRWUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIFRrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImJ1''@;'; put 'put ''dHRvbiIsMjgpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikuYXBwcm92ZVRhYmxlU2NyZWVuKCkpfSksUGUoMSwiIEFwcHJvdmUgIiksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7RWUoImRpc2FibGVkIiwiQVBQUk9WRUQiPT09KG51bGw9PWEudGFibGVE''@;'; put 'put ''ZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuUkVWSUVXX1NUQVRVU19JRCl8fCJSRUpFQ1RFRCI9PT0obnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5SRVZJRVdfU1RBVFVTX0lEKSkoImRpc2FibGVkIixhLnJldmVydGluZ0NoYW5nZXMpfX1mdW5jdGlvbiBBa3Qo''@;'; put 'put ''YyxsKXsxJmMmJihkZSgwLCJjbHItdG9vbHRpcC1jb250ZW50IiwzMSkoMSwic3BhbiIpLFBlKDIsIiBSZXZlcnQgdGhpcyBhbmQgYWxsIHN1YnNlcXVlbnQgY2hhbmdlcyAiKSxoZSgpKCkpfWZ1bmN0aW9uIGtrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImJ1dHRvbiIsMjkp''@;'; put 'put ''LE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikucmV2ZXJ0Q2hhbmdlcygpKX0pLFBlKDEsIiBSRVZFUlQgIiksZ3QoMixBa3QsMywwLCJjbHItdG9vbHRpcC1jb250ZW50IiwzMCksaGUoKX0yJmMmJkVlKCJjbHJMb2FkaW5nIixPZSgyKS5yZXZlcnRpbmdDaGFu''@;'; put 'put ''Z2VzKX1mdW5jdGlvbiBEa3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiKSgxLCJkaXYiLDcpKDIsImRpdiIsOCkoMywiaDQiLDkpLFBlKDQsIlN0YWdlZCBEYXRhIiksaGUoKSgpKCksZGUoNSwiZGl2IiwxMCkoNiwiZGl2IiwxMSkoNywiZGl2IiwxMikoOCwiZGl2Iiw4''@;'; put 'put ''KSxQZSg5LCJCYXNpYyBTdWJtaXR0ZWQgRGV0YWlscyIpLGhlKCkoKSxkZSgxMCwiZGl2IikoMTEsInNwYW4iKSxQZSgxMiwiVGFibGUgSWQ6IiksaGUoKSxkZSgxMywic3Ryb25nIikoMTQsInNwYW4iKSxQZSgxNSksaGUoKSgpKCksZGUoMTYsImRpdiIpKDE3LCJzcGFuIiksUGUoMTgsIkJh''@;'; put 'put ''c2UgVGFibGU6IiksaGUoKSxkZSgxOSwiYSIsMTMpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS52aWV3ZXJUYWJsZVNjcmVlbigpKX0pLFBlKDIwKSxoZSgpKCksZGUoMjEsImRpdiIpKDIyLCJzcGFuIiksUGUoMjMsIlN1Ym1pdCBEYXRlOiIpLGhlKCksZGUo''@;'; put 'put ''MjQsInNwYW4iLDE0KSxQZSgyNSksaGUoKSgpLGRlKDI2LCJkaXYiKSgyNywic3BhbiIpLFBlKDI4LCJSZXZpZXcgU3RhdHVzOiIpLGhlKCksZGUoMjksInNwYW4iLDE1KSxQZSgzMCksaGUoKSgpKCksZGUoMzEsImRpdiIsMTYpKDMyLCJkaXYiLDEyKSgzMywiZGl2Iiw4KSxQZSgzNCwiQWN0''@;'; put 'put ''aW9ucyIpLGhlKCkoKSxkZSgzNSwiZGl2IiwxNykoMzYsImRpdiIsMTgpKDM3LCJidXR0b24iLDE5KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkudmlld2VyVGFibGVTY3JlZW4oKSl9KSxQZSgzOCwiIFZpZXcgYmFzZSB0YWJsZSAiKSxoZSgpLGd0KDM5LFRr''@;'; put 'put ''dCwyLDIsImJ1dHRvbiIsMjApLGRlKDQwLCJidXR0b24iLDIxKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuZ29CYWNrKCkpfSksUGUoNDEsIiBFZGl0IGJhc2UgdGFibGUgIiksaGUoKSxkZSg0MiwiYnV0dG9uIiwyMiksT3QoImNsaWNrIixmdW5jdGlvbigp''@;'; put 'put ''e3d0KGEpO2NvbnN0IGg9T2UoKTtyZXR1cm4gQ3QoaC5kb3dubG9hZChudWxsPT1oLnRhYmxlRGV0YWlscz9udWxsOmgudGFibGVEZXRhaWxzLlRBQkxFX0lEKSl9KSxHdCg0MywiY2xyLWljb24iLDIzKSxoZSgpLGRlKDQ0LCJjbHItdG9vbHRpcCIpLGd0KDQ1LGtrdCwzLDEsImJ1dHRvbiIs''@;'; put 'put ''MjQpLGhlKCkoKSgpKCkoKSxkZSg0NiwiZGl2IiwyNSksR3QoNDcsImhvdC10YWJsZSIsMjYpLGhlKCksR3QoNDgsImRpdiIsMjcpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKCk7ZmUoMTUpLElyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlRBQkxFX0lE''@;'; put 'put ''LCIiKSxmZSg1KSxJcigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5CQVNFX1RBQkxFLCIgIiksZmUoNSksSXIoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuU1VCTUlUVEVEX09OX0RUVE0sIiAiKSxmZSg0KSxFZSgibmdD''@;'; put 'put ''bGFzcyIsbzQoMTIsU2t0LCJSRUpFQ1RFRCI9PT0obnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5SRVZJRVdfU1RBVFVTX0lEKSwiQVBQUk9WRUQiPT09KG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuUkVWSUVXX1NUQVRVU19JRCkpKSxO''@;'; put 'put ''cigiYXJpYS1sYWJlbCIsIlJldmlldyBzdGF0dXM6ICIrKG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuUkVWSUVXX1NUQVRVU19JRCkpLGZlKCksSXIoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuUkVWSUVXX1NUQVRVU19JRCwi''@;'; put 'put ''ICIpLGZlKDcpLEVlKCJkaXNhYmxlZCIsYS5yZXZlcnRpbmdDaGFuZ2VzKSxmZSgyKSxFZSgibmdJZiIsIllFUyIhPT0obnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5BTExPV19SRVNUT1JFKSksZmUoKSxFZSgiZGlzYWJsZWQiLGEucmV2ZXJ0aW5nQ2hhbmdlcyks''@;'; put 'put ''ZmUoNSksRWUoIm5nSWYiLCJZRVMiPT09KG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuQUxMT1dfUkVTVE9SRSkpLGZlKDIpLEVlKCJkYXRhIixhLmhvdFRhYmxlLmRhdGEpKCJzZXR0aW5ncyIsYS5ob3RUYWJsZVNldHRpbmdzKX19Y29uc3QgSWt0PVt7cGF0aDoi''@;'; put 'put ''OnRhYmxlSWQiLGNvbXBvbmVudDooKCk9PntjbGFzcyBje2dldCBob3RUYWJsZVNldHRpbmdzKCl7cmV0dXJuey4uLnRoaXMuaG90VGFibGUuc2V0dGluZ3MsY29sSGVhZGVyczp0aGlzLmhvdFRhYmxlLmNvbEhlYWRlcnMsY29sdW1uczp0aGlzLmhvdFRhYmxlLmNvbHVtbnMsbWF4Um93czp0''@;'; put 'put ''aGlzLmhvdFRhYmxlLm1heFJvd3MsaGVpZ2h0OnRoaXMuaG90VGFibGUuaGVpZ2h0LGxpY2Vuc2VLZXk6dGhpcy5ob3RUYWJsZS5saWNlbnNlS2V5LGFmdGVyR2V0Q29sSGVhZGVyOnRoaXMuaG90VGFibGUuYWZ0ZXJHZXRDb2xIZWFkZXIsYWZ0ZXJJbml0OnRoaXMuaG90VGFibGUuYWZ0ZXJJ''@;'; put 'put ''bml0LHN0cmV0Y2hIOiJhbGwiLGNlbGxzOnRoaXMuaG90VGFibGUuY2VsbHMsY2xhc3NOYW1lOiJodERhcmsifX1jb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPWQsdGhpcy5ldmVudFNlcnZpY2U9aCx0aGlzLnJvdXRl''@;'; put 'put ''PWYsdGhpcy5yb3V0ZXI9dix0aGlzLnNhc1NlcnZpY2U9TSx0aGlzLmxvYWRlZD0hMSx0aGlzLnJldmVydGluZ0NoYW5nZXM9ITEsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5ob3RUYWJsZT17ZGF0YTpbXSxjb2xIZWFkZXJzOltdLGNv''@;'; put 'put ''bHVtbnM6W10saGVpZ2h0OjUwMCxzZXR0aW5nczp7YXJpYVRhZ3M6ITEsdGFibGVDbGFzc05hbWU6Imh0Q2VudGVyIixvdXRzaWRlQ2xpY2tEZXNlbGVjdHM6ITEsYXV0b1dyYXBSb3c6ITEsYXV0b1dyYXBDb2w6ITF9LGxpY2Vuc2VLZXk6dm9pZCAwLG1heFJvd3M6dGhpcy5saWNlbmNlU3Rh''@;'; put 'put ''dGUudmFsdWUuc3RhZ2Vfcm93c19hbGxvd2VkfHwxLzAsYWZ0ZXJHZXRDb2xIZWFkZXI6KEQsVSx0ZSk9PntVLmNsYXNzTGlzdC5hZGQoWG4uaGFuZHNvbnRhYmxlLmRhcmtUYWJsZUhlYWRlckNsYXNzKX0sYWZ0ZXJJbml0OigpPT57dGhpcy5maXhGb2N1c0NhdGNoZXJBY2Nlc3NpYmlsaXR5''@;'; put 'put ''KCl9fX1zdWJtaXR0ZWRUYWJsZVNjcmVlbigpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrdGhpcy50YWJsZV9pZCl9YXBwcm92ZVRhYmxlU2NyZWVuKCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L2FwcHJvdmVEZXQvIit0aGlzLnRhYmxlX2lkKX12aWV3''@;'; put 'put ''ZXJUYWJsZVNjcmVlbigpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YS8iK3RoaXMudGFibGVEZXRhaWxzLkJBU0VfVEFCTEUpfWdvQmFjaygpe1huLnhsbWFwcy5maW5kKGQ9PmQudGFyZ2V0RFM9PT10aGlzLnRhYmxlRGV0YWlscy5CQVNFX1RBQkxFKT90aGlzLnJvdXRl''@;'; put 'put ''Lm5hdmlnYXRlQnlVcmwoIi9ob21lL2V4Y2VsLW1hcHMvIit0aGlzLmhvdFRhYmxlLmRhdGFbMF0uWExNQVBfSUQpOnRoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK3RoaXMudGFibGVEZXRhaWxzLkJBU0VfVEFCTEUpfWRvd25sb2FkKGEpe2xldCBkPXRoaXMuc2FzU2Vydmlj''@;'; put 'put ''ZS5nZXRTYXNqc0NvbmZpZygpLGg9ZC5zZXJ2ZXJVcmwsZj1kLmFwcExvYyx2PXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oaCt2KyIvP19wcm9ncmFtPSIrZisiL3NlcnZpY2VzL2F1ZGl0b3JzL2dldGF1ZGl0ZmlsZSZ0YWJsZT0iK2EpfW5nT25Jbml0''@;'; put 'put ''KCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aWYoYS5saWNlbmNlU2VydmljZS5ob3RfbGljZW5zZV9rZXkuc3Vic2NyaWJlKGQ9PnthLmhvdFRhYmxlLmxpY2Vuc2VLZXk9ZH0pLHR5cGVvZiBhLnJvdXRlci5zbmFwc2hvdC5wYXJhbXMudGFibGVJZDwidSIpe2EudGFibGVf''@;'; put 'put ''aWQ9YS5yb3V0ZXIuc25hcHNob3QucGFyYW1zLnRhYmxlSWQ7dHJ5e2xldCBkPXlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmdldENoYW5nZUluZm8oYS50YWJsZV9pZCk7aWYoIWR8fCFkLmpzcGFyYW1zKXRocm93IG5ldyBFcnJvcigianNwYXJhbXMgcHJvcGVydHkgaXMgbWlzc2luZyBmcm9t''@;'; put 'put ''IHJlc3BvbnNlLiIpO2EudGFibGVEZXRhaWxzPWQuanNwYXJhbXNbMF19Y2F0Y2goZCl7bGV0IGg9e307ZC5NRVNTQUdFP2g9ZDpoLk1FU1NBR0U9ZCxhLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoInB1YmxpYy9nZXRjaGFuZ2VpbmZvIixoKX10cnl7bGV0IGQ9eWllbGQgYS5z''@;'; put 'put ''YXNTdG9yZVNlcnZpY2Uub3BlblRhYmxlKGEudGFibGVfaWQpO2lmKCFkfHwhZC5zdGFnZXRhYmxlKXRocm93IG5ldyBFcnJvcigiU3RhZ2V0YWJsZSBwcm9wZXJ0eSBpcyBtaXNzaW5nIGZyb20gcmVzcG9uc2UuIik7bGV0IGg9ZC5zdGFnZXRhYmxlWzBdLGY9W10sdj1bXTtmb3IobGV0IEQg''@;'; put 'put ''aW4gaCloJiZmLnB1c2goRCk7Zm9yKGxldCBEPTA7RDxmLmxlbmd0aDtEKyspdi5wdXNoKHtkYXRhOmZbRF19KTtsZXQgTT1mdW5jdGlvbigpe3JldHVybntyZWFkT25seTohMH19O2EuaG90VGFibGUuZGF0YT1kLnN0YWdldGFibGUsYS5ob3RUYWJsZS5jb2xIZWFkZXJzPWYsYS5ob3RUYWJs''@;'; put 'put ''ZS5jb2x1bW5zPXYsYS5ob3RUYWJsZS5jZWxscz1NLGEubG9hZGVkPSEwLGEuc2V0Rm9jdXMoKX1jYXRjaChkKXtsZXQgaD17fTtkLk1FU1NBR0V8fChoLk1FU1NBR0U9ZCksYS5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJhdWRpdG9ycy9nZXRzdGFnZXRhYmxlIixoKSxhLmxv''@;'; put 'put ''YWRlZD0hMX19fSkoKX1uZ0FmdGVyVmlld0luaXQoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5maXhGb2N1c0NhdGNoZXJBY2Nlc3NpYmlsaXR5KCl9LDUwMCl9cmV2ZXJ0Q2hhbmdlcygpe3RoaXMucmV2ZXJ0aW5nQ2hhbmdlcz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgiZWRpdG9ycy9y''@;'; put 'put ''ZXN0b3JlIix7cmVzdG9yZV9pbjpbe2xvYWRfcmVmOnRoaXMudGFibGVfaWR9XX0pLnRoZW4oZD0+e2QuYWRhcHRlclJlc3BvbnNlLnJlc3RvcmVfb3V0JiZ0aGlzLnJvdXRlLm5hdmlnYXRlKFsiL3N0YWdlIl0pLnRoZW4oKCk9Pnt0aGlzLnJvdXRlLm5hdmlnYXRlKFtgL3N0YWdlLyR7ZC5h''@;'; put 'put ''ZGFwdGVyUmVzcG9uc2UucmVzdG9yZV9vdXRbMF0uTE9BRFJFRn1gXSl9KX0pLmZpbmFsbHkoKCk9Pnt0aGlzLnJldmVydGluZ0NoYW5nZXM9ITF9KX1zZXRGb2N1cygpe3NldFRpbWVvdXQoKCk9PntsZXQgYT13aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFwcHJvdmFsLWJ0biIp''@;'; put 'put ''O2EmJmEuZm9jdXMoKX0sMjAwKX1maXhGb2N1c0NhdGNoZXJBY2Nlc3NpYmlsaXR5KCl7c2V0VGltZW91dCgoKT0+e2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5odEZvY3VzQ2F0Y2hlciIpLmZvckVhY2goKGQsaCk9PntpZihkKXtkLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsYFRh''@;'; put 'put ''YmxlIGZvY3VzIGNhdGNoZXIgJHtoKzF9YCksZC5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLGQuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksZC5zZXRBdHRyaWJ1dGUoInJvbGUiLCJwcmVzZW50YXRpb24iKTtjb25zdCBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo''@;'; put 'put ''ImxhYmVsIik7Zi5zZXRBdHRyaWJ1dGUoImZvciIsZC5pZHx8YGh0Rm9jdXNDYXRjaGVyJHtofWApLGYuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSxmLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGYudGV4dENvbnRlbnQ9YFRhYmxlIGZvY3VzIGNhdGNoZXIgJHtoKzF9YCxkLnBh''@;'; put 'put ''cmVudE5vZGU/Lmluc2VydEJlZm9yZShmLGQpfX0pfSwxMDApfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHFlKE8xKSxxZShNMikscWUoRWMpLHFlKG5sKSxxZSh0MCkscWUoS3MpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPWFyKHt0eXBlOmMs''@;'; put 'put ''c2VsZWN0b3JzOltbImFwcC1zdGFnZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sc3RhbmRhbG9uZTohMSxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1sxLCJjb250ZW50LWFyZWEiXSxbMSwiY2xyLWNvbC1tZC0xMiIsImNhcmQiXSxbImNsYXNzIiwiaC04MHZoIGQtZmxl''@;'; put 'put ''eCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsImgtODB2aCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xh''@;'; put 'put ''c3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWzEsInNwaW5uZXIiXSxbIm5nLWlmIiwibG9hZGVkIiwxLCJjYXJkLWhlYWRlciJdLFsxLCJjYXJkLXRpdGxlIiwidGV4dC1jZW50ZXIiXSxbMSwibXQtMCJdLFsibmctaWYiLCJsb2FkZWQiLDEsImNsci1yb3ciXSxbMSwiY2FyZC1ibG9jayIsImNs''@;'; put 'put ''ci1jb2wtbWQtNiIsIm5vLWJvcmRlcnMiXSxbMSwiY2FyZC1oZWFkZXIiLCJweS01Il0sWzEsImJhc2VUYWJsZUxpbmsiLDMsImNsaWNrIl0sWzEsIm10LTEwIl0sWyJyb2xlIiwic3RhdHVzIiwxLCJtdC0xMCIsMywibmdDbGFzcyJdLFsxLCJjbHItY29sLW1kLTYiLCJjYXJkLWJsb2NrIiwi''@;'; put 'put ''bm8tYm9yZGVycyJdLFsxLCJtdC0yMCJdLFsxLCJyb3ciXSxbImFyaWEtbGFiZWwiLCJWaWV3IGJhc2UgdGFibGUiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwidGV4dC1jZW50ZXIiLCJtci01aSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsiaWQiLCJhcHByb3ZhbC1idG4iLCJj''@;'; put 'put ''bGFzcyIsImJ0biBidG4tc20gYnRuLXN1Y2Nlc3Mtb3V0bGluZSB0ZXh0LWNlbnRlciBtci01aSIsImFyaWEtbGFiZWwiLCJBcHByb3ZlIHRhYmxlIiwzLCJkaXNhYmxlZCIsImNsaWNrIiw0LCJuZ0lmIl0sWyJhcmlhLWxhYmVsIiwiRWRpdCBiYXNlIHRhYmxlIiwxLCJidG4iLCJidG4tc20i''@;'; put 'put ''LCJidG4taW5mby1vdXRsaW5lIiwidGV4dC1jZW50ZXIiLCJtci01aSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsiYXJpYS1sYWJlbCIsIkRvd25sb2FkIGF1ZGl0IGZpbGUiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwidGV4dC1jZW50ZXIiLCJtci01aSIsIm1pbi13LTAiLDMs''@;'; put 'put ''ImNsaWNrIl0sWyJzaGFwZSIsImRvd25sb2FkIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4tZGFuZ2VyIHRleHQtY2VudGVyIG10LTIwIiwiYXJpYS1sYWJlbCIsIlJldmVydCB0aGlzIGFuZCBhbGwgc3Vic2Vx''@;'; put 'put ''dWVudCBjaGFuZ2VzIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwiY2FyZC1ibG9jayJdLFsiaWQiLCJob3RUYWJsZSIsImFyaWEtbGFiZWwiLCJTdGFnZWQgZGF0YSB0YWJsZSIsMywiZGF0YSIsInNldHRpbmdzIl0sWzEsImNhcmQtZm9vdGVyIiwiZC1mbGV4IiwianVz''@;'; put 'put ''dGlmeS1jb250ZW50LWNlbnRlciJdLFsiaWQiLCJhcHByb3ZhbC1idG4iLCJhcmlhLWxhYmVsIiwiQXBwcm92ZSB0YWJsZSIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsInRleHQtY2VudGVyIiwibXItNWkiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbImNsclRvb2x0''@;'; put 'put ''aXBUcmlnZ2VyIiwiIiwiYXJpYS1sYWJlbCIsIlJldmVydCB0aGlzIGFuZCBhbGwgc3Vic2VxdWVudCBjaGFuZ2VzIiwxLCJidG4iLCJidG4tc20iLCJidG4tZGFuZ2VyIiwidGV4dC1jZW50ZXIiLCJtdC0yMCIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRv''@;'; put 'put ''bS1sZWZ0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLCJjbHJTaXplIiwibGciXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDApKDEsImRpdiIsMSksZ3QoMixFa3QsMywyLCJkaXYiLDIpKDMsRGt0''@;'; put 'put ''LDQ5LDE1LCJkaXYiLDMpLGhlKCkoKSksMiZkJiYoZmUoMiksRWUoIm5nSWYiLCFoLmxvYWRlZCksZmUoKSxFZSgibmdJZiIsaC5sb2FkZWQpKX0sZGVwZW5kZW5jaWVzOltSdSxDYSxVbCxjMSxJZixMZixrOSxJOSxEOSxHNV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKX1dO2xl''@;'; put 'put ''dCBSa3Q9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPUVpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9eWkoe2ltcG9ydHM6W05hLHUxLGV1LmZvckNoaWxkKElrdCks''@;'; put 'put ''ZnkuZm9yUm9vdCgpXX0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gTGt0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTcpLFBlKDEsIiBWaWV3ZXIgcm93cyBsaW1pdDogIiksZGUoMiwic3BhbiIsNyksUGUoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgzKSxDcihhLmxpY2VuY2VT''@;'; put 'put ''dGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkKX19ZnVuY3Rpb24gT2t0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTcpLFBlKDEsIiBFZGl0b3Igcm93cyBsaW1pdDogIiksZGUoMiwic3BhbiIsNyksUGUoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgzKSxDcihhLmxpY2Vu''@;'; put 'put ''Y2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkKX19ZnVuY3Rpb24gUGt0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTcpLFBlKDEsIiBTdGFnZSByb3dzIGxpbWl0OiAiKSxkZSgyLCJzcGFuIiw3KSxQZSgzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDMpLENyKGEubGlj''@;'; put 'put ''ZW5jZVN0YXRlLnZhbHVlLnN0YWdlX3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9uIEZrdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxQZSgxLCIgSGlzdG9yeSByb3dzIGxpbWl0OiAiKSxkZSgyLCJzcGFuIiw3KSxQZSgzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDMpLENyKGEu''@;'; put 'put ''bGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkKX19ZnVuY3Rpb24gSGt0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTcpLFBlKDEsIiBTdWJtaXQgcm93cyBsaW1pdDogIiksZGUoMiwic3BhbiIsNyksUGUoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgzKSxD''@;'; put 'put ''cihhLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCl9fWZ1bmN0aW9uIE5rdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxQZSgxLCIgVGFibGVzIGluIGxpYnJhcnkgbGltaXQ6ICIpLGRlKDIsInNwYW4iLDcpLFBlKDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKCk7''@;'; put 'put ''ZmUoMyksQ3IoYS5saWNlbmNlU3RhdGUudmFsdWUudGFibGVzX2luX2xpYnJhcnlfbGltaXQpfX1mdW5jdGlvbiBWa3QoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwxNyksUGUoMSwiIFZpZXdib3hlcyBsaW1pdDogIiksZGUoMiwic3BhbiIsNyksUGUoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9''@;'; put 'put ''T2UoKTtmZSgzKSxDcihhLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0KX19ZnVuY3Rpb24gQmt0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTcpLFBlKDEsIiBMaW5lYWdlIGRhaWx5IGxpbWl0OiAiKSxkZSgyLCJzcGFuIiw3KSxQZSgzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1P''@;'; put 'put ''ZSgpO2ZlKDMpLENyKGEubGljZW5jZVN0YXRlLnZhbHVlLmxpbmVhZ2VfZGFpbHlfbGltaXQpfX1mdW5jdGlvbiBqa3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDE5KSxQZSgxLCIgUmVmcmVzaCBEYXRhIExpbmVhZ2UgIiksZGUoMiwiYnV0dG9uIiwyMCksT3QoImNs''@;'; put 'put ''aWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5yZWZyZXNoRGF0YUxpbmVhZ2UoKSl9KSxQZSgzLCIgUkVGUkVTSCAiKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDIpLEVlKCJjbHJMb2FkaW5nIixhLnJlZnJlc2hpbmdEYXRhTGluZWFnZSl9fWZ1bmN0aW9u''@;'; put 'put ''IHprdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO29pKDApLGd0KDEsamt0LDQsMSwiZGl2IiwxOCksZGUoMiwiZGl2IiwxOSksUGUoMywiIFJlZnJlc2ggRGF0YSBDYXRhbG9nICIpLGRlKDQsImJ1dHRvbiIsMjApLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2Uo''@;'; put 'put ''KS5yZWZyZXNoRGF0YUNhdGFsb2coKSl9KSxQZSg1LCIgUkVGUkVTSCAiKSxoZSgpKCksZGUoNiwiZGl2IiwxOSksUGUoNywiIERvd25sb2FkIENvbmZpZ3VyYXRpb24gIiksZGUoOCwiYnV0dG9uIiwyMSksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmRvd25s''@;'; put 'put ''b2FkQ29uZmlndXJhdGlvbigpKX0pLFBlKDksIiBET1dOTE9BRCAiKSxoZSgpKCksZGUoMTAsImRpdiIsMTkpLFBlKDExLCIgVXBkYXRlIExpY2VuY2UgS2V5ICIpLGRlKDEyLCJidXR0b24iLDIyKSxQZSgxMywiIFVQREFURSAiKSxoZSgpKCksc2koKX1pZigyJmMpe2NvbnN0IGE9T2UoKTtm''@;'; put 'put ''ZSgpLEVlKCJuZ0lmIiwiU0FTOSI9PT1hLnNlcnZlclR5cGUpLGZlKDMpLEVlKCJjbHJMb2FkaW5nIixhLnJlZnJlc2hpbmdEYXRhQ2F0YWxvZyl9fWNvbnN0IFVrdD1be3BhdGg6IiIsY29tcG9uZW50OigoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5hcHBTZXJ2aWNl''@;'; put 'put ''PWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5saWNlbmNlU2VydmljZT1oLHRoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlPWYsdGhpcy5hcHBJbmZvPXthZGFwdGVyVmVyc2lvbjoiNC4xNi4yIixhcHBWZXJzaW9uOiJ2Ny4yLjgiLnJlcGxhY2UoInYiLCIiKSxidWlsZFRpbWVzdGFtcDphaCgpKHBh''@;'; put 'put ''cnNlSW50KCIxNzcwMzgyMzE2NzQ2IikpLmZvcm1hdCgiREQtTU1NLVlZWVkgSEg6TU0iKX0sdGhpcy5odHRwPSJodHRwOiI9PT1sb2NhdGlvbi5wcm90b2NvbCx0aGlzLnJlZnJlc2hpbmdEYXRhQ2F0YWxvZz0hMSx0aGlzLnJlZnJlc2hpbmdEYXRhTGluZWFnZT0hMSx0aGlzLnJlc3BvbnNl''@;'; put 'put ''PSJObyByZXNwb25zZSIsdGhpcy5yZXNwb25zZU1vZGFsPSExLHRoaXMuSW5maW5pdHk9MS8wLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuc2VydmVyVHlwZT10aGlzLnNhc1NlcnZpY2UuZ2V0U2VydmVyVHlwZSgpLHRoaXMubGljZW5j''@;'; put 'put ''ZUluZm89dGhpcy5saWNlbmNlU2VydmljZS5nZXRMaWNlbnNlS2V5RGF0YSgpLHRoaXMuZW52aXJvbm1lbnRJbmZvPXRoaXMuYXBwU2VydmljZS5nZXRFbnZpcm9ubWVudEluZm8oKSx0aGlzLnNldHRpbmdzPXRoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnZhbHVlLHRoaXMuZW52''@;'; put 'put ''aXJvbm1lbnRJbmZvLkFVVE9FWEVDJiYodGhpcy5lbnZpcm9ubWVudEluZm8uQVVUT0VYRUM9ZGVjb2RlVVJJQ29tcG9uZW50KHRoaXMuZW52aXJvbm1lbnRJbmZvLkFVVE9FWEVDKSksdGhpcy5hcHBTZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Muc3Vic2NyaWJlKHY9Pnt0aGlzLnNldHRpbmdz''@;'; put 'put ''PXZ9KX1uZ09uSW5pdCgpe31zZXR0aW5nQ2hhbmdlKGEpe3RoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlLnNldEFwcFNldHRpbmdzKHRoaXMuc2V0dGluZ3MpfWRvd25sb2FkQ29uZmlndXJhdGlvbigpe2xldCBhPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLGQ9YS5zZXJ2ZXJVcmws''@;'; put 'put ''aD1hLmFwcExvYyxmPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oZCtmKyIvP19wcm9ncmFtPSIraCsiL3NlcnZpY2VzL2FkbWluL2V4cG9ydGNvbmZpZyIpfXJlZnJlc2hEYXRhQ2F0YWxvZygpe3RoaXMucmVmcmVzaGluZ0RhdGFDYXRhbG9nPSEwLHRo''@;'; put 'put ''aXMuc2FzU2VydmljZS5yZXF1ZXN0KCJhZG1pbi9yZWZyZXNoY2F0YWxvZyIsbnVsbCkudGhlbihhPT57dGhpcy5yZXNwb25zZT10aGlzLnBhcnNlUmVzcG9uc2UoYS5hZGFwdGVyUmVzcG9uc2UpLHRoaXMucmVzcG9uc2VNb2RhbD0hMH0pLmNhdGNoKGE9Pnt0aGlzLnJlc3BvbnNlPXRoaXMu''@;'; put 'put ''cGFyc2VSZXNwb25zZShhLmFkYXB0ZXJSZXNwb25zZSksdGhpcy5yZXNwb25zZU1vZGFsPSEwfSkuZmluYWxseSgoKT0+e3RoaXMucmVmcmVzaGluZ0RhdGFDYXRhbG9nPSExfSl9cmVmcmVzaERhdGFMaW5lYWdlKCl7dGhpcy5yZWZyZXNoaW5nRGF0YUxpbmVhZ2U9ITAsdGhpcy5zYXNTZXJ2''@;'; put 'put ''aWNlLnJlcXVlc3QoImFkbWluL3JlZnJlc2h0YWJsZWxpbmVhZ2UiLG51bGwpLnRoZW4oYT0+e3RoaXMucmVzcG9uc2U9dGhpcy5wYXJzZVJlc3BvbnNlKGEuYWRhcHRlclJlc3BvbnNlKSx0aGlzLnJlc3BvbnNlTW9kYWw9ITB9KS5jYXRjaChhPT57dGhpcy5yZXNwb25zZT10aGlzLnBhcnNl''@;'; put 'put ''UmVzcG9uc2UoYS5hZGFwdGVyUmVzcG9uc2UpLHRoaXMucmVzcG9uc2VNb2RhbD0hMH0pLmZpbmFsbHkoKCk9Pnt0aGlzLnJlZnJlc2hpbmdEYXRhTGluZWFnZT0hMX0pfXBhcnNlUmVzcG9uc2UoYSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBhP0pTT04uc3RyaW5naWZ5KGEpOmF9c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUod0YpLHFlKEtzKSxxZShPMSkscWUoY0YpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPWFyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1zeXN0ZW0iXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5l''@;'; put 'put ''ciJdLHN0YW5kYWxvbmU6ITEsZGVjbHM6MTM4LHZhcnM6MzYsY29uc3RzOltbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiLCJwLTEwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEs''@;'; put 'put ''InRleHQtY2VudGVyIiwibS0wIl0sWzEsInctMTAwIiwibGlnaHQiXSxbMSwiY29udGVudC1ib3giLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbMSwic3lzLWluZm8iLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1mbGV4LWNvbHVtbiIsImNsci1mbGV4''@;'; put 'put ''LWxnLXJvdyJdLFsiY2RzLXRleHQiLCJzdWJzZWN0aW9uIiwxLCJtYi0xMCJdLFsxLCJkYXJrIl0sWyJjZHMtdGV4dCIsImxhYmVsIiwxLCJtLTAiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1sZy1jZW50ZXIiXSxbImNsYXNzIiwibS0wIiw0LCJuZ0lmIl0sWzQsIm5nSWYi''@;'; put 'put ''XSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbMSwibS0wIl0s''@;'; put 'put ''WyJjbGFzcyIsImFkbWluLWFjdGlvbiIsNCwibmdJZiJdLFsxLCJhZG1pbi1hY3Rpb24iXSxbMSwiYnRuIiwiYnRuLWluZm8iLCJidG4tc20iLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsxLCJidG4iLCJidG4taW5mbyIsImJ0bi1zbSIsMywiY2xpY2siXSxbInJvdXRlckxpbmsiLCIvbGlj''@;'; put 'put ''ZW5zaW5nL3VwZGF0ZSIsMSwiYnRuIiwiYnRuLWluZm8iLCJidG4tc20iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwiaDQiLDIpLFBlKDMsIlN5c3RlbSBpbmZvcm1hdGlvbiIpLGhlKCksR3QoNCwiaHIiLDMpLGRlKDUsImRpdiIs''@;'; put 'put ''NCkoNiwiZGl2Iiw1KSg3LCJkaXYiKSg4LCJoNiIsNiksUGUoOSwiIEVudmlyb25tZW50IERldGFpbHMgIiksR3QoMTAsInNwYW4iLDcpLGhlKCksZGUoMTEsInAiLDgpLFBlKDEyLCIgU1lTU0lURTogIiksZGUoMTMsInNwYW4iLDcpLFBlKDE0KSxoZSgpKCksZGUoMTUsInAiLDgpLFBlKDE2''@;'; put 'put ''LCIgU1lTU0NQTDogIiksZGUoMTcsInNwYW4iLDcpLFBlKDE4KSxoZSgpKCksZGUoMTksInAiLDgpLFBlKDIwLCIgU1lTVENQSVBIT1NUTkFNRTogIiksZGUoMjEsInNwYW4iLDcpLFBlKDIyKSxoZSgpKCksZGUoMjMsInAiLDgpLFBlKDI0LCIgU1lTVkxPTkc6ICIpLGRlKDI1LCJzcGFuIiw3''@;'; put 'put ''KSxQZSgyNiksaGUoKSgpLGRlKDI3LCJwIiw4KSxQZSgyOCwiIE1FTVNJWkU6ICIpLGRlKDI5LCJzcGFuIiw3KSxQZSgzMCksaGUoKSgpLGRlKDMxLCJwIiw4KSxQZSgzMiwiIFNZU1BST0NFU1NNT0RFOiAiKSxkZSgzMywic3BhbiIsNyksUGUoMzQpLGhlKCkoKSxkZSgzNSwicCIsOCksUGUo''@;'; put 'put ''MzYsIiBTWVNIT1NUTkFNRTogIiksZGUoMzcsInNwYW4iLDcpLFBlKDM4KSxoZSgpKCksZGUoMzksInAiLDgpLFBlKDQwLCIgU1lTVVNFUklEOiAiKSxkZSg0MSwic3BhbiIsNyksUGUoNDIpLGhlKCkoKSxkZSg0MywicCIsOCksUGUoNDQsIiBTWVNIT1NUSU5GT0xPTkc6ICIpLGRlKDQ1LCJz''@;'; put 'put ''cGFuIiw3KSxQZSg0NiksaGUoKSgpLGRlKDQ3LCJwIiw4KSxQZSg0OCwiIFNZU0VOQ09ESU5HOiAiKSxkZSg0OSwic3BhbiIsNyksUGUoNTApLGhlKCkoKSxkZSg1MSwicCIsOCksUGUoNTIsIiBBVVRPRVhFQzogIiksZGUoNTMsInNwYW4iLDcpLFBlKDU0KSxoZSgpKCkoKSxkZSg1NSwiZGl2''@;'; put 'put ''Iiw5KSg1NiwiZGl2IikoNTcsImg2Iiw2KSxQZSg1OCwiIERhdGEgQ29udHJvbGxlciBEZXRhaWxzICIpLEd0KDU5LCJzcGFuIiw3KSxoZSgpLGRlKDYwLCJwIiw4KSxQZSg2MSwiIEFwcGxpY2F0aW9uIHZlcnNpb246ICIpLGRlKDYyLCJzcGFuIiw3KSxQZSg2MyksaGUoKSgpLGRlKDY0LCJw''@;'; put 'put ''Iiw4KSxQZSg2NSwiIEJ1aWxkIHRpbWVzdGFtcDogIiksZGUoNjYsInNwYW4iLDcpLFBlKDY3KSxoZSgpKCksZGUoNjgsInAiLDgpLFBlKDY5LCIgQWRhcHRlciB2ZXJzaW9uOiAiKSxkZSg3MCwic3BhbiIsNyksUGUoNzEpLGhlKCkoKSxkZSg3MiwicCIsOCksUGUoNzMsIiBIVFRQOiAiKSxk''@;'; put 'put ''ZSg3NCwic3BhbiIsNyksUGUoNzUpLGhlKCkoKSxkZSg3NiwicCIsOCksUGUoNzcsIiBEQyBBZG1pbiBHcm91cDogIiksZGUoNzgsInNwYW4iLDcpLFBlKDc5KSxoZSgpKCksZGUoODAsInAiLDgpLFBlKDgxLCIgQXBwIExvY2F0aW9uOiAiKSxkZSg4Miwic3BhbiIsNyksUGUoODMpLGhlKCko''@;'; put 'put ''KSgpKCksZGUoODQsImRpdiIpKDg1LCJoNiIsNiksUGUoODYsIiBMaWNlbmNlIGRldGFpbHMgIiksR3QoODcsInNwYW4iLDcpLGhlKCksZGUoODgsInAiLDgpLFBlKDg5LCIgVmFsaWQgdW50aWw6ICIpLGRlKDkwLCJzcGFuIiw3KSxQZSg5MSksaGUoKSgpLGRlKDkyLCJwIiw4KSxQZSg5Mywi''@;'; put 'put ''IFVzZXJzIGFsbG93ZWQ6ICIpLGRlKDk0LCJzcGFuIiw3KSxQZSg5NSksaGUoKSgpLGRlKDk2LCJwIiw4KSxQZSg5NywiIFNpdGUgSURzOiAiKSxkZSg5OCwic3BhbiIsNyksUGUoOTkpLGhlKCkoKSxkZSgxMDAsInAiLDgpLFBlKDEwMSwiIEZyZWUgVGllcjogIiksZGUoMTAyLCJzcGFuIiw3''@;'; put 'put ''KSxQZSgxMDMpLGhlKCkoKSxndCgxMDQsTGt0LDQsMSwicCIsMTApKDEwNSxPa3QsNCwxLCJwIiwxMCkoMTA2LFBrdCw0LDEsInAiLDEwKSgxMDcsRmt0LDQsMSwicCIsMTApKDEwOCxIa3QsNCwxLCJwIiwxMCkoMTA5LE5rdCw0LDEsInAiLDEwKSgxMTAsVmt0LDQsMSwicCIsMTApKDExMSxC''@;'; put 'put ''a3QsNCwxLCJwIiwxMCksZGUoMTEyLCJwIiw4KSxQZSgxMTMsIiBWaWV3Ym94ZXM6ICIpLGRlKDExNCwic3BhbiIsNyksUGUoMTE1KSxoZSgpKCksZGUoMTE2LCJwIiw4KSxQZSgxMTcsIiBGaWxlIFVwbG9hZDogIiksZGUoMTE4LCJzcGFuIiw3KSxQZSgxMTkpLGhlKCkoKSxkZSgxMjAsInAi''@;'; put 'put ''LDgpLFBlKDEyMSwiIEVkaXQgcmVjb3JkOiAiKSxkZSgxMjIsInNwYW4iLDcpLFBlKDEyMyksaGUoKSgpLGRlKDEyNCwicCIsOCksUGUoMTI1LCIgQWRkIHJlY29yZDogIiksZGUoMTI2LCJzcGFuIiw3KSxQZSgxMjcpLGhlKCkoKSgpKCksR3QoMTI4LCJociIsMyksZ3QoMTI5LHprdCwxNCwy''@;'; put 'put ''LCJuZy1jb250YWluZXIiLDExKSxoZSgpKCkoKSxkZSgxMzAsImNsci1tb2RhbCIsMTIpLGNpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBmaShoLnJlc3BvbnNlTW9kYWwsdil8fChoLnJlc3BvbnNlTW9kYWw9diksdn0pLGRlKDEzMSwiaDMiLDEzKSxQZSgxMzIs''@;'; put 'put ''IlJlc3BvbnNlIiksaGUoKSxkZSgxMzMsImRpdiIsMTQpLFBlKDEzNCksaGUoKSxkZSgxMzUsImRpdiIsMTUpKDEzNiwiYnV0dG9uIiwxNiksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnJlc3BvbnNlTW9kYWw9ITF9KSxQZSgxMzcsIiBPayAiKSxoZSgpKCkoKSksMiZkJiYoZmUo''@;'; put 'put ''MTQpLENyKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uU1lTU0lURSksZmUoNCksQ3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNTQ1BMKSxmZSg0KSxDcihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxs''@;'; put 'put ''OmguZW52aXJvbm1lbnRJbmZvLlNZU1RDUElQSE9TVE5BTUUpLGZlKDQpLENyKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uU1lTVkxPTkcpLGZlKDQpLENyKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uTUVNU0la''@;'; put 'put ''RSksZmUoNCksQ3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNQUk9DRVNTTU9ERSksZmUoNCksQ3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNIT1NUTkFNRSksZmUoNCksQ3IobnVsbD09aC5lbnZp''@;'; put 'put ''cm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNVU0VSSUQpLGZlKDQpLENyKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uU1lTSE9TVElORk9MT05HKSxmZSg0KSxDcihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJv''@;'; put 'put ''bm1lbnRJbmZvLlNZU0VOQ09ESU5HKSxmZSg0KSxDcihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLkFVVE9FWEVDKSxmZSg5KSxDcihoLmFwcEluZm8uYXBwVmVyc2lvbiksZmUoNCksQ3IoaC5hcHBJbmZvLmJ1aWxkVGltZXN0YW1wKSxmZSg0KSxDciho''@;'; put 'put ''LmFwcEluZm8uYWRhcHRlclZlcnNpb24pLGZlKDQpLENyKGguaHR0cD8iWUVTIjoiTk8iKSxmZSg0KSxDcihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLkRDX0FETUlOX0dST1VQKSxmZSg0KSxDcihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmgu''@;'; put 'put ''ZW52aXJvbm1lbnRJbmZvLkFQUF9MT0MpLGZlKDgpLENyKG51bGw9PWgubGljZW5jZUluZm8/bnVsbDpoLmxpY2VuY2VJbmZvLnZhbGlkX3VudGlsKSxmZSg0KSxDcihudWxsPT1oLmxpY2VuY2VJbmZvP251bGw6aC5saWNlbmNlSW5mby51c2Vyc19hbGxvd2VkKSxmZSg0KSxDcihudWxsPT1o''@;'; put 'put ''LmxpY2VuY2VJbmZvP251bGw6aC5saWNlbmNlSW5mby5zaXRlX2lkX211bHRpcGxlKSxmZSg0KSxDcihudWxsIT1oLmxpY2VuY2VJbmZvJiZoLmxpY2VuY2VJbmZvLmRlbW8/IllFUyI6Ik5PIiksZmUoKSxFZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dl''@;'; put 'put ''ZCE9PWguSW5maW5pdHkpLGZlKCksRWUoIm5nSWYiLGgubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQhPT1oLkluZmluaXR5KSxmZSgpLEVlKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdGFnZV9yb3dzX2FsbG93ZWQhPT1oLkluZmluaXR5KSxmZSgpLEVlKCJu''@;'; put 'put ''Z0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCE9PWguSW5maW5pdHkpLGZlKCksRWUoIm5nSWYiLGgubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0IT09aC5JbmZpbml0eSksZmUoKSxFZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUu''@;'; put 'put ''dGFibGVzX2luX2xpYnJhcnlfbGltaXQhPT1oLkluZmluaXR5KSxmZSgpLEVlKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0IT09aC5JbmZpbml0eSksZmUoKSxFZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUubGluZWFnZV9kYWlseV9saW1pdCE9PWguSW5m''@;'; put 'put ''aW5pdHkpLGZlKDQpLENyKGgubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3g/IllFUyI6Ik5PIiksZmUoNCksQ3IoaC5saWNlbmNlU3RhdGUudmFsdWUuZmlsZVVwbG9hZD8iWUVTIjoiTk8iKSxmZSg0KSxDcihoLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0UmVjb3JkPyJZRVMiOiJOTyIpLGZl''@;'; put 'put ''KDQpLENyKGgubGljZW5jZVN0YXRlLnZhbHVlLmFkZFJlY29yZD8iWUVTIjoiTk8iKSxmZSgyKSxFZSgibmdJZiIsMT09PShudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLklTQURNSU4pKSxmZSgpLGxpKCJjbHJNb2RhbE9wZW4iLGgucmVzcG9uc2VNb2Rh''@;'; put 'put ''bCksZmUoNCksSXIoIiAiLGgucmVzcG9uc2UsIiAiKSl9LGRlcGVuZGVuY2llczpbQ2EsUDEsYnUscjAsYzEsTGZdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCl9XTtsZXQgWmt0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBu''@;'; put 'put ''ZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1FaSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPXlpKHtpbXBvcnRzOltldS5mb3JDaGlsZChVa3QpLGV1XX0pfX1yZXR1cm4gY30pKCksV2t0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1FaSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPXlpKHtpbXBvcnRzOltOYSxaa3QsdTEsVWNdfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBZa3QoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwxMil9''@;'; put 'put ''ZnVuY3Rpb24gR2t0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLWljb24iLDEzKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgyKTtyZXR1cm4gaC5ncm91cFNlYXJjaD0iIixDdChoLmdyb3VwTGlzdE9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rp''@;'; put 'put ''b24gJGt0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsNykoMSwiZGl2Iiw4KSgyLCJpbnB1dCIsOSwwKSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpO3JldHVybiBmaShmLmdyb3VwU2VhcmNoLGgpfHwoZi5n''@;'; put 'put ''cm91cFNlYXJjaD1oKSxDdChoKX0pLE90KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5ncm91cExpc3RPbkZpbHRlcigpKX0pLGhlKCksZ3QoNCxZa3QsMSwwLCJjbHItaWNvbiIsMTApKDUsR2t0LDEsMCwiY2xyLWljb24iLDExKSxoZSgpKCl9aWYoMiZjKXtjb25z''@;'; put 'put ''dCBhPWZhKDMpLGQ9T2UoKTtmZSgyKSxsaSgibmdNb2RlbCIsZC5ncm91cFNlYXJjaCksZmUoMiksRWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksRWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBLa3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJj''@;'; put 'put ''bHItdHJlZS1ub2RlIiwxNSksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkuZ3JvdXBPbkNsaWNrKGgpKX0pLGRlKDEsInAiLDE2KSxHdCgyLCJjbHItaWNvbiIsMTcpLFBlKDMpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9''@;'; put 'put ''T2UoKS4kaW1wbGljaXQsZD1PZSgpO3hyKCJhY3RpdmUiLGEuR1JPVVBVUkk9PT1kLmdyb3VwVXJpKSxmZSgzKSxJcigiICIsYS5HUk9VUE5BTUUsIiAiKX19ZnVuY3Rpb24gWGt0KGMsbCl7aWYoMSZjJiYob2koMCksZ3QoMSxLa3QsNCwzLCJjbHItdHJlZS1ub2RlIiwxNCksc2koKSksMiZj''@;'; put 'put ''KXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksRWUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIHFrdChjLGwpezEmYyYmKGRlKDAsImRpdiIsMTgpKDEsInNwYW4iLDE5KSxQZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpKCkpfWZ1bmN0aW9uIEprdChjLGwpe2lmKDEmYyYmKGRlKDAsImRp''@;'; put 'put ''diIsMjEpKDEsImRpdiIsMjIpKDIsInRhYmxlIiwyNCkoMywidGJvZHkiKSg0LCJ0ciIpKDUsInRkIiwyNSkoNiwicCIsMjYpKDcsImIiKSxQZSg4KSxoZSgpKCkoKSgpLGRlKDksInRyIikoMTAsInRkIiwyNSkoMTEsImkiKSxQZSgxMiksaGUoKSgpKCkoKSgpKCkoKSksMiZjKXtjb25zdCBh''@;'; put 'put ''PU9lKDIpO2ZlKDgpLENyKGEuZ3JvdXBOYW1lKSxmZSg0KSxDcihhLmdyb3VwRGVzY3x8Im5vIGRlc2NyaXB0aW9uIil9fWZ1bmN0aW9uIFFrdChjLGwpezEmYyYmKGRlKDAsImg1IiksUGUoMSwiTm8gTWVtYmVycyBQcmVzZW50IiksaGUoKSl9ZnVuY3Rpb24gZUR0KGMsbCl7MSZjJiYob2ko''@;'; put 'put ''MCksZGUoMSwidGQiLDMxKSgyLCJiIiksUGUoMywiTkFNRSIpLGhlKCkoKSxkZSg0LCJ0ZCIsMzEpKDUsImIiKSxQZSg2LCJFTUFJTCIpLGhlKCkoKSxkZSg3LCJ0ZCIsMzEpKDgsImIiKSxQZSg5LCJDUkVBVEVEIiksaGUoKSgpLGRlKDEwLCJ0ZCIsMzIpKDExLCJiIiksUGUoMTIsIlVQREFU''@;'; put 'put ''RUQiKSxoZSgpKCksc2koKSl9ZnVuY3Rpb24gdER0KGMsbCl7MSZjJiYob2koMCksZGUoMSwidGQiLDMxKSgyLCJiIiksUGUoMywiSUQiKSxoZSgpKCksZGUoNCwidGQiLDMxKSg1LCJiIiksUGUoNiwiRElTUExBWSBOQU1FIiksaGUoKSgpLGRlKDcsInRkIiwzMSkoOCwiYiIpLFBlKDksIlVT''@;'; put 'put ''RVIgTkFNRSIpLGhlKCkoKSxzaSgpKX1mdW5jdGlvbiBuRHQoYyxsKXtpZigxJmMmJihvaSgwKSxkZSgxLCJ0ZCIsMzIpLFBlKDIpLGhlKCksZGUoMywidGQiLDMyKSxQZSg0KSxoZSgpLGRlKDUsInRkIiwzMiksUGUoNiksaGUoKSxkZSg3LCJ0ZCIsMzIpLFBlKDgpLGhlKCksc2koKSksMiZj''@;'; put 'put ''KXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O2ZlKDIpLENyKGEuTUVNQkVSTkFNRSksZmUoMiksQ3IoYS5FTUFJTCksZmUoMiksQ3IoYS5NRU1CRVJDUkVBVEVEKSxmZSgyKSxDcihhLk1FTUJFUlVQREFURUQpfX1mdW5jdGlvbiByRHQoYyxsKXtpZigxJmMmJihvaSgwKSxkZSgxLCJ0ZCIsMzIp''@;'; put 'put ''LFBlKDIpLGhlKCksZGUoMywidGQiLDMyKSxQZSg0KSxoZSgpLGRlKDUsInRkIiwzMiksUGUoNiksaGUoKSxzaSgpKSwyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQ7ZmUoMiksQ3IoYS5JRCksZmUoMiksQ3IoYS5ESVNQTEFZTkFNRSksZmUoMiksQ3IoYS5VU0VSTkFNRSl9fWZ1bmN0aW9u''@;'; put 'put ''IGlEdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIiwzMyksZ3QoMSxuRHQsOSw0LCJuZy1jb250YWluZXIiLDYpKDIsckR0LDcsMywibmctY29udGFpbmVyIiw2KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1PZSg0KTtFZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvdXNl''@;'; put 'put ''cnMvIisoYS5VUklNRU18fGEuSUQpKSxmZSgpLEVlKCJuZ0lmIixkLnNlcnZlclR5cGU9PT1kLlNlcnZlclR5cGUuU2FzOSksZmUoKSxFZSgibmdJZiIsZC5zZXJ2ZXJUeXBlPT09ZC5TZXJ2ZXJUeXBlLlNhc2pzKX19ZnVuY3Rpb24gYUR0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGFibGUiLDI5''@;'; put 'put ''KSgxLCJ0aGVhZCIpKDIsInRyIiksZ3QoMyxlRHQsMTMsMCwibmctY29udGFpbmVyIiw2KSg0LHREdCwxMCwwLCJuZy1jb250YWluZXIiLDYpLGhlKCkoKSxkZSg1LCJ0Ym9keSIpLGd0KDYsaUR0LDMsMywidHIiLDMwKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgzKTtmZSgzKSxFZSgibmdJ''@;'; put 'put ''ZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpLGZlKCksRWUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNqcyksZmUoMiksRWUoIm5nRm9yT2YiLGEuZ3JvdXBNZW1iZXJzKX19ZnVuY3Rpb24gb0R0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IikoMSwi''@;'; put 'put ''aDMiKSxQZSgyKSxoZSgpLGd0KDMsUWt0LDIsMCwiaDUiLDYpLGRlKDQsImRpdiIsMjcpLGd0KDUsYUR0LDcsMywidGFibGUiLDI4KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgyKSxJcigiTUVNQkVSUyAoIixhLmdyb3VwTWVtYmVyQ291bnQsIikiKSxmZSgpLEVlKCJuZ0lmIiww''@;'; put 'put ''PT1hLmdyb3VwTWVtYmVyQ291bnQpLGZlKDIpLEVlKCJuZ0lmIiwwIT1hLmdyb3VwTWVtYmVyQ291bnQpfX1mdW5jdGlvbiBzRHQoYyxsKXsxJmMmJihkZSgwLCJoNSIpLFBlKDEsIk5vIE1lbWJlcnMgUHJlc2VudCIpLGhlKCkpfWZ1bmN0aW9uIGxEdChjLGwpe2lmKDEmYyYmKGRlKDAsInRy''@;'; put 'put ''IiwzMykoMSwidGQiLDMyKSxQZSgyKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtFZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvdXNlcnMvIithLk1FTUJFUklEKSxmZSgyKSxDcihhLk1FTUJFUk5BTUUpfX1mdW5jdGlvbiBjRHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0''@;'; put 'put ''YWJsZSIsMjkpKDEsInRoZWFkIikoMiwidHIiKSgzLCJ0ZCIpKDQsImIiKSxQZSg1KSxoZSgpKCkoKSgpLGRlKDYsInRib2R5IiksZ3QoNyxsRHQsMywyLCJ0ciIsMzApLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKDUpLElyKCJNRU1CRVJTICgiLGEuZ3JvdXBNZW1iZXJDb3VudCwi''@;'; put 'put ''KSIpLGZlKDIpLEVlKCJuZ0Zvck9mIixhLmdyb3VwTWVtYmVycyl9fWZ1bmN0aW9uIHVEdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsImgzIiksUGUoMiksaGUoKSxndCgzLHNEdCwyLDAsImg1Iiw2KSxkZSg0LCJkaXYiLDI3KSxndCg1LGNEdCw4LDIsInRhYmxlIiwyOCksaGUoKSgp''@;'; put 'put ''KSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoMiksQ3IoYS5ncm91cE5hbWUpLGZlKCksRWUoIm5nSWYiLDA9PWEuZ3JvdXBNZW1iZXJDb3VudCksZmUoMiksRWUoIm5nSWYiLDAhPWEuZ3JvdXBNZW1iZXJDb3VudCl9fWZ1bmN0aW9uIGREdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpLGd0KDEs''@;'; put 'put ''Smt0LDEzLDIsImRpdiIsMjApLGRlKDIsImRpdiIsMjEpKDMsImRpdiIsMjIpKDQsImRpdiIsMjMpLGd0KDUsb0R0LDYsMywiZGl2Iiw2KSg2LHVEdCw2LDMsImRpdiIsNiksR3QoNywiYnIiKSxoZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLEVlKCJuZ0lmIixhLnNlcnZlclR5''@;'; put 'put ''cGUhPT1hLlNlcnZlclR5cGUuU2FzVml5YSksZmUoNCksRWUoIm5nSWYiLGEuc2VydmVyVHlwZSE9PWEuU2VydmVyVHlwZS5TYXNWaXlhKSxmZSgpLEVlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzVml5YSl9fWxldCBuYmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rv''@;'; put 'put ''cihhLGQsaCxmLHYpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuaGVscGVyU2VydmljZT1kLHRoaXMucm91dGVyPWgsdGhpcy5sb2NhdGlvbj1mLHRoaXMucm91dGU9dix0aGlzLmdyb3VwU2VhcmNoPSIiLHRoaXMucGFyYW1QcmVzZW50PSExLHRoaXMucGFyYW1VUkk9IiIsdGhpcy5ncm91cFVy''@;'; put 'put ''aT0iIix0aGlzLmdyb3VwTmFtZT0iIix0aGlzLmdyb3VwRGVzYz0iIix0aGlzLnNhc2pzQ29uZmlnPW5ldyBkMi5TQVNqc0NvbmZpZyx0aGlzLmlzVml5YT0hMSx0aGlzLmxvYWRpbmc9ITEsdGhpcy5TZXJ2ZXJUeXBlPWwxLlksdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0''@;'; put 'put ''U2FzanNDb25maWcoKSx0aGlzLnNlcnZlclR5cGU9dGhpcy5zYXNTZXJ2aWNlLmdldFNlcnZlclR5cGUoKSwiU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUmJih0aGlzLmlzVml5YT0hMCl9bmdPbkluaXQoKXtYbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0idmlldy91''@;'; put 'put ''c2VybmF2L2dyb3VwcyIsdm9pZCAwIT09dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpJiYodGhpcy5wYXJhbVByZXNlbnQ9ITAsdGhpcy5wYXJhbVVSST10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkpLFhuLnVzZXJuYXYuZ3JvdXBMaXN0JiYhdGhpcy5wYXJhbVByZXNlbnQ/''@;'; put 'put ''KHRoaXMuZ3JvdXBzPVhuLnVzZXJuYXYuZ3JvdXBMaXN0LHRoaXMuZ3JvdXBTZWFyY2g9WG4udXNlcm5hdi5ncm91cFNlYXJjaCk6KHZvaWQgMD09PVhuLnVzZXJuYXYuZ3JvdXBMaXN0Pyh0aGlzLmxvYWRpbmc9ITAsdGhpcy5pc1ZpeWE/ZmV0Y2godGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJV''@;'; put 'put ''cmwrIi9pZGVudGl0aWVzL2dyb3Vwcz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGE9PmEudGV4dCgpKS50aGVuKGE9PntsZXQgaD1KU09OLnBhcnNlKGEpLml0ZW1zLm1hcChmPT4oe0dST1VQVVJJOmYuaWQsR1JPVVBOQU1FOmYubmFt''@;'; put 'put ''ZSxHUk9VUERFU0M6Zi5kZXNjcmlwdGlvbn0pKTt0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cHM9aCxYbi51c2VybmF2Lmdyb3VwTGlzdD1ofSk6dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9nZXRncm91cHMiLG51bGwpLnRoZW4oYT0+e3RoaXMubG9hZGluZz0hMSx0aGlzLmdy''@;'; put 'put ''b3Vwcz1hLmFkYXB0ZXJSZXNwb25zZS5ncm91cHMsWG4udXNlcm5hdi5ncm91cExpc3Q9YS5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBzfSkpOih0aGlzLmdyb3Vwcz1Ybi51c2VybmF2Lmdyb3VwTGlzdCx0aGlzLmdyb3VwU2VhcmNoPVhuLnVzZXJuYXYuZ3JvdXBTZWFyY2gpLHRoaXMucGFyYW1Q''@;'; put 'put ''cmVzZW50JiYodGhpcy5sb2FkaW5nPSEwLHRoaXMuaXNWaXlhP2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy9ncm91cHMvIit0aGlzLnBhcmFtVVJJKyIvbWVtYmVycz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19''@;'; put 'put ''KS50aGVuKGE9PmEudGV4dCgpKS50aGVuKGE9PntsZXQgZD1KU09OLnBhcnNlKGEpO3RoaXMubG9hZGluZz0hMTtsZXQgaD1kLml0ZW1zLm1hcChmPT4oe01FTUJFUk5BTUU6Zi5uYW1lLE1FTUJFUklEOmYuaWR9KSk7dGhpcy5ncm91cE1lbWJlcnM9aCx0aGlzLmdyb3VwTWVtYmVyQ291bnQ9''@;'; put 'put ''aC5sZW5ndGgsdGhpcy5ncm91cFVyaT10aGlzLnBhcmFtVVJJLHRoaXMuZ3JvdXBOYW1lPXRoaXMucGFyYW1VUkl9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVyc2J5Z3JvdXAiLHtpd2FudDpbe2dyb3VwaWQ6dGhpcy5wYXJhbVVSSX1dfSkudGhlbihkPT57''@;'; put 'put ''dGhpcy5ncm91cE1lbWJlcnM9ZC5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycyx0aGlzLmdyb3VwTWVtYmVyQ291bnQ9ZC5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycy5sZW5ndGgsdm9pZCAwIT09ZC5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVyc1swXSYmKHRoaXMubG9hZGluZz0hMSx0''@;'; put 'put ''aGlzLmdyb3VwVXJpPWQuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnNbMF0uVVJJTUVNfHx0aGlzLnBhcmFtVVJJLHRoaXMuZ3JvdXBOYW1lPWQuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnNbMF0uR1JPVVBOQU1FLHRoaXMuZ3JvdXBEZXNjPWQuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJl''@;'; put 'put ''cnNbMF0uR1JPVVBERVNDLHRoaXMuZ3JvdXBOYW1lfHwodGhpcy5ncm91cE5hbWU9dGhpcy5wYXJhbVVSSSkpfSkpKX1ncm91cExpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5ncm91cHMsdGhpcy5ncm91cFNlYXJjaCwiR1JPVVBOQU1FIiks''@;'; put 'put ''WG4udXNlcm5hdi5ncm91cFNlYXJjaD10aGlzLmdyb3VwU2VhcmNofWdyb3VwT25DbGljayhhKXt0aGlzLmxvYWRpbmc9ITA7bGV0IGQ9dGhpcy5yb3V0ZXIudXJsO3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMucGFyYW1QcmVzZW50P2Quc2xpY2UoMCxkLmxhc3RJbmRleE9mKCIv''@;'; put 'put ''IikpKyIvIitlbmNvZGVVUkkoYS5HUk9VUFVSSSk6ZCsiLyIrZW5jb2RlVVJJKGEuR1JPVVBVUkkpKSx0aGlzLmlzVml5YT9mZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvZ3JvdXBzLyIrYS5HUk9VUFVSSSsiL21lbWJlcnM/bGltaXQ9MjAwMCIse2hlYWRl''@;'; put 'put ''cnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihoPT5oLnRleHQoKSkudGhlbihoPT57bGV0IGY9SlNPTi5wYXJzZShoKTt0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cFVyaT1hLkdST1VQVVJJLHRoaXMuZ3JvdXBOYW1lPWEuR1JPVVBOQU1FLHRoaXMuZ3JvdXBEZXNjPWEu''@;'; put 'put ''R1JPVVBERVNDO2xldCB2PWYuaXRlbXMubWFwKE09Pih7TUVNQkVSTkFNRTpNLm5hbWUsTUVNQkVSSUQ6TS5pZH0pKTt0aGlzLmdyb3VwTWVtYmVycz12LHRoaXMuZ3JvdXBNZW1iZXJDb3VudD12Lmxlbmd0aH0pOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJz''@;'; put 'put ''Ynlncm91cCIse2l3YW50Olt7Z3JvdXBpZDphLkdST1VQVVJJfV19KS50aGVuKGY9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cFVyaT1hLkdST1VQVVJJLHRoaXMuZ3JvdXBOYW1lPWEuR1JPVVBOQU1FLHRoaXMuZ3JvdXBEZXNjPWEuR1JPVVBERVNDLHRoaXMuZ3JvdXBNZW1iZXJzPWYu''@;'; put 'put ''YWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMsdGhpcy5ncm91cE1lbWJlckNvdW50PWYuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMubGVuZ3RofSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUoS3MpLHFlKEx1KSxxZShubCkscWUoczIp''@;'; put 'put ''LHFlKHQwKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtZ3JvdXAiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLHN0YW5kYWxvbmU6ITEsZGVjbHM6Nyx2YXJzOjQsY29uc3RzOltbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJd''@;'; put 'put ''LFsxLCJzaWRlYmFyLWhlaWdodCJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsImxvYWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwi''@;'; put 'put ''dHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJGaWx0ZXIgYnkgR3JvdXBzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJz''@;'; put 'put ''aGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJhY3RpdmUiLCJjbGljayIsNCwibmdJZiJdLFszLCJjbGljayJdLFsxLCJtLTAiLCJjdXJz''@;'; put 'put ''b3ItcG9pbnRlciIsImxpc3QtcGFkZGluZyJdLFsic2hhcGUiLCJ1c2VycyJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWyJjbGFzcyIsImNsci1yb3ciLDQsIm5nSWYiXSxbMSwiY2xyLXJvdyJdLFsxLCJjbHItY29sLTgiXSxbMSwiY2FyZCIsImdyb3VwLWRhdGEiXSxb''@;'; put 'put ''MSwidGFibGUiLCJncm91cC1pbmZvIl0sWzEsImxlZnQiXSxbMSwiZ3JvdXAtaW5mby10ZXh0Il0sWzEsInRhYmxlLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJ0YWJsZSBtZW1iZXItdGFibGUiLDQsIm5nSWYiXSxbMSwidGFibGUiLCJtZW1iZXItdGFibGUiXSxbMywicm91dGVyTGluayIsNCwi''@;'; put 'put ''bmdGb3IiLCJuZ0Zvck9mIl0sWzEsIndpZHRoLTI1Il0sWzEsIiJdLFszLCJyb3V0ZXJMaW5rIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiYXBwLXNpZGViYXIiLDEpKDEsImNsci10cmVlIiksZ3QoMiwka3QsNiwzLCJjbHItdHJlZS1ub2RlIiwyKSgzLFhrdCwyLDEs''@;'; put 'put ''Im5nLWNvbnRhaW5lciIsMyksaGUoKSgpLGRlKDQsImRpdiIsNCksZ3QoNSxxa3QsMywwLCJkaXYiLDUpKDYsZER0LDgsMywiZGl2Iiw2KSxoZSgpKSwyJmQmJihmZSgyKSxFZSgibmdJZiIsaC5ncm91cHMpLGZlKCksRWUoIm5nRm9yT2YiLGguZ3JvdXBzKSxmZSgyKSxFZSgibmdJZiIsaC5s''@;'; put 'put ''b2FkaW5nKSxmZSgpLEVlKCJuZ0lmIixoLmdyb3VwTWVtYmVycyYmIWgubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W2hzLENhLFAxLG5jLGhsLHJsLHcyLG1oLFVsLE1kLHNnLG9nXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIGhEdCgpe31mdW5jdGlvbiBiYWUo''@;'; put 'put ''Yyl7cmV0dXJuIG51bGw9PWM/aER0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihjKX19ZnVuY3Rpb24gcmJlKGMpe3JldHVybiBudWxsPT1jP1tdOkFycmF5LmlzQXJyYXkoYyk/YzpBcnJheS5mcm9tKGMpfWZ1bmN0aW9uIHBEdCgpe3JldHVybltdfWZ1bmN0aW9uIGli''@;'; put 'put ''ZShjKXtyZXR1cm4gbnVsbD09Yz9wRHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGMpfX1mdW5jdGlvbiBhYmUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyhjKX19ZnVuY3Rpb24gb2JlKGMpe3JldHVybiBmdW5jdGlvbihsKXtyZXR1''@;'; put 'put ''cm4gbC5tYXRjaGVzKGMpfX12YXIgdkR0PUFycmF5LnByb3RvdHlwZS5maW5kO2Z1bmN0aW9uIGJEdCgpe3JldHVybiB0aGlzLmZpcnN0RWxlbWVudENoaWxkfXZhciB3RHQ9QXJyYXkucHJvdG90eXBlLmZpbHRlcjtmdW5jdGlvbiBDRHQoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNoaWxk''@;'; put 'put ''cmVuKX1mdW5jdGlvbiBzYmUoYyl7cmV0dXJuIG5ldyBBcnJheShjLmxlbmd0aCl9ZnVuY3Rpb24gR2ooYyxsKXt0aGlzLm93bmVyRG9jdW1lbnQ9Yy5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPWMubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9Yyx0''@;'; put 'put ''aGlzLl9fZGF0YV9fPWx9ZnVuY3Rpb24gQUR0KGMsbCxhLGQsaCxmKXtmb3IodmFyIE0sdj0wLEQ9bC5sZW5ndGgsVT1mLmxlbmd0aDt2PFU7Kyt2KShNPWxbdl0pPyhNLl9fZGF0YV9fPWZbdl0sZFt2XT1NKTphW3ZdPW5ldyBHaihjLGZbdl0pO2Zvcig7djxEOysrdikoTT1sW3ZdKSYmKGhb''@;'; put 'put ''dl09TSl9ZnVuY3Rpb24ga0R0KGMsbCxhLGQsaCxmLHYpe3ZhciBNLEQsd2UsVT1uZXcgTWFwLHRlPWwubGVuZ3RoLG9lPWYubGVuZ3RoLHZlPW5ldyBBcnJheSh0ZSk7Zm9yKE09MDtNPHRlOysrTSkoRD1sW01dKSYmKHZlW01dPXdlPXYuY2FsbChELEQuX19kYXRhX18sTSxsKSsiIixVLmhh''@;'; put 'put ''cyh3ZSk/aFtNXT1EOlUuc2V0KHdlLEQpKTtmb3IoTT0wO008b2U7KytNKXdlPXYuY2FsbChjLGZbTV0sTSxmKSsiIiwoRD1VLmdldCh3ZSkpPyhkW01dPUQsRC5fX2RhdGFfXz1mW01dLFUuZGVsZXRlKHdlKSk6YVtNXT1uZXcgR2ooYyxmW01dKTtmb3IoTT0wO008dGU7KytNKShEPWxbTV0p''@;'; put 'put ''JiZVLmdldCh2ZVtNXSk9PT1EJiYoaFtNXT1EKX1mdW5jdGlvbiBERHQoYyl7cmV0dXJuIGMuX19kYXRhX199ZnVuY3Rpb24gUkR0KGMpe3JldHVybiJvYmplY3QiPT10eXBlb2YgYyYmImxlbmd0aCJpbiBjP2M6QXJyYXkuZnJvbShjKX1mdW5jdGlvbiBORHQoYyxsKXtyZXR1cm4gYzxsPy0x''@;'; put 'put ''OmM+bD8xOmM+PWw/MDpOYU59R2oucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpHaixhcHBlbmRDaGlsZDpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShjLHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oYyxsKXtyZXR1cm4gdGhpcy5fcGFyZW50''@;'; put 'put ''Lmluc2VydEJlZm9yZShjLGwpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihjKX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYyl9fTt2YXIgX2FlPSJo''@;'; put 'put ''dHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjtjb25zdCBsYmU9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOl9hZSx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHht''@;'; put 'put ''bG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9O2Z1bmN0aW9uICRqKGMpe3ZhciBsPWMrPSIiLGE9bC5pbmRleE9mKCI6Iik7cmV0dXJuIGE+PTAmJiJ4bWxucyIhPT0obD1jLnNsaWNlKDAsYSkpJiYoYz1jLnNsaWNlKGErMSkpLGxiZS5oYXNPd25Qcm9wZXJ0eShsKT97c3Bh''@;'; put 'put ''Y2U6bGJlW2xdLGxvY2FsOmN9OmN9ZnVuY3Rpb24gV0R0KGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGMpfX1mdW5jdGlvbiBZRHQoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwpfX1mdW5jdGlvbiBH''@;'; put 'put ''RHQoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShjLGwpfX1mdW5jdGlvbiAkRHQoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCxsKX19ZnVuY3Rpb24gS0R0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFy''@;'; put 'put ''IGE9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09YT90aGlzLnJlbW92ZUF0dHJpYnV0ZShjKTp0aGlzLnNldEF0dHJpYnV0ZShjLGEpfX1mdW5jdGlvbiBYRHQoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1hP3RoaXMucmVt''@;'; put 'put ''b3ZlQXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCxhKX19ZnVuY3Rpb24gY2JlKGMpe3JldHVybiBjLm93bmVyRG9jdW1lbnQmJmMub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8Yy5kb2N1bWVudCYmY3x8Yy5kZWZhdWx0''@;'; put 'put ''Vmlld31mdW5jdGlvbiBKRHQoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShjKX19ZnVuY3Rpb24gUUR0KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGMsbCxhKX19ZnVuY3Rpb24gZUl0KGMsbCxhKXtyZXR1cm4g''@;'; put 'put ''ZnVuY3Rpb24oKXt2YXIgZD1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1kP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoYyk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShjLGQsYSl9fWZ1bmN0aW9uIHlTKGMsbCl7cmV0dXJuIGMuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShsKXx8Y2Jl''@;'; put 'put ''KGMpLmdldENvbXB1dGVkU3R5bGUoYyxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGwpfWZ1bmN0aW9uIG5JdChjKXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tjXX19ZnVuY3Rpb24gckl0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1tjXT1sfX1mdW5jdGlvbiBpSXQoYyxsKXty''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1hP2RlbGV0ZSB0aGlzW2NdOnRoaXNbY109YX19ZnVuY3Rpb24gdWJlKGMpe3JldHVybiBjLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiB3YWUoYyl7cmV0dXJuIGMuY2xhc3NMaXN0fHxu''@;'; put 'put ''ZXcgZGJlKGMpfWZ1bmN0aW9uIGRiZShjKXt0aGlzLl9ub2RlPWMsdGhpcy5fbmFtZXM9dWJlKGMuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gaGJlKGMsbCl7Zm9yKHZhciBhPXdhZShjKSxkPS0xLGg9bC5sZW5ndGg7KytkPGg7KWEuYWRkKGxbZF0pfWZ1bmN0aW9uIGZi''@;'; put 'put ''ZShjLGwpe2Zvcih2YXIgYT13YWUoYyksZD0tMSxoPWwubGVuZ3RoOysrZDxoOylhLnJlbW92ZShsW2RdKX1mdW5jdGlvbiBvSXQoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7aGJlKHRoaXMsYyl9fWZ1bmN0aW9uIHNJdChjKXtyZXR1cm4gZnVuY3Rpb24oKXtmYmUodGhpcyxjKX19ZnVuY3Rpb24g''@;'; put 'put ''bEl0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7KGwuYXBwbHkodGhpcyxhcmd1bWVudHMpP2hiZTpmYmUpKHRoaXMsYyl9fWZ1bmN0aW9uIHVJdCgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gZEl0KGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9Y319ZnVuY3Rp''@;'; put 'put ''b24gaEl0KGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPWMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bD8/IiJ9fWZ1bmN0aW9uIHBJdCgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIGdJdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD1j''@;'; put 'put ''fX1mdW5jdGlvbiBtSXQoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9bD8/IiJ9fWZ1bmN0aW9uIHlJdCgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiBf''@;'; put 'put ''SXQoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBDSXQoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9dGhpcy5vd25lckRvY3VtZW50LGE9dGhpcy5uYW1lc3BhY2VV''@;'; put 'put ''Ukk7cmV0dXJuIGE9PT1fYWUmJmwuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PV9hZT9sLmNyZWF0ZUVsZW1lbnQoYyk6bC5jcmVhdGVFbGVtZW50TlMoYSxjKX19ZnVuY3Rpb24gU0l0KGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRl''@;'; put 'put ''RWxlbWVudE5TKGMuc3BhY2UsYy5sb2NhbCl9fWZ1bmN0aW9uIHBiZShjKXt2YXIgbD0kaihjKTtyZXR1cm4obC5sb2NhbD9TSXQ6Q0l0KShsKX1mdW5jdGlvbiB4SXQoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBUSXQoKXt2YXIgYz10aGlzLnBhcmVudE5vZGU7YyYmYy5yZW1vdmVDaGlsZCh0''@;'; put 'put ''aGlzKX1mdW5jdGlvbiBrSXQoKXt2YXIgYz10aGlzLmNsb25lTm9kZSghMSksbD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGw/bC5pbnNlcnRCZWZvcmUoYyx0aGlzLm5leHRTaWJsaW5nKTpjfWZ1bmN0aW9uIERJdCgpe3ZhciBjPXRoaXMuY2xvbmVOb2RlKCEwKSxsPXRoaXMucGFyZW50Tm9k''@;'; put 'put ''ZTtyZXR1cm4gbD9sLmluc2VydEJlZm9yZShjLHRoaXMubmV4dFNpYmxpbmcpOmN9ZnVuY3Rpb24gUEl0KGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPXRoaXMuX19vbjtpZihsKXtmb3IodmFyIGYsYT0wLGQ9LTEsaD1sLmxlbmd0aDthPGg7KythKWY9bFthXSxjLnR5cGUmJmYudHlwZSE9''@;'; put 'put ''PWMudHlwZXx8Zi5uYW1lIT09Yy5uYW1lP2xbKytkXT1mOnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihmLnR5cGUsZi5saXN0ZW5lcixmLm9wdGlvbnMpOysrZD9sLmxlbmd0aD1kOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBGSXQoYyxsLGEpe3JldHVybiBmdW5jdGlvbigpe3ZhciBo''@;'; put 'put ''LGQ9dGhpcy5fX29uLGY9ZnVuY3Rpb24gTEl0KGMpe3JldHVybiBmdW5jdGlvbihsKXtjLmNhbGwodGhpcyxsLHRoaXMuX19kYXRhX18pfX0obCk7aWYoZClmb3IodmFyIHY9MCxNPWQubGVuZ3RoO3Y8TTsrK3YpaWYoKGg9ZFt2XSkudHlwZT09PWMudHlwZSYmaC5uYW1lPT09Yy5uYW1lKXJl''@;'; put 'put ''dHVybiB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoaC50eXBlLGgubGlzdGVuZXIsaC5vcHRpb25zKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoaC50eXBlLGgubGlzdGVuZXI9ZixoLm9wdGlvbnM9YSksdm9pZChoLnZhbHVlPWwpO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcihjLnR5cGUsZixhKSxo''@;'; put 'put ''PXt0eXBlOmMudHlwZSxuYW1lOmMubmFtZSx2YWx1ZTpsLGxpc3RlbmVyOmYsb3B0aW9uczphfSxkP2QucHVzaChoKTp0aGlzLl9fb249W2hdfX1mdW5jdGlvbiBnYmUoYyxsLGEpe3ZhciBkPWNiZShjKSxoPWQuQ3VzdG9tRXZlbnQ7ImZ1bmN0aW9uIj09dHlwZW9mIGg/aD1uZXcgaChsLGEp''@;'; put 'put ''OihoPWQuZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50IiksYT8oaC5pbml0RXZlbnQobCxhLmJ1YmJsZXMsYS5jYW5jZWxhYmxlKSxoLmRldGFpbD1hLmRldGFpbCk6aC5pbml0RXZlbnQobCwhMSwhMSkpLGMuZGlzcGF0Y2hFdmVudChoKX1mdW5jdGlvbiBOSXQoYyxsKXtyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gZ2JlKHRoaXMsYyxsKX19ZnVuY3Rpb24gVkl0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGdiZSh0aGlzLGMsbC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1kYmUucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oYyl7dGhpcy5fbmFtZXMuaW5kZXhPZihjKTww''@;'; put 'put ''JiYodGhpcy5fbmFtZXMucHVzaChjKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24oYyl7dmFyIGw9dGhpcy5fbmFtZXMuaW5kZXhPZihjKTtsPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKGwsMSksdGhpcy5f''@;'; put 'put ''bm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YoYyk+PTB9fTt2YXIgQ2FlPVtudWxsXTtmdW5jdGlvbiBqZChjLGwpe3RoaXMuX2dyb3Vwcz1jLHRoaXMuX3BhcmVu''@;'; put 'put ''dHM9bH1mdW5jdGlvbiBtYmUoKXtyZXR1cm4gbmV3IGpkKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sQ2FlKX1qZC5wcm90b3R5cGU9bWJlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6amQsc2VsZWN0OmZ1bmN0aW9uIGZEdChjKXsiZnVuY3Rpb24iIT10eXBlb2YgYyYmKGM9YmFlKGMp''@;'; put 'put ''KTtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9bC5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTsrK2gpZm9yKHZhciBELFUsZj1sW2hdLHY9Zi5sZW5ndGgsTT1kW2hdPW5ldyBBcnJheSh2KSx0ZT0wO3RlPHY7Kyt0ZSkoRD1mW3RlXSkmJihVPWMuY2FsbChELEQuX19kYXRhX18sdGUs''@;'; put 'put ''ZikpJiYoIl9fZGF0YV9fImluIEQmJihVLl9fZGF0YV9fPUQuX19kYXRhX18pLE1bdGVdPVUpO3JldHVybiBuZXcgamQoZCx0aGlzLl9wYXJlbnRzKX0sc2VsZWN0QWxsOmZ1bmN0aW9uIG1EdChjKXtjPSJmdW5jdGlvbiI9PXR5cGVvZiBjP2Z1bmN0aW9uIGdEdChjKXtyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gcmJlKGMuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19KGMpOmliZShjKTtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9bC5sZW5ndGgsZD1bXSxoPVtdLGY9MDtmPGE7KytmKWZvcih2YXIgRCx2PWxbZl0sTT12Lmxlbmd0aCxVPTA7VTxNOysrVSkoRD12W1VdKSYmKGQucHVz''@;'; put 'put ''aChjLmNhbGwoRCxELl9fZGF0YV9fLFUsdikpLGgucHVzaChEKSk7cmV0dXJuIG5ldyBqZChkLGgpfSxzZWxlY3RDaGlsZDpmdW5jdGlvbiBfRHQoYyl7cmV0dXJuIHRoaXMuc2VsZWN0KG51bGw9PWM/YkR0OmZ1bmN0aW9uIHlEdChjKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdkR0LmNh''@;'; put 'put ''bGwodGhpcy5jaGlsZHJlbixjKX19KCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M6b2JlKGMpKSl9LHNlbGVjdENoaWxkcmVuOmZ1bmN0aW9uIE1EdChjKXtyZXR1cm4gdGhpcy5zZWxlY3RBbGwobnVsbD09Yz9DRHQ6ZnVuY3Rpb24gU0R0KGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB3RHQu''@;'; put 'put ''Y2FsbCh0aGlzLmNoaWxkcmVuLGMpfX0oImZ1bmN0aW9uIj09dHlwZW9mIGM/YzpvYmUoYykpKX0sZmlsdGVyOmZ1bmN0aW9uIHhEdChjKXsiZnVuY3Rpb24iIT10eXBlb2YgYyYmKGM9YWJlKGMpKTtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9bC5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0w''@;'; put 'put ''O2g8YTsrK2gpZm9yKHZhciBELGY9bFtoXSx2PWYubGVuZ3RoLE09ZFtoXT1bXSxVPTA7VTx2OysrVSkoRD1mW1VdKSYmYy5jYWxsKEQsRC5fX2RhdGFfXyxVLGYpJiZNLnB1c2goRCk7cmV0dXJuIG5ldyBqZChkLHRoaXMuX3BhcmVudHMpfSxkYXRhOmZ1bmN0aW9uIElEdChjLGwpe2lmKCFh''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoKXJldHVybiBBcnJheS5mcm9tKHRoaXMsRER0KTt2YXIgYT1sP2tEdDpBRHQsZD10aGlzLl9wYXJlbnRzLGg9dGhpcy5fZ3JvdXBzOyJmdW5jdGlvbiIhPXR5cGVvZiBjJiYoYz1mdW5jdGlvbiBURHQoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGN9fShjKSk7''@;'; put 'put ''Zm9yKHZhciBmPWgubGVuZ3RoLHY9bmV3IEFycmF5KGYpLE09bmV3IEFycmF5KGYpLEQ9bmV3IEFycmF5KGYpLFU9MDtVPGY7KytVKXt2YXIgdGU9ZFtVXSxvZT1oW1VdLHZlPW9lLmxlbmd0aCx3ZT1SRHQoYy5jYWxsKHRlLHRlJiZ0ZS5fX2RhdGFfXyxVLGQpKSxGZT13ZS5sZW5ndGgsV2U9''@;'; put 'put ''TVtVXT1uZXcgQXJyYXkoRmUpLG50PXZbVV09bmV3IEFycmF5KEZlKTthKHRlLG9lLFdlLG50LERbVV09bmV3IEFycmF5KHZlKSx3ZSxsKTtmb3IodmFyIHp0LHluLG10PTAsJHQ9MDttdDxGZTsrK210KWlmKHp0PVdlW210XSl7Zm9yKG10Pj0kdCYmKCR0PW10KzEpOyEoeW49bnRbJHRdKSYm''@;'; put 'put ''KyskdDxGZTspO3p0Ll9uZXh0PXlufHxudWxsfX1yZXR1cm4odj1uZXcgamQodixkKSkuX2VudGVyPU0sdi5fZXhpdD1ELHZ9LGVudGVyOmZ1bmN0aW9uIEVEdCgpe3JldHVybiBuZXcgamQodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoc2JlKSx0aGlzLl9wYXJlbnRzKX0sZXhpdDpm''@;'; put 'put ''dW5jdGlvbiBMRHQoKXtyZXR1cm4gbmV3IGpkKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAoc2JlKSx0aGlzLl9wYXJlbnRzKX0sam9pbjpmdW5jdGlvbiBPRHQoYyxsLGEpe3ZhciBkPXRoaXMuZW50ZXIoKSxoPXRoaXMsZj10aGlzLmV4aXQoKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBl''@;'; put 'put ''b2YgYz8oZD1jKGQpKSYmKGQ9ZC5zZWxlY3Rpb24oKSk6ZD1kLmFwcGVuZChjKyIiKSxudWxsIT1sJiYoaD1sKGgpKSYmKGg9aC5zZWxlY3Rpb24oKSksbnVsbD09YT9mLnJlbW92ZSgpOmEoZiksZCYmaD9kLm1lcmdlKGgpLm9yZGVyKCk6aH0sbWVyZ2U6ZnVuY3Rpb24gUER0KGMpe2Zvcih2''@;'; put 'put ''YXIgbD1jLnNlbGVjdGlvbj9jLnNlbGVjdGlvbigpOmMsYT10aGlzLl9ncm91cHMsZD1sLl9ncm91cHMsaD1hLmxlbmd0aCx2PU1hdGgubWluKGgsZC5sZW5ndGgpLE09bmV3IEFycmF5KGgpLEQ9MDtEPHY7KytEKWZvcih2YXIgd2UsVT1hW0RdLHRlPWRbRF0sb2U9VS5sZW5ndGgsdmU9TVtE''@;'; put 'put ''XT1uZXcgQXJyYXkob2UpLEZlPTA7RmU8b2U7KytGZSkod2U9VVtGZV18fHRlW0ZlXSkmJih2ZVtGZV09d2UpO2Zvcig7RDxoOysrRClNW0RdPWFbRF07cmV0dXJuIG5ldyBqZChNLHRoaXMuX3BhcmVudHMpfSxzZWxlY3Rpb246ZnVuY3Rpb24gekl0KCl7cmV0dXJuIHRoaXN9LG9yZGVyOmZ1''@;'; put 'put ''bmN0aW9uIEZEdCgpe2Zvcih2YXIgYz10aGlzLl9ncm91cHMsbD0tMSxhPWMubGVuZ3RoOysrbDxhOylmb3IodmFyIHYsZD1jW2xdLGg9ZC5sZW5ndGgtMSxmPWRbaF07LS1oPj0wOykodj1kW2hdKSYmKGYmJjRedi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihmKSYmZi5wYXJlbnROb2RlLmlu''@;'; put 'put ''c2VydEJlZm9yZSh2LGYpLGY9dik7cmV0dXJuIHRoaXN9LHNvcnQ6ZnVuY3Rpb24gSER0KGMpe2Z1bmN0aW9uIGwob2UsdmUpe3JldHVybiBvZSYmdmU/YyhvZS5fX2RhdGFfXyx2ZS5fX2RhdGFfXyk6IW9lLSF2ZX1jfHwoYz1ORHQpO2Zvcih2YXIgYT10aGlzLl9ncm91cHMsZD1hLmxlbmd0''@;'; put 'put ''aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkOysrZil7Zm9yKHZhciBVLHY9YVtmXSxNPXYubGVuZ3RoLEQ9aFtmXT1uZXcgQXJyYXkoTSksdGU9MDt0ZTxNOysrdGUpKFU9dlt0ZV0pJiYoRFt0ZV09VSk7RC5zb3J0KGwpfXJldHVybiBuZXcgamQoaCx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfSxj''@;'; put 'put ''YWxsOmZ1bmN0aW9uIFZEdCgpe3ZhciBjPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsYy5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc30sbm9kZXM6ZnVuY3Rpb24gQkR0KCl7cmV0dXJuIEFycmF5LmZyb20odGhpcyl9LG5vZGU6ZnVuY3Rpb24gakR0KCl7Zm9yKHZh''@;'; put 'put ''ciBjPXRoaXMuX2dyb3VwcyxsPTAsYT1jLmxlbmd0aDtsPGE7KytsKWZvcih2YXIgZD1jW2xdLGg9MCxmPWQubGVuZ3RoO2g8ZjsrK2gpe3ZhciB2PWRbaF07aWYodilyZXR1cm4gdn1yZXR1cm4gbnVsbH0sc2l6ZTpmdW5jdGlvbiB6RHQoKXtsZXQgYz0wO2Zvcihjb25zdCBsIG9mIHRoaXMp''@;'; put 'put ''KytjO3JldHVybiBjfSxlbXB0eTpmdW5jdGlvbiBVRHQoKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGVhY2g6ZnVuY3Rpb24gWkR0KGMpe2Zvcih2YXIgbD10aGlzLl9ncm91cHMsYT0wLGQ9bC5sZW5ndGg7YTxkOysrYSlmb3IodmFyIE0saD1sW2FdLGY9MCx2PWgubGVuZ3RoO2Y8djsrK2YpKE09''@;'; put 'put ''aFtmXSkmJmMuY2FsbChNLE0uX19kYXRhX18sZixoKTtyZXR1cm4gdGhpc30sYXR0cjpmdW5jdGlvbiBxRHQoYyxsKXt2YXIgYT0kaihjKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBkPXRoaXMubm9kZSgpO3JldHVybiBhLmxvY2FsP2QuZ2V0QXR0cmlidXRlTlMoYS5zcGFjZSxhLmxv''@;'; put 'put ''Y2FsKTpkLmdldEF0dHJpYnV0ZShhKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1sP2EubG9jYWw/WUR0OldEdDoiZnVuY3Rpb24iPT10eXBlb2YgbD9hLmxvY2FsP1hEdDpLRHQ6YS5sb2NhbD8kRHQ6R0R0KShhLGwpKX0sc3R5bGU6ZnVuY3Rpb24gdEl0KGMsbCxhKXtyZXR1cm4gYXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09bD9KRHQ6ImZ1bmN0aW9uIj09dHlwZW9mIGw/ZUl0OlFEdCkoYyxsLGE/PyIiKSk6eVModGhpcy5ub2RlKCksYyl9LHByb3BlcnR5OmZ1bmN0aW9uIGFJdChjLGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxs''@;'; put 'put ''PT1sP25JdDoiZnVuY3Rpb24iPT10eXBlb2YgbD9pSXQ6ckl0KShjLGwpKTp0aGlzLm5vZGUoKVtjXX0sY2xhc3NlZDpmdW5jdGlvbiBjSXQoYyxsKXt2YXIgYT11YmUoYysiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGQ9d2FlKHRoaXMubm9kZSgpKSxoPS0xLGY9YS5sZW5n''@;'; put 'put ''dGg7KytoPGY7KWlmKCFkLmNvbnRhaW5zKGFbaF0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBsP2xJdDpsP29JdDpzSXQpKGEsbCkpfSx0ZXh0OmZ1bmN0aW9uIGZJdChjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2go''@;'; put 'put ''bnVsbD09Yz91SXQ6KCJmdW5jdGlvbiI9PXR5cGVvZiBjP2hJdDpkSXQpKGMpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0saHRtbDpmdW5jdGlvbiB2SXQoYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PWM/cEl0OigiZnVuY3Rpb24iPT10eXBlb2YgYz9tSXQ6''@;'; put 'put ''Z0l0KShjKSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxyYWlzZTpmdW5jdGlvbiBiSXQoKXtyZXR1cm4gdGhpcy5lYWNoKHlJdCl9LGxvd2VyOmZ1bmN0aW9uIHdJdCgpe3JldHVybiB0aGlzLmVhY2goX0l0KX0sYXBwZW5kOmZ1bmN0aW9uIE1JdChjKXt2YXIgbD0iZnVuY3Rpb24iPT10eXBl''@;'; put 'put ''b2YgYz9jOnBiZShjKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChsLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX0saW5zZXJ0OmZ1bmN0aW9uIEVJdChjLGwpe3ZhciBhPSJmdW5jdGlvbiI9PXR5cGVvZiBjP2M6cGJlKGMpLGQ9bnVsbD09''@;'; put 'put ''bD94SXQ6ImZ1bmN0aW9uIj09dHlwZW9mIGw/bDpiYWUobCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKGEuYXBwbHkodGhpcyxhcmd1bWVudHMpLGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfSxyZW1vdmU6ZnVuY3Rpb24g''@;'; put 'put ''QUl0KCl7cmV0dXJuIHRoaXMuZWFjaChUSXQpfSxjbG9uZTpmdW5jdGlvbiBJSXQoYyl7cmV0dXJuIHRoaXMuc2VsZWN0KGM/REl0OmtJdCl9LGRhdHVtOmZ1bmN0aW9uIFJJdChjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsYyk6dGhpcy5ub2Rl''@;'; put 'put ''KCkuX19kYXRhX199LG9uOmZ1bmN0aW9uIEhJdChjLGwsYSl7dmFyIGgsdixkPWZ1bmN0aW9uIE9JdChjKXtyZXR1cm4gYy50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKGwpe3ZhciBhPSIiLGQ9bC5pbmRleE9mKCIuIik7cmV0dXJuIGQ+PTAmJihhPWwuc2xpY2UoZCsxKSxs''@;'; put 'put ''PWwuc2xpY2UoMCxkKSkse3R5cGU6bCxuYW1lOmF9fSl9KGMrIiIpLGY9ZC5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtmb3IoTT1sP0ZJdDpQSXQsaD0wO2g8ZjsrK2gpdGhpcy5lYWNoKE0oZFtoXSxsLGEpKTtyZXR1cm4gdGhpc312YXIgTT10aGlzLm5vZGUoKS5fX29uO2lm''@;'; put 'put ''KE0pZm9yKHZhciB0ZSxEPTAsVT1NLmxlbmd0aDtEPFU7KytEKWZvcihoPTAsdGU9TVtEXTtoPGY7KytoKWlmKCh2PWRbaF0pLnR5cGU9PT10ZS50eXBlJiZ2Lm5hbWU9PT10ZS5uYW1lKXJldHVybiB0ZS52YWx1ZX0sZGlzcGF0Y2g6ZnVuY3Rpb24gQkl0KGMsbCl7cmV0dXJuIHRoaXMuZWFj''@;'; put 'put ''aCgoImZ1bmN0aW9uIj09dHlwZW9mIGw/Vkl0Ok5JdCkoYyxsKSl9LFtTeW1ib2wuaXRlcmF0b3JdOmZ1bmN0aW9uKmpJdCgpe2Zvcih2YXIgYz10aGlzLl9ncm91cHMsbD0wLGE9Yy5sZW5ndGg7bDxhOysrbClmb3IodmFyIHYsZD1jW2xdLGg9MCxmPWQubGVuZ3RoO2g8ZjsrK2gpKHY9ZFto''@;'; put 'put ''XSkmJih5aWVsZCB2KX19O2NvbnN0IHZ5PW1iZTtmdW5jdGlvbiBTYWUoYyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjP25ldyBqZChbZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChjKV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBqZChbcmJlKGMpXSxDYWUpfWZ1bmN0aW9u''@;'; put 'put ''IExzKGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYz9uZXcgamQoW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGMpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBqZChbW2NdXSxDYWUpfXZhciBVSXQ9e3ZhbHVlOigpPT57fX07ZnVuY3Rpb24gdmJlKCl7Zm9yKHZhciBkLGM9''@;'; put 'put ''MCxsPWFyZ3VtZW50cy5sZW5ndGgsYT17fTtjPGw7KytjKXtpZighKGQ9YXJndW1lbnRzW2NdKyIiKXx8ZCBpbiBhfHwvW1xzLl0vLnRlc3QoZCkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrZCk7YVtkXT1bXX1yZXR1cm4gbmV3IEtqKGEpfWZ1bmN0aW9uIEtqKGMpe3RoaXMu''@;'; put 'put ''Xz1jfWZ1bmN0aW9uIFdJdChjLGwpe2Zvcih2YXIgaCxhPTAsZD1jLmxlbmd0aDthPGQ7KythKWlmKChoPWNbYV0pLm5hbWU9PT1sKXJldHVybiBoLnZhbHVlfWZ1bmN0aW9uIHliZShjLGwsYSl7Zm9yKHZhciBkPTAsaD1jLmxlbmd0aDtkPGg7KytkKWlmKGNbZF0ubmFtZT09PWwpe2NbZF09''@;'; put 'put ''VUl0LGM9Yy5zbGljZSgwLGQpLmNvbmNhdChjLnNsaWNlKGQrMSkpO2JyZWFrfXJldHVybiBudWxsIT1hJiZjLnB1c2goe25hbWU6bCx2YWx1ZTphfSksY31Lai5wcm90b3R5cGU9dmJlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6S2osb246ZnVuY3Rpb24oYyxsKXt2YXIgaCxhPXRoaXMuXyxk''@;'; put 'put ''PWZ1bmN0aW9uIFpJdChjLGwpe3JldHVybiBjLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24oYSl7dmFyIGQ9IiIsaD1hLmluZGV4T2YoIi4iKTtpZihoPj0wJiYoZD1hLnNsaWNlKGgrMSksYT1hLnNsaWNlKDAsaCkpLGEmJiFsLmhhc093blByb3BlcnR5KGEpKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigidW5rbm93biB0eXBlOiAiK2EpO3JldHVybnt0eXBlOmEsbmFtZTpkfX0pfShjKyIiLGEpLGY9LTEsdj1kLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPWwmJiJmdW5jdGlvbiIhPXR5cGVvZiBsKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxs''@;'; put 'put ''YmFjazogIitsKTtmb3IoOysrZjx2OylpZihoPShjPWRbZl0pLnR5cGUpYVtoXT15YmUoYVtoXSxjLm5hbWUsbCk7ZWxzZSBpZihudWxsPT1sKWZvcihoIGluIGEpYVtoXT15YmUoYVtoXSxjLm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK2Y8djspaWYoKGg9KGM9ZFtmXSkudHlwZSkm''@;'; put 'put ''JihoPVdJdChhW2hdLGMubmFtZSkpKXJldHVybiBofSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGM9e30sbD10aGlzLl87Zm9yKHZhciBhIGluIGwpY1thXT1sW2FdLnNsaWNlKCk7cmV0dXJuIG5ldyBLaihjKX0sY2FsbDpmdW5jdGlvbihjLGwpe2lmKChoPWFyZ3VtZW50cy5sZW5ndGgtMik+MClm''@;'; put 'put ''b3IodmFyIGgsZixhPW5ldyBBcnJheShoKSxkPTA7ZDxoOysrZClhW2RdPWFyZ3VtZW50c1tkKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoYykpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrYyk7Zm9yKGQ9MCxoPShmPXRoaXMuX1tjXSkubGVuZ3RoO2Q8aDsrK2QpZltk''@;'; put 'put ''XS52YWx1ZS5hcHBseShsLGEpfSxhcHBseTpmdW5jdGlvbihjLGwsYSl7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShjKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitjKTtmb3IodmFyIGQ9dGhpcy5fW2NdLGg9MCxmPWQubGVuZ3RoO2g8ZjsrK2gpZFtoXS52YWx1ZS5hcHBs''@;'; put 'put ''eShsLGEpfX07Y29uc3QgTWFlPXZiZTt2YXIgWGoscUQsYlM9MCxLRD0wLFhEPTAscWo9MCx5eT0wLEpqPTAsSkQ9Im9iamVjdCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUsX2JlPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cu''@;'; put 'put ''cmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKGMpe3NldFRpbWVvdXQoYywxNyl9O2Z1bmN0aW9uIHhhZSgpe3JldHVybiB5eXx8KF9iZShZSXQpLHl5PUpELm5vdygpK0pqKX1mdW5jdGlvbiBZSXQoKXt5eT0w''@;'; put 'put ''fWZ1bmN0aW9uIFFqKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiB3YmUoYyxsLGEpe3ZhciBkPW5ldyBRajtyZXR1cm4gZC5yZXN0YXJ0KGMsbCxhKSxkfWZ1bmN0aW9uIENiZSgpe3l5PShxaj1KRC5ub3coKSkrSmosYlM9S0Q9MDt0cnl7IWZ1bmN0''@;'; put 'put ''aW9uIEdJdCgpe3hhZSgpLCsrYlM7Zm9yKHZhciBsLGM9WGo7YzspKGw9eXktYy5fdGltZSk+PTAmJmMuX2NhbGwuY2FsbCh2b2lkIDAsbCksYz1jLl9uZXh0Oy0tYlN9KCl9ZmluYWxseXtiUz0wLGZ1bmN0aW9uIEtJdCgpe2Zvcih2YXIgYyxhLGw9WGosZD0xLzA7bDspbC5fY2FsbD8oZD5s''@;'; put 'put ''Ll90aW1lJiYoZD1sLl90aW1lKSxjPWwsbD1sLl9uZXh0KTooYT1sLl9uZXh0LGwuX25leHQ9bnVsbCxsPWM/Yy5fbmV4dD1hOlhqPWEpO3FEPWMsRWFlKGQpfSgpLHl5PTB9fWZ1bmN0aW9uICRJdCgpe3ZhciBjPUpELm5vdygpLGw9Yy1xajtsPjFlMyYmKEpqLT1sLHFqPWMpfWZ1bmN0aW9u''@;'; put 'put ''IEVhZShjKXtiU3x8KEtEJiYoS0Q9Y2xlYXJUaW1lb3V0KEtEKSksYy15eT4yND8oYzwxLzAmJihLRD1zZXRUaW1lb3V0KENiZSxjLUpELm5vdygpLUpqKSksWEQmJihYRD1jbGVhckludGVydmFsKFhEKSkpOihYRHx8KHFqPUpELm5vdygpLFhEPXNldEludGVydmFsKCRJdCwxZTMpKSxiUz0x''@;'; put 'put ''LF9iZShDYmUpKSl9ZnVuY3Rpb24gZXooYyxsLGEpe3ZhciBkPW5ldyBRajtyZXR1cm4gZC5yZXN0YXJ0KGg9PntkLnN0b3AoKSxjKGgrbCl9LGw9bnVsbD09bD8wOitsLGEpLGR9UWoucHJvdG90eXBlPXdiZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlFqLHJlc3RhcnQ6ZnVuY3Rpb24oYyxs''@;'; put 'put ''LGEpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7YT0obnVsbD09YT94YWUoKTorYSkrKG51bGw9PWw/MDorbCksIXRoaXMuX25leHQmJnFEIT09dGhpcyYmKHFEP3FELl9uZXh0PXRoaXM6WGo9dGhpcyxx''@;'; put 'put ''RD10aGlzKSx0aGlzLl9jYWxsPWMsdGhpcy5fdGltZT1hLEVhZSgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxFYWUoKSl9fTt2YXIgWEl0PU1hZSgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxxSXQ9W107''@;'; put 'put ''ZnVuY3Rpb24gcnooYyxsLGEsZCxoLGYpe3ZhciB2PWMuX190cmFuc2l0aW9uO2lmKHYpe2lmKGEgaW4gdilyZXR1cm59ZWxzZSBjLl9fdHJhbnNpdGlvbj17fTshZnVuY3Rpb24gSkl0KGMsbCxhKXt2YXIgaCxkPWMuX190cmFuc2l0aW9uO2Z1bmN0aW9uIHYoVSl7dmFyIHRlLG9lLHZlLHdl''@;'; put 'put ''O2lmKDEhPT1hLnN0YXRlKXJldHVybiBEKCk7Zm9yKHRlIGluIGQpaWYoKHdlPWRbdGVdKS5uYW1lPT09YS5uYW1lKXtpZigzPT09d2Uuc3RhdGUpcmV0dXJuIGV6KHYpOzQ9PT13ZS5zdGF0ZT8od2Uuc3RhdGU9Nix3ZS50aW1lci5zdG9wKCksd2Uub24uY2FsbCgiaW50ZXJydXB0IixjLGMu''@;'; put 'put ''X19kYXRhX18sd2UuaW5kZXgsd2UuZ3JvdXApLGRlbGV0ZSBkW3RlXSk6K3RlPGwmJih3ZS5zdGF0ZT02LHdlLnRpbWVyLnN0b3AoKSx3ZS5vbi5jYWxsKCJjYW5jZWwiLGMsYy5fX2RhdGFfXyx3ZS5pbmRleCx3ZS5ncm91cCksZGVsZXRlIGRbdGVdKX1pZihleihmdW5jdGlvbigpezM9PT1h''@;'; put 'put ''LnN0YXRlJiYoYS5zdGF0ZT00LGEudGltZXIucmVzdGFydChNLGEuZGVsYXksYS50aW1lKSxNKFUpKX0pLGEuc3RhdGU9MixhLm9uLmNhbGwoInN0YXJ0IixjLGMuX19kYXRhX18sYS5pbmRleCxhLmdyb3VwKSwyPT09YS5zdGF0ZSl7Zm9yKGEuc3RhdGU9MyxoPW5ldyBBcnJheSh2ZT1hLnR3''@;'; put 'put ''ZWVuLmxlbmd0aCksdGU9MCxvZT0tMTt0ZTx2ZTsrK3RlKSh3ZT1hLnR3ZWVuW3RlXS52YWx1ZS5jYWxsKGMsYy5fX2RhdGFfXyxhLmluZGV4LGEuZ3JvdXApKSYmKGhbKytvZV09d2UpO2gubGVuZ3RoPW9lKzF9fWZ1bmN0aW9uIE0oVSl7Zm9yKHZhciB0ZT1VPGEuZHVyYXRpb24/YS5lYXNl''@;'; put 'put ''LmNhbGwobnVsbCxVL2EuZHVyYXRpb24pOihhLnRpbWVyLnJlc3RhcnQoRCksYS5zdGF0ZT01LDEpLG9lPS0xLHZlPWgubGVuZ3RoOysrb2U8dmU7KWhbb2VdLmNhbGwoYyx0ZSk7NT09PWEuc3RhdGUmJihhLm9uLmNhbGwoImVuZCIsYyxjLl9fZGF0YV9fLGEuaW5kZXgsYS5ncm91cCksRCgp''@;'; put 'put ''KX1mdW5jdGlvbiBEKCl7Zm9yKHZhciBVIGluIGEuc3RhdGU9NixhLnRpbWVyLnN0b3AoKSxkZWxldGUgZFtsXSxkKXJldHVybjtkZWxldGUgYy5fX3RyYW5zaXRpb259ZFtsXT1hLGEudGltZXI9d2JlKGZ1bmN0aW9uIGYoVSl7YS5zdGF0ZT0xLGEudGltZXIucmVzdGFydCh2LGEuZGVsYXks''@;'; put 'put ''YS50aW1lKSxhLmRlbGF5PD1VJiZ2KFUtYS5kZWxheSl9LDAsYS50aW1lKX0oYyxhLHtuYW1lOmwsaW5kZXg6ZCxncm91cDpoLG9uOlhJdCx0d2VlbjpxSXQsdGltZTpmLnRpbWUsZGVsYXk6Zi5kZWxheSxkdXJhdGlvbjpmLmR1cmF0aW9uLGVhc2U6Zi5lYXNlLHRpbWVyOm51bGwsc3RhdGU6''@;'; put 'put ''MH0pfWZ1bmN0aW9uIERhZShjLGwpe3ZhciBhPXZwKGMsbCk7aWYoYS5zdGF0ZT4wKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkIik7cmV0dXJuIGF9ZnVuY3Rpb24gdWcoYyxsKXt2YXIgYT12cChjLGwpO2lmKGEuc3RhdGU+Myl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''InRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmciKTtyZXR1cm4gYX1mdW5jdGlvbiB2cChjLGwpe3ZhciBhPWMuX190cmFuc2l0aW9uO2lmKCFhfHwhKGE9YVtsXSkpdGhyb3cgbmV3IEVycm9yKCJ0cmFuc2l0aW9uIG5vdCBmb3VuZCIpO3JldHVybiBhfWZ1bmN0aW9uIGl6KGMsbCl7dmFyIGQs''@;'; put 'put ''aCx2LGE9Yy5fX3RyYW5zaXRpb24sZj0hMDtpZihhKXtmb3IodiBpbiBsPW51bGw9PWw/bnVsbDpsKyIiLGEpKGQ9YVt2XSkubmFtZT09PWw/KGg9ZC5zdGF0ZT4yJiZkLnN0YXRlPDUsZC5zdGF0ZT02LGQudGltZXIuc3RvcCgpLGQub24uY2FsbChoPyJpbnRlcnJ1cHQiOiJjYW5jZWwiLGMs''@;'; put 'put ''Yy5fX2RhdGFfXyxkLmluZGV4LGQuZ3JvdXApLGRlbGV0ZSBhW3ZdKTpmPSExO2YmJmRlbGV0ZSBjLl9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gZGcoYyxsKXtyZXR1cm4gYz0rYyxsPStsLGZ1bmN0aW9uKGEpe3JldHVybiBjKigxLWEpK2wqYX19dmFyIGF6LHhiZT0xODAvTWF0aC5QSSxJYWU9''@;'; put 'put ''e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX07ZnVuY3Rpb24gRWJlKGMsbCxhLGQsaCxmKXt2YXIgdixNLEQ7cmV0dXJuKHY9TWF0aC5zcXJ0KGMqYytsKmwpKSYmKGMvPXYsbC89diksKEQ9YyphK2wqZCkmJihhLT1jKkQsZC09''@;'; put 'put ''bCpEKSwoTT1NYXRoLnNxcnQoYSphK2QqZCkpJiYoYS89TSxkLz1NLEQvPU0pLGMqZDxsKmEmJihjPS1jLGw9LWwsRD0tRCx2PS12KSx7dHJhbnNsYXRlWDpoLHRyYW5zbGF0ZVk6Zixyb3RhdGU6TWF0aC5hdGFuMihsLGMpKnhiZSxza2V3WDpNYXRoLmF0YW4oRCkqeGJlLHNjYWxlWDp2LHNj''@;'; put 'put ''YWxlWTpNfX1mdW5jdGlvbiBUYmUoYyxsLGEsZCl7ZnVuY3Rpb24gaChVKXtyZXR1cm4gVS5sZW5ndGg/VS5wb3AoKSsiICI6IiJ9cmV0dXJuIGZ1bmN0aW9uKFUsdGUpe3ZhciBvZT1bXSx2ZT1bXTtyZXR1cm4gVT1jKFUpLHRlPWModGUpLGZ1bmN0aW9uIGYoVSx0ZSxvZSx2ZSx3ZSxGZSl7''@;'; put 'put ''aWYoVSE9PW9lfHx0ZSE9PXZlKXt2YXIgV2U9d2UucHVzaCgidHJhbnNsYXRlKCIsbnVsbCxsLG51bGwsYSk7RmUucHVzaCh7aTpXZS00LHg6ZGcoVSxvZSl9LHtpOldlLTIseDpkZyh0ZSx2ZSl9KX1lbHNlKG9lfHx2ZSkmJndlLnB1c2goInRyYW5zbGF0ZSgiK29lK2wrdmUrYSl9KFUudHJh''@;'; put 'put ''bnNsYXRlWCxVLnRyYW5zbGF0ZVksdGUudHJhbnNsYXRlWCx0ZS50cmFuc2xhdGVZLG9lLHZlKSxmdW5jdGlvbiB2KFUsdGUsb2UsdmUpe1UhPT10ZT8oVS10ZT4xODA/dGUrPTM2MDp0ZS1VPjE4MCYmKFUrPTM2MCksdmUucHVzaCh7aTpvZS5wdXNoKGgob2UpKyJyb3RhdGUoIixudWxsLGQp''@;'; put 'put ''LTIseDpkZyhVLHRlKX0pKTp0ZSYmb2UucHVzaChoKG9lKSsicm90YXRlKCIrdGUrZCl9KFUucm90YXRlLHRlLnJvdGF0ZSxvZSx2ZSksZnVuY3Rpb24gTShVLHRlLG9lLHZlKXtVIT09dGU/dmUucHVzaCh7aTpvZS5wdXNoKGgob2UpKyJza2V3WCgiLG51bGwsZCktMix4OmRnKFUsdGUpfSk6''@;'; put 'put ''dGUmJm9lLnB1c2goaChvZSkrInNrZXdYKCIrdGUrZCl9KFUuc2tld1gsdGUuc2tld1gsb2UsdmUpLGZ1bmN0aW9uIEQoVSx0ZSxvZSx2ZSx3ZSxGZSl7aWYoVSE9PW9lfHx0ZSE9PXZlKXt2YXIgV2U9d2UucHVzaChoKHdlKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7RmUucHVzaCh7''@;'; put 'put ''aTpXZS00LHg6ZGcoVSxvZSl9LHtpOldlLTIseDpkZyh0ZSx2ZSl9KX1lbHNlKDEhPT1vZXx8MSE9PXZlKSYmd2UucHVzaChoKHdlKSsic2NhbGUoIitvZSsiLCIrdmUrIikiKX0oVS5zY2FsZVgsVS5zY2FsZVksdGUuc2NhbGVYLHRlLnNjYWxlWSxvZSx2ZSksVT10ZT1udWxsLGZ1bmN0aW9u''@;'; put 'put ''KHdlKXtmb3IodmFyIG50LEZlPS0xLFdlPXZlLmxlbmd0aDsrK0ZlPFdlOylvZVsobnQ9dmVbRmVdKS5pXT1udC54KHdlKTtyZXR1cm4gb2Uuam9pbigiIil9fX12YXIgblJ0PVRiZShmdW5jdGlvbiBlUnQoYyl7Y29uc3QgbD1uZXcoImZ1bmN0aW9uIj09dHlwZW9mIERPTU1hdHJpeD9ET01N''@;'; put 'put ''YXRyaXg6V2ViS2l0Q1NTTWF0cml4KShjKyIiKTtyZXR1cm4gbC5pc0lkZW50aXR5P0lhZTpFYmUobC5hLGwuYixsLmMsbC5kLGwuZSxsLmYpfSwicHgsICIsInB4KSIsImRlZykiKSxBYmU9VGJlKGZ1bmN0aW9uIHRSdChjKXtyZXR1cm4gbnVsbCE9YyYmKGF6fHwoYXo9ZG9jdW1lbnQuY3Jl''@;'; put 'put ''YXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksYXouc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGMpLGM9YXoudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/RWJlKChjPWMubWF0cml4KS5hLGMuYixjLmMsYy5kLGMuZSxjLmYpOklhZX0sIiwg''@;'; put 'put ''IiwiKSIsIikiKTtmdW5jdGlvbiByUnQoYyxsKXt2YXIgYSxkO3JldHVybiBmdW5jdGlvbigpe3ZhciBoPXVnKHRoaXMsYyksZj1oLnR3ZWVuO2lmKGYhPT1hKWZvcih2YXIgdj0wLE09KGQ9YT1mKS5sZW5ndGg7djxNOysrdilpZihkW3ZdLm5hbWU9PT1sKXsoZD1kLnNsaWNlKCkpLnNwbGlj''@;'; put 'put ''ZSh2LDEpO2JyZWFrfWgudHdlZW49ZH19ZnVuY3Rpb24gaVJ0KGMsbCxhKXt2YXIgZCxoO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBhKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZj11Zyh0aGlzLGMpLHY9Zi50d2VlbjtpZih2IT09ZCl7aD0oZD12KS5zbGljZSgpO2Zv''@;'; put 'put ''cih2YXIgTT17bmFtZTpsLHZhbHVlOmF9LEQ9MCxVPWgubGVuZ3RoO0Q8VTsrK0QpaWYoaFtEXS5uYW1lPT09bCl7aFtEXT1NO2JyZWFrfUQ9PT1VJiZoLnB1c2goTSl9Zi50d2Vlbj1ofX1mdW5jdGlvbiBSYWUoYyxsLGEpe3ZhciBkPWMuX2lkO3JldHVybiBjLmVhY2goZnVuY3Rpb24oKXt2''@;'; put 'put ''YXIgaD11Zyh0aGlzLGQpOyhoLnZhbHVlfHwoaC52YWx1ZT17fSkpW2xdPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaCl7cmV0dXJuIHZwKGgsZCkudmFsdWVbbF19fWZ1bmN0aW9uIExhZShjLGwsYSl7Yy5wcm90b3R5cGU9bC5wcm90b3R5cGU9YSxhLmNvbnN0cnVjdG9y''@;'; put 'put ''PWN9ZnVuY3Rpb24ga2JlKGMsbCl7dmFyIGE9T2JqZWN0LmNyZWF0ZShjLnByb3RvdHlwZSk7Zm9yKHZhciBkIGluIGwpYVtkXT1sW2RdO3JldHVybiBhfWZ1bmN0aW9uIFFEKCl7fXZhciBvej0xLy43LF9TPSJcXHMqKFsrLV0/XFxkKylcXHMqIix0ST0iXFxzKihbKy1dPyg/OlxcZCpcXC4p''@;'; put 'put ''P1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsaGc9IlxccyooWystXT8oPzpcXGQqXFwuKT9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixvUnQ9L14jKFswLTlhLWZdezMsOH0pJC8sc1J0PW5ldyBSZWdFeHAoYF5yZ2JcXCgke19TfSwke19TfSwke19TfVxcKSRgKSxsUnQ9bmV3''@;'; put 'put ''IFJlZ0V4cChgXnJnYlxcKCR7aGd9LCR7aGd9LCR7aGd9XFwpJGApLGNSdD1uZXcgUmVnRXhwKGBecmdiYVxcKCR7X1N9LCR7X1N9LCR7X1N9LCR7dEl9XFwpJGApLHVSdD1uZXcgUmVnRXhwKGBecmdiYVxcKCR7aGd9LCR7aGd9LCR7aGd9LCR7dEl9XFwpJGApLGRSdD1uZXcgUmVnRXhwKGBe''@;'; put 'put ''aHNsXFwoJHt0SX0sJHtoZ30sJHtoZ31cXCkkYCksaFJ0PW5ldyBSZWdFeHAoYF5oc2xhXFwoJHt0SX0sJHtoZ30sJHtoZ30sJHt0SX1cXCkkYCksRGJlPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJl''@;'; put 'put ''OjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4''@;'; put 'put ''Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJr''@;'; put 'put ''Z3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0''@;'; put 'put ''LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcs''@;'; put 'put ''ZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAs''@;'; put 'put ''Z2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0''@;'; put 'put ''LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2''@;'; put 'put ''LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQy''@;'; put 'put ''ODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2Vu''@;'; put 'put ''dGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNw''@;'; put 'put ''cmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5h''@;'; put 'put ''dnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjEx''@;'; put 'put ''NTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4''@;'; put 'put ''ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZl''@;'; put 'put ''cjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0''@;'; put 'put ''MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2Z1bmN0aW9uIEliZSgpe3JldHVy''@;'; put 'put ''biB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIFJiZSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIGJ5KGMpe3ZhciBsLGE7cmV0dXJuIGM9KGMrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChsPW9SdC5leGVjKGMpKT8oYT1sWzFdLmxlbmd0aCxsPXBh''@;'; put 'put ''cnNlSW50KGxbMV0sMTYpLDY9PT1hP0xiZShsKTozPT09YT9uZXcgT2gobD4+OCYxNXxsPj40JjI0MCxsPj40JjE1fDI0MCZsLCgxNSZsKTw8NHwxNSZsLDEpOjg9PT1hP3N6KGw+PjI0JjI1NSxsPj4xNiYyNTUsbD4+OCYyNTUsKDI1NSZsKS8yNTUpOjQ9PT1hP3N6KGw+PjEyJjE1fGw+Pjgm''@;'; put 'put ''MjQwLGw+PjgmMTV8bD4+NCYyNDAsbD4+NCYxNXwyNDAmbCwoKDE1JmwpPDw0fDE1JmwpLzI1NSk6bnVsbCk6KGw9c1J0LmV4ZWMoYykpP25ldyBPaChsWzFdLGxbMl0sbFszXSwxKToobD1sUnQuZXhlYyhjKSk/bmV3IE9oKDI1NSpsWzFdLzEwMCwyNTUqbFsyXS8xMDAsMjU1KmxbM10vMTAw''@;'; put 'put ''LDEpOihsPWNSdC5leGVjKGMpKT9zeihsWzFdLGxbMl0sbFszXSxsWzRdKToobD11UnQuZXhlYyhjKSk/c3ooMjU1KmxbMV0vMTAwLDI1NSpsWzJdLzEwMCwyNTUqbFszXS8xMDAsbFs0XSk6KGw9ZFJ0LmV4ZWMoYykpP0ZiZShsWzFdLGxbMl0vMTAwLGxbM10vMTAwLDEpOihsPWhSdC5leGVj''@;'; put 'put ''KGMpKT9GYmUobFsxXSxsWzJdLzEwMCxsWzNdLzEwMCxsWzRdKTpEYmUuaGFzT3duUHJvcGVydHkoYyk/TGJlKERiZVtjXSk6InRyYW5zcGFyZW50Ij09PWM/bmV3IE9oKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gTGJlKGMpe3JldHVybiBuZXcgT2goYz4+MTYmMjU1LGM+PjgmMjU1''@;'; put 'put ''LDI1NSZjLDEpfWZ1bmN0aW9uIHN6KGMsbCxhLGQpe3JldHVybiBkPD0wJiYoYz1sPWE9TmFOKSxuZXcgT2goYyxsLGEsZCl9ZnVuY3Rpb24gbHooYyxsLGEsZCl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2Z1bmN0aW9uIGdSdChjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIFFEfHwoYz1i''@;'; put 'put ''eShjKSksYz9uZXcgT2goKGM9Yy5yZ2IoKSkucixjLmcsYy5iLGMub3BhY2l0eSk6bmV3IE9ofShjKTpuZXcgT2goYyxsLGEsZD8/MSl9ZnVuY3Rpb24gT2goYyxsLGEsZCl7dGhpcy5yPStjLHRoaXMuZz0rbCx0aGlzLmI9K2EsdGhpcy5vcGFjaXR5PStkfWZ1bmN0aW9uIE9iZSgpe3JldHVy''@;'; put 'put ''bmAjJHt3eSh0aGlzLnIpfSR7d3kodGhpcy5nKX0ke3d5KHRoaXMuYil9YH1mdW5jdGlvbiBQYmUoKXtjb25zdCBjPWN6KHRoaXMub3BhY2l0eSk7cmV0dXJuYCR7MT09PWM/InJnYigiOiJyZ2JhKCJ9JHtfeSh0aGlzLnIpfSwgJHtfeSh0aGlzLmcpfSwgJHtfeSh0aGlzLmIpfSR7MT09PWM/''@;'; put 'put ''IikiOmAsICR7Y30pYH1gfWZ1bmN0aW9uIGN6KGMpe3JldHVybiBpc05hTihjKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxjKSl9ZnVuY3Rpb24gX3koYyl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoYyl8fDApKX1mdW5jdGlvbiB3eShjKXtyZXR1cm4oKGM9''@;'; put 'put ''X3koYykpPDE2PyIwIjoiIikrYy50b1N0cmluZygxNil9ZnVuY3Rpb24gRmJlKGMsbCxhLGQpe3JldHVybiBkPD0wP2M9bD1hPU5hTjphPD0wfHxhPj0xP2M9bD1OYU46bDw9MCYmKGM9TmFOKSxuZXcgeXAoYyxsLGEsZCl9ZnVuY3Rpb24gSGJlKGMpe2lmKGMgaW5zdGFuY2VvZiB5cClyZXR1''@;'; put 'put ''cm4gbmV3IHlwKGMuaCxjLnMsYy5sLGMub3BhY2l0eSk7aWYoYyBpbnN0YW5jZW9mIFFEfHwoYz1ieShjKSksIWMpcmV0dXJuIG5ldyB5cDtpZihjIGluc3RhbmNlb2YgeXApcmV0dXJuIGM7dmFyIGw9KGM9Yy5yZ2IoKSkuci8yNTUsYT1jLmcvMjU1LGQ9Yy5iLzI1NSxoPU1hdGgubWluKGws''@;'; put 'put ''YSxkKSxmPU1hdGgubWF4KGwsYSxkKSx2PU5hTixNPWYtaCxEPShmK2gpLzI7cmV0dXJuIE0/KHY9bD09PWY/KGEtZCkvTSs2KihhPGQpOmE9PT1mPyhkLWwpL00rMjoobC1hKS9NKzQsTS89RDwuNT9mK2g6Mi1mLWgsdio9NjApOk09RD4wJiZEPDE/MDp2LG5ldyB5cCh2LE0sRCxjLm9wYWNp''@;'; put 'put ''dHkpfWZ1bmN0aW9uIHlwKGMsbCxhLGQpe3RoaXMuaD0rYyx0aGlzLnM9K2wsdGhpcy5sPSthLHRoaXMub3BhY2l0eT0rZH1mdW5jdGlvbiBOYmUoYyl7cmV0dXJuKGM9KGN8fDApJTM2MCk8MD9jKzM2MDpjfWZ1bmN0aW9uIHV6KGMpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDEsY3x8''@;'; put 'put ''MCkpfWZ1bmN0aW9uIE9hZShjLGwsYSl7cmV0dXJuIDI1NSooYzw2MD9sKyhhLWwpKmMvNjA6YzwxODA/YTpjPDI0MD9sKyhhLWwpKigyNDAtYykvNjA6bCl9ZnVuY3Rpb24gVmJlKGMsbCxhLGQsaCl7dmFyIGY9YypjLHY9ZipjO3JldHVybigoMS0zKmMrMypmLXYpKmwrKDQtNipmKzMqdikq''@;'; put 'put ''YSsoMSszKmMrMypmLTMqdikqZCt2KmgpLzZ9TGFlKFFELGJ5LHtjb3B5KGMpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsYyl9LGRpc3BsYXlhYmxlKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OkliZSxmb3JtYXRIZXg6SWJl''@;'; put 'put ''LGZvcm1hdEhleDg6ZnVuY3Rpb24gZlJ0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4OCgpfSxmb3JtYXRIc2w6ZnVuY3Rpb24gcFJ0KCl7cmV0dXJuIEhiZSh0aGlzKS5mb3JtYXRIc2woKX0sZm9ybWF0UmdiOlJiZSx0b1N0cmluZzpSYmV9KSxMYWUoT2gsbHosa2JlKFFELHticmln''@;'; put 'put ''aHRlcihjKXtyZXR1cm4gYz1udWxsPT1jP296Ok1hdGgucG93KG96LGMpLG5ldyBPaCh0aGlzLnIqYyx0aGlzLmcqYyx0aGlzLmIqYyx0aGlzLm9wYWNpdHkpfSxkYXJrZXIoYyl7cmV0dXJuIGM9bnVsbD09Yz8uNzpNYXRoLnBvdyguNyxjKSxuZXcgT2godGhpcy5yKmMsdGhpcy5nKmMsdGhp''@;'; put 'put ''cy5iKmMsdGhpcy5vcGFjaXR5KX0scmdiKCl7cmV0dXJuIHRoaXN9LGNsYW1wKCl7cmV0dXJuIG5ldyBPaChfeSh0aGlzLnIpLF95KHRoaXMuZyksX3kodGhpcy5iKSxjeih0aGlzLm9wYWNpdHkpKX0sZGlzcGxheWFibGUoKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8''@;'; put 'put ''PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4Ok9iZSxmb3JtYXRIZXg6T2JlLGZvcm1hdEhleDg6ZnVuY3Rpb24gbVJ0KCl7cmV0dXJuYCMke3d5KHRoaXMucil9JHt3eSh0aGlzLmcp''@;'; put 'put ''fSR7d3kodGhpcy5iKX0ke3d5KDI1NSooaXNOYU4odGhpcy5vcGFjaXR5KT8xOnRoaXMub3BhY2l0eSkpfWB9LGZvcm1hdFJnYjpQYmUsdG9TdHJpbmc6UGJlfSkpLExhZSh5cCxmdW5jdGlvbiB2UnQoYyxsLGEsZCl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP0hiZShjKTpuZXcgeXAo''@;'; put 'put ''YyxsLGEsZD8/MSl9LGtiZShRRCx7YnJpZ2h0ZXIoYyl7cmV0dXJuIGM9bnVsbD09Yz9vejpNYXRoLnBvdyhveixjKSxuZXcgeXAodGhpcy5oLHRoaXMucyx0aGlzLmwqYyx0aGlzLm9wYWNpdHkpfSxkYXJrZXIoYyl7cmV0dXJuIGM9bnVsbD09Yz8uNzpNYXRoLnBvdyguNyxjKSxuZXcgeXAo''@;'; put 'put ''dGhpcy5oLHRoaXMucyx0aGlzLmwqYyx0aGlzLm9wYWNpdHkpfSxyZ2IoKXt2YXIgYz10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLGw9aXNOYU4oYyl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMsYT10aGlzLmwsZD1hKyhhPC41P2E6MS1hKSpsLGg9MiphLWQ7cmV0dXJuIG5ldyBPaChPYWUo''@;'; put 'put ''Yz49MjQwP2MtMjQwOmMrMTIwLGgsZCksT2FlKGMsaCxkKSxPYWUoYzwxMjA/YysyNDA6Yy0xMjAsaCxkKSx0aGlzLm9wYWNpdHkpfSxjbGFtcCgpe3JldHVybiBuZXcgeXAoTmJlKHRoaXMuaCksdXoodGhpcy5zKSx1eih0aGlzLmwpLGN6KHRoaXMub3BhY2l0eSkpfSxkaXNwbGF5YWJsZSgp''@;'; put 'put ''e3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsKCl7Y29uc3QgYz1jeih0aGlzLm9wYWNpdHkpO3JldHVybmAkezE9PT1jPyJoc2woIjoiaHNs''@;'; put 'put ''YSgifSR7TmJlKHRoaXMuaCl9LCAkezEwMCp1eih0aGlzLnMpfSUsICR7MTAwKnV6KHRoaXMubCl9JSR7MT09PWM/IikiOmAsICR7Y30pYH1gfX0pKTtjb25zdCBQYWU9Yz0+KCk9PmM7ZnVuY3Rpb24gamJlKGMsbCl7dmFyIGE9bC1jO3JldHVybiBhP2Z1bmN0aW9uIEJiZShjLGwpe3JldHVy''@;'; put 'put ''biBmdW5jdGlvbihhKXtyZXR1cm4gYythKmx9fShjLGEpOlBhZShpc05hTihjKT9sOmMpfWNvbnN0IGR6PWZ1bmN0aW9uIGMobCl7dmFyIGE9ZnVuY3Rpb24gd1J0KGMpe3JldHVybiAxPT0oYz0rYyk/amJlOmZ1bmN0aW9uKGwsYSl7cmV0dXJuIGEtbD9mdW5jdGlvbiBfUnQoYyxsLGEpe3Jl''@;'; put 'put ''dHVybiBjPU1hdGgucG93KGMsYSksbD1NYXRoLnBvdyhsLGEpLWMsYT0xL2EsZnVuY3Rpb24oZCl7cmV0dXJuIE1hdGgucG93KGMrZCpsLGEpfX0obCxhLGMpOlBhZShpc05hTihsKT9hOmwpfX0obCk7ZnVuY3Rpb24gZChoLGYpe3ZhciB2PWEoKGg9bHooaCkpLnIsKGY9bHooZikpLnIpLE09''@;'; put 'put ''YShoLmcsZi5nKSxEPWEoaC5iLGYuYiksVT1qYmUoaC5vcGFjaXR5LGYub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHRlKXtyZXR1cm4gaC5yPXYodGUpLGguZz1NKHRlKSxoLmI9RCh0ZSksaC5vcGFjaXR5PVUodGUpLGgrIiJ9fXJldHVybiBkLmdhbW1hPWMsZH0oMSk7ZnVuY3Rpb24gemJl''@;'; put 'put ''KGMpe3JldHVybiBmdW5jdGlvbihsKXt2YXIgdixNLGE9bC5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD1uZXcgQXJyYXkoYSksZj1uZXcgQXJyYXkoYSk7Zm9yKHY9MDt2PGE7Kyt2KU09bHoobFt2XSksZFt2XT1NLnJ8fDAsaFt2XT1NLmd8fDAsZlt2XT1NLmJ8fDA7cmV0dXJuIGQ9YyhkKSxo''@;'; put 'put ''PWMoaCksZj1jKGYpLE0ub3BhY2l0eT0xLGZ1bmN0aW9uKEQpe3JldHVybiBNLnI9ZChEKSxNLmc9aChEKSxNLmI9ZihEKSxNKyIifX19emJlKGZ1bmN0aW9uIHlSdChjKXt2YXIgbD1jLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihhKXt2YXIgZD1hPD0wP2E9MDphPj0xPyhhPTEsbC0xKTpN''@;'; put 'put ''YXRoLmZsb29yKGEqbCksaD1jW2RdLGY9Y1tkKzFdO3JldHVybiBWYmUoKGEtZC9sKSpsLGQ+MD9jW2QtMV06MipoLWYsaCxmLGQ8bC0xP2NbZCsyXToyKmYtaCl9fSksemJlKGZ1bmN0aW9uIGJSdChjKXt2YXIgbD1jLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGQ9TWF0aC5mbG9v''@;'; put 'put ''cigoKGElPTEpPDA/KythOmEpKmwpO3JldHVybiBWYmUoKGEtZC9sKSpsLGNbKGQrbC0xKSVsXSxjW2QlbF0sY1soZCsxKSVsXSxjWyhkKzIpJWxdKX19KTt2YXIgRmFlPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxIYWU9bmV3IFJlZ0V4cChGYWUuc291''@;'; put 'put ''cmNlLCJnIik7ZnVuY3Rpb24gVWJlKGMsbCl7dmFyIGQsaCxmLGE9RmFlLmxhc3RJbmRleD1IYWUubGFzdEluZGV4PTAsdj0tMSxNPVtdLEQ9W107Zm9yKGMrPSIiLGwrPSIiOyhkPUZhZS5leGVjKGMpKSYmKGg9SGFlLmV4ZWMobCkpOykoZj1oLmluZGV4KT5hJiYoZj1sLnNsaWNlKGEsZiks''@;'; put 'put ''TVt2XT9NW3ZdKz1mOk1bKyt2XT1mKSwoZD1kWzBdKT09PShoPWhbMF0pP01bdl0/TVt2XSs9aDpNWysrdl09aDooTVsrK3ZdPW51bGwsRC5wdXNoKHtpOnYseDpkZyhkLGgpfSkpLGE9SGFlLmxhc3RJbmRleDtyZXR1cm4gYTxsLmxlbmd0aCYmKGY9bC5zbGljZShhKSxNW3ZdP01bdl0rPWY6''@;'; put 'put ''TVsrK3ZdPWYpLE0ubGVuZ3RoPDI/RFswXT9mdW5jdGlvbiBTUnQoYyl7cmV0dXJuIGZ1bmN0aW9uKGwpe3JldHVybiBjKGwpKyIifX0oRFswXS54KTpmdW5jdGlvbiBDUnQoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGN9fShsKToobD1ELmxlbmd0aCxmdW5jdGlvbihVKXtmb3IodmFy''@;'; put 'put ''IG9lLHRlPTA7dGU8bDsrK3RlKU1bKG9lPURbdGVdKS5pXT1vZS54KFUpO3JldHVybiBNLmpvaW4oIiIpfSl9ZnVuY3Rpb24gWmJlKGMsbCl7dmFyIGE7cmV0dXJuKCJudW1iZXIiPT10eXBlb2YgbD9kZzpsIGluc3RhbmNlb2YgYnk/ZHo6KGE9YnkobCkpPyhsPWEsZHopOlViZSkoYyxsKX1m''@;'; put 'put ''dW5jdGlvbiBNUnQoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoYyl9fWZ1bmN0aW9uIHhSdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCl9fWZ1bmN0aW9uIEVSdChjLGwsYSl7dmFyIGQsZixoPWEr''@;'; put 'put ''IiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHY9dGhpcy5nZXRBdHRyaWJ1dGUoYyk7cmV0dXJuIHY9PT1oP251bGw6dj09PWQ/ZjpmPWwoZD12LGEpfX1mdW5jdGlvbiBUUnQoYyxsLGEpe3ZhciBkLGYsaD1hKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciB2PXRoaXMuZ2V0QXR0cmlidXRlTlMo''@;'; put 'put ''Yy5zcGFjZSxjLmxvY2FsKTtyZXR1cm4gdj09PWg/bnVsbDp2PT09ZD9mOmY9bChkPXYsYSl9fWZ1bmN0aW9uIEFSdChjLGwsYSl7dmFyIGQsaCxmO3JldHVybiBmdW5jdGlvbigpe3ZhciB2LEQsTT1hKHRoaXMpO3JldHVybiBudWxsPT1NP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoYyk6''@;'; put 'put ''KHY9dGhpcy5nZXRBdHRyaWJ1dGUoYykpPT09KEQ9TSsiIik/bnVsbDp2PT09ZCYmRD09PWg/ZjooaD1ELGY9bChkPXYsTSkpfX1mdW5jdGlvbiBrUnQoYyxsLGEpe3ZhciBkLGgsZjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdixELE09YSh0aGlzKTtyZXR1cm4gbnVsbD09TT92b2lkIHRoaXMu''@;'; put 'put ''cmVtb3ZlQXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsKToodj10aGlzLmdldEF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCkpPT09KEQ9TSsiIik/bnVsbDp2PT09ZCYmRD09PWg/ZjooaD1ELGY9bChkPXYsTSkpfX1mdW5jdGlvbiBMUnQoYyxsKXt2YXIgYSxkO2Z1bmN0aW9uIGgoKXt2''@;'; put 'put ''YXIgZj1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZiE9PWQmJihhPShkPWYpJiZmdW5jdGlvbiBSUnQoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwsbC5jYWxsKHRoaXMsYSkpfX0oYyxmKSksYX1yZXR1cm4gaC5fdmFs''@;'; put 'put ''dWU9bCxofWZ1bmN0aW9uIE9SdChjLGwpe3ZhciBhLGQ7ZnVuY3Rpb24gaCgpe3ZhciBmPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmIT09ZCYmKGE9KGQ9ZikmJmZ1bmN0aW9uIElSdChjLGwpe3JldHVybiBmdW5jdGlvbihhKXt0aGlzLnNldEF0dHJpYnV0ZShjLGwuY2FsbCh0''@;'; put 'put ''aGlzLGEpKX19KGMsZikpLGF9cmV0dXJuIGguX3ZhbHVlPWwsaH1mdW5jdGlvbiBGUnQoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXtEYWUodGhpcyxjKS5kZWxheT0rbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIEhSdChjLGwpe3JldHVybiBsPStsLGZ1bmN0aW9uKCl7RGFlKHRo''@;'; put 'put ''aXMsYykuZGVsYXk9bH19ZnVuY3Rpb24gVlJ0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dWcodGhpcyxjKS5kdXJhdGlvbj0rbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIEJSdChjLGwpe3JldHVybiBsPStsLGZ1bmN0aW9uKCl7dWcodGhpcyxjKS5kdXJhdGlvbj1sfX12YXIg''@;'; put 'put ''dEx0PXZ5LnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtmdW5jdGlvbiBXYmUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShjKX19dmFyIGJMdD0wO2Z1bmN0aW9uIGZnKGMsbCxhLGQpe3RoaXMuX2dyb3Vwcz1jLHRoaXMuX3BhcmVudHM9bCx0aGlzLl9uYW1l''@;'; put 'put ''PWEsdGhpcy5faWQ9ZH1mdW5jdGlvbiBOYWUoYyl7cmV0dXJuIHZ5KCkudHJhbnNpdGlvbihjKX1mdW5jdGlvbiBZYmUoKXtyZXR1cm4rK2JMdH12YXIgJDU9dnkucHJvdG90eXBlO2ZnLnByb3RvdHlwZT1OYWUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpmZyxzZWxlY3Q6ZnVuY3Rpb24gUVJ0''@;'; put 'put ''KGMpe3ZhciBsPXRoaXMuX25hbWUsYT10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgYyYmKGM9YmFlKGMpKTtmb3IodmFyIGQ9dGhpcy5fZ3JvdXBzLGg9ZC5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDsrK3YpZm9yKHZhciB0ZSxvZSxNPWRbdl0sRD1NLmxlbmd0aCxVPWZbdl09''@;'; put 'put ''bmV3IEFycmF5KEQpLHZlPTA7dmU8RDsrK3ZlKSh0ZT1NW3ZlXSkmJihvZT1jLmNhbGwodGUsdGUuX19kYXRhX18sdmUsTSkpJiYoIl9fZGF0YV9fImluIHRlJiYob2UuX19kYXRhX189dGUuX19kYXRhX18pLFVbdmVdPW9lLHJ6KFVbdmVdLGwsYSx2ZSxVLHZwKHRlLGEpKSk7cmV0dXJuIG5l''@;'; put 'put ''dyBmZyhmLHRoaXMuX3BhcmVudHMsbCxhKX0sc2VsZWN0QWxsOmZ1bmN0aW9uIGVMdChjKXt2YXIgbD10aGlzLl9uYW1lLGE9dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIGMmJihjPWliZShjKSk7Zm9yKHZhciBkPXRoaXMuX2dyb3VwcyxoPWQubGVuZ3RoLGY9W10sdj1bXSxNPTA7TTxo''@;'; put 'put ''OysrTSlmb3IodmFyIHRlLEQ9ZFtNXSxVPUQubGVuZ3RoLG9lPTA7b2U8VTsrK29lKWlmKHRlPURbb2VdKXtmb3IodmFyIHdlLHZlPWMuY2FsbCh0ZSx0ZS5fX2RhdGFfXyxvZSxEKSxGZT12cCh0ZSxhKSxXZT0wLG50PXZlLmxlbmd0aDtXZTxudDsrK1dlKSh3ZT12ZVtXZV0pJiZyeih3ZSxs''@;'; put 'put ''LGEsV2UsdmUsRmUpO2YucHVzaCh2ZSksdi5wdXNoKHRlKX1yZXR1cm4gbmV3IGZnKGYsdixsLGEpfSxzZWxlY3RDaGlsZDokNS5zZWxlY3RDaGlsZCxzZWxlY3RDaGlsZHJlbjokNS5zZWxlY3RDaGlsZHJlbixmaWx0ZXI6ZnVuY3Rpb24gWVJ0KGMpeyJmdW5jdGlvbiIhPXR5cGVvZiBjJiYo''@;'; put 'put ''Yz1hYmUoYykpO2Zvcih2YXIgbD10aGlzLl9ncm91cHMsYT1sLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhOysraClmb3IodmFyIEQsZj1sW2hdLHY9Zi5sZW5ndGgsTT1kW2hdPVtdLFU9MDtVPHY7KytVKShEPWZbVV0pJiZjLmNhbGwoRCxELl9fZGF0YV9fLFUsZikmJk0ucHVzaChE''@;'; put 'put ''KTtyZXR1cm4gbmV3IGZnKGQsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sbWVyZ2U6ZnVuY3Rpb24gR1J0KGMpe2lmKGMuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgbD10aGlzLl9ncm91cHMsYT1jLl9ncm91cHMsZD1sLmxlbmd0aCxmPU1hdGgu''@;'; put 'put ''bWluKGQsYS5sZW5ndGgpLHY9bmV3IEFycmF5KGQpLE09MDtNPGY7KytNKWZvcih2YXIgdmUsRD1sW01dLFU9YVtNXSx0ZT1ELmxlbmd0aCxvZT12W01dPW5ldyBBcnJheSh0ZSksd2U9MDt3ZTx0ZTsrK3dlKSh2ZT1EW3dlXXx8VVt3ZV0pJiYob2Vbd2VdPXZlKTtmb3IoO008ZDsrK00pdltN''@;'; put 'put ''XT1sW01dO3JldHVybiBuZXcgZmcodix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxzZWxlY3Rpb246ZnVuY3Rpb24gbkx0KCl7cmV0dXJuIG5ldyB0THQodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfSx0cmFuc2l0aW9uOmZ1bmN0aW9uIHZMdCgpe2Zvcih2YXIgYz10''@;'; put 'put ''aGlzLl9uYW1lLGw9dGhpcy5faWQsYT1ZYmUoKSxkPXRoaXMuX2dyb3VwcyxoPWQubGVuZ3RoLGY9MDtmPGg7KytmKWZvcih2YXIgRCx2PWRbZl0sTT12Lmxlbmd0aCxVPTA7VTxNOysrVSlpZihEPXZbVV0pe3ZhciB0ZT12cChELGwpO3J6KEQsYyxhLFUsdix7dGltZTp0ZS50aW1lK3RlLmRl''@;'; put 'put ''bGF5K3RlLmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246dGUuZHVyYXRpb24sZWFzZTp0ZS5lYXNlfSl9cmV0dXJuIG5ldyBmZyhkLHRoaXMuX3BhcmVudHMsYyxhKX0sY2FsbDokNS5jYWxsLG5vZGVzOiQ1Lm5vZGVzLG5vZGU6JDUubm9kZSxzaXplOiQ1LnNpemUsZW1wdHk6JDUuZW1wdHks''@;'; put 'put ''ZWFjaDokNS5lYWNoLG9uOmZ1bmN0aW9uIFhSdChjLGwpe3ZhciBhPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/dnAodGhpcy5ub2RlKCksYSkub24ub24oYyk6dGhpcy5lYWNoKGZ1bmN0aW9uIEtSdChjLGwsYSl7dmFyIGQsaCxmPWZ1bmN0aW9uICRSdChjKXtyZXR1cm4o''@;'; put 'put ''YysiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KGZ1bmN0aW9uKGwpe3ZhciBhPWwuaW5kZXhPZigiLiIpO3JldHVybiBhPj0wJiYobD1sLnNsaWNlKDAsYSkpLCFsfHwic3RhcnQiPT09bH0pfShsKT9EYWU6dWc7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHY9Zih0aGlzLGMpLE09di5v''@;'; put 'put ''bjtNIT09ZCYmKGg9KGQ9TSkuY29weSgpKS5vbihsLGEpLHYub249aH19KGEsYyxsKSl9LGF0dHI6ZnVuY3Rpb24gRFJ0KGMsbCl7dmFyIGE9JGooYyksZD0idHJhbnNmb3JtIj09PWE/QWJlOlpiZTtyZXR1cm4gdGhpcy5hdHRyVHdlZW4oYywiZnVuY3Rpb24iPT10eXBlb2YgbD8oYS5sb2Nh''@;'; put 'put ''bD9rUnQ6QVJ0KShhLGQsUmFlKHRoaXMsImF0dHIuIitjLGwpKTpudWxsPT1sPyhhLmxvY2FsP3hSdDpNUnQpKGEpOihhLmxvY2FsP1RSdDpFUnQpKGEsZCxsKSl9LGF0dHJUd2VlbjpmdW5jdGlvbiBQUnQoYyxsKXt2YXIgYT0iYXR0ci4iK2M7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVy''@;'; put 'put ''bihhPXRoaXMudHdlZW4oYSkpJiZhLl92YWx1ZTtpZihudWxsPT1sKXJldHVybiB0aGlzLnR3ZWVuKGEsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGwpdGhyb3cgbmV3IEVycm9yO3ZhciBkPSRqKGMpO3JldHVybiB0aGlzLnR3ZWVuKGEsKGQubG9jYWw/TFJ0Ok9SdCkoZCxsKSl9LHN0''@;'; put 'put ''eWxlOmZ1bmN0aW9uIHNMdChjLGwsYSl7dmFyIGQ9InRyYW5zZm9ybSI9PShjKz0iIik/blJ0OlpiZTtyZXR1cm4gbnVsbD09bD90aGlzLnN0eWxlVHdlZW4oYyxmdW5jdGlvbiByTHQoYyxsKXt2YXIgYSxkLGg7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGY9eVModGhpcyxjKSx2PSh0aGlzLnN0''@;'; put 'put ''eWxlLnJlbW92ZVByb3BlcnR5KGMpLHlTKHRoaXMsYykpO3JldHVybiBmPT09dj9udWxsOmY9PT1hJiZ2PT09ZD9oOmg9bChhPWYsZD12KX19KGMsZCkpLm9uKCJlbmQuc3R5bGUuIitjLFdiZShjKSk6ImZ1bmN0aW9uIj09dHlwZW9mIGw/dGhpcy5zdHlsZVR3ZWVuKGMsZnVuY3Rpb24gYUx0''@;'; put 'put ''KGMsbCxhKXt2YXIgZCxoLGY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHY9eVModGhpcyxjKSxNPWEodGhpcyksRD1NKyIiO3JldHVybiBudWxsPT1NJiYodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShjKSxEPU09eVModGhpcyxjKSksdj09PUQ/bnVsbDp2PT09ZCYmRD09PWg/ZjooaD1ELGY9''@;'; put 'put ''bChkPXYsTSkpfX0oYyxkLFJhZSh0aGlzLCJzdHlsZS4iK2MsbCkpKS5lYWNoKGZ1bmN0aW9uIG9MdChjLGwpe3ZhciBhLGQsaCxNLGY9InN0eWxlLiIrbCx2PSJlbmQuIitmO3JldHVybiBmdW5jdGlvbigpe3ZhciBEPXVnKHRoaXMsYyksVT1ELm9uLHRlPW51bGw9PUQudmFsdWVbZl0/TXx8''@;'; put 'put ''KE09V2JlKGwpKTp2b2lkIDA7KFUhPT1hfHxoIT09dGUpJiYoZD0oYT1VKS5jb3B5KCkpLm9uKHYsaD10ZSksRC5vbj1kfX0odGhpcy5faWQsYykpOnRoaXMuc3R5bGVUd2VlbihjLGZ1bmN0aW9uIGlMdChjLGwsYSl7dmFyIGQsZixoPWErIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHY9eVMo''@;'; put 'put ''dGhpcyxjKTtyZXR1cm4gdj09PWg/bnVsbDp2PT09ZD9mOmY9bChkPXYsYSl9fShjLGQsbCksYSkub24oImVuZC5zdHlsZS4iK2MsbnVsbCl9LHN0eWxlVHdlZW46ZnVuY3Rpb24gdUx0KGMsbCxhKXt2YXIgZD0ic3R5bGUuIisoYys9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4o''@;'; put 'put ''ZD10aGlzLnR3ZWVuKGQpKSYmZC5fdmFsdWU7aWYobnVsbD09bClyZXR1cm4gdGhpcy50d2VlbihkLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBsKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihkLGZ1bmN0aW9uIGNMdChjLGwsYSl7dmFyIGQsaDtmdW5jdGlvbiBmKCl7''@;'; put 'put ''dmFyIHY9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHYhPT1oJiYoZD0oaD12KSYmZnVuY3Rpb24gbEx0KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oZCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShjLGwuY2FsbCh0aGlzLGQpLGEpfX0oYyx2LGEpKSxkfXJldHVybiBmLl92YWx1ZT1s''@;'; put 'put ''LGZ9KGMsbCxhPz8iIikpfSx0ZXh0OmZ1bmN0aW9uIGZMdChjKXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsImZ1bmN0aW9uIj09dHlwZW9mIGM/ZnVuY3Rpb24gaEx0KGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPWModGhpcyk7dGhpcy50ZXh0Q29udGVudD1sPz8iIn19KFJhZSh0aGlz''@;'; put 'put ''LCJ0ZXh0IixjKSk6ZnVuY3Rpb24gZEx0KGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9Y319KG51bGw9PWM/IiI6YysiIikpfSx0ZXh0VHdlZW46ZnVuY3Rpb24gbUx0KGMpe3ZhciBsPSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKGw9dGhpcy50d2Vl''@;'; put 'put ''bihsKSkmJmwuX3ZhbHVlO2lmKG51bGw9PWMpcmV0dXJuIHRoaXMudHdlZW4obCxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4obCxmdW5jdGlvbiBnTHQoYyl7dmFyIGwsYTtmdW5jdGlvbiBkKCl7dmFyIGg9Yy5hcHBseSh0''@;'; put 'put ''aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGghPT1hJiYobD0oYT1oKSYmZnVuY3Rpb24gcEx0KGMpe3JldHVybiBmdW5jdGlvbihsKXt0aGlzLnRleHRDb250ZW50PWMuY2FsbCh0aGlzLGwpfX0oaCkpLGx9cmV0dXJuIGQuX3ZhbHVlPWMsZH0oYykpfSxyZW1vdmU6ZnVuY3Rpb24gSlJ0KCl7cmV0''@;'; put 'put ''dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLGZ1bmN0aW9uIHFSdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciBhIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCthIT09YylyZXR1cm47bCYmbC5yZW1vdmVDaGlsZCh0aGlzKX19KHRoaXMuX2lkKSl9''@;'; put 'put ''LHR3ZWVuOmZ1bmN0aW9uIGFSdChjLGwpe3ZhciBhPXRoaXMuX2lkO2lmKGMrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciB2LGQ9dnAodGhpcy5ub2RlKCksYSkudHdlZW4saD0wLGY9ZC5sZW5ndGg7aDxmOysraClpZigodj1kW2hdKS5uYW1lPT09YylyZXR1cm4gdi52YWx1ZTty''@;'; put 'put ''ZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1sP3JSdDppUnQpKGEsYyxsKSl9LGRlbGF5OmZ1bmN0aW9uIE5SdChjKXt2YXIgbD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBjP0ZSdDpIUnQpKGwsYykpOnZw''@;'; put 'put ''KHRoaXMubm9kZSgpLGwpLmRlbGF5fSxkdXJhdGlvbjpmdW5jdGlvbiBqUnQoYyl7dmFyIGw9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgYz9WUnQ6QlJ0KShsLGMpKTp2cCh0aGlzLm5vZGUoKSxsKS5kdXJhdGlvbn0sZWFz''@;'; put 'put ''ZTpmdW5jdGlvbiBVUnQoYyl7dmFyIGw9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGZ1bmN0aW9uIHpSdChjLGwpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBsKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt1Zyh0aGlzLGMpLmVhc2U9bH19KGws''@;'; put 'put ''YykpOnZwKHRoaXMubm9kZSgpLGwpLmVhc2V9LGVhc2VWYXJ5aW5nOmZ1bmN0aW9uIFdSdChjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiBaUnQoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1sLmFwcGx5KHRo''@;'; put 'put ''aXMsYXJndW1lbnRzKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3I7dWcodGhpcyxjKS5lYXNlPWF9fSh0aGlzLl9pZCxjKSl9LGVuZDpmdW5jdGlvbiB5THQoKXt2YXIgYyxsLGE9dGhpcyxkPWEuX2lkLGg9YS5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0''@;'; put 'put ''aW9uKGYsdil7dmFyIE09e3ZhbHVlOnZ9LEQ9e3ZhbHVlOmZ1bmN0aW9uKCl7MD09LS1oJiZmKCl9fTthLmVhY2goZnVuY3Rpb24oKXt2YXIgVT11Zyh0aGlzLGQpLHRlPVUub247dGUhPT1jJiYoKGw9KGM9dGUpLmNvcHkoKSkuXy5jYW5jZWwucHVzaChNKSxsLl8uaW50ZXJydXB0LnB1c2go''@;'; put 'put ''TSksbC5fLmVuZC5wdXNoKEQpKSxVLm9uPWx9KSwwPT09aCYmZigpfSl9LFtTeW1ib2wuaXRlcmF0b3JdOiQ1W1N5bWJvbC5pdGVyYXRvcl19O3ZhciB3THQ9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOmZ1bmN0aW9uIF9MdChjKXtyZXR1cm4oKGMqPTIpPD0xP2MqYypj''@;'; put 'put ''OihjLT0yKSpjKmMrMikvMn19O2Z1bmN0aW9uIENMdChjLGwpe2Zvcih2YXIgYTshKGE9Yy5fX3RyYW5zaXRpb24pfHwhKGE9YVtsXSk7KWlmKCEoYz1jLnBhcmVudE5vZGUpKXRocm93IG5ldyBFcnJvcihgdHJhbnNpdGlvbiAke2x9IG5vdCBmb3VuZGApO3JldHVybiBhfXZ5LnByb3RvdHlw''@;'; put 'put ''ZS5pbnRlcnJ1cHQ9ZnVuY3Rpb24gUUl0KGMpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpeih0aGlzLGMpfSl9LHZ5LnByb3RvdHlwZS50cmFuc2l0aW9uPWZ1bmN0aW9uIFNMdChjKXt2YXIgbCxhO2MgaW5zdGFuY2VvZiBmZz8obD1jLl9pZCxjPWMuX25hbWUpOihsPVliZSgpLChh''@;'; put 'put ''PXdMdCkudGltZT14YWUoKSxjPW51bGw9PWM/bnVsbDpjKyIiKTtmb3IodmFyIGQ9dGhpcy5fZ3JvdXBzLGg9ZC5sZW5ndGgsZj0wO2Y8aDsrK2YpZm9yKHZhciBELHY9ZFtmXSxNPXYubGVuZ3RoLFU9MDtVPE07KytVKShEPXZbVV0pJiZyeihELGMsbCxVLHYsYXx8Q0x0KEQsbCkpO3JldHVy''@;'; put 'put ''biBuZXcgZmcoZCx0aGlzLl9wYXJlbnRzLGMsbCl9O3ZhciBNTHQ9W251bGxdO2NvbnN0IFZhZT17Y2FwdHVyZTohMCxwYXNzaXZlOiExfTtmdW5jdGlvbiBCYWUoYyl7Yy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gR2JlKGMpe3JldHVy''@;'; put 'put ''bigoYz1NYXRoLmV4cChjKSkrMS9jKS8yfWNvbnN0IElMdD1mdW5jdGlvbiBjKGwsYSxkKXtmdW5jdGlvbiBoKGYsdil7dmFyIG50LGR0LE09ZlswXSxEPWZbMV0sVT1mWzJdLHZlPXZbMl0sd2U9dlswXS1NLEZlPXZbMV0tRCxXZT13ZSp3ZStGZSpGZTtpZihXZTwxZS0xMilkdD1NYXRoLmxv''@;'; put 'put ''Zyh2ZS9VKS9sLG50PWZ1bmN0aW9uKHduKXtyZXR1cm5bTSt3bip3ZSxEK3duKkZlLFUqTWF0aC5leHAobCp3bipkdCldfTtlbHNle3ZhciBtdD1NYXRoLnNxcnQoV2UpLCR0PSh2ZSp2ZS1VKlUrZCpXZSkvKDIqVSphKm10KSx6dD0odmUqdmUtVSpVLWQqV2UpLygyKnZlKmEqbXQpLHluPU1h''@;'; put 'put ''dGgubG9nKE1hdGguc3FydCgkdCokdCsxKS0kdCksZ249TWF0aC5sb2coTWF0aC5zcXJ0KHp0Knp0KzEpLXp0KTtkdD0oZ24teW4pL2wsbnQ9ZnVuY3Rpb24od24pe3ZhciBSbj13bipkdCxEcj1HYmUoeW4pLExyPVUvKGEqbXQpKihEcipmdW5jdGlvbiBETHQoYyl7cmV0dXJuKChjPU1hdGgu''@;'; put 'put ''ZXhwKDIqYykpLTEpLyhjKzEpfShsKlJuK3luKS1mdW5jdGlvbiBrTHQoYyl7cmV0dXJuKChjPU1hdGguZXhwKGMpKS0xL2MpLzJ9KHluKSk7cmV0dXJuW00rTHIqd2UsRCtMcipGZSxVKkRyL0diZShsKlJuK3luKV19fXJldHVybiBudC5kdXJhdGlvbj0xZTMqZHQqbC9NYXRoLlNRUlQyLG50''@;'; put 'put ''fXJldHVybiBoLnJobz1mdW5jdGlvbihmKXt2YXIgdj1NYXRoLm1heCguMDAxLCtmKSxNPXYqdjtyZXR1cm4gYyh2LE0sTSpNKX0saH0oTWF0aC5TUVJUMiwyLDQpO2Z1bmN0aW9uIEN5KGMsbCl7aWYoYz1mdW5jdGlvbiBSTHQoYyl7bGV0IGw7Zm9yKDtsPWMuc291cmNlRXZlbnQ7KWM9bDty''@;'; put 'put ''ZXR1cm4gY30oYyksdm9pZCAwPT09bCYmKGw9Yy5jdXJyZW50VGFyZ2V0KSxsKXt2YXIgYT1sLm93bmVyU1ZHRWxlbWVudHx8bDtpZihhLmNyZWF0ZVNWR1BvaW50KXt2YXIgZD1hLmNyZWF0ZVNWR1BvaW50KCk7cmV0dXJuIGQueD1jLmNsaWVudFgsZC55PWMuY2xpZW50WSxbKGQ9ZC5tYXRy''@;'; put 'put ''aXhUcmFuc2Zvcm0obC5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpKS54LGQueV19aWYobC5nZXRCb3VuZGluZ0NsaWVudFJlY3Qpe3ZhciBoPWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW2MuY2xpZW50WC1oLmxlZnQtbC5jbGllbnRMZWZ0LGMuY2xpZW50WS1oLnRvcC1sLmNs''@;'; put 'put ''aWVudFRvcF19fXJldHVybltjLnBhZ2VYLGMucGFnZVldfWNvbnN0IGh6PWM9PigpPT5jO2Z1bmN0aW9uIExMdChjLHtzb3VyY2VFdmVudDpsLHRhcmdldDphLHRyYW5zZm9ybTpkLGRpc3BhdGNoOmh9KXtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHt0eXBlOnt2YWx1ZTpjLGVudW1l''@;'; put 'put ''cmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxzb3VyY2VFdmVudDp7dmFsdWU6bCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sdGFyZ2V0Ont2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSx0cmFuc2Zvcm06e3ZhbHVlOmQsZW51bWVyYWJsZTohMCxjb25maWd1''@;'; put 'put ''cmFibGU6ITB9LF86e3ZhbHVlOmh9fSl9ZnVuY3Rpb24gSzUoYyxsLGEpe3RoaXMuaz1jLHRoaXMueD1sLHRoaXMueT1hfUs1LnByb3RvdHlwZT17Y29uc3RydWN0b3I6SzUsc2NhbGU6ZnVuY3Rpb24oYyl7cmV0dXJuIDE9PT1jP3RoaXM6bmV3IEs1KHRoaXMuaypjLHRoaXMueCx0aGlzLnkp''@;'; put 'put ''fSx0cmFuc2xhdGU6ZnVuY3Rpb24oYyxsKXtyZXR1cm4gMD09PWMmMD09PWw/dGhpczpuZXcgSzUodGhpcy5rLHRoaXMueCt0aGlzLmsqYyx0aGlzLnkrdGhpcy5rKmwpfSxhcHBseTpmdW5jdGlvbihjKXtyZXR1cm5bY1swXSp0aGlzLmsrdGhpcy54LGNbMV0qdGhpcy5rK3RoaXMueV19LGFw''@;'; put 'put ''cGx5WDpmdW5jdGlvbihjKXtyZXR1cm4gYyp0aGlzLmsrdGhpcy54fSxhcHBseVk6ZnVuY3Rpb24oYyl7cmV0dXJuIGMqdGhpcy5rK3RoaXMueX0saW52ZXJ0OmZ1bmN0aW9uKGMpe3JldHVyblsoY1swXS10aGlzLngpL3RoaXMuaywoY1sxXS10aGlzLnkpL3RoaXMua119LGludmVydFg6ZnVu''@;'; put 'put ''Y3Rpb24oYyl7cmV0dXJuKGMtdGhpcy54KS90aGlzLmt9LGludmVydFk6ZnVuY3Rpb24oYyl7cmV0dXJuKGMtdGhpcy55KS90aGlzLmt9LHJlc2NhbGVYOmZ1bmN0aW9uKGMpe3JldHVybiBjLmNvcHkoKS5kb21haW4oYy5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsdGhpcykubWFwKGMuaW52''@;'; put 'put ''ZXJ0LGMpKX0scmVzY2FsZVk6ZnVuY3Rpb24oYyl7cmV0dXJuIGMuY29weSgpLmRvbWFpbihjLnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WSx0aGlzKS5tYXAoYy5pbnZlcnQsYykpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLngrIiwiK3RoaXMueSsiKSBz''@;'; put 'put ''Y2FsZSgiK3RoaXMuaysiKSJ9fTt2YXIgZno9bmV3IEs1KDEsMCwwKTtmdW5jdGlvbiBweihjKXtmb3IoOyFjLl9fem9vbTspaWYoIShjPWMucGFyZW50Tm9kZSkpcmV0dXJuIGZ6O3JldHVybiBjLl9fem9vbX1mdW5jdGlvbiBqYWUoYyl7Yy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1m''@;'; put 'put ''dW5jdGlvbiBuSShjKXtjLnByZXZlbnREZWZhdWx0KCksYy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBPTHQoYyl7cmV0dXJuIShjLmN0cmxLZXkmJiJ3aGVlbCIhPT1jLnR5cGV8fGMuYnV0dG9uKX1mdW5jdGlvbiBQTHQoKXt2YXIgYz10aGlzO3JldHVybiBjIGluc3Rh''@;'; put 'put ''bmNlb2YgU1ZHRWxlbWVudD8oYz1jLm93bmVyU1ZHRWxlbWVudHx8YykuaGFzQXR0cmlidXRlKCJ2aWV3Qm94Iik/W1soYz1jLnZpZXdCb3guYmFzZVZhbCkueCxjLnldLFtjLngrYy53aWR0aCxjLnkrYy5oZWlnaHRdXTpbWzAsMF0sW2Mud2lkdGguYmFzZVZhbC52YWx1ZSxjLmhlaWdodC5i''@;'; put 'put ''YXNlVmFsLnZhbHVlXV06W1swLDBdLFtjLmNsaWVudFdpZHRoLGMuY2xpZW50SGVpZ2h0XV19ZnVuY3Rpb24gJGJlKCl7cmV0dXJuIHRoaXMuX196b29tfHxmen1mdW5jdGlvbiBGTHQoYyl7cmV0dXJuLWMuZGVsdGFZKigxPT09Yy5kZWx0YU1vZGU/LjA1OmMuZGVsdGFNb2RlPzE6LjAwMikq''@;'; put 'put ''KGMuY3RybEtleT8xMDoxKX1mdW5jdGlvbiBITHQoKXtyZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHwib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gTkx0KGMsbCxhKXt2YXIgZD1jLmludmVydFgobFswXVswXSktYVswXVswXSxoPWMuaW52ZXJ0WChsWzFdWzBdKS1hWzFd''@;'; put 'put ''WzBdLGY9Yy5pbnZlcnRZKGxbMF1bMV0pLWFbMF1bMV0sdj1jLmludmVydFkobFsxXVsxXSktYVsxXVsxXTtyZXR1cm4gYy50cmFuc2xhdGUoaD5kPyhkK2gpLzI6TWF0aC5taW4oMCxkKXx8TWF0aC5tYXgoMCxoKSx2PmY/KGYrdikvMjpNYXRoLm1pbigwLGYpfHxNYXRoLm1heCgwLHYpKX1m''@;'; put 'put ''dW5jdGlvbiBLYmUoYyl7dmFyIGw9e30sYT1jLm5vZGUoKS5ub2RlTmFtZTtsLnRhZz1hLCIjdGV4dCI9PWE/bC50ZXh0PWMudGV4dCgpOiIjY29tbWVudCI9PWEmJihsLmNvbW1lbnQ9Yy50ZXh0KCkpLGwuYXR0cmlidXRlcz17fTt2YXIgZD1jLm5vZGUoKS5hdHRyaWJ1dGVzO2lmKGQpZm9y''@;'; put 'put ''KHZhciBoPTA7aDxkLmxlbmd0aDtoKyspe3ZhciBmPWRbaF07bC5hdHRyaWJ1dGVzW2YubmFtZV09Zi52YWx1ZX12YXIgdGUsRD1jLm5vZGUoKS50cmFuc2Zvcm07aWYoRCYmMCE9RC5iYXNlVmFsLm51bWJlck9mSXRlbXMpe3ZhciBVPUQuYmFzZVZhbC5jb25zb2xpZGF0ZSgpLm1hdHJpeDts''@;'; put 'put ''LnRyYW5zbGF0aW9uPXt4OlUuZSx5OlUuZn0sbC5zY2FsZT1VLmF9aWYoImVsbGlwc2UiPT1hJiYobC5jZW50ZXI9e3g6bC5hdHRyaWJ1dGVzLmN4LHk6bC5hdHRyaWJ1dGVzLmN5fSksInBvbHlnb24iPT1hKXt2YXIgb2U9KHRlPWMuYXR0cigicG9pbnRzIikuc3BsaXQoIiAiKSkubWFwKGZ1''@;'; put 'put ''bmN0aW9uKCR0KXtyZXR1cm4gJHQuc3BsaXQoIiwiKVswXX0pLHZlPXRlLm1hcChmdW5jdGlvbigkdCl7cmV0dXJuICR0LnNwbGl0KCIsIilbMV19KSx3ZT1NYXRoLm1pbi5hcHBseShudWxsLG9lKSxGZT1NYXRoLm1heC5hcHBseShudWxsLG9lKSxXZT1NYXRoLm1pbi5hcHBseShudWxsLHZl''@;'; put 'put ''KSxudD1NYXRoLm1heC5hcHBseShudWxsLHZlKTtsLmJib3g9e3g6d2UseTpXZSx3aWR0aDpGZS13ZSxoZWlnaHQ6bnQtV2V9LGwuY2VudGVyPXt4Oih3ZStGZSkvMix5OihXZStudCkvMn19InBhdGgiPT1hJiYoKHRlPWMuYXR0cigiZCIpLnNwbGl0KC9bQS1aIF0vKSkuc2hpZnQoKSxvZT10''@;'; put 'put ''ZS5tYXAoZnVuY3Rpb24oZHIpe3JldHVybitkci5zcGxpdCgiLCIpWzBdfSksdmU9dGUubWFwKGZ1bmN0aW9uKGRyKXtyZXR1cm4rZHIuc3BsaXQoIiwiKVsxXX0pLHdlPU1hdGgubWluLmFwcGx5KG51bGwsb2UpLEZlPU1hdGgubWF4LmFwcGx5KG51bGwsb2UpLFdlPU1hdGgubWluLmFwcGx5''@;'; put 'put ''KG51bGwsdmUpLG50PU1hdGgubWF4LmFwcGx5KG51bGwsdmUpLGwuYmJveD17eDp3ZSx5OldlLHdpZHRoOkZlLXdlLGhlaWdodDpudC1XZX0sbC5jZW50ZXI9e3g6KHdlK0ZlKS8yLHk6KFdlK250KS8yfSxsLnRvdGFsTGVuZ3RoPWMubm9kZSgpLmdldFRvdGFsTGVuZ3RoKCkpO3JldHVybiJ0''@;'; put 'put ''ZXh0Ij09YSYmKGwuY2VudGVyPXt4OmMuYXR0cigieCIpLHk6Yy5hdHRyKCJ5Iil9KSwiI3RleHQiPT1hP2wudGV4dD1jLnRleHQoKToiI2NvbW1lbnQiPT1hJiYobC5jb21tZW50PWMudGV4dCgpKSxsfWZ1bmN0aW9uIFN5KGMpe3ZhciBsPUtiZShjKTtyZXR1cm4gbC5jaGlsZHJlbj1bXSxT''@;'; put 'put ''YWUoYy5ub2RlKCkuY2hpbGROb2RlcykuZWFjaChmdW5jdGlvbigpe3ZhciBkPVN5KExzKHRoaXMpKTtkLnBhcmVudD1sLGwuY2hpbGRyZW4ucHVzaChkKX0pLGx9ZnVuY3Rpb24gemFlKGMpe3JldHVybiIjdGV4dCI9PWMudGFnP2RvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKToiI2NvbW1l''@;'; put 'put ''bnQiPT1jLnRhZz9kb2N1bWVudC5jcmVhdGVDb21tZW50KGMuY29tbWVudCk6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsYy50YWcpfWZ1bmN0aW9uIFVhZShjKXt2YXIgbD16YWUoYyksYT1McyhsKSxkPWMuYXR0cmlidXRlcztmb3IodmFy''@;'; put 'put ''IGggb2YgT2JqZWN0LmtleXMoZCkpYS5hdHRyKGgsZFtoXSk7cmV0dXJuIGx9ZnVuY3Rpb24gWGJlKGMsbCl7dmFyIGE9THMoYy5ub2RlKCkucGFyZW50Tm9kZSksZD1VYWUobCksaD1hLmluc2VydChmdW5jdGlvbigpe3JldHVybiBkfSxmdW5jdGlvbigpe3JldHVybiBjLm5vZGUoKX0pO3Jl''@;'; put 'put ''dHVybiBjLnJlbW92ZSgpLGh9ZnVuY3Rpb24gWmFlKGMsbCl7IWZ1bmN0aW9uIEJMdChjLGwpe2MuZGF0dW0obCksYy5kYXRhKFtsXSxmdW5jdGlvbihhKXtyZXR1cm4gYS5rZXl9KX0oYyxsKSxTYWUoYy5ub2RlKCkuY2hpbGROb2RlcykuZWFjaChmdW5jdGlvbihkLGgpe1phZShMcyh0aGlz''@;'; put 'put ''KSxsLmNoaWxkcmVuW2hdKX0pfWZ1bmN0aW9uIHJJKGMsbD0wKXt2YXIgYT1Mcyh0aGlzKSxoPWMuYXR0cmlidXRlcyxmPWEubm9kZSgpLmF0dHJpYnV0ZXM7aWYoZilmb3IodmFyIHY9MDt2PGYubGVuZ3RoO3YrKyl7dmFyIE09Zlt2XSxEPU0ubmFtZTtpZigieG1sbnMiIT1ELnNwbGl0KCI6''@;'; put 'put ''IilbMF0mJk0ubmFtZXNwYWNlVVJJKXt2YXIgVT1NLm5hbWVzcGFjZVVSSS5zcGxpdCgiLyIpO0Q9VVtVLmxlbmd0aC0xXSsiOiIrRH1EIGluIGh8fChoW0RdPW51bGwpfWZvcih2YXIgb2Ugb2YgT2JqZWN0LmtleXMoaCkpYS5hdHRyKG9lLGhbb2VdKTtjLnRleHQmJmEudGV4dChjLnRleHQp''@;'; put 'put ''LGZ1bmN0aW9uIGpMdChjLGwpe3ZhciBhPWMuc2VsZWN0QWxsKGZ1bmN0aW9uKCl7cmV0dXJuIGMubm9kZSgpLmNoaWxkTm9kZXN9KSxkPShhPWEuZGF0YShmdW5jdGlvbih2KXtyZXR1cm4gdi5jaGlsZHJlbn0sZnVuY3Rpb24odil7cmV0dXJuIHYudGFnKyItIitsfSkpLmVudGVyKCkuYXBw''@;'; put 'put ''ZW5kKGZ1bmN0aW9uKHYpe3JldHVybiB6YWUodil9KSxoPWEuZXhpdCgpO2g9aC5yZW1vdmUoKSxhPWQubWVyZ2UoYSk7dmFyIGY9e307YS5lYWNoKGZ1bmN0aW9uKHYpe3ZhciBNPXYudGFnO251bGw9PWZbTV0mJihmW01dPTApO3ZhciBEPWZbTV0rKztySS5jYWxsKHRoaXMsdixEKX0pfShh''@;'; put 'put ''LGwpfWZ1bmN0aW9uIHFiZShjLGwpe3ZhciB2LGE9bD9sLmxlbmd0aDowLGQ9Yz9NYXRoLm1pbihhLGMubGVuZ3RoKTowLGg9bmV3IEFycmF5KGQpLGY9bmV3IEFycmF5KGEpO2Zvcih2PTA7djxkOysrdiloW3ZdPWd6KGNbdl0sbFt2XSk7Zm9yKDt2PGE7Kyt2KWZbdl09bFt2XTtyZXR1cm4g''@;'; put 'put ''ZnVuY3Rpb24oTSl7Zm9yKHY9MDt2PGQ7Kyt2KWZbdl09aFt2XShNKTtyZXR1cm4gZn19ZnVuY3Rpb24gekx0KGMsbCl7dmFyIGE9bmV3IERhdGU7cmV0dXJuIGM9K2MsbD0rbCxmdW5jdGlvbihkKXtyZXR1cm4gYS5zZXRUaW1lKGMqKDEtZCkrbCpkKSxhfX1mdW5jdGlvbiBVTHQoYyxsKXt2''@;'; put 'put ''YXIgaCxhPXt9LGQ9e307Zm9yKGggaW4obnVsbD09PWN8fCJvYmplY3QiIT10eXBlb2YgYykmJihjPXt9KSwobnVsbD09PWx8fCJvYmplY3QiIT10eXBlb2YgbCkmJihsPXt9KSxsKWggaW4gYz9hW2hdPWd6KGNbaF0sbFtoXSk6ZFtoXT1sW2hdO3JldHVybiBmdW5jdGlvbihmKXtmb3IoaCBp''@;'; put 'put ''biBhKWRbaF09YVtoXShmKTtyZXR1cm4gZH19ZnVuY3Rpb24gWkx0KGMsbCl7bHx8KGw9W10pO3ZhciBoLGE9Yz9NYXRoLm1pbihsLmxlbmd0aCxjLmxlbmd0aCk6MCxkPWwuc2xpY2UoKTtyZXR1cm4gZnVuY3Rpb24oZil7Zm9yKGg9MDtoPGE7KytoKWRbaF09Y1toXSooMS1mKStsW2hdKmY7''@;'; put 'put ''cmV0dXJuIGR9fWZ1bmN0aW9uIGd6KGMsbCl7dmFyIGQsYT10eXBlb2YgbDtyZXR1cm4gbnVsbD09bHx8ImJvb2xlYW4iPT09YT9QYWUobCk6KCJudW1iZXIiPT09YT9kZzoic3RyaW5nIj09PWE/KGQ9YnkobCkpPyhsPWQsZHopOlViZTpsIGluc3RhbmNlb2YgYnk/ZHo6bCBpbnN0YW5jZW9m''@;'; put 'put ''IERhdGU/ekx0OmZ1bmN0aW9uIFdMdChjKXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KGMpJiYhKGMgaW5zdGFuY2VvZiBEYXRhVmlldyl9KGwpP1pMdDpBcnJheS5pc0FycmF5KGwpP3FiZToiZnVuY3Rpb24iIT10eXBlb2YgbC52YWx1ZU9mJiYiZnVuY3Rpb24iIT10eXBlb2YgbC50b1N0''@;'; put 'put ''cmluZ3x8aXNOYU4obCk/VUx0OmRnKShjLGwpfWZ1bmN0aW9uIEpiZSgpe3ZhciBjPXRoaXMsZD1Mcyh0aGlzLl9zZWxlY3Rpb24ubm9kZSgpLnF1ZXJ5U2VsZWN0b3IoInN2ZyIpKTtpZigwPT1kLnNpemUoKSlyZXR1cm4gdGhpczt0aGlzLl96b29tU2VsZWN0aW9uPWQ7dmFyIGg9ZnVuY3Rp''@;'; put 'put ''b24gVkx0KCl7dmFyIHRlLG9lLHZlLGM9T0x0LGw9UEx0LGE9Tkx0LGQ9Rkx0LGg9SEx0LGY9WzAsMS8wXSx2PVtbLTEvMCwtMS8wXSxbMS8wLDEvMF1dLE09MjUwLEQ9SUx0LFU9TWFlKCJzdGFydCIsInpvb20iLCJlbmQiKSxXZT0wLG50PTEwO2Z1bmN0aW9uIGR0KE5uKXtObi5wcm9wZXJ0''@;'; put 'put ''eSgiX196b29tIiwkYmUpLm9uKCJ3aGVlbC56b29tIixSbix7cGFzc2l2ZTohMX0pLm9uKCJtb3VzZWRvd24uem9vbSIsRHIpLm9uKCJkYmxjbGljay56b29tIixMcikuZmlsdGVyKGgpLm9uKCJ0b3VjaHN0YXJ0Lnpvb20iLGRyKS5vbigidG91Y2htb3ZlLnpvb20iLE1yKS5vbigidG91Y2hl''@;'; put 'put ''bmQuem9vbSB0b3VjaGNhbmNlbC56b29tIix2aSkuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBtdChObixCcil7cmV0dXJuKEJyPU1hdGgubWF4KGZbMF0sTWF0aC5taW4oZlsxXSxCcikpKT09PU5uLms/Tm46bmV3IEs1KEJy''@;'; put 'put ''LE5uLngsTm4ueSl9ZnVuY3Rpb24gJHQoTm4sQnIsZXIpe3ZhciBUcj1CclswXS1lclswXSpObi5rLCRyPUJyWzFdLWVyWzFdKk5uLms7cmV0dXJuIFRyPT09Tm4ueCYmJHI9PT1Obi55P05uOm5ldyBLNShObi5rLFRyLCRyKX1mdW5jdGlvbiB6dChObil7cmV0dXJuWygrTm5bMF1bMF0rICtO''@;'; put 'put ''blsxXVswXSkvMiwoK05uWzBdWzFdKyArTm5bMV1bMV0pLzJdfWZ1bmN0aW9uIHluKE5uLEJyLGVyLFRyKXtObi5vbigic3RhcnQuem9vbSIsZnVuY3Rpb24oKXtnbih0aGlzLGFyZ3VtZW50cykuZXZlbnQoVHIpLnN0YXJ0KCl9KS5vbigiaW50ZXJydXB0Lnpvb20gZW5kLnpvb20iLGZ1bmN0''@;'; put 'put ''aW9uKCl7Z24odGhpcyxhcmd1bWVudHMpLmV2ZW50KFRyKS5lbmQoKX0pLnR3ZWVuKCJ6b29tIixmdW5jdGlvbigpe3ZhciAkcj10aGlzLGJpPWFyZ3VtZW50cyxOaT1nbigkcixiaSkuZXZlbnQoVHIpLHZhPWwuYXBwbHkoJHIsYmkpLHhhPW51bGw9PWVyP3p0KHZhKToiZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgZXI/ZXIuYXBwbHkoJHIsYmkpOmVyLHBhPU1hdGgubWF4KHZhWzFdWzBdLXZhWzBdWzBdLHZhWzFdWzFdLXZhWzBdWzFdKSxacj0kci5fX3pvb20seXQ9ImZ1bmN0aW9uIj09dHlwZW9mIEJyP0JyLmFwcGx5KCRyLGJpKTpCcixOdD1EKFpyLmludmVydCh4YSkuY29uY2F0KHBhL1py''@;'; put 'put ''LmspLHl0LmludmVydCh4YSkuY29uY2F0KHBhL3l0LmspKTtyZXR1cm4gZnVuY3Rpb24oUXQpe2lmKDE9PT1RdClRdD15dDtlbHNle3ZhciBMbj1OdChRdCksaXI9cGEvTG5bMl07UXQ9bmV3IEs1KGlyLHhhWzBdLUxuWzBdKmlyLHhhWzFdLUxuWzFdKmlyKX1OaS56b29tKG51bGwsUXQpfX0p''@;'; put 'put ''fWZ1bmN0aW9uIGduKE5uLEJyLGVyKXtyZXR1cm4hZXImJk5uLl9fem9vbWluZ3x8bmV3IHduKE5uLEJyKX1mdW5jdGlvbiB3bihObixCcil7dGhpcy50aGF0PU5uLHRoaXMuYXJncz1Ccix0aGlzLmFjdGl2ZT0wLHRoaXMuc291cmNlRXZlbnQ9bnVsbCx0aGlzLmV4dGVudD1sLmFwcGx5KE5u''@;'; put 'put ''LEJyKSx0aGlzLnRhcHM9MH1mdW5jdGlvbiBSbihObiwuLi5Ccil7aWYoYy5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBlcj1nbih0aGlzLEJyKS5ldmVudChObiksVHI9dGhpcy5fX3pvb20sJHI9TWF0aC5tYXgoZlswXSxNYXRoLm1pbihmWzFdLFRyLmsqTWF0aC5wb3coMixkLmFwcGx5''@;'; put 'put ''KHRoaXMsYXJndW1lbnRzKSkpKSxiaT1DeShObik7aWYoZXIud2hlZWwpKGVyLm1vdXNlWzBdWzBdIT09YmlbMF18fGVyLm1vdXNlWzBdWzFdIT09YmlbMV0pJiYoZXIubW91c2VbMV09VHIuaW52ZXJ0KGVyLm1vdXNlWzBdPWJpKSksY2xlYXJUaW1lb3V0KGVyLndoZWVsKTtlbHNle2lmKFRy''@;'; put 'put ''Lms9PT0kcilyZXR1cm47ZXIubW91c2U9W2JpLFRyLmludmVydChiaSldLGl6KHRoaXMpLGVyLnN0YXJ0KCl9bkkoTm4pLGVyLndoZWVsPXNldFRpbWVvdXQoZnVuY3Rpb24gTmkoKXtlci53aGVlbD1udWxsLGVyLmVuZCgpfSwxNTApLGVyLnpvb20oIm1vdXNlIixhKCR0KG10KFRyLCRyKSxl''@;'; put 'put ''ci5tb3VzZVswXSxlci5tb3VzZVsxXSksZXIuZXh0ZW50LHYpKX19ZnVuY3Rpb24gRHIoTm4sLi4uQnIpe2lmKCF2ZSYmYy5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBlcj1Obi5jdXJyZW50VGFyZ2V0LFRyPWduKHRoaXMsQnIsITApLmV2ZW50KE5uKSwkcj1McyhObi52aWV3KS5vbigi''@;'; put 'put ''bW91c2Vtb3ZlLnpvb20iLGZ1bmN0aW9uIHhhKFpyKXtpZihuSShaciksIVRyLm1vdmVkKXt2YXIgeXQ9WnIuY2xpZW50WC1OaSxOdD1aci5jbGllbnRZLXZhO1RyLm1vdmVkPXl0Knl0K050Kk50PldlfVRyLmV2ZW50KFpyKS56b29tKCJtb3VzZSIsYSgkdChUci50aGF0Ll9fem9vbSxUci5t''@;'; put 'put ''b3VzZVswXT1DeShacixlciksVHIubW91c2VbMV0pLFRyLmV4dGVudCx2KSl9LCEwKS5vbigibW91c2V1cC56b29tIixmdW5jdGlvbiBwYShacil7JHIub24oIm1vdXNlbW92ZS56b29tIG1vdXNldXAuem9vbSIsbnVsbCksZnVuY3Rpb24gVEx0KGMsbCl7dmFyIGE9Yy5kb2N1bWVudC5kb2N1''@;'; put 'put ''bWVudEVsZW1lbnQsZD1McyhjKS5vbigiZHJhZ3N0YXJ0LmRyYWciLG51bGwpO2wmJihkLm9uKCJjbGljay5kcmFnIixCYWUsVmFlKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZC5vbigiY2xpY2suZHJhZyIsbnVsbCl9LDApKSwib25zZWxlY3RzdGFydCJpbiBhP2Qub24oInNlbGVjdHN0YXJ0''@;'; put 'put ''LmRyYWciLG51bGwpOihhLnN0eWxlLk1velVzZXJTZWxlY3Q9YS5fX25vc2VsZWN0LGRlbGV0ZSBhLl9fbm9zZWxlY3QpfShaci52aWV3LFRyLm1vdmVkKSxuSShaciksVHIuZXZlbnQoWnIpLmVuZCgpfSwhMCksYmk9Q3koTm4sZXIpLE5pPU5uLmNsaWVudFgsdmE9Tm4uY2xpZW50WTsoZnVu''@;'; put 'put ''Y3Rpb24gRUx0KGMpe3ZhciBsPWMuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGE9THMoYykub24oImRyYWdzdGFydC5kcmFnIixCYWUsVmFlKTsib25zZWxlY3RzdGFydCJpbiBsP2Eub24oInNlbGVjdHN0YXJ0LmRyYWciLEJhZSxWYWUpOihsLl9fbm9zZWxlY3Q9bC5zdHlsZS5Nb3pVc2Vy''@;'; put 'put ''U2VsZWN0LGwuc3R5bGUuTW96VXNlclNlbGVjdD0ibm9uZSIpfSkoTm4udmlldyksamFlKE5uKSxUci5tb3VzZT1bYmksdGhpcy5fX3pvb20uaW52ZXJ0KGJpKV0saXoodGhpcyksVHIuc3RhcnQoKX19ZnVuY3Rpb24gTHIoTm4sLi4uQnIpe2lmKGMuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2''@;'; put 'put ''YXIgZXI9dGhpcy5fX3pvb20sVHI9Q3koTm4uY2hhbmdlZFRvdWNoZXM/Tm4uY2hhbmdlZFRvdWNoZXNbMF06Tm4sdGhpcyksJHI9ZXIuaW52ZXJ0KFRyKSxOaT1hKCR0KG10KGVyLGVyLmsqKE5uLnNoaWZ0S2V5Py41OjIpKSxUciwkciksbC5hcHBseSh0aGlzLEJyKSx2KTtuSShObiksTT4w''@;'; put 'put ''P0xzKHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihNKS5jYWxsKHluLE5pLFRyLE5uKTpMcyh0aGlzKS5jYWxsKGR0LnRyYW5zZm9ybSxOaSxUcixObil9fWZ1bmN0aW9uIGRyKE5uLC4uLkJyKXtpZihjLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIGJpLE5pLHZhLHhhLGVyPU5uLnRv''@;'; put 'put ''dWNoZXMsVHI9ZXIubGVuZ3RoLCRyPWduKHRoaXMsQnIsTm4uY2hhbmdlZFRvdWNoZXMubGVuZ3RoPT09VHIpLmV2ZW50KE5uKTtmb3IoamFlKE5uKSxOaT0wO05pPFRyOysrTmkpeGE9W3hhPUN5KHZhPWVyW05pXSx0aGlzKSx0aGlzLl9fem9vbS5pbnZlcnQoeGEpLHZhLmlkZW50aWZpZXJd''@;'; put 'put ''LCRyLnRvdWNoMD8hJHIudG91Y2gxJiYkci50b3VjaDBbMl0hPT14YVsyXSYmKCRyLnRvdWNoMT14YSwkci50YXBzPTApOigkci50b3VjaDA9eGEsYmk9ITAsJHIudGFwcz0xKyEhdGUpO3RlJiYodGU9Y2xlYXJUaW1lb3V0KHRlKSksYmkmJigkci50YXBzPDImJihvZT14YVswXSx0ZT1zZXRU''@;'; put 'put ''aW1lb3V0KGZ1bmN0aW9uKCl7dGU9bnVsbH0sNTAwKSksaXoodGhpcyksJHIuc3RhcnQoKSl9fWZ1bmN0aW9uIE1yKE5uLC4uLkJyKXtpZih0aGlzLl9fem9vbWluZyl7dmFyIGJpLE5pLHZhLHhhLGVyPWduKHRoaXMsQnIpLmV2ZW50KE5uKSxUcj1Obi5jaGFuZ2VkVG91Y2hlcywkcj1Uci5s''@;'; put 'put ''ZW5ndGg7Zm9yKG5JKE5uKSxiaT0wO2JpPCRyOysrYmkpdmE9Q3koTmk9VHJbYmldLHRoaXMpLGVyLnRvdWNoMCYmZXIudG91Y2gwWzJdPT09TmkuaWRlbnRpZmllcj9lci50b3VjaDBbMF09dmE6ZXIudG91Y2gxJiZlci50b3VjaDFbMl09PT1OaS5pZGVudGlmaWVyJiYoZXIudG91Y2gxWzBd''@;'; put 'put ''PXZhKTtpZihOaT1lci50aGF0Ll9fem9vbSxlci50b3VjaDEpe3ZhciBwYT1lci50b3VjaDBbMF0sWnI9ZXIudG91Y2gwWzFdLHl0PWVyLnRvdWNoMVswXSxOdD1lci50b3VjaDFbMV0sUXQ9KFF0PXl0WzBdLXBhWzBdKSpRdCsoUXQ9eXRbMV0tcGFbMV0pKlF0LExuPShMbj1OdFswXS1aclsw''@;'; put 'put ''XSkqTG4rKExuPU50WzFdLVpyWzFdKSpMbjtOaT1tdChOaSxNYXRoLnNxcnQoUXQvTG4pKSx2YT1bKHBhWzBdK3l0WzBdKS8yLChwYVsxXSt5dFsxXSkvMl0seGE9WyhaclswXStOdFswXSkvMiwoWnJbMV0rTnRbMV0pLzJdfWVsc2V7aWYoIWVyLnRvdWNoMClyZXR1cm47dmE9ZXIudG91Y2gw''@;'; put 'put ''WzBdLHhhPWVyLnRvdWNoMFsxXX1lci56b29tKCJ0b3VjaCIsYSgkdChOaSx2YSx4YSksZXIuZXh0ZW50LHYpKX19ZnVuY3Rpb24gdmkoTm4sLi4uQnIpe2lmKHRoaXMuX196b29taW5nKXt2YXIgYmksTmksZXI9Z24odGhpcyxCcikuZXZlbnQoTm4pLFRyPU5uLmNoYW5nZWRUb3VjaGVzLCRy''@;'; put 'put ''PVRyLmxlbmd0aDtmb3IoamFlKE5uKSx2ZSYmY2xlYXJUaW1lb3V0KHZlKSx2ZT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmU9bnVsbH0sNTAwKSxiaT0wO2JpPCRyOysrYmkpTmk9VHJbYmldLGVyLnRvdWNoMCYmZXIudG91Y2gwWzJdPT09TmkuaWRlbnRpZmllcj9kZWxldGUgZXIudG91Y2gw''@;'; put 'put ''OmVyLnRvdWNoMSYmZXIudG91Y2gxWzJdPT09TmkuaWRlbnRpZmllciYmZGVsZXRlIGVyLnRvdWNoMTtpZihlci50b3VjaDEmJiFlci50b3VjaDAmJihlci50b3VjaDA9ZXIudG91Y2gxLGRlbGV0ZSBlci50b3VjaDEpLGVyLnRvdWNoMCllci50b3VjaDBbMV09dGhpcy5fX3pvb20uaW52ZXJ0''@;'; put 'put ''KGVyLnRvdWNoMFswXSk7ZWxzZSBpZihlci5lbmQoKSwyPT09ZXIudGFwcyYmKE5pPUN5KE5pLHRoaXMpLE1hdGguaHlwb3Qob2VbMF0tTmlbMF0sb2VbMV0tTmlbMV0pPG50KSl7dmFyIHZhPUxzKHRoaXMpLm9uKCJkYmxjbGljay56b29tIik7dmEmJnZhLmFwcGx5KHRoaXMsYXJndW1lbnRz''@;'; put 'put ''KX19fXJldHVybiBkdC50cmFuc2Zvcm09ZnVuY3Rpb24oTm4sQnIsZXIsVHIpe3ZhciAkcj1Obi5zZWxlY3Rpb24/Tm4uc2VsZWN0aW9uKCk6Tm47JHIucHJvcGVydHkoIl9fem9vbSIsJGJlKSxObiE9PSRyP3luKE5uLEJyLGVyLFRyKTokci5pbnRlcnJ1cHQoKS5lYWNoKGZ1bmN0aW9uKCl7''@;'; put 'put ''Z24odGhpcyxhcmd1bWVudHMpLmV2ZW50KFRyKS5zdGFydCgpLnpvb20obnVsbCwiZnVuY3Rpb24iPT10eXBlb2YgQnI/QnIuYXBwbHkodGhpcyxhcmd1bWVudHMpOkJyKS5lbmQoKX0pfSxkdC5zY2FsZUJ5PWZ1bmN0aW9uKE5uLEJyLGVyLFRyKXtkdC5zY2FsZVRvKE5uLGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuX196b29tLmsqKCJmdW5jdGlvbiI9PXR5cGVvZiBCcj9Cci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6QnIpfSxlcixUcil9LGR0LnNjYWxlVG89ZnVuY3Rpb24oTm4sQnIsZXIsVHIpe2R0LnRyYW5zZm9ybShObixmdW5jdGlvbigpe3ZhciAkcj1sLmFwcGx5KHRoaXMsYXJn''@;'; put 'put ''dW1lbnRzKSxiaT10aGlzLl9fem9vbSxOaT1udWxsPT1lcj96dCgkcik6ImZ1bmN0aW9uIj09dHlwZW9mIGVyP2VyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplcix2YT1iaS5pbnZlcnQoTmkpLHhhPSJmdW5jdGlvbiI9PXR5cGVvZiBCcj9Cci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6QnI7cmV0''@;'; put 'put ''dXJuIGEoJHQobXQoYmkseGEpLE5pLHZhKSwkcix2KX0sZXIsVHIpfSxkdC50cmFuc2xhdGVCeT1mdW5jdGlvbihObixCcixlcixUcil7ZHQudHJhbnNmb3JtKE5uLGZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcy5fX3pvb20udHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiBCcj9Cci5hcHBs''@;'; put 'put ''eSh0aGlzLGFyZ3VtZW50cyk6QnIsImZ1bmN0aW9uIj09dHlwZW9mIGVyP2VyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplciksbC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdil9LG51bGwsVHIpfSxkdC50cmFuc2xhdGVUbz1mdW5jdGlvbihObixCcixlcixUciwkcil7ZHQudHJhbnNmb3JtKE5u''@;'; put 'put ''LGZ1bmN0aW9uKCl7dmFyIGJpPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpLE5pPXRoaXMuX196b29tLHZhPW51bGw9PVRyP3p0KGJpKToiZnVuY3Rpb24iPT10eXBlb2YgVHI/VHIuYXBwbHkodGhpcyxhcmd1bWVudHMpOlRyO3JldHVybiBhKGZ6LnRyYW5zbGF0ZSh2YVswXSx2YVsxXSkuc2Nh''@;'; put 'put ''bGUoTmkuaykudHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiBCcj8tQnIuYXBwbHkodGhpcyxhcmd1bWVudHMpOi1CciwiZnVuY3Rpb24iPT10eXBlb2YgZXI/LWVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotZXIpLGJpLHYpfSxUciwkcil9LHduLnByb3RvdHlwZT17ZXZlbnQ6ZnVuY3Rp''@;'; put 'put ''b24oTm4pe3JldHVybiBObiYmKHRoaXMuc291cmNlRXZlbnQ9Tm4pLHRoaXN9LHN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIDE9PSsrdGhpcy5hY3RpdmUmJih0aGlzLnRoYXQuX196b29taW5nPXRoaXMsdGhpcy5lbWl0KCJzdGFydCIpKSx0aGlzfSx6b29tOmZ1bmN0aW9uKE5uLEJyKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5tb3VzZSYmIm1vdXNlIiE9PU5uJiYodGhpcy5tb3VzZVsxXT1Cci5pbnZlcnQodGhpcy5tb3VzZVswXSkpLHRoaXMudG91Y2gwJiYidG91Y2giIT09Tm4mJih0aGlzLnRvdWNoMFsxXT1Cci5pbnZlcnQodGhpcy50b3VjaDBbMF0pKSx0aGlzLnRvdWNoMSYmInRvdWNoIiE9PU5u''@;'; put 'put ''JiYodGhpcy50b3VjaDFbMV09QnIuaW52ZXJ0KHRoaXMudG91Y2gxWzBdKSksdGhpcy50aGF0Ll9fem9vbT1Ccix0aGlzLmVtaXQoInpvb20iKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09LS10aGlzLmFjdGl2ZSYmKGRlbGV0ZSB0aGlzLnRoYXQuX196b29taW5nLHRoaXMuZW1p''@;'; put 'put ''dCgiZW5kIikpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24oTm4pe3ZhciBCcj1Mcyh0aGlzLnRoYXQpLmRhdHVtKCk7VS5jYWxsKE5uLHRoaXMudGhhdCxuZXcgTEx0KE5uLHtzb3VyY2VFdmVudDp0aGlzLnNvdXJjZUV2ZW50LHRhcmdldDpkdCx0eXBlOk5uLHRyYW5zZm9ybTp0aGlzLnRoYXQuX196''@;'; put 'put ''b29tLGRpc3BhdGNoOlV9KSxCcil9fSxkdC53aGVlbERlbHRhPWZ1bmN0aW9uKE5uKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0iZnVuY3Rpb24iPT10eXBlb2YgTm4/Tm46aHooK05uKSxkdCk6ZH0sZHQuZmlsdGVyPWZ1bmN0aW9uKE5uKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o''@;'; put 'put ''Yz0iZnVuY3Rpb24iPT10eXBlb2YgTm4/Tm46aHooISFObiksZHQpOmN9LGR0LnRvdWNoYWJsZT1mdW5jdGlvbihObil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ImZ1bmN0aW9uIj09dHlwZW9mIE5uP05uOmh6KCEhTm4pLGR0KTpofSxkdC5leHRlbnQ9ZnVuY3Rpb24oTm4pe3JldHVy''@;'; put 'put ''biBhcmd1bWVudHMubGVuZ3RoPyhsPSJmdW5jdGlvbiI9PXR5cGVvZiBObj9ObjpoeihbWytOblswXVswXSwrTm5bMF1bMV1dLFsrTm5bMV1bMF0sK05uWzFdWzFdXV0pLGR0KTpsfSxkdC5zY2FsZUV4dGVudD1mdW5jdGlvbihObil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGZbMF09K05u''@;'; put 'put ''WzBdLGZbMV09K05uWzFdLGR0KTpbZlswXSxmWzFdXX0sZHQudHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKE5uKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odlswXVswXT0rTm5bMF1bMF0sdlsxXVswXT0rTm5bMV1bMF0sdlswXVsxXT0rTm5bMF1bMV0sdlsxXVsxXT0rTm5bMV1bMV0sZHQp''@;'; put 'put ''OltbdlswXVswXSx2WzBdWzFdXSxbdlsxXVswXSx2WzFdWzFdXV19LGR0LmNvbnN0cmFpbj1mdW5jdGlvbihObil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9Tm4sZHQpOmF9LGR0LmR1cmF0aW9uPWZ1bmN0aW9uKE5uKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTT0rTm4sZHQpOk19''@;'; put 'put ''LGR0LmludGVycG9sYXRlPWZ1bmN0aW9uKE5uKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRD1ObixkdCk6RH0sZHQub249ZnVuY3Rpb24oKXt2YXIgTm49VS5vbi5hcHBseShVLGFyZ3VtZW50cyk7cmV0dXJuIE5uPT09VT9kdDpObn0sZHQuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbihObil7''@;'; put 'put ''cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFdlPShObj0rTm4pKk5uLGR0KTpNYXRoLnNxcnQoV2UpfSxkdC50YXBEaXN0YW5jZT1mdW5jdGlvbihObil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG50PStObixkdCk6bnR9LGR0fSgpLnNjYWxlRXh0ZW50KHRoaXMuX29wdGlvbnMuem9vbVNj''@;'; put 'put ''YWxlRXh0ZW50KS50cmFuc2xhdGVFeHRlbnQodGhpcy5fb3B0aW9ucy56b29tVHJhbnNsYXRlRXh0ZW50KS5pbnRlcnBvbGF0ZShneikub24oInpvb20iLGZ1bmN0aW9uIGwodil7THMoZC5ub2RlKCkucXVlcnlTZWxlY3RvcigiZyIpKS5hdHRyKCJ0cmFuc2Zvcm0iLHYudHJhbnNmb3JtKSxj''@;'; put 'put ''Ll9kaXNwYXRjaC5jYWxsKCJ6b29tIixjKX0pO3RoaXMuX3pvb21CZWhhdmlvcj1oO3ZhciBmPUxzKGQubm9kZSgpLnF1ZXJ5U2VsZWN0b3IoImciKSk7cmV0dXJuIGQuY2FsbChoKSx0aGlzLl9hY3RpdmV8fFlhZS5jYWxsKHRoaXMsZiksdGhpcy5fb3JpZ2luYWxUcmFuc2Zvcm09cHooZC5u''@;'; put 'put ''b2RlKCkpLHRoaXN9ZnVuY3Rpb24gV2FlKGMpe3ZhciBsPXRoaXMuX3RyYW5zbGF0aW9uLGE9dGhpcy5fc2NhbGUsZD1jLmRhdHVtKCkudHJhbnNsYXRpb24saD1jLmRhdHVtKCkuc2NhbGUsZj1weih0aGlzLl96b29tU2VsZWN0aW9uLm5vZGUoKSk7cmV0dXJuIGwmJihmPShmPWYuc2NhbGUo''@;'; put 'put ''MS9hKSkudHJhbnNsYXRlKC1sLngsLWwueSkpLChmPWYudHJhbnNsYXRlKGQueCxkLnkpKS5zY2FsZShoKX1mdW5jdGlvbiBZYWUoYyl7dGhpcy5fem9vbUJlaGF2aW9yLnRyYW5zZm9ybSh0aGlzLl96b29tU2VsZWN0aW9uLFdhZS5jYWxsKHRoaXMsYykpLHRoaXMuX3RyYW5zbGF0aW9uPWMu''@;'; put 'put ''ZGF0dW0oKS50cmFuc2xhdGlvbix0aGlzLl9zY2FsZT1jLmRhdHVtKCkuc2NhbGUsdGhpcy5fb3JpZ2luYWxUcmFuc2Zvcm09ZnoudHJhbnNsYXRlKGMuZGF0dW0oKS50cmFuc2xhdGlvbi54LGMuZGF0dW0oKS50cmFuc2xhdGlvbi55KS5zY2FsZShjLmRhdHVtKCkuc2NhbGUpfWZ1bmN0aW9u''@;'; put 'put ''IEpMdChjLGwpe3JldHVybiBmdW5jdGlvbigpe2NvbnN0IGE9Yy5tYXAoZnVuY3Rpb24oZCl7cmV0dXJuIGd6KFtkWzBdWzBdLGRbMF1bMV1dLFtkWzFdWzBdLGRbMV1bMV1dKX0pO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4gZDwxPyJNIithLm1hcChmdW5jdGlvbihoKXtyZXR1cm4gaChk''@;'; put 'put ''KX0pLmpvaW4oIkwiKTpsfX19ZnVuY3Rpb24gUWJlKGMpe3JldHVybiJlZGdlIj09Yy5hdHRyaWJ1dGVzLmNsYXNzfHwiYSI9PWMudGFnJiYiZyI9PWMucGFyZW50LnRhZyYmImVkZ2UiPT1jLnBhcmVudC5wYXJlbnQuYXR0cmlidXRlcy5jbGFzc31mdW5jdGlvbiBlX2UoYyl7cmV0dXJuIGMu''@;'; put 'put ''cGFyZW50JiZRYmUoYy5wYXJlbnQpfWZ1bmN0aW9uIHRfZShjKXt2YXIgbD10aGlzLl90cmFuc2l0aW9uLGE9dGhpcy5fb3B0aW9ucy5mYWRlJiZudWxsIT1sLGQ9dGhpcy5fb3B0aW9ucy50d2VlblBhdGhzLGg9dGhpcy5fb3B0aW9ucy50d2VlblNoYXBlcyxmPXRoaXMuX29wdGlvbnMuY29u''@;'; put 'put ''dmVydEVxdWFsU2lkZWRQb2x5Z29ucyx2PXRoaXMuX29wdGlvbnMuZ3Jvd0VudGVyaW5nRWRnZXMmJm51bGwhPWwsTT10aGlzLl9hdHRyaWJ1dGVyLEQ9dGhpczt2YXIgb2U9dGhpcy5fc2VsZWN0aW9uO2lmKG51bGwhPWwpe3ZhciB2ZT10aGlzLl9qb2JzO2lmKEQuX2FjdGl2ZSlyZXR1cm4g''@;'; put 'put ''dmUucHVzaChudWxsKSx0aGlzO29lLnRyYW5zaXRpb24obCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKDApLm9uKCJlbmQiLGZ1bmN0aW9uKCl7RC5fYWN0aXZlPSExLDAhPXZlLmxlbmd0aCYmKHZlLnNoaWZ0KCksRC5yZW5kZXIoKSl9KSx0aGlzLl9hY3RpdmU9ITB9bnVsbCE9bCYmb2UudHJh''@;'; put 'put ''bnNpdGlvbihsKS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7RC5fZGlzcGF0Y2guY2FsbCgidHJhbnNpdGlvblN0YXJ0IixEKX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7RC5fZGlzcGF0Y2guY2FsbCgidHJhbnNpdGlvbkVuZCIsRCl9KS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkub24oInN0YXJ0''@;'; put 'put ''IixmdW5jdGlvbigpe0QuX2Rpc3BhdGNoLmNhbGwoInJlc3RvcmVFbmQiLEQpLEQuX2Rpc3BhdGNoLmNhbGwoImVuZCIsRCksYyYmYy5jYWxsKEQpfSk7dmFyIHdlPXRoaXMuX2RhdGEsRmU9b2Uuc2VsZWN0QWxsKCJzdmciKS5kYXRhKFt3ZV0sZnVuY3Rpb24oV2Upe3JldHVybiBXZS5rZXl9''@;'; put 'put ''KTtyZXR1cm4gRmU9RmUuZW50ZXIoKS5hcHBlbmQoInN2ZyIpLm1lcmdlKEZlKSxmdW5jdGlvbiB0ZShXZSl7dmFyIG50PUxzKHRoaXMpO2lmKCJzdmciPT1XZS50YWcpe3ZhciBkdD1ELl9vcHRpb25zO2lmKG51bGwhPWR0LndpZHRofHxudWxsIT1kdC5oZWlnaHQpe3ZhciBtdD1kdC53aWR0''@;'; put 'put ''aCwkdD1kdC5oZWlnaHQ7bnVsbD09bXQ/bXQ9NCpXZS5hdHRyaWJ1dGVzLndpZHRoLnJlcGxhY2UoInB0IiwiIikvMzoobnQuYXR0cigid2lkdGgiLG10KSxXZS5hdHRyaWJ1dGVzLndpZHRoPW10KSxudWxsPT0kdD8kdD00KldlLmF0dHJpYnV0ZXMuaGVpZ2h0LnJlcGxhY2UoInB0IiwiIikv''@;'; put 'put ''MzoobnQuYXR0cigiaGVpZ2h0IiwkdCksV2UuYXR0cmlidXRlcy5oZWlnaHQ9JHQpLGR0LmZpdHx8KG50LmF0dHIoInZpZXdCb3giLGAwIDAgJHszKm10LzQvZHQuc2NhbGV9ICR7MyokdC80L2R0LnNjYWxlfWApLFdlLmF0dHJpYnV0ZXMudmlld0JveD1gMCAwICR7MyptdC80L2R0LnNjYWxl''@;'; put 'put ''fSAkezMqJHQvNC9kdC5zY2FsZX1gKX0xIT1kdC5zY2FsZSYmKGR0LmZpdHx8bnVsbD09ZHQud2lkdGgmJm51bGw9PWR0LmhlaWdodCkmJihtdD1XZS5hdHRyaWJ1dGVzLnZpZXdCb3guc3BsaXQoIiAiKVsyXSwkdD1XZS5hdHRyaWJ1dGVzLnZpZXdCb3guc3BsaXQoIiAiKVszXSxudC5hdHRy''@;'; put 'put ''KCJ2aWV3Qm94IixgMCAwICR7bXQvZHQuc2NhbGV9ICR7JHQvZHQuc2NhbGV9YCksV2UuYXR0cmlidXRlcy52aWV3Qm94PWAwIDAgJHttdC9kdC5zY2FsZX0gJHskdC9kdC5zY2FsZX1gKX1NJiZudC5lYWNoKE0pO3ZhciB6dD1XZS50YWcseW49V2UuYXR0cmlidXRlcyxnbj1udC5ub2RlKCku''@;'; put 'put ''YXR0cmlidXRlcztpZihnbilmb3IodmFyIHduPTA7d248Z24ubGVuZ3RoO3duKyspe3ZhciBSbj1nblt3bl0sRHI9Um4ubmFtZTtpZigieG1sbnMiIT1Eci5zcGxpdCgiOiIpWzBdJiZSbi5uYW1lc3BhY2VVUkkpe3ZhciBMcj1Sbi5uYW1lc3BhY2VVUkkuc3BsaXQoIi8iKTtEcj1McltMci5s''@;'; put 'put ''ZW5ndGgtMV0rIjoiK0RyfURyIGluIHlufHwoeW5bRHJdPW51bGwpfXZhciBNcj0hMSx2aT0hMTtpZihoJiZsKXtpZigoInBvbHlnb24iPT10aGlzLm5vZGVOYW1lfHwiZWxsaXBzZSI9PXRoaXMubm9kZU5hbWUpJiZXZS5hbHRlcm5hdGl2ZU9sZCYmKHZpPSEwKSwoInBvbHlnb24iPT16dHx8''@;'; put 'put ''ImVsbGlwc2UiPT16dCkmJldlLmFsdGVybmF0aXZlTmV3JiYoTXI9ITApLCJwb2x5Z29uIj09dGhpcy5ub2RlTmFtZSYmInBvbHlnb24iPT16dCYmV2UuYWx0ZXJuYXRpdmVPbGQpe3ZhciBObj1LYmUobnQpO2lmKCFmKXt2YXIgZXI9Tm4uYXR0cmlidXRlcy5wb2ludHMuc3BsaXQoIiAiKS5s''@;'; put 'put ''ZW5ndGg7KFRyPVdlLmF0dHJpYnV0ZXMucG9pbnRzKS5zcGxpdCgiICIpLmxlbmd0aD09ZXImJihNcj0hMSx2aT0hMSl9fWlmKHZpKXt2YXIgTmk9WGJlKG50LFdlLmFsdGVybmF0aXZlT2xkKTtOaS5kYXRhKFtXZV0sZnVuY3Rpb24oKXtyZXR1cm4gV2Uua2V5fSksbnQ9Tml9TXImJih6dD0i''@;'; put 'put ''cGF0aCIseW49V2UuYWx0ZXJuYXRpdmVOZXcuYXR0cmlidXRlcyl9dmFyIHhhPW50O2lmKGwmJih4YT14YS50cmFuc2l0aW9uKGwpLGEmJnhhLmZpbHRlcihmdW5jdGlvbihIbil7cmV0dXJuIiMiPT1Ibi50YWdbMF0/bnVsbDp0aGlzfSkuc3R5bGUoIm9wYWNpdHkiLDEpLHhhLmZpbHRlcihm''@;'; put 'put ''dW5jdGlvbihIbil7cmV0dXJuIiMiPT1Ibi50YWdbMF0/bnVsbDp0aGlzfSkub24oImVuZCIsZnVuY3Rpb24oSG4pe0xzKHRoaXMpLmF0dHIoInN0eWxlIixIbiYmSG4uYXR0cmlidXRlcyYmSG4uYXR0cmlidXRlcy5zdHlsZXx8bnVsbCl9KSksdiYmInBhdGgiPT16dCYmV2Uub2Zmc2V0KXt2''@;'; put 'put ''YXIgWnI9V2UudG90YWxMZW5ndGg7bnQuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsWnIrIiAiK1pyKS5hdHRyKCJzdHJva2UtZGFzaG9mZnNldCIsWnIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1dlLm9mZnNldC54KyIsIitXZS5vZmZzZXQueSsiKSIpLHluWyJzdHJva2UtZGFz''@;'; put 'put ''aG9mZnNldCJdPTAseW4udHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwwKSIseGEuYXR0cigic3Ryb2tlLWRhc2hvZmZzZXQiLHluWyJzdHJva2UtZGFzaG9mZnNldCJdKS5hdHRyKCJ0cmFuc2Zvcm0iLHluLnRyYW5zZm9ybSkub24oInN0YXJ0IixmdW5jdGlvbigpe0xzKHRoaXMpLnN0eWxlKCJv''@;'; put 'put ''cGFjaXR5IixudWxsKX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7THModGhpcykuYXR0cigic3Ryb2tlLWRhc2hvZmZzZXQiLG51bGwpLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLG51bGwpLmF0dHIoInRyYW5zZm9ybSIsbnVsbCl9KX1pZih2JiYicG9seWdvbiI9PXp0JiZlX2UoV2UpJiZXZS5v''@;'; put 'put ''ZmZzZXQmJiJwYXRoIj09V2UucGFyZW50LmNoaWxkcmVuWzNdLnRhZyl7dmFyIE50PUxzKG50Lm5vZGUoKS5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3IoInBhdGgiKSksUXQ9TnQubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoMCksTG49TnQubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoV2UudG90''@;'; put 'put ''YWxMZW5ndGgpLGlyPU50Lm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKFdlLnRvdGFsTGVuZ3RoLTEpLEV0PTE4MCpNYXRoLmF0YW4yKExuLnktaXIueSxMbi54LWlyLngpL01hdGguUEksWHQ9UXQueC1Mbi54K1dlLm9mZnNldC54LF9uPVF0LnktTG4ueStXZS5vZmZzZXQueTtudC5hdHRyKCJ0''@;'; put 'put ''cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitYdCsiLCIrX24rIikiKSx4YS5hdHRyVHdlZW4oInRyYW5zZm9ybSIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oSG4pe3ZhciB6bj1OdC5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aChXZS50b3RhbExlbmd0aCpIbiksT3I9TnQubm9kZSgpLmdldFBv''@;'; put 'put ''aW50QXRMZW5ndGgoV2UudG90YWxMZW5ndGgqSG4rMSksRXI9MTgwKk1hdGguYXRhbjIoT3IueS16bi55LE9yLngtem4ueCkvTWF0aC5QSS1FdDtyZXR1cm4idHJhbnNsYXRlKCIrKFh0PXpuLngtTG4ueCtXZS5vZmZzZXQueCooMS1IbikpKyIsIisoX249em4ueS1Mbi55K1dlLm9mZnNldC55''@;'; put 'put ''KigxLUhuKSkrIikgcm90YXRlKCIrRXIrIiAiK0xuLngrIiAiK0xuLnkrIikifX0pLm9uKCJzdGFydCIsZnVuY3Rpb24oKXtMcyh0aGlzKS5zdHlsZSgib3BhY2l0eSIsbnVsbCl9KS5vbigiZW5kIixmdW5jdGlvbigpe0xzKHRoaXMpLmF0dHIoInRyYW5zZm9ybSIsbnVsbCl9KX12YXIgUW49''@;'; put 'put ''ZCYmbCYmInBhdGgiPT16dCYmbnVsbCE9bnQuYXR0cigiZCIpO2Zvcih2YXIgUG4gb2YgT2JqZWN0LmtleXMoeW4pKXt2YXIgRW49eW5bUG5dO2lmKFFuJiYiZCI9PVBuKXt2YXIgVHI7KFRyPShXZS5hbHRlcm5hdGl2ZU9sZHx8V2UpLnBvaW50cykmJnhhLmF0dHJUd2VlbigiZCIsSkx0KFRy''@;'; put 'put ''LEVuKSl9ZWxzZXtpZigidHJhbnNmb3JtIj09UG4mJldlLnRyYW5zbGF0aW9uKWlmKGwpe3ZhciBfcj14YS5vbigiZW5kIik7eGEub24oInN0YXJ0IixmdW5jdGlvbigpe0QuX3pvb21CZWhhdmlvciYmeGEudHdlZW4oImF0dHIudHJhbnNmb3JtIixmdW5jdGlvbigpe3ZhciBIbj10aGlzO3Jl''@;'; put 'put ''dHVybiBmdW5jdGlvbih6bil7SG4uc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLEFiZShweihELl96b29tU2VsZWN0aW9uLm5vZGUoKSkudG9TdHJpbmcoKSxXYWUuY2FsbChELG50KS50b1N0cmluZygpKSh6bikpfX0pfSkub24oImVuZCIsZnVuY3Rpb24oKXtfci5jYWxsKHRoaXMpLEQuX3pv''@;'; put 'put ''b21CZWhhdmlvciYmWWFlLmNhbGwoRCxudCl9KX1lbHNlIEQuX3pvb21CZWhhdmlvciYmKFlhZS5jYWxsKEQsbnQpLEVuPVdhZS5jYWxsKEQsbnQpLnRvU3RyaW5nKCkpO3hhLmF0dHIoUG4sRW4pfX1NciYmeGEub24oImVuZCIsZnVuY3Rpb24oSG4sem4sT3Ipe1hiZShOaT1Mcyh0aGlzKSxI''@;'; put 'put ''bikuZGF0YShbSG5dLGZ1bmN0aW9uKCl7cmV0dXJuIEhuLmtleX0pfSksV2UudGV4dCYmeGEudGV4dChXZS50ZXh0KSxmdW5jdGlvbiBVKFdlKXt2YXIgbnQ9V2Uuc2VsZWN0QWxsKGZ1bmN0aW9uKCl7cmV0dXJuIFdlLm5vZGUoKS5jaGlsZE5vZGVzfSksZHQ9KG50PW50LmRhdGEoZnVuY3Rp''@;'; put 'put ''b24oenQpe3JldHVybiB6dC5jaGlsZHJlbn0sZnVuY3Rpb24oenQpe3JldHVybiB6dC5rZXl9KSkuZW50ZXIoKS5hcHBlbmQoZnVuY3Rpb24oenQpe3ZhciB5bj16YWUoenQpO3JldHVybiIjdGV4dCI9PXp0LnRhZyYmYSYmKHluLm5vZGVWYWx1ZT16dC50ZXh0KSx5bn0pOyhhfHx2JiZRYmUo''@;'; put 'put ''V2UuZGF0dW0oKSkpJiZkdC5maWx0ZXIoZnVuY3Rpb24oenQpe3JldHVybiIjIj09enQudGFnWzBdP251bGw6dGhpc30pLmVhY2goZnVuY3Rpb24oenQpe3ZhciB5bj1Mcyh0aGlzKTtmb3IodmFyIGduIG9mIE9iamVjdC5rZXlzKHp0LmF0dHJpYnV0ZXMpKXluLmF0dHIoZ24senQuYXR0cmli''@;'; put 'put ''dXRlc1tnbl0pfSkuZmlsdGVyKGZ1bmN0aW9uKHp0KXtyZXR1cm4ic3ZnIj09enQudGFnfHwiZyI9PXp0LnRhZz9udWxsOnRoaXN9KS5zdHlsZSgib3BhY2l0eSIsMCk7dmFyICR0PW50LmV4aXQoKTtNJiYkdC5lYWNoKE0pLGwmJigkdD0kdC50cmFuc2l0aW9uKGwpLGEmJiR0LmZpbHRlcihm''@;'; put 'put ''dW5jdGlvbih6dCl7cmV0dXJuIiMiPT16dC50YWdbMF0/bnVsbDp0aGlzfSkuc3R5bGUoIm9wYWNpdHkiLDApKSwkdD0kdC5yZW1vdmUoKSwobnQ9ZHQubWVyZ2UobnQpLm9yZGVyKCkpLmVhY2godGUpfShudCl9LmNhbGwoRmUubm9kZSgpLHdlKSx0aGlzLl9vcHRpb25zLnpvb20mJiF0aGlz''@;'; put 'put ''Ll96b29tQmVoYXZpb3ImJkpiZS5jYWxsKHRoaXMpLEQuX2Rpc3BhdGNoLmNhbGwoInJlbmRlckVuZCIsRCksbnVsbD09bCYmKHRoaXMuX2Rpc3BhdGNoLmNhbGwoImVuZCIsdGhpcyksYyYmYy5jYWxsKHRoaXMpKSx0aGlzfXB6LnByb3RvdHlwZT1LNS5wcm90b3R5cGU7dmFyIGFPdD1BcnJh''@;'; put 'put ''eUJ1ZmZlcix6dT1VaW50OEFycmF5LG16PVVpbnQxNkFycmF5LG9PdD1JbnQxNkFycmF5LHZ6PUludDMyQXJyYXksR2FlPWZ1bmN0aW9uKGMsbCxhKXtpZih6dS5wcm90b3R5cGUuc2xpY2UpcmV0dXJuIHp1LnByb3RvdHlwZS5zbGljZS5jYWxsKGMsbCxhKTsobnVsbD09bHx8bDwwKSYmKGw9''@;'; put 'put ''MCksKG51bGw9PWF8fGE+Yy5sZW5ndGgpJiYoYT1jLmxlbmd0aCk7dmFyIGQ9bmV3IHp1KGEtbCk7cmV0dXJuIGQuc2V0KGMuc3ViYXJyYXkobCxhKSksZH0saUk9ZnVuY3Rpb24oYyxsLGEsZCl7aWYoenUucHJvdG90eXBlLmZpbGwpcmV0dXJuIHp1LnByb3RvdHlwZS5maWxsLmNhbGwoYyxs''@;'; put 'put ''LGEsZCk7Zm9yKChudWxsPT1hfHxhPDApJiYoYT0wKSwobnVsbD09ZHx8ZD5jLmxlbmd0aCkmJihkPWMubGVuZ3RoKTthPGQ7KythKWNbYV09bDtyZXR1cm4gY30sc090PWZ1bmN0aW9uKGMsbCxhLGQpe2lmKHp1LnByb3RvdHlwZS5jb3B5V2l0aGluKXJldHVybiB6dS5wcm90b3R5cGUuY29w''@;'; put 'put ''eVdpdGhpbi5jYWxsKGMsbCxhLGQpO2ZvcigobnVsbD09YXx8YTwwKSYmKGE9MCksKG51bGw9PWR8fGQ+Yy5sZW5ndGgpJiYoZD1jLmxlbmd0aCk7YTxkOyljW2wrK109Y1thKytdfSxsT3Q9WyJpbnZhbGlkIHpzdGQgZGF0YSIsIndpbmRvdyBzaXplIHRvbyBsYXJnZSAoPjIwNDZNQikiLCJp''@;'; put 'put ''bnZhbGlkIGJsb2NrIHR5cGUiLCJGU0UgYWNjdXJhY3kgdG9vIGhpZ2giLCJtYXRjaCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLCJ1bmV4cGVjdGVkIEVPRiJdLGMwPWZ1bmN0aW9uKGMsbCxhKXt2YXIgZD1uZXcgRXJyb3IobHx8bE90W2NdKTtpZihkLmNvZGU9YyxFcnJvci5jYXB0dXJlU3Rh''@;'; put 'put ''Y2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZCxjMCksIWEpdGhyb3cgZDtyZXR1cm4gZH0sbl9lPWZ1bmN0aW9uKGMsbCxhKXtmb3IodmFyIGQ9MCxoPTA7ZDxhOysrZClofD1jW2wrK108PChkPDwzKTtyZXR1cm4gaH0sdU90PWZ1bmN0aW9uKGMsbCl7dmFyIGE9Y1swXXxjWzFd''@;'; put 'put ''PDw4fGNbMl08PDE2O2lmKDMxMjY1Njg9PWEmJjI1Mz09Y1szXSl7dmFyIGQ9Y1s0XSxoPWQ+PjUmMSxmPWQ+PjImMSx2PTMmZCxNPWQ+PjY7OCZkJiZjMCgwKTt2YXIgRD02LWgsVT0zPT12PzQ6dix0ZT1uX2UoYyxELFUpLG9lPU0/MTw8TTpoLHZlPW5fZShjLEQrPVUsb2UpKygxPT1NJiYy''@;'; put 'put ''NTYpLHdlPXZlO2lmKCFoKXt2YXIgRmU9MTw8MTArKGNbNV0+PjMpO3dlPUZlKyhGZT4+MykqKDcmY1s1XSl9d2U+MjE0NTM4NjQ5NiYmYzAoMSk7dmFyIFdlPW5ldyB6dSgoMT09bD92ZXx8d2U6bD8wOndlKSsxMik7cmV0dXJuIFdlWzBdPTEsV2VbNF09NCxXZVs4XT04LHtiOkQrb2UseTow''@;'; put 'put ''LGw6MCxkOnRlLHc6bCYmMSE9bD9sOldlLnN1YmFycmF5KDEyKSxlOndlLG86bmV3IHZ6KFdlLmJ1ZmZlciwwLDMpLHU6dmUsYzpmLG06TWF0aC5taW4oMTMxMDcyLHdlKX19aWYoMjU0ODE4OTM9PShhPj40fGNbM108PDIwKSlyZXR1cm4gZnVuY3Rpb24oYyl7cmV0dXJuKGNbNF18Y1s1XTw8''@;'; put 'put ''OHxjWzZdPDwxNnxjWzddPDwyNCk+Pj4wfShjKSs4O2MwKDApfSxNeT1mdW5jdGlvbihjKXtmb3IodmFyIGw9MDsxPDxsPD1jOysrbCk7cmV0dXJuIGwtMX0sYUk9ZnVuY3Rpb24oYyxsLGEpe3ZhciBkPTQrKGw8PDMpLGg9NSsoMTUmY1tsXSk7aD5hJiZjMCgzKTtmb3IodmFyIGY9MTw8aCx2''@;'; put 'put ''PWYsTT0tMSxEPS0xLFU9LTEsdGU9ZixvZT1uZXcgYU90KDUxMisoZjw8MikpLHZlPW5ldyBvT3Qob2UsMCwyNTYpLHdlPW5ldyBteihvZSwwLDI1NiksRmU9bmV3IG16KG9lLDUxMixmKSxXZT01MTIrKGY8PDEpLG50PW5ldyB6dShvZSxXZSxmKSxkdD1uZXcgenUob2UsV2UrZik7TTwyNTUm''@;'; put 'put ''JnY+MDspe3ZhciBtdD1NeSh2KzEpLCR0PWQ+PjMsenQ9KDE8PG10KzEpLTEseW49KGNbJHRdfGNbJHQrMV08PDh8Y1skdCsyXTw8MTYpPj4oNyZkKSZ6dCxnbj0oMTw8bXQpLTEsd249enQtdi0xLFJuPXluJmduO2lmKFJuPHduPyhkKz1tdCx5bj1Sbik6KGQrPW10KzEseW4+Z24mJih5bi09''@;'; put 'put ''d24pKSx2ZVsrK01dPS0teW4sLTE9PXluPyh2Kz15bixudFstLXRlXT1NKTp2LT15biwheW4pZG97dmFyIERyPWQ+PjM7RD0oY1tEcl18Y1tEcisxXTw8OCk+Pig3JmQpJjMsZCs9MixNKz1EfXdoaWxlKDM9PUQpfShNPjI1NXx8dikmJmMwKDApO2Zvcih2YXIgTHI9MCxkcj0oZj4+MSkrKGY+''@;'; put 'put ''PjMpKzMsTXI9Zi0xLHZpPTA7dmk8PU07Kyt2aSl7dmFyIE5uPXZlW3ZpXTtpZihObjwxKXdlW3ZpXT0tTm47ZWxzZSBmb3IoVT0wO1U8Tm47KytVKXtudFtMcl09dmk7ZG97THI9THIrZHImTXJ9d2hpbGUoTHI+PXRlKX19Zm9yKExyJiZjMCgwKSxVPTA7VTxmOysrVSl7dmFyIEJyPXdlW250''@;'; put 'put ''W1VdXSsrLGVyPWR0W1VdPWgtTXkoQnIpO0ZlW1VdPShCcjw8ZXIpLWZ9cmV0dXJuW2QrNz4+Myx7YjpoLHM6bnQsbjpkdCx0OkZlfV19LGhPdD1hSShuZXcgenUoWzgxLDE2LDk5LDE0MCw0OSwxOTgsMjQsOTksMTIsMzMsMTk2LDI0LDk5LDEwMiwxMDIsMTM0LDcwLDE0Niw0XSksMCw2KVsx''@;'; put 'put ''XSxmT3Q9YUkobmV3IHp1KFszMywyMCwxOTYsMjQsOTksMTQwLDMzLDEzMiwxNiw2Niw4LDMzLDEzMiwxNiw2Niw4LDMzLDY4LDY4LDY4LDY4LDY4LDY4LDY4LDY4LDM2LDldKSwwLDYpWzFdLHBPdD1hSShuZXcgenUoWzMyLDEzMiwxNiw2NiwxMDIsNzAsNjgsNjgsNjgsNjgsMzYsNzMsMl0p''@;'; put 'put ''LDAsNSlbMV0scl9lPWZ1bmN0aW9uKGMsbCl7Zm9yKHZhciBhPWMubGVuZ3RoLGQ9bmV3IHZ6KGEpLGg9MDtoPGE7KytoKWRbaF09bCxsKz0xPDxjW2hdO3JldHVybiBkfSwkYWU9bmV3IHp1KG5ldyB2eihbMCwwLDAsMCwxNjg0MzAwOSw1MDUyODc3MCwxMzQ2NzgwMjAsMjAyMDUwMDU3LDI2''@;'; put 'put ''OTQyMjA5M10pLmJ1ZmZlciwwLDM2KSxnT3Q9cl9lKCRhZSwwKSxLYWU9bmV3IHp1KG5ldyB2eihbMCwwLDAsMCwwLDAsMCwwLDE2ODQzMDA5LDUwNTI4NzcwLDExNzc2OTIyMCwxODUyMDcwNDgsMjUyNTc5MDg0LDE2XSkuYnVmZmVyLDAsNTMpLG1PdD1yX2UoS2FlLDMpLG9JPWZ1bmN0aW9u''@;'; put 'put ''KGMsbCxhKXt2YXIgZD1jLmxlbmd0aCxoPWwubGVuZ3RoLGY9Y1tkLTFdLHY9KDE8PGEuYiktMSxNPS1hLmI7Znx8YzAoMCk7Zm9yKHZhciBEPTAsVT1hLmIsdGU9KGQ8PDMpLTgrTXkoZiktVSxvZT0tMTt0ZT5NJiZvZTxoOyl7dmFyIHZlPXRlPj4zO2xbKytvZV09YS5zW0Q9KEQ8PFV8KGNb''@;'; put 'put ''dmVdfGNbdmUrMV08PDh8Y1t2ZSsyXTw8MTYpPj4oNyZ0ZSkpJnZdLHRlLT1VPWEubltEXX0odGUhPU18fG9lKzEhPWgpJiZjMCgwKX0sdk90PWZ1bmN0aW9uKGMsbCxhKXt2YXIgZD02LGY9bC5sZW5ndGgrMz4+Mix2PWY8PDEsTT1mK3Y7b0koYy5zdWJhcnJheShkLGQrPWNbMF18Y1sxXTw8''@;'; put 'put ''OCksbC5zdWJhcnJheSgwLGYpLGEpLG9JKGMuc3ViYXJyYXkoZCxkKz1jWzJdfGNbM108PDgpLGwuc3ViYXJyYXkoZix2KSxhKSxvSShjLnN1YmFycmF5KGQsZCs9Y1s0XXxjWzVdPDw4KSxsLnN1YmFycmF5KHYsTSksYSksb0koYy5zdWJhcnJheShkKSxsLnN1YmFycmF5KE0pLGEpfSx5T3Q9''@;'; put 'put ''ZnVuY3Rpb24oYyxsLGEpe3ZhciBkLGg9bC5iLGY9Y1toXSx2PWY+PjEmMztsLmw9MSZmO3ZhciBNPWY+PjN8Y1toKzFdPDw1fGNbaCsyXTw8MTMsRD0oaCs9MykrTTtpZigxPT12KXJldHVybiBoPj1jLmxlbmd0aD92b2lkIDA6KGwuYj1oKzEsYT8oaUkoYSxjW2hdLGwueSxsLnkrPU0pLGEp''@;'; put 'put ''OmlJKG5ldyB6dShNKSxjW2hdKSk7aWYoIShEPmMubGVuZ3RoKSl7aWYoMD09dilyZXR1cm4gbC5iPUQsYT8oYS5zZXQoYy5zdWJhcnJheShoLEQpLGwueSksbC55Kz1NLGEpOkdhZShjLGgsRCk7aWYoMj09dil7dmFyIFU9Y1toXSx0ZT0zJlUsb2U9VT4+MiYzLHZlPVU+PjQsd2U9MCxGZT0w''@;'; put 'put ''O3RlPDI/MSZvZT92ZXw9Y1srK2hdPDw0fCgyJm9lJiZjWysraF08PDEyKTp2ZT1VPj4zOihGZT1vZSxvZTwyPyh2ZXw9KDYzJmNbKytoXSk8PDQsd2U9Y1toXT4+NnxjWysraF08PDIpOjI9PW9lPyh2ZXw9Y1srK2hdPDw0fCgzJmNbKytoXSk8PDEyLHdlPWNbaF0+PjJ8Y1srK2hdPDw2KToo''@;'; put 'put ''dmV8PWNbKytoXTw8NHwoNjMmY1srK2hdKTw8MTIsd2U9Y1toXT4+NnxjWysraF08PDJ8Y1srK2hdPDwxMCkpLCsraDt2YXIgV2U9YT9hLnN1YmFycmF5KGwueSxsLnkrbC5tKTpuZXcgenUobC5tKSxudD1XZS5sZW5ndGgtdmU7aWYoMD09dGUpV2Uuc2V0KGMuc3ViYXJyYXkoaCxoKz12ZSks''@;'; put 'put ''bnQpO2Vsc2UgaWYoMT09dGUpaUkoV2UsY1toKytdLG50KTtlbHNle3ZhciBkdD1sLmg7aWYoMj09dGUpe3ZhciBtdD1mdW5jdGlvbihjLGwpe3ZhciBhPTAsZD0tMSxoPW5ldyB6dSgyOTIpLGY9Y1tsXSx2PWguc3ViYXJyYXkoMCwyNTYpLE09aC5zdWJhcnJheSgyNTYsMjY4KSxEPW5ldyBt''@;'; put 'put ''eihoLmJ1ZmZlciwyNjgpO2lmKGY8MTI4KXt2YXIgVT1hSShjLGwrMSw2KSxvZT1VWzFdLHZlPVVbMF08PDMsd2U9Y1tsKz1mXTt3ZXx8YzAoMCk7Zm9yKHZhciBGZT0wLFdlPTAsbnQ9b2UuYixkdD1udCxtdD0oKytsPDwzKS04K015KHdlKTshKChtdC09bnQpPHZlKTspe3ZhciAkdD1tdD4+''@;'; put 'put ''MztpZih2WysrZF09b2Uuc1tGZSs9KGNbJHRdfGNbJHQrMV08PDgpPj4oNyZtdCkmKDE8PG50KS0xXSwobXQtPWR0KTx2ZSlicmVhazt2WysrZF09b2Uuc1tXZSs9KGNbJHQ9bXQ+PjNdfGNbJHQrMV08PDgpPj4oNyZtdCkmKDE8PGR0KS0xXSxudD1vZS5uW0ZlXSxGZT1vZS50W0ZlXSxkdD1v''@;'; put 'put ''ZS5uW1dlXSxXZT1vZS50W1dlXX0rK2Q+MjU1JiZjMCgwKX1lbHNle2ZvcihkPWYtMTI3O2E8ZDthKz0yKXt2YXIgenQ9Y1srK2xdO3ZbYV09enQ+PjQsdlthKzFdPTE1Jnp0fSsrbH12YXIgeW49MDtmb3IoYT0wO2E8ZDsrK2EpKGduPXZbYV0pPjExJiZjMCgwKSx5bis9Z24mJjE8PGduLTE7''@;'; put 'put ''dmFyIHduPU15KHluKSsxLFJuPTE8PHduLERyPVJuLXluO2ZvcihEciZEci0xJiZjMCgwKSx2W2QrK109TXkoRHIpKzEsYT0wO2E8ZDsrK2Epe3ZhciBnbjsrK01bdlthXT0oZ249dlthXSkmJnduKzEtZ25dfXZhciBMcj1uZXcgenUoUm48PDEpLGRyPUxyLnN1YmFycmF5KDAsUm4pLE1yPUxy''@;'; put 'put ''LnN1YmFycmF5KFJuKTtmb3IoRFt3bl09MCxhPXduO2E+MDstLWEpe3ZhciB2aT1EW2FdO2lJKE1yLGEsdmksRFthLTFdPXZpK01bYV0qKDE8PHduLWEpKX1mb3IoRFswXSE9Um4mJmMwKDApLGE9MDthPGQ7KythKXt2YXIgTm49dlthXTtpZihObil7dmFyIEJyPURbTm5dO2lJKGRyLGEsQnIs''@;'; put 'put ''RFtObl09QnIrKDE8PHduLU5uKSl9fXJldHVybltsLHtuOk1yLGI6d24sczpkcn1dfShjLGgpO3dlKz1oLShoPW10WzBdKSxsLmg9ZHQ9bXRbMV19ZWxzZSBkdHx8YzAoMCk7KEZlP3ZPdDpvSSkoYy5zdWJhcnJheShoLGgrPXdlKSxXZS5zdWJhcnJheShudCksZHQpfXZhciAkdD1jW2grK107''@;'; put 'put ''aWYoJHQpezI1NT09JHQ/JHQ9MzI1MTIrKGNbaCsrXXxjW2grK108PDgpOiR0PjEyNyYmKCR0PSR0LTEyODw8OHxjW2grK10pO3ZhciB6dD1jW2grK107MyZ6dCYmYzAoMCk7Zm9yKHZhciB5bj1bZk90LHBPdCxoT3RdLGduPTI7Z24+LTE7LS1nbil7dmFyIHduPXp0Pj4yKyhnbjw8MSkmMztp''@;'; put 'put ''ZigxPT13bil7dmFyIFJuPW5ldyB6dShbMCwwLGNbaCsrXV0pO3luW2duXT17czpSbi5zdWJhcnJheSgyLDMpLG46Um4uc3ViYXJyYXkoMCwxKSx0Om5ldyBteihSbi5idWZmZXIsMCwxKSxiOjB9fWVsc2UgMj09d24/KGg9KGQ9YUkoYyxoLDktKDEmZ24pKSlbMF0seW5bZ25dPWRbMV0pOjM9''@;'; put 'put ''PXduJiYobC50fHxjMCgwKSx5bltnbl09bC50W2duXSl9dmFyIERyPWwudD15bixMcj1EclswXSxkcj1EclsxXSxNcj1EclsyXSx2aT1jW0QtMV07dml8fGMwKDApO3ZhciBObj0oRDw8MyktOCtNeSh2aSktTXIuYixCcj1Obj4+Myxlcj0wLFRyPShjW0JyXXxjW0JyKzFdPDw4KT4+KDcmTm4p''@;'; put 'put ''JigxPDxNci5iKS0xLCRyPShjW0JyPShObi09ZHIuYik+PjNdfGNbQnIrMV08PDgpPj4oNyZObikmKDE8PGRyLmIpLTEsYmk9KGNbQnI9KE5uLT1Mci5iKT4+M118Y1tCcisxXTw8OCk+Pig3Jk5uKSYoMTw8THIuYiktMTtmb3IoKyskdDstLSR0Oyl7dmFyIE5pPU1yLnNbVHJdLHZhPU1yLm5b''@;'; put 'put ''VHJdLHhhPUxyLnNbYmldLHBhPUxyLm5bYmldLFpyPWRyLnNbJHJdLHl0PWRyLm5bJHJdLE50PTE8PFpyLFF0PU50KygoY1tCcj0oTm4tPVpyKT4+M118Y1tCcisxXTw8OHxjW0JyKzJdPDwxNnxjW0JyKzNdPDwyNCk+Pj4oNyZObikmTnQtMSk7QnI9KE5uLT1LYWVbeGFdKT4+Mzt2YXIgTG49''@;'; put 'put ''bU90W3hhXSsoKGNbQnJdfGNbQnIrMV08PDh8Y1tCcisyXTw8MTYpPj4oNyZObikmKDE8PEthZVt4YV0pLTEpO0JyPShObi09JGFlW05pXSk+PjM7dmFyIGlyPWdPdFtOaV0rKChjW0JyXXxjW0JyKzFdPDw4fGNbQnIrMl08PDE2KT4+KDcmTm4pJigxPDwkYWVbTmldKS0xKTtpZihCcj0oTm4t''@;'; put 'put ''PXZhKT4+MyxUcj1Nci50W1RyXSsoKGNbQnJdfGNbQnIrMV08PDgpPj4oNyZObikmKDE8PHZhKS0xKSxCcj0oTm4tPXBhKT4+MyxiaT1Mci50W2JpXSsoKGNbQnJdfGNbQnIrMV08PDgpPj4oNyZObikmKDE8PHBhKS0xKSxCcj0oTm4tPXl0KT4+Mywkcj1kci50WyRyXSsoKGNbQnJdfGNbQnIr''@;'; put 'put ''MV08PDgpPj4oNyZObikmKDE8PHl0KS0xKSxRdD4zKWwub1syXT1sLm9bMV0sbC5vWzFdPWwub1swXSxsLm9bMF09UXQtPTM7ZWxzZXt2YXIgRXQ9UXQtKDAhPWlyKTtFdD8oUXQ9Mz09RXQ/bC5vWzBdLTE6bC5vW0V0XSxFdD4xJiYobC5vWzJdPWwub1sxXSksbC5vWzFdPWwub1swXSxsLm9b''@;'; put 'put ''MF09UXQpOlF0PWwub1swXX1mb3IoZ249MDtnbjxpcjsrK2duKVdlW2VyK2duXT1XZVtudCtnbl07bnQrPWlyO3ZhciBYdD0oZXIrPWlyKS1RdDtpZihYdDwwKXt2YXIgX249LVh0LFFuPWwuZStYdDtmb3IoX24+TG4mJihfbj1MbiksZ249MDtnbjxfbjsrK2duKVdlW2VyK2duXT1sLndbUW4r''@;'; put 'put ''Z25dO2VyKz1fbixMbi09X24sWHQ9MH1mb3IoZ249MDtnbjxMbjsrK2duKVdlW2VyK2duXT1XZVtYdCtnbl07ZXIrPUxufWlmKGVyIT1udClmb3IoO250PFdlLmxlbmd0aDspV2VbZXIrK109V2VbbnQrK107ZWxzZSBlcj1XZS5sZW5ndGg7YT9sLnkrPWVyOldlPUdhZShXZSwwLGVyKX1lbHNl''@;'; put 'put ''IGlmKGEpe2lmKGwueSs9dmUsbnQpZm9yKGduPTA7Z248dmU7KytnbilXZVtnbl09V2VbbnQrZ25dfWVsc2UgbnQmJihXZT1HYWUoV2UsbnQpKTtyZXR1cm4gbC5iPUQsV2V9YzAoMil9fTtmdW5jdGlvbiBYYWUoKXtyZXR1cm4gWGFlPWVlKGZ1bmN0aW9uKihjPXt9KXt2YXIgVSx3ZSxhPWMs''@;'; put 'put ''b2U9Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSx2ZT1jb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSksRmU9ITE7ZnVuY3Rpb24gbnQoemUsbHQpe3plfHxUcihsdCl9dmFyIG10LCR0LHp0LHluLGduLFJuLERyLGRyLCRyLEV0LFh0LE1yPSExO2Z1bmN0aW9uIHZpKCl7dmFyIHplPUx6LmJ1''@;'; put 'put ''ZmZlcjt6dD1uZXcgSW50OEFycmF5KHplKSxnbj1uZXcgSW50MTZBcnJheSh6ZSkseW49bmV3IFVpbnQ4QXJyYXkoemUpLG5ldyBVaW50MTZBcnJheSh6ZSksUm49bmV3IEludDMyQXJyYXkoemUpLERyPW5ldyBVaW50MzJBcnJheSh6ZSksbmV3IEZsb2F0MzJBcnJheSh6ZSksZHI9bmV3IEZs''@;'; put 'put ''b2F0NjRBcnJheSh6ZSl9ZnVuY3Rpb24gVHIoemUpe3ZlKHplPSJBYm9ydGVkKCIremUrIikiKSxGZT0hMCx6ZSs9Ii4gQnVpbGQgd2l0aCAtc0FTU0VSVElPTlMgZm9yIG1vcmUgaW5mby4iO3ZhciBsdD1uZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKHplKTt0aHJvdyAkdD8uKGx0KSxs''@;'; put 'put ''dH1mdW5jdGlvbiB4YSgpe3JldHVybih4YT1lZShmdW5jdGlvbiooemUpe2lmKCF3ZSl0cnl7dmFyIGx0PXlpZWxkIFUoemUpO3JldHVybiBuZXcgVWludDhBcnJheShsdCl9Y2F0Y2h7fXJldHVybiBmdW5jdGlvbiBOaSh6ZSl7aWYoemU9PSRyJiZ3ZSlyZXR1cm4gbmV3IFVpbnQ4QXJyYXko''@;'; put 'put ''d2UpO3Rocm93ImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkIn0oemUpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBacigpe3JldHVybiBacj1lZShmdW5jdGlvbiooemUsbHQpe3RyeXt2YXIgUHQ9eWllbGQgZnVuY3Rpb24gdmEoemUp''@;'; put 'put ''e3JldHVybiB4YS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KHplKTtyZXR1cm4geWllbGQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoUHQsbHQpfWNhdGNoKGtuKXt2ZShgZmFpbGVkIHRvIGFzeW5jaHJvbm91c2x5IHByZXBhcmUgd2FzbTogJHtrbn1gKSxUcihrbil9fSksWnIuYXBwbHkodGhp''@;'; put 'put ''cyxhcmd1bWVudHMpfWZ1bmN0aW9uIE50KCl7cmV0dXJuIE50PWVlKGZ1bmN0aW9uKih6ZSxsdCxQdCl7aWYoIXplJiYhKHplPT56ZS5zdGFydHNXaXRoKCJmaWxlOi8vIikpKGx0KSl0cnl7dmFyIHF0PWZldGNoKGx0LHtjcmVkZW50aWFsczoic2FtZS1vcmlnaW4ifSk7cmV0dXJuIHlpZWxk''@;'; put 'put ''IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKHF0LFB0KX1jYXRjaChjcil7dmUoYHdhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiAke2NyfWApLHZlKCJmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIgaW5zdGFudGlhdGlvbiIpfXJldHVybiBmdW5jdGlvbiBwYSh6ZSxs''@;'; put 'put ''dCl7cmV0dXJuIFpyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0obHQsUHQpfSksTnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGlyKCl7cmV0dXJuIGlyPWVlKGZ1bmN0aW9uKigpe3ZhciBQdD1mdW5jdGlvbiBRdCgpe3JldHVybnthOmNCdH19KCk7JHI/Pz0iIjt2YXIgcXQ9eWll''@;'; put 'put ''bGQgZnVuY3Rpb24geXQoemUsbHQsUHQpe3JldHVybiBOdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KHdlLCRyLFB0KTtyZXR1cm4gZnVuY3Rpb24gbHQoY3Ipe3JldHVybiBmdW5jdGlvbiB6ZShjcixBcil7cmV0dXJuIGZ1bmN0aW9uIGxCdCh6ZSl7YS5fd2ViaWRsX2ZyZWU9emUuQyxhLl9m''@;'; put 'put ''cmVlPXplLkQsYS5fd2ViaWRsX21hbGxvYz16ZS5FLGEuX21hbGxvYz16ZS5GLEVfZT1hLl9lbXNjcmlwdGVuX2JpbmRfVm9pZFB0cl9fX2Rlc3Ryb3lfX18wPXplLkcsVF9lPWEuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9HcmFwaHZpel8yPXplLkgsQV9lPWEuX2Vtc2NyaXB0ZW5fYmlu''@;'; put 'put ''ZF9HcmFwaHZpel92ZXJzaW9uXzA9emUuSSxrX2U9YS5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2xhc3RFcnJvcl8wPXplLkosRF9lPWEuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9jcmVhdGVGaWxlXzI9emUuSyxJX2U9YS5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2xheW91dF8z''@;'; put 'put ''PXplLkwsUl9lPWEuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9hY3ljbGljXzM9emUuTSxMX2U9YS5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3RyZWRfMz16ZS5OLE9fZT1hLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfdW5mbGF0dGVuXzQ9emUuTyxQX2U9YS5fZW1zY3JpcHRlbl9i''@;'; put 'put ''aW5kX0dyYXBodml6X2dldF9sYXlvdXRfcmVzdWx0XzA9emUuUCxGX2U9YS5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3NldF9sYXlvdXRfcmVzdWx0XzE9emUuUSxIX2U9YS5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2dldF9hY3ljbGljX291dEZpbGVfMD16ZS5SLE5fZT1hLl9lbXNj''@;'; put 'put ''cmlwdGVuX2JpbmRfR3JhcGh2aXpfc2V0X2FjeWNsaWNfb3V0RmlsZV8xPXplLlMsVl9lPWEuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfYWN5Y2xpY19udW1fcmV2XzA9emUuVCxCX2U9YS5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3NldF9hY3ljbGljX251bV9yZXZfMT16ZS5V''@;'; put 'put ''LGpfZT1hLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfZ2V0X3RyZWRfb3V0XzA9emUuVix6X2U9YS5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3NldF90cmVkX291dF8xPXplLlcsVV9lPWEuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfdHJlZF9lcnJfMD16ZS5YLFpfZT1hLl9l''@;'; put 'put ''bXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfc2V0X3RyZWRfZXJyXzE9emUuWSxXX2U9YS5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X19fZGVzdHJveV9fXzA9emUuWixZX2U9emUuXyxMej16ZS5BfShkST1jci5leHBvcnRzKSx2aSgpLGRJfShjci5pbnN0YW5jZSl9KHF0KX0pLGlyLmFwcGx5''@;'; put 'put ''KHRoaXMsYXJndW1lbnRzKX1jbGFzcyBfbntuYW1lPSJFeGl0U3RhdHVzIjtjb25zdHJ1Y3RvcihsdCl7dGhpcy5tZXNzYWdlPWBQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCBleGl0KCR7bHR9KWAsdGhpcy5zdGF0dXM9bHR9fWNsYXNzIFBue2NvbnN0cnVjdG9yKGx0KXt0aGlzLmV4Y1B0cj1s''@;'; put 'put ''dCx0aGlzLnB0cj1sdC0yNH1zZXRfdHlwZShsdCl7RHJbdGhpcy5wdHIrND4+Ml09bHR9Z2V0X3R5cGUoKXtyZXR1cm4gRHJbdGhpcy5wdHIrND4+Ml19c2V0X2Rlc3RydWN0b3IobHQpe0RyW3RoaXMucHRyKzg+PjJdPWx0fWdldF9kZXN0cnVjdG9yKCl7cmV0dXJuIERyW3RoaXMucHRyKzg+''@;'; put 'put ''PjJdfXNldF9jYXVnaHQobHQpe3p0W3RoaXMucHRyKzEyXT1sdD1sdD8xOjB9Z2V0X2NhdWdodCgpe3JldHVybiAwIT16dFt0aGlzLnB0cisxMl19c2V0X3JldGhyb3duKGx0KXt6dFt0aGlzLnB0cisxM109bHQ9bHQ/MTowfWdldF9yZXRocm93bigpe3JldHVybiAwIT16dFt0aGlzLnB0cisx''@;'; put 'put ''M119aW5pdChsdCxQdCl7dGhpcy5zZXRfYWRqdXN0ZWRfcHRyKDApLHRoaXMuc2V0X3R5cGUobHQpLHRoaXMuc2V0X2Rlc3RydWN0b3IoUHQpfXNldF9hZGp1c3RlZF9wdHIobHQpe0RyW3RoaXMucHRyKzE2Pj4yXT1sdH1nZXRfYWRqdXN0ZWRfcHRyKCl7cmV0dXJuIERyW3RoaXMucHRyKzE2''@;'; put 'put ''Pj4yXX19dmFyIHpuPXtpc0Ficzp6ZT0+Ii8iPT09emUuY2hhckF0KDApLHNwbGl0UGF0aDp6ZT0+L14oXC8/fCkoW1xzXFNdKj8pKCg/OlwuezEsMn18W15cL10rP3wpKFwuW14uXC9dKnwpKSg/OltcL10qKSQvLmV4ZWMoemUpLnNsaWNlKDEpLG5vcm1hbGl6ZUFycmF5Oih6ZSxsdCk9Pntm''@;'; put 'put ''b3IodmFyIFB0PTAscXQ9emUubGVuZ3RoLTE7cXQ+PTA7cXQtLSl7dmFyIGtuPXplW3F0XTsiLiI9PT1rbj96ZS5zcGxpY2UocXQsMSk6Ii4uIj09PWtuPyh6ZS5zcGxpY2UocXQsMSksUHQrKyk6UHQmJih6ZS5zcGxpY2UocXQsMSksUHQtLSl9aWYobHQpZm9yKDtQdDtQdC0tKXplLnVuc2hp''@;'; put 'put ''ZnQoIi4uIik7cmV0dXJuIHplfSxub3JtYWxpemU6emU9Pnt2YXIgbHQ9em4uaXNBYnMoemUpLFB0PSIvIj09PXplLnNsaWNlKC0xKTtyZXR1cm4hKHplPXpuLm5vcm1hbGl6ZUFycmF5KHplLnNwbGl0KCIvIikuZmlsdGVyKHF0PT4hIXF0KSwhbHQpLmpvaW4oIi8iKSkmJiFsdCYmKHplPSIu''@;'; put 'put ''IiksemUmJlB0JiYoemUrPSIvIiksKGx0PyIvIjoiIikremV9LGRpcm5hbWU6emU9Pnt2YXIgbHQ9em4uc3BsaXRQYXRoKHplKSxQdD1sdFswXSxxdD1sdFsxXTtyZXR1cm4gUHR8fHF0PyhxdCYmKHF0PXF0LnNsaWNlKDAsLTEpKSxQdCtxdCk6Ii4ifSxiYXNlbmFtZTp6ZT0+emUmJnplLm1h''@;'; put 'put ''dGNoKC8oW15cL10rfFwvKVwvKiQvKVsxXSxqb2luOiguLi56ZSk9PnpuLm5vcm1hbGl6ZSh6ZS5qb2luKCIvIikpLGpvaW4yOih6ZSxsdCk9PnpuLm5vcm1hbGl6ZSh6ZSsiLyIrbHQpfSxFcj16ZT0+eyhFcj16ZT0+Y3J5cHRvLmdldFJhbmRvbVZhbHVlcyh6ZSkpKHplKX0sdWk9e3Jlc29s''@;'; put 'put ''dmU6KC4uLnplKT0+e2Zvcih2YXIgbHQ9IiIsUHQ9ITEscXQ9emUubGVuZ3RoLTE7cXQ+PS0xJiYhUHQ7cXQtLSl7dmFyIGtuPXF0Pj0wP3plW3F0XTpLdC5jd2QoKTtpZigic3RyaW5nIiE9dHlwZW9mIGtuKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUg''@;'; put 'put ''bXVzdCBiZSBzdHJpbmdzIik7aWYoIWtuKXJldHVybiIiO2x0PWtuKyIvIitsdCxQdD16bi5pc0Ficyhrbil9cmV0dXJuKFB0PyIvIjoiIikrKGx0PXpuLm5vcm1hbGl6ZUFycmF5KGx0LnNwbGl0KCIvIikuZmlsdGVyKGNyPT4hIWNyKSwhUHQpLmpvaW4oIi8iKSl8fCIuIn0scmVsYXRpdmU6''@;'; put 'put ''KHplLGx0KT0+e2Z1bmN0aW9uIFB0KFJvKXtmb3IodmFyIEpzPTA7SnM8Um8ubGVuZ3RoJiYiIj09PVJvW0pzXTtKcysrKTtmb3IodmFyIE9zPVJvLmxlbmd0aC0xO09zPj0wJiYiIj09PVJvW09zXTtPcy0tKTtyZXR1cm4gSnM+T3M/W106Um8uc2xpY2UoSnMsT3MtSnMrMSl9emU9dWkucmVz''@;'; put 'put ''b2x2ZSh6ZSkuc2xpY2UoMSksbHQ9dWkucmVzb2x2ZShsdCkuc2xpY2UoMSk7Zm9yKHZhciBxdD1QdCh6ZS5zcGxpdCgiLyIpKSxrbj1QdChsdC5zcGxpdCgiLyIpKSxjcj1NYXRoLm1pbihxdC5sZW5ndGgsa24ubGVuZ3RoKSxBcj1jcixHcj0wO0dyPGNyO0dyKyspaWYocXRbR3JdIT09a25b''@;'; put 'put ''R3JdKXtBcj1HcjticmVha312YXIgZ2E9W107Zm9yKEdyPUFyO0dyPHF0Lmxlbmd0aDtHcisrKWdhLnB1c2goIi4uIik7cmV0dXJuKGdhPWdhLmNvbmNhdChrbi5zbGljZShBcikpKS5qb2luKCIvIil9fSxJYT1nbG9iYWxUaGlzLlRleHREZWNvZGVyJiZuZXcgVGV4dERlY29kZXIsbG89KHpl''@;'; put 'put ''LGx0PTAsUHQscXQpPT57dmFyIGtuPSgoemUsbHQsUHQscXQpPT57dmFyIGtuPWx0K1B0O2lmKHF0KXJldHVybiBrbjtmb3IoO3plW2x0XSYmIShsdD49a24pOykrK2x0O3JldHVybiBsdH0pKHplLGx0LFB0LHF0KTtpZihrbi1sdD4xNiYmemUuYnVmZmVyJiZJYSlyZXR1cm4gSWEuZGVjb2Rl''@;'; put 'put ''KHplLnN1YmFycmF5KGx0LGtuKSk7Zm9yKHZhciBjcj0iIjtsdDxrbjspe3ZhciBBcj16ZVtsdCsrXTtpZigxMjgmQXIpe3ZhciBHcj02MyZ6ZVtsdCsrXTtpZigxOTIhPSgyMjQmQXIpKXt2YXIgZ2E9NjMmemVbbHQrK107aWYoKEFyPTIyND09KDI0MCZBcik/KDE1JkFyKTw8MTJ8R3I8PDZ8''@;'; put 'put ''Z2E6KDcmQXIpPDwxOHxHcjw8MTJ8Z2E8PDZ8NjMmemVbbHQrK10pPDY1NTM2KWNyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKEFyKTtlbHNle3ZhciBSbz1Bci02NTUzNjtjcis9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxSbz4+MTAsNTYzMjB8MTAyMyZSbyl9fWVsc2UgY3IrPVN0cmluZy5m''@;'; put 'put ''cm9tQ2hhckNvZGUoKDMxJkFyKTw8NnxHcil9ZWxzZSBjcis9U3RyaW5nLmZyb21DaGFyQ29kZShBcil9cmV0dXJuIGNyfSx0cz1bXSx4cz16ZT0+e2Zvcih2YXIgbHQ9MCxQdD0wO1B0PHplLmxlbmd0aDsrK1B0KXt2YXIgcXQ9emUuY2hhckNvZGVBdChQdCk7cXQ8PTEyNz9sdCsrOnF0PD0y''@;'; put 'put ''MDQ3P2x0Kz0yOnF0Pj01NTI5NiYmcXQ8PTU3MzQzPyhsdCs9NCwrK1B0KTpsdCs9M31yZXR1cm4gbHR9LEVvPSh6ZSxsdCxQdCxxdCk9PntpZighKHF0PjApKXJldHVybiAwO2Zvcih2YXIga249UHQsY3I9UHQrcXQtMSxBcj0wO0FyPHplLmxlbmd0aDsrK0FyKXt2YXIgR3I9emUuY29kZVBv''@;'; put 'put ''aW50QXQoQXIpO2lmKEdyPD0xMjcpe2lmKFB0Pj1jcilicmVhaztsdFtQdCsrXT1Hcn1lbHNlIGlmKEdyPD0yMDQ3KXtpZihQdCsxPj1jcilicmVhaztsdFtQdCsrXT0xOTJ8R3I+PjYsbHRbUHQrK109MTI4fDYzJkdyfWVsc2UgaWYoR3I8PTY1NTM1KXtpZihQdCsyPj1jcilicmVhaztsdFtQ''@;'; put 'put ''dCsrXT0yMjR8R3I+PjEyLGx0W1B0KytdPTEyOHxHcj4+NiY2MyxsdFtQdCsrXT0xMjh8NjMmR3J9ZWxzZXtpZihQdCszPj1jcilicmVhaztsdFtQdCsrXT0yNDB8R3I+PjE4LGx0W1B0KytdPTEyOHxHcj4+MTImNjMsbHRbUHQrK109MTI4fEdyPj42JjYzLGx0W1B0KytdPTEyOHw2MyZHcixB''@;'; put 'put ''cisrfX1yZXR1cm4gbHRbUHRdPTAsUHQta259LHFvPSh6ZSxsdCxQdCk9Pnt2YXIgcXQ9UHQ+MD9QdDp4cyh6ZSkrMSxrbj1uZXcgQXJyYXkocXQpLGNyPUVvKHplLGtuLDAsa24ubGVuZ3RoKTtyZXR1cm4gbHQmJihrbi5sZW5ndGg9Y3IpLGtufSxFbD17dHR5czpbXSxpbml0KCl7fSxzaHV0''@;'; put 'put ''ZG93bigpe30scmVnaXN0ZXIoemUsbHQpe0VsLnR0eXNbemVdPXtpbnB1dDpbXSxvdXRwdXQ6W10sb3BzOmx0fSxLdC5yZWdpc3RlckRldmljZSh6ZSxFbC5zdHJlYW1fb3BzKX0sc3RyZWFtX29wczp7b3Blbih6ZSl7dmFyIGx0PUVsLnR0eXNbemUubm9kZS5yZGV2XTtpZighbHQpdGhyb3cg''@;'; put 'put ''bmV3IEt0LkVycm5vRXJyb3IoNDMpO3plLnR0eT1sdCx6ZS5zZWVrYWJsZT0hMX0sY2xvc2UoemUpe3plLnR0eS5vcHMuZnN5bmMoemUudHR5KX0sZnN5bmMoemUpe3plLnR0eS5vcHMuZnN5bmMoemUudHR5KX0scmVhZCh6ZSxsdCxQdCxxdCxrbil7aWYoIXplLnR0eXx8IXplLnR0eS5vcHMu''@;'; put 'put ''Z2V0X2NoYXIpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNjApO2Zvcih2YXIgY3I9MCxBcj0wO0FyPHF0O0FyKyspe3ZhciBHcjt0cnl7R3I9emUudHR5Lm9wcy5nZXRfY2hhcih6ZS50dHkpfWNhdGNoe3Rocm93IG5ldyBLdC5FcnJub0Vycm9yKDI5KX1pZih2b2lkIDA9PT1HciYmMD09PWNy''@;'; put 'put ''KXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDYpO2lmKG51bGw9PUdyKWJyZWFrO2NyKyssbHRbUHQrQXJdPUdyfXJldHVybiBjciYmKHplLm5vZGUuYXRpbWU9RGF0ZS5ub3coKSksY3J9LHdyaXRlKHplLGx0LFB0LHF0LGtuKXtpZighemUudHR5fHwhemUudHR5Lm9wcy5wdXRfY2hhcil0aHJv''@;'; put 'put ''dyBuZXcgS3QuRXJybm9FcnJvcig2MCk7dHJ5e2Zvcih2YXIgY3I9MDtjcjxxdDtjcisrKXplLnR0eS5vcHMucHV0X2NoYXIoemUudHR5LGx0W1B0K2NyXSl9Y2F0Y2h7dGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoMjkpfXJldHVybiBxdCYmKHplLm5vZGUubXRpbWU9emUubm9kZS5jdGltZT1E''@;'; put 'put ''YXRlLm5vdygpKSxjcn19LGRlZmF1bHRfdHR5X29wczp7Z2V0X2NoYXI6emU9PnRzLmxlbmd0aD90cy5zaGlmdCgpOm51bGwscHV0X2NoYXIoemUsbHQpe251bGw9PT1sdHx8MTA9PT1sdD8ob2UobG8oemUub3V0cHV0KSksemUub3V0cHV0PVtdKTowIT1sdCYmemUub3V0cHV0LnB1c2gobHQp''@;'; put 'put ''fSxmc3luYyh6ZSl7emUub3V0cHV0Py5sZW5ndGg+MCYmKG9lKGxvKHplLm91dHB1dCkpLHplLm91dHB1dD1bXSl9LGlvY3RsX3RjZ2V0czp6ZT0+KHtjX2lmbGFnOjI1ODU2LGNfb2ZsYWc6NSxjX2NmbGFnOjE5MSxjX2xmbGFnOjM1Mzg3LGNfY2M6WzMsMjgsMTI3LDIxLDQsMCwxLDAsMTcs''@;'; put 'put ''MTksMjYsMCwxOCwxNSwyMywyMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXX0pLGlvY3RsX3Rjc2V0czooemUsbHQsUHQpPT4wLGlvY3RsX3Rpb2Nnd2luc3o6emU9PlsyNCw4MF19LGRlZmF1bHRfdHR5MV9vcHM6e3B1dF9jaGFyKHplLGx0KXtudWxsPT09bHR8fDEwPT09bHQ/''@;'; put 'put ''KHZlKGxvKHplLm91dHB1dCkpLHplLm91dHB1dD1bXSk6MCE9bHQmJnplLm91dHB1dC5wdXNoKGx0KX0sZnN5bmMoemUpe3plLm91dHB1dD8ubGVuZ3RoPjAmJih2ZShsbyh6ZS5vdXRwdXQpKSx6ZS5vdXRwdXQ9W10pfX19LEoxPSh6ZSxsdCk9Pk1hdGguY2VpbCh6ZS9sdCkqbHQsUmM9emU9''@;'; put 'put ''Pnt6ZT1KMSh6ZSw2NTUzNik7dmFyIGx0PVlfZSg2NTUzNix6ZSk7cmV0dXJuIGx0JiYoKHplLGx0KT0+e3luLmZpbGwoMCx6ZSx6ZStsdCl9KShsdCx6ZSksbHR9LGdvPXtvcHNfdGFibGU6bnVsbCxtb3VudDp6ZT0+Z28uY3JlYXRlTm9kZShudWxsLCIvIiwxNjg5NSwwKSxjcmVhdGVOb2Rl''@;'; put 'put ''KHplLGx0LFB0LHF0KXtpZihLdC5pc0Jsa2RldihQdCl8fEt0LmlzRklGTyhQdCkpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNjMpO2dvLm9wc190YWJsZXx8PXtkaXI6e25vZGU6e2dldGF0dHI6Z28ubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOmdvLm5vZGVfb3BzLnNldGF0dHIsbG9va3Vw''@;'; put 'put ''OmdvLm5vZGVfb3BzLmxvb2t1cCxta25vZDpnby5ub2RlX29wcy5ta25vZCxyZW5hbWU6Z28ubm9kZV9vcHMucmVuYW1lLHVubGluazpnby5ub2RlX29wcy51bmxpbmsscm1kaXI6Z28ubm9kZV9vcHMucm1kaXIscmVhZGRpcjpnby5ub2RlX29wcy5yZWFkZGlyLHN5bWxpbms6Z28ubm9kZV9v''@;'; put 'put ''cHMuc3ltbGlua30sc3RyZWFtOntsbHNlZWs6Z28uc3RyZWFtX29wcy5sbHNlZWt9fSxmaWxlOntub2RlOntnZXRhdHRyOmdvLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjpnby5ub2RlX29wcy5zZXRhdHRyfSxzdHJlYW06e2xsc2Vlazpnby5zdHJlYW1fb3BzLmxsc2VlayxyZWFkOmdvLnN0''@;'; put 'put ''cmVhbV9vcHMucmVhZCx3cml0ZTpnby5zdHJlYW1fb3BzLndyaXRlLG1tYXA6Z28uc3RyZWFtX29wcy5tbWFwLG1zeW5jOmdvLnN0cmVhbV9vcHMubXN5bmN9fSxsaW5rOntub2RlOntnZXRhdHRyOmdvLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjpnby5ub2RlX29wcy5zZXRhdHRyLHJlYWRs''@;'; put 'put ''aW5rOmdvLm5vZGVfb3BzLnJlYWRsaW5rfSxzdHJlYW06e319LGNocmRldjp7bm9kZTp7Z2V0YXR0cjpnby5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6Z28ubm9kZV9vcHMuc2V0YXR0cn0sc3RyZWFtOkt0LmNocmRldl9zdHJlYW1fb3BzfX07dmFyIGtuPUt0LmNyZWF0ZU5vZGUoemUsbHQs''@;'; put 'put ''UHQscXQpO3JldHVybiBLdC5pc0Rpcihrbi5tb2RlKT8oa24ubm9kZV9vcHM9Z28ub3BzX3RhYmxlLmRpci5ub2RlLGtuLnN0cmVhbV9vcHM9Z28ub3BzX3RhYmxlLmRpci5zdHJlYW0sa24uY29udGVudHM9e30pOkt0LmlzRmlsZShrbi5tb2RlKT8oa24ubm9kZV9vcHM9Z28ub3BzX3RhYmxl''@;'; put 'put ''LmZpbGUubm9kZSxrbi5zdHJlYW1fb3BzPWdvLm9wc190YWJsZS5maWxlLnN0cmVhbSxrbi51c2VkQnl0ZXM9MCxrbi5jb250ZW50cz1udWxsKTpLdC5pc0xpbmsoa24ubW9kZSk/KGtuLm5vZGVfb3BzPWdvLm9wc190YWJsZS5saW5rLm5vZGUsa24uc3RyZWFtX29wcz1nby5vcHNfdGFibGUu''@;'; put 'put ''bGluay5zdHJlYW0pOkt0LmlzQ2hyZGV2KGtuLm1vZGUpJiYoa24ubm9kZV9vcHM9Z28ub3BzX3RhYmxlLmNocmRldi5ub2RlLGtuLnN0cmVhbV9vcHM9Z28ub3BzX3RhYmxlLmNocmRldi5zdHJlYW0pLGtuLmF0aW1lPWtuLm10aW1lPWtuLmN0aW1lPURhdGUubm93KCksemUmJih6ZS5jb250''@;'; put 'put ''ZW50c1tsdF09a24semUuYXRpbWU9emUubXRpbWU9emUuY3RpbWU9a24uYXRpbWUpLGtufSxnZXRGaWxlRGF0YUFzVHlwZWRBcnJheTp6ZT0+emUuY29udGVudHM/emUuY29udGVudHMuc3ViYXJyYXk/emUuY29udGVudHMuc3ViYXJyYXkoMCx6ZS51c2VkQnl0ZXMpOm5ldyBVaW50OEFycmF5''@;'; put 'put ''KHplLmNvbnRlbnRzKTpuZXcgVWludDhBcnJheSgwKSxleHBhbmRGaWxlU3RvcmFnZSh6ZSxsdCl7dmFyIFB0PXplLmNvbnRlbnRzP3plLmNvbnRlbnRzLmxlbmd0aDowO2lmKCEoUHQ+PWx0KSl7bHQ9TWF0aC5tYXgobHQsUHQqKFB0PDEwNDg1NzY/MjoxLjEyNSk+Pj4wKSwwIT1QdCYmKGx0''@;'; put 'put ''PU1hdGgubWF4KGx0LDI1NikpO3ZhciBrbj16ZS5jb250ZW50czt6ZS5jb250ZW50cz1uZXcgVWludDhBcnJheShsdCksemUudXNlZEJ5dGVzPjAmJnplLmNvbnRlbnRzLnNldChrbi5zdWJhcnJheSgwLHplLnVzZWRCeXRlcyksMCl9fSxyZXNpemVGaWxlU3RvcmFnZSh6ZSxsdCl7aWYoemUu''@;'; put 'put ''dXNlZEJ5dGVzIT1sdClpZigwPT1sdCl6ZS5jb250ZW50cz1udWxsLHplLnVzZWRCeXRlcz0wO2Vsc2V7dmFyIFB0PXplLmNvbnRlbnRzO3plLmNvbnRlbnRzPW5ldyBVaW50OEFycmF5KGx0KSxQdCYmemUuY29udGVudHMuc2V0KFB0LnN1YmFycmF5KDAsTWF0aC5taW4obHQsemUudXNlZEJ5''@;'; put 'put ''dGVzKSkpLHplLnVzZWRCeXRlcz1sdH19LG5vZGVfb3BzOntnZXRhdHRyKHplKXt2YXIgbHQ9e307cmV0dXJuIGx0LmRldj1LdC5pc0NocmRldih6ZS5tb2RlKT96ZS5pZDoxLGx0Lmlubz16ZS5pZCxsdC5tb2RlPXplLm1vZGUsbHQubmxpbms9MSxsdC51aWQ9MCxsdC5naWQ9MCxsdC5yZGV2''@;'; put 'put ''PXplLnJkZXYsbHQuc2l6ZT1LdC5pc0Rpcih6ZS5tb2RlKT80MDk2Okt0LmlzRmlsZSh6ZS5tb2RlKT96ZS51c2VkQnl0ZXM6S3QuaXNMaW5rKHplLm1vZGUpP3plLmxpbmsubGVuZ3RoOjAsbHQuYXRpbWU9bmV3IERhdGUoemUuYXRpbWUpLGx0Lm10aW1lPW5ldyBEYXRlKHplLm10aW1lKSxs''@;'; put 'put ''dC5jdGltZT1uZXcgRGF0ZSh6ZS5jdGltZSksbHQuYmxrc2l6ZT00MDk2LGx0LmJsb2Nrcz1NYXRoLmNlaWwobHQuc2l6ZS9sdC5ibGtzaXplKSxsdH0sc2V0YXR0cih6ZSxsdCl7Zm9yKGxldCBQdCBvZlsibW9kZSIsImF0aW1lIiwibXRpbWUiLCJjdGltZSJdKW51bGwhPWx0W1B0XSYmKHpl''@;'; put 'put ''W1B0XT1sdFtQdF0pO3ZvaWQgMCE9PWx0LnNpemUmJmdvLnJlc2l6ZUZpbGVTdG9yYWdlKHplLGx0LnNpemUpfSxsb29rdXAoemUsbHQpe3Rocm93IGdvLmRvZXNOb3RFeGlzdEVycm9yfHwoZ28uZG9lc05vdEV4aXN0RXJyb3I9bmV3IEt0LkVycm5vRXJyb3IoNDQpLGdvLmRvZXNOb3RFeGlz''@;'; put 'put ''dEVycm9yLnN0YWNrPSI8Z2VuZXJpYyBlcnJvciwgbm8gc3RhY2s+IiksZ28uZG9lc05vdEV4aXN0RXJyb3J9LG1rbm9kOih6ZSxsdCxQdCxxdCk9PmdvLmNyZWF0ZU5vZGUoemUsbHQsUHQscXQpLHJlbmFtZSh6ZSxsdCxQdCl7dmFyIHF0O3RyeXtxdD1LdC5sb29rdXBOb2RlKGx0LFB0KX1j''@;'; put 'put ''YXRjaHt9aWYocXQpe2lmKEt0LmlzRGlyKHplLm1vZGUpKWZvcih2YXIga24gaW4gcXQuY29udGVudHMpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNTUpO0t0Lmhhc2hSZW1vdmVOb2RlKHF0KX1kZWxldGUgemUucGFyZW50LmNvbnRlbnRzW3plLm5hbWVdLGx0LmNvbnRlbnRzW1B0XT16ZSx6''@;'; put 'put ''ZS5uYW1lPVB0LGx0LmN0aW1lPWx0Lm10aW1lPXplLnBhcmVudC5jdGltZT16ZS5wYXJlbnQubXRpbWU9RGF0ZS5ub3coKX0sdW5saW5rKHplLGx0KXtkZWxldGUgemUuY29udGVudHNbbHRdLHplLmN0aW1lPXplLm10aW1lPURhdGUubm93KCl9LHJtZGlyKHplLGx0KXt2YXIgUHQ9S3QubG9v''@;'; put 'put ''a3VwTm9kZSh6ZSxsdCk7Zm9yKHZhciBxdCBpbiBQdC5jb250ZW50cyl0aHJvdyBuZXcgS3QuRXJybm9FcnJvcig1NSk7ZGVsZXRlIHplLmNvbnRlbnRzW2x0XSx6ZS5jdGltZT16ZS5tdGltZT1EYXRlLm5vdygpfSxyZWFkZGlyOnplPT5bIi4iLCIuLiIsLi4uT2JqZWN0LmtleXMoemUuY29u''@;'; put 'put ''dGVudHMpXSxzeW1saW5rKHplLGx0LFB0KXt2YXIgcXQ9Z28uY3JlYXRlTm9kZSh6ZSxsdCw0MTQ3MSwwKTtyZXR1cm4gcXQubGluaz1QdCxxdH0scmVhZGxpbmsoemUpe2lmKCFLdC5pc0xpbmsoemUubW9kZSkpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoMjgpO3JldHVybiB6ZS5saW5rfX0s''@;'; put 'put ''c3RyZWFtX29wczp7cmVhZCh6ZSxsdCxQdCxxdCxrbil7dmFyIGNyPXplLm5vZGUuY29udGVudHM7aWYoa24+PXplLm5vZGUudXNlZEJ5dGVzKXJldHVybiAwO3ZhciBBcj1NYXRoLm1pbih6ZS5ub2RlLnVzZWRCeXRlcy1rbixxdCk7aWYoQXI+OCYmY3Iuc3ViYXJyYXkpbHQuc2V0KGNyLnN1''@;'; put 'put ''YmFycmF5KGtuLGtuK0FyKSxQdCk7ZWxzZSBmb3IodmFyIEdyPTA7R3I8QXI7R3IrKylsdFtQdCtHcl09Y3Jba24rR3JdO3JldHVybiBBcn0sd3JpdGUoemUsbHQsUHQscXQsa24sY3Ipe2lmKGx0LmJ1ZmZlcj09PXp0LmJ1ZmZlciYmKGNyPSExKSwhcXQpcmV0dXJuIDA7dmFyIEFyPXplLm5v''@;'; put 'put ''ZGU7aWYoQXIubXRpbWU9QXIuY3RpbWU9RGF0ZS5ub3coKSxsdC5zdWJhcnJheSYmKCFBci5jb250ZW50c3x8QXIuY29udGVudHMuc3ViYXJyYXkpKXtpZihjcilyZXR1cm4gQXIuY29udGVudHM9bHQuc3ViYXJyYXkoUHQsUHQrcXQpLEFyLnVzZWRCeXRlcz1xdCxxdDtpZigwPT09QXIudXNl''@;'; put 'put ''ZEJ5dGVzJiYwPT09a24pcmV0dXJuIEFyLmNvbnRlbnRzPWx0LnNsaWNlKFB0LFB0K3F0KSxBci51c2VkQnl0ZXM9cXQscXQ7aWYoa24rcXQ8PUFyLnVzZWRCeXRlcylyZXR1cm4gQXIuY29udGVudHMuc2V0KGx0LnN1YmFycmF5KFB0LFB0K3F0KSxrbikscXR9aWYoZ28uZXhwYW5kRmlsZVN0''@;'; put 'put ''b3JhZ2UoQXIsa24rcXQpLEFyLmNvbnRlbnRzLnN1YmFycmF5JiZsdC5zdWJhcnJheSlBci5jb250ZW50cy5zZXQobHQuc3ViYXJyYXkoUHQsUHQrcXQpLGtuKTtlbHNlIGZvcih2YXIgR3I9MDtHcjxxdDtHcisrKUFyLmNvbnRlbnRzW2tuK0dyXT1sdFtQdCtHcl07cmV0dXJuIEFyLnVzZWRC''@;'; put 'put ''eXRlcz1NYXRoLm1heChBci51c2VkQnl0ZXMsa24rcXQpLHF0fSxsbHNlZWsoemUsbHQsUHQpe3ZhciBxdD1sdDtpZigxPT09UHQ/cXQrPXplLnBvc2l0aW9uOjI9PT1QdCYmS3QuaXNGaWxlKHplLm5vZGUubW9kZSkmJihxdCs9emUubm9kZS51c2VkQnl0ZXMpLHF0PDApdGhyb3cgbmV3IEt0''@;'; put 'put ''LkVycm5vRXJyb3IoMjgpO3JldHVybiBxdH0sbW1hcCh6ZSxsdCxQdCxxdCxrbil7aWYoIUt0LmlzRmlsZSh6ZS5ub2RlLm1vZGUpKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDQzKTt2YXIgY3IsQXIsR3I9emUubm9kZS5jb250ZW50cztpZigyJmtufHwhR3J8fEdyLmJ1ZmZlciE9PXp0LmJ1''@;'; put 'put ''ZmZlcil7aWYoQXI9ITAsIShjcj1SYyhsdCkpKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDQ4KTtHciYmKChQdD4wfHxQdCtsdDxHci5sZW5ndGgpJiYoR3I9R3Iuc3ViYXJyYXk/R3Iuc3ViYXJyYXkoUHQsUHQrbHQpOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKEdyLFB0LFB0K2x0KSks''@;'; put 'put ''enQuc2V0KEdyLGNyKSl9ZWxzZSBBcj0hMSxjcj1Hci5ieXRlT2Zmc2V0O3JldHVybntwdHI6Y3IsYWxsb2NhdGVkOkFyfX0sbXN5bmM6KHplLGx0LFB0LHF0LGtuKT0+KGdvLnN0cmVhbV9vcHMud3JpdGUoemUsbHQsMCxxdCxQdCwhMSksMCl9fSxWbD0oemUsbHQpPT57dmFyIFB0PTA7cmV0''@;'; put 'put ''dXJuIHplJiYoUHR8PTM2NSksbHQmJihQdHw9MTQ2KSxQdH0sRHM9ZnVuY3Rpb24oKXt2YXIgemU9ZWUoZnVuY3Rpb24qKGx0KXt2YXIgUHQ9eWllbGQgVShsdCk7cmV0dXJuIG5ldyBVaW50OEFycmF5KFB0KX0pO3JldHVybiBmdW5jdGlvbihQdCl7cmV0dXJuIHplLmFwcGx5KHRoaXMsYXJn''@;'; put 'put ''dW1lbnRzKX19KCksUTE9MCxQaD1udWxsLHdTPVtdLENTPWZ1bmN0aW9uKCl7dmFyIHplPWVlKGZ1bmN0aW9uKihsdCxQdCl7Zm9yKHZhciBxdCBvZih0eXBlb2YgQnJvd3NlcjwidSImJkJyb3dzZXIuaW5pdCgpLHdTKSlpZihxdC5jYW5IYW5kbGUoUHQpKXJldHVybiBxdC5oYW5kbGUobHQs''@;'; put 'put ''UHQpO3JldHVybiBsdH0pO3JldHVybiBmdW5jdGlvbihQdCxxdCl7cmV0dXJuIHplLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksQXU9ZnVuY3Rpb24oKXt2YXIgemU9ZWUoZnVuY3Rpb24qKGx0LFB0LHF0LGtuLGNyLEFyLEdyLGdhKXt2YXIgUm89UHQ/dWkucmVzb2x2ZSh6bi5qb2luMihs''@;'; put 'put ''dCxQdCkpOmx0O1ExKys7dHJ5e3ZhciBPcz1xdDsic3RyaW5nIj09dHlwZW9mIHF0JiYoT3M9eWllbGQgRHMocXQpKSxPcz15aWVsZCBDUyhPcyxSbyksZ2E/LigpLEFyfHwoKC4uLnplKT0+e0t0LmNyZWF0ZURhdGFGaWxlKC4uLnplKX0pKGx0LFB0LE9zLGtuLGNyLEdyKX1maW5hbGx5eygo''@;'; put 'put ''KT0+e2lmKDA9PS0tUTEmJlBoKXt2YXIgbHQ9UGg7UGg9bnVsbCxsdCgpfX0pKCl9fSk7cmV0dXJuIGZ1bmN0aW9uKFB0LHF0LGtuLGNyLEFyLEdyLGdhLFJvKXtyZXR1cm4gemUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxLdD17cm9vdDpudWxsLG1vdW50czpbXSxkZXZpY2VzOnt9LHN0''@;'; put 'put ''cmVhbXM6W10sbmV4dElub2RlOjEsbmFtZVRhYmxlOm51bGwsY3VycmVudFBhdGg6Ii8iLGluaXRpYWxpemVkOiExLGlnbm9yZVBlcm1pc3Npb25zOiEwLGZpbGVzeXN0ZW1zOm51bGwsc3luY0ZTUmVxdWVzdHM6MCxFcnJub0Vycm9yOmNsYXNze25hbWU9IkVycm5vRXJyb3IiO2NvbnN0cnVj''@;'; put 'put ''dG9yKHplKXt0aGlzLmVycm5vPXplfX0sRlNTdHJlYW06Y2xhc3N7c2hhcmVkPXt9O2dldCBvYmplY3QoKXtyZXR1cm4gdGhpcy5ub2RlfXNldCBvYmplY3QoemUpe3RoaXMubm9kZT16ZX1nZXQgaXNSZWFkKCl7cmV0dXJuIDEhPSgyMDk3MTU1JnRoaXMuZmxhZ3MpfWdldCBpc1dyaXRlKCl7''@;'; put 'put ''cmV0dXJuISEoMjA5NzE1NSZ0aGlzLmZsYWdzKX1nZXQgaXNBcHBlbmQoKXtyZXR1cm4gMTAyNCZ0aGlzLmZsYWdzfWdldCBmbGFncygpe3JldHVybiB0aGlzLnNoYXJlZC5mbGFnc31zZXQgZmxhZ3MoemUpe3RoaXMuc2hhcmVkLmZsYWdzPXplfWdldCBwb3NpdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''LnNoYXJlZC5wb3NpdGlvbn1zZXQgcG9zaXRpb24oemUpe3RoaXMuc2hhcmVkLnBvc2l0aW9uPXplfX0sRlNOb2RlOmNsYXNze25vZGVfb3BzPXt9O3N0cmVhbV9vcHM9e307cmVhZE1vZGU9MzY1O3dyaXRlTW9kZT0xNDY7bW91bnRlZD1udWxsO2NvbnN0cnVjdG9yKHplLGx0LFB0LHF0KXt6''@;'; put 'put ''ZXx8KHplPXRoaXMpLHRoaXMucGFyZW50PXplLHRoaXMubW91bnQ9emUubW91bnQsdGhpcy5pZD1LdC5uZXh0SW5vZGUrKyx0aGlzLm5hbWU9bHQsdGhpcy5tb2RlPVB0LHRoaXMucmRldj1xdCx0aGlzLmF0aW1lPXRoaXMubXRpbWU9dGhpcy5jdGltZT1EYXRlLm5vdygpfWdldCByZWFkKCl7''@;'; put 'put ''cmV0dXJuKHRoaXMubW9kZSZ0aGlzLnJlYWRNb2RlKT09PXRoaXMucmVhZE1vZGV9c2V0IHJlYWQoemUpe3plP3RoaXMubW9kZXw9dGhpcy5yZWFkTW9kZTp0aGlzLm1vZGUmPX50aGlzLnJlYWRNb2RlfWdldCB3cml0ZSgpe3JldHVybih0aGlzLm1vZGUmdGhpcy53cml0ZU1vZGUpPT09dGhp''@;'; put 'put ''cy53cml0ZU1vZGV9c2V0IHdyaXRlKHplKXt6ZT90aGlzLm1vZGV8PXRoaXMud3JpdGVNb2RlOnRoaXMubW9kZSY9fnRoaXMud3JpdGVNb2RlfWdldCBpc0ZvbGRlcigpe3JldHVybiBLdC5pc0Rpcih0aGlzLm1vZGUpfWdldCBpc0RldmljZSgpe3JldHVybiBLdC5pc0NocmRldih0aGlzLm1v''@;'; put 'put ''ZGUpfX0sbG9va3VwUGF0aCh6ZSxsdD17fSl7aWYoIXplKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDQ0KTtsdC5mb2xsb3dfbW91bnQ/Pz0hMCx6bi5pc0Ficyh6ZSl8fCh6ZT1LdC5jd2QoKSsiLyIremUpO2U6Zm9yKHZhciBQdD0wO1B0PDQwO1B0Kyspe2Zvcih2YXIgcXQ9emUuc3BsaXQo''@;'; put 'put ''Ii8iKS5maWx0ZXIoUm89PiEhUm8pLGtuPUt0LnJvb3QsY3I9Ii8iLEFyPTA7QXI8cXQubGVuZ3RoO0FyKyspe3ZhciBHcj1Bcj09PXF0Lmxlbmd0aC0xO2lmKEdyJiZsdC5wYXJlbnQpYnJlYWs7aWYoIi4iIT09cXRbQXJdKXtpZigiLi4iPT09cXRbQXJdKXtpZihjcj16bi5kaXJuYW1lKGNy''@;'; put 'put ''KSxLdC5pc1Jvb3Qoa24pKXt6ZT1jcisiLyIrcXQuc2xpY2UoQXIrMSkuam9pbigiLyIpLFB0LS07Y29udGludWUgZX1rbj1rbi5wYXJlbnQ7Y29udGludWV9Y3I9em4uam9pbjIoY3IscXRbQXJdKTt0cnl7a249S3QubG9va3VwTm9kZShrbixxdFtBcl0pfWNhdGNoKFJvKXtpZig0ND09PVJv''@;'; put 'put ''Py5lcnJubyYmR3ImJmx0Lm5vZW50X29rYXkpcmV0dXJue3BhdGg6Y3J9O3Rocm93IFJvfWlmKEt0LmlzTW91bnRwb2ludChrbikmJighR3J8fGx0LmZvbGxvd19tb3VudCkmJihrbj1rbi5tb3VudGVkLnJvb3QpLEt0LmlzTGluayhrbi5tb2RlKSYmKCFHcnx8bHQuZm9sbG93KSl7aWYoIWtu''@;'; put 'put ''Lm5vZGVfb3BzLnJlYWRsaW5rKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDUyKTt2YXIgZ2E9a24ubm9kZV9vcHMucmVhZGxpbmsoa24pO3puLmlzQWJzKGdhKXx8KGdhPXpuLmRpcm5hbWUoY3IpKyIvIitnYSksemU9Z2ErIi8iK3F0LnNsaWNlKEFyKzEpLmpvaW4oIi8iKTtjb250aW51ZSBl''@;'; put 'put ''fX19cmV0dXJue3BhdGg6Y3Isbm9kZTprbn19dGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoMzIpfSxnZXRQYXRoKHplKXtmb3IodmFyIGx0Ozspe2lmKEt0LmlzUm9vdCh6ZSkpe3ZhciBQdD16ZS5tb3VudC5tb3VudHBvaW50O3JldHVybiBsdD8iLyIhPT1QdFtQdC5sZW5ndGgtMV0/YCR7UHR9''@;'; put 'put ''LyR7bHR9YDpQdCtsdDpQdH1sdD1sdD9gJHt6ZS5uYW1lfS8ke2x0fWA6emUubmFtZSx6ZT16ZS5wYXJlbnR9fSxoYXNoTmFtZSh6ZSxsdCl7Zm9yKHZhciBQdD0wLHF0PTA7cXQ8bHQubGVuZ3RoO3F0KyspUHQ9KFB0PDw1KS1QdCtsdC5jaGFyQ29kZUF0KHF0KXwwO3JldHVybih6ZStQdD4+''@;'; put 'put ''PjApJUt0Lm5hbWVUYWJsZS5sZW5ndGh9LGhhc2hBZGROb2RlKHplKXt2YXIgbHQ9S3QuaGFzaE5hbWUoemUucGFyZW50LmlkLHplLm5hbWUpO3plLm5hbWVfbmV4dD1LdC5uYW1lVGFibGVbbHRdLEt0Lm5hbWVUYWJsZVtsdF09emV9LGhhc2hSZW1vdmVOb2RlKHplKXt2YXIgbHQ9S3QuaGFz''@;'; put 'put ''aE5hbWUoemUucGFyZW50LmlkLHplLm5hbWUpO2lmKEt0Lm5hbWVUYWJsZVtsdF09PT16ZSlLdC5uYW1lVGFibGVbbHRdPXplLm5hbWVfbmV4dDtlbHNlIGZvcih2YXIgUHQ9S3QubmFtZVRhYmxlW2x0XTtQdDspe2lmKFB0Lm5hbWVfbmV4dD09PXplKXtQdC5uYW1lX25leHQ9emUubmFtZV9u''@;'; put 'put ''ZXh0O2JyZWFrfVB0PVB0Lm5hbWVfbmV4dH19LGxvb2t1cE5vZGUoemUsbHQpe3ZhciBQdD1LdC5tYXlMb29rdXAoemUpO2lmKFB0KXRocm93IG5ldyBLdC5FcnJub0Vycm9yKFB0KTtmb3IodmFyIHF0PUt0Lmhhc2hOYW1lKHplLmlkLGx0KSxrbj1LdC5uYW1lVGFibGVbcXRdO2tuO2tuPWtu''@;'; put 'put ''Lm5hbWVfbmV4dClpZihrbi5wYXJlbnQuaWQ9PT16ZS5pZCYma24ubmFtZT09PWx0KXJldHVybiBrbjtyZXR1cm4gS3QubG9va3VwKHplLGx0KX0sY3JlYXRlTm9kZSh6ZSxsdCxQdCxxdCl7dmFyIGtuPW5ldyBLdC5GU05vZGUoemUsbHQsUHQscXQpO3JldHVybiBLdC5oYXNoQWRkTm9kZShr''@;'; put 'put ''biksa259LGRlc3Ryb3lOb2RlKHplKXtLdC5oYXNoUmVtb3ZlTm9kZSh6ZSl9LGlzUm9vdDp6ZT0+emU9PT16ZS5wYXJlbnQsaXNNb3VudHBvaW50OnplPT4hIXplLm1vdW50ZWQsaXNGaWxlOnplPT4zMjc2OD09KDYxNDQwJnplKSxpc0Rpcjp6ZT0+MTYzODQ9PSg2MTQ0MCZ6ZSksaXNMaW5r''@;'; put 'put ''OnplPT40MDk2MD09KDYxNDQwJnplKSxpc0NocmRldjp6ZT0+ODE5Mj09KDYxNDQwJnplKSxpc0Jsa2Rldjp6ZT0+MjQ1NzY9PSg2MTQ0MCZ6ZSksaXNGSUZPOnplPT40MDk2PT0oNjE0NDAmemUpLGlzU29ja2V0OnplPT4hKDQ5MTUyJn56ZSksZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcoemUp''@;'; put 'put ''e3ZhciBsdD1bInIiLCJ3IiwicnciXVszJnplXTtyZXR1cm4gNTEyJnplJiYobHQrPSJ3IiksbHR9LG5vZGVQZXJtaXNzaW9uczooemUsbHQpPT5LdC5pZ25vcmVQZXJtaXNzaW9ucz8wOmx0LmluY2x1ZGVzKCJyIikmJiEoMjkyJnplLm1vZGUpfHxsdC5pbmNsdWRlcygidyIpJiYhKDE0NiZ6''@;'; put 'put ''ZS5tb2RlKXx8bHQuaW5jbHVkZXMoIngiKSYmISg3MyZ6ZS5tb2RlKT8yOjAsbWF5TG9va3VwOnplPT5LdC5pc0Rpcih6ZS5tb2RlKT9LdC5ub2RlUGVybWlzc2lvbnMoemUsIngiKXx8KHplLm5vZGVfb3BzLmxvb2t1cD8wOjIpOjU0LG1heUNyZWF0ZSh6ZSxsdCl7aWYoIUt0LmlzRGlyKHpl''@;'; put 'put ''Lm1vZGUpKXJldHVybiA1NDt0cnl7cmV0dXJuIEt0Lmxvb2t1cE5vZGUoemUsbHQpLDIwfWNhdGNoe31yZXR1cm4gS3Qubm9kZVBlcm1pc3Npb25zKHplLCJ3eCIpfSxtYXlEZWxldGUoemUsbHQsUHQpe3ZhciBxdDt0cnl7cXQ9S3QubG9va3VwTm9kZSh6ZSxsdCl9Y2F0Y2goY3Ipe3JldHVy''@;'; put 'put ''biBjci5lcnJub312YXIga249S3Qubm9kZVBlcm1pc3Npb25zKHplLCJ3eCIpO2lmKGtuKXJldHVybiBrbjtpZihQdCl7aWYoIUt0LmlzRGlyKHF0Lm1vZGUpKXJldHVybiA1NDtpZihLdC5pc1Jvb3QocXQpfHxLdC5nZXRQYXRoKHF0KT09PUt0LmN3ZCgpKXJldHVybiAxMH1lbHNlIGlmKEt0''@;'; put 'put ''LmlzRGlyKHF0Lm1vZGUpKXJldHVybiAzMTtyZXR1cm4gMH0sbWF5T3BlbjooemUsbHQpPT56ZT9LdC5pc0xpbmsoemUubW9kZSk/MzI6S3QuaXNEaXIoemUubW9kZSkmJigiciIhPT1LdC5mbGFnc1RvUGVybWlzc2lvblN0cmluZyhsdCl8fDU3NiZsdCk/MzE6S3Qubm9kZVBlcm1pc3Npb25z''@;'; put 'put ''KHplLEt0LmZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nKGx0KSk6NDQsY2hlY2tPcEV4aXN0cyh6ZSxsdCl7aWYoIXplKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKGx0KTtyZXR1cm4gemV9LE1BWF9PUEVOX0ZEUzo0MDk2LG5leHRmZCgpe2Zvcih2YXIgemU9MDt6ZTw9S3QuTUFYX09QRU5fRkRT''@;'; put 'put ''O3plKyspaWYoIUt0LnN0cmVhbXNbemVdKXJldHVybiB6ZTt0aHJvdyBuZXcgS3QuRXJybm9FcnJvcigzMyl9LGdldFN0cmVhbUNoZWNrZWQoemUpe3ZhciBsdD1LdC5nZXRTdHJlYW0oemUpO2lmKCFsdCl0aHJvdyBuZXcgS3QuRXJybm9FcnJvcig4KTtyZXR1cm4gbHR9LGdldFN0cmVhbTp6''@;'; put 'put ''ZT0+S3Quc3RyZWFtc1t6ZV0sY3JlYXRlU3RyZWFtOih6ZSxsdD0tMSk9Pih6ZT1PYmplY3QuYXNzaWduKG5ldyBLdC5GU1N0cmVhbSx6ZSksLTE9PWx0JiYobHQ9S3QubmV4dGZkKCkpLHplLmZkPWx0LEt0LnN0cmVhbXNbbHRdPXplLHplKSxjbG9zZVN0cmVhbSh6ZSl7S3Quc3RyZWFtc1t6''@;'; put 'put ''ZV09bnVsbH0sZHVwU3RyZWFtKHplLGx0PS0xKXt2YXIgUHQ9S3QuY3JlYXRlU3RyZWFtKHplLGx0KTtyZXR1cm4gUHQuc3RyZWFtX29wcz8uZHVwPy4oUHQpLFB0fSxkb1NldEF0dHIoemUsbHQsUHQpe3ZhciBxdD16ZT8uc3RyZWFtX29wcy5zZXRhdHRyLGtuPXF0P3plOmx0O3F0Pz89bHQu''@;'; put 'put ''bm9kZV9vcHMuc2V0YXR0cixLdC5jaGVja09wRXhpc3RzKHF0LDYzKSxxdChrbixQdCl9LGNocmRldl9zdHJlYW1fb3BzOntvcGVuKHplKXt2YXIgbHQ9S3QuZ2V0RGV2aWNlKHplLm5vZGUucmRldik7emUuc3RyZWFtX29wcz1sdC5zdHJlYW1fb3BzLHplLnN0cmVhbV9vcHMub3Blbj8uKHpl''@;'; put 'put ''KX0sbGxzZWVrKCl7dGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNzApfX0sbWFqb3I6emU9PnplPj44LG1pbm9yOnplPT4yNTUmemUsbWFrZWRldjooemUsbHQpPT56ZTw8OHxsdCxyZWdpc3RlckRldmljZSh6ZSxsdCl7S3QuZGV2aWNlc1t6ZV09e3N0cmVhbV9vcHM6bHR9fSxnZXREZXZpY2U6''@;'; put 'put ''emU9Pkt0LmRldmljZXNbemVdLGdldE1vdW50cyh6ZSl7Zm9yKHZhciBsdD1bXSxQdD1bemVdO1B0Lmxlbmd0aDspe3ZhciBxdD1QdC5wb3AoKTtsdC5wdXNoKHF0KSxQdC5wdXNoKC4uLnF0Lm1vdW50cyl9cmV0dXJuIGx0fSxzeW5jZnMoemUsbHQpeyJmdW5jdGlvbiI9PXR5cGVvZiB6ZSYm''@;'; put 'put ''KGx0PXplLHplPSExKSxLdC5zeW5jRlNSZXF1ZXN0cysrLEt0LnN5bmNGU1JlcXVlc3RzPjEmJnZlKGB3YXJuaW5nOiAke0t0LnN5bmNGU1JlcXVlc3RzfSBGUy5zeW5jZnMgb3BlcmF0aW9ucyBpbiBmbGlnaHQgYXQgb25jZSwgcHJvYmFibHkganVzdCBkb2luZyBleHRyYSB3b3JrYCk7dmFy''@;'; put 'put ''IFB0PUt0LmdldE1vdW50cyhLdC5yb290Lm1vdW50KSxxdD0wO2Z1bmN0aW9uIGtuKEdyKXtyZXR1cm4gS3Quc3luY0ZTUmVxdWVzdHMtLSxsdChHcil9ZnVuY3Rpb24gY3IoR3Ipe2lmKEdyKXJldHVybiBjci5lcnJvcmVkP3ZvaWQgMDooY3IuZXJyb3JlZD0hMCxrbihHcikpOysrcXQ+PVB0''@;'; put 'put ''Lmxlbmd0aCYma24obnVsbCl9Zm9yKHZhciBBciBvZiBQdClBci50eXBlLnN5bmNmcz9Bci50eXBlLnN5bmNmcyhBcix6ZSxjcik6Y3IobnVsbCl9LG1vdW50KHplLGx0LFB0KXt2YXIgY3IscXQ9Ii8iPT09UHQsa249IVB0O2lmKHF0JiZLdC5yb290KXRocm93IG5ldyBLdC5FcnJub0Vycm9y''@;'; put 'put ''KDEwKTtpZighcXQmJiFrbil7dmFyIEFyPUt0Lmxvb2t1cFBhdGgoUHQse2ZvbGxvd19tb3VudDohMX0pO2lmKFB0PUFyLnBhdGgsS3QuaXNNb3VudHBvaW50KGNyPUFyLm5vZGUpKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDEwKTtpZighS3QuaXNEaXIoY3IubW9kZSkpdGhyb3cgbmV3IEt0''@;'; put 'put ''LkVycm5vRXJyb3IoNTQpfXZhciBHcj17dHlwZTp6ZSxvcHRzOmx0LG1vdW50cG9pbnQ6UHQsbW91bnRzOltdfSxnYT16ZS5tb3VudChHcik7cmV0dXJuIGdhLm1vdW50PUdyLEdyLnJvb3Q9Z2EscXQ/S3Qucm9vdD1nYTpjciYmKGNyLm1vdW50ZWQ9R3IsY3IubW91bnQmJmNyLm1vdW50Lm1v''@;'; put 'put ''dW50cy5wdXNoKEdyKSksZ2F9LHVubW91bnQoemUpe3ZhciBsdD1LdC5sb29rdXBQYXRoKHplLHtmb2xsb3dfbW91bnQ6ITF9KTtpZighS3QuaXNNb3VudHBvaW50KGx0Lm5vZGUpKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDI4KTt2YXIgUHQ9bHQubm9kZSxxdD1QdC5tb3VudGVkLGtuPUt0''@;'; put 'put ''LmdldE1vdW50cyhxdCk7Zm9yKHZhcltjcixBcl1vZiBPYmplY3QuZW50cmllcyhLdC5uYW1lVGFibGUpKWZvcig7QXI7KXt2YXIgR3I9QXIubmFtZV9uZXh0O2tuLmluY2x1ZGVzKEFyLm1vdW50KSYmS3QuZGVzdHJveU5vZGUoQXIpLEFyPUdyfVB0Lm1vdW50ZWQ9bnVsbDt2YXIgZ2E9UHQu''@;'; put 'put ''bW91bnQubW91bnRzLmluZGV4T2YocXQpO1B0Lm1vdW50Lm1vdW50cy5zcGxpY2UoZ2EsMSl9LGxvb2t1cDooemUsbHQpPT56ZS5ub2RlX29wcy5sb29rdXAoemUsbHQpLG1rbm9kKHplLGx0LFB0KXt2YXIga249S3QubG9va3VwUGF0aCh6ZSx7cGFyZW50OiEwfSkubm9kZSxjcj16bi5iYXNl''@;'; put 'put ''bmFtZSh6ZSk7aWYoIWNyKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDI4KTtpZigiLiI9PT1jcnx8Ii4uIj09PWNyKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDIwKTt2YXIgQXI9S3QubWF5Q3JlYXRlKGtuLGNyKTtpZihBcil0aHJvdyBuZXcgS3QuRXJybm9FcnJvcihBcik7aWYoIWtuLm5v''@;'; put 'put ''ZGVfb3BzLm1rbm9kKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDYzKTtyZXR1cm4ga24ubm9kZV9vcHMubWtub2Qoa24sY3IsbHQsUHQpfSxzdGF0ZnM6emU9Pkt0LnN0YXRmc05vZGUoS3QubG9va3VwUGF0aCh6ZSx7Zm9sbG93OiEwfSkubm9kZSksc3RhdGZzU3RyZWFtOnplPT5LdC5zdGF0''@;'; put 'put ''ZnNOb2RlKHplLm5vZGUpLHN0YXRmc05vZGUoemUpe3ZhciBsdD17YnNpemU6NDA5NixmcnNpemU6NDA5NixibG9ja3M6MWU2LGJmcmVlOjVlNSxiYXZhaWw6NWU1LGZpbGVzOkt0Lm5leHRJbm9kZSxmZnJlZTpLdC5uZXh0SW5vZGUtMSxmc2lkOjQyLGZsYWdzOjIsbmFtZWxlbjoyNTV9O3Jl''@;'; put 'put ''dHVybiB6ZS5ub2RlX29wcy5zdGF0ZnMmJk9iamVjdC5hc3NpZ24obHQsemUubm9kZV9vcHMuc3RhdGZzKHplLm1vdW50Lm9wdHMucm9vdCkpLGx0fSxjcmVhdGU6KHplLGx0PTQzOCk9PihsdCY9NDA5NSxLdC5ta25vZCh6ZSxsdHw9MzI3NjgsMCkpLG1rZGlyOih6ZSxsdD01MTEpPT4obHQm''@;'; put 'put ''PTEwMjMsS3QubWtub2QoemUsbHR8PTE2Mzg0LDApKSxta2RpclRyZWUoemUsbHQpe3ZhciBQdD16ZS5zcGxpdCgiLyIpLHF0PSIiO2Zvcih2YXIga24gb2YgUHQpaWYoa24peyhxdHx8em4uaXNBYnMoemUpKSYmKHF0Kz0iLyIpLHF0Kz1rbjt0cnl7S3QubWtkaXIocXQsbHQpfWNhdGNoKGNy''@;'; put 'put ''KXtpZigyMCE9Y3IuZXJybm8pdGhyb3cgY3J9fX0sbWtkZXY6KHplLGx0LFB0KT0+KHR5cGVvZiBQdD4idSImJihQdD1sdCxsdD00MzgpLEt0Lm1rbm9kKHplLGx0fD04MTkyLFB0KSksc3ltbGluayh6ZSxsdCl7aWYoIXVpLnJlc29sdmUoemUpKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDQ0''@;'; put 'put ''KTt2YXIgcXQ9S3QubG9va3VwUGF0aChsdCx7cGFyZW50OiEwfSkubm9kZTtpZighcXQpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNDQpO3ZhciBrbj16bi5iYXNlbmFtZShsdCksY3I9S3QubWF5Q3JlYXRlKHF0LGtuKTtpZihjcil0aHJvdyBuZXcgS3QuRXJybm9FcnJvcihjcik7aWYoIXF0''@;'; put 'put ''Lm5vZGVfb3BzLnN5bWxpbmspdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNjMpO3JldHVybiBxdC5ub2RlX29wcy5zeW1saW5rKHF0LGtuLHplKX0scmVuYW1lKHplLGx0KXt2YXIgR3IsZ2EsUHQ9em4uZGlybmFtZSh6ZSkscXQ9em4uZGlybmFtZShsdCksa249em4uYmFzZW5hbWUoemUpLGNy''@;'; put 'put ''PXpuLmJhc2VuYW1lKGx0KTtpZihHcj1LdC5sb29rdXBQYXRoKHplLHtwYXJlbnQ6ITB9KS5ub2RlLGdhPUt0Lmxvb2t1cFBhdGgobHQse3BhcmVudDohMH0pLm5vZGUsIUdyfHwhZ2EpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNDQpO2lmKEdyLm1vdW50IT09Z2EubW91bnQpdGhyb3cgbmV3''@;'; put 'put ''IEt0LkVycm5vRXJyb3IoNzUpO3ZhciBPcyxSbz1LdC5sb29rdXBOb2RlKEdyLGtuKSxKcz11aS5yZWxhdGl2ZSh6ZSxxdCk7aWYoIi4iIT09SnMuY2hhckF0KDApKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDI4KTtpZigiLiIhPT0oSnM9dWkucmVsYXRpdmUobHQsUHQpKS5jaGFyQXQoMCkp''@;'; put 'put ''dGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNTUpO3RyeXtPcz1LdC5sb29rdXBOb2RlKGdhLGNyKX1jYXRjaHt9aWYoUm8hPT1Pcyl7dmFyIElvPUt0LmlzRGlyKFJvLm1vZGUpLGNzPUt0Lm1heURlbGV0ZShHcixrbixJbyk7aWYoY3MpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoY3MpO2lmKGNz''@;'; put 'put ''PU9zP0t0Lm1heURlbGV0ZShnYSxjcixJbyk6S3QubWF5Q3JlYXRlKGdhLGNyKSl0aHJvdyBuZXcgS3QuRXJybm9FcnJvcihjcyk7aWYoIUdyLm5vZGVfb3BzLnJlbmFtZSl0aHJvdyBuZXcgS3QuRXJybm9FcnJvcig2Myk7aWYoS3QuaXNNb3VudHBvaW50KFJvKXx8T3MmJkt0LmlzTW91bnRw''@;'; put 'put ''b2ludChPcykpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoMTApO2lmKGdhIT09R3ImJihjcz1LdC5ub2RlUGVybWlzc2lvbnMoR3IsInciKSkpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoY3MpO0t0Lmhhc2hSZW1vdmVOb2RlKFJvKTt0cnl7R3Iubm9kZV9vcHMucmVuYW1lKFJvLGdhLGNyKSxS''@;'; put 'put ''by5wYXJlbnQ9Z2F9Y2F0Y2godTApe3Rocm93IHUwfWZpbmFsbHl7S3QuaGFzaEFkZE5vZGUoUm8pfX19LHJtZGlyKHplKXt2YXIgUHQ9S3QubG9va3VwUGF0aCh6ZSx7cGFyZW50OiEwfSkubm9kZSxxdD16bi5iYXNlbmFtZSh6ZSksa249S3QubG9va3VwTm9kZShQdCxxdCksY3I9S3QubWF5''@;'; put 'put ''RGVsZXRlKFB0LHF0LCEwKTtpZihjcil0aHJvdyBuZXcgS3QuRXJybm9FcnJvcihjcik7aWYoIVB0Lm5vZGVfb3BzLnJtZGlyKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDYzKTtpZihLdC5pc01vdW50cG9pbnQoa24pKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDEwKTtQdC5ub2RlX29wcy5y''@;'; put 'put ''bWRpcihQdCxxdCksS3QuZGVzdHJveU5vZGUoa24pfSxyZWFkZGlyKHplKXt2YXIgUHQ9S3QubG9va3VwUGF0aCh6ZSx7Zm9sbG93OiEwfSkubm9kZTtyZXR1cm4gS3QuY2hlY2tPcEV4aXN0cyhQdC5ub2RlX29wcy5yZWFkZGlyLDU0KShQdCl9LHVubGluayh6ZSl7dmFyIFB0PUt0Lmxvb2t1''@;'; put 'put ''cFBhdGgoemUse3BhcmVudDohMH0pLm5vZGU7aWYoIVB0KXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDQ0KTt2YXIgcXQ9em4uYmFzZW5hbWUoemUpLGtuPUt0Lmxvb2t1cE5vZGUoUHQscXQpLGNyPUt0Lm1heURlbGV0ZShQdCxxdCwhMSk7aWYoY3IpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3Io''@;'; put 'put ''Y3IpO2lmKCFQdC5ub2RlX29wcy51bmxpbmspdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNjMpO2lmKEt0LmlzTW91bnRwb2ludChrbikpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoMTApO1B0Lm5vZGVfb3BzLnVubGluayhQdCxxdCksS3QuZGVzdHJveU5vZGUoa24pfSxyZWFkbGluayh6ZSl7''@;'; put 'put ''dmFyIFB0PUt0Lmxvb2t1cFBhdGgoemUpLm5vZGU7aWYoIVB0KXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDQ0KTtpZighUHQubm9kZV9vcHMucmVhZGxpbmspdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoMjgpO3JldHVybiBQdC5ub2RlX29wcy5yZWFkbGluayhQdCl9LHN0YXQoemUsbHQpe3Zh''@;'; put 'put ''ciBxdD1LdC5sb29rdXBQYXRoKHplLHtmb2xsb3c6IWx0fSkubm9kZTtyZXR1cm4gS3QuY2hlY2tPcEV4aXN0cyhxdC5ub2RlX29wcy5nZXRhdHRyLDYzKShxdCl9LGZzdGF0KHplKXt2YXIgbHQ9S3QuZ2V0U3RyZWFtQ2hlY2tlZCh6ZSksUHQ9bHQubm9kZSxxdD1sdC5zdHJlYW1fb3BzLmdl''@;'; put 'put ''dGF0dHIsa249cXQ/bHQ6UHQ7cmV0dXJuIHF0Pz89UHQubm9kZV9vcHMuZ2V0YXR0cixLdC5jaGVja09wRXhpc3RzKHF0LDYzKSxxdChrbil9LGxzdGF0OnplPT5LdC5zdGF0KHplLCEwKSxkb0NobW9kKHplLGx0LFB0LHF0KXtLdC5kb1NldEF0dHIoemUsbHQse21vZGU6NDA5NSZQdHwtNDA5''@;'; put 'put ''NiZsdC5tb2RlLGN0aW1lOkRhdGUubm93KCksZG9udEZvbGxvdzpxdH0pfSxjaG1vZCh6ZSxsdCxQdCl7dmFyIHF0O3F0PSJzdHJpbmciPT10eXBlb2YgemU/S3QubG9va3VwUGF0aCh6ZSx7Zm9sbG93OiFQdH0pLm5vZGU6emUsS3QuZG9DaG1vZChudWxsLHF0LGx0LFB0KX0sbGNobW9kKHpl''@;'; put 'put ''LGx0KXtLdC5jaG1vZCh6ZSxsdCwhMCl9LGZjaG1vZCh6ZSxsdCl7dmFyIFB0PUt0LmdldFN0cmVhbUNoZWNrZWQoemUpO0t0LmRvQ2htb2QoUHQsUHQubm9kZSxsdCwhMSl9LGRvQ2hvd24oemUsbHQsUHQpe0t0LmRvU2V0QXR0cih6ZSxsdCx7dGltZXN0YW1wOkRhdGUubm93KCksZG9udEZv''@;'; put 'put ''bGxvdzpQdH0pfSxjaG93bih6ZSxsdCxQdCxxdCl7dmFyIGtuO2tuPSJzdHJpbmciPT10eXBlb2YgemU/S3QubG9va3VwUGF0aCh6ZSx7Zm9sbG93OiFxdH0pLm5vZGU6emUsS3QuZG9DaG93bihudWxsLGtuLHF0KX0sbGNob3duKHplLGx0LFB0KXtLdC5jaG93bih6ZSxsdCxQdCwhMCl9LGZj''@;'; put 'put ''aG93bih6ZSxsdCxQdCl7dmFyIHF0PUt0LmdldFN0cmVhbUNoZWNrZWQoemUpO0t0LmRvQ2hvd24ocXQscXQubm9kZSwhMSl9LGRvVHJ1bmNhdGUoemUsbHQsUHQpe2lmKEt0LmlzRGlyKGx0Lm1vZGUpKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDMxKTtpZighS3QuaXNGaWxlKGx0Lm1vZGUp''@;'; put 'put ''KXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDI4KTt2YXIgcXQ9S3Qubm9kZVBlcm1pc3Npb25zKGx0LCJ3Iik7aWYocXQpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IocXQpO0t0LmRvU2V0QXR0cih6ZSxsdCx7c2l6ZTpQdCx0aW1lc3RhbXA6RGF0ZS5ub3coKX0pfSx0cnVuY2F0ZSh6ZSxsdCl7''@;'; put 'put ''aWYobHQ8MCl0aHJvdyBuZXcgS3QuRXJybm9FcnJvcigyOCk7dmFyIFB0O1B0PSJzdHJpbmciPT10eXBlb2YgemU/S3QubG9va3VwUGF0aCh6ZSx7Zm9sbG93OiEwfSkubm9kZTp6ZSxLdC5kb1RydW5jYXRlKG51bGwsUHQsbHQpfSxmdHJ1bmNhdGUoemUsbHQpe3ZhciBQdD1LdC5nZXRTdHJl''@;'; put 'put ''YW1DaGVja2VkKHplKTtpZihsdDwwfHwhKDIwOTcxNTUmUHQuZmxhZ3MpKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDI4KTtLdC5kb1RydW5jYXRlKFB0LFB0Lm5vZGUsbHQpfSx1dGltZSh6ZSxsdCxQdCl7dmFyIGtuPUt0Lmxvb2t1cFBhdGgoemUse2ZvbGxvdzohMH0pLm5vZGU7S3QuY2hl''@;'; put 'put ''Y2tPcEV4aXN0cyhrbi5ub2RlX29wcy5zZXRhdHRyLDYzKShrbix7YXRpbWU6bHQsbXRpbWU6UHR9KX0sb3Blbih6ZSxsdCxQdD00Mzgpe2lmKCIiPT09emUpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNDQpO3ZhciBxdCxrbjtpZihsdD0ic3RyaW5nIj09dHlwZW9mIGx0Pyh6ZT0+e3ZhciBQ''@;'; put 'put ''dD17cjowLCJyKyI6Mix3OjU3NywidysiOjU3OCxhOjEwODksImErIjoxMDkwfVt6ZV07aWYodHlwZW9mIFB0PiJ1Iil0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZmlsZSBvcGVuIG1vZGU6ICR7emV9YCk7cmV0dXJuIFB0fSkobHQpOmx0LFB0PTY0Jmx0PzQwOTUmUHR8MzI3Njg6MCwib2Jq''@;'; put 'put ''ZWN0Ij09dHlwZW9mIHplKXF0PXplO2Vsc2V7a249emUuZW5kc1dpdGgoIi8iKTt2YXIgY3I9S3QubG9va3VwUGF0aCh6ZSx7Zm9sbG93OiEoMTMxMDcyJmx0KSxub2VudF9va2F5OiEwfSk7cXQ9Y3Iubm9kZSx6ZT1jci5wYXRofXZhciBBcj0hMTtpZig2NCZsdClpZihxdCl7aWYoMTI4Jmx0''@;'; put 'put ''KXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDIwKX1lbHNle2lmKGtuKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDMxKTtxdD1LdC5ta25vZCh6ZSw1MTF8UHQsMCksQXI9ITB9aWYoIXF0KXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDQ0KTtpZihLdC5pc0NocmRldihxdC5tb2RlKSYmKGx0Jj0t''@;'; put 'put ''NTEzKSw2NTUzNiZsdCYmIUt0LmlzRGlyKHF0Lm1vZGUpKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDU0KTtpZighQXIpe3ZhciBHcj1LdC5tYXlPcGVuKHF0LGx0KTtpZihHcil0aHJvdyBuZXcgS3QuRXJybm9FcnJvcihHcil9NTEyJmx0JiYhQXImJkt0LnRydW5jYXRlKHF0LDApLGx0Jj0t''@;'; put 'put ''MTMxNzEzO3ZhciBnYT1LdC5jcmVhdGVTdHJlYW0oe25vZGU6cXQscGF0aDpLdC5nZXRQYXRoKHF0KSxmbGFnczpsdCxzZWVrYWJsZTohMCxwb3NpdGlvbjowLHN0cmVhbV9vcHM6cXQuc3RyZWFtX29wcyx1bmdvdHRlbjpbXSxlcnJvcjohMX0pO3JldHVybiBnYS5zdHJlYW1fb3BzLm9wZW4m''@;'; put 'put ''JmdhLnN0cmVhbV9vcHMub3BlbihnYSksQXImJkt0LmNobW9kKHF0LDUxMSZQdCksZ2F9LGNsb3NlKHplKXtpZihLdC5pc0Nsb3NlZCh6ZSkpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoOCk7emUuZ2V0ZGVudHMmJih6ZS5nZXRkZW50cz1udWxsKTt0cnl7emUuc3RyZWFtX29wcy5jbG9zZSYm''@;'; put 'put ''emUuc3RyZWFtX29wcy5jbG9zZSh6ZSl9Y2F0Y2gobHQpe3Rocm93IGx0fWZpbmFsbHl7S3QuY2xvc2VTdHJlYW0oemUuZmQpfXplLmZkPW51bGx9LGlzQ2xvc2VkOnplPT5udWxsPT09emUuZmQsbGxzZWVrKHplLGx0LFB0KXtpZihLdC5pc0Nsb3NlZCh6ZSkpdGhyb3cgbmV3IEt0LkVycm5v''@;'; put 'put ''RXJyb3IoOCk7aWYoIXplLnNlZWthYmxlfHwhemUuc3RyZWFtX29wcy5sbHNlZWspdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNzApO2lmKDAhPVB0JiYxIT1QdCYmMiE9UHQpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoMjgpO3JldHVybiB6ZS5wb3NpdGlvbj16ZS5zdHJlYW1fb3BzLmxsc2Vl''@;'; put 'put ''ayh6ZSxsdCxQdCksemUudW5nb3R0ZW49W10semUucG9zaXRpb259LHJlYWQoemUsbHQsUHQscXQsa24pe2lmKHF0PDB8fGtuPDApdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoMjgpO2lmKEt0LmlzQ2xvc2VkKHplKSl0aHJvdyBuZXcgS3QuRXJybm9FcnJvcig4KTtpZigxPT0oMjA5NzE1NSZ6''@;'; put 'put ''ZS5mbGFncykpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoOCk7aWYoS3QuaXNEaXIoemUubm9kZS5tb2RlKSl0aHJvdyBuZXcgS3QuRXJybm9FcnJvcigzMSk7aWYoIXplLnN0cmVhbV9vcHMucmVhZCl0aHJvdyBuZXcgS3QuRXJybm9FcnJvcigyOCk7dmFyIGNyPXR5cGVvZiBrbjwidSI7aWYo''@;'; put 'put ''Y3Ipe2lmKCF6ZS5zZWVrYWJsZSl0aHJvdyBuZXcgS3QuRXJybm9FcnJvcig3MCl9ZWxzZSBrbj16ZS5wb3NpdGlvbjt2YXIgQXI9emUuc3RyZWFtX29wcy5yZWFkKHplLGx0LFB0LHF0LGtuKTtyZXR1cm4gY3J8fCh6ZS5wb3NpdGlvbis9QXIpLEFyfSx3cml0ZSh6ZSxsdCxQdCxxdCxrbixj''@;'; put 'put ''cil7aWYocXQ8MHx8a248MCl0aHJvdyBuZXcgS3QuRXJybm9FcnJvcigyOCk7aWYoS3QuaXNDbG9zZWQoemUpKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDgpO2lmKCEoMjA5NzE1NSZ6ZS5mbGFncykpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoOCk7aWYoS3QuaXNEaXIoemUubm9kZS5tb2Rl''@;'; put 'put ''KSl0aHJvdyBuZXcgS3QuRXJybm9FcnJvcigzMSk7aWYoIXplLnN0cmVhbV9vcHMud3JpdGUpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoMjgpO3plLnNlZWthYmxlJiYxMDI0JnplLmZsYWdzJiZLdC5sbHNlZWsoemUsMCwyKTt2YXIgQXI9dHlwZW9mIGtuPCJ1IjtpZihBcil7aWYoIXplLnNl''@;'; put 'put ''ZWthYmxlKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDcwKX1lbHNlIGtuPXplLnBvc2l0aW9uO3ZhciBHcj16ZS5zdHJlYW1fb3BzLndyaXRlKHplLGx0LFB0LHF0LGtuLGNyKTtyZXR1cm4gQXJ8fCh6ZS5wb3NpdGlvbis9R3IpLEdyfSxtbWFwKHplLGx0LFB0LHF0LGtuKXtpZigyJnF0JiYh''@;'; put 'put ''KDIma24pJiYyIT0oMjA5NzE1NSZ6ZS5mbGFncykpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoMik7aWYoMT09KDIwOTcxNTUmemUuZmxhZ3MpKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDIpO2lmKCF6ZS5zdHJlYW1fb3BzLm1tYXApdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNDMpO2lmKCFs''@;'; put 'put ''dCl0aHJvdyBuZXcgS3QuRXJybm9FcnJvcigyOCk7cmV0dXJuIHplLnN0cmVhbV9vcHMubW1hcCh6ZSxsdCxQdCxxdCxrbil9LG1zeW5jOih6ZSxsdCxQdCxxdCxrbik9PnplLnN0cmVhbV9vcHMubXN5bmM/emUuc3RyZWFtX29wcy5tc3luYyh6ZSxsdCxQdCxxdCxrbik6MCxpb2N0bCh6ZSxs''@;'; put 'put ''dCxQdCl7aWYoIXplLnN0cmVhbV9vcHMuaW9jdGwpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNTkpO3JldHVybiB6ZS5zdHJlYW1fb3BzLmlvY3RsKHplLGx0LFB0KX0scmVhZEZpbGUoemUsbHQ9e30pe2x0LmZsYWdzPWx0LmZsYWdzfHwwLGx0LmVuY29kaW5nPWx0LmVuY29kaW5nfHwiYmlu''@;'; put 'put ''YXJ5IiwidXRmOCIhPT1sdC5lbmNvZGluZyYmImJpbmFyeSIhPT1sdC5lbmNvZGluZyYmVHIoYEludmFsaWQgZW5jb2RpbmcgdHlwZSAiJHtsdC5lbmNvZGluZ30iYCk7dmFyIFB0PUt0Lm9wZW4oemUsbHQuZmxhZ3MpLGtuPUt0LnN0YXQoemUpLnNpemUsY3I9bmV3IFVpbnQ4QXJyYXkoa24p''@;'; put 'put ''O3JldHVybiBLdC5yZWFkKFB0LGNyLDAsa24sMCksInV0ZjgiPT09bHQuZW5jb2RpbmcmJihjcj1sbyhjcikpLEt0LmNsb3NlKFB0KSxjcn0sd3JpdGVGaWxlKHplLGx0LFB0PXt9KXtQdC5mbGFncz1QdC5mbGFnc3x8NTc3O3ZhciBxdD1LdC5vcGVuKHplLFB0LmZsYWdzLFB0Lm1vZGUpOyJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgbHQmJihsdD1uZXcgVWludDhBcnJheShxbyhsdCwhMCkpKSxBcnJheUJ1ZmZlci5pc1ZpZXcobHQpP0t0LndyaXRlKHF0LGx0LDAsbHQuYnl0ZUxlbmd0aCx2b2lkIDAsUHQuY2FuT3duKTpUcigiVW5zdXBwb3J0ZWQgZGF0YSB0eXBlIiksS3QuY2xvc2UocXQpfSxj''@;'; put 'put ''d2Q6KCk9Pkt0LmN1cnJlbnRQYXRoLGNoZGlyKHplKXt2YXIgbHQ9S3QubG9va3VwUGF0aCh6ZSx7Zm9sbG93OiEwfSk7aWYobnVsbD09PWx0Lm5vZGUpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNDQpO2lmKCFLdC5pc0RpcihsdC5ub2RlLm1vZGUpKXRocm93IG5ldyBLdC5FcnJub0Vycm9y''@;'; put 'put ''KDU0KTt2YXIgUHQ9S3Qubm9kZVBlcm1pc3Npb25zKGx0Lm5vZGUsIngiKTtpZihQdCl0aHJvdyBuZXcgS3QuRXJybm9FcnJvcihQdCk7S3QuY3VycmVudFBhdGg9bHQucGF0aH0sY3JlYXRlRGVmYXVsdERpcmVjdG9yaWVzKCl7S3QubWtkaXIoIi90bXAiKSxLdC5ta2RpcigiL2hvbWUiKSxL''@;'; put 'put ''dC5ta2RpcigiL2hvbWUvd2ViX3VzZXIiKX0sY3JlYXRlRGVmYXVsdERldmljZXMoKXtLdC5ta2RpcigiL2RldiIpLEt0LnJlZ2lzdGVyRGV2aWNlKEt0Lm1ha2VkZXYoMSwzKSx7cmVhZDooKT0+MCx3cml0ZToocXQsa24sY3IsQXIsR3IpPT5BcixsbHNlZWs6KCk9PjB9KSxLdC5ta2Rldigi''@;'; put 'put ''L2Rldi9udWxsIixLdC5tYWtlZGV2KDEsMykpLEVsLnJlZ2lzdGVyKEt0Lm1ha2VkZXYoNSwwKSxFbC5kZWZhdWx0X3R0eV9vcHMpLEVsLnJlZ2lzdGVyKEt0Lm1ha2VkZXYoNiwwKSxFbC5kZWZhdWx0X3R0eTFfb3BzKSxLdC5ta2RldigiL2Rldi90dHkiLEt0Lm1ha2VkZXYoNSwwKSksS3Qu''@;'; put 'put ''bWtkZXYoIi9kZXYvdHR5MSIsS3QubWFrZWRldig2LDApKTt2YXIgemU9bmV3IFVpbnQ4QXJyYXkoMTAyNCksbHQ9MCxQdD0oKT0+KDA9PT1sdCYmKEVyKHplKSxsdD16ZS5ieXRlTGVuZ3RoKSx6ZVstLWx0XSk7S3QuY3JlYXRlRGV2aWNlKCIvZGV2IiwicmFuZG9tIixQdCksS3QuY3JlYXRl''@;'; put 'put ''RGV2aWNlKCIvZGV2IiwidXJhbmRvbSIsUHQpLEt0Lm1rZGlyKCIvZGV2L3NobSIpLEt0Lm1rZGlyKCIvZGV2L3NobS90bXAiKX0sY3JlYXRlU3BlY2lhbERpcmVjdG9yaWVzKCl7S3QubWtkaXIoIi9wcm9jIik7dmFyIHplPUt0Lm1rZGlyKCIvcHJvYy9zZWxmIik7S3QubWtkaXIoIi9wcm9j''@;'; put 'put ''L3NlbGYvZmQiKSxLdC5tb3VudCh7bW91bnQoKXt2YXIgbHQ9S3QuY3JlYXRlTm9kZSh6ZSwiZmQiLDE2ODk1LDczKTtyZXR1cm4gbHQuc3RyZWFtX29wcz17bGxzZWVrOmdvLnN0cmVhbV9vcHMubGxzZWVrfSxsdC5ub2RlX29wcz17bG9va3VwKFB0LHF0KXt2YXIga249K3F0LGNyPUt0Lmdl''@;'; put 'put ''dFN0cmVhbUNoZWNrZWQoa24pLEFyPXtwYXJlbnQ6bnVsbCxtb3VudDp7bW91bnRwb2ludDoiZmFrZSJ9LG5vZGVfb3BzOntyZWFkbGluazooKT0+Y3IucGF0aH0saWQ6a24rMX07cmV0dXJuIEFyLnBhcmVudD1BcixBcn0scmVhZGRpcjooKT0+QXJyYXkuZnJvbShLdC5zdHJlYW1zLmVudHJp''@;'; put 'put ''ZXMoKSkuZmlsdGVyKChbUHQscXRdKT0+cXQpLm1hcCgoW1B0LHF0XSk9PlB0LnRvU3RyaW5nKCkpfSxsdH19LHt9LCIvcHJvYy9zZWxmL2ZkIil9LGNyZWF0ZVN0YW5kYXJkU3RyZWFtcyh6ZSxsdCxQdCl7emU/S3QuY3JlYXRlRGV2aWNlKCIvZGV2Iiwic3RkaW4iLHplKTpLdC5zeW1saW5r''@;'; put 'put ''KCIvZGV2L3R0eSIsIi9kZXYvc3RkaW4iKSxsdD9LdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRvdXQiLG51bGwsbHQpOkt0LnN5bWxpbmsoIi9kZXYvdHR5IiwiL2Rldi9zdGRvdXQiKSxQdD9LdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRlcnIiLG51bGwsUHQpOkt0LnN5bWxpbmsoIi9k''@;'; put 'put ''ZXYvdHR5MSIsIi9kZXYvc3RkZXJyIiksS3Qub3BlbigiL2Rldi9zdGRpbiIsMCksS3Qub3BlbigiL2Rldi9zdGRvdXQiLDEpLEt0Lm9wZW4oIi9kZXYvc3RkZXJyIiwxKX0sc3RhdGljSW5pdCgpe0t0Lm5hbWVUYWJsZT1uZXcgQXJyYXkoNDA5NiksS3QubW91bnQoZ28se30sIi8iKSxLdC5j''@;'; put 'put ''cmVhdGVEZWZhdWx0RGlyZWN0b3JpZXMoKSxLdC5jcmVhdGVEZWZhdWx0RGV2aWNlcygpLEt0LmNyZWF0ZVNwZWNpYWxEaXJlY3RvcmllcygpLEt0LmZpbGVzeXN0ZW1zPXtNRU1GUzpnb319LGluaXQoemUsbHQsUHQpe0t0LmluaXRpYWxpemVkPSEwLEt0LmNyZWF0ZVN0YW5kYXJkU3RyZWFt''@;'; put 'put ''cyh6ZSxsdCxQdCl9LHF1aXQoKXtmb3IodmFyIHplIG9mKEt0LmluaXRpYWxpemVkPSExLEt0LnN0cmVhbXMpKXplJiZLdC5jbG9zZSh6ZSl9LGZpbmRPYmplY3QoemUsbHQpe3ZhciBQdD1LdC5hbmFseXplUGF0aCh6ZSxsdCk7cmV0dXJuIFB0LmV4aXN0cz9QdC5vYmplY3Q6bnVsbH0sYW5h''@;'; put 'put ''bHl6ZVBhdGgoemUsbHQpe3RyeXt6ZT0oUHQ9S3QubG9va3VwUGF0aCh6ZSx7Zm9sbG93OiFsdH0pKS5wYXRofWNhdGNoe312YXIgcXQ9e2lzUm9vdDohMSxleGlzdHM6ITEsZXJyb3I6MCxuYW1lOm51bGwscGF0aDpudWxsLG9iamVjdDpudWxsLHBhcmVudEV4aXN0czohMSxwYXJlbnRQYXRo''@;'; put 'put ''Om51bGwscGFyZW50T2JqZWN0Om51bGx9O3RyeXt2YXIgUHQ9S3QubG9va3VwUGF0aCh6ZSx7cGFyZW50OiEwfSk7cXQucGFyZW50RXhpc3RzPSEwLHF0LnBhcmVudFBhdGg9UHQucGF0aCxxdC5wYXJlbnRPYmplY3Q9UHQubm9kZSxxdC5uYW1lPXpuLmJhc2VuYW1lKHplKSxQdD1LdC5sb29r''@;'; put 'put ''dXBQYXRoKHplLHtmb2xsb3c6IWx0fSkscXQuZXhpc3RzPSEwLHF0LnBhdGg9UHQucGF0aCxxdC5vYmplY3Q9UHQubm9kZSxxdC5uYW1lPVB0Lm5vZGUubmFtZSxxdC5pc1Jvb3Q9Ii8iPT09UHQucGF0aH1jYXRjaChrbil7cXQuZXJyb3I9a24uZXJybm99cmV0dXJuIHF0fSxjcmVhdGVQYXRo''@;'; put 'put ''KHplLGx0LFB0LHF0KXt6ZT0ic3RyaW5nIj09dHlwZW9mIHplP3plOkt0LmdldFBhdGgoemUpO2Zvcih2YXIga249bHQuc3BsaXQoIi8iKS5yZXZlcnNlKCk7a24ubGVuZ3RoOyl7dmFyIGNyPWtuLnBvcCgpO2lmKGNyKXt2YXIgQXI9em4uam9pbjIoemUsY3IpO3RyeXtLdC5ta2RpcihBcil9''@;'; put 'put ''Y2F0Y2goR3Ipe2lmKDIwIT1Hci5lcnJubyl0aHJvdyBHcn16ZT1Bcn19cmV0dXJuIEFyfSxjcmVhdGVGaWxlKHplLGx0LFB0LHF0LGtuKXt2YXIgY3I9em4uam9pbjIoInN0cmluZyI9PXR5cGVvZiB6ZT96ZTpLdC5nZXRQYXRoKHplKSxsdCksQXI9VmwocXQsa24pO3JldHVybiBLdC5jcmVh''@;'; put 'put ''dGUoY3IsQXIpfSxjcmVhdGVEYXRhRmlsZSh6ZSxsdCxQdCxxdCxrbixjcil7dmFyIEFyPWx0O3plJiYoemU9InN0cmluZyI9PXR5cGVvZiB6ZT96ZTpLdC5nZXRQYXRoKHplKSxBcj1sdD96bi5qb2luMih6ZSxsdCk6emUpO3ZhciBHcj1WbChxdCxrbiksZ2E9S3QuY3JlYXRlKEFyLEdyKTtp''@;'; put 'put ''ZihQdCl7aWYoInN0cmluZyI9PXR5cGVvZiBQdCl7Zm9yKHZhciBSbz1uZXcgQXJyYXkoUHQubGVuZ3RoKSxKcz0wLE9zPVB0Lmxlbmd0aDtKczxPczsrK0pzKVJvW0pzXT1QdC5jaGFyQ29kZUF0KEpzKTtQdD1Sb31LdC5jaG1vZChnYSwxNDZ8R3IpO3ZhciBJbz1LdC5vcGVuKGdhLDU3Nyk7''@;'; put 'put ''S3Qud3JpdGUoSW8sUHQsMCxQdC5sZW5ndGgsMCxjciksS3QuY2xvc2UoSW8pLEt0LmNobW9kKGdhLEdyKX19LGNyZWF0ZURldmljZSh6ZSxsdCxQdCxxdCl7dmFyIGtuPXpuLmpvaW4yKCJzdHJpbmciPT10eXBlb2YgemU/emU6S3QuZ2V0UGF0aCh6ZSksbHQpLGNyPVZsKCEhUHQsISFxdCk7''@;'; put 'put ''S3QuY3JlYXRlRGV2aWNlLm1ham9yPz89NjQ7dmFyIEFyPUt0Lm1ha2VkZXYoS3QuY3JlYXRlRGV2aWNlLm1ham9yKyssMCk7cmV0dXJuIEt0LnJlZ2lzdGVyRGV2aWNlKEFyLHtvcGVuKEdyKXtHci5zZWVrYWJsZT0hMX0sY2xvc2UoR3Ipe3F0Py5idWZmZXI/Lmxlbmd0aCYmcXQoMTApfSxy''@;'; put 'put ''ZWFkKEdyLGdhLFJvLEpzLE9zKXtmb3IodmFyIElvPTAsY3M9MDtjczxKcztjcysrKXt2YXIgdTA7dHJ5e3UwPVB0KCl9Y2F0Y2h7dGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoMjkpfWlmKHZvaWQgMD09PXUwJiYwPT09SW8pdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNik7aWYobnVsbD09dTAp''@;'; put 'put ''YnJlYWs7SW8rKyxnYVtSbytjc109dTB9cmV0dXJuIElvJiYoR3Iubm9kZS5hdGltZT1EYXRlLm5vdygpKSxJb30sd3JpdGUoR3IsZ2EsUm8sSnMsT3Mpe2Zvcih2YXIgSW89MDtJbzxKcztJbysrKXRyeXtxdChnYVtSbytJb10pfWNhdGNoe3Rocm93IG5ldyBLdC5FcnJub0Vycm9yKDI5KX1y''@;'; put 'put ''ZXR1cm4gSnMmJihHci5ub2RlLm10aW1lPUdyLm5vZGUuY3RpbWU9RGF0ZS5ub3coKSksSW99fSksS3QubWtkZXYoa24sY3IsQXIpfSxmb3JjZUxvYWRGaWxlKHplKXtpZih6ZS5pc0RldmljZXx8emUuaXNGb2xkZXJ8fHplLmxpbmt8fHplLmNvbnRlbnRzKXJldHVybiEwO2lmKGdsb2JhbFRo''@;'; put 'put ''aXMuWE1MSHR0cFJlcXVlc3QpVHIoIkxhenkgbG9hZGluZyBzaG91bGQgaGF2ZSBiZWVuIHBlcmZvcm1lZCAoY29udGVudHMgc2V0KSBpbiBjcmVhdGVMYXp5RmlsZSwgYnV0IGl0IHdhcyBub3QuIExhenkgbG9hZGluZyBvbmx5IHdvcmtzIGluIHdlYiB3b3JrZXJzLiBVc2UgLS1lbWJlZC1m''@;'; put 'put ''aWxlIG9yIC0tcHJlbG9hZC1maWxlIGluIGVtY2Mgb24gdGhlIG1haW4gdGhyZWFkLiIpO2Vsc2UgdHJ5e3plLmNvbnRlbnRzPXVuZGVmaW5lZCh6ZS51cmwpfWNhdGNoe3Rocm93IG5ldyBLdC5FcnJub0Vycm9yKDI5KX19LGNyZWF0ZUxhenlGaWxlKHplLGx0LFB0LHF0LGtuKXtjbGFzcyBj''@;'; put 'put ''cntsZW5ndGhLbm93bj0hMTtjaHVua3M9W107Z2V0KElvKXtpZighKElvPnRoaXMubGVuZ3RoLTF8fElvPDApKXt2YXIgY3M9SW8ldGhpcy5jaHVua1NpemU7cmV0dXJuIHRoaXMuZ2V0dGVyKElvL3RoaXMuY2h1bmtTaXplfDApW2NzXX19c2V0RGF0YUdldHRlcihJbyl7dGhpcy5nZXR0ZXI9''@;'; put 'put ''SW99Y2FjaGVMZW5ndGgoKXt2YXIgSW89bmV3IFhNTEh0dHBSZXF1ZXN0O0lvLm9wZW4oIkhFQUQiLFB0LCExKSxJby5zZW5kKG51bGwpLElvLnN0YXR1cz49MjAwJiZJby5zdGF0dXM8MzAwfHwzMDQ9PT1Jby5zdGF0dXN8fFRyKCJDb3VsZG4ndCBsb2FkICIrUHQrIi4gU3RhdHVzOiAiK0lv''@;'; put 'put ''LnN0YXR1cyk7dmFyIHUwLGNzPU51bWJlcihJby5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1sZW5ndGgiKSksYzM9KHUwPUlvLmdldFJlc3BvbnNlSGVhZGVyKCJBY2NlcHQtUmFuZ2VzIikpJiYiYnl0ZXMiPT09dTAsWTI9KHUwPUlvLmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LUVu''@;'; put 'put ''Y29kaW5nIikpJiYiZ3ppcCI9PT11MCxHMj0xMDQ4NTc2O2MzfHwoRzI9Y3MpO3ZhciBoST10aGlzO2hJLnNldERhdGFHZXR0ZXIobWc9Pnt2YXIgTVM9bWcqRzIsbTE9KG1nKzEpKkcyLTE7cmV0dXJuIG0xPU1hdGgubWluKG0xLGNzLTEpLHR5cGVvZiBoSS5jaHVua3NbbWddPiJ1IiYmKGhJ''@;'; put 'put ''LmNodW5rc1ttZ109KChtZyxNUyk9PnttZz5NUyYmVHIoImludmFsaWQgcmFuZ2UgKCIrbWcrIiwgIitNUysiKSBvciBubyBieXRlcyByZXF1ZXN0ZWQhIiksTVM+Y3MtMSYmVHIoIm9ubHkgIitjcysiIGJ5dGVzIGF2YWlsYWJsZSEgcHJvZ3JhbW1lciBlcnJvciEiKTt2YXIgbTE9bmV3IFhN''@;'; put 'put ''TEh0dHBSZXF1ZXN0O3JldHVybiBtMS5vcGVuKCJHRVQiLFB0LCExKSxjcyE9PUcyJiZtMS5zZXRSZXF1ZXN0SGVhZGVyKCJSYW5nZSIsImJ5dGVzPSIrbWcrIi0iK01TKSxtMS5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIixtMS5vdmVycmlkZU1pbWVUeXBlJiZtMS5vdmVycmlkZU1pbWVU''@;'; put 'put ''eXBlKCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXgtdXNlci1kZWZpbmVkIiksbTEuc2VuZChudWxsKSxtMS5zdGF0dXM+PTIwMCYmbTEuc3RhdHVzPDMwMHx8MzA0PT09bTEuc3RhdHVzfHxUcigiQ291bGRuJ3QgbG9hZCAiK1B0KyIuIFN0YXR1czogIittMS5zdGF0dXMpLHZvaWQgMCE9PW0xLnJl''@;'; put 'put ''c3BvbnNlP25ldyBVaW50OEFycmF5KG0xLnJlc3BvbnNlfHxbXSk6cW8obTEucmVzcG9uc2VUZXh0fHwiIiwhMCl9KShNUyxtMSkpLHR5cGVvZiBoSS5jaHVua3NbbWddPiJ1IiYmVHIoImRvWEhSIGZhaWxlZCEiKSxoSS5jaHVua3NbbWddfSksKFkyfHwhY3MpJiYoRzI9Y3M9MSxjcz10aGlz''@;'; put 'put ''LmdldHRlcigwKS5sZW5ndGgsRzI9Y3Msb2UoIkxhenlGaWxlcyBvbiBnemlwIGZvcmNlcyBkb3dubG9hZCBvZiB0aGUgd2hvbGUgZmlsZSB3aGVuIGxlbmd0aCBpcyBhY2Nlc3NlZCIpKSx0aGlzLl9sZW5ndGg9Y3MsdGhpcy5fY2h1bmtTaXplPUcyLHRoaXMubGVuZ3RoS25vd249ITB9Z2V0''@;'; put 'put ''IGxlbmd0aCgpe3JldHVybiB0aGlzLmxlbmd0aEtub3dufHx0aGlzLmNhY2hlTGVuZ3RoKCksdGhpcy5fbGVuZ3RofWdldCBjaHVua1NpemUoKXtyZXR1cm4gdGhpcy5sZW5ndGhLbm93bnx8dGhpcy5jYWNoZUxlbmd0aCgpLHRoaXMuX2NodW5rU2l6ZX19aWYoZ2xvYmFsVGhpcy5YTUxIdHRw''@;'; put 'put ''UmVxdWVzdCl7VHIoIkNhbm5vdCBkbyBzeW5jaHJvbm91cyBiaW5hcnkgWEhScyBvdXRzaWRlIHdlYndvcmtlcnMgaW4gbW9kZXJuIGJyb3dzZXJzLiBVc2UgLS1lbWJlZC1maWxlIG9yIC0tcHJlbG9hZC1maWxlIGluIGVtY2MiKTt2YXIgR3I9e2lzRGV2aWNlOiExLGNvbnRlbnRzOm5ldyBj''@;'; put 'put ''cn19ZWxzZSBHcj17aXNEZXZpY2U6ITEsdXJsOlB0fTt2YXIgZ2E9S3QuY3JlYXRlRmlsZSh6ZSxsdCxHcixxdCxrbik7R3IuY29udGVudHM/Z2EuY29udGVudHM9R3IuY29udGVudHM6R3IudXJsJiYoZ2EuY29udGVudHM9bnVsbCxnYS51cmw9R3IudXJsKSxPYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dGllcyhnYSx7dXNlZEJ5dGVzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250ZW50cy5sZW5ndGh9fX0pO3ZhciBSbz17fTtmb3IobGV0W09zLElvXW9mIE9iamVjdC5lbnRyaWVzKGdhLnN0cmVhbV9vcHMpKVJvW09zXT0oLi4uY3MpPT4oS3QuZm9yY2VMb2FkRmlsZShnYSksSW8o''@;'; put 'put ''Li4uY3MpKTtmdW5jdGlvbiBKcyhPcyxJbyxjcyx1MCxjMyl7dmFyIFkyPU9zLm5vZGUuY29udGVudHM7aWYoYzM+PVkyLmxlbmd0aClyZXR1cm4gMDt2YXIgRzI9TWF0aC5taW4oWTIubGVuZ3RoLWMzLHUwKTtpZihZMi5zbGljZSlmb3IodmFyIF9wPTA7X3A8RzI7X3ArKylJb1tjcytfcF09''@;'; put 'put ''WTJbYzMrX3BdO2Vsc2UgZm9yKF9wPTA7X3A8RzI7X3ArKylJb1tjcytfcF09WTIuZ2V0KGMzK19wKTtyZXR1cm4gRzJ9cmV0dXJuIFJvLnJlYWQ9KE9zLElvLGNzLHUwLGMzKT0+KEt0LmZvcmNlTG9hZEZpbGUoZ2EpLEpzKE9zLElvLGNzLHUwLGMzKSksUm8ubW1hcD0oT3MsSW8sY3MsdTAs''@;'; put 'put ''YzMpPT57S3QuZm9yY2VMb2FkRmlsZShnYSk7dmFyIFkyPVJjKElvKTtpZighWTIpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNDgpO3JldHVybiBKcyhPcyx6dCxZMixJbyxjcykse3B0cjpZMixhbGxvY2F0ZWQ6ITB9fSxnYS5zdHJlYW1fb3BzPVJvLGdhfX0semQ9KHplLGx0LFB0KT0+emU/''@;'; put 'put ''bG8oeW4semUsbHQsUHQpOiIiLGdsPXtERUZBVUxUX1BPTExNQVNLOjUsY2FsY3VsYXRlQXQoemUsbHQsUHQpe2lmKHpuLmlzQWJzKGx0KSlyZXR1cm4gbHQ7dmFyIHF0O2lmKHF0PS0xMDA9PT16ZT9LdC5jd2QoKTpnbC5nZXRTdHJlYW1Gcm9tRkQoemUpLnBhdGgsMD09bHQubGVuZ3RoKXtp''@;'; put 'put ''ZighUHQpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNDQpO3JldHVybiBxdH1yZXR1cm4gcXQrIi8iK2x0fSx3cml0ZVN0YXQoemUsbHQpe0RyW3plPj4yXT1sdC5kZXYsRHJbemUrND4+Ml09bHQubW9kZSxEclt6ZSs4Pj4yXT1sdC5ubGluayxEclt6ZSsxMj4+Ml09bHQudWlkLERyW3plKzE2''@;'; put 'put ''Pj4yXT1sdC5naWQsRHJbemUrMjA+PjJdPWx0LnJkZXYsWHQ9W2x0LnNpemU+Pj4wLChFdD1sdC5zaXplLCtNYXRoLmFicyhFdCk+PTE/RXQ+MD8rTWF0aC5mbG9vcihFdC80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChFdC0rKH5+RXQ+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxS''@;'; put 'put ''blt6ZSsyND4+Ml09WHRbMF0sUm5bemUrMjg+PjJdPVh0WzFdLFJuW3plKzMyPj4yXT00MDk2LFJuW3plKzM2Pj4yXT1sdC5ibG9ja3M7dmFyIFB0PWx0LmF0aW1lLmdldFRpbWUoKSxxdD1sdC5tdGltZS5nZXRUaW1lKCksa249bHQuY3RpbWUuZ2V0VGltZSgpO3JldHVybiBYdD1bTWF0aC5m''@;'; put 'put ''bG9vcihQdC8xZTMpPj4+MCwoRXQ9TWF0aC5mbG9vcihQdC8xZTMpLCtNYXRoLmFicyhFdCk+PTE/RXQ+MD8rTWF0aC5mbG9vcihFdC80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChFdC0rKH5+RXQ+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxSblt6ZSs0MD4+Ml09WHRbMF0sUm5b''@;'; put 'put ''emUrNDQ+PjJdPVh0WzFdLERyW3plKzQ4Pj4yXT1QdCUxZTMqMWUzKjFlMyxYdD1bTWF0aC5mbG9vcihxdC8xZTMpPj4+MCwoRXQ9TWF0aC5mbG9vcihxdC8xZTMpLCtNYXRoLmFicyhFdCk+PTE/RXQ+MD8rTWF0aC5mbG9vcihFdC80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChFdC0r''@;'; put 'put ''KH5+RXQ+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxSblt6ZSs1Nj4+Ml09WHRbMF0sUm5bemUrNjA+PjJdPVh0WzFdLERyW3plKzY0Pj4yXT1xdCUxZTMqMWUzKjFlMyxYdD1bTWF0aC5mbG9vcihrbi8xZTMpPj4+MCwoRXQ9TWF0aC5mbG9vcihrbi8xZTMpLCtNYXRoLmFicyhFdCk+PTE/''@;'; put 'put ''RXQ+MD8rTWF0aC5mbG9vcihFdC80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChFdC0rKH5+RXQ+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxSblt6ZSs3Mj4+Ml09WHRbMF0sUm5bemUrNzY+PjJdPVh0WzFdLERyW3plKzgwPj4yXT1rbiUxZTMqMWUzKjFlMyxYdD1bbHQuaW5vPj4+''@;'; put 'put ''MCwoRXQ9bHQuaW5vLCtNYXRoLmFicyhFdCk+PTE/RXQ+MD8rTWF0aC5mbG9vcihFdC80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChFdC0rKH5+RXQ+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxSblt6ZSs4OD4+Ml09WHRbMF0sUm5bemUrOTI+PjJdPVh0WzFdLDB9LHdyaXRlU3Rh''@;'; put 'put ''dEZzKHplLGx0KXtEclt6ZSs0Pj4yXT1sdC5ic2l6ZSxEclt6ZSs2MD4+Ml09bHQuYnNpemUsWHQ9W2x0LmJsb2Nrcz4+PjAsKEV0PWx0LmJsb2NrcywrTWF0aC5hYnMoRXQpPj0xP0V0PjA/K01hdGguZmxvb3IoRXQvNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoRXQtKyh+fkV0Pj4+''@;'; put 'put ''MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sUm5bemUrOD4+Ml09WHRbMF0sUm5bemUrMTI+PjJdPVh0WzFdLFh0PVtsdC5iZnJlZT4+PjAsKEV0PWx0LmJmcmVlLCtNYXRoLmFicyhFdCk+PTE/RXQ+MD8rTWF0aC5mbG9vcihFdC80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChFdC0rKH5+''@;'; put 'put ''RXQ+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxSblt6ZSsxNj4+Ml09WHRbMF0sUm5bemUrMjA+PjJdPVh0WzFdLFh0PVtsdC5iYXZhaWw+Pj4wLChFdD1sdC5iYXZhaWwsK01hdGguYWJzKEV0KT49MT9FdD4wPytNYXRoLmZsb29yKEV0LzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwo''@;'; put 'put ''KEV0LSsofn5FdD4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLFJuW3plKzI0Pj4yXT1YdFswXSxSblt6ZSsyOD4+Ml09WHRbMV0sWHQ9W2x0LmZpbGVzPj4+MCwoRXQ9bHQuZmlsZXMsK01hdGguYWJzKEV0KT49MT9FdD4wPytNYXRoLmZsb29yKEV0LzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRo''@;'; put 'put ''LmNlaWwoKEV0LSsofn5FdD4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLFJuW3plKzMyPj4yXT1YdFswXSxSblt6ZSszNj4+Ml09WHRbMV0sWHQ9W2x0LmZmcmVlPj4+MCwoRXQ9bHQuZmZyZWUsK01hdGguYWJzKEV0KT49MT9FdD4wPytNYXRoLmZsb29yKEV0LzQyOTQ5NjcyOTYpPj4+MDp+''@;'; put 'put ''fitNYXRoLmNlaWwoKEV0LSsofn5FdD4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLFJuW3plKzQwPj4yXT1YdFswXSxSblt6ZSs0ND4+Ml09WHRbMV0sRHJbemUrNDg+PjJdPWx0LmZzaWQsRHJbemUrNjQ+PjJdPWx0LmZsYWdzLERyW3plKzU2Pj4yXT1sdC5uYW1lbGVufSxkb01zeW5jKHpl''@;'; put 'put ''LGx0LFB0LHF0LGtuKXtpZighS3QuaXNGaWxlKGx0Lm5vZGUubW9kZSkpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNDMpO2lmKDImcXQpcmV0dXJuIDA7dmFyIGNyPXluLnNsaWNlKHplLHplK1B0KTtLdC5tc3luYyhsdCxjcixrbixQdCxxdCl9LGdldFN0cmVhbUZyb21GRDp6ZT0+S3QuZ2V0''@;'; put 'put ''U3RyZWFtQ2hlY2tlZCh6ZSksdmFyYXJnczp2b2lkIDAsZ2V0U3RyOnplPT56ZCh6ZSl9LEV5PSgpPT57dmFyIHplPVJuWytnbC52YXJhcmdzPj4yXTtyZXR1cm4gZ2wudmFyYXJncys9NCx6ZX0sRTg9RXkscTU9KHplLGx0LFB0KT0+RW8oemUseW4sbHQsUHQpLG9vZT1bMCwzMSw2MCw5MSwx''@;'; put 'put ''MjEsMTUyLDE4MiwyMTMsMjQ0LDI3NCwzMDUsMzM1XSx2bz1bMCwzMSw1OSw5MCwxMjAsMTUxLDE4MSwyMTIsMjQzLDI3MywzMDQsMzM0XSxLaT0oemUsbHQpPT5sdCsyMDk3MTUyPj4+MDw0MTk0MzA1LSEhemU/KHplPj4+MCkrNDI5NDk2NzI5NipsdDpOYU4sbzM9KCk9PkRhdGUubm93KCks''@;'; put 'put ''U1M9W10sUlZ0PXplPT57dmFyIFB0PSh6ZS1Mei5idWZmZXIuYnl0ZUxlbmd0aCs2NTUzNSkvNjU1MzZ8MDt0cnl7cmV0dXJuIEx6Lmdyb3coUHQpLHZpKCksMX1jYXRjaHt9fSxzb2U9e30sdUk9KCk9PntpZighdUkuc3RyaW5ncyl7dmFyIGx0PXtVU0VSOiJ3ZWJfdXNlciIsTE9HTkFNRToi''@;'; put 'put ''d2ViX3VzZXIiLFBBVEg6Ii8iLFBXRDoiLyIsSE9NRToiL2hvbWUvd2ViX3VzZXIiLExBTkc6KCJvYmplY3QiPT10eXBlb2YgbmF2aWdhdG9yJiZuYXZpZ2F0b3IubGFuZ3VhZ2V8fCJDIikucmVwbGFjZSgiLSIsIl8iKSsiLlVURi04IixfOiIuL3RoaXMucHJvZ3JhbSJ9O2Zvcih2YXIgUHQg''@;'; put 'put ''aW4gc29lKXZvaWQgMD09PXNvZVtQdF0/ZGVsZXRlIGx0W1B0XTpsdFtQdF09c29lW1B0XTt2YXIgcXQ9W107Zm9yKHZhciBQdCBpbiBsdClxdC5wdXNoKGAke1B0fT0ke2x0W1B0XX1gKTt1SS5zdHJpbmdzPXF0fXJldHVybiB1SS5zdHJpbmdzfSxHVnQ9W107S3QuY3JlYXRlUHJlbG9hZGVk''@;'; put 'put ''RmlsZT0oemUsbHQsUHQscXQsa24sY3IsQXIsR3IsZ2EsUm8pPT57QXUoemUsbHQsUHQscXQsa24sR3IsZ2EsUm8pLnRoZW4oY3IpLmNhdGNoKEFyKX0sS3QucHJlbG9hZEZpbGU9QXUsS3Quc3RhdGljSW5pdCgpLGEud2FzbUJpbmFyeSYmKHdlPWEud2FzbUJpbmFyeSksYS5VVEY4VG9TdHJp''@;'; put 'put ''bmc9emQ7dmFyIEVfZSxUX2UsQV9lLGtfZSxEX2UsSV9lLFJfZSxMX2UsT19lLFBfZSxGX2UsSF9lLE5fZSxWX2UsQl9lLGpfZSx6X2UsVV9lLFpfZSxXX2UsWV9lLEx6LGRJLCRWdD17MTc0MTIwOih6ZSxsdCk9Pnt2YXIgUHQ9emQoemUpLHF0PXpkKGx0KTtLdC5jcmVhdGVQYXRoKCIvIix6''@;'; put 'put ''bi5kaXJuYW1lKFB0KSksS3Qud3JpdGVGaWxlKHpuLmpvaW4oIi8iLFB0KSxxdCl9fSxjQnQ9e2E6KHplLGx0LFB0KT0+e3Rocm93IG5ldyBQbih6ZSkuaW5pdChsdCxQdCksemV9LGk6ZnVuY3Rpb24geHooemUsbHQsUHQscXQpe3RyeXtpZihsdD1nbC5nZXRTdHIobHQpLGx0PWdsLmNhbGN1''@;'; put 'put ''bGF0ZUF0KHplLGx0KSwtOCZQdClyZXR1cm4tMjg7dmFyIGNyPUt0Lmxvb2t1cFBhdGgobHQse2ZvbGxvdzohMH0pLm5vZGU7aWYoIWNyKXJldHVybi00NDt2YXIgQXI9IiI7cmV0dXJuIDQmUHQmJihBcis9InIiKSwyJlB0JiYoQXIrPSJ3IiksMSZQdCYmKEFyKz0ieCIpLEFyJiZLdC5ub2Rl''@;'; put 'put ''UGVybWlzc2lvbnMoY3IsQXIpPy0yOjB9Y2F0Y2goR3Ipe2lmKHR5cGVvZiBLdD4idSJ8fCJFcnJub0Vycm9yIiE9PUdyLm5hbWUpdGhyb3cgR3I7cmV0dXJuLUdyLmVycm5vfX0sZTpmdW5jdGlvbiBhMyh6ZSxsdCxQdCl7Z2wudmFyYXJncz1QdDt0cnl7dmFyIHF0PWdsLmdldFN0cmVhbUZy''@;'; put 'put ''b21GRCh6ZSk7c3dpdGNoKGx0KXtjYXNlIDA6aWYoKGtuPUV5KCkpPDApcmV0dXJuLTI4O2Zvcig7S3Quc3RyZWFtc1trbl07KWtuKys7cmV0dXJuIEt0LmR1cFN0cmVhbShxdCxrbikuZmQ7Y2FzZSAxOmNhc2UgMjpjYXNlIDEzOmNhc2UgMTQ6cmV0dXJuIDA7Y2FzZSAzOnJldHVybiBxdC5m''@;'; put 'put ''bGFncztjYXNlIDQ6dmFyIGtuPUV5KCk7cmV0dXJuIHF0LmZsYWdzfD1rbiwwO2Nhc2UgMTI6cmV0dXJuIGtuPUU4KCksZ25ba24rMD4+MV09MiwwfXJldHVybi0yOH1jYXRjaChHcil7aWYodHlwZW9mIEt0PiJ1Inx8IkVycm5vRXJyb3IiIT09R3IubmFtZSl0aHJvdyBHcjtyZXR1cm4tR3Iu''@;'; put 'put ''ZXJybm99fSx5OmZ1bmN0aW9uIFg1KHplLGx0KXt0cnl7cmV0dXJuIGdsLndyaXRlU3RhdChsdCxLdC5mc3RhdCh6ZSkpfWNhdGNoKFB0KXtpZih0eXBlb2YgS3Q+InUifHwiRXJybm9FcnJvciIhPT1QdC5uYW1lKXRocm93IFB0O3JldHVybi1QdC5lcnJub319LGs6ZnVuY3Rpb24gRXooemUs''@;'; put 'put ''bHQsUHQpe2dsLnZhcmFyZ3M9UHQ7dHJ5e3ZhciBxdD1nbC5nZXRTdHJlYW1Gcm9tRkQoemUpO3N3aXRjaChsdCl7Y2FzZSAyMTUwOTpjYXNlIDIxNTEwOmNhc2UgMjE1MTE6Y2FzZSAyMTUxMjpjYXNlIDIxNTI0OmNhc2UgMjE1MTU6cmV0dXJuIHF0LnR0eT8wOi01OTtjYXNlIDIxNTA1Omlm''@;'; put 'put ''KCFxdC50dHkpcmV0dXJuLTU5O2lmKHF0LnR0eS5vcHMuaW9jdGxfdGNnZXRzKXt2YXIga249cXQudHR5Lm9wcy5pb2N0bF90Y2dldHMocXQpLGNyPUU4KCk7Um5bY3I+PjJdPWtuLmNfaWZsYWd8fDAsUm5bY3IrND4+Ml09a24uY19vZmxhZ3x8MCxSbltjcis4Pj4yXT1rbi5jX2NmbGFnfHww''@;'; put 'put ''LFJuW2NyKzEyPj4yXT1rbi5jX2xmbGFnfHwwO2Zvcih2YXIgQXI9MDtBcjwzMjtBcisrKXp0W2NyK0FyKzE3XT1rbi5jX2NjW0FyXXx8MDtyZXR1cm4gMH1yZXR1cm4gMDtjYXNlIDIxNTA2OmNhc2UgMjE1MDc6Y2FzZSAyMTUwODppZighcXQudHR5KXJldHVybi01OTtpZihxdC50dHkub3Bz''@;'; put 'put ''LmlvY3RsX3Rjc2V0cyl7Y3I9RTgoKTt2YXIgR3I9Um5bY3I+PjJdLGdhPVJuW2NyKzQ+PjJdLFJvPVJuW2NyKzg+PjJdLEpzPVJuW2NyKzEyPj4yXSxPcz1bXTtmb3IoQXI9MDtBcjwzMjtBcisrKU9zLnB1c2goenRbY3IrQXIrMTddKTtyZXR1cm4gcXQudHR5Lm9wcy5pb2N0bF90Y3NldHMo''@;'; put 'put ''cXQudHR5LGx0LHtjX2lmbGFnOkdyLGNfb2ZsYWc6Z2EsY19jZmxhZzpSbyxjX2xmbGFnOkpzLGNfY2M6T3N9KX1yZXR1cm4gMDtjYXNlIDIxNTE5OnJldHVybiBxdC50dHk/KGNyPUU4KCksUm5bY3I+PjJdPTAsMCk6LTU5O2Nhc2UgMjE1MjA6cmV0dXJuIHF0LnR0eT8tMjg6LTU5O2Nhc2Ug''@;'; put 'put ''MjE1Mzc6Y2FzZSAyMTUzMTpyZXR1cm4gY3I9RTgoKSxLdC5pb2N0bChxdCxsdCxjcik7Y2FzZSAyMTUyMzppZighcXQudHR5KXJldHVybi01OTtpZihxdC50dHkub3BzLmlvY3RsX3Rpb2Nnd2luc3ope3ZhciBJbz1xdC50dHkub3BzLmlvY3RsX3Rpb2Nnd2luc3oocXQudHR5KTtjcj1FOCgp''@;'; put 'put ''LGduW2NyPj4xXT1Jb1swXSxnbltjcisyPj4xXT1Jb1sxXX1yZXR1cm4gMDtkZWZhdWx0OnJldHVybi0yOH19Y2F0Y2goY3Mpe2lmKHR5cGVvZiBLdD4idSJ8fCJFcnJub0Vycm9yIiE9PWNzLm5hbWUpdGhyb3cgY3M7cmV0dXJuLWNzLmVycm5vfX0seDpmdW5jdGlvbiBUeih6ZSxsdCxQdCxx''@;'; put 'put ''dCl7dHJ5e2x0PWdsLmdldFN0cihsdCk7dmFyIGtuPTI1NiZxdCxjcj00MDk2JnF0O3JldHVybiBxdCY9LTY0MDEsbHQ9Z2wuY2FsY3VsYXRlQXQoemUsbHQsY3IpLGdsLndyaXRlU3RhdChQdCxrbj9LdC5sc3RhdChsdCk6S3Quc3RhdChsdCkpfWNhdGNoKEFyKXtpZih0eXBlb2YgS3Q+InUi''@;'; put 'put ''fHwiRXJybm9FcnJvciIhPT1Bci5uYW1lKXRocm93IEFyO3JldHVybi1Bci5lcnJub319LGc6ZnVuY3Rpb24gbEkoemUsbHQsUHQscXQpe2dsLnZhcmFyZ3M9cXQ7dHJ5e2x0PWdsLmdldFN0cihsdCksbHQ9Z2wuY2FsY3VsYXRlQXQoemUsbHQpO3ZhciBrbj1xdD9FeSgpOjA7cmV0dXJuIEt0''@;'; put 'put ''Lm9wZW4obHQsUHQsa24pLmZkfWNhdGNoKGNyKXtpZih0eXBlb2YgS3Q+InUifHwiRXJybm9FcnJvciIhPT1jci5uYW1lKXRocm93IGNyO3JldHVybi1jci5lcnJub319LHI6ZnVuY3Rpb24gYnAoemUsbHQsUHQscXQpe3RyeXtpZihsdD1nbC5nZXRTdHIobHQpLGx0PWdsLmNhbGN1bGF0ZUF0''@;'; put 'put ''KHplLGx0KSxxdDw9MClyZXR1cm4tMjg7dmFyIGtuPUt0LnJlYWRsaW5rKGx0KSxjcj1NYXRoLm1pbihxdCx4cyhrbikpLEFyPXp0W1B0K2NyXTtyZXR1cm4gcTUoa24sUHQscXQrMSksenRbUHQrY3JdPUFyLGNyfWNhdGNoKEdyKXtpZih0eXBlb2YgS3Q+InUifHwiRXJybm9FcnJvciIhPT1H''@;'; put 'put ''ci5uYW1lKXRocm93IEdyO3JldHVybi1Hci5lcnJub319LHM6ZnVuY3Rpb24gQXooemUpe3RyeXtyZXR1cm4gemU9Z2wuZ2V0U3RyKHplKSxLdC5ybWRpcih6ZSksMH1jYXRjaChsdCl7aWYodHlwZW9mIEt0PiJ1Inx8IkVycm5vRXJyb3IiIT09bHQubmFtZSl0aHJvdyBsdDtyZXR1cm4tbHQu''@;'; put 'put ''ZXJybm99fSx0OmZ1bmN0aW9uIGt6KHplLGx0LFB0KXt0cnl7aWYobHQ9Z2wuZ2V0U3RyKGx0KSxsdD1nbC5jYWxjdWxhdGVBdCh6ZSxsdCksUHQpe2lmKDUxMiE9PVB0KXJldHVybi0yODtLdC5ybWRpcihsdCl9ZWxzZSBLdC51bmxpbmsobHQpO3JldHVybiAwfWNhdGNoKHF0KXtpZih0eXBl''@;'; put 'put ''b2YgS3Q+InUifHwiRXJybm9FcnJvciIhPT1xdC5uYW1lKXRocm93IHF0O3JldHVybi1xdC5lcnJub319LGo6KCk9PlRyKCIiKSxuOmZ1bmN0aW9uIGVvKHplLGx0LFB0KXt2YXIgcXQ9S2koemUsbHQpLGtuPW5ldyBEYXRlKDFlMypxdCk7Um5bUHQ+PjJdPWtuLmdldFNlY29uZHMoKSxSbltQ''@;'; put 'put ''dCs0Pj4yXT1rbi5nZXRNaW51dGVzKCksUm5bUHQrOD4+Ml09a24uZ2V0SG91cnMoKSxSbltQdCsxMj4+Ml09a24uZ2V0RGF0ZSgpLFJuW1B0KzE2Pj4yXT1rbi5nZXRNb250aCgpLFJuW1B0KzIwPj4yXT1rbi5nZXRGdWxsWWVhcigpLTE5MDAsUm5bUHQrMjQ+PjJdPWtuLmdldERheSgpO3Zh''@;'; put 'put ''ciBjcj0wfCh6ZT0+KCh6ZT0+emUlND09MCYmKHplJTEwMCE9MHx8emUlNDAwPT0wKSkoemUuZ2V0RnVsbFllYXIoKSk/b29lOnZvKVt6ZS5nZXRNb250aCgpXSt6ZS5nZXREYXRlKCktMSkoa24pO1JuW1B0KzI4Pj4yXT1jcixSbltQdCszNj4+Ml09LTYwKmtuLmdldFRpbWV6b25lT2Zmc2V0''@;'; put 'put ''KCk7dmFyIEFyPW5ldyBEYXRlKGtuLmdldEZ1bGxZZWFyKCksMCwxKSxHcj1uZXcgRGF0ZShrbi5nZXRGdWxsWWVhcigpLDYsMSkuZ2V0VGltZXpvbmVPZmZzZXQoKSxnYT1Bci5nZXRUaW1lem9uZU9mZnNldCgpLFJvPTB8KEdyIT1nYSYma24uZ2V0VGltZXpvbmVPZmZzZXQoKT09TWF0aC5t''@;'; put 'put ''aW4oZ2EsR3IpKTtSbltQdCszMj4+Ml09Um99LGw6ZnVuY3Rpb24gd2MoemUsbHQsUHQscXQsa24sY3IsQXIsR3Ipe3ZhciBnYT1LaShrbixjcik7dHJ5e3ZhciBSbz1nbC5nZXRTdHJlYW1Gcm9tRkQocXQpLEpzPUt0Lm1tYXAoUm8semUsZ2EsbHQsUHQpLE9zPUpzLnB0cjtyZXR1cm4gUm5b''@;'; put 'put ''QXI+PjJdPUpzLmFsbG9jYXRlZCxEcltHcj4+Ml09T3MsMH1jYXRjaChJbyl7aWYodHlwZW9mIEt0PiJ1Inx8IkVycm5vRXJyb3IiIT09SW8ubmFtZSl0aHJvdyBJbztyZXR1cm4tSW8uZXJybm99fSxtOmZ1bmN0aW9uIFEwKHplLGx0LFB0LHF0LGtuLGNyLEFyKXt2YXIgR3I9S2koY3IsQXIp''@;'; put 'put ''O3RyeXt2YXIgZ2E9Z2wuZ2V0U3RyZWFtRnJvbUZEKGtuKTsyJlB0JiZnbC5kb01zeW5jKHplLGdhLGx0LHF0LEdyKX1jYXRjaChSbyl7aWYodHlwZW9mIEt0PiJ1Inx8IkVycm5vRXJyb3IiIT09Um8ubmFtZSl0aHJvdyBSbztyZXR1cm4tUm8uZXJybm99fSx1Oih6ZSxsdCxQdCxxdCk9Pnt2''@;'; put 'put ''YXIga249KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLGNyPW5ldyBEYXRlKGtuLDAsMSksQXI9bmV3IERhdGUoa24sNiwxKSxHcj1jci5nZXRUaW1lem9uZU9mZnNldCgpLGdhPUFyLmdldFRpbWV6b25lT2Zmc2V0KCksUm89TWF0aC5tYXgoR3IsZ2EpO0RyW3plPj4yXT02MCpSbyxSbltsdD4+''@;'; put 'put ''Ml09KyhHciE9Z2EpO3ZhciBKcz1jcz0+e3ZhciB1MD1jcz49MD8iLSI6IisiLGMzPU1hdGguYWJzKGNzKTtyZXR1cm5gVVRDJHt1MH0ke1N0cmluZyhNYXRoLmZsb29yKGMzLzYwKSkucGFkU3RhcnQoMiwiMCIpfSR7U3RyaW5nKGMzJTYwKS5wYWRTdGFydCgyLCIwIil9YH0sT3M9SnMoR3Ip''@;'; put 'put ''LElvPUpzKGdhKTtnYTxHcj8ocTUoT3MsUHQsMTcpLHE1KElvLHF0LDE3KSk6KHE1KE9zLHF0LDE3KSxxNShJbyxQdCwxNykpfSxwOmZ1bmN0aW9uIEwwKHplLGx0LFB0LHF0KXt2YXIgY3I7aWYoS2kobHQsUHQpLCEoemU9PnplPj0wJiZ6ZTw9MykoemUpKXJldHVybiAyODtjcj0wPT09emU/''@;'; put 'put ''bzMoKTpwZXJmb3JtYW5jZS5ub3coKTt2YXIgQXI9TWF0aC5yb3VuZCgxZTMqY3IqMWUzKTtyZXR1cm4gWHQ9W0FyPj4+MCwoRXQ9QXIsK01hdGguYWJzKEV0KT49MT9FdD4wPytNYXRoLmZsb29yKEV0LzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKEV0LSsofn5FdD4+PjApKS80Mjk0''@;'; put 'put ''OTY3Mjk2KT4+PjA6MCldLFJuW3F0Pj4yXT1YdFswXSxSbltxdCs0Pj4yXT1YdFsxXSwwfSx6Oih6ZSxsdCxQdCk9PigoemUsbHQsUHQpPT57dmFyIHF0PSgoemUsbHQpPT57U1MubGVuZ3RoPTA7Zm9yKHZhciBQdDtQdD15blt6ZSsrXTspe3ZhciBxdD0xMDUhPVB0O2x0Kz0ocXQmPTExMiE9''@;'; put 'put ''UHQpJiZsdCU4PzQ6MCxTUy5wdXNoKDExMj09UHQ/RHJbbHQ+PjJdOjEwNT09UHQ/Um5bbHQ+PjJdOmRyW2x0Pj4zXSksbHQrPXF0Pzg6NH1yZXR1cm4gU1N9KShsdCxQdCk7cmV0dXJuICRWdFt6ZV0oLi4ucXQpfSkoemUsbHQsUHQpLGg6bzMscTp6ZT0+e3ZhciBsdD15bi5sZW5ndGgsUHQ9''@;'; put 'put ''MjE0NzQ4MzY0ODtpZigoemU+Pj49MCk+UHQpcmV0dXJuITE7Zm9yKHZhciBxdD0xO3F0PD00O3F0Kj0yKXt2YXIga249bHQqKDErLjIvcXQpO2tuPU1hdGgubWluKGtuLHplKzEwMDY2MzI5Nik7dmFyIGNyPU1hdGgubWluKFB0LEoxKE1hdGgubWF4KHplLGtuKSw2NTUzNikpO2lmKFJWdChj''@;'; put 'put ''cikpcmV0dXJuITB9cmV0dXJuITF9LHY6KHplLGx0KT0+e3ZhciBQdD0wLHF0PTA7Zm9yKHZhciBrbiBvZiB1SSgpKXt2YXIgY3I9bHQrUHQ7RHJbemUrcXQ+PjJdPWNyLFB0Kz1xNShrbixjciwxLzApKzEscXQrPTR9cmV0dXJuIDB9LHc6KHplLGx0KT0+e3ZhciBQdD11SSgpO0RyW3plPj4y''@;'; put 'put ''XT1QdC5sZW5ndGg7dmFyIHF0PTA7Zm9yKHZhciBrbiBvZiBQdClxdCs9eHMoa24pKzE7cmV0dXJuIERyW2x0Pj4yXT1xdCwwfSxmOih6ZSxsdCk9PnsoemU9PnsoKHplLGx0KT0+e3Rocm93IGx0fSkoMCxuZXcgX24oemUpKX0pKHplKX0sYjpmdW5jdGlvbiBqVnQoemUpe3RyeXt2YXIgbHQ9''@;'; put 'put ''Z2wuZ2V0U3RyZWFtRnJvbUZEKHplKTtyZXR1cm4gS3QuY2xvc2UobHQpLDB9Y2F0Y2goUHQpe2lmKHR5cGVvZiBLdD4idSJ8fCJFcnJub0Vycm9yIiE9PVB0Lm5hbWUpdGhyb3cgUHQ7cmV0dXJuIFB0LmVycm5vfX0sZDpmdW5jdGlvbiBVVnQoemUsbHQsUHQscXQpe3RyeXt2YXIgY3I9KCh6''@;'; put 'put ''ZSxsdCxQdCxxdCk9Pntmb3IodmFyIGtuPTAsY3I9MDtjcjxQdDtjcisrKXt2YXIgQXI9RHJbbHQ+PjJdLEdyPURyW2x0KzQ+PjJdO2x0Kz04O3ZhciBnYT1LdC5yZWFkKHplLHp0LEFyLEdyLHF0KTtpZihnYTwwKXJldHVybi0xO2lmKGtuKz1nYSxnYTxHcilicmVhazt0eXBlb2YgcXQ8InUi''@;'; put 'put ''JiYocXQrPWdhKX1yZXR1cm4ga259KShnbC5nZXRTdHJlYW1Gcm9tRkQoemUpLGx0LFB0KTtyZXR1cm4gRHJbcXQ+PjJdPWNyLDB9Y2F0Y2goQXIpe2lmKHR5cGVvZiBLdD4idSJ8fCJFcnJub0Vycm9yIiE9PUFyLm5hbWUpdGhyb3cgQXI7cmV0dXJuIEFyLmVycm5vfX0sbzpmdW5jdGlvbiBa''@;'; put 'put ''VnQoemUsbHQsUHQscXQsa24pe3ZhciBjcj1LaShsdCxQdCk7dHJ5e2lmKGlzTmFOKGNyKSlyZXR1cm4gNjE7dmFyIEFyPWdsLmdldFN0cmVhbUZyb21GRCh6ZSk7cmV0dXJuIEt0Lmxsc2VlayhBcixjcixxdCksWHQ9W0FyLnBvc2l0aW9uPj4+MCwoRXQ9QXIucG9zaXRpb24sK01hdGguYWJz''@;'; put 'put ''KEV0KT49MT9FdD4wPytNYXRoLmZsb29yKEV0LzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKEV0LSsofn5FdD4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLFJuW2tuPj4yXT1YdFswXSxSbltrbis0Pj4yXT1YdFsxXSxBci5nZXRkZW50cyYmMD09PWNyJiYwPT09cXQmJihBci5nZXRk''@;'; put 'put ''ZW50cz1udWxsKSwwfWNhdGNoKEdyKXtpZih0eXBlb2YgS3Q+InUifHwiRXJybm9FcnJvciIhPT1Hci5uYW1lKXRocm93IEdyO3JldHVybiBHci5lcnJub319LGM6ZnVuY3Rpb24gWVZ0KHplLGx0LFB0LHF0KXt0cnl7dmFyIGNyPSgoemUsbHQsUHQscXQpPT57Zm9yKHZhciBrbj0wLGNyPTA7''@;'; put 'put ''Y3I8UHQ7Y3IrKyl7dmFyIEFyPURyW2x0Pj4yXSxHcj1EcltsdCs0Pj4yXTtsdCs9ODt2YXIgZ2E9S3Qud3JpdGUoemUsenQsQXIsR3IscXQpO2lmKGdhPDApcmV0dXJuLTE7aWYoa24rPWdhLGdhPEdyKWJyZWFrO3R5cGVvZiBxdDwidSImJihxdCs9Z2EpfXJldHVybiBrbn0pKGdsLmdldFN0''@;'; put 'put ''cmVhbUZyb21GRCh6ZSksbHQsUHQpO3JldHVybiBEcltxdD4+Ml09Y3IsMH1jYXRjaChBcil7aWYodHlwZW9mIEt0PiJ1Inx8IkVycm5vRXJyb3IiIT09QXIubmFtZSl0aHJvdyBBcjtyZXR1cm4gQXIuZXJybm99fX07ZnVuY3Rpb24gczMoKXt9ZnVuY3Rpb24gT3ooemUpe3JldHVybih6ZXx8''@;'; put 'put ''czMpLl9fY2FjaGVfX31mdW5jdGlvbiBjb2UoemUsbHQpe3ZhciBQdD1PeihsdCkscXQ9UHRbemVdO3JldHVybiBxdHx8KChxdD1PYmplY3QuY3JlYXRlKChsdHx8czMpLnByb3RvdHlwZSkpLnB0cj16ZSxQdFt6ZV09cXQpfWRJPXlpZWxkIGZ1bmN0aW9uIExuKCl7cmV0dXJuIGlyLmFwcGx5''@;'; put 'put ''KHRoaXMsYXJndW1lbnRzKX0oKSxmdW5jdGlvbiBsb2UoKXtRMT4wfHxRMT4wP1BoPWxvZTpmdW5jdGlvbiB6ZSgpe2EuY2FsbGVkUnVuPSEwLCFGZSYmKGZ1bmN0aW9uIEJyKCl7TXI9ITAsKHplPT57Zm9yKDt6ZS5sZW5ndGg+MDspemUuc2hpZnQoKShhKX0pKEdWdCksIWEubm9GU0luaXQm''@;'; put 'put ''JiFLdC5pbml0aWFsaXplZCYmS3QuaW5pdCgpLEVsLmluaXQoKSxkSS5CKCksS3QuaWdub3JlUGVybWlzc2lvbnM9ITF9KCksbXQ/LihhKSl9KCl9KCksKHMzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHMzLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXMzLHMzLnByb3RvdHlwZS5fX2NsYXNz''@;'; put 'put ''X189czMsczMuX19jYWNoZV9fPXt9LGEuV3JhcHBlck9iamVjdD1zMyxhLmdldENhY2hlPU96LGEud3JhcFBvaW50ZXI9Y29lLGEuY2FzdE9iamVjdD1mdW5jdGlvbiB1QnQoemUsbHQpe3JldHVybiBjb2UoemUucHRyLGx0KX0sYS5OVUxMPWNvZSgwKSxhLmRlc3Ryb3k9ZnVuY3Rpb24gZEJ0''@;'; put 'put ''KHplKXtpZighemUuX19kZXN0cm95X18pdGhyb3ciRXJyb3I6IENhbm5vdCBkZXN0cm95IG9iamVjdC4gKERpZCB5b3UgY3JlYXRlIGl0IHlvdXJzZWxmPykiO3plLl9fZGVzdHJveV9fKCksZGVsZXRlIE96KHplLl9fY2xhc3NfXylbemUucHRyXX0sYS5jb21wYXJlPWZ1bmN0aW9uIGhCdCh6''@;'; put 'put ''ZSxsdCl7cmV0dXJuIHplLnB0cj09PWx0LnB0cn0sYS5nZXRQb2ludGVyPWZ1bmN0aW9uIGZCdCh6ZSl7cmV0dXJuIHplLnB0cn0sYS5nZXRDbGFzcz1mdW5jdGlvbiBwQnQoemUpe3JldHVybiB6ZS5fX2NsYXNzX199O3ZhciBhbD17YnVmZmVyOjAsc2l6ZTowLHBvczowLHRlbXBzOltdLG5l''@;'; put 'put ''ZWRlZDowLHByZXBhcmUoKXtpZihhbC5uZWVkZWQpe2Zvcih2YXIgemU9MDt6ZTxhbC50ZW1wcy5sZW5ndGg7emUrKylhLl93ZWJpZGxfZnJlZShhbC50ZW1wc1t6ZV0pO2FsLnRlbXBzLmxlbmd0aD0wLGEuX3dlYmlkbF9mcmVlKGFsLmJ1ZmZlciksYWwuYnVmZmVyPTAsYWwuc2l6ZSs9YWwu''@;'; put 'put ''bmVlZGVkLGFsLm5lZWRlZD0wfWFsLmJ1ZmZlcnx8KGFsLnNpemUrPTEyOCxhbC5idWZmZXI9YS5fd2ViaWRsX21hbGxvYyhhbC5zaXplKSxudChhbC5idWZmZXIpKSxhbC5wb3M9MH0sYWxsb2MoemUsbHQpe250KGFsLmJ1ZmZlcik7dmFyIGtuLHF0PXplLmxlbmd0aCpsdC5CWVRFU19QRVJf''@;'; put 'put ''RUxFTUVOVDtyZXR1cm4gcXQ9SjEocXQsOCksYWwucG9zK3F0Pj1hbC5zaXplPyhudChxdD4wKSxhbC5uZWVkZWQrPXF0LGtuPWEuX3dlYmlkbF9tYWxsb2MocXQpLGFsLnRlbXBzLnB1c2goa24pKTooa249YWwuYnVmZmVyK2FsLnBvcyxhbC5wb3MrPXF0KSxrbn19O2Z1bmN0aW9uIGwzKHpl''@;'; put 'put ''KXtpZigic3RyaW5nIj09dHlwZW9mIHplKXtmb3IodmFyIGx0PXFvKHplKSxQdD1hbC5hbGxvYyhsdCx6dCkscXQ9MDtxdDxsdC5sZW5ndGg7cXQrKyl6dFtQdCtxdF09bHRbcXRdO3JldHVybiBQdH1yZXR1cm4gemV9ZnVuY3Rpb24gSjUoKXt0aHJvdyJjYW5ub3QgY29uc3RydWN0IGEgVm9p''@;'; put 'put ''ZFB0ciwgbm8gY29uc3RydWN0b3IgaW4gSURMIn1mdW5jdGlvbiBobyh6ZSxsdCl7emUmJiJvYmplY3QiPT10eXBlb2YgemUmJih6ZT16ZS5wdHIpLGx0JiYib2JqZWN0Ij09dHlwZW9mIGx0JiYobHQ9bHQucHRyKSx0aGlzLnB0cj1UX2UoemUsbHQpLE96KGhvKVt0aGlzLnB0cl09dGhpc31y''@;'; put 'put ''ZXR1cm4oSjUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoczMucHJvdG90eXBlKSkuY29uc3RydWN0b3I9SjUsSjUucHJvdG90eXBlLl9fY2xhc3NfXz1KNSxKNS5fX2NhY2hlX189e30sYS5Wb2lkUHRyPUo1LEo1LnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1KNS5wcm90b3R5cGUuX19kZXN0cm95''@;'; put 'put ''X189ZnVuY3Rpb24oKXtFX2UodGhpcy5wdHIpfSwoaG8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoczMucHJvdG90eXBlKSkuY29uc3RydWN0b3I9aG8saG8ucHJvdG90eXBlLl9fY2xhc3NfXz1obyxoby5fX2NhY2hlX189e30sYS5HcmFwaHZpej1obyxoby5wcm90b3R5cGUudmVyc2lvbj1o''@;'; put 'put ''by5wcm90b3R5cGUudmVyc2lvbj1mdW5jdGlvbigpe3JldHVybiB6ZChBX2UoKSl9LGhvLnByb3RvdHlwZS5sYXN0RXJyb3I9aG8ucHJvdG90eXBlLmxhc3RFcnJvcj1mdW5jdGlvbigpe3JldHVybiB6ZChrX2UoKSl9LGhvLnByb3RvdHlwZS5jcmVhdGVGaWxlPWhvLnByb3RvdHlwZS5jcmVh''@;'; put 'put ''dGVGaWxlPWZ1bmN0aW9uKHplLGx0KXt2YXIgUHQ9dGhpcy5wdHI7YWwucHJlcGFyZSgpLHplPXplJiYib2JqZWN0Ij09dHlwZW9mIHplP3plLnB0cjpsMyh6ZSksbHQ9bHQmJiJvYmplY3QiPT10eXBlb2YgbHQ/bHQucHRyOmwzKGx0KSxEX2UoUHQsemUsbHQpfSxoby5wcm90b3R5cGUubGF5''@;'; put 'put ''b3V0PWhvLnByb3RvdHlwZS5sYXlvdXQ9ZnVuY3Rpb24oemUsbHQsUHQpe3ZhciBxdD10aGlzLnB0cjtyZXR1cm4gYWwucHJlcGFyZSgpLHplPXplJiYib2JqZWN0Ij09dHlwZW9mIHplP3plLnB0cjpsMyh6ZSksbHQ9bHQmJiJvYmplY3QiPT10eXBlb2YgbHQ/bHQucHRyOmwzKGx0KSxQdD1Q''@;'; put 'put ''dCYmIm9iamVjdCI9PXR5cGVvZiBQdD9QdC5wdHI6bDMoUHQpLHpkKElfZShxdCx6ZSxsdCxQdCkpfSxoby5wcm90b3R5cGUuYWN5Y2xpYz1oby5wcm90b3R5cGUuYWN5Y2xpYz1mdW5jdGlvbih6ZSxsdCxQdCl7dmFyIHF0PXRoaXMucHRyO3JldHVybiBhbC5wcmVwYXJlKCksemU9emUmJiJv''@;'; put 'put ''YmplY3QiPT10eXBlb2YgemU/emUucHRyOmwzKHplKSxsdCYmIm9iamVjdCI9PXR5cGVvZiBsdCYmKGx0PWx0LnB0ciksUHQmJiJvYmplY3QiPT10eXBlb2YgUHQmJihQdD1QdC5wdHIpLCEhUl9lKHF0LHplLGx0LFB0KX0saG8ucHJvdG90eXBlLnRyZWQ9aG8ucHJvdG90eXBlLnRyZWQ9ZnVu''@;'; put 'put ''Y3Rpb24oemUsbHQsUHQpe3ZhciBxdD10aGlzLnB0cjthbC5wcmVwYXJlKCksemU9emUmJiJvYmplY3QiPT10eXBlb2YgemU/emUucHRyOmwzKHplKSxsdCYmIm9iamVjdCI9PXR5cGVvZiBsdCYmKGx0PWx0LnB0ciksUHQmJiJvYmplY3QiPT10eXBlb2YgUHQmJihQdD1QdC5wdHIpLExfZShx''@;'; put 'put ''dCx6ZSxsdCxQdCl9LGhvLnByb3RvdHlwZS51bmZsYXR0ZW49aG8ucHJvdG90eXBlLnVuZmxhdHRlbj1mdW5jdGlvbih6ZSxsdCxQdCxxdCl7dmFyIGtuPXRoaXMucHRyO3JldHVybiBhbC5wcmVwYXJlKCksemU9emUmJiJvYmplY3QiPT10eXBlb2YgemU/emUucHRyOmwzKHplKSxsdCYmIm9i''@;'; put 'put ''amVjdCI9PXR5cGVvZiBsdCYmKGx0PWx0LnB0ciksUHQmJiJvYmplY3QiPT10eXBlb2YgUHQmJihQdD1QdC5wdHIpLHF0JiYib2JqZWN0Ij09dHlwZW9mIHF0JiYocXQ9cXQucHRyKSx6ZChPX2Uoa24semUsbHQsUHQscXQpKX0saG8ucHJvdG90eXBlLmdldF9sYXlvdXRfcmVzdWx0PWhvLnBy''@;'; put 'put ''b3RvdHlwZS5nZXRfbGF5b3V0X3Jlc3VsdD1mdW5jdGlvbigpe3JldHVybiB6ZChQX2UodGhpcy5wdHIpKX0saG8ucHJvdG90eXBlLnNldF9sYXlvdXRfcmVzdWx0PWhvLnByb3RvdHlwZS5zZXRfbGF5b3V0X3Jlc3VsdD1mdW5jdGlvbih6ZSl7dmFyIGx0PXRoaXMucHRyO2FsLnByZXBhcmUo''@;'; put 'put ''KSx6ZT16ZSYmIm9iamVjdCI9PXR5cGVvZiB6ZT96ZS5wdHI6bDMoemUpLEZfZShsdCx6ZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoby5wcm90b3R5cGUsImxheW91dF9yZXN1bHQiLHtnZXQ6aG8ucHJvdG90eXBlLmdldF9sYXlvdXRfcmVzdWx0LHNldDpoby5wcm90b3R5cGUuc2V0X2xh''@;'; put 'put ''eW91dF9yZXN1bHR9KSxoby5wcm90b3R5cGUuZ2V0X2FjeWNsaWNfb3V0RmlsZT1oby5wcm90b3R5cGUuZ2V0X2FjeWNsaWNfb3V0RmlsZT1mdW5jdGlvbigpe3JldHVybiB6ZChIX2UodGhpcy5wdHIpKX0saG8ucHJvdG90eXBlLnNldF9hY3ljbGljX291dEZpbGU9aG8ucHJvdG90eXBlLnNl''@;'; put 'put ''dF9hY3ljbGljX291dEZpbGU9ZnVuY3Rpb24oemUpe3ZhciBsdD10aGlzLnB0cjthbC5wcmVwYXJlKCksemU9emUmJiJvYmplY3QiPT10eXBlb2YgemU/emUucHRyOmwzKHplKSxOX2UobHQsemUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaG8ucHJvdG90eXBlLCJhY3ljbGljX291dEZpbGUi''@;'; put 'put ''LHtnZXQ6aG8ucHJvdG90eXBlLmdldF9hY3ljbGljX291dEZpbGUsc2V0OmhvLnByb3RvdHlwZS5zZXRfYWN5Y2xpY19vdXRGaWxlfSksaG8ucHJvdG90eXBlLmdldF9hY3ljbGljX251bV9yZXY9aG8ucHJvdG90eXBlLmdldF9hY3ljbGljX251bV9yZXY9ZnVuY3Rpb24oKXtyZXR1cm4gVl9l''@;'; put 'put ''KHRoaXMucHRyKX0saG8ucHJvdG90eXBlLnNldF9hY3ljbGljX251bV9yZXY9aG8ucHJvdG90eXBlLnNldF9hY3ljbGljX251bV9yZXY9ZnVuY3Rpb24oemUpe3plJiYib2JqZWN0Ij09dHlwZW9mIHplJiYoemU9emUucHRyKSxCX2UodGhpcy5wdHIsemUpfSxPYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoaG8ucHJvdG90eXBlLCJhY3ljbGljX251bV9yZXYiLHtnZXQ6aG8ucHJvdG90eXBlLmdldF9hY3ljbGljX251bV9yZXYsc2V0OmhvLnByb3RvdHlwZS5zZXRfYWN5Y2xpY19udW1fcmV2fSksaG8ucHJvdG90eXBlLmdldF90cmVkX291dD1oby5wcm90b3R5cGUuZ2V0X3RyZWRfb3V0PWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHpkKGpfZSh0aGlzLnB0cikpfSxoby5wcm90b3R5cGUuc2V0X3RyZWRfb3V0PWhvLnByb3RvdHlwZS5zZXRfdHJlZF9vdXQ9ZnVuY3Rpb24oemUpe3ZhciBsdD10aGlzLnB0cjthbC5wcmVwYXJlKCksemU9emUmJiJvYmplY3QiPT10eXBlb2YgemU/emUucHRyOmwz''@;'; put 'put ''KHplKSx6X2UobHQsemUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaG8ucHJvdG90eXBlLCJ0cmVkX291dCIse2dldDpoby5wcm90b3R5cGUuZ2V0X3RyZWRfb3V0LHNldDpoby5wcm90b3R5cGUuc2V0X3RyZWRfb3V0fSksaG8ucHJvdG90eXBlLmdldF90cmVkX2Vycj1oby5wcm90b3R5cGUu''@;'; put 'put ''Z2V0X3RyZWRfZXJyPWZ1bmN0aW9uKCl7cmV0dXJuIHpkKFVfZSh0aGlzLnB0cikpfSxoby5wcm90b3R5cGUuc2V0X3RyZWRfZXJyPWhvLnByb3RvdHlwZS5zZXRfdHJlZF9lcnI9ZnVuY3Rpb24oemUpe3ZhciBsdD10aGlzLnB0cjthbC5wcmVwYXJlKCksemU9emUmJiJvYmplY3QiPT10eXBl''@;'; put 'put ''b2YgemU/emUucHRyOmwzKHplKSxaX2UobHQsemUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaG8ucHJvdG90eXBlLCJ0cmVkX2VyciIse2dldDpoby5wcm90b3R5cGUuZ2V0X3RyZWRfZXJyLHNldDpoby5wcm90b3R5cGUuc2V0X3RyZWRfZXJyfSksaG8ucHJvdG90eXBlLl9fZGVzdHJveV9f''@;'; put 'put ''PWhvLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe1dfZSh0aGlzLnB0cil9LE1yP2E6bmV3IFByb21pc2UoKHplLGx0KT0+e210PXplLCR0PWx0fSl9KSxYYWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBzSSxxYWU7ZnVuY3Rpb24gRU90KCl7cmV0dXJuIHFhZXx8KHFhZT1m''@;'; put 'put ''dW5jdGlvbiBfT3QoYyxsKXtmb3IodmFyIGE9W10sZD0rIWwsaD0wLGY9MDtjLmxlbmd0aDspe3ZhciB2PXVPdChjLGR8fGwpO2lmKCJvYmplY3QiPT10eXBlb2Ygdil7Zm9yKGQ/KGw9bnVsbCx2LncubGVuZ3RoPT12LnUmJihhLnB1c2gobD12LncpLGYrPXYudSkpOihhLnB1c2gobCksdi5l''@;'; put 'put ''PTApOyF2Lmw7KXt2YXIgTT15T3QoYyx2LGwpO018fGMwKDUpLGw/di5lPXYueTooYS5wdXNoKE0pLGYrPU0ubGVuZ3RoLHNPdCh2LncsMCxNLmxlbmd0aCksdi53LnNldChNLHYudy5sZW5ndGgtTS5sZW5ndGgpKX1oPXYuYis0KnYuY31lbHNlIGg9djtjPWMuc3ViYXJyYXkoaCl9cmV0dXJu''@;'; put 'put ''IGZ1bmN0aW9uKGMsbCl7aWYoMT09Yy5sZW5ndGgpcmV0dXJuIGNbMF07Zm9yKHZhciBhPW5ldyB6dShsKSxkPTAsaD0wO2Q8Yy5sZW5ndGg7KytkKXt2YXIgZj1jW2RdO2Euc2V0KGYsaCksaCs9Zi5sZW5ndGh9cmV0dXJuIGF9KGEsZil9KGZ1bmN0aW9uIE1PdChjKXtsZXQgbD1jLmxlbmd0''@;'; put 'put ''aCxhPVtdLGQ9MCxoPTAsZj0tMTtmb3IobGV0IHY9MDt2PGw7disrKXtsZXQgTT0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkhIyQlJigpKissLi86Ozw9Pj9AW11eX2B7fH1+IicuaW5kZXhPZihjW3ZdKTtpZigtMSE9PU0p''@;'; put 'put ''aWYoZjwwKWY9TTtlbHNle2YrPTkxKk0sZHw9Zjw8aCxoKz0oODE5MSZmKT44OD8xMzoxNDtkb3thLnB1c2goMjU1JmQpLGQ+Pj04LGgtPTh9d2hpbGUoaD43KTtmPS0xfX1yZXR1cm4gZj4tMSYmYS5wdXNoKDI1NSYoZHxmPDxoKSksbmV3IFVpbnQ4QXJyYXkoYSl9KCd2NyNhU1hXYkBETWNg''@;'; put 'put ''Ly9WZllrd1UyaHRpUHwvMDNleVg+YjFrSjY5N3EiKiUya2EuW2tBTXRXbElMLnB7YUNtPC9gWkxISy8kP25LX1I0MWJebWNRcjA3a0RoTkU/JFNmSk4uW0NoI312T21WWG0rSDFEZGttKDFUdjBTI3Z6aHl7dTljKS56Nn0/cUx4cklASj5kT1tdUTcuOE5aTHo/fVVpUnJVfnY/WD5ZMGt7aHpX''@;'; put 'put ''N2JaS01FPXl6Ik5aPXxUQUxHJFBpWz5dRH0lQk5gNm1zXU9EVDNTKk0xWHxkSjBfUGw8UyZ1fGRTQUYuaVdfcCpwPStTPVpzbSskekE+XzN5VU9OQVYxcldqX3AxYitqYDdiXylTJEo+djFGRlU3RClILzZFaFJAKSNBV0RzJD5TclB5fkF0WU4/VTpid2hRLmMiRFNEITAzLyszRmJyaDEmcTNs''@;'; put 'put ''eFc9TThfaXA5PjBONntuXnRvKjp1QCNZUXl4VjZ7bkNwdGJmUGA3QDpkaykuP28xNjM5aUBWRixrfVg8UmMhckt4KTBAPVY+cXAvSHs7aTxlb1Vkd31kKlN+KWtxT19tWV5iI285XyxhNnBMLn4/PVgpenhwP05CelhMQFEjTFY3KkgiQ0I1K0VIaXc+V013UisyR3cwK3FFKHVnd1dQUEZgZ3VQ''@;'; put 'put ''TUZeRnpLIjFzPHIyKlJ2SEhOXSI6PWNBVUgudGwqWWUmWjh1bDZVMz5qZWcuNXhDfW9eckIxSWgxWit0XmNhaVsjKigwe3IjO1hBMSk1VDpZIW8lMzlsYk9mQzJjTzpgYjRYWVpKTGZXNFBuYkNMTFlZUUxeVzNxXmhvTj4/cEk4SCJ5cCV4Z2hnMTE6MFo6aGBxU0ozNztJNyxaSTxweXhdYyEk''@;'; put 'put ''VTthKmdWS3p6ciV4UG01diVoZncjajsjOyN6U0h2L1o5JXhxRUJTRD1Qc3Z7ZztBclAjREVGejVUZ0JWIzx2Ilt9LFVlT3RrTlZnLHAhd0opYGRpWVc8a0hLYXtmd3IjUX44WjlmJitzO3RSTFs4ZHZEOlEyITJWa2RTbD44blEyRzsrWjkuflpZSm1DO21HP1RhVWx+OHckT1F6XSJUc1lqKmJd''@;'; put 'put ''Z2Yraj45ej11ITtSd1tpZFhScEY8Xkc/S34rV3wyYS9OVml7NkpOOSVLSTZQQ2FYb117cng4MDYxYXVWOFl1QzNLOXF4MmVbRGZYVUMyd3NKQkJOQVB7cXp2aU5jIWtoRCRDS05GIzhuNlpkQSsiOixxTyF3N1J2Q0RKWEVkYXVjUytqdyR5MT9sSUNWZWhDPnxbZywwKFElO0srKXZ6U355Z1ln''@;'; put 'put ''OXxtV1lWRFsvbl9nL0BYXW9qaXZmeihpVCxfRDFSK0QwTFc6dW1VRUZMLmkiSURtVk0uaixQQHswKEBwQGsvPn4zM3I+O2kzaCRAW0w3TUI1QXdVbjxYcSx4PGw0aiwwP3EvPHVse1c1R2Bfbm4ja0UxO3NaU0U6WUxQPmlXdjRpXlMjKi5JaDV3X3Fhb2toVGRvVkMvXUswMXNyZzM3eVhieWs+''@;'; put 'put ''Q256S0lyOCVOS3VjdXpoRzQ8XylwO0MjOSsvYSJaZ1IxNSNwZSlheS4rI3BOdHpLd3pAUDlfYnl0akpne0A0XzFKdzw1OjtUTXBoeWgzPWV8ZG9nU1kuezQ8Kmx9WF1QeCVTMVFaPXpfQj9aeHY6VW9xLCM9TFFRJm44N2U0PShETUBkYElhc0NnOXJ3LGVXeXhFc0c1XVZJRVZvSE5ZZGQ1Zk8z''@;'; put 'put ''TGp2b1RkUEZ4WmtrU0YlRWszInZYaXp9Qm9rODB3PjBYRyRbckNfdHpnQkFjQS5NSGt5bCwvcn5MZGRYMnImb2FNXWEhInd2PigiW3QjWF1WIkZFMk0uYix6IzZHWz9Sa1Z+fkBYckAxXzkwLn1kaVNTPXFgITJ0dWF4VEkxVVtTYkgkJGkzdF5+Xk0oJWVyfXA2altoUk9yYjpJUC96Y08hSUNR''@;'; put 'put ''dipBaz54NzBxb3RWRFM8bkBCVV9sWyZkMEpWL1pwSU0yK3xre11WMSE2N3BvYW0iQyMuMVlSYH0jIWpUdmtLZChZO2tsR29kZml5VTY2Z2VrLno/LDJyd0d7emU1dmZbeSZofi4mSHBnMl5mKmRUa1Z0JnlFbDVVSSRMTCovdFNzZlB0P1hXJEohY3lCcjFDYF8ocGl4aTV5e0J8PmxoUV1UeGNw''@;'; put 'put ''azt+S2VMMkQuOVtmLGRrRGMvXXYqd1RoJi9TVyZeaWUiPV45b25hfG1aM0FKVTM/TVNeMC5FS3c3W3JCJn16NV5hb1crISZXKHRsdG8+Xzk7P1JEelBzVjhDYDYwe2RlUExxYnpWcjIzIS5OdC9fQC9vT3FGXnN7W09hbVBDM2F6OnkzYlAqfTREMzI8UHVTLndUVjRuVjJDM1NYTDYpJS4+I1JS''@;'; put 'put ''QVtlVzN5Oyp5NHBld1RBVm0vP1A3N3V4NC5Yd2ApYzMsbj1GIV9ZIkl9I0kzVyUpRyhTNz1gUXpfPnNnQnNKfEdKPSFrKTA4OEB9YHV3NXJhQWNqbTRZRk92OTUrdDQxaF9aTlUseDEwN2ZjRWtkViJGZ2lEU3BbWVR9XmpyTENGRjguQFZJa2UzNmx1RTEyd2lLd2wuJilCK0o+UkEoVzp7P1R6''@;'; put 'put ''IkUpJEl5MF40N2w2UTV3TjBYSDguLmxbNHNvdyYuVkNGTGFdNV40cS5MXTFmVkgrYEI2T1ddUERTUm9edCE3QUNyeiJtaUAsbTBObSliMCJaTFoqJWM9JEhHVypsZnh0IUFxfSxDZUN4eiU0aF8/cnJkOkY4Ilh9P2w7Pl9BeTteUlMkJUk3cmZzZHIuKCZLQilXMjVzcihmOzc/b2FHLHMoXmYs''@;'; put 'put ''X01ZTF97bWYha25GbE4raS9UTj45b189IiskXzk+L1pmKGJrUWwqYytpVWJuJHV6ai4oKk13Yl91amZ8TXI4ZXgjcSxVJnY+X0k2LmIzMC5PUigsV2h+YjlYWXZXM1Y/Ok83SEwyfS8yYnZVJERVU11mLG0mQEl1WW1pbF15dHoibXc8ZnFebGNMPkRGTk4zVyFYSUJpQkgwQzpSbUpORjVqOHE7''@;'; put 'put ''TGV9NG4kb3ptOjBhQXUpIWI+XlBVUCpzQGJkfCpPTSgycSgpNTBDQSgqTSpUQSwiM0d6RG5BcVNZTjNEfmJkIiRtYCtoJSVmWj1VKXpdNGxLaFRwdldxd34hMGxwbz9HZ3VvVCtlRCU+dT8mfVcqc1lTVjwlbVpQJUIuKkhKM3MuUncySypVY2poTmJ2YilvXSp0UG8qOk0/OF1yVC9aXlhQOVEq''@;'; put 'put ''TlY3JkBsKTJHXnw3fVt6NyQ+d2ZaNz0xa2tFamprL3F2NTphaEQ1aXg6XUc6X35NKUp+cHo/czorM0ZiJiFuM1FGQWwwTlgqMk45am5DRmQoOlFVXlgzPXxafWNPI1IhfS58bUEuV01zSkJ2UVpJSkJ4al1VKVohe2ExdmdFIylGPE1iTjRePV84Y3R4X25ON0RyQVRhamQkbV4lRF8hMHpAOWpS''@;'; put 'put ''N2JPYnlPQCJYUiouMChOMSQ3KClhSW5NbVZKU3oifD5acS9NQ3g8dWx5VU9DeDwxX3VqPVVZRkdKOUZMOCNNJWopUGtefjVQc05fSCZ3OjhvKkA9TiRSJS5+SC9fczxBMywscSIlRkwkdWlsK0dvVToqODRFSyNsN3ZdeXFDfj9yKisiKnlZN15+TVBOfSksczozVSRePX5wO3VzKUpYYFVvKGA7''@;'; put 'put ''e0AxOzhqeWY6PU0haHBLN0g+IXVVcHM6TDk/Y0FQPzBgd3VDdz8pMyJtQnd2MkNwWTp4PGI0ImJEKjk2TSpGUGBjOyFsZkRQSDxMYl44P2NDaTM5SH0/XVYzXTtvOkE9WH07JW57c1l7WTIpeEk0Sys5dHs3cFt7aUxjMkhYX3JhYDhZdFtBamV4fGdKa0NjJUQxcEBaRkRYXmhwSGovL1VnbVFj''@;'; put 'put ''eW4lQmNFaWYhPVhTWCkuakZ+TSlKSjNuZ09aZFlbWGtwO2srW2hwV146MDJ5UEx8VUcsJWpVZkkpX3JnWHE1MEwkN1M4UiswelE+MGkxMylSeFRLK1o9aihXXmN6VjJkXkJiKm1BYUluU0ZEMkduLyEkJUk3cnpfTSoyOlgmQ3sofDJyQ3c6al02cFpbPHowfX1aP1hhcV1DNTRjQHgwSXd8bUAr''@;'; put 'put ''YC44LmBjLD4yMTVwQFpjMnxkfk8mMV9iMilRdzI8PEFaZDEiWUBZTFhmQiZzR3kjT1pEV2csc1ZmaSQ2eX19WlNfLG03XlEzVmskPmpdXjg1VGF6eiQ3OXNHUjpAPHlAZjpSa31EKXpCN1UlYXkiNkp2YDMxSWJRPVhUVGw5S25CVzpKInZPa1tMMF9NVXFEJE1aYX4/ZjoyeGVdSnBGMzU/VzZC''@;'; put 'put ''MkpmXylTJCt6Yj1DUnJvPylpXmJLayFXSk0+ImsyTk16bDg1UGBdL0JXLEg4MnplKiY2VGwqemtrU1peW1VyTiQoVDF+Z0t5ZmNYJSp5PHtoRDA4VzpPbXJzcHJ1VyV8bSpiL3pFY2tOMXEqS3EwSXdhZ2UwTClzU0AsS1lLciUqb0c7bUQ7SSNZa1VwfnpsTmhAKnZoTzFVLDxCaTMlaFhldCJA''@;'; put 'put ''SUNienkkJWUuSSo6RDJAT1Z1OCJzNlk6TSpoTGpqN3BzNmB2aGY8V2FFYnRoTFhLeWNsS2pDaU5BWWY7b3VHd0Z2Xy9oLmRqZFMhYDQ0NyFVNmNeVTlGKmpDZTk4LjZrJV5mQXA9N0teTSsuZ1F8UFtae1UrRTc9IXZDSmhYZVBwdXc2dEdNKkZ4WCIwcypDQUIsRmYmLj9fcWV9SVU3NDZiMXpm''@;'; put 'put ''Wlk8UXtYNyNLa042PlN2UC8hKyhLRmkxRSx4VjwqQ2BdPDswV1N8O0plKUcmKV12QW5OeH5YN0cxTz5YYi5OPClZRSs5JiImeClba0teS2siZkxqYl1YbzZXTTFmMnNHbnM6TlptZm5oVzdebHlfLFEoJnV6YEtUbC8hSntBYF5QM3dTXzdRTlZbemteOit5eDh9dlp6MzpOOSlKe1cpYVQkNkQx''@;'; put 'put ''QWF+UDpCZ2QkNmdGTSpDYiptMm89cFVOaT98WVJAZTFxQkwzW3xjY2U/Qi93bGted3M1MCFvbi4mKWU4JC9dIzkuXmIobFhOXy9+N3Y8P3MsMGQzKTNfQHk5RiJpSW9kfFdfTE5hcGhuOiI3WytAemlHM0duTjkzYlQrYFRTZTVeeW17b2s8K1Zycnh7MEpNY3IyLzdZcWpVI0FFK09dYXdHIz5s''@;'; put 'put ''eXF0KGo1PyhEMDNDQm51OEs5WSYzdDAxPCJOYkkjX1ZkMU0vXlR7QTdIWHNqRTt0bEpiJiFXO3M6Sz09U0ZrZXlCN1Y3TTNjQFIwL1oqbVdzbTtuajZ8YkpvfCR6My5BQFo9QE8zbyRscUd2TXJpKDlYVSFpNnx6UiR2MzhwakpNaF0kaH4/bDQ9MWYoZVA9KVpSTDxeaTEzWlp8RmNidFcwTTJ9''@;'; put 'put ''ODhPKigsUlIlLnFwYHphQDhAMVc8N3lWdVdMT3tXS3J+SGxOVDdjeXN9elJsN0xzM0trKHdsekhRPVRRJCZQWjI/TH5gb3p6UTc/YlBxfFomX1ZQLGliNG1dOEAvZG5pVzI2Wkl8bD55cmhFND5kXytWbXp8RStiJT9fYi5aaTNmUlo2c3siQGtUbipALFRhTnZFKzxAWDl6YlR5KGpCfWtpbW9R''@;'; put 'put ''cC9kbDdDM2lQXyVqdkZiRjNrZTVPRHE7ayhKKEtSbytfYTopdmFeOXJRSXgqMHFofl56I24wcUp7QWFxKygpPEBNPlYlc3w4SzJoUjtwbkxddHpxYmBlOihYcV16ZyllUGx1bHt6aTZwTl04ODpOLlU7KVc+dnFWTiY3MT5PWlRsWCVKJlBaI2h+P35qO1UqM1VdOTBZJnZLclJmeV56a2kiMmBs''@;'; put 'put ''NjBaPylyXjhOMT0wc2Q3PWlsN0VaSGZ9Y15SUDFxLn5sQHU8aHlkYXtUdkhxI35LZHk5aC93QmFEd2x7XksyQH5vPEE6W1ZzYGFJbjQ9KkpHM053IzhZZ3tyeWdPPEkuNGY4KlR9SiV9WzlxO0B7QF9NPlpxRysjJHtkbiZNUT5UJUZVR2dha3AwbHslPnJUbD8oJlk6JS4iWkQ3XTUyVSNpUTZ5''@;'; put 'put ''JEIlRnNBW2kyXmwoSiJaIzMid3taN1IhIn5Xa2ddVTppOGMwKURIUGNpNFIiI0FAQyFXK0dNciNUeVdpQTxCSkR6SVFRN3lLdEtCdUUvTjxjNHJaTGgvXkE2RURQN2Zrbk10Q0JrSXEmR09TY18iVEJ5RXEpNSgwQWZDXVN2eiozLj5jdFNCJUptPjpDMig0QXRDJDBMSiNqUGpRLz9oZiJjQjJL''@;'; put 'put ''d0AoLC8+ZHQ/WCVNNl1AYnExTHRARHpiXXUpKHxCW1BCOXw7QntWdCJCZGhVRTEoSEJyVDUqezllIkpFUmhCPVtRZyIjQz9yTn5ZfXFJLChoQmFXKEhBZiwobkJmWGhOPTd4dE1EN3VyUDQoeEJwWmk2eVdwQT5CZU99NFd4NCgjQmpQLDc8djAoc0EiQkRQL2xMdjd5eG4zWEZROS9rMFN0cEVB''@;'; put 'put ''a29vXjkwdCREfE5HdV1RMXQ0RDY2Vng1KGNDQlAqJV1RMnRARD4hV2VeUXV0ZkNDZXhsQSR7OWJ0RkUrU3BgXjl4IlZFcykmS185MnRkRVsqVng3KGlDQVMpVV5ReTd0QkZXelhfOTIiOUVfPEBAe1E0IltFcW1LQ3xRNSJbRUQ/clA5KF5CRktZLnBJZXRPRlheIl05KDZDVW9qLF85IyJHRihy''@;'; put 'put ''WDs8aEUsfno9d11PVHY2Uiorc1k1SGJybnhqK0F1Y1FpeXFWM2RaWGVJS3UzIXZMbkVGWElUTiZLemJDKmVROEg+eit1WXpKLyUyUk56dkM/eTg4YWpOWDJReF4uSS95I0NAclB+SkI0e3xxcSsmdWBWU0M4ITJMUDA2VztIVGpWWGJSfXVeYS9UZGpYWDhPL3deLG0rMHV7aTNYM1I4TDtJQzFs''@;'; put 'put ''eG4rJHU3an5SM0VweCQhIUxHSEFvQUBUdjdSJExlSCFjY2ZoN3t1Q2V8alVqcVgkU2Npa0hAeV9EMCM4OCQhKUxMSWZwOjFbeVZFUypPbXErZnZxbWdNNFJWenBFdClPbWNqNVhRUyIhbUVyK2R2Kmx9QDdSZ2l+RDgmOThyK31ZaFBwQE9tcytxQyNYIlNvbjAoU3Uha3MwM2Q5WD9TY29tSG5j''@;'; put 'put ''XXhvbT1CPU8/NCxKfihdZG9jZmFKVWkyL09dNGNLbTxeOnBjYUZsQHMwNGQ+WFpVPl9dZHJjaitreWdQejc9Sk1oYGhwdyRQRmxaSU5WY2ldQmVqJml0OCooR0UyJmM8YHl+RXU0VUE1V1JOTlZVPzFFfGNiNTd2NTM0Xz1CalkrR2h2eE5UYixHIlR8UCowfGhpeFFpZ0QxejZdOGtZZX1oUURy''@;'; put 'put ''eE04PCQ7bkQ6RFQ1UFBmaikiRSlKSThIPm8vbD13bkN4MlRrd3FURHZkU0d4cmdhNXBnUSksS2t3WldHKGBKWF00U1tnd3BEIUdfSlRFPEtpcHUlSG9QVComRWBTLndpUHlMU3UpRWB8XmAva0wxel9JQ2lQX3VFfCokVml9RDclNWxBIVtCKWwmaSwwMWdVKXNMNkdTUU8lc3VEWXx6UjJbKjZs''@;'; put 'put ''QiFJQ0Vscyl1OEYpIkl6NzQ7MGdaKXhNcEpMSTFuVURYbytHIlROejpsLyQkdTZqW1JNMTJuVSxiT2t3I2txMlQ5fG4uRG85eWF0Z3MpRlFrdztnLkBsZ3opYFE7RGw2RmJpJT8qcVJZTVRRKC9VUWU/SEpwZjkwbWchKWZQK2dkOHRnIylFVFRyS2IxbFU5aT8/SlQqQXk+bjdIWTlFbHZKLCRo''@;'; put 'put ''cSMpRmYqMDEzOF9SdmAoWylvSnEpQSE0X1B2c1JqREZMOCtMUFtCNkRObSQwSWJvfU5aQmZNUEpkSGowOSRrMkVQUChrNlNMZmNxNylJSlQqd1BTVTkwM0s5bn53XWJrITJldW5EQ2NoRUUrJEl1ei9EVEpmJSkjSmM+Il15ZHNQaj9WRXQ7QHdEIWtDL21le0JmKil6STxnU05DZjZsRSF5Q1lw''@;'; put 'put ''e3VDZkNAPUVFezVsRiFFK1FKQF9YZWg5IWcmPyVEOjg3elM5RT89RXxjb1lBZnt0I1M3alhlUWZDdTFRLER1UEYpOkl3MFk7RGk1RUlsRng7bHhuQylPVjd6JUddPkd1JnJQO25nbSU5dnpvTzpqZ08ifkEid3RVYzhqNj1XQWl6RkFFJGdUfH1lTVBLaW9JeFcuKG5DY2MjbntleFdiQVVCYEpA''@;'; put 'put ''QFdlImkxWyI7eShkQWVCdFJmek8vTnROQjVKT21tdVBjUHRZQm1LT3skJDIoIUFwdTxEM1A0fW1CNn03RjZXaEF3QjBNYHg8dnooa0E2QjlSdTJTcTw+VyJCQnNJViVwMU50d0RESk04LjdnIkJFO1RpNi5oVSlsQn1jT0d8ZVN0aEViakB3XVF0IkpFYix+bDgoc0N2Vm4sOkkueXxDNHpQXmJq''@;'; put 'put ''a1grUXNvNSFYektGWzxySD1PUikqSC8zfnRzUC8oIUUhcTddfTlQdjZSNGN7QkFmNilOSCk0N11BIWFDPm4+IVU5KSg/SnY0WjV0OCwodUVLR0sxR2lWRVZtYlAsJGN1X1ZZdEx+SjF9JHl1TmFscFdRVT90SDlqSkk2bmRFYSxFRT0kYCpuSHldVFF0UiJCPFs6XT4kJXZEU0smfHhIdEdYYFFu''@;'; put 'put ''WFBjcW45KW1FZ292ckBtYDpXdGNEVmhMdiRZYTckJDQlYiw/RGNDPkV9OC40KigwXSE8Yjs4eWl3NTAza3s5eXNYSF5mOXRAIjhyJmc3bDNDWkR8UC40JChNOkVIfWV3aCx6fFA6V08qKj9gfHM4Yk97TXNlbjR5aSR8XXFiO3N5OCJpcEpPIThzTDl4XmYzdDgrQ3dXa3JtciZ0KX13WFRmbSJT''@;'; put 'put ''ZEtUVDdAPng5VStCeURfZFAxSGc0P017ajNWMS4yOyp1U25keU87MD8lXTcue0EmUTtvXSE5WTpeYTkhd1VBJn0wYjBjYF9kQjhmUjRoKmlYZHU2QEsiN0EuYz5fZE1yQ3g1Zyk/MyRCOExrZipQfEFlXSxxZThiOjlMZFVsekZ3KDIjO2dhM3dxYl9XMTA7OD9PZE98a08zOWJwNzAwT0pZMTZ1''@;'; put 'put ''YEw7JCNCW1dkbWxaYVcxYVlXMXI5fVIzMDNjME5We0Q2ZSFWWjxMRGVPZFtCK085b3Ekdj1LWmUlQ0IhR2ZvVmxeR2QyRV11XSIvJjs9bF9TVm9WbDdGVXRuOzNCYTJZaW85ZDpKRVM3PXU+NCU0JTR4Tl1QTV1Kei9HXTJ7R3hPTkhjcHRPWTNiUlozWGI9elUqaFslIzpiME5AOjFSVjhCO24s''@;'; put 'put ''fEI1NCUydXF6OVVkKzM3b2VRNSVVcGo4WlFyVGIyOjpqRHtReHRpYGEoKWJBaGVndjl5cm48KHEwKCxrUHQ5Wz5HZltqalBjPX12bSMyfmQiTz5rJGdwJF86ODdnVF57PH11cTZeSDB5MHw1bnw3MjY9Umt0cl0sQmhlPms0dVY+JUMqcDw8U0B2OmR0NDQ1TnR8d3IqSDM5dj1SR3w2aDBSSnFe''@;'; put 'put ''I0QrSEtqOHRUQjI8OWJgKndCakk2QnB+MDFBM0hOK05eI2JQYV9nQnxIQmpla3kmUGtnZHFZbkVDKCVtN3YqIkQuY1FmfWRTW2Yqajt2ZDd7ek5SKktROjdYMXBRPz07ZjM+UldPSGkvbW8zZ35DXVV1Y3NbRSYpKDQ1S3daTFRYeTBLfSslMCpudEo/WCFmW35QTTlVPVZoeTduJDdeeC52IX57''@;'; put 'put ''Pl02b0RJVllLNTE9Z21gbVAwQ296PEQyXl1VVUk8WUVyQFk8aSV5IShvcHB6MH4hQ2ozZWBra3AiOWAlbD56UUl8cDkiPTlAZjckJWBtTkgxPltmPz4mJV9xI2kkR0dqeiZaYWZMYXk5TUo7VGU2fiVnRHVgJFhHUio4d3k/U192aEhvbjx6bGM1UUFgZ0BVcntKV35EQV43USprPCN5RGxPWUxx''@;'; put 'put ''PWdLTGVEPVpPaGV6TWclQGZiN1UoX2I6SzM7NCFTMDdvZzpdbUssYSUvV2RuMFY5eGNYWHs8bGEhSDgqOEhaTnclOyMqMW1qcywzaXExPSJ6JGU3Ii8+fDtOXzg/XkdSZ2RsYSwsS15tN2QlTV1lTz0qaFFTcS5UXX5vWjJgODBscHtgbiYuYktEOCUlbnBkVSFvXTB6bzp7ISw7N1defF4lajMy''@;'; put 'put ''QG45MltlfW9Xbn04UztHMWdscTlUPUJ8NztXZmtfPnt+P0FQPDd7TTo3UyZ1ZHZhLz4wXVRyVXBxZl9sSHF5NnE1SEtjZSxoQTY7MFR7QFkwPGpnOnBbIWN1YXR8ZyFAdXE5LnYiViQkSk8yJiUxZUtkKmNbSDxvIitXfjpdKi52ZjIpJUxqPmN7dXFXZGZTRGU0NSg4cUFDLlZiLCYsbDk5N29v''@;'; put 'put ''cFg/U0UmZ2lwPFtEQDQ7YzZJQCkjRHVoRnouLiNeKkY7Oy5iKyU7PXNIclIpZVFpaGUqRWV8Z2ZIZyQzbX41IVFbZyZWe3d3NS46SGBYKCYlfCQ5JGlbSGpLQCVnJjhNUy9MXklHOHwoVmMsYWRwLCVATzliWFBjRCF1ImVWM2YhNGlCXWZMdThQPHFTImVkIS9kYUBmMz4hcWE/KHF3K0ZnTyN0''@;'; put 'put ''XkdoZV9oVyoqI0V0OF0uMEFXZXA4XUdLOFVOcztOOWJXaSJVelhGYjM8JS43cFFTUCsybDEzPzE8KW0zTGF9VTM8JGJHTm0/YWBra1FWPnFdVVJhOileQDBISzI6KShALEcwRzo4QT9nVCxHSU4kaX01RWZbb2RlN3Zrak9iJHVPYllhfVU0PC8uRk4oIV80UiMyM0xhfVVuP0JALzgrazNfMDAu''@;'; put 'put ''dzRIVDVmZWtqUVZWbDBLblZ+a2tLTXtHTjQ8JV83dk9iJHV1YjJwQzhOVjhOaCkyMzBHV0ZLZjJwZlZ1MzF6aGY0UyUuZ3FJQE1ZfTVYMmt3R04zPGNeMDBra1hhfVVtP1VQJS5taztVRG9INTM8Lzh1MDZxUiNGYWJxZlYoN01ZVSNuP3s1ZV08KWA2SCwoQEVQYWA3dk5ZVSNOTjNmJl9dNjZC''@;'; put 'put ''PGF+KEFlPkxQRCZ1NVheP2hoRUBdVUJ8OEU+b3EvbVU+aU0jbThSdzBMZEtFYDEvTF4kdWFzZUNJQmxnd0tMY0JoRzRDJi5zbz4qWHtAOXYsfD1WVEtFYCRufEhNRj1WUloqbig6IVp8MEkoW2NAUlg8MH5XLiQ6TytOR0liM2kuZkFxSHBnWEFWfm9daCMzYXksQDsvNmBfc0VAeSE7L1ZfP0w4''@;'; put 'put ''bDxYMnNFQERvej1QPFArakAlQlomcj4rJTJ2IzE4VzVLbnBeTGdMMXExOmRKOVhVN3NQRXc9KFFWRWdbcGAvR2FPRmJXWV17JT1WPl0heypLNixSb2opZUZHVmtJW1UycXt5NyZ4YEZjPnFTITcmZ31qeSxAXjQiTm5WdHpHSEZgSjNaW2tnVTomLEZAYDRuNnVWaUtEYyVoa09nYkpGL1E/Ny9Y''@;'; put 'put ''JENHbzxYVGM1NUljei4jczoqZ1hsUzEjdD08WFQkdD1hNXVaKSpfTERlKSo1VT0rJmROe0BbMzFSJjpPbE1WPjo4eiRVSjF2JGMiSE4+UXVLOn46b3ZETmpZdGl2UzxOIj10WnQ2TDhYOk9idDZ+RyRtfE5adF0xbV9dS2tBMihZWSI2dnArdX15Mnl5VWhmJEdtelpHP001ayhdeUw7TihqfkB7''@;'; put 'put ''NlBdemxBZVRlImpMTkRnKnpuYUxnPzA2OSpKbCh5TGpbIV1qanlWbm1bT0MuZHU2bTBMQEVlZ2l2KGZ9Ojh+KHhMYnQ2OVA/K0B4PjFpVCJ6LE5MVlF7YEcjKylNI0dvR242WmRlME5lNj05TDNvfG0uK2M6eDxRSDExeShOVmV4aH1AUSJoIXVuISxuIVVFI21sfGFwZClpRXM1XXUja2NMRmIs''@;'; put 'put ''RlVaPTplMjtMJnd6ZXBEbkFwKW1hYlUzdDhNJjR6N2JiZEl7eSMwSl5qU1l1I1gmQjhBYU42NV46ZFghXndQSTJ2cHwoZ1YjYkNLUnQ0YlMvZFN5TzBOSjZtZ2Y6NUg+UGw4RV1rPio2RU93OSsvezFmMSxuR2cpYyoyPWFKNm10QCFFPHttYUMyajEicSN0WX5hRV1rbE97KThUci4hQGFFfCpg''@;'; put 'put ''blJvNXZhKnN9XyR3OU57L3c1YlMscVRAPCZfKCZgZDByLHo0KH5gcChfKC4wRG5gSWBCOmRPZzNMNlZ0SlAxMkdNUWJxbEMyQSkxam03ZileSWJSPyxuSlhnOnJAWUtEaGs5W10+R2ZsIzVmRDBQMX1RWiFxQGQoSlVJQkR5V2VQOSljKldycmNUdnx6NHpaLCNMO1hzYXc3TSovUjJ2OlJtZlVe''@;'; put 'put ''XkhYTl5aKzJkQ1ppY3R6Wmh9Y3tFS3guV35TQitgP0xIV2NSQnE5R1hvUS9Ie1IyPXRse0F3T0ZRYmI3ZVlPNV5QU1pPNWcwXXczem4wW2pRaGkkaV1+ZDJ7Im57aT16ZkR5eClpNSxNQioxXUx+eCFbRjk1dWhPRil0ZCQ2c0lBUkc+MlNRdzw8K1t1XWZYKislTXVCNUV6P00+SXVUJGpbImtP''@;'; put 'put ''R2dYbVRMOkg1Nj0lbUE/TEdGNVMmSSNmTDUuUyQhUGBrNmMxKk82JSlGSkIyVH56OnR4Q0l+OV5Aam1PdkRSQ2xBUlh2e1peWWRFfTpkWD9rM2RHcCUhQlpDOHZTQjh8UFokSHdEKChRTFVoJUlOOytYRj9wLiZjeS5Bczt9TH1WTXxMVXV4THxYd3hwWlBUW2ZoZFtkQ0hZLk5hTlM7PXBqcHRa''@;'; put 'put ''aXBAJFY2YzpFKiQ7UGVHVTksIyFeVGZhaCVUXyJ5Wks1MTtVQWw+fDQwOGVkYVRSSWt4aSQ+LHp6N1Y5LjZIfXc6W2NjOH15Y2JgJCJXdD4uQ2RjbVRaR2BiLCMiVkEmOjxyVHZNNzloeWdoITUpcFFASzdXTHRPOFhbN0wsX3lOUH5pM1tzNjxXPDlRLzc4ODQqZn06T2pVRDcpP2h8Tz89TDk0''@;'; put 'put ''TG8jXjd5ZnVrRWY8dlkuVmdXWHcjXU9xTmZkI1lqNSIrKmgxYS9ENzR1UGplUXNXQ2RKTkpdeVhjTzwqQmplZXphL3xhYm1AQ091elh1XXRaNm9KYnM6KyxhbWg5aWVIYHJ5cnM1fDt2czY8V35+KjkleSYzdkQ3Xzd5K3I3KlIve2EudjFSM2p3T2g0UXxANSYzIXlmQDlCUyQ0ODU0MVckVyNx''@;'; put 'put ''fDliSDVYQnMsKkwhVSQzUCRMJUcoNV9DSXdTIXR6JUc8TkpYX2hXcTVGU3VoIU0uIiY6WUtGSn1RaWReVjdSI2B8Ilh2TChuYmssPXgrI0dnU3taWihLZUdeNnZ6WkJjdiNiXiwsJkZEc3Z1Z1JhYiRQTCtKcGZ5SjFnd0BhcGN9JFBTZilBPDdiRCM/eG1dMishXUAwPis3N3FMUzhKK3BOZGB0''@;'; put 'put ''Zms6WF9dXl49Zj90QElmdm84VFElPm1ibD18a0tlaENWbVNyLmQsOC5oLHpyailEI3BHcGFXZCRsdWBtVj0pPDxubFhOUXQiY1h7cWpYQE9pdkYsY1heTyNXZjs/PTBtQlRveTB0PHR7MXFGUiU+R0koUjU9Nl9QWUJGZD9rQWx0Qi4iViR6XW9xa3NFIWlybUZBOisiVnlka11BO3BaVy5wL3dV''@;'; put 'put ''T2JvWEMrN3oqIStZOmFoXXVFV0RgNVcuaSFiJEYhdUM2eXYjezBUMkBQMTZzbG95eG9JTnhXbUY/R0BuYV53OUc7NSFfTmYuL15oWyxtX04lPn16OTZ5M0FdNT5Ibl49U0EwN2M6KFdyfXJpLlhhYzE5fkYuJlk3YVBSXi5YaDF+KVR0dm9nOGpvNEN5Xn5MQzhKdWRoQ2h8YC9mTlVFIV17TE5z''@;'; put 'put ''S0Z6STlHbjVqWWVuOjV+R2V1WEZWPnFpPj8rSSEyflhsMSV1R0pJeXJvWGJEJnpRM2gqfSZ1ejpmSF5IbyluNWJjYU95U2hTQlpRTjBKVjhgLE16TWVvR3ZIKFZEISR7dm9mSz04TFN9d0pAe2hMJjh8XVplRj5uaSNyeXMlOD5EJjZuJnRmSVhnL09aKFI7VSFMPWlAa2UvNnsyLkJbXTYhUF9M''@;'; put 'put ''LmJGK0c4ZyUhdkZVWkc7ZH5dJj9EJF5wUS5kanAxZDN3N3RvQU97PXQ6Y0lbVDs2TD1CQlJwUExMWismZCt5ZTNdQnxIJERjT0hQMFozd1NaR2pxTWRbcUQoa05JbWN7NjlAS30laC45MUMxfTVsOmNkK10lRU1zXnZNSH48JTcwbDs9dF5uL25wVzVMJSNTVkl1UWouSiUhSEsqOmZIOlthUXFC''@;'; put 'put ''ZUI4QW5HOVR+W1U3ZHhdb2lpRGUkV2phMnN2X3hdIzV+fTkhZWIyRXMlNyMhbE4zNnxwVXlhZShlMHpCNTZ6JUYhcGFjd1Y6XkkzWjNCPzM8XzcrWTx2dGZrX1pePWhzcF16a2tSIkVkV2RQQ0diOFQ7VVB7SWxIXjVAeSVFOVcxQCQ7QVUqME1jPGk8WCklUHZhWy9NXTNJYjhKKkx3ZyUkKEVT''@;'; put 'put ''dFBzMH5Gc3Z6UHNiIkVCa0FbdXlFa2l3YEo/amFIPmJ1K285UWp5Uz9qPzBYWz1qczBSaSthQEE5bjNYeWFXY01vSDteMSVMRVddXj5nKF4jMW9KbV1RKj9GMEt3I1IpfiUiejpDcSNLKX1VfT5qcSw9NG41UHthS3A5Y0dffkBoWypiP2krUSNxS11FVzVtMDNIa3xMLGRlOWM0XyttX1RGXj17''@;'; put 'put ''Y0JxYzpJeWVPNWlEVHckVy5qdC9FaWM6KGlyezIudy9FYUd4Pj52VThRN2w0JXA/VE5mUF17U0s9WEchaHQkZjFINzxjPWYjdTU6eU1uYVVzXXBwKl4qQl9DcXR6ZyM2Wm96Mj1gPHFLXzZ3VldsLzdvRF80LGtPSjRaR3BBKUwzbF55cSRsKSFidVlzWlVAek5hYzR+blEyLnk7JSJ5MVArYFN4''@;'; put 'put ''dz9mZmNDMGJQLmVDfmM/TShNOG8uMmI/aUBmdFpjRDN9dy9Fcjh+d2QuWXkiUFZUUm4wYlgqR210OWM7RH5jUncyaj5URGljSnpXb15jT1k6UGZvT2I/L2kkUz1WMF8oZ05TI3BPMj9FJn5dej0/R35wRDBfKi5eXSsyTiY9Y3paa3JLMC9pJCUuOzViRGhbTyx3K05ebFg6YGBzVD0pQGMyPjZj''@;'; put 'put ''fEtqOjNJVCFbJS49UD9OWG8yI3xmYlQuITxvTVF7VT50X3J8eXN6YX42WitCVU1TI3BPJlcxPS56TSh5fDZhM0cjcTE9Lnp9cEV4OkdsRnppZGNJfSgzYTwpQFFVYCYwTiUuWnkjUGUvVk1wOnNJMiQsSEZVayxCNls5WFcyYTNHcUYuXltaQV1WOXdWbERtMUEwOTZbY3h1ZTpUMDQ/fDNiVFcj''@;'; put 'put ''XnpbYjdKelpMR2EuSEtaY0VrYjpvSmJLSV94U3ZjfTIkN1ldQjgjUmE5NV15dnpEJVpsKyVHMExINClARHI4Z0tHW0dOM2g1PU5ZOlVUQE9hVXJpKSteKE1zIXoqRHgrZzhubX1NXTtoNCUjejpIWDMhaHpwR0JdWHdpak5zWnl7Wm8yRzNbcDdJPj5lWEdIOk9gTWovKkJMTzN7ITJOd0FdOEgi''@;'; put 'put ''L21IQltTdWNTOlohLjsqKl5ga1hvRmkvcjhFdl97NmlmcjMlYStIa0dyTCYjNTciNDBQblZ+I3pXUVlxcExWVjNdV1poYWI7S0pYTl5oSilpTSI5eDBkOjpCZWlTb0k8Ync8NTlfTFAlPiMsR3FKSHV0K0hoMUp5WDJMRVRURjEsZHFzYGFJfCo7em5Dejo5STY0MTdZKUxmbjo+fHA4LDZuYT9N''@;'; put 'put ''OC5sMncuNnVdYkdyfUdFTj1CTE93bzZ7SnVXOkJfQWE3QjM8c3k5UFRxQixTITdiYU1zLC5tckNSKn1vUSZoYTRAV1ZlPyU1ZT85cXpRfl1KZkNgenBsRzZncDgjTHx0JkZgVUdwSUlVe2ZEKm5CKnIjQG8qWFdNPF5CIzdvRzF7WzwkTkg8aURFTlo4byl2YjMzTTI8WmhidTNqR3I8WiIzSjNi''@;'; put 'put ''bXFObnF7SEowZ3tZMG9lYnVFd3xQTSM0OXRmSCovOEp3QW4hUCVLOjtwMUJXfnA3cCxtNHNyYnV9bj9uQ2R0NUUhLmIyOU5jWyxkbXVnd0Y1Wi4pdXE9bmMldzJePlUxM3VbeWViWkRUe3pbcD1DYnVfMVFOOkcuVDByI0crSnBaIzBNImJVXkx3XXlxYnp4MVZ+IUY5bzxSaHJ0YnBSSHVeJEI+''@;'; put 'put ''NmRIMUEqcns7PUJfX2k5VXJ6VUFvTEk+QHtaUk5GOypZRUtNXWgrR2YmR2x8QnZaTHR3V3xYdEJwNDJ4IyglWj1GZSR2Wj1afDM+MWd9eE8vJTVzXjBAIys4IVc/M0tkLD4rRnA9SHdbKEp7KCEoN2tjQD5xY2YieiV2VDFXNnxTZWpxaz15N21dbDluWFksezFiNGNWQz5naWIrc1kwcik3WClp''@;'; put 'put ''ITw2QXFycHxwTXhHd0ZyeiVLZTdOVlZCO0A2fU1NPmh0OkNtclNfYjJMKFR5Y1VRNikjcDBrKE9IX3hfL3MsITA+N3E+ZVRlJFpPODpnUFlFWihfdS40KzN8VileIXZ3dFNdWzY9VHhvWTFPUXtpOzVtWTs2K1p1N3ZZek9jQVlyWSYqTCIuJlREaTJXNUZpb3Npb1Z+KUkhKCZdenxqfjQ7YmE+''@;'; put 'put ''c2MyOyRxWTckbEtmcD14YUQ6VXQvazZOTXRmY1liajBDaV1GSHJ+ISNCXzp1Mi46LEZ8Uzxkfik+KjY3fTRWbFFDWX18N10vMy5WcllIWU9ETi9HQTpVJkFoeV5xbVhGdT8qOHJWLlVlTWVyNzViSF9MeSEoSy5TIUxRdE8ka31kbHBfW3A4WUpmblo6W3QvWX4oWnNAL1t0L00qaClWbDtwN3lK''@;'; put 'put ''dUNeKHF+cjVmS3cyRy98Rjs5bzBOYCtkVV87THQyPD9PPWRjYDt4RFlOSTlLKz5jJllkWyt7NFk2VGdsbWtoKCU6NzwqblFWNn02LmlOOXdgZmV8MCtCPzczSVYkTX10PiYjfTpKWlBEWWBla35OfDYiMG0zTWJjWzI+b2ZmeFpfMU48N1tfQEp8IXp6SjJpMndhODJqVEA3WnYyO0txNk5zZUhb''@;'; put 'put ''PX5AU1VgSTRFVzlFW312TGtQbX51JXZUbHxFTXNvJjdPNDFeaiVDI1I4JjR3M2c4X21aL3lZQz9SR159NDZWZmQ6KW44NWB0L2RQcCVEQnFmVlJoc3RSY18xT0ZgcWNwRXNAbkVuOTNiWGRxOSksVlJ8KGVbakY1LCooXWU0KnwpTzN4JkdFSi9fMT45QnEjMnIsS2VjMGNpazJgLnllZ1JENTBz''@;'; put 'put ''M1FNbHJ7diEve0pgO0s9Wi8oJkt8UDNXIz8zN28vRkAheER9WDRlbTlDMTorN3spLy5iQl1CWkcmflVdQ0RFMyUxYjI2fEBvZ1Z7cXpReyh5TSZrXkVNKGo4Zl8wSllNaSY0X3BmNmJROG8oSnY3VnR+OT9LW3pGVT8wOjA8Vlo4OTN4LFNSV29vOSo6Zl1WVX47aEtSeyY7TyU6enlNP21xQEtV''@;'; put 'put ''X3B1UkVgJkBiSlNHQEVvaWQyUkdLTUgxeypfO3pxSktybThPRiZkcWVdNDZiOlFicDliSUBdVlVlPDZWIVBoLkorbWE0TmU6Q2xsR3pjMU4vekNHRk1aP2s7dnVlMHJLTnI2PV89Y2t5OXtEOWF4fnREfDBtM15NU15HNkhhZD19Tl5pOyZtODk6aEdtOENEcSNRTk1Qfm9TYzsuelY3TFY8S2Bo''@;'; put 'put ''LFswV2sjXTkufG0vWlRKYDNDR2BrNVU/N19QWSZka29WP198TjN1NTN1RTZYbGwrNXNISmJoVnF8aVpoPV1RY1dZQFRRdE4lTCVqQDdvNkFPZWsiVU87K1swJDAxcm9fPWhbR01IPmRWQmguV0FGXzN+NVVyNUVkP3h1O1QsR0pieDFQJkJ3cmEiZXA9b2tqOEs8KExaMipGRnJbYUoheHU+dG9G''@;'; put 'put ''YFpseU1gdCpUI1VTZ1gqSiJVUl8sJkZGO1VZXWo/YmFAUiY5KiMyaSNgbm9bVHxIeCpMbDgvQ2dDPFJvaT99O288Wz1ac1dRI0tqcUxgOyNTOj8zT0l1TU0mM0dFcX1hdHFzKmYvRX4xcE99PCp7MFNOYWdkO0IvNzMhSTRwQHZxRnU5fTM/enY6TzZJbDYzR2Bga2VRe1VoNX0wQVkoWmtnMHUh''@;'; put 'put ''MV1OYU5NUEIjXlA7VVhNJjU3THZnY1BFNFtIZTlIW2dHKWFfQ3ksdEJzWn1rTV07MW0zXUw5KTIjUyQmbG0uYTY6RlNrKlkma1hsXTZFbk0hKEA1dkxtYTNESnt6OzlYc310PDBhckJjcDZwWWNgSGRoODBHNjF6fjQwQ1NnM3NfJF1dKyRiWXZMYkFTTTN4RSxtay51OD1YYTw1ITc6TWBtYVZg''@;'; put 'put ''Ky5uMF4zfWFESU1KR3xzamwzfC5aUmUkRDBQcEZZMnRNfCQlP1YsVnklYlJbSyp2ZjEuNVQrZTVKRXhxbiMqTGw/XXcjeyspJl1eS2dLQkZCSEBSWElpbEFbPTAvQl5hdUZFdG91cG9RSUx1fVFhWSN2Y2dkO2JNRlFFZFYqP1A0emgvcFJmWWYxYHxFalh3QGZtYXY5SEo7WDNHTGpmMzg7KTVD''@;'; put 'put ''YHlzLmFjYH06ZDA8aVpRckNUV1tIZk9JYH43YktMMFI1NDlCYXovN1M9K2JfRDtNYD9jTVg7O3RNbCowLnxWfHlwd2xxPSN0aCJdNXJENUtFcTBFPGs7P2YpbDZBTC41QnNMRV1bLi9+InxSRylEYi49NXl2XV9vX3shUm9HNW9CRDU1Vk0kTkZ0NCpCNWtKLDA9YGpYKFplS2krLmFJTHRGUm9t''@;'; put 'put ''cH1ge1N3UyswTWIzJjklS1pLO3o9IV00NVhoVCZ2TlFnRD43PDIjNm8oWE9jLjlgRmI5O0VfSXYmVypYW3JjeF9MU3c9WFJ8T21TcjhrYzJ8RnxbeXE9IWBGRnpsUHdsU1k1PGtgWWdvamI6Pjs4dm9dIVNiW3JqNzpNKHIuWXJnZjoufHBjYVddTmIkcHo7RkB+Lm1hQ1dHVjorek46LEdaZVhx''@;'; put 'put ''VldAXj1wbEFlK2Y2YiJRQzdpRiNHU3JueipWOFlUSD5YQiphNX15THxBd2t7RDN2VnhKImBkL2F1dSFpXWcuSkg3XlFlUkRfNnpBblFSVnBaWHd9RVk3Yl0idmI+MCI6aGhUOjk0XWBJZkRfXjE1emY1VSthMH1jMjk9Qzt6dGw5KyFde05AUX4jNn09bWZ3PlpseU1GVz0wJG9hZ2J3ST1KUUle''@;'; put 'put ''YyJGdjpmci9sS1VlaENbVkQxUHtUI29jRXtCfDprQGZLMDorIVIjMiNhNmJgYXJwYHpqPDM+NjppbyhqdEZ4bzovUUB1QDUvUUBDNmk1d052ZT9SPilQd0B6My5OKnJbeGlzQE0qIlBGcGVRWWdYSE45b0hwbGh5UEljflRYbCROYE8uMHVaOlt3Vn45al06ODpPN25nWXdGbDddd2psbHEwaUcm''@;'; put 'put ''enhwNzlLQTc5TG94SzdvQDY8KUhzXSxBaypqKGlXK05tfk1pOD4rKV1pTzg6OmRyWSJqdmg/XUYifV5lMzdvdFE5MER+PTB2OVU2Tl8rNyojb3sxN0h+SCtBPGArUnBFKHA4Y0t3dTJwLlY0el0wKGR2JXV6TjBBYmRBfWM4LkF1WVl+TV5NSDUwZU9OfXBKNmtqaDBCOyJkUTM/PTs9WV15WWpd''@;'; put 'put ''bWRfcENVQ3BOOH01W29lZV9wWjJgNzo6akBzTXZxekAwY2lvQCF1XV1eXXsjaSIuM2I6UDthcVhGTFU6UCM4aSI3OGo7OGoyQFdzW0E4T3FiPnxART57Wnova1siN3UwUEFLVTphOkcrIzZAcWY9KTN+bkZDSl0kRnNBOyFTcEc8XjI1fjdXfilUMWoqRHJvTVhDKTNPcXI1S19qOWoreVhIOlJz''@;'; put 'put ''QihQMHZDLndyQFFsPmZZUlFPLmdAb3o3eilzKlVAeGA3O2FqTVpfc19SaUlXSDRgOnE4RnAlN2JSO3B8fEJPaTkpcSpFKFJ2cXltUCpEMDBmYktFUyN9ZlI6Ukk9YXVaXltWZWB2SkdDfWBifkVURUVeW1VySnI+YWZ5ayF4US9kT3d3YHZKKEIwdShxYEVtUkQrJishTihacEZTUlp2RjpBcCtF''@;'; put 'put ''NG5OeG96aEdkSV1eQz9JSTNfbmFFNjFvdDNGRlh9Vm1vemxoZ05qPzs6dElEM01Ed05WITQjbSlYamMzYW9pPnBhenY7U3NyalNqP3BASlNnMH41VjdjW0M9Slo+ZUNGdy9xL0ZnIU1sOXRHWzZtYTpzJi5MKlgzWT5HL18zOnZxVXxFd05Ub0l3MWZQU3FPYU5eOkMpR1IoWmBiKm1YcE9JZSI+''@;'; put 'put ''WjFYbjxwTGZ7fU5yXWxqaH1xZ3J6PzNCL3cwVnd1aGJLI1JlcktwVTY3dXwuW0pGQmdxU2QxTX0+P0N5WEchbzZ3NihQdjJ6c2BFXjE4S2AzYTxDdTNrXU9+Q05tQyk3U1I/ZU0qY3BAaCRjdzZ5NE1rLDB2TFJVc1I2JFYhanZOKCtWd0ssdDwoXTc5ek55Ln0wZ1EpYCYmV3pCL0BYMzZqayhj''@;'; put 'put ''Ykt2aEVLdDclM1RfQjs9P0tzdm58LyMyaVE2bVc7fFA2fnpeRDIsW1JlX15yb297UlAwP1s3Z0Jvb2NLfGRTUEFYbGwoSi96MEdhR2dVTVZnL31PK3xkLC9eNWR9IWt3b2tpUihvaWUjWlI2TTZkcUcza0NNRzs+ejxrTH0pQ11HJUFoR1YqLl1qRGU7XnssSHsoT0w6Pl0+XU1QemJPVSNbZ3cy''@;'; put 'put ''fSgrbWhpZml3YHJedlZJSGQ2LFUmJUBFVEVFOTB+L0RRfS9maylaejNiNi5PaFkyYm5SOiJLcjQjKjFfKEZzRGJDZy9hPVF+PSt1JExpUCMoIT1GU1BpSVMzI3VnfC4jJXRHSyw4aVZCRWxVXW1+dGZsZkE+eWFwfUFWaF1FM2NENjhBaDh4U2xfQ3o8TWZ7enE8cVpBRVhsR1VMe0ZONVN1N34i''@;'; put 'put ''YTI6RWVMajtAdlZVV2s0emA3b0AjWXdWUGU7XndVRk1vcmtjQTszWDspR0lOPForcHZkdUliWWN5K1R3MTUsc3R1KzRlXzNPZmRRRmFmZmxkWWN7M3x+OHxaPXdhWUV2MXVjNkMqaE8sXj43Ykt8ME5dMj5wWllLPjA6Z31kVmB1YU4+PF87LF9kUjZTXkNfdEtqUkRzR04oTkFbS1M9MU4ocipd''@;'; put 'put ''bU5GMD0sUDthUU5dN3woYztYTUQvWSYxVS4zTSsxYVAjcTshTHwyezFOXTM2OCUldSxQflF0KXJTdW93JjFmfFVaUTZkPSswYlRrYylMMlVdKF0sbk1ifWQsZk15YyUpZit5by5xcGoqYkQ9XilOM0koNVcsdy9SaHZYd053Yih5X3ssTFN3KWAhbTlJd3c0NFheX3p1en14YmdOZ31YcG1ALlFf''@;'; put 'put ''IkUlMTR8WmhjQnF3dTN8RFc8dXk0M2tAMSVFeUJpVGwwKEZOekA6PnBtRWM7ViJtW3RwNUlIdEplZ1Z5RXlhPFlfOVZHeFRYMyFuR2tWIkYucT1HLzNmaWJdWDIreDQ/azh6V31XaClYY0FCYllRak9jeyRLOFhwaGVGalgpaj1xXyJXSm1lSy9ePiFnYU0rYCx0UHFhRWptQG00P0giV3pKSGps''@;'; put 'put ''eyVSOGR7VUEpVHUuXiRZWHRGbS4rQSlgWDxkWU5vZH1qRHEwXz0rZksuVVRtKjVwdTdNQjRRJlkoKTopYkBaek5JXipRI3EzIytrQiNRJENOKUV9blEve1J9SXFDN2dpemcjRFJ7KVlJSCxMIUFmL29ZLm46RGEuSThZWnR7OUxQUkZoPz80fHZFbm9JeUN6NGw0QVR1OjYyKmBaQEhbKXVTdCo7''@;'; put 'put ''TCZXTjBfMzNxPUBBSiw8RkBEREI1LkRDPXlHN2lYRUA8VD9IJiEiR0l9KXVJQWAqP2YuWTpPOWRpUWIsJitzdkhednVSXT1OIToiQkduRlBlXUh1V3FNRkNtMUwucVZScltnVHE5W2giPntoMWNyW35rc2kqTkMqQkZ3JUxHW2tGWyU/YDApd0IwPUFmKU5XM0ddcT0uUXdTX2dpKmFpaFF+VG9L''@;'; put 'put ''S05iRjNkdDxPfW5LNzxQbiozMTUhLGJEcj5HdnxgUmV9e01ATEhlJmFDLmlCV095KiwzfjluZiVQMnZnd2s5QGZaYmI3MlQ+VjplWGwwZmdhRXtaQi4mWktZVkZ5cCksWFp7QWdkZmhgTGY6X1Reak8rMk8jaEI+dSJRZXVsc1NPXmpbdzArdEtzfV9Ye0dvLktdTXRIMCZFQmRKc3BCNmpJSUdn''@;'; put 'put ''RWw1cVQ9RVVWYG83UDZhaGZvXiRxWSwwZzElaldNazpwYzBeRT9fKSs5Lm9WKTVXYFhFc2FWI0deJDZ2bFVoWmpma0YuW3peRDtsd0w4TD1wd316ZllnY2o5VCY/bHhWdl1lVHFrTnJ0bFFdbFs5OHdGcmI7bzdFZS9IRHxoW1Bpck5IenI0ZlZpRGxOe3pmMjVaO0V2bTghU242TEhOTVRKOEgz''@;'; put 'put ''U0dwIy5MKlZhVWw7ZUJdT112YStLSjBTZShLW1QvMHI5Qm5LUV0lR2BfcTBNWWN4Kk9FSzBiSmpRPCROPlJjWnB3NFchOzkjT1BzTVJTZDNqRC8rWEVSdjBoYC5hMXI/dSZmKld5MT1RRj9mMnoxZ241X05oYXk6Xyx6KkReb0ZjZixKcntgUF4pRiU+TkdlMzNwcyo0NDcuVFJxPFswWUc1TF04''@;'; put 'put ''bjMxfnYvZHFZQDBLSV1KNHdxeFk7Um9gbk5WRnwqVkYhQGpHV1dTVXZnR3BTRkMrbD1SQF9NNF5seG5HQyh8VXR6VUZBOU19ZCw6RV1rOFNFcm1QKCs3Jl5OX0x5PSpLUyRaZnJPRys7VDM+eXJUX1IpWTViM2I7N1N6JnN5Q1UwLmAyYjVbb3Iva29zL01APFYoPTNRNEYkRmN4fUtLS3RoJWQv''@;'; put 'put ''QHA/Pn41dHZyeGA2RiRXd2k+ViFBeVsrXmgoOldIb2hAPn5WQi52a351UFROL255Umx1RH4jK1dxI3NMKlNxUyg8aE5sIy4sRDxWdmd2RHxGVWwoalc6Oj91L2FbTSNfQHYjeiN+LyRHNiMhdVsvZjVoRzUoWjVebzFaRSVAQFB6cT8qKSpWdCpXNk4+Y0Z0diFodCo+JjxRcj9JYCZuNT1pIyF1''@;'; put 'put ''ODQ7LE5ASGAxWmgicmAyKzkrOnZSLyx9WEBxIzdZdmwsV19aeHpYbyp2fUtsPDEpK15NYFYya30jdn4zNHA/W0V8Ln0mRlpiMVFUWGIlcix0RkB+YFtMSXlgMCxkTW9obUlRTEQldCtgUGA2QGJMNnFqaEA9OD11biNFfWc6UHBASjRDXmklXltkNHFyLCMyYVJNUHxhO2tEWGRXU1VCSzl2VFpu''@;'; put 'put ''YUluIUs8S318NyFhTUI1Kmp3TyYxdVMzU0ByIy58ViZfWj1vcj1mdUQvXUw/P1c5IlljZk0uOlhvT09yWEl0ST4iWT42Ty4kYmMoMCtoRFQ2ZjplTkQvLnM4YSZPUHMySUdvS1duRWkwZWR8Ok53NnxBcWJeVzZtYTJOaDhKfH04MzdRc0tAOEAkZHNZOG9aMGA3RnBdXmQyVjc7NiZSX1NaP3tr''@;'; put 'put ''PWwsP0lSS0A4VENwU2g2c1JhNTZacUF9TytwVVZGbCpPYFFWa29AXispST8/YSk7I3YyeVomQUZjQnVSYGdiSUFMfnlyPz5+UytvYEpLNEM8UnpxSj1SRzYlaVo7Ok0qXzRJRDp5VEBFVUJGWXU2Y2JMZzU6SWZEYHRZcSMjdThbN05aM1ZqRCtbYEtoeVYrYTVfdiJLQH1hfGErSkBVJSk8InJo''@;'; put 'put ''bGomL0N7fi5ZP1BGcTxrTmxqJiF2Qzh1YEZMYSRxRSZ2NTN+YUVpOV0yeDNRe2tKbzoqXVR2QlFrTFooTlhHXjFEbkJMYT96UVFpMHFRUWV1aVIjRzJCM29JVVdGPyorYXJyUSwkSEcmY190P1B8WXdkbGVwSzN2LklsXXImWjtTNHF3b3o2OlJRI3dzdTxfVTRJfDBQbD4sSzBXLnVMKkFCbGlW''@;'; put 'put ''JDtaJTQuWG4zMlF1MXNGfD1wOlNxZTBNYnxvdT4rVlBnVWZCIWNURjtCNEM8aVNRWUtDQ3RdNiZGbUMkQHwldmsjMzFTXVIpZ1tuKXdRQjtgUz50fEJ1RygrTlY6ZCtGK1h4eih4YCZTSHFKeHx2ZE5aWj9KLlhRTXhMYiJqQllDI2dGO2tdYz5vPnVzL2tINzUwOHxGKlE3MmZfQiEpIUNUI1pC''@;'; put 'put ''Yk5aaCUqR3xGZC59eWpkMC4lQF8oP3N7Qk4mUW9paXxAKTtXLkBSZCh3MDQmITAqTVcvcUVHXWhqMTM4LmNRTFYpUzBycTRTKHJhMXlyfFpIYD5AZihRSnY7RkR1eCRUb0Z4XkxEPEMpb205Li5UTlskVENLd1h4bmFWdUNKISNLVkJOKXs5SEsraSF2cjMybnJmSy9LNV08PHdKVT56TDkhen04''@;'; put 'put ''UzJsRjVGVFsrVypKeVgrMlJHQU5hMzg3X3c7eGMlNj9GOHxaPCRhKzRzT3hFTXIvXlhIeGxTInlCQkZfME1CYkIxfGVtT0NTZEtVIUtsKjtLZDZLYGpfOFZiKTg1UUB4LzJxdUAkKy56QFV9Pl1udUssPCNPWk1idHtiMVIrZElrYW5bNUYzVzVCSll3aV1wXyN+cWNAQXM6IjR3ZFpyPzY7MCp+''@;'; put 'put ''cX1nWltQI20zb3ZrVlolZnJWQzwyWUNxOEEqZzFTMjd2WUo4TDNyP1dvSVM4UHc3N3wzblhZMm0/WzIjamNhfV5QdlZabntFU21AezYjMD9iP2FjdzhqOD5QWEBobT1ZcUMrMVNRd006Qj5lXX5aUlZoO0xiM1FRNjF3RyF0ZlRYcTJNRHt2Nzo3NzBXdDQiaTpMM2kkckEjNnY3fTNyd1BzJVdR''@;'; put 'put ''SDQrNkdwSUBpKVo5UjlhakZhKFlkeT80PWxJQHBzV0VyLEMiVUJDIkFUR0c3IldqQmF0Njx2U3BEa0E9aCNvQHVyQTYodT1PPTQ2ezdBOzdwYy5hO3VzSTAzWSZ6Nk9OMktba1V3LGhyenNzLjFbV0h5TXtvazw2TF5YdXNEOkN3Wm1Gd1oiNSkrPTxqWHEsMFhidEJIdyFGT0d2R21+Z0ZiQnks''@;'; put 'put ''R1hSblZ9eVRaSTxZKjVQRUg8K0VPRUAjcVBPWE50YV5QJHU7LE06Zi9ZNXFOYGpMaTVJbFNTKnVPeyl9OilNaUJORy9tYkdhPGpLVTovYENePn44LH1YNXA/fSU8b2hnS0ZvT3c9cytVQEssUiJWRm95fCRXSzE/fSFbVCNnbGl3YEw+WHQ2ZU5TYyRAK2VfTGVDTExxcSJGXT1meTxLb2gkSzU6''@;'; put 'put ''LDEhTiEsUj52Y3JOan4hW3UhfXl3IztrKFBmS1tMd2ZFcj1QUkN5M3JEbGM8b3x6MDRyLD8rXjFCM3FdKHV0SElTRjN9aHQvNj1ncnUwXnxrLFF+RDx9WE8mRnlncnhwdnE0SyN8OFd6S3EsWSpYVlgwXWAzez1yaDR6LD5aUyp0fjxvJF9aUmxTUyowK0dNJlIiVkliXzYpK2t8b11ZSjY0VXc9''@;'; put 'put ''bDtYck5CNyN4LjVKNX1gQWRGeltjcU9DRHc5TllAZj1iKHZ3dkx6QlFAcFhERjJeUE5dSVUkNDhuKSs/NVsqeFNJbnQhWDNhTT9le0ZWT3c2XXYsYnx5ei9GRXtuZ0hLeHY5MnB3Pl9TLDNiOnJ4PShuTlUkVGdpfnlSaih2WXxVOVN3LEE4NF1yOXp5SU1tI1VXcTloWlArSmJAUiszLnoxOD9S''@;'; put 'put ''aWo7YVRbV2FNOkZKXmEpU29pPFhVcHcvfl8lWV9MLzxjaXo2NVtNbGUpR01VM2U3QlVGYjV+ejp9Rmw+RiZEMyVnTX13L1swX20iZz55czN8blBjXVhxdTthRmx0OjkmNE8hdWdsM2NYaExWJDJRfCpxbSkhR3greSwmYWpYcEBLPzk4clRsUTolZjI/Uj9EY1kzfXgzMnlrZnYjWTAxWWZRMm8s''@;'; put 'put ''Lk4qLkM8NSZEInhIdGxQcVNNWTwpWlFvZ3hUWCsxNVZQa2RpTk1DdDo8aTxvKDU/L1hnK11lfUdWUG5aYTdqbDtTJiFqOHtQRno8eGd3bCNrS3N+JnNvLDlCLFRhK2tRXkpwODRJJUh9VUNOc09iSFFUKUpXfk1KTz53aCtYXmNwQXd+Y2JYZWJHNUIyWy9JdSJiY158LFcwLEB7IW1hbzhZQzR7''@;'; put 'put ''KkYqUWdiJTs0bUk3SVIoXj0wQm97LFR5R1MzUyQ5M2I/SCpBPD9CTlJYIkYoNVdNYGxubEwxZTI/ejtNYHRGSElVaGZ+dlVzKDs8byVFYzkyOyYvO10uWH05Tj1Hfj0wdXEyeUpdZldscihre2ZlfTtreSx9LiM8bHc/UjYrVHt9Jm9pVENRPUYpPGRQYEwlVylUTmpxYWdJckJnM0hdTi9BKTZ4''@;'; put 'put ''PmBIfShoPi5YRTVxYWo0SkZ9UFMlKFtKRlE/Ul9USFd5cS9JYkBSKSFLPnFTIkZGQH5MTFpLRStbVUtQQEIzSW4je1hefG9fLGt3P1JmX3k2IWZyN1NSdE83WGMzX1RfKTprQ29nLit1WSZbYz4sQ0Q1PGBxNXxNMWhWekteTE5ASHhVV0UvOSNoVjYxbX4zdiF5TWZzLFhILDAyPHFOSTIjd197''@;'; put 'put ''TXojIz9IUC9ZXkAvfFhKL3VnQiooX0B3VFplXlN5PCUsTXRaVCI4O2deIlZeTFFqJVo/UjgkOiI0dzdmVjs6KXV8Ny9XZ3ZUWVM/YShqIT5JYilma0dvWnFqI3tmI2ZyIjRyUmUmY3ZSXWxMRiEma3luSGxpZUc4WXdbKUdJa2FKYnpNSWI/WX13OitZWGNdME0lMT5RIlc/LHc6cmAkYW8jRkUp''@;'; put 'put ''RnNgPiU8WTRaUlcmOihXbU9bVTRKfnB2SUBeTUZNbF92X2xzWmZ8NEpNe1MrIj1sTU88fl00eXIzTFtBd1BFQVlGRmc2T19CdXpsPDp3KnFKZCVmVTspeEJWX2dSME1RS3V3N0NMclEmYXlNcXhBMTErO2lLIj5UU0tPe1dSNVdNJDZWMnZgJVcudyg8dFFmVSFAQV9ZX24qX2Qxdk1ycDB6IzFw''@;'; put 'put ''d0t7SGBFVjpbKE9TZzlRUHdVKU5RJU0qeiN7MjlgWkx1RCxlay93aUlxaSxuMX5fZDlTTTBNQXkiY25MOk46cFlCVU1EKktPOzdLRzZtTiZDQ14xbiEpcUZFLykxKmorKHFGRX5pe3d8JCtPI2N4alBpSHcoIW9KPUJxLlUsSz9VYlV7fjFGTmQoRTorLE14bEx7bCkqTEQ7MnB+fkYqUnd8e09X''@;'; put 'put ''blkjaE8mOm5PMUloUFZ1OytsPTE2KlNxVWRxPU8uKWpkI30+IzohbWFVbEgrWDZLS2ExaFVqUjkiZiU3NCh3XV0pQEFxI0p9WHFwY2ttI3JqIWJsRm01TFYiZD10R1ZrSEl5akBQMyZHfnAlMjsra3wjRzF5JUY4MSNQPzZtOk0zb2VlRShkTXB4RWhVXTVOVDxfXzBYTiY3fDAod2JebTpZXkZA''@;'; put 'put ''SiVhXiE+WzhuMzB+Rjl3Nk1xSWdGLmsoclQjI0RbTTY+fllVcS9eemcvX3pJbi9ZTTdgYyFMel13elQyV29SI05ITj9IP0ZieXhMMkVWTXp4bzRsfEdvZGMiQ0lKTl5kYT01czE2TXt0akhuRDFKakpzTG0wVHhgYkl8N3taaHgpRUdyejU1a29NSlVmbmhxfjFKMHVVInEwMSN8bF9VVG0pV1VB''@;'; put 'put ''MHJQPHRWUlVUaClzejs+b0prYSR0SD47dmBaKykpP0JgcEg8QzY1RS83X3RzV0xgW3NycntPbz5WSGBbSXI/IUw0eytPUWphZWNAK006eXJzW342RnVEI1c/QldDOVhHcm4qIns/V3dEWl5eX2ZjYTI8PHxieGIyRF12QnImb3xGR3V5e1BrQ0NXLFJ7fUVGUENlYlBJayxZRmxwYXpGWTdBMVRx''@;'; put 'put ''fGIidiZ3bkYwWGRMXzpEUms2PyV9ZShDciEyUFN1NUBMVltiUUs1KV1tSXdLQXQlS3RDaiM5RUoxdjEifCkxeDdBLCwkSChrajZ9PndVI0J3LlsmKWw/eiRdWGFYXVY7eihEbUFRZjpWTlpYZCFPdkFKa3w8NjJJN3A9JnNgUSowNndaVy5nZiswTHdfKCwhIUpFYmRHKHUiSGI2Ok5hRW0/R2cj''@;'; put 'put ''cChSaFNPZj1VYHEkNFo6WV92IyJbR1N0dEE+M11BZWo4ai56Xm06KmJOdyx4QTtVZkxrJGIvYkphKC4+NipIXVZOVjlFRzlGRDZHWldaOy9+ZHY3Oy9+cEhxZSViOWh9bThzb1VQV3sxSlVCMmQoUCNGUWVwbVZrVV07WEdLSiw9YnUxZEJbeStETFNWfjFFTmw2TlQmcU85JEQzMEI4aWU1WHJQ''@;'; put 'put ''WXoiNzs0QWEoLlckMWFHWV0qXnpCVl0zc0B7JVs4RjZ5JEdmdEo/TW86RVFeSy5UQlM7fU9iUUBmLCZWfEVKKTtiZnJiQ09tfVg1SzlYd0IoblAwTDZtJFsxZUd5Qmg6fmkkJGteWGdvVSQ2QkF7QFtgMldoaHd2NjpZYF43fVFyTjZMazIzTSx7bV00SGRgTFkmQnN2RmIsOipXK1dWNF0wUiNz''@;'; put 'put ''cCNRKkMhL1U6OllmckgqUnw3PXQyd08uMFEyPEBzPzgyQCR+UzMkIjQoNW1QKEQpM0lYP3k/cVd5WS55OlR0bmJEQCp5SkJaNzl4SHIpTWczPyFDa0RAZHJ8PSwySz4+Uik1e3lfe00iXmM7dk5aWFhXcUFNOCl3L11DO014SnEjO0MwQk8mclcxNSZuRW5ZWmUkcXF4ZXJaKmRHZztVYi5XTUEw''@;'; put 'put ''Qj1jYXJ6eEczVjpyTXtmJWpuc1osbjpJcH0sV2A0UEVNaUdXNjpua2xXbnYmSkBFQWtHQGxAUyMhbTBwL3ApLn4/cDt4Vk9fY09LWmkkYz0uWlVRNiFKS1pfWXB+PDRKJTpAZCR2LjwsOnJhL1Qub353Yzl6UT5aJTEhYiI7LF9iISQwUG9OeTJeO1hmd3YuPSEmRzUjRkwvX3UhTjo4KUc/TWxm''@;'; put 'put ''Pyk7P19zVW1vMz1PWkhlTD44JmxWdCw5JmN5UigwOTE1ZlZ9VU93cFVyL0hAKT97fHAjVHZXU2VWTzAvX1ZObk5jSTxpMEM6XjUhQWNuKC8lOVJOJng5ci87WHhPaSlOdUM/Z1BOJng5dl9NJkJYOmtVTEtHRzZDLzJFV2N4YVE0PWVlKHRLYTpIc289W3JhU21+TTRJY34rTXA0fHBlQiFhKmhZ''@;'; put 'put ''N31rSGxJMFcvfiZoYSJTXSRLeEZ5NnhLRXNiXzJPe1ZabFFMNzk/UkZXbX52el1xZ1dsOXsxfXBnV1s1KmpuZjBwK1c0enJMWCUwcFY/K2ZgY3Ure0s0QlVkMU0xK3E0JDFoRDIqe2E1I2drV2tTQi92T2k8N24rQHhINiM6PC5aUGd3PyxCNE8uMTw7OExWL2JjSDVMSndPaSpuO35YalErVmti''@;'; put 'put ''PEE1Yj5oR2x7QXdOQllqSiMkWmFJNXEjbio5cU9jM08uZUVEKT84cXxMeD1BclE3Qlo9L2g4KlUiP0lsTVBTbU4mWi9iPFBsM2duXmFOWj5pP05mcSwzSXlnc2YiaEwubkdyYX1ETUk9eCtMMjZQYVJSUDN1VlN3W0cufixYV11XdVZOeSJ6fmUkdjsjNG9eTnh6QyhWLGhoOlR2TytgKDh9RHZP''@;'; put 'put ''clNkYU1iKTJubkxzVEAqSkUrZEZpKlYpaEdNWH5YfUVZTyEwdW4leHQwe2RDP2xKMm5ALHVuZix0bFFePEBQViFCZTtheVRyKltiKj1hTDIkUWk/cjZiZCY0QCt8bSRpMHdaM0tEVjpwOGUlR1IoWnRUcGU/VE4kPG9RWD8sQWhtcVclMil2MUw5JGA+Wl9QcEAsSkMrJitXcDk7UVJvTng2VSgm''@;'; put 'put ''PSJwSmVZTFp4aklKNElHYlR9WFRlQ2ZzK0VpY0wjOjQqbkRZLChfTkB7M29WfH1YKG9pJjEjNG1NZm98OSxiR3IyYyJGUS5ENU0rc0QlKzhmMXp3UmRQcj9eIjVoVFNddWFWIytVRGQ3PVh8JTRyam0mZioqOlV4ejA7fjpMaWF1KiU0MjBDNiNCUmMzaDkzek11Nmoya0lmQHJVZG1MQUx5fHY3''@;'; put 'put ''O15GMHtAbn5fLkFXLlpuTmtpczZJQ3FGW3ZCLnk2UVoxUiMxYFZPb2laLExDRitRPUZqXUR5RSJnRypDW1ZZbFAhenJPey5geTo1WDl7bDBoNHBSNmoyaz9hIXRMaihHTG5dTztmMmtzeXJzSzpia2giUUAmKzo6Qj5AVllsQjRze0hdKHcoW3MsTHZeS1dEXXtfWyxZUSNCL1pBfCt5bzgwcUVw''@;'; put 'put ''cHIwKSheZHs2V3MzLy5iP1J2elA+T3k2a0oseyxbKjd0RVFzbDMxdTwwYSxEdXU0UFVQeXV5XyZ0e08jfGNWfmVyI092dlM0Lzsvd19MQzFVa2hYNz9Nek1ETXM0MFBKSFFJPDkmMTdTVy9WVk82byxoMzZWTDJlMmhYUDJ+MStTeS9GI2t8WXxPb01ibW1yXitTeS89fER1dXo0QktlcFpSTkhY''@;'; put 'put ''VE1JNzRQWUMxa2g5MjI+YzM4XzdmdzxuaWw8I2VwWUNwSURLVS5aOSJPIjQ+bFlLYVIyZH4xZmN4TjJ5LHpJLlsxVyx5MUxpR0V+KUprP2B3U3AhNTppYzY6c3RTNkFyWWRYfWE0YDdwdXM/P0BTZFc9MjBGKVZFLD1bPlAzSXhZeltdKERMe0VAWD4mK0I7Wy4qK0pybyZhW1M5Kzwqd10kVkdN''@;'; put 'put ''cnBONzRDNXMqendBd3hpSEd9PnMjM3BeTWpzcXoqSnZueVE9NEF5TmRjbDM/ZV11YX43fXlhOUAzfW8/VDUwYko6eTNJT0xwJTUhbHpZQkN6Y1o3X11Na2lKblhJN1dqTDg+dT94RX4iMHxULCtyKCpyc0FBUSJBUiw3OVtqXU84QFg0S3FvJFF7IV55MWh4ckNzclVlKWY2c1tPPmxjQFBrTiJa''@;'; put 'put ''V35dcSUrczFkWGZmLntSTkQqRVkqQW44QDAkXy5zRzUxJVFwXSRGUU4wY1J2SnwvJVspWiVfbkgldDh2eSZQSF0ucyw2cVQ9dnpAaTNJIi5GYmN3NC8hQWF3NEArajMoPilVMDY6YzNgXTVhTFZCOGQ/N2x9ZEdkTk1ISm5uZFUhN19TJiVOeld5Nz8/RiU9UWp4MyJAbUhnWz5fanAyLjVZbyt7''@;'; put 'put ''RkM3RW5KV1pCdU1mX3UkY2JGT1A2LjE1dkw1eSp8L2VpfFhqYio4Mz9qNSolRWQ2PTFjfkNMJT4jdisxJExmKmMhYz06UTghKTFRcC4+XSgpfmhwRUR0RztzP0Y9UXJbU24mamY7PWQ3c0JfJkw6dnVjdiVWZi9lXXlxOFNadkwzJldKUGt7d1c8RTg6Q1Y2ezlvdlRRaV5MV0lGenYhbHdBJnJ3''@;'; put 'put ''X20rT3FyZ1ZOYGBtZCR+TUIyanslXl1UWyQiM0pVQCQqKygiTkhdcE9ANnd3cGZCPmFXcmY7TixlaHFnaDJ3ODkwWzQ2PUJlW2BCOTZtbUB8amVrIzRIPSxMUTZAdSY6V11Sa1RxXzJJd3AvcS59cXRRLGJnbTAkZ0NOaXxwVHFUPVgoSDcoYm94M082YnQqJSkrYVpNWDtfeSthP0tYO21jbzY/''@;'; put 'put ''U1AsO3pPZGNQXXokJTZaK0Jpb15jMHVdciJiMXZ2eDwmQntHfio8Kl5ULjgzeW0/O1tEWGJNYk5GTV1qS1c6WlUxPnNTeGBCX1o+PzxdUy9YbV5nOypeMmJzQGc7OXJYaURUTSs3bDldKlAiOSI6SSVsS2NfMGpFZnEsOWdrcGxtNDVzb1hiQiYxYTxCTTpuWjBIPyk9U1ZpXzswZltUPEgyPnx3''@;'; put 'put ''ciRANm5tNEc8PHIzPiZObFIkbXBRLnBncFMvTkQ1U2p8WjBMNmJNRk1dJHhzVXE2Xmd0WjByL0hWVUQoTDIpYCtYezxMRFl2ZF1qa19QWlQ4VCpVMGJ0al05bXA2L3MhVjtWKnwrIVAiU3tsUiRRalVLVzp7ZmVjaW94ViJjYU9gTWVuSH1LKHtKKzl4UC81dSpMcmNbRm9ROls1U2pLUTVjYXUr''@;'; put 'put ''JkAxLjA2aDxaOGppKVFhSDA0N0FxT1EyMT5hM2E9YT1JPUMlJW1kMztKc2sjOyVuR2QhfCp7RV5vYzR+bjhdb1B8Ml93VTxSbChxP1p9TWFqNS4kbSpNZj5jRCY0U3FzOi9PUUc8PGxOYTllRE17Uysha1t0Z1lCLGc8ODlPK0JRLDR3YF87SCF0aTxuLFp0KzQ1azArYSIra3F3XUFuSE5MKE9i''@;'; put 'put ''QnM1ME4zOzYhQCk7MCRITjV+T3VCOlNranxlWyh4UWhve34jZDpiMWdLWVM4OmtEXztdIzBteDNuJihbPSMxRn5VXVVRRnd3K3NUXzFdcmN1cmVyOi5NWHRNOzNle1tiKUA2bjRGalc2fE5dR3BWKj58NGk3c19dJktxXWU3JHMoWnVkTnR0IXBKfj40UGZ6OF43P0dabXVzPC5MY1diQyI3LDB4''@;'; put 'put ''SXlFUXtCTztBfnJXT0xkaTI5I30wdn10XW98KnlqdCs8dUwqQStmTzZNSDc+cCQoRlM7MlNtbGF0SkFieUk4MCV9NmhzTl9ScHpvZ05dNzM5VWx7ZF1eRlBeYG5TR3omRVBRMWkqMzpzWmghWmVsbkZQXSNuNCNuY2xqLG1ScmQ6SnVqOSV6Iz1RZChPLmZZRCllRWRKXng8XzdEZXxbbkMjRHJi''@;'; put 'put ''bDlGY2M1VityeCI8JFdKY3RHRn5vZHhBJHYlJkg+PGdsJFImUn1sbk5zWjQ9KEJfWnElRy5DXWlMWm4rSURXLmhMaVVZTEFMSGJBTmtCSHw2fF89PVBGNiFTQnIoWngseFQ5YXcybTk4P2p3O1dzWV41b3Rja2lXMHdyWnA9TjZ4R1F7LExtSTd6IkNsX2dQXnpaLjVjfitCRXxSMVd3Si9lclI1''@;'; put 'put ''VUJtZFM3R3B1MCspRiRRNmh9MnB+cFJQckNTOjB+eHUxSER3JT57cTFnYU93LHhnN0M1PmI/OTkuZy5tXTdVaiRtYX4/QUs/SXhTelBzYktpPkxrVTdadCtMK3wuQGp4NHc1L1hjZG94QyY3b3JmN1tqN0EmXlFhflhDVzlNM0pGNFQ1KT8yQix+QG88ZiswPDl5dHdDJTJJT3BANSI8PFBoL2hi''@;'; put 'put ''YF1qMlAzV1NJej5xUzt0YSZ3IjVzb3x6a3huYXozSyVMS2FXQVtnLjtYWXY6PjUkPlNwWjtWaks5KGdNZSZMNnF3QyVCM25nNTw+cGd9fi5gTzxmeFBObTAjcTIoNk9gW3hdL3dUYkJNb100ZX50W0BWOSNIZlVNM0lDWzt2Wj05M0N2S3UiWVt0RCpncWkjVlJ3K2gzJm0zRzJuam09ME9+YWQh''@;'; put 'put ''ZGdrZ3EoJW1hejNOKSMjWkVTdkJHWSExR2BzfDQ2N0dZLmArd2MmdjlTTmlCTExVMXV5XlBncE88cXQyR2FVR1YjM3xAYUE7ZUQ8R146aFhweFBfWFMjeyxGM1NtTUdZdDVAPkpka0V0eWBzY346MndISGUrdHVYITRae3x+KXZdMGZwPUQ0bk4uXktVe1suLmRgTVUoYCFPQ04laTc5JSJLMkwy''@;'; put 'put ''SWx8cD1QRipdY2dZNTEqO2NTVnpUOVFLfVN6UCk4NzciRTw6T3tsbHUpRm1jWTRkIUM1MikhTF5IX2F0a158R2YmLHR2bzY+T0RQYSY3PjBUeXMuflZXZClCdV1NX19IfigvWjZqQ3doLFVxcUYuUihXMGleMTZ2WiUlelBWQihwO3dGWnY/ZVN9MjwvdzUwOk1xNmkpYjohTk9QbUgmMSFRLj84''@;'; put 'put ''KlheOj9sNk5afmtpRD5eZmIlO3Y+W3RLXlgvMGdsVTl5QGZ2UFksRzVvSjFsImpPeDQxdGZfKXVzaUt+MVJvQldwYzw7KjFxcyNleTZhMjZNQEc9XWBeLDFwRztVfkAyPj9UeUxDJWpVfWtIVUw6PUQmSWtkUj9UZE16JFB5eGtQWmRCdHIzfXQxam54VXZLZkoqc0VsfEA2KCRUOnBOfDo1Z2xV''@;'; put 'put ''c2BYLyUxcmUxXURyLEljXm5qQHs/OmBNITZ7LHc7VGYuWlk9VTs9LiNqeDxATzFnaylXO1k3dXZYIUcrQmdpbzJOQzUxRHZxdEN+KHFHN1poSzlHLmNfb0RiKHZ2Z1smU1lJMjJnWylBRlVmRXdATG5dd31sbXJ6ME1Rd3E/Q29bKmFZY3dYZE4+OSIxMWY/U3Qwd2dLNGRXXnFfTjhTLjF2SiE4''@;'; put 'put ''NHAqQWVBUEs7M2VYJntGdXV5MVEuSCoyV1g+K3RRSUJYOiJGKnI9dDcpdHc9Ki5oKHs/cUwxTF0wZEdXUnZmSy4rU3djeTYiWGV4aEZzSDBMZ3Y4dy55NzlrT19TWk1TJm04Izs/dilfJGVqOVJJIzkpT19Tc0ckWU5OOGtENTUpJSFfaVs3ZmtSaCs5fG1pbzx2Iyl1XTxBY0UsN143PSVlKUg4''@;'; put 'put ''Xk02IVFFYVIvYXRseD13P2p4OkxqUj1yPHZiRCtCPDV2TT1CZDREbm9mJi5AMzU0XkhYcUM7MylpRXJEWHFTaj9kPUFlVXpqeCN2UTl7X2Y0aTlobmBjMmc4SHZMVkRsVk8qSiI+RTtrakw3LiJ3NkI7S0hOOUpET1MsS3Z4TSY1VVVOSVkwemRSc2pjNEM1U11QZU4mMHo7ZndjLHVTRlZxIXVm''@;'; put 'put ''RVosJmVCNGxVLlIlVlUybVNZMWZZVmFzeG95KjFrPWklZSFkSD5OK1g+JEMwbkZzNU9AQUZ4Kzw/PjdANzVybUdgP0NsT3B6L1dYP01dTEFsRU1VNyI/UEc5Iz9IbGpHKXVYSHBSIy9XODM4UzE1QS5Obk1eSj55Jkg+VD9sVWRdJTgoXm4vNDBjezRZTWZMZDc2VDZEOUQ5MEs4fGdRfWNXclAy''@;'; put 'put ''aVtEbkZSUnJZOj9GJk1PIzs0Y2x8SWhYams4TiNjOFkmTmUpeCJwdSU3WEFiZE5aQkFyTlBTcTlrM01Wfl5IP0EjdyFAQHpTdDQiQC4pOjBfPzo3bV1sRlI1ZGlXRkM2P09ALih6LzElaX5qP1hXVVlpMTNTVW4/L3tFKURILmMoRTt9ZSFfUS8xTlZJdWk5KjElNnxkQlFeYiVHYUdDM1c3bTNC''@;'; put 'put ''bSpJYXlTPE8sUTo0RXlZTjY8PyhlVStoeVpHYDFsKnJRN2FAIWlFdlR3aE0mKT9JYlppalhhajJweER4RTpQYmlSYSpKaUQ1QEghUSpOViNhdlR6UlVFVzpNWU9IW3ghek9FIzhPJklMWHFEXj9YK11vVT0mazxDUj8qY01rTmBIJS4mNEFJWjxKSWdFWXFATTdeIVJrY1tqPiV3aWZ0QCQpdHss''@;'; put 'put ''NysmKXFXJSk6fEVPO1FkaCJ2aEJiUklgRXQlRjROcUJrRXQ4KFk3RTdaVmdqRSJSc05bWU4mXXRBQVk1aEFYclZYV3klbUU4fEZiSjBMXyR1VU9PckowTFE8dVVQN00/KS9VWCY5YXU2aUVdNDRdMCZafUxrZERyJHIhSTtpY3E2T1hNXyw4XyRgdWIrKWBNSWpdNjV4bGZaZXwqS1JLUj5rblI8''@;'; put 'put ''PkA4YFl7SytzKjVHUUIqPit9b3hQc2QqSkVeZ3JlTU0rYGs6U19GSEAqUiZMVTxRVmVNYzxJZmJaK1Mjb2NDPlQ2THdXT21CQW9Jd1dxdTFOWFgxTG11IkNCLm9zeXksKCh2QXdKakFTTGAwS3E8VEtkd1ghNCl3UXVIT2xBUz1tQVNTaFZ3SlVKSm8xTTF5VjtSUyhJUls3blo1UWVlQiNUUVM8''@;'; put 'put ''JkdWUGdiPCl9d25HKHw9RDlTQCtAVil3bys9S2dZcnUwQlZDIVBDcjJfZUZONUtvKFQiQG5WXktOOz5lcnojbiVWd1poJWBGZ0thJlM6MzVAb35nTnRvNlFxa1A/fUt3cUNme1pMWkgsZ0J8UCZGcH5nME0oSlF7VElsel4sWUUqfENpOkNsZHM/djZ6VVUrJW0oRDNWLiYwdntrZERXYHFLSHs4''@;'; put 'put ''U00/SCEjVX12WkY6RixGciQkNmRxUygmZEhRI1daeFclIi5DW1ZsTio+OS9MNlhWOTxvZnsxOUN8bUZdL3cpLDhRO1hGOH53KStQc0ApVU5SbEtHQitndyk3Zysyc0w8Z0MjM0teTVFXbSV2VGk7P1BCSjxvZDtoYSF1TmBQWWhGMlEmTH0reyE3PXVSUmksT1Y2RiNqRHdifjE4bHlVZEVnZ285''@;'; put 'put ''KyNJQShQVn1kQ18pckdyPzdDNTshI1UmJVUuXmJYSTJnW35ZKjQuRH52fj0vaDlqcyx1RWFYO15Qa0U1UUApVSRSQjJiInl7NzdDa144X0JdaXZwXzI4bmdxYzJdTmBVai5DMCskaW9aSHUuWEYyPVBrRHldUXVqMWN5VWxUI1VZeFBTcDlUeTIyWG9QUypwMyVdailrMV9Sb0U1JmFlOmVhe0pH''@;'; put 'put ''WHNZJCZPayh5OHgrejJLNkI9WTpCS0l0O3NvJUtneUZTJF97Q2NWUnBJdClLSj9bKy5VZT8/dlleJTxeNElLITd2U085WmtlcnU6TGluaE5+VVBnRGF2IW0uOjhWNiY/K0t7aXppR2xddk9Ta3QraFZPMnpXJHpjXjpsWSJYJUxLSS5SanM8LFVsXUV8byUid2JyUGJHZ29aRHBwazJVJntkZktn''@;'; put 'put ''ezVAS1pUQCxxLzBpR2IxdlBCXjR8Pkp9LHkxNShKcn1bKDlTIW5yYjFrbitAbiJGJDZNRmd8MC5nZTxlWj1xRV5bOSwsTUtFTkMjeXpLPUBFVkUpSSU6KHdWZTVBKmdiWShhOi8kLCFSKElnPkxzMntkVVR+dlFSbHZuR0d2Xks3L2FjKFYkQk5GSlokZk1vTDteSGhvWkluM1gsUyEmWEZpSWgk''@;'; put 'put ''SUl1TEMidnFFcSE8W1pxYE50Int1YnY6YU1ueks5IzJaaypFd0VhUVk2SUNOZmk0bU1FSC5IJjllMTVjX1MrbCYkTngzQkNzWmJyXU4vL1ssNTxRVjdGdSR8TyMpODp9dzxQXVFUbFQsNV9LYVlxMnY9QT4zNC92L197OFRuaiNEOHgrL2spNHhXUktDInYqdl9gN3ZxbSE+ajxaIkhIKnhsWlop''@;'; put 'put ''eldxdXljTEwvZns6YDdiSFt0fnE6fUh6K2EwMHYsL2RTcUZkLjN7JCh2X1o+bFk7JXtieTN6RU1ya2pbQWkzYXNgQDJ7Ikg/P2F8ekltcmZeWFBuV0csYVhQOyJadlImQURGRztCQl5pI1tUPmFPX0RdRGxKKT5QcHhIPmQzSTJ3Xy89bk5JfDNfXzguYURsdlRSYlAmSXJRYk0+SnUoY1kxeks0''@;'; put 'put ''LEFJU1tdMEpqfWN2NV9nJnpFJjg6fDljcXYqYnhyZXdUPXIsdTI5c3trLDBWVTI1SU1WWihFJmZZITV9IWFHXkgkYk0hUDNgWU5JQCReTThmW0hNIXkhez9dMD1TOWcwVWx1dyY2ODQ3TElYNkBQU3dNOm9PRm5TJWkpOmt0cUF4X2NaZyxNPmk2L0VZOGx5TispWDUxKV49OjZXMk9ReSN3L296''@;'; put 'put ''bSxGP0x5ZnkvPTkqMVtROiUsYztlfCQpRG5lX1MjYD1VOmE5bTt4dXpLKkB0RFBnbiFRODNFZEhCNGY0XUlAUjZwOjxBNW98KE9FV2piM2dOeEIpSntaQihiMUZLKVBIalh1XzZFOk9Fbjp3OU9hUDREQy5JSEdJJFY3SEduIlRvZldMZ1daPUMkciRAJS86bWlsV3U7bU8+N3RsS1F3ej9PVVVP''@;'; put 'put ''MH1FczdjbGRTJD1UJE5WTDJ2Ul5OIWBXfVR1YlJsNz9QTV1hUlVOSmY/OWkjS2F+MHFTaSpZVV4hP29vYVt6Xl5rS2RjfnlmIzQxVEE6OmU6Q2xxcX01aUp0aVhXX3tZQUwzUnBhZ3dlMGxaaSY9YyFqP3xAUT1fI3FUNzBvfSlTP3ZYUyNAWkRXRH4lfm1xQF9tfm0hSG1yYjd6c285RlJ+M1RE''@;'; put 'put ''Iz1zYF5fN2Z4L1ksfVVjdyJAbXEzLl0wLypHJlVUMXg1QE48MDFkMkdRaS4iYSticG1qSHFSKitLKTAxODg3PkRubzxWdWMlO0oyMGRuKjkye0c/I1BIUTY6QWBUMzt5MkcxLi5JSjVkOktoQnx+W0hwKEtCJitbSXs2YXJaRWRRSSw9aiRWYj5UenM1ZVFvXmlnRyQ7UytEc1tMWUlhL0U1PnJ1''@;'; put 'put ''LDsjaFNmTFohSkxVMjB2VntAcTJCUnpQUW4wbGlYQ3hjd1YsOkcuJXRhWyJmOmtbQUtJUUF7QjA6MHc7dlIlezgkRUVpWkQiPkBUcU46XlY7OE19dXRvI1teN0cja2lTUSQmX01eYFMraDRESGs8XzpSd3IjflYkIkBqVjB3JHVfcjJOe2Qle3ZtSTJWMzFRLHB4QF4iNHIvT1EmUX0hI0R0NF09''@;'; put 'put ''ZnREOCl3dUwwOXIyL0tuZzxnUyt1SmtpOC9bL0VYYCEqOk55Sys1PX57PHRWS15AOVRYczkqdXxjNkt5M2V2VU0hQkYieVlHJk1nMnx9OWgsVlVJRm9iLDI4LkVpRT8xZT9LK01rRTUzKWFHaGY1eGxaezElXzt4d3IwfT9jQFJOV1UyKmo9WC5bOC95WUJLb2k8UnU5Tlo0SkB3fHtmSzE1SmMo''@;'; put 'put ''a2E1JComcWl4aElLNUNpOXpsWFN2XiZ4VlFZTVtyPi5aTVs8Ymo5TmMoayVRYiZPNUEmcV5rJntTcyZPdSxpSDB4LjYiJjRwcUFHe2FtRl1gL2I5TCVHRiQyaVQ8azhyR00qX19zcVIkKHhPVG9xKTMvJD9yYU1xYEpLYHYkcz1YK01Vflcrdzl+Ln1WbVN+eWw1KXY1aEhwYHpRQnMvQ1dKbEI7''@;'; put 'put ''ZGYzMTcsZ2xuamd0ekt6Q3tvN0R8YWJ5UUMxOERnODF9eU81VmIjM1UwJHQvUUYzWVlNJH4sc31+YFd4ZGQmLCxnQDhhPStLQVcvY2JJYmFMYmoiMCsiYzhDVjN8IT05djpwPzg/aj5kNXNkcmRaciw9QFIhRz4pfVt+PSRiMTVlZEltM1VMcH4vK0dsPjBYPyxpOGFZfFlDemxeWklMR0BvYlI8''@;'; put 'put ''RSJrJmdGIWVscGB9TiNHb0dYcSFdWTFMVjpvOD8pXjorVVJRezZhbWlSdDA8dXQiUVJvO3R5YDV2YjR8ISw2YXkjfnZOYnorfVRlTlpYXWsmZ19CT3IyeHxqSXYlRDVic3hZQCpTWkA4RCsvazhULHwkQHJeImcoSkZmeCsjWFFZeDFoVmRscFpYRTtXc1kjYFN7V09NSDBMMUk3cC5VQDNja0wo''@;'; put 'put ''PXlxKldSVUtBc1RgNGlaWU5ZWyhiUF9ITF55K3l8SGo/UUYobWE3QnpnX19nZmshKmkwaWVdbWMoS0YvYWpzWntoNmNXdlpyfTRzJGBSLF1mU2s7YClCMU9wX1s5KDtfUXt0WnpbWDZpIztrfS9IJVBNY2h3JG4xJCl3Z3oiX0tidHl1JXJLV3ZBSndEe3ZyVyt9ZEFbKnNlWXNaIm9+YFJZR3JN''@;'; put 'put ''MEU0I3Ywd3pjJGZDc3ovTGwxO3U3Wzd9eV9ia1pINGF1aVdYcVRJfjQoeGBPa3lyMnAmfTx6dFNRIkd9cWZZTGIwd35dUnB7U1JHSTJ4LyosInpGcWt1cXF9Qnc/R1IiPV1RIkRqQCR6bWMySzlBZ0g/IT4rLkdNOUcjb2x+Z0lJISxMI3VLKVt2Sz9QfEdHYD5yIlguNFs3K2dYNUtgZGAuZypL''@;'; put 'put ''Oix6LlJVYjhVbz9Pb05bNkRueD8mPXhZPm8yVUA4dGxqNXU8UjJBdyhxLH1UMkF3SGBKS1UyQXdxP1YlVzJBd0hvaTk8MzssTkBrfksuQUZpXlImaSNMM117ZVN5eHlGRzhzL2hJclNrWExrYlV+aTl1el5KeEhkeDx5JHxqOV9MZjx5TXxoWy86aEdNbCkiY3ZafWJ4USYxKW5mRnhMU3t5dnx5''@;'; put 'put ''c2kmUiZGL2JRYUkrN0tle2smSUs1ci8wYyVweVMvL2ZraGlediRqcX0iUzlMYUViUk9+LnN8bUA8bDNHJV5MUl9hWFNER0BlPjN4NGtMcW56a1VdV0Z5bVZoM2JebHA5djAuWGB9Z0VRUURJQCR8KnJ5MV02ei4uVTpYZWt1NzwpLz1UMk8kW2A0Z0Rqc3FofGUrMDhAQFRVcH5XLi41Xz5gS3hx''@;'; put 'put ''LH1lRnpDW3xhRnohUUJ9W2hzbmB3cVFJPmxqei8/VldjKVdePHNUdkBLKWk/WDNFSSoxc2A0Uyw8Rzp9dVpzbylaUGFFbDF1Xy54UTI8ND8mdFsxVysydiFyM0twWUFGbWAoemp1PyxiOkhZZ1Y2PUFMPmk/Tis/Kmk/MGB3b2Z8IkxsPyFtLn1pITkoM296amdeMSVMOCZMXUJ8M1tzVXRZIiI7''@;'; put 'put ''NTBoN1hrNl9PUnhGKHswYFVtUy9LTXhpez9relNDcD9bKG5AL0g6cz8oNT9ZZEkuMG5qeCVySl9MYGJNNkEqe057YHIjMDQpS0Ioak5zVkJ+bj0zXyR9LyhBX1JVX1MvY2MxP1kuKURjcj88amVEdzozPGJMfUc1MWxCaXVtZWF1T2lEOSN8VSZ3STpybT1WS2tFXz1xTFQ2SzB8e2VJKFJuY0RY''@;'; put 'put ''SkkqUkJfXnJNQ2N3Um9Uakw1TTM5VG1WUixqb1BqdHomWlAySCtOS0REd1dBX2ZkPVhvdSVwOnkoS1pMUTgueWFkbCo4TlUhRVZdb0Imemk7SjBMU19GXShuQC92NXwpbnspQDpdK0pfTCNkUTZBKjZ4OmcrK1UsfVV6VTwlImQpIytrW2IwN08mZHNwZXdlRXJhQl9II3tBd1JiRztUR0VyRXpp''@;'; put 'put ''eXp5P0BxP0hfcH1+YDwsTkBfSih+Pi9WV1ZMMzExNjBgZFMkJWJSOTZ0fDt8UnBwcy59L1tiMmJCc2A3clo1Wit9fG0jaFY2MT9AKXxSPnNWVkxBV0hgKF9DVW4jK1dJTDosXVhBTyh+KilTZTROVVdLODUpYEwuYHIuNy52czFCb09WfFFEQGNvXzhtTVc5VkE7LFdhP3RgVT19TTFxTiYySUFY''@;'; put 'put ''aCVLTmpGO1tgWnJaRUBlV2kkcnF3Nn1FQ0s4RWdpan5wPVRwLGRFNjUhLjA3VUc2e3RyaTg3VzNtaHFMNTFRaU1SZkx3IjVGakxWYm5RVndPY3ZUSV1AbzV6TSYmOWtGVzV3IyFQbmdAVU1RLmlLRkFbLyl2NjdePEtFdS5qPWtxWUhaNyl5I0IwbEFfSUp1YWErJG06OnI0UVVTQGZOMU5GRXh5''@;'; put 'put ''KXI2djA+ZEVvVVBtSmpIUW9obFc/XmB3Z3Vya3pSeyI1Nk9RUmtOUWs2JFV7Ql5LXWtOfFIlXVZjR24hOXs/XlhwdFkjaGdAZiU1MkVOMkVYbVUlNk01fCpTe1RKQGdecW9hMGg7PjJKdi82Wi44ZyF7UlZgI01IOSFDKTltQGQ7KDZGPjk5YEorX2hfKWBqP3Mue2NHdFcrMShzPCpQOHFqNjsl''@;'; put 'put ''V2hqS3BIezJjd2xObmJ+UE8sImdQZV5UaVR2b2lbTFJfVj4mVnZwY1NSZUU5Jl9JPCV2OzVTMno2RXo2QStedllnJnk/OlR8YUtYbF5saHF1PGJsUmk+TVZyXm01QEFlWHdRRGp8MWpjcV0yMyREekw6IUJ9YG9ddHFPXTdiazl1cDtOajlLVl96ME1rL3lWdSVTYzRwLGYzZkkpKTU7aWAwX0xb''@;'; put 'put ''X19uWVYvWGlSWGBZaiFyTU9rSz9WKGFKLEIxUlk9WFdNN3hsWmIpYX5ZK3NZclN7a0FifHddYyJqIm83VWMzU0V4MkUwIW84KlUiPDJdI2NAYC5yTiV9dUNMZlZ9SH4mbj91Ii9eWD1oPkdJbDpWUHMoRypNTDFoYzosQXF3KighQT5wN2ZPfkZzJHQqVCJFTTxJPU09dFcyXzJuSDQudUs6Y2FP''@;'; put 'put ''LDUsRitzUGd1aFZ5aUF4V0ImLEdCX3dZVFJIPnohIlBRZSM/Jm1MRDZ0OW5BWlFJUV1tel9JYkthdStwc2k1RkxlUUl0XW8yY2E+KjtCKVNIOSh8VUMjL282LHheMS4rdk1QPUBvMm5QfSE2QDdBaG4kPG1hLEsoZHkvcFhhIi95d3IyK2ZwPGZ7PT1uOmgzbD4+fH5QNEJvVXtGdjBOLlh1PHN+''@;'; put 'put ''d2BJWTJBOjVaPjZ7cEk9biw6OyExJCRoWlNrNjh5VjIuNV0laWlDVjZiZERDbVJMOiNDfTd5WEBRInxkZztVaSpAT2lEKFUwUmhZcnNla2MlWUA5LjVaL0ZBfEF6anV5JjZQektKfWdDT351MEhOc1ltOjVrRkRsNzpZRm5RYX13WER5eC8rb3paPWlXWExhODY0SURUW1JiQldhZG1VQHBLYUVW''@;'; put 'put ''LkVVdXN0JnchNzh7bi9LSHNjO1VOdD9aT2BUWiJaP3ldU0NDeyV+KSo3S0hOfD80MHV9M2REOSpMRD1yQU8+fWBHfChBaGlTTUZfPkQpKFVScE4kalR3czldZ0c6cCNUdW9XMkA2YnksPVZZTlp8XktNLmMiJXJBT3dtdHx6OF9SVEFNZ2YqP0gsSSFqKWlLOy4/eSFJXyhYVWklMnp4QmxTP0x9''@;'; put 'put ''IVE3YEUqaz8hMnFOUlpeNHdWYC5aP0xxb19zQU1HdzpicDNtQ2F7eVZWbzZwNTZiOkVse2RRZEFfM2B9UiU2U3BYYlsjYG52bT5Xcn1HLlV6JWBnXW88ZE9dLnJ7KkBDa142WEFNP0pMJTI7dntsRUYpX1Z9aDV+YFkzYV97PUpXdSQ+eWlZfERAXnlUQWU+Qkt1Xnl7e1QmUmU7MG0mNEIqIT5D''@;'; put 'put ''SmJmVk9ec0NiN3s/dy9xXlBGSU5lbFMqKHhqV2Jdd35FTnsxRjcpbChaVyt1MHddNmQpQndkeXhpfSs8NDFyLCg7RE9mJVBxR1czfFl3PmwpMmZSPSs5SWxpKTt2empYQGN+YUpwWTIqaiZHSUJNN0B0ezRQamFlZW92VHBkMVh2b2gwfUtgYkFbSmpBW254N150LGdAP1pHc1MmcjdZWUcuYkU1''@;'; put 'put ''dk40LHxTYSZHezFPUVY8TV1SK0wrcH1PdCp1eD9JYWpnPyxtaSZQLHJgSGp3dSpPdXUjTz9NMz1UXz9NM21hfUo4YmJdUGlQUnhTTzQoYz5rMG0rOHhdQndSXSYhLEBCSHouSnIuPF56cmQ7VHtIQld1TjYxUm5TR0FgO3hueEtyKzw1O0BadSU4d3M+KFdFZWA0MUU6akEyNGpBMitqMyxheTB5''@;'; put 'put ''JFJKTntgVixDYnhUTloyaVF2QXs0SURLUXgxNTZNSSovUlMjanpPIkZSQF5YLywoYXwwY0pjRUt3KGhVLkM8NTsvWmJjQGVlNWcqSns+SERWWVFXKzJ1UWJYVDlYTmVuPkZ7KigxeSJPfWwwIU9GZGhtU1VwRzRPZVNSMmlOQUFvc0NBVD9eWFh4dUlWVikrJG0hRCJTeWV2ZUVzVlJERlZkbStV''@;'; put 'put ''RUFEQUFBQUFBQUEqaFRXMXhAZEhYa3cjTFJMZGY8NEVJb2FzLjY+SmtnMGhCKGRhJlNFMno6KXk6fmB1ZGYqJjNBTSNdIT9CT2FYbWp+O0RYaWwsZ2JmdD5gfXE5WXlNfD5CYWRAb04/ci5ofHFPY2JeMEM9YEhOZ0g3LEojYiFTMikrWlFhRUV7SyowJW5EfilNfD1rb1dKPDx4YTdZfiY2ez11''@;'; put 'put ''fnhbW1JAVyk3JXRmej9hXm9rWVF3fFkofG86cFElSzxUSCE9fVNGS0sjVSNaZURNZ29bK3VxZTtidVt1dDZKZ1B5JmFyakkiZXpePWlbOG5UIXZ1XWVLYn41UVl2V15pTzosaGNHOH4xazlvKzRrTXJhbmBKOC4mUDh5YW0vOywpPns9M2ZdQl9lIVlIPjhSViwxTi95ZUx4N2FsJT83Pjg/eyJp''@;'; put 'put ''KShJWkg8UipjK0RIXU5tY1dgVEE7d35YN1ZtfE4lT2B4flJQbVZdI2tYYT1jUDQpLjU/SndLNmsreCZrZjsoYiFrXTlSNWEmZlRhP0c4OC9idVJNTloyOVNkRF5MQmsrWCpdZVMpeExQNyNhIzl+Y1kkRlhKVjZvV3A7JWZ3fHRubEtQbV81V153RnNZeCQiSzI9PCE6QVIsd3lxYVBKbUVCWWsk''@;'; put 'put ''PFl5cSIvfTRgazFIc10wKVV0c21hXTdOPm5KKy9DP1FXO2AzeDUvVit8eG8kdjAueVdjTywlWjNaeWZzSD1XKi9YOytyI15HYXRtNHA9OCRQN29PRUpBNVsjRShhNzREOSh9QnN3OVZgKD0/MTpkdTIpVVtdWTUwcF46cTFXOnAwNWxQcUl3KS43b1I6MUZMa1B+VmkyYGRtR3p6W2lLdE82PG4v''@;'; put 'put ''NWgjJXN4I01qdCIyOkdrP35GOy4wJHMwamB2RHc6RDBkazlSbnklVHdVdHQxaXkvNHRda1IhS0BDTDB8Pz4yNU1RISpJdz5kJGdgVClOY2UpcilQR35xI3YpKkAxbXc6Un1rP2RZLj8/fFI/QFdlRzN4MkBGVmk8fkRMfFtLQ2dgc0AsXSRGWnclbiEuU1JEdzNzME1IMmxqVCs9TTRFU19bNHZy''@;'; put 'put ''UilbVzBWbDk/VHc+RWZ1MF8hVDtKcksvQCU3Jmg2S25DbF9gSFIxKi9jeFlYLz9RK0JZfk1ZWkpxSX5RdmJLKERmQHF0fnNfRTFadysxIVt6cn5DPC9mdHFKKEZSR2NSYWQxfDNlVkc3YDR1PDYpWG8xL0U8N2taOGVkXmZzUXdTakRVRjV+UGJMPyJtS3ReODttMH1kNUhRNmtUMFoiL2VQV1p+''@;'; put 'put ''VUMwXTkoOldDWnpYdD1qeCRyI09bdGpLO2t4V2wlZ0JwMmNmOi84aX5bbWdOcEI7d1s5YyUqJiFGMyRBWE9QRkA6R087QXRIY09RSEVoIyZgJHlTOih5dV5PdishJiFuYiFEdzs3Wi9UJlhbdy5hUlp8KmI0ImgrRkhOfjc6TmRoTXBiaW58fik8ckElTzdrXlhoTXM+Vl1LbVRRP2pZV15UQlFz''@;'; put 'put ''Q3QoYyIoTVEhW1hJXVU0OXBpRkNVYUI3MnFaITNdMVtWRVg0bmkyMENoKnwkak9CYW5iYEJmRF9kcltkUj8rVCtNPjNxaFFdQ2BXfS80OEgjTVojbnwyOjtVXTVHXm9zQTV0S05JVWhBN0BSSyQ8YzhIcjpxQTdAZHgzLDx+XyZ1PlhtUiF1S1ZDQHxiIWVuI3ZOVGBTN3hbSDVVVy59SVJ8b1ds''@;'; put 'put ''cHFXcksrNlZFVUxJazNPQ1Fmc21aNUxsO0tjJHd9aUNXeDF3LHk7Wj9ecyh0YzBvZjN3PUBDKTklejYuJnk+KDp9eVpiJUA3fjwrcXAkVEZwUzBtO11JOHs6eDZEempMfjRMLlFnTEo5PjFAL3BzJSolNytCWz9rRXImcXFEUmUwfiFZYT9XRmJueHplNVNhekltYmxEeDYsTnp9Rlg6K2M+RCRI''@;'; put 'put ''PWt3QFAsTVZnSzdJYCwwWyF6LzUoKnF+Rm9aOTY4KmhhUE08PFFpYC88NGxAe25JdUFrP25HO1MwQiVfbyZgSHk/UzY1K0VeX0ZAez9sVHQmKlEzalVbN1J6cE8oW0FNWjJnYzxKOiU0LmdtVSZGR3djKTdBQTNULFE+bktFIzdFYzhOT10lSVNMPThkWkd1TnR+T09IUXUpQCtCOkl9MyhfQiJM''@;'; put 'put ''YSkmW3F6P0kzOzJufXdgYFEva0o8NiUhZkN2XmJAM1hWUmkuc1dVI08jYD1yZTdFK2FaUG56aHA0L1JRO20hZl5eakdlSjN1I2Z+M2BqWllsUSFtTWF3OHFlP3NwWGJJSmR4QiQpfEFvYVpuS1RrSSpTJiJ4eVssZFljUyIyZjpYaFFSW0F1QXMpYmFdaEckYCFAKFQoTDV6JGJgdSg9OFdpIy9L''@;'; put 'put ''NXtDXVFXIVBfLyEwUD12UHN1Jlg1JDpjIlNrVXk7Pkc8aHoqQ2paKkRfS0w0Zl1MKU0xWlRNO35sMUdhIms4M1hZU0dBZExPIyw6dUwxWGo1Lk1pNTJIY1huMjYwUispbXBKMktCNk1sei53e04zI2MlYWBfTDBTaEcmVGhRPjVARzBiUzY+N2J2bUdQN1cpQlhldFZFSCZeTlVLTEsoZCYiYShk''@;'; put 'put ''dzBWSXs+VWg8c2VbREkrKjg5Il05V0hKJEJ+ImhgW35RKDhEXyFiPHRfY0p4Q2NCUT9xeDBKaXFCX0hCIkVXST9ZVnleUy9WSEs4PzpVTmhYcUxkUEg6PVppaVpzeVM3O0NXTUs/eStkUS5BTGN1OWRZNjReY01eTjBTakBKanBIenUvXzI/M1d1OkwjUTBLUXQoUT1JYD5RdUQsczBZMXFHQmU7''@;'; put 'put ''PnkibCw1ZX4ob087Lj50VyFvQiNIeno2Tkx9M01NQXhCfG5wblN5ekY+cmpERFIxRl4ob2VeZzBZMWApKTdHUmhGVF56dkZKSHVOYGJIQjJ9V0hYUk9+JkpEQEFnP1N7KD0lZn5uYD5FWD9WWlpFcSo2dlZHfD1WP2tIZFVvZlVbTTVoJkN6Q3I2PV85WUxQWXYhMUA4OVhYPCI5d01CRF5AQEcv''@;'; put 'put ''dyw3OWJ7eHguLjBsRzM3MmtEdFJ8Z3JRRyJhbikofjNTNkNBZFhwWChIbTF2VV0vPk9ac2xWNCtNZWJKIVpiblFDcmJoWGNHPFlLUVZIQGhwN1dZT3J3flZGPVtRcmZGO1FfNiE0bTl0NSpRXS8jMVdhMmNUdExzM3ROfkl4Pn4/RD9rUGBwWTE3aX1MODBNSWgoekM5LihVcUdDQi9QTCR4bnVm''@;'; put 'put ''WTlpSjtzUXtNe244Jnd2ZyIpakBpa1ZzeCZ7RUx1L3ZWciV8PTxmOzFQSmRbSWlQaTN7JWIsY2trNnxOZnpMTFp8RF1tR2FpfGlGfG5jODwoX3A1RUMmZUkvbkliUTg4UGV1VDJrfCxiV3EuJWhGO0ZLXXZ5US91IWE+UTRsKD1wMGE/VWZmVVJPaEg+OV8pKzEhPWFnREVlJWAvPXh+PWFuY1k9''@;'; put 'put ''WWZgOTxwQklaMmozLjYiLkF2dEB9Pk1TR3dxeVomX35dZVMiTmdnPTRJPV8pMXJ0YSpucnc9Km9nQHcoTHE8ejZHO2AhTlkiN01UQXBuKnVYQVJKSmxFZkh7SXckb1lWZGN9S3lyTythWnNCbjxLOFd4OUlqJSFpM31Nd1ZmfUt4L0smKClMfUBvRjpFb3dmNSlqdnlefDBdd0N6WCNXMWs5WV1k''@;'; put 'put ''My5AMV47S2o7czFyeGkzOmAjfT9XNzFKZWh5RzZtdF5HeyQrbXlJblVYWlZFfUxFQ1NvbUk9SE9tbHUjIilhMW1nQDBdS1t1JldkQzRvIm4lKF1pQWdsOEI1bGRNbmBVLF17Zj06Plc+IUsmNDVEW014cD97YE9rXXZDdWN6NyUvJFguNkVSdzc0dTZkay8sWmRSdWR9e3tBdFBUdlAjKVRJdm45''@;'; put 'put ''fm0qJWc6XUNxaXZGS0EuWktvMDpPWD4kYmErUENVJV8vb29oWUM9bkRYOVFRXU4oTDo4eUxjaFE8MG9LcEBJMiUjNDxYbm1raVN4NS96MF88ZT5bXko1W3REP3BqQCQuU3NYZzUyM09adH4zd1RMeFtIc3FaM19PYDlOR2VYbDk5dmkuckhbcXcqPW88e2MpTEt7MkZpRjM4K3duKHElZT51ITRs''@;'; put 'put ''SmwrVF9edDlxT1RkMnI3PSQ8QUFaPnhzd2FmQkcwUkcvej97Z3pJJEQ4dk46dXM8L0A6YDxDTklTTXZxcyNWfGNGPj5XWTN7clNnVTZZT0NYbGBJb2VMTDRDQUlANntNIzBCWWc2Zyx2eTguQnVxVD55ZEY/QiRFayJNZSZGKUk9PSE/anJQOHMqVys+W3NhYk5CMCQmPV1yMGZvcGJEYmpwYD1Y''@;'; put 'put ''cEVzcGcra0crdiV9UE9ke05xWCQ7XVdISWdEX2xeYTBzYkBEXlhNUGk6UGhEX2xFM35gNWJ0K1pPdm5sblsoNmcoYDoqSWRncTUkOzZ6Pj9taHg5NGQkfFdzVEUhcCIxb105JHtvMH1eQUMiZVN+Z3kleX0qXUs7YUl4RlhubkBlKUM9RT1kfGdbPU5CcGgiZVdVPGNXdS4/OGVmdEJlc19pOD9n''@;'; put 'put ''TChvcjdQQzdZfHFWJXYjfmBFMDluT11yKURFNjEhWGxRW0NYSFdsL34zSyM3bkV3dF9gQURCM1lPcVgpeVp0d0VeK2wkK1h3IX5gUzA+cSwiTjFpdnNpZENSLz8iXiVLY09oJCVxZlRWYF1bdCMlLE89OD1QbiJbfFFmKFVPJWhsRClITFkmVCNaRWFJKE1MZ3EhRCxvIVlhTV49eyElPjBYc2w/''@;'; put 'put ''TVM8Ymx7d1dDdUpDP0lbYGwidFVlMllnVk03fENBcGdeQikmMC5sd0BbbEVEYWd9aHZNMW1TRV8uN2A+WSR2TWs8WklgLG9oeSMhKjlrNXFkP3wqJjtKezdPeD1galJwOVZLQUJYXnJHRCVAa1gqSGF5cFNIKl1ERSMrK3Q4KWdTV2wsV3g0QGU1VitvUG5IRWI5XnVaSndHeVkrdWRhMEZ1blRj''@;'; put 'put ''b0R8S29RKU91RUdYXk5wWml6dGouc2xOMFZSOil0cXtpXStMS05AfGw5InA8bk8kIjNXP2A5VVJUXWtJTU96SGBiXTN2V1Q/cDA1UEpKciZaWkBgMlNQRCg2Q11ONXZ+ej8xViYxRFNvKTZRMzopJmpKKkpBYntDanEvKjJuSVk+SjIyazZScmVrfTxhb2JmQSxrcGhPQzRoSHNoXnxGT0FmVzpb''@;'; put 'put ''NDduX0MqdGI+fHY0R1BHMUpxOEMmOntGUXAqbHpXP05JUjJwWGN3Ij5Xe0FgdkBbfj97KVlDSlpVMFU3I2VhJmZJVXVHOkIuNCV8VEpZUDwmdz9uSExyNVFgNjVwTmNgKT1NNVlwR0ROX2skaitmSF1lb0NbJXk3IzhBNEAlSVZ3SlFRPFQhYGg3Y0JpKGg4ZDxNVU9meH1xfStwQ01pOUM/Vm9O''@;'; put 'put ''WWsrd0paMCU+UXpERlhQLH5DKjlDclhTVGBeVUJJN2Y/JnRwUyZGMyxNNys/QSFXR11XOFJsT2g2UzklRms7biwjJWd2dmFCOChNTHQ+OHtfYT9Oczo0IWVKTVJEe3VGaFEjdVUyTzFQcyRdZmF4I2Y2N3FBfW01ZzcxXmtrZmxBKEFqXVhYNX0jQjtKO3wvR2hXaUVpJFhIaDxCYXhSMVVWR1k7''@;'; put 'put ''NCZjO1IlR0hKND4vVVMwNH17KWUlRnBzTlEzOnModVpFY1smNUZiIjxsOFBvQFFiWz89WFArVFghfHwrQXh4KmMvfTFlNk0qSXIxO2o6OzRZbl8qIXg1SDYxPDV9alJrbkc4VX5BI0I+SVFwe1hJWjtxT0EkaTkmWXFxaV5XIjFidklmQnd6c15MOEtZPWhCIVNiLjVJTEI/SSg3RG95UEo+LnxY''@;'; put 'put ''JGF2VHIuZUx6cm9nU11CSm5ZX2IoIUN9KHo9O0MwcUl9YkpXezVPZyZVPV5de3I7R0VBZTQ0Z3NUdDVGSEtSI3gsd3l3QEsmKVhEc0k5MkQkQVY8bH5MbmBnbTxUPGZsWXVIVFYzZDJiWTolZEdiIls6X2U+L056WnNrOF8jeGY1YWcsY2EpTiRYS1gkQU12MjU9MkE/WSEhRW00QSswSUxTQF1J''@;'; put 'put ''IUVDXnBAL2w+bCo4RSIpal1IWGdoYmVbJXMwbTdESk9EZnNDYmBLci5bNE98UWU8Y103WC40a142VGdUJkxhT2lvMURCOEo2cDNrUjl7Si9PREo+ZXw2eUJaUiE3VlVgbj9OQmcuJXd4RzNobV0qKilze3lIQF0hWlFoQ3NFdDthSHhCJnd4P3Y7QywmWTJZSDRNfG4wfmI3aWJiMHp8SnBJOGd6''@;'; put 'put ''VkdgX1suSGAwbjpBOC5bXSx0S1FRKEZ7MFFpMHozPUJXel5pT2dWKz9hPzh0UzJuSktfbk8hTHhtNDgpNGY0OnNqLj42eFJCTVgmW2JPYj1qJTZ3IUIjLG5QUC5+Sy41bk5yZGNwU117cjVZczREMGA/LCFqfC90dS4iKUt4TWk2Z0tza3FNX3AlO1gqSD9SX09EIzVOUkwiaVVXKVloQGtUXUVY''@;'; put 'put ''akFxd0RGO0lgJDcpIXFhXjBdOlRuS3VtRW93biM3PV9BPXRoQl4/dExfWDlQSTt7Im9IcEMxTSViVnlXJENveFo2b19lYG9iRHNjaUQ8TUpNXWdaTX1WbVM4SFJLQG5QQGh2RD48PyU0Nj14PnB4OUV0W1dEPjNlTHxwe1U5eX1wXjNhPSgkQlA/ZEtfPjdAUGNGaDBXbEZxJDMlKkN6SCRfUyVD''@;'; put 'put ''Jl9tIVdUQnhtbTI+YE5SXlhqR1Jzd1hmKmFWQFk3NWw7Jj4sSXs+S115UHQ/ZXdlbkNUIypzYT57cH1ETEBpV31kNGxIUipjUFgjVUJgazk2JjRKQ28vLyE1PXMudiYzO3MlJCZwQVt4fiNRTiFeZjshbWNJOVNJOzJ8PnsqTFBDZDM5OGtJXU4mV2VJMGlZL2pbV3oqMkcvYzN4by5LNSoxUzt1''@;'; put 'put ''fX00XjM/YmIwQTIrV2teLFApciZEcEY7R2pbWnU6TD5mXlpsNmc8JD9zQ3pOIV5+REU3THlWTy5XcE4oMmxLOVU6dFVTI2M8K0Z0PHhKd3VPL0hdKWMpbGhORHhVeiFsI1k/dk5FfmN1QHE3W20kV0szekVmIWJmTk5lXSJeaHlaJjlBdCw9e0kzdiZTdE9PYzkzUHp7SkEuTih6I0lrUU44YEpO''@;'; put 'put ''VCFqInEhM2h3VX0iX0NZMSluVT1EVkQjIkRwe3k+UVZpRUNPYEYhKFdRfTlZWUsyWF09L1teUk5hYDN8ciheVF5OXmN4LEEqcVpaRl5zbmtldmRxcS82S113Xk9fRHM0Pm5odHNie0N2KHdPXWRmaEtBZEZoUWBoXiFDVklRaTMvX0JCQFElW207QiJJcjVTZmdwdiVyW2NaRzZNdzVFS0AuJS4y''@;'; put 'put ''SGpsXmNHclUlVGJCNEJRRHc8aDg6WTkqVyskKCh8XlYvVkNybFpZaiR8cjp6TTlIJn0kcTwqZDVKPkx4fEA4XnchZipmdiJHSmlAMlVJZn1pTltNSjtffWtxIU8lMUR5OCsmIlVNdCw0YVd6NyV9Zl5ZIU9ybWxjYDgiYDJrcURSQEJEbSpGRWprQzxuZXJedCNYLyh8OiolUDd2a3tYXiF0ZHlN''@;'; put 'put ''aVpAQE15TjE7ZC96cyE9OD9kNXZmI0spW1R4KXN3byxqY081XytbfFpdSX5CYThvdmQ8QFlkKWkzfHxlVmYwUHxMeGJaWGYiMGljUXR6Kz9EaUx+PzErYl5qPldjOXd9NTo6ZyJoX1smXUR4bCJdaj0kWWh8RWdGZXRkPDtYTzNeUGQ7VzVJUmNuLkReP1lfT25TcDlHeTYiXio2OyprTWxWIkRu''@;'; put 'put ''clQ8eUQqWmw0fDMiXXlVKTdpKTt2STYrQm06ViJzOWQ1QHJnd0owUFVYM1EmemcyJWosNnllWX5GMH1iNzd4b21EcnJUcXouay9tYGhNcFp4Q1ZFVTIoZWNgQE96X0UwRDkqQ3ZKc2A2VldnYzVba0dAbzpHbXFvLEwwZEUobD80X1hWS3x7YmhqMlFiXzFxNUIpSUY0KXh0UHs4S2Y3bnohN0Fo''@;'; put 'put ''KVpdPHQuPiZ6UEchTndXY3hWRXJdJWpFeG8oNF1vTiU2cilSIzJifTMiWkw2fXZxQS8yWG8mKmhWR3JCMkI6UWlSXzNJV0hUYz4kWEVkUTVXfjAiQHdeM1pNJTpyfkZEIj1zMHhFakNFR2xgJkNLS3JgQXh+bGBIfGY6M1BeVkhiUFsyVWpJZkJaMkc0Q21XZihfe3pGeFtgPEZRbUtMTzssMGtm''@;'; put 'put ''Xn5lXkJjMGNGKTNnfmR4WGdZanc3OmU1fklDbzBLXnFvbXAvSX44ZXlARFdbWXI8VTd3TExkNSNLVkZBJWl0XWtERnRuISJCKFJDK1A8amQval10VXN6SGt5NyZFbFR7QXdrdmA0M0Uue0U/KjEjJDVjIndRKUc5UmBATkJCR0o5d2l+KlEyMTdnY1RxbzFIPFtCM1dvYl4ydTwjSWQ5OWI0TjNQ''@;'; put 'put ''c3RlYn5jMTxKNmxvWDxOTyU9aXZXMF8scnFnMk1iNzg4cENwKzQzI0ZleHtdMF0lVzlIOHJ2TnpNbV5LRV8xL109JVNPWilwbFNeISV7PTxSQWJUUEdhJm9IOUsidmY1cUhOcis1NGJwYk9DU2MvfDpOXUs9K35eUUR4RiFLTiVaYGVXMTledm00dHk4cX4/OC5CRFNxPyJ+WT9HOm83WUIsT2Up''@;'; put 'put ''bnZxX252MVtPNmEuJDdOa2VScyhKTXoqX2JfQ2lXT1JNZm96OipATiUwZCt7PEFBUGYzO1RrKWJmNCQjJWwlMCRIOzY0W3dAKV9FdytuKTRCK3AoWVBlSyhefTBAdiF6Y2h4XW5wPCRZQmoqb2tEfDs8LCR0IlBlfF92QHFuU3FxZyNpTzRSb1N5IXNITCs3a21KMX0/TntHUGQ7ZGpVJXpgOFRV''@;'; put 'put ''YCwhZEA7XlE8aT83RGA9a2E5REB8YiRnZm1uNEQhOTszZlROSmdwbjt5NGdzUT54KT9zKDtYIS5LZzZCJGF4KENTYyZEanFgaSVETWdPcEBCWHFOIjBPQmNdIVFTc2FONio4VjhMXn08VVFVJD1OJlVycyFVWDdickM5PTtTI0B5Zi82YW98NGsqYS50KEFedi5UZmpuND89TFt4VVV5b01LUj95''@;'; put 'put ''U296S3slbWx+L1Z8JT83Pnxraz0pI1BVS0pOXVdnL3JtZF5SdFlYbG41MmdnLzpaWj1xXytYfmU5NkY9fF5GVztucCZGPGlZPENoVndBNlZ6NXxOJT0lYlptTSpnb0kmP0Q7OT9YNV5eIz1fZF9sZyIoPX53OX0vRjk4KXc2Uj1sR1NldV5IaFtsOjpzLlhpbVhwNFVJL0ohdUw/TTtWMjo6S3ZZ''@;'; put 'put ''VjMoX3B2b3V1ellgSTJZQCZuNlt2VSZFSWhEUC54OTspP2NMRWM+ejNlLzokK1hQLiR3VlVKVzptN2xKJV9QKEl2ZCZRajJjRzJud3dGe0xbQyM2PDR8JCtoPmp7VlEvS1FQLHdDcDVmNm07QWtKYjlTQjpObmVtdFVjQFpnc11EXyhIVno3VjsuJXdMJDBOVil8aGMheGBHMnwwN0RZO00yI159''@;'; put 'put ''NWtmbixdcjN6PiRPeTU2L3k2Mk8idV5GfUdEPC5hfnhFNkN9KiVOOjlzYkw7ZGpuajZkbFJ+O0A7PHI7UnQ7Qz0qZFIkKWZKe1VNZjl9NnJIPCJ8SE5sXnxaT25wSWIkLzYxRzBmfWU3T2BDX01UZWg1anRLVW4lRSRwe05xYDdRezVCVl8qe2koazNffFpRdj95a0VLRER5RTAwL3tDdT9OIVQs''@;'; put 'put ''a2NHMV1aRnBjaGoxW3ReYH0vPnwzZHpnQ3lsMTtSJiR2UnQ/X09rXV8kUVN8cjJwRF5OWEVQTmYoemlIIVhgbTUlNkNLZ15JTnQhNH0kbE5oVWUwU3ZoMWhTSk4raVF3Q2YpMltCeGZmIz9XN1dxam9dbl84Kz90JiVYeSQhdDU8UDpsTFRUdGlddlBXQF50T1VkXUI9bEsmL0k8T3ZBV0NLe34h''@;'; put 'put ''YDEoOiN7Mll9bD5zYU5kKlRLS0oqeipNJV4rY0RXc2llN3ssIX57bGNlRilQKXdWaFRuYmh4YnpJLnBBJlcybEBJYSV3dCFNInkqUzFiOUdsZWczc2draFtgcSthYiFtQ0UhcStnfSt6ZVNPVil2N2VAJC5PeSIyb3I/P30kIVY7ZH43PDN3MSlWYy57bmw+bjdobXIjeWNkI2NVPF8vanJJfmN2''@;'; put 'put ''SURtdmhUIlJRKTRSTkdCSV8sbGY8VnVsfnhLKUQiV1U5ayVPYHU8eXR4LGZeOX4sKUhOUzhWeVV+YT9qMStBPF1MTz05LDtHV19dSlpQfHxQKFFoKjI5Z1BLZkYlbU53PXshd0dUYyRbMG1XX1MrYGlQUXNtWTxVSTwjfVBkJkxkfEdXQ2dGZCw3cEV1SWEwdVFpKn52dWpCY1M8RSx3KEBBXzZK''@;'; put 'put ''VCRbZkBbaUVAZVssPTVNUTtnNH1qT2pQTXF2MVZpVCghUz5bYlU1REQ+Z3plXTAxN0hlXVMvK2F3fDU8VGYsfFJUOHpAM1I0Il9ubytWN3BdQHJNU3YxIyptaVpuUyVSd2M6VyIpMmE9eD9EZ0s1TmZOTCJPTHNwOltWfnBLOXBRLFpzWyl9bnt7JHxeeEw/REM7UjVJPEd8QThBWDlvJXtCIkFq''@;'; put 'put ''YyRvQG8+fWplJUJjOk5VJlAxcyZRbSZvcXc0NGRkLjI7YGVoXWExRVJaWEBLWTtPdkp1fVkwJDNGTlMpd0BTTV1TYjc2YUU1YVd6O35rbkNZUXUkanV8PjYqYT9QcUsoIk9KaiJrTmV+dTt+N08uQEhObkJbVSFBRDc+eFczPCtlKlt5KFhddH5aQH5kb2JpbE0qJEx8XS9HeGZuMCEmNDVoTSxP''@;'; put 'put ''dj19JWUhMEVHOT95cyJ7UWRmc3pAaztyS3J7bX59OTU2TTRRL3YmfFVqS0wyZ3FgWUtCNn5DaWU2ZS4xVEBoRix0ZDUvZzEwTyZmZ2tyQCJTMHdHU1AzeTRtLllGNiFPekBUQXcvYmBdLjtCdW1iKlMpWCQxPTBycH4pIjhSSXg4ZT5yNihnaTdVV0w1dn1vVElIRz9EekVwXV4pUWAkYmJjUj5O''@;'; put 'put ''NCgyTmUjXiN5V1FxUFl1UnRnQURtU3NaIV99ZUROdC8zMTJYIlpkSShMI0ZRQCwyI1pzL1BPaVFudFV9Y0QkVlFSP11pbi5TMFZpPTJieHBKVX0iQjYxMCYxZyg0X2RZMEhYOitTREIsVntoeCtEZXk4bnhAWVBOck82OlhzU1UwZU1yL2xefUZZMUdSZS4xOn4wZHp9QSliMllNR28vcyE0IUh8''@;'; put 'put ''K2REfmB3UjFgNCxaXXVoTXs9byhpRUNKTlh3dHJSIzpyMDxoQi5pJVFAOFg9IXliYi5sLC83X3B6XTs/aXtfczc0fVQ4XlF3QXxyVF4vNXp8UEd3MjtwXXAjNHFdfCpJMzdEMzh3OzNOSUdtSE42SkZnYCtbcVEhPTpFL1Q4TEkoIV9FPzBySHNRPjtPZUpRZlpXIX1IZGo0Q1BqVD80SkBQTFgp''@;'; put 'put ''NHokMC5gOVczUiRyfGlvQWg0NygvPUhETWgqYlNCImZ2KHMsKTgkc05mWDwxPik4dmk2PyxuIyZ5O0NBZWxJJWdfKCV9OHJgNzVoPzZPT1A5YmshWmwuWDNEc05JYzhNJn01XnV8T3g9cCVSXWkpVnQ9RWtbKD1VaFt7Zl1JfmpScFJaT28jYDpDakRzW2RaJGw9Lil2aGNpZloxTTp8YHkkLiNQ''@;'; put 'put ''azFZOld1NlAyN04uIVVtdGleJDJqPitFTmJHIV1AI2o8Nk1DNnhaWio8Vy9RLE54Kz8oKCQ8eSkxKVkhdmZfWSljP0JAODRIbURPTnRIVU9+Oz8xcDFFcTp2dHxqaHJjPlBiN05yM0ZLQW4sPUNwKj5NZSRmNlJsWkAze3NBanFAbl48KH1OKEttNlRBYCJFb2xDYkEjZyhjPG8xd2I2JnddR1dI''@;'; put 'put ''VyEyX3Y+dyw6LktmKjRIMEtOeTE0d3w8SHVxbkZjQTxOK1ZwbzlCRSUiOlQjanNQUzIkYlgwbFg6W3lhW2xkI0hnZy93dmUmVT9EWSNdUTZeaCUyRzRPT2Bpd3Y2U3sxN3FUbUB5OjFnU1E1O2hfZXEuUGNlPWoiNVs+bmkucTlbci9acHwhPjNwbk1VPlIjPS57ZWBpNSk/NiFwLCl9TlNhc0Nu''@;'; put 'put ''UENRaXRxR2xFZVBJd3I7Pn1xWX5pJHN+VnJ+fVUqNC89c0ZXMCwvKEdgfTQ/QXgpczdyL1g0Sm0kelJVKn5EXXRUMnRrRmt8RyslZSt7bkdGMzVAYnxiaCZzNF95PWApbmdneE5+PX09VUErYmkvdm90WUAjclYmOXQ1OHpDMEZeI144XSxRYDV7RWcjJCZjcVc7JTkpTWEhcDNadS5FS0g0RTRi''@;'; put 'put ''fjRATzVeRTZQSWkiT0cleXNeWT1zTi9HK3JIP2YkQ0xQfGkuWHdiVX1pZGg1X1g8M0xyTEhSPnk7OENebEJdTkNJOE1GQ0Fidkd9Iy83UHQkV3tHNFFpNVdWPUlLVHJ+QDlrI2hkeCVddjFNWyx1I1RFMlc6VCEuQz9ZTEJfKHZJRD9WQyp0T3ljW19QN1I3MGZvPUlYQmN+R0pJOCpRdG8hN0M8''@;'; put 'put ''JDdOZzE/dypUN1h8KEF5dm0mPjozdnw7bmxmcVspZ3J7RWo4R2NXO3M7UDVFPDxjW3QxUkZDentVK04/InZwOUA+MGYmJVBWaXFAIzgrR2kkYEBxQEZuTVt7RW80PFRBSUlkSmlpPCpUTSZWOVBObmMlPHM8dH1wMX48N0ZLSSV7S2UpejA2diZ7JmRgaT1LdEgvLCROJjxeST5yLlY2b2ZgPW9S''@;'; put 'put ''PDxYY0x5dnVNdFRpP3NiYmt7MVhZX1E/Pnw+fjEoaiUobCNYfEd5fXV0cEpPUUw3QkI+IVlgfi4vWFljUS9tWSMuKmJiczg3Sk9US2s+M3gxWH1GMkVrOW02NU43T1FPLyV2QGZPOCV6NFFIRWVtP1JdNFJhcjp8M099b19dMzhAVFg9V1F1Im1EI29McixCZHlWT0Zrck1kXipJXSRUUz9lfHA2''@;'; put 'put ''I11ZaV4hc1FJZyppXVZ7P1AmVG18NjI/fFRORlpwUmJiSWt5Vnh0PCZrVVNdVldWXS8jISJvIXkuVyJRKFNzaip+YEcmJGFXPDgseChuTkBjOEdbRHJrYndBPXkmM3I9SiJEQDVHdSlmVCMsak9JNkNWOjhHP2ppeE55cjwoIUReKWRpYHJtbDxDYlJkKF8/YkQoPm1pR3p1ampbIzI9SUBUbmMs''@;'; put 'put ''JjUpcSV3bDxFIyJoOURFZ1RrISlwZ1djS1YyaUN4eUxlKHJLVDRkWHB5Ryx2IVcvJWdnJVhxSiglayNnRXg+MX09M31GWlM1bXUqY3NoLDlHRit+YFVSKT9DRlRsJCxUMU9lTE0+cmlwRn12JXI1VmhEcVt2ZHEpVDcwNyIyL0hfWz9mPCFJLnJtLl5rV2N1em9tVmJOd2s5KlUvQXgjdXlQXmk9''@;'; put 'put ''c1BjXSwqYGFbKSw4NG0+Un1LZn5VWmVaYGAuJjBbPCU4JHRafUk6OUl9bStVWSZ9PDlDNUxeNzRkfWNdTUt3UHovSlpfXU07QDl2VWViX2BPTlAjWGN7WmhzSTFhOXVdL0s5YzJ3YisoKClubXwodW5CLDRkRnVmIjBwcHUqX2lKRUJRT0FpeTw9JlZFfUosTW9UKHUjRlJRUVhfLEo7eVhwcTk4''@;'; put 'put ''KEZHXnBYN1smU1R9cyZ+ZXN3cUQyZj9YPGcsXXBpX25dRDJeT2J4aUZSfHpeLEtkRUsmQyloe0MxUzx+OipCck1fI25eRilgTV0+PjwuSERUQWd9NixIPG5wN0hHRFhvZyNKX1p0T2E8OnpLVGNfeEtyfn5Oai87dHttLkthLFhabilMP0JfOkk1X2RVO1paJG5MaWxIJD1EZGtDVGM8UCojIkQx''@;'; put 'put ''V24ySEp3Q2J8R3MzTEVYT21ofS94Ll8/Ni8rXzw5RyNEO1cpITpHWD5sQ1pPeGV6VW0oLkhzUiQ3fVRJWSV4PCteNXxPRiRtVmNlan1zNHVAUk9wRkBDdkhUe241PTspakV8VG93X0MwUDZXcip5JktVbiFlbjxOXklfPzs2L0xyMTVrNWROZ1dzVmkxRXAwV05FK2d7WDxhaWk7LmphPWQrS3hi''@;'; put 'put ''MW9xdEpkNXc8SjhMK0B0UjdzXTkrYz1hRys9e0ZBIXZsMnNUO0gpPEZRflEsfDtkJDl9aE4mKDB0VnxpKVIlVUdyN2VfR3F+eS9LKkhaWk07P0hNU2BZeDhWMnl9enVzLEBNTXAxLE1SY3ZyYD1DPTFzemNNUzRAJUNXW1pYSV00MSw4e2NVcHw8IXgoWzdxazc6WjhjYmg9NFskWnp2WDh9QTEm''@;'; put 'put ''SlUkNy8+WDA2LywjK0tYZzY4YDZKbU9RMVcuMldsJUR8Z2dDT3BRQTIvLlZjKWtMIjEqcWU5aXolYFQ3RmlGKGxQaH47M3ZsJDlgTGlxTWIsSHxDZDZ1WUdwM09PTzFPQjclYHBAUmp5eEw2QVtGSCRmSTheW2k1NW4zM2cpc1V7PE9NenJfMit6dHNMWSZlP1t3L1RpTlBgb2hqVCRhZlJvKmNr''@;'; put 'put ''TFswOFI2Lis+TF02WSFFb2g8Tj92NkF5alMkN1s5US8mWFRWel1jdyZ6NWl+PSxJWS5mWDhKZDAibiokUiFVNT5rIksvN3MuXkxZeVcwK00rQlFqKHlgaCxeeVhMLnFZUmBUbTx8RUwoNjooYzwydEBGe1BxKVluWDlISiVKJFFPaT1sUUo2JVBqUXcjXWFLMCF3OG9MOjh7R3M0MGpuLldkfXVo''@;'; put 'put ''emtOaH1TaVFidjopXUc/X0trcUtKbFIuKDxJYE4qby82LE1Hbl4hN2JKbXhueUBQb0VJTHY3QHRSYTJ6YDRiQCNtLD9eMGNDJVRAeDU0Ljsod14uQGZqPjJOT240KXkuWy5+eVdeYmkwRiFaPU41cDViNGpkdyk+dnM/O05QKzJNVFFGMyM8dTRVZ3xBR350eWMrZllSMmcjN2tlSHxWKXU/T0Z8''@;'; put 'put ''KGhEcGI9WSNiZDpPPTtwbD8+P1MlfCMwRDshW0h0Z0RDQC5OWlJCcW9lZ3hveVBAR3lgJkJaOitDYm48Yyo6STxra2pdYGttN2NgWjE1KSZgPn4jVlFIellOVjhPOS95bGEmUWpzaSJVT0trZzhKbzVVN2ZlV24uMyVVSThFQHcsQiFrTjBRJVtFeiU5IUdhYXEpbjFNWzJrNWBzYXl+OyRpcChR''@;'; put 'put ''IUUvTSl6SHxGSigjKElwdHQpSWxZLnU2YUdKSmB6YzEpSkhoaUU7MHFCa0hRNyh9b2Q7fH10Si9ZSExeKSNVXVs6bStefWZMaF4oTW05eFRSJllJblNZfHouZCZTeEMjbXpIO2Z8TWplaTpZWGI8W2U8Mz1TfW58VmB8PH0vTiVIbyNxQGFzTyNNb3V7KCZhJl9YYHdHfkc1WVFVe3NzRykyZnR0''@;'; put 'put ''KUx7Yj4+JE5pSmFJLmI7MFB6VDleQzJ0ZVBMQHwqYFh1L0EkUE9db2NqW290Jm1PJV5FRWlWQXxbXlpvI3xZLktzUkFhRHxDV3t0ZW9DQkFtWVc3QylPVHx3ZV0vVCFPQyxlKilsYVRfRD58NVQ/MlZaRXxEXXpiLmpQJmBJZSEmPytteXdUfiw8NS9+RS96PzNDcnJteSRKKEVDfDksO0ooe1BY''@;'; put 'put ''SlImRVVGTi4pI2FHVXg4VkI4Mks1RTdpM2wqbEo9OTxzMDJ5c0QhcGJIWWxRfSN1fUA5VXAjQitwWjFWP3JYfV4/JmhYJjNYKiMjbWtWd3NQeXQwS3J8R1omNEV7LmxUY0F8TFcvMWJ6LzhPPkc0WmVfRiVUfDM+RT9ea3daRy5RIkBNPDt+SDs4aGZVNHI7UCRlQlIpSk5xQDEwMk9vLFREYnEs''@;'; put 'put ''X052YTBPWyRyOlJLbFY6bjJ5cUJiQiUlRThQdDNFJnJ6Zi5IR0Y/VUs+YzN1MEcjL3NUcHc3Ymw2MlhwXjB5dUJkXUVnTnQyO3xBMltUZDMxTzRZSjFhJiJjS3x4P2g6Kjc3an0wXThWZFU1a1VbNn5qLyZyR3c9Qz5ZJFRDNSolTFE0Pl1yXkZtKT93ZnJYOVtsXXpyO0JuZW9LITlqPCV7Q3Vb''@;'; put 'put ''Xk00eUY/d0prQSFYY1kodH5VKDgjUjgwSnJnbyFveTZXVj1ZXWFWcXJQYWl3QmtzQC4qSVlqVT8lLyN5WmMpXkA7SkNtYTxJXlZrNyhtMVg3cG1PTChmMWdaI20xQCskUz1LfU5mT35VK1RrZjgiRmc5PFt1eWNzZkJkUmU9d3VnSWwsd0RhKUQ9bDpTR30sZSxlT3EiSkBocV1WWXlMUWs3Y2g/''@;'; put 'put ''UGJeakhfNGFmN0EraGg0THdiPnlBamQxPSkpWnFpRzMzak05eTA4P2k3SkZPa246NCtqK3B6OU9+NXVEcHoiR3BjejhpQD1SbDRVP31NakMrcTVxdjFQfi9CSl1GPDhxOmpKY1djYD1xQ0k8TyYwPEZ8JDpqPTMobjx9UmQpUzl7NmY/UWpEYUFSSH1eMFEzV0UmQCN8SW8sNytSVHkkbj5VVTJv''@;'; put 'put ''KkJLeld5WTIpZVhSOlhwbEUjPjk6L1diP2A4Xn16M2E1eG9eUkc+S2k+K2czQEpFLGspKGBiRSw/ekltcn40L0Jydkd7YywjN0hVdnZLUFFjPDQ3QmFiQn10Oks4SEsiMDk6ZWFOSCF2JHxHKWNjOl5iKm9APjJJXlEjd1NkejxWJDpnL3lKb250OUsyTTtHLCU/cm1AXyVrMzIkLj9kLkVdJn1E''@;'; put 'put ''NXd2NjkwSW9kVyw1Mi5YSDdCVSNeRnlKKlpAYzxLSXwwZCg4RmxYZW5KPG1uIVp1cjkqQG89MmdNM3ZaS352YEp0QSFoRk4sSTkqXXZ1emwuVWAjKVBYZ01CbDI2VUcke1k7VDBJKVQ7QjEjRX11UDdCelRxeWZNIno8TCY1XUQ+T1Y2XlQwdnB6eFdvfXNAeDF2UmosaisjfksjdEokJWZGQDlm''@;'; put 'put ''YzsuQiphPjdXUjJkNj18YllDalkpKDp4bl4ma3ZXcEZLdzxRPEJXZyMmdV1vNUo0bjY7bkIoMmBlZWh8QigzdCg6a2AhfW1VXi4/Qmt4dnxLMXYvY3xxVXt2OyF2Lj0vUklZbjBkSV1LfktVUTFeO2cyNy93bSF2VGgyPF5+JEQ5R1YhdStZIk4lclo9ays5b19kUkszPVFseUx+SiNlLDd+akA2''@;'; put 'put ''JD9CSFNIOWxsLF5NVmkiVjlyUU55WSRqVHhyRUVCcEN1VTxPK2BNRUlTbXV8WmFvQzdvdUd2cG0+UFskdGk8fERZMT53dEJVVjdDUnkvIUlMNE5gW1pWd2dwPjE/PzgsNms7dmQjXyN4bkJAVT89MSYxblR7MCJtfEwxVVs6PUYzUDR8OXhJL18mZiUzb3NycWwmaS95OUtGSnhzLkdPXyNkP0Uu''@;'; put 'put ''Q3FkQlU1WnB+O3hWZHtjWGlTNzF3TD06aEpoU2glcV8xclB8czkqNFRzQypJNCR1MihVPi55bTw0V0EuXWg9X1FgfmhFX0ksUWJeQEsmXjUrX2VTazdEUmFAOW1hQWZTKmw7ZFIlUFZaOlByPT95LEJuRl90QjM9Pkx4eWtHRVtCcWRSME5UVVMyNCMqWndlYU1kTCZWUExlZy5PMGg6SSghQ0JO''@;'; put 'put ''eV9dRTspWDlgTi4uVCVMb10iYGdDUDIrMnxweUk9TzBqQHpebjtFPVhxSzt4WX5CdT9FeV87fiFyU0tlMy9AflBGWG9GYXxEKnpzZyZVPms7JGZJc089aVYoPWF3NW1xeXduXkdRI1h+IT1xYVUpbDgmT1tTKG11dEZqZGZYcVIlem19VX0sL1p4Xms5RHQ/dk9PIVJ7fUR7ZGkqcCUzWn0pPkgk''@;'; put 'put ''MylyQWk6aEFhQCNbaUxfKEpjNFZDPVlqKWZHeUFseX5lNHp+OVI/T3VrSmNMbXwle2RKKi4jQTw5Y09ranNyJiIwMC9XbE9ZYygxdkEyRSZxdGchX11zMFN4dm5We31aPmZvMnpRQEg0bzUhIlBwRiQmcUZPNipNWUBDKkYwSWtoYHs6bUBtSH1ZVG5LNiklUn57UStTXVkhZFtuSDNdUFc3czs+''@;'; put 'put ''NnFTNmhFRF4zT1k7Pkt0dDV3a35pXS5QcFg0dVhLQXRueylFNSo0JH55bl1HT3I/T1ReYEU2cXU8XklpS1Y7Uy9SYngxWkp2bTZKKD5QW0M8dGp6byxGWUF2Wi53X240Rkh4UGpnQUsvYFNCTEAmX3VRMCVMOCg+cEJQZylOQDg+R2ImJlJxV2R7XmVDWGEuQi5PbCEvJkwlZi9XNjFXYj0mNk1m''@;'; put 'put ''cylBaUQrRiNPXXQ3I2woSksuI0ZLQVpDQEg/aXt5N3kxeW0iaz9XQWlPQGplM1cjOzFzXk5bdShrRXF5Tkgrb3pnIUB8UlAxTC5MTjRJeSU9R0IxJiNRP180aTo3JG1XbFlELEZWcWIpU3x7RmZgOSxVNDpAVylicjRpandgZ2YrI2M4WSIsb1UxXyxQRXY7YH5MVCpDTnVJSHw9fU1VbSNDdXwy''@;'; put 'put ''T2ZsLnBjTDUrcSV2NVBmNHx5MzkyWUIpKjRoWVt7VlA6PHp9MmciJCJ2PnwoJSUjKW14YFs8Ynd3cHFKUFY0ZS92aVRgTCU5UkE3Tj1RIXB1eCNHSDBSby96SEdXYjw4cTUyandPUn5pdD1Wb2Vbby4hIW5LTGohbDxkQGtmSF9Rdzw8XzpIRS5qRS5XXjwkVDJwNiF4WnNmPEtyezFJSTZvc1co''@;'; put 'put ''Il4xXVpoVlBgQWlgYCxdamk8eHsoLEYxYWQkLzRrT35bZUV1L0d3O3RGOWJNdX5qL1JqbDU+ZDI/KC9HSUglQlF3JkooKDdVQjpqZyZtZnlTUSQoPixne2lyVDo4QGZLIWJpSnk5dXMvNjo4YDxZVl9FV0oySmwrTyRRRmgkMXpRdGR5dCtvNihDJkZwcDFJcUdhPz9MLEdnK0xQOy9lS0YsQkNM''@;'; put 'put ''TnIjeVpufHJReXBAcnM9XUM7KERCY3BFYFN7UytyaWJdPnZXW1pILGsrcGxyeXYqZy5rVEIvQm54c0hxTmBzRy5GUUBnT2N1eXdtZTdbOmxENmMpMlojSC4wKTkvOCpWQi9yIyQpbkBNWDtEUzU2PXQoeXNlXnYlMFZGM04reE1IVXFqWil5fjt5W3VUP0N0KXA2Oy5NOTw9NU5hSHg9QFl7NXJo''@;'; put 'put ''fTNnbnJtWEE/cVFxWCNxTHhfZGQoMTJ7VTEwTHR0MlB9Rml0d01oQ31nQShfVk9aWmNSJX1uNlN0I3dAfiRSJGVPfGh9dToySFVCPjB+dlQ+bTooRHksdlZvXVo+aCplQ0t5e1MlSDVkeW0lNCZqZGFdaCtyMHFZZm9GITk0S1spbnVPQyw2UCJDWV0/NVhXI29mYT4oZ0IoPU02XlNaWlssTil6''@;'; put 'put ''KkYxRWRVayFGZH1zWXVLQFN+I1V3dmw1e0dkYUF2cEJFKjtfK0dadFh0Wmt2ayZHSSZMYUZFcXtKbHwzWlBPXW9Hd2x9ZSReJHo4Q0IzPUAvfnd7PkM6OWhMViJKaVJ6WWNrc04jKz9OPns9RmMxZl5oPj17KiVbPlpkfl4vUGtBazFvRm9vX1tfOFIwJEw5ZSRuPz10fGgmQkw6JG98ZWQiImkq''@;'; put 'put ''O0ZDP01fRSw+YlpKck5qcTFHTDo8WDJ7bVYwanVDdEI7c3A+W0Vgak14cjRwbFU/YV84MFI9SigxTD90eG11WzBWJndldC8sWT4jeHsjbDRmQTU6X3FVLE8iOTEyUEk9YDYrMnQmSENRbTA9IWY3XnwvQjlrUmQyXVZPTyVOeW57KFc9aHZKc2kleVIsPnxgPiM6cztAbF5YQFQ+IzFUZU1kcWxy''@;'; put 'put ''ckJPQFJWNkglWGh4XSRuQCM1QnlGO1ouVnA+Zl5VeDhQeDA5PCp8MElPfihTcjBTLHJ6UTo8RSYrdGdkQ3pFby8waXR+LlcxUHJdN3FySkl2cz5HUmlmVG56bjlDZzdwPlskYjJ5c1AhWUEvMD4zUSE7cihVVjFRWDNfWE8iWHRhckhlfVs4UG19YzFNKHNsMF01OnVaRGgiL1VxZlAxNk5KO1F0''@;'; put 'put ''aHFtOlhHR1o+eGZdR1cmYDVzSUU0OElHc3hXbyZeJjg/c1Z6VWJlaio2Qy4qbH0hZnJPfDBfKHpKaXtUZUpAZmJAaUkkKko9MCRuZ0Y9eD5XdGtARmJPQGtXU2tfOkZBVE47NlNnaUdTUyNgYG9lMismLHtRODdUeWlqPEZbfVR7bj5ZPyJ0aDlDK0smMEkhWiNsWSxDd09LOUx1L3M7bGA9SDNl''@;'; put 'put ''Z0ZLekJxKXx6aDd+KVIrSlglVXYhL1YmWHZVal9hWzlzVHtmT1AzXTJ+JlAwblUpMyg2PmJTQmsrJHNATzBlbDNpfUpfSWpYQ257dUw0Ikk9Vk9TUn0+KTQ2PGtSRWhxUyY0YS85RnM3W0VPKWhPaSxwPFFDOnE5QUhpSXEqeHUpaCNxYGhFUUExaktHQ1AxY2hdKVl5b2JaeDNgQGV5IkZmbFom''@;'; put 'put ''LCt2aDtRMVhZMmU5PkVGU09+UXNYWmJLSVk4W15jO0V8c1pDW0oxP3hCYW9ZR2Q7YSEpfUhYQzJ5PVtsWWluPkUldWVOOE82Zil3JkVwTTdMI18idjpFelZxTD9TTm5iRywqJU8sbG0uaHE6UCRUR3dYQFZZYyNHLjRJKE5eS2wvYC8/VDIjRSFxWEYySSRYW25fKz90Vl9mbD9eRVZDV31bV0tX''@;'; put 'put ''Uk1bPW9Le3hyKj5KOXBvdElfdDUrTmMkZ1FlQCNSUXlTOEozS3AxMFt2Z25kLjpnfHhWVVReIlp0XUg/JEk3eCVbWjhXRG5TK25yOmk4SWkjdmRsS35yQGBTfkxXSTolT1VwLF0lWloyK0dYcTZYY1B7YTtzVWxQITA7Yk5oNjokZVFQMWh8eTIoTi96QXFiJUlKMTt8XW1LRWQpVDVLUj5DZ1Ql''@;'; put 'put ''cFtOfCIvZGp1bUszNCI+N0o7UExXfHhvdUtYJmd2cCF7LklAfU50Z2kqLjhKOz5KYFBgRHt1anFzWiJBd2lnfmNhZ3hdcW1+R2NRPl0meVt+LlMhXSVManxwIX0rWj5OPkdXXzFNI1lqW3BYSnRiZjwyV3h0Tks3YGpzW3R2MV5SczxUZmN6XTRIPnJofjVDd0lDKDVjTTp5e156OTlEajgje1A2''@;'; put 'put ''NClXYUBRcUQ1UjVwY0p2Yz5DVkw1PSVPdTxLLk5fV1Usam1oRi92YWRHKTh1RUJQLzkmMnVaQH14WlZeZSQkREw1PkNgQClDZjM5dXRydjt9OVlxO191JjU3TTpjSEV3QDMkczgubFoxQ19kOCE4SCxHMHpAfDJUbTJiNUtWYEIhaVFEY19ZejMpQG0+NDN6YG9lUlhuVm85XVZOQkRLUmAmb3Vl''@;'; put 'put ''d0leIjBaWGpJemNBTj56JFF6MSJoZG5FY2hSWE4pZDwqI1JEYzRjazBwI1ApbGokNFgpVn5lRzNlYmx1UmFVe2Jxbjk4Y05RfF1fe0kudWk0IzZEezZBb11oUFRkPCJzfCxMSmE+TT1pMWw4PGkrc1I6Y2F2RmZvYXksUlRVTzkkNFlTIVMmSilIT0s1SUJsd3tOdVd9WHBHV0VZckpySW5xUysz''@;'; put 'put ''Mz0vNUNjUF1xaEpjZn10PHJYUnhDVDNaMzA+d1ExWDYmK11UWiNabTVCNltGeyIyZjtkMnhRYU90RUVvUjsmVT02TG88I0FyWz5NPFtNKnZETHZ7KG0jcGZ5RGl2Kyg0T1hMaCxtajE/Qk0vOVh2VFhNOlM0XS81IldFTzQ3RHUve0g1SW1tU2wqN3YuUSozSlRIdFh1LGptfn1jKGppTUlJS143''@;'; put 'put ''WmZUOEEuME92ZjxfdDttXyE4VjFuI14+L1RwdHhmeFhdTi9Zd0JrKSFHe3Z6TSguZy9YaTAoNC5mTDJqQm0zcXhkN2k0MH07Knl2ciE2bG9xOGZ8Z2NOMyV2TyNUKShvXS8ve3RKM1Uza1cjXiE4RiRkYi46JVlTUDddfjB8QnFyZz1baCQrVUd4SDxsdVAkWHJdUGZ2dSFoaUtZL01gVDF8ZC97''@;'; put 'put ''aksheWZobkt+LDt3LyU7JWNZRiY+QSRqWExrYWN2azUrZUM7KFVEK1BDS1coI1RkPWklMU8iZ2ovJj0zVWtzKWZ2XnRMeUksa2F9LiYlPyVJWnFaX0JCZ2Z3bEkpXS9NUS9pL1djVU97WThhXkZCWGVIZXhaXWxHZlhHOTdySkhwMWIjfFckPCJDW1NdQyU2InA7Z3wpWHlbK117QH4/IU8+bC4q''@;'; put 'put ''PFE+dVhwPUdIbHg+ZDxFbTJteUxAT3l4Z2owUnZXVHhAM1hhUyErdFNNU2JIS2cxRjo9OmRvSDt6UWZ0STg8X3FYKVFoQk8qKExMKTc3ckBnJG1yOEdgKCp9TzAkLDxRO2BuImFTZld1XWNHeUJ2YHQlP1B2Sjchb3l9QUEwTVJpR1h6R1FTfE56TVA6OHgxQzJJX3srITZVcnFKcTYvQWhxbFV1''@;'; put 'put ''YF1CVyZOOnxCS3ZGKik7fE0qVyhvbERAWyFDcnFgeHkzTG5XdUdLfXdyVEJbJnxETE9mJn1hSzosXlFGfk4sX3IzWX1EXzQhQ14oXio6OlZaZHZXIX5VY2xOYUZ0cilYNSlmK2MkaStdTzxwcSxxNkxKOnEoQjZYT29KTSJ+TFUjL2oyZ19gdlttcFlMLzFKPn5qakRUaip0bksuZHxAellYdmZP''@;'; put 'put ''VkVRQHAiKzBKcy4mLzhXVWUvJi8pMWFDVShWSyN2PDclI1dBdiNebjpRazc3ZmVJYCJnbXImQ3F6djFgXShAUHwvVy5jbS49VHZ4LEBScVh6bHw4OXNsciRGOCEibUF9QXVMdHQvMHo8fURdNm9zM19tS29oJmAmfUU4e3ouPCljTXYpYDR+ZXpGVDlhWn0uKFN6LkAxOy45eDsyRD9YX0I5aTB6''@;'; put 'put ''YV5WRjpXTT5ybnhvZE58N3ZYWiZyXXl7eGBJSmcmZm1+ODZlTzRiRS9yP3MxQklwRWZiYWV1ZmFVeUNKaDE7QiJtSExILGt7RXFPP3RKWWg6R0FSRF9JZCxVRlRGWVsoOiRJbDRAaFp7cS9nVTVeaVlkVzZIZTUqbUN0JllxYUQ/PXQsLndrcEpGYlhbWlZkVUV0JUt1NDB5N11tXlpwMEYwdipl''@;'; put 'put ''Uz0/Z0peSFBtNEJldzE0VDAsKWFMRCVkWU4yPDV5UUdYKDV8I1s2aGxATkdTVmdgNDBPWFJGPCxWdyREZlZVSnNTL2h8M3doak0mPU1KbUBnLEM3USg7NXJLNjh1V0I9NFt8aF16dEcoXnhgezMqWWxkeyMwVSRZaEk8ams2aHV8YTUidGtCaFEseCUyVW0ia0lvZzQ6Jl1QSUFVYkA1QWpIZT9l''@;'; put 'put ''dzYlN05XX3J9SztzTFcudH44Xyg1Q11XIV5PNWNwViV4c0VhOSswejpXMnM9UEJbJjAlOUtBc01+a2QjflsmbUxyP1Jfc05dNXNIN3JMVU1xRSpkLnNDeyNjJmpWPW1sY25CO2BbIXpxbXRPZ0kzRCo2TFl+Iy9qfCtVYzVWPDlAYiQrWUp4YiV9WXZ4bzpScEovbnZCWzMkdk8vVTh1NW0wcVFf''@;'; put 'put ''ckUhXVJ3ZkhJZ2RuXXFkJksoK0NjfnZ6TzswcTxXUk55WHNCa2JqeS48b2EzIlhnKXorWTQyJkNWaWhdRy5YfWJqSiNCWVY2WCp4fGglMjheJWpqSGJEIlZBWmlQVy9mUzBIM2liSDVZZFFyT2xUaD9UOW5RRU8oSWBWVFlpUV1mR3RBWlFoemAhUHdNfX01bEFQYTFIdVpYdE5MdmwyIypDP3g7''@;'; put 'put ''Ri4sXWwjQXBueFlPUnAmSSxNdlp6YUVlcU0hbSJDdTh9LzNfNl05aVYwaCkjfVE0dDpze1E6ZWlSRj5HImw2OXVTP2pYRndDJEk+NkMidC9deCFbZl1jS3VoayJ5WDRTcCpCJEIrRjgoYWo7UC5lN2pkO1RHbWQ1WEl+YV0vKH5Re2V2X11MTiw8ejVXZDZ7IXh7OEhwRmw9LzhQejRHTVNtWXQ6''@;'; put 'put ''NlpbfCN+KEN3dkNkKGp7XnJ+MT5PbDVkPElnJHJIYj0jO0gvKTFSXWpzPzM4T284N3NFczI2KzBIfj1iYSlQLzA8MCo+PDhPIWV0Oj01fkpIT2wxXXlXbmovLiZEJjxuZyJpdj1aaVI1WzZtZyFmJiRtQEopdFQwdU1da3NVVD1zaDp3emcyPEtXQkUjUS9danl2fTtbK3h3eDUiZFo9fUFNNDFz''@;'; put 'put ''X2ZiWDVJJiQkPUsmbHN8MXpfIU17bltGP2IuT2IzXUpYX2N3RGosRi4uPD4pcj5vaSImY19lVm44dyNnKmgxZDtPOms4RTc/XW8+Y2EyV0JjVVlASTJOQ3YvNGVKXTc4M157RkdrIz99WnU3Ui5rOk15blN9fTNaPnB7VWdoLnFAfjBeWjM+NUtvVkwmcXRlb1s5QHcrMmtJPWdmJHZ5NXNvcmVM''@;'; put 'put ''VUh7bEx0WEprOHlOVlg4fk1OPjY0TGElaUJRWklNMWl5IU82alVgPG5rMSZ8PlFOOyl7PkBgJlN4MiY5ZUh2Yl9uNkA+V2p1TkR9WmM7M158PTFTMC5xVi5efVNjM3xITFp9LzhHMlZ7MT4yITlVYCgzPy9sYHx2UzxFNXhTPCFML114NUZlKH5sTH5yYilaRjZSOzghQ0t0SiQiOFJjJWRXdEgm''@;'; put 'put ''UVFHWX4paVFyZHQ/M3FfUWFpRzxLdlI+V0tIeGk/PGVVJTkufiFJWXQveSU0Y0NDMFF2b1pZMSgjanUhLyRyc1JRblV2KkV5fGA5XXpzSnQ8dno4Rz8ybzoyMkUpJnE4SlEmRF1USj1wZGQqLCEzcm9pOWEoK30pZ1c5NXkmSGJNXXh0JX5KPXljeztuRDE9dSlESjpnTFhlcHdQcXhSVDJZLmto''@;'; put 'put ''dDl4O0c7cGJpc2prc1ZTYHF8VHFMP0J5TCJfWnZwL0g+PiM0R25sfGVnO1BqMjg2ITBFJUBOWmIhbFYvWHRZRl84NSRpUkdTeTdhOUl2QzFFfHxWaDxHNEJbcXVxWCZ0XTtjIzsjcyNJd0YzYX12UWQkQ25wOCteNHpya1ImM1FyTWhdZS50UyU9RCRSVExNISFoaCU6dW1fZiE/emhVTytUeE9I''@;'; put 'put ''KUBuRyRJZUohYCM6OXQ3QyNCQGMxY08xO1dXNlJ+IyZfNVE1fFpfdUR4S1lNaihrcDdnYWJ1K1AvP2U6UU9gPmw6ZzsobGhdOD5bRHpSJXYlN1VhLiw2dzAvaXhPU2gpVj1Cc18mKER3IiM/dCZFc01iJmRVPylFZGMvSVImK042KUcqVyZwe24vTy8vdDF9Lj1xKkchfiQmaipbJV9GVigwTC5J''@;'; put 'put ''NzxKbiRIK19zfj5gfmc9V2JBa01gQVlyVXdvRX4lNjkjQSU0QigiN0UwQz1he1syaT15P0FqQWU5NGghKTk/KGtufWhhYkRJaiYlWmA5LEU+YkpJXzFoW19QKmhRPXhuViltZFtMPVZOZnBuWywuUzVKPk1LelM+a2d8fGBsYzUhekdhQl4uOywvIXYuY2JKLG9pWSVxLFZgOE9iIXhQV2FdS0to''@;'; put 'put ''RClMT0BSVSE0b1JFKmZQJFlmNllzWVFxKWBEWVJee0dbVHtUYXRnZClpe05yKnx1ZGNPWi5ZeDZZaVVIeVJvNGs3OWBdIWpRRl13Pl0oU35yUnsvPHVuWlgmKzVDWW0xfCNYQzZwWT5sdDksLmoqZz8iYXhsKClfKk9lcmRBTl1bWnIxZXYsVHA+O3sjd0J1OEpVVEREVlt6eGpHK0xUVH45IVZT''@;'; put 'put ''SUMyZFkrPkEvTzA8KVlmTjZbMXQ8QlpBXz58Zig1eW41NXo7VnQlOXZmRShfPFNRb0AmXSlETiJtdWc2Onh5TV47JGA2c11WWSVjViJsTXcxVUxRaSIxd20+X3E3NVJjSFgpWDRGeU1LfSgsPW1tXzNvRClCQXBWLFY1R0ZbSXIvY2t4KG83LlVbRn1heiYufj9UNlQmSisqcmcqSGpdY2IzNXpJ''@;'; put 'put ''YnxrQHIsbkxYQGhCelo7UVFMZkxCbG1PPVEjbW0vUWo0dEJicyZ3Z1QxfWR3I3xmMFpwcmIkSDI1Zl0wLyxQRDFPT2V2R1NtNmskVHpLdlV+N0dFMi5sSXQ8On1ae204T1Mib29UKjRZeHgjSylsbSVUIVNHYi9UNltPTEY2VntUaU9xZjkrRUhtfl5iJTl4Pj5xRm44RmlzOT1CJFdLMjZRU35X''@;'; put 'put ''Rj9QOVZBRUspSiltbU8hfEU1OiZ+dWp3Ti4pbGE3Z1JvV2hLWG4jLFE6cT1zLzMxPTxgRXkmdSJSc2IiN09LbXRnJUwkZlheMXM9MG5bem4mQTpBVjddSVBKRy9uUl8xYzhMSnpSIVV2ImNpSnNuRix9XnglSUU5LlRUIzN9WyJ9b29sJCtEb1kuemBwTjhYSTw8XVFpZEdtWmVQMCxefUFjKzYw''@;'; put 'put ''eVtFbiw0TmZYPHBLekhmaWd0N0VqKHtRaD5gITVwIzNDIUEpNVMxWEk0XlNObzhFaG9BMyE0S2JwPV1zfHFGNmovODxvLnJXU2RveXZbRTVFKnBEMiRTKWxsZjpNOXRSKDhOW2siO0haTG0sSDtOaEBEeih0Q343biZVZlZZSzFEIiM8fD0kNzs0Izo5ez5WQT9lKi5sMH1kKWtxPCxMQ299ZWJY''@;'; put 'put ''NGdUZ05OLE9KbXowbUVkZC9PK2kyNXwkSit+OzBfdHw7bz1NZHdvb2JiO3pET3k3cTNJZCtXLndMTiVnaHp1Ql1lJWlaX1lOfDFAdnJWdkhoLjUreyNLKzRsa19wZEtMN3hqcSNYTSxXaEZldDhpUE8kKUg7ay5ifWVdMTJwY1N2I3J8MD0pdUNlTDQvT1EwTHw2Jk5sUjdqUVJ9Nk91eUxxWEV4''@;'; put 'put ''T3puSk57Pm1Le34rQi5GI2ovSC5DeGBzKnhYTihHS2U0V2Y3Zn1ZZ1krOFdCSkwqdHtTZXUrTFhJb1lZWS80YixhQ1ZlSls7eDssSCkvMjcpMG1VMihJTiQxJWgodklKX2VhdWdgc0NrdF1TOyVwe2oqWz9ePkBkLnc6TDxBailaK1N7KEw2Snk7Mzs1X3lHTHZtK3VzSldvXVUjS2tvelBARHpp''@;'; put 'put ''QnMsKnV6KCxDV3tVMmRZe0wzbHlhaWU6NDQ3b2dYUCJbZXEsfmd6eyEqTl9XTVhAWz9PV3NJYHV4aFFQP1ttfDc9WyxbLkJiJDJ0PV0yZ29mZVkiZm1ab1RsdipCeThoSWVLYz84ZStTSEdeal8pVlBlWmRvMkg2Vk4sXUhJfFJvJiFXZERCXnwuZntjdnBafUl8a2pKeFcoQzBidFM7MT99c1gu''@;'; put 'put ''KW1Yd0RMej8iOkttMEw3NGFxeHp+NUR5dGhjO0M3aiYranZaNERmMXVzSFtQZ1dwQTtvMGZ2X3g8RWl8VVI0XiM2MHolOj8hMU9uZ3IjKjhUSF0sRyNsWnt6QTxSS3I4dExrPSMrLHBTa2ZILng5ZE41PlIoKHFlSkQxRDlTWiwhYzhDd3FVeVNQcl5gN3V5czVyd3IhVH5pSjhlZ3EyRiV2K04u''@;'; put 'put ''MmB7WGo9XXBgZUpCOEElOU91MTB7Vk1WNWdwIStlTXVnU0N8WEdLNGNkfFVUSHEhOzA4c3g4cWtGNU5teGF3RTZ0TWwqIldLWERtNikyQGYoNXsjQ3xjaExOSXBKW3pTbnlTfj9lbT82I1JAPXZ2VEFPeGBkXUZQRTl1Rlk6I0dxY3whWD1hTzNYLi9UayNCYHpTaDBybF49UV9ONyQ/TkJCJmBS''@;'; put 'put ''RC59Nz5gbSx0KG9rKDBAKSwyQSRGST4xXngvdUk2OUhOU1Z8MmIlTCQsQ1d9UWEpPitdWk9gNCRLPjZNfTlNNUBaXXU0eWkheWYlUUxjUjFobHhsTHxzLCQldz1gNCZKWU58PmtZOGQvSGJKN3VRSVVoNTVWblhMTkAxfTl0dnNfSzZ7YWJ6ci5RYXJrX1FmTXxWNXp1SDJGVVBfIkMySXs8OGtI''@;'; put 'put ''Z1s1NVlHcnFXIz97N3U2aHYyVz81Rj8yZGcsImUqI3YvKEVGdyxiRnxJakE8I3NITjs1eFh+eHNZcjY+SVFVc0hBfGRQZ0R6eHBhPW1uUFc9c05tIzlbX2RzUE45PmdqfUl4bCl3aGQ5SVNtdmhid084NURxeTMoOjV0WHlgZDxoaiZkRUZ3Xm1MTlZCYVl8NEc4X145c19hZC8/Q0NSe3x6Vix2''@;'; put 'put ''MU55SztlI1tBV3tuKCxhZilENHRmLi4kaDpmKH1zSnhFUl8hOVFKayYwJGlqcnFNOWBvNjJQKz9GUzBfRFQhYHpeXWMjRyM3WzpobEA+VHdZc3YjQTZaYUZfOEVBNkJwTnNCNHBYWSM9cDFSbC4od1NvTlQ0Qzt3UTVYKiRufEBKV29HJVFaYSRIfHFRMDNFUjY5I11RcCModl5oeFZYdmIlaWc8''@;'; put 'put ''a3pGQSsxNVMjO2lPYXN+Zk4sWll1ZGM2dU1BKH01UmNAIlo8XSs8UlAyWk0xRHhhO1NDXz5EQkgsL1RXX0lDIlIvUnUwYntQO3c2d1tJMk48RWlqZ2gjKmE5UDVQT0RwfW00dGhwRDJDYDV6di80W1ExYEskNWo+dUtgV3N7LyJ1MFJyTE8rL2FleVloUFs0SnZARH1tK0lUR1RDeCkzT2ppP1JX''@;'; put 'put ''bHhZdUdaYkRge10kQUxadmNtJTZUI3Y1I0RvSTk2SUwmakJGWlhLWjdPZGN4ZSZiXSFfWTlfTWg/MUJIWlgvQkhNJSMoJWJxK34jJU8sNE8mO3YmNHgyJWosZUcsMD02dlc1UyhIVllMUUx+QnlgS1g3OnFVNnBvPiF+NyRvVkx9O20iRk5vUUNMcGY4QzNSI2IjSlFrZ1UiLm1UQ21JcltxRDQv''@;'; put 'put ''RGNFODksSTtULiE0QGA+WlU7amt+RXJ6LldJVDFCZGt2SiYqRyEqS3RmYyU8REk4dlhNZmF1WUAhP1kuVU42VzI8SF91ZixFazM5Jjp8RUNPMWVQZjVBJFdLLn4jeSpvTFNLJltlRmglMVZoTVNHY0JGR15YQ2hjIU1LRHFrX0hQNndhOHV8TGwiZlhwKT0rZXxWQWM9cmd4Py8ubEMze1BgaCRC''@;'; put 'put ''LEZDY3shbDRDTEsoY0NTX2NRKEpsJkF+c114YT1ta1QjdE9MKVEqTkp7WXNeP1orZEQlbXlhMDJqaE1TcCwrbnRXXnYjPVtkRHAqeCI3TEI5TCk9Rn08QDw4USxzV2A5eit9Nmg5fWJDdjkzOD9FUH5xKDJFcDw5PGpWeTU6QTw4TDBrdVlgN1hPKlNfbmdQbEU0fUYzfGhgVClXVWN8bVs6aygr''@;'; put 'put ''Rz1pYnBhfVUyWjU5PShTYTVqKSJXdyhpOGxyUGdzWj9WIV5zRW8mZEVyejZEW0JkMkJISHJsWnVDeCwvQWRgXm43XXR1TXpDYSxLejNALzVyPGZmeyVXRHtifUg6e2YvaE10QDAuUEkySy9dNHQ2S3hURDh1JSpRbT0lYSkkfDdIaXpCdCtXOmBkNCVmOXdEd0E1QTY1eUAlNV96aE0qN2hvZVIj''@;'; put 'put ''endXTkBbXnxBfDpHVTdlP09VJWkhQjNYa3MheVo1Q09UWU1XJmFQQ21yTyZdTmJ+QH5UY3ZHR15SKixXdyQwIVpEe3ZqOkkhOFUkTyhkdClhc2cpSCxgXmBvSjMkZzM8fWNSUEZVTFc1fV40byNsfUJSX1lNOX5RVE85ZUZjdz49SUJMKCFINUEqWD5tTnhBUE0mK2RIYzVvflJON1k9cHY3cHNo''@;'; put 'put ''Yzk6W1N6ZUtTRnByZyFESSk2dk1FPHd0OFJXbF4yZzhfUD5+YThLe0IsKjtxVyE/cGNdemZVQV15PXRoTkBKP3dGMzQsTXJ+JTV1YGcwWWN4enpRW3B+V3haMEMuOkhkKHcpYklMcGBrMzV1QWVJNmwheXxuJVNNNGR+UXg4MiZKMmY9cGIjNVlwO2Nnaz09L1BoO2ZaW0tKSWlIdHQ0NXA9T2Ey''@;'; put 'put ''TjRHZ1ZfPWQyTndGUEcqJTYjXix0eFBPeipzIk19Q15+bFckQUNWPyJ0Mzx2S0FsKnJ4eH5Pb3l9bz0/ZSRMLyJLQkdReX4kNnEmenspazBsaHRIIiIyU0U5fUcjNFZbJmE9ZXlqcG0kWyFvQVo3IXRJWl05Rzo4IjZiNUMlY1Rmb31yQFRLLyVRU09Xa15PeihmTXZETVI6XVhWfTJgdVBKWnV5''@;'; put 'put ''RFQqOEV2PkdfU30jWH1lZkR3ZzY7N3p8YlZSc0QsOiQ8ZUw8NWhCXVskNHllRzB3XzhqTiRyJilpLFFzOUppbHRPMCZYYmxFSkhIMVJ5ZjsuISZtcCkiK0csSiNCWUxRQ35UTjxybDghNDs/OUZkIiFQdFlEQ2dOSHQuTDB9ZFREMn5VOENDcF1dPyRQZjB2TTFyaVo6bHpIfDJ7R25LUTNXPkFC''@;'; put 'put ''fWB0fjshfEdfZ3coMldzfCE5TlJ8a31QQSl5RDBfOzAscGo7RTJIdktFZV5qaHk6cWU7ekJXJWdieDoqTmNGdEdSMHJhekpWdyZ6RTRVPzRlamVXRSFkLkJBSSp0UkosOkQsZCZCKX00bzdJO34mM3YpPGhjfjI3OjouWH1UYSxzTl06bjZrfUsyYjhtK0g5P0M5SmYoOTZUe2gkUCF+WXg+Skd7''@;'; put 'put ''O00hcn1XYFlLdkh3STxCO2pbejolUEZ4b2RQRFZQSiRCNXwmdzdgPWg2R191cXpgdndTdTF8Y1lLOCVVe0xAS2BLenl0RSQ4WSpCYzlDKzoqeG0zNUxqLzVYLntKdkI0L2tgVW5GSyssI2p6IWxST34+YVBSc1g5Qnp5eGJiQjQpQlE5SjVYXmYoTHpHMzRUeFMoJWthVUA2QDFjd1FXZ0I3Y1B6''@;'; put 'put ''TD9kaDpTLnM1eUZ2WX11O2AiUkp0KW1tWCRML1U1JURtKDNOK3dlKSE0IX5tcFRkJXomcW1RWW1vR3lJd2M8QEJ5fVAwS0RzTFhsI0xWMl81N1AkbChXYD5FVVZ7JiNNJC90KXY/N2orUmk5PF5DaXc6K0d1YV5XQzhYX19TWl1qIyZ3bChbU1B6JmIyZSRGPzVKITZsSVE+dC9NTnpbT0tZQ0JD''@;'; put 'put ''ZGJlaXlDXWEwM29CP1AiakdKcTkxX0RHajpyKEc7XTQpLjNyI1FLQGI5OC92WCNAP05BbHYvOUhOJlcpNWRoOHN9PjEoeEJsOzElLGFtPW0wTHN2aXpOayRfdnVSZSo3PGlKZEFtLFVHU0doUmQ6V1pFR3F9XixhP3JsVGVzfVhkezsrZWlIK2grTX1lVTtLY0FTWDJWRlJsSl4+OyJ7cVtiKSpv''@;'; put 'put ''ek0hXnZBdz5SOCEuVEJmbjZQbURFQ2c1S3g4SjFWSTFNY0ZKM1BkMCVbT31mVyheQm81ak9HaW9VVG59d2hOcDEyNCU3eWh0b2I7UmVEeSVybXtIZyE8Nk1uaDg3dT8vZWwxOl9kWj9weGd3dyplb0FKUyRdeEgyRGFIW2svJFdZKGVlcGNWI2M5fEkmeXo8KjtTTzJffTFjcmdKKGQheE8xcW10''@;'; put 'put ''NHozZk8zVktObmtwTml1UWdzUilmcGZITSJJbFhVRzJse11HSCksU3A/TXIrTz97PjwhYFhHLn5ZdXhfJmg4aGNeMnl1eiJqcTBWWVFFeFc8S2w7X0NrcU5EXWliWHN8MWVtRWVgPFllRDI4amRIOjxqVWVkQ1QqNGlGd01JbGhSMCpjUXZjdTpUJUpmJVJtOlpvY0paXiNsXl4+aCgieyxsKTdJ''@;'; put 'put ''YyVXQmBkUH1VUmldSGpmOUQ6P0lAd2JoP28vPCpjYWE8RSNYMyRGXns/SV4+WVJIcHpifntLd0Y+S3NyPDV2R35Yc3skdyFRfUdhKVdIQUt9QDF+fD5fRCFHWlQuYzR3Y3BKYXgxfVc+YFIxRnV9NmM/JF5BfElVY1cuazRbVXMxVjx5SSs0c0VFXSMuT1JfQnk2LjpQUHVATFFDe3J4bUZfeVR8''@;'; put 'put ''UUAhfiRzV2xCIk5qPz1JX14ka0ZVeylQWDs/X1hCdyVze3FoT01GU0x2JldNYkZ4WUtCVEg7WjdaYWwoSHN3fDRDS0ldJiNdI290Nl9oJE5qb2k9PmE0KHk2M1IkIVVbYElGTX1WW2NtbUFUZ0pubF9fYDN4VSsmSFZjczRYRntgKjQ7UyV7KShAd2wuMX1dUlBNajVLOTJrfHNVfWZ6KGN8YC4u''@;'; put 'put ''YWhBKjhHZGppKj88dHlhL2ImTFhgZzlmPHZsZnRtKUs0QDYqanohIWJfSmFTJH0ubG1weV45aEA7T0pvKShabSklfjksP25gYm86eUd6YytjZnlUcE5FemAmQjxsZG47WURpYU1hV254dVNpaFlMfWdZRDZVczpaO2RMXmNgQDlbJVpganE0amR4RXk5cXBtKHZvZXFLfmQ+e21wK3xJZip9UVQ+''@;'; put 'put ''OTdvbnJ4PWwhZ31lb311QGZhai9ibXgqRHVmajZpcFh2Ml1rWzx4eWNyM1VofmtwN203TjVydlZDRFV7aFM2fVl0WzpiIVZZPyJQVFhdYmksSn0kcDVxXlhaRjE/Z35iQFYjMCFLcnd3TzJVWlBCMzolfS8mLCp7WE8/TD14IUVKZmVvezVsVDp6YUFDSWE+OGs7Nnc9SHNIeXwlTTgwI0AjVE10''@;'; put 'put ''PXVpZzVJPTxCcGYyImI1JXkhdT90XzErVD1pPiRPQHJIeFJwO3ZaVyZjdFFHQCk4SyhsaHFxKSRxOyNDQypoXVRgQFVaVHAmSDswTFFwYEt4eGs+XzBmVT06OGtqTl1HR2A6Tkcob1dlbFB+KE8lcnM6bDBLaEphaWApUUIveEFiRjQ6NkpiPmdvUz87RV4zXUJjbFk1KmVROW5oKz0sO0J6TWNy''@;'; put 'put ''RVY1el90aUZ0Z101MHRKRl42dk80THBaNEFqIXNJdGNtI3lYUFdefHAraHNqZFklUzZoTFBWcXlXeUo7YnZYfDJiXTp2X3xENmRzdXs8MkFEVE4pXU9hYEdePCFEVl5VeGo0X21RQFZjPEs4TjJnYz9TbUNvd1Mjen15NnxRMFl7RiFNe1p3ditnNXYzdT1+SztNe09iYDpyYTdzRXVbKmp7ckcp''@;'; put 'put ''WjRMYCtrWSk5WGZFSn1iKk1gSC5wSiZOWStzeUp3bU1+X1glPzFHJTBDQXp7dG4+WDNlKD1CakRoPDU/OWpNakdzcVdfRDJAMkxEUEswNilaaWpHQHglZVpGdzpNcEdVbEolJFs0KUxUNCVRVkUuW3hua3l9a0whdmpvO09ORnR9KWgpYzF2aiU+QjhfLy9UZUVlUnU9JUszcC4+KDp1czZteSFA''@;'; put 'put ''PVduXl0raFt5OTRmT0t2PXp+MkRlJEU8ej4sW1VEU1JQKW5kLERDZ2p3Ykk1aWF+Pm4vZFpbaXBkUF4mV2BgbHcwVWJWYE02VzRYOSpENCZmJkVibF42WGdALFp+PSs9YyMwLHNrciUwR0EmPCQpXVoubnE+UU5EZDYqcUtwXmIva349Wi8sLl5Zczg/TGE+eHVjSU5wNmMpJF9SUzdKRXomX1U4''@;'; put 'put ''fCpgfnM3V1RbO2Q7alcrfU9UX1krRDU4PEJ1QncqIjVWJUt5QkVfX3AwXy92VXZQYSkwfX4ockpGYi9NOkpRYi8xM1IjYnk1Jnx0KWJUdz5iVnBIT2I8KFd5NGMoYChrfkp3YmltbWMxYj1oTTs6eE13ekQodEJ3cCUjT1VJcCkzXzcrYn0ucU4xY0hQamlqQWJkOWViWnRMUDZdTn16Mn5uMXsj''@;'; put 'put ''fT8wRmMsamM9S1IlRG80Z2ZvIm8sblB2R3ZsKkg4IS52Ln1Fcmd9KzVvLyk4fl5gQWlLSTopPUVfNDY/cTM3anM5TCFJeThRcWJaeSpgOC5ddipuc3xKaV9fWyUvIVV3LkJedFksKD9Icj42TEhGRV4+MTVVYVMhRnFdXUcpbE5ydU9Ke1pJPjIrK2Erckt+dlk9WG1kOml1N2VTazQ8Kjk1L2tV''@;'; put 'put ''U2VrLG4/TUBeSShofVQ4ITwlT1lNJD1APXdhUz10NVQ6NTpXclkvaCZ3L3VvP0o/SD9ETUBCb3sqJiNhQlByc0o9eTN1YnltdiFZWEEvRH15SUlsTE1OaWtGPjguLkRzbk1aay4vMGo1SSJfVmpBZVQ+R3dEVFNBMEx3KE0hTTQ9fD9RUD9+b2wxVXVpW2pKMj9BdUhaNTg8RFBOQ1s7TTlIZWx2''@;'; put 'put ''ey9DOFMvfnohRUxHTDsxXkpHV1NJJDdMOEs7PCNMaEJzeUwoNXN8UVlyQzM6IUBwVzgxP3FPXVdvMVheUiNeMEB4eTw+KkU4O3Y4cC4wU1goNzorSTU6ZmNCLD87Lz0wJGFNQjs+bE9LNVEyJEBiMHtZaG5EVyZKPGpXP3hkJkNsREd7bDZEIn1TNTpFaSxWNnVUUXZYeVpGQnFyQl9tJGtqO1pp''@;'; put 'put ''aWVAWi4hY001XUE+K2hgL1M7VHNMVyN4UTZ+LzpePVd5Nj8jNC81Xm9EMip0Ync5Rn41Yy9ZeSNFLmFzbGo6VER+TWFrPTZeJjhzNHMqMWZMdyNDXVA7LEBjIWQmXypmWFJ2TjVoclZFJiZtNVBJQTVoTjJ9SlddfG89VD5ZN2FmSUt3LHNwWXdSMixAQ3tjR3Q6eWY5VnJPNGU+amxdL3QmUjgz''@;'; put 'put ''Mywrc1oxOUtYOj8kZ3ZaPFkqczIjcGsrJnFeL2p9TTZKMEcwNyIjWXVUbTFVU05JSVdsJE17bWE+TGk6SGVoZHwje1okNVtEJipMJXVUKWVZLG1KMiV1d2RpYFc5SVQxdUo7Vy9zImpreFMqNyY5PSVJOiJ0Mz8qeXZWP2IiNWBDPWFSWk9BQWdqJDU6L1BMPHdXXX04cWB1Sip9XT9ManRge1Fs''@;'; put 'put ''aChVbFVvQ0w2MWlydFNVTys1djhIWXZMRlFaKTNsd2Z+MFV0V2VbOGNaXUJycCsoVTBZayxGez5bWmplLjozc2xYO0hvJSZibm4jNUZFQCtFQUQ/NnZLRzlrWVRFMlp5eTs3RkUjUXpAPEZndzN+WHJ6eHptQT0hRT9fNmF+fHt7PSgleW8hRW0wOUAreE99a3hmUkBlKldrd1N3bTFOb3w1PSlJ''@;'; put 'put ''IVNXKiRhYDckWU0pZn1vdGoiZCouS0tGQDRhSkJxX3gpLnhRcFo0MyxxfSFpTylDdl04ImkvNSQ2PGQzYFMxQig6KnwjIVQlanU+UjU3PytnNkwhW3RZWGxZJDspLE9yNktGIzZDNVtMTlR8KU5YLkEycHdVZVkxe3Y6UHpmQjx3dXBqPCVMLEVpZWpnViMoMiwsSD1MOUEoKmwpLClVbEplL2gm''@;'; put 'put ''SDlQZF4pSjsqcipgVjk4fGAsempARS99WzI9RTtsVX5QPVBnbTNuRlFjI0g7RzhobS9teUpocUtFTlpASGhQY2ZvSF1MR2I3bXw0V35FbyMvTSIkWWY4S1lYZWM3UUlPVDFIWCJWd0BpRWF2WHxLWC4qdHBjbk0kTGRJYn1MNHxeYUtYWjFMMXJ8eFhlX29Kc11WLnsoVmR2JlsrN3J9Xlt3WEhr''@;'; put 'put ''Y0J8c0xkal1JTTpGdTpaOlB2bDc6SVNJOSV6Qy5FY01McEZKZndVeDc6XihXUXBdUXl3ZUNaZm54PzB9OyV6U3FxcywvSyQuWl43YnFrLHY3ZywiYTkuaGhmZX5Ra3w9K0FPI2Jka1lJViYmTW0rT0tuWFJpWFUsU2B7VV1ATVpGJjRNJTN4JSkyTkFOSFR0XmgvbjMvYGEoZX13Qkw7TWFefFku''@;'; put 'put ''aDJCLkpVMDhMSFdYR1R6UkMwTTdFfGJURntuQj9sKSZxbkZ6UmtebnZEZGhjUHJdU1Z6OGduJTBuO0YrSlBVUT9RYkM5dEZRIUhHal9sRDYlKytKMUA4PHRxRVdoPWpIZzRiZVk+NFU0WUtLRT5iI3tqYiY6fSlGWXUoMlU0OXMrZndGemYxLkB+XytFaitselhteTF3Ul98QypMK1hyJigmbkZG''@;'; put 'put ''fmxMd0FeRmt7QllgeHVaTTEzKFpLNDpWc3tJNG9+UD5LI0hMRXYsLy9+b3lPbTRkUGp2M1JYPEN4aUVqPlVQLDQqJV1DVCtWe1AvfFJRXmouOV4zQk9yRCNuZ3Y+eTEsSGAxOnZlUnBUaXNaPT58WjxVcX1QaVN8dSI3T0t8KXptdl9GUFh3PHg6YDBjcnZgeD58LHlpSElIKTEiaTQ5W21yLkRw''@;'; put 'put ''Tkc7cnFAMjBPeDRqKCs0YT1WTlh4MkJ1RFJ9VSVFQTR1Qz9USlUpRVd6WUVjPyxgbWdCTFZ4KmFgJUJFVyV0TDNrdSFjYVU5aWNMQ09KanB5R1p9N11aYi5TeGsoMTdvfX5CMkVNZSI9fl9DInx8V3pjQ2ksUkFNUjd+SXFlTzJDOGF7cDdIKSRSNmAzLzVfbzA8KypJaWAsRj9lXXlbQWNCcyMw''@;'; put 'put ''Jl1VNGpAQC9DWHxuOXBhPj8+O0F4JF8zdmFOdUojQlBDNT16THkmM1NTQG44ZiUmcmpWZz9RdiRmJmZYeU1VZmIlUG16XSldV0BmU1E8LGpZTjgxRDt6TGJuNmt5KVVQKC9nbnV4SXpsZWMlTXZdeGJGell6aVsuYVVUSks7bTNoQ0Z4JU9GU1hTKVh3eHVufCIoXldJOU17QCNTPlRqXkohbUY8''@;'; put 'put ''VE9bWGdJTEBLfWZtI3x5Sn5NSDxfUXZfYzFNMHJzJVo6SURleW9eJmtsJGc2NjpIbDNGPHk1PUlhPmFFWls/dT0pOUM0W08mJHYvaDIsTlo9c31CXWpGTGA5fk1eZD9YPWtoalRoQD9UKFAoV0Bqej1EXjMmd2UsTXNONEhJTUAwcX12b3gxd3RwSEU7NDQvQkJTYSklTTAxSVNfbT5dQmQ9QXQ6''@;'; put 'put ''bkJ9K2BWc1tLNys1TmFzWmtkfi5NYGltRVEkcyw5eihKLCQ5QGs4fVdwXmk+bSNwNnYqKzEkT2I9OC9IV21lTXk+RGZjMlkoSTh1VThRSGVGbmJsZytVZiJzZzVefVkpNF9ePXw2dT51VE1oVTFhQ3k8KnFsZVg4R2FKYWkyIUBaRmo/QVJYakZecEhMKTQsVTp1I0wrL2xzYW4zR186RyEuTjVS''@;'; put 'put ''Kmk1M0d7TTEkNzs5JiFvT0o1Y3l7JHdrXixKdkhzb3R0eWIwfEI5JSVkTzNYe1JqI1sqPDB4dSpOO0UzTVAzUj5lOnpIVDN1OW1PQGNJRnRedXw7ZDVjVU52JUQ6UX19MEc1NWh0SE1nU2JAN3w0P109TVtkOShGUWEhKjAkUFZQeDZuRlk+RHlSOFFeZndPfWJaUnM3SCpFdD04QC92cEZCLkpj''@;'; put 'put ''c0RzRn5JIzxRcWlaTDJrImxdYGhaK1V5OzUwYCRfNTxAYSo4SDl2WzhJTlhKJWMpT2FBYD9Ceix0NSl8LmxgcExhdmNPbGYkdFUvZXx7KHlqLDJgZlNlKnlWcWhLbmM0RzsjakxnNVtwdGlQMDdNOjR9YGczYFlXZkdNVVF4dkF3QlQ4cGI2RXAvbmN2T2IxVDs8O0RMKko2UX4hMFtVYEtEW1d8''@;'; put 'put ''JS9PNlNVSnBwaExZN1IsJmA2UEQwRDtkTTlSezhXbG5Ad0RUJmRjanZ+UyRhbEBQeGo8MWMjVTIpZkB2fV1EPVVZV1cvWl86MzI4cS9Qe3c9Kipkb2RqV01oTG98fSomYXdiVXEyVnwvdTR6KitxdG9mJUJuNTFaT0Z4OWcvVSpjKWYuYHo3SDtGQjQ9NHcweUdyIy8pO0VxNzp3TntyIXcmRF4p''@;'; put 'put ''JHAqKDVae3h2Y3BpRW1PbUQlZlA6YHBVKysjVnRGd0FCaHs+SX50P3daY3RCN1FHT1dgRVRhK2VaWU0zOTRLYGJhODgvYitGRGhnQHY7PEYvMSUrK1NuPil0VV45TDZjOVthMkx2Sj96OFlAdVlbTlpsIXRxUSUhYVBfc1dnYC5BKElPTCRPREdrSGF5ZHh2T0leZmxpMWd5cyElKmlKMXpYc0Jg''@;'; put 'put ''bkUpPCZ4aEdFdzJxO0xYPSp+VGA1Yno2T0ZDaVZEamxsSSgreSV0fmJteEZwI0FLOV5HJEk+NjtfWTIsMGpxY3Z2RFBYR0tTcENoeVdFOn0xL21PVWtGPSYpY1lXQHtdVEx2Nj47U0kkPClxSCplRWQwbGx4RlBPezJiWGU4fX0reU1kakVgdlY+Wjg9dlQyfldFXn49U354Y35WR3dFQz9ge2Fg''@;'; put 'put ''Wkh3JlBYLzB1KHNdQyxPe1FudGBdKmMmZyk+Xk0rZ20pczVvTF1QUjViWHQxKm0iRGlMZDB0aDZSJlciKzpKaDklXmRISFJGQWh9Vzt9LiokJkw8JXxnWVNYNCpSTV5WMkplfUNhR1gldyNUZFhUWipkWHA/VUFBZnBBLmFqTyg/NFI9YU4wfmo8andwMiFeJkBUWEVBUn5nKWVYMHBJIiZrV148''@;'; put 'put ''b3RZfktEL3VWSzRnWy9PRSUqSEgyaH0jT1hXfEV1SyRFJmpOPj5wWmlaMSE9U0tCRVhFWkJwdUJAPzxDK1JwTEoldlZlUzJ9fkZTdDN2UHchSXVDbUpZcUdjIjRDQ01CeUZqTERFKngiXl13QVY2Zj8uWHZ7TVJ2NExzLio9eUhVK1JbLm0iUnt2IUM9amw7YHZgcEt5WXQwUyYwbjJgcEcwfW96''@;'; put 'put ''YD5fJThfW189dCNpOWomPHZKWWRFenxUVXR5REM3bjM5MDVRX05EbWExaiFJU34lJnUvPiFWdkBEVHkmSG9nPyUiNDYjIT4wOWFHeEIvWyhZMUgrWzthc0RidzFbcWtrK3g2TC4sb3dddV9eYiVSR259Zkgrc1EubHdKT2BdZkJQTUVXfkVVZl1zb1UjPENEU1twYT0+dU9NbHBqKHdUKX11MzRn''@;'; put 'put ''NUI5U2JNLD0zbzRjcXxqcUs/YHcqZDFAJD5LQWVEd2ppL3xUJHwlMjRFJkFeQyImPmRAcn53JH59XVgyN21odCJtIURqITZDe1orTlRdPVFbTDwuTio6P1smLFV7Ol5COT9BIXZARH1Rai4xZkEye0cuMzBqTipuNmtaWCt0T0cmQ1ZASGxWOmFtWkpLfGg5Z1dSWj5ge3ZbX0dqJjAuLEx8SjMq''@;'; put 'put ''VG8zblZVRXYoUio8LHFhR1FsTH4hZD5SNzRAeEJ0YH5VayVqPT0oWi5GaTcwdEkoR31hSzcyYj8rKXViLmMoSkJsekpVIU1FeGFgOnpNIy8lTzdKKVQxJWldOyhmYSZIZihmeFVLLyN4Jjs8QGAuJmV7O2Z+VyFSWSx5ME9WL016Pk0vRzpUISswdnk7QHdbRGFmZko5czp1XSk4bU8lTyYwTWdA''@;'; put 'put ''UHFbdylpUUlEc2VTMnsvfG02cjwidF5qUmh0OixTQ1tAT2YmPDU0NlRsYVE4YWNzTGZNTE9nQjpCdnFpPXopPXZbP0xGVCZsMG5DOEsuMGVjfTN0JGZbNHA/Xk1dL0tFamIldT91WW44JUk5YVR5S0xwKn5LYkJJJkR6YmVGIjQwLk04LkF+fXxkOFRiPjM/InlxayNJY3JvZVsye3duN21tRUpT''@;'; put 'put ''eGAmK1RXS3g4XUIoYGgjI0Q3K3gkelYlQiJtcmcjbk1WMkNzZCVHK35KUGBhd2Z0KEpKViZSRVhZWW0jKk5II2BEblpAblNwR3EkQytHTiNJLlZXIW1lSF1bKDJzRlhebEVHby4wI05SN0dRaHRWfTk4XW44fFlPdzpVeHNGRV03OTYoTkJSampseEQhSWhsJGx0Z0Z4OGB8WVd9YEg4Ilo3TnVT''@;'; put 'put ''QSJwM3pyaFY/XVBQb251Y1RuTFdoTEVqMWBPNCJfI0RQNGBXdlFHW2lwW0cqWTNpX0J7QFBuTjRQW183dHQ9fEgrVCV9P0kxRSNOeWx4W1ZuUylnZ2g3WjZEQGo7d1k5Nmd2Wzl0YmE7OHczVGZmaCFlfT0kb1VtQHR1b0VRR2hlSj9rZGRrdlYwKmYua11zeVE+R2BwbnFsMGk9UVlQdFBTYDdD''@;'; put 'put ''T243Qk9nUnx1JVt7QCVkbiF5TCtOfjMyRCNsP2FQV2FkYEAsRzspTlZlZ1lQQHJIKTUiR0hfdHFydTo0QD4/XVpCO3hzdzpvaVRdLyQsSHJaTiRaN3ZlKTZRLiR4JXdVMntnRDs4YVVFSCk6diUjUmQrXUthMS4keFhoQyk+N2ZPZ0ZzSXYmSEd7O0xNMitrfV9eT3hkaCVhVixsViV5I0dfO002''@;'; put 'put ''Y3NmdCVKZkpURFoweUw6QkdkN3RQdlUoekRTY05uUChjXUFMfX40W3pbSnF7JVRyZE46Y314YHxRbzVRZmc/ITcpRmkuQWEjX3lbLytSNENUb0JgZXNLc2JlRVdaPU1pfTVwZWttWSo1WWlXYStwLEZvW1JAM0BwbndhZzclYWQlLG82Pz4sUHB7bXN7VCh8dDV9cEluMUtWJGorRyR6b29OJV8z''@;'; put 'put ''MHE6cTJZd2FhYHJwSE06OFZRQGp+TH5jNEtqaWJxYjsyYntgUDNMQSZGWV9oelFSMCFiPHlKe2hCaHM3QiNSXWdbWms4cXhaLHdOdm5GNlk0b1REfV9JfD5FWXJmZmt0REBaLDg9KDxFajY8dH5BPT1CeWVlYyo+XnJbcGJLQ2JmcGdPVkl1QmhPZWcwRFBKNGFzYklCMEUsQm5CeDh+eUdRRmcu''@;'; put 'put ''eHplRmxWITtka0VCZGNaPnRtSTowXklkSWlLMTp7bUUpUyJvSTB3KypJXjZQfH15QGF2clQzXmM0OGNXakdESCN9RipNciQoLyxmdi48MUc4OCRZTjIkV340P3Zoe2htfGhPMjtdUCQ1VztGST5sW1s9UFhJdyhlPVNtYzlvZ1d6PF95eDhyaEUvZU48aCVXLj5jRGRvdS5DQ28kYCFfKTheYGYh''@;'; put 'put ''Xj8rMSwmcCZLVjxhQWs4bnZPPEJ0IkRXemtoOHFGRn4zcXNvRmFkP1pFRGw6YXVmNjNVbSFSTnspZFkhLiZXbyJ7MXk2el8oTWt3fFBnZFQmQ1o7UT09LzI9NHJpajhbV28jaF5OYSpfVn5TJG4uXnc4R0xwOFFvXS9lWCVHV2UkS0ROb2Nqfj1zKCZVTWxUeDZdfHBDaFYqb0RMfjFmcyMiRil6''@;'; put 'put ''KjBxfkNAe2c8JUQiO1VOZzNuXTpBfGpjRCQqQmsoZ1RpMyxoQ146PlNCc2FvQj4/YyovVih8OG1+QzV9VGNvcnhJK0d5KmpieH1mZEt2VTtuJCkjUkZ+P299KGs6Mi5WKGxgTnREcD1YJCk/QT0/Q2oxS0tpfXZbUzZqXz9lclVxK2NhcCxKMjtbRHZ3TmJHRGUjakY1IyhOUnEkLkx7KCllQWx0''@;'; put 'put ''VVRmQVFWLzIodWtoeT0zTCRBSGVrZktGajVEPzdnQig7bW1jYnpiPzN2JD54Ryo+R1hVT143PDFnOnIyaCUmd2AwVGl1R3ZsUGhLOn1AJUVsUj1dKFBePDMrcV5rJSQqKXFba3NoNipNM1hOTFs3fUJ2byM9R3ciYz5tLiRCclNJJXA8cFRRK097M1AuRD5Wbmx0JER5OHxKRzE+YGZlemYjZyss''@;'; put 'put ''TXs5KUVIeFhTQ2JLOzk0aHpiIXA+IzBgcEojLmNtc1tBLypyQ0cmX3NuYDdEd0R6NUosYH5ganV4VEw5fSNUQ2xTYSYzKEFaMlh3JWVPVlFSJDFyISspNyQzLCkkYHwpTzNJdSZsM2tbKCouNHBCIitxeU5IdXhsPFMhVTEybDhLNXF6YFh2aCxoKUtuT0dCbGp4fTh1JT8pMjRbaGZeYUA+QFs6''@;'; put 'put ''PyVSJjZbcGlfMEN3I2pFd1NLRElCQ0ptaz4wcmN1VjlOY0dJXls+TGRuUWZzN14vRD9eTHRyTElFLDx0U1hMT1V5R2g2IUp2T0U/JmF6STdYUyQ8I2wpeyJIUVtyLCw8enVWO2lNRlQhJGAyPndJOWFGc3lxTnpBfTlJKF5ZeyFAMU0uPEtOJX1mUFt0ZVM+NCkoOFFiM0llTyMiSF97Mm17Ymk2''@;'; put 'put ''K2k4Nz51PzIxK1V5dk91U0l9LGZlIXQwLmUxPTVUZS86KWc5IU1SN0shd1k8aE87M2tPXjREOl13aWU6Pi9dQSVVbXwscFUjYCxxQyR1WlJkRSxpc1V6T1pTK3UrP3MyMnt5T3NycUw7PTouUE94ekVdIjRWIkhIWXp6aEpnNXlwYmV4RypidW5QQjZqQ0leOCkldmlwY21fP3NeY1ZzQjdCTyg2''@;'; put 'put ''PiZtW2NaWWlTMiQkVG5DITg3czhedGBHMU01SHlSM2gzciJQV247bi42U1QvKCxvcHE3KGc8OzZxKjooUipvP2IpL3k3cll7JXpJMVRDOldJJGg6KjhUMmJhZW5aWCRHdjoqT0V9bWVjd3FbQj0yNF8mTjsxfUU+Z31QPCpVV3o3WkgieSQjQXBmVH41ayI6diVye1BucElQSlNIcF1RPzZyenBg''@;'; put 'put ''ajw5OnRjanljWTYhOTFoeTtMKjM8WnM0WypSeEZ2KH1oKnxpRzBidnNmR1R3Y3p+e1RDU3A7UUVxR0QsUDU9al06eGxoYHB+VE87JD5pPnNRS3xIREMxPX4hVF9EPnAuT0s4bV8wdFMhdDlnbEd7d0FBcTUobiIkNmBYS1twRFpaUV9jNmAlTTkoYmlZWFRBcUJlb0hsfTpodEU8TSNlKXd5S1pO''@;'; put 'put ''fEY2USlxaXc4UlMpaTA/Rip0SmNYdWchTXoja1ttSGs5QUFaIUVwRlkrbT4hbDAkN2JlUlQycSs6K2YubF9gKFJyX2xfX21wQDwqU11paDlvNXA8YFBKcjREe2wkdTZUXmQwNSw8LG8/RCNwRkslfHNyXiJIPn11PV90TzQ/NDBuYCI1VXVWcXlQZ3NQSkJ1c2pHY2gzdCYofTh2XilzRTAqSEVZ''@;'; put 'put ''c09SZmVjUDAydjB3dEVlSGFpIUd0L1h6YVZ0TmYqbmRuaDl7OSJfd1soeGR6UUFGZChyUElTe0lpfHJ0OiNVIz5xPk0hY0lQT2BveU9uLjhFU15nam5mdlEvYVpbdFVzTTlXX0pTfCwyVmMoNUxDM3xfRWJCUXpKMCs0W1dRKD0sfFdvO3k+V34yQU5McT5QWGtIcDRyKnZXU0toXiVNRCRaL2l0''@;'; put 'put ''RGMqSEwpKXpMcSpiQHA0Kmx4PjB5cigjfC45bDRbQl5VaGgyVDdKSVs/VzA6PyJCW0F0VVVHLkI+XUVqVHNbcCNxMnB0UDZ7RXw0VkxhZ0xxfX1DJio+c1dadHljMXlAajMhOXt+enBjfF4lYVsqUDksZUNpNk59Oko/Q01lQUJ6b0dvYEYsO3tqO0Iua1laY3ZUdCtzO0AwImg8Qkg1cj94dFEv''@;'; put 'put ''eVsoR0N4P1ZRTDt3dk59flN3MGFNQiJjMSVLNnB8PEgpT3BEfkZkQypMdHlZPkJdZFtPfXRwUldgc2YheX0rWXoyUWtTNSRobWJeQHFSTCkrZVdeKDpdMy9kd3g8Pns+cFZMdVZgITVCXVg6OFlScHY3YDFQP3JBUl9wYD02VDAmO3o8LFhvcTFDQjJ6QWRqUWttSkgyaF9KKGw5en4vVnwsYDs4''@;'; put 'put ''e1dMXlY9fTRWLFF5WX5ddGdBNyRRRlsucjxsV3k0amhpS0lHd2RFTU9fZV0qN1skcF1mRHM7JjYvSGBXPFFsJkphdy87b2REfERRWDlMfSwuSEJJeFdhSEMyfT47eGsxcyY4VVlqT0NGSztLIUAxJmE0ZV5CZXllSChEcnxxbSsrK1chO0Q3PlguKUd5JX0sfUNwQituU1Z1L1FCIi83eS5oZERM''@;'; put 'put ''bV9jYCV4a107b3t5WWwvT1Z4c1hdaz1CVkREanRnLlE2MlttblgufjwwU1ZtNFVaX19CQGtadnkuXWYvJnYvQyFZfX1DSCFeczA2eXpIfnFtV2p4fn5TR2xYXnFNKUZRUUpGOCk1WFdwfXB+K1ciQEFkMj5kMiFoZEtdSCxXazJzW0xaNjhXNW0vVmNqQlQ4XTR4VXcoZiVpTVlmNVlVZjZIOlNS''@;'; put 'put ''My99SlloSzNIcTBxQFRwdkwpWmt4RGI5SFIxaCFub3lxMHE3dCYhQVVoOn1nXyxxOHk2RVt8M1BxXVYwcz82PTNMeSZqXSVKKVZTI34xO0B1SjxHQz9mcWI0ay54JC9uJTM8ZUZfbVZ5b0U3OW1iMiJMOW1NcT1rJiZ0WEUzR2BsfWp5ZFg0V3wmbChSJXdPYFJWMSwxXll5TjVzV3dwJjBUUmZs''@;'; put 'put ''RHQxdFljVGUuanJ9OlUqaFlCdC5gKnV4IS82KG5dJiRxI09XU3Q8Q0RQfC9eYU1YRHV1dmIsc3Z+WyRHKkdJMmA3dUw0fltGbyNBbzR8clk1c2RiRjtDbWlZRnZmRixqP2Jucz8pT1ptY0VCSk4uO2BeOCg5e1VOSSgpc1tTNCE1KzlMYmcvXipJaUFBKlhNTCxyWHpTezhQQkMyLyxkXXlOfW1o''@;'; put 'put ''dzpGKnVbfFlnRisoVXJjPnVSfWN9OiUhRSVkOzNxOWM6ZXlDbGlKOVpENHRrVl4pUzxjWXJfY1N9Q2UwTnpdbGwoIzUlRGVLTGx5JkgmfGVQOnQ4K1N6VE00VlJNdXVlaXNFdElNV3lMX0l5fEJAOFVCTFJ9dFtjNiRISnMiR3ksJjxoaSE+byZyLHROSWE/ZD1jZDQ6eU5iOls7eXpNZEc0RWZN''@;'; put 'put ''JCJRVyxuX0s9fEIyc3BJXnVxSityfmh4Vj5KbE1lVWoqb0JVMjFPUXVIJF1tfDFKWFU8MVtbKT8pWXxgKFA5KUMyL1BgNj1WP1JgT34sXi4qKUFrQUNFYWxNNHgsd0dGVDFDVWIyZ1IyMXE6LmxTWUM7NCwiNz09ekZJYGwzL3dYMjklLywmO2B4YFYsfndUQ1p4JDd4Pl9fNk48LjE3eCRlZjNp''@;'; put 'put ''Kjo9UFJWbXE0d2NyUjIxWV1JNSs6YTAmKnFufnxNVUZ+YTo0QEIyLyxHKzkpLzV+YlpKajVgOn1JNjU5UyQvc1giZHY5Okk6ZCNlPGJYPnAvXUxaMSxXWmRkZCZjI3hFPHhbI1hIMyoyTVN6OmloW2EmeUhGfGssV18zKF98TzBTUyk7eTZFfVcwU00yRUhiMkB9YTpzayMpP3xhOkFVYUpqMENl''@;'; put 'put ''cnk8NFdvelRgRi8sQWdXeVp2Li90VVJPVUwlVyF+Q10rcExfMkBZMGoqVXtFZWkwZTAoMnF9c0V1Z2FjYW4+UDU8ZnY5JU9VKnN3VmQzVzBzYSxFMHI1NW4pfFt1fnJhKmM1VmdvbVg3IU5he1paYF5PXnB+JTtAQk5OV3VrQjdsT083Wkd3Vy8uPlNSRCIlcFs7Y357KEQlUWFTdj9scH1MKk93''@;'; put 'put ''S3VnOlRHNFhOciVQS1NTYWJoKWhES1Exa15LO0VrOXkvMTxmdlsqMjJJbVo7alN0WHIsLGFpY11DL0kvTCl9amw0KVtXRl9wdlk/ZVlRPWY2XzBnSyJHQlRhR1h1d19iZF87UXxYQl5rQ2olX0JxPG0+XXNBSCZ9Skt1ZmtPJktKNHIqYFd4dUs9KSJ9fktTXTl+VWM+SVt0SHNhKXtIUnJKSiNt''@;'; put 'put ''YDIxX2NvQ2NwayU1P2RUbkIpNXYyLkxKLy5BfURmSjVUZUM/MDpydUIveUhxU0M7XnZ8VXVEdz1fem1CK3RdU3FGQixoRU8/P35LYm18LkxOVnhRTk9QMzsoMkc7KDN6W1dzdkoleVZfXjNfVGg/MkRIO0QjLnZSU1g1Lk5LZndWUVtQXm1EN218Z1QyMVU5YVJxQ2ljI1h5UUlgVkVZXShjVGhK''@;'; put 'put ''dUQ5SExHSUlqdU88aE1mcH1oJjBVWnBfdmshTjZNNmU4N1Qhdm9WSkIrQWlbTEh7THVVJCpbZDpkaFlmNmF8YjoiS0gwOVdGRW5lQW5jPmlGUV82ZjNPJSV7aipUZEd3OSs7cW45SlZPOE1zVWtkWGVmOntyM2NTIzFCXl5xVnNMIzt3WDBTRWxfeT53WWt7ZHAwZWRUNTZyV1M7Vm8/cWlgKnBp''@;'; put 'put ''OlYpSD54O0tHN1l8al49c0dNSGU5SHJjS2MlaGVjST0pV09NRSxieGxRPF1iSVovTjc0VVtde1cmO3NYT35Hc1Q9WilmWU9HcD5VPC8kbHM/UlU0LFFfS1pLKUJrW0ZEKFYyJSNnRi9pUldRV2MyW3o0R2Z3KlU8L2JUJUY8WDI8Tyx9ZWFyR0IoZTgxTiMrKUMpZyVNQztAT2EsXWY/ZUl5KHN6''@;'; put 'put ''NntbRHF6bSMjcSohOjg0fi5gWl1aOCkpQ2VpQGZ+b0IodnguKjllRiN3dyFAeDd0KT5veXA2RVhrM1VtSHElW3pvbSFlW3RAbmw/TEpyN25YWmRUMD9SdjpVMTZrIT9HS0xRP1VYSUgxMH1wRG19bD9efS8kTnt7Nm1UKXNBbiRaP3d5dH06Tm97M3hyI0pTfD9QU1RxLlhPKDUvbCMhYlNVVCNK''@;'; put 'put ''aUg0WyttSkokfUxiVjo7Lnh3TitXelo1TUtNanZ6SURZWSkqMXcyTD9QUkdCW0M+SDIzMjkpP2pDOWc8aCYqUHBtfCY9PU9bTWdGL2lmITBNJkVXSXhuSCE4RT0xN2I6QjA3fDZAUTtaVFtVPUFQbWA1TD9ZZEV1RXUyNHxiL00kMXpKInkyMUUudylZbD0vKVtaXkoqOyRfQFpLOShWUX0zeFhw''@;'; put 'put ''PjB0Jih+dE01V3pHZH1iTG8qLk1oWSpFQWY6Zm0uQDUjJGtKQmhUL1BkYC9mRWZBTiJoZyFYXjxtJG9dPT9gbXNPOGAob1tFPm1eRlQoUDp5eTAhZnNjLmpsNnBnVHtvPlp7RzFIbjc6UDpOOmYmJWdHUU9tOixDZU9RT2x9a1JgQXE/JSpzeTJUJFRUITE0L318fnBHKGIkd10lUGUuZWl9dURG''@;'; put 'put ''eTk3bF9lOS5zbm4kLmEhZXMzS1hNbjs4dHcpSkJwQX0kS0w+MFNpISh0fCpvbFhrIj1VZEBlYkIhUyYwQE5PMHYlPjlbKmVpTChaT2hgejRVfkh6NT41ZnVNbXJfQyEwQGRPMVFERGFHY10/fG5aOjQjJDQkMjdqczRAenIvOWQrZHRxUWJ3Sno4emErOHtTeTAuQmApR1QiY0dsPE8iSiJvRy9Z''@;'; put 'put ''Q0tPZU93VU10Y1VWXTMwaXZ0Z0VUeTAiJGdleTAiJC5tcE98P1ElTm17U0tNNUoobjFiV0hQJUlmbm1+ZTEwI1NiamI6QlNiSis9SU5UaXxtYFJBOk1tMkFBM1Y9NHdBV1t7Q2wwSisrdCMpLGRwUCk7Si8jPltkMipZe2pTXkswITB6alFibjArZnVsbEJYaTpQIWQ0IzteTixmSl1jTzEyVTQ0''@;'; put 'put ''fi5hOjRAK2VMNjJPVW57KFpRP3EvJHZfdzdGZGYhbCl0Yl9TaUx9X3JxekplbGRaRFNCIzs9XUoxOkNCMXhbNm9ibHA6UGMsYUU0RTRKbjlUOmovWigrZl9YeXBzYjhGOVAlKTxvb1hdXXUvMGNPUHRkWmJxWnwjci8uY29jaUIrMkkkX0NqOnV+cDRVbGlCOnRnSzVTKl5qel9uaj4jeDhVa0M/''@;'; put 'put ''SEAwTGFHK0cmblh6PGEzb2E8Rjt6bjlJazBUS2VbXWt5ciRofHV8RyZpOTtUVUdpKlVgai9lQih3Q2NtM05Qe151VEA4d2czLmY4USsjZC5CMlZzZSkzTXtDQ0BFO3BQJjpWfmtsSzMwQEVWLE9Aem5qejJ+UlcqKGhldlBPbHBYMUF8RFIvSDNDX3B5a2gha15ER2ZoYDJHdVI2QHA5OndFU2xC''@;'; put 'put ''MzYuRE07biNWYitsaDckJl0/NjVbZCNORD5HTGduLCo+Nyg0Yl9+YnpSb1tTYlF8ZDBJUDRiQGVkZllkOyU5XW84cCVfJixbRHs6PHZmV2gjOCNDXyo+Nys9XjhacS9QaTcpK2lqI3AvayNjb2htaDJMPipHZCVpYnQlYyNpcTQ7WSp3OnQyU1UqKmR+PnMlOjYyTk54Oy9FWj9TRGFAK1dnN1k0''@;'; put 'put ''VTFIOm9KeDk1PDdGTShseTxNSGtEcGJPdmxPLkdATSgpNm1IN2dJVkszdzdgRkx2VEZZZ20uOUNFPDZPQjFiZENlQSgpJio/OGNgWnhUSipvZmY/Z18hSGwpdn5fdFlNaWJgVDYjQ3loeGJIa3ZpOXFxbCNyczQ9eXl2WmZQbHxkWmBkYyxIX25qMy5uYGQmRXcvXS9hOCh3NGpRNVFfaUQ3LCxK''@;'; put 'put ''Wi5JRk5ISV8malZ+SSxBfD1sVEtNWDEvYHFXY0IvZnZfZyppJSFUOkJKPXZDOTYwUXJZcVt8cVYiVChMYTJ0ZyIyZWhkWyE3U2BTeDh0VkdXI2ouMFB1KWEydGdmbnckOl5oPmBTWzAhbHkpRU1tbG1mSndROjE8fmh9YThLckZlZEtlTF81T2Y+NzF+STBdcitIKmdtJjRkQyVrNj8rMW98V1kx''@;'; put 'put ''ZUx7MX1hdTdgciZoI3socT8hWH5HSDRkNytAQWEmXkFUM3d7KURWIl10VFhII0hTRnk5TiouZVFjOGh4XVJHLz1xcGdbY15+Klh5MG87SjhSaWB3Q2JkNDF0XlFwWGcvd0VmOE01Qjt5OUhzN3FsL2xdQWZHJUomMmM2bGcqX0tJIlF8T1t0azEkLyhuRXI4Uz92T3w+O25MPmc9d0xVVTVjd081''@;'; put 'put ''bCpiNHpXclspTyN1fExhQyFPTVB7QVlGNWtIQntzY0J9R2hkLk91Pno4ekguS2FQS3EmODBXandUcTlGZCJ4R2QocCImYC5RVE8yazF3djNvbjE/fUhqYSpVZ19wWnU9cnBpWWc5Sz4qVUZ0dHtkWnVIY0BNMTRIWFhCaHhDUCMwSVpgQD1VVG5iRWZeNk9jYmROOXgqZylqKzxTJGZ+eU14Rkgl''@;'; put 'put ''JUNdeFlBVC47R1gvcDZ2dDorM2xDMFlNSDhMR0wlPyJnR3MhP2Z1O2BsYCpCfCg3ZVE1O0dqT3ZHck9fZT57MVd9NndWMT9JZTVZcD9SSD1dY092SmRYQCRCb110aj18PT8vP0I3Y2FZTUhleGtxM3c1JnV2fWpfSlttTzd+MmVmKTRxO14+Mkw5bDN0KzswPDAjST99Z1cqZnMvYVIqdj8vLks+''@;'; put 'put ''aCl2dV9IPW0yV20qVTx0Ozg/YixSKWYpTktJeDkzX0ZQVCJGUltLKzhyQVZZZTA0MWIkdXRxKyNVQklXKDxdRUo9STZ3PkUwdSo5VjBrX1JGQ3lqKSZBa055Y2BnIlAkYUVCMzphZntgcER7TiZXNWIyMG99fGRWO2ciL3UwIzt5R348VjhuNWpNSGgpSCRqUXduM31AXXRAWnZUODkvd0lUSSZI''@;'; put 'put ''LCFKaVQ5TCNVZXZ7eHRVIyx5dE1GUi5YWltHIjdeNyExQEVGcUJWTXQlJlRBIWtLcm5ldk40Ylt3PlRIPihQUmNsV0FsfiRuUXQoQzopKGhSV1Fiel4zIXM1dnZUVlpNVHApekM1NSRXaDJFdig7RF1OPn5BTjk/QWw1OXd5UC9HdlFMXkoxdmFjWGx5O043cispNSFFRXJjXkwiRyhfcCk0dj9F''@;'; put 'put ''TiZeQ057c0AhVX1zcnZAdD90dXpqYktiOikpUmZlI2lwTCNnSD5JaSZ3W1hocVcjVlUme3x8KF1sMHdbbnZDTEAhODpucUh0VT5xaFpJL2BpLCpKOy4rNXwjQ0l4VDs6Q2F7N3IsKERga0lEKHl9YSFXTk11OkpHP3lMRG59YDB5Rj4obEVFU3sxUypbfjZpXW4vaXQuU0JjaTZJKl1XfFJHZnp9''@;'; put 'put ''cEBoTU92fHhGTFUlJT9BZyQmXmI5OmBaOWF6b29CPkMlRHFUTFBLP1g1LmRzMF8/MVZ8ZXIoTyxRRzQmZUUldnFKOm9rd0I2eE0/c0tqWkxUXihXZipbR0JfMzd+SVkuTS9XKyVzOXNnQyVaPDo5QjNZJm0oT0xkMzkpPHNAZi9GOWZ4KTF3O1VgQy9wejNTKUpxTHwhJkAwTyNpPjFLfXVPSC5F''@;'; put 'put ''dExZZnwoaWZ3XSRKNFE5S2s8Nj01YyFTNlZOcFVfLCZ7XyleOk5dZkltLlpleXZJcFMvYWZJJDE2RTE2T15yMkI8Sm9ASExebjZ3NiNHfDAjMmxFOys2M0xUcSIveSRsNi57I0A6SGNnOSw1X2BBN2RARCQ/L3h0VyhXcj9SZFcwaGt3Y1ZxJjVxfS8pcV5xYjV1YDpRT2AyL29aQFI+Y3J1KXdO''@;'; put 'put ''Ynp2OkswejN4SGBLbEJicGp6JiNnSGpCOCtkKTQ6OnZmcmVxO3xAc1k5WUxlMjhWUFc4RlAsRTlQUX5lLzcmKDBXODdQYkpxXz45SXMscGlKMXhXODgpeUs+KkNlbzcrX0hgUGNoWmRDbT99UkJXNlV6eSJ0Wl1GaiskcmZFUSwjPWdGRz9MYDA8YldZUCpqNjdvMi5Xfjh1MUhwbTBfSixVLj9D''@;'; put 'put ''fmlVdFByNTUkI2R6c3BnclJ9bH4kPmNaPixMTnhROGRsNlJxKlM8Jkt8anJsNCxZZ0dgOXdZaHcoP1FqfVFSaC4qPXVOXjZiTmFqXzNPRV1xYUJfPEdgbU1kRDpAI1RqR3J+ej0sVStYdkRod0MyTkxYWCtaJkt8QEs/eXU7fWZpTTUuZjxqTWU8ek1QS3N4KGpIMThvVX1xW3BVWTl5KzNARkg/''@;'; put 'put ''UGA2Qn50bG83NCF9T2I6YXs2dVM4PiVVNkYiKkpVNCFFPV1vOWMuRCZISn1mOllFOHJ4dSNEIyR7fCtnPHg8d2NnditOPzQ+JDJCeUNqRWFTaHswI0dvNjVeUkBkYjJfTTB1aCh1e3BsTT5zPDVTX2hmTWpOL1o7KnJwUGVpY11WUytSNj1QZml4O3ApfV1ZalcmL2ssVyFVIV1WX1NUUz4xeUg6''@;'; put 'put ''RkhDeDosR1NQLF4oclF3cWtYY0Y1JlshVGR5eSJuIjtCY0Q7eVJGVys0cnVjY3U+ST9JIztWPlZRPHokNjxPfTwjN2sxe2VxfSUma0JTXV5CUi5rYHc5VWBDXyFIV2JCMDd3QGBDNU46bXVwPkFyM3AwMTU7dHxjfnJuImYwQG94KDUoe0RmNXZQbkFLV1UlKm08ayYlfj9+Ik5fUWFxe1Jwal1Y''@;'; put 'put ''QmJ+UkRFMEo9eWc1UEQ6ZiY6RC5RU0E1QiNVSktjY0RzS3IuZCo5ZTFicHYlVW07NWA3PXh7KEcqbkxoRmUpX3lheGdUdUdYWGV5Xkd9SWREUVp2UmIpdXxDZT5XLC58L0p6OlZ3djJYKXZOWFh0IjNmJSpuZlk1LiReNUNEJG88LH1wRilPfEtGTUhtdHE5YTRmb0syQzR6JSpfS3I7WkEvc2VV''@;'; put 'put ''KXBhKk54VFVARmclWEB6RkVUJFtqSVt4Yn52VDJNKzJPI0JvQyNxcnYkclA2Qyt1R0htcnk/KzpKbV8+TX5Pc2g1L1tzKTwiNTNdbmAqUnR0M3xRPiQlbSgudGFXeVpsIytfejhXITdBLnxiZSE+IXtJOV03LkhfcFAjKmpQL0g+eFF6Olo5PF1QfkYuYEc0I3csTkIvUkx1OjBZTXBBOiYqWUQx''@;'; put 'put ''MjR7Q1YvbzhycyYxI2p9OWwle0dha1tJUGwuZDM7QiIhKiJ6PCliOC59Q3Bwb1YzPHBsRC9nOzopLHBfKXl9a1h8OS90YyV5PVAmcGZebmBOLDQxN3M+Wn1wKWR0ND5gT2NxV0A1dzZ2NjY3fEsyMjw3YXtvUiNiSWRULjI8MXglLy44P1tpbjozYCQyZzpCJiNhI0ZNXV5wVFo/MVRCVSNTem9U''@;'; put 'put ''cygoYl5JJXBzMXp7NmFGPjY+YT8xLiV2OW8qXXV+Q3I8NChKUF8+I1dmen4uaVFkeik+Myg+dVQrYHA6Qm1bSyo7O0skWXB3KWhQI20zSj8jPCVuRS9MQiQvaG9sKXElcSwrVj8oODJkUn55KEozVGgrWzZ5cCFeSTV0cDx8Pm1hTGJ0eyFnZl95cDAsciwrZFI8KSFuQGJ+aXdQTEllYS5ZeWd2''@;'; put 'put ''KF5gQys6JD90NTM8T25FSXlMSEJCVipxS0ZJSCZGJkxmMFh3X0lSciN6VWIyLGNnMDBnbzB5LkYsLnQ9UV1wdkgzbGFeY1MjbTY4NGwybnVxRCRIdWtwdkhmaF5NRT9gYS9xPkwoTCMwUDhUaV1YJEdyWmtwUW0lMzRILE02bVUoUmJkJUx+PzdkaH0lXmRYZ25dKXwsZlY3UWI8dyJEKyRaMSJQ''@;'; put 'put ''IXJJbnlsfS80XlpWSWtgNlIyRUw0NnN1UGdWJk1CYG5baX58OF9dYDxfJjY6YENgLHtsRUtIcXtRVWw0KzRYN0MmVF9WfTA6KWI9XW0zKSlGQmMsV2k8IU5UfCRnISNVS2ZMPnQqJTgqKyNiTS96MXVUV19ldkgwUEZDeDE6WkVWKUxHTkZHPDp5N0B4WTk8a0UpT2U7OSs3I1JiZyl0MytTfllk''@;'; put 'put ''ekg+djlpOzJjaEk1azIsRykqSmVgKU1DNilbVGxpQndEWGxyTFo/WT44WyEqTmdHJXVAe29sbWFYVipxS2NUKTRrZF1yPzx8LGlLNXs1JDhPYGR7Nlk0cFtRP1swcEV2MGMlN2plMngxRU1kZCV1PyEzMHckT0lOOUkjW1chTURMfFd5QzBCKHkrTzM7PThlJjZdU1ZiMG53MFFuc0k+ZTx2dXAq''@;'; put 'put ''cnZIPlFDWzohe31EI04pW2pbZ154KGYpU3IxcD4oamcocEklTiMxbjpWT1p6bEZvMDtdL10vakdCNFgzfkJnWVR7VmwkR2YpejQ1MG4yZzpYbW08dWY7Tn0iNVdwLEN1S1hgXTxfeWdzIUBrZCZPJmNyXz5CX0AwJGJeIit1NzBlTUVuNTYwYmt5dl8hSTMyYXJSRUlHZ1UjcjZ9dENWKVVsWHph''@;'; put 'put ''WjgxQXdVL1o3aiElU0w8Nk5zTz0jcWNNVE1YdGQrUVYwVjheYFckYiMiOmxOUn5VSzVrRSNgTzk4R259cjwhMm5DaUYpZSwmU2R3ZSZDbjsxJltbSVh1K1dNUWkwU2xDNmsuPHYiZ2ovb15pZH5iUnh+PDhMIj5MNTgyTDtuKiZIbnVlJk12WmZKeDl1KiFpd2hwSDVJaFJtcyN3Iz5xWHJNcy5V''@;'; put 'put ''QCUucis/alF0RCFnJSVjcm5DeFRWWkkjc3l3JGg5Y1ssaTl0K0U/Q353Wzticis9fC86NGQxM2YxSl1jNiwmUD1GcG1Re2ZTeURJSFFPUFBxeHNiP0VnOWRGIWZReTlYZlZ4X2w0cVZQQyVHOkVRcyRsYn5vOVRdRC4jX2xgYnpqOiJYe0B+cUZ+VlRXLCI4RC4kJXY2a0R+OG07L1JJWjhmZV47''@;'; put 'put ''ZG9LMiNRUEVuXVk4TzQyODFvL25VajRjdDZwJjg3PE08aE81Tmd5LzxpdFl6NnRJZE84Ii48KTZiQ0xkRDxYUD5iSjxDM0liTkhuM3MrQiRCNSw0ZHNCIyVWZm9bP2chWjxYTHtOWXBZO2tILF5ZZT54TCRbYVdDayp1XjBEPnAvenF+UGk7VTRARllqTmtDOHxKbFNOZ2g0cGs2bVlTJTg8NXg8''@;'; put 'put ''Rz53bUQpKz8rJUZnaWI3ZHp6PHlHRlg2NE9FYjk6bHpPP0s1aFtBXnUvbEtUUkduVV99QkYjMnAhZz9JUTEoZ3srdCVkdD91Ry5iW3BVSXksK3VSeXw7NlErQFd4ZTxDcENkfDhJdD1zME1ganl3X0RKJkxCXylDYUQ5MmphSjtkZFclRUVgJTpmdyR9LE1OeXBpVXVUMktmRjVwOzB4b3AuWE9d''@;'; put 'put ''XkAyLF9qWDYhP3VII3ddaE9jemNORXVHclQ8clVVKylKa2p1eVV1Vyk8PVI/aj89eDhSMlZbdjsobmduRk14amMlYEc+UDA7XWA9YGBFND8yIl06Rn1CJXFbajZiXXIrd09oLlVHUFtuJU1APz5xWHJSaGNHOFZNQFEsfmdkKnwlRG43cTFQRisyQGVqfGImOC5ULks5XUlkTnpHWzVybloySDF8''@;'; put 'put ''MzJiSWMmTHgzWmBmdXk5bDd1IStZNyI2T0lHOUB1fChGaUg5WHEofUc9PW4kXk0mVzVxRVlxfUo+UjRfRVdeZC5aZ2w8cT1lKGYmITEkUF1dK1plS1QkdnQsNC5iKWlmKVsuTWUyNFBFNExSL042bylKUitydT4hLks9WFhJYTAlJk98LnhoekhPTzxqSSsoNHd0QDUzQ04/Yl8pNT81W215NG50''@;'; put 'put ''Q1J6fXtgKjYzXUJ0RHszRnY0cUV1YCtWe1hxOnJxP25Gbk5Qb3A+UGBPIlBFQFF5Y1tzbykoV05STDwwdGcvYG4wKVAzdzVVI2J2UWlZa3s1RF5vIXVXK3pscT5yeng/dSFRIWhsUVJjZUY/dVRWKkZdb20yYHY+aDhPIzo4Pms3dCx9IXsjLmF9JSkrUml+SG40RDc8Kmw9cnshWyVqVStQbnEu''@;'; put 'put ''QmZCQFlnPH1Hdi9YQm4wWV4yYUVdaiRgQGlPJmdwQmVfIS9xMF87QkA9MzVqeypTcFg7cCElVUtlJjtaajE9Umt1TE9iMThEZj4rdSFRU1RKMFU4e0p1ck0sXitdWyk0dzxzWHBhOTdYZ3VrWTd2P3VmemBYUEpHRkdlXjtUdz4rRiZ1T0hLR0hZYjs9NmVaP3ZiSDl3Mzl6LF10aWk3YXtyTW1A''@;'; put 'put ''YyUuXW5tWn5MYU1GN0tCdj9MWWw5fU11Y2NCJnxxOX1He3Vja1hOb09YMTVkLk53K15pUV1NaTpIR1E7MHsqfHV3LEo8TVlTdkEjQWpRRTJINSlpMFUxXitWcm45Ljt0W3pyWkQ9bz1DdjJQITI/aGJfSFF+OHl0fGFDVyJdeXNCd2pPK34+OXYiazg8MH5RREpSImldKDYsKl1NTktEOG1rO0k1''@;'; put 'put ''T2Qhdjk0Rm1RREdldFFgUDpPZi9wYTEuR3YpeGRIby85WHEhVWFGSDRYbU4ofkxuXzEwVElscyE2ODY6cUcseGxoe04/RDQ9YzsreEI9ZnZGeCljcDxBLyIpJWpDPUFqQ3p+cj98aFldTERwK2NETlVDRGFofTNneCxJNms6UmEvOmMiS2hgTG1VP0ZfSypILHhiLGBxMU1tKlZIbytnNl80SV4z''@;'; put 'put ''T11FeiFmKlNVcHxQX1NTMnR3SjddclhTJiFVVUd1JF9lR1RyMVU+MGIjOyVCMDJFJmEqVDFuSj9ETGlaPCo1IWl0dSZYIzErWz1pOyU0VWNbU0FAMExhZjdkKSJUd0ouQE1tdj8zcS86Oig3Tn1yU2ZzIWM2Z0MoYy9EdU5kPEIqaENNbXY/bWBWOXFeL2Vgb2A4PkpMd31wSzlOM0BsYztbXSUl''@;'; put 'put ''UEtNVFI1clRUP0F8R21pZ21pfUQ8UFZCeUlJSGJdLHZFPyhWVT0iMUJePi9+Qn49Rz8seSpIYl1NQ1AiUilKcDs8Ij9IeHRvT1Q4P3Uub09zQjh0YCppYGRkY0poWGVYQD0jaFl5NiUkMVYqP0VfTF1MMX5rbyRqaFBNUTt3diNQTz55LmNQVEliOGtNKih6XlYoITsiNGwmNVY+Kl5kZEFwWHFa''@;'; put 'put ''ZHNEamYma2QyfSlQVF9xRVUpQUY/Xks4PC5nOGpTKH03Nn1zNjFTRWQqNnJ5XWM+QltpNTNiMTVmXj1iJlN6aChFMzBnbVozLDFDRTVvfnk4Ql5XX2sqVWFBN1dhSDE4VDpna053UmBvYHZAYWkyVDZmWyxpN0U/a1ZUKGlOZik4WyFuR1ZldlF5MkNAVG1iVFJIV0NfTVd7YzR1d1diZ0BWUDJn''@;'; put 'put ''W0dRMUVILkpYOV9XN2l5SlImcFRuZnA1R30iU1hsX2RzNksyOXdLI2k7bnxRPj03QE9fRl1gaDlpKkxaPnczdio5N0RAXUM+ZlVqdH5aVms/KVlFMmtRUyYmcmNAVjZkUFdzWGR5P0oxM1lWdzhHSjxdWUlrYkhNck9TTUMmVFQ7X2M+P3MoODMocDosTjE7fX4rSkhudHUoN1NXJDFdOFQqbEdZ''@;'; put 'put ''PTBEVFoia2lWdCYpR1ZafFJBMGdwNXJjeUQ/aj0oci4yUlFWQ0pLTiY+blI0Uyk9dSI0cldiIVM5QWhXdmxaQ3AjVVBafGJ6JkklbzwyM29+KS5eLl5ETyZANmBJayF8MGklXUgzJUsoUm5sNipLWj9mJkApTChqd11xIjNHJDs0U3kpLiZQWlJQREI3SUdGTCNFYWIuQHdtPV59a3NOck5pX3Ai''@;'; put 'put ''LiQpYiNlbVR2JWFQPltNYVZ6TFckLkJne0ZoLm1wYjVvMEBwTXhIPjJ9bz44RyQsO3ExbTlpe2piL34lSSVmdElGLkVPSl9eJE9AODNEW3RkcW8oWWJoVWEzZE94eThKTHttRjYsJilyclRLXlAzfj4kd1YwWlQlKz5baXI6PVhGbT1vPkF+Ik94YT84cWcuIVtEL11BTV97SE8pbU5xZkghKVBP''@;'; put 'put ''VHxyd2RKN2w6STd8eHU9UlJIP3J9enwoempXaHQrJDlXK0cjOUVgJTRfbGlMZFUzMUg0VVVQTUlFYldkL2MoQkNlUGRHJWB1cHFvQ3Zzbm91NUIveyU1bD02fjBvekZmXm9ELDF3YFo8R2kpXk13Y1IrOkpjXkFXWD9nQTNGSTU1OHMyRyRENkd4YyxCTzAieU5hIkM/TjEzNEhkTzdCfWc4fnM6''@;'; put 'put ''amd9Q2tvOlByX1dJPl01QjFfRFtoTmFka1M2WCkvJjJ4fWoqQUg6O0JfWDorL35WdnRycDZXdlE0MUxfTndNSGMufiU2VnQ5L0c6c0lCWSMrWk50eDNCZ05KcXZ+MT11QUNsQCp9XmJDPkM+S0JPZnBWXkxdR0NTPTBDZUhiQ2g1SFsxQ1g5cE1ZTUhxP3Y1N19jdXAkUC98LDxIV1BTYWAmR0xj''@;'; put 'put ''Pik0MWJtfSUiQFdoYFBsTl9MVyRMUzVfSmxQT017eVJ4NzZvbFNAZUtAaWohaW4iMTVhNHJFU1V+eDRCMzMyd3tBVjIrP2ddIWRXTjlPUW87SF8yVWV0KnV5UyV1bEZabEJfJHtZNEVXOlo9Yz14UTVmUE4xanVuJU1zJSFYfCY8M1FoLFspa3F4USxgKFEyWXRTQHo0fl16R1cxW3ZGMmE4KGlL''@;'; put 'put ''aV86X3ExYSpCR3lycG5NdjdmRT9qS1o5STxrUkk8RVpfIikmLl5UN296eDkvYGA0SVpxT1c/OXt4W3lZLnpyd0tgZlF8UDA6aUZjS18zJG9PJHhzbzl0WlMsfTVRZiFxJiVUaFBlaEg1YllsNCVyfkltVDFxdTp5bzBbNTMjXkJHKkU3bVRMUTFAfVdsMCtYKDh1ck4scS85cTNOYHVKbGopVk5O''@;'; put 'put ''fHpsbk1lSFp5djk/dW5sV2QkcV9QPEw1MXpKLjpXWVd7RXR7YkUzaVArYkQmRmFdZDFAXjw0ZVBfcytoNFJUPyZNU3FhaFBLdl5ke1o+ajo3KDldZU9YRi9QYnlRYXkrRXN1KDhBcXAwWCxvTSJHQEIhPGZ2Wy9rZE8kZihMVDtWRD4zVDsmWVAuZnJWMm9QdDFnN3E4LHVsL2BIM29YWXtjdnlk''@;'; put 'put ''T35jdkwmdzwofCx4cEI8NC5CNSErdCpqOyRkVzh5Ul1DPjhtOWBxOTh0b0ZMRWE9ZlVrXU13SmJNTyUpVV9MPjRyXkUxPShYWzgjUzVwZzohKTp+WUspbXtmOzZ3L2JxbSNyVmklZEIwclFmMDZHcEBhNyMoNGFBb0x4UVk0W3gveyVVeFRuYCMqfSQ2Ulg2el1henJaTGYxLEZ8U2NsTDkqfVJJ''@;'; put 'put ''YDUqSSVkUnArJFssY3drbT18YF51WkdKL0xEYkpeSmZNMUkrXjkpMDx+Tn5WdGtBTXdhTlJGXzl6WEI6QGZVUlJmOXJVK0IlJXpfenA1ckZ2KU4sLzpBcEsrbHRBM29Fb00mN3t9VCRxcG50OHdGayVjP0Vkc1oiIjFDdjN1Pi9BQiVMNSEjYVJucHlbTz4lajs6WFhsezg4YGNkRChdcWIuQVpL''@;'; put 'put ''P3QvYVA9ZiVsIld7dkNWb0wlZE8hYnxiTyQ6QXBLUFR3Oj8+LkFwSz1fdF07QSxRWj9PdT14ejhTKXo0PVQwR1J3VC8wZ30kdj8xZjFSbDRqQjFfJTNpJXJWJj8+NFd1ayEvXy5vNXM+Z35CfFYqcjZ7PHc8M0glfChrT1hbYVMhdnlFQ3UvWWVmS2xoVn5XNilXbWp8JFVSPkVhfW1YJC5hTU55''@;'; put 'put ''fEwsaykudCtDTyQ1Z0VYXiFIbDEpY31BMnlKKlQxISx1UDpve2g5Wmcraisle2lETDxQN25bSn5AIlolUiVlWDB7KTpRUmVwc0FJaDlgMXZ5SkV0RSR6b0VPPzc4YyE+K0guYmokZiN7STcxKVM1fGpzJnx6eCJOUE4sLDxDMUJ3eGBDelhhaHtmezVXQ1hiMnVsK29BI2R6PVM3ZHkqdXhUSndY''@;'; put 'put ''UGBITztaPjY3Q0U2UmxhLk9ifnwzP2VleDEjSDBOWTBEZFhKcyY+X287KipFYUpzRSRSWE9OK2F+ZktbR1QpKkVhVjouNDtbSnVPaD1yW1tJbjY1JE80cXBVYElST0N+TTBVV2ghVylXS1lob3xnMmQ7WShfajxPPTZkZXF2SmdNbHlTam04X2ZZalg7UCFFRCRKUGheKVNrVXFzVloxO3tDMEZb''@;'; put 'put ''W2JOXmc+WG9WTntRK08kflBrKm1aOGkpWz1ycTx1bFQqWEBrXilTVm9pZE11Rjp0TFVtaWUxQV4rPDVGIUssMlo4LEB1cTljOndjPUlSTyt2NFY7KiNoQ3trI0cyJGoySlozV1ZFVDFHM288WmIuL1RYcTB4XXFUW29dLyxoUWpVNWpEWH0zMXEyekt1QV5yKElOeSwoN2lNLElvZSV8YGNzelVm''@;'; put 'put ''KmM7NCN4I0BSYnNxcnoyWiJJRVd0eEAqdUJnK0hmdWx+YF9NfG5CKDIwd1pALCNqSi57aWI+KiU2aDM2KWtpMjQhfG5SXnVXNjVVYU07VyZwUDM9Xnt7eGM6bG93cDRIOk51OSNHJXp3QFRuRFVuYHNxXTdkWFdTPXojYXBhQy8pU0pCeihRcDFrIz01YWA6YkxyIVNReD5ENCs/Ll4iOlA6NkV2''@;'; put 'put ''PXQsb2YmOHAyWE17e0UjNlY8ZmgpVzVBSWV2ZWVJa0AvIyE7L0B6SXNCdG5ZJkpCXSN8RVNhTVVleWI+Jix4KWhIIkhBQ0w+cmJlcDBXOHNxSCF8OHtTbSUybGNMSilBNSVGKlhRM1ZxfmBTaThULDtCNzo1Y19NMUJlb2hXcD4mfU9bJlFHOzxePl9qNjVkLEUqZWBGOF56eTBpWXA5dnpBb1k+''@;'; put 'put ''KDl2ekl+NnV5Z3B3ZXtjLF56XTArIzhdSmVnfGAqZm97Wl5aPzklJW9Na3o4QGolZDhbP3k3cGArZHU/cG0qPSVRK205OXZJYUVdYk9ibW4xSURkeVVxSjxPTnlwRC9LLzhkLmw8OS9YbDB6MVZPN1ElejppK11jXVNuIyg0aDlGcXlEYWxEbyVeP2A6KG8ventDSygzRVN7IXxDdkhSRDc3L0tt''@;'; put 'put ''OXV5UWhSVzZZW1J6OHZnZUtbOXNdJEo2VXVhU3c7PWJHMzdENVhaaUoxQCxENHx4c0N9d11gOiIyZzh8Pyg0dnZ+ZFh7eEd4PXRbOEtSTWhAXUQyTkh4LG1BOEdBQmMvbVt7e3hFcGZDYV0sMCxAelJCVXkwOGAheElwX2FCOGU3fSldP2lpUjpNZEIwS09Rcno0JXd+cnNIUHBdL3klPWc5QCFx''@;'; put 'put ''PWc5QEJgOTBwenN6Q3R1a3k4b2xkTjUySlRFTlg8fmxXMEc0L2tuUDRsKW1AcFpUVls/NWc4WixOUDB4bllUbHtTOnVhY2d7L3dWPT5lVCVgJj94fSp9P2BkK2RDO1tsfjVSNk02Rzh+JW84dHwsaSpzWmVZU0FlezhzdXZ5Vzh0cV5le24qX1JeYVFFV3s4NilRNkVdKDQ2ZXYmaihvOFIheTdb''@;'; put 'put ''Pyg0QXNbP3xfUCFXe1ovLndReEchcztYOG5hYWdEIyQrLyNkLEJ9Lm1MOX1UYCZ1RVM7K00hSHB6KjlRfWZqQW5+WXZTOGIoS1piMzYzVEokYUVdTVJZZT0xPGZkOWlSZUNuZEM9MHN9bCpfU2Q5MjYqcDJWZGEiJXhrMVRvJCEzfnsjWj9QLy9vUXkpSkV6Ul5nej5QOVs6OGElUEh3QGYyPVFw''@;'; put 'put ''ZTs6fiFyPSVzKnMsdTYoR0s3KzUlWVBQZlVPSzk2Qy52OnJ4VSsvOjciVmErdSY3Smhrb15MdjxBYVQ/LEJWQWl7P3BeYE89OnomelVVbntBeSRWd31TSzhvZ1FVPVUzIlRFPFRfaFV8KzMuZWBlbnwsekNkYTwyYHUwX28sL3BDPlJTWks1SlttV302PWRqeVVrPmIrazxNM29TYmpTUzc4ejgz''@;'; put 'put ''SSYldmtqYi5LPj1tJns4VWxddF9lUjBkZFgobmxCVWs0dVRick9QOndHWE0mUSN9Nzg6aH4oMmB8IWw9WDF6X1o8cTJJVnB2OTolaV56fm19VTNVYmU8JXVxc0szVEssVm4lbj5BLk93WCY7ZWR6Q35bY0NASVJYeWlDJXU6YzFwR1hGbnkxdyZYZi9DWzNWcWk7YjZtJlc9aSNaSz5TZHckSSVL''@;'; put 'put ''KkpUUCopbV55S2QhOUQpPik/V3E3UUIucH0sRVRWSyxsODFiTj59cHtSP2A9UUFCaV9fdjN9S25gJXMubEFtdDhrWXcvV0t0MUd0Ql1FKjR+b3lfPUFpUGJ6M2R3VEg9Z1Z+PiZCIUtjV0dpZlsxd3wzX2lJK0ksUTNtO3Q0I1EvZUhiJiUmaF1VVnI8TVg1byo8TFl1VF0hT246fWJ8XWJbTUB+''@;'; put 'put ''PmYqTEQ3Wz1xWzM/YTMkPlddM3pkRyxtR3VsIzVHY01aWyRaSUZafj4xMFFPak1xQz0xRmgkUUhqb0hNKlk7SlJQQz1HYXl1bDNCXW5dSkJBZUNyImdsXkI4Y043Pl01RjlCeSF+NyVmYkhpImdZZEIuPjEwPGFzWUEhWUQyUnJJSlZIZEprPz52V1soaEd3dWRlZz9iNGEvPkMlIlArZkVDcz9m''@;'; put 'put ''ZkNNVzBoLCZkb2hhbU5yKX0+SGUwfUchRjt4N1F1IzVGTklITHR5S3k3UipSVlRtN0RiIl0+MEg4eWcjQEUlKEdSeDFKVnp6SU8jVH1FdkFqWjBDWmZkQWo/STx3RFVFSkIxXylzNEgiYHQ6ajZATzs4MGUsWjdTbkRXWS95MEFqdGRlJUxPeyhbfjRnUXpCc3RkZV10U0FWVTNENlJeUTE1ZiQ/''@;'; put 'put ''XyFoImRLTCRBSUF2VzVGPkd5ISZ3Rk0yTzdEKDFxSU9HTytfQ1hMP2RLKS4sT0dKP0M3R0xFTVF8UXU8SEI3YEheY2FlbnJVQz55cDRgX3VpZSshW3pJTik9bCx1fjs1ZTdaL3o1K1pla0VgXz09TD9lOWc0ckQpJVUpOTZFXy9vQT4rK0BbYy8wdldqZ1Q9TH5wfitSRVtXcj9SX0kyamN2VFY7''@;'; put 'put ''NHIwcS8pOnBJT25xN1UjLFs2NTs5Ll4uRmclSHZBbTIsKyZiWjBtMHtXNjAoP3YsT1V5T359YXhuUl8ycnYxdVJhfXZBaT9uVl9APGguOmpQP1JfNT89WVNpJWcwZi5ncnMpZVJIZixjZigjfnVBVyVPcW8uYjp0Qlg0Vm9YTmh8TmF0RUMwSU0vNzM7PTpkSShgSnVrd0BCPnhofWcuU2NEJUgu''@;'; put 'put ''UHZbWHNVcjk2Vy5rSjR4L1hNWl4wMSwuYUBiOSlqakVkV1ojd21sJDgzZHU+QHl8Z1ViYV93PCoqbnByJFkifGduQX0wUCY4cyElIVteSDEzaiE4ZHRRMVQ3W1pHZ0BLWTdWR09DY2BvV316eV9AUi9USTh3NGc6TltWbzZELix1QFlFOFlSWWUxMH0pZilwaUQpMj9aUkQuRzxDQVZGWzloM2s9''@;'; put 'put ''blE8eiJFdzxMV0plRzNOeUlzXzJFSHp3YllnRjdiWUZqOnUvNDlpZWklMV5OZ1FLJXwwMjlYYV4mPW9INGRLKF5GTHNGKz0hdSZuUEZNZGA2JF5PfTMkfFl7Z1FMOHIvfTovWGNvUjxGZHN1MmxwPURmUmVNIVZHXlo3eElAanxHIW48e2ZqdGwpRTxDdH1DRDRTIStFbjA/QHQ7MTI+bGY3NjZB''@;'; put 'put ''fV5HZkdBWjQsZGQ1PHYhazdxZVUrNW9wfHJtbHwsN2g3cSlCQEBncyh1RlskRnl1TXlRZiEqIm5RUFNYLHxVZ14vMF1QIV03bFF+aGxFMlAlOVZ9TH04SFNzdCkvNFJ2PDJAZl5Fd18jKV08YVlvaWtNVFg1ekp1a0UjcyM2NGMwWjZ9IVEzIlpFWldDOC5rfGcxSDB8RTR7JmY/MXEjJiFBXU13''@;'; put 'put ''cHlCLm5rY2QkIVtrOTtPaWhBTXEwN3QqXUp5LGRvcyxuVSNkby9IOGspamBEVXkwMzh1LG1gNF0md1BwQm9XYW5jU2ZAZnBUU3M7czBERUZ+ZFQlL1Q8Z0ZvXzQkKkdaQDk2NzEvMz16ezIxZCgpJTREKVVzVEJgVV4zY0BzaFVmNFAlbzhiPVt1b2gsSyU8OXZPZyRYa2A/ZT4/RUBDbzUlWCxo''@;'; put 'put ''aTQmX20yMVUxIyxLfiVQLHNkQ25nLl0iMWI6YT5BTyQ6PlVSTXo5NWF3LEk7ViMwMjZaSn07bmo3NWYhWn0+KWNfVV8iLHhwdG5CMUg2UTQ2akwpZjRjTVlwOV9NaTRBQFMlb348aFhuQz9geFVsUDVXY2gmKmI3Lj49dltNNypdZFIjZEIlUj4/SkVXbCFWJU19eWVnaWF7IjFqXkYmKiYjZD9A''@;'; put 'put ''VzZRcWFKI25KLmp8ZTEvcD14b3J6NmA7Pj86KWloTWw3PUFlaFd1IWNZR3YzXkEqSGdBZS89LnpDJFgvfH5jMihSa2tYOytUNGNeTHg3ZjhHb05zbmlyb2dKOF00PiZ3YDplJWZ2bW1VPm9IWjwhbEZxfTdsOjtdKCMkZnVmUUhRaEVURShPVVViQ2hISjA3VSVsXTUxUjUuK1hNISNGOEdBQy9A''@;'; put 'put ''JDpeYzEsQDR+YX1xeEpGU1JuaE53LF92XUchezhNfWEsLkxzdXVsZTFGK310cHc5aCYwVzhKS3JoIipDKkMqdnVDL0ptcTQxQj07NVtWcGtsQ2g9blhmSCZFNWs2S3dNS1YkbzZ3NnFgKXN9IzxLaF1dO1VlZ2lCWCJLekVIdj4hOXFFMnA9Y1dxPyZUQG5ubXQwRDg2ciE1MTY3SmxyPSRjVEND''@;'; put 'put ''cUY+cklYS0FheEBuY25oPyZAMkYqPzQ+IylVO01JYEA+cFU3QTJMS2VybEQvbHVQLkBCJGQpWltaQnh7KmQvNjwxPzAvVU5yNGYlKTpgKSZVc0FfZDs6dD8lQGpqTVkwI20jSntMYUBEOSoofkQmWWF0W2ZHT05yNSNDJSF7a10/eEx1XSMhbV5jbzl9SGA9b14iX2FUK2RJMHV8T2dCKSgyd3U4''@;'; put 'put ''XUUrL1I8OH1IU10kfSM7akZFeG1TeEYsQXlFWilqZXRrNUZUKCEyRFchNC8ke1clX2k1cVZ5ZipvJSRGeDpvTylMSXpwX1U4ajhXQ093LDZ3MToqOmQ2Wk1NKEI3e108cWZJKWZKKkw+VF5OcGUyeiNRWkNdN3A3QmYkIWQ4MllmaSM1JVJufmtHZCoiY2hYcnh4NHF+YyhCXTpuMzR8PWZtUSpC''@;'; put 'put ''NF90P3c/WHtkMmAqMW1PNGB6KStDVWVQV2JYMGFJM0cuenlYeldeOi5adGx+Z1gxU3I9dFI4P0I+T0l1Q3Y3OUFoJW5dN3ZnSDFqWCx1eEQpN0dLYjVfKD47OjdqIUdvXWx6ZEUxTSFNfXc0VCV7U0NMQl9ZInlmbkF3TVg4M3c8QzRJTjVISCtKIU1gPlRLeCpTb2tsPnRQfnZUc3R3KnVaXU1O''@;'; put 'put ''emthZnBkTzh7W217ME9wezBZRGs8eyxBaF1NJlohbChkZTRLRHo+OHJkL019O2gjbWdad19xTmNeYlMuQFEpKiRWX1M/WWhOJW1AYXUyPzZKL10rfVs8eSNfKGsvcX1PMiNafGFWeTU4bXZtO0RWUD0iZztVcVFEeFZwN19edX1YS3BKZHtzZTV3XzV8c1IrMn54ekRjfG58Ok9vZGZFQixpaEJr''@;'; put 'put ''cmh7Ri5FL34mQDRkX3RQVGlFO3hmNXBNNC55PygqRV51NDp4TUZFPCUuQXVSYUdoQTImbkwsZyVFLiMzQyNqfFkxfH4kcWdOJUxzYUJ5LEBfO208SmwmcmNTKChXUGoveipJbnphUTNXcHAsbG8vIjkqSXd0R1pZfVE0SlZDfEhSV01+Wlo8K3xoeDczUmVNTGteYl5idTRfayRBNzpMYkRaXXwl''@;'; put 'put ''Z1ROMWNMNjJrOFkiKXFlaVQ3NnY5ZGtDTkw2OmgiYF1DcGd2VChkTVFnQ3JhWWduP0lkdD5MZWBjRE5gSXJhWjAiantMeiF8QHhbWC49UjY0MC4oS1YyUyxzXWx2T25TTW0sWGopKlp6SXl5eWRkKiJYbV9JTVFaWGlGdWokYkx9TkcxUD8wREt5Km5lNlBnUiI/ailSaVFTQWFbeGdPQ01KdzFS''@;'; put 'put ''XWBHRHZQbUVYbEdvJCRTVEhxZ2BXZlFWTDxPbGFvNzZMYUteUU9EMTB+V0RHXkpURVFDOHVsbEJzLipASH50KkI3TklGbnZtVnNrb3VxQ2hBOn1Yd0hDVzp2VXNrb0kvcUVafUFaQjhJbmZ7PCMlfCMsflhvfnhlN3VEdmV7e3g7QEczfXYlO34xSTkrRXY8JncwOTE3ezp4WlJhXk9uYSZKdXp7''@;'; put 'put ''RkMmIi5uMl5GWF5ITGpPNU43OVFfSFkmdz9Qej9KYmQsbktaZHI3fj9FZE8vNFB1OXRvW0kuK2U4SDdAP2RgYjs2fjpgRz0zIyNlLCs8eUdDWFd8bmkyI1NwMCU9Wj1QYig6JEpRZDl3Z01BYDBTPTpbbChPREY/YkZIRDZmWUYqWnpoN2EmOipFWlltImt9NmVbaTJUPjduQnp6SlEhe2spNEZX''@;'; put 'put ''MzQ5dDtDW2NVcz9JIU4lUmF1Pld4NE0yJGgrQ2ZNLiZRem1gPG02MyhKTVJ9bWkjZXx5eThIR0ljLj1Oe0ReVllFPzJsTG1oI0RjUTEzTkcwPnZlcFtvMCY/eDN+R1p1T3xuUi49dXpMKCFiYWxnR3VASjRdQ10pN0l8XXsvX2tVc1RjTkZQdjNfPTB6SmZyTi9YOG0/OURNcT93fHJZNS4kRiFV''@;'; put 'put ''Y2NSPXZrMS52dypbaGk6a3xNUiI2Mi9mQl5PSS8qfVF+Y303RndfQ0ZXMjJTVDJJRTNofGJ3LC8/YitsUy5mQXVFU2xPJF0ye3s2XVB5LHp3dD5kY0UmN0BUVi5ofTlRYFNYd0JAWCgiTkIqQk4qUTZZMERkTWF2T0g2WTBEZCQhOWwuPFh2e0MrJU50R1tbQ0tqRFQ7XTRfdVgqSlpTdzJ2VEFW''@;'; put 'put ''OVNbTT89ZjxnJCZeTT5YOyVDcyU8VF0oXjNbRj5ZbFIvamUzRjwhRFhsOXQ8dFJLazkxS31Dfl5pSWtTXzQraHxiR3V2WTkvXTJuaGlVXytkQE1LIzhXbiVqM29XM1RYaklMQ2owQzR4MnckKHhHdXZZSylLWjdyY0tqQ1pLXU5HMEBkO3pjUktPUXMyeHJHKHVkNG84djI2PTBuaUwvQGk9WWIy''@;'; put 'put ''M3ZFNEw1Kz4qdSJNU29DM3VjJSt8SUxFaENjUD1gTFIkd0o9XzdAQ0AybTp1eW4uQHoiJExoc3ZdMiU4JDNEQiVZe3Q/Vno7ViI0Ji5TNn19WEkwNCljNV0+PFYsXy9ebiFTQXo0Xzo6TVpfdXx7NFRafCs6KElNUWhuSGZ+PiNfYi9pdzFyVF8rVmIwWXBFe003S3JtJUcmKV9eaUdDMz5raGpT''@;'; put 'put ''JlU3Y0RuekNyPzYvS2RjZmRvX09rZkVuKjtPeFhbW1IqUi5vKzFbZCYlb1t1WnVmQSFDZykuR1tBN2dWcXRfK1kjIXEiQUgmU1RheEgoL1ZMPyltTXNVfVNlYm8yLmUlc1s0NFp1Mi5kVSlKfWw4ayVfJjg4REdvUXllPUVvS21BUjlmKUV0Szg9QV9KVi9HcTR4bnZyJm87OG1aMFU3fFRoZzk9''@;'; put 'put ''KHJCemVCIz9XRGNSTXZYU2I2Uz5WXlRdK1FIaVR5MiNwOUMhNn0uI016TXBLWDEyN1MmZmR+PTUuUFM1XjJqPmx4N3IiUVhTOXRkM2c2bnp3byViUDg5SStrYWo0QnFnVkhme3ojNjRRNEZWby9RMkZXb0xxNX0iOzRJbCsuLDxIdUlnKXpDMDptNDJvfUohR0QzQzhELHwidTwoQiFLcCxPSDd8''@;'; put 'put ''Imc7VX5WW1hXVWlgeUM9fGw3UTJpPXBhUHAjLjhDYTlqR3wwK3JBX3greFA5KS9WK0VeL3h0MnxPNnhyUjYhRXg0UCtbN21jamFlNnBufVc0X2FhaUpgKExoN0hWKiNBNzhBOFhHW1pdZEZLVUVheStka0RFYXhOeFhnIzd0ZGVxUn5MSytGaWN2NF9hYW1OQXVtNDRbfVkwQ3N0ZGVmUkVIYXVa''@;'; put 'put ''RVZYYnZncU82JXpPaV1gY01wWjZfU3FPNiRHTWlhL2JDJEVgWEI/MEgjOEVDQksoOkREU3FKLyFAPmdyR1JTJkZ5RCgoWCpzY3lAWjtpKzJOJEQsNiV6JT12Q2wpKiRjSyVWX2Jpe3ozT0hfQVFYWkZ2R05JSXk4d11xbEJqOHc6KzN1LGl3fiUmKlpkMzlkeH5WWjBHU182W3ppZChOZF1ZdTxa''@;'; put 'put ''VG8wSm1CNTs8OzZsUjFgcDk3MWMhMEglWiRnd2Npb2U4ZE0qR2Y8WzIuXVYvRWNVTVQ/eVhxOTwiPiFofHIsQVpRLmM1VnAlJH5ZRHcsTVFuK0RoYGtxZjFxVjU6ZU4xOnZYcVN6XSg/Om09RHlCOmVNcEtyP1AzYTcvZmBNRnJTKUFMJSJwN2pzL15aUVNYP1JoWD44fiE7c0VoSD40JEJMNW5h''@;'; put 'put ''X2FxXURvUEk+UlA+RDNyKU1xdHZrMHI4fVBLKncyb1lvIyg5SiNjYk9hT3gpVkk2YyY6WFp1eS5DaVpzdlIyZ3VTUW4uQ3VIOSZKSUkrLmN6SklzO0w3YnwsWV9zPl9qMD1+bUA/STp6W0BBNGBWS3lBcX1Ld28xJVpibDYzeTlUMjE8L2VlZ3YwISFFez5+cTlJZjYqNGhXdWswUzgjQVB4XilT''@;'; put 'put ''WmxNZTtlMUFmV0Q9ekR9aklKXUNNP2YxRk5GPiNvVG52VVhLcEshV2MwZko/YCNjYVspLHE8TldjZyhKJnhJT0I7VGAzaCpVSnw3eSNGdUpZQzpMY3FVcUY5bGVGfEwmPDB9ISN0NiNwP0cjdiZ2MChMSnNiNUAuXmo4dCRVRTFQUmwpPXxlR1AkeW15SlRKd2crXXNZayxfU3NnMVBJWWtsPlhS''@;'; put 'put ''SlZDeSVpY1dHPSsmNSk0VzNJSD5RXSxjJG5mJlBSSGd9XVU3I0FxYjBjKjx+IzFIezA5X0RfRHxdJGo/Jldibk15OngpPTpZLzB6Ty5IMGFFQztlaXxrN25yU2d8VkpuPTE2TkUhKSp4cXlMN2k1KlhMRns7P1BtSHF6MDd3NTpgflI4azhadG4lX21WOSp8XmxYOCI/Vjg7bGcvTiI2aVAqSk1R''@;'; put 'put ''TH1LKWlnTCtvJkVjSVszK2F6fms/ciJyeGlgR2YkUCJBPmo4XXs9WC5abTBXLzAxWTB5Z1o1SzpmcCk0V25PKE4/SiFffmR0SGxuIzA/TTc0IjNxfHRLWEdTVkdQc25pbHRMZjxPfGZUcEA5TF9hL2lGUWw5VSZeXXBDaHA8e3AxcVl9UEosdlg4elJ+WUpWencvbGVgWkEjNVI4XnVTXT9yPzR6''@;'; put 'put ''MSx4VT4mW01aN1h7KVd0fiheJF5rNDt2aHIkcC88TV46biZuY3RgZnRdeyQ+OltkVTwlbmM/YCZmZkZrYV5neDUlVjEhSiIkOjozOS4haC4qP2shST1paHhtUiMqJEk9aWh4UXpZYzJZZCRFNTQ3PiF9ITphZ2ZpWG1GU2EpJUN9OTtDcio/JVdCPkJfPWozXXpoWD1daD1dKDgxQ25gRWR4TSZ8''@;'; put 'put ''XSUsLCNjY054MSFRNmIrJjJUK3pmXk5La1FgXmttYTAkIiwleHBDMS43REB9aj9WMFNMSlpNS3dDZUM7MVtVS0RvMFNTK1ZMYUopXUplT3RJfSgjd2MjLCFvNT5mPSlxZDROQHckYE05Qk1xcEtMfHFmPCg9cV5UbWFaZ3U9PiQyUCR4RW54bC9wSThqOkFecDlxSEl4QSNXJTNWTFs3Q3V3flZK''@;'; put 'put ''WVZwOTtvJSRLZ11EOVhHWCkrJCIzZ0skaFlDZT96JTE0KFh2TCNNSklbZX5OS31jY35VTiZfVVh9K1ZSI0gsVDZ5KnU2JV1aR1UueCtxKUZ4IVF7XUNvTlg2TypmNiRUSVtiPFkhNHU8ZUZCLHR3NUtRKXRxQnhdVTs/JihhRkdJKnU5YWZSbjtkIXA2Tn5WKXBpXjAlW0VXUGloO1pLRlY3OENH''@;'; put 'put ''cjtubzVWKSxhayEuW0MsLjgqbmZNdGZ+XUI6KUJ3Pnh5SHRfQGIlWGFgW3BWREwkI0NNS1UkJjtfM1VyP2k7VCpjUmxZT3piRS98Yi9mbHB0RyJHVXhDKV9EMClkKV4zUyFYTEYpailNJVc/Q29pcVcmITtLSiJdL3AuVWtXcEszX3lsa2grZDklVG5wSz1xaSUlN0V2WlM6aEReV1E6MEtee1dz''@;'; put 'put ''ailwcyJIOm1HOHUyXnBaSHY7Y1RdZHA3eyZ3P0w8c2VieDUwd0lad0xicGshb2FUW2dVXyN6N2EmeE4lYHcpayVldCtqJkRfOz84XypIeEwxV3xsYmxzcGF1K1AmZ3wqO1NxITdzc0JfYiJTME4lOUVnYl1WITx6ZjlpUnpxWVg5eXJ+P1RoNF9vPSpKN18zdExSTHQpNituc2dlTzorflVpWF1I''@;'; put 'put ''cTROeUZYfGJLcCpWd19rZkxSVUNBTm8sRG57Q3o+N25YWz9OI2JwdmxNY2s8OH46clJ5I3hvZVs6WEdfX2xmUiY0VGRvWEQ+Znd3JW87cG5FYD4kVnE8cEx8aC5PRz89bjo+KW14YF1uPWouQG05NkwoR0cqOTs+VDlXI21ULyokSX4mNHx6bHdCKih7QzU0KktAdUorNGtlIlU5b3BDb3ghMXFG''@;'; put 'put ''QGF1NW9rK0sxfEdqSURSInIvPUxLZ2djW0FzTSVnVV5gJj1KSVg5XUxmLys+WDl1PmVybCpjXkBiTS9xZyRBfXF6aEFVInhLWDI9fGBuXW14eWZbUHg5WXFab0IuQ09Ge0krKCZmSXV1UmdtPSJdU2M8Pip9bSFwdWpLOFlEWD5vcH1UdltuNCNMJVB5JVtAeyM2MGMiO0Fub1FOcGw9YF07TkZ7''@;'; put 'put ''ejVqLjk8I3QwPSJiNUNRZ0xWTngiakBuYTNWXU4pPn04VmwpYF0xSDx7KytBI3x5WFlrXj9dPktLJXxfViM3OkVhO25rKXBpPCl5Z2VxM3olZSpUZ0RPNy5KVHZAUnsrMER4XjdmTDc7SVEpc3JSNyxHZUEkbWNGVSluOl5GYythRlUpb3Z7OTZ5djR1cFttXj1hT2lLcm9YVSZXdkR4bCQzMSpo''@;'; put 'put ''akVEfFJIcTlhOHU1aS5uNE9Ye3lnWGcwRz5ofmp+S289Wyw0LmZnL3B1MltSM0J5SlhEVUhrPCpbSH5qdilEcDB9VzY5bUVkJTozKWA6U090eTFGRi9mU2NoVzlkRlN8UVRDayl5R19ETHksW2s5RzhdVSlPLjU0dyRVPU8oNW59T3pzNCxeJXs6Pk89RiVYRiRVdjNjXll1cEZPMDo7PjY9bzkx''@;'; put 'put ''UXl5MEkyTTdDSnxmcTdJa1F6bV80dSJefE9qbTtrTFdEX3F7aWtRYkAvZktTOEhlaFdGaDNUcXVjYyJPclkqR3l+fS58TF5MLDdadC9NeVk9O3AvVk1XZClHYWh2SGg5M2ZGTildelVpOyRaR0srVGMkKm8rY2M6KipKcyglWHBnSVk+JURaZEE6bFlgLkdaeDpDZyY4cSwlakZRei5vKyVqOTxX''@;'; put 'put ''T0J5PSQycyFmWlk5Z0gmJTRsZUtqQkozNkNMTmshLzchc1htOmM6S3h4JT5nY30zRTIsZHZzYXRlYVckK0VlYUxSPFAhUHlnaTwrUFtdS0FkWFo7WW1OdXopXX0kZD9FImM5bXBJc2RVWSpRaG1OQjs+Q3YwR2QoOXJVS1IoNFFPUFIvRkZDUjgpU0RkNUR+RlI9ckNoPTlkfGtLaDYuIio4ejJp''@;'; put 'put ''TkhgbUcxQFVrdiF4JkchIkJbZy8hamZgbnBpKmg1aFFYcExrQVBaeDpCbFtFZy9wRz5MV09AUlRDW3k1NGowNzBYRH0hSTR7UkEkT2FpS30sN201IUVAZFY6NlBJLEQmQW5kMElZNDhFd2hIXSQ1Y0hmJHg8YWspTUBxXyg5IUVwI207XzdCNF55QjglelZSZkciR1cmP2Qsb09JPEM+SSVKallr''@;'; put 'put ''cHJIN2gveTd4WVdqUi9EeX5Fcz9pR0huU3lZeTVIOFMpS0tgaWVpQmAoYVgwdmw5RUwuQCI4X3ZPLD1GKnQ/eDU9LDZnd11MeFtTTVRQd1Bna059OlVKVTJzT1MqL2E2Q2gxMHg2NTBGMDYucnlYMFNSYlcmNS5VOCN4eS5hWjdZO0BFO2hlbU5QMnNNL1kyRD12Vk5xLkdzJSNXajw3RjYqYGB3''@;'; put 'put ''VCY1NWNET2JtfHdvWnNtSmV2b3JmfFdxIzBnaThpcCJNRnBeRkVaS0VpUCZ5LE49P1JuIVM9KXxpazBTXVQxSWhrbUJKcHIsXihwVkw8Zjp2Zkxka05OSWFgQEM3IWMmZSpBOixNYCMpM2MmUU1qZTFRVFRjUl9hWFNvcCRDIjpTWnNnJT1pMWFGUyMxV0l5Vi81Sz1CY3NCLHg4PT8kQz8kbDtG''@;'; put 'put ''dVtwJEMpc1B8YiNDViMuP1FWT3EmJXxGaXNwSjMpdE1hcyxCV3lReyljXk8vKmdfMz09S1pHVCx0VGBVbUFbJEtrTSNMbXJxUjQ6NG5pTHhZOTxLK1FmOD8oZUZneSklfitWSFZ+InE5Un4xem8/WH4pYnk/aG0mfT9XOjk7ci9hP3spdFZRUjV+bTEzOl1TRX5WLjNCaSI/QyNiKERxWkkuWDtE''@;'; put 'put ''e144b1FQW25TPSIqbj1CRjElV1grWmsrcj1UI0R2KCV4Um11W2UuYXskLyptdndXPiFuZiVQS1EwRHBDM1tkXz1BUH1HNCl8KF0wdS9fXnBfcFtDOjF7MTo5eU83e2pAPmZucENUSHY8IShnPl0jO2p7bG9sNjFGdT5dUlF0M2xPfHc8ViUlc2FdZ0taQ3lOSGA3P3t4O2ErejQ9P24yTzdWPkwr''@;'; put 'put ''THNndExxdV07X1RlPVFnMkNiX2QkZ0gyY2ljaWN8KHV8VilYPGkjUnFWTVU1bH02dWh1fGJCYjBfPS8/QVl8LmtsLD0xNXI3YFcpbHAscCNCdz19TVM9Qnk1bX1wJmJrZDo3Ol12TmpFUEMzbyZFWlI4WUs3LFdqYkYqREp3On4sUVFtdXBGdG4yLkhDRXZ1cEhSdltnSnBEIj9FKSJUPGh3JHxs''@;'; put 'put ''ST56RlcmQV1VWWNMODZ3UWMlYnFKdUg+UFJ4YEFPYENZX1hfUmN9cEQxS0M3I3RKN11hWDRkNi5NUGUzNHRUdGZhOVs2YG1BKUMldmF3eyFYbGJ5OG90WkcrPXpzZE5aIjgzQHNZTFBheUJEaG84diElSXl7YWtlO19OWis0YVY1e15lcXBLWjRkKyZdcEJZfj4mQiQzZChwaSwqLlJuMHxqfjUz''@;'; put 'put ''LihqQX1KRSY2SWJmS0IyLyxEYmtOQDhzYG0sdF9AXWQxTXlXYVBQQl1lUDFnOHcmUGVBQH0+SFBBX29+aDNuQGF2Ynt7MnhTVClZYTBgZT04VWxxZUtyJTlaJk98YmVkMzJfajomZClHfj55MzM0dlR4XXpoaEZzTnkqRXcoTSQyP2NER2pSezl0U1YjcWY4QWwldVcjZWs7WXp3PFhyZjd+RUhu''@;'; put 'put ''TGtlVWREbmJYUSkzKShNZHk+RD88XmU8fU5rLlFEPH00a315JklPUntSaWNXXjc+eiZXJiZWbCE9YHlbVGVUOkF2JDJ+JjRbKiZeM3RKcnA6ViU8Qyl9L3U/S2JXbiZ2UVdjImZfV2cjflt3anMyP10wfXI/fVU9SjsmSj5jbjEhbmxpN215ZmBpZl5We11RekIwSV4/VmE9b2EoaEg7am1SV1FO''@;'; put 'put ''Oi8qbnZ8MUo9QjwoPWVXXUcuS2JpaHBUcDtwJG5MXyFVfkN6KXlUNUtvXUM0ITtvUHU6eF81UXdfNHEuOU1ZQksjNEwpdlAjMGpqay5Jdmc0eiZQejNoZWFxZiY9TGJtWWpsI11pRnxINGdjYzRLIkdfLm5idXtpLERrezVeRFksWWRRRmJpKjhTLmk8XlM+VjUpRHhWTnpYY2dTOHNBTEU4WG1s''@;'; put 'put ''VUsiUjwuUEo1O0tLKjBeKHV8R1hNJlhDZXgseGJkej9CI0tTej95P2VVYTR6Jl5uVSgjL29meTdubTA1MVY2IXhpR25pdkwjW0w6MnxbTWBIbGw5OUI4RWtOcS5uRz9XfE1Rd0QscDk8bFQxWSxqPCVqYVs9fG1pJkR1Tm50PTV7MS5XQGJwJDw0Y1c9ISNFNHhPbD0zTiMoL2hJKE9bI2UyJFoo''@;'; put 'put ''TFBuX2JWfnFpOTc0Y3FiREo4N31UeDJJWXZqRTokbF4/K3d2RGVeMmk5U0R4YDJzJnFrN08xZ08zN297NHMkQDpHIV0vfk07KzhDYVAuMytAKz1nXU1uYlRiSkkpLztBUWZpciVqYXoybk5SZml2PWt7Nlo1bmU3LyIzWjdoSk9WeSF+SXo0aU4ibUQvWzc2Tl5UWClDU0BMIyxfTTZJPCZ6c0tO''@;'; put 'put ''OG9Wd0lhI1lZW2o5XXdBSHJKaThjInA1UCNRLHFsYGZ6PEVzKWFNamYyTHA7TUVfI1FtOVBCS2VxWmFVTWBWYmcpb3ZBcTUhVyVRNi9CM3FbMTxiIjQsdXhES3h2LnFIOGx4UHRiRC58L2pqelNYWnloYG9vZSZnPGIiZGxNYG95aD1VayN1MHE5IWlwTDAvUHNVXjMvOy9KZTshX2AqZF5rQiw3''@;'; put 'put ''ak5DcHZFPH1iWUlXOHlsOUVtfHJdUVJaSV5tMjFxYTFvb3YsSTBbWHF4e14lRG4oP3w+OEhad0dgNE43JWJlIjhsKnl9YUBYMEQyMyxOTjNvPGUhV1lmJjZhO10zSz45Kl0odVhBTSVvKzlPaSo3MVFDLH1wZjpPKVJ4VnldWyUlJXFZbzo/YXU5Im9IeDdaYSREOHp5NG1YQkokQUMid2JBQUdI''@;'; put 'put ''OFdpIXpYNVlCR3g+SGN2V1ZAQ0lxZ0tiUzBaWy9GblJBTWlBQUFBQUFBbEIkQUwuK1tzZ1R5JGJ3ODU4fD4mQ3QkRFRCVDoqVDBtdiRLcXRKeTY1P1M1ZzpfY0hraGtmXnVGS1NlRDsoY2tdW15EbU9gQk98TH5wcFhNKz0uMiVPMGh1c1MhYC9scXg1THRVU3FCb0RURjZ7VnsqNX10WHAjbTUr''@;'; put 'put ''Y3xeaUhIRj0zPmA5PFcxfmFsWFgrJjh2YnF5Q1c8QSJyfSYzN108Si51OXtAU1t9dVEkaGRBczF7WCRjSU9CMGtVQ0g1ZF49RjJQdHJrLzgjSkgofUNfWzd+UTo1XUMlY2dKeyY4PjdxdlNrWy94PT9qKmBBRFhWKGgmOUJ5SEI1WXxqWWgscVlNSS9dQmloRDdjWkZeUjd6OWkwSis7YnAhWUAu''@;'; put 'put ''fHVwM2ordmtmaSNULnlmOnplZyxQWiI/Ykx8S1ZhcDQ5PSVbbl1vRnZzYHo0OSl1fVtCI358OkdsQmh2IlQie30qXiF+eSNHJCg9cW1hTjFgYlg6OnFsWmVQNWg+R29dLCY8NDZQdzUwQXQ3UjAxXUZIVlheLi4yb0BWb2lIUVBpdik+SHthVzBpPlE1Uil2Wmx9ZEVeTWhEN3EkbHdNPSVEVyxl''@;'; put 'put ''NVNdeGRqIWZARmBGZjdHKnk2K0huWktGdC5uImtiST98cjt8VmpNNl1FZXw5NlNuNHZsZWFZcztDUW1bKzttbDw/X2chfF9jKilYYVVCKENBSUoiP35wdWlVKlJ9MTFvJFBsSGBBamolZzFUUk8kVXhPWkdoTWt1WVYkd3I/NkpbZ0Y/QT1hclM0M3VMW3dDSn17PnV0MTFLa0VPOkopZkZnRzp1''@;'; put 'put ''bjQoRn1VfWl5alIpcHdCYEkjJXtmMkB+QXlYOmpdKHp2VnRiRkhuX3k4X10qJDpqY1dnR0c8LytlKjFCSHolRFlvNFFNdlIoL0hRWV4rPTp2TDUrYGBzOWpBLiZkcTpxRldfXVBPOjM9QCkpfEVZW29OPVkoYEouKFB6JEdodT0xYzVnfFBDRGBQVjlYQDJJcGs8PWprUC5hQ3Y4Z3krUXVOezhg''@;'; put 'put ''XztyUjMzZXgmJUheNzJqMGAvOUxhPHtUYGZWTHkkbFUqRUh8KyxedU5gZFFPa1AwS3JgIzsoYVJHfVdlN2RYUnpebzZZRiZCZDxobGNQU2xPQl5aVmZVbiovX3xxV0IpQlAkZl5UYU5QMSR1XUJibj5PKiouYElVR01LNi43QUZTe14hOCZwZmdhJmRjKnVJKFY7eV0pe0B9VmIyS24qYDRHKlBL''@;'; put 'put ''OHV9Vy8vMjx8Y3FgOSJYUnxqRGV0cVlqLzpAJGtpRGRsRH5iNjkjdTs+Qn4rKiM4LDxxTz5OPXduTjI3RV5CKlkmRSEvcFVGblYwd1hbTFRGJSxQQktnTX03PE9tWT19XlYobldoPlBKfX1VYSF5YVgweTRCP11vNnYiQX4xcH1obFdIPjJqcl00O0x2TVVQVURPTEpqZm5PX2FQI2plOnQ8SVk8''@;'; put 'put ''fVc5KmJdJkcra3g9eHF0PVVXbTJ2eXFIM2IjZmlPaC9oaTxUU0d7cGhzNklhR0ptRUsoTS5+KnVCZjRSU1ErKD1obHVtXmtIbExSQGlIRzVWaFIkZElVUkhoRnpUeXpVaGIpM2BpJWF2PnUocF1bYzNDNWIpL314fFM5QSxvR093QT52Nl1QekZPe3p3R10keERMIiZgP01GLmt+KSVsJktATU9L''@;'; put 'put ''ZWVIc15bVVtSREBLLCEoRiJMSFZ9dCspZz9iOShKT24pWXpCdnRRJihkKjtTOXBPQyhsI1ByQDxqaHhXIV0pYU9WfE00fG0zVWtwQzdXTW9CemA6YzhQYnBdb3o1Tzo4WiQ4PCVvdkh2TU1MTVlIQFtxaWtRI3V8dXA8blY+VyJia31NQnAqZHFlWC46VSZOaENUdi58WzhDZzxGaGFYVlo8cFRR''@;'; put 'put ''SmUxT1Apbmp3I3JzTD90X2B6fU0uUUlHbCJ7U3guViZSa1B4QyxtP3x3TlVZTSY8aGk5d2BLeCUxZlFYbGB9bGhANE5tdV8lZXBFb1MpIyVsJWJaJXZ0fCI7RChaIyk1UnIsYDYlWzF1W0J2ekwsJHNAcWJAJW9yVVpdXjw+M1t+ZTkzSS9jQ2BUazJIaXBuJWtqNWZIP3wkakxHMmJXakJGMU40''@;'; put 'put ''N2djTi9xTDVMUnFGbTFRTXtfV3w7bnUjTjdQP2Q4bDpuQlJva1RxKj5gRDtuP15wWEVfYUkzQixUYjQ3KVFHKT51RWl6SX1+d28/MFp8WyZYVGh4SUlJMSk2KFIpRUZJUCk/WzQ5elcrfW9SQ2o8IzwwPzsoPi9aIWJWbjVrXT12LC5WV0gmSWh0fm5Sdnt1cjsrcG9wakkoeEFhLkFUW15qVWtn''@;'; put 'put ''JStOOE4xfil+TGxuUjdgPmB9e2A7Rmk1L2siIk0kQ2F0OXswcC95U2E5ZDNgbXdjR2NAImtmWHo9PjhaKERdZk5pfFhaOSJfNGlMV35OMkM7Q0RyYVJxbCx0InlHKGJuI3IsVmIuaUg2U0RAZlN3K3k6MDRubE9SMDIoWnNLMHV8K0JHRlF9aXZuZFQyP3RGKU01ZndFfTZ2L1ZddHo1IW1UODt6''@;'; put 'put ''M0djOVc4e2hsamQsQjE5dUEhLiFBMnRzU1RRIV1Ubio1Y1ZUXiUheXF0eyI4MnMsO0x0QDwpSFhMMkh5alNicEllSFJRUXxlWS80WXE1Pk5KRHQxNVk3JV9dLjchIyQ8amdrX2xVVXxaQCNRIXd3XTVZQ3NmQ15gMSRXcjFOV0Y+PCtEOXpuOltjK1dJUmNPIzFhYkB0Mj4uO18rITBqUC9yQEo0''@;'; put 'put ''QlZLe042byk3JVlSJm1ydS9ucUsvaDFra08yTC9XZTdsaVpyaVJYYSVPbWZSYlY1fWd6RHEyOkZGK3VOIkhLbS8wKFJQYFoqaiVfUmNdTjByQ1dxMVFYSVpJWWBFQVhWRUN6XTx6IzpyKWpCNz92QiJKVCFUVDc7ZG8qREQ4OXkkSkpTM3ZAdWwyTm5Aal5vKEpvWkBUaiwqX0JXbWpPRjNUenpk''@;'; put 'put ''P19QKlMzUlhbT2RgRm81WlUxZ1p2PGBoWmlUdiVZbDhZeTBZKXZVUnE7OTFBRislN2QxMF9RY05xSVEyS3dzYFh4M3NkYDFOdU5YWWxHUnczX0oxPX1UdEExK3VJfXEhS2MkUmNAdiI7RnVQXWlZIW9NVFB2KG43MkI6QDVoKWxBdjB7X1o9WWsjcSZFc1NAUS87aUwoUGtkbWRsNkZgL19dPzhm''@;'; put 'put ''KXtuL1l8I0o2a0w6VEgwPFpvNDI8M0g0Xk5xP0E3b3Ivbihzb1soWCwmJl89VzB0aj52c2tyKC9bMip2JlZeVTBrJCFKWXomKzV+bmptajlvYksoXUhiWCNGZVtKWWhxdylEWjZlOCFKTHBwQl55YlQ5YyIiYTtgIXl9OlN0S3czST07ZzhEK0hwJHRueG9QXiRhM15HRTBhInA/JTBJTlt4dGNw''@;'; put 'put ''LjcxUFBQb29eWU9tTUM0aV4jXndwa1tOZ1M0VE5EQ3htYDd2NUpYJkEpI1VkbEAsR2FZVFlbZTY5fnBXZmVLaXQhOSpLQk1IRnFvY3FmIlZ4VSQ0fnloR28rb2ciLlIzSnB2akh2RiJyMGowJUBnbG0zRihqKn5raVp6Vk1+O2ZPRWooQHUpQnwvNlF9TlZsYCUpY0xpZGk2ckF4Y0xKNnBQZSEw''@;'; put 'put ''KGR7InRjO09gcis9KE5tKVlKcypgJUs9TT1oNVdLdzB0akpqdSRtLEtaVEk0N2N3W2ghYE53ejRvbjpPSG1MWiFjS1VQNmA/fk5wP0kiSjZyUnBDZU5POi9nMF1RRklFU2BiSE10MUZlOH10ej9TLy5tdVFjfkEsdW5fVk9zN3ddfEJBLCxdLkU6a0EyLDoxWFdaUl4mfXF6NVBOMnojSFpTbD5a''@;'; put 'put ''ZSwvfDJUXV9zUGB1eU1NMDgqRVMqJHhMc0FPJGtvM1s1dz4zTT9FMF1OVUJJPXA9diZUXkthSmdrMHBhVUA7dTQvW045ci90QSVnTTg5JElKZXp2JFZXeDRMMilmVF5fTjRxaTpiWj53NkpDclspIXsrVWUiMHtOSjF4d1JebVlebD9UO18/bWgxL3o5TCFUXjM7dT9bVjZqKTJvdj9HNDBvY0Zj''@;'; put 'put ''Pms6fXx3I1h0MFdlTSR8LjNPWzR0KCo0fXwpI3w+TlhTKTpWNSlXS3cpP1o3SU5KfWBUM15kbThfT2htanxeYkp3eH5SYVVOM28+dzBEYjE0czsmfUxyVjVsOU13XWMxVUImI1g8d0UhNnJuUDd+YWtad3VWLjQ8ISVGe0R2LiJJdzUwQ2hAW3pILHp5Iy9rbGs4MTV4fUJHJkYqd197MytpcXIy''@;'; put 'put ''W2B7dXEmWWlaKDNuJlUuK0Z+WE0sJGBzV2YlTkU/OUtyQDY1OVZhMT8jI3VmQmZsNDYoZ3pJb2FFbEl0IS5gZDlAJEFYTE5VVj9geVZBa0QqbWlza3tbRD8+JXldbDkhJH5wPVdhJEQ5R1t0ZCFwenNIYXJsYjNxSGsre1c7PENjJFdmOi84dlB1QjAyW2c0UUA2X2BZOit3cD4xWTxxWD5mPVlg''@;'; put 'put ''VD5jTyhtcnExODAlcjdddUJTQFU0bz5MZlpYb0BSdHNTP3UqME8hdmdMXWsyT0A+QkNxOkd4dTh+em80VFFQa1Bba0FQOi93MkZvVTpbNlYoSnAvdFA3W3EjdCJLYiFrNGJmMksuOyViYCMwWSxpbWx0cywmM3tyVGhUNiE0JXhJeUtiZS5tKl4yMGc0clgoNEVEPThhSkArU1hCaiQ8VypWJkIw''@;'; put 'put ''dD5GcWYpdWlzQEZCZmhtfnJwY0tvQClecXg1JjghVnhWelB5fFF6Mjt0MENTZUZweFVoaUV6Iygpc0tVY113Jk51N1o1engiQSUzWz1ZdUdLR19RMmJPfjUoLFJqMnVFVmkiNCJFZnJzOSVbUE1gXjdRVll0Mk5IIn1MRjpAMzY5MWxWUltgPEJFM2tSRXgwN2RkMj9yPGtrIzwuVktLYjxZPTg+''@;'; put 'put ''V2lGdHoqITByRzJPUEw7VkIqfitqODM9TzlyfmYlXyRQQmhwYGdAVjxEK3dDe2w8U2dEfDhSNzA5Lm1fZjBRTDNXbWBaXW1xLyVAeyE7ekZRbnNFPGl2LndwOjpFZSk5MTh7eHpSQHE3I25uRkQramN6WiVNcj1HTG9wTUQkfkhKSUxIYkFFMUd3PkI3c3RMd31qbGBvTERleHg2R2t6SFUsMiN8''@;'; put 'put ''eFcwcCYkZD5YVFQkJkdCYkdaZmNENlp8dXxTPC9SSEtUOjRdOkE8YEJHWTV9MXxGfWVGLzMmX0xIRD5KeVtsPS5RUyRva2g/IjQ6ITZ3M3Y9RF8hLzkubyV8eDUuVF04amd+MHJqWW9Mc1NgSmN5Y3d2Y3g2XTpnUEQlWjhpRHpVcnVBUHcvU3R+IUcrUEJ4S0ltIjZDYi82ZEosIzsvMT0vTTde''@;'; put 'put ''dD16I3RTekJDcSs0OyFhcSI8R1g+I1BmSTw3YVFgVFBlUGRTcDtDcSlDRl5STCZ8LyspfFlKQkYwX3Y5R1IpZz5oV1R0Y0YkRmlNRWxdOU5DRWxPT1E1YWkkYEJvaD8xQm1NaH4qTTA7aDhheV1dIjxiIi40Tld+al5ufDg9citQJGRwRWhmXkRROSF0eUlHJHloQzFqTUFDSFRefnNRdFJ0eCtR''@;'; put 'put ''bjh4c19pZzNSJSJ2e3EqNyY1VEM2Z0ddSkQxeE1WSXZVRkswTGxCPEh7L0Z6WF15ZFs7Q0I7VHNlTlkpSzhMZnxHOjJhMmJvc0d6YXpCX2dFSHV0Jj8xUmY0eERjPXdnbjI+NyxsMzB4TWkpUWp+YzR2SCQkU0B3fSFsWCEmT1cuRWZ8fmdKcXZJST5rNGF3YG9PfFtlZFVHbWIkVHhjazgmN1pt''@;'; put 'put ''Si8qPmRmO0lHUipZMjVhWzldfG4jXW1DMEoiSmRCTmZsYiU+ZiZmeng9VyIqImZTXXEiYnQ4aWQrXUU0L25Wem1KKWFpY1JAXzM8aHpkUzlNUiJveDJCe3Q8WVpSP3tKLld5d3cjfHRmaXklfiNiMnE4R0VhTGd4fnhoSDJ0M3wlOykmMnQ+QThXLlRRbClxPXlsMldNRzxyTnBMezVLfDFlSHNJ''@;'; put 'put ''UWNGJUJQfVF6UjpFZigwVkBfR3NLZVIpS0p6LzIvV3FTb0wlYlh3Y35jVXB6P2RBQzUlJHBsVDgwKDVIT05aRDlvfDw9MUd1S2A2TyFmRT07UlM1UyZ7P1soSTMhZSRbJUY0KlRtRj9NP0ElKCMsKGF+eCJ8P2lxVHFvL05gPW9WRVAzV3J3ckRlejM5N29NSExTanFLYjkhP2pISFpTTV1FMmA5''@;'; put 'put ''ajYxXyo2NjRqUVlIbWRpcC8yWF56NHtPLk5+PS9URVNzM2V+Z3ZBZTwhL11beHE2ZDhCK3FdbVIqb206JnxEN0N+N2BzbmsxKGN0LFdRPTE1a1NeN2NnT0U1Wjk5UVpXaHlPNSJgdWFBSylPKzFockRIS25xKSVrTFJjSDV4TEMmUEg3RzhPQCReL1tnUmJYOzxLZUIyVXJ7JU8lWjVqXzMkeDI8''@;'; put 'put ''UWV8WDJzJjR3W0kuKmJfMGkhQSs3eSNIL1tlQj09YElSR3Q6RHdzWG94KWRrLEwwfTR+emdFbnxNVE12c0U5NlV6dzNpYThRX0VmKHg4TCNoZk8uTk9+PUt1fFo5ZWQ7S29QQHRMSFFJUkokOz5NRGF7Rkk3XmI9b1coND8rbS56ciF1Vko2InFoJFhZLktZfjd4UzZ4TTN7W15HaWxLYEJbWGIy''@;'; put 'put ''Ty5bSDcjLllCaDckdz9NMVVHVnc2bDJ2YU51eVtuXXAwJGhwKEB+MnE2SEEzJCx3eFckSCk9c1MrUTwpJmk1eUg0YVhaP0dCWTtWPGBFKlE3NGVPTWF0aSx6Zl4mOmxdQjlpc2ZAe3o0eDNWR3xnWVNyJTpOIUFlPWp1ay48fDUzNzM3M0MieVtrcldva0xgWFNVQFVRYmFoXXl+bn1LNGJHLE9x''@;'; put 'put ''TG9bQmk1P1c1W1RgfUNRTGpoazw9czpgXykvRmhCd09EWlVSQmAudDpTeHU7JUAiNGxdV3VGYl0jLz92d0Q6cXlmXSZUe31CezhCOT9xdFlTKGJXMVRaKV1WXjFLRzUpQGBERGw0MzF+Kmd5MHZmcnQ9TStVVk8+KkZpc1BjP2sqYXF+JC5HIz9VTTNGWzhbYnNnd1gzJCtSL2teZFJWUEt1fDx5''@;'; put 'put ''S2pFKjxucFJ3YnNUMzNrRDJAUWJGJWovXiJ0Unh3cVhmMzElQFFIb1tbMnwrJWlNWGdrZmJRRndtZVtmcChUMks0N0ZNfkZhLn5gdENJaz5tRFZARkdFPVI2KzEvaEEiPVZ1Jm42dlFVWkZXSHBfeC5eU2J8X3QyczhJcmBfK08jZU1xTyUkZEBfdW07PlNUY2U9WERxUj9xW3FJMExgQlY4WT9R''@;'; put 'put ''LjNzd25FZVFpP2ZsOChiX2ZdI354bWtdNVEpLC9wOktvdGpnYmhET3kldl9PRWpUQlokZmFufi8pel05U2kvOFkrVSQ5WCQlfWl6enI1SlhwPkh2OT1+ZT86fDMseWo/LzlWIT5wNDVrWWhwUShVaTdROClObl9GQTM5d1VHfCZ3OE9rKnpdZyI5UyhfJEJnQXAuQzVtSF9UUDZSdGkwSm9yUXY1''@;'; put 'put ''LCYzV3NEKiFQb0pVNmtYcWd2MUw4UFJlZF1eVFAqKTk1LDJGVXxRYy5VQDp6fkZyXlBARHJQSCozJG9vSGhMWUs9NjUxKkIrMjk6YmJxSEpvVzhhM2k1fHdCaWFTZlpuOFYwSX5ANjBALm9VPW5NWyhNV0ozdSEqXm0odnpec3gldVEmJihdZUV+OlVJW2xkSUNaeC58SEJhOSI7ZHlzcGw8YERh''@;'; put 'put ''Z0NHfSlgWXk8dGIiPnBmL2lhbjVxWHtiYnlmQ0F2MCs3PUViYjAqSytwRXclYExXPS5CWl5VOmFHYjwqNX1Da15ONktCfEx4N0lHeGRwJmswRnBdMyR7U2x0bG59M0ZlKmIhfSI1W21ySVcoUn5mKiRWbCFwZTxaVHg0N306LGUoQihBMGhdeiJQXX5Aa0ptLlBDKXgsMCZkb05RYD16MXZuXTYp''@;'; put 'put ''V3oofXN2JjQpdXhkL0Z4aWk7QikwW2V4R2NjWDMkWyJDSXRGTXQkLig9bzwhXjchJkhybmlmO11MMnF6U0Z7elB9MClmUDNFPVZAczs5VU9tMW9RPE1GeGhten5wXnFgYXJtbVY1KH5gXjk7KWBqUmpyWDBITzc9aF8xWlJJOF19PihMYFduNCp7aVNuVXUyYTFubjgyQERKIWVbR1ZvQyJKOlpq''@;'; put 'put ''OlEqSld1X1d4cyxkNkBod2Z8RjE3bFRYQnQ7bzpDUn58SWY9KU8lfCFmNm8lTUZPeUM/IXx0KGQieXFbdlNuKm02R3Fyak5ELiZ6P0pMU05CJkowTFApPmc0Ny9IbmdwPF0iMnpTR25wd2pFelVDaXdAPCQxNz1rZ0JiSHZ7Q2xlTFdDYDoza3J9M3dXZFJLb3lvWmNwYUE2S0dkKlhUYC90bHgu''@;'; put 'put ''ZyxgKF5vSWQpIyokKV1LWDksbTZpektFO11YRChVNU8+M19GWXZxNiQoO0hPblBQYWFAL2ExcjlrPjg8OVgxY0huWnRhZ0spZFRTaiwvInxFOkpERDZXanl9fSI8ayo3JlVhX0NxX0BHfC5gWGNJfSgyNSpzaCxZY1NyK3Zxa1p9VHwuMDtYdjU3bCwrLmtKWS4lYCZSLEo8YDY0M2pZeS8qKipF''@;'; put 'put ''dl87OTQ3UV5mOHd3JVc5VSsxPTs+ZFl3W0BOMFZtTD9sMSs4LHpuNGM5fTQwa3d6bVteV0clSkRYdnpefTJzdCs1XlVqS1RKMTNVc2lnNkF5JGlAIygmclQ6KiRyVW1DUnt8eDM0VFFRNDtVVF1xel4+QXlXKipNLHt9WiNXeHo9b1paNUJNPlBbY0t1anYkV3t2dmF7Ziw9eWdtTVlOJXB8IUhe''@;'; put 'put ''RyhwKltsODZdK2VMJWZuK0NdJDl3Il1NNDN4c2VSZm1BU2cwJilGbnpFKGQkPjllIWA2YG9hVz4kMzFXOWxIXVZCQVNzK1I9eDpEbyMyWmp2X1htcSFxU1VGMVZ9Pz9UaVZUJm1kJWRJPyM8fj85bEZhZj8iNV15T3MkWHlRPngwOlNHdUc8UkxHMEhKfXtgTUNPPF94KG5IU3RzSW1LflYzIT14''@;'; put 'put ''ZSo8dXpFK0ZqQzg0OUY4QX1lLjZsQ3tqQndXR15+PzB6d09dLlguNjNVXjBHbmpQJj1nbmxDWWg9PkZFQWZSfX4iSCVbRFk3TnNeaU8hWEdYZXc4MTtKfUMubEFxamBHJXd8fC9XNnY8Yj9Ve0ZXT3xuR3B3WEJkZ0puP2laPVs/OXxja2tXKUxKZ3lLbUhoKH47ZSRZPHFUZmBscUdrV0I4R0Jf''@;'; put 'put ''ITl3PEN7cV8/ZS5iTjJTXW55OyV9ZzZ2UjBEdXlfcXlqRG9lVTI6Yj84JCk4Q1UyZWFycmdETkhZeD5oJnVuaWZeTW9QUmpZXno/TEpBWCxhc289VUN4I1ZYUSZ1eDx5P05BUCFvYmFvPFcrIzN3MktBN0E6a1lZSjVlbEIoWHldSEs3UGZ6XWglbSxUWGJRdTZOaCwrMiF0aEZkMSx3cigqSl5g''@;'; put 'put ''MzxSMVJMP3NCIz8oVy96dDpFYEohM28ja3YyU3R7SU47TzpDM2RWMzJgWHJCL25rJTJUd3tAaVMoOEc/LlRCY2p6QnZRTmVya3VNWVdTV210dz94TWQ5dlZPXWhtTXcjbFsjWCIoPyhkJF5vOiVVVld1TD5vKFhXYjhsJHk+LjQxc2YjUFpYJVRnZT4oImpldDEsNzY0fmtPWX4/SG9XYWZIako1''@;'; put 'put ''aU85cn55bTJsLitafWg1eS5DcVhdK2FPTzNIVGAhIzUwS0ZlZG1pIWc8MGwhIjs8P2ZbIWBOTjZQeHU7UCo/algjVEUxeHRDcU15aWZhalhXQDQ3TlBZKmJTUDxvUyhqUmhpJTs+fGw1JDZVUzt9biFQenwiXiRwM1hGczREZnp3ZygxQ0MhP3YlUXNzYG84R2dPfjg9ZVNlVGY+cmdVe0E6QDJ4''@;'; put 'put ''VDtkZCZAemB4bzw/Ij5xeCR4WX5CYXNdWSYzdmEieVYjIyQ7SyV5ZTEibTJOUmlUbFA9cmU9Ikp3OGM7M3B+emhfP2tsMkBRazlNOGZnUytWXUthOjApc2FyJSk8PlpeWTFxUnFbbnR1aWtzeTd+RiE6L0xLRk5AOVFfOi9oRl01cmpZdSgvLyskOFk4bW4iU3s3W3VQTzlZOiVVbG1vOmM0MGVX''@;'; put 'put ''X3IjV25BWlYxLHRFS2N2ZTslRkd8ezBeQjpCP0lLUGBIMk02PEBsVkshM2VOOj1yJE5EVSQ4KVtnVSRyTF1keW5zWUtJT3tXbTY1SlhwPGR0OjMuclRsM30/UnssM1tpbS92RjYsZ2VVfWh6c31OTS9hTihdNVFiYCspZm5IVHBdN3ohLyJ2SSxtdyM9aFBCJllgWilHMzYrXT5JQ0whKD5vfWI5''@;'; put 'put ''UCJlQCUjZihFLiE+fjJaeG57NmovaWlkZDB4P0lAezpsSU9vQ2pOQzpVfSo4SSNPaD0xRSxTQWRudz9gLislNll3RnsvW35vdHl9cWVeYXxIODF7MD4xbiYzQVI8K1NrUXckcjxwU1BYSy49JjBWUSRNQDdlQH4lcyR2UDw+Rk9tYktDQVslV2dpRGlIb1RzRkUsNmdMcVZkOV1kQStze1FXZGck''@;'; put 'put ''aDBlXz5Xdi5mQl88VV1eamM2eWg+YmVARFY1IUdZUEpnPC5DQldwYW1Td0hUQVsoNzdKfEghXiohJHtrUX1mZCZBZkU1fWxZanVRO3ciSFZAaCElVkc/WzBYXVJVcnR0InszZUtAYHhiZXB8KnEwQ289TTlqW0NnbE97Tj59UjJrVD8xViNefilOYXZqR2AoYEA6WipoZylqMlM1UzwrKXsiclcj''@;'; put 'put ''Snc1NCIvanxeKnkoUX5FSylUO0dtbzUwcSpfNXsub3R3WD1menMyW3lzRjY2MzJDc0pqI2tQeSFUQGYhOykobH1rYS4mPUxGU3prYksqeTZHZEF5MzdlMERGOHF2IV89dlJjWTdiSltTZEBdT1lRN2B6XjE5ZEt6MmxhJCNvRls7ZiJ4cVkidzg1W3NxYlV4SUhqbTFOcGsqdXRxIXo9Zz5UYXEw''@;'; put 'put ''ITo4X2E6Rm9xNEVaVHtuMGRRNn5+TllfPVhNXV88cXZKdG4+djRsWDZdKHpOTlVQS1pJbXZmdDdmPHx4OkN+NSUoYmpOenVUYS5gW2YoVTMsKiE8ejpJTH5sXUYjWyVDMzpINWpdX219d1JsVDN8bDtTK0Zmang4cXFHKll5RHNjIWdEbyJFaHlVXlMmTH0hMDRTVjM8cnpUYzdCWD1bfV15K2RI''@;'; put 'put ''cCk1Py5ySz4qVH1rM2BQY0AsJmtGM1cwKn5hT1R6NW5kJVZYPWVDcXglYGEvPSleZTNyRDBnbCZEV0U0XlRCbWBJJHwyVVgyTWVhRCNqL010KCRSSGJ6aX0pRzZqaHwmczhFSCQ4cGZLKkc0dDoiUVYqVHkrRGgpa1FQfHt1KVplPzAlTT5SPmdAR2t5fUtJejZ0U3chPjJVYUopY3BFUDVpKUld''@;'; put 'put ''U1g2Qnh3Ny8rQCRoNyxeTlN7Y0pDQllQfFFhVl4lOCl+JXBnWXFETHx0OXFTMW90VClpQXkmJU9pen0ybylGUU5dYzFoN0JVbVt7JmpxQ0VmY1FyLmpSVjBYZDlYT3NpLFM2LGZOSDJiPEZJUEtXMV8+anV3NmdaPkdRKEovKFBuLlopbSpwfFJFNyEwUDpCZ2AvP3l4PEM6PillNDVmL0slbTA+''@;'; put 'put ''JH56MixhZ3hYKll+Ijxae0BNbndRNS4wb3dRMlFda3c4U01kezBja0I4Wm91Tjl+cz9fIjkkSzpFQlprJml2eE1FX2pTW2thT0cwNj5qQC9VW3ZFVzw7JkZ6R3Q7Z2o1KCtAUW5uKHAsYCQlL3k7R3Z+Zi8qRygvaiFmaXwwPUsianRnZnY7MThyRCspNixdWzc/TkQsRGpSNWZmdEYrR3FyX0wi''@;'; put 'put ''bmtTWUQlPG99ZHEyXVo5UCt7NSx0ZU4yaUZES2JZVzMiUilhfmxDLGdNJW9tb1teSGgwbClFPDtMOE4ocSlXKWp1aUNFb1MzOCFePW58RztqUVY2TmtpRit7cTIrdUc1PlN+d2ZGImdTM3RLKDRwNHcidE94XmBRMWNAdjAla25iUHBMfGRLfXwqfHJSc1BTYHY3cmRfUH4oQXJRfE5YdXgjUj98''@;'; put 'put ''a2Q8UitJblRid3kmalh2a0EoL2xCaT1EWGoyd3lMalk0dV1WP1BlLkM6dH1sWn5POzl0ajVhWXZKYCRwY0pZam1gOlJDbFJpelgxPWVocSJoI1pDOW9wO0Y3NndWPEZ0Ln1BUEBuY0hfeVE2d14scDZZPEBOL3UwfTpyYilbV1h4eT1sOk83RFFAa2xXSVM1RGBCN2xgcCZWbW1LYVUrNiIzNHlh''@;'; put 'put ''R2B9TUxieE5VVk1yPTlRIyUpQiM0bWAib2JBIihTZT1rejhBIilHbTlXczJJODF1cCxAREVOPDJpSllbX0EzPWRlP0NganFFW0U4W2UrXz03KFUoc0VjemJ7bWdqfUB1en5QTHlXQDBWXkolYHw0PiRfcihJVXZKXSo9Uzp9a3xXKDAwdHw3Rlc+cz05c3dIYEFHIko5dkhVT0g1T1o7KGsodTFC''@;'; put 'put ''UHo0Qll5WDZBXStsNF9LXzArXzNgcT5gJTxZRWxCWSpnN2dwN0puJSg5PUY7YnlTLm0yeTllR1F5K3hDO0hqWms3TmpXJE1OWmBYdmZXTzd2dnd2VXNEO2JKR0x7KEk1bXdCaVNqQGU3MEghOHdJbjpqMUMhOyYleV9UQVNNa3c4ZXcvUjAyTnBOemlTYUo9c0NNen1YMzUlRHt3L193NklKPmpw''@;'; put 'put ''MkVJI1p3N1g/Zk8qOmAlJFZHPEB0NnpuckNoQHJsRlticndJQD9kTXpVemc6Xz1yW050bXFFYy80cXk6OHpqY2JSZUJfdWA5OnNKQD8xKkw5PU80fDomSHomZ35WUCg1OlBrPjtXZXZqcnxBUzciOmhjVWgzOCFDK1hMJlkiTyhbYXN2NXZZNFNaNiMjZkU8a2h2SE5rLkN1dzNsYztncCtvNykv''@;'; put 'put ''Ny5USVM9S0dwLEFTK3ljcGYhQ01NcG0qakBTUnQlNCRDM2QjVVpnfkl9TypwUCpWXkZoPGJfVitxZ18uUTxJN3pZRDtBRz5hXX1obU4oMSVSNTpXPlJEc0A4Rlc/cGImT3lqTTA+T3cmRHk3V3AsNTV9RzFqZ0xjfjp7dzsyclJBV1MkWGp2UEhZOCJoZnFdL2AxZH0hLls3fHcjLlRGYjdFfSgy''@;'; put 'put ''eisiK2FAZUdvUHFCd0tHVypvZlcuTHErQmFCcTU0Ok81LypveihqLG9xVUNae157KD96NVklOEpGQDhXUnJmbjl2MnhYZ0sueF0rZHY7QUQ7OzF0YVZVOWAuazRfIVg+TmFAZTBuSTtUej4+ZjtQKSxAVGt1Szt4a3J5ZzZIUy5GQ1ZUKFVhcCpgciJYXjBIWl1nJkJQaTcpMW8qWF1RKn05RGs6''@;'; put 'put ''JiYwezd6KUQ7bjkyIlZ5Sm5WLHJPZnZgLyFOeGY7SS5ucjBPRmN1PHxSOGhNXTlDcGYlUVQ7JDdJdklMW1d+KjxmTiUkS3wzI3ZdaU9+cG4sLj87XTFEbypNLCt5aTwoWG5JUE1SeXJuWkBPXVk+IlZ2XTVKJkUkVFVPS1BgNUZBNjZ0e2xkSHZ4dHokeltRdlFMO1E7QTZeZUJMS216KldLLyVE''@;'; put 'put ''WTw/TmpZayVlOWc2VW1DVmt1aCV+VylVWHooajcxYGdXMCs0ajN8fS5mOmx3eEdIK05NVTlSQ0YyIjQpT1RFbyRIKkkpdmp+S1NIQ2xgN141Q2s6ZHNXOCZtUX5JbjhlQ2I+JC82P05PLihQVyFrOFBsViFvPVVyKkVrXzxiSGM3LjxTak5zXm46dFY8ckkoRV14SUU/U2okUGQmfHU8ezkydWY7''@;'; put 'put ''e1F5KyN2YkxRKHVlOjVkdjhtZER6cylQKkB2dXExNXpXXnBdZjt7a3VnanllenNIYn5MeUU4UD9idkUyaGwiaSNTSlthOHV7e3tydmxyJEg/bFtRMTcrZ0B6KkooXV5QRTBBL3lsUn1jLy9JSitvK0ZCQTVSN34+OmpAYX16ak5VJl1PNi5rbCFrVXkpTmdHWWAlIyFnLGY9eHIqK3EmUlZOM106''@;'; put 'put ''aHROTTJpY3lgbUFbPzlOVnddRF4yU01dNGlZKDZfUWtqT3cvfTM4NVF1YT5nX01qMS9KeStlMCJpIT87ZnlMXzxgL2JddDt7WFIpZTVMMy51Ui43eUJOUXNLPCkza184TWYlQDRiOEZfUyowfWprfXk9dX5OcXcyW3AiYEdFRjdaKVpAO3FubFQ9M3V0Uz5gUGs9NDNgfHYlPkt5MmgyKmtQaW09''@;'; put 'put ''SG1BbGg7SihZelp8YTVtI1hENll6TllCcmp8Njx7XmJERFBdWEYhM3J2d1tqcmUmUHNCdm9CQyVlMClTUSYoLHxRcVE/NF5+VXhgWlpGbkg5PUFMLjhaSnVdZVtpWDEzciRWSXVDQiNeIUtmSnNNUjw8WENeMXF5Ol8wbi4qSz5xQ1d1Y28yeDpiSnR8YEVnMjZeOlchM1F5cH18YnJ+fXRHQCNt''@;'; put 'put ''ZFB8SmZeM3chXWZeUnZvfnVqKVhBTnhmcEIyNjskbXxhW3hlIkhXKloiQFMveF1vcUp7OmBRYHdjUS9yNlIwXnBNLlZjeDU6UVQkYmhGc0dWKCZiSyh0NEgpdDNOQWtnMnc9YWIqSFJ6QHRLOkt4LFRYUjRrUnhXT09oNW5OdThaSiFDO0VLTzxJdmgiOm1xMHQ+VSEmZmQ6fjN6WVpYT3F6djtV''@;'; put 'put ''QW0vRSg1XyE0cVk3LzUvTHthXTltYEZ+YUhLYX19YSR8QGM8QUVDdUBkb3JTPHEwWWFMTWUoQzNpOy4/cUxUOiw/W0JFLG19Tm9gLl1jdDpYJT9GKHchTGlfTFVDVjR8cFpSdT1xMk9aJCRUbnxnOG5xdmRPZFNWd0Q3aU5EUC9dTksxOz1dXjUjam13dSQmQTdRYH5hTTs1OTI6PVI8ViYrQUpk''@;'; put 'put ''ZkxfOFBmaCRIWWxSNyk+O288QzRXLzY7aWI1fTRLNXB3V1FyO3ReWjN9Y3YoQG5aKEdNTXo+Ii5YMEwqZD17eWJwVzU5NXY9JmwsbzA1SXM7anZ9IT1lOmcxT1VEbG8sfnchW3UvX11UMnhSIWhAbXAqPzBAN2JTVClwI1BNUTNETkE/SllLO3p5U2lnWCZhRGIqY017VzA4NWVYNzZqMntyX2JV''@;'; put 'put ''PmV1Wm12Pk5HXjdPOW0hXXpDQHhuUnJIWE94cComZWBWejc0OVtPenk5e2wsLiY8RWI4RSheSV4ybnt6RjhDej55RXohQCJ8PEpOejBRITZ2ej9DOEVpbF56KmJFJj43KTQiZ35xN18yX2wzKDU9MnpsbF9gQFpiemQzZXR9USQmIzd3MH40Nz8zWF05Ll9bJmxtJnM6KnNFRTojKHguX0xmTXNY''@;'; put 'put ''UDR5Sl8mQzR4bDFTJjIuLFl9KDBeVT5sSzl1QFRgZClmNW86WGddLk5oNiQ9fmFCWnlCfH16KCE4JlJkPWozIShXbnJtYCVlIiVhRkJ7ZXRCfGJjYl1bOzErcD1bbE9WOntda30vfElteW1Hb1s6fUtLRSZ8W2xmQndJXixVOnU0X01zbF50eyFlViVeYDJbaTI/bCp7TkxiVDQ/UHByck96TSRy''@;'; put 'put ''anVkc248d0wqdDM+PzswJXRMLGsmfSR1aWNJa0x4MC5RUldsUD03V0VPQDQ2aX5IRnhZdTBmdjI+UG9AKXpoYUckWlpoVU12ZyZhLy4kIjxRZkhid2U7Rio5QjRpak9XcWVfZjlaaE1aUytYSy9nVTQkcyN7STRoNmpbJWlPZWNDVUJ9cSMkQyxERSs3c3glT1oxfGVLWEZjTztPI254MXkzXl9a''@;'; put 'put ''cUFwT15jPUlzSHxKeygsTW5IfnA3WXYpVjdPay50PCp4JkorQ3psSGRaWShqRFJTKzRme1ZGNzI/TigsPG17L05UNnJbPFQwQlZvfCRVO1F0S3p1WHRdUmUqWz1tbERkaHMyXi8zTk1kPzBfOToodWIvKj1gJTpmTDspSl54TTc5djZdOChgQGcpbEBSQ21QTTdgK0RzYkpEMmlfOC8wO2RjUn1i''@;'; put 'put ''S1lvRiFyT0omWzFVSXFnd1J7anNbRDQyWHlUMWdmWyV1N0I1YzpsZkZgNnxIIygxcltFfUg+QFtXJG45NlpjYTVBMCNIIjhVT35TdCE1Q09hX2RGXU0/ZHh4RXIlRzZieF4vM05sPnpYMTw1YnkxekdJSDhVfHshWDshOnlOV3kjdnJrRXtVPiIqPCR9My5ZTmF5U1A/bipoWEhHJis3NUlEMitE''@;'; put 'put ''eEYvcEJsVnQ+I2NaRSRYaEJDdiQyQU1kPD8rLnAhUTQwNXxYWyZ7LmgkWSh1ekBlKyNnJl9heGooN3AqezE1MlYuN0V6UnJxT29NRTBQIWtwK0RXXik4KHRkKCReS1A9bkdaKlV5ZkpkVX5tUnsySkREdX1US2ZfYllRImxOLGZsMF1Bd1lvSmNBP1dbWikiQmomMDFIZGRXdFk+ZCR5Y3sjMUJ0''@;'; put 'put ''NjJMVFBMdixrejw/SyxRZTh5bHtYTGZ2OkY8PHt6WSlYOGwmRkBBZClPLDRhWV86YCVAVilVZFNrL25GfUlUSG9gMSZfLEdTeWJdeC5eUWJtZV5OcHMuPCJ3Vkt6NClzXShOXUZMbERFZjJSWW5nI3w7IkJOJEo5SkRTJkZ5YUwxVXF7b2xbciFjM0BnWWRRZSZAImZbIjEuOm5CeTlSOGEzL3hP''@;'; put 'put ''SDVYbzRQe0ZeXklYXTxpNWpnfG9yNURSbWFaalkkbV1aTnozMVU/MyVSZVE4Xk1Zeix3eUJ5fXU3QGs0Ij5jKURzezBKJGJfVn4xfF1XWCViaVIhOnwlL0VDT20ucU97MCluOSxaZno8e0htR1g+c31NIU4/XytyJltyfmhhajJEdClaQntrUX5WekZUN01jWHN0fHkraFJIUEkuR0ZFKGgkNz1e''@;'; put 'put ''V1s/VVcpKkJLfVhlWVFme05STzZ1VldvfHh0LmZ5USEveWJVd0M6PU9wPnhfcylqQlJvYng0TGk7VG48M3ZIclBSbE9WWH1HeGVaXThLOHUvNVkhK2l3M0Nkem83OjZYWlRecz92NHNhM0Z0aGJ4cGNMQ2hLQj0/NTA1d3NNRm4sRHcjTHxefGxNNTMlLCZ0REZ3aE5VfmFCQj8yOjE1cmM1UTtG''@;'; put 'put ''ZF1pKE4lP2VGOitCTmQjYUt3d1A+L09UITo9M3UuJVlPels8I3tGdGdFSD9iTWhwNTxDeVtJWH1FPWQiIyQ6OihdSTJFZXtXWTNZeHM2X187Zk0hRT9zTyZvYHBDI3FAc2g8dXR5M0s4L2FrTXZOKUtpe15sZD19OGRBUVl8T2Y4TVNgN1BVW0JWalRxKHFReFVPIVtPaXZATGYveE5lNXRVd3ZH''@;'; put 'put ''VENQJSM/dDU4YypZLjgyQn59eUM4WWBXLjIxSHJJclFyWitDXyMpKyk2d09kR3xZK3NwbisiVFVJR29jWVROTT9XNyRYQnpaN25rU0ZrTzVuMlFQYH4kRj5aOmV6VyFDWT9qUk9EejxQe2lfPl5tbVpuclNnNXt7RFc8UHtHVzkrfCxoN1RHMDJ5c0x3fkgmfHkva18ocUMqW1Jxdm1QKntDOT1X''@;'; put 'put ''JEtMN3spOlRUJnZWWilfekpGWzBpeChbYjBEWl5YUDA6cUFkSVBPLyklRiI2W0E4Q0hwInw3a2N4WTFzZmw9e2YqUS9pcWJGMFQjQ0koRE9OWCohYz0vcVB1KCF+aGY2X3E9LmNGSSxyYD5EUCtgVUFpaVApOSw7cUU6VXUiXWYhODpQUnZSOHopNHowYjVlY2hwVnUycUEyUmRsejRJZEVTdU1p''@;'; put 'put ''USkiUT9HSGY6TEN+b0xGWE1HZVFVZTtiPjdfT0NgQzkldyRNMCQ8PTd8N3MxSWtzVjIhQjNzSU9uPG9VVX48I2lnJmJXTisjQU93eFtfQlJ1THJKV0ZffWZsKWxzOF82bSUhP1lFKk81WmQoPENUTlBZLj15VEYiVX0lPkwlfDR1TSt2VTZoSEE2RkhuQlJCJUhvZ2Z5JSliJGt6QSEkc0Y3Rk9q''@;'; put 'put ''UyY9VFI7RyUzbipvUCh2TDdUeUc8X0Q9cDREfXU3MT9XcUR6SGR3SUs2eDgsKlZSYHs/I1NxZS50ZTwreHZHXSw9JCJYN19BMmklP01JIl1qQGV8UmJSQzkzIWNmNCVTc1lJYno8R2tJV2p9MWZOM0QhdVozR0kyTWV4LkVTTldQbSVeOih5SF42YnszSDVTVHZsYjY2Ok1wW2c4YnNhPWdyQV5A''@;'; put 'put ''LjxOeGVyKGU4K24jLD4lYz5QSCM7N2xIUGsiNWE6RGosIy5MRGZnen06SkJKRGhDJU0wMmtEVChsUC5HJDtbY2BmWHdxcFJOOTU+djhgYDw1Y0dPSkhiZnY6akpqTik/NVlpa09zTDt6JkhFMFdESGxFaFldNT4hL1BlRV08UFYuRHdVTnBzO3B6aGN2blo5Kz8/XkhFe3crTzo3fSEjLyQ0JVFE''@;'; put 'put ''KypXK04oVTNVV086T3NyfTI9ejNwTkBOT2FFLEw2I3ElY3dAT0ZnUEJGbVQ1JGFCS007czd1QCVyRShwPm1xJio1eiRCbjxvYUlHSGs+cyM3ZSU+aCZ9WC50YTF5R1Ima3M8T3BeVnw5VnE6an0qfkpDaXpTVGxrOmp6PVBQU049W0gxQ1pAQFc1YC5qTTYwQT8wOSlgKmNgJVFsMWB4KzwzM1tq''@;'; put 'put ''XmFFK2VsMW5ASStzdHxkMipPeUhTIj5jaTJXcXI7ZkM9RVB7Z0UoOlRrfDEzMyRPK3N+djZkRntPbE5qN1F4VnFyeHh4SVE+Znc9dlhxdVVobGBufHBmQ01aIz9vQ3BgTVhPJWMpTkZNR2dGaVdGTVJPTUY/TG0pbHJsK082aUp4bWQ2P24uP28xLjQubF8uaj1IKUdBMTUyPzFvfT0zbnFnbzRO''@;'; put 'put ''TUhdPT0oWkpdUUdpKWs5aE5ENTdHeVc3R0tZWHQoYXVaLlo8fkguInE+dzJKL3ZHLCNAOihtUzJoJUphS3dGRjV+R2Uma3srOUJOJGltMSo2MnoqdEVQXTt3KCxPaTVgJFckOSsoUDNiKUBJQlEiJnphKngyKipaMWFtdis8WG9LNFU4KSsua3NONiI6S0JUaD1JcV9zRF5xLzRyPiE1TllHOSVh''@;'; put 'put ''PTRke2l2WytmN3BhKUZKJGpFN2liT2U8Pk11X0dfT1JlOD1YN2g/MmViUlciIzMxcTtWZXVtPVF8Yn47MFd+OmlZVT9zbUM0MSpPanhkYzVEOUF8RDgrW0J0N35QWSUlZmthbHdUdTQkcjYkfGJIK0UsU1ZXRnREbyZgLyFaUz1NMiVoJVMmQT4/cmJAe2FIVUErS0xvaz1DRGIiJEJ9eyM2VX14''@;'; put 'put ''P1FXOCNQZXwwKiMxLDIpODI0WmZ2XjJ5TSUsVkB1KTZ3IlsmRWsuWnRLYitRV2EubDZyPylVQzsxXkosM0opOmtiMD9DVFhGR1dNQUleO2opPS5kV0lMMWslWjlSIylpaXwhUT9leTUuekMmLlRsZW1ZL2BSMXxPaGx6TyZGJEc3NlByezljUFI2L31HblNGXV9oTEoydUEwY2NZKmhTTC9XdF9F''@;'; put 'put ''OEM+Kz8ka15bTm88dkRWbHRZMU0/SmkhOWNwMzBwOFhSY0o1Z2hJeWsyMShlI3V7JUh7ZWMhfV1IdWszeVZRJUVVYXlqMk02Lj5LdTReS11jU0tsUGIwPDY6dlZmTXJ4YUIjSHp1XyV0MEc9Q3FVbkhkfT89LCVmL1hoP0pRRiRXIlV5XU8lSFlrPil6cDBNYHFWLjUuQH5KdD5rZTMxd3Y8fTs3''@;'; put 'put ''el8wcV1UWUc4XTxKNFcvZUEpd3M+JF58d1ZSNlAofUN2LChITXlNaS5WKk9GLkxaMk0ke1FPYDJgSWNyQDxXN0w/dEFmYTdoSW92Z1c+c157WyQ9L35HIUBsUkI3LG1FY21LO3RsYjlkQ1luY35qeE8qVDxHS1F9VGRxK2pRInFbbHQ2L0pXc1VjLCN+QSo4UkMqSEp0ITdgXUkobXVXNEU0WiNl''@;'; put 'put ''d21zPmlEcT9DSl91eSpwPG1mYkBQNis9M3ZLbVEvakl+TDh2LzlycFN6WntxbDwyOEVnJSg1fTE8b0ZmJkxLRUIzYG42TThqOmB2OGRlUllGOSVTTXdhMGZbM2VSeWNnSlkjTF9TN1IzSU5dOUwsVn5eVUBzfCNkOyk2SSk1JnFUSyZkQ0QlfTlhL1lEQDF5QWopR2dGPyM5NG9JZCFKQ2AhaWxw''@;'; put 'put ''KStjVV1zX1tvN2BeMmx0Zy5BSSF+LiN+UExuQytoTUEqWikpWEIvQF9xeig/KnVvP19SOTJvNHtqfW0iTzVhdyorTTREfk5MJDFjIntOYHdfVlo9VHIqdFA6eF4mbmRwOn00fkhgYTZdKkpLPiZJNlp+JklhX0lueFpoc0omKGttXzBNSjRkO0VVcE05cn5ZWFVha0RsKT9CVGsiUmYwfGgkbCZV''@;'; put 'put ''e0pyPHAyaFkuSzptK0xeYUFnY0hqWU9jV3hRJjlqaCJdOV9DNE9iPDkpM3FNOE06RG9mXyRmL0g1SCJbX2pCbUlVJkpsUVdNUDEsZHZnKll9TEhJbVFtTUFSTD5zRDdYW29WW01UNkhVWl9MfkJ5X0gjezldfVlbLDNvYGFVdzUzIXV9fiNSNzhpaERxeXEoTlt5PSNVdjpiJFVJK2FhcXZHeGV3''@;'; put 'put ''Y0I5Wj9FV0d7fkM9KS49VGl2fDZYJGtmcz1FVHF9ZGBNYzQ5Tn1lMD1xT1pgbHg/OTc6R0J1Iyl9PClmJE9ZMFBscCtkcllDc0Z8L041QWo2LjJed1M4W1RjR05bbVFbejZjXj1CeWxhQz9oT31JPFtfejJTMCNha2xJP0wrMUJgLDckM1p0S3pvPiw4IjN3O0dVTE8xXkZPd3g4L2ssJkVkPCxI''@;'; put 'put ''Wks5WVVkYGkqSmRpO0lyTFI1cHVoTlsqWGBYNVo+NWg2NFUsbyVKLntfRGdQbHhpRmVSKkRodC9YPl1oKWRBJno5MzMuaFZvRHtuRnlrNXkuNCYvYixIQzBIQFVGXXEpcX0xPSp7IlNlLFJiMHk8OE15Z313TFgseWdffDd8JGxFM1tsXSo3N0V0KkVNSG1fQkI3Yj9gSjppWit1TlA5cW1hSFZ9''@;'; put 'put ''Q05oW3d3c1VJWSsoJVooVXgxJWlhXXQ4VlNMMl86eUBvNz9rSExWbiw+cFhZbTRGV25UOlFkNWV7T0NSQlNDbDRnX3p5SzE6L1BfcXVfJSg3PFBpW149Pj1bPWFTTz0zfWovcVUlK2ovREpOdGYmU2ZzK3IvR0RJYUJHPG8uSXV7REt4M1BpSz8kRXhyNz9idC4sOTpES3ZgTkIhWyFeenEqI0tV''@;'; put 'put ''YWdnOlU4SGNjTmlXKzlLPkF6JX5IV2krfnVAWyJtMjRNQmFwPWh+dDtOc185TyF4UUNlMzZVJFRCQ3tAOlBEdHtkeUNPTEkyd3xyTWY9ZmRbRGNDQHZAI1tvc15XSkh7Ijs/YzROZWRiaHphUl4oJS9UTHR9SEImWHNve3Jgb1FWfGNOZnkvSGB6PHZxQ35EYztMUG5pKFdPU1t8ckFjTzZ1KiZA''@;'; put 'put ''YXhkQFQ7W3tUR2JKLFQpcXpMKFVKJHJUYHkoW1V1ITlNJFNDeEhFXVhITXpGfC5QNj90S1k/YzZtXUU4fHopK3ckZF03YH4vVzAldnhFVGBiUmE5c249IzQzc0FHMC5TVlMiajF7RjwsJEpOOGV1MTB0aFkscEwjTTdyYE80Kik4IzApW1Z5S3ZpKEJ6aDApfUYmY3c8LGA5KzxwRTk8bnQ9LCI0''@;'; put 'put ''LDNYVk9DRFNucDshbUxXaUcqMWcmbUgoZHdnVzlbXS87fEpqc09LWU5fV0xRLm1+P2ZtXlJMSHJ5SEwsSzlGdD4rNDB8SERtM2lePitjMGl3XkxbclhSbH4wWypXUTsjWyNoQlBybno4ckM7c2lxTk1zS3QhfD5pWVghMHRVKDh2bCtiJmMpPjpLb2hBJDE1I3N9ayhmKShKd3twdT97N3kwOmBw''@;'; put 'put ''aGhbYWk/Mk9RSk14NFF4e1Q8SlEzfjFDOTdyJEdzaTI0InxzO2hvZWQle3YkUzJqX3ZLNmJfbXJLQT9rMj5zbzI/Rnk+T3w2MVBuVGlTQV18SUpgbjE4WU05JHUjKF00Vk07V11aOn47PUYwOXA/YURnOyJWd2F0bSRSITxXfCs+LzJxKUtsWXQ8TW1oMVs6ODVwSzw/fndqMyFDWmYpI01STk1u''@;'; put 'put ''e35lS0lrdFddJG5VdVNIeEU5ey9xNChEPkY3dnp4fE0lfFMhciwxJjokRD9YciJkL3Ymb0JuTjBVayZNdnNufXQheiRlSDNxNT84KFdob3plI2opOXguTjFoITxIUkpvbFIpLGZFLldDZGU5WnZDRzU4dS4kS0xSNTwldmVIdnhGNSFaNF5rK3AheUhnKWMmTmBwI014a2deU1J3S2VoTmdNYW1h''@;'; put 'put ''ZnArYi5FcjV7d2V2W0NLIiRzPE8+YjVJOCZ7QiFweCpML2VLJiFmKi9KeCspWVdRPUl7I3c/TlJ7S1t1YDUoSzY4RSFROiN4V3pifjo/PyNLb3UwV00lRCRyPEFTeCw3em1qLktlZGVlJTNSOk4scy9MfT9JUjFySiFnPjN1MFs1Vy5TOUxhbnZEWn5+JCZCQitHSkRwelswYz5FUihee3doPyYj''@;'; put 'put ''cEU3WzZAeEtscytuL0h8bEF1Zy9WWDM4VH0yTilQMnMmVm5ffDBESH1vRDM7OUkhb3xTbHJJZXBvS19De0NAUy9QdGVdKzc/LzdXcU1vVkdWSU5WdEtyN200ZjhvJlFOZiRdMjNrfiQxJUJtMj1mYzg9d2BFcCp3P1Q7UGJ7Rz1zdDVKOzYpUj9neVgpQHZ2c2hdamc+eV9aPkE7Pk5AJDpSNjR0''@;'; put 'put ''ZTs8R09tdnNGODZ0WmNwTXYuYj4rb2JoUldQJFZqbT9jWWh8cFIwVHs3aUkyMGJSMjsxcEU+THZPISRQLGN5cTNzbXRsazw4OyR6YnpnfmRlUjttI09EfEYvLGNHfXwyZ09XVlh+ZCEidjUwOUBwKkkxdTVQQ2dhQiRzMVdEL2JadHB2QEFQZ2VQejNodFA1YDdNYlNPbElHOyllYXNKcmUvQ3lZ''@;'; put 'put ''enh+MDc2NUp+Z0V6PHhXeWdwV1A0KSMuTTViaUssOFVxRzJnUnAsU2hReD53PVY1LEYjNCI6XnpAa2lMQ242dTYjZjFBO3d0azM2XnpwYjN+dFtYa2g9bzNLMGhrNzN1SjVQeWFpbkxadE5eMjBqY20/SmJpOEkoL0F4O3xtXUFKek8+Q0QjSyo6djxgZFRpMWJHcXoyZXhORzB6YitkPmUlaDRf''@;'; put 'put ''SDNlI1M+ZXRLKykiaFRPNisqbEtkMVUjZDE8S3hvbW1kMmR0WXlVKW8mRHdxOTE5Yzt7JGZneFR5c1tzeDk1UGs3RjRtZEQ/VWFnTSwhSV5JSD9PcDEyakdvNS5YM2JnZFNnMC8oa0FjeTJzQyJgczpWfVtxWUhqcz5pMmQjMWlubEZzekVTU3AxXXtIMF17eypGRXhzRlNvKSxRbD5bX2R+KEwp''@;'; put 'put ''V1RgRl1hdDBbR09+eVNRPFZyTWN2YndjJDJae2tfJmpXK2AiQX12R3BaMS9rM1tFZXtOIzE4fTRgaj9LN1h+VlhWNXkxPmJraEBvcnpARX5SLFhzSnlkIU5DQUI0cCxBVyM8NndMTHVLUit1WUBhVWJbdy9MTiooTFQ/NjhYO3xuPmE4UXNJMjR9fTl4OFkrY0QxVk1fXjkjUlBKZGY0d28/NnA/''@;'; put 'put ''Iy41ZkJ9dlNKc05pOn5FbGNJXzZwYiZHckxnO0lyV293VW99S1FKRVopSiFVZGhbZlZJOklnQ1JRKlZPZ3dWeyt5Uyw3K0YoQkViX3gieF5CRFBhdGpAMzl4dmJPKDllQlpEIjxtfmhhWWcqejNacGUzXj4mKTwqOlNdQF80RUtbO3ArSk80cVA6WWJVcil2YXFkXjpRIjIzSz1wbTNkeUd6K29C''@;'; put 'put ''bStqUyIvS2RtVDFZJjIkZzpbbTssLDx2ekVJMnEhPXQ4SzBMNE5NVDN9MjEjN1lEUWFxJXU7LyxufiRsYnpIIUlaI0crfk1BPmAwV1BYM1g6RkZiXV4zPX5BWnNWbyVYWypISz0rZGNZUU5NTntMTmlofVlESz0yQEFbL35QISZZZXEpZjZ0Tnt6QHcmZSJ3SSkvY1pzakN5ZiNOTn1mRHJuYFY8''@;'; put 'put ''UX0+UCIoTHsyVWdGfjJQLkcrRXF8YXhAcUg1NDA9XyVXdStkV3AuZXZQTSFyOWJ1cS9VYSNZJFZwbkswX1EwZUNrQ1h2cyYiYH58R0BnSG5jciR2LCxvbEVXWHZRPVJTdnU8KCpRR0ciJntTU0IkdkJ8OVgvfV94VXwye2tkMEtGQE86IT5LL2REMWAvdjtxLjFfREI+ejo0d15QUi56TUtJSmkp''@;'; put 'put ''NTVKLHpKTld8aiIwNyRDOC9tVCMpU2NNayV8blp1XiJ1dHBiOFZZOWxtb0R0czpZZn4rIkMhP30+ZFtYanFhaUcjPTY3eGUiP15paj5RTVkyYk1wIzV3Ukg5W2kuWTF3LEhNMnA/ej9pNl1dXiUzVl9BJDQrZUIkX35BXl9vbDJ2Um8yN1pWdyZ9MSlfVFM0bkxsP357LzhbdCJYUjQ1QXZlZG9M''@;'; put 'put ''WzRQR2I3PVJTMmxVQ0d8IllwfGtLT2VQXjVWJmd2KDUlKylhJk1RczJweDpkcSklYHRRPUdsWCl1aDcyXVAwQV1sVmxaci8mNWVwcDA6W21pcHtZbjhmVGBQfW9KNyx9YkJGP3EsbUlCLlV9QFMjMmVjaUQwPnB3fXIpOmMlTGJ9IylVUFIpZDhecXY3N116KGoqYl1Kdmorcl9WZkhyRUN8S1M5''@;'; put 'put ''bmBYVCkuIUV1blRaTnJhbXFgViJwXWgmMjVZO1FxWno7OF9PRG1UY2ZUY2ZsXjM1JnhVSzw7flp5LzpEU1YsciVrVTttR0p2VTY3NzhrJlMqQEl2T2UvVnQ4fDM0OE1lSFhLZllfb3EpMlNhJC5uamtWZGN+N0k7a1AwVi8uZyQ4KiFIcjw4PmhKNGpuPUFCaXR1aWNTUixXfktoZm9kI0BNR30m''@;'; put 'put ''YkFYaD9dQF5UX1R9JDZhcSpoM20uXmh5WzslZmkuTjl9OVsiYEtAbHtiRU4sJTBxMjNmZjQ1MSM+LkA6ZnI+dSxvKz8xU1J+bXxSb3N6bXwva2lxfDRuZUg4NGd2VVsiITtmOH5UJnRWO1EqQj9iSU8hW0VpOE1UJSE4RmlOO3I6SE5CZ2M8Kk18RExzQmJuMGpRcj9BK0RKKEpCS2Zve09BI2xY''@;'; put 'put ''ajlfSXNkIjByNVNBbH1jNDNnUlM3XnBeYlZpJDdkInBGM3lRIyRMNGBkV05GXWFPSzwwQG4xKlhDKEE4YFlKTVFkKzBAWFhzPCMzSURlZ2N3RHo1Xip7dERdQ2E+KUhhfl12QlBwPHF0UCxsVyxOUjxabUVjMWxfZ1Q1XTRNaXhXJENAeipnfWtnKldGLEA7cjV7RiVAInZEcWFjZkc3QSI9bW9x''@;'; put 'put ''Znx5YVNoOy9EI21dWzhkPVFvJjhSZSNfQ1BpNXpFT1JDUyRqJWtVbCtvdnpYJWRJbUshMXhCMlh0PFldd2VsMD0jQjx5Zks0bjdlQFojeEVCfVI2NmY1NHNnaSokTn0uOVE0cGg8WzFMNW51fkJ2WDFhQDRhWno6Q0M+M2h3YEopVzxWKHUkMyN2TSNOPCN7P2F7Umc7WTVaV1Z6K0Z1SlAiXywu''@;'; put 'put ''NF0+T0EsOFRqMXN9cDByQDRpbTw+Ul1bRGs4PnomTzU8V2NdVmFXRzxefkFNRzRkPX1MP19OXXwzal5HTmJsJWRPIXk1NWZ6dzAyMCRJVks8djAzPFVdSDluRSw/KFl5KF9EV0VsSEk6ZTF7MVMjOCM+dCM0N1ZVRntXTklCSUdEM3BaRU4jPWEybzBVKTx+MUNiaGdBbG42eSIxdkgsSX5TcTBF''@;'; put 'put ''VDdoTDovSD4lX0tdQiVrMzt4W0AkZmo0VyNUYi9rSFRdMHspaTRAVldoVm9+SixpU3ZTOzZxKWF2QH5QSn44TE5ycUM7KVJFVmFoR3QlfSpzSV9fbj0/K3RkZz18OCNMOUx1XihLO159MnNMLk8mSV5IVz5JPCt0QUUxW2NvXyVtPlpAKz43Nmc1M3VRPTVpWXZKMUsrK2BTfD5iOnMoTVlHZntI''@;'; put 'put ''R1A2eil7V3hHczt1blcoYT04bVhgNSRYL311OENhLlMmZGB5eSF3ZjV4UX0haW8uXjEwbHA+Syo3UHlUR1FbfXt3ZCM6Y1Q3KWJ0W2J9Rlp7cGs2Tl5FYSoueVpxeSY8PS8zbCM7SHN6WWsyT015Y0ZZU157QiNvdDZieCVLdkV0cF9pd0lJYkJjW3A4XmhJKFR2ZU9CKVpLWjFeKDFiZi8kL2su''@;'; put 'put ''fD59KzhJfEpGZEB0U3lJN35bMHooaEBYbVg+WzA0YWJUdCMpS1tEQG08RiRqOVZbKlElekBRLylkeFZtKVk/bWJOSEU5MXFAMjJSN04pSXVjaT9Zdzp6YiRme2ZTeHswMz1IbFRISHlQeCQ0YjgqaHpgQFlXUGh8RF5NUCZ3PUMjcWA+JE15e2FgeWwrIjdFZyRVLlkydzY9Lm5kcXZVKkVCfl0v''@;'; put 'put ''eHNeRlVWRmNJJWl4NnZnPlUuTHd0UHxFeyVfLEEkSDhMdzU4P2J8e1oyXUVlLi9fZmpxJmpob0I+YkNePnJkKTszUjZjYnhnKGJWQEdQZUQmZ01RQH1sN0pEQXF2ZnJ3IjJwSz9CJGtve3w+X1NOXnRZfkM3OnBRVXxQSEpLUDJDUFJIczFhWVAyMihNbjBdXT1dI3tUMWZYKGBGflA0OHNFYnVt''@;'; put 'put ''eWxbc3dNR016PkVQNCZaaEU7dEwjQT84SUtAOjhiTkMjezw5NCpLdS99LCVye1U4aXhNLFl0MUNjSFRQPVl7YHUmMVVNPmlMWzRORCFeNEEmYjkjcDY1Yls8Ryp4cHg9dmRGRTZsUVk0NDpbKG81cD45QXg/UFY/P2FOQnNhJkZqdUAxPCJvNTdPJVNEVHcrRD1qOCNtTTY7RmBZKEYpPElDZl9o''@;'; put 'put ''b1VpbztjZlkyQixWZX55Knc7ZnlHPiJKPjslTDBsViVEQGY0IzRgX21VRkx1aiwrZFVNdmI3eSMmMTFlfTBuKDM9PjJEdEQiUC51QjZWbEhgR0c3IX4vNDVPNXdkantPLEMwZG5Rcjk6VVNTLHI1MXA8MnssUGlUcStEW24mSUYjRTB6bipPWCttM0decUZMM09fNVpwZWF1V3h3b1M8RzF0Tzp7''@;'; put 'put ''aS9xO2NSXV0odjZZfTcjQnpCKDshYVokVUFtSkdfVFMmdmIsNV03biUxQio6Iml+YEY9PjR5NDVFQ2ZoRUM6d1J4ZV9FRCQ3eG9FOVFHSHFqbHd+Q0lUdmJ7ITErTGxySHNraywzO2JiQ0BwVGlSI3pDOyxNbyV3cVpndU9PZjpzQyYmQUd8I0Qie052JFRMKSFLNnBtd2IzWjosN0JQOltLUFs1''@;'; put 'put ''NShFbHY0cFk/QjBvQFgscS9nSWF7MWJlQ0Y3WmF5JXRITyhLOnlXP2RsSEJbSXU4Lyh0I2pkczdtMSNALFp2aC9Ua3Y7bTZpTSNBdC8mJW98XTU8KXplaE93PWE0bDV7ZilUfipxInZOfFYzNmtWPV1YWFgyciN1Il1xUy55eF1tU0MsOE82TikrJmF8fSVMbEV1e2JZXSFEXWdkVXFrQTtudDhB''@;'; put 'put ''VVE/S0lQZEB2Zng3XWMlTEZVQCwjTz9DTz9ubmM2Zn1zVnghdFhqbXNpIn5HTGZ3SSlxV0c2QjlFR25fUnYyMExUXlFhVHVjQXg8S1I0a1ZnUjI0eypZMEREfSw2Tmd1eU1NNzBeWmklQmBlYDo4QTcvUylodFZTTCx2WVcheityZHtjdS8lc2NWQmtQR3lVWSJ3MHs2JFpjVCFSbC91ZmZscHlG''@;'; put 'put ''U0d1dFo/enNfPC8xbmZXaTs7O0MlankxdG10LEFjNVIlbG9lR0tmKTREL2RwTFErJHV9dixXWTpOUmgkTlNmcSpVPS8+fS4kZk9RZi8xQTBjMkJ5NSZdKD92Qjd0OEJyKUAkdlhqPk1QRnZ3R2o9VGYjK01aRHM6OnlteFc+OnY/cXxDd1tIU0B+TE5PY2hHODB+QklYIzU1InFHcXFfbXssKDlQ''@;'; put 'put ''PmNod1t1KTYwVk5BdDRoPmlCJSt4RU81fk9OKnB6N11RX1ZiVzk4U1Z+SD0+IStWKC9NcmBvLFtGbzliKFl2NTI1V3lmKnd2JjQ9YSJZZiNkSnpnVGNoeVl1O1AzOSEiWzR1Y3EvQ11GZlk+MTgoSTUufUtWRF5KYk0hVHtPdl4wSVBiSyUoUD45KXk9elNwfGJmdEolQi9qVndYIl4vRU5ob31I''@;'; put 'put ''JUJdWi90KytqSlAxIi8jdix6b0U5cVJET0VgKHtRdjIvVjdlWT1bJjhiWmImRCwpIldORDYkP1VNa34yQEddW1FwKDl2XihjMztAWiZTOllQYWksOSh0RFlwSVlnamxiUiE6NE8sSTVwN19VemJAPy90OWRwRmFWdEVDeXhkRUtNUyFEWCksaiVjPF85IkFeXnJlIXE+Vm1NT2Jbay53ZGtLdD8y''@;'; put 'put ''eTpCSTV+PCJGXThvRD1KcVg0cF1FXk1+dmFhVmJpTmA/MFlocj1zLG01Ml9oWFF1SCVdfip+YyEwL0ZBK2xMZys7aT1RUnlicWNrQixqbUZgNVU4Nk8wb0NLbCVjSWtzJmA+b206Ny8udiwpMCJpdi9mZ0VBLC4xcjh5N0wsM253SSRwUkR5KXxNbXZjfkBSfXBbQltwSiIwZ2c/cy9rR0JaSmEr''@;'; put 'put ''KntneE1iLktfaU4mQEBJQz1ERiFMKXIxU0tmNjVjWUBdTlBQWkljLEl9TXRyd21wUEpsNlhdcD4qWihxej86ZCkjR3tpXllIXTt2QHEsfnFgKHUrT2J6Mj58QitobHNXSz0hfG1AITtEeTMrN1IpcWtHNjo5VHRFMFNFayJYUXNkWk5ZdT9dIShxSix4KyFBaz4+JGF4VGEid1ElYVl8aGpgOWlm''@;'; put 'put ''TGcpJk0qMDs7PXNXTyRfbTg5L04uITF1fSRFaE07Q0FnPU80dz5bMSs/JEU0T0gydnxedil1XksmKmxXOm9OOjs1PD1ZU3pVOzt2RClWZmgyW2BLbXltbHZLK2hvUndDQEdHdVdsdnFrVEpEMFYhQmZyaTNMXiZiMkkhelV6eS8/eT8/bUx3RWthajRQZUQuNTJvOFkuKGYvN1tfdFMrdU9yP2V7''@;'; put 'put ''MklFO3YiR0BWTWpgTkw0IT9lZ0tKQGN0JjU6N1hyUjg7NCtabGdMTy5NeWZuYiJCKktnMD5MXkZQJUNSNVchMFpAb0RoU1I9cj50VV5paDFkdU5AUVhZMDk2dDk1O2d4JEMjYjNnaWIqIS81Z0Frej1XYEhPZH4qZDA4enlmeT45NzxhOGA9ST9UXl01Xjd6W0M5SXg8MGJZfnZ5cWx4aERuQ2hl''@;'; put 'put ''cWUuIlhiLlNNdUEiajE0O0xTbDF6e2xlbnQ9JGx6ZTxjNXV6fXhXJVhjQ0BVamZ5dFk+RCFOUi92cGYpX2tmSlIqVTJxL2Azbj9Rd08wZDB2VnBZVlB2P1J6WWRwK0FnPyF+LClNSkhmMmdJaEJyO09sP2A2elFyLkh4XWVNK1l6YE11dEwmOWJ3YTdLTzU3JlJjJFMuLmZsVTo/RXo2TG4kQH1A''@;'; put 'put ''P0J3ZFRpJEZxRS9VX2twWyphYypdJV1kS3NEPlp5MU5LJmo1MEBgfG8zUDJPbklzKDsuMWEyaSx1RDNDK3RROkN+Oi5mRExnQzFOTERhOFVjRjpRJTJqdWN8ZCYpVFsiekI8bHhbI3pFfllVdGVFUGFmeG9SWEo6PVc9fl9bTzJmKFFyeXRQbzZkSk9wJW1LJDx8RVd4O05gQTkuTXNocj1EQVhB''@;'; put 'put ''ZzlxO3FLdUcyTFFMKm5VZCNjK2pafmBDd0M0OD04a2FlZmFxPWhZY3osdl9LKlRBeysqZWV9NSFaL1JsNig+W2Y4aUtHfHdWN1NEOUdoVk48R041WilLLGhAVmh5QEclQ2d0RXU2JmI1ZTE4QyFRcnArbkwmaCJbbXAzeS9CKVlFOlZMNTxvPU8qSmJkcEZZLyZDZ1R0bitpZzB8LC52NSI2Y0Im''@;'; put 'put ''RCYvaUZUejpmdlRHWDJUQkdhUix8aFBwRyl+VHJmM3luI00+OUBBfHpqb1BlLDBmNHhtU0VwOVMiIXhxKWg6KEVae0ZGM2ZwV19SfV92OkZbPyYiPV9XMS85ZFVwS2hiS1o1V0dtRmQvbjxTJk5wRVo3NHpRR2pVKGMjRkxnVnRSNiYhRktmS0VTdEVvdlB1ZzhSYGhsWEApKjQpN194YldiLEB5''@;'; put 'put ''WFQoM09YMjF6OD52Nl93S0tdUUNbQDprb3FYZCRYOU1GOGtqUmh4RWR7YFBEL1tJL3ZKL0t1TVBSIzR5MjckaD8/M2I+XTdxJjQ0M2xKKCFDbF87RD5mOEgufWlzTm5Ra2VCKFUjQk4qdHJlW3hncSFBQjw1cnI1OU5SYTtiSjR6NSx8IXUpYV13Py9LNkFWQUU/dSQjIW8oVVhqRCNjUmJHPTZJ''@;'; put 'put ''QVQ6KyMyOnhCQlNoKkhMeXVpMyFoYDdhYEUxdW59d2Q0IX1vOjtnJSorc1BQQGZAOUFuUV1TdV9wbEVCR31WMFdAS09KfEJyVHomcW5GP3BBMHhLTWxGOkpqe3RzbjE2aWY9a3NgfipeOjpKYGQ/ZnJtLzsqWGRrTlkxNjRPYTddckNsOlVVY3MsKWFFSjcxWltKbzs0WW1HJTYpeztxRkJ8ZGE2''@;'; put 'put ''bHIyQHFQTy9yZyY8L1hOS0hiPlF1cEJ8MWkiM2Qhcj50amY2XyFQMUhBQ2FkPnAlLENNK3x1Tl94Zk1QXWc4b3tWSjF1YHYzLlMkIjdTaHxdSilIPjhKT3V7NUZfTzMiOCF1LD4udGV5KTlJNnp3PitiPm5kPWZGPip1WE5Kdmc2SVV8OVd4ZWt4c0R4RUQ/TGQ8QkFDaWN2Olc4VWNhSXFeZFd0''@;'; put 'put ''alZlTE06IkVLemEuPnpweWF3PE5sWHRfZmlHTVoiSnVDNW4wbFd7YGxDb2NqeXlCfT52RUAlMFdsJWpZYzVhdDg3S3k9eUtsbEhhOGA6b15EUnBoRj4pektMbF5vdDB0Tk0sTCZUIm85WCg5P2x6RSlSdFRxI2l5Mnt7T1hTdmtEYzQ1SFZ1dFh2Yl1qS1tubFR0TVRtMmpJTT4/OUFtWFg4TWZp''@;'; put 'put ''KEdec2E+eG5AOHpoRk1SP216a0VNXTpmdUJ4PyJNYjApPXhsXyZsLDZgM28xclpANUJCSSVGJlBRO1FScmR8ZF0iK3ZpWzdTKzAmcCMpSXtPXjxkV0ZBXysrTFYwQEdRfCNzSC55JHorLHZuWnxFc3RSMVdFX3RgVl07SDxFWX4rVDlFPCJjNSlyblpjMjc+dTouXyROKXlaYnR9RGlNRWcrIWM1''@;'; put 'put ''S0FHdk5aXU1UeD5tYEwuMTl1QFFdbSF1a1JUVX1weCpAJGVpckNNOXNpWTMqeTRmbl9WWUh2U2QkSEk6V2hPJjNmemE+PWBEOFF5L2hsM1FvQXFWTHJNNSYjYX5sTDBzY1kyaTxNXTc6bDNbVmphZ35vT3hWPj9fb0pWdFsuYHlCPGc2TDIlcjRRciEwdl8yL15ndmIzJXs+WipxOXRLLyV7aS5f''@;'; put 'put ''TDY2b15PYFlRZU4kd2h0Y1dyQ0pLK3FbUy4vSlhnSiU2NDpicDg/OEROYXY9Y1g9WVReQHl9VXB1cm5zKmpbdkVTJTpHeS46flZkTl4zd1V0TnI0OW5oSDVOVEdtd3wvbTRZVndLV31+c1BKNEhIaGA4VnpGQ301JH1ZQTtqYzw5SUZXbyQoPiNKUChwITJQZjN1YStlM295fXowamhbKDVJem8i''@;'; put 'put ''O3NkXTo0Wk9oRytXKilrUV9nezJufjdjJjlmMF9xVTtsQmhXc0pLKjI3cy9sdyFxWFcpWlUkekk+OSRDe0RdU3hCP11nNytXNHp6Rmd8aShGcVtBVVNJUChrI3F2bFFNZG06IjlSV0BVandAKE9Ad3RoMCEpJDY0Nk5tWCJNMnJVR0RDcTRWRTFhXUs9MDx1X3MwYDQjLyU9XltxaXZFeX4laCQu''@;'; put 'put ''cWRpTnZxRyFMNUU3KUVXTnl3flBSeDwyREpAXjE/cmI9TkhKei9ZYjpbV1JQbFN4YmdqNEVJd2U9dj9dJH1MMjJXQFRnUm4hUnN7Q1pOMEVOT2VhSXxANl1AKyldXyNtMFVZb10/fCw/JV1PUzNXLEBtVn56N2JfK3V0UV9XOGBnKlE3V3BqbkVEKzdyRjNrM2RmNk9mayYqNC40bDZDYGA4Z2U2''@;'; put 'put ''VkZaZ1kwMG4jMjJsI3hIWFM7ZEouZlAyWCU7RXRWPVpxIS94R25sSC9YU01TcEYuZzZEPXYjcl9jWGFvITR3K3JObyIxalUsWUZYdmJeMV8jSn1yOld7bDBmTURpI2szOUQ5Py9ELzZdNVt7YjhLM2xCejBkTktZSzxEUSl2IT54eFJGTXUpZjZyNS54OExFcT9bQztTcTtiO3I+bEddT09mViIu''@;'; put 'put ''PVI8JlJ4UjVAYUQrVFM2XlMxdC9VSjgqalEjPjF7SmUiPE4hMXJtU3hVdT4rWmIlQC5bRSMoaio1Q1JDQlYxeG5XfG1YTlElV1F6LHFJbHpAQnBAVFBJMmtLYTc+bHwlKFMjWyQ6YXZPXiwsYiQsZlRSbCl+P2Q0SVBeMm04YCU9ZCtqJkZnKHxqSFBqfmFJSV1Rbk5ZZiYsKGFvR1d1Nz9yPjNi''@;'; put 'put ''MS44eEJmdWVKUSJWajVWbj4oIzp5aWsjVDtaN0hMfERfOHh3OTVofUQ+YEdpW2MkOnIpNis3eSpBUC8kYlspdzwxY1dKMzM8KFNoK2Q7UDFsTWJkM3JSY1FsfH58fClnIUg7IVojP1l3WFAsYDBnejZpJSpuIS9jRyghP2VtS3chZilJR1BeI1ZfbFRRczIxdGpxUkVgWi9JTiIoZ1gpY3E6X2Zt''@;'; put 'put ''KFFBNil9QT5VKHR2MURwcU8sUXI4Y0VPV0lXX2JOKSEpV3V5ZktHSysheHNXdzAjX2VKNlIhJCpUdHpyRnJMSmdocXZwRnA2Kmp1WWJmTW9ETVRdaCRvbTtKcEMoNCNkNmBAc0orMFN4RTFGNkBlaDwkQ15nWjsvRVhNQltYVltGcF5jdFB5an0pOD1GcT9nQ3c8a0REV2dIQFQyRWExKUg0JVo3''@;'; put 'put ''YFolYF5acUZ0Nng6JT8qQ09QOjBXMn5XX2Z+XisqQXU7TF1CcU1BdG5FP2MidCNaUm0qRnNwYFl1dldVN09oLixxJT5WfXxUOmFqR19BXz8wcW12YHQidXMkWCxsfEEoXS8mIm1sKHohKTtLdWlgQnIpW0tqYkZaSlo8fn1YKHlHN3IsV0YpfkpKb3MjZjhHcHg8bkZYaHJMaWNMdzciLyEuU0x3''@;'; put 'put ''JF9aZVEhRnhVbU02eypZZ1lMKEV2cmliSnEpWT9HeCRjN3lbJFFnfExOYmYjdXgoVXUpfE8pdHZCOVdzWkhRMkZKPmU7TDs7YyhPSGp6TDo9KjdXZUFLOiNLWStuTl1xU04mWzc0bXFfLkA5anhCJTZ9UFc2OkMoJHRobmJ5fi5JPDtfKnBMfTVTQ14jLnUrK1BKcTF+JjQzPXhdeHtmYVVZLGEm''@;'; put 'put ''eio7JEhVK1crbkkxUjopNGEoVkpvTF95ZWY/NSpJLyN3eiltJGE3JUooaCR7bnRNamtJWV9EMD8kITZ3NHJDclh2LyJnIU91azN+Tit3NjJCYmhubDN4RUUwdCtgbFt1VSMiQ0F0Xm5GNzk+XVpUVi4uXlMvNE5jPFdlOTJxXm5CN1dSUD5LJDxESnA7L0RQOmp4KUZqRmVEQz8uQTtxNXhZQnBs''@;'; put 'put ''UXkqNzo2bjQqOj4lPk8/Z0dqTTVtZmh2QiI5MWFyTmxIRXRZcXkxKDsyNG9lUTBHNk00NEdQNyJBfm9HOiw3VUYvUShFT35jbl5VR1BZbyNQTypINUV3P2c5X31aKThibCZhL0QoOz5wT3EpP2RWflZse1d7bEhEUmZrYjY7bzhMXytNWVE/MUkjUmRUXnMiVm13fSRjJWRkckhwbFZXNEh9X097''@;'; put 'put ''ezJhemt8VnlnL01yeWlRZE5QJmJaaHBGQW92NTlyVCIjSVhte3g3Q1pmR19gSTYzKixMWDQ9XzhxZTIsUGQ5dCVvRiZQPUVlWWVIJXB1UytKPC9tUmVHQD9kPWxhXl9bQFtRdClnZ0QsKyFvUGNfRGJHTSwqSzY9OVVwRG5MVXxwdjNOY3hZWXU+NGVzWTlja2x2cDJEclg7MWtsTXJoImVrMyVd''@;'; put 'put ''QD4qZkcmeFF3KG5CKTReX0pqLHNod3tMMjh1IjdyWTdtRSpbUnA4VzFhfE1WJCxlVDNyVGxIUSFkIyRAbnguQCM1ZFZjP05wJUtbSWlwRiFlfTNNV3MvX05+c2xhMG54UlFvVVZyQzxLbk91WURHKHJ7Xis2bl5Na2NZIVhGeEtXcEUreXcsNS49ZD0kY0RXU2N4d3JTQ08lVUd+NGM6UipCI2Va''@;'; put 'put ''JVdaODdbS3M6SGdnZDkoVUNMZSUrMSI9eTlnTTMkJjxMKXdlVSMoZ1ZhIm4jTUl8UCsrbj0+NjkrXkIvK0hQTVlkVShYTXZNIihGPGw5SllPTlkqY0Yub28hV1dzJjwyVzolMVlJaDFOdSY7KV47Z1lMejlbYls5OHciMl5FOGhOWm9BNikiQkxaOmdVUDJdeiNGdm5MWzczemYjRlRUS3JobzpW''@;'; put 'put ''T1IvREZqdHNFbkNAcCEmPzJDaTUhSmpRWXFra19lNU12d25DaClIPCtRMmJdeTNHenxSJV0rS10/Uz5bVl1wPWJWKHkvYj83NlQpWDpBMD5iSF03fmNifWUuZkNYQnVkXiwhcDN1MEtAfndtQU5WTit7R31lXW5iJDVeTz98RnsiMlJDaW12XUVwdHBtbjk0U2ZXYWQiK0g6YGBVMjhVaFU2dDdh''@;'; put 'put ''PjFgP242MGwmaXAueDs2a1UkPUpfNTVDO2VaZHhNOH5fN25AIS9fUCpHWz9Ce15oLl46MzB2aWU/R25sZzN1YVBob3RBYWdoJnU0WygjKzl8bTpHUVJ9X1JNU2d6MXdXaUZ7cVlwRkReRTBJRUlsTj48dz5UeXNXLGFOMyIhKXZ7VjMmPWhVTl1tKCRMPT1RUShTWU4/aFI8bGooZ1N6azZAOCsw''@;'; put 'put ''LGQlcnUpTWorfDM9UDpQRkAza3hpQj9Qa2N9TFJKeSJAM3tPXklEJT1SZ3JmUHMobS9vfXxgKn44Y0Q8bm1nTjRHa35uVDYhMkIyVzladDZ9UzdEW346Y1paW0ZXKHpGYUNaNmYmbjpgaUdMKEEubFRiPFk2KWlBO0I4NSsrUWV9KlhPbmAoTzd+QztYV0AyWilFTzBlIyVuTns8WW91algmXzld''@;'; put 'put ''NDY4LDZGc3dwa09DP3Q1M2BERTlFbSg1PCwvWiZJWTA9Yy5NYUQ8ZkU/Y250KD8yV1N2PzFEQzFgTDg3WSZpKUpTKjkmW2doZU9kO2wuV1kjKmI3Kj5OQyhjVTA6TSZQLFsvR2ZIWDhnOVV5Mik4WyVjTUhQKFRaemUxezp1ZW49eWFOV01DcntmbF9qR303UUg7Rk4keChmZ0ppIU9XcV4xNzhY''@;'; put 'put ''PHp5fXdZamdTcWJvO3pYUXo0Mzg7RioiTiJUZFMiRnNwKnRUNkJHTWAjW0VwanlocnVrXSVuaW0oUnFYfWFqZldlQWxxVj49TERwKFEwaWUzJDoxUkI5V2ZAVTNmLHc4eE9oJHJnc2k0WkY4KDJMUjx5L3FyYWBEKVZQUixyYn5Je3dAITh9eTRbfEBTXUojOVQyI0dPMGZ2ZG0xO0V+WFFxbmJr''@;'; put 'put ''RyZscEB4dVliVW1fal5HIy4lOkJUZXc8bEk1X15oaEteS0g8KlhobkExNG0jb1ckfHYldU59Wy9hfV9rU2dbKHMpNVtZcDtiJmdlSSpReCkqbnB7UGpVTT5YUU5PaHhkLzJqfnBgQGdYK2ApI0FpIWgiTG5WUWNqPjYrY2xpODZLXj1gRWpaalY6NFs+c1ddNEhoXVJxWlVHUVFHb0s0REdpbzRQ''@;'; put 'put ''ZmMwX2VKLFd5fEJTPj0wWkkpZyh1fnd+fnE4KXFzSjdkV2FOLlFCVn0+QyVFRWBCUXYjXlY6UyIjJDZwUSpmWWlzKHhtWjAuUygkPVk6bmIocnFOOFNGfGV3LE1NRmFxW2FEfDRrRFhkTC8jNXVKKlp6NF04Ii9vLkdeJHpbU0tVVX0mRitAYWEidj12I15ERTdxT016Tm82Lnw0WWBocUswUXF1''@;'; put 'put ''NHBMRF0sT2lrcVhAUi4rRmRVaUlMUXoqVzQ/MyFQeDVqeHhaajp8Nj5qWlh5TDZ3Ikk/YjRXQjcvU19Dcjo/VWxsUEhvXSVHJGI1SEloW2pPVHIhWW9HbllwVmU+Rz8+Qmt0eGNvdiVKL1RQfG9adm51PUk7UkldQV4/R2xWWXNidyJ0aGVFSWU/Sil5JXUka1U+UWJme0dFMF5lTno2YlVgNWpX''@;'; put 'put ''OW8+WTwxMTRhSitpNjt1LnhLNkh4O045SmZVKnQyXjNHa3JCc1RGOnVZQHUrY2NVRG1xamlgVTt3V0s1MyhYXVVxfn4xbW5JJFRuOz9aen5BZ2xHKS5RM3w1OCV6c3llUiVDdm0oJjs9Uz9aZnRTPUdnW0IsbFomd1tFaXglXk94KHgzPU84SEpeYWZhPmxkc15EQmJQYkxSXnx9TE5xJjU6T2xI''@;'; put 'put ''UHouSE0qXjV8S1c6ZW0qb3U4WylvOj9LV1N7TmhHOStNb15zV285XlQxU2tpQy5oZlouKHtxMk9XSDdYTHUjU30rSjNwd0p5NTFzdEFUZFp+O3Z7ay8yOD4je3EhfEYmcHdoNzhqKVdKRz1lcGFBLjc8IWRZaDhbNEglWk1dS1kkLDxwVExVX3E6Rjp3b3M7cFAsOmkmcTZ5ZzZRYCV0bFYwIllN''@;'; put 'put ''RCt+dil5fWxtdVR7X1ttIW52aygyfmJ7T01qOSw/Q1tWfWs9cTtAJTQ3IVhzXnlgUEo4fENCQWBkSTE1ZFU4bXVTb0szJCRxJSgmLG1MKHVrPSYyQmtsS0Q6RkY5XmVTOUNsa1dqY1Y0MVg/MCVCOmFaSTJDYkBNej9Gd2loX1Y9ZSFdREdLRUdZNG5mOGQlNGkqQlkyLiE8TGhnYjVHM15WO3Nt''@;'; put 'put ''OUs3Mz0mc2QhLHV5TlVtP1Rsazt4UyxmY0o7aSgyM1teTUIvMCk3d2h+MTtGMz9UdHdvXTB1fmhiY09LNDRvYmF4REBWOEoxX2ZXbzxHVFdhXk1ZKWhJUyNIPVo2P1RZfj1fdlsmYEZgUko4XldhM2NNc31APm8ycSI/VH5UcD9DYHlWKmgmUyRXM29lcFNYQ0s1ZGA4XmxEL0cqJS8mbl1pWFls''@;'; put 'put ''fU1HNDZvMzRFU29VSkhiJSlZPD1hIzI2Rj53ZXVkPUpKWm1lVypbPEhPQnEobnIuNV90VDVvYHl+Ji4vLzxPeDBScyo7RHkrJEg1d214PkZVVEx7cDpbNWg5QntIQksmJGhYYUZkbGN1M0dyWyNiW0czdkZFVWwyfEEzIUp7L2FMb3gzSkk0ZU15Jno3dFthKjVZNjx0bjVnQXJ0fm0hfGNmWiY1''@;'; put 'put ''dFFjJmwufSFbb3lnQ2tAdWpYezF2WFcpT2c0fWpeUmIlfm9ldEJQWzFxIlZuMDJrdV9XdXI9SF1de1lCdX4ka3dbOEh0cH1YaGYpViNTXVUuUGQjc202OnltNipWKWh6RWo/TSFtTEM8VmpLdkNIYkczRmBmRXRuQWR2ZltzIWQ7KDJ7SClLS3BfNTVrZXdVXmpMZlo3fmNoelsyX1BNPnssY2Nn''@;'; put 'put ''MHZJJlgwRU0zRiR8eVVNKjtndSY7Z3kvWktRYDxlZjRSRTp9YUZmZSg+ZWU8QkdTdSglUWw2cDtDUjUoRjJ8cSVIS3M2UmN6I3A4LDNXZlpqdXJpdF1CXStCeiRhMmlkbC9kXWtsalVAL2lJO0Z6Q3c2Ym1SXk14Rkt4UHRbWFQxJV0zVy49bztjJUdsdnZfQHAjeWhzY3IsdEc+dygxdTJSJElJ''@;'; put 'put ''W3twejxPJU5tL3hxQHIuT1BqIyt+Vy91PC5gSFE2ZGFvelpDV08mdDJPXTBKTlNZaVBALEkhTCklemUxLFheVH5IOTVRaDJmZFQ9KjdCT1pdc1pyWGgyT3k5Vjx8cjZObntJIz9dVi9TaG0rYjRrcTd6MUwyQjh5RFVtKixkTUZ3fSY9XTl9ZkkhTUBwSyh2a3htVkFdaiI9RlpDUzcpbEYsakYh''@;'; put 'put ''amx3dC5rTXhnfF0+SHRENFMifW9pTEY/OGZxMyohcHooPEp6MFheX0lYPW9NW0Vtcz9QfS92OFBUIUlMLkNFZ3RyQlYxajA+IUtuKCVwPCMhWkFGfSpqdUIpbEhhPVF1L2A/T3w7PH1+ayRSX3UjTFFlRmpedWluSlRkfXwzMVVGez13emtId1BmMSt+OD5JZkZHKUUrTk5oc0tCbnF2eWxGUlFV''@;'; put 'put ''IlREKkY8THRPRU5FLjohITM5TURlZExiZiRJKW9jITtKTHpoP1lCaTwhdHVxTDJCbGxebnd0cSJ0QDQsfW5oUFppKldjbl5sMUxII1NyXlF+Y35LPjh3RU4xU0ZUJipBIjVmYHdAPS9AZ3NZfUJqfmR7TyFjb0V8Nzg9biM3IWtVMFoyLm88Kkl4ek5yKnZAUkl4NHYsWDElPjxHcF0laiRLJjVw''@;'; put 'put ''ODV1dmBRWWNtI1VWenVobWRLVzg7KnovODVgRXBrRzRCJGF+V18yJl0kMm9URWdbP0dGYF1GcHdjcCRjbWVYKyFfLzslNWBSeUB1M2h8VDJjOlYua3xvZ3RIYWUxcjE6cSlrM3I6IyxwKj5PK3VLM2ozPUJWYzBHPkR7cFVzbWA/PyhndnddWF40YnRBK0VCSkVyZWtpT1NCMz00OGl2aHZXKDx8''@;'; put 'put ''Lkc6JkBpWVh5ay9sKDB+LlVbUXEpQFFwPHk6Z3U7OkNnZzV5Zzx3aUI3WTpnRGdzYU5gYjFzMiNmISp4e0YsaDVEIkV1KTkwW29CQzBYZlk4YG9aOSFfJDVkT284SVZick1acWlacXVmbCg4TlRLUCsyKnF9I1N8dE59Kk5VK2hUVD0kJV5jIlJYZTR+fHhDKjJgZilCUDxaeStxfHksYChhQ0Qr''@;'; put 'put ''Q2k/RntAKW1ueDNIQCM7USsjX0NTSDNwJXVCanUiMGZJPEJNZ35WWlY8SiVbbEY5e0pDWmY9ZSoxfk8pVmdfd2pJInByVXtAZVhqK2guUCY9cTtaPW08KXA5dHZtdCloQV4kRnQsfXtWcWp3IyJyNFt3dzdSbEhvWFYqN1tefjlKU29udmNSUHJJV1o8dmV6VHNdb1A2OV4wKXBWeG8kOi9mMihp''@;'; put 'put ''bjBPIzcoOHkjRTxweUpANnJ6ejU+Ny9qfEZRTCNqaVEoal1rbGQzQH5PeH5NTGxEK2B2VWdQLD55W1d5RzZBZzBPJUN0a3hkWFd6Zzo5WyRmaWxaRiFSb31GLzAhKFV9Lk1VUTJwMTJEKyt2RXVlOE1rY0FQXkA8Xlg2fDd3M3ZKOikwYTRnXiZNOGc5LEFbbkJLInkiXmNUeiQkIWZLIldtOnV8''@;'; put 'put ''LklUN3NzWEIhQy9QPDA3eUhdbi9IeUpKQDNmNnImTk9XN31ybGs9bDZ3UHVbbE9feGBUVVQiYSVLRGJyaDwoTD1wXVtsdGMlJCM3e048JVkiJF5vYnpmOysyS046S29TJWRpUllaTTVARCEjTSMyWz15XjopM0l3NS9ncH5STV98QUwxYX13TVNlKXVpN0ptZilAcV5LJXFDayFTZzxpM3siPDFT''@;'; put 'put ''Wlc3a280KncqMXwkUG0oVHFhWjxtTT1PLndgZiteWnY7XXEsezUzcElRa0w1XV9jfitJOCspLjF9LHd+UmZ5O3BoV2h0fCFHdDEyOiJYRzMkRGspUXAlSE4yL11OVmosS2E0cSs3T1F1PD84KVp1ak9AaSEwaSFOL2xAO2xfJlRmJjBXO1RWKH47IkJvW3l6N2pILzlvKWhTWTIzMGJCRCYqNztD''@;'; put 'put ''bTZkOk40Nj90PkZHPzZkQEdic0k+S0xoVUpjYzsyVi5TL1tDfG4jSFldK0Uqai5OVThvZVt0LmZuWyFNLzAsO2xyZVB5ciVbWH06RkUsd0l8M0pqZGdLcnVeY05QU3xoYG9XSyF4P3B6Tk9fbntGJWNCIVMmX2Q6X2FrL1IlSSNla0AhTE5IKSNfNUgxXmM8dkNFaV02XXI9cmN6ckFrJiNKIW9I''@;'; put 'put ''N2pTc01jd1UiZEsoSko/MTole2xPNjBpUSxoLyFNcXVgKio2TztWTGBdaW9IdyR3fld0IkhNJXMqR3ZbemhmSiljP0dmQksxPixtRCJnVS5AIVliV0JpfGJ2UnlmdXtXeS9uU3tsb0h1NUNOMiFAKFMkX00jMXd4a0FCZWd2VV00I0pqWi9YInlFI2BRdEY7PTlKS141TjQ7e0N3OnskNGtmWGFO''@;'; put 'put ''Vj08VTgzRmtEckY5XVkjfDJKRDd2K0AqXzZvXW1laEIrPy4zTnBUJDBqVHM/bVZxRn1eR0duUXdaPmdwUDMoRHZrX2NWRiY9JHtgPiVuSjZjVmh8VT96P2l+IyphfGg4a1V5REMmSGwyfXRGWlRIKGFXbUhlLFckekpOWk1tV3RYKyFyeUFEL3w9Sy50Z1BISmNNN1M6P2cpMSJ+Y2NZX2FqIzMy''@;'; put 'put ''dGUkM11LeWF7P2xYUHF8fjlRKXxybSszT1R+OEszdWgwa1tWbV0/YHZzRzElMlZoLG1iPzQvJDBLSmVGZjd7K2tFQzx6OC9ud2gxfkVdcEV7LFNWfnQ7NkhhNkdQPCJdfUJfRit9YnJoQ3lnbUVWVmRmfWJXcWxTSS9CSDUlbjJxS0h1XkhdMl5KRHZdXXVZLz84ISNCdDdeV0l3REhEUXV1UlBm''@;'; put 'put ''eW5DbEdwfWReI1VrMlBGTUUiTV9TUS95cHo0Yk9tVFJ6ZkJOLk8mTVlYMW50YjBYc1lYOUpnbWhoI0lHTz9AUXlFKlt8ZntnaX4xNDMhNWxQP1JMRlEydntqfnx6R1hbWEkwMl9zLlRZVEtyVDUrPzNFWWozUyZ9X3xQNFFaPn18cCY6dT18TzxyM3JQVTYqcVVURC5yOE1Pa0p6XUxCMWtiS34s''@;'; put 'put ''L0U+WlgqRU0mJVV7NExIfXM6aURhYzRLXzI9b3thU1cjfDN3YV1CKlFkSjFgLiFsVTxyNkNJUWgrVTJVZDtFUVNbe299YW5DcUl2IiM6VlMlW3xWUG0rezU9M0xIfXp8fWQ0dS90YUFEcjRZbl5UMEhYWH0vPzlWXX5vYkB2WUJQfDRvJUp6L1ZsbmRoQ0VCeFtwJGVDVyk7W3M8eTRMSyl8amlW''@;'; put 'put ''OzUrVXFPNWhgNF9YSC9MfCp1c1EmTGIpK0UlR3lOUF9ldXxyflB4Mmo9ans1Z1s/NzA3YVloczA9QC5kRmV2OShKKCNDJiFWP0FieEQzOUUpKn0wanRTX3w0aHpiVUk/Tn54blM5VHc9bSZzQDkzdmA/QkkwakxfRH47WWkhPVlsQ1h6WT51QmE5JiZTW3BPIWM2Ulk3Nkh+TH5RcTJOXj8lYlRO''@;'; put 'put ''JWdMKEJCd18+bDN5NH1Vb1VddHMsVz1nPilhYFkjdShsST4leHZmPmdhNSU+aUl2X19VbkNuRV1dWjpARVNqRXQvVXQiR2YwUTEpPFZmVSR1XSoiQz83N3hSWFJFPGFCdSh2Rk5mfTo4JXgzcTMqXVUqWlRYUD9+Lk5TWTdYUkBkYD9XWkdCbz4vd0Y/MHxEWHZKa35MYXpzdGMxMnxRJHtPV0Z1''@;'; put 'put ''XSR4c0lXKTE9Y01AeF97TWhULkVIaDQ9bVJ5M0V8RHRDPndRYk5BRWFLdGRsQih+fXtCQjsyb2ZWRWUpUT96Rk1zVk1aX3d0Xi4jXXZtOTtqKFBqeUo+MXpiO3EvMFVaVihhblEqaF1tK0VmPiI3YyI3QE9CaEdvOW15YHFmdVY0VXFVdTFbQTZNUzc0MXdpcXpQT1AwNjtsfCx6YEFwL0lVRWow''@;'; put 'put ''OnV9dm1PPS5dO0F3JUZ8RVFKVD4seCpgZTYreH0zPC9aSDFaOzgiMXUlIXpnKUR2STYzfFRfJHExc3MvYERNfGRyKHdncEpmazBgfnZgNilxWHQlVDlgNExfW2x6PSYkZG4zSm1VIntvRS9GVEtKU1swIVYrKG08KHI9dFNWNlsxLltkPXBTPypaIjkvcypMLCFxJklbQHhXbExuNUdFaWZldCZO''@;'; put 'put ''OX0pfGw7I1JsWCYxaTdteltZREgiNWQlWyJxSl0+WS4/PkZXTzZXYDckJkNLfFAvUGhwOVhJNTZlW25DbTo+ei5tUiN+UkJ4UVAsdXgrPXxRZW49aEBnXj4ldHF9cHxbYGshX0t+SFNkRCVWaFJKQ0RvO2UxZWJ5OFlZOTpZQF5WfUU2K1RJREMuTSRYcW5DR05WTnBhbGlAR3t4bzlEQ3puJiM6''@;'; put 'put ''SV1AM292Vk44dTw6dVpuQlM+RlJ2NV81bkRMSD1qWFNgL08lRHBZZWVaTiRyODhhWWFNY1AwdipRb0Q6NTQ4SXgxO0xvJD9ubyRKfXQuUzFFYGhlZHZjKSE9VWlDYnJTSXtxT2RQZzheOnlQIjhsKH5STjlaXXVIQXdzRlFMSHsvIVlnSmVSWH03MjQrSj1+a1FdX0JsVj18bHlnXiQ6dF5dZioo''@;'; put 'put ''OkpSM3FMfnhBVVhHZktqLl10KS84PURHRWE+SyY1TXM5dGJQOEtLJDNkVVNMaS93SzVEPTBVOUBiNHVWc3s4d1NyOjEyW1Q5TVJLeyg+I1ViRCRHcDRAPmFicyM/OktfWTAhSEFRY3tCY2lkZU8lQDUvPktEdSZDJF1MciVYYFZZbEM0OnVtM1RALyZneiNzbTNxNl9UN1t1KU10fXtEKW1gVih4''@;'; put 'put ''PmpiRE1CXUJveVU6Ikh0L3VwUW58aGpIZ0VGOEEjXk8heUlXJlpbKHQvNVs8YEp9MUkhSU91IUlITCxhc1FlU2pdaEApclk/TSpbTG9JJllZUyJsL01dZHFmWjlAWWJDTC8hOEIqeUYuZDBiRC56dipgdHAyNEIjcD8hUGZgbTZPPGJHXzNfTF1veVdnTVQjbUlJd15WT0ZYUGk0c3loYEhGTiU7''@;'; put 'put ''I15eSTw2Uyt3Kl5RKkg3alEhdzJ+QEUjKDROYHxePjpwX21KdGN3YkUqPW9SW0BhUStYKEFAInJAM2hleSJXYHc3I1FoQkQuWnthPGFbZUUzXWowP0JqNCFwOTxwdXFkWm99T3FBZ3pxV1dvfWVpZWJ4IVJ+OkBGS0FzfjpaRHA2X2pWKy5IJE9oQCFUM0QmfT09YnBIbVo9NkBpVW0iIURFOXxl''@;'; put 'put ''ZmN2e2YlOTc8cylPc0VMJGt3W0RkKyoyJkYqd19jM14uZE9DME15YV9+TXNGfTNQeDZ+SChvL3dVKHREZTBDUFFTRj9mJSlaSl1eY2NhSHN4ODwqOyZ8bHxiIVNWeF05QD07NXtQaGoyTyVaeEYzUFE0bV89LnxPQkRmanUieW8kaXFJKVZCR3V1YE0rLk5eeGI4eXhZQG5faWxISVliKV0vLzNu''@;'; put 'put ''e0hgb34yPypuQ2xiMXt+NGA0RF0ybUZONFtPPG8+fi8yOj9jUnteT206dlAyNTdvN1U2aDhdXmtqKSMxWmokU1d4QGwrUCRFUXw6fntBPnU5K2trXmlhSmJHczcpMXglYXZoNjUxNHgkYDMleSoqIVh6YHVNPmVYMFZoUl1UdU0zR3U5S1MuW3tKVil0YER+bXk1cVNzQS9MckN6VkNqMnliPlch''@;'; put 'put ''bVZBQXdQJjYoNUphdFlzOlN0WWVsTDxDTEUmXVMvVEdJU0Q2UmR6TFZadkpvMTxGXV89N2wjMncxNk9lVyo3OW8/X0xlS3NdKyY2KTF0YkJQZyVHNko6Yy5CM29MbGFSfFA+JkA/JWJuJXN4YWJhSEphQVs0Y1J4KTZWPTBRUHAyX0JVJTlzKlgjcE4xY0dHMm1YRltab2R0JWN4O0dHSzU8azFT''@;'; put 'put ''KzZEd28qPHtwfXs9alRCPDdnJD4qUzQseGREV3tCKHVOdFJSWXRFfSZLIzBtWXg1L2I3NzEpYHhSb28qe2shTnBWLn4wMmt2VD0wdnNZWUVTTTAheiEhQGQzSTFrb2IwWl5xRVZdWXY1emQ9anJeaVAmNlJfQ1QsZGNpcmxrJCI3UXd4OzVuMCxnRW95NmldfDNlMWo1e2ZhTXlId3l0eWZkRnw2''@;'; put 'put ''P1tVTUUuITZoQjpoSHA5UFo+LChKU1VqTktwd2FlejYxcCtiWVAmUUpwOStKYVJ8a0R+eFVbSVhfcCs4ZDw7cFI7aDxiJSMoV05FYmExN3Z0ejVHNFs0P0FHZkxdYl9dZV8wVTQ+MztSKmJsZDEhLkgjaGVEQTlvcnxGPSFHd3F1MHZ5Q0NpayNaOkIlRkVbMlNYMixgbHRGNHBYPzlQdG81KyR1''@;'; put 'put ''fkR3Z2ZvRHt9KmYlUjgzcTxtT2dybWhtPTx8OWxGdS5kYTZyfkdxPk1xNVYrJF5hKUguV2xtKldqPktHQkhuRnNdUm9SQHYrPFFsI2hxVHNFPEJCQ3E/YjpkVFtaYUg7RnFqfjt1d1c4NTo8Ln5jK1s+KTM5I11MYXVgb2FCQz96R0ZZYy99Z002M35bX35lfTFqOUlxMDYvVX0xO1R+KXBrKiIz''@;'; put 'put ''RCI/bGxWMDJiYDVSODkuJkAsQzkuLktxP014bWxKJH5jTmp1Lz87VlZgeUZYImU7VUZeSExeRlBWT35kdiNwQXFKaWZtaH1EbGw6MXN9aUVPK0BXR2NndzguNWgkQllxK00hJkRPX1hieDdJPTxRUHI+ez5gOFM5TTs+Qz0vT1l5ISJxQEBRMyk+Q3FyNSRRQyZRNC5hU3UjclddY2JmWElkUS5J''@;'; put 'put ''bVR3dCojUmJdcXxaUkgoaSkrdnJTL3g9bCo0eWVoXmErM3NJSSswfnU/PzdyUFIiO35IYFg6P0JZMHt+UXUueEI6On5acG1sbyJELixgWlNHNXEuKU82NXpUTGg1fkFZc0J9cTE9L3E0I2BAYz8/LzpoNVl0LyxhUDJPckRKbClYMEJGemFeISEjXWA7RzNwKVYuZmlgcHN1UHpKP19UOmZuYUMh''@;'; put 'put ''XzRFQzt3fns1VlNHLENkX1oxVC5EVTw0e0RRbDIvPT1BXXRic1VHJGhKP0J2KzgmUTNgRykyc094ImM9Ui9qR1hFKUZrPEpZcysoUHdROlIqVix3Q0opOnVWNnBGWF1IUTNLZm5uKUFKdVsjbGFeYTxoNGxnNmEyJDsvOnpGdDRTVD5wdzlNJXs1IVhkTWhjV3MpR31SRmpHfj4jQGdVRWdRa2ol''@;'; put 'put ''QE03a3tlVEY0V1UqZWQjNW90TEVZKHljYmpmWU1aOk0+fGh4ZG5GcmRYPCpjS1F8SFpmcGt8W2N9Y3VHcSwrQGRhI25gWUV6QEgrciU8LDNXJWVIN2w4YlcrN3lKZkRwLDhDS1doQiFsfmA1TmV1S0NYKlVGMGVmbHklNDQwZjlFaiMsO1lxOTs/X1dudFdsSjtGWlQ6dUtxP18qSktiRT0oV2E3''@;'; put 'put ''ZiVgNnBpSWp7KSJ0fUZxWHRAMDVleHE2Y3daUFExOVI5V3Ajamk5eEw6cStpeXB2Y1hkIX19VW56YlJmPl5QPm5Ed2NGTE5qakpsXz0/UTUxdjppSyx0OkJZMCsiSDpCTGJzdEg7VGNyZGg3fTJ9RHg/e055IygyUzRZbzQmVGJmNWI9PnFWUlFxJUh+Ui9YWVQ/IXpKfl59ZWNwdTVgLlhYelQq''@;'; put 'put ''Rk89UTBdSS5MLDVnKkRmeEwjLkE9QD9wdl07ZnZddWk3QDxqQ2BpQlBZUT49JnE+SThIIjJyMnQye0ByOiopY2NXTT9bIjQ0ZSYudGdDR2Y3Rjl0UzNMZ3I8Q2ZBSzBQclR1dHI2PSM8NSxva2Q+YkJMMW0/YnlOTzpyJC92d28+dVJCajRbMzBrYjxiPT98KFMsdFUuRGFuMTM7Kz0wcl5NQyN5''@;'; put 'put ''dV9ldXk7Jk9zNz8+c3Fnb2ZsMWExYXR8a3F6W0V4TUZ7ZiEjN3gmLjlHdGZmU2A/TWBLJCp0IkRtJFFlRDFTYWozNzw/LmZKTEVRbV9mZzUzTk91MjJkTGhzRGQ1XixOIW4vbVJMVnlfZzQ7X310ZmgrbXVHUkl6Tm11JV5AeC9qTiRoJGI7KlA2VSw5d0g6PXdzMTJXa1cvU09+UG5XOSwwLl1l''@;'; put 'put ''eV4lWWlvdnt5NWdbPElJPChoS3lQciwmcVJkJV9tIz17cERbJjlqaFQ4YzspWSo9YHddYmBCc3NQeytUVEhFQ3Y+RnlWZ01KW34zaCxDIzspeiZoQW5UY2FQKiU3TFhJZ01OeTpeeExTUTxxeVRiVC9oO3BBcCkmKXNnO2VzYUYrIjw1TStabEB2RWUzR1czS1ZiP2g1S19sI3tMcjx3QCU1WTUp''@;'; put 'put ''Pltfb00vQy43UzE/R2wiVnxgamtAKl5zWiJkSU9JQ0p7Sj1CXW94aytEeF5wQSY4fnk6ZUB3TmZrUCN4R2w3XmtxfiR6dFNtKjMkSDBALG91QjM0IXwyYi9gdT1mR3dfTTFIXyY3XUw1N25wQHFWPyVkdENtUVYkRl1iOFtfcF4maSJ2NzN+QStnIklgej4zckxKL15AZ2VLS0lQXypWI0gpOEly''@;'; put 'put ''TkVLYElxRH5rVWZaLiF2emI0X2Z+WX4oWklrM3JlQ2p7biQmayNmd1ZeP180byMidzkvc2Y7c1RyTE1AM10mWWF5S1k6aXlYMlR7PSE6TjxNKSZwPTRwLGUlbnpuMFAvbXM7WHBrcUZXOk9hMSYyNywkVWJYTVdBeTRWWHBmO3NgSklLZWtTJWVuTEVPPWU9d3t1M1lZNTtafS4xWWVFb0s9PUhV''@;'; put 'put ''MC93QmhvNlhAIXFmdX5qPE5wRiYxU0IsOCUkc2soSHRMS34uW0h7XWVsYWxzdU9JaWhSWCIkY0dRNTJfdnRxNjpONXU/eEteYjw/RFlbRmIoIWBiZWNAZzIwVHp3L0YmfmgvOnxjb09fKSJ4fnBAQDBZPnt2TSF7UyR8cnJVdFk/fEFNOlYqai5NaCVyS0ZgUDo1MD9sNks2UDBwYXBkZDo0KGVh''@;'; put 'put ''cChSPURPdzBpR0hiM3U0ZDcmbXVeLmVGO0JIdGllSl08czhOZVZ4JS9oKkY5e2ppM3grby5gJVpsSnEidDJee0d6T21XIXF+JUdyRVFzNkJ5KS8xKHZ1eE5+OHU3RDRWJj40NkRIfEIyVTZnO3xKOnAhZ2I0RFpSQzUvSHY5VXg9LEcpNFBKU3tVZGZLbnUqLENlRiFJOHR2byhxMCFHVlAuU0E+''@;'; put 'put ''eU9NakV6OnU4TkZCRiowYSJJITQoZnA5LGRjL1NfZFM6QWA9Nl5aeiU0KmA6R0J1SntYQDhVUDc8UW0vNnZkZEkiPUNqdjklWWJzV0tFZzVba0N9U1JfbXVVdj84RGoxPzI4ejszJkJnOmlRNUhCaTRtYUJ1STtmMmU6PkZLMTBrZEZIKyRrXXRNIkZLJkRiLCZ+Vm8hMFZWYD90fjkkMVc0dW83''@;'; put 'put ''SmpqZyo+Jn4jX114NHdCMi9wfmo0OXl7dUBFL3ZiK3l2Y0MlMUcwcHVfXWJqcHU4b2VPUnk/YEwyOUNYe0BvVUd3JT4rKkpNYE5MNWNIPF9ocT9BPGRpTiRuSWw3PFY6YzQ4bGVrYVBrSzIxN2RxSCo1SSxIUWRnRTkzaHxTUDx9NzI5ViFycG5IKl1OYiNyVmd7TDE1IzxSPTdDX3xOPGdkfEk5''@;'; put 'put ''eHgzeztNUjhkR1EvREx6fkgqMFNmMn1Kdlo7P2VaIyZPP2VNRT9yUzFfbDNCLmV1Q0sodFNFOFc8TV1heT47dkFOKUcvdWtVcHpDRnxDXi4jIUMhcDlvZFhpYEJlOGspPkRnTyRBJGkiY31mK0EhZSYza2M2YCNKKlB2a0Jnfk0obEpVe1BOLE19VmBZaHpwbiJOVzgvcWFrUl1NRitOempFRFRD''@;'; put 'put ''bjteLFpdbENMQ3FTdG9sZEAoP0pTYElxVndYZT5vdyZWMkxOWVl0eWA4PX5xbVo5d3xidTZ2SUJHX1tTNVNaRi5xTVE6LDFzYX0xSm85YXhePnY0ZnM8WTh7Km91IjQ6UkNbN25jcztyVXZGJEdKeDMwbltMcHtuel1yOVNQRXt+eT9ZZkhQWlhVLnQ/WVY9dzlpKk4jTnkoVVUjME9dPSNnQ1lh''@;'; put 'put ''KFRyPjsoWG8oNi58dzxrdHZySGsrYiQubE8jTE5PSDFwNjpLRGNdZTRWcnlIaX5acTRmblNxXyE3aCo+LyZNQHpBXkhaOCI1VzY9TW5UcFA5PVQ/dE0hN2ZpYHYrNS59UUo/e3tYK2R4Ii9uP199ak1+bltWTUpGOV53LytXb2FSSnhxeGs7KjFvRil0fD07K3w4OnlKY0AqOlZfKlJlRnRENEsi''@;'; put 'put ''NXFRVltCVnI/WyN6XzsvJUdgZ2hRS1BBYmhiTV46bWZQdTY0MEptbjY0OSF6dkclbFNqbixwUSouaDY+UnReIz18KUYrPnYqU0sxbkN2SkFeJG1mYWh0UVkoImJGRUhXcGdxQFMpflpTKTs0Y2J6T21uJUtYMDI6fT9lNk9ufk9lTk0wL2RHfXQvMXx4SEhyK2cqJUY5d0Y4XTRRaXQuRmQ6QCxq''@;'; put 'put ''NUYkND0pLGgzWldmMGw1LyhVdWVbbEZhcUslcndVLFBrTCNoMjtDKS52Y0lfcUMzSkhPTm1hfVdyImpAZHtYcF9Ie1FWeStFWSwvbDpLbUpQO0lGdiVTcFFlZXVHMF4lIm11W0U/Kyw2RF1ecjoqO0BDP1lkYExKOWJjLmB3IipsLEY8fUoqMFImZ0h7cl5nKHRPfDNLS1AhQUFMOiVjMFhrZUZP''@;'; put 'put ''YmwiWGUoSlNkQUt1djZ0LGpURyhYPlR0UU80OkYlWCZtbm1nIj5CYjxjekJ7cFpSU0JKYTY6a3UxXlE7bmUoeyE4cjRnfSZqdG4hfTNxZV9OeTtuZE5hMmpIeDRGbjVDSyxheisme2VYa1o/N1pVYyMhPiJqeiRkQzlRe3lMfXZDeVk0OChBUDlmdkxmUzk6Ni5pW0JMYkJnXTVLUV19dzlBfnVP''@;'; put 'put ''S0pQaCtrbT45YlEpXSksQiFmNVhWWSpWNzsrWng8N2lWW1pJa1d1Y2kiazJXSyElN3x5NkY8Ji9vRVRJeWJIM2s8P1BxL3ZbV3d9JWcuR1E+ZjtYUHZqdlk8PDRpJDc7eTVySHlQNzEuY01kUl9TN1JXIVFibFpXZS4yfWIkMDttKyJrcXVQXlMlQD9LRzB5OnlVUW46IVIkeClvKHYjeEc+RUNf''@;'; put 'put ''c1tkYT5gN0d6WER4fTdae2lYQiMvL0lUSzpASnVwMz9JOSElcD9kbWpVXjozMntNYU8hUVZOIVNyaHFHZTx3cWQ1PElqWjw/KTldLEkze2g7JC9pP286U058RyhTUFcyWjZoUFMjXUU4eWdPYl94bXxpKiw3IitmWzs8OHFHZWlATGVaZlFmOVlxZCZweT9WS0xLSyNPciVZSXMxUzhUSlNCXngk''@;'; put 'put ''YSFML31bbCYjK218OFV0dytTMk5IRGsyUWVjUjEjU09eend5P1d5JmRSK2I5YE46Lk8zeGNRQzBuNW1aIVIyWWpaRTRlOjExYTs2bEl3XmlLPEE0dHxzQ3ZPZE1kRmNpOnN5ezZEbSRudVJZLGQ1PVF4OiNlWmsocXxtdCVfRGtUO0c8enszOnQqZCNaVnF0OEJGfEFlelBEPl91ayx3ZSZwQHBp''@;'; put 'put ''VEV1NTJqdTUyVGZybWFNfTwxKkJfYkBUISRyfj54cVYlSmMwcTBmZCJ0bDV0WW4iQFQ8Sz88Mip8OFlzd1MjLmFqdlI9SXU0P1EqbHV1c0I6eyxPKl0zWnU1L0FkUmIzZSJKVHhvT3JoSVspeUxgbXU+S3tZVXtML1I/V3JHVTAyNG9MVF8zImVPUGUpPDVtTVs/cmspd3RUYEtrJSUiY0pQN0hR''@;'; put 'put ''QmUsNTRFeF9mKGpzXWNTNWQ+Jk13aWhfXWNoX0ZJOkRqfms9V1lIcTI5YiojfmhUcTdwR2h8bSxzJlFxJiVgQGopIV80L250Py5MPkoqej9qJlJ3eGdPb0w+bTguZWpjdjN7P3xOX3NfVEo0YURoZTx9Pk9yOipLbTJYQ2QzcG04ITpTV1VzMGJwSnJ3JjJ6SSFRTyJVME5sdzAweDh3enJnU0Ze''@;'; put 'put ''Tm9AQl9BcTVvQDdbPHxnVihXTSU5Ok07IWUqQzRkJlR2OGJWcCosSF05a2gmNlUyNTdHWG43azdAMltzOVV2YmQpX3Q3IjFkIUEufXVBbDgsUFJVU3ZdYklhMW1MV1RiW2o3KiMkLnhsRzxJOzRTdVsqIUAzOFUxNjk3fEZ8T287UGllO19oKl5oXThSaEM+akc2cSF8P3ksbkt4JU1Rc3BQVVgx''@;'; put 'put ''ajB6Oiw0YHgsQDJqZlRIMStNRU1tP1JhfEI3M3dkcExRXm5RMktte295eUJGR0peZkJ7bS8lemlvMHdWRW8ualszJm5baDcwd1Y+cUxxez9yP28/N2FmeTteN2BIdkU1V10uYlI+MjMzPXZDUVFUUyJITDY+KUAvcyVSPjFLTDNkMT8xcWRYe1tOSTYmdms1QntaQVQsODF0U1FkbUZYN15MPipE''@;'; put 'put ''KCVTOHFxVWNRcF5ARylgZF1yXkBHYilCbjlhI0NwZkJsYU9OM0xVSHhbSi5qTjF4Z09vSlE3LG5wOHo1bk4zYkZHazZRbiR4eGU1cG9LZkwyTUZ1WSptZ2ZOWDprSjk5Vl53QixhcXBgc3FgUHhhZnlSPiRtU0JLJTlAUiwwa3ZoUUs4N0x5czt4WlFmNlE5SVUuX2wpUztOJDowZ0E6IzohaSld''@;'; put 'put ''NDZMZE1SPCJLRlMmKEN7clt8N3pxPy9RXzcrPH5LRGUkPCE8KkA5IyJHTWJ4RzdWWmJea29qbFRWMUklaylYd01bd0goLGtsPiRSMno5T1Ioa0A8XSVIInQwcmk+QFhMdV19T2hJdT45bVV0e29UTmd4OmFsb01jXVIuXXFPcV1kTyRAWExIN2pSWnh9VV5AXWcvaXsjek1RI0l3ejo5KSRzXiFZ''@;'; put 'put ''K1hCP15OWE8hbW10KzlQTDpOUjFgLG5ObXJ4OFAidEdeY2ZUTjd3T2U2VkolKzxla0BpQC9LWkdHc2p0aiF9MUJmM01mW0RdLHtybE1vW2JZLypZPDN3Vnh2IVNIKjAqd1daMV9mR0BJUmgzfVZyLH1jc1VBQVZQdHghOCtGJnpzJG50Xj42P2dyQigwezcmZkBVTV8je1c+SSMxeGY9UVU0eDN+''@;'; put 'put ''Uk1rSHczQHIzPFkocXEudzFkJGNScEk5cH0pTkxCe3I2bDkjZC5kekQ9QGh1d24ybHc+cX56YDQ9fE1YIWAkeWVWNTxGIz0zcSNGdjg3RGxEbDRnQmNmRVJZfmpNKz55XV9KOHhLJnJUXywmRjxbd2oyZWF5OGBWem54a0NTZmhwYEdgeDFtZTthNVJSSUdXOmhuUTFDWCNZZVBDSzhzcENlOzg9''@;'; put 'put ''Uig8emFlUEpMUyF3V0o/S0t8LEpQO0ApfmQ9R1JCXU9iQH12W3R3XWxdZXQuLCxXQlB3bUcxWCRCZ3l7Wlc2LGFCMElAfmA6QytPOkNDWXtKV3gkdWx9bVB7LylZZWlFZXBwSXV+dCY9K2hiSmwvJUM8Q1tQX0wiNWgmKUBVTGkmeVJIRnlneyNjSFg3dG9dOk09dX1EaFs5OlRseylNd105RHA5''@;'; put 'put ''TVhlODxCeWcoT1hyOGtEQF5GUWYhWFdUSHhdezNsdUxeWWU4UHM1KDJANjYlKTVDZjBtOXFVR0VBPVRASnxCN15rP0k2bjtHbD5KZVopbGdUWT8wIWw5cTtHbj45Y243THlbZUJTUkMheG5ae1M2USQ4Vm1TSWokX2sjZUh6OUh9PGdzPyRVO2tleTNwdTxZLzs/b11CUjZCZV4jb2I7RGdUSnpI''@;'; put 'put ''UXZHZj90TG52REkjXn1nPyZKakAjLzNRUEAhLzE5RmdlcCs4NmJnbCZlYlRxP1gvJj9pTlJDZUI4c0NjXXF4RWVQOFFQemokNDN5K318N3VyJEZxd1gpIXJtUndzOUpddX1lP2BhVEBENENDP1JRO1h0TFtnKyhocDBJWUt6SXojWSlfaVN4Tmk8ZjZaZX1TMnBvR35nRDNfVnglVGRkNGkvU0Zd''@;'; put 'put ''QCVzKUZycndrdzBxZEgrZVNoflh7cXNvKHtoazhbL3NsaSM4SyZEXUZUcT50OmcofiYxQ0FueCZQJkRdRlRfZWNIaypuZkF1NW1wbEJBJXxFUXwsKXZEW0s4RyNBUzsqYz55cnwuYmwhVW1VSnxHVyFJND5xJUcrWGhMS2N4L000WHRgMiw2S189ckl9LzR+KkJZcFc+MFV6VFVpVywufVZnNW1+''@;'; put 'put ''OW9bcXgpVCx6aVZHZEFIfXlGQkx9MU0kQmoqQHVHL3BvWCshMSFafC5pND9DRU42djspfSJbdlYlQ1Aoa31zMF5ROEZkb1R+P3BucUN2PUhiRHt1KEhSQUs7X3pEcmJhZFNYPzdJd1lyV3AyMT92cTNwUiMsWS91Mm5gVnNleG1SZj1uZFt4QSVESztFYGY8Sjc3Kzd1fD5UYi94fjsoNEQ9Tz0u''@;'; put 'put ''QGQrfi5iXSpfWCkjQiM2PnhWSUR2PUF5VFE9PD9yIz5MWVs7RHM3MTt6blpvUGNlRUttYC9OSU1eXXNxKn5yQyN+dUtGYUZ1fCJDb2xJUkpEcWppKSg9Oko1VHFGYVFOZGNCWmVAU0NBQDc3SEdNUDQ9YEk9eC5kVTVHXjVuaWFUVEFLT098PyhjRV1vRX1ZfkUwNGA4aiZ1Sj5TSmV7LHIoS1ll''@;'; put 'put ''ITVHUSxdY3VWanMwZCRTeThCW0hHTVB+Yjp6LFcwM0khbURsSl8uZjI3RjFHKU9ObXI7dTZreTQjMWokfnhRP21Ca3luYyJ4OEFXPCxBTmcqJjV7JGdIT1B3VVJmO3Jgd3dDQDV3WE1oW1V5ZEtYOE1yYT9vQTgicV1MQlV6biY3fXBWJS81STIyWkJTPWlkTDZxRVMpfkpPb2xtQX1ncWEjfDgj''@;'; put 'put ''N1pjUnQ2OyxKO2ZaSmclUEdmbGxwbGovdHhIQXhDKktANX1OfH00ezZQVmZyIW01bDZiNWs1TC5+ViFbViRMWWo3RUE+UzhWQjVTb3F7fmJfZCswPlRUYUBVMyxFXTJ2KSljLygucCk8dXBQZGwqRTdJWnUlUGhleG96fVcwMk5FbVNNZGZVNilbbG12az4xODpyQFBVS1JqZlo0QTBTQEFtX1NB''@;'; put 'put ''YjcxO1kuIyNHIk1EUDteP3hYXm43KVFgTEwhUzEpKkZaRy5rQ0NAMD9xJCRFaWBscHRSdVlfJX4/UUZjQn5pUygmazs+UGFzcHBOdlRoaDkjXnFRcEU6LGZfNSpkRStBc1suUDJ9UiptUld5WzxKUjY7OEJ5eEM6eE57TGg8bmVhWk5vMjJKPlN5VCVsL25uOzFCL0d7I1Q7YklwZU53OWZlWmNS''@;'; put 'put ''VkJzRWskZ352VHo8SEdNeD9iOnRmaSUsYkhTMn1ScFtMMzhbP2tAYSkzfiFyPih4dzomfltbZmhLY0UhOl8+c1h7QF5gSHwvSnUmY2lAY0k6ckFibHk9aUtnXn1gRVNkKzVlUUZePmNxcz0lUCRnNTQjOV1ePTxxOEZLeUo4ME8hL0s8XTc4bTp+OXBuY3tkSkVZJF5tOXl0fiNlPD9JUjYmRWFV''@;'; put 'put ''JjdwYyxdbGw5a0JEOCgoNS5jbT5QUHtrdik4YDBrKVFDVnBXJjliSWxhIVUwQTJLbXJiM2hjPyQxcXcmdEF+OClgSzheUzxUdk0uOn5vKUMsVj5RKGwpK0QxIUtpWlUpbnpCMGcrMjp+KmxlN2phWkV6V1dKRV5Zb0tiYXgoITBLPEY9PXY4MX58dSRmblhhIWR4VSlNSzJJWlVpTzZPYlN+YEJe''@;'; put 'put ''ZSRUfWsyfl5bcTUsYG9MRUdlUnN8OHV2IWw1YV08NUJdQkVgJXIsWTcpL3BtVDhse1dLaFRxYWVaTXowZXVCcWc8SnMsTm81a2xLM3NIO0kjOUhaZUtaey5EVVlCI2Y1dy4rd21xXnlCUHZOQk9SWGV7Qi5ibilOdGozMkV2JiVlQFFaTj1FZlBdOjdmOkgqZ3VpcVVZdD1+UEorfllwejE9IXd7''@;'; put 'put ''X31rUnl3e2E6NDg8NWVmc2o7VUw1LFsmVWsqKVNfezRAM1VlZV81UnckTGU9fHI/Xi4kbkM0RV5TSl5+JT45bTo0UWV4YF8sJjJNQT9GQzp6ZUokQiIoMXFjUSpEM0k9OjVNVTk2Wll2UG0oRmcyZnY8c2A9O3lNS2lDZ09LR1JlSlMrN2FYJGVsezFtNmRYNkRHLm9QV1FJWztOYThTNDlGZVB0''@;'; put 'put ''PFlOfVluN187b1BXXj99RStwUFdRSW11d0NobHVIQVBaYjBGUGVIZS95KXlmV3R4XiwoPyp2OnlwQEFbQVk0UUM2XkddM3habyglQ0xDIlJxKnVGQChBWnxqeDNDdk18fUA1SClyN1BmOGZmTEBWVEk8T2AxUlJINUBPZ0d6QXZyP2RAaVJFUlBmQjhBZU1yJXxOQ2UwRnhSdzJ2XWZJaXBgVXZK''@;'; put 'put ''OFAhNUMyLF0uS1dCY31ATHN7cUhOOX5xb3ojQVVaSTssI0dSMiNaRGpDbnlpdzFaZSopLjRDUSp1fW5NWEYhOkBMTl9eb28xN3ZvMDdoKnJ4ditBT2ZgL0YjKD42U1omLC9OWWJDOiUlOUomcHJ4OiE5dlRaO0B2VE5nQXxdR0U7ezBPZW9HKC48cHkwejlLUCs8WUZVTls+c09xSzNjPEtTSV40''@;'; put 'put ''dH45VDosJlBvbz9ycG9me1pgWVhkYD1bd1BrQjwseWlDOHg4PGs2JTpnW0dUWyZEcWpmfj8hQ2U6Y34peXIxR2IzfUBGejUmQ2RAPmRbKzpweTh6U2VFenAvXVkhQ1RTImZVdWM3ZUxtSlA+RVZgLEJuMiF+bGRlOjpoeGRkMmRxe2tKeGNZN2VLayo2JFhJMDpuTS47QE59XWpGPURjM2tHbjQq''@;'; put 'put ''Ml85dmkmTWdJaCpPUkRSTD5fMzVPKy5kb2B5Y2k8eVoyey5CcltQbVI7Z35hcExNfmFDLClSfFQvbHlVVWkmYFBRaXhYNHhHNUNRNyMle0laN11RX0NHJV5GL2Y0d35nX3UxYzc0SlB8dV0/Wz8vaVM2Nl4uY3EpeVBtcHpxdHl9Xn1tJjxWZn0zd3l9RVQoW0k0dStFXm9MWVlUL0xuOVJjRzNw''@;'; put 'put ''cCNUKW8pWTxZRXtIdFlRT2pbJDA8Ll0/bFN6RTU0TjJqaSxnM1NZPHJMW3Rje2FKXTU+bFlSKXVGfT9mRzc/VnBvLktMQ2VINVldRzhPW0d5U1FxWzlXL2hLVDJzLGxtNk4wSUNaR1o+MHswY0pKLGQ1cE9CYWtkZGRpeWEqRlpWdlhoO2RiT2Z0XXQ5RjkxaDZITFJWQFY6Yzx3YDkyQlglLHku''@;'; put 'put ''Py5XcVVYRlpgYFhUaF81SyZ6NGcxSypzXXpVJXBXVDRIPUBDRSFNcWZXPEBsTUZ5O3h6bXtwXlhhMD9OfCg4eiRANnV7dG95XXNtSHJjd19LezBrPltVJWglc1clI2E4VXFnJnY5SnJHNUxVLFE6dStrQlRsTXxuNkk6YTxwPlI4am1yR2loYn1UNSUuZWBzeVV4bEhtO1QlYD1aX2dmY3p1aEpd''@;'; put 'put ''UnJlYFBTWSs+cnZrYU95PlsmTmpxUVcjaDFKZzQjSG4wP0c5ZzVVXUJzZG83fms+Qz0qczJZIi45XzRVQTNxOkhzWnkiaHRQQGhYe3dDa053ckUhKDUjNVszP2gvTU4hOUJMOiQlfE18YkVLKkZhKWJuYypJdlpVOFUhW2tDLztLXzpWUm9MLFleXSN2ZSI8fnAyYFZUcTIuXzoiWyl5VUNmS0x4''@;'; put 'put ''Pjg2UmJFSzImXVpGL0IkWW47RzRlW2t8SXVMOT4+O3BfREJ4elp4KGoyLmVIcyEwXyYveDY3M2RpXSlgMCFaPyxWd2J0ciVha2tTVCgzJEZlQjg9blVAblpnWX0lYl9xXkdJU1F2WF1DckVLMWZrOz9KTHoucTVsUyEuSXJpM2Y3InA4SGhzS3xNW11iQEN6PUIyfkVCOjw5MH01fkEkaD9KcTFa''@;'; put 'put ''KTlfQ05TU0ApRjQjWEtyejRnc28ocD1acW92dFtSWV4+K3shTD0hRyZ3RFsuOj1IKjo+RV97dWE9YXFFZ0VfezNiXXs7In12UnhXXWZDY1ZFXlExZWgrX0xIWXZNSWtTYj0yRjNHfWxAYHlFSn44R2MmY15mPz1lYWclZjslZitFYUMsPThKPjI/QEBNX2JKXyF3JiV0RWprendIOW5ANmw+MEZ8''@;'; put 'put ''dGxpPixvUGxpan5NJEJ2el1jTyVDWF9JMnVsNVVpZVlOYjsyTCFvRVJONmZUT19jZzl0UWtNblZ3MFhAajBKbyEoY31DS3w5YWgsRE03MUsoJE1nfCM5U2lUUjpCVyRgP2x4fGUiVSMrIWUzWD1rQkg/MSVbIn0sKmI7OjQpcjJIYEN6Z0JmO3koZSs5MjEzTkJhQlYuL0JJSXYjImJYfD48L1R0''@;'; put 'put ''VS5VRSlbOykpWihiYTtsMjdMdHIlOm1FViEiKV1AbVAvMTA7cTVdNSI/eWdYOU9PNTJAfHswISUwUSRDUU5yVUJmeTovTFliLGVHUmlmcCk6Z2RoUmQ/KyZpXmtdaSVPdHJweHVaXyFWTnpaJkImS1p1cktnKVtbcjRhdkxKQjdBWzp7PHwlb2U6Ok1xVjZqXTopNEgwZlNnZSZOWkQxXldxKyxT''@;'; put 'put ''Ql1GezFePChqP2YpTiwxSDl9cSZPRihoPFJqaiNwflIjZXpuZSR8YDBbVUNoSWIwPUZySU1RbGEkTnk5NU89RnImaUpPRVEyVzNdSFJnbTQ3eiNCeH5aLmphdT8lZUpXYSxwKTtBPl8sUCNgaVA8eW1XYUJlYmksS15xV3t8ajFmNCx9WygjMiwpL3I1UjFfL0AqYHprbHsmelYhY1smRyRhIVF1''@;'; put 'put ''MG4qYUgrdlssLGs7U0lDeHFWflVBMnpCbUh2YSkrKWlJKT5xQVRYUzZ6JkNtOmZ7TkUsTlhrcDNqKkM+YF5EJVh6fkQiQFQ1OllMMyFJIWlTaV9WaVIxPU1TY2EmYiplMmE+NEJrOWFZUCkzcCMuTSpZZzNLcVZAJWsxT1M/YTw1TDxaT1AsdHFaPmtmT2JLRFFlO306L1VIPWlEISY+TnVJczw1''@;'; put 'put ''P0EpJFVVJHxANUV2ZXNgKTtAKi5ueE5dbGEhfWJ6Ojt9fnhnWjU5fTRpaDxgXmBybSNWfHxWVEYlQDwvRVlRRmVTKEx5fnxjWXpkfkU0bXo0X3R3UiUjRGguO0VzZVgzNFVVTnw5cVJSTiQ7WVc9MV5GbSx8OGZ+fERCZ0pnPjh7eGlHViowcEpNbVAhfiU8NmlQdC9MbjVNTWxuV2shU0IrVWFn''@;'; put 'put ''U0o8cEUmRD01UVN+aks3K0s6d3xpNEJBbT5+MVtfUXxROmgjfU5jJDlpPiRZTnVKJmJTNVp8fDlhZHtTL0ovKjooZipNSzgyT21Ea3BHblBvQ1AxaTljPkYrKW1oZTpacWBMOXAhPF9tM1dyNzZxN01vKixueSZ9U2MxdVNsPXs1SnUyaXVLOV9ZMCo5O0dianlscVlHNTJPTHYyTV1fMGAwUGor''@;'; put 'put ''Z2VOdC9lXXxQbHVVMlFuNUYyc1kkW0VfVXghPzpgX3gxXlkiZkNBT0BpMWVoKndtUj9WN0A+VXAzPW5oeG13bGldalchVyo4KV8yTiRtfG1TNU5qeGt3Q2Aza0J0PzZbV1BjcHIkL0RLU0wpWnVJQTlDRC8rUXc7VEFUeVoxQkM5I3hRenhpK0YmYkM1aTU+VEUiTGghcFYla0p0QTR3MkFUZ1Yq''@;'; put 'put ''T3RLOWNBZGlrIUFlKnd4QUcicS8/MTY7L0V1aklrfislZk4kKktGREQ5V2QmYW8hP3Q9QWZlJkJdelJUKFFLbkAvdDFjVlJob28jbk4kc2xwQl1GLCV6YUtrdUMxKG5kaHg2cElBMkpWKkFHUTJWb0hsYEhFJC8hWml7cVY1bUVBKTp7YHRRLHBvWjddLi9JZDklekRha3o/dldWOG9RPHBWJV5Y''@;'; put 'put ''NzI6cSFRNz87M1RAQChqfjB8LER4JWZPWDxKSmQ2NjtxUkhTMC5XcyxnXih0Vm9fIypDMVNgI35DUGx7IzdjUmxWSUJUWjBofWUvUE5qQjQvJi5BPFIvIyYiOT5CczApe2tTPzg1MnR8aVNYeH5OJS95MT4sN2xyJTk3VW5OSmY4LjteI2g3Kj84QHtXaX5FPHhKYEE3dmRMP1JfW28/W1c/dmpY''@;'; put 'put ''LHVAS3EmMVdvRixySEhfQ2gvcz9VMFhUfmRyb11kNjBMeVRRQlRvRCxOJnwqa0dSNXEuaGhlRGUkejtRPU9SWE1BV1Z2Klo1b05ObEByXXJ2MTJIQG1RXSFlNXlASGRuSSMiIkorOkB6QTdHNH5bbFEqM3lueUU1QCNldWIvSyM+ZF9eLltsWjovSyNWd09MSUVTWE1SZG49TCEvW2FQbHBtdlM4''@;'; put 'put ''RVhaRVhyJV9WNEo+cmhpRkZ1eSoldy9sYG1pSSMoMUs3RDlEdms6b29lbjtyKVQvWjBrV1NKanJ3T241NTkhVTVqPl1ZMyw+T1BBUTAsIz1WeFdIMTx8biNJLltpOHhjRDlBSHR3V2pBJmJbYTU9KEIqcGI9YDxOaD1EN2NAd1RxfFhAKF9gZkZRKTZ4IWpQQHlwaktePzlxMig2RWhlR0dkbTtT''@;'; put 'put ''SkRBL2w1WzU1TkxxOCxaPiVPIyo3LCE/NUdtQkBVYmUxcWAoYlorYTltaE8lcm5IQE5fPCpCNEpoSUhNUGldVWI9d0RfRz50ZC5nYTU9O1pBc2AoXVlVMj9qUHZGRFQ8Xk4vaGBhYiNASUw4YkxyOFo6ZEVkJDZ7blMlPnsjYl05JGVacGtKRXxXRVBoK286UmZhPW80Y3lYYixpfkVxcmVsLCxo''@;'; put 'put ''fUV6V08kRy5zP3ZyeGR6QVRjO3BLfi9EajErXnF6L0E8bE9AV3l1QEN6MjoqenckRFBDIkdtJFB3I342Z19qcHgqbmVTWiE0M1hDMiNtKWAoU2lFZUoqYHoiZEowJUQxRD06UzU8Y3ApU2lscmM8P3RPTSQ8UGt2PD0jTmBITytyVHMhZip5Pk5ELklLO193TTpHQT18a0UzOVYrTSpqO2VHUj9B''@;'; put 'put ''WUwmNFdPWmx5TVs5Si4zSSV0WkZaTD9vQUBCdHhxOCxrTXJUW24+eHV2Z3xdYSFkXihTK09hYFR7QEdwJUVPMkJ0KSZ+LCFgaW9gPzQ3LnZvNV5TKG5hL200cDtsTHhgZnNLT3lGUC4/R0xNSkxtTSVXdnFXRHlTcFJKbWcqdGxqVi8sSUZtNlBUND4oamBMX1l9I21dNEd7MUB4YnNAeHV2a1Rk''@;'; put 'put ''fDg6RTxEenJ4dnBJZykuXVl6XiUvbHZMQ0hFZTw9UC97aVErSngpeW4wOjM6bmVVNU9wSWc8bipTXUBuM2QxQUtJeXo0WjxeYD5RbUska1tTPlBNSn5eOlohMzUjZyM2clk+RFlQKUNdIlo6IUteezAzWTBoaF5kaHQ1M1A6bXJNZGQ+bFdQenRQQSx5cDQoWSl5QltEUlUvXTk0InwxYnFCLkAo''@;'; put 'put ''X1lkOUFxbD41cFk9Oyw6YD8jVCxPMCVrfkhDOnxzdCpsOzAyZVNERUFddX58cDA1b0gmSnhhLHdERmFufTx9TT1NTXhtYEtSdTQyalg9Kk1VMWImPCM9XlpQU1ZELmdVaDcyOHBWT1BkO3xbZFo6LHNVMmkzMHhQPWFuZjptImJ0flM6W3xnfVc6QixUelZ6TDM2VV5AfmZ+bChVTV1qNVFUKSwy''@;'; put 'put ''YH1RSXR4aFVpMihyMXNBdVc1a1gmfnc6R0NYN0lTbU9iWX09ekNifnUzeWhrVjU2aXVHImVqL3ZLUDBlRXoxV3ZfRD0iW3cpYXoxNXtKUCVQcW1rS3o4ci5jMko/TERtd0l1KWE/aE5tditaUEskSWdIcGY3T1NoZUJaemxrKW1ZImYyY0A9O2xlJmVaYlE6UUk7IUcqaGR2d2xBVXhsViVoQmsv''@;'; put 'put ''b31eNCZqRHpSM3tPMixzJV5pOjxAaEEuQWtBU0IyaVIqcUhJOyU8QEJfQXFCZUI+fWZIUF13QiVTbkduQXh7VDRdMk9qRTBlMmksPzdsVmo/IW5mQVA/MG8sfl4vNmlwRCZWaEcxImpqI1s+Vnh9SnQ7PENtJF9ESCpkPT1qZzpGZ3dPZkZ8aVtSOjdBZUFQaGVCOEFlQGozJnZJYzZnaEFVTjd4''@;'; put 'put ''MncpYGgrLm04aGlMeG9oSnQzfFZCOFtDRV1nWG1ma159TzhNRURlck90TEVJaGwmKDp7fEJKODxtMHBCUUZyaXBhOFhvejM5ejNYbVJpZkYzRmsjPG1UYmJ7IV0/bzpyWXNoJDFweTswa3JiWzN5YC4pSVReO01adzc4Z3A4OGtXIUVFKjFFSUp9SX1bbywlanc/ODgzOHcxal5aJkphUWNhZ0ly''@;'; put 'put ''emtgeXY9NDVIflZ3QjslZG5LQiZYbVNmV05BXkMlNzB+WFV1YnE/T3NhK2Z1T2l4QG5Kd0p2YSlQdmhKNE8rKiltQzosRHFuQmRQMCt3SGVUakN9a1dUWG9yQHMxJSxPOi8iZktERDwuNzYkbmEjJXY7ckpWTmQ0QCYyOzRJKHBuajtVSE1zN2dIfE9vdSZoWTdXVyJBM3Axe0xRW1YpaTwlYn1i''@;'; put 'put ''X11NUHQ5fCpFN2pIQDlIfF0jcCYlTipZNkA+R1hXJn1oSDwjdD5oPDQ2azdhR25xfTUqMl13alc2WTB8NDVBUU5OOno5JklIVXNDOncsfUgmPmdXbkAlPV8weUduWlpJW3FeeVFLaFBvPk53ZkFzZzZzUzJGUiM2OW57SHFVcktmeWVfLHYyNXhwM01XdzJLOERTdkl4eER0VG01R3ttXm1CMGEz''@;'; put 'put ''cG9jcC9uPVVHL1VVOElIPXI2dk9OYFdNOT5BNHYyUCpGLGJKM3B0M25QakZ9U3AzM1Q2cHQ5OTQ7QnA1L3hLSzE2SmVlSmhfU3piaE9oImAzfixqL3NFOGtXaiozeUN5W3k3eio5ZUpNLH1tQHNrVUU3LCZEd3VhKD1pNVRKbERmOzcoPzZ1TGQzWUl0MT9lMio2K1VtMVZbXl8jeHs5V0V+Vm5E''@;'; put 'put ''R3dDP1UqY04uIS44bkU7SFprUmhOU3N5LH4leCFOIUg8Qk8rdmp6PTsrLH5Ld2l5QjNZUHcuInVsS1lFTWlsYSE2OTojTy4hclslSCFicCI0TWo9aDw0VUdKKE1ZKmp8SSNMe1Y2NnY9Uyk5TmgifU5NdVd0P1lpfjY3XkNyU1ohO2NsPmcrZXJBTHU/cy9IcmxvKVQ7eHBGSml8Vnl1TWYsOFsk''@;'; put 'put ''d0swOncxcmdrdCFwIjRAcHNZVUY5N1ooMktCR0RaWF80NXZSJWdESFtacjxZKDhKM3ladnVSMF83c1B4Zz1gWDFbTk9vRmlBImc0TXFJP2FKUTxVVyVdLDNXOypWTkw/czRmdTE8dzxdbyM6ckh6TztJdDRuYXxXI1EreiosXj9BVH1iVz4sPC8qO3JjU0tNRVIwSnMhTS57Vyw8KnhvL31peEc1''@;'; put 'put ''dDY7NilaM2x6NDImRlNMVnlrMypRKk8zO0c5Q1A1RT06fWJeQDgpK2l7Pl12UF9xbUxmVFlPblssISpROnVMVlRlcGNIP10zPj5NaGxvRjc7PWkheWc+NiN3bHBLOm1PfFB3SnkzbV94NT1zey83TG5kd3c5T19EVWh0WWI6cDAkXlUzVWBSZjFyWl98WnNSYUkwRig2K09KblNmMHhGLHBYYjYm''@;'; put 'put ''ZGlVdCFdfjxVWUtLcHBdaWQzbSRRRDQ0ZTUvIktMYmRoMm4vQlp1VnY9KnhkMGg1YjRCViJGfVprY34yXShIPzhgK2MlW1JFO1YjekhGJSg6K0xGSGhULE9rU3Y2OCF0XTVPNjhgUzRuQVdzZEJBXThoR0tbe0B2RzQ8KEJ9S1tZc1hCaWZhXjg2dkV0MCg1M3kyM0U8RjlNa1N1OUUlLDV8dHg8''@;'; put 'put ''VGBNMi5rMnVvVn5jPGkrUE1HancxQ14zMT1bM3ZSOlk4PF9uYiF5JFdzPjdXN3R9YUJfe29iPG43Y3s3V1pwM2ErW2RUdT4lYyFpQ3ZGal8oSmFYZFY9UEx1aEEoVllERWh9VndGTWE1LEB6TzhmISM9PDA3UCNDdjdkMmZJOiRifnJFOjs0U2BzS01PY15SKks6UThTaUc6TktLVG46eTQ5Q2N3''@;'; put 'put ''ZG1INSx8JGd7Si5MfSlQWEJdPktuWWxCM1tbT2RpX2gleSk4cEdYbXphYH0oTGlPYzpadFg8RDQ1YSk9T0B9JEtwYmVbbjAsJVM7LG1MSEhhS0JkTnA8Y2tQNFJ9JWU+KCNbe1FJIXBFSSJgd216Lzk8c3tNR2NUSk5xXUJbSlomQ1NjXWVVeE95VHlacXNNLG87cCN4LkJ3NWldYm5wJEB6ZTJZ''@;'; put 'put ''ZnBtaU9lS0AlWXBSdVUmIlg4YWB5dkR0cSp9QE0pfFtJOmE2NX1lV3xbfUtPcW9pNyFqYHReU3oxNltGWz9je1JEajpTSyg6UzNzM15aeFBlLGZQQ1JHd1AxUWpSPEghYzApYHRtL1tPP1pAeXdrNyFkT2tVKDdINzUsNHI+ckBSZEpYdyl3Q3BbfW9FKmRHOyo0S3dFbkAoaFI+YF1VblN+S2tq''@;'; put 'put ''Y0tRNVlbfjlOX319TlNOLi9wPTBmaGh9PGVHemN1ZmF2MWtbXVg2bF5yRVkpdzJpUTopdlUzQE1tMmJ0O2F0MDUoNCsuWXxlVnFRWSxlQDdEcVdQOiIjNXxASU5CLlMsZFpbTVA+enRLS09Ja1h1dFNKfjNATEtSTHM2bEdzaG4pRi9zNTEiUTUmSlcwY0pqWzduanJKKk9LNzIlUmtwNnVNMHo1''@;'; put 'put ''bDwrbyk/akUrW3dUPzgoP2BsckJUTjg9M2NWRUglNC5lVmo3e2FjZWwicnIhLGBjPyNbTi4sdkdrN1JNeF8mVjdtN0F3dEx5OzpjfmRybyFPK24uWUk5bl9Fa2VDWk1HODVIKkA6Qmk1XXwoRFM6cj5COm95WEo+UWA9SDA0YURSTWRAP1A0Mlo0NXc8L0kvMT4od2p5IUEjb1hXPCxLJHVAS1pl''@;'; put 'put ''SGUpfHl9em8/OX52dFswLiN6cWZPKDE0MWlIaS5WK0s5OHJJYihAYHVIPz5xa2FPeT5FPlh0bUZ5eEFYSWxHYSQ7S3hBVCVVNlVdM0EwVkckaklWUmB7KkB4OihAaXpyUitieW9vbVB2MXImUX5sKlBbaUk0dX1hLEdUJGdYVH1Nd0s+SDtFbGB4fGwjSlold3xlLyEuV1hWWjQwNFQuLDZwSndg''@;'; put 'put ''UlcjcnhbUVF+M2FfOy9oSWdaOipVY2txJkRhWGJ3dGMveXNBPDJLITxxd2d3YChoZlErJlNPJUo6KmUsZn1sQTJIOm9vNlB2MTZeQUklQl5lfHFzc1d6JGNDbXEkcVg6aENrW3RAMVFyVXg0IkA7VGxoIUg+VGhMUGZAXio7enFFM0tXcF4oeWRMV2dYRHsqa01ePSE2bWNmISphdyREP3toRyJV''@;'; put 'put ''Un5TeDp4ZkZ7Jn5oST4/cHZTX3dHPiMjMVlOO0Upa25FaCxHOlNUNj5fLCI5T059aGZkfS97dDhfN21EKzJfX24qJWo5VSJoKHdEKF0xQHhVIWNlTXowJTU2PTk+eW06X1QjXillR1I6fGNDI2ErLFlEZ1t9eDFYREZSZGR6dUl0JnZUakV6UV4pcWpnVlpxQS89Lm5fQzwxQD9nTWY/fG8/IX44''@;'; put 'put ''YCJHYmkvaSFycG4mQj5Wa3ArU2FiZEJTfCZfKlY9cU9zSzt4ODVZIjMoZDVwJDVMLDJ3NUxAMiZgNFlFVHhOej8/WH1RSz9SYHpLI2cxQzhEcjR1VGUhOkQ9dXpdSVZHKz1CW3hSYz15OFspIjp8MDQ/TX5XOWVjTCImTzUhIUNEQEVBNHhsInZySHR+YXtkO04kRUNpNWVPRXczfTIrLDdWZWZ0''@;'; put 'put ''eDxqRUJ6V3xkSzNCK1s9SW1wKko8WDZ2XVdrb3FsRSNLd1osKkBzJiVPd00oeXBseWAlZ21ePWZzYVRHPSk4ZHlCRUdmXUhUUSQxTH56aThMTjkuaCRjTDh2JTk+PGMqdTsqb3VPdDBYVGl5SChoRXpSVnZ9N3tjY1FwWHY6L29lSygjdUg1LzprbVooTHhoYk8rUz9iOWNTcl56VFtTJlR8eUxP''@;'; put 'put ''VmsuNjwyfCw8Tnl2SnVJPzBqeGdmeyhWY2M4NEsuemosYn5fZSlXJS4+LFUjVFVOX2guSnQya0lMYExpKVN0IWheNXVEaEFCXSVxSUZ4TkopPENAUSVyfVlAQGBkY21tRndXOmhCQjRPYjE5OmRSWXJoM2Y1OUA8LG9gNWFBRyFmZ0paZT83c3dvXiVBKHxrbHpWSUJyaHR0UWJ3RG9pN3J3RU10''@;'; put 'put ''K1QrTzNEdG5qem9ncC5ESCFDYiFOUFRHbSpqbD9eKGFWW1NCXSROUyt1YDRNeiNUT21HTzdbfFIoSG9YNihCTmw/SD44TU0rUU9eOVFFaHU8a3pvN0g8dGpaPHR4N0AyPyRbN0QsclVJQVlMOHkzUTh+RWJqSF5uZitGQjVpI1RDZ2dKMXElPXMxby5veTF+PVlYYy9oMUVLIWhTO0Y4UEw6XWEu''@;'; put 'put ''ST1YSDhRb1k7WWlLaGRsL1JLVlBwQkJlNWlacThqdThJIm0qUT1ySi59KlApOFtZM0FHX2hecUQqOT86PzxgcUVKWGJRPC51XzBIWjkzWVBsPj93UmxPNVhsfnBvPnI/ejFyd1NHN3ZHVnkxR2doXTE0Vj5YQS9CbSFzTjhnNlYqOHd9OkYhQDVAVjVLSShjeHNpUjh1OWJzUFdLZjZtX3w5Ql9j''@;'; put 'put ''Y1E7YD9rdFlUdEA7QzlgWXtQO0NmWSQ8JFZTKyY7VV46UVtMVlAuczp2N0t1NFBnViVibmRWPUtBRztSbm4pY0c+Tj1hd3xYYWo/LnVfPkJsRj9ORURyU3o2Xjl9OXEieiEsIlIpTVZbciJYbzQ7P0tUczg1fDNVWT0zYXZaTlN4IWg6KkopOWM/TypMezVSM2V0OHNYU0YlfXxCQUpQMGgzV2ZY''@;'; put 'put ''YipneVp2Xj42MlZiJW9mQGtnK247cV8+Km9Ab35DanR7Q2V0WV1wMSY3OTViO2U2VjVYa2kxMzh8Nm4wPEtIcDFvSDV9UDBTPyZGblVOfW1ZO3NwV11Da2ghbn18LCZ3MXFGWjU/RyhDNy9aMk5oa0tpaXtFWF9UP2c4cDd1dUMzL3d9Yjs+NThudFRleDhEOTxLXVc4RTNNYX51ZTNNbmksTWEx''@;'; put 'put ''PyE9M18uYmRBLC83W3E+Z2VvOlNCT0tTIWxmQFFQR3JmM3IwfktXVkcoYWxeSzpTMlVPbSV3fTxjMG5YP1BTJW5zJE16bzAsOTQoWTYsaTVQMVgpQ2F9Z3FRKDhjLjA2cmd7SUdFNnp8ck1lZj55clRfVTt5X3s9VC5IbWkmbERvVm4/R01OTntAYyo1NT1yQmdqYD1PXTUoNFl9TlFzVkUrPTdg''@;'; put 'put ''WU5XJSN5O2cmXkciLDlZN2w6OXgjTERwNW5gKEtCZ1YjcEc2NUJRKmdxTWU6WyVmbmB5dklMTisxanZ5Vn47d3Q3YUF8OlFnPSt1O2VUVTY5I1Y5LjosPzgiVUwsWnFkKiNDeCE1Q2VWQ1B5VnpzZWBFOFtmImMoWV9bTHM3XT9tTmdZZStmfWlgWTtgUDROJitwdF1DfGUvQzB4L3VyN1p8NjZA''@;'; put 'put ''bk9NL1VwM2QkVl06THIvfHE2MzZ+ek0jZ3UzNkpqMHombyNpbj9BNWF9dksiXSxkMGcwT10qdHxQRHpRbCk6RixQdlMmTkIqJUopWFsmZHhSQnpJMWVEfEFDe3ZCKWttdT1tXyExKHxvOnFmQ2F2ez8obD9vN3V7M3o+X0FHb19wdTF2VVUzLFpZVyVJUWpFRGkiN15vJWxZYXYySDtlMiY2MWs0''@;'; put 'put ''anB0UWxmL3JVO3p7TytEJkczZzVbZzI9LHBVK2FeT34lUSQ0TTxxKmtMbjxYcFJURWB9W2BdcDFFWk1TSVRKS0x0dyJWOmZxUTt5T0JWVERJImdOdyhNOjd7R2NGVyZ2L3g4TnghPng4Tnh3QExFS0BJNEQ/MjRZMEIoXV8kdCReSUxuYDVoIiY1TGA8OzYyOmJKNDNKIWc7Nyp3LiYiI1RoN0FI''@;'; put 'put ''RSZ4ISpBYSpCWVMsYFFHPH0wYChPQl4zYGBuWH5DKHJqNlVndlB3Tyxbdy8zLkhvI0dERG4oWURCMF92ekJadSVxPlspOTBjbilzVndfKX5HQ1UqInJ7b31eOnhdNkU1YkUsc1FMQmkjOCgqek4ifXd2TTVeTk8xO0BGZT9kaEYyRjgoLyhncDsjW0B4REE1VmhfMC5RYz86N0YxSyR9ZT1DK0I7''@;'; put 'put ''VnNINUg6SyNqJTkxKnpQeTQ/byFgNjg3SCUhR2BeVUlJS31tVVR4YT9oNDNETGl7LkIqQS87SFNPMEw/W1Q/VGlUJCE4bmtMJU99Iyl7NllGVkNqYmlYJixhcmxgZ1ZgRDhlfkAifWo1TWgiNFRxYzFNS2FibGA0VCFbKUw9I3xHI3FXV0p3X1YqdWtsW0l+RiRxNjRMZCNGdCx2SH1lJW1pKnQ4''@;'; put 'put ''QmcuYlJWdHlATGJ0UVhWOTFkfEcvajwyYywrfExOTX1bQjNGOChVKjI2JF0hSClHbTJJbVhxTF8/aF83Zik2fHBiSUM1S0AiYkdNN3k6azNkLiYob3RAIm1ER0JeKHw1cSYhR1ZoNkNmKiNNWE8kLikhZFs9fnxaX1llUG15Tk9BZFl1Y2JnUGxla1l6dl1kQyFEWlJ4dkZ3Q1A2bD93OUA8N2xC''@;'; put 'put ''bS5oLyE0YzVFJnx1QDBhNmJ+I0kwRCZZO2dTOkdURWZdclY2SlJoWEVTOCpxNWU/RitnIXVje3UwbnUvUT9HdnhdMjQ/RGVtZig5fltAUDFpSGI5KGNvXmN1a2ZjY2g0ZiRDbXB7NCwoMylxL3tVSjhrQllHKD1dfmZEbFdGdHxsbDx9Riw3Q1hSNytpUVkoNlF+Knd6NF1waV08K0ViVjB0YlQ7''@;'; put 'put ''Vn1zbSNgZyNXeTBnakwzOTpeS2E8TnMreTVJNjI/LDRjbEVdVVJFO2x8ME9SMklaRHJ3QzkpVlVbVjQpXW8uemU1KXRFbTJFc08kfGFhKThzdT1GTn5yKiZASTAzUXNAQyo/ekBbRjBIeltET0VTTWI7YnZKS0sufm17JixEe1ZPeU19QlU8UV5GcEd3aCMrQjt5RmlONT1SOChaPGdgKHxkUkZ4''@;'; put 'put ''dVNscG91WCo5P3hlN0xIPXElPz13cTNvL1VLZCtkRlYmS0cwanRgSHZQT0Q+VFpuYUN7dHZJdDNtb1F0RkEzMVpDPCQ4QyFoNF9HbSQ5dlBSbFQ6PipVRFBNRDEmKHxJQ2EvfkEqZ0RXWml2NVAjY3d7MEJRNEk2Z0RtMUg7KS9uS3c0YjY2VHM7ckpFM2VLbG1gMj5QYU1nJG1BbCV4bjxKQUwz''@;'; put 'put ''QERaKkFnWDVtdW0pWjUkZl1BLkZhQCNzO1MrYExlQjhBZUI4QkxUSU5yM3BDTCsjOlFxUTk2WFM6JTx6MU41NGspJDQ2aWspVGlgYls/JVchTzt6TUAuSktVN096SElhKURQQ2Y4fGIrdTQ/X0NSY0M2NiZvb0FUJVU6VTtIdUNyK0Ntfl55X2xheyNSSVM4RGUyPzIsP1Q+XXNzJFVTYSZEVl0s''@;'; put 'put ''UW9Tfn1LQ3J8bmg2Jm9JNl54KE1fbGNRdTs8UVF5fSpJaHY4LzZeajczIVIpX2AhSDpLfFU1ViEhKWFPQ1BJNWhUaU1fVEk/InxlI19nZnJfeks6U3wiUilQY2F8cFckY24hRSFJLEBJeno2d0RZTCZ6e0dURDx4cV8iOU83NCZYIVZSbHozYFpyVXYyTylBbEUpVHAjakVASSU5W15URDxKaWZW''@;'; put 'put ''ZnMuWjhlb04vLkwwRFhBa3ZUJHwiM3ZUJXwpfix2L3FuVz5qfVJCMmhJPllYLHdKZGU7QFsvSSQ9YH16MzEqMShnOzssalgxb05pMnxbQnM0NkZCVywqcSoxYDp0bDU1OGR5eldaKXh0Nl5ONj45aHJKNzcpdXpSfHxBM1MyKzhfTF5kYltSMmVWIm58T3luIWF7SE1LUTV0fkh4d29yelFLSVJ1''@;'; put 'put ''Uns/dVJ1YHp5c2FfW3UvbTttV0x1YDRoQ2B6aUtDPGYpQjVgOn12Qi5XeU5aRDhMSjwmcl5BZ09RWVVRaWlvay8qMUgleFJNNCh8NlghVnVpUys8UVMzITFNMHdbU29CRT9hQnM6PWQ+JlN8SnpUKlo6U2h0TEpERjQ2bCw/QmZEbkl2W1s0YmFJRzRTfGU8VjdyTDJvOSVgW0Y/YEVqMGk6Y0Mu''@;'; put 'put ''OGhBbEVta2kmOjIxSGJ9eChTYXtsa2N1Qjo4dnRHezt0YDs9TDVVXStoXVVfK3YjZD0+R0tqc3swbS53a3VTTTYudUlhZWx4STpRNW9uWU58dTQhdHBEe2gvfj1STyhPMiZgQXdqXl1PO0cwXUteKGYwQHFSYVQsaj5NOEh1VDYiWE5GR3Q8NyhURD9YeTYzImhsclsrPFZ0NU8meSElIkZlTypy''@;'; put 'put ''dW5dKzRMfnBeNTVJKig8elZfSzNdJVA1NGtISkIyNDdjPkojNXwsQ2UrYUFTQ2p9a2ltJXp1eF1pbHJbR3UxPkdBMj50JkJEQFgpQzQ9dFBlPVk0Z2FPXUAkdXI0Y3lARm58LGJ3JCokSCQ9aDhQK1FGUVVZR1IkViVZVVlQPHd3Jl1dU09DYnU+QzI1b2gsTVRlVil8M1YvP3J3fFBwOUokSDMs''@;'; put 'put ''WT5AW0hUTlF4S1gqQWtIaj1xbktsKldDLCtGZUooIlojfVZycGh7YlNMSWM2OWkvR1BIfFcpdyZBNSR6JnxUUEs6SHNHdm1YPC99QD4oQ31rWEkmc2lEfDcxRVtPT0hYMUtsNy5kRFdoTE5kbzQ5ekg6dStVLnk6VX45bldUbXd4WDdbTCwwKVgvL0xpO3VIalpLMC9RVih6SHZBUmN3QFljc3Qv''@;'; put 'put ''RC8pOmtwTEQrN1cqJUgvOksmWWZ3M209aj9yTCwoOEx2PTQ7Z0wqQVVodFE9JX0oZmtyVTBfWypqO0J2SGQ5OGl9UzU6MzppZVs5IXolaVQ3ZF8sJisxen4sMCx8emVfN11wc11PeCx5L0ZhPClDVGdsdGVEOWF2a3A8am1FOzdVWjklXVFPKWVFKDtDZUZCZjgxKj9xbUVXWHYqTSRRVmtJI0pd''@;'; put 'put ''IXZ5NEldZ0pObkNbaXUmVklpME9JaTpTYCZ4fS4mJSJJWVUwaCRwbyJ6PUYkUER7Ozd+Oj1dKDhBQkV2OWtIez9YREIqRnpOQTUvX3t8ZkZYNTQvXSQpK2E3eHxdVC5wMGA9ayJ2ckhnTHdZVTVUaXs3OlFgcmkwTjkuU2hLIXddVTU5M2pQWFZOTmp9SCIuKiMkfSVmX1NuL09QKDpvIlRHXVJK''@;'; put 'put ''eHc2MVMwR31hRCNqOWw0MXc0YnQjJH1lbFVMYFBXMkF1ImU+UF9LNEYuTlMrfSs1WjgjUU1BXmU3anowVkpvZndxPj4lMlhxISp1OHp3ZnJyayNOPFhta0NgZEp1LElTaDooU0haZzNCImxaVyt0RSY4YjUyLCQ/Q3tLfEJvYXMvQj90TGcoPUxnYi5ONmRZUENFfWV4UGZtZ245eSUwNCNGQDpP''@;'; put 'put ''NnkpWyM8QjdbbmxKeGFAR05md1JsVWo8KFU7YVs0STtpdE5+eVY8dldPKF1MclhPQ0s/alQrWkE0ZDxyIUN3YDxsQSpbM0lbJVM7Ty9uWipwIzxLcC96M08vSHo1PT9LO2FwdCtVWW91UDE5a1A0cF87M0skbkBnU3ssMHUpeTRte1cjV0dIYEZzSVZhRTNLbEk8WEVXaGVUOCEoayZENHBdK2Rn''@;'; put 'put ''OW9HanEvT1A6S051NltPRSlZPjtrSHxtUyFibSteLEZsIjFCLnddbCpaYk1JIjlYaUtuKk1CZkd8ZklEaWwpVChiTExANT16MTMrOGdtUTUyM2FtRWc7NkNpQTc/OFA9YiEhNiEsRkQiKyxyR3lxLyY7LHRvPXQ0TV1AL1BHPlclYCVsW3UwRFJiVWd1en5sNlpfYDVpRko8IV1CJTRDIig1Oj50''@;'; put 'put ''RWZ2bGt+NDFiaCZwOWI1RXV0WCEjZHRfOS4vaDJGUm10OFNoVChOM0FVWERMbUUhO1Y2PnJ1RiElfWtOdDImR2U6R1F3JHhnL2Ntd15mdkdwbyooL3ZTL0I4bT4zOD10flFmSSo0Mm1RWGQzVjYhQklwUzV0dDJGc2syaEdodSR+Riw3NEdKIVg7S184YiwsYX47MllxJWcmcFtPYCtRcUBoT2pl''@;'; put 'put ''SGVfUiJjdkRdblFUSXxXMDM8Z0c2ZjY1bDgwVzJ7bSJ0TzphdW5RdV57ME5SW3EraV9gYF1GZj42dUheSyNYWCgoWSxUJEVQcXBOOkdzTzY+cj5Ee0BKJF0+R2Y/Z3F6RnZFXUFhR2lpYUk9Wlh0NSJ+P01WQW9nRWt1SFZMNEc+bEJYSnh0PytnRk9Ve3w6SjErZG9DflZ6bSRzcyg4YlJoIUNR''@;'; put 'put ''YX1DMnJae3xQQ0o6WiZVZDNXYnZ4WDFFZHVYRmtXZnBqV09pN2xZS0k2bTdTYS9rfn1fZUluUjFRQGZpVncoW1NKUWVTWj8xTlB+IkYyTXUrTlhgUWN1WXdMKVs2LD9VeCFjeUokLmQzV3ZKMXI/YHREeFU7RTJ2ODRiTT5GLEdPIX5ebFo4bzdnIil+fXxbYGwrVTY+d0JTa0V0TCk1bEQ7a31G''@;'; put 'put ''RUxwXSNZTzY2VHQ5SlVhNmJUUGlYJHRgfEE1eC96XStSTEhWYTI+JDRRbFcrMjArJUFlO3lkXyJwbkIuZFVzM3o0d3gkfWhldEBgUldMeHo0RWpOck5GUHZ+ZjMpYlRuPyskQHZdZCpKLCpALDozJGNybWtZY35RRFhfITojKVdEZ0tfdUIzR2giJnNQVlhdQzRMTkxrUV1POy5iRDx5PkJHKjB1''@;'; put 'put ''Ym9SdnRwW3ByT3NMfkJjbklCLzd6YFF4Zz5fKlN4SGUwUGRlVSR0clouJmJMQmhFdnVJZjw+JUl+OzkuQyVWWXg/U3MqblFmY3RhZUhlQWYzPnpCLzdJZSNVJjlGSE4xJSMzWWUoVTEvRSx9M0xIfEJ7UUo7RDsrT3x8Qkl4OnZlNDlmXyJpMS9qImlOVDtFPlhBISNGVylVLlRCW0ZTTHhMQnJT''@;'; put 'put ''SDxtVz5ZW1Z3QFZlImNiclQ0TGNzK0xbLzB3UkJeVTVYPH4jYGtZOkR9KzshP2A6Y1EpMEV5KGwhZj93OVpbI2M9YGNpNVsvRS5YMFI0alZAOlkidiRte0lEdl5SPmRsNkh8X05GQF9GPUIqMXBpP1Z3Onw5ZHYoU2cwYHFjSnQ9OTF3fDFFQTZzW3NUVVcxdGovfi4ycHNzYDI+YzMpYUAwTkBK''@;'; put 'put ''WFVIL3E9Vmg5PUVfaj8qV05yel80ZkQxYjM8c1Q8MkVQVX1JMCo6azRKMVZ5YEk4SUY9aXBwelBXKWg3Z1BFO1hnKGoyQlhXeVoqJV5gUkA/LjdWeXIiLC91eUhPJl45N1hdQzpQXyhjJEFlOERSZjNlfG5CVkNleS9XYEReMHxQX0ExIWFEeShNWi5pS24kTzwqN3RhUTw9fnImNTIiaChKNmg4''@;'; put 'put ''T2s1XmcuYmVfTS4sdi5qNyteQkJdJmU0SVF8cUF6Jkd5SmlBaW9fJWc5S3NhYzl7NyhbSy8jSUBFK34qYCgxQVBHW1kzNW58dzFOaEcsNVVXUXlMM1FQMmkwLjksYFplaTNdZD5pQjUmRSZuWjlqcT0zdkdQKiQ4aEx7XTwmZENOPj9gXndhIU07IkgmU24hXks6UEZ2e0gxPThTZil8TC50SGFm''@;'; put 'put ''QkA6LEJbJSp7WTt6fnx0a2BxPzZAZkBQfi5ZSkpiQzdQcHIyXyRLY1Q8ekUje0RraHRVZnFER1tzLGxvRy5GLjdBOTZ6VFdueSNDcWI8RF4mIj0ydiY3VXNJdi55TnIlJEZpIVFDfEdfOmUlVDY4VUE8fkd+cjsvQVleR2JFI3dWVWx5PixHak9mbC5qN0A/a3E0LHh4W2BrUHw7N3N9R2R7L2NF''@;'; put 'put ''T1BDUnViZXpwP207KSNoYFYiJms3bSZnQzRBIXgscCgzL2BBJmZiOWt4PntXd00xYyVjZixlWW9RYlJtMkY7PDFTXnFvOzhtfXRIQW1HX1FJYlMoRElWRjtJay84eW96VitTU0VFZERUOz1TVyV6SSFqNUxXLH03Y2NvWXtXZ3MvZDN5UnYwOHtkdipge2N4cCt3JXJfR3ZtMFAqZDFjfDYiOkFC''@;'; put 'put ''em9CVSlYOCYmbylTbChoZTI2UnZhRnBoXnleXz1hNHZMO10zNlI1fD0hVH0qYG57dVtBLz9dW0o4MEs0OVdKVyx1YD9+S1BUYE1GI08sdkhbYztVUGdlPGZLfFEicjQ9LitPSGM+QWVdLDlTSWUmJTxpOUlmb0k+aiM9PGY8OEliWVlGbntUZU5NKzlhIVZldlEvVWpyUWVUZUI4QHUjWjZqNHd1''@;'; put 'put ''MEEjQ2VFOjVqUDY2Pks7WFY3P3RzIWpmajtgbXEyRiw1c0dQSEd+TD9bbj1QaGUxVyEpPmsud3QjbmZKJndhVDV3QGY8REQ/e0B1Mn52R3kkeDlIVEtoeXNlPXVyJVVUYVk4QyVxM1UkNy8ycU85YltHOVkyWDN6OVJXdmYxVyhsdHVfMFl8cnVVcEIxJV51JGJbUSNfVntmbzsxOyglNzk+Xmo1''@;'; put 'put ''Z2ZsZUllP2c9IXtNKEV6bztwNV0hLHAwOFpFOCojI2lBUE5yQjhBZVVYPWtwKWBZTXlIK1Q1aV0xWU87VFtVJlZiNCtraV87WDJlOk0zRDJpcDklMT4iJGVaayh0UmBmTiFFOld0PitvKnZ8VzhlbHJbSHNDNUFwOVU3SCVjPmpCOEEhYVlSKF4jbmZ8ck9VPGNYOH5kdH1aS3kxL09VMGFvNkw7''@;'; put 'put ''anJpMF9wY1MpJTtCZXk9TWA4IixZUmlePmI1JjlRMCxiODNfT0RQJnlmV3R4Y1EuQ3J9MypPWklyLHlPPCV8ekcsS2NqOSV6SCY/KXlOOCl5VkBsUDklTlkoMFJndSlwUWJwQGosdV0uXSFPRUs4YmYuMHlpfm0uQXN+Xjk/Q1J2PSFVSVRqRExmRWQ8b1dLOz0jLm5wZzZ4X29HRHVwS3piaSk9''@;'; put 'put ''ODtrLD0mSEU9LlcoSnpSRl97VHlXaUljQVBWdmxZbSJbPF5re0ZxXTZUTDljOlhwdj9aJi8xeHJkMiMjcF1oXz5xMjt5YylheTEoM0ZkQjVRdDlYUUlkSkt1dy8qOj1bKCRKenQ4RltFNSJYZEYrWG9MLkx5KTJuSz5sPio6K1dBWixEaCkvKEJ0flkjdlJWb2JsandFaj86VEdfWF0ueig+dDpO''@;'; put 'put ''Jmt4Pl9BRzxvZEEvRCZiOiMjWSJDRT9eQH1JTExER3xaIjFPK0Jxd2dkXkhqNSUwOTA+d0JdS14+Om5lTUVSM2cuTkB5NHhqaHxDTGo4O0dZTih2L2I7a3x0NDZdUCppJkpmZilkXnVsRWZ5cCUpMmNFUHFnWHM0XXJjYT50ZXB2fDd2WiRyPGljZytQcC5DKjtuNT0uWzteXWolSENgOFVlTy84''@;'; put 'put ''Q2pSeGh4UGU2MUhZI2xTNUkhLEIoXTtbIVhOfEt8Sj9HSHVaZUw5VWQockdJJDlyVCt5SDJ3YHdWPldANCMrfVpHcTRmSyVIMkQqaV91R2BsIStIUGUkdm9EcDdfIipOOXN9MUpFVl1hYnFsM3pBNlkoYTtzUT42NFh3VzwvJlNiRFl0Ikl2RGtMd1c9XV1jQGFwNm9CXz5IMHg0anVBXTZjSjxN''@;'; put 'put ''R31xPWszLGVfQjZvYj9SIlB6I1M0SSl0VWJJc11RX3tlZz82W0BseDZuaXxIQ2x1THdrZ3FFaW9Remwqd1lKTHxWdkw7K2Euaj15ZEJQZyRXN11IaWBiJHlhWDt4bnhSOjZ1QlprOlk+bjp1S11PUlV1eFEpIm01PnAwZkZ4dm05T21hRGNLeWJbPy8uYj4iWiNlMnJtKXcmVGlGO0hzYiE6XTFv''@;'; put 'put ''OzJlcyM1cVc5dS9naVZXMnQmZGRCTUBFb0MsfUhsblJrRGhNd05weHJlKyx0bTUobzVdZ1hqPEFxP1hQcCRWJGljfGFWJU9OO0ZKdl4sYHttJVF7YDtDTXFqdFlNVm90O2kqLFp9WX1jfUBVUjhEaVFSbEs1Zj5OfHw2THM0dGJLV0BUVy99aXJ0L0ZWO0RSNnxiXl8peERiOkpsa1FIJG1lOCFh''@;'; put 'put ''O2V9M0xzVF5AMTlWVTtxUWMoWmghUH1EWW43O3FTaGhEVmRANStSJjY2NmhJfW1dTy9GVlhLS09PIzUudFE7by5VL2pTSi4+aD50YlVVfEspMk1LS0BhdkxJUmhvR1lSS0d6Qj5RYXdkRDZ3d1JCX21Yd1JCRixuPlYuY2t9Um99UzJ1cCxqRkgwSjFEfkM0TFp8Rlg8VHA8UThIS1JocCZGXnNq''@;'; put 'put ''XTxpNSowbWE8b3lxOlpsKURsNDJvb3VqfXJxT2dYX2dDY31tJmYmO2R4OTNDU2lpdj1EZzo+Ul5+KlRwfml0dXksX0dkRlRQNU5UUDU9UD1XbyosNVl2e3EzPk5hVzxPW2dqW0FzNEoyYEpleGA0SmIyZjFCaXF3bmpjdWlHKUQhdChqWX5tQmRsI1lRbGFIOVFtMDhjS0tMeFhGT25Zdzs3QmQw''@;'; put 'put ''bXlISjYscGEkZT19NS9FOm4+aFZdM0M3aVZdNDJPbT1HMExKWW5LaHY/QVpNaFFAdWJvP21bVSZkZVhEPUFzfTV8PGlAUi9Vano0PGFhdUMwdT4wY1lZeHY1WXxtbktnQ15tNnZxUlUkUU9SY0tLK1F1Pmc1NmkiK340ZjB2RCxYU2klezhjKC99QG9LNURjPlY/Um1BW1NzNyRKMHBMJEVxO29Y''@;'; put 'put ''I1FnPUZydVIrOEx4ZkdDamZtezZnUTJYO0BvfWNFW0AyQGYxM1lCT3llZUpWVTN2XXRsKVNpTlR1ZnhmVWZRc11YeTEqaU8oUT9rZkQud1kjOEV1Rk1lbT11eHw4dVl6ZG5GeS9FU21WKmBHcW1pb1YqKkdxbUxkV0tHPCMmO0xEUGl5L0ArZkE6P0dub3V2dlR1PjdOJXUhdlc9IS85cDtHfFp4''@;'; put 'put ''Wl0iXlIqJGIuK01QIXA2ZjViY3NFTlF5LG5kVnAmQlJwdzdJblpnaW9SSSghOWA9TCJYKlUvWkUramFyI09OVnZKMGI6RFhgMSEzTHlEWFgvbmRqL3J4Unl+SV87RkklW1Y+dywpc191JjE6aFZPa1AlVGEiIXdgeHdPS2ZDTmNUT350OHN5dnBLcT10VnNLcTJaQDU+WWlKO18hXSZRe01MbXhJ''@;'; put 'put ''VipLaXJ0aHd5TnAkVyRmK140N3JuP3ZiRHZYQytiWGJgTHdYMCprT3V1XV1oWGlXdz05K1JMbzd6YXNTcU5TMjp1Kjd+UkchVTFgdzw/WGx3Ik5+MWEyY0RHX3tdbGxgXz8pfHVbL0Nrfn59IjMhP19zS096eUIrXU5JamkmK0k2L0p3KlJbQFMpPyUhRX57WU8xN2lXO01CVFhlbnQmVEh4QCwr''@;'; put 'put ''OjEsfkIzOXBJN25ST31ofj5OZUhCODVxK24hbiwhRDJPcFFZMVUxKkJ3aiZGXiNEKmp0IkI6OyFoa0NCeDN6UTdtSDxKbWosdUZlJDhHTTI+Z1JecSFqYTMzM1gvP29AMFkhMmFOP1lqY3w8Ii5GUihXNixEaGdZWDU3Ml9ddFRNIT4lRUEkRU50R0EkYk9PTzx0eTpoLF0wLnd0Y3l7Uk1GRChb''@;'; put 'put ''PGFLeWBnKTAoLFhhP2ooUHF9dkk0VX40ZDEsNmN3bytXVVBST2JmYEFtbThLbGRyQVRaOHJTUEVOOzpEXTdJUXxkQ3hLMkcoTllMUmhlQjhLUV9dOlJ3SEh5YnBRPDhkcENgP0pLcVBgckUkfmRXKlVKW2FHU0E2bS9yMCoqKGl2MU44N2o9IV9KTnA4I25QR2NpKDZTeF54bUQiU0o1aG1RZnUr''@;'; put 'put ''Z1AjUishI2BDay5mL1ErQ0Q9OmYvMnlCTnNGM2lXRD9MMElbZlM1ezFjRGFaYkg+YEA3N0xHW2BxQTssOEVCKXd5fSR2QWVXIVA5Y0trKkFLWSQjeF8uRysmWWspRl8zR1lTKVR+dztyYHVebGZGSTY4OCFgZ2EjL3YxIl5RSFZ4TjsiIXR5amg6X3UxYzVqWUh+OV1HVTRrR3V8bStnayNkOUti''@;'; put 'put ''Zl1Ra19BPVshKEJyKDBKOk9LY1FeR1A8VUkjMDt5JlFXJVhdW0RVPTJGaGVsei5fbWZSbylTNWcva1VyaDh5TWpXdWpGOzQ7dH5sYF16NGdqKylnT21IRVdFOGtJOlEmI3p5elREQFtZV3pDcz17Kn0kVkFBYylrMS9zZT04cW1EL2xMaUl7bF0xO0V5aWU3PSNYey5zQTM9Qnk2O2dIPVRsaTtZ''@;'; put 'put ''SmhBc3NIOGNiPDtUS3V2QUNxdjYpfn1SalI2KUpYOVIyXz9hZWU+Q2Z7ezs5LyRtR2ROLy9ASXhIX3ttKWhCTWBjREEvW2NYQFhOcURUWSV6cmojXzR7QiFbSU4hcTxQKStndDQuc2pyTFlZTjdgUkxPMFdTWV5vJSssdyM9Vmx7L3MyYypwd2VmXVRnQGQ1Si4wL0VObV1mO005Z0wrekUmRjV7''@;'; put 'put ''PT5ec3ZXTSpYZj9veXloPDVXYHpGL1AjNGNsOTglaioxdXd7a3lUISMucDVWSjgkZEtOME4sOEd3Z2NwQFVyR08jMmMwSEMvbCkzRkM0eldTd2o5T3omQypmWzk0IztqPDdvV0gkfDA7PFdZLzdMOVdIW2ltViVtJUhRXTZoK0RyfW5DZEN3NURTQmksaytMLnR4OVYlMl40IzF7enRKb0lsKndl''@;'; put 'put ''eHMzIUckWiJAVUQuUi9TNGdeeXU2QVJhclpNNiMuMnxtIylSTH1LdStNajlQUDxFYFRHcXJHQE9DZztpM3NMeXMlVXR4OHB1eDAyb3M/cDR1VnNeYy4lLHYlRF89YTI3KTJAcXt4IV00XTNyXWNROmxQdU5FL3dIPGRPNXBPcEcmWk5UZ3dSaS9+RT9LakY+WUNpYiopWCsuKzl2MXh0WzV2MiYm''@;'; put 'put ''InZyTDlOaitrTV8rN2tDU1ZAWCV8MXVTUlFaVlEhTTx4cVNCVmxuT1o6ZGlPZ2dHKnJnVixmZDcoKEBlV2Q5KVhpZzZedEkmZEYmXzBIJV4mK3BCc2wzRGsmXV4sZF9TVGd1TiZTOzRCYmtGWm9lbSUxZSw5OTE2NkkwbTltaiZ3LHlQZGZSfjdZWTN1MmRqOV5sRFBsLkohdU9eUklVO0RLT0Nz''@;'; put 'put ''RCZ4cG9SNjo5QWxoRlopaVF+eVcwYWlvWl9IQy5XamRzcklZL19rKGs6MDs0WXFKLkpkLm5OSisqLFJuakB3bS9jXXJQdHojKihIVTVwXyhhJnV+V2hTWGU4RTshNmVDU1YhXlFRRSsqNklDMn5qWnZAaTBIOjBUaUx6NypZTzNQaylVTXVJITNtIVVFNC8zUHopQGhoTUhLaClkN29MXkRVP0Eh''@;'; put 'put ''KEh6L3l1YDR4YmpnKlVvRSg0V0BqYX11eyhrSy4rNGV3KXZzaGBddTlbMlQ1eC9IJS9LVDREajVxaEVSMjlWbTpJUjUuYWJLdipiIj1jQnQ7TFBod0YxWC5hZV9rI01NVnglL14yZzg/RDxbRV5rMzQhVEhaRkk1ISpBUXFDQk09S2A1Qm8/cl5NSD5eRFVYUTlWPGB8PXdqcnpIRD5eayRHcDEi''@;'; put 'put ''VHR4JS9zTlU2KTFtVClJYX51LFlFY1hlKGBJLzQkWzspUEZaOnY4Vk5fOXtMVSozSG9SNngxOSVbfjxTYTprYzwuNCR0JlY0aXAvPmBRQmtXVCo+S3AxMDRzc35hLEtRX0BRZV9AY1Y4SWkudTwqaHZ0NHZRUypsKnV9Iyokcy5qW1ohVk1FYEpSWGVIfDgzTDdEWi9QdSghW3R9MERwcm9Xdl80''@;'; put 'put ''dVs5clgvYFZWeCRPOF5EPDNvMX5CbDFrQEBBe3MhKmxbOTF+W2wmRSUjQWkuQkZvWnswfDF0WXdySFohNlhfYHkyPXxoRk1pOiVxRDxgTkwsVE90IShjdEp6YDUuT2lDOF5LM3E3dUVjPUxRMXBNYXwjfG0zIUt1QkN8bX59enx1QmJsKnU5RCZjWlJJdm8mRHJASUpYLlYqSygqfTkxIV4wODRV''@;'; put 'put ''UjMqekltQC9FZEJWK01NbWEyWi5oLEQ5QkVYJVtUSyZhe0kmWGY4R114d1kvVUlHcTY7akZ6Ukw0cnpWaDtuOGZNYUFiWyp2dT9JPCFXSzZOXTEiSFJocjhSYkFKUCE7KkBlR0YsQF4leU8jR3VAKCxaKEBlTShBaTQ+fFNQL3dsRDhTNFoiY3ZHXmt7L2FxOFBFOS9BUF0uTXRXaHZBPUNXV3ZB''@;'; put 'put ''Vks6LDNRMFkpTldZUSZ9fWl1eFkuKF0xRzFTT2pxU3c9R0tNaXc+T01qdEJ7SjFYVVVPRFB+b0w1MitGZ3Q/VGNRVXVxbWJGT0QlcSIlbDtUJjlYNTJdW1YzYnU0PW09JWVIYTw5SWg/RUhxW0dxcjxnMkMyIy8vV1o2M0gkQyFecVV2JS9aSWN5PjAjenhaTihtRzFqbTpLNDYkRm9QK3ZpJUtK''@;'; put 'put ''IWh9fkBfIUo9ekhIKHUydyYvKkpwZkJ6I3JabW42bHojLildT0JBcCtuIUZOYSF2cUpHYzReNV9DTk1vdXx6fDthY1QzU1JbJDBOUzZUM2crSHJ1fSVMTk5Raj5VSmRGJXQxQlBuQlFNTXM1dDojIWsrdDtBV3YwaXRwZWJja01oRTBdSS96OSQkQyRGI2JEcDhAck45OVRRWUxHLGVHJGFUd0g+''@;'; put 'put ''KkIiUHQqPypbeSQrcztnNlJJIjVkS01WNGhBIXEwV1NzdWx7On4kMEhpezlHZ35Fc1llWH47JHttIkdHOjBtcDZ0QT8/R1hBXndTSiskNlkxL0VzImNgdUJCbmklcFNLNyosVVVYSitfWH47Vjx2QUw8dTFHdzAwNDRGLnUyMnV+XT0hbWF4I0cmL0BpaSM/UjhtZlROK2Y7X1haS0hCNWtTeTBP''@;'; put 'put ''TTZFWENden5MNWRoWDllSEdjUyssTXI+JE9kLlh8R2gjKCpQfjQ2ZkJGZyN2MlcrJVM6YFhmNlBkamFpfUNVdGNtIkUhdiUyKWsmSUhpSn5jLmBXT0M0UVplTGBeSzZZfUdhe2EveiF3aU1uQkFBOm1DQXc0VkJSRElIUE9idEM6UkBxYypoUShscCosOjdSb2ZIM1IjKllBQUFBQUFBQyJ3QVk0''@;'; put 'put ''dVJsYF5UOiFzLG9+e3tyMElYO0M2fGJxJmM0N3YzOVolY2MrRmtWdi5Oa25AY09rYnpEPU53dzNCbF1JLjt3VGMlTl84fUM1OixOcjRhUmNyN3EwNk82dG95RSU/QzNIekwxNFtyTz98IzUrPCs7KTlfUkZ+NChkd2NieFU2SGw3RkxYfi4sRS9JPCo4PE5WOS5xYzQ8ZH58P1o3RmIsKVQ1UXVT''@;'; put 'put ''SyFNOFombUxyR3tmIzBKdEM0Z3Q/KnRdR29uUFc7Njo4XSNgTngySnJCSkYsM1lSeldgZm1JVWUiMmx3QjYrbUwsYmk3XjQ4dDlBQV5BTHhWO0ZQM3liOjU/e3FKTW1ZNiM9cChQZVZhQk15OD1SeChTSCNYJEtJLERHe0RtZ08pRCUlKVRsR3MvRF5lQFZpPSYjYypUIiN6ZztbKyFpTTM9K2ch''@;'; put 'put ''N15kWG1fV0QqPlNZVVtMfW80dDV1UkFSIzxoVy40bF1XQjx4bzdDZkF8NHxmK0QiUiY1NUlNd1FqViM+ZUZ4Ml91TF1zNUhAWE8/KVJ7WEg6RERzV2FoKG9QKlVjIzI1NmNqWSk7RE56THsifD5RXz5fSjFsTW1zKy44LyV0WDE9NE0yZ08zOFFQdEpKJUZUN09pXmwlO01zeGgxPz9oK1NdVWlq''@;'; put 'put ''NUFzYmVxfGIjSH1KR1EkfSV9bDZBaFVqOFtoJlFOcWFPYWVAVTl1bnBQb1Y+PCxLQmU4XnEocDlYSFRJa1o8MnNpdklvXkBLWlA2ZE4mTT1SOHR9cixpV0B4K3QlYV5+Q088KT43NG43Ly49LzRDI1EwQ25gNyRQVnBJVV5FJE8xLDZjJUUjRUk1QkJIXj4/QlltaE1La0ZHcFtGaH4vWmxWdnNB''@;'; put 'put ''KXZyfiQvbjZeZCRJdE04aG8haSpiNjV1flpYOSFvKTA/WmZWPURMLjs3cix8OjQmbk16ZTorYjMmU3crPWJoKFJDSWlmJmJoL0VKai5PPSVhc3UjOV1EX10mXVV2XiF6a0NgbzJhTCsyZnshc3Z9eHVLfVh6elViSSFiV1JreFt9amw2MHpLZ3p9QzsuJXwmViYjNEpgSHcpaCwvVEtKOWx+R2tD''@;'; put 'put ''c2ZIW2U3UmomWV01IileYzRra3ZAS0ZdX21HczgqaCYwUD49XnN5bC93I3FNR3A/a3BRSTteQi9MbXlFIjNHRmJVL2B9SkVqX0NaLmdbWmsvdEpEKnx0WGJjUUReKWFBP3VAXU9EVCwvQWxNdEZeRVdJVjxFTVhReFpTZ05uZ3B7SnA7LyordXB+ISMqXz1mdCpSV2IsPH1uKlVUem5XSj56MG9M''@;'; put 'put ''RWFjaiZiIj1gLk5IZENyZmdCaFRYL2RLLiN9WFNaWXNtcEdHUCVxWi5APSVYOEsqN0c+Z3NaX3UwfXhDYDorK2h2aHBhXjY2MlkiNVgjViNsUTs0IXxPfUBlQnU4IzUhSGZ2KlpJRC5bdFtvb2hPLiJ7JGJzTU5yKHJkPzxfXiQ/em1ZaU5yajBndj18b1RFLHteUUUqY1VbQytde0FeemwlejpW''@;'; put 'put ''dmlzeTZxcnVkRGpIL11xQHchQjJNPThZOWlaRD1uUUg6cjc2aC49bTk/Y3liKFk4bDldOFh3cHEsekl8U2x2WWpiM1RlRzlKL3M4JWNeb3xJTHI7UDluQS5kUXIjKy9CMSlCVEsqei42Ij07b0ddNit4Q2MjaXo5YlBkMX1yTjMpM11KUzZtKShydyRBMm8oQ1BLMytiTio1X2pbP2t6UyZfdC9G''@;'; put 'put ''bnA8PWlBPnheMX4hYzxPfGp2UDZ2bnIuV2pbPVg/M2ZfXk5RaG4xcHp2cjZUYSN2cDJRYWFAMD17KCUwa3Z6M01WWjhrKWckSVkifVdnWVQwb2Z0VjRmR3cibC8jLz99NW9IbkEvMEZqdlJ8dix4KFpeblI5ZS83OEQyWDpkRzlOYiVbQU1Ld1l1O15PIUYjWzk/UEpVb3pEfVJYUjpINmtecC9J''@;'; put 'put ''U19TZ14leCtDaEA2WiF7cF9tWWBVfDdjLyhYb3hHTC5ZZFt7bnRgeHtVaW1oPz5HODlDSmhheXReSy4zLDU+XnlUfEpFOjFnPGBwWDFtU29BI1ZTYG8sX3gkfFFyM3RxbH5Afk8lMW83JUd0IWwwXmRYLiFVIUtZRmQoUi4odz05JExJcixyTTwjek1waV0lZi54N2d9JmRwWnxJMzFdRHFjRmg0''@;'; put 'put ''aF95fGVdSFE1QVZ4QkI8eVAvMm50SiwmcXFRQ3Qoe1h0RmI0THg1e2NSNl9+KC5RTUpBKmg0QiZQWT5RbDAkUUZGYzo6eGlLT2JnX0BHKV8uTiZHIjJNZngheWI4dE1PQGlYVk9OeTY8Z0VTdWBDTlY/dit1R3RRdEh2MDUlfkoqI3NzdUV8UE14Vl0yb2kmUXEyOk4xay9NTkplMSZSSDpyZ0w0''@;'; put 'put ''Oy5nMHgjdyowfSRLSTwrdGYocEg6akZCZ0c7aEZZYlBYVXc5N3ZpYzxBUktIaGl5MDtadXMxdnZaO1BjVF0lTVc3eC5YYVVrOj1WJkAkRmBRfTx4SW1Wc2hnb0E5MzlseEkpSz0jXVAoe3lLRTVRTndfRGE8L2xMay4xeF8rNlt8X2Z3fWUsU2tjcFIlOXJ8VCp8QXJgIUNHUkBucCFVdjhhTT4m''@;'; put 'put ''YndtNjZlPGN0U2IiT1dPdk80MTVFKUV2cjIuWzssNkN4SGJHSVJsRnJgI158KEtCYj9mJS52QldSTH5hOnd5KHxqdzNKenN6Ij0uVVlVQHJEVD5uZF12ZFJ8IXxsWkcuak1iN05FZThZQjwwbnhmX3RPcWR8MUZnUDBgMFFYPmczMnU4MVltSSQiJD4xWXpRaCF0RTZsIl9ZOnAkVzp6RXFjSWdZ''@;'; put 'put ''JU5GMD9EckswTjZDU3g8ZVN2STFGOFBYe1tPei49PUl9RVMuRHY8QVJlcFQ7QllTQTtEfmpfIioqRTorKTkqQDplRFtHUF5mNzVsVkAofGpxPytkJlVRMVN9RyhMbERwR3IyQyZBV1FeTSZzW25yWXE1V0ttKXw7Wj9JX1BgKHlrImZdKTN0OmBVX1dnW0hIJDJEdyZSd3pjKSFleyEuXVEsYiYv''@;'; put 'put ''XnkvUFtCdHNdVSFpZU1QOn1NMDlbYEpUZTdHTHk0OkA8TF5dNHxPPSNUc0dKJlllNmZGPD1EVE47KUI7U1IpdEFVKHk9PXJUelRvWn5KVmUrWV9zNyhTeGJTaStKLlVWSCo1ZSJdX116OkVpUjt+PnBEfGBZZn1qbSsla2RNU251TCJHXmwyUlpuQFJbQld8K21vOVhJMVVZPi5eZV4rXWB6P2x9''@;'; put 'put ''PmVYTjpfPmw1TG50dmRjUE03XXY/YTcpaiZlKD8vKyZELkZOUzBhVSozZTFXLzd7RlclSjd2RGtMJT1RfCJkWnkzWFlJI25kJnVoYi9mczF5T3ovV1h3MnlPMmw+SVdkZzUjRm1nKU1qc3A/S2t2KX4yPGwhW3FJWjpiRSE0bWZUQ342UDw5UXMrPDN9Ji5KODU0PHhMKzZvJjZ5eVJfNXlaKzQm''@;'; put 'put ''IzFoPFt7WiRsdHFEeThuT0V7TTdteWZ9eUpHNytxLGBrLGFEIWFhYCgsP2g4aWEmdlk6VH47OHZDNU5ObH0xWSopXn1CfWM8QVU4XVFRVGpXRXFgeCsxTUA7b0N8cThTOm5jPiRgPFZnRkpFelVhb3M+L0Z9UGRHVns9WW1XYjl8QGgsR18sSmFTKTJPc0IiYmMxJm4zWiVAKTs7fXhebz86bzhr''@;'; put 'put ''V1NveXRYR3xLe0s4fixsSnE8U2RJUVZeVC8wZV9vZ20uYGU0bGRkTn5eeGY9PktNeUNmI2g8SkJsZC5TUlMlPFRSREQmPFR6bkNoKk1XZm80cWckLHQ/Qz4wNlAjUllQU3lOVG9AWm5YMTVJUWcpQGcuRHA+VHwzKjNgYDpLYDgvIU1DPVJobkZORyZ9UTlBYS4pTHhlPGlZfTo8PyMiUGkyaSh2''@;'; put 'put ''UT5XOzRuZWpPT2drTTx3Zy9yMVYpTG1MfGdWSXhGKzA9ISh+Wi5LVkk2RiVERG19OihaZmQwcit2NF19WCRbamsxKkJKS1pVMTZiZnx6OUwpezNAbkNgV1oyOW1Hb3xuJFRYa35APkFWZ2wjckxMTjhmWiR1SkJPS2c9Jil8fC89Xl84Vyl7L1p1fE81clVoSmI0aDRZYjpFfFl9dXJOO2ZrK3lq''@;'; put 'put ''KX4wZjRibmdCclovaUdEVjJtUUR7NHNhaihZUDBtSzNKeUd+UnU9UFlQP0dZK10pZ1F4ImMlIzAlVVorPVtXbHo5RlJ9WiFxRzNZZlI8P11wWXZgJkQ9aUxPfWl2Y1ZoUyU6MWBRUmNEQGsvU0NdeypHXm8+RSZWWSxwP2BpT0ZoRn45fEtWIUh4QEhQUyhFcHx8cjpLJUxQJHgqdCk6dEg3b2dN''@;'; put 'put ''PHBoenQ3T0d9L1B+MktTfWF3I1p7YnpiPFVRT3hNX0h8VD5paS4jcDBPZy5SOXBHTXc3cCx6WkJySyo5LHRjeEsueV8yXTQwXSEsJUdSO3ZgRXIjNUpoZFdLa3h+WU9CS3AvPTEqIS9EZzV2KGFBXlV7TTolen1iY21hYHUxTVpFTWFbNjEwdGp4UGRdO2dAM2ZoQzFEVHZfQkIzfWVpMUdYbkxz''@;'; put 'put ''Tz1PSiErPTN3PHQubEo+QlplU1MmQTxobGVASnVJKyhkaX4iYztMYTZmU19JbForejdFTHEsXiw2YSNhTW1KS2tTX0xYKGRVc1gpJFFTWHJ1flowPV9KMGRnO0g+d1p1L3xKcHwzaUYuRFQ0K2FPPlo+UF5+SGpnZigwWTZNT0dhVmN7bX5hOHJvRUBgSTxSdnBMN0pgOUppLH4/YXJCPn0wbzMy''@;'; put 'put ''NXxLW2s1eTE0XSNTXzY0Z082TjpCXW83cS9LVWB9RSM1Wik1R1sxalJjJSJ7X3Qya0xMcENvRkg5W1ZdenZAOS9ueUlrMi96fkNiJFBROVJDYXA9QDFTNEJYTWVufU8mNDNfR1U9WW9zeCgxLFI+MEVlfHd9UUw0IjlyJC50cjZ8cVFGRCRYUEB7UU5xW1tDIjEoOl9EbVskZ01ZZVojRFl5cys2''@;'; put 'put ''NklAfFp+YmB3PTQoWS5VVl1mZTEvOj4pVn5CSyZzVCxgW0JuRipKcG1MPDM4KVBNcVQqLkc5cW8oNTM/JjJmJjZNZm9+VEg5OEM9aEJoUy8wfCh4SVpjJWoie3xfKjRUNWYyMXU0O253e3QpRilrNjtSYFpLb3F1IUUvNVRlY1hvYTEvcktNQDZheT49QmlRUWo7O3hiO2A0eGFReGYrKTNPREku''@;'; put 'put ''PjZEWlNvO0YpZ1pARkohNEU3JUM8QlBsKVZXU3lDVnBmRz1PZFJLTTgjQ2lVKGJwWS9FQGpIV1hqXltdZ0l4S05DTyZBYEhZInZQfiNGUmdSWTB9IkJCLmMzYnk+NnQkUFAybUZRKntpNiIwWj9WZlFaL3duVFdlRWpURT1MKWs1MUkyYlJuLitzTml7P0crK0ZKZnNIb3xbbldJbVouNkNnQlok''@;'; put 'put ''LENbU3RLajZfRW5LNkZ0JU0wSHFaSz9JO3xBdmw+bExJOHp9MS55a3wqLmtXRnFJUW9RUjtRckx9Oy9ofEglMnFsYGMseylmWzN9elUzXi9Yc2NLeGQ+JDlqSEI6QUJgUT1DPWUqa3RPVUN5c29TS115cTZhdV02dTFpcCU9TUYlNXZOaTBFXUNvfEFFeCNVPXdpPmA8NGZsR2tRcENIZEtgOT56''@;'; put 'put ''TjdnRms6fHlHal1JXW5MUVkhQVZLMVg9N3ZYJTRidmVvXkNaczJhfFl8e0suTXM1eHpmTjddNCp9XzM9WT1pZU8idEcvYW1zVkg4dG47LHV6RSJ1QntzM3FMVyU7JHtrU2pNdX0yWThaaVJgMXJUYFJaV09RVHduMjhGeXhlc1ZNLj86Qj1rS2M3YC5ZOW58IUdoXjZ5Z2gsMT4qQU08Um1ZKEN3''@;'; put 'put ''UzB7Vl5KMEEqMiE/MlFkOyFnZzJqR0VpJT5bPWkrdHFEYThqVSxCZWBRS3pAWE9aRml4dFMhOTAxbGlEUX50aXU/TVQ8ZUhHZCZrdF9TS0ZUKzlfQDUyLHsxRG15ZD4lJFg9JWxQVT5gYVZiUmZMNjolTCNAS2QxWDk+Rk5XJTRjLD0hbGNQcjFVfEBZYSVFLzpzcDAkP0d2Wzc8UlVxR25pb0hr''@;'; put 'put ''LHM6Wj51cSVfM2p4cngxUUI3fnRDTDtfL08oZTA/ckAkdUY9MXM4MmkmJn1MRC93bmR+RW0qfix7flE0WTg9cHk2RkxLcCthImhNSzJadzooMGFgKEBUKVBDNCFMOUJYTmlyL3BJSmRrZiVdMEMrMTVgTXFeNVt7T0NZLigsVGM/Xy9JKl1DKnFQTShFME1uSEdRJnRtWzFXUTBHbmM1JigvPWcj''@;'; put 'put ''O111bmVNYiI5Pk50W0VhP2NnWVc+ekIka0NhODRgcy5AWUIhbzNCVXYmS2JgOlBIUEVZLldWM0BUanBLYD5MfGB+PDFSIkQlWS9rQmQ5THx7e2VpIyhCRUtAa1k9MUUvWT9uNXs7R1FQfkFpUCg0Q1Y2QyM/PShtNzErP19CZFZWO3p2bEdoWHc7KEtlRjUlOypQVHE5WCpPU0M8K103ejxmX3dD''@;'; put 'put ''QEYvbEIscHZvciRlXkdPanZ3M09pc1ZDflRVPFMkMzAmZDZuJE87VDgmNnJxa15TNCVyWlF7RGRYNWhHbE9SYE5udTdUNGJlOGhNUTRqVERydzg0eCpJRVp1KUdRIjkud0drZW0lP0xeUH5xOSVWRVtCTDs4aFpHRDRnflNbJEBLUyVddlhXVGQrMmlEV0FVTUxdWjcxY0lSVkUsfWBJNDY1On12''@;'; put 'put ''ZVZWbHl0QEZMPz4jO0Y0Li4hTk50MCRmNWlQbHxPJWZDOHtFVyF8Pnx+WGx2S3dJMSFoOmFIem95ZClTbSx8Zm9+VDc/cDFudlYiNEhzZVFgdiw9PnZWfm9rZ2pvRmgua0NkJjp5OHxjUlc1QCV4VWh5KnwoME5RTHpxNCMwPWZPKFlnW1dacTMsK2NmY2F6UyJCMy9+S0E/WTdLK0xATilDNCV+''@;'; put 'put ''Vyo9ZXs2TkBicUpRPGloQCJ6KndrUTdOWXgwNnBddmZoSi8xWmdVJEMwVSZYc3ZFUChwTit+aklNMWx+eXBxJEsqXyxgb1ZjYjl7dyQkOjVifjg5UGxXTTlzREEmZXB3fnloVCN+SSkoVGFtdVBxQ21qVlpYR2ApKDRQTE4hcSpMRzdqQSwwMmY9fUMoUnEpMGdvSGwwazMvSTBqQFhPXyJRfUdA''@;'; put 'put ''VTw1fUBzfFp5N0JvU3s0fHpfSmspbF80JC5AOWdtND50cWFmbXNZKm5VeTJHYT1RPiRYd1JDT0ZGaltIPX5lZXk+WWdXUTlfX15BaDw9LGtRW0V6OSRfdmplY1JbJDtJKjQ7Mj8vcyVDMlpnLlRRVkAie3gjL2NDcn4qbCNMWTtWNSkzXXcwenNBYHJHdDM5WTJkSXB9KClmVyVHLlM6ZV01dGYm''@;'; put 'put ''NVM/PjhrNzVIIil5fjlOZSRQIWxZOEZOPWBJVUI4M2IyVmFDR3VkXyJjZWBTTURTa0Zac0MzYmVqU11ffCZMO3o4eDc4Um86MWhJT1NLezxnTEE5IyRTKHdTMzpeTmluO20pa2ZNWUR8SSRud3QvMkJoXk4rOVAyb1hBOWt1JmckZV9faFY/UVVTOnNBN0JfRk5TPD1WMUhQQ0AuQD5eRDF6dUUq''@;'; put 'put ''fEk/NEdhQS93WHcvQ0c0RCJPQmQ1P082ZzNCaXckc19ZZDJ7WnVQXSkuVXw1WSwhWV5ATFlZSG1FUGx4X0kmPCVtaik3PllRQXJTM340RmM2YCo6fXk3MTZPfGBNfCRAcEdGfEVPVipPPH0qVFhySSImVkRvY0E+UVdrKEYiTlNCYiNgWChtRS5WXVB5Y0hCaDhzPGVvNTY/WENqUEU/MnQxVH5V''@;'; put 'put ''LEA8bWNbampYQHwwY1RTSi40I3x9RU9TVTxeXkk5fHJSMzkpQCUmPk9MOTxGPyk9MG5pV3pQaHx3WjxmXylWVmkvVCQhZHshfCVZd3p+djJaZCxIMyZ0TDhNVSxDJUMqcyU2PDJWfX18VWo7NXhoS156Sn0sJDs2fiYqb3hULiFAIz9QJiRyVVRZM09WT3tKaGd2SWp3SGspXXplYmQ6enxlNnx7''@;'; put 'put ''Vi8vOV5NcnxzentoNVs4e1pvbTo5fHJOJWIvd0x1TUsqcTRISXYlbC9FYXlvQCZjVEtRSjNuakNnXnA4QGQhLlRFQ3JhOXRZTWI2Kz5oJkRJYCM2LzlWNltoc3hLZlJoSUpNTEFqWkBwZFdMPSMmM2dVQ0RXIkFLeUxRPmFscSlxe0lOcHs6ITpFKloyT2kjSmpubXQwTztCOGk/KH03NTlgWH5k''@;'; put 'put ''RmA4VzZ3S05gZ3BFMGNMLk5vN3ojP3JHT2lnVnx3NmREQmUpejJZMT01SCgmUUE2aHYoOltJIW5mMF0lPFFVRGw0flNZaSI/N2dDYztOdHR9KXx5SkB5WUJCOmIoQ0lvQjNrSz1efmEsX1VyIVMyZUY2VVdSWVFkSUV2TE1DQTJMMi8xKDtbVThaKk8vSUIzYVZ7encqNytkTjpTc3BII340cFtl''@;'; put 'put ''RH1afWZjMzdhMENSayVEM0lbTTwsaGdbfmldZnwybFRkPWN4O28sOj91OEd2bSlWWlApfkMpazIrYHhQeW5McHBQWkEkLltRZldOKGhxUVB8aEVDezpOYTx0SUkwfDcjIUJPU2oxRnMiI2BiOSElQF9nPFBgOixKezFCP0x9ZF1BSDUodGslO1BbbHNyVWQ5SFNMY1REXk82YnlmJl8+Uy5ZfC8u''@;'; put 'put ''cF9QeEJwW28vb05gZVJbNkYubTU/LjIuXj0yWTE6SSE2bVRPLl0/V3B+cVJNPSZafVRPW2xdOiQ7b11oYEdzPiJHIzt2bDNEdlNIRXpUT2x2azAzVl1nc0A4XkZYfHI4bzkjc258aThGcCRMcChvK0xtKDdeVDA7RlpDREdYeGB8RHJsfEVaUnkpeFZPJDQjXSQ9eUJFb2RlQzd3ODx7eUY7UF5j''@;'; put 'put ''d2oyQzwzTUskc253Omt6QSosKGxMfTEwe2drK2NWcjxTcFJrUXsze081IyVSezZiPVF7QXVvNEx2NWhna01CKElzITo1WEpKRExiXko4JmxIfj08al99QVA0MEcvPExOaXRHLigzbiJmOFNBTz1YJEUlZSY3a0o3Tm9iRkNjfjdFSWhUeGNfTnpjOXVfS2ElR3JKaCVZTW45NSwyPWl6SHRXb0wz''@;'; put 'put ''ak4iX1NTSEJoPmR5RzZAJGo+MnUmekV6YWwzYmVscH1KamcrUCE3TjcpfVNxOXd0QiZ5TkZbejs0QUMxJkt7OyhdTzQmcHN+NCZzXXciRTg7NEZjSmgve0BtbEB+QX1LfldsWVFTZ1J3IUV0bVRveV1sMXVbKDAmPVI0azlGU2RFLGZlREtgPGskdjBPaUNsSCM+JTE6bnsiaGp2Nm1pVW96I1Q8''@;'; put 'put ''UCNYbnJhemB5RT1XWjZ+XnhzaWVwImdrIztuTnU5T1hORDxXdW81bTFtSHJyeHlhYTU3M2tpZTo7SEcpTXB1Qkp2aTZfU0hURGJ6dV9dKDI+cTRpWTx0JnAjUXUvYT98bmxiOWxIVyFZVDxaYyZWOmAwWH43YGtPOUdDblZISGpFP1gySnVWaFZXcVh5UWlgeSt6c2hlMHFdfSlbV3wla2prcXNN''@;'; put 'put ''cSFHc00zUntkemcyJnxAeUIoJndoM3MwYmhTSm9nRjdpPFUzU1FlWDslMjpXQltbPDMzNztFOD8wQmd5VnZxTl8vdyFPblpZSixob2pFMSg6KSVrLFRKKndGLDEuZWNgRDJkS24rI00xPlN0UjxOUj1gO0N3V0Y0STE8SEFOVm50Km5YYFh5MVJWPzxNfUtQQEIhaTZQNTBGK11QQ3t8ZSEvO2RE''@;'; put 'put ''e0BHIlJDfHZYQitZWVo3QGVDbVFqR0BvQmokXnA3TyhdXkxxUH1JckBoSk5CZUcqWngzLzImdSx9NyN7cnRkfU9PTCw+dkk+fXBlOkNEW3JgWnBVamtPQyZUPHAvQkNhZFRlVytrQFk5JXNnJXAjan04cUVuNTVlW3A9PXxHPiRLfEwrLF43QFBnRSIpTUNBZC9YN2liPHRnSTgjYzRyV3lvVGZD''@;'; put 'put ''MGllLyNZOllpMi5vZV94NXZoYiVxTk52OG1RMVZeNyxXWy9hNGg2Jig9Pkg7VnU5M2ksQ3I8KTFLeCl3SHJidmZgPHt7KVc6dyNmbk88KHFNbnNNS3V8YkRWKiw6M1lZWTJqRGZETkl+RmdEdSNEPHRqMnIjcC9GKyFUdHokXlA4MH1NT2JQWE9oMW1pQiZwJTB4WmFvJTNgdjxhYWczLHBjVHMu''@;'; put 'put ''LGt0SjpwVVp2WGRlLGgwJjt+cjJ1Kl1PRlVjdVNzZjg8aUdtUzNrL0BeZmooY2RCcEdaN2loL2Z3K1g/ODRzOGJAZnlubmFBTDglVGYhTiJiWkZbUUgsTmA3dm9uQCx6YnpXYUtLKSRCNkkxXWRHeTVGU1VwbWZlRyZrZz5ZODlSbD99ZEZsdTJufGAqWysmZihnLkBiRSNmWDtwXmJdSnQ9Skpo''@;'; put 'put ''WE5UJGEqK3EsQ0xnXXpZM3Uvb3kiMH1XMnh0UVBkNGpXTzBVNlNxTzE6PjlwP11FUlVRO2hYUF5rSyZ6I1g1UDJ5bk0/cGFJeHdfeE1pXzNhRUNrdSRJRXZkeHZMcHs4amUjTFBmQ2ciO181SCpDSlcqJStCMlBJKktdKCQvKT48TUExIiRZP3cqREEySHhhe1hrKEgxT0pqJWciKjV8Yl8xQWVi''@;'; put 'put ''MjFnTU8vNWQ9LGprbmtjQzVTditaKX49eSpqVXUhfSIjKEkhOCl8NWQ2MXI4eW5OVlhxQWFJSUxtckllKWpCbUdVUkw7ZkJ3UD42eCorSV13L1M6RlQvIXpBQHp4JnQ+U25oQWZHJigmQTV1Q3twKD12KyNlP3E3cTd9NFk0cFc0Tl5XYWVGOTgrJF9AZWRla0FtQ2Q+MldPY11rZjRzUVlneElW''@;'; put 'put ''UFEidXp0b3R9UEhGWXY6d2RoeEQ/eFVpNjVfeHxHcClnOXNmeFhveVtHajhXPm9Ha1ZWYTQvQllwNF5TZ2VDdUNlNlpJTjV2fWZDZFFjeE9nSzhWYHhMJi5KQi5gbUg5czhvPiNdfDByNkFEWHZVME0sckc3STx4PEFESmVycWlAYHJTQ2F5RXl5cD9xKTR0Tk4oS3RMcjxEcnc+OkRyZSNqYHU/''@;'; put 'put ''TiJiKXRZUSIpIzgqNFhtZWdBWCJ7VXZUR2pYMEIyU1FvXjslRjJ3VGBGeEI1IT9+V2FEQmU9M2FheS45QEF4QktNJnZTV09JZzxIMW4pcH5rViNHYltOUElpcV5WXzBOdV1AekRpaFp2IkN9JHNMUCpxYnVlbj5qZ2t1fkY+VnJvOTd+M1RQaVU4UWI7WHh+QSNGeFdpaUBDMUo6UyJTS0tYTily''@;'; put 'put ''QGB8WipVOHc7ZDt3WXRXWGhVRGZzPztBdklfaWdwVG5VOH1VYCYiMlNGe111ezkjUzB+OWdRWjozYDhdZlRNeCtKOnhqMFNbYmc8U01eLnY7bDZNfllaNXd0ejthOXMxQlZVJSF8VW1+RzJ3dENtOVdudmRoY2lzVXJDKk9PYkEkKTAmJSFDPCZ6VlRrRC4xZDtnWyZPc1VJKWlbemZSLltTVX1d''@;'; put 'put ''RkdiQ3t6RnB9eWQoTTspYS47WiVqU31iRGMvZ2ZhXkMwPyZKfDI0IndSUFI4I0M0RE8pVEdJa35hbndbOC40eCFtakNOLF1hWFBNai5+TjFVK044Yn0yOUhGRDgxWSxhJjQ7ZU0kNXoqPy5+LHVLTEhVSlNIT1t4XUt0SGkuNEd4S252Pzh9LkBMSCVVJSY5KlRNZkY6ZFt2WjhJSmxHS1QzZFF7''@;'; put 'put ''VmJFVj18dWM8SFZjMTwzano6ZDEuRC80b1MzZWd6dTcrY2QmYyx2T19aWFdYWGNtJTZMc352czAuPUxeK2ZnNU43Mkw6SCVaMzhlWDMvamk0N3t7e2IxMntWZ2pnPE9vaSFedEZqOllHYUZOdj1fV007Vj9jMTZzRFB0dChqKitXeWdFL08/PWckQXIxcDYjL1ZfTVIyPlRJSDFDVj82aFZQYGAx''@;'; put 'put ''NCRfRUtPSz5xTnBDIXdMVW86NW9yWVBrZTY/OiVTbX1weCpXc3QxImVCfk9HU1JiRX0ubCV2Tk9XV1JKYkc2Kj4rMHQ3JHpsWFlHa2ZNR1cqLG1nYDhoZjhiUzNFVip9MzojMVpwbClVSSI7V3pRSjUocUlse1RaaWIkPXZ+akZQWT90JDxVKzhGQ3wySHZgVjF+TnFqNS95P0ZEMmVzQ3N4IXNa''@;'; put 'put ''PnVAQC9IPFlFRkw9LCosPVZYe25kMTdNLj8iPFFkU3VdMW4ucVVTSVZCS3V5NkY+X1ZtemZfW0F3QFFbb2chJjpmVjdrfEJ+Ty5xUW5Ja29ten43cTVedDZDSShBXk1tTXduajBjQygzKysqPlhuPy8wQCYyKS5uXTQjVWR1SDt1TFEyZz85KXxkNzN2ME44QkNkTHg/S2dnYHpWelp3Z1EwfiQm''@;'; put 'put ''eT5wZn19QjN1WmxId35xRlNESWJJQFFEU1NES2NsOVIpWlFlWyJLUXh4Zy52XXxySkRnRCJZVyhifShtcHZlWUNOMXs/WW9jbypBYjk/UlNJZmNsUE5NM2dkankmX2xOKipgYlpuI2wydEtsNXpAQGU6JThMSE1NSzU1fVQvakUoNW8yJTdCWnhCVlBhKVtFOm1RVnkrYV0rJE9gVU1ZWVlXIjYu''@;'; put 'put ''bSQzKS80TWpOJV9NeH1sYntFUFl8fjNuZU4sO3s+YzRgMlNZTiUxOVdmaTdpZWhjUT5Daj4oR1AmXWo8cnYpeH4rUzhJT019QERLcC40JnFaNktOKiUuL2pXbHR2dm8pdlp9Sz9aYW17aWw9T2BNN2h5YCErRUAsL3sqSV44YFVEWiFxfkBHPz51O2NjfWEzKDZPM00rQDFROFFrKmh5cDAzXmhL''@;'; put 'put ''KjheTTd+aXp+eTh2eCUifEwoUFk6cSJILjkqLyxDdSs5Qzl+TERqSkZBUkk9Xz1MPD1ONFhaej5hJGJmTn1xdGJGelpZWlFed1E0aT17OnE0bnQrcjcjPU1sWWxdelBbQmdhLH4zN3ZLNVFqVHdmZkQlSV1dIjcscV86SmF9Tl5AJTJ3MlA0YjM+Si89ZEFXQ21mNipbc2I9SUYiZiZ6UilzMHFH''@;'; put 'put ''M3kxeiNRKX5wcjIsVmtxMEpCOi4uWlEkOF8rLkhtUVtzITpDJltkTT8pXS9MRk1aWjs7TSJKRD5WSnNmITojcEN0bElVcE9APEAxI012eiFRKEhvXl1WRjFJaFU/JEZme2JSdk5qXURBQ2d5ZiZpVllodC5RRUNJalRDU1Q3LHZyNSI0KldfPCxzc19nRnlbUFRseGZQW083IWRfMTJqdilxUlgz''@;'; put 'put ''WjleezNBNFgzZXlFallWQ1c6Iy8hM1ZtKiQhPmZpVUFONyVmPVduTElKVCM1Jl5+aktuSyFsWW8seD1Ic1s+bl1qJmI0cGw/alNEb0xEY2tdK25sNVc3ZjIpeWJLRGsjZWBMP2pgW3ZSWXJsZWN4UjNUVyJCQ2tYaGJxKnw4aX1oP3I2fUp3JiZDSV1zUH42Xjw+STY7SSlaZFVANnM8SV1gaGFJ''@;'; put 'put ''K1BxPmxiY1dYVFBmRmtNeFA1e3NnMH0oTndVKktVYn01ZGNJTkoiblJJZWxiNHxddzVxdjhEdnhUViR8LnpsJURPRXBOVVFSWFp+PkYwVz05aSpPPXhrITw+cFN2fT08K0k3QHcqW0osbmlWe3tZISxlPVFOOUFbZ3V0eEhMVltGOGxlKiJ9SD9yXTk/Wz4xN0I4RUFjSi4jTFBlYGtVazJwImA3''@;'; put 'put ''fChyNmNbMEImOUdWcV46KWxAOjVKMFozeHx3O1F0aXxqWDt+R1UwSC9SSmV8c3RhU2piSDd2KD0saW81ZWBGd3NtRnxyZWVNcH1lbiFiKkJnYzU4dldKZU5sWEBJW1Rhb3hvaGswbXsjKyNIdUI0Y1YxanAmbDpgWFgjKGNmKHksZmcrRTxoKzVbLnV9d1grPm1oNCk0SD5XdVRKWHp7WkVzVzVy''@;'; put 'put ''OTo2dk5EKjVdNHtCMkV0cUwpSkk8ZGkhIlYxJXZGciFBPmdpaVdwWGU8bV9ROFdCKlV+OGd+R0pecT0kOXtYPyNoam9tXUIvYUdtOC5ZKzooakNBTjRSQkFUVXtjRUI7VVU1KUBSeT9NSTdeVG5maUdhVylyNHV9I3swP306RzdjVyJ2OXNRZXRQSnZEMjhPa1s8UWNRS3glUmxlYV05VSJDdWUl''@;'; put 'put ''Y3IsTT4lWE8yYzBoViRCS2VKKiFyYihrQSVXWGVCPz47Zy42QVBjKGlaX1Vla2s6dzw1eU0oLi4jX2V2R11JfDk2U050aXo6Q1JoeDNXJlNFKXh5N3cjK3R2S2IoZDJIW0NZbU98Vjo4TT18Pnl5PClAX0khR31RamF3KHZVO1I6QEQqbkgmbCUwVnk9Oix1WGxbZE9XdiUmM2pvaH1XdmddVk0m''@;'; put 'put ''YytzTEAwUGA8U3lKSDs0JkpLIXYwUz4/blg1OXYrS208TXciTUBzW25bYSFPayFbVjM9fHZNbW9nJURTKnx+N1k+e3A1NkppfTNgdFJJZDQ2fnY8ZTR4Y2l8PFR8YHN3UCFGWmZvSnc+d3h7blp7UkxobG16RixXU0lxNW5jXW5wUzE1cERKaVBNOXFYRn5aTVByQnY1Z3slMkVsM2FdPERBUiVE''@;'; put 'put ''ZSV5UUN2e1FHNUpvVkRJRFNBW1Z6SkA9cEE/PkBUUV10X0YyVXgsJF1bKCt3aCJaSGhPMSY9NiVEYCM+eCM1LF1KPGdUc1kvfWJOY3ZgUUU0P0ZAN0wwR3RdIylLJjorI1EpOG9wZUhrakkxcj92Mm9OP05dVk9WLyt3UkZIPDUlZ2hvcClxbUJORX4+QkFSM015VXMze3VzQkc+MlJ9fj5AeGEz''@;'; put 'put ''PU1nWztadUt1WHMmZldmYkY+aG4uaj1uIitBJnsrZyhlaVBTMH4vT1hIdU9va0haR0ArcDZ5by9GezUlNzo6WXg8UD1aYGRrMDM9OGF5SCpaeVI/LilEd204Z0p8a2Z4fFVXPmpOO3s3SXw1Mn5tc0Z2aXAkXzhlZjUlW0V8SXZzYFMmPm1ZUGg8Q0EicW06MU9UeDIsP2RnbEUlfmAofDF8Kj1R''@;'; put 'put ''VUI7fU0kKX05dUpFKnM6QnRYJVNjaEB8N3lEM2xPWnNrJFI0PXlDQGYpUEU7NSVMQllhU0d+MW49OiNffm56O3c1TTk8T0pYZSJMZ1Fbcyg8TWsqYlUwRi5HVnlLSFhAX19JPUMsRiV5TD07VSFJNDgxeHV1fSxZfDRFX3xTKCp9VUNSJVhveGwjdE9LUj88QiRsIkEzRWw/WyZDLF4qa14zcWEv''@;'; put 'put ''TEMuQl5MQk9hPGB+UnwlY3w1dXRYS2Exek09K19IIkJdSjpsfkEzS1s0KVMvRC9RemlDVFtTUTpaYVAudFQ0QFJRbF17SEVaQjouUyNqNWN6elMuTXE+M3EkJnN4dXt7c0sxZG83cStQMzI2OmReJCYveEo6O188eCJ+WWN2Tm9LLjBZS1YwR3QuYmUpZ0dVdl1EaU5HK1NrYSVTZ0lLRiImKGZk''@;'; put 'put ''THs4RFVEViwkY3N5PSQrX3JtaTZmZnIyTjt5WG5XTDw+PSEkWiM1P28jeV4oNmxYUik1anxHTWxSUi9rbi9IPVtRbjlGR0Q4ISRaTk90eVRfJS9DKSJwUWNPTT5PSmNAQ3FyX3tIX285TDw4OklZQ3MlazFnPyFOYCFnOzJTRXUvNFUlKi4/WzpwcnIxSzk6bHMqeFo8Vk9bYCM7IU88PSN5dl9k''@;'; put 'put ''YHp5dzk+NVFtNiZGe21KZnAsfjgmVzhPeyg8VFgjVlRiKVZsYztNI1VQc3s+RzVvUjFGTjlUclQ2XndFZUZiYTxrL0BaKXFoMWp8OnxscH0xXjQmLzN+OVgwX2hXQXddWSxBQ118c2ZsJjBgZj46Z0RVSFtraVpwblZ8I1csKT89JFV5Z0loRXRKWHZNL1M+Q2I3M1o/VlEpMDp1YjRuUykzSkw2''@;'; put 'put ''OnJHSnUwTklbMjB+eFdHYik6QyMjPXAscCxxdnMxMSZjRUBYPXpnNWhTdkthQWNmVUhkWmhGIV9BYjdsVkQ5cDFRPyxqI0ZQbShHM3pVZ11ZaEhDQ0d2OjJHSVluJmRnPV08QzR0LmJDO3t4NEMpYVBCJD5dd2o6ZCwsVD83V1tRYUQofFMwZjF0QXs0JnwiN0lOUTo+Y3R1Oi9bPShgRVkpWTNj''@;'; put 'put ''VTdCQmVYOElHOnBjbVt2Yn5MN0JbYm45WmJ5Lm8ifmJOSHE8ZD02QiRZUzYsNSJ8YHtaSGtMSj9eV1Blaix9dkA6fXEuKCg0U1Y1X151Kkh9M3FLamZMRmNzTTdKTDV4TmMkZzpoITM8NUd3bms4Li9RY01hMz1NWWs+OEkyKzY/Kkg3O29gKn1NYTNYfDhtZzx4WkxSPVdrdjB0MGpyQlcyczAl''@;'; put 'put ''ailUSSo7fWl+OjxJIWx9ZylnfEhyZ2RUUmdPdT8mRj5yOywlbSEmImRMZik8fUE3ODRaKzlbZH58eX5TYGVHNiJ4SHNIKjZuTEJxfT5DL1p8KXV2YGt2XnghYVIjWSN8KThCdnZETC5mQHorWEsscnR+NGt4eENBSXsxTmtDX00xVTdiPGJWZSUwYSlDUGRaMy5uKUg3TWN5QyZifl4mQnNxemZL''@;'; put 'put ''LjlHbSZOUiN0NGhzJlRTYi9EfFYxeUklKXJKLHVYSXBsIVYvVSEmcG4hSD1gJkgxNCtxdEQrYm1UKTJtKy9bKm5HVWheWSl5KU1XfSFZNVRjbW1uZyJfXjAqRSFJSGVQdEljejtoTlBQPXRAJTZiQW0/Pk9WWTZFWkZDIVMlbWRdTyE5KXBJYSIiNy5bOWc8TiIxdF5TIjsoa2BKNE8uQkx0b0hB''@;'; put 'put ''dSlbV3BSWH1+KUMrW30uM0s+bTJfdjRtPjNkYVdERSRtcS9RcHxkJH5LbXMlQiNmWktpRUMoeXtIWFg6SXQqdTtQSmcrNTYjI2xRUl9xUj4zVE8mOmB0WTNVekJSeFBILzFPfUFzRjBSaUo8YVpeJUMoZWooXlldXk1ZTXNDJnd8UlgldXZ5V2Q5R21hdVVYYjk9cU44T14sQnA8T1h6YSgsVmFD''@;'; put 'put ''dWVpcWMvZGM/dHJsKXE6dFRZbVUuey5xWiY6NUpUNTlLcEpkW0d0JGFOPlIrU11QJGp0Ik53YWNKfGAiUHQvZU8/RlYkW0VmJlViczxRdH5XV1s6bTRDKC5kOXA/V2RNX108RX5XVlV3YnUxZ1tjWGw2OyU8PmxKMlhyKERsSDlzOy9FclQyLEcueFRCOV1CQ1NxfE9sJnxnU1BqQF9kV25jQz8j''@;'; put 'put ''JWIrKER6KyNdcHJzSDU9fmQsMkVYIm97TitnXj9OLyhGYy92ZTVVP0dJLDsuS2pZZ2NRTk08JEEsKTxZOGF2LzQjfHc6cGQ9QFs+JlhkbnE4JDM3QXp3MmlDMDExPl01SCZXTX0mZGYqdXFeNzY7JFBEcjt8XjtWcFo+OnxTa2JndSs8X3h+KW1mWj5ub2wmKztFQT5qTUw8XXZpMipiMkg1S3xD''@;'; put 'put ''aU4vRDA9eyRMfDR7RVZwInh1M2FsNHlTKTo1ODoqSi5MOTdvOGgjWkEofT02byF5WW0/W0I6a3dMbzMzeEtzY3c0MEVKPG5lLC95JENae2t2TTY8dnk7YFopZnM1VGhmNGIqNXV7JCgjZ1pAYGtYSm0jRkhRR1g+TmFiSXJUMjxKaW9fVG1yJU09QitSdmF3V1BeWUY2MEU8Ki99NiwqNWg5VHM2''@;'; put 'put ''SFdNMnNWKW1LdSVib0E8Ujd4fSNISz1ZTGVfeX02YWh4YCZJR2ZoYUlhSk0rR1doY2IleiI6byFIbG4pI0Z0K0YyM15qOHFJNWljNHRAcS5UQk5ZaE9oZCxQPHJQW3ptcCo+MnlBVHhKRiszY0VXa2dIezZuMDhUTms5JjM7NDZjYn1tV3xGS0VhNmNNfnQud15zZDZCbV91dGZ5RUhNIjhiIktO''@;'; put 'put ''QCxBcFZaMzI6bFlmRHdbUjZJfGQqQnBgIUckfWQ4VztbRTlObD06PX1vcXBfRVY6fCFYKz9zJXlKc2duRytAP2pieElbTHNVZ3BXIz09TVZsY3h0KVdhVy5Fdnd3aHl7fU1URjx9cm8qZDlYb2VTfHlVWyE/V2cmLkRSPj85UlRwU3BpRDU8QjFCTGdmW3BsbEJRVUM4ZT0kOiR6ZnowKWo3dypZ''@;'; put 'put ''Pmg6KD8zLkMhcEcmQjlnY0VAQCJQamtlbCl3TnUuOXRfaD9uPXteNngxKjVtJldSUG5hVUtnKzkuI2ZXX1BtPyMjRjhONi9tY0lEdERWdyluOS8/Rk5nbnQrK3x7O0lKZVM/PVtAUXZzdD0kNyVXXzckNi93Z01hfHpTPTpEXUFJeHtmUVRZYD9hIUFeTFt1OXxLWDtbITRmcFd5NU8heSNQdXFA''@;'; put 'put ''U1YmXzlqakRrJnFNckJPLmU8ZFJONCFLbSJ2b28ibDp4Qltmd1B7OkwvL2MvSk1Ad3whe19dTjI0XyYuKDFuQHMkY2ExOGM1YGRxbzRBJkR7e35KMiQkRlBFOWxsTXZkMz9DRiowRWRpVmtbSENAb1tldm9MRGFASUF3eXxbJUZXSjpgZWhWcVtQc0RzM2tWUyFGakFhSkJianxzd306YTNNRjYx''@;'; put 'put ''X2guZX5ldjtWTWZaWVE5ajt5JFROenIrOFVCXi5yc3dgI0pdOkJ3ZWpxMHFCX1dMbUlBXTlgIy4ieGZYRSE5SW9FQih1MkJUdGhKfEdIak03MVRWUnc8RGFDX0VXNXV3cGFdYl9iVGpMQU9WZkhHUCUobEgud3F8UFI9QD1WcUBoXnRddl8hWHhbXlo2OElgPVREXj5jVHdnWi8qcSlmU1RyOGUi''@;'; put 'put ''dXBgXVdNe2xJd2ozSUYxR1Q8MWRRXl1uQnVqLitPaTIvYCREQFd1elNQY15JVnE0ViZEVTNGI0I3aSlyRlRMaENmIitucSh9djA1ZmZxSEt0KHhXWlRnflh2e3Zyb3tFelA/eVAve0hrJntDLFpebjx9OWA6fHxEQityPTVldllqUjldfC5uc243YHRrcURELlJwZ2IyJkJFTkFRRTl1ZVBNU1h3''@;'; put 'put ''PVhWTmEqfGE5ZzxENSwrbkcxOXxxTFJkUCQkMiNkSGdpL3V4Uz52PGQjRX5jVFA6dGk5L1dafnBgI0NPSEh4VkdIc3kiPztVKSo6eDBhcHE5SnFzdn00SlJaK3d0IllfWDciZ0JEfWFaRjREMU82e0AiVmRCS09da2piWy8rVHQpazFTdTM2dVF2L1JsdEdXL0ZoUzR1NTBTJT1rMHw9JVNzT0cv''@;'; put 'put ''TG1UQyR+c0U0YGxlQHBsIlUwSlhbVEw2ZiJsS04saytZKnp3aX5xTzI8X1kmOGZnYkxAXmN8XVs3dzhnXiNvOFprVCMmOnFYVEx7dmY0MygwTi80aSxxe2RQRUE4dTFTfUVzQjhuZz95KXtTcEJMZTJsL01Ke2RqLCZeQl12NVJJRDMzSmQvX14pZWI3SShAMStuX1pINXBZR308Lj5aIktoMm5H''@;'; put 'put ''TDVgakkzK3hUK2g6R008UFBHeHBzSnlAXUk8PFIrQEU9eEw2cCt7YXx+Kk8oITVCPjpYQmcsUipoM34lcHd0VnVXKnUsQD9nYzRkQ1ZTKiYuUkZ0YTF9ZXVYW1t2ciJvYiVXciZvaUJHKDFFSzlWW2Y8MUI7W2R1PV5eekM/fkVrMEYxYkZGZ3kpYTRNPFFQU3Z0NzpJSFExOSx0a3lkOXhtQ0l3''@;'; put 'put ''a3U7RCVGVlVQUyQmVDZDYlVSW1YvY0FMZzh9WT0kZkZhZD48MVd3dX5LNnAvU3x5aEd3Um1aZExwTzojS1dHZ0FyaXF4RDZleXg+NCNfYUs5cmc+SGFKRz1JMSQqOWxMTls1TikuNilKMj80XXhufGppfDomVlExQUduVG19VDlsRE9JXm1KLnY6czhEZ2g3d3RpMzllV3E1flh0ZlRlKiE/Rldw''@;'; put 'put ''aTk1ZWkvaz1nfCszLCRRd3dnaSIjbm1HREI1PD4pdF5aWz5QbnN7bj11RyVoN1YjSEJCRXZrK3tIczxWYHA7NH1EO1p+N0BFeHdsUmR5PnIyYTBYUnMxI3tFfmA7eWJ3cX1CRVhsMSJUZm1GPVdvYDAiY0EqNFJVfFZiVjQoSVhCZ146OVRvMUR0T1lKbW9gUjJmPnZfXS9ofDB5UStNaTl8YT4m''@;'; put 'put ''bWc3RHAxV2tFalU0WEJtOEdvUnc+bDBARiRNSTJrQzBOKGwqOGFWTz1zInpZXVElfkdxKjB7fmBoP3R8QXQ2JWo4WHdmUjRUIzhTP3Vxd2xkVj9RQT0zRmRgfHokRylPPFlxLkVARH1QQHxXWnNRSXM4S3hUND8hSkYvdzpNL0NIWlU9Xnh4Z3l8KjRZeCpZc3hXcVo1PkZ2OFlhR2Q1aH07MTc1''@;'; put 'put ''ZkFySExmIiopZjI+Y2VxLk54TTVqcjpxNDdaM2tLclVhSzJPN3Z6JFYuO0FZTXhffiY6THp8Ikd8djxSMkp4MytlTHlNYmdycUdLNVRUNjBsL3h4P3IlKEdYTUVddEM6JTQ+PiwrKFAlZkZ9d08ufDhMREwodS59WFc7YU42czpzI30+ZU80WyRNQEFYaVZOIT9wW14zSXtxaT1gRzVtQE5wby94''@;'; put 'put ''bixRLk15P09zTkN0P3tRYCxYTXp1RCtWRFg5KS86fjg/Vj0qMSh5WUM/VTVvKEpZRSZQXkwpPExJKE50ZE9IMXBFX2FxZSpLcCM3e09OR2hMU3ZIY0shPEZDeyprYEJvKnooS0UxX0FPfCYrbncrYEJoV0B6U3BjU21oKHVTTFRVNWp9Q2JCdGRoT01QPDpVeDtrbTpINiQodFtHblt0UDtNWTR6''@;'; put 'put ''dEspblsvUGFgMXp1XXxSLjM9UHtYczQ8P3ZdIS9SK0ZlVHpkbztPSWJpUT8xbDJNPFBSRThsV2lyRCopZiNgZl5SSUkyWFA8fmh8P24hdF5ETkNaY2FIN0U/WzJEV2FRT3pTImRTP180WllYPiYhb3NIV0d3QjZHbH1qJmk7NkA9JXQ9YitKOnE4eyF1Wzk8R3wyeWE6ZlVkTUpSMHthPUozSX5k''@;'; put 'put ''XnZUVzpHQ3JSRWMrJm93ZShldGkob3xXV35oSldQPFdScW17RkdBRCxkSltmZ2RgdCI0KE47ajc3SV4qVS89WkUmOVcveVQuOmpHI0p5bHlUO3ssW2ZudFglRWx1aDh5akRqdH1vST9sZlVpPWN6M1JHJUZYYWojP0B4M3RidS82Pmx4aDwhbn0/d0ldNkB6PltbQXB4U2FDTlREY15YJUIsPGxk''@;'; put 'put ''YXNLVlBPMEJUdWhfNU4lQ19HeTFsP3xseHYsKWpWMTxGZl4maz8sZzI7RllxZXBvKFFyfXh6I1l3SHdTU1hjc1l7UXYxNnp3YVR2Z1FXRF9LLE5zfkUxTWN6YFF3Wk5FeWxnZmY9MzgkbiFmcyRTeWYuUFoheXQyOjxARjBMSWFLR0IqPFI1L2omOkdYM1sjP05YfjhoLj4hZnAxbSkocHlUMEov''@;'; put 'put ''UHZHNHtWIj1fPVgyK1AzezZIIkI/NzVjMCNMfEx5elBGVUFfaWNyK3c4NTA7d3c+NX0+L1ZgKjMlREBqYnd1NWpndUJPVSFvPDt8cENNR0tCM3ddc1t4eVBdU0RiKTxaKn46ISJUcUlOcDNoPEplSyxPdz9RSDdZeVouZjVxJUcie049Kmh0PmNAXWhKMmNWK2ppcllEcnVNYzRSdTsiLE0lKEdL''@;'; put 'put ''TCUsVy58TFhRSTxWW1h+LHxldlYjZ3BVLnxGe0p5MnJiZlVkY2NNdlM1TXN2N1FeWVpeaGA0bjU5ekVpJmYsM1JNayJXWkU9TklxK0lNMV5Ib0xzZEUlbHRia34wPz8yITAsdDsjNER5cWloU14hbnJ7UWooa3M5TWtqfGRVIiY4T1N8P1dJRUBqOWl6LF9bT3VfIkBkPSEvdGszTSkmX0cxXklP''@;'; put 'put ''IVt3dEVhZTxgPVVOcEtnPl8mSl1ASmdyKGtEOSIrMndJLy4/SnAxPUkxcjFVdkdNI2F6eHoxPCM9KWJkXyxuTWVoVywwSyFdSnlOOypWYDxaU1JMOHtQTi4zTzlpSzlqXTt6UTtqdzZGXzRASD9ZT1dRLlVGTVhkNTszPitFek8hLjFqdyJhI3shbWNsbGUqcmRyTWNpY3NfWEozPSxAMWhOcHBr''@;'; put 'put ''flAyRGFLSUN+cSp0ezcrT3JaLG13clFvdWw/Sih+aTozPy42MStIa15eOmhaZE8/SjJ+fCYiMk10InVuXVBqXWgubX1XRSJbIkojY2JTUFQld29bdF1zOyk6VDRVTWdgN2NibDNmeVhfZlBeY3JQemEiPFUzfVJAZU9sQ1VqTnp1X3UxPFArMUBVWFpoelZ+d1J7Y1VQIy8uMmclUXJ3aF1gaSFe''@;'; put 'put ''OEhRTHltQSs3cHBWS0ZDeiVeYUxbMCZHa3RGOCVLTTp9JilCY3R9cGFvLiJ7cD5uejJ8TCNGI1FSclJ5PCtTdjRAWVFgKnQ0W3FNN3hXVV9JXyRhX0VwM3FlXUJRWX5mK2NILjMuXTQkQzA1KmokJkJHZSV3LkZUYHQrQkEudDF3ejNVckRoU0k0c1VNNyI7Tnk+TWN6Slh4ZUolYnE2MmB3Tyls''@;'; put 'put ''VCxVcUBRVCpxQUUrZkBMY05VVmlWO0NPR1Mwe3UyO3BFajUyJF1yWWNeZzdwKUczSlU4KU0reil6MzE8NDZZdmZMTVNAbCYpZFQpSyI8Sk14fS5FbHUjVDFQLG9CYVdqYTF9Tl5ZayM6JXF0Ky9Be10ufTN+fS40ZDgxdlt4NSpCTEhKWmlKQ3JLaTdbTUJDJjduVSZIVXA/VkhISHhWfXlyPC5Y''@;'; put 'put ''KGNKU1FTejNRc0tpVEZ2Y048UGljRmRjUWJmaVI9VUMzbiIiQUY8aSE7OmI2WypOdDNRUSJ1YXU9KFlzeSYiYzpqJnBdQjovajRefEV+IW8qYWB6WyxzQzI3Tl5WaEkpci9ATXh5eUJsTHM7O2MwTCxqTTJOSjUvZSxUWixaMS9KKWVnNSJ1X3VvfXBJQGdLTk5vejRbdj95aTtsVnk9OFtNQF0v''@;'; put 'put ''XkYqZCE8TD9HSFovPF9AeDkhdE53MUxda3RXTVEzQ2ZjMzxfZT5TNSVaT3pgOSp0QTlJaykjVHBPK3VrNGJHTzZRRWQmZk1fWm1ATnZsSC9hWHo5OC4yKzRnIyUlLkxgISNJZ29EPTtQKVk2elhyKipzfDF4R3VgclFaS31+WVpZOC5qc3NSMCppZWYmfjVmRT0/KmlHZ0o5SlA2NGJjfWZvW0B9''@;'; put 'put ''Z3sxJWM2cVB0cWlhZzBgLGY4W24zXTlZKyVoKlcuKSRRZ3UifGdSc3hAb1ZhenAkYywqL2Q7fn1DdWlELmRUdGkkbj1WNVs/fUlsb3tKRW0vQjJ1ZC8jSmN5P00+clsyRiw0QGRINURKOD9JN1RLb09LXz8sO1h4XloxZGwjYXJfOWV2SGIwOiRnbmM8RSN+InNTOytEPFkoRlFxbGNfJVo9LnVD''@;'; put 'put ''Uj90I0VfLiV2SU9+VmtPPDJ1Mks1filCTy8zQTA4Nl0yIl05VTpeIVNWbkcjTHFGQ3clNXxKZ2VMK19Md1hmWkgkKSVxfmZla3VGTnVBaXlfIXBoOGhrO08zSGJoI3lpbDliOUxISTZbUlleP1t1SEg9aX00LjxpYHJdUUs7Wj93Mk1OaSVwenEiOyxOVyJWYT5LdS5oLkpRTWwzbUk2a2I7W1NX''@;'; put 'put ''fHsvZnE/Y1Y6aChrKyZnMThzc3RNXzVCa3ohdjoxN1Y5YXdWSEUwYDF7YXNFQllWZGMiT3FPMX0uYE1lcDJFVklfJUhZOXlhJU5rPGQhTiVOT1RfV2pCIXR7ZFApKzY4JU5mY0c4cGU/SEBoXyVtcWhuVHdga0Nhb1paQXt5TF8jcGNtIitVcFs+QkdkPGV5MixZVis0Rmw/WURIJkhVT35YJi8i''@;'; put 'put ''MnhJSDpjQSN+I1UyWER3VnQsfGA5aytkRjdSJil+N25CNkxabTwpcjZ4MDhuNV4yPksvSU9AJi9OIUlDP3E8aih0cCpDeDUqcXtVITRUOj5RXjhpZUdydSl8I0RfLEZbSHwuQHJHMkEzSG87MDAxKjF0c3JJYmt+bEZfRFArfkNvWnw8VyEiZkshXT5TaSFYKlFtVmJAd3EmWV8keSJIOihYVFU/''@;'; put 'put ''OzRBb3dje3Q8KH5yVnRIdUB3SXFCdFdmdCsyXTd+T0NAIVpzfTciV3wvdlhxVmcrWnVneFdEP2pKXkFVKkFqVEJsOiEyYlR8fkMxbXp3dThkNzFZL3BEUngmZzZvY2N5LyFgcXlYWXtDNEd2Y3h2M3c0JDdtOVdjYz1AJntBVklWaFcuWElhaWRwTTI4THMucGhANVQvbWZgPGdEVUFBPXc5ckow''@;'; put 'put ''MXFfUy44Z04ldCZiSlF1OE1ANUA2aVJWSStaU01vTkxsdEQsbzRRWXs7JWFnQ1QpS1JuXl9CbipdaGdrVldRNDohKmY6ej4qfHJoVzJ+TUR4QSRJTEddVGFCUUNaSElOXXM9Z3F+Sl4wNmtYe0lrWlFAN2gyd1F5OlQzViVPQiMhNkN2VlFrKiQlRU18WURjKUY+TlVnIXolfTM9Ri8qMzxELkhp''@;'; put 'put ''Pj5hZkI7SDpPSiEycylXSjYucjJwaTdSdStUWzovPVBdRCxWclR4QiF1Kl07LDZIXlZ1fFIuRHhMVXtROGpdSlowNikwdmpkMDpNSSFYITw1WUo4TDksXy9odTkvIzk2NEVmNl9sPVYjTDROQjh1R097aGQkd1pWbjV+fjVdZ1NnJmJ1Z0RoUGkjKXIlLFdRUjptMHdyanwjV149QDBNRDEyQCEs''@;'; put 'put ''SH1PPUM3KX0sYDNnQV9AT29oalUkUmhAV2lkeXhkcVVeTmxbPVlrSCxmQ0d1NnwjUjQ1dV0ieltnPV1TfTVeSEpkWn5Xdz48fikhbWJDckMjYHNYa3Z1ITVoY3IkUCRndSVEcmA1fm57L3kodjZLVEhXWHh8Ji54SWgqeGxqb2VDYXovZXNfXUZzKzxQNTp1QSNKQTdEJGg/czxIaSVgOnxiU0BR''@;'; put 'put ''Un1EL3lrRUg1KC5ybjNEWk90QkNPSkh5USsxVWt1Rz98ITdaNlF8WEYhJWRGYj0qfTR2S3ZaUWA2eDlzVlpoV3lVMk8/Mlh1dH42JlNgOj0mM0whdzYzNDYrbjA7OjRyaGsvXkt2SVZ3U2g2eF0xVnNjX05jZEdqKSIrMUh1Mk0lNFFjaUdiR2ZkRy9yaCM1PShKMTMhfkJPKV9ydzQlWW9fW0Q4''@;'; put 'put ''XXclKndRYTlMXnxUMTVtPnhCOm4sOz0wYTdEbiVTY1gzIkVaZn5hRmA5MzdQQ3k2MzwpQiJsclg3RzM4fjAzIXFMcz9uYHVeZXB1WHRNMkEhVGRuR2B0YmtGRTVUWj82X1okJEQkOzxPc0lZP1ZgV0pnb1duSzQ/dilxd252TUdmfm1FPGokdTowSUJyW0Y6Izd+Jjg0KyFoeyNNRENKU2BIQmtn''@;'; put 'put ''RXZjK3t0d0BMeyVaVm1KWUhbS0dsY3ltNjF1MkY9Pmc/MzszfT9aVltVVHFOSzRuOTZQaDhVSDNAISx7RlkhWUNbbWJ9TDRtPUtsci5fPzVvVj49YlssUDdQUzlqKV40NTRdcyl0cFVaJjpxN2FARFJdZXVId2FPflQ0SDtGaU4oKS9BMjtCYyg8ZXpeb119TWoobjphd0giV2gydUUlJi9UOEVu''@;'; put 'put ''XXk2Zk1+PipsNGpRNF9ie0EsbFprKH04Vyp5UmtVeV8xLCQrWXk2d2NPb0shSjhZOVVSOm4lcUF4T0I/I1E7eUc8JkV3QihlMmtmJn0jeX1tL1JiTlhrSUBHUzMhUn1Te01DIWQiNy9rYlB9OVhGNDtYIUR0Q3txU3JWenNVT1hSMixYLEcwWz59NiJCNiRGZnY2Sy5OZXcoRklWPixsK3AhLC8j''@;'; put 'put ''N3ZMdVhNSiQlTlVTRz5jQ2kjby4+YjVeZT0kN3dRTzxieyo3Z0QwVldReWteXm47bF8sWCg9bXR9c2hhVGl4MT1QME5vITUlUl4kNDsrJWZUdGRtWzJ9VmY2YElmOkhzcUgxKUpORTBWaDI4IU85bmo2Q1RTQ004UnEkOClePSoxKF41WUxtM313OVcvX0lpTTtyOVY1TiMzODQlQUIuYTpsK196''@;'; put 'put ''S2ZjLmIwTFdxQkkrcEZiK34iLyI3LilnPy9fNFlZfX5pdkBQRm83d2YibiksKFo6Oihyc115IztBYTMxKSxPITtKIWd0RWk1STMmcUt1P355SS5PeSl7ZnAhe2p1eHlmOiQpLjhYWDp1UF98Sys6WGsweyluS1ZEKWFLOCtmdX5YIl5ie0hEekw5dSYvRUlUOktJXnhjPGQvJTxgWjYyITNYa2hW''@;'; put 'put ''bkFuZ2lWMkR4K2RILkF3PHBZRnE1KUdReS5gJik2dy87W0N3eUtiQytVeSosPSQlPWhqNDlCb3JpYTBnL2dCOyl+d0R7OjgsMk9eRldxdFEwfCsvfUp8bX4sUHJDfG9wbGslIn06dXpPYE1dRHdQPGo/SXVoKlJXJn4mbEZrISRzVVUyTkRFWFpiYVhZSVcsTV1vPHQ1fFJSMHB5akUvbSF7MHlf''@;'; put 'put ''SThCVzJidkAzP2VzZERVQzkjUHJsdTJScyhvbFY1XVI+dlNEMlpzbF4rRnlsVWRyWXxjdnw/TkBaZ1ZhbDU6Lnw6XiZKSGtKTltmTVdXTnpnYyV8TjNganhvU0V0K1k5fGwqRkt7MjAiSSJMWDl3VU4wYkdfPn4pcWUxRmkuNnl4TX54NlFEKSw/ZmswJGwzT2JBQjNrJnNXQE56fnZPKTIrMnto''@;'; put 'put ''PHZZOTMyWk94YkJxREY0VmouL1R7JllAUD95bGJhREcvOm93fWpCelRXLnAwPSFfNi9OaDVET2RFTzo2RDRqfDUzVVd+Z1JJZSppMSRVTTd9MU5+ZyRBUW08ZFVOfFUoJipzL2ZoYWxzJGU+b1AwKGBeOnc7cXF6Rl1RbmwybDh4VDFpPTFaMmJJOk1UO34ifDNpK2lQQ1JCYVFkOHg3fWVpIl0u''@;'; put 'put ''aHxPS25wUSM8SWBYYjFBOUJAeC5RU2IqYypVd3d3a3VaJmUvfGsrVlR3bkpNam9+QjZoJC9xfF1oPnE3fE1iSSU8QTlSPkcodWZhJHpKeVZtcCVrLGAlVzJRWndITSZAZUskZX5DOiJqeyg4fmczcmghJit3UXt8SUYrK3NgJFVRZ05IUUA4VExlb0Q1dEBjdXdBUCg+PElaVlteNC9QOntvWXd3''@;'; put 'put ''R1d2K2NyQ2Nubk1lMW1TcUtCQ3J6b2Z1ZShvLnpreDRCdVUifC85T2g9Y2NKOUJPO0lIbW9lUG1tXnl7aH4vNTNCUiZBITNgZFtGREVQdHJPfnJSIUZMMko+eURDKSUiSUpgVzY8RG1senhsX0MrNV0sK3NePyQsJXY+JCRyPGl5IS9TaE5dNk1CVntFfUQ1XlpMRiUreTlldCI2XjpEfSgveGhT''@;'; put 'put ''d1ZbQ2t8TUV5NElVKCtdK1lnT3J2MkZDd0FgNntbI1dXWj1UdHg0YFVBUnxRM3BxQjFfLypBU2FlYUQlcTxZZyNwLENPMEZwTytBbkVXe1IsYVBHWH49Zml7YFF1NzZRXTJCMXh6eG5RPmpqWmNMeHtZcHBuZHlFM1tANytSOSkhKG9GbzpXe2BMTnZjaiFqNl4hMEpeUEY6flRObXpnMnY+OCNg''@;'; put 'put ''T0MqLkJ7XS5KZGA+KztfWThXTilCempYK2AzcC43e2k0YT4oU2RAcUJ5a2k1KTY3cEBCRSpZNXYwK1hUciR+bWFZfTtmZDREVjBdWj4xYVRda2Y/dCtJfFYoa1pTMD9GYip9cSRPcnBLOHNgdzEwdXRvXU9qIz1gZilvPWZoQ2xHcSU+WmpQb209ZX0pYVJqdW1fMGFTPD9FMyJCcSY2IVlsNjAo''@;'; put 'put ''dnp5NU9sTFp7KHU2fHB5Zk5XRFc+ZW4/TnY+XTNueH45Njo4ZH5bNmR2Kk5iWzglWF18L305WyxNNj9yeXhSTVVBW1dhX3hraDwifE99RXNzMmlxJnRscFgkensoXUhPSn1LTXZALndzMiV0JCw1JFVLVUs6TnB7K2RYKkp8OHBKKWFQSV9EZkxQW19kP2hiPiUjb2wxM3psZ08qTk8ueUg9Unl0''@;'; put 'put ''fHI8b3JleTBAUnwhMSlaL3k7LCExRVo9TmZ8W2V4WmBBdk9nWDZqRnhWfEgrLHtqNmwjPVI6YE5KOklebS56V0xybCY1R09DLmpLOi8iPkczViNRczkwXzE0Q2ZISWR7Oz5vUWZ+YTp3I2Umd35JWTNbQF1BT15uV3FyXVciWn5LO3VQSyZUVzF8VHshQDUwLkImSGxCRHorZTZ8cDxxejc0ZXBy''@;'; put 'put ''OmN7KXlrYWNXUkgoNGxXKzJMej1VJHleQD14SE4uPnRAMUtuKH5+WTA1Z1llYmJVPlAuYH17b2NBSCRSYEZLbkhsMmFMVF1WODphak82W1JqO0h4anEsbzxhKVl0I04hWjhJWyN7c3osSSowZ3NsM0xpRlgxLG0pVilSKWhbMUh7WlI7dnhyRERnLGliNFc2NEYrP2N5ZzQyRTIhP2osdCJZaF46''@;'; put 'put ''LktJfjskWFgyMjY8X0R1MnsqQT47Sk8mJTBHJWlMXjEva3l2NntWcGg/cTpCeWEubH1dZ14pb3VtXmdYWls4VihnKSp4IT9NNntfL2FlSEJeL1Ukbj1PanlTSjNKKjNjJnQkcW1MazouJn1QIXZ9aSUxX3guOzZbQWNefnBBb2JbOlJofTFPYG0qNUNbdzdqQXpofEMpTnpdO3ZvfDV6QlsyWjJN''@;'; put 'put ''akptUzlJdXRrX3YqITY0aGw+LlpLbWN2bCpNYj08Km41fjw6dztPT241VHN3MHxJcnl5KDJkdChyd1dZJFAkKzJyM1BESVdSVTthYC9vfkRJfVQlMiFRNTQjQVBySUZiUHIuRk1kVFAsUWAxKDZTKDJqPlUpY0ZQTDE6TGghZG00enVXbGZdZWY7JWQrSFhhTCEuMCFOcE06PE9vbmczeV54QD5O''@;'; put 'put ''KkdRJFZ2Q0YlcFU6KG1KcFUpfH10IjtxdFN9ZUVbUC5FOU1UIUc8MU4zMmlkcmdwRG1WPVcqTkp5cTJbKjlwIUxOPDZaRFEwU31UcS9UKTVsSFV2ansrU2tkb1hGTGkyOlRjb2hXTmA6W3N8X0AlPDJMfmwheD1TbWltfkxsLCNoVmR2XylbZVJ0WCRKVUdXbWU4fSRKUFImLEkhKjxVRDRAWFtG''@;'; put 'put ''IVJ4Plk5JmZsImZVNjVCUFByL3VqdGg6Vkl6fnlAZmhBJUtAZS4oK0RnUV59UGBlcmslOnZpXntHaFMqVVo5bGombVMucms8QltiN3xsdlZdc1U3RHo/Qkx0dnZAZGA1I15lQVtrUXVQXVBCbCsqRXR8UHBPXWVPP0t8Ymg/VDVGIyh+S3NHX08lfSZPISlPOllrRVs4fWUqdV54fGZRdkBUYXwl''@;'; put 'put ''eS82fFpWXXohPiJNW0QlUHtFWzsuPDRiaEhjUzRXYkIxbVJDWkdqTVhMQytBIk1ZZXdBZ3NQQX5bTEx6P1lodyhPS3NnelU2fGRialRoUWQzKlp0JSRrNj9WJUF4NCY9dlIwWCpNOVAzb0hhP1BKSGZ0a2ZoUTdVUVdBOERONVluYC8hNnh7YUxgMSNYL30zTUdYeSx4Pj5aJCVNPnBxWT13MT1w''@;'; put 'put ''NVZFOncoP0JmWH1XOFp6NnxaODVxbDZhUE5IfCZsN2dNNCpRUyR8KGJ5SyYufER4dnpLWTchW3N5UWdFaml9SmRMUmtuY0twayZaNk5QU1hbVW84SyxKPm4mZVBBZ049O1t4P29DYDN8UCg1dD1pZGNPNT1zdGQrRD99Tl05MkM8YX1SUkNecCNFN05YVmVHWVkmbSNgSll5fSpKInJuZ2NmVHo9''@;'; put 'put ''RXdLfmgrakUiPF1wVzgibGlLSzQhNDxeW05Ud04uYSslSj9+dCI4eU05ZjthNDY3L0VTOVJBL0NXUiUrMDhgVmsyRzl9blJCRUxWczxAOk8udzdgLkYwJnAxNFFuPi9PKkUvcm9TXVg/bUMhcylSVVlKQEQuc29yODtnPDtCZmVOLyUka2R7T2xfXjU4c3dnbVVMcHFabkIhaCp0XlAuSUpOW1E2''@;'; put 'put ''YU9iaW9NMGxpPipBWW11OUZLQjt4K09ANEU6bjpgSHNvfl1TWk0wVlsibiRAd3BwSnovbT1iJCpPdkIoSyQkKzt9KVZJMDFqc1hqKFlzJnZgVyE1Nm4ueyIrXU9wcUBoQGBOdEdfNyF0L3NCZG1MeXd5M3s9YX1fSjwjSHhwPStaLk0rZTM7dD1DVkBmMHh2QzAmQkoocnVnN29kaUk1V2FpViJa''@;'; put 'put ''Y1BfWl1EOz9SfG1Ybl1xS31ba1JqUlgsSmJ5d3BSNzV2anJmNiR9bTZOSSQ3Vk5makh7IU92IjJ4Sno6e1s9Mj80fXUjfkBldW92TmdXOmJOLDlVLnxOazsoeiE7OTp3U1s0dX5iIkRKMWtIRSg2VVNGZilbV0d6e0dTM3dAallXIVpqbm5BPSwoVWJPYUxWfi49RFI/OmlDOmJwOTh0c0Z6I1dJ''@;'; put 'put ''WFVLLHVmeyF6Q358I2NpNj5ST0lrPlYhOXBsU35tRHtZMHBpaUleOFlifjduNjJuV2thUF97JCpvXWNaOShzQyYjaXhlLzNDIzUyaXdaPzEsVFcie1BnRkk/UTczKWdtN0ksXV5MbDEzdHA8WzZ9Z1sqQn51RlUrbHlYYDsjaWheelVRLlZscSNjQXtFSDRpKX5AWz8rKEZnfkM+N0tiKFF9aVFo''@;'; put 'put ''aUlSV35waHNeT2R9KCQ6OjUlREpCTyhod0YxXlg9TyNVXz0wbl9PIVV2O2Zab1plUUchYVlyUmRaYyU1ZU0xRWRCSShdW1Jde3diOWA4LDV6R3ZyT0tnJUt9UFIoalhqd0dWZHFCKjY/QjteNFFtO09FMjJUfjRSSHZUNzVlc19pTik+NiFbUjk+YHVISkZKW3VsTHZ1OH5WZFdBO190eUAuYTAl''@;'; put 'put ''bVsyK1RkJU9JVVdWTGNmMCo8T3goPUlZNm89eE16PzAsQW1tKWJBLlJnfH0iRXAoKl5OU2BtM3V2PXc2JFM9Z0JaaUR9KXFkfiVmR0tAbnxTLE1pcVFiUFBvWTMhW186YiFdQk5EMlA9TF11ZDJfXit3KmtTOm9ed3c2eVhMeHQ/TEJ4S3hmKSpBcnxWSnE0OUlvJjdwXn0jJV5lPWVLUyJURTRi''@;'; put 'put ''em06NFdqfSorKUh9MVhec2IhbjE4OjBfWDpqSiVjRFVLZz4jYWdeO3pbMWdpKjdeMzJTK2Vzay8wcXB+S0AsKXN9VlFwJjgpeFp6dGtdZmxQOUxtKkh2Un1+Ky5HIXwkO35IVXtsMCZ3YSFhb2BOaXg8dHBDZmIxZGU/a1dddkw1WWY2RypFdmleSVRwPG42UjcwaFNvN0EjWjZsdyN1Z2hYcmo5''@;'; put 'put ''ZW5ZTC5wbklHIXBCWlJyPEVLaGlZODhrUH5LWSVARDIjczFIPyRLT3U5IS9WJmljRiFBbio2VERzTE0ub3sxJDEhaSsoWkxkPiU+MShFSVFZTkVEIXcyYkgyPnYuQ0xdO25SQXw/VyQqMW0uXikhKTNWVFF1bWNHbG9Ebkwvd1cvaWovST9vaGlDJi4vIll5amwvclBARXMma1psREJmP2l7dS82''@;'; put 'put ''PCgxRCZ9eiw6TD9Ac1RZMzlFemwhNX5KalsiSkN7VVF5WlNlZjYrWCFlYjJKJlQrPGAqWWw8cWkuSiN8YSwrbzE5S2UxalJFWiw5YTdITEZqfk9gNnVLNzJwS29BRFN5UDclQiR+XjV+OTl7VSNfTU0uSmhJNT1OLE89THtiI29yTTYoPUU0c0xCNSpbR3skaUBgTWFWLHJMenA7QzhfSm5MJWZL''@;'; put 'put ''RjdYQ2JwXzwkX0RHTlMmQUgpY1NBPWsmJjxgL19NOTArWUZ6YzdGISxhWkc7QCF1Wno0ZD0wUGkycjFJPGt9MCk2Rmg0a30qWjR4WXhnPHIpNFYhTzpCP2BVWEQrfFdhX3dwcEx3X3FYRHhlKmRzakg+d2d1W3R1aCFuWkdMaCkjQjVLcGo/QjN0LjBmcXR6RENoVi9HMjVyIlhkNHdga288XSpF''@;'; put 'put ''R2JKSEQjb0I9ckBGaXE2U2dpaG14N1k7YUdpez00Rih6P0drMGs0Yl8jUjBSM0VaaFExN21JIjRIbjo+MUBgO1lIKVZLK2trYHVRcHBmTDxEU2xCbVEpdUo/Y0FxLm9lOmEwVHlbM3ZfRUxUL3AkKmR+Nyx1YW4meSY+OEk3WFFyZHdHQz56TH47Il9KUlkxfCVQTFB0ZXw+TH1MbmxJe1ZOTC8v''@;'; put 'put ''IjhJeSI4Mz9mdG8qSiVufllZXTFbNi4vaEhXW2wvR1FvW296KlQodk9oIjUhOjhwU2dqajguLiooOVcpTTsqKlNCc3JqQk4/OUNGJTw4Im53LE8vL0V0Q21KQnEuaDx3YF4hfWA+b2UjJX13OlZLM1czRjV+IWhAW0ZCOV86XSlJSVZQKGlDYjhIbitvb1YpYSlfTGZPO290aD9IaWZyYC9SQUIo''@;'; put 'put ''T0Ywe00lOEkrJTZPWVBPQ1ZCUkB2W2s0fDhJWCRTPXV4ND9OS3pVOk9RcnBeZ1Y8NEBkdFlnUkVTaEd6KURWKHl1SkFhUkYhWjtWUE18T1RKeU89MyNOJGNkYXh3dHA3az9Jcjw3JSg2cCEzWisweDxGUHY/ZjR+bzUxZkJ8YS4oP30vW2R4VSMjcXBSIX10VWdjPGI4QV0iQDZCR1FfLCh2Q0Qm''@;'; put 'put ''M1cxfXJSaldGaTF+aXhzKFQhTDJ0IUpYYE5iX0k6OmpzZjJsQClpTUVDfXxUYGIwTGw8L04mKHZDWyw7ZyVqSm0/OEd3dHBzeFNjQDZLSGJHcTpkTCpSPWoxTE83bXxRYzlGYUo8JD9RblckQ3hzXiw+cH1sbi5zZWhAOkU2dUQqPFtofl5KaUszQC5yaSk3L2dMYmp5VjlzZ0JLOUEhPWdrPjZe''@;'; put 'put ''U0xbcS5CZlEjVHMrPWVoVCxoYTBoY2ckIXhbU1BIKlNLQCg8Nz50cS4uWU96MW1pbXVVeX09fj9EJF54X0ZlViZFdVNeSCluLCU2RH5FdD8lWzZneGRDej5bXU88LkpdLChKbEIsKm41OnxjUHF0V3NAY0xYL0cyI3BHRWZMeCZVRWk+SiEoQ1Y/dWE9bGpsLikwNT9KSF5RRDxaaktnZyEjU11z''@;'; put 'put ''c2lsTis+ZDxlI3l7X1hTZWZeO35VN3QmMSF0Uzs0Z2xVXTkhXW59O0I9cDNtVnowOF0zcU8vZzs0JGo/angjPGF0SEVEVytsek1EQ3RHbEY0akZIXV9SdEtAW0FHPEZgUEBFc1tqJClUJCFOL3w6ZiNtPSojLG13SFVbQVR1ZUBDWzk/W0c2cko1MF46Nl9aWCtlLEIsYVVkbzM9a2YybV9Eaisr''@;'; put 'put ''IlBTdWs8Mz45Nl9dUC9XNCE5cXZyUmEpOSNXRiF+Q3dVX2Ryb1JpR194R3AiKShoVk13Xzd3S2koXSt7XyhiXlYhZCxfcEVjQ00yRFAocE9DWG1LZ3tkInQ4Tk46TTNiak9eMm1TfVZjKTRoayN5Y0xDUzkuUjdrSjY/bTd0QWMkTGw9fVJ2djJSd2NOT2lSfTBjbCRjPHApSm9NTjElcjYqLnRQ''@;'; put 'put ''VHMwXTk6d2tHU3dWMn5KYVY/TD8pbVBBKE87VFBxcWBQM3ZfRWRlQm8yZFchclp3LF5LejBfS3p1Y1FpQ0UjRl96ITBLa3xVWHs3XzRCeWx1RC82WEVOeDMjZVA6SEtiYi5ib3dCakMlKmguUUVOfEN3aTNsT0tzM2liP3RjcSVZb0FLS0I5Ik9jfD5NUTxxWSZONng0MSJuTlFTMmh1MXliZ083''@;'; put 'put ''bU9IMmhJOHVJdH1dfVhrc2ZeMjAqWylneX4hOFs7KXcuSnJqJW1DXXJbfkxqVDs0UDl1QDdIRE9nQ0Z9WH5MYHs7bSpMY25HJipKZFBXIU1OMXtXa1lTOllkRi5HZiZzVVUzN0YkcXRJYk4rTncvUDh3RX19L2UmZndCRkJKOGEkbC5IcSNAbyUrIWlOUCQ3USFgVEcqbHEzJFRkZVV+I0dFZjN8''@;'; put 'put ''P2BidTJHLHp0I3BkbHdvYDo1JEJwNzVdLjUsSkdgKmRMYXN5NlBXemZYSmZ4OV4yTy56YTBhblBSajI5flVYZk1fcCtDWH19OUJfIVtLUDM0X25Qd24zIi5nJn0kSTYlKnJfMG9ARS9vQyMlWUZOSXkse2wpM2JJYTJ2QlE/LkBJZ019ajJHYGlPNC5uZFJWZW9TZWF3dVsxTWl6SShPNSVeRXRI''@;'; put 'put ''QUllSDBgdVd+P2dnQVN0eGhPVngocn5WOSVlayRIQU8oJWdodXpgQ0NhRnBTLHpJUEIwZWVqMyhfNzV7KD9geyJ7R0ZjMW83TU8wSFNfL1BmZV4vSkVRdzlDQ2JfbWQ3S0R1T0dGViZWXjYzTFt2Lj4wemZQTzlROTUuSWRBSlA7NV9pRSVwekQ5YGlwN29xNEVzLzJ1bFB1JmVQckZNang0c3Qj''@;'; put 'put ''Kz5XWT41OEZaYH5WK2BhQHdUWC5RLiZlQ11dNWUsSUBXa0BmeiZqOCh+cFFAdDQvQlZkTUF4JlEjMkdePm9OKEkje3coOXooNm82WHZqfkNuQX54I14vIVE6a2VbOCVKPitfdSp6YXYxPHJrclh3JVhiJSQxYzZgSk0sckcuc0hPemBJcDNzUm0sPWZgRUZGJFJ7VnFweWEpIWFEKShnKH14KChJ''@;'; put 'put ''fWE7Tzx0JnlCM1lMa2Z1Sk5hU34yakJBKXdeZ0FUPnFXfVBKPjg7NDEuNXBzYmtvWjQvRGBpYypaIUJWP3FfeEpCL2I9NywmKVduelJ2WHlWbXZOJiw8clpSP1p1LD0vR0VnbSpWaFNBMWdXQEFbYUlNLHtoLkAxclNyJTpOM3pKUDh8K2VmWSNKS1FwTkUzNUNZYGFeNi9jSiQwXSVHcGVQbGdC''@;'; put 'put ''NjYrYF1qbmNqRG48RXR0ZG90XmBHVURkVm1rYn40d0FAW1dyVDgvRk1sWUpGbUYiUjJ+KXMqMEM6eGcsKi42VSU7JCVUZ3dlcCRzOE5vJko1LCE+fSpkOTZhTEsqQnp6TjM1bnc0RyV2fD80dGg3d30oLyNDaSVUVD9SWjgyTncrWiZFJmxAWGROZ0g0QXMlUSRyY1g5PFRPbVtvO21baCk4JnJr''@;'; put 'put ''a2dJLDUxRHt6clkkbSRJSHNeMiVIYjhiIUUwQldPSmdzVishJXk9UilKd25MUV89KklKKixyOFRqR1J+VUgiUz9JeEskJTQlO10qKzAsZSgvMSlobCVIQkVoYGN5bUMzWkA+OEJjYHF+bSZUJXRLdXElMmQkQGNbI3soMCU6KXtCay42SmFfdFpYIz52Pm1taTZhQHR5YGFMazhPc2pWTlk3S30h''@;'; put 'put ''ZFNOZ1BBQlI5Rn5uNllNTFczcUtYPzR2YDJNUT1+NiVpVyZwQF9TaVdTQis5RDI+XStDXT1aZCVqSnhQUXhFaT0zXipBUncjXiRhPzJeYTsuUUAvbVdsPDwzaEQwIm4hVGR0T25mWzg5SXYzOExyayxbPzUqK3NlMEN6MFlzNC9OU0p1QitHcD5qOktlSnhncDojXV5eXygzNWxMWWosTUxlK20u''@;'; put 'put ''RlB0bF4hPFUrUnopcyVRVXMkW2o9WiUjb2Q+Ymh9JmNiX1o1PixKXXxGJHE5MGZZPyZNWlViczc+RHdqfCFXcDNSKXxkZns5Z1k8Y24hNzJPPiNbMl96OykrJEVxZjBNLFl6JDE7TFZjci5yU0h5XVJrSGJmPkw4Q0h9dFZMd3BvXlR+b3pSPEFrITpJc1BWbTk1dXpmYW1tKj8iY1BPJTMuRzBE''@;'; put 'put ''KiNpZT9YTyo3dC5MJUMjeXwoVnNrKkA1RV9IQ0U/QD1lc29uLnIzUCt4a20qJnlpTyJ3Z0gxYzJ4OXlDdjlgbztmRSxpZEw4MFckRVBkdkdKVjdCSXtiRC58fjhYSTdYUDs9blMvPDcvbGE3QiVhUDRIOTZzJiFvWV04RTd0TzYjWzc8PEddJSEpcVliRjooNWVkNSpvfXIjUGB8P2ZxUEJ0OltH''@;'; put 'put ''VGhGPWFpYWRFdThbLiovJH40PnB1VH5AMC9SXSNrVE0+REN3Lm9WRTM/bTtMQG0obmZbW34vU3Q6aEdlbitdIV9LWzo7OSU6XnFpL0cyTkUiM09VWzxkP3ledk8/a3g9NSgjNTZtZjdWNnw3TjwzYD1MKTxEWCZ4TCRUXjNCekQ2K2I3XmFYaTlRZ11bdDcrZTJ3OClrUm41IzxzJH53eElWWixs''@;'; put 'put ''XncmXUpTOiRAZGVGWVBvQm8uWyMjSVkjU25GdWwkNSo7Zk45K0syKnh9YShmbFZyZSVgWng0IzRLQz50cyx0fnlsfj8yUEpqKDxKKDYhTkV+T314Kl9GJXYvQzhSZWczdChvJnpELk5wR3JVX3RPdkU6ejRYejYzV2BUYXc9cmV8cE09MSY1WHBoNFlXXU85ZSI1I115Uyt9e3lfM0JpMk15ZC9P''@;'; put 'put ''Rj1deTBfTWBUTkdsY0Q9PSZTbXQ9JHp7Wk81UnAwVFg5eUFndWpQakBqaWhqOFUzP0JMZ3omdnJiTTlCZWZOKVhNaUpENjdSWjFmW3NSZ0w+XlhGRzI7Ln1vZGV2WE85dnlqLzN7Xjp0cyxrJHU7QCk7dlNrSHE5XSVgP2xdezpUJU1YLEA6VEQoNCV1VitKM0paZHwlX3dRezpTOVsxSzBJT1Mp''@;'; put 'put ''LnxnZ1YmeWlVU3E8KDNtJlt6KXY3KkNPP1EzYX40Um40NiNwfF1qKTM4TkNZND9dNj4mLEhadCNCTGRgT24qSUhrUy9qdHE2d0l8SyEyRWFuZn1sTip2fkhQVUdMdzN2SD5yQW4/eWlQK2UsTFJRYWtiKHdNPURsSjMvPVUiVkAqKlAsfXxePTNtTUxISWwxKTUzPHBLNXUrMjVZKVt2WmtLMFpQ''@;'; put 'put ''T1lBbExyT21JI1FzYXAvP2NpUjs3KG1mUyYzdV06VV1dNSJpKEt5MU1naS5ecyVEdEJgfEAiUTA+S21aO2hQfV5beiQmIUUkd0kqaUh8X1skLmZCMWM7NW80M190aF96UjBhRERgenUjVlZDenpmOnRAMmBtbjlnfU5JY0ZadjU5alhLNyNVRXBZI3J6Mys7InVKMWkmcUFIaVIybnBVUGJgfTJz''@;'; put 'put ''PHZtYEhmfjZ+QyRgcVQjdkNWKVhkYFFhSkU8L1toKiRNZU1TWXZ0JVZDYWJwXmsrb20vXmlOS0F1Jk5gWElleT93SFMmInYxZHpUKmlZQ3ZhYF9nWWJlPTVhPFFwV0xzblNsJHVHeXslbjsxZT0jcmdDS0FZMkB7eGZWa3M+UXIuMzYwI11yK1BDe2FodEpYVGdMLy5kRFo7VD58Uko9dSZ5JVNA''@;'; put 'put ''czNSJjdVb1F6VGtqU0hdQ0pzI104YnArQ3xjQ3x6MUciYG95M0clYDQ4OUJMfHVINm1ndHQ/b0IqfEAmUUopMjozSENZdCkqTCFqR20leHdfVChpeUs9Z0IuLyFXSSYoKWwhMGlkaEZBU0h8Y2UqdFVpI0VFUGRhOE8kZ15KcmtbcExoe3kyY006M0srV1BOTnZvUHVLciVpQS5oeiJrRGxhOyRw''@;'; put 'put ''SXFlMSNpP3lbYU0ud2NkJjovSFozajtTSHIqL2w6Q3ZAXkpkZmAqNCJCS09SSHx6ckRIRlhpbFAvSH0kM2IpM3V7ZX1JYy9NPmYxY3U2cjkhTFkpeGJVYmkjTTc9XUNqJFIxdiQ4fmw0ZG9wK199I2A1VFZ9I0NbQV06RklQOE4+d2sxYEUoJmZVQ2U3UFs7ISE4PkFhWmttPHlWT3RjVkduK2F+''@;'; put 'put ''PCg3LzghIXVmajJDQikrKCZlbjw6MH47dT1feG1mX3lJdT47VEg8MEc+WXs3UC8kUnE9X0NRLzVaODZpYU0oP3hJLE59K0ZpSylXTlZYUVJbLHcvPzZ4YCVELlJhNmtWfUx4UDUvSmoudlhzUC4uODtgZngpb1hnWT5LRFksQHpjKnQ2LGFzeW4hR3d9czpzQjF4LiI9cG46UVckMU9PY2VHUC9E''@;'; put 'put ''dTFIJVNWSGk9PUswNi42OFooTGtmUUYqcGp2WiQsZkc/UUZaM2dJZWV6Vl0rQlZma0hHQnFLeWZ1WTovUzYkcEY0ZWMhIjhRQmE/LExROSFuYTJVXShUbTlSM0FMayhhaCsuIVQ2KmZ2XjFWJkZObDNqZl1FUU85Kzk+bGF2eVY2eT5RaTRDQndYKFR0OF9eNjBzPlk9KTN8Y0Y3UXRTXU8oLmdx''@;'; put 'put ''TCh5cyljPVtOKHJGYD9MfGpYNG9ic09OMnoxcmdjN247S0N1PmVjSXZoZy5oJEpyIyZZK29LUjtJZTgpVXdkITdHLkkjRHImWGNSdUJ1dGZPbzhoSSRDMF9AeSZMdEMwLlFtZ1IsLkY/Im8jdFZ4Si5EI3ZnUSVxeDJjM2NPbU8rV3VXYT04Z2lnaEA3VFc5K0N+THlHPH5fKE14LyssMG86K3Zv''@;'; put 'put ''P3ZiSj9OITp9Sk1CTClzTC9vSjlnVkpqcHRSK2szZjs5XmBQSFFnTTglKSpxYWQzbkVjIWB9N2c2RV0oOFpyTVt2JC5nX1lvT3tqPmgsPkt+bDZCT206M1pMXSpCIUckVF1YITo5eVBiYzldYXdmQnYmaFRkJE5QbjIuUl1CbTBAckNlcn04KjAlR11TUkY/Y3UsS11od3ZaYEhbI1ZFUCJZNF1F''@;'; put 'put ''bix2cmgkcD91Ln5KVF0ySTpRIkBFRW83cDsjQyE5eE82OnswNXxNKHViYHV0LjR2d3hmfGA/cXF0eEsjaXN0IzAqdmt7RnAleF16VTZ6eXckVEwvJHw9azcqVmJAbjI3YiM1fFdBX0FyO0lzJmtubVJNZC5QXmddfDJdWVB8Ll4wbEhFWEpmRiEqUl5Ga2ckc2Q8Pj8jNXk1MStrdV0+W3UqY3Nk''@;'; put 'put ''SUZYI0ZNdWQ0SCg2TW0wZ2FpOkswK0A8P00seS5LalRzXz1UWkJaQHI4SlIpMlQyKV9Nen0yUFVjQSpddzlgOSJyNHxKczwhOkVFe0d4Q0pzXWBQMn5TNDQzR1Joc0tTYEk4MnRGN00oNildN1h0ZHZObXc7QUJwcixMVGFhP01LYyRNaDx8fjZAfj9QP0pUQlVYY295d3JSbXIqI2EzL3M1T1kq''@;'; put 'put ''OXBHXlk/QHBHWmtwUFJeT3ppbj1DanRESCkkaz1sdnRtO1NhXllFeWtXOCFUOUtsYjZYY0NZdn5hYEBsJltCJHdlU0B5P2FmRmFtPVM/OnBWSjY7YiVjNUpUSHFiSWZZR2hVc2V4Z3kiJX14dzhnPTs8ViVJWyoqRDE+LCgrUGpqcSxlQ0t5MiJOKiNAP290KUpILl42NVdrMWI8YUdTVFFIZH5b''@;'; put 'put ''PntlVVhMVEVWdEMlJERyIX53UlhwJmJAY2ZdfT4zLnRQP2dqWjkjLl9kN3tXRGpYfSF+NWRFOUNhYG5ackdPXl0mWTtIMHkmbnxvdFhOOUVfbUt+RE9TaX5lIS5UY05SUlAmPzRXRUYxQyh9T0dZTzFCcT1iXUtWVjE4MyYvSkRhJnt6RDRoXT5YY3F1L2AlQDZENSg2R0kmSzYkOWw/W15kSzpf''@;'; put 'put ''dVdXampEdTVLPk1MTj5yaHlWVzBUVjk8e1ZRRTJ5OVJOP2EuQjcvK05xL2V+QkE5REttc3BUNDt3cyhNOy88N31EfEIjV0VVKl0jQFlsWS95XV9bIixtUi80cFtSOzU3bT16Tm4qJlhjKWhdO2tGW3ZUd08vV3QkRHRFW0kmcVpJblIhIjRjUXxjdipGWng1O09aak5wYmtTJFNWO1VhO0NKNURp''@;'; put 'put ''enwkIlhrJUZRSzs7XiZheWdZfUJZOzh6ZFc1YHVGeVc8U3JxQ3VPTThzNzB8eFB2Z3RLdSp2TDluUmx9Pi83LmB5dHlxUHd1JD0kM346MFsmJlM3LEFSVXVINnswYm8pVHBtUFlKU2lBbngiND94cTo0dShSKltbRXJ3UHpBTXhgRjtfQ083RDx9UV1OZno7PndCI1pkSn1dNVo4Z0dkPmNKR3JW''@;'; put 'put ''NHh8KlVAVltVaktTUlUuY3lLUC5gSlJHNDc3ITQrWCFjalMyRU4iSDBZbn0pKFZuaV9pT1FSaT0wWyJKPSFYbFkuWCM5NEBZVThbfmtESk9sX0dKNi5LY2QsPVMxN0RyKVNIeWp+KCVDNHBGIS9fMX5gU3ZjfDQ4c0EwOHxfLmN4dWFMUjNNfWVMfWtlZi8pLnUoYFJNKDtLWzhZbFIzQ3xJL29E''@;'; put 'put ''JjA3OzBQdCQsWD5GbFEhQ0JMfDEuOFAmVE5CUE1KMVVrM0N0Qmp9OTc6PiEmKl50X3ZrJVIiY1hhV2tGfXs2a3M9bU9IUXhQTEN3N0tQUnlbTGE9aSJDP2FsPWolT0ddelBMRVhNMUkmMCgrMHAsWFBlL2xCVWNXTUpmX3t5cFRMRzZ3JXE+RX1lZjdFUitOMTNbd1lAPkR9ekVNYGJ2bFhhVkdU''@;'; put 'put ''b31wbFAmTGQwakc1N0IrdHomUV56JCU6UVlhPUdQbFtGVUk0ZG17LzYhPCU0RDl2QXN2bH1rN2poOiJWNVJ0QFBMdzd5cFV3ck1NKjNlTSxXe0ZRIiEzJjw4Kno1L2JEazk1Zm15W3Uxen52WThjR21ac1NpfUpKRkNYWCxIMExVKlgzVXBnQjM/UWMwOWUmfSJkVT4sOE52ejRKbjB7VCtMJCNy''@;'; put 'put ''KTIhRGE0OG4rXz4qPkQ7MWc8KWUkdihtWXYkby9wMCw8NGJwPyJ9NTNFcnNDZUE4PF55N0VaQDhkQn45XjFjUlg9O3hsYm9eSWdCeGZRZD90ZWRVSmw+ZihkI2pyK0t+TDI2dTIlYSNxYHE4bVZ7cnRhYFl2RFFjNns9IT1XaE5YbDxnWlRCLHdzOzkxIUViNiZtZ3FHZyEwcFUvaHpmXUd5IV9M''@;'; put 'put ''T3hnNlEwOj1KJEdHK0hUdnxsTD9ObjlKLjBhcD8pLExUaktbOTBAMmx8W2V5QTs/YzJvbyEhezU9VW5BPU08WTtNIWljd0g1UWFmUEg/RDVmWSpgWWFTOiteOGkuU2svUnZSalhRSz1fVF9GdTFbYTZjb25yU2ppSUFUO0JBSmJwaVt2QXR5XV8qL3gsaTVLTz9CWEIvbHsifl1AKj8rfSE1OkZg''@;'; put 'put ''WFJYWXdwPlRCK2VhSH5DMjNKbWFAUHQhZGUydmUvUGg8fXMzUHYmdHtgKH5JVE4zKnt9VCQuMiRqSnpgKF1LI2tIQ303RjQhOS5UeUBfdmc9dlBBaDIpPGc9fEcpeDcpKyE1cDBbVzMxQD8kKCRTeysqZjcrPGVCaCk5LytZfDQoUS9ZTG9RWFYrIV1lTSYpNUI/QU5zfWkmakk2RmpCfDpNOUIu''@;'; put 'put ''Ky9TRUJySmxSIyl3bitdeCFmUS4zPE1raWdMUXt2PVJGbmZiZ3Y1eEJoWDciO2l8JXlFbD15dXlNOkw0bEloIitrTUNQeiIjX3wkNSIjMFBDfDxxZF48LlkmRC9rNCJ1KH1+aGFpRnBjQEE7dX00cHs3dik2PyRLTD0oSH5QXnRqUWYxRno3JSJKTjh2cmVJNXFUXmFiK0xnUF4vNnspZ2U8dSp7''@;'; put 'put ''bkM4N0sidSZqP2RwZ2EvPitEZ1R3PlhlRHxBT3llQWE8ME1pKSR1IXt2IUhLbihXbjtQZzp1cnkidFNnNmcoe2RSL0B4Yz8+NXd2SGM2XlJ8KXI3UFt5UW5PXXU3JXdXYz5QOHY5ZURkQ0l9UXR2cXB2QHtiY1BbNyliaix1Mn1pRShzWD9QQFFEa2spSG5rPkplQWkxKF5BUzEjaENMclhnPkBX''@;'; put 'put ''QjF1OG41TytFQHYlZTQiJU98WnFgUUZrfFd4Nis4USZLTGxScWFpITBJZ2V2P2RkSyhNLj5DTVNJWHhtI3wiKktkVV9rb1hUOThmMX5Nb3xtdkJIe2UmcCNJUVFkcWdfMCFmazN2VSNOcCx2QVlaT0J0aDdaSzJlT1g8SytmTHx6cUNaKEt9d1djKWk+fU5VMWdxTzxwWHNnMXNmSnVQSFpZcyQo''@;'; put 'put ''IV42WT1qRjlgamA6KGI3UHUoUml7QFc1aWUwNi52OXdha149bStUTnEjKF5HKHkkZTpVeUhOTXRhaXRMSTB2fDc7KzJRQVM3aT5QeGtrL1B0Ynlscj5rP1VgRUojRlkxMT9qNHJJJGw6UzBzQmQrKDExQjErQnBnTGNHRnI8SDFiXXtQNmtreitnUCteKX1TaU9FMXBrT35VPmw3KU53Vz84U0xG''@;'; put 'put ''UUpSeTlLZk5fVFBmZXU2bGZMW1hTZUI8KzRNZFVbJTA1YV5UPF5oQUVgLiolQUV2RUM/LDR9STxuLGBrSGsuO0NseFAqc2A4XUZOLG1oOndVfHtSUyo/Q0wod2dJQkQzKiovKm1SSVRBVG93PCY6O0Q8M3pGOkBfZ04mJSwwNE5hNiF8LmN4RSVVfmdKWHVoJVA3fChxamxJLlJsb3RBXStPLEBF''@;'; put 'put ''cSpkMkoxaEg1WUFxWDdGUkpmdjJYKkM4W2B4SUM1NzdDP1ZTRCFVS0xaNVNnaS9jTSNqK3BrLnVAdzxDfWlbRHMuX1FtWklMMH1aSlQ5dFNeVmRTU0s4QWVMeENlbko9P3dEYHspVmYwVHBzWFo3QDZqNj9hUjosSE1obzgsK1VSYi49bzkzbWliZGtqQnohdElmY0RSRlJeV3M4V0kyYUl6fUNG''@;'; put 'put ''dFd0QzN4PVJ7Vj88SFVYLExDNmRNbSVXdFFiJTFJcjgzPENDb0xpNH1UWzZpLCFfNT01dnU+NkooJjBmTzdnOU8qQkslUXRAUCVsblpxZlBEZldafltOQW1IQ3ksXi5GRVQ2Z0BHNiZiZTRrNWx5JTBzSEcyVV9vVFA+YSw6cTZ8cCVjP19bTFowPjg5OGk1MFNgd2pye30hTCxEZUtXUWFUK2R7''@;'; put 'put ''azpWdGNbOjFQfER8UC8/O1M6Pzc0THk/WUJyXTh4Kl9+TW9ZW3ExIjpERjdXLiU1dlljJG5Td1tVYVZnbHBaQzpeWEY8O1VpbUQrTG14RmoxYmNPZ2MkT3Fwd3RKRklbISVtXTtyX0R1JWNxY3IsOmlfdD1pLC82LDh3Un1nZ1UqVlV+ZGJCVFdLQTJDQjgqeTxeJVpfRjhARSpXYTt3PiVSOkM/''@;'; put 'put ''aTxjMVddVGkvSGAzWz0vP21kMm53UUdyTCguV15nZz0kPkBGWHhBfElNPnFDYDpLdmZQfSl0fi5Idk4/OiRIW1BiQ2EyKFtiMGhRSHcqc04vMWtmYzFDZjVmMTdwZGNOJm1Be11pREJmcCZyQz1BTHREYF4pKXo2QklaWTV8UlYje0x0cD1+QTxZOGouJmBKQztxaXdpPmMwUjBzUSxHUnc1bVRH''@;'; put 'put ''USg4IltoY0QqKHlwIUZUUFt8aUZSJS87U0pSMUlzb2pBaUFxW0NWU0dKaG5kSio9cU4yNiR3ZGxOZ19ydjdxOnJoYmw3VTssfkBMT35bKGRbeClULHNCelFJUG0zfi82IkE3dy5xcns5L1Z2QzomdmEvVk18ImJsMmIqUT9PI1Q1P3diUyFeOjRaVFMzTV1PJG8uQVc8ZiFCM2dFan55am50YWBo''@;'; put 'put ''LHF8Z21eIkdVKVQlRGo6dUJqSGNLNjgzODd3QmskYlMvTml2dlI2fCkpfi4oVF9wJnZ2OisrXixdYDQ3QT5icWxZd1gsXUAkKW5NXiUpLCN0O2ZUVChkPmVCRF40LkssY3U7OmF8XXVZc0xXez5SKzx6VGNXRTolX3dmTSN3VXRpJUh9dXZNR2RLKkZDbkJnP2R9QyhqSFpHVXVFUHdCbG1tPUM/''@;'; put 'put ''a2FVYTVGYFNjIWUyNzBkZ31IIUpnUHNqOS91YkBVUDl4UHVxXzFiTzB8SEQjU1EjbDlxSV83TzB3cHklNWJMdV1YXzRCJlU/YFJgQEJwJGVdWnJmL2VdSn1gR2FCekg6R34lYTlQKjowekBjOTpMODExfmlXI31tRDBbbi5PXy9gXXNEZT8+YShuKCgvWiMxe2pdQWFoRyRUUEtuUV45dmY1Rig0''@;'; put 'put ''LE1sVEZbOXIhSV0rcT5sai9vbyhZQFIoSC4oXnczKWIlfmxpUWJTYkRgcG0iNz5YaytzNXdgX1E0bS9CWndGQT0pXzldRy83RE1OQmtIbEVJPHZoejdheHt0KEdDOG9kXXVhJDdaUG1qXSx0VXJhSFJiZEkhZVNUeH40c2cuR0ZZP11fKn1ycl9TKHJAZ0k3QHhaMUxJMVdRbEFCRjZtQlVwWlsw''@;'; put 'put ''OnVsXykwRilvOiRieUx8fFZ9W1FWJGVge3ViW3RYTSYsZD58cHB0OnJtQ341V350dltmenZ0dEtKUkdqUUJCQiQoIiRwc1clMjdhMmRBKGguO05IaiEqbHwrZDJhajUzUlNvKnl7ZU1meCkoQzUmfnkzPzx+ODpdbzFfTnBXQk5ZJiUqIUo8OmFCVT43Kz5iTnd9c3RfdV41azRsQWVHLkgmdHtk''@;'; put 'put ''cHRPbVkpMCZZSmhKZURBPH47M21OaXEiOS9nTllfT2E8OGo7KmEjIVEkLnZJQFJwZWF4QykrNXF0TkVwZE01Q2x1ZX5+XiZfWT0qKF4lV2NhZkg9I0RuakNrK1kiTmNHRXoqP3Z9JnZ3RWc4Qm8iQl0sLDhqWm9WejIsa3c1QjUqQ0NxVm9wNEBJNXxGKEorJTo0WXpOemhrSGxNc0dmT1RUVDt2''@;'; put 'put ''OiM9Q257K28sNEAzcyhhc3xEYyRuQkguJnBYZyNUQkFfb21hcCV4MHIhRTUwNyFrTH1eMTYzOiJ2ZjdFaS5vKUJbcy5XPUg5bj5sZkQlRXl3Nj0zbC8sJVddQCFKfTlJPTxbfi83PSJAQ2hYb2lzUkpLenF1dVVAbCkhcFpTUHNOQCF8fm1TRzRqU1JeNGQyIVJYS1dzbTFlR09ySEVBZEhSUC40''@;'; put 'put ''XigwLGlXYCpgP2gmVEJYKD8xbkt1TTtTb2UpS3s+ZWRML1gvUGJpVmIsMWo/KSlPWkdAYWRPbSVYWjt6UypoL1Iqa2lgM1pfUkJ1MUB4W0MsUl53X2syeHcsfH4pVFIuM2B1YVBSXVFraVZVTyRkQ0lNM1NhLiw4dE02ek93bW5qREY2cSZjbGUwI1NKaj9JSVFdbi4+VWtSLFQrYmg/RiVWdG9K''@;'; put 'put ''WjxpNFRbPkdEW1paP0Y5ckFOd3k+SjpKS3s7NEZvaS55cVhyUVorLGxrZml3PH5LSTZWNEdyQEFMVnQmPT9AXXNMPGU0UVpTNCRtezJ9Xm1GdmwuRzNSO0xFUHVUWUMzaXBAMDMzI1tRIU96OXVVXU0zWSwpNC8sUCxjfW99TGZ3MW5WYH1oYFhtIn42QnhTUkZ2M0Y0RWI6aSk+NTszenZgW3BO''@;'; put 'put ''T25WTTh5djIoSz14STg0U0FET1kwMF89ZzV+XTw+ZkkqKWl0TlZUeDhmJlZYcStzKHk0IVYhaUVCTlRgJi49ZyZ8bzRDR1RtSyhlbkQueXI9IihIX19yZ3JGemFiPmhxR01Xc3dJWXEpTiZLKF1NPzlQIWprYVg7ZFlaLyZfWVEvT11TS2VbeixuOX0lPTtqKl1sPWVxT1FZeUImazJWSi9eZENx''@;'; put 'put ''Tl1ffXhYe0wiTCtGaCVNcUJaYHkxQ1R9YytONSxwKlVOOCZLaj4vVl9XQEVqNU88OXZnMyN6bEJCdTVzSVNISTQhZkpfWH5GTil1aDAzQHwpU0pdODIkRmhFTFtyOnk7NzxuPkNDVVUqRXBaJnBmcHFGWX1tfTxscSRmUzFncGJtVmgkJnhDKih+K0B6bSxEbFNZKXVjalFSTG4ucXB1c05fR1c6''@;'; put 'put ''Wiw7Y3pBWUtZKERkLi44QjEvcjdUSWllWGN9eEVGJWlBRD9jPDApeypCblosMDZHbz91X2YxOEwmbk5JJDVGP0hUXjk9c3V9Q0BMbGReNihfLGhwWjRPYV8xW09acyg6I1cwZWJjMitfcyUwU3J4XmNpSWZPNigoQEtMR3VCfHVNS0FvMlF2U29ZRDA+bTJCUnM2fVU3NFtPc1pnNiswLz8jM0lL''@;'; put 'put ''dyV2U3tyWVUrImJ+YjNlK0oiNTcvWzRXNkl6KUJCZV1AYChxI0MlfHdJNj00d2NdNG0+O2pAUisvRlhqWXNfKnpJVCpaUWpCKDRMNyN2OkVePT5iVWtGNHNCX2hYajosUjEseGFPWT8vNFh9VyJ1UHZIajhjS1hreENvVjpnYlJLUn5qRVswMmAuRnNGbFMqXXBUeXZhOzwsXmYlZDYhXnoze1ZW''@;'; put 'put ''fVlpNTo/KFRjKDpQdiklSGgzfnhQOmx4eD0oKS81Ol9ZcTkhWFRkczteUzMiTFlOTW9WVEImJjYxbC5zW0JrO0VVYSs8bVc4LmwkZk4vW0JKWWB+WWdKUnRwdSguQCZ0NlcrVC98VVZAbktiXW0pVktXYCwvZ10/dWljJlg1RlU7cS4qPDtuOlc8V1Q/T1NxMCxIR1dOJSQxcERFOHskIkVNPHFx''@;'; put 'put ''Qn1wOH5NNGsqcEh4NzlERzY7RSZSdEklejpZL2ZMJF0hZHt3R3pHUj0ufUx7eyVfPCpWMjUlPnBoUkVXdkBBcEw2VitAYGlnKH5mbGB4NmlSeHc7OzJ4fiIqTVA9KjpDbkxFbFUsUWZTeyhoP3M5ekBvTTM/QT5vIXUsb3I2UlpCS2dvUkNBOzw+OTtaO0VEbj5WYypzcjJOJl9uO05qVXhTRTl0''@;'; put 'put ''WDNxKn1UITh6OWBNKEJRdnJPLyI6eTVTKDA9VE8lV0AvfjtQZDU1NFh3c0lPRGR+cV0uXWlsfEVBTD99Nls3MkxleU4qUVF0OSFtYSU8cF5NPD5SJlZ8eCo7WlZgP21lSDR3dmIsb11IKU8xdUwqXXQlby5FYjgze1NyVXR5PF9xcmVSMyx5NSgvY0JHNEcpJHEzZ2ssKl9eLFYvcEU/bSx5M0g0''@;'; put 'put ''dUQrd2tVaSV0XWI3RjdCW3QzIVZOP2V1KEYyTjZoR1NfeEE+I282WGRHVFM4bml4b3c+aWcwWUF+fWxAQ3NkP3ZHRHx4NyNSM09tTmNkNltEbGNOSz8wOFlaYCErfHMoKUVlQVdmWypaIyZJOltRRDVwI2BhPyxQQFhpN080S2hQbGxLIjIpM15VNCtVMFt8WmRKM0ZLKTo2Yk5FbWkmUmVOczBD''@;'; put 'put ''JGRoX19Ee3dEcVRDUi9pQjozTzA1XlU4U2ZeejE8aXBEaCs3NlRjWG5AUSghV0RpPExEVkkwQXdqJnBJOW9iQlpdWCRkNSNiYTQpJXFJYDAhfml7cXhAa04/LElGbCxMOUc3OnNURUg8eT1xVmpnNGhVTUttPihJYGI9UiFbKVh9KUhRQHozQ3N5SlV7XjwlSn1bIyxOQXNBYz1bJGZaeSNdQWhj''@;'; put 'put ''cFtxN3syalkoK3EyJjpeS1B+UzFedmB3XS5gfi4kQElaVDt4bT50ITlUU1MrSih+eGcodTZ2PzM/ZVRPV1NsZSE4R1RiV15OOTJyLlBATXE+fndBZz5wK2YmcTVJPCw2TStRN2M4PUtMdWpfKCVzKUBLbWM0IiQqNytPMnBRMC95a1RpbzZgc2NHPklhSCVJYm1wQStLZHdZT0g1c2Q2XSp9XnVO''@;'; put 'put ''PU5Sa0Z2SnoiMHBgPGZlL2hxU0Q6PkwkN3BJYyRNMHB7XnFDfVsiajR4PV9GTWkyNExDYWB6MmxkZSU5fUYvLkMxM3wrZjQwKntgQ0VIcWttSFAoPD87WypvM3NuTjpMcVtUWlN0YzJ2Y3lmK1kjaiVgaDNpL1dZMVgqISxyUl1ZRnRDTGRrUH4vOjNnRjNddEhpaHlzV31wMSZgbjtDOlo/PmFo''@;'; put 'put ''bk9eM1MhN1dHc2p3MHhre1dnIV1+TUxwMzM6IWMxayxUMiojXWF3SV9KQmJwZ1YrOSVPMHt8VWVAOF14MkZTUXZtRlZScCx5MGtoIXl+MiVYcVNRdGByZy9rbzRfemRBVDA/VH5qeClPXmdgLzIjXWo4LjsoRCl0QUdmR19hWTxzQlpESTZKV1RoY15NeEY4KVc1Z3V+d15bL2FAVE08b3xdfiRq''@;'; put 'put ''PHwzRC5fMTw9Z2R8SEssMjlYaE81PVFyLz9PLng1OXJFblpXP3R2dDV0WSJ+Wmw1WVEpeTNZaj55XXF5e0RCdjV5TSNsQl16bmBVeyN9Y2okJjc3I2EjNGx3VXxvSlt7M0RBSmlJQWZFanwvOyQmbnA+QWJgMUlsXzF3ITc1JiMmc0k7bj5pMz1qI29ZQG8oUztiUHlXM2IsUGFlPS89UHdYdFYy''@;'; put 'put ''RXZrPy9Bd3tqUz5RdEM2SClpOkMucltjampbfktrTDVtVj5kfDlWLktgUjEhWHJgQTtjaSpCfTJYSExaMSgpTVczQnNMfWdKW0NEK1FBTV0mb3JybEdfVjJaanVoW1ZNdFFpYjZqKTk2Kk89en4wYDFrVlRXWzxIZDokZzB+Y1RyaGtWQGZ3TmR+KXNqeyRxMEIlfUNwSyEpP2dBbDV9MD9JV0dz''@;'; put 'put ''UXZwJVA9P3BUSDFiQCFFWjZ2SWV0ZjlqIShzR0AkVjAkIUxyXiJxTXYkO286SmtLWlBASDdQTTk3N3Q6X29VOTNyLiNbPG5IPj17Njc2RyJyYjpDOlRHNUN+TEZ7QjdVYGReY09NOmRsJn5AUGc3ek0pcXtzfmlMQyVjNjUhW2Fma2p7P0x0YH48MSgoKThuN3UyIl5xUFJpaTB6Ji8pXT5jUGwx''@;'; put 'put ''VitzQFRkTGw7V2VEeXkjVDcvZjhTIiZLdkAjJj1Zb1hoVTQuLFVxVFYvRmVkP0QjSnhzYm91RW0rL1RhIVFOa2A6VTdMfUtyKFQvP1RseG1hKTlVdll4RD54YUtZQGw+RW93WEhLPE0zYDh2YEtpSz9oXmhCRWNPc0tOTUlSI0klcTh8ZDBkT11zJCgzaW4iSz1PNUlwXm0qbk9tVmE/b0VwKFsp''@;'; put 'put ''MW4wZClRekFvK0hXfCZGa0VIeEolQjZWR2pQMzM2N0doW11MLkU+X2F0e1lpVWVjUGJyTHpoaTp9ciR5bUlfJVEqV0hnQ3NMfXhSfD49enIxdjcuclMreHVpVUBoV3R0dEMwZWM8ZHc3dHNsI0RyQzkqe0txKVU/NDZUcm09NWA7YmZ6XnRgUy93VEhBLjtjdSR9b1VvWWlKOTd5cFJieCksUlAj''@;'; put 'put ''cFZ6UjhMcEs9KFgme28xNXpaY00/JiVaPzVaZ3R6VC4wTVZpP35ZJHczMUY9YGVmKHdVcHV4fUpOXUg1ZXZTNUFqMk5JL1B4QkBuYUlbPltXakN5VHtkOSVVKnxZNGkiXVd2VUVWblJJZUcmVGxNKDU2ODBLZXBoRHVPIl1VOV1YQi40MCJXU21obEcwYCFpbG1uM29ATG4zaFFLQTRASCVeUDQu''@;'; put 'put ''fDYpLDNwZ3l0QyxKdWZUJW8wKTNPL1s6fVJ2Q3dVUmhpTGB+VGdDN2hYUFVDOiJ1IiIjbXpATiFsW3l2UCQ2Wkt0bXxiU3dMOyxZIVdsRnFGSEBuYlh4OS9Ofl1LXjNJakB5X0VPc3NeYFY6LlB4ZXRbKiZrMWhFdlMuV3lGelhlbDBBKV93N0RlUFMxKGRSRDE6enArc2peVzk+MFl7TjxneHVX''@;'; put 'put ''PWFJNXhpdnVTYG8pIkNdfTMufSErYHlFQzEhZmopZD81IU87MTJuMH1UVEJBbztrMENEZzl8eTRPdWlWV09NNmN+QipZZUpbJEYzL19LXV9zRzFedkU0M1F7Vn4qaytdYTpeR0NGUXA1aTxTNTM0ISMlJnBofTxiOTBKQSZHKC4lK2lXTlBTX1EpPHRKQihaSStbQmUkYFVvR0d4ekske1czKFYl''@;'; put 'put ''XSFELk5sY0dqbHRheUJRTHIlK1FBeEg0eWw1fGhud2tkaWJUdm1WWT5ha2lDdzFFVm5lU083TjNiZ0lMIWJMTFRwLmVSO0c4d2QoZz9fcjxTK0p4N091fmEuO3l0OHx+VE9BS018YCllTUVIUnYobCNITD5vNVQqTnZeJXFfNVI+Umk7SkY3Z25EPCY5MyE5KDshRk8wcylVPmNrenhwJWQ+YzpB''@;'; put 'put ''TXtsZ0woMG8xU2pWaDUvI3BWOTZZTjd4Myg4NjoyPHNsNS8zKCJVY25fTnt7WC91bDBYJDhYKHY+UDF5Q2pkNHo1bzBuRiFPcmBmXVs8IWBaeXR8ZXZLVV8+K2okKk0hL2Fqa2BCVXMuYXdxSn5FN3FzbWhHfilEVEtXPGZ1QmMiO3kyKSR0JTF1VGt4fkpYW08xRWVUWDN6P0VSMHB7e2kqOFIi''@;'; put 'put ''R25YTF1nVysvbThnSHR9MlZNTnxDXlZAQz0rVix+WFtBa0Q7fVlnRDpjLiRDfTNNY0sibi5jJSs9OUs9WG1fRCp2Qm5FTDBUbHYhMihYOl5Bdj1rJWF2WVh1MDkpZ3Q+enswKl9FQC9PcUZzKEdVM3FIYWZKUlJjfGgmbDRXQlBAPUFTL2RmSTxYOWYrb2ZwP2RxdWdtLjdYXTMkOXBOcHNFPF1N''@;'; put 'put ''Q30zYzFCRmc1blpxZiIzR1FFa3o5aF9AK0FpOEdkPElrLHpgRXsla3pWWXcyflB3aEF0Q1VjLiI4cmltOEkzWDs6bytKdFRKcW46bXVEVyRxUWpmPzAmdSIwRXZBMGg5Lj9tMShkQ0pfKFE3Jjx1TERfTTZaWzZhUzZJMDk+OnU9ZlpPWDxUbz5rMjRKfEtgT1JnTXspZDl5NkgvNzNRSjZSU2xd''@;'; put 'put ''RH47ei9oOWVkSmNJQ2JFJG15W2guQm4hYC4+fTdnVTxjMVtTa2duVV8+NDxDbDc9QiJqNn5KNUAmbCszS1Fga3VWU0pvRixFWGojV0cheEgiejR3RDE/Z01mZzFQREFzOkE2WEN6eEs+SWxrV0E+PEFEQDRWez0jbXNhdCpTelNVd1hfekJySVZENTZ0M2A5YTtYI0peXW1zUiJhI1EyN0owVnp2''@;'; put 'put ''WChnPjZmdyhCOkImQ3o7I3ljS0pQW3skZXckVFMiaSopaFddJl00V013X0AyLE9UTUY8PWchV340bXRiemFEKjheUF9sInVDNWxoSn58bjVqUVd8KVRkL11HSGU5ZTtxaTlZKWU7eGtSeVtpQHl3aS8yTSNnR0JtbEBKdjZ9Y0ckTDV1RndYYmdtM2ZKezd1bXNrJU5dMFp6LEkkQWEhMyI5LGR+''@;'; put 'put ''TEl3NCJjYyF2YTsrYCxyMyp6Xm4/fnQqWiZaKWxGWnxsIktWbUJ9KEYkMShZa1JJSSh0dmQ4KDQ4X2RnKktaYXNvakRsX3NbPzdQL2lsMG0qP2B1KEZkU1JoVmRZSH5gKXdweC4zX2lrfFN4eT8qR1hbRClyP3NIPkRtaX03aTIhNl4sXnBeKE5zM2l0I0UwQW06JH1hfl5+LEFqPERTeH5sO1A/''@;'; put 'put ''TD53UmByOEQlKzdJfDo4WnsiLz1dbFhAXmw/dEJgOlF6VzxWSVUmdTZOJEcqcjJrWG4ufGhqeDN4bFlpL1d6d2Z3WHNvZ2lkfk8pMi40Pz5lUDYkek9FP3k2X3QlQDM2TVE+LkVGWCpzS34ydXUmNWJXZkMybDFCI21gSTlgfChsSSYjP2c9MnJNQDUiQG5LS3xATyEpK2IranFHaGVEKlZWVnVR''@;'; put 'put ''XT1HZVgoe19FPzxDZCNUKV4yRGQ+NCh6NjhTMlQrP3VAYXhSdjssZ3prKEMmNF5FdH13TjwuTys4MSNbSHMhMCVqM2YwP1FCUFFFaUZ8L3ltVGI2Q3JuP1NjXTcrYDoye3xAK3x1PDg7Vk5SRj8vZmRsMyJwfkR4Il9RNk5Kd3ZbfDptdF1IUzFffmNjOSNWQTE6QnQlMFVWWTk/aEVTN3dYaGxd''@;'; put 'put ''ZSxtVn5QTylmd1ppKXAyPXluQkZGSmNSM3ZDJHg5Nj1eSkFbVCZNPERtdCl9aj5HVW0lSDh3VF5fPV9tfm9MWTFqKS9Yb0R7WXxxVnZbdWNONWRPaF1ISVp3dlQiPk9TOXF3PnNmV21JRiw4ZjU7MjN6XX0lNSRHNnBPKVV6eEU3bSwkaEV3W1ZtNWpKREEqa2FFXmB7I2BxRVkzd2Akc3h8MFpo''@;'; put 'put ''Omw3ImBjZnlVL2V6OFJuaHUsPWRPNSpTWWpqRFZYVHFTWklpMDZKcDZsWGp+aSpYeTIkVXBjRnJ2OC5qZHloYUFTXnRgNGUvSGwpaEZ2a1tpdGREaEdkWDE9I0VtZHRkS3tWeWZqQGZFcCE6LGYyQCRmOCphK11EMEFBZmVXM2M5UihrWyVgLG9rKSZrN3c1JEM5Y3lLZ3dfZElieXArSGBsZ2NK''@;'; put 'put ''fVlST0lbUGhAMllIOFVkeXcoYUBUNUpSNH5De0dqUD96fX1+RzRze3R1emw0JlAoZ1QoSGxOVFZgYHxUbjxzTkZlciU/TmBIdlZ6WHc6KU81bHBZSDE1Kih6YjNPQVkwTG0mdmh0REY9eSViTlFAJmJQelB6T3c2Pzl4IzBfbS5aci5id0Z4I2R4REEseFduV3pGdTZ6ZkhMQW0+XzU6Mk9zK05O''@;'; put 'put ''OkQ0Mmk+RyI8XjFBNEJOL0JEMjlXVGdxJio2Kyk6UjBnVntdTS5DVS9CUGlbPiptYDM3dGhMSzhgWlFgfHVUKGYjXkgkQEtIQyVEPFIobWN5L0M1SH4xImsoSEd9P2FDKj81PWBnIjwyZVAsJWtCQWBBXTMyPEw7K0BmaS5WRCFVNzUmZE8uJT1RZj1hJGYuPHlnWGxEZj5qb04rP0pPX3pYOiwk''@;'; put 'put ''N2BZJUxWfWR7JlE/SzlmWkZLQ21paStuJWpIZFpCJmBTQitlPSJ6a2Y4fEBOTnU4PmpwcSZUSUUmTH4+ZyJ8fUNTakBaRkc3a0lXY2xYNmVsd1YhKnRAbEsveHkxYVNhcnNzXnciZiFGcHZsbTI8d2hAQ08sM3BOZ2deTix5RW8hQGxLempLS2IseU9CJC5vZHlKdHA/cCJKPml2JDFxXnhnWlp3''@;'; put 'put ''Wyk1ZlVnaCF8XURwM247bChlP058Y208cDwzbClncHBLVFtIWTppVXZje2JWKSZZLGR8ZUVFc3tCU2k+elEzbzIuPHxLVFU9Z2llKDo8KHFUeTExd146XX42KCV3IVlsTVExMy4mPWVbZ0YsaVhPfTx5eStLaCVbUlA3akxaKFFtV2xafHV+RmVjWS53PC44eC9MUUZuQW5LZTJPVTg5OVVFUjlT''@;'; put 'put ''PDszQz0qRE9IRXtae2JJMkBfdWZmITpeLzk0Rih+TnMpOHtSdnxXcCsxdyslSk5INnNmbi9pWVpaU2RtZVokU29ON3tOO0RrQ3k+Y0YhVGNSY0k1SngzZEliTXJ6RTx9dH1TIkZ3SFhdfSt7VXF1L0ZwLDNMeXVGUmJsQCEqMXMkeXZwLFJhZjNsSk5DPVtyVC5pUGVXWF1DNDcvYEI1UzU4eF9j''@;'; put 'put ''c05kSDc6YVkkP3YySUB+dF8ofXg2NjpJOF14eVBYNDRlRko1VTooPVFoPVhIPG5GaDRJVlRlNiFpVGhyNm1SaUUjNXxYL2kvfHVefEB3TWlPIT1XfTQiaiFvWiZFdD86TGB4WywkRmFiUj9vKm8qb3J1P0doV2Q+RFdMeHBRKlIhfHQycDlETGBJd0lBNDFJOkhieG9pUCFHXlsmfmxeZE5DVFlZ''@;'; put 'put ''cDcyR1AqMlU2QCFGWWo/I1BzVFVgeiQuW3oqQD9hWSpJcSUjQjpHTnFtUFh3SGJTdklIMU5sdzl8X10+O2duWUd+amxhQEJWdUo4OGUmbTJRK0xMWlliTlJCIWJqVGRIKGllc0k+VEtpP1RoU2I3PHNjd19uVSplIUZKZWZzRFpNbEZ1OXhoJmcwUTU3cCkrVUxQIlBGVzY4Rnt6NFZqe35mQmpk''@;'; put 'put ''RyFQNW52WmUufWRVeUZsemZMaD5NP3BYd0dYd2ZMM0xafUVSJFd6fF80d0JBTXRCIU0hV1UpPihMQmAlcHBWby50NyRFW2lgOEBTQ2UrXSRERzleNTlCJDx4YnYsVHZPeWpoeHhnSmZOUlQ+fGdmTCg9eHF6ZFFoZ0MqMXt1XikuIkp6NUtANUZoIkNSWEMzSUkvQiMofWsyTm1OLk5mPSY8YHB1''@;'; put 'put ''cl9RS2BUYEheOkMjSWxueks0czpWOGlZT0V0NyRVPX49ZiJOTkkqRW1sI3J5PTtlVT1pPEFnaD1pZjFQfChYIS5kVUMjdWJ4MG56XVM0ZWQ2VjhicFVocGh1ZmtVT29WUy5oaWJRVFpScUcjTzpMbUIrRX47VmJPUnA3UEB2OVdyYkVLRDIxXThGdllqWjQiRmM0TihlSCI9ZUwjZ1E1XWgkbysr''@;'; put 'put ''cn07X0MyMnd2cEV0cFcuUWtDcnovIjkqKXYyQk9ZYjVHKkA7UVt5ezZhXipicjg9LkNnbyxSaFh0cDNGOmFhVkJgSGpeTmFpMW41YWt9YnhkU0l2LG48LFtrY1BfV0RlQW1xI1tiTWF2T1g4dzBXX1U9cmtPWCN9WTg6SG1yPyRwdVQ0ZFB1fGZRQT9yZiJfaHphTj1wcCo+STc5TmUhJTw/PD8y''@;'; put 'put ''ZmVnRj4zPysjTDhfPF9SLnJyT2haK19xa1hKZ1Q0bVA9dVlLaSt2YC9+PDNPaGpbU1U/YkBBcVFkYl1KK3Ehck9KUCl8UWE6NnxVW2g/SVosYGwzcFVVJikpUm5oYDU8eFlDdnl7ZE5EPTt7fCgob3g9UTJhVy9nZj1OXko0bWA8RTF6Q2QkW3xYPX1PYzYuTFl0cVNELjU5RStaXkVNSnRhTF0/''@;'; put 'put ''VTI5SylIXnBtTDhsLzU8fm9lRzsrI0AmN0RWTWJ9Q3IxKkl3ZHN3cV9NLEVGdXhMTWhbb0hmdkI7XmlIYWVOczw/LnZkJjdCKGIjMU94MnNPNlkwRGRCcjc+XT0mdjR4MkxeZUJVUnFFenczMVQ6XlgmVnB8XlJuNzFxRUEmZUhiOD07bWwlM3o5NiZZaSEoXUBHTUJqaHgsZXB4LFJMaE5ZSkZ3''@;'; put 'put ''cmRGfD98dUlQT3Z8WHVILHdgPVFbbE4pL089enJEZDR7RytmLEdVeFhEallpREtuSVJNZmNnTitpbmBVeV8/fFJIeFgrLzM2bXBrJU0lamhoZV5bI3p1YGc5OUYyJTAiLlVGfTNhX2Z6VSxdUFNPK3E8fTVeYW9HSEUkOCxOcCRDY3p7LFkoZ0s7YEs5TGZKRm9XVStyUFlDZ00uYH4mOVhMM0h4''@;'; put 'put ''RnZGaWcwNFg7Q1RrYmQ2KmFpJnFMVVd2U3JoUU08Q3h7b2hRRH1peTZ0eWg4KjhtOWE9ITwiVlR0JE1ydGtFcGREfSNBfHElRmRuIy5bJGc1bTFZRXAucV13Yi83T3xvPnw1XkQjeUNQOi8vLixgbVlkMTJdfGROTSpgQEBMWTtMZUlrYmI+JVN8XVVoVmI6JW8rSXk4Mi4zKUYyO3NEKTYoJl5a''@;'; put 'put ''X1h1cilWckQ0bmt7I34iRXpGaUdDO0FwbzB8RVc0Zzd2aiQwOylsXW9Ndjc7NGlFRjgjYmhxSzpSRFNoUkxoL19RZTJRfWskP0NyUCxNYlEqU2FHOFJWPWlXJj0/IzNgRnVhSyxkaURkMT9geV4xYzE7ZFRbOSUrY0I8LjBDPVd9QTc1aEtMLFBvYlVhcUQyK3MjU28sQmJ9eU1WOEZOYVFdfFQm''@;'; put 'put ''YTVKYjVhcFhOUC5fdSFjaT5lYzYmYylGVlBkQEchaXBwbGxDXUxrVGd3STwwJjNENlghfTF5dmU4RTlfSl06OkUvYmo3SHgwL2Z4WCFXcSs8QkBEOmxpRT5QTmgpZm0/P3ZQRzVZPk1vej5LU2Y4KFAmLm8yPzp6V0lfLFBVREdUKGlFc3VeVyJvVWhDeU9eMH1wSiUmNTJLTGpANURJcHtjWFp2''@;'; put 'put ''T3YmI1okPVt4enEyLkh2enEpMi9RUlNdUHkyUjM9TipqZmNhZmRbUWh2OUIhV0U7SHtTL2lUYlB2a1JCV2NPenVTdkVYNHdVbDE8dDJiOzgjIypVYF9rJm48O047PSRDO2A9eEY9T3pZSWM0UCNiQXJQU2hNMXEsVmczeURLQGJWWGYkWisxNnBzISlVb1hZPnc7ZnBibkkjKjg1NE1JK1FPLGN+''@;'; put 'put ''QSQubF5NWS9HIjcxPHYybSMmTGleJFl+I3FuJW8kNXgiS3d7YkplcjxYTjhZMCRJWCgqWCk5fiFqKEBfSkUmektwcW81W0l4ckllNFZWLyxIfkAkIzVrRThAfTk9RSprU1U1L351JTAuaTlPWjI5JmZoUSMmeHtCdmZUWjVLbUkrNTh8Wj8jUEF8P3o2JGwsJiVCWz1eOFA1RkFvNj1+V0JLV2FJ''@;'; put 'put ''OnxjRlAvVWx6R2U0fkRMTHtQRzE/OjxxSD01SmN5RkZeKGQqOXZpTDhhcnN9QzZtQ2NmNlIrcmMxfGcuZEMvZml6WllpKl1pY2NMX05dQjlIfFFyc0p4QnZpeSREK1JRTH50TUd7LjQxYixTKWVoTW57b2BSNGZSRnZvWXVKejxbNXJSMi8pSUdbZSZyaV5vV1VmOG5nZXJaJVtUci8sV1UoQGN3''@;'; put 'put ''IztofHp4XUVwOmRwcmBffUZJYklBbi47bTBrWlB5LmohfSsxI1BEKyFwPk1vem0jTXJ6ZVV9a05FXUtQLCQ4ekU5YV58KUolX1ZleE5vOU9yfCRydSFgWHVqK149b09+N31QZDlPK1lxe0czNWBpRFRYLF45dnxZfElLbCFufSFrVyR9VlJJZ08mUXMuMyNnVXl1cEJyPnA1MTh6bGw6UjAiZiMo''@;'; put 'put ''RlsiQX06TV9VcDNXRm5LWzd8ImhgQnQ7KFBIKW99ayNqVHlZcnFFci44Jl8yUWthLk58JCxENXI8RWdxWzxRQXg/Ry5ORl40cy8ucV15RExTMTMyLzxZKy9jfVExOjs7I04+XjF4ITZWTHdtbz0qVHliRz02LmJ7XT8zO2l5XW1dI3MjMm1wMTcqRGt3QSxQT04yUjl6SVhxK1A2aiQ0TG9ne2Z7''@;'; put 'put ''Lys8YVc4aiUlI2hMSlE5OTFLYTNaaWZWdXFSdz5XcilrTUVMbmVQcl18OSo2cSpZXl0kdVEkYDtPdkN7aThuQHIkJSlOPyo7fTlNZH5qQTJTbThxeXBwJmt7JmdkP3lVKHFCT1VeTmJeL2VwPkY8YHN+WzNNX19xSCtTKTFPIko3VVg8bDVMb29AczdIOnFjc0QwQyJfcjlFI1o2Y2Rae0VTMCJp''@;'; put 'put ''Kzx3cCJsKEEwRW1IOFJIcD9WRyh5SEVmW3BwQmtreH49dmY4T3xrVFIxfUxoSSlXX15jMDd3XUp3P31HOCFMJnxFVDx9PiJ8ejRPTGYoNkVSOEore1l0anheUTo7figzL1YwJn4xOTh1Tn42YXciWWFJaUMyRXM6I3N3JmkqKkRsO3g7LyVWKnQ3SXdyczxGZkcuKHdnNkwhXmV6cUx8KEdGemks''@;'; put 'put ''O1pIc1l3PSElIXlAclA6WytEJUxedXdIYnpPYCVuMFZYXWMsbXNmZUVRTXszPyJbJXt6P1gqWyYuMzpbQXtXck9idz9ga3RGTXs/KTE5KHFuaH18d2dhVi9QeGdvZXV5VndxSGpPdm0yYTJhSUVgLCVQL09vUFU7UGo/P0xEJllPQHJIIkZUUkdybz4yM09ucHhhK3xPfkxxaU17bWlJaWhWR1di''@;'; put 'put ''aU8hJjszYTdZSURpWXV1cj1qRlI8QGdpM2AyQzMrcl8sUUovfTJmQk1JMWUoZkw0LjhjUGBBWkVEJChxYG9rXkArfm1WSjRvRmQyOm4/SSNaKS5fViUuY0cvIU8lXTNyYi9jei83a2hSc1FkSWNGVEVoQ3tQNWFee2tWRzFwQCk7KTlaYTY+R2hyLlkoMnZVTig5SWh2ZSwhKykrcyk2N2pWRC5X''@;'; put 'put ''WXVJJlA3bH1+ODgmVXVlRk1hQDA/ZmdQMEooe2xMT0tMSyJ2I11GXnRAV0dpazhLJEhwRFckNiV2dDwyT2E6Ql5sVWNNYXZPSDZnMHowRGROLEExNm9OLGRVXXw0TWlmbGZHOGVVYms0cEw4fko6UUEpVnI7MEV9R2ZjayZZNUBodWNjQlRJMC9GO3QhJDlYPk9dMzVCVik5RFR4LkZCLFBfWFNf''@;'; put 'put ''O1J9LCZXXjdxRyFrMU0zXz1CX3gsMz07Wlp3UGkhVGQwamxjZUI3a2FCZWZrJnhxU3UxTnJ+Si5hX21hVCExWV1wSH4/JWYvMFssbkUrZk59T3xqJmRVdD5ZTztUOVs4d3hbfT9gN1V9KmQiSmFuUFIzMSFvODFabmIkdT0xbWFUbDdEN2EwVXJWLFEsfSx2SXxNRV1bPVRfOS5kVSNAZn1CMGFU''@;'; put 'put ''Y1tffTQ2cDxCbHwsYG1NfCNqYWl4fTleYDVOKnhKcVReSi4ybGFmWipjWzEkSyszK2NOb1FlUnxlb3h+KmJoYXlJVz1CVHxtUGsiRTZYYWsvTkVqW3xaMG4wRzM+PkdgRnBJM2JlIXlHYyRXWVcxWUhyYVEkU1EoazkiUWBvcmFJUWFVZDBYYnVqSTYhXTgyaEhJUlBha1dNOSVHeVlNfkhjb2p8''@;'; put 'put ''cEQkQGI4WCszVGQqT0tQSE5AdlBzKCtGUD5vbSUmZ2FkLDVwU3xaMkB0NmhRK2Y/XSlnQGY/XS8uVWZ+ZVE1dlVWMThbVVVLal1oLkZpa2U/NVBUX1RfLCY2empoUU9UeHwxcUshfWd7PiNOKy9yLlBoaV89SVdqKDIvbFVULyVddTVlU1dRZSwhdTNXOHxsYSZQIVI+OyM4V1cidCkhWDNkZEMs''@;'; put 'put ''aEghfihsSlpfW3o5QUJCQEt4I01razN7RmlUQHFxbnd0eiJLQ29SbnpjQEIuSDE+XXRVS0hRdnE4cHVDPWJ6KyVRVHl4fjpiaW9DWmptSkUybipzRzFBV15mOFcwZ0B9KG5Cbj82aiR3XTJtWDY2O356SF9UeTVDOXpKeigkcCtEeF8yViNYa2E8Wl8hS2xYaFgwZT9hPGhRS1J5TkssImkxRys9''@;'; put 'put ''dUQha2NdUSI9emIhaCYmcXY/TCNZVU8pfDdIWE9KT109JGh0XykpXWM7Om1mc2lVI3FeUiZJOnBmLFRTR0NPWTN3UEljezdBYzU9TUtnVnFWTz1KMygzOkV+I219akguT2kvNDlMNG5YT1ROMkw0MmA9MyFrRXVtKk45dXF1Z0UrQkU+LixlNT1NS3ZlamMvO3V0W31jTmBNSkA/JHdbIWI3cUtX''@;'; put 'put ''Q053KH4pIzBTK3FCVl5TPDloWTRvanMxWStIJiE5ZV49fFArTypBRksmQUYrPmBWemhaNld2UlNVXTJ6LHR+cWl1TGc4ZSEkaCgpJWpQeTFAcCptXmchOTR0diRRVEJuXTNvUGBsNy99dF9GfT1AOH1YP2tDWENidU9IUzs2Z14qPWpePTFbK21aKmtqZ1V4QzBMfmEhQypVd1lNPncvTlhCP01P''@;'; put 'put ''Iz44ZyYjejQvNlJ+QHglemZRMnpDIzYpbmd0MCQhWGAqeVMkPD57XlBCeCghXSVvI0M5Sm1sfHc/TFlTP0RxfWJXVTNxRzEvc0cxe2A+QCluZ3RTPnVnV1YhSGBAd3YlJF85bTNPR01PQnxaJH1qQVgsOXhKa0VwdW1FZl0wenYuPGBGYDwkdCZsay86ODspQH4qXTVOPnJJWmpoeXRDWDFIdSRL''@;'; put 'put ''cTMqfU4xXTUqc3dMfWEzVDN0XT9TaSxfNE9aWkomNEkqNSJBd3ElXSs+KmR3RnZJfV8mUEBlc1NVZXVdJlkrXkNraT59QEE/QyVtKj1wQ05JYGs+WTQiZV9vdSJ3RmJVeSZ7UXU9Yz19alNMRUIqMCZuWHU8SV5SW25PWTlyfkpNdSNKeV9SakwqLGpfYTVQKElzUkJYKG5DSyxUbmFuJDcyOilq''@;'; put 'put ''TSYlMlFYaE5VPCFeLjlqRyhBaksqKDp0IW1ebVV1ZH5dXlsmKDpZKTFRNSk1dHNWQmU/dGg/XUE0NVE/MUsiInY9eiFSPjspbmEzdTZ1L282TFJxal8ra0kiYlozYFZ+QFZKQHspXV8hdi8rJF8lSk1rQzVLMnpiSFR1ZFRrQ0gmLlo6dV4kMFkuRWQoX01rQ0pxXWZePUcwQiZVWV5wNCtMSUh3''@;'; put 'put ''SylQK2dQZ21fVW8/XWhBKkd0O1l6NGc9dF51OUt6ckswcD4+K2Y6JntNa0NMRV1LR19qUn5AMzFDPGBtRGFqOCFSLjksQm99OE17cTsoOHd+aS9qfi9tWU1SPCV1Vzcuc1J9dipDb18sPVp2IlQlWFlZOU8/VSkmYl09al5eUj5gJVZeWE9JQGV6SV9QIjo5TUlmXm8/Y3dUcj9UIlQ9ZXliQVk1''@;'; put 'put ''aUxWbXBvRHpufCs6UkRqJVppKU4wPk0iOVIwXndKSGEkQ2RsPHsxRnM5SXlJZk9WMkZibiQ9OV1AXjFSOGszU14sKTdAZkdXbkYqISxIOEMrJnd1X3YrMjMwQFNgU1JqMEI2K081bG8/UmYxVEVqVE18VWpEJXZMXiw1TChGbEArTGRwKFZWQ2B2YXFvV20zVHpUWntOeHBUXSpbbCY1KHx0cnMx''@;'; put 'put ''VHMpVjteJCxCOXZ8bT0+YEIldiFobXxnS254dElqbzhrdSVvUlJJRiZPNmNfbG1jRDU7LjtdNFkzK3VnWyZySVJNRG9LS3VJUk1zP1VVIUtvX21xaFE2PktWPW8sYkRLcGRGcDpgOmJ2Xms1fUpnUWQ5WCRZaG9dLDZ4fmJyVV1ROEs0XmJ3U0MwbywqISF8Z2VDMHF4P0l6c3htSlc+ayUva01+''@;'; put 'put ''fixpNCMpOVJMXVVAfWd+N0hhMVRMczI1ZXViRXgwWTtrPCkxK30vTXkhRHVAbHBWWyhfNVVyTzxMKktjNmptKTJaRXpKSCgvL1txdGc4O358I0hOdjslbmMqOiRDRitIM1Q6NUpnNERwSytecXl4QyU5dExxPFEqdl8+RHBLQ2VEUz5KMEB3ekB9KHIkUCN1NV9ZNTVmNEhHPylFaWYjdEJ2bld0''@;'; put 'put ''RDZVcz1zaVQxaFlwSF8mRi5GRClBbzsoRDk+RShibEdWUWBVa299PyojW3tSKUpKfFtvJDddXmpKWSQiUztYO2VbaC9bNCQ/UUskMUshTXpFfGwhflpbMVhKIlYuOldPfUg9dl08S2csXT07NkRoXiNXQm8kV3UvWGhNL1VYcC49MGI0eHI0bSVGaTV8LE49fTh9NnF2VD09JHMqWzVrNGsxV1gw''@;'; put 'put ''YnoxMjA5VWVVUngrd0F+OzFlLFkoVDN+ZUllWz1oWGhvdz10YTRaazxhNnw/d0svblY/aFg6Tjp4Qm1tOW5yaEU2LnFwOTZCXithJU5LXzgxLGJ2UnF3UjxLdCVOKkkmb2RlLywrR3I0dFVxMHRJfWh+L1F6X3BwWjF4a0EhWlsxRyt8aiM5SikxQGhoKjw/bncxeWh0RkB9MDpGSVM+a2RBNEE5''@;'; put 'put ''I1t2ODgxJUFxMXQwVWg2XkEoLj98di8veE9pc2MkdWozQCJoNW1hPXFgQTR+TjRKTjNRI35YTjNAI3NlcmxRSUhnSHlZL09dNFZBOT9afHxAIkNNeypVR2RqalduLDBhe3I/ZEBzci9dfHVTI1osMFplNXU4b2F1emg7cHJUaUslX2EzOG02UH48M1dUWTNUTDRYWGYvOWleRmhFTlF0MEE2Q2xr''@;'; put 'put ''JSRDfDt+JmM6YjojME56TDZzNHwicjVjOj0jMH5Icno+WUwhJkNTTXk4UCpvPm5ZOjhWbGRKIXlVSXAqdlcpWHlmaldzd0hCa1txNkMuPz9qWkcsUnwjIzx6cTZYIzFPY0kkOU9wR0xIaUcjJlIuUldfTW96dEJjTW96VEQlZHtjXUJwOGQ3aUdCNGc8MTpKTWJyZGFBfU4xRHguL2dsPUdFPHR2''@;'; put 'put ''V3xJWU5dLlkheXQmdSFAK3lfN3RWTXJEblV8ezJ0UClwSmQzUzJMYlRELkd3ZjNVbTZYL0hvdVIqV0Yma0c9I09Jb1BnbT0lMVRId1MpYzEoeCRDayFCXW83KFg4I104aiNnXlZhW2BJU0BxKF9fRzBeI2ZrXig9MXpZYXZrL3B0bmliS2VyOT0jZk9KWSs7Sk1qfTZ7NytKd2RecjkxQGlvfGZ+''@;'; put 'put ''OGlwZ2xYeUorKFt8N1B4anhkfDpZPnJUbkdTcFQ3ZVB4WWFwVzx4VGpUU3podkY4aD5sUSxaKSI1SDZaPVgyeDY6KGU6eF1he0k6YDExSk5IIUZ1ZFtucW9ufktfI0smcG9XdWtKNks1VWpHe0U/cHpEMjolSXROQGkiWFZBRjhITHkmM3MxciVFbyJMdltZQk1sNDNhQTAyOl0xJiZOP3QhZjJG''@;'; put 'put ''Rj9SUkYyQXFvITIkO2t3cX00ZWgkV0lsek5bNDVZTUZueXNBLFR3RXtxUTMvISZHKjs2TnZxWSZ5Lm1XJWFCb2s3NVVkP09SZHdnMHRDLjZAQENdL01EamolN2hYZkdieGJ7UXp3VmI3cmw6fVZbZ0csRGlfJmJkX1dLb114PGo3IVh2NjdKb3BFX01zcE9hejA3eVpWMT4iM0leZTBOTWVIL0pr''@;'; put 'put ''Y1REMU4mdS5rRzk8VWxzI2NbeyVzb2FRPWYuZ3hGZ1pVYGllUU1OQE94MVA1Rj12eiRYSiQrQn51bWt2NHY3ODF+cUBIdTMmWXgmJCF+Y30zKGdCc2wvVklwVHslaSNWeGlGQ1tzNk17ViVXXUxWdDV1R0NVX2hoUkxNJisuSmwldCRKUktYSEpfe0ZvQC8xPDo1UzFlL1k6VE03LiNxRkkseFtm''@;'; put 'put ''KkkzU0MrX0Myal40JUhnMCJbUFBEVk95ZTg7bCRgITF5MURqWTJecXBVSE5MUiNHUFJ5ZD1eOW9+Ty5gVVA+M3JyX2Radm9wbDsxczpZI1llViFeRCJ+Vk1lO1Z1eTFfeFE9bW0hTTt1O1pRaGxPNmZzeDF3S08kRzAkKk5fOCQsbT4+O18qXWovMW1GSnZGZiR6e1cmMCpVXUpKY1VQNEJxfl1k''@;'; put 'put ''UzNDWWZvWn0zXXVhIVQ3blBjMGwkLFFsdWZKMlRgSTVqUHI+SihIJDJaJCtgKyMpa349TS5hLjthdVBVVTE6VHhkdlVqRC5ObHY3ajdIS3NydGxsaEF5Vm5kTyJoaDdbQkhrTklJW2Y9aGl0bFM6PSpUc19sK2lPSzdIdDRWW15YMzBAcVg+NWlsYnVQR3p4WjoocXc5ITN1PCUiPjZMb2paemE+''@;'; put 'put ''TF1PU3QpI0pBYGIxWjwoS0ZvWFg0KUdqVV1ZTWZaMXhNUi9ibUd7QU8vKkh3UTRBY1IsUj4iZj9FPEJOV1l2b3FDSUMib3glMXFjTUdqVV06aSlha3dGeiM1bmJuRHhjb09jWXpNRlI7dixgSS5oaztIIz81ZDF0LyFPTWcwfGEwdmRNfUJKZVo7RSNyaihzcVlGY3xOWm1weCozJjBVJFUsPzY3''@;'; put 'put ''SGtaUFp0JjtONilKVzphYmk1OUJvOlojI3Y1emQkeylMRV1LaUtwe1kjW2MuM35JW2xKRE9rUE1rNnEyTiNzIlZDQDtjczJqJEZROzUrd2VVMm9+UnpDTzlAbiRNWi92TXN9Nm9CJTxJMS9WQlh1dClwemIzUC9hYEQmdGV4QEtpVypUYnN9IWNBOnNiZUNwbyo1VUYqel9xZyxtYT5hXkk8ZXZw''@;'; put 'put ''MnN7WU5acExEJkdkNGJNL1txWF1qVV1vfSFRWCRQOGBoR0plOWZmZVtMSHlKMHR4bSxVZUNJcElhKXdJO2lgXXU8Jkl5SntgLzxWMjFEe2teWTRqOm03Vio5MFMxOjppemkzMTwkKyxCRTAyNkVtJEZRKC9XJDlbRFhgRTcxMlgrLGR3WHgrd0tqVCUzcnQ9YHlfcUdOMmxRPyhSRXB0JHssJWI5''@;'; put 'put ''SGBYPnV0VUI0Y2EsUVJ1eEwiW0EpKzMiV0xzSU9xSylZO3kqM2U1fFhva2xlJm5yRSkqTW5VKzo2SWNqNk0sY2BSeTRESWFlZWkwSU4yOT5EfGxyZSVIc1FBZmEzQzNXfHZSTWk2dTBAJmc4fUI3JjY9cE1pJWQwYzMxQD9zQzYpJCpzYjdeKDRLNlAwRGZLYTxbKmc4fUZQbTwxOk09PEhvRVA0''@;'; put 'put ''TXNEZVR4ZGM1OW8hSFddRzh2T19qLyJ0Q3YmVXdKViQuP3ZCTSRhdmBVdXhlXi9YISpKfTdpKmNxIXpkW2hUKnRSMS4pYSwwRntIUmtTSmxeP3YmbTpqLHRuXz5LQi82Zk1jUipHTzF9aVlhbzokNTcuVH02ZEo5Z0JdO29tIV9IIiNBO1JIPE41azpBSSVfOW5fPmF6S0cwLzxLTkljUntmO3Iq''@;'; put 'put ''WEkjVX5zTk9kWVpVT2NjVlpEbjljVVh9NyhhdlZjOyksVks+SXs0ZUt0STY9fShWWmBDe3pbNDwqZS40cisxQDZ5SGhHMHFiTFRucGA0UThKK2BzNmh7bXhiSmU1ckI+SSZfPitYeiZgUyVvdyZgPEJqYTQxMHpNSlQoKnBiYlglQFZAYmYqaCkpNzUrc2JAO3ErLlowTztONj0qNmdRMFVdYHEx''@;'; put 'put ''WmU1PTcldkRZWUMzQUZpKG95PSh3Vnc9YG07Q2dNVSk4VXEvIWU2czZNVEsqN0RFU3Ajc0FnbXN2KTpbO0dNcz8hIXk0IUo8SktnQitMUG9UaT9PQFlyfFE2IUB+aHB1N085bVJRdXsvWiN0b1p0Xmp2cXV2cCR3KSwjak5gX0k0Xi5iZzk1XVY4TUxyeWhWOC9VKGJqZHpoTXR5WiZtKn42Qywz''@;'; put 'put ''QjJNOH5VRFgsKlkwXVkoeyU4eHI6OUN5KzQ1cnFEWE9XdUBxJWpYfGAuWiUrcmZNXyZNN1VbIzVyZ0QqUFJ5aERadmcxQSVEWFtNOkhLKyN6ImxzNnpvMWJvV0UmdjJQNSIqTShLZSIxZDYlcElbUDN+YiMwX2ZJfCY2ODFnWyQ6JTIxPH5SR1Z9MmB3MGY5XVV9dyUuSm9LJjFoallgc29idkVU''@;'; put 'put ''LEdWaSFIVTU9PmtAKywyV3ldLmZYSldlXyZYdXsubjxMU11RSGs/cEtVXXxicn1kMkF4ZnRDMWtAUThaTUBneHJ8XXh3KU0+V1FuKjx1WCZ0Zy9aPmBLVUI8Wj1QXnZJcGlQK3s/cTBrMW9gIyFBIUIwTEo3OG08Vj9oUFRXYyx7K3F9SiRpfXdFRTJSOlBqVCh1O29DWUJJR1NhXSZsOzB4N0Qv''@;'; put 'put ''UF8sUXJQaiNqS3syJjl2YWskSH1pZCR3b0YobnhQamMycDJwWUs7Il58IUFeelE2O3ZkQUVVRH1AYHRRI2AldUdSZkMlPCRveGtNVSU1WSJocWB9QF4hYCZHXnpUakckQ0U5bjloL3BkXyJBYzZ1YjRkWVkwSDNHbXtESFErTlNte2NiYEgvO3h1LF9Ke1BuIU9JRzx7U35dVSF7eEVhMG80WiRy''@;'; put 'put ''RG80VkFqbzt0ZUlVa3Y5JUxlOHdVIXtJW3J3dTF0InUidSJ1MyUoXjc3MEB8LFBAQDdMUC5tc0Y5RmZMJk9qZ0FmUmFeVmBTOHxVMXthaF87JVA1R35nLHopfk02W2ZPQC5DU1gvWHUvJVkyY1V0NV5sKVtqWTZnaEhDZFs3NFA2SjFDZ3J1RitENlUpO3lyPjM9MD16Iy4kPlJxUnNROiklXjZ1''@;'; put 'put ''OHwrJHtGPmo0bSNtOn42ckxkPj4vdSElajUvMVZJc0tqcldBNnV1N0hYP34oQGVALDM1KC95SlBsZHJoZk5hVzU+UEpJbGs4el4rNG1vajt3VGJ+VG5kLyhsP1Y1ajxqOVk9ckpTT1lAP0FKMEpbSikoP0xlLnFJcVU9MW9xMzBHPnhkZkBvKUw3SWVsflBQckAxaTswcnBTLkYjQkg+NCFbPFBy''@;'; put 'put ''I1FNW3t3cTp+MjQkO0RRajd1LyFxOTt8Ym4xPGdhdiE8NlIxdi9kVWkoRjI3KWo+Y1FqRiQueCshYXNvbVFUQHNEJlFKSThSTUpXcVgvIWF2KmdzMHN1OWkkYG9GNl00PyFNcmw/Omc2MEJySV1BKUNkMkYmYms8VWF2Ji5tKFE+VnYyQD9fVUIuISpFaGBOKk9iTkpVSWtqVDYhWzQwd0kqWkJ0''@;'; put 'put ''cVIhYTFgJT1ZMlQ2Im14b3hIa0FxSnZJZ3tjcyslWSFdJE1ONkBvX1IkRiJVeTNXQFk6VFNqVE9VNGhoKGEuWTxrLj0mJHE4YWR2YF12b3VYeitLamgkcTpDLiZuWksiVnJNUnxIblEpVTg9P35taitEZi5RRzgsKDRvVThIQkhGYk0kKk9YUHpnNWppcDxFYzI9fHlKbEJiX0dvcF5nNWI3PCxI''@;'; put 'put ''PH1lJS4qYVQhJCFQXT8rI0JoWDJebn5SI29rWW04PiVpN3MkflZ7RGE2IVpeNV5NMyZKPFosRyR4ImBfOzAsKFJdUD9+Lip9YGBkQD44RixwOjpKY1BEVFcmNE5dK1p8Z1NnO1EyJSVhKV4qISpEbTErNlJ2JXZMeixNZmZEP2U6V3dXemNLYC4sZTRTISVbTyFtS3d2QCJqKT13OjgjUEEmdSMr''@;'; put 'put ''JWRrVUleL01uZGo7W3JlSEhFRjkrN2huUTVeS3phYD9MbkRSXmx4UTIoUCNoRkRTRHJ6ZiIpcHoiQHdCYiRgYz5iYDNKOE8xdU8vLn0zVnFoTSxuP2RWXUUiVztbRnp2UisrdEY1bX5GamRQPUxdSjYvaSlWM0Bqa0dHcVk4NUYhaTBGV3A9UFNiXndvSXNAMz9JaCVUd2cvXT1iN2kwZzAlaU1k''@;'; put 'put ''TX1jS1gwQCpbX0g4Xiw/KWRGQyxMKEhrZTI1M0hgZ0ZYc1JdamJ7UUAvfWNLZXpBaD5PMzNhXXpuJmtAXyw5VW5kRHE2PTxbYCxIW2s9fVhUZ0FmUkNVXTZwOnYpbj9eWFMzXncyPUk2OHhlMzgmdi42bEU0RXIoYmQpM0R7cn1EVVo+YCFnbkNYbC9xZzZHIypkRU5pVSlAUUx2Sn4rWjBWYno3''@;'; put 'put ''XWl3PT1YZnBAPWNHPkszU3dBY0lERTclOH1NTUJ7UDZYMjM2ZTNeIlpKTClHQWIuZSxDRG1nU35ackJqNmEmQzR+ZiRQfEN3V0o0Z1BAX3BbMT04OGBGcENlfW5+TltiNTZQN11hM09WVnZpLFVWLHNQTEc0OSF0Xlg/M3FoUXs2X0ssdjolJndfKVBVVnd0OjxhZk9RWEEpSGlgRDtNT1p3ejNe''@;'; put 'put ''cmYzPUszW29RcmYmaCpfST5fU3kxZmU3b2c1Um1YdUkxd0ZZYWtdUlYzVz06UElZfGcze29DcFAzb3RmXWxUTyw6allMNkpydT1gUmZML0ppJjEsLGpGWT9bRTc0ZExhOUB6Ji5tbyFuRUs5ZiMoOTxRdFM+a3U3XV46Iy5OTDxtYU8jJHBeVHpnP2VyWiR+Z2VWUlY8LjtzR1ZeUDldNmFYQEtH''@;'; put 'put ''LlBYRCpoYU1+e10hLF1Hb1I7VHxRMjMrS3pxVk9VR0kqUFV+Wng/JXYsTjpwaHFmcHVgUzV9Y1VAPCtJITBSUjI+Mz8oOC9DNUh3bmd2b3AyfkB4VFU9KGxLX18sdCk0b0NTVFojM01HW10mK05VKyRBMn5hQFpjV28ken1xJVlsMTkvcGVGOUAuWn1hQDlIJkApOSEoOV11V1E6RzJiamRfZTYq''@;'; put 'put ''OnpsMVApS3pib0N5cmVDQks6WjFiN0tNIlY/QlRJalA0UjRmOlJ6SCo4Z3BoTU8jPUQiUltJTjtgLCEjaFFKaVE1X1ZMKDlYTEs6d0JQcW8kKlMqViwjRjZrJD80am5MNmV3TG0rLGV8OTF8U04xUTZxOkdfKERZPVdFLENidlJPWks5TkB7LHV7SmkhV3xmSn4kdnBhdGBVIVtIQnw/NzNSMGg+''@;'; put 'put ''blh1WWFKeE5eP2xMZSJ9ayxjJDQpeX19cEldWCUuI3Rgci8yU29GZmtwWVB1MzxNZz9wNj1KcW9gQy9gZ0pOX0JTaDsoY1FMXjoxSX5bYGR8JmNCfSJ8eH0wbWgmbWVLZSJ9PGpSJF4xWGh0b2dCP016KnBQKXZDKndSWEgiLDh6VSFbSFd3c311d246YjZCKD0sWj9aLyojOW50SnVhLFFhckFe''@;'; put 'put ''OilQWVJMLnN2TmZHTl9dZlZyRzVAY0w2Rzs4VCZuY34lMGUpPnU6cFVpb3Q1TD9BazFKdXozdDl8TXpANlZ6SCI9S08zb1lfXVZ2TyZqeEV3KjFmaT5TeGZzbXFgXTRhZzsxeXdoNm5fPkN4MSR8dWx9L3AsX3kkRywvJjdMYiF0e1tNI2xxR2NYO1ZBJGQrMWY2YXUyQG8iRj0vUVEkRX1AW0Mq''@;'; put 'put ''cCIjZzRvWkQ8YiQqIzF6QX0pNXJ3eXBeKUMuXkJdbExlUzwscVdyLFZ6N2lFYnh5bTQ1RnAvMUI8MUlOIVUlNGgqO3V6YWA0dnVeJkNSVypTI1hifFVXcyheTFNgYnhQQ1NzXlBzWnlnTF9iJi9MPFZPb2VYLDQuR2Q/XXQ9RyFCaEd0M2tqb0ZWKWRWZSF9Uy4mTUU6TF1HUllOQlRZWXB9ZjA7''@;'; put 'put ''TiVJVWhWLHtuJDJZM2cpdypgVVp4cWE1b0trXk00OTpFbWJMSjwwOD9DJnZyJTgpNWBASz9Ob2AlM1RyOjVYbkcvSzVud1FMZD14cXZaelFofnozK294TUNuOTl2TFBrI3JRKF9fY0xuVH5mP01QWFA0QVtkb2FPY31zfilILy5TNltvJX0zL2IhbmdRV0NUPnd7VCl8LFZbSTdhYjVhSWYmNEAl''@;'; put 'put ''PEdaekpWOFJ0dmxrInZsU0VqI1o7YmhVekxATmUyKDtIRngwa1p5eHhITn5yL2Alb3QvQFZKaUlgVmRbTlVnbkZdQyJ6dEtMUkk8KGd6SEZFZn1Pdjh+bjxlW2xPVnp2bHdLUiYzcjdZYVM9PiVMX0U5QjVCfTlhSSZgNzMxKyFKe3s6O1Q8OCw9STtWPktEfEE0Km98TzdGd0lSTTovSDBnPj4x''@;'; put 'put ''PjgqV2NNS0ckJjM8fXp0PVg4JmdAS1A6JWcmPXt2ZTdGK1tZbU0obTFTaVF2WjN8Li5QSU9kQHNKWlZLdEZ0XnlGcCIwZXJzb3dRWEk5OnkpQDFHUDphKFRgLzM8K25aXzRjTiZMZ0RuPz9yUUlrbn00QVsqX1l9QjNsLnFacWdfRTRYQ2twJmtzWmcpdy9XfFs/eWlHNjlwVlhoMXEkWUdeI0t4''@;'; put 'put ''QygqLDZ0PTtraEdhcn4oSGlaLDNxRnIoXi9uOSppeUZrfEgoWUJAZiY1fE5LSHwkMi82MDVJOWpAOzZuIzc1WnArcT5rVl1YODxjWzQ4S25wL29APVJtUS5rSFFPSUUhNTBAP05+UzhQXlEvfTBAQXlAcDJnWE1nJnp7dGpaXTdubV4qLjxgd35fVV07aVB4Om9IXVBqXUw5V119LGl5PHBGfWpi''@;'; put 'put ''OnBgZ0hdfH1HYH0kZzR3emdsZzZ8NC5feElsd3lCTjQkOlJhTSw7a0tAO1VAfTEleFZvTXVEc1s3fCgoNjRTVVJZNUoubSovOG8qTz13U0A9UkZIK3NvdENfUHYpJmdIRX5uZFN7JmI1SSFeUGYqY0AxLiFhPVYpWzRhPX10YzV3JWw0S3wkZUwpeSpfWGw4Wi9OYG9HKz1Nb3BFUVlnYV0pNVJX''@;'; put 'put ''SzdqPE1ue2N9dGo8TXp5bT1TTG9afFVad1lSUHttKlZyVHlUSSVwbk1qZm1eTUwwSSs1RiEiVmxjUF1lYUlKLkhmTXBFNi5tfDg/TFo0d29jUFJpUn5ufFJHYXJKPi9YaSY3cXdhaE5bUWh5TVlCYXkiWkRqdW0wMFNvZ2QvP1Y1RHsjKnN+K1lWflBgSXhVIWtzZ3csKSUhdz99ekx7fiNVNmxs''@;'; put 'put ''OnArJTFqfCMrJWlZeTA9Yy59SkJHelJXNU56OGR9Iy8pPn1oeXg3ZEN6Vm5pZkBeO2pnS3FAL09qa0FyeloxZjF+cU0+Q0NaPW91XTg/JXxJJlJJSUhZTT11RnhbZFliZU8+JGVlMXpjXVp4IUhjUHtYaH1IYVRRazp5JVhXQz0wSWNSOyl0cCZAJkQxcjVdbEJfXWliXilmPm44azZ4MnI8LzIj''@;'; put 'put ''blpWc1QqfFc9bWFmIUxwLC5GPiYySG5OXSVETH12W2chJDk0bEhKYyZrPj8wQiV7WlNuenR0XkEvPmIsYDJVNHR4JTZ3YStGaSJYQmdDYT8+fkw8dUc1PDIue1ZbYzBXZk5JSktBP1VpNG1iYHk+Ll1sNS9ZNHhzVTZrfFpwMEBPK2QhRVo8dmk+YCNpLzM5N2U7WEA3MVZMQWRsTkhQRHJOV2M6''@;'; put 'put ''YldaVE44I3E8MXQ+fT0oISQ4MVZZMWYoPnV4b0hwQFJxJX4lWltKXz05fDhbZnsxcT5sSjpyeDJmRyNjOWpDKHgpQG5MJi9MZkFeWSFbMENGR2taIlclMlEsY3oyKyU5KD0jUHhrREdSLGxYMlU4IUhyWjxpQm1QdX06YklAWyY5Qnw/VzN2VFQoaUVleXl8R18oLzZYK3lOS29fN0h8T2JOPCZ+''@;'; put 'put ''T0BWdHZnMC9GSyRPQD5oRHdGYG9obH50SndSTjcrOXRmcGo9I0JwPE57fF5vdXB4fXxsQlkpW1M4d3FyXWhmPzZ4VDN8eE5kKEYlVVg1PncqbnMxezc5em89RFNbcDlYW2hrMzV1bz14a1drbXgjSDpDcz1sYj1WLyx5P3I4MVEoKm9YdXNvbCxOcyJWQmpmMiksY2g0MUYpfT5zdkUkd0hSMHhd''@;'; put 'put ''N1A/MERXQGVKc1ApbDd9cn5ENSNQbiY5eklnflFAMz9eK2sxIkIvMjs8NCpHZjBydC5MJmMoVUY9T0ZjWS8uaCkqPEUyS11MUmouOW9TOi5HSTxafCRLTS4pLlJML1YvTkV6Qz8pZDoyb2x0PnxbL1s0ImM/VzFkR15+UzBWaDdhUDFGUDtzYXspQlRvayMyY09tTkxZciJlR3lkdyVGOT9wZSxz''@;'; put 'put ''O2Msc3pXdU9TbCR4Mk5vQEQvQ309U18sJm53bj5MI0deOFBnOk4rcnt3WDdVWjFeXmYleHFxRC5yIUxVJSthTzAhMT1GN3BBLmo+PWx0aVdUbTxRemFrNU5YQzhqKWtBKV5aNjhWMW1LaztNKXNrQzI3Xm5wUkVuZXtWWWMmYmk0O0d3PkltUTMsPiNIL2VEandNWyElWzIrN3xOYFpAUDM0aXF3''@;'; put 'put ''JSFxbndXPkdkP2hIaT1PI1FnRylBLHhCR3ozTU1JKixhOyppP3trJHZgRT9Hd1tOYFdMWmEre1RFIlpYb3xjc1JGRkFgQ0p+LGlZdV9EPSsib2YyZ3BrdF81SDxxV0E2NyZ1ezMsPVNdO3c8L3AjVmxQZExvRSpJKmNNVHd7L1lJV3o9IXU/Tzt7N0xlLnxpKlVIbldpSypXZjpLd1RNIUBGSDxG''@;'; put 'put ''VSxIVFpgRkdmWygkJXBfLnxbJFdwWz5LKl14Q0UsdjtEP21gKWElYiVLRW9SMjI6MjZnN2dmLjA7aiFMcyt4KiFJVSVZdE8sOnNlVHsjOFg9Z3IvazUrNXpySld6YyskMmRvV1duMiYmcjUqQTU+SitDe3pgOEU1Kik+U2I2bVJ8TCNFNC9EKVYxYCEkb3kqXk9TaXxgTXJKVXdbXURLeHJOYG1H''@;'; put 'put ''eiNwTSR2cytwQUc/UH02YzpbRWI+S0NucWo5LCksNDF6WWVhLGNXc1Y4bVVeSnY7SXAoSzc9PSV0UytgKzVKaXBRcT1dYSN8WGJXRHp9PXAsfFFaaVtiMn1nNDhUK2ZYdUIjcFtlYStmL2B7bCQkRVhIcjB9TVErOXlZOTs7c3UpY0d3SnZ2Lnw5TmB9Sltec1ByNXMxb2hJVl5VXj5rZE82OjQq''@;'; put 'put ''TkpVN0tnSDcpPXw7P2osM0lbfkJdR3MyTkR1LGxrISF7VklFVn1Rd34lbktDeDBuNUBsSXpzJSNGYnVYRTM5OFMsU08rX1VxS0UoN2RsQHJicmhdSXZSfV9YPlA1c2A7L11uMVZWSkhYTTEyRTtvJGtheWgsRm9fX2E3ZXN7YlZYLmY6KS5gamh6cjs8SHNSPH1IWGJwJXg1dTdYYWpPPWtKJlo4''@;'; put 'put ''MlVjO2RrNjRXN2siMTxNI3coZndFfVtbcWlHaW57fjF8RnA6cWksMFpGclVDPGxdRzZyL151JnBNNEVVeTtqJXd+UmhnQ3Jgai4yN1BvQSlfTzQsRmRBSG41Xlt1TiJZZWooYTpdYDpjRV1iX008KzEwUFdZQzM3aSlXRF9NZyFTfWciMlZ3a3RsNVUxSV45ZTFTfnpodDtudjg8bDFAPUlaS1tB''@;'; put 'put ''alg6IzlJcFtdUS5xdkY3PmpOeF9dZTJbRjVEcjoxTSZeMGtOaE9odmUyKkZeTiY8ZjR3fTxoS2p1IUwxIXl1Z2R+ejdUNjtnO0VtanZyKyp4VlRWclRfVXZwRXN8YFBvNUxeeVVVSDhCNkJsRF55JVFORj8hMFBBXX5tMDlZTzZxVlltcCZXXyhtVWI5endHMExre18mUmJCMjluYzgrcjFHT01V''@;'; put 'put ''V2NvS0xPViR+MDN5OjNacCpkbnhLRF9ZI2Z4YzxiSWVWcnxCPVBpe01WTztXPGQkLzxeLzkqREZIPFImSXVCVCtePSZlbE1QSlZ+RCZMV31POFErTClZcWFVe21UQXJKPVIoODozMEB5ZUNUfElPSEhkS0EsPjRYdyhNZUBMTzt+PWxzYW0wUWohU2kiZnxLYDs7PXt2KjpaRDxQTltaTjNMdFhZ''@;'; put 'put ''USZtWFh+Zl5RNGR3cSZNRlU1eWBMNmVQZSsxIiRfJjZMSFE4dSUlJjpfc21RPDFrYWBmfkBmOztsSFBgc11gWTtlYEJ5NCxSMldFTyxZSEcvSV57ODM2SjY/cFozZTBKcnMkeHtGY19qYWRnIWBPRC9ibzlLdzdRZ3FlKSR9JHpGTlNeR2AhMD4pRn5iXl1aV01Sek9RaTduYjA/byxuYUpBK0wv''@;'; put 'put ''cXBnW1ZXWXQuUUlNNTZATi9uaXNsW0Z9ciQqYHhnU2BVc0lAYm9wdT1WVTFUcDw7S14lIkNCPVAwcH5GPGxJZDtgcT11ZGxvUClQIXo5WjJPSU4hLERvcnsyRUZkbHh4JXZPZ1gxVUY7JXF7Zz86Y3Y6UGpOUl9mKDBSQlQxLF5CQG8ufHY4MGh0UCl6TEBhVWw7eGwsXyw/M3FwSE1NK1ZrY0df''@;'; put 'put ''WDM4R29YK0A9aExGK3E1blFPS0MiS0ZWW0J0TiprOCQ/L2ZoeG1SIVlXeT5vQHYrdnBFZlR5aX1DVGtbWFBYcUM6XiMyW241dD5LeHl+MjU9dENIeCNNJlZlb2xpKVVGb0pTLEl4fGR5VU5DQlRWdkM8Q3xeS2ZVZWxHZyhFSSpuXjUlUjttOyQ5OnIoNHQ1QWxWYnB2Uil0Kl5SSXBhIiFvOCZu''@;'; put 'put ''TSNkbEwoaWVBQXFJQCROLzZAemYpImk1WX02b2JUbX0iJH4rQ0oqd0RGLmo6ZSVQPkhAPSVlY0c4KjloWl9uTUtrUGUkNnAyRWZ5MExrMy9HOjBkfSx0JGpkJXc4S35BTD9mOFE4I0hvME1lbVpPYCY0RVBAPSZjNjhkeDldOjsraSREOWBTdCV8fUpUSW07Nz04VXUqZUxFI0x7NlpreHlOPl5a''@;'; put 'put ''TTliXT9iRExSRS9UV2B1VnlsaEJqKENETG5yfXczPThZRTEhenBdWUNROjlpR1dzcDlZPzYhX2gpfXImKWgwPlhpPiIuK1Bwdnd4aCVKeyxmWmxvYkw6e1szPSNQWHl1JkhpfTh2bWA6dk1AMSUzLHFUYmRRRTN4MzJvT3JtOnxGZGVxLG95ayZnU3dWfTlCeS5RY2dJKjd7Nkwxb0tAcDphJWpZ''@;'; put 'put ''PVRITVVoKiYjeyE5dW0xNjJofW5dcilKQmFleU1SdHJscTc/YCFrYjdiJGwqe1RJVGNkJjttckx1OCFTKEV7e2dTPTZoOisvVj06TkRaPzA5IT4hPXAoOWB4NW1RRkd5fm0vXTJ6SWxkb2h+aWRxaW4jK3hMbT9aSUt8UShANG5+Mjo7em1GNmdpOyZXeFdpVGFKIS9wZ2hvKjssOWx3N0wlLGlK''@;'; put 'put ''JCtNalJwanpPPHJXJj4zbywrSWM1aGJmYENwaTxjVC54RElyUWtSeDA6WSxKZk0rXkEraTVbK31rRzZYSCxvPD96aHZOMnovOWtVOSt3eWVXWTUwaU42YTgxXWRiSSJyKWs4T0lQQ1F3W1cxOV1sOGNOdExtS00vIj4laDwyQjE7OyttIXZVfiFOPXk4NXJ2c0VLM0FPPklAU2xHbGM1Ql81IzJu''@;'; put 'put ''dEhQOkhgb35NaFpgdU9JRWchUkhMSzI5Rmx1L0xPIiw4ej95P3pRSVs1YUZUY3tJaWNySjV1Z2ZeQlJNYTsoeHo3Ql5GJSZ6QTBZLH1PYUtISjZSbXZMdFVqWjlCNklCI2NXPEQ8a2p+fUM1M0l1NS5jXW9vc2lPU1pJamRLO0lLLFhrS3krWzZxM0grMU15JV42cTN3RSFqQjJqTzt8bSlsP3dl''@;'; put 'put ''UHN+T0IocU0yZl08bDtzLl1DK0tAVHhMQHUhLFh0YjRYV2puUGp9L0hgWH4ld1hfQkgrPk5ncHhsNXpINygiUmw6LG9GVGNKb3FyJmtoYzZzb2V4QC5XajtFQF89blFfTVM0bFNDN0I+OFZOdU1rW2godFpwWTxxVDVQST93TV5EL3VGUWhfK01FXTg7ZGMzWEpbRFAmKmArUEw7MD5hP1dvVX1U''@;'; put 'put ''UEh8PTZxRCt2aHQ5YClrMWFgUUt2UlJSUGg3PEpuL2tbdTxkYytqOT9NJCpCZTlqT2YsMUV8QXI2bXJqQ3Q6M15iXU1AeD5AX3dEMGF+ZzsjfS8lUldmPl1TYmksUT5IdEsmWmw7NVcre3xUaUdwKmR4cXE2eFBtZ3g5IWhONjY+OVBHMDkqaT1gSXcsZU9nRipdXWNSPT9bPDRLI09PTSlPXjVU''@;'; put 'put ''MkIrOGtsO3dCaWV0RSVkI3x5eDwqSkhSN3VqeURhNUN8UGVHLCpFQElybncxUkB7TDFtKmRfJjRBSDtmbis+YipqcVNoJlhwITJqJCtyNV49RnxjUkpodnUiR0l3dSEhfGlQKE5nPHFoUEB0djZGfFJ8QlNCeXlBeUQuLmB1YiY8JD1SZz9lL00uXSRDMW1UX2lCfWYlKWE1S3wxYFdJenA9VHFb''@;'; put 'put ''b3txTFFRY3phNkElTj1weiExeXEsNCZuMiU+fV5sQ19dQHx8ZyFwblAqUXRzKVN3TVtLKTRQWTg0UDlKZkMofF1sRnk7RiZSKkJrbkc/RkxseDNtVWV1OytpWC4vRUhGWnBPSUpFMFoscn4zZnVnJHpgTnpMPnQ6UmNnUXIqVD53aDFvUnV9Nyl2I0hhOF8jQExkZV5RMTk/ZTlQO2grbWhXNVA8''@;'; put 'put ''PjdSTEVSKDdKT0tUU2U3LjlZa1Fnc0RGfD5DV0lvQWVFIWhZTk4+NyFGflhgei5WRW0kKyw+K0p9cGBYZ0xzIjxLKiksViVGO30lc2p8eVp7XTVtXS8pQj1LV0hPdEIzd3AiYFg4Mk1bP0FKMEF3aUY8dik1M1hySmhWNjp8I31TbjVPSUBpU3Ysd31ub2A1R09SQUZYdmZ1amlySkJXNEYvfDQ7''@;'; put 'put ''TX0wPG4/ZXxnSkc3QXlfXWB7MWwiaSQkay9vJSRhJFRqSklWQH16Rnc1e2c9LG9lUHs/XitUcmVPcDU9IiQpLyY0MG1qayZZb1BbSVdtX3hAYSJKKzl4SmRKQW8pX0AoUXFCfCRIelltWkZqU3ZGQC9vclRlLCtkUis4RiNQPjtid1JfW3wiN29YIT04N29YaF93SDF2I3FKUnxTNUNofntYRH5F''@;'; put 'put ''N0RARHI1OWElTTVDPGZYPEpuaFtzcGRSXTxoT3FCJWtfUk0jS2tlb3tdfTc6fiozYVhFKSpPfkFqUEN4Nj1sa2NxKzJgflBXeiJGekZPbDhFKEwoRmhRQEFiNzVZXkNHantfQ0xnVy5MbkFBbzdpKzQoO2gofEA+QEclK14sakhve1Ira2FOTGUmfFskc1hLOHlMUTo2eER3WUEkNEpCUkxYd29w''@;'; put 'put ''IVkvTzA5elVEWGgoWChgP300SHIyPU1fUj5yQnFFNUpNSW02dUhKQDtDMENMMU1lJXFAJHtmZTFGK3ptYWhwZkd8bHliLl1oSCZEYGxANldYLkFIQW80YjR9bis6KXEyLE0rKVF0QWZMQ3pEKighZHkociR3KUd4czIlVC5yYXJBdio2X1guWkBbPmUmUVhBLjlNckJvcTJHODNnZlBHUDtbZmJM''@;'; put 'put ''ZSZ8I3g4eWVqN0BLfTc2Ni5CVHVRfWxRZkkmU0lgVU1WMSNpNyhjak1JbnxmfXFuMGs+bVdAZGtQKiZRXmdlZV5nXSIwUz44XVUuQS5RckYueXVJQVNsdXh4RVtPPTY+U2k+VC5BSE01OGUhTTZNR1NodzptL2UvTGRHN0k3Oj0oYTh3a2U5fFg3Sj1JVD07PyxVe2g3YGYxQ0pWbmt+Pl9hQDIu''@;'; put 'put ''JXNlVFFKfGN0QmZUMFMuczF7IipSKDcyMng2dU5TSFFrJnNMekU6NSpGc1F5b0djblNWRnN+PV1KPjV7Rk4pUzN3dyhwYGM7OnIvUzg3IXhvOldCImJNXVVuQnM2ayxeQFlhKGlUV31vPSQ/PCg2JjlxV1pNMTxrWTw3e3M1TyFuYylqbz4+ZWQ4WWElSipuQWNAbT9LLHElOlJaRXIyNmdsL3Yi''@;'; put 'put ''P25FciQyaWEweCVmR2hXM1RoPjY7V3V9Mz1edHZoK2EzV1E0aVldNCpnenRkYkU9Tm59V2d5fFI+JjlmZkxpPXJTeXRed0taZTFxMGBLPCUkSHNzOz9+T3M+ZSp8allVXn1AS0UuPn5EK25FJUZvaDpZRHdYbUN6fGVrJkQsfWwkLCphVURVdm1hMX0jVm8xVmlJMnJJPEZ9eHshQEl2YHFAYEN5''@;'; put 'put ''bkshTzlxTTEocipJPnJvfFs/ZD4/LHosXW5XaUMpbVJkeSlYZVFXNTplfV49YihnMTlocTpVM1VhO3UmMiY+MSxZaEg4bzEkcVtdVShfcyQ1e1Bfdnl+Lmc6JCJhfmlkeUt4MFI8dytUS3xRaSNFNmhPWjBGSS5zRklLKyFlazgkYTtUQkE9UjY7dTNZYkNMUEFDX3whQUFSLCYpOFJkeSNAJml0''@;'; put 'put ''RWEyZzs4aWY+WytMZEJyPDE8L1BpWFN6VFp7TnhwVF9mKjxiKldrMD5MSUNgTGs3emgmdW1oTyU4IWgsQHE4elA9bFNOWk1QME0yRlI/bm0kdH1GUHZgSTIrdmZHMGJsMSNpdmUqKW9SXT8rfDNhTm13QisqVDJmVzY4TXJtJHlyR3xfOzdZJGorfDFQSlNXXzU/Nj0mYlAyPHBvKzgkX3Q3PiF3''@;'; put 'put ''TTNnUDxseG95JUgjNj14cTBxWHUxMFY6bjJhMUlTLnBHOiZARCplbHthKmtnQUFBYFJVQWxCdEkhVzg0MCk7Q1tjQzgjdENBcm5sSGxsZWZtT0xIRWQjKiRJQUdCQUFBQUFBQUFBYVM2SDpVb2pjNWIpJSN6c1FOWz1fO0MvSk9DbzgwdyoyaEx8PzZRJUdSJVRhOk04N0tESWM3OiptVChTfSY8''@;'; put 'put ''X1c8OWFhQiVtdEY7RkhqP0VoTSwzI0ZQTiRbVDRAb0BkOHg2eWF8MFZDYmpGVmFFZSFgOmIqTnlJUng+T2R3YmEwSXlUKEVIPl1gcHU3RyVaYyE2PHFbZEZ+L08qakRfLnI3TCUrfnh5QjFnLiYoQyFLWipvdy5tQixHakcpK0NbKV19c3M3UH5TIWA9VXZkXn1aI11HQnl+NilpSFFVR0JqO35C''@;'; put 'put ''Oj1DTT5zLz9jT3o/UFRdOFFveW4sKThzMD5YSEBGPUxGO09TcEQ3P1lQaVVfOD9tTjtAeGkpTmklRGs8fUckO09SajprZmwpI3VJJHpYdWJ3P2g0Tmt3SDNmbEw0OksoXSguV2VhVSkhNVglZ0xrNnhkK29UbklwOTc+Z2cxQioqbzBWW29kJGl3PkI/PCVgUlMpUDReKmt9MXU/ISxGaGBxJUpv''@;'; put 'put ''QCI4cXB6IklVSmIwXiwpUUtTJGQkTnU+ZV9nPzhJUGN4RzVGazdkKm5OWWVQQ1NOcEp2KlI8Jj86NW5XbkA8c1I3d1R3VjFGSCkwPHxuM3crMXZte2MyIkIzTkx0NkZVd0sqQ0EhSCMiTk1tSz9rMl5kS354fW9aKjh5M059NElQUVhbTDpDXlJdXjZIMzIqbnNPflFRdCh8NzU0M19CaGkjdzVL''@;'; put 'put ''NUBaSFpJcE1kUHoiZj9uNFVkRn1PWC47cz1hbTB3aEsiVzBFS1AwdGgrQ21vZlNpSDxEbHtqaHMyYzA9cDVyLylBd3s1OjE/eSVXJXNVPVIqQToxK314MmE2cEU9dUBbTyJ0dmlYZ1N4KEZ3KE0qWkJUdG1XKV5LaypeIXNlK1s7RE5PUCpdPW5XQ2xTRV5eIT9uLyF5ZnhXVlg7UVFFTUQvZixf''@;'; put 'put ''VFZHMEd4RlludnFSZFtMOnh9UyV1aUdheyRWODZJTk5MNEd1WkhMZEtxVDVyMTVNUVZuQjZeVylVKiVKNjFXYGEsWjNjQFJJTilGJG5TK3IkNEYiPGMsO35hOUBxJF9vNyJydkomcGcucyg6ViNrYEl7L2AmWE90MDUkWHlWeytIKnpsNnwyZjspTGpoWSVycSxuXnNLSW02eGMrTiZJS35ON0A/''@;'; put 'put ''XWpzSHtTbm56YEZtc1kpUHl1U05WPDJod09TLnNQWSt3RiYjSltnSi8kWmMmM09NKmszX0k4UzMwakFROzZ+SlF5TEd6Mns6PWV3TWMlP2hTa21tQW5BW0plPkBgS2xjZGgoT3h7OlVdVnNLXz0mZ2lJKW9BamNyby4iU1tgYk5VRkBVTyxPNml6X0x0dCReL0k7e3hxIy47RFNbOkhWMUhHKE9N''@;'; put 'put ''IzpMUmJPZyNtaH05ZDAxdCEhb1REd0xeeHRLWX00QFZDV0lTVS5aRyEraUBITyRRJi54WEVbOWt3KzpueltBJStgInc5KWtNLz1GajNWTWhPN1M/d2gsdVgoJGRFZCx+Y1J1fGooUGpocHl8VzBKVlolcGhlKSQhIzp5TF5MTk5RL0xHOkU8JikveWBTI2gzeksoPk9xS21mXzxnVUUpfGokY21r''@;'; put 'put ''SDx9RzAlK2EidGUkVzUuUEo6NGIyfU9mQldlOT9fNVtqN0suNlU7Lj44aVtmbCs1T148OlB4cWh9ZDc9TUheemA8eF9eWWMvK35KWU5mJUA2YiE2X10kOWBDckRsOE8lbzZxUUUpXk91XTZJTEhuJnNKSEtHQE1AJClhQHt+LmkuakA9dVk3JSFaOjRXS3NJIlAwM007LF0vQ3ZEWkxzRWo7LGxY''@;'; put 'put ''bn4yTD5ES3BeOjZmMDIhb1NsKDpOPXNaVSVyTUdPSV17SXBxcHpiNHN+Z0BXRCtmJHlpWFlrWFNxQUsqK3dFdVB9MyxPQ1Z4Ynd9Pn5bekhEeHh8cjYkZEpGakhlV0ohTk5IYjN3czBib19EWjFJYkJAWkl+YXR2QiF5TzJHSl9+VHpmVFNTKTAjI3g2JV1McCE9Y0k/L2RjMXR7RXIuUzpgd31m''@;'; put 'put ''cm8xXztAYWw9TGJ3UWY6Ik0ySVR6cWpTSTN8LC5RfH1+Kip4VSJVQmNVaGBYc1hHUEx5ZC88OVtHejRMcClbc0hQe0pROEBNVHRKa0UhTDxgc2FVU2crflBncX4oQlIrVkNCOFNjKjgrXnh1dEJaVmJ3XS9ARDh0PjE8PHRxeUhFdHErWHtPQ2IrRjJ3WCgrK1NDOWdhd2ZgTHw1YG41M01OJTJx''@;'; put 'put ''eG53N1l5RmZnbD1GT3YzN34iLC9GSU9uT3JVOF11RiNVMmtpTWU8VS9DZngxRjoxfnY4b0YmJFBpKipldFg/K3JNVS4kJGZoTzxkXTxJTVkpbykjPVF0IyNBKlcjaHl0Q1F7a2RlLiNGVEtyXURpbTtiTH4oYE5WU3J8PXV+QH1wIWRoaGomNUZOVXw0NDo6OmdSbk1oYHQhP0tCVXNhVyssM0os''@;'; put 'put ''LlQsa0M2fEpxazdLcmFDSy8lQyVCMXRbbUdZfGJtcVMpVkNbZTNxMnhRem5QRE1mZk97X1M2TnhMOXpQVXRhSnRiOEM4PG5IOWZEPEZHZ3c0Z2VvQG1nOVJ3Z2wqMz9+UktlaDJBUEM8NFRVQ21OQ2A6MTJbfDdXLzI7LDN1KCM3eE0vbSIpRkBDKTo+VTVibT5VQysrSitvSVFwS181UDVBNU09''@;'; put 'put ''VnlSZldMa29fcltKQFNHZ2FpOWQlIW8hZjVTKnoseTcuNSM1USVES1MkXVFaYUZjRGUrRGF5YE5Oa1d3QnQ5cV1+YFciMXI3ZWxPPjRfREcqRDBYOHYvRCs6T31GVHVNW2Y0Ukh9dTcrWGg6YlR0PXQ/R3NgYkksNHFOLkxGO1pvLkkjOjJxT1NiVHBLTjFSU1svPzJncE9Ec2daT0JKdGVVajJk''@;'; put 'put ''TGRgV2RYPVFDPj5ROC44YzhMNF41dUsvK151VClhPEgkQXxWX0wiRnhRRj8uTyROV0ElJihFeVZRdXhNM2U4JXZ0djQ2b0BUbGAsNjZvS3JSYjVlPTRDNjU+PGp+MyJUZTkvI3ZxcSEvRztOU2FaMHw+JX56elslIW98ViMmOCZESyJPN0hIYl9tdGZTbTFqWT0zKWFJRWYwX2BtZjEzUFkkPmVn''@;'; put 'put ''UShdN1hHS0csfDxBMlMmZCVJQ3U6K3ZlKT1xNF89b3hrTSZCbzpjbilMTTc4fE5CXltFQipNTEMjZmhbQG0rMVRrI1VNYy84b1Jza1tkW2U9fildPENsVU5sbypwd2FIU10+YTksYzM/XiRFR0RVZEoiZkghWDlLRWpPTHlYR0YlaDQ4TyxgdGVhNlgqIiloLHJOUDhDcm5uKSlHYjRIan1vdWAr''@;'; put 'put ''UW5IVjJLUSQjRHRKPSVLXTtpYn5daGwyLlpxV2JEPD8jRSFSUVVMKFdxPzgpVHJ4cmNwNygsUkdBbSRfcXNea3BONjJdMTMwWCVrRkl4NmJLeiJwLyNBaVZvZUdJbzRwQFVuZ1FPPE4qaiRWY3x+KX5nbzxZNXV1R2I+OWNyPkAxOXBhQkImWWZCUlIsdm4yYk5WQDNURlE1U0lqX3RTcEUjVEpJ''@;'; put 'put ''a3ciSk0ka2xnMSF5QilIITh8SVM8NiNVVlQ0U2NPVkRIIXBhO2VRKD5EdUxsLC9kbGw0MSViYXp0NXc3TWRzZnNSUktybUA8Pnw2aGFCR1IqUT8pU2F0QmZoKCV5PiM2ejQlb3IqVytCKntwXTtmZURQRH1QfH5XZnFGV0cyZ2ZNeEc6eHpzRDF4Rjx5dmxgTVEiQHdnejNCYjI2QVJuJXpGWElw''@;'; put 'put ''QHtlO10xO00kWCpkN2pFTCZ1KmR1IiRYN3MsIyxbJS5hdFYxWT5laH5MLE80cSlfcV8kcD5oZHkjKEE3R3tXa0hsRiI1TkBbMjoqTTs0bGopQGMwVipfQmN2O09GXSI+PmhRVn5RSUZUb2RaS20lfW5xdmcyIXJbKGFDWV1oVjc0aCN0ZiFkL1hxal0/dih9Km44Z2BTWnJOLzBWJjMhMjNwb21m''@;'; put 'put ''OVJ1Vzhmanc4TypXIiFfcmlEVjZ8MSVYd2YuLGwyMGEuc1kkaypkQzJzb2d3ZTUpT2VXWHk1Xl4qKDtJXzJCTjdIfDhXRDgoPnNzMSI9TWxYJi48MTIoJjlHVmZTIU4ibV5RNjJKPEZ6PWtha0FvMi4lZltiI104ek0uU1ZbJGJPNTFuWWFeVmwhQSklZSRlWlQ3OVRCeU8yRl9wSW1KM05NTWBA''@;'; put 'put ''LFB5SnFkfGVlYClWJXVRey9XJWBxVTlIa3BtKj5QXyJ6RUkzYFpZNVRJcGY3aDlyUWUrWll9R3FNKHh+W0MucF9VVSpBY1tPPFJoc0lTaFg7bHVvWSl0XmYjb2J3Qik0dW1FKWc0dj08VT4vWHpiPyVyUmNRU2RyeEE2WC50M2V7JXVjMUFWLiFjW3QqfmIuOFhWOk5dczV9eDB2XXpAck1xUEc7''@;'; put 'put ''JmhRPi9gIV45SU91WnJnMGR2cks7dkV+VUIpUGMpXykjOnpxQ3xiIkBZYXZofmJ1WHw+Oil1NHsiXzkxcWp8SkJQRltEPzp+SSxdOk1QeG9HeywvPGpQfGlvRk9UV3w9RlpzekpFZWVrbGV7JF1pK2spdWMoWyUiVH49dSE/dWkmRUVzZFNqKFgmW2ZgRnBHOzRSOEVfbDpNKkp1V01+Iko9Y1Ff''@;'; put 'put ''SHBRUl4vTD59YE1uWi9lfDNrW1tRPk88YSRuaTRsTl8zMSw0SSN4cE5fUyZaK1NpMXxUPjZ4MmUrSjpmRSZhM1ZZRSZ1RyNwUHAifGBOPnErRCJnJTJEaUVdaj1XbDlPM3VXOVJDJFlQIkEjXlYhKz4jTW9PU1YjdVV2KS9hO2I2U2VEcVk3VUZGfUVafjx9KVlzZ2JjSSk1JC9wN0doTFp8O05i''@;'; put 'put ''K2xyVkdIQikyJGxSP3s1RTlqbUBneipBXUdtbE5CKG4oR1QuSlcqdVEwd3d0U0w7TExvTiNtczJ8fjVEfSxMZH5aSXhxZF8xSS4hdE5PUF5MOmM5ODQxU0g6Oj49ZVc4b35tczx9UGxHJnMseFJ9L2E1dHQ7K2tUY1UuaihxSzg6QXI7M1pIQ0M6LzgrPlAyQ1U1OkZrLzNvSEtAWXttWGtiQz98''@;'; put 'put ''NHA0N3lPbTVNUjdWdWA5OGN5X3RNSFFiYUwhWU8pUSVVaHBnUXNjISw4YyR0TX5mTyRvYT9zLFhVWT1QbDNPPzgyaUtCUyNzIXcjU3RGUjBQN2tkczNzIUFUYVJDbT5lM3RhU0hhcmpONTxxNEJnP1J+d004VTFuZzMoaEU5bW1ySFtEX1EvYCZ0KUpDSTlreVFbcCRwbyVwQFdrT3wsZEdiLC9q''@;'; put 'put ''LiQxaFE0PHN1W09iSW18PCN8WzQ/MVJZfW9PVXN9NndOVkN3c204QT9pXjNUI2ZlR3IwImh6WzgyRlR8MjkxKzE7KmthVlZde0ReXms8XWpnLHwuIU95NztoZWpRazZCZGozZzlPcj9iIkQhSTNaWUVsW1ZmSEJvbkJuQ290Ly59R1VdJldKI0VeeD1lfiRNWXYvan55Y1EsMkpudCIwWChefWdZ''@;'; put 'put ''LCFQfHsqTWBSSj4zOXVkJGN5Y09GQilTQTE7SVF0Zk8pSiRVTFZuKltCK2l4Xz1nOXpAV0UlY2RfRXooai5MaltIbl9GO0tnTWAjbHBULlNVfXBEcnxgNjdCMHglSStbalJacEZaUTR8LzRNe2xTPHx1Rm55RG4rbjg5LzdHMjVsUXYwYEA7LDkwZHYxQjA7I1MucEVJKjQ8WG8/WGdjU3pDayxh''@;'; put 'put ''MjI1MDcpIko7MUJYeU03KGc9QSYzRHRBT1tlKVNsVUFSc05bRS9INWM5KDdgZDleV0hAc3hfZEJXWlMkb2pSLEI9JVBiWnhYXU01Qj5beyI5KjZAJHlxMlg0Rl9nKHdjMWRSQj5nMlhIMjh3Kk5wfDtNeWtsa185NVRTdktBK0EkNEUjLih0QihMMX1jLlA3KHtnbik4XVVpU1BbfUNoU300I3I/''@;'; put 'put ''UTsycyZ8RlFVamkhWGlNflR1c0kkW3thN1kxa3NAMnhxYEE4QUZoaFl9fTFOZVkpQXdhOUM6bCxlUXhia218c3N7c199bT44OlR0Z1paO0gzNSE2Y04pVTZPJHElNVRxaDsxZ3RlNTEjO2JIdGJyZUk9ZHRdb3FPL31welgwMks/e205bEVHUFIsPF42PFZ6R3pfLFUsSHo1TF9gaHZyVyVba2Ap''@;'; put 'put ''NHlvQUAlYyImI20uZ0lSMzlnWX1RVVA3R1ImRTdbezljMltFRUhAIn12R0xHTkN+IVc3Rkk0Un1VaSJmND9RX1REYFsmOSlbXkcsV3Nudk14dGlRaCU1PEsjcV5ZYURwWntqWGlhbXhVbyhAMTVHSXI+QnFPKyFxb2dtKzw5PHxOIVBCZk1pakIlZUBlNCQkLmhaenVNZyJEKmlQaSJNc1Zeaita''@;'; put 'put ''M2h4Xkw2QkRpNX1ycGs8NWFUdmpuT0o6TyQ3Mls6cTFvb1BWZHRoaDV6M09TM2FtIm9zL0tAYXVtbmowcU80cWtOIS8xSzxKJSxzY2E5K2NMPUdMY2BYLDZQKDUuOG53VlJLT0l5TjM5dXlROEYjcXtiZjJ2LFUrO2JScD5SPUUpIWw9TjlfSHxjNmBNJmxnNU8rSlN9IjhuZVB1SSpvKFhfWix0''@;'; put 'put ''UytrOjdVPiZweHBXWDlXOFdNcnlGO1ZqPCx2MEU+Oj9rW3NwL212JW1SMk1HNTI6VGo9ZikodWgqd2NXNW85YCZ4YFR+RlksOlRKRl1yUkI1aGMrU3NYPmcubkUycSVHTUEmN3IjeEpSK2FseFYmdSl5WXNdekdwTWtTZUdGMlJSRD4xcDJ+Ry4iYGB7YWBuNTAjVVB7b3tiI1RAWHFvL1VETk1R''@;'; put 'put ''cSU2cXxOUSJUWGIqQjFMbnklYSQ0QnV1QSU5TllYZnVmUmBsT0dwVjRzUjMxLmMrT3ElKCZMdjVjN01GZntIczVhU01kQyxUYDh+YVN1bTkpQXBfR2Y+XjJNYCFLNnMhL30rTmdKKElIc1FOTjYsTVNQWj5kPCtQUnN0TXs5Sj9FRWd4V3VWTWV+LEY4N0hpYk0reWdOZFJhXXREL3VRWkB+Ni5l''@;'; put 'put ''eWgzeChBdVpXNFVCfGJbVEVZJSNsfV5OdktbTj1zeWUuN2pKWkA3JUc+YD4yP1lqLGI/fHU3UGd1VkBDTV9yU1F7Vz1qSHFsRUAiN0NwZmlpSzBUNGUuKUM6JG1ha2lRajMjXW8xYVUyZS5BO113K3svNHRsY2dQOE5dL3Y4byZ4QT0uY19feF1OSCh3bmR4NGFxQztJRGMjK0IrZT0rX21jQT0/''@;'; put 'put ''Yn07eCx7Uk8wblghdy5PZENtSUohX1ByQT1qLFY7emtEbmNMJG94KDRPe1UqRjpRPlp5Mz1SbWhQQF8pLiREUlF9e3AhY2Vse0hgVUdCI2NLRSZhb2woRyF0SypPQ0FEXjc9MVBQYWQuXn5LI2hFLDYvNHdfdit6N15jWmMvfCxbNUFbK1drezh4IzViNSoiUlBUbVdXcnwjbEBXT2JyZj1AMDFP''@;'; put 'put ''bndvUTF7ZiRkPjAhWCQmQVciVzpjJXFhelZxd1RnfEgzRyk6PnlsfGZBVHtmUlQ9InQld2U2QDI/QzNXX340K2kkQ18wW0VPTGJvRDNKUFc/UkxwaVZNaihZUClyIUsrSkdxSVBJK30mZSlwel4+MEk3eG1GSS4+SF4/fnk6TU8/Zm9wU3VmcjNwfjRMeGdBNSMkNkQvfj07NHEuVmhJam1bVn0r''@;'; put 'put ''IXdaTEpqRzppKTNSWmhmV054SzRiRlBDeSgwMHlmL15VKl1fNWdDWmB1O2FdYiV3alh6bi97KUcqeUFoWWprTHkuPEQzX1U7MkFIWj9EKU1SJEFwc3JmamxCUHhybGA4fV1BOmNvTHkqNCJXJUByRCYhcGVGSW96NUZ6ekc2aGoiZEJWeiIuJVg3bU81LmJWfUwxe2ZKPm4qSWxiM2l5c0lRWyUz''@;'; put 'put ''IlgrfkZpaTx2SFk7TEMwa1ZhUVpoZDRUQ0JHUEgvOT84e0U2dztUOnJqdiE3fVosaW82Jlh4YW5HfEkxT2pPOEchZyRlWzsoey4rISZGJXpKZHRfIzZ5akg2YiFwT31lREpndkV8LytKSThEYUs+aWpYfFJYI3gsKTgkM2I9Pm1gVHYwKWY0Oig9eW1EOVUpRzcsOkk2RnBRPzpDMzpFdn5hSk82''@;'; put 'put ''VUJ8fXE3Rkh0SD9iNypWU1dSKkRbdSNgJjolbmR2WzByPUBRJDsuUWJ+eikhJSt5OGxfbyV6UkxdeH51S00wPD5oZFEoKEtBP2hWeFt9PjheJUErZVF8NSswbTYpV2RYIzZxMiQ7ekZQYnMqKzhbNU45c1NaaWhHMyhKXns8YHZnX3wreHZ2Ql1CWmJjNDolN1NzcXxuInYxUkokd1RTdTc4YkhT''@;'; put 'put ''akR7SFMrRkl0eDkwYktYSkYwVUMwVFg/Sjd7OyhvQyFMeXJxL0tMKTw2a0JbOmp6Rnl9MW07MGwqe1N9IU94LGBqVTRZcnxYSGJefCROWFoyeWI6bXNdeFhLKTtBJihJaSQufCU+NUpHNkp0Xjh4akpuTE93LGdtTj1ET1d+P18yd2hKTXk3O2dLYk41fSx8XUBTYHJMeCNucnVHTUBeWzxiPyx9''@;'; put 'put ''ajdLaHI6Q1BiKXYuRyRsclJISnYrLlojL00yY2BmQXUwL2ZAa1leNllCTzBNY1NuUnkxWXVePDpld1REaVBiN3E4IiQ8ZCZ4Xnw+dSUke3R+OzFze1Y9KXEqfnAoXjQ5PCNUQEImMVE+JGxVWCFTQyErQS8hO01jQ2k5bSs6R3J7ZkF6KEVQSnpPbVRfNTUxfSloLHFNOF44TkF4O3VaQjgpPlpI''@;'; put 'put ''RjhNajspa2tbPVI+OmJaUCYxfXt6bEh6RXo5eFp5Pm8vaWJiOXcwTFFfOHRGYD91YnsqQzhdKmEzOTAuI1FFPnc7e0M8Q3VJYmEpTShBXnBtflgjKHBWO0RNXysoXlljPlRLLi5iWWBAMSpHISo7fERFKzR7ZDJsQGhjPmg8SGg/ISg1bH5NQ2d7bDYrP3dLbntoZVM7dntgPGAyZlExa18pTkJD''@;'; put 'put ''KFYsL10oTUhtNmE7LihqR29rKEhGP1Btfm01P1g+QDNIK2MkdmcrdD1pWGZGd0UkZ3d7OUI/VUtqUU5Xbj13b2FPL19SZHt7MXxZVlp7eDllRz5uU3oke20hZjZEKjFaY3ZadE1YZ0pZRCF5IklgVVVQWnZkWTVBaWYiQ0VJaE9IZSo4SV5sYDIoNE9PXllXNy48fDZTem83U3FwXzZXYjNYLHFa''@;'; put 'put ''SCp3K21CTTtwa0w8OzBKcUZpVmxvXWckR1tJO3BIMmF2NFAmLz1Dc1pWPiF5YHljc0JHX2lnaDdkfiRbOmpQOyo6QnYqXWVPS0Y7V3grfHYxRnJGcDxZMnopJVc5ZDxQWkp7ZWdHXVszYiN6REhwZX1lOyg6SSorVEFZaClrZSxbQCQqPSNrKFMjNDxrXig5Jl9vNk5NZ1tMV3NTRXBXdU5QKng8''@;'; put 'put ''V1V6U152XmkhNmBMWXZabFhXO3ZebHV5RHdQQVlITWg2MyhpXV5SJVFKU2k4byRJTl00aig5YTdsMFFRajVRJVhTVVdYeGFRXkc1NCJLZFR7KWFaKCgxWTAkPzdaZXIkWH1kNDVMQWk/MEdtdz9AWH1CRGM2UmRCOHtDSlRtJGdQJT9qP3UhaW8yKSg5c3AkfGRObHBTQj9CSGZQOVF+fW1oO1Za''@;'; put 'put ''Mmw3biNhez1Wd2VUTzslXyhwX2xRIlRGKEovdGdbciwpXy9CZ2k9VCQmIyx+VnVrfnh3Ij1PdFA/WGdFWXciaDV4MFNhJXBHZkBBQ1RsI0QwJThSKkAhcEcvKXBhSCEmdy5JWVhicVZ3fjJIZmJaXT14OUwwZkYyKEZ1d2VVK3Fbelc7QCJuVzRyQXhGSmRFclY6amF0PFtDYSpEWW8xV1A0TUxw''@;'; put 'put ''SklbI2dpTCgiK0hNJGtPVkdmeCpXcUZvP3VfLFtST0tZYGxfbTdnfmZhfEIpUH1lalhpcTpdc3VmNmhgZHJMJl9EakZ2Jm9XJURZaip1O0pEbm9TWUhtYDxlQTh4dU5GbXEpfCpOO2FCOlg+U25eIlF4TE9oalVYPH4oWnx5dUFDa2x4dGRTczxoU1IuSkJya2t6XnRoTE89RHpzRGoobkEzZkt5''@;'; put 'put ''MSI0NjF8MDciVls4WWo9bShbaiFGN0VpRUt1UmNIKyswWSgkNyNGSUkqdk5DNTFxMzp0PGZnJSg/WW4zNiloNWNrTzpaZjBCJDZ7Nnsoanxpay82N3JeRD0od09Ob2pkdiFLIygjRDczLnhBIns0Jkg1WEVqTERIP0M+ZUhVV0BCPjM5JjdePypqczEjKDRTPEVsK0dXOTtqXjhTSFtVZENtND5Y''@;'; put 'put ''PTdsSF44fEQ0enpFMXhKXiEkJUpuISo5UFs/RFRVZ0BYRXcxSnchaG1FRF1JRCIjfW9rYnAwJU1gdEl4YUxReD17ZX5aSC8oOW1QaV5lb2h9dT56SjEvMCRFMjh2byI9PjRjUTpWSXkieXZFbnNET1liNEQlI3BXYU9bMyNFaEwmb1VyV2VtdyNwfi8hVnxfSShSPFV1TTY9YUdxVXp8ZERjOnok''@;'; put 'put ''Yi5ST2s8cjhEbXxfKj1FcXpzZnRRSktlYCJ1X3R0M2YwflEreGE7JnczdFRndkdYd0xQd25ULCQ2aWJma1Y2Xl05PUMwciZOOVBAcyoxcDRnKSU6cmRRWj1jOGYzTm9KKXhIRntAKjghTk9sPVUmSzk+KCgzMkNpL3xdKF09KmE0MDxIS3llLigrYC9SUyU+RWw+QzM9R25HQ0V+OWxxTmg8Uj84''@;'; put 'put ''PElMNntYTy58ZURlIStxaSohWEdsVHQ8PXQmTWg3cG1bdUFeIkVoNkIkVXpgODRjZVElQUxSMFBWaEovb1omd28hPldIW05PPjdjMX4ybD1iek5NfXZueWtxUGdFZUFhXjZFWUFrbT0xWjFrIjFYTShHdnReYTViIyY6JVtAfDU1bHd7RSF9fXsrV2ZZREU3N2chXnxuITQ7fkllcnhjY3BManVm''@;'; put 'put ''fm09UlZiO2h0STJTeSQvZV9aUSQ1a0g+ZStGQl1WSnNWQkVJO0RRfl1sc0tGeWpfeTE3b3EyTCR7V0NEZjZRUHwmWVhWdHohKD80PkJwUj16VUpPJUF3cjgjZHM1cXdER2xtcVhzekdVXy5acTBgQkgwbFdjdFQqbVQmL3NkUHZLeSE+WkgyNzBtYjtVcV58ImhGYCZYYTV9OEN8fThxfmU9Vyp6''@;'; put 'put ''fGFqTiNsYn1NTD9ITFJPcVJAamBFKGlMc1JWOldRc28/ciVieVpDZTtrclNFR1soXUhPVHZpVllMaEhIbm9iKXw+SXNbQDE0KD1fUl87fi9GS3JtMVkhM2VANHhOJGVlSjZqaG5SfF0zMEBVWU9aRE16TT8pJW1YV0hjNnlrJHokIWMvS1YlKWZvImNMQ2MraihseH1xVVldfWIvblosK1NyUDlA''@;'; put 'put ''X1pPRT1kfiRmaHZ3bCxNPDxQcE50Z2A3KCVBL3lienVOPFMrQkFJRjo4Wn4pI2Y2NnE2KXgjOXhObmZlPm5RKnJuZCZeaWtYUFI6bEt7OGhURjB3Zi5PY0pVInkhSSMxTjl4dD9hO15yW35YJTcmUi4wTX5zO0N4ZSEzJGB0VE9ISG4wQy4+eVF7YFRiejpIO1ZKX35kYHZyek9qVkVxdGRwIzp+''@;'; put 'put ''ViNHWk4lPXxgVDp+e0VMcC9ULms2eUNGUXJFL0tKRl9ZOShfaXtNUWkubjpBd1BDU0hEc3xAOlI9Lk85RmtTNiNfUyMySUopeF0vSWhscE5XRTh0bXl2X1Q/PHZHbHRGJV51Tlg2fSg3K2Zeekl5Wkc+JlI4RW9EVFs4b1BObmQvS14iKSR1OVhYaCQ/Wm5oaF5VSmw3aTBObDlTdnhLfHxmNURq''@;'; put 'put ''fC9FWSw3elhtZigiIklMRDlSIU1FQXY3TD9hTFc+aW0/bjlBemZ8W29DZmo0RGJge1BCJDd7Xml8bE5pdWNeMWJKemdJYHY0U2c2fkY1USI3ej5ASlEhbzFfUz16TUt5e0E2P3lNQm96VyZ5KV0/fDVKPlFufnE+Y3d5eSU5fm0jSEtweHNCQ1A/KlNCMnhjRWVkKXBLO2F0I1JxXzQkQHlRdTxv''@;'; put 'put ''Q3hfRCIqKGxubFF+TiU4LkR4dmooV3skUzIwVTtJUV8uOjlKcHh5enlJa0xta0shflRrTV1DU1RJX1kkPTMmPHhaR0N9PVklIlQ4MCJaKTYkOjZ2cDwvbHp1Szd+cyFLWW9rSDtoZHJsYTJvZ1tCbUJ1QUMuMDI0YUdvPVRLOXEhPjBzUUcvVjApT25vQXhqJEcxKDpvZUxecy5kRV9KcGN9Uz00''@;'; put 'put ''TWVTMTtYJnFdSFVDWmM7bHh4QChmZSpuKDRDLyklPncwNUR7U340SzdoTHFRKD57OTBjM0diMlhoKWhDJn4+JkkwOylNc3dCOzIlKkBrTEJGVHA0JU9afU9NdSYzVVRqNl5GdmooX2hwZzt4KjhiaWdWeHJkQjtBR2hoYXklK3BKPF9YeXc/OnYsZDJobHghWDt8SzIsUTh+RHRAdVE/KDBnPm1R''@;'; put 'put ''OUs1PHwzNEdJJj9Kb2x4fjZSMTx9MVVEI3ojTT5kPHNtcnFlOStRb0pzb0VFLj5bUWl6d018aWQiNE04OHkrNilPVjViU29RfHI1TjlzP1BHI1IkTlRtP3x2VSR0aCVYe0JCXW9NUDUsQ3NlYGpYJDtAVz1wMztafVouYCNALzhVQlMoQD55SkJEZ3N1bWhOX2pTczJUR3JZZGRRMkAwLHZ0Rjlw''@;'; put 'put ''eVJZPmwxck1ybWNLOCgkNihqQDlWXmgvKFZacnV5RjdqcnFXOk4vS3ZZfXwjWzZMLk1PVlFJfEFnekV1Mndme2RLdUBDdzBQL0IxTSwrajE3a3FRVy84TmElYD1yUWdGMn1jdkJOSk5OYkh3KihvJStdblRaWnBYXVk8W1hQTTFHOmlYXW9dIkwqNHpGRVdPaWE/ZnwkK3U6IWZ9aGw+fE88KFUz''@;'; put 'put ''WGxvKjlQdGJSViErO1NoWnk4THV+MitKfHlwOUQyTEw5KUdKLy9KVEFANno6TkI5VD1IYCVhPjhAKENdP1ArYm5QMkYpNlA2JWkofG1zSlZ1YGFFRTV6aj5uKSgxTXlDX0EyajJhZnksan1IenVMOSglKUVabzdEU3hESjZhXmZDWndmND8qMDNxaWAhaW8vJlBXfiN9QUNGNCZ4JXlZUzduO29n''@;'; put 'put ''VVpVTz5LSEF0W2lmXiloSFtNW3IkLil7QXtAOTl9Un4mcixRbzEpIVh0PXE0YHZWSnRpOEI3V2dJUDc/O2oxMEdGLHpMQjljSnJXMWA6OnosQzptMnlkOmQuPT9SUFhiVFksOUI+elhDZCF2RzZBYjYiY2d1IU45bjlxbChETHk+e0A/T3hlJXpNZlU1XyY6NzRRVWhsK1hYNm0/Y3AudXVsY31U''@;'; put 'put ''QVFpLn1eaSldQ25vV3g3MXplVzIrMG5pUy9+cndCKlZyO0ElamQxQCwlRlVqQy51QlgiflVdZ0Qlcz0kRiJ6ZWtHZk82TH47MDA6S0xmQ0xfeVNCW2FbVy9yNkVwVFZsJWw1cDB4L3xKLztpLD9MNS4vZ0RQezRseGxZND5IVlhwWnx3PCMuOzhPL1phPzBvY1IrX0ErbCRXRUtodnd8L3FTNywj''@;'; put 'put ''M0p9Il8mclt0Vjsvd1o5NSspPE14Z299eE9MQmx2L0U5VixOY0k7RD9PT0RISl0zL115Rzs4TEslQSt0I1dMdFZ8SkU1JigwMiJzaHIsbyVTQk16fmkrZHNKOjo4ZWxpWUJKRHN8PEFia2p4I20iS2BMelNmNDMhTVdCfG1UdC9yTF4uWTM4PFc3JHkvO0BRR3MwUVpNKWZnOSkyTylpbXRGOEk8''@;'; put 'put ''X2JZZXljeWpqOHxYR0hUJlJbREYpYTJAPkFiNVQyMixiS3lCZVdVOjNsc0B4eTt8JmtpXVtuNShBUC5dJEl5cmgjfU81L0dAWFZdOF9zIj8sZGc4VDdmNUBvdllYe21CVUVpNF5qTU1fVXFYK0IlQEEvJFtxajo0M2lLL0FyJjU4YDg3R34hcEVYMGV3bz07WjIuQzhJSnRBYT0hP3xWTC86alp8''@;'; put 'put ''cGU2ISo8LjVrOTRoMyRlb25uUy9sdlVuMjFfKz5ifDVZXS5IOm1IVy8iTDBpPWZodTZsJU1MR1RmJlJHMzJGVCtESUZCSHQhS3gmIig6LDg2TERPTVdvVDR1MXZIZUMuPXBNVnBSJUxsZz5BNztoUC50eTVEXmY6SFFRbV9+WHp+ayE9TX04MH5EZ2gxb1hyUTRONjhseV90KnEqUy83UnkiYjFf''@;'; put 'put ''TWlhXmo5RGRWNjBoVX5ybWJ+Xz1JT3wqeWFLQ00vKmBLYipVSFAsTCYuL2psIXhlK294UmM+I0EmJEh5aU4oTm8rInEzZEdASjRWVzl9Pk5wIT1xa3VsaXAjfiVINEtaXz4kbDRgODk4fSk9Nm5fa1JTL29OY1MhbVg2ITd+JXxNbFZ4NmEwKjAzLmhOTCtnZEU7PXY5Rj9MaFp5XSZ5MUo0Ik9C''@;'; put 'put ''dndKO0pafm92OlhBS25iKWwrNWlZJWk3XmNAaks9WHNgRVg2MSIhWGkhQ0dJLHtUcDs3aXpRSzsrZEw9MUlYcnlzbUIkY2FtYm9UY1Rjej02ZzNHSnE2PFZ+UCw+UHA5K0xdZVJpT1c6cCRFXVtQN2skOEVkQUtLbnhPVmNjTnBrZ1NjUWt5Z158NWwhUWQ4R0FIPCFuaW1tLC9Wd0E5Q1dMMTNg''@;'; put 'put ''PyhdQzEvTDZrd0Y1KWtKKDlhNHN2JiNfYF1BTCoxTC8hbz1SPDclKFpNbTUwTyxSLHRGKVB1bVV3Pzx1WGs/TFY8Om5ofkp5S1FYfUR3OD9VbXxJWlR9WEBfO3VJPEJEQjIwJFVOKHBlSVlUaXF7cyhCQXptK1RVLnoyKFUwXUxKWCN7RWNTOXZ1PzpsKFsjMzZzfSFUdHREPHtlRF1xaTlJX0tU''@;'; put 'put ''WGw2Ym5efmd6dzohNlc/PzguLFBgdXRjdm8sPD0xRmomL19MQUooW1V7a05Cez9rZWxpb0IidzprOlFSOWwvaWM1Xj5ZaC88Ym9mZW9UTz17MFVsUyVobXJJYXtQYk1oMzlPVSs7XlllImtHMlNFJm5FTDRsYiQqOT13IldKX3U6ZHswcCshMDs1b2BDPixedWNiSFAod01fPUI0KHNrSDQieV8v''@;'; put 'put ''bkE6USFna05nJWlKKVVKfXFYVjMmV1Epd21sIWAubUBsKzl0R0duPjRjWk0pP3RiamApayNxWTUuSF9UOmU0RWRxUD1eLDpXNH5SdVMvI1U2ckwyJGIhUzRXb0dFa3pmQTZoLm99K1gpRSkqYlFYc0ZSbWpOaysuXW53IkAoazZTLGNKYU1FPiZAWlg7dHBTdEVXfmoibiNpMH0xSS9fLyNLNE4/''@;'; put 'put ''Jnt2U2I4QnRfQy5sPUk0PUh1aF9EOnxANUpERUVITUI9MDEoSCJXMjhaYGVUeXFmTFBvITlGVHxHX1M7MnN8XmsrUU9jUXg3XiIlKztBajkoY1B6dDIyI1kpVHQjZi5NbDN6QmJ+WDQhTXp9MiQrcjVMUihwXT9oPjkjay9rYiRUVnYuJkJyRCMsPkR+cmpLLDZwK0o+aX1vUH1ARV8kN3RvOXEx''@;'; put 'put ''fmhRJjFZP3BBInJiSVVgLkQkOTF6PG9gR2VhNWU7VTlvc1crKCoqcypmPnV9YTFTOHxyInQxUlhEUVB0LCViRUxDWk4vfHI4Vk1veko6Ums2RDFnODxJTHJoUk16bXxXJDdAOFd1bUJzYkRYJiJ7czpLVkArbCExNCZ7LzZFdz55X0hbTlcsPFZoVHtiJShEblI/ckkqW2FyNVY6cytGVXEveXF9''@;'; put 'put ''LCooZHAhZE8/O1tGRzZ6YDMsVVddM1IiK3UhU0hHPitdTTF8PWpWPn1Xe3sscnpFOE90TWdsVyVNOG9aXSFFfF8+TXc+P206WHxHI3B1QzJYNyxIRS5YYUkyST1aL3x0ckF4dSN8fjs0Q3MpSDc1aD83als2TlR7O2RMLl5QUDdPc3lMK0sjSWEhU2IvJDgxJjF5RyEiVT48a0p3cmYpaSxkVVJK''@;'; put 'put ''PUlVejx3dzBWKjt2cipGdnxKNilOYVpaSDp2OFguPFM5cVIiKSkualpOaXkhdTlwb0xyb3dWRjFDeCw2digvPFRvLm8udCoqYkNsRDZnN1NheUVlZ31SMVg8U2NHfGpROkVVRCN1VnlvIUB6WFMqN3F4cHV8NjJpJSVFfiZRQzFWMyVbYilWZV4lIzgpYDUwSzRDYDI3bFEyYl1tfCRoeV1SZFB5''@;'; put 'put ''JTxJUTJPV0kkQyk/U2hJe348eFZecjJkOWltMiFmQVN+QClkIURzR3hAVmkpTXVOOS8oUCg9SVFqXjxgaGszdTM6YGI6Skd7S2RocTRGPkZiK1ElPk4wZlcoZDcyZSNCZHd2dkVSTX1Aa1tSJTM0eUtUTDl2NjZBflVoMXlqbG18cFY8RipbdSNdXWBzWWlAUnwsNW0vNUMpWDV6NzxlR0VucktJ''@;'; put 'put ''amUxMjRaImk/U15bOyV8UnUyTUFAWCF3ajE1a2l7e0xCS1BfMXNWdFFEU0M9eWJlfSNjRCtTYT9dI3VvInBddTozcF8jdzR7UFRqe2Z6VTF1b2l+R3pBZEEhIyp5eVhiZFEvaV53UF4uMj9Tal06UkclJHAxYUMxbDopWzJBZGlRWkFLOy53ZGtMTyYvYllMdFgiOVRaKXR5S0FrLFQoT2tNV2FX''@;'; put 'put ''TDBjRHsvX1F4L2IifjY5PXQ4TjRnR1lTIi5hU0wzOVYqUl98OTorVEVBR0hSLlMpPVcpPUo6WWo0eE0rYCVhaUB6fENIYC89fCkpIVheY1AkZ0ZbUlM/PzZ7cUs+KCw0UTdCb25WMyooUjl+LEwzYiprKz8hZGlVUSg1T3c4M0NAclgmPHhWbElrUl1mU2ppfn5KVWBbeHkqYX41a0VPYXkzQy9L''@;'; put 'put ''IWIrPTlFVD1PPHwoWjF2M3BmL2J4XWdkVDZhKFEmdzh4Nn5DTXZNNGhUQWNUVm5udHlnQ3NabnRKTTkxQSZIOjc5Vzo/SGNyXzg9ZShJSzchTFEmIXFSZ0BaKV0rXzZvP1khVXUyNnkyVTEvZz07YjZGNXRCbEw6dC8yQlJjNyVdN08wYHdnI2J+fiFGP2UrUDw/Y3BHd0dfR1NzPENGLlNVKV8z''@;'; put 'put ''cldzXmw2OCY4QUpwczY3IzBYUlBaemdycFtBbktZRC5ZcXw7WXQ8aGMyOU0rL3lUXXxKP0F6Rjd3TDkvQnFVWT1tQl56bSlrXnl8YFVAQC8mZzcvQHQrRTZJZz8pVml3VksheFBxIihvc3RuPDtTaWh0Ql58UkNUd0dKPF1VclNtVENOPS8xfCpLVF8qWF8xbDRvfHY5Q3krRUx2ZDwidWVdRmx2''@;'; put 'put ''MDhkZDx4ejtmSWN4d258NUFnLGsqTFsoakhUa3dAVXBoRnlpNU49eDFHSmJjNDdYejR1czhpJlRvMnIuIV9qMzYhSnk1NSh6UGxeJi9Sc0chTG0vem96ekhtdnAsWFZyW1s+anM9MnIxY1Uha0g7TGowRXNueChEWU48YUsqV30+eUNabSR0RHdHUHlxPFdHKCRWMk5KRiVrcjpfUnQiJnZveH08''@;'; put 'put ''dVVsaCtQbDk3Yy8pamVqSU5OT3lSNTpfen0jMDV5O3dTL2R4TlNLMDpHajdreiMhdCs/QEE3ODQqJGloT1tZSD0kVEolTWY7b01rWkl3SGQ+MVgobyZHJjRvYj4heSRfXzw+cCNQTVE5L3Zabz9Wfik6OiUwUnY4dDgxO2g1TzR0cEk5UC54W2RXa0hMdG4pX0RBc0JVTkJmOV5tcyFRYHo9QzJD''@;'; put 'put ''MGVsfC4jOzY7eEZoLFtlan51XjMpWFJbOnxCJnpwcSErPWw/NDF9UTRNT0omMkRzZStrbFgzci9PPk50YUt2RTQjPH1HYXpIQVl4IWpIUkFIQlU6MlYxJFd+YG9dOS5qcCsibVFCeCYjR0NSdkhlfFpobnp6KGxlJVIxfTpUUC88aXorODw7e3ZBaV9jaHUlem1pZTdjPXQ0JnczXWhVelNhRGtG''@;'; put 'put ''V0lEVkJONFNoeyRwUUV2Ims6bEk3fmdIRHQzfHpmN0BjIXF8V2NxejklJVlYT0czRVlVaUpzNGU0ImgrbSVELFF1czY4WUt4OX1JSW1oMGg0T0I7NjhKMkRgVnx+Ul15KypqfHJ7VF1aRF1aVHAuS05GLGJ3eVd9PXU6Uz41VEN5O2pPKEpfOGI5MzB5KjBNTz5YK313bnJIUGFrU2A3U006KDNJ''@;'; put 'put ''KmJtK15uWiNeV0o8W2RoKGZzIjNZdTYhMCQzOEtxTEBmYSRTI0Z1eGB6fjMlIUhISUZES1EzKCp7PE8ufnooRyNhb3pCcHNeIjkzXixfW3JoZFsuJD5sdXZ0OClKT1NUX0EoIVkudC9FbnpHKmtXPyRDbmMkMUFZUXclO30yWFY9Vj4pYDhbM3BpJntjLF12ZzlJIz85S003ZTFdY3ckXnhOZkMx''@;'; put 'put ''MC90KHUpLCtRQC9GU2hxc0lnO2YzQUxkWUNedmExVlFwOlFed2FJYmAqRX4lOCEmMnZHeFhIcVhDX0cwNVVFYDN+REwzWFJWc3BRKnopZGMlQkBzSEopOEVoMkFbLDRbJk17cyRuPEJEWi5IWkYzfiZPSDpCdzo9VHo1JUlBdCw3cE4xNVNefSR9JiIoQT4uVGQqKHN4PUhIcnZHXmI+ZElUWzpJ''@;'; put 'put ''XUdbLzFDLlMsdlpqezEyRG93K21PbH1DfS4kMFkvJlddSHs0JiglTHRudj5QblhrRFtATEtkSS5qXUNjRzs1WStNUXhXYGx7MlI9VWtgPXskUSJEOHR0eVVwKXYweFBNZjYoczt1d3w9WiRVL2RhL2dBTzUvKz1EfGc4WSUpOiJYO21SXzd2RW1ofGYzdUc1QHEmYD0zMDFdaXNBczJGUFFFe3Fv''@;'; put 'put ''LzZnLEIuZz56UFFpXm9WYDY3VHh3LGBUUU5YSXl9QiFvfEZbMFJkdmtYI0s1Wl1VQSozaWopNTVxPDVFVFF7Oj96WXh3bz5jKDhyMnElMCtqTiRCPk9pMXxbeX5ofj1nWChjWG04MHdiSkdWZzxoZk8qJiNkcVg6aWJMIyxDWUpePEl2QUo3Nl1jQkZjV0dgTm4xU3QoZChjdDVvc20rQzZYVF1S''@;'; put 'put ''WzA1TzFELGpOdEs7KFNoXnpiVVhObl5pbXUrJVFXd2xqbz5OR1IhUCViU0ZqfTRmbWhbcTR8Xn06QVZENToqdFh7P2p3XSw9LEpdUC5uVDxZWT9zaUoqTTErQExbMis/ajs6X21YUn4pSytnRFM2PWpzWUgofEFCMCl6djtdK3AueC91TCUiY2A5SWpMaiFaa0xSXnhOaVMwR0QlaHA5XTRkJWsz''@;'; put 'put ''bjdoTUMmQ3EwdHRqWypkfWphOTZNWVhNeT4lWSZMISRTejxrWDVEZC54XT1yUUQka0chNmlTRGMwaGJIcV18QER5V1N6OUZAOFF7USldOl0+THUiZzFWNTQ1YHRWRTNkdjsuMnFQRXpzMXdgPnowQCNiW1VeMyklfTddVjV3JltGIk1Qe3RvbktAQEA4Njp6fEplW19yUn5OezpRfjpRRjtNUDRH''@;'; put 'put ''bW83K1o3YVp+KEtJYGAzITBaNmB8JSlkQlA3IS8uRnlBZnRCb21nKEpGWGxHUT9ERExaPVosdmZ1On5bOzZ+NlM0NFlwdloqPy5Lak1QXjV6VTQ0eV9Fcnk2Zl57PTNIdT9sT1NoKjYze3RDcSY0bzsrOjBQNnwxSyZwXS9HJD8pWHo4aDFnLGkvKCgjNzoxXiRXMzEkRiVjO2JUYCZDdnZ8TD19''@;'; put 'put ''VDR3dT9LPD9heDs4WDVORE0+M2V7OG43aiMmdyFBeChpM01aT0h+Rl5GJVcwe2FrOD56XyRsdzckOVpfIlorVEBSKGZ0WWkocGg2R1Ahb19sR1VtcHUyL3Y0JWYwXVFkSVZudz1GP2luKytmfjhVRD50djIuazhXV0lFJVgyYlFRVXQjaC50WVt4eVo4SXVxR3pXdyI9MVFYUVNfSk90RlpGdFs5''@;'; put 'put ''QjBze14wQXZ8WHwkNH5makVxRDJ9QG9IMDJfVXk+NDloL0RPJVE4JkdLel16UylxXlk+Izc2U3dXSkoxUipSZ09eMyR3aXNuTl0kbkl2Qnc1eip0S0FdW0VuZzh2ZXFOIU5uMVQrR3kiOXsiRW5VRDlXUz4yb095eW8jO2EqM3l8a1VoPlIzb1o5U0NIL0Jfd0p1PmokMyRudihZYVp9MSJOVVVD''@;'; put 'put ''ZWVzZihFWlpeRm5GK0orZXteQ0JZay9WRiF6K0dPQ05kMFMxPCtIWj91Mj0xJHJ0NHFJJWFEWT5jPnFBZ2ZIcFFybV1ZNm1xY0Q6X1QhI09nbmNDW35xVX5oWF8/eCtIaVZCe052ND9MSm58Y1kvS0R8WE1pKWsqMShYal1Re0AuTUYydTl9Y2haJCtoTyxiZDpyb1hyOyVlbHA3Vy9jQ3x5LnUm''@;'; put 'put ''PDh7MX0wamh6ai5NZW9scXhdeV8ibUR1Uj14YzJUN2w6TDZuUllWUHFPUFpBYUppN15iMHs+STc2a3xWOEJyazleKUZtWW1yaHdVIVRHXltgWCFyTi9jSzRVRWAlayZhQz9MdzN8RURQMEJkYEZFfUNgUzpVZHRdLjgjYlh7fS9sYjxQQlMzJUxWQU4hOE92MUo8VSolRChHb2VGXjtzZT5bKTJK''@;'; put 'put ''MzB4c2JwPUNNVStzZE5gVDAkcn5belQxKWZnfHpCLG5NS0JMKCQqOTRDalN2eCk8ZClWbFVSKCRCWCRxUFYoTi9yLk04Vl5GMHYkOmZKVSk2cVMifi5xcztgZlc7WE8wIVYzeEZ+S3NZXnhUYnUjKiFJOzB1JHBqLFIlZ2E9KGllRFooI0sxKFBIPERqcTJTcEBjTTlPRFZ8SWVhQDpRRClkOys1''@;'; put 'put ''OGJkNV5SNCh3VlJCY0tELjEwSTlVd1Q5PipHZy5hYTloPS9BYjpKJUQ4Z2dkP3o0TWtgL2dOKVV5MS40Q3d7WG9XP101JVB2K0UoODw6eVZ0QWN4TigvU3BoMjw5PGB0eChpY3F0XlIsfWQxRV80TFhFS0dGOSE0Z3R1QUZyO1N0cWxTRipgSnM3d0V0M01IIzBlM35wdiNAe29BO3tlakJsNVs/''@;'; put 'put ''ODFPWEkyZ3I8YnNrYGYlUVJ+Rj12cC5XJVcoaUU7ST1JTX1PWiI8PGNnZ3hGPHBLPmxkMzJYUjdRcC9JY0dgfF5XaEV6QCg1Wi5NL3w8VCxuZXZZW2c6d3cpaXFQMCM3NCovT2xTd1lYNmx7TmA9d1ldPn5Ie0opXy52TCtXI2pUelJgezRtMjhnWDlqeHI/dTRKJnNFW09IZ2JrVExudzEmWm1C''@;'; put 'put ''WF9AfXhDdTZAZ1UxdVVBPUVhP3t6fmNIVGF5YVYlX2JnT0lhX1FSUiVKSHcmMjQ+alU7eDUzL2FHaFtabl9+WWl+PjQiPkgySHFAOi9lYHZgSUg+UF9zZDJHMmpiYSZsJmNOTnFLVGlbcigySU5JZDRDZURDXzw4NndbUDZSR0UiLntgM3k7Rm11L0pdMk1NcklRVz1PKX1dVjJpXzFfVyl8dmNZ''@;'; put 'put ''L24vKXA7M1huRF1PQmtFSlAyVHVkZTY0QE9eeVE3OmA8Nz9gKDd0aF5yJkkmR0tmV0pOVDdPREFaVDxRKj9HRUtdTjhTPHp1SU4oKmNzbn1MQEpmQDwhWC9VYXlITk8iNDExeSNHMkROPmsrZkdAYVFDTVdpdUcwOS5DYTFYe29ieiNMS1gwSFlXTXB0LF8wRmg/PlowWkQrKzBQKG9WVipqT1d5''@;'; put 'put ''WC5LXnQzajxgcipCP2lJdTZJI1lrYnk9RXJ0biNpNUpbYTAwV3pVKEQpeWtTZ3MkWVgyYHAuUFM5bEU9UDdhcjM/c2BfeWElUUxPcjUkY2JNPD5wOWd3Z0xALzNDfDdlc1EiSkRXOm46emhqeD5XdT9zLCplRnE6NmovfXI3RyZ5V1g5SyRNaXNrdi94NCxheCs6PmZbRFtbfXQmbntDIihxbFl0''@;'; put 'put ''eEdpRk9RVXd1V3REUDYmXytIezpVZFlCYGNqXmRQNVl3JkNNYSpiQzFlNFlWfXEuJUF0XzVWZWF3e2kuS14peE1NPF15MTVyb3xITltZRWZgQlZXdHw/fipeektze2BPWHNOTyUmOEhmL0ZMfEtnZ1VKR1dpZFdCYklKYzMyU0tAVH1hUXxgJj1LaypbS1dAOFdtNnhKbShQNDN1NENjRiVMc3dF''@;'; put 'put ''SWFtUXt1aU5aQmJ0dllJWmxfQGE6TlVTUyw8N2tBS1E7WV9GJS46blVadWQifVJfZjAxVWNiUHV5V24/YnF2JmxzUlRaLDAqc0tUOjNLWForWVcoRFozNHEzP1htPUcwM1AmUmxhQXcuYmRRV0hsOFlLTzdDdVcodjBKNWJ+aFV9L0BUIXFoOkhDO1cjakBSPVhNND1MdUxBYChgJFAsTHB6fTJF''@;'; put 'put ''KFdbSD14blBtT0g4OWdbczIkLyR4SnpiM2NlcFJpNWxHUVV+LG1yI3FaTyVaUGgyMn4zWTh4KXpRKXAofDlWVnA4Sjl8YkZ3ZnFRbF9Kby8kSUc2WDAheDIxaHp+T3osRlBaX11mL3F3XlIsflhyTCxSKTU2Zn5MX3RNIiwpUDRSYSRvfnFOY1VZUz1TT0tfUkNGNGxlUlRKM0B3cHcwQGp5Ii91''@;'; put 'put ''fSlkSz5eSy4uRzQ9PXdMdik3P3BUdkxDXW5KNVI2VUVgP3I9OXE7dlNQQS50YShHQz16RWQuS3B9YjQ2TGprQ2w3V11aeHRiRnFeKixQPShkTXElJFNiJHxDflJNe096SCpKQnthZk0pZyxPZD8+YkFkKHhQQWRxP3wiaGtAVD5BcVo6P2oybEJyOTxMalNVemNncElfdigsI093b1R9fkA0OGsh''@;'; put 'put ''alplOyVaUm5GSSlbLy5JQj1OWWYjND9+O3oofVMlfVMpdEskLCJge0BJd1YhNT9gVl1vQ0tPOT1pMnsyLGRWTSZ5UlZ5YHtYdncmSTM/czsza2xZS0I+WFlnRixCKUpge3FYQnQ6Vm5kaD1EM200PUlrY2ZmL2hXUUV+PCZVaEd9REZlZDhsLjQ2cUlYJV4uSWY4fX44RS8xZihSJFsrOi5OekJh''@;'; put 'put ''aFM+OXFqTnQ4YCg7e21oaXNjI18oU3tAfU4+TUBje2dCPkErPyU7UmgqI2YjTzN7eiFdJkIySnQ0dF8jL3w2and4Q0dIdSUsJSpsflZRPjBzSTY4ZlJENClmMlZhRWAvV351KXVCcGlfUCowaUZjIXZncUJQMnNfQEZlNzpmdntzOCpoJGYkLG5mY2Zrejx0VnZ9cj9SNkA/NiJZOEhnMH5uMi4k''@;'; put 'put ''aEdGY3A3LjRReEBAKV47IjZ8bW5qLC4vI3ZeX3AxbS4wdz9yJm1nKEpBRTJiblRRNzM4LDVxcD8+UVMlSF5TNkd8NE4vbyNeKX5nR21dKnhkeDRVWlYmUDBSa1gvKygiSVMqRkBQSTdNNz17OFkvejFCQzB3KTAhc013K3F5fTNDfDZJQDZML2kxS3NldzFFfmAsaXZQLjo+YkhKIyhmXygqKCQh''@;'; put 'put ''ZGB6V0AqbXAyRztPTnolVD1lRkhdY0pvclVudXkpUm88N3xPRFNMUCIpfFp8PU94UERPNiM5MjVwSEdfKmE8e0JyLllJdnpJbVZyUCI9c2FQWnJ8X0A/UmlnMEkoLF8rZmlzQ3U+SmFhRHhYLl5FU3o1OTRkPiY1eCEkN3MwaGs4fnxEUU9eJD1TWChHNFgvUy5Hc3dVVVs4S2NSalJKTllFPzV2''@;'; put 'put ''b0ZRZyFSQSN+fH4jZ0FZa2JONjBRN09eWz1bY152OTNvXSkhd3M1MTlXMH5ie3VMekRGIWx4T31UQWc2X2FVQURIQDM9IkViUkJUI0M2OEl3Jn0oUiV0KGRsIiNCT0dUR0ROQi46LmNpTSxBdkVlbzFmIndOKllBSzE9S0A/KiJoNU5zaUw/eFZaendSbkg1fFdjRm90PzVbOkpVeF59akxfKGdf''@;'; put 'put ''dUZJN2pSTXQzRlVJfC43NDoqKSNMbiF3VThebGl5cyE2IXtRIUo/RyY8VnQlbHYuTWs0MWV3elJjWmBNQVBYLClVUDhZPDgjPmBLNEtIJD1FKngiQjU9MTY2Mm8vdXBmaTxhIjN2ViwmZk58WjdxZCQoRzQ7ZTFDX2lvRnk5TSYiKHtAZzAxWGdCQm1rRnRySUtiU0owPW1QNkAlcHw6LkIlNXo4''@;'; put 'put ''IXQwayRGcyJke1omMjNaKkdbU14qRm0rQkg3TFRaXTdiUmIod0w3bnsiXWBqcnV3UX0qSkR6QVhmfktgKSJ5VX0iNVJaYS49aFc1djBWbntCcjxfcVg9b2VkfGY1MkpdWiIvKndTQFo4KiNie0tkJXt0T1h6fCU1Sz8oIyE4bXxVIXc8QFVWSmksO0smOn1gVlpJSGxJRl4iVDBjO2l2OkUuUmJB''@;'; put 'put ''KnRQI1Y5a3NwZilGRk9kT2pqNmxHczVKcU8oSW1EYXRvQilWKyh0fig0YEtOSjtnZERnfTt2d0BEemRLWnFWQDJPISNEUl1pR0xwe3N0K00zfnNTalYma0RvZT0xQm8pT2VHR1BfcyJbYjMsc3xQYVhtVHx0RmBJYGxXUzAwITM+QyRuNmQqV1tHVyJ9fn5rXnxpU3ptZW1GIyNbYzhobzhgQXdg''@;'; put 'put ''a2hfN0BmSW03YDxtJDNwfW03WzNedj13ZXckcHVMS0M+UjFGLyFqPzB9WDxFLyhlSlVEKSJTIWMiIzR4VHJYTzpRT1spTTxKYjQuVCQkJG1yPExqVWhOWUpXdkRWbHIjLztTM3F8WGJRMEEzXTAveFhpLHFCVS5JSVhmM0VxPkQvdXBdWCkpITApN30xJltJXjNlN0xXUmNHU3IrYyNKLnE0ZH41''@;'; put 'put ''SlBwbig0M0szUj06VHBGNkVFYCheKDIsRnxYZFgvKkJUZSheMGVvKn12MFQ1dmh0O3paSDBFWU5jQmdfdkV2PCg6bi5JRzsoVF04TU8rN2VMWnAyYkdFJlo3emgiRz40KSRgXVdESUhaN0tOejg2c1dXLGBDLk5QTjdhQldKZDprS297RGF+P2AhN0hPbzwreDZjcyVXIlAxZ0R+O05sMSY8Lndw''@;'; put 'put ''N1suUUNycG48aGw/JXxmR3NjP3JaJjZhL2J1YCVDXWhvRylnanJLdWZAXn0hfDF9NmxIV3JfamNgXXh7Zi5yZ1JZM1A8VipzdmpdYTgkb0t3JW9IfD87IWRMXmpDZyg9VVFfO2lVfE1WNVVjKDBdcT9JelUpKmk0QnFhbD85ZTojSnB+RSIqR18yZig7RFF4NHlYMEw6NzFLZSNSb2N6dnNOc3g3''@;'; put 'put ''LlR4PnFmK1hIIWN6dTo4c0tFenQmOl89SkllbyRGIlVqMEkpTFgiblcjJk5SZEtgWiFfe1J8REF6KmAlbHNmO0RlMGhlTWdHdU96cjt5U0VhWVBfPmc3SnV6U2Y9dUo+TlQ6OT16JGdNNnYkT307PnNhTXVxZ31qQSxVKUlBaGIhTlp1aGxRWHlVXyVlSzdRMTx6Ryg7X0wxTHAjdzIsWlIjVE1B''@;'; put 'put ''SCxTInxvUSwvZiN1PEx9XTJUMzBOc3RwXl53ZnplWjkzSSM9W3R9Jio/TUtkeSYsXyshPHloLEF0fnZ2PTUscm53XVo8Vm14W01YJUxffStTNmZwT3dPWjxANWVQbENZXmpCIXpBVHd1LHRgUnp4QiRmUzVJZEc3dn5xfE1NKHBTR2tkSSQoVHZ4O0NKRiZTKT8mW3xgaEk5L0t6fVh+O1NGYVs4''@;'; put 'put ''ejMhMmkuZnhSOG5SKjB+TWxkQEgmRmRKMCVsY0skd3p7ejhgWTZiYSlFOWkjQGp0W2VHX09OdGd1NSh8dzAiWCNeZzdHPGYoXmI+KGFXTS9kWVdPS192NDU9dy9LVUNdRWsvWGI9Nl9xWTZRQUI3biZsLG4jYy5xZG0qdyNsJjt+WEw7a1pFNUE6ZWc0MExNdlohd3tlUkA8MjlgVD00TWIsQnw2''@;'; put 'put ''SmxeSSgwOTpXWHhSZXBOJGsqdW9ZWT1UOm5AYjQuQkJ7fCJeTlprOV42eXRWJGZqVSU+ey5KMzFkTFZoSXFjZkNEfGtCJEJpKiphTU9zY1FwOjF6JUVuaFQrazJZfnVUXVlIUChbSlpoQ2YjLmFwU0hRN2BxSmdkMGQ9I0dEOHwofE1SZUxSNS5ZMUswYiFFOTZOM3E0QFU3ZXZzbVJAQlNSJCJR''@;'; put 'put ''VTxGZGc5YC9UQXpldiE0R3hkcDpbQjsxJENGSEpSM1Y3RHlTVHIiOFB6IU92OnZ4cDQrU2ZNVyghWndAKT8kVGJ3b2FvXVshVCZRbD0hMEVhRUxycDcwKzZLSzYoMVRwQSx1cXJSM0NEVT1SdG1vMGckOCU4UXBVe2koe2U3K21TcTVkdyZXK3t2UVZPKixMJHI9T0t0QGxjRDFbKmtPJDV5PSo5''@;'; put 'put ''OlRqXjZPV09gazs+PkpxQHBOJV1gfSMjOjtuZT86KEhqRHtHL3hMR15+dDghJE1DIntjJmI8ZkNMSkB3UzIpTUMwcWIoUnV5Z3JbOStBdUg4eCovKTpWQS4zOWJHZVI3LzAlaUsmcmZ2Nkh1fCNhbkRsaGwkUi57d0k9NHI3LzFnYnQmNGwhS1ZVLzssJTs4dnhMOWU8JXBuOD13WmtoOTB6KnE1''@;'; put 'put ''UHxVfnhBSHRWfnwyQSRpXW9vSl4pW3V8QShFXiNCQl4ydEhGcGZZJjhwbCNDQFBbJl9QVyg9cUZ0dF8+JkchTD9ESnR9WihoYXoxMjFCVkRaVTgob0ZAfVpnUS9FSmRPVmhjXWo6OWF2QjMkTygqJjlbNSFXWFhxTVEkIngyL0IkKyV2SElPeUJvWW5vSDJuREVocFRoSnRjfTlGTHY6S2RjXSFA''@;'; put 'put ''Q2ZgJkU1KjA7YDUpJkZsbm1dRiMlImIxbDkjZ0x5S2ZtYGlnTkM2bDByQXJZc3R1VyY7WExTWnw0OlMyJDpoUk1MVGsyTntjQmVGLFZ9SUsxb250aW5eVUpLLE4pJi8xRm51ayY3blhsPV5KZUoyfHJvLyIkUSE1Qj9IYnF+UztwO1pJNT8zNT16cV5XfTJfM0UxVFFNN00vLH0vOUtEMSMoTy5P''@;'; put 'put ''PHh1TVA3T3lrX0leTjovMD5MeUgkNzdXajgpLyl6c0sjM2x7PU9LKzZaYVtpfDJHaWhCUVdHd2l2R0gzKHBPSmszRzw/MDl9QGdCITpnKkp9KXdEOUZuUFdpIW42W3tWZG1WT2xKWmxrM1ZmdWc8MmBvfCNmY21xY2xOMz0iUjNeR1kjRyFMWlRBQFd4KGRMM2ZyV25aUkhMVmY1SUR+Zy8ySVp5''@;'; put 'put ''Ii5KPD40bUJCMihHUDUqd2EmNV19Qm52MEFyKTpSZUZWVTdvcW8+YT55XXh5O1VpYCs2WW5ebmt5KyxMOXZoODUpQnV7Vmp+IWpJb0wqI21aSitQQnw/KkZxRTNmLnpYbEZudHV9Jn0pY11fTC9oIjVEVVdtUkczWUB5aH5TR0AleCtUY1YhNzJNXW99ZVsrVl08TWJBVTErPn40JlVSPVVNUmZr''@;'; put 'put ''Qylnd0s7KUYrfXkqNXlkYDJneTRHXSgvOGZIMlQucF5bQD0+b1BsbDd3OXAsPkozNjB5M11STD9AaTpbcyJDVk0qcFooLzxYa1JtUmJRSWtdPGclMk95XSxlNWBtX0w/d0JxRS80ZEhMNysufG1pfTlSbUJZJHxOVHN5JGNeblpzTEt+T1J+bVpORWFlW3pZJlNCJmI4UEhGVSpgKklsVUI1am5i''@;'; put 'put ''V3EiZigqP1tHSGhsKyFCNGpVNTB7SylvVSRBbjNScl9dUVZNVCtWdF5TX0J4cC8+cSVeSFk7bDF2PUd7IisxL1tDeW0mPiVIcjBNTUpsX3NHK1RtLyYxQEYjVFl4UFIxM2taPiZ4ZD4ydDszWSR7OTpMYHxVIyFKL215QyxAXXN6cjQ2fWIqNkBSby8mRzFeaWgqTE5MZX5+d0lKVjcyd0JSKW1P''@;'; put 'put ''eD9jWTxfYSswZDZYOkdyVUU9enBKfUAyQG1RNFAsdWRaaTlGe2dHRGg6PUo8WUZxbTxfODxlZz5JRDklVVl+TEBEcF90ZldmeUFRP1cpQiYhajl3THx8OiFIK2FERTVpLiRLcTA1RHcjZyQ4KjovSGhdXUVAaCVAT2lLeFRqTU5vb31zWkJiK1ttfEVSNUt3dkBASDxPKWNZT3JWZE1uMVZtViVK''@;'; put 'put ''VSZxIlhYfmN6OzdxI2NBWSxBViE9Yz9lcWc1UXI0KVMhcUU9Jjo7a2FpZDhCLCRVXlEzKnAlbHBIJlo3ODx+OSVoVnh3MHV4aUFVRUR+cW8xPDlbanV6JG1IK3xXUmBdNVcmUDU0QGRsIW5keTJNKUN4PENvTXVyXXdxfTZYfjNCfCRpKWR3UFBHcyMqYzpJQyRtJE5GO3U7bmhKKiw2bUU3KDA6''@;'; put 'put ''LH4mSC81KCY2QVJrMHBnYF4/ekNJNTl9eiFjblU/QyZLcHRiVFJ8QiQoXk17Ql5PbVg/JVJ9QExTUWRDe0tiKV5SMyVrK31yKWt1RnwvJTRsTFJJTzhMOEAiNz1AazNQOyhxO0BdQ04pc3gmVzlnQy5DKEJyRG5oVXcjNmkqX1g1aCo8L1t4WyUsT31eI1doZURgP3ckdGwkXy9PclgmNnovUDNb''@;'; put 'put ''QEIxVl07XlkhQ3pHNS82bykxKUFOdTs1O0BkZk5+O2BlVkkzN0REa2xuaEc6b31saDhqZyxSKE5acjlZZEpPRkJnVkY/JjwpRjtLQ15oMTV5LzFXNDtDTUplIj18QXs7PGdpT2k7L0U2S25fXyVGNUhmJk9afHQucyQhU1FiUXRKWV03MHc1Wkc8Zl0kO1ZkWEs0dWlfJG1tRy9NMW0iZmRRYj8u''@;'; put 'put ''KHxrVmkhYmhpamkocThIPF9bSmpbOFoiNTdAZXp8M04mcGZye0JhRG94UitUMTddIU0saURsdW9nMF0/N3RgNnY2L25QL31CYGdSOT1GaVdadSR0Yl8lQClWSUJiNi9PTCx2UHs9OjN7R0Y7flFSejxmP09fUztZQVVMUmk0NSgjMHwrTFpNIWZHcVZGdHxfYDZbPXxaTnA6PyQ5VG9WWFUvL1Zz''@;'; put 'put ''e2J3aWxGXU1RIlFXZVFPZkRuS1t7KXBldjkmP2lAZUVZUVM9RCsiWjBUKE0lWm4oZ21NbmpiP2pod2JoQiVTQ1VHNkFvPD9ibXUoQlAoKGEydERYT0xzfW5geWdFOEFsX0h0PFFpSX1HYkA3UlN9UCQlMSFGMWRZOCRsREdVS0U2bXVVLzd3ZGlzdnYmVU1Qa3k2fStqSk1YLFMkOXlCRC5ZJGAp''@;'; put 'put ''KCgoYWMwYWlUXXlnJjR8Xz9TPWd6R1dAUXR5bkx6Nk5zP3dzYFcpcTpNU1owZHMjMF9YKS9HKmMoUCVvdmAjdUg/NXdmdnhWV34xdm80b3lqJEQraih9e1FxJCFQcW8yY35WYU9xRFMhbDxvdUQxSy5QTEhBQyQyYzl9STxrITdLe1hVY3NGUS9EZXxBO3ZKIi9dPikxbWxlMT0seTtXdHwxR2FK''@;'; put 'put ''RiJ7VHpOOHRTMlgjXV5yWnwoZV98YjlBRHZsMXpiO0E/OSZuMjtTUGFDKDJ0SDx1eEQ3fGBzRU9CIXFBNz5mQE0sPU9uO3I6Q351YEZAQ1pqczdSWy9oSjhEeDRHdkJSN2w/T3EiKVZWOFlWS05hLyN3PEhXXjFuSH5MSCRiRTxdSU1YY21gO1NzMzBsOExLZVJ1RG4wWG5dclA0QWAubXxWQzVY''@;'; put 'put ''VkREUVl+QU9dREc3VyZ5bU1hPDMlN0R1akY2UHMpY31kbUc3SC8xLlFbZVd9WXZtLnJYZE5tUXt2bH4zJE14OTMqe2s4YilzOy8+b1RfUzs2PF5ZMVZPM155UDdgdkIoMSpqSGVdZ3ZhPyEvWCJ+KnRERll2I05xRHxWL1FafDdAOlNOXTw2WlpaaVl+eCNPZHciSj4/Zy5qIytPYCt7Vy9BVkxi''@;'; put 'put ''OyZfRGcoK3J4bUM5LHNnWi9nZT9Fdy9Rc2ZOTGhDJFR3OD4uVDRVKmxTPXNNeyRZdUl9W3gwSV0xQkloOTwkMGlDYFBqJEozMlFCajJxNkBeUUxIQUZsUnslKWVabHYmVDN3Uk85enslUGYmY1BKWnx3JV5OM088d3F1Q1Q3WH03eUBrUlhDO1NKZGpjOGU+I3RXMFRiWDhaPkwrY3dQOWNFLDVY''@;'; put 'put ''X0tfbGNObz1VfEApX35kRW1uIk1xXShedD8lIWYlSjYma1g0YTV7KU5tP3p8dEpyNkZKbklBQkg8R20pVkk+Sit6IWs/XVpLYWZbZFE2WF1uZzZafHYmLEk8Nj9Ac15VeXR7YGdsa1t4SVEoYj9kSGcrP0w+MXd3P3dtYzZCKT5KRkZCOWlyWVZiejN4TmsrcGVyMTFaRlRmQWBbaWQwbUZUcDcs''@;'; put 'put ''OGg9X1ExWC9IbXhoTkB9byVVfW9zWlBvWD1CPUJ2RD5lMTkqTFh4L3IzMCUrYS94NipvRXN6WVowOT83Xy9wZjEqZXRianw1KEJNXyhZT1N0WGckKFdMO2cvbnRNclp0JSg4YVYpLmBIKGd0IzB0d2NSYjpEUUdVOV4xQWV4KG5TQEc/ekhBIiErfEVicElGX3pGP1c3IWtDQF9KMG0kIVRCcWp+''@;'; put 'put ''bzpsPHA7RkA7bmVzRyNXelEvNGdxfjtjdCI0PF1AYVV+bjFVSHIkaT57SHdeW3p7LGVaRXw/QUlIVUMrQ1N5U0BCd1BSfjc3MFJgQ119QVFDYDlSYjEmVlJ5WFcmSlZ6VXU4VFEyNDd+aSIsd21CfmlgfT5NTDlwck88emVXL1U6ZmRlfnJOWypKMTF3VFptPWYjVzRZNiFQUlspMElPNTUpOTol''@;'; put 'put ''X01aNWd+WWFNaEJjdXw9QlApV3dQKVJyTltJVXAqb2RuYC81ZG8uPCZBNyN9bCprSFpML11lSik1ZzxwIV9MWlVXWjp0ajZdaFIkSTJibE19OGhpdD8lMzFmQWpBKld6anRfdjd0SGpsak1kJXNVV0dmQk8kaXFKQkIqdyYyQSp8TkM/NF1YezZeL3FFa1RJR3JgKVc0fj5YaGRhVmIsX3RvcGBD''@;'; put 'put ''RnUhcVI1W1p2UmMwb0FSKGMpMWJXSH09I1hVWEJsUndjIWYrS0szKCEmMjh2SyRGbWF4YTpfNUFzO0BnaCNERjtWTkZGYn44Q3Q9SUYkfmswcih2V0peTGh5NFFfPjZQeUdFRjdeJGR6Q1FwVkNSenUpayEyT28lSjs+MChvcjYlOmpicnplQ352L05bTC5QQjl1T0B8UzNZd093ZyZxLCJEV2sw''@;'; put 'put ''ZSNkaFZ4ejl9XV1MTWlyUnRCanhyXV93KSpsajsjPGpXJTwmZVBtfkQoZl5SZk4/MTJwcT1gLy5ZbUc0R0cuUGxxcn51K0NaUn5KL1phP0JTS1hhK0F2TSs4aTEscSo5TGs2MnQzMSolT0hjbmlNKF1CckU4JGhLdkdEQnY+VkxJTzojYTs/dXEsZn1MdXFKNkh2cExGSnZ5MVpgfjgueHtHZnsw''@;'; put 'put ''JTAhPkN8JVtFOjwuPyMhMmo0LkNiXiM0WCwoVT0sfltEM21JRGNEUHdLOmN6TDI7eTFeRSlfSWxJcTFHRi9YMChlfTVSUn1SKGEzUTUrYihyVVFwV2R8Km1maXV2UDgsPDNANCZTVSloW35vQ0c/UiI/RiZAKEIxczFIZ3lPcj5zJFZPZzA6VTZUR1cxdik4U0g6SUNrRlVMVVYzLiRJX2QrMDpx''@;'; put 'put ''WCxudGZaPjdZbyUvLHJvZCVFNVdwMUQwPTF6ejlkUlYuenc2REM6YlFSPGZgNE58ZTNlMCIpTmUuN1dyQnxHUWRpSkoodXNtYGBpdTFzUEF9P3B3aEtZO3Y4KigvVXVQdzd0I0J5PjpLUlE/YVE5SDs/M31zTTlSekpDRmg6Q3lscE9WMVAmKzJCdUIsRH52IlpgemclNWdkTzg1Sl5fOFYlcF0p''@;'; put 'put ''PlkuISt+PDxrXWIjcTlweyg/K3dkVG1kI2VtK1VKIT9FX14jaFd4U11Rd2x5KikhYS5iWGM3Y2xJUSQ8MD1VYV5ncy9zXSY8bERsYTUpQkkrViE8JGV9IW80P0hjUTpYJHJkODZTI3tqcGdaZTQ3KlgxWV56cEV4K2V8SU5HbX4sKSRMKExLVSh0MDlQV1omJWFIZUNTZE8vWjY7b0hVRUA/NVYh''@;'; put 'put ''RE0kU2cuUSJCQ3dSOEYlJGowPTpzSUomdGUpXml0bkV4eDQ9M103WWNFXX5oT2IiW0BQeilgW1VsOV8+IkFbIWljQUVLbTV1Pj9MZHkjYjUxNDJJYW93cy8+bFhsNEB+ZCZpLiNkJGtgaCtuMjpvJDN1Z2hkVWExR1BOYiFRcklXP3lBUlcjSyp5YmV5PHduMUhXdEgjXkNSYVZ3THE7dTh0dn1S''@;'; put 'put ''Uj1xSlAoSDpyNXB0KzNHSCp6Q0IrSCtqdTA0TSopfk4hO2w+UyhnQH5bbjNNVnosKCJlTiN2VGJgKFdUNCtlfitSIXdedFpoS205XVokbVE5Qj1iXiQqJkFoVissSWpMK302QnhST0wpfCxhT0pmK2Z9QzlVbjN4bGYjL1p1V2g7UVdLWTJ6Yj5rMGE8RVpWT35CMSgsejhZRlleKj90Mj1JSl9P''@;'; put 'put ''OnEjMDwyQTNiJTZQR3xwYlgyfmVxJUV+L1UsWn1VbTFSNEkrY0xqOFdYbipAQWtwU0UuZGgwPnZlTWZTRTJVbTtIWTpXSVdLLjJUeWlYdlBHUVlHUE55aktoTSl9IT5PJSE/R3tlJDN9TGYxcFtseSFLdSNUfktgISVxM3t5O2k9Sl0/TkZZK0d1fkgsRy9SUEAwdEJGQyN0Mj9TJTZZfGRAPkFR''@;'; put 'put ''YH5fY1JWUzBNSW5XTV0zZ11nZUoweG5SdEZpIUFtRz9aRFpvUCheMWJ1WDMlYWpvflhQXkJvXTw8Ym99OSN+cjZ0ZixkIUwrJitLMkdAKUtkc1h4KzZYZSxrMillVnMzUW48UXEza2xmWlo8XnxQZz4yfE14MztKQGY5ckRKYFdrLG19cT13dj8jZ25UaXliRDY7O1dNd3AlJUpidmA/N1JbLmFS''@;'; put 'put ''Uls9akZjODYrOzlfJUQ6QWNkZSEkcTosaSp7em02Q25DZUNsT0tZQlRgfGk1a1JHa1FRb0A9ZDpKcDN5QiNzIXQ1c29hNF50TyIobjhgSnsjO0pQVkA4bSl4aE11WEpLVkhmcEU3UmRZMTp2bEcqI34rNWlOXy5yM3FPXX0/dVNtLGgyRU52JChpdEEzO29GZk1yfEdoe2hsI108OUl8XUg9ZnIh''@;'; put 'put ''K3lVdFo3IjJremVxZ3x+dkB7JGUlN2tKOmklX3MqXyo4fHd3cywhOk92QE0vREdCYTJwdHdDX3hmRUpFdzJROlVTZilETWh8elMvb31WS34jbVhLaXNIYVRXL3VeWElSbjxaY2goVl8/WSI5Jmx4RmhtaDk3b0FgMVVnJlAxMXY4KmNycjBlZyZkM1ZnTUlCW1NNdkBPME56UCFXOTs2Y0tRKj05''@;'; put 'put ''OXRSLlFgVXtXUV9kJUtyTHRtVE93USIlaCsqM3FGWE5EayJ0KDBIQSpVXTF0KUpAZCVeb28sZEZdSH51XXp3R002SHAqM3BPW0hZamEoM14mZnlpLm5EW0guVH17QGxWOGJsNG1gdjtYQVFpJkZOKmF9Kl4mPlRjZDtdYUMqdSgvdC9EQEdOfVsjaTdXYV9DV2B0fGN3dGB2Rix4TGQvTHdtKjZb''@;'; put 'put ''e0I0aTVkSXZYIXsxNTY4TWpCPyt9biFCMzhBODpeNDg5fEVfRWFmXWs7dCFsSGAucXFfOzBHd35RfXxRPkNURCtuIkN2RTBeKHAyNml1VFd3P3hsIjJaQHAuSHR0UmxSYiZyUVNLdHxlZkdtRzxLRDNFfV5ZWmZfYjg+L1pQdCtWcz5zV3I7XVlucmZBWS9VPW5IYSxFOSQhZUIzOkM1ZjZUPVt1''@;'; put 'put ''c0l0IilMbnkjcWgvYXcmcVZUblhFLHolV3xpXVpwMzBHLzd8ejI3dCt6Yy58RDtUVnI0MChWaCEmKUgkJDQoITp4MF8zWmlObk84KzBsWlV8QjVxZmEqdTQpdTRUY2w9K19RI0IzNH15STh9NHZjVVIhZ1N4aDgjd0FweUM6a3hYM105SnFpP29dWlM1ZDtEWHIuYSFdQEttSEJhSHYqJiY+MjlB''@;'; put 'put ''N1g4Rk9WVCFqRixTJHReLnptKj06ITRQdzo3OG1lV2xOY2BJfEROLmBvPnBMPDRZcTBRWH5xa0VLbyxONE1nd00saT1YS3JdSzl0RzxoZktZMGE4XWsod2gyMCUkREd1dTU3ciNQSm1GdTcjPWpyUGcpYGZvZk91RyorU10iV0o5bT9CO3twNXFDVTBoVUJIejN7Tyg9QUhkUE5Ebn0oNG5jL2Ev''@;'; put 'put ''Y1VhXlslfFQ2NjJZVltlNVBeK2YjdV1kfDAxKU5oM04xL1JxfHx5MUU+QkZCY1pfQk8iZU5pJkM0JTk1UkQpUDBASiNhP3ZkNVkvW0JfLzAsQEhlLix7fmZAKz84aixhcF9+VzFBbkxjWGRPd30vYyVBRzVaViU1R08vKSZtZU9AUTtYKGo2L0hJUj4wbmY9U2o4IStvX0xRVz8+Q3tFO3UrX1Rb''@;'; put 'put ''QGZsN09jMCgraHM3XjxFe2wmMV89Wn5VUnlOIS9mJG0zUHcpWzYzPSRmcn06OEpzXUxCVzhXZGVnd0t5eDNYKWkweDY5S1JyU2VOKFJLSis2ZkZZXU86I3pNYXUhU3VPSTEyb31lNkE9Mnx5VkshU0BvfSg3fndbSyFPQTw2NjxVQitUVCVRV0x1aFh0NntYaDxLKSQpSWROX0ZnVjY2ZyJyVXFe''@;'; put 'put ''ZVUzKUZULjZfTDtJTl9EInN+ej95Ll12KXlnb0NGTGxFIXs2QjZhYVhuOnk8ZjNzImp2W21JKEgxYlNXOi5pWG0hO2BAMEFifituS2V3JFB+eWQjNG5HUHRSamAqdTB+RUZiJjMxZ2E4dGBPK0RpT05RUGI3dSJCI2QpdSQqISZQblooTCYyZUNFdFpORnFaN152QFIvI3ZbMHZgNEQhbVZjWW44''@;'; put 'put ''bT58Q3hvLHF1dC5ScCxlIzV7Pmo1fHU7cWMvTkhbL2tMeCFjTCtmMj5zemdKOTptJXYuSDt3QyM8ZEdKPGdbfnw7aXsxTXs6ejxneENTZDtud2YlTTUpQjp3VSxKP29oOTorTmtPZU9nQmhTZF0paE82WzBoekBJM09GK0ZJK1JLPn05OER9MilDaTFbNno0JFQoaEVhVmA0XVFCTXJmTX5fJDVo''@;'; put 'put ''MmtVK3d7TE1EaSVsPG10Xy5Fc2dsWGQjSUN2X3lsQjUyR2xJcmFCLFAsdE4kVzBEdjEuYWxFVFpPNHMmQX54dFU2OWZtfGYzTC8wcV8sYFJaRHkySU8+empUen1ld2lAL0hgZE0mWDE4aFpnb3gkdztWYjswaCljanxzP1E0VVA/P1pYbl07fXAibiM3JHN7PlFMTVdML35XIlBUfXpLeGV6W1Vr''@;'; put 'put ''OCEkQDk4bC5uL21zMT4/YX1FeVdpVEkoNTQke2VvTz1ecmsjOjNFS0hdYnc3OCZwZCRvZnxdL01VY3VUb21NVXUlfU1NajxjS1NuPXBWS1tIb0YqX3FHcHNVblAlLypmbnBGOCpjYENbczRMWCkoLCF2Vlk/YT5ReUx6V0JlY1A3ZEdbd355TXFPO0o4NW9XZ0M+YUtOVVIyPj9LNDJsOl9nRyNB''@;'; put 'put ''d0o/QVQkejQsaEgjez04bERVdEZndWpCQDtTQF4zX3hsVVs0a0glMnxEY3ZDPEMkdjd+SzFidGFGd28oNX5CQzZoVTZXX0tFVkp1Q3c2QkplUU1aWF4vazZ9Vn5gK1k4KyNoV3lgYTFsNCNkdzB5Kk9RLGpKTmdZe3d2QHVRU2VkWUNkZm5GN1JLP2l4VT0rWzBuanpZbnx9YD9AUSw+JFpTTjw7''@;'; put 'put ''aEF9SyQqQFdqMkJ+T00hZUlZe3hBclFPdyVqY0Q1RGMwbSpQTVZHNHYpdk5kI1ZXJENRO0BjKU5mOkYwMGVScmRIZH5XbDpkc2xPa0dvaChwPGJZRGEoa2g0I2VRY1A+bDhCW2t0OWZTL0FeJGVLT0U0e2J0fmY9ekRoJUdPKU81UmFoKUsqQzpPIj4qM0RvPT03VHxLcT5LUltAKDR7PEtRQylN''@;'; put 'put ''ZjZtJCFZWlowTixGJlQoJCZtYXU4JVMwSVhKKXtVNldoYnlOZVIwLEc0JTQsVHBKQGVdSClae0VEIW1RemRAUz85Snp9dV0xVG9nTHp9OiJPOy4uaSxpKTI7O0x9UWI1YVg4JTJZKUpfQjNJXXVCJF1YRnhpdiw+ImlYd3JAcmdHeVpnUHRTWkt9XlRyeHVSZj11LklhZ1hmYXFLdmA2W0p1TTBR''@;'; put 'put ''PFlmV0IqVlRQLmR9aD5yfDBWWFQuXy5xNzpxZWN9U1hDbDMxczF5UE9UW1ZRNipmYmNnaFBiRlZ9fHgqSzQ6TjVTQH1+RERFfnU1TXUwT0JAWVEqRSk5OENaKD8vcTc3LktNMEs6bCped0ZPZyUuaSF1SVkwWiljMStxZ3Joblg5Qm9YPHAwTFc5NWQsd1NKYisuTHc/PUxOfDpsQi49QSR8fGBG''@;'; put 'put ''TDNzR31sWkdWZ0RsfEY3OHxTJnhAPEtGP2dfTD53RCF7XSNNOk5SVyFpPz1ZMkA1RGx5algkRllOW0ZXMllYLGhnKz10TzcyYCsxImRYeDBUUFddNTowZU4oMk1VeG1jWXBsXmN2bWd7cnpIcl5pQm9DYjMudE5LdH12bDVLO09nWVhkblcvUH40VllrNVc8Q0xNLG42PjN7LiEoV0lrfHlnfFs5''@;'; put 'put ''Qz17fF9iem5mUilkb0dVTTBpTnh4JFJOakhbZzloTlt2JiMsfU9vfGNrInN5K1NxLmo2VDxWXzA7XnYpL1R7UFpadk9FL2RqInsrZEx4W3FZR2crJURUeHJ1R3xMOCZ3QT9IaGRqKSY/KGpZOU9JUi8oLmlAZUdoNUo+fFpAVWRbZTlGOzxHMWlNJVFTRHFNXWwiMnFuPzd+LyUzKCMmXSxbQU5u''@;'; put 'put ''MjhWPC9aJWFJfHhpfVplMEByPSF3PnJCJGhTKDdJJjZNJkpYMEheQip8ISZ6WSJWS348WVsiWmI1eWpRJHZGTEdDKWN+JEJxT1hMX3YjNjIvTyk8YDc4RyFUfn5vJWB7YCw0diFaPUdTPDVBWGkqJE9dR2ZeQzc2I2B+dDBAITBtVmJ1RlF8TmNbdltQbGNJaHpaZyJUSTgjOEpleGx5IkNWbUsm''@;'; put 'put ''RGFdeS99W3IkX2t+VFB1YSosWW5FXkwjUVRnc01tTlBjWThudjMxb09zbzckaUBtMT14TEh6KVgvKldGeFBJSEolIll2Y2k4QzRafVc6JmFYREV7O0E1YU4pVFM5PG5mblg4JGx1aE1iYHprRX44dSVTfWVTPlZ3fDg9bEJqMyMxY202RH1pJTVzY2s7ZWo2aihaSElEOHE6I3lWLzV1L21vRTxl''@;'; put 'put ''LGdwIktgNldKb2AwPS9vd31dfE1bYHosSWg2MEl2L0VYWC96KUxiJitdWUAuJDdpT0pqd3Y+VlFHeGxLWjhCInAySXckZ2BLPX18QkpSUi9eYTJJWX4+ZkVddm51ZzkhdH5lIiE+L1ojIjdlNjBTK3VeVVkzKEtbX2h6QWthYVs8Nnp7WmNtZURAST9iZnkiOXA7QmFFZDJMVlBPcn1iVW9WajU+''@;'; put 'put ''PCZCZ1tKQ119X0A2XnRPTk9POztwWnsubGt8LzxCNmBAOFV3JWtgaTAvbllIZllCMlMySmNrdT9iJkVCbl1aNjptNTcpLE5SR0NkbmlFdnF7b2lRLjBzW3xIREBBRi5MfGw8LCNTQklNW2FRWSZ4bDVYTn1uZmJNPDtwQmt3WWYwcXYlJGR+RkY3L3dtZHtPX2FPRSwyfisscHRaeHY+cUxQX01n''@;'; put 'put ''cTkqY1NMJkhNOyE4Tjh+X3EybUQjaTZWN2xJQ3krQERjLmRYSm40QmdWPlcuWU1RViZnNGtEdm5DOiE9QTQvK3leMzMxPDFFb3t4e31oQnJAK2laYXImT3RDRCY2WUU2bjN9SWlFRVM4eENGRWouODVsVDp+L3NfPTJEakFpbHdLYm9bWCxefmBeNjklc19hRW9UP1JUYmt2fSkzMiVpNkZuaTlD''@;'; put 'put ''JSwzfEduYTU5ZWlKP0k/SFpVeClBUjB0d1ArQFMlUCk1eHsuIWgsfmp6JGE9R2RIaEJZJnJkSFhqTW9ob3xwaTE/dk4hb3lhbnliI2N5eFlSU2A7a0dlUmpjYyg4bWNrbWUsaG8qMVBBbSNtL21QenZNW3I0QjsjUz00cj13RUl2XnZ0YSQ/ZDp7NEYwP3pSaj4uJG5MUnohNCFxZUdzYiImTyVf''@;'; put 'put ''PGN4TXRQfj1CKX1hbmFWVTB6SjRaV0UxYyo8NWtNakx6NipSOFYqeFVwbyxzKVphNDZdUkJvT0hYQiM3JU5ScCxoN09Qe3YlSWc3PkRtZGYlS3EzdUU5ayIpUTExfnZPVDsiNEVTaDZSOVE3SUdgejV4aDh2JDRTdS5baERZL1t4bWQyZ0U8JWpJWklbI2E/WGJbPGM4XVBOISh2K0klN0JyU3I3''@;'; put 'put ''bkFuOTlQNWJ9dnRlUEsqRkZJYjlxWSt6Q2lxZzI8bmEkPFkzNUx0Z2owan5dQmtzO1ppaUZdbStQViJOakFLQXUyPENWNSQ8SCRXJl94WzVtfkFqRH4oPUY0Z0MlPGUpJm0sRW1WREg2d0F6elIsRy43QzJNc0pZWVskTnh7Z1NyRDxdeyleeUorRkB3dnVuVz9PL041bCVHQ3B7SiR7LEA8Mjl0''@;'; put 'put ''dChpKiMwQmt5blViO15WInRIYD42bCVMWDtodWlfaFciPz45YGtWK2w2bltbIU4hcSVMRE5IY2lRYSYvR3VmUT9+NWwjfXdsYURJTGY2OSs6ciR7TCNwdmRIWVdIOHd8Zz0zV0tJKE85XU07YlBTZltNRztwQz1XYH4sS3l1ZSh5IiV9dWpMYjkhVXkwYUN9Zm8sVkpjRTdPb2tQW2ZaVzNvRS5o''@;'; put 'put ''dDxWMGh5aiF9Vm42LF9SNWJ4TEcxVS9tISxyWEdHc3BbcVQzaE52dHteI1VrV0VbZ2ZrQlcrTFcwVUBGX2wje3ghP08zfWk0YHRlTGBFTyEqcmNWQkdLWDpgb3FWJTtocnBye0NRUHx1S2B1T1NCbkJiPjRhKyYjaXkkfTFFLiZGUDZpYWF4VW0pUnlhUGlmbD1CNHY8KkIvRnxMSSlLKj8sX2hE''@;'; put 'put ''KlZJYUxyUjokbFplVGRLW1VHRC9ZQS4zOHl6citEQ1U2OWVLW19lLmg/P28qWGo/Qi9hK2dnWUhpS3lvc1MyPUJoRDxdPDt6OU8yZT0zd24sZT5jSUl3JWIpKTZRXnQ7UHpCcGluP3RONFpBXSleTG5EPC5qei8kJDclUDgwWCY7eStNfnNtOjAiYyEwWGFFXy9MfDh8QFtsK0QpL3FuPXIvTEV1''@;'; put 'put ''P3VJajlCJDE8JkM/fEl9cVVfaykrWVJZOHxBVHhraC4wL1owPSkiTnYseHEkZV9bPjRZXUVpYVFaOUIham4lWlFMKWY8aiY8PGUkV0I/Z3hRKzIuP2NjJmElLi9AVHVNUWJXPlR3TnNdazZdbXJzbDVoSFd5MGJyflg+TCEjfjJTaGt7R0ZQRUl1d1BpZH5rSkhnUmRJc0t9TyZbVXJzWzRWMV1I''@;'; put 'put ''LitBfXtlMCJ9PCNUUSxoamV0KWlVKHVTQCQxTj9JYWJNOGVdUWlyP1p8I3QpOXtpVWw6ZVI9KDpPOyxmWz5AbVhiWSQ5cmgjXnpAdVBMYjc9bXpjSVYoKlQpKX5aQHZCLyxeO2t6TEBURD5rQ2hsZ2lRb3FKZW9LYiVSZUtCd2wkJT9mMDY/WzcuaiNeYkZoPSxXOyQuMmIvK0dRenxFI2dKLHM9''@;'; put 'put ''OD54TWgzX1YjeU1NYHIkO3FFNDY/SEhRUWErJUc6QTolNy9SeV82aExJPjd3Vj1lPmdTMUNNY2l+SS8rNzhXUWJkQWRrM3YlTjJtT1NDUTZUc3k7PFVya0ZWSl5LTXwoTz5CYEJwSU9POUs1bmF5fTVFQW9IT1I5bjJXPHxYKiFhRl1pJjJOPmt5aztyXW1sJTdqe2V2dFc5JU0uc2VpOm5nYlFr''@;'; put 'put ''ZF17aipWWCsvOi5GUjNDIUR6PSppOnpLSUV1K3NvdlJAcjUrVHA+SkhaMCFDLzRAZ0JeZk1lJXw0SkBCXV5HKnciMyg7RTVbdSN4eiZUODZxdWwyQXlxNHVOdX1UZlU6WiVkcT1RKjhzejBfLEY2JT17SVZ8LkhYIkdgTSIxPThlcV8qIlBRUzZCRXgvPERMcTNEREIyYClyYXp6MmM4bEU9cGEj''@;'; put 'put ''K3FTRG8jbTNuKDNOajl9O1ZedW8qP2E3fSh6JEhpI0tXUnR5RHpOcHNsb31memtqY1hZUmRqTGUzN2UyXTQ2MGBxM01yN2x9VGpZOU9aMXB8aThGM1MsNn5Jc2E6SHczKXcrKUlpKGd1LGt0ajREIiRONi5PZzxfdFQiREp7e2g0cShzR2h3L19mYXxNVjZ6bFRSQj5rTSNqaSRYK2pkWzk2enI9''@;'; put 'put ''an5mOVtMeXFUaHFBKjA6cjRoZi9BQV8sPFk9aH1ubnV6Q1VPQGdRJEwmbE9AZSh6e3skYlNsfGVYbSsvZz93RnJNOHosJnNMb15BR1JzTW99Q2hbQTlEYDBDdnh7ayZzSVJKTz01ZFtMbTh3MyMwNEAxaH48OX5jUG5LSHVMPDZMPHxLTlRtcXh6T3xfKUFaL3BlRiw/SGs6WyEoZDEjUCZtYkFa''@;'; put 'put ''LFdJVFRPRjlyNDgySCxjMl9sIWR4fkE5KXgib2k/KS51OXRIV2lKeEgvTVM7YDJfP2ZHK0labW5yUCVMP3JgJW9fOXFAeWxEYH57WlVtJFk3XVJ1XUh1SjBsTUYoST52VHNTUXcrXl9MMTVRU1R2JHdFOmNCKUF6diM7Vy5QLlNTI2smV3A6bzRaTHVZNW9aSDlFTWlHQCsxeV01KjZoMFsmQTFy''@;'; put 'put ''S3QwT3Isc3ZYKndgd15TNl0zTXJ9USVIdVRlbmIiYk9pYHprL1dicWpBIXw/eThFKiM1Ny5pUFMhRHs7PGMhYCY/NlBheDBlPUU6KTldYiIiXTxucnxhRzpiR3NIbTZJQkw9Q1AoOUFDZiVgbn1SR0FAQEhwT1s0JXI1Vmdyfi5XdlJkOld2JU9UejBkckA0cWh8Q3dpeWVHMmYhe3crOiM0aHE1''@;'; put 'put ''PzdLXkhaL1RXYyR2b0dzY0ZINShocnZycFp9Y0J2dXJdKjN9Iyg6ZU1iPFQiRE1IYHxXNms5VXh2eU87WWd0Yl4peEtURj9XdGUpNSZ4TFk+YTNALmNPRjBEeFF4MH5NV2NjNCFySn05YzNQIkwuPzRMWi80VWtDX1tWcWZHUlYhekEjKDB5am9FRklyZ2AmQ1lyKmdjOC9rJlI/VDhIWGdKZXAy''@;'; put 'put ''VipOU2NvKEJhL1YmXkgiU0A3VVlIPipZeEI1RjxCaVpMfHAxQDpoYDolSDMuPC5AfGtwNVVdeV5VOFVpfUMudUpuIjJZLHpVaVZPZH1xTlg0WWQma2Y5UXhARFJ6eEh5SUE9OTpPOiR0dT4vWjRNMjpCd0ladnVlWFtCZE8wImIhTHh9WFVqZz02JW1gP1Y9QC9sfnN4XisqUyJQPlJ9SXwhdjhP''@;'; put 'put ''az8rLzxhfjMwPlpgUiEyPDtwKE1mKyUocVpNVXx0Lz0mSHFke3I2bFVCelVBRmdzTSgpfG92ZF03U0t9ZmN4RGpqWDk/aGlrOnlZPDModmk7bzlLOENAJmxUcVEyeWJJIkN6NE80JWMkRj88RTZpcy8scEQiKH5DLCxIVExQNEI2Qi9ecHR8OmlENzl7YX19c3QpQzRSQzZbLkNEPUw2P2xmMSk6''@;'; put 'put ''InQ/WlUjSnEsI2YwWyRiKDhQLCU7NGRmbGFMIXQrTk9CSzZncCQhV0dadEpQMzs4NilZLzEld2t+fXFTIX1FRTdyUSp0PTchYWo1KjJUJFNecDJ8Onc3RUZ+UzE0WWAmQmdqdGp0T0I9JFcuL0VdYXZAPiRHN2kkOmY8QyMxPlkmQWRfMk8vels/cUMrSXlUTEB0JnFHOz8+Lnhvdk4qazB3Qnhl''@;'; put 'put ''XyolUW97LEBFK0NaU2d4VHl3Ol5EWDEkJDd4ITdZc1QwSy5fKlt8ZShxakB3Sk07RVh1RTB+QFp4NTgsNCYocz81e0k+OGw3ci9pQzljRlN4Il0hRWgoW3s+XUpERnkvR2A1TDorQnUqQ1F2fVlkT0tOTHZpLnZsVjovUWEsekNgenlMOX19c2hsNkpEYlEpOFZ2ej52XyhSXUtzUGVnPDBIQ09a''@;'; put 'put ''Qk5afTt+WCtCc1BgZHNkW1R8PiJhdihYV290Z0NGaG56T0tLdVFyMjdYU1kvcSJMSj83YTRdJThxNnxSPC9+TmduLyRtNX50fjB9eT0sfSRXRU1wNlskKUZjY3NERmJiWFdhIi9nUUdmRV0mPjg1TCs1NmFlI3NgVkMvXyNgKV1jcypfTGx3NUAyVzxOUmdRZFl3UEc2NSlsOlRnYyl2TnVaJTck''@;'; put 'put ''eFk/YiQkd1deRkVIdF1IOkdDaz5kfW5EOnh9JFpmfTdVV3ZxdFo1N1RGfnZ6X1hGe1k2Ozt3WkQ2ZlhXRlRxSGdMLyVfdyQwTDJtS0N8bUEmZDcxY3tCQlBeVjw2Ni9jOUleTDosfGosIllLbWw7XUAod0dqfTdieWpEcyJzKUp3WWc2ZjJ9dypXNFBDbCxTan1VRGFALDZYSGdIIzFbYzlgTFgm''@;'; put 'put ''KWlAeTFJWVlCdiF3NXJiM2AqLH0pKz9LZ1RuTCpAYFVvfH0iMnZoUjcwVHtLU0BPO0dZXzsrVTtWMnlieHQ7fiIqPVtVMkhqVzVXQGk7NiY5NHFqcSFBQWQ6dmImZWllRjUpOUJXN0c9ZUdGKUkkVmdVUCgyVyZfclMzSURFRD9XMmU8bmZubkJGYlBWc0M+YzU4MTFbaENEXVswNWkkUmRSJE50''@;'; put 'put ''P1d6aSNYOC53bEpSbDdTZ0BEayVbb1hzcT84U0R9JGIzS2dVVlAuOEFIeS9DIV9KJFA/QGE2NCtJQCZWO218PW4sdD1hQllvMkJnLyR3KHk0XXU/LHJ1NXo/PjYyLnMzMnd3KSNCdlhyd2MuKX1XR1lNd2AiX1h2XnZWRCFrNUwhXWFtUHYsJTBEci40IXcuPUxeNGAue3RtSyNWU3tKNEBtYy85''@;'; put 'put ''eXxscWw0VjwsR3VrVHxkNmkyJW9lMjhLR0ZZWGtIcThLejZBSD1hbEdMOT1sMSloKUdUUSVySE4+Uk9gbC9yd2VWZiU5IW5FK2s+MU5uVmBjUSxMUW9FPm5xdGppWHNpaXsvcSt+UDBoaDAxTkIudFcyNitRL0NnN3czdVpYe0A6TTpOOndOb1puTm5PbCUxPDA0eFMzaylrUl9ObmVOWi5lXjNo''@;'; put 'put ''Ynw9VzEmVTlhbVA+dTBoRE1yeX5YM1tYZ3Rwc1toIU1MLn5QWCwqezwwcSVWV2ZxOXVESEpUSjBJMFU8ZXgkUiVRLltGXVUyITp2IXprXjYha3NINlN5ODM4Qnp0Rl5mdGY4U2tKP35+LlNLMzdZL3BhOnVxUzRdJHQzVjdrIzhoRClFNFpNLGtgeTQhdHo9NHImZWcpKTZzXjtyR3h+JiZpOUQz''@;'; put 'put ''bE5QKTd5b2tgY0VVTUpCeWtJey9nVkM5Y2VhLkg9PSY/NUxNc01BMmFlNDA6X3w6Qmg1ZilLWWhxYFYocWchQyNsSGdYRltQW3tga19AOjxITzFpdVFySDtufU5Fe1Q2fFpzWzVQaCJjeDBsbl5RSHEuPzB+cFc/VS8pQFhXQzh1KHt1OFJge1A8UG8wcip9Jm9MNz4ocjU/VDo7RW5MQXtrcG1y''@;'; put 'put ''KUZiPSpMIlJgJV1FK3VOOmRNViJRKDphb24rZXc2PlI4OiMsXjNNVXlKbD1WUVJvRnwrUjZmdyh9V0sscCxqMCVFNCVSfnJPYV5qVSRYOFpDRkNYLnRHR3VjNmR0KTNeYGtHLEJNNkxyZGheRVYyaGp0US9AZiFwLlV2R3JeMU9iJVhbRDVHbzZsW2khdzV7PCRgQD1JaXN5YG1kfCFGN0wzansl''@;'; put 'put ''dHJQb3tLMmNrYU82WU0xblo4KGZVOVljQCt5WnNFSyU1RXpOVGBZNy87WzB9YiZxPylVWjFGSmdEWmI2TWt3SDk2YUIxXk5hQi8kKHdDcXZmTVs/VmRSbUhYdSo6bnAmO2tiemFoNmglZT9BSCRoYWAwY31MTCVBRVgoLjh1Vz5xXzttRC5WOXppYTBmPS9ea05+bUlZdXFbIl1XSHBxLzVKY2oi''@;'; put 'put ''Mj5IaWk+JGNqPX1aWT0vMDFAfjxKeXtZQ0FybTk5V2VXTTlIODVkQ1QpUDI5PUk+XjhXK2ZtZl0+dkw9UDc9R1Epc0EmJFtMMlBFX0BsK1Yhb2RsM2kpfE9fXSN3eng8akBmOGYvRCtAb0k5fnxyYGV1e3UqaUlyfSNVMkQxSnN1dSZLcytbKjVwND1kKWoqaClRe1UycHtsZy9eIklRPCFXOCFa''@;'; put 'put ''UW9HXWFqW3JqWjRPc0s3PXc5ciQ+TX05fCFJSTxgXjpvfTttRzM/a2opZjc3Ijg6fCRFKmM+YGA9O19teUZ2QiI8eTRLaGBaOmdDQT85SGJGajdhJnJ2b1NAZzMkdmxJOjMpUXBHYjplSy4kIV5JQ2xkK1Jmezpkcj5TPE9NaiVjUF5YOT5JeXBZST1TTV9kSl5CPGZoXzgzJU0zSGRVdGZMZTEr''@;'; put 'put ''PUlVJmA1JSVbdGJGTkRIKER1NmZURHMySlM2YzJ1SnAvbmRGU3MwbmV+bFRyI1R4MEhwd3lDQ11RdWdtMEFfdjs/azA5NT1aIVtdS05LK0Y1TnF0XSU/dFM6Z0IjdlorIl5JPmozWTVVb1sqQFolUHlNbXohdmluP011Z0AqMyRXNTZ3bVphOnlTQjxtWWc0QkRbc1BUL0ZtRyphfExGSFF3JXJ3''@;'; put 'put ''TClUI1hHIXdpTy8pay8/UXFfeWhRQmNvOGpDWCZIMGBiNShwMktDJmR6WjB2MnNkLngveClKU2xiaE5oa31MTT4iQXxPYHJ6JGYiQDEuLHBhZSNYPyU1IWdlY3ksLGdnITBfXm9pRjk1UldFSmZ+VGVSNS97TzJpSypwaG1fWFBDWmE6WUBzMXYxYCg1Pit1OklmQXlqNF9lRmtWMHhAdDVlRThy''@;'; put 'put ''RHBxejU4YEF0KyF+NUYwZSMvc0JGeyxafUNKaH5oa0YvUDwicStCWl0wdSY+YkY0WlM5JTdMUVFbY1k3OVpjTE1NLHQyW257cWloeEh1KCs0Lk1PKUJ8XjdrWUozLjR0WnZ6Z11xdl5SUTNpL3xXVk0yRjJAUmVZZzlSRGlJbmIsVlhJPE8vaiw0T240TixJZ1BXUk0sVHohND9DZipGaSxkVGxX''@;'; put 'put ''O01uVz9kS3dhbT8wWzkwcld9emFQZVl4ayR1cl4vXUtLMkBhIkNbTGZGOX5JKntxVCRTS3B7VEg3KFY3XThPT2wiZDp7V25hXUhYdnlzQHM6YWMuNndPO1pwOF9DMTxoTWshTzpRQ2FiImwkKVpKZTRGeWQyNFN2W0tYJl9LUn5CPX5LY29ieyxSViZ2JE1JfnN0P2Ipb2xuKEhpZ1lMX1gpcXBv''@;'; put 'put ''W0JzOHFsN3pFfX1Id3pWOXZOZHwpLyRQX01nK0JlPHFLJX0qOWkrQHJ+YGIoJE5bLEJCOW1Ed2drflRxV1EoeihjYC40SiNHSS88PzcvIig1N3BZYDkmPWhhZW84K0tuUz15OHYuMVRVQl12RyNTZHImU05udHw2TE5wbGRuOWYjKVVAVjFiS0csRlcjeiEzRWwiSEhuZlNKMzFpY0V2NDpoenZO''@;'; put 'put ''JTB5KyxUUC9PbyhAcjZYQlFEbCR0fDx8XjtrXVZWM2VbNHhvQHYiTyhCckI/NltpXn1VTE07YmdxYW87aiRrK0wiWXIiJDZ3OVlbQDVMRGZLUCQ4SzEkPWc+SSR1fV5HI3IzZUwyXSJiQjcyQmNoWEUpaS8rLkVWO1grWXtuKnFvKHhHfCsxMFRqayU+VjFfWzFzY3hrPSpsdFZZbDh1K3hRIiZF''@;'; put 'put ''PUo6NXp7fDc+c1hEN3dMMV1QLGopR1ZCSmoraDR9PHp0I3x0QTcsIjQ8OnE3dG40OnUoVFU/S0xdSiQpNDR9YW9FYSFrU3lsKUV+SC9RWWBVXlUoMU8jZjQ5eWYxckNUJn49Ul4wRWpYZ1QwbmFMVTNTPUdrPWlUP350fk5APF06S3AhODNtfGJUQWsiJEV4OStmfStlUEN6N0BCZlgrVCZxUD5A''@;'; put 'put ''cU1POENCTWArVVBHQWtEXiI2OHdqazA0LGFURmgoZFlgQkVuJiY4cFlkNElZRnZtOCxoMTQ1eTgjWTA+QFlWPFtOXX1lckZCPGlgVVcuWFdUbE9rJFcvOWNLeUh+LzFDKjFrT3tqdnxuJmhxakBlO2RmM3p4TFNYTlMsKVlrOFNXfm4mYzFvTixpMmwlPWp3Z0l0PWcuaCk7KXlIMnh0ckcuaUZC''@;'; put 'put ''PWNFQ3huWFtKLmU0KEZJLFpQSm5JNz1kTFQ0KV87fTEvVCk0YDlBdCQ4cHJHUGN8QWpAUWpWUSJCRi57ej93XUM1NDJOSCphMkFoIj07fTZbJTJLcz0kOi9ocWAyLF5kSjddWDhbKkRXbCNQeGo0QXN7KVM5RT9jdF4yNjI0JS91R0opRVViYClNU2JGM3JYOUpmOigwRkQ7bnNWZGJgQm91MlEv''@;'; put 'put ''ZylvRD1DS2s+VmpeTHFYe1tsYUtxLlhbNSh0YFhCMEcmUn5NMlNgJUpGRHBYXSk+byFALD1iRy59NDU6YitRSD48SCskQFAye3hObV5KKXI/bTQrY3h6M1dqUEgqYVs6YTsjcCN5IWdKISxkI2xPODRyQyJlbXlNXlY1JEN3QWk2bl84W2tsXUkyOmw4KE1ATWcwd2wzciJTZFN7dEo1NFd6JUY6''@;'; put 'put ''ZUQ5NmMoLko/IzM0eFslLiNEfXxKUVY6ZWlGOWdGSmEpNyQodjckd3ZSd3lCT10pR2Q4UkopUGJxRHVDdHdBOGRdTGNQKmxgNUs+czd1V3N2KkgjMi50Rl50TFsmTUdPfFVQTSMzKlYiLnRsbUs8VFEqPCE+dU1LakU9XSlnRzZQSWVwMEQqN3NJRm5QOEdYMCs2VSJBej44M0V5b300aWdpSlVp''@;'; put 'put ''JGtwYjB0MHtYPVBteDRCOmddc2JIInk9ek1yPUAhRjd9WmFQY25sUGFuSUc0Z0ApOUdUP0k0TGU6RmI4KTB6PHM7R2UoOUhMQj14bVoiajJ7YGNVNixFSVRpaW1LU1t2VDFGKHsiSDBURngramh+S2lvO10jOTZQLlRgVCEkLF5zNWo1aVtNbm9fYih4c2hwSjUvQm1gQV8lfHdwYjt+Ny51MjIy''@;'; put 'put ''Q01TekZhYjl6MFBRJSFVXWA4OXtGdnZaSUgvdWljbSsmaDlhdztPbyVeKVR0YkI3a3R+Qy89cn11cmo6ST8id2J9ejhxRUF8d0NHWVQvRF92PH5rJioscjJqbTgqcltVeDJAPmx+bihqUTBpO21XKD0yTVtra1FRczc+Z11FVXRUelFmLldZbFB3O0ZAU2BRXTk7UzFrQUZ1dXZlWFp7ViR2OCRF''@;'; put 'put ''JEhqeU0lSC4zOWFgSCY5e01sRzxpL31XU2xWb1puMDl+Szk3PHUpVGl+U0cuaVMxbU56digkY1ZpezpTc0ZfcDtITkNQR0JnWzhbR34/cDI0YiVPYDN2dkwpQHJ9S1Uofi9KPjlgeDV+XSFQM1d9M2Q/fWohfGNYLDN3XS8oNlVGeWJeVT5SbzBQcmJCWThCeW4wZyx3NFZ9aklII1NPUnxHPVte''@;'; put 'put ''ZCM3ZkR6YTpOa1tjKT04aFIqVnFvZ1g7IiF3RkZCT3RHbGkzJV03UndrfFRwQm03KmB0KHpuT3BPIlEqNVNhbioxMEQ/d2w9KVtQLGxjRXFCVWppOjtQP2YpSXNKMjJdXWZlU1Q1dVkmNilBPy5HYThYUS9VOEZoUjV3Sk4+QDVzMFsqUlc0UCFOUTY3WV82NXk3Tl1XLkt+W1kqLCF4KWNbIk9C''@;'; put 'put ''NVpRdD0oTF5mLiosMmp9bmd4ZXJGNGx6OCpiUnJqNEFhQCpTfi9gOjxVIyI/P1dDVVk4c2J8TSo9Q3RkXVBlK207bVkuIzUjQWJAYUxwYX1oc0FOdGNyWSNhSGh6NDs5O0wkdk5RO31oSnJzP0Q/dyxKUi9rUEEoWHN9fW4wSDAwXi4/RGRBXzJuIWc9OHQ0V3Bzd1ArOFdNJH5QXiY6Mml7cWYw''@;'; put 'put ''SzdRbHt0Kz84XThzYV5VeWNsLHBROnB2MjlRLHdJejcpWXNyIShrbElybHtUa28xcVVASHU+SHg0LjcvekkoRDlycE9eLlNeNWd2Ij14a2hxfmtfN0lQMHwsX01xL0RpTj1ZbltyMz5YYl1gT2Qoc0N5VkVfYSRaMz8mJXAhY21+Szo5Vl9aMH1pQHUjOH5pfUNoVD1dbVZsWyNhYjhuIUYuNHoq''@;'; put 'put ''dlR8WSVoZDVLJl5vbHUkTWorXn5KMD44OTlSZTBSPHQ+WyxbQW1zJFByRCpJSz59fXlydzlWRWtSSjpDay5PKEQkZyw5bkRPUXphUjBPb0p+Im0oPD4pLFlhL0dbZyNYNkQqS3shI3gxJEh5PWd5cjl8dDY4amlIWWxSXUxPMkM/Knp3RER+cVpKRjA0a2MkNyJSZDtUQ0N7bGc5b3l1Ij85NHdQ''@;'; put 'put ''azR1XypyPT5HaHRQX04zYHl4RWB9b2xMP3lvWSQhRkclRFB2MXExWlQpfDI3VT9STTZmXnpfNFgybF8rWk9+d1ZrNWhze14wKFllYDZKMCgwdF5pYi58dWVaLDpMMzc/PzZTNHJZWlouPWNSMG9RRWRMQHssPUMpZWsuRF8qQj1uM2I/diJzXXVdRHhKfiFVTm9nPz82fihpMyUia2hHZkJ6a0Qx''@;'; put 'put ''NCR1eV43VFNhdU9dPW0uSkdtRSxDKXRVTyJQOTk9JnBVczQ3d0koRSxEa11nWHwjNU41bXE3RT1QOHAqXko6Tio8TzdrcilVLzNoPCtEU2JmQChxZTlULm92RilfdSVUeFApVEB4NllHM3VkMTI4PXRhNFc2ckJhKEZ6QT5+Uno9ZXh2TW1DMHsrXjYseXhzfD5rVkUzRE13MDxEOW4uXjl+JWE0''@;'; put 'put ''cmBGU047S2IwOz9WeGNbVTZXM1tGRFhYTVM+ISZXMHl7O35kTU9zMmJIKnY/eVpJcyp1SUFGRVApTDFOYzNkW11qMl5DS01dM009MyNwWnoxdng3NnQxNHYjNDVWNy9Tck5fc3l4VXprUzhgS29kMF8yQk5JLDRbb3YpSWF+YXh4ZmtvMzNMP2RYJjQ9InN7NElHR1hxVC5rRTtpT1owLnt3P2Fj''@;'; put 'put ''cU9+LHY9bi9+TWRiL1ojWnNWfmopWiFiMV9daGN6YU1fN1s1SX54VUpsXWoyOn0kXS5QZW9meXAqQGFwU1owWShFenA+WChiakE/ISMkIlRdcShzKGZZZ0hwNHxQMXokP1g3dEJaMSwzNDFTKm9CRTJ6NXopeWt8TCxBYXZSfGF9LzR8N3hRb15ISDhMbXtQPG0ydCtqRnddKHhxTEU4dldjIXFS''@;'; put 'put ''Ul4yfChgVkxiUypufkYocHZiYGgmcn1EMypaTSh3WjorbmJbU1tCZjBhTFI6dC5zYi8lY2N+fHQ3eF50VFYkR1RDVmZUMTFSQXhRP0Q7RCUoKH5uVGwmKCEkPl9hei9OWypLYWtRflFHLDh3en0kIjNHdnk2RTMxSlhpbl5XIiY1YXgiKnxAMThsVVV+ezRZS3JxbDZBP2pPdmwjO2NSOHlTXyR4''@;'; put 'put ''fHhLNmBqJX19N3B0US5nM1V+Z182I1JxIytaYn56PH1yOS9DdjNSQUBRbjFMWz9QXzw0fFhmTCNgR3N1NWJWM3dGYWZfPVhlQ2w7X20vZGB9ck0/P3d3PkIuaGZkQzFae0F6LkxXay4yMVc6WFoyfWdmY2tkNm9TIVhiaFplK1M0Llc/Q1MhMVp9ZUFlamApOGovNCx0Vi4zcTM/Mk0sR1ZUYCVt''@;'; put 'put ''NXZ0bF9IMjF8TTt0dTpVantMVnRGREhIYiVBb2QzY2UuYDpTJntGS0JeKHQ3YzJzWWkqP1BtXU5mJnFzVyovPl5FXmhqfmdyQkUzck9yUShoUzR9O1ZWdXlkWmZ9ZXpYMTtDIUJMM0M4cWlQT1A1Q3hbRzhzKk89QHx3XVpkMElrM3txN2NLPn00L1g0WT5NbVBzYFVLcGt+LFkmZFdHez9YQX1J''@;'; put 'put ''W095PFtDMyJ2I3ZMOk1BeVc+LlMkK0QkP15vS1Q4U2JneDB8azlYUX5iKk5ucmxALkwoKGNQLDc1aElSX3tSaVVqTFtGV2QoNS9eZjp5amtXfjUmbW4vNVRuNWw7aVdoQlJsfWJkXVs+e3dQS2M5e3xTJU1uTHMka3FraEpIfkgjeSx+elU0fkhULGhAcGtPem5hKVUwcyp1NHMlckZ6IyZIeGco''@;'; put 'put ''U3BeNnsmSz8hKjQ2JSQmSWh+QnQ1c188O3M5fGVXay41STkwNnNCRG9iXVYjd0ZCLEQ3eDhlQ2VkYjBiUlJ+bWY7XnBbTjF5KDxjJFtYZlZZdyUvWUJ8PVgqcHVqQnJwYCNlOkFlZFgrWHxQaVFVMT9BcjxgTShfd29UdD4iLzFUd0J3Pj9qTHFwJURgXXY1d1UqLm5XcChyRi80fi58NiJCNSNb''@;'; put 'put ''LkdvMT1ZWllrKF1oW3N6QnIuU2FxeGo2NU90aSR1aiY5L3EmfWReW1Q2L3xMQm0+NUVKb2F3WzVbV1RUdFBJV3tnL3w5LiNMZihofkNBZjhTIlpmR28/eTI8dXpSKTFCM3loX1teLDs0PyR9c3wmfj4uX09HQUQiWjghc1IuQnx8JWZddishI1ReX3BsRklgMGI6ZGQ5R0VSMU5vSVpgV1ROUXx5''@;'; put 'put ''Z3lkPnMqJT8rdUR1PXs/K1I/eS49U1VqczslPk9bLEkiVEBqamRLVG1IeCltI0t2c2NoW0M0Vn01WS9bfnNrbFhsYExiWFBCVzZ0a20oYmJqUTdabWsoPElrRkN+NWwvPG57KCJkY197PmttMVtHVSxWS1R4eD83cHJTOlYyZWlpQnJQMHk0MitiY1Q+S016fVE6N2RgM0hZYmtnVVI5Sm95fm1m''@;'; put 'put ''OT5hIVEyTkxCKG4oNDhraDFBfCk9PlUreWAwOTI+Skd3WXdebHVuVnY0ZVgyQiF3LklwXi86Rj1FQEE4UiFFWXpGIXhPLkRnZEJqMVQ4eiVXMWl7bGQob3xXfjY6eF4kMEdZUSFvRXFwcHNfMWdZbE18Iis4cHsjNVRyKnk8S09IVypsdisxKSpCd19hSX1JOHIiLlY9MEF7KmZXMUY6IW1ld1VW''@;'; put 'put ''MWJWZjh1Kkh2eiVSMHF4bjg3Lmw0QiF7bFBfLk08OmtGQDAySSNYbmVPdDFaZUR5PH5tb3dEP2Y9KGpnVUBpU1lFMVEjIUlDO193aVRtQEw6bzpkKlR2ZiEhIiZMRT1nPzlrVnJAV0VLLF0jO09zWFJZdUMpem0wPDN9eFpiTmVzdXkvSH12eyNvRnd1UFBQQ3cqfnlKLEVaY3hrfHVMQTY9VGpA''@;'; put 'put ''I3lkcyFNMzpaJHAlXWMoNGopdSQoflQhQ2lMSmBkPCI7N3JOVS4lIzJ1ZSVtNWo2ZWl3Zno1ai5lKTZIWVs0YEJrbm90M2pDLlgxTUc/eS9TMVoiUig9KGRXayFGRFBrZEhMSy81I1R8RWhmVCFIJkw+Y1J0dWZ7LzMhe0UoI3NhbThEbHdPMDRFNFpEcHBTd2UwPDxZMX1FW2wzai9fUk1QSTtq''@;'; put 'put ''cSppcWJIQFZ+NWJsNUdMXkdyUWouU0cobkJkbUpdbC83SEhtTz1JV0s9Jng6eSwmMUBbSFdSfUNnWFVnSm1vZnpEIngrUkNFfm1hUzldQTROKCxYQ2Z2VU5PQiY1bTxWanZYcUsxMGg0NkpRVy9EYy5mLDw8VVgzRUZbOWglQT4uYUx7TDVweFdVZW1eYmRvSXdxeitzQWRdJEw0ezohP0MwJD5q''@;'; put 'put ''QDZvNlBaUVZXdzd2MEdFT0xNfXszMixXfmZZMyVwXiwlVk0+JSU3WStGS0FuNmJZPT42dl9uWWVPMjUkYDBAKWp1OXxfemwpSlF6cyVvL05uUWtlYCYlYkBAXl9lTy59Ol1SdHF0Jmc1LnB+VV1tXl5wKFolMHFheTd7SHR4QntnOlg8M3hoLjtvTUtZeWo1PCosbShELiJoQGhpXzIlO301ZUFY''@;'; put 'put ''Jn5oXn5jLnRDQyRYeFhweVd+KyY1S0RuKGQwRyJMOzspeW9QaTBrXl9mQTJIY1QoWXpXWjNEKVElbnQjcitVRzVWckB6dT1oO01TRHUxdVRKXWg5Sklobl53VlcsL01IY28hflhWNkdOeGJRNip6LCFiYSwvPSM1MCosV1pRQmh4RGheNVpPOzl1cEYldVVRLkVbXkBLLCxrUE5tKmdwIVVqfkhE''@;'; put 'put ''NTpqL3B1PHt0JmpAMEdCOHIydkxUbkVBJG02RWBvI3p6c2R7JmwmLDEzM2E2dzMvLEtpTGp0VFp4eFt7KTlqVXhuc1NsYj88JmF6QHJuV0ZLTENEMTFrOT5tIW9KR2pRMCtDeUJfJmA9R1h0b2pnNVhqdkJfe2sualJPUE51VSk4ZyhELjRRflZ4OXcxRjgrZG9SYCR2eGNQI2lGPWc2bUNWdVJb''@;'; put 'put ''I1NObmY5a3t0aUxKOjd5OitoK2E/Qm03OFNKUDJvOnMjbzFXNlNeW1MvcFZpVitvaVNIUUsmazdKQFtYTDQiODJZNjssYlA8fmozVU5OKEZqP2k/dndPeHJ2cXYyYmNIcn08UFtINltAdnJrW2kockU8XjxJd00jX2khS2FrVHtAclNvZ3p5eFkvPG8sIjRndHMlfmA2KU89Lj9ZOytPc1NbZ3U6''@;'; put 'put ''KVUkUzt4Jls4TTptbWBAdiQlTS45OjZdKEZiYDVFdzBVc1U/N34lNThxJS5wP3JHezBTUDQobkJtT0R0dlckWkJ5LHU0OUgwXmAvdHFAPnFCYn1TLndgekIob2RdVTdgYSpCIUlTbUwwTmpONXBjZlQiJkQpJnYuMnx5YERnZjhaUSFGRCpQLG03Xm5jd2o0W1ljKCVLVHhNbCRSPi9MVFViM3Nu''@;'; put 'put ''QnRtMG5jO3VTYC82K24iNztTUVNqOElONFFAckZebTM/YyNUJSFIRDpeVkYzUHwudDZOIykuaTdVZDZkL0JbW3ByeD0qYG1zL2xsS2NLYyV6LjA6ZUo2LDpYcTt1cj5mLDB+dm9haFROKGY9RUN5ajhPYWR2KSU9ImtVbX5qVzVdcCZAUVUoImwmV0BaSCNvTWRRW3c4YyUzY2wrZTRpc0U9cVh6''@;'; put 'put ''bV98bjFEMTdGVF9VJE00aDdnXVArYVpESU1VNTlGOzAmQ0MzXT06IiRqZUFQW1ZyNmpwMSs1R3JtI3dKZmhvTFJFe2kvK15zJWddY2RbbU86PTcqUlp2PHxQeFlOZSNeX29FT1pMT3xsREc9aWZvZVhKPU5oTyRbMCQhQS5PZU9PRDd+JTsrX2lhRGBUK2Zzbj5GI3dqc0YwW1llIWhKJF03OUp9''@;'; put 'put ''MzVUcS9jI3NdIXhMdWs7OCV3alQpeGh7bE03WFo0OXs8ZEolV1pIckhjJjFUS05yQF1LIi5LaSh2KnRiZXh6JHVhajhNUU13aSJGIUxzKEssO3h7cT8jX0gvbmNWWWUkU3cyblV+TUA9Pzp5MCwxTUxJW09HTlB9QHsqX0J0JEY4Umh5cmcjfnVXV1EwTHd6fk88O1U5YUt2OSZPU015VnNuJDVb''@;'; put 'put ''UG9DcmFFJUlnSyoiTXhWaURlQThEajosZFYve1UoNztSfj53KC8wKXUlO1poTDxbOyZ6USgkdk1UTkwqS3JKZ3l+Z0Z+fTNkUXNfPzpHJUM2alhGLmM3MldVXy9Dc1daVVAqJC5TIW8hfVUjUCJwYWlMOi8qIToqXzRAOllnXSZLMj1hPWU+RChyLzUuei5RcylqQSpoZVdiREdmdzM9ZjcoUVZJ''@;'; put 'put ''e1kwMD81alk/PjhpLlsiIi8lZzMqXzRAZn59WH5eWS9icHAoZGBCcDcwP2kkej0vaVM3PTgxdVRKXUJ4UT1JcW5jdz14KEZue1djVzFJKjgwZlN+SHFfITwmWT42bH5PK2Q5RVclSC4wWzw3RmRPJXMpV3s+KDBAS0koOD5vMTdGT1AxfTBfXlZbN1dYMmR7ZSR5ZzhqXmk0dj87fTNlJUIyW3V0''@;'; put 'put ''WUhAbDZBZW8xczZNXS4wZyQmbSQ9czkyb3E/O0p2S2N7cXB6Y0ElIy9pN144WnBacVheKS89cTEzNGlwZ0k6UDx+QEZINWN2JCp9UXkzPjsxRDpbXnE+PCI2UjU3bT9tYCMwMyRldSVXOkBWXSF5MD5ePlpKRlRYXllRN3whYSksRS9tRDBCXSRHeWxlVE59L0tgTFZXLDQobGcmKSJnZiQrQmAh''@;'; put 'put ''eHpaWklnUitjLDNuIzovI05NcDpzPEJyeXVDWDtXU3BgQWBxI0s4Nm1LMGVrT1BMdEVmfkAxc1RNLFVPR0VoL3BiPXhxdylXeE9AZDxlJGV8MEs9Rmw6WDwjImhNQ2NGQkMzfms9bDhtO186NClEVndnMnV7c3pfKXQvRiMqTHx8UkdZUDdTfHR2az55clRfPyZeUHhza35GaHIzLlByb2xVYX44''@;'; put 'put ''I3RASlV8ImRGNTRrbXRqI006I2EkPn1qVHZkbF0+OXZGWEc1NDMkI2FNXzYwQFhHUSErb2Avc0Z+KjI5LllOdFEzKSJnKEo7T0VfOjRKRkRPSnBKPUMwSSgiK0dHbW0qISU5fk1rQzM+Ii8uP3hHIlssRmBeOz8rayoyUVJLYklheTFeZzNLO0U8fVYrQVh8c1B8JHojM08kSjcwOXo4UFQlMnpd''@;'; put 'put ''QDZSeyV8fnZAaSNtMFliOlFzT25WbSEkSXNfU2IyKFp5QmNsKDFtSnVgNkU+NG4sNnx5V0Q1fVp9am0kQ2NFXS5TJDheXlo9PiU8KiwhcH08ZUNWRSVBOy8uJCVPLEE6QXFVXW06KiElQD9jPEhuKWtdVy5XeVteUDlBYVdQeSYsMTNQZHp1JlNeV3k7eTVHN2x7cFAhSmAhWHVFNVhjWGNXRGlH''@;'; put 'put ''NlkuIz80djRhW2UuWSpyaytYYFhCI3NHU3V0OD5xWClXLGErPT4lMUk8QEFRK2wsIkpMTl1YJV9rQktJSnNvZ3Buci5VKHdwS3VUQzdPSXBIVFVVTTkqOVBMOllmJFIiMDxrazFPR0osWkpdRE95bjR2flBiJkQ5M1llOWo6KUhecWgudkszZmVOR1VSZjZFYX5wbD9rdW5heEBGPkl7aS8kXjw5''@;'; put 'put ''SXJscmAsdUdYJXZPK3ozUTl3WWF1WzYsQ3VyWXA6JmsxeWQ5RyZ7PD4xankvOjBMcXx7eG9PUXNCaWRtOHIqZ3tPMTBsQn0xVSZSUmZ3TzBbMUx0MFEmRE1HXit2NzZSKHdCSHsxanl7My86WjxuIWouQ3VfNSIxenkzMl1jKzxQXUdPU0RaXj9YbjF+JXBOOUJscUlSSColMl5uVV91JnE7QV5E''@;'; put 'put ''XjtiRFZYSS9ELG5AMSlGdURCYU14Mz1WKS9SOH5rQFdpe3FqPD4lcD4vYGFbJjNVQltMMSUjY0M4UDZWOz1paHhQNlpwQyZzKEBJTD1jaFdffitVRmIsaSl7cmQ7W15tPmorfF1BPiQ4fk1oWTowV0lpM05xOSYva15BWW40MDNQd3daMXdrMXk2X0BnNGsvISFqT1QyOk9vd2cqbkBDRyVPV3o2''@;'; put 'put ''ZWQyW2BTIld6KU1fUkJSUnRSKTIkIWo7cVo4fHB3UDxETX1rVHQ6NSFNXXE9WkxpfHdYT1RPZ2NqS3YhVFcjKVJCcWgjTDtyOz4wYGx5YVFgITMqOkBLfHh8b3htPSNEfUFwUjlrMnkuWURQZVNIVjM3VTBtRXRjPGY6RV96cHhNY1BARkh3UmNhdk8mWiJTeDt5NFZgbWhqaz9vOFtLT1pTeCVa''@;'; put 'put ''aWZEV1RxPFVlblUmdUMxWUA5SkFmVmNGL2JMSGZnVD1qRkV7TDlnZUIqUSgweEFaXjpjJWc7I05LbipjajBrWXN3WDZuPj8oW0VEUFkqKFowZGlXczB6X0BqLi9HS0VSVWlMMSxPMWZpPzFWKTBzbiFhNFsvd3xtUlglPF9rSUwsaTl1VzVdTSU3dk01aj1DME9AR01oMXNgPlBpfHRoRjBkK0xF''@;'; put 'put ''USt6ciRkRkwuV3QyU0VZQHF9WitPT09qWjR9TTx9NzRUbmlMUz1kdDU1RG9XelQsbnpgJlhOeFpaJF9JNDIlUD8wbyxEJSFbTEBqcyQ5Xko7dVIjPEBDYTpLWmBXZlozREg3Xy5QZCR4QGFOVFU+Rzo9fjRGMF9CdHxCUixqPEdLczo5R0I6YGk0I3szNkwxQH5ySi9IQTQ5RngzaV1rKm5SIVlv''@;'; put 'put ''YUxtODUjISZwXV4wb3QsfUA7fElkIixVLFU5WzBHekIucl5qckduaHVtUiMqVSQjPyFJZk0iRz03Vm5hPn4lbUBoT3B2Qj5CX0FDTUsrUDNYImdEUVoxd345V0VQekg0PXV5XjwmPVluZlA+MSlQQjYkRWFKL11XQF95fDVZMEFraWNJVllfY3lKZis7MlJpRzthNmJ3d0FbQ0QmMFUyPkEpXjc7''@;'; put 'put ''R3dZZ1ZGV2xwfW1vUihxSiliQnZzJUwiZzZscTlnTkVfU31DKjlQZC9rOGZVdV1DWkNXVCNMImhTOXZfOUhjdjluVDk1bnAlKFouQFU8dThDNm1QRVFwM1ZsPGAxJGhzeWFjWURWITdNUCFabGBmbWBCP31QOXBvVSlUV2gsXyZ1VzxrT0lTK2w9O0wrJH44V2NQT3U+Q2RfOWtvTloiV2V0Um9h''@;'; put 'put ''S3RaMTQ4V0V6cVFJbjlMfGhObSFVQ095RzszcnFlaiRfcH4zLFt2LiwlKl8/d1ZYJjdbMjt0XVA9c0Jxa0FTIixQdUU6czBdbEdrN0pBL1hodG9oN25FYi4uWXxkRUNAPEdyPlNKcm5wRFZZe3lHfFMmJUY1LmJtb2IsKHhJLzlWSDcjbHUmIVAldTtTX25GYiE6Qls3Nylxbl0hS19kQVNSemt4''@;'; put 'put ''TjNsZVRWZGkwdj4xKDE/WWdTQSpJVFlkc2BmNyl8W3tQTSpxMmkpZUx6VGZ3U2smcTBneVUsUjtWLC4heVZGLlMsNG1HSU9uWFNbYnVgRjpXU3tJP1MzanJKdVNyRX01alZ9cV1pTSpUbHxWKDo+ITIpPEd0UD5YUlI6UE9sbD8vLj51e2MkekUkI3hkZD06dVNoQm1semQ9dlZxX01adDRQQGM0''@;'; put 'put ''cGxLW15qcEBWKWFVSzRkcGJGNXxyMHhzUTJlR0NbM1ZAPi5nWE5XWXRwS1kxOWlMP1FPSyhheUFxbGheQjFbNUc0QHwqW0xYeWApOWdCc0RVWCVeU1pUWkZqQHJnKno1bnBSInh0RVVWTkN2aV0kNk5vYDgzOHcrKGRSQ0l3ejA2UXciRmZNK0QrREF4RT8hWUhNa303VllPPGJxSFg+fWg5RGxh''@;'; put 'put ''eWhUWjJlYl1KLntaXjNZY2tNOSFwMG1sNGo9ZHB5RHJ1b05qPmR2L2Fbd09QY3RrYFkrVit1eX13Wnl0ZDN9LzQjU20vKkNpLiQvNW8vYDEsa3F9bW9aMyx6JWVWRlJoeUlUczhHSEU6MFBiWCV8XjZnJDAkRnNKTCYmUV5jTWFNfHMybmdCKnklKkFCMHhQUHk1Kjp+RlomK3thZWRgKTVnW14l''@;'; put 'put ''Tn1PJE5rX2dkNEltfTM2R0VpfFNZRnYhcmRRRXY1L3ROZTRYLkolPHNeT0ZFOlA5SXMqaFJMJGdueD4mbmkvQiZ7PHQ0UXJ0YERoNihVRiFRcClbVzsoRnRWO0UpUTpPVjU1IU0kcVNvTyJyPChjVzZ8LzJsWVVQMmplZD8sVjZqXXlVcy9Saz12fUAhciV0WSghd2kjOjl4bkYlSjcjbCptczdX''@;'; put 'put ''XnxWUFtVV3N6S21gL083KC8jfVdZQis6clBvOX13XXBNQzRbZSM/ckZYbDBpa2lVPHA5cEhPaUMpP11AfVE7UzosSU55dVR2UklVMmYxJkpkcjFmT0omcyxpI1tPL3FgZ0xnYyRpZ1t0fnVXdSNRWG0mTHxaUHNdcC9FYiFySS9mLkRVTkZVL3dkYn1FdmdLX2kxIT4iMHYydjswUFA8KS8pUnUq''@;'; put 'put ''dmZlezpNWDh0cVdnRlZneEMpO09wWTQxISMhX3EiXyVXX2lefGh8NmU4SC8qYVlSWH5LKGZvYVBUZDU0UiIiNCJATE95cm0jPEEjal5WJUMhRCNVVVZOQUckUXlRXVd6NEJacyVFNUFHSUE2cm1Pe29IWUd2T1k6JjphZjd0RGVQb29xJSZEQWFvZFZfN25eSz00U2EwOk5icT1aP15kN09AXkA8''@;'; put 'put ''TmxkN2MqbGd1Y1h8R3ckWWd9X0dfSDVJZH1FJmkiMGl2KXskUWJAXltkQXU7MSs0YXgzJVcsQG0lUSJ9WygzZ2lETTdoREpSSjQpKkJyR3pSSWFrX10xWSoqR1ZJYCslPlhFZytFR3VbbnVCNlF8UjZjfl0/IWA+aj1TMVFMJCx9KEVGMGx6bHMrW1NmQFlTWVp6YFs6UjRzfm8pLm9iZjlISmpn''@;'; put 'put ''b1BARik6aUtRQyRbWykrI3lkK2J9dUo5eWgrUkAxIXkiWyoib05IRnBOSCNqKFRXeCovTHlidCp1ezlyP3VLO0hfR0FpeylVI2xHVkBRTWIsP3lxU0hiaVdERVtsJHVHflEpR3UqME00OFtdcUJSJV9wViE0KVpRVkthNWxeTk81SUVleUxDWXgubTI9YmZEQ1ErRHBXTH07cnxuaGl1dXojclFy''@;'; put 'put ''YCs2TyN1UCV5YSh1KiwrZj1PNW0xYmBqSFBOMypeV1U0JV1SMFY3Uit8MWw0U0RsTEpxUntJJTg5NmRyWXBmRW5pSTt7UyhRbDpFQy58V0owMXA2ODZVXTMsUjUrSUFQI11paG5DV0IxY2ZWP1RZVj9UelVMXXJybVtTKWUmWF4yNjFpcGBtKEUvc2wofT82eyVVJDRnQ3hHOzJgdGwofX0kKHJX''@;'; put 'put ''JC85dGtqN0NJNUd9YjQlWFN4PExlZGh8MSFIUDBYUzxwW3JzNml9RyM7WTt7ZzdhJSE6fSRfN05uOyFaZlFkYCkxdjlZb2w1dVVTK0t9NXIhcCpuXkxqPWQ+Sysscyo1JUpUOzZLI3AqQHcpSCV7KktrbGZFR2ZNZ2t5YU46MHdQbF4kcWhSUCR7S1ozTTI4OldkWylRTWpFXU9WPntka2ZhbnF9''@;'; put 'put ''eUZkS0swanU1dF02PWVxUk53cGFKKDpNRyQoV2BINjNMJlpfWW9+P3lkYkw8Vzl0OkNESU41SFtGeShKbWBpNSp5MS83Wnh4P2s/bzpAQUoiVUo5cnB6PXMkM14sOnxdMXIoSlddMH02IkZbTHAscDxdQjUxNWMqPntJJChRZC8ibS9YLj1YdCwlJHAjPGBvRTklYFRWYDxNWyZwX2JIcT87Tmx4''@;'; put 'put ''KUcmXnlQXyl1QG1UTEREJW1WbGVxT3UoTmR4SiRmSSw2NGg7NWEve0dYLDByOm53SVNRITdTMUVMQitJWjNURWFXUjJdW1tyPStecj1RfWliO2EmbShsVl1GWTRtSSNYWGkufW8xVUtZbmx4R3RoR2pBaUFkeiZfeHxka2ZCXzFZPndiYTNIWT92NEA9UCtQJkt6OEI+ayleO210Z1kwKi80S3Nm''@;'; put 'put ''P3JGMmcwWm5uIUdOJFcoYzdTbVVbaX1gRDlbPlIpOnV+UTN6WEZxei4sL2E7IjB7bl4qW3pfU2RkbT4/STlyTHFGb3guaXFXeE9rdHV6QGthej8jK017V0ZyKHpDIyoqUEAxe3lrPj9FOXlHWV9gN2ZmY01iUkJDSERdTFp+IyI3M3tCSkVhZHUxNDFeWEdvZFI/UnU0OXR9ays1Yzo/aS9ZPENX''@;'; put 'put ''M3smbCZPZVF1cEtdT3czP1doSThtYVQ8RSMqU3lQb3ZQL0l+UVR0TmYyK1Z5Km5kaUZka1tDeVBEa0dQYGN1cD1tZzFxWXp5I3RGWTYhZHxwQilJZiImMG0kOD9jT09gZTYsfC96Omo2ZGZ0XVhgRDVSUzdZKGpydCJaI349LmtlQl5gYzc8UWQsNDwqRHVYeiNwNEtBLytrV1NmOXpPUWxCdHB4''@;'; put 'put ''Qmx1V0VBQUFdVVhMMUBMJWN6RiY9U0h5e2JMb0AzJTNYM3olQXd9VWJ7OEk5YzdJczkyJH5jcX4obn5YL1NbZWtMdUwyb2IiPEVUVTAuK1FJbH01ZWchO21RLClffTo6LGpXaVB8O2k2bChJUz5iK199N253UDJRMElkYildNzJ4SmBtOkdRY25naEdTaiVKVGozMUhvYjIianh2YHN2QiQ8Nyo1''@;'; put 'put ''UkE2PnJ3Q3xSOHglRTo6Rjo8UVZVSGZyRTtUeFJzfDJpRFtMSG5uLGpXNGxIeVtgV2RwInN7KTNQRSE2JnhSUCFyekNXIzNkMUlbal0mamxmP1NTaTd+cEJ5UXBDYkxvbyN0Kn4sNit+Ilg7dkszbUxmJXlRcDEvcShuaiNgI0xrbmFyTHVvTEs7LCpwWEl+OURbQkhFJHVndHNqQmYjWFVrIjss''@;'; put 'put ''cWA/KGN4cmV1QlRqV2lsTDppfEdsYSluXlApa0wkLkZHenxhN1hsN3gydWdaSWNdNDdodERgZW1DNndKLkVUXnNkQWUvOjUlJHA9OnZsaXhURiJZRVZYPnRKalRtUXsyK1NddShudGY5S3syfDBkQkVqQG9Bd280fUNvTDwzJG4wPXRCfTY2PHlCcltNIWRiKixgTT8xP0BfTDVWZWlNKl0sXmcz''@;'; put 'put ''KEcue3VgQHYsMFF+YWp1RzJuWSo9Xk1kKVh8NDd6aU5maUdzLiRoMzFzcTs7PHQjNzpJcTdiZk4pfGgiT01fOjRefFszdCYmXiQqWTkjQFdvMjh1JlVOPF5wYTJeLCxEY2xEO3BGW18rWmxWSztZL2NgcTxvKG5dS3YxM2pTcjoseEBdKmxgN1MjUTokV1c9JWFwLHpPfUVGT3J7OEszYzxIdm5t''@;'; put 'put ''fFhedTBtK3NkdDYkOkZ3I3I8TChIUTNIZEg1bmh1RmpyNGo+SCtdIUJFTV97KmxTTHRBQG5+PyYqYCh3dkBDTWBVX2h3TkJwVGZCMHlpW3BCN200WSZyL0FeRjAySWNLKU90el5WeyklfUxJQikmfkN5Lk0jIV9rfl5Cc2U4RGUjVSJkdVh5UnhdWjc4Ojw2RyV8Zi4jemxNO31XJTU4SExPNHAu''@;'; put 'put ''bH1vXmw9bjRRTXBNU0hHTmNmbXooXktvazNgW0ZoIjV9OUJKKjhbai42W2RFfmAjY1ROb1I6bCEhb15iOj5TYXZYdUszKmRfVHBSRHljKnliPEAzSVpxcHcuKmorYD9RSXJFcXBoJCR8WXFwd21UYCk7YVpsSnhMJXJ5L0pJOC9gOzIkME1CSWdRWDNsX0I4JnhtRnUqMjheSzN4XWtuNWdKRl9V''@;'; put 'put ''WWxsfXRRSVFIUFQ+X15bXXFqLG5qUWVEa0d2d0szZ0lUd1kqMmFIJmRYTypvRjJAKUsxN25QWEdPcFpSdUREXkhgdXtELCZLb0VJTE1GJEM4S0shZC49QVlfUEgud0wkYjZ3RllDMT1+ZXxHcFJzJU1+ZUUqZFNrbV1Sa2tDRUxMeD1uV3IwSnlmOzQvSztyLF5OT1g0bVIjKiRJZUJ+R11KW2NN''@;'; put 'put ''YSwrRUt+QztyeFFoYSxRMFdza01Fbz1mSTx2ZndfKUVyNEY8SyNQVC8qMjh1ZHZKYnUja3oqIThWV2AsJiNaNHkqVnBeLCZzW2VrXXpJLzVtIiZ1T3dPX1tba0dee3gmJnpyNHNaPU5GXmIzbmUmZTdCLnEyNyRncklycTt1WWIpUjtiNTc0Z2B3PzkraThnOzI0U25jV3U+JmpMV1ElYSsmezw4''@;'; put 'put ''YUY6YEo4fWkwVWA0QzpULF5aU3kwLi4sKTJFckhnVnhBfDIuQUZOPnMrZn1EIVo0NTxFdHBLIkpHbGh1fkhVbjpEIig7JEB7d2krJmBVYjZSdGIkUVhBPTlrY1FsblI6WWJrWylEWG94UWglNSNgNl9RP3sxM0xJfWshTWtIKERnVnRRTElfQUpFYWRiaWp0eDNhb3M/IzBhMEVyeCZaUncpMkhs''@;'; put 'put ''dWFBe1hLMUNwPXd3d3JVS1FBR3FmKXFUNmg/aEwmJWp0PE1hcWh6MHVzTn14Nm92TS5DdkEoSjJdfVVFRyNtc0tGaCkhQ0QiS2pEXXdhQSNNSzFxNV1hS1JzUGJwfFRCcD13Sm8heXcuX2hNYk5KK1U0ZVRIZ3VTcVZ6NlpbeFBXPS9DUmBRQ04/bjxgSkYveFpwVjp6ZyY/RHRbRD10QFdgQ11k''@;'; put 'put ''cU9dYGx4T0YveDU9Qkh1PnJvNFRxVUVvSHEjejNCIks8JG9WTU5kfDMmYklJYG8kaHlSKl0sL1NXR3ssOEhsPihGb2k7bEN5RnAvR0hILGBJZz5nRVhqbzhac3N6OHgla2krS0MiY3wwa0pKSzhPT01KQyp5JS8hdF1QN2NTKE4qZVovIzBFbGw+SixCNV9WMjomNzR0XlZzTHNpbF8+eVtMdFF5''@;'; put 'put ''PCpeJnJmTz02dGdPSV5EN15yIzIhb31SKG49JixUOTxmQGdmJEc+clomTFcpeSVYdGFHKjlLfEs4Nks5PGB7Y2hzTHM/NktCfTtlV2QicTQ5JUhbXj0/SHN2InVzb318cGo7NXJjZ247IkFUVSxlV0Z5RmtRRGtrQip3VXtHNmpCM0NrVk1eS0guNiJkRzRCOHE7P3JqKk9Be01LM30vU2UkNCVW''@;'; put 'put ''fDJ3UDlvJHRCVEc7fX56OjxiSHhyRzBKfGNmWzMxM0BVS3sycmNAfVUvcjd7aTZjP3IqN3lxRWB7dXRxWz4zQ2Ykd3VEZG04a31APEp6RFdZbEdQYjFycz5RNV0xN1A2S2dwaU1MbmAsMyNoJmVJSyNvKS40ajlVJDM3QCRdMWEoZHtydEhxMCIvN158KUByZltVaVNUdzcmalNqPWhxJG8vQ0Y7''@;'; put 'put ''MyFOUGNpS1RVN1ZlVlRVYmBjcDtJYTA/cHdSWSZ0VD50KGddZkk6b3g+U1ZJTlNPUTZrcH1Gbkcmby9EeVhGfCxvPjIpfCQ7c3J5dktbVU5+azp7Q3tSQWJOLF9JWUU1Yj1eciMhM3wxKXpfNjRKNHtFZi4ldDZmOkxseCldYEhMcFN9QHVUUX5wS2MkdHRYbEAhRkp2ZlQsdG9DLDYyOj0iTzNq''@;'; put 'put ''PWJQUUlhRkowbC96USw/O2I7O3phVDA0emlReGtYfiVycWhJKyFmLEoqWHM4a0gpKHt6NEpdTlojfWpYRDJacnFdL3p4YXNpOWE6QEZaQTIkOHtue2Z5QG9+JXwyS3olVkZ3I3YiPEA+c3ZtTHtLWmEzflIlST41aFpMU21vdElpL19ROzNSUzxhIT1OUilUUU8zcEU8Pj0wJE5DM0QsKjl9dUNP''@;'; put 'put ''dGsxenJ3JURTbkZoTU9MOmcsKjUhNUtMaEFDKzZrfkxMWG1ERXZzTzosaX0wW3BMJHZQI2Mkc2h6IX0mPmNdOz1pYylXITZ6NGtSTnlHPlEycWIvbihDV3dgQFVOPFshS1J7cSpYI1t+NC5zKXZgVWZ6fkpQfmBSOElhOlV8Z3ZlKGpOR2okTiVkOGJHaCw4en4rdjZqW0tPNTg9cFt7bjtZPl5h''@;'; put 'put ''V3BRUGVMbFFjdj1SXipnWGswcWQwKXE9e15iM1JkZkdZPXRzQTwxS3syM3ZbYUt4WS8oV2dHI1dWKn5DcmJSfntldmt4YWR1dGVeNGh2TiVGaTtBQzxrTiV8dHA6b0Uyc0t8WUJpKV5GRnNgdyZ2cSFONi89UG1dRSFNbjxoclRAIzAkMXBZaF8+d1pAYiJ7ciVuTEwoQmJOXU9VXiRKV2dKPzw9''@;'; put 'put ''LFdIbSx7KXZ1R35wSVY4dW5AZEJYbGZSZDxhLjk6PCJwTGhXd09peFpufE0mMXgheXNrIiZ6MCl5ZUc+cmM1eGMseWFZJkUmPzsqNFdPUC5AancvbVV7KihOWFVZcjt8OyU4Y1M3QGd0QWp1MT9jVmBxUzJbeXJ6NCh8OiwsR193NlQ9dU05Q3BMKXpJM2RjOF5KUzk0eH5ZU2ApPShmJl4uSiI5''@;'; put 'put ''TzczcWphcylFUVRgQHtFYntkS300OipeNTYlXjdJQXVOcXxeMlFpWUpULmtlIXZLO2g4UDp6Nl5ZYjEqTSohSVAqMHIwV1tLNipwOCI1bll9WiVrVCwoLnpOYl8vU0hYVUJYXWo8OGozekFxQXNnQlovaUZRN3FTekgwPldafU0uTTF6ZGk0Pkl5eDowNTVXW1ExSiZFb31nNjZeP2c4RWJfQU0p''@;'; put 'put ''JG19T3QlXkB4cStvSEwoY05BPDE6NXUoRnRsWHRAe2dIWW41PntnfTlIZ3Uwa2V1XUNta3VaP1M7ZlchJUE+ZGFMV2x3cU47c1FiIU9RRU8jcl8jR1hISWdPYH1OcF9Gc1UhUnoobl50ZTU6aCNacXkkQWxeJXVqfGA1MkY3e2NZNyxJaDslLlBaKUdWeld1I10qWjVzfHsvQHdxMzJkMD5FbHZF''@;'; put 'put ''Sykwck9tQEQsZnMzO3NzVTFReCojYXorMV4hVVckYUBTKyg8K3dbZEdQPjhSTVVGNDFWJF0pWy5HLmt7UGNDLHA7eXNuO3pGfm0ibjZqeWxzU3lTfTVWWltlV0hqYTYlYFtOVCE1NyRGOSZqdXhKJjlFYS82Z0lRZilHVlhIN3wrIigvW0xLT05GWVJMMTNbPD1VKE1GcHFOcF1DXVlJWiFXQFs0''@;'; put 'put ''aCl2UUIzbltLdSY4MXJ7UnZvfkVWNSoxLFImKWs6cElLNn54RmYmVzcoajRlP1RlRUA+PyRrdWlqcT02TlAqVWRRX3ZgSDQjLHovTjFRSFQ0PUFPMX52NENDbjZwKmY8ejhOQTZFIy5UJlZ1O1VgaXpTfW1SVlQ0XkNJciN1PG9eJltNNDN2dzxjPkhfalR4bTRmbjchQDA9ZFR7cU9iYFpVdFQ9''@;'; put 'put ''YzRLV1hgLyM6bWZEYUMzMiFaLGxScnVYd25EIl8kbio/KDcsWT8lZnttO0UvPyR7NDMjNX1AKyQiTGFxUlZfJGNEY3JNQHY8TiVhYkgsdyMldGJfdiI3PVY5cjM0P3FnTCU4PDVReiQ0Uipxd1JXSFI4MVNDOz9yLyxuL0BNTkp9MXxwWGdFYVhEaG0kUnpEbFQ4WiEqc08vV1JmSCEwalF5JkYk''@;'; put 'put ''WHA5P3thc0xudzVtUDAxMmxXX1opJDd1a0l4JmxCXztwIksmSUpQWlhRO3YhPj8qc2R0bGA0Jit8cDN+SHlbW35TPlR7ejIiemNiZ2V0TzVxbyF4OyYlPChsS1BuVSltPG5AYyMjaTleUUlrKTlQZCQ1bll+Wj04XndMUEh3VktqY1ciV0JVbitCNHomST9OcVI3KjYvInNsL05lNlJKXj9SOjRe''@;'; put 'put ''c2thT2hLTXs1P1VqblVDbjclXVtjZV1tIVR7biNzTmBGNTdtY1dHWX1tYylALFtAZD08IWI2d1R5RThJOjo2PG09dzEkbi8yWS9CPj9sWl9+P0YlbSthRUsxMmpeN1JTbTpTMWR0ZTJPWENOWzRkZCEiPSQjLG41b0paXnE5eEVMLio3WDpzJEFxRkgjP0s0NHZYJmFAYXtNSWpUYzFpXnssTD5I''@;'; put 'put ''a21veVVPOXheS3VVRkVuVig+K0pTMlRPMjU8ZWYkfCt9SGhrSV8hUmE4fC5UbEtMKGBUcG1CUVN0Li4uRjQwek9kK0VrMUJ1PktVS3JBSDp7YXJ9OTlBcj5BVkt0QWFjPEJAdmBEV3g/RCx9bSJnTXh9bVc+LkUuOX0qQGxmT11GIkBbQlpkdTk/YFl8WHRGKjN6I1M3N2A2ZU80Q10wTiVtWVU4''@;'; put 'put ''cCVQMHtqenRYJXgxX1lHNW1jUGhDZmVYUjB2QF4ob29MS0o9ZEFCKzRXMXN+ejwhMXN0I0omUV5SRzcqfTshS2IuOCJAMHQlKEF1eTFEWWM3VjVRYkUuNlRdM2V8ODNYa2prNjcqM1tVXiN0dE17WX1VUE9HO0pLezUkUFNtWWEvV1RrXXM+TEQwOVVIYiZEZy9CK0loYC8iNUV6MHFwdzU3cCo8''@;'; put 'put ''UUtSY21iJG88OzY2YlptbWZwLCN4RnN0cSJDR0k7eTVkcDhSWTUweWQySCl5aXRJNUQpTHo5aUpHTVU/Q0BwXzZ7I2RyOUNiSW0vRztiSUdmcH5fcVIqNktUUjI3fTg9QkwrQXomInN7JEB4RGRNLHRmQDI4VFVSZzdMYUQwTS5uZ3JGQi5CbEQ6R3dJcUdDUj5oLGtGUjBNeDEjZkpzcHdhM10r''@;'; put 'put ''XyZhM1FhS3BNYSJNT2wwU1VGaXo8KnslWTJLJHZZNjtqb3hRcE06YiFKQDBlfFNEY11iIyYkSEhxdUZSVFAlZFhyR3V7IjV0Vz1aL005SkBOO0VvZmw+T0VvUlFdZHlEJTouP0hfSkdSSXxOYXd8aDY/dFNBXmV4cUleYmlHfngkV1trYnd0R0VOb08+UWhINm5TVlc5aykjbkI8YzEycUNWZ0xU''@;'; put 'put ''aDlEXURTano3fk1SfVMmQE1mKV9hTWFpUmM6eng1Znl1RE1SRHNDIypwZE5Wa0NILkRaPyt4UVhRalddUiImJWJRZXdlPUJIWmVEXVkoV1trNGNiMTo7fnRiZTdqWDZfKFFlPiR3cypjLmYpYWYxJjBRJW1ZKVBIOV0rYjkzY3N5QzhRWyRFRSZXcCteWyx8Z1JjP29ddWhLQlhGaXtGZCNNZmxn''@;'; put 'put ''Lio/RlFtLjYhO3BxIUBvbUhIcytHKjMoRy48a2E8a3ltTndeTWI7ZHVlVEUmW0BPdl1gJk02TVl9KVZ5JlA3X2NLKTZFYHRGPXlNbyNQTXtVPjA3T2hlMzVSK2NKfTVSLC9zOytzRiZSTXtiOGU7Nn4rZD1EdXAhV3dCYy9EPWEwaUtZYT15Ym86bG8sKGhGaDJkMXxAQ2UmaTJlVilqZzt7Kyk+''@;'; put 'put ''N1YsaTZRV3BIakpBLzlQYXg/YT9TciJOLzYsVktOLHBqQmM9dVNdRGNgNGtWZXVQYDF4YSlBfTJwWkhjL15QM0s9RkN3NTFWe2Z1SGghdzdrLyFYZD1zdkA5Pzk8O1o3Q3loViRKd01hRVZSby44JWdOZFFjOlhWeSFAUjp4WTd7WThtWEtvP10qYlo5cCtIcXtxdilaSVluXlooLj52PnZaYixw''@;'; put 'put ''TkZYaSJXI2JUa3NgM0dRODhDc0NeZHs3bjNJaGdxZHlZdzYwfiN4KTQjQipWajAsb3R2blJ3OSVRVFImJF9yWnZPZzVgdztNQk9dMT1TdXkpeGxjX2leLzB9JmAxayNnbTRyKCUsYlNDdz0pYTwkX3M/OFk6XmNZbHd8e3B9O3kxLkQ6PXwuUlFdXypjIWs2VlJIejZxRXhiPHFnWDxgJWNqeFI/''@;'; put 'put ''a1RlZ1tXemdoZFh3fUEmdWRrbGBhY3JTbnBFYTlDNExkfTdGNl9TY1cuKzssL0hPMHlVNGNNfSg3PlF0T1UzJE1aTWFkTDZhb1B7KDZ6Zyw/NUx5SSZJUipMdjZBJm5NYUJGVls/Y3NpdSYmXjYrYU5BJnBkdzR7Q1FudTlqanI9OzY2YnlnREc2ey4zZWtnKiZJaE06eHxIZWRgTWFAKjp+ej8/''@;'; put 'put ''L3x3ZF9RUCEqUmh+VXVEdTpxdkB4RihOKmJjT304RkNYd3UyNyo9fUN4aX17Y19DQitUNCtGQXlwOjRsOE9aeCxfMFZ3SXk/OV0iYGtlNHM8ISY9THJ1WzxwKVFfWzMqcHZXQjhMRDVVZE9sP211VUE+QkJNP3JuO2MubHRoUiwxZiRxPD9WbntxLzYiNXxWRWIqI3w6NCVJY0c5YVdHYDU3a3pr''@;'; put 'put ''UG1vOlB5JGJZZGcwUSg8fDhjIlJwJmw/d1lMeygkUzVBMkFWJUtFdUpKYElXMylSJiMjZXBUcyNbOUlXXnNralcuaUc8Wk82SnA5eiQ/dV86UUhSc1M4TlguJiQ/U3g3dUh1IXRsfGlbbnRjemExenJgSlp4Izx1QnFCdDpJR2wmVz1AWVY4Uk17bl1yRW1RPGE2JlF2M1hMV2NuPXkxc2FQOTk2''@;'; put 'put ''LiZTd1JeUV18VGY/NSpnXmJwXXVveiheU2hwI1FbLkZeOHoxTG1HS24+V15GeT07SkskWCJndl0zcXZEISVBZThhWXJScmJiKHUwcSpXM3tzJjcrQF4+ZVk0NFYsPW55M3RgJF4vZlU+NTFRfWpiYVZkKVUqPWdyRSF6PSFkPmc2QGZjW2x+eUJlajAvIzYkLF8qUSN9Lkp8RnVUUVlfeDYjXlV1''@;'; put 'put ''bzNUK01yZCkmOCxtaDpqYlcrPWZyOCpnXlsvbT9HI0FuJnNie3xedmB7XlhkRDgqZWZsKChXUz9zO3lYRiteYDIvRWl4PjQ2YFdCK2s5JkpyWlNNe2xxZ0wiJU89d0I3US82cUhpKHhgbigoM2hASl5KNik9eS9yd3JVQT51d1MucipuZn5wQiZvaEB1fVVYbDF2N2JeWCw1RWAkNUpnT2dhVVJi''@;'; put 'put ''am8kTDRpRyFgMDxrZXh7cCZTZ0QyTitnJj89MCU6d3xDT09dYnQhNXBwQm4lNTBkTF9+X3o1Kk9xdTp5MSVQPVZ5bXlUVU5aKCJjeVo/QUJCTHdYSTVKWmJfcz08UkwoUiV3PXBTXUwyJlhrc2AzR2NoTHtlODlENyp8bGlre0lSKHwpJkZAKD0oTV8vTDVWRzVfcFMxRkN+R2A5S0goTiRDdzwq''@;'; put 'put ''ZyI0QSl6cWFOOFE+cmEmflpHczQsdCtKbVE8Skt+Tj5CPl4oOXgkPDFlWEFVL2RfcCsobW9HRHQpYHRXcEc8eWJXTjIqRUNXQkFOOzk7SiJFRU1SX0ZldFNRclsvemV2eTdSOTpQLz02eWo+NUVzeDw8IWRPM2wpcHZRVmg7SyZ4LDdAQ3RDTGp1Rn5KLll1ZD5GIkVza09GOz8+T1Y4eC9iT2l4''@;'; put 'put ''ajkmMEdSW14rLj1ATTRRekM7dUpoUjYsTik0VTRjKU1eRCssN0dMfShua21rfGs2UylxT3YxMCpoREttamo2LCxpKz80ckpTLE0zNyk0Z19NPllyK3hLfU4jZDMpZktweUpBL3xoI3Z6XXd0PUAofGIofjNbUnpeQ3dKRSYzMTd8LkVUfjNzN29RLFBjUV9wbkZCUl9wMn1ZT0d2T3pYd1l4aS8k''@;'; put 'put ''W1JlRHtieHRDQHcyZE92dTF2Im9RRitvKThVbV1rbGpZbW9wKEpwck5gQF5uL2EsPF5nQWVOOj1eJUoqQElOXnV+QGc4K2RHOVVSZjhGO0MjImdzXXd8YHBfVWJwWnFeW3huRlRmTG00IiY5JEZlN1pSSSImJG9NPzI1JGA4XTtWaW9WSDAzViRLPUdxIy86OTpNcFkxSHYrRlo3VXtxOXc8X3tD''@;'; put 'put ''Iz1XWnwkNm1eVXlVLEA+P3V2JSQ5PXpdVypZUUNAeCpkZUQ8TElIYypXR1lXYig4SzM/O11STnF9a0A2SDBkY0IwNzE9NGwqU3tUanBOM0w+Y3xYKDVPWCRpUDVYTUIwJSJ+dnM0JVd1cl0lbWV0JS8ybCVFVklFTihlUWQ9Q3VrL19RWFgiQ0IyXz80emJzMnp0JTA9MltpXmw7M2RVL3ZfMHI7''@;'; put 'put ''IiJfN1p8WCw1KiYwNX5dYyxvI3ZpKk1PaHRfRUAkdkRLUEdeVV9zW0NMcHF7bT5lPiN7TVs3NXxDIz1fSWc5OEBkY2tFIkZNRVskPyFbWDBdfiUoVTtXUVI3MSI2emZVbTwsbi98JCtWO2R9UXFCYldBQ2JvSz9NKkxAVEpMW0o9QyZ1VzwxOis2eGdidXJSMnVURSJOTFY6JHtkI08qSCZwP21j''@;'; put 'put ''VytCfC5pPSFfVmlqJjg7PS9XL0kwMSNXZTEoNTUpTDQrRzA+YEtgViUhQSpBXihuXX1JMG99M3hgQ01jN3h0VCExMD08SVJvX2R6LFBAWzw6VTAzfiUxcT1tJVc8VCtIM0IreWl0fiZfVlUkRTBhZ1QpYHZpXzREM1V6cH5wPFtfL1JEYl8uJjVEKHdnb0YyNns8JTo5UiE0TE1JWz90azY8IUY6''@;'; put 'put ''b1hiUEQ7O2VufHJDb1FjRHxUSGIxbV95PG9oOmVqQDpeImg7VkEmQ0U0W358fj9nI0czalY/L2tWNEcwWm0xX05qWzt5O3BCaDpXOG5ld1M3TUl1d2NOMlReP3M1XXBORCZGKm10ZCRRLDlxe2w+RmNaRWBWOzNBSW03b3FBeC9zKnBIUyI8el9UOjlLTEk3SW95TDZKakpSaFYuOmNGY0ZhRmZF''@;'; put 'put ''dVFObVQrIWZBOGFRMWdfN1g9OmkyNXApVChhLm5sV2pvXyIuL1hOSm8+Rko+UDZnfjNEJnVZR3xeaThkLl82QyMvRUw7LzZZcTtIOEFiTjUlTjNEamkoWiN0PyQ8aXE2P1tTOC5GfjpWSmMmRUA+eSEwL25NYmpiOTAvbmx7VT5KUkw+SlJ2aTBJWTJrNlVzKSNbWFJQJDxreDw/WmpUbVE8UmdB''@;'; put 'put ''JF1HPlNARX5EMz8keykhNnszZDJ3UHQwLnJgVENbMF96Q29jPnQ6eHxrQ1dIMn5xR317U2RiY2hdUHFjOVVpYl5mUjpQXjpbMHE8dk5GInoqc09EVyN7bzN0O3ZqXSQ/JmNMbDkoUlFLQD9QaThKdz4wbWIkRmNMezFiZG1CWE5tSj00ZDhyWSZIaVo/KzsjfUxhQWJoRCJAKU1LI1lgRnAjez51''@;'; put 'put ''PF8sWztfczxRYXJ7dWdBYGJgV0AqeU1GbHojSiR8YFlMakN4UmV9Rm9sciEvLDx2eUQ5M0ZdI3NfUG0oLi4+UnskfX08XWpZLj1hV0VfVz45bjA5fkM7OTskbWYmMyo7S08mPiQsUX5IcXxkUVpXb0plUHBmVFZTN1cwJjR2aFZrWXtxXmdBOlpoTVpBZXk5cClUOHxxaC56eHNGVFVHfn54amY/''@;'; put 'put ''MU5vSmBmdmk3RkVFJiNKQ0hPTEdWY0kqXldRLGAwM1p6UVZYPyVFfG53N2N6emd1TFskNVFPN2R8WWhhd2F5T25hfHY6VWQpQUl2ZDhyVztfb0pGTEIyPWc/YCFAaHJJcztTVE9NJSJkXShiX3pKLDYzantBTUteTGxONnF0M3olOXlBYl8hQVllS3gpZTdSTXolMHdTPXhjX1tvJF84WGdxZXYr''@;'; put 'put ''ZXdpMHkwMFF1fjZhR2FFeEZQbV8rayomZWxGd2ZOVSZlbEVEZk59ezVjQnc+ZUN3OjB7b2RtaEBmbUJ5LEFIK3tHQUVSYTBTTmdZPTs/I3UuI3gxQkspQiIibipLcWMjQj4lOVl+cjk3SkA/aWU6NnsjZWMmX2ZePTo2P11FL3xqUUp9NSxmOFpPPkhINjM+W1AqIyhZVXJUXSRaZTs2M2t0VWFs''@;'; put 'put ''NV9PJCpeUEYjcXk5Y2JEc3hCLihPeHkwRn17VilfZHs3ST9PMWFdYTpBPm4hKiYsXUFxVnUjUSZmaSxMZiRnXT9uWjZ2aG9zPUc2MT03fnRMV0Z+dklZMURGI3ZIXSJ0dEpLNCRlY0ElNSZKejV5d0t8cEEjNzA5cD5ydyY7Xm5mKW10M21ScTlebStQUSRvUVp6JmVHLnklLzRkUVY2YTFOeUpZ''@;'; put 'put ''TF0/PW1ncWR4MCNyVyouJEh5I3JLOzlPQDZyM3ZnPVt4cXklJS5rMmV9O0o9eDAvKHwzYCRLe1tQO21ba2l0fS9Icy55anEvTGg3a2R5VS81MytsJGhDT2EyT2JeeyJPI1hEKjNTb1ZENGEzKXhhXU9XTjBNaGNyVTR9QzRMfUtNJV9SJXxRWyxSLmQkbiJFXUheYiVrPlNWaVtnZ3lbQHRTV2lX''@;'; put 'put ''JUBAQzlAaVQrTX1DT2hSUCFwKkdTUityYEMxd1BXUWd5PUAiYlR7Z1Z+fEZjKTFeMEZMSTZHc1FZfk9iTDU/b0IxdlAkQXdYN0plN2paOWpJNEghIzElOFJeWnQ5PnZOeVliWl4pLDx6Pi5raWxlXlooYm5tMDYhbGFiV2skTEd9cnlUYTlGOixAOFJdNnlyTTVbL3B7RD48NCQ6L0t8amhQWEoo''@;'; put 'put ''NTRyfVRbPVgzMTpvK08rbXczKjtqI3BveHZqd2JdW0R6UkguV0NQMWp9IW9KNldUeDI5MV9CM0VCa20ybEUzUG1TIiw7aXBvLmoySXpJO2ptMnAqImk1ZmVFOypfTStaL1JCRzlReF1YKT4qaWFBR3syMmBiYkwkPHpgX21xcEQ1M0I3XVRNey51W1JOMStQQmZHODVISmhGclRpPUhRSm0vOEtW''@;'; put 'put ''dnJPdVFjeD5ifHBtMSIlKTczXj8zLlorfFFoflBeUltrSTA0a0h1WVZmXXh0ISoqSGw6Z350Inp4ITJQQ3ZVMHEsIU5rOTVSezU0bjFTUlIpI3ksMjwzJWwmOnx0TnhheFNQeklZM3IleyZEc3JbfXooXktOck9+UTAmUlJveXx1QTtbSTBYNjp2WXBNZGByOU80R31zSF1NQyZQM0VGUn0xXkNl''@;'; put 'put ''PSg9KGQ1P1QlLnlSOlBCd3B5fVV5fSo4MjBBIytQfm9KYVNkU1I5O2tlcXxtOTpKXy5hUWxSOmxYRXh2c3hkOUBYWHIraVdIWGlKNCNPfSMoVTVWSV1JYnZnV2ksUCIyTzQyY1clb2N5VWJqV2liP1dpSH5PMXx1cH16Ll51PXw/W0dvWilXZXdWXXQ8MlFYbllnLkgjQ2loWUEvdFh+QUk7ZGsz''@;'; put 'put ''Tipub3hqW1UuSkJUUjdjOjdyJTE3VXBGb05ZKG5UI0B1e0JAekRDQHpJI1RYRE93ckYsV1VnbX1OckFtb2hESDdfQ20rWCZyanh4aHBvI1BQeDteIWRPPUlXfGR4ezA7OEZ4JjRYUzFuJG16KT49Sm9wfXpmbXBfam9yeGN3KUdTQzpnUFcpYiNLIzs8KzxiNnlVPCVBckk9REBOSShGO08jOCpi''@;'; put 'put ''OzgzMFJ3KDlrJDcxQmxOMCtSIVk4Ljg8XUI+W2J+IkI1T198PDJtSjQrNn1+RjBSQl86W3o4e1RfYGY8cS9ESUhsPzEjRHY4Q114M3tXV2gsek98cFZYTDZESWdUWDBEM2l9VXp1TkhxQEU2bjZ5ZVlSTEEuS2YsLD1LSisqJCRDM2RRdHtfT3c9c0g+XldhK150bHR9RFZMY1ZBYVNpdUhKNnR6''@;'; put 'put ''YHN7ZGoxbGgha3VvUSVobEdlRGk1dTpFZ1U2d11dQHlFfjM2MT9pZWN2Y3BWUm5acVE+eG54e2N1M0AzQyFEUmFaN0BRQzxbaiImb300dXAyQUZFc1VROCRvfXd1fisuP3dLPnBuZGJ7cCZvfTJ1QVtGSGE/QndeZjZDYl9vZ3FhQ1dpJGc9eGl4SGw8ODEqLDgwSEI9fTRxUX1xTS5YZUUka3Ng''@;'; put 'put ''cjJ5RzouUWNYRCJAQ2l8ZFgwRVMrLk0yaXwwb2pkOj1WUVlfYFl6NUBxMHkqXz0uYVNZbn0qRD44cy9vc2QsOXVPVkNbOyJgUCZOTXQrTih7aEM4Okp6REQjN1l+Xz9FS1pFN09mWGM5Z3VTL3NyOWdyfFBzMG9LZC5ROnJwX1FHdHFBUkRDLm5OUDJ9ZlFFRCNuKWFpeDNBIzQrQWt4MyJDQnVI''@;'; put 'put ''KF1uPlkyRUdrSS4uajVONG19cD48Nz9lNTdXMDk/JkdnR2ptVVdkYWBxVXlsPVlgNHtMfiMkUzdPPSRicGFHWSNSNjcqXUdZXzJRIVVPL21xaEZzNSNrUS9UTVZDO1ksUWJ+OGIwUCNQUy9tKCIsfCtpKmpmPmBtYFBnTG1AWyksZT5sY0Yqe1J1VXlkdEQ8fXteK3tJdkVIdjk+ZUxPflN9TSZV''@;'; put 'put ''ZDRwYUYwdF88fTNbN0lrMnlnUFQ5MER1UXsvMFo1SUNfJHVULDRJQ3MkbWdMT3ZoOiswO09YZEVoaXlZOUVbdGVjNSFqLEhhVTdUTmgzdHBDZC5oYylkYy5oVzVNSSNTN0R8JCQsIldBPTdCaVFqbG1HakF7OV8wXm54ZXFaPk1ZTSsrWVBrLE5nMTBiJDtpUklgUXQqbis9UGVvXiI4UGgpamp0''@;'; put 'put ''ME9IRD9kZmJEdjRIeHFJPSE0azhIKmcoKF5IZilzIzwwTiVwdDhQNUIubjVZMCteTmRPbFIyZDVCPmE9MEwlcHRjUDR1akE1ZW4saFE/aDdEcXRXeFU/RiRaNUx2bkVTZEN1Jk54JXB0SE9sKiUoREhnb14iU05nbzhCYFEkOmduZktVYXJVWUdjLy5oTXclfVNZUnA8SmQiU1BRKU5nQSlwTF9r''@;'; put 'put ''ZmVlWU9mM0dRZn1PcClVKV8kblg5fX1QeDg8dyw0SnhEMT1feShANmdJWG89PChOUlhbVGhJbClLWDI9OV45UFUsXSQldCJBYU9aaWxnVDI2R3hAOTpjT2NQTkMycyZEL1VsRXpoLzVDO1VGeHQsKkVMOFgvbypeTT1dLDgwXiJMW35VeEh5PzBeW3pdIURHZTA3biYyT185TkNeOUgzWXpnfGtR''@;'; put 'put ''MEZSYXJMXzxRc0BRe14yTCg0QyZhKGhecjo9aWFbbk1xZCNMZ0A9USxyPjcsfWw7QGwidGtJazx8Lk1IX2lqYjJZMHo3Y3JSeG11KkBEaE1hb2F0UitxQVJNIV1udUl7JitUMHhkZkhGXX5scExKSWJ5JTtPMy8+NWV3KW8iTkpqLC9AXmImZixEd0swb3kvJSZifDNhXkkscytwQTZMbG9jL2FO''@;'; put 'put ''aFQ7e0FwXUZNbHBtVU1FVTEsamNdMl4scEFdKHwxOXl7aFBZTW83YUlkPCQ6fX4/W0U4dC9tQlg1NUhNSTpfRH5BPC9NMUNuIUNuKDlDMTV6elpgLGJIbGJEZnJ0aE45Xy98THVXeFA/ajVXaGFMVzQkc2BIYUFYXlk8QCoqQzNrTzVKZ30rQVtKKTlgUzc7KDE1JkNUMltTTEYjZl9GUWIoVXAi''@;'; put 'put ''M0YuLEIpclVWQzpwMl97LF91P29wOW9MS2N2Qnh0aE0yNC9JKl9WanFsNWVRak17Q1R9amE7TCk+e0ZoYWA8YkYuO0h6XWxvQFBVSn1mM089UihqMURZSTcxdnp6ZClzbHBUc1cje24sRjpeNDN4dCVbMm5iQyxENiV0Q2M+bVt5eS51VG4wYXtCL3BkYHpeMlteaF5+VyVkamhLfkMmMWxrfEJE''@;'; put 'put ''JnMrLywxK2dYMUQmV2QvUTFXI1EuTl07T2Q7Uz1heS93Z2FNaUlCRH1tbCEsWUkuKExUbWhkVn52dl9PdCk3cThnWnJGKGQ1TysmcFN9bThZZUo3VVFHVH16WDw7YlQlRT5tbXkrNXprZ3x6Xkl+aXdfTFZVaXJnWCtofmRwUE5xdjVXST1iPm06RnUkMjdEdCF9Q0J6VFF1ej9CaDRqYWMvV1M4''@;'; put 'put ''eD1ZZ152VXciSjciJUFEPj47ez1XdEt1UW4/YG87SWs0VTBLI24ofj9ERkRDdjxYRnYqSmNxR1Z6XT5oSnh2MjRObiJ8cDFRPUpUVl86cCpgQSQqXSJsRGArKTpPXTkzMy9gMF42PEQ2RzRjaiRXOH5nMj08RyZpR311LEx3QjYkZ01LV3M0YlBBdjEvQDJsYGQ8XnxfZXwsXjldITR2YWxfQFMh''@;'; put 'put ''TVBXeGRQZW8hWH1COjVgSDJrL3FdcW5PMUBlal1wIyooUDMwJElFTj9jV1IybXlRRHNda00lbVk7cm02emoreSsuZX1BPmB6a143SkpUX15bIytRejsuNF58Mm8hNkVBJnBASXpEeF9CLF1XazFBcmVpOSpZKm5vRXszMTdPQVR3d19nZlVbPm8zIXx3S0VEOSxJSnpkb2gvWXkrSyMyX3ptZkto''@;'; put 'put ''KjU8ekAicHgzIzEvVTF1Y3lPc1A+aVtxN19jeUIjcntSXXJKMix1V19pYno7SGlfN29wWDchST9FIVlyfDZJUUpOaSMsTGdgbENeY3AqQ0FqeC84Nj8jbDUpRGUsKkgqXSh8VlY6MGl4MTgzMSQqbTU2WVhpQzksMSkqZzUreClqPXcmOStzdGhXaSZ8cH5UZiIsZl9mNS5qIXUzUF4kSykwQDQo''@;'; put 'put ''WjVXJSNWdS4jeGdEUEZsOj0qeGBSKkZ+VTMualVpKVdzYEtkfEBfNiEvYmRLIXJxbVNtUWoxXkAzSD5Ja3hkfXt8UStDPnl6clJZbShGM1p9Y3U5LC5+I2csdHgsazdreSUje3JfaHBhQjYxO0RTaUUpKiVJan1uLks4ViNLSX4hS3BHXmViRUM8LElBM1QrIVUjS2d4LipneyFuQzhPSEUyRVs3''@;'; put 'put ''NzcvNGdmUHpJRm8hTzBfcElNKWhETipBWy5TIywjXXA+bmM9aXIxSFl8TG40TTcxImxfXnE/cjdCU0F8OUFnKmdWWkJSQmlHQzcxWE81V3B8OyxAYChaT0diInRVOXg7VjU1bkImYT5DW1EpLEJOekZOeGZ0PllrfFUwVT82ayFKQUV0S0dNU3EsREB6QHk0cnY3fDtdTnV1QFdXZENhNGM5eTh5''@;'; put 'put ''TmNwRjNnLnVLP3JWQSR5Ok5KQnQ2Y2giem47VnRkbmFrPz52b0RoKThuUD9hTDRMPCghcn11JDFhLiQhV0NQdSVkNHw6NlR8cXlOIWpUWDVSQlZjb19SZGwvZDpBPz9jS0M1X3BJO0N6KkohfXRxbFZCeSJMPy9WNE0/SjpGVUVPPzk1N1BDIjBna1VwRnRGaUh+SXNBeCIlWjEoKFdiU1I1X0Y6''@;'; put 'put ''PjxWfHRZfD1Cc1k/NStHQXVwY2dHQ0F6X25PMikvZ0U6T1YvZzJrcV1OSGZUXkhwP3ZNO2RgKT0vJFc6PnBgIWttRUQqRT88VmIpPmIxWEgkNmFbN0FJeih7SDopLj48VnsiajZ7ZFRIXSI9PlhPeylHTyZ0XUttKU5vJkNxbzQhWERGTGY8c0VXQWBoNUwoX25HLld2bnJTeUpiN3EmRCQiQ2Z2''@;'; put 'put ''aXxERF9jVkhtZUJGSThDTitDRE0lbTlgM2V3bjFrKEh1fCFKYFsubTx3NkQhX25POWk+Q1FEYS4iU0hYX2ojRHk/YHZnQXA/P01GdiQxKjQjWltCMWl+ZWJGaGRbKWhTMkc/QSNZUk5HaVtXNEl+RmpEKXIiNngoR1UmN3ExdFIpRXd1MiIpYU1QP1hbN1FBQD5GVHBGPTRZLExiQkZZKi9CRSI0''@;'; put 'put ''ciZDM1dSRiluWjRaRlJYbzEqZDNMZ0FnWG58fGJfYThQZ0NsdDxhL1ZVOl9LUnhlSE5KcEZ9KDJSPTVgV2JxdnRJKkF1eHkpRnUuPE0wdVN0KXZufCZhQkYwRUNGRnZjL0JXPE9xTHNQNUZlUlpMRHlpfGRCMmk8Rl0+LD47VmhGIkRQZEV1ZlJBTShIKEwvVnpqXVFGM2pSaDVIP1lSXmZEfEVI''@;'; put 'put ''Y1g/dGt3bi8/WDxhcVM1Kj5JYUMzQlB3IkIvc3xieVp2R2M0ZUxtaHtHJSgpNTRZbGc5Wj5aWUlpdUA6aEQhSzIsMU49QHdIZm0sQyFiViVUZDRHKFo5LD0hZTN6aVZMbzJrJmhKRSxfUSYsYE1VVzkuOEUvTD9UMn5GYW8xU0lbOG5tMWtZeHg7eFJFJjIpRn4xTGhHZk15dVQwYFk9UUszW1ki''@;'; put 'put ''Z0EmK0tnelgxck94dlBHdFFKRzpQMipmTjB7NnhWajN0OipvZ15ZKHlTej1HOmA4VGBVRW9dTHUpOC5MRUZxfF1EUmlQXUBnXWp4c3A8QjR3PV8qPWhVflllLy8yMmsvaUp6Z206P08lKD1sLncudDlHMm1jKjVVPDI2e1J3SSRCe2xGSEtvOFd8RmA9UUA8R3c8TldYImQvZGRFZzBeYG82LEk3''@;'; put 'put ''YHFhLGN2L0ZjaX5DUn5acUU9X20oPUJfYThaOloqfE50R2wkIWQ5RHBvQGBfUzY5fEghMExtfnBjOHtuLnxvTTk8WiYyN3d8PUYhQFthdU9xQyZQQj9qPDdbQHg6dC4kXz1LMz0xe2RHPSspVi94L2EhQThsfV0wWHszbUk6MklxR2VQYEpmQ3thV31SIXZ0JD5KZGBKZy5TfUkuQThvOEs9d20/''@;'; put 'put ''UllEeWp0JTkmMTg+WW4mP3U+KilscXshN1s9Uj1uY1FwPzh3I1F1W2YqXSlscm16cSF7JC8+ciEsOkVabjc8WFcwalAwVV16MiNFJl5qPEQvVm1ZVF1DLmJTT0VRWiooODxpTF5gdk4vWHQ1VCU+QjhfUktyNERDY2EzMHsqc2shKEVZO0Y0Rjc9RSsubypET1pVJnhMZE4sdy9UNXV7cjc8e2d7''@;'; put 'put ''MVRoJn44QSpgY0lmX21zJGl0NXQjdV8pVkVueEhjKWtqdExYM1M4enJOYWQ1NSo7YT9ndXlzJW8oNjksZF1iYj8wTSwxWl8/ZUVrJlNGTnE9YzNWRCMxPVMvc1RKZWVgUjglakQlOStSRntwSyImUUxNd1d7MytpQV5XeH1lUy9APiVXNitnIXBiWjswbU0oW2ZMaU9xPW9bXiRzKjk6KUsoL0ZR''@;'; put 'put ''dTBfVTdFKF07Uy9CUzorcnV9SUNtQkQrJT5zQVQ5MGRXflBuKEhNMzVWS1JrT154NHl0Kix1NGxJZSlsSWUpZ1AudXhEQGYpTGhjbldjI1FEZk1xdXxiTnB1eSxCSFpXRC94P1lkIyxPMFVjYV9pTUgqZXIwUktdW1E2SV8vXzxIUDBQPTNgL35kPzI+OnshfW0kSDQxdy9PKlNXfWhuOXhXZltl''@;'; put 'put ''UztXJjlWIVZ+MEdAWWpiXUZafXo2fEJwd3paJj5ueVo4LnhWNj1iY184RXNPKyNLJGQ0MS4wez9QZ2dxTHJBPD9NYyFdYTF+TUR9Nmp+M2BQfWZ9RS8vRCNFR2YqfWk/KzlJOVs9cykzYDN6cmBLZEshQm8zXkY0W0pySm1iIi9nfFNoVmlANCltVmlMKXtAVjZTJWghN0AlI11CR0VCKS8wRFZI''@;'; put 'put ''XXtPdyVOUHczOHUoTENwN2tuYU9UdFFfXihCJEMpMjB+WGVqJD8iKTd2Mks+N2w8ZChuWXl1UE1ZfklKJllifFJzPypWdmxkYT9UZSgpSEg1bHhicyZZNnhWZT9WJDdnN3xuZzd7blg8MlMveipWNilfNnltQmhmbGMmRm1fSWwjV1YqNS9fYFhXczFHdEQpTTs6QFRDaXZ0O0FQWUQkPjpWflNh''@;'; put 'put ''QEooKjRSfF5jZFtEQn5fKGVaSkVfM1o9UiREKV9+YFhpZ3MmPUNHO1I6RmJqZ2ZadkszcUZub042RzdOT0x7MVNJWVNPZyt2ZS5uZjVXOVZgUyo1P04jc2NzXlB3bjlrKC9mWiIldCkvVzshbSp2M3Zuc2A7X3VNXXxMYlE1Y0Ive25DcDh3I249MEdoYUImSHh1a21deypvKXw3JDh6RGZUe3Bu''@;'; put 'put ''WU0iLHVXPlFIU2BVIU1IYiVULkY6a2ltLEE6Il9IOT0jQXBsKzUweVJHLn02ZHhpST0rT0Y5Y2F1XltGWl5XWiZ4N1tqaFhzPE9ZJl8heUVLY10xXjIvJVUue0FwSnE+THtLeCRIX0NjTlpOWjZKUU1ZMjNpUmFYPFRYVHYkNDw0alhedWJsczdvLExsPlJpUl4vWF4ybDBTdVNVNzorUHRuZiVQ''@;'; put 'put ''ZEMmajAjYDFNT19CY2p3SWZNTE1jQGI2KD9YWnVyb3ZJQlRXX15+OkJfQXFCJkI+Ql9BcWhpOkp7cCoySHNQKzpmIXtdUn1oNDFDV0A+LjE9KnpAaGQrND48cyFDXXBiZkdsRkohbHUiIik3NHQ9dCk3ayxVUXJja3JYe3B5OyJpJXx1NWl7MS5AdVBQSHsyOlgoWmA6P2okZ3R4bVJaWFp3b18s''@;'; put 'put ''RHdYTypzRTFbNGV2OWcmemR0UygqZ2pjMEwyRSwkSWRpYiNGNkkwL0YwMiojaS9ObFJyNz9PLF83VXB1QCRScTEhM0kyVnh8aTsjaEVgek4xU1l5eHheSyU4ZzYlM2M/TzAxeWd9NS4sY2JNMnF1SFJMJEc9ekJhREFaNXxKJGtxYllQYlJHSlo+X2E8NTdELHVUaEspOH1yUC4/ST55Vl1aVF81''@;'; put 'put ''RjslJllkbVJwSSRldFFRPVkkQ2lhYlc/UCpXM2RkMWUyJT5uTyw2WXEzT19OLDhDWFs5VXl3eWtaS24mb0NyOiVVcyVCR2ArLiZhbVIjcGt1VD4uKnErRms0MGhgKmRlS3B6c2VbJDIvIypQTiYlUCo6dmZfa0U/KyQzeWEkIj5NbCs4QUVJSEhad3ZTOFZxTEtkUUAhNFc4I3pNLyVrPHImUiVh''@;'; put 'put ''M3pVbWw7IXtAO0gyeDFmVShhbUguVTMkX2E9MltsOiF6cXlpL1haajw2JSIrdHRmYlhHZUNiMVAmWGkoXlVmTklCKFMxaWtkOShiYSRxfVZ+ZzhGOWQxVmZ+M3tvZDFWZnZoSmZAYnwzQzI7WTdhfGhtSV15Qzg2JnQ0I0g1SlNhKTBzOn1kUHZnRSpZc0lBQXYoYE5DIndEZUxyWkR6TjU4dm8w''@;'; put 'put ''OnhoIkR0I2tRUHwsXjckY3BMPHU6eW1SUUMpQUJBQUFBQUJ0W2BoMSQ5Wm9fQU1PUHYwdkEpJCFtLn0kYmAhSWxda2Q6Xk41dl89YT1xejlnLkIpPkhZKUAwWX0zUSJHPEdJUUBEQU4uM3ZebD5ofiUhPWxrKHkoK09CcHJvKilBOGEqRlE9LCp5U2R6YWpQMnFPeEwqa3M1RkUsOEBkI2xTQ1Fh''@;'; put 'put ''UExES2lvVnd2Kyhfb1N1WHdfZjJpIVNMPGRCS31VX3lCPHdYM3N7JFglZzpySW1ePUFvWWZoTE9xK0tMd3U5Z1FFI2IzOXlkUDpkPDElQFgqXz9YdV9USGR3bmJeNHt0KWpzWkJ1X2dfZnhbZnhoKyFSNFdZPTc2LHxIJGx3TllSaWFAITM4VSNgWjk2Mj04JkNCfn12N0kpb3xxW3x0PTQxKlNi''@;'; put 'put ''flk/WERrenspUHBiPHFWUT03OTRfRitxXnJZJHtGeE4vdWxkKkIudDI9VEI7ODhFI1UmaSN5flddWTA/Y0Y1ZzQ0Pz5sRUdXUF87OnI6O1hXSUhoZ3xOfCNJL3guQVQkUHR8bGhHQGtxLyJpKGpOWSFtTHpaOUV4Lm9ZWC9JNUprWTIqVUxnMyE9IjAjQj93ajVTMDJQe1peOU5udyt6MUo7Ulp4''@;'; put 'put ''JGIlOW91SzY9QiRicG0mX3dYOWx9UHpSXnZQN2NDcV9ZeE1ZWiR7Z0VGT000fEQudDgjIkt0YT8hNkshQlRpOFVFa2YwOWUpRFhqYWFWcyZHNSZSRCw7YzhmOWI6IUBFUXdIaXp0PzJxa1MrR1h8ey9gNnNPW2luKFQ3VFk/aypRMEo5ZGVeKGs3dj0wPih7V0BCKGAyYG9YUTdGcVZbUXcjck1Z''@;'; put 'put ''P3N2YW4iTl5oWF1vNyZdLHdgRUs0TShbM2JbQTlkPkBoY21QM1dsaVFZQEhPKCtXKVIwbCNoVTwqc3pTSl8xWClbOnoyazNJcStINTIsNGIlZCI1I2t5b3lHVkQha054OWFAVklYX2tmZ3ZYIiYiNm0kKn5bTl82WnJLLip3aS9DdXouZF1zTTJqYzxhPChAN1t2Q3FAX35ZfVBHJWVbd01rfD5n''@;'; put 'put ''VXlKVDJgN2tVemcsTiJXRGAwSk5IOmtNZGYqREA4cmdCT2VZY0BjRElbRC4+bFJjXUJPSzZQd1VNSEhxLyRUd1JtOGk+OyF+JixaNWlGeSRpL0UhU0dIPllqUH1IJWspdSN6Si9ZLl1mRiEsRTosfTomLGhRYDdtaShrKTdkI1s/cnsza3k1dmNrUWV6fW08cG4sfTQrR3x0NmgwdXNGI3IxW2s4''@;'; put 'put ''QkshI1VlOVVTR0hTYFlGPHRhU0g5eih5TSw9Zz5rI3RaKD1TZTd1czslLy5+XVIjO1tzNDtbKDVJL2wmbno2PyJkO0NDeTtDbVgjfiE5TEIpbTAyKlB9Q3pfSyR0XSM7ezpuYTQyfjp3cUk0TFhhRDwrYH0qPVZZViZrNH15Kyh3Kk5vJVB7LnE9eWdTTylAJndeK0NEa3ptUUVOJE53SCI9L1Am''@;'; put 'put ''cHhtJTZHP2VAa2o0aWcyaTs8MjQ3bUszb0V7O1cpU2E0dn4kNWwxNXFCd0NwaURKJSpXKkI1eV9qOzdWODl6WFFWUU1YUENxQUdnYCwiNXAzcn1gaUQ+WndjITlwKlM0eyp3LDpHen5JSGlbaklLd0JBfXZUTnk3X2QsKHpMNXhCVD5+QzUwYm1PY20wZkxhSFZxOVlJSUxmPypGfjBFSFU0UXJp''@;'; put 'put ''TUsjOEk3al05RnR5SzZWOWd4MHJTPTxhNlVaV2xQUCZoZlVsVGtDKkI1aWpuanlvKnx+NSJBJFBYaWRaJjU/JDx4P1VxNj4jKTNTRXw6RzhFZjYjYGFuNCl8UDVDajVLbmhwMEQ+fUd+LlAuNkZpZDBlVGovTDM7UD8jaD1uTy8rck5mK35+Oz9eKHc1fSpzPmhbfDt3SmtEJjIwUjUrX0VCTlox''@;'; put 'put ''JkA2dzdLNlg9YjprfUZDXnw6I3o3YCsoLGVRUz1fLDdxd3EkQEoiYngsTyhYcSZpX04lSHIhRndHMHlnMmFWUiZackpZZzh6TUwlKmsoPCRMVTBdTktPPmg0ejBhM2UmcVF0MEkmXUthLl9FY1J2fW94NCVRPFlTQ0BrcG1YOT9uSS9FPSRMUkspVSFMWFZ3IWRWcV83NHk7QERBZXdjJUp3WDIh''@;'; put 'put ''fjsjPVEmVHQzdFBNK3cvdTh6KmUxV2N4dDxocl1OdHg+I3tDPVdja2gxUzcrVVkvNyx9JkBqaWl7UmpdelMrZyE/fkxlb0xAeFRMSTF7dGJfT2Y7RTZNaV9neisjZEhscH1COS51YUA6dT5eTixBeDZeRlB0OSk7RkwmXU1IZ1lIYGByKTtbJE9JayZJYDRHKjVrLGpVLHxBMGByTyJEOXFTOEI/''@;'; put 'put ''NH1vfXw1TDpHPndWUSsrUW0pUVdtTShkZ2x8PGBvS2x6aVtdfEZ3X0dxbGJlVEg/JTlBdlQ3dHBhRXBBYXwrRFYhXSlRVk1mfDZteHpreyFzcCElISxUelJ9dllsI2t7RHFtbWN5SilNTSlPfFJGOnp3a3FoOj9yQyhnXTt6US98SnAxZz1lfXo8elhbQlZNaCJUSC99X0dyM21BK3w9dz8yeUxa''@;'; put 'put ''Ijk9QkZxOltwVks2XyJpRy5fa11aLHwpVT9OUzN1Qj48RUhyX0x8bjsjZmQ3THJYU21uSktYOjRYY1J3UzZLdU1xYkJvcl1WYkNfLEZRJFs/RzNRT0N4OitHZFJUKys6ejIyZCEoeldSOTwyS2k9e3ojNSZFWE5ubWF8SCJiWnlIQGN7Kl9TfHM/YjQkRENOIUw4ZzFaTFM0PWAoOkljIyhaVEQo''@;'; put 'put ''PXNFRCZUPn5wOFIiSykxaF42S00zfTR7MF5+b0tRNkM3XSFJW1MyWXomMz0rbWwyakxoX0BiMDVQckZoIiVpYFEuX24xXz0qKWsjajZsWUwqMldId1RKZFhdNTR1YH5ncz1KVUo9OTN3VVQ4KD9xYmRaMT5sRGRiZGYmdzt+VHdhdyRmcGF6RDcyNVRPcjspL0hzNloqLk9UTnZQeW0weyE0aztI''@;'; put 'put ''RSM5QDtPai45NnMyQiF9dk5WWnxjQjlzUSFBRHt3UmchKkpxKSxKa1hFL3BAI21FaWVAT3xjZH4hWnZpKXc8UilWPkQySkA0Q2I5V0Jadzt6SilaKmM4fU1yMCFxVTU4JkRAPTlTMUU9QXVdY0BNOjAsPj5rKC5JSlc6az1USWBRTDxIdVVFY2N1NE4/WD0rd198VHouV0trcHRjVGhxTWhbNSZO''@;'; put 'put ''cTkpRUdUUXc5NG9XTTk7OSZDcUkjOFFrbTlsckpxc2U+dT5NQDJCdXZaPl5IOVc/dWNOLjB6LjJ6YENaRE8ySUpbUURjQ2M9ISovNnQ8QDQwIipkQGZsKDdLYXd+Kn5kJWlCPTlAanhLdXspeHVKXXYmcT9nVytDSzRoWStLYl9jXlk0Nl9IJigwMm9uakhJfjdHVEg/UyR5fldFNyxJLkhteSpA''@;'; put 'put ''fVQiSFRsWGhCYU9dWnBMWUlEbEZIPCkydn5CPWcsR3BCT1hKcFZpd0ArWk56Lk5LcS9MeUhtKWMkLFheRFlNTGEmVSsyIzVDMUZ8anNQVj4mUyNuQEI1L0s1eHN5aSp8Rm1SbXBNL0U5ZzxDIXx5WG1Le3BmM2o7LmpoVmlOfVVQTXpTSVVzcy41NU1YeUJYMEdUYjZ7SjZFSnJdRHh0L2E3Pz9e''@;'; put 'put ''YDQmK0IxMldIUCEjSGdYPldKWXxZfDNDYSVBSVYqQl00aF9LL1E+YkNSamJteS8rPlAmaFgmMVdEQXVgUikoQFhGW2drKEpxXjBYUiVjOXd1WFgvPVRxUDVIfEJjOzc5SCRpNlpqOnFIeiRROyZwKTtqcmt6a192an0pQCkuNVpEXmFoLkxvOWs8Png0LzVVIzIpbklKaXNFeWlrYWdydmdNd047''@;'; put 'put ''IXYhKmwhMjteZzIvcj5reUYrN2d5JlowSUZla1krKXR1PXlONWhyKVQ7a2BFbl84eXwlT1F1Sn08Kz91W1hUbGU8UUxeWF05KD50L0YyZjNWVUQsJFhQL1ReRmY5NWdKIVFnPWJ8VSFwZFBUZWM4Kk5bdVMsbmRmRFhqfV1yQjJIUyp2eHhMS0lGQUI2Xlh9KWpnd1ddVmltQkFvMiopejtQJn19''@;'; put 'put ''STxVanMuQDRfJT1+NHJhM0U4K3tjQStkQkRkWT90JCEqdCpwOn5vfFVhX0YqOix2KHVwYkRlKVF8UWE0IzViKFdZT09XYzEpYmgsVk47bjd0O0NVMnp1TSpOaV94dUp9RilrJkRfTEUiejE2NmtkLC9Ja1pmSStyNDJVJGdFTDRtSnptPGgpNlgsM0ViRDlwNioxXU4xSSZ0eGIzLzlMdndnSyU5''@;'; put 'put ''UCkvWypsdFVZLmZIXkJlWTovOnVZQmkoJkcoZEooYHk+byxIR10iWGJLUENaRC4hdlkrdThedi5deTpFInRoRmcrY29mTVhfKzFaOi83QmgjKlUweUByQ05vS0RYTm9ELkk3QmYma0UkSllnQDJxL0tsXWw4VzJ3fFM5QHVsPFFWWlpeb2wseyIrMUtvWG5AMV4uTlc4bG5daGZNdC9LUXdKWTY7''@;'; put 'put ''dHV1VlNHMmM4OkgxVT5+az58Q2pia0hmWWpQRUZzT0BaazwwUDRvKy82YTlVe2ZfOSQ2aFtbfXd+X1JHckQkY3U5VjZraVVvdmhwXjxtSHdZND1Me0k1ZFJqZ1l9M1MjX0hgNzxhL3h5RnQ4eDsrYU15WF88TjJ0PVFhY2VQVXlgbXlPazpmQyU0O1Yoe0p0e2ciTC9xMUx+fiM4cVpRV04iM1Rd''@;'; put 'put ''SztVbn5Wak4odD5WIUlyYClId2JFdGhFbUh2cXhsTjgpXVAqIjkvdURTbUtVb04hRCM6WkNyUkZuKyssNSZ7P2thbDhAIzg1UW1jQFQ9UEp3K1Y8OCRAfEpaKVVWQ0NNSHxjPmFoN3puKyUwO2U7ZXZTY2YhalU7VTssYXU+NC8qJklkVipqaDcmOSZjNmZjbVA3OTc5LCV0RmxyLH17PyZ+RkAh''@;'; put 'put ''fiMrZX1NYUtXQVB6bjR0fV5nNSxzQEFNJFohbH1Db2l1eSU9SW8pY0VdJktRVGkzQEkxfSgjNjxsPGEpMXE1MGhySGZGdiYhMS43WXR+eUFrT1Ajd3FuQFkvKXFKUjMiSHU6QXJSTDhHM1pbQDp5RkEuTEVgIkpsJm9MMDgqREt7LDUkVCljVnEqNER8QXtoaS9iQWYsRGFjdW48QzElY1MoOFFf''@;'; put 'put ''QDczOm5VSXJeVEIpNVBGUDJvVyshMXs0em06VDU1IiUwdipWOHVpQDZpQE1eYGUyaCN+fFQ1bWltM10jW1pSMl1TZzVbSEJQeytrUyY7UTxPaHlQZEdzSmBMSmIsLG1tJFVDa1VGWEE/VWJHIV1XWk8vR1FDVDJJaF0wcU5jdG1aeX5gUT8scUFlNz4xVzQ+cyUrZlg/bjR1SUJrJDhhZkFraUVs''@;'; put 'put ''O2lnYERUez9TPS8jP0ZhVSk3PXRtVkg/MlN5NDleKlguV15uKD91Xlg2eyNSP3k1KUZWU2ExfEFHNG5sOVlKKiRnOCQ8VF5RJShZeG5IXz8kSlsiaDwmI3RyYzNvaC9zO2pvUW51fkdgRjVhUzI1eGlmfWRTPWd3Qkh7YD9uQj9vc21rVikxcEIkQGBqM2JObHJgNS8vS29GfXpNX2p5YkYhIj1m''@;'; put 'put ''ISF2JXlmaExeZU5dSm9LfkFObmg5QlBaXWZFam14bCZLVVhgZEI2PVpYWDFbYWo8YFNaLyImfWAxQmFhNmFmLkpWWy5kQjFpYUNiTUBEPilRdHBnRndTPmt0VThYcUk1ZjVjcEIqWGI2JUdldzJvR3AsZGYrM2RhNWJgTXZyI0FKIyIjXVk6RmtqUiJbe30kZ0E3LkRGQkdIYThvaFpATjVOPH5R''@;'; put 'put ''RnY4XVIhc00pJH0qKSpWfixne1JMWEsiI08+fTp4Y0I5O2dfWl1CVG0ySTFeMXdjKWZIOmA8d0RCKGNYUCk4UGJJQHU3VVBSXndLWTJHeCFCRlpkUjNxM2x4Qzxab0AmKigyUUg9KXMpVG5RTEdEKnQ/PSZqdmQ9QyV3Jl8/RU94TUMrazNwQSVLX0pmMzN8YSpoU2JQRGROeWs2PUoxeEVVWHB9''@;'; put 'put ''aFMjK29eZHhSVXZjfHVtOStLenpFcCIsWEdKTEErIkc4WXYvIjldUXxXRUpKKjgoP0dOeDZ6NGVfemE7ayhIOE9gW3NsRFBHXnU+dSRRMDVFSz9mI3RRY3dRYzQ5USxGWEI0LzwmdH5ScVFIPl5uRmIxQH1WJj1sSjU0NkZfIVF3TyVNOCZje2JHMHA+Q1BHfik2IWFeTHBhcncwQ1gkWUdVZnFi''@;'; put 'put ''OWsyV3pHQHZfcHppX2BIWzgjTmtfezdHKGh+IjBdbi9iR3ozYTNoQW5ySFEyMllsQCNlQ3huZjU1d29yQGguPUt4YmJXVGNLY3B0OSY6enFqKHtFQ2lUOV5ed0xLaGhBSTQ/SVhzMzRCIzFNWEYhTW0wQy9aSEZnezAud0JII01nV342NFpUaHpJTn5RcH4jMmA3WXhGZ1NqaDh3RVkhdH1jKlg9''@;'; put 'put ''NDVlS0QmMXAxX3phYjM/eVNweFN7Zk9ofn58bX5SMUl8ciM7JXZiRzdUYT5QXUcoTmF1OS8vUjx8YG1dQ3MwTTx2cmA1X3EzYGs5Kl5Aa3d3NUxiTi4wLG1fITxeez9tR2hkdC9ia05pcUo3SVNiZ2RYemkoPy9Tfm1nUSoiPmtwd102RzR7Sll5b1RUaWtDfFFjXzwkWT5wTS9Sd11CVilWKCpC''@;'; put 'put ''SUQjI0tqT2MwbXl6W2FjbFZCdFZaS0BtOnlHVU52WmBYYkl4UHtodVU0TCV4RSl6KDplV1d+O3w8OjEmaiVaUE1RVSN6MzJpUWRUbik/OGlRXiRPc1BOd2drOkVHdWMmMFlzJXxTSzooVmdQNTFYUnRTMVFhXUNiU29HQE1tXnB8T0tiS3Vkb2U1XVMlRnVgLzRCcmBNOld+bSgkRl1RQ3hVPk54''@;'; put 'put ''XVZra3V5RUdPaTZ0TkcvJGxkdn0wKCRDWExtRk1mQTR3eFQ5MDZJaGksZjJaNytFN3g+eXMuPHZlfS8+YiFCfTciWH5NOjU+eCg6Lk8qO3AjXWZxMV5HMCt8aF5wO0tPcjM8IkJfXyNran0wQzU+USN2d2JTOEpbJlA6JElrK05YLnZKfH1gcCFUJXglfWZYNVNGZS9IOWBgaD18YSwrKkRXd2Ih''@;'; put 'put ''MmsodDROYlYudC4iTGx+R0VVJVh7SjY2IjMjLzhUOzlvVXxnQXZicHA/SSZuWiQwZXYocF9efHtHNVZkY0BycDclYzpIfUclWn1FJix5QCY0WVRwQ1QhOnVKNDA9eW59PiFQJVliUFZdfCRSJFdNalFqTCkpbi9xPW4/WSxYbzd8JnlNOEA6Q3AicWs1Y1hzQ0tqKlFCQkAuMEVoU09pWWJ5bU8y''@;'; put 'put ''Nnl1WmN6O3A2IT5xXVsrTUovNi95JlBrYVI8Xz9eQHdwRlZ9NzRxP2pdP29VJF0lVXFpNEZdPEIqTz4wRj0yL0I5eCRxdzlOP280cn5ATExWWmBIaz5BPkVmKTNFSW52QVR8XSQjcy97QCltKSx5dyx5bmokazFuYF8uZ3pHbX10R0xuX3pEO01hQykwI1gleUNwL2pvNn06TVpOfFJKcCRIQyRu''@;'; put 'put ''UiZnUG1GakFiMFppRmdpbXVBQ35rM2tsVm9neW85aH1SdGQmMU9bUi5ZWClmSEkhdHE5UXJOTlF2KWkqTEZ1fHElT1swcT5oZH5KWTJBTHhrQnJ0Y0F4KDtNOE9JRCksSVFQRngrPVFPdiJpU3wjZDhOYjlxSn5PSTFgdTMjKkRTLFBRekY/LlBkU0I4WTwiU0p9PyUwRU4zPS4jKkVYa2pubWdy''@;'; put 'put ''MFZOLlAhdEAxYi5QRSkoMCNxU2kpPk8zM34rQDshQ3xgdHt9Q05gOmQwQStsdj93KjAsUjg+Rl9YUyF0ZX4ieGVtKVluP2ZJQXZha2NQfk9XISY+Nzp1Lm8iYUA9Ly5YQU5bYy9sR15NdVJ+UTZmVG9iPTR9ZFA2Y09+aD02MiI6WjsqW1dxTWluVmZTZGJyL0Y1eH1iandabnxAeHxGI09jWDlU''@;'; put 'put ''dUBXdT4+a2ZxIjA6NV8lNFlYQCx+Pllzdj1xOyE7NnhjeExBIl5aek1+P2d1XWx2THJLPFtTblouayYpJWRiZGRzeHklR1RJXXI7JF1SJC5yYVE5UHVgfGApTk4+P0NUSSIzPm81M0tib05oQFBCNWp1W05FeDV7SElNQlteSClrP2IqTUJQbVE6NEcqZlZlKjRTZDEldzNrZ2tSVW14WFVCJmxE''@;'; put 'put ''ZDVYbiRfND9gRzpUeTlhbWFIT2NOUUhyRklkPDRSXyxBL2w6YXN+MUluOkw6bVJMPlE2Xmh6RT9uKnxuR1N3WlpJJn08NSpyTkNJLip2PiU+SFNlRysqbj5PMj9zfksvYzFTcXZnOiojR21vcEkrWTlhbFtdLGJKdWsoazxzfCFtMDgsSC5yUlU/Z1k0Jn5+OytOXTgsV1AxaTg0S05FNSJTOyR3''@;'; put 'put ''ZV5+bFlwRXBQWDEobEdAdyt7SVhhTigpPk89JVIlZFEmNE85OzloaXNjbipEU0h3YWw5Y0AuZkRqa2IrQWcpPHElWHJIO2chRUd9WHYicUBRbGV5d3E/c0JeTngxJmlySlE7dyZPMjNiLldtZjgyQURqazFIPUJ3VV5hb2I7cjZednpgW2N9aiJ5bi4weUJPUDlUSz0qditsNEdbLzhXQUs2KHha''@;'; put 'put ''TE8pZ0NWRWpuOWx7JTZDTnlkVjZ5ISliN1RZaXpoQHxGdDdJJiE/XXgvYCwhI2w9fSEsSzw5WkJYTzkuMXUmMWIzR3ZKVWM0Imp+XXh3JTklMHBEXSZmdE0uK3ZuQko8MnVISn5Pbi9gY1FoUSZgOSRfaXVwPCY5PmUzaEV+aG5VSDIkUlBpSVdscU9VcyQoQXc0WUFpTDAiZnp4JHUma201MWgw''@;'; put 'put ''ajV+fHNXdy5ATHo2WGE0SU8lOnpYUU49emtwSzx5bmJiaSk6WFlYPCxJckBVW0dvXV4rbisxTnwqJXdwSGYpS2FKUF0rZ0xtNGprWSowK3pFXXtxfFR9LERFJS8qV1o+MHxvLihgYTJAUHp0RSFbSUVASUJtN2FhfTBCYTtRb1ZMbE42JUhUNFsobmFCYGkxU3BuT1R6bk1fYV1UZyJPYUBJKFJS''@;'; put 'put ''THU1SHpKMCM/WXFtJlZrKDR4Q3RYW0lKLiRWelk0dVJzTyJGdyo0YmojTEA2YVFvflRoeEtOKS4oeFpnWHFxJV5fQDpaQGFESnZKTk81ens1bFJSTHljUEMpLlVQPyNTPTVHVyVkOiZ2dnk7TmFgaiZ1Pj0mL200fUN+JWJqJTM4Wy4scXl8XyRVam5aMmRxblBPb0l7RjF1ezAxVFY3NCNmPV0o''@;'; put 'put ''e2B3SypkPF9XXVBzcFRTVFpQcDFwTXZAUVpHfmAmVDcpeVoyc2dmYUtIZk88djpFKmF9KE1yZW4pKHs4MHpHK2NZamFOa0J4QXh8VTdKR3BzIkcwOGVCb002PEZ6Li9eOktDImQxYXlbby5gckNYXTxzVE5RK00jJncoVzdST1cmJmByVnlSTC59Ni53aHAoNCJqSDJ7fkxhY15XYG4hT284ezRh''@;'; put 'put ''WU9PXyRrR1BnMDtieTpQcGspQ3goNUFDfWY2WFp0WCgofTRuI3cqaWM2U0QjWyFSVlhPQHZOalhJQ3hyZDtuY3N3R1F1VThfXTVfVVZWbDAxLjk9Mz1GcmRqI1RZPkZ0cExwI25TKDdLZz5jX0hCMX1db1s+Slk6fltwZmsrL1tlejl8P252M0JRS0QrWz8rYDtJV0ZVLipUS3VOYS5+T3dtbXZf''@;'; put 'put ''QTI3VkppTixQXUNKdGhCSzBgVGx8JmRxLltscSl1QH04ZkhIeilOPUtOYn0pdCo/bmI/aSM9UjtwO0JgTiF2QD08ayxmfU5NREF+UTFQIW9MSWBMdmF9QCQ8RCVXIWkvR3lNNzJsXlpYfFMrdDI3e25UYG04YCQre2FnXnxkfFBQUm1PJldRcX0jbWlaemQqPzdwKkJ7IzFfYDldeEtwX0dQTHQ7''@;'; put 'put ''fXlCTE1+OkRrTmtiTTd3ejVDant0IVJmMSxDWkc7L1lCPSY+PGs7eVBMO1J+VT5wdkVnN1t5KWozWCw7Xz5RYWR4IyVTKSNhPC5rVHRCKilnWXZJRnVEek5YWy9pan5oKX5SLzpsSkMpYVJxRWZWLE9HU0oqcVY+NzQkTUdadl05QGc4PXRAX1ZQN2hqUzcyVlhQcl1fS21LNHxieEAmeiRlbm5a''@;'; put 'put ''SXJHSFdqZXp3RTVeKk1QZXNCcnJSOHxJeCloJE5mW35CJChuNDxTV1o/OiVSbDQhU2A3aCpFZHVMbFo5Zj5xfWRGUDkhKmhFM2xuM2ZaUnhaSD5VJkIoa1NYMGxVWFFMMDBZKWIodF5uY0hHPE5BMSp1NUNGTD9WZW5JZFE9MlYqSiJlZXN0Tms3VVhaUylqXV8ycmpzdT88UDVYQFlQPSxsJTEx''@;'; put 'put ''PVhhP3dmTUQ1aE13S2hbXSwvPXJPa2s2UiVobmo8X0BQV1pTbCZecXFfQGN4LHl2PV5udkRHalZpR1U7XytkLFMhZXdnYyUkZWxBdmIpR1o4OGJRaFI2a3xJS14qVClGbD9ZMGB7JFJwMmt7RHFaX1NvOnV3ITAzZXV4cV9PUjk7OSR+PGg+c0x0U3QkMC9zfnIsVCRDdmFQLnZPPlA/OV1ueSgz''@;'; put 'put ''dC9Gd2w4OzsjJSldOHU3Ylk4Qi5xaz42MUdyYG5OVUBRcHQkRXhlK3lJKUViemlHU31UQHdjOzNVOCZMMShnbDs8UVV0NVB6OyQzWz9iZlIzSEk0VGFzTWZhdEpqM0gxeklbajJzOl9nMENkY1RgWFMvd2U5K0F5QjopRDtkNlhIWG4vSnwhYDxaP2Q0Lik4SzdoUSt5WmA+aDt5NmJjfns+eiZf''@;'; put 'put ''filmNEYhV2Z2X1UvRz9ifXJrVi9bS0NEbixNOkx5QF0xbi4oPG8kKlBrNkx3JlNedClIQFpOMjh6WldGZHVbUk4jMVZbNC8iZzpDI2d3M01jenxrcURKd2VfWXtCR09GaU5GTiFfRltaT3NrS31LM3dgdVI9JFhiMVdULFNkRnV4RSlDK2dzXTpVYV9JdWY0NiRZfklLfDZbZkAvWVBYcXJTKl4o''@;'; put 'put ''IiQ1cHxWMGcoX2NZJldyT250KTQzISxoU215dWt3ez5aR2RMJiMwJk15PXF1YzdxZX1yXlFgSlFbQGVBeXZmQnxoN3IsaHRETmche21rVDtDYDI3bjRHK1ZJTlghL29ULG0oUTd+SUVneSlaPntFXSVGXTlTU3tfQ3E6SW9yeX0/QSQ8V3tOSDNmez9EWVBdbDEuazNdbDNsPlYwL3RufiFrOmMp''@;'; put 'put ''M0NNbXkmQC5EVU9+cVFVcUNXTTdPKVg6SmRbK2heeyNVX35pVlRJeCl7KWNKLnBZR1NPRjlnai53U1FjQ1lLOXVZPV07Sy9MWShUdWVba25EVThfTUheKSRSWV1jK0dEejhIcUs9SzU5RW5nKiZRVUJyPiJVUkREIzF2I2NfNmttO2dRQGs4eTxsZkgzdHJAVj1gUE9jM0h2LnY6OERwWyU3NFVZ''@;'; put 'put ''ejxfXl91MGlvd2glak9rTCF8ZjRATkk5YFlYRUc2OS84XlIwWDF1YHVxXUlhOFZwUDRqe0w9dFk3Ni5FOzYpLHJMPyFWezhQP3BSbkRudSJ7I2hLQHldNkxuIWB4Zyl5eyp5X0dQbE5fVCVoOHxdJnE9RXw5Uy5pNnlab1o3eSlfNUZ+ZjQ8OUQwTm4oP1kmJUhmUXlMVnZDOH5dXlArOSVMKlJz''@;'; put 'put ''UmZ4dzRwazF4YW0+VW58RkVxIjg8QGZZfmhrWjc1KUchdTdpWHpkaFNJfTFrTmldIVRDISxzeE9oMWBaXmJ9RUVsY0I6VjA1JFI1YEZUZTRQcEY7PyE+I1BwUms9YHIvM3RSakU5JTBzQyw3IUUkZ3ojOVg+KmBAOnVlSHs+W1QsWnZVW0B5OVYxb0JxQGFUN1BmaFt8OmZVM3cmfHlgIUc5aVpz''@;'; put 'put ''U29tTSk+I1ltYiIrY2hLIzF8YSEreH52JGtpTHlGMUBAOys2bW9GbGJ3dDkjWHoiK1tqbUxwUzJfRDtNVD1CTUE0Szx7TmZEJkBKOH5IIkVmVTh4fX5DLEdmUVFzRDNYeDcpSiR4XyIlfFkod3BTJG1DSyFjZnIhWnpYTGM7PzBZNU49Sl96LjtLaFR9bjI9OX0obGlCXigqO1RrOjhNfjZZZFRi''@;'; put 'put ''Q1k2dSRfK2lbSiFSTT15Iz1wY1Z7cX0lQ2l9Sng2R0FmdGclIV5ZNXN1Z0V8KCx5MG11PSVMd0NQLl0kdHJJPX1bUEZaZCQzREJCW3szUkJyU2R5cklqWW52YFlKUT5WYHBjfX5OSDg3JnZ0Ij9VcjtNKC5fNiUhSHomU2w4dH1EaGU7anI3U31EdVYmL2c0MkhnTEwhdWo1eFdVeCxeOl9UMENM''@;'; put 'put ''RlppMEhJd2ZZJV1gW3UoLndOLFJkZ0V3KXtwWSl5KHd3M2JMTz5kbHlGejVPWHF5NDk/Ik8/W1MpdFh9biF1RUJZSkZib2BybSglS0xBS2ZqJmleTnJuKU1iMHslYmBrMypZL05VNTRLfHFLaHhaV3lhNEdSej5Sei5bUnAmXi53Ty86QE9tRiY0MjpHJTxobCEjPXhSLFMrR0hwJloxfGhFbkB4''@;'; put 'put ''N1syWWA1K2gpUnkiW3psN1QiS20kak93KntMYUcmM3MjRmUzRCwke1k1OGg7OiN2O1VIeyw0Ki5md3JWMHpFJj1LIUtAOi43ZF5SRjd1K1MwaEc8SSNYb24vRkZtby5XX305Jk9QeCZtfT96RUVGRz8sfHhVem0/P20zPzdFZHNJcCYvaTRmbDR+Vmt4bGNQbjE1P2sxbThKTC9+PGIhXUdFXT41''@;'; put 'put ''XX18QlAzSys1dH5jWW4hWUVhUy5VOCF0fmF2UVZmLF5JWW1iS0RoOStaSFVnb0RjWDlGNnhIdzBQPSomNWUvc09BYiVSZ05TTkRebTx7QzBXN0YhLmY8MFJ+OnsvejA6R2I3SnY1UHA0YlRLVlMvflQmblczbE9tTXxvWmQ8WWN9YVJqK09IVjNCTnFpPSkhKDM/JTF3T35TdTtGKC5fYS5ZMyQ0''@;'; put 'put ''XyZ+LypURmZiZzF4PVhdTHRHRil0eH1XWDIiOW1JPT5rQVYpbDpBIXMkeEZyXz5ZaCtLOWlWfCY5YipmJUlXcDYxbWsjQHlnWUd6ZDhZJWszVnUjJSxRS3pfdVZvZyhucVlWaG8+OzpuYDlPLllQSShwazFYKTc6N1siZEAiOjYjY0Z6ODU4LC9PMj1+RXtkKlo5Py5WIVYsUkdmRnQ+Plt3KF5R''@;'; put 'put ''OCtIeTZbanR+OWNvMUI+QG1obG5UIkZaSmcuYHNfR3hULjxxbHgkRS47UUk8P31UVj8/bDFbIXwkYk1VWi59Z0crdGk9bXBjbHNLPjVDZz5lLDpXZFI4aj9bPmQ9MlN7KjNjS2k5KG1gdzx6Tjx2YWQ1Z2lCcCw7LnNHQW5vb25zWk5mVGVXUGciSjZtKy5fajVOaFdyM0pkdkhAZVVuTk5vYVpR''@;'; put 'put ''IWtdRD5AYHg/MnluNjNZYC9lMWdCbXpFdTgwMF4oezZ4NGskQEF+fmdJM0sjSkRuW3Y8I0BZVihFJFNJSn5WRSZtQmldUCFWTXNUUERYaGRSMVV3NzMxP3RgUVchSi87WWBbcFIpOEplKTAoYDhuZD07XUs5c2MwQzo0QCozZXl7YUZRZW1pQ35sMCg+fnppLkVYT05zMkZ7LER7Wy5bRlclVUh6''@;'; put 'put ''JU92Im95M3pWOkhzcjl4Z0BCWDttWHU3cmJdLHlDWkp+eCFYNFQ7MG5yRyMsVzBuQ0gmbiprQTAselczLElPZzxmUCtXVH0zSEw6eHg+SEImQWFMRn5sd1BWV2x5IkxoRm9fYCVYd3d6MXJAZWhJe0c6dEFEVnslVGtIQH1ANX4mcUF2cj0mO01Nc3w+OFNKMiIqb1tQYWdLflo4X1NTJig2M3Na''@;'; put 'put ''WyoiQn52aiN+I1ApcmFxcWAlaERRUis5RnNzdW5yYFJ2bkViTnd2WGIoO0QmdSJyZF98UUxGd1RpKjIod3gvQCp2bUNWNHhHSTZiRl1KLDF1clpsRnUoenVyLz53QzxVa28/SiRFQyNjV3Y2SCU4TzIqI0h8VVtkeTM6Uld9KUl3TkNHNGV2cHhvOVFLSWRSem1QSEpzMG1GVzBveG5GV2Vfbmt5''@;'; put 'put ''dHJCTCtMVDFtOjAxalosLnFKKHlMLHAmLlZsP2dFLyZON1NRZF5zWVNiWnRUMmI3ZT1mJWwwNlt0Tiw5MkQ4fF5DXmAwdlksRSkzTUYrblkjVGZzT0RmNXRHREQ6OV14Myp+PjU4I3dbQlRqWGQ9LG8pTjJ6V0R8I0ZSOmNuNC85OW5HQkE5bnljS09LUT5QOUdmVDw2WD92XSh7PUoqXUhGejd5''@;'; put 'put ''czRDb31qKnNgalhEbFMrcG4zZVtNRWElSFF9TzhXZlh8b3BLZU1JVilyMWohMi9maFRrclNXdnswbHAjdi59ZnMhNzwyRyxgYEptb2R6eTBJM2krcV1xQjopaFdsbF1mdCx5T01mb148dmJKb3d5L1EjbFUuR1E/amBXITQvNkFhZEhncm4obkY/UTsxWklIezdzbGtmSlVtJSE3MlM8TzcsTypF''@;'; put 'put ''ZylhWE58PEtbRU1CJS9RLCRWMTFDQFhVdi41OSUvU2hKc1NmSHEpZDM6KUFWYHJTT1U2aE1xTWJIaXlCVTVPRkJmbGZ5Kih1PmNUR0l4V2tTSD58KzsxWkhDPSw8dmcuKCwjWGxNdmRebzszPkhkMlolKWIqKkN7PVJobVJgRWgqXz5Fd1tuVjFORF8jWjlIcjJZQ2xJJm05bXdqUHlyIlo2ZVA6''@;'; put 'put ''Q0RsQmpAIWU6eD0sQkg9e15nOl01am9CNU9CJW1ecWBtTXRQQ3FzcnY9eFRmJDs2Z14pbX5hUXBrRzJKPiYybCZ2c1dEMi5VaSJpbW1wMCluImAocTBCL3pSJjV2NSRjSkBDbU86ND81aFFUdmQvYXsxZUlPcWFLemFBemRVSTw2TmtgQCI4c0RqW00+KmN5QFFpVj0+SzR3O0JRbSY2azJ7Ijtm''@;'; put 'put ''ZkIxZVRvWD4kSUdQYTU6MjlHLktpXmVMdHltM2pbakpQY2ZPU25pTixhdjZTfFc9YVZRPyM8aHM6ZnlJbm4+aG03R081MjVzbndOJmpMZnp7Qj9RZzNLXTtHT1hCJDszNHF8aVg1bzFoOzZGSzo7QjBkSlk9VGU3bEZhXTJzKCwrL0ghKFgkR1VEW1hNUG9DYns4VC46WXtMSWIxX01+aXtdK1lA''@;'; put 'put ''ZCM4Ln5eekZUUXV9KiEzZjNKfW9FL3ZsTW42cCJtVigvMkREW2lQYGpmN2l3KEY6YjRNd1NqVkchMDMiM1t+JCFDX3lTVDxNNlJfY2JIYVFGKilMUXdvMnAiM1REdyV1TzB3Zz9fWVhNP318Z3UrZVZ1OXQwRmB8WytqNUtuUDdYNVhiSV42PzZ3djtlb3FjKzhjOyY6eTokJXRwJipgJjMvTywz''@;'; put 'put ''JHJ+ekJ0S0psIXNQdF99W0ReSHBwfmZ1Rn5UYUVpPzY+dl9vfDgoJkpgU1B1WGMyRkcsZEt+XmdiUkJNO3Nse0lxIWFmOVYzKVsiUmoye19KbyE+cF1NQEIxXTt3S05yeixzVCVpR307WXI4bVI4Q1NvSkopKVVvb1RoMjBnYlM0Yy90SkVgLHxkNF9oIyo9WDMqckhjZCJQXmF2QEdocXVfVGRR''@;'; put 'put ''O3ojV3olNm44clcsK1BLVGw9Wit8Mm9pMEBoUV9CWSlpTCpGJDU2XiolUntYaGFTdjovYCN8WkB0UXUvfG07aElKN2JTT3QyLkt3QUdSZFM9VF5TIy5dLlhkRkx5YWZ2YzcsSEkwOysjQnwhWk9ISSZPYD5QVFptWywiTiFuWk9CeXhPVjYma3MqXTBePHx4bHkpXnIpJnM3R1JpTSI3VkwvZ1Nt''@;'; put 'put ''VHV1T0w+S156OjFlNXFqMFEzTlVGNUZuXmNzbzFNPFRBWFl5OlM8RF4iY1ZpXUEiK1Q6YSpVIU11WjZWfGdSM0p0Tm5HX3NkIVJldUZAPX1SQDNSP0dBeG1dNEcqMztFW2ooekhBRURmdVI9UmJqfUZfT2ghYmc2aSJ9biNzLi84ajpFSys7S0xIaHxpdmlnNGcva0M4S2NYUkUxX24qcEciQmZJ''@;'; put 'put ''VnZDdlh1KmQ3d0l6JFp6elJTbjIwNEZKeWE4eFtlZkBCdlI5diUod1dZcjBXdm87NjpoeVEqJVAlW04uUGY4Sz9Ge2RYTmZXSSFscHxqNCtYe1IxXWpkSlB+L29NOyo/RnZWRD9nYmomW0p3aHtyJSUoYyRIcnNvKUo7WCxMMmdWeWN5T2pEbD9LbCtARGdvNX12ck8hQ3RiczpZMFlsI2tITkp8''@;'; put 'put ''bn5QZVBBSVlXMFBCYlRAQXNYcnFMdEdPKDFxJmZKSiVeXyZBJHphSGJ6R1hZeEh5YUJoMjZVIi5DM15rXiYsYXh8L3kufnV4alkhJUNSbTdkVHB7JHhZNTN7YURhYm5TKDhTZTRFOi57WyZuV0lVbks1VyYvaWZePUtKPHF4fXhyYjlOSG1+P2pHPzhWISUyb3dAdHdFZDc8KFJqYWEuKCphMEZ4''@;'; put 'put ''I1J3WHlib1AvWntPTEZwY1t5WDRCQlZZS3V7I1VRfUo7aGZ6U1FgSnh2b3ZDOD9teihbMFBAL0RyZ3k9TjVCe1pybCZnXyVlbU83YS5Nb01oSEs6dG9MPj8oZzs5MSoyIXIrd3lSN3w6Y2NiJiFJfVlUVn5OaTJFRUVbSXoxRmw6N3YyYSNiSkZffTRtIjVNTER2Mn03U3VFPGNDZFQiK2YxP2o3''@;'; put 'put ''a3ZtJkZIXkEydFtvdGNOekclTGBGM1RGWEQvS0ZEYEgvbF4lJFduaTN6QHlDXURLXTxTU2NeTUt5anJ5bnVMLE8qOENheVM2aXQwaHg5IURfcV4lW3JxSjJsLnUra3ppV1BSRCpwNWl3R1BkZj0yaXZublNeWC8odTFWOU5WZihAIjp+TVNJRnpUeVI+UnwxPTc0dzFWY3Ilcko2LE1GOztBRlFk''@;'; put 'put ''MDBseiY8OW81VkJnTUkrQE5UJkNXRSUyWUBaTTRDQT9QKDJ8NUxTO3krXkt3ejBlYjsuU214R3YqdDshZiw2XWdmX1E2cFZHNEFHWUFAUFlCPGFkckhxcVRPOy52eGJmXWEhNTd4Uzp5KEg7LnFeRF5Sd2taVjV2emxoJiFKVDxpJDlSJH5wYSM/WHlUSSR5QXwwdisyOXJlYmtYaGViI1lrPXA7''@;'; put 'put ''b1l3MXY+aCxXIWFZWHciWzNvbiRUb3IyenxJUzM5Rzx+OCEsamZCI3tsVVlhQ2F7UUJ4Rj9uMmUrenhpSjtIfHtbMUVXJEo2RDdKUz57biF9RWpTe0tFODt4YF5Va0VyP3JJYDNfOj9MXV9Xen5vI0crYSxIQTFXY1kjZz93cn5XOGR7cTZnQjt3YDI6V1pUcUlgOEd5V2EyfmAmTy9ycUlqQXxP''@;'; put 'put ''VjhAa3ovcmBXP29PUVE1PnF9bSw2NV4iUyJJKUAkaDsvVnsqI0hdJVpFcHtTJTNmdHZYPDF6YWdVRVc3KzQkTyw6V2dwLnpFITBZUFJ3N0RhM0UxPTN6S3xgcExiMF8/OnlZR1hhb0hpZj1QQmwlQjxMKk5BSV4jNTJ0Zk8mSCUzPm5AI30/NDA0b30pKEdWOCE9U1ZHIVJNbjdAaiM2RngpfDE2''@;'; put 'put ''bSNeKH1bckN+WkpAd2RhQjF3IiJaOmVvJEc1VHIjTGY6V0x0XThbKHFlfj1OJjh0P1lkNVg9P0U+M1RIbTRYJjopaUs4dWxuImoofkNAd0hZUkwpVGxAaXZ0KVIyIWVOLH4lK3hDNFJ3eTZCd25VMVcmejYsO1hVSDNJKms4Z0h8KyREInNrYyZQLm98aFBsaV48SSheKW45dSV4dzxzYEM4Jjlq''@;'; put 'put ''QTxIfmBUIjxELlZFIzlXV3BdaGsxI2VGeiE/P09BeDVpSGA4ckkreEYmc1dmOyJeSV5maXgiSSV2WS5CZXFEQHI7d0wrdz9fPCl8OyVHS1g+S3o3OWkkV19QOjpyUzdqOEVDZlQpcnxRaEN4ZWJ8UnRuZ3REa2B7aHJ4VDQsY2lNOWVXWzdjOEtKLFZOMTlTaDUrJH0yV2svN29LOVIqOGA0S3cw''@;'; put 'put ''L0VLQGtqeCJyQ3htYHROSHJuQ2pjNlU9TEA2ckwreEtyU2ckKHVZQFZIIThpeHdVbzc3UmZKYmMkMzNHJl9xVih6SERINXs5M1RzSyUzMVJrbyFIUWssNi84PWhHNko9QVd3dVRFZlNPYCtHbzcxMkckOWVPO1RVbm0ycVVWWV8sTj9nUSVKQWJAMyVickBFVU9uWXBfZj1lTDNoNnwkMHMmRDB1''@;'; put 'put ''KSRvVXdIQnRyNkJrSFJhYF9jLlpbIjYkMU1nTFJsbT1eVitXL1pFKUJVaz1eK1Y7L2lDKml2bXFZOGV1dlBfe0xmdUkvVTFDdnokYShYL01nJVF2TDdeZT5xKVAvcCYuKi9HVER+dTR0REBeXW1kMT1uQHJZWFlJPlkyS181cVh9byk4blN6QjhqPTFCZCZpTSRLIWU3WGZGIyx7OUdrN3UyJXdB''@;'; put 'put ''aUFrZEN+SkB3Xl5mM0R9NkRmdDUyNUIibDdbZGNtdStHQlAsS2Y6QG1zNER7YUZKOWpFP3VnKnc4ZS9CMi9fWGpoN29ufFglb0hBXjR3NzduU1pjM0Rebzh4MFRTU1FMeHFAeDU7QzosO3ZzVm9HRjBlY2ZTQUo2IjNlPjJeJjZXIjd0Wj0hUEVyYX46RFt3bzRPOT9OZ1kwaCxGaSFaXXpqV2Ra''@;'; put 'put ''JUJ8WS9mTiN0O05jP3BZSXRfKTx3P3xeaCRLemhrPmlSZkB4e2tmdj42bXJHaWc9aztZckx2cHl8UztJJUhFOz1RO2xvVyxZe015YzNEYmohQGtFYUNXPCFtanpoSyEmImo6YVJ7aGRAXjcmfnYlcG1aOyMmd1l1MC9teVkwUUM3dXt7UlEwN1ViTUo2MHlrNS5ZQitXZjgweU0xfS5PdmQkRzpg''@;'; put 'put ''U2VCIyEqWFs+XSs1TDtwPTQoJmpWeSk+UGBVNk5UO28lVEhpWlk9ZnhqYiFvI25aTT9TS3okZSFPcVBaRldqek83TCVKU2VsS0VbajZifSk0QXcqUi9LPkVMcHg2LzF0Nz1xYzMzWGw0Ykh8IVhfcWExTklmdkJMSlVGdThVRztoMW5HeDlGQyNLOCh7Qm1vTSJMW2hAPCUlY2BzNF10bXhtP0hp''@;'; put 'put ''SUIzd3BJIUx5OFZKOT53WUNZYDhVZT9RVEd0V1JzRUl+eioyRHBZSC44SmUqcU9fN0UwdyRQJnBTMnZZLlZ5RWZWRVIyK3w2b013I1A6Z0t8IUA5QChyVl9Lb25HXTB5P28+Yz4xfkRfVUpdWHgpdXl2a0E8a2F5WXJVcThRUTZmJWRKMm0rU0VTQlN3P14qP2J2U303dyltZmheOUdlVkN7fGgi''@;'; put 'put ''Pj1bUS90MDxuczhlT3NOaTN1NHosbls6YnxfaExgNk5vYmlBekhRR2hNIm5jZTVOQjpLJGImMmM3amVSLjY2NHVyZkVSUn1Bdl9Uey4kKTAmLChWbj02ME82M2ouPHNNKFI8RklDMVU+Tn0xMzN5b28oUltrdmg0MXF1KWZiVWx7KSg8a3FuYjU1dE5YP3J6djcvbkhHXnQxLzBQcUxASVsudzwl''@;'; put 'put ''ZXhBL243UFNrIVF6QF4vJXp8Pix3KV9famh0cHR9bWN4Yi5LUWFZUCIuK3MuVltlSX1tNl1MaEghMEVYVUAjNjBpJGRKWVAjMERBKyxUMVl0OXE7N1l9Klt7YEh1Z29qSW83ZD5PNmQ2Ll52NT8mP2doeGQmME9fSDdmRng5LzckeywwYiEsN0cyZXgoLnckdkpsT0F5NnZaYV1iOXdURnR6ZU99''@;'; put 'put ''QEl0MmR8RFpGNUgoJHE7Pm1VLit7M3krVUF0dHl0P0Y7T1ZzPCg/O09OdmMoSnFjJShKa2tYcnc5a0dwKzl+TS4+T0p2bSpMQWFFTm5zNytHKl5BT21GanR+YkQmInxYb2ZaRThebWpAfiV6Pm16Ojg3O3VXQVtuPUV2dD9YSkM1K2p5VmBjfnppRSpkQjRSWj03QyRMTmJ5JFI3N2p1bD1OL2FD''@;'; put 'put ''Rzl9YXBzNXlDeTRQOX4sJStbcFZaOVdSaUFdfnNNeWslSnJEPmlMd1teOG5ebFUqIitSKEZnJno9SnMoZiU4L3tTb2hBWnEkMi44XXYzMCxtLz5HLDtwfTB3QkV+biZPWk5EKDxMan5GX2d3a0ssdlkrImBYbytaQ0pUU3s2KThZVSUsc3RNZFp3Km0hI2UueDApOzNiJGRGUWAiYmdzJl1sQlFu''@;'; put 'put ''USxnOFEidikxNm1PUGxSbnp4PEFlWixlbiQ3UV9CTD5lQCIoQFFeRGRlOCkib046bm55P3c3d1RZa3BfPispcUJJRjRbeGNmaXJfWW1JdmFqW1RlZ00yczZwWW9pYEpgdG9nYS8wOjZlRyxKKEE0cEM4Sj1LfGprSVZdSi5+TU03cnZeRTI4e3x9KVJLYEgpJE5AVHhvWzh4fjMldUZiUyFARm9Y''@;'; put 'put ''NkRIJURlMW5oPWZ3YEUmc1R4ZClZa11jYk1wYlFHTnoqPzs7VVRyI0M/WXNVPlB4MkNwb219UEIkaWEoWFtoc2N2P0l3MVZifUhtMHpCN29zdHhCP31sRnBxR24yd3UsejpMRGM6fiwyRl9ZKzpkWlV4VEdXVVs1L2tMTEI5ckk3dkFbI15QQnkrPD50eEVWS1ojfWFKNlJman5+NjQ3KWQhK056''@;'; put 'put ''QDhQMjk/XVdHenBjU2ZMVGpvXnRIaV9kSWYwfGolT3pxNUt0dSp5L2dTY3FRISFJRHRGQCsxQFpxUl5BMmEmQ2omOmVOUkY9e0dJQS96e3A9VHdzelRsb0lHSD97UDBaRUd+Z0koRntbYnZVTm8wO3l6fX46dVY8VVhFcG5jaXtxRFVOWD9WSDomdE10RGVBeltnc01pdGBJOHg0VUxeeU87Wz9a''@;'; put 'put ''NzE+XXEhWyQpVD81V3hWY2QyZFIoX0YhNjxNVGwmJCNWeEUqbF1rK282JjhHOHJ4P2lYVjJyPi58VjFbX2sxYyhjcFZRZ1coaD8oL0VXSWZlW1sqYXI4V0c5aixnbUtIVFtGcSF6YGU9RnA3Pl1yVSZ7Snk7ZVhHK1pxTXFYeFZNRDNdXUorZVZ9RyhpOixHaj1QLDxnaX13XX1oQmNzdHpzeHQs''@;'; put 'put ''XjsvbUlYZDdEa282Knl4VENmamZdckBuO0Ira0dHbyooQEddIktDTmlmKXk2aW54MWxhdCZaUn5KOkRjQzY+UyZpbGZpWnl4bncmPEdOZXVJbCU2JFA6Yms9X2FRaVpCdXMmZ0FeWWRoIXcrNUB1fVAraHZ7I05CRkwwOH1rJGI0e3hKKjYzZ2wzRSpePlBkb25XYCZxOSp5eSRGbHw4N01qTXNL''@;'; put 'put ''YCVJYWRKZnFGPSolTkAwb35oP1VnJHMuRWV8R0R3MWRvPz5TbEx4MCZUZy9fa19QI1h7VlFLcGBhLk44XT9rSlE3JFRIPjNPNmwiZUl+L3c4O1FoQF9paWNEZWhTYlgjcm5kNGouSEY1VDxNXUd8U1ksOS5AWTdeMUcrWj4zaDRMal5wIj5TJEZVQDpZTHJxSiJPXiFWY1MzLE91QzxlNCtvWk1k''@;'; put 'put ''L0NHK25PV05wVjdELiZCRFV0Jn5dJWlySjo+b3hecHM3KGhYPiZ9WVlYNE1jSXRQbShEXUBbQFF7LkwlL15pSV1GVXg1aHM7cmpMSkNKNkE1aVNUU30lQCtjRWRQb0k0Q2Y1Y3RhRkFVPkBHS3hYdkhFa1QiKyMhajEvekw1KVlUa2UidUZOU310Q1dDXmo/SUlEa3kxaCRZVmtheXpGQyhVMkI0''@;'; put 'put ''YVRHa0lgZSpWdDtyQkNvRGM+Vz5jfjZSMDBJIkVFYF1mWEt3RktyTE8sMGojZ3N2RjxpfiYhaTZba0lrNE83fkV9R09xcjJiYDFgaHxpUU1sKCE3Vns5U0ZOImBxM3pES3l2NTVMW2QkY25ndmQpLEg2PmAwTnIrUXdVXVZxWCRzRm97SkpOT11jKmhdMmA2QElTTUZme3AxMlc7UyVnWnF7MGtG''@;'; put 'put ''cC9MVGxiWyxZS0VdMzZSS1U6d2UxcGd3WGxgZU9pT11kPDpPUmtQPj5TQnBIKmhDRl4kO29GXSVgclRtXz1RQU9SRztqeHtMdDRAUGw0NGpKK3p4XXFpR1RfZWlRL2VmTFtibjk3IUZSLCkrUFdsdjMyTWtacXJlVFhPYHAvJVBuP1JGYGFUJmVJMTlsMTQ/aCxwazpyXytDPHArQHVJeVtQc3Z0''@;'; put 'put ''M1gwRHlAYWZbdFFqbFNkaUdqUVRgalJTaUptemN5eT5sLzV+PiVBO2JWPFUlOyZ1PWZQZmsmQVRPWlEjSE8pWTEqazBRUW9GfmpecSl4LmlxbEhyPyZLJHVMbFROWncxPF54eGQzV1IibCF8RllWMjtSRTNeNE1CJGh+Nm1FYzUhMH5Da3tfdj0kdE0iXkM7NyNCemVXSmxjRiMoSTt2XmtwTSt4''@;'; put 'put ''Y3omWWVUQCF1IjFydzZeanYjL3wwVFYmcGxUIUpaZkMxPTEhTGcwajZzfnFgV3BuckF6OmdrMysrbUx1VTwjYEljMzBdP2x4cSNePzMofXZHQ01EITNIKlYsO3h+TTcjJSJUWFFTOmF0bmN8TCg8SEIram8zeWdGQXM6YVdzTXs/UiY/NT98WjEhWyV4REt4eHRiMDA6Wm55IlozUHUmOSNpKjo6''@;'; put 'put ''Pnk6X1p6KlsyUmFjQzcyPEEpIipiTGh3aFVyLDBWLjRdQVtxMTUleVZGXytyW31yWj1CdXJAaSIpaGdVXyIyLlJfbjo9PVd4TEZjYiJXST1FZDo6WWdORy5fW3g2MWhBI2pxd3RAIkxHYTFqZ0N2KWBaVFM+U2xJUHU9QFFicUIzZXhNPiQ3bnhENGlDfXZXJjQibD0kT09fTyEwPVlFK2srPEVt''@;'; put 'put ''OUBuekZeTmRINyl+OG94WUUibEopKTF0I0RbYGRVfTtzJnh3RSwiWkBQeW52RFB4c35UOlU8UDVEMmYjKip9XWdaSFltMm95KjJTcGcicUhoPzo3PHtHQ15CaWVPUCpjbEZfJC4yI0lrZExmcUZyOCUsRCpUJDdSKzlUbz00ZHszO202WnlMaDhzUn5MZCk7ezNSUiRSPnk8UyYrNX01SDlFV256''@;'; put 'put ''Z11lV1Ryalo+W184K3ZxT1luYiRnPF1yMD19R0RhZCJ6THwsKDIjajkhKTNDLEdLe05Say9QaSwwVVRoREhbdng0UiZlNV9hOmFxWXp8KEtHQyFhRyZOOSoqPmAhdFNJWUhOdWJzLlRQeD9UMj5xcGhjWUNiJl87e1RmP20oan5EdV5FfCM9PjB6ZWpoUndDOTR2ZGNRMXU0XV9RXWU5TXpZKDdB''@;'; put 'put ''TXlNZjlkQT5AaEtnLiNBN0g3JjokdC5tLEMhN1RDPVUvQTRTaz5XSiNSImg2YDNEb3E8aXQsTChGKGwrOFd+WS9tKkZYYXtmPGlkXTpDR2EqQSo8NGM1bnc8VCpGPDYieGkzNGhCNjN7dE1Qakh+YygiQSglNEwmYXgodnhfZC9OUypCWTtKM2BuZkRDbUN6ND9bJlU+I1BnKGo1LDlbY1k3YFNy''@;'; put 'put ''P0JKXUY/Oy9QZCwpTXFtKkw3RU5HMGVfZWZWX1BHKlViejFhJEVMfmcwaUZZTVcoMmh0WlQrfkRRdDNjITI9ZzN8JEQxY1k2WUQvJk17OjNXOFY+V05KTEAvQ3hzdWw1JTQqcmFvc09WbWtNXTJQSiZPS14uPTtXXSlqcjB6eWN4cyoxUHd2YGJHZCozQ0R1VStKbXxGTU1tI2R9WlJabllYfVAi''@;'; put 'put ''fGAhJV1jfV1RLjR+WERSUGBAPUZ0eHhWeT9tKXxTV3tqa3V8ODh7PGp9W2dIKldLZ3lDa2hXOy9IeVNPYzxNdytgcUlCInldejJEYC5HYSZhemkzaG1sMkhOcE5KOig5SzVSS2tDamh0KXUvd2tBeHtZPXR7d1lKVjU5TzMofDltY1FGbz9vZyNaXSE9ays2ZTFsN3kqO3AvWnRHKXhmd2JLe2Rp''@;'; put 'put ''Zy9AJUh3KHJEJVlJWVpmLFReIW40QVshe2lEU19mQ3o4anxsREZYPlRhKlE+QUd6aTY1TytmV3xAcm41SU1hOWo4akwsPjpDLntrdkdDUHtnOklZIWByQU51NzZyJiQhUCFtIyNSeEFlIWQ0O3pNQUNrNm5bfi97eVVHSUkldnBHPnJJNDhCeW9iK3IhKXRNUTR3Tjc2fU9pQkIzXWxlWChxOEVu''@;'; put 'put ''OWpVODM2bSR2UWFmantjSDFGN0luU2BBXVZ3S3kwPkBpWUxOTGZ8ImwuVH4pPE52c2ElcHxkNXArK2tTKFJ+ODR0Kl8rOU1nIm5UaDNUOmUjaXpebklndFE2OVtzZUZ2RT1PfGhpel1tYSM3PmI+IWo/V2VqZ0AhbV97Tjg7U0lANyJkJCRud0F0OEYjdFpgW0ZhclgpNjtKaTZESD5jJk40UVAq''@;'; put 'put ''MlBKM0N3Qj5XOTNGMmhGOSRNaHVHdHcqRyhaI3Q2bSQ2IThOZk1PZVZfVndGU1M0bz1FPEk6dzZ+I2BJT1loU0FOOUs7VDo6W3QwemAyYkt0VEM2ZjxKRjFBdz1QVUBVT2NELChHcXlpZjh1Jml+cjJ1O1ZBSVE4V1koTWBVcFV5S1R3X3YufV1FSV03Wm9wSHVNfmhlXktYQ0JGeXowW3lxYkNW''@;'; put 'put ''Nj9lP1l6dXxgS1p6am9AcWpqcmZFdGs6VVRdTnBkaDMlQ11MXmEwclJnTnZuakYwc0k2PkN5UiYoSDpEN2NRWDdiKGFBZCpXfl4jeFhpSXArUS5tRC5+TTEkS0EiNUQ/Xn0zaUArTFdkOiwheHhqISwuZjQ1OiRiQjF5Q2twZS88RnxXTitTUWAoZXw4R1dgO1t5NTwyJmNuZmtsb3Qkd3kkQDR8''@;'; put 'put ''bGJHYzJIUkxVVCQkMSYuOi5kJFI3ZjVia2xCMm9pZz0yMlk2bTspQzskTThxLnk0T2AqVjE4WylRMm85QXI4a0pqWlA3YSpBTG1nPHcmVCw7e3MldDNbKlI2QzQ0Z0kkYV1SYEU1SigiIS5dbzUhcGBEZCIybGdOTWVgQiRzdXpSLywzPntwcDlQNTVORWd3TyVrYi84WnZQR0kuO254TzAxa0Yr''@;'; put 'put ''XXFmUVBVTUglX0BSX1pyUzkoc3Q0K3tpV1tCYHlEaiNQRHlwXVBdVEN2YG1xbWZASyF3eko7cXhKVy5qcTJNMSRyUUlCRXhULmovKXojUjF6NDRofkdENDZDX0oha3Z7XyFRQ0cqMVBzTGtiVW95KEoiTiQoZ1VeR0M7OCwwO2AvXyQxQktJflZVVixrPUY6MnQ4LG5FL01ATDdEaDQpVjA2KF4y''@;'; put 'put ''ejMxJF4+fWImUTZ+TVlbNmZPKDB2JjlqTF4vY28rZ2FiQyZeV3s3OX56bSVhPnpeeXE+PnIjREJYIWlxb25obUhFeEgmdi9vamxvaXZEYVBkTCI2KllxQi5mOGlZNlchfXpPcjdIMz5QMVh5anNAYlYpQnE7XW1JI1ZobC8oQ34sKkdSYzg9eFZ0JkRqey9GR0RlZTYhanZ7PG5OXT1ZKT5VQSUq''@;'; put 'put ''Y3M7VFhILyYyR24mJWA9dCRxd257VytRfXk8ci82JGlkY0ZibTBjRFpHVm8pdkBGW1BVQm9MSERnWGVWejBqcVIjPHNvUjNTdSRyYG9qaTJzNFkoNkxUai96JGtGJWk0N0BsQG4+eFpHdyNNaitoWFV4Wzk9ayJ3JEpNMU9fOXxwdyV+YH5PPVVWPXg4XWolYjl7QmRXMnZnY1Rne2dycH4pUD9i''@;'; put 'put ''JTlYSGJLMW5GNzYhMWgqPmh0YmshZG4leUAyOCFENVc+fUs6aHtALy5ra0ZLT0Z6e24/LDBpPjJeJTcrTF05UWtQMiRXZDd1OnJaMGRNKFVKaDViIjguOFl3dC9VK3FmbDZUcnx3PW1iXjBNNUBkJmM7QktgdWxPaWdrTFBRZ15GPylnRHM8KSFuV3EjIm55eXhweFlHXl96dEZ1YSlaJl96ZiRY''@;'; put 'put ''bSVNP1dFdkJ+TWdHeG0vdHI9bn0lPks0IXRDfTNEeT52Tzthe0RISlAsflRgbnFlQXpxcFMxSDRDQHVuQm4lY3k8JlpZejhRWm8mWTc8RV0oUXwib2MkU15HeEJDNzZ8K2MvVX5LUDVDSCw4TjN0Q3V3Rns1RmJFVnd4cDI2NXBtVyVnbm44USpvJmNObz1pTE9FLlUifUtbISQpMlsud2ErZVln''@;'; put 'put ''LkgpYHxONihsUDwrZiNedW4rO0QhKD5pRSt0Pjs2Sj51cFhLeE1ZeDNEKEhfa2RjVj59dlcqY0ZDa2RPcSV5TC9pdE9aOl1NRjtuN1VkUyNxfHEkU1RSMFN3d2c3emkmOm1eOX1obEtKO01rPFp5Zz95OS95X0hqSnIuaDx5Rj5PSnBnK1o5aCNvfEl+YiY2WlBDWjIjIiY5Mzw+eWtlJnFEU09b''@;'; put 'put ''ZjQ2UH5ZI110dDVlUTBLaEw3RGJES0s8d249S3QoQCU7JGxESUpRTUVZek1aT0l2UTg1aHZ8PywkRG1naTVLZU8kdEVna0ZYYXd4fXklNzU+ZDNGPXgoWn5tRy86KVVHJEY5JFMsYiFJaVQ2RSlJZVN7JCI+MzVOVXopamN0XWo7IUc+RFV9QFBXVnk/LFAoMkAybio2cCR9LjZMTyZ2JSQmaE84''@;'; put 'put ''RytwP3AzbFNtY0ZWYFo7eD5ydlI0KV4zOF8mdXYwV251WG1aMHI/X2RMdGJqZ2VbNUcsSkJzaDtidTsxS2VJKVpgNC5fMjtCU2FMbTZuVj9oSXsqa1EjPkF2NU05WElfLzlTNVt2VEtWYGZTR3lFUndJVSFbS0xbekhLTiwhTVl1MTpkX3ZnaStUPGBjSkMsRikyWj9GNjxYKjNZTixYNiosfC48''@;'; put 'put ''UDgobHRVTVpyc2N4M21PR1tSQH0jd1EpeFB0LGAqXypDcGRKKiMhVW1BO2RkS0dkXWYlK08zL080LzdWbV1vdypsaFRGTTZ7KHhER3ZUfSVHZSU5X0pOX2R5NGNRYShKNnswUTchSndQa210V35yaT1IaU1xYTVYa2F1PnBYMjthJU1MQHckQ1I7dX4iSFA3Kl9sYk1pMmtQcEFeWEc2VFUjSmMw''@;'; put 'put ''X2NzdHhvZmFNPCR2WXdkNDMrVH1ZLzZ3XlRLZXhiWik0JmlFfW45NUxkd2gpZ3EpZWMuP3YuO1JIfnhRJSwyaChmdi8oTXR1b1ZOPmdoZTNmeENDfk8/ZkZCV1VaKlNuY142JXQ+dkxHZD5oIypuUUdAL3E6Tzc0O3NMI2NfVF99Vmh8fkEvQykxY3Y2X1BMWUFJSERHUGYlUW14Q1hBUnlFSFEj''@;'; put 'put ''MEp3NXV+Tz9LJEhwVT4xW0M1UVdER2ZwWTA8M3JRTmQzYV5Cd3dJKDA0WUhPQzojciNnJkk1OjJCaDp4eUcvJFcqblE3ZT9KR3VlLj1OMExhZ3lfdUpRNV0iKXUrdW5BKHNwVXpIUS5KWnZCSyxMPGU8RHsqKEpEcjZValNQZkExUD84V1gpQSZtNUZKXWh5NG9VMGphNmhveyZxNmZ7MjJ+Oi5Z''@;'; put 'put ''KzMlPkhtdnVrUVlafSplZT1kWUF2Yl1BUWh1ckFuXlsxJk0pcS95PDVANXJYMHszZ2BDNk9MQWAuJUFXcSgjZXwsPiVvTTlSSyZJanomaSI5X3J5KHpWVEtjfEp7R3ByM0BCNSIucEVfMjghSSRYeiVbI2IrZlNHcmNfYlIwWkNgfGZ8ZkomTGEvS1dLeVJ+cl16MjxBIVMxVSZuMnt2YXBYcHxy''@;'; put 'put ''bVZQSj9XL2NqcWo6IkJFYjBnJFF4YlgjNmQjS0M4bEIkNTFCaS9QKGplT3FlO2dUIzxFRUM4S0RVLHJWS3RTUn1NO1ckYjRiRGMhZjthViZsdXRZc3VWPEVqOnlTfEZ7PlNfOlh8d2xxfUo6eiVqIlAuKyo9LyFmbCJQc3xoXmFOdGNzbFNPJmkzJFlTLGUvUTw8aFVtNnV4NEV7a1NnRS5MT25S''@;'; put 'put ''PFtvNnk+VXJWOnUwOjcrY1VIWCh9KUs7W3dgWDgyOzsvXnlMdyoybCpgVVI4YipPT2NtJDJOS2JseHJmM15ya2Y5KFc5e2NoV1dPYG5Zc1V5QzJ6YStleSRYdE8rYll4a2AsN2c3cFF5LnU+WFgkW3pASUNzQXZMZig7fm9wcns/O1ApbTNSWl4sOEZFOiRfTHA4OGB9W2g4dDpyIntGS3A3cmMs''@;'; put 'put ''ZEg3K3ZWNzMyfj0kYDZpZlBpQH5eJE5jaW42TStOPWI9IktbI3hnO0BzXjV9eWFwQHNvISE1UFg6VUZLJUgvfERuK3JMe1ZCRyU4QkBlQzFyaCF3Y0ticHJVNE0yJUopKCpBd29xUUk2N2EuRzJwa0x1KXhETnBUO31XXjF3RCNwPWRfODYvQyZeLn52IiQqTioyfnV9dmlITk1SWFVAeW0kQ3BW''@;'; put 'put ''VE40ZFMpJDpSVmc4Nj1aY3xEPWVpQGBTMnhgJkA7QEI/cFFrPnRNTHNhZmFvX3UlXTA8TyJ1PVpfU3xRdUR6Kz4zMGdyfV4lcy84fXI/Mk5QL2s5d0d4WDBrJjBQeDRvMDZZWCImOik/SHBUWWVPYE4jQ1dgcThyQTA0OSo3PGJsSCxnQHpIY21OZl5yLFhZXjgsdiNrRXU6fXY3KEZZTnRGfU9a''@;'; put 'put ''U1AzPzVARSh8en5UYXFPKS53YCt0bF9DKSZdVXZwIUNNOVZpJGRFSG1XVjkjWyMvfFkrMDNjWkc3MF48TDhzKWxEJDo5LzUxe08qLkgwQDB0eGp5SzdpaU5OKCF+ZTVCZT9CND1VTywvZFdGNlVZOzdAejJgN3xQfXVVeVh4T1hhTWEkbjhkM1dhWSFATnJAZiZjJVtiTVc6bjNtZlVNWjR7akU/''@;'; put 'put ''eS59fXpiZ18wW350P0hLJl9lMG1gcX0rcW58Tl1bZ1lbTkdzI1JjJVdvdTE2UWVNMmFaZXtaLClkP112QXI0TyFBcX5dIj5UWSVXR0NgbFJGQEAvcGBmLiQrUFU3LlU0LktfeTozSVM1dC9QfVkiPGt8ZlpKY2VzKWhgNGkzPnNNeU5iZUk6bU5xezlYZVtKTSVdPWtAYmB6V2MpWDpOO347JU9j''@;'; put 'put ''IV0uWGY6Y0pnUF4vOHF9SCtJTEo7a34+emQ3XWNLeU5eRThSKzh6UmllPmEhfTRfUk11RHZlRV03P0V5OHc6NDcjVjlQdnJHIV07MlR8KVNPWSI3JnFQcHBJLj1pZ3wmbSQ6KiNETkdEMj1IQipAUls1PFVdbGVKQnh5YyQiezkxNyQhV0I4JG53UlIyPmR2UG9vfFpKW2ZZZU9xcEx8V05Cc1lS''@;'; put 'put ''WjdRRERCVFBCKStlWHVUaF4/Wj9yYWh9SGdYcSxUZWdIbTFrVUIuT3A2VClxJXYxQS5zeGMpYlJQJm0yaGxXW2RzaiFQXn0vYCo1ZTFwbDFzUCJRUDxHdD5MWVYwUUBzN2drUWpQOT9QciNvYDdbRkx5NVU6KEVhUkEvXlBAMUxgOCp6fl57NVVNbXg2N0tPInAkdGVRbEE2fHJUd149KGs/MDU8''@;'; put 'put ''ZSVCJiF9PShqPUkkMkU8VGBPWlohOj5uRWZROzZ+czJaPlNAKmBCaiZsZU4/SkZJLHY/Z1ZdNiZIVlNnMVFjSEEyUzEvUUVuNmtFPWV0aiFbT0MmaHhSJSokWkx1X1ZLTzdBXTBYdnxlP3UhPHIqa08jL2IzOn1PbGAxUChteFRpJVBGazlzTT86OkBsQVM1fVo0JT1TdGJrIjk5VFhPY18pOmZX''@;'; put 'put ''cEBsPnwoMWwxOjpqaGVVZlo0d0wpLEBwQCFNWjZCU2RHMyVeWm85aHZQYG5HY2xrPW0yWmRgVFkmRD0/MGNyeGpDZUBadVZ4SW5XXkMyVDVnLEM3endjW0pKMX5tTVlje253dGZvRk56QVtKYDZ2Yzl7JW1eOEZWbCVBOHNxM2YkeXRIeTVRLGpxL21WWjMwL3xLKzZbeGB5KHVCWjBANEY1Qntw''@;'; put 'put ''O1dFRFEsXXxhcktSSGpLfCErUTVMfFJTIX5kWVRkc0J6dGZrPnA2akxxSGl9MmEmb21NUiZpS2EvQVUpIUApIXokOSlKbDBrJWNBInVISnhtP0psTiY6OEwibCRgMXNKPUJ2Rn14YHpeTDhnQkpKezxsRD1YJS5IdG0hI3tqMVVESDdyNUNdKFNhelQvfSFOMVlLZE9tfHg8aGw0JmJnPyk+I3tI''@;'; put 'put ''S2NvbX03Lm1MbzJNfTxRYD8xOlQ/SSJYL2BXVCsqMl1kbihVS3guPTNQT3M+Lmw5VGtLM2VNUiZPS19Jd2dJPilMfDBsWVY/NHh0dDs1fUwpS0R5cTlbLClNfVdwMmE+WFFnIVd6RER8bl5JPEk2Vn5UUmVjfnI0WzZpP1EjWHNKO2JKVWRhd04meixBfCpEMDkyZHxGPkxnZXV4Jmc7SCYpLilH''@;'; put 'put ''Pi4ybHdVNUd8OyMiOEpxOlFhP0s7KUdeSy8oaklDe0N6MiVKTFRwXz0wbCwlPj49QWwkPDl4anFeLjUlaTNDSGo0TVFKW1dTPXliREZ6VGMyOi94O3VlT3wvOlB7a2FtSUd6Xm1fSWlYfEBbTHZfKCFRZ35Me3NDRWdMSj94ZStUflY5K2VHdTBaRGFPO1UwWUkhR1BnUixIdVZSOTg9OT1BYiJ3''@;'; put 'put ''QDc7bSxXR3drI3FgfWszPy9acUo7YiF0Ki5OWik8YX05MHJDV1EodW51XiQxa14pR1s5a0ZMNUhBb3lAOilLd3QpPztUfEROY21uT19LQ3dGRnIrJXU4YjNdVzF4ZWVCWUQ1RmIvdXNobH5AJHVFc3xAbUJQT3BCRXorTlZASkBpSkheNUl1UD11Qz9dPVBvRDBAe0dMJD1Da0hJeVljWWk7LnBf''@;'; put 'put ''dSxCe29vUy9IYjxBV10hZyMvVENQW2lhXU0qb0V0fXReaGIsdCFOUVBhclI0LHtbR2JfeW5TZTpKOC52aTpxczg9bUFuVlNkZU19KntbfDR8eWhrKWI5OmZWL1hhfm0xR3B0M0JQUTltXkRAOj1eQ1Q/RUBdPUJXWVV8PzNXZkdMcWZ+OkNxUi8jSG46X0tdV30rMHNiYktOeDlKSWN1ZTl9R3J4''@;'; put 'put ''a3MiO2ZSUTd+bm5VX3RQdyI+IlR6KCZhSWhxcSNSQTJUPWA7IStuU1dLeiY9Lns+PEc7LzcpfH4lcU10WkkmbiZjWCNsKytEKmdweVZwX0IpVWRdSjNSQzJkcVFpQ3smNGMwSl8/NFE3RnlhQ0JvdloxXWRDekUrPXJRQjddV3NdXihmTEpGSiwsImxla05uU2ZCfjdYc159eF0zPz5iVDpJaF0v''@;'; put 'put ''T0g1KGkuM3E2K2NBIWUxaD4+VTVHZGw+MHtMST1JZSJRdkNnWXM4JFB7fXJxeShVdk5gKyMyS19CdkloT0I6NX4ie10jQChBOEVMMEVMX24jfEZRWGtgSzU1NVMubTZYOSNjM191Mz05d3ZCZG9SUj1qWHlHJTRkTXpMZUsvOmg9PENfMHF1TVZhT3BmbjUiTXBIQWFbMC5bImVxNEYvMmB5a0Mp''@;'; put 'put ''cG08NHVOXWlFSF0sSjBQUkFNKDgycXFoTXdfVDtnSHYvY0NbVWR4TFI5LHhXYkZSXmhbMCM+Y1huTFl6WWp6Z3NDIm5rXlhsXihxTnlzLzREQjg5KmZmKkpvcmJuRTtpPCNUPCg6fi5oc3wlLHswS0U5eXtsLChSKGpsaU9oXy9oQG5jJFI1aVQxQTBhejE5ajkhfXBuZTJzN3NOeGNranltT108''@;'; put 'put ''bWt9VjNpIXlmTTdKRiNqTGFocG80bjlFemFGWldqJEJaOThfLH1UJWomPDpSaywpLzhjPmlka2JSJTJDOUdXaDQzZltqQF16O1pTOy8iO2AoayVSVT9aQFBPelYhJEtsRW9PKDJ2WipIU2dAdyVnRz5BaHt2Uj5MbXptYV4/P2hnK3VKXS48OGFIKHckWVRlKTljNHc3KUdNOUUrbX12QVBzQlZL''@;'; put 'put ''cnx8dUlmc2E7JmFEWDdudT4wRmViYFdlbkpJRlJle2gmYjRAOUxYYzxoaDExczI7Vj9LTCoxb3k0NX1SbXNrL0B1MnhZMT1YUTMxWXJQeGpaYFtzZEBPaTFjQz5GK3IvJiVIVVIxREpRL247YCNXU1JdblhDRChXMltlb0olcW51LyF6bUZAVG13N0M3LHsuP09oRmQhMXk0ZCkhdkgzPGlUbzYk''@;'; put 'put ''LlhwLGA/cTElVG9OdTlpciRXWmQ6ITdRY1gsUTIkQHljLzN8I3U/UVNBOX18VHZ3IXxkcGd+KHI1UCQoNU9MPUlTcVN9Yml+WXgvN2g8OlVGXz1pLGk5M3lfOkFJTndZYmxwPE1IUjlNTj9LdXhFUldxWGhfeGYuaSQybHd0Sy8udFQvLHQ0O1pmLGpub0k3JnQ3aVIkJiF8JndDLDE1MWUzPkp6''@;'; put 'put ''I0BoO2lUTE1EInBQa21ANGZzUUheJSEobXcufTV8VVElW0M2Vz1GO3FxPXN1Zzx3ND9RSDhWXVIhWzlsVHp5X2BaIX5HMGVjY1QzcnxQJkpDX21xYjpRLHkvNUp8fDhYaSZxMG1wUz47LmUyfmJ5VWxgdlpBSDA7JTR4Kjs2clFiN2Qzdm5oaGJ5UndVTWhHIjFab0YyJiQrdmshTU1VT0VMSDFS''@;'; put 'put ''JC8pfTN3eyVPTGZeWkw9Xn5La0g/SCl8RjsrZmQsSSxJQVAzT3IlSjZfQi5QJmdhVk5mW3lOcGwkUSpjOSpSOW1IfGBjV20pfk9wVUdiTmE3eGFVYW9sPSw6djR7NWNlJClodmh2b0wvI1QrRCF9ZWdbMHtTb3JrTGtQcTApeSlEbzdCNCZSRkcxU0E2X3s8TztuP1RIWWt1YE5XLFdHUHYqTCtm''@;'; put 'put ''SUVAPiRTbzNyTHkvbj53MTdEO3hXOTNdX2koMCZ6WiMrWzUjbkQxQHpXekBse3FsJWlFJmZFU1dnaU9CaWRxTEQhVlZJXVRCYDBsWF1nMjp7OlhhI11kRT5+Zm5bckk/YUtaVnJCWVpyRSVmW1BzRGJoMU9DRzNbWVg/eyNhbXpSVEd0K3Y/ITcoYWYyfH51MSYsJDorRExwfHhuaXFhKyslbEVG''@;'; put 'put ''VVdLeF5fT0dJbHZSUz0uYVZyM1FIJlg/a1R1dz4jQixzPW9Rd0d2O2ppWT1HVlQmUlFxOGpxUlFDdD81cSldT19DbENWdjpJMjA5K3xqM21FdU4zMn1zKEZfN1FFcHR6ckguInVOOTpleiJRWTxSUjpLMT4xS18+UzZidmp7Smhzd045YG4yOnlIPkclMTRvKzghO1J5Pj1CL21wZldeJTouczZ1''@;'; put 'put ''NVBoTW1sTkI9YD5HbXY1eCU3a2M3eHpMQngsW1MmZCF0Sk1ReU4vfVJXZDYlJDQ5Sm9mbCZ+NWshVnJEXWZWUENQbyMoXmZUZm9PNWBrNV1vWDsje1RfOCw3OWUlT1loeldNa0NgNj9OWzxvZGUzOClVZ3sxJGN1VVlNViNfV0gzMyRSWTphP0RRJT57QUA2KHh4R35YeFZbbWtRb2s+eTpVKn10''@;'; put 'put ''Q3BQOkkpPyZxY1k0IjA+YUU0TUcuKStSakNLcXF1dzgqKHQoSnp2dXZ1aHg1PFdSIzpFUnJOTXUuJTc9WkNpKGJDdlR4Ung8cz1xc3w7aiJgNF9fVHYzQllDLk9FI1VIcT9zQWQ5KEkjJm5zWG1GTVtlTEw1Y3xJcDEyQEkrQ0BeY0JTbyxUYzdYZSpvZDg8d2BoTShBTWQ5UipneC9KOFdFIUcy''@;'; put 'put ''LD18IkFpNWtDb295WEgmXykmJktTSDVUS1Y2aWdwKGFIR1VwdzBTd3gjdUA0TERrYExQRl98bHYwT2FEKTYsVWlMcEZVSnVIIi81O0FzNnVfOD18UmMwfDchcH1MYGBqbXhqZyshOF83USEkQTZyNFFVInhyRXIrQiV1WFFHYWRXSmU3LH12VnREIiwhLHBuTSsuc1JKNmxzRiV3NjQjLEg3Xm9P''@;'; put 'put ''JUJPWFd0YHlDcU1NNXtFekNHS3RDVUsuVyRQKGtjMVl8NHt6aCg0N0NjUXZST04qL0I2XjJ5UH0jVCNkZXhaKGI3QGpAJENVPmZxKyUvQCprcGt9aFhkWW1wPltSNkZXdEhhPWJOdE5eQGFMMFo7Vy8sXzhtY1BnRUtKUnR1NykzJC51KTIsVm4/KkxeJTMibjxAMWQ+ZU95Ul1LaTkyOlFKanAq''@;'; put 'put ''RV8sMjQ4MzxjRiZxLD1UNEJ4fiM+JUlLYzd2JSNkWE9bdH45P051ey4jZDVaNix2VDhIIjM8d15bUW5rMGh3aDtObk4jRD44XSwiMUVafl5APU0mVlVBUkRhYVR0SnYyJUZXRDUzSCxzeUtVOE1tVS9nO1FoKENlYnhSWU10Yj5SUE1uLyk/d0l7VCxNWHNnSypeUjt3RXVoaXc7SnlUeitZTSNi''@;'; put 'put ''aVFaNkNFdV1HP1pXPlhpWlNpJlBmeCQkY01kTWVhNGhreTU6VkJ5YSQqfjEsan53RUd1eF1RcmxhIiFXQis5KXlwUVAvRjNaLFpKQDdeMkRNdzByWWsmfVI7MTFAI0A+MzpMaTp0KHI+fmRLeCk1YmBFaW09Il1RNHFHW1VMaTx4W1dCJmBZMVg7STAzeVp7MUtNMzEjZjQ7L1cjX0Z6Nyp0LEBk''@;'; put 'put ''ZUdQcS5CajM6eSIxYFREUyNUN04sOnFuNzo3VGF5X01aWDhrQUBQazIzOmQxSk07eHFdaExTVT58TWZUc25yKypoVTZBanNaZGpCWXgod0FeOmxmNTRddW9jN0UlSipTKiRzXVIyaUYud15YYWtDeDVCIn4ocj06PGU/MCFzVUQ7Ny4sUmJwYU4xXlAyMiRbOHRqe0hbbnAySH5mKGsvWX0hXWRg''@;'; put 'put ''aD9bKCh7NnwiIUw2W05NZ3RAeGMvWzg/cCJELHk7JnhANmhVUi5UOFtacU5HcE9GMCY5YyMsOEpjJUZjNzNCZ3VCO1RTPlhtQkk7SEJ4WixrL3hpPFlsM1gvYHA3Uip+OHoraDV1QlB6OXZhXXlTNzs0W0N3KnsuYVZtejBxWiU+OXhYekooc0gmd0trJjBQZS9XPTlVbmdPa1I+UFBJPWkzVUd2''@;'; put 'put ''V3EhRlF5QllvRzNXYiQqeFozYlB9QCFDU3leKztKbGM4TSphalNDXi5EPSNQbk52ZTRHLk5kRUdlKyRkWCprIiMqKTAzNz56Uk4pRj9mRnpmP15GT3RoOj0oOn0kZExVcno9ZC94RnMuRzBobEZoKmVFPDMvNSgwRV1fW3hycnp4b2RVV112enxGdzA+UDxDbTlBX3tCfmVvRm09JmcjbG08XUtD''@;'; put 'put ''LE9kQnd7aUk6Nz9+XUx5bEdtLyw4and8LkBhTW1rPWZsR3wpKUFZbjgzTUZuVXxJRTFKQVhwJlV+a1UyenYhOSR9OkkoT0c0NDV5Pi5KWE4wInVfLkxgWjFwJUhgbDxXZSNtaitjUmtIbSkmYyE9M2FyNzx6YSY+UHw0IjcuLFt5I2VvJmJWOGJHUzhAakA0X2xiSlM/cWpsfnE+SHE9YD0ifEsl''@;'; put 'put ''cnF7Omsyb0xWYD0xJnpHUXA9T0tVQHp3e14xZ3BXQD9de1BxPnJXJW1DNnFoQjVWRSQmTm5ROzspQyFlI3dLXlA3eEZ8NnVGdn5ANWFmcG9RSXx9NlVWOEAyR0tnaWp8JTRIKn0hOzEkRkNbVSUxen5ZSUJVITRgLyZSY144dVU9M3Bdb0w9Vn5qTjlwX2UqXnx0K3Jgb3xQTVZhNzN1JUFzL1Z5''@;'; put 'put ''QFc2en45aXN7R0RAfjRycjJ2MlpSVlN2MVgrSUhbSFMxWUlMQz95JThTRz85VFE9aFdxSEdidTJjM1ElVzZpOyZlRyQuTnUibFlJZlNTY2w0LzA1JXl3UnBOJj9bKSVAWy51UmB9Lkw1Xyw/YGdIYkp9PDQxSXtMV0s0TVd0UWF3OE1oe01DfHVeWyx7ZXpsNHhkJldgbl8xOzFQVXBOZ04pW0U0''@;'; put 'put ''KWhBPD5ifXliI3Bta2VjUmV3SSIkWj8keWIjPzZbaTRgUm1OLHppZV57QVhIN242X08wcG1sJFpiPUMjQjsiOF5mMldFP0VlS3NHcDtoYWRRPm14Qk1vNkU1JUZEeCQmO2NhRG9IeykuQjhCWFtTbGw3bnd1an59W1NGLjZEJWxpYUlRTiV0fjFlZ3gvUlYoXz9jMUJXJSkhelpDT0NCSjFSZTwv''@;'; put 'put ''ISIlM3JZIilrUm1eWCViV3csT1czK05DVFtDT2xGTS5qTmxGV3lbXihDbXlPdFFgW0lIaVVsQFskekZZJlo6RDR0MUU2SF92cyFMI1NkQmZUNXg9PDF0Rl4scWlZI0xafHFHYE9Zck1hLio0QD84XkYjfnhkKFgxOVFVTko6O1B3PkIwNCxfKkx5MFpoTzNJPy5jQ3gzUzNpWE9afW1aVTg9PWQy''@;'; put 'put ''OmBlNGZEQG58LkdBYjZ7YDgiPntTLHopbWd0WzVUezsmZlJYRUglL1pRMj9Wd1lKN1EybHEucj5VS2lDeXAxKERJWz0oQH1gMlRzZXo3NitUYzxEUUx8NWRCeTVkZUNpeTh0RiFTXkdweCUzPDAhYmQpYmFaeVh8IWRgMiR4ai9HKiphYy5RRzgmUnIwXWBRNVZLO1A9WUQ6RDc2PD9XLlJ2Jnh7''@;'; put 'put ''Q2pId0lKJjZXTmQ7OHN3SVIwZ0I2PS5ONVkoOWRoQSF7ZUVkd05TdkNidG91QCN2TytyUSMmQ0YwaXZyTW1VUlc9aUVafFhDaXc6LHkjUF9Yd1NfckUvT0UidHNydDpEK255QUZdUFo7dWVURng8PW0pWWghTGVsUX5EdVFYfUtWRU1vaUxwP0VXTWxNX3puOE5tUExUbEFsbWFwUzxkSjpveG00''@;'; put 'put ''VD52ZXdzW1lYM19qaipmNUJaJmIxXVBhNjhAQ0J5Vnw/Q3JjWDIqYzs2fWlzeElNRVdsNW5APlU0aExUbCUhM20xIzl9LFl7I1tqISpBfV5afXJIJVIkOWBFZnNJJGI0OUJwKX5edSgrdSpsMk4kNEEscWJLPG8sU35LSUF4cU83N15jUDc/WXNZM1liYV1DKko2Y2twWXxhNkM6e2lqeDYre2dH''@;'; put 'put ''YUF7aip4Lz1vR0RMVUxjZWtEbHJQQ3N0ZC5ybEYqVCRwK082emtkQUdBQVp9VCtqIVolalh1aE1de3B6dTh0US4rKCltMihSNi5xUTpkNGcoTm9XVz1KUHVpUn1UYjU+V2xWdWd5cSJ9T1d6NVVtNDwkbGo6ciVse3p2LmFzPU14LkY9UiQlb0tEfU9KOUMzV35WZipVKiUmaDlVS0VfO0QpZyRw''@;'; put 'put ''VUBdTWtyK3FPWFM3QVQ+XWxxSG16KlgxWmY6QmFAMT9pTUF0fFlFZk8va044YGNGZEZidm9CNldGO3ZsPklQbjxJMElCfl85PUI+Wm9KXWRpYUtOejdpNEpJWWt6P2k/dXBbQHwrNUpiRyxFTzg8ei5zbFlqKTU4LDVMVnhXJCM5bWVsSDJGUilUZ1hdaj9VKCQlJW9rQVo7Ul5TNlozKGtReHRg''@;'; put 'put ''UHR0YCM3bm9SJnA7NjYkIVpGJF1VLjVCR28/Tnc3L0MuazpZUEZ6Wjo7ZmI1ZWk4JTYlJDdpczpPVnU3WnFZZ151RXUiN0dmPyU7V0xIbjlnJUF6OitdfmleRU8uZntgLn5sR01IXmIqZztVZF02LylORFR0WlFFW1ovSWBRVzBdZyFyVn1IaEc/dnBnNUZqJTlldEo8I2U3TTNGRFUsPjI5OV1L''@;'; put 'put ''KiZYbV9LTVF4cWF1IWVDYlpxUCpFajZlcTFjUHdSVnhHKWkuXnMlTEhFdVkoRng4KSV6QCVnI0Z1JnMlKCUhbStvblZVKG8kKHApX2IkNEZHUSpaRGVqLFdPKjNGPz5HQk89RHNJeTFFZm5ZQDZYOWVFUj8xXjN9VVpgRUpJPFpVY3pVO28odUZ4QiY9R3tdKmV7SCFpYHROXntGJERpOUQkP154''@;'; put 'put ''cUdqaT1mbFFzMXBINTBiJGlxXnU6bSN1ISlwLjx7JWZITCpKdEAlfVEwbmB8Tl1ASmBhZlIvLCNMOipNV3ZHaHEqZ2ErS0FaOXVHdElWfHxrcS5jUGR+UkIiakxOV3A+U00mazJURTpKKjRaaWlyIUU3M0lMMWNxMjx3SipyYDtMP0RyMG1UPDY4NzV6S18kMSx1SnpISkxWKV5YQ1VtKngrSHIl''@;'; put 'put ''ei9JP3lrbUBITCpFdENEXihOJjpKY0tNYShha15iMm89MHg2bShzZ3A5MnRHNFs9YTsvMWxZPnFndX5KLyw1YStSVUh5Umd2In4yKV1hRWV8eClldmwvKmZlTUE5OFAvWGcsY3c0QFYwOU9ZVjxaKmdHJSVnS3hhMSNxM3JNT2A0U113Mn1EbDZjLFBAKnRZM30iOlpjQX01dDtJOl0mOEhhKVdS''@;'; put 'put ''YlpdUjclMW57YV5xSUMmPDk+OEtZLCkiMTo7cFRXQiJTVlU7QzkrUT8vYDJHZXJwWGc3XUcjMjF6KjlDaEpIUE5dKCpFdn52XSQkTE8rYVBZTHckRVk/U2BYPW5zYEh9aEtITkIvJShSVGAiTWQ6OylGQ3VMTUI8WCl9dHF4N08uLGhkQEdRWVE/fGVXR0hGZmJ3JWMuWCM4Q1N8dX1SenY9dzkq''@;'; put 'put ''Ml0jKix7JjRRO282UTY4IiRXYlNwSHw7RV1WWEE1bGR1TGNbdjdTfFNmUVFgMzh1RTdxMUlEWDhXRj91V0goanJUVDs4MHF0cjtTa3M4VHphbFYkLCV8PUUuM2lSZmA5cX1TKzJ0PEdnXUQyejN1cyJwL2RITkA6Q3VjbklEbnlvb2kuLHhPPj9MWnI2LHRSU21mNGR6dWxWSFVje1BIZXldRl9z''@;'; put 'put ''SkM/LnR9XVNkT35sQCxGT153THIuISEiTTF0QipRQ2BxQ0lbbXxYLjIiRiRwN2xUYEpuQ0csQXt9bSRGQ3ZPSSM4ITllPntgbCF1JWNMKzNzMV5oJT4hZU00OGQ8aW4oQnx+eHcleDwye0lre05OLFVrX195a0xbT2lvRUpnI1paMn1TWSVtTHhbcH45ZC8oalcpN1FhJT82eUtzNHxoX2VXam08''@;'; put 'put ''ck5WTDZyQClZJF11UzFKNHxDT2kvWnNfKEkhJjR6RWJ2WSU3ckBKRTNsOmxdfFZLRXsuMDtHKkU+XkI1QChBTXVydGFiTlI0U0NjeWMyak5ESTddZGhbUUcxREBqNVgzP01EbzQhWnA5WShoM1Y0ZSJxL0B+N183Zj9Tekk8N21gPEg6KHtWdXpSLzVrfSVfZ1B2JTpZT3xgMWZ7XVhTOyNRcW90''@;'; put 'put ''PyV+REAycEp+ZGA5SzV7cm8zX2x3UDN2IUIlbG5GbUJJUkg0eHR+JHVQPTBPSXA7cEBXO0cyPWpaL2puPXk6RWNybGdGXnRzVEV8V0tuKE5KbWFDcFpjS0A9RCFHIkpBez55MzszO2Q0O2IpSGNDPUV7biY7e1F5bGY3aU0wdVUrKUBNNjFNcVB+eTN0Wm5jfDhDfmksK3MpWnBQb0xzPisyTTlh''@;'; put 'put ''V0pee0pOITpsPF5odiU7SzpeQ2V1K2NpLmEjUjYuZ1VqPjB2cDxiIzhOLEBNOFpySHxHYT9AMURkWjg9NlpwfWdRVVRRPn1hZS5eYE1NdkUue0lqPyNGeiQ/KiVgPl9VWmdmWzI4VEIrN0NfT3V7KUZCT2ZaLDMuSihFSURwJWxxI29vWjllbyY6aVkqYC5dcDE+Q3o5d2xOd0UhYT98Z3c+bm1d''@;'; put 'put ''anY+S2ReOSMveikuWyJLKk5QdCtkJk9uZXo+alEvLCl0O1U0XzUmUFUpWVFlandDUmlhRS9jZStuRm1obiJ1cGNBT15gcHpARltOaHZgdXM9XWVmMVFCVXoyeUJNayRNUWNKOGNhdlNycS48fEkld3pgRHxtSEMkUkh8S25ucU1WND51NGpLIytLW35URW91VFQhXn1Wb3NiVTBLcUdzJlQjKj8q''@;'; put 'put ''O2xDQ24/M012KWV4cVkqIj0mWHt1KGZMT11Pfkg+RVtPOXtGU0tfTGddY3cmS2FNW1goKkIzZzxUM05YLGpdTDJSVklubnlJSDBwQnY5YlVQUk42Ok4qSls0NjJSUi8xa15rUDU6T2ZFUWopWi4qbX1CTFV2fkt4Iz8/KWNXfGxyc1JpbmYhYSlGSGl9U1owayleRloqK0Q/NE5AZkBqWl9vJWxw''@;'; put 'put ''aV9NWyZBd35OPHt+MWJxIzojYjI1cj9CSFRRa01aVkA+fGU7bWJgYztEREhKJkMhOCkuTWllK2xmWzFyVi9GSDJNXX5KXlJLeFJrOXNMZGJ2RUxTe1BUJlM6bU5Qd1tMNERubW40P1FEKjxKRzhZbkJyei8lUFQuXTVOYl8/LmRXdG5KXUB9SjkmLmhhPnJnUDhHfXBLOEwkQWQ9PXlSVkUzWiwi''@;'; put 'put ''dn5wIWZjMGkuXU8xW1tFdUZ5NGwociRpe14+PWc6aTRfIyk/XStSVH0/fl9WJkZVenovXTRIT0g4MlZxY1QpWXxOa3ckVHdDQ0RCVm4pTSpLViZwdEpeYihbSzZWSTF1ZT8lTm9fQyoyVjAxR2VvcWZeUG8qSj5teiN5d1pnJUF6R3t6IyYxJWEzem1vQk0yPkMsITllVX1EZXpuJjBORGFEVEU+''@;'; put 'put ''cnM8QERCIzU4PTsuVmhMYGhfMFdLaiNPOnVfVTNwZSJRe3VQImZEa1FnLDI4c20qRURHWE5QYjhvSGdhQE17clY8Lm5ZVlhqMTlEWWc3NkdrKkZHNS5vbixUUy86OHRSPkhGVks8Zz5IO19SWTwmPkNZMjQ/VTssN0kvYi4+amxSRjZdbjFCezsqPXE4Z3RJa1U0S1Z4fjpTXntHcUJAPFVxeVsv''@;'; put 'put ''UjpeWCo2VEAhbTRdclN8dVosbnJ5fUJSbUs3WipuNz8pZV5DbTVWelt9SHo7JFcoR1RKOmJ5aFo3bTQyPS5hTVNJVil6ZEsmMTVPKD8+M2xHWkpQSFg1Qj02IV1GdVZ1S3l7a1d7ai9afVNUIiFweUkxV0BrfUpRalhjMGA/SVFCfSJxMztMOSIoXjYheWQlMHVLQiYzL3xxN3poU0tDJlBsPVE1''@;'; put 'put ''bXIqUGdhSUY8c25OfiVLQXRTYUhrXnA7IztnI3x1MCRCZSFoYUtmbHUwblg4QzJ3NCpYP0RrcE81VlgwQFlTRk1HTGA+ZyxzZkQ+cHt1WCFGJXVNfi90ZmFWSlRIdmdiVW8vSz1pUkZuTyNfNntyPC58d3YrOFVCLzVJdXxXNXE7PnVyNm8wNVk5IUl9Qk9kWWg1e1Q8eUE9SHU/KXZbQTFZfltI''@;'; put 'put ''KU1UbEloaH5zYiRCTzZmQj1Pfj5CeXhdVnd7RUZVQEJxQFBHT2dXXWg1Y0huWHZ3JlEwLDN2TX5Qe1lxQElxW2Q6P0BHfUIiWl9vYE1sbEZNZjgyOmhEM1VsMT1yWXFBX0BGdjE/RXN6fFFWREFUdjVVYHZSR3lRTmlgdkxvREcidkRxMyU3VzB7ODBvYSxjfT5bMm1oa1B8KExwZXFQKENrcXxh''@;'; put 'put ''Qj5iWDw4dk9RaG18Snh8LzhiNytPPj5Vd0hzOUNRVXI9V21wO2M7PjddKUtqbjNgVURWbyVfaDZ2dzY5ZikveFt7UnYzI0c6Nnh3X1ZdeWc1NFdoWjgyTithbj1ocFVTJDYpKFZoYUE1I1NSVVFZN2oyYjRrYztOM0NxYGt9c3U1NWVzZSllflttJHQifnhQOjowRWxdPTI5UXg5OWlwYmJhQl5S''@;'; put 'put ''SDBRUCkjNEBuVTYlcXpiPjFWaXI/eXJoKltaSX12I1pBc3pfW0VhMDN1JWBfTVckUj5LKTx5aV5ubCw2ISZgaWFkW2hITCxIQk9EOz8yWmU/ckNGQz1VdVsqY1pAdHJlPnFtW1kqJV88WS40O1hnUVVmVEI7M11mWDNzKTZAcHlzMVdQYyQzP0pLJipAU2ZmclpZMXNhMipCeFA5SldKQl47cWB4''@;'; put 'put ''RU1iOz9RREswVmExfklvWDgiRHxXVFE3UjJecjoweF8ze3V8NlpjKXNpL2wmbGJHZkNhSUZIQjlSa1lAK0oyPk8oVHtMZndFY3BSKG97MHVRImBBenFoZDRqS08+b1tMMzB8fExpKy94diYobz1LUHJYL3A3Jj1tSzZ6THNiKiZvSnZ+eUE4NUs4NCh7RlVYM2Q7QHJxZV1tdjQlfVVpW1UyJFZ7''@;'; put 'put ''UCl1bVU6V3ZwU1NwOSZVcTQ+VGluYGtPZixGV1VSZ0Y2RF5iMDh6Y24pJk50RVElX3lEZHh9QS5zY1ZbemFEYSNQMHxZdTFke3NyWDl4Ui9XMU5yRnhoMSZ8Z29saDQyX2dib2lsPlA0Lkc2a28rSls+a1RqVVZqMS88PjBmemd7a2JnO1FQZHwkIVtfLHJHSVFzS3NTREVrdEJKXXtjTERnKVhp''@;'; put 'put ''MWtfNEddQ2hOdnV1KWxrY2dFIkNTbCE/TTp9Vl9DQixGaztJKjs+YXc7eCJxcUZ5JWRXanNlb2ZzSFNmNS46IlhKaDtEP013aDBlanQ5TEMwZkZdYi9fJU4ifjlOeStnW3psNEpCNiNeYDJOXipJWmR3alNGd1J5L2s0UnRAdGRyUWVCNU8+W0Y8N0ZQe0hzc209RjVsKzFpaTVgZUVSWGBvcHVd''@;'; put 'put ''eDcsTXVKWE9tKnhCRURWWXE+fHwxXittIUAvfXtsc0pMI2czU19zKG1+emBtWjk4V3hFdTxVK1B0WW1qQjw7WXdCJG16V3luZHFPJVV5OTlXMj01L0svKTtDaCV0SCJjTD9jaHw2c0s8MyVkbyoyV3FSa0tfcjhBWTlaeFlwZldwLjpHZjpgd2ZEbDdJLyFjO19QT04sXm1CIil5c0hAJGptWjda''@;'; put 'put ''M3toYipeYXZaKSgoU0xoaWdOaFVeSl1FTFFHVWoqeUFrQmxPYCxPU0lUKGdDaW0udUsxZlR1PF5idWYrOHFfeEQ/P3c4OCZ2QmlxPSVRdlBpNkVncWttPi9kYVtPW3luNE1HcmskXXRbKlNqPkMkTj5wLnt9YjV8IVAlIUdjITI4d3FaLzhmOzFfKDxNYjBRemdeNlE7Tns0JmhoZ2I4UzMrK0FK''@;'; put 'put ''ITY/JS55Qnt3fmhka0JxI0cheG9kb3QwS2JSVm0xJDczU2dtYkVPYVVsRT4hRmdvUktUdUdwPC5kaHJQKTVTNDEyK1dlWFRkWmRzSz1La0U7PkRHJWpERytDWzBtUWhSW1lSJjRnRlo4cUwueTx3QklVbjxVUSl2byQ2RUF7YU9fd2FiIXglMSZZNUlib0BObn1PNXh0aE9vMTshNk54fWk5OUBK''@;'; put 'put ''eDZzKEsuQyRaLl1bWnBlWUs9bnlseGUmPihCd2xYUjQ3IUltMUIsYSZJeShCayNKdXVROihbM15qbTl0YEFwdy9CPT58dVhXZTNRW2hXRE45NEQ1d0lvb0RufkVWOmF0JlI2LHh4ZHl1In5wXjdgcWIhTTI1X1dgVVlaWTtgVSg9OjBMUi5pMG9rd11xP3RPJit8R0dXaDhmSW9WKDU/eXlOKHlh''@;'; put 'put ''UU5YL1FwN08lR11iJWooZzR8NHRzcG0hQiZ0UTRweT9VVUZTZygjVEtLdj54JWhAOF8hVUlpKEkyMEIicG5AYU40aiRJV2JpeDVJVV4sbE9UZCRMcmQ0M19dTHRmPVpRTXtaWGlgJm1oXj93My8sQSJ2fENKaG5bSFNuWUp5XyQrSS9qd0p1VXx6VypzK3thPiFEfHJMd0VvNGRZcHd4dHBCPyQk''@;'; put 'put ''OzhLJXkpLFZdS1gqX3QhaFptTlR0O10xTnttT2F6LzJJUnh7SEY6LlQ+NiJxUyIrUmM0PEFoISRhT25temtIWiNbRSk6YThJVHtXZGZneTJ+Y01mayREbC9WfGl+aDV4JkRdSEMvdSpnT244XXI/Q2d1b0dDS2deYnRMViVvWyEpIS5xV0hDW1A9eiFVVDNZImwpVU93Wnl9MmpAIVJRdWptJHsz''@;'; put 'put ''X0IyfEtEW0ZAdkQkfTkld14/QUleb1F8XSJLbmtKIl9gXWRwPl56LHVWVT9vP0k8PjtfK1RzZyVdYkouJng4Q3dvekttayloS3xdfFBiajFVZzJtcT0kVkpFRztNRnZVJVV9TXJROlU3TSVRe251K3Nnb0xeTlcwYmlGWDNTb28pV3g0KzJ4I3NyV0AxPi9ASFU+ZldvOWReOVsxZShJbiIkb2hz''@;'; put 'put ''OFhxMVZBUXp+LChhM0FReF10PGY9P20lLnF0ejYueUI9NEk1Jix3NWUqLnJrNV44MChfJCJpeFVmISNeRHc+bWdKNGMzUHhyZiR5T2YmbzEwfFpeXnsrfjpgTi9FL19zOnxQb2BLK0ZzZlchNShQQkx1MUNKOlo7ckU7dDZpMF1LemAhQkImc3t1UF8hMykpajBEZkUvWTN+PnksY0IxX283XzRU''@;'; put 'put ''bFRmdjV+dlh8aElJUnNXTSlaelgvIlhwKUFOLG8zbGJPL0FVbWgpL0M7aWYve09Idm84eGhnWzplcCUiOzl1Lzxjc3A6VUdWeTRwQnJrK2QxWzxpbn1kKVl3ZywmUVt2aEc5cV9fTnw5WlZPdEBvSjxEKn5zPj1fU2pDKDRxL0ckNz5KcGZgV2xfdGBlLEg/QnNNcElaREorPmR1Mjg+SE9Ka1A9''@;'; put 'put ''eUJ6ODVVdDIjamNxXT87LFt8ZHVySGp5dThvU146MSVzS3YzZDtJWzt2ZW5seTlxIXhHJkhvNVd4OlpkUHFaKSJgcyF1NUV8PE5kUikuS05HekN3Mj9PIWUsJSpYYDduQjBgInFnR0xaY0xrMzI2aWp2Y2htLjtTMHcmY2RXOn17IyEiZWVbInBgLEBtRVFtVVZUanVUcnRnL01mKn5IV2ByRihV''@;'; put 'put ''WXlsWUR5KDdnSE1PcyNMbW9tXkcpXiEqeSVUJiZCbj1VTUA+SUdzbV9uREwuYnFdbEBaIyR8c1h0KmNTbmx9Kj5NTSNwN3ZbLFg2PC5lPmI/YiNHd0YwdUZxbV9YKDVHRitTTTRpdyZpeTNnbGFUfn0kTFNzaD5HelRJQjlmOGFidkc0cztqIThuMV4wJmB1KTsyT3BucHxsdDF4OE11PSFONVNB''@;'; put 'put ''LFBTZFRRNmtpRzdKMCVVKGFCITw3eEhbTVo2UE9XJWlpWik4MTNEe2lGeSgqdFNoT3NmQTspRiJlNnx1JnUpNTFEX289QV5bWjp3Q3hHQTgyRHBqXSk2Z3l6PDJPfntjRCZuRUAkbkZMUm54Ll90L1k1ST1mX3F4Z29qdjZ4dnxYe1A3SGMvfXlqbzcrRysiUz5wVyFPIUpbcWx4aTVAWDZWbkoo''@;'; put 'put ''OGI3LiMhXnQpZjB8XTosfXBOSFVwcFhSXXZlWXVpPkp7bGN8P25vMyNga2cuRkdQLj5mSlk4TCsmOjVWT1I3RlYueFZYcDQydz5wTiJ5S0tmRWhFQ3VXc2BoSjNGd2RubE9TOmA4flBNPy5NY28+a2hbOHNnfWhoPVptVFN4PWUkXlA6ZjN6OVE3VWBSQ0dyZ08sPHVhU0B4ezBTK1h2O109MkI4''@;'; put 'put ''ODNhaGg8TlRXJkVCJE08RW03ZEYvZll1M2BMP3dSK0YjQmR0VV5eWWtKMWw8Z3l0Ym9TbypLMiE8LHhVZSlbP3FgPDNMfnc+VzVpfDd2OzRvcEcpKGdYfGBwQ3V0cSs5YHtEdDU1c2B+aGRxdEcrNCwoXkl8dV87SVVGbSokQWFjfjRtNWc9aixaJWtdNVshKmxiOl18MipsKHVwYEkyPFUxdGZT''@;'; put 'put ''JGlgezNZIXc2eiIrIVFATCNgNU5BKilwVyFbeWdXPHZeTl9wY0dTSlgleFg1W11CUj5aaWBFe2h5QElqVHkiPHhPVH1FfTZ+K11bJSY2cCVAbndEZiFKP2s/PkdgMDhJJmI/ND9DMUMsNWZyXXhFbUNdRGBtIUdqWlRKRHxEdktLbmsyOEg4dHhkMEg4XWUmNShhSGhMMitzUV9+VGYiJkAvRkck''@;'; put 'put ''fUVIRnpFJDNLRXB7QF9McWhLa0Z4JTN8LDNrLEJdZGUsdTFmdHM+JEJuNHVvP0J6KnNjIl10WzpeclBTXUkjeUxUWkQiRXx0WW13QjFOMTlUSi5ZS2tBREBCIVNFZVJDMHt0cis9MjBle2glcHA0ME9OR0pMc2MqPEtXMSpYV0xNc2h0e3pfPjNnbzgwLDhLayR3TnFPOllAV3FGQGpCeHFaKFM7''@;'; put 'put ''VE8jWy9kRklTayY0cE1mNThGbSk0MFNfdEhYWnVXa2YobklFLGlVV1E6aTdoLns6VS5UayVAPXE5X2hvTSJSS3QxcSp9MWF7P3R7Wj9nViYmJkJhfDR8b3dwdipveFVRRjxgfnBqI1N+WCRQKDNZPzJwME93JngmayN5bkNdU3k1VGFJNEwpPEw/UCV0S3E6RD1wfUw6djM2bzFWV25CQk1WaHsx''@;'; put 'put ''c09vfkg2MCRfOlsoIzZOMCo7Ois0NFJGNEFGbD18dGpufS8xMz04ZkMoJHl3LFhNWikwITN0dzx1fnZfZnRBXVFZMn12LmBufHcubnxVRUB1fDkuVG9pNFhgSmlxb1U+K0ZhT2BkKmM0KGYlT1NGR3xrWjcjN1tLdjNmcl1JMCZrYj9yS3xyQnpzRkcxdG8sNlhpJXRefUROb1AyQFRjbkxmP2t8''@;'; put 'put ''P0Z+KFY4JHNdRTxoamxHWHN7Mj1QU1U3UWt6RHpeaF5IYjciXWx6MH1yTzVYdlExMFl+ODUpT2hvIzhMbW9RQmJeLmtsR3JWZGdYcDlZcnZWW3o/c3NjR2tzeWxIWlNPe25QMmk9fnFybytaXW1lMFhYXmJrQU1eKEZzejIvRm5zR3Q7XV1aK2M6QjF3d0BvdEptL3JJcmQ/KEVgMnlNRXNsNyoj''@;'; put 'put ''UzdNeno8bHBrQnNNcD1IczBoMU94bGswP2BXN21gTH5NMXMuMUw3KFYvaTBEJk8vSyojKkVGXm02S0Z5e00uOWMlPHJzJEYkdFF1aTV5PU9JKHcqbUBVMC9qMj0iUUNyZTdacDA5Nn0/I0QpYiY7fDNKSHgjaiNVZnpIIUJQWXpeV3MsN15uVit5fFZfM3NJPE47bCxpMkg6NDBiV3puWSNJWj5m''@;'; put 'put ''bEZvJFc3RiY0Sng5I2RuaWpATippSEdzPVdASDE0REYvbFE9Imc4b2lXY2BnZG5KaVNAQy56MDR8RGV6K1kxVTIsQEMhJG88eWJmRkFqKzQ0anZBJDNjJVVPZSE1L1JjNDBOJlJMUmM/aDxhUXpIRllaX3c0NCI4MlkwU012R0h0KmFAKktkUVVNe1pmUz8jRkgiSlh7Z2JSSzguK0NzK31LQHQq''@;'; put 'put ''cmFaT3A8UHFyPDs2RldHSz5mdmp2alBMdCYjbFs9JDUpcDFAIypPJnJiXTgkek5fam5YanIqcD10VWpGJElgVF45eGx+X1kmeihULFNsV3QhbkE8MGJ2LE05SXpnW2s9Mz0oSEQkLlQ/bzU9VG4+ZlEkNzkkZjdlfj0ocFt4TGkud3R6PXZ0bzVgckVkM1NHcl07akloalkhdV9pPUpsYSZrZ3JV''@;'; put 'put ''YHk6cF0yfllkWXIjbGd0OlU/RHpHXThUbURhNz4xSUVYJTckcnkvPCQwX2IhfW9Yb2N7IW5nJi5vSFo+e049VyxzfU1HciwzQCpNaHVoYEtRTil4d1MsITE5eS4/cjdQbExIcjdFYEM7SEpRa0hrPUF0KEljXz1VaGVhTil7aEMjeHs4UEBpcD89XmFycDIzSkJvT31lQmNfcGFuczpbMUIuUmVU''@;'; put 'put ''O2lvKGB2N0NaQWMoPiRYfk8+Ti5IbCM8eXkhZzNMV3JDJm8iQTBvaTVOeD5+JV0qP3N1YXR2OTpyaStGJTxRaGIuM15ieTJIX29NIitoNzFGYGtsISVkal9JbEcmXkJzVloxa2J6QEg4V351fGorcGN9eDxSOkYoIVd7bmY4YjxCPHZoYkxJe0pjTUQ6b0tDYip5Mz8sRXV7S3k9JXYhe2Y7Lls3''@;'; put 'put ''ZWxyJHw+LiN7aF4xQV1dVCt3cip4PlQmVixDdnpaRTopW11SW340QmwvLHszY0FGRTZffjJGVF9EYnk5IVlYa3N4UyE9dXx5fk9MUC9SNTBZfUJ9dUBxKW1qSSEiP2pNWD8/WFt+a0Z+YGokdjo9ejtbIzNXITB+WytUNyhyTlt9dDgufjJfNix8TnYyYEY3NF9vOFlefU1ed3c1ajs/TyM7JkNQ''@;'; put 'put ''cT88UGA2KlBXRUlQL2Y1PGVSLGdKZjhNbzQ1eFBkWlowM0kqVChNX01ST3QjOHtubTJHWm0kZUpOZEpbMCo8MnBYRUV3dXljPD11JjBaJCU9LkhrQjUhYlldQi9NUUdQQm15Q0ZhfVE6LEovRUhyInl6OkJ9KylqJDFbeGhMOiJubzZ4LypgQC46OStEKyRXTHxvLGh5Z0hEaDROW2l7SiV3cmVY''@;'; put 'put ''OVAvWj5zIjZTeUswMVRxcjc0OWkiTlB5O1c7Izg6N112b1g/fDYwM1hMSlt7YTNOfixCa3NXKzUsc21UY310SGQoaVRXYiouRzp3QlFSXiNsXmliLHI0NmxvYzUzPUg+RDt5QjUqP1coNiYvS2FGfDslUUtAeE5VfF5XXUhdNFgvY2xAKnZ+SXleQnNVR0pDVnh7O0FPR15ne2h5P20jdXRbKllu''@;'; put 'put ''b3kwJGcjZG0vTCt+MzZpSUZTRSFCan4uUTRDR31XUnV7YS8rNEpASjdzPjhVT3tOOEVNOjEvZT0qQHY7b31YKigsI21eQmBiYlV7SkUxTiMlJDo6WElgZ3QuMzMkVXcyTmpHMGxYVklVJjZaJk1XJmRBRURPUEs9ZSxEdmRuM1hYNXcvJUE7M2RPLzxjKFBlZilUdiFGOi9nMzk0RmRlPVooKita''@;'; put 'put ''dkdDQSg1ekI8T3BmQ2s7K19dRS91a1hXLjBRdW5OdFJNSzZNMW1oITtYbUhTOjhjKkIrL2s0NzZsUVpfUTpJeCNYXVR0PWMobk07YGt8dDs/aTdgKDxJUmwyZ0FWdDtVXnglfD9qRHwxMUJpPzFnYE9+VTp4bW4pUm5gKnh2blpWeXppKWBgWj0vKEJiYGtVJmk9KzYlISNrVChGR1todCpScHlN''@;'; put 'put ''VER4fUo3e0RaRmJYQFBiUnsiQkpNKEVKfGZwMzdSSU13YW5AKD5bYFpGMFhLPXhUND5EK3kxYkVRQUZlZzBSOEo9Jjw5RGV+eUgvQWpqZ2xSSnowXVJXXS4pUnp2UjJdbnYjMSZCQm06Jkt9a31tN3E9TTZKaC5oIzY9WEJFdn0mdlUqZDl3Q0tHY2l+aSlaJV8pVX0zXz9CRENkUGgzOz03QWh+''@;'; put 'put ''OzJhNT5sbDBDSlB3Ol14P2lkZkVVQHJJVlNsRT9EeTZPZVVEUHMqRn1MPG5xemc3UW9mKzBEREZKdyZpdV1faSRkQllEJVkpMFNNYCkxcmxmKjtnSmp6OkJwOEZEeiIyRzB+eTQwe14yRGgyU3d3NFJNKmlaQlhyN28mO2hlU1dSUEUvb2RRL2NQLiRNa0U8RlBoPiVfXV5xLjh5R193PEdoRiJ5''@;'; put 'put ''KH1VZHlVfH11Jk0vcWR1JndzTVlxXlU0MyVaKkJacWN2YUNMeWNdd2BlO1EqYik0KkNRQFVnQkJ1TW5yPlRCJHdrajpMUnJ+LFVvalJCTl9HPSExYSxUUjpuUGw7d0pDS1dKZk09aG90eyhHRDVaWjFNSDl8fWtSbUNRWiVVUXRdTCkiYispcmxXP3o5WHg8SUJ6PjFTfFI3QFU7KmVXTW07JSM1''@;'; put 'put ''MzlRYCVEO297SUxnUC99dF1qL1dfOls0UixeSFMmaE9CezZdMFJAUmQ1fm9QdkpeNiVXR1M2YzZEMmlZTzMxRXpjPFciVzVyVGldSmVKPnxmSj5Mfl5VVXNNeT5HR3YkKTZmKFVTe1dxeTt2TVhIXlEsUD5vSnlEeGNHbVcsQEN9ck40KXl+OmIxIzsrIVFMPDRxblNFREhRLCl5dGouQkdBXShX''@;'; put 'put ''JWhrTHddLjI1bXVHPFU2OihtKTMzcTRrLypVSHZ9eShIOEM1QyN7Y1UvKz51VXY9Tz1dPmdHdGNpPlVJZm1MNSYuSFp7fTxnc0x+a2wsT3R6dUQsfDNOXWAvJXV6SmoldXZmIiUvPHZUXUNeIWZKSlR8USVObExJcz90ejNSVG86L3ZuOkYzPFllYjVvOyldK0NycThePypYRyl3JHJ4XyNvPiRV''@;'; put 'put ''UGJOM1c8WTMmcDd8W1pnJSE7dCFEdCJlT2J0U21qcWlJV3U4QENWKGBESzc5P3hjJCNqekFzblc1Q1h0LihSe19qSlkoV3pmQHpvU3ZDdClPQ2NVYDltPkVYXipEbW0vRzdNLzdIV3hga3MmVFFMT3tvSE5VX1pESjsyRTFCPU5ZWjklQHFqO0hlW3QqQFk0bjRhd3hyWTdKUzpLcm1OJCIwT21W''@;'; put 'put ''WF1DZj5TZ2RMckdTeUBvfnhHM0o/flAkcitTVHJPNEt8clVxbX5XNzZRYD4meW1rcWJ6PGFlNENPdHpoWm5oTGJSXUpMOX5EN0BNP3ovODk3RyRMMT4mS3tlVnxaTSowWkpAdnpgP0xZX18uX0x0bHxrSztje1o7bC5AQWF1MH1QQHoia2V4TCV4elFgWGp2WkR6c3d+Yl5kMio7clJEV0BzTFpZ''@;'; put 'put ''dXddeVBCRiFvX0k4PSpmN1t6PlFKLEMvOFdbfWRPKVQhInNwcShlSmRCUT85ZWUkWTBQTXFobldmT2dgUFRbZDcmUCozbExhOTAkKlEvSVokb3d+Mmx0PHozIXwsOlNibmgkczAmfU0yWV9lcEwuei8rcS87JF1MTkl5ZzY5V349VXYrXWtHJUFLey48aVciOjh6fVNSajNITXxyYHsjeGE0RnVa''@;'; put 'put ''eUw3MWp1aXUkSj50JCpoTyVhbXoxdUZebEYyYiskKUhxdF17TmBkOkV4Vz9nWG93RFh7TzAxaXJ2K1VYeCE7MGdhb0ksJFBMJjdISEIrfjtaYnk6W11GdWhhcWQ8RnolKXheYVpGamVvXz5WOFssQCY1ez9eRUVea2B5PUlkPkUsfnRMNm11MU4jNUpRdVVXcE5ILCtRKyg1dSNCNTVuTjdTSylF''@;'; put 'put ''ZmV9ZFR2PSRIQX5CZ0RHdz5gZjhVQG9jMFdoJHJ7eiwjNk59eWFfJWVLX0NlWEl5MF5KI00pTVdoWGslKjhGQXIyentoUmU4VkEuVWhTYU5CKDxmRkpfQV9oSH5RPXloQj1jVENYdzBfXiU/fjJqRHFxbHxHVXZpNHMhTnxBRCpNMEMwSzAqWjF3W3xTd34kbH1TcHVEY0hZPTY5R08lUVErfkJJ''@;'; put 'put ''SHZjZVlpNE9LMnUwXn5edklsJDw1cjp7L0VNTi47WSxCRCNgaz5oWS9YMlZ4QWwwWG9lXis3SXUyaXhNa0JDWShSM3lXeEoqM0RUUmh2SHtFOWtkPjJ6QTZdeWgxTz8kci5yTCoxKyJMUkAiYGt8MXxaOyRleXdnSUNWa3xuQn1vV3dtX3tVeEF8SiVRND5GSHxGWS9gc1glNTd7V010fiRCLy9B''@;'; put 'put ''Wm1DfU5jRjNTdiQ8JlZ8MEUhMSZvN0krXnoqNy56Ol8wbnleezomV0pdTS51SCNCdSllRiZfLGJNTjxYfUsvWDlLclFuP3plOXNTTnJ9XkNMX1leYkVgY15MVT1ISXVWcFJrIS5kYUJmOmI+WFBvUCtKIiZgLGRrSkBvPVtYU3Zzb28zNDZlPU5iJHBtbVgsclZxLC5BWlFoQ0ZeVXIldmUrUTZC''@;'; put 'put ''ciVyIVtWMWwhLG1+YDNiR25HezNiZDMzYntNSUNWVixHalBELCVXNUlEOlEvQVg4YWdmUWZ1T0spclM8NV56ISt0IzwpXlpIPkVAbjMmMlR6SSl8els6QnV3Qyo/Vltqc3hlKyFnfCpUWjFmVSw6QzErMD0zeVFxYVNzQHZYTyVRbzlAZG5jbWM4MmM0QSkiTCI9djJzbDtiIyxlMWA/SypQWWtP''@;'; put 'put ''QGpUUWJiaEEhNEpdQWNJREU+RE5kS1FpXWAhemFNdVojWm1kODx9by5TVS9CRH1FXzcoMHA2eDtTKzxhZTRFYEBKdDNeXzMwSXBHdDhvKUhrSW1ZLyJzdzxaIU1uP3x9UnhaPEEkMUI7QWcpLFshYWwzaSQ0YjY5Z20qOmB6eEhlUkBjIzlwUTshdjZLK3JSOyFLNWNCamp3XmFTfEZhUSRLUj0j''@;'; put 'put ''QVltJCE3dDhPOWdERzgsVUhubyM2ejFSLy4oQGhaJmduZT1DfHxbP1VgZDtXYHlYbDpnV1pQJj1Bdzh4c0lAOFQmJSZ3a2QjLG1kSHRsaiohfmEjLFBDP15pS1gqSTYqdTVrWDQsZiNYWFp6RHxqQC94XVZiSUQ3PX4jcypxKVhhczc3bWVyL2UwMkU9UldjJHAsYCxXMXxwWTgqUjFtR2Q8Qi94''@;'; put 'put ''XyZ3dWlQO0tBMi50NF1WP1h5bXlGU0BdSUxeJVdqfWl6Zyh4ZjRXakojKiJ2RCMwYnBWaDN7USt6UVQ8YGNKN3JANkNMRVQ8OGBKTz9IT3YwM0E4dDN2RzVCLnc4bSM0WCwlUVUzQTg/JjxvZFJ+ZGlLVFJUQWYiYDROeFs5cVo3KUxxIVQ4diQ2ZUZ0JCwuPSlBJHRzazJvLDRPSklnRmcua3kr''@;'; put 'put ''dUYrfVU0cGRVa3dPS211QzhIU0dtLj1AK19HZUVqTmkmTEpuaH5Vbj9hRn5wdWQkVVBrdUFFQWxAakxoekxQI0R+Pnw5Lmo9dUttZ0tjXUREMTJma3crRkVfWz4wOm1yXjpzLGUrX0U1RHZXemoyd0J1bVt0bW9HWXBuPFAqU3NSIyo6KFFaOm0yXmFHPH1GPGNYL0lAUnQxbiEhd3BkKmt4WTB7''@;'; put 'put ''WnRYK3IibXdJKHElOHBNTFBqfFI1ZjhEc1UwRjg8MzNKUzc0WzojYGIhRjsyWysuLDFqSHghZitqQmVXZ2k8XWNtfm9KInE1PyZPdWBHdmpELnhtc0tyX2B7NWp7KntoeSo1fTYqQ2dLMUI8KiltRTJuUVNEV1k9P1khal87MUd9OTskQ0twTytYbXJmKllSVDxoOEtvLzUoV3ZAfSFnfFc+byxj''@;'; put 'put ''KWwkRFk/TnRhaFI2fEcoUHp8eWtLZnRzOH5wVn43JTNQZjREfGhBYW9WXzpNeigwVTdWYHw0XkBuWFg1TmtDNX1FYiFXflVSU2JCZWB5W3ohY1FVYGxbIkByRj0pYHt+L1pHIXEwMnN5M2JpfE1NYmJKdyVvNiMhcV9OPiheK047Mz1LOXJAbTQvXmV9UDMxNC9LIm1GXmU0I2IsbigrX1trVn1d''@;'; put 'put ''Nzt1YDNCVGs9cik9Tik8VWg6L2o3T09ES0pTR2VFSTRsW05ENktPX1d5MXBdSDVHT18vUE5lMGxWXm1WSz9hXjFdQCQ/M0NWdTgoTHVhJlNKMjlnKi58YXdOUX5fZ0ZZTnApO3l1dX1UV2RhTEIwOlVJeFRvcEhQRyZie0ZxfXdvRFBhYnE4T0txJDgyZXYwIipnfUh8JUBhNWdaZlsrKSxDQj1T''@;'; put 'put ''ey5TSDpBaGRGQFZoMTlhTns0MmU0clYoMmVrODpEKmlnd3pjJGtfck57WTNwLDVPJCN7W014KF5aK3BZOTJAaz1hRm9mMWg8LHNvQHpYZXs8NTZHYyxIX1l4UTFXS313bmA9QnwlTFl7KjVaYypHZDx3QFA6Z3F8eG9iYHBqNH1DS09mMDtlNW8iVkplaTBzOURaNl5mOXxkMGs0PX5ndTN0N0VA''@;'; put 'put ''Ry51VTk7PjpiaUUhRUAqSkJCK2RAMUFpXWY+aTUhJHliOUtNQj98ZChHYzV2Ol1tS0AqMElPe2Q6ZEoucWk4diEyQDc9QkB1KHcxP3JlJXc3ZDM3QmRJbSZEKndbQnEqcilCa0Vke1opWzpVSCslQV5NQk9Bc25LP210SHtCeFNdSkJIIz09VDsocnNeJUdyO3xaay9BbGk1InpgJilpR0pdb3A/''@;'; put 'put ''M3FOdj5EJmpdZX17OCl6WUJ4bm4ub1o7bU5MRW8pPzd0XkRROStATTY0VUVuLGE1ckJvYVRufGE4REsoJHg8ZEwpeTw9aC54NUg6Mi5zRl1FKGk2Inc6ZDh3dip1ejg0Lj80cl1xPipSd0tlYD5gcVVKflhbbkNUc2ZDI14vWFJhQmgwYmFuWHpqWHJuQyZKayUuZV8oajt4d1Uiazt7QSg6S1Ql''@;'; put 'put ''OF59aWN0ZyU+UnI8IUwoa3RydD5SR2khJVB8LiRLaWtnI0h5TTNoYSRDPyRDS0IycS9rRiVuPFBQWE1MQC5vQ2V+dF1zRl48SWQvJjFsUnl5RXpyKTVdazMxVCl3WD8wOm0yJmM8eD8kKDFSX3MoOHpuJSY5UFNxSTxoZ0ZSbX1mcF9wX1QjPCs0byNRRURCMD14V2BDVkkqPzR3O1E/RXRQakFG''@;'; put 'put ''bmFpNUYqLEBnMVN2PXRiRlQhNlM9fV9mTFckZHFLaVBoRSx2WVQlKkdxQHlFcCw1SiF7OkxtQC4veHZ+OXRxdExnOTVwOGBjckh0P3h8d1NrJmNKaEtHLz9WMCt3QX10QmZUQCFRdz4yLlErbz0uQClJSmpGJjB1aiJOcFlUJS5MPCQzPjN1VUx6YlkmeU4xWGRweDVyVD5pfkYzTGtQSF97cTZF''@;'; put 'put ''aiM/dCh1dj07SmlxPERuIVFOMjVGPEkiM11mMjpePEs/OFooIUd5KV9sUTFWU2AxIytST2tUZng/cHhbUTEoKzIzSDxHTWxEZlF6cj1WLy50LlRWW3k6emgrZy9ocWdzMDN+MiVfdDluL3JBVTR9Q2JSYnRmfjE2UC88KXAjbCo8VkZidE1WUTFkMWsmbktVK2VlKWVlWyEuLjdoP0I5W3xCZiRG''@;'; put 'put ''bHtUQF9oSV5jK2klUFUjS2luYTZeQD1iK3EjOkwlUCs+KT9ke0QkfVRBKShEQ2EqZXU5R3FQST8sQnpDNzxbQW1tXj9eU290clZdOCZGP1dteVRYOXhwZiI+P3sqYmckZkAuOFlYKyNwKTN6RmplOWBQXSF8fltJXyhMN0MlO3w3Q0tGOnRoaWxnZlsweEhLZCopaXdhTzJNQXhjbCJ0NE5xXkZd''@;'; put 'put ''VT5nOl0qWXd1KWkvImghIyEyZU9yJmF+N0hLOjleaXRYbHJSYz5+Kl5EKE5Edjk+dT0lMUpqZ2UoWiFhXWVDJX1mKHsoX15TLlByWT9uIyRxOWMhcGZneU5PfGB7JmVWd2VEdWQ+NnNnfU95eUVwIzs9Wks5b1JEMHR3OjAscUpoeXk/O3FQWGw6UyhnPiRnV3ZnbVVySVQ9VEZQQ1ZeZz4hS3p7''@;'; put 'put ''UnguMFd2QDt7KFJHS0ExMWFRMyIyQHAyWipAOXQvZj9kfGNlMlEwRng/OGIqa3xzMDxLLEliOU5PPnJxXWU3bGc2PF1KMi9hRClHc3NEVTJXKF8xV1YhW1k+Zy5DVTBnJV0vOHRnfHRgciVqOF4vVCF4ZX1SKmsvKShUW0lKYGtrPy9McF9XOEIwWz5iUHBuanNucSNraVcwW1FsP1MqenY2VSYh''@;'; put 'put ''dj8ra2UzNzUsQ2VtVn5sIz5bZXAiUTNHd20/aUJLJVFGV08vKF13cG98PF1pYjhbfFlELHZwYSElR3llcTczUmdpQl55SFBUNGhXSj1NOHNZU2ZZZG1QYzhyI1VITz5pVnFSL0NzbDsxcEdhOU8uLkUybWQ+K3coM3RuZGt3S2lXfHdzNXZxXlYifGA2YW5NYilzSVN5YV4vIlZ6eUhKZSxmKStW''@;'; put 'put ''MVcrOCF6Tm1XfWE0b2puSDRrI29IeCEkenkvIWJWMFNfTmcobXxrWy5QS1Q4Zk1pPlo4UE1vSEV8W1htamo9PS5tYUpwLl5Qb25jZTM1TDs2LiQsUWF+RWdHNiRSO3lQeTMxZkQ5OCF3QyZCbWtVO2E4dU14WnBaakZEZzF8LyR6UT9fTGUzPW4ldVNfdlJ1TWViNTlpJCR6OEw9WDZVWVg+XmU8''@;'; put 'put ''NUxtYCRPX3FeXWZEM19acHd1U3pzImg/JUgzTWxpVnFSXiRGU3c9MCpbOjghdzw8SSVxWm5kODxGWnJVOSFDVCY9Q3kzdnFaeUhQVE9NPkBJMmZEeHIqR3ljVV1tXnk9ZExHUGVtd1FDUXtrZkAmY0M5UC9uTm5NQ09RPUklUGFuZDkvMVJqdjBdW05eRDU8cyI9TFNGJHJue3trYXsjc21Yci99''@;'; put 'put ''S2V5MzFmRDFKXl0+K1UiSGxhQjMhQjloMTJ2ZilSTXkyX3N0Wj42YiMsR0JdbHV1dHlOWW9PVkVIUGNDNm5iV3h1TTVKNFpuTTkhQ1QvTVBUfk0lUTB+LHFPJGNIZU4vfDNaIzk/QUskcyNRNWF2TVZYTGdFM2lUJE9vXVc1TlVlVGpTelRHQkgmX2xbciQ/JX1qW1VyJmYkYn0wbX1CKnxRaStV''@;'; put 'put ''QTZIZUxSMElgRFtKOlg2TkNhPHZLKjk+YFldcUc9ZzheLz1zQkhwMCUpXXx9elVjUUYheTV8Y3siO2FGPyRzS118bEVpW2M6e2hETixBb0heNkxgblhsdmckYVZNZDJbJVU1ez04YkpFYWUzaCNdNH5yM1RXdDEhXkM3SiV4Ok5MZEEoQ182TWhQR1FXdGpVc183UzxkM0oiem1sYlQ2Y2t2cW5G''@;'; put 'put ''Un47MjNicikodUpTUn1qYDxzUHU4O3U0b0BFJjRHYG5wRmtOTTUrMV1dIVFNMF1wQjtFVStzQmk8I2ZJR09jVSpXcnJucWo2VWJgKTg9VDMqMXZAJkhMMDdFa3l8WjtGaztJQGZHOWtXRGtrZUhtNiNINWl8alcmcHhIWTtQS1M+U2E0YndINEpCMHVuXWheOGdXTUVgcSRMVGF3SEEqMTpUSlY4''@;'; put 'put ''eiMsM1ZFPyFiN05xOkkqTE5ZKE5mX3AoUGFPPj1oQk48V0tsU3JJNmB2OmhJOX0hT2ZqL3hdZy5IJDs5JSFBKTZ6XnM9fjkjekhbXldZPW1aayZFdl9USjZGaHxiMEBUYFU9Nkp7XWw0S0FmdlRIeHBeOCZMd3RSfG10JVd7Jk1SZT5hKEppZU1lX2YhUX4rQStfPVIodD14SnUqP3cpdikhI0kq''@;'; put 'put ''RjgyenJCMHhsayFDSWs7XjBTSkk3a016M01lIXxJR1c4Oj1sQGplN2pAQmlbOkh0ZHBdZjRuXUcmMSxYOW5mODc8alhtViErVTYwV244ZGJZdWpLOXEuMjg7XkY4cXNLXzdSY1pjWjR4fDF5RSlyeTJ1fjhxdFZ2KFsmPThkIyk4IWt3czs9IlY5U15gcEU4ZFtPcz1pMU0xb2tVTU0xXV56c3xI''@;'; put 'put ''WnA4aHxIPy8saXEyQWhAMEBQPyNdcDhrTTEiQzU1O1tIe1g8Qj5eUFd3UmQzUmpSIzNsfHo+WVFdU2ExRUJYblBvUzkvQEtCbTE2OF8hMkxLTXFFejM+PkhdVXkxeCNrSSV+KkJwZzY3VixVdG0pSXN6UnM/L3NIIn11eUlqTzQ1SzRJRiZBXkg7IT1raipaVVMjWmQyJTgwOnp9cTJKdmRUanhn''@;'; put 'put ''RlJaTz9xRzxffFslWUY6aWJTT3VoUD5OWjxwPX1fNihpPSImVUgrNX1EQ1QhU29EcnZyajhmNkJQfHw/aylJMGhJWCoxfVB0XVtDXzVaOiM8ZmE4JnRxIUklV3R7bGNGPUFHOCxsTVNKSzE/ZVE8dnBYPmNYOG8kLk1Nd2U8P3MrYTc7YEJSbk1MbiJlPWw3SFtZKShCSD86PWgvYGRmdk4wYWgh''@;'; put 'put ''WDhfcTdXe3whbmZjUCZMNVo6WWZeR3dIe2pDVEk7SHR9cE0kMWs2JXsuWihAbXh5RV5wVk1McnxZPndbL1tddF9eTS4seUp1IU5nYlBrcktULlVlQlpqKlt3UUt9fDIpNVlOZ0c4Kjt7Li46WHApUFo2dl1qcmh4Y3VxJDFCbEtNTzB9YFczdVU4a2lrKSxAO0xedGRpV2MiYik4Nn1rQEMuTzJh''@;'; put 'put ''UyFnMnhefCkxOm9FSzNrSG99JDFpe1k9aXVjdkhSJmw9N3wrbTFnIV9xTmEsPkgzUjlxfHg5RV0xYXBHTmVLJWlqMGtKUjlzNlksJnFGQTRdJU46N1dYRlp8PiwoaGs9VUBseiNqWGFUVD5KX3pKWXFaXWcuYXUjKVJrbWRgPzR7dC59eEJQO1FbazshOykjMiE9Wl1geDNWeDUqRzxaNikzTnpR''@;'; put 'put ''JUk/VG0vbzxALntxXi8mailaJS9lQnl4Ny9GNUBpYHVTOXJ6RXJyJmIub0Q5RjFePn5qcHsrQGdhKihgRE1VXTw9K1dxM0N6N0t9XzdyQiNpYWJvVX1NeiJwInRWcUtkaVY5R30+ekkkMS9QSmRzcEVdN3RdNEldKlMrfD1mMVUvWXpAVVlBcip+ISErL0ldfjQpW203TTckY3lDbishYVYzPW5h''@;'; put 'put ''LmpZUFtSK3JTb1ZITXgkLng4QjNbXW5DOCt3e3BbJUZyIzRvJm9iN0lOTGpAVko0JFljQ3s+ZnNqZ3R3Z184UU9Tb3Q5TUc1aFNPMUgkbSQ/UjFmPDA+fj1AeiUwd2BAal52VDphaW9jX1YiVldNMz9Yc00qYSlgZDFYKW5aITxEZTdAbWpJViMmM2pZRHNZWi5fdHl9aEFsSWQ+ans0WnI8PD58''@;'; put 'put ''c2F2YU42WWZYe3FlLno1NmBVIW9hWGpoaWNFUUd0M11HOGpYTFdBZFgkLzhZODg2LmR6XTErZmFYWiNsaEs9bCVKcTZybDgzKmdtQkZFRGRZU0NXO0B0JlFzP1sjZX5AV0d+aXA2MHM1dGBWdWFaMjpZfDhYYz5vSk9OZSlFQyxITWZxUS9gTG00JVEyKiZ7JEk9aTNmaCFpeVR7Xl58MEJDMjRC''@;'; put 'put ''Mlc6c2RVYStyJiFfTCM2fjZbL0FkK1tyJkZkS051c19ORU09TWF3ezYoQmM5cExRJUZmeTB2dzFnVFcjNlVbeTFkekFMUVghd25ibE9zTEVgZ2NHUVFmTntgYEJke2R+NyE6NC8jL3hVVlBKXV44b31GbHdePltaS0c9MzA6ekM9czF4XmMsaWAhWz91NDAreVNSTlFEY09fayxsXX1iW2FfWyhP''@;'; put 'put ''R3B4ciQhUFUpI0BWaFU1TURJPUszPXRPPjMhUGIpe2lbZ0NWZGFmKnNgSWNoZVdMQEgkfGBgUG0+VE52bT9nejQjWnVZPFF+Y3dLPkQ0eWdzYmlHenJjPzZMcCs2aHZMPj9JZkV6OTtTLl88WkMmQCYiKy5nJStqNHNOeXF6fVRnYlk2bixDOD5IWHUrQDw2VUZmOk1pYVlBN0M4OzdIK3o1JlMy''@;'; put 'put ''d0RwYU8sRyZqT2hCRyEwMUY2SyZfI2JxRVFlJnVsSitIaE1LYjJ2MSlTVUxIMFQwRnx4OGNQZSRlLGY3Jj44MWdaay5GQH1tVV1bRk07QCRgK2E4PkkkJmJMYihGW0ZkYCg0fmJDQHRnPV9pVUpERHpFNz13JS9rOWAsdE18KnFKLGBMNF40WUZyX1ZXTjJlOHlkQHoybC82WURRNHx9eFtGcVRR''@;'; put 'put ''dmByNVpvQiUsXlp7U295fTpleEE2bX1tPj15NH5LOzspT0ZnSlQ5YWo9cTQiejciSWUmME1wb3EiTEJNQyFSNnF3UU9NaWlLbixnV2xmbF1Ab0VMUCwzQ0QqbmNwdypKYUh6R1g4e0lpTyNpQkJmJnZ7JXdGRSZXJCZXL3JaeDFDezskMnNdLi8qNG4jJigue2F8JFV5c1ZmczgqUDtrT0tNZzRh''@;'; put 'put ''Q3pXOHUxVDYqe2lsR04we2dQcXQzNGBYXmpbfT9UN1V7NnIhKnFxOVlhUDh4WGAlZmdUP3BDKFUmJTQodnh8JEkjW2AwTE93Pz0lejl5UC9QODVxbEhaPG9zLGxWPGVZZEV8OmNrd0teW3dheGxNbjwjeGR6RE8qPVdWTF9KZGRecjRAX2p5ST0rSCkqcVFIP1prb2xKazs2aHkhPSRXY1omfDFK''@;'; put 'put ''L2o6cFgvSUtWSWI5THh9Q3VWJlQwKCg0azVVallmTiw3LFZmIk5La2NyQ3NgNGZRLnpjTixpR15WUSJKZ1QuVXt8TCVRXzMoclEpZTZwQmdjTyJbMS9pa1tJfkxLSkpOMWxhSEtKT0l2Kj1ZUS9ibjo/VTdUOUQvOXt0cGNVYFdJLiZGWmRkei8zTWlNX0ZqcGE1MUhJKCFhWz9mNGN7YmdleHV2''@;'; put 'put ''dWsjIWF4WDYqbWZDQnw1cUxEMSpEK3EuK1ZdMUBVL3YmQVZxL2tGb3lwWyZlN1YiYzBIXzo8RCNZZl9oK2B2JTs3TEJfPGEuWEN9KS9bJFs3Qm5ndyRLJW4zZW0/ImBdTzNua1IkKiVlNThgZl9eSFBqLmtnYS9+ZVU5RC8wTUZuRlZeXTpRPnxxPDFpTkBGYkJZSGZwVk5QSVkqJHF6ImVocFEx''@;'; put 'put ''fXdjTlRvUTFGeG1mZHsyeyVgVGB3IVVoNSJ3QTAue3dYRTRAWUtySWU9OTw8ezRvUS96PENiO1AzNCQ6LCFGb1pnRzR9VEptb2woN2BxO3EqLFYpYX1bOyt2dGI0UjNsTEAvO3ZrdGJEJCVTYkplcnYhKXhRcGc3Rm8wZmxyKWxzZFhTSzc5Jl99Zm9xTWMjNE19UkgxR3J2clVzPCk9KUpTW1FD''@;'; put 'put ''N0NmfiREa2xWK3svKns/OFE/b2ZsKGsoNyhZX2JkZzxHbE5CT24qbiNScHJxKiw+L3szUCFRWHxTQEtnJk1XUVgzU3tJI1ZSJShZJHxnX3MsaG9iPDhWYTxFNCM3K0ZQIUdgbXh+Nl1wNlZUe1EhVSRdUEM4d0k5OWBUNmlBOzc5a0U+My5rYiwiJnBXOSwqTlFWNFElS3JRUkssMTxwLDEmI3F0''@;'; put 'put ''IXElJX0maSlJdGt3d0kzdnU4X15ISFJIRHpMVkdSR1dCWj5NW2psYWFGej0iK3NTcyw0KDRAb1pQL3w4Nk4uWk5GR05NQz1ER1J8XipLI1BQSFl3RSlAS1JmZFJITk1DU0RuVF1Mfi5ZWXdLL1hUdF8haEclXUoqfl03fEdCZyUpLlhmVUxiMVtxfndQemQwPnsrU0ZiRHozLERRVVBeQyw/dkhf''@;'; put 'put ''IV8ufW92Wm5pWmdbM095V3M+KWs6dnIyVWIpUzZXW2g0aTBrYktNTko+fUp0LzBOaV1nb2NoR31Wdl8oTmJAYmQ7S2VecC9WNjQhJnR5dzpqRE9+cU02M0AoT3VrUitdMDw6SFRVY2g8OVpVIz4vTiMsUEhYPlBjPDsoMjYwYnlqWEdGVDtfZ2VbW0Ffa29+VSIscyZyUW1mfHBjWXwqZ2BQOmRp''@;'; put 'put ''Zj95czJlW2VLWTppamVLMTFsQywwP2EvJSwmSlN9ODtkfV92fHBbVlIuLF4jUnleYUBZQywpc182ZURJLyMqXTs6Pm5VekBXLGN6QzJlIzN5MEZ7WWhmeCxpY0BnLnxeVTwqSUFsTV48aUMrKlkiV0k2aHh9YiMzZ3gsUiFZZHtMdDZvJTJsViVRPGkiMlE1W11aLH5yZCF4JWNrc1p5U3t+KU0y''@;'; put 'put ''LipQamAjZWRuZW1zNEd4NkxjWWxjZFJOLGpYWTM6d2l1YHVuSC5VbSk/ZEkkQFZZbUYheD4yLiRDZlU0THEvKUZteTszMXAuc347Nz5zdyY7akc/bCQmTD84KyZOLiRmfX4+d3FfTntnZW4pdSRDIXAoQyx7PWg8YFszaFsyTVguY3VqOCJxelcqdVRbZTklJjtfZyNSYSZue2JEL1Yrd1ZIKCtW''@;'; put 'put ''ODFVKCt6LDZ1XnFGSSRRYCJeLHsvJUZEQC9bKSx7KGYwdSMrdlp9YE8kQDF9SEdCUyhUMj1OLDBKZGFSX0dDMTw4OzZTNUFkMEZROiRCVHl4fGBOUUt7UkhfK3B4fWBOaW9ZRVdWeXI4KVlDLH4+aXlaInRkTz5IYVpOYHVzUlpZVkc4PXJFRCppeyMxUDNja2ZQbU1uNFZ0dHtXMCRJTkI3Q0lT''@;'; put 'put ''Ln1dNnprN1E2cDs9Zml+RkA7ZXZ2MSVHZDduTFFRajNXV35heTp7dUR1cC46RzYzSEJeLjs9UCNXZ3RPfnxSLFU5PVRsS0pLa3FCPnxnKUJxIXBudnZHUjo2aUwsTipGe25TNj9EfX58QX1MMj01WTBdZ2BeayZ9JHR5UUQqXjIkTDQ6WjxtOi45Tz1qa05fLDxNNHA2VFhQJXVkcl9AbjowbSxX''@;'; put 'put ''YC8wdEQ6WXtYPXojXnxHaGgkK2I1YnheNV5IVSozVCZwY0d6anNOaCQ0YGhzJUA4JTEyOmNGSz1WNXZdInx2ajw5cFk4VkpZYVlwNHgxLmtlSDc6U3dbL2lHXkdDKnBZcFEvWVpBM3xxY2o9OlJNdntLcnp+bUhbYj9ackcjKjQkLjEpeDhSUnQ5JHNYSChUMUVqUjxkdyhZb3hAV2dYTXtXazBA''@;'; put 'put ''KUlxRSRid1tqWFlaIy5YdHZian5UPmc9N0ImdEtENns4M0pXV3A8a1J8VSwlXzNEPDF2fVgxaz05SWhBdFZZfGtgblJ+RUBabj4hRDlwI3BeR0hRfn11Vnk8V0Q7Jl00RTpnbl4/LzBGOmpwQikqKl5EXkc4di9+KENwKS5ZY3V9aHB1ZixRSUR4UW1MT31db0FIa3FxOUg6bmolalNhN3FXVm1l''@;'; put 'put ''UzchdGY+PGliVHNSNSUxYWRqPj50e3cqIW45dV9wdjVSXyJtM09xWEZkKWZuOUhFZH5AbD1hNF4kTDpnNzVYN3BmciFadmB2U0llZzYrZWQ6T1FSaml8Szg2KHZQWXddIWslbytwdD01TlZgJSlwbl0hOis/YGV1PW19SiI0KndgaEo1RCMyWC56QmR2YjZIREhrL2d7cWF5RF51SnBtaD8ycGZC''@;'; put 'put ''RSphKFB3cDl8aWxXXmlYbnRJdUt2TGFbVihqYyhzWXNAVyJSX1VbO2F7UE52RT1bMCwxeSEue1RkVV1ba0xtIkByVEg2clQ4TFowT3N8bXJSTEcrSEg2cWVyWWN0VnJBa19qTGplRndfIVlmXythai53cTNdISZicihqS3Akfj1ZXWt2TzM8PTZ6I1Uxb0hAZWZeInowNFRlel1AW3FzbjhjbyRw''@;'; put 'put ''eCksN25iJlBwPzolIiFlSzdsTzx3U0ZkKzVNWVlXcTxNQVI2SU5HXz9dei98QmJXM3YsVy9pJjhVMWExbCQhRUQ1NldUczIpbFJffGFkOmxuKj9ffTJIZVRJKXh1VjhMd2ZmPXVzUjxjPj0rbVglNE5HW0xDbUtlIiNUejlmPG9edjt4S2MmI1k/UFJ6dTAjQ0gpImEpLFg7T359QT5QbiQ0IyxM''@;'; put 'put ''VzNnc1duPlFKOWRHX0cxM2xSPkBYI3c5Lz5pWmtZbD5yPGc3KTJraypdT2VET1JfcUdNKmY6OWV5I3J1WGFeVHpJYXtnSGtTcnEjTiRyZ2pdfERSJEdbUFJIKTgwPjtQeSVSSik1ezNQJWtBVjk0ImlwZihdbDMuJHdKIWFidGB2bnRMQiQsRkhWWH1AQ0Ald0F1JlFfV2kxdyNYe09+Rnxoayhl''@;'; put 'put ''RCM6L1szMmAxdVQ6VCNnM1hURShfNy9zZHApekBmWUVDbWJ8WWBgdipEXlJ3SDlWeEpXVzVnb3lGRHE7SEc5O0cwcUQvSWR0SGg4bTorZy98UDFDYCRPb0x4LCEwXl1hc3N+XlQrMDVbNXJTVGBWK0k9dD5nbktwJGVXTDdqIjNrXlByPilOUXEyLisuM3c+NWo8ayJRIVZtVHFRV0pWPE1QOlRa''@;'; put 'put ''ej48JCN6RiZqKG1vMzB5XT46SzdNP1JzUi53OHBAMEVeVm1VK3pGVEkjXTZoJjg5aHEjPUtyWX55VGswdFY7MXpjWExKdGg7UnhPbk5DYytTU2J+Li9LLkZvclspKHhLJiZQfS90eT1qdm06bVQ7LztqY3k9W018b0xvaHhzZn5INTFzYFlYfV53YUN5NHJrW0xad3s6KF4hTDVqTWczPEVgIWpN''@;'; put 'put ''PVN7ZTFUOTg+I2syYiRwSjt8OiVta19NZC89P3BHPSRLbDJtanguW29qOkV9QiJwVHMqIzd4ZXZCQCw8U3ZaO1Q5dEZmcFl2JVBZVj0lWSxpRj5XJmZYUSNvTGsqKUhrWi55On1dR2NVUyJicz4kQT4+U3NBW3k1Kk85YWY+KjMrWzJ+fnBbLl56VkVKIy41WSw2Y1kzTj18PWNvPCRBWkRrUX5g''@;'; put 'put ''I3I9d2ZxOShsaUpWLykzfDJ2ejw+Rnk/NEdoL0dMeUsjQ2ZUL1dPa1taRDFNZ0pyei9IS0pJM0NCSigjLF9yXl1NUiYhbCYsOXhqQkooI1UuKkY3WGN3aE5bLiMsflo0NyxwalhJLi9mXXAjXy8+V21YSUtKbGpwQihbeDlLV1VTMi9qdGA5Znd6L2lEcDFLeVM4SmVxdzt6QzhVbEJCOE1rb0FV''@;'; put 'put ''Mkl7cEBXVVNVeXdYc3VmTD55fjt1Qm9wVVNTK3MrKyx4ITFLWy5FQUBXcm8qLmt1fT1lamprWTNKeCpMfTVrNTFzK2VwLCtve1ZJLkB4VjdvOVEqZUhGUGlVaUUuOTxLZEZoQ2ZCYWZ9Xik3OSsyJjFheU8rYD8hNSUiakV7MF0wd1NKN0U6dzYjNTxoW1JramA6W3tZbiZUWWI/L00qSFQ8Y2Y9''@;'; put 'put ''M3JpOThbRCVuMTEmakhSeHVwOT09ejIiL2k1IlJqNTZSJEtGWk0+OklNekIpKGIkQ3xLOE0lQEo1fGh5Z215eTd9OHB2QHhRWG5lQkV4c2hSdFQ9S35lSzZzIVNhcFp0MWBWR2ZDOzFnTkVHdiZVRVApJDtVRUpCS0goNSl+bjo0fF5DUWFpTlJIZk9DQFIleiRBQU9KX35CJG17UylMSzU5Q359''@;'; put 'put ''In0+eXxMPVg1VWRmKk1aVC5mKGpTPSFxfXczPnEkUUx6cV1QdHJJMzc6X3YzOE9YJVVCMyVzRSpVQ1tVQVdEailHNWtULzhIKGB3KS9tc1BxXWpLP247PH1la29PT0NTU2F7JUF7V0J6dkIhOX5MOkN4Qz4zdX4sdWNNNmRxek1mOikoJnV7VSl0Xi9kaVQjJmQ3M3YvSUczT0hufVswIz95di8w''@;'; put 'put ''dE9keDZEfSU1TklkemJXYGtFdmE1WDJGeDlnNFFbPzReT0V7eDlxZE9IT15ISWRaVF9IZS9BcjpfQip8fStDVTdEb29ldntKUll6XThOcjBlfjZOZ3R3ZFdTfWMkNT1nM1EmLjt3LzJ9bEwxRlhVPmpLXmY0XkgwRnRoJG80eltpaSN2T0dbeWBoaGglfFI+VnlYdDwhNjJPUDQ7akpTb0NaZl5F''@;'; put 'put ''aVA9azNAaltvdUcpXXs0TDU2KUxSQ0t3Mih8VSM0Y2pAYTEqfTRxaDAxWHtiJERDcnViUD5mQEUyU2hxUigieCUqfUs5fnhbIjtZOz8rV1NiI28ranZdVkg9IkdOLG0/cj0oRDJPOCIlMVVLNElyRUM2YUY7TTp2KFRhWSVgeThpdXk4cXhSRnpVOUpAYiVRZVc7KVBhXWBPXjlKNHY+SDBbUElF''@;'; put 'put ''YTdLYHJgMCF8U3k1TGo8SWAwZ1YxI0shZ3ZhSCNdY2Q0TiRmPHVKNk5LdXdKLGg2IX4hQSlzIlZ6OWVuJG04bExDTT82UyY4JDZwIlEjR3N5aUhvW2FNPF5LO2FxdmtbQlFteG1EPSo2fj5VPyk0I3Jue01WPnB4RkdCSzYsRDRtUX5UfCV5KlNBWE89MGlgVD5HZHh5YTx2MG4rcmsuJXwlMn1e''@;'; put 'put ''WiUiJGY8LncvRkw2eG1YVENQZk4kTSErUjByLyp3c1JzZEc2fFFscyk2YXx2cGhvOktRJUk8el8oKkBYV2xaV3NRd0ZUVU8oMjZJQDkscG1ae20qW1JQWUlPPlRqbktLQk9XNz5CfXpQTWpMPDV9fUtnRVtdfClfYGUvcFsjeWo/YjpmRTtgfnh8PSp7P24/bD93SntiKlNySjdoaEJYKTFLJl81''@;'; put 'put ''TmJ8MDUlW31ELFRAaiZLRnRmSjg4aiNMaiR+bnViaSwke115bSZ7IVc9KXQyWHFFRTE7SDR8RkVzQSJbJm5xJG9McUYvcnNbNSl+RVtyQHpILmBFZz92Q3YyWHh2b1ZhRmZRW0N5THo7SmF8Py9jSzRSJmlzIUg+OV1eSzlzNEt+fl8rMUJtZUNESCNUZDk4RT1LSWlZYHt4dntOfSYvRlhlalcv''@;'; put 'put ''e3trRzJkdllSdDBMbkJ4YD9TZjk9c0o8PXJgPzFBUWpdZG1lW0Bge1gkKmBmJE1MJCRvbFJSXzRnQzxsU3hrPy4jKGBRTm90aUp9OlNQWTR2W2gjdVE7OEc5JGlsTH5mX11COHlWW0BaezQydkI0Z0NyZ1JMc3A2YXd5Yk5pcmZNclY9aEA0YzxyYk0qcUtpWSN2Y2E4VVEyN1p7PyRWUCImSz87''@;'; put 'put ''KyEufGxjXnd6MmdYMWRHSD10WVdtMT9Vakc4L3Nyc0UlOzMuK3loYXAhVVcxQkxSTUxUfiRGOXlYN2RHOUA6XVM3JHRkbn1iPFNYQiUkVmhfNVsjJGtvVDxdaysjKW9rbFRZWUVrYGVmSCZ2Wj5mX2I6WCRyTGoyO0tnezdueUZEMnw9cnxQLiNHbyxVK11beTouc19nLE0lfXQxKVZyT0krbFJP''@;'; put 'put ''MEZiNT4pa3I7fCIsbEZ8NjJyfWdLZ2J7VH0vXSg5MnFKPT41Mz00Ui5kRFpgV3J7JDBSey5mKTdSTX5vRjtnZl9WfCNhd2BhJC5GO0I7K0xmU01DJkBfYiI5JFU5UGZnXS9PKEB6R3NNMXY+fDd5WGw/cFFJIkhwM1o+Zn5pc2g3RFVoZmtUVigleGo0PWNtXWRKMSxKbkpFV0tNcVA/R0U0Zy82''@;'; put 'put ''O1JUdyM/TD1Lc1RELlBoXUQiWSMwKjFPJEYoWVBbZktyd3srOTk3eXFZRVhnQmVZRXEsK1JZYXd5fWhiOHQkJUYhYnxVRGZIR3opQW54PGdoZ3FbJUV3NSIkUk1JeGBFJUNGOUY7SGE0VDM+WE9bUDN2ZlUyQiRleV1xImE7LnZ4eDpJbGNQOiUxPFEsJSZyOnxLdVhUZExKO1dMOk84fjp4Y29t''@;'; put 'put ''am5efFg+bSNxfXB6TzddcD9US0RbdHxGbkNMWVpqblAwQm4vMSFadCE8JWtsWDw5REBBbyhpPUxgbnFOTl1VP2UqZUJRNlZAOCNbZ1AuRiZ4U1I0REs0KnxeTClYbDRrWHt7e3hGbVshKnpffUNVTGssalRfTT1aQjE+WCNZQm89Wlh+WEV7QiFJY2JSLmJsbmVbd11RT28zaXJUNTZ1UlouPytE''@;'; put 'put ''WzB8eHRZZltIfkRWMT9GSDxpZSgqSWZTK3tfVWw2OVdqYG1hVFoyKyJ9PWY8eCE2cFc4M2wwNzB6NTpuNUtfLjpOXXNtbVRYVG5tYHsiYUBDMEk1a01haC5KRG95N2grZkYkdFF4bT8hPzZvKE1yeVZ2OCtAKF53VkQxNTVwKSN8UyJdVXFrVCJsclpuaCUoL3d2aX1lOyh2bDIhLlh6Nk48Kkku''@;'; put 'put ''Sk5CMjQ/dGdqREBaTTJ1aEJjXzVUOG1pNG1zc3FIJilbT1pZWEd9UigvSG9gR2ZDakhMe0lSVUkrJW9nQSNpSV0rY1Z9ejVxXk5AdEJgdGB0YHRgS3VRVV5wIjVSUyguYChwUW9MNHhfSypPTShSXikmUit4elBZZyVQSnY+Qj1aNTRSQXoxNW9LO2JEOF82QEs+eV44P3g4QFFeXWcjLntVdCZK''@;'; put 'put ''fj0zYG06b29MbGVnV2RbZVFtbE5DIW9vUmJNUUsqfDhKSnlva2l5N2YxazpPTDMzWXhLO0tNND9AQFhkYDI3YCZwbUY4blg1Y1ghVThEdmpiNUB7Ty9DZG9lKFlDe0YqW0Vkb2toMU1lSF1BPl5eVHBfWmwjM2Z5W0Q+YWxCUSg9KDtlPHUqOTNiY2tqVjhVbkw9SXlQRDZHaDdoZEc4Ijdva2hB''@;'; put 'put ''TWpzakg+PywrfFs/OFYoZkpFensyb3A6VilOKCUrIjs/OHFbYmUwLzpnVCIsJUE0Sk0icXYxXVt2eD4wdjN7ejF3PytmJjdDWGh1OD5AXm50OVQ6Xng5JjJwMUl8d14hZlpNTkdsfixrQzlOT2xRUjA4YmlNaU1pTUJWODQmXWAyaXFTPTxiIyU7VndAdjJXalJganVvc287SFIseFpsRX0rcXhB''@;'; put 'put ''P0IjLCJMOk54PEd8NGRlfmp9anh2emojKCIqbVJBU0EqREordW5RZ1kkenx2Q0VBJSxnJXZhLylSblJpTmApclY9JlFnQ3VCdXpvaU4pSFgkIXVYaXQ4aChSXkJRdFJxWDtFRmYsYTpdNC9YaFtMeFByTGFpYyRWUj4/e1glWygiJU1ZRnArSlA7ISFpYkJHKj9uRHZ4Ly9mZGZJKX0pUUNWQGMj''@;'; put 'put ''Sk87Ynl1O0Z1LHg4dkA1KXFeU1praEFrfWosbTo5fSEweU12M3BqUlp3JHpOZkgjVlp9KntSfWtRY19zUilBYE88e2ZFWyZAMzh+amxpMXpHUGBqYGd0IzB6TmYwUFVsVHtdPndqSWVFOzJucXV2WX03d0Mha3VSbmp4NGZKSWswOWd+aiplWU1hd0wwTFd5WHVSaCVPazZTajM8KUZKRDNFZThP''@;'; put 'put ''YV9qKkRsITV0KCpCMkIubXk8aGAmcjxdInlwcTkmOyZKTU0+QHxSWlNwRy4xc2hgdlNJLGBqWUs/TSU/cmRaXiQ/TnciWSkkVVBiUX0kQCJrYkxoKTNXKTNjI1opalNZTCV4RGpAWTFxQl0sdShCe3s/Yll7cWM6W19kKWs/dH5gWD5zPFJzfl4hLzxvSCNONzRRX0xATnM7Qk5mQ11bInlFXTo3''@;'; put 'put ''TVd9R3JWbTpTLl1NNWIpZDp4dUMweXp1OWF0Jlg3ImdtbHRhbWxzKjNHUlVwVFBqLFB4YTU6TGV4aDA/d0F9VEteJlcuUEN8PTBXTXxfa1FYNk8kdXgsWUpeP0N6UFRtTl1qMjZjWF1dOjViJWUrWVRTMTRpUVVdZlBAYCl1UTdXTWMzVSh1IWFtKjo7Sz01SCMhL0JHRyFNa2c1Tj5ffCN4aGJS''@;'; put 'put ''dDFWUnJhZy9FQzdYe31ka2pNaUtzb0hETWQ5OmY2e15UPz09SG5PVV16NXxxSzJfSVBmU0tANkdaVmJsMnEydXd+RTtyfHE0TSpNdlpCXUA1R2MzYXxbXz1KWV1AUCtvRyhaalldNCoyYGt5Wm1yQWBhMV5bU1tXaWEhQHAvMGZrZUtrN3xvPDNyYUFFSF1ZUXYzeyxQaXpjc3FxekVNSllTd1sv''@;'; put 'put ''MVBbb003byo2TVtZcjlQd0hQWSxPVyZWYX5TXjJ6KE9lKTkvRjhOOipbe185T0prcWZrZXRZQ2l7NlFOZ2RHOFk1I0BSNTtkUkk2NSlkfk9SfXBkd2RCXUg3Wl0iZjdjXVsvK3d4XjE1Vl4+a3dXOyUjRF5fP190Rl4zblNsejs5RHdTJHJRKERoaiRpaVAkIXhEMDlFfitmOndpNHpnSTNWfUsl''@;'; put 'put ''OHVsM1FTJnZ9L1U7OGc6PHFmPEw/PjZ6JTBWZEVOVThEZHFzWXR4UGBzKVZZfGE2dlI9Snl8Pk0lKz1IXmE2bTcpQ35DWU5zZDZ1cVZUJHJZXmJTKCNCN1dUNk0jTEQqeVJOKWZRVWBIRnlgQkVmPzVFekVNNGIwWGsqXVdNeUdjRDo2N1g+dygzdD9KZlNzRylOTlU4RGRxUXUoJTV8cDxySzg9''@;'; put 'put ''PDRkaE9tLjp+Yj0/WlJ0ems6SyFbTk52PSEyMDxyM3FXSFI+Z2wyS3s6N2J8OjdiSl1fOzw6PTA3OkA5IV5oLyIqNm4jLCIyP1ZtNUd3PVFFXjEhMGc3LmZ0SzozajdnUFNSL2pLNCx0cnddXiF7VWpKSjdnJWdbbTpvM0w1eE0wRm04aU9MZXRrRVk2QC4vXnsxX3VtJXx+V3BmKGxbN0hWSSwl''@;'; put 'put ''c1R7fVpzZzJZTUxGeSNqWlFYNGwjeixnVSY8WVFKL0kscFA8RD5yd1M0eipKIzMxNn1NdmlLPlN5VHd0IT5QXU1UJmszRCkhTWZZVCZCJCwrdzp3YV5VLnp+a1VEQXtyU3g2NHdJd2RQdkQ8azpaXVR9emx0UW8uX1lxZCohVyZOI0J+YEhmJU9EcDJYbGhHMCpKcllqQkd7eG04KW06MXA2Vzgy''@;'; put 'put ''aXgyNGU+SiFJeiZzLEskbUokMU5yUztrIy83MzhlJUVgZmUjfDluSjlgSG1YJDRmXXBGOFlmYH1UYHBnY2ErRCsmc2F+Y1t6TTpYMDRZWUVnTk9HIj9gTndUYjNLPm47Ok9sR1Z1PU1wdl1Nd1RJZ3dUX09jREMsJCN2QDZ4UEs2YXowTFlfW1omUCtId2FXaVFYWk80ZWU1ZHkje2QxeitpJWoy''@;'; put 'put ''bDEsJWNBPGhYVV1POFEiIWZsNE5ma3dRdF1WfXp6SV9hSDQ6ND9bZGtdQylWeF4yWkY9dy87TytwI1lfRzZpS2FvanNvWj5MVzhNSFskOE05YX5WSlI8enhiWkl3RWVNcGQxOHdmdy96c3dYQD5bUFlSb0Nod1h2IV1QPGYoPXV5ZGRwO3NfR1lqeUFhcF4rW0FzQDxYVXRIZjZkLEx6KE9qTl13''@;'; put 'put ''a0tmLDdZdVpBOCxlVzR7SSQ0ITtGTSFkdGosNnYrMmRneCtSSTpWSkkzJT9rPWBTfmRNZ1IlamwoM01nWktuOlI8c2VeN3FIWiQqUmQ4QGdLZXs2I3hpWkQ3M3x4R1dwazVSTC5rYnpxdyVZaGYjSWJpQS5PMntgZEJvO3g0T0xxIih6PltmY2tbQz5BQH5uRGRNYUs5a141cTJYcGNOKjtpJUVr''@;'; put 'put ''Tk43RUkoPyI8JkI4SWpkIWFtJikyRTQ4WGEveiFrKlVDIUVWJlJ+WDZWJXpaKjxab0hdTTokK3Q8OVNZR0c1O049Nz50UVZ4MHU2PCNvbHcjNVVHT25vLz07VSw8b20zYkh2PW5ndTI3V1ZvZVA6X1dSUzRbVDx1Vl8oKVJMcUp2QSZ6M212dU1MMn1pIkhmQC9qKFJCKC5AUF9ZUHRSamN5ISMz''@;'; put 'put ''RmIrJlFLc3NvUCZ8PnFLSTd2ciopcUpPNSwuQ2d6ZiE0WWshMDV3KSh8VThWWlglZmNvRURpYVlVM1Y9bDRDcTBrdGVKd1ZZQ0N0cC5OSzJ9U0FTaSwkc2EleCEwamB5PyZBOCpRSz1lTmRfeHBIJD1KI3B9YXg2WnY9dEBmVk1FQFU4X2c2Ykc7U3ohMUJaVnN9cSZnIStAdEJoI2M+XW9FISM1''@;'; put 'put ''ZiFCfDg9dDRueUMsU0cwaWBjeWtAX102LzohV3I4TzRrISpTY1pSdTVKMExDR3YmaiwmQUpIZTtDTGklKzl9PUZsWGc1KXJPIz1ObUAvR0hoRUNrKTt7Uk1GWVImSFlJe35WfTAiSGp7VHlwdEJ6P1YsWC9CVzd0d19pMHVfLDl8OXpVRzRXfCU2Tis1IVs3dmxZYnRWN0o3amhZM01NeD97YEpZ''@;'; put 'put ''VCZHWz8yPENwXzBfJDM1LyIuODpOPjU8ZyYmbiw1MWRYYS8+I3MpM31DMFdbZlp4R1FyUk1HUGhHUT9mclklQDJlPEd2SiFMWGxsWCZpb3dGVzM8KVI+clVYaGUkWntePXR2T3Z6VmowQkJEPFZaKWpEUmkvZ2FDM34iISFsbWQwbEUwUENEP1hwX2ZWfUsrTlJFSFlMR1J8LFJoZz98Ong4Rjlw''@;'; put 'put ''VChVSWNSJkp6SWE2VSpoMDx9SDdoZ09KfFlgVHlTaXVxWnhMZiQ1SFQ0SzJ0SGhqI0FlWlhyeiYia1VzRnFAKSFfaWhlY2teZkh+WUB3ZTZ6PXslZXEjXW5VOm1AfDxHNE5HZ2ZueV5ieSFYJDlWMmZtOlZKamUwP2BnPWxyU2JJfWZNYjBZfDo4K3cqTFdaR2dmbnk4cDB3RnRsSVA2X1txTGs9''@;'; put 'put ''NGJlRjNbaVlUKmRlIltda3s3Ll9vR2VeSDUuX1QkTjdFLyZmIltXLitAbWAsM0NabmpXUzUwMWt8Sz0vcCUoOXdrPHJKOmU7fk8uciQwI2ZndF5bYCk9cH1VKTNtaGdRUS9+bUFJTFp+eVcyM0NPZFsvJFV6dlNLN1o0RWN1JjBAOE1mUnV8OEJuISF5LHcxdHdWSCN4VU48OV1jTWFuVTRNNT9q''@;'; put 'put ''K3xCTjpYbXxpJjpOTS40eWRBJilOL3xlTyYjcWI7S08/Mm9nXkllamNJamxRUn5rakxeU3lHRnhXd0lVKUo4N1M5LEdCLiRZbWRMVj5ScEREKS5GKCMqVlYxXUdHTUIodXQian4hczkhanszP1Z1Vm42LHlYfCRiYHdnazBreCZIQi4mJXVtfFQpZTpPV2N2cmRvREgoJS8qTnQoOVJPcmNCanRb''@;'; put 'put ''JElVMks6OS9bcH4wSk08Yixndk9pNSZGLGhOd29rX2cuXnFVR3Y/YG5maHhdPX1QY0MzZEpfZ0RAcCFibn1pSkR9MV4oZ3tkSntUeUNddk9VK2QxXU8iYHYrIiVMOkM4Wyszcyx3enczRVcoQkVBT1VgOjBMNShQLDxxcDkpUTp5QkUjfmtMOGQhcmx0Njl1ODMhdzJPXSpRbXNOTyplSGYpfDJ2''@;'; put 'put ''QHluYTl5ZWFGeFlFWyZANGU7WjZQWy4qNVopSkJQS2BEbWpBckZeP1AqMVhETiYuQEo/PG1YT2hpIlM/aU1wJjkmO0c5dHtwJCNPLzBbMyszSGRTLGFXWjlyJnVdI2Z1SHdtcVZtYGBfY1J1VCRncDRWSmRra1M6dyhMeS9bKThuaUIjbmVGfCI1YUU7bV8+cWoyIkp6UTtIaSlIZzg8M0cpP0Yq''@;'; put 'put ''Rm11Y1QwKWFASXR8T08pRT5yMUl1fTVsdGs8OXZrWHMjVmBTUkkrQz99cTp5dCsxMHpNfFl9dDR1am52ei53cVB3Zj81Vjg2cU00X30lYlZeOSQqUzhXOjYwNTwobysxQEhhbV9Wfl5fTjVoTCx4KEUvLzhXbFp9LktKaUg5UV9VUFtHanR0PHolam9TXTlYO0NrO31Xbnl4KVlRdDJSfnRCIjlH''@;'; put 'put ''JCpnJHBKfEN6Yi9VcWJnV19JNyQqajROMV96ZWdSeio0NFdvcF48YzNGZ0o3PFFoNGZVImprfHwsOS5McTM9L01fa3hNbkEoUXpJT0U/YHdHQl1VaG16cG1vcixZKDhAblZlSGd5WCpmXUxzYjc9MjldXntbI3E+cjtnPlQ8TmcoY219UiQ9YGRrY35WQHUxRWloK0QvT0o7T2VjIXZtYlNBPGRi''@;'; put 'put ''e2klPVtRTCNUb2k/ZmJQYSJ1YCU5TjErLF1RaVIsMlBIS2h7Q2AwfXlLUD10Ujo/LFZ3fkFENzVDOSVaRns2TW1vUHA6M3VaRnpCZl5ERClfO35daipYPH1MT0NBdShGKFQ0ek8pOTthJTVPcyZFKzs3NVpnSnhle1Z9QntWYWQ9T0dwOi9zc1hzQ0BqaSlgNGJPWXo5RUomVktzaHZ1VDZaNkxP''@;'; put 'put ''XlElZ2V4JWUjb3lfV0siNSNRTi9bWndANjVlX2hnYFVsZGolWF52OU1MfXEqLHpBXWdHSUUkcjhNS0pYImlwYWxTYF02W2k3WTtMMFg2PXpscGtrY11TMFh8R1VHTlhGMHp4UGhNWVsuXkR4V09NOEx+Ti4iVlhyXXxyUGh1XTR2PVtsQ2hDcW5MXl5IUnY8KD9DPWlSRl91Rn0wY2k5YFZKczEw''@;'; put 'put ''SVsme3k3TSIuXXtnTjZYey5qTzVdIW9sblE3PUk9VDJMTiJjOGF2dz1mN0orTnVQKXBQIWFmdSF7dXZFUmJrRlswNWhsT0YmSXBIMkhacTc+ITc7VjB5bCplP2ddejhvUiUpWyhpZXpnOn18YUs0OTtRMWdwa2cxNUBoYj00LDpzcVk+YDhueFZlLi9bTU8+OjV0d3JKTVZ0eCFdbnBMV0I+PS5m''@;'; put 'put ''Mm07MU5nbC96OVMufFRgUFZBMDAsKFkhTl1aOCxBcDRYZ11mOU5OTSx2eitfQyVsZW9IJjltLnc6YGQ4e31xZUBQYmhGSmsjazFiQS4wZl5GYVUzeyEjQTVGRHZLOWZXMi5xTktXMU9deH1NZXcsSm01XSxjb0pvPn4ueUJBQVMzUnkzMlQiV01IfD5Cb0ROSilwazcwITVBRn5CaGc1fCIvZmBf''@;'; put 'put ''S2UlPWsqYmpzKmtZQEIqdmgqU0NHY2pwaEUrSVl6WS9waSU/O2BtRklQKlNAUW9eRjI6TEc0alhwP1MpPDJDeyx1S19xYnJGYVV+XjxZWDJKVz8paUJrX3F1bi47NXNdaypjZGVOUjo/ZWh3ZVk0VURdQjUuKz9UVzdTXWQ6KHFgK01nKCNVKmJUdFk1OW1GJWs3WG4wRHc0YjBWSFlBd0xEQ1pl''@;'; put 'put ''QEN5WW8jdmEmTWZ0Qnt2OVolTT5IZ1gwaXx7ci9kOGVhT1QjXTZoMlg7LipefFJxLkB4L3hHcmMlaFElfERbLysyIzF+Oyw2cF0xJEoqO3FScTpkaV0oa1VSUEo1XUYxN3BAVFg6YDJJbGxPJTQ0SDEqM3hAMXpgK2FGfVQ5Pm5ycGc/JHFOK19GTXRCb0xgWE19QXdRTiZYc2B1IzNfN3A6SCsm''@;'; put 'put ''Iik7S088czNSX2RFJjlEelBEJDYzQnx7OzlBcCZaMnpKYWcxPTlbNll6NVhZJDV6c15GSlgjKTYudlBvRSxbeik8eW1YPV9ZRFQiVn51Py9Rc19GdGlhVDs3aWM3WHtDNDY7MlgzMmZBfEYjKWQ1JGk8LjhYfVdAbTB6PjVvWUU+VEYhZVRUSSw6QExLZyVFa0hybHJKJW41X31JdGliJHUqVHt5''@;'; put 'put ''O2JtTyZ2VUB6ImtETmElNkdzN2Z7ZTxGZ0dSU0szLGd0PlU0ZkJuLzdxOVFLY0kuUHtEV041TE4zPmkxMCQiXmBpO1laWGEiKXhvaDdSbC9JK1ZDYHx5UTJNS1l6MlhHezZnXjhLNDxTRzloUk9sK2Mmalc9Xm95Q281R1J9XjpMYExqcndvLFIxNH1EW0lZI3JsSTJ+WDlMVzM5RzMkP3pFLFo2''@;'; put 'put ''enhLfCJ8KUkzYnwxR1B+JGwyMlhBd195VyZEPD5mPUlUM3RDUj9RezczeUVxRFFvanUodX4+M3BlUHBjMi9oUU01XnorPVg6R1h0fU9PXUkzd3Y1M3c4Q2YxMUtRVWduV1cuJWpITHtHXXhXUFgwc3ZUezIlI3JoQ0Z+LnRjTyo7VWh2ejQuRU1FRm9HSC5MOHt7KTtVZUNrJmtHUS55YEY8fXZD''@;'; put 'put ''NDtXT3Y+ZXhUQmBqMmkyRDFZJn4zdT8kez8wKXpXWCglTmIxNjsuYD0+Qy9lZkt3ZnZ2flEsJG5mZUA1bDRVZ0t8Ti9mKnJWWFMoe0kpeDQ5eTc3Ym09I2koMCEwa11wcHtfa1A/MHI6Mi4lU3h5bF52P0xEPDEpKnc6OnE4N1ZNWTkhOHthNlJiYS4rIXEvRjxbO0ZvWGNfcyRpOzp6KHpTbTFz''@;'; put 'put ''WV5YOiFsR0F7LnouayMoXmg8cTwmfCU5Mjw/SUpdLG5OYXlvOzh7Ln1dYmR4dU0rREAqY0AjQlpaOEhLcTlDNzM5JXdVO0xvQTAzaD0wej8/eWlbRFlZW0tEdXtnUzwrQ2pHIllCJTl7a14xN011V2NTYXc5QiQkInU1ZCgrQkBoKnY+RHBMR3NLI1ZEYHx5T01XYUk6RUB4T2xVWihVMFg8aElV''@;'; put 'put ''dCpyInddKypVOlhPME1FZ1ZAVng8Yyh5b1UkfEIkM0VOVkpuLzpTR01LTWpyemBQTVZWdUh5NFFiQ1o4X2pIaVtfYFk4VkoqY2pGWzR9W2YveCsrQiR3ejlbZExlNkoqMXZWVzcmIzg6biVFSF8hQHd9LzBqUmhZYTYuWHd6VzdUIldOQX5eVE1hP1k2a0NwNmhLWlVydGFLUXt7SUB2XyYzI3Zs''@;'; put 'put ''fTNIIWVmOm9Se0NmNypsL1ZRMFJqV2pWUFh2NkRaN35JfTp0RkVRZSZjcnU7QC4qS15+UV9UZXsrcXFQXkNRRVU/bExmOyNEUUUrdE5pMFM4Nzk9c3c3PTtVL0JdbjhUTTVkO3Ardmx0Yj9zbVI2WUhETmlaeCE0Vi83YmVeQElWKjw5bjg4fCYmWkN8dmE4V3JtOiV+I0NOZT84cDdmOWVRfUo0''@;'; put 'put ''bCY4L1pzTUwyXntNcn1bUS5STlB5WWtpXUthTT9MJFZQJEhabVs5RTlBdlFCVywrQVRlfTNeZSJreXRiUytkbCNMTyNbT1pWUG5WTX5hTCJtPFBbUntqQ0VZP2FZRn15T1JKOTRkVXt2ajUsIWFwczJKM2E3WXt1OVB+RiMmbythU355PE1nJlNhPC5aLEldeCRqNDosNDl8QHU8IVVrcEZxJFJ5''@;'; put 'put ''Qm4kU3U9JHMmflVAQzxhYn1WeEQsbUM1USNmOlp4S3o5cTsoUSU0MkArcTZEMmMuS0hOdjEpSCNdNWMzUkRlITxKLmRdLFQjTyMsZnUjaTR0PX1uTC4rekM6cnR6eHJyWzxyPjJgO2Q3eDBVel0zPD9dXTRsZkNxOG87bnF2cUBlMno1fVQlO3lNInx1U2BYdVEsW0g9O08jMng2Zj5bJSg4OG83''@;'; put 'put ''PnFrUzNrMzVbZltHSHZ7eXUvOl1WMG07IU59LmM8IXJlRUgrOGRpMCpQM1dmQnJRSVBhOS8vdzZALGswUyp2JmlXO0IxRD4lXShyQXk6QEF7PCR+ayhXMHguKyY1ai81aipXWSxLa1dDQ1M9XnQvPGBSNjwlZWVBYUBCYk49W155SE48ayhXKmU1KVU4XXEiZEpEamRVOCYiVHhZXzJ7OVo5REtK''@;'; put 'put ''MHpLXX1uczooITVdXmdFKCpiRmd9LztiTHZJMCpKNUo6eS9OVCl2MFo6YUA+bzsobmN0aGc/PjZyXWIsQWRsNFtuNWZOYjE2KT9Qdl9xcng+b20vMnpsMEc4WmhSe3FlVHsse0ojRD1RMklMYyZmPilQciN6VjolWipLQzhLLHI2bGIsd10keTY9RD9yQVdRY2tZdG5mOSUmQjBFVENmUnVmOGZn''@;'; put 'put ''bSIqOlNMSFN1UH1lRVJAWElEaTxSZkF7dFYkY1c6am0weUI5VkQkc2g0eXkzJXxjSTF+PFZqfTE3Vkl8JC5ALlo0PSEubihMNUlnTDVnZilsT1BMUjw8bnNhWT1pfn5hZitXJH50eytiUDguITZYciVIYnRRcTJWKlRJQGFbYl4ha1dkb1I8V3t1OGByIy5YOFhpJTd2MiExYG96SmFoIiFacFtU''@;'; put 'put ''N21dbkU0VihjOiQ4Q2Mua3RncShEKCIuU31hZE5XMHMsOyFyaThsTSxrLllfUH1fNGIqNlIkXU0oX3c2X1ZFJE19YV1TKVNnMmQxWTosNkhFZFsja3I+ZXJTT3V6OEIxbmx3N1k2dipWZEgmO28mX31tUk8rYyU9eF1vbF4xPFtdK2p6TG1+T3JraV1eOns/KWchRHBncUU0fTtPSTpdbz9yeVpH''@;'; put 'put ''azkmX0p5XktWPSptbCFDe2hCdC86fU9GITlWcXt+YGNTeDtCRiVlMklSMH1MI2EmanEsWzg2VXwrMXgoTjJtb2pFfWEmJWdYOUc7fVBONW4mXltbU3IvKiV0VV8+IlswWiNhQ3IrU3pSVVQhTW0kTjg/SllWR0BMe14oYDxhPk89QDM5ZF54NEQ0KH4rRlh2T0g2fV9ENUsjajR1XlNLT1guO2hS''@;'; put 'put ''T21BfV1BOTI2Oz9dYWNkdXNLXl5OcE83T1gmJUNiez1Me00lPj81alIxVStNdV9jLiJNamUlIlBkI3ohYmxhbEclcWEqU11IIlY4YW03ak1dYSsvUUlyVnY4endQcGFPVVBmJER7bWVNOn0kTnU4YThPbSJVNV5valAzNXRoZz9BeyxmUDlyYnpSZk52T0M5blAhfHwjT1RmLH5qQGxEJnxVNFp2''@;'; put 'put ''UitLV2tKZTc6Y2x1fFYxZHp5bCViRSVxZz91aVA1X0RwfGFoaixZZDE8e2c6YEg/NSoyZWMjJUpZKWdCbm9HbDBddEZkcFF8azxyJmpbUlYxS21DfHlRYFRhJlIhRz4+W2IvXUQhKEQuR09AZlc4JnN6Vn53RjR8NHVrQSpPbWoyQyI7eFRpPm9LRVg4JU9gS1QsXTpQekE+VX52M3pUPTAqOWNh''@;'; put 'put ''QE1uYG9HMyZ7e3hGK0BtYDwjRDIsYSJmbFlCV2wsM2kkRDg1ImFUek5tZ2h5WTJnflt0cT5gVT07O2B3N089KFN9PmN9cWBeI3FRemB3IzBkRGFJXVJgMTd7cyxDZ3RUaj1Uc3VIZjZmODRaZVdbJT81RHNGJlUzY0RZIyEjS3lRe0lnaS9VO3gjJUw5NklPPE5hVVNpJWprKU0leWJhMyRLJUB8''@;'; put 'put ''Xz81OzsvLGVMbnhRVlpUXlB1WSYoa1plPVBZYXZFMVpUb3AwY0s/NnJwRmtbeyohcmFZaWBwZTlQRWBIPkozZU5SQU9nUE5WVW80cnlePzQ3dWYsdmF0fDRdPzZWLHY+KD5rK2EoN3JNb2hbc2ldJVdVJHIqPlRBd1ZzXSlsdV9icDYvdmk7Y0Vwez4lRikmKUV0M2pAQzNqcVVJLG5JbjRFNiQ4''@;'; put 'put ''NmBYWkVwOjlvTilWLjMpRCFwczBYOG5QLit3Y3FOVGFXdyNSdDwod2pHUUUkfW0zNDdwemhzLGpzYSx1empbVlclOmZeNDc7eHVIbGRHcGd4fV1kR3R4SGhtWjVBWy5aPj4hcj1JZiswc3MmeFJSTXdafDRYTmVVNy5PWz0lRGJhWTp6OUY3Tz4+b0djMSVseEFYTCFvI29fWDx5UCUzMX4hOXYi''@;'; put 'put ''TixIbllmX3tNJmQiLmR9aE1MNjdjeGtWZVZWU0cvOyldOGxgOGwsUTtwZW88aEd+XyxkalBSe1hAbl0+U21UZDM8T0sqPTpxcE5TSnJzWm1WIz9mdnVGfl99ZDdLLypWYylbOlZWVVJmIWpAckVzdCovL3c6TlA/dyJkeVEud2kscm9eT0pHZyxROmoyJiojISRiY0kjYXtuNEdpfEdzKllSPiVR''@;'; put 'put ''PipdZCZlPGlsQFFWW2BDcTNsJj58I3N+ZEpuVXBxOUBvUTVwcWh6ez8kNmVqYGR6UzpRIW8/SSkvT34yOVIyUXVUOzByZEw4KDwmIl1FSUVzLmouUDM7bXpCIVo1OklyS085OyU4XyF1al43bHw7dl12OFZsdEokWVd+QlF+XWQkcjxpSEMmO2pLb2dhazxaPk82RkVXKHEhS2h+Qnc2LG1XcmE1''@;'; put 'put ''eD4qOC5Ia0lMW3w6N1kwNVpCfjw8KV1Xajl7bDcyR24+cmMpUEpdISE1SyZQTmVgZj5lVXt2QjVvMWhyYXg2JjddP2hvQU5UdSZVWzZTPlgmJFdCbjVYaTBnQHhoakVZKnhSSDl8eSpIPCpRLGtVZGpwUytHWWRfWXw4XzdoPDA1VGFdN0R1QVFqNi46LitGImoxRDFZYWUkWTYjaTNtVSRLZTh4''@;'; put 'put ''TXE7eXNhLl8wS1owPkYxNUpkPGRrMF08ImQiPEJBbElPaWpbTyRRM0Q2XVVbTn50RVoqKkNaPz5QTjVNa088MFV+TD5yeG9MKlJWeUJSMHlCJUZ5OGltJkRAflpbSUh4Vyx8dixjRVFTM2khJWNZNS47SyZiJUN4Rn1ANyghYUc3WipTKzdAdldsV1MsfiJWTnhAR2w5YjpsSnp1I3siJW1RVkNj''@;'; put 'put ''Q3hedGZjUFs/QUpEL1NTLjJsfUttQkoqfXRYSFhSMkB5QHlqL3A9ck01ZXVbe3x4Z0A2bEAlbHRrNTMxc1dtS2FAaTs7SWoqPm01TTJkVTpwQDB9Ykk8cGlIJnAwLntPeEB1UlN8cEthTGZDTCIkVmwqWnhrdTQ9cz1rYUM/VVopUCNeayVwPiFGU00sMlAuTlgveUMxc2VmPj05IShVVF5JKk46''@;'; put 'put ''eF0lUkx6elhWaVEvYy9xZ0A2LzZvWTI3bzQpKCVWI0JpdEEhZEVWXS8rKGo+Uk8zPDVmfWhgdChAMF13TTtUJk42RXtwZW4/SW93Y1VoelpFTlJxKk5iWGVyUVhtXkZqI2B1cSxVZVlTbV03dzpPZ2lvKS9wbCtmZ3ZRb0M0OXRDZWspMWlPIm9oY3tucXpdODxBQDRwdko/Qm8pVS9uaGlBMzAm''@;'; put 'put ''QzBzPVEmaEI4eDFIRDIqZ2taWG10STghY2RBQkgmVzpfL19iOGheOD0iLkh3QihlQEg4OWJATj40NW5sb1Y4W1hmeVNGNj5+USVpcXVXTX1heHU5Y01lIWN0Q0NdcFEzVXNNSFpNTnlqTjZmYVVGUkBXPXdtO1lQI3M8NTQ5UkZxS3FpdFQ7KUxBbSwhT057b0s7RzgzRHNCfkhyXU4me0U9KHJ3''@;'; put 'put ''T1BQd2cvNGRuVkpGblE0XzF+bnVtZ0wrPHUuKGA+YX1hNXA7PGY6S3xKUyRXKVRvRTE1WV1DeFFtdFBUYjRGMVA8Qjx+cEM1Nyl4T1M5c1BPOCt3ZjQ1SzlVSUkhaHRmS0tbbiRZZHhbMzpgL29YSz14UCRMRnllOnpJd21RS0pnckFTVnRhWWAoS0VlaHEjW3BOITpefUwhUWlFKFFhUmYxYXh7''@;'; put 'put ''dlZqIyVgOFJlb1JbJD08an5JX0BmdlA4TE5hbDw4REZVIVl8RGNwQW4/KWFDMklrLzl6Y2JQO2R2VC5hKVc/PT8wM0h4c1hAYV9oND1tJk5vPjM8eXlmaU0/UHJ4R1hdQ0gpbWYlUCMwSVRDY089MG1sNlZFX1t2YkRWUC8+JEJpNV1DXT9jdjVLQm5ISUImd21SJDc8QnA8LCVLN1tDaGQuInwh''@;'; put 'put ''JiN5SW1hbjxtYkFrXSVKK0x+Z1k5PFVpY0JeT0xAPzZ0ZmZ0PFJHV0RdRjZaLHViWV4oeVFWXzVZMGJgeF5HOD1mfSxwclRKZExsMmB6ViRIRStVVDkqdmp2QiFyYzcsKkRuZ2J2N057PkdPez4hXzNhWCk7SkEmYClkallMX1tCRDYhXz5lbkk9N20jeUVNPU0oVHBmc0dGczFaSF91b2Jwant5''@;'; put 'put ''ezl8MWg1Y355OiI+d1l5cHRSeWRGYSIoSkpOeVhdWllFOVhmWVJHJEE1RipoQEdCdHdEXkpnY0R6MCl2K01JI2xoIkR0MTEkUH0sUzIsUCV5JEwyWGxCRUFBQUFBQUFBQWxCKzxmfCJNSkQjNSRZN0w4ZkdseVEhYVI0U0xHU30ob3AmJHxeIyxrX25SaEdOOXghfCYlMS84TWEvUG19OjhSOXpQ''@;'; put 'put ''N0VVWFhqKF9xTWVaQ0tEQUs1Yj5oJkFVQyNZJHZeTilNaT9GeklibihCJG0weTsmIXswR09XSld9RHNONXZZNT0hMy5zIzBhJjtreWtkO1NbOER2enRlSmAjXXkyNz5FYGR7e35uRX5MKDgmR1sxSmZCXj8hYmNNMG47R0J0YDNwLGYiU3V2eDFleVpZT1hoQEB+WjIxfF17USxmbVFOQWBiZ0NF''@;'; put 'put ''JWxUOF5+UVJ2T0lidSJYLnZPV2pHSF59R1VIT3R0WGdLei97fjhQVXtSQGN6bzQ7WFc3Qz0/VGFvIUUhUTlyflk7dnRnTW82XT0kWzRHN1YsUXcscyZbaFQ2YUQ8dkJhIVEzckcuQjs7UiEzbkBdOTVFNCI+On4zfENlNl1IUD0xTWVSY1psQE8rYExPbnhZdHhzVkFwamdofX1MOGspel86WzlC''@;'; put 'put ''IWh5e3lhT2J2YV5CWHdbczQ6Xit4eCNAMSE+S2hrb0l9L148TFBPKVJdeUUlQVVaJUJ9MiZBKTROPGEsQTVdNyZYQVU9d2hQXWdeInthSilAWUIudTp3UWlNLipTUigmfVBAUjwveUhEZywoW0UuX1BIQnYlQFE5OD1id2tUSjQqOjxLW2B4V35fc212UkF4VCkjVF50Vm02Wix4V25keFteNGVV''@;'; put 'put ''WiwoKkowZmxJeUYrd3pIfVh1Njd4cTgjO2ojKURPbS8pPDdHTztOdF9EZyJ1Sz4mcV97ak5zPG00XTRtQEE2WDZJKldqTltnIyJ5ZngoTnxbI0ZxUHU7WXo0aTk0OGs2Si82XiJNNShuJElmPU8qVGNsLz1STjwoKnFTeF9NVjMxVXIzUV1tZHYuTG9OYmUjSHxyS3ghektFd0xHey5yRjFFOEdj''@;'; put 'put ''SVZ+XlB5ZXl2T3lUSksyPCM/JTZ7OXpwVXx7PVJiZGBiKGlvbDlaN21MbXghbDNtX1VZckZgJStDITExKTMyUitoVjtGfCxSfiJMNGVtUXJiM0hfZSs7c3V7aVNGOXNWKlNHZTklQUk+XkBERDgkI0pmWWlFWTtMNip4eEZkPk9RNDhTLH52Nl12PkY5PU1zPE9yTmcpTT5RSXNdZSZ7cyxMRmV4''@;'; put 'put ''ZnlpRCl8ZGE+cklwfkFUb0B3RWNYKVNGRG9UMExke2RFKCZVTiNJU0wodjVAWCh1fT1uYmFXTTYqYlYwVzI+XzpmUjdYbypye20sN3pPcmJyZXZpc0MkMjZhWjghejNiWjhOZGAvRygueXEmeT4lQlJxJU0wPVksbD0wZjUpS3pSOng+R2kuZDQ0RUUsazE0MC5ZMHo9ZSVTPkVtbXxHY3hjcnY8''@;'; put 'put ''cnVFczFgSF07KyREb1ZxdHluPmJuZT0rZGtMSE9hdHZIWjplXy47Wn55Jnl5XXVWeEJ3QWlqanMkVz5NUSh7S01HYztfNHYkYHg8U3NCKXRpL0V1TFFaYVlZdGclJnJKWzA/Tmd7V3xpX2cyNU90a25+enpxNi9jTmFuXyI2PmYkUzhCTkYqO2U0PitVMk9ETGplLkpeQlZoL0IhVTdGMy9Jfjor''@;'; put 'put ''XzhOLGk5OTY7OXU2QkksUio4MT5nMjpQN1IvK0ZWInZiUnJVPVZHcW5oWiYpRGZOJm9vV2dzTjd0KSo9eUc/aEdBT1RZKnVxWnJTaEFZMVJOSXd0Q00jYT1gfD1QMEgra1E0OmpzNTF8XS8+bURMMFleTlUhfl4mJGB0N2A1RCoqXkVQXl1ea2prLmdaWDJvODk/M1MmSUx7PWZOdDBXYytEO10v''@;'; put 'put ''WChfaXU9Vn5VenFJeS4+eT45aThaXS4wSzVxUmdvYXpVKHdBVkA7Y1V8W298YC5GWWQzV2RONzRDeGR3QDF4UHZZPDd8QXI8XVNJNjZLXSxEMT1MXTQ8PE8lVFRWS3tPZU0hVmxfcSp4TkZhZ1cwUiFqRm95OTphXThybWVBfltsXnVJd3R3YWheN310e0lOeSg6XTQza1VwRitedUt5UkdnVXta''@;'; put 'put ''MDlPOzA+Tz1PYHBQOHoxaFRfPiIyLkEqMktoPklebzdsMzo6Pk1GUk1aNUI2MS5JTk1rbHNTdik2Yz55dGIyYCE+VCpxY0Blb3ZEWmkjMVQ1X0FQeyElcV9NcGVkP0kkNFt0SzxtU314eHM9LGI1ZE1TIkx6PDhwPzJYVC5Ze1ttVm9mPW1TNEdQekhuSi86Jm9UTmF7aTh5Kj8jRXkxWkx4d2dv''@;'; put 'put ''NSh0SHRnalFRQS98XnhpI3JAOmYxSEhTYyNKRFJmfWssRCsrYnxkNFhjY3VYcDR4czJdaHM2NXBfVzBfWmNhO1dueUIxX1NfW0JhY0hRJSkhRkVmRlN7PTBRcGk0UE1SMFE3WS9DV1MkKG8ib25hNDFTXjk7TTtkUl0lPUc6XkJvX2dNKGBVYl5KWEIlXSFSXmEvTio1fEkjNVVyZCUyXlI/RU0x''@;'; put 'put ''TGg/OiRWb0csQlFsSWVoPnBuXnN4TSoyfTI2fWhQXzxNJkwhTDReaW52Rmlgay5QNGk8fVtTZnFEVG1hKj5HPTxMJTlfOHRGZSUxRj95ZSt1Il1Fd2s7QXksUylIPl01ODNKfjwvWmdYZkVtWlZSQ2FnW1Bzc1RPd2NuNy8sfTUyIWtWOT55KzEwek9yZ2AoMXhaSUJKd0giUkdpRWY6aFZPRTZp''@;'; put 'put ''WVpQP3lSKGcmazN8eFpIc01rWXttNk5KWnB+YVZKb2kqSjp5TmpiLGFnNlUqR1U8MWlObiFrPm43Nld4Tz9NbiFUOksobCpRP0w1bGtHNj0meWxTSCJJZ1plUH4uLCxfVFUwTzRReU1WdC9uT1VwX2A0RWFlYldbZWU6UWshN1I9djBfPmpqKHRiTHhZSiRsU2cpOVdFYzxFWHw9dCY8NUxIdHJR''@;'; put 'put ''fEJ0Wi5fITg+dE0pY3RnNSRGeCZAPFhdQ0xbRUh9UTdCamlfT21qTytCNyZ0dGEpOigrb0I8VUpeazFJM097IiVIVjJmNGQiJlFLWSsqS3tkKGVTQiElQzV1Oz9WT0VvOkRNfU9zIkVVaTEyNk1kQD8vT1MraG5baE1PUHFPak52M0EvUld0JmVoRE4vYVJkL2EwMFlMUzlIZzddcl5dLkxDank9''@;'; put 'put ''LklDY3EmPmk3fGpjLy94IVBbPlNnaVEub0tRXi5bSjZ5bCJfISlGL21rI2R+PT5HIyYoUHhzU05sTlA+LDBwNXo/WT9MUnN4VkFaTCJCQGlbO1hoN2RtbHBrPHlmbTFvNGhSUVg1U05UOTZPWCxuYFEudStTUGpzZnY7LyQ1KGFQZWdDfkE+V3ouPnA0SkxdcGN0ZjpCYzB4dSIqLkhFc2xLaz9o''@;'; put 'put ''e2BjWlB1SXgwMi9dQzNhOElLQVJbeXVdOS5BQWBVYHU7N0NVPmdSJkNGOWJ6NHw0VEosdWIocCJPPDNiLzkpTVAhMX5+QlcxXT9yTjpAO1t+e104ZmFBZVdfZExpbksxKVtGL0xIIyJtPFBLOj9eUGdoKyFEYk0hdGZkcHVCRmt4YysufjU9fGtrM0F1dWBiTChRJDpxWXUxWEsyIyZWTmdoZiNe''@;'; put 'put ''ey9YPXI6K1QwIWJQey46KlFyTm49akIqT1VDNDJXU1t0VFNjNmRbPCMxI1VweCgwInsyPWltcmwxSDp5RGV8aVp2NGk1Rltxdzp6JHx8cEduZF5gMDhxSlUvTz5BPWVuYilsUWZXUnRUWkA6MUs+dzlia08kQ3BeK3JKTzlWJEpKanY8cXsjK3UzI0pbPW1AWWA6KjIuKC4sK14/cSVhUnc3NTEu''@;'; put 'put ''S007MkRxe0wxKG50JStJWUsqbiZ7NjdPTWFFVDslZlZvO1t2NHtSUUA9KkNCeSNUYihrWmFaayVkPVFANTdbQkhLIyxaNDRAXTcmPm9UZEMkKD4jQ1tFR1gycWJsX2l3fEdELkhIKjc/UFl8bj93ZldAZDIjQGxdcC5fdSp8UHE+MU9yWVROfT5FaSVwI3Zhbjd5OH5ZOTF9fltCQitjO1hFbEt9''@;'; put 'put ''TStLSTdeTjNUelN+VyYiNG1IJlQ9cFM8UFoqUXtoY1daT158Jj9uYl9JSUdHOXRQYkBFT00yM3FdTVY0IVJlM0xMJCFLRzFOKzFzUmQvQF9OK2J4I0tTSTViWkNyaXhyS0pXNHh1OEZsUHdoMSJqYSpRejRpRSxoSktMW0t+ISshNmhaRkdNezNITlZ+UCE1MElrdFR1VCZaZG51Smk/PyNMPU5O''@;'; put 'put ''dGYxWHBGWk5dKXRgTiVUSUUiUHIpQmxFL28wPWJ2QyR5IjoyTUdUb0khU1YzPl9yIjVoSXh4ai46Z1ROUW1uZUhmbGN+LD57Z2t3cW5UNkhnRjNlbzhJaUoqRjlKQCUhT25LMTo4Ln4sV3tbMlAqSzA2KEU4fmR5THNAbiYxbkdXTklTOEhDelZQOjhvKUhrRVptVXlNI1NGQFBGeVBAIUM/Zk0v''@;'; put 'put ''S0wkNDohM3cyIUB1TTdSWEdTY3A+XTNOKSlDMSojdWpFei5fWTkkREw9e0ZVVWBgX18kTDwyUHl8YEB7NmliNztidFgjVUFHZTJgKGllXWI0LjA5VHNPKXZVeX1afSVeXnJ+TDNHKjFTJEBLIXd5W3FteF9+XSldR09DNGh0dzhmOTRbPCNTdFA6JHZmISg2fj5fZXlgL1g7MCxUfVFSdltPNDpY''@;'; put 'put ''XWh0ISorQEtMU3d3d3R+QW8rd1JLRDYvfVtRZ1ZHUCpKO1IxOHVMJUFWOkVWY3d8JXBhJmJ8VmJMSHBlLGE+PX16KD1CbyZZTGF4Lk1Sd3tjYilUISNAYns9akZMOzJVIi5CRWxKbTVBKlJabGVmRVNOSmpTZHRiXj5qc0pmcjVXPzMjWTBZeFAmN1Z5dTBidlZ7fS42TEh1JnFQTFchfil3Xkk2''@;'; put 'put ''ZDJzQylHSnxnLm9PVCwhJSh2eElNazVzTH00R242U2RLYS4xXkRZaDd0fSwmWXA9a1ohTDwvJmtwSDxVLzJWKyJlQ200OEhUM3x2TXxDQjZJMkhDODwqen5NY29tSUg4N2RINVFQYVFDakVmU01Ic2QmYnEmW3wkZS49cX01YUc0I1YucUpSKEVzU2pTb0x0OUltfihbZjMhTC5QRGZkTzp4d05w''@;'; put 'put ''PXRSMV5uZmdmPGpgcGBoNz5LKXN3ODIsYk81fk1MK2g5aFFPcD57M3Jle2wjVU4qPTBDcll1amxoNld9TXVbPVs3YlIyPTV2cGIpcT92XVQ5R25GMkcjNllyZTFtZUV9Oy5jYDYwazZ8O0RwcChTLj83RjhpYFNfdW5UJDRwM1ckY3FtXzNxTVEkN1M1TntoTCM4KV8pbDpjPVYkVUc1MiE5S1h7''@;'; put 'put ''WWNiZjpXIVVqTE4vPmk5cGBecWVyZ2dmJmBBSTxgSkIkQHhCKHxIRjpPQ2kyam1PZ3hreGt4Nmh6fHh8ZThwOjZ3cV9xZjs4RDZ5aixaZ1g0V0Uwe1hLKWRtMj50dEdmZnl1WGNXeGV9a0NeKz5BO0IxSCkzI0JqbzhefHM7KzFvKi43MUxRcU5SZGQ0UWBzTUkicWVhbDx7VlA5ITZwYyx3QnBD''@;'; put 'put ''R1I/MUM+R0opYGBleWQ2SDlrMHtqMVtbY2ZTQDQwQjc+XTRELmU6Ml1eTiQzV1B0RDxkbyY0cWQjMSlAdDJ2dl5vaTkxKGhnQyFDekpCNSZlPXt1W0RgWUh0SHdyXzEiaXg5Z0Z+UU9qSGM+eDdQaUVUVz17cj88aF4sKn1uOkIvQlh0UDJlcSIhJHddejBrTVc/QGRQRjR1IV9vKjVoRXczRkNB''@;'; put 'put ''Z0MlQmBhTjcxSixvSVc5SH5FeVsyX24rQTRFYEsuRVV4bVsyUV9VTlZpXVJQYylJODZ+JEJ3Ui4/XVleYSJffEgvQVhZaCwiSkZaPFpqVFNNX3BuLFR+cUIkSyJUYzBvQWVaJSNhQXN+OnNxPWx0cyVhU2tZZl8ubFZRbz9zS2o1cXd0KEBLTFp0JGdxKzt9LmwzU1FbYVI0a2NsOGB3eClodktb''@;'; put 'put ''VERfODRbfkA0MVpdOSVjfHUsYzM/UVF3OHM9MHVOQzdXWzEyKlpvRWc6PE0hNj0vMllfRjNub2l1eG8xPmFfKUclYzMjMHk4JTdOc2hfWzNBcn0ydU5SRCwyS3tySDljSXpXK01ndDY0PSwsPTB5TmwpJCV7Y0x0NSkhRn1ia2M6LkA4KVNFLldfM1tufiYkXmY/RSg6WWtoUXxXUzhKXmgzZjlZ''@;'; put 'put ''YmI6VDkrKCZtb2VzTWBRVi9OIl1aX0g2OjIieUJuTW15cyJvaXxJYWhvdXkvU203MkB1ZC5YYmt7Z197UnJPIyVbeHgoIU5LOXRBSFJIUjJpdXBGUENaUChGe0k+Nmo5TzdlRm1nISg2UFp1ciZ3STE3NFB6W0ZHX0QkREB+eitNPitZeXh4fTRCQGE5VjkpJChyUDVLWnV2RXNFRDYyZHZWJERh''@;'; put 'put ''OnlnWV1bc0V+N28lISsmMnR5KEJydj4iO1FxZ0NRVSgxYGpIMm5iQHRlQzdxdEpZS0ZIVnFaSSR5WVk3U2VJS0Y6I1leZXBWWlp4RlgpWTZ8d1RfOFgqaX0oVWMmRkZAfWJZPFljbCwvQzlnN1lvIX0wZXpES0E4dFtCeVRhY051Mi9sZSJsPSNvcTV5dVB+V0dWNGQyfHZxeWk/Ui8vWE5zRC4k''@;'; put 'put ''JjE8ITQoMW8rKG1HYz1ZKG86MCssS2pKPm8/eX04c2hSTFhmNHl9RVIuOiVpWVg+SHZbMiFGLnlZUEYpQFdMSU54OEFYbFA0LDVTVURTVWxSWEdtWXI0ZXJPa34mZE0kUFNDdW49ZUt5a0IyVHU+SXpiUDY3LzdxfiFFdFIlfH5mL0kuOUlmTDF1WE5yMVNjaW9Rd1NdWWtAa0Jzb2p3V3p2Tj5H''@;'; put 'put ''fXxAbHZVPDV1cTg4VWJiQ2w4dy9wJWZTWjJmeTA6WVs2aEwyLH01JDF6TU4vfS9LXWoyU11RM2xTcl9OdjksUyNrUjNifWZtckIpWnwlLk44JWtHQzYkbzBoOVhUY3llbzQ3MjB2dDEoLkRSPXY8R2p9Zn1bbFg3KW80ek87TTRWO0xWXX5JUz8mWW14ezJbfmA2d3JZVzpoOTYyb2ZoQm5ORXRT''@;'; put 'put ''SWovKyNqWlIpNlhZOnB7X05LQ34oRkR2ciloai9SRkxTOlc1YXx8YWBlT2tdRXQ1WGFFVzhPIXt0Smt8dlM/UGtfTT5MZ3UmbHsiZ3kvL2N4X3prNngwJW1jQSJWdjUmVDBKPklvW01ILiZBK0RRYmUpfWhyLkRXe1tLb3V3dzJ+WUJHaHExRCpxMzdIM2hyJUkza1lOZ01qIkN2em1zYkRbKWVd''@;'; put 'put ''a3lGTmRaVDBOcjcpNmg4blosNjRtVX57VzAoYElYLDxsLC5WdC8jPm56UGJ1dzBNUC4kYXhNSz94SCpOJnsrYXk2NUBjR2lRR0w9OGF6M0wxL2lnVCt5QTFMJUgiUCtkR3paQ21XSjd8OixGTWAkeG40XWdYKEI2VDRNfC49WVkiNnF6PDdYfSlxSCE+QlkySHM9S0pPKVM2bzZ8R3RLIVhKL0M0''@;'; put 'put ''OXQyOn5fL1g4SHlyZVhkTmIwdEVqXnReZjp8M1B+YHgrQiR2eXVlTSxkYS5nNGRkKmsiPkwrPS9yNHdRXk4jUk1nVEltaTZWeWtHfk90Vmxta349KHtkT2RSRnxKTC8kdzk6KHZve1NqNUUsYU41USJIZzFvK1tIKFNMLFVJUG1PaUN6NDU7ITt6eGJbQkFCNWgvWE5UIilKYHo9UlRpXUohOzh0''@;'; put 'put ''UV57eFl4OS5COVNQQFp4TEluVnpSZmFtaUtyPU1vKUJZS3RpV1Q9MjFDXV9UJWlsLEUldjZOeV9xXzd6Xz91JE9efU08YU07Ik4paXF9Vj4oSHswTm05RGtCQWR9LCglYHo6P1U4fGhDezphZlFTLGUocCEyWipbR3lyWDkqbVFFeTN6eWsifj1QYSlUYDxGO3hAaF85I3paUGV9aXkjdHRKLil5''@;'; put 'put ''Vm9qTFhML1cyYGguMyV8OlQ2MDwwWkopMVgrUDw+VjJ5JG1mTT9JaFRVNUJqd2tpMz9KLzt8JkVmVDJoVFU1OnVNPnthMHMmfCpCTDZ0fmRiMHh8MXIjbVNJXntJODtxXXo8YnRLanVPSjVLbGNZZXIpJUpTdj88d3RDPENIbD4uWD9KLyFrMHFafklDWnRdYXI3WkNwfEJMIUE9QU0+U3ZQdWde''@;'; put 'put ''OE1uI1oqI15ydS8mUUZtRSZqPklPOENSVVYwXjBhNEgqQm02QGZ8SWlnalVjUmEkKFFFM2xibmcqeXpmM2BKIVcpTH4yK0hQXXByLlo7P3BQKEY4Z3huJmVtXkJhJiRuYnZocC5YS288Z3pOUHE2bEdVNWo+WjdwYF4jSjhNSForWE4yaU1pLEVjei92NyZQI1JUcHdRUF9TPG9qVT9IWTdAcUgj''@;'; put 'put ''R1Z8bDZLMmcjVlg8SExSUVRwc29lYUlFajBsZSRaS2J+fkUvdzkuLGtvaWBPdHMhRT54VVRRZWBrV1QsISN1RmlwSEczNSQmQD1tZCImS299LDcoXUFlcyNVWEtDSV1AMHpJRlVPQ3JRSkhgflZlZkd3bV8/cCxmISFAW28/OEdLWDF0Xi90MEV4QUxNfWd7WGFmTUB7SDdXI2EyeSZHZlQqUkx4''@;'; put 'put ''I15kIyh2SVJYfSM0fXsjPmY3e248OktINzQxPzFfZmpHQUtCbExtWDxDVSJxQ15qbmxSOS9Vel10JXxkdzM7RDRQbmIuY0NtfDVNJEJrV0kvT1ZLZCY1Y0Q4dWAzQihzI2heZkoyX3g9TXQ6OltPJjhRUyJ0YWwoZlpXMncsPU5GN2txMVVOZH13RzY/SiVbJjYqQElTaEc5Pz4jfmRSRlQrIn5W''@;'; put 'put ''RTEjQ105TWlgZE10VkttNEgsOUFoTmBaWWRFcXNeczlYT0JEWTU2TlcpbyZGNHJzeks3dFU1TkdMR2M5Wn5VdTBAPXYwUyZeKVZqTTlmdyY1P3lnSUBnMjJ5YXM/I3d6eVRKNCIkJWlMNXA4W31bWTxjaTB6N29Pfno3cylIeStRZ3RVJjJHTyx4ZWEiTzZ+KGcrXW8iW3VuellaPzNKU2B3VUEx''@;'; put 'put ''MDdVe0JTYUxFL3U2VChwLnJzby8rTlA3KngwZnJGaSkmdWN8LiI0cGxWRFlMSjFFTSYwem0/aHZRb0hoRiE0VH5dSGlmQHVJblRkOkIzTWhUaFhvS0Q4VmR4emFWZENrQzszNzRJSF41LjYsPTxyZm9oNDcyWHVdTlhgPGt7RiZ1e2RPaXZpckVFdC5xW2FNcFhFV207YH1ETmtyW2V1fWVHYzQz''@;'; put 'put ''I1hbNyxaeXN3czg/ejRpUGs/Qmpud01uWDJMOH5YVVtxSyYqeU9HLj5nd0peWEI6MncmdDMjVWBYLkd1YCgkK2YmVnFWSTtJeUlfN2JTJHchWVI8Sns/RD9EQlB5Sn0xOC5vI0lRJVhrJElINHpgISElP0JOVl40dHxTd2dvW0tkMEwpTX1PWnopdGlqOj0rZUZobH4kPXtPYVo5OHs8RD9nM1dN''@;'; put 'put ''cmVeaiU7ZkAodk1fWz9ecX14I3p9I1d1PyhPPFY0b2pgMDF5U0NtV0s3TmRmai9WNX41IlBQM1M9K1JKa0dFVDghTCtQcl0pOkAvblc9PXM7T182KE4meiwhR19dSCtdfFJeaDE/eVBEQSs5cDxTPEhtOj5HPFtkOCI2QlYiTmhqc3JZe25bPEQxb2JWdEA1ZjRYSn03blJ6P3M3KnBbKSw6PkJY''@;'; put 'put ''QVM4VV0kMG5rXyZOZjEuRjZnW2M/MXxyRlUsfEVFKTV7MU1laX16Vjprejh6bCR+UnQhdFdPXXxXWmloZnViOGE6SCwsXl9zdURFcXhjZ1JufEBKTXIxJDldLm8odiZ2O3t3YyNzcT59O1JpQipnQT9wX2BpMV1AaXM0XmVmbzZKKkRiOTImK3YoZ1h6U1ZWKVZoblp5Tyl7UkhiInV9W1p7U0N0''@;'; put 'put ''KWdIaDA1YCU1XVVWRTQqdTJZXyVEJUNhYElFQSFfIix3byw7bFBheX4+MVJyNytTd1JeLiVGLkh7KG4kRTxMPFk5KSUrfn5wKj5bNmRlM213ViFXVW09cU9ySVcrVnVhJktVUFJbVmF8fEo2e2Q5fC9DWVtDKV1RWFcxMTcyLzhVLFNZTyV2dzx4d0MqYCRbXWA+IlZHVHcicm5rK0Ahd3M5JmEm''@;'; put 'put ''NSsmLEI4SVc2Uzc5ZzIqQyNNanFEOSVYeFA8V2plLz4pdmtUNVQmZjl4b2V+Z2dRS2AibHQqbnMyb01CSTkrTEtHZEcqVWAwW288Wi9WXUJGUF8wOXEjamJKajxFO2slLlNPP1FtemN6KmdTbX12VHRuTktOVWE7Nip2TjIzUEo9I3ovUC8yZixTIiZ5aiFIe0c7XS4+YktvVXkoKGZVQC9Ke3A4''@;'; put 'put ''LDR4VUtYUSNlQ0IxMENSdkJUQlBlckpOJkRRTiFTWnEhMjRDUUNVQU9fUjRZQn4hZnhuQ2U9eys6QGxxYCRUO1Y2LGVhPEBFZilLPH5VM05kYCx5YzczeVhTaXhAWGBpeUtDcGh5RFpydCRQQilSe2ZtSGFQZTt3az1tTyohU0R0STtvP0tON1ZwblpgaVpOLzdDNFFZWzJfV2pJPE5kP3kyVSsw''@;'; put 'put ''cEZkez1kKWdRenM9elFBMzpoITZEYExFRFBaIU54fGdGZjBvPF1nYjEoeU8rJkM6VClLISVDK3ZNay54TSY4YzJtfE1KUH5XTHZpTS5Qa24+R09pSjwmW3pDTXBpVTtyLklnXyQhJXdDVzVOOFBkWUErMS9hPj5yJnp+aktVVk88dC93K3FuYkYyXm5scUFaZX1hLmBGIkBqKyxPPm56Wi5EQkhD''@;'; put 'put ''IyYvJkYkfEJLZlhoeXFpKGREOD8mR0Q0RF1NZGRzVXgwZ017VH0lPER5dGdMfXEoYXc9LypqK1h6aUp0WEk+VFNIS18ubiFzKiFqQTxyQ1g8WH0uLGQ6UTRvSm44MCk5O2Q5TFZ4OFNkbXpzdVQmKSQ6fHFIXWtxbkp0S1V6RUBuIks1dyljLnw8eWZYayw3UEhTKGIzbkg5cj1bNC91aHxvZDtP''@;'; put 'put ''Uns9TWJJL0JQVndiOW1RRyVfazklJVdzR3MoeENkdlVTZkRKP0RmQSV8SSoyT2R6dCtXZTZfL0Y3LkRyWF5kKiJnbEwsLmpsUldbLk8ha3VTeWsxNDl6QkYpJmBgQiJMJkI7UXRdST1QMSpoVlRLRC81KUkzTHcjTnJGV3Q3UTpEZGtSOkV+ZWYhdipvRE9kQTM7XywkLzguZkBtLzVNRkRGaV9J''@;'; put 'put ''IVJXRDlVRHkkbHpJI1kwPGxdTzQiaHxFeSpMImJGdmA+aUlaMllYNEIuTW1Jc1A3Q3R5NWMkVWQ6L15NRihQIyNsby5hRSpNQ3AqajppTGpIb29Xb0okS2JEazRoQHFKLEJ6Qi4ifUJHamE1NlIvYCl4U1tPRn52MishRSsjI1dMYjlAOzBBMl9nSFNhfkVaY2ppPVlZa1Escl4jI3dFbEhdbV9g''@;'; put 'put ''PjxucVU2JmxMay9fYmZAaUxJQigybCl8Ji45IXF2dGovMFlrVSg1I1k7S2BzSVNda2xTJDpIQ2tNVDBIJjJqVllNfjs6VyYyIUtrW1JfKnpWZmdpezhARVQ1V185YTt1cXRSXlt5SHxabFNzZW9hRTMxJElJMmFFXzJZTE9Fd20kKHwpUWp9IjpAImtsTCM8eUs/WWIjIn1gL0ElZzV6UzhRIjtH''@;'; put 'put ''UitGSDtacW4zMz92MDxNbVhWaXNpSH5iaz9DfV9QTm1zMiVZYUBQaml5c1d4e1o9cFR8NTdrQEhgKSx9TlJvXmArKll8RFNlQ2VRUzhVfX1RK0trIytlUlBaZmhrTFo4W2UxbWQsW1hxVj9VUmJHcTs9RVRoRH47NndEUUloIX5YfFYlViVCOTwvbXJoP3cldHdJRDhdRnZ+ZE09NV8ranwqI1RQ''@;'; put 'put ''bFApR3BCRzpYXkdlNFYuTWdmOTlEIkMwdWxkRVdUYm1taUolS05+bntqWXgiSTUlKGAlOFpdPD96QTgqZEg2aUxyRlFfOCgkZE1BO3V8ank9QFtGYjomJjJPdkRRdGFgYzpDW1lYVzAreyFESj41WzJJXjEqNG9kSCtDYX1DYDJeJEFZcCsrUHpuMSJAaGIrcUNfY1t+WnJoUXZqflk/JTU3Sn1m''@;'; put 'put ''Wyg5KFk6OG9LeCM1XSoqQCEoTSRUcHQ5cSpqRjZfKyYpZy9KKj1jWiJyYSJHQ2dGTl5vK2VXZTcyWn00TXB+bEtgTzM3KjYlKmBiRWdibSk4fnFBdyojT0pwTyFnbGlCcD04JGRlOHh5RSxZcy5pMmdKKVJ1b05heDQ2clVmVD5zWVsjNiprLFBbY3l3JTc6cVtrIzY4VHEpX1cmTSYlU0xIOm1h''@;'; put 'put ''MVJqN359VyF+YjNEWXBiJEhDdmhZNUxwbXQ0fmNJfVNhOVZjWXM5cEVYM0YzT0hqdUVfJiVJRzZXR2FXODtSZD04WTM5cmllIjlrXj1vMV5eQnV0ZHFgUEhsaEMxW2J0RFk6VCVae24udDAkJW9SXVNzUSg8QjM/QiVzdlJ8akNSc1d+YjtRPTo/YEBKPjEkTXgqZnQodWtOVmIzXzpuJitVQU1q''@;'; put 'put ''YEUpZyEoWnJBcGtoSDVmOWR6eUwsflZrUUZTN3YwW1hkZz9iUXVhalRRbDhSaD9eUDBYRi5nNCFyRGJaZys0QlhtVyJdP09gUCMwYCgrY2VCP0MqcyMoQVMuNXw7PldQW1pBSF9yYVp6IjY6VkBudGtBNiohXlFZfUljMU1TdT1QXWlCWWk6cno9diNeTSolTnJQZ0lGO04uUUJDKnJHcn0mS0tY''@;'; put 'put ''ZkpjMHtgc318KyppUnR0cGt9Nnl5cHhJYVdlV2lDWTh2NFd6aVM7SSVmc1twY0tAWGdyKXtVKSxAamUrQzRsRzEmaipUdGhIaXl2PUE3LCRqfWQ3byMoJE9HVk5ZflQrZGpFTlBVaTBAfD1GODBjPlt4PjNRJCp3aDBPYSRVd04sRCRxeV1ELCooaH4zV1h7I0Q8T3h7ZDpmPlNzKShva21wRmtU''@;'; put 'put ''KFsvJEYkWjElW3piK1J1Int2c25kZkNJRylEcjkzN0BUbzBYXnpoRFJ5TXtzSGs4dVhRdGw7VFpXY3YvQmVOU3MuYGs9UFZjKTA8RVY9dG5NQXkmW1pfLiFrRzRjI1h+azN2THEiTj0pQXAzKStjSGRvMChoLGtlOj8vSGBnR25eSlkvcWNMWW18JUwyczNJMDo8SjE1aTU/VF5oYklROixqIzFB''@;'; put 'put ''VGo4L3EkQDZIIypQVWxbO2VlOG8hSklzbzNde21AR2FnSUFHengkXmJPJUV+ODlFbHxCX0VSYiY9JHtwSF5eLCg1Uyg+UWVNTnpyNUNEYiMjck87KFZgTF5Ee0VtLGNPRU07W1I2XVAsSSVRZENaSmVZP0dPNH5ITGxuL3FqZmssUV9gYSQ1WDZtIy5sTj54fV87eXElZHk2Q3NGeGpWZ19wemc5''@;'; put 'put ''SmxYdjpUdnZtPmdtZjlscz5vOTk+cD5FLEgrTjQlJGM7VDB7WC9+XX5KOERCXzIiIiVyWGo8MDMiR2RwOWtPfkkpYXpVVTciOjtZVjBJWjxIKGc9Xk1jZn1HclphK18zRiRaKEc8U01edS82PXJQLjFMTj9ZeiIpbTVLKThfZmV8UjB5XXIrUUhbO2xnUDBDcDEqR2pYZWNVOVVga31QLHxYJW8i''@;'; put 'put ''OkU9JDM8MXhzbD5HUHxkZmskV1BofS9mN05TeztHaGRCWnYrYEFhVURoI35VNjNXWm1DS2R7Xi4/aHgheVMranFiZ3d4JEU6WkpOblVyT0chWG4pIVg8dllufUYjNUxbfGJFKlc0RGJdKjpmKkpYOVk1dDVZYlBEJV10XWpob3B5ZGRJbCxaMCsmNDAkNkhGOm5VfjIzVTVIZ3o7X0BsQiwrclZ1''@;'; put 'put ''XTlKKC91P19WbilsSiMzVG9PQERMem5uR1NLT2A4REY+fEI3VTIjRldUc1phbldbZX15Si5+MkJ9UyFJO1NAa19qODp9TDNqeGgrWlRJO0BSOk0uTEVeSkw6Y2ZsI2J6VDx6dUJkVjN+ej5bUnRnR2k3PTBjR2QjazA+SkVNalA1eytPNktCOmh8Z01Hck4xKHNPdk0qQT0qIjRXWE55UjcwI0pu''@;'; put 'put ''fWtEa0hTN0soYnJ7TH1JUGs/QnhkIXhUTEN9VEg6U0BwajFSQjtmJkwhdSIhTTpnUDlRK2tOLFQlJTMwaUJQbGFMOiM4ZTw6L0RqSz5lKkgyKHpEc0xDInh3KFErbUhGIVY6dWg4enVTN3l9djZzWyFMdGA2Q3h2M0BHejRTdHRwdHMjMkUyN2cuXXpubjt8SlclckQ8T1JmZV4mLFFzbzZWZGpJ''@;'; put 'put ''NjJzcGxUOT5kJDVuTEdCUnglI1JWTD9JYlU1Y0NlRnk0Qi9LbmF6YkZlRlZ8KSFjI11ud0xsdjhDYnwvLGdTWGA4MFlaU3I9KT5pX2I8ZD5eS0IsTzo/SDBpWnY2RTApQktjL3kmKEUhUzR6Ojs5VX4iNC5rYz8oLE1eaiU4dCkpJEszTWNvbzw/RXI1IiNCdG49ZnxoO0duU2hKQ0w0Un1UeXZ5''@;'; put 'put ''KGhxOGhhcnVPd317SDEzOEZ1e1F9PEp3WFksXVQyc3c/TGMoP0ZTdyl1OVY4Un02Z3MqTDlvOSUpPSNEPTt+I2RILC50aEwkW1NsbkI7QTYiKEElKkdla1VCSnU/TXU7LikvTkAhbl12KT9bKHVdTFJFb3MqXjxCbEo/Yjd1dk9seG9eJWMkZ1Z0VHAyWHZtQG1yS1d6KklYU1BAajdOY0JYVWol''@;'; put 'put ''OF5FI3IhNlA2eT1rZmVLUnolSkx+S0ZqeVJ4UVg3JENUeVhnKGVaVmJXRXZdWG40N2hxQklTUzphdyMzell+a3FiaU9JJFBOKFQ3JjZ4NztJMkYsej4rdTRKdiJaOzQrfmBKJUhUc2UwT3tAc1ElIm9dJW07WFtGQHBmPDxSbUptRWJrWzh9T3JjY2p1Nik8cGk1dTk0aHs6KEJ8OUl+MjtLdj9a''@;'; put 'put ''T317K0V2flZfdGM3cktDKHx5UUtnIUdAa2VYVl1UQWcvVDNKMk96Xlh6R1lXfShjdVFIfHp9dnUpUCJZXVNrLztKSDhgLj9XUiF7eEFkUzFTRnlvZXF6fGg1MnZzWUlQYW1ib35hZiYpZXViNDtedU8sUXVaYnUhfGpBY2YvYnk4JSEyQWJARCVKdE12azJkdn1TZ2pLKjA9YzlRcD09eGFXKUgh''@;'; put 'put ''OUpUcm4/I0NbUFdVc1ZZVXdJNjYmSk87PGElQEArYU5pJUJpNTlSens9ZFRtWUY8Kix1NDc6Z3skczo/SChaQnA2NSk8IVAxWkdgSEJpUERpKHhwb0NXSDtzYyxRZD9kPzReOjhuNEhob15BNCJ+eXlYNzhoInldNl1xSTFbeTN4UEtGPl0/Kk1zZndTSCpEUDc2P2d2JUVLJSpreEpCOjolNVhZ''@;'; put 'put ''ZHNkalJPXjUvcHUyWDxPPix3eHo9bkdHek1ffno3PypOSmt0M2Q3NCpdWkQ1UWhDanZaanQ0PHttV2RRUDVIOD46LkRGKmNLaXlWPlVDe3BPQ2s/UFVlTTpJXVchdHVabnNzanc9c1hEQHVyfX13eHRefT5II2twVE9+Sj4vRkJqOWFhQ3B0RDVfOFZicGxkZihET3lqd1dwb2A0ITRyITk2Z2co''@;'; put 'put ''Vjwvb0h5bnZuTWhBXXdIWiZaSHFnPipLKSFWPHgiUCZ4eiVvUVAmWSo8MSVBfnRpJEt2O0B5LyU1KGYlUSV4UzFZV0psOnIzUT1gKDdeN0R6QHBiOXcvTWYqayp8PDJDbixLdVpEQzc5LkFIVEIwP1A+bThZUGI0KGlFUCRoaSJBRyN0czpVeTNCJSwsQ117eTUyfFNkKyRofHRGVSUxZltwSHRJ''@;'; put 'put ''JVZPSDowXTA7MyRCK0lzYT50LDxvcSZBNVsvTXRke1k0Z3NXJFUzTkxNQmptU2hkNVhmVTNwb1I5PDRgQD50dylTWjIoPkduaTVtZ15dSzEoRUBheSY8Jm5mc1Q8flZQV2xHNW5CUFhNO0NgS1EkR3lrSyZUJXFwdEV5IzldKCk0T1hGaWZwd2lsLjQrUyglcFpqXmk/In1aPmliU1F5aDtmalMl''@;'; put 'put ''MmxTflBtW2hEVF1WYn47N1FwJjwjSk96NXBePGY1RkwlNEtYP19gPldiZkJPKVlUcj1fa2tjaixULjkqfHU2S04jUjFrWXx1LGpsI2F6TEkyLmNMZkc7TlArOCt+QjRjSGJvPHZJSXJMOSE/dmg/T059UWdgPUZ7Z0VaPG5OUzk1cTJ9PD5HQ08sKG9ueSpMbCU9MmtfXWI3PTRrTl8xajs2eSg3''@;'; put 'put ''PUhWMjAuZDVHKnY3SEgxPl9CZ0pgP3Z6SzMifjF0dGlHI018NyFyOEFDQWlwLHNEaFlBYXE7YVMrWkFfKHxHcUI7fWVfK2dIYX5YeV5xfntaQml5JVIra2JfVWBYPWlmcV45aSRHWiY+KmtPXSNoK0RsZylHe3M+QjxbOmtlWHs5emIiU1AzIjhgR29FNVRPVU5QKyxVQiEuJTslPmhLWDNAQClj''@;'; put 'put ''bU1LPiVtc018IlIxKnF1aC90ZHkrcHROdlYhNE9lQmtdVWhRQnY0eUxAaUdpaCZlSEkobDtpMXhZVkdjREllQmtUNGFvX3MpeER7S2BwRmtndiQ8KlJiZT5rYFdCfXpod1peMSk3MT5NQD9nbz9aNjcjTjhgey5qQEpMZFR6SWRvOTcyR24jP2hmSnsjej97TmkpZXNMaF9vKEBwUUs+I0Q1dj0j''@;'; put 'put ''NnFvIT9yMD42SFt0RHwwW1lxbSV4YztXXUkhTWg2Y3N8MCtGZmBoaHBFeG9bL0NIcCg3Ui93IzBqdH14cSZvKlhXPWh3LHtOO2JtMVdmNEBeQHZhRkROeSJ9cjhvMC9MeiQ7U3FVRHlCWGY8U3ExNztCclpeeFdhQC98SG15QjFBTUw6Lj5YdCg4ODFlMVZ5clpuP245JE1jYHBmdUdqaiZuRStx''@;'; put 'put ''SVd6WX1rcU48JChmLGhse2tfJmBrIzVxJExJOnU6TjBqYzZrLC5aYypDSEJAL2A2VHpAX3wkRSVYNW40b34rWHp5OkxNN3dHMUUyUWFqb249OT9tU3tYKmppTXtDSl5oT0o1b19FbTMhdl1SezhNenBjbz8penB5dEREQ2s8LiZGLFImIStPI3MkSVJHUnJhfGhebFhncE1jWSo0YUV1anduQ1NQ''@;'; put 'put ''XUlFYU1bOnliTltBL0MpW25QeFhEWjdTYig1STpNQXlTckF8I1JFSHdKdkk3OzNeRjVba2lpW3F7YSJhK215dT8kQ0ouNzAzblRYZklbTHY3eC9CdkssWnxZNGZ1T3hYI0FmOUdQPUchOzBeNGJjZWsjW0hmOSZKLD44Ym8+YHY1RyszRiZYZSkvOCl6JXhsVnVvWENiI11rK3krdFB0Mil+Xm89''@;'; put 'put ''RnViQk96LEciPk4sYXUzRTA5UChWdDM8cE5+a1RwTmBZbUJ7ZWZAM3QkXlhNc2FIWD9AW0U9R3VyaGEiRlRqMGNkWmtITS5Wej80MUFENWAsfnFRRyU0dXgqWnIiJXJKJHxlVyUsOjFUPl9BRCFMMUlbPzBFbmlGalFoRFRzaWtNKFRoaT11PndOVm11KEA0fU88blt0bTdGcUZZTTxIbltjP1JT''@;'; put 'put ''USpxbEFmazo7VH47Wkg0OzdZRlg5Z2hqZj8/N3pES2FLVnRPb30wd0lPN1BvbyxKS3c9Kl5KYk1KaVMrSX18Qj1CZnh0QHM4IiZJJHoxZyo2OWdJRm15IkR7Y0plOjl1VntbPS4wZUomfUp4OGd9K1UvKHszZn58IW09QCFlLHIlTXZdQHF0biN0Pztze2tZS2h8TyNFelJ+N3BJVWFyTSZeZ1sz''@;'; put 'put ''cVZPVmdCMXl7YlQ/UnBLV1F+YE9xfGwlWEZSZEZgYl5bYkYjTU92YzdrXVYwY24vZilVOUJmdWIhNytMOTgvJER7SHohSGNhZnJ8K3V9ZEpvUlZ5WVFWUzMhMjBrU29pY3Msak5jcDJ7cVh+cClGd2h5PyZXUjp7Kjg1c1ExaiUqYilSYURFN2RRYDRhenpwXWtfSEdZN2peRyMhd2xlbl8sbHBu''@;'; put 'put ''NDBGYThtfmhQbGl5TWlPblMrbkBlSTUwVnRIX2h1ayNNdThLbUh1dGA3cDlUcEA6UGxAYls8U2QlOV09fG5eJT1WZnRyeUBqMERjUCl+UV1OcV44K0p5PW0rM3ZeMHwuOFpgTEJkd1NmZE1zKFl2UUBIN2B7ViJCKGVuUk5NMm1qMXlsUDh8NkBicWhbc3FXKnpEdFg5QU1dY11+Um1wNWlKIVtY''@;'; put 'put ''NjchKk5FWHNNY1tIeEE6UzVReUE4czFHY1chMmtIODplb3hUVjQ2Nn59OW9JZWJuL3lSWUsldTZzaH5+YGQ1W1pXeCQwa1FNfWR4Q1p0fTpFYmh7UWxPVyYoZWd1R2ArLktkQHFPK3Q0eWguKUljSTNJITAlbGNaNHw0eHNuZHM1WWl3NVUhRys1KCFCPGtTTj9nbG1fKXBeR1N4O2ZlXzJsUVVA''@;'; put 'put ''WWF6bzhWI3xPSj9BIjlYI3g5I3xiNXdKXUU6MlhoZ0dqenA3b09XIWB2ZyYpUFYrPXQ2NmBEPzdLaX17VU9ibHxlTG5HZTdpflJRM2lnVkVSNXgxbkNiXUFtKiN8MzhDd3FCRU9pZV1fUEdSTTNOQ3pXPXc6bE5ScDVpZEwiT3hGQkR4THQqa0hreVFwPHp1aU9sI11IclNdPndARTxVJjxoL1g5''@;'; put 'put ''MUFlY2kiSUo0WixxRTI6PT5sdW5aSXJtdVZzRlhgXm5HPERbZGpTU3dBQj5FPVVfbFFkU35bQH4ufDRrdHQkeCFVX19UTyJ+bnBSI0BtNUcwSWJzVyMjKFB0aVUzLjlXcV0wOnIqUkY5RzA/LnFdTl1SSjc/UzpgQm8zZWl9O2dpIVdMZDp6NFtBV1Z8cXtAfkBuYSI3KnhacVAoJnEjcnU+bCx7''@;'; put 'put ''fDN5QHhteXMkXjUlfG8sPnJzaS97KjtjN1QyU1gpTlc9YD1XTz5RMGJeQXtQZEQ4SHU0U1lyJCZFaipOcFoudSoqVkRtQGg7KEkpU29UISg9c15tP1BZOTdjTzBRUX0kZUNeMnZkQ1ZeOVJEVWx8Uy5TK1BteFRKMWZAVCw8bFluYVJUVmttKl1ERUs4ZUs2OCVCfjB3TmtnU0lVfEZNLnBhTWBh''@;'; put 'put ''K11HLjN0VnNCaVM1MW12NyJXM35adClXUiI3OE86JDFDYEVqKTcoY1VBJX1BXlQmdkRMdjEyfHs9OkVQQnJrW29tRUBtezw4Ml0wbG11MV4yXjB4aX4uSCZCZF5fSWtBfExzZnU8WUhSfj5hT2J+dU4jRGNeMjRnIik2L3A7NCtuVUxtWTZ+PC4sbXp+Ql5ZQz1QSSY0N0gsZyN2fmE9big0akNO''@;'; put 'put ''TnNKYlppbm4oJHRKdUdqW1I5KmR1fUV7PSZ8JX40R0Y+KGs0YiJxQ1tlL2NEYSw5JSlCIWdUX0xTJUcvfVV7MkF+IjRPektkN2khX3lYZTtYKEo0fk48Q0sxV3FgXyFuKzI0NHNvNltIbW8pYDtXKHEwPkNpNnwjRk9CI3pEaXZIOEA/PEs6XkczaSVTVHNpbWV2OWdAZ0MvXW51TCtnazVgUj5m''@;'; put 'put ''S154PGxydHJsIzVrSX1NUiF7Q2JKNnJwQEB1YFJqTl04N0wrdjRwW0ROLDprWE9DcHwufGY5MD86IVkoOjEqTj9wLlhEJDRUZkl4P3lJXnNreElLIWFwXmEyRXpIP15OYyJhOXFjJGtJUlI1WXY+ez86YixXYlF+Y3ZQWHY0cUt3REJlUzEmPXVIViRwQkZwITl4dE5IM14pNm9JbmlZLD5VRE1x''@;'; put 'put ''bnd8fDJOOkxpVlYmUnZwIWNnRi9bakpJVVNvYFgwek9oMl1jL3VxeUtbYVA+KXduR0pIaWZtdkVJZyUoKS9IRzUmZGUmNmB8a10sZ1tDR08kO1s2bywkNyFPQ2xLc2h1JXYhNnFmbDA1aFRCNiVeMzBlIyJkRFVdTlh4JSw6N3VYajQrY3ZfYm8hblhuX1krViw/TnVKYU1IbHtFOSUsPDJ4JF8v''@;'; put 'put ''NXAhbStAZHx+SGZhKz9iKjdwQCZ0K3laXUVOZFF2WVJVISt2WXgrYEosdyJqTldJZUBvQCZFdnhtQSpdQTZYMyN9OD9KIn1kYFMsOj5AZyQ0NWQ1cm1Fd19CRCMxUy8rO0Zvem0yRFdwbnorTXNRP14rPUQlUTYpUEVqOlU9aGwmLC5KZCVdK09mN3hUMFQ9TkJbMjc8VkQuWXFTLmMjKXcqbldR''@;'; put 'put ''ZU5iVVZ7NDhMLDgwbkA+JlNxfn5qSVJLOzAhSERVanwkN0pmUzRSNGRkQ085OWJNXTFORT52S2wraCxULHlaNVBfRGo1a0Q9RkUkby4/NyR0RHg8N3tBZzhIRm1oJSNgfj5iNXJtKnJGPjRCbjs3JkY0Xls+a28qWCR7eCFDMS9KeiMrV2duaCYofWNrOThmakRYYWJOeHk0JlI/ayw1fTV8PHU5''@;'; put 'put ''SUtGOnFfISJQZjY0WD42cXg7R2VFKiMrOiNdY1l2ISZdaWBdXSNaSltjWE1FLzwrT0d2ZHJGOWU9Xm1MXylXfFg7eXhHe3tyT29sNTZjTzArIlJ3NyZTY2ojdTd4OWhbSyQsPF17MlVvKnhIKC9sLn1VVVJYMFQ6bCk0MywiNlhyLExQMXVFdiVOekt0YHNfQ14vQThnKSwvYVdVdF9XImUqKVVZ''@;'; put 'put ''MTQjWTtUUXpQO1ZNMTo6fmAzQXRZRWR7ZmppdSJvblJFTzh8OyFUVU4seU1mNFNiTl5ZOTpLej1XdHtXbC97OUUlNU1IQCFxR3NrWWN4NzF8XSNwSlRqVFVZQzAhM2BIeiNnNUBLQ2Npa0guZ0cqeCZJcnssbU0lIm0/LytiTSVhQntYQ1tFTGBAaFldNTguVHFmLC5nOE9GcFdKZy42en14eG06''@;'; put 'put ''UG9EXlpPMEh8TUt5QnV6RlJpSWF1XWAuNDQ1SFlCdVRIbXl2dVFJQU5mZEBVTCVYNlZAdmVGZ1EpO21YflJUcDZiPGdJZUBNclc4d3d7Zi9yWDtBKHBLTS5NSHIqZno9NCVeTF1EW0Q7WGBObElVUCppPn1vPiwpYS5FQShpYXs+cF5zR2NMVFkoIWNBJnF9cnIhP3h7YFFyaTA0QGM3OnYscEh9''@;'; put 'put ''Lzc/aSUsY1oyTiFnazMxPj4sW3owc016QEV5TmA2X19oNHBofi48Ykd3PT5HLmZrPlouN0BKTExfbSJ0UHQhZjBzLEleMD4qRlAkWiR7flMmPT5wTjtOXkRAMmslfXU6fiVBNXJqOiJ5diJuYig4XSNyMzo8WU9oNFJMfSVhaVROUGsvY1pYKTxLcGkxdWcjVk5qWkh7Ly5IQ3k6XlcufWgubT53''@;'; put 'put ''Mj8pb2Y+K3c9Kk46Xj9jfEkjZUhnOEtFITsrKGJ5aEk/KCJ+YEVxV3EmYlViTVc0cWUoNHc2MWwqMG9xYEVIOzsvbyxzRTFyZnhINXM4M2lzOXMyOjhxTyJzTng+Vz5ma2k3IV0wfXU2aWpQbkw8VV8mK3YvYHlQMl9MaSMvUzRUIi54fF1GZDNQR0QuTW1ZQ3FgejZTOjhOPnZDS1JVVShIeDg5''@;'; put 'put ''RVNROnhDJTteb3ttUipxQlorfF19a1FpV3J4THt0flpMUjxKOk9KJFo9M2IpbDFvSj9uKmFHPyZDLjsyTCRTVDw9PSV3b1VMKmxGckkqSmp9MltYaSE7YT9DI21Hbz1ATmlXJnZbP3QxLk9rZHpfVEVuRT88eDxVYmIoQzJgdCZPYTUxV2JSPT9eTEciNSZwQ0JyNTdgIUtrOEFsMmhPImwuNiVh''@;'; put 'put ''YTB+RSMuNzM2alkyeWEvUG85NERLdXFoUiZUI2tsSmMre2plQDV0KjwudEw3PT1rKjIreGgsIyYpYFtdPU0xOnE8ZEcvc1NGJDIoWzokVHg2VkVFT3JISElKKFEjN1puRH0vUWB9U25gRiFrN3Q8RVZwc2dTKmlxOW46eXZjPns+cE0kPGgjSHt6WCNYKF1CdzlJbkZSWlQpUk59KVBOY2h1KXMl''@;'; put 'put ''V0c3cj9LRmN6RTFCeV8lUDBTdHlgXUdVYmJsaWFdOTw9P2w1JU9IbTFhLnl7Tkp1dC8pWVt9TyheMDtyd0k7Z2w8KXl0aGtmZndlWCxpI3IvfHZVOX5zJmdSP3J+YXxwfT1PY2NBaX1oVERKSFNfS2dQNkJ3P2Z9Vy9fVW51WSYxPk1GVXEmfm5EXT0iUiYwVnN5Zld4SSlkY1hQXUt2TFM4SlpU''@;'; put 'put ''RXVlSmlDaD9aQ1tIfmJGSDVBJTl4PkFxO2xQMVkjM2N7fkg5RHpEJGYuWV9nOmU/VGMhOkt2aklhOjM1UlVDVTR2Qyk2eE9sYCRFZTEkSDA3XmN2Tn46fW5mdjJQW01SdlEqVip9YlFrJUJWLG8kXSQzSXVBXW1zenExX3w0VCtHIXhXa2dKQkJVYS8wPnJaMyJde0p2M347Xz9dXl56MStHbXhD''@;'; put 'put ''Ris9cjt6S1oxQzZWJDA4OjFfSiwkMWl1MV09LFZVRTVyKG0ubFI9RG4wc2hmPnMqcGYlR08seihCOypMa15qRDI9dkRZa241U1hNRSt2X35CWD0/WjdSSjVMbmtCMlVkZSk7Z305S1FGdF0+cnddUStmUFUqal00MVB1am1tb1ZCbntBV3smZWVlTV5tbXtAd2xLYGJLZmM5Q19Pb3FHIXovcmt9''@;'; put 'put ''c086dCY0SjZhP19pT1QiL21LT1ZaQkU+bCk4d0hOXnVWWTJLSHAkU2ttKUgxcT58NEk/cmNFLEBjRE1waHFpPTx1TzFnfFtzOHs0NHxLW3VJd2Q+THd5YExSeXtXbmJpVCpPL0hbKntWUVBZfGFgOyRuSjxpL2NwPyFFYzdMYTZeezB8V0IrNTB7c3ZxLGt7M11YKktkWWhSOjxeKmdBYVBoUzkw''@;'; put 'put ''dGtSL3wxSE5ZK1lxJDFkNyxWLkt3Y2hOZG16U3FzfT9RX1BbODwvSk1Ubn5NXWB6KmQ2MmxVS14rTEFoZXUjcUNKSDJJUyRDVXEpUjokKSlSP2ZbWDIyYz1HO0l1KGBTT1l+bj5NRS9HYilwO0dUP35VQV5rPn5wKnBDekkreEJrWTFMR3JnX2pTO3I7X3lmbWRTaG1Cb0wmQkhHQUNsXSh4L3x8''@;'; put 'put ''bjlZYUUsRHtbLEx5fTNkPmA8LGY7Nmh2U3tTQnw+VGhxYFA9NT1mY0BIQl5mc3J6OX4oSkdXfVJJMz9SNGwkKGhQI095LCtSKDkkMnM2bVBZK3VZOFBabDNiOXY8JVZbRmdQOzQ6PkBhQkAsNlZ0NWNDLlAsQD84alBnbE5dJDwlRz54I0JDbG9MUCxHbHhIMV5Zb0U0M1VdNUp2SH5FciZEdiJH''@;'; put 'put ''bGpNfTlzJkp6eUJgXVtJUHwlRzxFQWFdRmlLKGU8KE1CQlBnQWxSZSJLc1k5WWV2TnkxXkEiJW8uOGRNYmRwN19Ud2lOV0hHZW13WmQvOEpOOGBJYTMkdyNzVWlGaDdKPFVtTzFmWEppU2U2SmtdXyx5JmE2e1BIaVFgcUA5bFUzM0UmIihmKnw5bEZ1fFN3IyZLbChHeDczbDN8PHAoQ01uWFR1''@;'; put 'put ''eUUzSEMpXS9zPGNtcVNvaCYyRDx3JjJvbE19fjR9SXlIS1B7YWFjWyI8WTtuPUQ2ZE9dIzpwQUBGS1tzNkk2VVgvTl83VkVZUWVIUjB+Q0A9KFs5ZSg8eTQ3W31zI1dVQFJTVzVHc1NFOjpKMD81fEw+TV5VQz9waiFHYHFVdnY5LDFiJSVZbmF0fE4jQF1iO1lkcX1aOz19IkxDUWZ0N3YvVlI1''@;'; put 'put ''blQoMVVvLHdZUU9mLHopPkROOFE3YyZHUkArYHZoaGwkeip1e1ElPHBfZ04ofiEhNXchaWMibkk0cyJobzpidEh0NUZzdnlxNH1ZO0BfO3IhN3FCRX0+NXJwWltfdlRfd3Q6SWpuPSh1c28mW2xJOnMsJXArM2RnbE05PndwK1BrJH4la19bUFhjeyErPlpadX09QTFxd1FRKTEzJUwyJkdwblEx''@;'; put 'put ''SFRXMDlrXiIjS2w1enJsJFdGMlNiMzslQ2NGP1g+M24kUV9nZmI4fSE/QiVlO09HT2QxRmN8flAsM2J4ZUk1IilrOV9+REpNQE5odF1VbDh4T2tBUEozUl9kdjg8PjdFaXtySXZSW2dMajNyWTJhOVd1T1M1L3ZVJXJvRzhxdE5RalFHdjA6cnQmUE0zYXkla2o7dCMsYGZQQHVWK05qSyRaQFl1''@;'; put 'put ''SiRIdCZ9USh3Z1U4aT5JW3l5VGM+OnlTenFyc3hMUVBIWDVSKTF4YzBvaGxCb0duaHZyUCNTVFRfU3ZoJVp0JDdOcHZ3JSRUU1ROIVhNN097ZSFmPEVDTCxvSno0TkdufWZzSn0iczBpOio/bUJVRnI4NmMmMVBpUnopIWhmW2crQ0AlRn1VOCE8JVZSQFg3WW9pcChrY0dRWSx4fEgkeCxSWkZM''@;'; put 'put ''PFlYREd7OUo7RWNkP2pAOi4qJXYqPHRwV1tidHtDU2I9WlEoSXNJM0VaMSQmYWNXLyRdPURGNWE/fkdsQ1AlO10jRU1MZDpbZk4hO2NsVnt+TTcrfmlLVzxQNDxHZCpwR1g9ZXZ5dj9sZ2cieHp6e2skNWkxWSp3cTBaTkVUMkchI1M4OSI2LnltQjxXaDBINDBuNG1nKHVgUDxFajk+Wml1IUll''@;'; put 'put ''V3RCI108YWk6VzFvVEEoLyV8bjFIdlFbJTt6dU97QUIsam5+TX5EOn1tQVg1SVZYK1tnfGw/W0hxaEs+JXwvKzdnVEU+c3khXU1LRGVxNlZfezhQZFA/NXVTN1RFNyVzVl86SVpbJUU5blVOLFElX19eSmZQVm9wZnZmQnU/eSRDUV5PaVAwa25TYlNkN3lzU1plZiFTLG5MSWw7L1lmYjpkZmZ7''@;'; put 'put ''TTFMOjFEJC9AfXBXKVd9aHlxYixQdjI5WG8+MWk5ayh2Kk1sWDVnZHpSZm9RUFNMWSEsLGhKdHBhNyMjanZwXnBwS1MwP1NVI1Z7VFlIYjF4JUAvQUl4c3dCTWREdDVreSZZLyxzMUJQSzZ0Y2M8Pm1OdjRdVkgsWmlVYEY/YHhdZFF7JFJEQGo1cFUqZilWLDlsJH5hY1RPP2FDSmo0cHBQal11''@;'; put 'put ''dUVwKVgpM3gkYnFoOFlRPTQjO0I8QWFSUiUlOloxak4oSGt0ODxGLntNfEZAL29CVU9wcDNuVXk/Mnd4bXU8JHUvIV4idnw+UFFwX29bb31KYE4lMUV3cj5iKSFbIVs7VV1pcUNUOF1QZTdOXUNePTp4YCtUJDVVOyRscT1PTS4pZ19UXnwrPypidSooQldLYHlQR2p1I0MlVmhFclRUP1ZXP3Mi''@;'; put 'put ''P1pjfF1YSHBZYW98ViYrYGwkaC9nPUYqcVk2YE9maTI+fShgPnQmInRRX281TCEqW05xb2dDN3dPal8yPm9yekxQIS56dT9aOG9udld2Rnw0e1lobnBQenk7PzNHKUc/bDNqe3dzPVVFQk5DPnQ6bU1qZWNlJnYrMl80W2VDUGpNLDRqXys+IkR5NltLL2gpPjhQYDNCYmdmI0JEJmlfMFUrYXJ0''@;'; put 'put ''YElZNjB1PnBYRE56Rm9SKjwkIVBMbCNnUSRfekFlMjc3Ml5ZfWtCOUhWTX0hZjJ8ZFdQWD1HOWBhWkthfUR9cj81WkZ9a0FMYldOYz57UlZJOkM3VEtBOVN9cX0xWSp8ZDdWaEVCLHZwRzhOWkglRDglSnNdWF10JVpxNS99UlhkV345ayY0e3M4cnUubTxqeypRLm5nJUg5UXhyS2gpbW9KcExw''@;'; put 'put ''JDNLS1tzPz8weDlIVmY5WH13YXs3anAhcEVDYiZJRyZGVG1xZU1fbGJ7XzJeTlc2SWZsZFBFXWRuR2d7OnE0RH57aT1kVWRfYU9mVkZ6cS9lKjBWfCUvNGVnPTVmOmsyUXVXdm5eejxTWzR+XUE8SVU0XWV8QDRBNzdOWUNwe1VqPGA8eTVKNE9LNmF9V0ozRzJRVGZhbmk8VVZ5dTlQWytoVXQy''@;'; put 'put ''VWAvcDozbEkiZWdabW1GSiphZC5RUipAOCh+KU0+LnlyS0QmQS8qS3RkOltyPX0kKT45dFhbVDMibXhsb1gyJn1zdzY4USNJRixHTDJZfmtXeWVeRDY7SFBfdy5Td0FVMmpHbn1JaXtrNkdpKzxfKk9ZfSN5MTF8PyhJWFcrOztKPDN7Ky9qallEKzshXmllJT1xNUtjQ2JyaV9iKDo3flZFbHxi''@;'; put 'put ''NXgoZlB8TVh4NlF4cz5TT3A8Ii5XP0khZjVyeHo2N3N7eEpxTiVNVFAvfXshVHYqdnlSajd3UFkyNzEpdTY2amBiTHBFZWNjR35PKWtQWHg2Im0iTWMqOURUIVBCXzw7Qk89cElDd2pWej5qPiRRfDhgWWw1P3hOI0VYOi5jZz1WbG19cmA0ViJLJVBpLD8qR3tXY2wqPHtGRjszaUhzYi9LK2k8''@;'; put 'put ''T0BZWG0vK3M1Yj5JYWlPLHh1TjlNZXk8P1l9MV54dl1VcX5FcyZXMz1rIShmbDRrYGlzVFVYYEtKTGJkQ18lYkMxI31FP2BwdS9qTTAkRixlJCMlSSRqPUVqIWBEJH1gQGhXQDpjOCRHe0B3IUZ6dShBSG1sTyEkTWFbJHo9bE9EQzlLK31CYSQ4Mnk9O3g+Wl4+S2VON3FxPG1vLyw6RlE6Y3sv''@;'; put 'put ''UEY5K2oqTUU0MjA5eyU9VWoqLyU/RVk6X29iXkJweT84MEk9TGZXZzBESUFdaUFhRW5ZPUtUPEpDcnpDYXZZMGFfPGM0UmM6Q0lVQU9WNFRAS0dZczhhTSR8LHh7bE1RTmlnVGhTS2I2QTFnI1hyYXFoOihgdWFBckh2UkNZQlgjRGVCfG5CUnRsW2tTJEcmaktZVHMwSDNHUkc/Zzx1ZXVqKWh4''@;'; put 'put ''TExJQS8kL1MsRGBydEtvYH1nZ3dMOHhGQixndyIoPVBYYjVDTjJXJDIoLHBtbENPXjxAKS9NdHYickVGbFBCakxnNTB8VE1lQysiOCtAcCRpKjhla3ZISClzdTdoYHQhbmBQUk1ENWFVWj5qams3TzhNLyVBJkFDXVslfUg2Tk5xTWJpLz9XQjpbO1Nhej9jYC92OV1YfTZwaSJkfnRsVW16NkUy''@;'; put 'put ''OVRQTTA/TE1ZXj9HRjUxOygmcHE4NDhbZ25vOCVOLjI+Mn57YnFKM3c0Xi5vazpKWFI8dm9MWCpDUCVMeVgxKV8xJXpMZHQyVWEzUCV1dUFlWSFAcXRfIXlbQyw7flJWTHMkckh5KEZSWFBBQnVIO2VbLnIsTG5ENVhRO24sN1FkOE9Qc1tvMzdDOE1nVWt0LzlUWWxjOS89e3BYKWQ9W0ZWS0Je''@;'; put 'put ''TykxRmdoRT5yUyN9OGw7VS9mO10pPENHRSFDXnV1XmNfJn55YnNJaGpwPFckOTVifjIyLGA5LHMxSCI7IlcodUQ5bSVVKmk9I3RqTl5iI2tmcFtXbWxha1cvSmdXdiQrOCIhdDB4fSszezAmcn0uPXhXJXMpbEpEPVhAIW0oRiM4c0RITDlQM3xldnpYLHpiOlske1c3Oms8V2lxOjNkeigodVt2''@;'; put 'put ''aDNVSEA/R3VQcio2RCNsMlp3WXAzUkckKjRiN3Yyc0cle2R3RSF9MFlCfHwqSC9yaCpGXmgmTTxdMzFFV2EzRHthO3EkPEdgJl9AJE1zRzIwQyphdUImRXJwOm9ZRzJ5Kk5XOTQvfHpHOjZmeHJDIS5qUTw3PmMxaXpWZGMrVj5SR3ZZQjpHaTt1RzBJTXAwQ3RCPGllSXJUZFNMUzwhQW83d112''@;'; put 'put ''TmEvKUBwVDxLRShCKUFNe1plXj0xYGw3bHY5X2M6NihJXURGaW1kNU5jWGg/PnM9MFh2RHYqd0giLkpLaT1BcW1qVHo1TiEoOGtBZWhYJmA4UEh5e1NKdT46bXIqfi5KSElMfnFnT1ViV15oZCxdaTVKbnV0MCV2K1R1Z3lTQDhefSU3KGlGdkNHPFRnTChzMVI3VzU1ZXEhTmclSkc7eTQwSiF4''@;'; put 'put ''L3BzTDA6LzEpcVE8XTprV3xaXmNbTnhsPXZ7P2kxL1ZpTWIxUl5bXlRsUSombWJDWyZVMCEwNTJSYVgpbWNNY2wmIm9vN1VHT3YmIil4O0FoPzVOel5CfldGWTRYOENiTzxKNlkrPkVrTWdpKTIxPz5gKkdkOTd6LjlNd0RPUiZRUFBGSksqcXNTZHZMPk8qbHtwcjVYOlRMeX5QNzYkVyxSNkZt''@;'; put 'put ''enVXYj02SWVlLFMhY28xa29IXl1McWB0TkQvUy5Hflh8Y2ZMJXdgaGx4R2VlIzUjZTg1MmtZLktkUHVQcnNWMl1aQjhhWzw0RkZPYnkjfD1PYztaMmZvQHlGd0I0LGdHbmo0cDlIdFR1czYxOF1oOH46WGU8dj89JGpzSiFVInklTGNiMGQxbj5OYkZkVj1abEVQSFdbTCE2ZTgsRCFFc19ZW2te''@;'; put 'put ''TWJdSiFPXmkuYjRLTEhaaXBMSzlKIiIlejEzfkhFTGgjWUM1citHQG9UZDZYNjp0eEouKDhgSX0ySyhpR25SLlJRWGIuNEdXOENubS8vaD0sY3QsIyxmdih6Nkp3cyF2ZGQ/KTc2RUsseCF4LHZZQDY6bkopSTYmWDdja1spXjBRP2Fmal1mUGVVQC5fQk4qcU1ndy47O0BPNjhIdmA6SDVMQj5O''@;'; put 'put ''cXV6ZWUwamo+O1M6amQ2fnwhe1FIcldXeEw9MlVtdCJMVi5SbklwZ0ZqY0xRdTpOQzc1YFI5My94R3FoS34jUT9iV1c8Ml5uSzEoMzdbalpAYiEoZHd2OTxaPk1rYmRIb3ZlPyJGez41cGRvUHNCVUh2WzU8LHB3PG9yY1RVUGlMQ1c7e25qYyZLOH5nQjN1ODRbPnMqM0RPdFJYaFh3KEdaVnwx''@;'; put 'put ''JSE3V3FsfU1IOj0ySD1qaXZ4REFTQXxtSFNaIjpRfT9QMCZddFhyakQoV3daM1B4aVpidlEuWVhOPk11MVtnUW4mcDMkTyYkd2JjcmJYe0kjP2U4MjI4WCMiekY4VGxVTFp+fXZoNCoqSTZaT2pSTDdifFtuKChie20xVSpqeFJpLy8sWnA8WEokXWVkISh8WXhJbjBNUztEOjc6b2RWU050XSIr''@;'; put 'put ''M35MXWZyZm9EN29TQ0lkKz10fGExTCUrUTk1Ni5DLGksdD5WNk4mJngrZGUoOUgvdkEvPmNfYiswLHAsRXU7RiRFQG1rUVFSVUJEN2RdLHEjXX03PCFQXy53el8mdGZ2Rkl8S3c9MkdZTTVxWT9OMz5PbVRgZ2pkbChiJXZsN2RoSn1UNW5GV05QR25TayNkT3dbKlNWdU5HVzE2P0Z0R3JoMjYl''@;'; put 'put ''VmhzKShQeFVDKFtdUXBAcSRfWDJ8aGhtPFFLUFRReipaOiZmTGxYNXdfPEpeZ1l8X0dXLlJkPk0xPjhvW0hFb3AhI0tAMHExK3BAPmIhdV0zSDdpVnJlUktpMClnIjdBcVdxYGNTamAyMUJELG0sbD1XZWspUz5AOjNiTVNZMFVTbSMoZSM3ZGwqVVc6Q2lDXXY+aHs9Tj9EbSg1VztIX3E/d1JL''@;'; put 'put ''dDl4a0RgalQ0KiQ6OmI5MlssWlg0RHNwQlgib2A6LlUjX1I/LyM7QnBKOjIpZCJlNDdhUlFZeGJaWEA/W35ldUJRWExDMWc2Ij5SMUNxVFlNL3V0dCtEcGkzVURhUmhwXzgwUkZqd3FBS1FzfHRnJHRDcFYvXjNLYT0kUHlUT2lTQT9fcHlxSltNM3RkWXpQaSozR3ROLmhLdjdDPkhGQXdORk1G''@;'; put 'put ''ezouX1p2W3YjOmNJPDJEJSJtcURNT09CZzsjcTk1NE4yUmM9P3kqLFBrUl5yKHNHdG4oW2Y3S2BYJnFiaUFLWmo0V1E6KWE4cCYifihZI2I9RCgudXlyJCM2P2ByK3MxZF9kcWFRaUpEZSM3L1NIXlQ3THElK0MyWC5xcVF9blY8eWRjfnYoRT1rQFE5NjVZPGs0X0leJWg1UFYrVExnMUIyY0J5''@;'; put 'put ''RmArcTwwbGBwbGZQYCsueUc4cil+fXlfQXA0eiV1bz5MbVpAWn47V2A/X1AqenFSUmRYaSlZWDtWL2E/JEVhU2Q2Q0R5T25+fUdQZzBveFcsUj9acnE8SmpReEwwcGh1QFNPVyVRNCwka2AyPHwkcHhQOzJSTzlIRW0qYXliPHhUJGE7PC9IT0ZhMiM/RkR6LjEoVCVRSSFvaHFjVHBidlBFYmgz''@;'; put 'put ''SnpGXjxWYig6KyM6aD9gTCxncF02WFheJG1oQEBEVyxYVn5XP2R2RkImN2IkNCRdSE9CSzVMUFBmSHhgWE82W0dhSmIybm9hTWBVb2pOOiwxKX4mUzBubTNEKzE9VyZHcHU2XmEjI2g9SlJQU0dDMzd2XWROTHlxbzBXNC56bDhpSyRsenY4PCNtMGVwMX1PJihOTnlEWXNCITskeCtHdkFLTDhl''@;'; put 'put ''UTQpN3VXaT9ITlo3cD48RCYufDJsT1UsOjkqSEVde3F0cG5tYjJFdG4+QXR8UXM+TVlxPzFCc0A8eSZBRzx4P3FQMiVXOjNlJlR1a3BbfX01RV8yLy5sLE08flQmfkhAT0kya01+WlA7PkNJYE97UGEyPV8vQGAxUz5DXSNDOighdjh9OTUob25rYlViISE9c25GKyhtSyFXelJtM246VVZTMSgh''@;'; put 'put ''LE1CVC9UfEM9WjJNM0NANDZ9aWVNWDNeRz5KMmZZKy8jfFBKX1VARTxebElMWX5mJm4rRG8wWWNsPGhPcnI/bSh2ZHxzfWE4ZFAqLDdkUThKKWoqN3EyL2xYdTZQZy5VNiNPO1lEYyxXSXRiInoyL3c2dSF7P3U4e2xoRlIuW1VpeGt9YXl6aihqLDZaaE95aTZ+bWxsYHxQdW9fVHRTNz1xQEh4''@;'; put 'put ''IWs2TUU8LDR5KktpJHxoMF1Jd3QzdUhNSjBoMDg0VCNLXis3O195LmojUCM7RFJtcHlPW3d+cXNhU0t3S0pNZDxkKzc6SSVqVDohRVs4X0AzOmFuJSRZUldEKWd8YHtWcl5ka3JwdClgby5mQGI7UEwkVW9dL2dhUFRMbVspbko6OUI2QlFYQHF5czdDaWtiXl44cHJhKj5RNlEhVSE2ZDlaW2Rq''@;'; put 'put ''NTlJYTUsQ0khdS8sSzhhbnY4IW1oamhiM215d0ZSck1aeDt2Y3w8JiRIZTtCSmspcyQlaiNNK0ZheyF5NFk7UDJxXXlhbjhoXmJOUzVwUTw8ci9tXVhxempuWio3eFh0JTc0USx6KFdmMnV4YGBEdG5BRzx7M2ZxeWR7Nj9EVkEmNygpSXxNYCsoaCxGcnBPSzNYaipFIyFHezZoOSUpT3xsamI4''@;'; put 'put ''KEZoXjB5X34rI31mW3lZWTIkc09NQUtbJSpGdDJ2TUQlTF43I1BdNG9YQGJte206ck5DdjFvZVR8UiROeyRyJitHcCQ5VmlGe2tZLE8qTDRha2Z0bTVbSlJ3blUyQ1hrT1MzcyU2X0QsVHY1VmRGNkhHbUxJTXVwa3ptK05fO3khJSg6bDImbWtmSlJ5SSxzU1NjJk5DVkYvW3hwZSZzPj04Vk1S''@;'; put 'put ''MzBVVFhEWkdKR31lcnR2VV13WFQmUGRNI2kxU1ljRl48fVs9bT9ZdiN+eExPRGIoO3d6QFJNRTojd2JdOz9wYnxmVUJeU3ptWWgxfnNCbXV1IkljYk9oIl0pbDgmWEZuImx+QmtfIXU7KyFGTkkkcT9qXmI6XngrbmcxcSZdaExhYk1lSSxIWEdZVyEvUlBLWWV5clVSPEZacERtIigpeW1JN0dZ''@;'; put 'put ''T0BZWEgsLC4wUkViZypPRHx3NEs6SU9kLjhdWGtGaytzRD1nU1Z1NEZkY311I0tRY2Y+WVVtPjlRb2tuK0tWWGxzYC5lL1RWQTVJVnZtd1I2WzEkJnRKPGlDNlIzL1tqYUpPXk9IXXUuRlVNfXAuZTRAZTFbO0E0KXVaTEdZIStAOzYyWzJKRW1TQExEZVopcjo2YUdDVn51Omk2U0Q+dHcxTFF+''@;'; put 'put ''dTJPWSouR3xUWjojemZSKCpvfTEwTixtYH59ImsxZz4za0hGWngiYGpYNHtLeih9YiEjIXV6S3lNM1dGRn09eil5ZENKR1RBSCZRL1I1WCRhdXVYMDVga0opQ3A6IThfJV99Slk9UTc6ITZbSzAuTFBAX0pbPj45ZV16eWUqclg6QH0kJF1aYkNfRDZOWSFhOGJ7SnB1fFNQR3UiUXQmVDx1dkQj''@;'; put 'put ''c0p6YzsyTUZrTCt8RigkJHlHJTJWRCt7P1BON2dQKzR4JD9bfGB7UkZxWzxHOlNucEB1MGMvYDs8OG5VSjVMRFY/WEdJJDt5RWs3UnhXQVJiNTU6ZSQmWF9XLklwdzdXLH0uUTZ1OkhXVll+JV5GTEZSPylJKTIia2pFY1FeLyVvRz9mbD0wYXZrKSRMUCpgWFl0cCl0OCMlVHtZOzhtKXs6LDxG''@;'; put 'put ''Xmc5TWFmVEZIP2g6eHcxPlpqMDlNPThaKnI6ZWNhMXhnKGNgKiMuWVNeanU0OmxsPlhHazMpOTk5QCs5YngxOik0emJOWk4xTzJ7Q2RtNClpKlFAbGguLlh8UkFralVhLm5QO0c5fkkmUjQ6dFIiQy5lazd5e2RQJDp+Zn5ualpYOHlpdy9bLF51OkluLyUyVkZJMShWUGZMNi5FdG5SLC92NnMx''@;'; put 'put ''K1R+Y3YpY08sc2JwJmcvKDArfkMpZ3k4NzpVWiN5NVdlaF95dkQkPThRZj9XPzxnenJNLiNoLl59a09ib0pWTDl5K3k6ZjZXeWs9MTx9c0x0UmAoL0Q6cVV0Sn4qal9xWnhrc3A3cmpGWmtmdjtZaSJHfWwmaHlGbzlSNkcrJSZAKkB6UDxAbkM2OHR6dlYhI3xiVkhAKXUqY3FvWz5RP1RZVV8+''@;'; put 'put ''bXRYbUxgQ3QlRHNNcDFyNTgwajh2QT56YylmWGBhb2VbSXdlaSkzc105IUN2WThIQHt+UVJYOHg5dHA8LCYhQTQ3PU40NlZKKnF1Rj94V11ROyJUOHdBUiE/PXB0SnZFdGFnRDp3JUslZ0d7LykkO3NseClwWWNqM3tYR3xCPGBmNlpKcnc4OT87V04zL3B+PHMqdDVBVH5eQXRoVSlIcFFML0lo''@;'; put 'put ''JmI7Lz5HUiUxTFtmcyt9LDZEaVlrKGg1UDAqMztTYWhHblAmeGpJUHtKS3l0YXBhSmZ+MHs8bHRIKSlndlQ8bFNVeH19MnJ0RVRkcj96dDNRO3d3JWluOWgueigsYjlsQmo6aTE8aEVvaGlabG42N0dDe1tIUl9qRT1hL3okYUVoTXpkMHgxUytDKTNodHY3QjlOeFRnLk1LYD88Pmw/USgyZnV3''@;'; put 'put ''ZHdhOG86JkJLS34qOT5NNS5xOHk6ZTtuYSJ6IWN4YmlCMXtuQCIxJFhYJEVKQk8/YihmX3Q1M3R1dFhwMXkyRnZzcj1fLjBub2tpL0NwSFRjZEszYys3LzV1c190fGV4UUFaKWU2PVklS0ZjeHBQSmNHbzxwaEw/e2UpdWx6WmRxXzV7TShiKGpuUXxuKDhJMkBqeWxGfU14aTt3ZWplUGVdLk0k''@;'; put 'put ''UWtESGJ9PXJIT34sZHg0I2dlL2NJUH5SU0I6N05pSkRydXNIQGpaLF9kVnpvVFtgbWRHUjJNM1BMZjlHO1NgLmFXbmFCZVdZb1pOR0hwNFJ1N0pZfiIkSm52SSUhOHpQOGpIQXlJOX0sfSouNU17Wz9rcHRXNndZN3IudzIzeFFtKjw4OTcjYWt8dX1tSyZnImJ5PGpNYiRWYSU1VHU0JkJHIzp3''@;'; put 'put ''SzVrOVAwPXImZ3skNSU5KDdxWnVFcmJ1RlhLIWVBayFfMSUyeSR2T29jPzRJWWpHLn5DdEdlTjFSRUpiVyJ5cXQhfjtlWik7NlBmb2JTaFd+JEc9QEwyeFMsQkJnJGF0eEErfiM3T1Y0P0MoOmYuKmhWI25Ia2lXMH1CSlFPfToic0x4a1V3O2BoSk1LWSxaPCRYZDJ6Tkp5KlZ0bFt8PSs0VVs9''@;'; put 'put ''JDQoJGB0MTJyMV4le3FHRj9KblVsZ3p5Pil9Vjt2UzpWTDZKQjVhVU48O1YzKiVHazZIKTgxNVliZSNzT2Qsa3NsT2kiQVFgMCFdX05HSEJJPzx2KTkhbF5YaHFeWEUleHg0bUB8bTl3JDIjP3F6NytoZTtnKiw9LyJEQW57dmUsL2t1IWoydltdO2xJWkVTQGQ3bWJ+YSorYjEoejd3My5TQT5J''@;'; put 'put ''eF51WD5fOXY4MU5hfjhkfD40PlB0V2pzTiRffXgjOU1uLEs/VHB6eGt9YkF6cmhCUkZGe29LcT5dW2Y9RSYyRkdhNjAzR1lHNjE9RlRPeWRdT0hqbzg+QFgkSjk+KTpCVE5+QmxvUUQjbTJaRCgsSmJLdS5sRHAqNXpJMmVjMCVyNmBTaVR8VkwoYyZBVTFRUipgbmUjJGU1QkRnVE9HbjFUdFJ6''@;'; put 'put ''IlN8Z1M+KGErQCR1MmlPZyE2ckxsOnBrYU9XZ1NvLzo/YjNxPHU+MHJ3fEY4eHlJa2pVQy5tWmxOfWIjZlAhSUVqXWkhXn1aPklSIWFGZS5xdHBHQmQ7OWs2PSUofTwuaCxrI10jTjFiZlojP2o/bUQjQnRraGk7XyI0NU8xUG4sclhGV2BbKGVsZzpfKiVGKXdqZVNuVk96P292YSh5Oj8sfHIm''@;'; put 'put ''UjF9Mz11ZDhiKCo4W0prJkVkOVZFLE1tZH5hQ04yU11gKktoZH0zJXpOUkxwcTJTKVczX0NSPUl1b2J9LDdgNS8lNHFCZ2lEVmZQWDRXd1VgalVsMFgoV0tDVEVZV0M4a1lNKiwkYFYyXj92LlNQdEVwQ2VmREJ2PjhiIks6anY1SUVQS31NbjZkXyQjJToxSVhrfnxoIzRfeF5yLGVnXSh0LHpd''@;'; put 'put ''Wj5dciUzd0g2PnV+aFB4fk9JJkBeRjtlMm99TFIsPWJMZTohYWk5TSF5PzMxMyltaHVlfnwlLmpvOUdffDw+NEdHaXk6Jjg0LD9FQGlrW3pmUXI/UT5TQiMhZkl8KzksZUpaKEdGRkJrXj88anxAP0RhXXlAKz8pKz1fZTVxQk5oWkhiR1t5T2FCVlZXVXdFYSxidz97YC4hWmA4LDRkSFZsUlE0''@;'; put 'put ''Jls4dz9yX2REXmJfdXZ2MyVzNWgyb29KWzB+QzJlNFd4P15aPW41I0oyXS9qTGZQanBzYW1wXzJ3djlkUSZ5UV5EJjc7JVE5PlNTKlFuemw2djdrbkpaO1R3UTxFZVQjLmR5Kks5KTleRHY8Y21GQXY/WEBMaGFVT2pDSHJId01lMUpxY0RpMEApcT8kVGRnYk5ydiJRPm07ant1WytzUmdtLm54''@;'; put 'put ''O1E1fUtIfltiZVRNOyhTVHRvJVFyQlZWMSs+YX1Nd1hPbCImMVBqW0BEa3wvOGxGe0omcXFPMixhXixUe3NiM1hQNXJ+ViskMiY/QX5aJnZNQyhMYV08UGdIODJpWjMlYnA8JTtxNTZsSE9xb2k8Uk83QSZrTUlVPTJ4WS4yLyhrL1IodjRJe0BPUSRKJVI1NX4mVHNhZEkraSxCey8ifjomZzs2''@;'; put 'put ''KytHOTthSTlhUmhSP0MhVHNwSHgpT3FtP3k3dz8zKXR7eGpkdVNsdmkuXXBmRjZ8UnJXbCMxbVQ7WnE3RFtdOzQrPnArOzxdUi88K11iWldVT3h+ZiEjcnBaQGJtPkV+MFYjZ0NMREsremlmdmdMRUs9NDRnMTVNbm1dN1UvVnlZZWF8VVBxWDJVLmMle0JIdiFjREtwTW5FTkt4Y0xFTSw0PFdx''@;'; put 'put ''S1NtRW4yUzZCWks4UlQ2UVNKNSMieD9CZ2tdOFMpZWh6eEA8a2RiZEgmNzB+R15NcnVGTStSJTI6UXpHTVhpaDRybjlgNS8sMDhZc1hRbGVNbkh7OGNhVHx4IXo9JmdOSWloI19OPnNnOFZnLkAhNCR4UU5iOnV8ZXJ4Kl5RbTZaPTJ8aCRzXl9+YkkrPXJzQFlFbjgxOz9WaTJrbmNidmA9Y14p''@;'; put 'put ''XyIzTz9ydzxBeUtUQEJ+XSwyOV4hUDVDW1BKdlEidixrYSg8cVkwQUooZ1tCfGlpWkV1NEBtXy8leC9ERFVhPnk/Ty5tTnF+aSQrJGsvdVJZYzRRQGNlW0debE5OPylZSUxgUlVFUnEkVjwkKF9nUz1ibE1sbUZ9YHFUR2gkYmF8eDJUViR5fUtNVUVaYEJ8XX5jQXx2I10zN3VvUkowRCRBOGBm''@;'; put 'put ''dmJxe112M2VGLnRqMytJWkx4WXBbQFgobWd8MlE2bEtdSDNkYWFgUVomLkNqYkguVVFaQypwV3oxOD1IbiwjQ3h6UkBufVMlRGd1PjBHdE9GOV05MTZdeXMiIXB4UkY+MTlrMVozdCJ8Uy9gfGQ4YyE7cVp6WyZ7cGhZfis7L0ZtOllMSEs+NTE2aXVpX3pVSG1sQmluUVR2MnFddEoxZCYjQkkz''@;'; put 'put ''U0JDSU47aSxXYXdFelBfJjVFUWU3XkwuQjIjdSM+OGtwbE9mIkJvdUpvZjAuOUNKcDdiaDN+ZGs4Rn1qfk59YS4kMm5IelM2TUIxYF9wVmhORUshUEtWY3QmfCUrWnk/Y35aNUczbWZEaUBXMkh1aDxCUDBMJklgMl10VSpiaCQ2NixfY0RDOXF5LHVOVCtpI0N2ejRdcS9vJTVibWJkJGUuckVl''@;'; put 'put ''QV1LQD1nPn1hZylxfGFuTVVZZnFmMys+XnRSPH1NYjVeOig0Jkd7Y29qJTU+dFEsW3dRJHwib0tMcT85UlF9e1JLPXY5TXpiJCR5SWB2TlclQzp0QTBKTGBVWHI9aVdaK1I0WSFXN3R+ekY/dGNUIzcoZSo2JXRWekdGdzovdEVIPHtSfkVFe2tIPyZwYEJtNEdqam0vNXxKSC9sdjxiRS5yYCxT''@;'; put 'put ''QDtgPig8U0t+XltHTktXVShPTH4rdFUqQSFOQnNTKyEwZ09ZZ1NIM2g7WVQjbzxBK343LGF0ZTdFWDNUQ1BXWjxYazUoQkFqOVt5UG1oJUNVWWJRZWo0aT99VU9bPWtqTGV8akIrPmRiMig/fnRAcDElTnVTTjlvLmM7aTtQa3Z8fVhPMTpra11sNVYrQH5kQEVyY1VJPlUoXVNCPFYveHokLilX''@;'; put 'put ''YFJ+SSs/cGZlLzBIImxUc11gKH4vc11bdGgoMS9EMTtbTl1pYmlwOHV0b1o/WnNjOWpnNV1TaFNJKnkiKTdHZE8qUVhTOWRHUm9ZS1I5STt+Vkh9QS4rfT9Fc3tVRDpQQFpFc1EmTjBzJSpjQzRAPFd1PmcqQndDSzAjc1swei5kcCtJIXFvXVdPVyltaz4hRURIOi57MG5ScGhucjoua3J2RlA7''@;'; put 'put ''UixuaW1pV1kibmVYbnEwOE5RXTt2V2JJPnRTdk82IklTSnRzTDxNcz4pKClmMG0vLHxrc0cpMjtwfT1kJkw2VmkpRmtwLE0iRVYqVXtOZlR+YjdDQ29YL35oeGhWUVtBT1NtcXZZeXh7fCpKWTFqdEpAajU6c0BKfDNJcz4+Vjd0bk0jfDtCelBVTmZlZUhiaTY6YlcyRktbXTQyOUtGKFhWK11i''@;'; put 'put ''cjpYcV50RCkxU0o5cDBhbSFHYTxNflN2P1ZbOHVSVUZGaHBQdjlBLjA3fm5GXkF9MHgyP2lBZXNmViZoMVcjKUFQeyNdR0JnNXRxT09hfk9ydjNAQVBLe2RhajF3ImZMRlcrNCwkflhEWWFYZ05JRXswQkRRRGIpP2hqZkY5N0p4bnIxZ2BzMWNTQzlnQ2suNCw3Z2xgMEltSzRrJHZURyZDWVF7''@;'; put 'put ''Li5VIy5BdXw4XUNnSnElZy5QdSEkMnoyKiViTC5bYFF7PUp2UVFzNGNyR08rX2pqYEtIVVFRUH04QlJQcS50OkZ9IzdHdDZzUCFsOSVGXmNGZzopSzNrZVFlM1VgUDUhKHM+I0tpa0hyViRnOD46ezQrW01Zdk1mNUslTHBrWD0/ZmdVS3NhbVVyTDlPd1ZvSHU5X1owaD1DT3wlLiZGTFt1cmdA''@;'; put 'put ''NXVpKiU7TDhnSkRObSYoSHBFOiRxV1B4MCZbTmU5e3VOUz94dT00MmI4MyYpUnZGU3pNUSF0Xi5fal18LnEsPTcib3koZntXMV9aazI3cikvW14hI0lTRGA1WzJXVnJ5fVg6flhyXnooRWRoVTJsUmJjRiRWM0JqeixwUmk6Nj5uRUNpfmo4UTE0K2YhMnpNWyxSVl9CUFpqb1ZRciEuenUhMG09''@;'; put 'put ''VE0+Y2E3L1dkV0sweylOSTVCR0l4K1Ylall7cClpRD5Rb2pDSiJAPDlBTHU+NUxebW5xWlBWN1J7bS84PFE3XS92I0Z4JTBgKntGMWkqYVN0KmpuUkl3MGAxPnp6Ly5UcS4oKFpPWTE8Ti9ycmdYTyo0MUVDY1Zua2d+dj5BbkhMQ2FPO2dGTHhPcFBxYHc/InQifHBzK3hkTkcrVnRfek5CanZH''@;'; put 'put ''I01kUzQzQks1M1RIKyRwQSs3LytFOm5PZVtvYXxGMUIvOGZrKmFnND8/MnBASGsxfGsqMW5XcnRCYD5iQSx4LmdoXmZIfld3cCshJlE8RUJud2xWfCNqd2dEWVJDTGBRJVFxOm1MQHU+UHNDaiQiV2l+clN+Y247PEtfZT1NRy8sdCs3L3RuSzl9Zl08Z3NPJGdfZnJ4PyxPLEU6P3pmbkM+bnI6''@;'; put 'put ''ZU4qOVU8VnBDaU9xVlUmX1dCVzYzbH0mKzUlNzxbLl4uTUZZVH0pTjg3cD45eWpGRHQqcFZofXhDLiNkb1NgOzdnRkRaVmFfcCQ7OnR4ZXBvbSFwOEMkeHprMjRNY1JQWkw4OVVvNWpwRkZDKnB8YHc2VFpaUFRxaUZrQEsxXXthcUpway4jUFlufiw3d1VIbXM4S05MMG97dTdvLmlFT3AzIi4l''@;'; put 'put ''T09LUmVKUVEscUNtNVlIJFBRZHNtSzJhejNnTlswPDI5XXtIdGZROWRfRmtSKDpyfmV6Qkd4Kl1BdipVS1NgVjg9QXpFc3kqKDFWc1ZeT0QxeipYKVtnaV5jYUNdWHl0bWYxI31xdCNlMkczd0BRMENtPyhxYGFdPkt6UlJZJElFYWMwIltiW2lvUzgvPTJjVWRNKV1MYWssSlBOdHpEWVRTKXtz''@;'; put 'put ''ZkgyYExgXzhEc0RlTzY8UCRrKSpNQUJ0ZVUqbX5baD9WIXRTY3lqbChjOHRVTFBHWHRvRlJDP0xTPnpTKzhKOz94Wj9ne0xUfVMrXW5xKFFRfTtbSGVXRyhZY09QcTthMXJJbihjaT90UztBaVlvN1t9MWVFTyV7SHlDYzhjKzJ9I0Q/K1lnY1tDNnFLYTtOXkYwdTpiMUk2WDNOaHBFKTEjN14j''@;'; put 'put ''LkVwbHw4NSl1c1RCLCF2eDBPJFs5SkptRmptY0AxRHA/YW1TdDRNOTNaaypFK1IyWG5+SVlZTUM+IVZrYT1JTUpCJktLUyRgZE58SFtaWy9gK2VsM1glMWhEfXoyNyg6ckNNV1ZvME9DV2NhZUJuNyZudHtDbnRdO3g4OyNgdnk4LGxhOFUhaGxwOE4xZnRXIkA0RH1JITw3MGJ5QFVSKiR8ZyEp''@;'; put 'put ''fHtaWVZsSV5KaSQ+dV8lZnxbPDZ0PFpUQzo+N3RnLGdRP2VWLmFWM3dbej5oVS8pYF5INjdtMFp7JkxvYGFtJW9LIURXYTtyPFNeayYrdUhCfl5NQjZhNk84KHc1cWFlejg1WXFWMmhabXt3bVRvJEIjdXxzSElGdVVgfVF7PkN1ZVVKOWBwX2puNFNvZDF1Q3ApSnR5bEhiKXorWENbOj8lPTMh''@;'; put 'put ''eVhtSlBhaXd8aE5NaWklWUZWI3xVNWNFZXJtUC9jT2laU3deYEV2P05fcUZmJHIjfCNleCNUK1BScyg5cW13JDJMMUs+fTMianBdZ0xsYEt9cVdkXzV3WXpkY3xSa09jcmRqSDtYXj5LNEhFRWNoWXhQKnMwYUhdbUdjcSpFViFrUzp5ZnJWOVtwPF4lU2J0VSheWERIOlIuUDhiQiw0ZzUyUGlr''@;'; put 'put ''QStzM2doN35IS2k4cHBTTk9baCQqUTM0Y05EbHk/eFRQREFsfWUpbGkyNE98eUFzI3hSP2JqZSMxZDZJJl08Y2Vbb2BOeSNLUmdqOit6dVNINSRkcWdRIjNaInBJZVZsRitXVClQW0poOVA0RTchZ0Y0cGU9Zl1AU11dbTl4KlQpMT89QFFDZGdENi9tXigvKTBsO29ocDA3JlZTfUV3bFhAVk95''@;'; put 'put ''bHV3UGlFYHdbUmRRUU1VSj5gaD0oP29BfFhkWFViMyQlfiphbDw2OEZmOSZxWCg6bkBzblpKbiZGc0t4WWJ+KmFSSyRSbjFzcjpdS2F0UDh4c3Vme31DZyhlfTBLL1kqJjUiOSl9M2d3UCJaaGtPW0BtdT86YWZCOlI7OF9gRnoiL21oUjApPD9rU1IvIyUrKl49V35FO3tVUHpoKmQ0ZSx9Q3R8''@;'; put 'put ''XTpxe2xQM2Bea0VDMHhtSUNDJDZyMTRSVDtVInZ1YzJhcFFoPnhqU3NvZWRgUVFbKkF+e1dNd2FAVC4/UyNsZGZ0YCZOYiNbSTJwQWsxJFVEM1MmOGklVldaVTFbOEhFIVY8Zz84ODlaImJ7bSk3THQkKlRxY3FtKiVabDNaKmpSMFJZJGNmY0R8VGx5LkZebiphaXlBMV4paU1Wa2JbNCk8TWJZ''@;'; put 'put ''SmJaejxSU0l5Yn5VNyp3KDdwY2VhN1lCYFBybUFGQEZRZHR7Ty55cngvcXVtYWFGSlNOMT5tVGdkaikkTDYrKyMzVCxiIXModWV3UG83MjptPXFAazpiTWsiUDt3WC8qMSJ1b3YxRFl2WnYkbyZnJG10MU0hPV5tZnVLJFJBZ1gmT1ZKKz8lVjcsUzZ+IUdaPCRfakVHNixGInZWaG0+cnkxNGgl''@;'; put 'put ''WikoNnRdQmY5IVBXQDBxLChSRm96PjUlTjh0MENPLko3S3t9MVAkdW1LOSJfOnkxX1NxYGxKOVIxfkB5TEYhKHFabUEjK2IsVWBQSlJNWFFRMH5BdTJOa342d1p3ZFBVK3ZJa3FOJUpxJTRvKD5OMmcwbXkjbmcySm9qWGNGJEIoRjIhbFBDZiFBWi4oOURBYXE/ej83LlhTWyFjYEF7RGJSfWc9''@;'; put 'put ''O0hvTCVDfDh+UitHPSopNm92X1QsfmxhYykwdEIhPGBwclY4PT5AbUgkfiREJShCY0BDK3UoZmplfmZna1peZ1tSMXZGfmVKfjJKfTc3YmAqaDswQnVDRiNSM09xJCFgeihqUldlSU5OdVFOL3U0amUyS1AxcCFuX0s3VTw7e3MkfWQ+dS5dTEhdZWZsamNRfilISTN3WnxWOzx4YmZ2UjQlJEpk''@;'; put 'put ''U2Ure059U1BRd0NCQGdfPnFIdkJPbzc3Kiw6Q3tZaWc+JCZxTVM2ejM8NzYreSo8YzA2QlpIN192TjhObClSI0Qvai9ZYE01YTlvbj1DcUpzQU5fWXYzdEtSc3JvWC5ES0hmfk8jMmg0JDYvP2dNbyssZUoqajRxQmo5dEl1b28wfHFeek9XOlkuJXpSfHd9U35fVlpaayNmQXd0anB8cUFQSkxK''@;'; put 'put ''UXVmU246LlRxeiNjISEoU2Y0QFkyfUJbSWgpLFRMXS5NRVBecEdIQjMmPkZaKkcyUEopNlNtUVYhMjhHMXlBNU4/b1VzaXZMK3lJdXpfIS5vdmN2Nk1NU006S1B2JDwqajpKU3pbe3U7RWFoSTF5XnJjJDN8cWMsRXwqP0NWITo4ISooRjR+ayh9OVRgQkV0bCM0akZXVTheXkRrQ1FBU2B2T3JT''@;'; put 'put ''UTUuakcmPC9WUllwRTldJnxaYEN1cDtDTTZ6b3ZAeVpCIUxZTG9rb3ppcHsuWlp5UH4rNV9EZ1dJO2h6UHgjMF5EcV44VGA1VU19UTJHYFp4TlpHWG0oYVtCZnpVd3R4Lkl2JUxhRjxgVURoWSpRVmwlREY4MkJ1Wmk0XSNTYV5fOjBhdWR+XyU+Qk11dGs/dyheVWtUbUQzWz1DcFp3eVs+QjxR''@;'; put 'put ''e2xSZWdzR1MzaS80SF1yXzA2LExFY1ZWIl9IQDE2NSpVTUFqKCxVO358MiFeUDBiTT5aQ046RFNkSClPfiw7RyZHJGVpUnRDXXFOWzc+bTIyRnBzeExzT3JpQGp+Jn1lO1J3S1dOQkE7d1RjUGRGPVJ4MF0sRlR0QCp+Z3ghbWk3P2pHU04xUmh5WG80SzclJmwyT0svPnVGdkI4YlgoIzlvKFRV''@;'; put 'put ''K3hzSmk+OF1jPVUpIm9PbD83WV0wcStYUzhgaU5dfXxkQ2F8fmt+S1JbNER0TFQmUVFNPSZhejtXVT5PRmlZeixTWl57Jit2S2N6PnN5L3kpOHFAQzpHfkYrIzFzRHJHMUg6Jjt1MFssbWIucj5AKl5LIyswXnZUPEJtTTV8QGBfNmomUmZHcDRFcyFmaVlIOlQxdWVrZ15xdGQxUDVJQHJAal5Y''@;'; put 'put ''ITBpL2MkI1hdalBofUxxLz9yMCNoSShKM1Q2TUNeVWZgSXZ6WisrL2NTSzE+WXNNQ00xW3FGZ3pRIzBdTCkrV3UzPnx7PnEoOkZ+cCt1c3gufWt5NCUubHtATV1QXipAYStSeFldaDIqRndFdzd2NG9mODwoP2tVRjp+SXBNPVNzTnB3MCFQQC83SF8vLmRVT3o8azM2Ml8kMWBCOn1DT1F5Jlp6''@;'; put 'put ''SmB4dTx5eEVueTNdOXtFVnhCbHBRJVBnLyZUaVRhaFBTfHBsL3ssIkFnVjZkMkl8TTRKfFBXKW19IThuK0EjQiNgZFtwN244UC8ob3xLQ2Y5T1p+R2hRajVMcH1GOWI/fldPa1paWWBeW3ZqfUVvfmlyQ1FbeyVOUTljOlRTSmZDbl4xYD1MbGA7Y1c9eGY0cV5wdmUvYyk5WV5fJnl3LzloYDp5''@;'; put 'put ''ayVVQEhpV2QyfntfVjcrRXNfdmpLVCF1b0lrXiU4MzxyfS5JXWw8cD4pTmpAW1g8OSIpLE1vTEg8YlZRI3Y/Zmg4TztSZH4mOz9VdjAxTmRmM1o3Jk9HVyk3YHFzW1NuQGAuV21zbVZpPkE4MWh4PzkhY25TVUFyJlJ5cFZmTT1oPlZYUn0od05TZVE9SU9yN0MvNlhVJH1USEFKVlApYi9LK0Q6''@;'; put 'put ''MmtOOUUxdz5GbF13cmx0T350QkJ1W3Q6cXFNT21hdSolZWhJPzhHeFNBUldaaF1gWyhmVlhVWHtFRToyciw+dWlTXy5kV0txN1hiS0VOQU4yKkJ5Pl1CajQvWmMzUGcqand5Qzs9T2A+WGUlP2RNPSEoc2hKZGNbdEBIdGoldkEle2d8XV51JUNFTjMseCNgRXxkOzlPUGZoaERxXWxpXVZZTWJE''@;'; put 'put ''a2ZUMmJoVTdhPjdxSm81TXBdRmdsakNGe2Z7aiNGQVs0KFtWfT5xPEN3U2VuYGt+ZSUjeUk4Y3A+QCtxM190bHBhRyJXbiY3aXh1dEksTHJ8KjhmfEYyeFpXR2Y/RGFIPl1RUV46bkx8W1dvK2hfbTdQRUEpa0c4XmkzSkdiTlR8T11fRUNtPkJBKllHKSF3a1czKnRyc0FifV08az9TIiVEK05k''@;'; put 'put ''PT53QCUmeVtvIWQqNnMsOiM0Q0kiT2xAPTU/P3dMZ1VDP24+ZCYoPDNYYXREe31Le0plSCg7S3AwTEF0NDshNlUvQ1pWNX43dlJ4eWhDQXJDTjlyYGxJJENlSCJiRSwyZXFRfWE7Xm90VFtYRCg2b1EkYTxHKTBhcmJ7c0BbWkw5Wls1aD5lW01ve3pNOyhWKzokIWp2YyNqeGUzKCNHN3N3c0Ej''@;'; put 'put ''YVpAazlFe2ZLaHdnKUdddHNfcm9QYHMpez9OPFouNTpUM007Z2w1dDJjM1E2YUJOPVt7QnRwN2oxYFpLQjd8eHVeLkQyd0p2cyw6P2VmTkYoVWg2Qzw7VF8kaGlbKTs7QShzSiRVXVk6OGp1MEdhQXU8bmpReXo3e2F4X18mMSkoZGoqQE0oRGo3QVRmelhUVFA0N1VoOzFgfUQyRHMhVC5sSzpS''@;'; put 'put ''OmJreyk1V313TU8oO19GUCRUMzx7LlgvOCl5fjlUYUc+X007bn1rWTZ5S0lzdFpeSTs+dippaGJZSW9bIV4/NWA3RT4kSko/eG0+VEdWb1hNVS8oT2AwJThyPl0mRiU7K04+JTQ+TlR2aCo8MntgMlhzTTo6UykhRmFuOnFVMmhAcX50VHNsKW4mYVo5S2VJZmgjOSt2KlYsSG8ybVI4XlBENXBn''@;'; put 'put ''YkZHbnZSZkRwWitlUkhvMmZ6IzooSktiTkk0cjcjIT08czkjI0Y1IXhYS145fGlIZzJuLEp0ImFPSik4MjsobUpGKXhBNnFvVTthWV5ESFh+QFkkZjNoJitmJDE7T3g2PyFCdkRvS3VSa2xQYF9mPzJJKGBTPmgqZj91bGVFezEuQWN2QUlEcy5BUjwuOXUlL0l6UG5TeEkreVR1JjN3Y0klPj5n''@;'; put 'put ''Um48VEcxNktQWVZHVkpaWXF6JnNOLkojJltgNHo0Om83PmYoYztKWVZINyVbWzBuJFp6UU80NSJeamZLdHo4JERnPzdMOGleVCJqK1dKQyJnPVdXLkQhSWZ0ZDg9XlRMYitjOiNpdTYwS2lbWGtpVDcjI3g6JC5UMSI+aylKeWE4JCg+PjM7MmlOcmckPlAqRFsuUGVxU1cqNHQhdVhfTW57LD09''@;'; put 'put ''Q3RMOmoofFs3Q3dNYj5pWGgvTXdpcDQxVW1ONSRnLnZOW1JbQVtoLltZSFRVaCI6OjgpMGRhWk41ODtaZEJBN2xaMEpPKkA9aW01YGFZRlA1ZzBPVEhlaChWUzhPW2RKTndmMjxgZzZKXjs9Rj44MWN1PG5hZ3d+bTZbRzFuTU9pVG9OR2AsVXxbeysrbmIhXzdLeS9qUTcsUjZwWWlVRyl2TjYl''@;'; put 'put ''dn4/ZmErJiVxKEBmS3JUJEtbI2spfVIvRXNjcy9ofSwraXplIVg0YmBFeksqMFA4OjdzXWM4IT4/eWFnPEc0NkdxY18qQ24yeSUlTCxvSCxvL0BIWSlLRm8wWmROSVkpI0RmIVdgVVYySD8qQlVdNCx4aFM4WHAjXjwjIVh7MmhfInVmL1JlYy9QZEwvfDhLPHJMXzRhUWIlfHAwRVYqajRnLFVu''@;'; put 'put ''R0QrOjs1QyF2WTI1QVFsTW5vcXdDSjBHM01LemA1eiRTPVhZNj1RVXlCRE1RYWpHcmNCTj8mIVdRMyNBTk5bNCR8Wy5hYkM9aHBjSXslL2F8ZWpPNEhOUjtlZm8xJlZBejM4Y25pemFtYGRrZEUiK2ZCWF1iIyZnXj4xJk0/fVFXQXltMm04YX5ObG1Oc0pCJnZgVS89eExXdVpiNn03ODRdKD8q''@;'; put 'put ''IiF4dWZ9RkAlQ1JQNCwrJCpgbzQ7cFhLZGA2KmFWMGEwNjNUTFgyNHlMeCo8P1t+OHxROlZOQEZGLGkxVzFCUTN1Z3B2S0lxc0Q3KDhsZWopRyllUjtFMncqdTpWKVA+IjdEMVslJlooblY+TCZASClNWlR8I3w+Ry5kfUxrZ2g9YTU/WGxZb0lKMixCfVE/QUBtMTM9UkZLI1ZIWHFrRSk0fWMs''@;'; put 'put ''YFhiZkxYSWlRMzg2blZabE9RWSxkfDtTQnhbOzQjVGFsT10jbXxxSHhgUExPbmtEbTJrUmZpQV9gOX5jPU9oJW9zT1BYZTB1Jm5kP3Y3XzIzRUhTOGZ6NylvLlpIWUQ3KDZXWGFYcHtNQHIlXi59KmZ1RnF9clVpMDFZNjIrPmhAaVhiSXkiSHxVQndfVUJeZ3VEYnBySkJoey59RnxVQytpZFJR''@;'; put 'put ''cCxOayVwVVNaeCgmMHQxQTBhNXw2SX5zc21JQTJ4MSpUMVU7blVUQndnK2tJX3U+Ol51OXJCbFp8KV1NYUlKfFA5SFsrWHpKNWlITksmSDVkZ3c2Jj5Pflk+LHJsWXphVlA6cl1rTUE1VXQiV0M5czNTa0BGYytgZGdHUldVYW5qO2tTfXVMVz5NOGluWm9yRkEmV0leeHRlaVc/dj1IQlJTKiJu''@;'; put 'put ''PFhbSiZkd2B1dk1Kdl0jWj11cX5dO2pNIjRWQCFKcExheUhuejUyXSlOInNqNGNhez9BMl11WkNgfmA1R1Iuans8enE2RkkuMUU8N2RFVDhgQDApU1IyZF95YmJqbU89UyQrVXd4SDhbQCQwSSolaCw3W2tzXmQyc3hpRmBsQmgoLkVqb3ZoaEpVfEVHQSFxPlhMV1dfLCVNYHNpZV4pelQ1MVFG''@;'; put 'put ''cDRVVzpEcjc6ZFV9flQpdCFqX1FnfixtcmspOlpBMiR8KDx+JFFkYVJxMDJ4MXwuYTprN25fPSs2UjFPLHclUVsrVnpxInNqUnowOyVEVFZLfkIzVkEhdUdBVWJ6PjFYLGtVT3QkbHVRIiYrTy48P3ZvWkw+UWV6VTVkbExSZyFWIz1VVGMyMnh5TEBCMl1baVVqR283SS9Ka2EhN0slQD8mSH5u''@;'; put 'put ''Zl5ZKV1jbFFRIX0+d0ZYRlJlME8pc1ljc3lyPUJOQ30xZjFId119SHxkc3kvLHRjL05zbnB9SjBeUmo+UU9eNyRTLnNKdVN5PEshSTNnKzovKiw8UUZCMEQwbWZ9dCwhMS8qe1V8YXlXRCJOVDomWWxGQjxVVSN4U0ZGYFRJNGU2O0hNK31wNDZ7VU1UOS5SVyFlRUp2K3EoPi5gPSh3RjFPMmdp''@;'; put 'put ''bihQVjZpUCZMUC4pWi8yaEV3O3QxMmolW000OShMOiZiL3hldTFIb1cxSSVhTTc/UUZiZn4mcn1sRFU5JSxbXS9DMjI4VkJtTjwpYWMudSxGUiRsJEs5Zi83Vn0uND1TMkJ1ZnY7YWp0WGlFN0hCc3M9PTJ1Xj1NNzgldTEjIWhOUj9bVi5IbX5UNWhzUEZVSkw3Wj9jYTQ8VWJJSV8rQVY5X21y''@;'; put 'put ''RUVBPFQyK2NNYnE1Mys2cTBSKG9FfCQ2SGRyclNKN2I7TH1pIj4iI2Y+YmNxLGwwNztDezlnR1VsSFh4cXFwYD91Xy9GPmxndU90dEVeJjBxODZAQWdCOjI4c35BP11jYHoqPHx0U21BfnQ0LldBYjIxSHAsV0tGbGFaJEw8WHlgaE5lTS4+NXxtW3FBTjVrVmB7ZnxoKH0oLE10YGwkNnNWbHs/''@;'; put 'put ''Ol08PWYlbGZjS31sMWovZXZSNVFJdU52ZERaIU9iPisibj1ZNF1tPG17eHMsemp9aW89T3UyYTAzRmM0OUhVUD4wYGp7XklmYVp4bFJzKTs8WFBtMTUrUklpPFI4b18vd0ApbEVZbDY/UzxScExPeCh9SF4/T35UQiREWm9QXk5fd1hqbHlrejo1ZjlRPGNjYj8+cW1MRHU6MSRXNnYoR3QwXWEs''@;'; put 'put ''WGNvPGh8Q1dRLmZWIjp6YFoiRDt5UEZ0JjhObTZfXn5WZExpcCRxMTFtZT81RE9aUDAmbWt+aW9QbjY1MUo5O218LFRUX0JgJSFTO1MmTVEuNXkyTXBWMEUvb3BWPkZoanRTVStdL1lOLisrUCVgMnBKITlBdChzcjd1eTlkQVQ8TnR2cU9jWlk8WTIra1ssMVNxay9nVlg5ckFJKnNHR1VaNVlL''@;'; put 'put ''YS45PVIoRzYlalZzd0NQNClubkJ7eDV3a2BoV3o/UEpmbGcoPEJ2QlIvRUc7OVs+Y3U2e0J+L2l4NjN8KyhHI35jWnw2OmZjKEFPW1N3Z2Bee0gyOkEkNXZhKiEqaUsiODZIXV0rK2RpfHQ4P2F7Z1RdLlI8OlsxNTJobjArUFtXb0FXIm9fclRQPFZ0fmk3NV9tOktmLlszLHlVeixSWXhVRHk1''@;'; put 'put ''S11qZSpERXVJfUFYNGM7fT85ZCI7RXR4Wkh2Y3dbUFZwbCVAYmsxMD5jXmJWLntEQGkld2V+JEljaF4vPXdjX1g/UVlGSS9qS0g8TigzPz4zdSxWcltpXmsmYjZlQ2RdeWRxOTJFP0M7bzo/Z0QpYilucDwjfldoJmE6Q1UlRChWTSUqJmkxKSFeRE5tNEg2eX1wTzAqaT9PTCQ5elB3WEE5ZHB1''@;'; put 'put ''YmwwNVlNRX5+P3VPMTRPdmdeW29YMkxlWyM5QU5LfDBkbW4lLkBgZio3dVpzIi8+PnxAcnwodyVZP2J2TDpaJCQ/S15sQzNhIyZlKCMqeStdVlBVQ2BMbFRacnEmO0RAelsyeXZePC9IMnxLRk1WVD93eXAiL2BvXVRJWnw+ZGR7L0o2JjNDRTN6QkU6TF9BQFlrZFA/enZFQ016U2lKJFd8Kllg''@;'; put 'put ''ciVNV152PEN4bTFER2ZSem04Iz1mclNsR0w5b0p0VjxCdkx6UDhYQyUzR1N1Mk9pd0VgZn40ViEzW0xjWnNfdmhReT5IYXY7WCFFcTZoVjd0RjJfcHVwUzNZTmtaZz5gTXJqNkJ0MjV6YV5aXj5gSDhLbDE/P1NGWGk1VUE2Y0kyMDFKb09gR3VDVWY5Li91ZldGXWBUUWJLcjxWZExLKipaemYo''@;'; put 'put ''dDtjKm5XY2EsaDN2SVVPNTNUfDlPdVZsZkkyUWcvOCpsU2NvMz1aXi8/UEdRVXlBKkNzKWsvIjYwfHYzVS9pYCNVfGpJPzglNGMuMiUuO313QElabmp0PE9ZdT82cV95QzMsX3Q1Mj56e0gmVExVJkB0KEd8cn1qbD9qZGU2eHh1djswMmZaY30ifm52VHsqbXhtNkxzRClPOTNGeXdFPF5NP3g+''@;'; put 'put ''SXZ7W1ldInk8YGBBI11zYCMqS3R2UnUlRVlzMyRVV1NwMT4lM31yOylzfnRLTWlLJT9HKFBdbCJzUyswKUppQllnY0R9OmR1X340KCI6Z34+YVdKLjxiKVUlWCJDcmlOdzpyRG9KNjZDPUJFcSQhQ09CS1FZb2tEV1FYbXtsW3Q8PkI1bC5ERnEmaThwX2xER3pUOncrTXU1Y3A4YHpKLk06dFtS''@;'; put 'put ''cXVMVksmYTp8fitlaW4hYGNwN2Y6Mk97WW5pJCN8K2M1JT9JUzNyWjEofT4qfF08JDJkXVNRYj1veX5MPyI1THdwKzo1KmhTZDc/MXxHMEM+LztxZCQxZ0M3fjdlNVkuezBjVD1uI0BmYHhweVtyT0dvTWxCXVV4cEA6XXR6VHo/dFBFMXBnK20yXj99ayp8TUxRZEpoXTFeVTZTPDJBY3U9ZDE2''@;'; put 'put ''OVVtSXJrZ24lIXNtPEd2VVprVyROZkN0fT1HXih2Q3MmbkAsUXtZN1pSXmlzIzRFaj1yYURrUVJkZEwjOXRHdkp9LyJSJSxpMVMjZk1hO3NqRGQ6dkk6MFM+KzhheShxSTFbPlgpdXlZTlJ1ImQ3MSMsL0RQXTw7KV8xZ1pUdGFoYU5seXFsSnZvLFhXRHt8VnheeFNxTl1hLFB5VXVJVi42QDlx''@;'; put 'put ''MntoMG4ycjReWS5XbUVFa0J+ZWkwYUt7dmZtPWYwKCpYXmV6bmtOeD4+anxjUV8yKGwwaGt+QV1PSTY+Y1JNLiRpLkM7PyhWaVMsOVcmJkJ8c0dNU2szJDV5c2F9c00wW1Z+NXlCUiN0LGAlPiZoPk9yVyJQOlc5QGIuVURCcnkpRE1WTnB6eE4ldzlReV4xSjZJeyEsNlFFTnhWMERhTlY/XVFG''@;'; put 'put ''VW43eFlxSU94ZWxKZzxDKG5laX1wUk9lQDg4MFFSTXh5Om4kZn5SRDBqUGdzR0A3XyZ4NzRKIVJ9NkBqL1chaGtYKk86VG5DTUpiV3NJaG50Mnw2Sl1SfiJxdEVmbSkhJlNFZ0tKQWI8RlR5KFBMbG16I2Y7UGVSU0RCSX14NTplSWc0WDcmYz1ySygiMUksWkRMQkBuOTRxU24qRkE7cDd6NmVU''@;'; put 'put ''MWgrUSRiSDg5dThjKTpJMyZxWVY3NCQhKD0+TFsxczhVTygpbXk+QC4kIWQ5ZkRjTDlpKEpXM0EpQ3tyW2N5UkN2Ny98W2B6IytYN0w0fkFsZUxsQFcoIWVfSEJCWjAvS20vVGRROkAwfS9TfnN6LDB6d255bj4remQsamMub1ZVY0c6SXg1TUtydF92KihpPjdAXUIvWkJlJG1JdU0kQCopakZI''@;'; put 'put ''c2t2PFMhVGVPQ11OW0hJQllfWHFvZFAxSyhGJGQoQkFoYkU3KD0yO31kYzB2ZTAyPTU0Rks+MyNgfVE3dnlTIiwjMEMvcyRzS2JjcHwqY1lFLko5ekdfWmtYbCEkPWAiOi9VYWNNOlRWJi5BVU4zInRQWFF9ZVImRTdGOWFAPFc/L09yUSw6c3FfdEEvTUg5JUt5bzYsZXdIfmNXeCUoVz1CKyQ7''@;'; put 'put ''Tk1qYmB2dUlnLjVGQy9qRnZZSnZGempOPzA2U1RgWGNtRCV8OXw3TkQheEhML3Ykeyt6ak95MmhIKGU/KHJMLE51MTlfSD8yeU9xJnxrLzw0eEs8bDdPOEs/fT1CQ1daMFsvSGRCJF5HOGVhbH5rJC5OcW9RaiFAbHxJMT9mcUtgVSV2cyVaVC9mSWkyRDBzUVtHQFEzeDB4UG0qZCZTJHE2ViZJ''@;'; put 'put ''I0tKUDpOeHQ+Iz8mOFVXITx4Wy5MQ001aHpyeGlIWjpScVhvPi5oOEVHfUxEMyVbUklzK3JCV1NienNZcENZZCNfcGRBaSIzPU9LWCk3d2t+O3FsUyh1NGFBdSYiK2ohO0F4My9sYHlqTX5jd1ZqYyVLTHx4fUp8PElZTXd1bXddLCowV29tWWB2eFRZSFhFLGR+TCozVEtgIyhNeXt+SD42WC8p''@;'; put 'put ''OGJjanUiMn5pXU44QjlFUEUueUplNH0zU1hBaiIuNnJEfjBfXVYpTjduZCNrIy8qdz5RZjMrITVRW3k0bXlYQW5zVz97cFBbMFdsazJzPmtsVGpIVjdfLyVgVFEpWmRQOkJKYlVvXXhDPSJzYVhFMmpHZ3tlSVhAeUJvWV5hMXQ0LlJ1WWJ5UH4wX11RVkRsa1NkWlFQOW9HWWA9R3BzIyZJVF1s''@;'; put 'put ''c3MkQHxZYFVHZmByeXc1RCFbUD9SS1JeMkR+PXwpLiJ5Rylfajo+Pn1nU1RTbzdfKGNBZndVIW47PEojbkQ3dXgmPVBaTng1Y1ZTIS9NaVlpO1MxcUIveFI2NiJSOm1DYmpJbkc5OGp7eCVYOjtwU3s8TCs6QlFeI1pjfnRsaTRAekFLYkpFMTlRLlRGTnQwMEd+b14lfEhLalN7RE0sZmN4UHFk''@;'; put 'put ''az0lYClOY3suanNXbit5MFYkRHh6V047OHU0e09YOWdtP24yOSVbKWc2Yz8rUzF2TVtXe1UjX3pjLEoySnUqW2t0NTNpXWw0ZCtJREwvdVF1eFdNUjM/UiV8K3UhN11aOSZbZTNMaCZnRV1nSikvKCZbdkxEZ3plKXtJJnc7TlVpNllNMiVIc3tPbiZjdjFlPE05NUR0aip3Lmk1eH10LkF3LndP''@;'; put 'put ''S2MjSEBtV3w8Z09oWVFDRHBfSTlqcHFmQXB4Ozc4QGZ7bnRaQW0yPihme3JBOzNfcjdmWCNPK117fV04IVBuVks+YlZqUE1xe2w6NWB8JnUzdGx9NXpPLEohd2p2N0k3XVpRWlJxbTF3TyJ5NUxlXSFnY0RzPH4qSHB6WT0vdzU5U0Viaj9TMlRRRC9mZDNaLCp6dERCI0JIPHtOPGd2dzVZYGgk''@;'; put 'put ''NC9JXVkjYmBNVm5fI2l+X1FpWGFXZl51O0ouUGQ3O0QmekZAVmBBZ08qT3pXQmhvd2wzW3V8JVB8SS8qZGhXenNGPl17TlM2XzJSWDJZVS8+W118cl1wM0goRzdzJWFNXjMxJDoxSFp7X3d3PjBRXlp9cyQuKiVKL1giRSlxLy8oS0QmMVIob0c8RlNTRX5KVC9FKz4keXVeRXcxR3Q1JWRDYUZq''@;'; put 'put ''KmN8VGJla0t4bCw2YH51Zyh9WTBhKHBmU0NSeDt4NHFqXj5ATGcsLj15Nk1gZDhjOXtGfENUO19oMEV5e2lENilzQWcoaD5dSikjR2FENTdSZEZ6bGt3SD4jcipJMz46VVJAKSVBZVNbPSF6LGpmW1BxYmxfMkNYQ0MoQWFhbTpZdU9zWmMvKFtKeDZye0VHPEAzb011TSp0U0Z6PSRsJXVCYUhV''@;'; put 'put ''XUpdWkgwNXFSKDRzKFpKLmhQUVRAclZpaHROfkhTSVdjY1k2fk9TPER4TFBDNjlpQiFrZ0J6e1J0IkM7Z3N6SFFVRHc3a01pOkB8TDBMPjV3NzQxUytsKS5xaWB+bEBBSls4QzdxJTJkLD1UUE4+THQsTzVFTHtJV3E0dD0jZi91U2w1ZGB8KD06ZiR7eG1yUzpfSmt1Uj56WEZJVzZNbHVYeT43''@;'; put 'put ''bC42Yl8jJUVjUyhgSzp5I197M3BrU1hvJmNvJHlrbmY1dShrNTQ0JCE0cDVzfSltYW9GQlZCazFxMFdbaiI0aihrV1g6RWJWNCtpJnJ5OllTbiUpMDtAOGV8KGdXLFY7PCVULDtAajEhKSYuMmRGSXElR2kuYT9HPmAlV0YodVNNMksrNkkqWlhpUzI6VHZXZXs1Sn1FRFVrallnaUkoU2IkJStR''@;'; put 'put ''KURTcDFXNEJoTjcyPTMkIV8vLHg7QFZAaHx3UHo6fTNUaHQvZXZJWG0qbTNwRzdKLmFSRzUlKnJPP2RaWTJ+KCN0QyJPeDhlOHdfcmpzSV4uIypMdGgzaSU/M1l8Xm97aVI9K34qQ3dUYTZ1cVcxK2ZmdC9pbGZyVk5mcW9ZUnlwLCp4YTM1V3xGSyVSeS8sREdJMCole1FFQDdPb359RUkldCwk''@;'; put 'put ''TC5vOmNqXjt1bWcqaylPJEtUP0sudzFMJl07MSQyc05AbGUyeykuSGZAPmgyc1kpP0R9bDhXdlNnaUs2JjtBVmhOIWshW1BTN314b2QqQXEyUjNSfjc8RSohIWBbcyErZkJeWSQzZ0lLNXtNUTVZUyFQQVgvbE1jenlKK2pSaFs4NHJFZkxkPHAoWytNNHhWanMuUldJN3l6Yi87Qk4/Nn00WSR2''@;'; put 'put ''UVM0UmphQm9kcW1UK1pFenA6Vmsld3VLKkhlek1bOHFvR3k/TVVAUSx0MWMzKHp+WDJpNyt8WyZqNSpvKlJ0fn5VVClTSjsrbl1iQDpiZSh4RDoxREFLP0dGc1B7V0ZYYmhiRHpIaGV7RVNHbVtsKyguT19GK2laTGdmQGswY0Z0P2lwTEBKWEMkeDEjeDUhbjM0KGFhTDNBa11WNjFoPypsUisz''@;'; put 'put ''SkNBc2kpNzJFcFF0cl5Ga3VBd0x+RVRGeWVaKzIoPyVONEUjfFt1ezFfR1BELl86cm5GPiI3YHVKbDlpQ1hBayF+PkFSMXkhNDlCQ0ojZWJ4Jm1VLzNtN2RBdFpxO2dubUk0PWIjb3VLaTpjbGZtTmJHJDpQWXxhciR3OVAsKGc0djs2OVA6WyJUczNYUGQrX29+eVVCSTEpKVU0Z2p7ejtPVjYx''@;'; put 'put ''TWwjUUZbU3xXcFRiV3ZaZXA7aGwlS05+ezM+VTJiX25bMmtPLCwqR0RaP14jdDVoITVbdk9ySH5Bd1Jnb2xHbn0zcF5peENAVXdxVDJFfjU2U1BIPTs0VytFKHxzOUB8U0JrblksQjlfPThbZl5zVGlkTkF+Omg+KHVbKWEvdWFvN3hiTHp8NCE6di9RJmpbcTI5OkxWTnRJYEVHRns4QTd8fFdL''@;'; put 'put ''ITk0K1I/b1dAJS9bKSRGZzNYZVJfUDY4XmJyZ0FxNWwmbVpBQClLP20pQDleUEk8aiM2aU5uMSVoemlpKG9gal9EJVhoYDU5dDhjNyZPJT1SdFJsaW9IfTt8eUQ/MjZyWmpsL0IhaEM7OHYwdHMlXzAheDdMTTtyV11HIlYueW9GYSROfiVYY0ddSiRNNnVCJigpUUY+MHsvInMqYG1yLDpEYyMm''@;'; put 'put ''fmd8JDBXQixHMDpiSSt3KiwxTGZtaFI2VGkqNF5FQHtZQ29+PyNNQVBSdUk2NCkvVFteJmw9Mnk1aEBadnIvKzh9a10qZFNeJkImTD1BO1hUeiwrWz5XLH1ubFIrV11lfWA6MSY+MU5YYHBpamF2TSwmKXh5VllMbCVtLHFgKE9ZPVVfb21lXzNJa2U2RGM3R35Oe35tOHhDOE0vLkJdSiRwdSN+''@;'; put 'put ''JmE0QVtnZFcoQzo+UDs4cipLNkNgW0hsYD8+cHZMYko7I1huMlJCQDk4VktEKyVvcXw7akY5KEBySjdoNG08UCJhdnRLSW5KcFNFIVlleGhxVW5ZWCQ2I056e2s5I3FWIj9wQVtrdipiQCwqd3xeVnxCfS9oT3dRdCZ3Zzlvc1pTJlgieFJ1Sn1NYEw8OX5VZFFHaztCL1MlV20uUWBtZVdWKFhk''@;'; put 'put ''OnpXeSQ8fEo1RDdmMmFMdFBwOWd0eXd5XXwxUHRrXlE/clg7X2pEZGA6biUyJD9zSzd7KDxENX13JjtTZlR5PmBULHw5cFl9UHBNY3h4dVFtfTAoTERdZC9SSWRPT2xBOH5PKSZlUm5ITCpabzBBJTY7Oi9jS3lxdGgsOX5NcTpMezlLajtyc0x1USNRSTlmWyU3dFJjeEJrZ0V1UXlMKHZWbzM9''@;'; put 'put ''ZzQvcF1rdXo8LkslcyNqejgwdi9LdUA1Rmo2T3lVVyEqI0J3MSFaZiR6VUh7fVVQVSFCbCNTUzpbW1dCVWFRRD01dTplSF5XOCxfV1VNMT8vSjpqdmNHJSJfJWB3RmFPWmdVKzt2dTk5Mk9oITF2MGsrZkZeT2sqRVdXT3JYVHtdJiJCWCRoJD9tIT1tI0J0W3hQdnN7KDE3fTVFcCh8TlJlM1A4''@;'; put 'put ''P2Q4NjpIZmI1KjclfXREXzBgb1I8PF8rNVdAOGtPXkV1QXxXQGVKb000XXBZRks2QThxRX00V3Z9YXRkQCtMd0p3XT9NL31NL1VCc1Vjb1NOIj57eCUyNEwyQW97dW59dkZqe1VaRU0sXU5Ddkc9Ojd8UWQsS0tIU1VrPStBOnN0MGMjW05YQzFeaCtHMyk/RTx8WDw5RjUxd2coYVNTR014aitD''@;'; put 'put ''WUhmIUNxckB2cUdWJFlyTXdVUFhGR1V8YkZgNSUxNmkkOzRMcDUuLmh2VjxhZjBYcmE/KFpCX0pGRUYkZy5rSVB+NDpBR2FyanhSfTpvbnJgNihwaCJOPnpYMURUOXVhOGFLNjB8TkdJM1I9WWQhRHxWOyRTQk9ecE1FPU8vMDBqcE9weCpEPm8rTFJ8VlUpQmBTe0IqYTdbeiN4N2UiRk06Y0JA''@;'; put 'put ''SFQxRT1JMiZoWXJ5dHFiVypKWDosVU5mO0EiXlk+Pi9fJE1dVnJzU3M0KUF3OG1SNyF7b3ZATWNzTmZ5Q2d7OFQuZFZrd3VOcjk2bGFpT25OeVBCWGVtUSRBTVVTYE5NczRLI2tXfHtPX0JIYCpuYko/QnEuNjJ4NWN8aVMvWTNaZHR0Wn5FOFJGd0hROmI9NytrWz1nc3JqcnE2OCVqMnhnXWl1''@;'; put 'put ''KWE/dldESFBvVX1DJHoiPXRkfl00clI2T3Y2fm9yPCw/OGN+Ym5HI0AjVGo8RjQhM3thMDkiPlM0ND5KYS99ZTZjQFQ/Z3wwVWhSUUZMYy5CNFU1L15lI214ZDo0ZVZiR2Z4WUUsOXhCQUJjInFKc1AvWWRCNllALCk9IVA2VWw8eEZQV1lBNlV5W15VOlclN2d7clt8QCkrbFZYeDFlTnB7LkQ5''@;'; put 'put ''KjpSKm9RN29vcnEhOlNpQWUjS2Q7SltKIzFkfihuUFYhbEhMXl5Wa1l1LmJvXTVuOjQ3UWZfTDQ/O2o8WTAza1pBL10zZmJlSUl+bmg8OHsrOkpwJipgWCs6WXMzVE1pNCkudCJwcihtMUZ3Q01Pd0Z3Q1IwKkNEQEVtKHltZ0BxbjZdITpXNlZFXjpAW2R4SEpeaVFpI0lPRnhfVlJifWJMYC5T''@;'; put 'put ''a1VoVFtMbzREbyJ8K0g0QChSS3xSQj4qT2daY1h5aHJ0cEdwP0NRPFB2VmdiWjomZSNMXUZSaSNkS2NDRyRoWlJHPl9+RDd8U3B6Q2FoODdbXnZ5SXx7N2A6Iz9dW1JVNmtsOmtgeC5SYyw/MGF2a21Ya3FJSn1aPUYvZHIiel0/PnFgVmIhNVEvJXdJdCwsLj1FVzxyXlFOL084Sy5IOmN1dz5F''@;'; put 'put ''NGt5YiNyXVA3WkJsVEcxLyleZi49bkI+ZDVVIzZ2cyVVbHdkcCsyZWtJfVpGOF9PUEd0fDk6Rj9xSHh8UTJ6ZkxtUlpES0t8ZEc2Kl1oPlR+UCp5diJAZyQlSl5Fd3siUWN4c3prKTkqbltTK3o7ZiRsNjtgVGZrcDpOL3ZRUGZ5bC5Sa3doLytUW0I8b1ouX1VeKipVYzEqIyh0QzYhSDZRM0Jz''@;'; put 'put ''Ojx7ZTZjPlpeREEpPkU9OFtsTE51dkguXktqTTA/ZU4iMVFdVi8vWW85fXp9dXIlfjV8XkBxcHAmJUFvYlRQPXtTX3wvYHh9Wzp5XXsweCMidUIrWHVMXUNLTyZLaVVAeVFkKHFLZlVPZ292WEs+d0I/PjByaFooc0lWKUJYUmZXZT09XSVYSy5dNmdSXSNTJTFyVm0hZyVlPm5lKS5nUl9CeyR3''@;'; put 'put ''JmsvUDBDN3NLL01bdXVpcilYMihiLF5HZzNvR0VdYigiYyk7RWYkVm9PPzRXUldgdWhjKWJdQ0NYNmFvWmI2PkUjOT96S0Q3XS5IO2Y1eTEpTEooZS49YnBsM28/SlUrVjdoOHZuQE00Rmw/eXVbKUBAQyspcGBfYT11WiVwNURsPjFeQF42aTxramc6PlBNWn4zKGt7YWNeVF1AMWZkfT44SEZj''@;'; put 'put ''RW9rSUJvYW5XdSlRTlEpM0JdZHtJVWg+Ul18KD1iR3hVJk4wOGRVPXBUYihkTWh2NThZLH1leCUwdl5dZGMsKF8vUSZfV09HfCl3VURjIjdZe0R+OTwkRSRXMlRYRHR0YkwmbT9iL2FqdXhmOGpQfkZ9MnA8Ozc0YVhTZF83VSkpSi5FMC52YX47I2VhfmN9eTJYJkIwc1RGb2JVYitXPXdJXld4''@;'; put 'put ''UVlbdEVoYUBsSjJ0ZXg0YChVRl54e19ebVVrJUg6bV00c0hCPCZkNC5QPjJAcmdMe1ljSlJ8LlRPS21lY2c3IXx6SHRdelVeN0I0Tjkxey49VStWPWw2VStROCosO2lAQkd5R3wkZW9pYFFnUFYhRD1dejJsSUhQXW1mW306ZT0oeFJ6ekZjK0RneSMye2dQMSREeV58L2MvbzZVaFNOd0ZeKi8l''@;'; put 'put ''ckYzY1grakApQEs0fXQsbXBDcEJyMjxeZTRRJjx2Kyo6UyIqLik4WXNEY1JnOj4/aGY9TkJ6Z2IiLEZ9WHtzSXlJfFAmL35qYzIqeWpQZip5WzJNNG4xa1pPMzcsP302ODwiK0dUITsrJWk0P2Eqe3VIcWdeZl1wUlg6KCt7WVlkLDlsbCRUVklePVRSQjo6NT1Mck5JYzc2IShIZCJJbkhOZzc5''@;'; put 'put ''MWhwO0glQltMMXlCK3plXzdzJVM3UVJzMjN0MG5SWWV3K1tCfChrUVRFd0EmI19QXnAlRH4iKVFUOkNbWzJvV1IqV0RVXUNTcEFAJilTQDs/VyYhSkIlVmNxaHZMUSRSOHtjM3N3OEhvRlIoXiVQK1k+Z3V+Y21vdyo7OytlVkoiVE1CM3p1PTI4Mzg4M1JgQDAvIjV2SF5VT2VgMHckZEIjXVJK''@;'; put 'put ''dX5bcDZbVlhjOW1VcGNpeFh2LE1xSk8/OTNbb0JrN1g/fTBRe0JJRkZoLiRhZUcuWUVGJG4yM0ozZW9wcCVUK3NyaTJzJih8bDVsNlpyTk1hXj5kcWs9ayVmJGJDXVczcjRPLG9COkBuOmRjVDNSNS5tblRlQkBNPm59MT5wJndQJXROOztadj9KUyZYSW5lOEdKWT5XOFBydy5ZclJ1U0swUyQu''@;'; put 'put ''YTJmMGkjSD5QTWE3c31gTkQsPklTRDlmbTt3QXNdcl5Ram5ZI1gubXFSJiF5W1B3KzlERSwlQ0wzb2skNCJuJno+dHBLclZ0RGxEY21zc3NWTkwxa3ZNX2t6dj0vTU1MeX15P2BtW2IhZ2N5Tz9YbjlvI2ZbR0FueUB1MCxJOlBdJmdlUEo6XVs1XSVbVEBWaUNdXTBCc0lYWCgjaSxMS2hEemlv''@;'; put 'put ''fl43WjVVfTpEWCphTXUpKmo5PEhfYXckKjZtN1V+dnNXK089ZUlPVEkpLDx9ZnREPzw4MV5AfTpYKiE2dTtYKnF7fjpYKkQ3bUhVZD9VamxSYShlITUhcDo6T0lxU3VFZl5IUDR1KTFIWlE7flAoezU7XWAib2IyIztNRUw5RG9STUpZZGZ1LzZaXihfWiFTJkZoelJkOCojZV9TdSZFVHhET1Ms''@;'; put 'put ''U3Z6eU8sLjtkUyxyZTdlTElrSnBDIihJUnwpI0xqKDFyWSNKIUpSLDM0ZVNMMExsJD11PE9Zb28zfjc+dW80PzpedlV1NEd7KnU9PEVKSG5ebFIrR1EhWXdeb0RCJlYqKVc2ZlhWc1koRWEsPitrKGpwIjd0KypbQHNATjt9dmdyQCVfaHI6PmVkcENQIWl8JXZwUV9FUGwma2FANkZqPTxwWXJq''@;'; put 'put ''QlBYRnF1U3JLXlY8MjskJWpFXVlELlVlSD1+T2wzdG1NMnVsa15ZbUY8cFl+PmpDJXh3IUM2TVJ1alsxQi5Xam9iRls1TE0oYilLfGZFdiZSeEVTckxwQCxgOCxXLyw+MD13PVNXLFZLQFp7SUArJSNzUiNmeWtrSloxd00rZWQmWDspeTAkZkBRITY8Pk9DOUx4cG1TVSZ0NyZ7X2s/P3ROa2hJ''@;'; put 'put ''PG5YdXguKlpFNEVxTzY5M2ExMV5qeXpqSl5NWzMrRlZKN0tLUCNyNGRAQkJnIzVaQGphJj9TPW84dnFMZk9bJnQwcGVlbDBfaCZGIVZwXktxTmRdNlI3RmQuI3l3TSs9IT9lWm9hPGxWI2R5Ry5GOHRRWEVpR295fCNkK2RFYDxyMkdBJEZtRyE+eXZgRGx1YklqMjMoWUtxP1YmVkVgKG49OmRe''@;'; put 'put ''e3UiSW9GQEMrS0FQXVtrXTdDfTd8eF12RlN4LHh2TnUqRlU5QUx2fjQ5TmVsMyZsVU5NfnojQWJHdnk2MS5iMihKZF1IeGF6RFVhNXxZV3F1fn1hfCpXenlOdWVxRmRmPywxTE0yTGE0Z0JpcTheL1MmPmdpZG5gUFhsOjY2YnImdUd8MDBoeSEwR115JkZtfC80Iy5kQ1Y5TnQzVStpfSRAV3gz''@;'; put 'put ''U2Q4IjVLdlsmU1lEe2txX3d2T04mdEZRci9kfDZbJnpsLHElS2h5JCokU0A9dFpsX3h8NDMuPm5pTXQpQy56QmJULyFlMmk3WlFKM017bWQ5VElWTyR2M3NQc1JoYFAxfFYyeEJHZUtReHwpU3JKOE86ejhSeE4lOmIoSjtedm5nYTpEJFRmWV4pTUlPfCNrMWV6fD9kXU5jQHBIVk5GdUokYGtw''@;'; put 'put ''KkFqcklAYiVmWC40Ty80UVgpcEhBWnRVTDxteVFmO2poMjNaXU1AUD8wX0R3NVpUbT9RR3tGUk4xTCkzY0Y+SEx6P31wY1djW1tCMzlAe1JSNXpZbTpeOHJHeFZJR05oaVU3dTspND94PTU4dy5EZnRZQkp1SjI3YDY2TEdfeWtdUU1oWjRmYSNCP1VxRHBsJGRsNz55bj1YfU0rUVglcHFTc1Ev''@;'; put 'put ''b1Q+MlY3VSo2YlRIZ1RKUlk+JTRDRm5jeDpdRUUzM3duYHtAbHQlaGh6Vn4sVFJbOmIvR051Tz5rRTIkNzZXUFhWajZDXTtSazR3VF1NO3ZMWio8QEZXd3RObCRpI2QheT55c1k1NzFjNGdhX08xOTdYK0lObFltUXFSeXY5LjpmKldEeiw3RGRXWShmdXxvTywiZnpEZF1vXiEuaWE1ZTs/MENT''@;'; put 'put ''TSsuP2dHZWVwelR6MXRuekRvdSpKS0ZUfXxCXk0oOl5fOmwvIU9ne1NQPnIqaXNoNCFxbTE2Q3QiQDVmUURpaz1HSllTd1Y5RGp5R29wIkJTejBWRm8uPlM8JkRuYldIVD4pdHBkZHdKUUQle1YxS1QlSkVwMVNHIWtIVi48UkZTRzN4KDRxSDRoSi49OSFYOmJeITl0P1Y/eDZqVT1HV1cyViFT''@;'; put 'put ''akhIVEZ+blpBVl9YTCNYWlg4dGdTblh1L01zKWJbOUxbVzdoKmdBcUN1V21RaVREKnwjU1J7P3lXKndUfEVTaC8yWDtMNzRPbXdLZi57WFksZkZYW303c3khdityNjN0LE1+dDxWX1QjQS5fcGw5aEJUfEhuQXVGKiNPZHkibn4kWXJBPDVFLE1ZSTdSX3FRPVRhI1QsR3FDe3RxUypCcD8sYyUp''@;'; put 'put ''OEMjdW1vQlhDIjw6YTo7L3xedTJmWmNlNyp8ZHNoK11hRnJQOj0sOlZxImF2YT9hdVZuOSwrb11PXWRpZ1Z4O31udVp6XlYzVWdUWX01Q0pRT29waE1MMVkjcDRmTFd5XiFMbFRVR2ohYlNHbS57KWFAfG59JF0haGV8UDYvJnNQOilPPGxvIS50RzFna1FJR3klcnV4USs6aWAuW1V7ODR6aHtl''@;'; put 'put ''NXYmfXgxQy94YD50LzlZWj1uOUd4TCRtcmNJNFdROS4may5BWXhkcmM/QV8zakI0XVtaUVIsaz5hQE0mOzNXIX5dazNAXlpqJCRCfGklKzM2aDFCK3whMjVuXVUoZGR8KUtqMCE1RHdxNlF3PVM9KDcxSlg8XTVTeSo4Pjd6VlY7Zm5FTFtHWkZeZHNMJjAwYj4yPjd2QjpxRlZBZUhgd3xlI2hB''@;'; put 'put ''aFBFJSQzYCxvYDdrYEsjVm48YlRRU2M0QVVLM150OFEzW1RaQGczY0daN09vJEp0UUFpJjBLe3UjTEkwOSpRfShIMCNSUjQqX2RfcHk/LnhrYVpVXihVJCJPNzo6Y3JPLD0pZm53Jk1ScWx9aTR4JHtpIVclc1pec3RNe353eHowbXAmMG1iJE1nPFlgUyFKbShEaXljWyR0LCYpVF1nQCR4SSsr''@;'; put 'put ''TmsxSihUT3ZibGkyPUc2WzV6c0UoeTRgeyYlPyZeYWBTL2dtLjleK1FbcFNeUGhQNX1KRCs7S1BXQjdtb0A2O1J0LlpqdzhMe2s6UztlLjVKKTs9Kip9TSQ3e3NPSDYvV3c5amJwUnljaGpIU2deImdvOio7dSVDX11nRihTYm5gZm9PMnxwcVI5VzRUJT5eKy9QLng9ODAsUlNINygiJjFmJTB6''@;'; put 'put ''dkRrdlJ8LkdVXW10YUwvJX5vIndwJT52OWwvbyRGKGMkKE5nXyxJZkRIMyV2a1VOPjlkMXxPI2hIWnU3MGBuVzJpezZxbzRie0xxSjlQZFtla35vVS8+N1NdbEwzYkt6YHBwVlRwdCVKT2JbPTpMSXY0VH0kVSNXcmBXaClnQS94d18jVl8xKnt8eH0vP09wPHxzQ2F4WWVTcWg5US9Dc0AkWlJO''@;'; put 'put ''WXlNR01NOTRaPHlkV0VmeGlCWjZ1Snw2QjopVVs9aHFNMD95fUQ1dzhDI20hPCJxSlRiZlpRLyMwM1didHAqNyxXOk9iTFJjM1R+RzFjV1hAPEdgKTlNR0UrUVttNDJkcnFEUC5Cd2d2QChrRENjNXREYng9fXYpLjNeQU0rO1E8RFhEcnJiOjJ9UUdpIkpFWTsjKXJwaTM2PHF8eDEkeVosSDVQ''@;'; put 'put ''WSFPdyRaTmBiTnYrR0lxYGMoVDUueFd8RnpfRnBvP0wxfGhuVkJPKFIuQURjZzhtO2k3bSJnaDN5OElSMzd0OXlVJHZOSXs2Tih6LC8yTEdqUXxjZmg3RSNxR10vcDtPW3ZKJEhUfkdncU9pXmJOYCVuWzM9LlRWeCRoJTd+VFZRRiNxPVBwcDZjNGZaODt1TTtHc0NQalpNMWI4TnpkRVVmfl5r''@;'; put 'put ''b01SYTFJTmNGcyhiSnRJWzdzfSpjbVJ1aSIqSy5HeVUmQi4wcC42fVVdXmcuV1MsOXB7aUt3Om46UFhdUFJ7d3pRdXRxa2BCV1MzMG01VjhhZEdfe3VzeHpFMT1ybmwxTSoySjM4NjNUSjZGeVt7Izw4VUUvWnt0eXNneTJdLloqTEo5VmRTdmtrKU1oLzNhfWh9eSRbYlF+NF98fTJsSkpZYWBr''@;'; put 'put ''fnxlIyt+Q2pQVD1+KW98aGl2aDUzWn1RYT1GIWAvJn1CcE5UQ0pFUXYkdGQlWDFYXnwhOmwvbEx+Vmgkc10xbyo0RjEwcGZJWmJMPjtmamB1W3R5VEdVUiVUQ1RoI1JHd1dzNCxSOFlrI3p4TmlBe2BjSW5SbERaLjBye0dnMj1POyhdRThAKVd1T2RfcCl1UitCd1MxdncqNWY5PCx+WWxIQlko''@;'; put 'put ''OXBlfjtAUDZ7Pi9GYDZoZCswYWU8d0xzI2I4UltPO0Q0IzJEOyVIZzl7ZmxrO1FMWjxHVnU0eG56RWtmQCpUb1ZlbjVgSlF0VE5ge3hbczRjU1tLWXFwVVMoJUZALyVeMnIkS1llfV9rS3MubT0jd2AzZislKzk+Zy9mWmZmVm1meSMzZiVVOlV9KiVIUCRTcmhxVH48cU1zKj9ROCs8Jj8/e1Bf''@;'; put 'put ''YUZYZ2h5NSxjKDkjNUl3Y2I4eUgkNWYrdzZrXV5QdSs8YWF3IS5LdTRUV0h8YHlqc01sfltMSjxPJCJ1XzlQUzcidD1FSixreiZwTSh7L0Ykbn1vTmpfU3swT1MmZktXb21xQCx5OkAxNjRfQUZqakhLcUZfJUtvO0NEJD1ROE9hc3RrOWQyWmR4c2EqKWlpeXQ5WUYqZHgxbXoxYFYxbWxSZzIz''@;'; put 'put ''SXF4V3Z0QDFrOENdK1EvZEYsemY0OWtgIkI9O0IqLG5vfXcuR19mQHVlJHRgS3lNWXVgdiNmaj9keFYpcT8sPywqfGhMbVMmWXJocVIuZlZDK2F9WjRFZ3gpPFdKKUo2K1JSYGEmPDtSfDZrWGlzZ09XNDJ3UzQydz47KSpSdGdHaTovYV1Dc01ydXZEZk5yMEBpInE/aTkqN1l2YUFReiJSK00y''@;'; put 'put ''TURYPVFdUDRLZ31rbnVqMG9eelp8ZHAwPCR4aEVESmxuKFshbCpVYVhIYTt+YnxtXTE9M08hQl9BcUImTjovRmJoKDB3dnVoOzluY2AmIVtXUUwpPztsRzw2QDtzSTM8JS40I2wqJTEvaiVaVy5tTU1SJG53V2ojNDFAayUvbDUvWUJLTm8oOChlRVRWYVNae3p6fkJgPyF0YDI2XjdSOCh3dEgu''@;'; put 'put ''YnshUnpHUEF2ISoyR2UqKUVUcTI5WzE1MlRHNyx+YW1GNF9MdXI2TTYmVCJnMEReaTR6LDhRUCI3UHhjZ3ptNztaa0BRYzl4V2YwKXdPKnh4aXlkZHwoPWxQRCY4YH5saCRabDNjXnRCO0UzZCN0O09WIWVNZFg/PkEwe3FkQj5eM2ZlfnB9JDVZejxkZlQyPyFZcnQvXy8kTD5Bd0khPVJjc3tj''@;'; put 'put ''cGc7cVVtPW5NYSk4OmRWcDg9JDs6ajp6Ujc9I3RJUmhsZUJEZGkxYldnaSoySiYxWSZQRjh7UnNobEplbj54PE5lKXJTeTtSZHh2UVhNKmBkL1htY2RPV1tTcXVNPFtnTVtuYXpSKjJqZjo5Kj9LIyEuVDU0PkQsMDsxXzM0PFQmN3JGejcvYjImVGNLTTVyVHM+fHY1RzFCWClmTktvQFdvMV05''@;'; put 'put ''cm52dkhrKlRPTGlqVE9VP1hSY20leUtFRT40QTx3REVFMTN3KFl9UGx1KiM2NW1vNVQ0KVlyZFlaLGAkckk4PW5ZL09uOXoqSlFNendPZ3tIe0RKKEwqMV46YFpFQilVVDFXTXZmWlZxVm9nSXdYODpkfkxDMFZlcFZvZ0k+cllwO1YsTzImQVN1eS91NkU3b1puKllaPU83ME40dDpbS3N8YXB4''@;'; put 'put ''UmN7Q1o9VDxlL0J5PnQwSjApOW5EVVVpTTd6SHt6PDlrJXRCSig/WGNSVzlJIXolfG1+RkwsZD9JLn52YmU/P3tqMiV9MzR1ZmNDRzp8PCNQbzZ6Mml8fCkhUDxWKlUiZmJGTWJmbnFnTGw0OTVJO2pLMDlLTzwwK0JMYipPODQhIS4we3RZbyRiPWw4b0Uxci9ORCJmUnNfRz1ONGd6Vy5GVnA/''@;'; put 'put ''YGIsTXdUamNSN1A1eC5NZ21zbH5rSkhxU1oxR0Y0bmU4ZEEzKiNiTW87QWNMblNQdGtSRk0iTXskPU4+dTA9P09zQGl3b0hZb25jODwub1gvOyhNSVI8KjFQaz52X1U+QnskeDQ9VHpmVGN2dGxpbGY7eU0mWTQsb1BeW3N2aCt2RFldIUAsS0B1ZihYOkNjYThVPXkkamBmOVU3WT5IYzpAdS9b''@;'; put 'put ''NjYleDN9SzY6fUQ3M106US4vS1pyUkxAI1gxey81RGVNcjFWKHlXXkVOQVEwKkEwMnhyeT19RXQiUG8oQnxhJGhtWkIyMnhHVHk/aUVGezpVVVNrQTAsQWBIMD9gd2I7aXBdKExSUF9zdiNYY3RDUS4jdUpgcl5QdU1xdVFFPWldT05IQWRqam1ASmRzN3cyTyFWNm1hcnFEdV02MF80YEQuU09W''@;'; put 'put ''T0QuMCMofWpZPiZMTXVROWwuN2VsLjdGLnkjOCIhVkE+OE5AJXxfVUhUcStvKHRrIlE9Mm4iTWI1TCkqWyk3MSxKT0ExI3koMnB0YHBAPSNXeiJSWlMjZ0sqLkkyJHBCUmdHPWtDR3VDK3BbaEYqPzhBNlVKcFkhI01RW018T358KCpmdXxuQExfSmlRdytDY0JUa2B9eTt0PUxGOGpCPGJ7cHta''@;'; put 'put ''c3ByOT97fXBfUDB6dmhmUjNWX3Y/fCMsJjt7UW56X051KkIsenI2IUpKazdVbUZzKXF8TyxZZE9gU2QzfGJaZHU5SXAvNVkkcEtzKEUpQzVVen5bSCUudE5EZWsrVkhiIiV5c0JMOG9kK0A6YFQrV0pTTFU7Mkx7NjVGJWwobVo6UFJMYDJvdE5gMGVbIiNWYUd1ZCRxQjV+NEYxX2tvPjhial4q''@;'; put 'put ''TDNeLDxnfXpCOXw8fCRtL1NiRmVkKmdGYy93TURVM2RXZ2h7YDEhJT1ubylkUCw1MFRsdTNFdiFiRF5oVF5iayNaNVM8Jnd+JTU1Li4pMiQsfFR0NWwmbTNRW2pbSmhOam15UW5OPnhrYG80P0VuLzRVekolVl9fU1F6c0olLkFuXjFeT3kpdS97KkorUWYvQDkvVlFLdiVRJXx+XzcqeyQ2dCwv''@;'; put 'put ''Lnw6cFtnbjJVJlppRUVifE1SNSoxSTs/SXEhb2hJQG9lOWpRKElzcW8zUnEjJm81UXJ7XltIWV8pZFAsYmVAMUY4Llp5VyxUT0JNJVBxRXNJaWtTaWRaeFRbRCpnUEglbU9NRX5ma1ptUUdtfnlSejQoMHBxInVGPnJNSSlAQHR1eSEhL1ckPTBtfHIwbUNXKmxsPEM2T2loeHNWYSRSOGhdP01f''@;'; put 'put ''MHx3biZNQktDUyUybnVSKyglc2Y1fWAuOkM/ZXhoW2o3RUNEekhaIS9vbjVZQiV3JTk1QXAuX2U4QnF1eVI+eXJIdD9DQm9sRzJWWE9VeWt5PGc5LzkhUi4iI3NaNipGZmNqeFR3SSEjVTFlJn52W3dLUy9GN1pNUUhoKkN9azVjNksvZyVFNVp5cEpxIyhedi8zeF82ckspcHksSV9DfG5uQnFC''@;'; put 'put ''dHwmKms+clMsVTs9RHtdUnF1b05DbUc/NHhCXyUuRUVJV1orVT56QWVKWClwb0VDVF41WzlDZSExbHZAe0pTQSZbZFhBIzVeVFk4WHh0NXVCLCFLUEs+a0JKa1JRWk9wblQ1Lk9RWk8oVS80QGxJRyNOM3AmZ2pHdH1YQDg4QFtVV2VsNlJzb2NFTDRSQnMxZWJbYWxXdXB2L28rOlFAfiMvSDBh''@;'; put 'put ''ND0sdWB9JDA7OF45WHttSjlxM0NfRGEkVCh7QzZAUV43RzxeR0E3YzpWOClzcEozVz9bXixVZCVvL2p0REQ0b0FNcVoufGVLV1NfP2Q2P01wPShENyNZdHdAbmpoc2d0SSMwS2ZhRiZbPzFJMjR+S2pDV1tBNF9MW0l1bzJNOjtMJS5wIyxmVjAvIztaKWxXM2VrfDcvfng0fih4Un1kZj5sZCJo''@;'; put 'put ''dWEkLGNVLjZxU2kqUG1+cFYzfmY6UnJ7OWN7dCt4MCx+ZG9qQD9OYmNXYGJxUk5YUSFjN3J3T0BwKWZ0ODp8JDFZcDplbTtAME4jRmd9JC5DQk89SyFVMV1QUTYkQ2t6cCR9YlZqQH06VV43ck52MCJRVlUiUVN6QVJxUno4T28hTnlkWWBReXxHUDd4OHllLmptWUZ4LDg0TCwsQixhLigsPFJM''@;'; put 'put ''V29rQ0p3RmQrekZ4RzRFOnUxdGcmbGFtaGdgP3toJH49LGYsZWhxVVB8YSgwKElgK1l7NFs9VCJKZ3lqOmZIR2suQ14xSntyS1c4VlBWITEsRTgmIXxfPVc6WGNeYld0fjg8cWIrWHdhKCNWcWlpPCl1YDEvfXhxZy5PUSFtYlFTJEsyY187dDZjdVolTEolYy8qLFZkYColPVosPF4hNmFpKTxR''@;'; put 'put ''ViVwJCIoK3s5Kj5iOXBRN3RgeUZMODNnfjNmRnxfflMsQjhwUmx7U2xyfmtpJjFEQHJnXWBrbW9xY3NaQS9BbF5eI0QsKSgjdVBJZi9kVWZvJjBzRExqc0olSnNuZkVXe3I+Z3AmPTNAck1yWDh7OSJtZikkQ1R8S0EhNmA6Wk9oamJUXmJ1OWt6MXghYyJAXWlkTTNEMWdSI1Z1PXo1SDBsWXB8''@;'; put 'put ''OjAmNzg1JToqcWFxM15TTFIjNVNhVDtWVSViTmw0b000YkhYeXc1VFlkQ1BRMy50UHlYRyk4czVJKnJud0l5R0lMNXc1R3YwLysvYTVQdT1tOC9iNUVgQWh+JVFRd2V3ZXNLTV42Ly5pJTNRPk9DXnspd19AaXclKltefXUzWWNCWzJ5fmkkNyI2XWw8cjJDXmFra0I7cDs3T34qVTlQfT1pYGxn''@;'; put 'put ''UHpPMXtCRFp6LihzcTEkNVFaVyg4Qnh2ZFtGMkBAOVs3VFZ0TVhyc0BCdzVXZHwxIk9AInVSS0ldIkBMMjBwdFhHITBucyFERkZpfTBTJWpzUD5yRmxqOX1JRVthPTYqI2JhWT9oQitPVm5IO1g6X1N1RXs9VER0ZkEifSJydlV6QkZGK007cF0mL0M3XmxCZERLOnIsd0NvTj1bfn1RTyE0RHdt''@;'; put 'put ''Wzhgb31bcHFdZGU2V18zcyYpWG8+NSIkPzBmKV54Z19ZfmtvY2x9VSsydiY0ayphKlNkK2BpWD1LMk12XXhJWi9JOU93dEgxcGZMNTg7TXBeK3Aqdn1Xd1Z+ZCxLfDd6VmFebjRyUTouITtIXWh+LGo6fnc+ZGVCRyJXVU1QVDdyOCI/QV5VZ0lmaCY4c3B2Ryg/JEk6PyZyaD4udFI4ZzRtUWt0''@;'; put 'put ''d3spV3clbWRLS0A0SzdEUi50KipbQ2MuXUpMVDA4USJKaEV0an5oRS8pfF18NVpCLzIjSk9ESDZ+az8hTlJ+bGZMLGZxSFVnTXhTLkNqVVd2TilQX0YuJmNHcjk4dFYzRWw9eyQmVTM6L0U0PX5+PXRwKUpKdCVOeHlqLlt7InJwPG9RMCRGMlJ0eE00TDVfYF4wPndAYnNAdVpgaWJaYExnczlp''@;'; put 'put ''OyskTz06USpoek5YdlFTXyRsVEFNZTZpPjhGfHdfXXFATnA2THF1OmdNfVVYXUNgc1NRRj5dPih1Q3Y0a2BqVHZHISI9LyVLTSY6bk1jbVY5KEJPckhIWHEzUXFHRzhTQnk2V3UvJFB8IztTe35COnlQK2RNW0ZXKSM0eVlWZ2o0RE90OVJRUjosN0FbZ3RKQHJMIUt7bCtYXiR8Tjc0Y1RwQ3wj''@;'; put 'put ''eUxpKS8vRmVbOTdQKURmXksoOSkwcjFHW0ZkcFFpVFBRJGI6VkJKdFZ+Kyp3TSpaNVNBKDxAZnEyUl08PipeK2hFWXhPIS5zckVmSnFpISxaUjcsRm5sZUBvMnRMSTMybWw8OTVjPXoibVJQaTsrS0w2Z1slYC98UEdWejdheGI0SmlNeEJCLHNCRz5GNUZuayQrXmo1L2lYXnskQ1IkRkN0eUhX''@;'; put 'put ''SlgyQDtnL0pLYDszbXdHOE4malIhZ2s1cVE9UXQ2USImKitYL0s7SjwoR34xelBZWnkuKHpLNEUzKEN3W3MxNT01aDQ3fjpufDUjOGJxbD5fXW96RkFiPHtpaStKayE8V3sjWExOQkhtRl89L2VTXT0xLHVgJjslfSksL2ppc1Y0aDo0TGcwXzVPT0hoKkNLM2NCXz9dd31YdEslNkBZRzJ4YlYp''@;'; put 'put ''RjpaVV92Rnl0USV8JChsP1VzbFducGBHZX1uX2F9STwzbj5dP05UPF9bXklOS0Ilbzk1WyFyJnpPMFArPzdiNVZmLzI5Xl9nbDo+dGRVQH1rVCwmVmgwZ15mMCUzeThtbXhyZGVSW2JxVnRUZG1iJEs1PWY2PHg3PXBfRyN1MFBQJW01QE1vI3gvTCRpbCJtX3Fqais0ImpwMjF5NmkzeyRZNXk4''@;'; put 'put ''bWUlcWpzUz5WMl9NN3w6WUBlfDs0aEx2JC5eckhPPnM3UixMWSNaKmY5MERkemRhUjg2RWlvIWZeJVhuLDNWZ2pCXUZMZHhBNTojYUsoSXVuU3RPXiQ8fXAwVixDN14xQ1YmST8mRmRwZHB0Q0RkRzApPzUjWj12bXpnTWBLamdsdnx4U3Y9QVVtLlZnU3Z0QTxxKXw9cF1jKCoyKzw/OWh7JCQl''@;'; put 'put ''KCt4QXVnQytxfHpDQGVvaW5hWkYpQ3AsTGRSaDBoUXpvQjhNaVRJYDFUcSNSYSRebElDNCNvUTtvL2E9M1pHX11OUE9PVDlLTXo4aikrSSpGSj8sPSNOckdhKlYvX18hbmZWXj4vTExYTixCfkV6RGFjV3RBUC9UeGR7OUlbMUJxaCNFLFJbQmJfV3s+RmRwRSk0Y3ojKTl3W3pDLEc+JW0jIn5e''@;'; put 'put ''dXBjYm5aKyNJRVI5NDU8RyE/ZEBSek1kWFcjYURFNDhPaSFkYkMzdytoUkx9Z1lGdCo0dHYjamleOEZ1PltNZlt9e1JSK1g/aVI9PF5NVFdNJmRhVlElP0dZU1MpV0pdKzsycyxuLjp1SncxKFBNaTleTDtrRFBtZV1TaG5eb0pNRUlCX1hlfEcpYjE7TDdWeFcuSCMqMFdOa1F5LEJ9WVEhMX5o''@;'; put 'put ''LlI2QH52W2F2JWh7cTBpazh6UjRiRGcocE9oRSguVFdIR2ExO3p6bjBGYGBuIWIpVSR0NjxufXgzNTJmLEFCKGZXcV1BOl82Q2F9OSxmYSpgJmR5O0ZbTHAlQ3NnW2VMclgmL1Z9cW81XVYqb35xbz1DVFBxSm9ROSppUDcqV2BLSWFvQG5UYmpDVTswKFAlWElCVG13UkFmbH1VPE5OamYsd1lM''@;'; put 'put ''PjJpfnQsYVI3JlNpSkRdXiMvZnRdfWI4RG9nMnY7OHtsd2ZyPkllTDk0PU1dJjhKe0U6b0JyTz1RdiZGW1tqdGt4Q1lfWUMvW1pINTl+ZEImV0B3TW1vdkxhcWZ1cDFGe1RQSVckVUlHPXYzQTsqLylEUE94Y2pmWjY7JSFkYz0vT2UjaHZkcXtRTXFMZkc6NkdPWVRzI2Z3a1c+Z3JmQT5RUF5r''@;'; put 'put ''PlA0NDlTS2ZxeD5XfiJDdmteRVdESW8kfD1ISkdmK1BuPCYoP3Q9TiZDYkBEVXhGXz41Rj4zTjE7djF8JlN6ciZnNCJIW0V6MFlZYGtEInBHeVgwVD9tWTcsbkRCb3h4b2x6UipHcTE2SX1YPXEiUWpvWTY5V0d+L3JpRiEuQGx0dm4oTl5PZlAmTnJZZjspdmY9PSslbXUhWUhkcEl2dkhNYWlS''@;'; put 'put ''NTkubittKWFvUzByaiIsP1poT34xMT11PGI3N2ZCcm5XdkIoekBTQzJremcmYW8vey5yQ2N0PWNqS1UxIWZ6MD1hSmV9Q2N1PSghUi5fOn5fSjQ5aEhJUlc9T0l1KVhOWyRRVSIiJkAlSDtWdDg8ZzwlLkdZWExZX1YhQmlEKTJHPUg1WDVMTkRoZXhweklOYVBIRF0zWiVAQ10hX2kzN29ac18/''@;'; put 'put ''Jik7Mmw1NjZOfF5sdDZbXn1nR3xLM0kmXl9QZnBINUdjY0ozZCNxRD1jNE5WbEBMIjZjKyFObmAxR09PM1kkOzczRDZuTS91TDYwYC5TYTAjcF9Tfi4lWlRYWCt8KjJPUE42XUpTTFJDPzVbPnArZFZpPHBWIUJecDkvVWglcXc0ZnVGR112eyY7R3NpYWc5cHRpYEJ4TDE9LkRiaXYxeXxDTGlz''@;'; put 'put ''WS4lP3VrbTc/P2V1SWZ5OSpzdShiREtfemM/TFJMTWtxSUAjZjlnfms7eG5mWFYpTC4wTipEJVUqanRfO2JMXXRvOCYxN3hFYEtwZywhdUcvQHBzRnIjWCN7ZH4wXlBbZilbOWN7ZFM3Xi8/LjxmcDw7QDgheyY7S3s4dVpTWV4/VElLPUdReHtJak1beDJ+aj41Tml4aCVpJCV9Ji90MGhFZmkj''@;'; put 'put ''ZFl+RnlgTkhTd0ojL0xETSVYdCk+SnBMIVdodF58RSRuMn1kazl1eGYwbVRkMmEzeVU3e0pwQlcxbUo2I1ZtU2d5XT07WEFgPm1fNHRxblRyLyhlXmB0IzFjP31VOjNQNzY/b0ZOYzpXLDNSKTdIcn1jLk8xNjImJVJ6aWZQd09ka0k6ImpFMiJSQD8lWG02K2JFOz1sOFpjZGJqMVhiUjhPfWhz''@;'; put 'put ''YTgvelI8P0IqPCp8NipLdkZzd3gvN3hEekBDUVIoR3h5ck44SE9EdypifGZ+c2wsLFZtI3hwMHVPRW08aT1OUk92VCtOTzdidyk9STVeMVFzTGJCOEpxR0Y9OUp6dkhgWT5nTHxgd1FjPUY5RTp2aTVxRVtoNFhXaUExbmFsYmg5U0ZsdmIkXzdWKF95Yn1kPV1zJmVWRjkjSDR3LzlgW3UueUE0''@;'; put 'put ''bypJSCRPdi5qKiZeIn0rWHYwcj1DdkRsZXg3R0g6TDkkNVUjL1cmYlI6SD1tSGxlNT5VV0I6cyU4SXE5bF4+cV58cj1ubWxle3RTUGpbdHoybDckbn1zSHZyYjhmdUZyfFcoZWJeNDImW0FzT1FpOD4lJmRPNTlDYj40LldpaTVOSDZbaXtKSEY9QS9JZCl2UWZ8KC5NXkQ9LylRQHVGfFV1QShu''@;'; put 'put ''VnJrPjNhSlF6YGhFVi45dV1YKy5DVGx0PjR4ZTRyfTtaeE1KMHlfb30pb3NLclVBO2glY1spI2hVVkdGdy5faHpZZy5fW0lwLmdCRXFjOz14PTZWRT5ubD52ODY3eVBhMW9qLnBvImg/TzZ6Iy9jXnVdQS9XYzw7ISFHR1B3bHZXVCpkZVVJe1VefCE8ITJ3KmBVO3VyZnsydHdBWTV+dVtBTXBW''@;'; put 'put ''bWFga2d3TjsyblgoTHthXi5UfHJPWCFJNEUia1d+NCV7KmxZKFI+Y14qTWw0PG11eDdyQnpOMjQlS3QmPUZlPV18RThkQlVhbWFzP3dkOkJxNDhKKUpxcS4lOTtzQ0R6Y3FQVzRlUj1tPUBTYnVdWkhYaXsjTF9TT0Q8Lkw3W1BZWVt2Zlo/ekJDYVNIYCFbPns0M2ZrV1c/WjlCOSgpSWZaWVJ5''@;'; put 'put ''Py9YXUMjQH52MChqenozXUBCVj9DZFsmU11DPjBaPDdNPDlGU3lRbXN3OSNdIzIpIzx9dmdCcUxePX46KkNNMSlhaS9lM0NWQihdPmA9cjNLOTh6LkNeRzBkQSwkM2dLZ0Y1L3lLVW9RejssPlNLX0V1JGxQbmBVaGAxZ0xaY1hGTzdRLDtqNls4JEY+Q28sNTJmKipAXjI7eCZWVS5ncnB5Q18+''@;'; put 'put ''IztFNzhJOkx2bG9fdnAzSFJxJUZDbWRKOUZzXyNLNDMpO044bD0oc1FYcEEvI05PR3ReNXdjVUpqOyI7TFBxZSwvPi8xaHtYd0kmdGhlXTZhQnpOLGRFNiVVVko2SzNGT0IsIko1fF8xY3FoaVVvIW8qKyw5M3xRU0dsTWZPTWAhL315fUtyYXJNNV5eTy5JPj0+QGRROWB5e0pAfmJIVCVNPn4u''@;'; put 'put ''TlU7P3BjMUk8Z15zdDwpVGtuK1plLzFlKik0VCt8WS8lJTVjREhbVGcsfW99fkpqK0g6fDxMSiUrVCNZMGI1IUUkUWtiezYjXylWdmU7ZixGZzQwcHklKUZ6dnUiLFRRSSZnRjo/Q3dNQCFGRUZJYFtdZFpSRF9FIT1fZUZaXzl2Zjgmblh5b3A4Imt+PmZBPG0qVVsoaVNpIW9rX0IjWik8MyIp''@;'; put 'put ''LykhZngkUTZbJERMUC9xI1YwQHBYdDEpL1hEXnBSP254e2pUSTx2bWRvRilFY31dRmFUUSE1ZX4oKEBrV3daMXU0dCYxUTNTZzhKM1VKIjUkZGlCImpHcm1ha3JqYD5yMVRzXTFwN1svTntgaHRJKWBrVCZ8dyM1Wy4vTih7MUIiPUxEa3wpMG8mUFhfa0FPX0tLOnwwQnsrbVQmbndkIyMrRjtA''@;'; put 'put ''L2wyXnFsYCJoQTo3R1IvUzh6eFY7Wi9GOn10NlZXW29pK05YUkBqZ01XdF9oWy40UWlgQnBpMFslQXBTZkQlbFZrITBPX2ZNd3gqUHBLYGRJek8jT1k2aEgmeCRRTmZ9eVNTSEIiZyppb1hSQDA/dVtjd2FUIWtfTjRzNGZ8bm1hZGEhRGVzNzhmTUtXUCU1bmJEL0d2fnhsfiQ9eF4wfHg+L0RN''@;'; put 'put ''K1ZDekM0YzBMTz8sIiZlKCFAV1lCWiVFMSk6JFUqcExqQyE1e1JRL1o8LCU/Qk58aGV8ciIjNltvcD1QRzN8WFIzbT0zIj1eUzhKVSQ0b3V1dTJlI2w/dVZIaGEienJbM3oibVJMUFswb0FAIi5CMGBEeFB0JFl5fCVJO1FsaEhqO1BHaS9qOHs1b3BwcFA6RTJMNTdQbkRfOGFheDF2YnJqdlA9''@;'; put 'put ''dEReYyxFVEE8LGdyZkokVyVAKFk1NW0iXmVmaEI8WGYqSyFvSiIyOCF6VnJdY1hCOiwsYis/Lmt1ZW52TFt2OSYuJGNYeU11SFR0MiJeYmg+XSs6PFN1ZihgcEdldDN1YXRUTVF0M3VhYWowMWZEYmJqNHxEayQ2dVtnO2YjYH5VSHNoSHZHUy9qNTFjImAsIXpbWlp0VEJFOm9tIjw0KiJxIT90''@;'; put 'put ''YHspO2V4RHVOam0zUChRM3R3TX1NSXU+Tj9BXW00fUczSHEuSiNSa0k+fXp1SUp6bjF8PnFkOWREQTl3fEE1blVmZW1zVSNgfCRBc0E4P1t1JiY7WiVoXXRjUHtDVCxUXipCQFRKW15bRkskQThJfUk3aCIoLikxejwrPmpDekVUI012em1CPk5Qc1F0M2t6fHlMVDwmYTZ9OmJvS2xkMXFobDBX''@;'; put 'put ''LiVZTHxdd3BNT1RUUE5hbkh7SWpNQS5uKVpvQEQ3b0xARC82SilKVkM1VC82MFpINygyTiUkSTM8cl8jOEF6aylrR2NxXWxBe0xie3ZYKjA3IjFyISVQNXs7W01NYV5gPUowS2R6WzMjPStaY09RQnRWbjZaN3xePS5YQWw/Wyl2LnVeUHRUXzBXXUxiPjRULH1KTUI4O2pYNFRdd0B6ISxZazJY''@;'; put 'put ''LDwsTlhWUz9yZ0hzaGpGNH5KW3AzRTghUjhaR0M5VWxFe1clOWkhLnIzIjY5eyI5SlsrUEhiIXNJZVNRbmJQRDJ4IzNFOjY1fU9BLy8kUitxMSo2cnNHOE1YKi52dzpWd1k9dypLezdfQkdldlE8MERVUnFsY35YKnVAL3JVMnBuLCV7NzM4KFsjW14sJWBwJjk4XUZINnFoNDxeI0BhVmN0fnk0''@;'; put 'put ''Q042SjI8Z0VCWSMxOWYsPiV8aGh8TWsqUVozfitVb0kvLDJvT1pVRlZrVEZtSXZOKktxYiZ2T3hUa1Q2PG9vQF4wY09HX15xPF8xQEhdME0rSTp0UVdJQl83bFRMTTN7L35NdE9AJUM3RVVfdk45TmFoZUYjSFB2PDVYQyNqWk1bYEhvZkI/On53dSY4fEQ/OENSMSxoVHRUQ0teREFMIzUrM0JQ''@;'; put 'put ''UXh+eTxRNFErX0pkW1BefH1pPXkkbXw+LnVDeTxGfiMjVllKIktnY100WEVGQl9Xc2NXT003SSpDeyY+YkdsWDk0RltIM1NAQS9zTzohSSNbdGAwSDYlRHRvJUEkbixkWUc1TDY1dXYuVVU2enMxYT8qLEVJZ01JRzZxVkNAPF9TdStvLm1GRjdOI0dPVDQhaGk6Lk1PTTw0QyxTO1o+RU96JlNw''@;'; put 'put ''WDNiJUE1PGxLQi9LZD81d1JNaEguV3J3az1AUXg/MFBFajRweVFCU3hbXmlZS08vb3FgbitXZ0FfbmtnJWowd2BoPnEze1A+L2ozVXMlIlhVMj1MQHVhcVN4VCs7SmdJfjMzRllxdEU+NzM8cFpoP3AuM1gwaX5kLkRWcnouXytVUFRvW21WPFhWNFNdYyE8cmIsc0JpUzd7Y2FnLHo4aUd2ez5j''@;'; put 'put ''PlNpTTtEMU4mRTZxX3BrUyxPflZFbUIkZUdxUyMsaWZ8fDp9dyhLTDN4cEdBXVssV2AkKTAmZ21gRChAdUQ9OV84UGlMUE41U1lEd355QnZDT0k4LlVVMFEqQHVtMk5jaiVhOVBTMGczKiFKVWVpYn1VbFNzVWEwXi4jfEpebDw3JD1iKjgwX0NwcSw6NGxaU3VeOk0qd307SEk6P0YzKmMlLEI5''@;'; put 'put ''KStEK3ZLZUxvbSJ2KXskbCFFYGR9b189I3A6cjImYXQ/Xm1CaTdCJSk/TWEmZ1pgcVEkcF4ibThkYk8mUHEkYUJ5RGt8PjZQKWY4Qjo6T1F4QXElPC5UKF9QRFcyPjZxUyRiWSllPXlmaGNOfm9NTToxbXUwckBbWXFrVDQxbDFuNEIsTHl1R1JhWWlTQzdtLEs4RiwyemFLSnNoa35mMzM1YDV7''@;'; put 'put ''QU0xcyJaZW1zPE04RV1PZW9YbTB9MUhZY0dkZUw+eSoqL05eKzgsWl9fN08rISxhZlptM1pwdEQsfmV+TFEkOlFeKFB6YjxxNDJIa0pdMGluM3tDfl1hLnBve10mTz4vczBtVkwoVW5AJVkwYVVOI2peWTxmYEMzdFomX0xqWFlzNnVsUjNnLHo4aixdNSopbjBUVnswSEMpQCF8WCNYWUY9YGcs''@;'; put 'put ''RTdsdldWZnBpb18lZjRVaDRCa00+MnArPTlVaSwxVnVsInpOeGlrRzkmV24+MV1NKl16bTJ6T2dkWH4mQHBgV2AsLHx7JWgzMVhpJVt5T3hHeGNZXXcveGlzNnhkTztiPHMrcihkZVVHImc/SE8xcGtpT0hkJndVXmwzIi5aMkVecVl7PU8wc3BfZjxTcFc/QGpCVyNEMCU8bDRGYzR2LnlMRyRu''@;'; put 'put ''YEZMUkpzRlA0ZSZXVWZhdVM2LlldRk8xUnJ1OSE8fEcuaEtAJil7ZXV6UDlBVkUrTi80cSgvMFVLM2d7eDE6US9YZGkrJEdiTVtEPlA+aUlVenZRM3ZyKW49NGRweEFkMyp9VFYuI08xQDJIXmlTOE9bfio4cnEyWEdlfm5obkR9ajhlJiklLjw4MG8jKjErMGhGKyRJYn1kJC5balJucUMxbyo2''@;'; put 'put ''RSJiZ1NGUER7SFdJR0BgTlgvdCY8VmpGbnk/IVduLz9OI3lQTDFwfEt7QStgW2cpdihXKU80PjZYc0sib0BWazUvNzdtcD5hVWU9Z29kZDcybXwkJihMZT9RQzhiKWU2QjkpSl04YSIxSHkibyg7Lzh7cltHYldqUTM8YltoNDR+fDFJWUhqVEdXKTkzNS5HPSwrfXoxLCxQLFBLREJfelYyKlgh''@;'; put 'put ''XiNOTDAucE8rX2lCS1ZfWXY/cFdPTTl+bEwvWXBCaV9nR2w+cU1Cd302RiVHNCJaWjlrfiZAXW4hbG9TVDNOcV19UG1oQzhvXT1KamJHTFQ0U0N4dXs5VDNNKkFdLGgoZHBRTTZEUywpKkFRTDM9Mjpkdnl7TyQhQClzP0xIRmNzVFUzZD43P00sa0o5XW1KVFZDbG0xfk1aOExdPE5mWiprNnw9''@;'; put 'put ''X2A2ZnJdVzdWOVRBL11rOHRyKjR3Pns+TmAzXlU7d1dJVTY+Tlh5LHR4aHglJjxmbXtvYX1xK3wkfmdbbVteMCE+TkozW1VOc1JWWHVTMGFeTWxDeX4+SCJRTlo0YG0zeFRfIjE2TlE+QGpkKThHeSZZSUJfYjldNmttL1huW3R0L0YmQGpJRCNRMChUWmlga2JvLCVdU0JOOGVKdn5DSzBrTmJr''@;'; put 'put ''Smd5PTNpV1h6SV5qZClHNHBCeUV7MWN8aExwYWl2UlVbT0J1NEldSkFJIzBDOHhnMUdieEUpMEwzYjlnWUohdSNiNTEqb2B2VmJ8LCJXLl55Yygld1FSSGYhbmZ+akRSeihjNjlJPDE+UFshaFYyZHFLcW84RXJHRzA5cz8rJCw9XmhzWFAyKWhSTCkrT2VkUnhaUSU0JmhvOVRJbi5CWz1hfHJw''@;'; put 'put ''WH1ycl9Oa14/e25EM3RFZzlKNDxkPW4yWnZXOilOWXosK1J5RDZYZ2JfUyZSQk0jWEheTWozPWNZO0JxWFBHaSlOfnchenBLZHJUOl00cUUwPHR9PnJwfE9FSkNSKG1+Q1A8MUNLdzlnbnVONmxpQWd9VU50K29RTUVXRTdERFtPTlJgJnN5LDZlYEwhMkY/RUEmOTRvLDFIWVBBPnV2dWU9bCh2''@;'; put 'put ''a1g2WHEoaUV+MT9lJVdzJWw1VVpUemRSZ2MkNDZpaHgmOX1wYDA6YSVnbGAoKFZRW21QSCVCZzFXZGgufDFlPzU3RWdIaDwmOlZTRHdPeDVqWH5GLyxhOWo5QkkhYTp3akxNUXNLVmU2QE9gO1s7d3F5OUkxeE1RImd9RmVvUl16aExSJmUpSkEmZzlhIj9WUiNZL0YjJFB8KTBrYyVOVzs9XjBv''@;'; put 'put ''LF1nJDt4cG1EPH08MlUmXnxmOV8zOiRpaSFZbnRAJno8NzsxZ2hIIzJoeEhJeWY4Y3FhLj9KTD5gb0QuPy9ETnRkO2JTfVMxQm1GcFI8PTspaWk5elEyTi8yUWZtODQhTmAwfTV2dXZqJkwhX01EL3NZX3hNMD5bRWEken5uZjIpYl4iW0hwc1JFPDRQOF04bEMhdkY0THtEWCltdERod0leOWRq''@;'; put 'put ''QC8hR3BiT2ddTSQpJl1fSCpGO3BQcnwkM18yUkNPVS8vXltwaFFFQ0k5PWw6LnEpUHxRV1RdQXhwdWtzIWFFKmNpeFN0VHk+TlBFSDpjYTsjL1U2PTRhaE84fiZWJG0+ZHRUWHd0Zn4mJSY4bnNGQ15VbzxuZmBaOlhbXjhJWG4ja1RRSWBYNTgpfEt7RSo/ND5gbDNKckJeJDFSdykkJVRsIz8x''@;'; put 'put ''SWU0TlorOXRLMC5zPm58ZHxeLF9Aen09QzVmJSIoT2lPKWJOLGh7YmZpNFFzXU9wcUA+RiRpMm94WHFhUVcrVG8qMlMlfDJJb0xvTUBoUFhjNzVde01gYyRYZiZ4NHc5KmwpVjxlKSEzaFlHUV1Ec2ojfCJlW2RYeWouc1N7Y2ZkZUVYa15LaV40aHNhTHFANCtILmNWVSxMQUR9dSZuMSFdXkJg''@;'; put 'put ''YywjKE13V0FFK25OTD93UCxQcEVyJTJITDIuVWYpQ0c0V146Xj44NF1iLzRsYGxjb28wWW51cjIzJVRAZGQvckhEeFFjV0x8d21NJXpCMCE2NlskKDpTR1Y+ImcxPUtnViQoTmM0VnVkIT1YXldFOVZKLzA4d2lNQUFCdCpoQkhCdHdEdUkhV0h6VjVBRGJlUlBoIkUiJHl6ZGpsKSFtaXBMbzY6''@;'; put 'put ''eTJSIVkpQUJBQUFBQUJBL2B1TTgxb0UyTTVnfkBfPD92TG1hVExwPWBDOFNfO3tdYUR6OGopRUdybFh5QlIwMGU1aDtlaC5lPUVuelJlJm1bdFg+JChINyIhN2xPR2FQSix9cjBOJTUzeyMkVTRYK1V9d3Q1a19+PDJDcl1CJnIkU34hKnhlV0kxfmpnIzAxSWlgX1p5ckF3ZyM6PE91KkQpXl0r''@;'; put 'put ''VlQ5cW5CR0ZrZy5hRC92cHNAKSRzKiQ3JEBkKDo2XlNwe0EhU2tCdGdjQ1M9eGl8WmMsbDUoYFdKQnYkbW16fkRmYEJdTWJCR3xIMldPdmNaUm5NdHRjKVgmbk45I00mOGEmOzd8L0dxOXBxZW1SaWNkIlNWY0BiLjZoZ2dUKnB2LnM4ZjwzLDlUWDV3YlAzZjtrd1h3RWBZSn5BVSkoXWtNW3Jg''@;'; put 'put ''eHc7PWs+QilqTGgqQEMjeXs7Ulk+ZD1LNFMoUHdyK0xOfT8mTUN1Vz5MP1I1IyQueDkrSnNPPyZOUU1mRFkkcnI6RWh7cFViQ1B5YntJYnZ3SXZgME1PJGBSRFdXNnhRaEdxP1hSRiVCSldVOkdkZSN0NiRYKEl9NX12T31AcGZnSSt1dmBrPmNFVSNESjltJWFnW3suLmpjfmo7QkBBYlVNK1pL''@;'; put 'put ''P0xKQH4ob2tfUyVoMXZedUNHfVlOLzpgRi5LQ1U+VmNaO1BGUTEySCUmbT15VWtuXU89ezk7IXdQPztJWl9kXlojRyUxI1tUaiE5Zn1iUyp0eDcoTjZCeTJ3eFdvUDY4YVZkIytPM3xmNSFhNVEuTjI4JW5AMmwkUztdKk9rRkQ+LGBEYUMoST9fYkJsWFNiOGJ7QzdYWihmMnh3eTpQLk9DMEl3''@;'; put 'put ''WVlUWmJJUVIkXXs7UjclWTIkK0kpLml7c3BHOU1WWHUyfU15Ris0Ulh2dH18ZWZVKUhmXWd3fVpGSC5hRGVARVY3XnFlUy5zfS4lSyxsW1FyW3laQWROajpbcE16LDFOMXJDRnhlU1tNQV8lXkM4RCxweTdxaH1qS1NhNzlwVHJ8S1dKN0NLMF88I29PYXglI0spPyZ0fGJ8YTVqcS9QS3hxKm9t''@;'; put 'put ''R2xyflBDUi9NI3B6Vlp7IUZfT2JdV0laPXBJIilHJjA6Nj1QWCghK3gpc1dTUlskKV56XUFLNXt0K3pZWkAiLyxHOiRjMnkwSGg7eFFlLmskYDxPRGc/Q1NIMDlEaE9EJFlxSHljd1BqNGJMISpjZzlOWCppfT5FTjwlIW84eyYpR3xSS0RuKTNwaWd7ek0iQj8wPkJEX0JlNz4kLGN7UkgqcXtb''@;'; put 'put ''Om1mfVUsRE8oSWZ4dkFNLnB8ZEJkY0RwWl5vclhieXJGMX1DNzUpWHp0cD0+Kz8rTH44emYuUV02d0l6SEZDNnA8c0MxST1Lbz4pazY2TmZGJixubHB9b2dMPmBofUxOMz4za2AhcDddU0tCWnN2Q2oqOXBNJVZTTEVzJHpOeDNscDVuMzxMWU1peT59cHAvKyR+PXl3MXVXTT1tKXN5bTxDLFc6''@;'; put 'put ''UzB7fGtjTU99SyQ1ZnVqV2M0M1JHI0AremJMd2FCKFpLQDllKXlOTVNnbytCYjIxYSpCXnB4R3gqZSsoN0RmaXZWQ2o3VUBKJmloWSZDUFVVRmYrUDE0cEo4aUJlTURYWWsmfkI1TlRlYigpVEl+U3tzYnoiRGlebFBvZHQ2c0UkZUZ+b3ZDR3R+XSR7fklQP1BSK31CNDNOMEw6Yn1Bbj84ZDdv''@;'; put 'put ''b2ZdKlksc0NRMmQ/PF1zXmVrcmN6YzI0KTRIXnNjXzA8NDlGNDRYb2giRVNzbXlVPWxSMWBNeiw5JVNrc1FZV1FYYDVNS2dENDhTPmdUI2s0X0tmV3E3Z2Q1a3ZrUlIrYmVHXXM2W01YXnp7R3tDSUhSUip9PiQyaGQ4JHx2fDdMMjNCSilFbGBaYm5UMENaOShVOCUobCVZb0RTMCFHSzl9Zj1L''@;'; put 'put ''V3FKJD1bK2d+cCUyREssZUYsZmx8YzZ9PChOfHh9SkkibEFnOSZWXW1Ic0pdLmc0RHslWHJeRHVkQyg2P2A9NERxbWlNNiNMenc9TXlCcFhBNGV0JkVqW1JlRX5NdmRwWEYmNVpWLjBuQGs6citEeUdiZUpCRSVnWTpSPGxgczx3PDBKQnIkP3FBcTs2WG83JEtgdiFlWC48UlFtQDdLTnJFb2h0''@;'; put 'put ''bjxRQl1dTC9RU2YkITNeMjY+YT5QWGdZR3RNImhZeDhqJGpLL01ZeyEzR1BZVG85XjBgTF1aPXxFeHlFTnAsJWBGRnx6O0gzeiZwMWtKTk53VERsZj4xNH0uQFc/dlg8RHc/bSNHZ3N2IjtmbVJ3cEJKVm96U0hzL2MqfjxZLzxfKHBxRntJMyt1USpNRWMxT2ZtO0ldclFpISRvZUN4USR1fUZl''@;'; put 'put ''JkhObWgkbHcpYTpfSF1IW1hKcTlLQFZSX3I6VUNtUHtmZWFfJWhjRCZVTFpCdFNdMWtZLFo0Z2tCeWwrQXE+SUUkVTBbSUxIeCFmRDpmYDJgO0FTKigrVkQvMVlHKTN4XTshMVpRWmNaXj9rTiVzNjQ4dCFGNT5ubGNnZ01XfFE5aUB1OiNEVW5GSi85UG43aXovXjlCQXk1ayEydFE1VyMheEQ+''@;'; put 'put ''NTwxdS5BJSRlX31IQFoiPC81KkwzO2AyZiU3WzVmc08yM2QhbT1dZHZfdWtSUGxJejBRL2JLWT9SO1VjWSxCdEJyXkN0VGlOZiV0fCVhTTs/OWdRS19NKE57TWV7S2ZdbzF+TjwoRjkvWkZ8TzkxZjBGSzslKmJSbEtNU3FiXStiLzFlRVRYNylBVmw6dX4uR3k1NyJ1O09qcnpObzd3Jkp+Vztg''@;'; put 'put ''WkFHK2Y2VCpvZCFGfHdBKWcheX0jOSExPT83Xnl9K21zQDFxXyMiciUsRiQlPEIoRCo2ZE8mSC9xN21UNzVzQ2hQOkMuOEFTb15VJCJMQihzaS9EaHZXR20lZiNofV5GaVQqXjxFamQ4UzRHYCUjOU1tSjI/TWYmOyxzaVsuTl1yNXpzIVo6ZHBFaEReMkh1Nmt0Iy5VTUUvNnpUclI5MD9TU3k6''@;'; put 'put ''W1oxVyFodGdZQW11cjxpVllSV3BqSWdNUWdbRUYhNTdYZyJEUTc2NSZCb0RZczdYKHQpU0tDVGtVTSQob3d9RHgoVnU3fGN0SiVlQDZgKF4qO3ptWXhjT0RaJHhaLDBfYkBEd0x7U1dVdTxYcCJXNV0lPDtvZWUrXyRXdj9fN200VDBkRytsa01yWjNXYDFIYzdYcEkmMCpOJXhnYyF1bmVCMShm''@;'; put 'put ''SG5NXTEmZlVQSUhCcn59fXg2eWEwX2xtOUF1TUZhSH1LLDAxYD0xQztON0I0aF5jPEp5Klhvb1ZtcjtLWE0zPW5NbjUwXjJGJTtiWEViY0tuSWpGJDJlenh5TXZMayRLX28kfEhwUD0yeEk4eE5FdDgwU3psTT5PXUA/bW9VNEd2MiNlNj4vLDQqfTw2ezVJbXEmVTwyYz1wTzNTYW1hW0l3SWRJ''@;'; put 'put ''VEpddF9mSCtFc1opOE85T148eT1QZnl4LkpWOl5heTwhS2c+MVFOMCFmcVJzOUJSeFlmW3NPKnI5ZXo0MzI1Pl0peiVSNHJ9TFhEKyxzYDBFRkhnaU9mIy9wLFc8TV84LEc5c1lqWTEpTCV0ZU8uUyttIU10WHdHNlN3bXd3LH4rNWFta2xWe3wkZSxLKjNES2FfU2ZOISpQYGtIQ2xVXik7JHww''@;'; put 'put ''UDU3R1FpTWo7b3htcFVmIzo1N1RnSnFoMFBRem1pNHZ5P0hmdEczYk12aiJWenhidktKVV0raWdvWFo6PUxidyhOfmI8a21wPDtrIUZpe3dtZyYxcXpXKXs9R3p8TGxtQXNURnZXTD5vfCZlfll0SW91TmhyL15PKmV2TCVdUzd0PEYoM00oaTtSYHF0e0lqblkqcjRxbEpkKyFCNEd5bnE4MilR''@;'; put 'put ''fWd7R2tWfDQ1YSp1dyRsNjM4IzBXISlUY1o7TlgpeHdOYWJLTUckWm1MImJtfTNBRU5QLmYibkAiZmc+UG4hVWsycCo5TV95W106Zl95ITBAOCkiU0MwJENrTVNFLmxSWFg4SWp2JVJUaWozRldHXkV5elt3R28wak4qS2xyMzE5bj06N0FHVn1LaGNfY1R6Klt9ZHpbX3hmW1EyZn0laSs/RjFu''@;'; put 'put ''WEJ7JjVnbG95RkZvMEA5WF83S0xgRXhRfiUjKztFSG9ZT0hRRS8rbVRJTVFBZlN6VUJUPTg/MG08MDF3UkQ7MHhrbS89ZEVwVmtgbW1KKUIzMEpOZj5gKyhJbjA7YX5tP2UqK0IrQHhxKm48SD4yfFovWlZPT2VYQzcxYG1yamE6dyF8WmhibGAjOFolTTJXPFMraGQmVEY5TUBgOzFwdClkRk0o''@;'; put 'put ''UEkpQjclKEopJW8sYTU0Mk99S3x9Mz9XMVgkWWpAQ2VWendBP102W3d9fHlxe1A6bGtNV0phLmtCIn4vaX5pekhDbj1tTjNlR3FWV2JoKGIwQysjdyl1QiQpZVFhOGAiT31dNXgjJnhgJU03YX1mKWtTfVdKfWBfMWFXbGIzQmM5IWxjZngrJkAyR1d+ZTN4QnVlUmosY2svKzFNQ0RsenoqZnFo''@;'; put 'put ''VDZeb1N2SipqWy5kdWQ7d0VpSzYmd11lblNQPFVQcGYjQ21UKWZ6fjJoKEdyZV4wLm1OLDhZRVpYQ0pNZV95TmgjeEJsUHxUfF8wNzx0Z3dBKmNwekAkbE1vdSlaIS9yaDosTWBvTFthS0Rjcl9mVy9zYSZCTm11cjlhTz47R0gxTUk2L244ZiJTYDFxMUJrRkNZfTlFKjZoXyhOemBNd1tnUThQ''@;'; put 'put ''d25zaVZXbGFZRzg6eSVAN1cvPG1RZTloIVYmMDZ7LndEVCFnNkRHeDxGRFNtMSh6bE9JPCRiSHVAX0RrNGZqfWtRKyVxZkRiOihVQywvZUguX0x0X1clWkpZOGM7dmskbERHSDMrSCM5QF5iU3BkbCNGQTh2YnwlVmt2P3dod35pUn42c29fOCVWbEEreTRSYHV4Rl9SLytaYSozXmM2N2lDZkk1''@;'; put 'put ''Nko9JUZtN2g2bE1AfUJPU0NadHs0VFNEQTA9Pld1Q1MuOllJan0qQ1svNS5mLGRPUCpJX0M+I21belRKXjhhQG0pSSUySCZgUVBMSVQuQn12TVExWkQ2WTZUa2l3Q31qdTpLYExFTTVna21NSS5NanBDOjFQWVE9SjNXdmgzeEp9bEZdNldePFEvPGc1VCVyaVhtPEZnbWxqakJbSjYhMTFbWUI7''@;'; put 'put ''cCg4bCx4Nn1IO21GY3x3ZVA1a1hHMFk4dzs8MEpHOHBQRT9OaG1fZSkiPyN7JVkweFdoeE1IZ2JkPkN8JXU1IzFUWGA0RiYwcTFERTM4LmxJRWFSNXBdMlssJmFjc3VzMW5mOkRUdmwrdjF3TypGQHZvR0pOJDxsbisjKVFKNGhLMSl6bHFmOz5CPyopS0R4Lk9kfT5ZZ2RYdz82UVdHIyVlITtZ''@;'; put 'put ''RE1Ka2JRTm9qTEFCVzJufCFoQHI7VyVjQFZyfiRlUV0xPDlpZVFHQUIvaWNPN2UyWVRmXUA4b35SVXpvNzhLKmErLG9Ia3YrKk5fciJlfltOQmFifXQwQzwse3VLTEA6UzxgSHxNNS5ORkd+W3Z6bChFUDpsUj49fn5JY2pMNzRUW3Z8fkQrUzFbfDUiVTlaZkp2JEtvJnJNZV5MbHNNYmcvelFM''@;'; put 'put ''UjcxdEM4Sjh6X3x3STJ+TmgoVHFQQ1krVnhTd0V6OmJGP1lPQSRwMD9yI0dWKilWdVhMaiRISWlhbHJyJkY3d2AsTnpNP3lZPXhHQWxVaShQaVRxYmNvNmddVnpdZ3dSeXJSUypYUSVGaTtjSDwrZ1tMfX1ZWnhHYnx1RncjdEJVYXNXJjYlK1FRMzxDQ11WbWhFS2lVYHBGKCg7cFBrJiNBXkJK''@;'; put 'put ''QUEzJCwuezlIP2VCIXBTelBuZmRRMDE8OmhbQ1tQYFMoN0BgfTQmREZAPG1wdz5nUmVRQD9Cd146KnRqZkNoc2lLMlI7Nkt0UGN4PEdgRChKLl4yRHI3IywqYT8iaG5DfmksPCU9UWBzN09MJnhRT0J6WTB1NFEwPVZeR2VTdiYpP3cuT1NlIXs8KWtMPDU4VzYkPnhuei5nMGR5d2wzckgudz9m''@;'; put 'put ''XWdVSlJXRVVxTkUsazBDMzNiLHEjd1VqbnBFfms+NzY7fmc+dDtBUU9paW1VMmxIPChqW3ZSOUwhVERWKXw4NygpXzlURmJnaFtSKEN5Rkl4TzRqNkdVJm4sdnUuQ1BabkV3KWlmOVlnXl4uYn1OR3UlekpIeDNZI21hVlJheiJzN3F9SEN9T094eDFwaCQkUEleITAuSE4ra0gxI0FhLzd7M3km''@;'; put 'put ''dkA1ZHNvI0UyJi5pWnhBIWpZMXc6MmR4WixHIUhwQ2FxdFpqeU1mV1hCU0dRPUR2eD19PGZfQnQqNmhCYypneVhkPTY6eWZwM09UVTlrcyNnRy59KkN7aU5RTX00RG1NemQ1S34kQkV9MCZjeS9WSzxNZzckXTRHQ1k9NGZpMDc8VTRpTSpHbWBfI2lLVSg0Vk5ARSxSJU9keSNFRjdZaD5YfVdo''@;'; put 'put ''ZjEpUWxGZDlaXV1zWkohZHY8RjxHe0xSfTBUbSpoUWhVR2kyXV82SyZwIkBXQSRuSl5LZ1ZeTX1YMmJMLlpeKztQVyoxcDtYMTMyS2xeanVyTDYpVitkdSYpOUR5IStFL2NrVFh8M2QoKVtkO2x+eWE6OF9aX0hEL1FSJDo3ZGVoPj9AU246bzshRmdvaF16K3wxfVlueGVBWzxNS0t5aEUpPnJK''@;'; put 'put ''YlUrRU89Ij49Zm4xSDk1OFhCaXAzX1ckVXswKzwlRyElIUQkeWthLiQ6VmhYMjElMjJAN1I0Y2gocHtCIjFIVCJrcVdCdUxaKF03PjkjVE5pIWU2c1FBKmYySkkkSl91dlIxMzwzMVh2cHl5dChAS2Y9fXsoNFRoV2UweEw2eDJTYF9TMWBTTjM2dT42UV08T2k2bCxjNzBqNmNpPileUlBpPCV2''@;'; put 'put ''dVAzM3JdRiJhMEdLZHx3JVJXfWRQYExnJGAxKUEzZi4mVk5YSzQ0YEYwIktkbUM5dGBoP19BT0ZIQGU/dndQOyRfZlh3W2wkPkA/YFBKcFhVQWl5dSMrVEwkRGNzXTVddUM/cVhSbE9zKn1mIzRueDI0eG9ffDxMJCJXOnhbX2cvKntlVlYwTldnOEMmR31DbTd3Xzxvb2JiXVh0byhmTUNWI0x1''@;'; put 'put ''Tj9NZjo+N25vNjo+blU1YD9odHMqPjJiN0csYV5JMmg3V3VYOiY3eVlUfFZFRStKL0A/cSklMlBbdCo1W0A5L1o6cDIjU10iWGRnVFQpfSNxNHB5OCRnWSIoVCRJdlRVQ2R6Szc6Mj15eyQ5KUxGP0VDTmhPe3NnXmsrUzRvQEgyMG5OSitvMlJoZ1NnQWprXW0zfCUmZlJFPXx4dmQiWjsiNnpp''@;'; put 'put ''TGpBIjtkaXEhX0ZuWDlyQ0MmUD4jNGUxXzFlMU4rIW5uLGJZKn1TXixjKT48MGwxMGNKYHg7QyRFX01iXjhwX1pldkM6NDpDJm5yWX0laWJOa15qOEZAZTcoZ0VyNXkjNEx9WkojUWVjWS93TF5HKmp3R3FeTnJOTk5JI3k4SzI6c3VoVUBzQTNAQ2E/SV9+JXg+SUtlUXApSD4xPVFjWyR4ZyRh''@;'; put 'put ''UUV+am00Uy4hdGBZYyE3TTFUV2pwPSFXaH4pKzF5LF89RmtmcUdvaGdwMy4oKTMkP0RDUWh+Y2AuTXdxNTo+cTY6a1ZdRSYvPihVNyQvPS5NRSUjcU8zOn11NUEhTEplc3Y3P2grNVBjJVIzdk1dOlpRWXZXbyE4IjFURVBQXzB1SmgxdV01UkJkTExVd2k2TTM0diZ+UVZuRlFLLCpPQSgrRVh0''@;'; put 'put ''e3NNbkl1fVI4cUR2MFAydXlwM11NLyEkNmgoIkhmVD9CQDhvTSs0S2NeO2szRjV6L0krQFk6Rk9fc3U3OjEkWUtuMm9TbEwzREB7JEsuKStGezpdflRxbkx7biUpTnN3a0x1V0tZJWsvX1VDS3FdLzAzI1UxXiNCP2MmUC9Xb2pHQnZpQzt1XVkkWTp1eW1xTigqLyFSYk1zY1QveF8jQzJrTSRH''@;'; put 'put ''KG16aH5hXkJaR3NRNCtTNlc4Q20iZnw0dWQ7PTFEWH1fU28kel5KSXhDXkkjTE9vcXREfW54ZlEzZiQiJClCTChdfC5VXmt+eEZITDQ4bCFqc31tWURiTGo4alRQaXhJaytnTHFmTS5AQ2o9JXleWXFJNU93PXwpWURGX1daPSRRJEomSVtLS3ozfU5OSmpOMiMzOF1pOEBFZXUjSzpYV059dm95''@;'; put 'put ''NF86b1JqOnouaV02KmdQW3YuU013XXFIOE06em1pYD1mMyVQbnZzIn1wdnRgJHFQbzZtdHMrXzBST04uZzN8LnU0MmlASTJ4NkRtMEZKUCpdZX1TNWp9TWd3Ljwjei5UUE0zcTl+cV02NDNGZzdFbkpabDV8RFFQdSI6ZENaO3I6WWVhTFByPjQ2bXJhSmNHZkN3TUJiSnhtQjFoZXZ6fURMIzhn''@;'; put 'put ''ZCZ3cWRjZWV9Rih7d1V0WUIsTXYlYCpsMkwmIig0OXFbOTNIQy5SPDMmNG9wZVZ+WF1GWkVWSXViQ044KnY+RjhFWG9heGx+I0h0VFF9Tz5sRW1wZkklc1BVSzk3bmUyMixdJjFxan1EWnZRNWh8KWVba1BdaVs5MHtvanNKSnthOnBFTlZ6dl5EMjU7YlpNJiw2MVJaSFU2enB+LHY9WTQ7YWc5''@;'; put 'put ''WnhnKFZ8PEZ9dnw8OipkO1JlJCgyLEI1JFdvT2siVjg6bjlhNDc7TF0iN215NU5PVlU3Ik5lQGB9InZoajNIUWMva29FWXw0Ujl9am0qYFlrTThtPiVJdlh1QXFfVURKVUxpIyg2JE5pXl5XSnEpQ0JwbywycS4rY2JHUmUzZlN3TTxdY3h5fH5dIX09Zz9BeDVkRTg1aX4uenFFW2IwNndDXkdM''@;'; put 'put ''OCxpN1NfbDpddDFyXj98c1l6Sj4seWh2cVVZSCNFP0xOJXoydCYkTGdCKF9GITx8d3VHcndNUSowMDM5NnRmRHopWXtMR0wqZltSTjxQYl9qI3ovX15vXkhZeD9VOnJ1bHppMWN1V217dk1ua1okKCFDIUdqJl5PV0A4bThyXn5BLEUzRFJbMFh4ezQ2ZywpQUArW0lybkhhVWldL0FpPHxnLmVP''@;'; put 'put ''MkI9bFR5ckxfYHklfXl7Z10/bFFHUE1STTNEdS8+XjhwZzVeIy4jTFJaTixRRUd3NHgvZGpmPFhrQ2tBPD9udUZQVUc6TVlSY2h2Sj4hTk11QGFqfi51QGZHZEs1MSZ8bHM/eGVmP3EqKmROLGRWJHIkLj1dUWR2PjNwYlR0KmFkbjNYJTspQS4qISlYd01mOShaMHxQbHREP0xdQk9mTUhifWNV''@;'; put 'put ''KWB8OmJxQmVHc2J9YCl8d0RaN3VDbXZFQ2VeWisrNllFXzZZP00iO1NfOm9iN019UXFidioscDZ2dmRRSkBLfV9CbTYzMGJWIzdvZHpNc3tFbGEwI2xtcjNyNE55QHFIYG5uYzAoRndVSUQ/fitIcGpyZjBVd2dTU3E3O0B4aC9bTVpGSWJHfi9jbF5dK3tXdTM5QX5BNzlueT9nS1YqZ305Sjtf''@;'; put 'put ''bXJubzs6ZHpLOns8ajc7eFd4UUJbbzRHVlF7KC8kUW9kbSI8M1JBJC9APFVhNCJlZU15R1JfU2osIktvVz5DRExiZ0dKZEJSWD14TDNERC93Uk1AaGovRyJtQlI+UVo1LGUoWGpqfUxpe1F8U1Ftd1ghfH0xUE1KQHNhSWkmdC9tbzs7XVgjWDVET2ROYU5HOGU2Ok9xSCZ5b155emBzbn5FPW0r''@;'; put 'put ''JSI7bV88Jm0xcEhYfnVrPFthRk9RSTYvb05gRSMhZlQiQUQ1bWlsUiZ1NHN0dFtQWClAPmVHSUleJGE6YU0kKGZ5ZlZ8cGRWWCssbk5zakg9THk3WFVLVjdyZ3IubGl3LnkzfEZBWC5SYXFafik4NVR1ay45Z3UjQ15rJUxnb19lSTBTc1o7anZWYmYoaHR8QCh+NnJ5QXxQYHJIUkVYZG9RdW9o''@;'; put 'put ''X1NfX1ZyJlZTaCRKYE9kOlI5REFzK29XM3poKl9pVSNIPz9hVT15QVFzdV5UcVZGYzQkOCtSKGA3VSo9Njw0clpTRUtrLiUvcnhZS09tZ3ZNKCNhLzUxZWw3NkxYWV9jcXxHWXRfRmN6cjRDbk1kJlJidFJQLzBWVExCWlE3fEMxVkQ8Q0NnakR6QiJzPyVWbjZRQkkqfSh3M3ozdXExN2RBNW5Q''@;'; put 'put ''aUFON3s2PWRwbE1nU2Zzfmc9TjNOfWNSTT8yNTBEP2UqJmB9QTZxbCZMR1FCYHNIfmx4P2RzWF5dfmlHOCxORXMrb3QsQUtrU1p4ZUEoVFlgSSRRIjpffSN6aHkwMCVmMTEhIWUuIkEqUmEwZVpaNXJKeWIqJW0jfDdTZTJfKCxfVCI3Z3E2Rk90LERWV3ZGLEJVTFZSXkJrKEsmLGtfRkJ8aFVK''@;'; put 'put ''MVsmcihATWgzdj9MbDBKPnQ7W3s9K1k2ZHdQbiVQMCJ7fmJbWVUzWyUsZ0VlQjlKSzZrZTlHZmZBME1VK0BKJkY/SDMwTU5lcl1aOnR+WVZDfS5zLjUpakI1SCtaRyZlMFd+Sj5FJC5dYldAY2Z2cSZFX0BKfGt6cVhXNUJtSUYhV1tQNj8/bDB+R2pNYS5hMmxgVig7WSJ2d3hFQ0s0YTFzR1VX''@;'; put 'put ''ezYrO3sxPGhxM2RjTDNjNnFMP1dSMzkrMGMiIjdGSCVDKUFqe2tsWGorTUA+I01CM0U0Nl91LkBeL0RzTStaelhZPiFWUTNaOGJ6XVUlcCZNcyhqfGViUHskLEsofkYqWWV6dWF7fUVST2IqSE4obEMma2ImS0oxaFRBRD9EYGJ+Xz9uVD5POEZ9JiZNNn0mdX5uUTtrRmI3eC5iRSh6RDs2bGRb''@;'; put 'put ''L1hDOndMdyVKLyo+W1hDeDhZN1k5JEtrdWxSQ2c0KSR4NUlnZitQR19nLGI2P3psQnI2JXZ0JWMxJW5RKExhRGEyWCojZ29UdG5OOFhnaG1AaDpeaWd2PltQQlR8JDA8aD0pQyVVPmE8a0lSZUBecDEzMDhoWGRFMTQ/Y315eiNWNzVeUiVHIi5WTzBOaVg+c0xBaUQlUU4jT05ST2QuIiFsKXVt''@;'; put 'put ''QTghKj9bUCNPTFJMbmBXYjN5L116eHJZclN8VT4peF1HTG5sSl9IQkl7Pk51YjlkYGg6V0pWaT18OHwwdTtATDtHRms4KWF4WlA3dzlnTX1qclVzakxsfGhyNlYqOlEuez4sQEpAbDVVekVGYzdCNXpkYGREbm05M35eVixPVWNeNEtqOSpDVERebUVueU4wfV5JbE4vXzomIVV4Xi5OKzttU2BG''@;'; put 'put ''KmN7W0lKNjIwI3JgfX5BSWcmZy4xI0tlZXFfYU8vazAoa3oyWT4rcSNfYGIjd0peaHNDYXtORig4dUgzXnV2bFo4TkIrPTpxbjp3YUxDbkVqJTRBd0ZNZ05CKlh0S3lUdVJMLldLMnt7VDVlQldSSlY1RUUvOXsydnpwajElXVhzdXpEMFRFdnI5bHZXKTElcmYpbiRBbVEzVWYxTWpWbm4mVElS''@;'; put 'put ''OHJ1K0U4OE8mNWpDd3QydUA4STp1WWsvL3wvK342Oj9hSiE+KnxIbmBSW0RrSVszXylsLD5fYF9wQyVsT0YjRF9yTkFzPDpxaFpOMyNMfFkjfFJvYU1Xc1A2JXBxVSJ7LHlNWjVobE9XI0dqeXpaZjpqO15IfFp9W0kkMm1+UHV5MSUuOntrYVVkbV43SFZ5WStpMkh0OyZnTC9pRytQIklZQ2xa''@;'; put 'put ''e0p7Jj5oJTI6aE1nPGtrUCo4OyQ+ZUw7ZGJGVVJ5eCYzMThAfXA8cWF8dFhxXiQ0MiNfTm5BMUZER11yKEglP2psJXFaNjR+PklURykiUSZje11XOS49flpYMn5uQSk7cmpAZXskYXlVQ0RPPFVkOH4udEMsJixDV3JpIStWYXk0cG0+JSh9ejglUj1OKWpgdTVsaTEvOCxHKUghJW9FWTY/d0p9''@;'; put 'put ''QjYqbnJuaHkyb3YhZWR2SnxmTXtpQjpsO3ohMiw1ckFbQE9lam9POzs7KGNRSmlsPFYqamN5KFAkZn1YS05fSDdELEAmQ0xkeC5NXzhqK0pmbSxWL3Zqa1EsWGA/QyI4WElLRGc/ZEF5VXdkLkUqZVVZVT4oZlQzUD5RZWM+RDAzenkzOURkMkZPR0Z4MTlEe3RjWG1+c21EbUQ7PkZOMmxMVn56''@;'; put 'put ''blRFTEhxMG1oLkhNNlk1bk1mXnZlYHZbSTlrb3tLTWFuZFdLK3poXl8pSjdhSGFqNkF6IXFbZ3FOQj5ifDZQTTthbDBbIVR1eV59N3AmMXEpeUkvUkl2fFEufGMkYi80XXZeXXBoLlhHbzYqJVR1X3w5Q0txUD5GdDd9O29+UGszdXxbTDhoYi9Ue0wwbVREWTw2LkJiZHFkezQ2ciRGdGBmdUx1''@;'; put 'put ''T0dGT3M1XVAkZHZkUEYjb2FfQXg6VEt7VUBbNTQzUE51YmklYl1STyVQJVpMXmMuKmZvRnBCdHBvZHxCU1Vee3pKX1tzZih4eVQkRXBgP0ZNP288SD0uUSVEPHs/Z2NTeEU5d0V+aHZHZCR1UE5uaDB4fTdrMk0qLF1VVjBjTHlVY2V5YXNDMVFUVC4rW0QjTE1uakVGezw7MGcxdW4obiE2Vnov''@;'; put 'put ''NypfXnBSWGNEQk1wcyk+bGpzSWd5WXgvOCtTcVdMRk1iXUx6X3hRMlJpcFdiX2NBRGVUOSJBcko0W0tDWEdlIjZSMXZVZ3o7IjdsW0oudmtRMXMmTWpYX3x9ZSw5OWRWfCZWYW5RdTkqfip5Tllfcm5iU2x5UUg1ZmQjcXNNQ2Z6JHRpak1VSE5fblEhRjVYQT1Fa1hpfWhNNEZtYiFVYTYoJHt4''@;'; put 'put ''RjgsIVMhcn0ma0R9Ozs/YGovWkZ6XldOfixyNFBUS1Y+aG5iNUt9QkQsQ1UqZSYkM0UvU2kifEQjRyZ8c3dTMiFrSzU1dkNSeXM4UC9CSThqZWQ7NmA+RikpQ1NNXXVkWGoxNlQobTR7NFt1a10rXywzLi5dSE54ITsqUEdCRX5GTV0vNGJgMStiP3JmbV5QQUViMWpqTzkoRD8lano1Vyt5TEND''@;'; put 'put ''Ml9AU1BTJk5kQjVJV3kmdDVXVFNYQTB4Ikk2fWNFMkUqKHU6bTJCLFlkJDo7aStfJi5xVDc9MT93NDx0Q2xRYXImZyh8Rjg3N3NbIXFsRCI6JjJ7KGQocyZmImt7V19KMzRmaihXN3Y7PCspVXYrKm1OUERZTyJ+dEo9RVApSzVxan5ORkkjUFY0cCx9RHZORU02VkhPWkJeN00jUXxHSSlTa2p9''@;'; put 'put ''NzlzeGhiYFREaUB2fSE8cyhdZnkxZzMrQWlxcGlQSktsVitbZiR1Z1lURT8wfnFBTFRnRWgufVVwcDJPKlpjYGtkYjY3ciJveCRdT05OS2ZNYll3Xy9odFQlb29fWHJ3d3FrPWxeL0R4VC5IO2BoVyowQ2pxP29mOG0rXyJIZVUiWnBHamFDT0A4OzM3aFRMeyZlOiM0OURyfCVGT0RMKGVFS1o5''@;'; put 'put ''PEdtVCZ9Yi5mIUssYGw1NHVOSnVsZU1fTDUrJSxnW2cuNyhZK0xDSnFvRlJneGhpZHw3Sl02XW12ImghdGg9N11WZj5jaFQlSXAxNl5MLiEqZnosRXc5ej0/S1RNSzN1PyE1UHVUaCkwTHd1P0Q7O2FlXyJyMjVbbX1xa1J0OVoqW1hsSm9gSWF1SCM8RFhVKDBHfktiYSFSX2pVY0lGeWwwOnlY''@;'; put 'put ''WmEqLHFwIT9UfFdQXXQ3KSEuOm5fV1BjTCN2WkVzQnNQQWV1Ik5BS3JQflFab1FGa01mciR5NX0rSzhpSmN2ajRALmp+NSloY3Q6KDMwSndvPyE8KE9PK0MiLn4keio0dU5od11lYjpzMXEhfV55OmoiJDtbXlJHQl83LFY2XU1+N2NkbSN3Ui5ZVjJSO0kmSClzOEs9VndrIz1NVVpjVSxkOTZU''@;'; put 'put ''QEY+SWVEIkdHLHNRYG4/PjZGUnNSKzZmZiY2Z1ljfTBOPkRLdzhPZm0kQV0he3RJI0JbMmtRfHJISjdjVHJyOnJtX2Z6Imp+Kz9hb0hJNTVmQHl3KHJbPDNCKEI6S3FCSm5ffnVKXzJYbEk9fn1kKWsiNEF5QFY+YWhUPGk8RzYlJGRZRjE6cEFDb3dMMk5CfVp1TUY1a2N8fHwkPHtMSz94YC5I''@;'; put 'put ''RSo+R1pvUzE7MG5zV20oYl5xV0c7dWI+PGlJKGZiMz9XfCVofjEufS86YUU7WE4xK1M6Y1ZxYSY6QmZUIm1RYHM0RHdAOSVoX0teZGw7O0YueFNocWkxMGI7fipxcVB8YDBMXWNxbD1qdU9SekBtdyozTC9zPT41JFQ5aENRdHY7OmV1Y2FbeWl+Zko0VzBAO1FAOEMkbmowUXwkcV8sTzcuXk57''@;'; put 'put ''R1R3OVdkSkVDLEl8JUA9LCsrbmYjMShpM2YydklCUW1bc1pAWX1MUSFQXltqOnY/S1VIcmZNT0RdfW59S3JqSjtSdTovI0xDPUVwRWNsP3NMaXxTQ1okImdEWkIuTVZLSCtZckowKzloPkMuND9MMFErQ2xIfExTLD5bTSx7dzhjXWsuX3cpcHRPRVdSW2J+SE0zIl59Im85eXI8RHIpe09xLylT''@;'; put 'put ''dl1ZVzV0JEx1YkczYipfV3VhZUBrKF4zJXcmXipqemVTMUgoP2MwRUhTejFAaFBWcWEvZjcmM01GYltDZCs5Zk1rc0Rec2NZWkdBbVdCTmAqLGM/SmlTNSYkRUY+XXtyOl1NNHpgRFNafGRLbE13SWFTTD49dEg1TFZBPDYoRzMqbiNqYn06W1RMc2thOm0vKkVXZXJwUCZQeDZUdHomJTVacFRa''@;'; put 'put ''a2VLfmp6M2orJDk6cCooSVI/P3Q1RjA8N3x0QmR4YzVXTDlzTzBNSGood15GTkp5ITpTQWtLI3h7UnV0eEF+MD1dNjsjMFN0SlE7bkQuRE5adjUwWDBEVm12VGFicUJxdTYpbWR2e0MiVWY7cSNrWnBAWi4lM3hQNjFFYDVFa30kcTxQMjpMVTI6fUdjRUM5JWZMb2wuXnRgUEk/YiZLTSYuIWBj''@;'; put 'put ''S1I+RWtpXkJPTk5QU0xUPkZKazx8Lnl1Lms2TEg8d249OEhrR1s4MS8mbHQiWjk5bzIuNVF3TC8kIUVAWSRsdF5BZzh2W187VytnMV5RWDhsRFtLJHlQMGU0KkowdG89KkovVmYkXTQxVzA1JilJbCUiLmREVGwrbzw0fFJPIzREbHElIyFGalhbMC93IW50WGxNZmFOQFpCYkJpUElaaEFKSlFE''@;'; put 'put ''LygvRCtUWFUsRk9fe2JjW3M0SUopMkB4KnF7YDwqQzZTQEtMLjpYcDQjTFpqJjxhQ1QsI1k2WU8rIlU8VW0kcSZbWXRze31IdkpZI1Y7R3x+WT1KfnxfaCRaKl89OlI8eGF6bXwuXXc+Qktaa1lMP31eLixOdl52amZjPmw5ail3eGAmay5eK09eI35KOShKRnFpIWlPTGd7ZHFvZX02OHZgemdn''@;'; put 'put ''KH0ia2pXY1ZuRnk2S0ZvSVl9JEI3UCt4Szd3fTlKbHx3PklFSkxYa04uWkxoMVg0LjAyNzZjOGJuTUdxSCN6UVEvaik/dDtPInohMiQrMENlXXNvcDQ1fjNReX4uOzRzNjRtTjNpaTo5TmFPSWwrYU0hNzxnQy4pWVNwSWlmant8S3YhQH4yJUF7Qk4ueDg3YnxHNjVPQEBGdlhvYnshc0N+dl0m''@;'; put 'put ''cVFvN1ddUiZvMjhBQ2E/X0J8WzVvIWE6V30mbSljJWxvWzlNM2wySnRJQntLTmtxe1JxMmZSSnxzZy54M1NBTzZ+N09gZFRbcSk6SCN4SHN5T0d+RiM3elpMbyNYX1I3PCxISENYclchcy4rQ01oWkp8IVRdcCpPfENnI1RpVGomMW43Nl1kSFJTKTZgTiN9VmFvcDw4az4pZT1vayp5SFk6PlJC''@;'; put 'put ''KEN0NnZ8LEwvOndEPT1fdklLeFYjQiNTUTxFaWIsbEIlJEk4V2d0ayw5WUgmallLMig8SDJaak17Y1tAalZMcTJeRGxoIUpDIiU2elF6Y1hLdTJWOCRIN05sNTZURmliY0xrfUkrRzlodEVxYWlYI28sbGxmKWo5Mi5wRVB0WlJgRHI+UD8/JFtoLGZqfWYmTF0rb1BEL1siOkBmIll5IT4+WlpI''@;'; put 'put ''X1gvfTAremd1fm5tWUdEI2tIYisqNUd9IiphNDdhSVY0amlRfj95USNFO0JUNTV8NmFzNytfJCtULGFqKk5GWSRZSiN9MCpOdVFjMjJYRkZXOntPYVVnI1l7VG9sWXpbcChaLHk3dH13S1QhNSRPSXBPdEVUMSNjMl1dWkRDfHcydl52RHJgKkRWcCosX0c4JnZMTjJDNWk7b05fJHV4aUxnbjFZ''@;'; put 'put ''fXtbImpLRDpmdzRnOj4wNWdYNzl7flswekUyTls9SElHfThvZ0FKalZGWz4yKV02bStUNWxTKDYiTiE/aj52UV8zJj4kYDkzQjdlbG0rb0pFTSlde0FPcHVrM2IrJnA1TCFnYklwZG9LNE48MFVMak8zaltAYj9+QCJ6TFspKSlVVzxEMlZxND1IKUtSPzl5YmBRUzdhLHNyZVV7PzghQk9RKVpW''@;'; put 'put ''d0d0JXRmaVt2O3ZtSUZ0RGxRayNtOUVzQWA7UVVoeGZRcD9ibXFuK08xPXA9Tnw+MEcoRjpmanBFTFlPfGFeNk00Q2pyTlQzdn5wNFlfMEcyLz52WXRjPlV8WyhtV0F1PDdYbD0qezF+VGhCV0tNKTAmeHJ3T1dbTUdJKiVuelkkSSk1K1s4VmpScyl+UE8se1ssWkxlLnwjaGM1fWJEKUEoZk0w''@;'; put 'put ''ezdDRi5INVN3KnVdJlA5fVY/S1hORWwwO0AwJmN0VCowbVFhOU0yJXMpPiZxc0l4MSNGQFtaKzFARG5hIXVVZiZZUEBNW214Li9gXTApRFl0cU8qcjE8OHAjTS5Gem1tRiM4SGBXUHw3WVMhRn1wIVg1N09tPEwwU0IzdXQmK0FnN08hY3Q8PVJ9d2p9ZyJtTTVUfChZe1M0T3xKdmpQdkk7ZSNa''@;'; put 'put ''SkZBNjJfaldGTHp3a2pFXiJjTiVBJW5pKypUTnApK3pbQ0gwYW1JTi9jTDRwQl8pOy5sWy4iVlIoe0w8YHpgeChHR1Z8TytqJi9wXkUpQGs4Ozx4WiMsSEt9Qik1bWpCKm40bjYhZF4uPi53O0Jvey9XKmBOSz5wMHFFIXxQITdAM3BtND5fc21wRkc8KHgrbk5bWkVnUFQvazpgYl9Ge18oWDc1''@;'; put 'put ''SCNWV3BzKUhKc09Ve3lTTyVeVlgiZ1FlWTRwb3Q4NHFfP0RULl9mKj82ezVVIyZIJFUkTzhdaF5pfjNVT3k7ZDc5KGhNOFA9alE9Z3YrWkF2ITNCN0xwMGF6O0wiR0MlV3IuR2hYRSEkRyM1JDQzSi9xYkhSfF50Ol4oR3NIND8wYyxKRzt+bjR3YS5fYj12a3w7YzM5IXp8U18vY0RiMnVObUpf''@;'; put 'put ''L0FZYXxYRy9GQHp6LGZ2bzc0WTJFb3hyQ3AvbVtURG4rRmMxPVguRlphQDVRNHd7Wm1NJkNFW3Y2SHppUCw6JTomakQ1PChEbSpyW05mX0U3Xl5KakklMj1HIihqNEdnQyM9LzptTGxbbSgpPy8hbTQ5KnIzOmkxSDElZ2AreE15YDlQbz1DTVFQR0hMeGwqaG5FbElNKTNXJlM7SnxCVWEoczJ3''@;'; put 'put ''KFBBV0x+QjYubDdVXSteU0tMODh7dEhEaXZfQ2gxaWdyZmxWQ2hPUEhGViUwSzZWfmVAUHhJUUguSFNnXVNaZWptRjxTU2czRV0ifWckeyJALlNOOWpSVC5QaFk/blNMPkkkaDZVSE1oTjFfdUwhfUxeeXluWCR4OkRUUm55ej57PVJ0OG0uM3NMW0dzKDxSMF89JXUqeX4kI0czXVphRk9uISNe''@;'; put 'put ''WVQzSXcjTkIhbUokQl1vTnxzfFo6TW45RTUmIi5XUUR5Y0h1LnVBRHBRTlBiN0NLNnFTNCYlK3NVMn5pfkAwWVg4NiVSMVt6bnYoengzXjBxOzgjczg8e2krUFJMe3xZbnxCSllgIk0qM0NPJCZCLlRtPEgsMTklTUcpdCNhcE1bMTEhNUlZeGFAP0B3TGBqdEZtPyFVNmwsNTgqT0hxZUhuIzpS''@;'; put 'put ''bDE5WXtANHVFR3Z0a0VPU2JSWT8hflJFWyxKKkBlciFEVj1HZHwqRT9zSVR6USshQFd1Q35LX1R+MTpGa2R6eClOKH5SPHU0RXg8d31HO0ZeVnMzM0RXQkYuVG5wYGZ0VG4qdSNJb2VHaGY6WWBYQCg1NUZVdmAqQ0U1U0NMNC5IMENVXntpIz9ATyo5OWhmQk9zQzsqX3dbfDVlJixIMGQ/dihj''@;'; put 'put ''a01kTHBTaURya14+blZZMFMrWENAQX1EcjplfklFeWt3RzhBdXFbZVszUn1AfkFTQ3l5Y3Z4bEckWSJ8KSkjN29AenghYl1TVk48XnVzLl4kfXB0KSZiPkk/TCYxWzRlZjpCVl1TaHxFfUR8SFc8QWZKUHlmamBXWEFyQXlHP0kwISk0O0I7UlN9IyR2bT01dktqdzR+TGF5dT1XWUJRMXNvalBZ''@;'; put 'put ''XlFod3RkLDdyeTlkX0U5fnswej1WWUE9ZG04UzdHbj1gMUtGNFZmRXVnazllW2s4R009KmRgL25mbWpobG9QXW9jckZSOW56aVJyeXpjUzVAOkt2WmFIXmg0KjdURF1zXTlHM181N150MzVSdUQ5QjtgNlshbDxPLFQ5d2MlNzdUZkg2c15+VWhGb0ZKMitILlB2amwxREY8Qjg5fiptPmkhOkh0''@;'; put 'put ''MHJmczFNJUxzMkFqczkibkxRLkIvIlJQV0U4dE5qQ00jNH5YZFhpakApNXpnelRKNmNAbDpxUmAxNU5dW0lFfl9DSncoPEZRIT5WWmRvO28mMC4uWDE7MUNFYnJmayNNOHZGbm4rPEdIJHdXTj9Qbm92Mk8wSCNyaWYpaX0hUzlSRF1iTWR4XVYkSWElPXklVVRbX0Z2QGdMdi5QKHZRR1poRlM8''@;'; put 'put ''WCE+YjZnXjx7UGZnL1RJPH1+SiQkez1CZkN9WVU7X1kxZyxedT1sZiY0IytIcklnWnVeX0tCZ2EyOnZTP0RYJUVzfDZMclltdFguIU99NyE0SnQ1S0pNQUBJViQzW1ZHP3Vha0pxbShMJjhdb29bN3lWTkBzQEdVNUlvI2RlJG8sXXY0SCx3T21Want9R3RveDclR2JlcmFLcVRocSh6SCovcSpq''@;'; put 'put ''b3V9InVEbiMpLjJCZ2s9T0tATi9odiR0fl5TZChgJjxjIWdBPl0jQVkmeGhfX2smLG80SlExZXZ0ImRnQjFMPXk2XV8zZ2M0ano2WyNaJXokaVgpVChNV0woSDx4ajgrRHpoRDd8WmdCej0icyxmT3lZUEQpY0RsJFJOODdFfGQudWYhej5DV3k6M15vfmo4Oy9gUlRYa2x8MWMvN3w/eGJeVHp8''@;'; put 'put ''cF98JWRxcD1bRn5KaTYxeFFMU1dQdlcjZz0zQW5GZUx3LGdFJG9PInVbZ3woKkpoRm4/b29xL0dwO1EudkRrKXlDYH0zKVdqT1J0NTVaOWQ5Oi9gLFR4SEc1SXspXntDITNOVEROdmU7fE9uaj1LRjdtZUBiJH5QdGwyUEtwaUNdPTtaRE4qM3k4LFZzeCtscmleZl1PdVV0UWttX2EqWXBJMSFO''@;'; put 'put ''JXg/RzBUJiwhKVNjbD1qV34jM1smdWEoWSUlRTR6X0woKX16SWNdUDloX1U3I15FfShMdDBgVS83dyNrZVdXYi9wZTE4RnpVVVEoL3h+fSZPXzBeP1VPPzVlZHN0SkQoXlZvUFBfIkJaI1NmdDN1XWBHWj9wW0EvaFZCJVZJXmpDa2FeT1RWPXwudVcoS0gjcEUhUzUwTElZPyhyNEJ6YCFBRXx4''@;'; put 'put ''cSJEWkpSQUhzJmZJL3Fxe0ROO2c4Lkt5c0VeSXxufVltO2Y1JX4kaTdTKkxOdj5oIl5NL0ZnSjBjMWEwIVg/TTtYOjBPSTxqIihDOVtyPztlMURpUn5gRCx7RnxNSyZXWHY5MlpKL0JZNytYdDl6ZU1ST0h0K2oqZFtSUX5kJnNGMj5sNWJjRWhGI1FwRikjZCR0eUJ0Nl0scEhvK0tUJVMuVUhq''@;'; put 'put ''UF1PWzA3WTFdfVBiJno4MlJzUUJtZVhQZ2o6a0FQNV5jcDohc31YNnJaNXI2Il8zS1t9UzhZIjZmb1NKW11WeVJEWz0zdFNKTC5jTGNGe09rRn0jeitNQkl9Nn0kR09kM001QEVoKyJdbmNUTEdWN09WLlMsRDxvOSF6ISVHI319VD9mdG4uUHRZPCl8S24kKlQue3htJTg9bG9UYC47UmZRJWJF''@;'; put 'put ''R2l7ZHkySHFhMkh9bUdAVkl2dltMK3NXV0NiJXE8elZpTnpyRkFPQU5SR3xWZ1B5fCZnL2ZWL2tKRzYpaFRZRGFjOCE1VShIJU8qMW4qTjteaUEiWXVYfjs2MG05O3YzM2BVbkJPSk1vY2wxKFdBOkM5d2t5TGZnYFB+LnFlRikyMTZpLyxnYUpdfnxZNGxjbU5kYClXPXIkMEZZc2RweW1QI2V1''@;'; put 'put ''Mz1TKWI2K0RhUyNHfU87fXppelpwJjxxb2hid25TOGJHPigmTlN1PSlGdz0vYHptWiUhPnxSLjwvbnJXWlkvIyRQaVR9bEJ4ZCU9I085QHJZQFAwOU03PilHIiEyWjZxIXhzMEsvS1VgWU1lc1RuNVlxKW46STdXK19yVztrQis5MHw/bUVCQHB5aU8mMHhdNWB2P15OT3VETzxRd1IrQXB0WFF3''@;'; put 'put ''OiNrKjl8e2xDX3lfUE4uRiRibi56M2FdeV1IK0BTdiR+amE4dnpIUHszbUQ8eHlJLnsoJGNfTm9+Kl4qPT45VClZZyxOQmhmWE4oIyhLd0dbfG5yI3k3Rzs+MS5ZYV0xNFQ3aGN0P3lIcVZKTHg+YzghRCVkeSk2MChJOExNO2t+MFZYQTRiL0k1aG1uKnxXOCsvVldhVlFfUE9McThTc143Jnk6''@;'; put 'put ''Vm50O1Y5SjZTTihWfCM3U1ordWIpSHRPfk9yIS93MG9LQj1CTWp0U0o4YiZYdW9gb0orWkdWdVpqays0SDVsZyxWcU46flB1alRVJjZqdj5KMH0hKyN9NFdbY0U+IStnXVViOlcqT3A2clRtL3tOPlMkZm1xPjlrRD8odVRSMVE4e0s6MnlqNU95YkJVS1FWRk9+X0kiOXMmVndeX1FHNGAuOFIx''@;'; put 'put ''OnBkNWJVfiNiKCEyJHZWRS52YEBVPD5UM0JfPmhjKT1Ya0NKOyN6L0xWQT4qXXwhIy40R0IkVDR2UndqdDt4V2lCeEgpUUAwWlImSjQmUTBIaDxpXSEpPDxIIXcrWk89IzlldCs9SldeKHZqN2hkeltVLyFDUzssMztzaiVIekREflRVRzg1XkpINFFaYnpDL1NYIXUybyNASjosYT13ZW8yODNF''@;'; put 'put ''Ui59QU8ycHJ1OHA+cHQ7PzUsPj9EbC50cGcsfmEvW3M8IzMwR1R2T2MiRDQwbHttdzNQV3lWKXEzLEJBcF9DLEQqUyx4SCltQF0/WSwjMkgxNDxzZll+djNnPjhUcnIkSDRpJSlKZ1JvVTc7R0pGXlhKUy5PKmZMR0kpKyF5Pj4zRnIsZW43PkU1elQvZjNNIlkqTWJ3elByey9QKDQ0X1ZKPGZY''@;'; put 'put ''bGpOVUVmI1djNzVNQVt4YEFYYjE0TXIjOkt+ZU9WaGc3KnUpRGp2LkNEXm42cUR5NFJHOkAsZ2Z9bS4xVVIuLnJwTW8iXmA9SkxxO1tMTiFDZDJ3Ln1jVXsyZi5xXW4pSWRYOX0mbkhKajNlaC9DdHEjS0kuJm06JnNOVTc5SlpdcEgoVUNZYiZYfF89L3E9cmBrIisyM0d3aV5QZndYU3I6RUJY''@;'; put 'put ''aHBGQGN0P2x2VVQ6bUlpdDlYeks0KnE+NVV1WTFYPWsvVy5GJns6eV9IVEdSQXsuTSx9YGtuI11qT2JTVSQuIyNmODZ7Y19SdCRlVjRZfUBnY2UyNypvR3pDTFsyNXooLnppVyh3eD8zeTxmKiY+Y1VrKjt9T2tDMmRFWUt+LGVZNTF9Y2JtKlJhTlldJiQqZFk8XnkjKipxVlBaeVtQaGM/TUlP''@;'; put 'put ''eXNvYlA1eVZmaGRdcl9EWVlSOWEiIUBsMXpzeEkuNVJhTUNTMV8qSTEufEU1IytkVmA0aywwQ0cjbW1edWUwWy9paUp4PztVVyskR0lbO3dNSzRIc0ZSWWViPjhxaFFxIlgvUXxLMzBaKUJnYUk5OX1pVyxtdTRiRzIoPGhKWiVhYzwkREVlXlFvZklfOy9oZWl9Lnw/VV44dlhXbEpYNy8/NTQh''@;'; put 'put ''Inp0RE4wJDtNOiFDM2hfYmw7djFNJm9IV3RuSWNMN35dVTp5SE9oWXUpQEMyPTBIIm1TJnhYW1dKZnRONkUkQHlVSjEqckVSM115bkopTTxwWmNxSnpVXl1zWHZlSCVQeFgzK0w2XXtHVGg1cFNQRnQwTytPfm59L3JYMyF3LzpAZXleWTA1JDo7Zz8/VkI2eTpiKVJAd1ZpOVF4JE96SW5vb0FI''@;'; put 'put ''cG10USUpXTp5fGpzInNNJUwqT1sxPyhbLlc5K0J5Ll1lWjxeXnglUSZPZkokTio7NGNKITk5fDtLZU9CTGtUWXFRUlooWmImcStVajxFcWk5OEw/XyUjaEdUZSZtMl01V1FCXiJCel1ZNGo0VTF+al00bVFyYSQ0aTY/TT9TSjc/cnFFIjlYUChETnEzZj9vazg0YExmQ1g0VHRsdEY1Z1NRVTBW''@;'; put 'put ''TixTaVJ1XV13PndqJFdwLEY7WG1PfCpwKTVRe3dERjdNbU9JNSk0UGVCfThEPmA2PX5ndjlwQHsxO18iOGkyKnBxLDohKDY1fX1RMklaVnJudXRkUTxZZyFScFJWKlNrX1hXUFddOF1iV0JVSyEweDk1SUB6SUNlN3EuMD8lUDgoND0oXWAlXk0ibUdfKFsqUXN8YlJySi5fJFo8L2klZG5LOUkz''@;'; put 'put ''XWs5PHpVZlQlNWZEeXUuJUYwcGBbKDlONVEvRn5iJTc0eEtMLEJgWDlqc1hufEZdbShjY0cwQXY8OVk6QCxXU0YhW0h2MXg6OjxmW1hFI2VrWD0lbkNNZHI1Klh3KWwxMU1oLy9jXT9IM11Laj5KbGVuR0M1Sz4kVEx7XnFFYmV6WGNweSVIbWRHV2p7ZEhGNV0mejREX1MvJkYjJHJyK1I2JWIz''@;'; put 'put ''MT5Me20kdXMvQDFiRGovaCR9fkFvKTc4fGtOXT9OOmNyQVojTE1dPldFX1RrSjg9P1hLQD1FTXloKCpCa3Apbk8rXVY1ck9MWV0xR2E9JXsjN0MmflFuKkokM1B1UThKOj4rIUYyTCxHX0oxayNHTDs0RmtOZWIwSHdMK01+ZXBXcC81a0JpWTtMSkBtPnpmNmx7TzJIeUw3SXRHT2A0VGlCUyVT''@;'; put 'put ''RywzcVIhLHBGXyV+MH46PGdkX3ZzKG0qaE95eUVHRjpoO2guQF4qKkVubyxuPE4/WDd3XV8pL2RSIz5pdlpBI0ZOWExLWCZ6O2AvfHdRIkssTGUlNDQsMmQzLHJEOnVkeStNbG4zTkYpfnZ9fU5BTEFVPDBRPVgoQGNVLyspdCUjM1tRIyE/W1oodnI1KUgvWEhQQD14ViMpTEFnVVh1PVdLeFZB''@;'; put 'put ''W3hIeWg4KTE9K3hpVm5gNnk3VFIiVyx8LkFKNyNTOSJjMDZIZk0sdTZdRSR2Vlkiez1sYiEhJkV9Tn4oeyh6ITQ+XVNjKkYsWmM1QzNFYmxSaGBVLDxVRHhHT284Y3dUS1QwdSguVTs8dCx5fG1nOmg4YmcjUlVze35tLERkdy5NM29xTk5va09XNT5aZX4qPn05e3pOVWRLRGEyaF1kaXNkUS9I''@;'; put 'put ''SzxmJC94TmlNLkhzXUVKQGo6OiEzcns9dytnKE5DKkw/bzJCI1k+ZD81aDN8YEdeS0xuVEJPYV5MdEEkSDgqLkQlREo8Uzd8NWwqTnVOUjlKYyoxIlF6V150Im1aLDVuTm9iek5KfUp6biJeU35ORWR8SVo9NFNfYzhwL1V3N3pEVXtpQnNBKVI9aHYwe1NIPyhjLyh3XSY4ZHY0ZENuS0U1eSo1''@;'; put 'put ''YFA3ITQ2UCxpJjp6OVI+Lmx8a1VTQD88M2xuYDsyb1MpSXR5K2csYmp1KiRidTY2bjh7dSpVeGllMyo2Nz9hPSMxR0ZTbE1uR053MXF6QGkkOElgcTUsbzZAYXNbWChjbjgvblYhdlAyQnp0STYjR0FIbWh7UjpNR2BNUE5VNllNMyV4cEFZc0I7TzBVeFVtNWpJLz5BKz1YWU8pTl4uRkxZSmZb''@;'; put 'put ''aSRLZEFFeVYoUDEvNCFrUXJzVEZEPS5jbUljb1hGYD5hMmImRHUoR1g+Sk4rZHpwI3wzbV1OI2d8QFc7IXsoL3g4aCg7W0RnQCN1YzQ5O1MjPjk+e3dTVnU0S1NvMyE8eVduLl5DaWQvY2tAUHhdLDJ0QG9QPX49eU1aQilVR3UwKltNPHpiQzxSP082QzJybW9fZTFweUE0QEk5JGZeM2luR3lu''@;'; put 'put ''V0dsSjArcTExX2IiZ1kvYnwhSzs1LCxWYj1GJTsqemF6PnFhTF9wRHNwWFA5Wk5xTDU8bmhub0NUQHdtYD5sUVElZm4+M0wzL2dgL1JPTjVJXX4yPUkmWVFlKU52eDhQRyg0IjhpdVVkUGE5X2I4I0guP0NicFpHdWpxVGgmb2FKRT4rfXRhclZUZF14ZmM5djdbcm5XTyFyOkh4dXh8NGw3NlVY''@;'; put 'put ''V01tdWs1NSNlXlN6UTFZYVMpZUN+dDMqVilMOjY/aHhYc2NVVWM6bDoicSsyaTMiPjh1QH4wIiM0O2lUJUBPS2VHdW9OcUgmRCEuVFtlUUJ3KTo+Iz8+K2E5N3MkUUYsUG93QDhIRlN+L25SVnt2QTt+NVsxPFoxMWB1Km18YXlSe0tKRG9fSHpEeSJjYkV2Z25JbyRbVzczOyR6K0Yvcz5ZeUxj''@;'; put 'put ''SjF7dlZGYHRBY00rJXQwfE5YYUJmaWdgTXNZSS5qeHVjPmFQVnxYZigsQ1Q4LjJZM3pDQjFHeTtNdC57VHsyTSIpRGZkQzpGJiE+UVtJOiQwP35JWkU3R1g5azcmSltRLyF7XjREZCg6OERnO1cyQG1ZOFlnKzNmVWprZEdMSWlHZDw3LmtQZ1IraX0kaFkmK3gscUxoeE5pQ3lNfV40VngkYHV6''@;'; put 'put ''fntFWnJrbTNEP01ZMFBIQ3VzdUprTUw+UC84dyVbbj1qTHsuXVM6On4hdDNRVnNuRTw+flJVYjlENW5AXVtQeFZ0OW1mcCJfWEc2JUw+JGc1ekAjfi9BRzEve3NNKypQOmBBeEEwSz4iQnV3V30xL3U1VGhOL3c1N3YiKE5WX0FIPCxCL1dOOC9kITxxe1ldR0lNYEx+d1E4VE4+VFAvQnlLbTo4''@;'; put 'put ''dGcqSHJiVyp3KllnKCQ4dl8hXT4pdnRLeCRGPzE3YCxufkl4TmU3S30qYyw0fkMzWVZIfWMjRSFlW3NReD1Yck88Kn5aKW9ud1opaG1ZRkJ0RWB8TTckUSs9YDI+Ji9UUSFmYHt5ZCthbmxvT2BsO3IiJGlMSiVHcndvTyZhTSg5WDYpfHN3bGYwKmQxUikvY2M2eyVDfHYhIndYMEAodVJFRyQ8''@;'; put 'put ''ZEVQfjkvPV49QlhDfEVRc2V3UmJKbC5nPTxebGx7cDt5ckwrfSYjTjpXY056PihSNkx5ejtmNWk8OXhnUlVneCt6bjIoMD4+UFAvW08lTSt8SmJlQU0md0NMNTNUWG1mRThLUGtNWEw6TDpLN1FzQFFmIisvelpJUzlER11UOm1layFnPmJHNTomKFshXmdnNnRlLjgkenEuXTd6dTFBI2MxcWhW''@;'; put 'put ''bDw6SyZ7PFpHJWgjNn07W1QkJGMvanEvUzJxYWB3T2UuYFBnejMqQ1RQal9GVFtoaWpjMX1tOChocHlTeTV6a2tNX3RQLzQhYF5qUTpDd0MuRSlUNUJ4bzlUPDxYZH1PUCJlLmwmUTZUPiZ4L0RiKEt4cjhMK1hhQUtkMWxuRm9BRWtWQG9ib3krV0VlMTNlYm5AfFtHLk1afD5YWDYzY1MyeHlK''@;'; put 'put ''QFQiTzRvK0xaNFAzTzlIQ1pGbiJmb216WGR3Q35NUCtjaHZEVSREdGJbd0ZhY2RQNXlKbHlUJlcrVE92NHR2QipAcjROVFkwK0YoT1cpVDRiP2VXVDp1OztSZS9XXkNBU3RWZThHWV1IKFJue0RafXZEPE52QzNUZXAhbklbJHRDRFZIaCZBWFlGYC9mWFdyYkNzRF1HNk1BX25+USUwKDxfQno/''@;'; put 'put ''Ii9YSzpIYldCZ3VbXm9SWXw6bGVMKUovZnNke2JtbTc0V01FZjRiKV5qWEkrWU5oMWhaLDg7d0MuZ3xTYDo8OjtJWSxLUlVdYU90ZDkkQC5mRmFHaU1lMnMvPlAwXS9mRk1aMkleITJlQXBrUGtLcCNzfjNSN1QjZG1lPXMzeSVSbE97fSopMjdjYiUqQyljZzFoUT4xLDFVKTx8TDMpYltWZ0Nk''@;'; put 'put ''KVZDdXRAa05JNUJ+JHVId1VuWy4iczEkKkJjZ0lYX2J0QyNQdDx6Zms7WVozOSFwczQ7YltieTBNUzV9eHMwJEEoQG45QiFZeSJWOSQwN0x6OEx0PS5IOSkvIUQ5VWU7QGthJHo1VDZgVHFtYTB+aTV0YnJiWDA+YDNFSUg0PnFqPEBwfmQ2QzE1QCUveUdveDJoTipkfjQsIjZ9SkgsRz1ROjlH''@;'; put 'put ''fS8qPyZme3U5LkhZZV1RZ18wTndGenhEWmF1QkskXT1vSFF+OHhpQ08vRyE1TlBoayo+aX5XZD1HSUJ8TX5fKyM1MFkueUN6ZSxkVHtSYD9tSStEL3I3KygyV0V+NythX29LWlkmdXAlej0qeWZ6Ry9MPywyakh6SkFVV01HNlN1QDZ4fn1JYnI0MlMhYiVPZSl9NXdqRzZORWAuQzxdKDFKV3Zq''@;'; put 'put ''Q1NqcUFDYmtifDJGPH5QZlJkPTIkSHMydjAxa0UqQDRbJmhBXmpic0RiQ3pjZzFzPzooM1JmdlM2TSN1dTFKQyhySERHcU8zbkhsXnw3UTgzZSw2M3s/UEphWnRHcUQ1V15eUXRRNztzfk5bfFQhLDFqX2FJb286MSFUMCpFU2ouZEpdPixTJV41L0cvaW1Od2N+P3ZWekROVWYjMj86QFB4fjQ5''@;'; put 'put ''WnpiVDNCXSN3QGx6YUNpTVlNekwxeHYwTUBgMFViO3c7XU1jbkdKciIxbkwsX19GIitFeG8vT19we0tuOT1WPGFqWnomPHkpOC9NMUtKYE9oNCpATUdMTUliU0RnUVR0ZTI0UXdqY3FMYXAxaTJ+cSZ6UlpvOm9eRyxsRy8pV1ovKX4qZ0NvWSFaUT97cDpLIiY1N2lkXzJXNGM+YngzNFhCel5K''@;'; put 'put ''Oyg2UHlrYS86P0VEUyQidzgwd0M5KV06YSZDXz1kOUhPJTpGM19RMihnZU1ePEk4b3c5Y3RyZHx1M2JQOnJfMj54bGpwR0dZOH1IamNHWEBFcktbPVo8ampVUEZSbVFlPVlsUCFGcmU/UEVxYlVLXilXeno7en1OS1NBQn5xeTJ4P29yJldSNWFOYWo/bUNiQj8sYio8KVRyKkw5a1ErJWRdfClF''@;'; put 'put ''T1EhfjVfQVk9OWBwQSZlTWU6bHg1V1Z9ZkpfYkYhUkwjV2kuKkAobloqSjpVLD9fLmspITRTYjRjfSF6QjxrWWhHW21YSFNfPHFVT3U+UnVDcjtbI3lNcTpAQGdmP2NLTUMjNHU+cCZpKi9wQENJeTE2WDZ2N1lRRjkkSjtAckoyfF43REpMYE05RVNVOWRxdm9vUTlOLj5iKHJDYmBuWz53LjY1''@;'; put 'put ''fEdzXzFwJGR5e3lgakw6SntReTpXIUReWW5Oe2lEb2p0ODN2Ynh8L3VLSDxPT0AmcCVtSiV6OntWVHc1MDVnYzVaJi55ckNvMnl5QjhGS3UvIU8ybWc4NTYpVEVhbWx4RmE8cmFlQ0g2WkxJMjgzVEBaTkgifj5KczYoflIoLlFFcV1qV01UOEteTnFBd0soP3VPelNdb1c6O1VMcmZwOmB8ImFu''@;'; put 'put ''MlNEaT5FYW8hdjRWPzFNLiVSK31MaXg5RSNLfU43bT5yPikmbVlhXTBxTH5WaWAyYTZnOC8yPStwak1eJms+RU1gQFo3eilCKnhGXnJdKHcsN2xJdCJLdCwyTGV2L3YjNXt9JCx4Nz5EZmMvUlJ6Z2hqO1hYKiNsUX59KkJEeU4sM01DSHksN2ohQkZ3ZWE/fjU1WlspcCVOKUZyI2gyR1BlfWNv''@;'; put 'put ''WjhUVFY4cFM5U2tjKVY7Zlg7QFtAPV5mKzN1eUJ6OTAjTjdsI21iPHFJbSFOeUg5eUQzNnUsXkk0cHpjJkddNSE3blU8dTlQKXk+K215VGBPeCU0SXxZRE8oe31uSlMxRFY8ND58W24jKG5LSzFrKXFPIXJjJXVfSDZuVlNfWGlEbzdHVjpILn1wWW9ZO1RraHBsOyI3VTNAPHZ1ekEySjcqc08q''@;'; put 'put ''WGZoTVhNSF5XSkRsenhYXlszNlsrXUM9VShNbGoyS2ZYb2ssYWIyXmEqYXdNO2N4I09nMHlELyEqM3FXfUglVn56b1NPU00vS0NlajwqdE9OVGRQTy5KNGpaQ0gyKTokfkx8LEl5L0N4UzI1WzdqbWs0VnJ7Pk0+SVRuPEhVWDNZXUEhZnw9WEZVPlIhMWcyViE1Tyg2b0RHQnNyZipLQVtpaTVs''@;'; put 'put ''O3YwdEVHYm8mIUlONTIqSlVhQkl5XUc+QDNSTUdFdHkjRFY8ZkVQcDsjOFhAR2txUHdAYCptYltZNFciRUhALDl2PG0zLCU8Z3cxcDFdMUx6KlRfOHlgZy4mQVA3UCU8Tn5WWmUrb0dacTldZWQieV1zUUNtcWpRb1JfalVaQkJzOTI4Q3FOV0ZRSXFiWkthUTpdJUkyeXolelQpJl5APTAqbkJh''@;'; put 'put ''UmZ4YlhEcz4udUBkSUJlVFloQkQxInRISTMkeEpYW15TKUkleWp4e0lWe3Z1JShgdiw6UV1eVzltekF5NU8uczVobEtuPUU3KFpLWzpHJXtRJUNlbjlXV3BrZkI8LGglbzdpez9YKythVXhxdyFLVlNtVnhUaVJCWHx4bllZRz0hLE0qbHojJktaP31HZn41SVY8eyNbQ1gkZVFSXjQjUj1eZzV0''@;'; put 'put ''eG1WUnJERnkyZlg8UnlvdnldTEVFLFVZImFUeFspVl5RY3U/Y1NKVmMiQytsW1czVWlNfkd2WC5EJD96OVYqXmcoW1c2bVldZzVaWFNpZWYmUCtxP2FPMUJuYSs4PjAwK3JfOVEqL0FPJSZKMk1sbkE6WzduOFVCJlJkcVB2UXYjTFlwZlRRSDZJV3ExN2VebSlgRUxyTko7dTQhYlF3NS5fN300''@;'; put 'put ''MTEhKXNKa0Y6PGc2LGhTaVtlN0tEKDhNUEA2KUJ9RDckXj56YEZJVGsla3xTYz9rb3tXbzB+TCVYXkVBKz1qbn18IyxjPl9He2s4NWgjNERGYUpUaWpbS2dZN0d2QTYuNHhGb1lJOksxR1NEKilyaStuTG5EfD54TDE/JSVhPnVAcXVAZTB7ZlBiazE8KEx1bmVsdk1HYiJDblEpTjBkZDtAdTRH''@;'; put 'put ''ZV8lZEk2Iz1yYHFLXyhMYCI5YjY5RHZ1cU9FSXBFRW0uQ3VqN3xkSXl7fDtLaU1iNW03YFg8ez8haT42UmxMenB1d2h5c2cwQnEsM2dCZEZBV09AJFUpZnIme008KyRJWnQzMWcmeDo4SiJjX3RqNHFuRldreVZIRyJbYSJHIjpBTFoyMHNkdyVbK1dHP0kvQmlXOFdjQzpMYDE5YltBKXJKX24/''@;'; put 'put ''cnpRfjczczBMSXN5KipHU0kybSM6fU5Qc2RkQEJ9UGRUZUMyOkxOZnZoaFAlTnU8ZFh5RSU6JChtJXlhWyhqcWlHaF9lNHk+Qj5CRSRySFE5Ljp3a1NKNisyLH1CQ0h0NE93WXhtcXJdMDJ5Y1IlQj5UJD1BOm5HWVtnTDl5PCFZc2U1UmNCdW1HSzdqLmEuailRRStPT0hVUCZ0WV87Szgofkop''@;'; put 'put ''RF5jYSZRZlI/fFZEM0VgOGB4US9+MCZBInkzU0FefHVSPnZ1Zjs+PH0jWFlhQmUmOFJQcmVRZi8+UWM0WkZeREBHI1QrQCM0X19DRDROazpQaV9qIzMlQC9BMW55UHs7aDJ7bDpWPiEhLyZQdFs+TFAxciQhWT05KENWfUddPVdvMCgzRGg+cjJDRWIoNExTJnlKZ3l9U2BOZ3EkdFBxVmolN3Nh''@;'; put 'put ''ZExJKzFRU3tSbU9lTSJ8WWtLYjY0KWBBYFRlTSpodT48ajZCekgiS2ZkTDthOGBRZE1HTDZ+UD81SVB2WnZKcCVqeGVCfC5vOl56Xi9pUjc/Jn57UVIsfDQpW1crM1pCS29AYHdBSXJWRU0pNDMha1Fzfm1LQj1OOTFGaEoqb2w2Ny5hM2t1LjdgXiI1dVZuYGpkNzpiUHVBaU5udmAhRTRHLEAh''@;'; put 'put ''N2h5K3lCMCMzSCkyR2NPdkZZK1NJZWJIfVN9W1d6IkBTQ0RxbWMiQEg6M3Jye01mQjpNYzp9Vnw2InJLUiZkfkh+PGI2NXN4eVtncypmS2Y2PnBlNTY1UihaRWN+OyohWHhGKCVzQm9mMGVIP01kMzkxUlhNem02Pm1Re2g2STtRZjE/VTVUcHBzM31wPmVfNUc7NT0mYFZjdU87bFRfOHIrTFNm''@;'; put 'put ''JSxsZm9Kb1lKVHsrUDNWQFVUdV1OdTtnJTZfVGMve1lZYWFoTmM6a2gyJE05UTp2RiQ3NjFAZyVYUXozY1BSNn50QndeREZtZiNfWlRXKnlbbiZaYT19cTlyblpEMmZjZ19FbUBEZSlgN2MsRUVtI1ppbF1heFFYLG0vKTd7ZSM7TE1bcTZbK2JsYmQjb1hObDVPZV8vTlpjZThQZFpSS0VJVV5J''@;'; put 'put ''SF9xPSxYbjdUam9xc0JecV9jO2U8MHlVO0RxK0w4U1s8bVV4eWBXT3E2K0leKSMpUDVEfjYpWlNLbzQwOilJPj89X0NiRWBEKVoiJlZ6I1cvYy9rPiRxd2NoeWRRWTFzcX0jaTtiNWtRInJjUEw9Qn59IWZJeVokSSpTLHBbYjQ0QXhEYVpiVnxXOz9uKlY4K019RCRRPlRBPWs0LldJXSRyNDIh''@;'; put 'put ''RGlWeCE4dUtLRUByPVUuV2N7cU4+Lzk5Kn0rZTBLbiE+X0hhSDBfRWdOWCNaN3xIV1AjfXI+aD9OQ0U+VDlCZig7fm0qbTVBPV5OQU0zQ0NWXUZYV29NI10hVlomRUVgXyoxLyJbYkBtUDU/dilvP0M5I3ZGZ1BpPSkxSGVlKytsZnI7PyorP3M1SEs+ekJ0Yz94UyhATH43d1BCUyVhKiYvJWZn''@;'; put 'put ''VkAsNTlyIVFCdCNROVRQazBuNn4yZUVAWGRDTz1gPFRkU0BUV15qQ0dgUyRsJHt9Ym4oYWlocml1LDdnalspe01qN1UjfXJbcGd1NWY+dzYpdEZGSm9nSEcqP3VqZ2x6OXVGVnhXREI/Qmk/YW14LDNga3YoQ2NZdXsvK3BTJjFUQCtwb15TUDN+fiJNb3pNKzl2ciNlNWYpKzcyQkt4d050akJ+''@;'; put 'put ''NVg8RGpeNSRUUEg/dThlRlZ+aE18L2hIO1RoN0dIKW5AUFUhIWhwUmI7RmlCN3tBPll6an54VDVzUzJkUyRpUkohUjdfRlV9UGpwV102VFFdYntWazVEeVlsd2Q1dG1MdG0vWHQ3PFppRHQlbkZ6XTJeZTFNV1Bhaj4waHBdRjtFMF5san0hbnhdVWhabn5gSXRDQV40QWt9SCp1a0l1Qj1FR21g''@;'; put 'put ''OlF8fFV0UGAzTE1WcVZ+a3dKKjBiMTh7YloySGs2YXhPO2tSJkQlLD4sJFNWd1h4ViRHKjZ8UC5EV3lwRS5aKlpndG5JNXhRSk9Ce0djQVI0KmtwMVIwSVQzNTVvfChdfktHJDlldH0hQ1d2RXdIQ15VTC85LDZXTnByQitENSVYOiMkbURsU04pfTdUNnJmVUFpdkw4OU0wUnUxOm9McFg1ODA0''@;'; put 'put ''TSlLT043P1htREZNV2p1ODBoZChuc3xmJnhAVWhlTD4iNj8oYWxqRiE4N1s4cCQkJXJMRzAhdm80QGh3RUl+RmcxTkBNU1gsNWVpKDZHZz5dVTBBaik8bTE3U1dRZGdQZ1dMbn5TWGZTM0w3IzNnKkhCaWIvPmA4cnJVZmhfMm1FeEc5Mz1NbXhJQ24yfk1BZk4uSjR2JnYiIiRjcHhYQ0o1MmRa''@;'; put 'put ''SCt1NCJhfFs8Y1kkUnNLc3g9RzNlXXY0N0xlRTVdPitbNiEqYyNCc1hwK0xXc3hTdyt4SVhzdTdqUz5zSmJzVldnaEElNFk0WkUrdC44NztOSlRnd0xFWi5xKj5EP050KVNpdy5bdXVJTXRjKCpaTDVvPns6WT5YM09KckwjMDcsNlhyYjtbfjxiJjJlK0lOYThdYXpQMSh2VUxfOWBOKj81Oy9r''@;'; put 'put ''O2Q7K3YoRDB4fEl4YWdCIWR2cVZ+W1IwQXUsK2YiPlUjN2k3QHopRy5sdC53UEdve0kpZyRmSl1xaU1VO0ddOGpuOmNdaF1RPlFYVn52UVdDLCFqJVJzYTBBIlo/bG9lZHBTbVp6bDF5OTgwcExFTW5rXXMwSShmYG9TW2IjVDJWdUcxa2o3SWIyXXJNUXFsWUQpRDlTYH1gOHBLcDJwIWh0NCgo''@;'; put 'put ''eVRGZiQva1NHSDojLEZTcV59R2NSRnolUTc3TVtnR3M4ODxIK0M1eHZDM3xrUUFGVHUlc10yZSM0MkJvVWl0Qjl3WjtWaipPZCNjVzNfTnFnI0szZHZfSjFuZW4scUtwRWgjTy9ES2E1PU8kV1FIYSFTZW98VSlDeTs+JTRYUFU1eWUxNHx0b2FARis7JWpQWSl9eytaPXRVI05hKGhhXyNpLFc4''@;'; put 'put ''amBzbjkiPix3MmFvMDFobiZFRWZhM2ZXYG8hSVVqRG5kNDB9Rk8vNnF5JltDM3F8dzN9eiR5JWl0TVp7YUp0UGVJeCFIe3dJWEUuPlltcSlRS0k4MkVFUXc9dVpFNmYqNyMqN2wpWTE/dTFifVd6QDBjNkVSPD0yfVRWUCV5b3duQ081cC5GKEM+O3wyUEZ3QnY8dDtQRDZrPD1EZmd6eGA6QGVH''@;'; put 'put ''fnZJN299MkcrbSVCfmZVfCZnKkNQUXlgT0hocGw9LFU3MUpdfiRTU0NKNXE+bkE7UTZ7JW1gVW1nVDB+bEB7QU8kcCV2c295ezRqWHlWIkJYKnAzWitEbVJLaUlkIytrVWxOfmEvRyxQPmxJPW1nXzRobUYmcSVnSkZvOyo+RHl9fHFhXzwiZUZbYllkPy95RngjKUxZdnUxXWp4P1lTMC4uQX5r''@;'; put 'put ''QkU0b1A7QllNPCklTko5SDh4UHc1Qmt1ZFV+M1lMR3xCV010NlBLfSFHUFMiQ2U+IXR7ZSsoT1RSJVNqQ3ghSk5MOUpMK1s9VWg8YWNrYjdVI3llMHolP3VUMGhPSnBYb2pfR09FWHY/PnRxIS9GYDJMdDddMFtEb08seHh5NDVTNUtFXW4hIUk3RWZ7KDhoamNNRXBUOGQ7QlBsaytqPTxAQ0J2''@;'; put 'put ''a2gxLEVhZz17RlBlUzhhQms+Y0pwQzVTISlPezYvcGpnMW1jajdwKXZpXWF6WUhxaHRNQD9LfXtqWEZvLkhxcUQ/MzsoTSY1KHxaSlFaM2RtRUBMY0R7Ml40M2xYRyNSaWNsQ081d2kpVEI7MUNNUTBZKz5JcGlVfkJsPWk2fmt1XT1dbjRvUCpCajxgSkJ+NHlkPVpTWGA1VyEqSmRYJkoxYTZV''@;'; put 'put ''Z3JmNDB3LkUrSCtVTm9gciw8ZVRuYigrRm99fEImYmZrTSFsTToidmx4RE8lYD0/KSpOKG48bWd5NTxCKEpZNCtlPH1lWyRpVCo5RHpoXiExYn17TSQ3YHopZChXZWg3VnhuZl5GQ253akpbe3MvUlgiOzhuaHxbR3JuQElaVm5nR0wmR0Y3YXEqfU01K190LjBEcFJGVjY4d0dqVCxQbzAiKUxO''@;'; put 'put ''KUNyXVReZj5ITzZld3dUI35+VHgycXxKRm1xckhpPHVrJD5gMiVNVzQ0b3U5aUxqJER6d2YwIiZVVitUZT9AblNzUVNPW3o7VDoma1NER09ydlImbERDNzxzUEM9b3MsTVsqOXFuOCo6PSEvIndEPFJCSERZMzpWTDZKTjJ3UWxSTEtoJDx4V1djKWRlQzBASHg9ZX0kMUc3c11rUWBRLnZxNkss''@;'; put 'put ''TSxRaXI6I2RFNCN4aUgse3BeMU58YTQxLzNhRF5uZi9SV18xWHo7SzgoR0MvUElFaShRdjtQQWJRTXVOMERJfDVwNTIoZjwheVUucTNdL217LD9bOVdPRSMoWyJPRzJvU2RYNzU+cSpLWlJPI1tqUjtKL1VkLytiNy9Pe0ZGZX5CVyJTdkghei9PaHtnZHFeOS9HUFkjKUlmTGdYUHV1ZnJLVDJd''@;'; put 'put ''REZNR3ljNWdUfF1Hczsja2JMenVWTzVLPVdPWlBJcEtlR2l0bm9WWXxJb25dNjB8QDdFdDF9NChzJSFRNEZIVzZ4Kzd5QVltRnozPm5Me1UhZ1FwW3J7bktoe3AuUVgpckc/Tio6QX5BeEl5MF95TDNsRW1NfSJjOVpRN1pmV3A1I2xoe3xkbkROcHkvYkJeYkMiRFNZIX5PdE8yT3h2RWdGe3FS''@;'; put 'put ''OlJBbkxgYExDKTpOM1N2aT46TXhENCk3cmYyWEpia05jPFhDYGxWXmZeOTBQWnZqeH5GIUNbRX0yZzR0JC9ycCMocFslNzk7Lzxkd1QuSCx9MCFkeXFlTmQjJTtLPWEpU3c8c3kwXih8USQ5RzgiLlRDcFJ0QCNocy96cllvOyRhcj1pZ2d9XS46MUJLbGR0OUl+bzhkTG9gV1dEdVksMkNPXy5f''@;'; put 'put ''a1FrRE5IaGpbRVdCdG5iQmMoQnB+OXB6VntJPiFZSkZoVS88TF5wXSZtWj43cE1DdDtbPSJJVlduZHY4PHckR0RWU30mKStObVpWZHVma2VuIy9gTEd9ViFXaHxJTnNdI1hbNEhxRzZxOWxlRXddeTxEJkV6Jmg4cztJS1liQT1lKXo3cktoN1MwZClXbUYvR3ZpMChoIzlSMjRaL3s3WFhIPTla''@;'; put 'put ''NFhpOXBPQnF6dj1BKEx4fGF+WmBucXVURVNXaGJ2ejZQZ2VBeHUpPio2ZW4kYTM/TEIqQEh7SSNDWzd1V2EkbC5BbXJNaTA4fnV2ZUdxLi80IlZodUZdeDY3aFQvPjM5N3xsUlFuYFEpTl4+Q356cCozOTdOODpxRXJgQTNDOSV7QmUlQD9KNXdqIThuRTl3OmEjQktNLil6fnVnVCpVM1BLeSU3''@;'; put 'put ''b1A4PjM2TzZpWXwmcy9UMilrfk9vfVQlbU95KGw0XSQsJSNUXnAkP0YwKypVTiouOiQ/LGZrZCpkaFk2MjsmNWk2U3V2VTlDd2g7azhqT1BEfFAjUzY+bjtzMnRvJjg5KzdaRVV+MlRscyVQdEFHayZGOHclcmxuRGZFYEtrP2lQYUVhR25OR0ZPW0FhVH04O29ZLkpQODJbY0pCPU5BMktqRUcl''@;'; put 'put ''YUdIMHJdfmRkJiohdSpQR0UkXmFoT2NPMkAwUEZPdXJPbzYrfi9jSENBcV8malkyc0FSTzZPUWlLfEs7bFR0ezleT3w6fmYyOENSYkwkel8oWV5nMDtSSyR2ZDlSWE8mWF8rMk1lSnJyRDYwbW1KeGtDN34wclI/T1Y4WGpadkM/TmUySlc/PkUsfkk2KGMoX3w9RF55cWsxPjFRYUtCRWVkWXsv''@;'; put 'put ''JjtzOHcrcShnQ3kzY2l2PlpHOHw1NEdTZ2REVU5JVXxYOjR2TVtVIl9xPE5bOFJGTD5AUW1qWEtnRm9uQm9fWWZsUlYrOzFOW3lWckgqMjk8PmNPcWhOXVo0cGY3OzoyeXxnYygsMlVAfVM+e0skXTwjZHM2dDVhXU4zSi8yRWEsbl5hbTAvOiFUeV1NWDhJP20zaGJ5dVcjNWduPEY4YmBUUnQ6''@;'; put 'put ''PlFITWVMT194KnlyOGdPfSYzKjAwMzNGLzhxRlFGfkpYYVk6TXZpTCxZNn5jNTtFN1FdI3UpaEcpZD9LO3VjYTw/fkdTM3RlZ2BVd28vZDlMKSNieTY6WioyXlY4enUwKzdEc1NefFRIY3ZEVmNUSXhmVSo9QE8vcDFQM2xLQEV7YzNQJTZjJWMjIT16RDA3fWphN2BvJCN1TnNTYmpCQGwvfT03''@;'; put 'put ''IyZ6MCJ0NyI0MFpUVD9hVk9IMXYiUDh8ZypoRXIyZSUmYjJ5SUtBdk82Nz8yOGdtLDtMP0JxNXVZKnd6fiNSVy9bKXV3SEVLYDU/RH5VVEg6YzAkbTx+XixQXTlIbHF4bG5YKSVUN2RLS3smLD5PKm0idEBPdCozUyVdKCMqWn5GYis5K3RqKT1pYFBnZjdaY3JsIlhnPzxHeW9wIWVXbUVHek5+''@;'; put 'put ''L0xnRHFoZXA2UXIle0cpKlFlL0RUV0lgVnlmKyhOcXdlKmA6X01APm1NTz8mYy9mbG4lIkNfbEFVYj5DTis5NCgmdi86OTVvZyF+VlJ1a1M5aj5KczxjZDhJJF0rO2FiXSFQS1M4bzQiNDo4V1VQfWVQPDpCNF5dZT8yOzcyb2ojTiY7QG00YklJME5BZ18pbTFfaDxuQk1DKWtpNFszX1tIJm5C''@;'; put 'put ''UmsjZ2BSbDBHQyozL0NiTjhhQH0xREUkc2N1MDElMyFOSFJjLCFMNUdtb2Q7OzdmTlZvIVIhfFQwJFBKKXNmdnlncFlXJU05ZEdTV3xBNUI2SlJMZFt1amE3ZmlIVDUiQzpvQGR3bVdULj4/djdHVUdJJWVxT0dTdCpMdGBnT05FNFBkYUxmZU4+dkYhWExSPjNHcDpmQSkrYCJmaHZhQGJsZU5y''@;'; put 'put ''b0A3fCREez1GdU8qUzxUKUdEfHVgTVBqTildX2dre2dIdENodkYxRTNPSExEQj1bPTpZeXorNE9JMEY9LyJkfSl9cmtkKV5MWFhpZkskNHEse3tgSDtGJGdlQyQkXismbnpobGpRRGhXKU9uXTZHLylNSzh4SXU+On1ZVjhDIlZoUD8rflhRbU4lNX57KzkyOytlbHR5M1kjc25ANzhOYFhJUi58''@;'; put 'put ''bG91MlNfZmYsLCpuQD1lJHd0RH5Kc0FKdHBNVjtOPjVxczJNbDpDdn1HclM+Xzk4akcsIj8/bis1Z2NbbUs2T3gkVzpyWyo1OWw/TXpufHBROH0lYDlCSmlveGdxJTUkcyw5dmRXbS9EMTppMH1MTztzQ1VodV5KPU0kbDJrQkQyaiR5MURbSz89V05aWHZwcD9udCxlNjk3KSFuYExNJnZDUXZh''@;'; put 'put ''VHt4cjdaYC5eI0BFNl09PSY7MzI+MnVfYWJKJnVqaVlwLiVCQz4rOF56YlNwUiZebFRkc2FbQkNmTDlHbWRTdE9nQ2VLcl1aUWBdQ0RJOH5vJUZXcVErOHk1YH5bUFh4dX1faSkyZEltYWN6cS9AckkiV181MXNeU142PGkocjU0MGh+ZFN0VXUiWmAyL2l9ayl9QnRVKngoflNdMCpvRzk+fl4+''@;'; put 'put ''Snd6Rnc1Qil1UntebSxmazpsX0Z1XUo2ITZqUEcxRzlELGpVdmE2RTojOHUqO21VO2tYYS9zQztXO3NaRUh7dU4oM0s5QDhRQ2dqaU99VTNibSFXOGVpOSEwalVDTnojI1FVS3JjWk9wM3VKdXlMO2J5WkdAOC9PU094a3skRDw7Qz9UQltFO1FBZC9XWjJ3MHpke3BiTH54OzxCQE9GXWVFKl13''@;'; put 'put ''b3pbRCpwfGB0NU5sL35EUEUvbWtkWjArUV4vQGxvL1FHOClhdmZkVTt8Wn4/cjNbPjE2KzFjeV4kO2tufFZrdzZVZTtzdDpYeCMieHZJQ089dkYrQzZvQjVgXW4udlNlfXdrYzkvNTokUDdLY0xxbGlEeE5jcGA0dlZ3WVgpN3haYDM6TkplMSklYixXIXV8RyhUODNOVV1JXixjNDF+Tkw1N3E3''@;'; put 'put ''YkN8alYvbF1yZnhGaSFiQyswUHkvRyx7RWZWWk5kVEFONUBUPDNiIy5HRWp3RU1sMWl9Z0lUJUcqUDtDRVU1UmFhWGFzUWxESU56ejg5KHclbytCfVJ3WFUlWEt3cntuPn0+L3MzRCQsZCFkSjAoL3RTJlRZQyMuRSx+Q3lGQUJrWiZPajhiPjUjaiozNElAKkAxYXQ+M147KVcrbW9yaUc4bU9O''@;'; put 'put ''VzhdUHpqcWdhTDciLkxedlpeK0pAV2MmR2grOCUuKktRQ0JIQE44ZlZxMUQ8NmlVLEB0QTtUYmlYPXBlOzcwbkZdPWVZZClANWZhUV8sOStkb0deYitlPEx+NVY+KF5sKCM2W1dMZzcvRVA6aEwqTE5MNDE4OHsxME8uJEciREY3eD15YlIzW25nXV09QFs2dUdaYyF5bjU0OXl0PFZra0k8MixI''@;'; put 'put ''OHR6JWIqKlhycyYzaShdWTBJZkFWdjI+Y04yeH06W2JGUT8pNGYmd0JeUHtPdE13YUMkLjpiMjZQV0hVPFhfWUFsVWVjZ05JIz8iMjFwPytSO31iQVRwKnVXXylLaURgMVhAdSUjckU+Pj5gNGJPUT5aLihHX0QzMT1hc3FuJE1RanFHfExjQm1EfmBQTz4wSWYiMipdYlIkQyw+WD4wVTc2YG5X''@;'; put 'put ''el1iKip6ZlYmeixRJDc1PSxRWU8sbVlwdn1gXjt9a2g4ZnhLN1ZOIT9XWWY2WWxyUls5T0tAOG99SF0zXzd5Pit9U0M6KFNtNj5mLnZoP14kR3MvfVlFRXRWdHdEMVNtLHdjcX0zX2hmI0kkImhaZFRCe3hPTFJRaU1jd2BfRXVuQXZjKld1PzJ1NlpYUD8qaG9iI3JqViElenYkbGd0TC9GdjEo''@;'; put 'put ''XmNPcHV3YHFwcmI4VmAjTE83Q30qSW5MfU5PRUVrP1c4SmUjWlJvaENPPTk4VkleUyM5OTRRV0x1a3k2PU80fCNgTlVqN3dzM3k9VG0lQm1HNXg/Iy47W2pfaW1LPmAuM3A0MTteIzdTfV91UTZyemZsVlhzX11za1BtcjM5YWlAIm5PME5OLCUmNVgjYW5BNWxXVEwoRn4sZ2VocWwrcjE+a006''@;'; put 'put ''cEsyQjBDKFdNQWs3PzxEWzg+MHJDJStpWTYhNVhtb0BqZGUrVlkwVFkkYzgkP0JPUDw0L3xdNjc3PlUuPmE/cnFlTGZGXkAuKEdLeXJoOChYNkxgaVBOU1duMTwqTTkqOWtFZys6T143YEBNbTA3Z3dvaHxFPCwhYFUjOXh9WkJ3Umc8P3lRVDBfY2JnXVNxOHNPXzhhU00wMWNhVF5LOyYyP1l3''@;'; put 'put ''bmh1I2d3e31aU2okI3FGZHpZYGkxUmo4NXdicX5IemtHXUJfV3s2PzRHX3RHLzxaIjh7RX5WQWQ9MGxENChqYH4vcmVXPy89e2xMW2J0a045OkUxYSFFPHYwYm9GVVltUnpuQEB+djolL1Vvd09ddzxQKyU5Y3w7UFJWQzJmMDNxPEEieXw4cnp+OyQ5Xz1wLD1gUWVibHpwRzxHfXtnXUdkQFlE''@;'; put 'put ''QGt+bT8jMVldMzt1JSR9WTl3aXh1L3R1KVlnaEYkS0YvRngkQi9iW1ROekowInxDUHV1M3ZTbClBKTxBWlloWV07TnAvOyYrJik+Vn1TMi9jZllLYz86aDRUbT9VKD5ldjF0ODRaTjYub0huVD5PS1ovbSUmVHczNkZPfDZ2TGJQZjkvXT90XXJSKHI1fk53bSx1Xml2K21YXiVdJVA4KzNGbHUi''@;'; put 'put ''X2lVYXxwITpkTTpiaDNgbFNNeE97Sl4/L21VPzY2X3N4a3ZtXTtzMjVyX3wxKTA7bloxTDBHeDlDTFAuRU1qUV9yZ3o2KyQrS2AyXm01a0YhTk55S01JQXsrSCV6MHZ4eVRTRzcrM1hxcEtlRjBKdDEuX1MrNmFDQ3YiJlNzYH1qP3RuRC5xMCkoYWtXUmRIbz1NTFcwN2B2YG5KTDtnKi8rJiht''@;'; put 'put ''SF1aYFJpUisvIT18MmVwOiosc3F0fSZMRDNSIXtjOSJlNX5vWH1uWCx2UW0iTnI+JXVNRi9zVXRFflQuOTcqdFQpQ2hpcGwxIXFRRUUkZkNFKXlIQzh8cT1TI2BecDVILEhxd0V1K2w3I2ZZMVZPY0BYbmN4T3hBSCNWdGN1Xj94QltKNkhxRGJhd1FbXzljPHhDInwqVV9LdVp0WSpoMHh+WDlP''@;'; put 'put ''U2QkIlkvM1hgJFJnZUNAOzxOYHxTQ3crVjdtM1EwWWl6RllqfW0rOSo0d2dCXm9VKCh6VHs5K18kM11NLyExXnV0d0V1XX5LIUlOdVAlJXxoMXR6ZVgiOHo2fSw8Ui94YiZDPzd7XWN4d3w4b3ZINFdiPWYqaGd2a2Zwe1tqPVJ3e2t4YDUhbihpM15edzg/bjEkMS4kfWJ6dyheR2R9NGpGO1Rf''@;'; put 'put ''PHs3SzlQUGpkRFQoOTZ5enJBeCZoQW07JTFnTiRmTTdncDIxQV8mbSM1XTZFOUleOT5tSzBEXX4mNW9BfHIsIlE5aTcsU0kxOEpVPklqRmFzP09JZUIsXnlCZCZhNjlOfS4qNjRlb2sqaGB9KiJqVj1TKTsucV1wbihieG1kZm0pJlImMys3TGp3LjdteFtnZW5TK1omQk1ORkdQLEJSY1ZxRSxY''@;'; put 'put ''MUo3QHlXU2Y2fEc1YUdAdnYsVU43ajpZTClBR1c5SWRxTWhXb0o2ekxfZipKOkshRj5dI0xgfWQ/YiIhK08oamE1ZmBNLE1+emM8bWxZPkJXNysmMWVbcjZERSUvUHFYMnBlSFohUmNJQnNAaW9sTXFdQXtONFVYNEg8YkhVekU/bD90PD9oOmVrQ0NMe21BREpmY2UuSVV3dlplfUVfVnxvT2BY''@;'; put 'put ''UThAZCFoK0lAakFHRkFLbXE7ZlRIeiNoaWhlRTxxQGFVKTBdNnsxbXVGenVdKiR9IVMlM2JIOV5fPWVJcz9tbUhsJlVLXmJbZndlZmgkckJ+N10zXUFzUTYyJGhYQG4zSXAuY1dtQHVITnxPU2lsdC8iPVU0Ynt+ZUVMT00sdWIiPVJUQ3pPLiVoU3BweVtOc0BwIzpPX2Amd0ZfQVRDTlJ0eHFS''@;'; put 'put ''eHBXWCNtIXkuRU44dTdDal9OQyF4ezI3c1JiKyJvXmdYTiFRaFNhdm5CWVAwTFJqcHE6KGorVyksYzRCa1ZvcCxdSGYkK1B5WWEjPkgmNWBsPWpEVEg9al48UXtzMyQuN3w4cn1WdnpXdXZhdyV3L2x3NG1bTy8zazR3IWx5a3E2fUoxKVBZXktEdG09aE9dZVRqYSZEO2NmKzt4dXw0S0AuR3p3''@;'; put 'put ''Y3skbiZSOkRfJCVBOmtaPUg3MUd3V2YmTDYwKH5SfVl1WH0uR016VCgjOCR8XzVvYWVAQyxuU185Zmhmdit4ZnpsQ3dkPmZLLzViVVVIWjhdQStvZkRDL1gsImRoaEJAelVaMGR+IS5iX3VEP0R2eEIxW3hlYV9Fbio0Tk1XMiExYVYsY1BHVSlYaXR4d3tLZyUkNihoYWJUQiJ9VjlEfSZKYyY2''@;'; put 'put ''dmZXTno9OiJ5QiM0O0ZdYE9jJjc0WlRWUmteZklPbEZ9aHxiVSIqMG5nOEFWfD5dbD8la0lsZFd3RXUjREpNPkBpTk82Iissd3g1Lytafk0/PmdNaSY8T3dNbDRUeUwhdkBQVm96el82Z11kKF1oIzMpIjZ6UF5tMTlAfmJoZUJHfFdWcS9wfVFiaTRlZ1VCeWFpU3UoZHRfRDorIyo9K3JYQXN7''@;'; put 'put ''LzhxVlVkNCxtSV1RY21wTEN5ME17Y1lWazp1bj08Y0QubTxfMkx2Xk16RD4rMXAuTmx1Mj1BO2JwL01BS3hBVC98UWtJYSFlXyFqRUo2LnwqZjRGJT1gLzorUnt4W01RSSRAdjFCNWdnNXwjbVFEL0V6ITtpZSsuL3JWPVFmI3ZFb1MkIjA7OS9AKE1kcG5vandLR35oTmtZL0FSOCZ0bzs3Sl1D''@;'; put 'put ''OVZ7ajUxLjJmXnt1cltHVllSLy92RjR1SyE+c2A2YzN9YmdaXVchM1swVTMzJUNkRCtnaUozOGRScFJbcTUyPXFaMz93OGloaTY3ZFYiZWc3Z1NgXnE7Rn52QzFYRyxRSVlrR2RjOmMpaFZQLn4hcH0lJGF7V3FwYmA4PyJdYVU0Q0I8ZW9MY10+VTZLMzNTcG9DfENmTjlvWTFkTGt8bjY/YnxR''@;'; put 'put ''N283fDNGQHw0enhwaiFGMyk6MXc3ezFiISFLP19MTUBVa0g2WCptblRrMm43NHNmbHhBaUh2ezp6Z1sjaWp1TWdzQSQvKn0xalJCRi4oMG9TdT1kTU5McWk2TFplNjc9Pi5WVTo/c0ZXcng4dyp4UyNVZ0M2Tjk2Zm1LaDJvcG4pX31URWMwSUxkVmZdbklMMixfZlFXIlV+ZW5XT2swJFM4PS5C''@;'; put 'put ''dDxOajBUUHYqWHt1X3BNKk5AO0twQSpHSkpVdHdHaFRbYjBAfmopbypEUHc6TT5KVGdyc1o2aV1IUltYZDhZXiUmVUtDZDZII2hBUFdOUHZXaGZsTCp7UDcjS3dPPXxVP2I3Lk4sS1lIVGROLkZCR2ZyY11yTzJ1QnIyaCk+PHx2OkloJTNAaHc+YntJeU1uNjQjJn0uaWtbdy5+Z21FcHw/NUUo''@;'; put 'put ''SUFhTWNne09oTjpgRjZMeU86LCYqKWlkVDRENjBPNWBYTFU2KXR2QnosJVNUJDg/JTRUSz5tO3xmJD8rdz1FR05NR1B0KTQvKnRPJTczTXJ7XV9KY24weCxPQ1lXfHNIfU9sNDhOW2hzUCIhKV9mLjpRLzxCWS9+OyNNXmlyUUNmIz0+aixBU0gpZlE3TEJTRF9ZXSU8ZGg/KGhzdlE0LDFhSWIz''@;'; put 'put ''QiN9YTVdKkZhMSFUY0ZLZ0dLVGk6aj8rdltDWCtZZDxQM05lN1tqXUFZd3E6QUUpSGUhNUpPXlE0NEgzMkk2MTVANH45UXJJeFJNKSEwXUEiTURYKU15cWNVMiIqaEBUczI8MF9wSmxHPHJsMCllTVA9ZzA8T0VmQHBFSSk8TGEzcmN2fHBeUjpYMTFoUyZrVU9ASWZvcW4ocFgzQU07TlN4MlJo''@;'; put 'put ''aEt6NFkoKzdwP1p4Im1bNjgpSWModUBpbz9PIXs5d0hwP2R0KGNvZUZ3SzpYYTNBdXB0SWM+QnRKclpXQFhGenA2NlQzIlBTSUFbZXJVdFhiPFJYUVE/NHM4KjRPJFUlQUF8ZFZFZHhOdkVtU09xL1NfNmhaZXxKPWwkUC95aSldL19JO3wqb1s0ZSguVy5+TUVzeHQifVRaeTwpcTVFSDBxRDx0''@;'; put 'put ''SF5abixaNDd0T0NPJnpTb3ZGeVgxc2J4LHNgLGBjIzZyOCZpMFYqKTsiaVI1dy4zZXVOQjNNI1ZkYF8xWCp8SEpyWCsvLypNQkNydCxwT2duUkk+czRKQEJ0cm1CPmFqXVhzZ0pPfEAvJXR7KylncTZAVDNrNURLSV5jSCRMVVQsSCZtdjlxcktkbyVnVURRVzAzNzZlalk7NXQkZnc0TFIkZ189''@;'; put 'put ''fjBfXUwmZ0xUTCZ5PEE7bHw2Pi9CKV9OQyYvez92M3VIXlhyc3dDcW9OLnFyS08uaFgpSU5HMXM3QnpmQz9HIlM1eHVnXSxjZShNfWFKWFt1Ol8yXnBZPjZUOjNoMlUqMDY7dHtQRDE2PXN8PmJ3S2pZP1BjPEImXmVzY3tiVUBNQjVqZVM4X1hzQkZDJTdgUS43TnVENVhFWVZRMGJlcVpaV3BE''@;'; put 'put ''cFJKKWclLGhTJT9WI11sNE4mQVVVNT13QGE7e2dMaEM/NnJDSDY2XzI7T3FHPm0ic1pFVHMoPjRoK3NRelBEdFVJI2k4cWNrVHVqQlkzL0ppbXExSCo4Qm9FTVp4RitbU2ooZVl3aE5eVF0wN09ia3hrPnc2Qmc7R2Rmb3pwITNrZGY4ZWEpOHV3SzNaMEVKPVVzfDAiQURdcGp0OXZGbDVweVN9''@;'; put 'put ''KjZLWyFBMiNtOGxaXWtTKHJsR0c/Nno/PFNpIU99RUZRM3s0WkVdWzx+TCV0JExwRHchV1IheF11QltHYV1FfkByU3tMR3JEcUIyby8/My8uIWYoMjYsbldlXjVuXmFnQHA6OztdbUM7NmErUFhMfH13bEp8aHhydnJ7Vl5EeT8iOHUjNHhdaHFtOEdOYEwjUSZfdWpFVGVfJEZWOmxIaUdSRD5T''@;'; put 'put ''X3UzaUpWWEZ5RVlDOig7UERfISpKbnp6QDJUNzBDWT04fUpnd3JGOH41PTVdKU44eXw0Tl0qe3VHNmIjPVJkdjp4bEpNPFV8VV1tPWN8Nl1FRmVnMmcuR0xZIk0zdm06QGo2N3oyclkwZGZzXTU4QVZNV3NWaHFjSG9rQ2VzZmE8JnV3bnhveFRaMU9oaiV8IXk8cCQ0QG8xMzhWdSt+e318ZXcv''@;'; put 'put ''eG1zbzxpX140OTI+dktBNGQucUkyZjFxTFlNYjdgcXMzT2sjSl0yIV5Be3dEaGtLUHU+WGQjekREVS9gQH1qMTUicD4oe08/REpAMDtNX2BWKDhbNV9AWVlabFJxPz9jRyRqOS5+RDQ+IncmZlteNHMyP3ZpZ1ZHVUV6JH0xXkcrY1NOOkZzRStxJGxESG5BMlJsM0ciYiZsVXxaMGFjJWNaK2ll''@;'; put 'put ''cSNMO0VwNi9Gb3tEIWNRbjwvUTw+PjtATE90N3AsWFRpcHJoJVtWVSNMNGA5SVRDSTt0I2dZPlExMzpydWRkbWVMdmI+RnlfL3A/Kig8cVs9R148L0plR3FVK2p7QEUlcTsmbHQvTWZERShlZzRbbkRvYnwiIkdNUUg+IyFfZWcyOjg6cXoqUkF8Z21zY0A+MHFQeTV9bT8oWVZeVTVYOFZgYGcz''@;'; put 'put ''UGpAdHoxezJkdiNqS3dkRWhzXTBfImUjYS4hPzMqdWxkaStGYF1OJl1DdV5ATjt3WjQ7JCtUMTpKcjRqQ0FWTU9CcDNne1Z8MVomais2MyIyXmppeXxgKzp6bCNWKHpuTUVnLyRUT3pQVmx7bWYpezN3OjM3WD1vYHkzOHgoZGk8en08byMhITF8WyRYNS43bitkeilXOCQwXldAMCJnKW5+aD4y''@;'; put 'put ''NjFmW3VaTW5RczkrS0RiekBWeGp7T0ElayM7P2lMbVIrYjxjISlyS058ImUxPkZTanhfPVJbTUIoNWdTYDI6KWEoKXRFeGZ6K3lBX3pfMzsyNWooRjd7U1V0N3YzLjNWdnNxfVVpZTZnWGdjVzshNkJvZ3FJY1tjcGM0PHNybV9eWkpXJmNYNUs6dygxW0xOP2FvZDQ9KkxJO1cmJSwscylPS3BF''@;'; put 'put ''MzgjaXJYNH1bZTh4KFFJOF9gPH5fVW1LfTVsZTlmNjh1KVIyWCt9OV1PT3lsImdtIkQzPkVPaE4kbDhkalpeTz1BRSs1XjtSaT07PUxRcHovdGpgQzh8VUkuRiw9TV4oX1IjXzt4SFVHSUVpdC9aZmF+S3RTVSFWIn00KkFQJDNPaEElSHcoQklNY1l1KyhbMU9RIXdbU1gmaF5WRkFoTkdKPm8m''@;'; put 'put ''LnFfckIxOEUzVFEhQCZZSiRON14wOnd0SGwrIzMwP2M5eG42Vj10cXZwbz8oPHdjYWxKd1AqUHhxM2clQFNmI0kjaGZMbGtnPW9bbzF7T3NmJnA4XmY2TTI9NSJEcixwKG4ldnpyJmdMMjx2dCEwOD5vaHYvMmRrPW8+ez1JQ0siSk9YXlBBQTBbPkpDK248X0gzLGwkb0hMbFVeem9YX01RRkRg''@;'; put 'put ''XmxhO0RkMihZWWAqODd5dU9Den1pJFBiQ0F4K3t7VEc4TWYsR0RAbTQ5Vl1Ba0FYeixSWStPJWR1M1omQGY9aDBRJHAlXlM4RWhrTENecjQ3KkdRdjZtKjJWPGF2W0FxdltnPiVOTmkhdC5IZkB7ODdZTEROJEBKb0lqT11aSGU/NEAqYjZBImd+Qyl4X2tEPCRmUiowJnlNcnpuNjlVJWYjc19W''@;'; put 'put ''dzF0Z2RVPTwiR0RWRW1Qa2ZkK0t3OTZ0K0wpSik5bnFxJEldOi4zYkU9YWZjdnAxP0cjRis0LGZoKUVULz0wemg1NFV7S2BSaCppUCpfUjFSbSlNbysiOHBpKGpJRSR8ezIvYjZBRmM7S3d4JHBMT2w1NldFVzpQWTZsbj9CWjVhQiMzY0RCJHBqTEc7TCMvLGdVbiZpbkpgO0smPUw3VCQoUXlk''@;'; put 'put ''P1pxO2ooKCxfMSgpVUFYQmlpby8iInNzfXJOKjN0c3RoXUpQNWJvJVFGZDdXJnFnOntBTyY6TXd4P2dLTEBhXWlxX3whMT4uVVAvMilVb31ZKzxTYjxWb3kzdi5tO3N3PSFmZHB5RltVUHJ9Y0FEPlN6OjhmP0VwYkdIfSw3QX4/KE1TUjgwbWxKIWY8dy9MYUdxQGhTR0NwQT5TdSlNV2FSIWpu''@;'; put 'put ''OTBYOCZWaHlDIW0ofUd0YzpJakorRk5IalF5KzNIPDhed3ZiSCtvb3dTNUcudVVYNmAuU1JRKmp8KjVGYnNCbGcyel14cmdhNCoxaHJHPzZhKkttUTt1WCpdRnApOWAjRkV2ZDt6RHhvdjZqP0N4e1p4K3lCdSo7UD9Wa3VIPWplS15nYlM1WWxPRXkuXzc1X1BLYylEJl94WGZdTV4lTytNfTt9''@;'; put 'put ''SzswIlc6UWxJUE4xM0R4QyhDcSI1UTwyYEErZmt1QnNdMHlecDJdIyVGY2YxeGpqdHVCQl4kVW5rJHx4UUx8Y2c4VVE0UjtIOExwPH45ZGN7NztaUS9mS3xZQkIudm5KaS9GPmNzLEtgVDYlYDBTYjY6WihRRT9UYGJEY0pGYUtCKTV9ImtEditRKllSakEodjM6aSohPSskJmRGbmowMVp9PjVz''@;'; put 'put ''Lzh7V1kzZDk0V19nQFRWdyVBMENHOjsmI1RtaGRpRCFBJFBvaSJ1W0piV3RndygmOUYwNyo2V2pvS0JqPFVSYXVvfFdGTUgqKiJ4SWdHRXVdT1lgaWRDLFk7eURbfEdzdzZWbnRuYnZqQEhfOkMpNWlTPiMwbXBIfE4wRHdXZHRsfVNpbWdVXmtnP3UwRmRDeHQpS3xeYXV+WSgjO2MxRXJeQCJv''@;'; put 'put ''NmorcklUNGtkTGZWPmJJPV4sVUksWWFqcCYpaDt4MFJDS0NJbStVOUZ3aWhlWiNhSyNtVz42RTEqbS5Rczc/MX1JMiYkNGpHOG80Q1h4U3dHQ0ZwM1pQZCYvRT40bDFMW3hlVzdCOXMzRGpyU15LTmB9W15wNm88aTphOC5CWT1qJkN+bzl0MzJgKS5XUTVMOzRMaGZzKTsoPls7PGE1SSQqZHxg''@;'; put 'put ''KCo+T2h0VEdHOl1ST3ckWHVXMj54O2BDbkB2NH4uRSNPe2skY1VwWWBFRn03YD8xPVNuemdSN0Izai47JTV1NClUVnAlY1lGcnNpVztSZz12SGhDNzlAOG1faERiYGw7Wk9wMHdxJjZda3tkX0NvQE8xSzRsSkcheXgmfVtDRyMjcm1yayx6eGkhentLZ31lNz9EMFBDeT19PUNXQjV7YTgqS10p''@;'; put 'put ''bFtEMjkhXTlqb3dxK30jdTZ7WDd2XmVGTFhQZG5edVtVfiwuMW96VXohIixrKVFON2RiViwyRFNULlQ0TlpOaXh8Yy4+djc8PkZVSDUxQ0haaGN2OW0jP3N5XU90eE18Y0dPcTJZKDlLNz4pNEV3KEJYJFJzJV4wXltkWTh1ZHw1dEdGPHZXbHVPMnY0fkF+NFlgbitjIUtYcmdeQG9QNShDOCpB''@;'; put 'put ''Y1NZO1oxKlVjZkdUfGI4Q30pdjUvVz5EY3QvZ1EpcTt1NU9qbVozckp8TmpiUyt5JWpSfX1lXkZXWHpgbl9ubUUuaGc+LEhzX3llNVJPPDUlYFUpfDpHMjN8UG9eUjxFR05WLHhgaDV3Vys2WEMkSDF6aTE0XyJ2aSlgP2tdfj5+dWIyd3JETX5uOzZGT0cjbVUkPF05XyI6VDNaOnopdjhUakpK''@;'; put 'put ''dXNvTHptVi5dPWh9cUgyQl0oU3Y6IzhlP2tjc35ecXpVfj8lNkBvZmdlUFAkYWNtaE92a3g1Nj48biRAfWJ0SkQ0aXtiYkt2JjNyVj1EKjoze1d0cyliVWZkZ0BgXltbTX52Kns8WTNhRCxjYGBJczI6eGgoK3siVTR5bXUiVTlGZS55fj8ha359W1t+K3NANjRrfWozTUU6UjglWjJ1JEs5fjtW''@;'; put 'put ''ZiRHOUYlMEk9dm82ZVdtdy42T09mKTo1d01oU21wakpoSlpdbyt9aCNQWnw2aFE/U05FN2Z3JF1KZk9jbDt1OWdkWUZLSj4jXW8pQnssYVs7LzhJTGtSP2BzMTR3ZEBERS9yQ2woUUJ9O0MhdD1xTjlkSDE/VktYbUpoeF5tUWZ0I0skKlU7fDVLI1J6N0tIcUVgXSM0OG0yI35XcDJFZURpLmho''@;'; put 'put ''M2ZvJElJTXZneikxfDZeX1ImdiV3cDYhVyEucTpzWyhMSjZgWXFrVXs5Qzh4bXQ1S2U0dVhXPXxVKDhYekx+SEQoN0x+fTsmZ0U1UzJjSD8jd09ZUSZTSVByfEpFK2RuZEZwQCMxSDd5QHN2SyN0ZWR4SnYxUE9zV1k0UUJoa0lrZ1A1dy5nSFtiakc+YjZMZ0N2aFtWeE12SDIhYH58eHw8KiNf''@;'; put 'put ''azJmJU8iOGZSYFJbNChzezhqPntYPHdmeFh3aTghS2c5Y3xjenElbXkyKiFkUnUjYlN8Z2N3PW52Z0h6ITFmJEdyRmtfXSxiTTBqaTBlQixWclZFTXFVSE9+PilfT09WQm5qO2IkP0Jpey5aOXptTSJoJF90SWBnTHFNOGQkXkRJaCRzUjtnJlh3bD9kWHVlMTtPUDdzRzNCUihCY2BmJmg+MXlG''@;'; put 'put ''d1MqYENDa0wwfSppbSYuUGArVHVlak1WJldRSEdjNVkmdEJpL1EiVnFpcVBoeF5xLl1MN2Exb0NDJURWKCJDcz07TVtRIkYsfiYlKUgwNmwmV10pbkNjO11tR3g0TU1FbDU9Lkc5VXNkP2V1TSl4IUZDWFVPOmB9K2ttTGswK294bCNfMElTXWxJfHU2cklab08zPjhOL0VeSVQ7SXdvKEBmUC5p''@;'; put 'put ''TS9MTTA7RUB+KEhwbSU2Z3UjMiNDKCVBKCpBT2lzfjh1WzZoRVpyXlVFPTVZNSJpNiR9ZERxM3FNYzZUbmcxKzVoYyljWDJ5WyQ8OztQelIucE0/d3leeml+Nj5WN2RRW3UjLCJ6dCVCNjQmJCtNUllRTU5STV5De2w/NmNhZDpnTnpPWXBmOlZKVjdgRyIyU1NjMCljOSVDTUUrRjdgV11NeVRA''@;'; put 'put ''SXFNWE43O2hiLjUqN3tJNDl0d3htPkNFbGA6M3h4TXV6YFBwc0R5TFAhLCxgNV9uOWBxI1ZlTlA6Lnc3N0oxcm9JOGpbXk1nYl0mRmo/Z0VNQm98U1UsNTApZ1lZMSxnOmhrIUtTXmcoQH1lTWdWST9yKmFLSmVVW3VFaDs1TWJjUyxUaSFzYmJdRkZ2L1BLaEZ2WnJEbmUuO3s8eW0pazY/YG9r''@;'; put 'put ''O10re0p8dHt1N3FLVVs4KEVALzBjaj52RlUwZF4qYCpTfmJyWU5kXWw9Z2gpbSllU3V7OlFsKGtEQCV8RlhxX1A9K11QTyw8dDFhRlBmVUkxYU8pWnEkYTc4KV8lbyxeSTRzTT8zcmxddD5dO0gqQ2k2SDJBPSxreV1eZ3d7QVl3b0AhZXZkP09qWlVIOGoqPyJXTXYsNy8lZnhvcUQ/PDx4QCpa''@;'; put 'put ''cCw2SGwpXyhoIXNMeFFjXURGMyNnblZwX3YvO1YhcmdaWiUySn5gITMlZlJib1NAaFZHWyosVlsjZU0sRSI3Nkw4Sl19K3o6UDlwZ3lkVkIpVnE1JGMvKVp0SnkyPCk0eCRdQ2IqbChfQWs+cENyckl1RWdeVjNQa0ZselgsQ0diJlYpOSUqaCl0ODglfEk3Pnw0PEB6XmE3c3wlfjpwbSF9OHN2''@;'; put 'put ''fTlXTGVoaEJQODxPYzNiZDdlVitUVH1VX0dCTF9KIT9wVl5jOnJqdVd1NjZMLERMciM9V0ckX19tbFd6ITw0QXhqTnUuTlUlcFFRbEAvOytRPFFWQVhTODs2OWhVTFl4RmZuT3lYWGhLNldRNy93M35PbTl6ME40eXJnOGFaSmE+b1EhO0RwLCh0aUlwQ1VLfH0zZiguUihUM2tgckA+cU5aUjgy''@;'; put 'put ''PyYiUXtsWytAd3NjMEdOfSUheXBuXWtFVE06a0RdK2EuW2tkWVMvdSFFOkRNLCUocTQqdUddTyR0MF9bSzRZPEU3OXJKYWg0UTpnLFciZ3VQelo1OW1hW3djdHNwRmReaDdiVnNBSHU7d107MVo9RiVKTUJGeTlMdXpqIV9LRSRwe10+YnlGY0k6X0dPJkZrIjA0U015SX5LOk84YHVlK0F9QmZP''@;'; put 'put ''MWlTaWIqVUIlNyRsfTRxYWElZi44QERgTjpdYT1wX185YDZ3MChCPTNga1hST190X1h2LyR+VkM4Y2g1ZX1ISn1BdFhIaDheNDlrXVFUTD8sKHRnWnAoaVliKipoNCRKaVNzIUU0WD5RREE6OyJ+PilRTTh3dCJfOSQrRmZBfTBPRCJrcSgidyNXZyIuNS5QN0wsNSwyMHplWGt7RGdJOntUKnk2''@;'; put 'put ''NVROU1VRd2tbX1o4TzBPKCs/aSFJKXJjQURbPSslfTc+Tyx9eSpBJldlKnNJZF1CO3kjNnUmKld1Oio1Ry5TSzA3MD0wKlA9KHs/cSFOPGBacz40UUAwdnV0VEhrYj45NH1ldWlPbUxBRm9hdHtpJDQkemJSaW5hJkQ0QXhEc3lZWk4wPGNvTX1qWT5dc2hYOGdDUXxqfTg6Z0tHOD1jQ11dQjVI''@;'; put 'put ''cn5TOW1MTEc2VmBtI0gyNX10RXBQa11yQipKJk9QNXZ9Onl+Q21kNWA/dm0sL2IxRnZSYFJaV0ZOSkcjMk9EajlVI1QmRjtVeDRsW2skdToxNHhtV1RAJmYsNV1PNDJ9dWJLMDshOVgzMWNZJD5WXkM5d0F1QmkxSVB7PV92V3djPzR3UUMuVFddQDdCWCF3SytnS0IiRHF7fVtMVGwhYmw+NVJV''@;'; put 'put ''SGpUOnRBeWp6QlZTW2NOPmRYejBSTzJ1XSUmNSVRd2g1enVpcH1vYEQ8eTQ3OEB4YFRHaT4icSs1T2Fkci9qZ3VgWFFWYStKeW9jal58aWd2SDkhTmxHUkVdYThGPV46I1VTO3x4V30uaFBRUyQ0Y19HOi98WjtiektJSDYpfXdNY2h0UHZQZEY7RDoydz86UzNEa2diYV1ZZkpwK0o8KGZnbzVa''@;'; put 'put ''ZT9zWDgoRGE/SDZYUy59I19bV2s4dzQpVnlKR21qfnEuKHpUUUNiaHdPOytOPDVmanIiRnphez9xaDEsaDEoLmAjTyVKLlluQlleWi8lUlMwal5Yckl5NG5DP1VmKW5mak1DcGtmRXNyZkg2XSNCc358Mn4mW0hhSjZ+YjIqSGcvd1N+Zz1GeFRzO105JmxzKyxWdV5laG5XM1B4ZVZhUXxkS2M0''@;'; put 'put ''UWpmVl59P2wwZWA6ZDd+YG1gfVlnWztoMWFIdDJEY2Y7dlV4YT87fm9UOzEla3FfRiQxe3RDWDpZWVZYXX5beTR+fiNCbmNQdEdhTVs9KTFLVERmfnVpPC5vTmZiP1g0PiVadCVITiVGYlpTUXhpdTpmRXN+b3wrPWBXdHt0REJ9Kz1kcTAhIXw8OysqZiJjXUJNQVRpVTcyMHdrSXhlOEcpWHdt''@;'; put 'put ''Zn1eNGBmPV56QHp2YlNPYFFwZU4jTjRWPzZwbCRYO3opfisvMzwjdSYmUHFzT2dgelUrQVkmd1VDOj1YLiRgeU00dktiO30vPTF3MldtYVlzbUk8QVtUMTB3YDF+WT5gfiEuMU1ISXUxNDtaUSVRUz1kMEk/VSVhWjU3by92bGReJHFreUwoLlFYbk99YWZ6ImReYGpISTBeSHs4fFMrelg2LiF3''@;'; put 'put ''OER3Pj9VQ3BIbnt2MlZ1b3ZaKDdNLEh9UlYqZSVXOUNMNWVCZldUOSxvZWEoImZLL3RgeygyKW5jU3p0VHFPXztZbXwvPjMjSnd3cXFzfC4yRklRenZ8RHs3aSJTTGhPMWx6KHMoKjdAKmd1V1BEXzlgXy5lVUMsRnw6NVg0VjtuYFgkKHhHSFM+L0E7MHhUe0hUNUc6PzM1SDUhcStacUI6MCRO''@;'; put 'put ''SmcvP35LKTU8TzshcG9eMUdXXnxUaHNGIiZHJjttKiQ6ZU12Ozt5e19fXlRYbFtvXTAwZXlERWRmeEtoMklPM2tkNGkrWmVSOixEe0tdZSYyOUs0L3csNTQqcCtQTEBpO2o8SmVsaVNycSsqPHxCbSh+cG9EcX5JQWo3NWVjPjg4TCRHW31KPDY/WS5RdEpZfHVZfGkjR3dEXUYhR1slekIhbDZy''@;'; put 'put ''Sl4kTXtAKSo2NHJ2RzdFYSs0fW55KkcoaCohNnswRnRjMkFmRzMhZ3NfRVNtbW9QdFtsYW0me2JwfTIsITRwWj8jYkNddlFNaGgsTE0yfmp6RWplXjZ+MExoM1pPNSthaFcoLz96IzRiOiokJWNWe3pFTkBYKkpdcGBubGR+KyovZ09OQFJGU0k2dVFHV1gyaUpMLihuWTc/OFIzRmVSelJqaF5h''@;'; put 'put ''bVd6dFtne1RkP35FOyhrM35KQmQxYil4cDk4ZFEmKmk7TmpQMVglfW5VXkdKaDVAc2g9Lm1rJERKdi4/UyYzPF4mbDdCcnx+Wk5qfnA2c3hJISwqU1d7X1ZEVF1APyVzaS50NSthYGVNSXkvNEd1UUJLUGk5LFcrVXNrR3A7YCZ9XXU7M30qOG5nYnBEcS8oLH1sUEMkKjB6W0AvYWo0Rkt1bDFI''@;'; put 'put ''K31RUmo8KEJ5Z0NdTnUmWH5Ae0tlTzRKfDhJfElufWo8MjdDOGNndVE0Tjh4UT49bGs6JEA0WGFSMD45KSZ3WVhNP0NAQ2RlS0IxJD5HNncwSWVBQ0xobzlNPSlrd0dlKXxjVlhdQ0g2ZSY/P2NiUnV3JmFqTGpDQ1RZNkxHLk9RKjJPJVghLlRaLmp5W0dPMzdvPndNW1AzU1RObGlpQ1RCWH44''@;'; put 'put ''ND9ORXNpNElmbFdbQXR3Mm5Ray58Q3NpNG9POFhJeHRJOT05M300MlFhWVNJcF5gdTNNLDZtaiNbNn1rZD1jRTRMYGpMLjs7SX1sV0s+flhneGY3fjAjd0d7PTRkZExpMjZzdko8UyY7S0UqKyJYbWxkJHFaIzZkcjBETz9TTlk5RlJ7WlFqRyV9YElyeE8hKWovOnZTRz1AJHUvN3c9RXFSYm9I''@;'; put 'put ''fX1oIn4kJnMmQHgzSkA7O09vZHVWMDd9OkpEfGEkOWZYWXkyUyQjOHVqTU9ialNDfkExO3pUI3o5LjdAcyVmSD4iKWk8YGc4b0wsZkwzMyVobHw3Kj5KaWlDVG8yTiooI3xOOWNXSHgyOzZUKHl6djBUUjVSeCRJIS5mVSpOVFJOIi9EPihvbj8sMVo5R0QwYVZwbk5kYDlxZkh2RyIofigpYz44''@;'; put 'put ''XlcoZjNXSnxiSiV9aEg1IV8hUWh5TmAzImdBc19xWWdEdypBQUdtVSNiNiozKjBVfEt7LmhJYEtKcE1LdGI2cmVFaSkuOSEub0hyV2VmcGh3Mm5KIiU4Km01S100VUMkcSRKSyJeQCxEPkArSzBDZ1czSk0+d10uKXM6LmVFMWUvSHdLS0V0KmYjZU07fUQsRm1VcjV8RXZnM0k2dn02YTZ6S1VQ''@;'; put 'put ''YW0qK3pYWVUuYWQ9WHtXeDpSaVp2RyNhLGU/QkJxR0h8VV9sRzNzKWFnP0svdj45WVUzZXNbfm11RGB0aG1ZJUA/XWBlLn03UkZCOnYpZnFjNSpOe3l0Xik/UGtjIjpqTiR8TFJ9RFZ0OHY1JF0ieChNQ0c3dTFLdFB6eWJtV3l0KDRVRXEiVW5HcEssaz8+PTdGbnpzUk9nOWJuMDxyKHJjOWdl''@;'; put 'put ''R2V3JHtzWGdnTTlobUFkTTBiWVspOTw/Z3t1TSIwZmh+QDsxQ31wIUdlYj83KXZ0MjklOmcqRjkoPkttPlNjfnRPVFlQKm5jeHU9YFFAa3czSUNYYzJhYSxIezQ4cnojO1t4M0I8djY1WlJXK285Rlguc0YsW0pAUz03WGBAZEQpeD8oJkY7SXVjN1AvNG0ydUx3cSNLVTAodi4sYCxXNF5uQ0xA''@;'; put 'put ''Jk5JRCpTU2xFXU9qYDlXPDJ9YTJMbWI9NiYsLmZRaXJ8OWJrY09DdUFHUTNJd05DKVFNNFteTE8pPFp+OFl8di5adylXaiNsYCZ8LjFeUmJac0t9UkMjMWU3PGd4QCpSKjZLfG1rJW9VMXdVMUNdfnZ4PUVHQDgvMEJyeTNWXTE8LHgvO2FPRiJUKk1AZUQoRXVXR0tYWTh1eUBfc1diQDAuNFhm''@;'; put 'put ''M1h5d0MpLiNtaSF1WyF9ckhEJXI+PTBZcG5pOzhYSTFDZ0FpMTQoOT5qPWxTUEdJOzRNYWZPRjZveD9ed2lKeDVodk95dUAkKm8sJTVxQjRYMGo5XXtvT1p4NG9EaF5wQWB8RnNpPU9LTiU4bTksJUB4S3EkYEk1OFVSR3dpY1t5QG1jVn0xfUJEbFQoLGVmInFxW3ZZciU/b15eJHtjOyosWTZ4''@;'; put 'put ''R0JeSWF8U2tlNlUsZmUsRj4xZ304U2RsOCRVQX1JTHgkKTs6em5RMio1VkI0dltdWTt+W1hXMmxJOGVSQyt8Q3E2MD95TWZ9U30+Im1oJTdvSFl9NGE0M0xAKSJYTXZ4OTN7VV9XaV01OmcvbE1zUlkibWROOD8jfXRqZFhIWGFRZDA8dzN8LkhSbyQsMjRGaXx5dl51cE9vUF50fHtaMTJLdTQs''@;'; put 'put ''fCpSKG1zenI6STx3RX1NSm1EJjd6SXdwPEsiSiVaa1dgYmwoeGU0YkxPJUhNKDlTQzBSXk93N2RiPzhQem9YMFMsXWA6NmZCPCZzJjF8JSV9VnB3L3ZmOV9ON2J5WlE+KShnei8lTz9wVm0vQyFVJTMqZERDJTxYXTgpYzdHPzp5cnozbD5md3tbU219XXslRHE7RnhoLlYsYXNhKT8jdnFCZkxh''@;'; put 'put ''fmNYYWkwY2I8cT9Lcj57SlJNdlRAezw/QEpRdipTPFNRfXgmOj5MZjBPLExWfVRmenxKW04pcH1kbWpAPjZ6LCt9SWJKdytkRDArcXpUXixffFpxSGVwbmBdeiE+b289MjVGPnVVfXU8T3siYFFhXTBfKE8kPC5NfCJdayh5UV0scj8xQT41c3RkbGxCej1NUlZqZltDNkNdRjJlKT5nZHkjKmVP''@;'; put 'put ''VWBqZng3MFF8cXl1VTBRV1g/XltCfHJ8ZnR4aVIxOUA/OVI3XTgub0F9KCRNOUVqLEZzRjolYHBUNTV1aXw3KzxEe3szbDhofjhMITRMYVVdbilVR3BBWXU6QjNrOjVuPndLa25TSjZJezQuZSVAXXZfI195JWdQL0xWcW1FLDl6dSlGUWkwTWdSOSU1U2ZwNDFCZmJfPEkobGtLU0wiT21Ze154''@;'; put 'put ''LE9eMXY7U0ZTQSY0QjsvemgvTDFRYXQvTDRSQ10iemtLQmYmQ3ZQNilZKGVySmAzR19EcHo4cT0rTS9lPyg3amJJKTtWcXxBaGZufkB5M3VNeXxmK2JOM2IhfGUxaGBJUDU9ekQ4VVRPazA8KktQNSh0YlhrTUQpSlc0Vlp+PSVGPn1yaThnRmU5S1p9bjFeOVt+b31QczQlYFZTVW5gYUQoQG9Q''@;'; put 'put ''TDxsPENQNCZCKEAlPSs5OSlhfHheNmhQOW1eQHRwL0x+ODxxMz5GIShKV3JLcFY7cDlhQmRpJSwiKTw7OCx5eSk+RmVBaG9VOjM8NktMUEZ4LF9CbXJvUUE2akBBLGJ4WXw9d1FtRnckb0MhVCVDIWhYRTo5XSQ2dTMobl9RRWRXP0RpXiFTQkN1cWFlcFVmNS96OCwuV0tVOU04Vzo9VT9gejNY''@;'; put 'put ''fW1GW21BSlJYLDtMN3xyQjwvVjEoSj9KQUwvW31ycF9GPkxEMFtxeTl4bUNSeixKfV9lNSR1XyFIR3U+bHwmISlvLl5KPUs1dzByIT53b253Q3tSIXYuJHZHdTl9SCtnd0N7Z2h6aDhVWk5FSV0qWm11YVJ1OmxTaCp1ND4qUk85Q1gmYG04MnthLGYuP3xDYGtQVzgwQjtiPDZRa0ldODlwKF4z''@;'; put 'put ''QENiWHFlZUY2ei9RUX1we20zK3NAQj4iTH1pRV53JmhHLmk6SjVOV3BVSXxvRntATnxKVmNoUDxIOElTKzlDKjwjfWdMfUhbblBDdH1qXmdAZ0JtNT86alJmQj4jfCMlIi51UX5bdmsoMFVieStVUSslPHVHV1IoO19kKEEmdX4mdm5Pe0BMJntdcWhZMU5nRnkmR0B+YTw1bWZ1TXpfVExMSjAs''@;'; put 'put ''ZHg3eUcrW1Awdk9BcV8len1paEImRF1Yc2NJZFVqM3tdMSlLcU59dGFzJHBfOlZtU25APFpxcXlyTSYvTy9NKUosbFV5VVZ0TFpFP05uSm15UXlVYmpyJnwyPjFfIUh+TX44OlhYfTZkRjI7bU0lU0E8Sm91TERRd3cvN3FtWnF9OXUxQjs2Z19pa0lzUUE/TGwrWHAlO3x5O1FvVSxLRm9KeH5S''@;'; put 'put ''Rj1QVDNVXXsuVndyeiN6bVt+KEIpK2RNMUVdZ1VwdEVXfj9eRFtzRH15cS9uJDkjRWFeNHN3QC9nNl5mPkVWeVh5PzRxfSJaRXNBOl9uU0V8PWl8XWd7dVJ1On5Mel9iM089JTVvYzQ3b2Y5Ji4pb11kIWJSKXdhSmJEKTg+MXU4cipuaT9XMCxfSCFWXzsvUFlCRCxeLlg7KUI9Mkx2P0NANDBz''@;'; put 'put ''RHk+ayUpKFFxJH1ddSpTIlkoXm49fkdpX3RybCVDbi8zd2NZMFNJUDgwOnJOVCo5Q3FXeC9XaFFxNm1XLEZ7KUs0b3QhZUIhfFVhV1g5eUZ9WzMxUFMiYEIyI3U4Ql4yU1F8N0pSfW85JWVyOF9kP2dvOSZ9KToveC9jR01PPEo6PUtHKFZMXlpvSlFhQFlgZkw2UF8oK312PGVZdUUoSnt2T3t9''@;'; put 'put ''bS5mQG5zfiZ1U2RQQTk8eT56PCpsMFJWPjhuaV9rUl9vN0xQI0ooSn5kMyo7JXciVmpHSmlbJSU5Z1V+VyRWfkFoMnB2ZS8rZ3FuPTgobyQ/JnlyPFt+dD98a20/OWIvUHF2fERXc1tZOytiO19aIUd9a2Z4PTBtRHVFKW5+WEVWKCIwZFtyKDQ6SS9JRm5Mb0w8dGR4Ym5qVio3YDsrczxPZU9e''@;'; put 'put ''QEleWW5DfXtaLG8wK0AwfWAkJSt1bCNYbiJWKG11fjRAYz9WXlI2XmdHR1gzcjBzTlUpMlcyU0pVbDQ5K28zaXZXWCgyYDgwfiF0cUNKfHNJLDZdbH5KQ355NUkpP0J8SyNdJWN6U0lgTDg/RCkvVTdWbHtVOSMpZCpuQ2B7U0M4JEZkZV1sJG97UzpXe1M1WltsXVNyIm0yP1lQc0UsVyQxdVdS''@;'; put 'put ''Jm5NaD1mLnhtUkY7elFOVWpZaFtHNlEwZ2RSWjkqI089UVQ7bnM3Pzl6LzVKKSpEUXZ+PG57d0BIcnxCWVVBMzJmRV9FbzUwT2ZYdCp6SVtPOTwqcD5HYjhAfk5PfTM+NGI4OCVDWnliaj83ZHpxMypwW1c1a0pLK1FJdCp9Ln44XVpMNDZ0O2F9K1UrLDYudiNIQzA4NjlpZzRefDYkS0AzV0tX''@;'; put 'put ''JTpmTl1iPT5AQGdfdkIxQHUoK09nVXRSWShsbkxUckt8Q1YlcUYvdjM3bzhgcns3JCFLVmVOWmRudC5+Z2BHfF1Hb2dwTixkVSU2VzdMKH5wPipVKns/RFZOOTQoMXJBez8jTT14Pmw4X2ZgR3xefDBfWiZoVzx+JDYvdHgkPTlLWT12eGJzaS4jbFZUbXI8WD5xdTFuZyIkPTt4aykuPTksJk8h''@;'; put 'put ''cSxuYCojVitKYWpgdDd+ZGZta3MlOnw6X29YLEZXanN8MHB+Qy48KihZS19Icm1MRU0kfUFTfl05dXF2PT5CLnBkWWRefl5YUGU+d2coOV43Oys5Ozs0LGJSQiUzTFQoRkcrbjIuczM3bzIuZFU9T3w/ejVTSWFbJilCX29hfXpXQF5zSzJnKHJwWDlZVyZpLzVCVDwhQW1meW0qSldeUnJXKT5D''@;'; put 'put ''N3B9Xn59X1glXlV6UUgwYGhWQF5zOmNSKHRFZWFFPXZ4K3pILjRZWHthTH1vU3xQZ3prSzRTdj1QaHQ6T3A1aEtdeFFGfmlKJDwxTFFuYHxudllOXz5Rcigic1h7V1RkTzh4JT5ULl8/O3R+OEh8amQuazB8dSoxSzo4PldUckxKNCk7blNAc0VmWVVrIThxeldwQVFkZ2BmbDxtS1Y/JUp5Pm9m''@;'; put 'put ''clJnbzIuZFVmbkdGdkAibX1nd1A6cURdXzdYZyUhTjdBbUBZN107Wz0lV2lab2pWe3I8cncyR2lIbylALy4+U2N4UE1+MVsjYW9qV1YrUjNtSG1ZIW89XntaVHheRyRpIm1YJTI7X1dmQjplMzN1VCZgUlFSZUImM3ZhakpuY14jVjYybTNbO29bSj4oRjwuNGQiU31WQytKV0s/Rm5wMSszSVYu''@;'; put 'put ''dks5VythMztsNFNbVH4sbz1SZWxKdTU/PGw3UWFHVFd+InBqQSJZJiNdKmU/N2Z4cTtYO3paTSNdLExPOVdyPH5WX1cmTTlScWwuJSRxM3taWGpzR1BKQXRLLE9JJThkfXA+PjshY0kodUUqYlZDaXx4fU5TeSZ1fEtxOl8rLkZgWnN0NDcxOyZoVikuO3c+MHB9JS9Vc0ByXUdoOyVqI1guM2Is''@;'; put 'put ''JUxfR15JTC9TJl44Y2k3cF8/JkB1UUI2KF4qPjRoN3hfMTBsKjZnKEp+RyliSTxyP1BwITpfdD0jOiI/fiQiVFtAXUc7XjpOSUc4MWpRb3MhMSJGUTkkTG8/PkJrX24zQ0FaPUdQS14zZTowPGhteTN7Lj1+JD9rQ1IkSTYweyVGaz5mODlNOkZQY21bfVI6SUBnWygvflpqJFF7Ujx0SUNubWRH''@;'; put 'put ''KDslOz9NfitIaDBXYCs5W24udDtESGVJM2p+WCU9M0Z9PDV2UTMvTnEqXm49dD09JH5hQVtxZ0NDNDgmWzw5TCR5SG8wel1zTiowcGhLM2B3IXxbQz8pRF8zS1NMMi5WVDB0KyhuRj1qNjApbFp7ZFZfSDRufVBEaD1MflhVRmVhTGgpbWJRc2dCPW5BZjUpbEtGJjdFL1Uhbmd9TUhfSTFwJm1e''@;'; put 'put ''YixzfnhienRsOjFIdE47cG4/Ol9dZ1hWNFtUN1VOU013cDpnKDQ4JWZ8N2BCblMmdSgsam8/L3Bve1ghImp3PGJ0MVohWHNaMWU1YjMrdi5ZP154UHFSO2VdOy8yRnE7WCNbaX4sQz09IXtVfDB0Sy53dFdZJEFIXnxxYGhCVyoucUUiezQmckt4SGNaa19lNVRMJFQ9NUxuSnBrY1tUUlYuTXJb''@;'; put 'put ''KT8jNiQ4YCY/Pl9WOCs8fDV4eEB4RmJpcmQrQis4cWdWNyh0cFFsR3B9XS4sN3U9QCFdN35aTDJ4L3dhUjNwPmQ4endAYHopLm9dWU50ekVqSF9dYWZNd2lPQ01BS1MhLlhBU1lAYy5qXyY9P0E+NCpTWHM/VWIkb1cmYCYzKkZqUDRkbiRROjxYVTpIaCZ3cig5Ul1RWDtzQ2glfU9JbCtzJTZW''@;'; put 'put ''ODwrOFd2WFViZVR4KUBedXldTkNFTnJ8OXx8dH5LVnJydH5LIU02M0YhR3h+S2YzRStTRVd+M05qP3IrYyg4VWNMKXt3aDByMm5sWCZ9QmNBTHF1VF9DZF9zbFozZVY7WDo5RHB1fUlpTG4sSGspNCNQakVzZCoobzxUb1F2N2lmT1l2bywhY0k8I1subTt1TTwiUUN9RD9nZU9LKWxNfkBLPi5G''@;'; put 'put ''bSIoQ2NwMW59c156IS56dDs2XUVbMT5AdS9dYitaPmpZQkp+Nm5nZVNaR01EeHhFMT5VVWlUTE1UOHFGMnZbUHZHdTpGaGBVWEc4V3w6Vz8uZVRAOV5SODtDOzE9UFNLR21zczxZb15kbGRPM2FgPlgyXiJOfis/KUI3XUh+YXRtSjN0QFgyIjNTayo0Wl8zNj19aXFgck59cClzKUF6cWRiWyw6''@;'; put 'put ''VlhvdWU2TTppZWkxUU1wYT9jQGU1emQve2pzZnxEaVJbOyJZUWJ7bktKKUpYbl04U2RvREZrTjJsLmE2fDN3UG92Rn1eX3lRIX43IT9FclJ+cCU4ZW5lOm9lKzBKXVdGImQ5Ym5dUGY7blAmL01nZEl7QCYrYkk6PmopY0JUYkpmVm46RFBbd0tmPz81cWNvdUVWe0xnWWl4aDRkcmY8TnM3PyNG''@;'; put 'put ''fklkWk85WWVYXWw0MGJ2JkhlVXskaiZGNmY3bzN1eHZoWjpTfXlYdj5Fe35iT35yT3hTfmUofk1sO2tNdk9+NHNYXkZtQCMqNE9eOGYoNGt9dDs8JkQ8KFRfX245Vmx8bSJ0PUBjfS9QSlt+YThvSF81aERMZSp1S1Mqe0ghWH0/ejA+LCR3XyZlYF9feEVYUVI1S0kzSV9fW247aW92YjVmLHVR''@;'; put 'put ''Q095altpZ1M8KUM3VmQjNEpvYy8hKW1hUTM+b1UmRiVpczlNLF55OWd2eGJXfD85ZDhhNTJTMj5VOS42dDhvMXkoZX0veVZqJDhLLGpALkNxbG9hJlMvT1NPUDR1dUl1SC4xeF9+QltNZCsqYFVuK1VPJkNpVjV+O15seTE2ezZwfU1ANk94a0N7OWNOKndWM2Y6fWshSiMjdm5KXkomLCNLfFVH''@;'; put 'put ''TSVYaUYveWlDa142THV9ezZHTnBHQ3osO0BvSTxBPDNZMXY6VElxO11XbCZ4KyVBUVdiNStvNWQ6Z2xScGMmfnxrYEwvM2xaT1hKQnIyez5YV35WX2duWz8mWCNzQjJtYmhxL24pLHdrTVFOSmJuXz89KSVDX0lUSSVLXj9EWygqLCpTbHo7Xz8xMzpPTVowS2VPT1kycH19ImRtIX42IlhRTVZL''@;'; put 'put ''bzdXSE1JOEMqd3Y7fl5COiMlY3FwaX55cCtKQEZgRCV2Z1QmSW5zQzhDWXJdLmNpQXBNcz8heVhzMnY0azBzMmVHeit7P25CTzVmUF9tT3xfK2djKmZJWnRjKl14QFJ2Mnh7PE9LclRKTld+bkYsWlNiREg3TEA0LlQyR157W090OjA1c1pOcypmeHd3Tj4vJX0mdkxLaDBlL2ZVZn5GeTBoX1Eu''@;'; put 'put ''VjNfLnNLS0dXM0xCOkJnQk9tKGt7cUBJN301WG5MMGhxPiw2OHBUO3tETkZ7Vl11TFguQC9mMktlWH5oamc2bzFmKGQxSzkwN25COG1QTyR9dmF7V2k+LGRWKWhfaSVYQVA/TEF+PHZXQnQhamdreHxdP09RaXxzfCgwMTBvKGwoUnE0Py9ZUldvWyUkU0p9X24/ak03fSpLXlI5bjBWUCghRm8/''@;'; put 'put ''dWBRcTNWQkJqOismZXF3WXBiR3x8blNqOTtlX0ovfj0lVE0qdUYqJis/QnFkcHpgPD93aCMueUk+K0E5PU5sS3tHMEVFUCh2JTUvSC47JHZTKjlQYTlmPVdJXlNhZ3xadk84TDhkRUBWdnN3eG88WjA+SWkiZl1XdX1jOmJeMTxBKSpSXTxZfHYrKSZKT2p+bXV0NGkuPEBbOSI4OHJDSyk1YzxR''@;'; put 'put ''OzgpVXhta3o8LnNCS2F1IntOOz5JSkdXLDhYajImbD5OLCFqOjlCY1p+Xnp6d1g7SE96NlpVWCUsK2hUZz1hLE90M090TTwzKjlZPWVlWl49KWIzUyhaVjIjX1JrKVVONzVoNVFFRlQ0I2JEMEl+fCpdIUx0OHUqVSlKdWdsa1YoOH0/PSxjc14+VktNWiNyXkUhTVsuN0QuOyVAe3R3Pk5XRFZN''@;'; put 'put ''Rywsb28xNVE/fVlUVjVvMkI+W0t7ajYpQGVoTjdFZU5OczMzQ1ZieDZkTXNYfThucz4mNXtdRjVCQk0qVkVFKmMyQktnN1V9YWlqbVs2UWU0OV1LNjA/LmF7SzQya28oMnt9K3VRLEBZPmsxXz1JV0JeNXsiezVNKnAzZDYqK2JTIywqRCo9XiY8YGd7Iz9zMlY0P2hMQVpeSiZgKjdzY1YuQlMm''@;'; put 'put ''RDhVYjJBU344YmksMWBgQ3Moc0VadCYuTHZ5dip6MHxnYERmLCJRaTs/dXYmK1UyYXsuRDVdO1tPZVJhMVYhQjNWXmFqaStINCJORmkpLzJDMkY9Om1VYUtlREFebDFqWE9bWUJCWjhAaGtDNj9YMFBecCRfM3x2Q2ozbzF8IVVGM1hLc2olT34sOGUrRWZ0XmFRSnNrYyUvVkB5RlROQiomeWxk''@;'; put 'put ''WW53MUtvR0NlU21bUVYySDJnPTZlQlEyPyN6L3dLN0R4NmlWJVtXPWFJQkBXey9PW0luWyZLTk0qZ1JeLEQudzZMYkxXNV5gO0hFLGNIR0dMVndPeUZ5aT5QZ3UhZlREblpyUjRYODYpWTJQP2VwSToxQTZ6V25kaWFiMWYqYUBVMXxgS3l4fGFLSjkwPSptZkJdI2UwQm0reVJMP014Nj5kZlJw''@;'; put 'put ''O3FLbURYXm8xLnYjWU5oNWV2VURXeks5R0dJIzIoLEA8T2ZeZS9QVS5FI0Z8bGt8Kzs4NV1OQGlgNXwuZiF8ZCFuW2xrcjohdylUWUNNIUc5NVp6bzFNJUV6Wz9ddi5hZHo8LjFCTDRLSTlhaCokTSZBaU1zVjwuQm1RYn1hTiZpNGxFeW1iOiJhI00xS3Q4Yy56QiFlPnRvVmxCZjk5W2J8KFpy''@;'; put 'put ''SEomaW5JOWxKajBbQ152OjJzOSVtQ0gwQ0s3PGdOXzlDUlhENk5zRVdrdDJSazB+Xy9oWWJ8PyFEODw1Y2AzSUp+Vktwe04uK2I9JkNuZzc+aC9fbX4jfFkrZzZrbH47JHJOIyI4ME4hO1RsVkJJWkNmJF5kYm8hTXhwYjFaWGNWRXdwYXg7Qn1KTGFPNTtqfjRXaSN5QnZsMXJ1THZdTD5qfE8v''@;'; put 'put ''Pzt9cVlvNHxEIWdEYS81I3liRFg1JmZUREk8OTV3ImFFUSxhJjtQbUBCUjo3PUolQmoiIk0kcEBPYEp8LnkraDNOdjchPTZJKUM2JExEbDI4NzN3emUhZmZTKzthP0dCLDZZOnR0Vm4pI01NLFY0Ly57YT1jajkoSCIieDUmTENaNyF1Y0VZcU9CZFBQYVlBWWBBZ2Y0a1pkd0BicSU1YGQ5Wkhy''@;'; put 'put ''VVksTTZGMDZrY2BhZDAkNC8wS2UvMGxaODNuRHp8OHclWmpGKVciNDRzOV9sZFVMK0NPIX1pKTlJQyQlQml3eDB2ZX1UJGFVQ05weC9GWzlmZCtHYCQofWYwb11QYWcyOjZhQHRvKVVpYDciRUY5KGBZIyxgK1VCSmdEJDBfcWhGSl1nUnZRKCwrUHExWFpgZjAodzxAcTQpdzZHXlRsczhqaCZV''@;'; put 'put ''dkBgXz90Q3xHbWNab2ZnQVk0UmZ4YSZVMm5LXTRqJEN3aHl4ZVtPbHFPcV0hNG9xOEUxck5LaTJLfTFFTjRqWEJmZFtKeE5KYHlMVl9+YTp5SHpDIVlWfntqc1c9WUdOWls7SjhvWzQqQ30oWXV8WXY7WDkjaytCZiw+RjJAbzE9UTlWMHEoO3EzWnJKW0YoK2RZUl9UVDlfS2FmWVp1PlMwfHBz''@;'; put 'put ''MH0iUlQoT0Jifi9MND4rQyxsTUxhWVBgdXxMfEFba3MjTV94YD47OH4xO3YqX20xb3olNiNyKFlZalQqSyMkbSFbPj58fVskIkY3czAjN1Q8fFssYSZ+fE9+P3ImbiNebGV7TDdaYyRmYH1GJUtJOWt0R1BSKG04TGQ6ZEs+ZVQ8MnUvV3xUODMuPUNEeHtOJV5vUkNULnE3OTJCOVRrW11aIXM/''@;'; put 'put ''TSJpJE0sPnNFYXBKWTl5az0seDBOJlVQLi59ZVlnJFF9eX5+WH1ZVTh3SnJZLyxDY3VYa2ZUWjNmU1UoZkUqKFVCUSslVnNxfXxTX0VePVtvPDZBRzE6Ln1uQj5MNzBmP3l4SnMqV2wrdjxZT3d6a30hUDVdKzJnakhTVnVzUEc+VHw5QmNuV00jfnA+LEl6fC5mRGBFYCJKTFg5Qy9WSWE3YDN5''@;'; put 'put ''cnlUayR2SXo6O0x2TmhBfjIobDZrc3wwK3JjLz93dH0xPGQ4Njt0Ynt8bz9be1k5d2J3Wm9VUDhhYltUR218ZmY4MX5abCghek5VRF5OWDkia1pMZk9yK1lqV0U3Y2QoNSs5Ok9nRV13JT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmO08xVXc7XUssUXxIVVhodz4iZmpSZU01M3ddbFss''@;'; put 'put ''KGQpXmxAQDt2YSxkWVd+U1UwYXhnY0AhTV5NSXZYUT1PL0BfODRIWX18XiJidmc/NSI3aGF7MyJjXk0mbD5OYGZkNl44VncrfSlaK3JNQHtxJnVzfi9nc0BLUEhATk5zL3A4R2pjbmpXcWBLeHpnLmRiJi9qWkxQSFgzVm1eKSElW1pNfipMYy9CRzhCeSpwZ3JqJnJTMXJ0Q0JHOnJtOzM0cyJL''@;'; put 'put ''OksvIVQ8ajFWazFRP0ZWWDNEbk80YW5xc2Y0THFdbXZ7NHNIdzJ4ZFFqT2NSY3FOWVl4Y347QW08QzVbPWZHSDZPWVVbWkJKbWBGaSwhYiY/YEU8T0xSRCEsNj9RSWVVQyMkMUQ5XyFCISVZMTxBRGBrYUd9KV00aWBCdXEzfHRKQF9EYTEsSWEqdStfPyVqfGhPTTVpTTVNNShkbkQmTmh4OkZX''@;'; put 'put ''KSRJTml6ezhdKUteTTV9aiFyZXpnJHF3SEBlYGdATXwyeWF2Z2l1Lj9xO0JCKk5xSnVMYn5NenQ4dDtIXk9oUClHTnMyU1I9Y04sWEQwanF1UFRiVEFnQ1EoRVV6OkdnTChFa3oreT55WCYxY0swO1EoTSpNLE15QkYiJDhQWld+UFpySihNKEV8YWFAKk0vVlR8SSNNJWEjTWhZWzA5XWRLfVY0''@;'; put 'put ''RTtyfDphbEJ4OTEsdkxSOUJZQkFxalZkUG1ZTSt4OC9iTDxvP0daIkJCRzo0KnwwQGdAdXhwP0c4QkRDRTxHcllnKil9eDdHOEliTEZKTUcwYTg4MyxnR3JGcHcwWVtIWEpSMFNMZEB9bk9ackpLdzkxKSR6ITdUN0speFNeLjtTYThack9EVy4wejZCbH5jYGZvTjFdQSN1MmJqSUdzKGNRfC42''@;'; put 'put ''Jjh+UDNDWExpUGxdbyJRWHdEc3xNemFCIkV7Ii82MSpJVHFOYm87SkJVMUYyZVk7flgmMCZWOnM0b3RGSTc0NHNbJlVAMUEzT3RpWHhoTkhgRzA/dihobykrfUUuRy96eSlIPzoxUE9LP3xFYHxHUkNtI3lzflRTZyYqbFohWWRSend0Yzh3Zj07ej8xTzJQMlEyKXRNZkhnV1swJHBRYTNgS1ZY''@;'; put 'put ''JElwSGxBZVJ6K2FPRUdVWCpCbis8SWBlQjxOPUNHYyZPSUVbejZiJkpIRSMseiZTVHFROTlxOCwoOUhROzxlaH4jK2I3VV9ycCg7akRvUzRnVUUrQiY+aikoJDs/NjhqWn5zejVJIjthT0VHYzdoMjY2OzEwQEpNLm1ANS9kcjsmKSNzbEs3c3l6SUBoaWNuYkI3MDRoP3F5Q2V8NDlNMTgrYjol''@;'; put 'put ''Sy86dmJ3fl5tPG0/VCJKNUMmOyhEeUNmRmhbP31AJiJRISx3aHh9X0Q9cnMkTmhieFkxWE0mfFMrUTs4LERzKH0xPzo+P05NcF4hb2h5SGMuaG9RfXZxM1QmKmdMOjBhRl1INHltPX4ubDh0M0M8OEtdbnJxPEB9TnI8NCk7fWUldTxjUGBLd3E/YWFdLjtiSHtLKXhjWCFjejlLbDU5QSFYJGBN''@;'; put 'put ''VXRxfSt6e1M8WUZgbi9Se1tsSHpNQD00U2BtY3o5eSohdkcuOmE6T0ArcTY8MWZqfC9MNnEsInx5eX1Hcig5Tj4hN2dFMDR+W25wO1I7P2dTQH1PfHRvUXApcFVPZzZ8dnd5fkhATEA4YEVvI1V2ISpbd31gfk8raHtWYFZLUzM0Rix9LH0sfmFlQCRqczYzZElOKzE3Pjhbc0l4XiRHT1lRZ3pF''@;'; put 'put ''ODhnOD1FR0hAVSs0LC59cVU5VEZgMEw3Zzk1Q1RDMWAyKyFdVkgjKCFkK1o4elQvVXdqWDRlKWghQmhAJXN7dWhNR1RtOlc1UVJLI2JQKjwoY0AxblF2dUQreDFaIjB2UShBKThOVEFudnRjSWhdbDk7cz9hMmkkR0d8dXEyTGt6Vnh3enRwITVAfVVWTkVJJXVxUjRIX2d+QGVoeG1SSSYhdz8q''@;'; put 'put ''e1F+KHVDMFdHdXY/WH1kRSJMW0Zee042NmR5Oi9nNTZxKHFRcSRmbDxZIzpDJm9dKyk/NmFoMDpScjlhWmAzcSYlPmc3Yz5TYm44OUk7IktTcVtGXWw8d3tTPFlySjNNKXhtWnMyL2FqOVkxcEJQRilvNUZjQjs0aShXIkZ5JTc+TigrLlB9UWddV2ErMmlMYjZAVnwvLkdGJWkrWVh7SUdFRTNA''@;'; put 'put ''aSVeN1J4cSx7XztUOnJJTXBXYzFyaEYpKyp7ZncpTHF1JlFFLH5zbS88dFVAPTROYCgxYUAscTNFXWwoYFlbRXAjdT9FSjldYFd2ImNaO01iQWVPfiRJPWlfbzlbR1I1ZGQ/QFl6Y3RHKzBgZV1ITC95SUlwUzI5K05iI2goMDVhMX0oWXxmJkg1e0o+UiNtNyF8ckVWV25Qc2c2JGdgPD9RbkBU''@;'; put 'put ''d2o1XVVmPi9AIS95dDszaH53QE9YPE13Tz9xTXE4d2I2TEp+NlEzMyIqLHRAdSU3NCQkOUUsMTl5TjtJJjF2YE4yZHZCaiV2MHgvJD9rQiREaSMsVnUyaEQmZFtMRmVFRjZxRGl1TUBEd0VGKEVSY1NEQTBXK1d6LG4scTgoOEIwPlFCKU85SltwJiRrPEs2Q3BufilfUTZ1c3BHKmUkOC9VO3Bq''@;'; put 'put ''T19+fC94TVdiJShXSWMmSzBNaFVkWiZyaHN5P1kjMDE5fHVQd1FOQCNUeCVeSWEiNk8/cjVVZVBUeEJfOChpMHFXeD5EVHAqKSxEMDJSWCJtNHxde3Q+VzFab2Jzfj0jejE9UkspSlh2cX1wbyUmLGI6c3U9cDxZb0lgO3t2NWk+W1IxPXUoN2dkLF5lQW5hPy5eJEYqMnt2cX0yJWdoUTBwV2g9''@;'; put 'put ''OVFELF87dSRoMl17JnY2XkI1NX44PSZSQiw5JCI9VzovXjB4aWIwV1d+YSUqaU0wVDRBPjxpMT0lS3RUIUJeezwqRklANTV+Lz5VdTljY1d2PUNSKTwyKTA9ZDJMUT9WV34xKEZJcGU6c2tudypHT2xXXnBReCkrcyhYZyg1NX42PVA2eUAlLCJtZVYkQmAlYCx3JnM9dU5ZYTc2K0QiWT9WMV8/''@;'; put 'put ''d11KQDhaKT5MfGtxfiUzUiwrYilzTGE8QiZoaH1TcHA1U1IwQlkzMSxVXXZ8OGdofFcsTXhCeT9FW3lHcSh3QGhfXXFVOVRJcyloKm1lWGUhT2dnIXN7OyV7ZkxKITN5KTNjM0wmR19fKzlpK15uTTVfX2RtOnQwSX42cGNYK3prLDhSaltjdkgocllHQSxzWjNoXlIhbjR0PElYOXY2QlZWfWBg''@;'; put 'put ''YmBDfm9kIzpxQGRHIlYocmNnd1VyO1lHSWR1Y0N9X05lajp9SXUiey9ESDBiM1QqWjBzXzw/eSlnYypMN3hwOzp1cytMRkEjdDdNWTRifmcuYkI8cys2KWJhPXcqZEpALkR7QFhpQDM1Qnw4S2kqQGtgWHBQeSJ6Klt4RmVjWTssZS43PUJ+aUZFVX1kXlRzJDhqPTlNXkV6KypoXn5VNzxzQDlr''@;'; put 'put ''MWZQVTBeISRuSywzYTs1RG1yKGJmTzNweSoyWiMkfnwrTXxgWiI5cTg+RCMpc15kfmRkPXI8KFl7XiNqOmtzRSE1ZX4+ZHsyJm46OjoxIz5ZKHNjOy8yck03b1ZMd045byUxYkw6MlRfLCZzaEQ6IkZ6K0ZaRjVSb3dxdl9ValExL0EuekhiI1p8eihYOT5he0RYNyUjS3NrIV1nOiV1RFk9SUMw''@;'; put 'put ''JTcxSWA+fF0rcHtOW1N3akAxb0xPd0xeXUM9Mks0eGhMIjd7KlJ0Sk4jUV9pa3A1bHxXW3F1ZThsWltPSDN8QC8mOSgzfTBxSk1yaHtdSlBkRywvaG9ZNmNdW1ByJlp7ejAzJC5tYUdGYCZVZkteKS9YXUNCX3ttOF1ofjAyZnw3SU4+Ql9OKXE4TzpuWnJ8ZEI+LDRGQT42fm5oaXVxRntFZElr''@;'; put 'put ''TFs4QDtCTitDNXBbbX0rOk5fM2xjcWpkcENIP0ZjdXUqZl5ZfV49aURCJVlvWylXfWFsU31POXJ1L0ZWWEgubVNgcyV8d0clPmhXLmAwNnhOKiNYLy4lPUxxdS9GVykqcndfTSgyVFl8RlZWOzklRjFPOmgvZzxrYlNVIXVrMWt1RDFSLE4pNixdRU9JWEc5W1AzUztyMSRJelExWmowSCFUVFFY''@;'; put 'put ''Y0VNYi5xU25BPisxPENlbkU7JlZfUyhwWig/NkxoV1p3JHY8P2ZKOU04I0N1WTY8W3AzRVY2QH1kZjgzVlpFdXZeNExLfVUzO2wyVG1xcGtBb0U8RyF3alQmODZqPl5XZ3pPOjNuT2BgXUF5UixeRU0/VjgkTFNvYWRySFo3QDZ8ZmUhbCh9TmRfLCYwNjxNYE4jRDRkNXRSV097UGN+QzklbDFu''@;'; put 'put ''RjU9a05+cD5LVi5VREQ1ZVtlSGdbL2xbRVUwaVRSJSZmJTI0cjZYWi8wPUksZ3xWJSM0LzJOUHxxXlh6bnJKZShuZWg2SilpOXV+PThQYWdPKSldVks8LHY5RE5qIyxWSiJ+djV3W3EwMkQrOWZfUnMyLndGLmNTaWxvLnIpVV09OlhjenVMaz4qY2MhQXxIVntiSzdOPHAvUGNraUd0cylwKCti''@;'; put 'put ''VDdLYEYmMDZ4TkFxZnpQfFgxKG9FdC59NHlpdzpRdktxdV1fYyZdVTkoNCFMJDN4VlY5XXN7WDp+R0NpVUB3cklHZiFKJWxDayJuPTlaOVU5Sl82V3Y2TG8ycHtheUh+JSFGUkpHPm4vJEJEb1A3SG9Ue2VMfHMyPVs3YFBxKSE7OT5zalVhUlI7VGZDJSwqcFh2fHFIbnV2VCp4VF9PIU8qaG4+''@;'; put 'put ''N3kwL0YlemJgYVJ+OFVYN14uMDdAVGR6S1FeNypCVmhLXWpEdHJ7M2E2Mlc0IT8oSCJnUXo6WTxhZEtRcE5LY18pIUNiRWZdZj97fkhSWHlVKVZNJCViSzBoVCNiJSw2OHl+d14kYGsvOyhefiI9cjtpPlVYR1QoJjZPW1pHQWhbOGx8JjNpL2EleltGTWFedj1peXV+VkNOLil3SVNSOzlldjIz''@;'; put 'put ''K3gxT3kmQ01QZlFecDdlY15LfSFSM2hXY1tdZ21BeGgkQ1o9VXBUaHhLVTBYMCF0S3x2UHU6TXc7V2lhaW52STRSNnliIWcwLCE2d0ZpVnI8VG8pR142K1dbQ19GVi9Ren4vU2V7dn0oc3dedSgmOCFhPWVPSi5MOitBS1EzQnwzWmo+I0BTamFscl45MTQuT0glIX4hQm5iOE42UiY0PEVeK0tR''@;'; put 'put ''KHw5SExAOTolT1spS2NlR20zRUx3V3BISkVhIUp0UkBJQ0N1RjBsTFV2QmJ7VXUsK28zXUJHbj01flpYIVtlTkVGNlEwRDo+TiE3e3UyTEJGRy8vW1tbPGQ9Znloa31EX3w8XnM+dFBdKyUyfSZhXztBPFQxPWlkJXlDJl40S0VtSHlCPC9vNjZBX1FFYXxsc115dnA2UTdsVyQsKTwkWWVNdVFV''@;'; put 'put ''V2ojZTRiOEJIRnJANXYoK34oYHp5YWRKbyF6M2RkM0A8XVZgdSxgKEU/OHs8eEhRPzovbUgkTnMmT0pvMFJXZmNvKUI5JEdbTmMvJVIsdVt1W2RzdTo0cjZNKT5XKHp9Vip8eTB6OH56Q1NVVDM6NiZfcltoK0NeN31qOjw5VCgqSzRdQ3hlS349Kn5WeUo8SHldaUNLbEIzOjRKfkVuPyxtWDgk''@;'; put 'put ''JC4+JillVFBsTVRMdEVGMChvdkVGY0xRcThzYykwbEtMbzIvbVh6KD4zdDEmdXRYIj9FK155dGFAITthdHtgSTl8RGQ/bCtOQ3ZKKTJ5RG11fHYrNVtvYFBWLmxyVUJbeXZZMTF1O15HaH5+cFk9ZDY8MyJicGdCMyIpRElaZ21hfEd9Vi5AQ2ZsbyQsV3YjTT5LSHx5cmd8bGprT0VoJnxBb3RU''@;'; put 'put ''NCZQfDZAOHJUX2tQWEhxekVuU3g9by5XQ3lXQjNPOEc/fXwlcFdCPiY0aylDQCQqcnw5b0NrQjVGZDl7ejczfHhCWWpQJjczcXYkTzdxVF8uYSJPIXM+ZnZtPkQucDc2PnVWdT9dJjtGJjslOTdbaGVuY30hZ1N4QkUlayhoPT05NGVYOVttIUdhZk0/YGNdTjxOUjJwPkRqeS5Bbk08T0J6Vz5C''@;'; put 'put ''RywjSUI0fnNjdHhmX1NDKitHMlJ8KXA1Yks1cDVERiY6aSsray4oQ1pWQ3RUVGJYLnpLW1FNc2tbUX1TUE5uJTNYMEA6MXsjYVphRXxrI3ZhentIKHdpWkkyKXVtY29lMEpsQnNMNnNwWXBYLCs5REZbeC9GaD84JVMhTjIwLzlKcFRIb0p7KntedU4od15NNSpdd3BPX00le2cufX41KUJ1OlNM''@;'; put 'put ''e2JCSFY0a3AkcjgmLHJuaV8yalldJiZVcnMiP3o+KW54WFJ2fXpSa2chQUtGa3oueFF1dUxacmkpNSNocl1PS0pFPT01PiJDSkt3JGFzfm86c1VgIUJSVmAoaEYkSmNMYGA2OiRHX1clbS4oYFkwMkQ+OVhdJSMwRj5UJHV7PUBbXU4xLiQhbjEmazF7dDV0VF9PN0lTTktFMzdvT2J6Oys5ejA1''@;'; put 'put ''dTApc0dSXikjWlphP1VSNkZPb2BUOy9CcHBNbHpmfFRfKmN7TTIjPjY0Nmt4U3l+OTJ4O2ZRMz15QCVxVkJsd248aT5KP0tGNk5hNnFwYzleXXhiYGNybikqY2NbQVFxdT1GOllrWkRfaDRGaG4mSU1TVSx+O2dOTmA4eCk1O0VoQUlTWF09Sj8rOTZ2bjp9Xj5kLz83IXFQPjlqOUFXbHlmfFVE''@;'; put 'put ''PTZKKX1OLnFWUW0hOTo4LH5idVQ/NHY2PShpXyVlKWl1bU5xa1tqdC8vQX5eYFdXJV45cjR8Kjs4bztrPl19TmhLZnxbdzROP0E7MzN6L1F8QEt3Z3RgRlckdz09JFQhaCU8Y3JVVkFhXyg6fFdBXyZsPl5ySmZgZmFGQkE3NXJhKT8pbT4/KVRSWyomOT8le155dmUvKT0sY1NoKltaU1lleGtp''@;'; put 'put ''cndDRFdqPjhWLzZAKnNWSFdwYiY3P2hraCgoa31DWUBkMjI7KkV4KjBvZ0gqWyVIX1kzKDY9UWJtZEl4IVgyW1orfXpGazBdd28xbjwvXnZkXz5bcWZFZmA3UUBfZG1sW31DUVg6dT1yZT5edD19Mkk4QClWaFJraHxSM05CMy9GaSlvRDBKPjRmRVM8eillVWwwMGp0UyxHdEVeS2l1dVYmQ3J5''@;'; put 'put ''Ti8rSGE2Vm0uZz4pWThQXyRNRTlZeXs8Tl8jdkhAW3dqeFtxSlcuJWpAe3t7PXAmImBjNnt7Iiw0OE18UEQyMFhQTGNedl9iLi9SRUVYelA5Um1RdGtjck5SODgyUSE6UGM6ei95eDNLQDtRS31uTz9jQjFiYG9odGR7cFV+UShdKEQrb0s6Sy50LEUxc1RfTGFbQyhvb2c+cEomVjM2LjwqR15B''@;'; put 'put ''Ti4veVNgN0M6fVNbZVI3Z1lmU113NHFTKXgkNHF5KCxIc15AREomfSFifU5TSWBTVlVSdGA2cV85QE5TU2lnWyxaSk57KllJWk01KXgiWz9oNn5QT0d8UFQiT2wwLDg8eX1qJTh1fi8iPnpJW3dERXtYIXQmen54cTtGaHRJX1omLDtvMCt6PWZyekwyWjV3TlQ2K3pnN2dEcXtJTTh+eGtWfENV''@;'; put 'put ''R2JmYH52Kml1c3RrS30rfXBlV1t4KGBMekl5dD0vPDl4YilOeGFecylqRTVQWll2U0lifVgzNiQydTprL1tEKFRZOWRiU3hAdHojT1czO1t7S3xvbn5lWExQaDZRMGB9cUheRGlgOj19VntdWn1tWTdoMEBZRHg6ZjljZi41WF4xeVJrO31MKnJ+R0gwRz5qY1tBUzw9N28hUWlZVGNXd20ieSg7''@;'; put 'put ''RnhkQXwmX1VWQyFpWG8ydWdnNlhvXkpFR3NgLCYjSVBHXlE2Qz9ESF8+KTtJbDdnWVl8NDQ/cHhDIzIvYGIwYUZscndRaGU5XyxqS0B7X214a3Fgb2NqamA/WzQra3c/WUVobzVAXkxaSW5tantHbzV2ISssNm5nSjUpVUVzQXtpQmhWVnJxJiU+Z25RUzN9bHMyQ2QmWV9zNWlAOGl+RG1EfWM6''@;'; put 'put ''SygyPykrJDJmOldYU3Zwell+ckdjNH1IIkN5IksjeXV8YFdHLHI3TVFncik5KFIrWHkleXRLdT9Dd3B5TzNSeWxDW3hnLlUjTnpTU0oxanMlJHc/KEdIM2RHN1VzV3BmR0wkVjxXRHh4RlM9V3wkc3hxPj5IQEkrTHc+SEIsPXNUTGtrI15EdDVHOzlld1h6KXVRUWdjdHM1VzxXM0ZEdi5PaEwx''@;'; put 'put ''ZStyTDxSMWFZYUgpXkxQVDhjMzdFe1pfZjB2K31reUVOWHR7RGx7R25zSVNLNihVT2pLaEtCS0xpY3MraElvLFhyXzJiZFh9SExSZ2NIeypLWDQrX3U/SkB1bCNtWCsidkJ5dytlfiJGck15RT87dlVOI3Y4Kyt5LihbP3IxTClOLz58bFo0NUlmTSNdQ0xOOyNde3RzI1NIJDUhOTlJOCMjQntX''@;'; put 'put ''OWZwWV1SVz5XPkF3Wmp4NU0/TEl7Mmp+eD9jK0RHd1l8ZndxQ3dpflM1U2ZifGljUFZ2VDwyZXFJQG5wfWYxMGxLaXE+UURZQlpRb0YqT1V7TDk1WUA3elA1alk/Lzh5Kkd4fDI0Q3syYzNAOF9VZDJhYjkhcituQyojeWBDYk1DWVlebCN6fltlMGZ+SU5eeXpYO0luInR7VTlUZUxFTTwwfkZv''@;'; put 'put ''R0goPCQzXW96YVZvJm5Wb1ZzNyM/USxyc0Q3JkJmeWRaWEdqLlk4SCxMSzxWfW9hUSNAL2k9aS4jUEdyLCkwOVR0TyNXM0BOZE1hdk8walgjU2VbMG9MYFgpb0NVZSlSVldQQ3o0aCF+TytGKyR9aXFqMnR9VksiTGZZOkMzMWB4U0F1Wzl+ZkQrcllWWlZTMEdHe0xUJVl+SFlMZ2VCN3lXJDNo''@;'; put 'put ''L3duS3A5NFgkVTh4WyR1VlhPfF0jeVhNT2dmMV5oNXxWXz5KImV9MkA0V0xqY1tCYmVMWGdoVH52cVJ5UEdwRClXeyt8JShPKmMvRiZgSi5AOkl7ODZ8YDJ1YCxURFs4ZH1mVmV8b05PYnlHR2BEYFhwOl4oWkgzcXBlYS5ucGpbSz0hfDJpPEVGeX4zZEs+bzBZa1QwP1lhYkAqS1VySld0Y31i''@;'; put 'put ''Xko5YHR7MjpfK2I3SWpffDJVe0A+SDU9TmBxbTFfZS5TU21YLC5ERSt1YkgheyEsVSNee0Bke3VNbUF0VG9hQj0sey9NaWJpLEBtLG5SJGhrU208WiZsOEQvX0J6OT5tPmtYMnhQNT5ZQlk/b142VEdbdyk3SiEwc0FyQE1EWSZOZipjfF5ERU5neiFLJVplMFtXUno0L2A5InkzRVYweGM3THZH''@;'; put 'put ''fFhSQSl5QioxRFowPCRBbFBmL0xKREFBQUFVKVdPQyJ3RHRJIVcieVt0QUQvMGhQaCJEdFRPd1BOKmMpPGNuTGcqaHguTCFZKUFBQVhMQUFFQUFBOjlOa0o6MmBuJStBInl9WExuWywzSWcrT2RTKzJ8NGcibEl1QGYxKXMifV1eZXYyQSNzSnlaUjRhdXVjVVY1XTRIQCR5XndGU2ErKzssRipU''@;'; put 'put ''dV5bLzN9RWZzUixZWl5TZ3JxcCRsKiNpVWI2RXkiP05nOHlHTT9IK2E9P1YkOnVVRkhPY3FDOHJZJVQve2pJWDArKnwwK3NOfFlESW1UWj5dNXskPzMrPCYre3dGXzojWURgKkxFTihNIi49UCJXIkFRXl9HWHgjSU9maipka2JReGRMbF5oOVgxIzBMQmF7JDM0SDcqJCF8ZXBhZ1Btdy40YSoz''@;'; put 'put ''I21lRk92MnQoVFl+bHhfbUE1QzhOTlI0RmZZeSlhPitKaitrN1p5QFdfSHIuLiQoTE42RWR5OEI3OCszRilrXSE+UlhuI2cuYGdXJl0kKH51dkkzYGRvK3U6LF4mbW1bWl5WfjteRT50YGBZVDFSPFNrQkwhczVpKnZGXmR9WHZGYz49SitSY0YkaV4pRXJAY0goZX05e0YoIz5LXi5aUCtuemZI''@;'; put 'put ''S1lUbVRiUnxdQU9SKHQ4JSkvI3NXWk1xOTFqPSg/OUcwfW1ZWU94RTFHcTk/djcxelVHRGdQISlbJiFQL0c8Ik56XjszRm1gdHU/MUgsX011VFhBZkY8O2UoN18wLk58R3JQUm1DLFQzO3MhQD5gWUM8PTdNdl15cFdbXzQsaiJKSTpQQlNGaU9WJkRLK2ZreUhHYUAvcndbOi9lSk5PeFJgTy85''@;'; put 'put ''LDNldkRqUlNGK3ZLL2E9RWNjc2MybT4qNH5wVGB+SE5WfCR6Nl5dWWJZOEk/TVZoNGNyfERWMn1JbzQ0TiFyI1FoY1lodEhbMnRTYWE3Zj88ZkZHNytvRFBTe0tfcmh5eitmWElAWXo9PDpuWWVTJEBHY2BsY1AjKDosJVAyZ10sPjdTQmZXTHJleWlVX3IqdytLbF4zUjJGXWhKJE8rQFNkbDFH''@;'; put 'put ''fnZeKk8hK0NRSDZ5dG9oPHY5NiI0e3NeNXdJXk1Vc0p8emImSlc+cCZwOm1gN1EvK1YlQlAhaldRMTs1P0k5NTVAYClHdWlPTT5TIUUxWiF5JG08fW41V0xDZ0NxRzh3el5uPiRbJkFbejgmLDM/ZyNCLGl9cVJUPG55al0obkovKXtaXjA/Sk8rdXAoUFkucSVmWGxZY1cmTDlXdSM9Xn41c15U''@;'; put 'put ''aUxRO2daUThkRTBWRn1IQm46TlhtQjVKQFJpRDhtWSRGZXZPKUdCaS9RenV3emd4PjQ1KjRxOEAjKSQma1BYNjZaKnhjOkdlWCNbZ34oP2VVJUskaGJgPW5lbF5nOFk4Uyh6bHhtR1UkLiQ0eVAlTWxPJVNCRz5yT29AaCZERnBHezVkZnJyPF9+eVZzMG5DM1FnQCVpKT9kOVJuQihDOm4yflk1''@;'; put 'put ''WyluekxDezVuSXA6Z1hEOipyQlM4fG80eFM7aF5odShMSCFLPUFnMVMmc2lBLCEqYSk7dXQqT1BsOH5ML11YdWQoO19lO3N9Q1VsMS9dYz8/PUJtM2QjZ1JHKjs7MFJhQV9oa04jbmwiRzdnJWUpPWlbKTZjTDVIa09mbEwlTlBWQipUUCRbVypAaUNdPz9jeUQuZ3VYeS57TzA5R08wWWtKTys+''@;'; put 'put ''WDtlMGJjbGNaRTpiaG97TSNVOjg/dSpJbj1OLDFUWzB+bSVQb1MrbW9FVTFjZ2pjVFUoJExvcjMhXjxRVVZaYXBlYihwRUdyNyp1YjcjLDt6UmtgbT40XmFHcktpOmc4XSs2WH5OZFJOdlBOOCklSSVtR2dCUF9TeEI0JT1WKkU5aHA7aztbMDlrZ0J4Izl+QjhgX1RJaUJSfDhtOVJXIW5bbV1M''@;'; put 'put ''VV5zbm45bippOSk2U357Ni5jIUVaZDR4NFQsazY4VnRBRHElRTQ7cz03L0R5Kjg/Uz5XZjdUeCR7UWtubkAqZDIoQExXbE97R2wjZ3IpL1hlZG8xWVl8IlBRUnA/c2B0dyZoXWcwOjB5QkdSPEhUNFRWbHJoV1F6N3UlPEA4amMuSkwlR188cSNoSldRbEIsSXNKLmNQKTE0QitGa3RRa0wxOVAq''@;'; put 'put ''cEoxSilVelhMST1uMEcjOFBkaDwuIkcudVVWKkJnLiFUakIocDx7R25+LlUkPnUwOWZ3OGtZVWlqdUBSKjNOekdldkdRXXNLKztEfHxNU1UlfWcrZUkuOCk9entqOUAyQVdgJGtBY3VCUjo0UH4xeDIuJigmbWI+WWt8XUF2bzpIMkY7Zz46STcpbFltKD96UipZQEMvWitETjc6T0A+MWNGc2JL''@;'; put 'put ''YkEkVjxbTnNrQlZkQlY8I3g9TV0ufiFzTXRmfGJJZU1GKT89fGFrK183NDNhNVdkKnFrLjVFTkVAfWRBbVVDVU45ciRLNCtvPExiUkhOans4cixGaGYpJFAjLklkdkBZRSVCW2txSFgkWU9zYnwqfjZkd3BvRnZeT3Z8S2l3P0cyQ0oxKjUjOD9ATjN1Li9ZLHg9VFRTK04jMShZLllNQDpvcG9x''@;'; put 'put ''a29WV2EkQ2wuOSYkKiw4NmBoT0Nwalpxd35EWiM/OzcpMGdmJnlNUCJAZ2Q2V19dUCUjeSMkOVlATlQ7NTRsbEdyZGUufjZWLjA3REhFIk1ZRF5+b3RtSktoKnVCUH5ESDs3Q3tlPjksSEkubEZRWHM0UjdfT2NFaDUjfHEwOk4zfE1CQDgmZ04kWjhaS1tOPVQsbFpFSyhAbm8rPyxIN3d3YFlb''@;'; put 'put ''JWY2XiNtNH5AbmtsYThAZnQpMyxOTXlkNHBFYENRbmBaajwzTTFFVWlkI3spJlg8T31dQnduTVMkY2YrQEFTLE19PDZTOCZbOSN6ZUw+VHA7WXF5fD8qT2taJEF6cj1fZW1xPD4zfnwmMWUpQVE9KyZ3RyZtX2dVaFgmbjFmUmRgXXs3OzU5a3o4Sk03KHBIYipLdVNZO256WSE3e1tFNjg6JHdT''@;'; put 'put ''TFpmYUNPcFpIIi9ITz9fVX1rb1NRcW9jIzU/T0hpfmZEMW0sN2RqdDtbY3l6KmhoJk1bSkBPYkd+YUQvPlMvTmYhbX1eXypfMF5oJEtiP2MvYTZJaG5iSG9oTktReXUiYGBPMzZEQyEydV5CUmNVUktYe0Q2RUJ6W3JvWmJaX1tnamNDdUYxW1pxMHlYbjdETUFRV1ZFWlJsQTJ1RW8hfHp+ZDls''@;'; put 'put ''biF0Tzo5WSFkbDElUWdpams4JnZII1Arfn1ZSj0rRCRwW2NuJldhanksPFptPEdnJSErPz9OMHdFSEVaVH1SWT5jUG0kQ0NrQyNUVEtociFfakI6IVVePWNZTEVxPCpecCRqJGZ4QzBtXklGIzZiXnIzKEZJVXZmXmxpQGxFYGFtdTNSdjgzZGJufShKdzV3OH51TV5Ab3d2IU9BJGxSYFs3K1VE''@;'; put 'put ''K3EoM31QQCIrdldTQlBJTVFrWXROV3g0aXwhRDFoKzlAR3M2IilPaS9dbi92P2Q0KEU1TmsqZSlXL1N7Vi9uITIuTC91TGs6WFtoQFUydWE1e3RKVDRRU0l1KD1IfikuXUYqTTQqJWFNVXV9Wy45Yi9MW3NIbnBYRDtVcE9DIUJOIXxIIzNxYGBXeDV7MTVEZiV0dDVZbUwmbSMiI3dlcVFfLlVQ''@;'; put 'put ''aDBye1NqPjVkS0V9eHFPT0dfYTEpX1kuUVNXY0UmcSgyUG8pazd6b2R3VlFwdl9qdTFrNlhqbzFAKjI+b1BaW3VJNSZ6NyU5SnxEPlAweWNrITFvNGB4MCQqLzBeVEYoLiI3KXtfaEB5cHtGPj80Q0A/SiE3Uzx6JT0zO28iV2ZPU34hanFOVGF3NkdJXzIhUWMkJXNjP0JdfkpERCQ+W11SMl9y''@;'; put 'put ''fTxDWzpmdWt0d11LMGRqbGJqfmpJMVIrS25SOVZIfHo2azcrIXR+YlovayVIRl5YNShFYUB9bT9vQD87bylENW9lbi9mdVUkZl1FIko9SHgzV2tAN0M0RnFOJjgxUWJQVDh1RnwpVGRIQHBtVVpDWHR2VmUkUXIhWytIWXdwJlBKRGlHNkgrVSFoLnghTU9pZTA5KEBkKXpUMSEyRWl8ezdIc0Jo''@;'; put 'put ''KkkjclMmTnN4fDgidUZkPSFLQEUxKihTXSxrLzImMU5DN0s9akxZbzswYXsqQCQjKTQpInVBJkc1Wi9ZbkdgW0Q/LFl0fmxRc0w9Rj5bNVc6QSQ4S0ZDKj1STjsyIXR+KGJESjUwc2o5dytaZWlhZFhFWUNCQTBvMUBISEdAJnQpK1orLlZiNDswTjhnWj5pXlRDcWsvMzh0aHghOT10eU1gaD5H''@;'; put 'put ''ZHM0NENONXFEckIpeDN9emd8aSpbbyReJU9AK3g+e3h8b2YmYCE0TVA/R01wbkBHK3FnY21jSUxlS2h1VyU6PH4sfjtvR2cjbV5HcUp0VFI8QXY0WD46YS9yKnZkYWZTbDMvVV8udEZtOClacyZVQG9GVGRRTUp7ZXg6RFk7fW83bFBbfWRJMEBbKj5UL1pLQS9NSXhTajB2QF5yPHsjeFc7RTdD''@;'; put 'put ''QlU0PWkhTnRkNkE7V3RwQkBbUUdEbFZ2VlhrVkM2eyxMXW5nRTtFXkZKOU5COihPZng3PHs7Vnt5Iy8oMSlUbG9rN30lV2NeZDozPXFGfFdbOnlheWlucilCOlFtO3JVK3pRKHVhKzskMFBkZihycGZoNXVRakRTdHtiVVZVRTAwcFo+YS48W30lMmRIU3lRPVI+N00vcSsmKzlUK0ZoP31VR1NF''@;'; put 'put ''TX15cj17fVZzKFR8fj1xSWNYZExKQFQ/byFoZHt8SFJAI1cvIiFiOko2bW9FIzpPRjt5dW82eHVgOVguXjxycH5SL3VzPm0+ZTA3JWdEQW5mRDxsKndiUmVjfUtMcEM/PFdbOSY2MnYvZjRWMSp6e1pOUlU1TFtVfEN5fEFkdTBmM0s6L0BZPlpFVm5PPHcpXzFDS0heL2Qmb2FwO196Z3paSXpf''@;'; put 'put ''Sz5ha08zWV1IKSkoR15PWChJflNXfldIY2MsZGpGWDZDInVoOCV5ajQkRTZ+RHRRblpaLntRcSluKChEdFM4VmVbVS9memRQWGwpZXMoejp3aSosajchMEdMZkQ6WUdjJjNJdHJWQlJ+WnRURU4zdDNjYSZsbn40VHJnZzoxZGF2JikkUmp2TSVOdWIwZlBQTz9wWTE8RENlZitQNz0qWHxeWyF9''@;'; put 'put ''aVtjPF9nb1FjPF4uJiVycUAqInVxYHVrUWUoKXYmVlZhIzwiVi4iV1BFelk9S1dFOjAqa0AoQz1SZFd1bVV6QS5TIV5hK0JmWTRoWSNSPWRCJnBRVW5eJjFjQWhNSTFoaC9LQ008WnIyQitwej1+WWI+fmJPKT9yYTxfTFYrP2duOzo4YSV5Nig3a30sKT9PIShvTWxdUDtIcTQpPiU1JGJLeVJV''@;'; put 'put ''TTlXJno4JUhubF9bYnkocVZkLGEhSk1PSFcyd2s0cSQxSHF5Szt2Um9ZMHAzRjNAamFlRzNPWHVQSDtaaj9CfipyZ3tMU3tSPCZ0YSE8bnZXXW58antWelk0PUFjL05gfVtrPCtRVCVPK2RBUzFraXI2Ny9ELz5MaXN9fWpDZWlqaGRke05DUCMxK2Y4WzM4W21JNmx4X19WfHEqYnVKIjZpPXtH''@;'; put 'put ''L2I5WEh0Q2UoITZGJjQzM1pFLmZGSCErdH5rc2F4VGg4Om8rZjFaKWhKTEJqWCw6UHpdSzpqI2YwUFhDYWc3fCtdWUxxWjVgOkc+RW1QTVg/JmFnLEhqbV5PWTgxKWxTQyNYST97OVlPUkdoV2p3ajs2ZDFXPXEwZXMyaX5iNHl+fGxGKV5KSHpvLH45QUw8eGJlbUUyNXYiPTAoOEkmd0Z0ci47''@;'; put 'put ''dF1rOUM8aipVZFVhQys3IX4vVT52PzBTI3xRQDc+OmhRUnpKMzwqVmRYR21NKEw5QUJ7cH5HTy9MLjpuRmxGQj9IOWZ5SWYvbWUvV1UoO3NoeFV2MStJKlJDaVhIaClgX1JVSSR6YHxAJUVAdn45S25BfSsqQS97Zzh1U2VhUSJRYDljKSpMWl13I2FRUCQ+d0NlZjduMVFqMT1BTnIhbWxlWXI1''@;'; put 'put ''bFB1b09UQixFVihgSmUwL0YuQD5fV2NFTWkqL2VVayNdcl1NITJ0YSVufiQkb3F0MWRTJWhNJW5ib3ZCUFt5Nis2PWI/LDV9W3l5NiU5RmZwXyksXz1tLHlbbFNXbzlZaD9LJmc3dGRsYEtHc0wuRHQydGUqXlZHNzlgbEMyZ19lXTZnYkhyRTtVPSpTY34hZVQkcVh8W0pbNig7enQlIkR+TEVt''@;'; put 'put ''K301MUY2d0krclgpcnhvPmdfWmAsWVF4cFZwSl9wYylONChjN0xGMW4yOHNwQC8qSV88LC9sQE1vVFcoeytbJSs5PUUrZFFKVSs2KSgvZGZZcndDZTczfmhzayptentBazZ4d0VPcS4sS2c2QyZeI0Q1JndSWjp6SFVCYWtjRExjPUtoN1VKXV17a0YvKmFLM043azY0elomMCFAMyIrPVlYSWI7''@;'; put 'put ''RE1uc0dxZzVmW2BlYUZVO2R9JFVUTW53ZWZxJk5kbWF4OG14KGBeRz5LYXEodDg3SDNuJkNsbzFkRC9CIjA8W1M+YnhpNE02UTdrZ3NHd1krMEhIKmApSSFdTT5PTDdkRX5TODMwJmFqcnpMPmhbTkR2KHNAbjJuI3U9c35+OHM8fVV2KFUyPkk2WlM8dGpHZ1tBVFhmTzJvazlCJVNPNy4udjY9''@;'; put 'put ''RURrTjIyPV4+V1ExTV5qb3xXKCViakdSQ1o+dzRYdUw9cVJ+VmtGalFUNDBHXUdofDNpb0ZQSy9GcTM0WSpfNm4mejo8djhaY3lTTkw/azNoPF0zbi8uKyFQJW00V2VpXU0vUTdhcX54LGdrRSgsVHhoVWFVQkkzKTxGL0prczdQODBlc3VLbClbRXUlJG1ULzxqeTN6KVd3RzJEV1s/eGtqWllK''@;'; put 'put ''YShqdEpDV3p4M3sjUi5layE1L1doSiIkPmIqI294OHt3dFliaSVWcDVdYC9nTk19NEB+TGo/a2w6JCExPWJWbnlfUSlzLk5FYE10ST9lRioye1IsW0FfODkjRiQiMFArWkV9eV9pQCFUV1MkQ0o/cEt1My8paTRGWls/Ml58azd2bStmc01QSGRbVFJPY09HRSo6NltSVUxgLG4/Kl5AaHNFJnp6''@;'; put 'put ''bWdPKGNHekQ+ZE1YIzxoNTpjY0hwb3hfdllSNXg2OzI8XU0hX3U6L2QmeWZUVHF4Z1ZVOiZZPjokMSg5VFt1KEZEL0MyUlVabFRTfTNyWnQqTG4qJFFddTU2cndPZ3hCRWp7JFVmaiNRIjRaTXUyZEl5aiU0R3gxY2lFR3hZTWt7NUxNIV1VTnciRTVWaG1LOjp3WCRoN3lAbDcucigxciwwc1Jg''@;'; put 'put ''SzozKi9aTzk3SDYsVktCNlJKfF9kYzA5L3JxfjRnWnx1Im81M0ZycHNIX2ZUfSZ4d0w3WUxmWGwvKjUhe1AiVkF0KiVmTSVeOzBwT2pUODRfUTlYOm9oN00yRyEwQmkvMEJefW9MJHJrWmg4fjlgNU5ddkVGbkYiUEBAPCNIVHQjK1Q2djNEZmg1RXFUZnBCX3NdNX5CLH1ROjdgdEFwZjFhVC8s''@;'; put 'put ''N1F6OCp7LF52Kz0qa0xLc01ka2dUQDMhX2pWaG85THJUcSp9dD9Pbk9dQXM6WGNwK3M6MEZBP3JFNixAXl4pJUtTa2V0ImNhU15Eamp0X2hMISpzZiZGR1FOd2lJRG9bdldJWUgjSnUrKT5gamNfTysrOD4iKEEmOmlWT1cxVnV4RiorTGpHQEdPYDZ7bDtLY2dOdFpeM2xxW1BJYmoqRmZhRDla''@;'; put 'put ''RC47SyZ+a19UIzZtQT4pSVNpLjtkXV9NdSl0VGhTLHhNPXxXOlRPbyxpTWNwRVpPQnhqbWppOCw/VH52QzVsQjBuYVgkZExBISlLejF2KixTdll7dmV9Uyo4P1orOlZzPjphMD1DeGRtQSUyRVZBVmk+ITdJNlF6OiNJNTNGUSksdTswOnEuPz5wTmgyaXNDKUNRJHkxQHVhXlZZWWp5M2tobSpG''@;'; put 'put ''XyQqUDNUVmFRZ1pKNlR6PldhXz8xJEhhKk5uSGMmX05DPSYqWiQmTGZibWg0TD8/b2ImMH19dDptcV1GRX5zcitKSnt+OW4uc1JWUCEhNGkpYX5hTDE5d3VyQz9mTmF7ITh7RE9OfV5TKVclZDFXQnJxRjFPfFRbeUdtQksxLjxDIlY9JG06QmYjLGF+b0NQISJgU0VQXWVwdkdfKW5qVnQ3KHpn''@;'; put 'put ''QF1GKF5XWE1AKSEqLHhzSTFIVj12aURiL3sxIn5EdVY7NmZuMGpuciM/JDx2fG00Z3lJJClqK1AlWiRxZnZWMm57XSpVP1oyJHVOPGt8P1RdYSF+JXE7aWlVTWlKJiQjXTl7e2t5OnB4PS5mdiY2TmI4QytmckApP2h2a0U0RWVNMj9oTXd5a2w7TnRpdiR3bTZObEowS2x7NltTS2xObXhSby9g''@;'; put 'put ''I3ZhcWhrSUl1IlRhOFYve21IMm46ezVSKUQubGg8I1JoSVdbOzZQZDRJV10rdkZbUk0xLktKVSwpakpSak05blBOYiZCaVg1SipOQGpxZi5YeVlQaS5eSHx2I0A5QSFhbjFZOmU+bWZxI3Q8OncmOW9lMStVcF18Pkk9YXBzMWo1a3BQd2JEKmFKYXlJWU0qNn07JXs/VCZpPywhW3hCWURKN05v''@;'; put 'put ''cSVQW15oIyRnV009REtIcEFsPCs5JUNpa0g0bmdkLEJkTFMlXW14d35ZbGlAWm5lVlhVYy5EdDBjc0hFMD1xSlQ7XXByXXtoPCkwU2JucShfb2BzeV1edDtrKFYmKzFEc0w8K1Y9cC5mTitsbzxXOXtKVml2JWd9fFsrcmVyV2JiVG8jdTRlOmlhd1Y/Rz17WUVlaTQ0aiQ/O3NNIUxNO0x2RjZ9''@;'; put 'put ''R1ZWSUJXI29RS3Nod0htXmNHY1lgYFJGamVibkdGZUVfPjkmQ3xTQlYmVUZfNXxjVTFmSl5SLCxCVWJYWEllbF1QN2B3JlR6LEtsOCFNS19DbDs7di5jWjVOfXxXVkBSSHk/MzcjVFBQQkorUCNNVTZiWXI4PSY5KDNNJCYpe1VbIzQ3Zzo2IkZvTnpHIXZ6anssZG4xJlYwb3NmKHI7VSRaXXgy''@;'; put 'put ''TDBeJCtydH1vTTZqemV3U3V1OF59TFRoaE1JJXFvfFpZYyIzXyI5RWtvRUVxXiI5PUFAJlJRKz85REI9WFhZYVVNXygrMnJVdF40eSFWbXB3P2NSNEtydmI/PTlhXyJzKmNOUDJ3Kiw+QyNscUgrfDM/MmU1ISFEUSxHOF1wKmA8eGJIY3RLOVdfQTJXLDpTXXRnWE44ZG1ASUk0M15NUnt3fnIw''@;'; put 'put ''eCRGM2htTEtpMlp2NShJN2g8KGNiSUIuYC94YDpnakdYUmZnMyRQS2ZPaVFqL0csQlQoMFdKLllnP2dhMy5dW1U0JlNybnBTUCtDaWtDW0lJanklU3F8MXZaV30wcEBVY1J+KTI5QDYjWVhWMF9ScypoQDFqWD1nSWh0Zz9dKnZsU0Y3VD53O0lSLHNVaFlkaEZoWE97JCY/M3Q5UXM1I3dXW2Rz''@;'; put 'put ''VCFNUDFnKlg0aCRZYWk8V0F3b2xvKGM9YDAxXStQaEVZQkJvVmgheHRsbjd5MUQ5WF1fU1RTfEg5UDFlcmNPfnZ7R1pIPVVJOyx3YXBSN2lKbHpjbmkwI1olVng/VnF9ayx1emtneW0oPDtjU1swKiR9PT59fUA5U0RPJGNjb09GYFBBT3xBWlU+VVFYXVN9X2I2Onh2RVNaeUVIMUF6N09YK1ls''@;'; put 'put ''dTw1SU1naSFUbS8ib28kO3A9L2huSFZXSDo2PE09ZENkISlvRSlZTH0uXy83bV9pREAmcktmdXY9XSRJcU1KaXFBcW9eJVI5eFluQU8qd19ENHQ9bWZ1SWUwYmZHWE9uO0FrMDRjW0ZhXm99JUJ9UTUoVmdqSFZ0QzIxNTYxS35hT1M5WEQ4UnJtYEZHMDk4aDQqdn0wbWg0TiMyeDhGXlFFXz0y''@;'; put 'put ''JVg8az1jT0htbkcrVm1+ej1FXVE7WFBzfVoqa0xFdl07Lz45MEBSYjYuVkk4b1I0QkV8YiZhRV9oQDt6MDNfJEdQQHNwUW9ESGgvcU0+QWx3WFhGPlIyZUNGQCVNQXNaIyV4RVd5dytHRnBLRUVhVlNaWUt6LllmRUZxeGIvKj5lUUoxLko3ZlBZVkkiW24wLG1NZmtDUWp3MT8zUig5cktNdTN7''@;'; put 'put ''TEx6Uj0jSzxhMXAlRWxZRzp4Tl5TeVE+ciZwKGwyUzVzNUkrUlNGMmNuIl0hajdVa1laQFNdYF9MNTZdbktAVFVRXm0/LklBVFUiWXhVcjw4fXw+Lz51JTgjSFgzUj0zSXJRUXpdSz1tLyQvOCxQNV5sciswS0ovTFBEKG0hQy9qYGxZMnBZekd5V2ptQ2Y8alc4ZTM2XV4jaThfI3E1clA9PjIu''@;'; put 'put ''cyQhYFFCeEM8NTtROWYjZzVmJD1PZ2g0fWlldXg/NChVQUxfZWxkY0k9ZyxnWWZQKjBdZ198U0laaz01WiYleWIycV16OklFYnp7UUpYVU47RDRaNkUlJHFfJUJeelRDSipJZlp7XltnRUghYEYsZlFqfjB5PEllRDZfKiRFeFFNbShGLCgveyQxejxkJXE1bjRQb0Zqc1FAKWMvZkh3QCEuLlRh''@;'; put 'put ''KVEoKFJ3bWNCX01GRn4zOTQvJSV0PH1Sa1U9JGI9VGM8MXFeRGlNUCFIJVo4flcpIS40WFRLTHAmYypWbGk3Rk04Nzp7Sl8xQTtaNyMoPHpsWG9QNk10XT5aUTs6cTl6X1hTRUYxTn5oNV49IlBPaUd5e20vR0tfeF5vOShsOE4uNDw4cVF8L3V2STA0JEI+RVl1ey4wVWp4TnM5TnE5NSk6Kn1p''@;'; put 'put ''QlBIJVFHJm5CQ2FOLncwXUtoPkBIWGNwSiUhTCIwcls7SThbeT1Id0RoImw3WSNtL0lGMUZiUGJmSmY6eEQqaD0+Z2t5enx8aCk5Ry5qelIsKTNDQjNSZDxnTWwpfH56aExsTTkpJiovO2xWSGErT2ddUDM6dUd0eTpJRT0yWDVfODJLQntWSUZ4KUQoS3R2cFpwK1N2MFR+SjNYZnMwOUJzPypv''@;'; put 'put ''fVszT3V8JChUZyY7Wm53TjssNDh9PVZFWmZSdGUkLj1WdiE3Izp0LlpockU7OkNrM35sU1l5dUBGWHJidXJwdk9pb3BJIUxiOTJjQHZAbj5GS2kvSCk+PjwiNzpWY1djfncrXTc4LC9gNnVMU1JEQzxuKFJ5Ki4sUDY4Nzh6KjF1Ikw1XXAvInt8dmwpeHprOVAiOVUuU2h6PlAiXjVYJV9zYmti''@;'; put 'put ''cG0uTUBYLDRtYSQxMzZQdn11M1YuOFVraTdQeEdTNTF5a0JGKVh2eDFZV1QiPnZmXiRDIz0oUWViTyNLN0tbaGMrenAwKTAqdmRFPSRqXyNCb1d0UUkhNHMoOTllY21tYXowQyVRSDMidFJDT1ZGWztocUAqc1RgWUdXYS4hNFQwI0J8ck92WFdtRmhhNVN5aGFKTUdUT0lhMEF6OUd6KXJ5cz9S''@;'; put 'put ''SD4ofE1laVMpfGpMWEVgUTtiaXpCWkx9I3M5RXJjMkJJc2tlLFRwZnw0a15LYCUoVF82a2VRdWhWcVR9b3dLc25kPy5WLCNDK1owdld5eUFbPzJDNjskVW1Cd00mfW8yVnhbLGArIUFGSWxMU3N+WCs+OVU0cyVlZ1FPRGhGbllbVzx5Pi9sdyxRYjg4WCQ3UDEkdWMjelJLZi9ZVGFsUT97OS55''@;'; put 'put ''TyszcXtETklxPkgqZmhhQ1YmSDpBaUFdX29LWWgpN3suIkNHVGtQSi9TRyRYUCxhWFR+RVY2LENkZWlOaCNqTyhxTUlxfUdWb1dNdH1NL2d2YEhPK0heKjo5JVJEWEVAYmFpNXRxVGg0SW5QQC5wPWtZVDBCXT9XLFdre3t2Tj46M1U4Wn0qV2soZ3wofTN0Z3JCOzAraHI0VWklMWlebHB2Zz9I''@;'; put 'put ''c05RaUwkJEtYOSpVUCtPNy5DR3JGI0haN0Rhd3olI1l6R1hsRTAxbTR5QX5nempBbjhJIyVvTChHVC9rc10pUFdzaHNtKXtAeUEoY2oicThaOUVbZUl4bnooJilFOUYhRiYkIn54Mz1rRlBkUkZxV1opcFApTUBPU0p+NXRMeXR0bmwiZ2dUPWIuWS5ReChiNTpuKyowS3llRzxJWHY7dkFuR0M/''@;'; put 'put ''S3tlJUpBL2FsSi5eYjV8Y1guOmozK2J9JCNDVz1SQiJxLEQ/bVdYb1NPVVEke2RyQHp6UExRMC49VV96Uj49Omd+KW98flBaOVcxPlElInRpS2QrWW92U3gkSm1BJEk/c007KjtpYHVDWno+LHp5QWV6OihSKllAbHI4VVgoa3dVTUp5TFp6PE10OkduR15JbFBPRFouITZXPUlIXj1QSE9UPkd8''@;'; put 'put ''OiE4ayV3SXg0K2VdbGZvYHdXd2pYN3NJd1cuVHdMRl1sJWpCOyk/ZmsyI09iZTUvRmEpb0VIaEcmOjFpWj8+MX4rd3U2UE1scXJ1WXpdYHpUWiEiaU08Qy5lOnNSWiFRVyx0P0tlKHdbX05tajhSU25BJmhxVGs/TE9xQ04/dnxjRTBjQ1c+Yyp+Q2M6akA3JkFjfTo2ZzdHI1FvVmREMVk7ODtB''@;'; put 'put ''fHtTX01iKDoiQmNlb3ovXV40WyhecU5yTkZoYV1xOGA8ek1XLkMqezEwOHNeZkJYJTojWmNtfG5yJHZJa09ZNVZzLjhAYyNtcT10dT0lQy9IPnRocXMhcTg/I0x7eUBiWnYwciF3PH5VTi46cUNmKnIpVlVPWnhPfT1XOT44Q3lQJn5nNVheal0rQXdINHFWcFJmXWhGK1kieUNvNXNLJmJjT0ck''@;'; put 'put ''QHFWdkYySzdLKWdwQzErTT8vQnVTNz1gMzJXUHNwTS9oUz1HMjl6NE9rSiRHJHd8U2ZyUHQkZEFRYyIibVosdk87biloP3M6dTJXej5VYW9UUEU3WTEie1lhRmc3JUwvM2dWaD1bTlA9SkZ4RE1pXzU8NiN8MUx1JisoI110R19LL1B2fXdtalheNFN0ZEg5cFdCPV9bUzkvPUpXZVpqQkd9Xnsx''@;'; put 'put ''cmlIOzc/QkBrIj5NMXo2IShNalMwei8jd2UrJEJNfDouWjE9bWcidWY+S0dKZkMuImdtNWdmdkVzbz1UIzJacSxpbjAiOHtIaU10OVUqWzQ7KksmRS97UGlpflteLHlNXlRmeVJLTkRBMXRoL2txISpFcS5WR1UuK2F+fDlUSV03M3NIKl1CSissRWUqOyxmRndlVUk3bFlUO2V7TWs+cFl0Znor''@;'; put 'put ''XVZrXWtAVCZwUElPJGdJQm98cFdXW1U5Tz1LOFVeOF5fKyh2NGlaVl5DSCpZc3A1Z29qKSE4ZD1ONH41bD9kWDtRUGk5Lkh8M2c8L1QiRDdPZy5Dd3Q7KTNOVzFkQGJqPngsdyYwaU1OeE5maEh2XyI2OG8lXl4+dzBdSyxWMWRFa0ovXzhSVmN2dXFvRl87PExic1RyTkNSaCNKdnYxekh5TTtO''@;'; put 'put ''NlVPP01LXTRoZnxRe1s6LzE7OEhCW1tmKiokcmR6JjVXVWRHdGJ3RHkvMXslTytJJSxiSmkubD16KyttSUsyQDt5MTJWT2FpVXVLSiVvM1UxeWYjbHVdeSJVMz8hNk83QEtYVn4rWCE1b2RZWEp6Ij1SeXRpbDZvbnVUXXd5JiFYSEFoaGlhO1hVWDAzPSVLbktqW1Y2cUVAS3MuQjxdQHVpNXYy''@;'; put 'put ''cSFTKUczMXRZRkIpNzxkP19EQmVAeUVeIURqQjw/Kzo/QER3bWkoOF98M0p0TjJyajxXPGBpMT0lUH1peTBUQSVKTkl1bTk/SHlHTF5OflZ5NjlNUC4+Yj5NdlYkaC5Yak9wREMxQEcmbXJkdkh8RX5EdUAvZTlgPUJOQlVqUlZJeCQzM2RCRlQvSntweS9eUS9zJjpjOnJhPC5ySV9XWE8lNzw5''@;'; put 'put ''UnZ3UnEoSmcjJERCbFJBXyZOdnA5KTErZUoya2JsbXYlUEZVQXVXcEtjOWRqNzwmZiM/dUk2ak1fXypLZ0pOe0F1Pkl3NkU6Lj1WXlllQC82UzUoOW00YGBNL3NQKTk1PW5DJSs/TF1yTkYwaChNJXhCKjhZLDttTGhNO3pMRUYvMCNzUnd+ZkQsZCU7YXc9VD9iayJZY3pQWVFaWkBZJEMkSzUj''@;'; put 'put ''QElMS2FdPFI5TiR7QUgwRC5qI2lLTmMvdV58d2YmemoqXl91fmVWN1ElekxiKXpCYDRCaD40S0BYT3tATDpPbksvZileOy9QclJ1Pj1BKz9lYGVYSU9bfGE+XXt0SS5STz1SejVvPmdLemNZT2tESXsrJHcrbjE4KXtWOCs0cDF4NG4xZlApeSYoblk2PVgqd31WNC8iUERqTS5VUVspeUU+VmRN''@;'; put 'put ''YTIhczRvLCEwS01gP0dDRnsuOkc7JSpMNktOWVVHNTNwVFZZVC5Gc2gzbUwhVzVbWG5HNj5qIl4lcGh4MGw8eGMxdXoxQVJiKW8vRC9UVERyK0QsYGN1OThfeT92MDtHRltaZSFRU00yOG43eyh3TjpYYXY3VyIhdnE7VEtlPXtlaHp6TmpicXwiZCEoZzRMJldENTNlYFJUQjBOYSU9ejRARHRT''@;'; put 'put ''JkVZTGR6Zmc1aWZedzhIbHheb2JJWUciQ3F+a0IuaD00NTUiXSpsJXQvNUdwLl04b2hSQUoreUBaVyglSn5VXkdVd3JTYGZpOzYjcFN2MFdPc3NBYGhIRHJBPEZ1RFZVKigpSFBxTmUkNGo0ZU5NYWpmZj1hSnFzRkclYTxeUDd1Ljt3alVWdyFQdDw5KF8wQyJ4fmg0Q0ZWWGdkOE54U3xNR0sq''@;'; put 'put ''K05gYXYramhKbSlLfFRfWTV7fjoxTUg2JnRoLCllV1diK2M/WWBbWHRXciYwZVcwfFlrMyVHX1NjPnBHOmRnfUVrWl1GWk0wJENXMmJqLiIqSlpGJCozYGNvSVVnQXR8KDNgZl1kLm1NQHY2IWpuRWU6ezNDZkRrTihNYFBCfF1pKWlyd3Y9K3hXZipeS1dET0srJEZUcFYrKyFBX2lya1pgXiJY''@;'; put 'put ''PWEoLz87eygjKi53Q0JsQ0VJbyp2PTN3dnpYaUx+ISlFZFRya3NUbWB+Rjd6U25UbkorLD0ucCM7WHNFcDdtViNSX1BWLnBWK3M5K1JwJnxDQF82QyhIJE1jfUJJVmRZPEFtUCZiWHV3d0x5MltIOXw2IVJeYFY9L0NsP1VaS0wqPnx3QEx9Ozt5WXJLXm8iW1leYyU5SzpyQD1GPyhNYmkmV2hK''@;'; put 'put ''UHcoWFE0UWxGblc/L2IhajhUUm9qcUxfSi4+V1Y6djBFLEMlPV0iai9WOE5LXUtfJHRZOnxndDtiTypfQys9NTlvOztYTndIRz9wN2RjTlVHK08wUl1vME5SVDd3X24rITZBfDlqNXxKeUlbRGhCQClfOUspKy9ZdzE1IyY0XUtXOXs6VXgpTnI3NUB9Rl5oTXczOGlOU0JEJTZkM2MrQ045akdL''@;'; put 'put ''WHBEXz1lbFhzYVszfVcmaGZbO2FHVEVGeCFxNCM2S0VxLml7e1BqYiJBQWgiKG01X3E/JlJ8OV1GVUR3X0p3aGNrY2YrbTZ7bSQsUDVLT2Y2MSgwbXRpOkRbLnB6S0MyTXlydWokKjxqSSl5JFQrWkloXS49aEA9VU1lLmFYcT4/KzlpO0ZJRlBkYSVgYWtsOWtpaz1TL2RmPi8qUyRadmswcmZN''@;'; put 'put ''eVUhZSlsZDlrYjI7PUU3OSRZSyh0aCtiYTRfJSJubSNsZzM9XXlrVzxBUkBUcCYvbUVqXkJPQWhtZS5JRWo0ZD9bJl51LEFyYW1UUCZsYXB8eGl6TW0iKl51YU9bNVtiSk9kaTNsO344NzMkMjp0IUFUO2BbbXd7N01pTFJhYTdCKUpGWVtvYVVdXSRndmJGIl1RaWVOfmJRfkA/czhTNXZzc3dG''@;'; put 'put ''LjEkJGcuXXwvKiNJO05PeHpYc0kkfUAwMCZpMXpZO1hoSlM4VTZIYyYhP3szT2w2YFRdMmkzMlM5a18+SlNAPUpAZV1MdDFFIn42T11SZnlSfmFVS21pO1VMbEk2fSNINzd4UlpuNUJHQnhkRjRJWnpPNSZhTV51WTU3IWFOdnclO2s8fCFEdSNVUSh+YEFmW2gmfFp+dTVQYGpiantAX30mcE5h''@;'; put 'put ''VCVEMHBXakVWTldxNHx5T3xVNVBJQ3Y+Zz9zVHZVS11MQ2xdTSl8LEJUdmFCeEQxcT8wRDdyMSZbXyF1M3F7UHJqTUFwZH0/Ul9tbUNWem4yTzZWYHErQTVKVVQrZkNsSz94TnNpSHJ2dDE2U3heKkg+akBXYCYsaiw6MWQ2QykmJDB8Wip+dHVfJFUvJHZ5VFdaam1IQ1tWREk3fCZ9bndjcXhZ''@;'; put 'put ''bVJpbXlKbG1efkQ9NCN4JiRzdSUsZUQ4SUxdfFNjazQ8OzIlcG9fUFUlYXQ/e3k+L0BZfjpmSntGVnk9ODsuWF11NF1JKmopWCp4aVVXRXdJInclYSRqOk1FI10hISNHVDRLNH5JTFl7PTlZKnJbTlk5K2QzSTAzd2NdUW5FMDJCRSR4eVVNd1JPOV5NKEh1Y3pOSXVWS0RCJDgyNHhKO1IweCVt''@;'; put 'put ''PHx1azpDUX4sU0E5Mmd6P0E8VDhFbXFHei9qaGt0RlQ/RzI+JHZUenwzNVY3anRKTE03OmlQZ1pyXzUrWjh6USskXURmQlc9L2IqYVsva0UrR1ZsKlpHVUU/YlJ3d1l2UGdudCFse0MwJWY8PFFVY3laRDxgak1iZz1lYE1DbzJ6Wi8zUUd6TiNgQm4lQmhgV1FBfU1eU0pafk8ycF19MUJdaUow''@;'; put 'put ''X2EvcDN9S298ayJWPlQ+TFUkRmBxRz9SdHZ+Ul5odEUvMEhhMVNtQ0MzZ25dQ2lZZTdDQVQ8VyQ8O3hqQztsUWhRVy5Ibz4qbzFtWS49dDptfDYoOTpyIWF1Py8ycip0Rz4sS0Q3fVNWNTlyYSNUe0xwZChhZCx6Nj5GbG8qOlUmUkh3QD4/OHhpNzN9SEg5JmM+S3l1bURnKTpyLnxqJltHfV5g''@;'; put 'put ''M0djPVJOfEV9TD8lT3FOcUssbH10PGBGVEkyZFNobUQ4T2lWUFZATVIjRDFtYzlhZmx0I0xUZmdBUWk8dXJJKHw6VXsxIT5FOCEmVTlgWXcmM3htV0JmVS5CdkY2RHkybF0hfUQ+R1AmMlNULG0hSDtXPjErOGklTztrInA+Y0JBPztOVVVGN3ZeQkN3XXxsRXVpSCU1IiFNI14yMzMiXVheVDY9''@;'; put 'put ''PmhKLmZAdGN3Ljo6SiJtWlszNUNrVylPTmxra05jJShvMmdIciplZzE/Q0lFWns2I3Y6Lm4uUUg8NnQ/PShmeHM4TF9xIjpCOH0mUyt1bDc+XWJvaFJ1JGFfP2JdUDN6YSVnVngmQDg9IWVZeF5VPmRlSE1lbT0xU2YpMU9zYzR0U20oYnk0JTZjK3MqUTQ4bzBSPWIqXUNJJFE5ZjpsbT0+PVlf''@;'; put 'put ''NShzNS55cz8vaSg7NlFJKFUpJTE3YTN+PVR8ayVFPWxMQ0E5T3J7JWdHdiwsKXQ7XUkpP3UlMHtdW0ImbE5MWjx8SHUjWCp9ekQ7dF98SU57dyl9UmNtQk5aQ3kkUzVmSEosck4zVEI/bCJvZ30ieEpkYEIqIStWZS9heCtsIiNqSXksQU5mNlBfRXdkcnw/YXFaMmdnP24kVksxZlopTFRFckVU''@;'; put 'put ''OnFGPF9QQyk9Z0ZwJC5XYEJJWmJrZV11ez1VazJzezl2dyZUTH1iPihocHMwWlgvb2pvVFY9LFlHSFZNaSwjZmhDWld7ak5SX3toPlkqJWA0akk4OlpPQkRHUHQvOHc0dEJAUGpwWE5EfXVIfVRTfnhiPTxAUXk+Z2YlU3JNPGhHSjswJUUiMmthZVZFUHAvKCVePVdGezxsJVdzUXRiRml0flp2''@;'; put 'put ''LGlIRSRKOCJAVUVCVUIjNUwiMDt2OWF8RkZ2XStedXB3fj4+eH5dSip8WCYsN0RuMShZbG9OJSMuWU9aaWVSV0hYRilZTWw6c2F3bzd8Oj9+UDFwezo2SUk7clo3R0x+WExHNyN3RlFTVUA6RSsubGJTQ0Y2fW5hSEYmOlslRGApMyV7LzdUY2RvUmR1aEdPenApWVE6cGhPZFoxJCptb3kuVWw7''@;'; put 'put ''S0pPQypQM2RSNncsNCllMXtlOF9QUTAyWyFaYHkmRkgmYSZHSUJeZyw4VT9RfE9kXV1seiR8MXh2YGNoIz13Z2liYmRXSCwiLFZWOVVmZ2U1dTpnenVqdlRbRClaRzdNT0pGalBLaiY5Rzg3ajVzTjB+SmlQRDIheyYsSmN5PntsKCl0aElEcSMkP2shY3hOOyh2VH56dD1IdDBvZ2BNRVNlR2dz''@;'; put 'put ''e0lUKzU3TDllS0szWlp9cSFXT2NVUHEwaEB9SE90Jl0iaUZVU1BRJEpHKjtARHRjKGZFPEglRG58Q1UmL0A8X3JtOXBEUD1lZl50dj1ILGlaQVlqLDMuaD02cnwkMmo/MTtCQy9wRl5pNH4+JjdAe0liUFNadVV2QGIwJEYoNGxtTE44dEVTRzMpKDlbJWFWLGlgQV10IkUve3FWRnR5UDJfZHVs''@;'; put 'put ''dHFmc3djVV9fJHosMSwubWo2WnlVaE5nTEkjZnRKK01GRDhoUWY6NERCUiNbIjJZeX4hcWBafGNWOjlJUXkwQ1FTYnRmaE02eTAhc0dYfStdXUk4Kj84XmtOWD5WMyVjLDh4eFVCJjZROHdCbkpoQmwpWXFHaVIkSmRPcyx3YkB+Q2ZhTmY9Okt3KzFwKihadmAlWFVWTG92W2RndGgmcGtwWUZa''@;'; put 'put ''eihpIyQ9YS41cUpUL1s0VC90fSt5MyRqZEdrWzxRMntaVmNqcGt4LGssTF5YXz5CZT47PTBGY3xeZDFTcEsxOigrY1RWK3glc0FAXl8/MHJ1Ik5bfnApbltbTC9OWzFAOi9NQ3FqUHhFbmJ0WT5dVkd6bXVmR2RyLyldOjBJfUFIJUV+ezxGPnR1fHFIRUcuJnFfe15XUitbeFhhLm1IakspTld8''@;'; put 'put ''VEM9R0RbLjhiXzJQYygqUzVTdjI6TjAvYnc0Wkh6SUohcjokMyk2ckVScylaamNnd0czOkhMSklvMUdLPH1pOClsez9SYWh7Z2lERHFPPClDMGF6OE0xLlR5PH56bE9yNz51Rm5YRzJSIzhZaENJJFJnXX5qL0dtXlA1eSUrV3lXaFNTbDxTQiNvPShPWH1AMXxCVmpAZDAzJT80TU9XY1BFIzZf''@;'; put 'put ''T1Fvd3sjWXhNX0Q6ZUdGKVNIZCMvaH5zXlglWGBfR1dxM0hJQi8rbHE+LFddPVtXWi9ZV0M6byV+ImppcU5fS1VsTmBFQmBKR0BBZmpCRE1FS1VZOHg5bWxHK3EqVGhHaFlJW3w7aT9ve2lKaXMjaCMibjFGNnJCTXNIcFNSNyM5X09wJV55KytaKFQyUiZ1fUV+ZCU7WW9wZDt5Jml7NFBzWHt1''@;'; put 'put ''Q0FjOWJQLyMwSix8KUZDWU1ZKVsuIUFGPXQmKEN+NVkxTDBhRFBMTV95W2tbR1B+THRefTpIZ0I3UyNJPW5lZXRBZmBsTFckP3V2dy9WIn18YGFrP19dTWlTKTdMaWJBUX1VO0Q9ejFzSnxFeUdjYkphdVZDeWUvOFNdLHVHOGp6UFpXK2xCJWBdPnVTOkF2W1RVOHM/RzBOfWkqNjhefDZ8YU9d''@;'; put 'put ''XyRVPkxzUV9QPDQwQ3hjW2BDZllzNSgyYjdnU1prVl1bdFAhL2V5UG1Lei5iSiVOUmVaMnEwezJIfVZ9XTlib2YudiRhPVpAUGV+c24uczA2MTM1Yj1PXVNuaFNpYlUje01iOkRNOGw3OzFmVkcock9yOkRJZkNidyRzb14odU0pXSorNmQ3bGRUS3BXOHAlWyF0enAjUGdPbztAKCp5My4iJFR5''@;'; put 'put ''SDM3IXZ4UCsmKEBUcyxjVmh8Vj5tM1o3NGEySSx+YUE7bklEaEZifn1YUkA4fGMmQE1GI09be1JKWC4iXn5RRl5WJWcmXnx+aFZKRm86aHI4OiRTeytFazM7ZXMkJVZEME9ZOEJuLGl0UTl7IzxqM14zfnNQSjpWTmM7fVBaT0NzUz1RQix8LEw6I2heenFqXX1LXl15WVNkdlJuZUluTXJXZG1C''@;'; put 'put ''QUxIcip8ZlRJOlBwKT1QXXpsQ3l7JV9NJHt4NWJVVyF1Q2JdWTQxfn0oX2UwP2AzTFIzPjdLOml4e1QqfGt8LCtIV0hWbn1TfGB8Wm1GZzt5Z315MD9vVihkSCVnSkopW3Jka3BPOyR8b30vNn49ZHFENF4vXyNDVSg6JFl4ZCJyJkg4eTxLWW0wInFJai81QkosdGZEY1krbDVyPHtDN3lNJUZo''@;'; put 'put ''YjBJSHBKazkmZWxmKkt2M3cvXl4qYSpnOnVTR1ptSDJkL1BHTEhEdXYrcUk9fV47fDlxV315X3hGakxHT19ZIzFlSnA3bkBGMG56SzMkVF9VV3w/L28uclllL05WX1skPDR0Y0RWWSVUZihwX3tHdi8ibnBDRWBMbEQ+ai5EfmQrOkh9bjtEfmYxXzNUTzZxV354N0BaNVhqWl9nNTBZJC98M0Fn''@;'; put 'put ''aEN6KFcjNXl6WDJ2by5UY3F2ezE6TyFHajxeKHVmSz5tYHM0Ln5OMi52MHZ2UE1xITgqYnx4JTVQNStHSzIvJFZffm5FeGhuMjdjSyY7V1FNW00lNWcxUl9LIXcxeTxvKW4sfTpVQTJDMzg6R0NGcWE+PzdESFkpclI5VzIjLDpuN1MwX2tVMWhwVisoa3NMQVNMdipYU2EwOzg0IXUybHksTGpt''@;'; put 'put ''NndTbURgUjJZJWEzWEA8a3V+dyJvLzhQVmpCSWl0NmArTjYxI3NiTG5vb2E2MEAyQiUoM0IyLGVqRGBENmZMN2FeYEtuY1k3PFgvYm8+V1I3L0EzaClNOU0jTTw7IlJTOmF8d1dZNFM0Tkg4SCl1TVZkVi5CLDYlQ1tDaW4xW0MsJGBgbX0/RSZTVW0pUkBRXSZZUDYlNXdKUmpLUCspLzdxdlFk''@;'; put 'put ''YFgoTk4yLjxQeTI3I1Ajd0J5aVpBSl9XbDUyTVl8OjUhIVIqRzNOSXAuanFdKFdxP01XKzAoIShZcTglPSwpdV8qbk8+YEFRT0AoaElBKitjTUlSYCVPeCp9KEgwSytnKjE9P3N+U3soci9pLCQjIUp4MVZrNndkTzZZLyYvTFZaPXxIdSZhKEUlPnpkcGM4YkwsM0RdfjxOQE1pdDFpX3Y9dH40''@;'; put 'put ''Qix5TE0zQF8lYDV5dTdqMllaUiwmZE86fGYuR1lPZi83b1FuNiFKOnhkYXlqQVlwRGpzNXE9Uz4rPzBEY15zTEV4bXw7L2gwTiphJWJBKUA3cmpuXVpMe0M8emI0LDlvV2wwIX5+JVlLNVJwQiRpI09UTyM1UFBPcE9SQXMmUU1qPiZyQyUqdkUkU0h9S3V7W01ARU5DfElfWiNFTDQvL1tlfWg2''@;'; put 'put ''fiksfWpuZkIzYiRnQGV2akFYJUZ3WnZUUHR5cHEmKSpsKTJVO10iO2YxVSRhOE05IzB8WnlGSmBNOE1pW1R7JjVxOSNZOG47QGJRUlpsdmxJZFM1PHtLSXVyLzlmLyhAcix1bFEqfjkuMzJudWZndGkpcS5hZFlZeyU2QmdEUkQ5b1lPJDVkU3R8ZGMwciIyTzQ8Lll2eiVvX1dWaj1hSTplR1JO''@;'; put 'put ''Qn1hKG1xP0pCODRhRGtTSTFXJG94Iit+bGw0O2BHakpuKiY6LGFbVEJXQF9fP35aQEVCOkBtX2tudjxYPUJ8XzVWO1d+fUA1R11lTlI8ZEZrI2VIRnJ5OGZPJjh5MkB7L3M2KUFXU2M7QGxUc3khKX1zeiFMSj1WXlNwUEoyV3M8R05PQ3AiMVBUbUplbEs8eDREN34zUSw6KloyZ19hZjBnbGRa''@;'; put 'put ''Z3AqN1hIaChxUVhAUVthP3AreCosTipXQXxNKFg/dXJKYmE5JixWcl8oQHgsbCx2RlgyezdLRC43R3tdRjF4Sl8ybFklOWBjKXw8MTVqeU9BImViXl5tTT8xQztoWmZOcGVucEFlSEtNdnhwfSQwcDdqbmNBQnp4Mkw2K3ckKjRLKnNJTltGdlJaPH4pVkh7eWIsSWJSPFQ5Nnx8SS93aWhVMiRy''@;'; put 'put ''fXF4Si8+YHlIOXtke3c7L3ddJXI1eDA2Rnl3Rng5NDA7JGJJQEFtZGlkWzddUWAwSDReZms1IVRsX0dtfHp7aWEsaEY1ZklfSnRYfWg5JDxPKzRjTiIiYFpES34uaT9gL2tQeS4wdGo0cSxiR3cxSXVHSz5yUkBHNnhQQH0pWEx0KklLNXQuPmhLbyhIfCV1R21ge01bVilTQiImSCRXV149e2I6''@;'; put 'put ''Q11fbVJ5Ik1OaHd+Wn1MVSJlOWldYWgsbH0kTWN8cyF9cHViMStPcWhiJDdIQ3FiKzZlRGV4KEo/b0BeITRdQFFLTz0/TUh0QkE2I2VmSklbezJ8S3dePVFDcmc9Ymt2LGRTfHxPViVbemtlQlA1dXtnMXsjYkxSKCQ4OmU4c2Rxc2dnL3VnV1p1I1BEfWsoIVM2UUdnVTgzU0YvOT1qdDZLdlp8''@;'; put 'put ''SDIhMj1hNykvPHJsI0dyZ2tPY203eXBHNWNaUUwkcjx0On0ydFRhYWV3XVplZX5qJV1CdSgjMGhuN1s7TTxBdE88bU9DKDFmXVIqaXBWVH5tWDRFMSE9ZW4+dU9TJShQRSNpSi4wXi40TWd4LzZKOFBjSz07byhzbHg8SUhebGVMLk1fQXhPWW1GPmkmPmhLOj4pMykrLG45R2BbYHI9UHNQPWU1''@;'; put 'put ''MTxEXXRYeWpPISFHeDFNKWRILyZ0MSsyanc/KDAwK2IxWj9FJTVCTHVQPCZ+OjIwJnRMYSxqcDRvWHkmYDk2JFFMN19EZz5PX1dmZHQ3dC5kIlt7L0BQSFYsPkxLdmlEWU57OE53aHd2Nlg1ZWx6dWxsNz9JPmo1JlV4Q1srPkssTSU/Q1NsMmJ2Jls7PG5XOVM5LmoyLnIwcGtkZXBdV2hIK3J5''@;'; put 'put ''Km88X0FSYXQ5TWhhVGByQi5hSnJONyxDIWlgVVRMS3hVSj0xMWI1dUYrQUleNnE7RjVMOTM9b0VNPFhpbSZAS1QoNX5KR19peHMlJFIxJHhuU10sYjUjJjNvQFJwIWVzXk95RnF1bjY3IVJdWSs5KlFzWnwjIXUpI1E6TEYyPnl9b3BnU2RPe2lPKiZBeEg4UHV0ZUQ8IXVxMUM7PmdAQTYzJFUm''@;'; put 'put ''RFk6fCh8PnlOK3NmWVQ/WHlgYmF5eEtGW3s1UFZ8ZDMsU3BpUiE4TXFmPiklPixxNFRiOVV4dDR5ciZ9dmhFWnxGakptNUIoaCZLO0kqWyQkXWRWM0l1Kiphb2t+NyhrcWJbQkpxTHhwbGBDbXBxYExDQFc/cHVEbnAibTtvSV5pPCw6Y0NLL3xgMH1NYy9MQzBAem5EKmY6UGFDOl1wM31qSXta''@;'; put 'put ''I2x0OikvYHZqdzMqbm1fdT09dy92JHduWmBnMWIyVlM5aG5OSyUleiphUkQhM3RPU0BsITdRQjtEaWJaLi8zWm1+K0d0Z0h6e2h0QWBVNHkvYyFUMT54SVYiRnBSM3ssbE49clIoXldHV2dQWy9aPCpWP0xSbjdkTkhdUmBuVlMzJUAyLkNBPEtCPEU0L11OSTNjJn56NHU3Sy5YXnp1KzYoV3Zv''@;'; put 'put ''M1FNUGxxJG0reEZvfSEmfSt8L01BWyhtXkRPMmpjbTFdLDNMSm8mVHMxWkNDd3k8NlNsTTNURFZwOXN0dVV7dSE+U0UpeF88dGd+andRcUpZRGsuWCxAUDNsR0tqZ3woSEBZdnUoQncyUls5eStEeCUzdjB5al5hciNoSzAwJFU8QyUvO1B0bV83WTZ3Ny5HMmIwVXd9fiFGbzUhZUd6Y1ovU25y''@;'; put 'put ''SzVtPy5gUVpWNEtPMyxVaCYzUnEyelAjNk1oPW00TCxfbGVYMDVmcD1mZ2JIeU1pWClyYEQoREkkWnQpLCkiKShBd3l4dTRqWzcpak5SZVV8LERhMDhsaUxVZjppTzhvXVBlc0slT3tFe3ljJUxRVCZJZHlPWCVoajNQVU05WCpNSjVbYGVIfCJfUHhsZ0d6TkYwUEI3NittU1cvTmk2THVMa1VD''@;'; put 'put ''KW9BRDFoZykiX2dYO3p9dX03RFU7a3BYfXhneTF2YHB9WzZXQ09OdmwmbWsscFdRRnQ+eFEuZVNnMjZnLzZoXm4xWk5jcjJNXUFqM1dpdzBYVDV1JUxDejdTMXgvYCk/NUBWbkVWdTp4Vj5HUkh6KHY1R3ExXm9vZ107Zj9RbztQPVNHeTZaYzxMcmUzS1Y0VHM3WjAzLyNVfVgmey9KZmdHTHVL''@;'; put 'put ''Kk92ayR2TzRxYUEoVzEzTSszYnZhdXlUYCpxPyNXc2ciLkI6TUx7MSg/Ky8zciQyY24+NC58K0wxdk1neik9Xz9kSl09ZHg0KFEzKCE/bFNVM2o8fC8/I0kwKitKWGprVTIiIjJ7TlFhSnNaR1lgdC9mT29fUjNwWnhgLE9RT1A3bzk5RkpSYXdySW41Ti56Kz5tREY8OSh2cmAzTW9FVkQiOXhM''@;'; put 'put ''KCNLfDZRMEgyam9pLzNYZDE3eFdTflNeYjlwSk85L3l2JW9ycnZneWB5QykxZz1HOi5OdVlEZSoxL0UqajguUSNzL30kZyRaNiZHIVRzMyQrQFNLIyEkaW1zOkpeLCFGNlYsPmxVYTRLZ1U5M3syLko8blQhQHJqZGs/Yll5Vj04QTJCQzRjc1U9T2w0WjZXQlM0bVI/amx+dW4uR2FHO35eam1F''@;'; put 'put ''LFhoTWJVd0AjUWVwa0cpcWZxWU5jJDNBInZ2NkVwejo7dDtPSElWXjtGQyNpdHZqNTd6dXMsUixHRmljUUBAfTgsUUhnYWwvc3d6YFlzUWtwSU0pRG5oYEllYCkiMTV0ZEh5SU8peW1kbEE9TE9RTHYqYXUkNFNzNEg8RWBWTT96SUp7PE9QQj1eV1h7OWVGdSR2bThpIy4qKj1AKXFZW2B8fXw0''@;'; put 'put ''fERXaHZ5RTBQSmFFUFI6YkQ8XkMsSS5me3FjKTxrVWlTMFcoaWVnI0RDcC59ISgvUFVHRCs+dVZ6SXJuLzgwU3JBZS9sdCVkeUx4Vk5OMzFIOykwWDtGcWNmWFY4eWNqZzRYODl+XkZqZTw5e2g5OVhnbUhYYiRsWnRROCJNJC86TztWdyNHN2Z+d0csWz9TRlJNZW4hUGRnKTdpKXVdVWUvLFp8''@;'; put 'put ''OVkjNXtedVZEd3A2e3M8Zmw6d3pkMW0oRzdwc3BhWjYpaDY4Q1s+QGtIcmU2VDhIPV87RiJlTEM9cldCR2hpJH55L2FTIUg3cCR1QyR+Sy9YRU0vZDBXUF5gVXwvWWs0Kzo5P1J+PVRvWjNYPGZtfUZfdWUrQ25Jd1VWa3hwaHJLKmJkUG8ofmI0U0ZvPCNKZEIqbFhvbVBrMzl3KSZTfUhxcGJm''@;'; put 'put ''T1JKUUYybk1ELn5MTk9EfGg+cH4qKVluS2N4NmhpeGF4eSssfj91YnUoV3xYRStoMChPSX51K0NNLjJdcTxZYiFlc0U2X19RITZ6WyNMezAlLFtVQUooT2tkYFtLS0JpU2BxTGRKZ1VxUSlFbGkrIVBJNF5VNCNnWkM+ZmlqeF1RTDV7K3BaSE9Xakx1ekBjTTN8MipAMCNZU0goU006XlspX19q''@;'; put 'put ''NUlTQnhVKCgoVWJ7M1BdUkc8Ync9YmtmdVlYeENHeTFoK1lSYSw+KX5ULzhpcVt8VzA4a0hmN3hnTl0wTXcmflRUZnFhWkB3PGYuWiYxLHdDTFl5ZHVWR2BMWz8zalMiL25IIlZNJmd9LkNSM2JLMnhGYGt2M1VbND86KjVVL2h6c2VgKT5JJH5yZ0wsTyNxYT14b1s/SUVdSntuLzM9fWV4aXZ8''@;'; put 'put ''WW9HZ3dBeThmemQ0WE4scTUxSmhHUElqaWomVFt2dDYvaixqeVtWRUVtJFJ2UTFoKldEUFZHYzdOfFtGNmZFIzEzVHdqUV1kTylMTzJBIzt4SUpSQTNsJE80fTI6UFFxTEg5dzkzJD8pej9CJUhUM2AkJDMyRD1Wb2Q4bmsqVCw4S3Rwe0B8b1VAazthQyRGNGZXRzQpMCNKPFRrWkU6aCVvYC50''@;'; put 'put ''RXcqc2xqMnhfenZicEVdIl4/NHI5cz1oYm5lSD1FWGEoSWlORUNnUTxIey9xMmZeRXN5PF99MnwlcXp4cG9KXSRjSDV7ITleZ3NoX0RxYEhkZ1d1e0NoPFgybTV0dHdMJjJ2UmQxbVs4VDAoaC9JWj13MUFfeHdQJERfVUtbZHsleG1dODdhfHJ1eUZNIVNiQDh0aGw4RWxHKUc8TXNTRCxWZUpR''@;'; put 'put ''dFdXTk5PIU9WamF3aUhrfEJPYzFmLzZFWFIzYiNRTk5JM1VDeFE/OH00T1E2cGszOT9GW0J2SDV7akBdfilKbTVlRFdtSypJfVMqbk1la2Y6Jj5Ndix9InpoUiRreUMjUlE9eGVLWTQ9d2xiR0pAWyIvaSVJdnkmUCg2WlRTI2dKY1ZePTN1X3lCWyNILnI8Ki47SSxNUXRKd258eEtbMnpqKitM''@;'; put 'put ''bGw/UmA5WEhaW3BHZm89XWEyPUFOK1FPaG5gN1VWKTRmaGVzTGphLC8mQ2NZQUJKdV1feTdlPEgzd1YlSyJOWThpfClCIVthUXRibC5uXz5YaiQoL2h4JDxOIUJFSiMjNXgvM18hfkY/bTgvZVB1ZGh+RyRJQD81a2h0TX5uSGB3dzc0XTgwc3BGQTRiRnxGeH1AYSpEUFd0YU1ofnoqXX5zRW4k''@;'; put 'put ''RG9VRSNFPXxOOixjYXNoKkVOQStvdlQzOUQhIkhtemx9eiMvTWh+OkNpMykpWEtafG53RF8+SkVtUXQ5Mk1XMT96M05QTGUwQCxDUjJSajxNZn4+cjNvdFBASWc8c0RNMj4zQj87NyVdZ2RaMXtDZVZfSFl1Rld1eX4vJTBqbTkpNntZSTxfKW9NQSxAM3lYYEcibTVqLnJYVURtaiNfbnpXem93''@;'; put 'put ''Y2xpODhFJkV7bCs7bE55QV5eSjE0Uy5tS2JnXyp8eDM7WXs+fUQmP0JAPXtzVVREdHZIeDI3WUpzeDFGXVlXU0cpWkRrakNRPE9hNFR3Lmt+NEhsZFNDZjtqRU9HU0NId1BKQlUjejtzLFpUOCMxeXRsUzlgM1F3VktFQnBSYVFtaDBmLDBOOlZ2YkAzfmNrTH1xdWZhPntxTj19SzZjRmI9ayll''@;'; put 'put ''KzFCYF4zIVNVLlR6VFd+Vzw7RCN2cXI0Q3AsISk5PzVtfE9WdnJwd3BKcD1aUkI5T0gjPm5yfjFARnk/LEteXz8wLlpYUUpwOlRldnNvVypTVFVNY3JCdSFxazhuWEBNOWJoclFIYT87MFJ6dkZLdi9ifiJ7fFVDOWNLemd9MX5WIipGXn1jKHlwOilgdXVIM3oya2lFKF88Nj1AKWVvdUMkMiFF''@;'; put 'put ''Pn1UQSF3ZzF1bChdUzk2QEIudT0vTUQieyZONjljYkkudTV8ZiIoSW43fXtzc2NHM0hjZFsuQiRUSloxK1JbRXZiV1U3MCp8al1XTUF5e3RILGI6WDFQRWhvdmkrUiomeixDV2plUGZeLk1GNEhBLEwiZ2tLPG17aG56Zm02I1Q/UyFQa3RVOzohOkRvZGxxenAhRH5zKG80KkA2d2ArLH4yJFht''@;'; put 'put ''XiZ0RWQuSilmX3osVF52KC5wfD40fmNeLCM9VDJCVG51dURFfmBlKVVjaSg5NFNlO31rc2FrcWxUNSEjZkpHPXJyZyNhbDI7Qn45NCpiNndbbVZebnBAZClmZVQzeGFOaXt6ciZ+YTkiKltmQF5YREg1JHFzWHxaYWBGaT1UbGdfSkdsTCQiT0E6R0pUWC5hS3hUQVN5aSR9PD91MVJWTGEyLis5''@;'; put 'put ''d05DQCtBKX5fJksoKEVSb09ZcWBkXzRERm87fkc5cC5SMGQ8SXlWK094LHN6YnNPM10sZzZbND1Kd0YlOV9TNHskZzRoNUJteWUlKXI5OyFeNjFAYUxrdSVnaCQvPm8rZFpFSyIrWXt4SSEzQj59PytzKDdyYFc6ZnNDWUl8SE10cFllZiFyOXtYeU9bJlFtXldJUSVvRHpsJTxtRk59LEEpXjkx''@;'; put 'put ''MXZgR2RoSlFZRmZKQDpOOiwscE1lSHlwcktTOThuLixuK0hpSzpvS2MxKzJYQnBXKUUwWDh3O1VGYWZQcnJrUSFVamdhX085dzNLQHdqezFYMSNyd3khOyx6PkYhKiF1NUdLfnwiZmtefFBHPi5HPjJNMCUhL1ZQKm4zKmBHI0d1TH5xVEdTWGJHYStMIiNReTJkYHJ9cFguenx2N2dJVU4weXVm''@;'; put 'put ''KSs9bm5RMzV6JGNtWlMwK2svbldXfiNza3pwTVlAYFNzN2Mva0wlejJrS2hPVD90WD1yaVVfe1suMjMoPGJtNjY+Sl1gL0gvbXBHZj9zKGBQUFRqMT5DYmVfNj5rVlBxXmJyaFlQQSlkITBScG99bUdnSXlNc3lDTz0sUEFUZ1pNIlBxcU1acC5tPV1FcVlGaUE+WjBVWkhdLGs+ckI4KiIsbGYh''@;'; put 'put ''ekRFSChrPC5dKTZ8MztjNF98a1JOT2NYfTMwPkgwLiQ3MmBWPHY3PENAZXtfNn5VOkFIYV9LWilzNHs9VEZXJCkvfUtNWUV4ITtTcmpLZ0NQam5NeC5nUV9gbyNHeiM3e2lUdFFncnVXW0tBfWFuL1tiOFp1NnIlPD12dHlqUUhuWlN7PyZGNUdGeFEzUGpKe15YTVRTYU0pdTZpa0t3T1ZXPTQ/''@;'; put 'put ''dkZZNHNqNVBuR2JJUShHYzErYUg3dWMjRkNOKjVoNmY0Pk9fW2tZZWgkOERuIXRGSG80clBiLmVieUh9Mm59PlJ0QGs4eXkvb3xDUl1WbldpcmM4V3B4KkRBNT9Damo6I3gsNygzU2JGUX0+ZilmVWdEYUQhZjxiWXs+Pnp3V1JCPmBbQmAkKkRzKGF7NSkreXJKVlJFOFFLLilNbS95aTlQYkUu''@;'; put 'put ''PlhiZ3dqRjAiXUAzUCRCc3lBXUBKZH5kK3dwUjtoUFN2SXNVQGFzTjY5dSolUmo2Yjx8aGJlKWtbS2tUUS9fWl1MdD01dD83RF5zWjs7cV0mQj5mcEh3SDJlMytVQGlbRnZYRW5yQWpjZUo/UmBYWys2Nkwzc0Y0KEIhbUJFbCopZVI6b1h5T0paell5YkBHeUpsbDElYV48O31kPn5lMkY6KnMz''@;'; put 'put ''PXpkSUtvM2YsMiZJMzBpemxrK2Q5TjJ1W1V2Y1hmK25RKjhBWTVYOUdlSz12dCtJbzpnOUZuM2V2dzJIPy9hQVVPVFk0cDVCXTBUTFRmb3dffCZtMHBALHxZZ0NWMSwhQ3ckdTgpenB7ZS9IdT80VDhxZ2wyfjhYZ20hLyRUd0dxJH1+aiNfIiFYQG15XnY1b30kaWNJTy59THY1OSNvb3suJXYo''@;'; put 'put ''Kl0lX2ZzQDBkNDFvKio/S08hTm4mIVA3aFl5UXhETD0zSk54MzY5TCNTajdWOTE4PW1nZF9WSCQlWzwwWzUqJnE0KXdPJmpwKlAjWDZudzNiRWwrMUJAMFlbPkksT3FzMyYyMV5dMEpQbzUjTitrZCZVfTd9TUI4SEYlMXBCRG8mMjI6TGlbKjgzKCFTS3Yxfn1CaDJHOE1mWilvMl8xWlhaVnE3''@;'; put 'put ''WUxtazhoUGNFO15XVV1QY3VTS3g2VlFmRzIsaDBKa3U7OyJVJj11aTZZcF1uYGVEfkhrcnxnYG1ieS5jM0w/SnB4QEFEPVNtLFd6Ljg8WiljcSo9Wzo5UnVNb0N1SWBVTG42NE1wdyo+dm5+TW1Bd29bcClbbzgyazp4TjM/NVc7ajdERWpDfSp+NyVWKkkhSnpVc3RidnZMdFIobnhZRE83OSRl''@;'; put 'put ''R29kbEtJcVo6SyhJI1l3Uk88Y3tDdlhAX35+VGI7bVc9OEshKDRHU20lXWk8bj09LHRgfm1yejNKN1EyfEBhQiw6N0xPUk1GVGA8PTM4YzskTWlOb31HLD0sL15yW15eR0UkY1hPdEx2ekE6WFE7UGxIQUlCVVFvNCVkQyg4fW9Vd1t9NmtMW055IzVEI19VT0lMU01oWUk5NUI8TUI+M3IlXj4/''@;'; put 'put ''V1J4bl5wSTx4V2A4MHVlZSokQ2IjaSg5OUs2N3RwNzckI31UUk5WfWJOb09mJXkucXl0WTRnWmNveUtrV2pYNUVfQm9bfTlVSz5pXTtDSGx6XmhkVjgjJU40Rn5vKE5pVjNAc2g5eH5MUXAjS188UT92TURMYy5OZV1aUWxDaTo0amt1OTRJTyxmZTo1cU14MlRDdGV8MEx7TU5Hd0poKVtjUV93''@;'; put 'put ''fjgzaVJIVD97I0UxM3VSdX1uSl1pWm5RezpdZihzZlN6UlJjSUp3eWJZfHUsfWo+QGVtd2NPQl5SaXdeJHYiel5dYWwjY3A3az5lUDJKLGdQbjkxdCJDMXVZJW98TyFqNFJscDNALCs+TlAhPS5ZWkN8TFc3THxhJHhjZ0E/RUNMSm0zeGBMOV45XUFQUyguRVdCXjB0MCJ5Zm9bVDc6UV0pJDhJ''@;'; put 'put ''S31wQU0uJmhJb0ZyRCwjbm90I15yOmVLam08Q0lEal1uPFZEe3VoWz9fKiZ1MzdyLiZeLGdqPz1vfj8qeztLOVJTLFpVQDF5ZyVNeUpjdyI5OD0hTW5xXTBHOWZvWVI7aj5XK0lAVGhdVExdXkx7ZU5RdWUuTDtATClNYH45LChdaV1INUxUbX1aSmJkQ3tYYWNGUm4mT3lHQ1Zhby43SixeTiw+''@;'; put 'put ''ITp6RndAXn5uL00hKH4kRTtQZHVHV0xaXUwhOHkwaXtgSHVTQG9bTElMe2czPy87fj93Zk0+VHRrdUplWUJTMlAlenJlPVdhXzxTdDw5VmtONFFJQkJxJC9QMEI3LmdAXlRtOmZCQ1dZfS48YGp+S1soeFlVZTF0fD4kdGVrRVQ0flsmJjppJj4lRyFudnswcStfKlljdCVET1B6JiZgNz5mRT9v''@;'; put 'put ''c3IxayNEIzhTQmlbVnQ9Ly5EMHp5bV5EWzUmbklRTFZjLCRaS0hgVk1UcHI3cF9PUldsQHJBWXN5eVt9SyM1X2cxUT9GMW80ejdUNm9JU2ElU31GZX4yaSVueXg5RzRSTEYkPFk/eDo3cWhIeWhWOjgpVW9QRUM+VkA4X3c6dHJvO3BzTTdmOiR8MFgvIUwhUm4ufix+LjNUbHUqRU97Nkk6dyRA''@;'; put 'put ''NH0hVVlvQHNkZzQ8V0NFeDBtOC59KThPVCo5XzxWd1RJb3w/UEpyV3I6YkwwZyZlfUV7OlYhODZ0LzhRX3BsSy9hMk4zR0ozWE9Wd1l0QGZAXjYpdV9OSDVUUkMhdl5JWG1zMHhXN2g8WTFfaD4lOXI1O0hXTWAlal5oLiVUemVeLm5NPlImRDVndk4zYWtRaExbaFF3amRNblU9YSxLLkZdPUhx''@;'; put 'put ''dFp3ej80V3J7am0zVm1aWF4ufEltKSs9QiNxSmJtbXsublh7L2FqITk6bDIzX1ZZTjIwNGNuVFpJK3ppdEk4VHk3eWxrYElgTX1GJFRFU1BtMnRTYClRQVRbO3BObHN3VDpKLG5wNS5KbER8JHghTkQuVSIlbSxHSDNMOk94e3EiJSNGbnVMW2ZuTXNEQHtPQF4zJTl2cjpEbChTJGMyMWt4Kysh''@;'; put 'put ''YWRNUHhmWzQ/Qko5cUNgclJOIXkvdikpSSEhUW1eYk5iI3V6VE5ILG9HJFElJSpqLEJxTFFpIj0jSCNAPkFUM1BUek4lWFJnM3V5VHFbc2J8RVBJWCElMEB9N1glPUhuY2FBOjpkM1pVZjxAfk07X3RjMmpWNmM0Wmp3MX1db09MWV45e0ldXStiLGReVDtdZk1gZCFpIWAyLitLW2QxXSMySDxS''@;'; put 'put ''Xld5MTJbJj9gIVYleChnYmZ1aGdaXVtEOWRJSURZUWRiNThMJWQ0T2VPTXEzLDRzVz0oKTAhK3RVWmZyNDpdNm4jY3FDIV1vdSFTeWxBL09dPG1OUFVTKi8vNChsWFs3W0o4RSZyUDZsM2g2IndOW3BFRDtib2JxfGNxcW1wKEpbPzJffk01amBPeT1DVXxAZ2FlUnRLV0teaipzJURtZUpsS0Aj''@;'; put 'put ''K28iXUNXQ11fdktWeVJtYj5MYzpKOT9BOGFQYmx0Wmx3M0I6XzcmVTFqQTp5eSZlPGB8MjZ9ZV9lWFFCYzhGbVNGQ25yRiEsKyVBSGxDSyglM3xkZlpOZChLL2FxbzwhR0MzWFVAfUdLSzgjWUVISk9xIXNGd2B6c0IpUG81fC48IjY2Z0JZN2BXRlpmWG9PcyJzbj0+QC9tdkNTVzRZaiYsYnVg''@;'; put 'put ''WiwzVjdAW0RLOXJhTjNeZHlPTSNrS2hfOkwlZnhXQj55UUx3TUBHbjJzQiwxeFJ7KV1EXTVaTzYwVThOXyhUOXV8OkR3dXovXTRfaj5wRFErd29LQlhPbzIsXksrOG88REhxX3dLK1g6eGE4ZX0yMXVHZjQieDo5Rmh1dk4rKHJmXShGRktIZkU+W3BRRnN3ZnheT09tW1YjUGFyKExvJlpCPFd+''@;'; put 'put ''R2V9XnlLOkZ8NDZZKnFUZ19fXUgxL1I3PnVzXjM7NWJ2cTBBKTUkal40cDZAWnR9OHsrMHZxSjE0VyF2IXNxUXdEbil8NkM/WltiIiRLdXM6ay9IUkZYSzBtI2gxRDpmQllVazIiTkY8ZjVnWWsiSVJTcFgqNWYqN3BZTG9XLj9RPT15Yy4+S0xIOTlaOkpLeU9XclR9bzlCSkoyIksoekpCfSVh''@;'; put 'put ''O1hCVDFpbVJUTE1OdlJ+TGxPNkY3KUI5KngwIy4xWFdNJX5DNDtBb2ohKU1hRVJTKVptZW9rSDxzclRwayxdZlVPWF9XWGUhLjFkSn48TFtETjU0MHY8T11oV2xoJXRWLjU2IjZgPzdhcl95Slh0VkM7JCEkaitVcDxJWDhpMlR9PEh+RnZsOSRxZnB8IXkxSXNKRWledzJpIn0lKi8qKkUuKmN1''@;'; put 'put ''RzB7X3hGeFJNUTZLbGoyKVpnUX5qQlhXYTQxekh9NVhLUn5YNlJyY0pFdE1HQFpSLzNvemlMQEd5NSlgYC9QZGluWndbL2I/dzdQaEB3Z3xpP1JWXkpFKC45UEMkZEMhSzNwTDVsQjxKKnhEcVo6RitZTFtjem1lO3hmQWVeTlEhNXRDU2hxMGZrKEVmKnQ2XjJ1cFB7Ki5pcypaK0xRUjs0WVtJ''@;'; put 'put ''RCJfM1g0ak5hWy5PWGBhM1FuRjYzKXV6dV1bX14uO2kuSXpxaWlZPnp1Y1leWj1iUE8pdzpfP2U4Zz4xczgxeGRddlhlZCQ2XlRHfUVvc2Q4VDVNRUchdTpmdF80TyM6PlIhfT03VEhZW14+dHNXc3cueE1lVnErYG5fOHRBRzxrfDVwZFBYKEUuQ0o0RGNZUEo2dUoxYlVrcngxX31INVo2ZTQr''@;'; put 'put ''T2l5TH10dFMjIXZ+fWhiRkNtXWJnQG54ZUVkKlIzTDlbQHVGPCU8Ym51M1EueyEkQVRXKmoyNFMqK2ZQcGRiaHR6KlFPQ088cjdYLHR4aHpkYW1ufkJiZWQwSXtUfFdZVHpdLzpvMGg9Vzh5KUkmK343T2kvLzRudStnNFNSeyZYZiJgLkBOLzsqN3spd2s2cnJ9NiE2cyg1QFo0Qy45NmZHRTVn''@;'; put 'put ''alhwUiQ8MyJLNFhrP3A1fE0/XmNgXmI7XlgyaEhmeyteZ1ppWiU2XkdVIkB3ZFFGeW46SFdjaXJodFk3VFNFZTJYVFtocSIoYDxiZjc9NWx6aENlcn4qQyxsQ0puLiksQn05YzVINWVrQzZ3MF59PmBvK0wrWDx6ej9yK1BlNXMjVkh3ZF0qRHc4TnokR3A8als4dihYMDAvSClIcCtOUXltMj9l''@;'; put 'put ''ZDFMN1ZYWCNdMDVkbmhVWUlHSWZkUnxXPmdUM3BPYn5+bVQoUERmTTQxMDVibnc6eVdyLDpvIzw/eGE6Rig1OD5hbEtJVSl0ZyVuIXZTYk46Y0JRM25vT2BaQ1dqX2hyOFpsZnZwUTtCTCVhdyU1UCJwXn5WYDopakskUCZjeHlEZSFTajFDO0V1Nj8wKCJhdFg0djtGa2tiUkpbTndtWXVsJSRX''@;'; put 'put ''WGgsZDA7bl4/akcmSXNHelJoU1szPzJlJWYxUUBqc2t8QW4wJHFDcT9vKXx1byFKdHNQW2hnbTpsT1A3dUQmaFs1KFBrVChxZFBqKm09QVdCV1RyNS9RZUtnOCYlZm1NMXR+VnB5UylnbHQqUGNSemUrSl1Ad00jOTdiYkw7KU9GZVo0Rj9mL2dgRj8hQHheUD47Qls2RTFxKmZIJU1GY0cuOFUo''@;'; put 'put ''Xm9+NGZ8WCFMfn55VzJQRF0ob2VHSVpfSVlHMS8hPUxfYXs8WD1JO29kUXwiZFJ7LzRqVTMxW2BvS1pWSkFxK2MzSFNVN0c4ZDIhXTlLLHYiLj1lN2oqej1nSGBfWkZEJiteZCoqQGI0JDNbXmU9VnlqcndzVyhGfGpmSF40K2FhXXhMXTFaYV1RKnhfOGFKcCNtalNOQ15bd1NnQ3tXPVU/KjVD''@;'; put 'put ''KTt5LztmNF9LdEd8TXZdNkM5JkZXLHFKdzRYYCVCbWZmUSlYciozXjk5N3JpMXR8dGkqcjpyNVFUTkkpMSk3V00kT0heciw0OyM2Tz1wfVIlcXVxS0AjTEoqQ1U5JElHK15hfnBXfjVUenJddSVpPEooIWQhWkJAMFEsSzp2QzR0Z3ZXIzRrfCRfRDhyWVVTNTNfMXlAQTBqcn4xX2xKRHV9XkRX''@;'; put 'put ''WXFbKFpXKnU4eCguNT9AYkQpLkA8fWRYQ3ExMW9ZOzx0YSl1aG0oMnpEQCU+KTAqYyM4QFtEVWtXRUlJJjdeLlBYdDdLOyYqZldqWkwvQTBbSForb3cjemNULFc1XV1oTF1AJTZadD88dEgmYmE0WlQhNyl1Rl1gP0k/Iy5aTmZSd0BCVDBQWmAwSDpkPS5POXtna0hCUSlCM1o8fl0rTyl5LHRu''@;'; put 'put ''RHJYRFpOTHYoM0ovPm15TTdyTVosbVEhV2gjIj1BWilSWXgjNStPVCFoWTl1b1Y/JVd6fXFJd0pYL0N+Ont4K05PXUxlYCtpVCwkJEZvYiovOzBKR2Z4eiZsKlFDYVpZRF1bcypPUEslWDp8ZX09aD9pQmlsezE/R0xWWztqR2dWVVEwQ1ptKlduJiFAflM7LjxEQllZPG95VHRmPzQrImBjL3NI''@;'; put 'put ''SlZSKGcoaj02LF8iYiF+UCZwX1NMJH1WLk1PRD51Mml+dy5QcSUlJTxQWjttIV98WEIzd212aytQM2I7MXZ+OHNRLiQrK3dtajw7W0M4S0dAa0koWFN5UUBIYV45WUdne2g6RGZPVU02IkkuI0ZlfF9LZWI3UnkjcjZMPnJqYk8obUVzZStVbHYwRjJJSEMpfkdBamo2KF1OWCVULyRKQFVvRG52''@;'; put 'put ''fnlGLiI0YC8/WzpMbjUmTD1hVFE4RX0hYj9aYTYsInVHX0k3WnhZO3NtfXlMdzE2XX0pRmlaW2NmWVVRbWhtYi9rLjRVPEc3elJvWEsiR3hONmRwVE8wNj8xTjFhfjFLcSYxQlZiLG5lT1VVMFF+RXBpRHhJaTptPlskZ3hoSGhkbSxTVzRNeGIwJFk3NikudjRXcS5SdlFKLyM1NEpwTDZrPyhe''@;'; put 'put ''QDwzYEt+cmY6Q2VeKSIhL3w7Ulo5dFBCTEYvb1h6Lj9WIm5SNF05Szk2ZXReWSxHRW0ra31rYkN4IlZSPUQuTjh+Wm1SbVskfSxNRDNpR1pkMmNIMHpSSls5bGQuT2N6TTtlYWhXLDYheFlKQVZifTRuQSloMk9nSX0qczlTIj5sREpnaEZ6Lz5wM3Z9QiY7P3B9QUtKRSp6NHxCaExOMWRBejFN''@;'; put 'put ''OzEqWTw6WD0mMG9ERU5sKTh4PGluVEkwK2tAcz4vQ2F7PWtJXi5ZQ2ZRYElsMU16b21aVGMjb1FIcyk0dl1acTFtRnY5YyEualg6VUkjK01YNlF0cnxIZUl9KzdEPH1VXTFQViV4NGtqaX5xTUxYS19jWE53Vi5sYDlZPVo1OTZxXk5AUUUlKjJJRTBNS2AzWEouRD0yPnlnOyYiPzo2bjZ9e1hF''@;'; put 'put ''Z0BlRD1ocE5mRVhwe0ZvTlpqX3EkWCNTNUJHJDt1PUIsZV9mMEQ6aCIoTH5VeTJWaXRLOUs2dlVkQ35KX1BJUlJGW2hiKGFCLFElbWtDWkd7eWJnMnp4Rmp6XTEqXl9QT3c7Zi9sLEp5e3V5ZzVOM2lAUixib3A0TlklSypUcXZ8IjFkJSZjSlZ3QFNLXlsiVVlwdixXZE9MTl1PU3NdMWBWVUp2''@;'; put 'put ''fmoxXzRfVGgsWCw5dzc2bnNYOlUmXXJ5TzROKGklR0VGa3hBVz15Q2ptVFF3fFo3NyZTRTpyfjFoSi9pdEIlfVhpISRMeio2LzpNSzV+KnNpT0dqd3A+eygpZWpqc0laQCUmMSFmO2gxTlB1aUpIN2NZcGAiNjxuMzp+OWJJKG9yVUkxalNlZFVTenhUUGJOMmopSkJtZTwpbztVI2VnYShkPTZC''@;'; put 'put ''KFA1YFFXfDtjQktqOkkjMWBMXVJuZ0RWWjU9KG89ITZeTUNzK2ZETVYpPTZ2N19HPFM6e3oudz5kQk5YLnpHbmQ5VXM9MVZdPyxxRG9nckQhL1BIfSp1Y0tOe1BbTUJlfkI9bGklL1labDIrMCk5MjQ5WUdUclZ6e3d2amouTDc9ZXo9RFhnNyZ4Zm03eyQuVVpbZmhPeU5MTWluSCVeWFgienZs''@;'; put 'put ''VUluRiEjZGFwO2w4I0QjTTpaWCN8ZU0xdlskTzFvTjFeWnJmMlFiLCFwODhfZkZCTkc2c3lYSTJYSVM1MU06M2RDPy8zPTROK0ddVGZPJV57TFYrRTAmVSZ8UTpbRGcpdCVbYyE0U0ZPKFM6TWA5QH15SExeaHk1XyFXQzMyfEBSRHl6Sm1DNjNTazo9VERSNEEqLFk5Z1l7dU02TFV0Rjs+ZV5R''@;'; put 'put ''WVNqZ0w8Lik8UUovWmQwLzcuZl89N291dSRNQi5yQ3RTVT99KTBrYiZQXiopWktGPEhrNnpjT284SUlIRzxnQjxFNjwhckRgSVJ2TkxoVjBQU2tfYXo7TzZZWjAsIWp6Nj9pRmIhRFMsJVI4bUxga3tPYlhCfDNyOF9Dant3JGRUY1lQRlZeNjhVcEp7Oyo4MVpTNF85S2A/cCtIcTAjL2RIJkdD''@;'; put 'put ''X3wjdVFmdChUN0NjWnFsfD9mJTpnQV5oYnAyVjApPWNqNFd3cCt8ZVR7UX1LVzkvSVB6ZUgvKGJnem8vRzBQM2cyWD47SzpFT014aWglW0d8eDY7SyFNLHd7MnhDYHQ8RmJtZTQkZ3hZOEFZTzBuQiptL3hiYn58NyxsKTwjNyhgM3VvPFdvSlFjfkRJYi9PXTZyQiooRyQzITdfZDpSOHZNPnM5''@;'; put 'put ''bCFkKy9STlE4XTpITVNOWUI7VCJFJkZVVmI7fCsrdGhmfCtmXjZ6Q2g5WXxaN0xCLCE/NlBfJGZtdWs7RX4kWTs8JjkwNEZYMChLK0hZUCZfNEk2VCRWOnVfcXV+QjsyYy83MyJkdGptQS9hTk4uOUJed2RQPWVhIiV1WyZEM2g2eUNSM0p7eD1PX3N9RCk6WmJmNWlQXzRpMCh5OTtQNmlTM2d4''@;'; put 'put ''bXl+P3NRe3E4R0NEUHY8bjMlOmUoLitBZHZPPl5QL1VwX0ZkX3JIcUc0TG9iayJKQzIvak5AQzE1OU8sSHE5Q0EvM18lL21XbSlYTXNvRE5mc3kxNTJjbThMPVJPIlsxMjRZVj54USFLJHBtYFRRXyxpcUkzQXRLR1ZPbVFlXVBIOlhmbE83VEtkKEM6fWlVK1d4U25BNGNNcmEvMFhefV81Vl46''@;'; put 'put ''SkV8P0dyQW9idS9zeERZXilQJXcvbld9eSlCWFZLRCpQSTY0cVg2Ll1tbHlnd1ZhT00xNU8jM3Y6SmUuczElelE9ZX4hUHhqTmAxV19fYnpCTUU4WSlJPVFtUF0kIXw0VEY1Q0V5fGR+SX00UkNlJkpTa29zQ1N3TiNYU0BfKFAsJlI9OX4iT24oaig4QlVIeVJVdSVbPGNHOGQldkczW2I0UkxB''@;'; put 'put ''KiZQLEM3NW1eTzpLQXJMfkprO2J5fVduaHhRWkAzMF59WyFgXnAvJEs8e3o4WU5hdW8uJTU1OVhhY0xjblN2VzAybmBoR3VVLzRYKnkxWlpaSUYiYXAmUHxifFZwYVkxQkJaJmR8bE01JXUqJXRlZnhyVGtVemo0XTAqJG5CeWskX1hUbl0vIm5kMW1MJVRhTV5WQ0NjTCxsVSU5OncmU30vKSlp''@;'; put 'put ''ZXB4bj96ZyY6YmhMY0JqRD40I0ciJHk1ZVE4fFskeXw/QURjZVJmO2BVP35eel9abiordnt2Jjc2cntwOXZKcmg+RE5MTDVbcGosWH5sXl4peE8wbHRaKngyKVVuZDBVQjtpdDxvZCJZN0tgWzI0Q0RLYiV5dGw0LHwkIzEmfTUjcztZXjVPfkRYKGVSZFMlO0A6VmF1NmI3WilTQkxVfGVqdWtW''@;'; put 'put ''P14zXnlKK2xZbV5GMit+eWd4fXpYMmxJN3kkYHZMSHFeXnF8NTBiM3pjb0xaeVl1XlEmPVlHJV5FWHdMOStbYlZvOSVSeEhNcTxDSk4rTDRoKzR4PlBbZHlKWGByJVYzTUl3M15TPzNuTig/cz98cyZ8bHNrQ2lfPkl2fURscWA/JjJtNnVkO0llOXZJektvIXhjQVMiPW5iVEs2QnVfVTp0Vjhb''@;'; put 'put ''T2tvZ1V1SHk3ZDM+LHY9Y3ExZkwxL28vbVkqU3hFPXh1ezs8JU5Le3xdS3dtaT9PR0NAKF5mbzRdLC5RQEJie2hoMihxWjl7RjpYemIlOyM8UHVAODVRMmc7S29hLyUye156QyIvPFlScGR4Y3NOa1V1SUZQMjVCPXk6MCZIMjIwW0JqS0A0ITojPjhadGNqay9ySHUue2JBXXBIP3c9KWd3IWs7''@;'; put 'put ''a1FkKzNwZ31wIjBlImdFK20lTUZ5TEdgfGRPVTVvWGgwKDlRSzh8Ukl7Syh9Tn13QV4xRFMqez1LVyRudnBPenRMRF53fV1fOVdhekxiaU41ZkRvPnVWPFckVGJ3N10uTzw2IltyentZVX0wa1RVWiJeYjAjZkBhI1pkSlR8RXpQYT81Nm04KTR3YCtaS3s5JVJoUEovUnNzRm9nbDJ3M0JQdEJo''@;'; put 'put ''ZFo+VW1uZXRhSVdKQCNPO0FTPXUmOF9udXE/WWNLe1lEJnA2eDwoTS53SXVJL0BpX1s6UXEkNEUmMyo9ZVY1T0YvcnJjXnRKcHpOT3BlTEhlJVopaG5SYl1+PEUmXnJsNj4wd0c1JTY7O3tuSjNyO154eChuJDhmS1JCLyojPGNQcDtSZn0sd2BGSlslNDtnN2ElcHEqRXllfUQxUGNOWmUwXn5j''@;'; put 'put ''dV1FdSYqSmUsOiNmSSkvfjxRbXRya1pLNSYpdlJMRS5TZzVsbCV8d2E6MTdiMmpKWltQUXg7QWV4JCg2eCsrNEVefm9LNXg8W3lQJTNiLD4oI3s7ayNFZzk/MEY5ajA/clQhaElQODA5VVVYOyN1OH05bldZMl8pWUpVP34hPSkuO0pDZGtGT2EycE5zISgpJFpsQzl4QWBIXUBZVmMzMTJHYHtl''@;'; put 'put ''bEtJTmtQZFoySmQmMmtKejZPL3kiZituQD5vJXZqRHd4YHYvNkd2UEwxM2NpMDRkQl51bmJmLCV3Sk1fdFJIcCwxTGNtYnhMYjN0OV8rO2UzfXxATmh7SEJVPTx6Ozt0aEBneFFYRCw/bFFPM1VjLmppTjFvcDY6OUJIbWksd1JKYy5aVFo5Uyl+Rkx0W0VkSkFXd3p7PG56UH4oJXxjQ1RFUFt2''@;'; put 'put ''N3VtKzs0U1oqRHBBIURLMmUjLjQ7MXxKZUgqMH50XUF0bCEjc0RIQGdBVEJhWDp7P18jLll+c2VkXz8hWHRFIktONUcwNzdifjtUNFcqUytRfWB3WUM9Mm8hYTlzbnglI1E1L304P3I6U0gia0NINVZsLG9JVCxJMl1sS0wrTCVEaGooejNLMSVsOnREcnxYZ1Z8WzMxQF8iJUY1P1kxOHtISVYj''@;'; put 'put ''STk3KGgjREhGfU8ldX4rJD17Z1defnR8OElydjtkU0liNCY1QywhdzhKL25pLDEkTFArUzUqeypUO3wwQDdibXswQmFdL2xdK2Rda1VJdUQ0bHZXO0JHTyp6ei9AVDs/Y3N+Z3kxRlRsWXdXO2tFUj0vN2VFV2BkeHIqQmZ3YTk+fXptUX07YEZmPFZpImdLKV0xdSw4RGooPShGLH49YkVAIi5g''@;'; put 'put ''ezkiOVpdfUEjayRgXzpCTDtvdXk9dSlnLnAyQ0koajo4emg/cV1uZjh4V1B6TypScCZDZkhUKVJJdGtkNFF7cGB1UD8+OEU7O2F5TGxtYEdlUT9mSn1mODxFQFF8diUhUkpEIXtkMXxuT2BMT1lrLmFyJXx3RGhac2UkJjp+dG4hTmVGK21KOzcmLz1CW0IqKlZsZlR9elhVIjBbZWUwZ1FzMiI+''@;'; put 'put ''YXg0N3tkSCpaSSlRQEhGdWNBOVptcy85SCl6PFZAWip7WTM7e0NWbDJgUy9BbWBUQ0l5T2g8el16XUV0KGUwXlpSc1ZpQip9QkNnaSMpLnU4NHo7Zj83YXI9JHZXMX5XSDFMUW1nbj5oVXx+eVt4eEZoWn09UyZOOXMiKzxiVF4xMERSIyF9QiszejBuZEM+Umk5NWtANG9wW0Y6Plh5cmY2KFJz''@;'; put 'put ''UlJ1JkdAUEdOWUdMU3lmPjA1R3QyWDd3VjZ9WHhzdUJxN1QwWDxqMUF4SGJSaTFbdllbRlNaNCRNdWp8LzFQXURPXSklPU9oP2ghb0w/bC4zeTNgZy9pe1AseTgkUlVeViQ7Uk4oXnl2LnFbJHNPb0hjaVVQMiZ+YlNeeGFhYlhkZ3p+Y206PCRaWXM+JStjIXBEO2JQSSFqS0lHSVVpMkQhPWZ6''@;'; put 'put ''ZUMpQlRXaDQ9WnlgZj5vK1Q1YzVIVFMoIzg0eWF0eyZqJmtaM2k0XWkiUEs8IzVGekBvMHNmQjVXW3xtL0VncXhAWitAaXVIanJGfm9hXnJoNiQken43dzw0OER7bWpzKilnYXtKIWpdJnVhP3t1UCk+T2B5ejkuQzBhWDlhKEkrQXg9VD9NUks9S2UmczdiS1dhdUdqZzJpQWZmcjJnRFs/QmJF''@;'; put 'put ''bTVaOkRMUSwyRz9nbjhmcGE4OkByUXJeMj1MOVQyJmIhTzI+UyhMQ2RkfUBSa0NLSzZfZnlGYjNqQD9RKVIrI2FRciZBKHo8QmAjM2JeUnVZaTU5cjBkcF91XjU0SGpBTlU2PUsoJW8vKiw3LGN9dE1kYEZPNkl1RUFWNEdmN3hKc2ZxWyNlPXIjd0dnLiZgUThdRHA1bW1Sezl1LlRYb2ZyIlU3''@;'; put 'put ''dyUlbW9eaGdXJkhXa0xgLlV9JDpxKClFNHExZW96ajIjdzVSUHhsKCJEJWlIRC4ieXVeWHAoYVQialFKbUJAb101b0x6KTYyK1gpJkUhOFhCd0UmSmxbK3BVKCRbT3YqXV5XSWVmcyVZe01RVW5qejcqQitKQmJmezY7NUJZIlhRI2p3VilDd2BYIjszOS8mR3gxTTIzSzwwW25eKDUxeEJKXl1H''@;'; put 'put ''ITt9bTJefHhSI217YUpsOmhJRXEiSUEpNVNpVElmNXBjRlFKaFg7Om99WFpNJDlVYSkraC57WU0qcDVSMCNuWFlXKVI7LDVaVGJZMS5hYVErdGRRU2VZPGwhK0goaW9AWDhIVT92bDluTkN5P3s7c1tRLCl8JiZ5SE5PV2IkamU7cm5uNTg4c0x9IUlOQiZeJV5TYX1uMnxDSU9LPE89b0NbeXEw''@;'; put 'put ''JEQ7YUc9an5GZU56RSwwQXhtVlFxaCVWQ2B9JjtVQVMkI0J3ZmB7cz8hSUhObyZVUmVSPEtEKiVRb3pJYzdgUl80KkBQdDt4bUcpNXlvUWd2I3xrQG09RDVnQVN7ZVRRcDtHOSgySyUuaEJbZGQqITVeIzA3I0glVDFjJmNgZ00uaHkyKlZbdzkjZCM8PHhLeWk9ZnB7WmYvLiREbkdxPVtCQDdv''@;'; put 'put ''fjJ0Sj5leCM3fEokaW1iREc+cSIwZkVmLHUwPj0pYWRPOS8ma21NTGBNWyI3KGt+KTdWaiIseUs4ZmM9eGF3aUokXj1mLypoOSNPWiNgPVNeV3YySH5Od09HPUpWREM9byMrTSs2Y3goVVkuVGhZS3pFZ3lYPHUhfWIxIio+dF9fUFk2Q0ApfVpWJjBDZmMoJGFkWmN0M3lrPztKSGp4OE9ud2dh''@;'; put 'put ''SW51cmJPRmVrdVE8SCJscjMhMnFjU3pgTlRudz1GT0NkKTtLVl9uSWJHRUA/NThQYz9nUF17VWBycHE1aHxGJWA0akhWTSpZPkV4XTt+c3JlX0BeaVchNjMrZUBsTik0b3l3V0x7b1h3WmchWUNFZVE4IyEpfV5ILm85QVlsYDFxc1hLV2M8T1ZzVykoWnpMNEUsWG9YYnA1MlBlPlpYSXdWQmxS''@;'; put 'put ''cnVJQDgrfndIN3luPDc9ekojY0Nda2NJay9xLjZFLmI/fDs7WD4mVyE7aT5ZMTJvL3s4UENAWHFvMFhaQT9MM2cmc000d1NtXTtWLHI5bEJ6JHN+dVNFVFImRHBsOFQ9MVNZLihKbTtGNjMmKXkzImtTPlJHVkVxcXZVJlNiSH5XZUNbaV43PzVSdHZtZzNZWGs9WWJIdHZhYmpIYFVOYS9WJTUw''@;'; put 'put ''Vj9DKSFAOFlSKk9jYl5nb21da3RdMGx4M3EvJWtEdnVdfCtxeWBTMFdmOnR1c3ZjbGxoLi8vNFl3bWc9ensqXnJrX3YqITdueVRtPnQlMFZaYWBCRDohfSpuLGhxYm4jfCNKSlRxJEwpW2NFS1YsYEU6eFtsN3toMTd4fWQlKVMiejA4WFsjWkp7MmNqPGFKb0xMU35EOilUKCZJSmgwa0xSLCtt''@;'; put 'put ''Pj8rfFY8SWdaRE8+OlJPPno5N3x0WlY6WW5eRnp6aX1eUD9VTC8xZERqZSZKZFM0LE8zT013blc1Q0ssSGdvWFZTPWZ8NFMsXSV7c25EdG00PmojPUVqZzF5NiMjUldRemVTJVdteGQhUyRlRExMKkp7KShtb1pEI3FsLHF5b0E2TVN9UCFjYy9ZOGpdUntJLnNAM1tWOVJ+fCRUfkQoSV5wLGsi''@;'; put 'put ''NzpjfTwzZkcsPVFGdUVrRXVIRCpobXJ5ViZkU3VYaFE5NXI7I0BlMWRmY3xia0VjZn1KYXt0TSVfRHYqOClOeTMldjQoT2dAb3M+SHFGKGh0Ll1FRChYMCtSV2tPaFdBI2o+LC9PXXp9PTxmX1lgemM6WUQxVElWRy45YTdFUzd4SGs0fVRsSlVVTXtAIT9JPC5ldm9mSCo5YnpYUnxSczVkemZB''@;'; put 'put ''TmxoW1YsOnpuSy8ycnF1M1o/LiRzSmMuZGQuNT1lXjFuSUVLR1NldlBPcTMsdXBeZGE1dlhfZSI2XlomIy98by5nV3pOUXBBMXBmJExfeDVIYmEyPGhWJXY9MXlTR20zJUszNnE1aGYrVTFBa24jPSMlPEhAZ15qJHs/e05JODUjTzgwRFdaSi9DTjFhYD4/ZjczVHpgNVNtR3NQYz4yNlgzKz0u''@;'; put 'put ''am1qaVR1VlZ+P2o5QCRIfjtLWFFkQ01EbVpbfGVKeEJgIjBwc2Q7bVcqbylUJHo4RSkpTk5Wc2BRRCZkYip6U0pPI3pzP3ttfUR8SnpaRDYjWntuYWBNKFEzXXd+TlBoYXd3Vi9nJW0semYleX1vIWNJe2k/VFN9JmRMVGk0ZE5JNDl0ZyYpVy9gNTY4ISJPKkUqL353REVhdFtIOXNQWypFdWRQ''@;'; put 'put ''L1VgZihKcW8kNVEiaThmKzQvfnpdZ3wzXzRZenxqNkxMWm95T2RLPVdHKj8kIyhAfS8hTnVAbERFMzFDVUkxQSx5JmhUJXc8KCpqS1FgZCFrMHF6MVQ2OFpWXXlHKj9ER1FbVCImemc9N2peeT9tO2B4eDA7O0tpWClZT3pebVNFbDtfMTk8ZGwldUhnSiZ7JSRFPTY3Sz9dJmxKbGZadVM1ck1O''@;'; put 'put ''cU96eEBRJVUzOWQ0N0Q8dW1KJFZVNn4pcG0zR086T0A7OERAaW1UXnE+KUdiUColKGJmPEE2cT87NThrc19fPkZWK3FTZWVYKnt1dC9qe3slLmU5NEFqZGZBMHtXWF56O09uYzNeVjhTKGM8fVZrMkg9JGRzdS4rUWo+azdCNmVsY3VfQlNmdzZIfWxtKTchRU9ZMG0yOkI7I18ofFVle2dMP2M9''@;'; put 'put ''bHZScmA2aT5oLmkwUjkkV013WmZhXXU0Y200UTY5THIuTVJWOWZxaVFfPVk1SkI0cX5qbG02ejpHVGpFI05sVCYhWDI9eE1ZenA5O1Qzbl1QVyJFOEcsaW1OKTN0dXE6QlFRdj4xL0lAZkFgOzQ5VCkwQkhYamtIejZmRjducnM/OGsqekRiVjVMQ3kld0l3anE/W3g7ciY3KXU+e3xNVCU9eSlg''@;'; put 'put ''WzsqcnxbcFEqZT44Y2xwa2JxRCprVmI/UWI7PU5kdTtYXXRJb1FtRyx+a0hAVUZ4PkBGZGRjUSw2aXFsb2s7MVQzRStBWjxsbVsidzspRGdpZW1TRztUUHVBTEVGP2pPVnZwMHAjVjZRQDV0bnxbVzJxZ3g/MVhTaCFBU3plcCplQ3syeygkQXdNTF5WIi5maixOUy5bczo3cSV6PXEueDZMekIv''@;'; put 'put ''cUZhITEiVWJQe1Y8V2ApWy9nfCZ8KVlhOU8zL0g1MUNKW1ZAaF4mZ0R3OC5RUTM8JGAvVz43dVMzakdfUSZCZkdONFNxVH18eW1IRWRdLntEcTtYOi9+XjZ0PHwrSiQ1KkRaOFdeT3lOYXV1fV44c3w8X1hVc3BpVjBTazBWM1BLdF54XyQ8Xi9LPkEzTUhUK3VOV0o5SCIuNUtdWS9HOypuSnM9''@;'; put 'put ''VEovKlNnS0ZwfVptOylsTGNhTyk2VTxAZTlvOTQsc2Y3YX4yWGIpZHFjZlVtczRdc18oK1B8OiJ6RE1lOGdYTjJ1PT45fXFXU0QiYWd0OXdYNTNoPXI5cCx5R1ErO2RwZyliP2RnZT50em9SKTFhTEovV3xeOEBucyZ+dDxGS14uQCUpTH5gRHBqYDFTXXxwR2csNjhuPSVEW31AW19qdE8+bXV4''@;'; put 'put ''e3s6NHVzKUpue1tScF1TbDg1bTpLdE1PTUkjR3Z8LmdlaGBsZTtNY11kS3IyOFlxQDhjIixyKVJANF5TX3VmPEtkRWV3SXtrUHFFfT5fT0xEOlozJWZCbGt1ZV1GOjJuYyU8eT5vaFFjZCxeMEMuZkpXWmpbNF4yOnMxPmA9VWAkZ09FdFdsQzJ9UDBuSDlRSitHZjw+PjZ2RzIyKnlLVXNXYDNZ''@;'; put 'put ''SDlvKndHVUtZUkRpeissPSpFbG5gN3FTbzRwZUNHYzNEK3FdSyZAcjtaKzE8VVNXUVI1P2owcVZ5MjU3TT4+RjMkQCJ9KjBPbX1uQCJGU0pALFsueFc0dWpaP2JDdlhjfHZ6fm51eWklMFFlMGp5LEMuJmxZOHZpemlXbiVlSDtpYmpeUmQmZk9UZThYbiVZL3Y8dUdIQjgyODR1PHYvSCZpZ2th''@;'; put 'put ''Qj9+UllzZFFMczM6SERDMW9bKGxpTHg+M110QkdRMGtKSmN0QlQhQTFIM2VHVkUjXTw+bSs6OGkzXXp5ZDVOXkksU25bPkpCXThRUX5veGZ7XlhiRC5FIzNgS3N1cndBImE8Smw0YS5XVTs1eVBXQDl6aDdYai5ybmxwWWpeKihQYiM7eVpnYndDO2c0YEQ/eFtGNm1+aWVxOHF9bX1tciMvS3hs''@;'; put 'put ''SzlVWF5FUCI2NSp3WzA7QjtdXlBxQzZQVV4qQGlqUjpDJjMya29TaD1ZfSI9bDMreWRvb3pjMjMqRlBQNDg5ZTppJGR5fixHY29lfUk0PFA2QXhoX0YsTkUzM3crTCpBKUQyRTJHVDh6a3poR3hsaUM2SFdGVU1vaEVeVkNQJkUqYGpvQSR7XThzJD13fUMlLGIxM1diQjJbLD04Z285K3dmQW9V''@;'; put 'put ''YFUwZVhgOEkhWXkyYWQmc35mXndgTWxmbzAwI1NxUXJ0ME9XVE1QSHhMUTE8aW5qTzNrMz1IJEVUTXVlTzZrUCp4USI/e1EhR3pKSGdbI102VW0qMDAySjsoLlIlJnladn01b2cmc2JbVHwuc3lUMV1FfDM3eSRzRipgSiw1UUdSemtgJndGP3cuclQocWssZDM4b15Ie1NlZlYxISpCOkQkL0NT''@;'; put 'put ''d0pZXTdnd0QjZjgrS3lsLnczI3JvIUI0VE9xPnFiLFt2YXN1UndBLnBNd0RNNSxAPXs9OE88VWo1XnpzVTpVb11gO2MiZEJCSUVCfG0yeHF4QDc8fC9LcnA2WkkhZSgzTlBdJWVVaURiL1ZlYX1ONUBTU1hFJnh5T0dxaktrRFlAVl5MUz17W2FeVEBEfkxtaVlKMSJSeSE8WypoUUdpUlVmQC81''@;'; put 'put ''SmtCZXB6RmU7Wj9uK2EzJDpOJGQ4cENydnIjKUJtaVolZj5LJU0kIyg8WEhMNSZSa11gIktvOkh+TWA8TjZ8KUZbfVdeVkw7ZFJJUVl8dkVZcWMmbThMJmVhfj1RdVRCSDQrRCVMIm5SQEx5OzNSIyZ3RHEoc3Y/KkFocj95U2EhSUJteFVVanohQm8rZ0N1fk1kUWB1YihnPz0yWWJMTy8/L1Qj''@;'; put 'put ''XW1gUnguUHtpLH49TS5XN2VqUzRTbnFMMSV5IVBQVU5UNSNPNTlVaTtZRGhxZCJrSlpfQjkvPFZrQ249bms/fnBDNmcvKm1RSztGJCMmZEdMZV5ae1IjcD8/UjJRPTZvJWhLRCJ5P3UyLiQkI0F6cmU1XUpgfHV0Nnp3cioqWCkmMihYJStmVTU7SG9WMz49KGhHPyU2RW0lfXkjfD8ja0NBR2ZD''@;'; put 'put ''c2UoLjJNd0RXaEIsSHMkKzFlcEcuUC4kTzk4bFouJiFJcyZgMCNYS3B9OioibWZBdilZVHJfJlIrdllZVGJSMnBndXw3dXYqS2hNe0ApZUpCaDhDKVtab28oPiplfDFpMTFAVGYuY29MZU5+aWoqd0taZ3F0dmArL2V1ZHQrcix1ZlFZKk8sOE0vWnwofjwmaSY0M1phNUcqenlsO34pZFVSSmk5''@;'; put 'put ''KFJedV14azoxYlsxMlJ9akYzbTpWZ28vcDZ2USpCd3d0Zz86VUImckVvRUZPe0tLUDAvN2F3IS5nOX1va1dLe2llcTduNXlMbjxYWGYvdUc/RS8oKjs9Jm8+aDxjbHJ3eilmVERKVV1KKEkzc3UlTTohRiNTR0tQQz4mSVUyem45Kzk9OzQjaiJgRG5SXTJieEgxWXdgciomQmtaPTFYOGgmVzJr''@;'; put 'put ''ITwsNEB3e0taKl1WU0N+QyZ7Q01sfUlZUSg7ZmAvOShIYmA3VktgPkk0RXNRX2FNc1QrK2dnJDtMMi9rWncyTzlicSwqWzA9Rml5WT9HVEhfY3M/eDQ5MDtpNlssOm5pa2tUOlQ/Zmc3XmApVltwYG16djhWTTFMXmY6Tl1NZ345dCVdKkE7TW0hdyhOXUU5ZiFvd2ElKD1bMklpaVc+X1FQTUc1''@;'; put 'put ''bXo9a1VjWHF3NTk/WVJyPHopTiFxKyhPc1opWEs4SEc4JlFZUzdfLFtAPnxYfltDTXA8PkhWNDI8WF1nMEs9ZGZxcyFgYyY9Q3I/fm5KfWEmfmpxe0RqYU5oemFTeShrNnxrRiZZIWQyKE9HPjMwVyFIOlYwRWo9XShEanskKWJRZH1CZDlgNkRPXkdTNHg0b0pKJElzeE4mPl1ZLltQTEcsOCZY''@;'; put 'put ''OzRHI0ZiTWw4OD5VVHBEKEQyb1Jpa1F8Nnc7VGRbKFksWHBTKGA3VF4kQCtSNHorX0ZVY1BfTkNmIjxfejRJMGVMb1VwWTh2IzlJV2pgUTQ9WjoiXTI/cDwoITwxbEZAOWNmPUtBJCFkKV53NzVZbmdEfWhsQ0xrVVdaaEdxWE51cCU/WlIuPVtMN2prfTs+QUlHI2JEcnUvKGgyekp0fEY0Rk5w''@;'; put 'put ''RiFXT3lmKjo/Z0NiPW1mIUYxQUlPXzBGO2BZZmpuMnMocjZ0OjNDNTxxZ0pZPGlHcD59X05JSDBsWyQ3WTBlaSszJWgyKnV3OmhnVz97cklSdUUzUEQ4eXBaOjtmcFpNYXg2anZKVDhWT1M4YXpQRHZAZXJ9e1JhImsrKC4xciw5PWtHWGVzIUVeczFWLHluZX1YVWp8ZCQ7KStnNlFVK3tVMFZu''@;'; put 'put ''I0p4XUkzYGk2YmhPa2J0a1UhTnFaU0A9PihjeklUXUZXPyFYcXpgfmJJY1pnTzBTMF4jRHBqNXRZKkI2ai49InFEIUs4KmglVUdpPiUpZCJXdCZ8RyokQjJmXk47RWM6cWdUIl5eXnxPW0ZeNUh7Pk89RSNkaD5wR1hKQnRZM01oamNFQE9reDxVWD0ua0x5MUBQRSV6ayVTOlh1a3ZecFlSOHMh''@;'; put 'put ''SFd2dVteRyVtVG1ZT0o4XlF6cnhULyJUbVQsPHRmc2R+dz4oN0pmZUZ3VyElT1YhWChkeCwwNDJTaCl3bns3WU4xcjVvY0JzY3VIPj12Vl03OD43YyhFRyFAUEZxZyYoZ2tWXX1SSzlmKH5wSkdLQXg0Pm07U3wwJUUicFtNcT82QlJxUSUhWFRZYXRoayZJP1tTPFgvJG1NeGBIRm5LP0ttI3Z9''@;'; put 'put ''SDxfVSF1Qj1IeW5MXXZzNXYmM21IWzJ3WXolSCNKaUhDWXksTE9IVjFlZH1JPEs2SG5yNjRSJihhO2I6OHo0Y3x3OmN8Img8d29KaXIzJDYoW1hvfWY8TVc1UH5FdmIqM15hTWNKdSldK29bVCU7PWdsJiVdV3ZTT01lRH48NktKQ3RiL3ltbX1LZmF2Qmc/dlg9ZTFDPD5TS2pEIzN5ZEt1NWsm''@;'; put 'put ''LCxFbn0/Wkcuan11S35xLCtYez1TaVA/SWoqUj5SK24wYUE9IVI4cSxVK3NrTjplKFRJcV5PKUU9VV95ZmVMJVVWbmZKWU9zUSJfcmtMfD8rWiNEeFUiZTR5PXVPTHtJRWZvMDVbfG5lMnV1dHhedmlWU1IlQ0xgOUJ2OTBPXy4/T2ltNVV+ZmVwP0tob1piMUo3ZkA/P1J4czo0WjBvZSk8P2xa''@;'; put 'put ''Kn50Q0wpa3hmXS5NMmV+aSI3dkFfTmNWbT4hak4qX2xSYWtoW1hoRD9mL3ZHVComdzFOYHxJZltYKUV4NFBTTHVaN15jeVdKeSxhJVRWe0hDfFRPIXtdPk1Pc0opPElKa0V1TFh2VX5EbHFNMXMxeTxHcmQ4a3txUlgpfVc0UWZrLjczSUQoZU9TRlk1PnF3MlJ9UzlwJGo7InQpRU8/Wm5ZYDE+''@;'; put 'put ''ZSJHJmZ0THBzbE5CMSpeaHtTbyNgUFsvek16SSNtd11aekZVWVBbO2gwPmk/dj5TX3VbNyYoRClwZX52PX1kaGF5NmNkelRqcHRDOSUqQ2RqUDJ8e2RsZUljRUVbM2lYO1Q5dk9YNDByI2hZMFhtPVEvMjIxaWh3NEk1amVzOCE/YXdTfEg2KDB3bC5ITjxNbXgrRVtBbzc/LnRyTDB8aWkkPV5q''@;'; put 'put ''YUt7dF45dD9aaFVAUmMya2BiZV9BPWE+OiVkUDtwbS8oOF9rZ3BiTmJWSTYqe1VGc0ExQS85QiE2QU54PH1sdCpXVDFXYixYY19nfkkoJVVMVFF4cG95TixyT1FWVSosdllfS1dubEFuaStnMU1NMzsoI19ZOkB9PFlKfn4/RGlbNXY4TVtqRTJRcCFgQFFFVGAyan5mQHgrVlY6PWJGW3xWOCs8''@;'; put 'put ''eCFTSXhWe30jUltgfnRdeEE/NX1bZDVWfGs4SGxrYUFERFc9WjE0JT0/K2E4XVoycmVwJnBmKlZpJl5TMWF2MikiRXpKbEAudWsrSH58W2d+fW9BMm1oQ2FScTYkXkIuejp3XypFOTx2I3xkPU1FK1JlUlQvQyRqL2QpUVpjRXE2MkA/Z0pzPDd4MzpWYnJZUEQpdFolPHcoTjwlKkVgU3phLio7''@;'; put 'put ''emNWOGxsajVae3FvQW1KQWlYIk5KRX58TVYhO3RrUihROldQeHAoZmc+a3lZTFF4OTpCYTNTMihEWmlIUlgvP29XdSNGMypKSEg7NUB0JWhIWmk6U3kpP1NdLDlOW3JEU2EuIXUqITFISVFpJW1pVyUheTBwIlNQZTgyOGk6OCJITD4iXVVwSUBBYH5MeCtFQFdrVV9lNyNCfF1BUyJkWSpSVXRv''@;'; put 'put ''XjhgWiM6NXdVOysiPiUzTVVjSz90bWl1JXlaJCxoS2h+UUcvOj1fKE1mKFFnJiRUUWpMeG5fe05ge357O3d2RnE6JWN5NGgkNHRqJkJXdEwvJDlUQDJgXWdjJEF4UmdIaSV2MVVtVHxSaXBJc255QCVjV2JyL0RiWjxmZCVgeFM0WDFxNj9EXm1+eGYqI2N2IkZJcC5DfE8pW2B4fGM6NV1XJDw6''@;'; put 'put ''UHkmYFNaVlQodGwoI2ddYTZfYGdyN1U4XnBnayE8VTJqMisoLlBdTWRRRW1AWG0se0g6Q31KVGFpTWNOWyM7Tl0oX3xeNTJTezdXYyFAUzx0KTUwZiw5IlRMcWwjS3kyTEQ9Z0YiQl1BZ31aV0w8VlEyX3hQSmNsVER+LHg8N2JyVHMlVltrdnlMXXtYUlNURyl8fkJbWGYhS0w7QnRQUjA4Vysq''@;'; put 'put ''Kj4zYzZAJEhPci5ZaS5Gb2luVVoma0NqVTRBQm9dQXdAK1kuO3FaSSxvPHY1RjtrJixMSDdEI0lbTGlzIjlEcEskYUtBOVpWW1NdT1g0U340dVBuKCZaNlkwNE8wanVGWnVHPl5AL14zbjpbdV4iLyFKZ0hFcyljXTAkdig5XSEuM2E7dDRhOzU0b3VrRmVbdkJTYW5vM0c5e0NwMzI0PV5HXT1I''@;'; put 'put ''PyFOdV5RdXMzI1s8IVEkVl10Sm4kJUBTPT5VJG8/VSVgZWxRIyNOaVtrLiJ8fkI7NHQibS8oV208fTtnWElqOHA0cywjNjsqNnpMYmJRbyhAS0A8XX5IVGdkd0UsQWFKKF1iJmEiYW8zWy88Q0lxSFkzNSRgdnkpV35eIjxmPjVzSmlVaEMlJkp5QnlHVmh+Jl5kV0NOTXtyZyNoJWM0fS50KTkz''@;'; put 'put ''b3BBfXhwN05dQHA0QH1KTCxPOk8sOkJmOnh8JjtEM01TKz16bzk3UXFtcilUJW5HLCJYclhRQFhIRjF9bzhhKiVMPkxZP192YUl4UkJgP3JpOFc+MTYkVHI4I2k5STc4c34xWDZaTlFsJHRIbWZDV09dPlNtTjMuMX1AN15Ve3RlWX42RitBX1tYdDM9aTM5NVpJfE1KbmlCMEI4ST9jZ0FbeEgj''@;'; put 'put ''XU07RjR5bXhWSHNnZVhpSk1uY3cxU15jOH5LemxzTGpHIVVfPVFMR3ZONSp7b3p7LzJqans9Z192Z2UzLndLaCosLHhlYnB6ez04aCMpeSxXeFZmRGF8WHpkbDtIV0M9PnJiMiJ+KEUqQlE7dDpVSil1PT1Cc1l9QG5aeFdIIX1JNFJaQllFTCl9UTpGKnRtISl5NExiUi80KVhzSTo0e3R2RFkh''@;'; put 'put ''XzJHYWxVcSttZTMhImw2Uz5oaD04WGgjKEYvaCEhNXhUemxfa0V3SEZOLl9QUHEvaWcuTHlEMDomQzh1fihPY0pWLExzfkpId2N9QTYoXjlyUG9JW0Y3VTplaSNze089ZFgpKylDXXVKYHVHbFoyOF12XUZAV2R2Qj9jWXdEV2NnTEdhSW91I2Y4UiglM15TMWF2OmFrN3QlLFMwSlcqXXExdTsr''@;'; put 'put ''LElyb2AwXlpsR3lGI1hOeSk+fCNzez8kbF4lc2ZhLG5LS0ZTVHYuSyNtUmR6d080Nno1VzpIfVQubkpoJmhXZShgekIsODIqNzJGJGtNM3d6NHsrM0I4IXVOMiUobGVyXS8hZkZ2TmhHZFEhd24zIT92ZzEsI3VxPVkxfHxqMVcrWCtEVnVyT3tna1BYKz07Q3x8OHp7fX5gc35YI1o2fjVILD4j''@;'; put 'put ''L0xERyEkcFpdTnYkOyZgUWQ9RjY1W0xVZ3huaGsyOXtZL3l3YzYufE49S3EvZSptVUopI1s/I3FQSGtgKUk3ISRFZXd9ZW8mMSlUYDJqIUlQJkMmPF5gJmVOKEZEPl97VTsxMzdVKXF+MFcmakV9JCQyczsuQi8qUWROY2Q9ZzUwMEtxUFNFXjF3eX55ODQsVX5pZm1zejVMam1xSzQuXT8zQ2ov''@;'; put 'put ''Szo1emxFbjVVa3hAV1thU3FHdFJySm0uWUVpPz1MPGdvPVtKVSlAQTJRMkcuUyV1ajNHak5ydToqJS5XJXt8fURkPG05LD14MGM7MzZ9LF8/OU55W0g5RiNLLllvcjNJPVZqQHBZJCU0OlJzLyp9MSxZKFYlZ3liJnhSd0s5aSQyblBXMXRMJTxlU3ZmaFlucEsrV1ZUcHtXdioveDpCa2JvSDlV''@;'; put 'put ''TWNUISN8MS9venUvLClsJGEqIUtHYHRIVSYqMW8wVTE1R0hbIlYydlJqKFl5Jj9XViNQK0RuUyRbWXUxa2AyXjZYa29fVmVTfWA2MkhLK2RIO0N0amB2RVtnWW1XJCNPN2JsdldaOTZ8PFs/TVJCXTB5TT1yejJSeH44dzJpWjExdkQ7XTEpI2hUOWkkbzs6dS9MOUVHRUhZSDF0L0koRnNBKDJC''@;'; put 'put ''WngyaSRRdT8kPigkZTJiI115Lk07YzdNWmZhNT5mdk9kYG89OjJAQTd0JW84RiJRZSFaTXBfcG9YP3JbfF5AKSFgdjE5cnkkZXl3I21NMXdUfURwQEBMUko9KylaMz1+QysqZXRxcWMuT1V4Ul5bYSliK10uez90c2w9NzhtJmV5YU1+XyM0UW02TTMqLERRV3p5Q1BuLEp1dUg6QDV8TXE7fDQ+''@;'; put 'put ''MDx6bStYXl5XU212Wz9GO3JtbVhxc05nMHZ9S0NBJSw8XX5gRyVub1swbyx+YjMrKDxjZ25hYl05b2cvUUFLNlVLeCwrfDVVckxAUl4qXnRTOFI1UXBZNCY4Ii9TZzM9dEg0K2B9PSNCfStlV0w0XX1yOWtEfH4qYz1hdjIrUTM7OSRYYnBPTyVMRT9edCZ3XXB4LEE3YnYzanZSXSNBe3RjY0hj''@;'; put 'put ''JkB1bnZSakIhe3AiTGBTOFlqWyIvTl10RWJKR3M3aCxAYSNOOnRWLngxUEVwUCFtYHYwOkJbOCFpT0Z4ZHQzPUx3b0E3ST1VVU9fbG45NmdAVlQkM10lIm0lK2tUflQ0SiwlVlRYbWl6eCxJIy4jPFZyTDZ6RT1wVHs0Yzw3MSRYSiU1VWkqKXYwR2NdamVrRkFEUDU6cEk8XTxUYSQybFQybnRk''@;'; put 'put ''YD9PLng5YkshOG1Yc2wjdTVPNHxWYjs0NFVAYyYlWmYzbTVkRDtSTF1Yb0ZIITF2TjV+NGlaeHRzMm9AX2NdQDlYaXpwbzVzN2o3Xn5MRmNlS3w/NlZyTFhNZHklWDMhJU18b1ptZlZQeChEaWAjaTFWP3d0M0E5UjtJbmt4NGhnLDFNcy8xbD9WenpWZT1uSnVQaG12UmpXdkpOQ2pJJXptbywi''@;'; put 'put ''WCNzKyJoXmwwQ0p0L1hLb1hFR109Mi9xMm5ZJkdOPGgwc3FeTzZEWTIyOF91fmdKbi95UkRVN1dhaE1LM1okSWVLZDQubGYlTVRlKTxhdkBAPXJYajJOdGgmKlJpSy8sW31yLixTYHpFTjghdzFhfUZ4XXYjWDgyQEVFcjYlRDk4W0xMaTFpcW0yQEZ+OkZ0MFdjTSFbTExpPkh+UUAkUTdUQD8y''@;'; put 'put ''eE5HcUZXPl1iLnJpdWtabSR4PCw0QlJyOH1leWB7UmNDX3UkYT1zLmlGQSpASWg8QDNwRiMvVntSNGJ0MjpAKUV1dW9lSW06dVsjTlNiX3wyb0pyaltOQlVyXU9RYSgzKjZMNzY/TE5UNU1RPjdqOlVmenhATF1QMjZRIyFENCM0czxnfXxJSnk8QV98VV9eaXZwWmI0TGo7PVRUQltDXThjM1I8''@;'; put 'put ''VjdFQmQpenx5TDsjK1Ima3tYfjtwVjIrVEtzK2FdYnEmRUk+fU0rWlchRC92TkNHRzcqVkpnfWw4bTN9bHtWdyhVZ0Yrck1DcDhtNz5Tc3hPSyhCXyo7LDMpVjpeb1tKPGE4d1JUfDNdezpXPWIkMTBMOyElVWlMe2JxMTNOWmJHbUJxe0s9T2leIn0zPyVUL1JHOWUoMlNjNGNqLFJ7eHQ1TCh3''@;'; put 'put ''IzpDSyJVRF4+UksoRzJidDw7KCR1WiZlRFlOcER4bHZSNkdyIVFfKTp3bWhEZHVVNUJCNyFgZXU5PHZyTGtDTytxVWMpQU84SzdjXVdbfmAmRl49dTUieEJ4Vks6bnkhJElgeWouNXA8ZFh0R2VqMkR4fksqMjtXQkU6bipOVUZnZF46LnBmM3huVG9HVGlRbVY4MXJxJGt+Unp6Xyp3di5nKTV5''@;'; put 'put ''I2U5RVM8MSRYOTc1IWQwfVRkJCN4PCpBIyVrZ2VrP0slbl1PbSg1UXBkUm9dQzssamo3NE5yMjxeITMwWVokRXlpSTc7OV01TypjKWR3NmB2OGF8OmM3bkBhLjteU18hUXV8dj1jLzguI2lbUl9uVColKlVkMUdmeDNINzxQPzkwMThaIUgxdlVqRmgrYnk9RXpUV0NfW3p+PUBSe10iOkY8QjMi''@;'; put 'put ''SU5bUXBmZVloQ0IpIkdZdy9XJWlLQ1g0bD9BcF9GQCw+NHFxWCY1WGw5fXgyTW1VS0BNY2RbTD9UL1RZUi48T11tbyVmTShbQFlhUlFLX1V9QHYhbVp0Yn1beiUzQ1ttYWIvTk9MQ350eER9Rmx2RUJwYlJ8bmkuLEp3VE42LFc+P3hjcDpyfHNnS1VgP2MyUXB8UyppeGZabXdpaFB9alhfbXt9''@;'; put 'put ''bzRKTGNaUHs0QyVEJSlvUnVrSFA8dTleXkoxfkNzTD5nYmlBV2phYmVVI298V210fjMvbURlNFNiISosPzRrRyp0dFB6TyI1QyZ4MU99fH5weHR3Z3M0PnRqJThsLyNPQmI5Rm56cmU0d0REVmV0Tk9CPlZ0OX1XJEM/Uy8jcDsqNX4hYzRWLigxSTRhL149S2FORiRuZjR4VUshd1Y8OTJCY1dU''@;'; put 'put ''KmZCPnRRJHQoYClhI11sdXlFfTppNT9uelkpYTIlZFVHWnhTa3Z5KVplK3d7ZkYhNj5pe209ImpPeF1Qcz0ydUkwbzlVMTxARzZZMEFkTWEuTmwmLC9WPjtkL1NwazJWdSlSZzVuKSxpJEkmYj92KmxAb25wZmkpYCphXVBCTT9KV19wXk5nJSNyKVJVNGVxfWJRJkBJPnB1XiMmPCtiP20sJi40''@;'; put 'put ''aSJte0I0TX06OHkybnFbcVRvT0VdUEdOfHV0Kjd0VCpQe1c/Ujh4aiNdQ11wTXg3OUcmVSw8c0xKOUM2bkImPixYIXUwKjkqOSFeSHB0MWhLKlNmZWpmQWgpU2giYFt3RjtSeyQuMTthN3IoaXk8dikiUi4yTCR+JSEme1MwWitEPXZ6dl5bPklyU20ldDQremlSfWV4IWIlQWNLdyEmdHRielUh''@;'; put 'put ''JCZacG1vYHIpbTgkd2E1YTlibCxmNCs4bUBFM2hKWjZVYTFvbkRAJlIkRSVFcCo4MTFOO1QvQy44c3MsWjMqb0ImQmhtK1phdTNaYXAwKmZbLHV1fWBFWVtgX0s2THl1bVIvIzh3aF1TWl86WmxUUGMyP2oockFjUDs+X198KixyfH5IPj8qLHJ8by98ekloLGVeYDBhN3FGJFFmPFhOd0hEc1Iz''@;'; put 'put ''W0FEbHV5XVg7QkdMSWZ4VkNvNmFqN3JeNCxYZ2E7VjVGcGs6byUsc0s9RndWZE42VXlmanh7PX07NCojRH1XdkRnPjU7aV40Nk0kJThpUiZiM1Z5WTciUllRVyo8Mz5neXIoYW5IXWpSRnxVX3IqR3hbJEdeVXhLdy9Wc1szTGBsaz4vNTVyX2ZMNG0iaHRhPFtFeSoqM1kmaF4/ZGZAKThPO29J''@;'; put 'put ''SnljU0B1RWE8djFbPkA3cF08OXl+cll5flUzaipvNzVlVV0iVTR0Q149ZS9RL2xxNENiPVd2PHNeW3l3aDhedjo5Ql1oemdQTSwrO2ZsPzY1aXVUdURJeCo6d2FOZm9xdkRKY0AhR0lSK3FbLCNyUFNhMGdKeSJqaiIjKnxUP2lRMGlRaE1XPj8kc21tWDYiKU92JXJPV1BIO11gcVs+bUFpNnIi''@;'; put 'put ''d0luIm9jUSwscVZ9cVskVVJnO1JJSHBDXSY0LmdzWjpIInI/R2V0V31pSTxSOFRDIjw6JSNIODsmc3ZDIVtPWmlvemczb1BRRStwJmhkXipiKTpNbWtrWnkvayRmbmV+LD4wS2QsdWZ4QSUoPyVmVDVRUEQ9SnthMGF6a0hlPWZ+PVFLMzdvbmBuMm94KFR8Skx1LkZWWGBKRDtBQUhjbmBUVzBJ''@;'; put 'put ''JEpoajRmSEUrVnpPWyk2ZXttRyg8JjI+WmRYTStuaG9fMEkwRHoxVmQhTSZpSjQ8NEwxQ0N7fW1GY1V4cEw0PHV0JjtKRUNqU0VYYzpseDN0fGE0cU8jJUZOMWM+TSMhRzYkOEtmNHdfcGVGaEdzNCY7Z1BWYzVhZ2V9eWYjb2QoZ0gsJkZhT3dHZSlYREg2RUF1JmdKOz9dRmwscnFRU3dTNlBi''@;'; put 'put ''fEo/aHVQRyFZTHxkYjNROFAkM3k9NERdbUtiQzlEN2hDVGl1Vj45dnVVI3VMUShAP25zPHFgRWo+QUFNcT9NL1Joakw6SGw+NUt6eFpbanwhNUxHQ0QpKUZWWFYxeGldfXZpI1FmbCF4Skp6bjZhWnAzTHc4diFaQkVdJiFAImNXO1FTIW5bdHUsY3d1S1NKMXR1RlJ5JHFDTFg9aThvRHBWWz9s''@;'; put 'put ''TWN2eDhbdUg/P2wub1tNM0g0I10/ISJNPX1KIUlAZ1FJMHsjU2tIRT99WSxkS2xRdDJ7Ul9lVXJ3OGo2JllIKDZNSkphX2VDel9ENEBbYn43VkZBTC8iKmpVMUM6a0t3Zn5GNG0qcHxPaWB8aiU4VC9dU2s2LDhOeSpvZ1RVdyZCcyZvbzk/VSVmQGZ0eVRoeXBFVUlTdUpdJXVIJXwrOW80Z1g4''@;'; put 'put ''QnArWztZVVBhRE5SWF11WXdfenJQKWdRKmljXT17RS9QQlpYPzRZNCk+cTF9WmxeKHI/bHorSkJ0QCZySSE/RyhvMlQvUkh9fHREJmMmfG1kNV1bPU89OS5OSXJEOHBPaS92IV5CSWtzQW9YIzhiUGcjcExnMFU0RlE5RnR1dyVHdltAeElWJlREWCkqYVhdQyklSS81anN0ZDs1NF5MMmFiPCNG''@;'; put 'put ''VS9DUG9QRFE3UDlzJF1hbHQ8S1p5Ukw0K04uUC5sY3poa1Fya0liPHYhMlhTdmVqflZXcit8MmhCJi4xQi4wWF55VlZMQExPMllZKldLeDopW0dXJnB3bSh0Zm1Jbnk2QGVyL2NgQkNhPkEzNGtGYUssT3Y6YEBEPl99L2ZgcVNdQ0h8YCR4cUpNOVpLRTd9TTYsUV8lRUltMXRJM2RAIUhCcXll''@;'; put 'put ''YCJYajBXMGpsNmdxN1ljQ1IqfWckNVtPPnw4PjBzJTJkdURpRCxKc0d+JXB3MTtbWDAkTD5VWXxAJVBnNyhDcThPOEluW0lWS1FaUlMyW3dJd3BXJWZ6O1R7VE8lXVdFYj9dPkFsb3I0LHN1ImgzPEJsfSlXNH5iZD0jfVghP0s/Ryg7dDdffU1xYSlbYzgoVUNEdTEjJEx7W0U8OSJgXj5HaDJe''@;'; put 'put ''a2g6O2QwWF8sU3R7QEBKN2ApPCQ9L1RoY152YmtfOUt8dCVKVkJEPytFbUxBU30sUmNlPytDOzlDJDVPKEJ+dmVCKXxVLyFMbDxAUUw+TCIwL2pMU3ZGdEUjIUIsQ3AoQjhXPTZDODhVdkhFX3dXW1t4KV4zYSp8PEE+YClHWVg2bld1OD5WWFBGKykyVGMoMyhMUkVaM1kzcl5+eHtKfFhbWzRB''@;'; put 'put ''LzlsMVI9Sy5oVFNYV31CfiV0aVdtXy81bTVwSEY7LC8pVFQjK0F6PTtsbXlWMyEpa2tLM1skai4uPiNrT2dUJnhPT2NzelIvZSFyREZydyNxVSRtVGEyKFB3QDt6Km9+QUE+UyFdfHFNI3AyNGlBeVRLIWo0RCw3bm19ZDRMUWBEeUk/P3I2b1shZz1odnRwUjk9WEB2bk5TIXlqLj5VXzpDY3Io''@;'; put 'put ''UTtONyR2U35hXWNqJXpifDJIaiZzJiJyIj1yNU19TVBFbTk6MDp4cDxnd0k4cDVVfEU/I0QxK0NvflVZbSY8MXlqOWYvb2ZbLkoufVd3fSQsdV8iIyUqTk5GbTsoYHooKENyYCR5TDJ2alFFb3FtJUV1bm5JajF3UDU2cVJoU0BleWVTKlRJajdYVVZmL31IXl9sL3ldM3UuOkxWZ1M+InlfbC98''@;'; put 'put ''ekgpM0tKR2hWQ05IajtPPUhaZlskYnpLeT0qT1A+MGxHb0d1Xy53MypTRGpPOUtKRyhLIVt8ankhKm5PWm1VKkhaZn03Ynp2ek4qT1BsSDtNd00mcWtZXXRYOTF4YURbem5vZGNhTz4iWDlPcThbPTlzfi92ZEUrRjFFclYyUVsiSjtsYSFmeUBUNnNQZE1peTZ4NmNTKzsqVG1JajhYQGhJal5p''@;'; put 'put ''QzU7MDUzakg2UFdWRUg7YGwvb0kjcSRrRXdVVmdTQ0NWVlArLlk9cklqXj8ofW40fGJfMFN2W3Y6WV81aFFbIjNobUlPdT1oNXg7WmJZbTVpeTdhZFZPWkYsfCh5X1U8P3psR0hKUj9DOSVRO019VUt1SCR1Lm1HdXVIJEckYHhIJGEpME0lZ21SZnklRUQpSTBQKz8qRiF5OGJ6bjsxUmE8USFj''@;'; put 'put ''eT1gM2RieSVFN3E4NEhQfipEZ1BjN1puVEc8MEtvSl5xODRpP1hxbGwleGxHLEpbdHA2ciVielpgXzBwNmgjYnpXPiVOLDEvKFBaRWExS3hSJi8zSzlrWE4sMSIkUFpuJTtPSmo5WFVWZWNOZk8rPSpreTxvfUJhcWxsc3dsRykmJG1PKz0qY1ZmL3NIeSEwQVFabVVhKmxhYllvTUc8TTA2cVIo''@;'; put 'put ''YDQkY0RULnU1OFsqa3lPeGdjOFBlYDU9SUlWTWZ5PnguK15OXSxaY1dSPkBXJVhPZjU5SyRKS004IXkhIl92aU54ZTt1LjFKam9meTp4OGNmeS9FK0xmeTp4PVdWVklqJSk6JHkhZ2lAdlpmYHlvT2F7XzxFMCVxcW1oWjlLd0ojKVVWRlRGdlVWRlR0KlRWRlRSTkx0UStAWVNmZHkreGFEfmUr''@;'; put 'put ''SW8vTWliLD1pT1BLWGpUKU0yZDgkXnU1OEtDSCFqLHNgMjBucTg0blA+QFclPFA7TXB4LGFPK21DeyRoUXI1aGV9IixhPXglfFh5T1tbQDJ3LDEuZF1saFEsMWQie352RChAOEskSn18Xk5vYFNXKjx0RGMxOHEsM3B8PkZbbS9bNzBMQ0FQPDkmLDt9TSs9YHUlMUs3M2p7NkMvTEgqUFQ6KUFS''@;'; put 'put ''JltHZ0t5aiElSVkxZHlFJmApQlY8fkVjdHJ2NFlWZTI0WmkmKipSbUJRWCptc05KKCxzYE5QJHQ9fXcyIix7RyRBYnxsLiJSKEJBKHldKHF1L3VMKkhYaXJBMEtiSTUvdFA0Ki48bj5iQS85YFEocUJJVFU5U1FJXSxMJDcsOV9DUVBkMFFwYDlRIWU/PlErZTZOaEx2VmNSaF5gSm1OUFgvNWkr''@;'; put 'put ''dFdffVc9OEwsT1BYL1J7dkJVKGVpcHZMQ2JlczQvaW4/aCRgLlJyL0JPYlh2aF0mQiJ7eW1FJWN2bz04KXs+KHhOdCROTTM/a0x8akpUeCgsJiVIVjomOnwpeG4jcWlSL3haPXtbRSpbPXZnS1NFVF5+cCFgQmMqSWg5JFcjLlIhZEdVdS9AWEQjPC8icTBdTmFjd3l6VHdaKDJNSCVnQGchdXhJ''@;'; put 'put ''QWBOYHZtL1B8aD8mKX17SEdCMV9dbnlvMVZzZDVFQ2wjfTtIRTxqcys3YV5Ge1IzQixLWnY9QU1ANkIsPXdaLkpmTD8rYm0hUShAZE5fSWNfbW82cmI0Zjd0WEBVa289JEQlaT1YbTt3Vj5PZixaZV03JnZxczlDZ3VHKW0mNWdnUk9YKCw4ajRRWmQzdCZTY0k4LjFTLkpzfXdpNG1dcS8+TSVT''@;'; put 'put ''Ri97UD1dczNza0lyMX0lXVR7SVBtLillMCNDbjIzdWMjZVkmbk8seS5dKyM+KiZ8MFNsQHx5YEhFMXgkRi9qInt2fGpDeyxUXXdib1sqb0FPOnNNM2s/WSh3bnlVKCZocFV1SGA4MWppUkA8QiIiLHZvYCVqYHMrNW07WkwjfSh8Zn1+ODh7Zjo7X3gqTT1gJCIhezw3QlQuZm1WaFpVdnZPRlBF''@;'; put 'put ''QCRYIk9GcndzMzNPQGYwUi49N19nY28kQjcrMTxORERfeDpyb3UzPnpmMjMkXzAoNnY3dmpvPzlyOkVoclZ6O2NGZz9bZCsubVhaUTZ1XzBJVE1AdEw/JFQiJXlyb0ZSR2pqRF94SiFnNHg+PEFPImVUOHBifEMlST83dihBVUUub2U+SXA/OT0pQjh0W3FLZk12Iz4lb29wdnwqVVY3OSNyZHwj''@;'; put 'put ''T1tmeVtLIUZueXBNeFtFWFJmVl07NCpoS3pJT30mQlsyOH5YaDY9XT88c1U+aDlEMlowLFUiaXFiXUwiU0xVaSt4dk8qQ3tGdFZuZ3tqeWMuJW9SPkZCTkB0R3VPa15ZaFY4b1tDPj09PnJTZiVQTCRBaCxbUWN2ZDRHQEhvZ15FX0M1NHF+XyNUS04+bDJ8aFtucjU7byVfV2N6SywwOXw4Yk1t''@;'; put 'put ''KFJdRiVOUiExPDE0elMjK1FxWnVdeFE/K0Z6IUtYNWhDYih3eGBsLj19VE9xR3JjM1hHSVtNPH0uVXlPNHQpKSZ9U1c+QUIvUmk2V3tySzR7RygxJS50ImRQe0RKRE0/VTc3b3h6W2drRms8TVN5bkNCMGIxQ2MvQWlGY3Q7UlhRWHJzdz1LMzQ1RXohUUhbK0pIWyo4ZFZedio3PCtNYVkqPFp8''@;'; put 'put ''WG5rZGpjIztPQU9aImhzVkNTWm50PyUiVEpYak9PXyEqRmM+ODxrLCZya0B8KmtIW3xHMEtJQ2FGY15NLjlDeVd9cjNbWGxQKk9MJm8pV3ZGcm1rZnl0b1NzeWIzL3h4LEFPfjdNJG58IlJBSjB4fiY9YiVrTzpxel16NEgxRVYoc1F1a09EVih0SFpsUUdvc3RvV0pEI2F7QmNZN09yNzIxdE1h''@;'; put 'put ''VGNSe2JkTkFJMyJkPGZ1ZE4wPElTfUI3Vk1FSXYudC5oRlgvNVE4JFcmekBXITtuZUY/dSJqYXtLeXI0a3hSe0N1e31uUDMqWzYqUj5HRjowYFQreytiYm9baDs2PHRxKlh2VzR9LnEhTSl+LklqJW1nXUMvSTZZO1lKelFLWkU+R3NkMT5TMEtfLDQxcXdXVi5iajUuVUVpMk1+UUwiY01ROyI4''@;'; put 'put ''NiohPUVyezdCNV9ZSmEjdWUzUHNmbnBLTjYwKDVMamZuclVjPHxLN0lxNFlrJDQhL09PRW4udE1xSkdNMk1jXjhHXkNPbmkqR25wM3t2Pi9Yeyg+fGMyWjpvVmF8eGBydnR2PG1ANHNTZEs0XWo7YEpvJG8hIz1FL0lRP3hBNGkkKFpdJTx3IiU6bn1QIn1RRWxONF0rZS9hN2UjbjFKTylKRmRe''@;'; put 'put ''ey9RKWwwISQicntrUldreSheWkEjO1dCYG9oNGUkR3w+WkNQQjQid3hgYzhqcXgpKjpaRzMuSTo4QV42L3gsdT1edDFUN3JFIl56aHNNcnZ7PCVRYXBgUil+NiVkUzdASTEsLmlLI0tvJEdbVmgiQT1VbTpuIzc+USQ3PkhiWCt8PEJfbGw8Nk8oS3xNQCVnaloxdDIyZVNOYjchfjJgRnkyaHsy''@;'; put 'put ''fkYsKEIuWV1DbiZPYyJLK0prNHVYYW55Nm8hXXp1ei9pJEdvWy8/L3tBbyoyYVJgVn1zazJmNG15YnBuYHUxUT9KQC8hOXMkN01GV01pfl8+Q1dsVTBwSytnSF5wZzJzTz8rRXkpTjgxSVM6bGhAOkNYfnZhfHpiXno8MVtYTnVLOFYob2kwQzNGfUltX2MwZDptQHR0fGJaOj93KSNPQUZTN0RX''@;'; put 'put ''dC4wYjlgNFdPUHx3cWxPVU9xVUo5MT5OND8ibkd9JGd9Ki9AZCRJVCY+R1E8JlZHUChBNVYofVUuY0hZOikjRmhBanYpJVc8Mj5daCJ6JnhDS3U8VDVkMihxcDlNfGU0NGxqenczQmVzIy4/LkpwczRhOW0sMTlgdlI1Pj1iSSpgMW9rXSxGZSI0d3sjQ0l6MTF5RENRPzZFOnt5W0kmeTA3Iz9Z''@;'; put 'put ''Snh2Ump3PHY/ak4rfXZnUio3QzdyRmtUZSxQZzlodHBrKUcocUcsMFJzUjElVzE4X2A5PjBNRUB9cWF1NW8xQmk/JmlpK1poZ0k0Uihxc0M+aWdUIzxAMmRvKDVkNiNTSD5EJkkyR0tnU05tMHlQP1h2aTZoPU91Kj5zQVc3Q2hjTVF8Qnt7aCZXTzA/REh0TSl3Y151Qys0SDw+TSQzdjR9PiQ9''@;'; put 'put ''XSU/fDpmS2lMVUxDc3AkOGxzMjRrZStHWXlON0g+eH0veDwiQ29FbntsbUlCaX5FSFk5Qyp+VVkrcUUubVcyenNLPH08LlBRSkQwMUdlazxaYSR3dUw4ZFVIa1h7Y0dPKXV2X099ZlBDdS5fJU95M0ZuQmN3KXBnaU4iQWlSQWZiUHRCdDQsNU0wKDRlU01QKGpTL0VhdkRJdU8/eihoVFQjand4''@;'; put 'put ''RWB0PCV0XzR0ZTgrQ0VbaCE7YDt9UnQsLFY4cjp9KEZlW1tQMzFhbVtdejRadSZULkJKPXNWbFEjdE4qW3JhXiZDeEBuRiQlRkBNYWolQEt6RG1STjpnOVo9YyNeJlddQyZRSVlaNHxyL2FRPGI/dmpYT3N1VnNKe1hBdDh3OTNrelkyV00hXjlrNEpoMltqUjRSVEhLKWVSREgkYWxPcUR+K2Vr''@;'; put 'put ''WU5jfEMvZ3wzXXUrNHNxKDVbUEBqTiMzMihOSjQmMktZXzk0OGZOUHA9U243K3tHb2pqVHkwQ3lucD15K1VsNFFfPDpJZmJmRnxQWCE9bEVBP2YuO0kyQ3tvPD46LnVFdiokVkkieUZzeFhBQ2BVZk54XkVpTH0vPEo2VUlKJkM9e2N8SjEhbm5IcVdTSGd9dV85Zj8sZGdANTtKPVU2dnp2KSpu''@;'; put 'put ''T1FpUF95aV83bXQzO29vTUpZIjNSekhJWlQjWWhHUmZ2XUl7RSRZM0hzKW0zfCI7SU1YdXY7KWMmcFYySXo4dSw+TWBFLCp9VFtXQ3E1YEBIfSIwMSh8Yi9BP2VNO15uLlZzfXs1ZV5yYVpCViUzSXYyajMxNUM4VEMhO0hvYC9zanpHM15VV24mcXUla0ZbXl90cTlCekY7Q2NQPV9sV0tCSSRe''@;'; put 'put ''KWovdSpzNkUyTUBzQUNWfENUIUtaO0QrQi9DcUp9aXtIeXRZZ2JyXkg7O0M2UDpDY35UOVUwOzQ9LjFTfV16ImJxYl4vMlJDdmpgIUgpbjNBYy5+TlBAKVNnL3cqN1dyWzU1d35GdWRYd2A+MFhoQjNJX0ttXlcrPVU4dEY6fGA5RXNiQU9DXT88PiV4cG81OzxYQExkUkUyY0Q/dFBTWHZAMllN''@;'; put 'put ''cFJjQjdLeHlRMFl1TEJ6Z1BLKEFXZzNBUjBiT2FCOjQ8MDVQMzFSIUklUjE+S2pXLn4zUjJqcGRYXUNCNko3JmI9MSV1fGV0WVpkSFd0My5Wc1tPSzZXSShYbiJqWVZsJVY7ZUBpSTI/ZTdqc01+QT5NUVJIOyouNHdgKW9MLGopTilfMTQsbHY2UmVbJWo0LnRVK2B2LzQ8QFc/dnhgIkN4Y0hb''@;'; put 'put ''dkdqNG5XaUw4JElPU0x5VCtmI0xhYiN0fkc6aiIlVX45bmFFOSRGJjtqbUkvP0lQNmg+aWdLcXVmOUlQfENiM20zVGdrcG9waFtoaGlQN0dpTFM+ekY/XmVQPG0ldDJedF5bQGJwa3tBcnkuWjh6OjFIaVRZPnhAPXBuOG5QeTZ+fHd5KVdjPkE6ZytQOUtdJCYkI2BxYFMvNVRGPWNJMm1pZThg''@;'; put 'put ''NlIvNE4xO0gpNTVwTEI3eHp4S1BkIypdQ24+KG9mOXUzcDtbezYhSj5hPUs5PHJdKDZAPDZmTTdySUZmZGlbOWkxRy5zcT5QZ2JWKyExNUE2YVZbYlcpJUNaNm5WeXA0cSlbaz4wbHE/JWJ8aHZXKT9sMkpZJnB9UT5zd3h4W1hre34lOWxbUGhMe2VxWGkiVT9EJHEpMklNVDkvIz9fX1oqcTk9''@;'; put 'put ''XypYRH0zX1ksK1A6PzddTVtqbEZPcUJhL3JhVzdhdUdLfm9IZT1OS2xHVWd4M11WLnxOUnRbQm9hXTdeb1tBfEtJIVlZeSZkJEtdWm89OlFuPHVsNWJdQD9VY3BtJm9nUC8+X2VrN3NYbE5jQU9BXSNRaH1sMVQzWkY8b2NnWXwyLnVSK3wkY2ksY30uOjF2b0JeV3dOeC9HJj1eVDlxezhWQCNO''@;'; put 'put ''YjhsMSMrK3tiQ1RHbHpTYVd+ISNZPXM3Kk5VOGpQZ15zcCxlJFE0Yz9OJDIhW3J0VnZbSWtbSjVLQ3cpaDM6aHApSmpNUWY5S0hzZTNuJHE4WCtDbiFgQjdVMTRhc0Z+Vit6Zyx8LzkvZDUxRSVrfWs3WFJHb3pnU1olNGNlMGcpOVYjZzo4UWJtbGFpTyEvPFsxYGpWbzV7ITIxYD5TViFjciwz''@;'; put 'put ''fG9hXUpGKzFdNG5VflJAWiNaZ2x2NVdLRTJLRmAuWmduUzFxRj5pPFlkJDlYVXtWXXE6al5IQjB0LD4rIzsrJn1xKU9hI0gpe3JxOSp1KjhZKmxoPDVgLDRzWTp+cmgsMHl+d3V3QD94NltjaF1tT3AwWTBfIT5paW1QZF9hcTcsUCp7RVFdYE5pQmBhOEZhRF18OD5hdjE3SSRvRE1KUD9dNDs5''@;'; put 'put ''XUA1eXwuc2d0JVYoejZaa0lifFdfKjtuNC9BSCZ1R2IocF4yQylfbSJ3dUE7ZUUlXykjWys7UXFseCZkS11jaVs5ZzN5LGR9c3VocWBnU0g8M2ghejRxaDRDYHgkaWNfJUI+TVQyN2JfPltRY3x3X2N1XnxmKkg8Ok98Njl2NXQuMiZZXSgmRUouPDcsUV9OLDlvWkdQY2M5Nl56al96amR9aX5X''@;'; put 'put ''NH5xbThoQ1RAVWc9SFA6eylXWjNYb0l8RSNHb1RWIkNHc3ByInQ3UjpgeFdCYzxHIy98clMwYz05Py8uQnx0OCY0ZF5ZKVJIKVt6TyZfcXNIQi89bH41fmNLLCpmUyRjUF1XWilPX2QyeG5QRjN4cmcubDkmR1U5dyYyTVVpdXcjbUNMQmNsY2Q+MF9UWDllRi5PdWYqUGN1ZCQvTnB1JGEufTgk''@;'; put 'put ''SzleJWVbX3osPlhVc1daNHhIOU9vPG15bWdWQCJqJSxJLHgrfEVMQjJCLkJbMzhHQm9wblgoZ34zXy5yQjNLdHZaKnh7dVJkO01naDtfWiF5UXlFSCNfUSVnOUQ0QD8xdmloaUM+OUtnPSZoRlJLPFpFRzwzMmhud0kkKX07flNxJl9ybTQjQF1obiU9UE0qNTsjdSVlJj9YOjMlIXw8K3dhOENM''@;'; put 'put ''SFAqdkFzISFvKzxdUzlENCQ4dXJMJkdPXlhlaEZpQmxIJGFTQGBsJlclO2Y8SkdJZGBuXXNLZTM0UV9kRyZZfkgvMEFTPmtEUT4ya2Q9Pnp0SUZfI0JFamFBQFZ4REtRN3w3Z150fSpCdVBbP2s5Wzc2ZGZTIWppQyx4KXd3dzM1Qz8uQi87dFVWNnZxW3gvNDM5dVdIKF1jTTNCYERdR3piY346''@;'; put 'put ''OEs8Y0RYLyxabFp4MCRgSSFMVnlhTCx+dX0pbXcxa05ucCw5PWs6MWxgbzRVbER9MFF+R0o4PFssJExCMkIuQWthfGVTai89UVFtJig2fTJObWVINFFVLCNubExwRDhndW1CVDohQkcxW3FKU20lIjlDd25mPkY/XV8zW25OQzdbPHF4OHtuPlpsS3Q5SGJhfmFrY15Ye2p3fVEyXnRycWtYLio6''@;'; put 'put ''PG9GIStKI2dUfUVTRDlBOWBAYn55YHAuZndlZ2JVYzJnOVhnc2pHdztgZkdUMmRKYGV7NWB9cV4rbURoNiU6Y09uej5NXlhwXzd1bHxAUWlPNCpkZzFsQnFGLi87ZWZ9QC9vQjN5VzRtVmQmP29sPHV+Um18XXkmMHFEWGdOPld+fmd3OV5xP15LW0s9N15kLFBMPEo1OUdBXUBgRSVbQ1IoNGBN''@;'; put 'put ''SVhqNDpDekBTdThJNVE0KmVhaCQxUj1nTj10YTtJci8iKFdiSGJ3TCN9czloOV5IZWxRM1t+KFJMLl97OH51aTxZYzJAfXJqPUlXPnBCNypkUmc4YEo+IThbLnY+OzgjQ3RbSW9RKWVUd0siVnxzflUjM2s2Y1h1cXNFLC9GIXtHQEZGaltAfXI8eUE7RDR7fVtdYXolYls6ZWY2JU86bns7cXtP''@;'; put 'put ''XTQ+MElwIz5lck1lOlI9d3hdTWZ2eXp5WENmOlojL215W05nWy4vSWxyflVCNzNhd2FxYCtWIk56QH1yLiZ9JCJ0KE4yYnRqTCQyKnAlK05BSH5CSl80Zl5bUWNKcmM1JlIpUkMlZ1FjI3VPcEhUOzt3ND5FP25Cb04/XjY3PDBlfiNXb2YjaWhYPWNmPTNmUygjS19fcWhiKipCclZNT2F7LCgx''@;'; put 'put ''L0lCWGsuY1BnRVg9YzxXO141Z2Q8OU8uWHdPbnFBNG8mQ1ciWk1JPH1IO0k2YG1JLm9qWGxeU101fitIaXE4cUBPOl5PWFsqI208Jjc3bGdlWGFSK3RSJGA9a1l0RjEiQUpBVzc2dyJzI3whV2hrXXYlMz1UW2A8I012VCFzNilzQCl4M3NbZTtDLHhaKVtHOEc8WE5OUShWTGYjQTVGezNqYkhU''@;'; put 'put ''LyE8eSlyejFHbTpFOCMxOkIzZn0mcHRgT2RrJVZMQUF3Ti9xOjYvQGMoS3MlOyJ8JEspRlhhNEtNMUkoYFY+MXxAPnxreiFGSzxwSGNJW0BqKmRAdC92PnVBQVdPYjdSMDtfQFg+VTl8QGJKNTE6Z10sTVgxTkolS3M3R1ZSRzFYb2spY19LZSZEXmRwVS4pfUYlVVhjdT51QTJnUF0+PlhORld9''@;'; put 'put ''fE0zSHJ3UXtXMT4mYCpTa3pkNl1pWGFvNndxbiZlRV1SQjh8YHJ8dnRoWzJmLyo0JFQsJlYyZSNBNUZIX3FWZEIxSDM2NjxtN3cxPTd8Y0JqME9rTmcpYHh8QHY8L2A2N3Q2ZnRXcHVkVDZrcikkZy5EQWY2ZzkuS08/dTBAdy9ZWX1hVmF9czs7STZ9VlA1VWxHbUxgK3l+I3Z8PiVxPyR5ISR1''@;'; put 'put ''PHxWVXNzKTREYENmaVVpVG94cCVsXUQ+UDNNOilUR1I9OTAmK2IkWE1zeUpmfUt9W1ZFXnk8ZipAJn1fVVRBWnptRTIwdUI3VFkiIW5Cekw5R11XQnYiWGFbZHpVPlFBI1J7TE1dWD4hZkdkfFs1N2R0dXk1NTVeO1lpMEVCJT92Ik9mbWJEaFhhYTltN1RCYDhHRERWWmhZNzQmeWc0RnAlQmVi''@;'; put 'put ''K2Z9TDNJJChydGcpejhwZXxFaVRYQlB2e1teSThudj45UGFMflUvejBNTCFxNzdsK21XdH54bC4rRTsjUEVwMDckX1goOE9QezB4QV9ZdUVVKGJuYEJ0RmIrKTpgJUomeSZeVzZkcUBXaDpDYz59UXxgKUhxKWU2JTB9L0s3ZV1ZLyU4cjxUOl1GOlArJHFTZWRvNjwpWnAkKUNKRk5lbDI1MSNF''@;'; put 'put ''RGZqQjFCYlgqbTdUY2IuKTl1XiZDQntxO0RLbERJMmcjQnVpY0VUMHsjeSVjYjxsRCVHNWByMX50RkwyaE5KQiY/OGc8KEBnXmxyTjN8NF12bWZXYT1XPls3ZlJMam5Ncio8JlRwJX1xVkxVdjpSYyVpITsxSnk2N2BNM1hXNjdBKkEmUl0saDwleC4wZnlDbi5UOXZUUTsjZztTO0omNTk1MHhL''@;'; put 'put ''aTcqIlo7cEA5UntUdDIxcjw5LyhLRjMwMis1Jkl9cmQ5RWMrWURRM2RBNmVMOl1LIUhrPixbYl4qK2NtQnRiQzhWI3pOakx+JGBGJnpRKzBvMS4sVWJ6KXM1LnBBY2Vrak1qRGl5b248L2B6I3VOR0Y7OyJHXypQZ15WISx7cjA+MjpeNXBhVHR7TUliO0cqNHkuLDQ/WS9hKV4qO2JNRForVm9+''@;'; put 'put ''aXs7XndwZiYvQCVnVE4wIUovVlNTeD4mbzV1NFdwZVY5YDJqTGwhNVcjIiVOOFFzKlJZKGI+cDcjIUUiUUY9NFVIXmtyTFlDVk5We0dXQ2FeW1k1RVt0d3E4L3hjNCMyYVNAZiUqZVhWWEhyQmFCdCU1SV8zRyUsNmFjdHxYSD1MeFE7ZUAoTSVASGpITj5EK3guKnw8M0ldWjFJUHo1NlJEWDxO''@;'; put 'put ''PTouNF4za15EYylVWjE/Ti92I3wrWjdhMWVhKSltKzprdGNrOkNXUWJGSUlLYlhvMmQxMG1RejhQSXIhXSlbQkxOZzcxck49ckhudkxXaThgMnxnQSYwQyspWzQ4NytXe2FaaX4oc1B0SkE7Rjw6UkxLc2BDd3xFNjdOfW5+VE4kNi9zMnFaIUd4el0jSSUwbUo0dSQxX1Q8bG5tT2Vnc2wxR2Io''@;'; put 'put ''cT9NcXVsRDw2MVFLcFckbGMyZS97VHt1Zz1EIzdiZV5eO1BAe3w+XlF+dD5fK0dTQndyfiRWXXwkVDBbaG1LXkt+cmRJXWZWWjBFaH5KSXx0aSFhWGokKiQqfkdXLD18eC5Qeml7ZmJrQU84biVkLiRsOX1qeCMuV2JkOnJkeVtPTj0jSGhbZnxtcGBHIlo2dGs+KnZvU245PF8oNFtjYDRkUlc9''@;'; put 'put ''KzlbRDUhInMyIzo3QzVoUnJ+cj9QWUxYZUN5SUlzfV5eKjFYTkB8VzVAVH0pPHxIP35SdHs8LmRVZXIsKnBNVVRfVmw6e3I6d2IofGRhakxTSS4oNl1rckZmbk1bYi47VmpJTTJiOH0uUmIsc2ZOb11zV2lpMzx+P01wW2lNbDtXO01vJm1gXmIzXU9Adl96PkYmdDkmO0l8djlbXWYrPzd7Rj8z''@;'; put 'put ''Zi5ufDY7ZHFrZUtaIjk8flVVOWl3bFlHd10iWkU+WTlwXns6SnlKZ0suZ2plXm9LT3BnYTNrInkjX2UsSFk4KTRWSCQia0VLNk11cWQlaWMsNjZAZm5gXUlbZGNUTXh8ZjQmTCt9T0NeITxGIiVxRkIwMkhOT1hGTV95QGJfMUJRYyxmMFdTZGlTPlRkNDJsWUdqOHZWI293I3dAKlFgUltENHtF''@;'; put 'put ''LGg+M00wXSJDTVs4LnRPVixDVnJOWmAhakxUPy5NQmIzU14sZSNLdF1nfkh4Rl1GXXwwXm9tYWpwMSl8ZXFtM11nVW1yWjUwJXheYyxgPj8qVC4rQEMmSFFiNSRvSE8ydWk2ZHRYN3poemI0antieTY3fnAwPkJLL0RTaCJERTY+I0lLey5UYFZIMTZvaTgucS83S25sN0g/djR+VXw/MjMxbVpu''@;'; put 'put ''aVUzT3A3dmpeVXc2UXRDMEFueVB0cnYrdThqVip8VXo6bElFe3tMQEBAaFVCLmN9WS9TWyFdLltUeltoM1spWnVpfH0pKS5jPnpuSHZ3OkM9LDVOWzFXY1khZ2R9V2c9LzhXb31dUV1ib2pWdDBWM1tkQn1yNFRpWnZ3V2VpfHI+dCQmbTEhV3MofGx4T0RzLntrZXBhRFQ9ci9gSyt7UiNnODxM''@;'; put 'put ''SiZCLkhAdExacmFIYlt3V2dLc1RkM2xTYDhsPEgqWyhlV2V0JW13SHxOMWpUKjRKO2Qhe0hzIll3TltyJn05YysofjhNflJQLngyJStCNDFaNiJ+PTVpM1ssZ1lsJW5xcnl8JjEjbWw/bldeS3F1NC5SOyEzSURRLl1PeVRYbk03V1JRc3Aockh5NlNzfU9DYi4vRCw9cTxhYH4raVQoRi4/N01I''@;'; put 'put ''UCxjSDZXLnpwPmg+IlAmcXt8XnRoUlZjZS4waD80LEVZUjJbQmtWTWY5N2BwNj9qUEhUWyI2WSMhWlpacntNTTBIbVFrfHJEaHdKRTguN3NXYyZDSz8obyk4ZW1MRTFqe1Y9I0ZiWyRSfTFzXV5nVHd8ZmIrdyNLUX1bVFtDMWBjezFXKUF8UnBeVXkkYDtLa25RfFp8d0J3VUModypiTVI5NmA4''@;'; put 'put ''XkdjXVUwVmZzbXRrR2pMQTFrKFh0fj48b2JVPiJMT1F3IykzJHZzdEFhRCxMeGRGfitjb2l8dSs8WjgmYGU0WT0kKW1yNUJxNE8mW2NETmUpbSksIVtpbSN3KW0pLCF2aTFjQ1EiWWpheTklQnMsUkRhO0dFRHp0WVMzaUxzUSlXUmBvRG1QPDp6Z30kcmc+fHM9VlFXIjo5MS4+aCtpdnRbcHZZ''@;'; put 'put ''TipdVGQheilxbjcxTG1nNEQ0O3QuXVhWLilRUnc0UF9bVXFDXk83WVIvVS5ySTdrXmBsMHZqfG9GLD5AOl85QlspaXhaLkQ0XX0sLH1OZ2NoOT52Vm4uJmhvXV5lVHd8I048SnQ4NlsvbGpYcjgxYypzR2UxRGZLZVVWY1o4aXMqLiFbRDR6KmVEcGk5dzxgN3RAQzlVRmF+aCIqTDddcD10PjBB''@;'; put 'put ''TyttY1N3IWZ0OjByLz1lVGIsaUB7bjg+NEFjUVRPZkhIbHQ+NEFjXkc+RTd8R0U4S1F7SVkhfX06OD9dQVRle0w1cHxtRCYrd3VDTFVHMjR2cD9wW3FiKzpTLCp8TlV7K3t4c1o7OiI7bzlrQ1M0XW9HZEA6VC9qMHdPUyFqWUJPTUdCZSV2fGprPClqMioyK013OSxGbGdKTzRFUnxNdCQmUEFX''@;'; put 'put ''SFNBYTdhNDJqJVZsOFQzKkAxXTVNRGV2OFhRSjZnPDRKLio1bFM8NFMqQmxAaU4sYzsyNiRTPyFgMXU6I1YrailmXjB5SjFKWDwiISt4M2koekpZK0VWbyoqJFM2NzIvYFpuYClgMVMyJFIyOWAucVopQTQ7fltaUS5fOy56dURIKWowcTk2I3RmW3FHPVJLWik3WmpHYnhZRWolPXo8Z3J6WTo+''@;'; put 'put ''TzYsMDklZUp+PkhifXFvaCtXdzRvNyhvcC9vKCwiUkJxIixTPk9sVXFqWygoNnpJLjd0WU9hYEIkUDBGIUcxSmlMUVUlcjJDYzAhQzBLPE1ufUIwTjcoeH1eemtGb2QzSmt0eT98NV59ZSMxXVoxWVtUbCQ6SVtdelIhczlhNXFyJGRFYSQ7UmN5SCJFSUtZPTRmaltQfVdodiNLTlkwfk1hS34r''@;'; put 'put ''Mi8vdXpfM3w+NGNNSnBDNkhLInhPNytkeEAoczBebWVPbCp9OGBEdzplckN3UVZjbk1qa11yTXN9WjFTdlFnTnZ8dHI0fWhYdWlUXzhmYz5oe0QjRUpBTDd1LFI7OWBwVFlIaVtKSFlqRUNAWTdXfHtKSSo2MEAxaXlfLGAkbCNUJTdaUC4oPD4pTXRpc1AuTWxBR3k+KCU1clowX3hOdCNzSztb''@;'; put 'put ''WEpoT3I3I3tAJk4yQFpvZEdtLH4hPWduNGF5Mk04XWxFNUoxXkU3alV4SzxvPUZoakR1QE05Wz55cS4zbUp2YmYuYzRWdGZLeTU1RllJcyo+KH1iQjJ0fCpmVjN3bFR5VG5mJHQ3OkI+QjtHOWduUktmMFltc21HZTM6azRAclNjSHl1W0UyczN6YEEmM0pYbTZ8dWVWOUQ8R1Z0TD1teV87bUl5''@;'; put 'put ''K2xje31yXmB1RjhxS28wPj53V2NyaTtPfTVJOUtSOzgmO00xZlVwLFQrajI9Iyw2QHR3R1NvLy5tbVAzV2MmdCliTTc0NFY4OXE2ayheWEs6VSxxbV19W1YxPUxiUngwREI6ODRpfjBseWcxe0l2N1h0QUozb1MpWDA3Vj1HaTttZCYueTBxOSVlIzMmaVlkXjk4JDt7UmlbTjlUcl5RVltnRHM7''@;'; put 'put ''TX43VD48bFBrU0teU09UNFsoclQvL3JTY3NxXnBRYXtVcXhWXXQ9cmFANkMyNk5FOW9nWVZdLHIlfmdZVkFsVnlseXNbTiVWbUAlZ2VtJDJnWVZDdjB5MHxsL18+PTVQIy8zIkZjWSJMI3JTXUpbJmxfLy5sTUhwQCNDZSovOXBiOCR8R1hTcmxgdChGNXh4N2pISmhvSGB0JSpEMihrbyZoMl5j''@;'; put 'put ''RkNYJSVwVXwmOnZ0QyUlcE5jVlRdMi8jNihuZ1omNDJ0LFQrQS96fUhiVC8uSEc/SFc4aiVTNDEid087T2IrU1pFNmpGfDhjXTQoayFnZj5iW1EvQl9xfGRbKUokfkljITNBPihrbWQpcTZVPjFdfFY7K0JCSS5gQyV4cSVTTDxMVytxTihNdCwjKUdtS2dkXUE4RkxDQ0IqZmwlYjVIMk1WN1tC''@;'; put 'put ''LEhudU53dV5FJkR6XkJRPzs6M3QhMmRaKnpSSm11eFV9I2AsUSM7enNDKGguJWtgP3k+Wi5fb3U2OWJteG5dMG5TWGgyJE98On5UdEswVTFkYGhOR2BuenhuQHtuOHsseUxHdngpKmNkS0hFZ3xYRmN+dHZwM1Y5UCRnY3QyQFpdMT5fK0ZWWWdZMEh6a2tKbUpROlg9Y1oxYXMvZkJLTkorMW0v''@;'; put 'put ''N2AiOXI/a3VSNyUqSUQyZT1NNTVfKmN5dkNwYlhZY0B8amEwaVJ7e0U+VWdeVisyOD1JNGNVKFlsXnMhJmpMPndZOjZ8Nmo+O21FY2pWX24lMShfWj52IjBGfVR9VSNeV2pveyN9VmBPYjsldT1hOG0qfi5OcFIsO3M/TXdNJTttaEhyd1d7bmclVjFsOl9ndlRRbCIsZjpBa2xiZWMiM144VWEs''@;'; put 'put ''MmlQPSM8VzA+X1kpbDFjbn1oeG4hQHVTSSU6RlIpLjZffis2RjYkZkQlSnxlUm9oUDtpImMqdylCJHg/dElqLEhiVUZYKnE1NlJmQzZqSDpmTkhTUWR5WURJPmtWUSl3anAvRlpzRE9KYH11JlRLKW1Ue2h9Jn4qMWslKEl9QVczLCZkQExrUEZLQC9+fDlGTFEuMUFwbCgjfixkVUU1QlM0aGtV''@;'; put 'put ''ZDMpRVQhQHJORWlgQWsjOW0zNWwjJSZnTEp4bDooMSwuWnFxKExlRm5uOjlqL2tQMSo/d15fa1Bdb1AmRWNYbSF0fTZ5S1B8OlhxNnVAZ3V7XldqJjRnUWJzaWB7TlE/PWVAd2U5O0g6MVVNamZPITMqOTJ3YF1vMz4+LlZRIitVaH40T2oyayoyTTNHbjJhUjd8VG4mO0NzUjYxNnAjTlQ5e1Av''@;'; put 'put ''SyIveEJsbDVQdnpvOCR2KUBZPilScVBRUCMma1FAal9URWtbM285bE0oQkphRmdCNFE4P15GJnNKQ1QqSWsrailtUmRWSEdYVkJ2JSM3R1JqfWJJI3YzKWQieD9veDl1cUZKMTBJKkhET0wzYy9LclNxa3A0cn4qQjdffntkU1dRczFQKytLNDtyLjEiIjJqSjQ7Yll+VjtuSl8wUm5FdTYzJTBX''@;'; put 'put ''ODlsJW1db3tnJGJmJW5zRlBAaHshSkFkI0gmS1FrIi57NkB9SUt+MGdtUldqNE1WKzUzWk43Qlt4Vj9POiE6NCE+JnJmVklhP0B+PH1bUz0sVlImd0BjfF1gYTlyJXd2K1BNX01lNzQ1aF8wPmwmYls6bDZ8PD48IWhwRXZpWW96QD4pVS45OHB3OXRENXxHfXBBT2l5VH03YVM2SCxSZUZZYDZR''@;'; put 'put ''JUBoLjZIVSZlPTBmQy5vcT5mMiEiWiUvcnM8az51c113OHE4SCpSIX5TY204U3MxLDFsZVZHc0o3fHJhIyVnTTp1OmNKbF59QC8yV25IYChyVF9rYmQ+W30kMCNtancrUkFBRjNoWj9nTCg1OXNVY1s6Mm5RQnImJV5QeEklRzgxNGdvOVVWdzppNSEvWGo3Ukt3QltWa3wvV1NuRX4/OHZwMmYu''@;'; put 'put ''RzJnW0t5JmQ9flVZNyYxZi84MGBieUBgOERMJHYpVmw5WCQrY3o5WGdlODFSKm02MlhwNyRTODd0OFFicVpEekVTOyowU1JVdU1Qb0lZU3c+Q1RTXXxpeytDUkxeaEJzNXpMX057b0I9fjl8N1MycV95JiYrPEddPj8kVTFwMElmTXl1NStCW1R2fi5CQVtYY3k+Ji58NWheJjxMb3JpRVp9P2U4''@;'; put 'put ''YFY8Mi44Wi80YDxidixXcS45Mj8ubntlVVl5JmRHKFlAZy5xciRrYXlsUFVLPTRPdlVaa10scTp4NSVhX1coJDNieDJSU1ZBNGJeJmg0KFV9fEUle2EvNzNlaiRAVClGSHM0TmU1KVc7Zj1SKD0lYkJxJH1Le3NWT1VjIjk9LjBRIX1JfnN2PFg9NE80JisqK1ojQVM0NkM8dElnSjMrfGo3Uipx''@;'; put 'put ''ZkpLIzllRmE0K1JiYXYmZG0xPSlxWndrK3pVeTJ1MSltIUhrQVtsRlY+amdbJGlCMnRbcigsfkU5bzNGY18rVitLTyxXXW1LMXEyPTdbLnh1PUM5MUpzfTR1WkhoXSxYI0AxNW5XQTRtV0ZwdVElWzV1KkRBYDNifnU2cUJTTUNmT1VTXz9zQE9Ac3lPRiEjd3ZwY2hjeiJWV1lNYlFDQylbMD8s''@;'; put 'put ''WHIjbk85QkclKS51dD4ufXg/b08/LFhvNCVRfSl6eWk6P1dpWXB6bFJiKlQieChedmFiQmk8WG4mRl1uTl9wTHU5S1teWER+P1UzbSpiK1hLb3VjOXVOJTtVajxYKkdXOUs8SEAoYmg0cUkvLHZfSjV4eTxMUCZgI1Q2WCw8NmNuaDkuOW17ZnJkYWEsWnsrfjFhNjlKcCVGcXRxZ09KfkFJIU9j''@;'; put 'put ''NExoa0dsbnclME83MEYqKnc1UERXU2hDPFBmQjFJRmxsbmVsNFslRH4/YG1YQm1tSS5LdSklISwvVzBgJVQvNmE0QlZge21DX3AhVzpxeTo8fFUzQ2p7amREMn11fHhZJDNiOmw0TFFwNUAudSR2aTsuZzZ4SWRePTkzR21ZbT5iNCZlZDx2IX1SbCFoTkZKWjJgVz9eczVkc09hM1dPJlJCPmlv''@;'; put 'put ''dnJMMWQuRGhifCMhJkomSHVvSjxwTEppTGAhVSk8cH0qUlhXNklyXk5zUVE9VyNuZlRfLCZmSTMmcSwlakQ+SyYiOzQ/M3BXaT96TG1heF85QyN2TSJvM3RdQDhnJileJVNpW245P1l0dHZAcVMwUCg7Sj0sQDFBY2k6YkM3Ny5IMC5Bc1JqdnB9akR6Ni51WzYlKnZRYz1yNkopPShmLE5Zemg8''@;'; put 'put ''O0YwZ1MzQn1pK21JVzNGMnt9UUQkY1YvRitKaj9la0Z3WnBWJWA4dmc6a1QrVnVqbm9nSEF1LEBpZHxEPGleMDpxNlB3PX15YV05TnEsTCVaVSgsPF5eJTNxQEtvfiYhNEtOfC4kZnR6QmIodiN7aSl9NHNwNE5xbyl3X1BYeGU8MDJUS2ZuOD1XUzBFX3lpMlp7a0NsYXpqaDt3VF8iYE4qfnFp''@;'; put 'put ''NEtaKCZLfFszLH1eeGVhdSlzQElTL3F+dT54ImxtPTdbZiVRT3VEYyMqPGZDXW4sJWwqciwyOG9TcSY8PzdmbDVRWmx0ZChLPVAoWU18Q21oTGZaRGRIdncyOzJnOG9xZmh2L3ZXMXMuSzkrWzA9VSpwZnwuWHAuWl1ZYUcvb20qTFVbL3AmQi5Ba3pwJXI0R11hNXolP3Q6Mk0zNHBHT0xuR3ZL''@;'; put 'put ''RWxrYEQvMTR5c01YRHtwWzl1MDRaSER2KGc+cWdJe3F5dlJySWlBMGUySTlQX2d7JWo+WyZXRVZYUDcuODR8K2AmdVEzYF5tdFRBVlo0T15AIXk5cnAmVjpXVSpSNG44U09Ca047Z1EwRWIuQWJiKURoT1JJaipSKFc7S0J1PjBEZHtja0hgdGM4P0h+cmd7d3VJWGt2WDB4XkkwQi5Sa0J8Jlcy''@;'; put 'put ''QkpPK0AjMX5WTEU1U1R3PlRMaC9DJnZ6TzNxfWZNYWRVN2w5IXwufV5kVW5QdXNtOV9DQVpJNCYrV1lRV0dKLHJQQkdfJS58LGw5NiFwKWc5W0h3cD8hNyopKj9Mbj88Nk9IUShuekNocHw2W0d8bkoiZHx+KSk9PT1AZUs5UlcvXSNOPzVtNjdPTH1QdTcwVF1rR2tmSmlxbjldXW5wM10zKkVs''@;'; put 'put ''Ll9CODgsKSY1LD8hbzx5cklGMyxpbyhwTX5ASz1ddl02VTZtRTFvLHhyfC4haFI7P2B+MGpLI3soJip9QCs2czdVT2tnezkyR1RFP1BCSy5bcnJoWng/bWY8YSNIXzZVSzwoR098NXNRdFRrXVlZVHZaRHolWjBhU3dCWlN3aUd6Jn0vI008fDBnTWF+d1JaOVNrUjk+ezFrezFtZEs4V1csTnpa''@;'; put 'put ''YlVdej85b3JHKzVvNXU+Oktmc01TODk5QHpAV2l5I0pVUTJOe1suc1dBVVojQCF6XjxnPy5lJXBtezo2aGQ5O2UmZiJgc1toLmRVYmlPITkleiN8W2o4OmdOMzJiWkppcVB3Z3N6YGRrd2UoLisvSCp0NSova00sVHVNQD9JNlhIVlhvdz8mN1c7OGZ1Mnx0ZGYlc2EwKm85JWU0bF1dL2pjWE54''@;'; put 'put ''YmlOUmpFNDBhbCNBPnImJS8jQyFkfUxifTY8dk83QTdAWlBiMTZTbEFkKCp9TitQNExJMDNnVlBHa1hAPjA/MDRzW25odTEpcmYlUD02cWxhVlRjVWhXLipDNExmI1o9TFJgOiRnJildVVVpfWlDNnpeIVlrSWs8dCYrITpILCFCPl0sX2ZiZSY7Q15NdzZrbC4wX2RhKE09Lj9AK1VBRXNgZ1Ay''@;'; put 'put ''KVYlLi54IjYkLlB6MiRlb2EwdnkxeHRQdTpzTGNgdWhQTFd9SFBRVkh7dW5POTFMMz80blAsUjgsXSw6cD89OUQrJGw3ImxOLnszVjRqcGhYLlNGfDwySS8oOFN+UHpscXovQVkpPntoYGUyelEzelFQZ05HQmVeX3Q+bVB0dmM0KmBtJGs/MS5dVjIoPSZhPnc1b2FReE4kXjNfKnIsTUtGdzBG''@;'; put 'put ''U1gjfmo3T0xWamo2OXteOCFGLDlPJEI3elZNcytWT0NwL0FQKko6OGYie1RMaGQ9Vj9uPklxfjEsLFZ+KkosaS8mbk00Onw9djpuej45SXtnfjJMKDYuLHsqdixufUJKRjs7TzoxMWM8ZGVKNTcyeG1HQyJFIn1iOkNNTzduRU0zdXhEZEx6ZyY4MUNVQVo/JThrR05dV2s6dCRJM1IjKjRJN0ZB''@;'; put 'put ''QUFBPHZtU0MifmVHR118KiFLL2VJODliflNoVkQ0RXtLIiEjZzUyLE00QEcsellZeEMqR0Q8RDpvdFlWM15qYVl8VWx7bV1jNiE/WjUifEd7RG9jQDllJHpCWlEzRmY4cXsja0ZRb0w2UEo5R3h4TkFKc092LCw1IXx8Z0pXUjVtUUkrI2hRfEMsWFpofHQqOkx3U0Z+NlhAO1tvWkF2UlQvdmRE''@;'; put 'put ''VU5qcF8meU5Nd0d1PjU9UTVIOT8xX110YUdJd10jRmp9KlMrdSh+OSZ3V2pnSE4zd3M4Q3NveG1aIkhCUW1fSE88JUJLUSp9czBlNjxAYjZANnlWNCYxSTlVb31JUitrWitXZzVAeF9PbnVEcTdqIj03Tkg7QFtIclRkTTJhYkAjaldZPHciSlNHLGpATUVZQGVzN3gjJn5eVEJgKDBWR1BnQUxd''@;'; put 'put ''NU54W0tjLDxdO3V7dTJ0Py80flEycEtYJC9yIlZyWl9lN1NQNUssXnpeSlEwbSgifnVbYG9vclskMUk2UV5OYkZgWmR9a3A2LyI8MT02UjN+WWFCM11JYVhlTWB7N2FfRTA4VzFYL251UlpCNFZ6KnkuRDpxS3gybyVqSk46JHxiY1FWSE1mVDJdNERtREhjYloiejVLTCFVeVMidT1XSHVGW1hJ''@;'; put 'put ''c1t2LF1mSS9nIl1qZW43SEcxXXAhMFtYZlQvYmNSel45Wk4rO09aekxPOH5Ual5vXlR8KG1LYzYsOUZgW3gmTTljNmNVV2BUWUI6azM5S3xdRj8pYlhuVypNeUY+dUh2aDJCaFl4MlBTRFJAdWpkemArP1VSZGU6KVAoTHVZIVNMI0hUZzt4KG9TUTMqQV9CMXFFcyE+fVVqPEBmMjZeUiszNUFD''@;'; put 'put ''JmdxcGx9NzR8SHdYNmc9L3U1MUohclk2PCovcWpCeyQ8Y1F8VSw7MSowcEpCcUpJN1NWc3Z3VjZrPH5UKm9WeXkvRUl+bmdEVTBtOjJ+UHM2IV88L2lIV150b1RSITNJP3ghcGR9LjQzOUpCNWI5eiYlPHczaktkKXc9TCFdelAybyJANFROPFFZWzw2dGV4ZX1dOEE9OE5Tc3UoUDNZLkNmd1lh''@;'; put 'put ''MmRXQDkqJUNEQyVNPDlAdi9bQlY4WiouTX53MEUsbDMuZUZudSZBX1p5Jn47YUM2XmkqW28zeSlFIVt7QlY6Lj1JenlEW2RzU3NQRz5UYTZ4M2Mhdj8rQHs3cChIRE1RbHdwRyViWUY5Mm9YSldifFVkMnJSUFU4SF5tSVclO2lyTmsjLG9lPH1LK193a3crVmhNaUVUU0lPfmYoVjZ6OnNfNTsw''@;'; put 'put ''YTtkeT5ONCwkJV5Yc0A2XSQ5N0ZjZS43K05wViNRfm86fmoyRlckTnZldzUyTEhpa2A+PSw/dElSa3k9UDgsOnZGfEJmRV9dPjBQV3I/bTFHYHdgQ3smW3YvV0YqT2FuT01bKVIsZClRfUVeeV9WWjBqMktfSTJeWzw9d19+QWlzN31LT35VeC9WSk1tIjd9OUBsMmg4Q10+XypzU31xe2cxbztH''@;'; put 'put ''JCw2T2FATFYsW148PUhSLEdMXShxIk1jOXJycF93dnp9R3s2bS9BJUVefmpxcUBZMC9KLDFGez49blhxSnFIYHlMdi55VyNAWnhVZiRlcG9bdCNoX2w4PVdWXU8sPCF5fVA4Nz0zfC5dfiE5dCU9S1h1NUAwIi9KSklsem05XSZYfkZlK09JO05DMClAczpDWlZnRE0+OENjSlhaJTolR3s8LEtk''@;'; put 'put ''ODopMCY7flZ9bEkwPSh+MGBIZHt0WGVTLD0iNENRXjFfSEV1M2tfZmJvVkRDXUo5UnUiN28icWJkW1dgViMsWlpPYSQyPVR7X1RPYlJSJlZNbX1hS2Z+Vi5aQSh6QURIej0/bmhgbTRKdEY2aX58LEVJMXh0V3YiR2Y8ZShfXytuXl15ZF9VK1M5XXN5alh0U0gwd1BQc3xUUCYmXToyTHE8SXtr''@;'; put 'put ''O1g7XyxtUDluVkdEKzg/WyRsbEY7aCZUVlpQa1ZWdmUqUHx1ay53el9dT19OUCptRSxmfHwkMUFVIXJJP1pBamskITREV0JhI0ReV0ZteTFyN0FMLCtxWlhPJW1xcz19WC8ocHAqWlkwQTclSjUwMitmLmZsOzY7OmtMM21pUFRKMmZHP0UqT0ZuVy5OcmwwamtxT0pCdkl2dXlUQklNK3BWfWx4''@;'; put 'put ''M1EuWmJbYTcwbn5pSUkwcEhMTW12cyV4WUgpezU+Q2xqRSEvUnhgYF9mJX1FSXEhOnImR2ddN34qIVApQElIOjVESyhjal5XX1ZPIlE9cXlPTXxiMkJxNzAoS3B9YG1qbXw5M2F0LnZETWdOPD1sNkZPSl19ZUNEYSEheGx+V2c5OFEubm0lMz1OYyhiWCx0W2RkTzVzNEdmaGRqM25ua3lMMzQ/''@;'; put 'put ''M0hEZXApQ3hBaklmKlN+Tz9CXiEvP3BbUGlYWkZlOGBnMl5rN1pdRT85UVkpWV57KHxQZDIpbkcqO0c2Sl19ZypVPjxReW8jTnttMzVPJDVVJVQoJD8oLldWI0NNYl0kbmVKVjNMLkt2QHFDKUAiMklPa05pPlk5S1E2VXFFaH5BJEF0Vl0vaFhjP2I+amBBfE9UWEtgYXBufl8jYkY0QXYzQzty''@;'; put 'put ''aiEpL3NOTmlnXVJfUXkhWE8pbEdvOz9DdlZARSJmXy57KWVhYVkhajtIc0JDV0xOcGpCOD12YUZyImMzK0BDJT5sOCxKOlpafD9+b1duZ2M4Q25aYywuJXNuIntYeDw3bF9TbjswUyRGTmZHdUh8RUNgP0sva05DIUB2PlR4KVI7QDM0IXJkUUdVfUg6ZX5ffCtOaHErd3FITDNFLk4sUGttOShG''@;'; put 'put ''cjwqY0JpTi9sU0IlfVhBLCk/fSsjLyE0bXFUPy4wL2JPbFtGVi93JSNLJGV0KnRRKUZdJCU/b1h2SE8/R30xUE5AfjBOXmdZcG9gKChaNV9YfkE4JWxPO0xWVVFrVk1MY05WYjFwa0BSTFl6fTBDWjwrLEdYNHcyblQwOipgIXFXSngwd1hoM3k7RSYvaW5PK19GQzY3WiYhNG9IfmRkZWdTTE5r''@;'; put 'put ''O3ZfKDw0JjM2b09kdV45UzRKP1k/fG0wcVpfa1Y4Y1lpcXw2OnJje01OMExqMGpMV0MqezloKV85O3xQUWRYfmV4KHQmXmBEe3BNSEZLbmhaeWpWKnxHOkZ8TVdRe3Fvck9BNj9kOjU3YCkxdkpLTnhAJmQ9VD9OVWFZT1pOZixWKEI0KllOfnBYLiQrc2AhN20zQmlRQi57bHJgTTRXZWgmdjx4''@;'; put 'put ''Qj9jMG87VGFZNG1SfGBxc1FiYkpFWEFXQChLeGZTMSRFP34wdzI7c3VWfWtJcUhhZCtnNmY1UzR9NEcpMnhSbThfY3ExUXhKU21WWHg+S2FlLnEpNGJOQjx8OngyKyF4QEwyTCQ/K2Eue3xHVXc7JSpHYVMlMUY9PVozRDc+bTZTdVY8MDhZZHtufXBddGxoV1krTSRARGxkQik9UmNEQykmSGx0''@;'; put 'put ''PiE8U1hGQSV3PzVdOHlqRlg3bD1CRTA7VWNpY01EP2Z6ZmVFI1M9Y2lUVVRMO09pRXo1YTJ+NTFFVzlZNzFTez1rfG5NNmRiamNkT0dhNi93IkdvXUhhe3ZQUSVfTFZ4KzdOVmIxRWxrfE1bfEB3b0taSnJTWz9WVD5kL1NFWkVOLH4hdlhFQEpHQCl5RyIjdTs6YTo6MTd7LkRiYlh7UFhfT2Rw''@;'; put 'put ''JnM7bi8lJUxRPzl5QmI5fTNuekBAKTE7WVQiU3NGa1B+PGZMbDc9VzI6IyghQzt7R1R5ay5MIiE3Ml44KzdZb2JjLjtAPDkvIWt+dE5NQXM9XTBDXVNNQ2dLRGhqTmI1Mi4qVXx8Zytxc3ohQkcuK3FwL1VjKDAheiRBP1d3KGJtNGZAMk5jciF7cDdjXj8+d20jdHBiOyZ4L3g6ZE94OyhwNyIv''@;'; put 'put ''Pys4VGxsNGN7RWpZeSpKejR0NCFPUUwhR2JYUWxbMkx5MUBWZEVmfUZ9RzFbOXxEdz4oQlhHLjZHT2FdPjtoK2BLb0crPUYzUnREMDVmXnNaXTFJRX5MOFQ6LCk8YSQ+Xn1HTTVBZ1tOaWVMd344SUd+SUlndXIiOD5fIm00dmBtL0pYMFZjNHNfIyZrJGY9bVdkNHV1dikwRjpwJGEqXU1tWX1h''@;'; put 'put ''VlYvWXh3IVI3XUcpfihjRmpyS3EiVFNbXk9OdTBgS0UqZWF6SGl3YiRGQG9bYCt2aU53d35VYixeKVJbdn1nPj08eFpFfF5SMXwkNCpVdUN2cVEpallQY3YyZj9DVkdPLyRbN3BTVFl+eSVlN3VqXUNlM2JyLCtFZTRpNXAwbCU5ZyEpfHowV0k4TmZ3Kj5EW3N2OyRmTileTiIoaXl2X283bTxj''@;'; put 'put ''dmY1PTQsan1aUmJneVdVOSgrX1BZbE1kXX0rQGg0Ym9VRnl7PjhedUUuM2NsQyRDd2VCRyt8QSZ0Nj4+S3lnSm42VTZ7e1N4PkhWeWkyUjNbN0NJZHs2enlReytIRHtdQXM4YS9XdkBXL2ojNTErODhIZzJyXW1QMmtAPmAwOVBMaXosdlNoc1BzOSxZbFJ+PlU4aHRPdGYhNUJRfUsiWXNnUGF3''@;'; put 'put ''Py8uK3Y2RVtiRmxjV14kcVB0QHA/Z0pbS2tHTikreV9sWklSYXdvKWFyaVdIMyxzK35VaU4rLn5dJCI2eUVRNTNYQnRLVFVIbFBLMjZ7b0c/YncpfU4xPlIvc2VaLCpSLG4rZHd0MlRiQ2NSVzZQZzF8OGlGfU1fQ0xwM1M0KlcjfS9yMHszQ2QjRCUrPUIuX3Qpd1klKkIoflI3OjpWcVYsQTIp''@;'; put 'put ''VHJWN1NlR2VRUCNjak5pWTgkZ29IOmFKTHclMnRgbH1QQl9sZS5NfmtwTmEzbUwzP1t1dHR2eE1Nb1JwOWdkaHd+cWJeO3FGMFt7LyZZcmd1XissOj8uLjk0cy90OHRxJFJdVyolWzI8V2N+KDtEX1BNWlpOT1kqKF5YbTJRTiZbeE90ek5jKEx9eVVwUz48fFFeR3R3VzxdX0d+ZCN4NC9LT0Ey''@;'; put 'put ''MGA/fDxlUihVfkBWdmU2VT9GQm1mK05DW3VkWV9OTXJFeSZQMFE8XnchailUUGEwO0QmMFV0Y016ZCZRcCFraChgMW1zI3ZIMWBscn1Iby9ecClAez8zfEBKPWJwfFVzMEg9MixVLFlIPjpWWGBnTiZ6U1BAWzZ4KHdEUVA/azZFI3ZPX3h6NEYubTxldVJ0ODF3V2Jpbj82WnBmaEBFKV9ffE40''@;'; put 'put ''QGVpUUw8JDFIQmJzTFYvWEtrY2ZFKn1iRnR0KTFOd313fTtkPHNQJXx4KCs6by9rbGIoJSUqTUBhO05fZmBqWkV6NVZgZDhwIS88V2YmbTVDb0QoNiJrK2UlYGNMWG11Q04qYUAlNkxhWDokZ0I5U0RfaFJQPShVaCpfQ3VMPGs4NlpXdUR8Uj0uSjEzcE9GJC86Kyk1T1pWMGc/ajppfTdYVkR4''@;'; put 'put ''d0IxMVB1WCE8Jl5Tbz5ncyxwVXR+Lk09LDpHX1c/K0JsMTR1JGJsPCt8YjdWdjYvdnBlOCoqcmkyJFAmcWUhZWZ1LFU3b3JOeUxyXyE7NSQqLmBJdCY7Qzc/Xld7WkUweUYvUmovfm9Bd05FS1NaMEIzVlt6YHtXInBmXjw5O0lkL3lWaWc4LnR1TE9ta1d4X1pVeX03TVZgPmVfaFFpUmpMZ0t3''@;'; put 'put ''RWQ/SkBVNVh+RXBQZ2UlM0huLk1aNWNdK21bYE8mfTVXKjVvVHtqd0lJWHlfYm5CWWZ9OVY2ZEx5aGt9KnsyLn5RX2oxbjZNbG16eTdqJFQmUFJgamdKREJ+P1EiYn5WaWJYYVF4QENDaEZzPCYlRG5eRyNNVWA2bjx+XipAZjEyQnVoNVcpdjtKYWdAS0kpT3pKOSlBeSpnTVJ6LylldUkjQygx''@;'; put 'put ''fXFpM04iI1Y2fTRPI2FBRSopM0FFUXxQM042V3xLREQxfnVJY0sjaDZPTyIkVihXVkcyQzEzfWs+O2w/PiIyRG19Oy9uZ0oqPTNOKGQxIl1xaChUQUM5JjtKX35hbkU8VmVJb3osPncuVE07UUIjPXx7Pi9OXXF5L09wPmtucnE5Jk93bXdHSkBEWSkjTV8yZyYuIk1KJjRoKyE6KGwkTT1eXW8v''@;'; put 'put ''U29hYGcyMUpvLjxmcmpiMkI/ZzFqSnhNJEEhUV9ybyZQU0hJWn03bVRgYDVNNTteTDY9UkcxKDZnMz5gaCsxRFZ7SXFdJnI2e058RDM5VXJ+KiwqL1g3fTd5OWZAeDg5NzpuP09sa2cvfHtgJVR5OTFrJjFbUyt9N35GQzZ3JGNlY152cT0lTGp0NlFEWSROOF9Nc0hOeDZXemxHVEB+Ryxxem1N''@;'; put 'put ''VF9oNHVKY0tSdV5SS0NBUlRfYiFgX2RUTms9UDE3R29Va3R9S2wkcGQ7NS4pTkReXlpbTDo7Tz1gKiFMbmovVFZsW3pRNzZPdjB6Q11tU0k2MCpNQ1ZUQmcjUVplMFB7UTxMYkAqZkhtQ2hqS09TfHVlNT5GJU9vX1hHUyRHMChzUkA+cnd0RF1hQm0jNTpLIykqU1tGUFdfc3FDeU9mZ1ZeTSEy''@;'; put 'put ''MHk2TH55YiwwQjBZV3pBSWR4bEN7fWdpKmd6RVhOdnw5a1k/YVR9SnxgSDEhI25XZyVmdk55W0JSZDQ6V2E8Zz86M1gyWUZUI2h+eW45UUVGRjFobFM6Pjw/OHwxaWhGdShrYnZYcGhZT3d7W1lraH5sekxfbjx5UkdFXnFgNltlJC5tbUFbTkB9WWRMZCRpYzM1Z2IqMSIxaCpoSm51TjVWXShs''@;'; put 'put ''Py4mQUJpKHpnJlZDWCFpZjQyV3tXU0gvd2JiTXskdHcoO2MlKklAOkNrQD1fY2o3LnQqKFg3Q31hSmFMbVpbcU8heGdAc2RNIUx+M3AraDs4T1Y3KSUhMEdWXmk/b3kyOnV4cEl+NjlwXl15Tmd+I15LN0xnenkmZjAuNytSX0I5TX0xO0x7Y0RaRFBjOlk2cm55SUlpcmp4IUNGOjpNUnlGX1BX''@;'; put 'put ''QGQpKDB+TDVfMFBpdW1+WXNTZFk6LDUqPFdVfCxbd0k2YyNXK1txMl9nM2p4WzNgY2pHYCglTnRIe1pTM0BhUll7JW9GLFQ/akE9XnZiVD9nUjZyVy5TPXlVfGNdeWJXSEg+ZmxeZ0pJSjsoWD17Um9Sfk1eN1BuZWF+LFQkVil6UWxDdFhTZWtXPkdkYCVUcF9iTztdVVNEMCwxME4rPX5WYmcs''@;'; put 'put ''bCJ5bT1ALHRtZHJZNmhjX103XSZWSSY9WipodmtxLHJpd0pYOmU8P3o1Nzx9cSsuQVBfVUxzMmtwXzAvXkp0KHFkI2p4fCRPX3AyTXVhOUFTcDZwcm8rK3E7IiJSK15TVnt8YmA2ZCZyLyFlMSx4O0NnVCh+S0dNOEJGTzJ2cUF8OSpHTXF8ZiJ+P24jVGNyKTBLcE4keUZqWCtuPXNAOz52eGwh''@;'; put 'put ''cy9aIkxUWy5mO3suJD9YPCNNdjNmOGN8M3xTeTpjXl9dMGxeNDd6WilaREVuXXY8N3MmS2FRUE5+QXJwRj8kel9WamxFay81azxtTzpHaXRSbl1NT2FFdk4yV0l7aGZQbCM2MnVnPEo1dlhebD45cjpsOmk4OU9HeH1JWl9ub2hFdEVmeltrfGdEQHl1UTUucTxZcl5mJkMxWGBfWHYoVl1kJT9r''@;'; put 'put ''JTZ9UFFFOTYzM15nIlglJkFmYysyQEpyOmUhfTF3bVp+WEdEfmAybT9OfCgiOio0UEldMmMkUiw6U1UvS0dldV5WS2pGbj9PdiRoVTJbWlRJMHNeTlVFaHAkZ1hsZWdFK0pSYSFiMnJZSS5SKXA5a3pPIX0+SU5iaDByb0hAPlkmfTRbVEg/ZlRDOnNGelYscUVUOncvL3ArZmo8W25benBSYzJa''@;'; put 'put ''MipHeUt6aVJfWlMhWFZ4eEI2Qn59dEt7ZHB4P25mO2c1eE8wImhkT3h+KmNQVkBXcEJ6eTcqXjBjVFo3Km1Qe11McWVSUk5bKiszNm9+XyE8Lk5pYkFCRkVBcCpGRC84TzlAQSE+cVBQQF9OOn0uPkthK3AzakYxYj1ITXJGaD89OGVDM1M+VyhpUjlMITFdSk87UFddREApTCJ1RkRpODxCNSsr''@;'; put 'put ''fWkufVA5SzNVfXZtVndjKkBhKToyUVpLP3RLITgsK3F3ZjNtWW83XW01WlZgYSpIRn1uRG9pZTpIQiZCfnhYV1VaZkw9UXtubVs9bWgpcl1KMSFOOUBKWF09blhELnZdNlBPTWdgfTk3IUFSfjI5Y3FFSzNhV0hYe2xiJUVWMnllQjY6TzZiWj9tQk1pKTs6UnA/akVyIVQ/PVtfOkNWWkYyT0oz''@;'; put 'put ''KUE2QFNmMT8jbmR7YyRPLlpEMWE7KFJoO1lWMTBKYnElWndCdm1TZlg5WkVEZDxsXlIpZ3Qxa31BQksmfUNnbE9uN2ljcCVJTikjaU8jS18jdnMuOjRnSGliMytUN0gpJG1sfk9QWW5lPW5SK2YlUTVXS3dIfmlAeixCMX5+YFlad3tSbHNEeDJCemFkJmRSTkV6UDVuNlFscF9bPzsxfShPXkwk''@;'; put 'put ''KDVLNyIkTm5tZmgmMkx4b3NzXkhddUIySCh6aVVRJWxtaTR5Z3xiengqJU0xTVswPGJVRExuOjFdSXwuOi8+SHdka2d5bzQyYUhgYzpkSFgzQzhKXjE6KllEZUhwWyxdaylfY0pGYVpKUDJKOEpzOClAPDpQLz88b2dPLnlWMjQkMzU5PjRvMCRuMDA6NmokLCZ0T2BkVmpHLjkqR1k1Y3E+WE9L''@;'; put 'put ''KWs2dWc0QEBSUSx8PkdTYzx0W2pkS1RpTlNeIjpUVUFrKitSZX0hV01DUmVXfD45W0FDeC4sP2RmLl5hfnosUCowZ2lgWDoyMndANWBEMmtnM3NBOWc3eGM2dm5tQEw3dixVRytLb3ZfIklJKm02IVhoMHYmRFpEd0B3WCxJKD99a2B5WDFdbz43VXklTFZyM2IlYD45I1tCbyRmRFJHfn1Pay42''@;'; put 'put ''O2FwKCtRLi8+N2ZYIThDTS5KYS9vO0M2fWhaKFk8RShYbF56WlY9cjNfYG5RTXVbMitReGYrMTgiRTA5LnlLZE0rVHBYP3BHKCN6OGQ6b2duKWYvRTcuJDY9VX0jbjJiZCtuVD8yaVNGVi4iU2ZFOz1uNH1QdnE/K2Z3LlAuWip8O0IpY0UpPyw1U2JSfldJIiFZK2lKNkxwMShQUGNwbFoiQlQ5''@;'; put 'put ''fFtOQlJqVHldJHdnbXB3USxrbFEkUjFuZFMjXlFKTSEwa0pOeCZvV2o7OmdfPUVMYmNYbWlzcH1FVGFRREB5Nz9DazNoVVBFZGtES3tuYmgwS08xU2JDSVEoXyguJUxMeT5feSRZPn0wV2VQSF1xZU8yPz8hbyNlQ2AqIlVpTVJ3KHtCKWt5Pmdee0dRX3pjfjNVKnB4fHEsNmRtUDZjdWkqNTUz''@;'; put 'put ''eENoITVYV19QV0AlQlNrfWI+SX5SJmsrY0p7ZVpiKEM8MDVOflUqSTtZcHt6MCw4PnArUF1YQ19ne2FaQy9UKm9FbWtTc2E5VGNBVzR9WVhkeWdJTDNEcWFELCp7dyJZS2BvUUpKUkl1ciRSPXk/MmheT0I4Y3pfY1F6SzxgQVcjfCI3PlEuImZGPGVIQE94NklNYEtrWWtWMHxVN3N4OXdUXXdY''@;'; put 'put ''aWhoPCQ9MXUldy94UU5jO09ZNmRzVWhpInNid307TXQ/dHUzcnJgaSRBNVt2NCZWJUtTKktuSHFhczxpUWxDeCVMUFliNSZRQ2BqKzwhNW88PGFna1cofHwkTERPcnlecnMlJkJOLEIoXyNfVyluPU1dUS5Vck1+fG5Tamg6NiN4TS9Jczh+KT5AMTltK350JiNCRy5pJmB9eEpkNGxNfCpNTzx8''@;'; put 'put ''L3NNaXFyezxjfl9FPiQ/RlZ0VUxEI3YyNVJRaFdjMyppZ0MreWM6IltASX5nP0J5VDkmOSpHfkE/Il5SY0YsX143K2s5e15YbnNAV3B3fD5jMEVjcXVSfUlVemNLTXJ0KXc6a197ZncpQ01HMFA/W2FMKjk0dVIqc1ZJOlRyZS9JU2RTamwrNF4vJmMoNk1dXkNvVmAvQXV3eEVRdCUpLDVycX1Q''@;'; put 'put ''PHdFe2BkQUNsI3BeaHMrNmRYRHMsRXxSUE88dDRtbiJAPCxlNW1xY2lTWlsvWGx5UjZSRXYiTVhjKGh+fkQlV1l5Llh2PFRlZzllIzBGOjJSMUEpNjBnUlZ5T0JyKTlSKmteYzooLEJsL3l8WDIkNkZOMCIpSn5uUktyc0tjXTdwdH1iaHMmTHZFd0J1YUdgQ1tWUDx0MHUhUy9uZ2BaL1ddSTp8''@;'; put 'put ''WmtANDQ5e0pzOmhVYjc6IUI6OjFUWWk6M3t2O1JsKzgwbjhWZ3A5QTt8VTF1QVtTUWZrOjEwOis2Vlklc35QdXQoVU9JSiNVTz1DN3B9MDROVnkoeSMqI01RUWArfkI/ZF8uWjR6RSh6P25nb3xkW2NWKCVBUHhdaWQvWT1bOTxRKXVqdTZgVFtUOmRgRnBrUmUrQnxFNEkqJkgpcmhKen5McU9H''@;'; put 'put ''IzF2bSU5WysjYUR2LnxqcVc2bl08OjJsJE4oJTFSbFRrMHAmRmRJeyVNZFRLe1M7bilRTUBrVSlWPj9hVEN5RDJuImZ3eVddYTFhMX0oPm4xPWclY3BXaTlLYW9lNHFTbFdKJj4pRjksV1FpPHA5ZC91cW05OkAjOTVUekl3Izlnck5ucmBbby82MnM/JGIiY1lQSUlzWzZdSz9uS0dnIy8lQGom''@;'; put 'put ''V2B+fDRxeiQyP05wMkdHX05KbF0kY05aZyIpJX13fjJFVUhhUkRzcGlGO2heYDVnd0AjdTt3eltIQjh8MT06fUFlXUd0XWQ3aFZ+OlRRSzJ6MiozOUojXk11aHl2b2Qwbn44MTV3W3EkeW0rYFQ/cV0yRDl5KXYpYkVzMjJjOmVqaTZzNypAPW1RK11xaEJTKUtYIXxzIkImcCN3VF9ud0I6L3xH''@;'; put 'put ''RCx9NjlnNHRfZ211NWsvciFneX5JbHNIdj9JJlRET2BnIW5AcjtbIUZNaEkhencsZGxySSV3Kyx5ZShzaCUwXWpIIzo5ISJKWHM0c2NqOlZpXz5fNkZxOHFTTDpRSFpRWXBAbiVERnddblUvJUUkSmRzWntrZzQsK1QwQ25uaXBfJClEYE4oP00pVz0mZShgXkB4Nl45ayY9IWJSOl9nYkdROU9J''@;'; put 'put ''QmE9aVIjK31MVVJXRShDL1VtdTBtTU8he0ArQ2Y4KzgrVkZaPipSfipvJEo6N0x9LkJiZ21wcF0yR0dFSjMkXWFudzZAcTdyS2lrRV0+cVsqSWFUbiJsNzBPbWp0Nm01NSp4NUohZj5dVTAlZFN5YSo3TkRTOSgxOCZ1RzNBaW9WfnFnflB1bDVqMXAueWVZOiYyYC9rQH1mP1coRyJRKD9kal4w''@;'; put 'put ''ZDkpdSNbYCx8Oyh1TiJJPHUlNzpldEw5KVl+P2xpLHd7Py4xTEBkKUtmJjlmPUhRJjE5aFE6UVMlS29fNH11Zn4wfH1BKW1QTXQofUosRWs9c1JBd11JPnx4fjVMOmIqe1U9KHAiLzV9YnYyfHpkM0U9bXddfUFOTFljcHB+by5wQWN9NCpKX3d8eF4lJilJOk80JmVnWzolM1ZJLE9XOitQNHFN''@;'; put 'put ''WDFwRGVrYjUhWEZiMTBvMGs8MGIqZXliUnxvKFlLc1BOZkFwb1ghLFlLLnlFU103PVBpSGFsQzVGcXMhOElQMT5CTmQoenNqUVU/K0lIe1RfflpeVFU2MUE4Pm03bDwlTCQwbX1QSUkxfntJMSxVekxkTWwzW3pzMj9hKGo0Sl1jSCRkUkNZLjRuPkVoTjBLfiR1eFtFJGFFS0hmb3x+Rz43PCVb''@;'; put 'put ''PXpZKndmcjluKVMiN15ZPE5xPSE0ZGhrbStofi5gImw6UlVNUC8xJnpFRnhjJXdOPUxiXmA3bGF2YHRSKnRNaWchPEBgSlI7eWhfQFcqR1R6c0YxakVNYzg7NkpRQCp7JkYlZWlyXmxZX3BkbWAvYzB1d2c1TVQqdmkySV4qKFY4KDFfRTpvXjM6fD5PMkgmM3h6flQoPmEufiF4e3EudHtDQkp9''@;'; put 'put ''digmKjxeNDdkQnFTbSlNQCMhc1tiTFZWQGBOJHNYQEZRJmQiejpnZmAuTEQhLFRXb2FFPk1RfGhpajRGTXhsc3E3NT1hTj4xQjl7P114OFg0a0w/Rys0e1NFWzh9fnRxX3Y3fXdJVWgjLkx5aE1qJS5fQ1siIVokXTozNng+ekpvMnE8d0V2WmtxPnhsbGc3IWssKk9lWGszMWsiJGZBPkpxKnsq''@;'; put 'put ''RGR4TyswJWJBNz4xVSV9WlYyTz47KTptWz1BcEVwVUkpOEpJKzNSPD1iVU9hfmFoTHI2OX54QmFUKUFJaWJOU0MhOklIb0JWN3B+YnxqKWs8OF58TERfOCZlISM3M2d9W21VJHAoZHxSODVWaiVFYk1WRTUuOC52WGd9NEgiZSVoVlhIS1BdS2dgRjZ1YypOU0dUJjBldmo1d3AlfkJPITx3NUkr''@;'; put 'put ''emI0a1B1aUpFb2BXRDhFcUg+eDJIZGdId3MjalBjaUUrKG9qKywxRj1eUj8qUEhBNHx8K0hrJCQ6OCsqQHo0a1NQWEc1fVdwcCZ7SEd7Zjpve0J0R0ZIeFs7ODF7N0BubmMlSkBwbEssKWBdeGJKcHpoaXAkMzRlcGxITkBTVD52cnl5ZztsLGU1NHdHKUQkenxpTHFqaEJ9UCt1WGc7MWd0KCZd''@;'; put 'put ''QGJXMkNgKXcjQCEoaWlmYkE7OWc/YXVkRDovWTtKcW9aWUs/bV1yUXtbYVE9XnpjejUlKFludms9em1hOWU7bFZAMXplQyl1OVcrTV16b2VLLn5he1FgelJQNGJtIjkqUj0qQHtXOk9qQik6OV1WRVU2bF9yIUhJSVUyaE1sO3lqfSY9TCtVeWw0QjZoYTIlTDZiWHZnTkVWajhIImYsPn5gLmpi''@;'; put 'put ''Q3IjSmVjOmNEbl1eQXg0LDR0P3NUI1dneipMeUp5UUQxXWlpMS8kYzFoeCp9YlFmM35jZDAucHUzeEJgV0hyTVZfbV9qRkRUZ3NIL0csKl0iYyghOlNlL0k7RiI6S2w8Q2ElY3g+aUtDOSR3IldwRVFbWn5GezZCUnwjIllwUGlDZltDY0gjK1s9S3t9OnZ5NGgiQE5KUHx1ZVNZQD08Xj4wa1NB''@;'; put 'put ''TF0zMj57WDF9eFFrbSFaU0lbNTVyNTJdZl9SfWhyKmlxMF5Iblt4Vz1QY1A6VCx0UyYleS8mW3hUOi8rKlBXVD90dkkwZHptZEMzKlhsTkxaLFtQeXFDTEYiSSkhcnR9XWNKSSxlJHY3NXFKN2lwViNJaSg8PzxyJTZ4aHIlcT02TXZ4eDp2ZEksRVVYYjQhUndYOCghWUZfPHBuYHtoUVI5Mype''@;'; put 'put ''PG1oXylpZn1NWSJDP3w7MDp1RyUiMV1kfk9rYV5EblUvQz4vZjMjayRZQixnOjIlfWRBZiVNbF55SVJrSlgzWzkvImEqZWEmTlBseWxmSVZuZWJxTylrUy97YDErMVJpNzczZDBTUGlzMDA4U1VXMFVTLnMvSXpWPSNMOlo6fDJhZHtUQFdjI3YhJU1Sd08/L3V+Pi5eM0grTFsyRWgjUHBveSRf''@;'; put 'put ''cSMuPCl9Nkt3bC9wIUs3ejtbWy9yTXxPYi4lanRJdjVSM21SX3FeUzU6OGJhVClbVWAxKW5GKXVwKl1MUENHejgpOElET15kJlhgdzV3YCQ+fEt+fmwiQD1nPGV8M3cmWH4sRUlEMnFUUGVRZEQsbHFOcS84a3crfEQ9NCRMNnNlPzgzJiFzPmgqWDxwdHZrdC48elhDT0F5b1Mjamc2OithWF08''@;'; put 'put ''dVsmcj9xKyREV1YpVCo8XTlDKTtbKis3QmxpME1TLz1mW2BxbHJeejRpcE1sc0BURVlyQj5OIT1CSDgkY2Q8TClhdGBMNm9NQ3Q3WGVdKTJNQGp7enRUSlUkMmdRZ0lMY3soa3ooIXJrUitDblZVd2UhO3U4SzBpV2VmTFsvKlpaLy50Llo6RmNdeFova0pHbGglaFJrMDVhczA4Q1BjazlaZCFQ''@;'; put 'put ''Yjg8TmhLTkp3d3RkUk91RGhCR1BANVAkT2s7fj5uek9kZjR1VUY7Kkw6NXttaCJrTDZOY3t9MUV8LjJlTD9fei9nb2dTdzN8Tkkoc1dwYEpCIyN+b0Q3c1tzJShqYSshRDE8ZDpmUkcyX0t5ViwwUEkldHF+XXZnaS4zX3o4e3EjaiIkVFVlejxBZnhIWltUQWVEUH5MeT5XZTNdKz5ZUmJ8MUkv''@;'; put 'put ''TkIjP2F1anAkdGVXdX5feDphMjkuaT8+KVZsJSx+bXIyLzZVaTkzQHpRXU83NiV6cX0vI3UwRCEuNGw1cjxvWDBeNz0lSEc5Qm18akYqa30iWSFbfSRSbHVuOjk+NCwxI3lAbTIxa2x6cVRxe31YS0xBUFl0PE1FI09+XWoyJk95TXVIcDFMPXgweWUsSXhybGNvfjp3I1FCRS8xWjw4OnAlRVEy''@;'; put 'put ''cXMkQnlvKjE/JH1kRHtmMUkuPVJVZXExQyEoakgzRnFjTER8KXRzTEVeQ0VlLj1ydm07RnBsfGBUXj8ubz19TDdhKkAvRjlsdG14JSVrYSNCelZJPEdhVktyemdmVyFIPHJdfVZnakx8Mn5IU2N7dTE7VGo6MEZwJUZQRWZdXmJ2NEVJX3xjWFFjMXZwRjx8Ij11TkE7OCk/a0dvWjd5ZGU6b3k+''@;'; put 'put ''PmhMPyNsZiM1I1Z7PXhBWSklWEcvK0cpa1MlUChtM3h2aDoxVzMyMzZ1YTxwYFVQVUc/UyRjQiNralpVMmp4dDx2VzgwTXJOfjdZUC5jOWEwcCpSeExDLywwLyEhayt0eVdRZGYzaUk/SH54WzNBJiR5Uyh7VFhUM3d1VmtAPiVVaUNFJThmX2JWdCR+Xk1IYVVtNzlHNmtHeyJWejBtd3ZFKHBR''@;'; put 'put ''fjI2Xy5WJkdGV29qJVk7Ryo6XUY2d2x2blI3XTQuNlReSWk9WnJXUTRZLmJ1TVspQjQybkRsQD9FWip7T1laa1dZQD83ek8mfllGImhSZT5qZzA+JGtkWiY7ZiNaeCxDIWF9WnhKT2EhK1Q2KlUmfStKYFtLRHozKGVYOlhsWGUmeXZXcTZpd0lwRWtzcjBCRzBHeiptPGZreDdqU310aXlFQ0Mw''@;'; put 'put ''TlpsKFhuQSE7KnBtMUhNKTFxZz5ldUokbFg9S2UkTV9aO3ZaQX0wfTE+SHQsQGJEcjllYlkqdUZ6cmdzP3VfXTFdYHkkPHBiImVwN09QK0M9NiEuPnIoX3xidWtbUSlFZ0JWYFsrQDpncXcsX0sjPkVCdnNndmhnYktvam9xZ0Z6ckg7KC9IMTt0JCZnRmplb0opWEloOXcvfnRtXVNpOU4yVWdq''@;'; put 'put ''RW8/S2NwXjpYR3tbdGxKNmw2KXZ3JnkmdnRzN2ohZ15ZZysjezJmdTVuUl8uWUlAR2dlU01Ffm4vVlR9VmlrUDtsN2ladHN8SSg0NUtuKENGMDVHM1s1PDI2Zzo+SFdYYi9sOTx4VHpMXiZ4WDZSX2kjSmtqVl50JkJaRSNTZzZmLGk3dGo6VmcsN3JjY11MSSUhZTdea0JpO0RjQ200a25lYC9t''@;'; put 'put ''TWFAWX5ZTVtMPylFbVtaQU4lQ2JFQy5WZ0toNHVYanYkfi9hVSgoSGNVQEF0fWg6eXJgbkQ+IWZ8UT4lW3YvYSwqXmx3I0FXSiw/PVhRKFV2NkdiRzlTWnk/cDlfQF9gT3Q/TjVfJTl5dTlgYGFtMiRRSExQcjcxa0ZsZCtgZTczSz06LzR5ZFQvOlh+RixvJjd1P19vNFVsbTRUemBjV2d0QSso''@;'; put 'put ''TEZ2bitpPjgqSCkrLFFdNHA2WkZ8YH04bDkwOUVJUHpHZkxAb0AqU1VtcSFlcj87Qk51PE5Hdyk+Rkh4WD4uMXhhWXsqPyluPClgPCpuK2RlYUtIOSVlVUpJc1IqcjIwNTUyMTdaajFKZEVsJFIhNW1RWXVid1FUN0Y3cVNTVDRbO3IxfEpHPypCe2pVYWNPeVsmNjoqaDFtS3I5RmUlIigublM5''@;'; put 'put ''VXk/SipbNzViUGU1WD5MSGI6P2JiOW5oKXklNlJAfXpUJXpVZWlmJHx2O0cyMz4uezhLdUdkeHgpdWJ2dG5waHsxUFcrK3ovYnpHITtUdUpQdCg7MGxVM0wrX3Z7RDg1TyxDNzRgaW1bKCFebExrQn42UHkrSlRrTlolUEA3aSZFdFJLPSZRdW02aVNDPCx+MShuKzJ2bmd0UFMjYSIzZWZnM0Zp''@;'; put 'put ''VEVfKWh2al5ML2ZFP082aFNgQXl9SFY1bkosOGZdaWVBQj0mfSVuOTc9JWN4RFhxXkJocEFHSGIjeyEyJXhPQCo1PiIkQmlVOntfY3IsL3d5TForbWVDPU17UncmK28wJHBlcCpUTSlxUTVLSSJ4fkJNfG1STDpPTXghP0tydjthY3gqVDUkdlp6ZWhxfGtsV3l0ZmczJDQjVVUvOlRhWT8zTERt''@;'; put 'put ''c3FmbWpHQF1MW0c+YEZkbVNyd1c4XU90bkxleyZAdjxQTEBUN2ZFNEw6bDp4OTUjYzxwbGA1ZDNHXXs7eSE2MTdPVmZxJmJXZHtYLztIbWU2eG1DOG5ENCxIKTllOTJuUCw0OVBrbnFla198djY4SCwhbWhPMCoqPlhRKStqKSk1OiQuKD8iQ2QxayV2azNSMXopTHdMTFAzPV41dEk+YnxTbSFQ''@;'; put 'put ''Qyx5MX1QeD1GWTZtUzUoQkJ4XTM1e25vaH1NRCM4OVtPPFZUdC5GeXx5fVhTQE80WiwqWmNHS2ZQJWYjSkEiXTlSPyhyZ0RYQ09Lb2Mqb3Z9YGNBfjkrSkFEMXluSDE3ZXg5V0RhOWUuZ3plTmdVTV46NSEqWDR8UztvSmhIa3ZTcm1vMVEkYUQpVHMyVEM+QkcxNHlqRig1fUxpWl9mTDVybSMw''@;'; put 'put ''I0xKXThwW2x5L29UeUttfDFeI305XyF5eXFgKWxgVVlHakEwJWhyQVRZekpDYFZjQWNTWGQqdnt1TjciPHtfUF1fdyhUa2JvRzd4ZDEhfXFpP1cpYX5AOGFEVTtJRHNRej5OTF59dlZ9YElJO1pbdGN4XkZDK2VYQDdnPDNsTTJrYnUuWjxkQll9PlVaNS9bd1d2ZCppS3YyKmdHP3VQPUZ6eGhj''@;'; put 'put ''ZzdGem50eSw/UEs9RkZEXURgMkluUF55fTB2ckBVbV87Lnw4STt1clE8RkQ4Y3IvVCkkPV9nYihob2Z5OXUvVTRzcyU/d04vIXRoNmZaa255KlkuYG4sRkBXZVhnYVlfeSxYTFhQIiU0UXdxMHA9OCw8UmZ2bjR4QjBzUnxZL24sYCxXcyNXQlhUZTphWH1fbnZ5IllTZW1beE43KT8lQk9rKWBp''@;'; put 'put ''VEpuYz9QSyE0KCJXJEU7cmErVSkoaTwxLj97YlZ3U3U+fEtySXR5JVo9OUleYSRkfklQN25leStWTCQ6W3hUOl53bXcvbFRMUlRbdWMjfmVNfV0+WC4qRUVyV0U0LFUkaEJubVlmJHY4IWxhKUtANmo0bipDQUtUQy9+UXg5P0VYWzhLQHc4b0NRcHZCPERaUjhmNGZERHE9OFZuLG48PSNCNXg7''@;'; put 'put ''d08sKlUmImVKRmlydDhJVXQ+a2JIX3E9Sil4eSF9Pkl0Yl11N25kRUJaRHN9TDZdXmd+WzAsZWYyOEBsPnpvVThNSV1XZTA6eF1xWzM2VnB0YmM/Y2RyalY/amRrQCNTI1BOKCRGJk5VfCU7JlYvQjhTVml1X1JQWHZZLCVKfD8xRF1rWTw2fGdtQmdUWl1lfWRKZWhiX1pmbjpSQmt8KGo/dWdp''@;'; put 'put ''WjpZcFd0Q2NfJE0qXXxHKFV0I2FbMl87aWssa21vXyE2KUR5X29QVV92eWt5ITRObiZ4YVdfP0J1I0NDKHphflgrellleHdXfnhjOEVNdFZ2dlg4IUJgcSp3aGIrYztqLG4re3BHVHo/N3UjJV9NIzVkInldZ3NtYzhWUi8vWnJBKlM+M1VZT2ZTXnpTJFRAR2ZZNmIvRiwybDMrcDhXJkdofm4v''@;'; put 'put ''WGxxXyp1fCpzKCRQbEh9NTcqcWlGUmJ+UDpnOmljWHZheXZXNXxlJGUwT1ZYZ3V8PGdDVGBBK21EPVs/c3A2JHE/akRRSkxmP11qeSYhIThVdEwxMlNSKGdTfTEqYkJBSjB0OXUyO2MqOH14YypJQDlbQjRUPGwmYE1fYFJoLzsoOzEhT3lFWWJKKyRxY3VEeF5GbzVgP1FtWWlUI05KezFCOHUi''@;'; put 'put ''O0QxTF13STVkXzRFKUJrPysyfiFkaD90R21SemdbOSl6TEQ9T0NsbCUuTVhlWGlVJEwrcVtRTSxiUT9uNUBUXXlQK2h8Wl5naUVPPXJqcjZoPFkzZWBjSiYwJUY6b3loY0wkfSpjImNyRzE4TF81cTx9c2czZnE8LHwpQUkhJiFSWmJ9YCMpLFUvYUxEZ1tSKndYOVdbQC9PViM8WTZaZUFNanJ4''@;'; put 'put ''MD02Imc9MEg4QU13S1tiMWpAPiVUaDExJn1WTF9WcWRfQ3dARnpteUhGPVNKOnB+dnNTb0g2MVdjcEdMcFg1WiYlcihnS1REfDwuRkg/I0spay41TG5CWV5zNk1BZWR3JUY2ejJrbCZ5KWNmdyRzT1Y4SzZYPUVKRU1ePWRbOG9HdGMmUHFFSj1uPGh3YEwoYCJKeUtLdkkmRHN6Vn5CMktjQG5M''@;'; put 'put ''T0c4XTwzQVdkLzlgQGxXPSY6JTJeQHI1anFbfmZzeXtISEV5Mn1ifXlXODpVQHhUPFFOMG4sfl9oTEhKPmNCNikscXRQeU5sTFt0YDImRGwrcUVKa0taZHomTyVAb3tIanddenlhZV84T10oei9OJUVhI1IvVzhNJG8qWms5eURMZyk9c1ZOajxANGt+b3Qva1ljV2lCJTtZaGgoXX1NWHVDP2U5''@;'; put 'put ''RitTS1pbamVVQXUhKlhlKEkiTlM2MkU0eGdhb2syZE9xJikhWkNSPV5bcEhAfGVSc1tLU2dOQ2k6RlR3XmpPOlBfUHp4bWIuNFZHQjR4QmhMS3hwUm1QPnxQYEVjJnI5Z15RSl02PjpnISNUMTUmUn06MjVgPWRhLnRQdlM7a2wuKVsxQXpaaD9ueWZ4WFQ/NEZUZCUpP1UmUGp0TS84IiYjYyt4''@;'; put 'put ''amdRKU5UfGF+aVFJOTclNmg1bm0/I2opfTVEU0R2eExiZF9QQXFxV2QvIV96ezNWbmxpZEsjMiRyVDVoXyZfUTFdYGJgL145S3RZTXlkWTFjUkUlOW5oTkBNdioqT0I0RD06K3xaIiQjQzx0ZC8+XWRIUl5RYXsvQlQxRzNdL3BtYHV7MS5vUngpezVyP2kpIT8ybzYrZCNPMjJqYE8wMS5hIWUw''@;'; put 'put ''ZWAxLjJoJmdiPVYoLDtQXlV5IkcuZDlZNFJRbWhvKVVldDFMeyRRPmJISUlDdXY4QTdEaDc1bmB4dXh4XncuZmxqV2t5YDFiWXpEODxVLmZ6IUI5eTQ5S2ZRUiolVWo6VXZ4Q2QqJVZUMilENFBRR0xmWCFScGRrKXVbRm4/YytZZkRdcGd3PkA8RDJMRTpabUJjYmovSmQ7eXYlTHooV2ZeSFBi''@;'; put 'put ''IWBOZUY8PkZTQXkmLigkJHo3MVcufSRzJnh2eG9jPlIoKTJ+KWJTRks+aURiTVchdUpkKE98cUU4aGcic0ljPCxjSWNNNlhGQ0ltaHUpVU5ILGhvRXQpLGN0NVk4c143QjclT3IxK2g0VDE5TnZbMFdUP2JPTT03aX4zeFlNfHhFcUQsbUs5Oz9wZEMiIlpPKGl7ciIjYmFgJihVRDpKKjAmQE5k''@;'; put 'put ''eHJyT0trdmckY3UqPiklcWsjeFFyTyYjYXUuZ35nO25CR1NMQmB3KWZHTi58XXB+UkF+REhOV01PYjB2R2ZOWjZkOVchNG5PVWV5ak9mWTBae2x7WGtIODEwdjhLTX1eXUI1M0hhdnIkJG5wUW91M2pGYFtkVnsycV1kbF9TQCFyVTFVZHtaYSxxUjBSM29Fd1MpUnVPM2BiXk5uTkYqYWFbI2J3''@;'; put 'put ''UEI4X0R+NlA/NXFGU1J8YX5gS1leMXJNU1ZmUjgzKy81I1FzaTAuaTFfYHEqZDl3R1IxMWY+cUg+dE0xSEVLU1EpW3hhSW5GdDorT1NzLjZ6TCtyVE5eNyhHJjVNViVVLCZQKXc0MkZFWEgwTDx4KitbXk81N2JjVUUsWX5MdEloMykyai9YTCVlZVpJPEBNKnYxWi9uei9zLHhtbTxaeUpaak9i''@;'; put 'put ''NDJ1aUl0aDtpLjY8bUFWKy9bTVFHYzRbbCwwKVNWTHZhIVoqK2B0VDRQYDRuUjV4ayttI0dqL3hWaGd0dUN5OkpPMVdhQnd8MVshTzxQZjZqZD1uMjxTbEg7S2hUeUEjS3teRXx2OURyWTJSZl5QeyVUbjZIKDl4c2J1QDldJF13JVdGcz1tUSMjYzJEYlB3SDtKRDUkOUBRTmlNXTVQLyFzc0Yz''@;'; put 'put ''ZUN4ZGVVMHMxOXE0OT83fTlyRjp2e110SitBZHBKclRqKiRTOGU3ZkdMKGQqc21PWSlBd3FJNyt0MlYpPzNJI1krRndhMDM6RFt1YDMqcyYyeFFrLGFaai5IOlEuOWZJaChrPDQrPEZWS3NeTnkxW3ZPeHF4aypzOTMjd3YoRFZpWV84YUBWbXAwP1VgXkhnS3heJVNdY19BKF47dUVmNXRHWTFa''@;'; put 'put ''aU9Qb0M/RUFNOTpwMFs6YUcoQ2p9K0Uwc0pGQFlecVVZPU5eXWdDODs2KGtwVHhJaDlsX2BpSmFfP11mRD13eGRSOm1TJihkTUREVWVYJWp7YHV6Qyk1V0BEMEcqVWNGTkBfX1khaXJRYnpiODE6VVZtU1ZsS0Z7WjthLENodk8qaT4uM0khRm5pS0Redj87WkcrVVYja3hYM1J+WUQmcz87UlI+''@;'; put 'put ''R2xBWl1tQDxmPjsmOT5MWDA6Rj8uO0MpVjBhakhLRCM4d1hmP0RJczE4Mm1nITxzVm1JdWEpVk1DaDU7cSN+PVIuIV8/Rn1lLzF4fGhIdHBxQGxNWyxkI0RZSWljNXEmOXpCMzlyXURNbSMhUGlbW09uNWFIekpuNVcme1dRO2hRc2xOb3MkX1BzczIhSHtmTVVyd2koOkhUI1pGdXI0YURWVHha''@;'; put 'put ''NU5Uc31OMiluY3g3RGZZOkR3elQyM3pRe09mSitNRW5nJmd5e11PMSheP21GfV9EOD1qaiR5c3ZqLjVfSSVPSGhEV2hgJFBlSEk7R2Z+U1RnJFVERF9CNlM9MWNnVV9wKG1xPz8uOkU2ZS8hNW1ROjtZUGRFd3t5fU5eeExmOEc1fXFWTUs9XU1jRUQ5WGh1UENuSlBiLDszKVI5fWFDOCxmaUx5''@;'; put 'put ''bjxiMzg6Nmg5KDFIcE9GWSNQdkleKEx+QDFdSnIqZDVlNFhNNmBFPzA1c2xOVlB8Xnd1YnU5V3hKXi9eRG0+MDR5aE8kZUZfUkA1bkRsdjkoTTkyMEN0PHluZylbJTg+PUxiRVNaOSw8KU87USZUTXlvSngmamo0KnhVOn0kWk1pU317OHNFWjorYWR8YixxfF0mQW1zVVVbRF8lZHN3fWgofSk/''@;'; put 'put ''YTdZYWxeK11kZEs/VWh4bkNtZjooWUlTZ31aXnFSPkppKXciLEBNYz8vKi9ZcS8wRSpZczslKn1uYEwuTCtRISxQaz8xNSJdTiM3VVFSODRkQkRgaDdFIUZUYGAsN2ROSVVHc01dWUJOJjhjRGU0Xl0pTWRRe19ibmlZbWhKKTwwTjw5eDQpeSQkJjdDW2hYSzNqYFBmdEh0VWYoYCFWd0BAdy80''@;'; put 'put ''VVNIPlZkMFdJIT0/Ums+ZGY0IV02RmY7Iyl6OShUe0FlOURmNng6OClGR1BsNjwsSS5CKGtPQU11YC86TndfZEAwSVl0WzMuVkYmQyJWIl5JREx0NWpyOG1yNXpXRGdbOjt0Jlc5KX0iM2Iqcl10XnYmX3tYM0NfXU1YeX1oelJBVyRCPCpjJTsqeiovKUFOSkVCWCNUenFyK0NEUTVVUElIRXBy''@;'; put 'put ''cDpdfiVVYjdgPGVIMlt4UHNNLClCbHgzZ2UoLldfI3Y7KigiQ3RfNy5dPCNsRFNyWDdGZ1crUjYwTkpHazEoOlpueiFQc0ozXk08Klo1fnBlfUtMU300LHJ3dF9ee1hhN0gpMmNpIVhBekNOQFtSTHRxLmZJMWNdOEF3XkswWzNYU1kjP09hVUBjTS5raDJ6d3dwV3B9NlEwfDhoRig5R1U6O2F5''@;'; put 'put ''JDZAInxpVHQ0UGB6KUtDO0RNWytRdkM8Pi91IjFZVmZCI0dwL0pFNVFISFZHUWp6cztEO1JQbns8dGRVcmg/YTtdNDNPYkg4SCU0SndJNUVVUHBNUzIiRUNsWFBgPSxQQXttWGpuP3l+QGdGY2Y6KH1leVZVQVdVSko3YSRtdmFZcWBWMU1zQjhlQyFZIjA+V0NaPTNhI2o5dC8sfWpNQF1IVDVa''@;'; put 'put ''O0E+ZXxfXVNeYWd0QnYxQUdlQER7Lm4wPWd6ZFRkPyQ8V3BZVWd7R0xyNjwoKyVfPmpjYmZMK2s0ME18QiN3KVgjWjZIeH0qbHNjTkM3NmhXVEhkYWg+Ryo6UTskM0Fycn4lL0ooenAqJTdhPnRhYk5pTiRdeHVDVyVoLEMlTUBSN3lHM2xaRmhVMTldUy9JS05uU0JJbEd1S0I2JkpCVGt+b1V7''@;'; put 'put ''fDcpdDE0W3JtNDlQUTFlUWgqYXIpdHtxeX18eXVuWlEiRylYXUR7Rj9PTmxlaiE2fSpVQml5eDw/TUlDd2ZgfkExWUp5emlkYWJyZCY3SzY6KiNCd2lmeTl6VUZDQz93PTFWeXdafkZkZXs2V31TXXpWUj1GJDIlbio7ai5RMFZYfDZYK1UuP0EiW28oQCV4PypqeC9TX1RmUipxXkZZYmlCQXpU''@;'; put 'put ''VyNfImRBaUtacm5xMT9RLlVrSCo3OGBUa1Fjazspb21re0JIcjVGOHlBL1o8WX1IcXFAYSNZdTlVLjBMRjhFdipfOUwxa2p6bVgvcXZtbVBDWC4oXyUmWnFSMCt3fCheRUxgTGdmZzBTNldxbT1EVWBVSGp3cDghcGJXbCJZcVJRQVQ0W0ZFT3JbOTxWJjdla117QllmeiwlTTlIQChIMzQ+VU5e''@;'; put 'put ''OjtQZSkrQ1JJaT5HS1pLdyUyTlJbdHM7XXhSd3J7RjsoeldKPjtKbkxeVzU8L0xzP1NNXTJOVUM4OWNvPUBgWShbaDdRXUd1OyoufiMsYjBMbEIla0xLVjgmLkZSYEsqe0hhbUleR01HOmlmKy47TD9hMWx4andfNW9rX3c1eVNnRTk+MXd0emtZTSY3Uyw4PHdZRGZnemZmYV9tMlBNZW1kSm98''@;'; put 'put ''UzZyQzdnOnVveVQzKWpIREU0dEAoOGQ3Q3l9d3h1O101WCFKWCwuKlZVWSR4bGVtWXlNU01XLCo9M3g7cmpNNXtrbkdOUGlFSXFOVCpwNyRsS0BQMFdIdmguR0xOVD1EYng3K2N1Q25AXSl1VlM5dyQjUG4sZD5jTXM2akhKa0ZBaU16VUVYKF5WamUlaDN7als0U34iWXxQQGU1LHJlTllqMUBA''@;'; put 'put ''UmIwMEBZeEhbYkRHLDUie2B7VTEsemhnLC9sNGBNcV41djA7ayI6V1pCRmxicGYocF90LHF9ayQlR1c2UWMoSUY6UH4xRnJieEw8ZHBMM0J+KGNJSnAraUVhPzImVG4wZ1MyY3koUXF2ZildUGc6fW43UC9CbVM2QEUlUDNzJC9SUDQjRkV0RWNUXkpeVyx4ZjJpcDJTZ2BuNTQ/TjcsSnFpQGEs''@;'; put 'put ''OFdvP3E+ZlpPR0Zudyo3b0VHcks3WVlPIW0+fTsqS3ZvKXJdN15qRk0uMSYzd0hbWk56ZGAzOE1zXXVVX0tDbzhnY2p0OXErUnJnZ3EuU1tSSHs/NUppSy8laj1sU0M0IVpgcFQ9WDZ3V1o1TSJCPnx8ZEc2bnYqOiZedzxpW3Z3cyQ3THEhbTRBNStMV01MJm9ZdjdVWmdbZjA/JXZneV5hMTJS''@;'; put 'put ''NX12dVYxaCRsZ3NIR0hrTURJQFlvPGZHJnNURXpBcHkqZy5JMGd1ayw2MnhvPzYyRi5PTS4kbVV3UzlDNzFISDg4IlFueWVXaVV6TDpfJWx1eDtQVn5iXVhGUzNkIn0+TmB2SiZCXz9QfHNjTmZuPWJmVUxOMWp4UT9PNjdmbyhuUiV6X3Jrd3M4NEhXSW1NcEMjKkJsbmwwNlhDZysla3ZXRn0j''@;'; put 'put ''di5yeldwS2JfRHsvJDUpWkV8eDxdIWNuajxTV1pVdXcmTTBlaFdgN2F7V3Jwc09MfDZLYmA7RUBWRTxHR2BEVGAhe1ROe3VxYnFxW0xOMHwzKyNReCVwMW9CTmR+byROW3o7bGc1MTAjKilsbHB4Ll1MKF5MbFVWI3Y3SGN+Pi9Le0ZHQ0dXfXooNnBrX2dfV0Zhd0EialU0JVk4aU9bWlM+bm00''@;'; put 'put ''a2oib0FjfigxcyFKTkQrRktDdmJeempaJE8zZEVSfTZrXmJHQ1lALj4kZnQ7OTtPWTQieFlHQlo2US9taCZebHMqT0x5YFI8fTthJVNpO2oiTSFvQVVDW3ptTDNpdjkxNHJTLyNsYDI1JkhudE1qRmtxWTZuMShlOzlVRjR+ZFZsa31iWWcsWltqUGtsSkY6V0RnZGA7an1pS210WCYpIW04KjJ+''@;'; put 'put ''WCttM3t8WlM/bSpuPTkxImtCMm56R3lWSyhIPWF6PHNkNSE7QD5xfiZbUT9+RDJhRlkjXytTWVNUOSFvYUQub1E6azJdPFs/MlgmJF5RQTVtak9fWUAyL0Q1fHpjSHt9ZDFYb1cxKDpJeS5UaDx5ejNBVXY7XTs9QkpGW2JbYilPd0VgYXReeG9sT31iUnNYMX5KUnV8N0BoVnkhdCt2VStzJHYw''@;'; put 'put ''T2FlaD1JKnhlS0cyQmgiP0g6YnhvdCZuPV9FbiVxPmtZdi8jOzFDWjBUa1BtQ3RwMGt2Wmh+M3tGfSkqWV1udCtNV3VxSStVKUd7LyJmcmh8MVFaeSo9VUxmb0Y2YCJxWkxkWSNMfGNkcGV6fFddeVo/VSxBSGZ3Jk0+b3xePnE4Ok1NQStORWQpdDlmVkgsMHEuME5Bb2taRjRBOnM2Q1hUTn5u''@;'; put 'put ''TER0PktxYG9sSyxWdDgvInJPTjpALkRWTWRaVVcpWzFINmN8b2pteGUlKEEpQTolZH5VZ2o0TVRzPXowIUcjMU9dMngzPTRiQlJ2MV5EaTBeT2dwflpfU3QleXY7WWQ6VW5efUJTUShAXW92OXN6c11bW2NBIiVfdGE3d24jeko3bXo5LDBlT3NjYCw+ImsrfSxRY0Q9V2BgT3chR1t1UnVnKDc8''@;'; put 'put ''JCpdNClMRk9WOypXSkd6MylOZE1BMyR2LmlmNCZpbS46Q3tDJiQhRmQlckZpVmV9by59I0NWaysqfi5WcGtLZTl1ajBxPjRqVU08KzFUSCR0RV9EPSsuSS92Ulp2Q15IdW5xMW1pLm80I1ooOF1CPF0kYENdIigjcHBeZl5jPi5gUX4pYFdEUjJpLF9Xc2MrZypXKT9HfGI/UTd+dUojRTgjcClm''@;'; put 'put ''RjBEMWp5W3xFQnxReTwvNHtabzpHdG1pQGolVj54SUd4KVlMfl43bHxNdyMsJEV7SFFXQlE9cGIoRVkmaDg9Tjw8WCZLbD8mNGtRNHYzcmN9aTRbJWVvUVdXKFFsSFlIakFIdFZkZ1Q0V1BAVj1wMU5RckhxL3NjMCErMThUfUpUWEIiNVNiJHV0NStRSXpJNigoYk1iVU14YXNoe0IxMXRlJEVN''@;'; put 'put ''aU9lejl4XW5nQUhSb2x8YU0kQDN0KXU4OGRnOEIpW3tPd1tuJG4+JVo6cTM1TjFpamEiaF5rU0grLGd1U1owJWM/JExmcHdzUTJ6MTMrZW1wVkVucnl0b05KfURoIktwRkprfiIsLmgrc0w1W2x9PV1oSyVnUz8zcmZGTlhQMVMkTFRBL2luX0cve3soKWc0dVhJRmhDOjQ4Qm06eXIzWyNMaklv''@;'; put 'put ''VSxYWTROdFhPfH4hXi8xdSJuRTtNKyhXdFJ4NHwyOlIzdT5Ce3BnZDVsP1pNNHJhKSo4UUwsYHZGYz9eel0wYnR3QXtNVlZzakxbUVZ8UW55K0ZQdUk2NCVpMyIkaFkyfjY5VXxIKDNSLklpODUrO3FhbE0xayZSMiZiIUdWfTJXP31ZWSRvPElwN10qZE5kMiVCcD8rOzpSdkB3PiFHXmslUWdk''@;'; put 'put ''eDkxVW9uXntERFJLTGs9PnE6YkgrO2I0PU1ZYTxkI2g8Xlp+ZXQoV3RUNTk5c149ZyRdVHtLeDx8KUpGeFAvRy5eWVpjRGoiQEEzLHdLcShkMEw6I3pkVzV2ST94ZklpQmx7ZzxtSTl3eCYybkNBZFZKNHhqfmUuM0hHb3p1YFBvQ3BsMT9AbzFhQGwya3xWLHV1WX5JRVRie1BqO0ZfeX5WR3ZY''@;'; put 'put ''JlAobkJGdShIODVMZUklfEcyMD1PK3VhVWpUcjEsSzN3PEJULj5VRkM6S2JCZGVgYCZHL3kuY1tVOTk7XnA9UUloMURjPjI9dXxiWlRXfTFnOWdBXXB8YXIuczg4RTQxM0pFeGYlcW8zKzxwN0UheF1xMjpMWXw9ek9rSjl5WSwzVzZvci5HOT5qMTYkdXxCSCgqeVd9V1t6RGlDZ1F1a0Q/VXpI''@;'; put 'put ''WDd8MGN+cTtgO19NfUVMN3s6eWd2RXc+THlYZzw8WWwrdl5bUFNSd0J2TDtvPEVIOFcrIz45MHMxVWFvOlRQTiZFWk8kL1N5VS9ROXomPDpHRSt2bXw4eUcxVmlKUT8zQSlpKGtTPGx7cy4xdE52QV92O0BsMi5tME8yLkgqNHpaaUhhbmQ9YjR7ZjFGOWlYLls+YjE0Ky8/KlsvSn5KNEkxXTAj''@;'; put 'put ''ITlHVXpXSSlQJT4uQ3MxY3V6KHRWSF9YOyIvbG9id0tQVDAlVzl1RWRfO0coWVcvLkVuailLczBmMHFwQiw8KTolLEBONSVqQHFNSn4mNTh+alFgJk95VjEyTD0pRT1hVVEhTTV3NFY6MTg6dnt+dWMrZ0dHaCQoK3pHOGVnNzlPfCsjJUROIXUuciJmSFRYdHRjfE5KQ2R4fD9WSDc9dD9RUEFJ''@;'; put 'put ''MSh3UyF9JWNhSHlSQWhHfk9aODducjVZdnpRX18sZjNDdnkxRGs9U3x2XjxrRlE4fTtQXTl5PXNCOT4xPyU3QE53clgmazFNMm9nPWN9Y35KX2ReL14qTCppNVIxUFNEImBJb08jUkBGZWxQdCt4NWBzaTg6fD45M1JpanJmdmEofHUpVm8vdUJuUU5xcEY9P2g9RmlWIWR9dnAyO2skJG1zK1V9''@;'; put 'put ''fjZYV3hgPmJjWT12VHxvM3szSj9nLE9JbzUvTk5DYC4wTXxgJkQ/USRLdjNfW35YfT8vPXldPERofC5aKVtCWWYsPWlocixZVDFLU10zWUtAVVciWHs2N3JMMXE9cnFePTVkTjZ1MVpdYSVKSjdAPVdRclRtZ1Y/SVF5KmRaezYxQTgwOzQzTFZtdiVdZTUrXX1xJC82cXN0a1BNWG9mZ1o+alVH''@;'; put 'put ''aWshYnNSQGU/Zj8uWWlBeUNCci8xTTJOYXFoMV1qeWYsIzFqIjEkdDgyeHM3Zz9uUG02WD1JJXRyU3B5fD5qW2x3PlY4NHAuL1BsVGxtIncseFJ1QVd9MjZMSnpfUWhgLm91aSNRQmxuM3J+L25teEk7Ni5hTTJkY0lCMStvR19sOG5LUjVHVC4kUTY+dkMlMGYmKC81Zm0pITkrRXZMVSZyfW8v''@;'; put 'put ''dVVVTHZBR3NSJm9BWU1EfihXTWlkWVJFW1ZgNnBLNXJnd2diPyRmNmpZU30vRzRnUC5Pfk13WDgseG1HNk0kIU0pRU0jOnV6anNVdFtQfWlzSTxUczhlOntiRS9xQSVTKkphfTw8SUN6eyl9Y01UY2VUaWpHRVkxb3kpKVpFVmdRcShmVFVEd0tIclg+T1pEY2A0K1N+IXZsVnZtLnpsRG1UeTkh''@;'; put 'put ''RlNEelFhaFBuLF5qN1g0VCtZOmxUVUc7JWdDSDEhRUlwNCFQVEBzPUsjT2BWfGtLbTpJMzh1TzNXNmk8cHwpa3ZAOG9KW1RvenVQeD5SKT0jMFlhYXtYdXlsTHMuSCpLNEA4XzddYCZSVy91amFyakVKWy5od1Exd2lfW3lDR1ZlMiUsJC9QWjhTNzYjWEhII3suSmRwRDR6Mz9HdF1ROUxYazk0''@;'; put 'put ''R11kYSohIUsmWHg0e05vQ3JWckxuPVBWc21+STQ4YGNVcU87ZUF0MiM5ZmQhS0glLnpJIWgsMzRMaHFhZndoNjd+PmhBaXZla1k8JCU9RmkvIzsrc0xpcHp9ZXdRUXl4Mz9fJTRKKXdyK0clbE1jX30rcTI9MDBBSmN9ZmB3R1JDRDUuP29welQqLGc6dWliKnUyR3FFRTU2PXMhbntzXTdOYXkz''@;'; put 'put ''bk5wJVFbT2A8eEc2Yk5ZSyZDKnpuOGJ8e29ubzhPYmo4JSkhQ342eS9TJUkmQD1rRkRQVnA3VGM7ZykqTlpEQ0IoKz9TSis5Xj46KElxVFJIeSZNRGBeMkJhRTRFZ0VpI2xyUz5pMkJvNV5aWlt9L08yfjkzMVk5S3lIIn1EejkiaXdfRGU5bkE+WjtkV2VOL2VpcDcxbFtuUyozU2F0WWhWfmRK''@;'; put 'put ''NGdTTSxoOWR2bmwlSGF9QG0wcygvMzttVDFrJltqJipGcD1JKnowQ2V8Imh1PTkxWW9lT1ZeMHJUeCpMLEZnaTJ+OWQzbV11dSg0Y3gqOCEzX20lYnp6IWJ0OTloIiRjckh4b1R5P2o4KzRXUzF+TnBeYVVbcEslUmkkL1A8dWdeP3IkeGZaPElpdHBlRDU5cWNjUT95JFIrSmwvdyxEOndqfWB3''@;'; put 'put ''JX1tbkNaZD43RD1fUk9CZFUlcz59cmVEakUuX0pkR196dHZvTTJ7bTV0V19kbE47MENaLyVYTjlvZVciQDUpVUZ5Sm4mcihTT1FRRXc9KTl7Y2VXaTpKend1NGUiS0R0OV0mcjhnUH52cF4rUF5KMipjXU9AI305WWJ9TDpnZ2ZCQlZKVCY/eURLUz15ejkhSDhmWFppIjZ8ZmlmMGlBUUhuRGck''@;'; put 'put ''cFddOG0wQFYrd2M+MCNneV0+LCpVJDpuMlRXaCtIYGojR31wYUdsSXQ7fik6MnpoKyY0JXo/I3Z4SmJyIWo6dFNzZ2E7REZNMGtpaUFVOF1nKkMyIS4qMlN3VGFSX0VrZmxne19SZ21ld1UsRG0hYDgyXzRPcm9YVzJsPnkwa2NMeyF+MF82MjF8RzFvP1NNVVVNcm4uNVQzVk1eP1YrbXpRW0Mu''@;'; put 'put ''RiskbiIqKTMoWH5MQGElI2A+NVcrQnBmbEVPMjImUEM7fUw8Y1NJeXg5ImR6VlgmQngzUm9DRSlnRF9SJSpkLDFRWDJROHdsVVU6IVNGTn1COWcoI0k+KndOIn1vd3txdkZzJCIyU2FPRDFlaGg1JjYqRmcpMjs+S1ZVOkxbY2VEJnZ4P3h1ZCwuZkJ7fk9Ya08zT297SiMuXzl+I3k8PjNgc3g4''@;'; put 'put ''QXI/WzJefElJc2ptWytZIzpaQjpuWWptVCU8TTpMU0IiZypLfUtRY01heiRlKGZDSz1pT0xFbT5xJjoiPW4oQ1szIXV8UDVNXnZvM1haSWBZUCZCP0g6VXtDWU5OPCsvb0EpRUAiIjY0SERnQl1RSGVLISh1ZUdzJCQ2cldQVS5FUldGfWxPS1l6PXxDUClYckQ/Lmp8X2swVSNdImE6QjszInJ0''@;'; put 'put ''IU9SV3w+eD81ekksIjthMHVUaEUmLCNgRXdMKHR2WmdbNy4xfHg4cihVKmImbEQmaDA5PDpgUllZaSJEVWt7K1hLOUc0cVspdHZgI2VkeVgyXnhyWSEmRFssYn0lYCV2Zno0ZjBTTXcuTnokX2VwRHFJLGFdRTU8UV5+I0V9Wm5OI10wTGdnWDJfL0JdYCtdW1NxYHgmOCt3elVSSUVQPiFiaUR7''@;'; put 'put ''cmpVd0ZpJEpPe1E5Z3kyPWZ5Sl45KyhxaCxZOjNaPV9FaDlUWWg0MTo6TThkL0IvOTZGWCQuI0ZhZVdfLnhuVClJNlRZQUV+N3t+XSF+NzEicW90N1ZEJiQsc1paLEh0QkwuTjVGZmUhVT8qMGxUamtsKnNoLE8kW0MwYHZEYX19bkd6Vys8fk5DSk1kT09AZD5LRDNqTCZAUEIoUDtgSV9UOW1U''@;'; put 'put ''SmM9UVooYGRHTG00KTx1TmN2LjpBLGo7XTpia1lmfkA3USgrNEN+REExSHZ5ZjFCVUtDVXxNfFQ9UytHLH0xcSk0QSNoYz5XfEhyRX5YWHIya006L2glSWI6Rmc0ZyJkQFA/RVNuWmhAUlRISkJefVNCSVhyTz9iQUQ7KHQkW0AuKDFvO3QwS3liSihPTHpCVn1qN3tUc1QkUX0xdn4qbiRSVV81''@;'; put 'put ''Q0F7akhvOFlDU3llZ0Ixa0wqSiUyWCZzRHlrXS9qTjRdUzgiTU9odVVaJWNSVVkqMW5EPW1kW1QrRm90PjpKSHRgQHddPCMicFFZUF44Yyx+Vz1hRkMmdS4mSz5nLF4yWUVZeEpmZ3lCUTZ1Kik4bkt1bHI8UCFtZDdIZ01YeThJWFZrWXZvJEd3MEV6TT1MWmAjWyo1YGp7WVosXkNSKH4zPU1Y''@;'; put 'put ''NkJ0eCJweDNiQlIvaD5QLHNNOE1rT1cyITo3dzBRNWNaYz5ORVRQLnd6c0QuKGFQMjgzMisyLit9XjhJPW5CWnUyXVtNdUphbmRoUnFXNDQxPXVxZCtyaTlPWX5lSmVKV19CQyY1L3krLCMzW0hKOnp5TU8ianNfYWRiZ1tXZltlKTI8aVErK2VPci91QHsqdHVLQyphYCVbKEdsIX4hLCFsRDE/''@;'; put 'put ''QV1HLzdSbi48UFs/MGltZktgPyMzPy9FWVJdKXkyVkdOI2BiI0N7RlQpVjN8YDcuQ1ArPSY/OEZ3WzNwez1vTXshQjR0Sj0pWGpoOG1NZCFbIkxbMjkoUCZRZH08JD1YWHkvISxZfiUiTTokOklPRD5nbUA4NDY1di5AaSRYWUxwPD4jRypOOntVNlREcVhWSVZnemJkUCM6UShJdDVHR1JCTjhv''@;'; put 'put ''aXc4T050PCRVZWd1VW9Xc0JMbmBHR2ZFcyw+WXImQVQ3LzNkcilESjNtfGwiQFJfTjM6TDBSazkqYXE3TWFUJCpNM35wcTlZYWc/ITY2RFBEQjMwbyIhUjpdP2Q8QC5kan5iKjhQO0pgKl9hMUVXSWdAWiVjSkAyOmhCLiNaMCpYPjg7PD5oPTpXVmw+PlZJT35gR0Z7KzZ4R1ZfbzAiIzwuZXop''@;'; put 'put ''XmhEcCJgKW93Y0sxOTFkOHspdktbImB0eTwkK2dSZTZyKXN8P3I+RTpIUSJGNy5gR0M/VXFlX3sqMXYyXnB7VjxDYXRNN1MzZk5RW1RKOVA9WFpxSXdUaFVOdW9wd0I7cksrciRvLiZqM34mbDdPJEoubC9MWywzJEsqI1ZfWFhAaUU0fmowcE9rckY8dWhQK2J3MVAwSTIkaSVPcGgjXnhIRGJo''@;'; put 'put ''dVlScyh1SGAmL3txfktzPmNGSldHRXJFYy53OU1IY2BgdTlOV1pNQS9OJlk1VmhUYGQvQFpeWUtkRngpQWNnNVtwQjs1TDdmOHpbez41P1Zben0+aXwoPz5sdyleYztUMXlpTVppInBlO31bTHI/ciVBMEkicFZ6LkdBYmhMaSlDVC4oeEhSXlEqSFFwbF02P3szfX4vXTcjU3t8M319NGUpPFMh''@;'; put 'put ''WDVjXnddQVd+QFV3eSYmIz57Z2YsUldSXzNbd2Z5NmFAOVtSX3I7SXZ4OWdHJDZEPl4pYDV0PS8uRi9oZC4+PmMiV2g1OSZOKz1LbVduRSNhfD15XVp+MXQzck5rXkNsJSVLKV9+Oj1BL3c2dz8jZ1cxYnVuP1ZzRCxHUkUmeE1rai5KKD1OWUFJcHxueihjRXlNemNlQVhRLj5rJGFGZz5ZQF8k''@;'; put 'put ''NFlFPE9rQEVBZX1ZVH0rTnFsdngobyRuPz54TipKa0xfcjcyTU5aeGNNVGJBQGdUPWJeXyYlXVsjMGtjOktYUihraklsUSVUYjRTWm1RVGJNTy42ZnRfSVpRPy4kVn04O1owIyU4PX16eVNWXWp+dk16WDhadFM+Lyo3fnc+fX57dzkqIW1HcyR5Km85KlNyVnVjUnUob094O3tXTX1gTipmPl8q''@;'; put 'put ''M0pRQSMvO2k5Ik17TilIY2BlJms6TFhleXI2RzI0OmQpMmpZMCg4LHhwOF9ZbzVnOEFzImlQYEFzYD1BMFNgK30hdSVVOH19VHMzT3pnN3V6ZXFqTldpOFRzdTl7b29mRjMzI2Y7bE0rXyl7XkVBdFV3L35XRkl4JUo9SE0/Qm9XLGFAS0g0WWZucnpHTmYkSjtVdH1fdCJqTHhOdUE/aENWQFRV''@;'; put 'put ''N11ZMyxRYik4PEtdcFt6YG9UODx3azZ2OjVSVDs+Zj8ySHxlTmxdYyo6MiFDJSNmbTtTKFZnWSFCQFEsUiphR1NdO1csZ0w3Q3V5akFyZ0V3bV9YXkNKfD4uIzhabElDaVBfNEZIRGJufW1tPXN2NXcpfTh2IzcuVXh7XX0iYzg9VStYK2MhYzs0WXNCWE1FM0xVWWg9JDt+eF98OClsWnQ3OHZ9''@;'; put 'put ''U3A4VjxxQnE5RUY+Z3pYOmw/Q05PZ2hOREdtPypKVnNtaTsjImhYRG1+Qzh7UkhQZ2hSYVI0PTcmc2wkMWYyeXJTUVg1dVs6Uj1pYzhoPT5rKDkiJENGcEhLSyVIaE5+OmxoYDclPmZPVChfNzZ4N1RXMWdfbD13NU17PyRzKCJPYS9vd0l1X2o+YG1ubmIpJjs1K3slcFhIZFZ6Y3Q5NHcjands''@;'; put 'put ''TyR9PGZmSTUrNHpnIyE+Z25SV35IJXtCQ0Z4UzUleTtocTU+MD1EbV5FQj5LVlNwUUkqN0lGYjszQjUoSk9admohX3N+ZFAjSDdod2tqYXAvPFckVlJwakQwOi9PKCFUQHlWZzJMbEw4KWVvKW9bO3c9cGUkUjUhMFZxX0lTaV1BOm0xKm46c2A+VVk3TF8zLjZWTEc0WSJ6LC5GLylDa10lQSN2''@;'; put 'put ''eF8jPUk9Ynt4KUBKL3AheUpZI3oxaG9lc2wzZSg2Ol4vOzZAYnAhL0I5a3dJMywxZHBzfUNTayZEYGY+ZFs1d3hOU3lhUSFzTkFRWD1FbGheZnFrfiFjS3BfZlJqUj90aG1fcmArY2BFclNlRENHOXtnUixfeHJhXVc5XSRWQlZEPWVLWXsraVMyLjFwS29se2BXW1MrZ1daeS5uWHF3N1p2c1s1''@;'; put 'put ''dEtlQU89MTkwRVc3fm5hPlFCQDc8QC89fFYxaTtrbUM+Wmx8QEo4OzZCSkE7Wj8jZlJgZ3RUVDQhR25YPFNgODw1XjgjXXZSVWx7aUNFPi4jYkNnel5bVGs8KnNMXnJeZTp9O2BpfGtbeWkpYkpkYVcjeE02Ji9aMFduZ2pKMXFNNlBXOEJjJXtDMSZxPWRgZTkzREd4YGd8S3hyQEE/WzkyLCMh''@;'; put 'put ''VE5VOHZTQWMoPGxwNWAlISYkLntqbVlOTE04Rl05Pm9sYn5LV2krI1RqbiRuP1ZKL2FhNnJnTm19JFpCbFhDeWx7clpbUWopIzI1Ul0yaStEbk1POnlnNTFVNzhPTnY2JE4iKX5ZZUw3KVk5eUlnUyYyTGM7KXNhKSFLJjJTT3tbIjU8UkJQJUJiLHhBYT1DQlo9USp4aGJDPmM0aVh8JlBoS100''@;'; put 'put ''WnlwbHdnakEiNGlDYmZNU1dnOktFQjdUWGZNI28+ZCs5VWxDWk9DWTZpLn5uKGw5VHFXRDNGZDFvPmdFci86OFFvQihhdCkzTGclRUBSSTBHRW0wVC4meCM+MytNJiVNW1VLNHtXNVYwfElIamxGTFtHRU1eQ150dyVlM3N4PElaJkxwYS9MVF5zI0VqTlQxaEN+eF8sXVEveEQ7Nk91MWFEXlg9''@;'; put 'put ''JVIvLndnJTpmZztMM14sNGchcSx5KnBFJSFUTkUkYEh0SSYjV006N04yRmhGTV9NOU8iemwxUUpnfSUpSnI+TEpENVdHUjwlYTxVNGRZMVVQZDVLL1l5TCZWPGFodkc8cn54VCVTQDBLcnlAMEFkQ11mNXsqKGhJOkRqa0V4amxII1drJGZJKD9aWDAsX0hAK3c0IUt0Wl8pJF0iREMyc0Y7Nng9''@;'; put 'put ''R3QwNSlMcVVSZ0shUEdDeUR1VVlDb0Y2YTRgI35QbXwjRHZ6Sj5SPGFJZ3IwWllQN2xgek8zJXdifmMxQllII2dYJFo3TngmPU5yXXR+VWpMJXJyN1JpXSJTej0vWSNda1BRVzNtdDQrYHVObk54VWl0eDxVN1o5fFpnX24hNUpYNWllaU9rdENjOisrYlgycjx0TyosalFTQGtjeEcpUUZRTjV7''@;'; put 'put ''cCtJYVloZU5zK182JVdpODU5JF83THFRSjFqI1d1V1pjU2ImKHY/VStLKkxgU1MmQ3A2Q0MyfElteSliSDFUSVJLNiVNMGNAQ31KaklTJCFNd3NCcS5KSSs3Q1JzTyt6N2l4QWVKMU9XaXtkMTB3YmhqYiJPOmlpfj5Ien59N1FJMUNRMzJXXl5pNDgzTHRkPEZbUCVQR0FQX19wV0BNK2RqL0s+''@;'; put 'put ''KzgzKTxlQDBOMSJJdH1OJnFFbVtkOWp0anpIXTRbcmJAay5TLisvLlI8XWpLIyIhTS5MN2k6eHBVclYiMTRQQHJbUG9hUCxYSWQzaVhiLFAjIXpSUFZNZX1tfVViWENFNStkUFc7RjAjLypDa2I8bnB3VU4uTzg+WjZCVE1UN004L002RW9WS2U0WzRUSGdPW05TfHN7NnU2UXNsQW9YXS9XRSRW''@;'; put 'put ''Q0ddUUBXKGVUJiQhNzo+O1ZaPSpHWTIsImpKUEA/MXZfKkVtWytXLzJQUSpje0xlRyg3TkFQN0l9SHtKcDU6Q1c+RCVHQmNtcntedlUzZT1vOmVhak5LLGgkdDgpTTklfEZVLi9fTlJwa082U2ZaRjx6JWx8TGB6ajh5Omd8Jk5jbSkvN05LKi4oSHE2W3s8KFcqSEBgN3ZFNDlbJkNFNFFANjs1''@;'; put 'put ''T3UhPT09JUJLcytxM0JyMjchVWZTTUppJE5oQ1dqI30jK0BKbnRwdGU7Y3R3OyxFeyVwTj5ocWh3MCk+Rm03SiNlZDs8M2M+RDdEbGRdRy4rXVRZRjJxZG0rP3o1fngkbXlkeGpXRGNrOHU2fCsmdF1kR1dEPlZNcT9PcGo6ekd2KFFBQVImQHB6TS9iYlVfXmw2Q2M/akJ2RGx9ako0bDcoNlRf''@;'; put 'put ''PC9HUVV0KXJIRUg1R2taen0zUUBgU0IlOW9rVSYjLEhlcDlxMVl4citlMyY2R2BBVyRJeSsoRGN8cDUyVmhRZXshUWI6cmNEdnZGJFBVZD8oPVZfWixbYXdkelc9T3t9akd+WiRrKWQzSjJkX3tQaj59UHJLaSEhVVYlbGpucjsvajRnZl9TJFVpWWlvK1Iwa3k7MjA+R2tBZjEsbmRbMHlpQiNH''@;'; put 'put ''YDA+I1klLyw+Okw+ZEAzO21NTl5EVmhpaTVrOiUsbjArMU1VRVh0TWplLEUhPEJ6NGkkeltdTGl4YDpkOnVkXkZ3SEFAaFRofTx6QVJNSVUqSWo9TUF7ZUxONXMzMnUkQiViTyVNUmw+cEEob3MlYFVPVCh2TlZheWNnezQleDQmVXJxYn11WyhMTiRdJmR6ITNKZ3k0e2hRdlNJZm5oW0VoaDlV''@;'; put 'put ''TWBwbGNgaz0xMUsya2YqTilDNUssLEd6RE0weH1LIWs8aUJbZi93NjJyTkI1STZUPCEwO2RrXzArMktxY3ZlM19AL359Oj9TfHc8c2o5RSJ9QzAmfiQqVigySWhNKyFaUit8Jk5AV2gpV0xbdm9lIVR8cV82eXQqPTQwKCspJDVGNjpUeVd1WEpyfV0iLkdYb3hYN1FtTXtSRHByWFYpXVpsN0pp''@;'; put 'put ''fDVrVHdicy8yQiJxXnxPfWwmSF5Vdl4oNGMpQnx2XUx3b1VLNER4aXwwRk16b2J1eyZzI3BoaSolZ0ghclR7OCFoZUNzfXhteUNaeDJwVkIkSiFSSWlweE13VUVVQEhbPDFYUjFKbW59e055K3AqYnFDJEVDZnJwLmtuSVVAQHVscmlqOk1pVGNxSnl0QmB6XWAibUMoMHhIKUU6LD14Ozc4a0tQ''@;'; put 'put ''V2lLTT1Yc2IxUkFrRSRHUENtZCE/JlRpbzsjMUcoQipLKjFySV9MW15tXl9AaWlaV3FjeXdpO0VUVnIkPFEpNkB5QkNkMlJPWDldJTBGMWdmQCEoaTJSV2BQZlczbjtRanN8cixCfn5De1pHbCMjXWtaa0BxbCxoOzc+RjcjQ3JkTEl6UXEjLnVrSHBYbm9AdUdtTExvY1AkTkRiUXZFcUMoXiJm''@;'; put 'put ''VTF9WU5XcykjM280eH02PnNDak5GeSx5QCQreDEyN0NOKyl3PnleUVB5ZSg8fihfcFpGRCl3fkt5a1NEPkJFRnpRUjJBNCRGPnQ5dU94fiZTQmNTUSsjfEgkdF12Smhhe1BeSCpMKWQ0V200eFNpRiQqcylWMik4YEUjVGkoTn1OSWBPWj19ZC9jaD1idDxZInY9ajVVRSg1a3lUMyhTVj1uSkBI''@;'; put 'put ''Uj9Aa2JeTChxdExvSkdOZz9JRkA0UG9KLCMvdUg2Y2s/SDovWiJJeHo+T3BROWJMXWpmMCo9M055IyI6aC88WE9lfXJ7ey5LIXJmcCJbRSJoZnpfUXFdL0QhX0hYUUUqKnp1QDVkOWJVTE4oTlV8ZnZrUGMiRUZkQ191Nl1Jcjl8bXQjTzklPG5zeFMlJjhCcHc3fj1AT0wxJncsYyU/eEgwdy5P''@;'; put 'put ''bilpQFBzLGlfMnZKUWZ7akdbYToweDQiOHluVyVJRGAwMDRoZWYzXj1QcHBpZmI5dWUoe2U9UUhDJDYzRltFVSZaT35gUUZOdGBjZF9QXWA9OSx0ayJTXn5zX1Z1P1RpenFZRis5X1F2RUprJSVmYX1GbiVVXyZYdDllTl47bjlMLzVNWXslan5SZW9mOW9Fb0drYHY4TXFARHxkNXwiRSNdPllP''@;'; put 'put ''Wl49Oi5QeWVIcXwjfmUoQ1p4Zl1UZkBaVkcwKHVMIUxCSUIpRGxbUnEkRV92L0F5LDp+O0hwejUhMW5HcjhnIXs1SCt0VV1HNmI3dDNISipddXgmTkVCWzNxXk85KkxrImVJPGclOnxoSTBQd2R4Vi9oank7X3M9bHhbIiREdFgwYXJRMSl5JGp4JVZHNGc9WDIxRFpiUkFebzVjKWQ9aFcmNkF4''@;'; put 'put ''Qnh4MyhLUU9FZCVkZ0l1KXl+cnd2anZ7Vj5IX21sLGpzdXxCX0Q1M09SQykzJXIlfHE/VVRlMk5BfHBHRm5jQCJLbWBRbXZFJlc/MHp+Qltid0gsPkY6QWl5ZXxzTnd2eTd4QW9hZm1yfGowc2lpYT5lclFrRF04QyoqQzBRanNsW2dpaiRTdllscXI0RFRjWV5vd0lgIW5WTjdYdzlsTComWmUp''@;'; put 'put ''amxCO3lBK2pwUT5GZEE/eTlneT1vQUhhKm1XJUZsZ3BXe3xjdlhwJUxEViEhTHZvJDZBKkpITVYyZCkhQk5AWDcrOWxMb0dEcWEzPmNeYCpleXA+XzNUR15EOF5qSTRNN3xTbT5uNix8YUBDK05zRGV9UFt1Qm9KYH0qfmVyQTJbfGR1cytTLitjcHphLHh9KmMzfDJRalhXZCZVVWpsNjVid0cz''@;'; put 'put ''bCV5V09ITzRrYX5lb2ZuWDFSNyxzWF01XSlxNkwjdyNWczdndU5uLyp9JX4jfjspbjtJOVh6Li9pOCl1SzNkQm9eTmhSRjp3TUtNOiE0Zk8va2JDbD0zQW1pMW5VV19mLislUEFNd09TbHQyRGZjYW0xXU04VSkyLkI4N1Y4Knc8TklMXT5kdVVobDtDJkhYaiVMNWp+X1lGYTdZZHFZbyJYc11w''@;'; put 'put ''ejcifkdZZUM6ai81Y3wxaHAqaj46dFMqYUFfSyRDNForPHQzWVFaKCwoaXgob10vZnE0STc5emlwKTZfe293JT98PHFXP2M+eHpOa3E5dUxBO21iTThvMllzZ3hsSWt0XmlEUkkxMFdHV2ZNRmBEN1o6W2RPdjd6NG9Nc0lJKGoucCI6OmpXYX5zZ3NEOldTeytXXjppSXgxcTJPJSV4elp+RSFH''@;'; put 'put ''akslNVQ6UyMyV2Y/XzxKRD99SiViU0w9TXwqSm9jfXV7ci5sQ1NyITlaKzdWITY5MmtMK3FTSkV+PlBUQWAxeiM/NHwrRllIW3RQVzBKa0tSJXkwWT56O0prO35XfCxySUFfOTVydWppcUk/K3R2ZV5WMFlAKHp0N2pUd0AhZTJlNTdlOlt8STxUYEN+eCg6YnJWUSkzPlZIR3U5eXFNOUpga0ps''@;'; put 'put ''V1VDWy9ecVl+cCxHLGVXdCkjcX1Xdy5AcGxUISZneVVddiF0MDl0QVFbZVJQNnVwaX5ZJDNIV3Q7LHZ0fVkjNCQsbjZmWHtoMkVZdnovOF1YeWVaR3QhZzBxeD5iPD47fih1IUUhXkVCLl1nek5OcDt2MTdjTSZGJC87NyNfNmkleG1uLzh8LitfZjVRYXlYUlQjayN1MDtfSDtxI14jVF5YY2N0''@;'; put 'put ''MT5+fXVuU2Flfik6P2NgeFFdbSVQfTQuM0tSL3IpNDlBOGBoWjs9KTZ9WnpwbSNZNT0wLDlYQVVUNnJmYlFeeV8pTj0rZWBtQHQlWUJram1vT2kmYSheYyNWX3N0dzlBbzcvZDZVQlVyV3pmeT1WOloqPD1aLnJPaiNBa0VQYEpfdVZOdUVtYjlqcGMxbDEyNGZWfGt0OmpNNXdGMDRLKm5OZFZI''@;'; put 'put ''PHhSTzFfN0NhTXFWbkpoR0FyL2htI0g4UV5GWWUyTTlWN1dMOFprTlo0TjU5KTJDTVsibDZMLkdwbnBHQ1VwLkIqYSkoKko3VTdaXjNCRCxqKjRoRy89XiZQSTAseENgZ3Y4VjsuUyRjPTNjRDNafVpuekRgVXcjSWBxK1tWeypPVUZrQm8+OEp0aH5sYEJaWTNbZSUqKH1JN05+UTpaeyN7PE9U''@;'; put 'put ''TSJnSSNqVkBoaWFEbllMJVRtW1soNEdDSTIveDZMUEhCNTFXbVZpVGUpKjIpKUtkKEkoM1ZeQHZRTG4reHpnY0VAXVZ+L2sjbUNIJmw4c0d7UnY+aGNCfnlxZz43U1ZFN21RPVkxfnpjek96ej8xQFhmYFlKWERqVytWJU9ZS2soLEthIlVxZjk9I2AvcmVddG91bj0xbE8mPUQqQjNkTilwQmtW''@;'; put 'put ''Q25HTHNweC9ITGZ+c0ZsXVVGLyZhNH1kY31pY2soMWQlSEpkPjd8fXIjM2QkeDcvYlAye0VQWHt3UzB7a2RZdTgvKnpnS1NZeX1uTTJOO3VFTTIiITgrIXV1PEgxcCF2ME9sKD9xJGR6aTFeO2tHIVRCInMzaSRSRH5kWyVSZmBWb3FDPCkhRXd2RF0+LmJZQ3c5I154SUZYcD1+Z003KFtsbEY0''@;'; put 'put ''fVNJMFc4YFVQUE9rKC89Pnd5Vyo+MVUoO0ZnV3EzPC52MyRyfEM7cTBoPzY4RjMxYVZRRD84dWt1RVZAfEVTZDN6YX1bUHdCQnozPD5dVDM2a3FBOmUkeipaMGJSSkBhaHVFJVA+WDFlI1Z9cSM5S3B7U3FJcHoyRV9xPENuIVZkJC5bW3FiaHtsYntCTk57KDNaYnVObzRPY3N7c10oMlhhKnpN''@;'; put 'put ''U3tBZlg8P1p9UjV7KXRIP3EsOkguNW9IYThDb1VIJmdIanZGOjZQfHk7VSh7MTNONT5vYUw2I3RfNU8xbFh+STIpY3kvU2RNezIhLHo8N3EzQlpiMnRLbW1aK144JFU2Q1ZFJFR+Tz1sPn5dXWZQbkMpL1Z5U2xtaD5WVmRmbCZTO2ZZd21aRUd7NlI9PHI3ZHhTS0Y/LytWTD13b3ZPKXAjP3I2''@;'; put 'put ''RGFwRW9ZUU9lV3cmYXBzIzFYWjojaVg+U3JxTzdwQiZTNTYzN0AyPj1sT3twIXY1LCZ4dzZ0bGJqeVRyREAjRnx4XzxuXmo/MXZlR209VCo9R0tIanI/Un0+MTkiIXI4KUI/NHomQyxNc0djLHl3YiRMcjV9ckIvTHhEXV0rbFZ1O3pUXkA+eWJdZC9jQ2V1RT1VJkZOPFB4IlUvJVgvLldfYTdd''@;'; put 'put ''V08rWFhYeyU5Ni58NkZyU1QxSmdhNGB1fjFHS24oenBfam8iQTpIRS5HcyQxRT90RFlwRjMlU0BiKll5X3I4NHNCT0xaWj5jMiVLKS92dDd6WnloT21rRDx2eTdIPXsxYzErWjRFM29EJWVFVTF6XT46KHBFXikrbyJadXZjLjxeKCp2Plo3PiYlRHt0aSVFOEJgXUhER1YzPyt1aGteIjc+Rlos''@;'; put 'put ''SHw+eXxOZiYyXThLQiZ0cDEyJU50UzsiPVtXZWBUTEA7ZHBeIkVNZj49bm1tM0hwQG49d2o7djpxPl1CQi5SdXwxYHlVd1d6W1FKdVFQW1ZTdE0lPnlrYSUhRixKZEVtcFFrWmtCdVBHa0E9WXFxWXdkTTpkdHM8aVdvYjArO2BOXnMsL1EpVWtxRl47M3AsWS50RDduPnhIez8sYSEpTntmZXUo''@;'; put 'put ''R3xSN019aiw8WCoxd0BwZ2IyU3c3M0AlN2FtclhSJmlONzM8MCFwKkEiUlQqM2VtIzdmVV0yPy5fPTMhby8jIk0+R0gkcGg3RUZSKl1OMHVqR3FscGJtKDZ6eThZUFlKdV5XS3lYVXJOV3hecE1IIV8xNTEiTy83bVNNUWIyc2BISyQvdltvTUtbdWJ1SVcxdkJ5QXYrXXpUSitbUHhQbTNhcigp''@;'; put 'put ''c2wqTClWVGwsSWZaZHF8UU9lez9JKjx4Rn0mVi4rS2VJfjdycUxRKnZ0dlNYe3Jda2RHbEIpN0RdWVk/YTQpdXchbChoPWNabitNbHApPzJWPikmeStQdjE+W0dtM15jakZ3MD06PW16R1hAPGN5XXR1TiRnOEttb2ZIcVlYQHUwVkhbLGI8d0NmUy9QOHgqWG1FI1ojXkdrOn5xO2lockArMlQh''@;'; put 'put ''VC9fXi9WZCU8Ok57d1Q6S2lecj8ldUoyKEpIeyh4NzBeNEU9RzdYUWtUITopIV1pIiEzTG1TNjhCOUBmZjZQLEI6fWwsbTFBZVoveituTi4rJEw6NGs2NjBhU3VodEcvI08qVi5PTzpTVTdlI1A1THguOk8kIWtMfix+WTo4QFFYKEY5KF5Ce1t4U1JdXTtDcklzYVU2RF1qang9MUQsUC81XkF3''@;'; put 'put ''aGU3OndEd0JIZ3l+NGIpcC5mUU53UF9kYFJ5LGdHPGZHcHBfTiwmZD5MeUE7OGkhJnd7OWlQaF57ZmgwOEd5dmhkQjk9OEl1KU1gQyVKd0hoMWIhZGo8eCo3SmdHdU0xfU9DVXBhbn59ZCJZcHwpc05sU1siZjYlVWdpRXhZcFgzMXNwcCQ8fkdTU2xkPkY4Q3lmdEI7RV5WeSZpR0dIQktTMyg7''@;'; put 'put ''ZSl1XnVCUEkmcWgiOENiPn1EKUN3NyNsdEpQKGBWUXBnPChUYWw7XkwmTWlvSWlBX3dMVXpfW1tSUl99U2M0Q3VOP0RRIVNHKXJEQXNVc0M+Kl9CKWl4TDB+SHc4Xnh4QTM9QWVTNGkuc0krUT9PVjQ9ejBII0JAX0dWYT02bDt0T3J9fU0pOT8rTj5RZDhGOiorTTY6ZEZvUVhQKHFPNFthREw/''@;'; put 'put ''V0hLcDpMW0JHKzlgXl1OfH0xLmNtQmFhTFR6XXgkfVQ8QHoiaV9vdjJJaipQTVI9JDRzSEY/bDBgXjQzWm9qLmMmTVNmWGpnI2x+RTJ7SClCXTA9YTxOaX5fVEBEZGUhWkpTK2FNQyhsUk5UJUU0R0V4NjBUVUtyYX45K2RRLkZtd3pPX1ZNcyQ5dyM9PEJmLndbNWcveyJtUCNzVXJlZmJjTzN9''@;'; put 'put ''fGgpVCwmZlJZU0UwXUhyOzJdenx0XWtRJjlMdD4sUGE7RUYmWW9VeXx2W01XaXprW2xLQSQ1bnZzciFwaEQ+RlhhMixSaD1MJV04Ym1VVEtlQjMoSVhpem0uYi9JNUxfKnMjOzFVTS9SVUxOOyVoQTA8cjVSSTg6KVR8JTZMMHMqfWp7UyN9Ujt0IyVWQ3hndmx0Z3NrIU0zX2VVaE5RZUV5bTVV''@;'; put 'put ''Mzw/SkA5Lz40QiRxR29XU354djdZa3VTam5dSn1GR2ZfcTZwXU1tPEViSkZ7QTMsXVR2aX00OyFTaD0lWnttI0heJFNBdDsvU2o0OTtpRDU/WVghTEJyMjVuan5YaGpEaXJuO1RvTDtXY0U6XVp4JC55cXw0a19TYTV2SDRkXW5EcVt2VmJyOSNZJG1PJT43O2JnUyZpJTE2cEdFTnQwWG9lJXxW''@;'; put 'put ''K1JvQ108Ons1Tm9uVnJhXzJIUWdEUGN7YzdmVSwqY2ZKRkoqYVdSTDxwWlFOJSlXe2VILzFke0YsazkkMmtDY10uQlhLJSkyNXI2VCtYV0hhXmcwM0BGUHMmd0xDNXcicjFqPkkyI0d3QWQ+JjNGdDJ7cTYzJTEzNCZeX0JLQGNobDBUcj4hfjh2MXI8NDs7YHNmfHUhISN5ZWFXMVloP2pZZ3J1''@;'; put 'put ''OEIoYmU3RTg9NV8uTmxXZC5pK2ZnXihFYT9BNXwyNXBUfkYsU2dqNGJybS5GV1dZQzteImJVKj1ecmghWl5RLixHSGNpbSZ1PkVDTnhGMHVmI0dRLElQLDVSOXhCVmJiXkpsSC82fk1fdk4sJG9UYE51JEJBYzM5QlpzMX5da3VyPStTZnZHJGgwNzp2VCpdSCtaYzFjWSxTU3JrKWt+QDlCaE5D''@;'; put 'put ''I2oraiFZaigqYCtBMmtaP2pANWRAMzlhVTU1dU1wM0hQMygjJmhEUmR7ZiZhZyxyRVBdNV9yaVBEIVRdN2BRKzsieSFGbmR7V3tXRGY3dCNYLmd6N0o8P3dhQ05rMzd2aU96NHpRUWgjUyhWXn5RYERWVj9vRExnO0hLQF9bIXFqbDAyUlYrKkY9Uy5IUlRMSChpXWdUMj1bQWk3N25CZWcxTn1q''@;'; put 'put ''NVk2TmJAOU1dKDtjNlUoOTZ3RUF6YklYMyptbTpfbHEyYisuZzc+d0xkZj9MMXQlKU5NWnJSQzc/VUtQV0ZyKjZzfSpyc3JfXl4vRShMZUhCJTBsXjgpOldnXl4kbFROdyhzUU1tI3VzUHZ5WEByMURNUHwmSjEpPEc8aVV4MClyRDROUmcpO3loRUBtYixJJXxTeyIyT2cuflpnVkRdfF1haVNw''@;'; put 'put ''P1pYNDhNUFBzdztlNHJNfXs7JWNhPVR3XkFMaUUualMyRSguVH1haT94OGQsNFBuMiQuYCxhNUYiPXo8aGBSPUdJRTV+WElHZmR8NU1UNXpzQ1NsKzpFKHVMSTd3O0NuRDIzb004ejtBeCVoUjRVLmVvSG80VDQkRFFTKzlQeXMqJFJIJDM5YStaU2dYT3FIZUJtI2picmd+WzxtbS4rZSl6VEdO''@;'; put 'put ''WWQ2KjB+Om1rYTw+JHZyPi4uVT5bTFRET21YTEs4VDdhWXV5XlhpY2xoKmhuQyZLe2ZqL3NKelAmJHJELip+e0N7M3Y7RTJ8KWtLNk9wJk1SaHJGb1VLIXI5R1UrSXQ4WjlXVUhEMXQsU2sodDlnXy5pV2U2KEJ0enUyblhVTyJFTHRjejkrUm9vQEo6Qm45QEBDbElWJC4xPWlRa2hRSShfLn1m''@;'; put 'put ''X11OXU4lfFRuMFA5MlVbUFFmTkIuSTokVWtzOW0yeksmRW9LJCk1KDBwdC82MGpuZUs8fWhtNiMxMGh4NEx+Vm5GZVRXaVtSaXckeCp1LDpyWWcib3NecW4za01sSDdgc1Q7cUtQKSlHfj9XXXM8eEhbPTJDbC51eE9GMS5zUltUT20vb11ZTnZHMm1aVDUoSjE4bW57P092MDl8eShteWNGVHox''@;'; put 'put ''NlBOL1JaOHp+cUl8bGhfO3dkZnAoaWhbLjY6b35kLzdIcntJVkddUUg7dnIvVChDbW5mJC5Qb31AZ2wod21fNWlrNWw6VlZhRHw4KklGWSoiN1lMRHtdRV1BfnY0UzdgRl07aFA7UzxhWk1lTiU7Oz8ua31VVG4uVEJSdnRNSC9ZMl84eCl6WyF3dmptT3w1PCpVbWEqUEJULzo+ZVhDZU97cCNN''@;'; put 'put ''XVNOMVdoRSN1Oks4bzx3bFFRMENCIz03eDZScWdpP2BSQ0hhUjtiSFBfQDRqMGUjU0xHI2FiaXsufEBgPHAyKVZOWU84JnVnfVNNaDosS1YpVGRyU2kmYEFSU3ljUyZaT0RUclFKfD5Rfnw6JDlRQVF8dFYxc10vQ3t6TntIUD9Rdy5tdiI+Mz1oYjs/M358PT9pUiJgYHhAVnZkYGpfbV9+QzlF''@;'; put 'put ''WUQqMyVGdlNqLF8+VFZfeUhqQG1GVlBnZipmKUtAcXBmbFZVNzE+M0xScy41MEtTc3FETlBCZy4pPkNrMmg6YTovU0pfYHJCaUE4c3FvdDJkS2ZgYWE+NFNRXStxNmQ8d0wmc0xqNDFYbmRXZXswWVAsKHhUI0N5bSxubU1VL0Q6PTVAVkYpfmVHJDNxOk5WPy4qNHN3QHdEdC9zLChrVWwkfUx6''@;'; put 'put ''MVVkdWtCIjB4fjBjY2l6O3hpajIzSGpuSFt3bC45VVM1YChNaFVrcGxXdG9wWmZRMnAzdGNZQjFGKUZAZTZ8c21zZitobix5IyRqd3QuOXROdTs9cHJYI0QzSXJ5bm5MOmp+MFRLanEmVjI9PXlsJXApWURefFtJK3dqcGZeKW87ImZuSmgzT1cvZm90eHpASlNYc0NgYUssPDIsNFUsOEFzUFBL''@;'; put 'put ''ZUomJWczIXh+MWFTJWkzNU1FWzNnXy9ENXlPSENkfHoxS1BBb0RmVjtYd1taIT4vZU5jQV1lW1tMe0VpLz8vWXdVOlQsUTZnXiU0NUpHUDpJLFA9P3NIb2hgcjhmQT5uTH4xJGlKdXtCSWs8dUkqbz5zMmdIZXNSUGMwWXBIaFZnMVRtSFMkfTNBTGxpcjBaX3BUTih3TFYoaD98bXskfkdsaDdR''@;'; put 'put ''TCZoMH0wfWh1SCVzdndGai5rLmJSLyQmb0gzbkE2SGpHVFFKfnxhdSI/ZTErMXNmKjEyflFrMSpLS1VWfnp3XURYVHcxKkJtK35sNXlCfj51QEJQcHRBZ0U5L3E1MWwza3EmMW9sPkl3RCE8K3dlX1dFVEVWSClHZi5JSXowKzB9bztdRHJ0dCpKUlJVdWVxbk4iZD4hV10oR3NJSHVJZHIzXV5t''@;'; put 'put ''cyg8d2MyYnhEQS45RWBqdkk9T3t9Lz9NQW57dzVAQF9kc2ZhcjhlYihvNkx1UEZCfW9ZOEdyJWsjLD0hZSRFZkxFYmZZXTw4Qyh5a1chaVFzQGpVZFUvPmsxZC9NbGhDWzJBNkpIKHUkVDpSTWE3UTYpQVhBbCpZKm0wcGpDMFg5T10may9nNl17VlpPKz1WYWxYWEZ9azw5L2RCaDt7cTtoazNn''@;'; put 'put ''QVhXQkQxfkBGcGFxUTcwZWV2bipFPlBqKERvY08+VHB8O11LfWV6P3BFLkEyW0hfV0tZIkM1dlFJYEt0UHhUT1NQN1ExfjVkIVArW3s2eHdlIWU6OlZ2UmY8MiE0YTp+cj5XIiRSfEdaMDArRGBRQyUlcHJsNlNKfDJRPHtbajp4LnAifmpkbHFOMUFqSV03NFU3OG9+SVJXTm9DS00zZmtXfDJK''@;'; put 'put ''cmByInJRUEBWeTgkWzs4YWBtYVlFOkFGOk1ffWxVSCwmZlRtX2diVCJ4UGdrTjI6bUQ5ISpaTUl2QVY6YVRbTiZ1RkZteXdCPmdxZWF1bHhhWUZiL3Ira3l0eD81RmpFYUBLSkZeTCpQXnM2RmlnaXlJa1kray8pQlklcyZHclEyJFFoVUpmYU45fWQjdXtLYzNmfHpUO3NSMiRyfWowMWJNQHkz''@;'; put 'put ''OUMkP2VlQV1EQWpPRkRae3spbSxhX2xLVC5CISE+SldwdnFqdipEeFRxP2UyOlc0RU18VjdGImRbQlI5MiIsZ2s6Zk95UHolN2J6M0d3XUFHUm9TWWBgRVZUYGs0L0puL05dO3dCKkNSQ1R7ZlVrbThEMUgoT1tOUixXMFdYfnM/V0M0ant2XyNKUj82IVJ4bnhXQ1NqSnl2JTZmbldBKCFoPlZL''@;'; put 'put ''NV1sXjFdZz1xYyxoY3BVczlUb3cyM3wjUC9TUzc8ZFl5JHpqWXIsSjdNW2hKKDlOTWMiOmYkcWY2XyY6SyRYMmArSWxXTW5qOD8rbytFNTxnSWw0blJkTiZOTiEqO1N8PjgvVzNPa1giV3ZPazdCNEJJbE1pQCZJRnNkUWtRKXduUW5iY2BZKWV5QnsuYmE0MHpwSFgsfnxIOHZzXUF0TTVWRmU+''@;'; put 'put ''Mi9jalVGYipbMGFhVDM6d2J+Xn5bVWdMJT5ibUBiMUIxRy5DSX1mSmRqMT4qM11UekglN0g6cDNHZ1ZffWFaVGwlQj0/LypXKzZ5RCNQOiZhR0JNM0klZUF6W2pERXFjRTNmaWMiOlZ8LFdwPHhCRHEmO2tIbShqZkZ7Oj9MVls8YGojeTpZYy8mcyFzbjFbfGB3UHI7MnxVLjpIOksmXVM4QXpS''@;'; put 'put ''Ik4iX01yQ284dlNSTWs0QT5uNms5XkgkOXUsZlVGeyEhPjQ+TEtJL3NXSWo1fjgqU2B2PGxnOVMuWVc+OiI2MT4+ZndQaWZSfWRuMzcpIT1LZDYzKDdpLDJnU0BjdENZaU9ONSJlNColRjh5PXRMMEZLfTVLR11xblsmISk6WEk5PTRNKHlVNV4vO35mJVM+MEJWUT5JIXFMVm5tbUMhLit0YXpF''@;'; put 'put ''b18pfHl6bnpPL1VnPHFgKmw6fmB3fFNdaUElcUIzcUEmeWN3RjZ4aytAfWd6SCEwX05+PDFbLC9eImovXWhMZFghUFhfNiNNTkZkXUt2JnlhZ2dUPUM8K2xVKUcvVnhffWZ7RXs9bSxXKDUrMHgrYkZaLjEuY3h1PWIvMlNYOFI7Ll1GTXE6ZG0vODx2MytpXzVWInlLMF8/dndlT2wqOz1aPT9W''@;'; put 'put ''Xn4oej9ZQFJhSVQjNihAVHIyc1k0QylfPno3WHdxbytdc3J8a0Rfekt1WlR8eDhhekAobyZ+Zk1tJFA8UFNIUj9xLkwiZnFAQU48d31gdCwlVkZtUmNKKkZAZTAsXXM2YFZxfGclNFI9KzhgeDZyYl0vdVF5bUo/cWA1MDlzR1spJlBrWVBVV1EwUiQyX3A9TVs+eG9CTXNAOFVSW0FxXVNmNUlO''@;'; put 'put ''WGAsPl4wXW9SWSMpfTFZKTRiJWtqdElVO2RGQmREdDhbSjUmTil9XjA/QC5KP15KTm96KGxAQHghbVMybj5WLnF5M1paWCMpSTEqWmJBLDAuc1ZpcUNqazApRW50cmRRcmtrKlk2bkxJUGliKU1aJVpEN0M6IlI0d1k/Mz5mbXR6YSo4RUkoZHpHVVhzbjpedHkhfHZiS2BJMXc6WXk5VEI7SCFa''@;'; put 'put ''fFp5cV4+NkkhSmpOXjZjOnZ0UXB9bXw3UGhkRWlheGVfeHJuJWVqbjUodS5WJDgjYl44YEVqaVVLS3QuUCwjLHZ6QTw5OElsfmQ2PH0vQ3lsViluYWZKbVp1czVNbmk3TkNHOCw9fVptNEVgXyxJb1BPRXtYNkp2SnMwOEYiRjtFKEpuWXpaWE44aW1Ld2BnTVUpW1B2ejVeUiMkK35pNVJTdjI8''@;'; put 'put ''U0pXPlZWfXdaYmlkQSZjTjlTWkE7PVEhW1U0fFBKfWRmZGFAWTJjVXhlT1hmLHMjcjxaKihDYS9JeXp2VFI7U29RQlQkeWBLemRyZik3bl1tMn42YnBDbnJXV0oyP2EySUUlej84eUVxdGM9a09FM00/QnlTMHBneDN5fWo0ME1lZ2pTWj13aGpqVUAvaWFKXyJjLHFAOCxyK3ZpZUtpPjhZd3Jh''@;'; put 'put ''bVRbZXdRK3BBWStoRmAoVTAiezhmdmpCdTxEKUElM2xHVVNSOWtAOEVCe1B8bjJYZU9PeGE9cGQxQyhXa1VIUz1qdGRANVEzIyVqL3xlXmg0OEl2JW9MPXY6PUhrRXtqMitPaCEzSCFvO1ZfM2osNEhDPk1DRVcuKW5HPCQpPjs+YE4/Yzo5P1ZFckd7LG9FfWkqUnUuJEdKNTs9ZnphMlo5MF8y''@;'; put 'put ''SV9CMDZ5fVM2JGtoNT5GXSZJblpuUGJyZFREKDNlalZFQntDPlA3fn5paS8wQkRnTEksMUBiNEtqNTJycW5mTlddfVNIeSZ8SlJiYTRJcTBnKiw5OWFJSUdOYmhbZDhHI1VvInZGbXd1c0FdLmFuOzhwVVBsLi5ZTzEjdWZFMD8qTy9gVDluaXxfekJmW1IsXTxSW08uKH0xW1N3PlJiUmpVVUo+''@;'; put 'put ''Vld8aVkpWFJOdkJgMk43dn1NcUIkVVRNR1A5W3p0I0M4fSZ5TWJOVUQjR2ROcnF+RUxsOUBLMWRiOnshYV1YZ0NEVSU/cSNKRltwK0pJeSh3VEd2W1Z7KzEhPkIoP19fdn4kMyVrQXd4bUkpOjdsMDBDXUpAYysrWERzZVY/PU0xY3R7WixxKz8hK3IwO3FUKDhIYTZwJCVVKTJyMSpBR2skZT1U''@;'; put 'put ''KCU3R3dRXVNIRkAxUlU8PyY7Wk5rJVs0dSxWPzwiXm8vby9GR3wqM185JUB5aVlAbEdXNitVI0p7XXBObT1Oe2s2LDxQZ2tpcU94RjVQSjlLNzY2Wj9OZ34vPlI2flYhT3g2NGt4bzxHJkFVbExnZipoImphYy49M2l5KGY5Xi4se1JTalkrWDxtOW01Uyw6RUxSZTlKYzIpUSMyM0lWcmhWVTJs''@;'; put 'put ''PjUhN3xmUFhnYSgqaEJUMT5TfCJnbH55XWF8OnZPM3JLIWY4P3A9Nn1UNysyTFNIXj8uJE9XSmE9aTRGIihSPXV4Uz53YWJaPUkqaXcucFJoWiI9Q2k/QGhLVytzQilxQmZJQkEpSilETENJTmg9PjszLDB2UWdHISEmeU1nb1RrYXx2ODVXVEJdYSZudzsqeVNMMz0wW29XNGl2WCQqUV1RXiNf''@;'; put 'put ''VnEpJDJ7MjNmQTJeQEYrTXxNWE9YOiRaZ3NLdTVveyFXVXskInpPbUJsPy5eXkRucGAyYzlOYzlJSGtzNkpjUl4xYzt2KUwkRFkpPHk2MUk8PVgyUjkqdG9EfGBud3skZVAkMC59KW5pVzRfI3QyXyo6VCpQQEBNTHcyRiVzMDtdOUtoYWxgNn0pUlBNS3JvMSxgbUtmTylMSlBNQGxLZEYvMUdw''@;'; put 'put ''XmN9Zkt6U2dMK2NaSkIlPTZ+OCFlJCE6clRDJCVDUlRUM2xgd250Jnksc1E2fTRjQ2hkTHxDYnFmcTBfRkZxc2poIzJWd2tYTyooUzMsXTZkLCIpQiozN0V3fmowLF9aS1R1fndQKlBMNCV6VkZNfVc1VztJQHI5Pn13c0dBdXBwa1pnVmJQck1Ye18xdiwwN0R2ZWdTNWp+Ri9vUmtgPHxacUs3''@;'; put 'put ''ZX5TOj5vcUFXa3k7Ql92aVN2RFohZnJfdnlGUi9iO0FjPkJXRXgwOSg8L2EsfD02Vm0wbCE6ViszdiomMks1anw4VDM0KVNjKThhNVgqfWFTNytNOkhWcGF8UU8mVzpoMzFyYUJKTGxWWH5HS28ofWQ2c09hWmZxLyhyO1FuK0gxVGpTbl0xRGRJK0VmfXRtSCsmQTVXdGpQaDtnNTV0Mi55UTRd''@;'; put 'put ''fTIwWnNiKit6PS5lZ1Y5NUdaSCxeVSIwPF8pQzIzTENwcUZBc35PY1NlRkNxbGM+bXhTP19edjhnSjxndixpLHN0N34oQ1BEb1tfX15sPn17LEgpIUdwKkpKeEJ5OSY7fl8zb2ddTyZgejxRQ1lGMyxlJE5HW2szSSF0KjI8eDAyYysxMXQ4MzA1bFVrOFE9bTt7fmp7OVVoSVUqbE43Ki9bKj91''@;'; put 'put ''W3g8XjpmfkNbcWFycXVJMj8wZiwqSVtfZnYqU0Q4bDZ3T2s0WXJxYnVJbyhmOmUySXtxMUlQNUYuT1Z7e0JhJSVXT3YuO3daZyZkWUVLKCwxOWFUeyM3KFsyX259UUsheUY7fXJmfnR3c1t1dGsjLG9gLlNmRFBfLjF0c0MvZTBYV2JNYCp5eGgkYSt3LHVDeXRdVV9aPU89WStUWWoucEsheWEk''@;'; put 'put ''YClONS5lUGcoOmwyZ2E6MCtlXjxMbnRjVHVoPE5CTCQvPE15NDxaZ35GY3A6eFdvSmMvJDQkcEMqcVI8YTlWKz5HPFc5YnZqSENXR2B5O2RBaj9jK0gpS0lfVVhdQ00/S2pdQ0xpayRGNHhpeT12MS4zUkJzfTIzblBZXVVRUVZYbThVTWpNa2xUQD9qKC9tcSg4eF0zaENTYm1sTjsyNjdSYWkh''@;'; put 'put ''LGtsaU10aThFM2lJfVkoMH5eN0chPVFKRkNgVSpxYD09Nk14eVdwSH5VYTt1cDBNYVd2ViltcTdPN2J9JSJrNGkkNXphYTN1SjdUZF09Tz9WM3d9eE1IQTk7ZTMua2MuZVguImIvPG1xSy96VnkhRm5PSmR7SWldW3pfSzE5OCgsem09RVpCcXxJfHElQj5CX2U9e15BcTk+YF1BcXZ9QHxfVn5U''@;'; put 'put ''JHNKZDFCUlEwQS83TkZxYEIuREdFU25Oaz55ci5GfClrPnlyb0ZEJExMI0hwR1VgS1ElPyxLTSovcnVdd2c/cVY+Xz5ieX05RmZkai5JKmApX0tDLFhedkh1Q1EkPygiYyQ4Z0wqaXJ0MmckI3svZF1QO2FFTUR5TnhbPFhtJjNYTU9EaWBreUlGNWFSfmBERSkwVnNVbzArdWpHbGAvfFRCKUAj''@;'; put 'put ''RCRzYlNwbitlTkkqX10uUUBsZVZpO3A4KzhNN3crSyR4Xk00M2srITtnPEV6OX1Obm5ASXxjfUR2NSV8djNKOldicjE5VFVUX1dJLGN2PCopWG9iWnhoIiU2Ij5id0hmV1JpQWh0W3pMPm8hSyxJMUNGb2Z1SjBnWkAlZTR8NkZCeEZSQVNbPWs2XlspfStHKFdzOmB8Jk1kN3F3NXV7MmBmNF5z''@;'; put 'put ''fEpUODRVcT9fJTxxQzx+LFZrYFN2OlFdYiQoZS97OSM4eE9ualUhaF5WYEsobl1xLEEzQiR7K0M8OTdnezchKUouPHFjK2NiM1N4OjlOcX5TS25sUnxObFB8WGxlS1FSV0hzc3pUfS8oVSEhSS83SyslT3IoM3EkS1N6W3E+MXdiMkZsTCt5WUksOmA9YHhocFYqX3drRDE0VDliM1k/b1ovX25s''@;'; put 'put ''Vn45XUQlc1RwYnBlS1JPaENqVHN5P0tuUVQ9fG44Tj1keDohWyo0JV1fLyttJkt5bCIzZS4sOW9XNnw7dl5KIUxYbHdGSX06NmJKKyN8JitGSWdENC9nVCl9TkdCK0ZNOT17UiFbSGIkLi9vSmovYHU5VDAma1dQTExuNzJRdCp6Y244VVY+MTQlXTxBckNNand3U0xELDopRlRBI0ZjdHlNcn4m''@;'; put 'put ''LlhtayhuYlZnMVQ7amJlbWQrOHF4S1UjUXhlcjNib1oiZXdbIkEseyZ4LyVVYXF8aTh4PVR8MFJfOzspfl0yIW0laXMkSEhMPzZDUnRTOTJoJiEwYkYrbT0oTDV9SyFlJDF+dmY7MEkjWHZdQjsrJDV2TDNDUiZoJnNYeUQoUCFNKDZ+VlJnS2QobjciI3FWOWMwUk9RbjtpeSJObkxhPk82ZV1V''@;'; put 'put ''MU1GJjt2Ri8oeiRMZ1ZxRjdZbmgqZlJyQTpTfmNQTnRaQlpTcyM8aj9BTTpEUl4uKyZFaSRZcGR4ZnQiR2k4fHZQXXBJb010cHJXWm8leGxzXlE3VSZIYCNHYk4vPXtoRlFzSjRXcmZeQihIRXNXYm15aywuVkErWEgjbzZ7Snh+aCs2Ll5rVmFBU0w0cS83cF4+KW1Gfjs+cEVyUyttZUR7Slcy''@;'; put 'put ''NTtuWj5scHwvL3Iha11pSzAoRG9NeVIjOUhdXVJjOiFFIXBqYF83IVRaSSsoJWJYeUhLezdqOFhiWCtMTCVrRSx7cj90a2BMJnF2amNwMC4xQ2xaM3dWaEp0JWBtKi9vSVtgaDs4TC5CK2R5Z3lQOFVqSSRQfWBoYXZ1cTAkQCg8V3koZEtSVmg2WG1gLkxdMVtiKEFec1FJNE1MTVsvXiVUY2JB''@;'; put 'put ''SjFedUBDMjNFJllGJV0wWytGODVJbE0walREQk5SJUlOKms6QVsxfHAoTnJxWSleMSZjYCU5XSR5Wm0vI1FuNF9yVDg+ZFJvakArOzt2RzZSSmY5bX5oSGklMyQyMSkpUUEhcHomPytsc1I9PVVwQiYhMSwqRG1aYUdjQX1bR044bV1xRVlxbUVweGJqVmZjJUImOkQ7Iy9Xdzgzfj95anZVdzZF''@;'; put 'put ''MEZjS3RLNmc+RDRqTkBBPkJfWi93MSpdKXcqYWJlRD5BfTF4Im1ZJVhVWjIqXX56Lz5leVpQd111cFt2d2YuYWp6Qi5hez1Qd11KWSgoXi5WTTEpOyNEITBROj99VnszR3l0bzAuSFslNzFFQkZae019NDl8ZXRMayhZTWs2PDx9IUcyQl91SS4kI2RbaEt1bnhMVHJFYyRVPjEuV2Y9SVI6S3h+''@;'; put 'put ''UlB5QFhdQzhkNWhLbE8wOW8hNUYhakZTJnl8WGUsQ2NjWjxnOyN0NUZlV2pCWntSRmlWbnVYWzJ0ejNDYCxGU3t4fXJGY2dBMmlWZHBmRCF+VEw2XUB3I35uUHFjXVZDUExVcUsmamcuZ0U1VHwwcywoakohcVRjJUIuQDBvVFklPlJDJVVYRTwjM3BBcm8lMmRhaVovOWcuQWsyaT83fiFpTjhK''@;'; put 'put ''fiZSTTNhZFljfm9MZUs7MnkhUnMibVUpVV1SXW5aJiVwM3lPIUk8Y0ZDXSh0XjxgemF3OExsS0JYIU5samJmZCZLSm00NFoqVG5nWSF5UyJ2YCZBcVEudiEicHYvTj5ueU0kWXNwekdLOCovYUw3VlErbigvXzg8cVJtQj5ba14zPTlGaDUuNil0Zio8eEkmeD8+TT53Tyl9fT9OIXtYKDRpemxI''@;'; put 'put ''S3Yhd3BBLjtUVm5yNSljIVpqV2NycDokTSMue25zak5PTlR3LjxgcjUwPGQ9cWApRE1Xcj5zSFp+VnhoNjIofHxzTm5FPUEkM2FadzU4PDdESHRNW1BbNWl5b3lrV3ZfcU08OzFFMDs5ViJKcjJvKHVbPHl5O0BTMyxUdU86MCU8e3xSVTN5UjNBYnVMKF9ZTGY1Sl52Zi9dKkZiXTBEKE5lMlo8''@;'; put 'put ''e193aEF+S3dmfU48VWRoaSJgSX4qMzBUMlI2JHwqRTUuR1tkY1RZcGg4eGVsUXJ9Sm9mfTJFPD5ma0g1QVtESjVYM2FxN2gqalYxX0trKyRrbWs1K0V7VmpnRVBeNWdqIyFObnVrJnFodWpyITh4ciU5dkhFeHJ8UyFITnNzVmgoa3l8SDsxeURHMzlObCN4QGcqSz51L0N6KCtYeGZkZjRDe2tS''@;'; put 'put ''cFR9e0g+Q0s/WF87bCZDSz9tWF1DNExpdWQvTT8xXVpEa3l+alN5MWpCOXouTVlgfFshNEQmTWooOXhGKWBtNjFSYm5jRmkzSntAXmJ6VUtwNypVLkJgVWs+fColQi5RQUEmaC5dLGllI255ZjYjenkiZmJxO213XTQ+YSh6czpAK15DODgyfVJCUD5uWmZNI0h5Qj4laD8qeT9TRj1YMzpydWU1''@;'; put 'put ''dyVWcE1yOjsuMmp1Oz0lQ19UQztgST9pKSpGMVhley9Fa15XZi5JKHVHVWdfZHg0SClHSEY/eD1ZRmlOc3BheEhsNmVmJiJqTj1SamRYOmdxbjNoQHxSQixqKHFRa1k7QmdwLk8xcGZBSTs5JW1IPWYhUVY4VXpsMz86MXBpaFY4YmtpUUk8VmpRaVpwWjFAJUtUandPUypsWmRSP2pRJmVDKzVZ''@;'; put 'put ''Y1EuOmtlTWl6VXdXMFkwWzVxT3ZPK1pNYTRHck92TytaYGNEZHh6WTA4SWNBeCUlYGJsY08xKHFPNVFXSVQwMXQqWntjej0zS35rSDc4NFZIQHBPWldKY0VPRC5USnVhdnhJeUhJUnMyaEliRXNTUnosUi9MYlI4fFIrcDFtanlbLF8uOHxdY0JNVjg3em15WT87fStJYzJMRmIwSmFkKUpuKH0v''@;'; put 'put ''NlssUUdsMnA8ZDNiMEk0cVkoOEVHKVRNamAyOFouOigzRjN2e3lmTWRgYygld2J1M21rJFdORDtseXhZPiZ5UyIpe0ROTUswWj0mOmkmcil6ViR6d0Y0XTZwQF9iOFZPJVg2ZG04b1pBcUJZSEhOUDR6T2l3I2UrKUhQNXcxRXEuMGs4NW1UbjpRZUd7bndQW0VAJFJhYkRuWWE0ZDVvOS9tdDA4''@;'; put 'put ''JUtHbXF0fUpZbDgvNi4kR2hDKkhzJjU7X09fNEwmQF9edjhWaitlLkZqIiRRXUNVYz5NQUI+azZ4MjRTNTtMMndVdUU/dGhtR3JKQWZsOE96JmNWSmR7cDhFWXk5WE1kKkhzXk1RTSt0dno0dyVaSGhJaFU4IWUvW0lnU3U/OE1KR0prSUdSMDlxc21aMzh1RElEQ05YR3tNV0pST2w4PzR6VG13''@;'; put 'put ''PXJqO0hDRDkhWm9iPDFSNk07Vzg4O21uS09DRiM0fDJfYzpmUiJQY0RnTUVQITRiYmNHLnJlYzlvcTZ1PGBQOy9ieyRBVGpqc0M6V3ZnW19qREVgZ1o8d3hIS0BjeSRXO2hFQ25uOmBSWjxsLyNUI3UxZkRqQDBrcXtQO2JGWCJpWU1jb0JIT0tAOi5mL2xOL0JpTmN3XWtoM0Q3UzE5OzY6Y2Fv''@;'; put 'put ''SkBPM0tbbmxnb0lJODU8SkgqcXk8Iy9NeU9DTkRuRE5yblNuR2JCZk9gTnZWOHUoa2JjRWRwKnhIfUAielNKaCo1X31iSipsIlAzU1FoNCwkOkRuKjF7fE4pS2E9ZCY+ZVhJNTl0TVFELCJ+YS5fMldmJSlGT2B6YlEvJi9YcWQ9KjVFeVEvMldUbEQlU3RaOSMzPnh4I1FqNm9aanVmNzBNZiMh''@;'; put 'put ''eVl0e3ZGNyoxJjk6InwxJGkvSGhac2E+S2xodjRmUmE2dk8zMTMqQGI2WHJeWkw7SCIwT0ooV2AkPmZqODdzTV54S2U8STNPeFJ3RkRKckA2aGM/YSg3RFo7JmQ2NFY6NyomQGd2b3YiJitQbC5DLlhbJT09PUV6NVdfSzY7MnArZTRkMDlgbUw1eVpITFU+UTYvO2xLITMkUHgwaExeWmgme2hs''@;'; put 'put ''OEM7Li94VCxDNDF7Q2tUeSU8LjJVTz1EVFMxTS8lMnBqanlaeFcrbUZzdW5vcnckRG1wX31lUEpgU1B1dD1DZT0/KWtOMDRDL3o1Zl9MdmYrNz1OSlpSMm4lTkNlVEp8M1hMcCY9MG1dWFskJWBgbi9JVGl4ZiRCWjxULGUqe2ZuKFtdbDRnS3VfJW9jeHY8e34kJl5PMjNfRSlLbnhdbHcjfHAu''@;'; put 'put ''TzRDbzo4Ryx9WjtPImp5JGlvdDBMNEdnMTc7PXtkWnc/WiJ3SiRwMFltaU42MHwlcGR5cGAlVzBZMFs1cU92TytaTWFVYUxhTWF7Y1cwWTBATUdOK05OTzteOi4wMT9AKEdDalduSjArWjN6LD93eiR5U21vPXhQRWZ6PTNLfms7UHBxVkh0UWtPT0IuQWJ5MSwuekgzNHF1NnFFdW9ZW1JbRTJ2''@;'; put 'put ''eFMlcGQ2UigzU10vYkNpKWFmRGAoUzJALk5VVHBzbTNbLGBOYTJTb1ZCR2B0dHhlY1J1JFEvX1QxLkp1Q3kpcENbPzJ+UyJvfEcxOXx8Nj5KZSFVdyVpXnlOLGslWVklM1ZDa3wuPk5rSXdXPCowRjVeKmxlNCgyLDtIaTM6LjVYblpBWj5xQUNWbWszayM1N0ZDRzVSXUh4WFFaUEhPVDssKXps''@;'; put 'put ''aVZaeHRKXXFKL3AsZXttSGFpUX0rVk8+WUNsOHFmV1hmYzEjenV1X215Y1h1Pl1WfmlTOXg6e0dsdUtpeklCRXB0JkJjL2kpOVtMJm5iZkgzQlA0ck8ydkxPZlBQYCRldldCJilmbmYkQ0U5dCxJUTE6aXxJZ1FQQ1pHUEdQYW9GOVEraCVTNWcyNkgrMXZAejw3Z2lOOVRdL2dzfktxI215O0I/''@;'; put 'put ''JWQ9cHUrI3RRaVhrbDIjW1JeRj06dVpWJi4yIipLOiUmQVZdfUxMVDtvQl1WMHAxRzBhcGFIRW1qUShjdUV2fnVBdnVsPyxrVHg+PjhiOnJlNTIvI2FvRktWOGdsPjh+MFR7I1pOKzNLWDM5PVFHZj1adlk+Omw9SWIqdztiOj00ZTo8TDt9NzsuUVk/VDVkPSpjflRleX5UQVM2eHIudCU7KkUz''@;'; put 'put ''Xng9a2VOWiRaJHNdImdyZmhJVWhsUHZXbTZwVl0wQzVrQzw9NiQzXzxOaCowVi90XylNNmoiYSYifHIlJVNVcUM9Q35mY2xtcDZqTTQ/dFl3P1Q/LF9UXntVa0doYWJ4Rns5PX0zP00iSiVMfURKRVtDbFgsQFp4XlR0QHlydn5rPnlybj9AfFJHOihHbXs6O1MiWT8rdmkrbn5vb28zbnhaaSVA''@;'; put 'put ''JSx4LnUqfF9Db3piRENtejI/bjxmP20yYy5rYSQrL3o2YFsubWZmb1B7dW1+bzh2JnE7MTd6WXNYezszLjF3dU09TmxhMFskSW1+R0pYSlpxVTh1NTswTjkxWmpodUR2dHVmTCZBZmtQVmZ6OTYuZVVhSV9dOkZgOSY4YXNfMiZdOGEsWVl1KWVAd2wySzJEY3NtMGxPMyhWOCN5JXhgey5Abyxl''@;'; put 'put ''PUlyKXlmKzVBZW10UjBbKUZfdHF0UmY8QWBITmVJWSssbjE5ZDRUO1VaNU0/SVU6NlNHfSFfSVJuV2Y8azYrMGtrdEVdX09fRHosZU5tLkwlPEo6VkdLakhETE1kcVluYi9edCFbJEhZYWw6TUE0Xj93OXhAKmx0Y317V3NzMFJNSGxrUzg+OGdJejBNditlQTFKJWJwciFQJmgoRlIoJXhea1h9''@;'; put 'put ''fFFmVHVbOEAuW08iISpsT3FlOHxqVmJYKFMzdD5vJEIqImpeLlpiQkg4Q11dNixZJC8zTyt4PUVeMnVHKDtvbFljKVpXIVBVfSFJRTpNMikyLDFFRS8rR2UwbHp+c3l0MiE9ZX5qMmVDemsxZHwjTk9IaHU5VUQzfFlDNFtfZWhHXlozODJMTjswSSF8ISxje2MvZkJWOUphYlNUfm5bM2lMaGZw''@;'; put 'put ''RHA1aElGYk4icj1xUjF8YFhQVmB2aENQejhGcXxwSz1xYTI3KWxIRyZ1N1Uoa1dyK3JzOFo+SmJXU1h9X2guUDVfVTcwcE9udnROJmd1e0MydndsSWlTJmh2KkBXJkldKH1gIyQhR0k1ZT5HIS51U3ZTPjxLJERmKk97SiFmVDtseyYoNWJgSFd5bVY1KW9tIU5gYGdlPHpqWEI8Q3kjTF5sREVP''@;'; put 'put ''NSN4N2FFOH5IJGFqUHZpajxwdjAzalBmTDdtSj49UGlNTDJHIzcvNDMjSXdDcVlPQ2gpJnY5Ly5OMilxdUBgMXVFdm1DT2p3S2MrLz9uU3A0ZHMpREsiN0VWbm5CWT5NVlcrX2hWWXp2JnQwVk57ejNPcm0jSlJNN0tVPnZ0a0B7R2BCdlM2YG05UG9UMCQ6dlBEdTheJFlWUyFFRktfcFpWeV5I''@;'; put 'put ''KWZvczkhTVgqKWAmO3VEXXc6aW8qXjZAQlo9ZS8vTVZXXV9WRFYrcGpEfSNfOkpINGR+NzFiWFZeW18zUG0wSUFFeTk3VS5KN2QsZX1IT2hQUXdyW315YGZJVUZUQFRwLy9QbC9XbTt2Q2FXJkw1RHUpdSkwVjl5KGVuRHd3Y2hdPzE5djlTVnI2cEApO2kuS3VPIWwrcEdLKnB5JitrOEQ0SDN7''@;'; put 'put ''JWQzRzNYZk9ael9YOyZgMytlLjI4YT5aNCtld0Y1eVBESy5PTUIkIyE1eGxhbDVVKmQmeW8senZAIiY3aVlHOVVda0ZpTyF2InwmYkd0Ri8qczRvLGlxTVFEdSNZPHlyPk5CZHFGNDhQNF1zWDg5N08wS1smWkMqKDF0XXcoc3lOPnE7ZSFJP0FVSkZzVWQ1VExwU0tTZV14IX1WKDtKXih3WFRv''@;'; put 'put ''bGp4cHN4XjpqcVBxZlcrUGspIUVOOCFGL0tbXWg/KSRrOFBFZGAyOiZjJl9WcF9zMExQXkhsNFplSUJ9NmxaSUg6a2w/a3RhXllpaGh4TnpOJkBxcnVbYmd1YG8wWCZPe3ZHV1VkcTgoQ1s/IWJCeDdVfHdtSXh1bTY9TWg5PG9Ea0g9NDpPIzxNe1NxLjl1dCl4XzVeKSV6akFTY0tzRnVgSE0s''@;'; put 'put ''X1l7L2IkMEw2MCpfb3hDQl8pS3BwJkJJUiE1bD9scXY2K25YbnteZy9XRWtrYj9EbSZbM0chRjQkaURkezlVPj0xJXdqPEdLbiZsZDBAR1ZrbXppS25lflQ1I1JyWDFSJDVCQSwkX1RTRm15YDA8bWNLMCF2ZToyTmk6QHZ4RDt1QlFId1lVJjIxbGAsJEJVU21Ea01LeSw3dF0hJTQlXX1hYTBT''@;'; put 'put ''dGNXLlNjaFdAZWQ7TTZqWnlFeThbTUBvOGp6UTBTOyFAJk9wPHtkeGc/ZXB+RTlLVilNUHNQeHYhQGZCQ3NCSyFEL1ZFNEVHaE02eHNFT3VbJTp6aExxSm0xdVBdPVVqezBySl4kcFhWbnBYPy9rfHlKZm8kJC85Ky42QWovWlczaHczSXt4TlZIa3lWM3pPTFk4aS9jUiNJKnIpInFJNTd0dFA4''@;'; put 'put ''P0VzV3EpZk84bDU5UXUmJFM0dGZsOX1bbFZbVWV1NTA8eyhlNDJ4WnJDRixfMT9zOUtsUk5tYnY/eEdoZFo5bXJCLnUzRGRBNjorYFJ6Z1IkTVQ4YFRtMSs4YW9PdnhQcmAvUihEVjVOaTlHcSo/RWxBJTtYNDpncEpZNCZEej44Qk0vSztGbntnQDA4OGk7fVc4NlhdX1Q7bSl4N1N6SDFWcGd9''@;'; put 'put ''Yj4laFVpZiJlaUJxSld0S2wzOkYmTF5Ue2JYKmw6QF8odFZwXUNMNEdLJERJWkhvVHZedj5GfjRbTElfYyM3KUZjVnY+R3JDLnxHNj87O2JUY2V0ZXhuWV10YT45MD9MQFdnPXRCKklbLzp5UG54OkVIMkR6VF1gPk1+aiEoV3d9eSNIem1hPkxZPXBHdnZ4MGVSfXYqaCt1O0FSTntRWm1RbUQv''@;'; put 'put ''JFkpP2MoOnFIY3RJTTA2WXZVfWREX1krL1sjeVduaHF5RF09JnFafFAiJCNfJVhTLD9VUSE0TGBeJVg0XWxzMDYjZX1aVl1iNz1VS3Bxd1MsRFhfeFthVHVBbl1xYCpSd1BoMTFlc0JBXVVreyVQPzB3LCJfNWphXXJfPUBCQH4sZSpwMFcwRGRKVTBPQUsvOm9xdjVqQiYsYyk9UEZgZmI3ZX11''@;'; put 'put ''clUofmYqdVV0KHRgXT1pXT1PaGR5KW5QNkVoK3hpZWg0cn0iInRpOH5qPHt9cGtKSSFFNDZAcFYwNFdMMmxgdG9WOV5Naz5SdGhnWHJYZWcqWVQuMUpEd21OLE59aDJpbmBhSWkmQEBAPyRHaURQKUxqNnVvK1tJSSJ2MStlZWp1Il9RIUlDciIlT1VVRlhjd3s3I3gqYkl0OzIsNTk/V0VbQVhF''@;'; put 'put ''Wz5maWNKaEtKXSFhL31Ha0BQU0VlMklDXk5kMDlAS2tHXVc3WiUhMT90JEhNSVJlZnNFSz9UbSR5enhuRHxTcio2ZF5dKyhPJlFlNTF2UFQ7Uyh+Rj5NYCFWL0hoYSU4WGZFUVtYO2Z1ZXM/KTxxPVM9TCp+STh3ITBYS2tAVm9tZHBdSzpZW2ojY3Eue3lVaVJLIUtzLlhlTSw0W1l8UCFGZj95''@;'; put 'put ''Y2koe1FveiFMVVBYIX51b11dMEh7a2dpOWhwVCJOej9SQWhXQVR2WTNlZF5QVERQUjhpV3E4IjM/WzlkejRwb1pHbGcoQ2VwZHkzVkQ7QyEvaCtlRldOVUBwZG9belA4e20sJEhoa2gxQjRMQCh4L141YXhWJmpQIWk0I0kjX107SygyNWRmPWxVY3xQKnNxIiVEIVU+cWVDXnFTYCsjU355UlBb''@;'; put 'put ''MzpbMXJoVnlyPUc6ckFrR1VpXzM+InpnPXwrb1g6I1k7e3A7W0BfeFsiJUhFQylkaTkiXlRkaSZqVjZmX1IvaDNkcDEzL2lkeDNROnwhJVdzbjkzVmNLSiNIIyNIKTxnWlk9OXxuczZeeitfS3pdMnRva2YrTW47bGlJWD5vdH4+aVc8eT1JU0g1W15tKGxRWlI3O002fGMod3xhcU5AMjBKfTRy''@;'; put 'put ''NjpeVWNHK19tTUYsW0x3d29bS3RYW2ppNkhZRWZmNChqVWBDbVdZZGd6aiY8JFRfPVVwTl8rYHZpVjdrbVhnIU1pTlZITnR6W2Z+cTQrWzhaSXVMS3hfZEl6PGZNTTlrLlVwK2hPRjNPQ1BaYW8iT3pHRFksNWo3XlYwK303W1s8YHMie2E9KXpleGdSQFM0S3ltK3dJTk1Qb1hYbk0wIXV1KSZa''@;'; put 'put ''WCJLezZiNHBLN0tjdUZzez4ockA/Qy94P2ZAYXJTKG5IKTw+elBUJU11ZjxwQUpZeltXT01xOH5LSFVtazdXdUdvdDRPRSU6bzlNUSVpUWRUbTlmWzVHMXcvOzMlPS9UbXgpN2QiJXBecHdTaWhaM3pwU0lPMXcjNTQvLztCXVU2byE+Uz5ZVjArUngjP1YwK3A7SmRxfGdPMDkhcUZFYUg9MCFx''@;'; put 'put ''MCw6SE94UWgpaWpnJkBOaU50UFBpXSZnRXdRZj1jcXxVTWldZlo8Um8lMDBhWU5NO0l5WkV3YVl+fFVNNlIyY3krZU9sI341TE9ZWUBUQHp1NFcre2t4d3U0V0MvVFgrKFcvSHd6I1ouZU9GNFBETkFOeTN8UHJ5W2NlK2IrI1pyRnM6dF4ibWxzSXwxent0ZjksMixjbWFSeCsrd3BGPz16IjRe''@;'; put 'put ''Kjo1WGxIWEA2ZG42YSY/LnxWNzZfalZoRitWZjtNJH5yMkgvKy5jKUYvXSlHL003S0pHWnlsenc4QlQkTigzZDpoekdlWCklV2t5OTA/RXlWOTc3TkVVfEpgW3R8UCFHPEVyR3s0LjxWXUtIb2NDWUJzL3c1VmpQISNfIUleS3c4R3xHYWl1Nl1kNWZHYV49YzBtOUJSPyklR3ljcng2KG5tUTRI''@;'; put 'put ''Oyo+IWhGZThLZX43RSFGL2tdWVokP3lscF0wdiJ+OiZkMChOdnlXelFVQj4zZGArT0IvalU8QmM4TlpVXlRtP0dPcm95fElMOE1UdmRwY2lVZWhxdnY4K2NpNEkjUG5PQzQrN0FPOD5ocDplbVciLGJnJHZQbzZdJWx4NmRNWVJtVztFXm04VTRnS0heOFJsbTt3dihOSXBESG1ec0RydVVnbldi''@;'; put 'put ''TTddd29JUjxrYCtLV0wva0IxQm51d0wzLHtLQCtsOlVHb1dvRnNdV3ppW1JVPnMpZHgzT1ApWysvTF1NbDZmbmkseEJRPyRVUWVeNyYwWnQud3hBXlR6LjtjZTREVix6ekx1RFg7WVYsZjB8XmE4QWV6JCVrQmJlWX4+QzRXKUt8akpVcCJAWDt8Ky9hZCtOQTUqREFfX2duQUE+b3JfMihCYGxf''@;'; put 'put ''e2A2XSFDTjZ8X3gqfU01RD0wZUlrSyZoZWRJP0h6MXlPb0IvX3w4fV1LZEBvZzU1dVpjSDsvcTYyKyhLVCZdSyZEWjskU0h9KF1ANH1yb1k/MG5ZM2k0LyV7dFZ2PjpOUl9oMDtvYlVXV2M9bDIjN0Rjb3pxbTV6NCNFMUwkWztiJHVOUjVvKk9ieSVFPTNrPipfTjprYSQjbj1aOFY5aGF2PjEj''@;'; put 'put ''MUo/L2tSaSRpOyojOjM5WWN5U1NVQ1MxdWAvJEchMVROcndBL0gzVyEjSWRNPypUVEE6VV0kbGt9PEskKn07KmljOEc5cixocFMjKm9zZz1Ua3IuSEYkMnphUl9pIihsbGdKJTI0PEVSI0s2VnRWUyVhRiVEITpebk0yJG1LSHtlOSkuPGQ+YXwmKShvbmZtISYmYG4wU1gmeDtObFdNXUk8T3ho''@;'; put 'put ''V2YuUC8vdSl2OHJ1fXMkaGBGNHg2OWBgTEN+UWM/P1hnZkFBPzFVP3MyaCReUUx2YG0sKEBCJXQ5P1hCdi5DZkFvamAlXkpUQGhhNjt8YWE3OVh5dyx9YSREMzZDdVl8ZWtafX42Ki8lP3pIVDg6cTF+Inw3NyldQEt0LkNmNz9WTm49ZnE8WjZgOTBqanshKF0uUTx8LndZRWZ3N2FSaG5gYUkw''@;'; put 'put ''czxaLFM2Yng9cWZuWCx6QUFDek9vd0JXVnQ0TiZ0REJ3fkhqYGNAOlRUS2lDU2B8cEVhYEkleDglaS96OTE3a2dXezFkU1doI2AvN1JNSiJGIWptbzZGJmZJXWZKejRIQmxiTDV2Uys3eTU2KGx6eiRIY1ssLFkob2RwTn4+XWV5ZVFjUmhGaTViQ29eO2J3fHF4VFkvOT43d19UMSFQMyRhdkc/''@;'; put 'put ''aXBAUT9vMVI/b2FTQGBrTUF9eS88JisqeWYvdmlYJjNMJVsuPj9WJnxlalY0K0F4SlYleWNWfnYiSFRxK1hEL2E8LzBwSWpid1pvKmhvV15FJWohcUlAMHw7KzBIUX1PUWVBZzIvQFYsd2lOSGAlKT5NUlh4OjUsKjU+TXBwdFlqdCpQV3k6NTo1ZS40fmBxMC8iXmtOPHhvY31gTyQySi56dWJy''@;'; put 'put ''QGckbXYhMyIhfEA9VzNZXWhGMzhYZiZ0TXdWeiJhKzIoXzRsXl5xZk9XQ0svNWEkdSgjUV40VEJmQ1QiSzA4SXhzQ2wjLDt4LHoyMjlPMU8xIXFjdHp0KmBRI3VZJS9LdVFseVlEP0ZSUmxbUjhvVUR2LyxqInlPTEI7ZGJgaGAkNTBNbHkhYCtoOT1JeFJLQ1AuQnh0Yk5dMFYjbmE+ZEVnbDIj''@;'; put 'put ''UWwrZ11ZOHlxbS9yejAxdFt0fX1pfCx2MTEySUkiZ1E9SmV5NiJzQ3BRN2NiUiFOWUwlc0p4JmRkSTFCPCozejBfX2tlK0YiaStoMyp1QzI/KElFV09SIS9mOkQ1Nykvei50XmFALEpQb3NZIiw2R2NGMW5dM1ldbikxTVJLdzNlOjg3QkVnYktvK1ZrMFNIekY9RGZqfkB3UTlVPVp2YmgiN346''@;'; put 'put ''bFpCZENtcCxGQD03UGR1fHZnU3RbcTI8eE9HaDU6PVs8fk1ZK2l5OnkyRntBPG1xfTBAXT11KkBfTnVkRFklT1V2ITBOUG5ne3pnUE57ZnVwXTglfTRnI1UvLFo6MzxSSVVoTyFHSjdMPUx3W2hmUWJ9fS9kO0U1VF1sLilEQkt9XXJTI1dRPSlUfHBWcG0+XyxEZkhne0BodV9rQXtVWHVleUtZ''@;'; put 'put ''bDh0QzgzfGt0OHRKKXVzZygzbjdDRC9dWmZjN2pHSkA5ZCR1MnE/YUBFKlMsR0F+YHNHR3deZC88YFN1L2cmXXIhWEpbdXFkYXYhUHRXd1cqQFMzSTNzQiFNPXFqdn1rWllIZk87ekVuMUIzL10wbSU0JSNKW1ZoOT0reV9waXlKQDZuZ2hkJTRKYlUyOmh4TlNQQDopWEBQeDNAc21TMDhCdT94''@;'; put 'put ''dmFvamMrSVN2VnxMJGU5Lm0oWyJ4Vnx3Z2BQeWRYQEYsKz10LmNgRyU7PzZvdjdoLihtfUM4N3R+NTckRXh9LzgqRUdYYHJ8OWtdPDN3Vk0+VnFPWXMuPj8kPFpCKWh1NlBVUltxZ19ocjFTMW9tUXByfEUyaG1Se31neXFSaHZGZ2QyKl1gIlkqY3ReM09hb0U2Tzp8OmtwZld3QCI4dnRuN1p9''@;'; put 'put ''YlsoNy5TIis3e1dtV1pQa21WeW19R2FbfFolYWwyXzd3NUM+dT8mT1dec3VWbk8lPWQyO3BNZGk0bzJJPz84ZzJRVkxFKWJvXXkrOHlGcnFhUSo6JnJpKChMRVpXPSVWV2JwXy8yQ0Ipdn0kInYxKUtDLD1neVJJJEJ7UT8xLjxVOjFvRnA/Imk9MClbPT9xZjU9QlA9MG1FKSVpNCtzLzNCfiRG''@;'; put 'put ''WGdPX0sxZyR1IXI/IW5mVz5UWXkkX3xRPT1DUFQ2RUNbO2Z8blEhdm5FP3tuQElbPzo0JFNFOUdwRlhxQkI8UyxEZ1NvNWZ5VWVXOGA5RnxWcj9iVCp+SDJ3SmZ5XjY2YjwrYz8iYTlifTFmM3ljPEBrNi5ReFBuOlsuXz1kcDVsZ0BBcT5MenxLMilTfXJhI3NAXSs5cCg5JVYhNWNgdGp5YG5s''@;'; put 'put ''SjtrUkhqUlJEWENOQGNeQT4reEREMlo7MnAocUgrLztUMyZsP1YwOT1jRnsoWEU7W2xXU1h2dmV2NlVWdVVJb3p0OmhiTCozRT94PEpBMkkoLEtrK2cvL2AzN1MkV15UNC5oenN+T3Z1QHx5bloyci8xVjBTejpWNjtYYjtrOldXVWNOUUpIPmE7LnJPSXohTzMmM3MlPlRmQD18SUFBOzRlM1hE''@;'; put 'put ''TXRlKldETUxrdyRscGVuQUtia2h4O11CfFRJSDYvV01aMFt2WytMV2BRRiRBUUl0YFsmfmBYZWxVRH01N2tqfFJxamRITD8rNDAxbiVBUShCKih9ZV1lKXhXPWIiOSpfdCxyRyJZNGw+X2w5STFSblVRPWozQGBDeWlKWnFAQ3ddXmlgIXtdfUJOMjRwRjJXZjBUem1hVCRsMFNPIXgkLChRWmRs''@;'; put 'put ''IjhzRnhoUUB5VEoyP3xGIUBacEMoSk9zRkZrcHdtekBpaz5SQXEiL0t5diFRYU0uL017IW5mZDdlMEcvNyJzQFJfWEYjKyNhR0tbejZKNmJHM0E1MWo5NlUzPTZDW15ePTBKWz9fL3s2Jkt8PVpNdiIlai5SW0J8fntMam5gRnw4RGQvSCIsO0JtXU5ZZyFDfDVHR29ZTl52blQyPEJ9cktmWTMy''@;'; put 'put ''dGoyUzkvOWNjI25jTjxTSmAhNyUhamJtYG04ZENpdyFdbFRUcCkvQy5XeT1kR3duSmhTcHFEdmFMU2ciSlJiOEJXSkgkRH1oI0NyT2JVVS5rWm9uMyV6OXFfK2Y4bGpGOyxGfEpkejNpRUhMKSx5W2RRNm1ec0sxNlVWOCFhNC9OajQpMFNDb3tAYHgvP0JXbWpOZ20mYlkpRnohbkMrJlhAcV1E''@;'; put 'put ''N19oO3o2ZF5XOVlFR347OGh9LFsjclVOOkIycDBvKl1tOUUsO2c7W0RXWk9qRStUeX0objkiP1hxXjIzVzdxL2kjSVcjdEBYVi46L156eHhWZWkzKmlWVj4lYG1vNjJac0kjbzRJVks5dnshLDFBYmBHTy5IbjcyMVNCT3U7QTt5PDNmajx5PFhmTztxVGBLWmJyOHIvWi5ILjkyWzRCJThXXztT''@;'; put 'put ''IVI3M21NT2w7cHVBRGskMm5mcVJ9X01JJUBjK1hmeiJuZ1lGei5zVDAqbSY0O3xrX0lHMjsmc1ArIjhSMSNkdTtEWmUlIjhpeTB0YUI9dXYzQ05pVUVPW2lLK2A3NkZecz1NWmtSUHh2ND5LfENAKXxOXzZPUztWeE8qSE4mPnlydWU9R3lyb0ZsYXZxPUd8KVhecXl0RSIsPEAybUhxYmBRIX1D''@;'; put 'put ''TT9BMiFiT1kzUmdqWXZeMHRvfGo4TyssTmxbciI3cTU7bT1HcXJ0PzYkc0Y7L05WNUIiL2pRTG1bal1DJXViaUlZQy5PWEpbUzo0cGB1Q2ZtKyJ5WXh9UkdYUng1fCszL111bztORVBiOiRSL2k3NlhlLHFlQ1lhaXBYTTt8OTk6cUFSc2pEcXVtdkQ/WDE3N0J6VkdGYjY0VH55XzFrbShbY0kz''@;'; put 'put ''WGs+SyM3LjZBISVnKyk5Vj5MakprRFBeeGNlXjZnKywkRVJWc35gY2ZTPD0xcmBGbV5dISUpK3BYY185RmdIPFdVTFllI10/TmI3dzNTPGRDfVQxM2JQLypzK1NRRCVDR3QrdUdxOSZGIyZSK2NWayk7b29RUEdkTCl0ZHRwVn5wPWtYUWx0IjkpVWppdkkpNnQvV0lQJHIsNzEiRlVNelcpM3Iv''@;'; put 'put ''cnRsN2V1emMhR0NDbEdAUXR0VSFqfUFycDliezMsNTlIRzYuNmsiKjIoWUl+V3crRSxwRj4pYnA4dnRRaG0rJShZQFd2Z2glLzdTImFIWkI9V2hxQ3dnbDpDIWlWI2E7QC5mOD9vKnRBQlFjTF1UQzlWflo3N3ptZyRUQyt8ODRRRHk5OCY7NHljem1xUW8mU2syfVAuKjFmWUE7I3tdRT0wVjs0''@;'; put 'put ''R01XZ1lWT1p8UWZ9ZFJ2KmA4K3tsOlQoY2NZTzhMYDUkN3wkNDd8W1s2WiJsNXUjaXIieU9lPlY3QX0udl46ZT5fSyZdSlhfeFVAX0M/XzdQZCpZciFEMkIwdUBgT2E0PDdhZF5OTjhwdHorb2dYPlQoaV51KDFBVj8wQnd4alldTUJobG0vb2JGLDhZNXhfWWY8VWQ9eW1hPHxGOF1vVmNoIy8j''@;'; put 'put ''eylhVCEhcCk/ODlMemg7UUR9SVduUEB5fStFcUx5YEohRUJ3bmpXMjw9ans/V3xAdF5wLypSYV8wVkk2VHVMPmNATGckQVd+V21vPUs9JkshO0QlMW00UWkjJVg0cThvKWJvdj5FX3w4ZShTeSV0QiZ6ZT9KeH1RUS56LyNuXytgNmlPPCUoWTEhZSsqbSY7SHhkZSlAUyRjMUJJYmQ3Ln1haDt0''@;'; put 'put ''LG5ZN2xbWE85MmcmPFQ5MTt6JWJqX2plakdwJjx2ay4rcEBHcV4zWjoqYnNOPk5FWz48KFJ4XVRTY1U1W15fQC5UW1BURntGS3JkYnAwZzxEIT1sVHhZcFtNSzYkZjkhOzAyeGB6PDwuUncxaGAjZCVVVnpYP2xwQF1fVngkLmk1QG5mWzouai8oN35QMm9LZ05idyxTUilxdGQ8fikiPzk8TzlQ''@;'; put 'put ''YHMrOD88fUAsbkFZdWkvTHVGZksiZyZleGEzXX5lL0svLyxDSno4QFp+XlN5QmcmUFgwJDUjdTR2QGVrIVpmXkBCYkg9LltaSWteLit8P0h1bUFDS0gsZyQ8Ly8vRSMyJksxMm9ATCN3YlZiTT0xQmQzbHRCWXxCezFCWUJ4XVI3fDVER35ya28ofnE/SV5yem5rezRxMlNlLDx1YTwkS0YjTklV''@;'; put 'put ''aHkmUi40M2pjUUs3NlVWfTEzbGdASyxkT2djJEt3M0Vaaml7VDVbbFZUSE03amo7U21kSGEiWHpBQUFuTEBAb0FVRS9UWnRFTSx1WHhETV8xS1tHTyQkM2JBUGguXTFEeSspc0UzUiMqUUFHQUFBJEFLaUNBTD8qNHtlJVVdWnZ3ZUUqWVtFUThAQ2tpdHhXIj83c21xMF1lKCl2YTpWaDh5LHY4''@;'; put 'put ''MDtXVFMiMFIwJH5pcWdONUpIdUV5MjpET0NtcWFwVndYMXhJLlN3PWZzLlI4SU9OeSp0OE1BNDM4enQ4OFA6Lld1eTowOWJIZ2hbWltaWTNHZUUpRVcxMnJOM0NbQ2hNfV9+TlFOY0gxeTx4QXNhNUl8YWFSI1dSfDw1SGtSOSNNTjMqaSlETnEzOTkpR15MUERQIixTelVaSSpdR1A0cGU0Tl4s''@;'; put 'put ''SV8wOCFMOyIwWXAiPGZgbChNPG1NS152dEQyU3hdNl1Id05xX1k8bjRyeGlaMmFgVlYqRSV4P1JoOl4kTCwqOHYxdyQxQVU1dSpXMTB5eFJUWi8xR1ZSUzVRZUhvdlpsWUI4fXA1VVg3TCs6Mm9YfGkmI2BEJGtaJEBhUE89XUU3bl01VCZwNXtqcX5nRllRSlRyRXl0WVNtakhOcCxjKEd4OzlL''@;'; put 'put ''a1Vhd0NKKSZ8fXVJMGF3IldyUWZ2Slc5bEAreE1ER0kuZSNLMUZrLiFfZWAuR1tuXixjazVRMT88ZHY5PTl+TDgvOFt7WkIyRjd8YzZQdjptRT1bPitAWnxsLzJ2UlFpeTNSaWpzPm0mJkNdXnpicnksOzI4L3JhUjNYX1FWbUkmST1EMyEsNWVILy9JM15DeVU9Y14wTERXUiQoOCE7Qls7bkxL''@;'; put 'put ''e2ghRzdCZFJ3SFVaITddd3NZVHQqQCkuY0NdLjNiWXtkQyt6dixbZX5xKngqP2EhSzpoV3NjVmFIX2g6cXcwJT9LTGVbNEtWXl9uYz98OV1oemRAM2AmX3NGSF18bHFfWmZzSSpvODM/OTopTlswPlRUUXlDVilVdChLUH5Ee3JyPDQsWHxRTXoyXjpMRDNWcyN8YGB6bmJaZC5hW1s7P1l5UzE3''@;'; put 'put ''JH00PFhydyUoOjB1YjNNJERzelFuPW1nTmpWOXt2JkR6MVNdaXtucXNBKytjMj4qenlUenldWEJ5YkxGQ0BoRzYra3deOkJBZGM7a3Z5djo2NkxjXiNgUklVX3lmd0M8cExnSDZldWRJcHRkKFIwaWRUX3tQIVFIQVJXczE5ZWxpaUp2UShiWn1FbGpUKUZMKUF8a3F7JSJJKzoubypqVFdid3Rx''@;'; put 'put ''KEZ9bkNMYT96R2V4Ilg1fChAVmB+SD94RTdwdEJNVENxRWt1ZFZKYjhQbDtGe2l0cnxSdz9xSCFGKnZwWX5FNVdNIytkc1FTQk09Q0QoJjZPYFRAUV5fLExFcDhuXTdHUCtydSg/ZVBPX3czaXs2aXYpZGtPQ1omYnZyfHpvYy83PjRZOFtHNnU0Q2IzXVUiQ2xHN2ohPnNPI0Ype002L046Vzdq''@;'; put 'put ''U1MpIStiWG1ifiNYSjdlITl0YG1fZCJQPm4wbHVuaWhjS0ZsbnRyZF5AMyUyM0FrNEVBWG86dHUsSlVgJmM1aWIqb2RGQnhwKkd2I0ozO3w5TCJRSDAoamQ6eXZfUnZdInNoKnBvLFRvcHBmTFhwdEk5PjJGOmpxSHtIcjtPcEdyakxvVTl8R1ZhVHVSMXYzVDdxUV5teUFGQ3o6dF9GbEh2RF9I''@;'; put 'put ''VFdbOTNWfGUyKnJPa1JZZXdrKz1ieD1PKVlIdkx4eU1lfVI5TUd6RWNDazZ7RU53KndITVNmbTloI10rMSppTSZFPDU4VV00S0NzPUN8NVN3PE5gJlJTdXxxNkpnbGthSVlbbFlxI0RZOGE2JHwrVUpyNzQkYi5CLHQoInpaMWFyTSI9RXAuMCs1V0RydkkjY2gmanJiS1J2ayJIOURiaFJ6PXN6''@;'; put 'put ''cXBVSylAWFF4XlZ2P0x1Njk8LF5ha0dwVD9RMm5Tal5fPWFKZ3ppYkNkP21EQCY4e3l6dGRGOFBVOk1bTWpCUzJtRCRgeT10Q0d4PXNQRWxHTVsoUlRlc0R0JSZffktEJXJFU3VxdVBbJWtWWVRHMiRCblJbZDUsXkhHdWRPTFJoZHZIQSYjdkc+ZUtbPkNgOkMudDhJKUdUNX15JnBYMU1mOkQr''@;'; put 'put ''ZktWMlhHemtZT0djVysmYD0yTVAzWjAlZjtYfGlBOGp3ejZybCRwX0YvOk1WW3BOWkw8LzZOb0d1MT9mYHlMVGN6Z1ZBJVlXPkZfVUNiW3wxbC4pP3VEO3phNyo2Y2cyaG0lYzswbjt6bTFoJmtbem5YRloqYXFdMiY8P30yOyV8byJhPXl1c25CIytGSUI5KmUvcjVpRlkmLmYsZjUlQ1Z2KlMw''@;'; put 'put ''QVlJTS9WfWRQSDFUKUpHLF5XSzcieXt8c3pdWTY9N084S25JSU93c1MpfkRJN31NQG4qKy9CU1JobStvcUw/TTlWV3EwPUQ1Tm1TajRJSkdfQDZGITBgNUUpNTh+TS4pUW5jWGtpfjtKTjY/byF5OloiXSRrYEdJOSNebnBQWCwrYGtvTm5QVnJgbzB4VVVMbjwhIV8yN0NvXilHKmZ0YU5jUDJK''@;'; put 'put ''Z3FqVE06MUpgRFNVayNFRFRXVl1KX10iRzAsUm5KY1BzQG1PNi4wPz18Uj9aSnQvMH1vaVReS1dLXSZKUmdTQUAqOjZTbyZ1R05vL103MSs1Y1ZWfjI0T1NZTlJnbCpKdE83YXxFdWAzPmVoLkNhK0p1bnwyX31uTCRAb1dIMnl6WXs0QTduUmoyK0UhSE9gPU8wRCV1UHRZQXopdWl1P3d8N3o1''@;'; put 'put ''NU53bnAlXU1BInFqcGk1dChtQXA8ejY2Ykx8Ri93YG1TQSNeSSt7Qy83PkUkMGV2cTVEZllaNHxpRmVXaW0lIko+dnReQnh2NVR7OFAsR2VAWGopK1U7fUhhQCZPaT8vPllrKjorR2chOTVoeFtpIUxmR3ZnK0RHK2QsLFU6P3Fdak9IdFtZVX4ybX0sfmdnc0t2R1VrP1UySnU+c3coXmBTWHNl''@;'; put 'put ''K0Rue1czV1MwSiVkakdzQllESVF+O3w2JUdwX2IlT1lROzF4YF10S1NFbkYhY3FCZC82ODE4OVhpcCxmWShvRE9vNjk1VV5mUkY/QH1uKn1FSGdGaUc5QTBEKC4qN0RxSXFCaV47TG1dT3d0UStCTS5xS30qKHMiO2pebzZVL3o0Um4uWVo+eUVCPWtdIWBGcmtlSTJeWmU7bDpCXl99KnBhTzph''@;'; put 'put ''TltMQmovTyg7dmo9cUw9KkYwREFtKzwqdXApTSZ+JmRAK0MyeUVGSUdTTHJ7LCRwR2Fzc19JK1NQOUR9eDpoNU01YkNnLnIpTWdOKEA8VS5yfEt3UE1aK0NqZlkuSGZrOF1OVkw5Sn09azA9cUV1Oi5oQkUwamZCcEBJZE4kSDp1IiZYPG07RHIoLlJKOFJqPCw+MU87YlcycVJAXzB4Kk9Uc1JJ''@;'; put 'put ''ZCgkNkpzcHpCMjJ4fCRNa0VwcVlORlJtTnIsY1A3ekdnQE5BPEx0YkAiOmRNdXl+LEImTCJwV05pSCg6PH56Lm1SKHpkeG9FI3wkTUdyJm8mTElFYHYuZWh6YEdNJnRuZk9Ed0lRe2E/en1FUyM3a2hbUn03Y1g5TSZkO3ZMMXAsWylFSVQhZDhGVktSKkJfaH5NT3MhZV9zditNcEklNjMoLEhE''@;'; put 'put ''IXN2ZUN2bVcvd1BpaWk0JTpLTnZ6IkdpbFJoSmlld1hjYjlEQFtHX3A/Lno2bUdSa0xaWSpreyhTRGgmb3EpdSJ6WXtsQ0N2JlNMUCFJeFI5XjpkV01VcGE9ekFEQnRUaiNuX2o4PUc1eFBMSXJ8Pkh4SDNbY2B5SjxlSjBXcitdRjVrNmU+dCRtbk0ufEwocjZKczZENWFyazxZdyRjamdgTCQx''@;'; put 'put ''dH1IMlBvMEUqOXllPGRyX0dYUSoqZUBJVVE/VH44dFk0SGReckF0UDN6bXtCa3FacWUiT11oQmlZMHM8MVVAPVNVOjklYVlSOUBfUHNQXVsqaTouUXshbkI5aDR6MFp8XWlITXZTZFFmQy58eC99Wlc2MHJ+QXZIOWVsN2VNVW8qPS44XnUsRCYlKXBWPjJFQClZZnJtQUREK1I8RHU1LDRfalA/''@;'; put 'put ''eFptQCpLRG17OUN5bDhyPysxfl53UCs6NkQ3T2U8Ukd4NTd8NWljOEtDJFUpeDJjdEYmfU8uJU9BY09OJmcuaCJTaXlmQ2FlZVZeVVlSIyVCM05Kb2lGN1k7bFU8WyMjVD42ZGtDW2YxQjleS2U1VzNfL3t6RkhNclNQa1tpQzRWeT03UGtCUUUsPz1Ge2x2ekNvX1lIYDdYblJoOWNCQCxXfj9U''@;'; put 'put ''LFo2enA9bDouQVtXTF58MStuVEZkN1g+S2M/TSYxZClxLkk7Zy5MOXpBPGx0UEY9UjVEWWx1PF5rdUVzeDRFWklnb1EsNDBVOVV6LmFFTlRnbjorVTleb3MwSGAqLCNQWC9FdWZydmdKbDtuTFpHZSRBJSRXR2ckWk9UI10yPm8vVWsrMT5HZXYvdVEmcCVqLmxlYUh8KDpsMHJ0UyxEd2ArbDZA''@;'; put 'put ''biQiOn1ofTpsYEdCTSNAZnBtcHxqfn43N0dLT2tMcnA2KlN0NTc9JDR1aF12KkAoITlzRSIwdVl9W2pIUmJVZmtdYnQoQSV6aHUqKGdaX3F4V28zYEBiaDt9Qlh0QWRbaHpAV0EuKSFMTXF2I2hDXUd3Ok83ZTg/Xmx6UDpfX2BpWUNbOEkkazZKIVBpT0dTJTVtX04zb1dvSkprX3dJckhIPzVe''@;'; put 'put ''PSVUdEVNIilDN159bHFUZFVVZi51b0g+M0lWJEBpWGQmYnVfWXRLcj8+ZVdqOVk5Izcuc1RwdHE/ZlFZX306XUpdRk1haHdLbDRvZn1ZT2lDP2x0PSJmdWUhNFdjWlFdZjwxfmJDRWVsM3l7SypRYyJjUjdMYUUvd3RHViFbWDJ2UENkcztIbkVWUkNCbl9LeXdhVWp6XSUjej9zSiNJKiN8cThP''@;'; put 'put ''Oj84bltAel97NTx2WzY/X0MwI1NXWTZsaSNYWlRMYjYscyN+eyI6OjdrUj5ibUM/V3pOcmt8Zkp0Xi8sWClqWG9Na3l9S055ZVR7cihmN042WHE+ajRdImE+PiFLaSlwO2tdYko+XndeZGFzbD5KWmA1T0ldYTNJZUBQNX4xJERDI31gIiFIbVY2ZkMwTTBgYGhpQjBbSGFEKHN3PFErel9hamAj''@;'; put 'put ''VjJjMDtHXy4xTlFFNmxFezw3dyZRUjkvQEZXI0h7ezJGQlskWFpYLjN4dzVPUis1am16Z3FNYmZVWnciJkdZXUN0PHFHRXQvaTZVWyhuIzpYMVtTSSszcD1AaUNscGxnODBqX3hTRGBXPG9sRz5ka3gmbGJ0OUtAOG92ZTZzWk8+OTBkU2w7JG42UX51Qmx8UzEhRT95KD5MY0JGUkd6IUhGcWIu''@;'; put 'put ''Mks2Xy8jYWUyfTdOSnxOaVYwc3kmbTpHUlYicz9vJVVpXiIsM1FCM2BAUEM9Y31aPEJIfHdBPUN3LEQzX1JBOGZJRGdALzgyMXxGankxezJlXj9jSWssZzJaKyhBUUJ9SFg5RGMlYzhNVEE8KmFZOkZ2LloqfjtGIkFPb0t8NTN1MXVRU0Eiaiw+TlFZdlQvK1lSTENQR2t0YGtrbmYqVF05ezxz''@;'; put 'put ''a2xqRmhFRW1hSmV7UGAhUkFjMSNFWVhlNComIngjI0ouKkd5KHpIbTsrLyZQJHNGRzZOSEQrY0FMeGdOaGRPX1owNSVRPTM8XSw6W1NONllAaWFjO316OjFISCpvViU5KlFaX1s3aUwwc3A9MTpuTCEjOk40WkpGU1JFPmM1bHNFSk8jO1t9PGFQLmJsYnN0RXEqfE1XWzFdb0h4WztaXWZMdkR0''@;'; put 'put ''Om5dWWF8eWckMiRQOnVTVXw5S1lJJElMUDRZWnkhT2sqbUVhZzRGRXNDJlhAOkdbRHF0SzR2NTJWQUtBMDwuM255WGhnRV8reWJMUjM/I09iPXF5eyppWGpQQz5dZ1BfOExXT1IqbXZ5d2QySGxleGI5PGlXeyFEZDJZMG9RNjAhVGJDZWwzLkxlKV9qWlVuOUJVMighJlFUIjZMajpRaG9OXjpx''@;'; put 'put ''WHY5THhpI1dfYTtzYVcuVCpKRjxbKnp5bE1fZlM3MmY9SlJhK01+VD1Wc2orUkJdU2A3V1JZfVIyVSReWiY8XTxEcVs1cUByOTUjXyx7WFFWVk55fDwqJFUqb0xuZGJ9dTQyJGNFYy4hYUxNWSw4anM6aWNkSipTJXJFeF9OekpbYmQofD9jRVA+VXNxYUleUWdsKi9XQk1LUzYsRWgsRiNFNHdQ''@;'; put 'put ''NjM9TFZ8ST42WSopYCgremdWZEVNUmdpVTwqSDNdbCRlNG11JVIwW3I6cTQ4V1Z3VFQocHw8U3pEJHFgSixNYmlTIVEwSUJiNVpYPjVzU29tfUBpY0h+KWlVJGMzNj99Tm97WHtmeEo/fl14UzswQzs7elk7b3kiX3VKJU08XU1fe0ZNMihYaDRpZyVGclJRPmI/SkF4MXlbWiZtN0VMMTAkTkFk''@;'; put 'put ''aSooe2lhQV5iZCUrKjopaz02Wm5mXSg8RWkvPTspIyJSRDZYKH55SnFDNWIwdCFQJFpiKXo8YjZuYTwwOClQQVAqRCo7ZCNBWDw1JjhGamBpO3VAJVRnSF81RHlOKkkiOWRtRysyOStJQFNTSWZpRm9jUHJOQEkmX0pCZGR0Xz9ndVVwVmNNSXBLRkp7dCZwQy9VMyNNcWJ5M2hLNXB6Pj5KIiJI''@;'; put 'put ''PChQT1pZcnVWTHM4WFliTF9rNzYqNGp8Yj43bDg2bnlVOjF+YWcpR1QjfSRDWn0qY0ZaY0dLN3RWdEtJaWR5eTwqZ091X18jcV0pKmh0NkwwaS44OXoyRjs9LiVLc0pGIUZJL1F2R1g/OkBGN3t7ZkMjdDBwdCJ5bmI5NClFTUgmLj1mIV9KaEFFI1NEcS5QL1gkOW5EJiVAWyxYTilaZiZOO1JC''@;'; put 'put ''YjRuWk9PTFI2PnR6K046IjQ7ZyloTHMhclsuU0VVI2RgbH43JUpjaURCTkp9cz1DKi5Gb0pdaj9aQmROXWdNenB+Nz0rTWIlPn4/PTE5UElXTH5mYzJvUEtNTXo9QTovQnZLUTpVb1h9Ky9sTGM4VVYqfGR9TVpJcT81dXtKNF9IR003aHxweTQiQEBKbEJxWjM8dXZHVnVna0ArVHFYTGFFMHgm''@;'; put 'put ''RUpVMl03Sl03JldCR29iISI2Zy5YLmV5XUtadVZUVEBOZCZeKG8lZnVdQDwjcz4+eGdjMSY5PyJDLFFLZ1krUFAzI21fU0d6LDYqR0Apc3hzNl1PeiNBXWFtWyg0OWZ8QFhVUjUhJFlzS3woJDlWI1o5XUVlL35DVi8oTjltPm8lU3J2dVFSKnBPdD13KDVsNHV1dCUoN15xQ0BKTU1sVUIkbDY8''@;'; put 'put ''STUveVc3Wl5sXVVqOX5DWlsuQVhYX3cxZX10bSxWd0o3O1hyPEJxSXx7eiU4JHlwSWJtdUpoZzZhNDAyWnR7QjZlJiZHVThKak43K2BDdzkyR3NkTH07QlJhQyhwYz1Sclg5dH54PTMrL0p7Y11jQDFGRWpddCsqV3EhXXF0Q2Zjayl3WSg1ZF5VM2gqdWY2biVtWyZPQ2whRmFnRzB2JT5+QTM+''@;'; put 'put ''QWhyT1MoPzJMb2ooZTg8RVtMTTdnO3lrdE82Pzt8JUBAa1A5TWY7X3ZXKkJBKWZwcmY1Yzd9VDJuezVRLz9Gdk4mRD1MJG1nLysyOytIYEFSbkR+TSphZjB9aCFOcmtHUDEwQGlbWHZdSz88YnV7PmIjIjk0JDU+S2NBbV8+bC92XSI7LlVpYiVtXUElJWF3UHNFfjUxKjxidWw+PCNqRENdS3g5''@;'; put 'put ''Y3djWXxvaU0pQjB7YEZtPjNNcjVURTwrImh3VE5aT3BjLn5URHIrZUc4dEp0bCV7WTtxZG9bclpbSXU5e1NHYj9WL059VlJaTDlNfHBUfXhicm9CaSovKTxXV2YvOCYqKXo0OWBuMHVDZmRecVI/c0Z9ckx1QUo8a2RVUnkkKFE2blV8ej1hNzRTL2hnJDdzbCZyTiYuNT17PSFZbm04a2w1Rmx2''@;'; put 'put ''ZWBRTkI/VmNMbjVfRnFMUnlPKEc3SWRPWDVRT3AqZTw6aytePXk6VWdMUy8pS2s5aT1Ddy9iUUwrYX1TIWdVJXpZLnJ3Z0ZtKF9qSStMS3FfazQsN2NMS3p9LExGQzY6eH15QTVdZDV7UDJObUhMYHBdJiw+PXo3JXNyeyVXfGU8OChCQih0MmlVZFVDUEx5SkJAN3VTQX09M3RXbT8hfldAaXlS''@;'; put 'put ''fUNoV3Rpeio7OU9wYWxhZXthXUVXQC58bHNDZT5wfXRuSGxCYFJXQio0O3s0RzU/UF08T2NqKXxvOVVzaWw0SjRbandKS290a355RDhVY21sMEpQNXdwMjk+bFg4blJdKVt+UUI6ekBKTmJCayV6Q2AuKWRvcXAmdHlee1dvdnBvK1BLWnREXzEvVUkpPSQvWyE6THF9PTx6Y1ZLc3kpJDllNChG''@;'; put 'put ''L0JoVT9LfX42K2tJZCQsSFBjYnRiO0NtJTBrbDNicyF3eHZVbnQ3ZTRvcU01SilDbiM1WU87N1dlcFJ0W1FrLkp+VDxTWzt2OltLNi5FSkFaenRhMnw0MkVFVU0qcFUyay5NfC4/KCVBeD47SHU9UCFmN3MiSDs8PSlxcDIjVVFoTVVoSTQpbGZRVlojYlAuOF1TM2JvK3UxNDdqK0xJWSYwPH0o''@;'; put 'put ''LjlRNF1KKEBzMGxFQitZYnNpakVEU29QJGd9XnFuQlJ6NmxjPHx6eyJ8Q3NOPypUMiZpYEVodWRSbjYhMl5xOVkuQVVYb2oiZipaSHVPVDkrWkJTdk8+TEpXNjs4ODtCalBTJGdSKyNrcEN2cE0sP3lBJmJ0JWJCZlUmImFdeH5VXndqNGkjYyIxJS4vLjU5MmdsWGJdYD09NmAqZ3VrfTRjbG53''@;'; put 'put ''ZTF9anlFZD9DVFU3TGEzUS8hL3Q3dXtDJn4qTW1vQGcjdGEoZzxPT0BQPF4+NktoaXIvZSpFRXQ+IUNdUyJ8MjFYLz0sWHc+dSRbTjkwWmY3NWZ5UDspKy4ka0tEeTc7byRkXixpNU1WPWkoZWY7M2A4b25EdnMreXRAVU9LXzt9RX52eDFqYmJSJGV6WEVpfCZDLHMhbX5sdFtMYlJQeF85Vngv''@;'; put 'put ''eG5DRyk7Oytuc2JnIXFseGtbI1lReV9AZHFUdnl5clE2OkMxdmtCeF85XWAhS2o7YixWRFtDbzVmNjFeOm5Ib29kTHw0SjwuWU8pQixgVVdaTXUkUksyV292ejJdSH5SNy8vTEdIZzdGLkxweEt7STZ5NTQwTXsjYyZ9OmEjbEdXY291OzgraWYyWzlufl5nR0ZUNGkmJWcsMjg6WS9HfjhNXTAu''@;'; put 'put ''b096bkJaK0xifFN6VmB5djtkK0RVY0d+MlUyWCIkNHQmOGpGXSYveSN9e1JsPXV9NDJnMiRoRHo0TFp8Y3pEYzFAX25fMzkhKUV0ekF+ZjhUO1Q2YUNMSD8qbExUWEZ5NissbXhHWSY1ZjEmRmBYdk1gWXFueyVaKHp1L082T2dlLndmWkJ4XXR1KiQqcXwpV0NeV1A8TFNlPDY3WmQ/byI3M1lF''@;'; put 'put ''N2JHZTpVVUUhJkREYWl7PUY/cUF3KFoqPFJPKyU7U3ZeJG9jfHUuUFNzNXBNdmZJbmFjN1tdYl90V2ZndXtqSUtaW3Qmd1l8cS9mQXZ0eSZ4SkMsJHlBPHZsNTxgNmUuSDlLNDJyKS8/fjNuZ0wjRXlrcV1YSmZCcUZYLllVMXJGdEdyPVNgfXk+Z1hma31POWx4eytyT0dWfnRTcUt3WmlKZzBG''@;'; put 'put ''WF5ZXj0jRCFrQS9OIWRiLjh8aFFAUC9AOTxsXX1dZy9mXkI8Z1ZXLkRVVkdNZC9EQElDVyo0TXNNY05NajlYSGZZVVFoJSErZEsqdUk2KCFXPlEycD1dNHVqaGZOJVg/OXVUY1AlJVdGYTNEPXxaOSQ5L2I+bHpfMyFHPXlxOU4qIU9rMUgidmkpPGoodz9mXis4PjpEIWFGNTsyKEhsUGc/VCxC''@;'; put 'put ''RE47Pz1CJixFY0RWTT5RRU46TkZvNWQ8OExUcElBdzNCJF4jfFJ5LllSNHI7fnp7V1FjUSFYTCYwYCRMRkA5fjNPMTxYRjxCVmh2L0EpIiYoPyEib2lBcFcvfCxZXnVXPVlpdkgrU1B0QE0lVnA5X3RSMzJ2PztTZEoufiRHOTNrWCp7THFIJDMmOV9wPTNoI2BqMC5dZ3NLZjhOYT1xWD5Ec2dj''@;'; put 'put ''YW96dUNfaz1WMWZmQG9pSnQsYi5wcH19OksmTC85My9laSt+MD9xZSRNbiRjOWAuKjhgUUFyKFZsZCslNmIrZlJyWXNRVG8hbCVGQXldVipPPUdyRkJDYXJiYitqT09SV3FjNENSRV4kdkpCU1hzSV5gSD4wdyt+LEtLb30sYENyWG90WDtBdHZFcyI6ckw6OSVjTiZkbW86MEBdJGkqM0g2ZmMh''@;'; put 'put ''WF90S3lsdSh+aCtkd048bitDUnd6MGt9bSxsIWpRRSlrVnokQilGe2E7RWUjcm85djpfOENtWyFEeixkMk9DTDhGb35+KEF8SmAmO090PWs6cj80LHhPYkk5YTckITRhWndzVnZdcSE9bCVAS2wkbnZtPlgrRVptOnE0KWFxLDsqW3l1VlEqWlZjS3xaVzgzezs0YWUrJjQvQGdIK1lEYihwMWV+''@;'; put 'put ''OFBgWkElPXxFKihAZWlRRT18JGpZTVkySyk4bjhhVj81eFBIL0xsUFdXbTJ6UHdaUGkucUJnLkh7Y1pUTTNHNkopW05MWlEqJH5bQHsrO35iW3pLO0ZRJWZxaiREfnY2Qjo1bTl6bT19PFZMQzI2fFlUKWFkJHdHc3V7dyppdUA5QnRVT3wkcDxxMSVLL0diOj5WSmw2SjdjOjRpcSg4IUNhRlVd''@;'; put 'put ''SFNsR19jeXRddT8+L28/MWBZRDt3XltIaUZ1SWlGfkRqUGY4eGFUZ0c2V2xiU1BZNWZ2c1ZId3omW3VdPXlze3xnc1BQPkc4JThmbHc4eDg4bjp5QXJKTFhabHs7TmxfTnh+L1kmQ1R4I05PKHpES2ooRFpVZjpCR1VzNWluT19ZU2s4Iy49X35HYnhUTCshV3k4KzBmbEE7UWg5YDpZbUZeSU5i''@;'; put 'put ''X0dBN31+SW9yYU9TdWxHVj1gSE4qY14qPk1DOVVuWSFPe3peeUZtQWZSNlMqd2tQdHBSfkZQYzhlMVdUXWl1akw4fmFWMmdkfF8pfmY2OWFFdzN9YnB+ZmtgJmxuZVRRLj4lL0pybDNOM1c7NF9NKXt4aVB4Zm9SazdEcWI/Q2ViU2hjYHllI0lVMXd0P1ZxJihQcV9wUmp3XipQP2l9UlJ2NmYs''@;'; put 'put ''LFVOczZiJiI9UlB8Tk5nU1JuSFk/T3VdaGVSeGFAeGdmRk9Ce3JlKC5eRC9hYCJZTElbXns7JDwhKSRaK3FncVpQVEBiIlVpKSpyV0g9OWkmYDJhLj0yOz0yU1AhSm9PWVRBbWhhRGtIK2haY1tYWlVMXS5Ba3ltVmJ5NV1OLDxUTGBDUzYpWW8iYExkbyUmKy93e1MxVl9HdXh2X0pydkE1N3pT''@;'; put 'put ''djZAU2dPfmUqYThyby9yYSFiaj9JUGd4YypGbTNGbCtGVHwpeXBdOCI0bCVDKWBpM3EzYnJGMXI9IjM8LG19SVpnfVE9Wip4MypMOz93TWAxVW0+YmB+NS95fHpMW2hPS2swPVgzcENgK25rRDtOQ0BuI0VXTT8uSHslIWUxdS5Gb08mOmkqV2tnZDViM3F7YGkvIUJaKz9ROjJZd3VJPXJVKHFh''@;'; put 'put ''JXE8Q0AsNi9iSTg2cisqLFc7KC5GISlOWiExeVhyMnhpd1t5QyM0cDpwSGczfXhKIWN5JSgkT2dUSERedkIoUl9ge2VTZSk9cFdvIUg5WFpLRS5oMEZNVERVRy9HMmM2YFRwOT8zWVlxYk5iIylbU0dyQkxuXylmLGUyMypxIk8mW144VEdEbmJoMH4wRSZOb3F+W01ZbDdMVEtsJiNDWk9hfDVr''@;'; put 'put ''em55fmcvTE1LTGQ3KW9FSmJzTytvYlVlPFE2PXhFYkFQLmMwL1YqY3RGOlRvZi5vQzEuaiheLGJ7c11Ld0s5SiJ1UztKT2kmMjx+KzQ9cT9NSHlrfH5CXS97aixSalEiSHhEcSsxMnhOUylCIjljMkxkU0xeJi8oLjEuOFhYKnw6eCI3YSFqbUJIV2giMChUTkd6ejNzMjljLyI/ckB+K2RbQWEv''@;'; put 'put ''fj9PaiZHMzRBfDM7KVJeSXxlWEtbWSVNZ0JWe0dUS1Uvdyl+U1FZRE9iLjhlPWNJLChGczNgblZpIng/IUA0YTY3fTVXWFpPWWs8WmE7OiNeT3xFYVZxMyFJWFp1Mz56O2Qkdn5gcG58KHF2X0ouWnVWUGB9JlJgJCkqM0dGQ291YF08Ujc5Uk4zLzArOW98fFFHP3pXQ0U0Xyk5eVkxS2JwSiR3''@;'; put 'put ''ZCl8LHJRU3VJJnk2O0phKHN5UCxiWmU1eVRMalIzb1AjOFM1ckZmfWxfKnYsJDEud0RYSzUvJHhsPlBrcHA3XmE7JUdmPCpkX3Y3bDkvaiNiI2sqfjBkdkFwMWw+VjQra3Q/d2dbcHVaSUc+TT8xe1ZZVUdGb0F+YzN5JUI7NT9MLmU3RyteP2pafWNTKVkubSl8Wj1DOjQpWXVGV1RFS3c6bT58''@;'; put 'put ''JDBnKUJfPVBofn1sR2ZyJGtIPyNRNFhjP1NDPEo4ZnpDWXE1Tlk2YEVgTjRueDFiZ0ZObFMiczE4azpkfVRmOmNQc0s7Sm8+THF5d0R9UUkvQUJbbjMzJTxveHhaJVlUU0o/ZWp+SyhddnB3Tyk4b0ZaKEdPOCpLJGV4eS8sd01zcl48OHQoUDBVIT0lSCY5U3RgJEt8b0wieTFkJiY5bVBFZj9r''@;'; put 'put ''am06SkBsSVIvSCJTWzJVXX1gWEhfbVkzdCV1NktZRUk5QEdDTUQ2PlpjcXZbcnIoPHBELy5BdFYyfigxUGk0KHIuczR7MD1ZKiRfZXNTLDs6RC9WWnE2Wk1HXmJmTFpITC80MW0iQSkqZDNpTyg4NGBhUmw3WFQxNVhCa0J5OUMibCN5cE1kJCw5U0dAN04kd1MmZihqKCN+X25PSEoyWFBRPkA2''@;'; put 'put ''bFs4XWZrd0d6OTQzTl8zOmteQzZmZXw6S0B3UF84LkFpNmcqa3YjWitiOyFtb2s8fm9ZJUV4RThBciNRUX1YelNuMSxjd2NLTSxuKSo2TWNUaTxhKXluPCh6al17OjF4IVB0eGswan1udnZqJW5VX0toTjl+cDcqaTloXUhJdEgxJCx5bjZwRFBhU01RfCRQJFhRQkUkQ3kqPUN+ZX1bYzkrUGA1''@;'; put 'put ''PjZoYi9kfUJhPFhueH4hcWdMPSk+KHV3TH1zLDgkNzlfPlJXKik2c3FAcEN7QklpTVs8XX1VfFkpYmhgLmJXSy4qLylTZz96UnwyKFMpPTxzWWVndmh5P3szPClzfjFvczVkQkohN0B4KjJhfFlWYjt8RWNTIV9+Mz1zUiN0QjxhJVtSbWBXenBHKnIiR04raHxReC9VdkdvWC4veyE2JDNKZkhX''@;'; put 'put ''TXdfK2Y8OGVYOm9ZKmxSJFN1UW5ZcS4mfVUlcHhEPTRCPHQmRy9qWShBYCQoOV9hMmxSVXVWamlmVmx9WFBISUpHdm1VXSR+MCwkS3ZmWC5rImhlIVpsalFdJHc2SmFfQnh2az5HJUJZZnxxJm94IiVQUVp2NlheLjpTVkxmKm9WOEZKPGpKOzsxd3tSb01mcD5GfWgkTWZ9PypgP0JTQEo5U3FF''@;'; put 'put ''Y0B3Xz5dci4+emMoYDIueC92IzRGK0d6eDw4P35le05dS2dbbTtGX1BSOmhpY1Q7ZCtXW0RKXXYjVEJaSjx7WTs/UTd0bDA+PEkiRDwwL3h9IiRYSCMhSUhrN08xZ2o/WSMqNlswN2RYZysocCg9JGEmfWR7TW5AM102WV5BXVk8ekRPNClkaWlSTi5uQDJpaGFDfX0rSjYuKGRgKjBhO3l3UFhe''@;'; put 'put ''Mzd4XlgkOCJFISRET1J6WlRzeixibVdyJmxjUW5ZK3lBLyJPTV8kdStuZmgiO2RnOHxGP0JRWlJ1Yng6Wk9DISlvXm8we0pDeTM7I05xRGwhXnwqTXMxVG4oKVVscl5peV5Pcm9ibUVmflp3OixDP1JFbU4xcGp0Y0g4MFl6dV4kUWN6Si5geX11O2J7K249Z2I2KEBvZE1WJEMycSV1dys0LFpa''@;'; put 'put ''VjorQEhoZkhURF9TYFVQLnZmXSRQY0lydEsoQFYyLmQ0KlgsX1RHZCxySURDVUI4bH1oV3pNX3BhXSJRMGV7dGdTPTcmNHc8bkJJVzo3djBGclt0UCRnfilWbnE0Py8zS215fl07dlVfQ2U7Y3JNe0RrLjkjTVNOXTdDSj4kVkU/dkdaOj1US1BlcVl6MiFoZztZZUkkPj99dW8xb1c+O29wKiEj''@;'; put 'put ''TChfUDwzVWYmJF8lZ2FZekdCKzk6UkkiTmo/fFI5VVsyTSRIckBDMHcsYWpIaVIvZn4uPT1OSG5rekV7PUV1WDZMVi8rSCM1KUdaZHdxI11NWCh1UmJDUG97aThVOGRaP2UqNCxqdVVBVX5MZ094RlhbOmQkPylOUiRxaUUmLywmPkhEeGBtcXdTP2prK3ZPME1EQWsvPHx4TGZ9b05PZmB8VDBi''@;'; put 'put ''aFpAczJuLGx3bjBnUSp6fk58MkVGZy42WXIzY09Vb1BJQkM6Jip+bGozLGhCbDN+IjRHVmA1I0BQIiYrVFpKdWk1UT9rfDtINSVhQSIvSVtAMjVXMyVXUCxMWF8zTW87NDk1TT81dk5RTCVsMiM0JEBkOnhqWDgscUhEfmQoYT55Z0R1VlFua1A/NTEiP0hjaXYjZ1o/VHtFU31Ke1UhV0h2X0gx''@;'; put 'put ''VjRWTz5IcktCdnBoZGM2QCQzKCxDeVQrXi5CRU45SHUlTG50bFFTV0VCZWpzZElhc21ickNAeSkqMCNQPFZCKzhabzF6M3hJbC5fZkIlfFA6SFtsKm1yYilodCEuPTcmXjhXYnVXfU5GeHA/Pzd0Iz1eZyowOCw3KjVTP2piJjNFVXwlbTcsRE8/PmpwckEuWmh0d3oxLGdQJXxhZlhGal9fYDQz''@;'; put 'put ''czspSiljYFgjM0hqPGptMiJJMTlVd2J2RTgxMD8qVHdEKXVydVZsQlRXXXcxS2hhVlNBVHlOUWs9OlRRMiNNQ2A9blIufm5bRHc/fj9yTyw+ME5vIWp+OCs1RCsxL2psQSk6UGlTIns2b3gqX3RdREBaMVtZPEQ2WmduXiFjXV03NmBTTjN7MmJWJGRdbUFidHwiJEB8ez5ZdTpyeDNTOlNXcVJI''@;'; put 'put ''a3VOTk1tN1tNeVROU2FUeiM9XyFZTmhpNlhzWEllVDB0L3BfNW1IXT4oMFpHT2N6WHQpPjR0QiZzOCo1Qnl4Iy9wfFYwPF0mVD9fUWxwSCQzYjpILzUvYFZlMil4NXFNWmMsITh+Um1fZXc4SzJhPTBMLztRWkteKnEwWzhDbT9AZnRGT34qaXdlKDx3Zkw1LCMubG9adTA+dS5oTzB6Lz5WVEcr''@;'; put 'put ''ST82eF9ZfTZiUF0jJWsubnkmTGxMYnRnOnkhYTRIbmVILGgjaTRqaGc8aToxS3Z2aVNCUTtTNT1dX15UczNTQnUielBWd2lRV05WT09Qbk9lKjZ6SXI3ImsqJiE8d1JfUDd1MllzTHBWPDBZdT5UIWlqTl0oSUE0eVZsImhdPXxYck4jeTFZYiM9TEM/dDNRNyR+K2xKZWBuW3NHIStkYmFlN31j''@;'; put 'put ''RGYrZnlfbkh7RkN4YW91bDBQS2VOPjhAcncyJlE1Y2hbVVYyeUtYUF4+PlVQQXNRVGtYVXdqNGN6M0xhMTAyS2NRa0x5aXlFdm1PMUR4cF90TDdoIX1lbytBZGB0ZmpNe0JjSXJENExuOCM5ZFUwRzlXR2tjaUU4MHdiQz5oYCRqaExbQnNOfU5AWFpYeUJ+LEoiUlghSj40TX1nQkIhLHZ4UCpj''@;'; put 'put ''Y3VubVR6flgrMEBbUSxCRXBkTG57eE1UZCkqYypQNTo0PDRoRzxDbHFKJDIkSCtMSXhYUVRNbS9afVdURCtQfXcmUyE4PDRuPjlBezduRz54TF1xcWxtXWh3NyNTQ3d7ZTdDMEZScyZKfE4wfXVUTldILiZ0LCF6UUdCYCpDMD5LVj8+KSVqQzhsVT4sKSRdMUcuPzpfY1BJXn4hR11bRDFmeVI3''@;'; put 'put ''cW5PIzEmTDQoYGN4Z3FKcUN3LGBGZG52XmZ1fDI6Z2wvOUQyUHpFPUdrdGRsNHIobi93fFB1SSF5K2tqXUk9M2ssc3VpL1cjSEJAeksqJEZCa14ofFY8cWlYSmckQC9oQiozSDJKYDJJVCx5RFsoRmkqS0JWZTooUVdRKzEwa0xOO0p2cnlOflU/aHs7PElwRSlraTYvQ3VCRTtAKnV4ezc2KFhv''@;'; put 'put ''fjRrSDh6ZWlFUXByXyY/Ry9RTH0jakVNI1g2NzxJYERSY2NxYUZUTXQ0UHNSMVdtbUBAdmpsIndqbSxHUVRwdio1RllkL01kImBdRCFjZk1PWiZNNCQ+VEt+UyEkbXN7Nj8hQGNNP3BsJClEZ3ApPEtAV3JIaT0vdT1KJlBCNiosNEZ4OHJHQCpbUT1NezlISnp5RjFKXzRVTHZXb1dPT2VJRXUj''@;'; put 'put ''Z0Y9aFI0MllwK3VuRUB2RG1QIXpWWEdScnkkbURlPzssNFhgVVV8ZDhWfD1Mb2c1Q1hiTjpuTUVecFAhcXhEdypWelRkcmxyTG5ueWQlJnJTc31ubikxbTNHTiY2aExyKG47bkY0Ii9deEhqM2RFQDZXYk04ZSxbR3lQSTNnQW5ia3IvUjs6WUZRREpKRGo3Wy9paUtLfVslKkFgP0RJaDV7UWRt''@;'; put 'put ''STAzZmhPMSQxdnxbX0MmdiJzMElCPFgzfE9PIT5RMWFGQ2BzSXNoOFlnX2oiaGA2ZStFNSwiKSJtZn1YUypIQUI/ZVErYXYiR0ZPMTorMEgwOmZqNFZ6RXxxNilnTy5EOTt4Z3pbNHkydTRxa1hEXUoicCteWEkraFZ5PFpFRl9xUmkvInIqQz9NdW1ESC5GQkZTR2BhbiM/VUF9dyphVlh1e1I8''@;'; put 'put ''XTZUWjN1K1t3MiRtd1V4QUlpYW5nPklDZkRIU0lZJUBhWSg3JHNfPjRwQmNKeEIsaWVvYDQrL31lRiQ4OiRTWTJtYFBKd3tBP1h+U0gzIztpX0pKc2N1aSZubjFDKSRKZkAvaD9eWXF0XVI/NTIhczQ2fCZea280Vy92KyE6VlU/YyU1TWd4KHdyPktILkhyPS9oJD0kUWhWZT08Nn1ybCFlY2d3''@;'; put 'put ''fWpeUTtUWC9iUnRaQzpESiZkIntvWzx0UGomTFJYWjdsbjZZWys/KXl4VjZUXlo8SSNTbWsxYzBTQjg4YnIyPUxDKXolPVEiTWNsYzFsZkZHd04vSnghJDt9Ilc5JUFibX4ubUE2WExSTCVnUjI9Uls5YHhXIWwrUFlDWTdlOV5gZmtjbWUjP194MFFwQUhqaTY0IVFzcU5EdiI5Kj5WNm1XcGpE''@;'; put 'put ''byxKcVNwUFNoZXA5KEY4JmUxWHBmPD0+MH5GbyFBaE46bVEheV5JJExASE5HUGo5JHc6Lj5OZU85Mjo3Ty5wZiM7OF49WS8vbmIwa0c9am5sPmUrZiw8LnRNMGokYyh7eFo4fW0iQn5+NltoZmIyZWxjVk5QcHVdflpDbG5yZ0JwYTNGdG5pbT5JUUZmZW1FQ3M0fHhnTy42fVZQc1M1XldAN35u''@;'; put 'put ''YUc+XWdTTTAyWz1PfENVMlR0KSN2TF9scl5xQ0V+QjphYCZ7PURAN2BxX3t2Sy9GSlJabSZhbzchbXYzaHh0ZShmQmB9UV8hWERGWTZ9PTpBZTBCZEwhQ10pZislZjxAOyN+RVljaElBR15RVktDNmxraHpsT3BCTDxqWlc5ZHs0QVtWX1VoNCFMJkNpN2xmeVIpd0d5anx8dFdJMFJWMztuczRL''@;'; put 'put ''KUBYcT5ocUJ7TCsva1VDIXJ7YXtJIlpAZ15XakNVNjoyXiRyZzNNZWExWGI0Qm1WMCUxU31fa1ZvMSo1NFZkRCU4JlZiIU5bRiNPWXo2XUtmc308cVVhJWlrXjZ1aV5sRV80cU4qcGJOeXFAMWR7bkZTTCJsU3RufmBJbyN5cFRLSWlNRXIsOi9XPDtFbDhVeTsyaVVgT3lQMGs7cE0mTFtgMXVq''@;'; put 'put ''Y1BvTmZMI2FwUDE4NHE9bzp6a1VJKWBKLmZbbTFXViREfFR7dTV6TFgqVl1EeC5ULGVhOiRQJVg4VlRORVNBJSo7NjNGaXslPlB9YGA3dX0ueGcuOW50dFZFcEwoYzVWYV9DaCleb1pvfF4mZXQhS0o6W1gpanU4O1RpY2BhNGNgeFc1b0duXkpLeXApLzs8Skd3Kip+QlkyXy56YG9QQih4biVI''@;'; put 'put ''dCI6eFE0QCFXKHx+TlksZ0pqdj0/KzN7YVR8RCwjay54d3wsfjAmUzBrU0hDLHNzXXFFIzd1L34mbX5sfFIwPDp4PFozZXtrcVdqamJaR3pYX2o+dlZgbFBQU016aywyK3kyT0ZJd1o3bmR1W3k/fTFxei4ldXJ6YGojdlVBU2QsRktBY0lNUXdQSkdgUWwrL10wNSxlQlllJDkpajJKLlkmPkxP''@;'; put 'put ''YTQvPzUvOWRHcCw/TiYuSVRJNUhteXJMXWE9bXB2W3VNWXYpXWN6JCo1ZiNXazRxays8SD1UYHwyKzVNYGVENHRNNCZyZUw2ekZoJjMrRj1ZL0xPakhmJkdxQmlQNUVWaWlnakoxKD5YNVs3XjBJbyY3QyVyPSxzZEV6NkgrIyxaelMuPTloMlsidDpDO0t6WUVbSl1LZzx5SUREQWA1eiN1X2s4''@;'; put 'put ''LyRRWjkjRSReRFJ+fUQ/NTkwLjYkNStRLDF3YUExKEA7PWtUaC9SRzVMey8oPm81MU5jRj0maGNbUH1sbmJMcDw4V2xSOW1iKEE3LFJCXS55JVAiY0VrMzZxY0g9YyhUMzE7U18meUJ1cmVldXpyP18xRDBPTj46SWdHd25JfWBFUj5IfjxkVEkjQyFOUzBheXtEVDZMXk4iNyIoaFduIy5jV0A5''@;'; put 'put ''UkFpT2trREplQlBRVTRnYGcoIl4ofUouczNybz9PantASSsmRmhbdVRqNklVdm5dWXUxTEdTTlovcnI/PVJ0K0okcU1PRT57KyhAUnF7X2U0QVNiMk9DOyZIInJYPXJUL2xGPGBjej5OY35gL0NecDJdPlBkQC81ZWlWVSQwNE07fC8seHkxSHF8QXhmXmdrNyxrS2BwMitmZ117Vlc1L2ldL3hW''@;'; put 'put ''RVkuWzBdQ2BuKko1MV55ZDcyaylpKkplKHYvR2U1dHBQbSZEKC5MVy9gKClSQXJrMlBSS1ZWZkBCdUYicFEkRFU9e0E4MSwuaFNKQDl8OTZUM3QyXXolInlXR3MxTF1TYEB6aG5UIVRha0p8Qj9HMjJ2SEUkZV50WCRRSHYmb1R5VTQwaD93MGAhbXo9VixUXXJfcG5SeXA0cCxpPXQ5NTlPVEI9''@;'; put 'put ''V3hkI0Exa3RxeEk1KV48fGg3VT9lSE9bNUtwRUxbXVBVKmp3PXp+PiZkJl4xTENZXU9eUHFkQGE6T3FiZjU8T3h4PDdKKlVYY1A1THRQZllwZF0oVUUjKEwrM1prcChjPy5BN2VqKGQkV2xtRituTS8kOmwiQUBWTjs9SSl8aFA+QyNQXVBTQC9GaVk9SGBXc3hzIXJqJltEcitNV3BMQGRjd1l1''@;'; put 'put ''JWdRZG0hXSR9WWQ/RW8qakhxJWhmYWIyPmQ/LiEveXlPSzBUR2A9bDojPmtuTz97UnlvfWUycTJXMjdSW1UwaVY1JFN1OzpBNz1YRV1fa25mVjZObjVMQjVwZVE0dDNXV2E9JHAySmp3cExSIWxxYFdvT15Yb3EzcztCUjlPKWA9WWxmKFYqNUx3a0pCRElteG5HODQuTjtCfFB0TGI/Q3t4Jn19''@;'; put 'put ''aC9vb08+X2BwYEo9Tz5bXz1ocCtwW0xzNTVdX21FaTQwJUAzV3lwUW0zXXwwbTNfNntFTGxkMCJDVWBMPWxTbVBUaTtFOyhsZihkR1lbM2o4WFVDTkhnJm9dL3UqVT19UWxONzp6TktYQ3JMWnUlayJ5cGAlTm09ZFtGNEE8KU48R34oXShYYXNwbUVPZT8mUltfLiRYSlszRFJuelR2MUI+aCFw''@;'; put 'put ''a3FtdzE5NmhHSHQsU2s2SXtMbEB0YXY6W1s3fkhFdnAoTlI6P29DPURxcVRaQ3xAQHM3OSlMajhqPEQhVHModi4sI29BJmQ8OFo/WXssOT04eyxXZnhGU3NIUUYmcm5FPUNzfWhje0ZGcUpxPnc9ZmtwZ3c3ajpXNl0zZDpvVFc8YWZXbG43ZWF+OTttQHNtKDwqNmM4ZSwkTCoveyQ1XVcrOjRi''@;'; put 'put ''WDt+VVkmRXV9fjt0YDB1IVZ4eEhsKS9qazBJJE0mVVsjKXE0TzdiMkhnRn5mKStOdyhTenFodWR1YDA1PEtdUm8zKXIlXTokSVhdQylJRkhsJmModVgjcDYiJWszY0EqakUrK0dFclh4LHZxRjh3dHVlPUcxN2JgcEZZLmtWbi8qQmtQcDB+L3g7Jj5BMDQ+UDtsUjwvU2dRS0IqI31UVSFISGQm''@;'; put 'put ''X0s8IUNoRyU6XiRrZVIoJnIvdjpieGhhN1NJN3RoKDV8RltJP24zSUo9RzIrcVg+bElhUElzYEp6SiRmdCJWRiNwcFZ7RCUlWmVGU0dLbVlKRTwyQHguJldMbSlAfSw4RFtDbDlJWE07KyZ9L2BLXSRzIXZmVVpYTm1YaDUoVjAlI2taIndrQDY0STNhb3lNb1lbfXNzUktAajU0bDFBaiZZMFts''@;'; put 'put ''UD89O0s7U24hJVhbd2ZyWklPdzQ8QiwkNyQ7RE9aZlJdPnYzKVBNI2gvOFExN3prNyEoJU1iRVR+KVgkfG5oT05yL015Q11INDJiWWZneSZxKixDanBLSTJ5L2w4fTJsUG9oaGc6RU51YGl3Sy8wVnEvUG53IlsvOX5ob0dfUHNheHlsO2FAWz0lSC5vKnVgRV1vXSYlbXF1dEREVXAlfWtrYmRD''@;'; put 'put ''Sl4rOiJDQTQ1ZUJTNVE0JXlaPlZjJng9KVEoeShebysqTjBmOysoMzNbX1NBb0ozMG13aURuNHBbeUY3ZDBhe3BpKm5iMElbYUc+JTMvM28hRDMkaDN8I1MkIlkpTiw4b1M6IndAZyZQckI6cHVaQ2xaRHNlelUhbCw1bTVpb01Ea1hZY2RDRT9ifi5GN3QhSUVaYV1qTzp4KktHej47NWNKKXo7''@;'; put 'put ''Q1UhKXVXSkY8ZXc/SUlbfCVbM2QrYTVKUnokXyJ2KTBAT1NLN3k7eUpofTU0aSo+LG5OVHtMMWdpX3wxJSgkdiY2O2VEInExSjosYFFReUBIZEJOJEV0LyUpM1JqKzkvIlsoR1RXVUUoRzpeWW4+P0kzdix6cjl3QDx3aG9dQSM5I2BCSTdVL1hffGo/SVZFejJMZzJ0OXZ2ISs+YHZ7YyNAOmZQ''@;'; put 'put ''YkM/QWdPYFh6fCs/Mk5de31AMTpOME1uQj9aT1Y3MCpzU05NM1IuQnMufVQ6Yjw+c199QktxWWNEamhEdmM4K3pfW01EJGxdR250VnJLciN9alN3I2BVcm1KMFc1YCNPcFV8cE5VPkVgODcuOXI4fk1hZyVGdD1eQzkzfDZWbi5OZiwwV2hZZ2dybVNJfmIzZDNEQV9tUjJZcGhSbmFZIiNXaXBF''@;'; put 'put ''V2ZudlR8OVE+aSFPUDxZfUVtalRHYH0qYj1HPStFfER+JFkxJXRXVnkia090Q2YhbktfIld+PExqQDYuXmp6OVAseixzfXxsfT5vTjlRVCNZKFpDIlpFeGdKc15ZV20kP15WU0NvJXMqPjBsZFpdaUJ8WS5mcTwuTUxuMHssM2RCaFJFSlhHK35tVnFVKmdMMz0jVy9wKEJNdGZ3K11ULGFse2Zr''@;'; put 'put ''SEAqNUd1MDZCKHhka3RGWSxBa2JlX3widXdRTFomaSxsR2hsaGAkMF5zX25gZWIoanc8VmlOIXJsWCE2cFc/ZzwwaDI+THUxVmdnUT1rVzFvbU9gTWIjOVBubFFReCE5NVtDdEZFMnZCeX1oN3h8fEdEVUpGe3Qufn5DLyt6REhWNlV+Llo4KX1pUVRzUVk8K0RfQzwuS3lwYih2PyF3KWx7X250''@;'; put 'put ''QGtFNXJOfHNfWVFxSXpaRW9YR05PbGAoXjR8YClrZzZ0Zk1SVXhZJlV0SXZbZF4+V2goSDBEUVp5TSRRUV12YyF1QmcuS0xod3QqWDUzdz1zO0RJKUNBc2d3eWViSE5WTUs3aGFtU0tDUUdrVno6Zz86M3Z2Y3dvPDppUGlyXkRyZCVPUEkrZGc6ZjFRcWNRMlNOKVQjN3wqTSwxUEREcmw9NSNk''@;'; put 'put ''YzNaKV4qTH04PzFCSiNaOytkPEw3dXomTmJ0MXRBMHsxbDFGWXE0WlRZeTUpdXlTMDQ9dDgpJmxdcU52dks4ZU1pajd6QnRbRFRReTYyLF5wQ1R5OzYhQlNtVFczJFh8I1dLX21WfUZhWHQmaWtKWFlvSjdqJXtXLmM5RmRtVWtiNnpCR1FSZHApSyVEZyYwMkU3W3tXdUAsTz9oclZgeD0oSm97''@;'; put 'put ''SERufCZ7P2dDQFR8XltkbHUlIj1VQllTVWI7Ry84Z0R+eHAveUYkI3Iybz13bnY+eTMvJHdNSHIkMF5MeW8yPi9STD0oL11PQCNsZj44d2pUWCtGX0hid106TSQkKWlpW3N2Q343JCpXZGF+QmRyQ0M5YU9zLyFBIU85Kz5LRmVFRHRVJFYzfExQT2ppUVIwc3xxdXEmV0lfOjY3b1NVJjohKFFb''@;'; put 'put ''SSszXihqSFU2KTt6WnAlXmQsPC9GKG45RCQzfWwpcVtKfF96LGw7OTxgKE9NcFR9KkN4e2p0OXVsMnRhKnheeHRyQig+Ym5EOV05MUlRIzZxTjpYdC9yQl1bVSFgJkhsWDZ3Nk5pSGUoWmFwanxxSWxLZnFAOCYqQkErJXNPbE9aKXhRNl9RTG9UPDBrVDxpQFtKQSRbSVJZaXYxNiJ5UiJrZ05O''@;'; put 'put ''cTAiKVpPSz9NaSw0NTtBK1tgMDg1QlhPYjUoMiIqSUUqMlUpODhgIW9sV3JDenJ3QUlHfWQpTEUvKy4/U0xwT1BVcFgxKmsqMlFgIiE7bUlGWk58VzpLWSMxRmp7a3AkL2pKIU83QGE9LDJPeUxmcFQvNlMpWWkqNixXY1YqZ3phPUQ/QmlqYSxAMko0c0oiPzl1W3V0aXdxPkwhYTtmQ202VjZ6''@;'; put 'put ''OFJLVX1HV35BTl8mNThIRHJFen02anhaYkxwIk1sO2pweit6aGlIMSFMfDwwfVlqdSkhdj1xPn4oQVNBaU8oKjoyNSxHM0JOXnElPFhYJl4vTl4hRUZUPWlMQm89OCNQVkoyfTV8JVFyckNEaVIpbiZJblFySk1SRDklQUMkdDFPdm5CTD0zdEpeSF5aby5Je3RaOHFaLDZmYU1xYzhoeyNgdDJE''@;'; put 'put ''Izh4NGp+Q0loUE05fGw0TX1sTHU/VjZKMmw5I2E4PGg3JGI4WUVXIyZUbnRsbipDdlYsM1dVWHRyJjN1MSlhPjpwZD4pWndpKFRDT0h7IVJNeD1TOjk3ZlJwWGpQXSN0KSk2RzUrW1JPRF9dLFF9L1tDQkxCJixNfUVUW2xUcmVXVX5+b2NMSTxrVm12WihNK01xcUN0QEtWaGpwM24rY308Z0l0''@;'; put 'put ''UmtaQ0YrMXFyT0NWelQuOkhRM1pTUG5ELlpsUF0iNV17R1I8RTxkJD4jYnZ6KU9Gb1hEYCldMlA5P3t0LklsJTMsPmB3e0JsTVYodSVTPWJtMlJaazQ3Zzc4U2Y/WClbYVdDOktPSk0iUVpTWkIkTilseiVeLnEhVGd1K3xhRk5CdzZBPE54QnhVKWhoUXxkfEwpSFJ7ayQvdCNsV3IwcU5BUGEp''@;'; put 'put ''dkZNLmIzY3Y0cmEySCQhQnBLL0dVUkNZKXUhcjdJXzZ6NjUoM0I4NkQrIURlQGpXLnBHPTMhZjdYfUNxI19XaXdTYmkuLENLW3MmTVJCW2s8fVE6aDEqKUlbTi88V000N3Y4P2xiXjpiITV7ZXhDPm4pQXpBSX04NCFUc254byFVbChFfGB5XjdRMDp1bSF1QW8vfjxjOEhBRW1EUl5zVWJ6ZEpu''@;'; put 'put ''I3c/JGU7KDZHNXIqT3owR3I9NWkvWXw7SDk4JUh+RShYKCZzKENsKXx0UztbWm1AQ2EqYXs1RWZuUCVOem87SVkmQXUwW0xMSTp1QF1ifjxZWTs9LHZPQHFRPl0rQFJEOzUwYFIsPVo4RUBkSSxqYHIsY3F+TUxnTzRMPU1tZEVWOE5PIjVhN0dIIWV9MT1kVEo1WkJ+TCZ2JHpseHVJb2FLRDpN''@;'; put 'put ''WkglPEgpRHViUkkseHpOfX1hbkdgPVFBWG83Qn58S0hJMGhyVEBtU0YpWzMkekJIcD1Ya25ee04/WylwUmJxc3MhRVloc1ErT2g0S2VnN2Q6bjhfTFhLUjJSPTU4bTM3OTQoTURYQkFFMztsRjo3NGkmQHopdHV7VTVrbjdDbTZqYURYdnAueUFLIjZ0ajdDe0QkPEduOmt4ZSFsfCEpfCMqWF4o''@;'; put 'put ''VUY6WTg2c3d8QG1sTF97M0k0SmBWanYrNHR1fWdIN15YZHxyYmNPMmU7YUJKZ3xvW20+RFNMY05SWDkpJk1NdnJNbCU1JW1sKFgrPEJvMWQyJDpeeDtdWigmQzEmVF57fkA4MEhjJE4pcG95dDM2IlhfQ1RAUVk3cWNhKGUqeXxKNWQvPmkoZ1tsRUZ3WTd3Qm07QzMhUDQ2cUA6VEByM1BAfFhR''@;'; put 'put ''OGZDSj5vZ2I+b1V6bzZAZjllIUxYUmo5blpjSmBfJU5+MjcpWmdDPnJOemg7LFMqRW99Q11UQC96Z0Zvb0N1SnRaXXZ8OzF4dlB4UzBhR1ZTSzR0d1BwYCJXLllUUXgkIkFRJXZJWS9BPFNaW1Q5QWxweVRYalkkLzE6KHJoP2k2PS5xbjRnb2FvKWFuY0gobEU0fFU1Ym0+ZEVAblokNzZDcEJd''@;'; put 'put ''OlE3UlVENEBralJ8Y2F1SF9Xcn0wImtNeiFYWDssXV5tQ3NncHp6cH5DdTY2KWghQj1iR2h9Q2p6JjRQTTR6Ons2e1sxaE9FTzZ0ejNdTkFJMzh2WXJ1TW8yIT9qSE9EVWVrM0FYeyxdbTptPGcxPCl2bj9JPzUza0BGbUBARUooOTUqJUpOQTJmJD1ocy86dkFMfUlwZSk6VlJ0Y2N2YkFxRXFB''@;'; put 'put ''LGF3YjNrUHN8Sj88PjljcFRyK0pDViheSEVGYSNMPmAoUX1uQkZxRDZlTmpKUFk3Syx4LlQoUV1PV2ZbUT01L1lVNnpNWFB2bm5yOHh5LjFuWGNKSnAmJmg0XmMzTF02MVlWZDssOSx8JEpQPzpJQjQ1TEh3VFpLRnpUZFhGIVpPMjpDOEIwKSthP09VTVtbYmhuK31oZnh7eDZpOGMzUGhqLyg5''@;'; put 'put ''aTY6RiQ5VXNsPGNmRmEmRjclTmw3UU1MTlFLTDBafW0lSjtUT3tJSWo4V0tbSmIoRTxwKXVQQG1DMFNqaExQTkZFXiFDdGxFLyxOOlhNX11Wfl12SlJaKikpJVssYCZPWX5OOnNYPFlpKFtYLzZyNlhsb0Bzc0gzSW5uJnFiV3UjK2ViYzMzKk8hXktmenh8PXdEZj9lUTVSfmxGS0ZnbiwpZmw9''@;'; put 'put ''eG44I3dOQjpOYnMqSWp4fGYpWzAzN21mWWI/MmhkKFM+W0M1cjVwSj9uZSo7bWhCbmZALCtMemR1N3QrYDthUW4hKjA3JElWNSEmdWAyeyY3aXwlclAjOjB+QjBpYXd2aj5MU0BRQnxaNVBLXixwfH53NjJ4L3JTX31JeEB5bl5VV11PQl1LI2VJZUEybUFoZXNeUCNLekhQdForJV8ye1VTTDhC''@;'; put 'put ''MXVWbkByeHowSSlEI3oqMHFsQCNUZHdwQkJsPWU+QnxGNW0kUlZJdiRCemg2XXdWTVIvWkxOZF1QSDg+YFJ9Unloa3FhIX1LMG8pP05RVywzI0l7Lyk9X2RDdXJ1NCpEYDo8NCE8W1ROL1kkeUZnQTY2bixiM3hQSCZfaT86Zy9mQTcrO2ZZWn0ySGt0eSs3ZGV4YDxpOTtyKnMvRWYuXVk6WUM4''@;'; put 'put ''empffFZzMXRnemd1bDkqaiJiU0N5RnA3WHpOM20oLHp7Xlp2fWN5cGFIW1ljPy8mUVJedmV9aj1OIXRlNzB7a10raVYmOTlLMWAzR3lkZ3NLI1lYWnckYExfUVghRl5uR11kJGNgT1N1N1t9MSwuX19Jb0J5PCs2U2IufGN2Q09CaXg+aG5OPSZ8WDB0WWsjeXdpfiF7bCNIK3tJbVdKfURuUG9x''@;'; put 'put ''Ml9QOnwmNkcsK3RCKU91X2wqTVU/Ok8iQSNAYDEvJmpiU3ZGfHd3d3JCYzxTOVk7Ul4/aW8vYjNELC9MVSlyIV17ZDhFeU9fKFRMJClDS059LzNEZXVYZkFPfTImXyxfTi5MI091eUVwPzssfSo2bWN7OUAhWVVkbG0rMXg5an1RYGRgM1NnWGI8I21eP3FzckRicTcvWFtuJmp7UDxMImhdb1Bt''@;'; put 'put ''dHUiMG9del9kPnthbkd3UW9OWUUodjtHeS9PRCE2THdwZWw4VlZvQj5TantLeytDSjJrVS5IcV1TdGI5TSMjTn1QTWs7JUxSWWBTd2o/amNxeUo5bm58Oz4zTzY6SG98TEUrdHxpNU5MRDpnT0koMHtsZEQ2YUBJfX08SWU9KSlJTWY7Xzs+QyF6aG1ZdHgzVm9eXUhLR0czcVZwPHQ5LnluZ3pI''@;'; put 'put ''d0pGSHJoK0lgOmQ5QkY8JHclfDE3fTtFMWZsaV1PJEN4UmBBOVt2V25YbiZkX2M9aEhKSj1VR2U/e1JaOzEjKCY6VXxrOWN6d3JZL25rRUNEMX5pKkIvci9vfTNEKnFNMTtDa0ZIOGReJDxWb3E7STlhYmkwJmtVemUzaCRQfiUjLz5uWG1CdHZVLypGPyx8XzYiKHJsOm87dlMia0JJQCM1SWY+''@;'; put 'put ''R2k1RDZvJWhsbk11ZyY2P3o6SSxUWkFBUC8lbzJfUE08PzR1a18+aTxFcTAybjpPdF44VURjcHs2R0dQXmtrdUcpVUtldSNYYn02cnd7eUprNHBVPTsvZGNSK1BIIzJLR3R+SDBrRl1GIUU+YWV0dVpPYi5VUEVSWDQvMF5GNk8qdHBMOjJDRXEmcXdDSWgvUmZwekRETSpuPlIrK1B+K11vVWJX''@;'; put 'put ''O082U2g/YV5kIm1xMjEmeDpnQlZjczhPYTkmMV5ReW98QG5rbWJ0SWV1Yzg2MUdAQHFvfHpGV30jKFh3R1UpPSVYaWBaJlU/NHxiPCZKe0BicjdHKCR0aEpFcko+YG95JTlxcDRLKilbPDtoayxfQCtFKkt2filjd0tANSw7Y0V4LyZPa2BbWC9PNkQ8bUxzSy4rRVJ4Ny51c05hVHVzcStaN312''@;'; put 'put ''Vl4rX0cpPHRDI09WTkRCVGBJOF1kODhfWFRGTy9wIVltV3lzezN4RkZDUCxQdTdaanQ+P2JYdldlJUVWPGYyWGBERndCJnhHK3Y9OThvL3g2RlFoRjpfU0ZrXSJYMlQ3OHRZOyMpJT9FJDx7eDs2ek12cCVgPjYoczMpfVRzUDpyWEtOJHleUjpnMUQhKWIoZHkpLmZ9U0JXMVVSLmNmMSF2Ly9K''@;'; put 'put ''JHJaKD9dJil9cSJXW2U1PUkoI2xyPituaUlUNn1tJkxoTD08KCFYVkNjd2R6KVErKXVEIVA9OldXfE1CQDNqfCkzUGQ2fm40PEtEPiI0U1dDTUVGR0FSIzxafWJxYzQ0WiNgKXt9Vn5dZmx4eSRwbDY+VGpwLElSOk1TZWFYcnZNIz8kYFhdW2N7bXQlOlo/NjJvVX4lLE1DSUg5aj07NmpMZmhD''@;'; put 'put ''MEd4Yzc5S1MiPS5zOipPJEk+R1pgUVFyQEJsISU8VDVpNSkrJXNJJVRpd3wja0o2LjlvP34mfVcrenRSSXJhX0ROPml5RDpkblQlOmZZOSFoWW9ydEw5als9QGJsfUYvIUIrOFRTUjRUYFc7bERNfFApVDNCQ05wXW5QdmgmYlUwX0RUV2luXWoxcnczbGJZP0lvPkEiWn5eU19ebj1tNEgsfE1i''@;'; put 'put ''RjhmYU1pZS4wWi8hM05KbC9SPk1JfXZBTm9tP0I9ZixSOiNBNTw+a3gsXVtdRThzZCp5VSp1Nkshej9QPmkyUmlnfnlQcGAqV1NwQF0wWjwmbFBQTGMmSlsuLFRWTUZKbEZ2e0tHcS83QSFxVjxnYnlZSn5JdmtGVnw+QUhXTlNWQDs+OCg2XlhBR3gyPS9LRE4vVX5ARiR1Z1c/ZkReaUsycDpa''@;'; put 'put ''YXJ5Y343ZGM6WVdEfmkuMXZlWmIwUXJMNDg9Z1VqLCokaWt3SCRbdCwvRDsmR0Jee0NdTC5uQ3A0WXM/OlE0dllPOVpQLzRQKF5OYiprdkRBV01MVF4wKX42M2JWLjJZKEtRd1NmS25YOmh1NTFQdm14M2ZqITVrOEFCWktVZjtSRjhGPG9xJlA8R3J6bWExW2JHUUJGMm5sPU9aLmshZTBHKTJw''@;'; put 'put ''KDVmRz03RiY8Nm5rejp8SGs1cTwlKEMpM2AublNTVDh+WTY2SlYmUWRfUF8sR19PNW4vRXpOUjNaTG57PkxNY1crKTJdQiw5cTlNIXJaLkohXTVmTVNFPDxWcy95Lk5YeUNpYzEldU13LF97VkR3Q3Y0MW8uL2RoSFRvMCF0eU0yeXZhWmtScTxoP21kSj5fa1NSRytyZ1R9cklWK0FOe0R4UDYl''@;'; put 'put ''eF5oZ2hhSjdPdm4hR1tFSzZrYE1KVVtBfDJ2VSt5PmlPc1FkPT9CSSNVWnJNXy9JSFZlaX08IV9QL3R6U3wqX1oydihKbTNxdF9YSFpJTjVIQ2ZNRUVWLFh8JCFgOWosUGNYYGlBQ0hHaDxWRy9LJHVVb1VWUiNoSm1ucj4rdjZ+VT1EW3UmZm92fjZDTy5WW0JzeklJXltRek50RUpUKGZXW15f''@;'; put 'put ''Ymgucz5hWiljL3gwI3E0dlpeZ3lQZFNLOU5MWCleU1NwYGxdJCY6ZHVjI1F9KVIobmVWZ3ZpTVt6cFRfeStCOSN5WV4xQ1BPdjw8JUJ8OUNrY1lrS2xIV3ZFQTpTZ1FRJDRyMlVdcTsqOHA7RkcyI21rNWJdQDxfRGk9eHUmSF09cGYhUHt1QCYkMj5Ic1Q9MmQ3SH49bEVVJUFqQWllbkM3O2F8''@;'; put 'put ''Ljk4MHJnVnhmaH14eHZhJCghcmx+LnBwVVcjKVp7cHRYYFA2Q0J2MSZRaThAdns3Wn1GdGV6flhsLGtHQ15YYk53O2Qoe0YwTix7KFopdWN+eHdpZj1AbnciNSs1RTkyaHF3Z1o0Qj46UTNVRz85Jn5CRmdqPWIjXV11Wit2a2ZQdHRzQ0BDUU4vVUQ8VTZ5bX45cmJNQmFdKFVZa2lHRSEhYG1R''@;'; put 'put ''IXhLd0BUV0glSTREaXdzMCFKam57T2FUJlFHSD92figzZVQxWixrb2QrNT0/XWQwXiRPV309NmdnaSx3R2dKbUhjPktDNzVAIn00YmNyR2QsUEpQKSV7czckYmhGTEBLZS9XMDN2emxEQUN1JUJaTUlqayM/YkMvWi5rbU5dYiJsTD52b21HT094bTNzPnpqSGtEPG1hWDVNMHo+fVNtLENQcSYh''@;'; put 'put ''aUBeLHtuaSRBYmt1MzlUVjE7dXNLalQmIiZUMDpiTCs8TSpxI3JQIzA/KT55cTl6R2xUWUE9aDBFM0VNXXtyXi83aF4+OiR5RH1DSkRqXnQ8fFcheSwzVSpociIpZ15rPC4+dmdDIit8Y3ZWT2p4Ikc9TyJ+RE5HYWRnZmZxeyYmJDdFL21dIWN4VTNTNWUjNDZFPCxRcVZudSN5WkBzb1hEcmxM''@;'; put 'put ''MFl5eC42Wip+eCZNVkohdCxwajdOVmtVJGFTTjEkXjY0a3tiajYrTTBPeWc0e3E3eWxiJixqZFgkWCg7d15qeUAoPWNRTUxeS1tiZUEhTlpRenhfPCMyL0JkMj9dcEE4VixeXlF+PWxLKVYydztRdDhCblFaV1pmX19gNGN+L1ddM0RsaFUjRCtuSkt8TE9ANWUsMXlUOX51PXBDW2pnR3YyISMx''@;'; put 'put ''c3kqQkJNezdEOCYpJGdhPGIqJmQ3PkFaQWVQUTIjKkkmZ0k1OkpFc2dUZjlqQTlXNkQ2b0Bja1MvOyYuZmpYM1F4aClRUk5uSSEuMXhbaVVIUlNVYDF6LG5EI19rZXcsMnBMRTpAPGAmfldrUVhzdUJYRV4meX0iYlhpcCNweUAvQCZTS1kvM0xLQ2k2WyU5SWZTKGRDZ1R2YWd7KU88OkdycyFr''@;'; put 'put ''d35uRnlMInNGVVYiZnk8NzF+O21WYihuOTk+V1V2LkpnUnppPDohUFdfYlRkLiZ5O359WDNTZG1UZT9WbEw1cClWZHBNRGNFMVhTXSEiW25eQEZ4RUlpUn5ZI10zS1tDKSNlfUB9LmV0akVveVcyLyRSOCNuUlQqQn5BNUllPnJFXkUvWT8uPTR3cHlwRllud0V2XmErQlRjJCM9KUs7Q0xCLHJb''@;'; put 'put ''dGY4OD1pQlVoNUtGQ2lDWkx0OkFodFppKkNIWj4uNy8vJGoqV05pMGg1VGRkTTZtXzk4ME5nc1hvZzc/S3pmWnd6dVM9e3pCWkw+I3ksejdPcXNFK0ZLKXZ9WmNFb1Y3YlUxeFd7Onw7NltbSW0mU0oyTlt8Y3UuIk0sN0BIJWIldkIrOFtTMGYsOTwuSHt9QVolc0RPVyFfPj0kVE40Lj8pQlBz''@;'; put 'put ''enMhKT9IcEpwQi5NQWQ0PzRxb3QjUD50S0Q3a1phUjYqNFJecXwxbGhra052MkUpSlRiIl1edndKb1Q5PFsyLHJ2YlheQjIuTmBkdS5MX2hYOXE1IXc+ekEzalo3OSEwT158elQlXVJAc14/Snh6aCMrRE9ANWQ8QWB5JG8sUGZtfFJgZmRrfXU8WGNNdXBzKE14ZU1+Xm8/ImpkYksqcyNOd1Q+''@;'; put 'put ''Y3pMP3gsWmVBWFZhQ08jeUoxP1B8RkoxIl1yekorP1h0RnpaZWE7P21JK2s8OGVpc1MvMl1HJDxeRHohaSVPdktyTEJvKV41fE17MHJobSg6K3M4V3Q/P1R6e1dRKVliZm55V1QjcGxxRml3ZjsyJHVpJmZmd0tDN1siVHVlMWZ7XzlDYF1lS2FWNUl4YDgrI0hkfnxDLjpGQ2xgV2NAUDlgTkok''@;'; put 'put ''Z0JEXzlAcEF3VFd1X043T2tBW2xoQmBTIXxvNjh5RE5sNlRRVF9JaEYpKXdady51S092SzsvdlVROVspV3coPmd8PjliO1Z4T1V2Qy5CNTZNSEtpclJFaHB6WDBSLF1tbnlJdk5iQm1Scz8lMyI9V3g+V29GMk5GJntJfmkwOklab2s9PypFVGVjJCZ0WXBgKSIhbkJvXjRtVzgxcGUpIkpgKTVq''@;'; put 'put ''XnVHPnNTIkBAeT4ya1hUdiZrUHBxUUpiJk0xenliZ0d0Tng5TzMwa31RQiVmdVd1JkwkJDVnV3xkbyRWUC9EZHtYd314Smp9OnRyS3xlNCg4KUBJNU1lWDJsUzs+fGZeYldGLEtzYDF0JT5uOlt6UEp4VC5HMT1AOXIqQV1xZEkkbVBIT2FEXjk5Xj9paVEvey4oSCl6Zns2V3lTRWE+dlB1YUBZ''@;'; put 'put ''YzsveDRbLnNCQlFDbTs0Oyw2Q1dDO1pETURzbWZqTztCM0hhQj0qSWtDOEJ9eyUvYDYkIyEmN3BnZGtPTVlhZyRYLHs+N01YNXVoOj5qdj5hWmFoYDN8P2RuRVpjfCFzP3ptVnxETXleQiM6bE8uL3BZT3ZHeGc3Xzs3KEEvZ0oxMzNCP2o8W091RVtkNkVXZyV9cT09TXZ8VmFmQl9dLEVFbXFp''@;'; put 'put ''cTV6QG9VSWlTaDBndihERDV4ZDUvWEg6d2JAMVElLiZhXXY0PFh6Rl1aIlFpcilNQjVXWnFaWkc8TEo1N1kyMHE0ZiNTJHRATmNRVF5wP35pSU0jUzE1KWx2NihNZGYvK2leQz86JDo8bWwyJDwzXVdAT0tBWTBmbF5HRW0sRTxUPUxibD8uMkthS0slYSg6NHg7TFdBbzI0Xkw/WSh+U18oRihN''@;'; put 'put ''YFBjRU1ZJFNAWn1haXo0TS5tcDFlI1pgUS55N1IqWWtYKyNBUCJ9alttWiNuVHEwVFouTWE2MkA7NjxjSnd3ciVQZiUuYUoxUWBPVnJWcWdUZipXcGJ9bkxTI2hjY1IvZW9qczJTYGR8S3YycnY5WXxsQnsxPypzd2pxZmImUSFlSU8kWmNFJlYqO2R9XjYjSFB2OHVVSHVMO1g+PUUkd0hpVStH''@;'; put 'put ''cW5tQTg4MC5mRDZVYW1KSjVhZitGdkhVeUpXI2pJampZSHJgQ3ZQSUl+XSttU3s/ciZQNyQpeFdNI3EjKnR7dTdkSVJOWSNDRWw8K3NFVmFmczwwYlQkXyYpMXkvRG9eJV8oKjcsOV0lT3AhTFojaGVCd0IldnhwJl45fWRpOyVTXUR3QVBrQlYvZ0VgdG5rKER3K1d3Sjp5V2IqbW97YHFdKkhN''@;'; put 'put ''V1FsXnhGdHxaYiY9OSlQa0RGRkwrbFBSN34wJTtOOG9IWD1jWSZdQGF7Pms3bXZVP2JOLElMI2R6OXVOISExNDJBXnJTY25WPjtFTzdsdiY5LC9nPTNdenRSVi9zQEUqR0hnYiNIWVdBRXVLRjZxdzJeeiFlUCJUImxfemJtaH0jczNeRk51OmtwWjZ3TGh9WVF0KGJbUnBzals6MjE3dmNlWGxI''@;'; put 'put ''R0hUR0IoeWZifTo4flBWZmBwQikleDxiOVNFOnNKdiE9YDFGUDtDYX1nSC9oSVA8W1o1S1U/S1dyLmhvWi5tN3JlVnZLdiVdbTJpdnYkQ0MvWERXIyEiJXA5RFpKflpSOmZvfHQkPlFwI2pULn0rQCM6dTJ1VXRwKVcuIyZfaCMvMTJANnw0clBvL1B8OyljX0VlZ2xNJm9TbjN+bVpmKnc0VEhx''@;'; put 'put ''UXwwUW9HMG9Hekl+JmczZ3J6LkRUW3gqaFdjRFs3ZXtAQi55cXVXNyswKC9WTUVdVT0yVmVsVjp5ckVzPFhBXVludUl6W1tyS2pfTV9aNjFDK0llVEBvUSNiPEZnZ1F9LFgkckdGOj9GKDI+MTlJfHwpSChXWUFtWCVdKlZVcVB1Y1N5Z0p8TmdheUo4cGJnSis3PHU2NU5IRyglUCFncEZkaWZA''@;'; put 'put ''WzIhYDBhU302KHw3LzBxQFdTSnZPRFZrSVhES1hrK3RZKi8vQHlCRlZmcU16Xj1zY11PcmtqS1A8aF9zPyoqcGpfZkFrdTUwSiMqTlg/K09kQSFNcXRDY045RWNFX0JbZm5dXVs9Rnpid0hSSkYjQ1IvbTwkdUQ2bU5wR3YrX28xU3xqZ2VhIjVkR0V6enduV05Qay9ac14+c3BFJGFteFM7UTRC''@;'; put 'put ''ejR0KnlqUnxaTntnK2kpb1NCWztHSms4YEwwXkR8MCQ4fSNpPGdCeyZpcEROR0Vxd0BsNmdJTmRFWigyPmspNFNMVDBSMz1rIzI5Kmg1LEVBIz1xKDkuVGloW01AI2p5VH5GXX1ibj02UWtbWDpmVUtubVY4b0R4a0I5cm42QkNUNHY3KWlhSFhlTFlEMXx5Tk0kSjtQMTI9VltaJkN6T2J+U2Jl''@;'; put 'put ''QHEmPT5CYzVsUDx+fXZqeXc2OG8wWmxQbUlxSCxMfF1EU2o/PyFJPTV+QUdfZSVfIms3TjZjN1dGPldzM3JEKTxHUW53K15lbXBgTmM4R3J1PVB8SmAxVlpgQ0pyNX5SY1IyciZ3OldxNjBfd1E5JVIpYmQkam5CUEh2Uk8sbUU+XkVddG9QcVJxZ30/enU/OXRnSjRSK2l3OD0uRk1+ekghbihI''@;'; put 'put ''eXdtTnlEZUYhPltqbzM9VlZrMjxpOntyJkF1Lld5azdubWRpWlNhMzUsJCVaPHIqSjgiTEhlOUBveT1YUjopRiVuLj96TGlGdFJ0WWNkbDFkTUIsY3w8ImF5Y1NYYkRUPUxoXjpae0VLZClKNTpQWy9FVzZ4TTY5Yzo6eENwWXdVJGdkbX1QVVQpc2EmPEBSTHZ9ZzxoOyIzIjZBWEA8LGhscjZs''@;'; put 'put ''UklfVDI6d2BaNiJKZyNyTCFaM0xYJTFeRHI/ZEV9b0Ziei8iJV9UdjdJWEdsMDNlKyRRcUhTVTlTQ3tgPU52dUFZWV1QT30seH5ufWRLfG1Rak5MdnkrKS48di9FKjw5WiU1KjtKNFJkMlRqdEI/cTlTNixXTkRNSVlvUmc0SVghOUIiTHw/aiwqRS9fa0BvLzQ9I3AkTzM1PiQ8SHc0dl1ieTs1''@;'; put 'put ''cWtuR0ZmI2BfJl04PDtVX21AR1B8OUtqUVFeT1g7NSx6dCFKRE50W3VMSW1VdDFsWT5jRnU2JF9ITW08QD81cDF+N1o+NDI4MHR5XVswTURwJWk7eiRKbDdfOFBWKn5AcnV8XVZ9MW5sYmAiRnEqMHB4dVglJjFpRl5LMl5PblpYZXZXW094WU85JnRGMjRZN0tZNkw/fWFVLlt8RFRMP0p2SiN9''@;'; put 'put ''PSV0R09ubkF7RHZEPDhLXXptRGAra1VIU3tRa0RFJkcrbkhuKTxoRXYwZygkT2QzMVczeUV0ekZ9ZXBfLFo6WXZJWHM5Ol5nSGV6I3ZrNDU8dXxuUlcoWm93fTc3Mn00MCRzV34jU2QoWSVJOn1lNGErKFhxWCsjcSJfJCs6Mk9LeylNTE11YUlJMH5aWzZbSnl1dV1EQV5GbiRWRThYekx4L1t1''@;'; put 'put ''WD0walM5YmEyMjs4TVAoSz49X30qPiZHSH5KY0k1QWY7Yj0mdGZJeX10WGlwUyo1VUxvZD87c1ZJUDMpMFJUZUpSTEd+SnJRakdBYyxlTVtiUms9KykudSFXeU4mPFpzOzI2XW04KF1Sem5xMllGSlV5c2FTdndfL1BQPTZvRkRENHtZd2BmNWRROkxJZ1pjWFhEQS8mN01gL04laEJZTis7UGZW''@;'; put 'put ''O2pCeFpRLjBPOyJReWVxQzlQPFlOXTJLdHEyKSoodllySyFaMjlUdSFWLkxxQix0QTdyIXUyeCo8dTpiT1lVamdpZ3RqOH1TZ0Y3OXAxIUxGbEA3WjdVcl9vKjNUVkdAKnAlQjQ5cntSNiZ9YkN0P0lJe250eTlyTSlDNE17aCxZWHdmT0xrPzFQMG9qezFSW0tIc19dKDNhaEB8Z246VmJbLkMz''@;'; put 'put ''Y0ZRVj1+PFZgW3Q6S31rY1A5ck59MjQhSmd9SVgiRn5mXil5bkx7YHZNRVZhLDIvfUJ2STg5YmVsOUM+bXF7SUd2K1BWI3IweHNkUU5pP2doUHZrMmMuSE5BLHpQT15HLjh4SHp9VDVLQzxlXyw1P3k/TGFERD14SF8yekBda3J1dyNBIUxIcyR6dk1ud3QxY1A2MytiazghWWV1YVElJjIoeGk6''@;'; put 'put ''KUVHZlFRL1NbfFM1b1I/WDgicjpyNkZOT0d4eCJqSGJbViZzV1RtUCtuQSx4aHU6LzQoVDpER1pfYDZnXjpNNmt0bShHYXhwJF9qdFFZfXl+dHZRV0pWeTQyfl9CcmEjaHpUdlpSO0wodkxuUnk0XWpMRXZ+RDMrNmRZOmIqZ1JsO1JSdmhVPGJ+Ty4yUGkifGQ1TDh5UCM8W3xPc0EsTz9DcmZR''@;'; put 'put ''Q2d2NUB4QnR9XntndnVFSWMrXUNBXVhrYzR0ZU5uXmchRUAoeVU0JEZZSmlAemBRRVFeaSNtTT17LkZxX19xfSFQcks2OEI/YVNKPz47clVTS1U4Qml+W0RNU2E4dEV4LzF3dH00fVV7cjZtJktPeUZuYFdiRkZmOD0/MWs3SD1KNEk7ZSpbcEJ0MypmVWowSmtbKyRfdGQ1d1o1ZiZPZj88dEtF''@;'; put 'put ''fiw2IV9KOTgvcilLcyFKaWFhLGc6b09mJVcqJTJNOlR5UTFRanZ2U1FxS3MlZnBYfDA6QXoiJmZFTXZSYlBDWWc+c1FKYmg9byYzR2khZllJe2pTNEd+P2krSDZLO0tnQUQveWZzXUBLTyZFcmBwTTJYc1s2OSMpNjZla1ZTOFY/WWgqUW9QVSooN2x6dj1PdXs6R2dOOnhiZTxQRzE1cVNAOEZ2''@;'; put 'put ''RCxvY0xdTjJ7Wj9OYHwuJjArWmlPRVI4SFF2USlbfkJGcS9lZk45YzljXlZjcXF3PyRecG9kPC45c0Z2am9ZQVAoQnNiTEB9fTFwV0lnISxXTiN4MikoTVRTfD92NEtONG59NU1sZ1ZlTX1TfTIqe1Y/UCF8M0JFL0QpW0clL3UzTTZbI1BQXnE/YCovNlUwPmZsIXRSMjZkflMpRz1jdV13OXtH''@;'; put 'put ''aGs6bylpcV0sV35KcHt8UHBUdlI3fGpDWkYrPnNlSDA+M04xcj0vMiQ0UH1HO3t9M0B6dSN+ejN6MG9PZnVoZjcpdntuQWo5NUxneXNwTT0xPnkmUXszQzVhWmB2QU42el9aR05hRik2KnA8NkIvPDFsYFJPMWZxPkkjbyFLdWMmaF5XIyFgRWEqcENdZi8iUWNzNDMqMTVlMjVPNDFvX0pkYUhR''@;'; put 'put ''KCV0MV05eGo7fUAyVzZCfm8sSHtQJSFVezouSyxdLE87RiQ2QlEsRFt4N2NkRjY9Y2t6LkJhaHU7d3w6cC5md0RbT0RhRWFLPFVsYm55czFJSCwsS1JQJjR+ZzVQTVFoMC9+MWVScH49aUhzeDkmcUdFQCtybU5veCs7ZVhFWy8/Unt5dEFndzxJSnlzaTJ0MzdtdHNJKmdDQFFKfjF+e2BpNGUw''@;'; put 'put ''cihAb00kIkNaTXN7TTxOWjd6NihDJlF9ZTM5O18yIyw1SlRle1RVRE5lMGtsNnBZIjluTzQ7RltrYDF6eD9tPU18QSYpfGtCdVFRa2poaUJ3Ji9+P1NSLDBHcDQ6IyNmMD1QOiYyWHFkR2RkRjUjRjEhdDBGMT4kPmopRkZRTTJaeXpPSjFZKXk2ZzZ5Jl5nYkYsRGxpJXpdQ2RoY3w9aEIldlNP''@;'; put 'put ''eyJERTh+Pk1fTDtXLH4rSVZeQixMTUI9aituYkp+QmpscD1kdEVfNVljeE42dGVHPjR9eShAdHUmJklIU2tsX2pXMnc8YiZHWGl2RH1HUXc/dlleQjo1X1pgdnhecHxaKE0yWiFkSTpCNHlPQDZWfDxxYSRpQVNjSTw8YDtWUDpwdn1QOnNsd3pPSyRPdj1OWlZqSikhfFpFPmFYSV4kJHMkMTlo''@;'; put 'put ''bHN0e09rUzNNQy9xWHNTTTQ/dGJ3K3h7TyROQ3tRUWlwNTYqekRySXFxMHxXPTV4QmJCMy49PWJ9UCxlJTcsR282LCFweUxdZyM2OXBJd35Pa3IoUVJsUlNCfEhwL2hOdWB3eHY6PzQ3eXtReHQ/K1VXPTBXbi9KW2hjTTBSe1FsUiJaanFOQ282N19rLldSImtmdzpKWChycUJ2dUlFaWcpR0lZ''@;'; put 'put ''XUpSeSlmZz42OzorcGJtRURUMGI8Oj9qbUprQmoiI01LcypVeT46c30saSY4ZF5ie0NdfTBaa2AmQTphK2gseilzN3orMzwhUU1ReU0pckdLeyN7XTpUWTMwU2E/OyhhbXlWMWJRV3x4ZkpPREssYSteeHMqZHw7JH41UmZbKyI1RF15amw+ciZfTilYenl4PEpCbGE0U1hkbzdTWU1sJHtbXkFq''@;'; put 'put ''QzIiX3U9S0xDI3EzSEBeZ11Id2RhMmVZckpIIyMjenFwU31jZGNQelRUZzw1eDZOckoxPCgoWmRsNjFsYSVKflV9Pjt0NmVONnh0ZTo7TysqOUVyJltAVVV4Rj9maCNobihYWn1jM3gycjlVcS8vaWUmRFdIcUE2ZjMhVUI6djo6VDdkcnp0e2BqVS52dkxaJXdUJm9bOjkpNk5iZWg0OTtjSjpW''@;'; put 'put ''SjBwV2BlVS9NNXNoM28odVJ3MCI/MGM/K05sQHBFIS5tN3lDUyVAT29ZaGlpRi5dTm4mYStCYnRdOntKYmZoJm84TzsyXk8zLkRaeF5pU1NUa2xnZGZbdkZaWU9sdGhJfTUzdT5HRyNlRCh9YmdwRUB1NSNMQFU2VEpyNH5abjN2IlsqXTNjVGt4Z05MLl5KUDF9Km51ejF3YnBQbVp2Ymx7PXRP''@;'; put 'put ''Vix8WnBHRDptOyxRdG09O2NyeU0xfWIkazxsV2xHYWQ1MlpfW11HUzArYn4sUHwqK1I4eEd8b1sxK1pfITssWU98RFFlckI+Yn5CTzRiRlYlc0teTXEkIT0qSyh0OUN4dy4qaXVUWE8/OlooZ1tXOEEoSHosOVg2cVFTYERFRHt+MCxzVyU4dV07bmh8SSR2ZmtBPVhmTSVJL3tsTyN1N18lSH02''@;'; put 'put ''c2N9NnNnXXp9Z156fTReen0uOzJUNHtdeFJ7XXh5Zmw+NTlLI0coY201LGt6MXZIQHlgPHdzUiZ+a2tpcikxM2hPLDNPcENHVCRjcC9CbGw1M09mdyxwTz9Zd1UjZT5MXnhTVHBXWltvSHhQUlE7emBvNiovYkh2MV9pWEpPYTwqNFVyN2pYP2FhQmNgbzYhYy5RM1hxUls4KCpHLGFiPHpHQHhq''@;'; put 'put ''S3BncUJwZ1olb2wodk1ZeWBvdVNOOzVnNTxvPE4+REtYc30qSlI+KitMRyxyPHx6eEBMeWFwcz4/ckplJFNtWW01aEpeY3JnSSMvSDI1bUoiajRQXlNnJlZUez9PVFhfKjouUS4lcT1PTFI3PXM3fi89Wn5MfihpUTFCOk5AdHtsT2BTLn4pXXk8Yk0iP1BJem9NO0k6Ri9Ca18qPl4rb289OWhB''@;'; put 'put ''bDc6P2x+fmtZaiFPP2p+ZkpUMCxVLip7cktaWHo5LGw1VkpWPn5aZDMiSjJqWGt0ZWBpezw0WCNNe1R7ZFooRyxAOT8qJWNbWjZWWyRgPF1TWnJkKm9xXSpJM2dsaHtFJFEzdS4zZkRzZTM8fEg6WSREW0ckNXNiQHpKaD5fW3hhSyg9bXQ5d0pKYiN4Kl4rYz5wdT1GQEElPzglVV4ueU8qfWd4''@;'; put 'put ''fGs/KkJgODpyfGtSJCZ6XU1JJTxmW2ojTUcza1AzZ25ZW3ZbI1ZdcyI1UTouOVJKcV5ieER7RCVjMX1TZjlnOTgyfFRVXUJ7L3g9MiY+bDxFY0RvWyQ2YCp9ZUo0NWJtYXJfens/UzwoLjlaVH1yQG59OG9lZWUzTXAjZGVbUExXTm1hdSpGTFQmRnJ+IyVVTDw5IVJ6M2JoWCpUKT5qeSF9XX5l''@;'; put 'put ''MW9oMiwqPjIuQzowZlYxTD5MenIwQmRwdEAmUWRqXmJebT8kLjJ+Lz99ej15R2hia2FfTXNlM1JUSX4yLkQlTyN4fU8/XVA/aXN8QX41fCFee0BsT19OJD5mJj1PbDMwQHgmIjE2S2pbWTltM3l8QXlmcCl7V0Q7dTNbN150MTQrcSpsdmNZdU8oKGojUVpRW1o2PXFNPmBseXo7XSIrfmN9PHI6''@;'; put 'put ''NHBDI3c2Ri46KitKZyVaI0RzRGtDflojO1t6N35mNWB8PVIxdFMoZDtVenMwXjA8ZjMufnpwXVNUW2Y5fF9bPzQyL0BvbFNTeT90SDlnbG0jLlQ1OFc4PX4jYDo/KjwkYmdbfXlSdmVjdUY5RTlIMyRVZGEyXVVDR2dkX3sjUFRUcyJIYGciSDRafSROcTYwKFVEOV47WiRSIyMmO1dIZ3BTOWBN''@;'; put 'put ''Xj9SYlp+XWtWYVYvak1qUEAiNlBLJH4qMU9+SGBNXmxgTyNDfHA4clVyb3NoclFBWmczQWoyUGhrUHw4KV9ZZUU1c0ptN1VtcDUzQTJQeGZoUVN7fVE6KHBAJmdKaG40PlY8UVt2OlY8QXgsKl1rYF5yfmolZyV0SWluKl5nXz1dLzU/S2t+amVVTCt9cjp3ZmJzQFRWTzxLL0VMYTZMXU87cl0l''@;'; put 'put ''PDxydyV2aF5XOSEmNT17WUVsVDBWLCgjWTlVO0lxeEt3X0N1X0NXLDxTSmc+LmJlfDxNLlZiSXs4KV9aUSMjITEvZzxnS2c8VmJfJnskKz8pcCQ4d2lDPmIxQnNuSzRmYCVxaDtzVnJESiUhR0dpTTk5T3w/ZncqcmxEY2d7XTsrcTBxPTs4YmN+bkpkaSQqdV5aczh4KmN1I2x7czd6ZUF0KS9m''@;'; put 'put ''d3R2Tjt2T2JNRkwzeE9bMS5NeyM8Zls0dkxRNUh3KlNrcHQ8LHZgTFkwUjlwS15deFV+fT9lVGI/bEM7SX5uUCFWRWNpKmFnPVR2dT1TUlM6MkxERz45RE4ifVs8dUd1fkdVel0vdzAmOVRTfmlbYWgwe217MEpbVCZ+ZVNLLyg1VFdqXWxleH5hcz45aC9JZE4wbHpkdmA6MGpxTVhRQm5wakt3''@;'; put 'put ''dDckU1hscUVAXUJldGpAazcxXzEmUnY0aTxjO091QXRVTkx7Wy97aVMxSyoiKkFpUWcjeiNdXi8kQGEkd28iI0UmalY7VTA2N3djUnhhXmIyYSwhRSZtb1dhPX1bPk85MmF2R1dyPzgyYW1SIyokST4/XXhPZE99cnE0ZSw4eVUkUmxdUTszbGZmLEZCSGRnZ296QEVaPSwjSmdibyhrYEo9ZCp+''@;'; put 'put ''ZnY7O1pELi8/OTo2eGAlLEgwfUFVPyRJNSpua3guJUdhc1YhXzdHMFQvbyhTQ1kuJTguZX01Mk9bLzlVNVdKbUVQVVBPVyNkWW1jNjBeOmguaV4pPGA/Ui8rPU1fXmAiW2o5XntsVnJRfWZ6TlssJWNVMW1rPzo8Nl47b15SOFAuKGBALDszc1Z4ZTojWFUmc2VedTtYbzNSLyp5fSM+enNHXlly''@;'; put 'put ''SDlxUjt9NFo5JjY+cnNdX3pwJlV3MzswNStuV1lsdi5TOFA8RTlJcSQ4OHUuJWRWPV05YXQhIXdiVHBXSX5dOyEkTyxDJXU3N3ArNUU4W1laOzJhXTNgan1ndWtLLFgkQCVfTSM6TD5zXiswe2dxPml5P2BkcS8jUFJrPjFbT0gqczt9bDRSdVVkbUlAYT5sUSRVdkVxJltTaXB6T0VOPnxSTT4z''@;'; put 'put ''Inomd28xeFd8SlY8RWhiL0YkdT15RSJUSFt0cl9CND5HPiJ8TGA1QTx8YntoNnJEfiJTVmAqMF5INkNHYlQpPj5UcV4zWFdmRFldXz5ycnBGPnVgPkVfd0FVe11LVytzRkBuO1ZyS0xKXXFwRnU6eihkfEZbLyopKW4rTXYvKnt1czFUSDxLcHQyWXxLWSJuZ34vcC5IPkpJQkxPKWs/QEc7WkVI''@;'; put 'put ''ZkQ6aHtFJW5CVGdWL0IlQ3pfWkZ+Vy4+fEZeQkJWbXVuQTVDbTdUUUh0PSIma3pLej9sX3guS0ZmSC9WMSlPYjA9IXQ1UltMZD99RlpMZD9mQTBIZD9WIWo9TjcyZUpJVSJPY0k0SkYieTBIXkwjL2lnZSs/REFBb0lseGNMNVJidGBoUlFxLllMN1QpQTxXKiQsVG5nKWlAUTREanh5bj4kfkI/''@;'; put 'put ''b3J2PlRKVixYb2cjWCxUTiIuQEVBREhTIj0ifUNteDEofUx8RV02akhgbldYYFpgTFVRflcuJG9fWUw2Y3ZXRkpaRmxFL3I7dj5Ieix3Rn1XLz5NP3J0Lz5MPzN0W1E7Q3goP2NyditoZitGQlUpSHVtRFRISVgsVFhRSVhtbntwVUVnNz5KRUV1X29JR0EsPnZXdERyYzExPClbQ1R2IVJhcyNE''@;'; put 'put ''VylaIkBCTD9PdGx1aCJaLylFQClKSTVuZ0E5T0d1aENMP30oeTlVWEJCVUsrPkddYHghOj9EYTY5QShBKSlseHk0MWtgRTpJJkxYcV9DV1tWWz5HRUF1X3puVUF+WU1QXUNERXF8dHVaTltKNVJ7QWJ8OiRtV18pRVR3QU1CekxGdDRfOyZTcVs5U1FtdHVuektTcXYoSD4zUlRMQXU0Qk10MSJm''@;'; put 'put ''fHxRbmImJHosPSRzUFlNNHJ9QXsobGcmKUlmSzFCTEwoaWdsZ1JgQER4KjlyViFTUWg/KyRKQ15FSylsX1IhPnBQd0ptSEReRSIoZz9UeHduXkUzfEQsZz9PdHB1KnU/eVFEaEJLeGw0YEZ8RE90N1JSYE1QKUFrdFdxPjJpK0l3Qj90eihrZX4zUiVYX1FDbT5pI3kvVl11aUw4cz4yVnY9JCJG''@;'; put 'put ''W0ZpIj0iNW5tQnBmMWtBQXYzP21kTGlUKyJpdHFfb0lDQVRjP0wpVE4vM1JwWEBoOyZ6ZDRvJTlrRTBfWHRWSClJaEh+TENUYEJ6NGlnWHFAPl9FdHQwZHFDMkQmRSI+WDxQRGhCdG5ZVjJ1OiRpQz8+UGM3dnQ1WkZDR2VNQSlddEJDbUw2RlQ8UERoQl9DQFFiP1R0RiJfbyh2WHFZNCZBdyQk''@;'; put 'put ''QWspektydnQre3lfSDYoc24mQyJMbSk0S2MpeFAuSS8+S3RfQjtFVz9sSGBCW0MrRFUiekE/QUJIPDRpZ1VqL0I6dl9GMTNKN0xQPEVMP0w/PkxsX3oobCJvTFYicHV0In5DM2VJYmUrcEZEdE4vJUEsWD9vbkRWPyxCM1RKRiZML098RHhIJk98WDBXbXV0dWh1N3lVSGo/JH5fRXh0MihaRnxG''@;'; put 'put ''VHhrQnVuem5uNEtWMUJtK3pYfk5RUDFMUGomIilbakw2R25EJitBdTIoPkdWWDlyeUMvQ2A+NU9bSnBGcE0+Q01wRUUkQWF1Ti9USz90Ui9US3p2KCgzUnx0QT9XaUFmSkk/PlplTkpBQUImWnE1dSF6P0pVay9JVmlZfHduSlZBZnlkOUp8dGB1aGU1RltIblBrbyJMOE1pQyZXMUMwaXZJQEQv''@;'; put 'put ''V305a0VEPys+RG4oS0FtKHYuaFpGI19WW05KRzZrKzRvNHdyWnhfI1QhUj5UO1YsPz1BMz83ckMibXZCcFYyYnx7XTF4RFJ5TjtWeyhGOllmJmFpIjJicnYhV2F8UXMlJCZXIXJDIjNASzcyUntTZEJ2MzdyQyJtbj1zc0VsPyN+S0NbUiQ1X0VIP21CXkt5XyNUaEI1KDJEZnJzPTpzZ2lqZ3xi''@;'; put 'put ''UUYsUCVOY1VHQ0EpLk4lVlNTXj5FRUEqSUlpSHcjaDQzRCVXJHp0NCNERXdZQFdIWzUkdzp5Lk1CSiRpMUhyTDlrfTN5K2Z6bEQuWUo1MyleVmtmd0RZMFtCaE0qSTtSJXpqNDMpblp2Unk6YlJCd15WZjdnWVsiO0JBT2NtUzBVYnAqOndfOGpPKHdEY0FfKldSN0E0TGpSekFkQWNpVVVIe1ci''@;'; put 'put ''Vm1adkB8M0lZQTpMVTEwbC8pWmtIKVprSClaa0gpWmtIcCJBT1ldQ0RCNEQsZ2V1R0FXVjAyd2JjJUJCTVFIQjY0QHdXNXcxRDgxOVpPTyN4b091R1plZ091QSZZeERtNUg3RDp8V2JhZlkyZCRPSUduWmZZJHlmUDNiO3k5RG54L0JkWFdvZ0d+byl5Vip8M1BmWlltZGZqTE9FTTViNUkkTyVS''@;'; put 'put ''NWIxMDlEajRHUGMhTWNgNWRvPCZBRz81Z1kyZExgdU9oY1I2JE1XRHJ1WlI6ZUl1eTFjWSNMJEgmVytabll9MzcxYEJ1d25PQjZmRCExLk1YSEolTWN3R3hEOTE4QFhFX01SY250MmIlNWxIPzUud0JyNlJmanYmT2NqWUFCUkUoamd3V2NFOjpMW3Y2cXs6K1dfQnFVd3hKXTVfdWckUStGUS47''@;'; put 'put ''MWlldmZdJmMuUHoibjNIQEhASHo3WkkpaWRjNjBXPzI9SDosV0tIJnxEM1hGbyxjXTxNfkU/TythRlkrWHBjMj99LDgjVC8oS2BbV208XTRiK2NEKl0vK31Md015PjNRfkVAYUtNXmQlfjxud0IzMTUjMzxPMjg3KzcyRGwuW0N5cz13IUosNyRrVXQ7WSomVzBwWk12VWBqIm9wfn1vb3NrNHNg''@;'; put 'put ''bSNNeWRfZU0rMXVoen4wKyVASiwqbE15K3B6NVVKPGkvbXdCInd6OTQ4SFE9LGxwK00id2ltX2B+az9tdlklbmhrIVdrNWFdUEh1bkpCfldvLCttZ296bFE6en4xLj9OYk9YZCRxQi8iYCEjNzY7eCwsYCwyfnZsUmdKeFMhbChiVWdsViU1NmlvYW14ZkMjLDp4flVtI1NKYlZQKjwsfDUyeWA8''@;'; put 'put ''Oik8UjAuJSVSPTszUmJkZmd5Y3EsMjxIWXg7JE57Oy4vO0t7I11JL14hZ1lvXz45e1BuWjpMbHpTK1tkZE0+Ll54aUBHYzBjVyR4VHdleWUueyxOVG9weTIlVTY7WV5FTXt+NWNwQEQldjwrUjB9Y3d4akV7aEdyNGdZSWMoLmlrMzleZykuX1UyVUZ5ZXp9TUJFUDpXMEhAeWd+dW4lVk5KX3Nr''@;'; put 'put ''NSE4Ynpda3ZONTBjOlpeXVs1Yj9TaUxCfjAvUjRsRFNQKnhhTV4oWDpacnUpI2l7L3chZ202YEk3TXN8SFEuJWEwKnVsWGMjRDdyLEpDamBJNXxuc1NLIzNZUWFIZ2ROXWkvI2pSdV5DeWNSfFQ6VGRlLkAsQD56STE+fSwhbigxfHFfSnk3anMuZWhhSkc4SHFvfmFxOWJFOytANy5fOHolKW90''@;'; put 'put ''ZU92dXMrZj5AeTs+fT5VYDYsI09SQnArQCoyRUosQDo/OXxIUWxrUmAkQjZ4W30mLigueVYxSWEjIUtVKz59PzBoT25NT09kQGxSO1omVmpgdG1jVCpJcDYyT2N+OHtHQFZgcSFYc1V9SjsjbFgrfHpIa14hdChpVFFuMCtkX09Ia2BvYHAhe1ROfEJuIk5UPlZtQzEhbnliT1RoWWRUOlNKLHNt''@;'; put 'put ''fGN6MXNhbFBySTBjeHRzYUN9QlRuWHI3fXYjI3VjaWI+PCVIKWo6NV9mPyowPnVifEd6Tzg1K1Mmd2MkSXVBO2MkKmpwa3QhX3cudWdvRjZ2YV1gfUdYNjheamBHJHxmfVB0bWwoMC9uST0pSy85I3lrJmR3ZWM5bTUjTEZdbGV9UmkwQjpofjI8OV5EXWFXLEdLcjZ+KmprLm0xQDU4fHdETioy''@;'; put 'put ''c3RVeG1oNk5JOi8uLiljVT1ETG8sRFEkLiFaXSUoOnVSJXpERHRFLkxpRz81YWFrTW03PUJ8fld+QWQoWSw8UFFEPWhuKFF3ZTA5ZzMoYz5ZTH5pIVMhYldSMGBPalZ0c1peQ2tPZHtgVV1QU1MoYVd6ZUA/MDt6VUlYRWNqJWpYKz10T3AsYjUmSGRnNSNwezpANj1kMm1bTiVMaFUxejRLV3tg''@;'; put 'put ''SXhTfjlOUGE7d100dXxeR3Nsdz1ZUTM1WCE0aU9ULHNYNiwhYGpWViRoK2xyOG1EfjVFaFh2IWxqXlhJYiloX24/UXEwaiNVNj88SjovM3IifVdUJjs7R19+Jm81SWhdNFMpMi5LPSReUiM6S1ViZygqdGoxISJ8NyZuLlZHVyNDemVrLG8jI1leWzEuI2Voa1dOPlV9RjhrO1RFKlZQUjxsNXhB''@;'; put 'put ''MUYjTEc1d3k1bGpAVUQxQyM4XnBeY2dHWy9zWCpFL1Q+TH5aJCtvTFQ9VSohNzwsa1RbW1tuOntMZ0Q3ZFh2UTRiaGEjJlAuOlNuQ35dayEhV0pLLEpuLlZWZjgmW35+JDJzVG13Xl5aeTdhaGFeP2lVMig8UzhzQGpgez1nTkFSYzdAY2YzNHNLT2khPUxUfl1rejMwcTp8aEdyNGdZSWMzczk/''@;'; put 'put ''U1tONEMycllFfXUlXyExcyQxMishVDp4Xj1XK1hJbXxhNWZoPGZ6QChfcDo4VWNiaDdfVk4sdWZnay80bGQ0aGc+cC9fK3BsRTs+SWhMSEZqZSZNNnFqI2QkUlBHLF9OL2E/UzxOP2Z+Kz5Jezh6OldNMW1pJGk8P1NdbEA/fWByQGp9YXprbWUkTy5xVD1IeTNiJT5CamdaIS5xWzojJiw3JWN8''@;'; put 'put ''SiZ4QXluSk5Ac2VIZ0U5YGYmXi4mYWAhZC8yd0pxRWI+Ly8qaTUsbE9GeSRfNztbISNOYz01ez17MV5jPVRUY2JlZD06dyE+bHFGVmNacn01UT04TkpFaT4zOVFuaXtNWigmPipAXmlqKVZhZE9uVXoyJHNxcyo9VGk4aiEkUGFoYjh3NSpsamlqXTxTcCgwZUFsTSQ5LixKd3QwZTtVW258M2U+''@;'; put 'put ''ZWtLcl9zTztYR199NFZISmlwazx+eFF7dmxoe3ZsOj1Pa0pDNCVWfjovbnprJWxPfEU6KkszUl8zVShdJGtTREomai9tJHxZST5jKUpXbCFLLH4/XWAyMmVySyw/ciI1L2RxI1s8REk6I1UlentrQDJNaU8zYzJNNVp2bTF1QGRseTVWMy9bbX1uU2soOGgyfnFHS0ssW2ckcFBxL2Mvdmg1eFZL''@;'; put 'put ''JFF7T2FTLCgzN1ZsR1suQ2QmbyQ4RVpZZiJZYDE0cyh6ISw6OClXOzxocjpaNTwze2drNnopYF41NDksejJ3YE5RYTY/M1ZzcDk6eyRvJH13bFMlITBjVzJnZm5IeXBbMDFgXmBvZCJqaFk0bCtQXUdjaCtQfTAoRVQ2TT49ci4jQT0maEIjOC5RNkgjJW0uOkNWe0VUNjU/e3cvRVtASW5rd3BK''@;'; put 'put ''Qn12Zn04US47bEBSPjAuJW9hb2E0Q1RvO1k4UDA7cFJWNmFKIyRfPz5icnExU3wla3tPa1R6Rj1SNU8uYn4zLFBMdWQzK1QmKUBKL3ZpODZvUi41OzZ3az1rNy44cElwfCV3OWVbQXxvVEN+MG5MamtdKzU7bTE9Vnc3YFhseS4kWmJvRmJlMCF2MDZsVi9reS52RVEsT3hRLHh9MkBrLjJANDwy''@;'; put 'put ''QD5xUSxrUDdPLFFtX1pkSkcyelkyQSt8OHhvS3IlV0l4PTI4O1pRQm5Fe0NsW3hyMmQmZS5RLGxUIzJ0JjEuaDtdXThYOGFiMmIuZGhMW0hsLCl6JDFDalNLbnoqTXhGMjRVTzMoPDZgITJjMW81VUo2Zy5UKH5OJTkwOyM4eGZhcSpRUG1PXzVrPlowSWEpWEY2NXQhSGw5P0dAd0Bve2FINjdR''@;'; put 'put ''RygoZmtPe2lCciNTTiNIUUE9ciE+PDxnLiUoMXVmcjUoOzU9KDlUNnROX0s8KnY9QXN6TilqPng9I0V6bz5nOXtZVn1zfEE5dS5mMGc5KGlMNGolbDw2aFcofXBtMWRsMyU8bVd6cCt+ZjMlV28lVW9wVypzZjpVbGsjLk1nIzB4ez0lLyMwL3JlU1RLLGBQfjYwcTtSUHN9bVRbZV98JStePyVo''@;'; put 'put ''cztjXjxPTkw9ZUJOV2w8bXNqV3RtST0pMXZtVitML15WQkcwLDZRWntaJSRgV3NhXy4vOjEmOSsqLyFxXjZ7XlAoaFo3S3FYNl4kL2VSVUt3TT9vOSl7T29+cjhkUjt8KjBJKmdzVFtrZGN1KlJbNnBLWn5na2IkZyk3ZzgyXk5vQVVWbiFgSmUlPmA/amZDeDZadU8oKFZhPTBoT3cldXoleF4j''@;'; put 'put ''ens3ZEMkdTtKSG1tYi5bIzBdJVtgKyJ2JF1uZnEsLHBmMDlvWEhbVTVeK0BKbkY5SjNsLkwlJCZTTSRVaiRQX2FUUG95PD4uakYlPGRyImB4P0pHR3dQaGEkXWs6Jlh5ZThxXW5EY0shNHQzd3VsWC9vJDEiJUo5LjVEY1B+TnpxXmAjQFl8eCNuMSs2cD00WjliQERgS3hdIT9ONiR9VTlFQiZa''@;'; put 'put ''YXZ9RXBqXSJQeF1VTT8kWHNWKz9LKjJ1OUxAVlZOX3hTc2F5T0x4IU5NVENsRjJgOEdGeTVPcDVoSEAsJSlOfHBlYXUhMzx+XlBue14wb1UvJiVgMVE2cC9FWkhbc1Qxd08oSjVNLFhTZERjZGslbCZPUj47b1lxb1diQiZdfEhdQnxvcHlQcF4zMU5xbmdFWiI9OCx0M2Vya3BnRktYMiFQSmdh''@;'; put 'put ''IkAjXzd2N1I7ZSRRUXUjJExuJHhpMmN8YWJYaGw/cGdyTzNsPjl2aU9EUnR5dWk7IkthRmt4MntxMloramhbbCE+bTdUMnx7RF0qKnZNckpLLDJ9eWpKK1A0IyQ3WXJPRWMiPVh6OmJxLGRAXStyfi9La1dITWJFdiprPjl4aDJrST46OCx5SGJheXd7TS5aRTJsUn1mPmFaZ2ttVDYlVVFOSmZK''@;'; put 'put ''eyFfZn4qUVQ7RVNHQiZ6biNTR1VkaG5IbDtxdWRkeCQ7dDY9c0UzMlFKTGBdNmJYP1dbXk5bez8/OlJzdFd4MFAiXylyMkgsKGMwMz5JI10/cSxSMGp4VUphPFRpW0JuTiFfMX5QSlJ9JEkvIUBbIW4jfCJFdyVpXzxpdltpXTR8Y3h4SUMoLDJJJSplRjpmQ1Y6ZXxNVUtFRm9fWipzR0spVlk2''@;'; put 'put ''WiRuXXUmXUV7UXEwMjxSaEdCJUckI2hpJkttSXIvaEo1fjtWcHtoSntTYFoiIWZXfTYzMkxGdjwkb0pjWyQpczlzIkYpNypUaFNFeWJDKyRnXVVqVj15PmVrb1R+NmJ0VGl4NTNzSWpjNzd8aSFXLE1qWTFgPjNmcClPem5Yel5APEYpWj1GKTQpZWYmeytpZjZ2SzNnT0tDJV93XjwxUWc+emFS''@;'; put 'put ''fGkxSXFrOFRPY0A6eH51PWFvZSEmW3tAN3hmKiZvW0RsNUN9OlhGNnZeKWBpVitdMCgxaF4/KFo9XS9SSCVaRGFSZUooMTNQcyFrblBURlBKeV4rPHMqWWcjMHhARWlsXis4VDc/bHI7SzBufSJVbHIqJjNTaGpgX2J0eiY1Kmg+PHtUNF1fR1VNPkBhWmtjV0A7Um5VWiVvazUzfls8ayklVnY0''@;'; put 'put ''MzdmMU1vLEd5RUE3cFI0eG5gfk17fjhhZGt9PDlhIXMrOER6PkBzeVpKWnNdKkosKGNUeEsjJVkzJUApazEhKExzKENHXUJlQXs9Z1lrMEslVzsjRnt0aEdvPiUifHN5JGQ+fGk9PnJ0YD5AcD5DW0Z7fEsmWj5qMixAViVDWVFUVGtjJlF3WCQsSmF6c3VoYV1EWXFlZmZMYzFAW3BXWk5PRS84''@;'; put 'put ''Ly5nezRZLDElTUAsaWwsfEdHWG1AVm1rUXl8bDF9c1RoPmJYdjxxbz58S1FTcDYiNjUrJnw0bWtRRSUpUV95UERUdEMlb002bHk8ZGRFI348NDhsak06YEhuU11bN2BSMWA+TiwrYD5ASFZpfHN5cW0wdURVYUBFNyFjezY2eCZAbi5nSWtJN3wmTVB5X0kvXjdvMTUyQTJAUTRwR2FOd3ZXRSFf''@;'; put 'put ''Zk5mfTlhXnhzfHN5PkBzeWc2ZGxBaHA/PXNzVldNJXwhezA1RSE3YkgvOi82NF5xfFNSL0A8PmB+OUl3W2hNNzVJKGF6dX0qZHtodltTfHRGSCZ4X1Z9Z3w4ciEhWl8/Q2okJl54PypnUzN6X2pwLyR2Ln5EQFRrSkQlc3NKLis9NjEyK2k6Wn4/Y0MlIUdHNngwU0QpLHE6MSVSQ1hlZm9gRTlV''@;'; put 'put ''Smp0PWhZcGZPUFpjTTFSJXo8KndiTk5nU1FuX2MlZ2Z3cHZkYkswRlR2N0Q4WD5idjhoOClfMHh2c1JuajE1M08yWlI3WUNRUz5zVktub1M9XS5XWVkmOGJsampLQUt1UnxLS3g0TkkyQjFje1B8LHN4ZXdgNm1yOlIudyUuO0dANjxhKC5aK3o2KkdLYWpvdGsxTjQjNX44bnU6NDMiLjIzUFJo''@;'; put 'put ''UFBUKUpOPUlMcmIuekplPlJCPlojR1ljIWlCRCE3ZlRabXk8b011VCEyTVRabXk8SCNudS9XXzdePnBuSk9zJjV9YV1rTENlRHtXZldmQUd4MEhgRV1aIUFXamRNcUN9V1Z0cUI1QWBJQERdJHQsSnBMWi5+S3kmbitUY3JNckZhPmNASzc+TChDTm5UYHo6LDh6VE97VihjbmFNLEo2SjZKSk0u''@;'; put 'put ''MlBhSiYwWHIxNjNjYyFpZHYrV11DNExxdS9GVlhdQzRMcXUvRlZYXUM0THF1L0ZWWF1DNExxdS9GVlhdQzRMcXUvRlZYXUM0THF1L0ZWWF1DNExxdS9GVlhdQzRMcXUvRlZYXUM0THF1L0ZWWF1DNExxdS9GVlhdQzRMcXUvRlZYXUM0THF1L0ZWWF1DNExxdS9GVlhdQzRMcXUvRlZYXUM0THF1''@;'; put 'put ''L0ZWWF1DNExxdS9GVlhdQzRMcXUvRlZYXUM0THF1L0ZWWF1DNExxdS9GVlhdQzRMcXUvRlZYOEUzV11DNExxdS9GVlhdQzRMcXUvRlZYXUM0THF1L0ZWWF1DNExxdS9GVlhdQzRMcXUvRlZYXUM0THF1L0ZWWF1DNEwjWF1DTGlIZ1IhIXZfRlZYYnx6Oi9GQzh6dEo4QWVCOEFlQjhBZUI4QWVC''@;'; put 'put ''OEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4''@;'; put 'put ''QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOExQRThBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4MjxyOUFlQjhCTC5nQjhuZiVQPzBv''@;'; put 'put ''LCVqPyFuZiVQPzBvLCVqVilxJDw9dmgxOWQmZyYlM0g6cCwlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8w''@;'; put 'put ''bywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUHZfSzdBWEU4JWo/IW5mJVA/MG8sJWo/IW5mJVA/MG8sJWo/IW5mJVA/MG8sJWo/IW5mJVA/MG8sJWo/IW5mJVA/MG8sJWo/IW5mJVA/MDkuJW0/MG8sKUNLZyY4JjBBXiY7P11ucCYlPmdv''@;'; put 'put ''OSY7P11ucCYlPmdHITVecSRpSV5dSV8yOUZxdyNHaG85Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285VElwcCYlPmdvOSY7P11ucCYlPmdvOSY7P11ucCYlQykmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dTSY+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5w''@;'; put 'put ''JiU+Z285JjtKRWVzT3s/Q0JlQnNvcXRZTjZaJkN9MDh1eWcweDNZPjpiK356OjBaWU1+LlRjPkQoQ3ZoMXxhXW5NPVdTeHtLRXNsQEs3ZHtFKDB3PSFke0UocjcwO1B9UjtQfXZoM316QFY7UH12aHA4ZHtFKEBlNV1Icys5VjtQfXZocDhdbl1rRyhfaXpociEkOGR7RShvfXZocDhke0UoKWk+''@;'; put 'put ''blh9YV1ONkMmKzkkeCgmYmlnKTdMaEVYRU92MSlhaU5SMElhRU92MSlhaU5SRGY6cFZnU3hwcGFJOjs9KSs8YWlOUjBJYUVPdjEpYWlOUjBJYUVPdjEpYWlOUjBJYUVPdjEpYWlOUjBJYUVPdjEpYWlOUjBJYUVPdjEpYWlOUjBJYUVPdjEpYWlOUjBJYUVPdjEpYWlOUjBJYUVPdjEpYWlOUjBJ''@;'; put 'put ''YUVPdjEpYWlOUjBJYUVPdjEpYWlOUkk8fUtHR0V7SGVBTHgwSGBFXVohQVdqZE1xQnJZVkN+VGNmTVd4YDl9VmRKcCtUYyVHKENfaTJ8WmwuTT1XNTh7Szl4NzI4U3ZGPSpebmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSkRmOnBWZ1N4cHBiMTA5UitDbHV2fEVfSj1UI25qPykpc3Z8RV9KPVQj''@;'; put 'put ''bmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbjV0PVdIIXV5WGFea0R7LGVBTDEwZHpGOm9keHImT3JXZTJoR3t5VltzRkpbVUBLN1hHKEN5b1Bgejp7eWhCWlU0fFpsfFZlMnFifDlWXW06''@;'; put 'put ''OzY2YmEzeVVLcFVdbTo7NjZiYTN5VUchNV5xJGlJXl1Ibk1oNDlGOjliYTN5VUtwVV1tOjs2NmJhM3lVS3BVXW06OzY2YmEzeVVLcFVdbTo7NjZiYTN5VUtwVV1tOjs2NmJhM3lVS3BVXW06OzZNRitDd3VCc0NlWFpONlomQ30wOHV5ZzB4M1k+OmIrfno6fHl6dm9Ve3JOcCFMPVdYeVtWMSVT''@;'; put 'put ''em40NXZ7Sy89LCtUYyRgejpLcDJPL3daalsvSWlGYElAUCtkeTVLWVZ3cUZgSUBQK2R5NUttTGwqI0pSOGErZmBvaCtmYyYmVWk5SWdFIzZecFRPOlVbSC9xWWImWGBLQCFgJk8yYElAUCtkeTVLWVZ3cUZgSUBQK2R5NUtZVndxRmBJQFArV3xFSGphYWZEe25lQUx6MGNHRl1IVUJzSjZWK0Y6''@;'; put 'put ''a0IhVlA/UUR9Vj1XX2JbVjw8Q3puNHFre0tuXiMrVGNzZCRHLGtSYSN0PTNzWz9xKmtwU3BTcFMqa3EjOTlAfFpsWVZDfmQkTmssRS9bbCN2U1M7QXxScm1WKmsmRngjT2ghfGNQN3x7ellTTl48OGErSVYsVWdiZlB3ZVpeXj9AUFA+czkzYE5gImdpOUBQfWZvKHB5d3VEfWliI2ZjJiZKOlox''@;'; put 'put ''OWQmJlVMTWIyZVN3YzdOL1NyR0hMR0dFe0hlQUx4MEhgRV1aIUFXamRNcUN9PVRvUXVIITZkKWR5SjYvQy96UXd9VmUyWFgjdHtNTmB6OlpSckYxTmd6bjRXdy9yNlNOMEdfM05EOkNuWHlhcEtZW18jRnR5YlE5Kzc4RSMrLkBpfG98UXZ9fVR9cHJVd3hJNTFpLEVUY2tnUjFvWX5Mdlg4QjRh''@;'; put 'put ''a2dSMVBESE12WDl1Rk4mZ1VLPFtuJU5gT0liTjU3JFt3Ky5Ld24lZ19LQmNrZ2ZyaVcvL2xPNGZ9ImJDYjYmdFB1YmozS3NxPCl7O2hyeGcwIS9hRzlYRnZTOmEmdWpTXWtEM1YqMGlOWiNNWVgvL2Jmd0RZMDE1cz9nRCo9LklEK21xOTV6cHpmZHlAQy84XWtgaDhLTURZa0hJZGYpeGReVHlt''@;'; put 'put ''a1VWNiRlVT4wfiE3QlJMaEYkck97IjNuNEVPe0tGfnYrVGNaU3JGeH5nQEs3Kk86YEoqfkthSzx5bjR+dltWMFVnTT1Xe0Yvck5wS2EjdFtMJjRMRjpgSip+S15QPHluNEd3W1Y7ZmdNPVdMRy9yNyNLYSN0IV9LN3k/KENreUoqVGNmQHNGK0tuK1RjSFl7S3hWUnpuNE5EJVlqWFJjUDVhWDZJ''@;'; put 'put ''ZGAyWjF1UFB+VzJaMXV7S3hWeHpuNE93d2JONVtecDRQRDw3OSF6TjV9WmxrcXo/PXkscjZTQlkjdHtNW1d4d2pYe00yfFpsPHloQl1aVGB6OklVckNUZDFIL2tGM1VAMzApK2NYZlhbem14b0ArYThpTWJARyVXfi5XY0oqZ01CNmd3VkRpNFlZTFkrTmowW1pgdEBHclM2ZGQqWTJzSWd3IlF+''@;'; put 'put ''VyNHWzVbWlpseEZrUWVbSzcyPyhDVDFKKlRjbkBzRmtRbitUY1BZe0suZ1J6bjRkRF1WMSVGTihaaFEsK1RjOEIsYWJOI0xaWTNhI3Q3TmkpaW1JT2lVdit0T11JMyt0T250ak5IRz5Lc3JyOyZ0N3EiNiUhSTJkc2p5UzhQTX56fjYxZUhdLE1vNXZhYHJabWhdbE1vJlZLPmwpaiF8bWx2czlR''@;'; put 'put ''L2RIVFZ5Imc+K2kiW2A2Tz1zQ1kwJVtwWCUwPWMpXltPaEZILDZzOk0wSXc2SShhRll3XVNbNSMyeDJKY3Q0K0k6NXlQS35JIyQjS2dDbk49K19jWGZzV098WHo0RV81Mk9mdypXKCZPMExoSSxLLGloZVViendAUTsySERxcDVGNjV9KnElWHlzJDp8Ym8vL2w8fVU5bCl8Pz9jfXE4W3U7KWMv''@;'; put 'put ''M3FPcytNVDoodVMzZi8zYEx5JHUrJilyT048cD9jSjhWYGJvL25mP0tJYDVoQkszNCNQPjQwSE0rKEpjMF5KbilNWWBOUjxPX28uUTlsbUJkIV99YERtRXMiVH1RYzAyPDdnYGNARyU4aDUlfDJdQGZlO3I1NzM1PHlnSXB1Z1Y7Ymh1JENyQSs0fEdfYTZfPSFtYmZ+JWBOQGF7eU9TVig9YSFh''@;'; put 'put ''MCV7NjpeZSZnKXh+QnV1P2xbRzAzWVMsUkJ7P1prOl5pajR6YVo7MVJ6SElOYTtxUlsxK201QCtXOj9pKC51NSo2IkN9Oi51Yjg4Vil6fkAlYmZRM2pebkYxPzcmVlMxYE9EKkY6Ln5aKUFvVit5ajQvcSMqM0cpVk0sWntCV00pdVMmMmpaKCJiZCY1KHtuYV4mcFpyQVdXZGIqZF5ZczhRJXcr''@;'; put 'put ''XylvQlB5RSEhZXJnW1NQP35EZV98ekA0X2BWdi4oLjtwLGlTLDw8O3orWlMsb29Ebm46ck9wMFJRdTlTUzhHSGFTLFVrL3xFa3dSKXpadzFmc210Nip9SWgiclRCSy5Wdm9VPzNfK2NvbFZbISYqazY6TyRMRXxBPHNzMDdGd2BxfFFsPSIhaT1SQltiV2w1ZnNtVVZqVXMhIio/a0lRM1o2QGo3''@;'; put 'put ''I2B9M0QuL2RYSXNsV1BEcnUwJUBRaXdHK1s9MH0sTGg5M217ZjgkcmUzRnA8PDdnSSNiS1tmTHtiSyk3TTE/ZHZKUSFTTyZrdVJIWTRUJVY2Qj9JSE1yZDwseDlebmpQLngkNSJlezZ3KzslKl1HJTRZIjhHIzxKIT1UMGZrP1B+MEhUNW0lfEdQJFtJOn0jJEltdHF0Q3t5YFJPRmZRMXZnODpD''@;'; put 'put ''PChHWVFAW2dMMStgMW51NFptMjk4RVlzMXo6IXVkNDJFTlR2OkxPRjViQ0xCIU51IiVyUFB3L2tNOF1QL091eSp2aVt6WDc0d3JNKlVgYzYpQ1kqUm1FfWA5RihyXVlbIkd1RXw5RmRReS9TJG5gYUZITjNjMCxYUXFqd1EuMWVHaGdebk8uWFFzRFJKWVZIVFdWbnQmbVA/Tno8Kj84UCs5RldW''@;'; put 'put ''fUdIVGY/PnN6UWtaLzNrIiMsKWhPVz4ieSp7JSovRTdTUzUxSTI6YmtLNy55emM3PHM7Wlp4MEBBXUFMRTNDJj16QjxheilOPzV+UnBZYE9KdzxPNzMpanQ3PXBeV2dESlJiYWk0VUBIXyFSXU9+SVdTcWlyekdoODVLKzI8IiFvckNDWEFRVH5He1FPKndfRT8pOjdkfFJtV1dTdFJRaWR+R3td''@;'; put 'put ''UmtvQGJXPzcreU10dzZSdW02SCZMTlV2MVgqdko3SFcwOSEsRGJFImNZRUE6akpkaSFabSo4IWNiMng2MVd1emZfY1c/Oih1U1BKd0RNWnhFRDpYKlVLdHc+VlQ1T2J7R0hON3FqKXtfO3pudTgyIyRAfkAsOyUxSUFrdjxRR1MwQGF2IX42IlRjNnpjYjdjMH1gNFVWc1J4RkdqZ2JgaUxEZ3d8''@;'; put 'put ''dyplJkYmKSFEIzE8MT1acmAsTyh7Y0E6PHBXLnZSbFEoKkc0QzlDW1szTk5BM1cwKiYiY3owRFYzRGdudGhaW1cwcXJKejhec1E0IT00JjNIUWltb2w4VkAqUDMyKlVFYDsoST9weUkiWmFvL35xT15oYVE9USJ6RzY+NTd6KnZgInpYM28vM3I3eW5sNXA/JEcqe01JKTNROnpKYHciLipZQy4y''@;'; put 'put ''QDZ9M1JrUVBkT31neyomPWxtUVZ8Ym87Jjs/Q3kqWSU/UFMqTmRpO08rTGhHNyg6TzZMbEVzT3dESVJ8KzpId3dmYz9HRXc0QHdXNERDezN8XXJrbyV3dGpkZkkjJCpCPSY4YE5YK0NXUWliPyUqT3p8Y04sbyVeUl81Xm5oW11bU2B5KmhiUjdXdXNAfnhBWnp5MEwobm9xJDE5fGlSU0omdnFu''@;'; put 'put ''ZDkrUSxdVVtWeSJISjRdMHxYQmdsZnNwLl1AYjF3T1NWSDEmcShxZnAkJTcqM2cpRk5BRyZoQl1dZntaeXNwXXNIakBDJSNONVMqb3lbanFPdHRWKmF6KjxOYGJUVTcmSXkkWUZZKndpMH16fl1COiMzWTxYO3FhailCekZxP3NeY34oWldzUG57NXg+c3s2YWN1UzkzbXpBMU9rXzU/UmZrN3xP''@;'; put 'put ''b285Wm8kOzZxOTtOJVo5YWA7MyRjQnxNe2hRLl1XSnZ5OmsjfnFVaSNgVGhTbn5ieX5dOyhLVzAlUEk/UiJaLytyblRKc0xaYWlzRlNqUj5aTWZQa2F3Jn1La3VtOjN2UmxVR3FgTjpeREp9eElxMW9HI0EyfnpwPXF0KnJCcXtiRWMlcl95eXIjcDx6eEBxLyNqTiV7Y0xsdjZSNiZSMzZSNkIo''@;'; put 'put ''UCFwODExe1JuUGNyfjc2bm1sR3libXJrWkB3PHJwQHBCJihvJXNuPmp6QmJUaysrTHVCPlVgMGghUmtNOXZLLC4mWkN7VjNjOzwjaixQMzc+Rjc6VCQ/N2tQan5lcE9vfl10cyxTMl06TyIjKFtORzZ4R291N1Q6WnJkV2FoI31ZdUJgRH1TfmlhUzwhQk0+Nz5LM2lPIlZEU3ZzUnpRKEB6OltC''@;'; put 'put ''Kzs/eGZYNT9iUSNoSkssXk5TW2UqPXIvRWZ5KCNbXkV2UEkpSUQrNVAxc3wsZ1tNLipWe05pbGVOIl99YDRVOFQuQiVyQzJKZD5iQTA3M2tTbkYrcnxuWSo8Ji5EInYqXiVMaHdBZHxuUmYhfiNYMjxKRylyfHE6dyw1Q1NtQn1FN0YpSSV6Z2MyeD8pSWhDVFlKdzVOaD5lYE4zWiE4dE0zN3w+''@;'; put 'put ''SERsbGh+ZVVqVDJ5eSNEYl1dQHMsRy8wYW1qV3tKOzhOamtrVzhZdko2OmJAbExyRTZILnNkcVsuMTpxfF4iVEQuX2phW0hUNW14YzYzcUtjWkYuOlVyc2hbNU5IVTZ6YilNKCxeSj4wTmFeKTdiLiVWeyUoL3U1fjZUNEJYXT9mYTAlQktmXVtJVDBVKkFNOXxEI3RlRHdiMERvZ3s4YEI2Lj1B''@;'; put 'put ''bGdhWmFHJDxuZ1U0e0tZbUlTZCtsISE5VHV8IkVaWX5tTmp9TmFiWWApdTh8T3k0UVpAQSVQUSR+Kn00Mmc/aiEpUUJqRTFUTFRXZmViN1cwXjc0LFZmaF5BU1QrZFV1UWMhN3t1PVpHdltnLkF4NDJ8NjUyKnFFSmg2QVpePmBlZENpaTpqflp0UWh6blsxe1MwfnVQSXFlLGoqb3dNMH5qSm0z''@;'; put 'put ''d0ohX2VATT0mYEAsZT58bTdYVT4yVmphR1BGSDF3OypHbUVZPDs9UCMuVnlFUUZkYXt8W0k1OCRiSE5IMXdHcXQ8YEU7cXFyNm9AKUVgWFNDMF5QV3AkXWJxPzU3elkraVBjcll5aXIxPjZ0MmY+MzM3S205JkRnc2oheD0hfVNBX1JyT0BXcGp+XTU6OG49LCZGck93KDF7fjNvUlBUV14wdy4s''@;'; put 'put ''YzkjN3FPWXR6e1VWJioyLlAqVmcjVXZRaXc+Un03LjxmKjFCN1JpK3Nrekh4LjV9ZF4uUngwL21YYT9QJjF4RyR9NiIjWDFgT3s/fmRVajJ5bW81O3RVfVJ9UUldNitCS0A/UjpHK0JRYjcla14oLiFHLDJmfis1fW46PTZQMU5NezEpdTIvKmVtc3ZIenhHJik4Wm1sKDcreT1GUUBiL2R9OV5g''@;'; put 'put ''K2FTZGMwIy40U2VNMT9HLj1obU1hLl59OGd1VmBjOEcuI1cwVjZMaE1aNz5HNGxDaFNKLDQ8KDtlS3RXLGNda1U9eT47TjZ4TUtCK2QyX2pMenFbUz4+ej0xaCV6dlZuJG9HeDpZaik7Y3ZsKjM8c3wqe0dKRz5hR3laTjB6KXVfO0s7NXRVPyo+OTkqSyNjTitFWiUuUEVKVyMuKXVrJTE5O2N+''@;'; put 'put ''Mil6cW9AR2J3S2BPa3MjJGgkKkJVenNTPDNSX11mZzNoPC4mZF1iMX52ZV9dK0NfZSp1MW9LcHh4TyUkXT9+WGhtME5NJCpPLFo+OE9LSSYjZGhzW1VLYTZ+WmZZKnFUOW9xeSlbYX1nKH1rKGw1MG98SFo3bFtwOGQqUzN0LkxXPkg9UXdPN2BBVTNwc2dqTTJAZlFPfUReR1FMSy9kb04/M2dV''@;'; put 'put ''KUc4eyhCMFgqQEFkNitRWl1tUmQ7KHVTdW1AbDBWNVN0QGFlSXVDKDxfdFZoWWNKQGJue2Y4Q1t0ZUF+MVZiOlBuVFprSTo0MzdvNn1fYWBCeER7YmpHKjloQHw0Nztue1lGM2g8aU9yVWVnM0c5PnlwfUNwaXJxPnEobFQmUlRXIyUufCJqTnxSTj5yNTBsKj8sWiYqNDd1QCI0al1jTztOQTY8''@;'; put 'put ''M3Nya34zb19jMHtDK2UmR31DK2Umci4wSzRIWGxQWiI9InpsbW5FNngxRy9rYHREQlgxQGJrT1c9SytMV2J9MStuVzdUeW9LXiZRP2lgYiFnS2FgUDtSMHU1IWRJbV17RVJVcF1RVz9genpdJn1qUis9Mlh7dkcuI09ee1o1NUBFOG9sflJzXy5gaT4uOyUxLlUsTG9XeF1dKHI8bWdSVG0xJihn''@;'; put 'put ''JVsjITV+fTZ3VXR3KlYqb1s1Y205N3lVWm5UTHtJZFczY2BPYWArfTxWSXZVKmNJO1pJSFdzXmIrMy8/JH4rU3wqKztxJUomWHpCclB4Mm5+VGRXUG96Z2NGIWg8c3suLkxSZmxdcWp5PDApY1VtaUd+T1ZNVyQxfDZRIVs8MVVmYnpKV3lfTmgoV3VII18jNW9mO0lmP0k5W3pTVEJ2PDtYLDg5''@;'; put 'put ''YnpKVEUjOSY+WjAjPCtTVEVUa2NiQmJmaWcrMDJNVFhsdVBXLEZ1U2p2ODtoRmlMZng4fmpZW01rbkViOzYqWkxGaVhtT0s8ZFhtT0tYVFhtbj9nbUcoNk5iLl1veGcsXmp4NVJuY001N1FNOUdmLnIid0g2eU0/b1B0fD9kdEl5V1Z7ayE3LEgleHZWZkNfXSFoOEB2WXZOTld7NzRMdVttaVtb''@;'; put 'put ''YT9ANChTTFh5PE04Yj9Nay54InhNVHFOWGMxOGM4c0Ykdjp0Z0V3TDpMPmtfRlZ4fUFTcT0vOiI1WndTcTQlOGg0dVd0PysrYWUzJlRsdTRWWHF1W0ZCQUFBQUFBQUFBRkIkMD9oN0Z3c1ElO1UoLzgiTi8wWWBuNGY4UGp7dU8/SWd7JThPYjJuMkUuKmY4P0ZseSx0ZnhnSXcyOU99aF5Wens1''@;'; put 'put ''LyxpNWZgMCozWmVReTBJb08lIVYsQUBdQ0pscnMhZl1vTz83KyQpWUQ7WColQVlwLlNHS3ZqcTtoMXliUkl6ajUsYn4vfEpmTklhPWNyfGg8VTlvPDtnKHovL0klVWx0ZFUoQ3hGS0hAYSRsVjRNdz16WE95QDtRdUNkMHQvelhnbEUoXmJHdT10a0NeJnp2QHF0bHk1UVk0Pm0ic2BHanlXMFp0''@;'; put 'put ''IUQ2e2h8bj0yRzR9RyFnKUdyT2l4fGgsbDIyfTAvcz4xQEVKJUl7PGx4cTA4JlRHYF8pImZIbW4iXmpGMHBTWnN9LEMsOzclUjt8PHViOXtnfkNoPUMreTZ1YSZFWjNDcmFLTk1jdF41USM1dUs6Skt0dGckMy9zTX1QbnlsZTs3Izl1Z3daRSsrdWR0TUdyM2MmNTtbezdeZHQyVEh6aHxkN11O''@;'; put 'put ''akM0LlVKYXB4X3VjO3VkT1JYMjwxc1pEMyNDemw0WS91V2JQM0tkWUolKjN0aWgyVEhURDdlNDM2Wi9tXiImQHI4dEVHKipRfTZqXTA7T2pXWHYqaUlGM35wd0B4fjpUW0UxQHo0XUE4d0IjXV1JZE83Mn4xUH5CTik/U0BqWXsvIiN6IlhXYF5CRTcwK2N2Skd+V0pGPUA0c1FHXzJ4cyk8MGVs''@;'; put 'put ''YDc0NHM9JkEmUTksU25kKWRGe0A/YiptXkheYiZyXm1YKkxPZHE9fl9GWzdAdHB3X1Q3PjhlLDNkTSpPY2MmL3djN21pUGo6Xi5fYVp0fTM+eDgrWC9aQmZgM1R2c3xzQiRqSnRYI0x5e3FWTy4+VkkjQnBEa1BnRGlsOWJGSy8xc3NOOEREL2Q7Vi44QzNmZ2d0N3ljTkVxbUUrIWI/Qmh8OVBS''@;'; put 'put ''OzM9InMmJjQxOlI0bmk3WHZnekVrJVtXXlRSNnJFRUZHbVpELHJwZzJTQmo1JFtPNkB0elZWZkpxRnNmUkE0Lyk0WDJ2fVcvdnc7eS8kW3NxWDVgWW8wbzozSSRza1djN2VQeUVNOT0+aipwdXlPK0pzIXJPYURee0AxNSZgclIwXy9BUTdLWlF8NSY9dko5WV9VbkAydH5RX1RgL0laZkB5eyh1''@;'; put 'put ''djFKLyNPZG0+e19aY1NpMGNzUURtVlRnek4hJkZ3ajZGa3MpfEYoOzRLeG5QTlpNQlM4aSQ6VlVuUDYpNkB5JTMpUUIkMn1MXURoYShaX3Q6M25gc1dsbF5aRE1vPExia142fGdwcTBBay83WllHO0AjS2hNfC46TClDWnVSIyx9VlUsSlAyZSljPnZOc2o3RVBrK0NyNV5vc0VdJlQ2YnJ3SFgi''@;'; put 'put ''KG4wN11wMT4uQkFdLEchPFJUPV13eHouUFAjIW5SSTFqS3QsZSpibDthRjlZN3teUH5tazNRdWtwI0QiT1g4ViNoYi9UJF96Jj0xeExJJE5MUjlERzpXRCszQ29IemM1QltbLGclXXt3OC9zelNHcjEqSXB9OlJqQHF+KFc3YkgqVUFwaXtvekAhOykiK11gcU1iRCViRmMpKSlLT35QU35gJHM6''@;'; put 'put ''TVtoO31EPm9ZSXZ7ZS9zW0VRPT8hZ2VqM2pjTWMpZnpZY2hGXik/QiJqbT5fY0RRTipzVnp1OTNqLGZheHpgR11tX3JqbXQoSmdQMFZ1JihOWnM9WWFqO3dWS1YqbUU3L2w5IXg9PnFsPSk2SjZ0RCwlT0dZbn4vS2JQMmM+dFVAZ2opUzNdUTlsIVYmUkB4ejRpN3RUN28oJG1Bb0B7MnpJQk5E''@;'; put 'put ''dXd+W1skd09pN1hKKig3NFFAOXl4cSJpXWxkLk5KPntme2cldTlQNEJldylwQzBlTTlUQHdZbGw4V0Aubi96bTF8PTh9VUhubktUeUVFQmNOVilBVTJTPFIyWzpSRGopNFMsMz5McHF6MS5EPTRla3oxMXdZQTFzZ100b2Ahe3Y9RjovajxdJnoyeHVVSlNab1BLKlcjPz8uV1YsZVBmdkdlc3Va''@;'; put 'put ''Yk9xLl8xMGBmcStMVzdUR1Z3O0pMaVEkRyl2Zz5dJDZ9RGd3YHluWmRGbUI6WXhGZkZiZkZOX055LkNLVGAuJG4/Im52fUh7OD4vcls7eSRRMU04KkBzckV1RzU9MjNNamdZTWNGO1cvTEgmUlRUVlojZ31rfUsiVFcuVjNUYiVreiJZXjdTdFdxWGt+UVVoNjlIVFtyNGtSZCNMNF8iTlZ2Sz1C''@;'; put 'put ''K1c2WV9NdU5uYGtNTGl2WERMV0VoazV0aU51QH16TzpeZiliQWQzeG9CNkQ2L2Vmd35hW1BIKz53ek9yNiN4NX1Ma3NwRntVQExATyF3c0M2WlsrTnEwSFkjZzBvYE1PMUNWVT8+M1pfdT19LlozMjI7KjlWSUA/RXBBW0ZiMUlaJU1bIW4kTTVkZjFxcUp4QkhLQkVdISZPZG0mK1EqVzpjMUB0''@;'; put 'put ''MmApY2NlNT5uZTwoM3pnd3FgI19XSixJdCFVa30zNGBDUXthX1dCTVNyUztuaF1YXUppPWdfcGBEenFWeXdRa1BUMmdRaS9xYk1fPnptUzVRSFBhRTNsYXFmNDxjRUAkaVNMaS9Bb2c5VGVfO153Z2JqZUA1bWIoZE5VdW5gTj5TXypxSHspbXs5aSlobXRybXRLO0ZOLFU9NlFiOTtiNDZgKFIl''@;'; put 'put ''Tjt8cEo4WVsoWENXNkJacDNXWC5RWnd2ei4xPWlhQG9uTHpPKyRFTnttXnVrQW9WcF00en16Y1s7L18oMmpjPFYiT0huSiRVPHFtWklxPDVJX1M8XTx8eSZmaSh5XW9xMiR0PFJ6TCxtbGlefilVPFNVLl1xWmMrNi4pVDM5eyImT2RhZXAoeGw3dUMhX3NQK0czSDh4d3dvI0Vee2Y3Y2lPWWpM''@;'; put 'put ''XXd0ZHNQan1iUmBZVTFtdCZrYUghbjohJEJeTSVMd0AsREM2ejlAVUp0NCJQQT09PSpDcGV4InVYSnJDKCExNzB1YFtvT1kxNnRkUT8lZn5eei4jKTdRVXxGP25nVUNwdjczVjVSXk1nakAydikwL0o6WThqUndjdkIkWHBFRzopfCt6enFfRWs1cndJRz0wWyxtPik7VS9dS3wwSG15TnB8cD05''@;'; put 'put ''PFk9W0c2KXRkS3sxbSU+Yzw3bltEKTZTXSFURn5rRDw1diFQI3ZlLD5bcH5aeHtUOmtUMWcwKU0hd0Y5fkw1I3BzT1Rndn5AUFl0ZmtkRkVPbEtnY3lNOkxMY2tAKl83U2YxXztGZzNmJihwPjd2KjNyY2NpOSEsWCtCPCMoYmd+PzFkX3YjK1ZFKlF4WFEhWit2YjIjKWdqd35gQWEkS01UJXlq''@;'; put 'put ''K0tFfDR+UG03cCxuLj50eyM3fEI6UWNGbUhLSCw4V0FdLE96PlcrYFR3cWYlITo9ay5VbntodkV8JHJJXiUzU2hVTHVQJC4kXjQkNjo5RXpBdHkqZj1ZPl4wPWtpPzgqMCtSIS9NSVljQ016QnhkZDNGLmJXWGghK1lmLnVkWWM4YHAsaGp5Sz9dczdAa3tZYXEzcmZ4RlU9OFpfQ05oLHpRMTEy''@;'; put 'put ''MUpjK1F8K0c7N05vcndqLig3P1NvNXpvYVlNLFlBRSVAR0ZnTVpEOkJoaUM9XjYjZnRFTnskYjNmYX5GdSx7d1AqUiJMYkhuXmpEQW05ZnlsVW9LYlF8diNyLENkRntbWjBCJDVZSGJdTGFNSlMmdVgyMyxlQ1QkU0BIJnh2dSFdUzEjTyFhUndZJkplNDVnZE4sNUlkZFNOJDFLeDBUeHl9ZSIu''@;'; put 'put ''ek5hUj1SVGMxJCU0bSFlak5UNCRzJTZzSGk5QXp8UDchUXhNXy4zODhJKmxANE00bkhRYExpPSo6cHJAYEU0QzZXPEh2Ly8/I1kwOXRSTkZlQi5Sc0JubnMzKT5aTS9hQFVCMmc5fHIwLDZKOHh5e051dH1nVitaWCluVDtlYiYqcFsjaUM5djokSGU3K2x6fmVmJnQ9SDtNNTtuLD4qU2B3cTEh''@;'; put 'put ''X1B1RnlKP1BKeE49ZGVeQ1pQJCNTVyx8VXVHZjZTYXNQdUtOeWJTRGpOQFohVlpbNmZuOD9Ea1BuVmI1cHxdN0JBfjw1VkBDTkx6ZkBqcWsuMTp2UWk1VDZAKGd0aCF6ZEdhNiMkJjRNTlFKR0NLQHwrZ30pdGhqfmhIRSFiWG9GLyReIWZoXXJQNEx7Z3xGOCYkJChAYDNYaU42WzJeJCxsOkVv''@;'; put 'put ''Qnw3ZV1RImVbKSNyeH5fJVksKEooW3lsKFQiOmlUTm5jMkhaJTY/eXphJj5HaG9PQkdFX3UmJkFbXkssUmo+OGJiJEw/fmk7Q0ZXPExjbkN5QmddQylzLGFNKCEsNmEocFl0OjJ7VyV+NFMvQ3MhLGBtTW80TXxuI2ZHfVlKYSxENWRxWExlQkhjQTo5dWllL05jIndKdzRSTUJGXiR6eUxXPWgp''@;'; put 'put ''a056SGpGPURjKSZYdlJXQl0pb0c6fjlVMkpaNk8kPzd7LyNwaXdjUkVZRWxCJnh5SlpSdmk9OSx8UlpTKTI+UE9xajEyLD5VVjMveXNaYVEwMkFHQ2tsTFVhV3Z0UCJrLFJ0bDVDQEAqc11SIUFIZHdgdDxJRDt7anhhWVU5Qzw2LFl+JX5+ISslZCVHc1Nue0ZGMSopeiVETVZNTl1WQX1sLEAu''@;'; put 'put ''S2NzNVtbInJ0KFtjSkYqS35dflFzQzJ4UntvTzNKeHhGeDM/Ji82fXNGW3h9cDcrRio7TUoqKUdZPlhIZkk9enYlZU5USV9FMyE2eU82aT0oYCNpR3ImL01xO18pXj1GLjlsUkV6fCIvIyRfcmpqKjtYekIkP0x2NEQ0M0g8cGouPlJtdHp4eDdfXj5lKn55Qj5SUU5oMlk+Vi8wcDA0TVhiYWFx''@;'; put 'put ''aztuNyt3RE5TSCgpOEdealFBdHdFflVRaEl3I3ZkJmVfUH5URls8ZnpieEk/fDJmSSRyZ0tMfk1SSHN6QCR0dj52UjslOkpNY3RkSDFWPEtLTGN6Uy5feTFbXmB7SVFnQnZ0d3I/bU8mfUovZ0wjfkp5Lz1pYFchWilTZUg2XSZ2Jjc5Rmg0eGQ2O0NLQz5vI3VVWWNnPEUkU3M2P09OVz8vZyhW''@;'; put 'put ''WjZ8Xm9zLzRkKn1RcDZhVlFjLEdQOD49KVQvc0A9W31JWF9LZHVwTnRjfE1kUTQzNFU1LjlyY2JmN304dGBzRG1zKjlwM2JaW19yIUMpfltTakYyUF4zUjsyZ1BwJGRNJGMsSk5SLk5yWXx6ciZEMy9gfjFpJUdFQV0lKEBxJi9EYiw8NChIQzZRIkY6Q2ZrZHdDKnhyIXkkVSFQPkgmeWxSaF5F''@;'; put 'put ''ZHwmTStESEwzYmN9VlIzLlciVj5CfCJmYX5XUlh1WDBnNTk6fE1PYSFdO0pePDNQKG1aOipvPmdQNllJcT9YZy93MU8jUE0ieW9FS3Y5bzE/V3Vdeyhzcz0/JElbZDM4MFUxQD44JSJlTzNwMH0kTFRJI0pKSUJkN3V3K3hzR0xJUX4jKjdoJlIlJUYyKW4uRG5yLH5CQzNfREQ8RnJmXTAxNDw+''@;'; put 'put ''NWp2PTBDYDJAfS4vSk5CYmsoOCo5R25pZ1FtWyRwV2BENls8NnB9QiJAMDdvNFlUeDpiVWVbVHBoTSx3QVY6U293Ij9JWlk6dFs+Ikw+OWQoKSVySkQ8fFsoPlhWeiZmTmJCJn0yWUlydnFaSDAyKClZVUAufXRJSjVbREQzW1dQbTwpdTR1NiV2VTpzajtCamw7TTQjUDY+Q201YnJ4aztValQx''@;'; put 'put ''QmN8djtFITE+IUIzR10xPnpicnFDZTl3NCNzLE9YWF17dnV+LHpde1pvPX1RTCVUVUtFYUMqU2skJTQvQSY/bF9WWHllekVkKjR0InVJITQ3JVJdUnIrckZRUjVrSD0xWFNLKVckel1YYl91OXYzV30vbVtydCwuMHoxSSN2fHgzOT99LjR3SnhbVlJ3M2MqWyt7Zlp8MVpWX2RwR1ssNW5aTTxj''@;'; put 'put ''NE1rVWt0V19YSHMqSChlTD16Vl4wOnVzKVYzTj1yKyZhKi9dNjxqKTtmU0lCPUZ8N3JLZiNATC4vTTxHN1lkNk1EelZATEwxeDRKSF52MlJRelhQTDVvOTh4I0dgLzxoWiQ6KihbaHBDQzwsRyVlMDo7V1FZT14+bUk2R3AxMHNFYjpZbk1pN2BpQWYiTT5mOVY5R004SChITXsrP0hOTU9kdTtU''@;'; put 'put ''b3xeWz4ldzghLEdWdFBLdHBJR2pYfSlFR2AwMWlYNCRNNndPMmFPN0x+MClMRSkuZHA7YD85JU98ODo5TFJhRk50IW1Ufj9jQlV9fCwlaHNqYSpaNSxoVykwd1BkYCtOTWZ7VEF6Jm18bWZgIWcweUxCY3AwbCt7N3BfdzBkcF1sWlZuPEwjRnJFM3J6cCp0WT1HciQ7K0NeYXZaMXA4ei5+eE5l''@;'; put 'put ''biU+NTs4T3d0dT17ZGZjPFs6YEYoS3F9Pm9SMmJHUCtHeTFhT3dvMTorNG8kYltBeiRiJjdmTlYjQWxaQDowOFA6KFleZV5LcHEsOzZTeWlfSik7MlheRClJQTZ1TCYjZ1JCUU1CcktdWyxrUVNqKW5qTGxJO1klNUxbd2F4PjlEX0ROOisxKHRUeiwkKUFyIkFMaWxrM1h4OWF0UWMzXU83aiNx''@;'; put 'put ''QkxFK3t7MHY/RlkxKDhDWGN0N3BRWj8/bjdWNjJMY1c4ZU5seU44TkpHYlZuKS8ydW8ufXNidTMoWHptSFAmZ0J9Zi5uT1FicnpGO1JLcVdvNCwrOVJdVzl4L31nUiRjMXp9Mj1ZTVNPXTNITiF6Uk4lKXB4e1VCbzswdFMqWFFINVRSamUoISZdLnVzT1J+e3tYZCo+dzFPWlZMYTV+TjArc0FN''@;'; put 'put ''dW9HZC5kZ1QrQyFULj5ROnJNWjJZTCpKfXNidkZGQWNRMUI7LFh+Tzk0Kkl3NyRFWy85LERPYUx8a3UmInJyeSFPXmE4Z1c8JWZLbjprcGR7T3YwKU5MITlLVi4iJSJ5QFp6X2EsKzM0S3s/MmJTREtYai45NC54Zk4hSmhwTj5qYn4ydiQ5ekhZayklKnRVfVkhY0clXjB6IWEzSWMvU2M0NXxR''@;'; put 'put ''LiVEPSg0fjQuP0BaMUdMM2AjbWc1My83N2w7bTRbMylzVDZaZ0wvbkYrJFptaTtJPis1VWsrd00/ezptJVlYJHd5Vi5AQzJ7SXJQc05vMihvXTxATERtMnF0d117OSxGdSN6Sj1CRHNDL2leQHtOYEgoRmcxYzR3SmcjdVQ4K1ttanZdNGRUM2dQaFBgQF1sa3ZBYyhiLjx2LHldNTIkNXQ5Qygj''@;'; put 'put ''PzNYVCRlcmo7UFlGYXxfRUE7JF9xI29iMHUjOkZockcuVD5KQ2lAanBnaThsJUVzdFBwQzVQcHQuV1VzLyhvb2BNKWAjZF9OPmg2QypneEhnVl54e1pIWj9ZLmldbyh0RD1RYSxVUEgoRXQ/aF1+Rmw2S2h1bSRJXUtTU0NMK3ApfjhuQTpAa3JDeV51JlpiUDgkNipCWT0iam9XcDNZNHwoInQl''@;'; put 'put ''PEZwIiUuOXZ6QDRFVDVNMjhfO0NbPDlCY3U2WHY5bSJNVUJ0WHxWS2V0MGd6RVVSJEExYGElfCRZO05CPTtQYkNnS1JgTzV7V2hVIShPUUg6RnAzeCxlISFLXmtTN0JkK18rZ35MYkZbazMxakIxLmYyRDspO21eK3FeSmxrdE10SWFmQ1lRRFE+czhwLlBnMCRGVS9zeSUwakVZe0F9el9VUzQx''@;'; put 'put ''VlcyYWI/eGhpUl03SX4uQWJmMTpgMW1hOlNtdX03IjRRP1lLVTtYOzNac2M9aiRSUChlJW0sTDtvQ357YiRMIkdtUHgrUlNncCthdTheUW1LMXpzY15UNSNvQHkxWUxUMXJuKGp3UXRlMV8kdSJubGNASklnXVNHUUhLX0BnWjt1N1MweTE1VXVtUTIuIyVYYTgoeEleez5OVChfdz1xMVd2RGs2''@;'; put 'put ''TzFjWDo1XVNoc18xJD1TPkV+ZzpmRzRCQ0hOOC4vQS9NSysqL1tYbV0qPTB1bW9BNT54c2Y2en5lVyRrKys9biVGTV4+JHpZSG40T3QoLmFhUGBqRDV3eC90OjIjVlpZbnxnYkl3fkx4cz0wMDRKeFpqPSwhQkxrbHc0dEJXX1FhM0h7Y0NTWTg9UTZYWE95UD0saSNtTDZKJD80dX0uOyJzWSw7''@;'; put 'put ''W0VSQlNLOCwzPlVickN3TDA2ITxeekcrUX5+Z0VKfSZsMVNJLi5aRXtKZnp3Zy5MQyVNI28rbGwpfnVbeTZjWjl2L3EwN0MqYHp0YzBdL0l0Ry4+KzM+KHh1cSYseDUsUkojQUlVdXFEUFhBOD8uMjU9SWYmZjM2RU0wcE0uajgvclpqZWxKKzF8IlI4U3Y3N2E0TGBAV2huRlVvWyVTI05zWWki''@;'; put 'put ''YGQ/RCYrUyhWbWN2fGdtMnE4JTtyRFhVT18xcChlLjs9JWtONUx9QEFtd0MjcUxKMFdpPW5gQjxFRzxnNXslb1NIKj5HQ3MjKDM0fTV5PGMjTE1TYyVyWHd7dEN3K2JhR3F6ZkohayQhIVckLzd9PUhhKGooeFVweEU6dmRhcFkpLmZEUDFPdT9ELE8uMUBSd106IWZVenhDbXc7MEx2I1ZrWENg''@;'; put 'put ''PlVWJEpIR2Y5UzcveUF2b29iIy9QQEphISFlcGEkT3tpWTNKLjtTLiNhS0YxeyIhPDtqMmIybmkrSzExQk0vRG4ocFowY0oyVXVpYVdlQDx9OVtkXT1mWlBKbTZtaWd7S2JdZCxhVipAIl52Lyh4VHZaO1F5alVYcHRWR1J1aDtnKWZeczlrLGF8ZE92bUE7KzUmYTlyImVwLyl8W3w/I3spP31Y''@;'; put 'put ''Xm5nLCFtY25rJWMzNyNKeVE4Pmw2QiFvZT0sNmlXaG1EYHFSQ0MhM2ZBajZPWnxmVVcyWytVWTpIeXpOV1JadGw7MGZVOUZ6ZmhtQ1dXfCMzLmpeZ3d3LlhWZWVxXV04QVlUdUZmdV44K1trLzpsfEB6S0YxeyFlUz8pPU9zOHRjRSNGM31GVE0+KjA+WSl0eiNPMjZWSz8rPmpXem0sd3IkLCZb''@;'; put 'put ''ck1iTGg7UV9DfHFPMGAxJVUuRWtvWlE0ZihqfUJjWWsiT20zajlJMVNjTWE+e0BHa0xkflBNb3F1TVRZcyY5VTdjdGpNbDlrInEhakdsZUFGKiQ3eiIrWGN9bzVLSiEuSEApU2dWdztDQ10pMlMrVmArKXx9ZHZ+d3pPJFY3PCt6WipGRiVBZU1uT1s3RjhOYDheZCJCaz9kOjBKbStFWWE2YURA''@;'; put 'put ''dWs/NygpKkhZZE0yYThXWl8rKGZPb31hL21LWiRoKywvbjVjTnJIXVJwSVpgWTF7OWpKQVJ2PiY7e00rTmV8PXV0LjVoPSZbYzdRRyopO1pIRzVWYjNoNTwrXm9wVzV9ZmAscDZBZl9wcW09M3smYDAqfjlpPyRdWztZPndGSStlWVUjfjNiMitVeGRWb0NeWFtHXXomXkFaajc9cnJDb1F5elVy''@;'; put 'put ''b3l4M3xQTUZKLz18U11Db0w/ak1bWXQhXURaZn4mPiY3SHJ4LjpvS200M0lBJTFrfV0jdDFQYEpNeHUvYyt3UmwxMi45Pl1PRyk+TDk4fTBja2Y5R1UiJVdxY3NfZTI1aCx+VHNOW0ZBcERHT14pSk54eW8oX146aj4kLys5Myx9Q1soVH4/eVtHclZ+NnohMDFwZmFnKWdNYW9FI1hYQihFRnl5''@;'; put 'put ''OExrWjFwXnlda0M1Uk10NHEpaHh1TSEzek5rakQ2Qko3JHFgYyhnaGBxfkMwMnEqKUt0aTArJFFALCN2STp8RzUzSGgwXStyWFBEenZlZlNKeDp2JDJZcX1ZWHc9XzQjfnBvQlM/XiwvIiQkK1tWb3omTENoLjkkZUUzNGpiNSN6U1RyUC56dmIvL0ZfeyYhd0EpUip1Onk8Nm9Nd016YntBT21Y''@;'; put 'put ''Q1ZmZWZHRzNROEpsa1gxQnJSc0c0OnNfIzVMUXMvI01nSXgrNnRjVzdjbSR8NnwpKFhRKDt8bjxSUVI9cFlDRDF0KUklWCtXdDY5VzM2UGd1TUQkejVCc2lrTm5JO3F3LCMiS3dmfHsiako1THoidShWNlIsai50Y1ghKjghOXM8KUs7KG0hKU01dHUqKzJTUG0kNz1bP1p+KCM1XSV3blJnWTI2''@;'; put 'put ''QD90TSk1cSlZakIpQHJ+OztlekhyQ3dlUEJSblBYbSUqeUokRSI3LHhFNThXK0VCTmM8YlgjMzZXRnxJT1E8MXA/c2IrS3VhRFVNaDBEWEMsfkVkPWU/QjNCRDY0b3ozSVFwJFQ4WEVsPnV3TD5nXSwlR29EUzc/XVBbTjphUlJ3WGhlflIwOVpGTilDRTRnVE1Td1c8K2Q3V1dqXj80OF4/aV17''@;'; put 'put ''WjUyTzpFeFl4Wk8+eS9PIV10VXYiYVRYXkVgWklpdlFLU3A4ZStTW2lROHNOIy88bGh3MF5vOnh8dz5vUmR3cVBqWHRHNyV5MDwmXyJDZCtHNzpFOCJuJDw3LCxgUm0yWj83UHVRQGdNcnRISlkrPGs5M3xrI0c8TGY8MW9SRX5yQDdXQlBXPmZeUVZMYW1YWFo7ekJ8dXlxN3FVPDZxIzx2Zilx''@;'; put 'put ''Y2VjemYxX2xYLip8SXNCXTFKbVFPLlF1aDZpdUBWVC5MZSF4YGZdV3dnZWs5Nj90X145P0k9SEJOdS47Xz1Demwodl4reXBqd0Q1LlEjK1dKPilNNTNWWmJ2MU0/WXQqT2tTdCVVWHEoVFIuP2NFdj0pYTpEKiMkNkdtPihDVC87Y2YrITVvLyN5UkorSUBCejE6c1FlI143Y1A4aylkT3Fqc1dz''@;'; put 'put ''RkBXbClLQXpwVFEoek8jMi9MX3A9IzRZUWs4IjcoX0NmYERObHU0VHZYVVolJVpsS1E5ZWt2dmFxfFpvJnIvXmQxI3gxLHUqWDh8ZVRqYFJ7bS80UjVlSGs+MU1QWWNAUWwvdGp5WVojQlZjOVd6JUVgZFZJZXtwYjZEUyh8RWJpZ1hPPn5fc09+M3JQITAqWX5MK153fHAwL1RHUGdzdlVqUXBu''@;'; put 'put ''UVsuVVA+bixDMWBkeDIsMV5dOm5ncXdTX052Smg5NGFHbUgkXXt4SlIzLm9BbiZJV35OPFQ8VWZiQHwxQE8hZy8/QlMkSiFLVXEvYmZ7UkxYb2IuR01UVUMxTC42dmJHRmdfcHcsckhzdXREQEB8RXM8UGh+fVdwQ2xYamYobXUiSCtrI2dRUjA+aDt0TC9iUTR5KyRad05FWSNKO2NtLyx8SERs''@;'; put 'put ''Wz40aDgoQ2RvWTcvUHUuS1t5Nlg3L0NiTDNVYlBaTlRsbTRfQUxLbEM3LnI8KElLImYhfnJQdCpGVkhyczE+bG9XL1kxa00rYGt5MD5HaCM6Tk16ezNjJERgRHBRYiRZajhVX0k2dUdLRml1cWpUM2x4NnklITt1cVpJMWU3Pk1iMmEyWmVWdzNaLjxgYHBVWHEvdztGQVc9bCZlSzx3I31PQ3Zs''@;'; put 'put ''L0ZtVnlMYGhxQDMsQnFeN3N1NDJzQEhlaG8pQiZTcTtaPWN2K1ByeC45RDB3OkdvdHJxQWI9IV9KMGhUTmFOOUckJjJaeV0/NWo7cCVtKjtHWWI7Wm9OK2N2OTxgPSZfdihZdX5TcGozN2NTaHxfbVguIytRTll4PUxVP1EmI1BXbUBSPCNDWztIXj9gLFRVYW5QdUkifS9CRSppU3hkdiNqUUN1''@;'; put 'put ''dUtOWnJaRVt+NjxqZWtpMlo6d0V3W3FlVHwuKVspXSN+JXNtXkhtb1BwdzA/bHdaSGFxbiRaXXdJaSt1YkR4bl1vMnxoO3oyUUxaXnpzTV1SR3U5MGYwe2lkckE5XkRJKVFUTzx5SlNWYEErUTBhQ2FmYDQxTTI+KUQ7ZHZIVVsoY0MyL291Y059QjZeanY9MzwiajVmNkVAWWgmLi9kKHdbZHEm''@;'; put 'put ''M0lkUSU/NlNsSWYrKGZ7KHJeJSJmMmFvSVVnYTk/Sy5NTVpMcS9+VDQ5XiNdOHR7TDJTfDRnIURVYV9JVlN+bn04RmFTSUZ4d0hpUlE3UGFDI3psNEUsaVRyM0x1VCRJfG43c0ZUL1pVaGdHQjBSYVkhVTlqVUZaVVVMIWAiTDpYQllRanp6QnciYUp5aTVhVkNjKzVMTDBENzRjKVtAOlY7QG1O''@;'; put 'put ''Qyp+SX59N3IrMWEkQ1QmP3ZwOGdba0RqR0d9Tm1aMWskbzFmNGg2JkFNOWpmaUF+VV8vMV9Eeyt5L3R2MkNWckxZdDl5N3dNP3RrOH19eGZpRFNTSDhdImgmJlNofkYyaWpHSk1MXk9XekQwRnsyR2MocVN0aWUwLmo2UikkV2RAQ01KQnt7aiZvWnNKTTV5QCFdRjl4YjxAWT9tOmF7U1hoJj8i''@;'; put 'put ''Q3w/c3V3L1lsSGVLfUg+YnpZW1leOTQ5djRVZm1sP2hALGddYSNYRV5+ejRlMnk0WntxNWo1aW1wbi9BaVR7a0k4aXpiZGw8dmhRYWF9JGs/Mz80KHsicTtfdzcyaFE5KjFHXTE0clF8NTRBMUdQVms5JWB8XlA/djFKZXUkfUtVVlVdNmdkL3J7dGZYQCspKGV8KEBoP3xkVWYmWV8hc0w9dUxD''@;'; put 'put ''aCwmZnhyM2x6RmE9dXFrPjZteCg2RTg4VUg/emVsO1BpQXhoUHUvZUNZZiUySG1rOCQqSUA3NWUoXyUlWj9Eaz00bTtoQllRP2VXKyVqNXpIaSkkTlVNM3UhOl87U3xTMH45ZWlkbyF1ZV1pVGYsK1dxMTBrL2c0c0lMYUxCK0MmfGdlVClTaFJ6I3wrVnR+JWQjNGtyNXREN0owX2o4dSNxbTVd''@;'; put 'put ''fSNKNFd7N2xGbmZ8RVRGNGNNVz9aOH1bb2FSIS9BZnBndE96YkdAJXx0NXFAaWxIY0J2Uk5NM3FHJiMqeD0lOD8vSmVIaFpOYWBncFZkL3Jlb0h4elN+dXxHRjMwfHJHKys2Q2lLel1JOWxZKWN7TzNfVkdOfUs4Tjs8W1dDTm5iKl8+LC9GQ2U9JSt4I25iOjk2ank9cjBPWihkNWVFLFhkamlp''@;'; put 'put ''UThhQGVVVy99JFIzIjJsRyh+YSZ0Pkl9Pkk0XnVOUHklOUtvRG09a1UlLjRdb09NJnZkSVd9dHhuKjxUbm5aPShsIjo9NHpjUTR8KCs2TyJBbHcrWChdNEYuIkcwd21rLCR9cnY1RTdrUTkvd0A1WjIweWxwfSJRaVNYUG5EWihvKTNvckxNVU1JIiw6RzhASUpve29jcEtKPGlfLGVhdWVqNC4r''@;'; put 'put ''dCxKbEZxdHRdISl+L3goPXhKVnYmWkJdNEJmUWslZWFoVmVDZXclISVrLlJtMigmOlhNekhLUypQeUAyIStrSyFdYntAQG5nMkBbUGBpcGxgSV5Ba3xPWUl3fS4mc2dZYG9bOW9WUF42KFZAUlVvOWkkNipjdG9IKWxCW2FrVDNbKT1jTn1DTENuKClpRzZPNXkxeGtTWTEzflshZ2w0fSh7X1No''@;'; put 'put ''KmE6TD9iMnEjSmk+MzVERCViMWAkVlZifkpxPFMoYy8vOyJ7QmNpekB5TWE3MT8mRm4wa3pyOT1JNU5HTmRxZD54akA8TVpHblorP3tzSkhMZjciYG5iaWJGbzN9NEZCfVphcmpBL3lAZGosVyhXbyMkNUNvdyVyXyRHTiJaNmg5Xlo9Pl5DfjhmY28sZWl5c05lMGAvLmUkSTpDRlFua1lKZmRL''@;'; put 'put ''c2tnSVsqeyVEMWlSU29rL29IbjpDP3EzUX5ySkRLbk5wMXduPFNOYnhyW1h6aG17ZiJdTGF1TyUhVkEiNjtfeSRJWExOKCJVbSYsXlUhVWlRRFdgPlRCWnVgYnQxVU8rQ1cwOW5VcTNQaTUlaDtYO1VYSnooSXpTL0ghdDtYTHYhMkIvfXdafUZvL30wWWV7Xi8+Qm5hPmZFOj5NM2JRPVIoMTh7''@;'; put 'put ''SW4keXdtRVRqN3lFbGhfL2lIKElfV1A2NiZja0lSWnxaYFtgQGhpKV9+bXx1b2I2YH5AcEg/eUlOYXg7MHBaJjtjSCp6LEJJTl9DWzY2NnM+ZTBuYyZGfkwuQkFIfn06MHRaMHghIVBAKEN5NnRlR1tzTW9AK192YCg6PW0/ZCovbFhOPEw1WHxeOj1TU05IZTBQKG9hR29NdzokTz1JME0sUHR4''@;'; put 'put ''QmsucjZyOHRaaz16bn19Z115Xys9Y3lwMm1IOElFUFArIz1ybHhMLm1SXjIhUkhGcVVHR210em84KXwmb21oWUBDNyl7PFdWVUdEOHZ9RyxwPnU1UDdFMyYyUTpdfVQmdHVRITtJKiw4WEhSLDNkPzxscVtAaCEmImYxY112d3MmX1sscyYrSntWPSM2XnNGSU1uWzZCPm1gUzp+aXEzQiZOXzB5''@;'; put 'put ''JDYwSns5XlJSZHA+QWovQ3Z0QV13amtvR0lTMGA0UjxDbnRpfm0jeGJfOGgoIk0uWzJlMUdHaGdCW059fD9bb1grU3slfC4jbVY3fCJzXyksdGFdV3ZvJGFrYjZ2YiksWCVYUzldJEBvIkF7cSx9ajxZei5PYUFrTCFANEZwdG5OfSF3a3toQFc9VVtNXzR1NT83cktnbV5jL1NAMjo3NThhLHZZ''@;'; put 'put ''eFU4cjRmW2tKRmtsYX5eWk1FJDAlfH0kV3J3cV1SYjJHP2k0O0lXKkFTQSphaFBOZX01MH5pPUpITXxzQWAhWHB6dSV3fXJYY11ILk1hV0k6Jnc0VjA9QSgyRGJHUD1iWn1PQ3Qsck1ZMGpeeHpfPFk/TXNHXVN9Si4mN0o+Ik9OOF9HbzorRTtVUzR9bURGYTBsUmgjZzk+SkpfLkU6ZFAkajR7''@;'; put 'put ''RUheU31nIkVyRjhFJjNMOnx6Q0d2YGVSYWFXNUNNMXpAYiZIRCxIeytgNGFWU2I1JTU6cDFGPEpzUFVUfXIlKSUsPjcyXytMKzAwSkYkRC4vRGxyLHV3SkROdzk8ZjNqTjJNTnVWKVA3RHdlZmJCLjJkNWhgKW81QURmMD1QTFh1IjRpSFJtdjAxMGpCOyJOMTZMM1MzUF8oNTBuUDIxRVc8NilQ''@;'; put 'put ''UG1sSSJCPD0kMX5rUz1GUkNJQipZMDtjeS9lOjNzc2YsWCpDL0p5NyNHKjpabSteNVpSalk3KEFNXn1vPHpsfWptZXo2NXlHeTR7dFk1XWJbaXtwK3lYe1RLeHhufmdSdShtPFJBLio5dnpwWCR7T1IlLz5IPVFiJm12Pk5gOkAsdHxxOSlAJGVmYXokMChFMSY1Qzl3b3MvLGcvTU5+a3JKT2Fx''@;'; put 'put ''dm9fd1lzKGpqMSRbbWF2Qyt7NyEkZThZdGw7NXhZRmlIOlpmR18jMEp3WDxyRykkSXJdRVNZQVUwfi5yIU08XmJqcVRSfk8lZipIcV5aaTZnNW4qZS9APVpEXkliOE4zLnVuekVxfiN0KC55VW1gZy51XUNkU0x4cVVCIilVTSg/TnJOekZbUVdya0hrRWMzXXp+QitFTFklXVJ0YHZOLyEhdXk4''@;'; put 'put ''dUJpcTZLMW4sI2d+aWlHcGtVT1NuImtZK15jPVZOc1NgS31weFhqM1R0d3wyXlg2YDU9PXlPSUY6KSxubEdIQDJ3PWQ2Y0ppSXNEYTBYfTc7OztXeFMldVNMQ288X1tkWnMmRlI8cncyRGwoRS9vKzt5O055bj1rdXNhV3MsPXsrb0VyMDkwImE+b01DcTFuaitucDs8WDVIU2V5Vm9abCNfK1FJ''@;'; put 'put ''LFNnPHMsbDB8WURVTTkrWy97MC8xVDV6U25EUjVtfmUydj4xMDwhfE97Nm9CUGxNUlp3KjF1SEYqXlh3WEB8L2xbZjI/Vj0xX3ArdHhwOEhEVVgianZ7WX5VWF53SjhxQXYuPl5KIkp5c1MwLCldej9eU0lgPH5daipGR0NDK05HfSJPSzZaa2EpIltxUjxIRTosRTwvd11BUGs0SWdVPGVfcWQ5''@;'; put 'put ''bXF6bjs8bERaRlk1aDdNMSQxKiNJI0ZqSDEofFV0anEze2o3QzJDMmRMWlgsLjZufFlwR3cxbXN6Q0s6TTU3OEdYZDpxelZSdis0aj9SJDl+N3V8Mnh7YF8hYlhBfl8yaUpJSnI2VF1sVjMxdChZW2c8NyZxS051L09pZSNydSk9UDpDfV0/ViEkTTQ3PSMxcTppY2tHaVBRIm5KTTtxOykhMz9H''@;'; put 'put ''VE1QTjVCW0o6YFlVK1plQlAoNUYxNlpxQHRSRGQoP1oqc3MvL1l0Q1ZvLm5pWWtEdmpgI3JPdmU9In1KO2FPP2c3SUgyRyU7aUlwd28sTj57aGRzVzdjKlRlOlRSQFBKKFp9LElwKDxwfi9rZ2o/azc1dnp8RiN0MTg8THFXbXhXR1hXfigsPkwxQ2NzPE4mUjtjVnBdMGl1engyV2ZgZ1tNYUwz''@;'; put 'put ''aDwwPGg6LHZGfDhfSXlxT3ZbWilUajA6Q3RnMz9qUlB+e25MaS4paVdCQ1lEZVtKe3opPmArOTsjPWtDLyw9RjFYMCVZLG84Q0FQVkUuP0xlcntiezlMcjZAaXd7LmZ1bno5IndrWyU6PzVJVltGcXBtUlt+SGNIQzZ3aFFCdzBeJiF4LlhtIzNxPCFMUzFFemRgQCZjLE1RRnUyNVtJZXNSay5N''@;'; put 'put ''UEdAd31iJUNpT09fdmR8TzkoXV42QHZXNjh1PzVOPG5DTTdnWlEidkpkQlkhMGE0dDx6M2V4ciJKJUd3OXRqYTM/SVslcHhVT1lXW0s/JntFWFdXK0dHPFtRM3ZnNzYxbXJDaWgjdWtjakVJYypOdEZpbUdbMSsjNUVfSEF0emg6VC5VRDo1MmN3M1Y0WiFYTV5XOT5DPFVCR04rK314PkBwOHZE''@;'; put 'put ''LyJ7V251NjRxYElBd30wcjVWb34rKnR9fDNta3Y4JTk1eTAob30hLzBxJm4sRWNgdjJDPGxtJGVoPWslRmo+V2QvMzl1ejhRKiNQVDksLjoweWZxbV0vZX4wQlVONTZ1eCVQMldGUDhJemo0V2phNE1wfTx6Xz1HTksvZ01QS3E7VkN8NjpUYElHTF4zOFQlNnZEbW0+MTQjUUg4Rl8ucG5PSzpx''@;'; put 'put ''MWI5SnwhaWAjWFN6bV5gQHJ6TGw7UTt7NGI0R2Jpfmt5djc8MDtoS0VsOyV5R29TMnZ5K3RyM2pSbXxsQmRkJl5+UkMzT0M1QCxUfW47Z2RXVjkhSFRmdjBpUkpxTXxfUmdKTDM/TXc9bV1WPmImUVJ7K2B0MSJ+TlpNdlA+O0R1fkAwZEw6YkMrYUdgbStDLzZXIU49Y2NrfGd8RWNPRzo/dl43''@;'; put 'put ''K2VzJD8rRHE2a0w3fF0+VTwjPSovQjNsaEA6a2BhfSlRYlBtQjQ8VTJYcD5jKzk6TSxqMH0/TTx+ZFcqPTJVKVlfKEovUHhEWmBSOX1Kd1BqTVQ3KFA1OXp6P29rVlBDYykleGZwLnwhdipedWxCUno4XUU8YTo0bUtYbCRQNjpLUn1CSmo3NGMwJWIme2VtUU9NPlRQI0MqVGQpTz1TI2tkTCRL''@;'; put 'put ''WkRjbV1mdVlkczpQYHh4eHp5W3taO3dQN0ZZYzpuIWg/PShNcTszTTQzYm1zOVo8US5FRjtlQ24rbl1obj51NEBuV3lYcUdFcl5QPG12cGMzND9URl51WVY1cChsO2glXWdHTjw9VDF6JHtKTiRfPihzNmt9RH5mVWx7Y1FBdnZAfHhXJT1PeUt3YWdvaURAc2BndVJWMUhFLjJ4bW58bC54eS8i''@;'; put 'put ''Ok9EYGZ7TkM5UikjeSsrKUFpczNMdytdPkVaITU0OUklXU0hT2ErQnhXKV18LHRuP3hoTDlndUp3PV8mP1VfTE5eSGxMS2whbElsXW9dKDhJe1BnU25Wbj57ciplYDt8Z3ZmPF85Xmk3PS5sTUNva35tYnNWO1UvPz9VaU9qekNwdyJoKVhWJldIQHJnb19DaD0uNjc0YERJc1Y3XjUkamErY3ZC''@;'; put 'put ''ezJyUi4oKnBAOzB6YVU3VWVSZ3FfPnBEUSZkYEJWJCkjRyZLe0BXSCt5IltickdWX2lzRyVKclBSV2lDO0BbOV94PER8VjtefCw7eUB0WHx2QCZzbF9Sa2JXeSRxflVXcENGRVBAam45bWNzWVBieilJKUZZPFkvVko2Um9JZVM0TksybXt3YEFJbyh4PXZobzR+UVBLMXMyfklsK3VXfEVMKDsp''@;'; put 'put ''S2N0TSlRRyk6ekhvMTpNbVhNVE00emZTKXNZTGFeYEgmWSRuO2t1UDxbVDc6dFIxaWE3TGZCPVB1LmhlWTREO0l7QmNvQzprJDl8R3YuZ1BIZyl6WVFuSHMmejBkfE5tIVI2VVhgSHFBSmVwVHFpUjdZcWNnLm0/dGxaMyVhWHtPVCZVLEI5WnlFVnhWfUxRUFJkbnZGY1A7fWFTPjx+aUd+JCFV''@;'; put 'put ''KHloSU9MR2hNR2U8Vk5OXzhycFYsO2M/Kl5GTTxKfmRCKXAsREtJZTgrYWpSaltaYnJAeUV+cyZWR15hW3MzfCUkMHs2OG48e1tLQEElU1JbdU8hX1ZPQ3tkdnYrdmtEMnosck89QXQkcDNzKUA0TyUmfi9mTDkjZT1pbz4/XX51P3JqPmwyKm1nb0JDNFpBJXdjIlYse3ZnSTNtPUNmOXRVQkoy''@;'; put 'put ''YiF+UG8oUD5xZShTJH0xIU4mUSh+ZjtIOyRaMHB2VmldSEp1TURnO3N2QXxFd1YoSjs3KEtCM35qUTpDJVJxc15+VF9zfWhAREM/bW8+Y2BUYWNOSnpwV2RkKGh0RWN7REQ2TmRPcnooZHJSJW5vMU9AbVJ3Wyp6UCMjeyFvfHdWbWNaJmpNJEdGL1h6Vl9lUlspXlY7czVOXzxHJVtURT5OdztW''@;'; put 'put ''THh0UT1OOTo2MCw3Tjg/L1hDYj5ISUd3V3xjQV8yMjR+VHtPRH5yMDY8XVR+LHR9UXpbZi4yfUhuLikwRzc6c3pMNC91fUEmJl9SKyNUWG5fMVBCV2gxM2RlemQ8WlQ/bFMhI2tdPjI+fTdSSWQ8N2x6RjYhIT9tfmxgZzpSdmZeLEkrdmw0aU5BcyUwNGIzdmFZZE9TTissflgvRkN3aEp1Q35b''@;'; put 'put ''aiEiR3dIPmpaenY9dlhEZXxMfGdjY3ZzKGV6d2l9dVV2QjFvdl4/YlEuQCRaR3pFRUN4W2doVClhWXQuOXxyfS55JStpNCg9bS5zSTFBZXN8SmkwQ1FTI2BHfGJ3flBQMFFWMSssJDB1TF45YSsuJjNSNXtwdnJSTn5hSXpKcHRxMStRQytGNTxuKzddUUpwJTE7OmJRO0E5WU47fjN8SzVUZkw+''@;'; put 'put ''RzA4biFKZjNgZEA+YVAqfXFAZn0zSTchIyVmYUE/aFBRbGJOLHJ7OlBTfV5Zc18lQDJMSWt3NSlbeklTWjhaMy9+cj9YUzJ0THRlUFZkbWFERmFqe0JtVXYlby9TW1pWenRNLzV6IXRCQzElVUBLbzAxeC9hZzdiOnxuUGtNXkcyYXo+Vl4xcVB1Pil8dGM4KzZXP04oI0xMXzFLRUAxaSFoQGJx''@;'; put 'put ''S2drIVohRG8qTzlQdngleFlgJkkwK1p6LGJFRF9aJlowQ2xEPjFjbj4wMFF5U01fTzkvPXY8U1JCPU59LDNzfldbZ15jQ3xJWEF1Q1Y+cVV7WTYlYX56NlBbaVI/NyFXY0FXdFBmYDZldltFJFgzIyRlWl1TYSVqbklxai9oYUBiIzRhREQ/PXxGSl1DdWlkYSxfTjRQPCtyQWFEU09LMFk1ckNC''@;'; put 'put ''YXpxYVZ7YDxJQCVpdVZaPjBwTkVmTSlrNTtOL21RMXN0cU0kU3Q8QykocGNecFQjSjVlWXxle0xMQ0FgW2leK0AqVFtUI0gkdzRWekp4K0xmakV2ZH14LCxCMV1ueEw8Qn5ZUio4JjJuclpXKVJlcCkjSS48RT1kITtkfDZYPGhiZkkmJGJUOXRwVF1WVChGV2xmKHdLdnMuRGMzfTBQLk1+M2RG''@;'; put 'put ''WXIyWUh5YU11Ly4kUzEpOGdAKTArX3VCQGAzTlMkcFsxdVZOaHZ1cXpyTEZTMERJb0R9dFd2cVE+RCp2ZzpBNFVacEA/eFg0RSoyU3ckVVg8Nnk/KFEodTRHbnk+e1V9OyprRzBVcl9+Im96IW8pTShhaiMvUzlqW1ZkRSxGMiNxYFZIPFl8UToqXXopWT1QS2phZkRfVCtGKzNAZldPKHtNRTVo''@;'; put 'put ''YzQ5ZS5PNl14LzclVixvP3RSdS9Ve3FAQ3JRYEtzfVhpYnBMQ0x7XipgWT5uO3d4ZV52VFhrKztOc2BTcXUoYUtuWCleeWZobFMsTCJQWjxbZmo5ZCEzW2kuZExQMS9tLz9mV0d2cEBKNF0kWGoyKUJtfj5yP0pmNy4oUThMRWgsXjo8bU4uNVV1Y3FMdkc9Nkk8Oy9eX1syYkIiRiU2TE5veXQm''@;'; put 'put ''Y3lZNkxHdiN8Y0w7Skc5JDhRekhLfSF6W19WW3s7cGRhQyVGL2AwUUleJklScVVxYlJLQlRQdSU8YmVpTD9tXlI0bWBaaW1iMXV7Okg7NyMoaj9gWHFmayJtSmFCO21PRWE+RjF2N0VRbEZYNVthS1suSj5HajttP2pHOVgxZ3RWNVhAcDA6NEolaFBbbWReU0RgSDdTUktYJDgrVSFHXz14OD98''@;'; put 'put ''RFMldUVDP2F0dWlAWWtkeyRqU2tVX083Jld8K34vWTI0eTsodHR2Q342PlI3Kz1SJHMhV2ZHMzQ3UHV5NVJXS2B+RXJvfU1dfGViUzd3diVEZmh5LzB3ZlZEbXU+ZTZzXkk1b0AwNyosVitEa3EjRGg/NUtXQDhlRz0qZ2NWOWcwK3NZcU59L0Z6KFNbQE1naDd5WGNWank4SGNDaUZCVlZxUFtF''@;'; put 'put ''NWtwX2d3YlgxPkAza25bI09rLns7Rm54Jkc0dV1TXV5lZz4ySmQqZ3BJQH5wIT5VK0hyV3t6QWJtM2RFaHxrKWF4SVQyezc6Xlo+WiVdemE2VklmeyQrK2kwOEo0VG4kT2YjeyIvM1BoTHRzW3VEdmRhU2dseHRHdmpISVJPOSs8PjQ1JlguUzM6JGRSSXg/Jn1LU3VMfmw0Vi5vblohcjFVYDxD''@;'; put 'put ''RGZMW1l9KEsufD5eVCgoTDl7WEBgZVJ6a0dzJl5eUTEqVmE7VH1GJUhWLjFPZzMhPi8yJEYxNE8mcV1DWm8zeklbIX5xQ3xGNypWfEEwPWBDI35iPy82WFRmPk9WNyVHIX0xV1J4NSlpIy9DfWA8aT1zeyFHRFJKUSRMODVRdi8zVypROjsqIkk0NTVCQ1h8XXtDPlR8JF1wRjo+TFVALjIifDls''@;'; put 'put ''LjBANE5wdUNgTVB4W2JJPEZKUzVxYnwvMjgoQUJnPjRjKy48JklEMFJ4fHFMT0xwVkpTdD5WfEIsXnxsNGkkJmZpKVo0TG5aWFVbb2sjX25hWjFiUF9SV3E/PmsxfillWFIoW2hERUxgL0FET0EpV1goUTpVbWNfc2BCakUlXz9pWjFCTn5DV30jaz1zclBrUml8eShlWGlWYzQpUGV+PkNVTD0v''@;'; put 'put ''ZkVVMlNgN0tCN3NeKypaRmo2U2tYcnQ+IyxoP10qTXd0T0QsKVpOX3xhbTV9YmovN0VUPiRrfEY6QHQ2bCghR0sjNz5MeltxQm5tI2VXSlMlfDFrQzUkUkMrTldERTghSHVKU2NxXT1GMmcmVHwiTkN+QjJCMFtge18qUVR3QT0/bl1LJWtnWF9WZCpCXT8uRmQ5KmsudUA9aTVUOjttWHYyYWAj''@;'; put 'put ''bHc6QnwqelcjO11zTkQvSEw6eUluWDkqMkVzIy9DI09uLiJaInt9KGBOJDNCanNdKkxKPGUhRzMqdWhiQmVET2A/aTlhaDF9MUsmUCZlTngvUHN3VGY8UWxaRiksU2ZwJnpdYEx2fEZnWjFVKXR1TH4qJFVMJF8uSGdHTFs1NEhoSDB1alNxRGk8c31Za1J0fGN9Qz4vKm5CbC5ve1Z0VSg2PkE8''@;'; put 'put ''KitMX2JbRC5mfnh1SyNZcUA+P3N5Ikh3fD41KlhjKEdvYHhRPWozX2UvUVd1cHZBX3xrWlJ4U34leWNJQHhkWi8yfV5DNUY0bjMpSn1yJGJNUV4sdFdyTSl9InJwTzc+fVZYY3cpN2tpNnlmIi5HNnI8bCZ2UH11RmFLN0FkVj5edUsjKCY0TkIwJWBaOiZRVH0hV3FobUBYKWYmZDBtOyxUbC9f''@;'; put 'put ''V31LI05qdEJIQnxCZ35iKy5NOSxsXzBsdSFxazNoMVVeU3YmfiJ5LmlQWGwwU2tmcj1oPnNKVmwhSmYpZkpTbXFVekVjJT1SInVzKjRud2B8NEV2Ok5bbHlpXyFoaXlTN3dUW3U5dXZ8QTI9UUhYTCZCMCFgLGwmUVJ1OXVmIS8qQk1UPlhQfEZhYVpjU2tjcjgodlQzPEhZV1lJfXsvZUJocXpJ''@;'; put 'put ''X0UvNUhPL3ZkUjdTMzR7M0YxWGdlJm1NREV+YDpWQWEpfHpeOjlNbmwwQWEsfH51c3YhUiRUfnlEYzUsTFFdVlRTRGtQLzl4QjpTPngwLCpDY2AsaVhIV15TNVNXKH5KY21afU1JWWwsPmBhImJASlkvQ0c/enBvdkBAfW0vQWEucXdMSEwqM2RTI3VgfTRyYUFeMzExQyNfWCkuV0Q+Lml1WWBR''@;'; put 'put ''aENNQTBuYDJvXURNez9PRT51QE1jYCh+S1Z8fWpEJkl6YXhBTy9AOnBFY3QsekU8VGcwbVovQzRxUnUpUlZfZExgIWF8M09DMHpgbTVIRUZgemlEJl98Yy9BQkh+O2BBR2NzX3FJWEJhPiYzUGppeX5dcXFMTEx0fmI0JEVRR1AofV1XVFRfTzlIPHZTRXArKXhDN3o8SjhxOEg6cSZjcyVIQzt5''@;'; put 'put ''Oyh+SWQ/Z0NPIntCPnl3UVFBX0VsKmxjPXRNSDIyWnh1dVJ0eSJ4dDR8eWJ6VGtlNiZ+P1YqYmc4blBaXV15OGAoLCZkcC9nJCU1b0FaUGkxYXtFQHFGKlVFcXFaSVc/TlB2KGwjLERpY2tIcnRvTzU/cmIhdU4wSj14bXBHWlJwYkFEbEU5KUVFQmkxazdYQEIua3E8PG8hZ0o4RWU0TjtVMzx6''@;'; put 'put ''Z205JXxBZSYlQWVgYW1ZR1tZdU17NE01TlpMNT84PmtXUEhJP2BsKl8kSjE/Rmwlbnk4djJUdlVUX0okQ29vRUV3KChIZzZGQlMiJUEzWEcjK08yT2xETGFRd1Axaz1uW1VyRDJCN2dRTHNWakZKL0woJDx9RCxFaWZHLChIRHtDMG58OVZ1UFJyWCY1ODdrLnBbci91Sn0wcEkpNEk+JGZ4WzBF''@;'; put 'put ''SnpLRWd9cDBucnJ3LmRDUU9KLnNNaC4rO1ZjbS5kWmJWVTJfTUZmfUFZJm1xK1VhIyI2Q0NfPiE7enM9VWFCMiUuclRBa19HI2x2NltqKSFQRyZ5I3RObTQ0dkQ9WEVIfChAIU83O1NUY1BAKyx8ajppZU0qQkt8amhQRyYmbWp7UTppZU1ucipXVkUmV3xeSU8/O2kmU19lYDZzaWgiJGo0PUpx''@;'; put 'put ''TV1oajRsaD80Z1R2dFdKeCgmRzhqIjl2RG5qVXZxQzJZVmszX0prXlEiIlVxenZrVHthYElOditoTFJqSDo+TmFZS25QWC5OemF0aXhleCQkUl4kMnY4QStyKVQ/Okc3TCsweTpjbz9GfH11LnI9RkouSCFKS0gldiJMIW13RWFGbmoibil1IlRsbT89Y1V2VHZOcjRIa1s9Znl+TU9ud146KWV3''@;'; put 'put ''IiNbSm43WHQiVF0jfj8vL0pUIj9gKkIuX1t1Lk9kXTc0anxQQHE5fjN+V3xVPz93c0o0eVc7MVE5cCEsPXk3PGRfVTEhTHU/YkVeT044LDNJfj8jS05lSyhgOV5fdlhANEg3fWtCR0dZbT1+X3liWGA8WiM9Yz8yd19HRGVmPElxfWgwWUhdUlE0aH5AIiF+aGtRWC4jRzk1QCsjKGBmR0JAd3Rk''@;'; put 'put ''XTRvRmdxbihmNVVwcCxQTD4qRTJSYV5NP3lpRG1dYk59PzFgblErfSlxJmt1S1ZlYkBSU3BOP0lTZHFxRXlXNGg+K2x4TFIkb3RlUilgZD1paSx5NytKJkMjWHVHPzEwdUZWMiU1KnlKW0daeThxOERgYDhsP3VDSmZHPUBXYGUmcCRkazp6IjJnYi9fTl1uLEdtQGpzJFBmLj5+KDM4UywyTjpX''@;'; put 'put ''V1IvTnFOMVVlQ1YuIz9Uej5UU2RvIjFOP3R6SX5aQkJ2YTVnI2JiekdmQjVRKW9pT2NSSD5jQkBCWiw9dXUiU2hBXS8pV2J3K0QsRnF3QSR1MiN4Yz0idy8wWlJRe3B0bTBWWUI8Ukg5Vn1nPyljP3ZbQEw4d2xnfDlmVGMmQjRaQzxaQjNTe3IzXUBtUXlkQlZoflZsIzd5Nk9sLjxrdWddU2dG''@;'; put 'put ''UkokdVB6X1FWKzh5Km42K1NQTT9MSisjOSpSREVKTkUyPVQ8X2lELklURUtOXmwlV1o9WEh6OyNQWj12bil7dzFVLDVvQjVIOSFsLGZ2R31SbGI7XiFNRXAkI3x4IT8wSyVSZUxLbiJBZXFAdmU6ZE1qYVt5eCspYyNfaihgKmk+NFJ8fERLJEBVJU0mODt4MmFNa098NiFwJEloXjFoSXoyVlNx''@;'; put 'put ''MWwpRXs+Ny49JWtvZyluOmMmJnZlREdJNGtRYX4pXVNgRTlRdTxyUVFNKX1bcF1pK2ZrRWdaOTpCYjBsckY4ejVyYkYpe1k8Y2lOYHIjXmtZK09bTW1ET2hqdmhNMDpmTE0hQGlvPGJ2WVN6N2NtQ0JSa01TPVJaXiwyanVTZFI5P0ZkTEk0QyhJblIjRHNQQHc+azNmfFVAKlZmUkxPT0ZFZz5H''@;'; put 'put ''c0BTUSFAbng0QTduNEteRGQyRlVvWFdhWSp9R3piJiZ5PyxTY2JdVCYmenNwSGJKdjxDYzhLOkkxNUcxVWB8Z19INyJiKSombzJMMTN+K3lIMDIydzJ0NldVM0FzLG5YXn5fN3RxTDV5TDA2V2csR0VOb3J+YkxjPUBPKWJDeX48OEZYQEBjfSE7d3ZaZWQ5OFM2Wi9zUWZHQiFkM1J0MU1RbipM''@;'; put 'put ''bzw8OStDTXlhTChiV0JmITpMdWtiaVNAcEI4cX0veUJCWGtvI2xRNCw8c109amA3eXpkbUdkcmN1YzEjcUF6UXhENjNTMjM9Izx9JHpQQmtiXXwwZDRqSiNIP3pqS24hcXNYVU9WLiRDV3RwXl8vK0FyJW4iNHlqRHcsI0J4IjAvRXlVTCtCM0EzU2wiNE1nT3h7ZWZFUTs4em4wI2RMUk9LR0gw''@;'; put 'put ''OThmfUp4V05qUXoiLk87Tiw4dHB6bFY7Rmg1akdJW2lXLiFlVixAX1MwcDNucjpDS34+b307elJRUl82eT89emora3tMJTJIT0MoSlphI1BQazYlJF5qKi5WYFR2cTdMXmtZNk9ReGl4bVJjLjhLVmAxQ1szcGNUUzFGbCwpMG9VVns+WyQ7ViFRanU0a2lzPDRFREYjU0NVbHJacm1lKilVUzlF''@;'; put 'put ''QENkJWFwSkhHanlCKVBFK1A0MkN6RXVCTGo5SThDXW5ib29jIjQ7ak0ycE9bL1VaKDppTWBMPEssTnYyS0MjPGtVb15jN2BOMnZoSnpKNSMqVktKU1V6aiIzSzR7VERGZW05KDg9WU13RGhhWkB7OU5PV248TUdReGYqTGpHSFozRjxyXzE0QDR3PjhFWHBTblNdUT4rfVk5UGVtWmpnP2s2b2pR''@;'; put 'put ''QXdLVDdyZjUrTyNhQ2JeTm9gTF4oMC5gYUo9VkUkbkZvdjUpPSFwPFpjYk1CcT4mZXVQY0kxTT8qM0hab0w/Vi85NXMpYmk6W1dDQ0xgWSFkXXt+Zyw4dzE3Wz9rJVEkZCx9JXtWajNabVh4eTlkYERzemFqdExfWXcvRilaVFVKJXQ7O29RdGJQVENLbUwpKXdgeGk8ZDQoZGgqfSlFKSg/VixV''@;'; put 'put ''WVJwdWM2eFM/ODVXTjxOOENxcG0+bUA2KTRRZzJGVlt1Zklvb2dRZm5KcyFaXlVpL2NCO3VyMiU0N0YoPzE6cVRPM2I/RVMqd0xAKy8zMlssfXMpOzEuW3s+bE9ZYkZHcz0xRkdTcFRvdXZ4V3c6aUMibVguRmcmIVVpK2lRKyFYLn5VTWdlSkdxQz1XaX50OztBOktVLzo7P0d1c0lUeD0vJEJR''@;'; put 'put ''aUJ5X2Q2by8xSHU4TlRqJUJNSFVVdXVuUShOflVrTlQsSFN7QHcoYDF5OFBYQy9lK30hW0JofUpnTlsvTz5vTWNaJU4iP1ZOenkoRik+JDJBUWtpb01PRWd3Typ4S0J2cHFFRSt9Sld5dEEsQkd3b118NSN2VUlWbk1GQ1RgMSszOW5lNXooXmFrd2I2RDJzal4kYUc2OCtQM1sjOUF6TH1NJGBy''@;'; put 'put ''KGxeRzhIYH53RUI+TXFTZGI2W0lbViVfPHhwLksjPnVfdTZtVnMsKndRJkYjMUgjemouT2pkK3pwPXxtIXFSUiRVInp0VCNgPURTQi5lWF9bRS8wQU1sUiRnRytSIXZKMzEiWysqN3Q3SExCQ0UlREgzZXlvS2xHSntjLzkuPEF4OXh2ME8sOFdtKGovKjNFe3Yjb3tNaCxwU2xSYW56e2MyVnd4''@;'; put 'put ''TXZ6cCYpOk5XNUpvfG82N198b0N0eHMwKGo0QDxrfTM4Xld2ODhRJXcsVmBRSm5aRlElfHxYakZVTiZOK2hldSJTQ2VXVVE0Q303XTFsUzxfP0lCYzFha2FeT3RAK3NaektuR0JRYGNPZHZldGB0P1hQXVNyb31ISj1MQ0Z2UD5fRD8qPGBjbFRYRShhSzlONTRealA8en5Ga1VVLGAxUmptL2BY''@;'; put 'put ''M3BKP002OzliWF5iSncjUTBpQm0sc29pV0h4WXBZWkVvTn5bU00zTSEuJnJvdShbVilFWCVhKEZIaiYoPFdBTUI5Y1Fidj5TNF9uZ0g1Tk18PjRLSGJ5eTNpUVApOjM2WUpJPGBPcisqY01VTHdMOCZPMi4+TlFqYERwbntqdlNuczN3ImBsY29vVTI5eUhNW25ZNm1sdk14UTYyfXchMXxhSilA''@;'; put 'put ''MiZUSitmJjBdL1RIVzMoLl5XIUY5fXh9OVBSVTh7KiEhL2t7SjNBVnBbRTZkWCg9eDAlUjVrKX5oalptLDZuTjN2P1g5cmJ8OSMjeSFGV20rIkpTKytOazdMNlRUMVZRU0UxaStROF84L3FOVF5UcVN+PWtKe0A0aXBCdCJQZXR5TVZPJkQrdDhFYUpHfFhbbE01cmhETlskQmZebn1PMiF8aS55''@;'; put 'put ''bmZkWH09eUd8WTAxNG1qWS8/PUNCMlt3Ok8iWlZCVyVRLi84IXlqW2p1eHtsWF9SI0ZJNzlpRzUhS35dc2h3KWJTcm4ySTlGSUVoRU9UIkZvblZSbW17PH01W01EdCtDNGQiSUwsZDMwOFdxLFQ3dj5YPyphK19rYEJHKk8mamF4KGZIKGcxN3xDVWdSPyRRYjAuWjJrNk0vV3ZUeC5UJl9ESFss''@;'; put 'put ''TzNbd28/SmNkN3FBWFtsSFBAQ0BqV2k3UERjIyEyO3QvUmNUd2h2TzFLdiwufiNJKTg1amV2PUFJcTM2NC5jWC9URyE7fVJ0Sjw8cmdbKVFIcDxzPyR5PXVPTl5TKGR4ZTE1SitMeTZyfVcpXV4xc1BJeGohSzg8SSpFbDA4RVQjaVVANmI/SXF9IVgqNHd4Nk5oa0J0U1JybTQ/NE4pMnlPUkxQ''@;'; put 'put ''RkMwby9Ac1k1dHJeQyNUP1h3O29iJXIxT1tlU3pKb09CVTRxfSYvJEw0YkhMM1dBY1JxVlQ7OVhFNkRCJTdUbnhBeHN2UHVuJWJdbFhRKT9rcWVaYil4WGZYbDpfPWhkVHxsaj5tXVQpbzVjOG9ganN5TDhDVFhTdHFJRWB0MyZ2STpuQi5beiYsPElRW0opSU8zNmwzRzRwISxdck9vTFFWOE1j''@;'; put 'put ''M01AZEhsdFFNSG9Tdz9DKlBDXio3LzgifGtEUWI2XSw8RXJNVmFbd1c/LFsmWVRPZUdgbUZNc1MhT0piWmRdJWR8Sm1gdlRYWEhYT3ZoeFhoIjVDUFY4TG9DekpQdSZYWmRLaVF6bVBMVTcuSkUkPC8xJVtTa300eF9eaS9XaHE1Umk6ZUElNTlKeihWOS9LengqOSloLCpbLEttODNkZnIsVXJz''@;'; put 'put ''R3g/PE43LEpvMFZoMTRDUHB0cWtdcXF4RmVAZTBbTn1sOEEoYUE6I2xlMSRrV1tuNDRvOXZdVypZe3lZJXFxP3wkVXNhQ1RPXSQjN09CNDh+djk4Tm5ZOF9dQlQrRnhUPmNXOCZvYCQyPFluY1drSXwkLEZ7VTl8VDs/cU1yMn00Z0ElaTZMNiZaKGBUJj11WzkjUUpaYEcsIi5MPl1zRkVgYkNb''@;'; put 'put ''Mz8vVlgzVGloVlpeYGtuQnwvWVBka19hcGg/MyQkMT1LeUJhY28mVFZke05ed0UjfTp5dl1+Li5sO2NPTDZjNDk2LmUzSFVIb2l0a0VbaGlhRW5fbkpQbSZIPilffSJXVGhvL2VtdjRQcF9EeFZFXT4mJSkuK2xLOHw1czNtY1VRYko9TjRwV2dkU2R7Pyw4d0M8SzlSaD4xOCU+ZXxAKndsOHFg''@;'; put 'put ''fihUOyVxYWguayYjWmxUMWEsMjl4LEM7LmVtfEYjU2UhcUZ3ZHtidm1jaVBHO1BoWT9bdVY7OHErZDRdZSZ3Ty9TaTRdbTZbXkRSYyt1W3J4Kk48UW5bYDI2L29VMGBORztPaFE/cG0uZWF8P0JLUGQmYk5GZW96Z1F4dCE1MUNJVS5lY2pDcHdKLHJeRlkyT315aUB3U2VSOVkrRUJNanV0VkV0''@;'; put 'put ''RmQuLDpraDc+cV5uOE5gOXw0XWEmKSY5LjljJDlvKyNFLmVSQEtbVTt4cW5xdXImcGUzPj9JYDk7PkwuYH1KLj9LSSYjSWZIZUdgdm03cDksJT48Ol8jZFFoems6NSVaYT1lTkA5LlRlbntFOEFfaT5tZnowTWhYeUQ4MDlFK0Fgb209Klt1SDhBX3FXWW9KRywoRCxfUGI+SlBYJkhKRmVMaFc9''@;'; put 'put ''JHgsZTw/RShGeElRWkw6P0BNOnNTPS5MUUBzPUMqTkE6I0toYHc4JXo5aipTYixlOD8uM2ZEa359OWxHckksKHFjKUtpclY7JCYuezB6azgsX2QzRmVKaH12YSw8ZWhDclZfPjh0RTVHeEU9YH04cSZhcXZVUU5tYSNJaEt7JCR9Ti8vdkZHO0loNHZhLE9KSzhmaFl2bDI8ZWM/YWhgQmtPW3Va''@;'; put 'put ''YVZrY3BZZWR1N0czbE8mX0NkcnVGQzg3NFZMIU84NT1LenwhQyYmJi9MK3VCTFprYypCWWZ8XjNvfkwzWHlDOHlDO1RJWV0xUVtuWHA1L1l7Yk5gaEM4OWVyOiFKY3JPRjNsTiZVQ2NwR2h7dGwyOkNEaiNxT3B4OVJeaUprOHBfSStLOGRobXRwSXooM19yd0g/SDxAQm44bV9QQlQ7NSZQWzZq''@;'; put 'put ''WXtERlV+SFZCZ1VyMWdjcD9lPHJVXlNiVjtCOFJiYHluKDt8VmgsP0hYNFtHKyFzWVg8JT5FVEs+PiNMK31JfTI7OStmJGA7R2NHIyJpYmV9eGgrdnBGVmdXPHE3UDBUR0BXcjc0IV03OFYhdChlXytzSX5he0c7dCs1eUc3VmV8On19ZV5uVEFWRiEqQ3pxSzt1fEhlcXAuN0c3TnIsVVtINzY2''@;'; put 'put ''bztbPHwoKiVUZ2V+S3xVbUVzaUZXTH1sXXU3ODVUeFI3MzQ3JUZhRjddM0hWaV9NNHd+Rn1PbH5VTV1wNm8xZWcjaFhXQ34/TSpzQDgxdiE4Qjt5RzpNaFVmKV5tTD8zL30wbTIvJS4rPkk3NitrW1tATH5zNj51fn58PlsiPzNZJkh5L0hZPD1BRF1YXkU9UUtlSGl1OkBnVyx7bipgU2Y6VnNx''@;'; put 'put ''KUhuOn14cTdWQ1ZjfTVMNn1UJm9VPF53aCVxRnVQbnZ5PXE5e296UjdFXk9DW3xiZnQ2Vl1bKHF+KitbaXk1eWhHNHtWREEjUEVVfi9iLi99Xmh+UUlWcTNyKkw2L1smRHNvUUw+N2cofUh5SSJJYDpVOiY3eWNlaGxQJWNVJjNUcGA+TnI7WGsqNjcuN089RVhralZgTnlFP35YR3U9YSFyWTdv''@;'; put 'put ''KEA0b2I/Mlt2SWJEK09lem5kODllQkFAK3EwKT90W0FONl5reFVSdChjX1FXVHwrP3x3cVBxOFE0UVcmfXpjI34/cz4zaH5rfGB9dz8idmRtLkZ0Vy4pSUYhVF47MWgvcyF9aH1jP0t2SEk3NT45STRmflF+M19mKU9Ee0w3VH1+OHMxc2F8Rz9OdVRFcFBIRFZMeHRQR3w7eCIjQXUoQH1MflV9''@;'; put 'put ''fmFrZVZhN1hpJU5IK303aXVOQENzfj58dHVfNzc6RGU/Z2kyNXRqMlI9UmJkJS5HLnM+fGZrMk5+P2s+byVLfHNzPXxiazJOfj9qe3xDKz9OQlBWXlBgVUM7VTFNP25ySVBRO1lkXmVmKWVlcVt3Pk8vQGBha2dGbWNLSUM4WyZsT10iSU9HK2VzJiw3Zzh+NTtjJTM0ZEN9djNFdzRdRF5FN0th''@;'; put 'put ''VFVRQUtiWl5Rdmx2L0RXIWxNcm1geWI7KCwyQ25QWzEyfjBtMnsoYXsjT3s7XWVLOzx5KiZYJFNfRzlZbDc1eWxuK3JXNT5wfip8fWpvcyl8XkB3MSloMXI6OW4obnNwZmR3Ynx4NlguWC8hYlgvY2g2W1g4LD43UWhGX1d4IkF9NUZbfnE0Z2QoM3xXI1FffGREJm9XLzFPNTlzNFNQQTRzNEtQ''@;'; put 'put ''NTkmLi4qY0Jpc15RTEpfX1l0JjlWeClCKHIvaFRMOz9veFVuVnhFQil9bVIzKnJ8eihQTDUqM0lgS2h4dkFpc0BRdChyfCZSTTIocmtSSSZyfCtpPFFzfCNSNWZpc254dHspeitpRDhdKDd5LFdXeGV4SyZaaFNiMiR2fEJoKCFCQz4udFk8ejo1MFYhRF5UI0cvX21Db0M3KC5+b24zTjRaLnFU''@;'; put 'put ''QjQyb01eQFgrTmpzYG9XLkRdK3g7ezNbYTx6RlFIciFRMWs9IzVVJjNQRH0+QHRvdG5BVkVgfmFTLHp+OFJyQCJAVkw8eVBbaC5zekgsen1QXXFUUmNiWyNsW28oKGhvYE88NCppNEokXjU/fC86aGZHOHFbbV9eOXpzbF9fXTIoSnQ6Q2E0ciI3a1U2eld9VnRQNGA3Z19dbjQ2OTkuX2pCRFMi''@;'; put 'put ''JmFEWiEyU3xkLDdNJEFqPUxEY21sM2orVyhAVGwubnlHciYsL1ZhfjUpOGkoJnUqe3tvQzh2L0M7cjxidlFAUk0pSDVaOCwhbVdIPGlmPSxTeiYmdTI7Jn40RmNVPCZpUnxbVnBqJGx9Li9AV1F8PnxCX3Vkd3QsLGZJIlNZZ05UTyw2d0U4O2o7UFAqeVIzLzBjYjwhelsxPCJoXSpjbTZObWYw''@;'; put 'put ''YG5QVmZOc14raDtkVitEOV0/ZHVmYS5WNSo3Lm1AaFRhKENSQkg6aW8mKkJvaHZBSGxldHphNTArJklxelFvYDBGTkBaMVVSPGFOeCQ8KzghMG1QIWoyU21HOlgwWiN6L1J6OFEzcU9QfjhWIyltayM0LGd2PyV+LHwlcDlIZDlQRUswLFIlblR0SnJHNzoyY1NaMyswUSYrWjp2SigrfmVPY3sx''@;'; put 'put ''X2EqZG1IZ3ZlcDM+PCUuSU9NQF1lM1Z9UStqTSJVK1VrX048aitzZzwlSWBbLjpzZXpsV2hBMypzIWcibDg4PXF2TWNKLCJ7PkxWI3d4VWo6czF0PkxOQFNMOHMvOXROckJNPm48a3xrPGVeUHw7VXc0V0I6P218OHBVWD5MZj1RaGt2Pm1sfig1PW12aVcoYzwhM0teO1Vve08vO3M9SitVPUBn''@;'; put 'put ''bj1oMiZoLlcqI11eZ0NfRnwkVlM7cFljXmoxVldTO0VucXNaI1locWc7VVghKT1UWyFlPSE2PDlRbFJ7Z2UvVXM5NSk9MUJfbTdwSkVuJSpfKnk9QG1aKHVJXzhbSlRfUT89ZWFMKFghO2drdkx2KHVJX0xaMVR4JitFXnlBYHIrIkNbSW1gQTZtM3A0Onk6fHBZU1Y9IV1FZXhbaHdeaDFbJnhe''@;'; put 'put ''cFFUdio5RSRLTH19KDs4JShWa2hydkovJlglPzI8eUZDcWtCe3l0eyUuKnIvVV9LLkpiVm18OSoxJTE8KyozIWdWbk9OQ118cVpHYnpMUiM1PkFEN0tZfXVrbSh6IVZaK0MiSy9VQCZtM14sZ25icHIhaSw9TjJxPV8iYHIrYy9PLyFqKiI7XSJ7bFczKmxwNSw+MzNdSyQ+TFkjVT1RYG0oYS5V''@;'; put 'put ''XiZYOz9sLnZyLDJaPkQzeVM0XWwrUH0uXlJzS0g6KWhmMlVWOWhmZzJvWzF0Lk9BNk9KcHR9UmByeURJd1pJPF99NjskY0VscSlISlMpSDB0eVFxQytuUj8jfkxTSkkzLy5VRXlnOVhCcWpTXmRSW3xEZ25DaGxqYT4yM2xKYlQ1QGs0SHBqL08uM15nVTt4SihsMntka0IsVFZIYTlidDpZaiM3''@;'; put 'put ''citObHJTLmI8dWU8SlU4R2RmOVAhY2RQKzwjI0NTMm05SWJsZElian1IZk5NYmB6YHZMekBPKUtfTEVWV2JAeV0rOFBYRz5XYGVGYyZ+PH1iYEssVk9YNE9xSzQ8czt9N31ZfFsrZ04oMGNZUm1bV3JSaUpCXUA7QmE2TWBzVCgvfTV9YkA9PnUoN3MzfUJIRy9ec2x+TlFXcSghRSo1d1p8aGhZ''@;'; put 'put ''amF3OkAvQHBqVk9+LjxqSHpKb2srYnFJZS5UR2VhcUs7djFhTC5gQSJHPkomPHB+XXc6ImRvWHFqI2ssM0l4cmcsP3w1aGZRMm5bYFFVOCFnMX1tV0tIKCEjTXB0TyRfK1QvcEI0dWJ8O2hgQil5OVpiTHhOL1cmcmpCay9eRH13UjNHU3BqfVQqb0pPOyM9MEx5YHJCeFQiPHpAP29WZ3R4dDNX''@;'; put 'put ''M3JeKzs7TSUkVyFQTEl7cilIXihxSSIic1B1dWBRYEJVST8sX0VzQVRifGU0KDVGNldJT2xCOFZbMW9CISEpSEheVmlkNHchM3swJWglOjN+QUpUMn4uejllSG9SK3hLc3BKL0lMa351fH0/KXgmbio+dzptV1MoeEJrPiQlWUJOZnIoTylLaCM4QGQmYDEkZz42enU4XV5dQilpeFRvKEEzb2dH''@;'; put 'put ''aD89P1NbWWNbOjlwVldHL01vJFZvdy86dDM9QG9xNCt+eV97eCxMRGFrKGNTY3hHU1k4K0ExWSk8YzpJP28he2pYMDNEX3o8eGFrT20lR2I6OW1WPWZeWjguenpNU19HbkVxPz0/RUZ0Ymd+ezF6bSFWb3dnZm9KR14rIi50VkQ8bFZQZ0hiPXJofFZGNis/XSErVH0rVElidHJbW2UlVFR9Xjw/''@;'; put 'put ''fSVWQlZvRUU+WW00PG5LcFRfN21VPTBtaD5yQEhDSDhMeDg5W3Z0aHBGPkxlQyE3JilgZEIhLCYzJFdiTnI3W316S3wxO14hZmUwJWglSDBHdEoqSlFLYUIxbXI6Q2s+eXJgQ3BqOUMiLjt9R1FYK08+NStXbys6SkZDOndJQ0BXWDZMfmRJX31QQm9RRSxWRU9kSXdycGF8SllgWltJY2VjSV8v''@;'; put 'put ''OF9uVTRafk0/N357VW9CejA6XXskeCpzckZlVWxyKlNUfiZ1X2s+ZGEwbXJyTkc+YWwzLGxbPV0mVmM7I1JuJCM1PGJyQnkmMyQ4Yj5fbFlKU19xcEE8XXhNUUIkOUgrJj1daz5XMHlyS15VWnBqTCspMzdKPGhnVVkmNF5SY0ljWipDIT4yazR0eFsidFB3KTlRKD81JD5iNSpkUllSelhBZlBI''@;'; put 'put ''cCJIRVV0KUheRVNjR0M6JHd3fFl1UCw/UW5+JiI5RnhUdFU9d3RGbjF0ZFMxRGk/KzJDKm93PEp5Vjg5MTIvLkQqOFZsayI/Y05hX1YzZzFwJjBaTDJLYF1RM1FGREVCcX1tX2ExNiYpQikmR3ROUTMsMykkcm4vWGwkX353WVM8LiFYdFZSJkJWPUBLNV1WXWNEPlo/aE1LaGNlO2pyLFZDP30z''@;'; put 'put ''UEYvT3V6RVR+fHZGL1I9LFkqfXQ9Ri9DeTB4d3xsY3w2eTk3RWhxYyJxOi53OHhvcWdPXzZsKWc9MH49QSMkTn5fRiY+eD8yOyh+VStfSnRGamNzSnBfJi9uaGt0c0pRYFRHSm5mczhKVWA9TDQkMFg8SnBgbD8xUXNCXlVBckxpI0N3MFM/ZT5vNG9pcV1wQ19WQUtOQEs6Rnl1JjA0OSxIe1pr''@;'; put 'put ''YWgvZlhdZC8hYjRoN2soVTdfX3osOSEjKncuLCwuR3M3WntyYFtJMWpGOU8+VEh9eEwlOWtIc0oycnAvMz40TFUlInwhSHN7Wlt5QitLa101Zi57Pz8ldkMoZz1efXhlUkUoXmdUdmhTanEjS3I3eTo7O1NVJTkmTFdye2pCVy4ybmd+cV1neDB+V2AmPnZbV1sldkIybz1GczxUPztGeF94LnFk''@;'; put 'put ''QTksdCl+bVpoVWhyTShfWWBoeUtoVHgyYD1HcyhhL3xFbkZbUz8kanNGWT87bHheRTtxcGNkMT88VUZhaD9Bck0rX0xNaXk/aVR4N2BVQip+flg/JHVxbkQ+KVE7P1k4ciM6IT5yM1FGfnE7cVo9S2B7TjFUUyREMGBxUVU0aHYzPTJgfHNSPilCXz5waEZ5ZnNKaH1uL2coOlZoS0J7R0V4JG44''@;'; put 'put ''ZD5MJnA0bVdfP11EXn0xfCY+MS9QUSlLQlglbilyfj1bO3J2KEVXfip9Xl1pNjNnNyQ/OC9LTiZzI21XITU7MDt8aX5vKHU1PTJ1Vld5bj9gW25NOjk8IyhFWX58Q19dOjY0PVQmQl9eLlBuWlJLY0VdcSpxc110aG5BXWYkaUZvTj8kQ30/W1s7SXcoRXp8ejQ7O1hlVFV1fFpHXV09KUx3LH1H''@;'; put 'put ''M0pqJTRiTUN+ZjBwKHY6ci43S2MyfVMuPm81PiZSdmZuOjo2diZRZUxJVmJxTzkqSiw+QmF7S2JRbEluXSU2Rig8O3VEcz4lI25JQH15OjQkRSxiLjQzNTguYDgzXmojYSRfPSI9Yj12emswfi5EXUh9Jk1ORGhFYD15M1Ffa09UQihTRn5TMnE8JXlrWXssPjU5WWFRTjh9S0g1ZjV8fHVWIyVy''@;'; put 'put ''VlckMHxfNUwsfk9WNEYmYFBSVVdESiFEaXs3YFlXLk8uaSFyOkI1eS9GS0pSNEliS2xdZywpPy46U3MhOFgrJE54THd4TipTKnJiSnh0Q0E9PzlROmkuVylIO1lpNHR4fWh9YnAqWClzMnI2UUFpOzglZ3ttOWZYck5ScGxjcUUoLF9FNSksIWB5fjE0KE8iNSg5Sn0sbmZhKGRPbWZkLChQMjNr''@;'; put 'put ''Z3ozSTBOd1QwMWc2TCgvWTA5aCREMk81WWs/fFRQITB0U35HdGY3IkMoenBuQGt9Ji5dM0I3R2JxaEtBYFkzJD1HL2UvVyt1LypXME9kUTt5Sz4pZUp2SGApS251SWh9QFFFRkA+PUs0TVZFVVtGYXRoSWdzVExLWEdvXj9UT31ZV151Mm9EcjN9W007RTN3RG9qcTE6NHlLdEApTk5qQExXdE5W''@;'; put 'put ''RTZ3RyMrRHI/XlZgTSs9TzA/WWRxaUtURS5oIj1GNjE0R2U0U1FDdX5rLyg2UG5qQDdhZU4hZko1fD1ieWc2S1RYUUVmZGZtNywocloiazAuK1ttXztpOkYyY1l1NlBSY2cpMzI3U1REejFxP3A3JU19QnJTbm8veFg6PiJ2MW5OSSRrbXgkKF0xN3xYRnNjKGI3bl5dKTx4eVZbcHlCKkhMc1J0''@;'; put 'put ''MmJOc1IoR2VgaThbZVtmKmNQRlAsb1o7cilbWWddI2hDOVdMc1BJR3psRXAhPnoofCR1IWdRO1RScXY1fUZieDAuK287NDFhcypAZFN9d2k3WCszdUBObVN3bzVdU1tGKDFSTiJwSktAdT49VHhnOj06eHJKSFlKMCYrT01BIzhDeXxOQmdVclp2WnxMI1suX3wmd0h+eyRhRz5qO0crMnFsfTBh''@;'; put 'put ''Rm03Tk9KcVsoZzFuZDB9Oyg5Tl1aTCxNQFdvRzhkWUAoWTQhRmd2TiNncEJjajpKckgoeXY7dSYyTGd3IWQyNXBmIVNBYChHfW4oTk15Q1hAfGAsSSoyOGAxU0VnP19Wb2QrI3EpYz5iUTB9UTcuXX5IeihYLmByalk7Qzt5bnRhZ3M/cHFSdjprNHZJfmFISSZEeW14bmY0PndDKFhdVUFZUzAq''@;'; put 'put ''O2xBY0AocXhNZ1pxY2BLeilnNU85NHVgX3xSJVchTDdhezM2V1Ywe1AzSHpXX3U5W1l3aCp2Q3Z4ND5AUXh3SnpDYyVyeTtXJGxESmJUS11XW3JjN2dZJGZvTDlQREA0P3c0RzRhYV10OXFgUTxNc1ZqP0ROTyhOeGsvQURoYVVISXo/flJsNSRIfUFjdkA/O0x5e296ekY+NS8xeT1HQVU/Pi9U''@;'; put 'put ''QWsrXkZGJF4/WnYkZGpiNGpiZDdbSV8+aWRjR1JXO2hzVSErSFlBNyZtQTIvL3diT3ckUT5aJmtNYXYsezJ9THlxQU0vI0hISzY8JCthO2QyPikxUCxxUSZkL08sLkF6fU90RmE/VW4kYk1ZPSF8bFAsPCIzKn4mOmNmeXc9KDk4SjArI1dCQDBVYmFmKDkvRltoaipCZUA8RT1yVVtuRnB2dkco''@;'; put 'put ''VXQ/flcoaSh0PSpITG1Ubm81TFg/eEpmYEdAaklQNU5EJWpnYCh0cWhHLHkra3N8O185OiZ8WDVleEhhIj1HL3xKdmlPd3pmT3F2WGBBdks3M1UwU0NMLmF4M2gyNm8rI3xLMEpwdmRfej08K0R7KVghcGE6PzM2YVJufHh1Q3haPjA8T1ZLUikvVmJ8KU5yQnNaMlk1RHFhSCg5OEZneGdCczEi''@;'; put 'put ''NFQoKldNMVBLL11eY2BEW0pXJFJHV31fPi42WGBjY2QkJDhyW2l+Vyt7Ym1bb1QsQXMkRElSa0hjIyVvdTV3PCY5Ly5Ta1tWQShCNj1aQnRndV86MU47OTMrNUZBSiMzMzQ1cnQrRSpvYzMoaEl0LFA0dFoiVnRBVT5FRl94aVord1c5PnF4ZiRRJkJZTD86MS5lLEhzXitNNXtNNmwoaHp8b1BN''@;'; put 'put ''cm84Pz01JHd6aEtWVkJoT30jbmR5aC4+RiQ2Xy5IeWxkIj56P2UsdSFLLEt5Wlcpa19jJlp7NU54OmtMcTJnYzt5TzZbRVs7Jktadj9fN2hLZnR7Im9nKysmNm47ZyZRMlZELk8wclVONjhFSy9pX0tkKWpEX2BDQj5idDJ9ZzpAfTpqXzx0VHV3eStfP3wlRSxoOFlUe1BMLD8jbyg7YzMwRTEk''@;'; put 'put ''M0IiZjEzJCEoRCJgUWR+bH1AOihCPGJiSnArc2lafVNNWVhYJkdDe0ZCY19zVig6LkJ8fHI1IllwXllAXnJ3UXpkNVokV2w4dHRfSSJbZkdvaVVXclRWZDxNd08zNFNKKipwXWAsNkwmMEF1bDxDUUFZTkN9TH1yaCFHYT1CeyRDZSpQMz5QUno2bWNvRXg8KjlWM2A0LlEqYDtvTFJaJjQueF1f''@;'; put 'put ''WSFkdUM0PEYqfXRtWV10TjVyfmVFNygxbUIjVzhFInk+UWlCajg/YSksbDh9IXhMSHdJTEtwYkUlcTFbNmJeZWRPK1VodWIwfWlzNnJ5VD58aj9oSXo9TkZ6alQzcEsvciREIVBeOmwvSHYoLC9xdXFyJCU/eUtKRmc2PjMkWVNFSShJXkZWWlhyVWEwTCY9OEcmQEV4IX5lYn1+MSZRb0lEQTtE''@;'; put 'put ''WStKd18lWFhbdHhHbihWPE9MbFg5dyJBeFtoVjtobVl3JCNWQlUyKTxfR01AUkdefkl7NFZXZGozKFF3JFp9REFYT1opJThiZzN3SEA7OFBZMXVhNzpJNk4kMEU+ayVGa3tMK0VLKkReZ3thfCldbl52JUw1SEx8UDBnTCtCYVkmN0Y4YjhdK0ZQdFlQTCVKckphLzFoUVk9YDU4YikyOC5TViNt''@;'; put 'put ''eHlIPyR3d0dZbihjU1B6JFFTV29IL0JwLztFX3J+aSxdQCxkP0FaUl4kNHllKi58YENdeDFaYGZmImVOYk5Ee0s3KTY3MHxoenVZQjR2PzUkJGlqPnwxLjImYHxNUHpxRz5SdTpMYVpmIyw8KV9oLDM5cXREb3pzYjp0ek9LU0pCQ21YamAwXU9SYGs3UG8kY305Pi5HdG01fGxKVV5mMFA9JnZR''@;'; put 'put ''Z3dJOFJkfmFnMlZzeXZTLHB3NSl1TFMoRyomc0cqQSpaaSNyc0QvfXtHOHJ3cjh2Wml5JUEheipXKEh0bCpgJnBAQWxMbCkkcihyLCg4Pk9RZlBddD5mRkJqVlZPaUVlbFsxWEgqSjVEWGJGfCxIe3IzVk96Rl5JV1VtR3tjPVh1bnR4IjpzWD9kdVojYlAsZG1eS0hYb0w4L1smSlV+T2EvP0Nj''@;'; put 'put ''Qyp9NVo3UFpPOCtnT0pDM09TLEQ+RiFfdXNATzFsYm52JVpwSntxcyE2VCs1RzBFKyl9P3lCPX10a1l6QmUqfHJfRkRGNncmRFhza158b2spZkdeLCsoNExfWihRd0leIjpGNz0xQyhyUElMVShOLG1NQEJ+alJGOlc6LyQ4XnVANFphJmkrcG5aSXNTSTE+TX1PYEEicVdlNCRlL1FjK24uND1H''@;'; put 'put ''XXw+RWlIeyphRVtFL0A8TlRQKE4pKSJLQmZXaz8mKz4yQSxqQHNkQ01YTFY8aUFxK2ViclRWOyowY0sqWU83WUZvIktke2BxckJ5ekp0e2FfSExVXzlPKTtDSndxdVJeUGFubUhPQkpwTEFeYzFQaSJPNC9+azQrcSN0MTdbZ09DLnBqS3FJPjEqZUg6d0s/UWYkO15NS3Z2dEhVMDZIcnJSa0k+''@;'; put 'put ''T15hI1NofWdgLmh7e0JNb1JXZEJYdz5neU1YPm5yaSVTOjFnKE0saURwTCVXP3oubSxbKkNoYH1lOVtKaCJ8YXM8TzxrMSNEVUl9MndtXl1OW3haPVYuUnkzbFpoPnRTJjxNTnxMeW14SkJLcjomZ0ljYEQ7SnpYNz1HSH10YkVVaWRWMCxKSHRZMXEiIkNiOkVzb0BoSWJda2VCXSZyd0VMcTQ6''@;'; put 'put ''USV3K0p9OU8oS1NZcms5ejoyPE1ATGt6VzY1LkcrTXhYbHJleEU7JmRqbXVHWWFZQn1TYXFuVENqRG0+aWlzcktCO1Z0QlluOTFdV1tNTHheOnwoSHczbFpoMSkzfjFPP3ZRY0lkTUB7TTRUeUc5MG1mUDcyTGhmYT1RKnUyRX0uOnFPd09hfGgoe1VPKF5pZ00/aXlLY0BkPUVjI2A3S1VAYFk+''@;'; put 'put ''JmwqMjh5XWpVQHVbJlcrTUU5VmtYbkJ3elZ3JWlWRGxiLGFteHBCTH1sN3BVL0B1eFZPaUAqNTQwfWFaQ14mTmpHNWVdKkh7XUhEcXUqdElhZXcha0VFazRqNlhJaj4/RWd9enxTVz4xQjlKXjJhajdfdmg6Tzo+PT94V3w3PFZjfHVyYGsifl9WbnVPKTZCZElZVCk/IVIocjx3SiMldlowKXU+''@;'; put 'put ''ZCU+ZiJCJSsqMnAvY0Y/MUpPXzRmPlRLQzl1T0tZb094K315aVFlc1BIcCZoaiU1aXkuOkdKa3FaTHxXMnFvRzNkJSpxQi5Zfi90RmAwNiE8IlA6eFNOZSZ0ISIxejVMVWJqRTB5V3RoMV1oaFdDdTVFQmo7JHEke1dITnlAQ3BxSUV9XUE4W0pGaXRZI0NDSD9zXz5BTFZ7JU4yNEcpMTJSeCM+''@;'; put 'put ''RURzdzdzR3ZHL0RxcEgsQkNHb2Z7e0ZsTXxrISF8ZzY+aVpNY3dAcCR4WFNdalkyN0Bmc30kVGJfd1ArKUB7KipgK0hzTjZ0XW06PzMoKX58WXlAVHIzc1Usdkc1NSZ4QmlxOD97cjpXaEk4STVFYjM4MD0ydHxJQ1hxMFthS1BBeXZicXshQl1zI05IZU5iWn4ka3lfNF90Yjw+JkA1JDV+eE0h''@;'; put 'put ''NFQjaWloJVRlV2NGTyhsSDx+Yk43eWt8X3U/S2FmbmdMTWpkS1lJR1FReFg+UGZHQ3NzZzRlOyEuOTFaWmo/P18+Y05JbDRdNyQsVV9+aSxYfE1PcE92Ly8ofF1abCtkeTE6fUg+aEl6OEIxZzNLdDcwUXM2ak5NfVtjQj9RNV9lTk8+S1FtWmtrTVZub3xEXSI1TCZ+YjkwfWtBOkkxTVpyLjRX''@;'; put 'put ''X2wwTDlUfWxCdVRwX2NyX1dWKVs7QVprXnY3KCZ5Syt7aD8sXloqc2Y1N3dfMzU1cmYsPyR9dn55OXhkVl8wWXxfOjw9eCFVcXVmKFFmRXdQNDg0ViM2TDhLemJVP3dJbnJlPmQ7M096NnVjZHBqUDBIYn10dzhCSzdCJGRXXUBSUkgyWmpPbFtKYnlgcD5TV0xibi9MdDhoTFIuTEE0XW9TLn1y''@;'; put 'put ''QjhhNjd3TnRLP0koL2ZZakpCOChbeXsmWmBHenJTbyFmSSh8W3o7PUw5aXc1PGspM0E5SiVjVEhmKFF7eUw/RzMrS0d8c0M5fEkjOj49PWY0ckNifVRTayN9MC5+cDgjWTlCR0hPfHp0bygqN0ssQDtve0wwWH0iR2EsQjBHd2x1Zm1VRSxIME1+eFtWV1A5bkdiMmZKWE1Ya2xEQVkrOXRhfjVi''@;'; put 'put ''VmtoYzZ3JVVRXnppTSYwUERwTGRzVCkvaDZTWipOY0lSLC50eCYxPXM5PE1xTCR1YVt3RyZ9dzprdX5Jdl0mMEhoIThdfWwxfFhLXVt7e2FQQ3tNTElgUldCIlBaeVhnR3dtZEJRYDN2Si54KSM2LkpzTXEie2tFe10xL1toUXMvMXkwSSJJbUdbYzRpSnNpLCRpQkl0ZWsuTCwpSkNAQiVMYD1s''@;'; put 'put ''Zj9nVlJbb1RlTXNbZTM8STdPVD1VSzZYNFdhPC8iJlosTyl9Iy9vRTs6UCYkb0wiJGMiVihaM2tjSChXIzojfE16X3x6NG03JVFIPylwLzdpWGlCVyZeTUA7amp0MHR0cSosRUcoSlMzRVhkQFYwZXZ8bTFITTFhVz9efl9hKFUmMHkmcnRwfEspNyQqPFI7ZXlrYGlpcUt+MmNgWnZHcUhaYUEq''@;'; put 'put ''Z1ROTyw2Ik5PKXY+Pk5vTCxnQDVjZU9Cd0p2Rjk+ISpRdD5dPiVIJEo3R1plaWBzfWJWeHxsejwoKjVbYyZgQ1IuXk9hYSRvKUU/NkZ7TEErPUluMCF8O0ZgUC83Y3FtWy5PYWRtPjp8aTlRbH4pOGgpMT05czYsaWpsVHxWNDlmUEw0IWFJWzU1QzVjOVBdZy9yTGkvSlU3dER2U3RxWmlVblIu''@;'; put 'put ''U0AkRSVgTGtCKDZkbk5aNzhEMWVYW1VWMiMwMkNNO35EbW0ucWVNbXFCXV99P3FWNnchUThDQCZxWntVPG59MHdVTiZ8SXhafDU5TVl8Tyk3eTRMdFB7YzVkXipCTS8qIiY8PSE6azxZdS95Z11PUD8xe09LXiZReW9abiQ1fmd+VFN3Kj57Q0lhM2V9OFV6Vm4rZG1PSnJWZFQpLCFIJTgvQVRT''@;'; put 'put ''e25LIUE+TnhuX2VyfHFKNWFtandCSWl4KDR0ZjVxaXA3VF88T0lDUChOeH1aQkthPTlNPF19VSMveUxDekxPJCxyVkEyM0tEQC5CK2VnciJ1fWssIVd3KnpuPnNjMyRIZ0J7WkIhSyNyOk4zRDs2OnNgcll6NmVJNkxnYlYyWEw/fkw2NVZkOXxWX2dZIm8vW3h8ekc6UyxHTTVIfDtBJihzMGRd''@;'; put 'put ''QFdgXzIxLzZaeF1NT0V1LkN2WTZ7dVg1eyZUSElDPVk5IjhDIXF3dDpTN2BqMigxOFMhUkxuV2QzKmI3Q2k2d2h+e1RAO0dkKy8+Kmh8U0IsOUAyfk50XmlVcUB7QjxsTFZQPEI+anFOMFNOdTh7JiFDaXxnNHhxL0xRdT0xL0IvZjp7OjVtKmFAIWNTa09dS0RBYHU9WHNGLmFJdz5Td25reHhQ''@;'; put 'put ''PkNEYjBCKiI+QzFNWFhrRDMiS0gxIWFZSEtxRmQ1Y14xcF9jTkZsQEBQRWFnQ3xTXzZYfWNYYytPfmJMbVN4T2NKdDR5LH1OcHpybnRXSSRZWUA6VHY+SH00VU57JnQjUXxgfVBLZEBmXVE9LjpVXnhfMVJPPFZ3fT9fJFFkZlA1JCMrPll4Sihoe0g1I2x9YzhtSy5rSEVvcm9rdXsoJTBYRzZ3''@;'; put 'put ''aSQpQVsxa11aWUUlTUx+Sk9jY1hzTzY6bSlYVTElZUFbSTYxdnpuYkY4OlpmU2tHS3VYU1VOK2Q2UnoqXS9LOiF6bkJIT2pPbS4rOCNhUWNuWFpAL31GJWIsM3JAO21EUDEia3g3ejN5JTB9XnBDQHpCakBgdTMobSspcEZqPTB6ajsmY2p6QyJUODx+KS45NF1haEwrKFVkX2JlXWFPPy4wNFo2''@;'; put 'put ''JCteYT5DMWMmVU9AO3dnOXRZLysrdWJFKHk6TSkjKjMrczl9JlBwVnZubHx4SHZgL310NURBaS5YTVZlbUcmbHQlN218RD8kQkUobC9AY09CPChgeSImUCxTaVNkUV5PdjJoWlUkYHFfdENeJls3OF5ueWN9Im5Vblg3Z1BVYzQsdENmXjk1NnR+PXJeQilbJERheGo1NFJ6KEtyYGRNZEcxWGRC''@;'; put 'put ''JkZINl9QbnMubGM7KGVvPkMhOjJMSGZhSFAkcTFmOTM+cmBDTmE9Rk5LW3xDT2ZlUGFPbSI9UCE3RjBdSnVFeixPXmBNanBIMzUlTWolZ2NDLmdJYmpJRWllcyxlbnkxSkZ8SF5UYWxmW1VWTmBTcWlPbnNWQmc2XlRVWDp0IX1WWGdOWGFbWERsOXJmd1dfWjhOPip4VSNpdE1+Y2M3fTB3NCR6''@;'; put 'put ''ZFdyR01gX0VBZ2BfUnc+clhzYnx1YmY4bU58RD5CX0J8JUs5QGlUNk1NdnhCO0ZNSFdhaU9OXWsxd1VvMENvejNscjl2N3IkemV5O0J+bDV3MHQqOTJlYlh3ZXlWYGhCellRYkM9blRRLnp6SngzNkw1MiZUbGBPQGlOdXU5N2E2RWk/ZUV8az5nXiokQHVzP11wPkRCen5GN0M0c0lmOkpheG14''@;'; put 'put ''XT5lPk5Ib1A8bmJaSFJGdG8xYHwoRjJCQnc9PjhtajVNakBCfEJoR0VQQWxYRD9iSlFtMHd5L0JQYl9AXzB3RW5IanFgKVJ2aH0iYTN1XlFaUztbV3RBNHVHTmNCOzsvJXdHK3FjYy5FUEVqM0UwQlg6d3lUallMIzU/JDt8LEhZT0dtcGwjPDF7XXRlW0NAMC5KRy9beG1oOyh7Wm99IjNldyQy''@;'; put 'put ''Y2J3alEpQjlzfS9IYGNAfCxMS1RkZnZwWUx2M3VtK3d5YU0hI3ErXjJTXXF1VWFhKXV5KTw1Szd4czRYaTx8Z1Y4QHNpR01Sc1EwOEltUDU3V090NHJ5UDdJQTkjJGRTUXt5cGhLSVE/dFYzO3x5V3V3eTFybWVPX3cuIk5pdEduZUNEInd5K0pramttREg0OXZ2OE42RmcmaH1NVSpSXlhBOnhj''@;'; put 'put ''fkw8YWA8V0Mpe3dUOFdzbHl4XlR6a1NjR2spJDI2TWpwWiNlTWNOOGhGYUxsO2UreFBJVz9CaCNJSWJPNzp6bjE1ZjY8TEVMYVQiKil0VFBPKU9VJU54dSV5SVdgWHpTR2AmcTU/ais/QylIWHwje35JZDFaTlU/QHooeE4jdUlLdCp7bGt2MHpKMEI+MjY/OClRYHx4UWxhZmxUeyUwdXMudCJs''@;'; put 'put ''dipJeCtFJEhZJFEkQiJSNSpZKDIqZjJeciRiWVo8Q1dLLDpGaE5NR2M2LyswJHElezJod25JQWxCeC5GPjBpKW1nSkpXT1VnbCIhQnhHR0V+ckwoYzNLJWJFeEdlYnskdylzdnp8OG9iRHA8VS84NWZYT0xEK1svLjMoKjV0OFsjVCReMXR3XiI6d3BiZ1FndmYqQjRvOk8lfihUYHNRPilaUkJ4''@;'; put 'put ''cyUjZj82I1Myd1hHc24sUD10cWlOTS55I3BXY31MOjVwWFlPKlVVemM5LCw0I2JvKEZxSys1OC4qKyJ6QHx3djQjWWg2STQ3JS48VD8kVko/aiFFJjp5VSwrW0xRRGFHdmlTcXhaYkNdIm5kInwoZHV0PkomdUJYVnRBTzIxJXB5WTVhMEt4amU3PUY3bH1LajU/VV9MW0xHT0p0JjYxTGZ1Y1Js''@;'; put 'put ''STg8ekNBekVreXEvTnYrQlE1V2g1PiMuUnhIOUdkOE01dnpiWEVdKWV1VyY3fUZpRXsoUWdQZmcpLCwxbF08bjNEL1BPXTRiIjtPOUZvYUNGKEMoPFh7XykyUzx5Z1lmdTd7K080RSY0THt7b2t3WWcxL0BfWEJPbE9HQTpRYTpuUGZodEs/cUdnbz9Kd0hgRz82TiNMQ2xbekQhIzlLNnQ0TDMl''@;'; put 'put ''PzZyTUxOUSQiYS9mKTNNQVNAOj09VTZKbyUiT29kOWB6bl02KEFkb1ZdNmdqMSYoXmR5TnB6K1BDLzB7JWIyTj1jJXRAKFtvNVYiTTlGYlQ8VVNKMmNJRWtHbFNVYG1rTlleWGkjKzMxPDRabSJ9NG1Yc3VHKWJKTllVbDAjKnYsdF5LOjxsME0lQ05pdD9VPUlHZGZDMUpEYl43XSZieUVYJWJ9''@;'; put 'put ''am9zSzZNYVtaSlhtfEdDUFI8VSxpLmk+R3EjJEtYeFF7WjFjWT5VKklBOHZHO1gua3JManZIdGk3RGxaS3pRc3ROYm1JUjBKZ09HYk5sOnlVSHRwMD1uVXhLdzE6PloueWw1bzpzZnRmUnp+TktGYzpTJkJvWmpuM0BhQlVXMS5JRTZKPlt7aXl2Nj82LE12KGJSV0ohRkR0cE88KHR1PzZPSHxV''@;'; put 'put ''eHddaXZmaFtEOlRSL3VuZHp0P01CaVJXbG13OFhDIUJiXSViImp6dUtTNXVEIzkvPkkheEElIXBFUzIvW3dMNzUvIzRkTSFpajYpNkx7MTF6YjMoRGEidTpXRU14fDdsJWI6Km18RXc0cSRma2NpUmcqOkkkcClTP2NqbklpXjJxPThjaWMjWShrMmppRHt0cE9TK1NGckIobVVjOjYlYm92NTIl''@;'; put 'put ''P3dIbFZYM0RzQXUvcW8ze0VlWktJendPU3UlP2IzZGhJRz01QGgqPT5HSktVcypIMCRGYmFKOlFhYmtDd305clBnTyF5cDdoajxobzNZeTM6eDF2TCE6LFQ/eWd0fVB0XitxMzdaSnU5QjVtKX53Nk8+LG9ZJU9bOkl6ViU2U2VKYyFrTnxSSjpiSmZLOVlmZCNUfnU1fV06TksiO19PbjZCfWIj''@;'; put 'put ''WFViQGx4Q0FaQHpiJjc0NDMhT01AenVmIzl+Qmwiezx9RHBFZUFUXXcuTlFeTklNakBzIzBOcmQ5STVKPG1zM1BZbmZWK25kZ116PWo3R3UwTjo2U286YExCJWJfW2xRM209JDs3TUlJQzZQMFk5PHZPKXxXIWR2O1tVN2M/KXkld3AjOWl4RFpuKyR0LyhMRVU4NGEmRGwzQHVTQlhTS0JbSTBz''@;'; put 'put ''ZjdTd29yJm5kayk+V0NndmN8T2lBQV5QekZIPFVzN21dc2MlRzNjMHFGZER6eEYmOmMyPW57Nlc2ell6K2dmaExySVE2S3AsOl5YfjlPNWUhInVgUENBVX48VXdQeXcsMHNmL2s5MXg0b2dLRjFeVSRRZVVwcG4zUzlOIl8pTXlsI3t8T2RtRXZ+a0tTTWFGfnpULG8jezAsKmlRdWhIaTpPaGtf''@;'; put 'put ''YEBmYjUjLH1FSz1MbEVnP2k+TyEjRHBPY2lZWkR0c1NsMGU6UE8lRmFfPixVbHhxJXQwdVMxMklOd2F8M0IiTFs4d3krRjM5ZHRjVntaVGZBNjNRKS8he1BHfStZaGk5RzVbISlaNEcjZXEjcSNESHV9Rk5yQDA0RmZRSWVMYmVFTDJ0N2k3YjEjUWFqeS5oayhRZiR7OmwhITFXYWY3b2M5aUdy''@;'; put 'put ''O1RiRD1IJHR0Wk4xI3QufUxab2hYW2ckezNPdWklcj55RjM6Ujwud1pbV0k6SGBtPUFrVTF2TDlYT01SNWpmMDF3eT56MkVUKWxtS3soZHBZNUxGWHReUXBCYEY8fHkvWzJncjE6SXhkZy9kenlVcGxMSE8vUE9ZSDVIM0VLPS8iajsvRDlAUjU+b2RaQW9sdiprYjwkVmVRbXhVd2Fjd0RmSHBq''@;'; put 'put ''L3d3eWAvd3ZGW1pqY1UxWnZqPlUlTm1eU0RlTks8R3VnNUFZPkNXU2E5azRNam98ZTUpa1Y1Lz1afHJYfFQqJHd5VzVZRzJbbHgoIz0qazRMdU9EZ30uUXt6VGc+NXNjOVpiQkhLIzkse0ZrcmwiTC9jfVQwPyxZJFF5KC5jWitMKVtEdWRNZlRoMDN6KHcrKDxpfVJWPkwiIT1CemJdX3NTbj8l''@;'; put 'put ''Wjs7SGBzWndjOCNAR2dGdU5CcChYcU9TcztMXlR2KFRVKzYraTYqX1lxL308clUpeUc8ImVmSEowYkNMaW45bWVaK1oyd1pIImdXe0Rga1BWWkZQKklXemRGMD0zNDR7cTpLbUdzT3VyJns0N0h2KyJbMlAwWUBPQzowa3coPGIpSkQ5N35FSj9rSUJ3MkJQTWlob1pAI3g3YjZrKiZgNW5sQC5R''@;'; put 'put ''T0cvYiFVYks0dFhIT2cmez50ZzhCKDtEOmZsekgvUT9ZWTxVRGwubm0jK3syRzU6SkJJIlJTR1l+SF4+MztYalh0M1RJPXolS3xeLyx9blBnJjpPQ01WWFdNVVBSZ2l7YyFYPStlK09na251WU5KdHA5fVBrQHc7eGldKix4cUp7I157Pyp3bWgwKzZvPDNCclBXZnw9QSxGbVpPcHVjRC5uazxs''@;'; put 'put ''RG16QVlxRT8qb3pZO3BpYXRLQipEPVJoYEZZNHUuMGd6fmlhdEtCVlU0STFUQnA4bEk2VmFuWj0ifFFpPDgwPytWTlpPLlRlKW9HTWZbOWljZkpbZltEe2V2KElDTEFwRyN4a2pbOF83cSpEdG5IZzMrMDJQZFpzQ0xBSiQ6d2cqM3xCUD5JMFB7OVQpVVQyQWpqcEcxekEqbXcwYUIxKlJSYVBm''@;'; put 'put ''MGVBV2IsVWJLO1AsMU9vTDRUb3ouIWc7ZmVGPDI/ZzJ6OD0oNkhZZVE5O2kyMDZkImN2eFt6LiRUeF1ZKjxTfSVaMGZBTi5ERHkhUlQsIlphRVVGez8zfDVsWSE8KGJCYFNvSyY4VmErWiNjUmFHTm9LRUs0MG56dSovWEFXKnBRb3A7VX4mWmt7PFouemMqengjRXVlRDo6K1Rhe0UuSkN9NWxJ''@;'; put 'put ''NlJPUiRPNjJxUzZIO2dlJjh6TygwXTJtYVlientBPEdpVXZmazA/ey9TTSV4V2VmekVnMWdFNyNOWVBKZ1p7d11iS0ZOazA/KTRXUyRBe2V7OTp3aUtbWjd3Q0cwTyk+RXN4aUswaj5NUnVxQmNPa0B3QEIheE84fExQezhNNjMzI0o6fVtENEBCISk0ZUM3ZT5DTjpGbGE2R3BXKkh3OEQsTSg7''@;'; put 'put ''KEd0KTZdUjhDTm0xV0tPWW9RZnB1cD8kfCNeQkwkWW5nW1JGSjsyMHJ6fik4YWhqfF5JO2thMVZDbCtaZlokV04jMGdicmhEJC5iQn5XSXElUC8wTzBmelpKJEJYUHY3STZQTzdXUE9JUDpES2F8ZTlrW000fGp2YGN+OzRjTUNhVHkvUkYsJUh4YVE/MSgrRWF7d35ifCxXNmpxSyUqdCs9NnFH''@;'; put 'put ''YUlmPG04WF8oRmxhNkxwUWJLTnxjTVAqWk1vNipUdCgqK1pyLChjIi58aEVGMmUjUGgwOGQ2Y3kqP3kmTH0sdmphPHRjTEJqWS5tWHJ8YVd3TWE9WmoveiovJW1RUCVuakhOVU4pUF4ueCNNMWIwV2ROellmQCtgZ01hbnpueilaJVouWmh6V2QqY3guOF1SOEJOcTEoRHpaJmk3XUckPyR+I0FD''@;'; put 'put ''PkgpbDImdXBJZkM5OXoqTntnOVBDVEY8ayF4T0RhbVoiTSZ6Z3BEVFowKyk5WWUpYEl+bGghSTUwSSpnZntHNntQaXR+V2FhYmBHPGxaSyllY1NtUThMLGNjSDE7RlhId2p5bjlRK1pNYUJkRzBJIXhuMEx4T2JESGUyMEJUImVTaW51VXozfG0ycHpjUHg4XSNedHdHc1NrQGE5c3lhbyY4WjtY''@;'; put 'put ''MDx5RyJPbDdiYWxeT09+PCN4ejcpenhdJVlFRkQjYlNva3pNMGxGWHQsRHZKR14sbkcqT1VqL2RvN0AjYmF9TjtSZjIhRTA5Tnx0fUFqSz5NfTlNZzBOO0tkOnVtWTtGPDI/SEopVk1hQz1rS0IkWDBPKnp4MjBsakh4ZmV9ZT1mSGtASHYmWEREbUwkSzBVKU5IR2ZhUWgma0AsODklQl5GIWV6''@;'; put 'put ''bEZzIVQpOiFbMHkjXiNoc0NleXtkZUhhY2FmcG54empdK2tpX2pXMVN7dCNXZUhmYmk5dSExfmtzXnB6cjsiOCxpUXYmJV5aITgud3svR2ZiaSx1fHk8LnJYXzw3bDY7QWlbISUhSGdjR0NMbn5gL1JmJjhiT0B2WUg6QnZPcCx8WklHNig+RktrQmRSYTlaXkYkUnI+Wypbd3pQOFBUT2dMYzkl''@;'; put 'put ''ITEhfm5sb3Q0O2Quc2BCZnBjO2hjX2RNK3hUMX5DOmh6RWdMIm9AVjw4Wi9QYGN9OEBnbGBOZjNjT1lQWj81a2pmT2w2MEklZT4wMmVdOFkpWjtHTWJ3amZ0UEBNU3RFTDUpPVIqUkxeYSFkMEFFWE40Nm5HZDtlaVd2TlEhbGJQTE55UDQqcUVTTGI5PiFMMGJRS2o2TkN1fXVFNnk7dmZIa3pD''@;'; put 'put ''QE9DZ0dUTjBMNisiYW9kWEpJJk1ea3l4Z1BVTVZEOV0yOD8hWUNEWSJVTFtuMiVddVBRMX05NWR0WGR2VyQ4VSVQMnBPfmdqMnpeKUx4Z3ZoPHA5VGImeGtARU5AdHJPXjUjYjdscWc2ITwrKyk6QGJOY2RJc1Uud3BFZlVhVUd8Y0p+LndSb0g8VmYialZAP1JLRzZOTVBtZ1QpKXlSenldQzlt''@;'; put 'put ''LHNhe2hea0hHNHBHeE1eVWY+ZkxpRUQmWltJSV5fOXZkdHozaH5qKlJzZ195e3lDZmd0WzA/eUNMVS5sSFM8V2lRam55IVZ5Ry4hezB2KXt3YEhBe3pIWjskaiEwc2glZ2VDIltCV2ojVEIjVTMwTixvT0pHYVtBUUc2Tk9adVAwa0BDNn5NY3Z2UylmM3AsIVAwSjVuM15CKHhtPCRaSDl8T0ta''@;'; put 'put ''cFF4LkRdMWpOITE1VUlJbk1VK1Q7cipITDBSNWI3TklOeHUsQWZXY25XMUBuZi51YTZIYSJlIkFITWpyRmxxLHhjL1g9UF9oeUZmLHh7emFwTkExfTxpT3VqVTdQUCVFV05vMCwpc0N9SiY7UVU8YVljMi48eXJeSiVAU3RYRCs5UHpAVTxVT3hKOlI6K3AhQHk5RlckXzx3Mk0sXm5xLz5FcDV0''@;'; put 'put ''Il9tKlI0OH44SCosRkxnfFA7Iy8wVjBTYyhaNjZRRyJSazNEbEgsZ35afUlOW1pAWlUrQCsvVUdleUd1YTZPdllLTlhKJDshcW5mbmpgTShZT0I9MHlsLit0Zm1sc1g1RWZmKSt0ZmBXR1pDQkY2c1AwMToyKk5acGhabHtuUF9nU199TXZ3a0Q5YjBzS2RMbUchJmFeWlZuYCxCVE48dWlyK3Ru''@;'; put 'put ''VFMjRWMsOVJZO2FpaittWWRQIiIwMEwlMjhUXntyb0d4elkqSzA6WTtyZFBTLCtPQ3Q/WjVOW1k7WnQ4aE85WThITCR0SkVhclpPb3xDVHt8LE9QejhXYW0hZCpuRmNkSTVWd3BJTFtdMUlhUGFWXj0rNlpHWTFuI31dRDwwV2B+ZUJpcTEiMnchdSE8SUpOZndvdip3XXpTRz1MVjV0Sm1hfmhA''@;'; put 'put ''KkNjYUlSXiRSRTxoaWt2WUg9ckRwJSV2ODc4dmdIKzR5ZGZlaVF0aUozTnFpWDZdV1hiQyRQZng/aUEyZjVETVAxUFVmQmRdRSNVYVFEbEZhJmlydSVNL0chWEJsSCx1ISYpOndRRy53TlBMLHxlPVA2TmhbfltvbzNCRk5YOjZxRF5TIU8jR29WQGsmcVo2YyE4cDl2JW9HUjxaTitMWEdaUT9E''@;'; put 'put ''O0g3UCpoaiRLMn5VUHJKcyUlQW1YZkBdaCFRKV1RRWZ1IkBVSzpuWm9xbEYyfiR8MDhqTz4qSmJiMXA5YWBEPHVjOWI+QmUpdUoiXV5NW2t8Q1kzIkAlQCkwQjw4aUJ3WUh0ck9ZOkQycFplWjl3Z283QHVMbFhUXj10cFplVzl3Z2MxYTpzaDxQKyZRX2U+IUZ3Vj5EMTRDd1EjcTBmcHA5dkdJ''@;'; put 'put ''MCkoNVVeV2pmKit5aUxPZmU0eywhVDB6ZDlid2xKfnpANDhhIzR5ZnBUXmlqWU98NkRMXXNUXnpAMDtUYmxAZ09pN1I1QFBmUHswUSFzNFR0NURAISswIWRnOix4aTtKSXlPe2hDRkVsUDYpai5QWTdrNHp0ITMsIXwwfjlmdlcuRmJFS2lAQk41O1dhQTJ4eD0xUj52MiMrXVpXLloofmtLeHpH''@;'; put 'put ''MCxsaSlMelNKRyNxSmFEOXk1PElFRnA1cDVlWFtZW008TWA5QHlBRUQrR0tPUE1hLj5QNVRtdiw3amUsSE5IT0gkY0c8ZEV5NyZibzNQOj17L1k7fFo3dD9afnQsUi8kT2ExTX5qW0ROLDNPPSRJRVZ6RHBENn1QNXdkNHhec0t9cDorPCt0OGRPOmguRC5tWm9OMF8veDw1LDJmZmtmSygrdDsu''@;'; put 'put ''RDxEVlAzLGxpQjpnekUhKyl1TS5ASGFDUUBOfVRBcixERUx9cSVIbU1zMGA9PkVAJUZGSk5+aVlIKWpNNmgqS2VXZVVOaCRBbWtEYnVzYWMzUyQkUCk6PzwzVjZTZF89SH1wckg9I1k7bmNHbF14PkY/WHoyQkw5cVtCZnA4UDY4aiN3OjAmMnR7P0lVNWwkel85fGRmcHFUQ2V1XWNsIU0xZ0Ml''@;'; put 'put ''Jik6JHcjbjk5VSRsS05RWlJNX2ZTPCVQaXAmODBUeUdKclZ7dSRjYStaa2ldIWB0QV52OT80eGJlMU9VOnhuOVFCJis3bGU4TjdgNH56RSZBUEM4UHI3XTV6PzRedCRlfjokI3NtQkUqUVF5RGU4I25lUWYzV2dQbTljPntPLzdKN1khMyo2JExlSChhYVQ4Wzh2IUZuMjFIcWN6SHFVN2ltWnAw''@;'; put 'put ''MDY6ZmNtOT4jRTpKREJlZUs1MGo7dWYxTzlVUEJANFVPKVQrOlpVcjtuY2daTUR4TSQ2bnE5UGh7ZDtuYzNAQmREOE09STxuOUJscGZqc2BySjBObUU9cy4pOWg5SXc8SU1zSVR5cyJXeiJMT3U0Q2l5SlpXdTRXJEBEMjhsPlR6TE9EZG1jJndXJGMsMVR4PmVLVH1GXjFgWyEhZHRpd2w/N3Im''@;'; put 'put ''OkVhKG0idWVqZ0hkRyxFaWksSTZPcDciTUw2VG48PCF2bUc9fE0sV08wSilQQ0p+UX1+ODQwWVBlLDssKTlLeWloaHZKR3NIM0hOPHlbVldodkopUENoO0g3aDclQFEhcDwoWjw+MDBpent5S3VAOH1rSSwzWmNhbUU8IX5rRG0wYUcpSyQ8SXk6d21+dEU6IVdDbHIsZ2lFNyV4QDhxbVBjWipG''@;'; put 'put ''SClwQGdDVkpfZSZjYG5sL1BaJDYyW3BuWG1rP0IzcVYoem1oak9XUiNlZ3NtMzA1OHx9dCNaO09eZTo9bHlzWEo1ejRQXlB2ZWxhcyEqK2lhR1FdKkcwPFN1U0c2IkYqVSFYaHYkRVgkYDxSdm48VW1qUWRmUGtjXjZ6XTU4YTIwdCNFNkNORGk3Mmg8PCFDOUo8dSM9I0o8NEI/I2plSDklKUcw''@;'; put 'put ''V3Q4XTJqVE99dk40ZHZ1U1VRO2hEYThYIVJfPElhP2NeRlpXdTR1U3pqVE8hWDhYMl0+NUwhKSF3bUc9SyQrOUkjbDtGPFgkYDw8TzhQWiQ2Mk9mUGs3bUteRzBQMW1vPS50ZUA3fUhyL35EYmtBdl4hdSlTOTZfZGUkW047VDkuIyNqJkhncy52UXlsL05kVjBOci85MTRtVzMuNmhrP2BtJWw2''@;'; put 'put ''dzdkUjVzJn1zZ3ZMOD07ZnxPbClMQzUuaisoJm9sKDIpNSZuO1ouUDF4KVY4OX1sIzlmVz9JZHxETmsyLGV3b1tCO1AxXiF0W2VyKFt7RVpqMXUlVHZ1YnE6L1FCbDFfWWkhVElYWCleIU1CUiolUDFbUj8uL3ttY3hiJnwve1AoUUBudHNHNmcxLF4zKEVKbEQwUiMkYHROWiVFST9WXyNrPm44''@;'; put 'put ''VX1RLkEjQmBeXVVJSS5BI3AvRWQicWElQDA+cV8hTHM8Oj1qbF8+JXxiPi5AeF1IaWtgdnRGan0lfk9LUFdrPHduQEo5cz45QT8mJHAxc25ZTDV0QGh3bUlJVTxjUU0hQVRIRTRBfl1haylXNFMyKkJmYHJiNmFRflBBUDshL3pCZXVsRXJWLnNWJD0xIUU9YiskX0xafktdenJnVzc2dl1ZRXI1''@;'; put 'put ''RTBWPDV0cTxQMHJaMzUkbCYqemVoXTBhfmE9a1ZIajAqRCtDYEttfiFgWkdvJnZYVnszalAsYDcxUzIwX1pKY1dIMj9aNlJARWxtNDEwS09DVDZhR0diZi5XIS57VVV3RW1eKWNYPGNJe01qJVJXQ3EyXiRlcyUhYnNbUjM6e2lvO116S0JnUzljUDwkYT9lcTttWSpebipyOVNnJH0yUihLSikq''@;'; put 'put ''MCFtdjljKkZ3KmkhMn5AZyNIayolbnRuJC52aW1xTkNgVW4jcGkrcSZDaTxTIS9KZmArJENUOUolQnsofVFHV0UpaTx0Sn5wdTk/PnExIlM2Q2Q5bXBjaDtsfE55bGI6QXhhe2hCYTxYcjN2eVJVfEpqMiguJXYhdkk6Vj5HR0NVJXxCdnRtcGFJOUJFJGBtaUtbUkQ5d1FiLGY+ciE5LklJczwi''@;'; put 'put ''PEZodm9sS1BXeEZFdSpXYElsTmMhNzdBZTlJQylQL2FlRUh2TmJSaHc+dHxYNTFmUnVsSzckRzgxUipDaUVIbHRbRmUiMmkkRzgxOlFjYkFQWWguP343MTdROD5neywxNnIpNC5LTFtnVTA1QWFTVkp1UFt0YU9LRiNuUUR7PmUrIz0jRFNjOmkqR2t0cTAhKGhQXkNFcixhY1ZOezM2K1NnSHYs''@;'; put 'put ''OzZ2c3hVTHtNI1tQWUJwMjlEX0tTKU1WO1g/b3p2Xj4wRXQsciNlaUR2QiEjRCZXRUg3cEZER1JmR2dBQGp6X3ZqdG9xQ2EvVUVDaSlIcHQhTSV0JlRWQlZkOCVMJXFAQGVpOEZlQjgvenJOMk5tOW84L3omO0I4JWVCODtnJlJRO2dQOXI3dlYpUC9xNFhQZ0khV1svOldrTlEpOChESGk0L09I''@;'; put 'put ''Xi9UbSFEIk8laGclITJ0NCtAMFZrYDlLQ1Z0VSkuPkxmdENfdjpDVn15b1giJD4uWkdmYUYhNGdHVFg+Tk9rW0k1el1DPjRbKSxUWVhrTn5CJnIqQilqWnRCOVQiVlFFKUxkRlEoKHkiQVFidGxSZUxSaEd1aSJUfHU8MVl1RyVsYURbZ008NEIhWTppYHljIX07UUEpanh0KUV3SWsmOFlnQTVd''@;'; put 'put ''fjtdQWVhY3tmWlMiZURKdCJQLz4uWnZ0LCtpPHIoQW1XdCJCUXl3SG9KLiJhQltodjo7NitGUV1tOiZsV3RVXW06W0l3VT50UGNLXSFDRyIsN3FRczFgN2JKKCw7NjZiekdjMFtCPWhhZ1BkYTNGcmQ6LyVEVEx7Q0xyWzlUOCVifi9RX096eDZ6YzIiPDcqcjBFcncsbFZPcjAzVWk/JDBFKClY''@;'; put 'put ''cSpwLko4JjQ0TzNqfE54PnVIdy4rUVFFUmh+WkBZZ2UyfElXVn5eIyxbP2lYOnMlbUNIcWBYP3xOW0A5dT1LaXhHNzR+aH45VDs/bztXV15RRU9WW35BNTN9RSFhNSoqdT9zREEhQWR9WkFlV2oie0RrX0s9azFDInZ3ZnNVZkZWUXNlZlZfYTRdTF5WYVA2TU9dTWo/Jld8OVQlP09YJTNiZX5a''@;'; put 'put ''al4xaUtoUFYjLCU/bGlrfi5hYSt3QDMpZ3NBTWdOMz9MTTUzSGFaWkg7KDg+JkpPZm4/fEQ/Ulc7LjZ2VHFvcXc6aUAyP15TWmIhaik/YzF+KXF2a1FUYiFqRT9jMVYpIlJWeSx8fCFrI2gzazMlI3RTbHNwRFhAazQ1UV9JOVlJdF9kY2BKPUU9TGFOZnxuQ3lmO2NJcnhCajN+JTlqXXtDKDwh''@;'; put 'put ''Un1KIjhNelRiWmkualI1JmF2VXBlO0YqY3ErPFk0Nk4hI1ByLjIrZHE1QnVlQ3dhYX5GQEw8U0l2WSRfdSp2NFVEanojNHU9cEtpVWE5ODVRSCxHKjx2WWcvUHhrKDwzREJKUkA2UzxTSXY5UlY+KTp9WTcockpia3wiNTpdY3s+eisqdTk4NVFEVCZgXjVwfG1afFs/MnQ6Xi91ZXFkJis5ODY5''@;'; put 'put ''YHEoYF41SERoI3UpNTgrI35gJXlINTB2OWxfXT01NitYSG9dV0gqb2BQNXgsdShCbEZuMiZVbmZoN21FNV9zVkVMQDd0JXZ8MyF3JihbNnh8dVFDfDU2NWM8WllyTWFqRXJQIWtAPFcxW2FDR0VJV2U8PkY6OHkrSXsvTHBWUGdRdUoiYnRgNl43eTVWKUsmfCs5ODVRaXomYFk2Y09AaEAreGRM''@;'; put 'put ''Q0NnRE08UygmPEU8UzxqNU5WPlpIQVpwdEU2SDVjcD1mXllxZzNMUVM2M0w1Tk8qJWpuS0I/UmxQbkRjYlQvOzs2Ql4xMHQ+PlVvMCU9ZihZO0xKMWw5XWFvLzcvTzhAQDtYXllISlZVIm8hIXcmUTZaQCZnK2Q1TUVRWSIlcGN2cWU/Vy8se0h4QUtDIipLRDtialk6TSFsaUFwW1ViIS92ODUq''@;'; put 'put ''dHE0Mit3SSlRbXp2Q3pQXVFQdGBOOU5VbFhHYko5NEsxOUs1NGNaa19UITg1UUVsbltfYmRRVDU5SlYmQC91Y2VAeTY9Unk2K0RaXWE9c2w2O1MmOngvZzE1JXZiWmFjWi5PMkpQakxKUX1ncnwpa0YsaHZoKmk0JnU1K050RndyMXJfVSRuTEpBY0w5K0l7VWlJUkBXW1dEKXpTfGtwKztoSWMx''@;'; put 'put ''KVddYT1ibyVCVU94Y1pnMVhjREViblhsRXUwfCtiJjZSa3htS30pMG57RStYNDZ2NHRgTVEqIzBmQElnQ0NBdXkqZjMhRTkjTyhYPFNIQzx6S25xbD4rT0dhWVZvV2prQzM1VnNJLCErSXt0SEdyR0l9SENYZTlWKmRIXjRkNHMhaE5TImZmWWhgQXBbNWNDYC9ZSEQoJEU4Y0xdZ00/MytaQmUq''@;'; put 'put ''LklpTWRhNkRQbXBAISF3Jk02Kjx4dGZXWWtnY3UhVUx0aVtHcCx+WjxHOT8kREQrVFkzSmgwbmNLYnRZZEdtPztQYjsidjNKQnR7eSkoREtuMmI1KGR+SjtDXzk2TFpaYFEqQHxFUikmVF1ZNDZlN2drKVN6SGxEX2RvL10uSyooNz1fcFtEZUZReGE1cURYZSNIak9VRXU+SGc7OztVQT9xQmV7''@;'; put 'put ''VStLLHp+UXg3bktbcSNTZkAhIXcmPHUjM05lL0UuY2pBcmBAUCRuQndKYUZVPFN8U01ibyZBUCJ8U3RZTDVJKU0jWl4qI09daE5kVFY/cVVsW31eKEYhJURJNVI5Wm55Kyl4fE1HdG8mNCN8Q0dZfUpEK3ZQPiVXd0hTclJsWD4uJmI3a2NzL2B3WiFrRVtbbnFPWENJe1ZIO1ZeVWk1NkEqXkU4''@;'; put 'put ''SDUhcH1iMjQ+Y3BNZDozY1ddYT1bJkdXYHlvaHEvS0VvWipCNVJ5NlU1Ui96JE5tb0IiLyVAZyojNSV2UjghSj5SISF3Ji51IzNUczA0K0I3aVRmdjdjdU1QdVdmUnk2VTUwX2E9OFJpPGNJZSYoYEB5NTJFdUVhc3gyTCI2MkE6OmljJURZR0FYW2pIYkNYTGlIVyU8OUU1QlNNNUUxWnIrXVND''@;'; put 'put ''alZDSXt+el1xR0l3bTBGQWZaZ2ovWEpeWkV2U0gvbGNDZzs7Oz15eT08RkUhTUNgV3kxalBbNTJYLlEsaE9DSXtbemNKYkxzaEU7L2UybnBtIVNZUm0pbiR8ajRiVCpmUXVlXW9MUEEyWzcmczUiL0VgYDhZN2ZUWENHSGEpb283ZjA1TkBXMVJWPj8vM3U+dCRUOSpdVjtERTYrKWhKdENxOlVk''@;'; put 'put ''KUt2aUNTOXpNeUxXbGxNdXhkN1JrL3MxOmtQKnxaPlVsZUNJb25mZlloIi9pbTUjSSs7RCR2cVpPWiUkcVEoWTQ2aEMyW2E9MHpMSSFXfUVdKX1rPFc+Y0Z3RUt0RV5sWGJtNm5IYU1jbCx2cnI+Q0xPOSlyVkxHTTxfNEJwYy4hWipDX2AiNF1KZzsoOz4xS24sd3B9SHVyPD14Vn5LZD5rWiZs''@;'; put 'put ''Y3ZJZzsoOzx6S25hLEo0LiJQRll0aytoMEwvfiRxa0xDWl5MOV1xSDFmQ2Q9MzFyQzF6WTJgdl95RHlWZFdnJlIqLDZtZDBFOjNlLFIwR1pPdTVgcTNKQzZ4X0ZGTnRYbVVIfmBlbSxSQ3ljQENPdTg5eEVZTjd9Lz0vIkkmQDZ5OWxoUFpiN1tIUFR3YUllcmBDPkJCd3gwSilxVkxHLllQXk10''@;'; put 'put ''Yls1WWcwYi9HZi9GU0o8STowP0cjdk86MFhZRD50cHQ7MUBMRyNMJHFAWmdlb3s2I0YlRyVHbFReWiFbI3hvbH1DZ31FZnEiImFfcnQzInVYRC81Iyh2KyQ4azJXOlp9bDUobWhsK20zajIxc1Z6eWB0UllRaClLfT5oXiJASnR2dlRaUSo4eWx0VkhGa3VDfSQjSnRFb2VtfDN1WjthZEtBaDBr''@;'; put 'put ''dzNMMEM1UzYzO1tETHc0TT08KX1aYTc+RjYqLkk8dkFEOmlvUyw3U3Z9T2k0N3xPdml6JmBIOUFVU2I3cFpSTmojM2F1SngwSVd2O2opM093OFt8KTZ5V1cmV14qdnFuTEYpMld1YDUhfHZ4JDFUfWNxVTY7ci85WmttTFJecWhOYUAqdHB4UEQzd1taZGo2cGZleCtGWXw7TzJoTyRPXS94P1lC''@;'; put 'put ''X11RVGNKYzQjTHBpSSo3SEBDa11tbTx5QlZHWXt3PkQ0T14ke2M5NWRqRUdCLDZ2OWxoUGsyOS93TlUuWVleMUBwQVd3RzFmTSMxM28mZ1BCeVZCTk99RWtnZ1pBTEVubz1nLmFBM0NARzJGSnJPUDY1ZF13V15dM1J1YElCWEdFSE5CKHczRHNIOjg9WVpYS2tCaV1aa1YoVzN4PGJMLlVQJU0u''@;'; put 'put ''K1dSYzJ3VyQyPE1sNHhWQWlgYz5PQmNOQDRqflJYREJgaHo4a0xmNXhuSHJAKmdqWktrY2heKyJZcHg5RDF3Lk14YjNaXz9sblpnLmJfb2JkayN9T0JUV1gsWkQ7RE5oO04veiQjQFdHfSFvRVc/L2J6WixaWnVUL2crXyxdKX1XXyF7IltKcDBpV2o6JFc2TEcjYzl8NTUvSXJlY3xSWnE/TSI1''@;'; put 'put ''RnRwT3ZMITNrQzpWQ2tiYGZiQjo/TyRXOjQ8RTxTUztMdG8md1A8fH5BT11UTiQqXjFeejgrPDUpLzchOyU6dyMzQ3ZJWCMlQ0RVQWVKSDBFOiFGMUhSS2RmXmdFOzwudilXTWskMVtmIyFNUVBqLyVRc3RrNlY/K3lxQ0dpaHBOZHd6Kjp0TXA7SlRyKjBfVSRsKHY9UXE2QGdbbXNsVWpQVkt7''@;'; put 'put ''Rig5X29uUFZLJTBteCFqUDM8Ul1fcXghckA/XTpIbD9sSEtTM1NLdShuOSsvJlgqfXsmQn1MUlcoJlBzLipheHNrIS5zYjR3LngmXkpdRTpfRztrWH5DL31IOkw/L2Fgc05VQ3tiZHsjNkFNZHY2cFF3LiVve2hFVkd8KVlUU0FbJCp0QlpeU0BfMzFPbT4sdXhEeFZsPlsqa0dbfHY6OzZiRTgx''@;'; put 'put ''XlFTOVJmMkVDLmJ+aFcuYHRPNnc/JkdqSU8xTiI+PHZ1PkhdPCo1M1t0IUwpckIrMDYrM1t0fDRJKEBYfXsudU0mN24hR0pYS2cvZDhNbHxadng0KlJfOnFuRig4ITJ4Y2o7N0QwNXxMUm02LlJfOl1EK3JDdiheY0xNfWZdMHI9UlBvV2FPeyUpJitrL0BJYj17S3QlOEohW00+NHFSaVpfUjVN''@;'; put 'put ''e18rQ3pBKC45LiZXYDMpcEE/d1dfN3JESF5WX1ZTSyQsIUlMbU9pTChiIVY6aUZNWHpiQX1mU2g0KlI9NWA+O3JMdzh4Y2o5WkZPWn05RGI6MkpgL1lSRSg6M1JuZ1oweUJRXislOVZAREhlVWJ9dWNVWEN9fXV+YWEzcCFwaV1ySUI8XlEzNyY5QkA+ay9Xcy9gJSFoQnhzKTEkSXlCdVBATiN9''@;'; put 'put ''R306VTtCdVBIWTB8Q18mPXRJI3w5Y3IqN2NrVXNZPn12OXdUZWNgJjZSdjpeQDthP00kYTJkK3U1fG5ffCZ1dTl4Y2pDSF0pNTZsbFVdbDAkR08yfiwmUVtacEJfUyNxTHY1JChxbzZQbSRyMTNHVi9NTTJWYlI+RyEuJkBkYHAuZm9pYTg9JjBVYEFgNF5yISs4bX54e1NxY1U+ey9GVjNLX2FW''@;'; put 'put ''T2h5YylUXz9UJlZIMyxJI3xpSV8mWHQjRjJoZXk4bVpKYGtUej0meCtHVmhNYGFkQHF5ZFtnMT41cEprP2t4QiFtPGBHX0FKMD9Be1kke0c9cFN+bj9BS2NuWzVHOFJLcD9BWmYkQHVITyZ1ci4+U2Y0cWZOUEgkNGRNJFEiSWhhUTcreD1gKVFYd0hwNkFWfHU/NjF3aUh6Z3xFIXlOP1tZcWlY''@;'; put 'put ''XnwvbnlJNCVIPnJjYCZybzxwbkMjUXBuez5dJjBvSE9VZ3F7bXVQfClyTG1FSTRWK0J0e1YpOzYrP2pXNXg0YGNxdiRdXW42NmMuQCNrKC5dOm9SPihMcyhJQEZALG9SQE5vYEtwd059Om9SSSpjc0V4bCouMyl8UXpHVVVbZUZRTyV9YiNZXz5yXmkkWkNPSz5KcWlrJE8lfUtIJVFnQWlobHwh''@;'; put 'put ''Kkd0dkRVejJrfD81dUdwMVA5IT5PPWBSTW89ZiE6NU9URn1RMmpuUFQ9PyV5YCZBM1JOTG05KkNIYXxGcjx2U1Q9P1ohRih3bG5vNFojaDFgcCtDUUtvZENAWGEiemhNXyt1JHVBc1skNCRSZ1c8e0dBeywsWV98blozKXVCfnhAenJ5KCtWIVprUiIpbWg1NEdIPUhke2t6cGhFWHtpRGdUO3FE''@;'; put 'put ''NT5uaU5dI1A0XXQrdWhXKXFyKT9haFtocS9gZzQ0TjVVPDErXXJ0WWJKQFtBTUp2Ylk2YmtYbXl+OVZVSXh5fDl2NFddZEllPihQfVYscFN+bmZlVjQ6K0dqZGpVXSE4Smp7eEA9MF91UUY4L2loSEt2X3FPN15DakJbe3xpaiR9X3BCK2JEfnlVQTNAYnNfNjF1Pi5KI15eQ2MrIUdKc3BDOkpo''@;'; put 'put ''cG99anQlOXNTLFo5XT57dzgsKTd8OSxlMT9VJiZJd1s0S30mdzRXXWQ/Wj1XTn11Y3JKaTdJMEtjVHw3Tz0xYDdJMFpmPz8rZldvejBDOl1uRWVEaGE0ZEp9O2R1XWl7M3osMyR4VS5IUFF8Wi9ySUYkNGJTWF9DOlsqZCFVX15SZ0g7JHpaOCFYLkkuSDA6bHJNdF96al1FNDdFYn4kVStqTiF6''@;'; put 'put ''LGpHQz8jOj9lVipKUzldOUYiTHxueWt0UEpEIyw0bzpAWSM0KFF6U0hwSEpzX2ojblJTZCpobGJUTmpYLFd5RmQ9cHF7Nit4K3lGVkk3K0wiL2xkR2FwNi99YEZeYl9rY1hNO2pjQT9JNyxbKEMrX18qMzQ7KnkvP3NuQitiZWp1Nkk1aHk+ZWtobiV+Z3JWM1lkfVFFP0NsdFB4fnJgUmU9Rkpw''@;'; put 'put ''OmdZfXwjNE5xIiRWMjJjKEssPFRfUEt5SDpbI0lSV1s1eyYwIU1jckgzOjhGRCh6OC8qV1FSN1JpTyhuNVFdKXdjXTQxbmhWXW5yYk9aaEttblAmI0gyPFYsfWU/T0djfCJfRlR0RF5yRHMkT2ljVzU/cFRIbE9nSWg0alh8ZXQ+VWx7aVNEYH07L206aUZlSFlSS3NJYjdWeFZ2LEh3SnNMdzJq''@;'; put 'put ''P1toZypifX05RDIveVZ6LEJHMT5dYltvIXRucz4iSUhVIiNRXTNwSnkuaHUickliR1VTaThfRFlkbnNgYWE9aWYscUQocjh4T1M8KmI/Qkd6PkhjN28zKWVXOUw0KzM+SSFIT1Z0V3t2eSJrb007cnNEaEBKV3sxR31NLntMfHZ8Mk0oTHhHSHEkUn1BRyg5WkhzIT9taHt3OCpRZzBHcF1JZ3tG''@;'; put 'put ''bSlRWSooJm5SN1EoNXM2R2F4ZDhyYTVoNGFDaS4+cng6QFlTWG1Xc3ZlRGtENihKdn06YX5wdWM1NnIvJGI6R35MPyI1KFFnY2x0R3c1PkZUKmJTRDpbVl11eXZWKUkhL29bMzpsczg8PE9iTUd7cE10JnEheDB7ellzbV40VVQkWSxCRz8meHlZPk1lenlpPTZyV1pSYyZTYl5IT3doSFg9KmZs''@;'; put 'put ''IXUjNDtyI1NQXSVKUD9XN3RpVUBdbnxZP0ckNG1fLlFIUjlHYTRGVEtBV19NSSVIRCs7NlhyNE16UiV5b3VKdlhPalhYQHhoRWdzeyg0RlRzK2Y+Kk1RRWk1WjNXXy5zemZzSlo7PUAzPF0sVnhAO2g0alh8ZS5RNlNzIVtBZnJQSj87ajo7NkpIS1JYcCRzfntZeXZGUTVkfH5YMldJYmZuRF42''@;'; put 'put ''bi9scDU+fUFkLlFdW1ozOl87MHl8PEN4PVUqVXgsdGxoT0RIT2t3VntZWGJfeEBXPHVPWHtUais5YyJ3VTRITX0rSE58OHshUS9iMio/ej1yJkI7TkBBQ35PY2wiZ09qbmlYcHxDb0kraUY5V1AsUltqWHtCVyNRbD0zWClaUmNIP1U7SFVxJGR7YT9CbFR7d0BMZnI5TVBVLzw6QiRVUk5kOjNP''@;'; put 'put ''amF0WUBSQ2FgUU8veStFMTEoOWYpWWJQOVtaKkJDRy49bzwoVmpjdmVjYEtCZCFMW2ghPHc0JkomX2B3PTh1dVY3JmQ4Lyl0IXV0Tj4qSzBbMUZ2ZDhiOzZ0NnYma2pxTHxNPmMpX3xZXSpLTHhBLlAySigqakwkWThBKHNZbSN8RGxAL3A1NlE6RUBCZU02WzdhXThkPnVSN0J+LGR0MHg3fnxP''@;'; put 'put ''MFl3WU9IfW54YmovJUxTRnVJT10iP3hCOlJnbm8oTjU/SVVXczVPLlJYOnFKP3xHTkg1R2F6fXB6JVo/NW90Wl9zVjM1LnRYbjlTbjV+fHpUY3taPFsqY2VyaFhYfFhbYDxMNFIzWHdSbT5PSkhYI01UTXBDaTR2RH1VZ3xATytkMCZFSixHTHNyazl7bXlFczdDel8uLm5JPkR4aFpMJEE4eWh1''@;'; put 'put ''a1swLkUuU3RhP19FOyhYdUA9PXhBJX16KztVLis4aH1iMltadFNIYENKb1J9UiF9bUVeeS9JT3M5WUYqY0V4I2lJNyhVRV9Nc3Y7JkZCcklYXk5sOyY7YTJpWFJSeEFZQU1sLGl2Z1NmPyZyR2ZzKUxgZGd7ZE02ZnhZRXhaZ0lpNHZEampKfThMUURtWkxCJUhzNCpCIio8JjZGZ0FZTGYjRGhU''@;'; put 'put ''TiUhKFQhe2pHXVchTV1MbmhZUmVNQ013KngibEI6PktwPis+ck1AezNdcjMkJSZGbzNUL3RoWlJ0bXh5KEM9fmE/MTxBVkNlO3gzOD1SW2N1PyY6L3NWPVhbbkU+akt4IUBweH1zQ18+X0UkSHxsQ1QkKWJ4fS5hbm1yLkpkVkU/KElQR1lSRFg/JjNdJGVHRGE/REk2Lz1QOT91SCY0Lk98P09I''@;'; put 'put ''cHRJTyJ9T1lOMFl3Kj5SY1Vod0tQR1lSNlk9W0pHNUx+TEJOQCZMZ3w8QCFzKU9McD88Vmx4I3I2dCZUVkIrcitkeDdyKDZscDgkUzg3OF4yI1c2Ti56aEIhP0R0TFBZMWU+dVI3R08rYiF1eTFxJi58Wlh8WHRCdy9ZX01WZXU9PiY5JlRWQjxoTnEpSEEpOHlbd1JsJlRLYCZSezVfTX0qOyRe''@;'; put 'put ''P3ghUFhhKmVDPVdZKHdfNnhHKmVDRk8+X3g8RWJnKmVDNlAwXzZCbCUkMUY/MSs4I3dLY2NOQkJdbT9xIX1iSUBaR3hVLkhHUXxCcU9ZRGZKUj8kQkwiITwpcyNXeTNmRExtcDUrYn0+UEVNUjQjdX5xYlZlPzw3bUBzQDBVfXhETmleSFJAPHhJVi5ZRkdPcWdPQVJDNWp4JkZfeVhleVhPan13''@;'; put 'put ''fV9eWVUlNGJHQFVsbVZ3P14qXXVEc3sqSEg7ZFN7akdibjN1ciE0Yj59JUQoYXdWbE5iaXBVTlhRdXlYVTMyW35DJCImfXMhT1p0fCl0aVhifHlVNTA9X1h8VmpaXz1AcX0pdFVSaXt7IW0uZFNiY1R0akkqPDhodHw2eG0ifkdIL0pxdyY1TzQoMkZrfGQ0NVdeTT57MiltZ1lYbWhRLmpCKCpg''@;'; put 'put ''fE8yNiQhSmU2bXg+YGlYcT44WDgucHg+YGhgbz5wR1hoK081aGRGM3xSSGpYREVoQnxAZl9XPFlnOX5Za2toVzpNbktWXU1kT1g5TVpsJU83MFhSeEheTks0UDtZT3Z7R34sbFc3eG5sW0ZeKTF8V196L2ZpUyY0Z09Kam46S0YmPHBTRlFPeEpoQnkoOGhNOkBZSFRtV2h3X0JvLmxkSFRIalh1''@;'; put 'put ''RCl0W3hYSylrUmtONF4jdz98fGlHbjg0InJhM1ldLy46YTlWNl1uTWAiYmxAQ2JNV2BZM2NscDVCLipid3t8aVFiPXV7IXBpWXdCUUkkVGtQRCQ0RyNrSVR5N2NGWndKTmsiTjs3QD1QaiRPK1A6dnVzbzVDfCtFY2hdT3dQc009amAlRlRVOksmIVBOfHh3d1V2NlRxVjk0VG5CU242RXl5O0tl''@;'; put 'put ''c0tIZDRoZ1ZfWCZvNSlkTnx+dzh3PFVmTU5oSnYxRDdXa1twaEI1OG03TH1rMzNkJjt9R1ZjN18xKy43Sz9tbD54XUh4Lk4wUmpkaklxc2pYR1p2Rko1WTFiYndKR1pdcyJJYk1mL2xkWnp6IWpeO1F+by9dMnssTVtAQEZnQT5gcnNabGoxJlRxIUQ6KnVLYEVENjFfT35zK3tiJHw9Rl1rUk9n''@;'; put 'put ''cUxoZyVOM2BMe2ZZWTBjP2QjL08zVDwwdkR8Q09zK1s/ZWBgcSEuTF0+fk0/JlVTYjo4WFBeKmtyUm8vTVA3cix1cEQxdHp9cyFTdGdPJXRATi99eVVGQEV3eFNvNjZ7VUxhT1NLRHpuNGJWWn0qNH53OHdHK3l0PktqfEt3JVc3Uzh0X2g5cnl2K3hpeDIhe3pdfDZjT2I4eDIhRTU+ck5dRXwu''@;'; put 'put ''ImFXa21UWDsmM19xQ1h1SXRkOTFfQCRBVl5jMmM0TWFWKCpMcjxFeClqQmR2U2UoZFRIJC9YUmd9aSksWGB7RSgqciNfU0pJPENRMD99Rz8yZWNsMGskRUk7ZCZGR10xSyI3biVFeE86Pj1lMFp8SV1yU1Z7KHViK2ZRSn4+RCZ5ZDQjNW1XZDpJdXtpIUZFPnBZa3A2akQ/aDY7JjlvVF9qNDU8''@;'; put 'put ''Yy4ramsiVUBzT2Blc0BUSTlvciRmW3lLMTFHJn5kMlRDa3VUb3NiMGAlT1gxKEIrP19nb0JYN3ZZcl1VXk5Zb21mUzhrNCN2ZHwrMmI8X0ZBTTRMQ2xXTnpEX145cWBgKklRZHAwSEclYHgwdlpjMHQ8eVFDUz9XcDs/ST0iLk84aCp0TDlOOlp1UEljYVpPYCExNGdZLkREfFZLRUc1a2ZIK1gq''@;'; put 'put ''WUgmeio9UENRTn5zY2NneHdrcDp6XT5ST1F8YVEwO1tfQik5YXtyIltqaDw0NTxkKnxBeyUyYWV2PjlNKXNSN1tfbXguTFZfTTNUVmYzJCRNZD1NLjJUdzRxVEthIUs2MzN2MCtvO2E1X113TUl1TlA+UjBqIyp6dz9YZnErUy9CMnVDNVVjI356cnx7KmI4PENiJnJ2QDwmKXVOKlddMzFFSl9S''@;'; put 'put ''QnpwSWNEdlsuaEkhY0hFPGNDWjowVzF2cE5kd2U3eytKcVAsXWFxQlRWTVJxYFUqLnlJWVsuWn45dFNgP0I1JT96YyJHJnZWTSQydytAQHZ1PkUsb1s3I316LDQkcjVDeCtSZFcvLCZJWX5yVVpZSXxOSkYxZUJbYkFRSHw/ZSI/UXJgWEtLZGdmKTRuPjZrMWV3dzg/U19adVVxdW00aVtOJFZM''@;'; put 'put ''VXJWTzVSd2pjZHJmQiRyXUd0RXdMRHpyT3Y6cyZuWWo+d0JmckIyNiUpV3lHdUJLJTNPciM2eE91W1dfe21hfTZKVGBsJHk4QltJKV9EdWBrVyssNFdxTWM0YzQwSVglOVNWbnVXRC5vU1gyfDdaL0klNE8pUkV6XWsqJEQkY3NNRXxeZDBvNmVbP21QJEIxMkVAMktSaCMsSCRsLH1hMClmLkJz''@;'; put 'put ''PzRXaDQrXiNfQkxzI3thTTpGKkIoTn4jcWJkeztOIj47Pl0meEd5VU40QXNESEA7REtRW2hWU2AqXUBlNltTXy9QOUd2W3RhPWZUTiR5b2tfMTVDYXx4OV1LUS9PUXVLL3QwJFZxaXswcnR1PG5zaCRAbz9gJk0ma2h6fCJRbDE6a2loJn5FZSEwb0ZsKzspZnxyUkl0JS9Zb1ZMbXs7T2x6emQp''@;'; put 'put ''IkhWIjpzeGJqaDU1cmJpL0hlN25BdVQ9fEd9fXtFbWR+SU9gbFEvSFhsQ3B5cyEjQCwqMWdPeDBzZn45XnlMNi90SF1zM04/dytCZ2NhSkk0clBXclE+KzNra1M+IzxgbDgpbDVZUnRDUU5AWDcoMDVBVWs1dj9QPmBxRyZ+dzIjdk9+WylMeWh2aSsmfGl5UlYvSFF1U35uLCpqaGp7fEt4JTlP''@;'; put 'put ''MHt6NG8+QXIrJj95XUsvb1RrbWgxanh6Tn1tdyticjA2N15DUlhUO3xnVzhrbFcvMW1qbFVdPGFCVmJdTmFAKSthY1hAYk9jd0spXjdtZj1hQC4vaT5AQk5Hb19ydWFEZFBzZ0YmQil3RnhuWUlgLmFsd0s7ZW14PTFNJndad0sxRmUkVSNLYF1KeiU8Uns+fUx4aHJEc3JWTTAzJiR7XSU0Um5f''@;'; put 'put ''OS5GKWBbOFtlY2hKYFkiJSxzQjMocVgyYD0oa0k1RF15LHVSN2FQY19yVjp3XmNVTi5GKn1PRVVifXBdJlh4RlYzeT0xOW5VPm5VI2F4cDMjQ1R3fXoxPDIkcjR6TGFwW2t2dD4vdEQ0aV1xWXRHc30iXyhJYm4xU3Y5YmlifmBFN35lci54TVpnejprNTh6MztWSCYyeG8vQlY3cy8mbnJESj87''@;'; put 'put ''RXwmVTg8X2xtMWRDR0ZVcEoxJUNrZkdfaypZRCM/NEcjZ1Z9YEgkWjxQTkpIVngvMW08NlpwXWteJjNSU3hfd0t8XiZ5a3F9T2MjPT5IZ3tbRmlNLFZLe2k6TylvUEYqV3pvT09NajpbeX13OmtbQVJfRURsPkorMUM1cllVeEt6TDdMV3x5WEpzSyx9PjlkW09vRnZfcE0+PSNFM19KUnE+dmFI''@;'; put 'put ''bWQkb1BDKy45eXFEKXp8OV9sMT5ZUUgmeGQuWT97V2dHcE51OjxAcCt5ck12PGVpX2YpRCJ2VHNzfkxHJixVVzxzKTltYn0qYkNfRklLcjtUa0lhSWFJdm4kOXZmcS5FSlo/JFVDd2cxSCh6X0doJVYqUEZWTSlgRTcqK2pPdXkxMTdIPkVma2h8e3hYeXlePz1lbGpsb2QuMk4iL0xibzFOWmA6''@;'; put 'put ''TGtlMkUsLiRgdWV8aHpgXkI8TFZSVj87QWttZGN4RjdLfkBLSyl8Nj4mMihGeDRgYjFnVk59Z2EvJmVgMTR2Pl9JKiZ+ZGt5RW5eeF1HfVtuLzFXKXJQd3RzfVUmQ31ic040VHdpM1hdPnRfXyNsaEZaW0JmdjdgSj92aDdZMUlNRCVWeDtPekJ4XTFZRyh+RVlhcyQ0XnN5TEcmMUpfJGR4PmBr''@;'; put 'put ''QVB8ST45YWVJZnt2RSgiKnlhRCY5cCosNHlEJTBHcTd3VnVpeXl8Zj5IV1pjdnwoJX1wP3s/eSxRUiF1Sj40WW4jY3FrJUtHP0twKVFoLytCbGgiS2I9S180cmJ2b2hGK1tad1pZO2opR3NdWmBeeDxNVmU0QGV3IzdiOyE3LD5YI3IhTnZyLDZYK0ZbO0U4Qyh5Smx5Sy4wMH1BPzdtMkwpQHpZ''@;'; put 'put ''aHdYTW9DW0tYP3hPPyl8MkZaTkx4QDtrN1hkUy5gQHRAckMsLzciR1lSakJBXy98L3lUbnZjaWg3V0hMMltRbHFfMTQxJT5MMntgRjo5dyZtOFphYiNId1p8amhOaGZEYDtEPy5afXRkdU5gRyNYX2F+PURFPmg/ZGFnWW0jTD95S0RUenJfRGFJbmZWTGpMaFNOWjwsOUVuYG8rW0ZxY0h0Pikk''@;'; put 'put ''cis6cSNeeW5OZjJjWUNrPj1NIj1ac0lsVD4xQnZmL1ZaUyJCLz4wNnkjclcySmB+TzpWaDFpUjckQzNyWHpFZD9GITREIkRGRG1ifU1zYk9Fc3w0L2VKajBxN0Erd3A6VWZXQC9hRm1NLFVMIyxtIn1IL1NtSTQqaD87MiVmYk58TFRoLnZWPj9pW3I+JHElY1FON0UrTFIkMkJ0PnZMPlpBcGkj''@;'; put 'put ''b2lMW0BSIS95amxafktQb0kxe093aXA3LH5ZS3l1Tzc6bVUmMTwsTVA/TzAoWnlHTl1reUI1V3ZhZj8mU04uRFlEP1Arb3hQe0M1UllAUmFodj0sRHZPLylFTHtuR0FwKUQrJWN3c3FidThzXnw1dzIjNHFNVlBQL19oTWlDVSwrYVZAQElJO0tkZC81eiUkemRgUnc+dGNzclZPXzMpVGhCOURr''@;'; put 'put ''MShuMSVaXyQ5JHUjW2d1RVkpLDBiayxVNT5rTCRHKVpoPCs0YHsrPVRIYVMmV0Z8XUBwOkl+UXFfS293PkY1SCk/N20/UGMxPl1Fc2VBWEhXXjprUkMvSmkzQjtxXWpbOz1ecXBjIzNJQ31IL2Q1WVNDekdvJEAhWGdqRXpTayV+P1Z+IyxVRmpHem8kTkx0KlJDRk0/Y3haNkRGLihyXVRGNTpP''@;'; put 'put ''JEZ7XUVDUW91K1lPVEtnIVFRVXRUcG0ueWE+O18sUlhCNzkybmosNzg8eGNmdjomSyN1U0V7OEwiczZMRU1ONTk/Xzh2Pn10QHV4WnRRd3NxeVtCM3I0RDN0Kjk9UDp3cyZwMSZIOnwqdlI8RDlJbFMpTS47azNbdnQvNVRfekokdX05Y1E2X3NrZDI8TTRjTE5kY0FrOiZSVDE4OFVEZFtLa1kw''@;'; put 'put ''SjxYL1YrenxieGJ+d2IzQXoxTzxZfDVZTE1zTHtlKzpGcEkubjpPQilMT0ZbQSgjblRfNjRqdU5kZG1od0c4YmJ2NGVKZ3xVRnpLQHk1UWI5cz9Ma2Q1Pix+WkF+M0xdQl0mU3lqZWU9S294WCkhLypoYX5yJnYzV15iSGlmdTU0WEldVz51XzZTcld6VW5WeFImMmZCSzcjVTl4dlZxQSFsR18v''@;'; put 'put ''Tk90MCY1KCo0VlEpUiZhK2lFb0xPPFVIWi94RHlYVjtIQ1V0RjI+fDEoN2ROOXw2PzgwWS8mfkYrcng1fDNpM01ZZGQ3anQ2SS5+dCJXQT0vX21ITn1fYVs5RmdFYHFbRGR5YGFuQ3QxRV95YUBlbjExaUcpUV8kYmx+W1ZDZjQ0dylJUUx2dlBnZFpFO2tLS3NNP1J4fFQqamVYW3JxZlhfVndM''@;'; put 'put ''OTZ6UyIxMmh8PkEmVGlkcjdxUGxfRUxTPENReSZJaW97JU1OPkw5YENUbk0qR2l5SzMyPkhRKWAuQ3lqYnthej95KGp5Kl8hWjEhNFgmQzZkNEQ1Iyh2QWImO3pxb1k+Q2tAbjZsLzdCUEpIRGZKR1ZUTmhkWmssaWBUSSZeKEJ0NndSRDs+d1tdTUFJUmBJTFpoIVpBSGFeOzJ7OmAsciM8ITht''@;'; put 'put ''LG5ydmRxJFt5Ti54KFt9ejFfY1h+TjZwckYzbF1oM04ueEBANGp7LFUybltVdnJtQCtJJG5WIjljYj5JS2B9em1ffC5wbVRvOyI/MS5NK1pLQl0raDVBND4oQmVCYU80VmB6Z0JhcEVwaiFjYDNHXjBXeywmPChgbVlfZXtmI11AKkl1PzFSMHBbd2heZVB9RzlwUEl+UWVSLyIhOmxvJmtseyws''@;'; put 'put ''dCZgP3k1MkxUJl9AO3VicjhIfjtkJkh4cyk3NGtYJUN5JUthbHssa3pwW2Q6ay5kOmw5UTtYSF0rWjU7cUlDNDJjUUkyc2hrbCREe3IwN2NiT0laY3hnQHx7Y25JeE4od09dP2U9ZnFqSnpwT3k0KX5SMTglV35lOVtuPl8iMiQ0fXo7OEBUJUh6dXVLYzV9akU2czpCRiV7NWEsZlJYR3shO0V3''@;'; put 'put ''KTw/QFZSLyojQFthaD1sZUhsXV81cS91PzldVVdFVEdSaERrMERuOiNANWhSXXdsck5FfWUxcThDfmNhKDB1cyI1S1BZKF4vYHU1aF9bN1VfXWc3TDJ7ITBheyx0aW4/Si4mYEprenxFU1R7SlU6U2lWYE40Sl5lfXFDSn5xRUdmNHI2RlVbfFVTMWxMbEN5YHJEMmZpM0Q6U3pTT1N+JkMuTCZx''@;'; put 'put ''RX0kRVh7LFBKcVskKVltdGZCbGBybmlJVClQZCpzaHV8VEleZX18bHdwUFVLO3Q/MVVAXS5rSiVMMDJxRz81c2g5azUxJlJeQyMzT1JydT8xR0hdLmBnY2lvODIrVnYidHhOWnVDa2g5aCVhJD4maUUpQiEvWUJOMyZIYkxHYXJtT1plRDhpVHYmZiolTmxicENDZXE7THNrLCFsKzNtZiNVLyl8''@;'; put 'put ''MV9KdTtQcGE0XnVwKEZ6RCpGWiNJdHJHcT9vS34iOXs1Oz5YV1tMdCIoPXM7JSZQYTE2Uz0zJl8yZXA9Zk0wQHk9ckIhLDd7NkE7a211fCVmR2xOZEJYJlE4NUNHcms0R1hUSCIkeWs2UmdMOEhGW21LPURjPXtaPylHYnM4UkMvdEw/MjR8TlUuYEp+I3p7S0cwXy57KkYpXyhFNWgyWzxSX2V1''@;'; put 'put ''aDp2Wjg/MVBAQC5QfTo5dX5hQSIjcnN9MyklUkNwakwvbFZMOFcoPi5vKjRoa1tePDo5IWBGXV47WXpqJD8xXSlALnJxeUkiNXhoMmsmUnhrKH1PYUshYHIoIWFdVjt+Ukkrc2hRdjdpO0ImIV5qNFddK21Tfi4sd3p5aXZ6eTJPV1tHKDo5M2BNPV1lL3w+bGZ2UjJXQzUqc2hJW1U1Ojl3YFQu''@;'; put 'put ''XjsvTHhOekFwfG5QW316KihVVig9LHBgYShdZX0xeE5Qc2tdP2VtITBRKSJeK0U0XnElSDZ7VDtzPUh2Kn5aLyIhTTVoJVp6VDt9Sn1icVZ1ekgsLntzTCRBVmAlKU0kTH1icUJULHFEQ29GfUpBNXFXe10xMDtHKktAUSRDdGk5aTtUW1pYLEhRN0tVWHBTV3NVL0pqQTQmdmwuVm49a2Rta3t3''@;'; put 'put ''L20+QixMITZlVThzal1lL3R0ZXh2VThZPVhWPGl5Xl42QCw1X2N5KWJJbFBfbntlJGByMVZQOW9OPlQ1SiNkcXs8QHN2U3ZxTDUmPXFiTHhFXyUjVFBYcy43OGNXbEhUSi59WXU/KTFWdkUiWiErTCFQNDJPci8wITF8ZntSRTUqaHVdWT10eXZyfCtbOUNlM1F0eXFWIjs5X2I1N3BqY3lzVkw4''@;'; put 'put ''OWg6akcxTDhWd1cvJkdtOz98KlAmSG5zdz80VlZ0PzFTUz0ua0pgOyF8cmV8bDlzPmB0ZTo5ZGA9NnlPNzJ+SShsKXE9dT9OOTNke1hCL25ZO1c6Ok1AfGlZUXIjaSRiVEQzTiRwRFtAOzd8aGN9XTt9O04oMFtOLHo5VWd7e104c0E/WmIkXV8uKTlWYFUxOld7LDI8UyR1fCtBcGpMRndWUGd2''@;'; put 'put ''Oz8xd00+LjZbT21aYkFdJF9AO3wxImI4YGB+cm5pVzRqYjAzQjJbV1VkY2EoLyg/MU5TdFtAJSRfMWd+P2dzI2kmUkQrKTNGZT0jcjYsUFt8e00mSD0wJlJ0QyIuYG1lNTw+dDh9ajk9JmBWZ3B8YFBrey9oJlJZWzgzMW1WQytqWS4/MXQ1XS5EJHgsQj1CVDNOMm5YWz0pUEZ0UFg9anguS09i''@;'; put 'put ''KSxwanEuXjMoRT05T2B0InR7ZShlX05ZcTR+QDRaKGA8cnNwa3NqPkc7VXQ/MTNvPy4rRGA8dGByR3tyLHk+RG4sPzE0YDwuTVsjV2BhbURxWyElOkBOMiMufUApc0FBLHpvVFlgTjlDLC8kSyNRWTFxND8lSUJ0PzE8ellnZGR0aE5bfS5JNypseyxEMnFbLHNdZVlzU0wmUjJOJDNBe0pdWShh''@;'; put 'put ''Ljl8RjhxfUB1UWZUP0VGcTgiL3o9Kyh3cy56alNQe25QRHAkSGtYN0RUNlZyIWVZdXhOLGtZQ2U5PnFQa3M8dGBTT3l4TzMpP1lCbTxNVGlWME5Ia21dP2VZfiMlaGE4aE1qWUNwakMucFZLUEhAV21MbCNsYHJueWNiTy5TIXNnQHw4S3NwOzAmUiYqLzM6IzJVdm4yaFhlS3V8fWJMTGtAfU0s''@;'; put 'put ''RDJRNDFnPmZaIztsTy5WZVZifXxhLGElKX5QJUxCXmU4O0dLSDo/MXdCX04jfVpNOHRraFkhREErbzheb2BzTnBQbXQucypod3VFfTAoOTxkP3s7M35ecGMpMXNKbjV+NChObkFnTUxzUDIhWDsvQ1o/Wlc2PVdpeXNfOUYpMHw2KGx+VyVidlZ+ZU0kY0J7UiJ3fkI5PCE6SXR8KmFEUyZSSEMi''@;'; put 'put ''LiY/LzlBYHBtXjt0fDRudHtjKDsqaTMuO1NRYDtnaVEyRHI8Pyk5cSlNUlNkWjU5X3JhYiwjUH5KTncpKnIqSmxRNTwxVzVxRXJ4Vip3OEFbOSNRZjYrTWJwSHF8bzhGaV47cXxsUXk0fWoxKyhgVkF8bCh9PUhzcGhzKndnPTNFXjttcU8veEc8X21fOm59XSV9Ui9qeTRseVFwb2N9V04hQWg0''@;'; put 'put ''UShbfE8vUSgxXk9CdDFdK01JW1YwSk46anZyaSZSeSopM0J5c1ZAKDo4LzVjYnp+eFtYTEovSUBkOjVtNmJ4JEhVflMjcUVmYVI8Jlp4eHJ3LE5tT2g6R2poN11FJi9fa04wOVp+dF8qdkwreVBsflAwK0lEPzUpO1Z6RlJ1aCJQVnUpN1RJKSZYPEtZdnBTL3wxa1ZhUWIlI28wQzEmUnRZKzMq''@;'; put 'put ''YTlLfHZfaEhPNFM/W2opJGsmUipAIzMoKXk4JlJYNiEzPSVbR2VheE5qd1h7bWleTjxpfXY/MXBnMSJufHtoX2p7LGxOaiVsWG4xcDx+Un1iNSM2U0tUQi5nK0FmXys/SEU1UXozIV8uZGlIP1VAeExTMjJpZDhAI3RHJVJxal13ezN9OTt6MFB8YEBrWHU+WSFuaWdhLyZHaTtyRDJENT9lRCI0''@;'; put 'put ''cU4xWCJacTciTW00TiZ5NHFOZjVTLHpDY3BNMGlwLDs1ZCxKSERuXTp6PFg/VjBwWiJiOzRyRyJ5TmV2ZFl7a0xUelNbNTcpVW1MbExYUyw2QzZ8TylhRHBqXkYjM0lCUEZdTDNMcGo+d3VWUHdCckFNWG0pcUx1Iz1eJiloS1RqJntVSnl4dyFiSUFVYl04djteZ0tUMCMoZCVLNl1zbiZCIWJk''@;'; put 'put ''JVBXP01wamQsbS8mNjs8e1l5RzdVayk1ZDhhK2t0ZlBiJjNnJj0yfUdUcmE7TylkS2RMVWJgREVbNFRyXjwlO3p0KT1WUkN4fCE3akVTKTt6dCk6VnNKQW1qfVJteE5mY0NyY21JSDFxeE5nLy9xRFs4fVpEUVZ4TkpldmwpMzdAYjRzIiVvYnU1Mmllcml6VkNQXSNxTm5xXmBRO100bSl5dkA8''@;'; put 'put ''KHpZMmE6fFU7L2UmJW9eY3FqOURWPCZvWDlYNSIzeFddQW9bOGRxajVEVGRpJXBUI3dqJVpUcXdtKTllViRfK1Ewei9wW3QsTkRRPmglUSFjYiE0bHgyVnE/YFAoYCVBc0RoViIzN04iYjUxXS4sNl8rXUdYbyxbS0w8PFc6fkBoJXI5MWtNXUt1My49KGFTYE13TVZELnZUbl9NPTFiaytsKzNR''@;'; put 'put ''JW1tKUpII31qJih8ITQoPnEiXnYxO3pOKVtWMzZ7YzZOWnUiVkNQcWpFITpdWDZiaytEVm5LeDZsX11gLEl4JngxaExpcEthOnIkbGwoMzx4PW0vX1E7VFRxcDhkY104LEldJTMvYWY6S3oxYGFtfDM+cV5NaFVWbUYuKFEybCgzWUo6Z0VycztqVj0hMEdwJk03bkpUN0xfYzptIyhbJTNIUVBD''@;'; put 'put ''Um1QeHgjbjt7LFU2PmJsO2lWeFMzJUl7Kzg8bnFbeDclL3g3YEZsMjl6RCs5ZVU7ZDFVLjk4WHcmWjMuZDtpVj5ETHUoRVYxd3Q+U0p7MjhgRX1TcUdeKGM4NVFnbypgMnRJYFp2L3duIUUsfTt3N2N7PDMkamMwJWM9eGUqKXVxLiFdX0VPQl5nYV1AViUvNz06QClncy8+MGJUQFNndCVZYmp3''@;'; put 'put ''UDBfXyk6ZVBCX2suKnNpZFhjLjU4X1hmY0l3UXo/U3ZVOUZFXltEan06RmohVEpDXi51MGZgdk9HcTJHOXJ1c0JJUTFxbDQzc0RyLnt3UFdFYURhb1k8TS5TPVZFW1hIJWJ5TSwpdXhKcE90Kj9Xa2N3YUlrfUxtQE1mS0dfY1UweVYmZi8+MVh3Y2N8ZWloOyhocWRgQ2Mle2UjUio1dE1YLzxN''@;'; put 'put ''JnJdaEkoVEk2e3ZqeV80Sl1lWnxKRXE4Nn0jQiZIZHNXdFdyI3pmOi9TMWhbPlJ5XmVPfjwiRDgvZ3M6OztKeDMub204YWtqaFVdSzM5bUQpcyk7Yjk0LHhDNnxZLG9kbXNkfSRHZyNmZkZXTjNDZWlIO1tvOTZzfW1VO1NyaExERC9fbU1kbTdgb21pQjgufDhwa3MxWmFaVy5vNF0yJnk6bDhn''@;'; put 'put ''e1hDbDhme1pSNDlaOyZYYyZAZWgiNiYkZX1GZXJHOVFLZUA7ISp2Syo7Z2RJYTcrRD9lZjhQfT5leTc3VTN5bC5CZU1MTzNsMjZRU2N5SC4zUEppamVlakBrfkczMjYhYi9fQDs2ZlZIYUlhOnQ2Nl00VGk+YmdIYn0xdjVzaFA2ITlFQF4uel49fS9le25uUG42eD5CY3B6Z2gsQyZGRXI7Ol4z''@;'; put 'put ''KnFUXzshNjkmd204a0BsKjZQUTkyV1locDB0WzVkSntvT1NyUTY4NjBaS2AsMmFNMFRKI15+X0NPXVtjQEorZGp9cytTYil4VE4peDE/KTk0MnJKe05+JmhiZz5ZMkVyNmR6Vj80ODZQWXsvVmFRYSVjfUdkOkk1blt1JXohO3ZSc14hVy9RZ2BvW2xdM3I3YDM4d3RHPlZ8R3VeeXo0PyFQfWJq''@;'; put 'put ''JSw5TytTQko8Xm09aGF1Iik1WSw/LD8zR2M/Lk9pJE9KR3U+YFVJRyhJYCsvan0pIURPMD9GS31iPXw1d2pQWyQyVVBid3QwNjcpYkwhaE06TUJzeGNeaCRUV0V0NFMxW2dUXn5nPV1LaWsjJDZ8fiRJL0cyekU2cT14In48LzVSKTMuNzhLL3ssSzxabUZlY2sjWjI8OF1NZ1lnIyNAQ1M/RD92''@;'; put 'put ''cVU+LmpSQ348aVtlN29DdzoidC5UaVZYSk1oeUZtNV0/eiFkSEQ7fF0vdkdeWHhNIXtndktXKl5MbUU2PSNSYSgrRmRbZV9ufk9tfFlNS1EsUmVNRTx4OSw5VSRIT2F2cmJ2IXlNfCUrfCF7cClvIm1BME1NJSZ5WTJqWF1EIyVTQEd1VXcjd0p6ZXBCNTNXRDVnUFYyV2ldPy5rejk3Wi5oVmNo''@;'; put 'put ''cEpVVTViWklmVyhjLjM4KSJGKG45ZXFEVUZ0Pk9gUC81KFFgKU5uPWdyK3pPWHR7b1YsVD5AOmwwQGtJUFdRQ2xyS2VVVllrN1hsbUUsa2ZhPHo+QjNIViohUEF3KEFNWSZdVWkrKGsrY1A8JVVjQnFPU3JvYSRLQCk3ZSVZQktNbUpNaXdHYnZIOT9bVWUwTCtFIzR9UWJ8WmokM2EkTjN8bSM1''@;'; put 'put ''Q3djITFJVDc5UyMvNjBGX1g/U0NHb3lfTEpXIilmVSRvfGZ0OncjQ25sb0xKLkJOTTRIOTp7Sjp4OUQ1UyYvL2t5aEhKPV1JUm5rYiVCaG1pd09hYmN4MUg5dHAiRF1Wd2JnYzlqZmJfYmJsLkR4VCVDTyRvVU8xZzsxWE9mKWo9WWU3LGx+WDB3THVVQFdlRSEqalpVakV7b113Wm5KTSE7XVAo''@;'; put 'put ''ai8pOzA4TEpwWC97QUV3UCg5O0o7eD1EODZDbkBLR101X01HbHtsRVAqXlFILzNHMmtUY2NpeEdLQCE+PGNYaHdYM31SdkxkeE5GPiN2SGwoMXhNU0NrcDRlaTxZVGNgZ1QrJWVSTUdac1Q0SlFrN0QuO0VlKGdGOFZSS0BSNWF5QlJXcCs8ajJpRHl1XVRVWTFse01+cnxsYSwsOyEuZFRvYmJ3''@;'; put 'put ''LjhbIik2Sz0kP0ZpUiJiSXgmOldjR1FnMyM3QGJCcnozZ01TLzVLZTEraHFbJV1JSGxOMD9fNWBVQyJbXWBJeyFwcClKI0xNWU4uV1lhOmMoRkckLHJlNixhbXg4b3lhJl1lZT5hLCN9b0w7anc/I0dHOkR1LlBiLDdAeU8jOlEmIThkdiR3fmxCIUcidWY/LlBIZEZkc0c/TmdFaUo4Omh6QE51''@;'; put 'put ''fG91V28iYDZVMGNQcCJ1aHg0WjpEMiFOJX1RQHRZOEFLdVg2KVo4e1cjSm5lI0dpaXtCMml+RCI5JWVgemdocnI7dFQsdE8rL0hgd1RJS2laWzJbL1ZkdihMbjo2NjV0Jmh0Q056L3RjJChQMHR4aCNUMEhFRHlaKnMuUVExTStEcU9OLzsvLDtIa2EvI2NhZjJsbSVIREI9QUZfI0VUTUdzLkRs''@;'; put 'put ''ajBXYVZqaF49aUwoTWkoTTFmTWJwdj19R0Eqe3FsNHR+ZC80XWl9MHw5YkdVLHd5KiVgdWFlPllENj5OPCk3WTdXJU9aW0M0eUNmXU1lbUBfaX05bjMsLzNXJXQ/P1R6SzMmRzUpJHBPVXEzYnY9Tn5yRlhGXUdbbzc/NiFyXyltQzY6O2h6eSRLL0MoPDB2RjF1MCtJVWtEX0MuRzU1KzxVaXho''@;'; put 'put ''ZVBpYXl2TmF0dlptJSU7YzJnVEhrcC9lWTZbaW01KVpWaGw8QjVtJUphYThvJlgmNFVmOk9EZUdgODp7SiYwa2Qpd2MzdlUlL3UwKGdVWGB0MS54RDAiJktHeSlmMHo8bHxXNlVdYFJhMTEyK1o8bmVPRmtCSk02Mj1Ca1o1UTpDPU5HOG8+YjpxT2xIW0VEIjQ0QSUrOUM4PT9AOlN0LHkpZDFb''@;'; put 'put ''JnFXUythRGVvXkMiLkgmVCUkP3YjKUxVKjVCOHVtRmhuLEAyZ2BGbUtTWGRhOF83Tj4odzA0Km49RDt9fkFuVUUoOTc/W2ZkVGQmYWlXMHFTcGVMfmw8ZDhgZ1pkQl1uSC89MDtSR2ZDOF5PSWhGZGY/SVUqdTwsZnpeSiI3XzdHJVl7P1YwSEIwa1dKYm9Ifmx+T1g5KFovTyI0IiVTWjNjJkx1''@;'; put 'put ''bH5PJl4zLytFWW94RFZwNzphTFYvcEhwOVM/SEdLd18rQFo7WnpvJmZMciQwcFVjcDdkWjlGYnc/K0tzWT1ZW3kjPUVIRDpAM1EsPUhONztPZSVKKjJjO1RsQH0iNUcvdFM4O09KPjR6SEIxb1osMEQzdzZJeC9sSFp5VlJiQi5beT1OfkxIL3h+d2ZSIVFyYV5rXmA2Olp8b0I/SXNZcEUzJDdO''@;'; put 'put ''UG1HMm0sIWZZQjV8c1l7OUNiS0VTS0AiL1p8eHgofWo9M0tAPmRCZlR3PHloWiQoMHxANik3ciVZSDdFa09rJiEhVT5+bl9iMS59d2ZHWExsUGo5dEdnWWc0KTc9JiNUaWlENTlyMCtEZiQybGwjd0pTazhGOTRvLm15Lz5JWEdAIzNAOilEdnt4emZtV2ZkLkhHcWZedzdlOUMiJGZyfnU5Nz9d''@;'; put 'put ''aCN4fTZ3e1k0TDNpNUg6ZS43NnlDRTl8V18hfCJsRUhnZ11hNF1uTjkoU1FlLkhpcGU3diN2IVNvXkRqI0hOX3A0JTV4QjUsUj1CMDhwMkgkMWpdXVFPTE59NDRNNjJ7MTsjWGxtbFlRTFU/Pk81VmpnK3clZHp0OyFpV3llMCFYZkh6TE1BUjF0WW8yPjxrYT1NTUBuSCRXTHp6JWlqY2QrJTFr''@;'; put 'put ''dC5EM0E6JVpMRGN8dDsuOjA5KUw+d0JZMmojWmBVSixZNj9bODphSFdhMmFANlpVQ0F4bVIuTmssIWdIcDA9ZWlNeSsmPCxSMFk7ZWIpMUQsOiI4ZExMInZhVl8yMGswS28md0c6VyEhdko9YW85YXlfczFVOEYxNUA8ZipTSmdqbCFQYlFsLz9Pb3U8SXlAP0pEMUc8QSkiYU5VXnVVSGNJQiMp''@;'; put 'put ''NnM3TWhoMjFCakdJP1l9ITBSLzVrQDdpOSojQG87cmZYKkQ4ZDwlXjVaWzBlfkFSMGFiLkNKKiNIPE46WjlfYEhGSzl2PF9CeFZKcEMmczpaVW5iPyksZTViZ1skTmUlTFdOOUlxM3BqQnR6Zm1XPnQ4WnZ1XjVkP0NJRmJTdEBaU19CKklaajVzN0FRc2MsajhjPkl5Ml4zeHQmPElyMFlHTkx6''@;'; put 'put ''aToqPD9DK0g+UmZeTVU+RWJCYGgkZkd0TmpmUyR6LHBKW2NRWUdrU0xOVW9PST9MInlLWjlfMGVvdCJ4N29qcH1XI05SUVV5bz5DdS5MQUAjSC43TUhkWHNWS1o0XmRaQE0rbjp3ezYkaXdxb0skIzpyYFUqPyh6b1hMZm1VYW09T1k4UXpgV2NhbHZ8V0x1R25AN2tHKEdWd3A4OjU1dzxmdjVX''@;'; put 'put ''ZzJVU1FTTU46JjwzRCVCZjY3dDZ6ajFLKUxJXkNUVExGKVF0TltwfGNPam90JHVxbnRYX0sscUxtO21qXT9NNC5GayY0JU1Nd01OWH4ybV9QdWxkOGRvRUxnO0ZAMkVlJGgvVjVUXi5BKnsyJUVBLkYlP1k2PT90IXpRMmxfWyQ1VkJqblY9S30yZi9XYmYuIzpNfFdsTmR8T2c2d0YqaVchTTw4''@;'; put 'put ''Qkc7S2YrIllIUXJPNHhXNV01eE02RiZBRDxVPWZKQ0pmb3hPLjwsdGJJJStncWNkNkY7SXZUZzU/UiY0KFZkQFlndF1qWDBYVlB0O1VHLn0sWCJRMTslcEIvb2tBQXZeWyg5dilmRyVwMkcwcSFLSUosOXB8T0RuTzVXJjg3WHpDNnUvamlqWVtMLFU0VUw5ImQoMW0rKzZkI3VCQjgqJFRuUmFh''@;'; put 'put ''NT4hSDshI0xIL1Z3MFYkPjNFQ21LPkUjVGlycTZWP0QhWXFzZCgvVFomfDk8cWNbUVVld1c8e0REPjc6NW5jcTs8PFBQX15ncXNkKylOSmpUeGpDSTh5IVk0QUhuYE9WYXdEMFY/WmVYdCkxRDBCWmdkYEUiPGg3IzprTzd9Vj5DbUVHSShXW0J8RjhERjlOcHBMTFVEXmQ3Int2dTdaS0kvRCQh''@;'; put 'put ''RTo6eX5tVGFZSm5QKmZqWC9XSiFAKkBjTFEhRStNYFJCRTcjOTVPY152dG9EeDc5cmo7ZHs6KmpKaHxlcWl+bXNsbV8oWG9JbilIZCRTIkMqK2NUXm14L2hxbUN5O1thR21nWlVeOTdUM3BWKltYaGJBd2lvQXdXdSRYe35xaTVEWlckTUBuTjppUkA4MjI4VFpAVys0QzlJaUlHUEE1JFhwS0Vm''@;'; put 'put ''OlsyazYkMy5uNHdDUjBlJnBrLjJsM0MhI3t6ZGJoOWRncClZZV5Pcml3bXEvalAjRCshSDhHTVM1cUlsJW4zeShNR2xRVyY+ZHk1bkBlNiVmY1U5eSg8RD8/Nml0L05dTy9iS1RtP2ltd1NaPSt+cTRnKXtdK2Y3N1VLOzV7X286RkpTR0M1aVQ7K0d5YVJidF5VODdGYXVjLzUycyVJTkpuMG59''@;'; put 'put ''WEQkQGZIYkpQa2RNQUomV04mNU14KS42TUhxOzZ3dlZuaT4mNU0pUGc0czMjaF1MTm17TiN9d3l7b0xmJVdhRG8wOV14TTFfKUwwKlNVcVVXTVRHZlpTY0dzcCs+dkwjY2A6REI0aHRyXzIyREU0RF9HYXpdaHxrN1MlWk5rZGdaOWhjP1d7RTRafHVibEwhfCYlTUIhXj8oZ0A0VWdhKVVKXitE''@;'; put 'put ''blJ3VWRbWndmdUxkSUo5dnglSU1RbHQsYnFWW0YhNVU6I1kiNEY/KUxpaiVSS0MzOlcwSGZ4ZDxEel5AeT1vSFVHWGQzIVNsS3ApdnBOJlVqbmpUMTF3WWJrU1svVnF1U1lnTCxUQ3RPdEY7TWoyTyVgRV5JREUlWSVjfmI4ejxjPUwvT3BNNSp1WD8vVy9DQmpWJjpLNXNIV2NPUTNYOyszazMp''@;'; put 'put ''X2NNKVBQTEdZJHVYVjt+aE9HeHBvMCFmJkFmWjxwYCR+RCszYXU1WkdaPGNKeFQwOnB6Rzl4PmNieWpaPTZKWl93Z0BeJVNJZl5IPFdpKTo9VE86TiJAX2k4L0RHMk90TUlZPi93ST81UlkmSVBFPywpcyo8em1xPVgvYHpqdyRCZVNQSj9QSj1aalZmZ0lIan1pOH1lakcrSSNLWHsudz5VNGAo''@;'; put 'put ''ZVksfU03S1t8fm9COjp1THtgX2k4OFlfOyVNNks4fDhjdFpsKURuLHdTMEljeU5jMFFzT11MLEZYdSRqWSVGMSh2MVl3MEFgREVSRmx4JDZqNjk2KTlwfXp6RiElSiosIzpwR2Q4SFYmLndJNmtCJmdOOlckWyE9ZlFDZmp3aG8wbHZYWXcoRG5GOGB4dixyVktYJlklU3EqfVBIMWkvP2Z1MitA''@;'; put 'put ''VjBteDRrWiEzcGhlODRsbVg3SE0vQkolaXpFRVYmUVBKRClOOXJUV11BNEg5K1p6TD5KO0w8aEkjRm83MXQwQDR2WjpXZ1tmOWZnaVNqZ2F9V2k0dkxAX29mbmF2QFJ2Z2wlRE4zYXd9KytqRVRNdHBoQD5eL0RhRkUwIlhuel1EayZ4V1lKYk5YZTBQdiE1V2drMl9AdkIxYF9jTGA2elN3NyNb''@;'; put 'put ''IS5PSEQ3ZiFdQ2w3U2c/RXJvcXhlakZtQiI5cGN0WFs/cWhUWHUkYXBodDhNVEFAeV95cXJLezsmYiRWdkhpZzhHRyFTR2FRJm9Sez1NZXxKUzFbeVRUaUZ1Wkw6KkJHbjt3dkl7Ql5yfk5IRyNhJXEoNFg9e0EwQ3FWZ3ojeXYvI0IuQ3hXZSQlOCk4QWpAa3ZTZGNFUXlCZ3F4ZStHKUg7dmdy''@;'; put 'put ''TGJBY2ojSHpbW0g5WlpqeEdCXkR9Ty5HdGYuels9TjspZylpalFPYXlZUjhkSnlHWD1rMl95Rm1GMUQ2RSpzMH4wSj45SEdEaHdrZ0x5L3hkUCZEbnVOOXYwLy59QlE4XjVuIzEoeTFOMyQlYHZtM3IzKituT1czcHdBRD88PWc6KmRZRD1MJio8Pk8iQWZqN28lZUpqL0JKdEliMkpsMGxjekRI''@;'; put 'put ''bjJsTzBvTEBiTlhIWmZSRVNvJG4kRWUsdFNAWERSTXhNQ1hZQmNIV2dnYGhHbVN8UihNeE1kb04qMHBLOW1maXd4P3pEPHo7L2xxeSk5IS5dezhUN1VLIzc/NTw1fHFNITQhbX0/aHAsNFV3OnsvOFI8YjRuOilLKCE8ZHd4Y293PnkvdCNES2wubWhhJU1BMEpEe3c+eVo3NWx5bzdeNC9GRUN6''@;'; put 'put ''KXluemh6RnNKamVFPHtmQ1J1PGNmdnhacTclRX1AfHdUc0tSQ2ozYT5oWy8pPDZZUmldJksoQzRySEgrRlVXSkA3PHcxb3JbLDliRGhxaXFXUm8wSEhzKTxPem9bZUdlRUpnI1RRbzBKUi5HXlNeJXg4dDwoeTkvcFJLTilIXUMpeXw9Kkg1OjFKN1l2TDpOUXY3OmAvdCQ6U1lSRXc2RTtafFo6''@;'; put 'put ''ejBjZ3FZZ1VNblI8aDBHbkxINlB5YUA6JndQOzdydmZ8Qkx2TzdDVkY3a2skb1l5UHtNfVU7TUg2Oi87UyJRU2dQcnVTbExxKUV6MXorVzthXkpERTM4NzskZlQjQmw1RXpTQEE4bWN3SUR3ZzJPJXlJOlJEOCthS2RUNlU8Y0NLU2wvNVNTdGkzckhITG18Nl5DbGFBS3h3O3JFd3JOYlsqbWhP''@;'; put 'put ''YVYrQiRjR01MNkt8T2F5dX48cWlBRHVvQDIxTjhMTSlgRVZPMjZCTTtPMmNLVCNhXVk4OiJjQzZwQjFXPGZyL3ojKjU8VUgha11kWkBbamhuWCopYHpxQytUbGNNRnVGSTg1UWwlcFtZIltRZHx4SG9JOjNIeW4uLlNDaTZfZmMqaHN9e0lvSVVWZEtrJTpAKmh2fX5RNlM8cURwUEJ0Rk9aeztn''@;'; put 'put ''NEpMdE55QFhBVTw5eH5WRFRbOEBWLFNnQ09leXRlSlBia1JCLF9OPGhmOnxjQ3IhQGFTZU5RMzNRYEMsX248YVNlTm8/TyNMY2U4UTJXfWxhJUt3P1pGMTZYZHgvVWUsZzohT0Y0P1kwbEpLTCNhPSNwOFclbCpXIUFPd09hTTVFR1loZ3loKV5dY0pefHZeZ1YqKjNvX2IySihZdXpZQEIpSFV6''@;'; put 'put ''N3lbZGg1JEQ9Z0JvLktKNVM1blg/VTJJdmNobDJsTSNxUjNkfU1VSTJXazNVOmhwSyUuaFBhRytxTjh6O1lOUkZIIyVtPENMTSxeR0AwMS9zKTdEaSM5QHpmWTdzRj5BIVpLQXxbPiJOZ1tfakR7MjF3PGE8U1o1ZUp8N1o4fWd9QHhkMi5nZn5FdDpCSi5sZSwjbUZsIU1VM2M1Q20vZEFsUzhS''@;'; put 'put ''OHolNjhlR0J4Vm5NTCJgRTA7ZltmI0hHa0pSMGZZZzxVTCpETXYsU29qKVRmc2lsZHxbWVFpNn1hKGo7IXVwMFZlSV9MNmxJSDpfJmlSZUFLYEVPKi9UQGpxMHFfcSRKOD5WRG5TKVE1ZE0uQXp0bjdIJHVIaVA2USJDemNCbEd0P0VDYzcjN0AyZW1AQi9qWXVaQkZvR1NAXmZzVShCOmxkTzNK''@;'; put 'put ''WSpQdSZke3YpTHtUZmM9Kl8ya1g7Z2VIJmY/NVVqc1FwdEU2Jm5UeEFnfG0/Y1tacCthLntBbV9nMHRmaDRedj0hKntrMz9Oc1BSN3txeURdK1BNTGs6PEJ5SlFwKTA/KWtMd1gjXmdtbGxPfU5RRXUxZUpfK1R7M3lhRUpXVW1aIVJOT0hnPy4uVzZ3d09lJjdMSS5lLDV4LztWP0csNFIxMWss''@;'; put 'put ''Z3draiovOVsxakQqSj93JGY/NlQ9PE82eEpVNGp9SXF7IktNbV1QbVB6N3FpVnQzSiwoVWZAZUJldj02Y2JSJjYkOCMvK2h1YD04I3g9RX1SWChKYiswPCZmengjVzg9bitqX2kzIXtxTElucHtUSH1wZUhLKS5aTCNTNm9+aiopIXEwM2psIjddXkslWUlIWT41WiRvT05JYi99OkB7JSRlZTZk''@;'; put 'put ''LyR7QHxQVlpubS4rY1R1d19UWUN6UyVrYkgzTDQyNWpJWl1vUDVVdEZGZkJ4fDcqZDdCJSwoJXhBVWxJVTFGYmg1WTUoMTlhN0pqV0FsR0ddRj1GQ3R9dz1uc3g9KElve3FnI2xEMi54QixmY29gJXFBLF9xLnlMKFhJTnhTST10XX4lc25iVmJPXzN+RkQlNEkmIyVTbFRJci53KVR5akY8aC91''@;'; put 'put ''XWhac2R7JVYqM2xNSF0mPnszeCopal5OVUo5diNMLDZgdkI8WjBEOWkrbGQzO1pxRmU0QHoqITZrQmQ+WkQ5X1BNRzY1VXFfSHJLY28ocS8vO2RBX2heJTEzdyR5NlViYkQsYW1RLCReKVpVdnYvVWkxXWpFVURsIzFAMDwrZT1wV2hqYUloKTRFenZhQCw1OE1DIzJLciVANWpiLH1KRVFLJXl0''@;'; put 'put ''VW1WY0FjNDZOQkhYb0V2YU4pQjgmN2daSn0hZVBiclBOXXJhRXlVQjMxWEo4eD1sWTAqdElIcmEid1V0S3B9Y1FzMkJ1S3JubWt8Y3wlam4yV0wzekdaJHMqO3kvZmFvOl1oKip0Nm8vXis6MWh9YTxVRXkpeFhvZHA8eVdKSXohdnY6JDo0Z2d6V2VVQDk9bTFjYE1mZTpTMFFrcTVAL2BaeDgr''@;'; put 'put ''UExNVDBLWlRtLj5eQHcjcUBTUzZMTz06Wi5iSGs8LFhpQ2JIKj1uO1tZZ150fiFySXN0ZGxMXUlGOFFFS0cxMGc3cVJPQWs5USZ4L1R1ejVtTlVhTj1tfGJDZ3clXVErIXZ2SFFiTy51JXJpYXRtREchNTUzU0B2YWt6d098dVA4TGRueCwwaC4/bV83LCNAWWVPKyM1dTlzI0g4eVtTPyZZb0dO''@;'; put 'put ''cWdkYT9SOmhkL0RuXk8mS3tCQm5vYm9aelNmengseCQyaiJ5Z20rRC57WD43fC9PR25SYW9sb2tRIWA4VktxYHlfWXFzZH0pbURBP0ckcngpdU5VY0BZZyJPK3ZmNlh1Qz0wRDVWJiJDK1k1NEdjZl5CWjdDNVc/S08yI0ZJVVRzWDQ4bm9vO0AkSU1JNDNwPGQhOVhIck9ueGN1RCpzejMjWj00''@;'; put 'put ''VTNVe01CdD1sZVpxTGdiWW9OZSpRV11QRS5SI3tIfTdEUDx8PUFlcGBdK3IyNCMpb0B3ekJJP0RlTUheV0gvZHgobGxtPjQibHpebmRLRFpZPCtDZHo+SHZ3SG1VWj1SSTpsIzMrYUFRKVBVTVsieF93eVJpMFo7I1tiXVlKUXk0aiRufSRZPzFOWS5HWy8pMD0wcDBGZl9NUkZjVlRII1chNFh4''@;'; put 'put ''Y2c/NyJGVCxRNi81R0I2bDlbeD4+YyskMWRHT1JGWy5Rd1AqPj5Ddk00JE01TDBue2t2RSowWj81JCY6Z0c3MGltU01RM0ZROnR8aE1RU3tQSFE/RD8mWj82VXorYy5wcCtdT2o0L3UuNCtxLD8pZDwuQ3ZNUS90Y3YlLjBASSUpIlE7RG4rRCRtby5aYGAvLHpqdlssPT8oZWxZPWQ/Yj1CKGQi''@;'; put 'put ''UURCV1dOJko4TlF9VHQwZzA4eWA+Q3k5UjtwekdfP3VCTiQxdFJQUU1Bb3gkdUg3Zl9ZUm0vemFjbmhkMClyUmU1U2NqTC47eiJ1TFhyR0NdWWd2bDtCSHpEM11afXZwO2N1STE1VT0qQVlwQTZadVo8SDNYO1RIMU1ydHhldytMe2NUMj01Z3hbXyY4MWplUVl3SCV1JUh6fnZxTVlxaGU7KVZ6''@;'; put 'put ''bEpQT2hNamYsUlZOWGdlbzZ1OzciTFtNeE1JImpDRGQ1bUBCJEF3V0lMWnpZR0FYX3ZhVWUkb1hISGEqPzc7NXxvd2JEMW1tMW1mJiF8djUrXzNERnNUdnk4LF5IOV8kO1BeTkNRNXhKUjtCXjlvcXhlKjV8cXJwYEtvMCpOYkJzPUZuSDguOitoaWFsTSI1aHQqUjlHV2dyKV9VSEQ+VjtMR056''@;'; put 'put ''ZnlLKFROOS8rMWMqK3s1flpGXT9PcypBeWtwQFBbJXxFbVIsOik6Lml+diRfbjkra2c5a1lbVEF7KUt9UVdqLl4sOT0qfDdOKTZOZVIoV1dATHZlJW9QLnF+WS8hUFhCYjQ/JFgsVDx7RndySHNFOTkhNVQqc218THBxW2VzNUd5XXY2VnJsP3goUW5VN15Lek15TWxLZSo1ZUg3YWg0QnlDdj9D''@;'; put 'put ''VzZLQnlZXjVKcHh1ezRaJHYpNmdvbXNNaXRwN19kRHdFZGZwR2Z+UiZBL3oiTzJVQWEifUV3KT0rMGcqc0s/UDpJeVZrUGc6dS4zbWtZK3U0NHlUSjsjLyhSalhAYUBOa0xaRCNTTiFha09YWWBMbiVkXkhmSnJ0KC8lN2kxbXc4ZTRFW3ZDV0wsVHZ8I2hZU08peVlHM3B1NGltbyFGTlVULnIv''@;'; put 'put ''dEd6amV8NWJqMXBUP0shJDw+Yyt1SVFSSSZMUDZPYzFVPWpfOEozcStaMih0VUwrWld0RzwidEoheUJ2T1lQbnl0b1dmZDR2cGB3SjQoYWNKLF9GeGMxVCZ4Mll3SEBwTGZHK181UCtVfUMkJnshLiMmcElxV1NybktDN19eKiVRL0p6KWNSU3FCTzd4RkA7KCFKOCpsIXRnMyklRTltVzwobW1b''@;'; put 'put ''QF9+SjMpalBUeHk/WjxbZ1BIdypmUk9rTFNsKlNSYDJpJDpwLnh3MmJHaypSIVp1UEwldnV0VTkyT2ZeZWl7Rzh1XlhWTFlIXmopd2BYY0Z8MmdaYz9oZG80UnpUL3cwRHRPaERINldGYFZscExbQ0Y7TmNqbmFZXmBoRDFXU2tGUn52M0x3VypGQkEkQW1CQUF9UVsoKmhheiFDQCpiM10ycCUj''@;'; put 'put ''N1tYJkdWXTpNazB6SCxdbE5ePjJkTEpSMTB2fWtpSmBfejwqTVV3TElJeTJIKH04MHtRQTBBKnM0aWd4Jn0xfkljKFE9cm84SkMsRU9EXjdkbC5dTnRxRXlMZ0xkPCVveUE9bSViZGUpOlZxbTNkdzNHeDpaKUlvI1ZvOlI9WCJ6WDY/YChEWiEiaUV3PipCSlo2MXtdS1h3TDYhekk2KygmdDdL''@;'; put 'put ''aixtfnRDX2t6REtpRDh8KXs4IXpdNmA+YEk8dFszIkhYYHJKSURkNC44OlFvRGF+UC9OP011eF9SPF1pblIqI3gkfS5FamFYczNlc3teOCt2UXpFPDNgISZTSW9MRH4mSFg1YnZ1RHBzdXUmLGJKVUpZY3V1KHVZSmJpeGJCL0p3ez9KSnMvWHojdFpveHkrR2kpemhCY09RSDswLkReMDxAflA6''@;'; put 'put ''WmFWWF0wUz82WlRkaTc8bS4yLi5mZG0yWn51T3wicnB1cmVhSUslUmolMnouJTFDWz01eyhKe0diPVsmPFlddVVfKnhTTj4wI2Q8T3A3W3w7T34weTAheHNePFVANihTPykyYzwxJDM6UHFCM3VuZnQ+WWxOZTdnPnhhQ3A/ZUp8S05DPzRrOXwpejc+d2NeWDdBfTolZE0lKlNYejtBaE1vOz93''@;'; put 'put ''JUZnY1UlbHE9NlRBOGhNbFd8NjdAQjBEQUA5KHArYUllSl9SNkgkal48Pj8wVERrUlNgMF85PSpobVYuN1s6PEEpLE9bN05LOUV7U0BQRiFyXS8ySXw+O01wVytGXi53aUhFMGV6Kk1PMltKW0A6bFpAOSVwI3lAR1soeDt6fWE3RWVjXTsjZEAoTCEyLjluWVBvTTVuQlc+TnBee2dFTE4hMH1z''@;'; put 'put ''M3luYj0oaCVRWCNPP2dMcTZIZm9OZDxeITkuVzBbL3VAYUMqV3Vya00+NGEyZ3dtIWtpaDlgZ3MwO25YYD1ZdnNDS29TWipReVBnNnkvVkN5eFNtZyJ0bntvbHBMKGxueDVXSGdDSGdkc3I/R2hzJWBYRktGMGo0Zzo/b1d6I2wkNykzKyh+cT50JFM1OnRCJXlYQnhHeERQXlZAKnclLjxxTmFe''@;'; put 'put ''eCN1Pz9XSnA+JT42PzlCJTEpfj5kPTcjdVdyR3UuU0ZzUjVPdlIpcjVdO2RdRWVqQjlIR24xbnIjOUteR09wVktYMElWUyNganMpdzJ1RG8sdTNAK3ZdQ1I0VndlXjs/UyJxb3BSMSRVcjZ7SVdXOyJ7RHJPQzYuQmUwL2x6YGlPZHhwJV9aTURoSlFxbm8hPUpBVlsoRTB1ZF5tcGhoVX4wI2RS''@;'; put 'put ''eDVkZCVuel98I3RJMDhoayhRITZQOkY7czpFaT5dPnJIWm8zaUY5TGtAbEY6WSViSCVdNFEkWXh3TGZkTC97VitDdEpjc19OUDt9fF1SOzVyIktkcnE1d249NVFqIyIkSj1GS3twfXdlUm1kIXNPOjRfcXMjJUNJJSh+R20iXnwrbkliZ2JJZ3NLYXRUVUVpcytxe2xuKzNlbCQ7ZnxFRnssZj9D''@;'; put 'put ''dHZfVkFfQUxLeERHXlE1SVc3OzxWNm58VUNgOjBwdUlOdz1OZEkuLjEqJHo4bGd0TSNaOkdxOXRabD9wZnA7KmhPZEpmSF9KW3cqdSVGLlBfOigrWmR0PGtDRyMrM3R1Jk1XdVdKQkxKW1BTd2F8UjUwMXQ/UUBzekZ9ME1waFUhNFc2S1Q6Pi8le1ZWe1RdRTwkUDksN2sqTE1rV000M2I8UmIq''@;'; put 'put ''VWlaT307KTNlbkxvUGAweGpUeCVwQ11SR0BDT0lVR0RvNCgkQFVkRkJSLjpUT0Fhb1VJX1ovbHRNTjZISmpaM2VbQ1hPVCpjMGIoWUQrXUp9dD80VyhAYVRidWBmdytdZSssY1VpKiFjPnU3QGA7anRCdyJqRVc7aG4lbXB5dXVTbkolXmlYYjpXfGlQO1s2Y35KUjlKKWtmNn5rfWVAXyMsSGho''@;'; put 'put ''Nl87X3xmey9zQGRkPX50aFBoWV0hRUhxUHBieG5qRy4/XW1TPm5oWUc8d3tzdHhKPjQ/bTd2U0N+ZiJQU1lPfE5hMWdUS3U/eVk9TDxtaF1dVm0pTD1AbWApRVhFcktwOko/c34mZG0/Vnt2Q1l5UjxANW9LclFNRV1QVENKTGMzc00lIWNueWtgIyYhJmEkWGFwTlZRKjo+SGxhYHZVNTIrTmU0''@;'; put 'put ''MWUleD5vVmdvYWksPCkqclE/aVBiYlteO09vPF9PRk1CWWM9fWE2JElVZkRzdnJiWXNQUHNmTiVxPn4oR09vU1VKM25UcWV+dXNkJjlDMTMoY3VuVVV7cTpsbTchQ2JZdmFEeDwjJmpqUDNXcmJUd0VyPWJJLilOQ3wpKF9RZl5ofXE+cSRuRCtjS35CRCx1fCpxcUsmV2pqJlp+fFpZV0dhNTMs''@;'; put 'put ''OWtqNSxTNmRhJTF1THRBKjQsSENhW3d5JlhRdV87byQxPDBIYjRKKGJ6SmxDWTJ0UyR2dUglOG1FTSFPUWR0OCNRLm90Wl9YemNWRWhkTSZ9Uj5HJC55Ikh0LEtpIWlSQGsvX058PENGKjBEKV4vN2Z9YEg+VGdYU0tgbmRDbTlIdW1qTypqc2w8djV6TmZJSV99VVslPnNqNmdGaj5iTTJsck9R''@;'; put 'put ''ImpgfVl7UEk0KEtSXSRbOVZvSWd5TiJfTmAiWn5lSDR5Wms2TjJpMl5ENTQzVkw6JUd9L1ciTD5DNG1YX0Z8QHwjUWNTUk5rKChQR3dGYFo7XTY0YXc1VnI5ZjJGMVI2TE1dVGUxKW9qbiMvL29MZUNISU8+OzFBQWhCM3wmdGE5Sn4maDVVLG5zS2k2Tyw/dzVIZDplVS53bC42KCFoZDk0WSFs''@;'; put 'put ''L0h3fWIvMX5RZWohaHhvbTxrcF1HLyNlJmhUWm8pQjZvYWFZVXV6YkExWl52clY2e34jUjt4cFkuaVR4VSIhUCs4MWZIfmcsblBHTzJrT1h+T2puXWd+cyJMfElkXUYoYEZlWi9MMStzdGxYPTZyVG4vXyFpPXw3KkYpRFdwWVQmam11IlFlaTRaT352R252QDg8O2EsWmczNlN+L3FgLiNtW3Fe''@;'; put 'put ''JUx7KF57aVZ4WmVsKz1bbnU/YENXNnNYU1NDRnthNElQKldvMGAlWzdqV0t8JDFiRi5PVGRSO2QwbE4wUn04XnpkUUptXXI6NlkvIjRvdVR6eCpLMD9fOTpCWlorMXdvO3R0RHNNfD9zfCZyZlFwOn5wRjU5ZHoxTS5vfnJqKlJYaCh3OHtGKCpiX0d4dGsmVyhPbXtJYTk3e20lfmdmW0VjTjZ8''@;'; put 'put ''bypub3U6eWpnVW5kX0JXQGQ4fU80Yj06Zy4lSSIyLk1wUWdNMjE1REJOM1pdZ1FDY2E6WWY1c3sxTDZJPHF8UT1jTEZmMTVnVmsxbWVZJWJSeVR7WXxuXSsrK1RDVnlIdHBqXV9jWCkoTXdoKz1NWjt1RmZMPHZEKTZJREZ6YW11PW09KFhPIiw0ZiRHKzYlWihGaDNgX0xyLHIuZUhhN1t8T3Aq''@;'; put 'put ''SV5uUEBXT3IlKHttSXtbLmBWR0Y2YV5MLEFIMDZ0VnlUTj0yPSZxU2NDMkhLOTZhaTM9VHBdSW52NVVsZn01VlpVIkBpOmBXaSEydypgXyxeJDFScG1NNCFFRFI9dSNlbn5HW31Zen0ic35dRG5kYnVMakNqSyQ7QHlIMSk6ZUpKVWZ5aChDTkJ+VltKNzNVRWYsVWtvVC9tVUV3Jj9IZ3xGRmRC''@;'; put 'put ''UiJjJHxnQ18xSTwuMUVjSnU2LlFdPn42QXx+bTkjTywyKFRlYyZgaSUxOlA5RTByU0w2X1Q4QVFtPFh9dkQhVE15eEoiNUZJZXh2KU1aeDZOayhJOkooI1BLKVM/PmpvLnNMLD86XXN+aS56UyRHVk8vPz1iXz1wJFtNKF5laWY3WUNqQChfOGspb3BTWGxhfXBNQDU6NzEkY00rTFA3TX1WRlBf''@;'; put 'put ''cWM6VixxQ1F7KHc6KiYuOWZiTzprfldyR0hlRipLXzRYJm5PWSttakUhVXd5LDIoXzo6fmFyMW40eHkvWjhQQHNSeklSRHBSbFhrPFExSlUyRzByOGhWNlFYPytpPSorLGlWUG5nYWdGLjZvVX1pYiguS05SJSVtbjs/Yk5xc0AhSzFxO2VzRDkqZV82Sy9qN0pwcT4yZ1o1VCx1LjBQKDhJUU5N''@;'; put 'put ''IXZyN0ovaypGdzYuY2BYfm5ERVgrSE9MUj9BK29CVFU+Kzl0d2luXWM4RzNPdFMrVUM9anhoWChZZ3U0Njoyd3E/d1ZSYlo8UTxlSC9HVyVLWio9ckU/NHQhc2NrPF8+M146QEA7dzg3WyxQVnRkQko9TEFPclVaRyo2YShhVEVyZzlVfj5wfXl+fjZIPD1DKzM1dEpCczJvNmwreVNiP2hSP2hN''@;'; put 'put ''QWF7ZHQpcSNJejtAd0FPJGx4KG1BZl9AK1I/c2okKk1KS0Raciw5MExDPipxRmByd31KdWR0TGRnXWcyeXhKYTw6TUp7fl86amE4Vjtec3UkRG0oVnk/JFZhZm5AZH1DOyMqXzI0PURWLyxpejp6fT0kS3NxcE15KiklUi80JSF2UWpYLjsvZz9LMmdGRms+Sy9idTdgZURuIjtzfiNiZTxLVVVv''@;'; put 'put ''WW0zRCV+aFZLTVh9c0BldWtxK1NoVXtZIixfQlQrTjNYfSpWMjFzcGh4TzBJcVt9Zz82PDhgXWJNZGp8SitpZHE7dlE0aHZ7V1k1X3d3WHVsUihUa1lDPmBtdj0xKDNGUj5XJmQuQTMvL0ZCRiR2Y1ZXLGU9WmhCRmdPe3FLP3RkJTpue0NRWlEsPFUjIl5LNjRiWzhoXmwsbzY+amt4U045VFhl''@;'; put 'put ''eypTJX1QVlBMY35AemtoIyN9c1NfO1Y4K3hvbFtSQzteSltVezN8QClbVyNfc2ksX0pUN3J2V3tqLmlidD5hXn5QcmleQyxxWFh0UkJJN3FwaC8wQkhvTFtkQCoqfC9dW1BhfEBuTG1LPFd7Xy5CNmhJRn49ejFUXUZoR3kvW3JwMXxBMU9ZNlpAKW4wTkVdT0F0Qk9DT3pwZ0V3dC5bOVFAflE8''@;'; put 'put ''NHgyL217Q2hbN2FGZjVAbmM/bXJwZnVVNV4+bFNuaDxgIyFlZUZlVTx5ekw9S1s3SlFwKEY6fTc6bl8oMDtzYm9fXVUrP1MpKVtDVTZVdy5QSHJFb31jLjp8aSFgYiZPT2duOjQ/JH5pUzImeyxMLzBhakZrYXhpMCNdUyo1XkFLMXMlMD84dHksZD5DJShbV0d0YHZnNnkmeD9zUyskVjMzay55''@;'; put 'put ''fWVKfXltViRoMnJaPXQhV3JuOVQlV3QyS3BONnxuZi4oMGIiZ3w1PG5DfE4oTW1jPFZhXjshZ1VTYyM8eD80UjtbVVZRTkR6OV5ATS49Oy5qZH4jV2pXQl92QDxrW1Rtfl5LfjRBVV9fRnkodS9JZGNlOyEsdkJfR1VbVntJQTd+cl46b1kxRHFCflZXbCgrSTYvK25bOyx3WT5Xc0AzI2RmPTYl''@;'; put 'put ''fV42Ols6OzZlKHVgUkgwW1QrS2NpVEZyJWAiWCN8SkU6OjkqfU1kekpMdygjMVI8c0tgVWE0alU3YCx9blRUNlVMJFRqaH1yfXtmV0hQX25eMDoudl5bdCx+enleRTJwIT5OVkxLYitRPntdSH57fkh1RSY4SHJdbVpCTjN6XyQ/KEQkOkIpeENfX3hiV0dwMWApbj1RU3hbSFopOzxtUVcjdSRg''@;'; put 'put ''Nmd0ezkxeFV0JCEsOUQ/LHRkIX1CaiRAfTVAWykyKUBWJD4/e2Z5UEAjdHokO2xISVM8fWFNWG5lRUlUW0dyJSsydWB7SzsseSJOPmloLGRJKj1lKHFvajk0blBRLCEuSD43K1NDMXxqVn5PMjMwXVhpd0ZvRWgyYiRNRypQfFlCdE5wPDkkSiNOYUg/cVAmXiNNMEJ7flojMGwkO2lCOD5ePStE''@;'; put 'put ''V1MkK3M+fChmKD5ndU1sezh8am84fiQ+N3xVUlV7TUJVZHNqeXdtJkI/Wk1BUnk6Mn42MlEuMytUOmghdTleKX1+cUhDfEckSTdoXSZPN2ZhTGBiaGl+YldUVGNtdmo0WmJwWz9RMXJbR2JZP1hEOVBabG9iY2BIV0skY35NaHd8fEEyQixsbTlVcnpXTHBXN0srJSRdVXd3Lj5RLmBBZnM7dFV5''@;'; put 'put ''VWRQeUokYFhWZ251fX5IKXBEfWgyTkBYVjE3dTtkMT45Yyp8N0dmW1FveXxpbiU4ZUpDPX5CeW1dUy8jSVJpWzpHdDkhZyw/JV08Zl8uSFY7TTI+YXR6Ki5zWnVuLlYoKCYhIl5oRXhVWn1UfEdWIi9GbVBfJGZBIlt+WDg7NEp0PjdSa2NqOE5yTjZLWDFqaDNSV1J8SHZLX2pfKHFKRUw5PVYw''@;'; put 'put ''eFtAVmByQF1YI2BVTUxhWz97MmAkcldOeVZocCYsL3V8eTolY34uJD9ZMCtdQkE9Vl9LO356N0BiWmljSDRXNEJ9ZSxQciw5TFtZY09FQVoyKV5gPm9UX2gkfnVxTHNdRVpmaCJ0NnlyaztERXVLYD5yeHMxSEBqc3JnfnVgSGRhKD40fHNyPGZhOzk4SmY8NmBVLFAqMHI2MGJePDYpJnpEVHhL''@;'; put 'put ''e2klTT1HNTYqIVcqRD1zeVVYNysjPGg7KVJwbWNTeTopcFQiMyYySV5deHNvMkR5fjRiaSZDPUZfX1FmKjsrW0ckMkM/OW5eVnkuZFFtaCtVUkE7SD9LKiQrXyV4e0swLl0lJjNkJWUuQ2sjNjp8PDNNKFE0KUAlaCxyfjchZyI/KXE3diFmK1J2fXt7bCU0bGB1S015XX5fW1s4JS4lLlJZI0o6''@;'; put 'put ''XmxSZls2VkxDfTkrUW9AOVhbZ3MiSiY2ZW9+eXxpKl1he2twYHt0Rzp+NlRGOXosTXE7e2MqfDI/Xz4hRko8OCQxeyZ+Nm1SYl9qVjhofW44QE9Ob0RVMkdya2JFTGFUL2UlaD9eZjhSLEV6YikxXUkkUWk9VzxsInM3bjZjfnBLcyNsImdsMjIsXzlHM3BbMjhjT19KST5fNjIpZzp6c0wlZ0dM''@;'; put 'put ''ST9bYCx8L2R1MyZ6KS5OSyhIbW81ZUQ1fnZVZ1A2TTswLzpMTSF0JXs/On58b2Vib2kldHtnaiJmLEspLlN9MC5iPyptVk5ifih+XXE1ZilOdmlNXUEsITteR2gmQX51UUhtcFs+WWlELzEjb3MzOktgQyFhY2hBK30jPXxCejN3a1lkOWhAdjgrWEJXQiZOPnlrLi46TDk+aiY+YkZSVW5VWitE''@;'; put 'put ''NnA0MUc5S1AhUXd+ZmcrcVB1Rm0pMnd6YiQ1TmJqLnkwYDJyZE5IJWIodGx7VXchdnJWPXtjIWwwfEYvXSF5Rl5uQkwlMkFKQ19jOmkzTGI3cHNeKjVDP2hxb0toO29kSTF1Pn1xflgiLH1WVGVvfilxaH0yYnR7aHsjfkJaQ2JdYEkjbEViLlRbIzs2Lj5nfUh1VEtwTS9ZdXlbdHdHYll2LDkv''@;'; put 'put ''Imo8MXtUP0EoWWZTWyFhXnpwJW1dQ1NQbDppWHtMY0l2On5fMXBEcD9DbT12fFRRUWpJYUY5RmZSWkQ5THM0I0RALlRuamYlblFFLys2KVZiSGovOW02ZndUWnE0OWlvaVRMVTlaVExaeH5iOzJqUFFGcW58TF9pKFVmOUk+biQ+UUZZaFh+djMjZHU6Tn1lJSxfQjcjTi5xfEl5TXJXX3hXO0Q/''@;'; put 'put ''LkI0NjJifiZ2Q01Men1pMSYqKH0lcWBBUSQyLFhjQGJLY0QhW3E/fDJYPm1ESVMhV0l0XS5GeUlSPiY5MnUrXjx1UlZXJWVhbEdlN0NzQHAifCswcThaISF6L3U4JlI3IlVGanYkI2E+Wi5pbTNmfHR+O01YZ3JSTVdPZmxlKjJYKFolMjddMFM+WXcjOHNLTFoxfmE+a3BIUUZxbnwpfmkoIlRE''@;'; put 'put ''RylsbThsd0I5djA4bitSKiY/cl8/Mn4/JkBkfW1MPWdoeV9ycDYsLyxwfkhvMi84JSNiaiYudj9iQE9sU31BKSZ8fDohPV01PlN1bSxla2IjY1dmMSJ8KlFwY3tZR0lacjBCZCYpKCReU11VaFJJKCF6e2MyXVhdfDBKRF04bGU5N319Wmw/MCZtelRbflVyJlBlN2N8XUhfcXI1fW42SiF2b1V8''@;'; put 'put ''UG1JZGBnX2BIXzMjRUxIYGczJTJDIyo9RDJyc3N9XXslVEgpamI7Xzl+TiwmKW9pNV1PfC5IJX51fCRkZTM0PT5CUzNXUD1gLzB9WnRGSHtyc206PHh6Zj99aF9xc2BfQTQ6I1k4Xmlecz9xWFdnZi4ke0U6e2c9Klt1SzI8IWEqMyxHd2x9ITcmYz40NXJXMHNBdGRKTmUmd0oyblEhN1VZPiEv''@;'; put 'put ''Q1J+UHRyZ0RgcTVCa0J1NzglZUcqaCsoZSpyajlyV2c4fTB3fnQvSGkvWCs6WylOI2ApZk1JRyZNQmk1PigoInNUJSZ+MH4waFtYN0N6NylfIT1kMWtbVXVRPCs+LjM/cE9XKXMvW0FKPjJ8Tn5+enRxOl1bdEosXWh+enR9L0VwZWV3P3FfblVZfUo5O1dPJT4pJXQ2OVI5ZzRQND0lZ1UsW21M''@;'; put 'put ''cCN3RmBwNnJLaTphL1EucSVVWGdLUk04Qjpfdk0pPTVKUDUlJUIraX1jPCM/dVA6WXAkI25yakxybk9xWlRERV87QDM3XkQ7Z0tGNVdqPm8wQ3AlVnsqeSpXcW40I194ZCtCUXRQNlRzaThzNW9ae0dCTENGZFUlYDQoPFEkXns7UjF4aDpMJllyXmwqJFd+Lz4vYjcvJTJ8b3J9akB8QzxAW3Il''@;'; put 'put ''cUZCP1YwQGh7Nj1NYy5EQDZtTCZDJiZJImYzdj1nISxWZUErVlpgTDNvaVFZVUJyfn17KHFnZ3tePFpkKGAmQG95I1coQjZXRT9uLG9+bTd+RCV2WWcwbyIxcmopVkIjRk8rL3NQeHtuemc2VjZ0L1YkJjkieHxRQ0dfJndvYjQwOkdXOGVeYTtASzdoUkQwS24yeXxGc09VfkV4c2Z+JXNIQS5K''@;'; put 'put ''ZmhYamxTczFiK0hKc3puNHpza1IuK3lycEI2aSNydFkjaihIIkhNciE6dytRVHArbUJBNHR9a3tqXmRadytfZXU8RUpjME1BM2J0Wzh0dkJHT19UKUNXajIkbyQ6KU1LNnkuI2soV3l4RTt7bj9zKUFRRDYzTVpRQEVzSSVUJDRqPlpqcnYvLE9AIX41bSV5LkNsNG8mQnpqVXc5aj58OT1ZajF0''@;'; put 'put ''YDF3antURyVWZWpmQTVfYEg9NXp1Wzh3MkohWzR0ZyE6Lk9xY29LfHEjdkNNMywpW2UlR0gzL2Z6YWFYUCUkUSFJcy96S1MrITxwKjI6P1N6RkNCSF96OjpgaiVJSk9EMz1vSnFeXU9HZ1pmMW9oakUoKUQkWnRnajl2TVYmKG1MRlguTEBmUFh7V19YKVRoRyNpJWFrUilBaTwxfF1Kc3RSRjtT''@;'; put 'put ''enBKXjMhcmlGMFFINihbJSIiUX5bRGZeU2Y1WjF5ZXlMJWwmMngiSVdDRGooPiM4TX4iWCU+aCZiKDMkaVczfH0jKHtvP2xdWitqW2dJRUhLfHBNcHx5T2VuV3ZSXiFEaih7dC8mbUdJVmlqX3I4QENfXjxgX2Z3V3lxUHZ9LiN7fEZpTjAqPlgsTlEuXlo4Kl5sSyJoMSEkXkAvU2hHKFRlWyZI''@;'; put 'put ''JkNyInpDdkgvJkJEbUg1LlRbRWJ0Zk52Z11tcFVtPzR8RExMLjhHPX1AI15iL3djckpHTDxfJVB+NltUcWBKVDR9bzYmOWJWUyZ9TnoqPE0kcDkhYGJvQC95Ryl+QnVEWHMlOS9tVkxLO2pQKE5MaHVxVkp8SmhiKHhvI2hORVBxZCFxSFlyUUJDTHgpcWM/dT1RK0dmMUlpc3BYclZYQV50KV9d''@;'; put 'put ''ZllTWmNnXV0rcmQ+Qjg0JnNbWSthJWA7S2U/WDssZjE0KDxlfiNaaWlyZFhpckhBaXJ1KTtsIyNzUD08aTBAayprelB6Tzd8dCkjWztUVUsqTSJ1NEMkajxXZFJ6PWJaYGFlaEwqSmlsWmRjdlpJbTsjSCMwQy5QejRNZGNJY00kNEsyeUAkfnBKPT5BOzZ9dmNbUjtJViV0OFR8SlMsPTBCbXhd''@;'; put 'put ''T243OlA0cjAhUDFxMz59OUIzZm5wMU9vP3VjPVJvRSQlYClTcXBBLEp1NVQvOTVgb0hpZ2hVJjwsW1BKNXxifSVoRE1bM3wpW1BQOXJ1WGE/XUJuKC5aIVM3cDA8SmMjSFNPO1tdZGdxbSMiJX0vR2hGZ29ZS3djNl42QWJyPHBrZ2NEZjAjUkhnYjhrbSg2Lm9TZ0siczNJaUdFOT0mTVAwJEFh''@;'; put 'put ''N1JZREVtUzpCRXshW29OciRRLHNgfTZ5ODZBNSFUYUBfKksmWV9ANks+TSRHMEtpVygyS15VbXM2bSFFTV1JMGF2dzwuRT9xWkdnSF5zbHE7ODtxM2lPRTU9SiV4eUtgd0Y3WkpCO3dYZTllcExzd2pUcWFnekw5YWRBZDNPcjpoLmUlRFIjbGY4K08rT0NuU297YWMkTEA8JEBeSFBhb2F6Wmww''@;'; put 'put ''TmkyQkQydiY/SUA6eURGcDI2cno4eENUI0lGYng0d3dUeGoqcE9LfSNhcDsrVlR+VzN0ViV1PnEyPnh6VCNnMSpNKU1KYl5GZztqQjl9SDMjVVd0e2UjIXo1eW14eHEsKEBsek43NkRoY1ckcHkuIkAwYndmKlQlSzMwZnNkTHpTI18+d2UoN0B6Rl4kfEdOekFhU21gO1NIdnV6eWRHQWdgcm4z''@;'; put 'put ''PWU6Q1g9TUwxUGhYNGAuKSFNM319X0lqUz0uMlo6KHJnKS5jQDM+TC98OlBFeHVjOHhyaXF5ajFWT21sV1U8K1lDQktYelZpb1YsNWNDP18/emtnRio5NSVWOnBxPVtleVYxUEQ9JWhHVUd0TVpqcDx8T2A9Olp3QylpUk5jRHpzbm1ua04sRnZCOn1kTVEkK1ZRIVdVSEhDRWl1Vy9NTX1hMSxq''@;'; put 'put ''JjFUUCE+c3BNeC8/Lz02PyFrZHo0NDYxTGc+ZnRoZUpvVi9bP2lYfD50ZENrTWdvQSlmQH5FKC5yPiNBSmtfYHw8O0dKYWFFQ3g8TmlwJnlVamVBVmliUXsqTng9TVNnMj5WU2hOakM3YGFrJCJTXShPNH4lRTd+OTlaQG5WVXV+ZD5rPD8kL0xWeHFba0NHTy5qbj1sNVFYPUA/ZDlDNyRhTU9y''@;'; put 'put ''K05sV2w2O0clUj5XZVR4ayxSe3t7VmNCV1BTcGtxaCl8JHpKNyVtMHRuQi5xVXZSeXVKMzh3LDh8LHFeSVBleEJ5bnhwPzMqaWY0JSI4Yz0oUzRjU1ssSlBJYGY3UnU9RGRTSUE7fTRYOiMmKTpCdXpiQDApZWAlTlImeEFhN3BjUXltOXNkVmY8QEs3UG5EQk1tPmNQdmtPWHsjKkR0cnNFRShB''@;'; put 'put ''KUYsdUk2Xj54YmMhNylNbV4rMTo1IkRaJCE3NTpFOEA4LCM8TmxrIktDTz45ZFZMJDByNFJidS9WdiFFQFVtWG1XLk9oSjZAOHFZaz51OT1fMVd3I1pTfkRYVHFHbmN1M01baXdzRXJCW0VTSWV9SiF6Klc5c0Z0bUIxPHJbYkFIUSEhM2p3e2hDRTxlIjRnTmAzMzg9TDJGI29EbnJKL2o1bmp2''@;'; put 'put ''c21jZzNrPEMxQERwZkkyU0JDZlF1S2dgcCJSVVpkSzJdJj9kO3EsSWFfSmh9WXttVmUqX1ZLcCNuNyUyWXxwVGN5eFpMOztaSzI0NzhSYjpKe19pIV9jeWFCZVUmcylWJXU8fCFTQ28kOUAkO0NnOlMhOnpLTFp2W1BJXTRkNT1IPSNDbEchfXo5SlFyfFJQSlVkX3ckLG85WD88cHk9cztVLFpT''@;'; put 'put ''JiEsYWFDcSJKdmdlYyZGXkY7bSVScGE2fDRFRV0vMUk8SEhxSzgyMCJeTUQhdCZ2VG1nTipWZ34/Sj51c1dCPFs1KlMlMVJpOkJ5MjVqIkRvO1BjJGlOe1cuNUd6Z3dpeXY4fG5PdTs9WE9RcCVtM3tdNCRMcmFsdHxdLkAwO1UzSHVWWXRpJVVdVUkhKFtEX0R3eHhsV0xkTzo7VEY8dyhNaDZr''@;'; put 'put ''ZnU1WC9EalRKJksqOXVqbzo7PDs2PUR2I1ROeEE5dn5YJWs0VkpaJH17eGIsLGVzLGg+JTJoYXU8Tzs2IyxiZ3p9KnswWH5AT0g8e1VXRlE6fXMxUjVwSSRHM3xJfDN1cWFTZXRGOD9IUykydyhMc1JvR1AzXXxKYlcxaVVXM0d9I1R3OG1FfVkuenNVLlksXV1WSjt8M1JgT15Kdno7YzY9XXci''@;'; put 'put ''blBGcH1ZM1gqbldRazhWWFdTRXdjYklwbkMmMUJONDVCbVtYNiNGViRUTTFUfTxaPCRbUkJmUE1Fe340cjdUPkgqVGQ+bjZ9el13SGxobzNnY1R1KmkoaTg4dVI5fEcyS35sWXVuKjVFMmNqI0t+cUx7NFhed0c6e0xRe2AvcVNaSXZUJm0sYSI7dyokPEUlO0JuW01saylmL3VGKnlGM3xBKWd3''@;'; put 'put ''aCtYZStuK2V8RX5VTSxCLlJgQWVWL3hLKnApb1pVM1F0fDkwPDp0Tzk5IlV+JmpLXUxhdzlHKHBELzBAIWZlfXJeITVjPEx2XTFQWy5HaUlUVjwhYWFnTzhEbVR3T11MMGFQUFUuP3kpJG4wZzNpMkJSSXxyJlIqKlp1KzQmV3UzKVkhQ0c0I1FKfkQmeXozXnlTV15uTiVsQCFmLFUqN0xqRiJ2''@;'; put 'put ''UjNycCxWfU9hYGhzRmtYMm5FeEEyY0tnKlo7YGtlO2VWLjBDZ3opMnZ1a3gjdCpMSy9AW2ltOk8oVjE6aSFfMHJ4I0ZwNm8vY1AjfFtqYjJRZXlCZ3wyNXB6LkB3cW89e1VgRWJiXkMrTUdITEl4fH1mcStMflJbVHhzYldjJmV8aVNtdzBqYlNrfHghMlcqSXNQaDFVb2JKP3BTUVkub21pREYr''@;'; put 'put ''Y1UkcjA9YlBKaGI7JEt1QTl5OXdrWEdrUnhRJkdmXzZjSS9FaHxuNHczIUNIOj12SERaeHd3XWc6Y2xxW0RBMmhYK1Qqenp2ZilrX1hTRnFHIjl4MERJd2FfVitFMDBTc2Nye3J3RGQra3xXMT95d31XZ1diZkNaRkt3JHAqbCljWFVINFFWRjRLc05IXjFZME1AaCQqYGR6UEhYN00qcmVtZDU0''@;'; put 'put ''VkEoZyJpfi8kUVFQYjQveilNQkRuJm1fd34oV0BaZ0EheXhpa3g9QWpKaHFscVhfWDE2NUA8Ml03Tl5tYnldSU02aSU0S2o1P016XnFQTTdAej9NWEo2TVJbQ2AoLDl5T0s3VSU+dTJEWFg5c2F5JXNBQkZ0PDxUekJhYSt3L0hyJE8mezFwfVg1bFghMFdCVHNJbD9lQClGdyZoO3QoaEtpZ0pV''@;'; put 'put ''USpxKDZudSJ6eHA/bStZYD4sLCxGaG4+RTJXQVFuaTYlOFhfKTE0L3ZQR3AlejxVWXZgcHx+TTRWSXZvTW0jPD13R3E5byM3fn13Y01+W3hJU1F7YS5DNyVzY3t1QF57OE9aczp0fW12UWokaFRxPTpUImJvImddb2BqaX58R0JDOms6cCtbTl1bMCp4aHcucTklOWk6IWFTbGJvRl10MnRSKTZU''@;'; put 'put ''UVYucE9EN0N5dSxaWi9yeTdaemlyVXNHJFp8NnNvaWhGVX5yflBkIkFEdCg+P0o/MXlYcmRFQVk5UUp6Nl1qe05WR1VeMCFiN343ZGwifip9TSR5c1NiLy8+IWwzKGhVe0UkYnE/V35jTnlieEQ2LnVsVDg4P2FBdGZJQF48M11LTHorY0E9flI3QXVHUGRCKyEkX3ZMK2JEVS9kKXYjeTAya2FJ''@;'; put 'put ''U3Z2XTVyKGdCKy4mP3NzXUlKVSk/IXVJMnldV0FKOHFpfX1iYUpnVGB6Qkp2I3BzdDZgaXJ8UFU8MnMiWlQhZm1WWyZ1RFg6eXQifC9FeFpTT0NhNkBManMqeF5EWyYhMFAmeDY/T3wlZV95biZwRjxCV1F7OiR6VnBHTXhHXjkkNzosV3NxUG5FOnUoV1c4akJUK0ZaIzxCVltlV3VqOShKNTJf''@;'; put 'put ''aHojQDVLREAic2hbJF9YUXtFQnlbOU5gI2ghVH5nPTEyMWhLLjVnITJeN04wblY2RktMIzUrRmg/KVR1RHluXS9dOE8yY3pQKyVeXk5VRVA0MX5iNCE4dGFbW1JadzdvfG1HXy5fZihEIU5uMTV+WHhXJnpRWDpwMnc7MzgsenwkKWd7PHxjZVoqWztATChYYD07I0R0ZFJ3dUNUYS8wIX5rVCMz''@;'; put 'put ''Li8mJkBRKThhJjFgU1l0cSkvW0ZuREFoSFQiSEQnKSkpLHNJfHwoc0k9ZnVuY3Rpb24gd090KCl7cmV0dXJuIFhhZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KHt3YXNtQmluYXJ5OnFhZSxsb2NhdGVGaWxlOmM9PiJzZngtd3JhcHBlciBub3AifSkpLHNJfWZ1bmN0aW9uIEFPdChjKXtyZXR1''@;'; put 'put ''cm57cGF0aDpjLnBhdGgsZGF0YTpgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+XG48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9z''@;'; put 'put ''dmcxMS5kdGQiPlxuPHN2ZyB3aWR0aD0iJHtjLndpZHRofSIgaGVpZ2h0PSIke2MuaGVpZ2h0fSI+PC9zdmc+YH19ZnVuY3Rpb24ga090KGMpe3JldHVybiBjLm1hcChBT3QpfXZhciBpX2U9Y2xhc3MgeFN7Y29uc3RydWN0b3IobCl7dGhpcy5fbW9kdWxlPWx9c3RhdGljIGxvYWQoKXtyZXR1''@;'; put 'put ''cm4gRU90KCkudGhlbihsPT5uZXcgeFMobCkpfXN0YXRpYyB1bmxvYWQoKXshZnVuY3Rpb24gVE90KCl7c0kmJihzST12b2lkIDApfSgpfXZlcnNpb24oKXtyZXR1cm4gdGhpcy5fbW9kdWxlLkdyYXBodml6LnByb3RvdHlwZS52ZXJzaW9uKCl9bGF5b3V0KGwsYT0ic3ZnIixkPSJkb3QiLGgp''@;'; put 'put ''e2lmKCFsKXJldHVybiIiO2xldCBmPW5ldyB0aGlzLl9tb2R1bGUuR3JhcGh2aXooaD8ueUludmVydD8xOjAsaD8ubm9wP2g/Lm5vcDowKSx2PSIiLE09IiI7dHJ5eyFmdW5jdGlvbiBET3QoYyxsKXtsZXQgYT17aW1hZ2VzOltdLGZpbGVzOltdLC4uLmx9O1suLi5hLmZpbGVzLC4uLmtPdChh''@;'; put 'put ''LmltYWdlcyldLmZvckVhY2goZD0+Yy5jcmVhdGVGaWxlKGQucGF0aCxkLmRhdGEpKX0oZixoKTt0cnl7dj1mLmxheW91dChsLGEsZCl9Y2F0Y2goRCl7TT1ELm1lc3NhZ2V9TT1mLmxhc3RFcnJvcigpfHxNfWZpbmFsbHl7dGhpcy5fbW9kdWxlLmRlc3Ryb3koZil9aWYoIXYmJk0pdGhyb3cg''@;'; put 'put ''eFMudW5sb2FkKCksbmV3IEVycm9yKE0pO3JldHVybiB2fWFjeWNsaWMobCxhPSExLGQ9ITEpe2lmKCFsKXJldHVybnthY3ljbGljOiExLG51bV9yZXY6MCxvdXRGaWxlOiIifTtsZXQgaD1uZXcgdGhpcy5fbW9kdWxlLkdyYXBodml6LGY9ITEsdj0wLE09IiIsRD0iIjt0cnl7dHJ5e2Y9aC5h''@;'; put 'put ''Y3ljbGljKGwsYSxkKSx2PWguYWN5Y2xpY19udW1fcmV2LE09aC5hY3ljbGljX291dEZpbGV9Y2F0Y2goVSl7RD1VLm1lc3NhZ2V9RD1oLmxhc3RFcnJvcigpfHxEfWZpbmFsbHl7dGhpcy5fbW9kdWxlLmRlc3Ryb3koaCl9aWYoRCl0aHJvdyB4Uy51bmxvYWQoKSxuZXcgRXJyb3IoRCk7cmV0''@;'; put 'put ''dXJue2FjeWNsaWM6ZixudW1fcmV2OnYsb3V0RmlsZTpNfX10cmVkKGwsYT0hMSxkPSExKXtpZighbClyZXR1cm57b3V0OiIiLGVycjoiIn07bGV0IGg9bmV3IHRoaXMuX21vZHVsZS5HcmFwaHZpeixmPSIiLHY9IiIsTT0iIjt0cnl7dHJ5e2gudHJlZChsLGEsZCksZj1oLnRyZWRfb3V0LHY9''@;'; put 'put ''aC50cmVkX2Vycn1jYXRjaChEKXtNPUQubWVzc2FnZX1NPWgubGFzdEVycm9yKCl8fE19ZmluYWxseXt0aGlzLl9tb2R1bGUuZGVzdHJveShoKX1pZighZiYmTSl0aHJvdyB4Uy51bmxvYWQoKSxuZXcgRXJyb3IoTSk7cmV0dXJue291dDpmLGVycjp2fX11bmZsYXR0ZW4obCxhPTAsZD0hMSxo''@;'; put 'put ''PTApe2lmKCFsKXJldHVybiIiO2xldCBmPW5ldyB0aGlzLl9tb2R1bGUuR3JhcGh2aXosdj0iIixNPSIiO3RyeXt0cnl7dj1mLnVuZmxhdHRlbihsLGEsZCxoKX1jYXRjaChEKXtNPUQubWVzc2FnZX1NPWYubGFzdEVycm9yKCl8fE19ZmluYWxseXt0aGlzLl9tb2R1bGUuZGVzdHJveShmKX1p''@;'; put 'put ''ZighdiYmTSl0aHJvdyB4Uy51bmxvYWQoKSxuZXcgRXJyb3IoTSk7cmV0dXJuIHZ9Y2lyY28obCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsImNpcmNvIixkKX1kb3QobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsImRvdCIsZCl9ZmRwKGwsYT0ic3ZnIixk''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5sYXlvdXQobCxhLCJmZHAiLGQpfXNmZHAobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsInNmZHAiLGQpfW5lYXRvKGwsYT0ic3ZnIixkKXtyZXR1cm4gdGhpcy5sYXlvdXQobCxhLCJuZWF0byIsZCl9b3NhZ2UobCxhPSJzdmciLGQpe3JldHVybiB0''@;'; put 'put ''aGlzLmxheW91dChsLGEsIm9zYWdlIixkKX1wYXRjaHdvcmsobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsInBhdGNod29yayIsZCl9dHdvcGkobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsInR3b3BpIixkKX1ub3AobCl7cmV0dXJuIHRoaXMubGF5b3V0''@;'; put 'put ''KGwsImRvdCIsIm5vcCIpfW5vcDIobCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsImRvdCIsIm5vcDIiKX19O2Z1bmN0aW9uIHl6KGMpe3JldHVybiBPYmplY3QuYXNzaWduKHt9LGMpfWZ1bmN0aW9uIE04KGMpe3JldHVybiBNYXRoLnJvdW5kKDEwMCpjKS8xMDB9ZnVuY3Rpb24gYV9lKGMsbCl7''@;'; put 'put ''aWYoInBvbHlnb24iPT1jLnRhZyl7KGE9eXooYykpLnRhZz0icGF0aCI7dmFyIGg9eXooZD1jLmF0dHJpYnV0ZXMpLGY9ZC5wb2ludHM7aWYoInBvbHlnb24iPT1sLnRhZyl7KHY9Yy5iYm94KS5jeD12Lngrdi53aWR0aC8yLHYuY3k9di55K3YuaGVpZ2h0LzI7Zm9yKHZhciBEPWQucG9pbnRz''@;'; put 'put ''LnNwbGl0KCIgIiksVT1ELm1hcChmdW5jdGlvbihObil7dmFyIEJyPU5uLnNwbGl0KCIsIik7cmV0dXJuW0JyWzBdLXYuY3gsQnJbMV0tdi5jeV19KSx0ZT1VW1UubGVuZ3RoLTFdWzBdLG9lPVVbVS5sZW5ndGgtMV1bMV0sdmU9MDt2ZTxVLmxlbmd0aDt2ZSsrLHRlPXdlLG9lPUZlKXt2YXIg''@;'; put 'put ''V2U9KHdlPVVbdmVdWzBdKS10ZTtpZigwIT0obnQ9KEZlPVVbdmVdWzFdKS1vZSkmJjA8PShkdD10ZS1vZSpXZS9udCkmJmR0PDEvMCYmKHRlPD1kdCYmZHQ8PXdlfHx3ZTw9ZHQmJmR0PD10ZSkpYnJlYWt9dmFyIG10PVtbdi5jeCtkdCx2LmN5KzBdLmpvaW4oIiwiKV07Zj0obXQ9KG10PW10''@;'; put 'put ''LmNvbmNhdChELnNsaWNlKHZlKSkpLmNvbmNhdChELnNsaWNlKDAsdmUpKSkuam9pbigiICIpfWguZD0iTSIrZisieiIsZGVsZXRlIGgucG9pbnRzLGEuYXR0cmlidXRlcz1ofWVsc2V7dmFyIGE7KGE9eXooYykpLnRhZz0icGF0aCIsaD15eihkPWMuYXR0cmlidXRlcyk7dmFyIGQsd2UsRmUs''@;'; put 'put ''ZHQsJHQ9ZC5jeCx6dD1kLmN5LHluPWQucngsZ249ZC5yeTtpZigicG9seWdvbiI9PWwudGFnKXt2YXIgdjsodj1sLmJib3gpLmN4PXYueCt2LndpZHRoLzIsdi5jeT12Lnkrdi5oZWlnaHQvMjt2YXIgd249bC5hdHRyaWJ1dGVzLnBvaW50cy5zcGxpdCgiICIpWzBdLnNwbGl0KCIsIiksbnQ9''@;'; put 'put ''KFdlPXduWzBdLXYuY3gsd25bMV0tdi5jeSksTHI9TWF0aC5zcXJ0KE1hdGgucG93KFdlLDIpK01hdGgucG93KG50LDIpKSxkcj1XZS9McixNcj0tbnQvTHJ9ZWxzZSBkcj0xLE1yPTA7aC5kPSJNICIrJHQrIiAiK3p0KyIgbSAiKyh3ZT15bipkcikrIiwiKyhGZT0tZ24qTXIpKyIgYSAiK3lu''@;'; put 'put ''KyIsIitnbisiIDAgMSwwICIrKFdlPShkdD15biotZHIpLXdlKSsiLCIrKG50PS1nbiotTXItRmUpKyIgYSAiK3luKyIsIitnbisiIDAgMSwwICIrLVdlKyIsIistbnQrInoiLGRlbGV0ZSBoLmN4LGRlbGV0ZSBoLmN5LGRlbGV0ZSBoLnJ4LGRlbGV0ZSBoLnJ5LGEuYXR0cmlidXRlcz1ofXJl''@;'; put 'put ''dHVybiBhfWZ1bmN0aW9uIExPdCgpe3RyeXtpX2UubG9hZCgpLnRoZW4oYT0+e2EubGF5b3V0KCIiLCJzdmciLCJkb3QiKSx0aGlzLmxheW91dFN5bmM9YS5sYXlvdXQuYmluZChhKSxudWxsPT10aGlzLl93b3JrZXImJnRoaXMuX2Rpc3BhdGNoLmNhbGwoImluaXRFbmQiLHRoaXMpLHRoaXMu''@;'; put 'put ''X2FmdGVySW5pdCYmdGhpcy5fYWZ0ZXJJbml0KCl9KX1jYXRjaHt9aWYobnVsbCE9dGhpcy5fd29ya2VyKXt2YXIgYz10aGlzLl92aXpVUkwsbD10aGlzO3RoaXMuX3dvcmtlclBvcnQub25tZXNzYWdlPWZ1bmN0aW9uKGEpe2wuX3dvcmtlckNhbGxiYWNrcy5zaGlmdCgpLmNhbGwobCxhKX0s''@;'; put 'put ''Yy5tYXRjaCgvXmh0dHBzPzpcL1wvfF5cL1wvL2kpfHwoYz1uZXcgd2luZG93LlVSTChjLGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpLmhyZWYpLEphZS5jYWxsKHRoaXMse3R5cGU6ImxheW91dCIsZG90OiIiLGVuZ2luZToiZG90Iix2aXpVUkw6Y30sZnVuY3Rpb24oYSl7fSksSmFlLmNhbGwo''@;'; put 'put ''dGhpcyx7dHlwZToidmVyc2lvbiJ9LGZ1bmN0aW9uKGEpeyJ2ZXJzaW9uIj09PWEuZGF0YS50eXBlJiYobC5fZ3JhcGh2aXpWZXJzaW9uPWEuZGF0YS52ZXJzaW9uLGwuX2Rpc3BhdGNoLmNhbGwoImluaXRFbmQiLHRoaXMpKX0pfX1mdW5jdGlvbiBKYWUoYyxsKXt0aGlzLl93b3JrZXJDYWxs''@;'; put 'put ''YmFja3MucHVzaChsKSx0aGlzLl93b3JrZXJQb3J0LnBvc3RNZXNzYWdlKGMpfWZ1bmN0aW9uIEZPdChjLGwpe3ZhciBhPXRoaXMuX29wdGlvbnMua2V5TW9kZSxkPXRoaXMuX29wdGlvbnMudHdlZW5QYXRocyxoPXRoaXMuX29wdGlvbnMudHdlZW5TaGFwZXM7aWYoInN0cmluZyI9PXR5cGVv''@;'; put 'put ''ZiB0aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uJiZ0aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uLmluY2x1ZGVzKCIlIikpdmFyIGY9K3RoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb24uc3BsaXQoIiUiKVswXS8xMDAsdj10aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uLmluY2x1''@;'; put 'put ''ZGVzKCIlIik7ZWxzZSBmPXRoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb24sdj0hMTt2YXIgTT10aGlzLl9vcHRpb25zLmdyb3dFbnRlcmluZ0VkZ2VzLEQ9e30sVT10aGlzLl9kaWN0aW9uYXJ5fHx7fSx0ZT17fSxvZT10aGlzLl9ub2RlRGljdGlvbmFyeXx8e307ZnVuY3Rpb24gZHQoZHIs''@;'; put 'put ''TXI9MCx2aSl7KGZ1bmN0aW9uIHZlKGRyLE1yKXt2YXIgdmk9ZHIudGFnO2lmKCJpbmRleCI9PWEpZHIua2V5PU1yO2Vsc2UgaWYoIiMiIT12aVswXSlpZigiaWQiPT1hKWRyLmtleT1kci5hdHRyaWJ1dGVzLmlkO2Vsc2UgaWYoInRpdGxlIj09YSl7dmFyIE5uPWRyLmNoaWxkcmVuLmZpbmQo''@;'; put 'put ''ZnVuY3Rpb24oQnIpe3JldHVybiJ0aXRsZSI9PUJyLnRhZ30pO05uJiYoZHIua2V5PU5uLmNoaWxkcmVuLmxlbmd0aD4wP05uLmNoaWxkcmVuWzBdLnRleHQ6IiIpfW51bGw9PWRyLmtleSYmKGgmJigiZWxsaXBzZSI9PXZpfHwicG9seWdvbiI9PXZpKSYmKHZpPSJwYXRoIiksZHIua2V5PXZp''@;'; put 'put ''KyItIitNcil9KShkcixNciksZnVuY3Rpb24gd2UoZHIsTXIpe2RyLmlkPShNcj9Nci5pZCsiLiI6IiIpK2RyLmtleX0oZHIsdmkpO3ZhciBCcj1VW2RyLmlkXTsoZnVuY3Rpb24gRmUoZHIpe0RbZHIuaWRdPWRyfSkoZHIpLGZ1bmN0aW9uIFdlKGRyLE1yKXtoJiZkci5pZCBpbiBVJiYoInBv''@;'; put 'put ''bHlnb24iPT1Nci50YWd8fCJlbGxpcHNlIj09TXIudGFnfHwicGF0aCI9PU1yLnRhZykmJihNci50YWchPWRyLnRhZ3x8InBvbHlnb24iPT1kci50YWcpJiYoInBhdGgiIT1Nci50YWcmJihkci5hbHRlcm5hdGl2ZU9sZD1hX2UoTXIsZHIpKSwicGF0aCIhPWRyLnRhZyYmKGRyLmFsdGVybmF0''@;'; put 'put ''aXZlTmV3PWFfZShkcixNcikpKX0oZHIsQnIpLGZ1bmN0aW9uIG50KGRyLE1yKXtpZihkJiZNciYmKCJwYXRoIj09TXIudGFnfHxkci5hbHRlcm5hdGl2ZU9sZCYmInBhdGgiPT1kci5hbHRlcm5hdGl2ZU9sZC50YWcpKXt2YXIgdmk9KGRyLmFsdGVybmF0aXZlTmV3fHxkcikuYXR0cmlidXRl''@;'; put 'put ''cy5kO2lmKGRyLmFsdGVybmF0aXZlT2xkKXZhciBObj1VYWUoZHIuYWx0ZXJuYXRpdmVPbGQpO2Vsc2UgTm49VWFlKE1yKTsoZHIuYWx0ZXJuYXRpdmVPbGR8fChkci5hbHRlcm5hdGl2ZU9sZD17fSkpLnBvaW50cz1mdW5jdGlvbiBRTHQoYyxsLGEsZCl7Y29uc3QgaD1jLGY9aC5jbG9uZU5v''@;'; put 'put ''ZGUoKSx2PWguZ2V0VG90YWxMZW5ndGgoKSxNPShmLnNldEF0dHJpYnV0ZSgiZCIsbCksZikuZ2V0VG90YWxMZW5ndGgoKSxEPVswXTtsZXQgVT0wO2NvbnN0IHRlPWQ/YTphL01hdGgubWF4KHYsTSk7Zm9yKDsoVSs9dGUpPDE7KUQucHVzaChVKTtyZXR1cm4gRC5wdXNoKDEpLEQubWFwKGZ1''@;'; put 'put ''bmN0aW9uKHZlKXtjb25zdCB3ZT1oLmdldFBvaW50QXRMZW5ndGgodmUqdiksRmU9Zi5nZXRQb2ludEF0TGVuZ3RoKHZlKk0pO3JldHVybltbd2UueCx3ZS55XSxbRmUueCxGZS55XV19KX0oTm4sdmksZix2KX19KGRyLEJyKTt2YXIgZXI9e307ZHIuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlv''@;'; put 'put ''bihUcil7dmFyICRyPVRyLnRhZzsoImVsbGlwc2UiPT0kcnx8InBvbHlnb24iPT0kcikmJigkcj0icGF0aCIpLG51bGw9PWVyWyRyXSYmKGVyWyRyXT0wKSxkdChUcixlclskcl0rKyxkcil9KX1mdW5jdGlvbiB6dChkcil7KGZ1bmN0aW9uIG10KGRyKXtpZihNJiZkci5wYXJlbnQmJiJub2Rl''@;'; put 'put ''Ij09ZHIucGFyZW50LmF0dHJpYnV0ZXMuY2xhc3MmJiJ0aXRsZSI9PWRyLnRhZyl7aWYoZHIuY2hpbGRyZW4ubGVuZ3RoPjApdmFyIE5uPWRyLmNoaWxkcmVuWzBdLnRleHQ7ZWxzZSBObj0iIjt0ZVtObl09ZHIucGFyZW50fX0pKGRyKSxmdW5jdGlvbiAkdChkcil7dmFyIHZpPWRyLnRhZztp''@;'; put 'put ''ZihNJiYhVVtkci5pZF0mJmRyLnBhcmVudCYmZV9lKGRyKSYmKCJwYXRoIj09dml8fCJwb2x5Z29uIj09dmkpKXtpZigicG9seWdvbiI9PXZpKXt2YXIgQnI9ZHIucGFyZW50LmNoaWxkcmVuLmZpbmQoZnVuY3Rpb24oTG4pe3JldHVybiJwYXRoIj09TG4udGFnfSk7QnImJihkci50b3RhbExl''@;'; put 'put ''bmd0aD1Cci50b3RhbExlbmd0aCl9dmFyIGVyPWZ1bmN0aW9uIG5PdChjKXtyZXR1cm4gZnVuY3Rpb24gdE90KGMpe3JldHVybiJlZGdlIj09Yy5wYXJlbnQuYXR0cmlidXRlcy5jbGFzcz9jLnBhcmVudDpjLnBhcmVudC5wYXJlbnQucGFyZW50fShjKS5jaGlsZHJlbi5maW5kKGZ1bmN0aW9u''@;'; put 'put ''KGwpe3JldHVybiJ0aXRsZSI9PWwudGFnfSl9KGRyKSxUcj1lci5jaGlsZHJlblswXSwkcj1Uci50ZXh0LnNwbGl0KCItPiIpOzIhPSRyLmxlbmd0aCYmKCRyPVRyLnRleHQuc3BsaXQoIi0tIikpO3ZhciBiaT0kclswXSxOaT10ZVtiaV07aWYoT2JqZWN0Lmhhc093bihvZSxiaSkpe3ZhciB2''@;'; put 'put ''YT1vZVtiaV07aWYoKHBhPU5pLmNoaWxkcmVuLmZpbmRJbmRleChmdW5jdGlvbihMbixpcil7cmV0dXJuImciPT1Mbi50YWd9KSk+PTApe3ZhciB4YT1OaS5jaGlsZHJlbltwYV0uY2hpbGRyZW4uZmluZEluZGV4KGZ1bmN0aW9uKExuLGlyKXtyZXR1cm4iYSI9PUxuLnRhZ30pO05pPU5pLmNo''@;'; put 'put ''aWxkcmVuW3BhXS5jaGlsZHJlblt4YV19KHBhPXZhLmNoaWxkcmVuLmZpbmRJbmRleChmdW5jdGlvbihMbixpcil7cmV0dXJuImciPT1Mbi50YWd9KSk+PTAmJih4YT12YS5jaGlsZHJlbltwYV0uY2hpbGRyZW4uZmluZEluZGV4KGZ1bmN0aW9uKGlyLEV0KXtyZXR1cm4iYSI9PWlyLnRhZ30p''@;'; put 'put ''LHZhPXZhLmNoaWxkcmVuW3BhXS5jaGlsZHJlblt4YV0pO2Zvcih2YXIgWnI9TmkuY2hpbGRyZW4scGE9MDtwYTxaci5sZW5ndGg7cGErKylpZigicG9seWdvbiI9PVpyW3BhXS50YWd8fCJlbGxpcHNlIj09WnJbcGFdLnRhZ3x8InBhdGgiPT1acltwYV0udGFnfHwidGV4dCI9PVpyW3BhXS50''@;'; put 'put ''YWcpe3ZhciB5dD1acltwYV07YnJlYWt9dmFyIE50PXZhLmNoaWxkcmVuO2ZvcihwYT0wO3BhPE50Lmxlbmd0aDtwYSsrKWlmKCJwb2x5Z29uIj09TnRbcGFdLnRhZ3x8ImVsbGlwc2UiPT1OdFtwYV0udGFnfHwicGF0aCI9PU50W3BhXS50YWd8fCJ0ZXh0Ij09TnRbcGFdLnRhZyl7dmFyIFF0''@;'; put 'put ''PU50W3BhXTticmVha31kci5vZmZzZXQ9UXQmJnl0P3t4OlF0LmNlbnRlci54LXl0LmNlbnRlci54LHk6UXQuY2VudGVyLnkteXQuY2VudGVyLnl9Ont4OjAseTowfX19fShkciksZHIuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihNcil7enQoTXIpfSl9dGhpcy5fZGlzcGF0Y2guY2FsbCgi''@;'; put 'put ''bGF5b3V0RW5kIix0aGlzKTt2YXIgeW49THMoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKS5hcHBlbmQoImRpdiIpLHduPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGMsImltYWdlL3N2Zyt4bWwiKTt5bi5hcHBlbmQoZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''d24uZG9jdW1lbnRFbGVtZW50fSk7dmFyIERyPVN5KHluLnNlbGVjdCgic3ZnIikpO3RoaXMuX2Rpc3BhdGNoLmNhbGwoImRhdGFFeHRyYWN0RW5kIix0aGlzKSxkdChEciksdGhpcy5fZGlzcGF0Y2guY2FsbCgiZGF0YVByb2Nlc3NQYXNzMUVuZCIsdGhpcyksenQoRHIpLHRoaXMuX2Rpc3Bh''@;'; put 'put ''dGNoLmNhbGwoImRhdGFQcm9jZXNzUGFzczJFbmQiLHRoaXMpLHRoaXMuX2RhdGE9RHIsdGhpcy5fZGljdGlvbmFyeT1ELHRoaXMuX25vZGVEaWN0aW9uYXJ5PXRlLHRoaXMuX2V4dHJhY3REYXRhPWZ1bmN0aW9uKGRyLE1yLHZpKXt2YXIgTm49U3koZHIpO3JldHVybiBkdChObixNcix2aSks''@;'; put 'put ''enQoTm4pLE5ufSx0aGlzLl9idXN5PSExLHRoaXMuX2Rpc3BhdGNoLmNhbGwoImRhdGFQcm9jZXNzRW5kIix0aGlzKSxsJiZsLmNhbGwodGhpcyksdGhpcy5fcXVldWUubGVuZ3RoPjAmJnRoaXMuX3F1ZXVlLnNoaWZ0KCkuY2FsbCh0aGlzKX1mdW5jdGlvbiBieihjLGwpe2lmKChhPShjPWw/''@;'; put 'put ''Yy50b0V4cG9uZW50aWFsKGwtMSk6Yy50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgYSxkPWMuc2xpY2UoMCxhKTtyZXR1cm5bZC5sZW5ndGg+MT9kWzBdK2Quc2xpY2UoMik6ZCwrYy5zbGljZShhKzEpXX12YXIgb19lLHNQdD0vXig/OiguKT8oWzw+''@;'; put 'put ''PV5dKSk/KFsrXC0oIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtmdW5jdGlvbiBRYWUoYyl7aWYoIShsPXNQdC5leGVjKGMpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK2MpO3ZhciBsO3JldHVybiBuZXcgZW9lKHtmaWxsOmxb''@;'; put 'put ''MV0sYWxpZ246bFsyXSxzaWduOmxbM10sc3ltYm9sOmxbNF0semVybzpsWzVdLHdpZHRoOmxbNl0sY29tbWE6bFs3XSxwcmVjaXNpb246bFs4XSYmbFs4XS5zbGljZSgxKSx0cmltOmxbOV0sdHlwZTpsWzEwXX0pfWZ1bmN0aW9uIGVvZShjKXt0aGlzLmZpbGw9dm9pZCAwPT09Yy5maWxsPyIg''@;'; put 'put ''IjpjLmZpbGwrIiIsdGhpcy5hbGlnbj12b2lkIDA9PT1jLmFsaWduPyI+IjpjLmFsaWduKyIiLHRoaXMuc2lnbj12b2lkIDA9PT1jLnNpZ24/Ii0iOmMuc2lnbisiIix0aGlzLnN5bWJvbD12b2lkIDA9PT1jLnN5bWJvbD8iIjpjLnN5bWJvbCsiIix0aGlzLnplcm89ISFjLnplcm8sdGhpcy53''@;'; put 'put ''aWR0aD12b2lkIDA9PT1jLndpZHRoP3ZvaWQgMDorYy53aWR0aCx0aGlzLmNvbW1hPSEhYy5jb21tYSx0aGlzLnByZWNpc2lvbj12b2lkIDA9PT1jLnByZWNpc2lvbj92b2lkIDA6K2MucHJlY2lzaW9uLHRoaXMudHJpbT0hIWMudHJpbSx0aGlzLnR5cGU9dm9pZCAwPT09Yy50eXBlPyIiOmMu''@;'; put 'put ''dHlwZSsiIn1mdW5jdGlvbiBzX2UoYyxsKXt2YXIgYT1ieihjLGwpO2lmKCFhKXJldHVybiBjKyIiO3ZhciBkPWFbMF0saD1hWzFdO3JldHVybiBoPDA/IjAuIituZXcgQXJyYXkoLWgpLmpvaW4oIjAiKStkOmQubGVuZ3RoPmgrMT9kLnNsaWNlKDAsaCsxKSsiLiIrZC5zbGljZShoKzEpOmQr''@;'; put 'put ''bmV3IEFycmF5KGgtZC5sZW5ndGgrMikuam9pbigiMCIpfVFhZS5wcm90b3R5cGU9ZW9lLnByb3RvdHlwZSxlb2UucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikr''@;'; put 'put ''KHZvaWQgMD09PXRoaXMud2lkdGg/IiI6TWF0aC5tYXgoMSwwfHRoaXMud2lkdGgpKSsodGhpcy5jb21tYT8iLCI6IiIpKyh2b2lkIDA9PT10aGlzLnByZWNpc2lvbj8iIjoiLiIrTWF0aC5tYXgoMCwwfHRoaXMucHJlY2lzaW9uKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX07Y29u''@;'; put 'put ''c3QgbF9lPXsiJSI6KGMsbCk9PigxMDAqYykudG9GaXhlZChsKSxiOmM9Pk1hdGgucm91bmQoYykudG9TdHJpbmcoMiksYzpjPT5jKyIiLGQ6ZnVuY3Rpb24gclB0KGMpe3JldHVybiBNYXRoLmFicyhjPU1hdGgucm91bmQoYykpPj0xZTIxP2MudG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFj''@;'; put 'put ''ZSgvLC9nLCIiKTpjLnRvU3RyaW5nKDEwKX0sZTooYyxsKT0+Yy50b0V4cG9uZW50aWFsKGwpLGY6KGMsbCk9PmMudG9GaXhlZChsKSxnOihjLGwpPT5jLnRvUHJlY2lzaW9uKGwpLG86Yz0+TWF0aC5yb3VuZChjKS50b1N0cmluZyg4KSxwOihjLGwpPT5zX2UoMTAwKmMsbCkscjpzX2Usczpm''@;'; put 'put ''dW5jdGlvbiBjUHQoYyxsKXt2YXIgYT1ieihjLGwpO2lmKCFhKXJldHVybiBjKyIiO3ZhciBkPWFbMF0saD1hWzFdLGY9aC0ob19lPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGgvMykpKSkrMSx2PWQubGVuZ3RoO3JldHVybiBmPT09dj9kOmY+dj9kK25ldyBBcnJheShm''@;'; put 'put ''LXYrMSkuam9pbigiMCIpOmY+MD9kLnNsaWNlKDAsZikrIi4iK2Quc2xpY2UoZik6IjAuIituZXcgQXJyYXkoMS1mKS5qb2luKCIwIikrYnooYyxNYXRoLm1heCgwLGwrZi0xKSlbMF19LFg6Yz0+TWF0aC5yb3VuZChjKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSx4OmM9Pk1hdGgucm91''@;'; put 'put ''bmQoYykudG9TdHJpbmcoMTYpfTtmdW5jdGlvbiBjX2UoYyl7cmV0dXJuIGN9dmFyIF96LGkzLHVfZT1BcnJheS5wcm90b3R5cGUubWFwLGRfZT1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4YjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXTshZnVuY3Rpb24g''@;'; put 'put ''aFB0KGMpe196PWZ1bmN0aW9uIHVQdChjKXt2YXIgbD12b2lkIDA9PT1jLmdyb3VwaW5nfHx2b2lkIDA9PT1jLnRob3VzYW5kcz9jX2U6ZnVuY3Rpb24gYVB0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKGEsZCl7Zm9yKHZhciBoPWEubGVuZ3RoLGY9W10sdj0wLE09Y1swXSxEPTA7aD4wJiZNPjAm''@;'; put 'put ''JihEK00rMT5kJiYoTT1NYXRoLm1heCgxLGQtRCkpLGYucHVzaChhLnN1YnN0cmluZyhoLT1NLGgrTSkpLCEoKEQrPU0rMSk+ZCkpOylNPWNbdj0odisxKSVjLmxlbmd0aF07cmV0dXJuIGYucmV2ZXJzZSgpLmpvaW4obCl9fSh1X2UuY2FsbChjLmdyb3VwaW5nLE51bWJlciksYy50aG91c2Fu''@;'; put 'put ''ZHMrIiIpLGE9dm9pZCAwPT09Yy5jdXJyZW5jeT8iIjpjLmN1cnJlbmN5WzBdKyIiLGQ9dm9pZCAwPT09Yy5jdXJyZW5jeT8iIjpjLmN1cnJlbmN5WzFdKyIiLGg9dm9pZCAwPT09Yy5kZWNpbWFsPyIuIjpjLmRlY2ltYWwrIiIsZj12b2lkIDA9PT1jLm51bWVyYWxzP2NfZTpmdW5jdGlvbiBv''@;'; put 'put ''UHQoYyl7cmV0dXJuIGZ1bmN0aW9uKGwpe3JldHVybiBsLnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24oYSl7cmV0dXJuIGNbK2FdfSl9fSh1X2UuY2FsbChjLm51bWVyYWxzLFN0cmluZykpLHY9dm9pZCAwPT09Yy5wZXJjZW50PyIlIjpjLnBlcmNlbnQrIiIsTT12b2lkIDA9PT1jLm1pbnVz''@;'; put 'put ''PyJcdTIyMTIiOmMubWludXMrIiIsRD12b2lkIDA9PT1jLm5hbj8iTmFOIjpjLm5hbisiIjtmdW5jdGlvbiBVKG9lKXt2YXIgdmU9KG9lPVFhZShvZSkpLmZpbGwsd2U9b2UuYWxpZ24sRmU9b2Uuc2lnbixXZT1vZS5zeW1ib2wsbnQ9b2UuemVybyxkdD1vZS53aWR0aCxtdD1vZS5jb21tYSwk''@;'; put 'put ''dD1vZS5wcmVjaXNpb24senQ9b2UudHJpbSx5bj1vZS50eXBlOyJuIj09PXluPyhtdD0hMCx5bj0iZyIpOmxfZVt5bl18fCh2b2lkIDA9PT0kdCYmKCR0PTEyKSx6dD0hMCx5bj0iZyIpLChudHx8IjAiPT09dmUmJiI9Ij09PXdlKSYmKG50PSEwLHZlPSIwIix3ZT0iPSIpO3ZhciBnbj0iJCI9''@;'; put 'put ''PT1XZT9hOiIjIj09PVdlJiYvW2JveFhdLy50ZXN0KHluKT8iMCIreW4udG9Mb3dlckNhc2UoKToiIix3bj0iJCI9PT1XZT9kOi9bJXBdLy50ZXN0KHluKT92OiIiLFJuPWxfZVt5bl0sRHI9L1tkZWZncHJzJV0vLnRlc3QoeW4pO2Z1bmN0aW9uIExyKGRyKXt2YXIgTm4sQnIsZXIsTXI9Z24s''@;'; put 'put ''dmk9d247aWYoImMiPT09eW4pdmk9Um4oZHIpK3ZpLGRyPSIiO2Vsc2V7dmFyIFRyPShkcj0rZHIpPDB8fDEvZHI8MDtpZihkcj1pc05hTihkcik/RDpSbihNYXRoLmFicyhkciksJHQpLHp0JiYoZHI9ZnVuY3Rpb24gbFB0KGMpe2U6Zm9yKHZhciBoLGw9Yy5sZW5ndGgsYT0xLGQ9LTE7YTxs''@;'; put 'put ''OysrYSlzd2l0Y2goY1thXSl7Y2FzZSIuIjpkPWg9YTticmVhaztjYXNlIjAiOjA9PT1kJiYoZD1hKSxoPWE7YnJlYWs7ZGVmYXVsdDppZighK2NbYV0pYnJlYWsgZTtkPjAmJihkPTApfXJldHVybiBkPjA/Yy5zbGljZSgwLGQpK2Muc2xpY2UoaCsxKTpjfShkcikpLFRyJiYwPT0rZHImJiIr''@;'; put 'put ''IiE9PUZlJiYoVHI9ITEpLE1yPShUcj8iKCI9PT1GZT9GZTpNOiItIj09PUZlfHwiKCI9PT1GZT8iIjpGZSkrTXIsdmk9KCJzIj09PXluP2RfZVs4K29fZS8zXToiIikrdmkrKFRyJiYiKCI9PT1GZT8iKSI6IiIpLERyKWZvcihObj0tMSxCcj1kci5sZW5ndGg7KytObjxCcjspaWYoNDg+KGVy''@;'; put 'put ''PWRyLmNoYXJDb2RlQXQoTm4pKXx8ZXI+NTcpe3ZpPSg0Nj09PWVyP2grZHIuc2xpY2UoTm4rMSk6ZHIuc2xpY2UoTm4pKSt2aSxkcj1kci5zbGljZSgwLE5uKTticmVha319bXQmJiFudCYmKGRyPWwoZHIsMS8wKSk7dmFyICRyPU1yLmxlbmd0aCtkci5sZW5ndGgrdmkubGVuZ3RoLGJpPSRy''@;'; put 'put ''PGR0P25ldyBBcnJheShkdC0kcisxKS5qb2luKHZlKToiIjtzd2l0Y2gobXQmJm50JiYoZHI9bChiaStkcixiaS5sZW5ndGg/ZHQtdmkubGVuZ3RoOjEvMCksYmk9IiIpLHdlKXtjYXNlIjwiOmRyPU1yK2RyK3ZpK2JpO2JyZWFrO2Nhc2UiPSI6ZHI9TXIrYmkrZHIrdmk7YnJlYWs7Y2FzZSJe''@;'; put 'put ''Ijpkcj1iaS5zbGljZSgwLCRyPWJpLmxlbmd0aD4+MSkrTXIrZHIrdmkrYmkuc2xpY2UoJHIpO2JyZWFrO2RlZmF1bHQ6ZHI9YmkrTXIrZHIrdml9cmV0dXJuIGYoZHIpfXJldHVybiAkdD12b2lkIDA9PT0kdD82Oi9bZ3Byc10vLnRlc3QoeW4pP01hdGgubWF4KDEsTWF0aC5taW4oMjEsJHQp''@;'; put 'put ''KTpNYXRoLm1heCgwLE1hdGgubWluKDIwLCR0KSksTHIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gb2UrIiJ9LExyfXJldHVybntmb3JtYXQ6VSxmb3JtYXRQcmVmaXg6ZnVuY3Rpb24gdGUob2UsdmUpe3ZhciB3ZT1VKCgob2U9UWFlKG9lKSkudHlwZT0iZiIsb2UpKSxGZT0zKk1hdGgu''@;'; put 'put ''bWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihmdW5jdGlvbiBpUHQoYyl7cmV0dXJuKGM9YnooTWF0aC5hYnMoYykpKT9jWzFdOk5hTn0odmUpLzMpKSksV2U9TWF0aC5wb3coMTAsLUZlKSxudD1kX2VbOCtGZS8zXTtyZXR1cm4gZnVuY3Rpb24oZHQpe3JldHVybiB3ZShXZSpkdCkrbnR9''@;'; put 'put ''fX19KGMpLGkzPV96LmZvcm1hdH0oe3Rob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdfSk7Y29uc3QgdG9lPU1hdGguUEksbm9lPTIqdG9lLHh5PTFlLTYsZ1B0PW5vZS14eTtmdW5jdGlvbiBoX2UoYyl7dGhpcy5fKz1jWzBdO2ZvcihsZXQgbD0xLGE9Yy5sZW5n''@;'; put 'put ''dGg7bDxhOysrbCl0aGlzLl8rPWFyZ3VtZW50c1tsXStjW2xdfWNsYXNzIHJvZXtjb25zdHJ1Y3RvcihsKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIix0aGlzLl9hcHBlbmQ9bnVsbD09bD9oX2U6ZnVuY3Rpb24gbVB0KGMpe2xldCBsPU1hdGgu''@;'; put 'put ''Zmxvb3IoYyk7aWYoIShsPj0wKSl0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgZGlnaXRzOiAke2N9YCk7aWYobD4xNSlyZXR1cm4gaF9lO2NvbnN0IGE9MTAqKmw7cmV0dXJuIGZ1bmN0aW9uKGQpe3RoaXMuXys9ZFswXTtmb3IobGV0IGg9MSxmPWQubGVuZ3RoO2g8ZjsrK2gpdGhpcy5fKz1N''@;'; put 'put ''YXRoLnJvdW5kKGFyZ3VtZW50c1toXSphKS9hK2RbaF19fShsKX1tb3ZlVG8obCxhKXt0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDA9dGhpcy5feDE9K2x9LCR7dGhpcy5feTA9dGhpcy5feTE9K2F9YH1jbG9zZVBhdGgoKXtudWxsIT09dGhpcy5feDEmJih0aGlzLl94MT10aGlzLl94MCx0aGlz''@;'; put 'put ''Ll95MT10aGlzLl95MCx0aGlzLl9hcHBlbmRgWmApfWxpbmVUbyhsLGEpe3RoaXMuX2FwcGVuZGBMJHt0aGlzLl94MT0rbH0sJHt0aGlzLl95MT0rYX1gfXF1YWRyYXRpY0N1cnZlVG8obCxhLGQsaCl7dGhpcy5fYXBwZW5kYFEkeytsfSwkeythfSwke3RoaXMuX3gxPStkfSwke3RoaXMuX3kx''@;'; put 'put ''PStofWB9YmV6aWVyQ3VydmVUbyhsLGEsZCxoLGYsdil7dGhpcy5fYXBwZW5kYEMkeytsfSwkeythfSwkeytkfSwkeytofSwke3RoaXMuX3gxPStmfSwke3RoaXMuX3kxPSt2fWB9YXJjVG8obCxhLGQsaCxmKXtpZihsPStsLGE9K2EsZD0rZCxoPStoLChmPStmKTwwKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cihgbmVnYXRpdmUgcmFkaXVzOiAke2Z9YCk7bGV0IHY9dGhpcy5feDEsTT10aGlzLl95MSxEPWQtbCxVPWgtYSx0ZT12LWwsb2U9TS1hLHZlPXRlKnRlK29lKm9lO2lmKG51bGw9PT10aGlzLl94MSl0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDE9bH0sJHt0aGlzLl95MT1hfWA7ZWxzZSBpZih2''@;'; put 'put ''ZT54eSlpZihNYXRoLmFicyhvZSpELVUqdGUpPnh5JiZmKXtsZXQgd2U9ZC12LEZlPWgtTSxXZT1EKkQrVSpVLG50PXdlKndlK0ZlKkZlLGR0PU1hdGguc3FydChXZSksbXQ9TWF0aC5zcXJ0KHZlKSwkdD1mKk1hdGgudGFuKCh0b2UtTWF0aC5hY29zKChXZSt2ZS1udCkvKDIqZHQqbXQpKSkv''@;'; put 'put ''MiksenQ9JHQvbXQseW49JHQvZHQ7TWF0aC5hYnMoenQtMSk+eHkmJnRoaXMuX2FwcGVuZGBMJHtsK3p0KnRlfSwke2ErenQqb2V9YCx0aGlzLl9hcHBlbmRgQSR7Zn0sJHtmfSwwLDAsJHsrKG9lKndlPnRlKkZlKX0sJHt0aGlzLl94MT1sK3luKkR9LCR7dGhpcy5feTE9YSt5bipVfWB9ZWxz''@;'; put 'put ''ZSB0aGlzLl9hcHBlbmRgTCR7dGhpcy5feDE9bH0sJHt0aGlzLl95MT1hfWB9YXJjKGwsYSxkLGgsZix2KXtpZihsPStsLGE9K2Esdj0hIXYsKGQ9K2QpPDApdGhyb3cgbmV3IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6ICR7ZH1gKTtsZXQgTT1kKk1hdGguY29zKGgpLEQ9ZCpNYXRoLnNpbiho''@;'; put 'put ''KSxVPWwrTSx0ZT1hK0Qsb2U9MV52LHZlPXY/aC1mOmYtaDtudWxsPT09dGhpcy5feDE/dGhpcy5fYXBwZW5kYE0ke1V9LCR7dGV9YDooTWF0aC5hYnModGhpcy5feDEtVSk+eHl8fE1hdGguYWJzKHRoaXMuX3kxLXRlKT54eSkmJnRoaXMuX2FwcGVuZGBMJHtVfSwke3RlfWAsZCYmKHZlPDAm''@;'; put 'put ''Jih2ZT12ZSVub2Urbm9lKSx2ZT5nUHQ/dGhpcy5fYXBwZW5kYEEke2R9LCR7ZH0sMCwxLCR7b2V9LCR7bC1NfSwke2EtRH1BJHtkfSwke2R9LDAsMSwke29lfSwke3RoaXMuX3gxPVV9LCR7dGhpcy5feTE9dGV9YDp2ZT54eSYmdGhpcy5fYXBwZW5kYEEke2R9LCR7ZH0sMCwkeysodmU+PXRv''@;'; put 'put ''ZSl9LCR7b2V9LCR7dGhpcy5feDE9bCtkKk1hdGguY29zKGYpfSwke3RoaXMuX3kxPWErZCpNYXRoLnNpbihmKX1gKX1yZWN0KGwsYSxkLGgpe3RoaXMuX2FwcGVuZGBNJHt0aGlzLl94MD10aGlzLl94MT0rbH0sJHt0aGlzLl95MD10aGlzLl95MT0rYX1oJHtkPStkfXYkeytofWgkey1kfVpg''@;'; put 'put ''fXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX319ZnVuY3Rpb24gZl9lKCl7cmV0dXJuIG5ldyByb2V9ZnVuY3Rpb24gdlB0KGMsbCxhLGQpe3JldHVybiBsPS1sLGQ9LWQsW2MsbF09W2MqYS1sKmQsYypkK2wqYV0sW2MsbD0tbF19ZnVuY3Rpb24gcF9lKGMsbCxhLGQsaCxmLHYpe3ZhciBEPVN5''@;'; put 'put ''KHlfZS5jYWxsKHRoaXMsZikpO2MuZGF0YShbRF0pLHJJLmNhbGwoYy5ub2RlKCksRCksZ19lKGMsbCxhLGQsaCxmLHYpfWZ1bmN0aW9uIGdfZShjLGwsYSxkLGgsZix2KXt2YXIgTT12LnNob3J0ZW5pbmd8fDAsb2U9W1swLC0zLjVdLFsxMCwwXSxbMCwzLjVdLFswLC0zLjVdXSx2ZT1kLWws''@;'; put 'put ''d2U9aC1hLEZlPU1hdGguc3FydCh2ZSp2ZSt3ZSp3ZSk7aWYoMD09RmUpdmFyIFdlPTEsbnQ9MDtlbHNlIFdlPXZlL0ZlLG50PXdlL0ZlO2lmKGQ9bCsoRmUtTS0xMC0uMSkqV2UsaD1hKyhGZS1NLTEwLS4xKSpudCxmLlVSTHx8Zi50b29sdGlwKXZhciBkdD1jLnNlbGVjdFdpdGhvdXREYXRh''@;'; put 'put ''UHJvcGFnYXRpb24oImciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJhIiksbXQ9ZHQuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigicGF0aCIpLCR0PWR0LnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInBvbHlnb24iKTtlbHNlIG10PWMuc2VsZWN0V2l0aG91dERh''@;'; put 'put ''dGFQcm9wYWdhdGlvbigicGF0aCIpLCR0PWMuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigicG9seWdvbiIpO3ZhciB6dD1mX2UoKTt6dC5tb3ZlVG8obCxhKSx6dC5saW5lVG8oZCxoKSxtdC5hdHRyKCJkIix6dCksZD1sKyhGZS1NLTEwKSpXZSxoPWErKEZlLU0tMTApKm50O2Zvcih2''@;'; put 'put ''YXIgeW49MDt5bjxvZS5sZW5ndGg7eW4rKylvZVt5bl09dlB0KChnbj1vZVt5bl0pWzBdLGduWzFdLFdlLG50KTtmb3IoeW49MDt5bjxvZS5sZW5ndGg7eW4rKylvZVt5bl09W2QrKGduPW9lW3luXSlbMF0saCtnblsxXV07dmFyIHduPVtdO2Zvcih5bj0wO3luPG9lLmxlbmd0aDt5bisrKXt2''@;'; put 'put ''YXIgZ247d24ucHVzaCgoZ249b2VbeW5dKS5qb2luKCIsIikpfXZhciBSbj13bi5qb2luKCIgIik7cmV0dXJuICR0LmF0dHIoInBvaW50cyIsUm4pLHRoaXN9ZnVuY3Rpb24gbV9lKCl7cmV0dXJuIHRoaXMuX2RyYXduRWRnZT8odGhpcy5fZHJhd25FZGdlLmcucmVtb3ZlKCksdGhpcy5fZHJh''@;'; put 'put ''d25FZGdlPW51bGwsdGhpcyk6dGhpc31mdW5jdGlvbiB2X2UoKXtyZXR1cm4gdGhpcy5fZHJhd25FZGdlP3RoaXMuX2RyYXduRWRnZS5nOkxzKG51bGwpfWZ1bmN0aW9uIHlfZShjKXt2YXIgbD0iIjtmb3IodmFyIGEgb2YgT2JqZWN0LmtleXMoYykpbnVsbCE9Y1thXSYmKGwrPScgIicrYSsn''@;'; put 'put ''Ij0iJytjW2FdKyciJyk7dmFyIGg9dGhpcy5sYXlvdXRTeW5jKCJkaWdyYXBoIHthIC0+IGIgWyIrbCsiXX0iLCJzdmciLCJkb3QiKSx2PShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGgsImltYWdlL3N2Zyt4bWwiKTtyZXR1cm4gTHMoZG9jdW1lbnQuY3JlYXRlRG9j''@;'; put 'put ''dW1lbnRGcmFnbWVudCgpKS5hcHBlbmQoZnVuY3Rpb24oKXtyZXR1cm4gdi5kb2N1bWVudEVsZW1lbnR9KS5zZWxlY3QoIi5lZGdlIil9ZnVuY3Rpb24gYl9lKGMsbCxhLGQsaCxmKXt2YXIgTT1TeShTX2UuY2FsbCh0aGlzLGQsaCkpO3JldHVybiBjLmRhdGEoW01dKSxySS5jYWxsKGMubm9k''@;'; put 'put ''ZSgpLE0pLF9fZShjLGwsYSxoKSx0aGlzfWZ1bmN0aW9uIF9fZShjLGwsYSxkLGgpe2lmKGQuVVJMfHxkLnRvb2x0aXApdmFyIGY9Yy5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiYSIpO2Vsc2UgZj1jO3ZhciB2PWYuc2Vs''@;'; put 'put ''ZWN0QWxsKCJlbGxpcHNlLHBvbHlnb24scGF0aCxwb2x5bGluZSIpLE09Yy5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJ0ZXh0Iik7aWYoMCE9di5zaXplKCkpe3ZhciBEPXYubm9kZSgpLmdldEJCb3goKTtELmN4PUQueCtELndpZHRoLzIsRC5jeT1ELnkrRC5oZWlnaHQvMn1lbHNl''@;'; put 'put ''IDAhPU0uc2l6ZSgpJiYoRD17eDorTS5hdHRyKCJ4IikseTorTS5hdHRyKCJ5Iiksd2lkdGg6MCxoZWlnaHQ6MCxjeDorTS5hdHRyKCJ4IiksY3k6K00uYXR0cigieSIpfSk7cmV0dXJuIHYuZWFjaChmdW5jdGlvbihVLHRlKXt2YXIgb2U9THModGhpcyk7aWYob2UuYXR0cigiY3giKSlvZS5h''@;'; put 'put ''dHRyKCJjeCIsTTgobCkpLmF0dHIoImN5IixNOChhKSk7ZWxzZSBpZihvZS5hdHRyKCJwb2ludHMiKSl7dmFyIHZlPW9lLmF0dHIoInBvaW50cyIpLnRyaW0oKTtvZS5hdHRyKCJwb2ludHMiLGZ1bmN0aW9uIElPdChmLGwsYSl7dmFyIGgsZD0oaD1mLnNwbGl0KCIgIikpLm1hcChmdW5jdGlv''@;'; put 'put ''bih2KXtyZXR1cm4gdi5zcGxpdCgiLCIpfSk7cmV0dXJuIGQ9aC5tYXAoZnVuY3Rpb24odil7cmV0dXJuW004KCtsKyArdi5zcGxpdCgiLCIpWzBdKSxNOCgrYSsgK3Yuc3BsaXQoIiwiKVsxXSldfSksKGg9ZC5tYXAoZnVuY3Rpb24odil7cmV0dXJuIHYuam9pbigiLCIpfSkpLmpvaW4oIiAi''@;'; put 'put ''KX0odmUsbC1ELmN4LGEtRC5jeSkpfWVsc2V7dmFyIHdlPW9lLmF0dHIoImQiKTtvZS5hdHRyKCJkIixmdW5jdGlvbiBST3QoYyxsLGEpeyhmPWMuc3BsaXQoL1tBLVogXS8pKS5zaGlmdCgpO3ZhciBkPWMuc3BsaXQoL1teW0EtWiBdKy8pLGY9KGYubWFwKGZ1bmN0aW9uKHYpe3JldHVybiB2''@;'; put 'put ''LnNwbGl0KCIsIil9KSxmLm1hcChmdW5jdGlvbih2KXtyZXR1cm5bTTgoK2wrICt2LnNwbGl0KCIsIilbMF0pLE04KCthKyArdi5zcGxpdCgiLCIpWzFdKV19KS5tYXAoZnVuY3Rpb24odil7cmV0dXJuIHYuam9pbigiLCIpfSkpO3JldHVybiBkLnJlZHVjZShmdW5jdGlvbih2LE0sRCl7cmV0''@;'; put 'put ''dXJuIHYuY29uY2F0KE0sZltEXSl9LFtdKS5qb2luKCIiKX0od2UsbC1ELmN4LGEtRC5jeSkpfX0pLDAhPU0uc2l6ZSgpJiZNLmF0dHIoIngiLE04KCtNLmF0dHIoIngiKStsLUQuY3gpKS5hdHRyKCJ5IixNOCgrTS5hdHRyKCJ5IikrYS1ELmN5KSksdGhpc31mdW5jdGlvbiB3X2UoKXtpZigh''@;'; put 'put ''dGhpcy5fZHJhd25Ob2RlKXJldHVybiB0aGlzO3ZhciBjPXRoaXMuX2RyYXduTm9kZS5nO3JldHVybiBjLmVtcHR5KCl8fGMucmVtb3ZlKCksdGhpcy5fZHJhd25Ob2RlPW51bGwsdGhpc31mdW5jdGlvbiBDX2UoKXtyZXR1cm4gdGhpcy5fZHJhd25Ob2RlP3RoaXMuX2RyYXduTm9kZS5nOkxz''@;'; put 'put ''KG51bGwpfWZ1bmN0aW9uIFNfZShjLGwpe3ZhciBhPSIiO2Zvcih2YXIgZCBvZiBPYmplY3Qua2V5cyhsKSludWxsIT1sW2RdJiYoYSs9JyAiJytkKyciPSInK2xbZF0rJyInKTt2YXIgZj10aGlzLmxheW91dFN5bmMoJ2dyYXBoIHsiJytjKyciIFsnK2ErIl19Iiwic3ZnIiwiZG90IiksTT0o''@;'; put 'put ''bmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhmLCJpbWFnZS9zdmcreG1sIik7cmV0dXJuIExzKGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSkuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIE0uZG9jdW1lbnRFbGVtZW50fSkuc2VsZWN0KCIubm9kZSIpfWZ1''@;'; put 'put ''bmN0aW9uIHd6KGMpe3NlbGYuZG9jdW1lbnQ9e30sYy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihsKXtsZXQgYT1zZWxmWyJAaHBjYy1qcy93YXNtIl07bnVsbD09YSYmbC5kYXRhLnZpelVSTCYmKGltcG9ydFNjcmlwdHMobC5kYXRhLnZpelVSTCksYT1zZWxmWyJAaHBj''@;'; put 'put ''Yy1qcy93YXNtIl0pLCJ2ZXJzaW9uIiE9bC5kYXRhLnR5cGU/YS5HcmFwaHZpei5sb2FkKCkudGhlbihkPT57Y29uc3QgaD1kLmxheW91dChsLmRhdGEuZG90LCJzdmciLGwuZGF0YS5lbmdpbmUsbC5kYXRhLm9wdGlvbnMpO2MucG9zdE1lc3NhZ2UoaD97dHlwZToiZG9uZSIsc3ZnOmh9Omwu''@;'; put 'put ''ZGF0YS52aXpVUkw/e3R5cGU6ImluaXQifTp7dHlwZToic2tpcCJ9KX0pLmNhdGNoKGQ9PntjLnBvc3RNZXNzYWdlKHt0eXBlOiJlcnJvciIsZXJyb3I6ZC5tZXNzYWdlfSl9KTphLkdyYXBodml6LmxvYWQoKS50aGVuKGQ9PntjLnBvc3RNZXNzYWdlKHt0eXBlOiJ2ZXJzaW9uIix2ZXJzaW9u''@;'; put 'put ''OmQudmVyc2lvbigpfSl9KX0pfWZ1bmN0aW9uIEVQdCgpe3d6KHNlbGYpfWZ1bmN0aW9uIFRQdCgpe3NlbGYub25jb25uZWN0PWZ1bmN0aW9uKGMpe2NvbnN0IGw9Yy5wb3J0c1swXTt3eihsKSxsLnN0YXJ0KCl9fWZ1bmN0aW9uIGlvZShjLGwpe2lmKHRoaXMuX29wdGlvbnM9e3VzZVdvcmtl''@;'; put 'put ''cjohMCx1c2VTaGFyZWRXb3JrZXI6ITEsZW5naW5lOiJkb3QiLGtleU1vZGU6InRpdGxlIixmYWRlOiEwLHR3ZWVuUGF0aHM6ITAsdHdlZW5TaGFwZXM6ITAsY29udmVydEVxdWFsU2lkZWRQb2x5Z29uczohMCx0d2VlblByZWNpc2lvbjoxLGdyb3dFbnRlcmluZ0VkZ2VzOiEwLHpvb206ITAs''@;'; put 'put ''em9vbVNjYWxlRXh0ZW50OlsuMSwxMF0sem9vbVRyYW5zbGF0ZUV4dGVudDpbWy0xLzAsLTEvMF0sWzEvMCwxLzBdXSx3aWR0aDpudWxsLGhlaWdodDpudWxsLHNjYWxlOjEsZml0OiExfSxsIGluc3RhbmNlb2YgT2JqZWN0KWZvcih2YXIgYSBvZiBPYmplY3Qua2V5cyhsKSl0aGlzLl9vcHRp''@;'; put 'put ''b25zW2FdPWxbYV07ZWxzZSJib29sZWFuIj09dHlwZW9mIGwmJih0aGlzLl9vcHRpb25zLnVzZVdvcmtlcj1sKTt2YXIgZD10aGlzLl9vcHRpb25zLnVzZVdvcmtlcixoPXRoaXMuX29wdGlvbnMudXNlU2hhcmVkV29ya2VyO2lmKHR5cGVvZiBXb3JrZXI+InUiJiYoZD0hMSksdHlwZW9mIFNo''@;'; put 'put ''YXJlZFdvcmtlcj4idSImJihoPSExKSxkfHxoKXt2YXIgdj1TYWUoInNjcmlwdCIpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiJqYXZhc2NyaXB0L3dvcmtlciI9PUxzKHRoaXMpLmF0dHIoInR5cGUiKXx8THModGhpcykuYXR0cigic3JjIikmJkxzKHRoaXMpLmF0dHIoInNyYyIpLm1hdGNo''@;'; put 'put ''KC8uKlwvQGhwY2MtanNcL3dhc20vKX0pOzA9PXYuc2l6ZSgpPyhjb25zb2xlLndhcm4oJ05vIHNjcmlwdCB0YWcgb2YgdHlwZSAiamF2YXNjcmlwdC93b3JrZXIiIHdhcyBmb3VuZCBhbmQgInVzZVdvcmtlciIgaXMgdHJ1ZS4gTm90IHVzaW5nIHdlYiB3b3JrZXIuJyksZD0hMSxoPSExKToo''@;'; put 'put ''dGhpcy5fdml6VVJMPXYuYXR0cigic3JjIiksdGhpcy5fdml6VVJMfHwoY29uc29sZS53YXJuKCdObyAic3JjIiBhdHRyaWJ1dGUgb2Ygd2FzIGZvdW5kIG9uIHRoZSAiamF2YXNjcmlwdC93b3JrZXIiIHNjcmlwdCB0YWcgYW5kICJ1c2VXb3JrZXIiIGlzIHRydWUuIE5vdCB1c2luZyB3ZWIg''@;'; put 'put ''d29ya2VyLicpLGQ9ITEsaD0hMSkpfWlmKGgpe2NvbnN0IFU9ImRhdGE6YXBwbGljYXRpb24vamF2YXNjcmlwdDtiYXNlNjQsIitidG9hKHd6LnRvU3RyaW5nKCkrIigiK1RQdC50b1N0cmluZygpKyIpKCkiKTt0aGlzLl93b3JrZXI9dGhpcy5fd29ya2VyPW5ldyBTaGFyZWRXb3JrZXIoVSks''@;'; put 'put ''dGhpcy5fd29ya2VyUG9ydD10aGlzLl93b3JrZXIucG9ydCx0aGlzLl93b3JrZXJQb3J0Q2xvc2U9dGhpcy5fd29ya2VyLnBvcnQuY2xvc2UuYmluZCh0aGlzLl93b3JrZXJQb3J0KSx0aGlzLl93b3JrZXIucG9ydC5zdGFydCgpLHRoaXMuX3dvcmtlckNhbGxiYWNrcz1bXX1lbHNlIGlmKGQp''@;'; put 'put ''e3ZhciBNPW5ldyBCbG9iKFt3ei50b1N0cmluZygpKyIoIitFUHQudG9TdHJpbmcoKSsiKSgpIl0pLEQ9d2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoTSk7dGhpcy5fd29ya2VyPW5ldyBXb3JrZXIoRCksdGhpcy5fd29ya2VyUG9ydD10aGlzLl93b3JrZXIsdGhpcy5fd29ya2VyUG9ydENs''@;'; put 'put ''b3NlPXRoaXMuX3dvcmtlci50ZXJtaW5hdGUuYmluZCh0aGlzLl93b3JrZXIpLHRoaXMuX3dvcmtlckNhbGxiYWNrcz1bXX1lbHNlIGlfZS5sb2FkKCkudGhlbigoVT0+e3RoaXMuX2dyYXBodml6VmVyc2lvbj1VLnZlcnNpb24oKX0pLmJpbmQodGhpcykpO3RoaXMuX3NlbGVjdGlvbj1jLHRo''@;'; put 'put ''aXMuX2FjdGl2ZT0hMSx0aGlzLl9idXN5PSExLHRoaXMuX2pvYnM9W10sdGhpcy5fcXVldWU9W10sdGhpcy5fa2V5TW9kZXM9bmV3IFNldChbInRpdGxlIiwiaWQiLCJ0YWctaW5kZXgiLCJpbmRleCJdKSx0aGlzLl9pbWFnZXM9W10sdGhpcy5fdHJhbnNsYXRpb249dm9pZCAwLHRoaXMuX3Nj''@;'; put 'put ''YWxlPXZvaWQgMCx0aGlzLl9ldmVudFR5cGVzPVsiaW5pdEVuZCIsInN0YXJ0IiwibGF5b3V0U3RhcnQiLCJsYXlvdXRFbmQiLCJkYXRhRXh0cmFjdEVuZCIsImRhdGFQcm9jZXNzUGFzczFFbmQiLCJkYXRhUHJvY2Vzc1Bhc3MyRW5kIiwiZGF0YVByb2Nlc3NFbmQiLCJyZW5kZXJTdGFydCIs''@;'; put 'put ''InJlbmRlckVuZCIsInRyYW5zaXRpb25TdGFydCIsInRyYW5zaXRpb25FbmQiLCJyZXN0b3JlRW5kIiwiZW5kIiwiem9vbSJdLHRoaXMuX2Rpc3BhdGNoPU1hZSguLi50aGlzLl9ldmVudFR5cGVzKSxMT3QuY2FsbCh0aGlzKSxjLm5vZGUoKS5fX2dyYXBodml6X189dGhpc31mdW5jdGlvbiBD''@;'; put 'put ''eihjLGwpe3JldHVybiBMcyhjKS5ncmFwaHZpeihsKX1mX2UucHJvdG90eXBlPXJvZS5wcm90b3R5cGUsaW9lLnByb3RvdHlwZT1Dei5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmlvZSxlbmdpbmU6ZnVuY3Rpb24gWU90KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLmVuZ2luZT1jLHRoaXN9LGFk''@;'; put 'put ''ZEltYWdlOmZ1bmN0aW9uIEdPdChjLGwsYSl7cmV0dXJuIHRoaXMuX2ltYWdlcy5wdXNoKHtwYXRoOmMsd2lkdGg6bCxoZWlnaHQ6YX0pLHRoaXN9LGtleU1vZGU6ZnVuY3Rpb24gJE90KGMpe2lmKCF0aGlzLl9rZXlNb2Rlcy5oYXMoYykpdGhyb3cgRXJyb3IoIklsbGVnYWwga2V5TW9kZTog''@;'; put 'put ''IitjKTtpZihjIT10aGlzLl9vcHRpb25zLmtleU1vZGUmJm51bGwhPXRoaXMuX2RhdGEpdGhyb3cgRXJyb3IoIlRvbyBsYXRlIHRvIGNoYW5nZSBrZXlNb2RlIik7cmV0dXJuIHRoaXMuX29wdGlvbnMua2V5TW9kZT1jLHRoaXN9LGZhZGU6ZnVuY3Rpb24gS090KGMpe3JldHVybiB0aGlzLl9v''@;'; put 'put ''cHRpb25zLmZhZGU9Yyx0aGlzfSx0d2VlblBhdGhzOmZ1bmN0aW9uIFhPdChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy50d2VlblBhdGhzPWMsdGhpc30sdHdlZW5TaGFwZXM6ZnVuY3Rpb24gcU90KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnR3ZWVuU2hhcGVzPWMsYyYmKHRoaXMuX29wdGlv''@;'; put 'put ''bnMudHdlZW5QYXRocz0hMCksdGhpc30sY29udmVydEVxdWFsU2lkZWRQb2x5Z29uczpmdW5jdGlvbiBKT3QoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuY29udmVydEVxdWFsU2lkZWRQb2x5Z29ucz1jLHRoaXN9LHR3ZWVuUHJlY2lzaW9uOmZ1bmN0aW9uIFFPdChjKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''b3B0aW9ucy50d2VlblByZWNpc2lvbj1jLHRoaXN9LGdyb3dFbnRlcmluZ0VkZ2VzOmZ1bmN0aW9uIGVQdChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5ncm93RW50ZXJpbmdFZGdlcz1jLHRoaXN9LHpvb206ZnVuY3Rpb24gWUx0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnpvb209Yyx0aGlz''@;'; put 'put ''Ll9vcHRpb25zLnpvb20mJiF0aGlzLl96b29tQmVoYXZpb3I/SmJlLmNhbGwodGhpcyk6IXRoaXMuX29wdGlvbnMuem9vbSYmdGhpcy5fem9vbUJlaGF2aW9yJiYodGhpcy5fem9vbVNlbGVjdGlvbi5vbigiLnpvb20iLG51bGwpLHRoaXMuX3pvb21CZWhhdmlvcj1udWxsKSx0aGlzfSxyZXNl''@;'; put 'put ''dFpvb206ZnVuY3Rpb24gR0x0KGMpe3ZhciBsPXRoaXMuX3pvb21TZWxlY3Rpb247cmV0dXJuIGMmJihsPWwudHJhbnNpdGlvbihjKSksbC5jYWxsKHRoaXMuX3pvb21CZWhhdmlvci50cmFuc2Zvcm0sdGhpcy5fb3JpZ2luYWxUcmFuc2Zvcm0pLHRoaXN9LHpvb21CZWhhdmlvcjpmdW5jdGlv''@;'; put 'put ''biBYTHQoKXtyZXR1cm4gdGhpcy5fem9vbUJlaGF2aW9yfHxudWxsfSx6b29tU2VsZWN0aW9uOmZ1bmN0aW9uIHFMdCgpe3JldHVybiB0aGlzLl96b29tU2VsZWN0aW9ufHxudWxsfSx6b29tU2NhbGVFeHRlbnQ6ZnVuY3Rpb24gJEx0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnpvb21TY2Fs''@;'; put 'put ''ZUV4dGVudD1jLHRoaXN9LHpvb21UcmFuc2xhdGVFeHRlbnQ6ZnVuY3Rpb24gS0x0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnpvb21UcmFuc2xhdGVFeHRlbnQ9Yyx0aGlzfSxyZW5kZXI6ZnVuY3Rpb24gck90KGMpe3JldHVybiB0aGlzLl9idXN5Pyh0aGlzLl9xdWV1ZS5wdXNoKHRoaXMu''@;'; put 'put ''cmVuZGVyLmJpbmQodGhpcyxjKSksdGhpcyk6KHRoaXMuX2Rpc3BhdGNoLmNhbGwoInJlbmRlclN0YXJ0Iix0aGlzKSx0aGlzLl90cmFuc2l0aW9uRmFjdG9yeT9leihmdW5jdGlvbigpe3RoaXMuX3RyYW5zaXRpb249TmFlKHRoaXMuX3RyYW5zaXRpb25GYWN0b3J5KCkpLHRfZS5jYWxsKHRo''@;'; put 'put ''aXMsYyl9LmJpbmQodGhpcyksMCk6dF9lLmNhbGwodGhpcyxjKSx0aGlzKX0sbGF5b3V0OmZ1bmN0aW9uIE9PdChjLGwsYSxkKXtpZih0aGlzLl93b3JrZXIpSmFlLmNhbGwodGhpcyx7dHlwZToibGF5b3V0Iixkb3Q6YyxlbmdpbmU6bCxvcHRpb25zOmF9LGZ1bmN0aW9uKGYpe2QuY2FsbCh0''@;'; put 'put ''aGlzLGYuZGF0YSl9KTtlbHNlIHRyeXt2YXIgaD10aGlzLmxheW91dFN5bmMoYywic3ZnIixsLGEpO2QuY2FsbCh0aGlzLHt0eXBlOiJkb25lIixzdmc6aH0pfWNhdGNoKGYpe2QuY2FsbCh0aGlzLHt0eXBlOiJlcnJvciIsZXJyb3I6Zi5tZXNzYWdlfSl9fSxkb3Q6ZnVuY3Rpb24gUE90KGMs''@;'; put 'put ''bCl7dmFyIGE9dGhpcyxoPXRoaXMuX29wdGlvbnMuZW5naW5lLGY9dGhpcy5faW1hZ2VzO3JldHVybiB0aGlzLl9kaXNwYXRjaC5jYWxsKCJzdGFydCIsdGhpcyksdGhpcy5fYnVzeT0hMCx0aGlzLl9kaXNwYXRjaC5jYWxsKCJsYXlvdXRTdGFydCIsdGhpcyksdGhpcy5fd29ya2VyfHxudWxs''@;'; put 'put ''IT10aGlzLmxheW91dFN5bmM/KHRoaXMubGF5b3V0KGMsaCx7aW1hZ2VzOmZ9LGZ1bmN0aW9uKE0pe3N3aXRjaChNLnR5cGUpe2Nhc2UiZXJyb3IiOmlmKCFhLl9vbmVycm9yKXRocm93IE0uZXJyb3IubWVzc2FnZTthLl9vbmVycm9yKE0uZXJyb3IpO2JyZWFrO2Nhc2UiZG9uZSI6Rk90LmNh''@;'; put 'put ''bGwodGhpcyxNLnN2ZyxsKX19KSx0aGlzKToodGhpcy5fYWZ0ZXJJbml0PXRoaXMuZG90LmJpbmQodGhpcyxjLGwpLHRoaXMpfSxkYXRhOmZ1bmN0aW9uIGVPdCgpe3JldHVybiB0aGlzLl9kYXRhfHxudWxsfSxyZW5kZXJEb3Q6ZnVuY3Rpb24gSE90KGMsbCl7dmFyIGE9dGhpcztyZXR1cm4g''@;'; put 'put ''dGhpcy5kb3QoYyxmdW5jdGlvbiBkKCl7YS5yZW5kZXIobCl9KSx0aGlzfSx0cmFuc2l0aW9uOmZ1bmN0aW9uIE5PdChjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIEZ1bmN0aW9uP3RoaXMuX3RyYW5zaXRpb25GYWN0b3J5PWM6dGhpcy5fdHJhbnNpdGlvbj1OYWUoYyksdGhpc30sYWN0aXZlOmZ1''@;'; put 'put ''bmN0aW9uIFZPdChjKXt2YXIgYT10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIik7cmV0dXJuIDAhPWEuc2l6ZSgpP2Z1bmN0aW9uIHhMdChjLGwpe3ZhciBkLGgsYT1jLl9fdHJhbnNpdGlvbjtpZihhKWZvcihoIGluIGw9bnVsbD09bD9udWxsOmwr''@;'; put 'put ''IiIsYSlpZigoZD1hW2hdKS5zdGF0ZT4xJiZkLm5hbWU9PT1sKXJldHVybiBuZXcgZmcoW1tjXV0sTUx0LGwsK2gpO3JldHVybiBudWxsfShhLm5vZGUoKSxjKTpudWxsfSxvcHRpb25zOmZ1bmN0aW9uIEJPdChjKXtpZih0eXBlb2YgYz4idSIpcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sdGhp''@;'; put 'put ''cy5fb3B0aW9ucyk7Zm9yKHZhciBsIG9mIE9iamVjdC5rZXlzKGMpKXRoaXMuX29wdGlvbnNbbF09Y1tsXTtyZXR1cm4gdGhpc30sd2lkdGg6ZnVuY3Rpb24gak90KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLndpZHRoPWMsdGhpc30saGVpZ2h0OmZ1bmN0aW9uIHpPdChjKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fb3B0aW9ucy5oZWlnaHQ9Yyx0aGlzfSxzY2FsZTpmdW5jdGlvbiBVT3QoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuc2NhbGU9Yyx0aGlzfSxmaXQ6ZnVuY3Rpb24gWk90KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLmZpdD1jLHRoaXN9LGF0dHJpYnV0ZXI6ZnVuY3Rpb24gV090KGMpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9hdHRyaWJ1dGVyPWMsdGhpc30sb246ZnVuY3Rpb24gdFB0KGMsbCl7cmV0dXJuIHRoaXMuX2Rpc3BhdGNoLm9uKGMsbCksdGhpc30sb25lcnJvcjpmdW5jdGlvbiBuUHQoYyl7cmV0dXJuIHRoaXMuX29uZXJyb3I9Yyx0aGlzfSxsb2dFdmVudHM6ZnVuY3Rpb24gZlB0KGMp''@;'; put 'put ''e3ZhciBsPURhdGUubm93KCksYT17fSxkPXRoaXMuX2V2ZW50VHlwZXMsaD1NYXRoLm1heCguLi5kLm1hcChEPT5ELmxlbmd0aCkpO2ZvcihsZXQgRD0wO0Q8ZC5sZW5ndGg7RCsrKXtsZXQgVT1kW0RdO2FbVV09W107dmFyIHYsTSxmPXRoaXM7dGhpcy5vbihVKyIubG9nIixjP2Z1bmN0aW9u''@;'; put 'put ''KCl7dmFyIHRlPURhdGUubm93KCksb2U9YVtVXS5sZW5ndGg7YVtVXS5wdXNoKHRlKTt2YXIgdmU9IiI7aWYodmUrPSJFdmVudCAiLHZlKz1pMygiID4yIikoRCkrIiAiLHZlKz1VKyIgIi5yZXBlYXQoaC1VLmxlbmd0aCksdmUrPWkzKCIgPjUiKSh0ZS1sKSsiICIsImluaXRFbmQiIT1VJiYo''@;'; put 'put ''dmUrPWkzKCIgPjUiKSh0ZS1hLnN0YXJ0W29lXSkpLCJkYXRhUHJvY2Vzc0VuZCI9PVUmJih2ZSs9IiBwcmVwYXJlICAgICAgICAgICAgICAgICAiK2kzKCIgPjUiKSh0ZS1hLmxheW91dEVuZFtvZV0pKSwicmVuZGVyRW5kIj09VSYmZi5fdHJhbnNpdGlvbiYmKHZlKz0iIHRyYW5zaXRpb24g''@;'; put 'put ''c3RhcnQgbWFyZ2luICIraTMoIiA+NSIpKGYuX3RyYW5zaXRpb24uZGVsYXkoKS0odGUtYS5yZW5kZXJTdGFydFtvZV0pKSx2PWYuX3RyYW5zaXRpb24uZGVsYXkoKSxNPWYuX3RyYW5zaXRpb24uZHVyYXRpb24oKSksInRyYW5zaXRpb25TdGFydCI9PVUpe3ZhciB3ZT10ZS1hLnJlbmRlclN0''@;'; put 'put ''YXJ0W29lXTt2ZSs9IiB0cmFuc2l0aW9uIGRlbGF5ICAgICAgICAiK2kzKCIgPjUiKSh0ZS1hLnJlbmRlclN0YXJ0W29lXSksdmUrPSIgZXhwZWN0ZWQgIitpMygiID41IikodiksdmUrPSIgZGlmZiAiK2kzKCIgPjUiKSh3ZS12KX1pZigidHJhbnNpdGlvbkVuZCI9PVUpe3ZhciBGZT10ZS1h''@;'; put 'put ''LnRyYW5zaXRpb25TdGFydFtvZV07dmUrPSIgdHJhbnNpdGlvbiBkdXJhdGlvbiAgICAgIitpMygiID41IikoRmUpLHZlKz0iIGV4cGVjdGVkICIraTMoIiA+NSIpKE0pLHZlKz0iIGRpZmYgIitpMygiID41IikoRmUtTSl9Y29uc29sZS5sb2codmUpLGw9dGV9Om51bGwpfXJldHVybiB0aGlz''@;'; put 'put ''fSxkZXN0cm95OmZ1bmN0aW9uIHBQdCgpe3JldHVybiBkZWxldGUgdGhpcy5fc2VsZWN0aW9uLm5vZGUoKS5fX2dyYXBodml6X18sdGhpcy5fd29ya2VyJiZ0aGlzLl93b3JrZXJQb3J0Q2xvc2UoKSx0aGlzfSxkcmF3RWRnZTpmdW5jdGlvbiB5UHQoYyxsLGEsZCxoLGY9e30pe2lmKChoPU9i''@;'; put 'put ''amVjdC5hc3NpZ24oe30saCkpLnN0eWxlJiZoLnN0eWxlLmluY2x1ZGVzKCJpbnZpcyIpKXZhciB2PUxzKG51bGwpO2Vsc2V7dmFyIFU9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKSxv''@;'; put 'put ''ZT1TeSh5X2UuY2FsbCh0aGlzLGgpKTt2PVUuYXBwZW5kKCJnIikuZGF0YShbb2VdKSxySS5jYWxsKHYubm9kZSgpLG9lKSxwX2UuY2FsbCh0aGlzLHYsYyxsLGEsZCxoLGYpfXJldHVybiB0aGlzLl9kcmF3bkVkZ2U9e2c6dix4MTpjLHkxOmwseDI6YSx5MjpkLGF0dHJpYnV0ZXM6aH0sdGhp''@;'; put 'put ''c30sdXBkYXRlRHJhd25FZGdlOmZ1bmN0aW9uIGJQdChjLGwsYSxkLGg9e30sZj17fSl7aWYoIXRoaXMuX2RyYXduRWRnZSl0aHJvdyBFcnJvcigiTm8gZWRnZSBoYXMgYmVlbiBkcmF3biIpO3ZhciB2PXRoaXMuX2RyYXduRWRnZS5nO3JldHVybiBoPU9iamVjdC5hc3NpZ24odGhpcy5fZHJh''@;'; put 'put ''d25FZGdlLmF0dHJpYnV0ZXMsaCksdGhpcy5fZHJhd25FZGdlLngxPWMsdGhpcy5fZHJhd25FZGdlLnkxPWwsdGhpcy5fZHJhd25FZGdlLngyPWEsdGhpcy5fZHJhd25FZGdlLnkyPWQsIXYuZW1wdHkoKXx8aC5zdHlsZSYmaC5zdHlsZS5pbmNsdWRlcygiaW52aXMiKXx8KHY9dGhpcy5fc2Vs''@;'; put 'put ''ZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKS5hcHBlbmQoImciKSx0aGlzLl9kcmF3bkVkZ2UuZz12KSx2LmVtcHR5KCl8fHBfZS5jYWxsKHRoaXMsdixjLGwsYSxkLGgsZiksdGhpc30sbW92ZURyYXdu''@;'; put 'put ''RWRnZUVuZFBvaW50OmZ1bmN0aW9uIF9QdChjLGwsYT17fSl7aWYoIXRoaXMuX2RyYXduRWRnZSl0aHJvdyBFcnJvcigiTm8gZWRnZSBoYXMgYmVlbiBkcmF3biIpO3ZhciBkPXRoaXMuX2RyYXduRWRnZS5nLGg9dGhpcy5fZHJhd25FZGdlLngxLGY9dGhpcy5fZHJhd25FZGdlLnkxLHY9dGhp''@;'; put 'put ''cy5fZHJhd25FZGdlLmF0dHJpYnV0ZXM7cmV0dXJuIHRoaXMuX2RyYXduRWRnZS54Mj1jLHRoaXMuX2RyYXduRWRnZS55Mj1sLGdfZShkLGgsZixjLGwsdixhKSx0aGlzfSxpbnNlcnREcmF3bkVkZ2U6ZnVuY3Rpb24gd1B0KGMpe2lmKCF0aGlzLl9kcmF3bkVkZ2UpdGhyb3cgRXJyb3IoIk5v''@;'; put 'put ''IGVkZ2UgaGFzIGJlZW4gZHJhd24iKTt2YXIgbD10aGlzLl9kcmF3bkVkZ2UuZztpZihsLmVtcHR5KCkpcmV0dXJuIHRoaXM7bC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJ0aXRsZSIpLnRleHQoYyk7dmFyIHY9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFn''@;'; put 'put ''YXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKSxNPXYuZGF0dW0oKSxEPXRoaXMuX2V4dHJhY3REYXRhKGwsTS5jaGlsZHJlbi5sZW5ndGgsdi5kYXR1bSgpKTtyZXR1cm4gTS5jaGlsZHJlbi5wdXNoKEQpLFphZShsLEQpLHRoaXMuX2RyYXduRWRnZT1udWxs''@;'; put 'put ''LHRoaXN9LHJlbW92ZURyYXduRWRnZTptX2UscmVtb3ZlRHJhd25FZGdlOm1fZSxkcmF3bkVkZ2VTZWxlY3Rpb246dl9lLGRyYXduRWRnZVNlbGVjdGlvbjp2X2UsZHJhd05vZGU6ZnVuY3Rpb24gQ1B0KGMsbCxhLGQ9e30saD17fSl7aWYoKGQ9T2JqZWN0LmFzc2lnbih7fSxkKSkuc3R5bGUm''@;'; put 'put ''JmQuc3R5bGUuaW5jbHVkZXMoImludmlzIikpdmFyIGY9THMobnVsbCk7ZWxzZXt2YXIgRD10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLHRlPVN5KFNfZS5jYWxsKHRoaXMsYSxkKSk7''@;'; put 'put ''Zj1ELmFwcGVuZCgiZyIpLmRhdGEoW3RlXSksckkuY2FsbChmLm5vZGUoKSx0ZSksYl9lLmNhbGwodGhpcyxmLGMsbCxhLGQsaCl9cmV0dXJuIHRoaXMuX2RyYXduTm9kZT17ZzpmLG5vZGVJZDphLHg6Yyx5OmwsYXR0cmlidXRlczpkfSx0aGlzfSx1cGRhdGVEcmF3bk5vZGU6ZnVuY3Rpb24g''@;'; put 'put ''U1B0KGMsbCxhLGQ9e30saD17fSl7aWYoIXRoaXMuX2RyYXduTm9kZSl0aHJvdyBFcnJvcigiTm8gbm9kZSBoYXMgYmVlbiBkcmF3biIpO3ZhciBmPXRoaXMuX2RyYXduTm9kZS5nO3JldHVybiBudWxsPT1hJiYoYT10aGlzLl9kcmF3bk5vZGUubm9kZUlkKSxkPU9iamVjdC5hc3NpZ24odGhp''@;'; put 'put ''cy5fZHJhd25Ob2RlLmF0dHJpYnV0ZXMsZCksdGhpcy5fZHJhd25Ob2RlLm5vZGVJZD1hLHRoaXMuX2RyYXduTm9kZS54PWMsdGhpcy5fZHJhd25Ob2RlLnk9bCwhZi5lbXB0eSgpfHxkLnN0eWxlJiZkLnN0eWxlLmluY2x1ZGVzKCJpbnZpcyIpfHwoZj10aGlzLl9zZWxlY3Rpb24uc2VsZWN0''@;'; put 'put ''V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLmFwcGVuZCgiZyIpLHRoaXMuX2RyYXduTm9kZS5nPWYpLGYuZW1wdHkoKXx8Yl9lLmNhbGwodGhpcyxmLGMsbCxhLGQsaCksdGhpc30sbW92ZURyYXduTm9kZTpmdW5jdGlvbiBN''@;'; put 'put ''UHQoYyxsLGE9e30pe2lmKCF0aGlzLl9kcmF3bk5vZGUpdGhyb3cgRXJyb3IoIk5vIG5vZGUgaGFzIGJlZW4gZHJhd24iKTt2YXIgZD10aGlzLl9kcmF3bk5vZGUuZyxoPXRoaXMuX2RyYXduTm9kZS5hdHRyaWJ1dGVzO3JldHVybiB0aGlzLl9kcmF3bk5vZGUueD1jLHRoaXMuX2RyYXduTm9k''@;'; put 'put ''ZS55PWwsZC5lbXB0eSgpfHxfX2UoZCxjLGwsaCksdGhpc30saW5zZXJ0RHJhd25Ob2RlOmZ1bmN0aW9uIHhQdChjKXtpZighdGhpcy5fZHJhd25Ob2RlKXRocm93IEVycm9yKCJObyBub2RlIGhhcyBiZWVuIGRyYXduIik7bnVsbD09YyYmKGM9dGhpcy5fZHJhd25Ob2RlLm5vZGVJZCk7dmFy''@;'; put 'put ''IGw9dGhpcy5fZHJhd25Ob2RlLmc7aWYobC5lbXB0eSgpKXJldHVybiB0aGlzO3ZhciBhPXRoaXMuX2RyYXduTm9kZS5hdHRyaWJ1dGVzO2lmKGwuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigidGl0bGUiKS50ZXh0KGMpLGEuVVJMfHxhLnRvb2x0aXApdmFyIGY9bC5zZWxlY3RXaXRo''@;'; put 'put ''b3V0RGF0YVByb3BhZ2F0aW9uKCJnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiYSIpLE09KGYuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZWxsaXBzZSxwb2x5Z29uLHBhdGgscG9seWxpbmUiKSxmLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRleHQiKSk7''@;'; put 'put ''ZWxzZSBsLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImVsbGlwc2UscG9seWdvbixwYXRoLHBvbHlsaW5lIiksTT1sLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRleHQiKTtNLnRleHQoYS5sYWJlbHx8Yyk7dmFyIHRlPXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0''@;'; put 'put ''RGF0YVByb3BhZ2F0aW9uKCJzdmciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIiksb2U9dGUuZGF0dW0oKSx2ZT10aGlzLl9leHRyYWN0RGF0YShsLG9lLmNoaWxkcmVuLmxlbmd0aCx0ZS5kYXR1bSgpKTtyZXR1cm4gb2UuY2hpbGRyZW4ucHVzaCh2ZSksWmFlKGwsdmUpLHRo''@;'; put 'put ''aXMuX2RyYXduTm9kZT1udWxsLHRoaXN9LHJlbW92ZURyYXduTm9kZTp3X2UscmVtb3ZlRHJhd25Ob2RlOndfZSxkcmF3bk5vZGVTZWxlY3Rpb246Q19lLGRyYXduTm9kZVNlbGVjdGlvbjpDX2UsZ3JhcGh2aXpWZXJzaW9uOmZ1bmN0aW9uIGlPdCgpe3JldHVybiB0aGlzLl9ncmFwaHZpelZl''@;'; put 'put ''cnNpb259fSx2eS5wcm90b3R5cGUuZ3JhcGh2aXo9ZnVuY3Rpb24gQVB0KGMpe3ZhciBsPXRoaXMubm9kZSgpLl9fZ3JhcGh2aXpfXztyZXR1cm4gbD8obC5vcHRpb25zKGMpLGV6KGZ1bmN0aW9uKCl7bC5fZGlzcGF0Y2guY2FsbCgiaW5pdEVuZCIsdGhpcyl9LmJpbmQodGhpcyksMCkpOmw9''@;'; put 'put ''bmV3IGlvZSh0aGlzLGMpLGx9LHZ5LnByb3RvdHlwZS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uPWZ1bmN0aW9uIGtQdChjKXtyZXR1cm4gTHModGhpcy5zaXplKCk+MD90aGlzLm5vZGUoKS5xdWVyeVNlbGVjdG9yKGMpOm51bGwpfTt2YXIgRFB0PWIoOTgwODMpO2Z1bmN0aW9uIElQ''@;'; put 'put ''dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDI5KX1mdW5jdGlvbiBSUHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItaWNvbiIsMzApLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpO3JldHVybiBoLmxpYnJhcmllc1NlYXJjaD0iIixDdCho''@;'; put 'put ''LmxpYnJhcnlPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIExQdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDI0KSgxLCJkaXYiLDI1KSgyLCJpbnB1dCIsMjYsMiksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9''@;'; put 'put ''T2UoKTtyZXR1cm4gZmkoZi5saWJyYXJpZXNTZWFyY2gsaCl8fChmLmxpYnJhcmllc1NlYXJjaD1oKSxDdChoKX0pLE90KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5saWJyYXJ5T25GaWx0ZXIoKSl9KSxoZSgpLGd0KDQsSVB0LDEsMCwiY2xyLWljb24iLDI3KSg1''@;'; put 'put ''LFJQdCwxLDAsImNsci1pY29uIiwyOCksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1mYSgzKSxkPU9lKCk7ZmUoMiksbGkoIm5nTW9kZWwiLGQubGlicmFyaWVzU2VhcmNoKSxmZSgyKSxFZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxFZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9''@;'; put 'put ''fWZ1bmN0aW9uIE9QdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDI5KX1mdW5jdGlvbiBQUHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItaWNvbiIsMzApLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKSxPZSgpO2NvbnN0IGg9ZmEoMyksZj1PZSgyKS4kaW1wbGlj''@;'; put 'put ''aXQsdj1PZSgpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLEN0KHYudHJlZU9uRmlsdGVyKGYsInRhYmxlcy5UQUJMRU5BTUUiKSl9KSxoZSgpfX1mdW5jdGlvbiBGUHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwyNCkoMSwiZGl2''@;'; put 'put ''IiwyNSkoMiwiaW5wdXQiLDM2LDMpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDIpLiRpbXBsaWNpdDtyZXR1cm4gZmkoZi5zZWFyY2hTdHJpbmcsaCl8fChmLnNlYXJjaFN0cmluZz1oKSxDdChoKX0pLE90KCJrZXl1cCIsZnVuY3Rpb24oKXt3dChh''@;'; put 'put ''KTtjb25zdCBoPU9lKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoKS50cmVlT25GaWx0ZXIoaCwidGFibGVzLlRBQkxFTkFNRSIpKX0pLGhlKCksZ3QoNCxPUHQsMSwwLCJjbHItaWNvbiIsMjcpKDUsUFB0LDEsMCwiY2xyLWljb24iLDI4KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWZhKDMp''@;'; put 'put ''LGQ9T2UoMikuJGltcGxpY2l0O2ZlKDIpLGxpKCJuZ01vZGVsIixkLnNlYXJjaFN0cmluZyksZmUoMiksRWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksRWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBIUHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwyOSl9''@;'; put 'put ''ZnVuY3Rpb24gTlB0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLWljb24iLDMwKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSksT2UoKTtjb25zdCBoPWZhKDMpLGY9T2UoKS4kaW1wbGljaXQsdj1PZSgzKTtyZXR1cm4gaC52YWx1ZT0iIixmLnNlYXJjaFN0cmluZz0i''@;'; put 'put ''IixDdCh2LnRyZWVPbkZpbHRlcihmLCJjb2x1bW5zLkNPTE5BTUUiKSl9KSxoZSgpfX1mdW5jdGlvbiBWUHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwyNCkoMSwiZGl2IiwyNSkoMiwiaW5wdXQiLDM5LDMpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5j''@;'; put 'put ''dGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCkuJGltcGxpY2l0O3JldHVybiBmaShmLnNlYXJjaFN0cmluZyxoKXx8KGYuc2VhcmNoU3RyaW5nPWgpLEN0KGgpfSksT3QoImtleXVwIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKDMpLnRyZWVP''@;'; put 'put ''bkZpbHRlcihoLCJjb2x1bW5zLkNPTE5BTUUiKSl9KSxoZSgpLGd0KDQsSFB0LDEsMCwiY2xyLWljb24iLDI3KSg1LE5QdCwxLDAsImNsci1pY29uIiwyOCksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1mYSgzKSxkPU9lKCkuJGltcGxpY2l0O2ZlKDIpLGxpKCJuZ01vZGVsIixkLnNlYXJjaFN0''@;'; put 'put ''cmluZyksZmUoMiksRWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksRWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBCUHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdHJlZS1ub2RlIikoMSwiYnV0dG9uIiw0MCksT3QoImNsaWNrIixmdW5j''@;'; put 'put ''dGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0LGY9T2UoKS4kaW1wbGljaXQsdj1PZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkuY29sdW1uT25DbGljayhoLHYsZikpfSksR3QoMiwiY2xyLWljb24iLDQxKSxQZSgzKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0''@;'; put 'put ''LGQ9T2UoNCk7ZmUoKSx4cigiY29sdW1uLWFjdGl2ZSIsZC5saWJDb2x1bW5BY3RpdmUoYS5DT0xVUkkpKSxmZSgyKSxJcigiICIsYS5DT0xOQU1FLCIgIil9fWZ1bmN0aW9uIGpQdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDMyKSxPdCgiY2xpY2si''@;'; put 'put ''LGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0LHY9T2UoMikuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLnRyZWVOb2RlQ2xpY2tlZChoLGYsdi50YWJsZXMpKX0pLGNpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0''@;'; put 'put ''dXJuIGZpKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksZGUoMSwicCIsMzcpLE90KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdCxmPU9lKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoKS50YWJsZU9uQ2xpY2soaC5UQUJMRVVSSSxoLGYp''@;'; put 'put ''KX0pLEd0KDIsImNsci1pY29uIiwzOCksUGUoMyksaGUoKSxndCg0LFZQdCw2LDMsImNsci10cmVlLW5vZGUiLDUpKDUsQlB0LDQsMywiY2xyLXRyZWUtbm9kZSIsNiksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7eHIoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCksbGkoImNs''@;'; put 'put ''ckV4cGFuZGVkIixhLmV4cGFuZGVkKSxFZSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nQ29sdW1ucyYmIWEuY29sdW1ucyksZmUoKSxFZSgiaWQiLGEuVEFCTEVVUkkpLGZlKDIpLElyKCIgIixhLlRBQkxFTkFNRSwiICIpLGZlKCksRWUoIm5nSWYiLGEuY29sdW1ucyksZmUoKSxFZSgibmdGb3JP''@;'; put 'put ''ZiIsYS5jb2x1bW5zKX19ZnVuY3Rpb24gelB0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMzIpLE90KCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpLiRpbXBsaWNpdCx2PU9lKCk7cmV0dXJuIEN0KHYudHJlZU5vZGVDbGlja2Vk''@;'; put 'put ''KGgsZix2LmxpYnJhcnlMaXN0KSl9KSxjaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKS4kaW1wbGljaXQ7cmV0dXJuIGZpKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksZGUoMSwicCIsMzMpLE90KCJjbGljayIsZnVuY3Rp''@;'; put 'put ''b24oKXt3dChhKTtjb25zdCBoPU9lKCkuJGltcGxpY2l0LGY9T2UoKTtyZXR1cm4gZi5saWI9aC5MSUJSQVJZSUQsQ3QoZi5saWJyYXJ5T25DbGljayhmLmxpYnx8IiIsaCkpfSksR3QoMiwiY2xyLWljb24iLDM0KSxQZSgzKSxoZSgpLGd0KDQsRlB0LDYsMywiY2xyLXRyZWUtbm9kZSIsNSko''@;'; put 'put ''NSxqUHQsNiw4LCJjbHItdHJlZS1ub2RlIiwzNSksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQ7eHIoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCksbGkoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSxFZSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nVGFibGVzJiYhYS50YWJs''@;'; put 'put ''ZXMpLGZlKDMpLElyKCIgIixhLkxJQlJBUllOQU1FLCIgIiksZmUoKSxFZSgibmdJZiIsYS50YWJsZXMpLGZlKCksRWUoIm5nRm9yT2YiLGEudGFibGVzKX19ZnVuY3Rpb24gVVB0KGMsbCl7aWYoMSZjJiYob2koMCksZ3QoMSx6UHQsNiw3LCJjbHItdHJlZS1ub2RlIiwzMSksc2koKSksMiZj''@;'; put 'put ''KXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksRWUoIm5nSWYiLCFhLmhpZGRlbiYmYS5pbkZvcmVncm91bmQpfX1mdW5jdGlvbiBaUHQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDQyKSgxLCJzcGFuIiw0MyksUGUoMiwiIExvYWRpbmcuLi4gIiksaGUoKSgpKX1mdW5jdGlvbiBXUHQoYyxsKXsx''@;'; put 'put ''JmMmJihkZSgwLCJkaXYiLDQ0KSxHdCgxLCJjbHItaWNvbiIsNDUpLGRlKDIsInAiLDQ2KSxQZSgzLCIgUGxlYXNlIHNlbGVjdCBhIGNvbHVtbiBvciB0YWJsZSAiKSxoZSgpKCkpfWZ1bmN0aW9uIFlQdChjLGwpe2lmKDEmYyYmKGRlKDAsImgzIiw1NSksUGUoMSksaGUoKSksMiZjKXtjb25z''@;'; put 'put ''dCBhPU9lKDMpO2ZlKCksSXIoIiAiLGEuY3VycmVudExpbmVhZ2VQYXRoQ29sdW1uP2EuY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGUrIi4iK2EuY3VycmVudExpbmVhZ2VQYXRoQ29sdW1uOmEuY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGUsIiAiKX19ZnVuY3Rpb24gR1B0KGMsbCl7aWYo''@;'; put 'put ''MSZjJiYoZGUoMCwiZGl2Iiw1MyksZ3QoMSxZUHQsMiwxLCJoMyIsNTQpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLEVlKCJuZ0lmIiwhYS5jdXJyZW50TGluZWFnZVBhdGhDb2x1bW4mJiFhLmN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlKX19ZnVuY3Rpb24gJFB0KGMsbCl7aWYo''@;'; put 'put ''MSZjJiYoZGUoMCwic3BhbiIpLFBlKDEpLGRlKDIsImEiLDU2KSxQZSgzKSxoZSgpLFBlKDQpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLElyKCIgIixhLmxpbmVhZ2VUYWJsZU5hbWUuc3BsaXQoIi4iKVswXSwiLiIpLGZlKCksRWUoInJvdXRlckxpbmsiLCIvdmlldy9kYXRhLyIr''@;'; put 'put ''YS5saW5lYWdlVGFibGVOYW1lKSxmZSgpLENyKGEubGluZWFnZVRhYmxlTmFtZS5zcGxpdCgiLiIpWzFdKSxmZSgpLElyKCIiLGEubGluZWFnZUNvbHVtbk5hbWUubGVuZ3RoPjA/Ii4iK2EubGluZWFnZUNvbHVtbk5hbWU6IiIsIiAiKX19ZnVuY3Rpb24gS1B0KGMsbCl7aWYoMSZjKXtjb25z''@;'; put 'put ''dCBhPU9uKCk7ZGUoMCwiZGl2Iiw2NiksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSg0KS5kb3dubG9hZFBORygpKX0pLFBlKDEsIiBQTkcgIiksaGUoKX19ZnVuY3Rpb24gWFB0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2Iiw2NiksT3QoImNs''@;'; put 'put ''aWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSg0KS5kb3dubG9hZENTVigpKX0pLFBlKDEsIiBDU1YgIiksaGUoKX19ZnVuY3Rpb24gcVB0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDY1KSgxLCJkaXYiLDY2KSxPdCgiY2xpY2si''@;'; put 'put ''LGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDMpLmRvd25sb2FkU1ZHKCkpfSksUGUoMiwiU1ZHIiksaGUoKSxndCgzLEtQdCwyLDAsImRpdiIsNjcpLGRlKDQsImRpdiIsNjYpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMykuZG93bmxvYWREb3QoKSl9''@;'; put 'put ''KSxQZSg1LCJEb3QiKSxoZSgpLGd0KDYsWFB0LDIsMCwiZGl2Iiw2NyksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoMyksRWUoIm5nSWYiLCFhLmhlbHBlclNlcnZpY2UuaXNNaWNyb3NvZnQpLGZlKDMpLEVlKCJuZ0lmIixhLmZsYXRkYXRhKX19ZnVuY3Rpb24gSlB0KGMsbCl7aWYo''@;'; put 'put ''MSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDY4KSgxLCJpbnB1dCIsNjkpLE90KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDMpLmdlbmVyYXRlR3JhcGgoKSl9KSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7''@;'; put 'put ''Y29uc3QgZj1PZSgzKTtyZXR1cm4gZmkoZi5yZWZyZXNoQ2FjaGUsaCl8fChmLnJlZnJlc2hDYWNoZT1oKSxDdChoKX0pLGhlKCksZGUoMiwibGFiZWwiKSxQZSgzLCJSZWZyZXNoIENhY2hlIiksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgzKTtmZSgpLGxpKCJuZ01vZGVsIixhLnJlZnJl''@;'; put 'put ''c2hDYWNoZSl9fWZ1bmN0aW9uIFFQdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsNTcpKDEsImJ1dHRvbiIsNTgpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikubGltaXREb3REZXB0aD0hMCl9KSxQZSgyLCIgTGltaXQgZGVwdGggIiks''@;'; put 'put ''aGUoKSxkZSgzLCJkaXYiLDU5KSg0LCJkaXYiLDYwKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgyKTtyZXR1cm4gaC5mb3J3YXJkTGluZWFnZT0hMSxDdChoLnJvdXRlci51cmwuaW5jbHVkZXMoImNvbHVtbiIpP2gub25HZW5lcmF0ZUNsaWNrKCk6aC5vbkdlbmVy''@;'; put 'put ''YXRlR3JhcGhUYWJsZUNsaWNrKCkpfSksR3QoNSwiaW5wdXQiLDYxKSxkZSg2LCJsYWJlbCIpLFBlKDcsIkJhY2t3YXJkIiksaGUoKSgpLGRlKDgsImRpdiIsNjApLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpO3JldHVybiBoLmZvcndhcmRMaW5lYWdlPSEwLEN0''@;'; put 'put ''KGgucm91dGVyLnVybC5pbmNsdWRlcygiY29sdW1uIik/aC5vbkdlbmVyYXRlQ2xpY2soKTpoLm9uR2VuZXJhdGVHcmFwaFRhYmxlQ2xpY2soKSl9KSxHdCg5LCJpbnB1dCIsNjEpLGRlKDEwLCJsYWJlbCIpLFBlKDExLCJGb3J3YXJkIiksaGUoKSgpKCksZGUoMTIsImNsci1kcm9wZG93biIs''@;'; put 'put ''NjIpKDEzLCJidXR0b24iLDYzKSxQZSgxNCwiIERvd25sb2FkICIpLEd0KDE1LCJjbHItaWNvbiIsMjIpLGhlKCksZ3QoMTYscVB0LDcsMiwiY2xyLWRyb3Bkb3duLW1lbnUiLDIzKSxoZSgpLGd0KDE3LEpQdCw0LDEsImNsci1jaGVja2JveC13cmFwcGVyIiw2NCksaGUoKX1pZigyJmMpe2Nv''@;'; put 'put ''bnN0IGE9T2UoMik7ZmUoNSksRWUoImNoZWNrZWQiLCFhLmZvcndhcmRMaW5lYWdlKSxmZSg0KSxFZSgiY2hlY2tlZCIsYS5mb3J3YXJkTGluZWFnZSksZmUoNCksRWUoImRpc2FibGVkIiwhYS5jb2x1bW4mJiFhLnRhYmxlKSxmZSg0KSxFZSgibmdJZiIsYS5jb2x1bW4pfX1mdW5jdGlvbiBl''@;'; put 'put ''RnQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw3MyksUGUoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24gdEZ0KGMsbCl7MSZjJiZHdCgwLCJzcGFuIiw0Myl9ZnVuY3Rpb24gbkZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw3NCkoMSwiZGl2Iiw3NSksZ3QoMix0RnQsMSwwLCJz''@;'; put 'put ''cGFuIiw3NiksaGUoKSxHdCgzLCJkaXYiLDc3KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoMiksRWUoIm5nSWYiLGEuZ3JhcGhSZW5kZXJpbmcpfX1mdW5jdGlvbiByRnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSgxLCJkaXYiLDcwKSxndCgyLGVGdCwyLDAsInNwYW4iLDcxKSgz''@;'; put 'put ''LG5GdCw0LDEsImRpdiIsNzIpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDIpO3hyKCJtdC0yIixhLnRhYmxlRmxhZyksZmUoMiksRWUoIm5nSWYiLGEuZ3JhcGhMb2FkaW5nKSxmZSgpLEVlKCJuZ0lmIiwhYS5ncmFwaExvYWRpbmcpfX1mdW5jdGlvbiBpRnQoYyxsKXtpZigxJmMmJihvaSgw''@;'; put 'put ''KSxndCgxLEdQdCwyLDEsImRpdiIsNDcpLGRlKDIsImRpdiIsNDgpKDMsInNlY3Rpb24iLDQ5KSg0LCJkaXYiLDUwKSxndCg1LCRQdCw1LDQsInNwYW4iLDExKSxoZSgpLGd0KDYsUVB0LDE4LDQsImRpdiIsNTEpLGhlKCksZ3QoNyxyRnQsNCw0LCJkaXYiLDUyKSxoZSgpLHNpKCkpLDImYyl7''@;'; put 'put ''Y29uc3QgYT1PZSgpO2ZlKCksRWUoIm5nSWYiLCFhLmdyYXBoQ29udGFpbmVyKSxmZSg0KSxFZSgibmdJZiIsYS5saW5lYWdlVGFibGVOYW1lLmxlbmd0aD4wKSxmZSgpLEVlKCJuZ0lmIixhLmdyYXBoQ29udGFpbmVyKSxmZSgpLEVlKCJuZ0lmIixhLmdyYXBoQ29udGFpbmVyKX19ZnVuY3Rp''@;'; put 'put ''b24gYUZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2Iiw2NiksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5yZW5kZXJUb0Rvd25sb2FkKCJQTkciKSl9KSxQZSgxLCIgUE5HICIpLGhlKCl9fWZ1bmN0aW9uIG9GdChjLGwpe2lmKDEmYyl7''@;'; put 'put ''Y29uc3QgYT1PbigpO2RlKDAsImNsci1kcm9wZG93bi1tZW51Iiw2NSkoMSwiZGl2Iiw2NiksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLnJlbmRlclRvRG93bmxvYWQoIlNWRyIpKX0pLFBlKDIsIlNWRyIpLGhlKCksZ3QoMyxhRnQsMiwwLCJkaXYiLDY3KSxk''@;'; put 'put ''ZSg0LCJkaXYiLDY2KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpO3JldHVybiBoLmRvd25sb2FkRG90KCksQ3QoaC5jYW5jZWxSZW5kZXJpbmdHcmFwaCgpKX0pLFBlKDUsIiBEb3QgIiksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO2ZlKDMpLEVlKCJuZ0lm''@;'; put 'put ''IiwhYS5oZWxwZXJTZXJ2aWNlLmlzTWljcm9zb2Z0KX19Y29uc3Qgc0Z0PWIoOTc1ODYpO2xldCBTej0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQsVSl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMucm91dGU9aCx0aGlzLnJvdXRl''@;'; put 'put ''cj1mLHRoaXMubG9jYXRpb249dix0aGlzLmV2ZW50U2VydmljZT1NLHRoaXMubG9nZ2VyU2VydmljZT1ELHRoaXMuaGVscGVyU2VydmljZT1VLHRoaXMuc3dpdGNoRmxhZz0hMSx0aGlzLnRhYmxlRmxhZz0hMCx0aGlzLmZvcndhcmRMaW5lYWdlPSExLHRoaXMuZmxhdGRhdGE9W10sdGhpcy5n''@;'; put 'put ''cmFwaExvYWRpbmc9ITEsdGhpcy5ncmFwaFJlbmRlcmluZz0hMSx0aGlzLmdyYXBoQ29udGFpbmVyPSExLHRoaXMudml6SW5wdXQ9IiIsdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEsdGhpcy5saWJyYXJ5VGFibGVzUmVmPSIiLHRoaXMubGlicmFyaWVzU2VhcmNoPSIiLHRoaXMudGFibGVDb2x1''@;'; put 'put ''bW5zUmVmPSIiLHRoaXMubGluZWFnZVRhYmxlTmFtZT0iIix0aGlzLmxpbmVhZ2VDb2x1bW5OYW1lPSIiLHRoaXMubGliPW51bGwsdGhpcy50YWJsZURpc2FibGU9ITEsdGhpcy5yZWZyZXNoQ2FjaGU9ITEsdGhpcy5jdXJyZW50TGluZWFnZVBhdGhMaWJUYWJsZT0iIix0aGlzLmN1cnJlbnRM''@;'; put 'put ''aW5lYWdlUGF0aENvbHVtbj0iIix0aGlzLmxhcmdlRG90RmlsZUxpbmVzPW51bGwsdGhpcy5sYXJnZURvdEZpbGVMaW1pdD0xZTMsdGhpcy5saW1pdERvdERlcHRoPSExLHRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkPW51bGwsdGhpcy5kZWJvdW5jZVRpbWU9MjAwfXNob3dUYWJsZVNlbGVj''@;'; put 'put ''dCgpe3RoaXMudGFibGVGbGFnPSF0aGlzLnRhYmxlRmxhZ310YWJsZU9uQ2xpY2soYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKih2LE0sRCxVPSExKXtNLmNvbHVtbnM/KE0uZXhwYW5kZWQ9IU0uZXhwYW5kZWQsITA9PT1NLmV4cGFuZGVkJiYoZi50YWJsZT12LFV8fGYu''@;'; put 'put ''b25HZW5lcmF0ZUdyYXBoVGFibGVDbGljaygpKSk6KE0uZXhwYW5kZWQ9IU0uZXhwYW5kZWQsTS5sb2FkaW5nQ29sdW1ucz0hMCxmLnRhYmxlPXYsZi5jdXJyZW50TGluZWFnZVBhdGhMaWJUYWJsZT1NLkxJQk5BTUUrIi4iK00uVEFCTEVOQU1FLHlpZWxkIGYuc2VsZWN0VGFibGUodixNKSxV''@;'; put 'put ''fHxmLm9uR2VuZXJhdGVHcmFwaFRhYmxlQ2xpY2soKSksZi5jb2xsYXBzZVRyZWVJdGVtcyhELnRhYmxlcyxNKX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1zZWxlY3RUYWJsZShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2guY29sdW1uc0xpc3Q9W107bGV0IGY9e1NB''@;'; put 'put ''U0NvbnRyb2xUYWJsZTpbe3RhYmxldXJpOmF9XX07eWllbGQgaC5zYXNTZXJ2aWNlLnJlcXVlc3QoImxpbmVhZ2UvZ2V0bWV0YWNvbHMiLGYpLnRoZW4odj0+e2guY29sdW1uc0xpc3Q9di5hZGFwdGVyUmVzcG9uc2UubWV0YWNvbHMsaC5jb2x1bW5zTGlzdCYmaC5jb2x1bW5zTGlzdC5sZW5n''@;'; put 'put ''dGg+MCYmKGQuY29sdW1ucz1oLmNvbHVtbnNMaXN0LGQuZXhwYW5kZWQ9ITAsZC5sb2FkaW5nQ29sdW1ucz0hMSl9KS5jYXRjaCh2PT52KSxoLnNldEdsb2JhbERhdGEoKX0pKCl9bG9hZE1vcmVMaWJyYXJpZXMoKXt0aGlzLmxpYnJhcmllc1BhZ2luZ3x8KHRoaXMubGlicmFyaWVzUGFnaW5n''@;'; put 'put ''PSEwLHRoaXMuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKHRoaXMubGlicmFyeUxpc3QsITApLHRoaXMubGlicmFyaWVzUGFnaW5nPSExKX1jb2xsYXBzZVRyZWVJdGVtcyhhLGQpe2EuZm9yRWFjaChoPT57SlNPTi5zdHJpbmdpZnkoaCkhPT1KU09OLnN0cmluZ2lmeShkKSYmKGgu''@;'; put 'put ''ZXhwYW5kZWQ9ITEpfSl9dHJlZU5vZGVDbGlja2VkKGEsZCxoKXsiQ29sbGFwc2UiPT09YS50YXJnZXQudGl0bGUmJnRoaXMuY29sbGFwc2VUcmVlSXRlbXMoaCxkKX1saWJyYXJ5T25DbGljayhhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2QuaW5Gb3JlZ3JvdW5kPSEw''@;'; put 'put ''LGQudGFibGVzP2QuZXhwYW5kZWQ9IWQuZXhwYW5kZWQ6KGQubG9hZGluZ1RhYmxlcz0hMCx5aWVsZCBoLnNlbGVjdExpYnJhcnkoYSxkKSksaC5jb2xsYXBzZVRyZWVJdGVtcyhoLmxpYnJhcnlMaXN0LGQpfSkoKX1zZWxlY3RMaWJyYXJ5KGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVu''@;'; put 'put ''Y3Rpb24qKCl7aC50YWJsZXNMaXN0PVtdLGguY29sdW1uc0xpc3Q9W107bGV0IGY9e1NBU0NvbnRyb2xUYWJsZTpbe2xpYnVyaTphfV19O3lpZWxkIGguc2FzU2VydmljZS5yZXF1ZXN0KCJsaW5lYWdlL2dldG1ldGF0YWJsZXMiLGYpLnRoZW4odj0+e2gudGFibGVzTGlzdD12LmFkYXB0ZXJS''@;'; put 'put ''ZXNwb25zZS5tZXRhdGFibGVzLGgudGFibGVzTGlzdCYmaC50YWJsZXNMaXN0Lmxlbmd0aD4wJiYoZC50YWJsZXM9aC50YWJsZXNMaXN0LGQuZXhwYW5kZWQ9ITApLGguc2V0R2xvYmFsRGF0YSgpfSkuY2F0Y2godj0+diksZC5sb2FkaW5nVGFibGVzPSExfSkoKX1jb2x1bW5PbkNsaWNrKGEs''@;'; put 'put ''ZCxoKXt0aGlzLmxpYj1kLkxJQlJBUllJRCx0aGlzLnRhYmxlPWguVEFCTEVVUkksdGhpcy5jb2x1bW49YS5DT0xVUkksdGhpcy5zZXRHbG9iYWxEYXRhKCksdGhpcy5vbkdlbmVyYXRlQ2xpY2soKX10cmVlT25GaWx0ZXIoYSxkKXt0aGlzLmhlbHBlclNlcnZpY2UudHJlZU9uRmlsdGVyKGEs''@;'; put 'put ''ZCl9bGlicmFyeU9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmxpYnJhcnlMaXN0LHRoaXMubGlicmFyaWVzU2VhcmNoLCJMSUJSQVJZTkFNRSIpLFhuLmxpbmVhZ2UubGlicmFyaWVzU2VhcmNoPXRoaXMubGlicmFyaWVzU2VhcmNofWxpYkNvbHVt''@;'; put 'put ''bkFjdGl2ZShhKXtpZighdGhpcy5jb2x1bW4pcmV0dXJuITE7bGV0IGQ9YS5zcGxpdCgiXFwiKSxoPXRoaXMuY29sdW1uLnNwbGl0KCJcXCIpO3JldHVybiBkW2QubGVuZ3RoLTFdPT1oW2gubGVuZ3RoLTFdfXNldEdsb2JhbERhdGEoKXtYbi5saW5lYWdlLmxpYnJhcnlMaXN0PXRoaXMubGli''@;'; put 'put ''cmFyeUxpc3QsWG4ubGluZWFnZS50YWJsZXNMaXN0PXRoaXMudGFibGVzTGlzdCxYbi5saW5lYWdlLmNvbHVtbnNMaXN0PXRoaXMuY29sdW1uc0xpc3QsWG4ubGluZWFnZS5saWI9dGhpcy5saWIsWG4ubGluZWFnZS50YWJsZT10aGlzLnRhYmxlLFhuLmxpbmVhZ2UuY29sdW1uPXRoaXMuY29s''@;'; put 'put ''dW1ufWxvYWRHbG9iYWxEYXRhKCl7dGhpcy5saWJyYXJ5TGlzdD1Ybi5saW5lYWdlLmxpYnJhcnlMaXN0LHRoaXMudGFibGVzTGlzdD1Ybi5saW5lYWdlLnRhYmxlc0xpc3QsdGhpcy5jb2x1bW5zTGlzdD1Ybi5saW5lYWdlLmNvbHVtbnNMaXN0LHRoaXMubGlicmFyaWVzU2VhcmNoPVhuLmxp''@;'; put 'put ''bmVhZ2UubGlicmFyaWVzU2VhcmNofXJlc3VibWl0V2l0aE1heERlcHRoKGEpe2xldCBkO3RoaXMuY2FuY2VsUmVuZGVyaW5nR3JhcGgoKSxhJiYoZD17bWF4X2RlcHRoOmF9KSx0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSx7cmVsYXRpdmVUbzp0aGlzLnJvdXRlLHF1ZXJ5UGFyYW1zOmR9KX1u''@;'; put 'put ''Z09uSW5pdCgpe1huLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L2xpbmVhZ2UiO2xldCBhPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnJlbG9hZDtpZih2b2lkIDAhPT1hKXtsZXQgZD10aGlzLnJvdXRlci51cmw7InJlbG9hZCI9PT1hP2xvY2FsU3RvcmFnZS5nZXRJdGVtKCJm''@;'; put 'put ''aXJzdExvYWQiKT8obG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oImZpcnN0TG9hZCIpLHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKGQuc2xpY2UoMCxkLmxhc3RJbmRleE9mKCIvIikpKSk6KGxvY2FsU3RvcmFnZS5maXJzdExvYWQ9ITAsc2V0VGltZW91dChmdW5jdGlvbigpe3dpbmRvdy5s''@;'; put 'put ''b2NhdGlvbi5yZWxvYWQoKX0sMmUzKSk6dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoZC5zbGljZSgwLGQubGFzdEluZGV4T2YoIi8iKSkpfXRoaXMuaW5pdERhdGEoKX1pbml0RGF0YSgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe1huLmxpbmVhZ2UubGlicmFyeUxpc3Qm''@;'; put 'put ''JihYbi5saW5lYWdlLmxpYnJhcnlMaXN0Lmxlbmd0aD4wP2EubG9hZEdsb2JhbERhdGEoKTp5aWVsZCBhLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXdsaWJzIixudWxsKS50aGVuKHY9PnthLmxpYnJhcnlMaXN0PXYuYWRhcHRlclJlc3BvbnNlLnNhc2xpYnMsYS5oZWxwZXJTZXJ2''@;'; put 'put ''aWNlLmRpc3BsYXlMaWJyYXJpZXMoYS5saWJyYXJ5TGlzdCksYS5saWJyYXJ5TGlzdCYmYS5saWJyYXJ5TGlzdC5sZW5ndGg+MCYmKGEubGliPWEubGlicmFyeUxpc3RbMF0uTElCUkFSWUlEKSxhLnNldEdsb2JhbERhdGEoKX0pLmNhdGNoKHY9PnYpLGEucm91dGUucXVlcnlQYXJhbXMuc3Vi''@;'; put 'put ''c2NyaWJlKHY9PnthLm9uUm91dGVDaGFuZ2UoKX0pLGEucm91dGUucGFyYW1zLnN1YnNjcmliZSh2PT57YS5vblJvdXRlQ2hhbmdlKCl9KSl9KSgpfW9uUm91dGVDaGFuZ2UoKXtjbGVhclRpbWVvdXQodGhpcy5kZWJvdW5jZVRpbWVvdXQpLHRoaXMuZGVib3VuY2VUaW1lb3V0PXNldFRpbWVv''@;'; put 'put ''dXQoKCk9Pntjb25zdCBhPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmNvbHVyaSxkPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmRpcmVjdGlvbixoPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnRhYmxlaWQsZj10aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLm1heF9k''@;'; put 'put ''ZXB0aDthJiZkJiYodGhpcy5mb3J3YXJkTGluZWFnZT0iRk9SV0FSRCI9PT1kLHRoaXMuY29sdW1uPWEsdGhpcy5nZW5lcmF0ZUdyYXBoKGEsZCxmKSksIXRoaXMucm91dGVyLnVybC5pbmNsdWRlcygiY29sdW1uIikmJmgmJmQmJih0aGlzLmZvcndhcmRMaW5lYWdlPSJGT1JXQVJEIj09PWQs''@;'; put 'put ''dGhpcy50YWJsZT1oLHRoaXMuZ2VuZXJhdGVHcmFwaFRhYmxlTGV2ZWwoaCxkLGYpKX0sdGhpcy5kZWJvdW5jZVRpbWUpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe31kaXJlY3Rpb25UZXh0KCl7cmV0dXJuIHRoaXMuZm9yd2FyZExpbmVhZ2U/IkZPUldBUkQiOiJSRVZFUlNFIn1vbkdlbmVyYXRl''@;'; put 'put ''Q2xpY2soKXtsZXQgYT10aGlzLmRpcmVjdGlvblRleHQoKSxkPXRoaXMuY29sdW1uP3RoaXMuY29sdW1uLnN1YnN0cmluZyh0aGlzLmNvbHVtbi5pbmRleE9mKCJcXCIpKzEpOm51bGw7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvbGluZWFnZS9jb2x1bW4vIitkKyIvIithKX1v''@;'; put 'put ''bkdlbmVyYXRlR3JhcGhUYWJsZUNsaWNrKCl7bGV0IGE9dGhpcy5kaXJlY3Rpb25UZXh0KCksZD10aGlzLnRhYmxlLmluY2x1ZGVzKCJcXCIpP3RoaXMudGFibGUuc3BsaXQoIlxcIilbMV06dGhpcy50YWJsZTt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9saW5lYWdlLyIrZCsi''@;'; put 'put ''LyIrYSl9Z2VuZXJhdGVHcmFwaFRhYmxlTGV2ZWwoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCB2PXtTQVNDb250cm9sVGFibGU6W3t0YWJsZV9pZDphLGRpcmVjdGlvbjpkfHxmLmRpcmVjdGlvblRleHQoKX1dfTtyZXR1cm4idW5kZWZpbmVkIj09PXYuU0FT''@;'; put 'put ''Q29udHJvbFRhYmxlWzBdLnRhYmxlX2lkJiZmLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiZ2VuZXJhdGVHcmFwaFRhYmxlTGV2ZWwoKSIsInRhYmxlX2lkIGlzIHVuZGVmaW5lZC4iLHZvaWQgMCwiRnJvbnRlbmQgZXJyb3IiKSxoJiYodi5TQVNDb250cm9sVGFibGVbMF0ubWF4X2Rl''@;'; put 'put ''cHRoPWgpLGYudGFibGVGbGFnPSExLGYuc3dpdGNoRmxhZz0hMCxmLmdyYXBoQ29udGFpbmVyPSEwLGYuZ3JhcGhMb2FkaW5nPSEwLGYudml6SW5wdXQ9IiIsbmV3IFByb21pc2UoKE0sRCk9PntmLnNhc1NlcnZpY2UucmVxdWVzdCgibGluZWFnZS9mZXRjaHRhYmxlbGluZWFnZSIsdikudGhl''@;'; put 'put ''bihmdW5jdGlvbigpe3ZhciBVPWVlKGZ1bmN0aW9uKih0ZSl7aWYodGUuYWRhcHRlclJlc3BvbnNlLmZsYXRkYXRhLmxlbmd0aD4wJiZmLmxpY2VuY2VTZXJ2aWNlLmNoZWNrTGluZWFnZUxpbWl0KCkpcmV0dXJuIGYuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIk5vdGljZSIsIllvdSBo''@;'; put 'put ''YXZlIHJlYWNoZWQgZGFpbHkgbWF4aW11bSBvZiBsaW5lYWdlIGRpYWdyYW0gcmVuZGVyaW5ncy4gVG8gdW5sb2NrIGFkZGl0aW9uYWwgZGlhZ3JhbXMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpLHZvaWQgZi5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvbGluZWFn''@;'; put 'put ''ZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgdGUpcmV0dXJuIGYudml6SW5wdXQ9ImRpZ3JhcGggRyB7U0FTIEVycm9yfSIsdm9pZCBmLmJ1aWxkR3JhcGgoKTtmLmxpbmVhZ2VUYWJsZU5hbWU9dGUuYWRhcHRlclJlc3BvbnNlLmluZm9bMF0uTElCUkVGKyIuIit0ZS5hZGFwdGVyUmVzcG9uc2Uu''@;'; put 'put ''aW5mb1swXS5UQUJMRU5BTUU7bGV0IG9lPXRlLmFkYXB0ZXJSZXNwb25zZS5maW5hbGZpbmFsLHZlPSIiO2ZvcihsZXQgd2U9MDt3ZTxvZS5sZW5ndGg7d2UrKyl2ZSs9dW5lc2NhcGUob2Vbd2VdLkxJTkUpKyJcbiI7aWYoZi5mbGF0ZGF0YT10ZS5hZGFwdGVyUmVzcG9uc2UuZmxhdGRhdGEs''@;'; put 'put ''Zi5saWJyYXJ5TGlzdCl7bGV0IHdlPWYubGlicmFyeUxpc3QuZmluZChGZT0+dGUuYWRhcHRlclJlc3BvbnNlLmluZm9bMF0uTElCVVJJLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoRmUuTElCUkFSWUlELnRvVXBwZXJDYXNlKCkpKTtpZih3ZSl7bGV0IEZlO2lmKHlpZWxkIGYubGlicmFyeU9u''@;'; put 'put ''Q2xpY2sod2UuTElCUkFSWUlELHdlKSx3ZS50YWJsZXMmJihGZT13ZS50YWJsZXMuZmluZChXZT0+V2UuVEFCTEVVUkkudG9VcHBlckNhc2UoKS5pbmNsdWRlcyh0ZS5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXS5UQUJMRUlELnRvVXBwZXJDYXNlKCkpKSxGZSkpe2lmKGYudGFibGU9RmUuVEFC''@;'; put 'put ''TEVVUkksZi50YWJsZSl7Y29uc3QgV2U9Zi50YWJsZS5yZXBsYWNlKCJcXCIsIlxcXFwiKTtzZXRUaW1lb3V0KCgpPT57bGV0IG50PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtpZD0nJHtXZX0nXWApO250JiZudC5zY3JvbGxJbnRvVmlldygpfSwxZTMpfWYudGFibGVPbkNsaWNrKEZlLlRB''@;'; put 'put ''QkxFVVJJLEZlLHdlLHZvaWQgMCE9PWQpfXdlJiYod2UuZXhwYW5kZWQ9ITApLEZlJiYoRmUuZXhwYW5kZWQ9ITApfX1mLnZpeklucHV0PXZlfHwiZGlncmFwaCBHIHtObyBMaW5lYWdlIEF2YWlsYWJsZX0iLGYudml6SW5wdXQ9Zi52aXpJbnB1dC5yZXBsYWNlKC9cc2RzOi9nLCJcbmRzOiIp''@;'; put 'put ''LnJlcGxhY2UoL1xzXG4vZywiXG4iKSxmLmlkbG9va3VwPXRlLmFkYXB0ZXJSZXNwb25zZS5pZGxvb2t1cCx0ZS5hZGFwdGVyUmVzcG9uc2UuZmluYWxmaW5hbC5sZW5ndGg+Zi5sYXJnZURvdEZpbGVMaW1pdD9mLmxhcmdlRG90RmlsZUxpbmVzPXRlLmFkYXB0ZXJSZXNwb25zZS5maW5hbGZp''@;'; put 'put ''bmFsLmxlbmd0aDpmLmJ1aWxkR3JhcGgoKSxNKCl9KTtyZXR1cm4gZnVuY3Rpb24odGUpe3JldHVybiBVLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLmNhdGNoKFU9PntmLmdyYXBoTG9hZGluZz0hMSxmLmdyYXBoQ29udGFpbmVyPSExfSl9KX0pKCl9Y2FuY2VsUmVuZGVyaW5nR3JhcGgo''@;'; put 'put ''KXt0aGlzLnZpeklucHV0PSJkaWdyYXBoIEcge05vIExpbmVhZ2UgQXZhaWxhYmxlfSIsdGhpcy5sYXJnZURvdEZpbGVMaW5lcz1udWxsLHRoaXMuYnVpbGRHcmFwaCgpfWNvbnRpbnVlUmVuZGVyaW5nR3JhcGgoKXt0aGlzLmxhcmdlRG90RmlsZUxpbmVzPW51bGwsdGhpcy5idWlsZEdyYXBo''@;'; put 'put ''KCgpPT57aWYobnVsbCE9PXRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkKXtzd2l0Y2godGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQpe2Nhc2UiUE5HIjp0aGlzLmRvd25sb2FkUE5HKCk7YnJlYWs7Y2FzZSJTVkciOnRoaXMuZG93bmxvYWRTVkcoKX10aGlzLnBlbmRpbmdSZW5kZXJEb3du''@;'; put 'put ''bG9hZD1udWxsLHRoaXMudml6SW5wdXQ9ImRpZ3JhcGggRyB7Tm8gTGluZWFnZSBBdmFpbGFibGV9Iix0aGlzLmJ1aWxkR3JhcGgoKX19KX1yZW5kZXJUb0Rvd25sb2FkKGEpe3N3aXRjaChhKXtjYXNlIlBORyI6dGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQ9IlBORyIsdGhpcy5jb250aW51''@;'; put 'put ''ZVJlbmRlcmluZ0dyYXBoKCk7YnJlYWs7Y2FzZSJTVkciOnRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkPSJTVkciLHRoaXMuY29udGludWVSZW5kZXJpbmdHcmFwaCgpfX1tYWtlR3JhcGhMaW5rYWJsZShhKXtsZXQgZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIjZ3JhcGggLm5vZGUi''@;'; put 'put ''KTtmb3IobGV0IGggb2YgZCl7bGV0IE0sZj1oLnF1ZXJ5U2VsZWN0b3IoInRpdGxlIikuaW5uZXJIVE1MLHY9YS5maW5kKEQ9PkQuTUVUQUlEPT09Zik7diYmKE09IlRBQkxFIj09PXYuTUVUQVRZUEU/Ii92aWV3L2RhdGEvIit2Lk1FVEFOQU1FOiIvdmlldy9tZXRhZGF0YS9vYmplY3QvIit2''@;'; put 'put ''Lk1FVEFJRCxoLmNsYXNzTGlzdC5hZGQoImN1cnNvci1wb2ludGVyIiksaC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsRD0+e3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoTSl9KSl9fWdlbmVyYXRlR3JhcGgoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCB2''@;'; put 'put ''PXtTQVNDb250cm9sVGFibGU6W3tjb2x1cmk6YXx8Zi5jb2x1bW4sZGlyZWN0aW9uOmR8fGYuZGlyZWN0aW9uVGV4dCgpLHJlZnJlc2g6Zi5yZWZyZXNoQ2FjaGU/MTowfV19O3JldHVybiJ1bmRlZmluZWQiPT09di5TQVNDb250cm9sVGFibGVbMF0uY29sdXJpJiZmLmV2ZW50U2VydmljZS5z''@;'; put 'put ''aG93QWJvcnRNb2RhbCgiZ2VuZXJhdGVHcmFwaCgpIiwiY29sdXJpIGlzIHVuZGVmaW5lZC4iLHZvaWQgMCwiRnJvbnRlbmQgZXJyb3IiKSxoJiYodi5TQVNDb250cm9sVGFibGVbMF0ubWF4X2RlcHRoPWgpLGYudGFibGVGbGFnPSExLGYuc3dpdGNoRmxhZz0hMCxmLmdyYXBoQ29udGFpbmVy''@;'; put 'put ''PSEwLGYuZ3JhcGhMb2FkaW5nPSEwLGYudml6SW5wdXQ9IiIsbmV3IFByb21pc2UoKE0sRCk9PntmLnNhc1NlcnZpY2UucmVxdWVzdCgibGluZWFnZS9mZXRjaGNvbGxpbmVhZ2UiLHYpLnRoZW4oZnVuY3Rpb24oKXt2YXIgVT1lZShmdW5jdGlvbioodGUpe2lmKHRlLmFkYXB0ZXJSZXNwb25z''@;'; put 'put ''ZS5mbGF0ZGF0YS5sZW5ndGg+MCYmZi5saWNlbmNlU2VydmljZS5jaGVja0xpbmVhZ2VMaW1pdCgpKXJldHVybiBmLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJOb3RpY2UiLCJZb3UgaGF2ZSByZWFjaGVkIGRhaWx5IG1heGltdW0gb2YgbGluZWFnZSBkaWFncmFtIHJlbmRlcmluZ3Mu''@;'; put 'put ''IFRvIHVubG9jayBhZGRpdGlvbmFsIGRpYWdyYW1zLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKSx2b2lkIGYucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2xpbmVhZ2UiKTtpZigic3RyaW5nIj09dHlwZW9mIHRlLmFkYXB0ZXJSZXNwb25zZSlyZXR1cm4gZi52aXpJ''@;'; put 'put ''bnB1dD0iZGlncmFwaCBHIHtTQVMgRXJyb3J9Iix2b2lkIGYuYnVpbGRHcmFwaCgpO2YubGluZWFnZVRhYmxlTmFtZT10ZS5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXS5MSUJSRUYrIi4iK3RlLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLlRBQk5BTUUsZi5saW5lYWdlQ29sdW1uTmFtZT10ZS5h''@;'; put 'put ''ZGFwdGVyUmVzcG9uc2UuaW5mb1swXS5DT0xOQU1FLGYuaWRsb29rdXA9dGUuYWRhcHRlclJlc3BvbnNlLmlkbG9va3VwO2xldCBvZT10ZS5hZGFwdGVyUmVzcG9uc2UuZnJvbXNhcyx2ZT0iIjtmb3IobGV0IHdlPTA7d2U8b2UubGVuZ3RoO3dlKyspdmUrPXVuZXNjYXBlKG9lW3dlXS5TVFJJ''@;'; put 'put ''TkcpKyJcbiI7aWYoZi52aXpJbnB1dD12ZXx8ImRpZ3JhcGggRyB7Tm8gTGluZWFnZSBBdmFpbGFibGV9IixmLnZpeklucHV0PWYudml6SW5wdXQucmVwbGFjZSgvXHNkczovZywiXG5kczoiKS5yZXBsYWNlKC9cc1xuL2csIlxuIiksZi5mbGF0ZGF0YT10ZS5hZGFwdGVyUmVzcG9uc2UuZmxh''@;'; put 'put ''dGRhdGEsZi5saWJyYXJ5TGlzdCl7bGV0IEZlLHdlPWYubGlicmFyeUxpc3QuZmluZChXZT0+dGUuYWRhcHRlclJlc3BvbnNlLmluZm9bMF0/LkxJQlVSST8udG9VcHBlckNhc2UoKT8uaW5jbHVkZXMoV2U/LkxJQlJBUllJRD8udG9VcHBlckNhc2UoKSkpO3dlJiYoeWllbGQgZi5saWJyYXJ5''@;'; put 'put ''T25DbGljayh3ZS5MSUJSQVJZSUQsd2UpLHdlLnRhYmxlcyYmKEZlPXdlLnRhYmxlcy5maW5kKFdlPT5XZS5UQUJMRVVSST09PXRlLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLlRBQlVSSSksRmUmJmYudGFibGVPbkNsaWNrKEZlLlRBQkxFVVJJLEZlLHdlLCEwKS50aGVuKCgpPT57bGV0IFdl''@;'; put 'put ''PUZlLlRBQkxFVVJJO2lmKFdlKXtjb25zdCBudD1XZS5yZXBsYWNlKCJcXCIsIlxcXFwiKTtsZXQgZHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPScke250fSddYCk7c2V0VGltZW91dCgoKT0+e2R0JiYoZi5sb2dnZXJTZXJ2aWNlLmxvZygibGlicmFyeVRvU2VsZWN0Iix3ZSksZHQu''@;'; put 'put ''c2Nyb2xsSW50b1ZpZXcoKSl9LDFlMyl9fSkpLHdlJiYod2UuZXhwYW5kZWQ9ITApLEZlJiYoRmUuZXhwYW5kZWQ9ITApKX10ZS5hZGFwdGVyUmVzcG9uc2UuZnJvbXNhcy5sZW5ndGg+Zi5sYXJnZURvdEZpbGVMaW1pdD9mLmxhcmdlRG90RmlsZUxpbmVzPXRlLmFkYXB0ZXJSZXNwb25zZS5m''@;'; put 'put ''cm9tc2FzLmxlbmd0aDpmLmJ1aWxkR3JhcGgoKSxNKCl9KTtyZXR1cm4gZnVuY3Rpb24odGUpe3JldHVybiBVLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLmNhdGNoKFU9PntmLmdyYXBoTG9hZGluZz0hMSxmLmdyYXBoQ29udGFpbmVyPSExfSl9KX0pKCl9Z2V0U1ZHVVJMKCl7bGV0IGE9''@;'; put 'put ''ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdyYXBoIiksZD1uZXcgWE1MU2VyaWFsaXplcixoPW5ldyBCbG9iKFtkLnNlcmlhbGl6ZVRvU3RyaW5nKGEpXSx7dHlwZToiaW1hZ2Uvc3ZnK3htbCJ9KTtyZXR1cm4gVVJMLmNyZWF0ZU9iamVjdFVSTChoKX1kb3dubG9hZFNWRygpe0N6KCIjZ3Jh''@;'; put 'put ''cGgiKS5yZXNldFpvb20oKTtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7YS5ocmVmPXRoaXMuZ2V0U1ZHVVJMKCksYS5kb3dubG9hZD10aGlzLmNvbnN0cnVjdE5hbWUoInN2ZyIpLGEuY2xpY2soKX1kb3dubG9hZFBORygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9u''@;'; put 'put ''Kigpe0N6KCIjZ3JhcGgiKS5yZXNldFpvb20oKSxEUHQuc2F2ZVN2Z0FzUG5nKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNncmFwaCBzdmciKSxhLmNvbnN0cnVjdE5hbWUoInBuZyIpKX0pKCl9ZG93bmxvYWRDU1YoKXtsZXQgYT10aGlzLmZsYXRkYXRhO2NvbnN0IGQ9KHRlLG9lKT0+bnVs''@;'; put 'put ''bD09PW9lPyIiOm9lLGg9T2JqZWN0LmtleXMoYVswXSk7bGV0IGY9YS5tYXAodGU9PmgubWFwKG9lPT5KU09OLnN0cmluZ2lmeSh0ZVtvZV0sZCkpLmpvaW4oIiwiKSk7Zi51bnNoaWZ0KGguam9pbigiLCIpKTtsZXQgdj1mLmpvaW4oIlxyXG4iKTt2YXIgTT1kb2N1bWVudC5jcmVhdGVFbGVt''@;'; put 'put ''ZW50KCJhIiksRD1uZXcgQmxvYihbdl0se3R5cGU6InRleHQvY3N2In0pLFU9d2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoRCk7TS5ocmVmPVUsTS5kb3dubG9hZD10aGlzLmNvbnN0cnVjdE5hbWUoImNzdiIpLE0uY2xpY2soKSx3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTChVKX1nZXRE''@;'; put 'put ''b3RVcmwoKXtsZXQgZD1uZXcgQmxvYihbdGhpcy52aXpJbnB1dF0se3R5cGU6InRleHQvcGxhaW4ifSk7cmV0dXJuIHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGQpfWRvd25sb2FkRG90KCl7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2EuaHJlZj10aGlzLmdldERvdFVy''@;'; put 'put ''bCgpLGEuZG93bmxvYWQ9dGhpcy5jb25zdHJ1Y3ROYW1lKCJ0eHQiKSxhLmNsaWNrKCl9c2hvd1N2Zygpe3dpbmRvdy5vcGVuKHRoaXMuZ2V0U1ZHVVJMKCksIl9ibGFuayIpfWJ1aWxkR3JhcGgoYSl7dGhpcy5ldmVudFNlcnZpY2UuY2xvc2VTaWRlYmFyKCksdGhpcy5ncmFwaExvYWRpbmc9''@;'; put 'put ''ITEsdGhpcy5ncmFwaFJlbmRlcmluZz0hMCxzZXRUaW1lb3V0KCgpPT57Q3ooIiNncmFwaCIpLnpvb20oITApLmFkZEltYWdlKCJodHRwczovL2RhdGFjb250cm9sbGVyLmlvL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIwLzAxL2ZjMS5wbmciLCIzMHB4IiwiMzBweCIpLnJlbmRlckRvdCh0aGlz''@;'; put 'put ''LnZpeklucHV0LCgpPT57dGhpcy5ncmFwaFJlbmRlcmluZz0hMSx0aGlzLmlkbG9va3VwJiZ0aGlzLm1ha2VHcmFwaExpbmthYmxlKHRoaXMuaWRsb29rdXApLGEmJmEoKX0pfSwxMDApfWNvbnN0cnVjdE5hbWUoYSl7bGV0IGQ9IiIsaD0iIixmPSIiLHY9c0Z0KCkuZm9ybWF0KCJZWU1NRERf''@;'; put 'put ''SEhtbSIpO2lmKHRoaXMubGlicmFyeUxpc3QmJnRoaXMubGlicmFyeUxpc3QubGVuZ3RoKXtsZXQgTT10aGlzLmxpYnJhcnlMaXN0LmZpbmQoRD0+RC5MSUJSQVJZSUQ9PXRoaXMubGliKTtNJiYoZD1gXyR7TS5MSUJSQVJZTkFNRX1gKX1pZih0aGlzLnRhYmxlc0xpc3QmJnRoaXMudGFibGVz''@;'; put 'put ''TGlzdC5sZW5ndGgpe2xldCBNPXRoaXMudGFibGVzTGlzdC5maW5kKEQ9PkQuVEFCTEVVUkk9PXRoaXMudGFibGUpO00mJihoPWBfJHtNLlRBQkxFTkFNRX1gKX1pZih0aGlzLmNvbHVtbnNMaXN0JiZ0aGlzLmNvbHVtbnNMaXN0Lmxlbmd0aCl7bGV0IE09dGhpcy5jb2x1bW5zTGlzdC5maW5k''@;'; put 'put ''KEQ9PkQuQ09MVVJJPT10aGlzLmNvbHVtbik7TSYmKGY9YF8ke00uQ09MTkFNRX1gKX1yZXR1cm5gJHt0aGlzLmRpcmVjdGlvblRleHQoKX0ke2R9JHtofSR7Zn1fJHt2fS4ke2F9YH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShPMSkscWUo''@;'; put 'put ''S3MpLHFlKHQwKSxxZShubCkscWUoczIpLHFlKEVjKSxxZShvaCkscWUoTHUpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPWFyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1saW5lYWdlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxzdGFuZGFsb25lOiExLGRlY2xzOjU4''@;'; put 'put ''LHZhcnM6MTEsY29uc3RzOltbIm1heERlcHRoRG90IiwiIl0sWyJtYXhEZXB0aCIsIiJdLFsic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJzZWFyY2hUcmVlSW5wdXQiLCIiXSxbMywic2Nyb2xsZWRUb0JvdHRvbSJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0Zv''@;'; put 'put ''ciIsIm5nRm9yT2YiXSxbImNsYXNzIiwidy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFszLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3Nh''@;'; put 'put ''YmxlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwibW9kYWwtZm9vdGVyIiwiZC1mbGV4IiwiZmxleC1jb2x1bW4iXSxbMSwiYmlnbGluZWFnZS1yb3ciLCJtYi0waSJdLFsidHlwZSIsIm51bWJlciIsIm1pbiIsIjEiLCJwbGFjZWhvbGRlciIsIk1heCBkZXB0aCB2''@;'; put 'put ''YWx1ZSIsMSwiY2xyLWlucHV0IiwibWF4LWRlcHRoLWlucHV0Il0sWzEsIm1iLTIwIl0sWzEsImJpZ2xpbmVhZ2Utcm93Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbImNsckRyb3Bkb3duVHJpZ2dlciIsIiIsMSwiYnRuIiwi''@;'; put 'put ''YnRuLXNtIiwiYnRuLXByaW1hcnkiLCJtdC0zLW5lZ2F0aXZlIiwzLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0Iiw0LCJjbHJJZk9wZW4iXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsi''@;'; put 'put ''YXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJMaWJyYXJpZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFw''@;'; put 'put ''ZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsci1leHBhbmRlZCIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywi''@;'; put 'put ''Y2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xp''@;'; put 'put ''Y2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlRhYmxlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwi''@;'; put 'put ''bmdNb2RlbCJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siLCJpZCJdLFsic2hhcGUiLCJ0YWJsZSJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJDb2x1bW5zIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwz''@;'; put 'put ''LCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWzEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFsic2hhcGUiLCJvYmplY3RzIl0sWzEsInctMTAwIiwidGV4dC1jZW50ZXIiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItc20iXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQi''@;'; put 'put ''XSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIiwxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiLCJtdC0xMCJdLFsiY2xhc3MiLCJjYXJkLWhlYWRlciBkLWZsZXggZmxleC1j''@;'; put 'put ''b2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjYXJkLWJsb2NrIl0sWzEsImZvcm0tYmxvY2siLCJzdyIsInBvc2l0aW9uLXJlbGF0aXZlIiwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsImxpbmFnZS10aXRsZS13cmFwcGVyIiwiZC1mbGV4Iiwi''@;'; put 'put ''YWxpZ24taXRlbXMtY2VudGVyIiwiZm9udC13ZWlnaHQtYm9sZCIsInBvc2l0aW9uLWFic29sdXRlIl0sWyJjbGFzcyIsImNsci1jb2wtbWQtMTIgdGV4dC1jZW50ZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQiLDQsIm5nSWYiXSxbMywibXQtMiIsNCwibmdJZiJdLFsxLCJjYXJkLWhl''@;'; put 'put ''YWRlciIsImQtZmxleCIsImZsZXgtY29sdW1uIiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBwYi0xMCIsNCwibmdJZiJdLFsxLCJ0ZXh0LWNlbnRlciIsInBiLTEwIl0sWzMsInJvdXRlckxpbmsiXSxbMSwiY2xyLWNvbC1tZC0xMiIsInRleHQtY2Vu''@;'; put 'put ''dGVyIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWVuZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLCJtci01IiwzLCJjbGljayJdLFsxLCJidG4tZ3JvdXAiLCJkaXJlY3Rpb24iLCJkLWJsb2NrIl0sWzEsInJhZGlvIiwiYnRuIiwzLCJjbGljayJdLFsidHlw''@;'; put 'put ''ZSIsInJhZGlvIiwibmFtZSIsImJ0bi1ncm91cC1kZW1vLXJhZGlvcyIsMywiY2hlY2tlZCJdLFsxLCJtci0xMCJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwxLCJidG4iLCJidG4taW5mby1vdXRsaW5lIiwzLCJkaXNhYmxlZCJdLFsiY2xhc3MiLCJkLWZsZXggYWxpZ24taXRlbXMtY2Vu''@;'; put 'put ''dGVyIiw0LCJuZ0lmIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0Il0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsImNsaWNrIl0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsidHlwZSIsImNo''@;'; put 'put ''ZWNrYm94IiwiY2xyQ2hlY2tib3giLCIiLCJuYW1lIiwicmVmcmVzaENhY2hlIiwzLCJjaGFuZ2UiLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsxLCJ0ZXh0LWNlbnRlciJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInBvc2l0aW9uLXJlbGF0aXZlIiw0LCJu''@;'; put 'put ''Z0lmIl0sWzEsInNwaW5uZXIiXSxbMSwicG9zaXRpb24tcmVsYXRpdmUiXSxbMSwiZ3JhcGgtcmVuZGVyLXNwaW5uZXIiXSxbImNsYXNzIiwic3Bpbm5lciBzcGlubmVyLXNtIiw0LCJuZ0lmIl0sWyJpZCIsImdyYXBoIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZkKXtjb25zdCBm''@;'; put 'put ''PU9uKCk7ZGUoMCwiYXBwLXNpZGViYXIiLDQpLE90KCJzY3JvbGxlZFRvQm90dG9tIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmxvYWRNb3JlTGlicmFyaWVzKCkpfSksZGUoMSwiY2xyLXRyZWUiKSxndCgyLExQdCw2LDMsImNsci10cmVlLW5vZGUiLDUpKDMsVVB0LDIsMSwibmct''@;'; put 'put ''Y29udGFpbmVyIiw2KSxoZSgpLGd0KDQsWlB0LDMsMCwiZGl2Iiw3KSxoZSgpLGRlKDUsImRpdiIsOCkoNiwiZGl2Iiw5KSxndCg3LFdQdCw0LDAsImRpdiIsMTApKDgsaUZ0LDgsNCwibmctY29udGFpbmVyIiwxMSksaGUoKSgpLGRlKDksImNsci1tb2RhbCIsMTIpKDEwLCJoMyIsMTMpLFBl''@;'; put 'put ''KDExLCJMaW1pdCBEZXB0aCIpLGhlKCksZGUoMTIsImRpdiIsMTQpKDEzLCJwIiksUGUoMTQsIkVudGVyIHRoZSBkZXB0aCBudW1iZXIgeW91IHdvdWxkIGxpa2UgdG8gbGltaXQgRE9UIHJlbmRlcmluZyB0bzoiKSxoZSgpKCksZGUoMTUsImRpdiIsMTUpKDE2LCJkaXYiLDE2KSxHdCgxNywi''@;'; put 'put ''aW5wdXQiLDE3LDApLGhlKCksZGUoMTksImNsci1jb250cm9sLWhlbHBlciIsMTgpLFBlKDIwLCJUbyByZW5kZXIgd2l0aCB1bmxpbWl0ZWQgZGVwdGgsIGxlYXZlIHRoZSBpbnB1dCBlbXB0eSIpLGhlKCksZGUoMjEsImRpdiIsMTkpKDIyLCJidXR0b24iLDIwKSxPdCgiY2xpY2siLGZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgubGltaXREb3REZXB0aD0hMSl9KSxQZSgyMywiIENhbmNlbCAiKSxoZSgpLGRlKDI0LCJidXR0b24iLDIwKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoZik7Y29uc3QgTT1mYSgxOCk7cmV0dXJuIGgucmVzdWJtaXRXaXRoTWF4RGVwdGgoTS52YWx1''@;'; put 'put ''ZSksQ3QoaC5saW1pdERvdERlcHRoPSExKX0pLFBlKDI1LCIgUmVzdWJtaXQgIiksaGUoKSgpKCkoKSxkZSgyNiwiY2xyLW1vZGFsIiwxMikoMjcsImgzIiwxMyksUGUoMjgsIldhcm5pbmciKSxoZSgpLGRlKDI5LCJkaXYiLDE0KSgzMCwicCIpLFBlKDMxKSxoZSgpKCksZGUoMzIsImRpdiIs''@;'; put 'put ''MTUpKDMzLCJkaXYiLDE5KSgzNCwicCIpLFBlKDM1LCJSZW5kZXIgYW55d2F5ICh0aGlzIG1heSB0YWtlIGEgbG9uZyB0aW1lKSIpLGhlKCksZGUoMzYsImJ1dHRvbiIsMjApLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5jb250aW51ZVJlbmRlcmluZ0dyYXBoKCkp''@;'; put 'put ''fSksUGUoMzcsIiBSZW5kZXIgIiksaGUoKSgpLGRlKDM4LCJkaXYiLDE5KSgzOSwicCIpLFBlKDQwLCJEb3dubG9hZCB0aGUgcmVzdWx0IChQTkcgJiBTVkcgcmVxdWlyZSByZW5kZXJpbmcpIiksaGUoKSxkZSg0MSwiY2xyLWRyb3Bkb3duIikoNDIsImJ1dHRvbiIsMjEpLFBlKDQzLCIgRG93''@;'; put 'put ''bmxvYWQgIiksR3QoNDQsImNsci1pY29uIiwyMiksaGUoKSxndCg0NSxvRnQsNiwxLCJjbHItZHJvcGRvd24tbWVudSIsMjMpLGhlKCkoKSxkZSg0NiwiZGl2IiwxOSkoNDcsInAiKSxQZSg0OCwiUmVzdWJtaXQgd2l0aCBhIG1heC1kZXB0aCAoc3BlY2lmeSBkZXB0aCkiKSxoZSgpLEd0KDQ5''@;'; put 'put ''LCJpbnB1dCIsMTcsMSksZGUoNTEsImJ1dHRvbiIsMjApLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChmKTtjb25zdCBNPWZhKDUwKTtyZXR1cm4gQ3QoaC5yZXN1Ym1pdFdpdGhNYXhEZXB0aChNLnZhbHVlKSl9KSxQZSg1MiwiIFJlc3VibWl0ICIpLGhlKCkoKSxkZSg1MywiZGl2IiwxOSko''@;'; put 'put ''NTQsInAiKSxQZSg1NSwiQ2FuY2VsIHRoaXMgc3VibWlzc2lvbiIpLGhlKCksZGUoNTYsImJ1dHRvbiIsMjApLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5jYW5jZWxSZW5kZXJpbmdHcmFwaCgpKX0pLFBlKDU3LCIgQ2FuY2VsICIpLGhlKCkoKSgpKCl9MiZkJiYo''@;'; put 'put ''ZmUoMiksRWUoIm5nSWYiLGgubGlicmFyeUxpc3QpLGZlKCksRWUoIm5nRm9yT2YiLGgubGlicmFyeUxpc3QpLGZlKCksRWUoIm5nSWYiLGgubGlicmFyaWVzUGFnaW5nKSxmZSgzKSxFZSgibmdJZiIsIWguY29sdW1uJiYhaC50YWJsZSksZmUoKSxFZSgibmdJZiIsaC5jb2x1bW58fGgudGFi''@;'; put 'put ''bGUpLGZlKCksRWUoImNsck1vZGFsT3BlbiIsaC5saW1pdERvdERlcHRoKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDE3KSxFZSgiY2xyTW9kYWxPcGVuIixudWxsIT09aC5sYXJnZURvdEZpbGVMaW5lcykoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSg1KSxJcigiIFRoZSBnZW5lcmF0''@;'; put 'put ''ZWQgZG90IGZpbGUgaGFzICIsaC5sYXJnZURvdEZpbGVMaW5lcywiIGxpbmVzLiBSZW5kZXJpbmcgbWF5IHRha2UgYSBsb25nIHRpbWUsIGhvdyB3b3VsZCB5b3UgbGlrZSB0byBwcm9jZWVkPyAiKSxmZSgxMSksRWUoImRpc2FibGVkIiwhaC5jb2x1bW4mJiFoLnRhYmxlKSl9LGRlcGVuZGVu''@;'; put 'put ''Y2llczpbaHMsQ2EsUDEsbmMsc2gsaGwscmwsdzIsbWgsdTUsVWwsYnUscjAsYzEsSWYsQ3MsYUgsaGgseTIsTWQscjUsVDksQTksZncsc2csb2ddLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgbEZ0PSgpPT5bMTAsMjAsNTAsMTAwXTtmdW5jdGlvbiBjRnQoYyxsKXtp''@;'; put 'put ''ZigxJmMmJihkZSgwLCJvcHRpb24iLDE0KSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7QUUoInZhbHVlIixhKSxmZSgpLElyKCIgIixhLCIgIil9fWZ1bmN0aW9uIHVGdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDIwKX1mdW5jdGlvbiBkRnQoYyxsKXtpZigxJmMp''@;'; put 'put ''e2NvbnN0IGE9T24oKTtkZSgwLCJjbHItaWNvbiIsMjEpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpO3JldHVybiBoLm1ldGFEYXRhU2VhcmNoPSIiLEN0KGgubWV0YUxpc3RPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIGhGdChjLGwpe2lmKDEmYyl7Y29u''@;'; put 'put ''c3QgYT1PbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDE1KSgxLCJkaXYiLDE2KSgyLCJpbnB1dCIsMTcsMCksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKTtyZXR1cm4gZmkoZi5tZXRhRGF0YVNlYXJjaCxoKXx8KGYubWV0YURhdGFTZWFyY2g9aCks''@;'; put 'put ''Q3QoaCl9KSxPdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkubWV0YUxpc3RPbkZpbHRlcigpKX0pLGhlKCksZ3QoNCx1RnQsMSwwLCJjbHItaWNvbiIsMTgpKDUsZEZ0LDEsMCwiY2xyLWljb24iLDE5KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWZhKDMpLGQ9T2Uo''@;'; put 'put ''KTtmZSgyKSxsaSgibmdNb2RlbCIsZC5tZXRhRGF0YVNlYXJjaCksZmUoMiksRWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksRWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBmRnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdHJlZS1ub2Rl''@;'; put 'put ''IiwyMyksT3QoImNsaWNrIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCkuJGltcGxpY2l0LHY9T2UoKTtyZXR1cm4gQ3Qodi50cmVlTm9kZUNsaWNrZWQoaCxmLHYubWV0YURhdGFMaXN0KSl9KSxjaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9''@;'; put 'put ''T2UoKS4kaW1wbGljaXQ7cmV0dXJuIGZpKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksZGUoMSwicCIsMjQpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCkuJGltcGxpY2l0LGY9T2UoKTtyZXR1cm4gZi5tZXRhRGF0YUlkPWguSUQsQ3QoZi5t''@;'; put 'put ''ZXRhRGF0YU9uQ2xpY2soZi5tZXRhRGF0YUlkLGgpKX0pLEd0KDIsImNsci1pY29uIiwyNSksUGUoMyksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpLiRpbXBsaWNpdDtsaSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLEVlKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdUYWJsZXMmJiFhLnRh''@;'; put 'put ''YmxlcyksZmUoMyksSXIoIiAiLGEuSUQsIiAiKX19ZnVuY3Rpb24gcEZ0KGMsbCl7aWYoMSZjJiYob2koMCksZ3QoMSxmRnQsNCwzLCJjbHItdHJlZS1ub2RlIiwyMiksc2koKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksRWUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIGdG''@;'; put 'put ''dChjLGwpezEmYyYmKGRlKDAsImRpdiIsMjYpLEd0KDEsImNsci1pY29uIiwyNyksZGUoMiwicCIsMjgpLFBlKDMsIiBQbGVhc2Ugc2VsZWN0IGEgdHlwZSAiKSxoZSgpKCkpfWZ1bmN0aW9uIG1GdChjLGwpezEmYyYmKGRlKDAsImg0IiksUGUoMSwiTG9hZGluZyBtZXRhZGF0YSB0eXBlcyIp''@;'; put 'put ''LGhlKCkpfWZ1bmN0aW9uIHZGdChjLGwpezEmYyYmKGRlKDAsImg0IiksUGUoMSwiTG9hZGluZyBtZXRhZGF0YSBvYmplY3RzIiksaGUoKSl9ZnVuY3Rpb24geUZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiksZ3QoMSxtRnQsMiwwLCJoNCIsMzEpKDIsdkZ0LDIsMCwiaDQiLDMxKSxoZSgp''@;'; put 'put ''KSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoKSxFZSgibmdJZiIsYS5tZXRhdHlwZXNMb2FkaW5nKSxmZSgpLEVlKCJuZ0lmIiwhYS5tZXRhdHlwZXNMb2FkaW5nKX19ZnVuY3Rpb24gYkZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyOSkoMSwic3BhbiIsMzApLFBlKDIsIiBMb2FkaW5nLi4u''@;'; put 'put ''ICIpLGhlKCksZ3QoMyx5RnQsMywyLCJkaXYiLDMxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgzKSxFZSgibmdJZiIsYS5sb2FkaW5nKX19ZnVuY3Rpb24gX0Z0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2IiwzOCkoMSwiaW5wdXQiLDM5LDEpLGNpKCJuZ01vZGVs''@;'; put 'put ''Q2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDIpO3JldHVybiBmaShmLm1ldGFPYmplY3RTZWFyY2gsaCl8fChmLm1ldGFPYmplY3RTZWFyY2g9aCksQ3QoaCl9KSxPdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDIpLm1ldGFPYmplY3RPbkZpbHRl''@;'; put 'put ''cigpKX0pLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7ZmUoKSxsaSgibmdNb2RlbCIsYS5tZXRhT2JqZWN0U2VhcmNoKX19ZnVuY3Rpb24gd0Z0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsNDMpfWZ1bmN0aW9uIENGdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDI1KX1mdW5j''@;'; put 'put ''dGlvbiBTRnQoYyxsKXtpZigxJmMmJihkZSgwLCJwIiw1NCksUGUoMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O2ZlKCksSXIoIiAiLGEuVVJJLCIgIil9fWZ1bmN0aW9uIE1GdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10cmVlLW5vZGUiLDQ5KSgxLCJkaXYiLDUwKSgy''@;'; put 'put ''LCJkaXYiKSxndCgzLHdGdCwxLDAsImNsci1pY29uIiw1MSkoNCxDRnQsMSwwLCJjbHItaWNvbiIsNTIpLFBlKDUpLGhlKCksZ3QoNixTRnQsMiwxLCJwIiw1MyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7RWUoImNsckV4cGFuZGFibGUiLCEwKSxmZSgpLHhyKCJvYmplY3Qt''@;'; put 'put ''aGVhZGVyIiwhYS5jb3VudCksZmUoMiksRWUoIm5nSWYiLCFhLmNvdW50KSxmZSgpLEVlKCJuZ0lmIixhLmNvdW50KSxmZSgpLElyKCIgIixhLmRpc3BsYXksIiAiKSxmZSgpLEVlKCJuZ0lmIiwhYS5jb3VudCl9fWZ1bmN0aW9uIHhGdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10cmVlIiw0''@;'; put 'put ''NyksZ3QoMSxNRnQsNyw3LCJjbHItdHJlZS1ub2RlIiw0OCksZGwoMiwiYXN5bmMiKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoNik7RWUoImNsckxhenkiLCEwKSxmZSgpLEVlKCJjbHJSZWN1cnNpdmVGb3JPZiIsamMoMiwzLGEucm9vdCQpKSgiY2xyUmVjdXJzaXZlRm9yR2V0Q2hpbGRyZW4i''@;'; put 'put ''LGEuZ2V0Q2hpbGRyZW4pfX1mdW5jdGlvbiBFRnQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItYWNjb3JkaW9uLWNvbnRlbnQiKSxndCgxLHhGdCwzLDUsImNsci10cmVlIiw0NiksaGUoKSksMiZjKXtjb25zdCBhPU9lKDUpO2ZlKCksRWUoIm5nSWYiLGEuc2hvd0FjYyl9fWZ1bmN0aW9uIFRG''@;'; put 'put ''dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1hY2NvcmRpb24tcGFuZWwiLDQyKSxPdCgiY2xyQWNjb3JkaW9uUGFuZWxPcGVuQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCkuJGltcGxpY2l0LHY9T2UoMyk7cmV0dXJuIEN0KGg/di5wYW5lbENoYW5n''@;'; put 'put ''ZShoLGYpOiIiKX0pLGRlKDEsImNsci1hY2NvcmRpb24tdGl0bGUiKSxHdCgyLCJjbHItaWNvbiIsNDMpLFBlKDMpLGRlKDQsInAiLDQ0KSxQZSg1KSxoZSgpKCksZ3QoNixFRnQsMiwxLCJjbHItYWNjb3JkaW9uLWNvbnRlbnQiLDQ1KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpLiRpbXBs''@;'; put 'put ''aWNpdDtmZSgzKSxJcigiICIsYS5OQU1FLCIgIiksZmUoMiksQ3IoYS5JRCl9fWZ1bmN0aW9uIEFGdChjLGwpe2lmKDEmYyYmKG9pKDApLGd0KDEsVEZ0LDcsMiwiY2xyLWFjY29yZGlvbi1wYW5lbCIsNDEpLHNpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLEVlKCJuZ0lmIiwh''@;'; put 'put ''YS5oaWRkZW4pfX1mdW5jdGlvbiBrRnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQwKSgxLCJjbHItYWNjb3JkaW9uIiksZ3QoMixBRnQsMiwxLCJuZy1jb250YWluZXIiLDcpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDIpLEVlKCJuZ0Zvck9mIixhLm1ldGFPYmplY3RTaG93''@;'; put 'put ''TGlzdCl9fWZ1bmN0aW9uIERGdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDQzKX1mdW5jdGlvbiBJRnQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwyNSl9ZnVuY3Rpb24gUkZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsNTQpLFBlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpLiRp''@;'; put 'put ''bXBsaWNpdDtmZSgpLElyKCIgIixhLlVSSSwiICIpfX1mdW5jdGlvbiBMRnQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdHJlZS1ub2RlIiw0OSkoMSwiZGl2Iiw1MCkoMiwiZGl2IiksZ3QoMyxERnQsMSwwLCJjbHItaWNvbiIsNTEpKDQsSUZ0LDEsMCwiY2xyLWljb24iLDUyKSxQZSg1KSxo''@;'; put 'put ''ZSgpLGd0KDYsUkZ0LDIsMSwicCIsNTMpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0VlKCJjbHJFeHBhbmRhYmxlIiwhMCksZmUoKSx4cigib2JqZWN0LWhlYWRlciIsIWEuY291bnQpLGZlKDIpLEVlKCJuZ0lmIiwhYS5jb3VudCksZmUoKSxFZSgibmdJZiIsYS5jb3VudCks''@;'; put 'put ''ZmUoKSxJcigiICIsYS5kaXNwbGF5LCIgIiksZmUoKSxFZSgibmdJZiIsIWEuY291bnQpfX1mdW5jdGlvbiBPRnQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdHJlZSIsNDcpLGd0KDEsTEZ0LDcsNywiY2xyLXRyZWUtbm9kZSIsNDgpLGRsKDIsImFzeW5jIiksaGUoKSksMiZjKXtjb25zdCBh''@;'; put 'put ''PU9lKDQpO0VlKCJjbHJMYXp5IiwhMCksZmUoKSxFZSgiY2xyUmVjdXJzaXZlRm9yT2YiLGpjKDIsMyxhLnJvb3QkKSkoImNsclJlY3Vyc2l2ZUZvckdldENoaWxkcmVuIixhLmdldENoaWxkcmVuKX19ZnVuY3Rpb24gUEZ0KGMsbCl7aWYoMSZjJiYob2koMCksZGUoMSwiZGl2Iiw1NSksR3Qo''@;'; put 'put ''MiwiY2xyLWljb24iLDQzKSxkZSgzLCJkaXYiLDU2KSg0LCJwIiw1NyksUGUoNSksaGUoKSxkZSg2LCJwIiw1OCksUGUoNyksaGUoKSgpKCksZ3QoOCxPRnQsMyw1LCJjbHItdHJlZSIsNDYpLHNpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPU9lKDMpO2ZlKDUpLElyKCIgIixhLk5B''@;'; put 'put ''TUUsIiAiKSxmZSgyKSxJcigiICIsYS5JRCwiICIpLGZlKCksRWUoIm5nSWYiLGQuc2hvd0FjYyl9fWZ1bmN0aW9uIEZGdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNDApLGd0KDEsUEZ0LDksMywibmctY29udGFpbmVyIiw3KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoKSxFZSgi''@;'; put 'put ''bmdGb3JPZiIsYS5tZXRhT2JqZWN0U2hvd0xpc3QpfX1mdW5jdGlvbiBIRnQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItZGctcm93IikoMSwiY2xyLWRnLWNlbGwiKSxQZSgyKSxoZSgpLGRlKDMsImNsci1kZy1jZWxsIiksUGUoNCksaGUoKSxkZSg1LCJjbHItZGctY2VsbCIpLFBlKDYpLGhl''@;'; put 'put ''KCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLENyKGEuVFlQRSksZmUoMiksQ3IoYS5OQU1FKSxmZSgyKSxDcihhLlZBTFVFKX19ZnVuY3Rpb24gTkZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWRhdGFncmlkIiw1OSkoMSwiY2xyLWRnLWNvbHVtbiIpLFBlKDIsIiBUWVBF''@;'; put 'put ''ICIpLEd0KDMsImNsci1kZy1zdHJpbmctZmlsdGVyIiw2MCksaGUoKSxkZSg0LCJjbHItZGctY29sdW1uIiksUGUoNSwiIE5BTUUgIiksR3QoNiwiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDYwKSxoZSgpLGRlKDcsImNsci1kZy1jb2x1bW4iKSxQZSg4LCIgVkFMVUUgIiksR3QoOSwiY2xyLWRn''@;'; put 'put ''LXN0cmluZy1maWx0ZXIiLDYwKSxoZSgpLGd0KDEwLEhGdCw3LDMsImNsci1kZy1yb3ciLDYxKSxkZSgxMSwiY2xyLWRnLWZvb3RlciIpKDEyLCJjbHItZGctcGFnaW5hdGlvbiIsNjIsMikoMTQsImNsci1kZy1wYWdlLXNpemUiLDYzKSxQZSgxNSwiQXR0cmlidXRlcyBwZXIgcGFnZSIpLGhl''@;'; put 'put ''KCksUGUoMTYpLGhlKCkoKSgpKSwyJmMpe2NvbnN0IGE9ZmEoMTMpLGQ9T2UoMik7ZmUoMyksRWUoImNsckRnU3RyaW5nRmlsdGVyIixkLnR5cGVGaWx0ZXIpLGZlKDMpLEVlKCJjbHJEZ1N0cmluZ0ZpbHRlciIsZC5uYW1lRmlsdGVyKSxmZSgzKSxFZSgiY2xyRGdTdHJpbmdGaWx0ZXIiLGQu''@;'; put 'put ''dmFsdWVGaWx0ZXIpLGZlKCksRWUoImNsckRnSXRlbXNPZiIsZC5tZXRhT2JqZWN0QXR0cmlidXRlcyksZmUoMiksRWUoImNsckRnUGFnZVNpemUiLDEwKSxmZSgyKSxFZSgiY2xyUGFnZVNpemVPcHRpb25zIix0bCg5LGxGdCkpLGZlKDIpLGszKCIgIixhLmZpcnN0SXRlbSsxLCIgLSAiLGEu''@;'; put 'put ''bGFzdEl0ZW0rMSwiIG9mICIsYS50b3RhbEl0ZW1zLCIgQXR0cmlidXRlcyAiKX19ZnVuY3Rpb24gVkZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzMikoMSwiZGl2IiwzMyksZ3QoMixfRnQsMywxLCJkaXYiLDM0KSxHdCgzLCJiciIpLGd0KDQsa0Z0LDMsMSwiZGl2IiwzNSkoNSxGRnQs''@;'; put 'put ''MiwxLCJkaXYiLDM1KSxoZSgpLGRlKDYsImRpdiIsMzYpKDcsImgzIiksUGUoOCksaGUoKSxndCg5LE5GdCwxNywxMCwiY2xyLWRhdGFncmlkIiwzNyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgyKSxFZSgibmdJZiIsYS5tZXRhT2JqZWN0TGlzdCYmIWEub2JqZWN0Um91dGUpLGZl''@;'; put 'put ''KDIpLEVlKCJuZ0lmIiwhYS5vYmplY3RWaWV3KSxmZSgpLEVlKCJuZ0lmIixhLm9iamVjdFZpZXcpLGZlKDMpLENyKGEuYXNzb09iamVjdFNlbGVjdGVkKSxmZSgpLEVlKCJuZ0lmIixhLnNob3dUYWJsZSl9fWNsYXNzIEJGdHthY2NlcHRzKGwsYSl7cmV0dXJuIiIrbC5OQU1FPT09YXx8bC5O''@;'; put 'put ''QU1FLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihhKT49MH19Y2xhc3MgakZ0e2FjY2VwdHMobCxhKXtyZXR1cm4iIitsLlRZUEU9PT1hfHxsLlRZUEUudG9Mb3dlckNhc2UoKS5pbmRleE9mKGEpPj0wfX1jbGFzcyB6RnR7YWNjZXB0cyhsLGEpe3JldHVybiIiK2wuVkFMVUU9PT1hfHxsLlZBTFVF''@;'; put 'put ''LnRvTG93ZXJDYXNlKCkuaW5kZXhPZihhKT49MH19bGV0IGFvZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXt0aGlzLmV2ZW50U2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMuaGVscGVyU2VydmljZT1oLHRoaXMubG9jYXRpb249Zix0aGlzLnJvdXRlcj12''@;'; put 'put ''LHRoaXMucm91dGU9TSx0aGlzLm1ldGFEYXRhU2VhcmNoPSIiLHRoaXMubWV0YU9iamVjdFNlYXJjaD0iIix0aGlzLm1ldGFPYmplY3RBc3NvY2lhdGlvbnM9W10sdGhpcy5tZXRhT2JqZWN0QXR0cmlidXRlcz1bXSx0aGlzLnNob3dUYWJsZT0hMSx0aGlzLnNob3dBY2M9ITEsdGhpcy5tZXRh''@;'; put 'put ''RGF0YUlkPSIiLHRoaXMubG9hZGluZz0hMCx0aGlzLm1ldGF0eXBlc0xvYWRpbmc9ITAsdGhpcy5tZXRhT2JqZWN0U2l6ZT0yMDAsdGhpcy5hc3NvVHlwZVNlbGVjdGVkPSIiLHRoaXMuYXNzb09iamVjdFNlbGVjdGVkPSIiLHRoaXMucmVwb3NpdG9yeT0iIix0aGlzLm9iamVjdFJvdXRlPSEx''@;'; put 'put ''LHRoaXMuc2hvd0RhdGE9ITEsdGhpcy5vYmplY3RWaWV3PSExLHRoaXMuZ2V0Q2hpbGRyZW49RD0+RC5jb3VudD9fbyhELmRldGFpbHMpOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGFkZXRhaWxzIix7U0FTQ29udHJvbFRhYmxlOlt7b2JqZWN0dXJpOkQuQVNTT0NVUkl9''@;'; put 'put ''XX0pLnRoZW4odGU9Pnt0aGlzLnNob3dUYWJsZT0hMCx0aGlzLm1ldGFPYmplY3RBdHRyaWJ1dGVzPXRlLmFkYXB0ZXJSZXNwb25zZS5hdHRyaWJ1dGVzLHRoaXMuYXNzb09iamVjdFNlbGVjdGVkPUQuTkFNRTtsZXQgb2U9dGhpcy5yb3V0ZXIudXJsO3JldHVybiB0aGlzLmxvY2F0aW9uLnJl''@;'; put 'put ''cGxhY2VTdGF0ZSh0aGlzLm9iamVjdFJvdXRlP29lLnNsaWNlKDAsb2UubGFzdEluZGV4T2YoIm9iamVjdCIpKSsib2JqZWN0LyIrRC5BU1NPQ1VSSS5zbGljZSgxK0QuQVNTT0NVUkkuaW5kZXhPZigiXFwiKSk6b2UrIi9vYmplY3QvIitELkFTU09DVVJJLnNsaWNlKDErRC5BU1NPQ1VSSS5p''@;'; put 'put ''bmRleE9mKCJcXCIpKSksdGhpcy5nZXRBc3Nvc2lhdGlvbnNDb3VudCh0ZS5hZGFwdGVyUmVzcG9uc2UuYXNzb2NpYXRpb25zKX0pLHRoaXMuZGVib3VuY2U9ITF9bmdPbkluaXQoKXtYbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0idmlldy9tZXRhZGF0YSIsdGhpcy5yb3V0ZXIudXJsLmlu''@;'; put 'put ''Y2x1ZGVzKCIvdmlldy9tZXRhZGF0YS9vYmplY3QvIikmJih0aGlzLm9iamVjdFJvdXRlPSEwLHRoaXMub2JqZWN0Vmlldz0hMCksdGhpcy5wYWdlU2l6ZT01LHRoaXMudHlwZUZpbHRlcj1uZXcgakZ0LHRoaXMubmFtZUZpbHRlcj1uZXcgQkZ0LHRoaXMudmFsdWVGaWx0ZXI9bmV3IHpGdCxY''@;'; put 'put ''bi5tZXRhZGF0YS5tZXRhRGF0YUxpc3QmJlhuLm1ldGFkYXRhLm1ldGFSZXBvc2l0b3JpZXMmJiF0aGlzLm9iamVjdFJvdXRlPyh0aGlzLm1ldGFEYXRhTGlzdD1Ybi5tZXRhZGF0YS5tZXRhRGF0YUxpc3QsdGhpcy5yZXBvc2l0b3JpZXM9WG4ubWV0YWRhdGEubWV0YVJlcG9zaXRvcmllcyx0''@;'; put 'put ''aGlzLnJlcG9zaXRvcnk9WG4ubWV0YWRhdGEuc2VsZWN0ZWRSZXBvc2l0b3J5LHRoaXMubG9hZGluZz0hMSx0aGlzLm1ldGF0eXBlc0xvYWRpbmc9ITEsdGhpcy5tZXRhRGF0YVNlYXJjaD1Ybi5tZXRhZGF0YS5tZXRhRGF0YVNlYXJjaCk6KHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRh''@;'; put 'put ''bmF2L21ldGF0eXBlcyIsbnVsbCkudGhlbihhPT57dGhpcy5tZXRhRGF0YUxpc3Q9YS5hZGFwdGVyUmVzcG9uc2UudHlwZXMsWG4ubWV0YWRhdGEubWV0YURhdGFMaXN0PXRoaXMubWV0YURhdGFMaXN0LHRoaXMubG9hZGluZz0hMSx0aGlzLm1ldGF0eXBlc0xvYWRpbmc9ITF9KSx0aGlzLnNh''@;'; put 'put ''c1NlcnZpY2UucmVxdWVzdCgibWV0YW5hdi9tZXRhcmVwb3MiLG51bGwpLnRoZW4oYT0+e2xldCBkPSExO3RoaXMucmVwb3NpdG9yaWVzPVtdO2ZvcihsZXQgaD0wO2g8YS5hZGFwdGVyUmVzcG9uc2Uub3V0cmVwb3MubGVuZ3RoO2grKyl0aGlzLnJlcG9zaXRvcmllcy5wdXNoKGEuYWRhcHRl''@;'; put 'put ''clJlc3BvbnNlLm91dHJlcG9zW2hdLk5BTUUpLCJGb3VuZGF0aW9uIj09PWEuYWRhcHRlclJlc3BvbnNlLm91dHJlcG9zW2hdLk5BTUUmJihkPSEwKTtpZih0aGlzLnJlcG9zaXRvcnk9ZD8iRm91bmRhdGlvbiI6YS5hZGFwdGVyUmVzcG9uc2Uub3V0cmVwb3NbMF0uTkFNRSxYbi5tZXRhZGF0''@;'; put 'put ''YS5tZXRhUmVwb3NpdG9yaWVzPXRoaXMucmVwb3NpdG9yaWVzLFhuLm1ldGFkYXRhLnNlbGVjdGVkUmVwb3NpdG9yeT10aGlzLnJlcG9zaXRvcnksdGhpcy5vYmplY3RSb3V0ZSl7dGhpcy5ldmVudFNlcnZpY2UuY2xvc2VTaWRlYmFyKCksdGhpcy5zaG93RGF0YT0hMDtsZXQgaD0iIixmPXRo''@;'; put 'put ''aXMucm91dGUuc25hcHNob3QucGFyYW1zLm9iamVjdElEO3RoaXMubWV0YU9iamVjdExpc3Q9W10sdGhpcy5tZXRhT2JqZWN0TGlzdC5wdXNoKHtJRDpmLE5BTUU6aH0pLHRoaXMubWV0YU9iamVjdFNob3dMaXN0PXRoaXMubWV0YU9iamVjdExpc3QsdGhpcy5tZXRhT2JqZWN0T25DbGljayh0''@;'; put 'put ''aGlzLm1ldGFPYmplY3RTaG93TGlzdFswXS5JRCx0aGlzLm1ldGFPYmplY3RTaG93TGlzdFswXSl9fSkpfXRyZWVOb2RlQ2xpY2tlZChhLGQsaCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlVHJlZUl0ZW1zKGgsZCl9Y29sbGFwc2VUcmVlSXRlbXMoYSxkKXth''@;'; put 'put ''LmZvckVhY2goaD0+e0pTT04uc3RyaW5naWZ5KGgpIT09SlNPTi5zdHJpbmdpZnkoZCkmJihoLmV4cGFuZGVkPSExKX0pfW1ldGFEYXRhT25DbGljayhhLGQpe3RoaXMub2JqZWN0Vmlldz0hMSx0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSgiL3ZpZXcvbWV0YWRhdGEiKSx0aGlzLnNob3dE''@;'; put 'put ''YXRhPSExLHRoaXMubG9hZGluZz0hMCx0aGlzLnNlbGVjdG1ldGFEYXRhKGEsZCl9bWV0YU9iamVjdE9uQ2xpY2soYSxkKXt0aGlzLmFzc29PYmplY3RTZWxlY3RlZD0iIC4gIix0aGlzLnNob3dBY2M9ITEsdGhpcy5tZXRhT2JqZWN0QXR0cmlidXRlcz1bXSx0aGlzLnNlbGVjdG1ldGFPYmpl''@;'; put 'put ''Y3QoYSxkKX1zZWxlY3RtZXRhRGF0YShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2guc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGFvYmplY3RzIix7U0FTQ29udHJvbFRhYmxlOlt7bWV0YXR5cGU6YSxyZXBvOmgucmVwb3NpdG9yeX1dfSkudGhlbih2PT57''@;'; put 'put ''aC5tZXRhT2JqZWN0TGlzdD12LmFkYXB0ZXJSZXNwb25zZS5vYmplY3RzLGguZ2V0TWV0YU9iamVjdEF0dHJpYnV0ZXMoaC5tZXRhT2JqZWN0U2l6ZSksaC5sb2FkaW5nPSExLGguYXNzb1R5cGVTZWxlY3RlZD1hLGguZXZlbnRTZXJ2aWNlLmNsb3NlU2lkZWJhcigpLGguc2hvd0RhdGE9ITB9''@;'; put 'put ''KX0pKCl9c2VsZWN0bWV0YU9iamVjdChhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2guc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGFkZXRhaWxzIix7U0FTQ29udHJvbFRhYmxlOlt7b2JqZWN0dXJpOmF9XX0pLnRoZW4odj0+e2gubWV0YU9iamVjdEFzc29j''@;'; put 'put ''aWF0aW9ucz12LmFkYXB0ZXJSZXNwb25zZS5hc3NvY2lhdGlvbnMsaC5yb290JD1fbyhoLmdldEFzc29zaWF0aW9uc0NvdW50KHYuYWRhcHRlclJlc3BvbnNlLmFzc29jaWF0aW9ucykpLGguc2hvd0FjYz0hMCxoLnNob3dUYWJsZT0hMDtsZXQgTT12LmFkYXB0ZXJSZXNwb25zZS5hdHRyaWJ1''@;'; put 'put ''dGVzLmZpbmQoVT0+Ik5hbWUiPT09VS5OQU1FKS5WQUxVRTtoLmFzc29PYmplY3RTZWxlY3RlZD1NLGQuTkFNRT1NO2xldCBEPWgucm91dGVyLnVybDtoLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShoLm9iamVjdFJvdXRlP0Quc2xpY2UoMCxELmxhc3RJbmRleE9mKCJvYmplY3QiKSkrIm9iamVj''@;'; put 'put ''dC8iK2Euc2xpY2UoMSthLmluZGV4T2YoIlxcIikpOkQrIi9vYmplY3QvIithLnNsaWNlKDErYS5pbmRleE9mKCJcXCIpKSksaC5tZXRhT2JqZWN0QXR0cmlidXRlcz12LmFkYXB0ZXJSZXNwb25zZS5hdHRyaWJ1dGVzfSl9KSgpfXNlbGVjdEFzc29zaWF0aW9uc0RldGFpbHMoYSxkKXt2YXIg''@;'; put 'put ''aD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtoLnNhc1NlcnZpY2UucmVxdWVzdCgibWV0YW5hdi9tZXRhZGV0YWlscyIse1NBU0NvbnRyb2xUYWJsZTpbe29iamVjdHVyaTphfV19KS50aGVuKHY9PntoLm1ldGFPYmplY3RBdHRyaWJ1dGVzPXYuYWRhcHRlclJlc3BvbnNlLmF0dHJpYnV0''@;'; put 'put ''ZXMsaC5zaG93VGFibGU9ITB9KX0pKCl9Z2V0QXNzb3NpYXRpb25zQ291bnQoYSl7bGV0IGQ9bmV3IE1hcDtmb3IobGV0IGYgb2YgYSl7ZC5oYXMoZi5BU1NPQyl8fGQuc2V0KGYuQVNTT0Mse2NvdW50OjAsZGV0YWlsczpbXX0pO2xldCB2PWQuZ2V0KGYuQVNTT0MpO3YuY291bnQrKyx2LmRl''@;'; put 'put ''dGFpbHMucHVzaCh7QVNTT0NVUkk6Zi5BU1NPQ1VSSSxOQU1FOmYuTkFNRSxkaXNwbGF5OmYuTkFNRSxVUkk6Zi5BU1NPQ1VSSS5zbGljZShmLkFTU09DVVJJLmluZGV4T2YoIjoiKSsxKX0pfWxldCBoPVtdO3JldHVybiBkLmZvckVhY2goZnVuY3Rpb24oZix2KXtoLnB1c2goe0FTU09DOnYs''@;'; put 'put ''Y291bnQ6Zi5jb3VudCxkZXRhaWxzOmYuZGV0YWlscyxkaXNwbGF5OnYrIiAoICIrZi5jb3VudCsiICkifSl9KSxofXNldFR5cGVBc3Nvc2lhdGlvbnMoYSl7bGV0IGQ9W107Zm9yKGxldCBoIG9mIHRoaXMubWV0YU9iamVjdEFzc29jaWF0aW9ucyloLkFTU09DPT09YSYmZC5wdXNoKGgpO3Jl''@;'; put 'put ''dHVybiB0aGlzLmFzc29zaWF0aW9uTmFtZXM9ZCxkfWFzc29zaWF0aW9uTmFtZU9uQ2xpY2soYSl7dGhpcy5hc3NvT2JqZWN0U2VsZWN0ZWQ9IiAuICIsdGhpcy5tZXRhT2JqZWN0QXR0cmlidXRlcz1bXSx0aGlzLnNob3dUYWJsZT0hMSx0aGlzLnNlbGVjdEFzc29zaWF0aW9uc0RldGFpbHMo''@;'; put 'put ''YSl9bWV0YUxpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5tZXRhRGF0YUxpc3QsdGhpcy5tZXRhRGF0YVNlYXJjaCwiSUQiKSxYbi5tZXRhZGF0YS5tZXRhRGF0YVNlYXJjaD10aGlzLm1ldGFEYXRhU2VhcmNofW1ldGFPYmplY3RPbkZpbHRl''@;'; put 'put ''cigpe3RoaXMubWV0YU9iamVjdEF0dHJpYnV0ZXM9W10sdGhpcy5oZWxwZXJTZXJ2aWNlLm1ldGFPYmplY3RPbkZpbHRlcih0aGlzLm1ldGFPYmplY3RMaXN0LHRoaXMubWV0YU9iamVjdFNlYXJjaCwiTkFNRSIpLHRoaXMuZ2V0TWV0YU9iamVjdEF0dHJpYnV0ZXModGhpcy5tZXRhT2JqZWN0''@;'; put 'put ''U2l6ZSksWG4ubWV0YWRhdGEubWV0YU9iamVjdFNlYXJjaD10aGlzLm1ldGFPYmplY3RTZWFyY2h9Z2V0TWV0YU9iamVjdEF0dHJpYnV0ZXMoYSl7aWYodm9pZCAwIT09dGhpcy5tZXRhT2JqZWN0TGlzdCYmdGhpcy5tZXRhT2JqZWN0TGlzdC5sZW5ndGg+YSl7bGV0IGQ9MCxoPS0xO2Zvcihs''@;'; put 'put ''ZXQgZj0wO2Y8dGhpcy5tZXRhT2JqZWN0TGlzdC5sZW5ndGg7ZisrKWlmKCh2b2lkIDA9PT10aGlzLm1ldGFPYmplY3RMaXN0W2ZdLmhpZGRlbnx8ITE9PT10aGlzLm1ldGFPYmplY3RMaXN0W2ZdLmhpZGRlbikmJmQrKyxkPT09YSl7aD1mO2JyZWFrfXRoaXMubWV0YU9iamVjdFNob3dMaXN0''@;'; put 'put ''PS0xIT09aD90aGlzLm1ldGFPYmplY3RMaXN0LnNsaWNlKDAsaCk6dGhpcy5tZXRhT2JqZWN0TGlzdH1lbHNlIHRoaXMubWV0YU9iamVjdFNob3dMaXN0PXRoaXMubWV0YU9iamVjdExpc3R9cGFuZWxDaGFuZ2UoYSxkKXt0aGlzLmRlYm91bmNlfHwodGhpcy5tZXRhT2JqZWN0T25DbGljayhk''@;'; put 'put ''LklELGQpLHRoaXMuZGVib3VuY2U9ITAsc2V0VGltZW91dCgoKT0+e3RoaXMuZGVib3VuY2U9ITF9LDYwMCkpfXVwZGF0ZVNlbGVjdGVkUmVwb3NpdG9yeSgpe1huLm1ldGFkYXRhLnNlbGVjdGVkUmVwb3NpdG9yeT10aGlzLnJlcG9zaXRvcnl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0''@;'; put 'put ''aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUoRWMpLHFlKEtzKSxxZShMdSkscWUoczIpLHFlKG5sKSxxZSh0MCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLW1ldGFkYXRhIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxz''@;'; put 'put ''dGFuZGFsb25lOiExLGRlY2xzOjE3LHZhcnM6OCxjb25zdHM6W1sic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJzZWFyY2hPYmpUcmVlSW5wdXQiLCIiXSxbInBhZ2luYXRpb24iLCIiXSxbMSwicmVwby1kcm9wZG93biJdLFsiY2xyU2VsZWN0IiwiIiwiaWQiLCJyZXBvc2l0b3J5IiwzLCJu''@;'; put 'put ''Z01vZGVsQ2hhbmdlIiwiY2hhbmdlIiwibmdNb2RlbCJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZCIsImJhY2tncm91bmQtdHJh''@;'; put 'put ''bnNwYXJlbnQtaSJdLFsxLCJjb2xvci1ncmF5Il0sWyJjbGFzcyIsIm5vLXRhYmxlLXNlbGVjdGVkIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImxvYWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1yb3cgY2xyLWZsZXgtZ3Jvdy0xIiw0LCJuZ0lmIl0sWzMsInZhbHVlIl0sWzEs''@;'; put 'put ''InNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwic2VhcmNoIFNBUyBUeXBlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtl''@;'; put 'put ''eXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xpY2si''@;'; put 'put ''LCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdJZiJdLFszLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiwiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJibG9jayJdLFsxLCJuby10YWJsZS1zZWxlY3Rl''@;'; put 'put ''ZCJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWyJjZHMtdGV4dCIsInNlY3Rpb24iLDEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSIsIm10LTEwIl0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIi''@;'; put 'put ''XSxbNCwibmdJZiJdLFsxLCJjbHItcm93IiwiY2xyLWZsZXgtZ3Jvdy0xIl0sWzEsImNsci1jb2wtNiJdLFsiY2xhc3MiLCJzZWFyY2gtaW5wdXQiLDQsIm5nSWYiXSxbImNsYXNzIiwib2JqZWN0cy1jb2wiLDQsIm5nSWYiXSxbMSwiY2xyLWNvbC02IiwidGV4dC1jZW50ZXIiXSxbImNsYXNz''@;'; put 'put ''IiwiZGF0YWdyaWQtY3VzdG9tLWZvb3RlciIsNCwibmdJZiJdLFsxLCJzZWFyY2gtaW5wdXQiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJzZWFyY2giLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwi''@;'; put 'put ''XSxbMSwib2JqZWN0cy1jb2wiXSxbMywiY2xyQWNjb3JkaW9uUGFuZWxPcGVuQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsckFjY29yZGlvblBhbmVsT3BlbkNoYW5nZSJdLFsic2hhcGUiLCJyYWNrLXNlcnZlciJdLFsxLCJmbG9hdC1yaWdodCJdLFs0LCJjbHJJZkV4cGFuZGVkIl0sWzMsImNs''@;'; put 'put ''ckxhenkiLDQsIm5nSWYiXSxbMywiY2xyTGF6eSJdLFszLCJjbHJFeHBhbmRhYmxlIiw0LCJjbHJSZWN1cnNpdmVGb3IiLCJjbHJSZWN1cnNpdmVGb3JPZiIsImNsclJlY3Vyc2l2ZUZvckdldENoaWxkcmVuIl0sWzMsImNsckV4cGFuZGFibGUiXSxbMSwiZnVsbC13aWR0aCJdLFsic2hhcGUi''@;'; put 'put ''LCJyYWNrLXNlcnZlciIsNCwibmdJZiJdLFsic2hhcGUiLCJibG9jayIsNCwibmdJZiJdLFsiY2xhc3MiLCJmbG9hdC1yaWdodCBvYmplY3QtdXJpIiw0LCJuZ0lmIl0sWzEsImZsb2F0LXJpZ2h0Iiwib2JqZWN0LXVyaSJdLFsxLCJjb2xzLWhlYWQiXSxbMSwib2JqZWN0LXRleHQiXSxbMSwi''@;'; put 'put ''bS0wIiwid29yZC1icmVhayIsIm1yLTIwIl0sWzEsImZsb2F0LXJpZ2h0IiwibWwtMyJdLFsxLCJkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIl0sWzMsImNsckRnU3RyaW5nRmlsdGVyIl0sWzQsImNsckRnSXRlbXMiLCJjbHJEZ0l0ZW1zT2YiXSxbMywiY2xyRGdQYWdlU2l6ZSJdLFszLCJjbHJQ''@;'; put 'put ''YWdlU2l6ZU9wdGlvbnMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJhcHAtc2lkZWJhciIpKDEsImRpdiIsMykoMiwiY2xyLXNlbGVjdC1jb250YWluZXIiKSgzLCJsYWJlbCIpLFBlKDQsIk1ldGFkYXRhIFJlcG9zaXRvcnkiKSxoZSgpLGRlKDUsInNlbGVjdCIsNCks''@;'; put 'put ''Y2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBmaShoLnJlcG9zaXRvcnksdil8fChoLnJlcG9zaXRvcnk9diksdn0pLE90KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGgudXBkYXRlU2VsZWN0ZWRSZXBvc2l0b3J5KCl9KSxndCg2LGNGdCwyLDIsIm9wdGlvbiIsNSks''@;'; put 'put ''aGUoKSgpKCksZGUoNywiY2xyLXRyZWUiKSxndCg4LGhGdCw2LDMsImNsci10cmVlLW5vZGUiLDYpKDkscEZ0LDIsMSwibmctY29udGFpbmVyIiw3KSxoZSgpKCksZGUoMTAsImRpdiIsOCkoMTEsImRpdiIsOSkoMTIsImgzIiwxMCksUGUoMTMpLGhlKCksZ3QoMTQsZ0Z0LDQsMCwiZGl2Iiwx''@;'; put 'put ''MSkoMTUsYkZ0LDQsMSwiZGl2IiwxMikoMTYsVkZ0LDEwLDUsImRpdiIsMTMpLGhlKCkoKSksMiZkJiYoZmUoNSksbGkoIm5nTW9kZWwiLGgucmVwb3NpdG9yeSksZmUoKSxFZSgibmdGb3JPZiIsaC5yZXBvc2l0b3JpZXMpLGZlKDIpLEVlKCJuZ0lmIixoLm1ldGFEYXRhTGlzdCksZmUoKSxF''@;'; put 'put ''ZSgibmdGb3JPZiIsaC5tZXRhRGF0YUxpc3QpLGZlKDQpLENyKGguYXNzb1R5cGVTZWxlY3RlZCksZmUoKSxFZSgibmdJZiIsIWgubG9hZGluZyYmIWgubWV0YU9iamVjdExpc3QpLGZlKCksRWUoIm5nSWYiLGgubG9hZGluZyksZmUoKSxFZSgibmdJZiIsaC5zaG93RGF0YSkpfSxkZXBlbmRl''@;'; put 'put ''bmNpZXM6W2hzLENhLHhmLEVmLG5jLE1mLGhsLHJsLF82LFczLFo5LFRILFR3LG1BLEFILHk2LHJwZSxiNCxXOSxEdyxiNixqOSx2Nix6OSxTdyx3MixtaCx1cGUsVWwsYzEsbzNlLENzLE1kLE45LEN3LFlmZSxlSCwkZmUsR2ZlLEtmZSxvWCxzZyxvZyxWRV0sZW5jYXBzdWxhdGlvbjoyfSl9''@;'; put 'put ''c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1mcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBVRnQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwxMil9ZnVuY3Rpb24gWkZ0KGMsbCl7aWYoMSZjKXtjb25zdCBh''@;'; put 'put ''PU9uKCk7ZGUoMCwiY2xyLWljb24iLDEzKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgyKTtyZXR1cm4gaC5yb2xlU2VhcmNoPSIiLEN0KGgucm9sZUxpc3RPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIFdGdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2Rl''@;'; put 'put ''KDAsImNsci10cmVlLW5vZGUiLDcpKDEsImRpdiIsOCkoMiwiaW5wdXQiLDksMCksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKTtyZXR1cm4gZmkoZi5yb2xlU2VhcmNoLGgpfHwoZi5yb2xlU2VhcmNoPWgpLEN0KGgpfSksT3QoImtleXVwIixmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLnJvbGVMaXN0T25GaWx0ZXIoKSl9KSxoZSgpLGd0KDQsVUZ0LDEsMCwiY2xyLWljb24iLDEwKSg1LFpGdCwxLDAsImNsci1pY29uIiwxMSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1mYSgzKSxkPU9lKCk7ZmUoMiksbGkoIm5nTW9kZWwiLGQu''@;'; put 'put ''cm9sZVNlYXJjaCksZmUoMiksRWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksRWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBZRnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwxNSksT3QoImNsaWNrIixmdW5jdGlvbigp''@;'; put 'put ''e3d0KGEpO2NvbnN0IGg9T2UoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkucm9sZU9uQ2xpY2soaCkpfSksZGUoMSwicCIsMTYpLEd0KDIsImNsci1pY29uIiwxNyksUGUoMyksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpLiRpbXBsaWNpdCxkPU9lKCk7eHIoImFjdGl2ZSIsYS5ST0xF''@;'; put 'put ''VVJJPT09ZC5yb2xlVXJpKSxmZSgzKSxJcigiICIsYS5ST0xFTkFNRSwiICIpfX1mdW5jdGlvbiBHRnQoYyxsKXtpZigxJmMmJihvaSgwKSxndCgxLFlGdCw0LDMsImNsci10cmVlLW5vZGUiLDE0KSxzaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxFZSgibmdJZiIsIWEuaGlk''@;'; put 'put ''ZGVuKX19ZnVuY3Rpb24gJEZ0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwxOCkoMSwic3BhbiIsMTkpLFBlKDIsIiBMb2FkaW5nLi4uICIpLGhlKCkoKSl9ZnVuY3Rpb24gS0Z0KGMsbCl7MSZjJiYoZGUoMCwiaDUiKSxQZSgxLCJObyBNZW1iZXJzIFByZXNlbnQiKSxoZSgpKX1mdW5jdGlvbiBY''@;'; put 'put ''RnQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIsMzIpKDEsInRkIiwzMCksUGUoMiksaGUoKSxkZSgzLCJ0ZCIsMzApLFBlKDQpLGhlKCksZGUoNSwidGQiLDMwKSxQZSg2KSxoZSgpLGRlKDcsInRkIiwzMCksUGUoOCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7RWUoInJvdXRl''@;'; put 'put ''ckxpbmsiLCIvdmlldy91c2VybmF2L3VzZXJzLyIrYS5VUklNRU0pLGZlKDIpLENyKGEuTUVNQkVSTkFNRSksZmUoMiksQ3IoYS5FTUFJTCksZmUoMiksQ3IoYS5NRU1CRVJDUkVBVEVEKSxmZSgyKSxDcihhLk1FTUJFUlVQREFURUQpfX1mdW5jdGlvbiBxRnQoYyxsKXtpZigxJmMmJihkZSgw''@;'; put 'put ''LCJ0YWJsZSIsMjgpKDEsInRoZWFkIikoMiwidHIiKSgzLCJ0ZCIsMjkpKDQsImIiKSxQZSg1LCJOQU1FIiksaGUoKSgpLGRlKDYsInRkIiwyOSkoNywiYiIpLFBlKDgsIkVNQUlMIiksaGUoKSgpLGRlKDksInRkIiwyOSkoMTAsImIiKSxQZSgxMSwiQ1JFQVRFRCIpLGhlKCkoKSxkZSgxMiwi''@;'; put 'put ''dGQiLDMwKSgxMywiYiIpLFBlKDE0LCJVUERBVEVEIiksaGUoKSgpKCkoKSxkZSgxNSwidGJvZHkiKSxndCgxNixYRnQsOSw1LCJ0ciIsMzEpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDE2KSxFZSgibmdGb3JPZiIsYS5yb2xlTWVtYmVycyl9fWZ1bmN0aW9uIEpGdChjLGwpezEm''@;'; put 'put ''YyYmKGRlKDAsImg1IiksUGUoMSwiTm8gR3JvdXBzIFByZXNlbnQgISIpLGhlKCkpfWZ1bmN0aW9uIFFGdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIiwzMikoMSwidGQiLDMwKSxQZSgyKSxoZSgpLGRlKDMsInRkIiwzMCksUGUoNCksaGUoKSxkZSg1LCJ0ZCIsMzApLFBlKDYpLGhlKCksZGUo''@;'; put 'put ''NywidGQiLDMwKSxQZSg4KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtFZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvZ3JvdXBzLyIrYS5VUklNRU0pLGZlKDIpLENyKGEuTUVNQkVSTkFNRSksZmUoMiksQ3IoYS5FTUFJTCksZmUoMiksQ3IoYS5NRU1CRVJDUkVBVEVE''@;'; put 'put ''KSxmZSgyKSxDcihhLk1FTUJFUlVQREFURUQpfX1mdW5jdGlvbiBlSHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0YWJsZSIsMjgpKDEsInRoZWFkIikoMiwidHIiKSgzLCJ0ZCIsMjkpKDQsImIiKSxQZSg1LCJOQU1FIiksaGUoKSgpLGRlKDYsInRkIiwyOSkoNywiYiIpLFBlKDgsIkVNQUlMIiks''@;'; put 'put ''aGUoKSgpLGRlKDksInRkIiwyOSkoMTAsImIiKSxQZSgxMSwiQ1JFQVRFRCIpLGhlKCkoKSxkZSgxMiwidGQiLDMwKSgxMywiYiIpLFBlKDE0LCJVUERBVEVEIiksaGUoKSgpKCkoKSxkZSgxNSwidGJvZHkiKSxndCgxNixRRnQsOSw1LCJ0ciIsMzEpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9l''@;'; put 'put ''KDIpO2ZlKDE2KSxFZSgibmdGb3JPZiIsYS5yb2xlR3JvdXBzKX19ZnVuY3Rpb24gdEh0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IikoMSwiZGl2IiwyMCkoMiwiZGl2IiwyMSkoMywidGFibGUiLDIyKSg0LCJ0Ym9keSIpKDUsInRyIikoNiwidGQiLDIzKSg3LCJwIiwyNCkoOCwiYiIpLFBl''@;'; put 'put ''KDkpLGhlKCkoKSgpKCksZGUoMTAsInRyIikoMTEsInRkIiwyMykoMTIsImkiKSxQZSgxMyksaGUoKSgpKCkoKSgpKCkoKSxkZSgxNCwiZGl2IiwyMCkoMTUsImRpdiIsMjEpKDE2LCJkaXYiLDI1KSgxNywiZGl2IikoMTgsImgzIiksUGUoMTkpLGhlKCksZ3QoMjAsS0Z0LDIsMCwiaDUiLDYp''@;'; put 'put ''LGRlKDIxLCJkaXYiLDI2KSxndCgyMixxRnQsMTcsMSwidGFibGUiLDI3KSxoZSgpKCksR3QoMjMsImhyIiksZGUoMjQsImRpdiIpKDI1LCJoMyIpLFBlKDI2KSxoZSgpLGd0KDI3LEpGdCwyLDAsImg1Iiw2KSxkZSgyOCwiZGl2IiwyNiksZ3QoMjksZUh0LDE3LDEsInRhYmxlIiwyNyksaGUo''@;'; put 'put ''KSgpLEd0KDMwLCJiciIpLGhlKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDkpLENyKGEucm9sZU5hbWUpLGZlKDQpLENyKGEucm9sZURlc2MpLGZlKDYpLElyKCJNRU1CRVJTICgiLGEucm9sZU1lbWJlcnNDb3VudCwiKSIpLGZlKCksRWUoIm5nSWYiLDA9PWEucm9sZU1lbWJlcnND''@;'; put 'put ''b3VudCksZmUoMiksRWUoIm5nSWYiLDAhPWEucm9sZU1lbWJlcnNDb3VudCksZmUoNCksSXIoIkdyb3VwcyAoIixhLnJvbGVHcm91cHNDb3VudCwiKSIpLGZlKCksRWUoIm5nSWYiLDA9PWEucm9sZUdyb3Vwc0NvdW50KSxmZSgyKSxFZSgibmdJZiIsMCE9YS5yb2xlR3JvdXBzQ291bnQpfX1s''@;'; put 'put ''ZXQgTV9lPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLmhlbHBlclNlcnZpY2U9ZCx0aGlzLnJvdXRlcj1oLHRoaXMubG9jYXRpb249Zix0aGlzLnJvdXRlPXYsdGhpcy5yb2xlU2VhcmNoPSIiLHRoaXMucm9sZVVyaT0iIix0aGlz''@;'; put 'put ''LnJvbGVOYW1lPSIiLHRoaXMucm9sZURlc2M9IiIsdGhpcy5wYXJhbVByZXNlbnQ9ITEsdGhpcy5wYXJhbVVSST0iIix0aGlzLmxvYWRpbmc9ITF9bmdPbkluaXQoKXtYbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0idmlldy91c2VybmF2L3JvbGVzIix2b2lkIDAhPT10aGlzLnJvdXRlLnNu''@;'; put 'put ''YXBzaG90LnBhcmFtcy51cmkmJih0aGlzLnBhcmFtUHJlc2VudD0hMCx0aGlzLnBhcmFtVVJJPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaSksWG4udXNlcm5hdi5yb2xlTGlzdCYmIXRoaXMucGFyYW1QcmVzZW50Pyh0aGlzLnJvbGVzPVhuLnVzZXJuYXYucm9sZUxpc3QsdGhpcy5y''@;'; put 'put ''b2xlU2VhcmNoPVhuLnVzZXJuYXYucm9sZVNlYXJjaCk6dm9pZCAwPT09WG4udXNlcm5hdi5yb2xlTGlzdD8odGhpcy5sb2FkaW5nPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJyb2xlcyIsbnVsbCkudGhlbihhPT57aWYodGhpcy5sb2FkaW5nPSExLHRoaXMucm9s''@;'; put 'put ''ZXM9YS5hZGFwdGVyUmVzcG9uc2Uucm9sZXMsWG4udXNlcm5hdi5yb2xlTGlzdD1hLmFkYXB0ZXJSZXNwb25zZS5yb2xlcyx0aGlzLnBhcmFtUHJlc2VudCYmdm9pZCAwIT09dGhpcy5yb2xlcyl7bGV0IGQ9dGhpcy5maW5kUm9sZSh0aGlzLnJvbGVzLHRoaXMucGFyYW1VUkkpOyExIT09ZCYm''@;'; put 'put ''KHRoaXMubG9hZGluZz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVyc2J5cm9sZSIse2l3YW50Olt7cm9sZWlkOnRoaXMucGFyYW1VUkl9XX0pLnRoZW4oZj0+e3RoaXMubG9hZGluZz0hMSx0aGlzLnJvbGVNZW1iZXJzPWYuYWRhcHRlclJlc3BvbnNlLnNh''@;'; put 'put ''c21lbWJlcnMsdGhpcy5yb2xlTWVtYmVyc0NvdW50PWYuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMubGVuZ3RoLHRoaXMucm9sZUdyb3Vwcz1mLmFkYXB0ZXJSZXNwb25zZS5zYXNncm91cHMsdGhpcy5yb2xlR3JvdXBzQ291bnQ9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzZ3JvdXBzLmxlbmd0''@;'; put 'put ''aCx0aGlzLnJvbGVVcmk9ZC5ST0xFVVJJLHRoaXMucm9sZU5hbWU9ZC5ST0xFTkFNRSx0aGlzLnJvbGVEZXNjPWQuUk9MRURFU0N9KSl9fSkpOih0aGlzLnJvbGVzPVhuLnVzZXJuYXYucm9sZUxpc3QsdGhpcy5yb2xlU2VhcmNoPVhuLnVzZXJuYXYucm9sZVNlYXJjaCx0aGlzLnNhc1NlcnZp''@;'; put 'put ''Y2UucmVxdWVzdCgidXNlcm5hdi91c2Vycm9sZXMiLG51bGwpLnRoZW4oYT0+e2lmKHRoaXMucm9sZXM9YS5hZGFwdGVyUmVzcG9uc2Uucm9sZXMsWG4udXNlcm5hdi5yb2xlTGlzdD1hLmFkYXB0ZXJSZXNwb25zZS5yb2xlcyx0aGlzLnBhcmFtUHJlc2VudCYmdm9pZCAwIT09dGhpcy5yb2xl''@;'; put 'put ''cyl7bGV0IGQ9dGhpcy5maW5kUm9sZSh0aGlzLnJvbGVzLHRoaXMucGFyYW1VUkkpOyExIT09ZCYmKHRoaXMubG9hZGluZz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVyc2J5cm9sZSIse2l3YW50Olt7cm9sZWlkOnRoaXMucGFyYW1VUkl9XX0pLnRoZW4o''@;'; put 'put ''Zj0+e3RoaXMubG9hZGluZz0hMSx0aGlzLnJvbGVNZW1iZXJzPWYuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMsdGhpcy5yb2xlTWVtYmVyc0NvdW50PWYuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMubGVuZ3RoLHRoaXMucm9sZUdyb3Vwcz1mLmFkYXB0ZXJSZXNwb25zZS5zYXNncm91''@;'; put 'put ''cHMsdGhpcy5yb2xlR3JvdXBzQ291bnQ9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzZ3JvdXBzLmxlbmd0aCx0aGlzLnJvbGVVcmk9ZC5ST0xFVVJJLHRoaXMucm9sZU5hbWU9ZC5ST0xFTkFNRSx0aGlzLnJvbGVEZXNjPWQuUk9MRURFU0N9KSl9fSkpfXJvbGVMaXN0T25GaWx0ZXIoKXt0aGlzLmhl''@;'; put 'put ''bHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMucm9sZXMsdGhpcy5yb2xlU2VhcmNoLCJST0xFTkFNRSIpLFhuLnVzZXJuYXYucm9sZVNlYXJjaD10aGlzLnJvbGVTZWFyY2h9cm9sZU9uQ2xpY2soYSl7dGhpcy5sb2FkaW5nPSEwO2xldCBkPXRoaXMucm91dGVyLnVybDt0aGlzLmxv''@;'; put 'put ''Y2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLnBhcmFtUHJlc2VudD9kLnNsaWNlKDAsZC5sYXN0SW5kZXhPZigiLyIpKSsiLyIrZW5jb2RlVVJJKGEuUk9MRVVSSSk6ZCsiLyIrZW5jb2RlVVJJKGEuUk9MRVVSSSkpLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJz''@;'; put 'put ''Ynlyb2xlIix7aXdhbnQ6W3tyb2xlaWQ6YS5ST0xFVVJJfV19KS50aGVuKGY9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy5yb2xlTWVtYmVycz1mLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLHRoaXMucm9sZU1lbWJlcnNDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLmxlbmd0''@;'; put 'put ''aCx0aGlzLnJvbGVHcm91cHM9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzZ3JvdXBzLHRoaXMucm9sZUdyb3Vwc0NvdW50PWYuYWRhcHRlclJlc3BvbnNlLnNhc2dyb3Vwcy5sZW5ndGgsdGhpcy5yb2xlVXJpPWEuUk9MRVVSSSx0aGlzLnJvbGVOYW1lPWEuUk9MRU5BTUUsdGhpcy5yb2xlRGVzYz1h''@;'; put 'put ''LlJPTEVERVNDfSl9ZmluZFJvbGUoYSxkKXtsZXQgaD0hMTtyZXR1cm4gYS5mb3JFYWNoKGY9PntmLlJPTEVVUkk9PT1kJiYoaD1mKX0pLGh9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUoS3MpLHFlKEx1KSxxZShubCkscWUoczIpLHFlKHQw''@;'; put 'put ''KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtcm9sZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sc3RhbmRhbG9uZTohMSxkZWNsczo3LHZhcnM6NCxjb25zdHM6W1sic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWzEsInNp''@;'; put 'put ''ZGViYXItaGVpZ2h0Il0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwibG9hZGluZ1NwaW5uZXIiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNl''@;'; put 'put ''YXJjaC13cmFwcGVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkZpbHRlciBieSBSb2xlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJz''@;'; put 'put ''ZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiYWN0aXZlIiwiY2xpY2siLDQsIm5nSWYiXSxbMywiY2xpY2siXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50''@;'; put 'put ''ZXIiLCJsaXN0LXBhZGRpbmciXSxbInNoYXBlIiwiYmxvY2tzLWdyb3VwIl0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbMSwiY2xyLXJvdyJdLFsxLCJjbHItY29sLTgiXSxbMSwidGFibGUiLCJyb2xlLWluZm8iXSxbMSwibGVmdCJdLFsxLCJyb2xlLWluZm8tdGV4dCJd''@;'; put 'put ''LFsxLCJjYXJkIiwicm9sZS1kYXRhIl0sWzEsInRhYmxlLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJ0YWJsZSBtZW1iZXItdGFibGUiLDQsIm5nSWYiXSxbMSwidGFibGUiLCJtZW1iZXItdGFibGUiXSxbMSwid2lkdGgtMjUiXSxbMSwiIl0sWzMsInJvdXRlckxpbmsiLDQsIm5nRm9yIiwibmdG''@;'; put 'put ''b3JPZiJdLFszLCJyb3V0ZXJMaW5rIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiYXBwLXNpZGViYXIiLDEpKDEsImNsci10cmVlIiksZ3QoMixXRnQsNiwzLCJjbHItdHJlZS1ub2RlIiwyKSgzLEdGdCwyLDEsIm5nLWNvbnRhaW5lciIsMyksaGUoKSgpLGRlKDQsImRp''@;'; put 'put ''diIsNCksZ3QoNSwkRnQsMywwLCJkaXYiLDUpKDYsdEh0LDMxLDgsImRpdiIsNiksaGUoKSksMiZkJiYoZmUoMiksRWUoIm5nSWYiLGgucm9sZXMpLGZlKCksRWUoIm5nRm9yT2YiLGgucm9sZXMpLGZlKDIpLEVlKCJuZ0lmIixoLmxvYWRpbmcpLGZlKCksRWUoIm5nSWYiLGgucm9sZU1lbWJl''@;'; put 'put ''cnMmJiFoLmxvYWRpbmcpKX0sZGVwZW5kZW5jaWVzOltocyxDYSxQMSxuYyxobCxybCx3MixtaCxVbCxNZCxzZyxvZ10sc3R5bGVzOlsiOjpuZy1kZWVwIGJvZHlbY2RzLXRoZW1lPWRhcmtdIC5yb2xle2JhY2tncm91bmQtY29sb3I6IzMxNDM1MTtib3JkZXItY29sb3I6IzMxNDM1MX06Om5n''@;'; put 'put ''LWRlZXAgYm9keVtjZHMtdGhlbWU9ZGFya10gLnJvbGUtZGF0YXtiYWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTE7Ym9yZGVyLWNvbG9yOiMzMTQzNTF9OjpuZy1kZWVwIGJvZHlbY2RzLXRoZW1lPWRhcmtdIC5tZW1iZXItdGFibGUgdGJvZHkgdHI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMjk0''@;'; put 'put ''MDRifTo6bmctZGVlcCBib2R5W2Nkcy10aGVtZT1saWdodF0gLnJvbGUtaW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7Ym9yZGVyLWNvbG9yOiNhN2E3YTc7Ym94LXNoYWRvdzowIDJweCA1cHggI2RhZDdkN306Om5nLWRlZXAgYm9keVtjZHMtdGhlbWU9bGlnaHRdIC5yb2xlLWRhdGF7''@;'; put 'put ''YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O2JvcmRlci1jb2xvcjojYTdhN2E3O2JveC1zaGFkb3c6MCAycHggNXB4ICNkYWQ3ZDd9OjpuZy1kZWVwIGJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAubWVtYmVyLXRhYmxlIHRib2R5IHRyOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2U2ZTZlNn0uc2lk''@;'; put 'put ''ZWJhci1oZWlnaHR7aGVpZ2h0OjEwMCV9LnJvbGUtaW5mby10ZXh0e2Rpc3BsYXk6aW5saW5lO2ZvbnQtc2l6ZToyMHB4fS5yb2xlLWluZm97Ym9yZGVyOjFweCBzb2xpZDtib3JkZXItcmFkaXVzOjNweH0ucm9sZS1pbmZvIHRke3RleHQtYWxpZ246Y2VudGVyfS5yb2xlLWRhdGF7Ym9yZGVy''@;'; put 'put ''OjFweCBzb2xpZDtib3JkZXItcmFkaXVzOjNweH0ucm9sZS1kYXRhe21pbi1oZWlnaHQ6dW5zZXR9LnJvbGUtZGF0YSBoMywucm9sZS1kYXRhIGg1e3RleHQtYWxpZ246Y2VudGVyfS5tZW1iZXItdGFibGV7d2lkdGg6MTAwJX0ubWVtYmVyLXRhYmxlIHRib2R5IHRyOmhvdmVye2N1cnNvcjpw''@;'; put 'put ''b2ludGVyfS50YWJsZS1jb250YWluZXJ7b3ZlcmZsb3cteTpzY3JvbGw7bWF4LWhlaWdodDo3MDBweH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCl7LnJvbGUtZGF0YXttaW4taGVpZ2h0OnVuc2V0IWltcG9ydGFudH19XG4iXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJu''@;'; put 'put ''IGN9KSgpLG5IdD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXVzZXJuYXYtcm91''@;'; put 'put ''dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLHN0YW5kYWxvbmU6ITEsZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJkd0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltRZ10sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBj''@;'; put 'put ''fSkoKSxySHQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31uZ09uRGVzdHJveSgpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPWFyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFw''@;'; put 'put ''cC12aWV3LXJvdXRlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxzdGFuZGFsb25lOiExLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiZHdCgwLCJyb3V0ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbUWddLGVuY2Fwc3VsYXRpb246Mn0p''@;'; put 'put ''fX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gaUh0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMTIpfWZ1bmN0aW9uIGFIdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1pY29uIiwxMyksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMik7cmV0dXJu''@;'; put 'put ''IGgudXNlclNlYXJjaD0iIixDdChoLnVzZXJMaXN0T25GaWx0ZXIoKSl9KSxoZSgpfX1mdW5jdGlvbiBvSHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiw3KSgxLCJkaXYiLDgpKDIsImlucHV0Iiw5LDApLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlv''@;'; put 'put ''bihoKXt3dChhKTtjb25zdCBmPU9lKCk7cmV0dXJuIGZpKGYudXNlclNlYXJjaCxoKXx8KGYudXNlclNlYXJjaD1oKSxDdChoKX0pLE90KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS51c2VyTGlzdE9uRmlsdGVyKCkpfSksaGUoKSxndCg0LGlIdCwxLDAsImNsci1p''@;'; put 'put ''Y29uIiwxMCkoNSxhSHQsMSwwLCJjbHItaWNvbiIsMTEpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9ZmEoMyksZD1PZSgpO2ZlKDIpLGxpKCJuZ01vZGVsIixkLnVzZXJTZWFyY2gpLGZlKDIpLEVlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLEVlKCJuZ0lmIixhLnZhbHVlLmxlbmd0''@;'; put 'put ''aD4wKX19ZnVuY3Rpb24gc0h0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMTUpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCkuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLnVzZXJPbkNsaWNrKGgpKX0pLGRlKDEsInAiLDE2''@;'; put 'put ''KSxHdCgyLCJjbHItaWNvbiIsMTcpLFBlKDMpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQsZD1PZSgpO3hyKCJhY3RpdmUiLChudWxsPT1kLnVzZXJJbmZvP251bGw6ZC51c2VySW5mby5VUkkpPT09YS5VUkkpLGZlKDMpLElyKCIgIixhLk5BTUUsIiAiKX19ZnVuY3Rp''@;'; put 'put ''b24gbEh0KGMsbCl7aWYoMSZjJiYob2koMCksZ3QoMSxzSHQsNCwzLCJjbHItdHJlZS1ub2RlIiwxNCksc2koKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksRWUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIGNIdChjLGwpezEmYyYmKGRlKDAsImRpdiIsMTgpKDEsInNwYW4i''@;'; put 'put ''LDE5KSxQZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpKCkpfWZ1bmN0aW9uIHVIdChjLGwpe2lmKDEmYyYmKG9pKDApLGRlKDEsInRyIikoMiwidGQiLDI3KSxQZSgzLCIgTWV0YWRhdGEgQ3JlYXRlZDogIiksZGUoNCwiYiIpLFBlKDUpLGhlKCkoKSgpLGRlKDYsInRyIikoNywidGQiLDI3KSxQ''@;'; put 'put ''ZSg4LCIgTWV0YWRhdGEgVXBkYXRlZDogIiksZGUoOSwiYiIpLFBlKDEwKSxoZSgpKCkoKSxzaSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoNSksQ3IoYS51c2VySW5mby5NRVRBREFUQUNSRUFURUQpLGZlKDUpLENyKGEudXNlckluZm8uTUVUQURBVEFVUERBVEVEKX19ZnVuY3Rpb24gZEh0''@;'; put 'put ''KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyMSkoMSwiZGl2IiwyMikoMiwidGFibGUiLDI2KSgzLCJ0Ym9keSIpKDQsInRyIikoNSwidGQiLDI3KSg2LCJwIiwyOCkoNywiYiIpLFBlKDgpLGhlKCkoKSgpKCksZGUoOSwidHIiKSgxMCwidGQiLDI3KSgxMSwicCIsMjgpKDEyLCJiIiksUGUo''@;'; put 'put ''MTMpLGhlKCkoKSgpKCksZ3QoMTQsdUh0LDExLDIsIm5nLWNvbnRhaW5lciIsNiksaGUoKSgpKCkoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDgpLENyKGEudXNlckluZm8uTkFNRSksZmUoNSksQ3IoYS51c2VySW5mby5ESVNQTEFZTkFNRSksZmUoKSxFZSgibmdJZiIsYS5zZXJ2ZXJUeXBl''@;'; put 'put ''PT09YS5TZXJ2ZXJUeXBlLlNhczkpfX1mdW5jdGlvbiBoSHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDIxKSgxLCJkaXYiLDIyKSgyLCJ0YWJsZSIsMjYpKDMsInRib2R5IikoNCwidHIiKSg1LCJ0ZCIsMjcpKDYsInAiLDI4KSg3LCJiIiksUGUoOCksaGUoKSgpKCkoKSxkZSg5LCJ0ciIp''@;'; put 'put ''KDEwLCJ0ZCIsMjcpLFBlKDExLCIgVXNlciBJRDogIiksZGUoMTIsImIiKSxQZSgxMyksaGUoKSgpKCksZGUoMTQsInRyIikoMTUsInRkIiwyNyksUGUoMTYsIiBVc2VyIHByb3ZpZGVyIElEOiAiKSxkZSgxNywiYiIpLFBlKDE4KSxoZSgpKCkoKSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9T2Uo''@;'; put 'put ''Mik7ZmUoOCksQ3IoYS51c2VySW5mby5OQU1FKSxmZSg1KSxDcihhLnVzZXJJbmZvLlVSSSksZmUoNSksQ3IoYS51c2VySW5mby5QUk9WSURFUil9fWZ1bmN0aW9uIGZIdChjLGwpezEmYyYmKGRlKDAsImg1IiksUGUoMSwiTm8gRW1haWxzIFByZXNlbnQiKSxoZSgpKX1mdW5jdGlvbiBwSHQo''@;'; put 'put ''YyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwzMSksUGUoMiksaGUoKSxkZSgzLCJ0ZCIsMzEpLFBlKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLENyKGEuRU1BSUwpLGZlKDIpLENyKGEuVFlQRSl9fWZ1bmN0aW9uIGdIdChjLGwpe2lmKDEmYyYmKGRl''@;'; put 'put ''KDAsInRhYmxlIiwyOSkoMSwidGhlYWQiKSgyLCJ0ciIpKDMsInRkIiwzMCkoNCwiYiIpLFBlKDUsIkVNQUlMIiksaGUoKSgpLGRlKDYsInRkIiwzMSkoNywiYiIpLFBlKDgsIlRZUEUiKSxoZSgpKCkoKSgpLGRlKDksInRib2R5IiksZ3QoMTAscEh0LDUsMiwidHIiLDMpLGhlKCkoKSksMiZj''@;'; put 'put ''KXtjb25zdCBhPU9lKDMpO2ZlKDEwKSxFZSgibmdGb3JPZiIsYS51c2VyRW1haWxzKX19ZnVuY3Rpb24gbUh0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxQZSgyKSxoZSgpLGd0KDMsZkh0LDIsMCwiaDUiLDYpLGRlKDQsImRpdiIsMjQpLGd0KDUsZ0h0LDExLDEsInRhYmxl''@;'; put 'put ''IiwyNSksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoMiksSXIoIkVNQUlMUyAoIixhLnVzZXJFbWFpbHNDb3VudHx8IjAiLCIpIiksZmUoKSxFZSgibmdJZiIsMD09YS51c2VyRW1haWxzQ291bnQpLGZlKDIpLEVlKCJuZ0lmIiwwIT1hLnVzZXJFbWFpbHNDb3VudCl9fWZ1bmN0aW9u''@;'; put 'put ''IHZIdChjLGwpezEmYyYmR3QoMCwiaHIiKX1mdW5jdGlvbiB5SHQoYyxsKXsxJmMmJihkZSgwLCJoNSIpLFBlKDEsIk5vIEdyb3VwcyBQcmVzZW50IiksaGUoKSl9ZnVuY3Rpb24gYkh0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGQiLDMzKSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKS4k''@;'; put 'put ''aW1wbGljaXQ7RWUoInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2L2dyb3Vwcy8iK2EuVVJJKSxmZSgpLElyKCIgIixhLkdST1VQTkFNRSwiICIpfX1mdW5jdGlvbiBfSHQoYyxsKXtpZigxJmMmJihvaSgwKSxkZSgxLCJ0ZCIsMzMpLFBlKDIpLGhlKCksc2koKSksMiZjKXtjb25zdCBhPU9l''@;'; put 'put ''KCkuJGltcGxpY2l0O2ZlKCksRWUoInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2L2dyb3Vwcy8iKyhhLkdST1VQVVJJfHxhLlVSSSkpLGZlKCksSXIoIiAiLGEuR1JPVVBOQU1FLCIgIil9fWZ1bmN0aW9uIHdIdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIiksZ3QoMSxiSHQsMiwyLCJ0ZCIs''@;'; put 'put ''MzIpKDIsX0h0LDMsMiwibmctY29udGFpbmVyIiw2KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoKSxFZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLGZlKCksRWUoIm5nSWYiLGEuc2VydmVyVHlwZSE9PWEuU2VydmVyVHlwZS5TYXNWaXlhKX19ZnVu''@;'; put 'put ''Y3Rpb24gQ0h0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGFibGUiLDI5KSgxLCJ0Ym9keSIpLGd0KDIsd0h0LDMsMiwidHIiLDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDIpLEVlKCJuZ0Zvck9mIixhLnVzZXJHcm91cHMpfX1mdW5jdGlvbiBTSHQoYyxsKXsxJmMmJkd0KDAsImhy''@;'; put 'put ''Iil9ZnVuY3Rpb24gTUh0KGMsbCl7MSZjJiYoZGUoMCwiaDUiKSxQZSgxLCJObyBSb2xlcyBQcmVzZW50IiksaGUoKSl9ZnVuY3Rpb24geEh0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsMzQpLFBlKDIpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9T2UoNCk7''@;'; put 'put ''ZmUoKSxFZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvcm9sZXMvIitkLmdldFJvbGVVUkkoYS5ST0xFVVJJKSksZmUoKSxJcigiICIsYS5ST0xFTkFNRSwiICIpfX1mdW5jdGlvbiBFSHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0YWJsZSIsMjkpKDEsInRib2R5IiksZ3QoMix4SHQsMywy''@;'; put 'put ''LCJ0ciIsMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoMiksRWUoIm5nRm9yT2YiLGEudXNlclJvbGVzKX19ZnVuY3Rpb24gVEh0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxQZSgyKSxoZSgpLGd0KDMsTUh0LDIsMCwiaDUiLDYpLGRlKDQsImRpdiIsMjQpLGd0''@;'; put 'put ''KDUsRUh0LDMsMSwidGFibGUiLDI1KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgyKSxJcigiUk9MRVMgKCIsYS51c2VyUm9sZXNDb3VudHx8IjAiLCIpIiksZmUoKSxFZSgibmdJZiIsMD09YS51c2VyUm9sZXNDb3VudCksZmUoMiksRWUoIm5nSWYiLDAhPWEudXNlclJvbGVzQ291''@;'; put 'put ''bnQpfX1mdW5jdGlvbiBBSHQoYyxsKXsxJmMmJkd0KDAsImhyIil9ZnVuY3Rpb24ga0h0KGMsbCl7MSZjJiYoZGUoMCwiaDUiKSxQZSgxLCJObyBMb2dpbnMgUHJlc2VudCIpLGhlKCkpfWZ1bmN0aW9uIERIdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDMxKSxQZSgyKSxoZSgp''@;'; put 'put ''LGRlKDMsInRkIiwzMSksUGUoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMiksQ3IoYS5ET01BSU4pLGZlKDIpLENyKGEuVVNFUklEKX19ZnVuY3Rpb24gSUh0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGFibGUiLDI5KSgxLCJ0aGVhZCIpKDIsInRyIikoMywidGQiLDMw''@;'; put 'put ''KSg0LCJiIiksUGUoNSwiRE9NQUlOIiksaGUoKSgpLGRlKDYsInRkIikoNywiYiIpLFBlKDgsIlVTRVIgSUQiKSxoZSgpKCkoKSgpLGRlKDksInRib2R5IiksZ3QoMTAsREh0LDUsMiwidHIiLDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKDEwKSxFZSgibmdGb3JPZiIsYS51c2Vy''@;'; put 'put ''TG9naW5zKX19ZnVuY3Rpb24gUkh0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxQZSgyKSxoZSgpLGd0KDMsa0h0LDIsMCwiaDUiLDYpLGRlKDQsImRpdiIsMjQpLGd0KDUsSUh0LDExLDEsInRhYmxlIiwyNSksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoMiksSXIo''@;'; put 'put ''IkxPR0lOUyAoIixhLnVzZXJMb2dpbnNDb3VudHx8IjAiLCIpIiksZmUoKSxFZSgibmdJZiIsMD09YS51c2VyTG9naW5zQ291bnQpLGZlKDIpLEVlKCJuZ0lmIiwwIT1hLnVzZXJMb2dpbnNDb3VudCl9fWZ1bmN0aW9uIExIdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpLGd0KDEsZEh0LDE1''@;'; put 'put ''LDMsImRpdiIsMjApKDIsaEh0LDE5LDMsImRpdiIsMjApLGRlKDMsImRpdiIsMjEpKDQsImRpdiIsMjIpKDUsImRpdiIsMjMpLGd0KDYsbUh0LDYsMywiZGl2Iiw2KSg3LHZIdCwxLDAsImhyIiw2KSxkZSg4LCJkaXYiKSg5LCJoMyIpLFBlKDEwKSxoZSgpLGd0KDExLHlIdCwyLDAsImg1Iiw2''@;'; put 'put ''KSxkZSgxMiwiZGl2IiwyNCksZ3QoMTMsQ0h0LDMsMSwidGFibGUiLDI1KSxoZSgpKCksZ3QoMTQsU0h0LDEsMCwiaHIiLDYpKDE1LFRIdCw2LDMsImRpdiIsNikoMTYsQUh0LDEsMCwiaHIiLDYpKDE3LFJIdCw2LDMsImRpdiIsNiksR3QoMTgsImJyIiksaGUoKSgpKCkoKSksMiZjKXtjb25z''@;'; put 'put ''dCBhPU9lKCk7ZmUoKSxFZSgibmdJZiIsYS5zZXJ2ZXJUeXBlIT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLGZlKCksRWUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNWaXlhJiZhLnVzZXJJbmZvKSxmZSg0KSxFZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJU''@;'; put 'put ''eXBlLlNhczkpLGZlKCksRWUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KSxmZSgzKSxJcigiR1JPVVBTICgiLGEudXNlckdyb3Vwc0NvdW50fHwiMCIsIikiKSxmZSgpLEVlKCJuZ0lmIiwwPT1hLnVzZXJHcm91cHNDb3VudCksZmUoMiksRWUoIm5nSWYiLDAhPWEu''@;'; put 'put ''dXNlckdyb3Vwc0NvdW50KSxmZSgpLEVlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSksZmUoKSxFZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpLGZlKCksRWUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KSxm''@;'; put 'put ''ZSgpLEVlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSl9fWxldCB4X2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuaGVscGVyU2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMucm91dGU9aCx0aGlzLmxvY2F0aW9uPWYsdGhp''@;'; put 'put ''cy5yb3V0ZXI9dix0aGlzLmxvYWRpbmc9ITEsdGhpcy51c2VyU2VhcmNoPSIiLHRoaXMucGFyYW1QcmVzZW50PSExLHRoaXMucGFyYW1OYW1lPSIiLHRoaXMuc2FzanNDb25maWc9bmV3IGQyLlNBU2pzQ29uZmlnLHRoaXMuaXNWaXlhPSExLHRoaXMuc2VydmVyVHlwZT0iIix0aGlzLlNlcnZl''@;'; put 'put ''clR5cGU9bDEuWSx0aGlzLnNlcnZlclR5cGU9dGhpcy5zYXNTZXJ2aWNlLmdldFNlcnZlclR5cGUoKSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLCJTQVNWSVlBIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSYmKHRoaXMuaXNWaXlhPSEw''@;'; put 'put ''KX1uZ09uSW5pdCgpe2lmKFhuLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L3VzZXJuYXYvdXNlcnMiLHZvaWQgMCE9PXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaSYmKHRoaXMucGFyYW1QcmVzZW50PSEwLHRoaXMucGFyYW1OYW1lPXRoaXMucm91dGUuc25hcHNob3QucGFy''@;'; put 'put ''YW1zLnVyaSksWG4udXNlcm5hdi51c2VyTGlzdCYmIXRoaXMucGFyYW1QcmVzZW50KXRoaXMudXNlcnM9WG4udXNlcm5hdi51c2VyTGlzdCx0aGlzLnVzZXJTZWFyY2g9WG4udXNlcm5hdi51c2VyU2VhcmNoO2Vsc2UgaWYodm9pZCAwPT09WG4udXNlcm5hdi51c2VyTGlzdD8odGhpcy5sb2Fk''@;'; put 'put ''aW5nPSEwLHRoaXMuaXNWaXlhP2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy91c2Vycz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGE9PmEudGV4dCgpKS50aGVuKGE9PntsZXQgaD1KU09OLnBhcnNl''@;'; put 'put ''KGEpLml0ZW1zLm1hcChmPT4oe05BTUU6Zi5uYW1lLFVSSTpmLmlkLFBST1ZJREVSOmYucHJvdmlkZXJJZH0pKTt0aGlzLmxvYWRpbmc9ITEsdGhpcy51c2Vycz1oLFhuLnVzZXJuYXYudXNlckxpc3Q9aH0pOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJzIixu''@;'; put 'put ''dWxsKS50aGVuKGE9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy51c2Vycz1hLmFkYXB0ZXJSZXNwb25zZS51c2VycyxYbi51c2VybmF2LnVzZXJMaXN0PWEuYWRhcHRlclJlc3BvbnNlLnVzZXJzfSkpOih0aGlzLnVzZXJzPVhuLnVzZXJuYXYudXNlckxpc3QsdGhpcy51c2VyU2VhcmNoPVhuLnVz''@;'; put 'put ''ZXJuYXYudXNlclNlYXJjaCksdGhpcy5wYXJhbVByZXNlbnQpaWYodGhpcy5sb2FkaW5nPSEwLHRoaXMuaXNWaXlhKXtsZXQgYT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmk7ZmV0Y2godGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL3VzZXJzLyIrYSsiL21l''@;'; put 'put ''bWJlcnNoaXBzP2xpbWl0PTIwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4oZD0+ZC50ZXh0KCkpLnRoZW4oZD0+e2xldCBoPUpTT04ucGFyc2UoZCk7dGhpcy51c2VyRGF0YT1oLHRoaXMubG9hZGluZz0hMTtsZXQgZj1oLml0ZW1zLm1hcCh2PT4oe0dS''@;'; put 'put ''T1VQTkFNRTp2Lm5hbWUsVVJJOnYuaWR9KSk7dGhpcy51c2VyR3JvdXBzPWYsdGhpcy51c2VyR3JvdXBzQ291bnQ9Zi5sZW5ndGgsdGhpcy51c2VycyYmKHRoaXMudXNlckluZm89dGhpcy51c2Vycy5maW5kKHY9PnYuVVJJPT09YSkpfSl9ZWxzZXtjb25zdCBhPXRoaXMucm91dGUuc25hcHNo''@;'; put 'put ''b3QucGFyYW1zLnVyaTt0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VyZ3JvdXBzYnltZW1iZXIiLHtpd2FudDpbe3VyaTphfV19KS50aGVuKGg9Pntzd2l0Y2godGhpcy5sb2FkaW5nPSExLHRoaXMuc2VydmVyVHlwZSl7Y2FzZSBsMS5ZLlNhczk6dGhpcy51c2VySW5mbz1o''@;'; put 'put ''LmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLHRoaXMudXNlckVtYWlscz1oLmFkYXB0ZXJSZXNwb25zZS5lbWFpbHMsdGhpcy51c2VyRW1haWxzQ291bnQ9aC5hZGFwdGVyUmVzcG9uc2UuZW1haWxzLmxlbmd0aCx0aGlzLnVzZXJSb2xlcz1oLmFkYXB0ZXJSZXNwb25zZS5yb2xlcyx0aGlzLnVz''@;'; put 'put ''ZXJSb2xlc0NvdW50PWguYWRhcHRlclJlc3BvbnNlLnJvbGVzLmxlbmd0aCx0aGlzLnVzZXJMb2dpbnM9aC5hZGFwdGVyUmVzcG9uc2UubG9naW5zLHRoaXMudXNlckxvZ2luc0NvdW50PWguYWRhcHRlclJlc3BvbnNlLmxvZ2lucy5sZW5ndGg7YnJlYWs7Y2FzZSBsMS5ZLlNhc2pzOmlmKHRo''@;'; put 'put ''aXMudXNlcnMpdGhpcy51c2VySW5mbz10aGlzLnVzZXJzLmZpbmQoZj0+Zi5VUkk9PT1hKTtlbHNle2NvbnN0IGY9aC5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBzWzBdO3RoaXMudXNlckluZm89e1VSSTpmLklELE5BTUU6Zi5OQU1FLERJU1BMQVlOQU1FOmYuTkFNRX19fXRoaXMudXNlckRhdGE9''@;'; put 'put ''aC5hZGFwdGVyUmVzcG9uc2UsdGhpcy51c2VyR3JvdXBzPWguYWRhcHRlclJlc3BvbnNlLmdyb3Vwcyx0aGlzLnVzZXJHcm91cHNDb3VudD1oLmFkYXB0ZXJSZXNwb25zZS5ncm91cHMubGVuZ3RofSl9fXVzZXJMaXN0T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmls''@;'; put 'put ''dGVyKHRoaXMudXNlcnMsdGhpcy51c2VyU2VhcmNoLCJOQU1FIiksWG4udXNlcm5hdi51c2VyU2VhcmNoPXRoaXMudXNlclNlYXJjaH11c2VyT25DbGljayhhKXt0aGlzLmxvYWRpbmc9ITA7bGV0IGQ9dGhpcy5yb3V0ZXIudXJsO3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMucGFy''@;'; put 'put ''YW1QcmVzZW50P2Quc2xpY2UoMCxkLmxhc3RJbmRleE9mKCIvIikpKyIvIitlbmNvZGVVUkkoYS5VUkkpOmQrIi8iK2VuY29kZVVSSShhLlVSSSkpLHRoaXMuaXNWaXlhP2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy91c2Vycy8iK2EuVVJJKyIvbWVtYmVy''@;'; put 'put ''c2hpcHM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihoPT5oLnRleHQoKSkudGhlbihoPT57bGV0IGY9SlNPTi5wYXJzZShoKTt0aGlzLnVzZXJEYXRhPWYsdGhpcy5sb2FkaW5nPSExO2xldCB2PWYuaXRlbXMubWFwKE09Pih7R1JPVVBO''@;'; put 'put ''QU1FOk0ubmFtZSxVUkk6TS5pZH0pKTt0aGlzLnVzZXJHcm91cHM9dix0aGlzLnVzZXJHcm91cHNDb3VudD12Lmxlbmd0aCx0aGlzLnVzZXJzJiYodGhpcy51c2VySW5mbz10aGlzLnVzZXJzLmZpbmQoTT0+TS5VUkk9PT1hLlVSSSkpfSk6dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJu''@;'; put 'put ''YXYvdXNlcmdyb3Vwc2J5bWVtYmVyIix7aXdhbnQ6W3t1cmk6YS5VUkl9XX0pLnRoZW4oZj0+e3N3aXRjaCh0aGlzLmxvYWRpbmc9ITEsdGhpcy5zZXJ2ZXJUeXBlKXtjYXNlIGwxLlkuU2FzOTp0aGlzLnVzZXJJbmZvPWYuYWRhcHRlclJlc3BvbnNlLmluZm9bMF0sdGhpcy51c2VyRW1haWxz''@;'; put 'put ''PWYuYWRhcHRlclJlc3BvbnNlLmVtYWlscyx0aGlzLnVzZXJFbWFpbHNDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5lbWFpbHMubGVuZ3RoLHRoaXMudXNlclJvbGVzPWYuYWRhcHRlclJlc3BvbnNlLnJvbGVzLHRoaXMudXNlclJvbGVzQ291bnQ9Zi5hZGFwdGVyUmVzcG9uc2Uucm9sZXMubGVu''@;'; put 'put ''Z3RoLHRoaXMudXNlckxvZ2lucz1mLmFkYXB0ZXJSZXNwb25zZS5sb2dpbnMsdGhpcy51c2VyTG9naW5zQ291bnQ9Zi5hZGFwdGVyUmVzcG9uc2UubG9naW5zLmxlbmd0aDticmVhaztjYXNlIGwxLlkuU2FzanM6aWYodGhpcy51c2Vycyl0aGlzLnVzZXJJbmZvPXRoaXMudXNlcnMuZmluZCh2''@;'; put 'put ''PT52LlVSST09PWEuVVJJKTtlbHNle2NvbnN0IHY9Zi5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBzWzBdO3RoaXMudXNlckluZm89e1VSSTp2LklELE5BTUU6di5OQU1FLERJU1BMQVlOQU1FOnYuTkFNRX19fXRoaXMudXNlckRhdGE9Zi5hZGFwdGVyUmVzcG9uc2UsdGhpcy51c2VyR3JvdXBzPWYu''@;'; put 'put ''YWRhcHRlclJlc3BvbnNlLmdyb3Vwcyx0aGlzLnVzZXJHcm91cHNDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5ncm91cHMubGVuZ3RofSl9Z2V0Um9sZVVSSShhKXtyZXR1cm4gYS5zcGxpdCgiT01TT0JKOklkZW50aXR5R3JvdXAiKVsxXS5zbGljZSgxKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9''@;'; put 'put ''ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShMdSkscWUoS3MpLHFlKHQwKSxxZShzMikscWUobmwpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPWFyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC11c2VyIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxzdGFuZGFs''@;'; put 'put ''b25lOiExLGRlY2xzOjcsdmFyczo0LGNvbnN0czpbWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbMSwic2lkZWJhci1oZWlnaHQiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJsb2Fk''@;'; put 'put ''aW5nU3Bpbm5lciIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiRmlsdGVyIGJ5IFVzZXJzIiwibmFtZSIsImlucHV0IiwiYXV0b2Nv''@;'; put 'put ''bXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFsz''@;'; put 'put ''LCJhY3RpdmUiLCJjbGljayIsNCwibmdJZiJdLFszLCJjbGljayJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsImxpc3QtcGFkZGluZyJdLFsic2hhcGUiLCJ1c2VyIl0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbImNsYXNzIiwiY2xyLXJvdyIsNCwibmdJZiJdLFsx''@;'; put 'put ''LCJjbHItcm93Il0sWzEsImNsci1jb2wtOCJdLFsxLCJjYXJkIiwidXNlci1kYXRhIl0sWzEsInRhYmxlLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJ0YWJsZSB1c2VyLXRhYmxlIiw0LCJuZ0lmIl0sWzEsInRhYmxlIiwidXNlci1pbmZvIl0sWzEsImxlZnQiXSxbMSwidXNlci1pbmZvLXRleHQi''@;'; put 'put ''XSxbMSwidGFibGUiLCJ1c2VyLXRhYmxlIl0sWzEsIndpZHRoLTUwIl0sWzEsIiJdLFsicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsImNsYXNzIiwiIiwzLCJyb3V0ZXJMaW5rIiw0LCJuZ0lmIl0sWyJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiwxLCIiLDMsInJvdXRlckxpbmsiXSxb''@;'; put 'put ''Mywicm91dGVyTGluayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImFwcC1zaWRlYmFyIiwxKSgxLCJjbHItdHJlZSIpLGd0KDIsb0h0LDYsMywiY2xyLXRyZWUtbm9kZSIsMikoMyxsSHQsMiwxLCJuZy1jb250YWluZXIiLDMpLGhlKCkoKSxkZSg0LCJkaXYiLDQpLGd0''@;'; put 'put ''KDUsY0h0LDMsMCwiZGl2Iiw1KSg2LExIdCwxOSwxMSwiZGl2Iiw2KSxoZSgpKSwyJmQmJihmZSgyKSxFZSgibmdJZiIsaC51c2VycyksZmUoKSxFZSgibmdGb3JPZiIsaC51c2VycyksZmUoMiksRWUoIm5nSWYiLGgubG9hZGluZyksZmUoKSxFZSgibmdJZiIsaC51c2VyRGF0YSYmIWgubG9h''@;'; put 'put ''ZGluZykpfSxkZXBlbmRlbmNpZXM6W2hzLENhLFAxLEpfLG5jLGhsLHJsLHcyLG1oLFVsLE1kLHNnLG9nXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IE9IdD1jPT5bInNlZ21lbnQiLGNdLFBIdD0oYyxsKT0+KHsic2VnbWVudC1tYWluIjohMCxleHBhbmRhYmxlOmMs''@;'; put 'put ''ZXhwYW5kZWQ6bH0pO2Z1bmN0aW9uIEZIdChjLGwpezEmYyYmR3QoMCwiZGl2Iiw5KX1mdW5jdGlvbiBISHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJzcGFuIiwxMCksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKS4kaW1wbGljaXQ7cmV0dXJuIEN0''@;'; put 'put ''KE9lKCkub25WYWx1ZUNsaWNrKGgpKX0pLFBlKDEpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O2ZlKCksQ3IoYS5kZXNjcmlwdGlvbil9fWZ1bmN0aW9uIE5IdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsInNlY3Rpb24iLDExKSgxLCJuZ3gtanNvbi12aWV3''@;'; put 'put ''ZXIiLDEyKSxPdCgic2VnbWVudExpbmtDbGlja2VkIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikub25TZWdtZW50TGlua0NsaWNrKGgpKX0pLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQsZD1PZSgpO2ZlKCksRWUoImpzb24iLGEudmFsdWUpKCJleHBh''@;'; put 'put ''bmRlZCIsZC5leHBhbmRlZCkoImRlcHRoIixkLmRlcHRoKSgiX2N1cnJlbnREZXB0aCIsZC5fY3VycmVudERlcHRoKzEpfX1mdW5jdGlvbiBWSHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJzZWN0aW9uIiwyKSgxLCJzZWN0aW9uIiwzKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7''@;'; put 'put ''Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkudG9nZ2xlKGgpKX0pLGd0KDIsRkh0LDEsMCwiZGl2Iiw0KSxkZSgzLCJzcGFuIiw1KSxQZSg0KSxoZSgpLGRlKDUsInNwYW4iLDYpLFBlKDYsIjogIiksaGUoKSxndCg3LEhIdCwyLDEsInNwYW4iLDcpLGhlKCksZ3QoOCxO''@;'; put 'put ''SHQsMiw0LCJzZWN0aW9uIiw4KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPU9lKCk7RWUoIm5nQ2xhc3MiLGE0KDYsT0h0LCJzZWdtZW50LXR5cGUtIithLnR5cGUpKSxmZSgpLEVlKCJuZ0NsYXNzIixvNCg4LFBIdCxkLmlzRXhwYW5kYWJsZShhKSxhLmV4cGFuZGVkKSks''@;'; put 'put ''ZmUoKSxFZSgibmdJZiIsZC5pc0V4cGFuZGFibGUoYSkpLGZlKDIpLENyKGEua2V5KSxmZSgzKSxFZSgibmdJZiIsIWEuZXhwYW5kZWR8fCFkLmlzRXhwYW5kYWJsZShhKSksZmUoKSxFZSgibmdJZiIsYS5leHBhbmRlZCYmZC5pc0V4cGFuZGFibGUoYSkpfX1sZXQgQkh0PSgoKT0+e2NsYXNz''@;'; put 'put ''IGN7Y29uc3RydWN0b3IoKXt0aGlzLmV4cGFuZGVkPSEwLHRoaXMuZGVwdGg9LTEsdGhpcy5fY3VycmVudERlcHRoPTAsdGhpcy5zZWdtZW50TGlua0NsaWNrZWQ9bmV3IFhyLHRoaXMuc2VnbWVudHM9W119bmdPbkNoYW5nZXMoKXt0aGlzLnNlZ21lbnRzPVtdLHRoaXMuanNvbj10aGlzLmRl''@;'; put 'put ''Y3ljbGUodGhpcy5qc29uKSwib2JqZWN0Ij09dHlwZW9mIHRoaXMuanNvbj9PYmplY3Qua2V5cyh0aGlzLmpzb24pLmZvckVhY2goYT0+e3RoaXMuc2VnbWVudHMucHVzaCh0aGlzLnBhcnNlS2V5VmFsdWUoYSx0aGlzLmpzb25bYV0pKX0pOnRoaXMuc2VnbWVudHMucHVzaCh0aGlzLnBhcnNl''@;'; put 'put ''S2V5VmFsdWUoYCgke3R5cGVvZiB0aGlzLmpzb259KWAsdGhpcy5qc29uKSl9aXNFeHBhbmRhYmxlKGEpe3JldHVybiJvYmplY3QiPT09YS50eXBlfHwiYXJyYXkiPT09YS50eXBlfXRvZ2dsZShhKXt0aGlzLmlzRXhwYW5kYWJsZShhKSYmKGEuZXhwYW5kZWQ9IWEuZXhwYW5kZWQpfW9uVmFs''@;'; put 'put ''dWVDbGljayhhKXsibGluayI9PT1hLnR5cGUmJnRoaXMuc2VnbWVudExpbmtDbGlja2VkLmVtaXQoYS52YWx1ZSl9b25TZWdtZW50TGlua0NsaWNrKGEpe3RoaXMuc2VnbWVudExpbmtDbGlja2VkLmVtaXQoYSl9cGFyc2VLZXlWYWx1ZShhLGQpe2NvbnN0IGg9e2tleTphLHZhbHVlOmQsdHlw''@;'; put 'put ''ZTp2b2lkIDAsZGVzY3JpcHRpb246IiIrZCxleHBhbmRlZDp0aGlzLmlzRXhwYW5kZWQoKX07c3dpdGNoKHR5cGVvZiBoLnZhbHVlKXtjYXNlIm51bWJlciI6aC50eXBlPSJudW1iZXIiO2JyZWFrO2Nhc2UiYm9vbGVhbiI6aC50eXBlPSJib29sZWFuIjticmVhaztjYXNlImZ1bmN0aW9uIjpo''@;'; put 'put ''LnR5cGU9ImZ1bmN0aW9uIjticmVhaztjYXNlInN0cmluZyI6aWYodGhpcy5pc0xpbmsoaC52YWx1ZSkpe2gudHlwZT0ibGluayI7YnJlYWt9aC50eXBlPSJzdHJpbmciLGguZGVzY3JpcHRpb249JyInK2gudmFsdWUrJyInO2JyZWFrO2Nhc2UidW5kZWZpbmVkIjpoLnR5cGU9InVuZGVmaW5l''@;'; put 'put ''ZCIsaC5kZXNjcmlwdGlvbj0idW5kZWZpbmVkIjticmVhaztjYXNlIm9iamVjdCI6bnVsbD09PWgudmFsdWU/KGgudHlwZT0ibnVsbCIsaC5kZXNjcmlwdGlvbj0ibnVsbCIpOkFycmF5LmlzQXJyYXkoaC52YWx1ZSk/KGgudHlwZT0iYXJyYXkiLGguZGVzY3JpcHRpb249IkFycmF5WyIraC52''@;'; put 'put ''YWx1ZS5sZW5ndGgrIl0gIitKU09OLnN0cmluZ2lmeShoLnZhbHVlKSk6aC52YWx1ZSBpbnN0YW5jZW9mIERhdGU/aC50eXBlPSJkYXRlIjooaC50eXBlPSJvYmplY3QiLGguZGVzY3JpcHRpb249Ik9iamVjdCAiK0pTT04uc3RyaW5naWZ5KGgudmFsdWUpKX1yZXR1cm4gaH1pc0xpbmsoYSl7''@;'; put 'put ''cmV0dXJuImh0dHBzOi8vIj09PWEuc3Vic3RyaW5nKDAsOCl8fCJodHRwOi8vIj09PWEuc3Vic3RyaW5nKDAsNyl8fCIvIj09PWFbMF19aXNFeHBhbmRlZCgpe3JldHVybiB0aGlzLmV4cGFuZGVkJiYhKHRoaXMuZGVwdGg+LTEmJnRoaXMuX2N1cnJlbnREZXB0aD49dGhpcy5kZXB0aCl9ZGVj''@;'; put 'put ''eWNsZShhKXtjb25zdCBkPW5ldyBXZWFrTWFwO3JldHVybiBmdW5jdGlvbiBoKGYsdil7bGV0IE0sRDtyZXR1cm4ib2JqZWN0IiE9dHlwZW9mIGZ8fG51bGw9PT1mfHxmIGluc3RhbmNlb2YgQm9vbGVhbnx8ZiBpbnN0YW5jZW9mIERhdGV8fGYgaW5zdGFuY2VvZiBOdW1iZXJ8fGYgaW5zdGFu''@;'; put 'put ''Y2VvZiBSZWdFeHB8fGYgaW5zdGFuY2VvZiBTdHJpbmc/ZjooTT1kLmdldChmKSx2b2lkIDAhPT1NP3skcmVmOk19OihkLnNldChmLHYpLEFycmF5LmlzQXJyYXkoZik/KEQ9W10sZi5mb3JFYWNoKGZ1bmN0aW9uKFUsdGUpe0RbdGVdPWgoVSx2KyJbIit0ZSsiXSIpfSkpOihEPXt9LE9iamVj''@;'; put 'put ''dC5rZXlzKGYpLmZvckVhY2goZnVuY3Rpb24oVSl7RFtVXT1oKGZbVV0sdisiWyIrSlNPTi5zdHJpbmdpZnkoVSkrIl0iKX0pKSxEKSl9KGEsIiQiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPWFyKHt0eXBlOmMsc2VsZWN0''@;'; put 'put ''b3JzOltbIm5neC1qc29uLXZpZXdlciJdXSxpbnB1dHM6e2pzb246Impzb24iLGV4cGFuZGVkOiJleHBhbmRlZCIsZGVwdGg6ImRlcHRoIixfY3VycmVudERlcHRoOiJfY3VycmVudERlcHRoIn0sb3V0cHV0czp7c2VnbWVudExpbmtDbGlja2VkOiJzZWdtZW50TGlua0NsaWNrZWQifSxzdGFu''@;'; put 'put ''ZGFsb25lOiExLGZlYXR1cmVzOltXb10sZGVjbHM6Mix2YXJzOjEsY29uc3RzOltbMSwibmd4LWpzb24tdmlld2VyIl0sWzMsIm5nQ2xhc3MiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJuZ0NsYXNzIl0sWzMsImNsaWNrIiwibmdDbGFzcyJdLFsiY2xhc3MiLCJ0b2dnbGVyIiw0LCJuZ0lm''@;'; put 'put ''Il0sWzEsInNlZ21lbnQta2V5Il0sWzEsInNlZ21lbnQtc2VwYXJhdG9yIl0sWyJjbGFzcyIsInNlZ21lbnQtdmFsdWUiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNoaWxkcmVuIiw0LCJuZ0lmIl0sWzEsInRvZ2dsZXIiXSxbMSwic2VnbWVudC12YWx1ZSIsMywiY2xpY2siXSxb''@;'; put 'put ''MSwiY2hpbGRyZW4iXSxbMywic2VnbWVudExpbmtDbGlja2VkIiwianNvbiIsImV4cGFuZGVkIiwiZGVwdGgiLCJfY3VycmVudERlcHRoIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoZGUoMCwic2VjdGlvbiIsMCksZ3QoMSxWSHQsOSwxMSwic2VjdGlvbiIsMSksaGUoKSksMiZh''@;'; put 'put ''JiYoZmUoKSxFZSgibmdGb3JPZiIsZC5zZWdtZW50cykpfSxkZXBlbmRlbmNpZXM6W1J1LGhzLENhLGNdLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6dmFyKC0tbmd4LWpzb24tZm9udC1mYW1pbHksIG1v''@;'; put 'put ''bm9zcGFjZSk7Zm9udC1zaXplOnZhcigtLW5neC1qc29uLWZvbnQtc2l6ZSwgMWVtKTt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQt''@;'; put 'put ''JUNPTVAlXXtwYWRkaW5nOjJweDttYXJnaW46MXB4IDFweCAxcHggMTJweH0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVde3dvcmQtd3JhcDpicmVhay13b3Jk''@;'; put 'put ''fS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gICAudG9nZ2xlcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7bWFyZ2luLWxlZnQ6LTE0''@;'; put 'put ''cHg7bWFyZ2luLXRvcDozcHg7Zm9udC1zaXplOi44ZW07bGluZS1oZWlnaHQ6MS4yZW07dmVydGljYWwtYWxpZ246bWlkZGxlO2NvbG9yOnZhcigtLW5neC1qc29uLXRvZ2dsZXIsICM3ODc4NzgpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29u''@;'; put 'put ''dGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gICAudG9nZ2xlcltfbmdjb250ZW50LSVDT01QJV06YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29udGVudDoiXFwyNWJhIjt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMXMgZWFzZS1pbn0ubmd4LWpzb24t''@;'; put 'put ''dmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQta2V5W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1rZXksICM0RTE4N0MpfS5uZ3gt''@;'; put 'put ''anNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1zZXBhcmF0b3JbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLXNlcGFyYXRv''@;'; put 'put ''ciwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNv''@;'; put 'put ''bi12YWx1ZSwgIzAwMCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2hpbGRyZW5bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0OjEycHh9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0g''@;'; put 'put ''ICAuc2VnbWVudC10eXBlLXN0cmluZ1tfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1zdHJpbmcsICNGRjZCNkIpfS5uZ3gtanNvbi12aWV3''@;'; put 'put ''ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1udW1iZXJbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tbnVtYmVyLCAj''@;'; put 'put ''MDA5Njg4KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtYm9vbGVhbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2''@;'; put 'put ''YXIoLS1uZ3gtanNvbi1ib29sZWFuLCAjQjkzOEE0KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtZGF0ZVtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2Nv''@;'; put 'put ''bnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1kYXRlLCAjMDU2NjhEKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtYXJyYXlbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAu''@;'; put 'put ''c2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tYXJyYXksICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1vYmplY3RbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdj''@;'; put 'put ''b250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tb2JqZWN0LCAjOTk5KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtZnVuY3Rpb25bX25nY29udGVudC0lQ09NUCVd''@;'; put 'put ''ID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tZnVuY3Rpb24sICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1saW5r''@;'; put 'put ''W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLWxpbmssICM5QjU5QjYpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAg''@;'; put 'put ''LnNlZ21lbnQtdHlwZS1udWxsW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLW51bGwsICNmZmYpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29u''@;'; put 'put ''dGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS11bmRlZmluZWRbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tdW5kZWZpbmVkLCAjZmZm''@;'; put 'put ''KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtbnVsbFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnZhcigtLW5neC1qc29uLW51bGwtYmcsIHJlZCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLXVuZGVmaW5lZFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LWtleVtfbmdj''@;'; put 'put ''b250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tdW5kZWZpbmVkLWtleSwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLXVuZGVmaW5lZFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQt''@;'; put 'put ''JUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW5neC1qc29uLXVuZGVmaW5lZC1rZXksICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1saW5rW19uZ2NvbnRlbnQt''@;'; put 'put ''JUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y3Vyc29yOnBvaW50ZXJ9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVu''@;'; put 'put ''dC10eXBlLW9iamVjdFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWFycmF5W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBhbmRlZFtfbmdjb250ZW50LSVDT01QJV0gPiAudG9nZ2xlcltfbmdjb250ZW50LSVDT01QJV06YWZ0ZXJ7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyl9Lm5n''@;'; put 'put ''eC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuZXhwYW5kYWJsZVtfbmdjb250ZW50LSVDT01QJV0sIC5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGFuZGFibGVbX25nY29udGVudC0lQ09NUCVdID4gLnRvZ2dsZXJbX25nY29udGVudC0lQ09NUCVd''@;'; put 'put ''e2N1cnNvcjpwb2ludGVyfSddfSksY30pKCksakh0PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1FaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9eWkoe2ltcG9ydHM6W05hXX0pLGN9KSgpLHpIdD0oKCk9''@;'; put 'put ''PntjbGFzcyBje3RyYW5zZm9ybShhKXtpZighYS5pbmNsdWRlcygiLyIpKXJldHVybiBhO2xldCBkPSIiO2NvbnN0IGg9YS5zcGxpdCgiLyIpO2ZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7ZisrKWlmKCIiIT09aFtmXSl7Y29uc3Qgdj1oW2ZdO2QrPSIvIit2LGhbZl09YDxhIGhyZWY9JHtkfT4k''@;'; put 'put ''e3Z9PC9hPmB9cmV0dXJuIGguam9pbigiLyIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPUxsKHtuYW1lOiJsaW5raW56ZSIsdHlwZTpjLHB1cmU6ITAsc3RhbmRhbG9uZTohMX0pfX1yZXR1cm4gY30p''@;'; put 'put ''KCksVUh0PSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEpe3JldHVybiBKU09OLnN0cmluZ2lmeShhLG51bGwsMil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXBpcGU9TGwoe25hbWU6InByZXR0eWpzb24iLHR5''@;'; put 'put ''cGU6YyxwdXJlOiEwLHN0YW5kYWxvbmU6ITF9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIFpIdChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsMjQpLFBlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtBRSgidmFsdWUiLGEudmFsdWUpLGZlKCksSXIoIiAiLGEua2V5LCIg''@;'; put 'put ''Iil9fWZ1bmN0aW9uIFdIdChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGdyb3VwIiwyMiksZ3QoMSxaSHQsMiwyLCJvcHRpb24iLDIzKSxkbCgyLCJrZXl2YWx1ZSIpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPU9lKCk7RWUoImxhYmVsIixhLmtleSksZmUoKSxFZSgibmdGb3JP''@;'; put 'put ''ZiIsamMoMiwyLGQuY29sbGVjdGlvbnNbYS5rZXldKSl9fWZ1bmN0aW9uIFlIdChjLGwpezEmYyYmKGRlKDAsInAiLDI1KSxQZSgxLCIgU2VsZWN0IGNvbGxlY3Rpb24gdG8gc3RhcnQgIiksaGUoKSl9ZnVuY3Rpb24gR0h0KGMsbCl7MSZjJiZHdCgwLCJjbHItc3Bpbm5lciIsMjYpfWZ1bmN0''@;'; put 'put ''aW9uICRIdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDMyKX1mdW5jdGlvbiBLSHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItaWNvbiIsMzMpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpO3JldHVybiBoLmxpbmtzU2VhcmNoPSIiLEN0''@;'; put 'put ''KGgubGlua3NMaXN0T25GaWx0ZXIoKSl9KSxoZSgpfX1mdW5jdGlvbiBYSHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwyNykoMSwiZGl2IiwyOCkoMiwiaW5wdXQiLDI5LDApLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25z''@;'; put 'put ''dCBmPU9lKCk7cmV0dXJuIGZpKGYubGlua3NTZWFyY2gsaCl8fChmLmxpbmtzU2VhcmNoPWgpLEN0KGgpfSksT3QoImtleXVwIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmxpbmtzTGlzdE9uRmlsdGVyKCkpfSksaGUoKSxndCg0LCRIdCwxLDAsImNsci1pY29uIiwzMCkoNSxL''@;'; put 'put ''SHQsMSwwLCJjbHItaWNvbiIsMzEpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9ZmEoMyksZD1PZSgpO2ZlKDIpLGxpKCJuZ01vZGVsIixkLmxpbmtzU2VhcmNoKSxmZSgyKSxFZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxFZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0''@;'; put 'put ''aW9uIHFIdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDM1KSxPdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKS4kaW1wbGljaXQsdj1PZSgpO3JldHVybiBDdCh2LnRyZWVOb2RlQ2xpY2tlZChoLGYsdi5lbmRwb2ludExpbmtz''@;'; put 'put ''KSl9KSxjaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKS4kaW1wbGljaXQ7cmV0dXJuIGZpKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksZGUoMSwicCIsMzYpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBo''@;'; put 'put ''PU9lKCkuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLmxpbmtPbkNsaWNrKGgpKX0pLEd0KDIsImNsci1pY29uIiwzNyksUGUoMyksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpLiRpbXBsaWNpdDtsaSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLEVlKCJjbHJMb2FkaW5nIiwhIWEubG9h''@;'; put 'put ''ZGluZ1RhYmxlcyYmIWEudGFibGVzKSxmZSgzKSxYdSgiICIsYS5tZXRob2QsIiAiLGEucmVsLCIgIil9fWZ1bmN0aW9uIEpIdChjLGwpe2lmKDEmYyYmKG9pKDApLGd0KDEscUh0LDQsNCwiY2xyLXRyZWUtbm9kZSIsMzQpLHNpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLEVl''@;'; put 'put ''KCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBRSHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwzMil9ZnVuY3Rpb24gZU50KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLWljb24iLDMzKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgyKTty''@;'; put 'put ''ZXR1cm4gaC5pdGVtc1NlYXJjaD0iIixDdChoLml0ZW1zTGlzdE9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gdE50KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMjcpKDEsImRpdiIsMjgpKDIsImlucHV0IiwzOCwxKSxjaSgibmdNb2RlbENoYW5n''@;'; put 'put ''ZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpO3JldHVybiBmaShmLml0ZW1zU2VhcmNoLGgpfHwoZi5pdGVtc1NlYXJjaD1oKSxDdChoKX0pLE90KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5pdGVtc0xpc3RPbkZpbHRlcigpKX0pLGhlKCksZ3QoNCxR''@;'; put 'put ''SHQsMSwwLCJjbHItaWNvbiIsMzApKDUsZU50LDEsMCwiY2xyLWljb24iLDMxKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWZhKDMpLGQ9T2UoKTtmZSgyKSxsaSgibmdNb2RlbCIsZC5pdGVtc1NlYXJjaCksZmUoMiksRWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksRWUoIm5nSWYi''@;'; put 'put ''LGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBuTnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwzNSksT3QoImNsaWNrIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCkuJGltcGxpY2l0LHY9T2UoKTtyZXR1cm4gQ3Qodi50cmVlTm9kZUNs''@;'; put 'put ''aWNrZWQoaCxmLHYuZW5kcG9pbnRJdGVtcykpfSksY2koImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCkuJGltcGxpY2l0O3JldHVybiBmaShmLmV4cGFuZGVkLGgpfHwoZi5leHBhbmRlZD1oKSxDdChoKX0pLGRlKDEsInAiLDM2KSxPdCgiY2xpY2si''@;'; put 'put ''LGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoKS5pdGVtT25DbGljayhoKSl9KSxHdCgyLCJjbHItaWNvbiIsMzcpLFBlKDMpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQ7bGkoImNsckV4cGFuZGVkIixhLmV4cGFuZGVk''@;'; put 'put ''KSxFZSgiY2xyTG9hZGluZyIsISFhLmxvYWRpbmdUYWJsZXMmJiFhLnRhYmxlcyksZmUoMyksSXIoIiAiLGEubmFtZXx8YS5pZCwiICIpfX1mdW5jdGlvbiByTnQoYyxsKXtpZigxJmMmJihvaSgwKSxndCgxLG5OdCw0LDMsImNsci10cmVlLW5vZGUiLDM0KSxzaSgpKSwyJmMpe2NvbnN0IGE9''@;'; put 'put ''bC4kaW1wbGljaXQ7ZmUoKSxFZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24gaU50KGMsbCl7MSZjJiZHdCgwLCJjbHItc3Bpbm5lciIsMzkpfWZ1bmN0aW9uIGFOdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsIm5neC1qc29uLXZpZXdlciIsNDkpLE90KCJzZWdtZW50TGlu''@;'; put 'put ''a0NsaWNrZWQiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgzKS5vbkpzb25MaW5rQ2xpY2soaCkpfSksaGUoKX0yJmMmJkVlKCJqc29uIixPZSgzKS5lbmRwb2ludEpzb24pKCJleHBhbmRlZCIsITEpfWZ1bmN0aW9uIG9OdChjLGwpe2lmKDEmYyYmKG9pKDApLFBlKDEpLGRsKDIs''@;'; put 'put ''InByZXR0eWpzb24iKSxzaSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoKSxJcigiXG4gICAgICAgICAgICAiLGpjKDIsMSxhLmVuZHBvaW50SnNvbiksIlxuICAgICAgICAgICIpfX1mdW5jdGlvbiBzTnQoYyxsKXtpZigxJmMmJihvaSgwKSxQZSgxLCJcbiAgICAgICAgICAiKSxndCgyLGFO''@;'; put 'put ''dCwxLDIsIm5neC1qc29uLXZpZXdlciIsNDgpLFBlKDMsIlxuICAgICAgICAgICIpLGd0KDQsb050LDMsMywibmctY29udGFpbmVyIiwyMSksUGUoNSwiXG4gICAgICAgICIpLHNpKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgyKSxFZSgibmdJZiIsIWEucmF3SnNvbiksZmUoMiksRWUoIm5n''@;'; put 'put ''SWYiLGEucmF3SnNvbil9fWZ1bmN0aW9uIGxOdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO29pKDApLGRlKDEsImRpdiIsNDApKDIsInNwYW4iLDQxKSxQZSgzLCIgR0VUICIpLGRlKDQsInAiLDQyKSxkbCg1LCJsaW5raW56ZSIpLE90KCJjbGljayIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0''@;'; put 'put ''KGEpLEN0KE9lKCkub25CcmVhZGN1bXNDbGljayhoKSl9KSxoZSgpLGRlKDYsImJ1dHRvbiIsMTYpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5jb3B5QnJlYWRjcnVtcygpKX0pLEd0KDcsImNsci1pY29uIiwxNyksaGUoKSgpLGRlKDgsImRpdiIsNDMpKDks''@;'; put 'put ''ImNsci1pbnB1dC1jb250YWluZXIiLDE0KSgxMCwibGFiZWwiKSxQZSgxMSwiU3RhcnQiKSxoZSgpLGRlKDEyLCJpbnB1dCIsNDQpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCk7cmV0dXJuIGZpKGYuZW5kcG9pbnQuc3RhcnQsaCl8fChmLmVuZHBv''@;'; put 'put ''aW50LnN0YXJ0PWgpLEN0KGgpfSksaGUoKSgpLGRlKDEzLCJjbHItaW5wdXQtY29udGFpbmVyIiwxNCkoMTQsImxhYmVsIiksUGUoMTUsIkxpbWl0IiksaGUoKSxkZSgxNiwiaW5wdXQiLDQ0KSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpO3JldHVy''@;'; put 'put ''biBmaShmLmVuZHBvaW50LmxpbWl0LGgpfHwoZi5lbmRwb2ludC5saW1pdD1oKSxDdChoKX0pLGhlKCkoKSxkZSgxNywiYnV0dG9uIiw0NSksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmFwcGx5UXVlcnlQYXJhbXMoKSl9KSxHdCgxOCwiY2xyLWljb24iLDQ2''@;'; put 'put ''KSxoZSgpKCkoKSxkZSgxOSwicHJlIiw0NyksUGUoMjAsIiAgICAgICAgIiksZ3QoMjEsc050LDYsMiwibmctY29udGFpbmVyIiwyMSksUGUoMjIsIlxuICAgICAgIiksaGUoKSxzaSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO2ZlKDQpLEVlKCJpbm5lckhUTUwiLGpjKDUsNyxhLmVuZHBvaW50''@;'; put 'put ''LnVybCksT2cpLGZlKDgpLGxpKCJuZ01vZGVsIixhLmVuZHBvaW50LnN0YXJ0KSxFZSgiZGlzYWJsZWQiLHZvaWQgMD09PWEuZW5kcG9pbnQuc3RhcnQpLGZlKDQpLGxpKCJuZ01vZGVsIixhLmVuZHBvaW50LmxpbWl0KSxFZSgiZGlzYWJsZWQiLHZvaWQgMD09PWEuZW5kcG9pbnQubGltaXQp''@;'; put 'put ''LGZlKCksRWUoImRpc2FibGVkIix2b2lkIDA9PT1hLmVuZHBvaW50LmxpbWl0JiZ2b2lkIDA9PT1hLmVuZHBvaW50LnN0YXJ0KSxmZSg0KSxFZSgibmdJZiIsYS5lbmRwb2ludEpzb24pfX1sZXQgY050PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5oZWxwZXJTZXJ2''@;'; put 'put ''aWNlPWEsdGhpcy5zYXNWaXlhU2VydmljZT1kLHRoaXMuc2FzU2VydmljZT1oLHRoaXMuZXZlbnRTZXJ2aWNlPWYsdGhpcy5jb2xsZWN0aW9ucz17fSx0aGlzLmNvbGxlY3Rpb249IiIsdGhpcy5lbmRwb2ludExpbmtzPVtdLHRoaXMuZW5kcG9pbnRJdGVtcz1bXSx0aGlzLmVuZHBvaW50PXt1''@;'; put 'put ''cmw6IiIsc3RhcnQ6LTEsbGltaXQ6LTF9LHRoaXMuZW5kcG9pbnRMb2FkaW5nPSExLHRoaXMuY29sbGVjdGlvbkxvYWRpbmc9ITEsdGhpcy5yYXdKc29uPSExLHRoaXMubGlua3NTZWFyY2g9IiIsdGhpcy5pdGVtc1NlYXJjaD0iIix0aGlzLnNhc2pzQ29uZmlnPW5ldyBkMi5TQVNqc0NvbmZp''@;'; put 'put ''Z31uZ09uSW5pdCgpe3RoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksdGhpcy5jb2xsZWN0aW9ucz10aGlzLnNhc1ZpeWFTZXJ2aWNlLmdldEFsbENvbGxlY3Rpb25zKCl9bGlua3NMaXN0T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFy''@;'; put 'put ''eU9uRmlsdGVyKHRoaXMuZW5kcG9pbnRMaW5rcyx0aGlzLmxpbmtzU2VhcmNoLCJyZWwiKSxYbi52aXlhQXBpLmxpbmtzc1NlYXJjaD10aGlzLmxpbmtzU2VhcmNofWl0ZW1zTGlzdE9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmVuZHBvaW50SXRl''@;'; put 'put ''bXMsdGhpcy5pdGVtc1NlYXJjaCwibmFtZSIpLFhuLnZpeWFBcGkuaXRlbXNTZWFyY2g9dGhpcy5pdGVtc1NlYXJjaH1saW5rT25DbGljayhhKXt0aGlzLmxvYWRVcmwoYS5ocmVmKX1pdGVtT25DbGljayhhKXt0aGlzLmxvYWRVcmwoYS5saW5rc1swXS5ocmVmKX10cmVlTm9kZUNsaWNrZWQo''@;'; put 'put ''YSxkLGgpeyJDb2xsYXBzZSI9PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZVRyZWVJdGVtcyhoLGQpfWNvbGxhcHNlVHJlZUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9PntKU09OLnN0cmluZ2lmeShoKSE9PUpTT04uc3RyaW5naWZ5KGQpJiYoaC5leHBhbmRlZD0hMSl9KX11cGRhdGVT''@;'; put 'put ''ZWxlY3RlZENvbGxlY3Rpb24oKXtYbi52aXlhQXBpLnNlbGVjdGVkQ29sbGVjdGlvbj10aGlzLmNvbGxlY3Rpb24sdGhpcy5lbmRwb2ludC51cmw9dGhpcy5jb2xsZWN0aW9uLHRoaXMuY29sbGVjdGlvbkxvYWRpbmc9ITAsdGhpcy5zYXNWaXlhU2VydmljZS5nZXRCeUNvbGxlY3Rpb24odGhp''@;'; put 'put ''cy5jb2xsZWN0aW9uKS5zdWJzY3JpYmUoYT0+e3RoaXMuZW5kcG9pbnRMaW5rcz1hLmxpbmtzLHRoaXMuZW5kcG9pbnRJdGVtcz1hLml0ZW1zP2EuaXRlbXM6W10sdGhpcy5jb2xsZWN0aW9uTG9hZGluZz0hMSx0aGlzLmVuZHBvaW50SnNvbj1hLHRoaXMuZW5kcG9pbnQuc3RhcnQ9YS5zdGFy''@;'; put 'put ''dCx0aGlzLmVuZHBvaW50LmxpbWl0PWEubGltaXR9LGE9Pnt0aGlzLmNvbGxlY3Rpb25Mb2FkaW5nPSExO2xldCBkPSJFcnJvciBvY2N1cnJlZCB3aGlsZSBzZW5kaW5nIHJlcXVlc3QiO2EubWVzc2FnZSYmKGQ9YS5tZXNzYWdlKSxhLmVycm9yJiYoYS5lcnJvci5tZXNzYWdlJiYoZD1hLmVy''@;'; put 'put ''cm9yLm1lc3NhZ2UpLGEuZXJyb3IucmVtZWRpYXRpb24mJihkPWAke2R9XG4ke2EuZXJyb3IucmVtZWRpYXRpb259YCkpLHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsZCxudWxsLCJIVFRQIEVycm9yIil9KX1vbkpzb25MaW5rQ2xpY2soYSl7dGhpcy5sb2FkVXJsKGEp''@;'; put 'put ''fW9uSnNvbkNsaWNrKGEpe2lmKGEucHJldmVudERlZmF1bHQoKSwiQSI9PT1hLnNyY0VsZW1lbnQudGFnTmFtZSl7Y29uc3QgZD1hLnNyY0VsZW1lbnQuaHJlZi5zcGxpdChhLnNyY0VsZW1lbnQuaG9zdClbMV07dGhpcy5sb2FkVXJsKGQpfX1vbkJyZWFkY3Vtc0NsaWNrKGEpe2lmKGEucHJl''@;'; put 'put ''dmVudERlZmF1bHQoKSwhYS5zcmNFbGVtZW50LmhyZWYpcmV0dXJuO2NvbnN0IGQ9YS5zcmNFbGVtZW50LmhyZWYuc3BsaXQoYS5zcmNFbGVtZW50Lmhvc3QpWzFdO3RoaXMubG9hZFVybChkKX1jb3B5SnNvbigpe3RoaXMuZW5kcG9pbnRKc29uJiZuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRl''@;'; put 'put ''VGV4dChKU09OLnN0cmluZ2lmeSh0aGlzLmVuZHBvaW50SnNvbixudWxsLDIpKX1jb3B5QnJlYWRjcnVtcygpe3RoaXMuZW5kcG9pbnQmJnRoaXMuZW5kcG9pbnQudXJsJiZuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0aGlzLmVuZHBvaW50LnVybCl9YXBwbHlRdWVyeVBhcmFtcygp''@;'; put 'put ''e2NvbnN0IGE9dGhpcy5lbmRwb2ludC5zdGFydCxkPXRoaXMuZW5kcG9pbnQubGltaXQsaD1gPyR7dm9pZCAwIT09YT8ic3RhcnQ9IithOiIifSR7dm9pZCAwIT09ZD8iJmxpbWl0PSIrZDoiIn1gLGY9YCR7dGhpcy5lbmRwb2ludC51cmwuc3BsaXQoIj8iKVswXX0ke2h9YDt0aGlzLmxvYWRV''@;'; put 'put ''cmwoZil9bG9hZFVybChhKXt0aGlzLmVuZHBvaW50TG9hZGluZz0hMCx0aGlzLnNhc1ZpeWFTZXJ2aWNlLmdldEJ5VXJsKGEpLnN1YnNjcmliZShkPT57dGhpcy5lbmRwb2ludExpbmtzPWQubGlua3MsdGhpcy5lbmRwb2ludEl0ZW1zPWQuaXRlbXM/ZC5pdGVtczpbXSx0aGlzLmVuZHBvaW50''@;'; put 'put ''SnNvbj1kLHRoaXMuZW5kcG9pbnRMb2FkaW5nPSExLHRoaXMuZW5kcG9pbnQudXJsPWEsdGhpcy5lbmRwb2ludC5zdGFydD1kLnN0YXJ0LHRoaXMuZW5kcG9pbnQubGltaXQ9ZC5saW1pdH0sZD0+e3RoaXMuZW5kcG9pbnRMb2FkaW5nPSExO2xldCBoPSJFcnJvciBvY2N1cnJlZCB3aGlsZSBz''@;'; put 'put ''ZW5kaW5nIHJlcXVlc3QiO2QubWVzc2FnZSYmKGg9ZC5tZXNzYWdlKSxkLmVycm9yJiYoZC5lcnJvci5tZXNzYWdlJiYoaD1kLmVycm9yLm1lc3NhZ2UpLGQuZXJyb3IucmVtZWRpYXRpb24mJihoPWAke2h9XG4ke2QuZXJyb3IucmVtZWRpYXRpb259YCkpLHRoaXMuZXZlbnRTZXJ2aWNlLnNo''@;'; put 'put ''b3dBYm9ydE1vZGFsKG51bGwsaCxudWxsLCJIVFRQIEVycm9yIil9KX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShMdSkscWUoVyQpLHFlKEtzKSxxZShFYykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9YXIoe3R5cGU6YyxzZWxlY3RvcnM6''@;'; put 'put ''W1siYXBwLXZpeWEtYXBpLWV4cGxvcmVyIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxzdGFuZGFsb25lOiExLGRlY2xzOjMzLHZhcnM6MTMsY29uc3RzOltbInNlYXJjaExpbmtzVHJlZUlucHV0IiwiIl0sWyJzZWFyY2hJdGVtc1RyZWVJbnB1dCIsIiJdLFsxLCJhcGkt''@;'; put 'put ''Y29sbGVjdGlvbi1kcm9wZG93biJdLFsiY2xyU2VsZWN0IiwiIiwiaWQiLCJyZXBvc2l0b3J5IiwzLCJuZ01vZGVsQ2hhbmdlIiwiY2hhbmdlIiwibmdNb2RlbCJdLFszLCJsYWJlbCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0s''@;'; put 'put ''WzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiLDQsIm5nSWYiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjYXJkIiwiaC0xMDAiLCJwLTEw''@;'; put 'put ''IiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWzEsInctMTAwIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwic2l0aW9uLXJlbGF0aXZlIl0sWzEsImpzb24tdG9nZ2xlIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1z''@;'; put 'put ''LWNlbnRlciJdLFsxLCJtLTAiXSxbInR5cGUiLCJjaGVja2JveCIsImNsclRvZ2dsZSIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1saW5rIiwiYnRuLXNtIiwzLCJjbGljayJdLFsic2hhcGUiLCJjb3B5Il0sWzEsInRleHQt''@;'; put 'put ''Y2VudGVyIiwibS0wIl0sWyJjbHJTbWFsbCIsIiIsNCwibmdJZiJdLFsxLCJ3LTEwMCIsImxpZ2h0Il0sWzQsIm5nSWYiXSxbMywibGFiZWwiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJ2YWx1ZSJdLFsxLCJ3LTEwMCIsInRleHQtY2VudGVyIl0sWyJjbHJNZWRpdW0i''@;'; put 'put ''LCIiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2ggbGlua3MiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2Ui''@;'; put 'put ''LCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNs''@;'; put 'put ''aWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYmxvY2siXSxbImNscklucHV0IiwiIiwi''@;'; put 'put ''cGxhY2Vob2xkZXIiLCJTZWFyY2ggaXRlbXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbImNsclNtYWxsIiwiIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItanVzdGlm''@;'; put 'put ''eS1jb250ZW50LWJldHdlZW4iXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsImVuZHBvaW50LWJyZWFkY3J1bXMiLDMsImNsaWNrIiwiaW5uZXJIVE1MIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJxdWVyeS1w''@;'; put 'put ''YXJhbXMiXSxbImNscklucHV0IiwiIiwidHlwZSIsIm51bWJlciIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJkaXNhYmxlZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLWxpbmsiLCJidG4tc20iLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwicGxheSJdLFsx''@;'; put 'put ''LCJqc29uLWFyZWEiXSxbImNsYXNzIiwiZC1ibG9jayIsMywianNvbiIsImV4cGFuZGVkIiwic2VnbWVudExpbmtDbGlja2VkIiw0LCJuZ0lmIl0sWzEsImQtYmxvY2siLDMsInNlZ21lbnRMaW5rQ2xpY2tlZCIsImpzb24iLCJleHBhbmRlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEm''@;'; put 'put ''ZCYmKGRlKDAsImFwcC1zaWRlYmFyIikoMSwiZGl2IiwyKSgyLCJjbHItc2VsZWN0LWNvbnRhaW5lciIpKDMsImxhYmVsIiksUGUoNCwiQVBJIENvbGxlY3Rpb24iKSxoZSgpLGRlKDUsInNlbGVjdCIsMyksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBmaShoLmNvbGxl''@;'; put 'put ''Y3Rpb24sdil8fChoLmNvbGxlY3Rpb249diksdn0pLE90KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGgudXBkYXRlU2VsZWN0ZWRDb2xsZWN0aW9uKCl9KSxndCg2LFdIdCwzLDQsIm9wdGdyb3VwIiw0KSxkbCg3LCJrZXl2YWx1ZSIpLGhlKCkoKSgpLGd0KDgsWUh0LDIsMCwicCIsNSks''@;'; put 'put ''ZGUoOSwiZGl2Iiw2KSxndCgxMCxHSHQsMSwwLCJjbHItc3Bpbm5lciIsNyksaGUoKSxkZSgxMSwiY2xyLXRyZWUiKSxndCgxMixYSHQsNiwzLCJjbHItdHJlZS1ub2RlIiw4KSgxMyxKSHQsMiwxLCJuZy1jb250YWluZXIiLDkpLGhlKCksZGUoMTQsImNsci10cmVlIiksZ3QoMTUsdE50LDYs''@;'; put 'put ''MywiY2xyLXRyZWUtbm9kZSIsOCkoMTYsck50LDIsMSwibmctY29udGFpbmVyIiw5KSxoZSgpKCksZGUoMTcsImRpdiIsMTApKDE4LCJkaXYiLDExKSgxOSwiZGl2IiwxMikoMjAsImRpdiIsMTMpKDIxLCJjbHItdG9nZ2xlLWNvbnRhaW5lciIsMTQpKDIyLCJjbHItdG9nZ2xlLXdyYXBwZXIi''@;'; put 'put ''KSgyMywiaW5wdXQiLDE1KSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGZpKGgucmF3SnNvbix2KXx8KGgucmF3SnNvbj12KSx2fSksaGUoKSxkZSgyNCwibGFiZWwiKSxQZSgyNSwiUkFXIEpzb24iKSxoZSgpKCkoKSxkZSgyNiwiYnV0dG9uIiwxNiksT3QoImNsaWNr''@;'; put 'put ''IixmdW5jdGlvbigpe3JldHVybiBoLmNvcHlKc29uKCl9KSxHdCgyNywiY2xyLWljb24iLDE3KSxoZSgpKCksZGUoMjgsImg0IiwxOCksUGUoMjksIiBBUEkgRXhwbG9yZXIgIiksZ3QoMzAsaU50LDEsMCwiY2xyLXNwaW5uZXIiLDE5KSxoZSgpKCksR3QoMzEsImhyIiwyMCksZ3QoMzIsbE50''@;'; put 'put ''LDIzLDksIm5nLWNvbnRhaW5lciIsMjEpLGhlKCkoKSksMiZkJiYoZmUoNSksbGkoIm5nTW9kZWwiLGguY29sbGVjdGlvbiksZmUoKSxFZSgibmdGb3JPZiIsamMoNywxMSxoLmNvbGxlY3Rpb25zKSksZmUoMiksRWUoIm5nSWYiLGguZW5kcG9pbnRMaW5rcy5sZW5ndGg8MSYmIWguY29sbGVj''@;'; put 'put ''dGlvbkxvYWRpbmcpLGZlKDIpLEVlKCJuZ0lmIixoLmNvbGxlY3Rpb25Mb2FkaW5nKSxmZSgyKSxFZSgibmdJZiIsaC5lbmRwb2ludExpbmtzLmxlbmd0aD4wKSxmZSgpLEVlKCJuZ0Zvck9mIixoLmVuZHBvaW50TGlua3MpLGZlKDIpLEVlKCJuZ0lmIixoLmVuZHBvaW50SXRlbXMubGVuZ3Ro''@;'; put 'put ''PjApLGZlKCksRWUoIm5nRm9yT2YiLGguZW5kcG9pbnRJdGVtcyksZmUoNyksbGkoIm5nTW9kZWwiLGgucmF3SnNvbiksZmUoNyksRWUoIm5nSWYiLGguZW5kcG9pbnRMb2FkaW5nKSxmZSgyKSxFZSgibmdJZiIsaC5jb2xsZWN0aW9uLmxlbmd0aD4wKSl9LGRlcGVuZGVuY2llczpbaHMsQ2Es''@;'; put 'put ''eGYsRWYsbmMsSEYsc2gsTWYsaGwscmwsdzIsbWgsVWwsYzEsQ3MsaGgscHcseTIsTWQsZEgsTjksQ3csZmgsc2csb2csQkh0LExQLHpIdCxVSHRdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgdU50PW5ldyBqbigiV2luZG93VG9rZW4iLHR5cGVvZiB3aW5kb3c8InUi''@;'; put 'put ''JiZ3aW5kb3cuZG9jdW1lbnQ/e3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PndpbmRvd306e3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pnt9fSk7bGV0IGROdD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLm5nWm9uZT1hLHRoaXMuZG9jdW1lbnQ9ZCx0''@;'; put 'put ''aGlzLndpbmRvdz1oLHRoaXMuY29weVN1YmplY3Q9bmV3IHVyLHRoaXMuY29weVJlc3BvbnNlJD10aGlzLmNvcHlTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLHRoaXMuY29uZmlnPXt9fWNvbmZpZ3VyZShhKXt0aGlzLmNvbmZpZz1hfWNvcHkoYSl7aWYoIXRoaXMuaXNTdXBwb3J0ZWR8fCFhKXJl''@;'; put 'put ''dHVybiB0aGlzLnB1c2hDb3B5UmVzcG9uc2Uoe2lzU3VjY2VzczohMSxjb250ZW50OmF9KTtjb25zdCBkPXRoaXMuY29weUZyb21Db250ZW50KGEpO3JldHVybiB0aGlzLnB1c2hDb3B5UmVzcG9uc2UoZD97Y29udGVudDphLGlzU3VjY2VzczpkfTp7aXNTdWNjZXNzOiExLGNvbnRlbnQ6YX0p''@;'; put 'put ''fWdldCBpc1N1cHBvcnRlZCgpe3JldHVybiEhdGhpcy5kb2N1bWVudC5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQmJiEhdGhpcy5kb2N1bWVudC5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQoImNvcHkiKSYmISF0aGlzLndpbmRvd31pc1RhcmdldFZhbGlkKGEpe2lmKGEgaW5zdGFuY2VvZiBIVE1MSW5w''@;'; put 'put ''dXRFbGVtZW50fHxhIGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCl7aWYoYS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkICJ0YXJnZXQiIGF0dHJpYnV0ZS4gUGxlYXNlIHVzZSAicmVhZG9ubHkiIGluc3RlYWQgb2YgImRpc2FibGVkIiBh''@;'; put 'put ''dHRyaWJ1dGUnKTtyZXR1cm4hMH10aHJvdyBuZXcgRXJyb3IoIlRhcmdldCBzaG91bGQgYmUgaW5wdXQgb3IgdGV4dGFyZWEiKX1jb3B5RnJvbUlucHV0RWxlbWVudChhLGQ9ITApe3RyeXt0aGlzLnNlbGVjdFRhcmdldChhKTtjb25zdCBoPXRoaXMuY29weVRleHQoKTtyZXR1cm4gdGhpcy5j''@;'; put 'put ''bGVhclNlbGVjdGlvbihkP2E6dm9pZCAwLHRoaXMud2luZG93KSxoJiZ0aGlzLmlzQ29weVN1Y2Nlc3NJbklFMTEoKX1jYXRjaHtyZXR1cm4hMX19aXNDb3B5U3VjY2Vzc0luSUUxMSgpe2NvbnN0IGE9dGhpcy53aW5kb3cuY2xpcGJvYXJkRGF0YTtyZXR1cm4hKGEmJmEuZ2V0RGF0YSYmIWEu''@;'; put 'put ''Z2V0RGF0YSgiVGV4dCIpKX1jb3B5RnJvbUNvbnRlbnQoYSxkPXRoaXMuZG9jdW1lbnQuYm9keSl7aWYodGhpcy50ZW1wVGV4dEFyZWEmJiFkLmNvbnRhaW5zKHRoaXMudGVtcFRleHRBcmVhKSYmdGhpcy5kZXN0cm95KHRoaXMudGVtcFRleHRBcmVhLnBhcmVudEVsZW1lbnR8fHZvaWQgMCks''@;'; put 'put ''IXRoaXMudGVtcFRleHRBcmVhKXt0aGlzLnRlbXBUZXh0QXJlYT10aGlzLmNyZWF0ZVRlbXBUZXh0QXJlYSh0aGlzLmRvY3VtZW50LHRoaXMud2luZG93KTt0cnl7ZC5hcHBlbmRDaGlsZCh0aGlzLnRlbXBUZXh0QXJlYSl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJDb250YWluZXIgc2hvdWxk''@;'; put 'put ''IGJlIGEgRG9tIGVsZW1lbnQiKX19dGhpcy50ZW1wVGV4dEFyZWEudmFsdWU9YTtjb25zdCBoPXRoaXMuY29weUZyb21JbnB1dEVsZW1lbnQodGhpcy50ZW1wVGV4dEFyZWEsITEpO3JldHVybiB0aGlzLmNvbmZpZy5jbGVhblVwQWZ0ZXJDb3B5JiZ0aGlzLmRlc3Ryb3kodGhpcy50ZW1wVGV4''@;'; put 'put ''dEFyZWEucGFyZW50RWxlbWVudHx8dm9pZCAwKSxofWRlc3Ryb3koYT10aGlzLmRvY3VtZW50LmJvZHkpe3RoaXMudGVtcFRleHRBcmVhJiYoYS5yZW1vdmVDaGlsZCh0aGlzLnRlbXBUZXh0QXJlYSksdGhpcy50ZW1wVGV4dEFyZWE9dm9pZCAwKX1zZWxlY3RUYXJnZXQoYSl7cmV0dXJuIGEu''@;'; put 'put ''c2VsZWN0KCksYS5zZXRTZWxlY3Rpb25SYW5nZSgwLGEudmFsdWUubGVuZ3RoKSxhLnZhbHVlLmxlbmd0aH1jb3B5VGV4dCgpe3JldHVybiB0aGlzLmRvY3VtZW50LmV4ZWNDb21tYW5kKCJjb3B5Iil9Y2xlYXJTZWxlY3Rpb24oYSxkKXthJiZhLmZvY3VzKCksZC5nZXRTZWxlY3Rpb24oKT8u''@;'; put 'put ''cmVtb3ZlQWxsUmFuZ2VzKCl9Y3JlYXRlVGVtcFRleHRBcmVhKGEsZCl7Y29uc3QgaD0icnRsIj09PWEuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIik7bGV0IGY7cmV0dXJuIGY9YS5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpLGYuc3R5bGUuZm9udFNpemU9IjEycHQiLGYu''@;'; put 'put ''c3R5bGUuYm9yZGVyPSIwIixmLnN0eWxlLnBhZGRpbmc9IjAiLGYuc3R5bGUubWFyZ2luPSIwIixmLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsZi5zdHlsZVtoPyJyaWdodCI6ImxlZnQiXT0iLTk5OTlweCIsZi5zdHlsZS50b3A9KGQucGFnZVlPZmZzZXR8fGEuZG9jdW1lbnRFbGVtZW50''@;'; put 'put ''LnNjcm9sbFRvcCkrInB4IixmLnNldEF0dHJpYnV0ZSgicmVhZG9ubHkiLCIiKSxmfXB1c2hDb3B5UmVzcG9uc2UoYSl7dGhpcy5jb3B5U3ViamVjdC5vYnNlcnZlcnMubGVuZ3RoPjAmJnRoaXMubmdab25lLnJ1bigoKT0+e3RoaXMuY29weVN1YmplY3QubmV4dChhKX0pfXB1c2hDb3B5UmVw''@;'; put 'put ''b25zZShhKXt0aGlzLnB1c2hDb3B5UmVzcG9uc2UoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEhyKFhhKSxIcihHcyksSHIodU50LDgpKX0sYy5cdTAyNzVwcm92PWZyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoi''@;'; put 'put ''cm9vdCJ9KSxjfSkoKSxoTnQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLm5nWm9uZT1hLHRoaXMuaG9zdD1kLHRoaXMucmVuZGVyZXI9aCx0aGlzLmNsaXBib2FyZFNydj1mLHRoaXMuY2JPblN1Y2Nlc3M9bmV3IFhyLHRoaXMuY2JPbkVycm9yPW5ldyBYcix0aGlz''@;'; put 'put ''Lm9uQ2xpY2s9dj0+e3RoaXMuY2xpcGJvYXJkU3J2LmlzU3VwcG9ydGVkP3RoaXMudGFyZ2V0RWxtJiZ0aGlzLmNsaXBib2FyZFNydi5pc1RhcmdldFZhbGlkKHRoaXMudGFyZ2V0RWxtKT90aGlzLmhhbmRsZVJlc3VsdCh0aGlzLmNsaXBib2FyZFNydi5jb3B5RnJvbUlucHV0RWxlbWVudCh0''@;'; put 'put ''aGlzLnRhcmdldEVsbSksdGhpcy50YXJnZXRFbG0udmFsdWUsdik6dGhpcy5jYkNvbnRlbnQmJnRoaXMuaGFuZGxlUmVzdWx0KHRoaXMuY2xpcGJvYXJkU3J2LmNvcHlGcm9tQ29udGVudCh0aGlzLmNiQ29udGVudCx0aGlzLmNvbnRhaW5lciksdGhpcy5jYkNvbnRlbnQsdik6dGhpcy5oYW5k''@;'; put 'put ''bGVSZXN1bHQoITEsdm9pZCAwLHYpfX1uZ09uSW5pdCgpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5jbGlja0xpc3RlbmVyPXRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCJjbGljayIsdGhpcy5vbkNsaWNrKX0pfW5nT25EZXN0''@;'; put 'put ''cm95KCl7dGhpcy5jbGlja0xpc3RlbmVyJiZ0aGlzLmNsaWNrTGlzdGVuZXIoKSx0aGlzLmNsaXBib2FyZFNydi5kZXN0cm95KHRoaXMuY29udGFpbmVyKX1oYW5kbGVSZXN1bHQoYSxkLGgpe2xldCBmPXtpc1N1Y2Nlc3M6YSxjb250ZW50OmQsc3VjY2Vzc01lc3NhZ2U6dGhpcy5jYlN1Y2Nl''@;'; put 'put ''c3NNc2csZXZlbnQ6aH07YT90aGlzLmNiT25TdWNjZXNzLm9ic2VydmVkJiZ0aGlzLm5nWm9uZS5ydW4oKCk9Pnt0aGlzLmNiT25TdWNjZXNzLmVtaXQoZil9KTp0aGlzLmNiT25FcnJvci5vYnNlcnZlZCYmdGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy5jYk9uRXJyb3IuZW1pdChmKX0pLHRo''@;'; put 'put ''aXMuY2xpcGJvYXJkU3J2LnB1c2hDb3B5UmVzcG9uc2UoZil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKFhhKSxxZShuYSkscWUoTm8pLHFlKGROdCkpfSxjLlx1MDI3NWRpcj1Zcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ3hDbGlwYm9h''@;'; put 'put ''cmQiLCIiXV0saW5wdXRzOnt0YXJnZXRFbG06WzAsIm5neENsaXBib2FyZCIsInRhcmdldEVsbSJdLGNvbnRhaW5lcjoiY29udGFpbmVyIixjYkNvbnRlbnQ6ImNiQ29udGVudCIsY2JTdWNjZXNzTXNnOiJjYlN1Y2Nlc3NNc2cifSxvdXRwdXRzOntjYk9uU3VjY2VzczoiY2JPblN1Y2Nlc3Mi''@;'; put 'put ''LGNiT25FcnJvcjoiY2JPbkVycm9yIn0sc3RhbmRhbG9uZTohMX0pLGN9KSgpLGZOdD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9RWkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPXlpKHtpbXBvcnRzOltO''@;'; put 'put ''YV19KSxjfSkoKTt2YXIgcE50PWIoMjUwMDEpO2xldCBnTnQ9KCgpPT57Y2xhc3MgY3t0cmFuc2Zvcm0oYSwuLi5kKXtjb25zdCBoPXBhcnNlSW50KGRbMF0pfHwyLGY9Im51bWJlciIhPXR5cGVvZiBhP3BhcnNlSW50KGEpOmE7cmV0dXJuKDAscE50LkMpKGYsaCl9c3RhdGlje3RoaXMuXHUw''@;'; put 'put ''Mjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXBpcGU9TGwoe25hbWU6ImNvbnZlcnRTaXplIix0eXBlOmMscHVyZTohMCxzdGFuZGFsb25lOiExfSl9fXJldHVybiBjfSkoKTtjb25zdCBtTnQ9WyJob3RJbnN0YW5jZSJdLHZOdD1bInF1ZXJ5''@;'; put 'put ''RmlsdGVyIl0seU50PSgpPT5bIiIsIiAiXTtmdW5jdGlvbiBiTnQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDU1KSxHdCgxLCJjbHItc3Bpbm5lciIsNTYpLGhlKCkpfWZ1bmN0aW9uIF9OdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDYyKX1mdW5jdGlvbiB3TnQoYyxsKXtpZigxJmMpe2Nv''@;'; put 'put ''bnN0IGE9T24oKTtkZSgwLCJjbHItaWNvbiIsNjMpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpO3JldHVybiBoLmxpYnJhcmllc1NlYXJjaD0iIixDdChoLmxpYnJhcnlPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIENOdChjLGwpe2lmKDEmYyl7Y29uc3Qg''@;'; put 'put ''YT1PbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDU3KSgxLCJkaXYiLDU4KSgyLCJpbnB1dCIsNTksMSksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKTtyZXR1cm4gZmkoZi5saWJyYXJpZXNTZWFyY2gsaCl8fChmLmxpYnJhcmllc1NlYXJjaD1oKSxD''@;'; put 'put ''dChoKX0pLE90KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5saWJyYXJ5T25GaWx0ZXIoKSl9KSxoZSgpLGd0KDQsX050LDEsMCwiY2xyLWljb24iLDYwKSg1LHdOdCwxLDAsImNsci1pY29uIiw2MSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1mYSgzKSxkPU9lKCk7''@;'; put 'put ''ZmUoMiksbGkoIm5nTW9kZWwiLGQubGlicmFyaWVzU2VhcmNoKSxmZSgyKSxFZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxFZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIFNOdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDYyKX1mdW5jdGlvbiBNTnQoYyxs''@;'; put 'put ''KXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItaWNvbiIsNjMpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKSxPZSgpO2NvbnN0IGg9ZmEoMyksZj1PZSgyKS4kaW1wbGljaXQsdj1PZSgpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLEN0KHYudHJlZU9uRmls''@;'; put 'put ''dGVyKGYsInRhYmxlcyIpKX0pLGhlKCl9fWZ1bmN0aW9uIHhOdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDU3KSgxLCJkaXYiLDU4KSgyLCJpbnB1dCIsNjgsMiksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2Uo''@;'; put 'put ''MikuJGltcGxpY2l0O3JldHVybiBmaShmLnNlYXJjaFN0cmluZyxoKXx8KGYuc2VhcmNoU3RyaW5nPWgpLEN0KGgpfSksT3QoImtleXVwIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMikuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLnRyZWVPbkZpbHRlcihoLCJ0YWJsZXMiKSl9KSxo''@;'; put 'put ''ZSgpLGd0KDQsU050LDEsMCwiY2xyLWljb24iLDYwKSg1LE1OdCwxLDAsImNsci1pY29uIiw2MSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1mYSgzKSxkPU9lKDIpLiRpbXBsaWNpdDtmZSgyKSxFZSgiaWQiLCJzZWFyY2hfIitkLkxJQlJBUllSRUYpLGxpKCJuZ01vZGVsIixkLnNlYXJjaFN0''@;'; put 'put ''cmluZyksZmUoMiksRWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksRWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBFTnQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiw3NSl9ZnVuY3Rpb24gVE50KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsNzYpfWZ1bmN0''@;'; put 'put ''aW9uIEFOdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImJ1dHRvbiIsNzEpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCkubmdWYXIsZj1PZSgpLiRpbXBsaWNpdCx2PU9lKDIpLiRpbXBsaWNpdCxNPU9lKCk7cmV0dXJuIEN0KGg/IiI6TS5vblRhYmxl''@;'; put 'put ''Q2xpY2soZix2KSl9KSxvaSgxLDcyKSxndCgyLEVOdCwxLDAsImNsci1pY29uIiw3MykoMyxUTnQsMSwwLCJjbHItaWNvbiIsNzQpLHNpKCksUGUoNCksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoKS5uZ1ZhcixkPU9lKCkuJGltcGxpY2l0LGg9T2UoMikuJGltcGxpY2l0LGY9T2UoKTt4cigi''@;'; put 'put ''ZGMtbG9ja2VkLWNvbnRyb2wiLGEpKCJhY3RpdmUiLGYubGliVGFiQWN0aXZlKGguTElCUkFSWVJFRixkKSksZmUoKSxFZSgibmdTd2l0Y2giLGQuaW5jbHVkZXMoIi1GQyIpKSxmZSgpLEVlKCJuZ1N3aXRjaENhc2UiLCEwKSxmZSgpLEVlKCJuZ1N3aXRjaENhc2UiLCExKSxmZSgpLElyKCIg''@;'; put 'put ''IixkLnJlcGxhY2UoIi1GQyIsIiIpLCIgIil9fWZ1bmN0aW9uIGtOdChjLGwpezEmYyYmKGRlKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDc4KSgxLCJzcGFuIiksUGUoMiwiIFRvIHVubG9jayBhbGwgdGFibGVzLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8gIiksaGUoKSgp''@;'; put 'put ''KX1mdW5jdGlvbiBETnQoYyxsKXsxJmMmJihvaSgwKSxndCgxLGtOdCwzLDAsImNsci10b29sdGlwLWNvbnRlbnQiLDc3KSxzaSgpKX1mdW5jdGlvbiBJTnQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdG9vbHRpcCIpLGd0KDEsQU50LDUsOCwiYnV0dG9uIiw3MCkoMixETnQsMiwwLCJuZy1j''@;'; put 'put ''b250YWluZXIiLDQzKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC5uZ1ZhcixkPU9lKCkuJGltcGxpY2l0O2ZlKCksRWUoIm5nSWYiLGQubGVuZ3RoPjApLGZlKCksRWUoIm5nSWYiLGEpfX1mdW5jdGlvbiBSTnQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdHJlZS1ub2RlIiksZ3QoMSxJTnQsMywy''@;'; put 'put ''LCJjbHItdG9vbHRpcCIsNjkpLGhlKCkpLDImYyl7Y29uc3QgYT1sLmluZGV4LGQ9T2UoMyk7ZmUoKSxFZSgibmdWYXIiLGErMT5kLmxpY2VuY2VTdGF0ZS52YWx1ZS50YWJsZXNfaW5fbGlicmFyeV9saW1pdCl9fWZ1bmN0aW9uIExOdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAs''@;'; put 'put ''ImNsci10cmVlLW5vZGUiLDY1KSxPdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkudHJlZU5vZGVDbGlja2VkKGgsZikpfSksY2koImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCku''@;'; put 'put ''JGltcGxpY2l0O3JldHVybiBmaShmLmV4cGFuZGVkLGgpfHwoZi5leHBhbmRlZD1oKSxDdChoKX0pLGRlKDEsInAiLDY2KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpLiRpbXBsaWNpdCxmPU9lKCk7cmV0dXJuIGYubGliPWguTElCUkFSWVJFRixDdChmLmxpYnJh''@;'; put 'put ''cnlPbkNsaWNrKGguTElCUkFSWVJFRixoKSl9KSxHdCgyLCJjbHItaWNvbiIsNjcpLFBlKDMpLGhlKCksZ3QoNCx4TnQsNiw0LCJjbHItdHJlZS1ub2RlIiw4KSg1LFJOdCwyLDEsImNsci10cmVlLW5vZGUiLDkpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O3hyKCJjbHIt''@;'; put 'put ''ZXhwYW5kZWQiLGEuZXhwYW5kZWQpLGxpKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCksRWUoImNsckxvYWRpbmciLGEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxmZSgzKSxJcigiICIsYS5MSUJSQVJZTkFNRSwiICIpLGZlKCksRWUoIm5nSWYiLGEudGFibGVzKSxmZSgpLEVlKCJuZ0Zv''@;'; put 'put ''ck9mIixhLnRhYmxlcyl9fWZ1bmN0aW9uIE9OdChjLGwpe2lmKDEmYyYmKG9pKDApLGd0KDEsTE50LDYsNywiY2xyLXRyZWUtbm9kZSIsNjQpLHNpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLEVlKCJuZ0lmIiwhYS5oaWRkZW4mJmEuaW5Gb3JlZ3JvdW5kKX19ZnVuY3Rpb24g''@;'; put 'put ''UE50KGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw3OSkoMSwic3BhbiIsODApLFBlKDIsIiBMb2FkaW5nLi4uICIpLGhlKCkoKSl9ZnVuY3Rpb24gRk50KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2Iiw4MSkoMSwiZGl2Iiw4MikoMiwiZGl2Iiw4MykoMywiZGl2Iiw4NCkoNCwi''@;'; put 'put ''YnV0dG9uIiw4NSksR3QoNSwiY2xyLWljb24iLDg2KSxoZSgpLGRlKDYsImgzIiw0OCksUGUoNywiRXJyb3IiKSxoZSgpKCksZGUoOCwiZGl2IiwxNikoOSwicCIpLFBlKDEwLCJZb3UgY2Fubm90IHN1Ym1pdCBlbXB0eSBjbGF1c2VzIiksaGUoKSgpLGRlKDExLCJkaXYiLDI3KSgxMiwiYnV0''@;'; put 'put ''dG9uIiw4NyksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLm51bGxWYXJpYWJsZXM9ITEpfSksUGUoMTMsIiBPayAiKSxoZSgpKCkoKSgpKCl9fWZ1bmN0aW9uIEhOdChjLGwpezEmYyYmR3QoMCwiZGl2Iiw4OCl9ZnVuY3Rpb24gTk50KGMsbCl7MSZjJiZHdCgw''@;'; put 'put ''LCJhcHAtcXVlcnkiLG51bGwsMyl9ZnVuY3Rpb24gVk50KGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw4OSkoMSwic3BhbiIsOTApLFBlKDIsIiBMb2FkaW5nLi4uICIpLGhlKCksZGUoMywiZGl2Iiw5MSkoNCwicCIsOTIpLFBlKDUsIkxvYWRpbmcgVGFibGUgVmlld2VyIiksaGUoKSgpKCkpfWZ1''@;'; put 'put ''bmN0aW9uIEJOdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1pY29uIiwxMTYpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKSxPZSgpO2NvbnN0IGg9ZmEoNSk7cmV0dXJuIEN0KE9lKDIpLnNlYXJjaFRhYmxlKGgpKX0pLGhlKCl9fWZ1bmN0aW9uIGpOdChjLGwpezEm''@;'; put 'put ''YyYmKGRlKDAsInNwYW4iLDExNyksUGUoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24gek50KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMTE4KX1mdW5jdGlvbiBVTnQoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiwxMTkpLFBlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgz''@;'; put 'put ''KTtmZSgpLElyKCIgIixudWxsPT1hLnRhYmxlVGl0bGU/bnVsbDphLnRhYmxlVGl0bGUucmVwbGFjZSgiLUZDIiwiIiksIiAiKX19ZnVuY3Rpb24gWk50KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMTIxKSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoNCk7''@;'; put 'put ''ZmUoKSxJcigiICIsYS5kc05vdGUsIiAiKX19ZnVuY3Rpb24gV050KGMsbCl7MSZjJiYob2koMCksZ3QoMSxaTnQsMiwxLCJjbHItdG9vbHRpcC1jb250ZW50IiwxMjApLHNpKCkpfWZ1bmN0aW9uIFlOdChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxQZSgxKSxkbCgyLCJ0aG91c2FuZFNl''@;'; put 'put ''cGFyYXRvciIpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSg0KTtmZSgpLHNQKCIgKCIsWDcoMiw0LGEubnVtYmVyT2ZSb3dzLCIsIiksIiAiLDE9PT1hLm51bWJlck9mUm93cz8icm93Ijoicm93cyIsIiwgIixhLmZpbHRlckNvbHMubGVuZ3RoLCIiLDE9PT1hLmZpbHRlckNvbHMubGVuZ3RoPyIg''@;'; put 'put ''Y29sIjoiIGNvbHMiLCIpICIpfX1mdW5jdGlvbiBHTnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtvaSgwKSxndCgxLFlOdCwzLDcsInNwYW4iLDQzKSxkZSgyLCJjbHItaWNvbiIsMTIyKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDMpLnJlbG9hZFRhYmxl''@;'; put 'put ''RGF0YSgpKX0pLGhlKCksc2koKX1pZigyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoKSxFZSgibmdJZiIsbnVsbCE9PWEubnVtYmVyT2ZSb3dzKX19ZnVuY3Rpb24gJE50KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2IiwxMjgpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''d3QoYSksQ3QoT2UoNSkuZWRpdFRhYmxlKCkpfSksR3QoMSwiY2xyLWljb24iLDEzNCksZGUoMiwic3BhbiIpLFBlKDMsIkVkaXQiKSxoZSgpKCl9fWZ1bmN0aW9uIEtOdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsMTI4KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIHd0KGEpLEN0KE9lKDUpLmdvVG9MaW5lYWdlKCkpfSksR3QoMSwiY2xyLWljb24iLDEzNSksZGUoMiwic3BhbiIpLFBlKDMsIkxpbmVhZ2UiKSxoZSgpKCl9fWZ1bmN0aW9uIFhOdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1kcm9wZG93bi1tZW51IiwxMjcpKDEs''@;'; put 'put ''ImRpdiIsMTI4KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDQpLm5ld1ZpZXdib3goKSl9KSxHdCgyLCJjbHItaWNvbiIsMTI5KSxkZSgzLCJzcGFuIiksUGUoNCwiVmlld2JveGVzIiksaGUoKSgpLGd0KDUsJE50LDQsMCwiZGl2IiwxMzApKDYsS050LDQsMCwi''@;'; put 'put ''ZGl2IiwxMzApLGRlKDcsImRpdiIsMTI4KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDQpLm9wZW5RYigpKX0pLEd0KDgsImNsci1pY29uIiwxMzEpLGRlKDksInNwYW4iKSxQZSgxMCwiRmlsdGVyIiksaGUoKSgpLGRlKDExLCJkaXYiLDEyOCksT3QoImNsaWNr''@;'; put 'put ''IixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSg0KS5vcGVuRG93bmxvYWQ9ITApfSksR3QoMTIsImNsci1pY29uIiwxMzIpLGRlKDEzLCJzcGFuIiksUGUoMTQsIkRvd25sb2FkIiksaGUoKSgpLGRlKDE1LCJkaXYiLDEyOCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChh''@;'; put 'put ''KSxDdChPZSg0KS5zaG93V2ViUXVlcnkoKSl9KSxHdCgxNiwiY2xyLWljb24iLDEzMyksZGUoMTcsInNwYW4iKSxQZSgxOCwiV2ViIFF1ZXJ5IFVSTCIpLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSg0KTtmZSg1KSxFZSgibmdJZiIsYS50YWJsZUVkaXRFeGlzdHMoKSksZmUoKSxFZSgi''@;'; put 'put ''bmdJZiIsYS50YWJsZXVyaSl9fWZ1bmN0aW9uIHFOdChjLGwpezEmYyYmKGRlKDAsImNsci1kcm9wZG93biIsMTIzKSgxLCJidXR0b24iLDEyNCksR3QoMiwiY2xyLWljb24iLDEyNSksUGUoMywiIG9wdGlvbnMgIiksaGUoKSxndCg0LFhOdCwxOSwyLCJjbHItZHJvcGRvd24tbWVudSIsMTI2''@;'; put 'put ''KSxoZSgpKSwyJmMmJkVlKCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayIsITApfWZ1bmN0aW9uIEpOdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTM2KSgxLCJzcGFuIiksUGUoMiwiRklMVEVSIDogIiksZGUoMywiYiIpLFBlKDQpLGhlKCkoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUo''@;'; put 'put ''NCksQ3IoYS5xdWVyeVRleHQpfX1mdW5jdGlvbiBRTnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDk5KSgxLCJzZWN0aW9uIiwxMDApKDIsImZvcm0iLDEwMSkoMywiZGl2IiwxMDIpKDQsImlucHV0IiwxMDMsNCksT3QoImtleXVwLmVudGVyIixmdW5jdGlvbigpe3d0''@;'; put 'put ''KGEpO2NvbnN0IGg9ZmEoNSk7cmV0dXJuIEN0KE9lKDIpLnNlYXJjaFRhYmxlKGgpKX0pLGhlKCksZ3QoNixCTnQsMSwwLCJjbHItaWNvbiIsMTA0KSg3LGpOdCwyLDAsInNwYW4iLDEwNSksaGUoKSxkZSg4LCJjbHItY2hlY2tib3gtY29udGFpbmVyIikoOSwiY2xyLWNoZWNrYm94LXdyYXBw''@;'; put 'put ''ZXIiKSgxMCwiaW5wdXQiLDEwNiksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoMik7cmV0dXJuIGZpKGYuc2VhcmNoTnVtZXJpYyxoKXx8KGYuc2VhcmNoTnVtZXJpYz1oKSxDdChoKX0pLGhlKCksZGUoMTEsImxhYmVsIiksUGUoMTIsIk51bWVyaWMi''@;'; put 'put ''KSxoZSgpKCkoKSgpKCksZGUoMTMsImRpdiIsMTA3KSgxNCwicCIsMTA4KSgxNSwiY2xyLXRvb2x0aXAiLDEwOSkoMTYsImNsci1pY29uIiwxMTApLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikuZGF0YXNldEluZm89ITApfSksaGUoKSxndCgxNyx6TnQsMSww''@;'; put 'put ''LCJjbHItaWNvbiIsMTExKSgxOCxVTnQsMiwxLCJzcGFuIiwxMTIpKDE5LFdOdCwyLDAsIm5nLWNvbnRhaW5lciIsNDMpLGhlKCksZ3QoMjAsR050LDMsMSwibmctY29udGFpbmVyIiw0MyksaGUoKSgpLGRlKDIxLCJkaXYiLDExMyksZ3QoMjIscU50LDUsMSwiY2xyLWRyb3Bkb3duIiwxMTQp''@;'; put 'put ''LGhlKCksZ3QoMjMsSk50LDUsMSwiZGl2IiwxMTUpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDQpLEVlKCJ0eXBlIixhLnNlYXJjaE51bWVyaWM/Im51bWJlciI6InRleHQiKSxmZSgyKSxFZSgibmdJZiIsIWEuc2VhcmNoTG9hZGluZyksZmUoKSxFZSgibmdJZiIsYS5zZWFyY2hM''@;'; put 'put ''b2FkaW5nKSxmZSgzKSxsaSgibmdNb2RlbCIsYS5zZWFyY2hOdW1lcmljKSxmZSg3KSxFZSgibmdJZiIsbnVsbD09YS50YWJsZVRpdGxlP251bGw6YS50YWJsZVRpdGxlLmluY2x1ZGVzKCItRkMiKSksZmUoKSxFZSgibmdJZiIsYS50YWJsZVRpdGxlJiZhLnRhYmxlVGl0bGUubGVuZ3RoPjAp''@;'; put 'put ''LGZlKCksRWUoIm5nSWYiLGEuZHNOb3RlJiZhLmRzTm90ZS5sZW5ndGg+MCksZmUoKSxFZSgibmdJZiIsYS50YWJsZVRpdGxlJiZhLnRhYmxlVGl0bGUubGVuZ3RoPjApLGZlKDIpLEVlKCJuZ0lmIixhLnRhYmxlVGl0bGUmJiFhLmFib3J0QWN0aXZlKSxmZSgpLEVlKCJuZ0lmIiwiMT0xIiE9''@;'; put 'put ''PWEucXVlcnlUZXh0JiYhdGwoMTAseU50KS5pbmNsdWRlcyhhLnF1ZXJ5VGV4dCkmJiFhLmFib3J0QWN0aXZlKX19ZnVuY3Rpb24gZVZ0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwxMzcpLEd0KDEsImltZyIsMTM4KSxkZSgyLCJoMyIsMTM5KSxQZSgzLCIgUGxlYXNlIHNlbGVjdCBhIGxpYnJh''@;'; put 'put ''cnkgIiksaGUoKSgpKX1mdW5jdGlvbiB0VnQoYyxsKXsxJmMmJkd0KDAsImNsci1zcGlubmVyIiw1Nil9ZnVuY3Rpb24gblZ0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwxNDYpLEd0KDEsImltZyIsMTQ3KSxkZSgyLCJwIiwxMzkpLFBlKDMsIiBQbGVhc2Ugc2VsZWN0IGEgdGFibGUgIiksaGUo''@;'; put 'put ''KSgpKX1mdW5jdGlvbiByVnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJwIiwxNTApLFBlKDEsIiBObyBsaWJyYXJ5IGluZm8gZm91bmQuIENsaWNrICIpLGRlKDIsImNsci1pY29uIiwxNTEpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoNCkucmVs''@;'; put 'put ''b2FkTGliSW5mbygpKX0pLGhlKCksUGUoMywiIGJ1dHRvbiB0byByZWZyZXNoLiAiKSxoZSgpfX1mdW5jdGlvbiBpVnQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTIpLFBlKDIsIkVOR0lORToiKSxoZSgpLGRlKDMsInRkIiwxNTMpLFBlKDQpLGhlKCkoKSksMiZjKXtjb25z''@;'; put 'put ''dCBhPU9lKDUpO2ZlKDQpLElyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLkVOR0lORToiIiwiICIpfX1mdW5jdGlvbiBhVnQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTIpLFBlKDIsIkxJQklEOiIpLGhlKCksZGUoMywidGQiLDE1MyksUGUoNCksaGUoKSgpKSwy''@;'; put 'put ''JmMpe2NvbnN0IGE9T2UoNSk7ZmUoNCksSXIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uTElCSUQ6IiIsIiAiKX19ZnVuY3Rpb24gb1Z0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsMTUyKSxQZSgyLCJMSUJOQU1FOiIpLGhlKCksZGUoMywidGQiLDE1MyksUGUoNCks''@;'; put 'put ''aGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoNSk7ZmUoNCksSXIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uTElCTkFNRToiIiwiICIpfX1mdW5jdGlvbiBzVnQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTIpLFBlKDIsIkxJQlNJWkU6IiksaGUoKSxkZSgzLCJ0ZCIs''@;'; put 'put ''MTUzKSxQZSg0KSxkbCg1LCJjb252ZXJ0U2l6ZSIpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDUpO2ZlKDQpLElyKCIgIixhLmxpYmluZm9bMF0/amMoNSwxLGEubGliaW5mb1swXS5MSUJTSVpFKToiIiwiICIpfX1mdW5jdGlvbiBsVnQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRk''@;'; put 'put ''IiwxNTIpLFBlKDIsIk9XTkVSUzoiKSxoZSgpLGRlKDMsInRkIiwxNTMpLFBlKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDUpO2ZlKDQpLElyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLk9XTkVSUzoiIiwiICIpfX1mdW5jdGlvbiBjVnQoYyxsKXtpZigxJmMmJihkZSgwLCJ0''@;'; put 'put ''ciIpKDEsInRkIiwxNTIpLFBlKDIsIlBBVEhTOiIpLGhlKCksZGUoMywidGQiLDE1MyksUGUoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoNSk7ZmUoNCksSXIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uUEFUSFM6IiIsIiAiKX19ZnVuY3Rpb24gdVZ0KGMsbCl7aWYoMSZjJiYo''@;'; put 'put ''ZGUoMCwidHIiKSgxLCJ0ZCIsMTUyKSxQZSgyLCJQRVJNUzoiKSxoZSgpLGRlKDMsInRkIiwxNTMpLFBlKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDUpO2ZlKDQpLElyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLlBFUk1TOiIiLCIgIil9fWZ1bmN0aW9uIGRWdChjLGwpe2lm''@;'; put 'put ''KDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDE1MiksUGUoMiwiU0NIRU1BUzoiKSxoZSgpLGRlKDMsInRkIiwxNTMpLFBlKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDUpO2ZlKDQpLElyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLlNDSEVNQVM6IiIsIiAiKX19ZnVuY3Rpb24g''@;'; put 'put ''aFZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsMTUyKSxQZSgyLCJUQUJMRV9DTlQ6IiksaGUoKSxkZSgzLCJ0ZCIsMTUzKSxQZSg0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSg1KTtmZSg0KSxJcigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5UQUJMRV9DTlQ6IiIs''@;'; put 'put ''IiAiKX19ZnVuY3Rpb24gZlZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsMTUyKSxQZSgyLCJDQVRBTE9HX0NOVDoiKSxoZSgpLGRlKDMsInRkIiwxNTMpLFBlKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDUpO2ZlKDQpLElyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZv''@;'; put 'put ''WzBdLkNBVEFMT0dfQ05UOiIiLCIgIil9fWZ1bmN0aW9uIHBWdChjLGwpe2lmKDEmYyYmKG9pKDApLGRlKDEsInRhYmxlIiksZ3QoMixpVnQsNSwxLCJ0ciIsNDMpKDMsYVZ0LDUsMSwidHIiLDQzKSg0LG9WdCw1LDEsInRyIiw0MykoNSxzVnQsNiwzLCJ0ciIsNDMpKDYsbFZ0LDUsMSwidHIi''@;'; put 'put ''LDQzKSg3LGNWdCw1LDEsInRyIiw0MykoOCx1VnQsNSwxLCJ0ciIsNDMpKDksZFZ0LDUsMSwidHIiLDQzKSgxMCxoVnQsNSwxLCJ0ciIsNDMpKDExLGZWdCw1LDEsInRyIiw0MyksaGUoKSxzaSgpKSwyJmMpe2NvbnN0IGE9T2UoNCk7ZmUoMiksRWUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBd''@;'; put 'put ''LkVOR0lORSksZmUoKSxFZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uTElCSUQpLGZlKCksRWUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLkxJQk5BTUUpLGZlKCksRWUoIm5nSWYiLG51bGwhPT1hLmxpYmluZm9bMF0uTElCU0laRSksZmUoKSxFZSgibmdJZiIsIiIhPT1hLmxpYmluZm9b''@;'; put 'put ''MF0uT1dORVJTKSxmZSgpLEVlKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5QQVRIUyksZmUoKSxFZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uUEVSTVMpLGZlKCksRWUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLlNDSEVNQVMpLGZlKCksRWUoIm5nSWYiLG51bGwhPT1hLmxpYmluZm9b''@;'; put 'put ''MF0uVEFCTEVfQ05UKSxmZSgpLEVlKCJuZ0lmIixudWxsIT09YS5saWJpbmZvWzBdLkNBVEFMT0dfQ05UKX19ZnVuY3Rpb24gZ1Z0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxNDgpLGd0KDEsclZ0LDQsMCwicCIsMTQ5KSgyLHBWdCwxMiwxMCwibmctY29udGFpbmVyIiw0MyksaGUoKSks''@;'; put 'put ''MiZjKXtjb25zdCBhPU9lKDMpO2ZlKCksRWUoIm5nSWYiLGEubGliaW5mby5sZW5ndGg8MSksZmUoKSxFZSgibmdJZiIsYS5saWJpbmZvLmxlbmd0aD4wKX19ZnVuY3Rpb24gbVZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7b2koMCksZGUoMSwiZGl2IiwxNDApLEd0KDIsInNlY3Rpb24i''@;'; put 'put ''LDEwMCksZGUoMywiZGl2IiwxNDEpKDQsInAiLDkyKSxQZSg1KSxoZSgpLGRlKDYsImNsci1pY29uIiwxMjIpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikucmVsb2FkTGliSW5mbygpKX0pLGhlKCkoKSxHdCg3LCJkaXYiLDExMyksaGUoKSxkZSg4LCJkaXYi''@;'; put 'put ''LDE0MiksZ3QoOSx0VnQsMSwwLCJjbHItc3Bpbm5lciIsMTQzKSxoZSgpLGd0KDEwLG5WdCw0LDAsImRpdiIsMTQ0KSgxMSxnVnQsMywyLCJkaXYiLDE0NSksc2koKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7ZmUoNSksSXIoIiAiLGEubGliLCIgIiksZmUoNCksRWUoIm5nSWYiLG51bGw9PT1h''@;'; put 'put ''LmxpYmluZm8pLGZlKCksRWUoIm5nSWYiLG51bGwhPT1hLmxpYmluZm8pLGZlKCksRWUoIm5nSWYiLG51bGwhPT1hLmxpYmluZm8pfX1mdW5jdGlvbiB2VnQoYyxsKXsxJmMmJihkZSgwLCJoMyIsMTU3KSxQZSgxLCIgTm8gZGF0YSBmb3VuZCB3aXRoIGdpdmVuIGNvbmRpdGlvbnMgIiksaGUo''@;'; put 'put ''KSl9ZnVuY3Rpb24geVZ0KGMsbCl7MSZjJiYoZGUoMCwiaDMiLDE1NyksUGUoMSwiIE5vIGRhdGEgZm91bmQgZHVlIHRvIHNhcyByZXF1ZXN0IGVycm9yICIpLGhlKCkpfWZ1bmN0aW9uIGJWdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTU0KSxHdCgxLCJjbHItaWNvbiIsMTU1KSxndCgy''@;'; put 'put ''LHZWdCwyLDAsImgzIiwxNTYpKDMseVZ0LDIsMCwiaDMiLDE1NiksaGUoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDIpLEVlKCJuZ0lmIixhLm5vRGF0YSksZmUoKSxFZSgibmdJZiIsYS5ub0RhdGFSZXFFcnIpfX1mdW5jdGlvbiBfVnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDE1OCko''@;'; put 'put ''MSwiZGl2IiwxNTkpLEd0KDIsImhvdC10YWJsZSIsMTYwLDUpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDIpLEVlKCJkYXRhIixhLmhvdFRhYmxlLmRhdGEpKCJzZXR0aW5ncyIsYS5ob3RUYWJsZVNldHRpbmdzKX19ZnVuY3Rpb24gd1Z0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIs''@;'; put 'put ''MTYxKSxQZSgxKSxHdCgyLCJjb250YWN0LWxpbmsiKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoKSxJcigiIFRvIGRpc3BsYXkgbW9yZSB0aGFuICIsYS5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZCwiIHJvd3MsIGNvbnRhY3QgIil9fWZ1bmN0aW9uIENWdChj''@;'; put 'put ''LGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsOTMpLGd0KDEsUU50LDI0LDExLCJkaXYiLDk0KSgyLGVWdCw0LDAsImRpdiIsOTUpKDMsbVZ0LDEyLDQsIm5nLWNvbnRhaW5lciIsNDMpKDQsYlZ0LDQsMiwiZGl2Iiw5NikoNSxfVnQsNCwyLCJkaXYiLDk3KSxkZSg2LCJkaXYiKSxndCg3LHdWdCwz''@;'; put 'put ''LDEsInAiLDk4KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCksRWUoIm5nSWYiLGEudGFibGUpLGZlKCksRWUoIm5nSWYiLCEoYS5saWJ8fGEudGFibGV8fGEubm9EYXRhUmVxRXJyfHxhLm5vRGF0YSkpLGZlKCksRWUoIm5nSWYiLCFhLm5vRGF0YSYmIWEubm9EYXRhUmVxRXJyJiYh''@;'; put 'put ''YS50YWJsZSYmYS5saWIpLGZlKCksRWUoIm5nSWYiLGEubm9EYXRhfHxhLm5vRGF0YVJlcUVyciksZmUoKSxFZSgibmdJZiIsIWEubm9EYXRhJiYhYS5ub0RhdGFSZXFFcnImJmEudGFibGUpLGZlKDIpLEVlKCJuZ0lmIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2Vk''@;'; put 'put ''IT09YS5JbmZpbml0eSYmYS5ob3RUYWJsZS5kYXRhJiZhLmhvdFRhYmxlLmRhdGEubGVuZ3RoPmEubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdlcl9yb3dzX2FsbG93ZWQpfX1sZXQgTXo9KCgpPT57Y2xhc3MgY3t1cGRhdGVIb3RUYWJsZVNldHRpbmdzKCl7dGhpcy5ob3RUYWJsZVNldHRpbmdz''@;'; put 'put ''PXttdWx0aUNvbHVtblNvcnRpbmc6ITAsdmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQ6MzAsY29sSGVhZGVyczp0aGlzLmhvdFRhYmxlLmNvbEhlYWRlcnMsY29sdW1uczp0aGlzLmhvdFRhYmxlLmNvbHVtbnMsY29weVBhc3RlOnRoaXMuaG90VGFibGUuY29weVBhc3RlLGNvbnRleHRNZW51''@;'; put 'put ''OnRoaXMuaG90VGFibGUuY29udGV4dE1lbnUsZmlsdGVyczohMCxkcm9wZG93bk1lbnU6dGhpcy5ob3RUYWJsZS5kcm9wZG93bk1lbnUsaGVpZ2h0OnRoaXMuaG90VGFibGUuaGVpZ2h0LHN0cmV0Y2hIOiJhbGwiLG1vZGlmeUNvbFdpZHRoOnRoaXMubWF4V2lkdGhDaGVrZXIsY2VsbHM6dGhp''@;'; put 'put ''cy5ob3RUYWJsZS5jZWxscyxtYXhSb3dzOnRoaXMuaG90VGFibGUubWF4Um93cyxtYW51YWxDb2x1bW5SZXNpemU6ITAsYWZ0ZXJHZXRDb2xIZWFkZXI6dGhpcy5ob3RUYWJsZS5hZnRlckdldENvbEhlYWRlcixyb3dIZWFkZXJzOnRoaXMuaG90VGFibGUucm93SGVhZGVycyxyb3dIZWFkZXJX''@;'; put 'put ''aWR0aDp0aGlzLmhvdFRhYmxlLnJvd0hlYWRlcldpZHRoLHJvd0hlaWdodHM6dGhpcy5ob3RUYWJsZS5yb3dIZWlnaHRzLGxpY2Vuc2VLZXk6dGhpcy5ob3RUYWJsZS5saWNlbnNlS2V5LGNsYXNzTmFtZToiaHREYXJrIn19Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxVLHRlLG9lKXt0aGlz''@;'; put 'put ''LmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5zYXNTdG9yZVNlcnZpY2U9ZCx0aGlzLnNhc1NlcnZpY2U9aCx0aGlzLnJvdXRlcj1mLHRoaXMucm91dGU9dix0aGlzLmV2ZW50U2VydmljZT1NLHRoaXMubG9nZ2VyU2VydmljZT1ELHRoaXMuaGVscGVyU2VydmljZT1VLHRoaXMubG9jYXRpb249dGUs''@;'; put 'put ''dGhpcy5jZGY9b2UsdGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0PW5ldyBEZyx0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSx0aGlzLmxpYnJhcmllc1NlYXJjaD0iIix0aGlzLmxpYnJhcnlUYWJsZXNSZWY9IiIsdGhpcy5saWJyYXJpZXNUcmVlRXhwYW5kZWQ9ITEsdGhpcy5saWJpbmZvPW51bGws''@;'; put 'put ''dGhpcy50YWJsZXVyaT1udWxsLHRoaXMuZmlsdGVyPSExLHRoaXMuZmlsdGVyQ29scz1bXSx0aGlzLm51bGxWYXJpYWJsZXM9ITEsdGhpcy5hYm9ydEFjdGl2ZT0hMSx0aGlzLnVybEZpbHRlclBrPW51bGwsdGhpcy5xdWVyeVRleHQ9IiIsdGhpcy53ZWJRdWVyeVRleHQ9IiIsdGhpcy5xdWVy''@;'; put 'put ''eUVycj0hMSx0aGlzLnRhYmxlRmxhZz0hMCx0aGlzLmxpYnJhcmllc0xvYWRpbmc9ITEsdGhpcy5sb2FkaW5nVGFibGVWaWV3PSExLHRoaXMuc3dpdGNoRmxhZz0hMSx0aGlzLm5vRGF0YT0hMSx0aGlzLm5vRGF0YVJlcUVycj0hMSx0aGlzLnRhYmxlRGlzYWJsZT0hMSx0aGlzLmFjdGlvbkRp''@;'; put 'put ''c2FibGU9ITEsdGhpcy5vcGVuRG93bmxvYWQ9ITEsdGhpcy53ZWJRdWVyeT0hMSx0aGlzLndlYlF1ZXJ5VGFiPSExLHRoaXMuZG93bmxvYWRGb3JtYXQ9IkNTViIsdGhpcy5zYXNqc0NvbmZpZz1uZXcgZDIuU0FTanNDb25maWcsdGhpcy5zZWFyY2hMb2FkaW5nPSExLHRoaXMuc2VhcmNoTnVt''@;'; put 'put ''ZXJpYz0hMSx0aGlzLmhvdFRhYmxlU2V0dGluZ3M9e30sdGhpcy5udW1iZXJPZlJvd3M9bnVsbCx0aGlzLmhlYWRlclBrcz1bXSx0aGlzLiRkYXRhRm9ybWF0cz1udWxsLHRoaXMuZGF0YXNldEluZm89ITEsdGhpcy5kc21ldGE9W10sdGhpcy52ZXJzaW9ucz1bXSx0aGlzLmRzTm90ZT0iIix0''@;'; put 'put ''aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLkluZmluaXR5PTEvMCx0aGlzLmhvdFRhYmxlPXtkYXRhOltdLGNvbEhlYWRlcnM6W10sY29sdW1uczpbXSxoZWlnaHQ6ImNhbGMoMTAwdmggLSAxODJweCkiLG1heFJvd3M6dGhpcy5saWNlbmNl''@;'; put 'put ''U3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZHx8MS8wLHNldHRpbmdzOnt9LGxpY2Vuc2VLZXk6dm9pZCAwLHJvd0hlYWRlcnM6dmU9PiIgIixhZnRlckdldENvbEhlYWRlcjoodmUsd2UsRmUpPT57aWYoIXRoaXMuaG90SW5zdGFuY2V8fHRoaXMuaG90SW5zdGFuY2UuaXNEZXN0cm95''@;'; put 'put ''ZWR8fHRoaXMuaXNUYWJsZVN3aXRjaGluZyl3ZS5jbGFzc0xpc3QuYWRkKFhuLmhhbmRzb250YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyk7ZWxzZSB0cnl7Y29uc3QgV2U9dGhpcy5ob3RJbnN0YW5jZS5jb2xUb1Byb3AodmUpO1dlJiZ0aGlzLmhlYWRlclBrcy5pbmRleE9mKFdlKT4tMSYm''@;'; put 'put ''d2UuY2xhc3NMaXN0LmFkZCgicHJpbWFyeUtleUhlYWRlclN0eWxlIiksd2UuY2xhc3NMaXN0LmFkZChYbi5oYW5kc29udGFibGUuZGFya1RhYmxlSGVhZGVyQ2xhc3MpfWNhdGNoe3dlLmNsYXNzTGlzdC5hZGQoWG4uaGFuZHNvbnRhYmxlLmRhcmtUYWJsZUhlYWRlckNsYXNzKX19LHJvd0hl''@;'; put 'put ''YWRlcldpZHRoOjE1LHJvd0hlaWdodHM6MjAsY29udGV4dE1lbnU6WyJjb3B5X3dpdGhfY29sdW1uX2hlYWRlcnMiLCJjb3B5X2NvbHVtbl9oZWFkZXJzX29ubHkiXSxjb3B5UGFzdGU6e2NvcHlDb2x1bW5IZWFkZXJzOiEwLGNvcHlDb2x1bW5IZWFkZXJzT25seTohMH0sZHJvcGRvd25NZW51''@;'; put 'put ''OntpdGVtczp7bWFrZV9yZWFkX29ubHk6e25hbWU6Im1ha2VfcmVhZF9vbmx5In0sYWxpZ25tZW50OntuYW1lOiJhbGlnbm1lbnQifSxzcDE6e25hbWU6Ii0tLS0tLS0tLSJ9LGluZm86e25hbWU6InRlc3QgaW5mbyIscmVuZGVyZXI6KHZlLHdlLEZlLFdlLG50LGR0KT0+e2NvbnN0IG10PWRv''@;'; put 'put ''Y3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtsZXQgJHQsenQ9Ik5vIGluZm8gZm91bmQiO2lmKHRoaXMuaG90SW5zdGFuY2UmJiF0aGlzLmhvdEluc3RhbmNlLmlzRGVzdHJveWVkJiYhdGhpcy5pc1RhYmxlU3dpdGNoaW5nKXt0cnl7Y29uc3QgeW49dGhpcy5ob3RJbnN0YW5jZS5nZXRT''@;'; put 'put ''ZWxlY3RlZCgpfHxbXSx3bj10aGlzLmhvdEluc3RhbmNlLmNvbFRvUHJvcCh5bj95blswXVsxXTotMSk7JHQ9dGhpcy4kZGF0YUZvcm1hdHM/LnZhcnNbd25dfWNhdGNoeyR0PXZvaWQgMH0kdCYmKHp0PWBMQUJFTDogJHskdD8ubGFiZWx9PGJyPlRZUEU6ICR7JHQ/LnR5cGV9PGJyPkxFTkdU''@;'; put 'put ''SDogJHskdD8ubGVuZ3RofTxicj5GT1JNQVQ6ICR7JHQ/LmZvcm1hdH1gKX1yZXR1cm4gbXQuaW5uZXJIVE1MPXp0LG10fX19fX0sdGhpcy5ob3RJbnN0YW5jZT1udWxsLHRoaXMuaG90SW5zdGFuY2VDbGlja0xpc3RlbmVyPSExLHRoaXMuaXNUYWJsZVN3aXRjaGluZz0hMSx0aGlzLnN3aXRj''@;'; put 'put ''aGluZ1RpbWVvdXQ9bnVsbCx0aGlzLmxhc3RTZXR1cFRpbWU9MCx0aGlzLnZpZXdib3hPcGVuPSExLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCl9bmdPbkluaXQoKXsiIiE9PVhuLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uJiYwPT09T2JqZWN0Lmtl''@;'; put 'put ''eXModGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMpLmxlbmd0aCYmdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1huLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSksdm9pZCAwIT09dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVt''@;'; put 'put ''JiYoWG4udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvZGF0YSIpLHRoaXMubGljZW5jZVNlcnZpY2UuaG90X2xpY2Vuc2Vfa2V5LnN1YnNjcmliZShhPT57dGhpcy5ob3RUYWJsZS5saWNlbnNlS2V5PWEsdGhpcy51cGRhdGVIb3RUYWJsZVNldHRpbmdzKCl9KX1uZXdWaWV3Ym94KCl7''@;'; put 'put ''dGhpcy52aWV3Ym94T3Blbj0hMH1yZXNldEZpbHRlcigpe3RoaXMucXVlcnlGaWx0ZXJDb21wTGlzdC5maXJzdCYmdGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0LmZpcnN0LnJlc2V0RmlsdGVyKCl9c2VhcmNoVGFibGUoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7ZC5zZWFy''@;'; put 'put ''Y2hMb2FkaW5nPSEwO2xldCBoPWEudmFsdWUsZj1kLmxpYisiLiIrZC50YWJsZSx2PXBhcnNlSW50KGQucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkKXx8MDt5aWVsZCBkLnNhc1N0b3JlU2VydmljZS52aWV3RGF0YVNlYXJjaChoLGQuc2VhcmNoTnVtZXJpYyxmLHYpLnRoZW4oTT0+''@;'; put 'put ''e00uc2FzcGFyYW1zfHxNLnZpZXdEYXRhPyhkLmhvdFRhYmxlLmRhdGE9TS52aWV3ZGF0YSxkLiRkYXRhRm9ybWF0cz1NLiR2aWV3ZGF0YSxkLmRzbWV0YT1NLmRzbWV0YSxkLnZlcnNpb25zPU0udmVyc2lvbnN8fFtdLGQuc2V0RFNOb3RlKCksZC5udW1iZXJPZlJvd3M9TS5zYXNwYXJhbXNb''@;'; put 'put ''MF0uTk9CUyxkLnF1ZXJ5VGV4dD1NLnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVCxkLmhlYWRlclBrcz1NLnNhc3BhcmFtc1swXS5QS19GSUVMRFMuc3BsaXQoIiAiKSwwPT09ZC5ob3RUYWJsZS5kYXRhLmxlbmd0aD9kLm5vRGF0YT0hMDooZC5ub0RhdGE9ITEsZC50YWJsZUZsYWc9ITEsZC5z''@;'; put 'put ''ZXR1cEhvdCgpKSk6ZC5zZWFyY2hMb2FkaW5nPSExfSkuY2F0Y2goTT0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihNKX0pLGQuc2VhcmNoTG9hZGluZz0hMX0pKCl9cmVsb2FkVGFibGVEYXRhKCl7dGhpcy52aWV3RGF0YSh0aGlzLnVybEZpbHRlclBrfHwwKX1yZWxvYWRMaWJJbmZvKCl7dmFy''@;'; put 'put ''IGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5saWJpbmZvPW51bGwsYS5zYXNTdG9yZVNlcnZpY2UucmVmcmVzaExpYkluZm8oYS5saWIpLnRoZW4oZnVuY3Rpb24oKXt2YXIgZD1lZShmdW5jdGlvbiooaCl7YS5saWJpbmZvPWgubGliaW5mbyxYbi52aWV3ZXIubGliaW5mbz1hLmxp''@;'; put 'put ''YmluZm87Y29uc3QgZj1hLmxpYnJhcmllcy5maW5kKHY9PnYuTElCUkFSWVJFRj09PWEubGliKTtmJiYoZi5saWJpbmZvPWEubGliaW5mbyl9KTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuIGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxkPT57YS5sb2dnZXJTZXJ2aWNlLmVycm9yKGQp''@;'; put 'put ''LG51bGw9PT1hLmxpYmluZm8mJihhLmxpYmluZm89W10pfSl9KSgpfWZpbHRlckZuKGEpe3RoaXMubGlicmFyaWVzPXRoaXMubGlicmFyaWVzLmZpbHRlcihoPT4tMSE9PWguTElCUkFSWU5BTUUudG9Mb3dlckNhc2UoKS5pbmRleE9mKGEudG9Mb2NhbGVMb3dlckNhc2UoKSkpfWRvd25sb2Fk''@;'; put 'put ''RGF0YSgpe2xldCBhPXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLGQ9dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2M7Y29uc3QgaD10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO2xldCBELGY9IiZ0eXBlPSIrdGhpcy5kb3dubG9hZEZvcm1hdCx2PSImdGFibGU9Iit0aGlzLnRh''@;'; put 'put ''YmxlVGl0bGUsTT0iU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU/YCZfY29udGV4dG5hbWU9JHt0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lfWA6IiI7RD10eXBlb2YgdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWQ+InUiPzA6cGFyc2VJbnQodGhp''@;'; put 'put ''cy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWQpLHdpbmRvdy5vcGVuKGEraCsiLz9fcHJvZ3JhbT0iK2QrIi9zZXJ2aWNlcy9wdWJsaWMvZ2V0cmF3ZGF0YSIrZit2K00rIiZmaWx0ZXI9IitEKSx0aGlzLm9wZW5Eb3dubG9hZD0hMX1kb3dubG9hZERETCgpe2xldCBhPXRoaXMubGli''@;'; put 'put ''LGQ9dGhpcy50YWJsZSxoPXRoaXMuZG93bmxvYWRGb3JtYXQucmVwbGFjZSgiX0RETCIsIiIpLGY9dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdj10aGlzLnNhc2pzQ29uZmlnLmFwcExvYztjb25zdCBNPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4o''@;'; put 'put ''ZitNKyIvP19wcm9ncmFtPSIrdisiL3NlcnZpY2VzL3B1YmxpYy9nZXRkZGwiK2AmZHM9JHtkfSZsaWJyZWY9JHthfSZmbGF2b3VyPSR7aH0keyJTQVNWSVlBIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT9gJl9jb250ZXh0bmFtZT0ke3RoaXMuc2FzanNDb25maWcuY29udGV4dE5h''@;'; put 'put ''bWV9YDoiIn1gKSx0aGlzLm9wZW5Eb3dubG9hZD0hMX1vbkNsaUNvbW1hbmRGb2N1cyhhKXthLnByZXZlbnREZWZhdWx0KCksYS50YXJnZXQuc2VsZWN0KCl9ZWRpdFRhYmxlKCl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK3RoaXMubGliVGFiKX10YWJsZUVkaXRFeGlz''@;'; put 'put ''dHMoKXtsZXQgYT17fTthPVhuLmVkaXRvci5saWJzQW5kVGFibGVzO2xldCBkPXRoaXMubGliVGFiLnNwbGl0KCIuIilbMV0saD10aGlzLmxpYlRhYi5zcGxpdCgiLiIpWzBdO3JldHVybiEhYVtoXSYmYVtoXS5pbmNsdWRlcyhkKX1nb1RvTGluZWFnZSgpe2xldCBkPWAvdmlldy9saW5lYWdl''@;'; put 'put ''LyR7dGhpcy50YWJsZXVyaS5zcGxpdCgiXFwiKVsxXX0vUkVWRVJTRWA7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChkKX1zaG93V2ViUXVlcnkoKXtsZXQgYTt0aGlzLndlYlF1ZXJ5PSEwLGE9dHlwZW9mIHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkPiJ1Ij8wOnBhcnNl''@;'; put 'put ''SW50KHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkKTtsZXQgZD13aW5kb3cubG9jYXRpb24ucG9ydC5sZW5ndGg+MD8iOiIrd2luZG93LmxvY2F0aW9uLnBvcnQ6IiI7Y29uc3QgaD10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO2xldCB2PWAke3dpbmRvdy5s''@;'; put 'put ''b2NhdGlvbi5wcm90b2NvbH0vLyR7d2luZG93LmxvY2F0aW9uLmhvc3RuYW1lfSR7ZH0vJHtofS8/X3Byb2dyYW09JHt0aGlzLnNhc2pzQ29uZmlnLmFwcExvY30vc2VydmljZXMvcHVibGljL2dldHJhd2RhdGEmdHlwZT1XRUIke3RoaXMud2ViUXVlcnlUYWI/IlRBQiI6IkNTViJ9JnRhYmxl''@;'; put 'put ''PSR7dGhpcy50YWJsZVRpdGxlfSR7IiZmaWx0ZXI9IithfWA7dGhpcy53ZWJRdWVyeVRleHQ9di5yZXBsYWNlKC8gL2dpbSwiJTIwIil9Y29weVRvQ2xpcCgpe25hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRoaXMud2ViUXVlcnlUZXh0KX1nb1RvVmlld2VyKCl7dGhpcy5yb3V0ZXIu''@;'; put 'put ''bmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YSIpfXNob3dUYWJsZVNlbGVjdCgpe3RoaXMudGFibGVGbGFnPSF0aGlzLnRhYmxlRmxhZ31jaGVja0V4cGFuZChhKXt9Y29sbGFwc2VMaWJyYXJ5SXRlbXMoYSxkKXthLmZvckVhY2goaD0+e2guTElCUkFSWVJFRiE9PWQuTElCUkFSWVJFRiYmKGgu''@;'; put 'put ''ZXhwYW5kZWQ9ITEpfSl9bG9hZE1vcmVMaWJyYXJpZXMoKXt0aGlzLmxpYnJhcmllc1BhZ2luZ3x8KHRoaXMubGlicmFyaWVzUGFnaW5nPSEwLHRoaXMuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKHRoaXMubGlicmFyaWVzLCEwKSx0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSl9dHJl''@;'; put 'put ''ZU5vZGVDbGlja2VkKGEsZCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlTGlicmFyeUl0ZW1zKHRoaXMubGlicmFyaWVzLGQpfWxpYnJhcnlFeHBhbmRlZENoYW5nZShhLGQpe2EmJnRoaXMuY29sbGFwc2VMaWJyYXJ5SXRlbXModGhpcy5saWJyYXJpZXMsZCl9''@;'; put 'put ''bGlicmFyeU9uQ2xpY2soYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2lmKGQudGFibGVzP2QuZXhwYW5kZWQ9ISFofHwhZC5leHBhbmRlZDp5aWVsZCBmLnNlbGVjdFRhYmxlKGEsITEsZCksZC5leHBhbmRlZCl7Zi5jZGYuZGV0ZWN0Q2hhbmdlcygpO2xldCB2PWRv''@;'; put 'put ''Y3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCNzZWFyY2hfJHtkLkxJQlJBUllSRUZ9YCk7diYmdi5mb2N1cygpLGQmJmQubGliaW5mbyYmKGYubGliaW5mbz1kLmxpYmluZm8pLGYubGliJiZmLnRhYmxlJiYhaD9mLnJvdXRlci5uYXZpZ2F0ZShbIi92aWV3L2RhdGEiXSx7c2tpcExvY2F0aW9uQ2hh''@;'; put 'put ''bmdlOiEwLHF1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pLnRoZW4oKCk9PntmLnJvdXRlci5uYXZpZ2F0ZShbIi92aWV3L2RhdGEvIitmLmxpYl0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pfSk6Zi5saWImJiFmLnRhYmxlJiZmLmxvY2F0aW9uLnJlcGxhY2VTdGF0''@;'; put 'put ''ZSgiL3ZpZXcvZGF0YS8iK2YubGliKX1mLmNvbGxhcHNlTGlicmFyeUl0ZW1zKGYubGlicmFyaWVzLGQpfSkoKX1vblRhYmxlQ2xpY2soYSxkKXt0aGlzLmlzVGFibGVTd2l0Y2hpbmd8fCh0aGlzLnN3aXRjaGluZ1RpbWVvdXQmJmNsZWFyVGltZW91dCh0aGlzLnN3aXRjaGluZ1RpbWVvdXQp''@;'; put 'put ''LHRoaXMuc3dpdGNoaW5nVGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5saWI9ZC5MSUJSQVJZUkVGLHRoaXMudGFibGU9YSx0aGlzLnNlbGVjdExpYlRhYmxlKGEpLHRoaXMudmlld0RhdGEoMCl9LDUwKSl9c2VsZWN0VGFibGUoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0''@;'; put 'put ''aW9uKigpe2gubG9hZGluZ1RhYmxlcz0hMCxmLnRhYmxlPSExLGYudGFibGVEaXNhYmxlPSEwLCJQbGVhc2Ugc2VsZWN0IGxpYnJhcnkiIT09YT9Ybi52aWV3ZXIudGFibGVzU2V0JiZkPyhmLmFib3J0QWN0aXZlPSExLGYudGFibGVEaXNhYmxlPSExLGYudGFibGVzPVhuLnZpZXdlci50YWJs''@;'; put 'put ''ZXMsZi5saWJpbmZvPVhuLnZpZXdlci5saWJpbmZvKTooZi5saWJpbmZvPW51bGwseWllbGQgZi5zYXNTdG9yZVNlcnZpY2Uudmlld1RhYmxlcyhhKS50aGVuKHY9PntmLmFib3J0QWN0aXZlPSExLGYudGFibGVEaXNhYmxlPSExO2xldCBNPXYubXB0YWJsZXMubWFwKGZ1bmN0aW9uKEQpe3Jl''@;'; put 'put ''dHVybiBELk1FTU5BTUV9KTtmLmxpYmluZm89di5saWJpbmZvfHxbXSxmLnRhYmxlcz1NLGgmJihoLnRhYmxlcz1NLGgubGliaW5mbz1mLmxpYmluZm8pLFhuLnZpZXdlci5saWJyYXJpZXM9Zi5saWJyYXJpZXMsWG4udmlld2VyLmxpYnJhcnk9Zi5saWIsWG4udmlld2VyLnRhYmxlcz1mLnRh''@;'; put 'put ''YmxlcyxYbi52aWV3ZXIubGliaW5mbz1mLmxpYmluZm8sWG4udmlld2VyLnRhYmxlc1NldD0hMH0pLmNhdGNoKHY9PntmLmxvZ2dlclNlcnZpY2UuZXJyb3IodiksZi5hYm9ydEFjdGl2ZT0hMCxmLm5vRGF0YT0hMCxmLnRhYmxlVGl0bGU9IiIsZi50YWJsZURpc2FibGU9ITB9KSk6Zi50YWJs''@;'; put 'put ''ZURpc2FibGU9ITAsWG4udmlld2VyLmxpYnJhcnk9Zi5saWIsZHx8Zi5jbGVhckdsb2JhbHNGaWx0ZXIoKSxoLmxvYWRpbmdUYWJsZXM9ITEsaC5leHBhbmRlZD0haC5leHBhbmRlZH0pKCl9c2VsZWN0TGliVGFibGUoYSxkKXsiUGxlYXNlIHNlbGVjdCB0YWJsZSIhPT1hPyh0aGlzLmFjdGlv''@;'; put 'put ''bkRpc2FibGU9ITEsdGhpcy5saWJUYWI9dGhpcy5saWIrIi4iK3RoaXMudGFibGUpOnRoaXMuYWN0aW9uRGlzYWJsZT0hMCxYbi52aWV3ZXIudGFibGU9YSxkfHx0aGlzLmNsZWFyR2xvYmFsc0ZpbHRlcigpLHRoaXMubG9nZ2VyU2VydmljZS5sb2codGhpcy5saWJUYWIpfWNsZWFyR2xvYmFs''@;'; put 'put ''c0ZpbHRlcigpe1huLnZpZXdlci5maWx0ZXIubGliZHM9IiIsWG4udmlld2VyLmZpbHRlci53aGVyZUNsYXVzZT0iIixYbi52aWV3ZXIuZmlsdGVyLmdyb3VwTG9naWM9IiIsWG4udmlld2VyLmZpbHRlci5jbGF1c2VzPVtdLFhuLnZpZXdlci5maWx0ZXIuY29scz1bXSxYbi52aWV3ZXIuZmls''@;'; put 'put ''dGVyLnZhbHM9W119bGliVGFiQWN0aXZlKGEsZCl7cmV0dXJuISF0aGlzLmxpYlRhYiYmYSsiLiIrZD09PXRoaXMubGliVGFifXRyZWVPbkZpbHRlcihhLGQpe3RoaXMuaGVscGVyU2VydmljZS50cmVlT25GaWx0ZXIoYSxkKX1saWJyYXJ5T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2Uu''@;'; put 'put ''bGlicmFyeU9uRmlsdGVyKHRoaXMubGlicmFyaWVzLHRoaXMubGlicmFyaWVzU2VhcmNoLCJMSUJSQVJZTkFNRSIpLFhuLnZpZXdlci5saWJyYXJpZXNTZWFyY2g9dGhpcy5saWJyYXJpZXNTZWFyY2h9bGlicmFyeVJlc2V0RmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLnJlc2V0QXJyYXlG''@;'; put 'put ''aWx0ZXIodGhpcy5saWJyYXJpZXMpfXZpZXdEYXRhKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBoO2lmKGQuaXNUYWJsZVN3aXRjaGluZz0hMCxkLmNsZWFudXBIb3RJbnN0YW5jZSgpLGQubG9hZGluZ1RhYmxlVmlldz0hMCx0eXBlb2YgZC5saWJEYXRhc2V0PiJ1''@;'; put 'put ''IiloPWQubGliKyIuIitkLnRhYmxlO2Vsc2UgaWYodHlwZW9mIGQubGliPiJ1IiYmdHlwZW9mIGQudGFibGU+InUiKXtsZXQgTT1bXTtpZihNPWQubGliRGF0YXNldC5zcGxpdCgiLiIpLFhuLnZpZXdlci5zdGFydHVwU2V0P2QubGlicmFyaWVzPVhuLnZpZXdlci5saWJyYXJpZXM6eWllbGQg''@;'; put 'put ''ZC5zYXNTdG9yZVNlcnZpY2Uudmlld0xpYnMoKS50aGVuKEQ9PntkLmxpYnJhcmllcz1ELnNhc2xpYnN9KS5jYXRjaChEPT57ZC5sb2dnZXJTZXJ2aWNlLmVycm9yKEQpfSksZC5saWI9TVswXSxYbi52aWV3ZXIuc3RhcnR1cFNldClkLnRhYmxlcz1Ybi52aWV3ZXIudGFibGVzO2Vsc2V7bGV0''@;'; put 'put ''IEQ9ZC5saWJyYXJpZXMuZmluZChVPT5VLkxJQlJBUllSRUYudG9Mb3dlckNhc2UoKT09PWQubGliLnRvTG93ZXJDYXNlKCkpO3lpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnZpZXdUYWJsZXMoZC5saWIpLnRoZW4oVT0+e2QudGFibGVzPVUubXB0YWJsZXMubWFwKGZ1bmN0aW9uKHRlKXtyZXR1''@;'; put 'put ''cm4gdGUuTUVNTkFNRX0pLEQudGFibGVzPWQudGFibGVzLFhuLnZpZXdlci5saWJyYXJpZXM9ZC5saWJyYXJpZXMsWG4udmlld2VyLnRhYmxlcz1kLnRhYmxlcyxYbi52aWV3ZXIuc3RhcnR1cFNldD0hMH0pLmNhdGNoKFU9PntkLmxvZ2dlclNlcnZpY2UuZXJyb3IoVSl9KX1kLnRhYmxlPU1b''@;'; put 'put ''MV0sZC50YWJsZUZsYWc9ITEsaD1kLmxpYkRhdGFzZXQsZC5saWJUYWI9aH1lbHNlIFhuLnZpZXdlci5zdGFydHVwU2V0P2QubGlicmFyaWVzPVhuLnZpZXdlci5saWJyYXJpZXM6eWllbGQgZC5zYXNTdG9yZVNlcnZpY2Uudmlld0xpYnMoKS50aGVuKE09PntkLmxpYnJhcmllcz1NLnNhc2xp''@;'; put 'put ''YnN9KS5jYXRjaChNPT57ZC5sb2dnZXJTZXJ2aWNlLmVycm9yKE0pfSksdHlwZW9mIGQudGFibGU8InUiJiYoWG4udmlld2VyLnN0YXJ0dXBTZXQ/ZC50YWJsZXM9WG4udmlld2VyLnRhYmxlczp5aWVsZCBkLnNhc1N0b3JlU2VydmljZS52aWV3VGFibGVzKGQubGliKS50aGVuKE09PntkLnRh''@;'; put 'put ''Ymxlcz1NLm1wdGFibGVzLm1hcChmdW5jdGlvbihEKXtyZXR1cm4gRC5NRU1OQU1FfSl9KS5jYXRjaChNPT57ZC5sb2dnZXJTZXJ2aWNlLmVycm9yKE0pLGQucm91dGVyLm5hdmlnYXRlKFsiL3ZpZXcvZGF0YSJdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KX0pLGQudGFibGVG''@;'; put 'put ''bGFnPSExLGg9ZC5saWIrIi4iK2QudGFibGUsZC50YWJsZVRpdGxlPWgsZC5saWJUYWI9aCk7ZC5yb3V0ZXIudXJsLnNwbGl0KCIvIikubGVuZ3RoPjMmJmgmJih5aWVsZCBkLnNhc1N0b3JlU2VydmljZS52aWV3RGF0YShoLGEpLnRoZW4oTT0+e2lmKE0ucXVlcnkubGVuZ3RoPjAmJiJ2aWV3''@;'; put 'put ''Ij09PVhuLnJvb3RQYXJhbSYmMD09PVhuLnZpZXdlci5maWx0ZXIuY2xhdXNlcy5sZW5ndGgmJihYbi52aWV3ZXIuZmlsdGVyLnF1ZXJ5PWQuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoTS5xdWVyeSksWG4udmlld2VyLmZpbHRlci5saWJkcz1kLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJN''@;'; put 'put ''ZW0sZC5zYXNTdG9yZVNlcnZpY2UuaW5pdGlhbGl6ZUdsb2JhbEZpbHRlckNsYXVzZSgidmlld2VyIixNLmNvbHMpKSxkLmFib3J0QWN0aXZlPSExLGQuZmlsdGVyQ29scz1NLmNvbHMsdGFlKGQuZmlsdGVyQ29scyxbXSxNLiR2aWV3ZGF0YSksZC5udW1iZXJPZlJvd3M9TS5zYXNwYXJhbXNb''@;'; put 'put ''MF0uTk9CUyxkLmhlYWRlclBrcz1NLnNhc3BhcmFtc1swXS5QS19GSUVMRFMuc3BsaXQoIiAiKSwiU0FTOSI9PT1kLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUpe2xldCBVPU0uc2FzcGFyYW1zWzBdLlRBQkxFVVJJO1UmJlUubGVuZ3RoPjAmJihkLnRhYmxldXJpPVUpfWlmKGQuaG90VGFibGUu''@;'; put 'put ''ZGF0YT1NLnZpZXdkYXRhLGQuJGRhdGFGb3JtYXRzPU0uJHZpZXdkYXRhLGQuZHNtZXRhPU0uZHNtZXRhLGQudmVyc2lvbnM9TS52ZXJzaW9uc3x8W10sZC5zZXREU05vdGUoKSxkLnF1ZXJ5VGV4dD1NLnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVCxNLnZpZXdkYXRhJiZNLnZpZXdkYXRhLmxl''@;'; put 'put ''bmd0aD4wKXtsZXQgVT1bXSx0ZT1bXTtmb3IobGV0IG9lIGluIE0udmlld2RhdGFbMF0pb2UmJnRlLnB1c2gob2UpO2ZvcihsZXQgb2U9MDtvZTx0ZS5sZW5ndGg7b2UrKylVLnB1c2goe2RhdGE6dGVbb2VdfSk7ZC5ob3RUYWJsZS5jb2xIZWFkZXJzPXRlLGQuaG90VGFibGUuY29sdW1ucz1V''@;'; put 'put ''fWVsc2UgZC5ob3RUYWJsZS5jb2xIZWFkZXJzPVtdLGQuaG90VGFibGUuY29sdW1ucz1bXTtkLmhvdFRhYmxlLmNlbGxzPSgpPT4oe3JlYWRPbmx5OiEwfSksZC51cGRhdGVIb3RUYWJsZVNldHRpbmdzKCksZC50YWJsZUZsYWc9ITE7bGV0IEQ9W107RD1oLnNwbGl0KCIuIiksZC5saWI9RFsw''@;'; put 'put ''XSxkLnRhYmxlPURbMV0sMD09PWQuaG90VGFibGUuZGF0YS5sZW5ndGg/KGQubm9EYXRhPSEwLGQudGFibGVGbGFnPSEwKTooZC5ub0RhdGE9ITEsZC50YWJsZUZsYWc9ITEpLGQubm9EYXRhUmVxRXJyPSExfSkuY2F0Y2goTT0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihNKSxkLmFib3J0QWN0''@;'; put 'put ''aXZlPSEwLGQubm9EYXRhUmVxRXJyPSEwfSkpLGQucm91dGVyLnVybC5pbmNsdWRlcygiL2RhdGEiKSYmaCYmZC5yb3V0ZXIubmF2aWdhdGUoMCE9PWE/WyIvdmlldy9kYXRhLyIraCsiLyIrYV06WyIvdmlldy9kYXRhLyIraF0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pO2xl''@;'; put 'put ''dCBmPWQudGFibGUsdj1kLmxpYnJhcmllcy5maW5kKE09Pk0uTElCUkFSWVJFRi50b0xvd2VyQ2FzZSgpPT09ZC5saWIudG9Mb3dlckNhc2UoKSk7dj8oWG4udmlld2VyLmxpYnJhcmllcy5sZW5ndGg+MCYmKGQubGlicmFyaWVzPVhuLnZpZXdlci5saWJyYXJpZXMsZC5saWJyYXJpZXNTZWFy''@;'; put 'put ''Y2g9WG4udmlld2VyLmxpYnJhcmllc1NlYXJjaCksZC5saWJyYXJ5T25DbGljayhkLmxpYix2LCEwKSk6ZC5saWJpbmZvPVtdLGQudGFibGU9Znx8ZC50YWJsZSxkLmxpYnJhcmllcyYmZC5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXMoZC5saWJyYXJpZXMpLGQucm91dGVyLnVybC5p''@;'; put 'put ''bmNsdWRlcygiL2RhdGEiKSYmZC5ldmVudFNlcnZpY2UuY2xvc2VTaWRlYmFyKCksZC5sb2FkaW5nVGFibGVWaWV3PSExLHNldFRpbWVvdXQoKCk9PnshZC5ub0RhdGEmJiFkLm5vRGF0YVJlcUVyciYmaCYmZC5zZXR1cEhvdCgpfSw1MCksc2V0VGltZW91dCgoKT0+e2QuaXNUYWJsZVN3aXRj''@;'; put 'put ''aGluZz0hMX0sMzAwKSxzZXRUaW1lb3V0KCgpPT57ZC5maXhBcmlhQWNjZXNzaWJpbGl0eSgpfSw1MDApLGQuaG90SW5zdGFuY2VDbGlja0xpc3RlbmVyfHxzZXRUaW1lb3V0KCgpPT57bGV0IE09ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvdEluc3RhbmNlIik7TSYmKE0uYWRkRXZlbnRM''@;'; put 'put ''aXN0ZW5lcigibW91c2Vkb3duIixEPT57c2V0VGltZW91dCgoKT0+e2xldCBVPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5kZWJ1Zy1zd2l0Y2gtaXRlbSIpfHx2b2lkIDA7VSYmVS5jbGljaygpfSwxMDApfSksZC5ob3RJbnN0YW5jZUNsaWNrTGlzdGVuZXI9ITApfSwxZTMpfSkoKX1tYXhX''@;'; put 'put ''aWR0aENoZWtlcihhLGQpe3JldHVybiBhPjIwMD8yMDA6YX1vcGVuUWIoKXt0aGlzLmZpbHRlcj0hMCx0aGlzLmNkZi5kZXRlY3RDaGFuZ2VzKCksdGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2V0UXVlcnlWYXJpYWJsZXModGhpcy5saWIrIi4iK3RoaXMudGFibGUsdGhpcy5maWx0ZXJDb2xzKX1z''@;'; put 'put ''ZW5kQ2xhdXNlKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5zdWJtaXRMb2FkaW5nPSEwO2xldCBkPVtdLGg9W107aWYodHlwZW9mIGEuY2xhdXNlcz4idSIpcmV0dXJuIGEubnVsbFZhcmlhYmxlcz0hMCx2b2lkKGEuc3VibWl0TG9hZGluZz0hMSk7e2xldCBmPWEuY2xh''@;'; put 'put ''dXNlcy5xdWVyeU9iajtpZihmWzBdLmVsZW1lbnRzLmxlbmd0aDwxKXJldHVybiJ2aWV3Ij09PVhuLnJvb3RQYXJhbSYmKFhuLnZpZXdlci5maWx0ZXIuY2xhdXNlcz1bXSxYbi52aWV3ZXIuZmlsdGVyLnF1ZXJ5PVtdLFhuLnZpZXdlci5maWx0ZXIuZ3JvdXBMb2dpYz0iIiksdm9pZCBhLnJv''@;'; put 'put ''dXRlci5uYXZpZ2F0ZShbIi92aWV3L2RhdGEvIithLmxpYmRzXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSk7Zm9yKGxldCB2PTA7djxmLmxlbmd0aDt2Kyspe2NvbnN0IE09Zlt2XS5lbGVtZW50cztkPU0uZmlsdGVyKGZ1bmN0aW9uKEQpe3JldHVybiBudWxsPT09RC52YXJp''@;'; put 'put ''YWJsZX0pLGQubGVuZ3RoJiZoLnB1c2goTSl9fWlmKGgubGVuZ3RoKXJldHVybiBhLm51bGxWYXJpYWJsZXM9ITAsdm9pZChhLnN1Ym1pdExvYWRpbmc9ITEpO3tjb25zdCBmPXtncm91cExvZ2ljOmEuY2xhdXNlcy5ncm91cExvZ2ljLGZpbHRlckdyb3VwczpbXX07YS5jbGF1c2VzLnF1ZXJ5''@;'; put 'put ''T2JqLmZvckVhY2goTT0+e2NvbnN0IEQ9e2ZpbHRlckNsYXVzZXM6W119O00uZWxlbWVudHMuZm9yRWFjaChVPT57RC5maWx0ZXJDbGF1c2VzLnB1c2goYS5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShVKSl9KSxELmNsYXVzZUxvZ2ljPU0uY2xhdXNlTG9naWMsZi5maWx0ZXJHcm91cHMucHVz''@;'; put 'put ''aChhLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKEQpKX0pO2NvbnN0IHY9YS5zYXNTdG9yZVNlcnZpY2UuY3JlYXRlRmlsdGVyUXVlcnlUYWJsZShmKTt5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5zYXZlUXVlcnkoYS5saWJkcyx2KS50aGVuKE09PnthLnF1ZXJ5VGV4dD1NLnJlc3VsdFswXS5G''@;'; put 'put ''SUxURVJfVEVYVDtsZXQgRD1NLnJlc3VsdFswXS5GSUxURVJfUks7YS5yb3V0ZXIubmF2aWdhdGUoWyIvdmlldy9kYXRhLyIrYS5saWJkcysiLyIrRF0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pLGEudmlld0RhdGEoRCksYS5maWx0ZXI9ITF9KS5jYXRjaChNPT57YS5sb2dn''@;'; put 'put ''ZXJTZXJ2aWNlLmVycm9yKE0pfSksYS5zdWJtaXRMb2FkaW5nPSExfX0pKCl9cmVtb3ZlUXVlcnkoKXt0aGlzLnNhc1N0b3JlU2VydmljZS5yZW1vdmVDbGF1c2UoKX1kYXRhc2V0SW5mb01vZGFsUm93Q2xpY2tlZChhKXt2b2lkIDAhPT1hLkxPQURfUkVGJiZ0aGlzLnJvdXRlci5uYXZpZ2F0''@;'; put 'put ''ZShbYC9zdGFnZS8ke2EuTE9BRF9SRUZ9YF0pfXNldERTTm90ZSgpe2NvbnN0IGE9dGhpcy5kc21ldGEuZmluZChmPT4iTk9URVMiPT09Zi5OQU1FKSxkPXRoaXMuZHNtZXRhLmZpbmQoZj0+IkREX0xPTkdERVNDIj09PWYuTkFNRSksaD10aGlzLmRzbWV0YS5maW5kKGY9PiJERF9TSE9SVERF''@;'; put 'put ''U0MiPT09Zi5OQU1FKTt0aGlzLmRzTm90ZT1hJiZhLlZBTFVFP2EuVkFMVUU6ZCYmZC5WQUxVRT9kLlZBTFVFOmgmJmguVkFMVUU/aC5WQUxVRToiIn1jbGVhbnVwSG90SW5zdGFuY2UoKXtpZih0aGlzLmhvdEluc3RhbmNlJiYhdGhpcy5ob3RJbnN0YW5jZS5pc0Rlc3Ryb3llZCl0cnl7dGhp''@;'; put 'put ''cy5ob3RJbnN0YW5jZS5kZXN0cm95KCl9Y2F0Y2goYSl7Y29uc29sZS53YXJuKCJFcnJvciBkZXN0cm95aW5nIEhhbmRzb250YWJsZSBpbnN0YW5jZToiLGEpfXRoaXMuaG90SW5zdGFuY2U9bnVsbH1zZXR1cEhvdCgpe2NvbnN0IGE9RGF0ZS5ub3coKTthLXRoaXMubGFzdFNldHVwVGltZTw1''@;'; put 'put ''MDB8fCh0aGlzLmxhc3RTZXR1cFRpbWU9YSxzZXRUaW1lb3V0KCgpPT57dGhpcy5sb2FkaW5nVGFibGVWaWV3fHwhdGhpcy5saWJEYXRhc2V0fHwodGhpcy5jbGVhbnVwSG90SW5zdGFuY2UoKSxzZXRUaW1lb3V0KCgpPT57dGhpcy5pc1RhYmxlU3dpdGNoaW5nfHx0aGlzLmxvYWRpbmdUYWJs''@;'; put 'put ''ZVZpZXd8fCF0aGlzLmxpYkRhdGFzZXR8fCh0aGlzLmhvdEluc3RhbmNlPXRoaXMuaG90VGFibGVDb21wb25lbnQ/LmhvdEluc3RhbmNlLHRoaXMuaG90SW5zdGFuY2UmJiF0aGlzLmhvdEluc3RhbmNlLmlzRGVzdHJveWVkJiYodGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7aGVp''@;'; put 'put ''Z2h0OnRoaXMuaG90VGFibGUuaGVpZ2h0LG1vZGlmeUNvbFdpZHRoOihkLGgpPT5kPjUwMD81MDA6ZCxhZnRlckdldENvbEhlYWRlcjooZCxoKT0+e2lmKCF0aGlzLmhvdEluc3RhbmNlfHx0aGlzLmhvdEluc3RhbmNlLmlzRGVzdHJveWVkfHx0aGlzLmlzVGFibGVTd2l0Y2hpbmcpaC5jbGFz''@;'; put 'put ''c0xpc3QuYWRkKFhuLmhhbmRzb250YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyk7ZWxzZSB0cnl7Y29uc3QgZj10aGlzLmhvdEluc3RhbmNlLmNvbFRvUHJvcChkKTtmJiZ0aGlzLmhlYWRlclBrcy5pbmRleE9mKGYpPi0xJiZoLmNsYXNzTGlzdC5hZGQoInByaW1hcnlLZXlIZWFkZXJTdHls''@;'; put 'put ''ZSIpLGguY2xhc3NMaXN0LmFkZChYbi5oYW5kc29udGFibGUuZGFya1RhYmxlSGVhZGVyQ2xhc3MpfWNhdGNoe2guY2xhc3NMaXN0LmFkZChYbi5oYW5kc29udGFibGUuZGFya1RhYmxlSGVhZGVyQ2xhc3MpfX19KSx0aGlzLmhvdEluc3RhbmNlLmFkZEhvb2soImFmdGVyUmVuZGVyIiwoKT0+''@;'; put 'put ''e3RoaXMuZml4QXJpYUFjY2Vzc2liaWxpdHkoKX0pLHRoaXMuaG90SW5zdGFuY2UuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLCgpPT57c2V0VGltZW91dCgoKT0+e3RoaXMuZml4QXJpYUFjY2Vzc2liaWxpdHkoKX0sNTApfSksc2V0VGltZW91dCgoKT0+e3RoaXMuaG90SW5zdGFuY2UmJiF0aGlz''@;'; put 'put ''LmhvdEluc3RhbmNlLmlzRGVzdHJveWVkJiZ0aGlzLmhvdEluc3RhbmNlLnJlbmRlcigpfSwxMCkpKX0sNTApKX0sMjAwKSl9bG9hZFdpdGhQYXJhbWV0ZXJzKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5zd2l0Y2hGbGFnPSEwLGEudGFibGVUaXRsZT1hLnJvdXRlLnNu''@;'; put 'put ''YXBzaG90LnBhcmFtcy5saWJNZW18fDAsYS51cmxGaWx0ZXJQaz1wYXJzZUludChhLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZHx8IjAiKTtsZXQgaD1hLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW07YS5saWJEYXRhc2V0PWgsaC5pbmNsdWRlcygiLiIpfHwoYS5saWI9aCks''@;'; put 'put ''eWllbGQgYS52aWV3RGF0YShhLnVybEZpbHRlclBrKSxhLm5vRGF0YT9zZXRUaW1lb3V0KCgpPT57YS50YWJsZUZsYWc9ITB9LDEyMDApOnNldFRpbWVvdXQoKCk9PnthLnRhYmxlRmxhZz0hMX0sMTIwMCl9KSgpfWxvYWRXaXRob3V0UGFyYW1ldGVycygpe3ZhciBhPXRoaXM7cmV0dXJuIGVl''@;'; put 'put ''KGZ1bmN0aW9uKigpe2Euc3dpdGNoRmxhZz0hMSxhLmxpYnJhcmllc0xvYWRpbmc9ITAsWG4udmlld2VyLnN0YXJ0dXBTZXQ/c2V0VGltZW91dCgoKT0+e2EubGlicmFyaWVzPVhuLnZpZXdlci5saWJyYXJpZXMsYS5saWJyYXJpZXNTZWFyY2g9WG4udmlld2VyLmxpYnJhcmllc1NlYXJjaCxh''@;'; put 'put ''LmxpYj1Ybi52aWV3ZXIubGlicmFyeSxhLmxpYnJhcmllc1RyZWVFeHBhbmRlZD0hMCxhLmxpYnJhcmllc0xvYWRpbmc9ITEsYS5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXMoYS5saWJyYXJpZXMpfSwxMDApOihhLm5vRGF0YVJlcUVycj0hMSx5aWVsZCBhLnNhc1N0b3JlU2Vydmlj''@;'; put 'put ''ZS52aWV3TGlicygpLnRoZW4oZD0+e2EubGlicmFyaWVzPWQuc2FzbGlicyxYbi52aWV3ZXIubGlicmFyaWVzPWEubGlicmFyaWVzLFhuLnZpZXdlci5zdGFydHVwU2V0PSEwLGEubGlicmFyaWVzTG9hZGluZz0hMSxhLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyhhLmxpYnJhcmll''@;'; put 'put ''cyl9KS5jYXRjaChkPT57YS5sb2dnZXJTZXJ2aWNlLmVycm9yKGQpLGEubGlicmFyaWVzTG9hZGluZz0hMSxhLm5vRGF0YVJlcUVycj0hMH0pKX0pKCl9bmdBZnRlclZpZXdJbml0KCl7c2V0VGltZW91dCgoKT0+e3RoaXMuZml4QXJpYUFjY2Vzc2liaWxpdHkoKX0sMWUzKX1uZ09uRGVzdHJv''@;'; put 'put ''eSgpe3RoaXMuaXNUYWJsZVN3aXRjaGluZz0hMCx0aGlzLnN3aXRjaGluZ1RpbWVvdXQmJihjbGVhclRpbWVvdXQodGhpcy5zd2l0Y2hpbmdUaW1lb3V0KSx0aGlzLnN3aXRjaGluZ1RpbWVvdXQ9bnVsbCksdGhpcy5jbGVhbnVwSG90SW5zdGFuY2UoKSx0aGlzLmFyaWFPYnNlcnZlciYmKHRo''@;'; put 'put ''aXMuYXJpYU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLmFyaWFPYnNlcnZlcj12b2lkIDApLHRoaXMuYXJpYUNoZWNrSW50ZXJ2YWwmJihjbGVhckludGVydmFsKHRoaXMuYXJpYUNoZWNrSW50ZXJ2YWwpLHRoaXMuYXJpYUNoZWNrSW50ZXJ2YWw9dm9pZCAwKX1maXhBcmlhQWNjZXNzaWJp''@;'; put 'put ''bGl0eSgpe2NvbnN0IGE9KCk9Pntkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuaHQtd3JhcHBlciwgLnd0SG9sZGVyLCBbaWRePSJodF8iXScpLmZvckVhY2goVT0+e1UucmVtb3ZlQXR0cmlidXRlKCJyb2xlIiksVS5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtcm93Y291bnQiKSxVLnJlbW92''@;'; put 'put ''ZUF0dHJpYnV0ZSgiYXJpYS1jb2xjb3VudCIpLFUucmVtb3ZlQXR0cmlidXRlKCJhcmlhLW11bHRpc2VsZWN0YWJsZSIpfSk7Y29uc3QgaD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbcm9sZT0idHJlZWdyaWQiXScpLGY9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW3JvbGU9InBy''@;'; put 'put ''ZXNlbnRhdGlvbiJdJyk7aC5mb3JFYWNoKFU9PntVLnJlbW92ZUF0dHJpYnV0ZSgicm9sZSIpLFUucmVtb3ZlQXR0cmlidXRlKCJhcmlhLXJvd2NvdW50IiksVS5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtY29sY291bnQiKSxVLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1tdWx0aXNlbGVjdGFibGUi''@;'; put 'put ''KX0pLGYuZm9yRWFjaChVPT57VS5xdWVyeVNlbGVjdG9yQWxsKCJidXR0b24sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBbdGFiaW5kZXhdLCBbb25jbGlja10sIFtjb250ZW50ZWRpdGFibGVdIikubGVuZ3RoPjAmJlUucmVtb3ZlQXR0cmlidXRlKCJyb2xlIil9KSxkb2N1bWVudC5xdWVy''@;'; put 'put ''eVNlbGVjdG9yQWxsKCdbYXJpYS1yb3djb3VudD0iLTEiXScpLmZvckVhY2goVT0+e1UucmVtb3ZlQXR0cmlidXRlKCJhcmlhLXJvd2NvdW50Iil9KSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJ0YWJsZSIpLmZvckVhY2goVT0+e1UuZ2V0QXR0cmlidXRlKCJyb2xlIil8fFUuc2V0QXR0''@;'; put 'put ''cmlidXRlKCJyb2xlIiwidGFibGUiKSxVLnF1ZXJ5U2VsZWN0b3JBbGwoInRoIikuZm9yRWFjaChvZT0+e29lLmdldEF0dHJpYnV0ZSgic2NvcGUiKXx8b2Uuc2V0QXR0cmlidXRlKCJzY29wZSIsImNvbCIpfSl9KSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJidXR0b24sIGlucHV0LCBz''@;'; put 'put ''ZWxlY3QsIHRleHRhcmVhLCBbY29udGVudGVkaXRhYmxlXSIpLmZvckVhY2goVT0+e2lmKCFVLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIpJiYhVS5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIpKXtjb25zdCB0ZT1VLnRleHRDb250ZW50Py50cmltKCk7dGUmJlUuc2V0QXR0cmli''@;'; put 'put ''dXRlKCJhcmlhLWxhYmVsIix0ZSl9fSl9O2EoKSxzZXRUaW1lb3V0KGEsMTAwKSxzZXRUaW1lb3V0KGEsNTAwKSxzZXRUaW1lb3V0KGEsMWUzKSxzZXRUaW1lb3V0KGEsMmUzKSx0aGlzLmFyaWFDaGVja0ludGVydmFsfHwodGhpcy5hcmlhQ2hlY2tJbnRlcnZhbD1zZXRJbnRlcnZhbChhLDNl''@;'; put 'put ''MykpLHRoaXMuYXJpYU9ic2VydmVyfHwodGhpcy5hcmlhT2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZD0+e2xldCBoPSExO2QuZm9yRWFjaChmPT57ImF0dHJpYnV0ZXMiPT09Zi50eXBlJiYoInJvbGUiPT09Zi5hdHRyaWJ1dGVOYW1lfHwiYXJpYS1yb3djb3VudCI9PT1mLmF0dHJp''@;'; put 'put ''YnV0ZU5hbWUpJiYoaD0hMCksImNoaWxkTGlzdCI9PT1mLnR5cGUmJmYuYWRkZWROb2Rlcy5mb3JFYWNoKHY9PntpZih2Lm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpe2NvbnN0IE09djsoTS5oYXNBdHRyaWJ1dGUoInJvbGUiKXx8TS5oYXNBdHRyaWJ1dGUoImFyaWEtcm93Y291bnQi''@;'; put 'put ''KSkmJihoPSEwKX19KX0pLGgmJnNldFRpbWVvdXQoYSw1MCl9KSx0aGlzLmFyaWFPYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHkse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwLGF0dHJpYnV0ZXM6ITAsYXR0cmlidXRlRmlsdGVyOlsicm9sZSIsImFyaWEtcm93Y291bnQiLCJhcmlhLWNv''@;'; put 'put ''bGNvdW50IiwiYXJpYS1tdWx0aXNlbGVjdGFibGUiXX0pKX1uZ0FmdGVyQ29udGVudEluaXQoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLmhvdFRhYmxlLmRhdGEubGVuZ3RoPjAmJihhLnRhYmxlRmxhZz0hMCksYS5fcXVlcnk9YS5zYXNTdG9yZVNlcnZpY2UucXVlcnku''@;'; put 'put ''c3Vic2NyaWJlKGQ9PnthLndoZXJlU3RyaW5nPWQuc3RyaW5nLGEuY2xhdXNlcz1kLm9iaixhLmxpYmRzPWQubGliZHN9KSx0eXBlb2YgYS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtPCJ1Ij9hLmxvYWRXaXRoUGFyYW1ldGVycygpOmEubG9hZFdpdGhvdXRQYXJhbWV0ZXJzKCl9KSgp''@;'; put 'put ''fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHFlKE8xKSxxZShNMikscWUoS3MpLHFlKG5sKSxxZSh0MCkscWUoRWMpLHFlKG9oKSxxZShMdSkscWUoczIpLHFlKEhzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1hcih7dHlwZTpjLHNlbGVjdG9y''@;'; put 'put ''czpbWyJhcHAtdmlld2VyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmKFVhKG1OdCw1KSxVYShHNSw1KSxVYSh2TnQsNSkpLDImZCl7bGV0IGY7Z2koZj1taSgpKSYmKGguaG90SW5zdGFuY2VWaWV3Q2hpbGQ9Zi5maXJzdCksZ2koZj1taSgpKSYmKGguaG90VGFibGVDb21w''@;'; put 'put ''b25lbnQ9Zi5maXJzdCksZ2koZj1taSgpKSYmKGgucXVlcnlGaWx0ZXJDb21wTGlzdD1mKX19LGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxzdGFuZGFsb25lOiExLGRlY2xzOjk1LHZhcnM6MzAsY29uc3RzOltbImNsaUNvbW1hbmRJbnB1dCIsIiJdLFsic2VhcmNoTGliVHJl''@;'; put 'put ''ZUlucHV0IiwiIl0sWyJzZWFyY2hUcmVlSW5wdXQiLCIiXSxbInF1ZXJ5RmlsdGVyIiwiIl0sWyJzZWFyY2hFbCIsIiJdLFsiaG90SW5zdGFuY2UiLCIiXSxbMywic2Nyb2xsZWRUb0JvdHRvbSJdLFsiY2xhc3MiLCJteS0xMC1teC1hdXRvIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFz''@;'; put 'put ''cyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJ3LTEwMCB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwibW9kYWwgei1pbmRleC1oaWdoZXN0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm1vZGFs''@;'; put 'put ''LWJhY2tkcm9wIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSJdLFsxLCJtb2RhbC10aXRsZSIsImNlbnRlciIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibW9k''@;'; put 'put ''YWwtYm9keSJdLFsxLCJjbHItY29sLW1kLTYiXSxbMSwiZG93bmxvYWQtc2VsZWN0Il0sWyJjbHJTZWxlY3QiLCIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWyJ2YWx1ZSIsIkNTViJdLFsidmFsdWUiLCJTQVMiXSxbInZhbHVlIiwiUEdTUUxfRERMIl0sWyJ2YWx1ZSIsIlNBU19E''@;'; put 'put ''REwiXSxbInZhbHVlIiwiVFNRTF9EREwiXSxbInZhbHVlIiwiRVhDRUwiXSxbInZhbHVlIiwiTUFSS0RPV04iXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbInR5cGUiLCJzdWJtaXQiLDEsImJ0''@;'; put 'put ''biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIiwiaWQiXSxbMSwibW9kYWwtYm9keSIsIndlYi1xdWVyeSJdLFsxLCJyb3ciXSxbMSwiY2xyLWNvbC1sZy0xMiIsImNsci1jb2wtbWQtMTIiLCJjbHItY29sLXNtLTEyIiwiY2xyLWNvbC14cy0xMiJdLFsxLCJjYXJk''@;'; put 'put ''Iiwibm8tYm9yZGVycyJdLFsxLCJjYXJkLWhlYWRlciIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1iZXR3ZWVuIl0sWzEsImJ0bi1ncm91cCJdLFsxLCJyYWRpbyIsImJ0biIsMywiY2xpY2siXSxbInR5cGUiLCJyYWRpbyIsIm5hbWUiLCJidG4tZ3JvdXAtZGVtby1yYWRpb3MiLDMsImNo''@;'; put 'put ''ZWNrZWQiXSxbMSwiY2FyZC1ibG9jayIsIndlYi1xdWVyeS13cmFwcGVyIiwid29yZC1icmVhay1hbGwiXSxbImNsclRleHRhcmVhIiwiIiwicm93cyIsIjQiLCJjb2xzIiwiNTAiLCJ0eXBlIiwidGV4dCIsInJlYWRvbmx5IiwiIiwxLCJ3ZWItcXVlcnktdGV4dCIsMywiZm9jdXMiLCJ2YWx1''@;'; put 'put ''ZSJdLFsxLCJjYXJkLWZvb3RlciJdLFsxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsMywiY2xpY2siLCJuZ3hDbGlwYm9hcmQiXSxbImFyaWEtbW9kYWwiLCJ0cnVlIiwxLCJmaWx0ZXItbW9kYWwiLDMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6''@;'; put 'put ''ZSIsImNsck1vZGFsQ2xvc2FibGUiXSxbNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsImJ0bi1zbSIsMywiY2xpY2siXSxbInR5cGUiLCJzdWJtaXQi''@;'; put 'put ''LDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFszLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iXSxbMSwibW9kYWwtdGl0bGUiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJj''@;'; put 'put ''bGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWyJjbGFzcyIsImxvYWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNhcmQgbm8tYm9yZGVycyBoLTEwMCBkLWZsZXggY2xyLWZsZXgtY29sdW1uIiw0LCJuZ0lmIl0sWzMsIm9w''@;'; put 'put ''ZW5DaGFuZ2UiLCJyb3dDbGlja2VkIiwib3BlbiIsImRzbWV0YSIsInZlcnNpb25zIl0sWzMsInZpZXdib3hNb2RhbENoYW5nZSIsInZpZXdib3hNb2RhbCJdLFsxLCJteS0xMC1teC1hdXRvIiwidGV4dC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0''@;'; put 'put ''cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkxpYnJhcmllcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJz''@;'; put 'put ''ZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xpY2siLCJjbHJFeHBhbmRl''@;'; put 'put ''ZENoYW5nZSIsNCwibmdJZiJdLFszLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiwiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJyYWNrLXNlcnZlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklu''@;'; put 'put ''cHV0IiwiIiwicGxhY2Vob2xkZXIiLCJUYWJsZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsImlkIiwibmdNb2RlbCJdLFs0LCJuZ1ZhciJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJjbGFzcyIsImNsci10cmVlbm9k''@;'; put 'put ''ZS1saW5rIiwzLCJkYy1sb2NrZWQtY29udHJvbCIsImFjdGl2ZSIsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNrIl0sWzMsIm5nU3dpdGNoIl0sWyJzaGFwZSIsImJvbHQiLDQsIm5nU3dpdGNoQ2FzZSJdLFsi''@;'; put 'put ''c2hhcGUiLCJ0YWJsZSIsNCwibmdTd2l0Y2hDYXNlIl0sWyJzaGFwZSIsImJvbHQiXSxbInNoYXBlIiwidGFibGUiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6''@;'; put 'put ''ZSIsImxnIl0sWzEsInctMTAwIiwidGV4dC1jZW50ZXIiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItc20iXSxbMSwibW9kYWwiLCJ6LWluZGV4LWhpZ2hlc3QiXSxbInJvbGUiLCJkaWFsb2ciLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWRpYWxvZyJdLFsxLCJtb2RhbC1jb250ZW50''@;'; put 'put ''Il0sWzEsIm1vZGFsLWhlYWRlciJdLFsiYXJpYS1sYWJlbCIsIkNsb3NlIiwidHlwZSIsImJ1dHRvbiIsMSwiY2xvc2UiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInNoYXBlIiwiY2xvc2UiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJjbGlj''@;'; put 'put ''ayJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJtb2RhbC1iYWNrZHJvcCJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWzEsIm10LTEwIl0sWyJjZHMtdGV4dCIsInNlY3Rpb24iXSxbMSwiY2FyZCIsIm5vLWJvcmRlcnMiLCJoLTEwMCIsImQtZmxleCIsImNsci1mbGV4''@;'; put 'put ''LWNvbHVtbiJdLFsiY2xhc3MiLCJoZWFkZXItcm93IGNsci1yb3cganVzdGlmeS1jb250ZW50LWJldHdlZW4gY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIgdy0xMDAgbS0wIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5vLXRhYmxlLXNlbGVjdGVkIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNhcmQt''@;'; put 'put ''YmxvY2sgbm9EYXRhIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1mbGV4LTEiLDQsIm5nSWYiXSxbImNsYXNzIiwibXQtMi1pIHctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImhlYWRlci1yb3ciLCJjbHItcm93IiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItanVzdGlm''@;'; put 'put ''eS1jb250ZW50LWNlbnRlciIsInctMTAwIiwibS0wIl0sWzEsImZvcm0tYmxvY2siLCJ0YWJsZS1zZWFyY2gtd3JhcHBlciIsInN3IiwiY2xyLWNvbC1tZCJdLFsiY2xyRm9ybSIsIiIsMSwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsImlucHV0LXdyYXBwZXIiXSxbImNscklu''@;'; put 'put ''cHV0IiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2giLCJuYW1lIiwic2VhcmNoLWlucHV0IiwzLCJrZXl1cC5lbnRlciIsInR5cGUiXSxbInNoYXBlIiwic2VhcmNoIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJzcGlubmVyIHNwaW5uZXItaW5saW5lIiw0LCJuZ0lmIl0sWyJ0eXBl''@;'; put 'put ''IiwiY2hlY2tib3giLCJjbHJDaGVja2JveCIsIiIsIm5hbWUiLCJudW1lcmljX2NoZWNrIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsxLCJ0aXRsZS1jb2wiLCJjbHItY29sLWF1dG8iLCJjbHItZmxleC1jb2x1bW4iLCJjbHItZmxleC1zbS1yb3ciXSxbImNkcy10ZXh0Iiwic2Vj''@;'; put 'put ''dGlvbiIsMSwiY2xyLWZsZXgtY29sdW1uIiwiZC1mbGV4IiwiY2xyLWZsZXgtc20tcm93IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsclRvb2x0aXBUcmlnZ2Vy''@;'; put 'put ''IiwiIiwiYXJpYS1sYWJlbCIsIlZpZXcgZGF0YXNldCBtZXRhIGluZm8iLCJzaGFwZSIsImluZm8tY2lyY2xlIiwic2l6ZSIsIjI0IiwxLCJpcy1oaWdobGlnaHQiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYm9sdCIsImNsYXNzIiwiY29sb3IteWVsbG93IG1yLTUi''@;'; put 'put ''LDQsIm5nSWYiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiw0LCJuZ0lmIl0sWzEsIm9wdGlvbnMtY29sIiwiY2xyLWNvbC1tZCJdLFsiY2xhc3MiLCJvcHRpb25zLWRyb3Bkb3duIiwzLCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTEy''@;'; put 'put ''IGluZm9CYXIiLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIiwzLCJjbGljayJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiXSxbInNoYXBlIiwiYm9sdCIsMSwiY29sb3IteWVsbG93IiwibXItNSJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiXSxbImNsclBvc2l0aW9uIiwiYm90''@;'; put 'put ''dG9tLWxlZnQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsImNsclNpemUiLCJsZyJdLFsic2hhcGUiLCJyZWZyZXNoIiwxLCJyZWZyZXNoLXRhYmxlIiwzLCJjbGljayJdLFsxLCJvcHRpb25zLWRyb3Bkb3duIiwzLCJjbHJDbG9z''@;'; put 'put ''ZU1lbnVPbkl0ZW1DbGljayJdLFsidHlwZSIsImJ1dHRvbiIsImNsckRyb3Bkb3duVHJpZ2dlciIsIiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJmaWx0ZXJTaWRlIl0sWyJzaGFwZSIsImNvZyIsInNpemUiLCIxNSJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLDQs''@;'; put 'put ''ImNscklmT3BlbiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siXSxbInNoYXBlIiwidmlldy1jYXJkcyJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJmaWx0ZXIiXSxbInNo''@;'; put 'put ''YXBlIiwiZG93bmxvYWQiXSxbInNoYXBlIiwiZG93bmxvYWQtY2xvdWQiXSxbInNoYXBlIiwicGVuY2lsIl0sWyJzaGFwZSIsInN3aXRjaCJdLFsxLCJjbHItY29sLW1kLTEyIiwiaW5mb0JhciJdLFsxLCJuby10YWJsZS1zZWxlY3RlZCJdLFsic3JjIiwiL1NBU1N0b3JlZFByb2Nlc3MvP19Q''@;'; put 'put ''Uk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2ltYWdlcy9zZWxlY3QtbGlicmFyeS1wbmciLCJhbHQiLCJzZWxlY3QgYSBsaWJyYXJ5IGljb24iLDEsInNlbGVjdC10YWJsZS1pY29uIl0sWyJjZHMtdGV4dCIsInNlY3Rpb24iLDEsInRleHQtY2VudGVyIiwiY29sb3ItZ3Jh''@;'; put 'put ''eSIsIm10LTEwIl0sWzEsImhlYWRlci1yb3ciLCJjbHItcm93IiwiYm9yZGVyLWJvdHRvbS1kaXZpZGVyIiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJ3LTEwMCIsIm0tMCJdLFsxLCJ0aXRsZS1jb2wiLCJjbHItY29sLWF1dG8iLCJtdC0xNSIsIm1iLTE1Il0sWzEsInRleHQtY2VudGVy''@;'; put 'put ''IiwibXQtMTAiXSxbImNsck1lZGl1bSIsIiIsNCwibmdJZiJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZC1pbmZvIHBvaW50ZXItZXZlbnRzLW5vbmUiLDQsIm5nSWYiXSxbImNsYXNzIiwibGliaW5mbyBtLTAgY2xyLXJvdyIsNCwibmdJZiJdLFsxLCJuby10YWJsZS1zZWxlY3RlZC1p''@;'; put 'put ''bmZvIiwicG9pbnRlci1ldmVudHMtbm9uZSJdLFsic3JjIiwiL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2ltYWdlcy9zZWxlY3QtdGFibGUtcG5nIiwiYWx0Iiwic2VsZWN0IHRhYmxlIGljb24iLDEsInNlbGVjdC10YWJsZS1pY29u''@;'; put 'put ''Il0sWzEsImxpYmluZm8iLCJtLTAiLCJjbHItcm93Il0sWyJjbGFzcyIsInRleHQtY2VudGVyIG0tMCB3LTEwMCIsNCwibmdJZiJdLFsxLCJ0ZXh0LWNlbnRlciIsIm0tMCIsInctMTAwIl0sWyJzaGFwZSIsInJlZnJlc2giLDEsInJlZnJlc2gtdGFibGUiLCJtLTAiLDMsImNsaWNrIl0sWzEs''@;'; put 'put ''Im0tMCJdLFsxLCJtLTAiLCJmb250LWJvbGQiXSxbMSwiY2FyZC1ibG9jayIsIm5vRGF0YSJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGNvbG9yLWdyYXkiLDQsIm5nSWYiXSxbMSwidGV4dC1jZW50''@;'; put 'put ''ZXIiLCJjb2xvci1ncmF5Il0sWzEsImNsci1mbGV4LTEiXSxbMSwiaG90LXdyYXBwZXIiLCJjbHItZmxleC0xIl0sWyJpZCIsImhvdFRhYmxlIiwxLCJ2aWV3LWhvdCIsMywiZGF0YSIsInNldHRpbmdzIl0sWzEsIm10LTItaSIsInctMTAwIiwidGV4dC1jZW50ZXIiXV0sdGVtcGxhdGU6ZnVu''@;'; put 'put ''Y3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9T24oKTtkZSgwLCJhcHAtc2lkZWJhciIsNiksT3QoInNjcm9sbGVkVG9Cb3R0b20iLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgubG9hZE1vcmVMaWJyYXJpZXMoKSl9KSxndCgxLGJOdCwyLDAsImRpdiIsNyksZGUoMiwiY2xyLXRyZWUi''@;'; put 'put ''KSxndCgzLENOdCw2LDMsImNsci10cmVlLW5vZGUiLDgpKDQsT050LDIsMSwibmctY29udGFpbmVyIiw5KSxoZSgpLGd0KDUsUE50LDMsMCwiZGl2IiwxMCksaGUoKSxkZSg2LCJkaXYiLDExKSxndCg3LEZOdCwxNCwwLCJkaXYiLDEyKSg4LEhOdCwxLDAsImRpdiIsMTMpLGRlKDksImNsci1t''@;'; put 'put ''b2RhbCIsMTQpLGNpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxmaShoLm9wZW5Eb3dubG9hZCxNKXx8KGgub3BlbkRvd25sb2FkPU0pLEN0KE0pfSksZGUoMTAsImgzIiwxNSksUGUoMTEsIkRvd25sb2FkIiksaGUoKSxkZSgxMiwiZGl2IiwxNikoMTMs''@;'; put 'put ''ImRpdiIsMTcpKDE0LCJjbHItc2VsZWN0LWNvbnRhaW5lciIsMTgpKDE1LCJsYWJlbCIpLFBlKDE2LCJQbGVhc2UgY2hvb3NlIGRvd25sb2FkIGZvcm1hdCIpLGhlKCksZGUoMTcsInNlbGVjdCIsMTkpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksZmkoaC5k''@;'; put 'put ''b3dubG9hZEZvcm1hdCxNKXx8KGguZG93bmxvYWRGb3JtYXQ9TSksQ3QoTSl9KSxkZSgxOCwib3B0aW9uIiwyMCksUGUoMTksIkNTViIpLGhlKCksZGUoMjAsIm9wdGlvbiIsMjEpLFBlKDIxLCJEYXRhbGluZXMgKGNhcmRzIGZpbGUpIiksaGUoKSxkZSgyMiwib3B0aW9uIiwyMiksUGUoMjMs''@;'; put 'put ''IkRETCAoUEdTUUwgRmxhdm91cikiKSxoZSgpLGRlKDI0LCJvcHRpb24iLDIzKSxQZSgyNSwiRERMIChTQVMgRmxhdm91cikiKSxoZSgpLGRlKDI2LCJvcHRpb24iLDI0KSxQZSgyNywiRERMIChUU1FMIEZsYXZvdXIpIiksaGUoKSxkZSgyOCwib3B0aW9uIiwyNSksUGUoMjksIkV4Y2VsICgu''@;'; put 'put ''eGxzeCkiKSxoZSgpLGRlKDMwLCJvcHRpb24iLDI2KSxQZSgzMSwiTWFya2Rvd24gKC5tZCkiKSxoZSgpKCkoKSgpKCksZGUoMzIsImRpdiIsMjcpKDMzLCJidXR0b24iLDI4KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgub3BlbkRvd25sb2FkPSExKX0pLFBlKDM0''@;'; put 'put ''LCIgQ2FuY2VsICIpLGhlKCksZGUoMzUsImJ1dHRvbiIsMjkpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5kb3dubG9hZEZvcm1hdC5pbmNsdWRlcygiRERMIik/aC5kb3dubG9hZERETCgpOmguZG93bmxvYWREYXRhKCkpfSksUGUoMzYsIiBPayAiKSxoZSgpKCko''@;'; put 'put ''KSxkZSgzNywiY2xyLW1vZGFsIiwxNCksY2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGZpKGgud2ViUXVlcnksTSl8fChoLndlYlF1ZXJ5PU0pLEN0KE0pfSksZGUoMzgsImgzIiwxNSksUGUoMzksIiBXZWIgUXVlcnkgVVJMICIpLGhlKCksZGUoNDAs''@;'; put 'put ''ImRpdiIsMzApKDQxLCJkaXYiLDMxKSg0MiwiZGl2IiwzMikoNDMsImRpdiIsMzMpKDQ0LCJkaXYiLDM0KSg0NSwic3BhbiIpLFBlKDQ2LCJDb3B5IHRoZSBiZWxvdyBpbnRvIHlvdXIgcHJlZmVycmVkIGNsaWVudCB0b29sOiIpLGhlKCksZGUoNDcsImRpdiIsMzUpKDQ4LCJkaXYiLDM2KSxP''@;'; put 'put ''dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGgud2ViUXVlcnlUYWI9ITAsQ3QoaC5zaG93V2ViUXVlcnkoKSl9KSxHdCg0OSwiaW5wdXQiLDM3KSxkZSg1MCwibGFiZWwiKSxQZSg1MSwiVEFCIiksaGUoKSgpLGRlKDUyLCJkaXYiLDM2KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHd0KGYpLGgud2ViUXVlcnlUYWI9ITEsQ3QoaC5zaG93V2ViUXVlcnkoKSl9KSxHdCg1MywiaW5wdXQiLDM3KSxkZSg1NCwibGFiZWwiKSxQZSg1NSwiQ1NWIiksaGUoKSgpKCkoKSxkZSg1NiwiZGl2IiwzOCkoNTcsInRleHRhcmVhIiwzOSwwKSxPdCgiZm9jdXMiLGZ1bmN0aW9u''@;'; put 'put ''KE0pe3JldHVybiB3dChmKSxDdChoLm9uQ2xpQ29tbWFuZEZvY3VzKE0pKX0pLFBlKDU5LCIgICAgICAgICAgICAgICIpLGhlKCkoKSxkZSg2MCwiZGl2Iiw0MCkoNjEsImJ1dHRvbiIsNDEpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5jb3B5VG9DbGlwKCkpfSks''@;'; put 'put ''UGUoNjIsIiBjb3B5IHRvIGNsaXBib2FyZCAiKSxoZSgpKCkoKSgpKCkoKSxkZSg2MywiZGl2IiwyNykoNjQsImJ1dHRvbiIsMjgpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC53ZWJRdWVyeT0hMSl9KSxQZSg2NSwiIGNsb3NlICIpLGhlKCkoKSgpLGRlKDY2LCJj''@;'; put 'put ''bHItbW9kYWwiLDQyKSxjaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksZmkoaC5maWx0ZXIsTSl8fChoLmZpbHRlcj1NKSxDdChNKX0pLGRlKDY3LCJoMyIsMTUpLFBlKDY4LCIgRmlsdGVyIGZvciB0YWJsZToiKSxkZSg2OSwic3BhbiIpLFBlKDcwKSxo''@;'; put 'put ''ZSgpKCksZGUoNzEsImRpdiIsMTYpLGd0KDcyLE5OdCwyLDAsImFwcC1xdWVyeSIsNDMpLGhlKCksZGUoNzMsImRpdiIsMjcpKDc0LCJidXR0b24iLDQ0KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgucmVzZXRGaWx0ZXIoKSl9KSxQZSg3NSwiIHJlc2V0IGZpbHRl''@;'; put 'put ''ciAiKSxoZSgpLGRlKDc2LCJidXR0b24iLDQ1KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGguZmlsdGVyPSExLEN0KGgucmVtb3ZlUXVlcnkoKSl9KSxQZSg3NywiIENhbmNlbCAiKSxoZSgpLGRlKDc4LCJidXR0b24iLDQ2KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIHd0KGYpLEN0KGguc2VuZENsYXVzZSgpKX0pLFBlKDc5LCIgT2sgIiksaGUoKSgpKCksZGUoODAsImNsci1tb2RhbCIsNDcpLGNpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxmaShoLnF1ZXJ5RXJyLE0pfHwoaC5xdWVyeUVycj1NKSxDdChNKX0p''@;'; put 'put ''LGRlKDgxLCJoMyIsNDgpLFBlKDgyLCJFcnJvciIpLGhlKCksZGUoODMsImRpdiIsMTYpKDg0LCJwIiksUGUoODUpLGhlKCkoKSxkZSg4NiwiZGl2IiwyNykoODcsImJ1dHRvbiIsNDkpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5xdWVyeUVycj0hMSl9KSxQZSg4''@;'; put 'put ''OCwiIENhbmNlbCAiKSxoZSgpLGRlKDg5LCJidXR0b24iLDUwKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgucXVlcnlFcnI9ITEpfSksUGUoOTAsIiBPayAiKSxoZSgpKCkoKSxndCg5MSxWTnQsNiwwLCJkaXYiLDUxKSg5MixDVnQsOCw2LCJkaXYiLDUyKSxoZSgp''@;'; put 'put ''LGRlKDkzLCJhcHAtZGF0YXNldC1pbmZvIiw1MyksY2koIm9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxmaShoLmRhdGFzZXRJbmZvLE0pfHwoaC5kYXRhc2V0SW5mbz1NKSxDdChNKX0pLE90KCJyb3dDbGlja2VkIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5k''@;'; put 'put ''YXRhc2V0SW5mb01vZGFsUm93Q2xpY2tlZChNKSl9KSxoZSgpLGRlKDk0LCJhcHAtdmlld2JveGVzIiw1NCksY2koInZpZXdib3hNb2RhbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGZpKGgudmlld2JveE9wZW4sTSl8fChoLnZpZXdib3hPcGVuPU0pLEN0KE0pfSksaGUoKX1p''@;'; put 'put ''ZigyJmQpe2NvbnN0IGY9ZmEoNTgpO2ZlKCksRWUoIm5nSWYiLGgubGlicmFyaWVzTG9hZGluZyksZmUoMiksRWUoIm5nSWYiLGgubGlicmFyaWVzKSxmZSgpLEVlKCJuZ0Zvck9mIixoLmxpYnJhcmllcyksZmUoKSxFZSgibmdJZiIsaC5saWJyYXJpZXNQYWdpbmcpLGZlKDIpLEVlKCJuZ0lm''@;'; put 'put ''IixoLm51bGxWYXJpYWJsZXMpLGZlKCksRWUoIm5nSWYiLGgubnVsbFZhcmlhYmxlcyksZmUoKSxsaSgiY2xyTW9kYWxPcGVuIixoLm9wZW5Eb3dubG9hZCksRWUoImNsck1vZGFsU2l6ZSIsIm1kIiksZmUoOCksbGkoIm5nTW9kZWwiLGguZG93bmxvYWRGb3JtYXQpLGZlKDE4KSxFZSgiaWQi''@;'; put 'put ''LGgudGFibGVUaXRsZSksZmUoMiksbGkoImNsck1vZGFsT3BlbiIsaC53ZWJRdWVyeSksRWUoImNsck1vZGFsU2l6ZSIsImxnIiksZmUoMTIpLEVlKCJjaGVja2VkIixoLndlYlF1ZXJ5VGFiKSxmZSg0KSxFZSgiY2hlY2tlZCIsIWgud2ViUXVlcnlUYWIpLGZlKDQpLEVlKCJ2YWx1ZSIsaC53''@;'; put 'put ''ZWJRdWVyeVRleHQpLGZlKDQpLEVlKCJuZ3hDbGlwYm9hcmQiLGYpLGZlKDUpLGxpKCJjbHJNb2RhbE9wZW4iLGguZmlsdGVyKSxFZSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDQpLElyKCIgIixoLmxpYlRhYiwiICIpLGZlKDIpLEVlKCJuZ0lmIixo''@;'; put 'put ''LmZpbHRlciksZmUoNiksRWUoImNsckxvYWRpbmciLGguc3VibWl0TG9hZGluZyksZmUoMiksbGkoImNsck1vZGFsT3BlbiIsaC5xdWVyeUVyciksZmUoNSksQ3IoaC5xdWVyeUVyck1lc3NhZ2UpLGZlKDYpLEVlKCJuZ0lmIixoLmxvYWRpbmdUYWJsZVZpZXcpLGZlKCksRWUoIm5nSWYiLCFo''@;'; put 'put ''LmxvYWRpbmdUYWJsZVZpZXcpLGZlKCksbGkoIm9wZW4iLGguZGF0YXNldEluZm8pLEVlKCJkc21ldGEiLGguZHNtZXRhKSgidmVyc2lvbnMiLGgudmVyc2lvbnMpLGZlKCksbGkoInZpZXdib3hNb2RhbCIsaC52aWV3Ym94T3Blbil9fSxkZXBlbmRlbmNpZXM6W1J5ZSxocyxDYSxDZixsNCxo''@;'; put 'put ''TnQseTkseGYsRWYsbmMsc2gsTWYsaGwsbTkscmwsVjMsdzIsbWgsdTUsVWwsYnUscjAsYzEsSWYsTGYsQ3MsYjNlLGhoLHB3LHkyLE1kLE45LEN3LHZILHI1LFQ5LEE5LGZ3LGs5LEk5LEQ5LGZoLEc1LHNnLFB5ZSxSSCx1YWUsZ1Msb2csSHllLGdOdF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJl''@;'; put 'put ''dHVybiBjfSkoKTtjb25zdCBTVnQ9W3twYXRoOiIiLGNvbXBvbmVudDpySHQsY2hpbGRyZW46W3twYXRoOiIiLHBhdGhNYXRjaDoiZnVsbCIscmVkaXJlY3RUbzoiZGF0YSJ9LHtwYXRoOiJkYXRhIixjb21wb25lbnQ6TXp9LHtwYXRoOiJkYXRhIixjb21wb25lbnQ6TXp9LHtwYXRoOiJkYXRh''@;'; put 'put ''LzpsaWJNZW0vOmZpbHRlcklkIixjb21wb25lbnQ6TXp9LHtwYXRoOiJkYXRhLzpsaWJNZW0iLGNvbXBvbmVudDpNen0se3BhdGg6ImxpbmVhZ2UiLGNvbXBvbmVudDpTen0se3BhdGg6ImxpbmVhZ2UvOnRhYmxlaWQvOmRpcmVjdGlvbiIsY29tcG9uZW50OlN6fSx7cGF0aDoibGluZWFnZS9j''@;'; put 'put ''b2x1bW4vOmNvbHVyaS86ZGlyZWN0aW9uIixjb21wb25lbnQ6U3p9LHtwYXRoOiJsaW5lYWdlL2NvbHVtbi86Y29sdXJpLzpkaXJlY3Rpb24vOnJlbG9hZCIsY29tcG9uZW50OlN6fSx7cGF0aDoidml5YS1hcGktZXhwbG9yZXIiLGNvbXBvbmVudDpjTnR9LHtwYXRoOiJtZXRhZGF0YSIsY29t''@;'; put 'put ''cG9uZW50OmFvZX0se3BhdGg6Im1ldGFkYXRhL29iamVjdC86b2JqZWN0SUQiLGNvbXBvbmVudDphb2V9LHtwYXRoOiJtZXRhZGF0YS9vYmplY3QvOm9iamVjdElELzpvYmplY3ROYW1lIixjb21wb25lbnQ6YW9lfSx7cGF0aDoidXNlcm5hdiIsY29tcG9uZW50Om5IdCxjaGlsZHJlbjpbe3Bh''@;'; put 'put ''dGg6IiIscGF0aE1hdGNoOiJmdWxsIixyZWRpcmVjdFRvOiJncm91cHMifSx7cGF0aDoidXNlcnMiLGNvbXBvbmVudDp4X2V9LHtwYXRoOiJ1c2Vycy86dXJpIixjb21wb25lbnQ6eF9lfSx7cGF0aDoiZ3JvdXBzIixjb21wb25lbnQ6bmJlfSx7cGF0aDoiZ3JvdXBzLzp1cmkiLGNvbXBvbmVu''@;'; put 'put ''dDpuYmV9LHtwYXRoOiJyb2xlcyIsY29tcG9uZW50Ok1fZX0se3BhdGg6InJvbGVzLzp1cmkiLGNvbXBvbmVudDpNX2V9XX1dfV07bGV0IE1WdD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAy''@;'; put 'put ''NzVtb2Q9RWkoe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj15aSh7aW1wb3J0czpbZXUuZm9yQ2hpbGQoU1Z0KSxldV19KX19cmV0dXJuIGN9KSgpLHhWdD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0''@;'; put 'put ''aWN7dGhpcy5cdTAyNzVtb2Q9RWkoe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj15aSh7aW1wb3J0czpbVnllLE5hLE1WdCxmTnQsVWMsdTEsZnkscHkscFMsR0QsaGFlLG4zXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgVFZ0PWV1LmZvclJvb3QoW3twYXRoOiIiLHJlZGlyZWN0VG86''@;'; put 'put ''ImhvbWUiLHBhdGhNYXRjaDoiZnVsbCJ9LHtwYXRoOiJ2aWV3Iixsb2FkQ2hpbGRyZW46KCk9PnhWdH0se3BhdGg6InJldmlldyIsY29tcG9uZW50OkNrdCxjaGlsZHJlbjpbe3BhdGg6IiIscGF0aE1hdGNoOiJmdWxsIixyZWRpcmVjdFRvOiJ0b2FwcHJvdmUifSx7cGF0aDoiIixsb2FkQ2hp''@;'; put 'put ''bGRyZW46KCk9PndrdH1dfSx7cGF0aDoibGljZW5zaW5nIixsb2FkQ2hpbGRyZW46KCk9PkFUdH0se3BhdGg6ImhvbWUiLGxvYWRDaGlsZHJlbjooKT0+VUV0fSx7cGF0aDoiZWRpdG9yIixsb2FkQ2hpbGRyZW46KCk9PkxNdH0se3BhdGg6InN0YWdlIixsb2FkQ2hpbGRyZW46KCk9PlJrdH0s''@;'; put 'put ''e3BhdGg6InN5c3RlbSIsbG9hZENoaWxkcmVuOigpPT5Xa3R9LHtwYXRoOiJkZXBsb3kiLGxvYWRDaGlsZHJlbjooKT0+QW50fSx7cGF0aDoiKioiLGNvbXBvbmVudDpzdHR9XSx7dXNlSGFzaDohMH0pO2xldCBBVnQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPUVpKHt0eXBlOmMsYm9vdHN0cmFwOlttUWVdfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPXlpKHtwcm92aWRlcnM6W3dGLE0yLGdhZSxjRixyT2UoZDkoaTYuTGVnYWN5SW50ZXJjZXB0b3JzLFt7cHJvdmlkZTpX''@;'; put 'put ''ZGUsdXNlRmFjdG9yeTpXTGV9LHtwcm92aWRlOnZULHVzZUV4aXN0aW5nOldkZSxtdWx0aTohMH1dKSldLGltcG9ydHM6W290dCxadWUsVWMsd2plLFRWdCxwUyx1MSxweSxHRCxuMyxqSHRdfSl9fXJldHVybiBjfSkoKTtVQWUoKS5ib290c3RyYXBNb2R1bGUoQVZ0KX0sNTUwNDY6ZnVuY3Rp''@;'; put 'put ''b24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXt3b3Jkczp7c3M6WyJzZWt1bmRhIiwic2VrdW5kZSIsInNla3VuZGkiXSxtOlsiamVkYW4gbWludXQiLCJqZWRub2cgbWludXRhIl0sbW06WyJtaW51dCIsIm1pbnV0YSIsIm1pbnV0YSJdLGg6WyJqZWRhbiBzYXQi''@;'; put 'put ''LCJqZWRub2cgc2F0YSJdLGhoOlsic2F0Iiwic2F0YSIsInNhdGkiXSxkOlsiamVkYW4gZGFuIiwiamVkbm9nIGRhbmEiXSxkZDpbImRhbiIsImRhbmEiLCJkYW5hIl0sTTpbImplZGFuIG1lc2VjIiwiamVkbm9nIG1lc2VjYSJdLE1NOlsibWVzZWMiLCJtZXNlY2EiLCJtZXNlY2kiXSx5Olsi''@;'; put 'put ''amVkbnUgZ29kaW51IiwiamVkbmUgZ29kaW5lIl0seXk6WyJnb2RpbnUiLCJnb2RpbmUiLCJnb2RpbmEiXX0sY29ycmVjdEdyYW1tYXRpY2FsQ2FzZTpmdW5jdGlvbihWLHcpe3JldHVybiBWJTEwPj0xJiZWJTEwPD00JiYoViUxMDA8MTB8fFYlMTAwPj0yMCk/ViUxMD09MT93WzBdOndbMV06''@;'; put 'put ''d1syXX0sdHJhbnNsYXRlOmZ1bmN0aW9uKFYsdyxQLEYpe3ZhciB6LFI9Xy53b3Jkc1tQXTtyZXR1cm4gMT09PVAubGVuZ3RoPyJ5Ij09PVAmJnc/ImplZG5hIGdvZGluYSI6Rnx8dz9SWzBdOlJbMV06KHo9Xy5jb3JyZWN0R3JhbW1hdGljYWxDYXNlKFYsUiksInl5Ij09PVAmJncmJiJnb2Rp''@;'; put 'put ''bnUiPT09ej9WKyIgZ29kaW5hIjpWKyIgIit6KX19O0kuZGVmaW5lTG9jYWxlKCJzciIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFydF9hcHJpbF9tYWpfanVuX2p1bF9hdmd1c3Rfc2VwdGVtYmFyX29rdG9iYXJfbm92ZW1iYXJfZGVjZW1iYXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6''@;'; put 'put ''Imphbi5fZmViLl9tYXIuX2Fwci5fbWFqX2p1bl9qdWxfYXZnLl9zZXAuX29rdC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Im5lZGVsamFfcG9uZWRlbGpha191dG9yYWtfc3JlZGFfXHUwMTBkZXR2cnRha19wZXRha19zdWJvdGEiLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXNTaG9ydDoibmVkLl9wb24uX3V0by5fc3JlLl9cdTAxMGRldC5fcGV0Ll9zdWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb191dF9zcl9cdTAxMGRlX3BlX3N1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6''@;'; put 'put ''Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiRC4gTS4gWVlZWS4iLExMOiJELiBNTU1NIFlZWVkuIixMTEw6IkQuIE1NTU0gWVlZWS4gSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZLiBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltkYW5hcyB1XSBMVCIsbmV4dERheToiW3N1dHJhIHVd''@;'; put 'put ''IExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt1XSBbbmVkZWxqdV0gW3VdIExUIjtjYXNlIDM6cmV0dXJuIlt1XSBbc3JlZHVdIFt1XSBMVCI7Y2FzZSA2OnJldHVybiJbdV0gW3N1Ym90dV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNh''@;'; put 'put ''c2UgNDpjYXNlIDU6cmV0dXJuIlt1XSBkZGRkIFt1XSBMVCJ9fSxsYXN0RGF5OiJbanVcdTAxMGRlIHVdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVyblsiW3Byb1x1MDE2MWxlXSBbbmVkZWxqZV0gW3VdIExUIiwiW3Byb1x1MDE2MWxvZ10gW3BvbmVkZWxqa2FdIFt1XSBMVCIsIltw''@;'; put 'put ''cm9cdTAxNjFsb2ddIFt1dG9ya2FdIFt1XSBMVCIsIltwcm9cdTAxNjFsZV0gW3NyZWRlXSBbdV0gTFQiLCJbcHJvXHUwMTYxbG9nXSBbXHUwMTBkZXR2cnRrYV0gW3VdIExUIiwiW3Byb1x1MDE2MWxvZ10gW3BldGthXSBbdV0gTFQiLCJbcHJvXHUwMTYxbGVdIFtzdWJvdGVdIFt1XSBMVCJd''@;'; put 'put ''W3RoaXMuZGF5KCldfSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ6YSAlcyIscGFzdDoicHJlICVzIixzOiJuZWtvbGlrbyBzZWt1bmRpIixzczpfLnRyYW5zbGF0ZSxtOl8udHJhbnNsYXRlLG1tOl8udHJhbnNsYXRlLGg6Xy50cmFuc2xhdGUsaGg6Xy50cmFuc2xhdGUs''@;'; put 'put ''ZDpfLnRyYW5zbGF0ZSxkZDpfLnRyYW5zbGF0ZSxNOl8udHJhbnNsYXRlLE1NOl8udHJhbnNsYXRlLHk6Xy50cmFuc2xhdGUseXk6Xy50cmFuc2xhdGV9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6N319KX0oYig5NzU4''@;'; put 'put ''NikpfSw1NTE2MzpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImN5Iix7bW9udGhzOiJJb25hd3JfQ2h3ZWZyb3JfTWF3cnRoX0VicmlsbF9NYWlfTWVoZWZpbl9Hb3JmZmVubmFmX0F3c3RfTWVkaV9IeWRyZWZfVGFjaHdlZGRfUmhh''@;'; put 'put ''Z2Z5ciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSW9uX0Nod2VfTWF3X0Vicl9NYWlfTWVoX0dvcl9Bd3NfTWVkX0h5ZF9UYWNoX1JoYWciLnNwbGl0KCJfIiksd2Vla2RheXM6IkR5ZGQgU3VsX0R5ZGQgTGx1bl9EeWRkIE1hd3J0aF9EeWRkIE1lcmNoZXJfRHlkZCBJYXVfRHlkZCBHd2Vu''@;'; put 'put ''ZXJfRHlkZCBTYWR3cm4iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VsX0xsdW5fTWF3X01lcl9JYXVfR3dlX1NhZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTGxfTWFfTWVfSWFfR3dfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0''@;'; put 'put ''OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hlZGRpdyBhbV0gTFQiLG5leHREYXk6IltZZm9y''@;'; put 'put ''eSBhbV0gTFQiLG5leHRXZWVrOiJkZGRkIFthbV0gTFQiLGxhc3REYXk6IltEZG9lIGFtXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2Rpd2V0aGFmIGFtXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToibWV3biAlcyIscGFzdDoiJXMgeW4gXHhmNGwiLHM6InljaHlkaWcg''@;'; put 'put ''ZWlsaWFkYXUiLHNzOiIlZCBlaWxpYWQiLG06Im11bnVkIixtbToiJWQgbXVudWQiLGg6ImF3ciIsaGg6IiVkIGF3ciIsZDoiZGl3cm5vZCIsZGQ6IiVkIGRpd3Jub2QiLE06Im1pcyIsTU06IiVkIG1pcyIseToiYmx3eWRkeW4iLHl5OiIlZCBmbHluZWRkIn0sZGF5T2ZNb250aE9yZGluYWxQ''@;'; put 'put ''YXJzZTovXGR7MSwyfShmZWR8YWlufGFmfGlsfHlkZHxlZHxlZykvLG9yZGluYWw6ZnVuY3Rpb24ocCl7dmFyIHc9IiI7cmV0dXJuIHA+MjA/dz00MD09PXB8fDUwPT09cHx8NjA9PT1wfHw4MD09PXB8fDEwMD09PXA/ImZlZCI6ImFpbiI6cD4wJiYodz1bIiIsImFmIiwiaWwiLCJ5ZGQiLCJ5''@;'; put 'put ''ZGQiLCJlZCIsImVkIiwiZWQiLCJmZWQiLCJmZWQiLCJmZWQiLCJlZyIsImZlZCIsImVnIiwiZWciLCJmZWQiLCJlZyIsImVnIiwiZmVkIiwiZWciLCJmZWQiXVtwXSkscCt3fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw1NTE4ODooY2UsWCk9PnshZnVuY3Rpb24oKXsidXNl''@;'; put 'put ''IHN0cmljdCI7Zm9yKHZhciBiPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIixJPW5ldyBVaW50OEFycmF5KDI1NiksXz0wO188NjQ7XysrKUlbYi5jaGFyQ29kZUF0KF8pXT1fO1gubD1mdW5jdGlvbihwKXt2YXIgdyxW''@;'; put 'put ''PW5ldyBVaW50OEFycmF5KHApLFA9Vi5sZW5ndGgsRj0iIjtmb3Iodz0wO3c8UDt3Kz0zKUYrPWJbVlt3XT4+Ml0sRis9YlsoMyZWW3ddKTw8NHxWW3crMV0+PjRdLEYrPWJbKDE1JlZbdysxXSk8PDJ8Vlt3KzJdPj42XSxGKz1iWzYzJlZbdysyXV07cmV0dXJuIFAlMz09Mj9GPUYuc3Vic3Ry''@;'; put 'put ''aW5nKDAsRi5sZW5ndGgtMSkrIj0iOlAlMz09MSYmKEY9Ri5zdWJzdHJpbmcoMCxGLmxlbmd0aC0yKSsiPT0iKSxGfSxYLkQ9ZnVuY3Rpb24ocCl7dmFyIFAsUix6LE4sTyxWPS43NSpwLmxlbmd0aCx3PXAubGVuZ3RoLEY9MDsiPSI9PT1wW3AubGVuZ3RoLTFdJiYoVi0tLCI9Ij09PXBbcC5s''@;'; put 'put ''ZW5ndGgtMl0mJlYtLSk7dmFyIEs9bmV3IEFycmF5QnVmZmVyKFYpLFo9bmV3IFVpbnQ4QXJyYXkoSyk7Zm9yKFA9MDtQPHc7UCs9NClSPUlbcC5jaGFyQ29kZUF0KFApXSx6PUlbcC5jaGFyQ29kZUF0KFArMSldLE49SVtwLmNoYXJDb2RlQXQoUCsyKV0sTz1JW3AuY2hhckNvZGVBdChQKzMp''@;'; put 'put ''XSxaW0YrK109Ujw8Mnx6Pj40LFpbRisrXT0oMTUmeik8PDR8Tj4+MixaW0YrK109KDMmTik8PDZ8NjMmTztyZXR1cm4gS319KCl9LDU1NTM3OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMzEzNiksXz1iKDg4NzIzKSxwPWIoNzE5OTMpLFY9Yig5ODgyOCksdz1JLmFzc2VydDtm''@;'; put 'put ''dW5jdGlvbiBQKFIpe3RoaXMudHdpc3RlZD0xIT0oMHxSLmEpLHRoaXMubU9uZUE9dGhpcy50d2lzdGVkJiYtMT09KDB8Ui5hKSx0aGlzLmV4dGVuZGVkPXRoaXMubU9uZUEsVi5jYWxsKHRoaXMsImVkd2FyZHMiLFIpLHRoaXMuYT1uZXcgXyhSLmEsMTYpLnVtb2QodGhpcy5yZWQubSksdGhp''@;'; put 'put ''cy5hPXRoaXMuYS50b1JlZCh0aGlzLnJlZCksdGhpcy5jPW5ldyBfKFIuYywxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYzI9dGhpcy5jLnJlZFNxcigpLHRoaXMuZD1uZXcgXyhSLmQsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmRkPXRoaXMuZC5yZWRBZGQodGhpcy5kKSx3KCF0aGlzLnR3''@;'; put 'put ''aXN0ZWR8fDA9PT10aGlzLmMuZnJvbVJlZCgpLmNtcG4oMSkpLHRoaXMub25lQz0xPT0oMHxSLmMpfWZ1bmN0aW9uIEYoUix6LE4sTyxLKXtWLkJhc2VQb2ludC5jYWxsKHRoaXMsUiwicHJvamVjdGl2ZSIpLG51bGw9PT16JiZudWxsPT09TiYmbnVsbD09PU8/KHRoaXMueD10aGlzLmN1cnZl''@;'; put 'put ''Lnplcm8sdGhpcy55PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnQ9dGhpcy5jdXJ2ZS56ZXJvLHRoaXMuek9uZT0hMCk6KHRoaXMueD1uZXcgXyh6LDE2KSx0aGlzLnk9bmV3IF8oTiwxNiksdGhpcy56PU8/bmV3IF8oTywxNik6dGhpcy5jdXJ2ZS5vbmUsdGhp''@;'; put 'put ''cy50PUsmJm5ldyBfKEssMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJl''@;'; put 'put ''ZCkpLHRoaXMudCYmIXRoaXMudC5yZWQmJih0aGlzLnQ9dGhpcy50LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56T25lPXRoaXMuej09PXRoaXMuY3VydmUub25lLHRoaXMuY3VydmUuZXh0ZW5kZWQmJiF0aGlzLnQmJih0aGlzLnQ9dGhpcy54LnJlZE11bCh0aGlzLnkpLHRoaXMuek9u''@;'; put 'put ''ZXx8KHRoaXMudD10aGlzLnQucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpKSkpfXAoUCxWKSxjZS5leHBvcnRzPVAsUC5wcm90b3R5cGUuX211bEE9ZnVuY3Rpb24oeil7cmV0dXJuIHRoaXMubU9uZUE/ei5yZWROZWcoKTp0aGlzLmEucmVkTXVsKHopfSxQLnByb3RvdHlwZS5fbXVsQz1mdW5j''@;'; put 'put ''dGlvbih6KXtyZXR1cm4gdGhpcy5vbmVDP3o6dGhpcy5jLnJlZE11bCh6KX0sUC5wcm90b3R5cGUuanBvaW50PWZ1bmN0aW9uKHosTixPLEspe3JldHVybiB0aGlzLnBvaW50KHosTixPLEspfSxQLnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKHosTil7KHo9bmV3IF8oeiwxNikpLnJl''@;'; put 'put ''ZHx8KHo9ei50b1JlZCh0aGlzLnJlZCkpO3ZhciBPPXoucmVkU3FyKCksSz10aGlzLmMyLnJlZFN1Yih0aGlzLmEucmVkTXVsKE8pKSxaPXRoaXMub25lLnJlZFN1Yih0aGlzLmMyLnJlZE11bCh0aGlzLmQpLnJlZE11bChPKSksWT1LLnJlZE11bChaLnJlZEludm0oKSksVz1ZLnJlZFNxcnQo''@;'; put 'put ''KTtpZigwIT09Vy5yZWRTcXIoKS5yZWRTdWIoWSkuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7dmFyIHE9Vy5mcm9tUmVkKCkuaXNPZGQoKTtyZXR1cm4oTiYmIXF8fCFOJiZxKSYmKFc9Vy5yZWROZWcoKSksdGhpcy5wb2ludCh6LFcpfSxQLnByb3Rv''@;'; put 'put ''dHlwZS5wb2ludEZyb21ZPWZ1bmN0aW9uKHosTil7KHo9bmV3IF8oeiwxNikpLnJlZHx8KHo9ei50b1JlZCh0aGlzLnJlZCkpO3ZhciBPPXoucmVkU3FyKCksSz1PLnJlZFN1Yih0aGlzLmMyKSxaPU8ucmVkTXVsKHRoaXMuZCkucmVkTXVsKHRoaXMuYzIpLnJlZFN1Yih0aGlzLmEpLFk9Sy5y''@;'; put 'put ''ZWRNdWwoWi5yZWRJbnZtKCkpO2lmKDA9PT1ZLmNtcCh0aGlzLnplcm8pKXtpZihOKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3JldHVybiB0aGlzLnBvaW50KHRoaXMuemVybyx6KX12YXIgVz1ZLnJlZFNxcnQoKTtpZigwIT09Vy5yZWRTcXIoKS5yZWRTdWIoWSkuY21wKHRo''@;'; put 'put ''aXMuemVybykpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7cmV0dXJuIFcuZnJvbVJlZCgpLmlzT2RkKCkhPT1OJiYoVz1XLnJlZE5lZygpKSx0aGlzLnBvaW50KFcseil9LFAucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKHope2lmKHouaXNJbmZpbml0eSgpKXJldHVybiEw''@;'; put 'put ''O3oubm9ybWFsaXplKCk7dmFyIE49ei54LnJlZFNxcigpLE89ei55LnJlZFNxcigpLEs9Ti5yZWRNdWwodGhpcy5hKS5yZWRBZGQoTyksWj10aGlzLmMyLnJlZE11bCh0aGlzLm9uZS5yZWRBZGQodGhpcy5kLnJlZE11bChOKS5yZWRNdWwoTykpKTtyZXR1cm4gMD09PUsuY21wKFopfSxwKEYs''@;'; put 'put ''Vi5CYXNlUG9pbnQpLFAucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oeil7cmV0dXJuIEYuZnJvbUpTT04odGhpcyx6KX0sUC5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oeixOLE8sSyl7cmV0dXJuIG5ldyBGKHRoaXMseixOLE8sSyl9LEYuZnJvbUpTT049ZnVuY3Rpb24oeixO''@;'; put 'put ''KXtyZXR1cm4gbmV3IEYoeixOWzBdLE5bMV0sTlsyXSl9LEYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgeTog''@;'; put 'put ''Iit0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sRi5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy54LmNtcG4oMCkmJigwPT09dGhpcy55LmNtcCh0aGlzLnopfHx0''@;'; put 'put ''aGlzLnpPbmUmJjA9PT10aGlzLnkuY21wKHRoaXMuY3VydmUuYykpfSxGLnByb3RvdHlwZS5fZXh0RGJsPWZ1bmN0aW9uKCl7dmFyIHo9dGhpcy54LnJlZFNxcigpLE49dGhpcy55LnJlZFNxcigpLE89dGhpcy56LnJlZFNxcigpO089Ty5yZWRJQWRkKE8pO3ZhciBLPXRoaXMuY3VydmUuX211''@;'; put 'put ''bEEoeiksWj10aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCkucmVkSVN1Yih6KS5yZWRJU3ViKE4pLFk9Sy5yZWRBZGQoTiksVz1ZLnJlZFN1YihPKSxxPUsucmVkU3ViKE4pLGVlPVoucmVkTXVsKFcpLEo9WS5yZWRNdWwocSkscmU9Wi5yZWRNdWwocSksaWU9Vy5yZWRNdWwoWSk7cmV0''@;'; put 'put ''dXJuIHRoaXMuY3VydmUucG9pbnQoZWUsSixpZSxyZSl9LEYucHJvdG90eXBlLl9wcm9qRGJsPWZ1bmN0aW9uKCl7dmFyIEssWixZLFcscSxlZSx6PXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKSxOPXRoaXMueC5yZWRTcXIoKSxPPXRoaXMueS5yZWRTcXIoKTtpZih0aGlzLmN1cnZl''@;'; put 'put ''LnR3aXN0ZWQpe3ZhciBKPShXPXRoaXMuY3VydmUuX211bEEoTikpLnJlZEFkZChPKTt0aGlzLnpPbmU/KEs9ei5yZWRTdWIoTikucmVkU3ViKE8pLnJlZE11bChKLnJlZFN1Yih0aGlzLmN1cnZlLnR3bykpLFo9Si5yZWRNdWwoVy5yZWRTdWIoTykpLFk9Si5yZWRTcXIoKS5yZWRTdWIoSiku''@;'; put 'put ''cmVkU3ViKEopKToocT10aGlzLnoucmVkU3FyKCksZWU9Si5yZWRTdWIocSkucmVkSVN1YihxKSxLPXoucmVkU3ViKE4pLnJlZElTdWIoTykucmVkTXVsKGVlKSxaPUoucmVkTXVsKFcucmVkU3ViKE8pKSxZPUoucmVkTXVsKGVlKSl9ZWxzZSBXPU4ucmVkQWRkKE8pLHE9dGhpcy5jdXJ2ZS5f''@;'; put 'put ''bXVsQyh0aGlzLnopLnJlZFNxcigpLGVlPVcucmVkU3ViKHEpLnJlZFN1YihxKSxLPXRoaXMuY3VydmUuX211bEMoei5yZWRJU3ViKFcpKS5yZWRNdWwoZWUpLFo9dGhpcy5jdXJ2ZS5fbXVsQyhXKS5yZWRNdWwoTi5yZWRJU3ViKE8pKSxZPVcucmVkTXVsKGVlKTtyZXR1cm4gdGhpcy5jdXJ2''@;'; put 'put ''ZS5wb2ludChLLFosWSl9LEYucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuZXh0ZW5kZWQ/dGhpcy5fZXh0RGJsKCk6dGhpcy5fcHJvakRibCgpfSxGLnByb3RvdHlwZS5fZXh0QWRkPWZ1bmN0aW9uKHope3ZhciBOPXRo''@;'; put 'put ''aXMueS5yZWRTdWIodGhpcy54KS5yZWRNdWwoei55LnJlZFN1Yih6LngpKSxPPXRoaXMueS5yZWRBZGQodGhpcy54KS5yZWRNdWwoei55LnJlZEFkZCh6LngpKSxLPXRoaXMudC5yZWRNdWwodGhpcy5jdXJ2ZS5kZCkucmVkTXVsKHoudCksWj10aGlzLnoucmVkTXVsKHouei5yZWRBZGQoei56''@;'; put 'put ''KSksWT1PLnJlZFN1YihOKSxXPVoucmVkU3ViKEspLHE9Wi5yZWRBZGQoSyksZWU9Ty5yZWRBZGQoTiksSj1ZLnJlZE11bChXKSxyZT1xLnJlZE11bChlZSksaWU9WS5yZWRNdWwoZWUpLHVlPVcucmVkTXVsKHEpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEoscmUsdWUsaWUpfSxGLnByb3Rv''@;'; put 'put ''dHlwZS5fcHJvakFkZD1mdW5jdGlvbih6KXt2YXIgcmUsaWUsTj10aGlzLnoucmVkTXVsKHoueiksTz1OLnJlZFNxcigpLEs9dGhpcy54LnJlZE11bCh6LngpLFo9dGhpcy55LnJlZE11bCh6LnkpLFk9dGhpcy5jdXJ2ZS5kLnJlZE11bChLKS5yZWRNdWwoWiksVz1PLnJlZFN1YihZKSxxPU8u''@;'; put 'put ''cmVkQWRkKFkpLGVlPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRNdWwoei54LnJlZEFkZCh6LnkpKS5yZWRJU3ViKEspLnJlZElTdWIoWiksSj1OLnJlZE11bChXKS5yZWRNdWwoZWUpO3JldHVybiB0aGlzLmN1cnZlLnR3aXN0ZWQ/KHJlPU4ucmVkTXVsKHEpLnJlZE11bChaLnJlZFN1Yih0''@;'; put 'put ''aGlzLmN1cnZlLl9tdWxBKEspKSksaWU9Vy5yZWRNdWwocSkpOihyZT1OLnJlZE11bChxKS5yZWRNdWwoWi5yZWRTdWIoSykpLGllPXRoaXMuY3VydmUuX211bEMoVykucmVkTXVsKHEpKSx0aGlzLmN1cnZlLnBvaW50KEoscmUsaWUpfSxGLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oeil7cmV0''@;'; put 'put ''dXJuIHRoaXMuaXNJbmZpbml0eSgpP3o6ei5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4dEFkZCh6KTp0aGlzLl9wcm9qQWRkKHopfSxGLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oeil7cmV0dXJuIHRoaXMuX2hhc0RvdWJsZXMoeik/dGhpcy5jdXJ2ZS5f''@;'; put 'put ''Zml4ZWROYWZNdWwodGhpcyx6KTp0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMseil9LEYucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbih6LE4sTyl7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyxOXSxbeixPXSwyLCExKX0sRi5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlv''@;'; put 'put ''bih6LE4sTyl7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyxOXSxbeixPXSwyLCEwKX0sRi5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7aWYodGhpcy56T25lKXJldHVybiB0aGlzO3ZhciB6PXRoaXMuei5yZWRJbnZtKCk7cmV0dXJuIHRoaXMueD10aGlzLngu''@;'; put 'put ''cmVkTXVsKHopLHRoaXMueT10aGlzLnkucmVkTXVsKHopLHRoaXMudCYmKHRoaXMudD10aGlzLnQucmVkTXVsKHopKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56T25lPSEwLHRoaXN9LEYucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHRoaXMu''@;'; put 'put ''eC5yZWROZWcoKSx0aGlzLnksdGhpcy56LHRoaXMudCYmdGhpcy50LnJlZE5lZygpKX0sRi5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9LEYucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3Jt''@;'; put 'put ''YWxpemUoKSx0aGlzLnkuZnJvbVJlZCgpfSxGLnByb3RvdHlwZS5lcT1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcz09PXp8fDA9PT10aGlzLmdldFgoKS5jbXAoei5nZXRYKCkpJiYwPT09dGhpcy5nZXRZKCkuY21wKHouZ2V0WSgpKX0sRi5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKHope3Zh''@;'; put 'put ''ciBOPXoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bCh0aGlzLnopO2lmKDA9PT10aGlzLnguY21wKE4pKXJldHVybiEwO2Zvcih2YXIgTz16LmNsb25lKCksSz10aGlzLmN1cnZlLnJlZE4ucmVkTXVsKHRoaXMueik7Oyl7aWYoTy5pYWRkKHRoaXMuY3VydmUubiksTy5jbXAodGhpcy5j''@;'; put 'put ''dXJ2ZS5wKT49MClyZXR1cm4hMTtpZihOLnJlZElBZGQoSyksMD09PXRoaXMueC5jbXAoTikpcmV0dXJuITB9fSxGLnByb3RvdHlwZS50b1A9Ri5wcm90b3R5cGUubm9ybWFsaXplLEYucHJvdG90eXBlLm1peGVkQWRkPUYucHJvdG90eXBlLmFkZH0sNTU1OTI6Y2U9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''Y2UuZXhwb3J0cz1mdW5jdGlvbihYKXt0cnl7cmV0dXJuISFYKCl9Y2F0Y2h7cmV0dXJuITB9fX0sNTU5MTQ6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1KU09OLnBhcnNlKCdbWyJhMTQwIiwiXHVlNGM2Iiw2Ml0sWyJhMTgwIiwiXHVlNTA1IiwzMl0sWyJhMjQwIiwiXHVlNTI2Iiw2''@;'; put 'put ''Ml0sWyJhMjgwIiwiXHVlNTY1IiwzMl0sWyJhMmFiIiwiXHVlNzY2Iiw1XSxbImEyZTMiLCJcdTIwYWNcdWU3NmQiXSxbImEyZWYiLCJcdWU3NmVcdWU3NmYiXSxbImEyZmQiLCJcdWU3NzBcdWU3NzEiXSxbImEzNDAiLCJcdWU1ODYiLDYyXSxbImEzODAiLCJcdWU1YzUiLDMxLCJcdTMwMDAi''@;'; put 'put ''XSxbImE0NDAiLCJcdWU1ZTYiLDYyXSxbImE0ODAiLCJcdWU2MjUiLDMyXSxbImE0ZjQiLCJcdWU3NzIiLDEwXSxbImE1NDAiLCJcdWU2NDYiLDYyXSxbImE1ODAiLCJcdWU2ODUiLDMyXSxbImE1ZjciLCJcdWU3N2QiLDddLFsiYTY0MCIsIlx1ZTZhNiIsNjJdLFsiYTY4MCIsIlx1ZTZlNSIs''@;'; put 'put ''MzJdLFsiYTZiOSIsIlx1ZTc4NSIsN10sWyJhNmQ5IiwiXHVlNzhkIiw2XSxbImE2ZWMiLCJcdWU3OTRcdWU3OTUiXSxbImE2ZjMiLCJcdWU3OTYiXSxbImE2ZjYiLCJcdWU3OTciLDhdLFsiYTc0MCIsIlx1ZTcwNiIsNjJdLFsiYTc4MCIsIlx1ZTc0NSIsMzJdLFsiYTdjMiIsIlx1ZTdhMCIs''@;'; put 'put ''MTRdLFsiYTdmMiIsIlx1ZTdhZiIsMTJdLFsiYTg5NiIsIlx1ZTdiYyIsMTBdLFsiYThiYyIsIlx1ZTdjNyJdLFsiYThiZiIsIlx1MDFmOSJdLFsiYThjMSIsIlx1ZTdjOVx1ZTdjYVx1ZTdjYlx1ZTdjYyJdLFsiYThlYSIsIlx1ZTdjZCIsMjBdLFsiYTk1OCIsIlx1ZTdlMiJdLFsiYTk1YiIs''@;'; put 'put ''Ilx1ZTdlMyJdLFsiYTk1ZCIsIlx1ZTdlNFx1ZTdlNVx1ZTdlNiJdLFsiYTk4OSIsIlx1MzAzZVx1MmZmMCIsMTFdLFsiYTk5NyIsIlx1ZTdmNCIsMTJdLFsiYTlmMCIsIlx1ZTgwMSIsMTRdLFsiYWFhMSIsIlx1ZTAwMCIsOTNdLFsiYWJhMSIsIlx1ZTA1ZSIsOTNdLFsiYWNhMSIsIlx1ZTBi''@;'; put 'put ''YyIsOTNdLFsiYWRhMSIsIlx1ZTExYSIsOTNdLFsiYWVhMSIsIlx1ZTE3OCIsOTNdLFsiYWZhMSIsIlx1ZTFkNiIsOTNdLFsiZDdmYSIsIlx1ZTgxMCIsNF0sWyJmOGExIiwiXHVlMjM0Iiw5M10sWyJmOWExIiwiXHVlMjkyIiw5M10sWyJmYWExIiwiXHVlMmYwIiw5M10sWyJmYmExIiwiXHVl''@;'; put 'put ''MzRlIiw5M10sWyJmY2ExIiwiXHVlM2FjIiw5M10sWyJmZGExIiwiXHVlNDBhIiw5M10sWyJmZTUwIiwiXHUyZTgxXHVlODE2XHVlODE3XHVlODE4XHUyZTg0XHUzNDczXHUzNDQ3XHUyZTg4XHUyZThiXHVlODFlXHUzNTllXHUzNjFhXHUzNjBlXHUyZThjXHUyZTk3XHUzOTZlXHUzOTE4XHVl''@;'; put 'put ''ODI2XHUzOWNmXHUzOWRmXHUzYTczXHUzOWQwXHVlODJiXHVlODJjXHUzYjRlXHUzYzZlXHUzY2UwXHUyZWE3XHVlODMxXHVlODMyXHUyZWFhXHU0MDU2XHU0MTVmXHUyZWFlXHU0MzM3XHUyZWIzXHUyZWI2XHUyZWI3XHVlODNiXHU0M2IxXHU0M2FjXHUyZWJiXHU0M2RkXHU0NGQ2XHU0NjYx''@;'; put 'put ''XHU0NjRjXHVlODQzIl0sWyJmZTgwIiwiXHU0NzIzXHU0NzI5XHU0NzdjXHU0NzhkXHUyZWNhXHU0OTQ3XHU0OTdhXHU0OTdkXHU0OTgyXHU0OTgzXHU0OTg1XHU0OTg2XHU0OTlmXHU0OTliXHU0OWI3XHU0OWI2XHVlODU0XHVlODU1XHU0Y2EzXHU0YzlmXHU0Y2EwXHU0Y2ExXHU0Yzc3XHU0''@;'; put 'put ''Y2EyXHU0ZDEzIiw2LCJcdTRkYWVcdWU4NjRcdWU0NjgiLDkzXV0nKX0sNTU5NDE6KGNlLFgsYik9Pnt2YXIgST1iKDcxOTkzKSxfPWIoNDk2MDkpLHA9Xy5iYXNlLFY9Xy5iaWdudW0sdz1fLmNvbnN0YW50cy5kZXI7ZnVuY3Rpb24gUChOKXt0aGlzLmVuYz0iZGVyIix0aGlzLm5hbWU9Ti5u''@;'; put 'put ''YW1lLHRoaXMuZW50aXR5PU4sdGhpcy50cmVlPW5ldyBGLHRoaXMudHJlZS5faW5pdChOLmJvZHkpfWZ1bmN0aW9uIEYoTil7cC5Ob2RlLmNhbGwodGhpcywiZGVyIixOKX1mdW5jdGlvbiBSKE4sTyl7dmFyIEs9Ti5yZWFkVUludDgoTyk7aWYoTi5pc0Vycm9yKEspKXJldHVybiBLO3ZhciBa''@;'; put 'put ''PXcudGFnQ2xhc3NbSz4+Nl0sWT0hKDMyJkspO2lmKDMxJn5LKUsmPTMxO2Vsc2V7dmFyIFc9Sztmb3IoSz0wOyEoMTI4Jn5XKTspe2lmKFc9Ti5yZWFkVUludDgoTyksTi5pc0Vycm9yKFcpKXJldHVybiBXO0s8PD03LEt8PTEyNyZXfX1yZXR1cm57Y2xzOloscHJpbWl0aXZlOlksdGFnOkss''@;'; put 'put ''dGFnU3RyOncudGFnW0tdfX1mdW5jdGlvbiB6KE4sTyxLKXt2YXIgWj1OLnJlYWRVSW50OChLKTtpZihOLmlzRXJyb3IoWikpcmV0dXJuIFo7aWYoIU8mJjEyOD09PVopcmV0dXJuIG51bGw7aWYoISgxMjgmWikpcmV0dXJuIFo7dmFyIFk9MTI3Jlo7aWYoWT40KXJldHVybiBOLmVycm9yKCJs''@;'; put 'put ''ZW5ndGggb2N0ZWN0IGlzIHRvbyBsb25nIik7Wj0wO2Zvcih2YXIgVz0wO1c8WTtXKyspe1o8PD04O3ZhciBxPU4ucmVhZFVJbnQ4KEspO2lmKE4uaXNFcnJvcihxKSlyZXR1cm4gcTtafD1xfXJldHVybiBafWNlLmV4cG9ydHM9UCxQLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oTyxLKXty''@;'; put 'put ''ZXR1cm4gTyBpbnN0YW5jZW9mIHAuRGVjb2RlckJ1ZmZlcnx8KE89bmV3IHAuRGVjb2RlckJ1ZmZlcihPLEspKSx0aGlzLnRyZWUuX2RlY29kZShPLEspfSxJKEYscC5Ob2RlKSxGLnByb3RvdHlwZS5fcGVla1RhZz1mdW5jdGlvbihPLEssWil7aWYoTy5pc0VtcHR5KCkpcmV0dXJuITE7dmFy''@;'; put 'put ''IFk9Ty5zYXZlKCksVz1SKE8sJ0ZhaWxlZCB0byBwZWVrIHRhZzogIicrSysnIicpO3JldHVybiBPLmlzRXJyb3IoVyk/VzooTy5yZXN0b3JlKFkpLFcudGFnPT09S3x8Vy50YWdTdHI9PT1LfHxXLnRhZ1N0cisib2YiPT09S3x8Wil9LEYucHJvdG90eXBlLl9kZWNvZGVUYWc9ZnVuY3Rpb24o''@;'; put 'put ''TyxLLFope3ZhciBZPVIoTywnRmFpbGVkIHRvIGRlY29kZSB0YWcgb2YgIicrSysnIicpO2lmKE8uaXNFcnJvcihZKSlyZXR1cm4gWTt2YXIgVz16KE8sWS5wcmltaXRpdmUsJ0ZhaWxlZCB0byBnZXQgbGVuZ3RoIG9mICInK0srJyInKTtpZihPLmlzRXJyb3IoVykpcmV0dXJuIFc7aWYoIVom''@;'; put 'put ''JlkudGFnIT09SyYmWS50YWdTdHIhPT1LJiZZLnRhZ1N0cisib2YiIT09SylyZXR1cm4gTy5lcnJvcignRmFpbGVkIHRvIG1hdGNoIHRhZzogIicrSysnIicpO2lmKFkucHJpbWl0aXZlfHxudWxsIT09VylyZXR1cm4gTy5za2lwKFcsJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiAiJytLKyci''@;'; put 'put ''Jyk7dmFyIHE9Ty5zYXZlKCksZWU9dGhpcy5fc2tpcFVudGlsRW5kKE8sJ0ZhaWxlZCB0byBza2lwIGluZGVmaW5pdGUgbGVuZ3RoIGJvZHk6ICInK3RoaXMudGFnKyciJyk7cmV0dXJuIE8uaXNFcnJvcihlZSk/ZWU6KFc9Ty5vZmZzZXQtcS5vZmZzZXQsTy5yZXN0b3JlKHEpLE8uc2tpcChX''@;'; put 'put ''LCdGYWlsZWQgdG8gbWF0Y2ggYm9keSBvZjogIicrSysnIicpKX0sRi5wcm90b3R5cGUuX3NraXBVbnRpbEVuZD1mdW5jdGlvbihPLEspe2Zvcig7Oyl7dmFyIFo9UihPLEspO2lmKE8uaXNFcnJvcihaKSlyZXR1cm4gWjt2YXIgVyxZPXooTyxaLnByaW1pdGl2ZSxLKTtpZihPLmlzRXJyb3Io''@;'; put 'put ''WSkpcmV0dXJuIFk7aWYoVz1aLnByaW1pdGl2ZXx8bnVsbCE9PVk/Ty5za2lwKFkpOnRoaXMuX3NraXBVbnRpbEVuZChPLEspLE8uaXNFcnJvcihXKSlyZXR1cm4gVztpZigiZW5kIj09PVoudGFnU3RyKWJyZWFrfX0sRi5wcm90b3R5cGUuX2RlY29kZUxpc3Q9ZnVuY3Rpb24oTyxLLFosWSl7''@;'; put 'put ''Zm9yKHZhciBXPVtdOyFPLmlzRW1wdHkoKTspe3ZhciBxPXRoaXMuX3BlZWtUYWcoTywiZW5kIik7aWYoTy5pc0Vycm9yKHEpKXJldHVybiBxO3ZhciBlZT1aLmRlY29kZShPLCJkZXIiLFkpO2lmKE8uaXNFcnJvcihlZSkmJnEpYnJlYWs7Vy5wdXNoKGVlKX1yZXR1cm4gV30sRi5wcm90b3R5''@;'; put 'put ''cGUuX2RlY29kZVN0cj1mdW5jdGlvbihPLEspe2lmKCJiaXRzdHIiPT09Syl7dmFyIFo9Ty5yZWFkVUludDgoKTtyZXR1cm4gTy5pc0Vycm9yKFopP1o6e3VudXNlZDpaLGRhdGE6Ty5yYXcoKX19aWYoImJtcHN0ciI9PT1LKXt2YXIgWT1PLnJhdygpO2lmKFkubGVuZ3RoJTI9PTEpcmV0dXJu''@;'; put 'put ''IE8uZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBibXBzdHIgbGVuZ3RoIG1pc21hdGNoIik7Zm9yKHZhciBXPSIiLHE9MDtxPFkubGVuZ3RoLzI7cSsrKVcrPVN0cmluZy5mcm9tQ2hhckNvZGUoWS5yZWFkVUludDE2QkUoMipxKSk7cmV0dXJuIFd9aWYoIm51bXN0ciI9PT1LKXt2''@;'; put 'put ''YXIgZWU9Ty5yYXcoKS50b1N0cmluZygiYXNjaWkiKTtyZXR1cm4gdGhpcy5faXNOdW1zdHIoZWUpP2VlOk8uZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBudW1zdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVycyIpfWlmKCJvY3RzdHIiPT09SylyZXR1cm4gTy5yYXcoKTtpZigib2Jq''@;'; put 'put ''RGVzYyI9PT1LKXJldHVybiBPLnJhdygpO2lmKCJwcmludHN0ciI9PT1LKXt2YXIgSj1PLnJhdygpLnRvU3RyaW5nKCJhc2NpaSIpO3JldHVybiB0aGlzLl9pc1ByaW50c3RyKEopP0o6Ty5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHVuc3VwcG9ydGVkIGNoYXJh''@;'; put 'put ''Y3RlcnMiKX1yZXR1cm4vc3RyJC8udGVzdChLKT9PLnJhdygpLnRvU3RyaW5nKCk6Ty5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6ICIrSysiIHVuc3VwcG9ydGVkIil9LEYucHJvdG90eXBlLl9kZWNvZGVPYmppZD1mdW5jdGlvbihPLEssWil7Zm9yKHZhciBZLFc9W10scT0wOyFP''@;'; put 'put ''LmlzRW1wdHkoKTspe3ZhciBlZT1PLnJlYWRVSW50OCgpO3E8PD03LHF8PTEyNyZlZSwhKDEyOCZlZSkmJihXLnB1c2gocSkscT0wKX1pZigxMjgmZWUmJlcucHVzaChxKSxZPVo/VzpbV1swXS80MHwwLFdbMF0lNDBdLmNvbmNhdChXLnNsaWNlKDEpKSxLKXt2YXIgaWU9S1tZLmpvaW4oIiAi''@;'; put 'put ''KV07dm9pZCAwPT09aWUmJihpZT1LW1kuam9pbigiLiIpXSksdm9pZCAwIT09aWUmJihZPWllKX1yZXR1cm4gWX0sRi5wcm90b3R5cGUuX2RlY29kZVRpbWU9ZnVuY3Rpb24oTyxLKXt2YXIgWj1PLnJhdygpLnRvU3RyaW5nKCk7aWYoImdlbnRpbWUiPT09Syl2YXIgWT0wfFouc2xpY2UoMCw0''@;'; put 'put ''KSxXPTB8Wi5zbGljZSg0LDYpLHE9MHxaLnNsaWNlKDYsOCksZWU9MHxaLnNsaWNlKDgsMTApLEo9MHxaLnNsaWNlKDEwLDEyKSxyZT0wfFouc2xpY2UoMTIsMTQpO2Vsc2V7aWYoInV0Y3RpbWUiIT09SylyZXR1cm4gTy5lcnJvcigiRGVjb2RpbmcgIitLKyIgdGltZSBpcyBub3Qgc3VwcG9y''@;'; put 'put ''dGVkIHlldCIpO1k9MHxaLnNsaWNlKDAsMiksVz0wfFouc2xpY2UoMiw0KSxxPTB8Wi5zbGljZSg0LDYpLGVlPTB8Wi5zbGljZSg2LDgpLEo9MHxaLnNsaWNlKDgsMTApLHJlPTB8Wi5zbGljZSgxMCwxMiksWT1ZPDcwPzJlMytZOjE5MDArWX1yZXR1cm4gRGF0ZS5VVEMoWSxXLTEscSxlZSxK''@;'; put 'put ''LHJlLDApfSxGLnByb3RvdHlwZS5fZGVjb2RlTnVsbD1mdW5jdGlvbihPKXtyZXR1cm4gbnVsbH0sRi5wcm90b3R5cGUuX2RlY29kZUJvb2w9ZnVuY3Rpb24oTyl7dmFyIEs9Ty5yZWFkVUludDgoKTtyZXR1cm4gTy5pc0Vycm9yKEspP0s6MCE9PUt9LEYucHJvdG90eXBlLl9kZWNvZGVJbnQ9''@;'; put 'put ''ZnVuY3Rpb24oTyxLKXt2YXIgWj1PLnJhdygpLFk9bmV3IFYoWik7cmV0dXJuIEsmJihZPUtbWS50b1N0cmluZygxMCldfHxZKSxZfSxGLnByb3RvdHlwZS5fdXNlPWZ1bmN0aW9uKE8sSyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIE8mJihPPU8oSykpLE8uX2dldERlY29kZXIoImRlciIp''@;'; put 'put ''LnRyZWV9fSw1NTk4ODooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDMzOTYzKSxfPWIoMzI2MzMpLHA9SS5kb2N1bWVudCxWPV8ocCkmJl8ocC5jcmVhdGVFbGVtZW50KTtjZS5leHBvcnRzPWZ1bmN0aW9uKHcpe3JldHVybiBWP3AuY3JlYXRlRWxlbWVudCh3KTp7fX19LDU2MjE1''@;'; put 'put ''OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiaHktYW0iLHttb250aHM6e2Zvcm1hdDoiXHUwNTcwXHUwNTc4XHUwNTgyXHUwNTc2XHUwNTdlXHUwNTYxXHUwNTgwXHUwNTZiX1x1MDU4M1x1MDU2NVx1MDU3Zlx1MDU4MFx1MDU3ZVx1''@;'; put 'put ''MDU2MVx1MDU4MFx1MDU2Yl9cdTA1NzRcdTA1NjFcdTA1ODBcdTA1N2ZcdTA1NmJfXHUwNTYxXHUwNTdhXHUwNTgwXHUwNTZiXHUwNTZjXHUwNTZiX1x1MDU3NFx1MDU2MVx1MDU3NVx1MDU2Ylx1MDU3ZFx1MDU2Yl9cdTA1NzBcdTA1NzhcdTA1ODJcdTA1NzZcdTA1NmJcdTA1N2RcdTA1NmJf''@;'; put 'put ''XHUwNTcwXHUwNTc4XHUwNTgyXHUwNTZjXHUwNTZiXHUwNTdkXHUwNTZiX1x1MDU4NVx1MDU2M1x1MDU3OFx1MDU3ZFx1MDU3Zlx1MDU3OFx1MDU3ZFx1MDU2Yl9cdTA1N2RcdTA1NjVcdTA1N2FcdTA1N2ZcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODBcdTA1NmJfXHUwNTcwXHUwNTc4''@;'; put 'put ''XHUwNTZmXHUwNTdmXHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwXHUwNTZiX1x1MDU3Nlx1MDU3OFx1MDU3NVx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MFx1MDU2Yl9cdTA1NjRcdTA1NjVcdTA1NmZcdTA1N2ZcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODBcdTA1NmIi''@;'; put 'put ''LnNwbGl0KCJfIiksc3RhbmRhbG9uZToiXHUwNTcwXHUwNTc4XHUwNTgyXHUwNTc2XHUwNTdlXHUwNTYxXHUwNTgwX1x1MDU4M1x1MDU2NVx1MDU3Zlx1MDU4MFx1MDU3ZVx1MDU2MVx1MDU4MF9cdTA1NzRcdTA1NjFcdTA1ODBcdTA1N2ZfXHUwNTYxXHUwNTdhXHUwNTgwXHUwNTZiXHUwNTZj''@;'; put 'put ''X1x1MDU3NFx1MDU2MVx1MDU3NVx1MDU2Ylx1MDU3ZF9cdTA1NzBcdTA1NzhcdTA1ODJcdTA1NzZcdTA1NmJcdTA1N2RfXHUwNTcwXHUwNTc4XHUwNTgyXHUwNTZjXHUwNTZiXHUwNTdkX1x1MDU4NVx1MDU2M1x1MDU3OFx1MDU3ZFx1MDU3Zlx1MDU3OFx1MDU3ZF9cdTA1N2RcdTA1NjVcdTA1''@;'; put 'put ''N2FcdTA1N2ZcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODBfXHUwNTcwXHUwNTc4XHUwNTZmXHUwNTdmXHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwX1x1MDU3Nlx1MDU3OFx1MDU3NVx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MF9cdTA1NjRcdTA1NjVcdTA1NmZcdTA1''@;'; put 'put ''N2ZcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODAiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0OiJcdTA1NzBcdTA1NzZcdTA1N2VfXHUwNTgzXHUwNTdmXHUwNTgwX1x1MDU3NFx1MDU4MFx1MDU3Zl9cdTA1NjFcdTA1N2FcdTA1ODBfXHUwNTc0XHUwNTc1XHUwNTdkX1x1MDU3MFx1MDU3''@;'; put 'put ''Nlx1MDU3ZF9cdTA1NzBcdTA1NmNcdTA1N2RfXHUwNTg1XHUwNTYzXHUwNTdkX1x1MDU3ZFx1MDU3YVx1MDU3Zl9cdTA1NzBcdTA1NmZcdTA1N2ZfXHUwNTc2XHUwNTc0XHUwNTYyX1x1MDU2NFx1MDU2Zlx1MDU3ZiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNTZmXHUwNTZiXHUwNTgwXHUw''@;'; put 'put ''NTYxXHUwNTZmXHUwNTZiX1x1MDU2NVx1MDU4MFx1MDU2Zlx1MDU3OFx1MDU4Mlx1MDU3N1x1MDU2MVx1MDU2Mlx1MDU2OVx1MDU2Yl9cdTA1NjVcdTA1ODBcdTA1NjVcdTA1ODRcdTA1NzdcdTA1NjFcdTA1NjJcdTA1NjlcdTA1NmJfXHUwNTc5XHUwNTc4XHUwNTgwXHUwNTY1XHUwNTg0XHUw''@;'; put 'put ''NTc3XHUwNTYxXHUwNTYyXHUwNTY5XHUwNTZiX1x1MDU3MFx1MDU2Ylx1MDU3Nlx1MDU2M1x1MDU3N1x1MDU2MVx1MDU2Mlx1MDU2OVx1MDU2Yl9cdTA1NzhcdTA1ODJcdTA1ODBcdTA1NjJcdTA1NjFcdTA1NjlfXHUwNTc3XHUwNTYxXHUwNTYyXHUwNTYxXHUwNTY5Ii5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzU2hvcnQ6Ilx1MDU2Zlx1MDU4MFx1MDU2Zl9cdTA1NjVcdTA1ODBcdTA1NmZfXHUwNTY1XHUwNTgwXHUwNTg0X1x1MDU3OVx1MDU4MFx1MDU4NF9cdTA1NzBcdTA1NzZcdTA1NjNfXHUwNTc4XHUwNTgyXHUwNTgwXHUwNTYyX1x1MDU3N1x1MDU2Mlx1MDU2OSIuc3BsaXQoIl8iKSx3''@;'; put 'put ''ZWVrZGF5c01pbjoiXHUwNTZmXHUwNTgwXHUwNTZmX1x1MDU2NVx1MDU4MFx1MDU2Zl9cdTA1NjVcdTA1ODBcdTA1ODRfXHUwNTc5XHUwNTgwXHUwNTg0X1x1MDU3MFx1MDU3Nlx1MDU2M19cdTA1NzhcdTA1ODJcdTA1ODBcdTA1NjJfXHUwNTc3XHUwNTYyXHUwNTY5Ii5zcGxpdCgiXyIpLGxv''@;'; put 'put ''bmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSBcdTA1NjkuIixMTEw6IkQgTU1NTSBZWVlZIFx1MDU2OS4sIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBcdTA1NjkuLCBISDptbSJ9LGNhbGVuZGFyOntz''@;'; put 'put ''YW1lRGF5OiJbXHUwNTYxXHUwNTc1XHUwNTdkXHUwNTg1XHUwNTgwXSBMVCIsbmV4dERheToiW1x1MDU3ZVx1MDU2MVx1MDU3Mlx1MDU2OF0gTFQiLGxhc3REYXk6IltcdTA1NjVcdTA1ODBcdTA1NjVcdTA1NmZdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFtcdTA1ODVc''@;'; put 'put ''dTA1ODBcdTA1NjggXHUwNTZhXHUwNTYxXHUwNTc0XHUwNTY4XSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltcdTA1NjFcdTA1NzZcdTA1ODFcdTA1NjFcdTA1NmVdIGRkZGQgW1x1MDU4NVx1MDU4MFx1MDU2OCBcdTA1NmFcdTA1NjFcdTA1NzRcdTA1NjhdIExUIn0sc2FtZUVs''@;'; put 'put ''c2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwNTcwXHUwNTY1XHUwNTdmXHUwNTc4IixwYXN0OiIlcyBcdTA1NjFcdTA1N2NcdTA1NjFcdTA1N2IiLHM6Ilx1MDU3NFx1MDU2YiBcdTA1ODRcdTA1NjFcdTA1NzZcdTA1NmIgXHUwNTdlXHUwNTYxXHUwNTc1XHUwNTgwXHUwNTZm''@;'; put 'put ''XHUwNTc1XHUwNTYxXHUwNTc2IixzczoiJWQgXHUwNTdlXHUwNTYxXHUwNTc1XHUwNTgwXHUwNTZmXHUwNTc1XHUwNTYxXHUwNTc2IixtOiJcdTA1ODBcdTA1NzhcdTA1N2FcdTA1NjUiLG1tOiIlZCBcdTA1ODBcdTA1NzhcdTA1N2FcdTA1NjUiLGg6Ilx1MDU2YVx1MDU2MVx1MDU3NCIsaGg6''@;'; put 'put ''IiVkIFx1MDU2YVx1MDU2MVx1MDU3NCIsZDoiXHUwNTg1XHUwNTgwIixkZDoiJWQgXHUwNTg1XHUwNTgwIixNOiJcdTA1NjFcdTA1NzRcdTA1NmJcdTA1N2QiLE1NOiIlZCBcdTA1NjFcdTA1NzRcdTA1NmJcdTA1N2QiLHk6Ilx1MDU3Zlx1MDU2MVx1MDU4MFx1MDU2YiIseXk6IiVkIFx1MDU3''@;'; put 'put ''Zlx1MDU2MVx1MDU4MFx1MDU2YiJ9LG1lcmlkaWVtUGFyc2U6L1x1MDU2M1x1MDU2Ylx1MDU3N1x1MDU2NVx1MDU4MFx1MDU3ZVx1MDU2MXxcdTA1NjFcdTA1N2NcdTA1NjFcdTA1N2VcdTA1NzhcdTA1N2ZcdTA1N2VcdTA1NjF8XHUwNTgxXHUwNTY1XHUwNTgwXHUwNTY1XHUwNTZmXHUwNTdl''@;'; put 'put ''XHUwNTYxfFx1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3OFx1MDU3NVx1MDU2MVx1MDU3Ni8saXNQTTpmdW5jdGlvbihwKXtyZXR1cm4vXihcdTA1ODFcdTA1NjVcdTA1ODBcdTA1NjVcdTA1NmZcdTA1N2VcdTA1NjF8XHUwNTY1XHUwNTgwXHUwNTY1XHUwNTZmXHUwNTc4XHUwNTc1XHUw''@;'; put 'put ''NTYxXHUwNTc2KSQvLnRlc3QocCl9LG1lcmlkaWVtOmZ1bmN0aW9uKHApe3JldHVybiBwPDQ/Ilx1MDU2M1x1MDU2Ylx1MDU3N1x1MDU2NVx1MDU4MFx1MDU3ZVx1MDU2MSI6cDwxMj8iXHUwNTYxXHUwNTdjXHUwNTYxXHUwNTdlXHUwNTc4XHUwNTdmXHUwNTdlXHUwNTYxIjpwPDE3PyJcdTA1''@;'; put 'put ''ODFcdTA1NjVcdTA1ODBcdTA1NjVcdTA1NmZcdTA1N2VcdTA1NjEiOiJcdTA1NjVcdTA1ODBcdTA1NjVcdTA1NmZcdTA1NzhcdTA1NzVcdTA1NjFcdTA1NzYifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9fFxkezEsMn0tKFx1MDU2Ylx1MDU3NnxcdTA1ODBcdTA1NjQpLyxvcmRp''@;'; put 'put ''bmFsOmZ1bmN0aW9uKHAsVil7c3dpdGNoKFYpe2Nhc2UiREREIjpjYXNlInciOmNhc2UiVyI6Y2FzZSJERERvIjpyZXR1cm4gMT09PXA/cCsiLVx1MDU2Ylx1MDU3NiI6cCsiLVx1MDU4MFx1MDU2NCI7ZGVmYXVsdDpyZXR1cm4gcH19LHdlZWs6e2RvdzoxLGRveTo3fX0pfShiKDk3NTg2KSl9''@;'; put 'put ''LDU2MjkxOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiY2EiLHttb250aHM6e3N0YW5kYWxvbmU6ImdlbmVyX2ZlYnJlcl9tYXJceGU3X2FicmlsX21haWdfanVueV9qdWxpb2xfYWdvc3Rfc2V0ZW1icmVfb2N0dWJyZV9ub3ZlbWJy''@;'; put 'put ''ZV9kZXNlbWJyZSIuc3BsaXQoIl8iKSxmb3JtYXQ6ImRlIGdlbmVyX2RlIGZlYnJlcl9kZSBtYXJceGU3X2QnYWJyaWxfZGUgbWFpZ19kZSBqdW55X2RlIGp1bGlvbF9kJ2Fnb3N0X2RlIHNldGVtYnJlX2Qnb2N0dWJyZV9kZSBub3ZlbWJyZV9kZSBkZXNlbWJyZSIuc3BsaXQoIl8iKSxpc0Zv''@;'; put 'put ''cm1hdDovRFtvRF0/KFxzKStNTU1NL30sbW9udGhzU2hvcnQ6Imdlbi5fZmVici5fbWFyXHhlN19hYnIuX21haWdfanVueV9qdWwuX2FnLl9zZXQuX29jdC5fbm92Ll9kZXMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6ImRpdW1lbmdlX2RpbGx1bnNfZGltYXJ0''@;'; put 'put ''c19kaW1lY3Jlc19kaWpvdXNfZGl2ZW5kcmVzX2Rpc3NhYnRlIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRnLl9kbC5fZHQuX2RjLl9kai5fZHYuX2RzLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZGdfZGxfZHRfZGNfZGpfZHZfZHMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4''@;'; put 'put ''YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFtkZV0gWVlZWSIsbGw6IkQgTU1NIFlZWVkiLExMTDoiRCBNTU1NIFtkZV0gWVlZWSBbYSBsZXNdIEg6bW0iLGxsbDoiRCBNTU0gWVlZWSwgSDptbSIsTExMTDoi''@;'; put 'put ''ZGRkZCBEIE1NTU0gW2RlXSBZWVlZIFthIGxlc10gSDptbSIsbGxsbDoiZGRkIEQgTU1NIFlZWVksIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVybiJbYXZ1aSBhICIrKDEhPT10aGlzLmhvdXJzKCk/ImxlcyI6ImxhIikrIl0gTFQifSxuZXh0RGF5OmZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIltkZW1ceGUwIGEgIisoMSE9PXRoaXMuaG91cnMoKT8ibGVzIjoibGEiKSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EgIisoMSE9PXRoaXMuaG91cnMoKT8ibGVzIjoibGEiKSsiXSBMVCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2Fo''@;'; put 'put ''aXIgYSAiKygxIT09dGhpcy5ob3VycygpPyJsZXMiOiJsYSIpKyJdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW2VsXSBkZGRkIFtwYXNzYXQgYSAiKygxIT09dGhpcy5ob3VycygpPyJsZXMiOiJsYSIpKyJdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVy''@;'; put 'put ''ZToiZCdhcXVceGVkICVzIixwYXN0OiJmYSAlcyIsczoidW5zIHNlZ29ucyIsc3M6IiVkIHNlZ29ucyIsbToidW4gbWludXQiLG1tOiIlZCBtaW51dHMiLGg6InVuYSBob3JhIixoaDoiJWQgaG9yZXMiLGQ6InVuIGRpYSIsZGQ6IiVkIGRpZXMiLE06InVuIG1lcyIsTU06IiVkIG1lc29zIix5''@;'; put 'put ''OiJ1biBhbnkiLHl5OiIlZCBhbnlzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShyfG58dHxceGU4fGEpLyxvcmRpbmFsOmZ1bmN0aW9uKHAsVil7dmFyIHc9MT09PXA/InIiOjI9PT1wPyJuIjozPT09cD8iciI6ND09PXA/InQiOiJceGU4IjtyZXR1cm4oInciPT09Vnx8Ilci''@;'; put 'put ''PT09VikmJih3PSJhIikscCt3fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw1NjQwNjpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPUpTT04ucGFyc2UoJ1tbIjAiLCJcXHUwMDAwIiwxMjddLFsiOGVhMSIsIlx1ZmY2MSIsNjJdLFsiYTFhMSIsIlx1MzAwMFx1MzAwMVx1''@;'; put 'put ''MzAwMlx1ZmYwY1x1ZmYwZVx1MzBmYlx1ZmYxYVx1ZmYxYlx1ZmYxZlx1ZmYwMVx1MzA5Ylx1MzA5Y1x4YjRcdWZmNDBceGE4XHVmZjNlXHVmZmUzXHVmZjNmXHUzMGZkXHUzMGZlXHUzMDlkXHUzMDllXHUzMDAzXHU0ZWRkXHUzMDA1XHUzMDA2XHUzMDA3XHUzMGZjXHUyMDE1XHUyMDEwXHVm''@;'; put 'put ''ZjBmXHVmZjNjXHVmZjVlXHUyMjI1XHVmZjVjXHUyMDI2XHUyMDI1XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHVmZjA4XHVmZjA5XHUzMDE0XHUzMDE1XHVmZjNiXHVmZjNkXHVmZjViXHVmZjVkXHUzMDA4Iiw5LCJcdWZmMGJcdWZmMGRceGIxXHhkN1x4ZjdcdWZmMWRcdTIyNjBcdWZmMWNc''@;'; put 'put ''dWZmMWVcdTIyNjZcdTIyNjdcdTIyMWVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHVmZmU1XHVmZjA0XHVmZmUwXHVmZmUxXHVmZjA1XHVmZjAzXHVmZjA2XHVmZjBhXHVmZjIwXHhhN1x1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjNyJdLFsiYTJh''@;'; put 'put ''MSIsIlx1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjViZFx1MjViY1x1MjAzYlx1MzAxMlx1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MzAxMyJdLFsiYTJiYSIsIlx1MjIwOFx1MjIwYlx1MjI4Nlx1MjI4N1x1MjI4Mlx1MjI4M1x1MjIyYVx1MjIyOSJdLFsiYTJjYSIsIlx1MjIy''@;'; put 'put ''N1x1MjIyOFx1ZmZlMlx1MjFkMlx1MjFkNFx1MjIwMFx1MjIwMyJdLFsiYTJkYyIsIlx1MjIyMFx1MjJhNVx1MjMxMlx1MjIwMlx1MjIwN1x1MjI2MVx1MjI1Mlx1MjI2YVx1MjI2Ylx1MjIxYVx1MjIzZFx1MjIxZFx1MjIzNVx1MjIyYlx1MjIyYyJdLFsiYTJmMiIsIlx1MjEyYlx1MjAzMFx1''@;'; put 'put ''MjY2Zlx1MjY2ZFx1MjY2YVx1MjAyMFx1MjAyMVx4YjYiXSxbImEyZmUiLCJcdTI1ZWYiXSxbImEzYjAiLCJcdWZmMTAiLDldLFsiYTNjMSIsIlx1ZmYyMSIsMjVdLFsiYTNlMSIsIlx1ZmY0MSIsMjVdLFsiYTRhMSIsIlx1MzA0MSIsODJdLFsiYTVhMSIsIlx1MzBhMSIsODVdLFsiYTZhMSIs''@;'; put 'put ''Ilx1MDM5MSIsMTYsIlx1MDNhMyIsNl0sWyJhNmMxIiwiXHUwM2IxIiwxNiwiXHUwM2MzIiw2XSxbImE3YTEiLCJcdTA0MTAiLDUsIlx1MDQwMVx1MDQxNiIsMjVdLFsiYTdkMSIsIlx1MDQzMCIsNSwiXHUwNDUxXHUwNDM2IiwyNV0sWyJhOGExIiwiXHUyNTAwXHUyNTAyXHUyNTBjXHUyNTEw''@;'; put 'put ''XHUyNTE4XHUyNTE0XHUyNTFjXHUyNTJjXHUyNTI0XHUyNTM0XHUyNTNjXHUyNTAxXHUyNTAzXHUyNTBmXHUyNTEzXHUyNTFiXHUyNTE3XHUyNTIzXHUyNTMzXHUyNTJiXHUyNTNiXHUyNTRiXHUyNTIwXHUyNTJmXHUyNTI4XHUyNTM3XHUyNTNmXHUyNTFkXHUyNTMwXHUyNTI1XHUyNTM4XHUy''@;'; put 'put ''NTQyIl0sWyJhZGExIiwiXHUyNDYwIiwxOSwiXHUyMTYwIiw5XSxbImFkYzAiLCJcdTMzNDlcdTMzMTRcdTMzMjJcdTMzNGRcdTMzMThcdTMzMjdcdTMzMDNcdTMzMzZcdTMzNTFcdTMzNTdcdTMzMGRcdTMzMjZcdTMzMjNcdTMzMmJcdTMzNGFcdTMzM2JcdTMzOWNcdTMzOWRcdTMzOWVcdTMz''@;'; put 'put ''OGVcdTMzOGZcdTMzYzRcdTMzYTEiXSxbImFkZGYiLCJcdTMzN2JcdTMwMWRcdTMwMWZcdTIxMTZcdTMzY2RcdTIxMjFcdTMyYTQiLDQsIlx1MzIzMVx1MzIzMlx1MzIzOVx1MzM3ZVx1MzM3ZFx1MzM3Y1x1MjI1Mlx1MjI2MVx1MjIyYlx1MjIyZVx1MjIxMVx1MjIxYVx1MjJhNVx1MjIyMFx1''@;'; put 'put ''MjIxZlx1MjJiZlx1MjIzNVx1MjIyOVx1MjIyYSJdLFsiYjBhMSIsIlx1NGU5Y1x1NTUxNlx1NWEwM1x1OTYzZlx1NTRjMFx1NjExYlx1NjMyOFx1NTlmNlx1OTAyMlx1ODQ3NVx1ODMxY1x1N2E1MFx1NjBhYVx1NjNlMVx1NmUyNVx1NjVlZFx1ODQ2Nlx1ODJhNlx1OWJmNVx1Njg5M1x1NTcy''@;'; put 'put ''N1x1NjVhMVx1NjI3MVx1NWI5Ylx1NTlkMFx1ODY3Ylx1OThmNFx1N2Q2Mlx1N2RiZVx1OWI4ZVx1NjIxNlx1N2M5Zlx1ODhiN1x1NWI4OVx1NWViNVx1NjMwOVx1NjY5N1x1Njg0OFx1OTVjN1x1OTc4ZFx1Njc0Zlx1NGVlNVx1NGYwYVx1NGY0ZFx1NGY5ZFx1NTA0OVx1NTZmMlx1NTkzN1x1''@;'; put 'put ''NTlkNFx1NWEwMVx1NWMwOVx1NjBkZlx1NjEwZlx1NjE3MFx1NjYxM1x1NjkwNVx1NzBiYVx1NzU0Zlx1NzU3MFx1NzlmYlx1N2RhZFx1N2RlZlx1ODBjM1x1ODQwZVx1ODg2M1x1OGIwMlx1OTA1NVx1OTA3YVx1NTMzYlx1NGU5NVx1NGVhNVx1NTdkZlx1ODBiMlx1OTBjMVx1NzhlZlx1NGUw''@;'; put 'put ''MFx1NThmMVx1NmVhMlx1OTAzOFx1N2EzMlx1ODMyOFx1ODI4Ylx1OWMyZlx1NTE0MVx1NTM3MFx1NTRiZFx1NTRlMVx1NTZlMFx1NTlmYlx1NWYxNVx1OThmMlx1NmRlYlx1ODBlNFx1ODUyZCJdLFsiYjFhMSIsIlx1OTY2Mlx1OTY3MFx1OTZhMFx1OTdmYlx1NTQwYlx1NTNmM1x1NWI4N1x1''@;'; put 'put ''NzBjZlx1N2ZiZFx1OGZjMlx1OTZlOFx1NTM2Zlx1OWQ1Y1x1N2FiYVx1NGUxMVx1Nzg5M1x1ODFmY1x1NmUyNlx1NTYxOFx1NTUwNFx1NmIxZFx1ODUxYVx1OWMzYlx1NTllNVx1NTNhOVx1NmQ2Nlx1NzRkY1x1OTU4Zlx1NTY0Mlx1NGU5MVx1OTA0Ylx1OTZmMlx1ODM0Zlx1OTkwY1x1NTNl''@;'; put 'put ''MVx1NTViNlx1NWIzMFx1NWY3MVx1NjYyMFx1NjZmM1x1NjgwNFx1NmMzOFx1NmNmM1x1NmQyOVx1NzQ1Ylx1NzZjOFx1N2E0ZVx1OTgzNFx1ODJmMVx1ODg1Ylx1OGE2MFx1OTJlZFx1NmRiMlx1NzVhYlx1NzZjYVx1OTljNVx1NjBhNlx1OGIwMVx1OGQ4YVx1OTViMlx1Njk4ZVx1NTNhZFx1''@;'; put 'put ''NTE4Nlx1NTcxMlx1NTgzMFx1NTk0NFx1NWJiNFx1NWVmNlx1NjAyOFx1NjNhOVx1NjNmNFx1NmNiZlx1NmYxNFx1NzA4ZVx1NzExNFx1NzE1OVx1NzFkNVx1NzMzZlx1N2UwMVx1ODI3Nlx1ODJkMVx1ODU5N1x1OTA2MFx1OTI1Ylx1OWQxYlx1NTg2OVx1NjViY1x1NmM1YVx1NzUyNVx1NTFm''@;'; put 'put ''OVx1NTkyZVx1NTk2NVx1NWY4MFx1NWZkYyJdLFsiYjJhMSIsIlx1NjJiY1x1NjVmYVx1NmEyYVx1NmIyN1x1NmJiNFx1NzM4Ylx1N2ZjMVx1ODk1Nlx1OWQyY1x1OWQwZVx1OWVjNFx1NWNhMVx1NmM5Nlx1ODM3Ylx1NTEwNFx1NWM0Ylx1NjFiNlx1ODFjNlx1Njg3Nlx1NzI2MVx1NGU1OVx1''@;'; put 'put ''NGZmYVx1NTM3OFx1NjA2OVx1NmUyOVx1N2E0Zlx1OTdmM1x1NGUwYlx1NTMxNlx1NGVlZVx1NGY1NVx1NGYzZFx1NGZhMVx1NGY3M1x1NTJhMFx1NTNlZlx1NTYwOVx1NTkwZlx1NWFjMVx1NWJiNlx1NWJlMVx1NzlkMVx1NjY4N1x1Njc5Y1x1NjdiNlx1NmI0Y1x1NmNiM1x1NzA2Ylx1NzNj''@;'; put 'put ''Mlx1Nzk4ZFx1NzliZVx1N2EzY1x1N2I4N1x1ODJiMVx1ODJkYlx1ODMwNFx1ODM3N1x1ODNlZlx1ODNkM1x1ODc2Nlx1OGFiMlx1NTYyOVx1OGNhOFx1OGZlNlx1OTA0ZVx1OTcxZVx1ODY4YVx1NGZjNFx1NWNlOFx1NjIxMVx1NzI1OVx1NzUzYlx1ODFlNVx1ODJiZFx1ODZmZVx1OGNjMFx1''@;'; put 'put ''OTZjNVx1OTkxM1x1OTlkNVx1NGVjYlx1NGYxYVx1ODllM1x1NTZkZVx1NTg0YVx1NThjYVx1NWVmYlx1NWZlYlx1NjAyYVx1NjA5NFx1NjA2Mlx1NjFkMFx1NjIxMlx1NjJkMFx1NjUzOSJdLFsiYjNhMSIsIlx1OWI0MVx1NjY2Nlx1NjhiMFx1NmQ3N1x1NzA3MFx1NzU0Y1x1NzY4Nlx1N2Q3''@;'; put 'put ''NVx1ODJhNVx1ODdmOVx1OTU4Ylx1OTY4ZVx1OGM5ZFx1NTFmMVx1NTJiZVx1NTkxNlx1NTRiM1x1NWJiM1x1NWQxNlx1NjE2OFx1Njk4Mlx1NmRhZlx1Nzg4ZFx1ODRjYlx1ODg1N1x1OGE3Mlx1OTNhN1x1OWFiOFx1NmQ2Y1x1OTlhOFx1ODZkOVx1NTdhM1x1NjdmZlx1ODZjZVx1OTIwZVx1''@;'; put 'put ''NTI4M1x1NTY4N1x1NTQwNFx1NWVkM1x1NjJlMVx1NjRiOVx1NjgzY1x1NjgzOFx1NmJiYlx1NzM3Mlx1NzhiYVx1N2E2Ylx1ODk5YVx1ODlkMlx1OGQ2Ylx1OGYwM1x1OTBlZFx1OTVhM1x1OTY5NFx1OTc2OVx1NWI2Nlx1NWNiM1x1Njk3ZFx1OTg0ZFx1OTg0ZVx1NjM5Ylx1N2IyMFx1NmEy''@;'; put 'put ''Ylx1NmE3Zlx1NjhiNlx1OWMwZFx1NmY1Zlx1NTI3Mlx1NTU5ZFx1NjA3MFx1NjJlY1x1NmQzYlx1NmUwN1x1NmVkMVx1ODQ1Ylx1ODkxMFx1OGY0NFx1NGUxNFx1OWMzOVx1NTNmNlx1NjkxYlx1NmEzYVx1OTc4NFx1NjgyYVx1NTE1Y1x1N2FjM1x1ODRiMlx1OTFkY1x1OTM4Y1x1NTY1Ylx1''@;'; put 'put ''OWQyOFx1NjgyMlx1ODMwNVx1ODQzMSJdLFsiYjRhMSIsIlx1N2NhNVx1NTIwOFx1ODJjNVx1NzRlNlx1NGU3ZVx1NGY4M1x1NTFhMFx1NWJkMlx1NTIwYVx1NTJkOFx1NTJlN1x1NWRmYlx1NTU5YVx1NTgyYVx1NTllNlx1NWI4Y1x1NWI5OFx1NWJkYlx1NWU3Mlx1NWU3OVx1NjBhM1x1NjEx''@;'; put 'put ''Zlx1NjE2M1x1NjFiZVx1NjNkYlx1NjU2Mlx1NjdkMVx1Njg1M1x1NjhmYVx1NmIzZVx1NmI1M1x1NmM1N1x1NmYyMlx1NmY5N1x1NmY0NVx1NzRiMFx1NzUxOFx1NzZlM1x1NzcwYlx1N2FmZlx1N2JhMVx1N2MyMVx1N2RlOVx1N2YzNlx1N2ZmMFx1ODA5ZFx1ODI2Nlx1ODM5ZVx1ODliM1x1''@;'; put 'put ''OGFjY1x1OGNhYlx1OTA4NFx1OTQ1MVx1OTU5M1x1OTU5MVx1OTVhMlx1OTY2NVx1OTdkM1x1OTkyOFx1ODIxOFx1NGUzOFx1NTQyYlx1NWNiOFx1NWRjY1x1NzNhOVx1NzY0Y1x1NzczY1x1NWNhOVx1N2ZlYlx1OGQwYlx1OTZjMVx1OTgxMVx1OTg1NFx1OTg1OFx1NGYwMVx1NGYwZVx1NTM3''@;'; put 'put ''MVx1NTU5Y1x1NTY2OFx1NTdmYVx1NTk0N1x1NWIwOVx1NWJjNFx1NWM5MFx1NWUwY1x1NWU3ZVx1NWZjY1x1NjNlZVx1NjczYVx1NjVkN1x1NjVlMlx1NjcxZlx1NjhjYlx1NjhjNCJdLFsiYjVhMSIsIlx1NmE1Zlx1NWUzMFx1NmJjNVx1NmMxN1x1NmM3ZFx1NzU3Zlx1Nzk0OFx1NWI2M1x1''@;'; put 'put ''N2EwMFx1N2QwMFx1NWZiZFx1ODk4Zlx1OGExOFx1OGNiNFx1OGQ3N1x1OGVjY1x1OGYxZFx1OThlMlx1OWEwZVx1OWIzY1x1NGU4MFx1NTA3ZFx1NTEwMFx1NTk5M1x1NWI5Y1x1NjIyZlx1NjI4MFx1NjRlY1x1NmIzYVx1NzJhMFx1NzU5MVx1Nzk0N1x1N2ZhOVx1ODdmYlx1OGFiY1x1OGI3''@;'; put 'put ''MFx1NjNhY1x1ODNjYVx1OTdhMFx1NTQwOVx1NTQwM1x1NTVhYlx1Njg1NFx1NmE1OFx1OGE3MFx1NzgyN1x1Njc3NVx1OWVjZFx1NTM3NFx1NWJhMlx1ODExYVx1ODY1MFx1OTAwNlx1NGUxOFx1NGU0NVx1NGVjN1x1NGYxMVx1NTNjYVx1NTQzOFx1NWJhZVx1NWYxM1x1NjAyNVx1NjU1MVx1''@;'; put 'put ''NjczZFx1NmM0Mlx1NmM3Mlx1NmNlM1x1NzA3OFx1NzQwM1x1N2E3Nlx1N2FhZVx1N2IwOFx1N2QxYVx1N2NmZVx1N2Q2Nlx1NjVlN1x1NzI1Ylx1NTNiYlx1NWM0NVx1NWRlOFx1NjJkMlx1NjJlMFx1NjMxOVx1NmUyMFx1ODY1YVx1OGEzMVx1OGRkZFx1OTJmOFx1NmYwMVx1NzlhNlx1OWI1''@;'; put 'put ''YVx1NGVhOFx1NGVhYlx1NGVhYyJdLFsiYjZhMSIsIlx1NGY5Ylx1NGZhMFx1NTBkMVx1NTE0N1x1N2FmNlx1NTE3MVx1NTFmNlx1NTM1NFx1NTMyMVx1NTM3Zlx1NTNlYlx1NTVhY1x1NTg4M1x1NWNlMVx1NWYzN1x1NWY0YVx1NjAyZlx1NjA1MFx1NjA2ZFx1NjMxZlx1NjU1OVx1NmE0Ylx1''@;'; put 'put ''NmNjMVx1NzJjMlx1NzJlZFx1NzdlZlx1ODBmOFx1ODEwNVx1ODIwOFx1ODU0ZVx1OTBmN1x1OTNlMVx1OTdmZlx1OTk1N1x1OWE1YVx1NGVmMFx1NTFkZFx1NWMyZFx1NjY4MVx1Njk2ZFx1NWM0MFx1NjZmMlx1Njk3NVx1NzM4OVx1Njg1MFx1N2M4MVx1NTBjNVx1NTJlNFx1NTc0N1x1NWRm''@;'; put 'put ''ZVx1OTMyNlx1NjVhNFx1NmIyM1x1NmIzZFx1NzQzNFx1Nzk4MVx1NzliZFx1N2I0Ylx1N2RjYVx1ODJiOVx1ODNjY1x1ODg3Zlx1ODk1Zlx1OGIzOVx1OGZkMVx1OTFkMVx1NTQxZlx1OTI4MFx1NGU1ZFx1NTAzNlx1NTNlNVx1NTMzYVx1NzJkN1x1NzM5Nlx1NzdlOVx1ODJlNlx1OGVhZlx1''@;'; put 'put ''OTljNlx1OTljOFx1OTlkMlx1NTE3N1x1NjExYVx1ODY1ZVx1NTViMFx1N2E3YVx1NTA3Nlx1NWJkM1x1OTA0N1x1OTY4NVx1NGUzMlx1NmFkYlx1OTFlN1x1NWM1MVx1NWM0OCJdLFsiYjdhMSIsIlx1NjM5OFx1N2E5Zlx1NmM5M1x1OTc3NFx1OGY2MVx1N2FhYVx1NzE4YVx1OTY4OFx1N2M4''@;'; put 'put ''Mlx1NjgxN1x1N2U3MFx1Njg1MVx1OTM2Y1x1NTJmMlx1NTQxYlx1ODVhYlx1OGExM1x1N2ZhNFx1OGVjZFx1OTBlMVx1NTM2Nlx1ODg4OFx1Nzk0MVx1NGZjMlx1NTBiZVx1NTIxMVx1NTE0NFx1NTU1M1x1NTcyZFx1NzNlYVx1NTc4Ylx1NTk1MVx1NWY2Mlx1NWY4NFx1NjA3NVx1NjE3Nlx1''@;'; put 'put ''NjE2N1x1NjFhOVx1NjNiMlx1NjQzYVx1NjU2Y1x1NjY2Zlx1Njg0Mlx1NmUxM1x1NzU2Nlx1N2EzZFx1N2NmYlx1N2Q0Y1x1N2Q5OVx1N2U0Ylx1N2Y2Ylx1ODMwZVx1ODM0YVx1ODZjZFx1OGEwOFx1OGE2M1x1OGI2Nlx1OGVmZFx1OTgxYVx1OWQ4Zlx1ODJiOFx1OGZjZVx1OWJlOFx1NTI4''@;'; put 'put ''N1x1NjIxZlx1NjQ4M1x1NmZjMFx1OTY5OVx1Njg0MVx1NTA5MVx1NmIyMFx1NmM3YVx1NmY1NFx1N2E3NFx1N2Q1MFx1ODg0MFx1OGEyM1x1NjcwOFx1NGVmNlx1NTAzOVx1NTAyNlx1NTA2NVx1NTE3Y1x1NTIzOFx1NTI2M1x1NTVhN1x1NTcwZlx1NTgwNVx1NWFjY1x1NWVmYVx1NjFiMlx1''@;'; put 'put ''NjFmOFx1NjJmM1x1NjM3MiJdLFsiYjhhMSIsIlx1NjkxY1x1NmEyOVx1NzI3ZFx1NzJhY1x1NzMyZVx1NzgxNFx1Nzg2Zlx1N2Q3OVx1NzcwY1x1ODBhOVx1ODk4Ylx1OGIxOVx1OGNlMlx1OGVkMlx1OTA2M1x1OTM3NVx1OTY3YVx1OTg1NVx1OWExM1x1OWU3OFx1NTE0M1x1NTM5Zlx1NTNi''@;'; put 'put ''M1x1NWU3Ylx1NWYyNlx1NmUxYlx1NmU5MFx1NzM4NFx1NzNmZVx1N2Q0M1x1ODIzN1x1OGEwMFx1OGFmYVx1OTY1MFx1NGU0ZVx1NTAwYlx1NTNlNFx1NTQ3Y1x1NTZmYVx1NTlkMVx1NWI2NFx1NWRmMVx1NWVhYlx1NWYyN1x1NjIzOFx1NjU0NVx1NjdhZlx1NmU1Nlx1NzJkMFx1N2NjYVx1''@;'; put 'put ''ODhiNFx1ODBhMVx1ODBlMVx1ODNmMFx1ODY0ZVx1OGE4N1x1OGRlOFx1OTIzN1x1OTZjN1x1OTg2N1x1OWYxM1x1NGU5NFx1NGU5Mlx1NGYwZFx1NTM0OFx1NTQ0OVx1NTQzZVx1NWEyZlx1NWY4Y1x1NWZhMVx1NjA5Zlx1NjhhN1x1NmE4ZVx1NzQ1YVx1Nzg4MVx1OGE5ZVx1OGFhNFx1OGI3''@;'; put 'put ''N1x1OTE5MFx1NGU1ZVx1OWJjOVx1NGVhNFx1NGY3Y1x1NGZhZlx1NTAxOVx1NTAxNlx1NTE0OVx1NTE2Y1x1NTI5Zlx1NTJiOVx1NTJmZVx1NTM5YVx1NTNlM1x1NTQxMSJdLFsiYjlhMSIsIlx1NTQwZVx1NTU4OVx1NTc1MVx1NTdhMlx1NTk3ZFx1NWI1NFx1NWI1ZFx1NWI4Zlx1NWRlNVx1''@;'; put 'put ''NWRlN1x1NWRmN1x1NWU3OFx1NWU4M1x1NWU5YVx1NWViN1x1NWYxOFx1NjA1Mlx1NjE0Y1x1NjI5N1x1NjJkOFx1NjNhN1x1NjUzYlx1NjYwMlx1NjY0M1x1NjZmNFx1Njc2ZFx1NjgyMVx1Njg5N1x1NjljYlx1NmM1Zlx1NmQyYVx1NmQ2OVx1NmUyZlx1NmU5ZFx1NzUzMlx1NzY4N1x1Nzg2''@;'; put 'put ''Y1x1N2EzZlx1N2NlMFx1N2QwNVx1N2QxOFx1N2Q1ZVx1N2RiMVx1ODAxNVx1ODAwM1x1ODBhZlx1ODBiMVx1ODE1NFx1ODE4Zlx1ODIyYVx1ODM1Mlx1ODg0Y1x1ODg2MVx1OGIxYlx1OGNhMlx1OGNmY1x1OTBjYVx1OTE3NVx1OTI3MVx1NzgzZlx1OTJmY1x1OTVhNFx1OTY0ZFx1OTgwNVx1''@;'; put 'put ''OTk5OVx1OWFkOFx1OWQzYlx1NTI1Ylx1NTJhYlx1NTNmN1x1NTQwOFx1NThkNVx1NjJmN1x1NmZlMFx1OGM2YVx1OGY1Zlx1OWViOVx1NTE0Ylx1NTIzYlx1NTQ0YVx1NTZmZFx1N2E0MFx1OTE3N1x1OWQ2MFx1OWVkMlx1NzM0NFx1NmYwOVx1ODE3MFx1NzUxMVx1NWZmZFx1NjBkYVx1OWFh''@;'; put 'put ''OFx1NzJkYlx1OGZiYyJdLFsiYmFhMSIsIlx1NmI2NFx1OTgwM1x1NGVjYVx1NTZmMFx1NTc2NFx1NThiZVx1NWE1YVx1NjA2OFx1NjFjN1x1NjYwZlx1NjYwNlx1NjgzOVx1NjhiMVx1NmRmN1x1NzVkNVx1N2QzYVx1ODI2ZVx1OWI0Mlx1NGU5Ylx1NGY1MFx1NTNjOVx1NTUwNlx1NWQ2Zlx1''@;'; put 'put ''NWRlNlx1NWRlZVx1NjdmYlx1NmM5OVx1NzQ3M1x1NzgwMlx1OGE1MFx1OTM5Nlx1ODhkZlx1NTc1MFx1NWVhN1x1NjMyYlx1NTBiNVx1NTBhY1x1NTE4ZFx1NjcwMFx1NTRjOVx1NTg1ZVx1NTliYlx1NWJiMFx1NWY2OVx1NjI0ZFx1NjNhMVx1NjgzZFx1NmI3M1x1NmUwOFx1NzA3ZFx1OTFj''@;'; put 'put ''N1x1NzI4MFx1NzgxNVx1NzgyNlx1Nzk2ZFx1NjU4ZVx1N2QzMFx1ODNkY1x1ODhjMVx1OGYwOVx1OTY5Ylx1NTI2NFx1NTcyOFx1Njc1MFx1N2Y2YVx1OGNhMVx1NTFiNFx1NTc0Mlx1OTYyYVx1NTgzYVx1Njk4YVx1ODBiNFx1NTRiMlx1NWQwZVx1NTdmY1x1Nzg5NVx1OWRmYVx1NGY1Y1x1''@;'; put 'put ''NTI0YVx1NTQ4Ylx1NjQzZVx1NjYyOFx1NjcxNFx1NjdmNVx1N2E4NFx1N2I1Nlx1N2QyMlx1OTMyZlx1Njg1Y1x1OWJhZFx1N2IzOVx1NTMxOVx1NTE4YVx1NTIzNyJdLFsiYmJhMSIsIlx1NWJkZlx1NjJmNlx1NjRhZVx1NjRlNlx1NjcyZFx1NmJiYVx1ODVhOVx1OTZkMVx1NzY5MFx1OWJk''@;'; put 'put ''Nlx1NjM0Y1x1OTMwNlx1OWJhYlx1NzZiZlx1NjY1Mlx1NGUwOVx1NTA5OFx1NTNjMlx1NWM3MVx1NjBlOFx1NjQ5Mlx1NjU2M1x1Njg1Zlx1NzFlNlx1NzNjYVx1NzUyM1x1N2I5N1x1N2U4Mlx1ODY5NVx1OGI4M1x1OGNkYlx1OTE3OFx1OTkxMFx1NjVhY1x1NjZhYlx1NmI4Ylx1NGVkNVx1''@;'; put 'put ''NGVkNFx1NGYzYVx1NGY3Zlx1NTIzYVx1NTNmOFx1NTNmMlx1NTVlM1x1NTZkYlx1NThlYlx1NTljYlx1NTljOVx1NTlmZlx1NWI1MFx1NWM0ZFx1NWUwMlx1NWUyYlx1NWZkN1x1NjAxZFx1NjMwN1x1NjUyZlx1NWI1Y1x1NjVhZlx1NjViZFx1NjVlOFx1Njc5ZFx1NmI2Mlx1NmI3Ylx1NmMw''@;'; put 'put ''Zlx1NzM0NVx1Nzk0OVx1NzljMVx1N2NmOFx1N2QxOVx1N2QyYlx1ODBhMlx1ODEwMlx1ODFmM1x1ODk5Nlx1OGE1ZVx1OGE2OVx1OGE2Nlx1OGE4Y1x1OGFlZVx1OGNjN1x1OGNkY1x1OTZjY1x1OThmY1x1NmI2Zlx1NGU4Ylx1NGYzY1x1NGY4ZFx1NTE1MFx1NWI1N1x1NWJmYVx1NjE0OFx1''@;'; put 'put ''NjMwMVx1NjY0MiJdLFsiYmNhMSIsIlx1NmIyMVx1NmVjYlx1NmNiYlx1NzIzZVx1NzRiZFx1NzVkNFx1NzhjMVx1NzkzYVx1ODAwY1x1ODAzM1x1ODFlYVx1ODQ5NFx1OGY5ZVx1NmM1MFx1OWU3Zlx1NWYwZlx1OGI1OFx1OWQyYlx1N2FmYVx1OGVmOFx1NWI4ZFx1OTZlYlx1NGUwM1x1NTNm''@;'; put 'put ''MVx1NTdmN1x1NTkzMVx1NWFjOVx1NWJhNFx1NjA4OVx1NmU3Zlx1NmYwNlx1NzViZVx1OGNlYVx1NWI5Zlx1ODUwMFx1N2JlMFx1NTA3Mlx1NjdmNFx1ODI5ZFx1NWM2MVx1ODU0YVx1N2UxZVx1ODIwZVx1NTE5OVx1NWMwNFx1NjM2OFx1OGQ2Nlx1NjU5Y1x1NzE2ZVx1NzkzZVx1N2QxN1x1''@;'; put 'put ''ODAwNVx1OGIxZFx1OGVjYVx1OTA2ZVx1ODZjN1x1OTBhYVx1NTAxZlx1NTJmYVx1NWMzYVx1Njc1M1x1NzA3Y1x1NzIzNVx1OTE0Y1x1OTFjOFx1OTMyYlx1ODJlNVx1NWJjMlx1NWYzMVx1NjBmOVx1NGUzYlx1NTNkNlx1NWI4OFx1NjI0Ylx1NjczMVx1NmI4YVx1NzJlOVx1NzNlMFx1N2Ey''@;'; put 'put ''ZVx1ODE2Ylx1OGRhM1x1OTE1Mlx1OTk5Nlx1NTExMlx1NTNkN1x1NTQ2YVx1NWJmZlx1NjM4OFx1NmEzOVx1N2RhY1x1OTcwMFx1NTZkYVx1NTNjZVx1NTQ2OCJdLFsiYmRhMSIsIlx1NWI5N1x1NWMzMVx1NWRkZVx1NGZlZVx1NjEwMVx1NjJmZVx1NmQzMlx1NzljMFx1NzljYlx1N2Q0Mlx1''@;'; put 'put ''N2U0ZFx1N2ZkMlx1ODFlZFx1ODIxZlx1ODQ5MFx1ODg0Nlx1ODk3Mlx1OGI5MFx1OGU3NFx1OGYyZlx1OTAzMVx1OTE0Ylx1OTE2Y1x1OTZjNlx1OTE5Y1x1NGVjMFx1NGY0Zlx1NTE0NVx1NTM0MVx1NWY5M1x1NjIwZVx1NjdkNFx1NmM0MVx1NmUwYlx1NzM2M1x1N2UyNlx1OTFjZFx1OTI4''@;'; put 'put ''M1x1NTNkNFx1NTkxOVx1NWJiZlx1NmRkMVx1Nzk1ZFx1N2UyZVx1N2M5Ylx1NTg3ZVx1NzE5Zlx1NTFmYVx1ODg1M1x1OGZmMFx1NGZjYVx1NWNmYlx1NjYyNVx1NzdhY1x1N2FlM1x1ODIxY1x1OTlmZlx1NTFjNlx1NWZhYVx1NjVlY1x1Njk2Zlx1NmI4OVx1NmRmM1x1NmU5Nlx1NmY2NFx1''@;'; put 'put ''NzZmZVx1N2QxNFx1NWRlMVx1OTA3NVx1OTE4N1x1OTgwNlx1NTFlNlx1NTIxZFx1NjI0MFx1NjY5MVx1NjZkOVx1NmUxYVx1NWViNlx1N2RkMlx1N2Y3Mlx1NjZmOFx1ODVhZlx1ODVmN1x1OGFmOFx1NTJhOVx1NTNkOVx1NTk3M1x1NWU4Zlx1NWY5MFx1NjA1NVx1OTJlNFx1OTY2NFx1NTBi''@;'; put 'put ''N1x1NTExZiJdLFsiYmVhMSIsIlx1NTJkZFx1NTMyMFx1NTM0N1x1NTNlY1x1NTRlOFx1NTU0Nlx1NTUzMVx1NTYxN1x1NTk2OFx1NTliZVx1NWEzY1x1NWJiNVx1NWMwNlx1NWMwZlx1NWMxMVx1NWMxYVx1NWU4NFx1NWU4YVx1NWVlMFx1NWY3MFx1NjI3Zlx1NjI4NFx1NjJkYlx1NjM4Y1x1''@;'; put 'put ''NjM3N1x1NjYwN1x1NjYwY1x1NjYyZFx1NjY3Nlx1Njc3ZVx1NjhhMlx1NmExZlx1NmEzNVx1NmNiY1x1NmQ4OFx1NmUwOVx1NmU1OFx1NzEzY1x1NzEyNlx1NzE2N1x1NzVjN1x1NzcwMVx1Nzg1ZFx1NzkwMVx1Nzk2NVx1NzlmMFx1N2FlMFx1N2IxMVx1N2NhN1x1N2QzOVx1ODA5Nlx1ODNk''@;'; put 'put ''Nlx1ODQ4Ylx1ODU0OVx1ODg1ZFx1ODhmM1x1OGExZlx1OGEzY1x1OGE1NFx1OGE3M1x1OGM2MVx1OGNkZVx1OTFhNFx1OTI2Nlx1OTM3ZVx1OTQxOFx1OTY5Y1x1OTc5OFx1NGUwYVx1NGUwOFx1NGUxZVx1NGU1N1x1NTE5N1x1NTI3MFx1NTdjZVx1NTgzNFx1NThjY1x1NWIyMlx1NWUzOFx1''@;'; put 'put ''NjBjNVx1NjRmZVx1Njc2MVx1Njc1Nlx1NmQ0NFx1NzJiNlx1NzU3M1x1N2E2M1x1ODRiOFx1OGI3Mlx1OTFiOFx1OTMyMFx1NTYzMVx1NTdmNFx1OThmZSJdLFsiYmZhMSIsIlx1NjJlZFx1NjkwZFx1NmI5Nlx1NzFlZFx1N2U1NFx1ODA3N1x1ODI3Mlx1ODllNlx1OThkZlx1ODc1NVx1OGZi''@;'; put 'put ''MVx1NWMzYlx1NGYzOFx1NGZlMVx1NGZiNVx1NTUwN1x1NWEyMFx1NWJkZFx1NWJlOVx1NWZjM1x1NjE0ZVx1NjMyZlx1NjViMFx1NjY0Ylx1NjhlZVx1Njk5Ylx1NmQ3OFx1NmRmMVx1NzUzM1x1NzViOVx1NzcxZlx1Nzk1ZVx1NzllNlx1N2QzM1x1ODFlM1x1ODJhZlx1ODVhYVx1ODlhYVx1''@;'; put 'put ''OGEzYVx1OGVhYlx1OGY5Ylx1OTAzMlx1OTFkZFx1OTcwN1x1NGViYVx1NGVjMVx1NTIwM1x1NTg3NVx1NThlY1x1NWMwYlx1NzUxYVx1NWMzZFx1ODE0ZVx1OGEwYVx1OGZjNVx1OTY2M1x1OTc2ZFx1N2IyNVx1OGFjZlx1OTgwOFx1OTE2Mlx1NTZmM1x1NTNhOFx1OTAxN1x1NTQzOVx1NTc4''@;'; put 'put ''Mlx1NWUyNVx1NjNhOFx1NmMzNFx1NzA4YVx1Nzc2MVx1N2M4Ylx1N2ZlMFx1ODg3MFx1OTA0Mlx1OTE1NFx1OTMxMFx1OTMxOFx1OTY4Zlx1NzQ1ZVx1OWFjNFx1NWQwN1x1NWQ2OVx1NjU3MFx1NjdhMlx1OGRhOFx1OTZkYlx1NjM2ZVx1Njc0OVx1NjkxOVx1ODNjNVx1OTgxN1x1OTZjMFx1''@;'; put 'put ''ODhmZSJdLFsiYzBhMSIsIlx1NmY4NFx1NjQ3YVx1NWJmOFx1NGUxNlx1NzAyY1x1NzU1ZFx1NjYyZlx1NTFjNFx1NTIzNlx1NTJlMlx1NTlkM1x1NWY4MVx1NjAyN1x1NjIxMFx1NjUzZlx1NjU3NFx1NjYxZlx1NjY3NFx1NjhmMlx1NjgxNlx1NmI2M1x1NmUwNVx1NzI3Mlx1NzUxZlx1NzZk''@;'; put 'put ''Ylx1N2NiZVx1ODA1Nlx1NThmMFx1ODhmZFx1ODk3Zlx1OGFhMFx1OGE5M1x1OGFjYlx1OTAxZFx1OTE5Mlx1OTc1Mlx1OTc1OVx1NjU4OVx1N2EwZVx1ODEwNlx1OTZiYlx1NWUyZFx1NjBkY1x1NjIxYVx1NjVhNVx1NjYxNFx1Njc5MFx1NzdmM1x1N2E0ZFx1N2M0ZFx1N2UzZVx1ODEwYVx1''@;'; put 'put ''OGNhY1x1OGQ2NFx1OGRlMVx1OGU1Zlx1NzhhOVx1NTIwN1x1NjJkOVx1NjNhNVx1NjQ0Mlx1NjI5OFx1OGEyZFx1N2E4M1x1N2JjMFx1OGFhY1x1OTZlYVx1N2Q3Nlx1ODIwY1x1ODc0OVx1NGVkOVx1NTE0OFx1NTM0M1x1NTM2MFx1NWJhM1x1NWMwMlx1NWMxNlx1NWRkZFx1NjIyNlx1NjI0''@;'; put 'put ''N1x1NjRiMFx1NjgxM1x1NjgzNFx1NmNjOVx1NmQ0NVx1NmQxN1x1NjdkM1x1NmY1Y1x1NzE0ZVx1NzE3ZFx1NjVjYlx1N2E3Zlx1N2JhZFx1N2RkYSJdLFsiYzFhMSIsIlx1N2U0YVx1N2ZhOFx1ODE3YVx1ODIxYlx1ODIzOVx1ODVhNlx1OGE2ZVx1OGNjZVx1OGRmNVx1OTA3OFx1OTA3N1x1''@;'; put 'put ''OTJhZFx1OTI5MVx1OTU4M1x1OWJhZVx1NTI0ZFx1NTU4NFx1NmYzOFx1NzEzNlx1NTE2OFx1Nzk4NVx1N2U1NVx1ODFiM1x1N2NjZVx1NTY0Y1x1NTg1MVx1NWNhOFx1NjNhYVx1NjZmZVx1NjZmZFx1Njk1YVx1NzJkOVx1NzU4Zlx1NzU4ZVx1NzkwZVx1Nzk1Nlx1NzlkZlx1N2M5N1x1N2Qy''@;'; put 'put ''MFx1N2Q0NFx1ODYwN1x1OGEzNFx1OTYzYlx1OTA2MVx1OWYyMFx1NTBlN1x1NTI3NVx1NTNjY1x1NTNlMlx1NTAwOVx1NTVhYVx1NThlZVx1NTk0Zlx1NzIzZFx1NWI4Ylx1NWM2NFx1NTMxZFx1NjBlM1x1NjBmM1x1NjM1Y1x1NjM4M1x1NjMzZlx1NjNiYlx1NjRjZFx1NjVlOVx1NjZmOVx1''@;'; put 'put ''NWRlM1x1NjljZFx1NjlmZFx1NmYxNVx1NzFlNVx1NGU4OVx1NzVlOVx1NzZmOFx1N2E5M1x1N2NkZlx1N2RjZlx1N2Q5Y1x1ODA2MVx1ODM0OVx1ODM1OFx1ODQ2Y1x1ODRiY1x1ODVmYlx1ODhjNVx1OGQ3MFx1OTAwMVx1OTA2ZFx1OTM5N1x1OTcxY1x1OWExMlx1NTBjZlx1NTg5N1x1NjE4''@;'; put 'put ''ZSJdLFsiYzJhMSIsIlx1ODFkM1x1ODUzNVx1OGQwOFx1OTAyMFx1NGZjM1x1NTA3NFx1NTI0N1x1NTM3M1x1NjA2Zlx1NjM0OVx1Njc1Zlx1NmUyY1x1OGRiM1x1OTAxZlx1NGZkN1x1NWM1ZVx1OGNjYVx1NjVjZlx1N2Q5YVx1NTM1Mlx1ODg5Nlx1NTE3Nlx1NjNjM1x1NWI1OFx1NWI2Ylx1''@;'; put 'put ''NWMwYVx1NjQwZFx1Njc1MVx1OTA1Y1x1NGVkNlx1NTkxYVx1NTkyYVx1NmM3MFx1OGE1MVx1NTUzZVx1NTgxNVx1NTlhNVx1NjBmMFx1NjI1M1x1NjdjMVx1ODIzNVx1Njk1NVx1OTY0MFx1OTljNFx1OWEyOFx1NGY1M1x1NTgwNlx1NWJmZVx1ODAxMFx1NWNiMVx1NWUyZlx1NWY4NVx1NjAy''@;'; put 'put ''MFx1NjE0Ylx1NjIzNFx1NjZmZlx1NmNmMFx1NmVkZVx1ODBjZVx1ODE3Zlx1ODJkNFx1ODg4Ylx1OGNiOFx1OTAwMFx1OTAyZVx1OTY4YVx1OWVkYlx1OWJkYlx1NGVlM1x1NTNmMFx1NTkyN1x1N2IyY1x1OTE4ZFx1OTg0Y1x1OWRmOVx1NmVkZFx1NzAyN1x1NTM1M1x1NTU0NFx1NWI4NVx1''@;'; put 'put ''NjI1OFx1NjI5ZVx1NjJkM1x1NmNhMlx1NmZlZlx1NzQyMlx1OGExN1x1OTQzOFx1NmZjMVx1OGFmZVx1ODMzOFx1NTFlN1x1ODZmOFx1NTNlYSJdLFsiYzNhMSIsIlx1NTNlOVx1NGY0Nlx1OTA1NFx1OGZiMFx1NTk2YVx1ODEzMVx1NWRmZFx1N2FlYVx1OGZiZlx1NjhkYVx1OGMzN1x1NzJm''@;'; put 'put ''OFx1OWM0OFx1NmEzZFx1OGFiMFx1NGUzOVx1NTM1OFx1NTYwNlx1NTc2Nlx1NjJjNVx1NjNhMlx1NjVlNlx1NmI0ZVx1NmRlMVx1NmU1Ylx1NzBhZFx1NzdlZFx1N2FlZlx1N2JhYVx1N2RiYlx1ODAzZFx1ODBjNlx1ODZjYlx1OGE5NVx1OTM1Ylx1NTZlM1x1NThjN1x1NWYzZVx1NjVhZFx1''@;'; put 'put ''NjY5Nlx1NmE4MFx1NmJiNVx1NzUzN1x1OGFjN1x1NTAyNFx1NzdlNVx1NTczMFx1NWYxYlx1NjA2NVx1NjY3YVx1NmM2MFx1NzVmNFx1N2ExYVx1N2Y2ZVx1ODFmNFx1ODcxOFx1OTA0NVx1OTliM1x1N2JjOVx1NzU1Y1x1N2FmOVx1N2I1MVx1ODRjNFx1OTAxMFx1NzllOVx1N2E5Mlx1ODMz''@;'; put 'put ''Nlx1NWFlMVx1Nzc0MFx1NGUyZFx1NGVmMlx1NWI5OVx1NWZlMFx1NjJiZFx1NjYzY1x1NjdmMVx1NmNlOFx1ODY2Ylx1ODg3N1x1OGEzYlx1OTE0ZVx1OTJmM1x1OTlkMFx1NmExN1x1NzAyNlx1NzMyYVx1ODJlN1x1ODQ1N1x1OGNhZlx1NGUwMVx1NTE0Nlx1NTFjYlx1NTU4Ylx1NWJmNSJd''@;'; put 'put ''LFsiYzRhMSIsIlx1NWUxNlx1NWUzM1x1NWU4MVx1NWYxNFx1NWYzNVx1NWY2Ylx1NWZiNFx1NjFmMlx1NjMxMVx1NjZhMlx1NjcxZFx1NmY2ZVx1NzI1Mlx1NzUzYVx1NzczYVx1ODA3NFx1ODEzOVx1ODE3OFx1ODc3Nlx1OGFiZlx1OGFkY1x1OGQ4NVx1OGRmM1x1OTI5YVx1OTU3N1x1OTgw''@;'; put 'put ''Mlx1OWNlNVx1NTJjNVx1NjM1N1x1NzZmNFx1NjcxNVx1NmM4OFx1NzNjZFx1OGNjM1x1OTNhZVx1OTY3M1x1NmQyNVx1NTg5Y1x1NjkwZVx1NjljY1x1OGZmZFx1OTM5YVx1NzVkYlx1OTAxYVx1NTg1YVx1NjgwMlx1NjNiNFx1NjlmYlx1NGY0M1x1NmYyY1x1NjdkOFx1OGZiYlx1ODUyNlx1''@;'; put 'put ''N2RiNFx1OTM1NFx1NjkzZlx1NmY3MFx1NTc2YVx1NThmN1x1NWIyY1x1N2QyY1x1NzIyYVx1NTQwYVx1OTFlM1x1OWRiNFx1NGVhZFx1NGY0ZVx1NTA1Y1x1NTA3NVx1NTI0M1x1OGM5ZVx1NTQ0OFx1NTgyNFx1NWI5YVx1NWUxZFx1NWU5NVx1NWVhZFx1NWVmN1x1NWYxZlx1NjA4Y1x1NjJi''@;'; put 'put ''NVx1NjMzYVx1NjNkMFx1NjhhZlx1NmM0MFx1Nzg4N1x1Nzk4ZVx1N2EwYlx1N2RlMFx1ODI0N1x1OGEwMlx1OGFlNlx1OGU0NFx1OTAxMyJdLFsiYzVhMSIsIlx1OTBiOFx1OTEyZFx1OTFkOFx1OWYwZVx1NmNlNVx1NjQ1OFx1NjRlMlx1NjU3NVx1NmVmNFx1NzY4NFx1N2IxYlx1OTA2OVx1''@;'; put 'put ''OTNkMVx1NmViYVx1NTRmMlx1NWZiOVx1NjRhNFx1OGY0ZFx1OGZlZFx1OTI0NFx1NTE3OFx1NTg2Ylx1NTkyOVx1NWM1NVx1NWU5N1x1NmRmYlx1N2U4Zlx1NzUxY1x1OGNiY1x1OGVlMlx1OTg1Ylx1NzBiOVx1NGYxZFx1NmJiZlx1NmZiMVx1NzUzMFx1OTZmYlx1NTE0ZVx1NTQxMFx1NTgz''@;'; put 'put ''NVx1NTg1N1x1NTlhY1x1NWM2MFx1NWY5Mlx1NjU5N1x1Njc1Y1x1NmUyMVx1NzY3Ylx1ODNkZlx1OGNlZFx1OTAxNFx1OTBmZFx1OTM0ZFx1NzgyNVx1NzgzYVx1NTJhYVx1NWVhNlx1NTcxZlx1NTk3NFx1NjAxMlx1NTAxMlx1NTE1YVx1NTFhY1x1NTFjZFx1NTIwMFx1NTUxMFx1NTg1NFx1''@;'; put 'put ''NTg1OFx1NTk1N1x1NWI5NVx1NWNmNlx1NWQ4Ylx1NjBiY1x1NjI5NVx1NjQyZFx1Njc3MVx1Njg0M1x1NjhiY1x1NjhkZlx1NzZkN1x1NmRkOFx1NmU2Zlx1NmQ5Ylx1NzA2Zlx1NzFjOFx1NWY1M1x1NzVkOFx1Nzk3N1x1N2I0OVx1N2I1NFx1N2I1Mlx1N2NkNlx1N2Q3MVx1NTIzMCJdLFsi''@;'; put 'put ''YzZhMSIsIlx1ODQ2M1x1ODU2OVx1ODVlNFx1OGEwZVx1OGIwNFx1OGM0Nlx1OGUwZlx1OTAwM1x1OTAwZlx1OTQxOVx1OTY3Nlx1OTgyZFx1OWEzMFx1OTVkOFx1NTBjZFx1NTJkNVx1NTQwY1x1NTgwMlx1NWMwZVx1NjFhN1x1NjQ5ZVx1NmQxZVx1NzdiM1x1N2FlNVx1ODBmNFx1ODQwNFx1''@;'; put 'put ''OTA1M1x1OTI4NVx1NWNlMFx1OWQwN1x1NTMzZlx1NWY5N1x1NWZiM1x1NmQ5Y1x1NzI3OVx1Nzc2M1x1NzliZlx1N2JlNFx1NmJkMlx1NzJlY1x1OGFhZFx1NjgwM1x1NmE2MVx1NTFmOFx1N2E4MVx1NjkzNFx1NWM0YVx1OWNmNlx1ODJlYlx1NWJjNVx1OTE0OVx1NzAxZVx1NTY3OFx1NWM2''@;'; put 'put ''Zlx1NjBjN1x1NjU2Nlx1NmM4Y1x1OGM1YVx1OTA0MVx1OTgxM1x1NTQ1MVx1NjZjN1x1OTIwZFx1NTk0OFx1OTBhM1x1NTE4NVx1NGU0ZFx1NTFlYVx1ODU5OVx1OGIwZVx1NzA1OFx1NjM3YVx1OTM0Ylx1Njk2Mlx1OTliNFx1N2UwNFx1NzU3N1x1NTM1N1x1Njk2MFx1OGVkZlx1OTZlM1x1''@;'; put 'put ''NmM1ZFx1NGU4Y1x1NWMzY1x1NWYxMFx1OGZlOVx1NTMwMlx1OGNkMVx1ODA4OVx1ODY3OVx1NWVmZlx1NjVlNVx1NGU3M1x1NTE2NSJdLFsiYzdhMSIsIlx1NTk4Mlx1NWMzZlx1OTdlZVx1NGVmYlx1NTk4YVx1NWZjZFx1OGE4ZFx1NmZlMVx1NzliMFx1Nzk2Mlx1NWJlN1x1ODQ3MVx1NzMy''@;'; put 'put ''Ylx1NzFiMVx1NWU3NFx1NWZmNVx1NjM3Ylx1NjQ5YVx1NzFjM1x1N2M5OFx1NGU0M1x1NWVmY1x1NGU0Ylx1NTdkY1x1NTZhMlx1NjBhOVx1NmZjM1x1N2QwZFx1ODBmZFx1ODEzM1x1ODFiZlx1OGZiMlx1ODk5N1x1ODZhNFx1NWRmNFx1NjI4YVx1NjRhZFx1ODk4N1x1Njc3N1x1NmNlMlx1''@;'; put 'put ''NmQzZVx1NzQzNlx1NzgzNFx1NWE0Nlx1N2Y3NVx1ODJhZFx1OTlhY1x1NGZmM1x1NWVjM1x1NjJkZFx1NjM5Mlx1NjU1N1x1Njc2Zlx1NzZjM1x1NzI0Y1x1ODBjY1x1ODBiYVx1OGYyOVx1OTE0ZFx1NTAwZFx1NTdmOVx1NWE5Mlx1Njg4NVx1Njk3M1x1NzE2NFx1NzJmZFx1OGNiN1x1NThm''@;'; put 'put ''Mlx1OGNlMFx1OTY2YVx1OTAxOVx1ODc3Zlx1NzllNFx1NzdlN1x1ODQyOVx1NGYyZlx1NTI2NVx1NTM1YVx1NjJjZFx1NjdjZlx1NmNjYVx1NzY3ZFx1N2I5NFx1N2M5NVx1ODIzNlx1ODU4NFx1OGZlYlx1NjZkZFx1NmYyMFx1NzIwNlx1N2UxYlx1ODNhYlx1OTljMVx1OWVhNiJdLFsiYzhh''@;'; put 'put ''MSIsIlx1NTFmZFx1N2JiMVx1Nzg3Mlx1N2JiOFx1ODA4N1x1N2I0OFx1NmFlOFx1NWU2MVx1ODA4Y1x1NzU1MVx1NzU2MFx1NTE2Ylx1OTI2Mlx1NmU4Y1x1NzY3YVx1OTE5N1x1OWFlYVx1NGYxMFx1N2Y3MFx1NjI5Y1x1N2I0Zlx1OTVhNVx1OWNlOVx1NTY3YVx1NTg1OVx1ODZlNFx1OTZi''@;'; put 'put ''Y1x1NGYzNFx1NTIyNFx1NTM0YVx1NTNjZFx1NTNkYlx1NWUwNlx1NjQyY1x1NjU5MVx1Njc3Zlx1NmMzZVx1NmM0ZVx1NzI0OFx1NzJhZlx1NzNlZFx1NzU1NFx1N2U0MVx1ODIyY1x1ODVlOVx1OGNhOVx1N2JjNFx1OTFjNlx1NzE2OVx1OTgxMlx1OThlZlx1NjMzZFx1NjY2OVx1NzU2YVx1''@;'; put 'put ''NzZlNFx1NzhkMFx1ODU0M1x1ODZlZVx1NTMyYVx1NTM1MVx1NTQyNlx1NTk4M1x1NWU4N1x1NWY3Y1x1NjBiMlx1NjI0OVx1NjI3OVx1NjJhYlx1NjU5MFx1NmJkNFx1NmNjY1x1NzViMlx1NzZhZVx1Nzg5MVx1NzlkOFx1N2RjYlx1N2Y3N1x1ODBhNVx1ODhhYlx1OGFiOVx1OGNiYlx1OTA3''@;'; put 'put ''Zlx1OTc1ZVx1OThkYlx1NmEwYlx1N2MzOFx1NTA5OVx1NWMzZVx1NWZhZVx1Njc4N1x1NmJkOFx1NzQzNVx1NzcwOVx1N2Y4ZSJdLFsiYzlhMSIsIlx1OWYzYlx1NjdjYVx1N2ExN1x1NTMzOVx1NzU4Ylx1OWFlZFx1NWY2Nlx1ODE5ZFx1ODNmMVx1ODA5OFx1NWYzY1x1NWZjNVx1NzU2Mlx1''@;'; put 'put ''N2I0Nlx1OTAzY1x1Njg2N1x1NTllYlx1NWE5Ylx1N2QxMFx1NzY3ZVx1OGIyY1x1NGZmNVx1NWY2YVx1NmExOVx1NmMzN1x1NmYwMlx1NzRlMlx1Nzk2OFx1ODg2OFx1OGE1NVx1OGM3OVx1NWVkZlx1NjNjZlx1NzVjNVx1NzlkMlx1ODJkN1x1OTMyOFx1OTJmMlx1ODQ5Y1x1ODZlZFx1OWMy''@;'; put 'put ''ZFx1NTRjMVx1NWY2Y1x1NjU4Y1x1NmQ1Y1x1NzAxNVx1OGNhN1x1OGNkM1x1OTgzYlx1NjU0Zlx1NzRmNlx1NGUwZFx1NGVkOFx1NTdlMFx1NTkyYlx1NWE2Nlx1NWJjY1x1NTFhOFx1NWUwM1x1NWU5Y1x1NjAxNlx1NjI3Nlx1NjU3N1x1NjVhN1x1NjY2ZVx1NmQ2ZVx1NzIzNlx1N2IyNlx1''@;'; put 'put ''ODE1MFx1ODE5YVx1ODI5OVx1OGI1Y1x1OGNhMFx1OGNlNlx1OGQ3NFx1OTYxY1x1OTY0NFx1NGZhZVx1NjRhYlx1NmI2Nlx1ODIxZVx1ODQ2MVx1ODU2YVx1OTBlOFx1NWMwMVx1Njk1M1x1OThhOFx1ODQ3YVx1ODU1N1x1NGYwZlx1NTI2Zlx1NWZhOVx1NWU0NVx1NjcwZCJdLFsiY2FhMSIs''@;'; put 'put ''Ilx1Nzk4Zlx1ODE3OVx1ODkwN1x1ODk4Nlx1NmRmNVx1NWYxN1x1NjI1NVx1NmNiOFx1NGVjZlx1NzI2OVx1OWI5Mlx1NTIwNlx1NTQzYlx1NTY3NFx1NThiM1x1NjFhNFx1NjI2ZVx1NzExYVx1NTk2ZVx1N2M4OVx1N2NkZVx1N2QxYlx1OTZmMFx1NjU4N1x1ODA1ZVx1NGUxOVx1NGY3NVx1''@;'; put 'put ''NTE3NVx1NTg0MFx1NWU2M1x1NWU3M1x1NWYwYVx1NjdjNFx1NGUyNlx1ODUzZFx1OTU4OVx1OTY1Ylx1N2M3M1x1OTgwMVx1NTBmYlx1NThjMVx1NzY1Nlx1NzhhN1x1NTIyNVx1NzdhNVx1ODUxMVx1N2I4Nlx1NTA0Zlx1NTkwOVx1NzI0N1x1N2JjN1x1N2RlOFx1OGZiYVx1OGZkNFx1OTA0''@;'; put 'put ''ZFx1NGZiZlx1NTJjOVx1NWEyOVx1NWYwMVx1OTdhZFx1NGZkZFx1ODIxN1x1OTJlYVx1NTcwM1x1NjM1NVx1NmI2OVx1NzUyYlx1ODhkY1x1OGYxNFx1N2E0Mlx1NTJkZlx1NTg5M1x1NjE1NVx1NjIwYVx1NjZhZVx1NmJjZFx1N2MzZlx1ODNlOVx1NTAyM1x1NGZmOFx1NTMwNVx1NTQ0Nlx1''@;'; put 'put ''NTgzMVx1NTk0OVx1NWI5ZFx1NWNmMFx1NWNlZlx1NWQyOVx1NWU5Nlx1NjJiMVx1NjM2N1x1NjUzZVx1NjViOVx1NjcwYiJdLFsiY2JhMSIsIlx1NmNkNVx1NmNlMVx1NzBmOVx1NzgzMlx1N2UyYlx1ODBkZVx1ODJiM1x1ODQwY1x1ODRlY1x1ODcwMlx1ODkxMlx1OGEyYVx1OGM0YVx1OTBh''@;'; put 'put ''Nlx1OTJkMlx1OThmZFx1OWNmM1x1OWQ2Y1x1NGU0Zlx1NGVhMVx1NTA4ZFx1NTI1Nlx1NTc0YVx1NTlhOFx1NWUzZFx1NWZkOFx1NWZkOVx1NjIzZlx1NjZiNFx1NjcxYlx1NjdkMFx1NjhkMlx1NTE5Mlx1N2QyMVx1ODBhYVx1ODFhOFx1OGIwMFx1OGM4Y1x1OGNiZlx1OTI3ZVx1OTYzMlx1''@;'; put 'put ''NTQyMFx1OTgyY1x1NTMxN1x1NTBkNVx1NTM1Y1x1NThhOFx1NjRiMlx1NjczNFx1NzI2N1x1Nzc2Nlx1N2E0Nlx1OTFlNlx1NTJjM1x1NmNhMVx1NmI4Nlx1NTgwMFx1NWU0Y1x1NTk1NFx1NjcyY1x1N2ZmYlx1NTFlMVx1NzZjNlx1NjQ2OVx1NzhlOFx1OWI1NFx1OWViYlx1NTdjYlx1NTli''@;'; put 'put ''OVx1NjYyN1x1Njc5YVx1NmJjZVx1NTRlOVx1NjlkOVx1NWU1NVx1ODE5Y1x1Njc5NVx1OWJhYVx1NjdmZVx1OWM1Mlx1Njg1ZFx1NGVhNlx1NGZlM1x1NTNjOFx1NjJiOVx1NjcyYlx1NmNhYlx1OGZjNFx1NGZhZFx1N2U2ZFx1OWViZlx1NGUwN1x1NjE2Mlx1NmU4MCJdLFsiY2NhMSIsIlx1''@;'; put 'put ''NmYyYlx1ODUxM1x1NTQ3M1x1NjcyYVx1OWI0NVx1NWRmM1x1N2I5NVx1NWNhY1x1NWJjNlx1ODcxY1x1NmU0YVx1ODRkMVx1N2ExNFx1ODEwOFx1NTk5OVx1N2M4ZFx1NmMxMVx1NzcyMFx1NTJkOVx1NTkyMlx1NzEyMVx1NzI1Zlx1NzdkYlx1OTcyN1x1OWQ2MVx1NjkwYlx1NWE3Zlx1NWEx''@;'; put 'put ''OFx1NTFhNVx1NTQwZFx1NTQ3ZFx1NjYwZVx1NzZkZlx1OGZmN1x1OTI5OFx1OWNmNFx1NTllYVx1NzI1ZFx1NmVjNVx1NTE0ZFx1NjhjOVx1N2RiZlx1N2RlY1x1OTc2Mlx1OWViYVx1NjQ3OFx1NmEyMVx1ODMwMlx1NTk4NFx1NWI1Zlx1NmJkYlx1NzMxYlx1NzZmMlx1N2RiMlx1ODAxN1x1''@;'; put 'put ''ODQ5OVx1NTEzMlx1NjcyOFx1OWVkOVx1NzZlZVx1Njc2Mlx1NTJmZlx1OTkwNVx1NWMyNFx1NjIzYlx1N2M3ZVx1OGNiMFx1NTU0Zlx1NjBiNlx1N2QwYlx1OTU4MFx1NTMwMVx1NGU1Zlx1NTFiNlx1NTkxY1x1NzIzYVx1ODAzNlx1OTFjZVx1NWYyNVx1NzdlMlx1NTM4NFx1NWY3OVx1N2Qw''@;'; put 'put ''NFx1ODVhY1x1OGEzM1x1OGU4ZFx1OTc1Nlx1NjdmM1x1ODVhZVx1OTQ1M1x1NjEwOVx1NjEwOFx1NmNiOVx1NzY1MiJdLFsiY2RhMSIsIlx1OGFlZFx1OGYzOFx1NTUyZlx1NGY1MVx1NTEyYVx1NTJjN1x1NTNjYlx1NWJhNVx1NWU3ZFx1NjBhMFx1NjE4Mlx1NjNkNlx1NjcwOVx1NjdkYVx1''@;'; put 'put ''NmU2N1x1NmQ4Y1x1NzMzNlx1NzMzN1x1NzUzMVx1Nzk1MFx1ODhkNVx1OGE5OFx1OTA0YVx1OTA5MVx1OTBmNVx1OTZjNFx1ODc4ZFx1NTkxNVx1NGU4OFx1NGY1OVx1NGUwZVx1OGE4OVx1OGYzZlx1OTgxMFx1NTBhZFx1NWU3Y1x1NTk5Nlx1NWJiOVx1NWViOFx1NjNkYVx1NjNmYVx1NjRj''@;'; put 'put ''MVx1NjZkY1x1Njk0YVx1NjlkOFx1NmQwYlx1NmViNlx1NzE5NFx1NzUyOFx1N2FhZlx1N2Y4YVx1ODAwMFx1ODQ0OVx1ODRjOVx1ODk4MVx1OGIyMVx1OGUwYVx1OTA2NVx1OTY3ZFx1OTkwYVx1NjE3ZVx1NjI5MVx1NmIzMlx1NmM4M1x1NmQ3NFx1N2ZjY1x1N2ZmY1x1NmRjMFx1N2Y4NVx1''@;'; put 'put ''ODdiYVx1ODhmOFx1Njc2NVx1ODNiMVx1OTgzY1x1OTZmN1x1NmQxYlx1N2Q2MVx1ODQzZFx1OTE2YVx1NGU3MVx1NTM3NVx1NWQ1MFx1NmIwNFx1NmZlYlx1ODVjZFx1ODYyZFx1ODlhN1x1NTIyOVx1NTQwZlx1NWM2NVx1Njc0ZVx1NjhhOFx1NzQwNlx1NzQ4MyJdLFsiY2VhMSIsIlx1NzVl''@;'; put 'put ''Mlx1ODhjZlx1ODhlMVx1OTFjY1x1OTZlMlx1OTY3OFx1NWY4Ylx1NzM4N1x1N2FjYlx1ODQ0ZVx1NjNhMFx1NzU2NVx1NTI4OVx1NmQ0MVx1NmU5Y1x1NzQwOVx1NzU1OVx1Nzg2Ylx1N2M5Mlx1OTY4Nlx1N2FkY1x1OWY4ZFx1NGZiNlx1NjE2ZVx1NjVjNVx1ODY1Y1x1NGU4Nlx1NGVhZVx1''@;'; put 'put ''NTBkYVx1NGUyMVx1NTFjY1x1NWJlZVx1NjU5OVx1Njg4MVx1NmRiY1x1NzMxZlx1NzY0Mlx1NzdhZFx1N2ExY1x1N2NlN1x1ODI2Zlx1OGFkMlx1OTA3Y1x1OTFjZlx1OTY3NVx1OTgxOFx1NTI5Ylx1N2RkMVx1NTAyYlx1NTM5OFx1Njc5N1x1NmRjYlx1NzFkMFx1NzQzM1x1ODFlOFx1OGYy''@;'; put 'put ''YVx1OTZhM1x1OWM1N1x1OWU5Zlx1NzQ2MFx1NTg0MVx1NmQ5OVx1N2QyZlx1OTg1ZVx1NGVlNFx1NGYzNlx1NGY4Ylx1NTFiN1x1NTJiMVx1NWRiYVx1NjAxY1x1NzNiMlx1NzkzY1x1ODJkM1x1OTIzNFx1OTZiN1x1OTZmNlx1OTcwYVx1OWU5N1x1OWY2Mlx1NjZhNlx1NmI3NFx1NTIxN1x1''@;'; put 'put ''NTJhM1x1NzBjOFx1ODhjMlx1NWVjOVx1NjA0Ylx1NjE5MFx1NmYyM1x1NzE0OVx1N2MzZVx1N2RmNFx1ODA2ZiJdLFsiY2ZhMSIsIlx1ODRlZVx1OTAyM1x1OTMyY1x1NTQ0Mlx1OWI2Zlx1NmFkM1x1NzA4OVx1OGNjMlx1OGRlZlx1OTczMlx1NTJiNFx1NWE0MVx1NWVjYVx1NWYwNFx1Njcx''@;'; put 'put ''N1x1Njk3Y1x1Njk5NFx1NmQ2YVx1NmYwZlx1NzI2Mlx1NzJmY1x1N2JlZFx1ODAwMVx1ODA3ZVx1ODc0Ylx1OTBjZVx1NTE2ZFx1OWU5M1x1Nzk4NFx1ODA4Ylx1OTMzMlx1OGFkNlx1NTAyZFx1NTQ4Y1x1OGE3MVx1NmI2YVx1OGNjNFx1ODEwN1x1NjBkMVx1NjdhMFx1OWRmMlx1NGU5OVx1''@;'; put 'put ''NGU5OFx1OWMxMFx1OGE2Ylx1ODVjMVx1ODU2OFx1NjkwMFx1NmU3ZVx1Nzg5N1x1ODE1NSJdLFsiZDBhMSIsIlx1NWYwY1x1NGUxMFx1NGUxNVx1NGUyYVx1NGUzMVx1NGUzNlx1NGUzY1x1NGUzZlx1NGU0Mlx1NGU1Nlx1NGU1OFx1NGU4Mlx1NGU4NVx1OGM2Ylx1NGU4YVx1ODIxMlx1NWYw''@;'; put 'put ''ZFx1NGU4ZVx1NGU5ZVx1NGU5Zlx1NGVhMFx1NGVhMlx1NGViMFx1NGViM1x1NGViNlx1NGVjZVx1NGVjZFx1NGVjNFx1NGVjNlx1NGVjMlx1NGVkN1x1NGVkZVx1NGVlZFx1NGVkZlx1NGVmN1x1NGYwOVx1NGY1YVx1NGYzMFx1NGY1Ylx1NGY1ZFx1NGY1N1x1NGY0N1x1NGY3Nlx1NGY4OFx1''@;'; put 'put ''NGY4Zlx1NGY5OFx1NGY3Ylx1NGY2OVx1NGY3MFx1NGY5MVx1NGY2Zlx1NGY4Nlx1NGY5Nlx1NTExOFx1NGZkNFx1NGZkZlx1NGZjZVx1NGZkOFx1NGZkYlx1NGZkMVx1NGZkYVx1NGZkMFx1NGZlNFx1NGZlNVx1NTAxYVx1NTAyOFx1NTAxNFx1NTAyYVx1NTAyNVx1NTAwNVx1NGYxY1x1NGZm''@;'; put 'put ''Nlx1NTAyMVx1NTAyOVx1NTAyY1x1NGZmZVx1NGZlZlx1NTAxMVx1NTAwNlx1NTA0M1x1NTA0N1x1NjcwM1x1NTA1NVx1NTA1MFx1NTA0OFx1NTA1YVx1NTA1Nlx1NTA2Y1x1NTA3OFx1NTA4MFx1NTA5YVx1NTA4NVx1NTBiNFx1NTBiMiJdLFsiZDFhMSIsIlx1NTBjOVx1NTBjYVx1NTBiM1x1''@;'; put 'put ''NTBjMlx1NTBkNlx1NTBkZVx1NTBlNVx1NTBlZFx1NTBlM1x1NTBlZVx1NTBmOVx1NTBmNVx1NTEwOVx1NTEwMVx1NTEwMlx1NTExNlx1NTExNVx1NTExNFx1NTExYVx1NTEyMVx1NTEzYVx1NTEzN1x1NTEzY1x1NTEzYlx1NTEzZlx1NTE0MFx1NTE1Mlx1NTE0Y1x1NTE1NFx1NTE2Mlx1N2Fm''@;'; put 'put ''OFx1NTE2OVx1NTE2YVx1NTE2ZVx1NTE4MFx1NTE4Mlx1NTZkOFx1NTE4Y1x1NTE4OVx1NTE4Zlx1NTE5MVx1NTE5M1x1NTE5NVx1NTE5Nlx1NTFhNFx1NTFhNlx1NTFhMlx1NTFhOVx1NTFhYVx1NTFhYlx1NTFiM1x1NTFiMVx1NTFiMlx1NTFiMFx1NTFiNVx1NTFiZFx1NTFjNVx1NTFjOVx1''@;'; put 'put ''NTFkYlx1NTFlMFx1ODY1NVx1NTFlOVx1NTFlZFx1NTFmMFx1NTFmNVx1NTFmZVx1NTIwNFx1NTIwYlx1NTIxNFx1NTIwZVx1NTIyN1x1NTIyYVx1NTIyZVx1NTIzM1x1NTIzOVx1NTI0Zlx1NTI0NFx1NTI0Ylx1NTI0Y1x1NTI1ZVx1NTI1NFx1NTI2YVx1NTI3NFx1NTI2OVx1NTI3M1x1NTI3''@;'; put 'put ''Zlx1NTI3ZFx1NTI4ZFx1NTI5NFx1NTI5Mlx1NTI3MVx1NTI4OFx1NTI5MVx1OGZhOCJdLFsiZDJhMSIsIlx1OGZhN1x1NTJhY1x1NTJhZFx1NTJiY1x1NTJiNVx1NTJjMVx1NTJjZFx1NTJkN1x1NTJkZVx1NTJlM1x1NTJlNlx1OThlZFx1NTJlMFx1NTJmM1x1NTJmNVx1NTJmOFx1NTJmOVx1''@;'; put 'put ''NTMwNlx1NTMwOFx1NzUzOFx1NTMwZFx1NTMxMFx1NTMwZlx1NTMxNVx1NTMxYVx1NTMyM1x1NTMyZlx1NTMzMVx1NTMzM1x1NTMzOFx1NTM0MFx1NTM0Nlx1NTM0NVx1NGUxN1x1NTM0OVx1NTM0ZFx1NTFkNlx1NTM1ZVx1NTM2OVx1NTM2ZVx1NTkxOFx1NTM3Ylx1NTM3N1x1NTM4Mlx1NTM5''@;'; put 'put ''Nlx1NTNhMFx1NTNhNlx1NTNhNVx1NTNhZVx1NTNiMFx1NTNiNlx1NTNjM1x1N2MxMlx1OTZkOVx1NTNkZlx1NjZmY1x1NzFlZVx1NTNlZVx1NTNlOFx1NTNlZFx1NTNmYVx1NTQwMVx1NTQzZFx1NTQ0MFx1NTQyY1x1NTQyZFx1NTQzY1x1NTQyZVx1NTQzNlx1NTQyOVx1NTQxZFx1NTQ0ZVx1''@;'; put 'put ''NTQ4Zlx1NTQ3NVx1NTQ4ZVx1NTQ1Zlx1NTQ3MVx1NTQ3N1x1NTQ3MFx1NTQ5Mlx1NTQ3Ylx1NTQ4MFx1NTQ3Nlx1NTQ4NFx1NTQ5MFx1NTQ4Nlx1NTRjN1x1NTRhMlx1NTRiOFx1NTRhNVx1NTRhY1x1NTRjNFx1NTRjOFx1NTRhOCJdLFsiZDNhMSIsIlx1NTRhYlx1NTRjMlx1NTRhNFx1NTRi''@;'; put 'put ''ZVx1NTRiY1x1NTRkOFx1NTRlNVx1NTRlNlx1NTUwZlx1NTUxNFx1NTRmZFx1NTRlZVx1NTRlZFx1NTRmYVx1NTRlMlx1NTUzOVx1NTU0MFx1NTU2M1x1NTU0Y1x1NTUyZVx1NTU1Y1x1NTU0NVx1NTU1Nlx1NTU1N1x1NTUzOFx1NTUzM1x1NTU1ZFx1NTU5OVx1NTU4MFx1NTRhZlx1NTU4YVx1''@;'; put 'put ''NTU5Zlx1NTU3Ylx1NTU3ZVx1NTU5OFx1NTU5ZVx1NTVhZVx1NTU3Y1x1NTU4M1x1NTVhOVx1NTU4N1x1NTVhOFx1NTVkYVx1NTVjNVx1NTVkZlx1NTVjNFx1NTVkY1x1NTVlNFx1NTVkNFx1NTYxNFx1NTVmN1x1NTYxNlx1NTVmZVx1NTVmZFx1NTYxYlx1NTVmOVx1NTY0ZVx1NTY1MFx1NzFk''@;'; put 'put ''Zlx1NTYzNFx1NTYzNlx1NTYzMlx1NTYzOFx1NTY2Ylx1NTY2NFx1NTYyZlx1NTY2Y1x1NTY2YVx1NTY4Nlx1NTY4MFx1NTY4YVx1NTZhMFx1NTY5NFx1NTY4Zlx1NTZhNVx1NTZhZVx1NTZiNlx1NTZiNFx1NTZjMlx1NTZiY1x1NTZjMVx1NTZjM1x1NTZjMFx1NTZjOFx1NTZjZVx1NTZkMVx1''@;'; put 'put ''NTZkM1x1NTZkN1x1NTZlZVx1NTZmOVx1NTcwMFx1NTZmZlx1NTcwNFx1NTcwOSJdLFsiZDRhMSIsIlx1NTcwOFx1NTcwYlx1NTcwZFx1NTcxM1x1NTcxOFx1NTcxNlx1NTVjN1x1NTcxY1x1NTcyNlx1NTczN1x1NTczOFx1NTc0ZVx1NTczYlx1NTc0MFx1NTc0Zlx1NTc2OVx1NTdjMFx1NTc4''@;'; put 'put ''OFx1NTc2MVx1NTc3Zlx1NTc4OVx1NTc5M1x1NTdhMFx1NTdiM1x1NTdhNFx1NTdhYVx1NTdiMFx1NTdjM1x1NTdjNlx1NTdkNFx1NTdkMlx1NTdkM1x1NTgwYVx1NTdkNlx1NTdlM1x1NTgwYlx1NTgxOVx1NTgxZFx1NTg3Mlx1NTgyMVx1NTg2Mlx1NTg0Ylx1NTg3MFx1NmJjMFx1NTg1Mlx1''@;'; put 'put ''NTgzZFx1NTg3OVx1NTg4NVx1NThiOVx1NTg5Zlx1NThhYlx1NThiYVx1NThkZVx1NThiYlx1NThiOFx1NThhZVx1NThjNVx1NThkM1x1NThkMVx1NThkN1x1NThkOVx1NThkOFx1NThlNVx1NThkY1x1NThlNFx1NThkZlx1NThlZlx1NThmYVx1NThmOVx1NThmYlx1NThmY1x1NThmZFx1NTkw''@;'; put 'put ''Mlx1NTkwYVx1NTkxMFx1NTkxYlx1NjhhNlx1NTkyNVx1NTkyY1x1NTkyZFx1NTkzMlx1NTkzOFx1NTkzZVx1N2FkMlx1NTk1NVx1NTk1MFx1NTk0ZVx1NTk1YVx1NTk1OFx1NTk2Mlx1NTk2MFx1NTk2N1x1NTk2Y1x1NTk2OSJdLFsiZDVhMSIsIlx1NTk3OFx1NTk4MVx1NTk5ZFx1NGY1ZVx1''@;'; put 'put ''NGZhYlx1NTlhM1x1NTliMlx1NTljNlx1NTllOFx1NTlkY1x1NTk4ZFx1NTlkOVx1NTlkYVx1NWEyNVx1NWExZlx1NWExMVx1NWExY1x1NWEwOVx1NWExYVx1NWE0MFx1NWE2Y1x1NWE0OVx1NWEzNVx1NWEzNlx1NWE2Mlx1NWE2YVx1NWE5YVx1NWFiY1x1NWFiZVx1NWFjYlx1NWFjMlx1NWFi''@;'; put 'put ''ZFx1NWFlM1x1NWFkN1x1NWFlNlx1NWFlOVx1NWFkNlx1NWFmYVx1NWFmYlx1NWIwY1x1NWIwYlx1NWIxNlx1NWIzMlx1NWFkMFx1NWIyYVx1NWIzNlx1NWIzZVx1NWI0M1x1NWI0NVx1NWI0MFx1NWI1MVx1NWI1NVx1NWI1YVx1NWI1Ylx1NWI2NVx1NWI2OVx1NWI3MFx1NWI3M1x1NWI3NVx1''@;'; put 'put ''NWI3OFx1NjU4OFx1NWI3YVx1NWI4MFx1NWI4M1x1NWJhNlx1NWJiOFx1NWJjM1x1NWJjN1x1NWJjOVx1NWJkNFx1NWJkMFx1NWJlNFx1NWJlNlx1NWJlMlx1NWJkZVx1NWJlNVx1NWJlYlx1NWJmMFx1NWJmNlx1NWJmM1x1NWMwNVx1NWMwN1x1NWMwOFx1NWMwZFx1NWMxM1x1NWMyMFx1NWMy''@;'; put 'put ''Mlx1NWMyOFx1NWMzOFx1NWMzOVx1NWM0MVx1NWM0Nlx1NWM0ZVx1NWM1MyJdLFsiZDZhMSIsIlx1NWM1MFx1NWM0Zlx1NWI3MVx1NWM2Y1x1NWM2ZVx1NGU2Mlx1NWM3Nlx1NWM3OVx1NWM4Y1x1NWM5MVx1NWM5NFx1NTk5Ylx1NWNhYlx1NWNiYlx1NWNiNlx1NWNiY1x1NWNiN1x1NWNjNVx1''@;'; put 'put ''NWNiZVx1NWNjN1x1NWNkOVx1NWNlOVx1NWNmZFx1NWNmYVx1NWNlZFx1NWQ4Y1x1NWNlYVx1NWQwYlx1NWQxNVx1NWQxN1x1NWQ1Y1x1NWQxZlx1NWQxYlx1NWQxMVx1NWQxNFx1NWQyMlx1NWQxYVx1NWQxOVx1NWQxOFx1NWQ0Y1x1NWQ1Mlx1NWQ0ZVx1NWQ0Ylx1NWQ2Y1x1NWQ3M1x1NWQ3''@;'; put 'put ''Nlx1NWQ4N1x1NWQ4NFx1NWQ4Mlx1NWRhMlx1NWQ5ZFx1NWRhY1x1NWRhZVx1NWRiZFx1NWQ5MFx1NWRiN1x1NWRiY1x1NWRjOVx1NWRjZFx1NWRkM1x1NWRkMlx1NWRkNlx1NWRkYlx1NWRlYlx1NWRmMlx1NWRmNVx1NWUwYlx1NWUxYVx1NWUxOVx1NWUxMVx1NWUxYlx1NWUzNlx1NWUzN1x1''@;'; put 'put ''NWU0NFx1NWU0M1x1NWU0MFx1NWU0ZVx1NWU1N1x1NWU1NFx1NWU1Zlx1NWU2Mlx1NWU2NFx1NWU0N1x1NWU3NVx1NWU3Nlx1NWU3YVx1OWViY1x1NWU3Zlx1NWVhMFx1NWVjMVx1NWVjMlx1NWVjOFx1NWVkMFx1NWVjZiJdLFsiZDdhMSIsIlx1NWVkNlx1NWVlM1x1NWVkZFx1NWVkYVx1NWVk''@;'; put 'put ''Ylx1NWVlMlx1NWVlMVx1NWVlOFx1NWVlOVx1NWVlY1x1NWVmMVx1NWVmM1x1NWVmMFx1NWVmNFx1NWVmOFx1NWVmZVx1NWYwM1x1NWYwOVx1NWY1ZFx1NWY1Y1x1NWYwYlx1NWYxMVx1NWYxNlx1NWYyOVx1NWYyZFx1NWYzOFx1NWY0MVx1NWY0OFx1NWY0Y1x1NWY0ZVx1NWYyZlx1NWY1MVx1''@;'; put 'put ''NWY1Nlx1NWY1N1x1NWY1OVx1NWY2MVx1NWY2ZFx1NWY3M1x1NWY3N1x1NWY4M1x1NWY4Mlx1NWY3Zlx1NWY4YVx1NWY4OFx1NWY5MVx1NWY4N1x1NWY5ZVx1NWY5OVx1NWY5OFx1NWZhMFx1NWZhOFx1NWZhZFx1NWZiY1x1NWZkNlx1NWZmYlx1NWZlNFx1NWZmOFx1NWZmMVx1NWZkZFx1NjBi''@;'; put 'put ''M1x1NWZmZlx1NjAyMVx1NjA2MFx1NjAxOVx1NjAxMFx1NjAyOVx1NjAwZVx1NjAzMVx1NjAxYlx1NjAxNVx1NjAyYlx1NjAyNlx1NjAwZlx1NjAzYVx1NjA1YVx1NjA0MVx1NjA2YVx1NjA3N1x1NjA1Zlx1NjA0YVx1NjA0Nlx1NjA0ZFx1NjA2M1x1NjA0M1x1NjA2NFx1NjA0Mlx1NjA2Y1x1''@;'; put 'put ''NjA2Ylx1NjA1OVx1NjA4MVx1NjA4ZFx1NjBlN1x1NjA4M1x1NjA5YSJdLFsiZDhhMSIsIlx1NjA4NFx1NjA5Ylx1NjA5Nlx1NjA5N1x1NjA5Mlx1NjBhN1x1NjA4Ylx1NjBlMVx1NjBiOFx1NjBlMFx1NjBkM1x1NjBiNFx1NWZmMFx1NjBiZFx1NjBjNlx1NjBiNVx1NjBkOFx1NjE0ZFx1NjEx''@;'; put 'put ''NVx1NjEwNlx1NjBmNlx1NjBmN1x1NjEwMFx1NjBmNFx1NjBmYVx1NjEwM1x1NjEyMVx1NjBmYlx1NjBmMVx1NjEwZFx1NjEwZVx1NjE0N1x1NjEzZVx1NjEyOFx1NjEyN1x1NjE0YVx1NjEzZlx1NjEzY1x1NjEyY1x1NjEzNFx1NjEzZFx1NjE0Mlx1NjE0NFx1NjE3M1x1NjE3N1x1NjE1OFx1''@;'; put 'put ''NjE1OVx1NjE1YVx1NjE2Ylx1NjE3NFx1NjE2Zlx1NjE2NVx1NjE3MVx1NjE1Zlx1NjE1ZFx1NjE1M1x1NjE3NVx1NjE5OVx1NjE5Nlx1NjE4N1x1NjFhY1x1NjE5NFx1NjE5YVx1NjE4YVx1NjE5MVx1NjFhYlx1NjFhZVx1NjFjY1x1NjFjYVx1NjFjOVx1NjFmN1x1NjFjOFx1NjFjM1x1NjFj''@;'; put 'put ''Nlx1NjFiYVx1NjFjYlx1N2Y3OVx1NjFjZFx1NjFlNlx1NjFlM1x1NjFmNlx1NjFmYVx1NjFmNFx1NjFmZlx1NjFmZFx1NjFmY1x1NjFmZVx1NjIwMFx1NjIwOFx1NjIwOVx1NjIwZFx1NjIwY1x1NjIxNFx1NjIxYiJdLFsiZDlhMSIsIlx1NjIxZVx1NjIyMVx1NjIyYVx1NjIyZVx1NjIzMFx1''@;'; put 'put ''NjIzMlx1NjIzM1x1NjI0MVx1NjI0ZVx1NjI1ZVx1NjI2M1x1NjI1Ylx1NjI2MFx1NjI2OFx1NjI3Y1x1NjI4Mlx1NjI4OVx1NjI3ZVx1NjI5Mlx1NjI5M1x1NjI5Nlx1NjJkNFx1NjI4M1x1NjI5NFx1NjJkN1x1NjJkMVx1NjJiYlx1NjJjZlx1NjJmZlx1NjJjNlx1NjRkNFx1NjJjOFx1NjJk''@;'; put 'put ''Y1x1NjJjY1x1NjJjYVx1NjJjMlx1NjJjN1x1NjI5Ylx1NjJjOVx1NjMwY1x1NjJlZVx1NjJmMVx1NjMyN1x1NjMwMlx1NjMwOFx1NjJlZlx1NjJmNVx1NjM1MFx1NjMzZVx1NjM0ZFx1NjQxY1x1NjM0Zlx1NjM5Nlx1NjM4ZVx1NjM4MFx1NjNhYlx1NjM3Nlx1NjNhM1x1NjM4Zlx1NjM4OVx1''@;'; put 'put ''NjM5Zlx1NjNiNVx1NjM2Ylx1NjM2OVx1NjNiZVx1NjNlOVx1NjNjMFx1NjNjNlx1NjNlM1x1NjNjOVx1NjNkMlx1NjNmNlx1NjNjNFx1NjQxNlx1NjQzNFx1NjQwNlx1NjQxM1x1NjQyNlx1NjQzNlx1NjUxZFx1NjQxN1x1NjQyOFx1NjQwZlx1NjQ2N1x1NjQ2Zlx1NjQ3Nlx1NjQ0ZVx1NjUy''@;'; put 'put ''YVx1NjQ5NVx1NjQ5M1x1NjRhNVx1NjRhOVx1NjQ4OFx1NjRiYyJdLFsiZGFhMSIsIlx1NjRkYVx1NjRkMlx1NjRjNVx1NjRjN1x1NjRiYlx1NjRkOFx1NjRjMlx1NjRmMVx1NjRlN1x1ODIwOVx1NjRlMFx1NjRlMVx1NjJhY1x1NjRlM1x1NjRlZlx1NjUyY1x1NjRmNlx1NjRmNFx1NjRmMlx1''@;'; put 'put ''NjRmYVx1NjUwMFx1NjRmZFx1NjUxOFx1NjUxY1x1NjUwNVx1NjUyNFx1NjUyM1x1NjUyYlx1NjUzNFx1NjUzNVx1NjUzN1x1NjUzNlx1NjUzOFx1NzU0Ylx1NjU0OFx1NjU1Nlx1NjU1NVx1NjU0ZFx1NjU1OFx1NjU1ZVx1NjU1ZFx1NjU3Mlx1NjU3OFx1NjU4Mlx1NjU4M1x1OGI4YVx1NjU5''@;'; put 'put ''Ylx1NjU5Zlx1NjVhYlx1NjViN1x1NjVjM1x1NjVjNlx1NjVjMVx1NjVjNFx1NjVjY1x1NjVkMlx1NjVkYlx1NjVkOVx1NjVlMFx1NjVlMVx1NjVmMVx1Njc3Mlx1NjYwYVx1NjYwM1x1NjVmYlx1Njc3M1x1NjYzNVx1NjYzNlx1NjYzNFx1NjYxY1x1NjY0Zlx1NjY0NFx1NjY0OVx1NjY0MVx1''@;'; put 'put ''NjY1ZVx1NjY1ZFx1NjY2NFx1NjY2N1x1NjY2OFx1NjY1Zlx1NjY2Mlx1NjY3MFx1NjY4M1x1NjY4OFx1NjY4ZVx1NjY4OVx1NjY4NFx1NjY5OFx1NjY5ZFx1NjZjMVx1NjZiOVx1NjZjOVx1NjZiZVx1NjZiYyJdLFsiZGJhMSIsIlx1NjZjNFx1NjZiOFx1NjZkNlx1NjZkYVx1NjZlMFx1NjYz''@;'; put 'put ''Zlx1NjZlNlx1NjZlOVx1NjZmMFx1NjZmNVx1NjZmN1x1NjcwZlx1NjcxNlx1NjcxZVx1NjcyNlx1NjcyN1x1OTczOFx1NjcyZVx1NjczZlx1NjczNlx1Njc0MVx1NjczOFx1NjczN1x1Njc0Nlx1Njc1ZVx1Njc2MFx1Njc1OVx1Njc2M1x1Njc2NFx1Njc4OVx1Njc3MFx1NjdhOVx1Njc3Y1x1''@;'; put 'put ''Njc2YVx1Njc4Y1x1Njc4Ylx1NjdhNlx1NjdhMVx1Njc4NVx1NjdiN1x1NjdlZlx1NjdiNFx1NjdlY1x1NjdiM1x1NjdlOVx1NjdiOFx1NjdlNFx1NjdkZVx1NjdkZFx1NjdlMlx1NjdlZVx1NjdiOVx1NjdjZVx1NjdjNlx1NjdlN1x1NmE5Y1x1NjgxZVx1Njg0Nlx1NjgyOVx1Njg0MFx1Njg0''@;'; put 'put ''ZFx1NjgzMlx1Njg0ZVx1NjhiM1x1NjgyYlx1Njg1OVx1Njg2M1x1Njg3N1x1Njg3Zlx1Njg5Zlx1Njg4Zlx1NjhhZFx1Njg5NFx1Njg5ZFx1Njg5Ylx1Njg4M1x1NmFhZVx1NjhiOVx1Njg3NFx1NjhiNVx1NjhhMFx1NjhiYVx1NjkwZlx1Njg4ZFx1Njg3ZVx1NjkwMVx1NjhjYVx1NjkwOFx1''@;'; put 'put ''NjhkOFx1NjkyMlx1NjkyNlx1NjhlMVx1NjkwY1x1NjhjZCJdLFsiZGNhMSIsIlx1NjhkNFx1NjhlN1x1NjhkNVx1NjkzNlx1NjkxMlx1NjkwNFx1NjhkN1x1NjhlM1x1NjkyNVx1NjhmOVx1NjhlMFx1NjhlZlx1NjkyOFx1NjkyYVx1NjkxYVx1NjkyM1x1NjkyMVx1NjhjNlx1Njk3OVx1Njk3''@;'; put 'put ''N1x1Njk1Y1x1Njk3OFx1Njk2Ylx1Njk1NFx1Njk3ZVx1Njk2ZVx1NjkzOVx1Njk3NFx1NjkzZFx1Njk1OVx1NjkzMFx1Njk2MVx1Njk1ZVx1Njk1ZFx1Njk4MVx1Njk2YVx1NjliMlx1NjlhZVx1NjlkMFx1NjliZlx1NjljMVx1NjlkM1x1NjliZVx1NjljZVx1NWJlOFx1NjljYVx1NjlkZFx1''@;'; put 'put ''NjliYlx1NjljM1x1NjlhN1x1NmEyZVx1Njk5MVx1NjlhMFx1Njk5Y1x1Njk5NVx1NjliNFx1NjlkZVx1NjllOFx1NmEwMlx1NmExYlx1NjlmZlx1NmIwYVx1NjlmOVx1NjlmMlx1NjllN1x1NmEwNVx1NjliMVx1NmExZVx1NjllZFx1NmExNFx1NjllYlx1NmEwYVx1NmExMlx1NmFjMVx1NmEy''@;'; put 'put ''M1x1NmExM1x1NmE0NFx1NmEwY1x1NmE3Mlx1NmEzNlx1NmE3OFx1NmE0N1x1NmE2Mlx1NmE1OVx1NmE2Nlx1NmE0OFx1NmEzOFx1NmEyMlx1NmE5MFx1NmE4ZFx1NmFhMFx1NmE4NFx1NmFhMlx1NmFhMyJdLFsiZGRhMSIsIlx1NmE5N1x1ODYxN1x1NmFiYlx1NmFjM1x1NmFjMlx1NmFiOFx1''@;'; put 'put ''NmFiM1x1NmFhY1x1NmFkZVx1NmFkMVx1NmFkZlx1NmFhYVx1NmFkYVx1NmFlYVx1NmFmYlx1NmIwNVx1ODYxNlx1NmFmYVx1NmIxMlx1NmIxNlx1OWIzMVx1NmIxZlx1NmIzOFx1NmIzN1x1NzZkY1x1NmIzOVx1OThlZVx1NmI0N1x1NmI0M1x1NmI0OVx1NmI1MFx1NmI1OVx1NmI1NFx1NmI1''@;'; put 'put ''Ylx1NmI1Zlx1NmI2MVx1NmI3OFx1NmI3OVx1NmI3Zlx1NmI4MFx1NmI4NFx1NmI4M1x1NmI4ZFx1NmI5OFx1NmI5NVx1NmI5ZVx1NmJhNFx1NmJhYVx1NmJhYlx1NmJhZlx1NmJiMlx1NmJiMVx1NmJiM1x1NmJiN1x1NmJiY1x1NmJjNlx1NmJjYlx1NmJkM1x1NmJkZlx1NmJlY1x1NmJlYlx1''@;'; put 'put ''NmJmM1x1NmJlZlx1OWViZVx1NmMwOFx1NmMxM1x1NmMxNFx1NmMxYlx1NmMyNFx1NmMyM1x1NmM1ZVx1NmM1NVx1NmM2Mlx1NmM2YVx1NmM4Mlx1NmM4ZFx1NmM5YVx1NmM4MVx1NmM5Ylx1NmM3ZVx1NmM2OFx1NmM3M1x1NmM5Mlx1NmM5MFx1NmNjNFx1NmNmMVx1NmNkM1x1NmNiZFx1NmNk''@;'; put 'put ''N1x1NmNjNVx1NmNkZFx1NmNhZVx1NmNiMVx1NmNiZSJdLFsiZGVhMSIsIlx1NmNiYVx1NmNkYlx1NmNlZlx1NmNkOVx1NmNlYVx1NmQxZlx1ODg0ZFx1NmQzNlx1NmQyYlx1NmQzZFx1NmQzOFx1NmQxOVx1NmQzNVx1NmQzM1x1NmQxMlx1NmQwY1x1NmQ2M1x1NmQ5M1x1NmQ2NFx1NmQ1YVx1''@;'; put 'put ''NmQ3OVx1NmQ1OVx1NmQ4ZVx1NmQ5NVx1NmZlNFx1NmQ4NVx1NmRmOVx1NmUxNVx1NmUwYVx1NmRiNVx1NmRjN1x1NmRlNlx1NmRiOFx1NmRjNlx1NmRlY1x1NmRkZVx1NmRjY1x1NmRlOFx1NmRkMlx1NmRjNVx1NmRmYVx1NmRkOVx1NmRlNFx1NmRkNVx1NmRlYVx1NmRlZVx1NmUyZFx1NmU2''@;'; put 'put ''ZVx1NmUyZVx1NmUxOVx1NmU3Mlx1NmU1Zlx1NmUzZVx1NmUyM1x1NmU2Ylx1NmUyYlx1NmU3Nlx1NmU0ZFx1NmUxZlx1NmU0M1x1NmUzYVx1NmU0ZVx1NmUyNFx1NmVmZlx1NmUxZFx1NmUzOFx1NmU4Mlx1NmVhYVx1NmU5OFx1NmVjOVx1NmViN1x1NmVkM1x1NmViZFx1NmVhZlx1NmVjNFx1''@;'; put 'put ''NmViMlx1NmVkNFx1NmVkNVx1NmU4Zlx1NmVhNVx1NmVjMlx1NmU5Zlx1NmY0MVx1NmYxMVx1NzA0Y1x1NmVlY1x1NmVmOFx1NmVmZVx1NmYzZlx1NmVmMlx1NmYzMVx1NmVlZlx1NmYzMlx1NmVjYyJdLFsiZGZhMSIsIlx1NmYzZVx1NmYxM1x1NmVmN1x1NmY4Nlx1NmY3YVx1NmY3OFx1NmY4''@;'; put 'put ''MVx1NmY4MFx1NmY2Zlx1NmY1Ylx1NmZmM1x1NmY2ZFx1NmY4Mlx1NmY3Y1x1NmY1OFx1NmY4ZVx1NmY5MVx1NmZjMlx1NmY2Nlx1NmZiM1x1NmZhM1x1NmZhMVx1NmZhNFx1NmZiOVx1NmZjNlx1NmZhYVx1NmZkZlx1NmZkNVx1NmZlY1x1NmZkNFx1NmZkOFx1NmZmMVx1NmZlZVx1NmZkYlx1''@;'; put 'put ''NzAwOVx1NzAwYlx1NmZmYVx1NzAxMVx1NzAwMVx1NzAwZlx1NmZmZVx1NzAxYlx1NzAxYVx1NmY3NFx1NzAxZFx1NzAxOFx1NzAxZlx1NzAzMFx1NzAzZVx1NzAzMlx1NzA1MVx1NzA2M1x1NzA5OVx1NzA5Mlx1NzBhZlx1NzBmMVx1NzBhY1x1NzBiOFx1NzBiM1x1NzBhZVx1NzBkZlx1NzBj''@;'; put 'put ''Ylx1NzBkZFx1NzBkOVx1NzEwOVx1NzBmZFx1NzExY1x1NzExOVx1NzE2NVx1NzE1NVx1NzE4OFx1NzE2Nlx1NzE2Mlx1NzE0Y1x1NzE1Nlx1NzE2Y1x1NzE4Zlx1NzFmYlx1NzE4NFx1NzE5NVx1NzFhOFx1NzFhY1x1NzFkN1x1NzFiOVx1NzFiZVx1NzFkMlx1NzFjOVx1NzFkNFx1NzFjZVx1''@;'; put 'put ''NzFlMFx1NzFlY1x1NzFlN1x1NzFmNVx1NzFmYyJdLFsiZTBhMSIsIlx1NzFmOVx1NzFmZlx1NzIwZFx1NzIxMFx1NzIxYlx1NzIyOFx1NzIyZFx1NzIyY1x1NzIzMFx1NzIzMlx1NzIzYlx1NzIzY1x1NzIzZlx1NzI0MFx1NzI0Nlx1NzI0Ylx1NzI1OFx1NzI3NFx1NzI3ZVx1NzI4Mlx1NzI4''@;'; put 'put ''MVx1NzI4N1x1NzI5Mlx1NzI5Nlx1NzJhMlx1NzJhN1x1NzJiOVx1NzJiMlx1NzJjM1x1NzJjNlx1NzJjNFx1NzJjZVx1NzJkMlx1NzJlMlx1NzJlMFx1NzJlMVx1NzJmOVx1NzJmN1x1NTAwZlx1NzMxN1x1NzMwYVx1NzMxY1x1NzMxNlx1NzMxZFx1NzMzNFx1NzMyZlx1NzMyOVx1NzMyNVx1''@;'; put 'put ''NzMzZVx1NzM0ZVx1NzM0Zlx1OWVkOFx1NzM1N1x1NzM2YVx1NzM2OFx1NzM3MFx1NzM3OFx1NzM3NVx1NzM3Ylx1NzM3YVx1NzNjOFx1NzNiM1x1NzNjZVx1NzNiYlx1NzNjMFx1NzNlNVx1NzNlZVx1NzNkZVx1NzRhMlx1NzQwNVx1NzQ2Zlx1NzQyNVx1NzNmOFx1NzQzMlx1NzQzYVx1NzQ1''@;'; put 'put ''NVx1NzQzZlx1NzQ1Zlx1NzQ1OVx1NzQ0MVx1NzQ1Y1x1NzQ2OVx1NzQ3MFx1NzQ2M1x1NzQ2YVx1NzQ3Nlx1NzQ3ZVx1NzQ4Ylx1NzQ5ZVx1NzRhN1x1NzRjYVx1NzRjZlx1NzRkNFx1NzNmMSJdLFsiZTFhMSIsIlx1NzRlMFx1NzRlM1x1NzRlN1x1NzRlOVx1NzRlZVx1NzRmMlx1NzRmMFx1''@;'; put 'put ''NzRmMVx1NzRmOFx1NzRmN1x1NzUwNFx1NzUwM1x1NzUwNVx1NzUwY1x1NzUwZVx1NzUwZFx1NzUxNVx1NzUxM1x1NzUxZVx1NzUyNlx1NzUyY1x1NzUzY1x1NzU0NFx1NzU0ZFx1NzU0YVx1NzU0OVx1NzU1Ylx1NzU0Nlx1NzU1YVx1NzU2OVx1NzU2NFx1NzU2N1x1NzU2Ylx1NzU2ZFx1NzU3''@;'; put 'put ''OFx1NzU3Nlx1NzU4Nlx1NzU4N1x1NzU3NFx1NzU4YVx1NzU4OVx1NzU4Mlx1NzU5NFx1NzU5YVx1NzU5ZFx1NzVhNVx1NzVhM1x1NzVjMlx1NzViM1x1NzVjM1x1NzViNVx1NzViZFx1NzViOFx1NzViY1x1NzViMVx1NzVjZFx1NzVjYVx1NzVkMlx1NzVkOVx1NzVlM1x1NzVkZVx1NzVmZVx1''@;'; put 'put ''NzVmZlx1NzVmY1x1NzYwMVx1NzVmMFx1NzVmYVx1NzVmMlx1NzVmM1x1NzYwYlx1NzYwZFx1NzYwOVx1NzYxZlx1NzYyN1x1NzYyMFx1NzYyMVx1NzYyMlx1NzYyNFx1NzYzNFx1NzYzMFx1NzYzYlx1NzY0N1x1NzY0OFx1NzY0Nlx1NzY1Y1x1NzY1OFx1NzY2MVx1NzY2Mlx1NzY2OFx1NzY2''@;'; put 'put ''OVx1NzY2YVx1NzY2N1x1NzY2Y1x1NzY3MCJdLFsiZTJhMSIsIlx1NzY3Mlx1NzY3Nlx1NzY3OFx1NzY3Y1x1NzY4MFx1NzY4M1x1NzY4OFx1NzY4Ylx1NzY4ZVx1NzY5Nlx1NzY5M1x1NzY5OVx1NzY5YVx1NzZiMFx1NzZiNFx1NzZiOFx1NzZiOVx1NzZiYVx1NzZjMlx1NzZjZFx1NzZkNlx1''@;'; put 'put ''NzZkMlx1NzZkZVx1NzZlMVx1NzZlNVx1NzZlN1x1NzZlYVx1ODYyZlx1NzZmYlx1NzcwOFx1NzcwN1x1NzcwNFx1NzcyOVx1NzcyNFx1NzcxZVx1NzcyNVx1NzcyNlx1NzcxYlx1NzczN1x1NzczOFx1Nzc0N1x1Nzc1YVx1Nzc2OFx1Nzc2Ylx1Nzc1Ylx1Nzc2NVx1Nzc3Zlx1Nzc3ZVx1Nzc3''@;'; put 'put ''OVx1Nzc4ZVx1Nzc4Ylx1Nzc5MVx1NzdhMFx1Nzc5ZVx1NzdiMFx1NzdiNlx1NzdiOVx1NzdiZlx1NzdiY1x1NzdiZFx1NzdiYlx1NzdjN1x1NzdjZFx1NzdkN1x1NzdkYVx1NzdkY1x1NzdlM1x1NzdlZVx1NzdmY1x1NzgwY1x1NzgxMlx1NzkyNlx1NzgyMFx1NzkyYVx1Nzg0NVx1Nzg4ZVx1''@;'; put 'put ''Nzg3NFx1Nzg4Nlx1Nzg3Y1x1Nzg5YVx1Nzg4Y1x1NzhhM1x1NzhiNVx1NzhhYVx1NzhhZlx1NzhkMVx1NzhjNlx1NzhjYlx1NzhkNFx1NzhiZVx1NzhiY1x1NzhjNVx1NzhjYVx1NzhlYyJdLFsiZTNhMSIsIlx1NzhlN1x1NzhkYVx1NzhmZFx1NzhmNFx1NzkwN1x1NzkxMlx1NzkxMVx1Nzkx''@;'; put 'put ''OVx1NzkyY1x1NzkyYlx1Nzk0MFx1Nzk2MFx1Nzk1N1x1Nzk1Zlx1Nzk1YVx1Nzk1NVx1Nzk1M1x1Nzk3YVx1Nzk3Zlx1Nzk4YVx1Nzk5ZFx1NzlhN1x1OWY0Ylx1NzlhYVx1NzlhZVx1NzliM1x1NzliOVx1NzliYVx1NzljOVx1NzlkNVx1NzllN1x1NzllY1x1NzllMVx1NzllM1x1N2EwOFx1''@;'; put 'put ''N2EwZFx1N2ExOFx1N2ExOVx1N2EyMFx1N2ExZlx1Nzk4MFx1N2EzMVx1N2EzYlx1N2EzZVx1N2EzN1x1N2E0M1x1N2E1N1x1N2E0OVx1N2E2MVx1N2E2Mlx1N2E2OVx1OWY5ZFx1N2E3MFx1N2E3OVx1N2E3ZFx1N2E4OFx1N2E5N1x1N2E5NVx1N2E5OFx1N2E5Nlx1N2FhOVx1N2FjOFx1N2Fi''@;'; put 'put ''MFx1N2FiNlx1N2FjNVx1N2FjNFx1N2FiZlx1OTA4M1x1N2FjN1x1N2FjYVx1N2FjZFx1N2FjZlx1N2FkNVx1N2FkM1x1N2FkOVx1N2FkYVx1N2FkZFx1N2FlMVx1N2FlMlx1N2FlNlx1N2FlZFx1N2FmMFx1N2IwMlx1N2IwZlx1N2IwYVx1N2IwNlx1N2IzM1x1N2IxOFx1N2IxOVx1N2IxZVx1''@;'; put 'put ''N2IzNVx1N2IyOFx1N2IzNlx1N2I1MCJdLFsiZTRhMSIsIlx1N2I3YVx1N2IwNFx1N2I0ZFx1N2IwYlx1N2I0Y1x1N2I0NVx1N2I3NVx1N2I2NVx1N2I3NFx1N2I2N1x1N2I3MFx1N2I3MVx1N2I2Y1x1N2I2ZVx1N2I5ZFx1N2I5OFx1N2I5Zlx1N2I4ZFx1N2I5Y1x1N2I5YVx1N2I4Ylx1N2I5''@;'; put 'put ''Mlx1N2I4Zlx1N2I1ZFx1N2I5OVx1N2JjYlx1N2JjMVx1N2JjY1x1N2JjZlx1N2JiNFx1N2JjNlx1N2JkZFx1N2JlOVx1N2MxMVx1N2MxNFx1N2JlNlx1N2JlNVx1N2M2MFx1N2MwMFx1N2MwN1x1N2MxM1x1N2JmM1x1N2JmN1x1N2MxN1x1N2MwZFx1N2JmNlx1N2MyM1x1N2MyN1x1N2MyYVx1''@;'; put 'put ''N2MxZlx1N2MzN1x1N2MyYlx1N2MzZFx1N2M0Y1x1N2M0M1x1N2M1NFx1N2M0Zlx1N2M0MFx1N2M1MFx1N2M1OFx1N2M1Zlx1N2M2NFx1N2M1Nlx1N2M2NVx1N2M2Y1x1N2M3NVx1N2M4M1x1N2M5MFx1N2NhNFx1N2NhZFx1N2NhMlx1N2NhYlx1N2NhMVx1N2NhOFx1N2NiM1x1N2NiMlx1N2Ni''@;'; put 'put ''MVx1N2NhZVx1N2NiOVx1N2NiZFx1N2NjMFx1N2NjNVx1N2NjMlx1N2NkOFx1N2NkMlx1N2NkY1x1N2NlMlx1OWIzYlx1N2NlZlx1N2NmMlx1N2NmNFx1N2NmNlx1N2NmYVx1N2QwNiJdLFsiZTVhMSIsIlx1N2QwMlx1N2QxY1x1N2QxNVx1N2QwYVx1N2Q0NVx1N2Q0Ylx1N2QyZVx1N2QzMlx1''@;'; put 'put ''N2QzZlx1N2QzNVx1N2Q0Nlx1N2Q3M1x1N2Q1Nlx1N2Q0ZVx1N2Q3Mlx1N2Q2OFx1N2Q2ZVx1N2Q0Zlx1N2Q2M1x1N2Q5M1x1N2Q4OVx1N2Q1Ylx1N2Q4Zlx1N2Q3ZFx1N2Q5Ylx1N2RiYVx1N2RhZVx1N2RhM1x1N2RiNVx1N2RjN1x1N2RiZFx1N2RhYlx1N2UzZFx1N2RhMlx1N2RhZlx1N2Rk''@;'; put 'put ''Y1x1N2RiOFx1N2Q5Zlx1N2RiMFx1N2RkOFx1N2RkZFx1N2RlNFx1N2RkZVx1N2RmYlx1N2RmMlx1N2RlMVx1N2UwNVx1N2UwYVx1N2UyM1x1N2UyMVx1N2UxMlx1N2UzMVx1N2UxZlx1N2UwOVx1N2UwYlx1N2UyMlx1N2U0Nlx1N2U2Nlx1N2UzYlx1N2UzNVx1N2UzOVx1N2U0M1x1N2UzN1x1''@;'; put 'put ''N2UzMlx1N2UzYVx1N2U2N1x1N2U1ZFx1N2U1Nlx1N2U1ZVx1N2U1OVx1N2U1YVx1N2U3OVx1N2U2YVx1N2U2OVx1N2U3Y1x1N2U3Ylx1N2U4M1x1N2RkNVx1N2U3ZFx1OGZhZVx1N2U3Zlx1N2U4OFx1N2U4OVx1N2U4Y1x1N2U5Mlx1N2U5MFx1N2U5M1x1N2U5NFx1N2U5Nlx1N2U4ZVx1N2U5''@;'; put 'put ''Ylx1N2U5Y1x1N2YzOFx1N2YzYSJdLFsiZTZhMSIsIlx1N2Y0NVx1N2Y0Y1x1N2Y0ZFx1N2Y0ZVx1N2Y1MFx1N2Y1MVx1N2Y1NVx1N2Y1NFx1N2Y1OFx1N2Y1Zlx1N2Y2MFx1N2Y2OFx1N2Y2OVx1N2Y2N1x1N2Y3OFx1N2Y4Mlx1N2Y4Nlx1N2Y4M1x1N2Y4OFx1N2Y4N1x1N2Y4Y1x1N2Y5NFx1''@;'; put 'put ''N2Y5ZVx1N2Y5ZFx1N2Y5YVx1N2ZhM1x1N2ZhZlx1N2ZiMlx1N2ZiOVx1N2ZhZVx1N2ZiNlx1N2ZiOFx1OGI3MVx1N2ZjNVx1N2ZjNlx1N2ZjYVx1N2ZkNVx1N2ZkNFx1N2ZlMVx1N2ZlNlx1N2ZlOVx1N2ZmM1x1N2ZmOVx1OThkY1x1ODAwNlx1ODAwNFx1ODAwYlx1ODAxMlx1ODAxOFx1ODAx''@;'; put 'put ''OVx1ODAxY1x1ODAyMVx1ODAyOFx1ODAzZlx1ODAzYlx1ODA0YVx1ODA0Nlx1ODA1Mlx1ODA1OFx1ODA1YVx1ODA1Zlx1ODA2Mlx1ODA2OFx1ODA3M1x1ODA3Mlx1ODA3MFx1ODA3Nlx1ODA3OVx1ODA3ZFx1ODA3Zlx1ODA4NFx1ODA4Nlx1ODA4NVx1ODA5Ylx1ODA5M1x1ODA5YVx1ODBhZFx1''@;'; put 'put ''NTE5MFx1ODBhY1x1ODBkYlx1ODBlNVx1ODBkOVx1ODBkZFx1ODBjNFx1ODBkYVx1ODBkNlx1ODEwOVx1ODBlZlx1ODBmMVx1ODExYlx1ODEyOVx1ODEyM1x1ODEyZlx1ODE0YiJdLFsiZTdhMSIsIlx1OTY4Ylx1ODE0Nlx1ODEzZVx1ODE1M1x1ODE1MVx1ODBmY1x1ODE3MVx1ODE2ZVx1ODE2''@;'; put 'put ''NVx1ODE2Nlx1ODE3NFx1ODE4M1x1ODE4OFx1ODE4YVx1ODE4MFx1ODE4Mlx1ODFhMFx1ODE5NVx1ODFhNFx1ODFhM1x1ODE1Zlx1ODE5M1x1ODFhOVx1ODFiMFx1ODFiNVx1ODFiZVx1ODFiOFx1ODFiZFx1ODFjMFx1ODFjMlx1ODFiYVx1ODFjOVx1ODFjZFx1ODFkMVx1ODFkOVx1ODFkOFx1''@;'; put 'put ''ODFjOFx1ODFkYVx1ODFkZlx1ODFlMFx1ODFlN1x1ODFmYVx1ODFmYlx1ODFmZVx1ODIwMVx1ODIwMlx1ODIwNVx1ODIwN1x1ODIwYVx1ODIwZFx1ODIxMFx1ODIxNlx1ODIyOVx1ODIyYlx1ODIzOFx1ODIzM1x1ODI0MFx1ODI1OVx1ODI1OFx1ODI1ZFx1ODI1YVx1ODI1Zlx1ODI2NFx1ODI2''@;'; put 'put ''Mlx1ODI2OFx1ODI2YVx1ODI2Ylx1ODIyZVx1ODI3MVx1ODI3N1x1ODI3OFx1ODI3ZVx1ODI4ZFx1ODI5Mlx1ODJhYlx1ODI5Zlx1ODJiYlx1ODJhY1x1ODJlMVx1ODJlM1x1ODJkZlx1ODJkMlx1ODJmNFx1ODJmM1x1ODJmYVx1ODM5M1x1ODMwM1x1ODJmYlx1ODJmOVx1ODJkZVx1ODMwNlx1''@;'; put 'put ''ODJkY1x1ODMwOVx1ODJkOSJdLFsiZThhMSIsIlx1ODMzNVx1ODMzNFx1ODMxNlx1ODMzMlx1ODMzMVx1ODM0MFx1ODMzOVx1ODM1MFx1ODM0NVx1ODMyZlx1ODMyYlx1ODMxN1x1ODMxOFx1ODM4NVx1ODM5YVx1ODNhYVx1ODM5Zlx1ODNhMlx1ODM5Nlx1ODMyM1x1ODM4ZVx1ODM4N1x1ODM4''@;'; put 'put ''YVx1ODM3Y1x1ODNiNVx1ODM3M1x1ODM3NVx1ODNhMFx1ODM4OVx1ODNhOFx1ODNmNFx1ODQxM1x1ODNlYlx1ODNjZVx1ODNmZFx1ODQwM1x1ODNkOFx1ODQwYlx1ODNjMVx1ODNmN1x1ODQwN1x1ODNlMFx1ODNmMlx1ODQwZFx1ODQyMlx1ODQyMFx1ODNiZFx1ODQzOFx1ODUwNlx1ODNmYlx1''@;'; put 'put ''ODQ2ZFx1ODQyYVx1ODQzY1x1ODU1YVx1ODQ4NFx1ODQ3N1x1ODQ2Ylx1ODRhZFx1ODQ2ZVx1ODQ4Mlx1ODQ2OVx1ODQ0Nlx1ODQyY1x1ODQ2Zlx1ODQ3OVx1ODQzNVx1ODRjYVx1ODQ2Mlx1ODRiOVx1ODRiZlx1ODQ5Zlx1ODRkOVx1ODRjZFx1ODRiYlx1ODRkYVx1ODRkMFx1ODRjMVx1ODRj''@;'; put 'put ''Nlx1ODRkNlx1ODRhMVx1ODUyMVx1ODRmZlx1ODRmNFx1ODUxN1x1ODUxOFx1ODUyY1x1ODUxZlx1ODUxNVx1ODUxNFx1ODRmY1x1ODU0MFx1ODU2M1x1ODU1OFx1ODU0OCJdLFsiZTlhMSIsIlx1ODU0MVx1ODYwMlx1ODU0Ylx1ODU1NVx1ODU4MFx1ODVhNFx1ODU4OFx1ODU5MVx1ODU4YVx1''@;'; put 'put ''ODVhOFx1ODU2ZFx1ODU5NFx1ODU5Ylx1ODVlYVx1ODU4N1x1ODU5Y1x1ODU3N1x1ODU3ZVx1ODU5MFx1ODVjOVx1ODViYVx1ODVjZlx1ODViOVx1ODVkMFx1ODVkNVx1ODVkZFx1ODVlNVx1ODVkY1x1ODVmOVx1ODYwYVx1ODYxM1x1ODYwYlx1ODVmZVx1ODVmYVx1ODYwNlx1ODYyMlx1ODYx''@;'; put 'put ''YVx1ODYzMFx1ODYzZlx1ODY0ZFx1NGU1NVx1ODY1NFx1ODY1Zlx1ODY2N1x1ODY3MVx1ODY5M1x1ODZhM1x1ODZhOVx1ODZhYVx1ODY4Ylx1ODY4Y1x1ODZiNlx1ODZhZlx1ODZjNFx1ODZjNlx1ODZiMFx1ODZjOVx1ODgyM1x1ODZhYlx1ODZkNFx1ODZkZVx1ODZlOVx1ODZlY1x1ODZkZlx1''@;'; put 'put ''ODZkYlx1ODZlZlx1ODcxMlx1ODcwNlx1ODcwOFx1ODcwMFx1ODcwM1x1ODZmYlx1ODcxMVx1ODcwOVx1ODcwZFx1ODZmOVx1ODcwYVx1ODczNFx1ODczZlx1ODczN1x1ODczYlx1ODcyNVx1ODcyOVx1ODcxYVx1ODc2MFx1ODc1Zlx1ODc3OFx1ODc0Y1x1ODc0ZVx1ODc3NFx1ODc1N1x1ODc2''@;'; put 'put ''OFx1ODc2ZVx1ODc1OSJdLFsiZWFhMSIsIlx1ODc1M1x1ODc2M1x1ODc2YVx1ODgwNVx1ODdhMlx1ODc5Zlx1ODc4Mlx1ODdhZlx1ODdjYlx1ODdiZFx1ODdjMFx1ODdkMFx1OTZkNlx1ODdhYlx1ODdjNFx1ODdiM1x1ODdjN1x1ODdjNlx1ODdiYlx1ODdlZlx1ODdmMlx1ODdlMFx1ODgwZlx1''@;'; put 'put ''ODgwZFx1ODdmZVx1ODdmNlx1ODdmN1x1ODgwZVx1ODdkMlx1ODgxMVx1ODgxNlx1ODgxNVx1ODgyMlx1ODgyMVx1ODgzMVx1ODgzNlx1ODgzOVx1ODgyN1x1ODgzYlx1ODg0NFx1ODg0Mlx1ODg1Mlx1ODg1OVx1ODg1ZVx1ODg2Mlx1ODg2Ylx1ODg4MVx1ODg3ZVx1ODg5ZVx1ODg3NVx1ODg3''@;'; put 'put ''ZFx1ODhiNVx1ODg3Mlx1ODg4Mlx1ODg5N1x1ODg5Mlx1ODhhZVx1ODg5OVx1ODhhMlx1ODg4ZFx1ODhhNFx1ODhiMFx1ODhiZlx1ODhiMVx1ODhjM1x1ODhjNFx1ODhkNFx1ODhkOFx1ODhkOVx1ODhkZFx1ODhmOVx1ODkwMlx1ODhmY1x1ODhmNFx1ODhlOFx1ODhmMlx1ODkwNFx1ODkwY1x1''@;'; put 'put ''ODkwYVx1ODkxM1x1ODk0M1x1ODkxZVx1ODkyNVx1ODkyYVx1ODkyYlx1ODk0MVx1ODk0NFx1ODkzYlx1ODkzNlx1ODkzOFx1ODk0Y1x1ODkxZFx1ODk2MFx1ODk1ZSJdLFsiZWJhMSIsIlx1ODk2Nlx1ODk2NFx1ODk2ZFx1ODk2YVx1ODk2Zlx1ODk3NFx1ODk3N1x1ODk3ZVx1ODk4M1x1ODk4''@;'; put 'put ''OFx1ODk4YVx1ODk5M1x1ODk5OFx1ODlhMVx1ODlhOVx1ODlhNlx1ODlhY1x1ODlhZlx1ODliMlx1ODliYVx1ODliZFx1ODliZlx1ODljMFx1ODlkYVx1ODlkY1x1ODlkZFx1ODllN1x1ODlmNFx1ODlmOFx1OGEwM1x1OGExNlx1OGExMFx1OGEwY1x1OGExYlx1OGExZFx1OGEyNVx1OGEzNlx1''@;'; put 'put ''OGE0MVx1OGE1Ylx1OGE1Mlx1OGE0Nlx1OGE0OFx1OGE3Y1x1OGE2ZFx1OGE2Y1x1OGE2Mlx1OGE4NVx1OGE4Mlx1OGE4NFx1OGFhOFx1OGFhMVx1OGE5MVx1OGFhNVx1OGFhNlx1OGE5YVx1OGFhM1x1OGFjNFx1OGFjZFx1OGFjMlx1OGFkYVx1OGFlYlx1OGFmM1x1OGFlN1x1OGFlNFx1OGFm''@;'; put 'put ''MVx1OGIxNFx1OGFlMFx1OGFlMlx1OGFmN1x1OGFkZVx1OGFkYlx1OGIwY1x1OGIwN1x1OGIxYVx1OGFlMVx1OGIxNlx1OGIxMFx1OGIxN1x1OGIyMFx1OGIzM1x1OTdhYlx1OGIyNlx1OGIyYlx1OGIzZVx1OGIyOFx1OGI0MVx1OGI0Y1x1OGI0Zlx1OGI0ZVx1OGI0OVx1OGI1Nlx1OGI1Ylx1''@;'; put 'put ''OGI1YVx1OGI2YiJdLFsiZWNhMSIsIlx1OGI1Zlx1OGI2Y1x1OGI2Zlx1OGI3NFx1OGI3ZFx1OGI4MFx1OGI4Y1x1OGI4ZVx1OGI5Mlx1OGI5M1x1OGI5Nlx1OGI5OVx1OGI5YVx1OGMzYVx1OGM0MVx1OGMzZlx1OGM0OFx1OGM0Y1x1OGM0ZVx1OGM1MFx1OGM1NVx1OGM2Mlx1OGM2Y1x1OGM3''@;'; put 'put ''OFx1OGM3YVx1OGM4Mlx1OGM4OVx1OGM4NVx1OGM4YVx1OGM4ZFx1OGM4ZVx1OGM5NFx1OGM3Y1x1OGM5OFx1NjIxZFx1OGNhZFx1OGNhYVx1OGNiZFx1OGNiMlx1OGNiM1x1OGNhZVx1OGNiNlx1OGNjOFx1OGNjMVx1OGNlNFx1OGNlM1x1OGNkYVx1OGNmZFx1OGNmYVx1OGNmYlx1OGQwNFx1''@;'; put 'put ''OGQwNVx1OGQwYVx1OGQwN1x1OGQwZlx1OGQwZFx1OGQxMFx1OWY0ZVx1OGQxM1x1OGNjZFx1OGQxNFx1OGQxNlx1OGQ2N1x1OGQ2ZFx1OGQ3MVx1OGQ3M1x1OGQ4MVx1OGQ5OVx1OGRjMlx1OGRiZVx1OGRiYVx1OGRjZlx1OGRkYVx1OGRkNlx1OGRjY1x1OGRkYlx1OGRjYlx1OGRlYVx1OGRl''@;'; put 'put ''Ylx1OGRkZlx1OGRlM1x1OGRmY1x1OGUwOFx1OGUwOVx1OGRmZlx1OGUxZFx1OGUxZVx1OGUxMFx1OGUxZlx1OGU0Mlx1OGUzNVx1OGUzMFx1OGUzNFx1OGU0YSJdLFsiZWRhMSIsIlx1OGU0N1x1OGU0OVx1OGU0Y1x1OGU1MFx1OGU0OFx1OGU1OVx1OGU2NFx1OGU2MFx1OGUyYVx1OGU2M1x1''@;'; put 'put ''OGU1NVx1OGU3Nlx1OGU3Mlx1OGU3Y1x1OGU4MVx1OGU4N1x1OGU4NVx1OGU4NFx1OGU4Ylx1OGU4YVx1OGU5M1x1OGU5MVx1OGU5NFx1OGU5OVx1OGVhYVx1OGVhMVx1OGVhY1x1OGViMFx1OGVjNlx1OGViMVx1OGViZVx1OGVjNVx1OGVjOFx1OGVjYlx1OGVkYlx1OGVlM1x1OGVmY1x1OGVm''@;'; put 'put ''Ylx1OGVlYlx1OGVmZVx1OGYwYVx1OGYwNVx1OGYxNVx1OGYxMlx1OGYxOVx1OGYxM1x1OGYxY1x1OGYxZlx1OGYxYlx1OGYwY1x1OGYyNlx1OGYzM1x1OGYzYlx1OGYzOVx1OGY0NVx1OGY0Mlx1OGYzZVx1OGY0Y1x1OGY0OVx1OGY0Nlx1OGY0ZVx1OGY1N1x1OGY1Y1x1OGY2Mlx1OGY2M1x1''@;'; put 'put ''OGY2NFx1OGY5Y1x1OGY5Zlx1OGZhM1x1OGZhZFx1OGZhZlx1OGZiN1x1OGZkYVx1OGZlNVx1OGZlMlx1OGZlYVx1OGZlZlx1OTA4N1x1OGZmNFx1OTAwNVx1OGZmOVx1OGZmYVx1OTAxMVx1OTAxNVx1OTAyMVx1OTAwZFx1OTAxZVx1OTAxNlx1OTAwYlx1OTAyN1x1OTAzNlx1OTAzNVx1OTAz''@;'; put 'put ''OVx1OGZmOCJdLFsiZWVhMSIsIlx1OTA0Zlx1OTA1MFx1OTA1MVx1OTA1Mlx1OTAwZVx1OTA0OVx1OTAzZVx1OTA1Nlx1OTA1OFx1OTA1ZVx1OTA2OFx1OTA2Zlx1OTA3Nlx1OTZhOFx1OTA3Mlx1OTA4Mlx1OTA3ZFx1OTA4MVx1OTA4MFx1OTA4YVx1OTA4OVx1OTA4Zlx1OTBhOFx1OTBhZlx1''@;'; put 'put ''OTBiMVx1OTBiNVx1OTBlMlx1OTBlNFx1NjI0OFx1OTBkYlx1OTEwMlx1OTExMlx1OTExOVx1OTEzMlx1OTEzMFx1OTE0YVx1OTE1Nlx1OTE1OFx1OTE2M1x1OTE2NVx1OTE2OVx1OTE3M1x1OTE3Mlx1OTE4Ylx1OTE4OVx1OTE4Mlx1OTFhMlx1OTFhYlx1OTFhZlx1OTFhYVx1OTFiNVx1OTFi''@;'; put 'put ''NFx1OTFiYVx1OTFjMFx1OTFjMVx1OTFjOVx1OTFjYlx1OTFkMFx1OTFkNlx1OTFkZlx1OTFlMVx1OTFkYlx1OTFmY1x1OTFmNVx1OTFmNlx1OTIxZVx1OTFmZlx1OTIxNFx1OTIyY1x1OTIxNVx1OTIxMVx1OTI1ZVx1OTI1N1x1OTI0NVx1OTI0OVx1OTI2NFx1OTI0OFx1OTI5NVx1OTIzZlx1''@;'; put 'put ''OTI0Ylx1OTI1MFx1OTI5Y1x1OTI5Nlx1OTI5M1x1OTI5Ylx1OTI1YVx1OTJjZlx1OTJiOVx1OTJiN1x1OTJlOVx1OTMwZlx1OTJmYVx1OTM0NFx1OTMyZSJdLFsiZWZhMSIsIlx1OTMxOVx1OTMyMlx1OTMxYVx1OTMyM1x1OTMzYVx1OTMzNVx1OTMzYlx1OTM1Y1x1OTM2MFx1OTM3Y1x1OTM2''@;'; put 'put ''ZVx1OTM1Nlx1OTNiMFx1OTNhY1x1OTNhZFx1OTM5NFx1OTNiOVx1OTNkNlx1OTNkN1x1OTNlOFx1OTNlNVx1OTNkOFx1OTNjM1x1OTNkZFx1OTNkMFx1OTNjOFx1OTNlNFx1OTQxYVx1OTQxNFx1OTQxM1x1OTQwM1x1OTQwN1x1OTQxMFx1OTQzNlx1OTQyYlx1OTQzNVx1OTQyMVx1OTQzYVx1''@;'; put 'put ''OTQ0MVx1OTQ1Mlx1OTQ0NFx1OTQ1Ylx1OTQ2MFx1OTQ2Mlx1OTQ1ZVx1OTQ2YVx1OTIyOVx1OTQ3MFx1OTQ3NVx1OTQ3N1x1OTQ3ZFx1OTQ1YVx1OTQ3Y1x1OTQ3ZVx1OTQ4MVx1OTQ3Zlx1OTU4Mlx1OTU4N1x1OTU4YVx1OTU5NFx1OTU5Nlx1OTU5OFx1OTU5OVx1OTVhMFx1OTVhOFx1OTVh''@;'; put 'put ''N1x1OTVhZFx1OTViY1x1OTViYlx1OTViOVx1OTViZVx1OTVjYVx1NmZmNlx1OTVjM1x1OTVjZFx1OTVjY1x1OTVkNVx1OTVkNFx1OTVkNlx1OTVkY1x1OTVlMVx1OTVlNVx1OTVlMlx1OTYyMVx1OTYyOFx1OTYyZVx1OTYyZlx1OTY0Mlx1OTY0Y1x1OTY0Zlx1OTY0Ylx1OTY3N1x1OTY1Y1x1''@;'; put 'put ''OTY1ZSJdLFsiZjBhMSIsIlx1OTY1ZFx1OTY1Zlx1OTY2Nlx1OTY3Mlx1OTY2Y1x1OTY4ZFx1OTY5OFx1OTY5NVx1OTY5N1x1OTZhYVx1OTZhN1x1OTZiMVx1OTZiMlx1OTZiMFx1OTZiNFx1OTZiNlx1OTZiOFx1OTZiOVx1OTZjZVx1OTZjYlx1OTZjOVx1OTZjZFx1ODk0ZFx1OTZkY1x1OTcw''@;'; put 'put ''ZFx1OTZkNVx1OTZmOVx1OTcwNFx1OTcwNlx1OTcwOFx1OTcxM1x1OTcwZVx1OTcxMVx1OTcwZlx1OTcxNlx1OTcxOVx1OTcyNFx1OTcyYVx1OTczMFx1OTczOVx1OTczZFx1OTczZVx1OTc0NFx1OTc0Nlx1OTc0OFx1OTc0Mlx1OTc0OVx1OTc1Y1x1OTc2MFx1OTc2NFx1OTc2Nlx1OTc2OFx1''@;'; put 'put ''NTJkMlx1OTc2Ylx1OTc3MVx1OTc3OVx1OTc4NVx1OTc3Y1x1OTc4MVx1OTc3YVx1OTc4Nlx1OTc4Ylx1OTc4Zlx1OTc5MFx1OTc5Y1x1OTdhOFx1OTdhNlx1OTdhM1x1OTdiM1x1OTdiNFx1OTdjM1x1OTdjNlx1OTdjOFx1OTdjYlx1OTdkY1x1OTdlZFx1OWY0Zlx1OTdmMlx1N2FkZlx1OTdm''@;'; put 'put ''Nlx1OTdmNVx1OTgwZlx1OTgwY1x1OTgzOFx1OTgyNFx1OTgyMVx1OTgzN1x1OTgzZFx1OTg0Nlx1OTg0Zlx1OTg0Ylx1OTg2Ylx1OTg2Zlx1OTg3MCJdLFsiZjFhMSIsIlx1OTg3MVx1OTg3NFx1OTg3M1x1OThhYVx1OThhZlx1OThiMVx1OThiNlx1OThjNFx1OThjM1x1OThjNlx1OThlOVx1''@;'; put 'put ''OThlYlx1OTkwM1x1OTkwOVx1OTkxMlx1OTkxNFx1OTkxOFx1OTkyMVx1OTkxZFx1OTkxZVx1OTkyNFx1OTkyMFx1OTkyY1x1OTkyZVx1OTkzZFx1OTkzZVx1OTk0Mlx1OTk0OVx1OTk0NVx1OTk1MFx1OTk0Ylx1OTk1MVx1OTk1Mlx1OTk0Y1x1OTk1NVx1OTk5N1x1OTk5OFx1OTlhNVx1OTlh''@;'; put 'put ''ZFx1OTlhZVx1OTliY1x1OTlkZlx1OTlkYlx1OTlkZFx1OTlkOFx1OTlkMVx1OTllZFx1OTllZVx1OTlmMVx1OTlmMlx1OTlmYlx1OTlmOFx1OWEwMVx1OWEwZlx1OWEwNVx1OTllMlx1OWExOVx1OWEyYlx1OWEzN1x1OWE0NVx1OWE0Mlx1OWE0MFx1OWE0M1x1OWEzZVx1OWE1NVx1OWE0ZFx1''@;'; put 'put ''OWE1Ylx1OWE1N1x1OWE1Zlx1OWE2Mlx1OWE2NVx1OWE2NFx1OWE2OVx1OWE2Ylx1OWE2YVx1OWFhZFx1OWFiMFx1OWFiY1x1OWFjMFx1OWFjZlx1OWFkMVx1OWFkM1x1OWFkNFx1OWFkZVx1OWFkZlx1OWFlMlx1OWFlM1x1OWFlNlx1OWFlZlx1OWFlYlx1OWFlZVx1OWFmNFx1OWFmMVx1OWFm''@;'; put 'put ''NyJdLFsiZjJhMSIsIlx1OWFmYlx1OWIwNlx1OWIxOFx1OWIxYVx1OWIxZlx1OWIyMlx1OWIyM1x1OWIyNVx1OWIyN1x1OWIyOFx1OWIyOVx1OWIyYVx1OWIyZVx1OWIyZlx1OWIzMlx1OWI0NFx1OWI0M1x1OWI0Zlx1OWI0ZFx1OWI0ZVx1OWI1MVx1OWI1OFx1OWI3NFx1OWI5M1x1OWI4M1x1''@;'; put 'put ''OWI5MVx1OWI5Nlx1OWI5N1x1OWI5Zlx1OWJhMFx1OWJhOFx1OWJiNFx1OWJjMFx1OWJjYVx1OWJiOVx1OWJjNlx1OWJjZlx1OWJkMVx1OWJkMlx1OWJlM1x1OWJlMlx1OWJlNFx1OWJkNFx1OWJlMVx1OWMzYVx1OWJmMlx1OWJmMVx1OWJmMFx1OWMxNVx1OWMxNFx1OWMwOVx1OWMxM1x1OWMw''@;'; put 'put ''Y1x1OWMwNlx1OWMwOFx1OWMxMlx1OWMwYVx1OWMwNFx1OWMyZVx1OWMxYlx1OWMyNVx1OWMyNFx1OWMyMVx1OWMzMFx1OWM0N1x1OWMzMlx1OWM0Nlx1OWMzZVx1OWM1YVx1OWM2MFx1OWM2N1x1OWM3Nlx1OWM3OFx1OWNlN1x1OWNlY1x1OWNmMFx1OWQwOVx1OWQwOFx1OWNlYlx1OWQwM1x1''@;'; put 'put ''OWQwNlx1OWQyYVx1OWQyNlx1OWRhZlx1OWQyM1x1OWQxZlx1OWQ0NFx1OWQxNVx1OWQxMlx1OWQ0MVx1OWQzZlx1OWQzZVx1OWQ0Nlx1OWQ0OCJdLFsiZjNhMSIsIlx1OWQ1ZFx1OWQ1ZVx1OWQ2NFx1OWQ1MVx1OWQ1MFx1OWQ1OVx1OWQ3Mlx1OWQ4OVx1OWQ4N1x1OWRhYlx1OWQ2Zlx1OWQ3''@;'; put 'put ''YVx1OWQ5YVx1OWRhNFx1OWRhOVx1OWRiMlx1OWRjNFx1OWRjMVx1OWRiYlx1OWRiOFx1OWRiYVx1OWRjNlx1OWRjZlx1OWRjMlx1OWRkOVx1OWRkM1x1OWRmOFx1OWRlNlx1OWRlZFx1OWRlZlx1OWRmZFx1OWUxYVx1OWUxYlx1OWUxZVx1OWU3NVx1OWU3OVx1OWU3ZFx1OWU4MVx1OWU4OFx1''@;'; put 'put ''OWU4Ylx1OWU4Y1x1OWU5Mlx1OWU5NVx1OWU5MVx1OWU5ZFx1OWVhNVx1OWVhOVx1OWViOFx1OWVhYVx1OWVhZFx1OTc2MVx1OWVjY1x1OWVjZVx1OWVjZlx1OWVkMFx1OWVkNFx1OWVkY1x1OWVkZVx1OWVkZFx1OWVlMFx1OWVlNVx1OWVlOFx1OWVlZlx1OWVmNFx1OWVmNlx1OWVmN1x1OWVm''@;'; put 'put ''OVx1OWVmYlx1OWVmY1x1OWVmZFx1OWYwN1x1OWYwOFx1NzZiN1x1OWYxNVx1OWYyMVx1OWYyY1x1OWYzZVx1OWY0YVx1OWY1Mlx1OWY1NFx1OWY2M1x1OWY1Zlx1OWY2MFx1OWY2MVx1OWY2Nlx1OWY2N1x1OWY2Y1x1OWY2YVx1OWY3N1x1OWY3Mlx1OWY3Nlx1OWY5NVx1OWY5Y1x1OWZhMCJd''@;'; put 'put ''LFsiZjRhMSIsIlx1NTgyZlx1NjljN1x1OTA1OVx1NzQ2NFx1NTFkY1x1NzE5OSJdLFsiZjlhMSIsIlx1N2U4YVx1ODkxY1x1OTM0OFx1OTI4OFx1ODRkY1x1NGZjOVx1NzBiYlx1NjYzMVx1NjhjOFx1OTJmOVx1NjZmYlx1NWY0NVx1NGUyOFx1NGVlMVx1NGVmY1x1NGYwMFx1NGYwM1x1NGYz''@;'; put 'put ''OVx1NGY1Nlx1NGY5Mlx1NGY4YVx1NGY5YVx1NGY5NFx1NGZjZFx1NTA0MFx1NTAyMlx1NGZmZlx1NTAxZVx1NTA0Nlx1NTA3MFx1NTA0Mlx1NTA5NFx1NTBmNFx1NTBkOFx1NTE0YVx1NTE2NFx1NTE5ZFx1NTFiZVx1NTFlY1x1NTIxNVx1NTI5Y1x1NTJhNlx1NTJjMFx1NTJkYlx1NTMwMFx1''@;'; put 'put ''NTMwN1x1NTMyNFx1NTM3Mlx1NTM5M1x1NTNiMlx1NTNkZFx1ZmEwZVx1NTQ5Y1x1NTQ4YVx1NTRhOVx1NTRmZlx1NTU4Nlx1NTc1OVx1NTc2NVx1NTdhY1x1NTdjOFx1NTdjN1x1ZmEwZlx1ZmExMFx1NTg5ZVx1NThiMlx1NTkwYlx1NTk1M1x1NTk1Ylx1NTk1ZFx1NTk2M1x1NTlhNFx1NTli''@;'; put 'put ''YVx1NWI1Nlx1NWJjMFx1NzUyZlx1NWJkOFx1NWJlY1x1NWMxZVx1NWNhNlx1NWNiYVx1NWNmNVx1NWQyN1x1NWQ1M1x1ZmExMVx1NWQ0Mlx1NWQ2ZFx1NWRiOFx1NWRiOVx1NWRkMFx1NWYyMVx1NWYzNFx1NWY2N1x1NWZiNyJdLFsiZmFhMSIsIlx1NWZkZVx1NjA1ZFx1NjA4NVx1NjA4YVx1''@;'; put 'put ''NjBkZVx1NjBkNVx1NjEyMFx1NjBmMlx1NjExMVx1NjEzN1x1NjEzMFx1NjE5OFx1NjIxM1x1NjJhNlx1NjNmNVx1NjQ2MFx1NjQ5ZFx1NjRjZVx1NjU0ZVx1NjYwMFx1NjYxNVx1NjYzYlx1NjYwOVx1NjYyZVx1NjYxZVx1NjYyNFx1NjY2NVx1NjY1N1x1NjY1OVx1ZmExMlx1NjY3M1x1NjY5''@;'; put 'put ''OVx1NjZhMFx1NjZiMlx1NjZiZlx1NjZmYVx1NjcwZVx1ZjkyOVx1Njc2Nlx1NjdiYlx1Njg1Mlx1NjdjMFx1NjgwMVx1Njg0NFx1NjhjZlx1ZmExM1x1Njk2OFx1ZmExNFx1Njk5OFx1NjllMlx1NmEzMFx1NmE2Ylx1NmE0Nlx1NmE3M1x1NmE3ZVx1NmFlMlx1NmFlNFx1NmJkNlx1NmMzZlx1''@;'; put 'put ''NmM1Y1x1NmM4Nlx1NmM2Zlx1NmNkYVx1NmQwNFx1NmQ4N1x1NmQ2Zlx1NmQ5Nlx1NmRhY1x1NmRjZlx1NmRmOFx1NmRmMlx1NmRmY1x1NmUzOVx1NmU1Y1x1NmUyN1x1NmUzY1x1NmViZlx1NmY4OFx1NmZiNVx1NmZmNVx1NzAwNVx1NzAwN1x1NzAyOFx1NzA4NVx1NzBhYlx1NzEwZlx1NzEw''@;'; put 'put ''NFx1NzE1Y1x1NzE0Nlx1NzE0N1x1ZmExNVx1NzFjMVx1NzFmZVx1NzJiMSJdLFsiZmJhMSIsIlx1NzJiZVx1NzMyNFx1ZmExNlx1NzM3N1x1NzNiZFx1NzNjOVx1NzNkNlx1NzNlM1x1NzNkMlx1NzQwN1x1NzNmNVx1NzQyNlx1NzQyYVx1NzQyOVx1NzQyZVx1NzQ2Mlx1NzQ4OVx1NzQ5Zlx1''@;'; put 'put ''NzUwMVx1NzU2Zlx1NzY4Mlx1NzY5Y1x1NzY5ZVx1NzY5Ylx1NzZhNlx1ZmExN1x1Nzc0Nlx1NTJhZlx1NzgyMVx1Nzg0ZVx1Nzg2NFx1Nzg3YVx1NzkzMFx1ZmExOFx1ZmExOVx1ZmExYVx1Nzk5NFx1ZmExYlx1Nzk5Ylx1N2FkMVx1N2FlN1x1ZmExY1x1N2FlYlx1N2I5ZVx1ZmExZFx1N2Q0''@;'; put 'put ''OFx1N2Q1Y1x1N2RiN1x1N2RhMFx1N2RkNlx1N2U1Mlx1N2Y0N1x1N2ZhMVx1ZmExZVx1ODMwMVx1ODM2Mlx1ODM3Zlx1ODNjN1x1ODNmNlx1ODQ0OFx1ODRiNFx1ODU1M1x1ODU1OVx1ODU2Ylx1ZmExZlx1ODViMFx1ZmEyMFx1ZmEyMVx1ODgwN1x1ODhmNVx1OGExMlx1OGEzN1x1OGE3OVx1''@;'; put 'put ''OGFhN1x1OGFiZVx1OGFkZlx1ZmEyMlx1OGFmNlx1OGI1M1x1OGI3Zlx1OGNmMFx1OGNmNFx1OGQxMlx1OGQ3Nlx1ZmEyM1x1OGVjZlx1ZmEyNFx1ZmEyNVx1OTA2N1x1OTBkZVx1ZmEyNlx1OTExNVx1OTEyN1x1OTFkYSJdLFsiZmNhMSIsIlx1OTFkN1x1OTFkZVx1OTFlZFx1OTFlZVx1OTFl''@;'; put 'put ''NFx1OTFlNVx1OTIwNlx1OTIxMFx1OTIwYVx1OTIzYVx1OTI0MFx1OTIzY1x1OTI0ZVx1OTI1OVx1OTI1MVx1OTIzOVx1OTI2N1x1OTJhN1x1OTI3N1x1OTI3OFx1OTJlN1x1OTJkN1x1OTJkOVx1OTJkMFx1ZmEyN1x1OTJkNVx1OTJlMFx1OTJkM1x1OTMyNVx1OTMyMVx1OTJmYlx1ZmEyOFx1''@;'; put 'put ''OTMxZVx1OTJmZlx1OTMxZFx1OTMwMlx1OTM3MFx1OTM1N1x1OTNhNFx1OTNjNlx1OTNkZVx1OTNmOFx1OTQzMVx1OTQ0NVx1OTQ0OFx1OTU5Mlx1ZjlkY1x1ZmEyOVx1OTY5ZFx1OTZhZlx1OTczM1x1OTczYlx1OTc0M1x1OTc0ZFx1OTc0Zlx1OTc1MVx1OTc1NVx1OTg1N1x1OTg2NVx1ZmEy''@;'; put 'put ''YVx1ZmEyYlx1OTkyN1x1ZmEyY1x1OTk5ZVx1OWE0ZVx1OWFkOVx1OWFkY1x1OWI3NVx1OWI3Mlx1OWI4Zlx1OWJiMVx1OWJiYlx1OWMwMFx1OWQ3MFx1OWQ2Ylx1ZmEyZFx1OWUxOVx1OWVkMSJdLFsiZmNmMSIsIlx1MjE3MCIsOSwiXHVmZmUyXHVmZmU0XHVmZjA3XHVmZjAyIl0sWyI4ZmEy''@;'; put 'put ''YWYiLCJcdTAyZDhcdTAyYzdceGI4XHUwMmQ5XHUwMmRkXHhhZlx1MDJkYlx1MDJkYVx1ZmY1ZVx1MDM4NFx1MDM4NSJdLFsiOGZhMmMyIiwiXHhhMVx4YTZceGJmIl0sWyI4ZmEyZWIiLCJceGJhXHhhYVx4YTlceGFlXHUyMTIyXHhhNFx1MjExNiJdLFsiOGZhNmUxIiwiXHUwMzg2XHUwMzg4''@;'; put 'put ''XHUwMzg5XHUwMzhhXHUwM2FhIl0sWyI4ZmE2ZTciLCJcdTAzOGMiXSxbIjhmYTZlOSIsIlx1MDM4ZVx1MDNhYiJdLFsiOGZhNmVjIiwiXHUwMzhmIl0sWyI4ZmE2ZjEiLCJcdTAzYWNcdTAzYWRcdTAzYWVcdTAzYWZcdTAzY2FcdTAzOTBcdTAzY2NcdTAzYzJcdTAzY2RcdTAzY2JcdTAzYjBc''@;'; put 'put ''dTAzY2UiXSxbIjhmYTdjMiIsIlx1MDQwMiIsMTAsIlx1MDQwZVx1MDQwZiJdLFsiOGZhN2YyIiwiXHUwNDUyIiwxMCwiXHUwNDVlXHUwNDVmIl0sWyI4ZmE5YTEiLCJceGM2XHUwMTEwIl0sWyI4ZmE5YTQiLCJcdTAxMjYiXSxbIjhmYTlhNiIsIlx1MDEzMiJdLFsiOGZhOWE4IiwiXHUwMTQx''@;'; put 'put ''XHUwMTNmIl0sWyI4ZmE5YWIiLCJcdTAxNGFceGQ4XHUwMTUyIl0sWyI4ZmE5YWYiLCJcdTAxNjZceGRlIl0sWyI4ZmE5YzEiLCJceGU2XHUwMTExXHhmMFx1MDEyN1x1MDEzMVx1MDEzM1x1MDEzOFx1MDE0Mlx1MDE0MFx1MDE0OVx1MDE0Ylx4ZjhcdTAxNTNceGRmXHUwMTY3XHhmZSJdLFsi''@;'; put 'put ''OGZhYWExIiwiXHhjMVx4YzBceGM0XHhjMlx1MDEwMlx1MDFjZFx1MDEwMFx1MDEwNFx4YzVceGMzXHUwMTA2XHUwMTA4XHUwMTBjXHhjN1x1MDEwYVx1MDEwZVx4YzlceGM4XHhjYlx4Y2FcdTAxMWFcdTAxMTZcdTAxMTJcdTAxMTgiXSxbIjhmYWFiYSIsIlx1MDExY1x1MDExZVx1MDEyMlx1''@;'; put 'put ''MDEyMFx1MDEyNFx4Y2RceGNjXHhjZlx4Y2VcdTAxY2ZcdTAxMzBcdTAxMmFcdTAxMmVcdTAxMjhcdTAxMzRcdTAxMzZcdTAxMzlcdTAxM2RcdTAxM2JcdTAxNDNcdTAxNDdcdTAxNDVceGQxXHhkM1x4ZDJceGQ2XHhkNFx1MDFkMVx1MDE1MFx1MDE0Y1x4ZDVcdTAxNTRcdTAxNThcdTAxNTZc''@;'; put 'put ''dTAxNWFcdTAxNWNcdTAxNjBcdTAxNWVcdTAxNjRcdTAxNjJceGRhXHhkOVx4ZGNceGRiXHUwMTZjXHUwMWQzXHUwMTcwXHUwMTZhXHUwMTcyXHUwMTZlXHUwMTY4XHUwMWQ3XHUwMWRiXHUwMWQ5XHUwMWQ1XHUwMTc0XHhkZFx1MDE3OFx1MDE3Nlx1MDE3OVx1MDE3ZFx1MDE3YiJdLFsiOGZh''@;'; put 'put ''YmExIiwiXHhlMVx4ZTBceGU0XHhlMlx1MDEwM1x1MDFjZVx1MDEwMVx1MDEwNVx4ZTVceGUzXHUwMTA3XHUwMTA5XHUwMTBkXHhlN1x1MDEwYlx1MDEwZlx4ZTlceGU4XHhlYlx4ZWFcdTAxMWJcdTAxMTdcdTAxMTNcdTAxMTlcdTAxZjVcdTAxMWRcdTAxMWYiXSxbIjhmYWJiZCIsIlx1MDEy''@;'; put 'put ''MVx1MDEyNVx4ZWRceGVjXHhlZlx4ZWVcdTAxZDAiXSxbIjhmYWJjNSIsIlx1MDEyYlx1MDEyZlx1MDEyOVx1MDEzNVx1MDEzN1x1MDEzYVx1MDEzZVx1MDEzY1x1MDE0NFx1MDE0OFx1MDE0Nlx4ZjFceGYzXHhmMlx4ZjZceGY0XHUwMWQyXHUwMTUxXHUwMTRkXHhmNVx1MDE1NVx1MDE1OVx1''@;'; put 'put ''MDE1N1x1MDE1Ylx1MDE1ZFx1MDE2MVx1MDE1Zlx1MDE2NVx1MDE2M1x4ZmFceGY5XHhmY1x4ZmJcdTAxNmRcdTAxZDRcdTAxNzFcdTAxNmJcdTAxNzNcdTAxNmZcdTAxNjlcdTAxZDhcdTAxZGNcdTAxZGFcdTAxZDZcdTAxNzVceGZkXHhmZlx1MDE3N1x1MDE3YVx1MDE3ZVx1MDE3YyJdLFsi''@;'; put 'put ''OGZiMGExIiwiXHU0ZTAyXHU0ZTA0XHU0ZTA1XHU0ZTBjXHU0ZTEyXHU0ZTFmXHU0ZTIzXHU0ZTI0XHU0ZTI4XHU0ZTJiXHU0ZTJlXHU0ZTJmXHU0ZTMwXHU0ZTM1XHU0ZTQwXHU0ZTQxXHU0ZTQ0XHU0ZTQ3XHU0ZTUxXHU0ZTVhXHU0ZTVjXHU0ZTYzXHU0ZTY4XHU0ZTY5XHU0ZTc0XHU0ZTc1''@;'; put 'put ''XHU0ZTc5XHU0ZTdmXHU0ZThkXHU0ZTk2XHU0ZTk3XHU0ZTlkXHU0ZWFmXHU0ZWI5XHU0ZWMzXHU0ZWQwXHU0ZWRhXHU0ZWRiXHU0ZWUwXHU0ZWUxXHU0ZWUyXHU0ZWU4XHU0ZWVmXHU0ZWYxXHU0ZWYzXHU0ZWY1XHU0ZWZkXHU0ZWZlXHU0ZWZmXHU0ZjAwXHU0ZjAyXHU0ZjAzXHU0ZjA4XHU0''@;'; put 'put ''ZjBiXHU0ZjBjXHU0ZjEyXHU0ZjE1XHU0ZjE2XHU0ZjE3XHU0ZjE5XHU0ZjJlXHU0ZjMxXHU0ZjYwXHU0ZjMzXHU0ZjM1XHU0ZjM3XHU0ZjM5XHU0ZjNiXHU0ZjNlXHU0ZjQwXHU0ZjQyXHU0ZjQ4XHU0ZjQ5XHU0ZjRiXHU0ZjRjXHU0ZjUyXHU0ZjU0XHU0ZjU2XHU0ZjU4XHU0ZjVmXHU0ZjYz''@;'; put 'put ''XHU0ZjZhXHU0ZjZjXHU0ZjZlXHU0ZjcxXHU0Zjc3XHU0Zjc4XHU0Zjc5XHU0ZjdhXHU0ZjdkXHU0ZjdlXHU0ZjgxXHU0ZjgyXHU0Zjg0Il0sWyI4ZmIxYTEiLCJcdTRmODVcdTRmODlcdTRmOGFcdTRmOGNcdTRmOGVcdTRmOTBcdTRmOTJcdTRmOTNcdTRmOTRcdTRmOTdcdTRmOTlcdTRmOWFc''@;'; put 'put ''dTRmOWVcdTRmOWZcdTRmYjJcdTRmYjdcdTRmYjlcdTRmYmJcdTRmYmNcdTRmYmRcdTRmYmVcdTRmYzBcdTRmYzFcdTRmYzVcdTRmYzZcdTRmYzhcdTRmYzlcdTRmY2JcdTRmY2NcdTRmY2RcdTRmY2ZcdTRmZDJcdTRmZGNcdTRmZTBcdTRmZTJcdTRmZjBcdTRmZjJcdTRmZmNcdTRmZmRcdTRm''@;'; put 'put ''ZmZcdTUwMDBcdTUwMDFcdTUwMDRcdTUwMDdcdTUwMGFcdTUwMGNcdTUwMGVcdTUwMTBcdTUwMTNcdTUwMTdcdTUwMThcdTUwMWJcdTUwMWNcdTUwMWRcdTUwMWVcdTUwMjJcdTUwMjdcdTUwMmVcdTUwMzBcdTUwMzJcdTUwMzNcdTUwMzVcdTUwNDBcdTUwNDFcdTUwNDJcdTUwNDVcdTUwNDZc''@;'; put 'put ''dTUwNGFcdTUwNGNcdTUwNGVcdTUwNTFcdTUwNTJcdTUwNTNcdTUwNTdcdTUwNTlcdTUwNWZcdTUwNjBcdTUwNjJcdTUwNjNcdTUwNjZcdTUwNjdcdTUwNmFcdTUwNmRcdTUwNzBcdTUwNzFcdTUwM2JcdTUwODFcdTUwODNcdTUwODRcdTUwODZcdTUwOGFcdTUwOGVcdTUwOGZcdTUwOTAiXSxb''@;'; put 'put ''IjhmYjJhMSIsIlx1NTA5Mlx1NTA5M1x1NTA5NFx1NTA5Nlx1NTA5Ylx1NTA5Y1x1NTA5ZSIsNCwiXHU1MGFhXHU1MGFmXHU1MGIwXHU1MGI5XHU1MGJhXHU1MGJkXHU1MGMwXHU1MGMzXHU1MGM0XHU1MGM3XHU1MGNjXHU1MGNlXHU1MGQwXHU1MGQzXHU1MGQ0XHU1MGQ4XHU1MGRjXHU1MGRk''@;'; put 'put ''XHU1MGRmXHU1MGUyXHU1MGU0XHU1MGU2XHU1MGU4XHU1MGU5XHU1MGVmXHU1MGYxXHU1MGY2XHU1MGZhXHU1MGZlXHU1MTAzXHU1MTA2XHU1MTA3XHU1MTA4XHU1MTBiXHU1MTBjXHU1MTBkXHU1MTBlXHU1MGYyXHU1MTEwXHU1MTE3XHU1MTE5XHU1MTFiXHU1MTFjXHU1MTFkXHU1MTFlXHU1''@;'; put 'put ''MTIzXHU1MTI3XHU1MTI4XHU1MTJjXHU1MTJkXHU1MTJmXHU1MTMxXHU1MTMzXHU1MTM0XHU1MTM1XHU1MTM4XHU1MTM5XHU1MTQyXHU1MTRhXHU1MTRmXHU1MTUzXHU1MTU1XHU1MTU3XHU1MTU4XHU1MTVmXHU1MTY0XHU1MTY2XHU1MTdlXHU1MTgzXHU1MTg0XHU1MThiXHU1MThlXHU1MTk4''@;'; put 'put ''XHU1MTlkXHU1MWExXHU1MWEzXHU1MWFkXHU1MWI4XHU1MWJhXHU1MWJjXHU1MWJlXHU1MWJmXHU1MWMyIl0sWyI4ZmIzYTEiLCJcdTUxYzhcdTUxY2ZcdTUxZDFcdTUxZDJcdTUxZDNcdTUxZDVcdTUxZDhcdTUxZGVcdTUxZTJcdTUxZTVcdTUxZWVcdTUxZjJcdTUxZjNcdTUxZjRcdTUxZjdc''@;'; put 'put ''dTUyMDFcdTUyMDJcdTUyMDVcdTUyMTJcdTUyMTNcdTUyMTVcdTUyMTZcdTUyMThcdTUyMjJcdTUyMjhcdTUyMzFcdTUyMzJcdTUyMzVcdTUyM2NcdTUyNDVcdTUyNDlcdTUyNTVcdTUyNTdcdTUyNThcdTUyNWFcdTUyNWNcdTUyNWZcdTUyNjBcdTUyNjFcdTUyNjZcdTUyNmVcdTUyNzdcdTUy''@;'; put 'put ''NzhcdTUyNzlcdTUyODBcdTUyODJcdTUyODVcdTUyOGFcdTUyOGNcdTUyOTNcdTUyOTVcdTUyOTZcdTUyOTdcdTUyOThcdTUyOWFcdTUyOWNcdTUyYTRcdTUyYTVcdTUyYTZcdTUyYTdcdTUyYWZcdTUyYjBcdTUyYjZcdTUyYjdcdTUyYjhcdTUyYmFcdTUyYmJcdTUyYmRcdTUyYzBcdTUyYzRc''@;'; put 'put ''dTUyYzZcdTUyYzhcdTUyY2NcdTUyY2ZcdTUyZDFcdTUyZDRcdTUyZDZcdTUyZGJcdTUyZGNcdTUyZTFcdTUyZTVcdTUyZThcdTUyZTlcdTUyZWFcdTUyZWNcdTUyZjBcdTUyZjFcdTUyZjRcdTUyZjZcdTUyZjdcdTUzMDBcdTUzMDNcdTUzMGFcdTUzMGIiXSxbIjhmYjRhMSIsIlx1NTMwY1x1''@;'; put 'put ''NTMxMVx1NTMxM1x1NTMxOFx1NTMxYlx1NTMxY1x1NTMxZVx1NTMxZlx1NTMyNVx1NTMyN1x1NTMyOFx1NTMyOVx1NTMyYlx1NTMyY1x1NTMyZFx1NTMzMFx1NTMzMlx1NTMzNVx1NTMzY1x1NTMzZFx1NTMzZVx1NTM0Mlx1NTM0Y1x1NTM0Ylx1NTM1OVx1NTM1Ylx1NTM2MVx1NTM2M1x1NTM2''@;'; put 'put ''NVx1NTM2Y1x1NTM2ZFx1NTM3Mlx1NTM3OVx1NTM3ZVx1NTM4M1x1NTM4N1x1NTM4OFx1NTM4ZVx1NTM5M1x1NTM5NFx1NTM5OVx1NTM5ZFx1NTNhMVx1NTNhNFx1NTNhYVx1NTNhYlx1NTNhZlx1NTNiMlx1NTNiNFx1NTNiNVx1NTNiN1x1NTNiOFx1NTNiYVx1NTNiZFx1NTNjMFx1NTNjNVx1''@;'; put 'put ''NTNjZlx1NTNkMlx1NTNkM1x1NTNkNVx1NTNkYVx1NTNkZFx1NTNkZVx1NTNlMFx1NTNlNlx1NTNlN1x1NTNmNVx1NTQwMlx1NTQxM1x1NTQxYVx1NTQyMVx1NTQyN1x1NTQyOFx1NTQyYVx1NTQyZlx1NTQzMVx1NTQzNFx1NTQzNVx1NTQ0M1x1NTQ0NFx1NTQ0N1x1NTQ0ZFx1NTQ0Zlx1NTQ1''@;'; put 'put ''ZVx1NTQ2Mlx1NTQ2NFx1NTQ2Nlx1NTQ2N1x1NTQ2OVx1NTQ2Ylx1NTQ2ZFx1NTQ2ZVx1NTQ3NFx1NTQ3ZiJdLFsiOGZiNWExIiwiXHU1NDgxXHU1NDgzXHU1NDg1XHU1NDg4XHU1NDg5XHU1NDhkXHU1NDkxXHU1NDk1XHU1NDk2XHU1NDljXHU1NDlmXHU1NGExXHU1NGE2XHU1NGE3XHU1NGE5''@;'; put 'put ''XHU1NGFhXHU1NGFkXHU1NGFlXHU1NGIxXHU1NGI3XHU1NGI5XHU1NGJhXHU1NGJiXHU1NGJmXHU1NGM2XHU1NGNhXHU1NGNkXHU1NGNlXHU1NGUwXHU1NGVhXHU1NGVjXHU1NGVmXHU1NGY2XHU1NGZjXHU1NGZlXHU1NGZmXHU1NTAwXHU1NTAxXHU1NTA1XHU1NTA4XHU1NTA5XHU1NTBjXHU1''@;'; put 'put ''NTBkXHU1NTBlXHU1NTE1XHU1NTJhXHU1NTJiXHU1NTMyXHU1NTM1XHU1NTM2XHU1NTNiXHU1NTNjXHU1NTNkXHU1NTQxXHU1NTQ3XHU1NTQ5XHU1NTRhXHU1NTRkXHU1NTUwXHU1NTUxXHU1NTU4XHU1NTVhXHU1NTViXHU1NTVlXHU1NTYwXHU1NTYxXHU1NTY0XHU1NTY2XHU1NTdmXHU1NTgx''@;'; put 'put ''XHU1NTgyXHU1NTg2XHU1NTg4XHU1NThlXHU1NThmXHU1NTkxXHU1NTkyXHU1NTkzXHU1NTk0XHU1NTk3XHU1NWEzXHU1NWE0XHU1NWFkXHU1NWIyXHU1NWJmXHU1NWMxXHU1NWMzXHU1NWM2XHU1NWM5XHU1NWNiXHU1NWNjXHU1NWNlXHU1NWQxXHU1NWQyIl0sWyI4ZmI2YTEiLCJcdTU1ZDNc''@;'; put 'put ''dTU1ZDdcdTU1ZDhcdTU1ZGJcdTU1ZGVcdTU1ZTJcdTU1ZTlcdTU1ZjZcdTU1ZmZcdTU2MDVcdTU2MDhcdTU2MGFcdTU2MGQiLDUsIlx1NTYxOVx1NTYyY1x1NTYzMFx1NTYzM1x1NTYzNVx1NTYzN1x1NTYzOVx1NTYzYlx1NTYzY1x1NTYzZFx1NTYzZlx1NTY0MFx1NTY0MVx1NTY0M1x1NTY0''@;'; put 'put ''NFx1NTY0Nlx1NTY0OVx1NTY0Ylx1NTY0ZFx1NTY0Zlx1NTY1NFx1NTY1ZVx1NTY2MFx1NTY2MVx1NTY2Mlx1NTY2M1x1NTY2Nlx1NTY2OVx1NTY2ZFx1NTY2Zlx1NTY3MVx1NTY3Mlx1NTY3NVx1NTY4NFx1NTY4NVx1NTY4OFx1NTY4Ylx1NTY4Y1x1NTY5NVx1NTY5OVx1NTY5YVx1NTY5ZFx1''@;'; put 'put ''NTY5ZVx1NTY5Zlx1NTZhNlx1NTZhN1x1NTZhOFx1NTZhOVx1NTZhYlx1NTZhY1x1NTZhZFx1NTZiMVx1NTZiM1x1NTZiN1x1NTZiZVx1NTZjNVx1NTZjOVx1NTZjYVx1NTZjYlx1NTZjZlx1NTZkMFx1NTZjY1x1NTZjZFx1NTZkOVx1NTZkY1x1NTZkZFx1NTZkZlx1NTZlMVx1NTZlNCIsNCwi''@;'; put 'put ''XHU1NmYxXHU1NmViXHU1NmVkIl0sWyI4ZmI3YTEiLCJcdTU2ZjZcdTU2ZjdcdTU3MDFcdTU3MDJcdTU3MDdcdTU3MGFcdTU3MGNcdTU3MTFcdTU3MTVcdTU3MWFcdTU3MWJcdTU3MWRcdTU3MjBcdTU3MjJcdTU3MjNcdTU3MjRcdTU3MjVcdTU3MjlcdTU3MmFcdTU3MmNcdTU3MmVcdTU3MmZc''@;'; put 'put ''dTU3MzNcdTU3MzRcdTU3M2RcdTU3M2VcdTU3M2ZcdTU3NDVcdTU3NDZcdTU3NGNcdTU3NGRcdTU3NTJcdTU3NjJcdTU3NjVcdTU3NjdcdTU3NjhcdTU3NmJcdTU3NmQiLDQsIlx1NTc3M1x1NTc3NFx1NTc3NVx1NTc3N1x1NTc3OVx1NTc3YVx1NTc3Ylx1NTc3Y1x1NTc3ZVx1NTc4MVx1NTc4''@;'; put 'put ''M1x1NTc4Y1x1NTc5NFx1NTc5N1x1NTc5OVx1NTc5YVx1NTc5Y1x1NTc5ZFx1NTc5ZVx1NTc5Zlx1NTdhMVx1NTc5NVx1NTdhN1x1NTdhOFx1NTdhOVx1NTdhY1x1NTdiOFx1NTdiZFx1NTdjN1x1NTdjOFx1NTdjY1x1NTdjZlx1NTdkNVx1NTdkZFx1NTdkZVx1NTdlNFx1NTdlNlx1NTdlN1x1''@;'; put 'put ''NTdlOVx1NTdlZFx1NTdmMFx1NTdmNVx1NTdmNlx1NTdmOFx1NTdmZFx1NTdmZVx1NTdmZlx1NTgwM1x1NTgwNFx1NTgwOFx1NTgwOVx1NTdlMSJdLFsiOGZiOGExIiwiXHU1ODBjXHU1ODBkXHU1ODFiXHU1ODFlXHU1ODFmXHU1ODIwXHU1ODI2XHU1ODI3XHU1ODJkXHU1ODMyXHU1ODM5XHU1''@;'; put 'put ''ODNmXHU1ODQ5XHU1ODRjXHU1ODRkXHU1ODRmXHU1ODUwXHU1ODU1XHU1ODVmXHU1ODYxXHU1ODY0XHU1ODY3XHU1ODY4XHU1ODc4XHU1ODdjXHU1ODdmXHU1ODgwXHU1ODgxXHU1ODg3XHU1ODg4XHU1ODg5XHU1ODhhXHU1ODhjXHU1ODhkXHU1ODhmXHU1ODkwXHU1ODk0XHU1ODk2XHU1ODlk''@;'; put 'put ''XHU1OGEwXHU1OGExXHU1OGEyXHU1OGE2XHU1OGE5XHU1OGIxXHU1OGIyXHU1OGM0XHU1OGJjXHU1OGMyXHU1OGM4XHU1OGNkXHU1OGNlXHU1OGQwXHU1OGQyXHU1OGQ0XHU1OGQ2XHU1OGRhXHU1OGRkXHU1OGUxXHU1OGUyXHU1OGU5XHU1OGYzXHU1OTA1XHU1OTA2XHU1OTBiXHU1OTBjXHU1''@;'; put 'put ''OTEyXHU1OTEzXHU1OTE0XHU4NjQxXHU1OTFkXHU1OTIxXHU1OTIzXHU1OTI0XHU1OTI4XHU1OTJmXHU1OTMwXHU1OTMzXHU1OTM1XHU1OTM2XHU1OTNmXHU1OTQzXHU1OTQ2XHU1OTUyXHU1OTUzXHU1OTU5XHU1OTViXHU1OTVkXHU1OTVlXHU1OTVmXHU1OTYxXHU1OTYzXHU1OTZiXHU1OTZk''@;'; put 'put ''Il0sWyI4ZmI5YTEiLCJcdTU5NmZcdTU5NzJcdTU5NzVcdTU5NzZcdTU5NzlcdTU5N2JcdTU5N2NcdTU5OGJcdTU5OGNcdTU5OGVcdTU5OTJcdTU5OTVcdTU5OTdcdTU5OWZcdTU5YTRcdTU5YTdcdTU5YWRcdTU5YWVcdTU5YWZcdTU5YjBcdTU5YjNcdTU5YjdcdTU5YmFcdTU5YmNcdTU5YzFc''@;'; put 'put ''dTU5YzNcdTU5YzRcdTU5YzhcdTU5Y2FcdTU5Y2RcdTU5ZDJcdTU5ZGRcdTU5ZGVcdTU5ZGZcdTU5ZTNcdTU5ZTRcdTU5ZTdcdTU5ZWVcdTU5ZWZcdTU5ZjFcdTU5ZjJcdTU5ZjRcdTU5ZjdcdTVhMDBcdTVhMDRcdTVhMGNcdTVhMGRcdTVhMGVcdTVhMTJcdTVhMTNcdTVhMWVcdTVhMjNcdTVh''@;'; put 'put ''MjRcdTVhMjdcdTVhMjhcdTVhMmFcdTVhMmRcdTVhMzBcdTVhNDRcdTVhNDVcdTVhNDdcdTVhNDhcdTVhNGNcdTVhNTBcdTVhNTVcdTVhNWVcdTVhNjNcdTVhNjVcdTVhNjdcdTVhNmRcdTVhNzdcdTVhN2FcdTVhN2JcdTVhN2VcdTVhOGJcdTVhOTBcdTVhOTNcdTVhOTZcdTVhOTlcdTVhOWNc''@;'; put 'put ''dTVhOWVcdTVhOWZcdTVhYTBcdTVhYTJcdTVhYTdcdTVhYWNcdTVhYjFcdTVhYjJcdTVhYjNcdTVhYjVcdTVhYjhcdTVhYmFcdTVhYmJcdTVhYmYiXSxbIjhmYmFhMSIsIlx1NWFjNFx1NWFjNlx1NWFjOFx1NWFjZlx1NWFkYVx1NWFkY1x1NWFlMFx1NWFlNVx1NWFlYVx1NWFlZVx1NWFmNVx1''@;'; put 'put ''NWFmNlx1NWFmZFx1NWIwMFx1NWIwMVx1NWIwOFx1NWIxN1x1NWIzNFx1NWIxOVx1NWIxYlx1NWIxZFx1NWIyMVx1NWIyNVx1NWIyZFx1NWIzOFx1NWI0MVx1NWI0Ylx1NWI0Y1x1NWI1Mlx1NWI1Nlx1NWI1ZVx1NWI2OFx1NWI2ZVx1NWI2Zlx1NWI3Y1x1NWI3ZFx1NWI3ZVx1NWI3Zlx1NWI4''@;'; put 'put ''MVx1NWI4NFx1NWI4Nlx1NWI4YVx1NWI4ZVx1NWI5MFx1NWI5MVx1NWI5M1x1NWI5NFx1NWI5Nlx1NWJhOFx1NWJhOVx1NWJhY1x1NWJhZFx1NWJhZlx1NWJiMVx1NWJiMlx1NWJiN1x1NWJiYVx1NWJiY1x1NWJjMFx1NWJjMVx1NWJjZFx1NWJjZlx1NWJkNiIsNCwiXHU1YmUwXHU1YmVmXHU1''@;'; put 'put ''YmYxXHU1YmY0XHU1YmZkXHU1YzBjXHU1YzE3XHU1YzFlXHU1YzFmXHU1YzIzXHU1YzI2XHU1YzI5XHU1YzJiXHU1YzJjXHU1YzJlXHU1YzMwXHU1YzMyXHU1YzM1XHU1YzM2XHU1YzU5XHU1YzVhXHU1YzVjXHU1YzYyXHU1YzYzXHU1YzY3XHU1YzY4XHU1YzY5Il0sWyI4ZmJiYTEiLCJcdTVj''@;'; put 'put ''NmRcdTVjNzBcdTVjNzRcdTVjNzVcdTVjN2FcdTVjN2JcdTVjN2NcdTVjN2RcdTVjODdcdTVjODhcdTVjOGFcdTVjOGZcdTVjOTJcdTVjOWRcdTVjOWZcdTVjYTBcdTVjYTJcdTVjYTNcdTVjYTZcdTVjYWFcdTVjYjJcdTVjYjRcdTVjYjVcdTVjYmFcdTVjYzlcdTVjY2JcdTVjZDJcdTVjZGRc''@;'; put 'put ''dTVjZDdcdTVjZWVcdTVjZjFcdTVjZjJcdTVjZjRcdTVkMDFcdTVkMDZcdTVkMGRcdTVkMTJcdTVkMmJcdTVkMjNcdTVkMjRcdTVkMjZcdTVkMjdcdTVkMzFcdTVkMzRcdTVkMzlcdTVkM2RcdTVkM2ZcdTVkNDJcdTVkNDNcdTVkNDZcdTVkNDhcdTVkNTVcdTVkNTFcdTVkNTlcdTVkNGFcdTVk''@;'; put 'put ''NWZcdTVkNjBcdTVkNjFcdTVkNjJcdTVkNjRcdTVkNmFcdTVkNmRcdTVkNzBcdTVkNzlcdTVkN2FcdTVkN2VcdTVkN2ZcdTVkODFcdTVkODNcdTVkODhcdTVkOGFcdTVkOTJcdTVkOTNcdTVkOTRcdTVkOTVcdTVkOTlcdTVkOWJcdTVkOWZcdTVkYTBcdTVkYTdcdTVkYWJcdTVkYjBcdTVkYjRc''@;'; put 'put ''dTVkYjhcdTVkYjlcdTVkYzNcdTVkYzdcdTVkY2JcdTVkZDBcdTVkY2VcdTVkZDhcdTVkZDlcdTVkZTBcdTVkZTQiXSxbIjhmYmNhMSIsIlx1NWRlOVx1NWRmOFx1NWRmOVx1NWUwMFx1NWUwN1x1NWUwZFx1NWUxMlx1NWUxNFx1NWUxNVx1NWUxOFx1NWUxZlx1NWUyMFx1NWUyZVx1NWUyOFx1''@;'; put 'put ''NWUzMlx1NWUzNVx1NWUzZVx1NWU0Ylx1NWU1MFx1NWU0OVx1NWU1MVx1NWU1Nlx1NWU1OFx1NWU1Ylx1NWU1Y1x1NWU1ZVx1NWU2OFx1NWU2YSIsNCwiXHU1ZTcwXHU1ZTgwXHU1ZThiXHU1ZThlXHU1ZWEyXHU1ZWE0XHU1ZWE1XHU1ZWE4XHU1ZWFhXHU1ZWFjXHU1ZWIxXHU1ZWIzXHU1ZWJk''@;'; put 'put ''XHU1ZWJlXHU1ZWJmXHU1ZWM2XHU1ZWNjXHU1ZWNiXHU1ZWNlXHU1ZWQxXHU1ZWQyXHU1ZWQ0XHU1ZWQ1XHU1ZWRjXHU1ZWRlXHU1ZWU1XHU1ZWViXHU1ZjAyXHU1ZjA2XHU1ZjA3XHU1ZjA4XHU1ZjBlXHU1ZjE5XHU1ZjFjXHU1ZjFkXHU1ZjIxXHU1ZjIyXHU1ZjIzXHU1ZjI0XHU1ZjI4XHU1''@;'; put 'put ''ZjJiXHU1ZjJjXHU1ZjJlXHU1ZjMwXHU1ZjM0XHU1ZjM2XHU1ZjNiXHU1ZjNkXHU1ZjNmXHU1ZjQwXHU1ZjQ0XHU1ZjQ1XHU1ZjQ3XHU1ZjRkXHU1ZjUwXHU1ZjU0XHU1ZjU4XHU1ZjViXHU1ZjYwXHU1ZjYzXHU1ZjY0XHU1ZjY3Il0sWyI4ZmJkYTEiLCJcdTVmNmZcdTVmNzJcdTVmNzRcdTVm''@;'; put 'put ''NzVcdTVmNzhcdTVmN2FcdTVmN2RcdTVmN2VcdTVmODlcdTVmOGRcdTVmOGZcdTVmOTZcdTVmOWNcdTVmOWRcdTVmYTJcdTVmYTdcdTVmYWJcdTVmYTRcdTVmYWNcdTVmYWZcdTVmYjBcdTVmYjFcdTVmYjhcdTVmYzRcdTVmYzdcdTVmYzhcdTVmYzlcdTVmY2JcdTVmZDAiLDQsIlx1NWZkZVx1''@;'; put 'put ''NWZlMVx1NWZlMlx1NWZlOFx1NWZlOVx1NWZlYVx1NWZlY1x1NWZlZFx1NWZlZVx1NWZlZlx1NWZmMlx1NWZmM1x1NWZmNlx1NWZmYVx1NWZmY1x1NjAwN1x1NjAwYVx1NjAwZFx1NjAxM1x1NjAxNFx1NjAxN1x1NjAxOFx1NjAxYVx1NjAxZlx1NjAyNFx1NjAyZFx1NjAzM1x1NjAzNVx1NjA0''@;'; put 'put ''MFx1NjA0N1x1NjA0OFx1NjA0OVx1NjA0Y1x1NjA1MVx1NjA1NFx1NjA1Nlx1NjA1N1x1NjA1ZFx1NjA2MVx1NjA2N1x1NjA3MVx1NjA3ZVx1NjA3Zlx1NjA4Mlx1NjA4Nlx1NjA4OFx1NjA4YVx1NjA4ZVx1NjA5MVx1NjA5M1x1NjA5NVx1NjA5OFx1NjA5ZFx1NjA5ZVx1NjBhMlx1NjBhNFx1''@;'; put 'put ''NjBhNVx1NjBhOFx1NjBiMFx1NjBiMVx1NjBiNyJdLFsiOGZiZWExIiwiXHU2MGJiXHU2MGJlXHU2MGMyXHU2MGM0XHU2MGM4XHU2MGM5XHU2MGNhXHU2MGNiXHU2MGNlXHU2MGNmXHU2MGQ0XHU2MGQ1XHU2MGQ5XHU2MGRiXHU2MGRkXHU2MGRlXHU2MGUyXHU2MGU1XHU2MGYyXHU2MGY1XHU2''@;'; put 'put ''MGY4XHU2MGZjXHU2MGZkXHU2MTAyXHU2MTA3XHU2MTBhXHU2MTBjXHU2MTEwIiw0LCJcdTYxMTZcdTYxMTdcdTYxMTlcdTYxMWNcdTYxMWVcdTYxMjJcdTYxMmFcdTYxMmJcdTYxMzBcdTYxMzFcdTYxMzVcdTYxMzZcdTYxMzdcdTYxMzlcdTYxNDFcdTYxNDVcdTYxNDZcdTYxNDlcdTYxNWVc''@;'; put 'put ''dTYxNjBcdTYxNmNcdTYxNzJcdTYxNzhcdTYxN2JcdTYxN2NcdTYxN2ZcdTYxODBcdTYxODFcdTYxODNcdTYxODRcdTYxOGJcdTYxOGRcdTYxOTJcdTYxOTNcdTYxOTdcdTYxOThcdTYxOWNcdTYxOWRcdTYxOWZcdTYxYTBcdTYxYTVcdTYxYThcdTYxYWFcdTYxYWRcdTYxYjhcdTYxYjlcdTYx''@;'; put 'put ''YmNcdTYxYzBcdTYxYzFcdTYxYzJcdTYxY2VcdTYxY2ZcdTYxZDVcdTYxZGNcdTYxZGRcdTYxZGVcdTYxZGZcdTYxZTFcdTYxZTJcdTYxZTdcdTYxZTlcdTYxZTUiXSxbIjhmYmZhMSIsIlx1NjFlY1x1NjFlZFx1NjFlZlx1NjIwMVx1NjIwM1x1NjIwNFx1NjIwN1x1NjIxM1x1NjIxNVx1NjIx''@;'; put 'put ''Y1x1NjIyMFx1NjIyMlx1NjIyM1x1NjIyN1x1NjIyOVx1NjIyYlx1NjIzOVx1NjIzZFx1NjI0Mlx1NjI0M1x1NjI0NFx1NjI0Nlx1NjI0Y1x1NjI1MFx1NjI1MVx1NjI1Mlx1NjI1NFx1NjI1Nlx1NjI1YVx1NjI1Y1x1NjI2NFx1NjI2ZFx1NjI2Zlx1NjI3M1x1NjI3YVx1NjI3ZFx1NjI4ZFx1''@;'; put 'put ''NjI4ZVx1NjI4Zlx1NjI5MFx1NjJhNlx1NjJhOFx1NjJiM1x1NjJiNlx1NjJiN1x1NjJiYVx1NjJiZVx1NjJiZlx1NjJjNFx1NjJjZVx1NjJkNVx1NjJkNlx1NjJkYVx1NjJlYVx1NjJmMlx1NjJmNFx1NjJmY1x1NjJmZFx1NjMwM1x1NjMwNFx1NjMwYVx1NjMwYlx1NjMwZFx1NjMxMFx1NjMx''@;'; put 'put ''M1x1NjMxNlx1NjMxOFx1NjMyOVx1NjMyYVx1NjMyZFx1NjMzNVx1NjMzNlx1NjMzOVx1NjMzY1x1NjM0MVx1NjM0Mlx1NjM0M1x1NjM0NFx1NjM0Nlx1NjM0YVx1NjM0Ylx1NjM0ZVx1NjM1Mlx1NjM1M1x1NjM1NFx1NjM1OFx1NjM1Ylx1NjM2NVx1NjM2Nlx1NjM2Y1x1NjM2ZFx1NjM3MVx1''@;'; put 'put ''NjM3NFx1NjM3NSJdLFsiOGZjMGExIiwiXHU2Mzc4XHU2MzdjXHU2MzdkXHU2MzdmXHU2MzgyXHU2Mzg0XHU2Mzg3XHU2MzhhXHU2MzkwXHU2Mzk0XHU2Mzk1XHU2Mzk5XHU2MzlhXHU2MzllXHU2M2E0XHU2M2E2XHU2M2FkXHU2M2FlXHU2M2FmXHU2M2JkXHU2M2MxXHU2M2M1XHU2M2M4XHU2''@;'; put 'put ''M2NlXHU2M2QxXHU2M2QzXHU2M2Q0XHU2M2Q1XHU2M2RjXHU2M2UwXHU2M2U1XHU2M2VhXHU2M2VjXHU2M2YyXHU2M2YzXHU2M2Y1XHU2M2Y4XHU2M2Y5XHU2NDA5XHU2NDBhXHU2NDEwXHU2NDEyXHU2NDE0XHU2NDE4XHU2NDFlXHU2NDIwXHU2NDIyXHU2NDI0XHU2NDI1XHU2NDI5XHU2NDJh''@;'; put 'put ''XHU2NDJmXHU2NDMwXHU2NDM1XHU2NDNkXHU2NDNmXHU2NDRiXHU2NDRmXHU2NDUxXHU2NDUyXHU2NDUzXHU2NDU0XHU2NDVhXHU2NDViXHU2NDVjXHU2NDVkXHU2NDVmXHU2NDYwXHU2NDYxXHU2NDYzXHU2NDZkXHU2NDczXHU2NDc0XHU2NDdiXHU2NDdkXHU2NDg1XHU2NDg3XHU2NDhmXHU2''@;'; put 'put ''NDkwXHU2NDkxXHU2NDk4XHU2NDk5XHU2NDliXHU2NDlkXHU2NDlmXHU2NGExXHU2NGEzXHU2NGE2XHU2NGE4XHU2NGFjXHU2NGIzXHU2NGJkXHU2NGJlXHU2NGJmIl0sWyI4ZmMxYTEiLCJcdTY0YzRcdTY0YzlcdTY0Y2FcdTY0Y2JcdTY0Y2NcdTY0Y2VcdTY0ZDBcdTY0ZDFcdTY0ZDVcdTY0''@;'; put 'put ''ZDdcdTY0ZTRcdTY0ZTVcdTY0ZTlcdTY0ZWFcdTY0ZWRcdTY0ZjBcdTY0ZjVcdTY0ZjdcdTY0ZmJcdTY0ZmZcdTY1MDFcdTY1MDRcdTY1MDhcdTY1MDlcdTY1MGFcdTY1MGZcdTY1MTNcdTY1MTRcdTY1MTZcdTY1MTlcdTY1MWJcdTY1MWVcdTY1MWZcdTY1MjJcdTY1MjZcdTY1MjlcdTY1MmVc''@;'; put 'put ''dTY1MzFcdTY1M2FcdTY1M2NcdTY1M2RcdTY1NDNcdTY1NDdcdTY1NDlcdTY1NTBcdTY1NTJcdTY1NTRcdTY1NWZcdTY1NjBcdTY1NjdcdTY1NmJcdTY1N2FcdTY1N2RcdTY1ODFcdTY1ODVcdTY1OGFcdTY1OTJcdTY1OTVcdTY1OThcdTY1OWRcdTY1YTBcdTY1YTNcdTY1YTZcdTY1YWVcdTY1''@;'; put 'put ''YjJcdTY1YjNcdTY1YjRcdTY1YmZcdTY1YzJcdTY1YzhcdTY1YzlcdTY1Y2VcdTY1ZDBcdTY1ZDRcdTY1ZDZcdTY1ZDhcdTY1ZGZcdTY1ZjBcdTY1ZjJcdTY1ZjRcdTY1ZjVcdTY1ZjlcdTY1ZmVcdTY1ZmZcdTY2MDBcdTY2MDRcdTY2MDhcdTY2MDlcdTY2MGRcdTY2MTFcdTY2MTJcdTY2MTVc''@;'; put 'put ''dTY2MTZcdTY2MWQiXSxbIjhmYzJhMSIsIlx1NjYxZVx1NjYyMVx1NjYyMlx1NjYyM1x1NjYyNFx1NjYyNlx1NjYyOVx1NjYyYVx1NjYyYlx1NjYyY1x1NjYyZVx1NjYzMFx1NjYzMVx1NjYzM1x1NjYzOVx1NjYzN1x1NjY0MFx1NjY0NVx1NjY0Nlx1NjY0YVx1NjY0Y1x1NjY1MVx1NjY0ZVx1''@;'; put 'put ''NjY1N1x1NjY1OFx1NjY1OVx1NjY1Ylx1NjY1Y1x1NjY2MFx1NjY2MVx1NjZmYlx1NjY2YVx1NjY2Ylx1NjY2Y1x1NjY3ZVx1NjY3M1x1NjY3NVx1NjY3Zlx1NjY3N1x1NjY3OFx1NjY3OVx1NjY3Ylx1NjY4MFx1NjY3Y1x1NjY4Ylx1NjY4Y1x1NjY4ZFx1NjY5MFx1NjY5Mlx1NjY5OVx1NjY5''@;'; put 'put ''YVx1NjY5Ylx1NjY5Y1x1NjY5Zlx1NjZhMFx1NjZhNFx1NjZhZFx1NjZiMVx1NjZiMlx1NjZiNVx1NjZiYlx1NjZiZlx1NjZjMFx1NjZjMlx1NjZjM1x1NjZjOFx1NjZjY1x1NjZjZVx1NjZjZlx1NjZkNFx1NjZkYlx1NjZkZlx1NjZlOFx1NjZlYlx1NjZlY1x1NjZlZVx1NjZmYVx1NjcwNVx1''@;'; put 'put ''NjcwN1x1NjcwZVx1NjcxM1x1NjcxOVx1NjcxY1x1NjcyMFx1NjcyMlx1NjczM1x1NjczZVx1Njc0NVx1Njc0N1x1Njc0OFx1Njc0Y1x1Njc1NFx1Njc1NVx1Njc1ZCJdLFsiOGZjM2ExIiwiXHU2NzY2XHU2NzZjXHU2NzZlXHU2Nzc0XHU2Nzc2XHU2NzdiXHU2NzgxXHU2Nzg0XHU2NzhlXHU2''@;'; put 'put ''NzhmXHU2NzkxXHU2NzkzXHU2Nzk2XHU2Nzk4XHU2Nzk5XHU2NzliXHU2N2IwXHU2N2IxXHU2N2IyXHU2N2I1XHU2N2JiXHU2N2JjXHU2N2JkXHU2N2Y5XHU2N2MwXHU2N2MyXHU2N2MzXHU2N2M1XHU2N2M4XHU2N2M5XHU2N2QyXHU2N2Q3XHU2N2Q5XHU2N2RjXHU2N2UxXHU2N2U2XHU2N2Yw''@;'; put 'put ''XHU2N2YyXHU2N2Y2XHU2N2Y3XHU2ODUyXHU2ODE0XHU2ODE5XHU2ODFkXHU2ODFmXHU2ODI4XHU2ODI3XHU2ODJjXHU2ODJkXHU2ODJmXHU2ODMwXHU2ODMxXHU2ODMzXHU2ODNiXHU2ODNmXHU2ODQ0XHU2ODQ1XHU2ODRhXHU2ODRjXHU2ODU1XHU2ODU3XHU2ODU4XHU2ODViXHU2ODZiXHU2''@;'; put 'put ''ODZlIiw0LCJcdTY4NzVcdTY4NzlcdTY4N2FcdTY4N2JcdTY4N2NcdTY4ODJcdTY4ODRcdTY4ODZcdTY4ODhcdTY4OTZcdTY4OThcdTY4OWFcdTY4OWNcdTY4YTFcdTY4YTNcdTY4YTVcdTY4YTlcdTY4YWFcdTY4YWVcdTY4YjJcdTY4YmJcdTY4YzVcdTY4YzhcdTY4Y2NcdTY4Y2YiXSxbIjhm''@;'; put 'put ''YzRhMSIsIlx1NjhkMFx1NjhkMVx1NjhkM1x1NjhkNlx1NjhkOVx1NjhkY1x1NjhkZFx1NjhlNVx1NjhlOFx1NjhlYVx1NjhlYlx1NjhlY1x1NjhlZFx1NjhmMFx1NjhmMVx1NjhmNVx1NjhmNlx1NjhmYlx1NjhmY1x1NjhmZFx1NjkwNlx1NjkwOVx1NjkwYVx1NjkxMFx1NjkxMVx1NjkxM1x1''@;'; put 'put ''NjkxNlx1NjkxN1x1NjkzMVx1NjkzM1x1NjkzNVx1NjkzOFx1NjkzYlx1Njk0Mlx1Njk0NVx1Njk0OVx1Njk0ZVx1Njk1N1x1Njk1Ylx1Njk2M1x1Njk2NFx1Njk2NVx1Njk2Nlx1Njk2OFx1Njk2OVx1Njk2Y1x1Njk3MFx1Njk3MVx1Njk3Mlx1Njk3YVx1Njk3Ylx1Njk3Zlx1Njk4MFx1Njk4''@;'; put 'put ''ZFx1Njk5Mlx1Njk5Nlx1Njk5OFx1NjlhMVx1NjlhNVx1NjlhNlx1NjlhOFx1NjlhYlx1NjlhZFx1NjlhZlx1NjliN1x1NjliOFx1NjliYVx1NjliY1x1NjljNVx1NjljOFx1NjlkMVx1NjlkNlx1NjlkN1x1NjllMlx1NjllNVx1NjllZVx1NjllZlx1NjlmMVx1NjlmM1x1NjlmNVx1NjlmZVx1''@;'; put 'put ''NmEwMFx1NmEwMVx1NmEwM1x1NmEwZlx1NmExMVx1NmExNVx1NmExYVx1NmExZFx1NmEyMFx1NmEyNFx1NmEyOFx1NmEzMFx1NmEzMiJdLFsiOGZjNWExIiwiXHU2YTM0XHU2YTM3XHU2YTNiXHU2YTNlXHU2YTNmXHU2YTQ1XHU2YTQ2XHU2YTQ5XHU2YTRhXHU2YTRlXHU2YTUwXHU2YTUxXHU2''@;'; put 'put ''YTUyXHU2YTU1XHU2YTU2XHU2YTViXHU2YTY0XHU2YTY3XHU2YTZhXHU2YTcxXHU2YTczXHU2YTdlXHU2YTgxXHU2YTgzXHU2YTg2XHU2YTg3XHU2YTg5XHU2YThiXHU2YTkxXHU2YTliXHU2YTlkXHU2YTllXHU2YTlmXHU2YWE1XHU2YWFiXHU2YWFmXHU2YWIwXHU2YWIxXHU2YWI0XHU2YWJk''@;'; put 'put ''XHU2YWJlXHU2YWJmXHU2YWM2XHU2YWM5XHU2YWM4XHU2YWNjXHU2YWQwXHU2YWQ0XHU2YWQ1XHU2YWQ2XHU2YWRjXHU2YWRkXHU2YWU0XHU2YWU3XHU2YWVjXHU2YWYwXHU2YWYxXHU2YWYyXHU2YWZjXHU2YWZkXHU2YjAyXHU2YjAzXHU2YjA2XHU2YjA3XHU2YjA5XHU2YjBmXHU2YjEwXHU2''@;'; put 'put ''YjExXHU2YjE3XHU2YjFiXHU2YjFlXHU2YjI0XHU2YjI4XHU2YjJiXHU2YjJjXHU2YjJmXHU2YjM1XHU2YjM2XHU2YjNiXHU2YjNmXHU2YjQ2XHU2YjRhXHU2YjRkXHU2YjUyXHU2YjU2XHU2YjU4XHU2YjVkXHU2YjYwXHU2YjY3XHU2YjZiXHU2YjZlXHU2YjcwXHU2Yjc1XHU2YjdkIl0sWyI4''@;'; put 'put ''ZmM2YTEiLCJcdTZiN2VcdTZiODJcdTZiODVcdTZiOTdcdTZiOWJcdTZiOWZcdTZiYTBcdTZiYTJcdTZiYTNcdTZiYThcdTZiYTlcdTZiYWNcdTZiYWRcdTZiYWVcdTZiYjBcdTZiYjhcdTZiYjlcdTZiYmRcdTZiYmVcdTZiYzNcdTZiYzRcdTZiYzlcdTZiY2NcdTZiZDZcdTZiZGFcdTZiZTFc''@;'; put 'put ''dTZiZTNcdTZiZTZcdTZiZTdcdTZiZWVcdTZiZjFcdTZiZjdcdTZiZjlcdTZiZmZcdTZjMDJcdTZjMDRcdTZjMDVcdTZjMDlcdTZjMGRcdTZjMGVcdTZjMTBcdTZjMTJcdTZjMTlcdTZjMWZcdTZjMjZcdTZjMjdcdTZjMjhcdTZjMmNcdTZjMmVcdTZjMzNcdTZjMzVcdTZjMzZcdTZjM2FcdTZj''@;'; put 'put ''M2JcdTZjM2ZcdTZjNGFcdTZjNGJcdTZjNGRcdTZjNGZcdTZjNTJcdTZjNTRcdTZjNTlcdTZjNWJcdTZjNWNcdTZjNmJcdTZjNmRcdTZjNmZcdTZjNzRcdTZjNzZcdTZjNzhcdTZjNzlcdTZjN2JcdTZjODVcdTZjODZcdTZjODdcdTZjODlcdTZjOTRcdTZjOTVcdTZjOTdcdTZjOThcdTZjOWNc''@;'; put 'put ''dTZjOWZcdTZjYjBcdTZjYjJcdTZjYjRcdTZjYzJcdTZjYzZcdTZjY2RcdTZjY2ZcdTZjZDBcdTZjZDFcdTZjZDJcdTZjZDRcdTZjZDYiXSxbIjhmYzdhMSIsIlx1NmNkYVx1NmNkY1x1NmNlMFx1NmNlN1x1NmNlOVx1NmNlYlx1NmNlY1x1NmNlZVx1NmNmMlx1NmNmNFx1NmQwNFx1NmQwN1x1''@;'; put 'put ''NmQwYVx1NmQwZVx1NmQwZlx1NmQxMVx1NmQxM1x1NmQxYVx1NmQyNlx1NmQyN1x1NmQyOFx1NmM2N1x1NmQyZVx1NmQyZlx1NmQzMVx1NmQzOVx1NmQzY1x1NmQzZlx1NmQ1N1x1NmQ1ZVx1NmQ1Zlx1NmQ2MVx1NmQ2NVx1NmQ2N1x1NmQ2Zlx1NmQ3MFx1NmQ3Y1x1NmQ4Mlx1NmQ4N1x1NmQ5''@;'; put 'put ''MVx1NmQ5Mlx1NmQ5NFx1NmQ5Nlx1NmQ5N1x1NmQ5OFx1NmRhYVx1NmRhY1x1NmRiNFx1NmRiN1x1NmRiOVx1NmRiZFx1NmRiZlx1NmRjNFx1NmRjOFx1NmRjYVx1NmRjZVx1NmRjZlx1NmRkNlx1NmRkYlx1NmRkZFx1NmRkZlx1NmRlMFx1NmRlMlx1NmRlNVx1NmRlOVx1NmRlZlx1NmRmMFx1''@;'; put 'put ''NmRmNFx1NmRmNlx1NmRmY1x1NmUwMFx1NmUwNFx1NmUxZVx1NmUyMlx1NmUyN1x1NmUzMlx1NmUzNlx1NmUzOVx1NmUzYlx1NmUzY1x1NmU0NFx1NmU0NVx1NmU0OFx1NmU0OVx1NmU0Ylx1NmU0Zlx1NmU1MVx1NmU1Mlx1NmU1M1x1NmU1NFx1NmU1N1x1NmU1Y1x1NmU1ZFx1NmU1ZSJdLFsi''@;'; put 'put ''OGZjOGExIiwiXHU2ZTYyXHU2ZTYzXHU2ZTY4XHU2ZTczXHU2ZTdiXHU2ZTdkXHU2ZThkXHU2ZTkzXHU2ZTk5XHU2ZWEwXHU2ZWE3XHU2ZWFkXHU2ZWFlXHU2ZWIxXHU2ZWIzXHU2ZWJiXHU2ZWJmXHU2ZWMwXHU2ZWMxXHU2ZWMzXHU2ZWM3XHU2ZWM4XHU2ZWNhXHU2ZWNkXHU2ZWNlXHU2ZWNm''@;'; put 'put ''XHU2ZWViXHU2ZWVkXHU2ZWVlXHU2ZWY5XHU2ZWZiXHU2ZWZkXHU2ZjA0XHU2ZjA4XHU2ZjBhXHU2ZjBjXHU2ZjBkXHU2ZjE2XHU2ZjE4XHU2ZjFhXHU2ZjFiXHU2ZjI2XHU2ZjI5XHU2ZjJhXHU2ZjJmXHU2ZjMwXHU2ZjMzXHU2ZjM2XHU2ZjNiXHU2ZjNjXHU2ZjJkXHU2ZjRmXHU2ZjUxXHU2''@;'; put 'put ''ZjUyXHU2ZjUzXHU2ZjU3XHU2ZjU5XHU2ZjVhXHU2ZjVkXHU2ZjVlXHU2ZjYxXHU2ZjYyXHU2ZjY4XHU2ZjZjXHU2ZjdkXHU2ZjdlXHU2ZjgzXHU2Zjg3XHU2Zjg4XHU2ZjhiXHU2ZjhjXHU2ZjhkXHU2ZjkwXHU2ZjkyXHU2ZjkzXHU2Zjk0XHU2Zjk2XHU2ZjlhXHU2ZjlmXHU2ZmEwXHU2ZmE1''@;'; put 'put ''XHU2ZmE2XHU2ZmE3XHU2ZmE4XHU2ZmFlXHU2ZmFmXHU2ZmIwXHU2ZmI1XHU2ZmI2XHU2ZmJjXHU2ZmM1XHU2ZmM3XHU2ZmM4XHU2ZmNhIl0sWyI4ZmM5YTEiLCJcdTZmZGFcdTZmZGVcdTZmZThcdTZmZTlcdTZmZjBcdTZmZjVcdTZmZjlcdTZmZmNcdTZmZmRcdTcwMDBcdTcwMDVcdTcwMDZc''@;'; put 'put ''dTcwMDdcdTcwMGRcdTcwMTdcdTcwMjBcdTcwMjNcdTcwMmZcdTcwMzRcdTcwMzdcdTcwMzlcdTcwM2NcdTcwNDNcdTcwNDRcdTcwNDhcdTcwNDlcdTcwNGFcdTcwNGJcdTcwNTRcdTcwNTVcdTcwNWRcdTcwNWVcdTcwNGVcdTcwNjRcdTcwNjVcdTcwNmNcdTcwNmVcdTcwNzVcdTcwNzZcdTcw''@;'; put 'put ''N2VcdTcwODFcdTcwODVcdTcwODZcdTcwOTQiLDQsIlx1NzA5Ylx1NzBhNFx1NzBhYlx1NzBiMFx1NzBiMVx1NzBiNFx1NzBiN1x1NzBjYVx1NzBkMVx1NzBkM1x1NzBkNFx1NzBkNVx1NzBkNlx1NzBkOFx1NzBkY1x1NzBlNFx1NzBmYVx1NzEwMyIsNCwiXHU3MTBiXHU3MTBjXHU3MTBmXHU3''@;'; put 'put ''MTFlXHU3MTIwXHU3MTJiXHU3MTJkXHU3MTJmXHU3MTMwXHU3MTMxXHU3MTM4XHU3MTQxXHU3MTQ1XHU3MTQ2XHU3MTQ3XHU3MTRhXHU3MTRiXHU3MTUwXHU3MTUyXHU3MTU3XHU3MTVhXHU3MTVjXHU3MTVlXHU3MTYwIl0sWyI4ZmNhYTEiLCJcdTcxNjhcdTcxNzlcdTcxODBcdTcxODVcdTcx''@;'; put 'put ''ODdcdTcxOGNcdTcxOTJcdTcxOWFcdTcxOWJcdTcxYTBcdTcxYTJcdTcxYWZcdTcxYjBcdTcxYjJcdTcxYjNcdTcxYmFcdTcxYmZcdTcxYzBcdTcxYzFcdTcxYzRcdTcxY2JcdTcxY2NcdTcxZDNcdTcxZDZcdTcxZDlcdTcxZGFcdTcxZGNcdTcxZjhcdTcxZmVcdTcyMDBcdTcyMDdcdTcyMDhc''@;'; put 'put ''dTcyMDlcdTcyMTNcdTcyMTdcdTcyMWFcdTcyMWRcdTcyMWZcdTcyMjRcdTcyMmJcdTcyMmZcdTcyMzRcdTcyMzhcdTcyMzlcdTcyNDFcdTcyNDJcdTcyNDNcdTcyNDVcdTcyNGVcdTcyNGZcdTcyNTBcdTcyNTNcdTcyNTVcdTcyNTZcdTcyNWFcdTcyNWNcdTcyNWVcdTcyNjBcdTcyNjNcdTcy''@;'; put 'put ''NjhcdTcyNmJcdTcyNmVcdTcyNmZcdTcyNzFcdTcyNzdcdTcyNzhcdTcyN2JcdTcyN2NcdTcyN2ZcdTcyODRcdTcyODlcdTcyOGRcdTcyOGVcdTcyOTNcdTcyOWJcdTcyYThcdTcyYWRcdTcyYWVcdTcyYjFcdTcyYjRcdTcyYmVcdTcyYzFcdTcyYzdcdTcyYzlcdTcyY2NcdTcyZDVcdTcyZDZc''@;'; put 'put ''dTcyZDhcdTcyZGZcdTcyZTVcdTcyZjNcdTcyZjRcdTcyZmFcdTcyZmIiXSxbIjhmY2JhMSIsIlx1NzJmZVx1NzMwMlx1NzMwNFx1NzMwNVx1NzMwN1x1NzMwYlx1NzMwZFx1NzMxMlx1NzMxM1x1NzMxOFx1NzMxOVx1NzMxZVx1NzMyMlx1NzMyNFx1NzMyN1x1NzMyOFx1NzMyY1x1NzMzMVx1''@;'; put 'put ''NzMzMlx1NzMzNVx1NzMzYVx1NzMzYlx1NzMzZFx1NzM0M1x1NzM0ZFx1NzM1MFx1NzM1Mlx1NzM1Nlx1NzM1OFx1NzM1ZFx1NzM1ZVx1NzM1Zlx1NzM2MFx1NzM2Nlx1NzM2N1x1NzM2OVx1NzM2Ylx1NzM2Y1x1NzM2ZVx1NzM2Zlx1NzM3MVx1NzM3N1x1NzM3OVx1NzM3Y1x1NzM4MFx1NzM4''@;'; put 'put ''MVx1NzM4M1x1NzM4NVx1NzM4Nlx1NzM4ZVx1NzM5MFx1NzM5M1x1NzM5NVx1NzM5N1x1NzM5OFx1NzM5Y1x1NzM5ZVx1NzM5Zlx1NzNhMFx1NzNhMlx1NzNhNVx1NzNhNlx1NzNhYVx1NzNhYlx1NzNhZFx1NzNiNVx1NzNiN1x1NzNiOVx1NzNiY1x1NzNiZFx1NzNiZlx1NzNjNVx1NzNjNlx1''@;'; put 'put ''NzNjOVx1NzNjYlx1NzNjY1x1NzNjZlx1NzNkMlx1NzNkM1x1NzNkNlx1NzNkOVx1NzNkZFx1NzNlMVx1NzNlM1x1NzNlNlx1NzNlN1x1NzNlOVx1NzNmNFx1NzNmNVx1NzNmN1x1NzNmOVx1NzNmYVx1NzNmYlx1NzNmZCJdLFsiOGZjY2ExIiwiXHU3M2ZmXHU3NDAwXHU3NDAxXHU3NDA0XHU3''@;'; put 'put ''NDA3XHU3NDBhXHU3NDExXHU3NDFhXHU3NDFiXHU3NDI0XHU3NDI2XHU3NDI4Iiw5LCJcdTc0MzlcdTc0NDBcdTc0NDNcdTc0NDRcdTc0NDZcdTc0NDdcdTc0NGJcdTc0NGRcdTc0NTFcdTc0NTJcdTc0NTdcdTc0NWRcdTc0NjJcdTc0NjZcdTc0NjdcdTc0NjhcdTc0NmJcdTc0NmRcdTc0NmVc''@;'; put 'put ''dTc0NzFcdTc0NzJcdTc0ODBcdTc0ODFcdTc0ODVcdTc0ODZcdTc0ODdcdTc0ODlcdTc0OGZcdTc0OTBcdTc0OTFcdTc0OTJcdTc0OThcdTc0OTlcdTc0OWFcdTc0OWNcdTc0OWZcdTc0YTBcdTc0YTFcdTc0YTNcdTc0YTZcdTc0YThcdTc0YTlcdTc0YWFcdTc0YWJcdTc0YWVcdTc0YWZcdTc0''@;'; put 'put ''YjFcdTc0YjJcdTc0YjVcdTc0YjlcdTc0YmJcdTc0YmZcdTc0YzhcdTc0YzlcdTc0Y2NcdTc0ZDBcdTc0ZDNcdTc0ZDhcdTc0ZGFcdTc0ZGJcdTc0ZGVcdTc0ZGZcdTc0ZTRcdTc0ZThcdTc0ZWFcdTc0ZWJcdTc0ZWZcdTc0ZjRcdTc0ZmFcdTc0ZmJcdTc0ZmNcdTc0ZmZcdTc1MDYiXSxbIjhm''@;'; put 'put ''Y2RhMSIsIlx1NzUxMlx1NzUxNlx1NzUxN1x1NzUyMFx1NzUyMVx1NzUyNFx1NzUyN1x1NzUyOVx1NzUyYVx1NzUyZlx1NzUzNlx1NzUzOVx1NzUzZFx1NzUzZVx1NzUzZlx1NzU0MFx1NzU0M1x1NzU0N1x1NzU0OFx1NzU0ZVx1NzU1MFx1NzU1Mlx1NzU1N1x1NzU1ZVx1NzU1Zlx1NzU2MVx1''@;'; put 'put ''NzU2Zlx1NzU3MVx1NzU3OSIsNSwiXHU3NTgxXHU3NTg1XHU3NTkwXHU3NTkyXHU3NTkzXHU3NTk1XHU3NTk5XHU3NTljXHU3NWEyXHU3NWE0XHU3NWI0XHU3NWJhXHU3NWJmXHU3NWMwXHU3NWMxXHU3NWM0XHU3NWM2XHU3NWNjXHU3NWNlXHU3NWNmXHU3NWQ3XHU3NWRjXHU3NWRmXHU3NWUw''@;'; put 'put ''XHU3NWUxXHU3NWU0XHU3NWU3XHU3NWVjXHU3NWVlXHU3NWVmXHU3NWYxXHU3NWY5XHU3NjAwXHU3NjAyXHU3NjAzXHU3NjA0XHU3NjA3XHU3NjA4XHU3NjBhXHU3NjBjXHU3NjBmXHU3NjEyXHU3NjEzXHU3NjE1XHU3NjE2XHU3NjE5XHU3NjFiXHU3NjFjXHU3NjFkXHU3NjFlXHU3NjIzXHU3''@;'; put 'put ''NjI1XHU3NjI2XHU3NjI5XHU3NjJkXHU3NjMyXHU3NjMzXHU3NjM1XHU3NjM4XHU3NjM5Il0sWyI4ZmNlYTEiLCJcdTc2M2FcdTc2M2NcdTc2NGFcdTc2NDBcdTc2NDFcdTc2NDNcdTc2NDRcdTc2NDVcdTc2NDlcdTc2NGJcdTc2NTVcdTc2NTlcdTc2NWZcdTc2NjRcdTc2NjVcdTc2NmRcdTc2''@;'; put 'put ''NmVcdTc2NmZcdTc2NzFcdTc2NzRcdTc2ODFcdTc2ODVcdTc2OGNcdTc2OGRcdTc2OTVcdTc2OWJcdTc2OWNcdTc2OWRcdTc2OWZcdTc2YTBcdTc2YTIiLDYsIlx1NzZhYVx1NzZhZFx1NzZiZFx1NzZjMVx1NzZjNVx1NzZjOVx1NzZjYlx1NzZjY1x1NzZjZVx1NzZkNFx1NzZkOVx1NzZlMFx1''@;'; put 'put ''NzZlNlx1NzZlOFx1NzZlY1x1NzZmMFx1NzZmMVx1NzZmNlx1NzZmOVx1NzZmY1x1NzcwMFx1NzcwNlx1NzcwYVx1NzcwZVx1NzcxMlx1NzcxNFx1NzcxNVx1NzcxN1x1NzcxOVx1NzcxYVx1NzcxY1x1NzcyMlx1NzcyOFx1NzcyZFx1NzcyZVx1NzcyZlx1NzczNFx1NzczNVx1NzczNlx1Nzcz''@;'; put 'put ''OVx1NzczZFx1NzczZVx1Nzc0Mlx1Nzc0NVx1Nzc0Nlx1Nzc0YVx1Nzc0ZFx1Nzc0ZVx1Nzc0Zlx1Nzc1Mlx1Nzc1Nlx1Nzc1N1x1Nzc1Y1x1Nzc1ZVx1Nzc1Zlx1Nzc2MFx1Nzc2MiJdLFsiOGZjZmExIiwiXHU3NzY0XHU3NzY3XHU3NzZhXHU3NzZjXHU3NzcwXHU3NzcyXHU3NzczXHU3Nzc0''@;'; put 'put ''XHU3NzdhXHU3NzdkXHU3NzgwXHU3Nzg0XHU3NzhjXHU3NzhkXHU3Nzk0XHU3Nzk1XHU3Nzk2XHU3NzlhXHU3NzlmXHU3N2EyXHU3N2E3XHU3N2FhXHU3N2FlXHU3N2FmXHU3N2IxXHU3N2I1XHU3N2JlXHU3N2MzXHU3N2M5XHU3N2QxXHU3N2QyXHU3N2Q1XHU3N2Q5XHU3N2RlXHU3N2RmXHU3''@;'; put 'put ''N2UwXHU3N2U0XHU3N2U2XHU3N2VhXHU3N2VjXHU3N2YwXHU3N2YxXHU3N2Y0XHU3N2Y4XHU3N2ZiXHU3ODA1XHU3ODA2XHU3ODA5XHU3ODBkXHU3ODBlXHU3ODExXHU3ODFkXHU3ODIxXHU3ODIyXHU3ODIzXHU3ODJkXHU3ODJlXHU3ODMwXHU3ODM1XHU3ODM3XHU3ODQzXHU3ODQ0XHU3ODQ3''@;'; put 'put ''XHU3ODQ4XHU3ODRjXHU3ODRlXHU3ODUyXHU3ODVjXHU3ODVlXHU3ODYwXHU3ODYxXHU3ODYzXHU3ODY0XHU3ODY4XHU3ODZhXHU3ODZlXHU3ODdhXHU3ODdlXHU3ODhhXHU3ODhmXHU3ODk0XHU3ODk4XHU3OGExXHU3ODlkXHU3ODllXHU3ODlmXHU3OGE0XHU3OGE4XHU3OGFjXHU3OGFkXHU3''@;'; put 'put ''OGIwXHU3OGIxXHU3OGIyXHU3OGIzIl0sWyI4ZmQwYTEiLCJcdTc4YmJcdTc4YmRcdTc4YmZcdTc4YzdcdTc4YzhcdTc4YzlcdTc4Y2NcdTc4Y2VcdTc4ZDJcdTc4ZDNcdTc4ZDVcdTc4ZDZcdTc4ZTRcdTc4ZGJcdTc4ZGZcdTc4ZTBcdTc4ZTFcdTc4ZTZcdTc4ZWFcdTc4ZjJcdTc4ZjNcdTc5''@;'; put 'put ''MDBcdTc4ZjZcdTc4ZjdcdTc4ZmFcdTc4ZmJcdTc4ZmZcdTc5MDZcdTc5MGNcdTc5MTBcdTc5MWFcdTc5MWNcdTc5MWVcdTc5MWZcdTc5MjBcdTc5MjVcdTc5MjdcdTc5MjlcdTc5MmRcdTc5MzFcdTc5MzRcdTc5MzVcdTc5M2JcdTc5M2RcdTc5M2ZcdTc5NDRcdTc5NDVcdTc5NDZcdTc5NGFc''@;'; put 'put ''dTc5NGJcdTc5NGZcdTc5NTFcdTc5NTRcdTc5NThcdTc5NWJcdTc5NWNcdTc5NjdcdTc5NjlcdTc5NmJcdTc5NzJcdTc5NzlcdTc5N2JcdTc5N2NcdTc5N2VcdTc5OGJcdTc5OGNcdTc5OTFcdTc5OTNcdTc5OTRcdTc5OTVcdTc5OTZcdTc5OThcdTc5OWJcdTc5OWNcdTc5YTFcdTc5YThcdTc5''@;'; put 'put ''YTlcdTc5YWJcdTc5YWZcdTc5YjFcdTc5YjRcdTc5YjhcdTc5YmJcdTc5YzJcdTc5YzRcdTc5YzdcdTc5YzhcdTc5Y2FcdTc5Y2ZcdTc5ZDRcdTc5ZDZcdTc5ZGFcdTc5ZGRcdTc5ZGUiXSxbIjhmZDFhMSIsIlx1NzllMFx1NzllMlx1NzllNVx1NzllYVx1NzllYlx1NzllZFx1NzlmMVx1Nzlm''@;'; put 'put ''OFx1NzlmY1x1N2EwMlx1N2EwM1x1N2EwN1x1N2EwOVx1N2EwYVx1N2EwY1x1N2ExMVx1N2ExNVx1N2ExYlx1N2ExZVx1N2EyMVx1N2EyN1x1N2EyYlx1N2EyZFx1N2EyZlx1N2EzMFx1N2EzNFx1N2EzNVx1N2EzOFx1N2EzOVx1N2EzYVx1N2E0NFx1N2E0NVx1N2E0N1x1N2E0OFx1N2E0Y1x1''@;'; put 'put ''N2E1NVx1N2E1Nlx1N2E1OVx1N2E1Y1x1N2E1ZFx1N2E1Zlx1N2E2MFx1N2E2NVx1N2E2N1x1N2E2YVx1N2E2ZFx1N2E3NVx1N2E3OFx1N2E3ZVx1N2E4MFx1N2E4Mlx1N2E4NVx1N2E4Nlx1N2E4YVx1N2E4Ylx1N2E5MFx1N2E5MVx1N2E5NFx1N2E5ZVx1N2FhMFx1N2FhM1x1N2FhY1x1N2Fi''@;'; put 'put ''M1x1N2FiNVx1N2FiOVx1N2FiYlx1N2FiY1x1N2FjNlx1N2FjOVx1N2FjY1x1N2FjZVx1N2FkMVx1N2FkYlx1N2FlOFx1N2FlOVx1N2FlYlx1N2FlY1x1N2FmMVx1N2FmNFx1N2FmYlx1N2FmZFx1N2FmZVx1N2IwN1x1N2IxNFx1N2IxZlx1N2IyM1x1N2IyN1x1N2IyOVx1N2IyYVx1N2IyYlx1''@;'; put 'put ''N2IyZFx1N2IyZVx1N2IyZlx1N2IzMCJdLFsiOGZkMmExIiwiXHU3YjMxXHU3YjM0XHU3YjNkXHU3YjNmXHU3YjQwXHU3YjQxXHU3YjQ3XHU3YjRlXHU3YjU1XHU3YjYwXHU3YjY0XHU3YjY2XHU3YjY5XHU3YjZhXHU3YjZkXHU3YjZmXHU3YjcyXHU3YjczXHU3Yjc3XHU3Yjg0XHU3Yjg5XHU3''@;'; put 'put ''YjhlXHU3YjkwXHU3YjkxXHU3Yjk2XHU3YjliXHU3YjllXHU3YmEwXHU3YmE1XHU3YmFjXHU3YmFmXHU3YmIwXHU3YmIyXHU3YmI1XHU3YmI2XHU3YmJhXHU3YmJiXHU3YmJjXHU3YmJkXHU3YmMyXHU3YmM1XHU3YmM4XHU3YmNhXHU3YmQ0XHU3YmQ2XHU3YmQ3XHU3YmQ5XHU3YmRhXHU3YmRi''@;'; put 'put ''XHU3YmU4XHU3YmVhXHU3YmYyXHU3YmY0XHU3YmY1XHU3YmY4XHU3YmY5XHU3YmZhXHU3YmZjXHU3YmZlXHU3YzAxXHU3YzAyXHU3YzAzXHU3YzA0XHU3YzA2XHU3YzA5XHU3YzBiXHU3YzBjXHU3YzBlXHU3YzBmXHU3YzE5XHU3YzFiXHU3YzIwXHU3YzI1XHU3YzI2XHU3YzI4XHU3YzJjXHU3''@;'; put 'put ''YzMxXHU3YzMzXHU3YzM0XHU3YzM2XHU3YzM5XHU3YzNhXHU3YzQ2XHU3YzRhXHU3YzU1XHU3YzUxXHU3YzUyXHU3YzUzXHU3YzU5Iiw1XSxbIjhmZDNhMSIsIlx1N2M2MVx1N2M2M1x1N2M2N1x1N2M2OVx1N2M2ZFx1N2M2ZVx1N2M3MFx1N2M3Mlx1N2M3OVx1N2M3Y1x1N2M3ZFx1N2M4Nlx1''@;'; put 'put ''N2M4N1x1N2M4Zlx1N2M5NFx1N2M5ZVx1N2NhMFx1N2NhNlx1N2NiMFx1N2NiNlx1N2NiN1x1N2NiYVx1N2NiYlx1N2NiY1x1N2NiZlx1N2NjNFx1N2NjN1x1N2NjOFx1N2NjOVx1N2NjZFx1N2NjZlx1N2NkM1x1N2NkNFx1N2NkNVx1N2NkN1x1N2NkOVx1N2NkYVx1N2NkZFx1N2NlNlx1N2Nl''@;'; put 'put ''OVx1N2NlYlx1N2NmNVx1N2QwM1x1N2QwN1x1N2QwOFx1N2QwOVx1N2QwZlx1N2QxMVx1N2QxMlx1N2QxM1x1N2QxNlx1N2QxZFx1N2QxZVx1N2QyM1x1N2QyNlx1N2QyYVx1N2QyZFx1N2QzMVx1N2QzY1x1N2QzZFx1N2QzZVx1N2Q0MFx1N2Q0MVx1N2Q0N1x1N2Q0OFx1N2Q0ZFx1N2Q1MVx1''@;'; put 'put ''N2Q1M1x1N2Q1N1x1N2Q1OVx1N2Q1YVx1N2Q1Y1x1N2Q1ZFx1N2Q2NVx1N2Q2N1x1N2Q2YVx1N2Q3MFx1N2Q3OFx1N2Q3YVx1N2Q3Ylx1N2Q3Zlx1N2Q4MVx1N2Q4Mlx1N2Q4M1x1N2Q4NVx1N2Q4Nlx1N2Q4OFx1N2Q4Ylx1N2Q4Y1x1N2Q4ZFx1N2Q5MVx1N2Q5Nlx1N2Q5N1x1N2Q5ZCJdLFsi''@;'; put 'put ''OGZkNGExIiwiXHU3ZDllXHU3ZGE2XHU3ZGE3XHU3ZGFhXHU3ZGIzXHU3ZGI2XHU3ZGI3XHU3ZGI5XHU3ZGMyIiw0LCJcdTdkY2NcdTdkY2RcdTdkY2VcdTdkZDdcdTdkZDlcdTdlMDBcdTdkZTJcdTdkZTVcdTdkZTZcdTdkZWFcdTdkZWJcdTdkZWRcdTdkZjFcdTdkZjVcdTdkZjZcdTdkZjlc''@;'; put 'put ''dTdkZmFcdTdlMDhcdTdlMTBcdTdlMTFcdTdlMTVcdTdlMTdcdTdlMWNcdTdlMWRcdTdlMjBcdTdlMjdcdTdlMjhcdTdlMmNcdTdlMmRcdTdlMmZcdTdlMzNcdTdlMzZcdTdlM2ZcdTdlNDRcdTdlNDVcdTdlNDdcdTdlNGVcdTdlNTBcdTdlNTJcdTdlNThcdTdlNWZcdTdlNjFcdTdlNjJcdTdl''@;'; put 'put ''NjVcdTdlNmJcdTdlNmVcdTdlNmZcdTdlNzNcdTdlNzhcdTdlN2VcdTdlODFcdTdlODZcdTdlODdcdTdlOGFcdTdlOGRcdTdlOTFcdTdlOTVcdTdlOThcdTdlOWFcdTdlOWRcdTdlOWVcdTdmM2NcdTdmM2JcdTdmM2RcdTdmM2VcdTdmM2ZcdTdmNDNcdTdmNDRcdTdmNDdcdTdmNGZcdTdmNTJc''@;'; put 'put ''dTdmNTNcdTdmNWJcdTdmNWNcdTdmNWRcdTdmNjFcdTdmNjNcdTdmNjRcdTdmNjVcdTdmNjZcdTdmNmQiXSxbIjhmZDVhMSIsIlx1N2Y3MVx1N2Y3ZFx1N2Y3ZVx1N2Y3Zlx1N2Y4MFx1N2Y4Ylx1N2Y4ZFx1N2Y4Zlx1N2Y5MFx1N2Y5MVx1N2Y5Nlx1N2Y5N1x1N2Y5Y1x1N2ZhMVx1N2ZhMlx1''@;'; put 'put ''N2ZhNlx1N2ZhYVx1N2ZhZFx1N2ZiNFx1N2ZiY1x1N2ZiZlx1N2ZjMFx1N2ZjM1x1N2ZjOFx1N2ZjZVx1N2ZjZlx1N2ZkYlx1N2ZkZlx1N2ZlM1x1N2ZlNVx1N2ZlOFx1N2ZlY1x1N2ZlZVx1N2ZlZlx1N2ZmMlx1N2ZmYVx1N2ZmZFx1N2ZmZVx1N2ZmZlx1ODAwN1x1ODAwOFx1ODAwYVx1ODAw''@;'; put 'put ''ZFx1ODAwZVx1ODAwZlx1ODAxMVx1ODAxM1x1ODAxNFx1ODAxNlx1ODAxZFx1ODAxZVx1ODAxZlx1ODAyMFx1ODAyNFx1ODAyNlx1ODAyY1x1ODAyZVx1ODAzMFx1ODAzNFx1ODAzNVx1ODAzN1x1ODAzOVx1ODAzYVx1ODAzY1x1ODAzZVx1ODA0MFx1ODA0NFx1ODA2MFx1ODA2NFx1ODA2Nlx1''@;'; put 'put ''ODA2ZFx1ODA3MVx1ODA3NVx1ODA4MVx1ODA4OFx1ODA4ZVx1ODA5Y1x1ODA5ZVx1ODBhNlx1ODBhN1x1ODBhYlx1ODBiOFx1ODBiOVx1ODBjOFx1ODBjZFx1ODBjZlx1ODBkMlx1ODBkNFx1ODBkNVx1ODBkN1x1ODBkOFx1ODBlMFx1ODBlZFx1ODBlZSJdLFsiOGZkNmExIiwiXHU4MGYwXHU4''@;'; put 'put ''MGYyXHU4MGYzXHU4MGY2XHU4MGY5XHU4MGZhXHU4MGZlXHU4MTAzXHU4MTBiXHU4MTE2XHU4MTE3XHU4MTE4XHU4MTFjXHU4MTFlXHU4MTIwXHU4MTI0XHU4MTI3XHU4MTJjXHU4MTMwXHU4MTM1XHU4MTNhXHU4MTNjXHU4MTQ1XHU4MTQ3XHU4MTRhXHU4MTRjXHU4MTUyXHU4MTU3XHU4MTYw''@;'; put 'put ''XHU4MTYxXHU4MTY3XHU4MTY4XHU4MTY5XHU4MTZkXHU4MTZmXHU4MTc3XHU4MTgxXHU4MTkwXHU4MTg0XHU4MTg1XHU4MTg2XHU4MThiXHU4MThlXHU4MTk2XHU4MTk4XHU4MTliXHU4MTllXHU4MWEyXHU4MWFlXHU4MWIyXHU4MWI0XHU4MWJiXHU4MWNiXHU4MWMzXHU4MWM1XHU4MWNhXHU4''@;'; put 'put ''MWNlXHU4MWNmXHU4MWQ1XHU4MWQ3XHU4MWRiXHU4MWRkXHU4MWRlXHU4MWUxXHU4MWU0XHU4MWViXHU4MWVjXHU4MWYwXHU4MWYxXHU4MWYyXHU4MWY1XHU4MWY2XHU4MWY4XHU4MWY5XHU4MWZkXHU4MWZmXHU4MjAwXHU4MjAzXHU4MjBmXHU4MjEzXHU4MjE0XHU4MjE5XHU4MjFhXHU4MjFk''@;'; put 'put ''XHU4MjIxXHU4MjIyXHU4MjI4XHU4MjMyXHU4MjM0XHU4MjNhXHU4MjQzXHU4MjQ0XHU4MjQ1XHU4MjQ2Il0sWyI4ZmQ3YTEiLCJcdTgyNGJcdTgyNGVcdTgyNGZcdTgyNTFcdTgyNTZcdTgyNWNcdTgyNjBcdTgyNjNcdTgyNjdcdTgyNmRcdTgyNzRcdTgyN2JcdTgyN2RcdTgyN2ZcdTgyODBc''@;'; put 'put ''dTgyODFcdTgyODNcdTgyODRcdTgyODdcdTgyODlcdTgyOGFcdTgyOGVcdTgyOTFcdTgyOTRcdTgyOTZcdTgyOThcdTgyOWFcdTgyOWJcdTgyYTBcdTgyYTFcdTgyYTNcdTgyYTRcdTgyYTdcdTgyYThcdTgyYTlcdTgyYWFcdTgyYWVcdTgyYjBcdTgyYjJcdTgyYjRcdTgyYjdcdTgyYmFcdTgy''@;'; put 'put ''YmNcdTgyYmVcdTgyYmZcdTgyYzZcdTgyZDBcdTgyZDVcdTgyZGFcdTgyZTBcdTgyZTJcdTgyZTRcdTgyZThcdTgyZWFcdTgyZWRcdTgyZWZcdTgyZjZcdTgyZjdcdTgyZmRcdTgyZmVcdTgzMDBcdTgzMDFcdTgzMDdcdTgzMDhcdTgzMGFcdTgzMGJcdTgzNTRcdTgzMWJcdTgzMWRcdTgzMWVc''@;'; put 'put ''dTgzMWZcdTgzMjFcdTgzMjJcdTgzMmNcdTgzMmRcdTgzMmVcdTgzMzBcdTgzMzNcdTgzMzdcdTgzM2FcdTgzM2NcdTgzM2RcdTgzNDJcdTgzNDNcdTgzNDRcdTgzNDdcdTgzNGRcdTgzNGVcdTgzNTFcdTgzNTVcdTgzNTZcdTgzNTdcdTgzNzBcdTgzNzgiXSxbIjhmZDhhMSIsIlx1ODM3ZFx1''@;'; put 'put ''ODM3Zlx1ODM4MFx1ODM4Mlx1ODM4NFx1ODM4Nlx1ODM4ZFx1ODM5Mlx1ODM5NFx1ODM5NVx1ODM5OFx1ODM5OVx1ODM5Ylx1ODM5Y1x1ODM5ZFx1ODNhNlx1ODNhN1x1ODNhOVx1ODNhY1x1ODNiZVx1ODNiZlx1ODNjMFx1ODNjN1x1ODNjOVx1ODNjZlx1ODNkMFx1ODNkMVx1ODNkNFx1ODNk''@;'; put 'put ''ZFx1ODM1M1x1ODNlOFx1ODNlYVx1ODNmNlx1ODNmOFx1ODNmOVx1ODNmY1x1ODQwMVx1ODQwNlx1ODQwYVx1ODQwZlx1ODQxMVx1ODQxNVx1ODQxOVx1ODNhZFx1ODQyZlx1ODQzOVx1ODQ0NVx1ODQ0N1x1ODQ0OFx1ODQ0YVx1ODQ0ZFx1ODQ0Zlx1ODQ1MVx1ODQ1Mlx1ODQ1Nlx1ODQ1OFx1''@;'; put 'put ''ODQ1OVx1ODQ1YVx1ODQ1Y1x1ODQ2MFx1ODQ2NFx1ODQ2NVx1ODQ2N1x1ODQ2YVx1ODQ3MFx1ODQ3M1x1ODQ3NFx1ODQ3Nlx1ODQ3OFx1ODQ3Y1x1ODQ3ZFx1ODQ4MVx1ODQ4NVx1ODQ5Mlx1ODQ5M1x1ODQ5NVx1ODQ5ZVx1ODRhNlx1ODRhOFx1ODRhOVx1ODRhYVx1ODRhZlx1ODRiMVx1ODRi''@;'; put 'put ''NFx1ODRiYVx1ODRiZFx1ODRiZVx1ODRjMFx1ODRjMlx1ODRjN1x1ODRjOFx1ODRjY1x1ODRjZlx1ODRkMyJdLFsiOGZkOWExIiwiXHU4NGRjXHU4NGU3XHU4NGVhXHU4NGVmXHU4NGYwXHU4NGYxXHU4NGYyXHU4NGY3XHU4NTMyXHU4NGZhXHU4NGZiXHU4NGZkXHU4NTAyXHU4NTAzXHU4NTA3''@;'; put 'put ''XHU4NTBjXHU4NTBlXHU4NTEwXHU4NTFjXHU4NTFlXHU4NTIyXHU4NTIzXHU4NTI0XHU4NTI1XHU4NTI3XHU4NTJhXHU4NTJiXHU4NTJmXHU4NTMzXHU4NTM0XHU4NTM2XHU4NTNmXHU4NTQ2XHU4NTRmIiw0LCJcdTg1NTZcdTg1NTlcdTg1NWMiLDYsIlx1ODU2NFx1ODU2Ylx1ODU2Zlx1ODU3''@;'; put 'put ''OVx1ODU3YVx1ODU3Ylx1ODU3ZFx1ODU3Zlx1ODU4MVx1ODU4NVx1ODU4Nlx1ODU4OVx1ODU4Ylx1ODU4Y1x1ODU4Zlx1ODU5M1x1ODU5OFx1ODU5ZFx1ODU5Zlx1ODVhMFx1ODVhMlx1ODVhNVx1ODVhN1x1ODViNFx1ODViNlx1ODViN1x1ODViOFx1ODViY1x1ODViZFx1ODViZVx1ODViZlx1''@;'; put 'put ''ODVjMlx1ODVjN1x1ODVjYVx1ODVjYlx1ODVjZVx1ODVhZFx1ODVkOFx1ODVkYVx1ODVkZlx1ODVlMFx1ODVlNlx1ODVlOFx1ODVlZFx1ODVmM1x1ODVmNlx1ODVmYyJdLFsiOGZkYWExIiwiXHU4NWZmXHU4NjAwXHU4NjA0XHU4NjA1XHU4NjBkXHU4NjBlXHU4NjEwXHU4NjExXHU4NjEyXHU4''@;'; put 'put ''NjE4XHU4NjE5XHU4NjFiXHU4NjFlXHU4NjIxXHU4NjI3XHU4NjI5XHU4NjM2XHU4NjM4XHU4NjNhXHU4NjNjXHU4NjNkXHU4NjQwXHU4NjQyXHU4NjQ2XHU4NjUyXHU4NjUzXHU4NjU2XHU4NjU3XHU4NjU4XHU4NjU5XHU4NjVkXHU4NjYwIiw0LCJcdTg2NjlcdTg2NmNcdTg2NmZcdTg2NzVc''@;'; put 'put ''dTg2NzZcdTg2NzdcdTg2N2FcdTg2OGRcdTg2OTFcdTg2OTZcdTg2OThcdTg2OWFcdTg2OWNcdTg2YTFcdTg2YTZcdTg2YTdcdTg2YThcdTg2YWRcdTg2YjFcdTg2YjNcdTg2YjRcdTg2YjVcdTg2YjdcdTg2YjhcdTg2YjlcdTg2YmZcdTg2YzBcdTg2YzFcdTg2YzNcdTg2YzVcdTg2ZDFcdTg2''@;'; put 'put ''ZDJcdTg2ZDVcdTg2ZDdcdTg2ZGFcdTg2ZGNcdTg2ZTBcdTg2ZTNcdTg2ZTVcdTg2ZTdcdTg2ODhcdTg2ZmFcdTg2ZmNcdTg2ZmRcdTg3MDRcdTg3MDVcdTg3MDdcdTg3MGJcdTg3MGVcdTg3MGZcdTg3MTBcdTg3MTNcdTg3MTRcdTg3MTlcdTg3MWVcdTg3MWZcdTg3MjFcdTg3MjMiXSxbIjhm''@;'; put 'put ''ZGJhMSIsIlx1ODcyOFx1ODcyZVx1ODcyZlx1ODczMVx1ODczMlx1ODczOVx1ODczYVx1ODczY1x1ODczZFx1ODczZVx1ODc0MFx1ODc0M1x1ODc0NVx1ODc0ZFx1ODc1OFx1ODc1ZFx1ODc2MVx1ODc2NFx1ODc2NVx1ODc2Zlx1ODc3MVx1ODc3Mlx1ODc3Ylx1ODc4MyIsNiwiXHU4NzhiXHU4''@;'; put 'put ''NzhjXHU4NzkwXHU4NzkzXHU4Nzk1XHU4Nzk3XHU4Nzk4XHU4Nzk5XHU4NzllXHU4N2EwXHU4N2EzXHU4N2E3XHU4N2FjXHU4N2FkXHU4N2FlXHU4N2IxXHU4N2I1XHU4N2JlXHU4N2JmXHU4N2MxXHU4N2M4XHU4N2M5XHU4N2NhXHU4N2NlXHU4N2Q1XHU4N2Q2XHU4N2Q5XHU4N2RhXHU4N2Rj''@;'; put 'put ''XHU4N2RmXHU4N2UyXHU4N2UzXHU4N2U0XHU4N2VhXHU4N2ViXHU4N2VkXHU4N2YxXHU4N2YzXHU4N2Y4XHU4N2ZhXHU4N2ZmXHU4ODAxXHU4ODAzXHU4ODA2XHU4ODA5XHU4ODBhXHU4ODBiXHU4ODEwXHU4ODE5XHU4ODEyXHU4ODEzXHU4ODE0XHU4ODE4XHU4ODFhXHU4ODFiXHU4ODFjXHU4''@;'; put 'put ''ODFlXHU4ODFmXHU4ODI4XHU4ODJkXHU4ODJlXHU4ODMwXHU4ODMyXHU4ODM1Il0sWyI4ZmRjYTEiLCJcdTg4M2FcdTg4M2NcdTg4NDFcdTg4NDNcdTg4NDVcdTg4NDhcdTg4NDlcdTg4NGFcdTg4NGJcdTg4NGVcdTg4NTFcdTg4NTVcdTg4NTZcdTg4NThcdTg4NWFcdTg4NWNcdTg4NWZcdTg4''@;'; put 'put ''NjBcdTg4NjRcdTg4NjlcdTg4NzFcdTg4NzlcdTg4N2JcdTg4ODBcdTg4OThcdTg4OWFcdTg4OWJcdTg4OWNcdTg4OWZcdTg4YTBcdTg4YThcdTg4YWFcdTg4YmFcdTg4YmRcdTg4YmVcdTg4YzBcdTg4Y2EiLDQsIlx1ODhkMVx1ODhkMlx1ODhkM1x1ODhkYlx1ODhkZVx1ODhlN1x1ODhlZlx1''@;'; put 'put ''ODhmMFx1ODhmMVx1ODhmNVx1ODhmN1x1ODkwMVx1ODkwNlx1ODkwZFx1ODkwZVx1ODkwZlx1ODkxNVx1ODkxNlx1ODkxOFx1ODkxOVx1ODkxYVx1ODkxY1x1ODkyMFx1ODkyNlx1ODkyN1x1ODkyOFx1ODkzMFx1ODkzMVx1ODkzMlx1ODkzNVx1ODkzOVx1ODkzYVx1ODkzZVx1ODk0MFx1ODk0''@;'; put 'put ''Mlx1ODk0NVx1ODk0Nlx1ODk0OVx1ODk0Zlx1ODk1Mlx1ODk1N1x1ODk1YVx1ODk1Ylx1ODk1Y1x1ODk2MVx1ODk2Mlx1ODk2M1x1ODk2Ylx1ODk2ZVx1ODk3MFx1ODk3M1x1ODk3NVx1ODk3YSJdLFsiOGZkZGExIiwiXHU4OTdiXHU4OTdjXHU4OTdkXHU4OTg5XHU4OThkXHU4OTkwXHU4OTk0''@;'; put 'put ''XHU4OTk1XHU4OTliXHU4OTljXHU4OTlmXHU4OWEwXHU4OWE1XHU4OWIwXHU4OWI0XHU4OWI1XHU4OWI2XHU4OWI3XHU4OWJjXHU4OWQ0Iiw0LCJcdTg5ZTVcdTg5ZTlcdTg5ZWJcdTg5ZWRcdTg5ZjFcdTg5ZjNcdTg5ZjZcdTg5ZjlcdTg5ZmRcdTg5ZmZcdThhMDRcdThhMDVcdThhMDdcdThh''@;'; put 'put ''MGZcdThhMTFcdThhMTJcdThhMTRcdThhMTVcdThhMWVcdThhMjBcdThhMjJcdThhMjRcdThhMjZcdThhMmJcdThhMmNcdThhMmZcdThhMzVcdThhMzdcdThhM2RcdThhM2VcdThhNDBcdThhNDNcdThhNDVcdThhNDdcdThhNDlcdThhNGRcdThhNGVcdThhNTNcdThhNTZcdThhNTdcdThhNThc''@;'; put 'put ''dThhNWNcdThhNWRcdThhNjFcdThhNjVcdThhNjdcdThhNzVcdThhNzZcdThhNzdcdThhNzlcdThhN2FcdThhN2JcdThhN2VcdThhN2ZcdThhODBcdThhODNcdThhODZcdThhOGJcdThhOGZcdThhOTBcdThhOTJcdThhOTZcdThhOTdcdThhOTlcdThhOWZcdThhYTdcdThhYTlcdThhYWVcdThh''@;'; put 'put ''YWZcdThhYjMiXSxbIjhmZGVhMSIsIlx1OGFiNlx1OGFiN1x1OGFiYlx1OGFiZVx1OGFjM1x1OGFjNlx1OGFjOFx1OGFjOVx1OGFjYVx1OGFkMVx1OGFkM1x1OGFkNFx1OGFkNVx1OGFkN1x1OGFkZFx1OGFkZlx1OGFlY1x1OGFmMFx1OGFmNFx1OGFmNVx1OGFmNlx1OGFmY1x1OGFmZlx1OGIw''@;'; put 'put ''NVx1OGIwNlx1OGIwYlx1OGIxMVx1OGIxY1x1OGIxZVx1OGIxZlx1OGIwYVx1OGIyZFx1OGIzMFx1OGIzN1x1OGIzY1x1OGI0MiIsNCwiXHU4YjQ4XHU4YjUyXHU4YjUzXHU4YjU0XHU4YjU5XHU4YjRkXHU4YjVlXHU4YjYzXHU4YjZkXHU4Yjc2XHU4Yjc4XHU4Yjc5XHU4YjdjXHU4YjdlXHU4''@;'; put 'put ''YjgxXHU4Yjg0XHU4Yjg1XHU4YjhiXHU4YjhkXHU4YjhmXHU4Yjk0XHU4Yjk1XHU4YjljXHU4YjllXHU4YjlmXHU4YzM4XHU4YzM5XHU4YzNkXHU4YzNlXHU4YzQ1XHU4YzQ3XHU4YzQ5XHU4YzRiXHU4YzRmXHU4YzUxXHU4YzUzXHU4YzU0XHU4YzU3XHU4YzU4XHU4YzViXHU4YzVkXHU4YzU5''@;'; put 'put ''XHU4YzYzXHU4YzY0XHU4YzY2XHU4YzY4XHU4YzY5XHU4YzZkXHU4YzczXHU4Yzc1XHU4Yzc2XHU4YzdiXHU4YzdlXHU4Yzg2Il0sWyI4ZmRmYTEiLCJcdThjODdcdThjOGJcdThjOTBcdThjOTJcdThjOTNcdThjOTlcdThjOWJcdThjOWNcdThjYTRcdThjYjlcdThjYmFcdThjYzVcdThjYzZc''@;'; put 'put ''dThjYzlcdThjY2JcdThjY2ZcdThjZDZcdThjZDVcdThjZDlcdThjZGRcdThjZTFcdThjZThcdThjZWNcdThjZWZcdThjZjBcdThjZjJcdThjZjVcdThjZjdcdThjZjhcdThjZmVcdThjZmZcdThkMDFcdThkMDNcdThkMDlcdThkMTJcdThkMTdcdThkMWJcdThkNjVcdThkNjlcdThkNmNcdThk''@;'; put 'put ''NmVcdThkN2ZcdThkODJcdThkODRcdThkODhcdThkOGRcdThkOTBcdThkOTFcdThkOTVcdThkOWVcdThkOWZcdThkYTBcdThkYTZcdThkYWJcdThkYWNcdThkYWZcdThkYjJcdThkYjVcdThkYjdcdThkYjlcdThkYmJcdThkYzBcdThkYzVcdThkYzZcdThkYzdcdThkYzhcdThkY2FcdThkY2Vc''@;'; put 'put ''dThkZDFcdThkZDRcdThkZDVcdThkZDdcdThkZDlcdThkZTRcdThkZTVcdThkZTdcdThkZWNcdThkZjBcdThkYmNcdThkZjFcdThkZjJcdThkZjRcdThkZmRcdThlMDFcdThlMDRcdThlMDVcdThlMDZcdThlMGJcdThlMTFcdThlMTRcdThlMTZcdThlMjBcdThlMjFcdThlMjIiXSxbIjhmZTBh''@;'; put 'put ''MSIsIlx1OGUyM1x1OGUyNlx1OGUyN1x1OGUzMVx1OGUzM1x1OGUzNlx1OGUzN1x1OGUzOFx1OGUzOVx1OGUzZFx1OGU0MFx1OGU0MVx1OGU0Ylx1OGU0ZFx1OGU0ZVx1OGU0Zlx1OGU1NFx1OGU1Ylx1OGU1Y1x1OGU1ZFx1OGU1ZVx1OGU2MVx1OGU2Mlx1OGU2OVx1OGU2Y1x1OGU2ZFx1OGU2''@;'; put 'put ''Zlx1OGU3MFx1OGU3MVx1OGU3OVx1OGU3YVx1OGU3Ylx1OGU4Mlx1OGU4M1x1OGU4OVx1OGU5MFx1OGU5Mlx1OGU5NVx1OGU5YVx1OGU5Ylx1OGU5ZFx1OGU5ZVx1OGVhMlx1OGVhN1x1OGVhOVx1OGVhZFx1OGVhZVx1OGViM1x1OGViNVx1OGViYVx1OGViYlx1OGVjMFx1OGVjMVx1OGVjM1x1''@;'; put 'put ''OGVjNFx1OGVjN1x1OGVjZlx1OGVkMVx1OGVkNFx1OGVkY1x1OGVlOFx1OGVlZVx1OGVmMFx1OGVmMVx1OGVmN1x1OGVmOVx1OGVmYVx1OGVlZFx1OGYwMFx1OGYwMlx1OGYwN1x1OGYwOFx1OGYwZlx1OGYxMFx1OGYxNlx1OGYxN1x1OGYxOFx1OGYxZVx1OGYyMFx1OGYyMVx1OGYyM1x1OGYy''@;'; put 'put ''NVx1OGYyN1x1OGYyOFx1OGYyY1x1OGYyZFx1OGYyZVx1OGYzNFx1OGYzNVx1OGYzNlx1OGYzN1x1OGYzYVx1OGY0MFx1OGY0MSJdLFsiOGZlMWExIiwiXHU4ZjQzXHU4ZjQ3XHU4ZjRmXHU4ZjUxIiw0LCJcdThmNThcdThmNWRcdThmNWVcdThmNjVcdThmOWRcdThmYTBcdThmYTFcdThmYTRc''@;'; put 'put ''dThmYTVcdThmYTZcdThmYjVcdThmYjZcdThmYjhcdThmYmVcdThmYzBcdThmYzFcdThmYzZcdThmY2FcdThmY2JcdThmY2RcdThmZDBcdThmZDJcdThmZDNcdThmZDVcdThmZTBcdThmZTNcdThmZTRcdThmZThcdThmZWVcdThmZjFcdThmZjVcdThmZjZcdThmZmJcdThmZmVcdTkwMDJcdTkw''@;'; put 'put ''MDRcdTkwMDhcdTkwMGNcdTkwMThcdTkwMWJcdTkwMjhcdTkwMjlcdTkwMmZcdTkwMmFcdTkwMmNcdTkwMmRcdTkwMzNcdTkwMzRcdTkwMzdcdTkwM2ZcdTkwNDNcdTkwNDRcdTkwNGNcdTkwNWJcdTkwNWRcdTkwNjJcdTkwNjZcdTkwNjdcdTkwNmNcdTkwNzBcdTkwNzRcdTkwNzlcdTkwODVc''@;'; put 'put ''dTkwODhcdTkwOGJcdTkwOGNcdTkwOGVcdTkwOTBcdTkwOTVcdTkwOTdcdTkwOThcdTkwOTlcdTkwOWJcdTkwYTBcdTkwYTFcdTkwYTJcdTkwYTVcdTkwYjBcdTkwYjJcdTkwYjNcdTkwYjRcdTkwYjZcdTkwYmRcdTkwY2NcdTkwYmVcdTkwYzMiXSxbIjhmZTJhMSIsIlx1OTBjNFx1OTBjNVx1''@;'; put 'put ''OTBjN1x1OTBjOFx1OTBkNVx1OTBkN1x1OTBkOFx1OTBkOVx1OTBkY1x1OTBkZFx1OTBkZlx1OTBlNVx1OTBkMlx1OTBmNlx1OTBlYlx1OTBlZlx1OTBmMFx1OTBmNFx1OTBmZVx1OTBmZlx1OTEwMFx1OTEwNFx1OTEwNVx1OTEwNlx1OTEwOFx1OTEwZFx1OTExMFx1OTExNFx1OTExNlx1OTEx''@;'; put 'put ''N1x1OTExOFx1OTExYVx1OTExY1x1OTExZVx1OTEyMFx1OTEyNVx1OTEyMlx1OTEyM1x1OTEyN1x1OTEyOVx1OTEyZVx1OTEyZlx1OTEzMVx1OTEzNFx1OTEzNlx1OTEzN1x1OTEzOVx1OTEzYVx1OTEzY1x1OTEzZFx1OTE0M1x1OTE0N1x1OTE0OFx1OTE0Zlx1OTE1M1x1OTE1N1x1OTE1OVx1''@;'; put 'put ''OTE1YVx1OTE1Ylx1OTE2MVx1OTE2NFx1OTE2N1x1OTE2ZFx1OTE3NFx1OTE3OVx1OTE3YVx1OTE3Ylx1OTE4MVx1OTE4M1x1OTE4NVx1OTE4Nlx1OTE4YVx1OTE4ZVx1OTE5MVx1OTE5M1x1OTE5NFx1OTE5NVx1OTE5OFx1OTE5ZVx1OTFhMVx1OTFhNlx1OTFhOFx1OTFhY1x1OTFhZFx1OTFh''@;'; put 'put ''ZVx1OTFiMFx1OTFiMVx1OTFiMlx1OTFiM1x1OTFiNlx1OTFiYlx1OTFiY1x1OTFiZFx1OTFiZiJdLFsiOGZlM2ExIiwiXHU5MWMyXHU5MWMzXHU5MWM1XHU5MWQzXHU5MWQ0XHU5MWQ3XHU5MWQ5XHU5MWRhXHU5MWRlXHU5MWU0XHU5MWU1XHU5MWU5XHU5MWVhXHU5MWVjIiw1LCJcdTkxZjdc''@;'; put 'put ''dTkxZjlcdTkxZmJcdTkxZmRcdTkyMDBcdTkyMDFcdTkyMDRcdTkyMDVcdTkyMDZcdTkyMDdcdTkyMDlcdTkyMGFcdTkyMGNcdTkyMTBcdTkyMTJcdTkyMTNcdTkyMTZcdTkyMThcdTkyMWNcdTkyMWRcdTkyMjNcdTkyMjRcdTkyMjVcdTkyMjZcdTkyMjhcdTkyMmVcdTkyMmZcdTkyMzBcdTky''@;'; put 'put ''MzNcdTkyMzVcdTkyMzZcdTkyMzhcdTkyMzlcdTkyM2FcdTkyM2NcdTkyM2VcdTkyNDBcdTkyNDJcdTkyNDNcdTkyNDZcdTkyNDdcdTkyNGFcdTkyNGRcdTkyNGVcdTkyNGZcdTkyNTFcdTkyNThcdTkyNTlcdTkyNWNcdTkyNWRcdTkyNjBcdTkyNjFcdTkyNjVcdTkyNjdcdTkyNjhcdTkyNjlc''@;'; put 'put ''dTkyNmVcdTkyNmZcdTkyNzBcdTkyNzUiLDQsIlx1OTI3Ylx1OTI3Y1x1OTI3ZFx1OTI3Zlx1OTI4OFx1OTI4OVx1OTI4YVx1OTI4ZFx1OTI4ZVx1OTI5Mlx1OTI5NyJdLFsiOGZlNGExIiwiXHU5Mjk5XHU5MjlmXHU5MmEwXHU5MmE0XHU5MmE1XHU5MmE3XHU5MmE4XHU5MmFiXHU5MmFmXHU5''@;'; put 'put ''MmIyXHU5MmI2XHU5MmI4XHU5MmJhXHU5MmJiXHU5MmJjXHU5MmJkXHU5MmJmIiw0LCJcdTkyYzVcdTkyYzZcdTkyYzdcdTkyYzhcdTkyY2JcdTkyY2NcdTkyY2RcdTkyY2VcdTkyZDBcdTkyZDNcdTkyZDVcdTkyZDdcdTkyZDhcdTkyZDlcdTkyZGNcdTkyZGRcdTkyZGZcdTkyZTBcdTkyZTFc''@;'; put 'put ''dTkyZTNcdTkyZTVcdTkyZTdcdTkyZThcdTkyZWNcdTkyZWVcdTkyZjBcdTkyZjlcdTkyZmJcdTkyZmZcdTkzMDBcdTkzMDJcdTkzMDhcdTkzMGRcdTkzMTFcdTkzMTRcdTkzMTVcdTkzMWNcdTkzMWRcdTkzMWVcdTkzMWZcdTkzMjFcdTkzMjRcdTkzMjVcdTkzMjdcdTkzMjlcdTkzMmFcdTkz''@;'; put 'put ''MzNcdTkzMzRcdTkzMzZcdTkzMzdcdTkzNDdcdTkzNDhcdTkzNDlcdTkzNTBcdTkzNTFcdTkzNTJcdTkzNTVcdTkzNTdcdTkzNThcdTkzNWFcdTkzNWVcdTkzNjRcdTkzNjVcdTkzNjdcdTkzNjlcdTkzNmFcdTkzNmRcdTkzNmZcdTkzNzBcdTkzNzFcdTkzNzNcdTkzNzRcdTkzNzYiXSxbIjhm''@;'; put 'put ''ZTVhMSIsIlx1OTM3YVx1OTM3ZFx1OTM3Zlx1OTM4MFx1OTM4MVx1OTM4Mlx1OTM4OFx1OTM4YVx1OTM4Ylx1OTM4ZFx1OTM4Zlx1OTM5Mlx1OTM5NVx1OTM5OFx1OTM5Ylx1OTM5ZVx1OTNhMVx1OTNhM1x1OTNhNFx1OTNhNlx1OTNhOFx1OTNhYlx1OTNiNFx1OTNiNVx1OTNiNlx1OTNiYVx1''@;'; put 'put ''OTNhOVx1OTNjMVx1OTNjNFx1OTNjNVx1OTNjNlx1OTNjN1x1OTNjOSIsNCwiXHU5M2QzXHU5M2Q5XHU5M2RjXHU5M2RlXHU5M2RmXHU5M2UyXHU5M2U2XHU5M2U3XHU5M2Y5XHU5M2Y3XHU5M2Y4XHU5M2ZhXHU5M2ZiXHU5M2ZkXHU5NDAxXHU5NDAyXHU5NDA0XHU5NDA4XHU5NDA5XHU5NDBk''@;'; put 'put ''XHU5NDBlXHU5NDBmXHU5NDE1XHU5NDE2XHU5NDE3XHU5NDFmXHU5NDJlXHU5NDJmXHU5NDMxXHU5NDMyXHU5NDMzXHU5NDM0XHU5NDNiXHU5NDNmXHU5NDNkXHU5NDQzXHU5NDQ1XHU5NDQ4XHU5NDRhXHU5NDRjXHU5NDU1XHU5NDU5XHU5NDVjXHU5NDVmXHU5NDYxXHU5NDYzXHU5NDY4XHU5''@;'; put 'put ''NDZiXHU5NDZkXHU5NDZlXHU5NDZmXHU5NDcxXHU5NDcyXHU5NDg0XHU5NDgzXHU5NTc4XHU5NTc5Il0sWyI4ZmU2YTEiLCJcdTk1N2VcdTk1ODRcdTk1ODhcdTk1OGNcdTk1OGRcdTk1OGVcdTk1OWRcdTk1OWVcdTk1OWZcdTk1YTFcdTk1YTZcdTk1YTlcdTk1YWJcdTk1YWNcdTk1YjRcdTk1''@;'; put 'put ''YjZcdTk1YmFcdTk1YmRcdTk1YmZcdTk1YzZcdTk1YzhcdTk1YzlcdTk1Y2JcdTk1ZDBcdTk1ZDFcdTk1ZDJcdTk1ZDNcdTk1ZDlcdTk1ZGFcdTk1ZGRcdTk1ZGVcdTk1ZGZcdTk1ZTBcdTk1ZTRcdTk1ZTZcdTk2MWRcdTk2MWVcdTk2MjJcdTk2MjRcdTk2MjVcdTk2MjZcdTk2MmNcdTk2MzFc''@;'; put 'put ''dTk2MzNcdTk2MzdcdTk2MzhcdTk2MzlcdTk2M2FcdTk2M2NcdTk2M2RcdTk2NDFcdTk2NTJcdTk2NTRcdTk2NTZcdTk2NTdcdTk2NThcdTk2NjFcdTk2NmVcdTk2NzRcdTk2N2JcdTk2N2NcdTk2N2VcdTk2N2ZcdTk2ODFcdTk2ODJcdTk2ODNcdTk2ODRcdTk2ODlcdTk2OTFcdTk2OTZcdTk2''@;'; put 'put ''OWFcdTk2OWRcdTk2OWZcdTk2YTRcdTk2YTVcdTk2YTZcdTk2YTlcdTk2YWVcdTk2YWZcdTk2YjNcdTk2YmFcdTk2Y2FcdTk2ZDJcdTVkYjJcdTk2ZDhcdTk2ZGFcdTk2ZGRcdTk2ZGVcdTk2ZGZcdTk2ZTlcdTk2ZWZcdTk2ZjFcdTk2ZmFcdTk3MDIiXSxbIjhmZTdhMSIsIlx1OTcwM1x1OTcw''@;'; put 'put ''NVx1OTcwOVx1OTcxYVx1OTcxYlx1OTcxZFx1OTcyMVx1OTcyMlx1OTcyM1x1OTcyOFx1OTczMVx1OTczM1x1OTc0MVx1OTc0M1x1OTc0YVx1OTc0ZVx1OTc0Zlx1OTc1NVx1OTc1N1x1OTc1OFx1OTc1YVx1OTc1Ylx1OTc2M1x1OTc2N1x1OTc2YVx1OTc2ZVx1OTc3M1x1OTc3Nlx1OTc3N1x1''@;'; put 'put ''OTc3OFx1OTc3Ylx1OTc3ZFx1OTc3Zlx1OTc4MFx1OTc4OVx1OTc5NVx1OTc5Nlx1OTc5N1x1OTc5OVx1OTc5YVx1OTc5ZVx1OTc5Zlx1OTdhMlx1OTdhY1x1OTdhZVx1OTdiMVx1OTdiMlx1OTdiNVx1OTdiNlx1OTdiOFx1OTdiOVx1OTdiYVx1OTdiY1x1OTdiZVx1OTdiZlx1OTdjMVx1OTdj''@;'; put 'put ''NFx1OTdjNVx1OTdjN1x1OTdjOVx1OTdjYVx1OTdjY1x1OTdjZFx1OTdjZVx1OTdkMFx1OTdkMVx1OTdkNFx1OTdkN1x1OTdkOFx1OTdkOVx1OTdkZFx1OTdkZVx1OTdlMFx1OTdkYlx1OTdlMVx1OTdlNFx1OTdlZlx1OTdmMVx1OTdmNFx1OTdmN1x1OTdmOFx1OTdmYVx1OTgwN1x1OTgwYVx1''@;'; put 'put ''OTgxOVx1OTgwZFx1OTgwZVx1OTgxNFx1OTgxNlx1OTgxY1x1OTgxZVx1OTgyMFx1OTgyM1x1OTgyNiJdLFsiOGZlOGExIiwiXHU5ODJiXHU5ODJlXHU5ODJmXHU5ODMwXHU5ODMyXHU5ODMzXHU5ODM1XHU5ODI1XHU5ODNlXHU5ODQ0XHU5ODQ3XHU5ODRhXHU5ODUxXHU5ODUyXHU5ODUzXHU5''@;'; put 'put ''ODU2XHU5ODU3XHU5ODU5XHU5ODVhXHU5ODYyXHU5ODYzXHU5ODY1XHU5ODY2XHU5ODZhXHU5ODZjXHU5OGFiXHU5OGFkXHU5OGFlXHU5OGIwXHU5OGI0XHU5OGI3XHU5OGI4XHU5OGJhXHU5OGJiXHU5OGJmXHU5OGMyXHU5OGM1XHU5OGM4XHU5OGNjXHU5OGUxXHU5OGUzXHU5OGU1XHU5OGU2''@;'; put 'put ''XHU5OGU3XHU5OGVhXHU5OGYzXHU5OGY2XHU5OTAyXHU5OTA3XHU5OTA4XHU5OTExXHU5OTE1XHU5OTE2XHU5OTE3XHU5OTFhXHU5OTFiXHU5OTFjXHU5OTFmXHU5OTIyXHU5OTI2XHU5OTI3XHU5OTJiXHU5OTMxIiw0LCJcdTk5MzlcdTk5M2FcdTk5M2JcdTk5M2NcdTk5NDBcdTk5NDFcdTk5''@;'; put 'put ''NDZcdTk5NDdcdTk5NDhcdTk5NGRcdTk5NGVcdTk5NTRcdTk5NThcdTk5NTlcdTk5NWJcdTk5NWNcdTk5NWVcdTk5NWZcdTk5NjBcdTk5OWJcdTk5OWRcdTk5OWZcdTk5YTZcdTk5YjBcdTk5YjFcdTk5YjJcdTk5YjUiXSxbIjhmZTlhMSIsIlx1OTliOVx1OTliYVx1OTliZFx1OTliZlx1OTlj''@;'; put 'put ''M1x1OTljOVx1OTlkM1x1OTlkNFx1OTlkOVx1OTlkYVx1OTlkY1x1OTlkZVx1OTllN1x1OTllYVx1OTllYlx1OTllY1x1OTlmMFx1OTlmNFx1OTlmNVx1OTlmOVx1OTlmZFx1OTlmZVx1OWEwMlx1OWEwM1x1OWEwNFx1OWEwYlx1OWEwY1x1OWExMFx1OWExMVx1OWExNlx1OWExZVx1OWEyMFx1''@;'; put 'put ''OWEyMlx1OWEyM1x1OWEyNFx1OWEyN1x1OWEyZFx1OWEyZVx1OWEzM1x1OWEzNVx1OWEzNlx1OWEzOFx1OWE0N1x1OWE0MVx1OWE0NFx1OWE0YVx1OWE0Ylx1OWE0Y1x1OWE0ZVx1OWE1MVx1OWE1NFx1OWE1Nlx1OWE1ZFx1OWFhYVx1OWFhY1x1OWFhZVx1OWFhZlx1OWFiMlx1OWFiNFx1OWFi''@;'; put 'put ''NVx1OWFiNlx1OWFiOVx1OWFiYlx1OWFiZVx1OWFiZlx1OWFjMVx1OWFjM1x1OWFjNlx1OWFjOFx1OWFjZVx1OWFkMFx1OWFkMlx1OWFkNVx1OWFkNlx1OWFkN1x1OWFkYlx1OWFkY1x1OWFlMFx1OWFlNFx1OWFlNVx1OWFlN1x1OWFlOVx1OWFlY1x1OWFmMlx1OWFmM1x1OWFmNVx1OWFmOVx1''@;'; put 'put ''OWFmYVx1OWFmZFx1OWFmZiIsNF0sWyI4ZmVhYTEiLCJcdTliMDRcdTliMDVcdTliMDhcdTliMDlcdTliMGJcdTliMGNcdTliMGRcdTliMGVcdTliMTBcdTliMTJcdTliMTZcdTliMTlcdTliMWJcdTliMWNcdTliMjBcdTliMjZcdTliMmJcdTliMmRcdTliMzNcdTliMzRcdTliMzVcdTliMzdc''@;'; put 'put ''dTliMzlcdTliM2FcdTliM2RcdTliNDhcdTliNGJcdTliNGNcdTliNTVcdTliNTZcdTliNTdcdTliNWJcdTliNWVcdTliNjFcdTliNjNcdTliNjVcdTliNjZcdTliNjhcdTliNmEiLDQsIlx1OWI3M1x1OWI3NVx1OWI3N1x1OWI3OFx1OWI3OVx1OWI3Zlx1OWI4MFx1OWI4NFx1OWI4NVx1OWI4''@;'; put 'put ''Nlx1OWI4N1x1OWI4OVx1OWI4YVx1OWI4Ylx1OWI4ZFx1OWI4Zlx1OWI5MFx1OWI5NFx1OWI5YVx1OWI5ZFx1OWI5ZVx1OWJhNlx1OWJhN1x1OWJhOVx1OWJhY1x1OWJiMFx1OWJiMVx1OWJiMlx1OWJiN1x1OWJiOFx1OWJiYlx1OWJiY1x1OWJiZVx1OWJiZlx1OWJjMVx1OWJjN1x1OWJjOFx1''@;'; put 'put ''OWJjZVx1OWJkMFx1OWJkN1x1OWJkOFx1OWJkZFx1OWJkZlx1OWJlNVx1OWJlN1x1OWJlYVx1OWJlYlx1OWJlZlx1OWJmM1x1OWJmN1x1OWJmOCJdLFsiOGZlYmExIiwiXHU5YmY5XHU5YmZhXHU5YmZkXHU5YmZmXHU5YzAwXHU5YzAyXHU5YzBiXHU5YzBmXHU5YzExXHU5YzE2XHU5YzE4XHU5''@;'; put 'put ''YzE5XHU5YzFhXHU5YzFjXHU5YzFlXHU5YzIyXHU5YzIzXHU5YzI2Iiw0LCJcdTljMzFcdTljMzVcdTljMzZcdTljMzdcdTljM2RcdTljNDFcdTljNDNcdTljNDRcdTljNDVcdTljNDlcdTljNGFcdTljNGVcdTljNGZcdTljNTBcdTljNTNcdTljNTRcdTljNTZcdTljNThcdTljNWJcdTljNWRc''@;'; put 'put ''dTljNWVcdTljNWZcdTljNjNcdTljNjlcdTljNmFcdTljNWNcdTljNmJcdTljNjhcdTljNmVcdTljNzBcdTljNzJcdTljNzVcdTljNzdcdTljN2JcdTljZTZcdTljZjJcdTljZjdcdTljZjlcdTlkMGJcdTlkMDJcdTlkMTFcdTlkMTdcdTlkMThcdTlkMWNcdTlkMWRcdTlkMWVcdTlkMmZcdTlk''@;'; put 'put ''MzBcdTlkMzJcdTlkMzNcdTlkMzRcdTlkM2FcdTlkM2NcdTlkNDVcdTlkM2RcdTlkNDJcdTlkNDNcdTlkNDdcdTlkNGFcdTlkNTNcdTlkNTRcdTlkNWZcdTlkNjNcdTlkNjJcdTlkNjVcdTlkNjlcdTlkNmFcdTlkNmJcdTlkNzBcdTlkNzZcdTlkNzdcdTlkN2IiXSxbIjhmZWNhMSIsIlx1OWQ3''@;'; put 'put ''Y1x1OWQ3ZVx1OWQ4M1x1OWQ4NFx1OWQ4Nlx1OWQ4YVx1OWQ4ZFx1OWQ4ZVx1OWQ5Mlx1OWQ5M1x1OWQ5NVx1OWQ5Nlx1OWQ5N1x1OWQ5OFx1OWRhMVx1OWRhYVx1OWRhY1x1OWRhZVx1OWRiMVx1OWRiNVx1OWRiOVx1OWRiY1x1OWRiZlx1OWRjM1x1OWRjN1x1OWRjOVx1OWRjYVx1OWRkNFx1''@;'; put 'put ''OWRkNVx1OWRkNlx1OWRkN1x1OWRkYVx1OWRkZVx1OWRkZlx1OWRlMFx1OWRlNVx1OWRlN1x1OWRlOVx1OWRlYlx1OWRlZVx1OWRmMFx1OWRmM1x1OWRmNFx1OWRmZVx1OWUwYVx1OWUwMlx1OWUwN1x1OWUwZVx1OWUxMFx1OWUxMVx1OWUxMlx1OWUxNVx1OWUxNlx1OWUxOVx1OWUxY1x1OWUx''@;'; put 'put ''ZFx1OWU3YVx1OWU3Ylx1OWU3Y1x1OWU4MFx1OWU4Mlx1OWU4M1x1OWU4NFx1OWU4NVx1OWU4N1x1OWU4ZVx1OWU4Zlx1OWU5Nlx1OWU5OFx1OWU5Ylx1OWU5ZVx1OWVhNFx1OWVhOFx1OWVhY1x1OWVhZVx1OWVhZlx1OWViMFx1OWViM1x1OWViNFx1OWViNVx1OWVjNlx1OWVjOFx1OWVjYlx1''@;'; put 'put ''OWVkNVx1OWVkZlx1OWVlNFx1OWVlN1x1OWVlY1x1OWVlZFx1OWVlZVx1OWVmMFx1OWVmMVx1OWVmMlx1OWVmNSJdLFsiOGZlZGExIiwiXHU5ZWY4XHU5ZWZmXHU5ZjAyXHU5ZjAzXHU5ZjA5XHU5ZjBmXHU5ZjEwXHU5ZjExXHU5ZjEyXHU5ZjE0XHU5ZjE2XHU5ZjE3XHU5ZjE5XHU5ZjFhXHU5''@;'; put 'put ''ZjFiXHU5ZjFmXHU5ZjIyXHU5ZjI2XHU5ZjJhXHU5ZjJiXHU5ZjJmXHU5ZjMxXHU5ZjMyXHU5ZjM0XHU5ZjM3XHU5ZjM5XHU5ZjNhXHU5ZjNjXHU5ZjNkXHU5ZjNmXHU5ZjQxXHU5ZjQzIiw0LCJcdTlmNTNcdTlmNTVcdTlmNTZcdTlmNTdcdTlmNThcdTlmNWFcdTlmNWRcdTlmNWVcdTlmNjhc''@;'; put 'put ''dTlmNjlcdTlmNmQiLDQsIlx1OWY3M1x1OWY3NVx1OWY3YVx1OWY3ZFx1OWY4Zlx1OWY5MFx1OWY5MVx1OWY5Mlx1OWY5NFx1OWY5Nlx1OWY5N1x1OWY5ZVx1OWZhMVx1OWZhMlx1OWZhM1x1OWZhNSJdXScpfSw1NjQzMjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDcxOTkzKSxf''@;'; put 'put ''PWIoOTA1MDkpLHA9YigzMjQ3KSxWPWIoMjcwNTQpLkJ1ZmZlcix3PWIoODM0MDcpLFA9YigzNjYzNiksRj1iKDI1NDQzKSxSPVYuYWxsb2MoMTI4KTtmdW5jdGlvbiB6KE4sTyl7cC5jYWxsKHRoaXMsImRpZ2VzdCIpLCJzdHJpbmciPT10eXBlb2YgTyYmKE89Vi5mcm9tKE8pKTt2YXIgSz0i''@;'; put 'put ''c2hhNTEyIj09PU58fCJzaGEzODQiPT09Tj8xMjg6NjQ7dGhpcy5fYWxnPU4sdGhpcy5fa2V5PU8sTy5sZW5ndGg+Sz9PPSgicm1kMTYwIj09PU4/bmV3IFA6RihOKSkudXBkYXRlKE8pLmRpZ2VzdCgpOk8ubGVuZ3RoPEsmJihPPVYuY29uY2F0KFtPLFJdLEspKTtmb3IodmFyIFk9dGhpcy5f''@;'; put 'put ''aXBhZD1WLmFsbG9jVW5zYWZlKEspLFc9dGhpcy5fb3BhZD1WLmFsbG9jVW5zYWZlKEspLHE9MDtxPEs7cSsrKVlbcV09NTReT1txXSxXW3FdPTkyXk9bcV07dGhpcy5faGFzaD0icm1kMTYwIj09PU4/bmV3IFA6RihOKSx0aGlzLl9oYXNoLnVwZGF0ZShZKX1JKHoscCksei5wcm90b3R5cGUu''@;'; put 'put ''X3VwZGF0ZT1mdW5jdGlvbihOKXt0aGlzLl9oYXNoLnVwZGF0ZShOKX0sei5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIE49dGhpcy5faGFzaC5kaWdlc3QoKTtyZXR1cm4oInJtZDE2MCI9PT10aGlzLl9hbGc/bmV3IFA6Rih0aGlzLl9hbGcpKS51cGRhdGUodGhpcy5fb3BhZCku''@;'; put 'put ''dXBkYXRlKE4pLmRpZ2VzdCgpfSxjZS5leHBvcnRzPWZ1bmN0aW9uKE8sSyl7cmV0dXJuInJtZDE2MCI9PT0oTz1PLnRvTG93ZXJDYXNlKCkpfHwicmlwZW1kMTYwIj09PU8/bmV3IHooInJtZDE2MCIsSyk6Im1kNSI9PT1PP25ldyBfKHcsSyk6bmV3IHooTyxLKX19LDU2NDcxOmNlPT57dmFy''@;'; put 'put ''IFg9e30udG9TdHJpbmc7Y2UuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihiKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT1YLmNhbGwoYil9fSw1NjcwMzpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImFyLXRuIix7bW9u''@;'; put 'put ''dGhzOiJcdTA2MmNcdTA2MjdcdTA2NDZcdTA2NDFcdTA2NGFfXHUwNjQxXHUwNjRhXHUwNjQxXHUwNjMxXHUwNjRhX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2NDFcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDYyY1x1MDY0OFx1MDYyN1x1MDY0''@;'; put 'put ''Nl9cdTA2MmNcdTA2NDhcdTA2NGFcdTA2NDRcdTA2NGFcdTA2MjlfXHUwNjIzXHUwNjQ4XHUwNjJhX1x1MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQxXHUwNjQ1XHUwNjI4XHUw''@;'; put 'put ''NjMxX1x1MDYyZlx1MDY0YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNjJjXHUwNjI3XHUwNjQ2XHUwNjQxXHUwNjRhX1x1MDY0MVx1MDY0YVx1MDY0MVx1MDYzMVx1MDY0YV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjQx''@;'; put 'put ''XHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2MmNcdTA2NDhcdTA2MjdcdTA2NDZfXHUwNjJjXHUwNjQ4XHUwNjRhXHUwNjQ0XHUwNjRhXHUwNjI5X1x1MDYyM1x1MDY0OFx1MDYyYV9cdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjIzXHUw''@;'; put 'put ''NjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2''@;'; put 'put ''NDRcdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2''@;'; put 'put ''MzNfXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYy''@;'; put 'put ''N1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDYyZF9cdTA2NDZf''@;'; put 'put ''XHUwNjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1t''@;'; put 'put ''IixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2''@;'; put 'put ''MmZcdTA2MjcgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1''@;'; put 'put ''MDY0NVx1MDYzMyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJl''@;'; put 'put ''bGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2NDFcdTA2NGEgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczoiXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IixtOiJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2''@;'; put 'put ''MjkiLG1tOiIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLGg6Ilx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsaGg6IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsZDoiXHUwNjRhXHUwNjQ4XHUwNjQ1IixkZDoiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1''@;'; put 'put ''IixNOiJcdTA2MzRcdTA2NDdcdTA2MzEiLE1NOiIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLHk6Ilx1MDYzM1x1MDY0Nlx1MDYyOSIseXk6IiVkIFx1MDYzM1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDYyYSJ9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDU2NzQ1OmNlPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9ZnVuY3Rpb24oWCxiKXt2YXIgST0iZnVuY3Rpb24iPT10eXBlb2YgSXRlcmF0b3ImJkl0ZXJhdG9yLnByb3RvdHlwZVtYXTtpZihJKXRyeXtJLmNhbGwoe25leHQ6bnVsbH0sYikubmV4dCgpfWNhdGNoe3JldHVybiEwfX19LDU2OTYyOmZ1bmN0aW9u''@;'; put 'put ''KGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwYTY3IiwyOiJcdTBhNjgiLDM6Ilx1MGE2OSIsNDoiXHUwYTZhIiw1OiJcdTBhNmIiLDY6Ilx1MGE2YyIsNzoiXHUwYTZkIiw4OiJcdTBhNmUiLDk6Ilx1MGE2ZiIsMDoiXHUwYTY2In0scD17Ilx1MGE2NyI6''@;'; put 'put ''IjEiLCJcdTBhNjgiOiIyIiwiXHUwYTY5IjoiMyIsIlx1MGE2YSI6IjQiLCJcdTBhNmIiOiI1IiwiXHUwYTZjIjoiNiIsIlx1MGE2ZCI6IjciLCJcdTBhNmUiOiI4IiwiXHUwYTZmIjoiOSIsIlx1MGE2NiI6IjAifTtJLmRlZmluZUxvY2FsZSgicGEtaW4iLHttb250aHM6Ilx1MGExY1x1MGEy''@;'; put 'put ''OFx1MGEzNVx1MGEzMFx1MGE0MF9cdTBhMmJcdTBhM2NcdTBhMzBcdTBhMzVcdTBhMzBcdTBhNDBfXHUwYTJlXHUwYTNlXHUwYTMwXHUwYTFhX1x1MGEwNVx1MGEyYVx1MGE0ZFx1MGEzMFx1MGE0OFx1MGEzMl9cdTBhMmVcdTBhMDhfXHUwYTFjXHUwYTQyXHUwYTI4X1x1MGExY1x1MGE0MVx1''@;'; put 'put ''MGEzMlx1MGEzZVx1MGEwOF9cdTBhMDVcdTBhMTdcdTBhMzhcdTBhMjRfXHUwYTM4XHUwYTI0XHUwYTcwXHUwYTJjXHUwYTMwX1x1MGEwNVx1MGExNVx1MGEyNFx1MGE0Mlx1MGEyY1x1MGEzMF9cdTBhMjhcdTBhMzVcdTBhNzBcdTBhMmNcdTBhMzBfXHUwYTI2XHUwYTM4XHUwYTcwXHUwYTJj''@;'; put 'put ''XHUwYTMwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBhMWNcdTBhMjhcdTBhMzVcdTBhMzBcdTBhNDBfXHUwYTJiXHUwYTNjXHUwYTMwXHUwYTM1XHUwYTMwXHUwYTQwX1x1MGEyZVx1MGEzZVx1MGEzMFx1MGExYV9cdTBhMDVcdTBhMmFcdTBhNGRcdTBhMzBcdTBhNDhcdTBhMzJfXHUw''@;'; put 'put ''YTJlXHUwYTA4X1x1MGExY1x1MGE0Mlx1MGEyOF9cdTBhMWNcdTBhNDFcdTBhMzJcdTBhM2VcdTBhMDhfXHUwYTA1XHUwYTE3XHUwYTM4XHUwYTI0X1x1MGEzOFx1MGEyNFx1MGE3MFx1MGEyY1x1MGEzMF9cdTBhMDVcdTBhMTVcdTBhMjRcdTBhNDJcdTBhMmNcdTBhMzBfXHUwYTI4XHUwYTM1''@;'; put 'put ''XHUwYTcwXHUwYTJjXHUwYTMwX1x1MGEyNlx1MGEzOFx1MGE3MFx1MGEyY1x1MGEzMCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwYTEwXHUwYTI0XHUwYTM1XHUwYTNlXHUwYTMwX1x1MGEzOFx1MGE0Ylx1MGEyZVx1MGEzNVx1MGEzZVx1MGEzMF9cdTBhMmVcdTBhNzBcdTBhMTdcdTBhMzJc''@;'; put 'put ''dTBhMzVcdTBhM2VcdTBhMzBfXHUwYTJjXHUwYTQxXHUwYTI3XHUwYTM1XHUwYTNlXHUwYTMwX1x1MGEzNVx1MGE0MFx1MGEzMFx1MGEzNVx1MGEzZVx1MGEzMF9cdTBhMzhcdTBhM2NcdTBhNDFcdTBhNzFcdTBhMTVcdTBhMzBcdTBhMzVcdTBhM2VcdTBhMzBfXHUwYTM4XHUwYTNjXHUwYTI4''@;'; put 'put ''XHUwYTQwXHUwYTFhXHUwYTMwXHUwYTM1XHUwYTNlXHUwYTMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MGExMFx1MGEyNF9cdTBhMzhcdTBhNGJcdTBhMmVfXHUwYTJlXHUwYTcwXHUwYTE3XHUwYTMyX1x1MGEyY1x1MGE0MVx1MGEyN19cdTBhMzVcdTBhNDBcdTBhMzBfXHUwYTM4''@;'; put 'put ''XHUwYTNjXHUwYTQxXHUwYTE1XHUwYTMwX1x1MGEzOFx1MGEzY1x1MGEyOFx1MGE0MCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwYTEwXHUwYTI0X1x1MGEzOFx1MGE0Ylx1MGEyZV9cdTBhMmVcdTBhNzBcdTBhMTdcdTBhMzJfXHUwYTJjXHUwYTQxXHUwYTI3X1x1MGEzNVx1MGE0MFx1''@;'; put 'put ''MGEzMF9cdTBhMzhcdTBhM2NcdTBhNDFcdTBhMTVcdTBhMzBfXHUwYTM4XHUwYTNjXHUwYTI4XHUwYTQwIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFx1MGEzNVx1MGExY1x1MGE0NyIsTFRTOiJBIGg6bW06c3MgXHUwYTM1XHUwYTFjXHUwYTQ3IixMOiJERC9NTS9Z''@;'; put 'put ''WVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSBcdTBhMzVcdTBhMWNcdTBhNDciLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwYTM1XHUwYTFjXHUwYTQ3In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBhMDVcdTBhMWNdIExUIixuZXh0RGF5''@;'; put 'put ''OiJbXHUwYTE1XHUwYTMyXSBMVCIsbmV4dFdlZWs6IltcdTBhMDVcdTBhMTdcdTBhMzJcdTBhM2VdIGRkZGQsIExUIixsYXN0RGF5OiJbXHUwYTE1XHUwYTMyXSBMVCIsbGFzdFdlZWs6IltcdTBhMmFcdTBhM2ZcdTBhMWJcdTBhMzJcdTBhNDddIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJl''@;'; put 'put ''bGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTBhMzVcdTBhM2ZcdTBhNzFcdTBhMWEiLHBhc3Q6IiVzIFx1MGEyYVx1MGEzZlx1MGExYlx1MGEzMlx1MGE0NyIsczoiXHUwYTE1XHUwYTQxXHUwYTFkIFx1MGEzOFx1MGExNVx1MGEzZlx1MGE3MFx1MGExZiIsc3M6IiVkIFx1MGEzOFx1MGExNVx1''@;'; put 'put ''MGEzZlx1MGE3MFx1MGExZiIsbToiXHUwYTA3XHUwYTE1IFx1MGEyZVx1MGEzZlx1MGE3MFx1MGExZiIsbW06IiVkIFx1MGEyZVx1MGEzZlx1MGE3MFx1MGExZiIsaDoiXHUwYTA3XHUwYTcxXHUwYTE1IFx1MGExOFx1MGE3MFx1MGExZlx1MGEzZSIsaGg6IiVkIFx1MGExOFx1MGE3MFx1MGEx''@;'; put 'put ''Zlx1MGE0NyIsZDoiXHUwYTA3XHUwYTcxXHUwYTE1IFx1MGEyNlx1MGEzZlx1MGEyOCIsZGQ6IiVkIFx1MGEyNlx1MGEzZlx1MGEyOCIsTToiXHUwYTA3XHUwYTcxXHUwYTE1IFx1MGEyZVx1MGEzOVx1MGE0MFx1MGEyOFx1MGEzZSIsTU06IiVkIFx1MGEyZVx1MGEzOVx1MGE0MFx1MGEyOFx1''@;'; put 'put ''MGE0NyIseToiXHUwYTA3XHUwYTcxXHUwYTE1IFx1MGEzOFx1MGEzZVx1MGEzMiIseXk6IiVkIFx1MGEzOFx1MGEzZVx1MGEzMiJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTBhNjdcdTBhNjhcdTBhNjlcdTBhNmFcdTBhNmJcdTBhNmNcdTBhNmRcdTBhNmVc''@;'; put 'put ''dTBhNmZcdTBhNjZdL2csZnVuY3Rpb24oUCl7cmV0dXJuIHBbUF19KX0scG9zdGZvcm1hdDpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKFApe3JldHVybiBfW1BdfSl9LG1lcmlkaWVtUGFyc2U6L1x1MGEzMFx1MGEzZVx1MGEyNHxcdTBhMzhcdTBhMzVcdTBh''@;'; put 'put ''NDdcdTBhMzB8XHUwYTI2XHUwYTQxXHUwYTJhXHUwYTM5XHUwYTNmXHUwYTMwfFx1MGEzOFx1MGEzY1x1MGEzZVx1MGEyZS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHcsUCl7cmV0dXJuIDEyPT09dyYmKHc9MCksIlx1MGEzMFx1MGEzZVx1MGEyNCI9PT1QP3c8ND93OncrMTI6Ilx1MGEzOFx1''@;'; put 'put ''MGEzNVx1MGE0N1x1MGEzMCI9PT1QP3c6Ilx1MGEyNlx1MGE0MVx1MGEyYVx1MGEzOVx1MGEzZlx1MGEzMCI9PT1QP3c+PTEwP3c6dysxMjoiXHUwYTM4XHUwYTNjXHUwYTNlXHUwYTJlIj09PVA/dysxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzw0PyJcdTBh''@;'; put 'put ''MzBcdTBhM2VcdTBhMjQiOnc8MTA/Ilx1MGEzOFx1MGEzNVx1MGE0N1x1MGEzMCI6dzwxNz8iXHUwYTI2XHUwYTQxXHUwYTJhXHUwYTM5XHUwYTNmXHUwYTMwIjp3PDIwPyJcdTBhMzhcdTBhM2NcdTBhM2VcdTBhMmUiOiJcdTBhMzBcdTBhM2VcdTBhMjQifSx3ZWVrOntkb3c6MCxkb3k6Nn19''@;'; put 'put ''KX0oYig5NzU4NikpfSw1NzIyMzpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJLF8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBwKEIsZyl7aWYoIUIpdGhyb3cgbmV3IEVycm9yKGd8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gVihCLGcpe0Iuc3VwZXJfPWc7dmFyIHk9ZnVuY3Rp''@;'; put 'put ''b24oKXt9O3kucHJvdG90eXBlPWcucHJvdG90eXBlLEIucHJvdG90eXBlPW5ldyB5LEIucHJvdG90eXBlLmNvbnN0cnVjdG9yPUJ9ZnVuY3Rpb24gdyhCLGcseSl7aWYody5pc0JOKEIpKXJldHVybiBCO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlz''@;'; put 'put ''LnJlZD1udWxsLG51bGwhPT1CJiYoKCJsZSI9PT1nfHwiYmUiPT09ZykmJih5PWcsZz0xMCksdGhpcy5faW5pdChCfHwwLGd8fDEwLHl8fCJiZSIpKX12YXIgUDsib2JqZWN0Ij09dHlwZW9mIEk/SS5leHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3RyeXtQPXR5cGVvZiB3''@;'; put 'put ''aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpiKDY0Njg4KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEYoQixnKXt2YXIgeT1CLmNoYXJDb2RlQXQoZyk7cmV0dXJuIHk+PTY1JiZ5PD03MD95LTU1Onk+PTk3JiZ5PD0xMDI/eS04Nzp5LTQ4JjE1fWZ1''@;'; put 'put ''bmN0aW9uIFIoQixnLHkpe3ZhciB4PUYoQix5KTtyZXR1cm4geS0xPj1nJiYoeHw9RihCLHktMSk8PDQpLHh9ZnVuY3Rpb24geihCLGcseSx4KXtmb3IodmFyIEM9MCxUPU1hdGgubWluKEIubGVuZ3RoLHkpLEg9ZztIPFQ7SCsrKXt2YXIgaj1CLmNoYXJDb2RlQXQoSCktNDg7Qyo9eCxDKz1q''@;'; put 'put ''Pj00OT9qLTQ5KzEwOmo+PTE3P2otMTcrMTA6an1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24oZyl7cmV0dXJuIGcgaW5zdGFuY2VvZiB3fHxudWxsIT09ZyYmIm9iamVjdCI9PXR5cGVvZiBnJiZnLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShnLndv''@;'; put 'put ''cmRzKX0sdy5tYXg9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gZy5jbXAoeSk+MD9nOnl9LHcubWluPWZ1bmN0aW9uKGcseSl7cmV0dXJuIGcuY21wKHkpPDA/Zzp5fSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihnLHkseCl7aWYoIm51bWJlciI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0''@;'; put 'put ''TnVtYmVyKGcseSx4KTtpZigib2JqZWN0Ij09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXRBcnJheShnLHkseCk7ImhleCI9PT15JiYoeT0xNikscCh5PT09KDB8eSkmJnk+PTImJnk8PTM2KTt2YXIgQz0wOyItIj09PShnPWcudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYo''@;'; put 'put ''QysrLHRoaXMubmVnYXRpdmU9MSksQzxnLmxlbmd0aCYmKDE2PT09eT90aGlzLl9wYXJzZUhleChnLEMseCk6KHRoaXMuX3BhcnNlQmFzZShnLHksQyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx5LHgpKSl9LHcucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0''@;'; put 'put ''aW9uKGcseSx4KXtnPDAmJih0aGlzLm5lZ2F0aXZlPTEsZz0tZyksZzw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZ10sdGhpcy5sZW5ndGg9MSk6Zzw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3Ro''@;'; put 'put ''PTIpOihwKGc8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCkseSx4KX0sdy5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlv''@;'; put 'put ''bihnLHkseCl7aWYocCgibnVtYmVyIj09dHlwZW9mIGcubGVuZ3RoKSxnLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChnLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9y''@;'; put 'put ''KHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULEgsaj0wO2lmKCJiZSI9PT14KWZvcihDPWcubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oSD1nW0NdfGdbQy0xXTw8OHxnW0MtMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRz''@;'; put 'put ''W1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxnLmxlbmd0aDtDKz0zKXRoaXMud29yZHNbVF18PShIPWdbQ118Z1tDKzFdPDw4fGdbQysyXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsx''@;'; put 'put ''XT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGcseSx4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGcubGVuZ3RoLXkpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRo''@;'; put 'put ''aXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIGosVD0wLEg9MDtpZigiYmUiPT09eClmb3IoQz1nLmxlbmd0aC0xO0M+PXk7Qy09MilqPVIoZyx5LEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRo''@;'; put 'put ''aXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShnLmxlbmd0aC15KSUyPT0wP3krMTp5O0M8Zy5sZW5ndGg7Qys9MilqPVIoZyx5LEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODt0''@;'; put 'put ''aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oZyx5LHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPXkpQysrO0MtLSxUPVQveXwwO2Zvcih2YXIgSD1nLmxlbmd0aC14LGo9SCVDLEU9TWF0aC5t''@;'; put 'put ''aW4oSCxILWopK3gsbT0wLEE9eDtBPEU7QSs9QyltPXooZyxBLEErQyx5KSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lmKDAhPT1qKXt2YXIgYWU9MTtmb3IobT16KGcsQSxnLmxlbmd0aCx5KSxBPTA7QTxq''@;'; put 'put ''O0ErKylhZSo9eTt0aGlzLmltdWxuKGFlKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZyl7Zy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIg''@;'; put 'put ''eT0wO3k8dGhpcy5sZW5ndGg7eSsrKWcud29yZHNbeV09dGhpcy53b3Jkc1t5XTtnLmxlbmd0aD10aGlzLmxlbmd0aCxnLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsZy5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IHcobnVsbCk7cmV0dXJuIHRo''@;'; put 'put ''aXMuY29weShnKSxnfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8ZzspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMu''@;'; put 'put ''d29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBOPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAw''@;'; put 'put ''IiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJd''@;'; put 'put ''LE89WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sSz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFl''@;'; put 'put ''NywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0''@;'; put 'put ''M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBZKEIsZyx5KXt5Lm5lZ2F0aXZlPWcubmVnYXRpdmVeQi5uZWdhdGl2ZTt2YXIgeD1CLmxlbmd0aCtnLmxlbmd0aHwwO3kubGVuZ3RoPXgseD14LTF8MDt2YXIgQz0wfEIu''@;'; put 'put ''d29yZHNbMF0sVD0wfGcud29yZHNbMF0sSD1DKlQsRT1ILzY3MTA4ODY0fDA7eS53b3Jkc1swXT02NzEwODg2MyZIO2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYsYWU9NjcxMDg4NjMmRSxuZT1NYXRoLm1pbihtLGcubGVuZ3RoLTEpLHNlPU1hdGgubWF4KDAsbS1CLmxl''@;'; put 'put ''bmd0aCsxKTtzZTw9bmU7c2UrKylBKz0oSD0oQz0wfEIud29yZHNbbS1zZXwwXSkqKFQ9MHxnLndvcmRzW3NlXSkrYWUpLzY3MTA4ODY0fDAsYWU9NjcxMDg4NjMmSDt5LndvcmRzW21dPTB8YWUsRT0wfEF9cmV0dXJuIDAhPT1FP3kud29yZHNbbV09MHxFOnkubGVuZ3RoLS0seS5zdHJpcCgp''@;'; put 'put ''fXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGcseSl7dmFyIHg7aWYoeT0wfHl8fDEsMTY9PT0oZz1nfHwxMCl8fCJoZXgiPT09Zyl7eD0iIjtmb3IodmFyIEM9MCxUPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj10aGlzLndvcmRzW0hdLEU9KDE2Nzc3MjE1JihqPDxDfFQp''@;'; put 'put ''KS50b1N0cmluZygxNik7VD1qPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsSC0tKSx4PTAhPT1UfHxIIT09dGhpcy5sZW5ndGgtMT9OWzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4KTt4Lmxlbmd0aCV5IT0wOyl4PSIwIit4O3Jl''@;'; put 'put ''dHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYoZz09PSgwfGcpJiZnPj0yJiZnPD0zNil7dmFyIG09T1tnXSxBPUtbZ107eD0iIjt2YXIgYWU9dGhpcy5jbG9uZSgpO2ZvcihhZS5uZWdhdGl2ZT0wOyFhZS5pc1plcm8oKTspe3ZhciBuZT1hZS5tb2RuKEEpLnRvU3RyaW5n''@;'; put 'put ''KGcpO3g9KGFlPWFlLmlkaXZuKEEpKS5pc1plcm8oKT9uZSt4Ok5bbS1uZS5sZW5ndGhdK25lK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCV5IT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9cCghMSwiQmFzZSBzaG91bGQg''@;'; put 'put ''YmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBnPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9nKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Zys9NDUw''@;'; put 'put ''MzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJnAoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1nOmd9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0''@;'; put 'put ''aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gcCh0eXBlb2YgUDwidSIpLHRoaXMudG9BcnJheUxpa2UoUCxnLHkpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXks''@;'; put 'put ''Zyx5KX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oZyx5LHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtwKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxwKFQ+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0''@;'; put 'put ''aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sSD0ibGUiPT09eSxqPW5ldyBnKFQpLEE9dGhpcy5jbG9uZSgpO2lmKEgpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbbV09RTtmb3IoO208VDttKyspalttXT0wfWVsc2V7Zm9yKG09MDtt''@;'; put 'put ''PFQtQzttKyspalttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbVC1tLTFdPUV9cmV0dXJuIGp9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihnKXtyZXR1cm4gMzItTWF0aC5jbHozMihnKX06ZnVuY3Rp''@;'; put 'put ''b24oZyl7dmFyIHk9Zyx4PTA7cmV0dXJuIHk+PTQwOTYmJih4Kz0xMyx5Pj4+PTEzKSx5Pj02NCYmKHgrPTcseT4+Pj03KSx5Pj04JiYoeCs9NCx5Pj4+PTQpLHk+PTImJih4Kz0yLHk+Pj49MikseCt5fSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oZyl7aWYoMD09PWcpcmV0dXJu''@;'; put 'put ''IDI2O3ZhciB5PWcseD0wO3JldHVybiEoODE5MSZ5KSYmKHgrPTEzLHk+Pj49MTMpLCEoMTI3JnkpJiYoeCs9Nyx5Pj4+PTcpLCEoMTUmeSkmJih4Kz00LHk+Pj49NCksISgzJnkpJiYoeCs9Mix5Pj4+PTIpLCEoMSZ5KSYmeCsrLHh9LHcucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigp''@;'; put 'put ''e3ZhciB5PXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK3l9LHcucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGc9MCx5PTA7eTx0aGlzLmxlbmd0''@;'; put 'put ''aDt5Kyspe3ZhciB4PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbeV0pO2lmKGcrPXgsMjYhPT14KWJyZWFrfXJldHVybiBnfSx3LnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSx3LnByb3RvdHlwZS50b1R3b3M9''@;'; put 'put ''ZnVuY3Rpb24oZyl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oZykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy50ZXN0bihnLTEpP3RoaXMubm90bihnKS5pYWRkbigxKS5pbmVnKCk6''@;'; put 'put ''dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHcucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5p''@;'; put 'put ''c1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgeT0wO3k8Zy5sZW5ndGg7eSsrKXRoaXMud29yZHNbeV09dGhpcy53''@;'; put 'put ''b3Jkc1t5XXxnLndvcmRzW3ldO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihnKX0sdy5wcm90b3R5cGUub3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3Ro''@;'; put 'put ''PmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoZyk6Zy5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihnKTpnLmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVh''@;'; put 'put ''bmQ9ZnVuY3Rpb24oZyl7dmFyIHk7eT10aGlzLmxlbmd0aD5nLmxlbmd0aD9nOnRoaXM7Zm9yKHZhciB4PTA7eDx5Lmxlbmd0aDt4KyspdGhpcy53b3Jkc1t4XT10aGlzLndvcmRzW3hdJmcud29yZHNbeF07cmV0dXJuIHRoaXMubGVuZ3RoPXkubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuaWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoZyl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoZyk6Zy5jbG9uZSgpLmlh''@;'; put 'put ''bmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChnKTpnLmNsb25lKCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGcpe3ZhciB5LHg7dGhpcy5sZW5ndGg+Zy5s''@;'; put 'put ''ZW5ndGg/KHk9dGhpcyx4PWcpOih5PWcseD10aGlzKTtmb3IodmFyIEM9MDtDPHgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXkud29yZHNbQ11eeC53b3Jkc1tDXTtpZih0aGlzIT09eSlmb3IoO0M8eS5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109eS53b3Jkc1tDXTtyZXR1cm4gdGhpcy5s''@;'; put 'put ''ZW5ndGg9eS5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKGcpe3JldHVybiBwKCEodGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihnKX0sdy5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0''@;'; put 'put ''aD90aGlzLmNsb25lKCkuaXhvcihnKTpnLmNsb25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGcpOmcuY2xvbmUoKS5pdXhvcih0aGlzKX0sdy5wcm90b3R5cGUuaW5vdG49''@;'; put 'put ''ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PTB8TWF0aC5jZWlsKGcvMjYpLHg9ZyUyNjt0aGlzLl9leHBhbmQoeSkseD4wJiZ5LS07Zm9yKHZhciBDPTA7Qzx5O0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJn50aGlzLndvcmRzW0NdO3JldHVybiB4PjAm''@;'; put 'put ''Jih0aGlzLndvcmRzW0NdPX50aGlzLndvcmRzW0NdJjY3MTA4ODYzPj4yNi14KSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihnKX0sdy5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihnLHkpe3AoIm51bWJlciI9PXR5''@;'; put 'put ''cGVvZiBnJiZnPj0wKTt2YXIgeD1nLzI2fDAsQz1nJTI2O3JldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdPXk/dGhpcy53b3Jkc1t4XXwxPDxDOnRoaXMud29yZHNbeF0mfigxPDxDKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyl7dmFyIHks''@;'; put 'put ''eCxDO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHk9dGhpcy5pc3ViKGcpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIGcubmVnYXRp''@;'; put 'put ''dmU9MCx5PXRoaXMuaXN1YihnKSxnLm5lZ2F0aXZlPTEseS5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oeD10aGlzLEM9Zyk6KHg9ZyxDPXRoaXMpO2Zvcih2YXIgVD0wLEg9MDtIPEMubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJih5PSgwfHgud29yZHNbSF0p''@;'; put 'put ''KygwfEMud29yZHNbSF0pK1QpLFQ9eT4+PjI2O2Zvcig7MCE9PVQmJkg8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKHk9KDB8eC53b3Jkc1tIXSkrVCksVD15Pj4+MjY7aWYodGhpcy5sZW5ndGg9eC5sZW5ndGgsMCE9PVQpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09VCx0''@;'; put 'put ''aGlzLmxlbmd0aCsrO2Vsc2UgaWYoeCE9PXRoaXMpZm9yKDtIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXgud29yZHNbSF07cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnKXt2YXIgeTtyZXR1cm4gMCE9PWcubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhn''@;'; put 'put ''Lm5lZ2F0aXZlPTAseT10aGlzLnN1YihnKSxnLm5lZ2F0aXZlXj0xLHkpOjA9PT1nLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLHk9Zy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLHkpOnRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRk''@;'; put 'put ''KGcpOmcuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcpe2lmKDAhPT1nLm5lZ2F0aXZlKXtnLm5lZ2F0aXZlPTA7dmFyIHk9dGhpcy5pYWRkKGcpO3JldHVybiBnLm5lZ2F0aXZlPTEseS5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1''@;'; put 'put ''cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgQyxULHg9dGhpcy5jbXAoZyk7aWYoMD09PXgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3g+MD8oQz10aGlz''@;'; put 'put ''LFQ9Zyk6KEM9ZyxUPXRoaXMpO2Zvcih2YXIgSD0wLGo9MDtqPFQubGVuZ3RoO2orKylIPSh5PSgwfEMud29yZHNbal0pLSgwfFQud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJnk7Zm9yKDswIT09SCYmajxDLmxlbmd0aDtqKyspSD0oeT0oMHxDLndvcmRzW2pdKStI''@;'; put 'put ''KT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZ5O2lmKDA9PT1IJiZqPEMubGVuZ3RoJiZDIT09dGhpcylmb3IoO2o8Qy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09Qy53b3Jkc1tqXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsaiksQyE9PXRoaXMmJih0aGlz''@;'; put 'put ''Lm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihnKX07dmFyIFc9ZnVuY3Rpb24oZyx5LHgpe3ZhciBFLG0sQSxDPWcud29yZHMsVD15LndvcmRzLEg9eC53b3JkcyxqPTAsYWU9MHxDWzBdLG5lPTgx''@;'; put 'put ''OTEmYWUsc2U9YWU+Pj4xMyxDZT0wfENbMV0sVWU9ODE5MSZDZSxKZT1DZT4+PjEzLGl0PTB8Q1syXSx4ZT04MTkxJml0LHllPWl0Pj4+MTMsS2U9MHxDWzNdLGplPTgxOTEmS2Usa2U9S2U+Pj4xMyxIZT0wfENbNF0sTGU9ODE5MSZIZSxSZT1IZT4+PjEzLFZlPTB8Q1s1XSxBZT04MTkxJlZl''@;'; put 'put ''LERlPVZlPj4+MTMsX3Q9MHxDWzZdLHJ0PTgxOTEmX3QsUWU9X3Q+Pj4xMyxzbj0wfENbN10sdnQ9ODE5MSZzbixTdD1zbj4+PjEzLGVuPTB8Q1s4XSx1dD04MTkxJmVuLFhlPWVuPj4+MTMsdHQ9MHxDWzldLEllPTgxOTEmdHQsYXQ9dHQ+Pj4xMyx1bj0wfFRbMF0sSXQ9ODE5MSZ1bixSdD11''@;'; put 'put ''bj4+PjEzLHJpPTB8VFsxXSxhbj04MTkxJnJpLGxuPXJpPj4+MTMsbmk9MHxUWzJdLGhuPTgxOTEmbmksaHQ9bmk+Pj4xMyxScj0wfFRbM10sQnQ9ODE5MSZScixBdD1Scj4+PjEzLEZuPTB8VFs0XSxzdD04MTkxJkZuLFp0PUZuPj4+MTMsUXI9MHxUWzVdLFllPTgxOTEmUXIsVHQ9UXI+Pj4x''@;'; put 'put ''Myxycj0wfFRbNl0sZnQ9ODE5MSZycixNdD1ycj4+PjEzLFpuPTB8VFs3XSxubj04MTkxJlpuLFd0PVpuPj4+MTMsZGk9MHxUWzhdLGRuPTgxOTEmZGksbW49ZGk+Pj4xMyxwaT0wfFRbOV0sZm49ODE5MSZwaSx0bj1waT4+PjEzO3gubmVnYXRpdmU9Zy5uZWdhdGl2ZV55Lm5lZ2F0aXZlLHgu''@;'; put 'put ''bGVuZ3RoPTE5O3ZhciBjYT0oaisoRT1NYXRoLmltdWwobmUsSXQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKG5lLFJ0KSkrTWF0aC5pbXVsKHNlLEl0KXwwKSk8PDEzKXwwO2o9KChBPU1hdGguaW11bChzZSxSdCkpKyhtPj4+MTMpfDApKyhjYT4+PjI2KXwwLGNhJj02NzEwODg2MyxF''@;'; put 'put ''PU1hdGguaW11bChVZSxJdCksbT0obT1NYXRoLmltdWwoVWUsUnQpKStNYXRoLmltdWwoSmUsSXQpfDAsQT1NYXRoLmltdWwoSmUsUnQpO3ZhciBfaT0oaisoRT1FK01hdGguaW11bChuZSxhbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGxuKXwwKStNYXRoLmltdWwoc2Us''@;'; put 'put ''YW4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsbG4pfDApKyhtPj4+MTMpfDApKyhfaT4+PjI2KXwwLF9pJj02NzEwODg2MyxFPU1hdGguaW11bCh4ZSxJdCksbT0obT1NYXRoLmltdWwoeGUsUnQpKStNYXRoLmltdWwoeWUsSXQpfDAsQT1NYXRoLmltdWwoeWUsUnQpLEU9RStN''@;'; put 'put ''YXRoLmltdWwoVWUsYW4pfDAsbT0obT1tK01hdGguaW11bChVZSxsbil8MCkrTWF0aC5pbXVsKEplLGFuKXwwLEE9QStNYXRoLmltdWwoSmUsbG4pfDA7dmFyIHZyPShqKyhFPUUrTWF0aC5pbXVsKG5lLGhuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsaHQpfDApK01hdGgu''@;'; put 'put ''aW11bChzZSxobil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxodCl8MCkrKG0+Pj4xMyl8MCkrKHZyPj4+MjYpfDAsdnImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGplLEl0KSxtPShtPU1hdGguaW11bChqZSxSdCkpK01hdGguaW11bChrZSxJdCl8MCxBPU1hdGguaW11bChrZSxS''@;'; put 'put ''dCksRT1FK01hdGguaW11bCh4ZSxhbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGxuKXwwKStNYXRoLmltdWwoeWUsYW4pfDAsQT1BK01hdGguaW11bCh5ZSxsbil8MCxFPUUrTWF0aC5pbXVsKFVlLGhuKXwwLG09KG09bStNYXRoLmltdWwoVWUsaHQpfDApK01hdGguaW11bChKZSxobil8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKEplLGh0KXwwO3ZhciBYaT0oaisoRT1FK01hdGguaW11bChuZSxCdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLEF0KXwwKStNYXRoLmltdWwoc2UsQnQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsQXQpfDApKyhtPj4+MTMpfDApKyhY''@;'; put 'put ''aT4+PjI2KXwwLFhpJj02NzEwODg2MyxFPU1hdGguaW11bChMZSxJdCksbT0obT1NYXRoLmltdWwoTGUsUnQpKStNYXRoLmltdWwoUmUsSXQpfDAsQT1NYXRoLmltdWwoUmUsUnQpLEU9RStNYXRoLmltdWwoamUsYW4pfDAsbT0obT1tK01hdGguaW11bChqZSxsbil8MCkrTWF0aC5pbXVsKGtl''@;'; put 'put ''LGFuKXwwLEE9QStNYXRoLmltdWwoa2UsbG4pfDAsRT1FK01hdGguaW11bCh4ZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGh0KXwwKStNYXRoLmltdWwoeWUsaG4pfDAsQT1BK01hdGguaW11bCh5ZSxodCl8MCxFPUUrTWF0aC5pbXVsKFVlLEJ0KXwwLG09KG09bStNYXRoLmltdWwoVWUs''@;'; put 'put ''QXQpfDApK01hdGguaW11bChKZSxCdCl8MCxBPUErTWF0aC5pbXVsKEplLEF0KXwwO3ZhciBRaT0oaisoRT1FK01hdGguaW11bChuZSxzdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLFp0KXwwKStNYXRoLmltdWwoc2Usc3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmlt''@;'; put 'put ''dWwoc2UsWnQpfDApKyhtPj4+MTMpfDApKyhRaT4+PjI2KXwwLFFpJj02NzEwODg2MyxFPU1hdGguaW11bChBZSxJdCksbT0obT1NYXRoLmltdWwoQWUsUnQpKStNYXRoLmltdWwoRGUsSXQpfDAsQT1NYXRoLmltdWwoRGUsUnQpLEU9RStNYXRoLmltdWwoTGUsYW4pfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bChMZSxsbil8MCkrTWF0aC5pbXVsKFJlLGFuKXwwLEE9QStNYXRoLmltdWwoUmUsbG4pfDAsRT1FK01hdGguaW11bChqZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKGplLGh0KXwwKStNYXRoLmltdWwoa2UsaG4pfDAsQT1BK01hdGguaW11bChrZSxodCl8MCxFPUUrTWF0aC5pbXVsKHhl''@;'; put 'put ''LEJ0KXwwLG09KG09bStNYXRoLmltdWwoeGUsQXQpfDApK01hdGguaW11bCh5ZSxCdCl8MCxBPUErTWF0aC5pbXVsKHllLEF0KXwwLEU9RStNYXRoLmltdWwoVWUsc3QpfDAsbT0obT1tK01hdGguaW11bChVZSxadCl8MCkrTWF0aC5pbXVsKEplLHN0KXwwLEE9QStNYXRoLmltdWwoSmUsWnQp''@;'; put 'put ''fDA7dmFyIFZpPShqKyhFPUUrTWF0aC5pbXVsKG5lLFllKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsVHQpfDApK01hdGguaW11bChzZSxZZSl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxUdCl8MCkrKG0+Pj4xMyl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4''@;'; put 'put ''ODYzLEU9TWF0aC5pbXVsKHJ0LEl0KSxtPShtPU1hdGguaW11bChydCxSdCkpK01hdGguaW11bChRZSxJdCl8MCxBPU1hdGguaW11bChRZSxSdCksRT1FK01hdGguaW11bChBZSxhbil8MCxtPShtPW0rTWF0aC5pbXVsKEFlLGxuKXwwKStNYXRoLmltdWwoRGUsYW4pfDAsQT1BK01hdGguaW11''@;'; put 'put ''bChEZSxsbil8MCxFPUUrTWF0aC5pbXVsKExlLGhuKXwwLG09KG09bStNYXRoLmltdWwoTGUsaHQpfDApK01hdGguaW11bChSZSxobil8MCxBPUErTWF0aC5pbXVsKFJlLGh0KXwwLEU9RStNYXRoLmltdWwoamUsQnQpfDAsbT0obT1tK01hdGguaW11bChqZSxBdCl8MCkrTWF0aC5pbXVsKGtl''@;'; put 'put ''LEJ0KXwwLEE9QStNYXRoLmltdWwoa2UsQXQpfDAsRT1FK01hdGguaW11bCh4ZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFp0KXwwKStNYXRoLmltdWwoeWUsc3QpfDAsQT1BK01hdGguaW11bCh5ZSxadCl8MCxFPUUrTWF0aC5pbXVsKFVlLFllKXwwLG09KG09bStNYXRoLmltdWwoVWUs''@;'; put 'put ''VHQpfDApK01hdGguaW11bChKZSxZZSl8MCxBPUErTWF0aC5pbXVsKEplLFR0KXwwO3ZhciBlaT0oaisoRT1FK01hdGguaW11bChuZSxmdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLE10KXwwKStNYXRoLmltdWwoc2UsZnQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmlt''@;'; put 'put ''dWwoc2UsTXQpfDApKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxFPU1hdGguaW11bCh2dCxJdCksbT0obT1NYXRoLmltdWwodnQsUnQpKStNYXRoLmltdWwoU3QsSXQpfDAsQT1NYXRoLmltdWwoU3QsUnQpLEU9RStNYXRoLmltdWwocnQsYW4pfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bChydCxsbil8MCkrTWF0aC5pbXVsKFFlLGFuKXwwLEE9QStNYXRoLmltdWwoUWUsbG4pfDAsRT1FK01hdGguaW11bChBZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKEFlLGh0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsQT1BK01hdGguaW11bChEZSxodCl8MCxFPUUrTWF0aC5pbXVsKExl''@;'; put 'put ''LEJ0KXwwLG09KG09bStNYXRoLmltdWwoTGUsQXQpfDApK01hdGguaW11bChSZSxCdCl8MCxBPUErTWF0aC5pbXVsKFJlLEF0KXwwLEU9RStNYXRoLmltdWwoamUsc3QpfDAsbT0obT1tK01hdGguaW11bChqZSxadCl8MCkrTWF0aC5pbXVsKGtlLHN0KXwwLEE9QStNYXRoLmltdWwoa2UsWnQp''@;'; put 'put ''fDAsRT1FK01hdGguaW11bCh4ZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFR0KXwwKStNYXRoLmltdWwoeWUsWWUpfDAsQT1BK01hdGguaW11bCh5ZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFVlLGZ0KXwwLG09KG09bStNYXRoLmltdWwoVWUsTXQpfDApK01hdGguaW11bChKZSxmdCl8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKEplLE10KXwwO3ZhciB1YT0oaisoRT1FK01hdGguaW11bChuZSxubil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLFd0KXwwKStNYXRoLmltdWwoc2Usbm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsV3QpfDApKyhtPj4+MTMpfDApKyh1''@;'; put 'put ''YT4+PjI2KXwwLHVhJj02NzEwODg2MyxFPU1hdGguaW11bCh1dCxJdCksbT0obT1NYXRoLmltdWwodXQsUnQpKStNYXRoLmltdWwoWGUsSXQpfDAsQT1NYXRoLmltdWwoWGUsUnQpLEU9RStNYXRoLmltdWwodnQsYW4pfDAsbT0obT1tK01hdGguaW11bCh2dCxsbil8MCkrTWF0aC5pbXVsKFN0''@;'; put 'put ''LGFuKXwwLEE9QStNYXRoLmltdWwoU3QsbG4pfDAsRT1FK01hdGguaW11bChydCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LGh0KXwwKStNYXRoLmltdWwoUWUsaG4pfDAsQT1BK01hdGguaW11bChRZSxodCl8MCxFPUUrTWF0aC5pbXVsKEFlLEJ0KXwwLG09KG09bStNYXRoLmltdWwoQWUs''@;'; put 'put ''QXQpfDApK01hdGguaW11bChEZSxCdCl8MCxBPUErTWF0aC5pbXVsKERlLEF0KXwwLEU9RStNYXRoLmltdWwoTGUsc3QpfDAsbT0obT1tK01hdGguaW11bChMZSxadCl8MCkrTWF0aC5pbXVsKFJlLHN0KXwwLEE9QStNYXRoLmltdWwoUmUsWnQpfDAsRT1FK01hdGguaW11bChqZSxZZSl8MCxt''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKGplLFR0KXwwKStNYXRoLmltdWwoa2UsWWUpfDAsQT1BK01hdGguaW11bChrZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHhlLGZ0KXwwLG09KG09bStNYXRoLmltdWwoeGUsTXQpfDApK01hdGguaW11bCh5ZSxmdCl8MCxBPUErTWF0aC5pbXVsKHllLE10KXwwLEU9RStN''@;'; put 'put ''YXRoLmltdWwoVWUsbm4pfDAsbT0obT1tK01hdGguaW11bChVZSxXdCl8MCkrTWF0aC5pbXVsKEplLG5uKXwwLEE9QStNYXRoLmltdWwoSmUsV3QpfDA7dmFyIFJpPShqKyhFPUUrTWF0aC5pbXVsKG5lLGRuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsbW4pfDApK01hdGgu''@;'; put 'put ''aW11bChzZSxkbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxtbil8MCkrKG0+Pj4xMyl8MCkrKFJpPj4+MjYpfDAsUmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLEl0KSxtPShtPU1hdGguaW11bChJZSxSdCkpK01hdGguaW11bChhdCxJdCl8MCxBPU1hdGguaW11bChhdCxS''@;'; put 'put ''dCksRT1FK01hdGguaW11bCh1dCxhbil8MCxtPShtPW0rTWF0aC5pbXVsKHV0LGxuKXwwKStNYXRoLmltdWwoWGUsYW4pfDAsQT1BK01hdGguaW11bChYZSxsbil8MCxFPUUrTWF0aC5pbXVsKHZ0LGhuKXwwLG09KG09bStNYXRoLmltdWwodnQsaHQpfDApK01hdGguaW11bChTdCxobil8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKFN0LGh0KXwwLEU9RStNYXRoLmltdWwocnQsQnQpfDAsbT0obT1tK01hdGguaW11bChydCxBdCl8MCkrTWF0aC5pbXVsKFFlLEJ0KXwwLEE9QStNYXRoLmltdWwoUWUsQXQpfDAsRT1FK01hdGguaW11bChBZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKEFlLFp0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoRGUsc3QpfDAsQT1BK01hdGguaW11bChEZSxadCl8MCxFPUUrTWF0aC5pbXVsKExlLFllKXwwLG09KG09bStNYXRoLmltdWwoTGUsVHQpfDApK01hdGguaW11bChSZSxZZSl8MCxBPUErTWF0aC5pbXVsKFJlLFR0KXwwLEU9RStNYXRoLmltdWwoamUsZnQpfDAsbT0obT1tK01h''@;'; put 'put ''dGguaW11bChqZSxNdCl8MCkrTWF0aC5pbXVsKGtlLGZ0KXwwLEE9QStNYXRoLmltdWwoa2UsTXQpfDAsRT1FK01hdGguaW11bCh4ZSxubil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFd0KXwwKStNYXRoLmltdWwoeWUsbm4pfDAsQT1BK01hdGguaW11bCh5ZSxXdCl8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KFVlLGRuKXwwLG09KG09bStNYXRoLmltdWwoVWUsbW4pfDApK01hdGguaW11bChKZSxkbil8MCxBPUErTWF0aC5pbXVsKEplLG1uKXwwO3ZhciBEYT0oaisoRT1FK01hdGguaW11bChuZSxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLHRuKXwwKStNYXRoLmltdWwoc2Us''@;'; put 'put ''Zm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsdG4pfDApKyhtPj4+MTMpfDApKyhEYT4+PjI2KXwwLERhJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxhbiksbT0obT1NYXRoLmltdWwoSWUsbG4pKStNYXRoLmltdWwoYXQsYW4pfDAsQT1NYXRoLmltdWwoYXQsbG4pLEU9RStN''@;'; put 'put ''YXRoLmltdWwodXQsaG4pfDAsbT0obT1tK01hdGguaW11bCh1dCxodCl8MCkrTWF0aC5pbXVsKFhlLGhuKXwwLEE9QStNYXRoLmltdWwoWGUsaHQpfDAsRT1FK01hdGguaW11bCh2dCxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LEF0KXwwKStNYXRoLmltdWwoU3QsQnQpfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bChTdCxBdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LHN0KXwwLG09KG09bStNYXRoLmltdWwocnQsWnQpfDApK01hdGguaW11bChRZSxzdCl8MCxBPUErTWF0aC5pbXVsKFFlLFp0KXwwLEU9RStNYXRoLmltdWwoQWUsWWUpfDAsbT0obT1tK01hdGguaW11bChBZSxUdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KERlLFllKXwwLEE9QStNYXRoLmltdWwoRGUsVHQpfDAsRT1FK01hdGguaW11bChMZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKExlLE10KXwwKStNYXRoLmltdWwoUmUsZnQpfDAsQT1BK01hdGguaW11bChSZSxNdCl8MCxFPUUrTWF0aC5pbXVsKGplLG5uKXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''amUsV3QpfDApK01hdGguaW11bChrZSxubil8MCxBPUErTWF0aC5pbXVsKGtlLFd0KXwwLEU9RStNYXRoLmltdWwoeGUsZG4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxtbil8MCkrTWF0aC5pbXVsKHllLGRuKXwwLEE9QStNYXRoLmltdWwoeWUsbW4pfDA7dmFyIGhpPShqKyhFPUUrTWF0aC5p''@;'; put 'put ''bXVsKFVlLGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoVWUsdG4pfDApK01hdGguaW11bChKZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChKZSx0bil8MCkrKG0+Pj4xMyl8MCkrKGhpPj4+MjYpfDAsaGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLGhuKSxt''@;'; put 'put ''PShtPU1hdGguaW11bChJZSxodCkpK01hdGguaW11bChhdCxobil8MCxBPU1hdGguaW11bChhdCxodCksRT1FK01hdGguaW11bCh1dCxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKHV0LEF0KXwwKStNYXRoLmltdWwoWGUsQnQpfDAsQT1BK01hdGguaW11bChYZSxBdCl8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KHZ0LHN0KXwwLG09KG09bStNYXRoLmltdWwodnQsWnQpfDApK01hdGguaW11bChTdCxzdCl8MCxBPUErTWF0aC5pbXVsKFN0LFp0KXwwLEU9RStNYXRoLmltdWwocnQsWWUpfDAsbT0obT1tK01hdGguaW11bChydCxUdCl8MCkrTWF0aC5pbXVsKFFlLFllKXwwLEE9QStNYXRoLmltdWwoUWUs''@;'; put 'put ''VHQpfDAsRT1FK01hdGguaW11bChBZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKEFlLE10KXwwKStNYXRoLmltdWwoRGUsZnQpfDAsQT1BK01hdGguaW11bChEZSxNdCl8MCxFPUUrTWF0aC5pbXVsKExlLG5uKXwwLG09KG09bStNYXRoLmltdWwoTGUsV3QpfDApK01hdGguaW11bChSZSxubil8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKFJlLFd0KXwwLEU9RStNYXRoLmltdWwoamUsZG4pfDAsbT0obT1tK01hdGguaW11bChqZSxtbil8MCkrTWF0aC5pbXVsKGtlLGRuKXwwLEE9QStNYXRoLmltdWwoa2UsbW4pfDA7dmFyIHFpPShqKyhFPUUrTWF0aC5pbXVsKHhlLGZuKXwwKXwwKSsoKDgxOTEmKG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoeGUsdG4pfDApK01hdGguaW11bCh5ZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCh5ZSx0bil8MCkrKG0+Pj4xMyl8MCkrKHFpPj4+MjYpfDAscWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLEJ0KSxtPShtPU1hdGguaW11bChJZSxBdCkpK01hdGgu''@;'; put 'put ''aW11bChhdCxCdCl8MCxBPU1hdGguaW11bChhdCxBdCksRT1FK01hdGguaW11bCh1dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHV0LFp0KXwwKStNYXRoLmltdWwoWGUsc3QpfDAsQT1BK01hdGguaW11bChYZSxadCl8MCxFPUUrTWF0aC5pbXVsKHZ0LFllKXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''dnQsVHQpfDApK01hdGguaW11bChTdCxZZSl8MCxBPUErTWF0aC5pbXVsKFN0LFR0KXwwLEU9RStNYXRoLmltdWwocnQsZnQpfDAsbT0obT1tK01hdGguaW11bChydCxNdCl8MCkrTWF0aC5pbXVsKFFlLGZ0KXwwLEE9QStNYXRoLmltdWwoUWUsTXQpfDAsRT1FK01hdGguaW11bChBZSxubil8''@;'; put 'put ''MCxtPShtPW0rTWF0aC5pbXVsKEFlLFd0KXwwKStNYXRoLmltdWwoRGUsbm4pfDAsQT1BK01hdGguaW11bChEZSxXdCl8MCxFPUUrTWF0aC5pbXVsKExlLGRuKXwwLG09KG09bStNYXRoLmltdWwoTGUsbW4pfDApK01hdGguaW11bChSZSxkbil8MCxBPUErTWF0aC5pbXVsKFJlLG1uKXwwO3Zh''@;'; put 'put ''ciBQYT0oaisoRT1FK01hdGguaW11bChqZSxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGplLHRuKXwwKStNYXRoLmltdWwoa2UsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoa2UsdG4pfDApKyhtPj4+MTMpfDApKyhQYT4+PjI2KXwwLFBhJj02NzEwODg2MyxF''@;'; put 'put ''PU1hdGguaW11bChJZSxzdCksbT0obT1NYXRoLmltdWwoSWUsWnQpKStNYXRoLmltdWwoYXQsc3QpfDAsQT1NYXRoLmltdWwoYXQsWnQpLEU9RStNYXRoLmltdWwodXQsWWUpfDAsbT0obT1tK01hdGguaW11bCh1dCxUdCl8MCkrTWF0aC5pbXVsKFhlLFllKXwwLEE9QStNYXRoLmltdWwoWGUs''@;'; put 'put ''VHQpfDAsRT1FK01hdGguaW11bCh2dCxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LE10KXwwKStNYXRoLmltdWwoU3QsZnQpfDAsQT1BK01hdGguaW11bChTdCxNdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LG5uKXwwLG09KG09bStNYXRoLmltdWwocnQsV3QpfDApK01hdGguaW11bChRZSxubil8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKFFlLFd0KXwwLEU9RStNYXRoLmltdWwoQWUsZG4pfDAsbT0obT1tK01hdGguaW11bChBZSxtbil8MCkrTWF0aC5pbXVsKERlLGRuKXwwLEE9QStNYXRoLmltdWwoRGUsbW4pfDA7dmFyIHVyPShqKyhFPUUrTWF0aC5pbXVsKExlLGZuKXwwKXwwKSsoKDgxOTEmKG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoTGUsdG4pfDApK01hdGguaW11bChSZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChSZSx0bil8MCkrKG0+Pj4xMyl8MCkrKHVyPj4+MjYpfDAsdXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLFllKSxtPShtPU1hdGguaW11bChJZSxUdCkpK01hdGgu''@;'; put 'put ''aW11bChhdCxZZSl8MCxBPU1hdGguaW11bChhdCxUdCksRT1FK01hdGguaW11bCh1dCxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKHV0LE10KXwwKStNYXRoLmltdWwoWGUsZnQpfDAsQT1BK01hdGguaW11bChYZSxNdCl8MCxFPUUrTWF0aC5pbXVsKHZ0LG5uKXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''dnQsV3QpfDApK01hdGguaW11bChTdCxubil8MCxBPUErTWF0aC5pbXVsKFN0LFd0KXwwLEU9RStNYXRoLmltdWwocnQsZG4pfDAsbT0obT1tK01hdGguaW11bChydCxtbil8MCkrTWF0aC5pbXVsKFFlLGRuKXwwLEE9QStNYXRoLmltdWwoUWUsbW4pfDA7dmFyIGJhPShqKyhFPUUrTWF0aC5p''@;'; put 'put ''bXVsKEFlLGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoQWUsdG4pfDApK01hdGguaW11bChEZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChEZSx0bil8MCkrKG0+Pj4xMyl8MCkrKGJhPj4+MjYpfDAsYmEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLGZ0KSxt''@;'; put 'put ''PShtPU1hdGguaW11bChJZSxNdCkpK01hdGguaW11bChhdCxmdCl8MCxBPU1hdGguaW11bChhdCxNdCksRT1FK01hdGguaW11bCh1dCxubil8MCxtPShtPW0rTWF0aC5pbXVsKHV0LFd0KXwwKStNYXRoLmltdWwoWGUsbm4pfDAsQT1BK01hdGguaW11bChYZSxXdCl8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KHZ0LGRuKXwwLG09KG09bStNYXRoLmltdWwodnQsbW4pfDApK01hdGguaW11bChTdCxkbil8MCxBPUErTWF0aC5pbXVsKFN0LG1uKXwwO3ZhciBNaT0oaisoRT1FK01hdGguaW11bChydCxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHJ0LHRuKXwwKStNYXRoLmltdWwoUWUs''@;'; put 'put ''Zm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoUWUsdG4pfDApKyhtPj4+MTMpfDApKyhNaT4+PjI2KXwwLE1pJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxubiksbT0obT1NYXRoLmltdWwoSWUsV3QpKStNYXRoLmltdWwoYXQsbm4pfDAsQT1NYXRoLmltdWwoYXQsV3QpLEU9RStN''@;'; put 'put ''YXRoLmltdWwodXQsZG4pfDAsbT0obT1tK01hdGguaW11bCh1dCxtbil8MCkrTWF0aC5pbXVsKFhlLGRuKXwwLEE9QStNYXRoLmltdWwoWGUsbW4pfDA7dmFyIHdhPShqKyhFPUUrTWF0aC5pbXVsKHZ0LGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodnQsdG4pfDApK01hdGgu''@;'; put 'put ''aW11bChTdCxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChTdCx0bil8MCkrKG0+Pj4xMyl8MCkrKHdhPj4+MjYpfDAsd2EmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLGRuKSxtPShtPU1hdGguaW11bChJZSxtbikpK01hdGguaW11bChhdCxkbil8MCxBPU1hdGguaW11bChhdCxt''@;'; put 'put ''bik7dmFyIGVhPShqKyhFPUUrTWF0aC5pbXVsKHV0LGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodXQsdG4pfDApK01hdGguaW11bChYZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChYZSx0bil8MCkrKG0+Pj4xMyl8MCkrKGVhPj4+MjYpfDAsZWEmPTY3MTA4''@;'; put 'put ''ODYzO3ZhciBGcj0oaisoRT1NYXRoLmltdWwoSWUsZm4pKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKEllLHRuKSkrTWF0aC5pbXVsKGF0LGZuKXwwKSk8PDEzKXwwO3JldHVybiBqPSgoQT1NYXRoLmltdWwoYXQsdG4pKSsobT4+PjEzKXwwKSsoRnI+Pj4yNil8MCxGciY9NjcxMDg4NjMs''@;'; put 'put ''SFswXT1jYSxIWzFdPV9pLEhbMl09dnIsSFszXT1YaSxIWzRdPVFpLEhbNV09VmksSFs2XT1laSxIWzddPXVhLEhbOF09UmksSFs5XT1EYSxIWzEwXT1oaSxIWzExXT1xaSxIWzEyXT1QYSxIWzEzXT11cixIWzE0XT1iYSxIWzE1XT1NaSxIWzE2XT13YSxIWzE3XT1lYSxIWzE4XT1GciwwIT09''@;'; put 'put ''aiYmKEhbMTldPWoseC5sZW5ndGgrKykseH07ZnVuY3Rpb24gZWUoQixnLHkpe3JldHVybihuZXcgSikubXVscChCLGcseSl9ZnVuY3Rpb24gSihCLGcpe3RoaXMueD1CLHRoaXMueT1nfU1hdGguaW11bHx8KFc9WSksdy5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oZyx5KXt2YXIgeCxDPXRo''@;'; put 'put ''aXMubGVuZ3RoK2cubGVuZ3RoO3JldHVybiB4PTEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/Vyh0aGlzLGcseSk6Qzw2Mz9ZKHRoaXMsZyx5KTpDPDEwMjQ/ZnVuY3Rpb24gcShCLGcseSl7eS5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkIubmVnYXRpdmUseS5sZW5ndGg9Qi5sZW5ndGgr''@;'; put 'put ''Zy5sZW5ndGg7Zm9yKHZhciB4PTAsQz0wLFQ9MDtUPHkubGVuZ3RoLTE7VCsrKXt2YXIgSD1DO0M9MDtmb3IodmFyIGo9NjcxMDg4NjMmeCxFPU1hdGgubWluKFQsZy5sZW5ndGgtMSksbT1NYXRoLm1heCgwLFQtQi5sZW5ndGgrMSk7bTw9RTttKyspe3ZhciBzZT0oMHxCLndvcmRzW1QtbV0p''@;'; put 'put ''KigwfGcud29yZHNbbV0pLENlPTY3MTA4ODYzJnNlO2o9NjcxMDg4NjMmKENlPUNlK2p8MCksQys9KEg9KEg9SCsoc2UvNjcxMDg4NjR8MCl8MCkrKENlPj4+MjYpfDApPj4+MjYsSCY9NjcxMDg4NjN9eS53b3Jkc1tUXT1qLHg9SCxIPUN9cmV0dXJuIDAhPT14P3kud29yZHNbVF09eDp5Lmxl''@;'; put 'put ''bmd0aC0tLHkuc3RyaXAoKX0odGhpcyxnLHkpOmVlKHRoaXMsZyx5KSx4fSxKLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT1uZXcgQXJyYXkoZykseD13LnByb3RvdHlwZS5fY291bnRCaXRzKGcpLTEsQz0wO0M8ZztDKyspeVtDXT10aGlzLnJldkJpbihDLHgsZyk7''@;'; put 'put ''cmV0dXJuIHl9LEoucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihnLHkseCl7aWYoMD09PWd8fGc9PT14LTEpcmV0dXJuIGc7Zm9yKHZhciBDPTAsVD0wO1Q8eTtUKyspQ3w9KDEmZyk8PHktVC0xLGc+Pj0xO3JldHVybiBDfSxKLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGcseSx4LEMs''@;'; put 'put ''VCxIKXtmb3IodmFyIGo9MDtqPEg7aisrKUNbal09eVtnW2pdXSxUW2pdPXhbZ1tqXV19LEoucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihnLHkseCxDLFQsSCl7dGhpcy5wZXJtdXRlKEgsZyx5LHgsQyxUKTtmb3IodmFyIGo9MTtqPFQ7ajw8PTEpZm9yKHZhciBFPWo8PDEsbT1NYXRo''@;'; put 'put ''LmNvcygyKk1hdGguUEkvRSksQT1NYXRoLnNpbigyKk1hdGguUEkvRSksYWU9MDthZTxUO2FlKz1FKWZvcih2YXIgbmU9bSxzZT1BLENlPTA7Q2U8ajtDZSsrKXt2YXIgVWU9eFthZStDZV0sSmU9Q1thZStDZV0saXQ9eFthZStDZStqXSx4ZT1DW2FlK0NlK2pdLHllPW5lKml0LXNlKnhlO3hl''@;'; put 'put ''PW5lKnhlK3NlKml0LHhbYWUrQ2VdPVVlKyhpdD15ZSksQ1thZStDZV09SmUreGUseFthZStDZStqXT1VZS1pdCxDW2FlK0NlK2pdPUplLXhlLENlIT09RSYmKHllPW0qbmUtQSpzZSxzZT1tKnNlK0EqbmUsbmU9eWUpfX0sSi5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oZyx5KXt2''@;'; put 'put ''YXIgeD0xfE1hdGgubWF4KHksZyksQz0xJngsVD0wO2Zvcih4PXgvMnwwO3g7eD4+Pj0xKVQrKztyZXR1cm4gMTw8VCsxK0N9LEoucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihnLHkseCl7aWYoISh4PD0xKSlmb3IodmFyIEM9MDtDPHgvMjtDKyspe3ZhciBUPWdbQ107Z1tDXT1nW3gt''@;'; put 'put ''Qy0xXSxnW3gtQy0xXT1ULFQ9eVtDXSx5W0NdPS15W3gtQy0xXSx5W3gtQy0xXT0tVH19LEoucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihnLHkpe2Zvcih2YXIgeD0wLEM9MDtDPHkvMjtDKyspe3ZhciBUPTgxOTIqTWF0aC5yb3VuZChnWzIqQysxXS95KStNYXRoLnJvdW5kKGdb''@;'; put 'put ''MipDXS95KSt4O2dbQ109NjcxMDg4NjMmVCx4PVQ8NjcxMDg4NjQ/MDpULzY3MTA4ODY0fDB9cmV0dXJuIGd9LEoucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oZyx5LHgsQyl7Zm9yKHZhciBUPTAsSD0wO0g8eTtIKyspeFsyKkhdPTgxOTEmKFQrPTB8Z1tIXSkseFsyKkgrMV09ODE5''@;'; put 'put ''MSYoVD4+Pj0xMyksVD4+Pj0xMztmb3IoSD0yKnk7SDxDOysrSCl4W0hdPTA7cCgwPT09VCkscCghKC04MTkyJlQpKX0sSi5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihnKXtmb3IodmFyIHk9bmV3IEFycmF5KGcpLHg9MDt4PGc7eCsrKXlbeF09MDtyZXR1cm4geX0sSi5wcm90b3R5cGUubXVs''@;'; put 'put ''cD1mdW5jdGlvbihnLHkseCl7dmFyIEM9Mip0aGlzLmd1ZXNzTGVuMTNiKGcubGVuZ3RoLHkubGVuZ3RoKSxUPXRoaXMubWFrZVJCVChDKSxIPXRoaXMuc3R1YihDKSxqPW5ldyBBcnJheShDKSxFPW5ldyBBcnJheShDKSxtPW5ldyBBcnJheShDKSxBPW5ldyBBcnJheShDKSxhZT1uZXcgQXJy''@;'; put 'put ''YXkoQyksbmU9bmV3IEFycmF5KEMpLHNlPXgud29yZHM7c2UubGVuZ3RoPUMsdGhpcy5jb252ZXJ0MTNiKGcud29yZHMsZy5sZW5ndGgsaixDKSx0aGlzLmNvbnZlcnQxM2IoeS53b3Jkcyx5Lmxlbmd0aCxBLEMpLHRoaXMudHJhbnNmb3JtKGosSCxFLG0sQyxUKSx0aGlzLnRyYW5zZm9ybShB''@;'; put 'put ''LEgsYWUsbmUsQyxUKTtmb3IodmFyIENlPTA7Q2U8QztDZSsrKXt2YXIgVWU9RVtDZV0qYWVbQ2VdLW1bQ2VdKm5lW0NlXTttW0NlXT1FW0NlXSpuZVtDZV0rbVtDZV0qYWVbQ2VdLEVbQ2VdPVVlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShFLG0sQyksdGhpcy50cmFuc2Zvcm0oRSxtLHNlLEgs''@;'; put 'put ''QyxUKSx0aGlzLmNvbmp1Z2F0ZShzZSxILEMpLHRoaXMubm9ybWFsaXplMTNiKHNlLEMpLHgubmVnYXRpdmU9Zy5uZWdhdGl2ZV55Lm5lZ2F0aXZlLHgubGVuZ3RoPWcubGVuZ3RoK3kubGVuZ3RoLHguc3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcpe3ZhciB5PW5ldyB3KG51''@;'; put 'put ''bGwpO3JldHVybiB5LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksdGhpcy5tdWxUbyhnLHkpfSx3LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGcpe3ZhciB5PW5ldyB3KG51bGwpO3JldHVybiB5LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksZWUo''@;'; put 'put ''dGhpcyxnLHkpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oZyx0aGlzKX0sdy5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCk7Zm9yKHZhciB5PTAseD0wO3g8dGhpcy5s''@;'; put 'put ''ZW5ndGg7eCsrKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSpnLFQ9KDY3MTA4ODYzJkMpKyg2NzEwODg2MyZ5KTt5Pj49MjYseSs9Qy82NzEwODg2NHwwLHkrPVQ+Pj4yNix0aGlzLndvcmRzW3hdPTY3MTA4ODYzJlR9cmV0dXJuIDAhPT15JiYodGhpcy53b3Jkc1t4XT15LHRoaXMubGVuZ3Ro''@;'; put 'put ''KyspLHRoaXMubGVuZ3RoPTA9PT1nPzE6dGhpcy5sZW5ndGgsdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGcpfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlz''@;'; put 'put ''cXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnKXt2YXIgeT1mdW5jdGlvbiBaKEIpe2Zvcih2YXIgZz1uZXcgQXJyYXkoQi5iaXRMZW5ndGgoKSkseT0wO3k8Zy5sZW5ndGg7eSsrKXt2YXIgQz15JTI2O2dbeV09''@;'; put 'put ''KEIud29yZHNbeS8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIGd9KGcpO2lmKDA9PT15Lmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8eS5sZW5ndGgmJjA9PT15W0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzx5Lmxlbmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPHku''@;'; put 'put ''bGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PXlbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgVCx5PWclMjYseD0oZy15KS8yNixDPTY3MTA4ODYzPj4+MjYteTw8MjYteTtpZigw''@;'; put 'put ''IT09eSl7dmFyIEg9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgaj10aGlzLndvcmRzW1RdJkM7dGhpcy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1qPDx5fEgsSD1qPj4+MjYteX1IJiYodGhpcy53b3Jkc1tUXT1ILHRoaXMubGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10''@;'; put 'put ''aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1QrKyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHAoMD09PXRo''@;'; put 'put ''aXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGcpfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZyx5LHgpe3ZhciBDO3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKSxDPXk/KHkteSUyNikvMjY6MDt2YXIgVD1nJTI2LEg9TWF0aC5taW4oKGctVCkvMjYsdGhpcy5sZW5ndGgpLGo9Njcx''@;'; put 'put ''MDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1ILEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDttPEg7bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0aD1IfWlmKDAhPT1IKWlmKHRoaXMubGVuZ3RoPkgpZm9yKHRoaXMubGVuZ3RoLT1ILG09MDttPHRoaXMu''@;'; put 'put ''bGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStIXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIGFlPTB8dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21d''@;'; put 'put ''PUE8PDI2LVR8YWU+Pj5ULEE9YWUman1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGcseSx4KXtyZXR1''@;'; put 'put ''cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oZyx5LHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oZyl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGcpfSx3''@;'; put 'put ''LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oZyl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGcpfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBl''@;'; put 'put ''b2YgZyYmZz49MCk7dmFyIHk9ZyUyNix4PShnLXkpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jkc1t4XSYxPDx5KSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHk9ZyUyNix4PShnLXkpLzI2O3Jl''@;'; put 'put ''dHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09eSYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT15JiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0''@;'; put 'put ''aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj55PDx5KSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihnKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIm51bWJlciI9PXR5cGVvZiBn''@;'; put 'put ''KSxwKGc8NjcxMDg4NjQpLGc8MD90aGlzLmlzdWJuKC1nKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPGc/KHRoaXMud29yZHNbMF09Zy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0''@;'; put 'put ''aGlzLmlzdWJuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihnKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKGcpe3RoaXMud29yZHNbMF0rPWc7Zm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t5XT49NjcxMDg4NjQ7eSsrKXRoaXMud29yZHNb''@;'; put 'put ''eV0tPTY3MTA4ODY0LHk9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbeSsxXT0xOnRoaXMud29yZHNbeSsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCx5KzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGcpe2lmKHAoIm51bWJlciI9PXR5''@;'; put 'put ''cGVvZiBnKSxwKGc8NjcxMDg4NjQpLGc8MClyZXR1cm4gdGhpcy5pYWRkbigtZyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWcsMT09PXRoaXMubGVuZ3RoJiZ0''@;'; put 'put ''aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3ldPDA7eSsrKXRoaXMud29yZHNbeV0rPTY3MTA4ODY0LHRoaXMud29yZHNbeSsxXS09MTtyZXR1cm4gdGhp''@;'; put 'put ''cy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oZyl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihnKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0''@;'; put 'put ''aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihnLHkseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKGcubGVuZ3RoK3gpO3ZhciBILGo9MDtmb3IoVD0w''@;'; put 'put ''O1Q8Zy5sZW5ndGg7VCsrKXtIPSgwfHRoaXMud29yZHNbVCt4XSkrajt2YXIgRT0oMHxnLndvcmRzW1RdKSp5O2o9KChILT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIfWZvcig7VDx0aGlzLmxlbmd0aC14O1QrKylqPShIPSgwfHRo''@;'; put 'put ''aXMud29yZHNbVCt4XSkraik+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIO2lmKDA9PT1qKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKHAoLTE9PT1qKSxqPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKWo9KEg9LSgwfHRoaXMud29yZHNbVF0pK2opPj4yNix0aGlzLndvcmRzW1RdPTY3''@;'; put 'put ''MTA4ODYzJkg7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKGcseSl7dmFyIHgsQz10aGlzLmNsb25lKCksVD1nLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0cyhIKSkmJihUPVQu''@;'; put 'put ''dXNobG4oeCksQy5pdXNobG4oeCksSD0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5sZW5ndGg7aWYoIm1vZCIhPT15KXsobT1uZXcgdyhudWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtB''@;'; put 'put ''KyspbS53b3Jkc1tBXT0wfXZhciBhZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09YWUubmVnYXRpdmUmJihDPWFlLG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFyIG5lPUUtMTtuZT49MDtuZS0tKXt2YXIgc2U9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0aCtuZV0pKygw''@;'; put 'put ''fEMud29yZHNbVC5sZW5ndGgrbmUtMV0pO2ZvcihzZT1NYXRoLm1pbihzZS9IfDAsNjcxMDg4NjMpLEMuX2lzaGxuc3VibXVsKFQsc2UsbmUpOzAhPT1DLm5lZ2F0aXZlOylzZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsbmUpLEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0x''@;'; put 'put ''KTttJiYobS53b3Jkc1tuZV09c2UpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09eSYmMCE9PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihnLHkseCl7cmV0dXJuIHAoIWcuaXNaZXJvKCkpLHRoaXMu''@;'; put 'put ''aXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChnLHkpLCJtb2QiIT09eSYmKEM9SC5kaXYubmVnKCkpLCJkaXYiIT09eSYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRp''@;'; put 'put ''dmUmJlQuaWFkZChnKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlPyhIPXRoaXMuZGl2bW9kKGcubmVnKCkseSksIm1vZCIhPT15JiYoQz1ILmRpdi5uZWcoKSkse2RpdjpDLG1vZDpILm1vZH0pOnRoaXMubmVnYXRpdmUmZy5uZWdhdGl2ZT8oSD10''@;'; put 'put ''aGlzLm5lZygpLmRpdm1vZChnLm5lZygpLHkpLCJkaXYiIT09eSYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaXN1YihnKSkse2RpdjpILmRpdixtb2Q6VH0pOmcubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChnKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9''@;'; put 'put ''PT1nLmxlbmd0aD8iZGl2Ij09PXk/e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09eT97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kbihnLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZG4oZy53b3Jk''@;'; put 'put ''c1swXSkpfTp0aGlzLl93b3JkRGl2KGcseSk7dmFyIEMsVCxIfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCExKS5tb2R9''@;'; put 'put ''LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oZyl7dmFyIHk9dGhpcy5kaXZtb2QoZyk7aWYoeS5tb2QuaXNaZXJvKCkpcmV0dXJuIHkuZGl2O3ZhciB4PTAhPT15LmRp''@;'; put 'put ''di5uZWdhdGl2ZT95Lm1vZC5pc3ViKGcpOnkubW9kLEM9Zy51c2hybigxKSxUPWcuYW5kbG4oMSksSD14LmNtcChDKTtyZXR1cm4gSDwwfHwxPT09VCYmMD09PUg/eS5kaXY6MCE9PXkuZGl2Lm5lZ2F0aXZlP3kuZGl2LmlzdWJuKDEpOnkuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2Ru''@;'; put 'put ''PWZ1bmN0aW9uKGcpe3AoZzw9NjcxMDg4NjMpO2Zvcih2YXIgeT0oMTw8MjYpJWcseD0wLEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl4PSh5KngrKDB8dGhpcy53b3Jkc1tDXSkpJWc7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGcpe3AoZzw9NjcxMDg4NjMpO2Zvcih2''@;'; put 'put ''YXIgeT0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqeTt0aGlzLndvcmRzW3hdPUMvZ3wwLHk9QyVnfXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5p''@;'; put 'put ''ZGl2bihnKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlKSxwKCFnLmlzWmVybygpKTt2YXIgeT10aGlzLHg9Zy5jbG9uZSgpO3k9MCE9PXkubmVnYXRpdmU/eS51bW9kKGcpOnkuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPW5l''@;'; put 'put ''dyB3KDApLGo9bmV3IHcoMSksRT0wO3kuaXNFdmVuKCkmJnguaXNFdmVuKCk7KXkuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9eS5jbG9uZSgpOyF5LmlzWmVybygpOyl7Zm9yKHZhciBhZT0wLG5lPTE7ISh5LndvcmRzWzBdJm5lKSYmYWU8MjY7Kyth''@;'; put 'put ''ZSxuZTw8PTEpO2lmKGFlPjApZm9yKHkuaXVzaHJuKGFlKTthZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkpJiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBzZT0wLENlPTE7ISh4LndvcmRzWzBdJkNlKSYmc2U8MjY7KytzZSxDZTw8''@;'; put 'put ''PTEpO2lmKHNlPjApZm9yKHguaXVzaHJuKHNlKTtzZS0tID4wOykoSC5pc09kZCgpfHxqLmlzT2RkKCkpJiYoSC5pYWRkKG0pLGouaXN1YihBKSksSC5pdXNocm4oMSksai5pdXNocm4oMSk7eS5jbXAoeCk+PTA/KHkuaXN1Yih4KSxDLmlzdWIoSCksVC5pc3ViKGopKTooeC5pc3ViKHkpLEgu''@;'; put 'put ''aXN1YihDKSxqLmlzdWIoVCkpfXJldHVybnthOkgsYjpqLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlKSxwKCFnLmlzWmVybygpKTt2YXIgYWUseT10aGlzLHg9Zy5jbG9uZSgpO3k9MCE9PXkubmVnYXRpdmU/eS51bW9k''@;'; put 'put ''KGcpOnkuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPXguY2xvbmUoKTt5LmNtcG4oMSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIGo9MCxFPTE7ISh5LndvcmRzWzBdJkUpJiZqPDI2OysraixFPDw9MSk7aWYoaj4wKWZvcih5Lml1c2hybihqKTtqLS0gPjA7KUMu''@;'; put 'put ''aXNPZGQoKSYmQy5pYWRkKEgpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoSCksVC5pdXNocm4oMSk7eS5jbXAoeCk+PTA/KHkuaXN1Yih4''@;'; put 'put ''KSxDLmlzdWIoVCkpOih4LmlzdWIoeSksVC5pc3ViKEMpKX1yZXR1cm4oYWU9MD09PXkuY21wbigxKT9DOlQpLmNtcG4oMCk8MCYmYWUuaWFkZChnKSxhZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGcpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGcuYWJzKCk7aWYoZy5pc1plcm8oKSly''@;'; put 'put ''ZXR1cm4gdGhpcy5hYnMoKTt2YXIgeT10aGlzLmNsb25lKCkseD1nLmNsb25lKCk7eS5uZWdhdGl2ZT0wLHgubmVnYXRpdmU9MDtmb3IodmFyIEM9MDt5LmlzRXZlbigpJiZ4LmlzRXZlbigpO0MrKyl5Lml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7eS5pc0V2ZW4oKTspeS5p''@;'; put 'put ''dXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD15LmNtcCh4KTtpZihUPDApe3ZhciBIPXk7eT14LHg9SH1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBuKDEpKWJyZWFrO3kuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rp''@;'; put 'put ''b24oZyl7cmV0dXJuIHRoaXMuZWdjZChnKS5hLnVtb2QoZyl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRs''@;'; put 'put ''bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZnfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyk7dmFyIHk9ZyUyNix4PShnLXkpLzI2LEM9MTw8eTtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhp''@;'; put 'put ''cy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLEg9eDswIT09VCYmSDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPTB8dGhpcy53b3Jkc1tIXTtUPShqKz1UKT4+PjI2LHRoaXMud29yZHNbSF09aiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tIXT1ULHRoaXMubGVuZ3Ro''@;'; put 'put ''KyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGcpe3ZhciB4LHk9ZzwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYheSlyZXR1cm4tMTtpZigwPT09''@;'; put 'put ''dGhpcy5uZWdhdGl2ZSYmeSlyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXt5JiYoZz0tZykscChnPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09Zz8wOkM8Zz8tMToxfXJldHVybiAwIT09dGhp''@;'; put 'put ''cy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihnKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiAxO3ZhciB5PXRoaXMudWNtcChnKTtyZXR1cm4g''@;'; put 'put ''MCE9PXRoaXMubmVnYXRpdmU/MHwteTp5fSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGcpe2lmKHRoaXMubGVuZ3RoPmcubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGcubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgeT0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9''@;'; put 'put ''MHx0aGlzLndvcmRzW3hdLFQ9MHxnLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/eT0tMTpDPlQmJih5PTEpO2JyZWFrfX1yZXR1cm4geX0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihnKXtyZXR1cm4g''@;'; put 'put ''MT09PXRoaXMuY21wKGcpfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMu''@;'; put 'put ''Y21wbihnKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcChnKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPD0wfSx3''@;'; put 'put ''LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXAoZyl9LHcucmVkPWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgTWUoZyl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9u''@;'; put 'put ''KGcpe3JldHVybiBwKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHAoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGcpfSx3LnByb3RvdHlwZS5mcm9t''@;'; put 'put ''UmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnJl''@;'; put 'put ''ZD1nLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBwKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGcpfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhp''@;'; put 'put ''cy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5p''@;'; put 'put ''YWRkKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRo''@;'; put 'put ''aXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQu''@;'; put 'put ''c2hsKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQubXVsKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElN''@;'; put 'put ''dWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLmltdWwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5y''@;'; put 'put ''ZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51''@;'; put 'put ''bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyks''@;'; put 'put ''dGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBl''@;'; put 'put ''LnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5y''@;'; put 'put ''ZWQmJiFnLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxnKX07dmFyIHJlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoQixnKXt0aGlzLm5hbWU9Qix0aGlzLnA9''@;'; put 'put ''bmV3IHcoZywxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHVlKCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYg''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBnZSgpe2llLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5j''@;'; put 'put ''YWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFRlKCl7aWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZm''@;'; put 'put ''ZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBNZShCKXtpZigic3RyaW5nIj09dHlwZW9mIEIpe3ZhciBnPXcuX3ByaW1lKEIpO3RoaXMubT1nLnAsdGhpcy5wcmltZT1nfWVsc2UgcChCLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPUIsdGhpcy5wcmltZT1u''@;'; put 'put ''dWxsfWZ1bmN0aW9uIFplKEIpe01lLmNhbGwodGhpcyxCKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1v''@;'; put 'put ''ZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYp''@;'; put 'put ''fWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IHcobnVsbCk7cmV0dXJuIGcud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxnfSxpZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihnKXt2YXIgeCx5PWc7ZG97dGhpcy5zcGxpdCh5LHRoaXMudG1w''@;'; put 'put ''KSx4PSh5PSh5PXRoaXMuaW11bEsoeSkpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMubik7dmFyIEM9eDx0aGlzLm4/LTE6eS51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1DPyh5LndvcmRzWzBdPTAseS5sZW5ndGg9MSk6Qz4wP3kuaXN1Yih0aGlzLnApOnZvaWQg''@;'; put 'put ''MCE9PXkuc3RyaXA/eS5zdHJpcCgpOnkuX3N0cmlwKCkseX0saWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcseSl7Zy5pdXNocm4odGhpcy5uLDAseSl9LGllLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pbXVsKHRoaXMuayl9LFYodWUsaWUpLHVlLnByb3RvdHlw''@;'; put 'put ''ZS5zcGxpdD1mdW5jdGlvbihnLHkpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4oZy5sZW5ndGgsOSksVD0wO1Q8QztUKyspeS53b3Jkc1tUXT1nLndvcmRzW1RdO2lmKHkubGVuZ3RoPUMsZy5sZW5ndGg8PTkpcmV0dXJuIGcud29yZHNbMF09MCx2b2lkKGcubGVuZ3RoPTEpO3ZhciBI''@;'; put 'put ''PWcud29yZHNbOV07Zm9yKHkud29yZHNbeS5sZW5ndGgrK109SCZ4LFQ9MTA7VDxnLmxlbmd0aDtUKyspe3ZhciBqPTB8Zy53b3Jkc1tUXTtnLndvcmRzW1QtMTBdPShqJngpPDw0fEg+Pj4yMixIPWp9Zy53b3Jkc1tULTEwXT1IPj4+PTIyLGcubGVuZ3RoLT0wPT09SCYmZy5sZW5ndGg+MTA/''@;'; put 'put ''MTA6OX0sdWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2cud29yZHNbZy5sZW5ndGhdPTAsZy53b3Jkc1tnLmxlbmd0aCsxXT0wLGcubGVuZ3RoKz0yO2Zvcih2YXIgeT0wLHg9MDt4PGcubGVuZ3RoO3grKyl7dmFyIEM9MHxnLndvcmRzW3hdO2cud29yZHNbeF09NjcxMDg4NjMmKHkr''@;'; put 'put ''PTk3NypDKSx5PTY0KkMrKHkvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiYoZy5sZW5ndGgtLSwwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmZy5sZW5ndGgtLSksZ30sVihnZSxpZSksVihfZSxpZSksVihUZSxpZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0''@;'; put 'put ''aW9uKGcpe2Zvcih2YXIgeT0wLHg9MDt4PGcubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8Zy53b3Jkc1t4XSkreSxUPTY3MTA4ODYzJkM7Qz4+Pj0yNixnLndvcmRzW3hdPVQseT1DfXJldHVybiAwIT09eSYmKGcud29yZHNbZy5sZW5ndGgrK109eSksZ30sdy5fcHJpbWU9ZnVuY3Rpb24oZyl7''@;'; put 'put ''aWYocmVbZ10pcmV0dXJuIHJlW2ddO3ZhciB5O2lmKCJrMjU2Ij09PWcpeT1uZXcgdWU7ZWxzZSBpZigicDIyNCI9PT1nKXk9bmV3IGdlO2Vsc2UgaWYoInAxOTIiPT09Zyl5PW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09Zyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitnKTt5''@;'; put 'put ''PW5ldyBUZX1yZXR1cm4gcmVbZ109eSx5fSxNZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwKGcucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LE1lLnByb3RvdHlw''@;'; put 'put ''ZS5fdmVyaWZ5Mj1mdW5jdGlvbihnLHkpe3AoIShnLm5lZ2F0aXZlfHkubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAoZy5yZWQmJmcucmVkPT09eS5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sTWUucHJvdG90eXBlLmltb2Q9ZnVu''@;'; put 'put ''Y3Rpb24oZyl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGcpLl9mb3JjZVJlZCh0aGlzKTpnLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LE1lLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNaZXJvKCk/Zy5jbG9uZSgpOnRoaXMubS5zdWIo''@;'; put 'put ''ZykuX2ZvcmNlUmVkKHRoaXMpfSxNZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuYWRkKHkpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sTWUucHJvdG90eXBlLmlhZGQ9ZnVu''@;'; put 'put ''Y3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5pYWRkKHkpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxNZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuc3ViKHkpO3JldHVybiB4LmNt''@;'; put 'put ''cG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LE1lLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuaXN1Yih5KTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LE1lLnByb3RvdHlwZS5zaGw9''@;'; put 'put ''ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShnKSx0aGlzLmltb2QoZy51c2hsbih5KSl9LE1lLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyx5KSx0aGlzLmltb2QoZy5pbXVsKHkpKX0sTWUucHJvdG90eXBlLm11bD1mdW5jdGlv''@;'; put 'put ''bihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcseSksdGhpcy5pbW9kKGcubXVsKHkpKX0sTWUucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW11bChnLGcuY2xvbmUoKSl9LE1lLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubXVsKGcsZyl9''@;'; put 'put ''LE1lLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGcpe2lmKGcuaXNaZXJvKCkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgeT10aGlzLm0uYW5kbG4oMyk7aWYocCh5JTI9PTEpLDM9PT15KXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGcseCl9Zm9y''@;'; put 'put ''KHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hybigxKTtwKCFDLmlzWmVybygpKTt2YXIgSD1uZXcgdygxKS50b1JlZCh0aGlzKSxqPUgucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0''@;'; put 'put ''TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChqKTspbS5yZWRJQWRkKGopO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMpLGFlPXRoaXMucG93KGcsQy5hZGRuKDEpLml1c2hybigxKSksbmU9dGhpcy5wb3coZyxDKSxzZT1UOzAhPT1u''@;'; put 'put ''ZS5jbXAoSCk7KXtmb3IodmFyIENlPW5lLFVlPTA7MCE9PUNlLmNtcChIKTtVZSsrKUNlPUNlLnJlZFNxcigpO3AoVWU8c2UpO3ZhciBKZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hsbihzZS1VZS0xKSk7YWU9YWUucmVkTXVsKEplKSxBPUplLnJlZFNxcigpLG5lPW5lLnJlZE11bChBKSxz''@;'; put 'put ''ZT1VZX1yZXR1cm4gYWV9LE1lLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3ZhciB5PWcuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT15Lm5lZ2F0aXZlPyh5Lm5lZ2F0aXZlPTAsdGhpcy5pbW9kKHkpLnJlZE5lZygpKTp0aGlzLmltb2QoeSl9LE1lLnByb3RvdHlwZS5wb3c9ZnVuY3Rp''@;'; put 'put ''b24oZyx5KXtpZih5LmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09eS5jbXBuKDEpKXJldHVybiBnLmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09Zztmb3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylD''@;'; put 'put ''W1RdPXRoaXMubXVsKENbVC0xXSxnKTt2YXIgSD1DWzBdLGo9MCxFPTAsbT15LmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bSYmKG09MjYpLFQ9eS5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9yKHZhciBBPXkud29yZHNbVF0sYWU9bS0xO2FlPj0wO2FlLS0pe3ZhciBuZT1BPj5hZSYxO0ghPT1DWzBd''@;'; put 'put ''JiYoSD10aGlzLnNxcihIKSksMCE9PW5lfHwwIT09aj8oajw8PTEsanw9bmUsKDQ9PSsrRXx8MD09PVQmJjA9PT1hZSkmJihIPXRoaXMubXVsKEgsQ1tqXSksRT0wLGo9MCkpOkU9MH1tPTI2fXJldHVybiBIfSxNZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3ZhciB5PWcudW1v''@;'; put 'put ''ZCh0aGlzLm0pO3JldHVybiB5PT09Zz95LmNsb25lKCk6eX0sTWUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciB5PWcuY2xvbmUoKTtyZXR1cm4geS5yZWQ9bnVsbCx5fSx3Lm1vbnQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBaZShnKX0sVihaZSxNZSksWmUucHJvdG90''@;'; put 'put ''eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcudXNobG4odGhpcy5zaGlmdCkpfSxaZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIHk9dGhpcy5pbW9kKGcubXVsKHRoaXMucmludikpO3JldHVybiB5LnJlZD1udWxsLHl9LFplLnByb3Rv''@;'; put 'put ''dHlwZS5pbXVsPWZ1bmN0aW9uKGcseSl7aWYoZy5pc1plcm8oKXx8eS5pc1plcm8oKSlyZXR1cm4gZy53b3Jkc1swXT0wLGcubGVuZ3RoPTEsZzt2YXIgeD1nLmltdWwoeSksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5t''@;'; put 'put ''KSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0sWmUucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLHkpe2lmKGcu''@;'; put 'put ''aXNaZXJvKCl8fHkuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1nLm11bCh5KSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0''@;'; put 'put ''KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxaZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcuX2ludm1wKHRoaXMubSkubXVs''@;'; put 'put ''KHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShjZT1iLm5tZChjZSksdGhpcyl9LDU3MjQ0OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNDYzODcpLF89Yig1NTU5MikscD1iKDU1OTg4KTtjZS5leHBvcnRzPSFJJiYhXyhmdW5jdGlvbigpe3JldHVybiA3IT09T2JqZWN0LmRl''@;'; put 'put ''ZmluZVByb3BlcnR5KHAoImRpdiIpLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSw1NzcxODpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gXyhWLHcsUCxGKXt2YXIgUj17czpbInRob2RkZWEgc2Vrb25kYW1uaSIsInRob2Rk''@;'; put 'put ''ZSBzZWtvbmQiXSxzczpbVisiIHNla29uZGFtbmkiLFYrIiBzZWtvbmQiXSxtOlsiZWthIG1pbnRhbiIsImVrIG1pbnV0Il0sbW06W1YrIiBtaW50YW1uaSIsVisiIG1pbnRhbSJdLGg6WyJla2Egdm9yYW4iLCJlayB2b3IiXSxoaDpbVisiIHZvcmFtbmkiLFYrIiB2b3JhbSJdLGQ6WyJla2Eg''@;'; put 'put ''ZGlzYW4iLCJlayBkaXMiXSxkZDpbVisiIGRpc2FtbmkiLFYrIiBkaXMiXSxNOlsiZWthIG1ob2luZWFuIiwiZWsgbWhvaW5vIl0sTU06W1YrIiBtaG9pbmVhbW5pIixWKyIgbWhvaW5lIl0seTpbImVrYSB2b3JzYW4iLCJlayB2b3JvcyJdLHl5OltWKyIgdm9yc2FtbmkiLFYrIiB2b3JzYW0i''@;'; put 'put ''XX07cmV0dXJuIEY/UltQXVswXTpSW1BdWzFdfUkuZGVmaW5lTG9jYWxlKCJnb20tbGF0biIse21vbnRoczp7c3RhbmRhbG9uZToiSmFuZXJfRmVicmVyX01hcnNfQWJyaWxfTWFpX0p1bl9KdWxhaV9BZ29zdF9TZXRlbWJyX090dWJyX05vdmVtYnJfRGV6ZW1iciIuc3BsaXQoIl8iKSxmb3Jt''@;'; put 'put ''YXQ6IkphbmVyYWNoZWFfRmVicmVyYWNoZWFfTWFyc2FjaGVhX0FicmlsYWNoZWFfTWFpYWNoZWFfSnVuYWNoZWFfSnVsYWlhY2hlYV9BZ29zdGFjaGVhX1NldGVtYnJhY2hlYV9PdHVicmFjaGVhX05vdmVtYnJhY2hlYV9EZXplbWJyYWNoZWEiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L01NTU0o''@;'; put 'put ''XHMpK0Rbb0RdPy99LG1vbnRoc1Nob3J0OiJKYW4uX0ZlYi5fTWFyc19BYnIuX01haV9KdW5fSnVsLl9BZ28uX1NldC5fT3R1Ll9Ob3YuX0Rlei4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiQWl0YXJfU29tYXJfTW9uZ2xsYXJfQnVkaHZhcl9CaXJlc3Rhcl9T''@;'; put 'put ''dWtyYXJfU29uJ3ZhciIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJBaXQuX1NvbS5fTW9uLl9CdWQuX0JyZS5fU3VrLl9Tb24uIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJBaV9TbV9Nb19CdV9Ccl9TdV9TbiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVG''@;'; put 'put ''b3JtYXQ6e0xUOiJBIGg6bW0gW3ZhenRhXSIsTFRTOiJBIGg6bW06c3MgW3ZhenRhXSIsTDoiREQtTU0tWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEEgaDptbSBbdmF6dGFdIixMTExMOiJkZGRkLCBNTU1NIERvLCBZWVlZLCBBIGg6bW0gW3ZhenRhXSIsbGxsbDoi''@;'; put 'put ''ZGRkLCBEIE1NTSBZWVlZLCBBIGg6bW0gW3ZhenRhXSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQWl6XSBMVCIsbmV4dERheToiW0ZhbGVhbV0gTFQiLG5leHRXZWVrOiJbRnVkZGxvXSBkZGRkWyxdIExUIixsYXN0RGF5OiJbS2FsXSBMVCIsbGFzdFdlZWs6IltGYXR0bG9dIGRkZGRbLF0gTFQi''@;'; put 'put ''LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIixwYXN0OiIlcyBhZGltIixzOl8sc3M6XyxtOl8sbW06XyxoOl8saGg6XyxkOl8sZGQ6XyxNOl8sTU06Xyx5Ol8seXk6X30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShlcikvLG9yZGluYWw6ZnVuY3Rpb24o''@;'; put 'put ''Vix3KXtyZXR1cm4iRCI9PT13P1YrImVyIjpWfSx3ZWVrOntkb3c6MCxkb3k6M30sbWVyaWRpZW1QYXJzZTovcmF0aXxzb2thbGxpbXxkb25wYXJhbXxzYW5qZS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKFYsdyl7cmV0dXJuIDEyPT09ViYmKFY9MCksInJhdGkiPT09dz9WPDQ/VjpWKzEyOiJz''@;'; put 'put ''b2thbGxpbSI9PT13P1Y6ImRvbnBhcmFtIj09PXc/Vj4xMj9WOlYrMTI6InNhbmplIj09PXc/VisxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKFYsdyxQKXtyZXR1cm4gVjw0PyJyYXRpIjpWPDEyPyJzb2thbGxpbSI6VjwxNj8iZG9ucGFyYW0iOlY8MjA/InNhbmplIjoicmF0aSJ9fSl9''@;'; put 'put ''KGIoOTc1ODYpKX0sNTc4NTQ6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigzMDQ2NCkuRi5FUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRTtmdW5jdGlvbiBwKCl7fWNlLmV4cG9ydHM9ZnVuY3Rpb24gdyhQLEYsUil7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEYpcmV0dXJuIHcoUCxu''@;'; put 'put ''dWxsLEYpO0Z8fChGPXt9KSxSPWZ1bmN0aW9uIF8oUCl7dmFyIEY9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIUYpe0Y9ITA7Zm9yKHZhciBSPWFyZ3VtZW50cy5sZW5ndGgsej1uZXcgQXJyYXkoUiksTj0wO048UjtOKyspeltOXT1hcmd1bWVudHNbTl07UC5hcHBseSh0aGlzLHopfX19KFJ8''@;'; put 'put ''fHApO3ZhciB6PUYucmVhZGFibGV8fCExIT09Ri5yZWFkYWJsZSYmUC5yZWFkYWJsZSxOPUYud3JpdGFibGV8fCExIT09Ri53cml0YWJsZSYmUC53cml0YWJsZSxPPWZ1bmN0aW9uKCl7UC53cml0YWJsZXx8WigpfSxLPVAuX3dyaXRhYmxlU3RhdGUmJlAuX3dyaXRhYmxlU3RhdGUuZmluaXNo''@;'; put 'put ''ZWQsWj1mdW5jdGlvbigpe049ITEsSz0hMCx6fHxSLmNhbGwoUCl9LFk9UC5fcmVhZGFibGVTdGF0ZSYmUC5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkLFc9ZnVuY3Rpb24oKXt6PSExLFk9ITAsTnx8Ui5jYWxsKFApfSxxPWZ1bmN0aW9uKGllKXtSLmNhbGwoUCxpZSl9LGVlPWZ1bmN0aW9u''@;'; put 'put ''KCl7dmFyIGllO3JldHVybiB6JiYhWT8oKCFQLl9yZWFkYWJsZVN0YXRlfHwhUC5fcmVhZGFibGVTdGF0ZS5lbmRlZCkmJihpZT1uZXcgSSksUi5jYWxsKFAsaWUpKTpOJiYhSz8oKCFQLl93cml0YWJsZVN0YXRlfHwhUC5fd3JpdGFibGVTdGF0ZS5lbmRlZCkmJihpZT1uZXcgSSksUi5jYWxs''@;'; put 'put ''KFAsaWUpKTp2b2lkIDB9LEo9ZnVuY3Rpb24oKXtQLnJlcS5vbigiZmluaXNoIixaKX07cmV0dXJuIGZ1bmN0aW9uIFYoUCl7cmV0dXJuIFAuc2V0SGVhZGVyJiYiZnVuY3Rpb24iPT10eXBlb2YgUC5hYm9ydH0oUCk/KFAub24oImNvbXBsZXRlIixaKSxQLm9uKCJhYm9ydCIsZWUpLFAucmVx''@;'; put 'put ''P0ooKTpQLm9uKCJyZXF1ZXN0IixKKSk6TiYmIVAuX3dyaXRhYmxlU3RhdGUmJihQLm9uKCJlbmQiLE8pLFAub24oImNsb3NlIixPKSksUC5vbigiZW5kIixXKSxQLm9uKCJmaW5pc2giLFopLCExIT09Ri5lcnJvciYmUC5vbigiZXJyb3IiLHEpLFAub24oImNsb3NlIixlZSksZnVuY3Rpb24o''@;'; put 'put ''KXtQLnJlbW92ZUxpc3RlbmVyKCJjb21wbGV0ZSIsWiksUC5yZW1vdmVMaXN0ZW5lcigiYWJvcnQiLGVlKSxQLnJlbW92ZUxpc3RlbmVyKCJyZXF1ZXN0IixKKSxQLnJlcSYmUC5yZXEucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsWiksUC5yZW1vdmVMaXN0ZW5lcigiZW5kIixPKSxQLnJlbW92''@;'; put 'put ''ZUxpc3RlbmVyKCJjbG9zZSIsTyksUC5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixaKSxQLnJlbW92ZUxpc3RlbmVyKCJlbmQiLFcpLFAucmVtb3ZlTGlzdGVuZXIoImVycm9yIixxKSxQLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsZWUpfX19LDU4MDEyOihjZSxYLGIpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBJPWIoMzM5NjMpLF89Yig4NzQ4NCkscD1iKDM4ZTMpLFY9Yig2Mzk1MSksdz1iKDM2NTA2KSxQPWIoNjY5OTUpLEY9SS5TeW1ib2wsUj1fKCJ3a3MiKSx6PVA/Ri5mb3J8fEY6RiYmRi53aXRob3V0U2V0dGVyfHxWO2NlLmV4cG9ydHM9ZnVuY3Rpb24oTil7cmV0dXJuIHAoUixOKXx8''@;'; put 'put ''KFJbTl09dyYmcChGLE4pP0ZbTl06eigiU3ltYm9sLiIrTikpLFJbTl19fSw1ODIzOTpjZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSSxfLFg9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLGI9Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiZudWxsIT09UmVmbGVjdCYmUmVmbGVjdC5hcHBseTtp''@;'; put 'put ''ZigiZnVuY3Rpb24iPT10eXBlb2YgYiYmImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSl0cnl7ST1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sImxlbmd0aCIse2dldDpmdW5jdGlvbigpe3Rocm93IF99fSksXz17fSxiKGZ1bmN0aW9uKCl7dGhyb3cgNDJ9LG51bGws''@;'; put 'put ''SSl9Y2F0Y2goZWUpe2VlIT09XyYmKGI9bnVsbCl9ZWxzZSBiPW51bGw7dmFyIHA9L15ccypjbGFzc1xiLyxWPWZ1bmN0aW9uKEope3RyeXt2YXIgcmU9WC5jYWxsKEopO3JldHVybiBwLnRlc3QocmUpfWNhdGNoe3JldHVybiExfX0sdz1mdW5jdGlvbihKKXt0cnl7cmV0dXJuIVYoSikmJihY''@;'; put 'put ''LmNhbGwoSiksITApfWNhdGNoe3JldHVybiExfX0sUD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLFo9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmISFTeW1ib2wudG9TdHJpbmdUYWcsWT0hKDAgaW5bLF0pLFc9ZnVuY3Rpb24oKXtyZXR1cm4hMX07aWYoIm9iamVjdCI9PXR5cGVvZiBk''@;'; put 'put ''b2N1bWVudCl7dmFyIHE9ZG9jdW1lbnQuYWxsO1AuY2FsbChxKT09PVAuY2FsbChkb2N1bWVudC5hbGwpJiYoVz1mdW5jdGlvbihKKXtpZigoWXx8IUopJiYodHlwZW9mIEo+InUifHwib2JqZWN0Ij09dHlwZW9mIEopKXRyeXt2YXIgcmU9UC5jYWxsKEopO3JldHVybigiW29iamVjdCBIVE1M''@;'; put 'put ''QWxsQ29sbGVjdGlvbl0iPT09cmV8fCJbb2JqZWN0IEhUTUwgZG9jdW1lbnQuYWxsIGNsYXNzXSI9PT1yZXx8IltvYmplY3QgSFRNTENvbGxlY3Rpb25dIj09PXJlfHwiW29iamVjdCBPYmplY3RdIj09PXJlKSYmbnVsbD09SigiIil9Y2F0Y2h7fXJldHVybiExfSl9Y2UuZXhwb3J0cz1iP2Z1''@;'; put 'put ''bmN0aW9uKEope2lmKFcoSikpcmV0dXJuITA7aWYoIUp8fCJmdW5jdGlvbiIhPXR5cGVvZiBKJiYib2JqZWN0IiE9dHlwZW9mIEopcmV0dXJuITE7dHJ5e2IoSixudWxsLEkpfWNhdGNoKHJlKXtpZihyZSE9PV8pcmV0dXJuITF9cmV0dXJuIVYoSikmJncoSil9OmZ1bmN0aW9uKEope2lmKFco''@;'; put 'put ''SikpcmV0dXJuITA7aWYoIUp8fCJmdW5jdGlvbiIhPXR5cGVvZiBKJiYib2JqZWN0IiE9dHlwZW9mIEopcmV0dXJuITE7aWYoWilyZXR1cm4gdyhKKTtpZihWKEopKXJldHVybiExO3ZhciByZT1QLmNhbGwoSik7cmV0dXJuISgiW29iamVjdCBGdW5jdGlvbl0iIT09cmUmJiJbb2JqZWN0IEdl''@;'; put 'put ''bmVyYXRvckZ1bmN0aW9uXSIhPT1yZSYmIS9eXFtvYmplY3QgSFRNTC8udGVzdChyZSkpJiZ3KEopfX0sNTg0MTM6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1TeW50YXhFcnJvcn0sNTg1NDA6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1bImNvbnN0cnVjdG9yIiwiaGFzT3du''@;'; put 'put ''UHJvcGVydHkiLCJpc1Byb3RvdHlwZU9mIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJ0b0xvY2FsZVN0cmluZyIsInRvU3RyaW5nIiwidmFsdWVPZiJdfSw1ODYwNzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDc1MTU3KSxfPUZ1bmN0aW9uLnByb3RvdHlwZSxwPV8uY2FsbCxW''@;'; put 'put ''PUkmJl8uYmluZC5iaW5kKHAscCk7Y2UuZXhwb3J0cz1JP1Y6ZnVuY3Rpb24odyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHAuYXBwbHkodyxhcmd1bWVudHMpfX19LDU4Njc3OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoOTM4MDcpLkJ1ZmZlcjtmdW5jdGlvbiBfKHcsUCl7''@;'; put 'put ''aWYoIXcpdGhyb3cgbmV3IEVycm9yKCJTQkNTIGNvZGVjIGlzIGNhbGxlZCB3aXRob3V0IHRoZSBkYXRhLiIpO2lmKCF3LmNoYXJzfHwxMjghPT13LmNoYXJzLmxlbmd0aCYmMjU2IT09dy5jaGFycy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJFbmNvZGluZyAnIit3LnR5cGUrIicgaGFzIGlu''@;'; put 'put ''Y29ycmVjdCAnY2hhcnMnIChtdXN0IGJlIG9mIGxlbiAxMjggb3IgMjU2KSIpO2lmKDEyOD09PXcuY2hhcnMubGVuZ3RoKXtmb3IodmFyIEY9IiIsUj0wO1I8MTI4O1IrKylGKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFIpO3cuY2hhcnM9Rit3LmNoYXJzfXRoaXMuZGVjb2RlQnVmPUkuZnJvbSh3''@;'; put 'put ''LmNoYXJzLCJ1Y3MyIik7dmFyIHo9SS5hbGxvYyg2NTUzNixQLmRlZmF1bHRDaGFyU2luZ2xlQnl0ZS5jaGFyQ29kZUF0KDApKTtmb3IoUj0wO1I8dy5jaGFycy5sZW5ndGg7UisrKXpbdy5jaGFycy5jaGFyQ29kZUF0KFIpXT1SO3RoaXMuZW5jb2RlQnVmPXp9ZnVuY3Rpb24gcCh3LFApe3Ro''@;'; put 'put ''aXMuZW5jb2RlQnVmPVAuZW5jb2RlQnVmfWZ1bmN0aW9uIFYodyxQKXt0aGlzLmRlY29kZUJ1Zj1QLmRlY29kZUJ1Zn1YLl9zYmNzPV8sXy5wcm90b3R5cGUuZW5jb2Rlcj1wLF8ucHJvdG90eXBlLmRlY29kZXI9VixwLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih3KXtmb3IodmFyIFA9SS5h''@;'; put 'put ''bGxvYyh3Lmxlbmd0aCksRj0wO0Y8dy5sZW5ndGg7RisrKVBbRl09dGhpcy5lbmNvZGVCdWZbdy5jaGFyQ29kZUF0KEYpXTtyZXR1cm4gUH0scC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fSxWLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih3KXtmb3IodmFyIFA9dGhpcy5kZWNvZGVCdWYs''@;'; put 'put ''Rj1JLmFsbG9jKDIqdy5sZW5ndGgpLFI9MCx6PTAsTj0wO048dy5sZW5ndGg7TisrKUZbej0yKk5dPVBbUj0yKndbTl1dLEZbeisxXT1QW1IrMV07cmV0dXJuIEYudG9TdHJpbmcoInVjczIiKX0sVi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fX0sNTg3OTU6KGNlLFgsYik9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIEk9Yig0NjM4NyksXz1iKDQ0NjQ4KSxwPWIoNzc3NzMpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oVix3LFApe0k/Xy5mKFYsdyxwKDAsUCkpOlZbd109UH19LDU4OTc4OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9ZnVuY3Rpb24oWCxiKXtyZXR1cm57dmFsdWU6WCxkb25l''@;'; put 'put ''OmJ9fX0sNTkwODA6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTA5NjciLDI6Ilx1MDk2OCIsMzoiXHUwOTY5Iiw0OiJcdTA5NmEiLDU6Ilx1MDk2YiIsNjoiXHUwOTZjIiw3OiJcdTA5NmQiLDg6Ilx1MDk2ZSIsOToiXHUwOTZmIiwwOiJc''@;'; put 'put ''dTA5NjYifSxwPXsiXHUwOTY3IjoiMSIsIlx1MDk2OCI6IjIiLCJcdTA5NjkiOiIzIiwiXHUwOTZhIjoiNCIsIlx1MDk2YiI6IjUiLCJcdTA5NmMiOiI2IiwiXHUwOTZkIjoiNyIsIlx1MDk2ZSI6IjgiLCJcdTA5NmYiOiI5IiwiXHUwOTY2IjoiMCJ9O2Z1bmN0aW9uIFYoUCxGLFIseil7dmFy''@;'; put 'put ''IE49IiI7aWYoRilzd2l0Y2goUil7Y2FzZSJzIjpOPSJcdTA5MTVcdTA5M2VcdTA5MzlcdTA5NDAgXHUwOTM4XHUwOTQ3XHUwOTE1XHUwOTAyXHUwOTI2IjticmVhaztjYXNlInNzIjpOPSIlZCBcdTA5MzhcdTA5NDdcdTA5MTVcdTA5MDJcdTA5MjYiO2JyZWFrO2Nhc2UibSI6Tj0iXHUwOTBm''@;'; put 'put ''XHUwOTE1IFx1MDkyZVx1MDkzZlx1MDkyOFx1MDkzZlx1MDkxZiI7YnJlYWs7Y2FzZSJtbSI6Tj0iJWQgXHUwOTJlXHUwOTNmXHUwOTI4XHUwOTNmXHUwOTFmXHUwOTQ3IjticmVhaztjYXNlImgiOk49Ilx1MDkwZlx1MDkxNSBcdTA5MjRcdTA5M2VcdTA5MzgiO2JyZWFrO2Nhc2UiaGgiOk49''@;'; put 'put ''IiVkIFx1MDkyNFx1MDkzZVx1MDkzOCI7YnJlYWs7Y2FzZSJkIjpOPSJcdTA5MGZcdTA5MTUgXHUwOTI2XHUwOTNmXHUwOTM1XHUwOTM4IjticmVhaztjYXNlImRkIjpOPSIlZCBcdTA5MjZcdTA5M2ZcdTA5MzVcdTA5MzgiO2JyZWFrO2Nhc2UiTSI6Tj0iXHUwOTBmXHUwOTE1IFx1MDkyZVx1''@;'; put 'put ''MDkzOVx1MDkzZlx1MDkyOFx1MDkzZSI7YnJlYWs7Y2FzZSJNTSI6Tj0iJWQgXHUwOTJlXHUwOTM5XHUwOTNmXHUwOTI4XHUwOTQ3IjticmVhaztjYXNlInkiOk49Ilx1MDkwZlx1MDkxNSBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzciO2JyZWFrO2Nhc2UieXkiOk49IiVkIFx1MDkzNVx1MDkz''@;'; put 'put ''MFx1MDk0ZFx1MDkzN1x1MDk0NyJ9ZWxzZSBzd2l0Y2goUil7Y2FzZSJzIjpOPSJcdTA5MTVcdTA5M2VcdTA5MzlcdTA5NDAgXHUwOTM4XHUwOTQ3XHUwOTE1XHUwOTAyXHUwOTI2XHUwOTNlXHUwOTAyIjticmVhaztjYXNlInNzIjpOPSIlZCBcdTA5MzhcdTA5NDdcdTA5MTVcdTA5MDJcdTA5''@;'; put 'put ''MjZcdTA5M2VcdTA5MDIiO2JyZWFrO2Nhc2UibSI6Tj0iXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkyZVx1MDkzZlx1MDkyOFx1MDkzZlx1MDkxZlx1MDkzZSI7YnJlYWs7Y2FzZSJtbSI6Tj0iJWQgXHUwOTJlXHUwOTNmXHUwOTI4XHUwOTNmXHUwOTFmXHUwOTNlXHUwOTAyIjticmVhaztjYXNl''@;'; put 'put ''ImgiOk49Ilx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MjRcdTA5M2VcdTA5MzhcdTA5M2UiO2JyZWFrO2Nhc2UiaGgiOk49IiVkIFx1MDkyNFx1MDkzZVx1MDkzOFx1MDkzZVx1MDkwMiI7YnJlYWs7Y2FzZSJkIjpOPSJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTI2XHUwOTNmXHUwOTM1XHUwOTM4''@;'; put 'put ''XHUwOTNlIjticmVhaztjYXNlImRkIjpOPSIlZCBcdTA5MjZcdTA5M2ZcdTA5MzVcdTA5MzhcdTA5M2VcdTA5MDIiO2JyZWFrO2Nhc2UiTSI6Tj0iXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkyZVx1MDkzOVx1MDkzZlx1MDkyOFx1MDk0ZFx1MDkyZlx1MDkzZSI7YnJlYWs7Y2FzZSJNTSI6Tj0i''@;'; put 'put ''JWQgXHUwOTJlXHUwOTM5XHUwOTNmXHUwOTI4XHUwOTRkXHUwOTJmXHUwOTNlXHUwOTAyIjticmVhaztjYXNlInkiOk49Ilx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzdcdTA5M2UiO2JyZWFrO2Nhc2UieXkiOk49IiVkIFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkz''@;'; put 'put ''N1x1MDkzZVx1MDkwMiJ9cmV0dXJuIE4ucmVwbGFjZSgvJWQvaSxQKX1JLmRlZmluZUxvY2FsZSgibXIiLHttb250aHM6Ilx1MDkxY1x1MDkzZVx1MDkyOFx1MDk0N1x1MDkzNVx1MDkzZVx1MDkzMFx1MDk0MF9cdTA5MmJcdTA5NDdcdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDFcdTA5MzVcdTA5''@;'; put 'put ''M2VcdTA5MzBcdTA5NDBfXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwZlx1MDkyYVx1MDk0ZFx1MDkzMFx1MDkzZlx1MDkzMl9cdTA5MmVcdTA5NDdfXHUwOTFjXHUwOTQyXHUwOTI4X1x1MDkxY1x1MDk0MVx1MDkzMlx1MDk0OF9cdTA5MTFcdTA5MTdcdTA5MzhcdTA5NGRc''@;'; put 'put ''dTA5MWZfXHUwOTM4XHUwOTJhXHUwOTRkXHUwOTFmXHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwX1x1MDkxMVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Ylx1MDkyY1x1MDkzMF9cdTA5MjhcdTA5NGJcdTA5MzVcdTA5NGRcdTA5MzlcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzBfXHUwOTIxXHUwOTNm''@;'; put 'put ''XHUwOTM4XHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA5MWNcdTA5M2VcdTA5MjhcdTA5NDcuX1x1MDkyYlx1MDk0N1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0MS5fXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhLl9cdTA5MGZcdTA5MmFc''@;'; put 'put ''dTA5NGRcdTA5MzBcdTA5M2YuX1x1MDkyZVx1MDk0Ny5fXHUwOTFjXHUwOTQyXHUwOTI4Ll9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5NDguX1x1MDkxMVx1MDkxNy5fXHUwOTM4XHUwOTJhXHUwOTRkXHUwOTFmXHUwOTQ3XHUwOTAyLl9cdTA5MTFcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NGIuX1x1''@;'; put 'put ''MDkyOFx1MDk0Ylx1MDkzNVx1MDk0ZFx1MDkzOVx1MDk0N1x1MDkwMi5fXHUwOTIxXHUwOTNmXHUwOTM4XHUwOTQ3XHUwOTAyLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTA5MzBcdTA5MzVcdTA5M2ZcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTM4XHUwOTRi''@;'; put 'put ''XHUwOTJlXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkyZVx1MDkwMlx1MDkxN1x1MDkzM1x1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MmNcdTA5NDFcdTA5MjdcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTE3XHUwOTQxXHUwOTMwXHUwOTQyXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkzNlx1MDk0MVx1MDkx''@;'; put 'put ''NVx1MDk0ZFx1MDkzMFx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MzZcdTA5MjhcdTA5M2ZcdTA5MzVcdTA5M2VcdTA5MzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwOTMwXHUwOTM1XHUwOTNmX1x1MDkzOFx1MDk0Ylx1MDkyZV9cdTA5MmVcdTA5MDJcdTA5MTdcdTA5MzNfXHUwOTJj''@;'; put 'put ''XHUwOTQxXHUwOTI3X1x1MDkxN1x1MDk0MVx1MDkzMFx1MDk0Ml9cdTA5MzZcdTA5NDFcdTA5MTVcdTA5NGRcdTA5MzBfXHUwOTM2XHUwOTI4XHUwOTNmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA5MzBfXHUwOTM4XHUwOTRiX1x1MDkyZVx1MDkwMl9cdTA5MmNcdTA5NDFfXHUwOTE3''@;'; put 'put ''XHUwOTQxX1x1MDkzNlx1MDk0MV9cdTA5MzYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlIixMVFM6IkEgaDptbTpzcyBcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2UiLEw6IkREL01NL1lZWVkiLExMOiJE''@;'; put 'put ''IE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSBcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2UifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDkwNlx1MDkx''@;'; put 'put ''Y10gTFQiLG5leHREYXk6IltcdTA5MDlcdTA5MjZcdTA5NGRcdTA5MmZcdTA5M2VdIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTA5MTVcdTA5M2VcdTA5MzJdIExUIixsYXN0V2VlazoiW1x1MDkyZVx1MDkzZVx1MDkxN1x1MDk0MFx1MDkzMl0gZGRkZCwgTFQiLHNhbWVF''@;'; put 'put ''bHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHUwOTJlXHUwOTI3XHUwOTRkXHUwOTJmXHUwOTQ3IixwYXN0OiIlc1x1MDkyYVx1MDk0Mlx1MDkzMFx1MDk0ZFx1MDkzNVx1MDk0MCIsczpWLHNzOlYsbTpWLG1tOlYsaDpWLGhoOlYsZDpWLGRkOlYsTTpWLE1NOlYseTpWLHl5OlZ9''@;'; put 'put ''LHByZXBhcnNlOmZ1bmN0aW9uKFApe3JldHVybiBQLnJlcGxhY2UoL1tcdTA5NjdcdTA5NjhcdTA5NjlcdTA5NmFcdTA5NmJcdTA5NmNcdTA5NmRcdTA5NmVcdTA5NmZcdTA5NjZdL2csZnVuY3Rpb24oRil7cmV0dXJuIHBbRl19KX0scG9zdGZvcm1hdDpmdW5jdGlvbihQKXtyZXR1cm4gUC5y''@;'; put 'put ''ZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKEYpe3JldHVybiBfW0ZdfSl9LG1lcmlkaWVtUGFyc2U6L1x1MDkyYVx1MDkzOVx1MDkzZVx1MDkxZlx1MDk0N3xcdTA5MzhcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDB8XHUwOTI2XHUwOTQxXHUwOTJhXHUwOTNlXHUwOTMwXHUwOTQwfFx1MDkzOFx1MDkz''@;'; put 'put ''ZVx1MDkyZlx1MDkwMlx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MHxcdTA5MzBcdTA5M2VcdTA5MjRcdTA5NGRcdTA5MzBcdTA5NDAvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihQLEYpe3JldHVybiAxMj09PVAmJihQPTApLCJcdTA5MmFcdTA5MzlcdTA5M2VcdTA5MWZcdTA5NDciPT09Rnx8Ilx1''@;'; put 'put ''MDkzOFx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MCI9PT1GP1A6Ilx1MDkyNlx1MDk0MVx1MDkyYVx1MDkzZVx1MDkzMFx1MDk0MCI9PT1GfHwiXHUwOTM4XHUwOTNlXHUwOTJmXHUwOTAyXHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwIj09PUZ8fCJcdTA5MzBcdTA5M2VcdTA5MjRcdTA5NGRcdTA5''@;'; put 'put ''MzBcdTA5NDAiPT09Rj9QPj0xMj9QOlArMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihQLEYsUil7cmV0dXJuIFA+PTAmJlA8Nj8iXHUwOTJhXHUwOTM5XHUwOTNlXHUwOTFmXHUwOTQ3IjpQPDEyPyJcdTA5MzhcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDAiOlA8MTc/Ilx1MDkyNlx1MDk0''@;'; put 'put ''MVx1MDkyYVx1MDkzZVx1MDkzMFx1MDk0MCI6UDwyMD8iXHUwOTM4XHUwOTNlXHUwOTJmXHUwOTAyXHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwIjoiXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTRkXHUwOTMwXHUwOTQwIn0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KGIoOTc1ODYpKX0sNTkxMTE6KGNl''@;'; put 'put ''LFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig4MzQwNyksXz1iKDM2NjM2KSxwPWIoMjU0NDMpLFY9YigyNzA1NCkuQnVmZmVyLHc9Yig4NjExMSksUD1iKDQ1MzkyKSxGPWIoNzY2NDMpLFI9Vi5hbGxvYygxMjgpLHo9e19fcHJvdG9fXzpudWxsLG1kNToxNixzaGExOjIwLHNoYTIyNDoy''@;'; put 'put ''OCxzaGEyNTY6MzIsc2hhMzg0OjQ4LHNoYTUxMjo2NCwic2hhNTEyLTI1NiI6MzIscmlwZW1kMTYwOjIwLHJtZDE2MDoyMH0sTj17X19wcm90b19fOm51bGwsInNoYS0xIjoic2hhMSIsInNoYS0yMjQiOiJzaGEyMjQiLCJzaGEtMjU2Ijoic2hhMjU2Iiwic2hhLTM4NCI6InNoYTM4NCIsInNo''@;'; put 'put ''YS01MTIiOiJzaGE1MTIiLCJyaXBlbWQtMTYwIjoicmlwZW1kMTYwIn07ZnVuY3Rpb24gTyhXKXtyZXR1cm4obmV3IF8pLnVwZGF0ZShXKS5kaWdlc3QoKX1mdW5jdGlvbiBaKFcscSxlZSl7dmFyIEo9ZnVuY3Rpb24gSyhXKXtyZXR1cm4icm1kMTYwIj09PVd8fCJyaXBlbWQxNjAiPT09Vz9P''@;'; put 'put ''OiJtZDUiPT09Vz9JOmZ1bmN0aW9uIHEoZWUpe3JldHVybiBwKFcpLnVwZGF0ZShlZSkuZGlnZXN0KCl9fShXKSxyZT0ic2hhNTEyIj09PVd8fCJzaGEzODQiPT09Vz8xMjg6NjQ7cS5sZW5ndGg+cmU/cT1KKHEpOnEubGVuZ3RoPHJlJiYocT1WLmNvbmNhdChbcSxSXSxyZSkpO2Zvcih2YXIg''@;'; put 'put ''aWU9Vi5hbGxvY1Vuc2FmZShyZSt6W1ddKSx1ZT1WLmFsbG9jVW5zYWZlKHJlK3pbV10pLGdlPTA7Z2U8cmU7Z2UrKylpZVtnZV09NTRecVtnZV0sdWVbZ2VdPTkyXnFbZ2VdO3ZhciBfZT1WLmFsbG9jVW5zYWZlKHJlK2VlKzQpO2llLmNvcHkoX2UsMCwwLHJlKSx0aGlzLmlwYWQxPV9lLHRo''@;'; put 'put ''aXMuaXBhZDI9aWUsdGhpcy5vcGFkPXVlLHRoaXMuYWxnPVcsdGhpcy5ibG9ja3NpemU9cmUsdGhpcy5oYXNoPUosdGhpcy5zaXplPXpbV119Wi5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKFcscSl7cmV0dXJuIFcuY29weShxLHRoaXMuYmxvY2tzaXplKSx0aGlzLmhhc2gocSkuY29weSh0aGlz''@;'; put 'put ''Lm9wYWQsdGhpcy5ibG9ja3NpemUpLHRoaXMuaGFzaCh0aGlzLm9wYWQpfSxjZS5leHBvcnRzPWZ1bmN0aW9uIFkoVyxxLGVlLEoscmUpe3coZWUsSiksVz1GKFcsUCwiUGFzc3dvcmQiKSxxPUYocSxQLCJTYWx0Iik7dmFyIGllPShyZXx8InNoYTEiKS50b0xvd2VyQ2FzZSgpLHVlPU5baWVd''@;'; put 'put ''fHxpZSxnZT16W3VlXTtpZigibnVtYmVyIiE9dHlwZW9mIGdlfHwhZ2UpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGlnZXN0IGFsZ29yaXRobSBub3Qgc3VwcG9ydGVkOiAiK3JlKTt2YXIgX2U9bmV3IFoodWUsVyxxLmxlbmd0aCksVGU9Vi5hbGxvY1Vuc2FmZShKKSxNZT1WLmFsbG9jVW5zYWZl''@;'; put 'put ''KHEubGVuZ3RoKzQpO3EuY29weShNZSwwLDAscS5sZW5ndGgpO2Zvcih2YXIgWmU9MCxCPWdlLGc9TWF0aC5jZWlsKEovQikseT0xO3k8PWc7eSsrKXtNZS53cml0ZVVJbnQzMkJFKHkscS5sZW5ndGgpO2Zvcih2YXIgeD1fZS5ydW4oTWUsX2UuaXBhZDEpLEM9eCxUPTE7VDxlZTtUKyspe0M9''@;'; put 'put ''X2UucnVuKEMsX2UuaXBhZDIpO2Zvcih2YXIgSD0wO0g8QjtIKyspeFtIXV49Q1tIXX14LmNvcHkoVGUsWmUpLFplKz1CfXJldHVybiBUZX19LDU5MzE2OihjZSxYLGIpPT57dmFyIEk9Yig3MTk5MyksXz1iKDgzODM4KS5CdWZmZXIscD1iKDU1OTQxKTtmdW5jdGlvbiBWKHcpe3AuY2FsbCh0''@;'; put 'put ''aGlzLHcpLHRoaXMuZW5jPSJwZW0ifUkoVixwKSxjZS5leHBvcnRzPVYsVi5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKFAsRil7Zm9yKHZhciBSPVAudG9TdHJpbmcoKS5zcGxpdCgvW1xyXG5dKy9nKSx6PUYubGFiZWwudG9VcHBlckNhc2UoKSxOPS9eLS0tLS0oQkVHSU58RU5EKSAoW14t''@;'; put 'put ''XSspLS0tLS0kLyxPPS0xLEs9LTEsWj0wO1o8Ui5sZW5ndGg7WisrKXt2YXIgWT1SW1pdLm1hdGNoKE4pO2lmKG51bGwhPT1ZJiZZWzJdPT09eil7aWYoLTEhPT1PKXtpZigiRU5EIiE9PVlbMV0pYnJlYWs7Sz1aO2JyZWFrfWlmKCJCRUdJTiIhPT1ZWzFdKWJyZWFrO089Wn19aWYoLTE9PT1P''@;'; put 'put ''fHwtMT09PUspdGhyb3cgbmV3IEVycm9yKCJQRU0gc2VjdGlvbiBub3QgZm91bmQgZm9yOiAiK3opO3ZhciBXPVIuc2xpY2UoTysxLEspLmpvaW4oIiIpO1cucmVwbGFjZSgvW15hLXowLTlcK1wvPV0rL2dpLCIiKTt2YXIgcT1uZXcgXyhXLCJiYXNlNjQiKTtyZXR1cm4gcC5wcm90b3R5cGUu''@;'; put 'put ''ZGVjb2RlLmNhbGwodGhpcyxxLEYpfX0sNTk0MTA6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig4NTY1NiksXz1iKDkyOTk4KTtjZS5leHBvcnRzPWZ1bmN0aW9uKHApe3ZhciBWPUkocCwic3RyaW5nIik7cmV0dXJuIF8oVik/VjpWKyIifX0sNTk1NzE6KGNlLFgpPT57WFsiZGVz''@;'; put 'put ''LWVjYiJdPXtrZXk6OCxpdjowfSxYWyJkZXMtY2JjIl09WC5kZXM9e2tleTo4LGl2Ojh9LFhbImRlcy1lZGUzLWNiYyJdPVguZGVzMz17a2V5OjI0LGl2Ojh9LFhbImRlcy1lZGUzIl09e2tleToyNCxpdjowfSxYWyJkZXMtZWRlLWNiYyJdPXtrZXk6MTYsaXY6OH0sWFsiZGVzLWVkZSJdPXtr''@;'; put 'put ''ZXk6MTYsaXY6MH19LDU5NzA1OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGx9LDYwMTAyOihjZSxYLGIpPT57dmFyIEk9YigxOTMwNyksXz1iKDI3MDU0KS5CdWZmZXIscD1iKDYwNTAzKSxWPWIoOTE4MjEpLHc9YigzMjQ3KSxQPWIoMTIzNzUp''@;'; put 'put ''LEY9YigxODIxMSk7ZnVuY3Rpb24geihZLFcscSl7dy5jYWxsKHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBOLHRoaXMuX2xhc3Q9dm9pZCAwLHRoaXMuX2NpcGhlcj1uZXcgUC5BRVMoVyksdGhpcy5fcHJldj1fLmZyb20ocSksdGhpcy5fbW9kZT1ZLHRoaXMuX2F1dG9wYWRkaW5nPSEwfWZ1bmN0''@;'; put 'put ''aW9uIE4oKXt0aGlzLmNhY2hlPV8uYWxsb2NVbnNhZmUoMCl9ZnVuY3Rpb24gSyhZLFcscSl7dmFyIGVlPXBbWS50b0xvd2VyQ2FzZSgpXTtpZighZWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7aWYoInN0cmluZyI9PXR5cGVvZiBxJiYocT1fLmZyb20ocSkp''@;'; put 'put ''LCJHQ00iIT09ZWUubW9kZSYmcS5sZW5ndGghPT1lZS5pdil0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGl2IGxlbmd0aCAiK3EubGVuZ3RoKTtpZigic3RyaW5nIj09dHlwZW9mIFcmJihXPV8uZnJvbShXKSksVy5sZW5ndGghPT1lZS5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKCJp''@;'; put 'put ''bnZhbGlkIGtleSBsZW5ndGggIitXLmxlbmd0aCk7cmV0dXJuInN0cmVhbSI9PT1lZS50eXBlP25ldyBWKGVlLm1vZHVsZSxXLHEsITApOiJhdXRoIj09PWVlLnR5cGU/bmV3IEkoZWUubW9kdWxlLFcscSwhMCk6bmV3IHooZWUubW9kdWxlLFcscSl9Yig3MTk5Mykoeix3KSx6LnByb3RvdHlw''@;'; put 'put ''ZS5fdXBkYXRlPWZ1bmN0aW9uKFkpe3RoaXMuX2NhY2hlLmFkZChZKTtmb3IodmFyIFcscSxlZT1bXTtXPXRoaXMuX2NhY2hlLmdldCh0aGlzLl9hdXRvcGFkZGluZyk7KXE9dGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsVyksZWUucHVzaChxKTtyZXR1cm4gXy5jb25jYXQoZWUpfSx6LnByb3Rv''@;'; put 'put ''dHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgWT10aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9wYWRkaW5nKXJldHVybiBmdW5jdGlvbiBPKFkpe3ZhciBXPVlbMTVdO2lmKFc8MXx8Vz4xNil0aHJvdyBuZXcgRXJyb3IoInVuYWJsZSB0byBkZWNyeXB0IGRhdGEiKTtmb3IodmFy''@;'; put 'put ''IHE9LTE7KytxPFc7KWlmKFlbcSsoMTYtVyldIT09Vyl0aHJvdyBuZXcgRXJyb3IoInVuYWJsZSB0byBkZWNyeXB0IGRhdGEiKTtpZigxNiE9PVcpcmV0dXJuIFkuc2xpY2UoMCwxNi1XKX0odGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsWSkpO2lmKFkpdGhyb3cgbmV3IEVycm9yKCJkYXRhIG5v''@;'; put 'put ''dCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGgiKX0sei5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oWSl7cmV0dXJuIHRoaXMuX2F1dG9wYWRkaW5nPSEhWSx0aGlzfSxOLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oWSl7dGhpcy5jYWNoZT1fLmNvbmNhdChbdGhpcy5jYWNoZSxZ''@;'; put 'put ''XSl9LE4ucHJvdG90eXBlLmdldD1mdW5jdGlvbihZKXt2YXIgVztpZihZKXtpZih0aGlzLmNhY2hlLmxlbmd0aD4xNilyZXR1cm4gVz10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksV31lbHNlIGlmKHRoaXMuY2FjaGUubGVuZ3RoPj0xNily''@;'; put 'put ''ZXR1cm4gVz10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksVztyZXR1cm4gbnVsbH0sTi5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlLmxlbmd0aClyZXR1cm4gdGhpcy5jYWNoZX0sWC5jcmVhdGVEZWNpcGhlcj1m''@;'; put 'put ''dW5jdGlvbiBaKFksVyl7dmFyIHE9cFtZLnRvTG93ZXJDYXNlKCldO2lmKCFxKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO3ZhciBlZT1GKFcsITEscS5rZXkscS5pdik7cmV0dXJuIEsoWSxlZS5rZXksZWUuaXYpfSxYLmNyZWF0ZURlY2lwaGVyaXY9S30sNjAx''@;'; put 'put ''Mjg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig2NjU0Mik7Y2UuZXhwb3J0cz1mdW5jdGlvbihfLHAsVil7Zm9yKHZhciB3PV8ubGVuZ3RoLTE7dz49MDt3LS0paWYodm9pZCAwIT09X1t3XSl0cnl7Vj1JKF9bd10uaXRlcmF0b3IscCxWKX1jYXRjaChQKXtwPSJ0aHJvdyIsVj1Q''@;'; put 'put ''fWlmKCJ0aHJvdyI9PT1wKXRocm93IFY7cmV0dXJuIFZ9fSw2MDE1MzpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6IidpbmNpIiw1OiInaW5jaSIsODoiJ2luY2kiLDcwOiInaW5jaSIsODA6IidpbmNpIiwyOiInbmNpIiw3OiInbmNpIiwyMDoi''@;'; put 'put ''J25jaSIsNTA6IiduY2kiLDM6IidceGZjbmNceGZjIiw0OiInXHhmY25jXHhmYyIsMTAwOiInXHhmY25jXHhmYyIsNjoiJ25jXHUwMTMxIiw5OiIndW5jdSIsMTA6Iid1bmN1IiwzMDoiJ3VuY3UiLDYwOiInXHUwMTMxbmNcdTAxMzEiLDkwOiInXHUwMTMxbmNcdTAxMzEifTtJLmRlZmluZUxv''@;'; put 'put ''Y2FsZSgidHIiLHttb250aHM6Ik9jYWtfXHUwMTVldWJhdF9NYXJ0X05pc2FuX01heVx1MDEzMXNfSGF6aXJhbl9UZW1tdXpfQVx1MDExZnVzdG9zX0V5bFx4ZmNsX0VraW1fS2FzXHUwMTMxbV9BcmFsXHUwMTMxayIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiT2NhX1x1MDE1ZXViX01hcl9O''@;'; put 'put ''aXNfTWF5X0hhel9UZW1fQVx1MDExZnVfRXlsX0VraV9LYXNfQXJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJQYXphcl9QYXphcnRlc2lfU2FsXHUwMTMxX1x4Yzdhclx1MDE1ZmFtYmFfUGVyXHUwMTVmZW1iZV9DdW1hX0N1bWFydGVzaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJQYXpf''@;'; put 'put ''UHp0X1NhbF9ceGM3YXJfUGVyX0N1bV9DbXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlB6X1B0X1NhX1x4YzdhX1BlX0N1X0N0Ii5zcGxpdCgiXyIpLG1lcmlkaWVtOmZ1bmN0aW9uKFYsdyxQKXtyZXR1cm4gVjwxMj9QPyJceGY2XHhmNiI6Ilx4ZDZceGQ2IjpQPyJceGY2cyI6Ilx4ZDZT''@;'; put 'put ''In0sbWVyaWRpZW1QYXJzZTovXHhmNlx4ZjZ8XHhkNlx4ZDZ8XHhmNnN8XHhkNlMvLGlzUE06ZnVuY3Rpb24oVil7cmV0dXJuIlx4ZjZzIj09PVZ8fCJceGQ2UyI9PT1WfSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1N''@;'; put 'put ''IFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltidWdceGZjbiBzYWF0XSBMVCIsbmV4dERheToiW3lhclx1MDEzMW4gc2FhdF0gTFQiLG5leHRXZWVrOiJbZ2VsZWNla10gZGRkZCBbc2FhdF0g''@;'; put 'put ''TFQiLGxhc3REYXk6IltkXHhmY25dIExUIixsYXN0V2VlazoiW2dlXHhlN2VuXSBkZGRkIFtzYWF0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgc29ucmEiLHBhc3Q6IiVzIFx4ZjZuY2UiLHM6ImJpcmthXHhlNyBzYW5peWUiLHNzOiIlZCBzYW5peWUiLG06''@;'; put 'put ''ImJpciBkYWtpa2EiLG1tOiIlZCBkYWtpa2EiLGg6ImJpciBzYWF0IixoaDoiJWQgc2FhdCIsZDoiYmlyIGdceGZjbiIsZGQ6IiVkIGdceGZjbiIsdzoiYmlyIGhhZnRhIix3dzoiJWQgaGFmdGEiLE06ImJpciBheSIsTU06IiVkIGF5Iix5OiJiaXIgeVx1MDEzMWwiLHl5OiIlZCB5XHUwMTMx''@;'; put 'put ''bCJ9LG9yZGluYWw6ZnVuY3Rpb24oVix3KXtzd2l0Y2godyl7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiRG8iOmNhc2UiREQiOnJldHVybiBWO2RlZmF1bHQ6aWYoMD09PVYpcmV0dXJuIFYrIidcdTAxMzFuY1x1MDEzMSI7dmFyIFA9ViUxMDtyZXR1cm4gVisoX1tQXXx8X1tWJTEwMC1QXXx8X1tW''@;'; put 'put ''Pj0xMDA/MTAwOm51bGxdKX19LHdlZWs6e2RvdzoxLGRveTo3fX0pfShiKDk3NTg2KSl9LDYwMzIxOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNDQ2NDgpLmY7Y2UuZXhwb3J0cz1mdW5jdGlvbihfLHAsVil7ViBpbiBffHxJKF8sVix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBwW1ZdfSxzZXQ6ZnVuY3Rpb24odyl7cFtWXT13fX0pfX0sNjAzOTc6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigzMjYzMyksXz1iKDQ3MzYpLmdldDtjZS5leHBvcnRzPWZ1bmN0aW9uKFYpe2lmKCFJKFYpKXJldHVybiExO3ZhciB3PV8oVik7cmV0dXJu''@;'; put 'put ''ISF3JiYiUmF3SlNPTiI9PT13LnR5cGV9fSw2MDQ1MTpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInNxIix7bW9udGhzOiJKYW5hcl9TaGt1cnRfTWFyc19QcmlsbF9NYWpfUWVyc2hvcl9Lb3JyaWtfR3VzaHRfU2h0YXRvcl9UZXRv''@;'; put 'put ''cl9OXHhlYm50b3JfRGhqZXRvciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX1Noa19NYXJfUHJpX01hal9RZXJfS29yX0d1c19TaHRfVGV0X05ceGVibl9EaGoiLnNwbGl0KCJfIiksd2Vla2RheXM6IkUgRGllbF9FIEhceGViblx4ZWJfRSBNYXJ0XHhlYl9FIE1ceGVicmt1clx4ZWJf''@;'; put 'put ''RSBFbmp0ZV9FIFByZW10ZV9FIFNodHVuXHhlYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJEaWVfSFx4ZWJuX01hcl9NXHhlYnJfRW5qX1ByZV9TaHQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkRfSF9NYV9NXHhlYl9FX1BfU2giLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0''@;'; put 'put ''OiEwLG1lcmlkaWVtUGFyc2U6L1BEfE1ELyxpc1BNOmZ1bmN0aW9uKHApe3JldHVybiJNIj09PXAuY2hhckF0KDApfSxtZXJpZGllbTpmdW5jdGlvbihwLFYsdyl7cmV0dXJuIHA8MTI/IlBEIjoiTUQifSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9N''@;'; put 'put ''TS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltTb3Qgblx4ZWJdIExUIixuZXh0RGF5OiJbTmVzXHhlYnIgblx4ZWJdIExUIixuZXh0V2VlazoiZGRkZCBbblx4''@;'; put 'put ''ZWJdIExUIixsYXN0RGF5OiJbRGplIG5ceGViXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2Uga2FsdWFyIG5ceGViXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiblx4ZWIgJXMiLHBhc3Q6IiVzIG1ceGViIHBhclx4ZWIiLHM6ImRpc2Egc2Vrb25kYSIsc3M6IiVkIHNl''@;'; put 'put ''a29uZGEiLG06Im5qXHhlYiBtaW51dFx4ZWIiLG1tOiIlZCBtaW51dGEiLGg6Im5qXHhlYiBvclx4ZWIiLGhoOiIlZCBvclx4ZWIiLGQ6Im5qXHhlYiBkaXRceGViIixkZDoiJWQgZGl0XHhlYiIsTToibmpceGViIG11YWoiLE1NOiIlZCBtdWFqIix5OiJualx4ZWIgdml0Iix5eToiJWQgdml0''@;'; put 'put ''ZSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw2MDUwMzooY2UsWCxiKT0+e3ZhciBJPXtFQ0I6YigzNzUxMyksQ0JDOmIoMzQxMzMpLENGQjpiKDE3MDkwKSxDRkI4OmIoNzI1NzYpLENG''@;'; put 'put ''QjE6Yig3MTAzOSksT0ZCOmIoNDY4NTQpLENUUjpiKDcwMzM2KSxHQ006Yig3MDMzNil9LF89YigzMjE5KTtmb3IodmFyIHAgaW4gXylfW3BdLm1vZHVsZT1JW19bcF0ubW9kZV07Y2UuZXhwb3J0cz1ffSw2MDU0MTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDg4NzIzKSxwPWIo''@;'; put 'put ''MzEzNikuYXNzZXJ0O2Z1bmN0aW9uIFYodyxQKXt0aGlzLmVjPXcsdGhpcy5wcml2PW51bGwsdGhpcy5wdWI9bnVsbCxQLnByaXYmJnRoaXMuX2ltcG9ydFByaXZhdGUoUC5wcml2LFAucHJpdkVuYyksUC5wdWImJnRoaXMuX2ltcG9ydFB1YmxpYyhQLnB1YixQLnB1YkVuYyl9Y2UuZXhwb3J0''@;'; put 'put ''cz1WLFYuZnJvbVB1YmxpYz1mdW5jdGlvbihQLEYsUil7cmV0dXJuIEYgaW5zdGFuY2VvZiBWP0Y6bmV3IFYoUCx7cHViOkYscHViRW5jOlJ9KX0sVi5mcm9tUHJpdmF0ZT1mdW5jdGlvbihQLEYsUil7cmV0dXJuIEYgaW5zdGFuY2VvZiBWP0Y6bmV3IFYoUCx7cHJpdjpGLHByaXZFbmM6Un0p''@;'; put 'put ''fSxWLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3ZhciBQPXRoaXMuZ2V0UHVibGljKCk7cmV0dXJuIFAuaXNJbmZpbml0eSgpP3tyZXN1bHQ6ITEscmVhc29uOiJJbnZhbGlkIHB1YmxpYyBrZXkifTpQLnZhbGlkYXRlKCk/UC5tdWwodGhpcy5lYy5jdXJ2ZS5uKS5pc0luZmluaXR5''@;'; put 'put ''KCk/e3Jlc3VsdDohMCxyZWFzb246bnVsbH06e3Jlc3VsdDohMSxyZWFzb246IlB1YmxpYyBrZXkgKiBOICE9IE8ifTp7cmVzdWx0OiExLHJlYXNvbjoiUHVibGljIGtleSBpcyBub3QgYSBwb2ludCJ9fSxWLnByb3RvdHlwZS5nZXRQdWJsaWM9ZnVuY3Rpb24oUCxGKXtyZXR1cm4ic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mIFAmJihGPVAsUD1udWxsKSx0aGlzLnB1Ynx8KHRoaXMucHViPXRoaXMuZWMuZy5tdWwodGhpcy5wcml2KSksRj90aGlzLnB1Yi5lbmNvZGUoRixQKTp0aGlzLnB1Yn0sVi5wcm90b3R5cGUuZ2V0UHJpdmF0ZT1mdW5jdGlvbihQKXtyZXR1cm4iaGV4Ij09PVA/dGhpcy5wcml2''@;'; put 'put ''LnRvU3RyaW5nKDE2LDIpOnRoaXMucHJpdn0sVi5wcm90b3R5cGUuX2ltcG9ydFByaXZhdGU9ZnVuY3Rpb24oUCxGKXt0aGlzLnByaXY9bmV3IEkoUCxGfHwxNiksdGhpcy5wcml2PXRoaXMucHJpdi51bW9kKHRoaXMuZWMuY3VydmUubil9LFYucHJvdG90eXBlLl9pbXBvcnRQdWJsaWM9ZnVu''@;'; put 'put ''Y3Rpb24oUCxGKXtpZihQLnh8fFAueSlyZXR1cm4ibW9udCI9PT10aGlzLmVjLmN1cnZlLnR5cGU/cChQLngsIk5lZWQgeCBjb29yZGluYXRlIik6KCJzaG9ydCI9PT10aGlzLmVjLmN1cnZlLnR5cGV8fCJlZHdhcmRzIj09PXRoaXMuZWMuY3VydmUudHlwZSkmJnAoUC54JiZQLnksIk5lZWQg''@;'; put 'put ''Ym90aCB4IGFuZCB5IGNvb3JkaW5hdGUiKSx2b2lkKHRoaXMucHViPXRoaXMuZWMuY3VydmUucG9pbnQoUC54LFAueSkpO3RoaXMucHViPXRoaXMuZWMuY3VydmUuZGVjb2RlUG9pbnQoUCxGKX0sVi5wcm90b3R5cGUuZGVyaXZlPWZ1bmN0aW9uKFApe3JldHVybiBQLnZhbGlkYXRlKCl8fHAo''@;'; put 'put ''UC52YWxpZGF0ZSgpLCJwdWJsaWMgcG9pbnQgbm90IHZhbGlkYXRlZCIpLFAubXVsKHRoaXMucHJpdikuZ2V0WCgpfSxWLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKFAsRixSKXtyZXR1cm4gdGhpcy5lYy5zaWduKFAsdGhpcyxGLFIpfSxWLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oUCxG''@;'; put 'put ''LFIpe3JldHVybiB0aGlzLmVjLnZlcmlmeShQLEYsdGhpcyx2b2lkIDAsUil9LFYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4iPEtleSBwcml2OiAiKyh0aGlzLnByaXYmJnRoaXMucHJpdi50b1N0cmluZygxNiwyKSkrIiBwdWI6ICIrKHRoaXMucHViJiZ0aGlzLnB1Yi5p''@;'; put 'put ''bnNwZWN0KCkpKyIgPiJ9fSw2MDcxODpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImVsIix7bW9udGhzTm9taW5hdGl2ZUVsOiJcdTAzOTlcdTAzYjFcdTAzYmRcdTAzYmZcdTAzYzVcdTAzYWNcdTAzYzFcdTAzYjlcdTAzYmZcdTAz''@;'; put 'put ''YzJfXHUwM2E2XHUwM2I1XHUwM2IyXHUwM2MxXHUwM2JmXHUwM2M1XHUwM2FjXHUwM2MxXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5Y1x1MDNhY1x1MDNjMVx1MDNjNFx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOTFcdTAzYzBcdTAzYzFcdTAzYWZcdTAzYmJcdTAzYjlcdTAzYmZcdTAzYzJfXHUw''@;'; put 'put ''MzljXHUwM2FjXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5OVx1MDNiZlx1MDNjZFx1MDNiZFx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOTlcdTAzYmZcdTAzY2RcdTAzYmJcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzkxXHUwM2NkXHUwM2IzXHUwM2JmXHUwM2M1XHUwM2MzXHUwM2M0XHUwM2JmXHUw''@;'; put 'put ''M2MyX1x1MDNhM1x1MDNiNVx1MDNjMFx1MDNjNFx1MDNhZFx1MDNiY1x1MDNiMlx1MDNjMVx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOWZcdTAzYmFcdTAzYzRcdTAzY2VcdTAzYjJcdTAzYzFcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzlkXHUwM2JmXHUwM2FkXHUwM2JjXHUwM2IyXHUwM2MxXHUw''@;'; put 'put ''M2I5XHUwM2JmXHUwM2MyX1x1MDM5NFx1MDNiNVx1MDNiYVx1MDNhZFx1MDNiY1x1MDNiMlx1MDNjMVx1MDNiOVx1MDNiZlx1MDNjMiIuc3BsaXQoIl8iKSxtb250aHNHZW5pdGl2ZUVsOiJcdTAzOTlcdTAzYjFcdTAzYmRcdTAzYmZcdTAzYzVcdTAzYjFcdTAzYzFcdTAzYWZcdTAzYmZcdTAz''@;'; put 'put ''YzVfXHUwM2E2XHUwM2I1XHUwM2IyXHUwM2MxXHUwM2JmXHUwM2M1XHUwM2IxXHUwM2MxXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5Y1x1MDNiMVx1MDNjMVx1MDNjNFx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOTFcdTAzYzBcdTAzYzFcdTAzYjlcdTAzYmJcdTAzYWZcdTAzYmZcdTAzYzVfXHUw''@;'; put 'put ''MzljXHUwM2IxXHUwMzkwXHUwM2JmXHUwM2M1X1x1MDM5OVx1MDNiZlx1MDNjNVx1MDNiZFx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOTlcdTAzYmZcdTAzYzVcdTAzYmJcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzkxXHUwM2M1XHUwM2IzXHUwM2JmXHUwM2NkXHUwM2MzXHUwM2M0XHUwM2JmXHUw''@;'; put 'put ''M2M1X1x1MDNhM1x1MDNiNVx1MDNjMFx1MDNjNFx1MDNiNVx1MDNiY1x1MDNiMlx1MDNjMVx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOWZcdTAzYmFcdTAzYzRcdTAzYzlcdTAzYjJcdTAzYzFcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzlkXHUwM2JmXHUwM2I1XHUwM2JjXHUwM2IyXHUwM2MxXHUw''@;'; put 'put ''M2FmXHUwM2JmXHUwM2M1X1x1MDM5NFx1MDNiNVx1MDNiYVx1MDNiNVx1MDNiY1x1MDNiMlx1MDNjMVx1MDNhZlx1MDNiZlx1MDNjNSIuc3BsaXQoIl8iKSxtb250aHM6ZnVuY3Rpb24oVix3KXtyZXR1cm4gVj8ic3RyaW5nIj09dHlwZW9mIHcmJi9ELy50ZXN0KHcuc3Vic3RyaW5nKDAsdy5p''@;'; put 'put ''bmRleE9mKCJNTU1NIikpKT90aGlzLl9tb250aHNHZW5pdGl2ZUVsW1YubW9udGgoKV06dGhpcy5fbW9udGhzTm9taW5hdGl2ZUVsW1YubW9udGgoKV06dGhpcy5fbW9udGhzTm9taW5hdGl2ZUVsfSxtb250aHNTaG9ydDoiXHUwMzk5XHUwM2IxXHUwM2JkX1x1MDNhNlx1MDNiNVx1MDNiMl9c''@;'; put 'put ''dTAzOWNcdTAzYjFcdTAzYzFfXHUwMzkxXHUwM2MwXHUwM2MxX1x1MDM5Y1x1MDNiMVx1MDNjYV9cdTAzOTlcdTAzYmZcdTAzYzVcdTAzYmRfXHUwMzk5XHUwM2JmXHUwM2M1XHUwM2JiX1x1MDM5MVx1MDNjNVx1MDNiM19cdTAzYTNcdTAzYjVcdTAzYzBfXHUwMzlmXHUwM2JhXHUwM2M0X1x1''@;'; put 'put ''MDM5ZFx1MDNiZlx1MDNiNV9cdTAzOTRcdTAzYjVcdTAzYmEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDM5YVx1MDNjNVx1MDNjMVx1MDNiOVx1MDNiMVx1MDNiYVx1MDNhZV9cdTAzOTRcdTAzYjVcdTAzYzVcdTAzYzRcdTAzYWRcdTAzYzFcdTAzYjFfXHUwM2E0XHUwM2MxXHUwM2FmXHUw''@;'; put 'put ''M2M0XHUwM2I3X1x1MDNhNFx1MDNiNVx1MDNjNFx1MDNhY1x1MDNjMVx1MDNjNFx1MDNiN19cdTAzYTBcdTAzYWRcdTAzYmNcdTAzYzBcdTAzYzRcdTAzYjdfXHUwM2EwXHUwM2IxXHUwM2MxXHUwM2IxXHUwM2MzXHUwM2JhXHUwM2I1XHUwM2M1XHUwM2FlX1x1MDNhM1x1MDNhY1x1MDNiMlx1''@;'; put 'put ''MDNiMlx1MDNiMVx1MDNjNFx1MDNiZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTAzOWFcdTAzYzVcdTAzYzFfXHUwMzk0XHUwM2I1XHUwM2M1X1x1MDNhNFx1MDNjMVx1MDNiOV9cdTAzYTRcdTAzYjVcdTAzYzRfXHUwM2EwXHUwM2I1XHUwM2JjX1x1MDNhMFx1MDNiMVx1MDNjMV9c''@;'; put 'put ''dTAzYTNcdTAzYjFcdTAzYjIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDM5YVx1MDNjNV9cdTAzOTRcdTAzYjVfXHUwM2E0XHUwM2MxX1x1MDNhNFx1MDNiNV9cdTAzYTBcdTAzYjVfXHUwM2EwXHUwM2IxX1x1MDNhM1x1MDNiMSIuc3BsaXQoIl8iKSxtZXJpZGllbTpmdW5jdGlvbihW''@;'; put 'put ''LHcsUCl7cmV0dXJuIFY+MTE/UD8iXHUwM2JjXHUwM2JjIjoiXHUwMzljXHUwMzljIjpQPyJcdTAzYzBcdTAzYmMiOiJcdTAzYTBcdTAzOWMifSxpc1BNOmZ1bmN0aW9uKFYpe3JldHVybiJcdTAzYmMiPT09KFYrIiIpLnRvTG93ZXJDYXNlKClbMF19LG1lcmlkaWVtUGFyc2U6L1tcdTAzYTBc''@;'; put 'put ''dTAzOWNdXC4/XHUwMzljP1wuPy9pLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBIn0sY2FsZW5kYXJF''@;'; put 'put ''bDp7c2FtZURheToiW1x1MDNhM1x1MDNhZVx1MDNiY1x1MDNiNVx1MDNjMVx1MDNiMSB7fV0gTFQiLG5leHREYXk6IltcdTAzOTFcdTAzY2RcdTAzYzFcdTAzYjlcdTAzYmYge31dIExUIixuZXh0V2VlazoiZGRkZCBbe31dIExUIixsYXN0RGF5OiJbXHUwM2E3XHUwM2I4XHUwM2I1XHUwM2My''@;'; put 'put ''IHt9XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gNj09PXRoaXMuZGF5KCk/IltcdTAzYzRcdTAzYmYgXHUwM2MwXHUwM2MxXHUwM2JmXHUwM2I3XHUwM2IzXHUwM2JmXHUwM2NkXHUwM2JjXHUwM2I1XHUwM2JkXHUwM2JmXSBkZGRkIFt7fV0gTFQiOiJbXHUwM2M0XHUwM2I3XHUw''@;'; put 'put ''M2JkIFx1MDNjMFx1MDNjMVx1MDNiZlx1MDNiN1x1MDNiM1x1MDNiZlx1MDNjZFx1MDNiY1x1MDNiNVx1MDNiZFx1MDNiN10gZGRkZCBbe31dIExUIn0sc2FtZUVsc2U6IkwifSxjYWxlbmRhcjpmdW5jdGlvbihWLHcpe3ZhciBQPXRoaXMuX2NhbGVuZGFyRWxbVl0sRj13JiZ3LmhvdXJzKCk7''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uIF8oVil7cmV0dXJuIHR5cGVvZiBGdW5jdGlvbjwidSImJlYgaW5zdGFuY2VvZiBGdW5jdGlvbnx8IltvYmplY3QgRnVuY3Rpb25dIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChWKX0oUCkmJihQPVAuYXBwbHkodykpLFAucmVwbGFjZSgie30iLEYl''@;'; put 'put ''MTI9PTE/Ilx1MDNjM1x1MDNjNFx1MDNiNyI6Ilx1MDNjM1x1MDNjNFx1MDNiOVx1MDNjMiIpfSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwM2MzXHUwM2I1ICVzIixwYXN0OiIlcyBcdTAzYzBcdTAzYzFcdTAzYjlcdTAzYmQiLHM6Ilx1MDNiYlx1MDNhZlx1MDNiM1x1MDNiMSBcdTAzYjRc''@;'; put 'put ''dTAzYjVcdTAzYzVcdTAzYzRcdTAzYjVcdTAzYzFcdTAzY2NcdTAzYmJcdTAzYjVcdTAzYzBcdTAzYzRcdTAzYjEiLHNzOiIlZCBcdTAzYjRcdTAzYjVcdTAzYzVcdTAzYzRcdTAzYjVcdTAzYzFcdTAzY2NcdTAzYmJcdTAzYjVcdTAzYzBcdTAzYzRcdTAzYjEiLG06Ilx1MDNhZFx1MDNiZFx1''@;'; put 'put ''MDNiMSBcdTAzYmJcdTAzYjVcdTAzYzBcdTAzYzRcdTAzY2MiLG1tOiIlZCBcdTAzYmJcdTAzYjVcdTAzYzBcdTAzYzRcdTAzYWMiLGg6Ilx1MDNiY1x1MDNhZlx1MDNiMSBcdTAzY2VcdTAzYzFcdTAzYjEiLGhoOiIlZCBcdTAzY2VcdTAzYzFcdTAzYjVcdTAzYzIiLGQ6Ilx1MDNiY1x1MDNh''@;'; put 'put ''Zlx1MDNiMSBcdTAzYmNcdTAzYWRcdTAzYzFcdTAzYjEiLGRkOiIlZCBcdTAzYmNcdTAzYWRcdTAzYzFcdTAzYjVcdTAzYzIiLE06Ilx1MDNhZFx1MDNiZFx1MDNiMVx1MDNjMiBcdTAzYmNcdTAzYWVcdTAzYmRcdTAzYjFcdTAzYzIiLE1NOiIlZCBcdTAzYmNcdTAzYWVcdTAzYmRcdTAzYjVc''@;'; put 'put ''dTAzYzIiLHk6Ilx1MDNhZFx1MDNiZFx1MDNiMVx1MDNjMiBcdTAzYzdcdTAzYzFcdTAzY2NcdTAzYmRcdTAzYmZcdTAzYzIiLHl5OiIlZCBcdTAzYzdcdTAzYzFcdTAzY2NcdTAzYmRcdTAzYjlcdTAzYjEifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHUwM2I3LyxvcmRpbmFs''@;'; put 'put ''OiIlZFx1MDNiNyIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sNjEwNjM6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPSJzdHljemVcdTAxNDRfbHV0eV9tYXJ6ZWNfa3dpZWNpZVx1MDE0NF9tYWpfY3plcndpZWNfbGlwaWVjX3NpZXJw''@;'; put 'put ''aWVcdTAxNDRfd3J6ZXNpZVx1MDE0NF9wYVx1MDE3YWR6aWVybmlrX2xpc3RvcGFkX2dydWR6aWVcdTAxNDQiLnNwbGl0KCJfIikscD0ic3R5Y3puaWFfbHV0ZWdvX21hcmNhX2t3aWV0bmlhX21hamFfY3plcndjYV9saXBjYV9zaWVycG5pYV93cnplXHUwMTVibmlhX3BhXHUwMTdhZHppZXJu''@;'; put 'put ''aWthX2xpc3RvcGFkYV9ncnVkbmlhIi5zcGxpdCgiXyIpLFY9Wy9ec3R5L2ksL15sdXQvaSwvXm1hci9pLC9ea3dpL2ksL15tYWovaSwvXmN6ZS9pLC9ebGlwL2ksL15zaWUvaSwvXndyei9pLC9ecGFcdTAxN2EvaSwvXmxpcy9pLC9eZ3J1L2ldO2Z1bmN0aW9uIHcoUil7cmV0dXJuIFIlMTA8''@;'; put 'put ''NSYmUiUxMD4xJiZ+fihSLzEwKSUxMCE9MX1mdW5jdGlvbiBQKFIseixOKXt2YXIgTz1SKyIgIjtzd2l0Y2goTil7Y2FzZSJzcyI6cmV0dXJuIE8rKHcoUik/InNla3VuZHkiOiJzZWt1bmQiKTtjYXNlIm0iOnJldHVybiB6PyJtaW51dGEiOiJtaW51dFx1MDExOSI7Y2FzZSJtbSI6cmV0dXJu''@;'; put 'put ''IE8rKHcoUik/Im1pbnV0eSI6Im1pbnV0Iik7Y2FzZSJoIjpyZXR1cm4gej8iZ29kemluYSI6ImdvZHppblx1MDExOSI7Y2FzZSJoaCI6cmV0dXJuIE8rKHcoUik/ImdvZHppbnkiOiJnb2R6aW4iKTtjYXNlInd3IjpyZXR1cm4gTysodyhSKT8idHlnb2RuaWUiOiJ0eWdvZG5pIik7Y2FzZSJN''@;'; put 'put ''TSI6cmV0dXJuIE8rKHcoUik/Im1pZXNpXHUwMTA1Y2UiOiJtaWVzaVx1MDExOWN5Iik7Y2FzZSJ5eSI6cmV0dXJuIE8rKHcoUik/ImxhdGEiOiJsYXQiKX19SS5kZWZpbmVMb2NhbGUoInBsIix7bW9udGhzOmZ1bmN0aW9uKFIseil7cmV0dXJuIFI/L0QgTU1NTS8udGVzdCh6KT9wW1IubW9u''@;'; put 'put ''dGgoKV06X1tSLm1vbnRoKCldOl99LG1vbnRoc1Nob3J0OiJzdHlfbHV0X21hcl9rd2lfbWFqX2N6ZV9saXBfc2llX3dyel9wYVx1MDE3YV9saXNfZ3J1Ii5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlOlYsbG9uZ01vbnRoc1BhcnNlOlYsc2hvcnRNb250aHNQYXJzZTpWLHdlZWtkYXlzOiJuaWVk''@;'; put 'put ''emllbGFfcG9uaWVkemlhXHUwMTQyZWtfd3RvcmVrX1x1MDE1YnJvZGFfY3p3YXJ0ZWtfcGlcdTAxMDV0ZWtfc29ib3RhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Im5kel9wb25fd3RfXHUwMTVicl9jendfcHRfc29iIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJOZF9Qbl9XdF9cdTAx''@;'; put 'put ''NWFyX0N6X1B0X1NvIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7''@;'; put 'put ''c2FtZURheToiW0R6aVx1MDE1YiBvXSBMVCIsbmV4dERheToiW0p1dHJvIG9dIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIltXIG5pZWR6aWVsXHUwMTE5IG9dIExUIjtjYXNlIDI6cmV0dXJuIltXZSB3dG9yZWsgb10gTFQiO2Nhc2Ug''@;'; put 'put ''MzpyZXR1cm4iW1cgXHUwMTVicm9kXHUwMTE5IG9dIExUIjtjYXNlIDY6cmV0dXJuIltXIHNvYm90XHUwMTE5IG9dIExUIjtkZWZhdWx0OnJldHVybiJbV10gZGRkZCBbb10gTFQifX0sbGFzdERheToiW1djem9yYWogb10gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5''@;'; put 'put ''KCkpe2Nhc2UgMDpyZXR1cm4iW1cgemVzelx1MDE0Mlx1MDEwNSBuaWVkemllbFx1MDExOSBvXSBMVCI7Y2FzZSAzOnJldHVybiJbVyB6ZXN6XHUwMTQyXHUwMTA1IFx1MDE1YnJvZFx1MDExOSBvXSBMVCI7Y2FzZSA2OnJldHVybiJbVyB6ZXN6XHUwMTQyXHUwMTA1IHNvYm90XHUwMTE5IG9d''@;'; put 'put ''IExUIjtkZWZhdWx0OnJldHVybiJbVyB6ZXN6XHUwMTQyeV0gZGRkZCBbb10gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6IiVzIHRlbXUiLHM6ImtpbGthIHNla3VuZCIsc3M6UCxtOlAsbW06UCxoOlAsaGg6UCxkOiIxIGR6aWVcdTAxNDQi''@;'; put 'put ''LGRkOiIlZCBkbmkiLHc6InR5ZHppZVx1MDE0NCIsd3c6UCxNOiJtaWVzaVx1MDEwNWMiLE1NOlAseToicm9rIix5eTpQfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sNjEwOTI6KGNlLFgs''@;'; put 'put ''Yik9PnsidXNlIHN0cmljdCI7dmFyIEk7Y2UuZXhwb3J0cz1CLEIuUmVhZGFibGVTdGF0ZT1aZSxiKDQ0MzU2KTt2YXIgTixwPWZ1bmN0aW9uKEhlLExlKXtyZXR1cm4gSGUubGlzdGVuZXJzKExlKS5sZW5ndGh9LFY9YigxMjYwMSksdz1iKDgzODM4KS5CdWZmZXIsUD0odHlwZW9mIGdsb2Jh''@;'; put 'put ''bDwidSI/Z2xvYmFsOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LHo9Yig3NzE5OSk7Tj16JiZ6LmRlYnVnbG9nP3ouZGVidWdsb2coInN0cmVhbSIpOmZ1bmN0aW9uKCl7fTt2YXIgaWUsdWUsZ2UsTz1i''@;'; put 'put ''KDc1MjI1KSxLPWIoODgxNTIpLFk9YigyMjgyNykuZ2V0SGlnaFdhdGVyTWFyayxXPWIoMzA0NjQpLkYscT1XLkVSUl9JTlZBTElEX0FSR19UWVBFLGVlPVcuRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRixKPVcuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQscmU9Vy5FUlJfU1RSRUFNX1VO''@;'; put 'put ''U0hJRlRfQUZURVJfRU5EX0VWRU5UO2IoNzE5OTMpKEIsVik7dmFyIF9lPUsuZXJyb3JPckRlc3Ryb3ksVGU9WyJlcnJvciIsImNsb3NlIiwiZGVzdHJveSIsInBhdXNlIiwicmVzdW1lIl07ZnVuY3Rpb24gWmUoa2UsSGUsTGUpe0k9SXx8YigxMDMwKSwiYm9vbGVhbiIhPXR5cGVvZiBMZSYm''@;'; put 'put ''KExlPUhlIGluc3RhbmNlb2YgSSksdGhpcy5vYmplY3RNb2RlPSEhKGtlPWtlfHx7fSkub2JqZWN0TW9kZSxMZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEha2UucmVhZGFibGVPYmplY3RNb2RlKSx0aGlzLmhpZ2hXYXRlck1hcms9WSh0aGlzLGtlLCJyZWFkYWJsZUhp''@;'; put 'put ''Z2hXYXRlck1hcmsiLExlKSx0aGlzLmJ1ZmZlcj1uZXcgTyx0aGlzLmxlbmd0aD0wLHRoaXMucGlwZXM9bnVsbCx0aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5zeW5jPSEwLHRo''@;'; put 'put ''aXMubmVlZFJlYWRhYmxlPSExLHRoaXMuZW1pdHRlZFJlYWRhYmxlPSExLHRoaXMucmVhZGFibGVMaXN0ZW5pbmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9ITEsdGhpcy5wYXVzZWQ9ITAsdGhpcy5lbWl0Q2xvc2U9ITEhPT1rZS5lbWl0Q2xvc2UsdGhpcy5hdXRvRGVzdHJveT0hIWtlLmF1''@;'; put 'put ''dG9EZXN0cm95LHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVmYXVsdEVuY29kaW5nPWtlLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMuYXdhaXREcmFpbj0wLHRoaXMucmVhZGluZ01vcmU9ITEsdGhpcy5kZWNvZGVyPW51bGwsdGhpcy5lbmNvZGluZz1udWxsLGtlLmVuY29kaW5nJiYo''@;'; put 'put ''aWV8fChpZT1iKDc4NDU0KS5JKSx0aGlzLmRlY29kZXI9bmV3IGllKGtlLmVuY29kaW5nKSx0aGlzLmVuY29kaW5nPWtlLmVuY29kaW5nKX1mdW5jdGlvbiBCKGtlKXtpZihJPUl8fGIoMTAzMCksISh0aGlzIGluc3RhbmNlb2YgQikpcmV0dXJuIG5ldyBCKGtlKTt0aGlzLl9yZWFkYWJsZVN0''@;'; put 'put ''YXRlPW5ldyBaZShrZSx0aGlzLHRoaXMgaW5zdGFuY2VvZiBJKSx0aGlzLnJlYWRhYmxlPSEwLGtlJiYoImZ1bmN0aW9uIj09dHlwZW9mIGtlLnJlYWQmJih0aGlzLl9yZWFkPWtlLnJlYWQpLCJmdW5jdGlvbiI9PXR5cGVvZiBrZS5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1rZS5kZXN0cm95''@;'; put 'put ''KSksVi5jYWxsKHRoaXMpfWZ1bmN0aW9uIGcoa2UsSGUsTGUsUmUsVmUpe04oInJlYWRhYmxlQWRkQ2h1bmsiLEhlKTt2YXIgRGUsQWU9a2UuX3JlYWRhYmxlU3RhdGU7aWYobnVsbD09PUhlKUFlLnJlYWRpbmc9ITEsZnVuY3Rpb24gaihrZSxIZSl7aWYoTigib25Fb2ZDaHVuayIpLCFIZS5l''@;'; put 'put ''bmRlZCl7aWYoSGUuZGVjb2Rlcil7dmFyIExlPUhlLmRlY29kZXIuZW5kKCk7TGUmJkxlLmxlbmd0aCYmKEhlLmJ1ZmZlci5wdXNoKExlKSxIZS5sZW5ndGgrPUhlLm9iamVjdE1vZGU/MTpMZS5sZW5ndGgpfUhlLmVuZGVkPSEwLEhlLnN5bmM/RShrZSk6KEhlLm5lZWRSZWFkYWJsZT0hMSxI''@;'; put 'put ''ZS5lbWl0dGVkUmVhZGFibGV8fChIZS5lbWl0dGVkUmVhZGFibGU9ITAsbShrZSkpKX19KGtlLEFlKTtlbHNlIGlmKFZlfHwoRGU9ZnVuY3Rpb24geChrZSxIZSl7dmFyIExlO3JldHVybiFmdW5jdGlvbiBSKGtlKXtyZXR1cm4gdy5pc0J1ZmZlcihrZSl8fGtlIGluc3RhbmNlb2YgUH0oSGUp''@;'; put 'put ''JiYic3RyaW5nIiE9dHlwZW9mIEhlJiZ2b2lkIDAhPT1IZSYmIWtlLm9iamVjdE1vZGUmJihMZT1uZXcgcSgiY2h1bmsiLFsic3RyaW5nIiwiQnVmZmVyIiwiVWludDhBcnJheSJdLEhlKSksTGV9KEFlLEhlKSksRGUpX2Uoa2UsRGUpO2Vsc2UgaWYoQWUub2JqZWN0TW9kZXx8SGUmJkhlLmxl''@;'; put 'put ''bmd0aD4wKWlmKCJzdHJpbmciIT10eXBlb2YgSGUmJiFBZS5vYmplY3RNb2RlJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoSGUpIT09dy5wcm90b3R5cGUmJihIZT1mdW5jdGlvbiBGKGtlKXtyZXR1cm4gdy5mcm9tKGtlKX0oSGUpKSxSZSlBZS5lbmRFbWl0dGVkP19lKGtlLG5ldyByZSk6eShr''@;'; put 'put ''ZSxBZSxIZSwhMCk7ZWxzZSBpZihBZS5lbmRlZClfZShrZSxuZXcgZWUpO2Vsc2V7aWYoQWUuZGVzdHJveWVkKXJldHVybiExO0FlLnJlYWRpbmc9ITEsQWUuZGVjb2RlciYmIUxlPyhIZT1BZS5kZWNvZGVyLndyaXRlKEhlKSxBZS5vYmplY3RNb2RlfHwwIT09SGUubGVuZ3RoP3koa2UsQWUs''@;'; put 'put ''SGUsITEpOkEoa2UsQWUpKTp5KGtlLEFlLEhlLCExKX1lbHNlIFJlfHwoQWUucmVhZGluZz0hMSxBKGtlLEFlKSk7cmV0dXJuIUFlLmVuZGVkJiYoQWUubGVuZ3RoPEFlLmhpZ2hXYXRlck1hcmt8fDA9PT1BZS5sZW5ndGgpfWZ1bmN0aW9uIHkoa2UsSGUsTGUsUmUpe0hlLmZsb3dpbmcmJjA9''@;'; put 'put ''PT1IZS5sZW5ndGgmJiFIZS5zeW5jPyhIZS5hd2FpdERyYWluPTAsa2UuZW1pdCgiZGF0YSIsTGUpKTooSGUubGVuZ3RoKz1IZS5vYmplY3RNb2RlPzE6TGUubGVuZ3RoLFJlP0hlLmJ1ZmZlci51bnNoaWZ0KExlKTpIZS5idWZmZXIucHVzaChMZSksSGUubmVlZFJlYWRhYmxlJiZFKGtlKSks''@;'; put 'put ''QShrZSxIZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KEIucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9u''@;'; put 'put ''KEhlKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9SGUpfX0pLEIucHJvdG90eXBlLmRlc3Ryb3k9Sy5kZXN0cm95LEIucHJvdG90eXBlLl91bmRlc3Ryb3k9Sy51bmRlc3Ryb3ksQi5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oa2UsSGUp''@;'; put 'put ''e0hlKGtlKX0sQi5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihrZSxIZSl7dmFyIFJlLExlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIExlLm9iamVjdE1vZGU/UmU9ITA6InN0cmluZyI9PXR5cGVvZiBrZSYmKChIZT1IZXx8TGUuZGVmYXVsdEVuY29kaW5nKSE9PUxlLmVuY29kaW5nJiYo''@;'; put 'put ''a2U9dy5mcm9tKGtlLEhlKSxIZT0iIiksUmU9ITApLGcodGhpcyxrZSxIZSwhMSxSZSl9LEIucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24oa2Upe3JldHVybiBnKHRoaXMsa2UsbnVsbCwhMCwhMSl9LEIucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7cmV0dXJuITE9PT10aGlzLl9y''@;'; put 'put ''ZWFkYWJsZVN0YXRlLmZsb3dpbmd9LEIucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0aW9uKGtlKXtpZXx8KGllPWIoNzg0NTQpLkkpO3ZhciBIZT1uZXcgaWUoa2UpO3RoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlcj1IZSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nPXRoaXMuX3Jl''@;'; put 'put ''YWRhYmxlU3RhdGUuZGVjb2Rlci5lbmNvZGluZztmb3IodmFyIExlPXRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLmhlYWQsUmU9IiI7bnVsbCE9PUxlOylSZSs9SGUud3JpdGUoTGUuZGF0YSksTGU9TGUubmV4dDtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuY2xlYXIoKSwi''@;'; put 'put ''IiE9PVJlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5wdXNoKFJlKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aD1SZS5sZW5ndGgsdGhpc307dmFyIEM9MTA3Mzc0MTgyNDtmdW5jdGlvbiBIKGtlLEhlKXtyZXR1cm4ga2U8PTB8fDA9PT1IZS5sZW5ndGgmJkhlLmVuZGVkPzA6SGUu''@;'; put 'put ''b2JqZWN0TW9kZT8xOmtlIT1rZT9IZS5mbG93aW5nJiZIZS5sZW5ndGg/SGUuYnVmZmVyLmhlYWQuZGF0YS5sZW5ndGg6SGUubGVuZ3RoOihrZT5IZS5oaWdoV2F0ZXJNYXJrJiYoSGUuaGlnaFdhdGVyTWFyaz1mdW5jdGlvbiBUKGtlKXtyZXR1cm4ga2U+PUM/a2U9Qzooa2UtLSxrZXw9a2U+''@;'; put 'put ''Pj4xLGtlfD1rZT4+PjIsa2V8PWtlPj4+NCxrZXw9a2U+Pj44LGtlfD1rZT4+PjE2LGtlKyspLGtlfShrZSkpLGtlPD1IZS5sZW5ndGg/a2U6SGUuZW5kZWQ/SGUubGVuZ3RoOihIZS5uZWVkUmVhZGFibGU9ITAsMCkpfWZ1bmN0aW9uIEUoa2Upe3ZhciBIZT1rZS5fcmVhZGFibGVTdGF0ZTtO''@;'; put 'put ''KCJlbWl0UmVhZGFibGUiLEhlLm5lZWRSZWFkYWJsZSxIZS5lbWl0dGVkUmVhZGFibGUpLEhlLm5lZWRSZWFkYWJsZT0hMSxIZS5lbWl0dGVkUmVhZGFibGV8fChOKCJlbWl0UmVhZGFibGUiLEhlLmZsb3dpbmcpLEhlLmVtaXR0ZWRSZWFkYWJsZT0hMCxwcm9jZXNzLm5leHRUaWNrKG0sa2Up''@;'; put 'put ''KX1mdW5jdGlvbiBtKGtlKXt2YXIgSGU9a2UuX3JlYWRhYmxlU3RhdGU7TigiZW1pdFJlYWRhYmxlXyIsSGUuZGVzdHJveWVkLEhlLmxlbmd0aCxIZS5lbmRlZCksIUhlLmRlc3Ryb3llZCYmKEhlLmxlbmd0aHx8SGUuZW5kZWQpJiYoa2UuZW1pdCgicmVhZGFibGUiKSxIZS5lbWl0dGVkUmVh''@;'; put 'put ''ZGFibGU9ITEpLEhlLm5lZWRSZWFkYWJsZT0hSGUuZmxvd2luZyYmIUhlLmVuZGVkJiZIZS5sZW5ndGg8PUhlLmhpZ2hXYXRlck1hcmssaXQoa2UpfWZ1bmN0aW9uIEEoa2UsSGUpe0hlLnJlYWRpbmdNb3JlfHwoSGUucmVhZGluZ01vcmU9ITAscHJvY2Vzcy5uZXh0VGljayhhZSxrZSxIZSkp''@;'; put 'put ''fWZ1bmN0aW9uIGFlKGtlLEhlKXtmb3IoOyFIZS5yZWFkaW5nJiYhSGUuZW5kZWQmJihIZS5sZW5ndGg8SGUuaGlnaFdhdGVyTWFya3x8SGUuZmxvd2luZyYmMD09PUhlLmxlbmd0aCk7KXt2YXIgTGU9SGUubGVuZ3RoO2lmKE4oIm1heWJlUmVhZE1vcmUgcmVhZCAwIiksa2UucmVhZCgwKSxM''@;'; put 'put ''ZT09PUhlLmxlbmd0aClicmVha31IZS5yZWFkaW5nTW9yZT0hMX1mdW5jdGlvbiBzZShrZSl7dmFyIEhlPWtlLl9yZWFkYWJsZVN0YXRlO0hlLnJlYWRhYmxlTGlzdGVuaW5nPWtlLmxpc3RlbmVyQ291bnQoInJlYWRhYmxlIik+MCxIZS5yZXN1bWVTY2hlZHVsZWQmJiFIZS5wYXVzZWQ/SGUu''@;'; put 'put ''Zmxvd2luZz0hMDprZS5saXN0ZW5lckNvdW50KCJkYXRhIik+MCYma2UucmVzdW1lKCl9ZnVuY3Rpb24gQ2Uoa2Upe04oInJlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCIpLGtlLnJlYWQoMCl9ZnVuY3Rpb24gSmUoa2UsSGUpe04oInJlc3VtZSIsSGUucmVhZGluZyksSGUucmVhZGluZ3x8a2Uu''@;'; put 'put ''cmVhZCgwKSxIZS5yZXN1bWVTY2hlZHVsZWQ9ITEsa2UuZW1pdCgicmVzdW1lIiksaXQoa2UpLEhlLmZsb3dpbmcmJiFIZS5yZWFkaW5nJiZrZS5yZWFkKDApfWZ1bmN0aW9uIGl0KGtlKXt2YXIgSGU9a2UuX3JlYWRhYmxlU3RhdGU7Zm9yKE4oImZsb3ciLEhlLmZsb3dpbmcpO0hlLmZsb3dp''@;'; put 'put ''bmcmJm51bGwhPT1rZS5yZWFkKCk7KTt9ZnVuY3Rpb24geGUoa2UsSGUpe3JldHVybiAwPT09SGUubGVuZ3RoP251bGw6KEhlLm9iamVjdE1vZGU/TGU9SGUuYnVmZmVyLnNoaWZ0KCk6IWtlfHxrZT49SGUubGVuZ3RoPyhMZT1IZS5kZWNvZGVyP0hlLmJ1ZmZlci5qb2luKCIiKToxPT09SGUu''@;'; put 'put ''YnVmZmVyLmxlbmd0aD9IZS5idWZmZXIuZmlyc3QoKTpIZS5idWZmZXIuY29uY2F0KEhlLmxlbmd0aCksSGUuYnVmZmVyLmNsZWFyKCkpOkxlPUhlLmJ1ZmZlci5jb25zdW1lKGtlLEhlLmRlY29kZXIpLExlKTt2YXIgTGV9ZnVuY3Rpb24geWUoa2Upe3ZhciBIZT1rZS5fcmVhZGFibGVTdGF0''@;'; put 'put ''ZTtOKCJlbmRSZWFkYWJsZSIsSGUuZW5kRW1pdHRlZCksSGUuZW5kRW1pdHRlZHx8KEhlLmVuZGVkPSEwLHByb2Nlc3MubmV4dFRpY2soS2UsSGUsa2UpKX1mdW5jdGlvbiBLZShrZSxIZSl7aWYoTigiZW5kUmVhZGFibGVOVCIsa2UuZW5kRW1pdHRlZCxrZS5sZW5ndGgpLCFrZS5lbmRFbWl0''@;'; put 'put ''dGVkJiYwPT09a2UubGVuZ3RoJiYoa2UuZW5kRW1pdHRlZD0hMCxIZS5yZWFkYWJsZT0hMSxIZS5lbWl0KCJlbmQiKSxrZS5hdXRvRGVzdHJveSkpe3ZhciBMZT1IZS5fd3JpdGFibGVTdGF0ZTsoIUxlfHxMZS5hdXRvRGVzdHJveSYmTGUuZmluaXNoZWQpJiZIZS5kZXN0cm95KCl9fWZ1bmN0''@;'; put 'put ''aW9uIGplKGtlLEhlKXtmb3IodmFyIExlPTAsUmU9a2UubGVuZ3RoO0xlPFJlO0xlKyspaWYoa2VbTGVdPT09SGUpcmV0dXJuIExlO3JldHVybi0xfUIucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24oa2Upe04oInJlYWQiLGtlKSxrZT1wYXJzZUludChrZSwxMCk7dmFyIEhlPXRoaXMuX3JlYWRh''@;'; put 'put ''YmxlU3RhdGUsTGU9a2U7aWYoMCE9PWtlJiYoSGUuZW1pdHRlZFJlYWRhYmxlPSExKSwwPT09a2UmJkhlLm5lZWRSZWFkYWJsZSYmKCgwIT09SGUuaGlnaFdhdGVyTWFyaz9IZS5sZW5ndGg+PUhlLmhpZ2hXYXRlck1hcms6SGUubGVuZ3RoPjApfHxIZS5lbmRlZCkpcmV0dXJuIE4oInJlYWQ6''@;'; put 'put ''IGVtaXRSZWFkYWJsZSIsSGUubGVuZ3RoLEhlLmVuZGVkKSwwPT09SGUubGVuZ3RoJiZIZS5lbmRlZD95ZSh0aGlzKTpFKHRoaXMpLG51bGw7aWYoMD09PShrZT1IKGtlLEhlKSkmJkhlLmVuZGVkKXJldHVybiAwPT09SGUubGVuZ3RoJiZ5ZSh0aGlzKSxudWxsO3ZhciBWZSxSZT1IZS5uZWVk''@;'; put 'put ''UmVhZGFibGU7cmV0dXJuIE4oIm5lZWQgcmVhZGFibGUiLFJlKSwoMD09PUhlLmxlbmd0aHx8SGUubGVuZ3RoLWtlPEhlLmhpZ2hXYXRlck1hcmspJiZOKCJsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyayIsUmU9ITApLEhlLmVuZGVkfHxIZS5yZWFkaW5nP04oInJlYWRpbmcgb3IgZW5kZWQi''@;'; put 'put ''LFJlPSExKTpSZSYmKE4oImRvIHJlYWQiKSxIZS5yZWFkaW5nPSEwLEhlLnN5bmM9ITAsMD09PUhlLmxlbmd0aCYmKEhlLm5lZWRSZWFkYWJsZT0hMCksdGhpcy5fcmVhZChIZS5oaWdoV2F0ZXJNYXJrKSxIZS5zeW5jPSExLEhlLnJlYWRpbmd8fChrZT1IKExlLEhlKSkpLG51bGw9PT0oVmU9''@;'; put 'put ''a2U+MD94ZShrZSxIZSk6bnVsbCk/KEhlLm5lZWRSZWFkYWJsZT1IZS5sZW5ndGg8PUhlLmhpZ2hXYXRlck1hcmssa2U9MCk6KEhlLmxlbmd0aC09a2UsSGUuYXdhaXREcmFpbj0wKSwwPT09SGUubGVuZ3RoJiYoSGUuZW5kZWR8fChIZS5uZWVkUmVhZGFibGU9ITApLExlIT09a2UmJkhlLmVu''@;'; put 'put ''ZGVkJiZ5ZSh0aGlzKSksbnVsbCE9PVZlJiZ0aGlzLmVtaXQoImRhdGEiLFZlKSxWZX0sQi5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oa2Upe19lKHRoaXMsbmV3IEooIl9yZWFkKCkiKSl9LEIucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oa2UsSGUpe3ZhciBMZT10aGlzLFJlPXRoaXMuX3Jl''@;'; put 'put ''YWRhYmxlU3RhdGU7c3dpdGNoKFJlLnBpcGVzQ291bnQpe2Nhc2UgMDpSZS5waXBlcz1rZTticmVhaztjYXNlIDE6UmUucGlwZXM9W1JlLnBpcGVzLGtlXTticmVhaztkZWZhdWx0OlJlLnBpcGVzLnB1c2goa2UpfVJlLnBpcGVzQ291bnQrPTEsTigicGlwZSBjb3VudD0lZCBvcHRzPSVqIixS''@;'; put 'put ''ZS5waXBlc0NvdW50LEhlKTt2YXIgQWU9SGUmJiExPT09SGUuZW5kfHxrZT09PXByb2Nlc3Muc3Rkb3V0fHxrZT09PXByb2Nlc3Muc3RkZXJyP1hlOl90O2Z1bmN0aW9uIF90KCl7Tigib25lbmQiKSxrZS5lbmQoKX1SZS5lbmRFbWl0dGVkP3Byb2Nlc3MubmV4dFRpY2soQWUpOkxlLm9uY2Uo''@;'; put 'put ''ImVuZCIsQWUpLGtlLm9uKCJ1bnBpcGUiLGZ1bmN0aW9uIERlKHR0LEllKXtOKCJvbnVucGlwZSIpLHR0PT09TGUmJkllJiYhMT09PUllLmhhc1VucGlwZWQmJihJZS5oYXNVbnBpcGVkPSEwLGZ1bmN0aW9uIHNuKCl7TigiY2xlYW51cCIpLGtlLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsZW4p''@;'; put 'put ''LGtlLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLHV0KSxrZS5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLHJ0KSxrZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLFN0KSxrZS5yZW1vdmVMaXN0ZW5lcigidW5waXBlIixEZSksTGUucmVtb3ZlTGlzdGVuZXIoImVuZCIsX3QpLExlLnJlbW92ZUxpc3Rl''@;'; put 'put ''bmVyKCJlbmQiLFhlKSxMZS5yZW1vdmVMaXN0ZW5lcigiZGF0YSIsdnQpLFFlPSEwLFJlLmF3YWl0RHJhaW4mJigha2UuX3dyaXRhYmxlU3RhdGV8fGtlLl93cml0YWJsZVN0YXRlLm5lZWREcmFpbikmJnJ0KCl9KCkpfSk7dmFyIHJ0PWZ1bmN0aW9uIG5lKGtlKXtyZXR1cm4gZnVuY3Rpb24o''@;'; put 'put ''KXt2YXIgTGU9a2UuX3JlYWRhYmxlU3RhdGU7TigicGlwZU9uRHJhaW4iLExlLmF3YWl0RHJhaW4pLExlLmF3YWl0RHJhaW4mJkxlLmF3YWl0RHJhaW4tLSwwPT09TGUuYXdhaXREcmFpbiYmcChrZSwiZGF0YSIpJiYoTGUuZmxvd2luZz0hMCxpdChrZSkpfX0oTGUpO2tlLm9uKCJkcmFpbiIs''@;'; put 'put ''cnQpO3ZhciBRZT0hMTtmdW5jdGlvbiB2dCh0dCl7Tigib25kYXRhIik7dmFyIEllPWtlLndyaXRlKHR0KTtOKCJkZXN0LndyaXRlIixJZSksITE9PT1JZSYmKCgxPT09UmUucGlwZXNDb3VudCYmUmUucGlwZXM9PT1rZXx8UmUucGlwZXNDb3VudD4xJiYtMSE9PWplKFJlLnBpcGVzLGtlKSkm''@;'; put 'put ''JiFRZSYmKE4oImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZSIsUmUuYXdhaXREcmFpbiksUmUuYXdhaXREcmFpbisrKSxMZS5wYXVzZSgpKX1mdW5jdGlvbiBTdCh0dCl7Tigib25lcnJvciIsdHQpLFhlKCksa2UucmVtb3ZlTGlzdGVuZXIoImVycm9yIixTdCksMD09PXAoa2UsImVycm9y''@;'; put 'put ''IikmJl9lKGtlLHR0KX1mdW5jdGlvbiBlbigpe2tlLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLHV0KSxYZSgpfWZ1bmN0aW9uIHV0KCl7Tigib25maW5pc2giKSxrZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGVuKSxYZSgpfWZ1bmN0aW9uIFhlKCl7TigidW5waXBlIiksTGUudW5waXBlKGtl''@;'; put 'put ''KX1yZXR1cm4gTGUub24oImRhdGEiLHZ0KSxmdW5jdGlvbiBNZShrZSxIZSxMZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGtlLnByZXBlbmRMaXN0ZW5lcilyZXR1cm4ga2UucHJlcGVuZExpc3RlbmVyKEhlLExlKTtrZS5fZXZlbnRzJiZrZS5fZXZlbnRzW0hlXT9BcnJheS5pc0FycmF5KGtl''@;'; put 'put ''Ll9ldmVudHNbSGVdKT9rZS5fZXZlbnRzW0hlXS51bnNoaWZ0KExlKTprZS5fZXZlbnRzW0hlXT1bTGUsa2UuX2V2ZW50c1tIZV1dOmtlLm9uKEhlLExlKX0oa2UsImVycm9yIixTdCksa2Uub25jZSgiY2xvc2UiLGVuKSxrZS5vbmNlKCJmaW5pc2giLHV0KSxrZS5lbWl0KCJwaXBlIixMZSks''@;'; put 'put ''UmUuZmxvd2luZ3x8KE4oInBpcGUgcmVzdW1lIiksTGUucmVzdW1lKCkpLGtlfSxCLnByb3RvdHlwZS51bnBpcGU9ZnVuY3Rpb24oa2Upe3ZhciBIZT10aGlzLl9yZWFkYWJsZVN0YXRlLExlPXtoYXNVbnBpcGVkOiExfTtpZigwPT09SGUucGlwZXNDb3VudClyZXR1cm4gdGhpcztpZigxPT09''@;'; put 'put ''SGUucGlwZXNDb3VudClyZXR1cm4ga2UmJmtlIT09SGUucGlwZXN8fChrZXx8KGtlPUhlLnBpcGVzKSxIZS5waXBlcz1udWxsLEhlLnBpcGVzQ291bnQ9MCxIZS5mbG93aW5nPSExLGtlJiZrZS5lbWl0KCJ1bnBpcGUiLHRoaXMsTGUpKSx0aGlzO2lmKCFrZSl7dmFyIFJlPUhlLnBpcGVzLFZl''@;'; put 'put ''PUhlLnBpcGVzQ291bnQ7SGUucGlwZXM9bnVsbCxIZS5waXBlc0NvdW50PTAsSGUuZmxvd2luZz0hMTtmb3IodmFyIEFlPTA7QWU8VmU7QWUrKylSZVtBZV0uZW1pdCgidW5waXBlIix0aGlzLHtoYXNVbnBpcGVkOiExfSk7cmV0dXJuIHRoaXN9dmFyIERlPWplKEhlLnBpcGVzLGtlKTtyZXR1''@;'; put 'put ''cm4tMT09PURlfHwoSGUucGlwZXMuc3BsaWNlKERlLDEpLEhlLnBpcGVzQ291bnQtPTEsMT09PUhlLnBpcGVzQ291bnQmJihIZS5waXBlcz1IZS5waXBlc1swXSksa2UuZW1pdCgidW5waXBlIix0aGlzLExlKSksdGhpc30sQi5wcm90b3R5cGUuYWRkTGlzdGVuZXI9Qi5wcm90b3R5cGUub249''@;'; put 'put ''ZnVuY3Rpb24oa2UsSGUpe3ZhciBMZT1WLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsa2UsSGUpLFJlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuImRhdGEiPT09a2U/KFJlLnJlYWRhYmxlTGlzdGVuaW5nPXRoaXMubGlzdGVuZXJDb3VudCgicmVhZGFibGUiKT4wLCExIT09UmUuZmxvd2lu''@;'; put 'put ''ZyYmdGhpcy5yZXN1bWUoKSk6InJlYWRhYmxlIj09PWtlJiYhUmUuZW5kRW1pdHRlZCYmIVJlLnJlYWRhYmxlTGlzdGVuaW5nJiYoUmUucmVhZGFibGVMaXN0ZW5pbmc9UmUubmVlZFJlYWRhYmxlPSEwLFJlLmZsb3dpbmc9ITEsUmUuZW1pdHRlZFJlYWRhYmxlPSExLE4oIm9uIHJlYWRhYmxl''@;'; put 'put ''IixSZS5sZW5ndGgsUmUucmVhZGluZyksUmUubGVuZ3RoP0UodGhpcyk6UmUucmVhZGluZ3x8cHJvY2Vzcy5uZXh0VGljayhDZSx0aGlzKSksTGV9LEIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKGtlLEhlKXt2YXIgTGU9Vi5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIuY2Fs''@;'; put 'put ''bCh0aGlzLGtlLEhlKTtyZXR1cm4icmVhZGFibGUiPT09a2UmJnByb2Nlc3MubmV4dFRpY2soc2UsdGhpcyksTGV9LEIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbihrZSl7dmFyIEhlPVYucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycy5hcHBseSh0aGlzLGFyZ3Vt''@;'; put 'put ''ZW50cyk7cmV0dXJuKCJyZWFkYWJsZSI9PT1rZXx8dm9pZCAwPT09a2UpJiZwcm9jZXNzLm5leHRUaWNrKHNlLHRoaXMpLEhlfSxCLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXt2YXIga2U9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4ga2UuZmxvd2luZ3x8KE4oInJlc3VtZSIpLGtl''@;'; put 'put ''LmZsb3dpbmc9IWtlLnJlYWRhYmxlTGlzdGVuaW5nLGZ1bmN0aW9uIFVlKGtlLEhlKXtIZS5yZXN1bWVTY2hlZHVsZWR8fChIZS5yZXN1bWVTY2hlZHVsZWQ9ITAscHJvY2Vzcy5uZXh0VGljayhKZSxrZSxIZSkpfSh0aGlzLGtlKSksa2UucGF1c2VkPSExLHRoaXN9LEIucHJvdG90eXBlLnBh''@;'; put 'put ''dXNlPWZ1bmN0aW9uKCl7cmV0dXJuIE4oImNhbGwgcGF1c2UgZmxvd2luZz0laiIsdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKSwhMSE9PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyYmKE4oInBhdXNlIiksdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPSExLHRoaXMuZW1pdCgi''@;'; put 'put ''cGF1c2UiKSksdGhpcy5fcmVhZGFibGVTdGF0ZS5wYXVzZWQ9ITAsdGhpc30sQi5wcm90b3R5cGUud3JhcD1mdW5jdGlvbihrZSl7dmFyIEhlPXRoaXMsTGU9dGhpcy5fcmVhZGFibGVTdGF0ZSxSZT0hMTtmb3IodmFyIFZlIGluIGtlLm9uKCJlbmQiLGZ1bmN0aW9uKCl7aWYoTigid3JhcHBl''@;'; put 'put ''ZCBlbmQiKSxMZS5kZWNvZGVyJiYhTGUuZW5kZWQpe3ZhciBEZT1MZS5kZWNvZGVyLmVuZCgpO0RlJiZEZS5sZW5ndGgmJkhlLnB1c2goRGUpfUhlLnB1c2gobnVsbCl9KSxrZS5vbigiZGF0YSIsZnVuY3Rpb24oRGUpe04oIndyYXBwZWQgZGF0YSIpLExlLmRlY29kZXImJihEZT1MZS5kZWNv''@;'; put 'put ''ZGVyLndyaXRlKERlKSksTGUub2JqZWN0TW9kZSYmbnVsbD09RGV8fCEoTGUub2JqZWN0TW9kZXx8RGUmJkRlLmxlbmd0aCl8fEhlLnB1c2goRGUpfHwoUmU9ITAsa2UucGF1c2UoKSl9KSxrZSl2b2lkIDA9PT10aGlzW1ZlXSYmImZ1bmN0aW9uIj09dHlwZW9mIGtlW1ZlXSYmKHRoaXNbVmVd''@;'; put 'put ''PWZ1bmN0aW9uKF90KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4ga2VbX3RdLmFwcGx5KGtlLGFyZ3VtZW50cyl9fShWZSkpO2Zvcih2YXIgQWU9MDtBZTxUZS5sZW5ndGg7QWUrKylrZS5vbihUZVtBZV0sdGhpcy5lbWl0LmJpbmQodGhpcyxUZVtBZV0pKTtyZXR1cm4gdGhpcy5fcmVhZD1m''@;'; put 'put ''dW5jdGlvbihEZSl7Tigid3JhcHBlZCBfcmVhZCIsRGUpLFJlJiYoUmU9ITEsa2UucmVzdW1lKCkpfSx0aGlzfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoQi5wcm90b3R5cGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXVlJiYodWU9Yigx''@;'; put 'put ''MjY4MykpLHVlKHRoaXMpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEIucHJvdG90eXBlLCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KEIucHJvdG90eXBlLCJyZWFkYWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLnByb3RvdHlwZSwicmVhZGFi''@;'; put 'put ''bGVGbG93aW5nIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxzZXQ6ZnVuY3Rpb24oSGUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9SGUpfX0pLEIuX2Zyb21MaXN0PXhl''@;'; put 'put ''LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLnByb3RvdHlwZSwicmVhZGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aH19KSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoQi5mcm9tPWZ1bmN0aW9uKGtl''@;'; put 'put ''LEhlKXtyZXR1cm4gdm9pZCAwPT09Z2UmJihnZT1iKDQ3NzY1KSksZ2UoQixrZSxIZSl9KX0sNjEwOTM6KCk9Pnt9LDYxODc5OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMzc3MzEpLF89Yig5NzU0MSkscD1iKDMwMzM5KSxWPWIoNDM2MzIpLHc9YigyMTkxMCksUD1iKDExMzgp''@;'; put 'put ''LEY9Xy5TZXQsUj1fLmFkZCx6PV8uaGFzO2NlLmV4cG9ydHM9ZnVuY3Rpb24oTyl7dmFyIEs9SSh0aGlzKSxaPVYoTyksWT1uZXcgRjtyZXR1cm4gcChLKT5aLnNpemU/UChaLmdldEl0ZXJhdG9yKCksZnVuY3Rpb24oVyl7eihLLFcpJiZSKFksVyl9KTp3KEssZnVuY3Rpb24oVyl7Wi5pbmNs''@;'; put 'put ''dWRlcyhXKSYmUihZLFcpfSksWX19LDYxODg1OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNjU5OTIpLF89Yig0Njc1OCkscD1iKDU5NzA1KSxWPWIoOTU3MzEpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oUCl7aWYoUC5sZW5ndGg8MXx8ImZ1bmN0aW9uIiE9dHlwZW9mIFBbMF0pdGhy''@;'; put 'put ''b3cgbmV3IF8oImEgZnVuY3Rpb24gaXMgcmVxdWlyZWQiKTtyZXR1cm4gVihJLHAsUCl9fSw2MTkzMTpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImVvIix7bW9udGhzOiJqYW51YXJvX2ZlYnJ1YXJvX21hcnRvX2Fwcmlsb19tYWpv''@;'; put 'put ''X2p1bmlvX2p1bGlvX2FcdTAxNmRndXN0b19zZXB0ZW1icm9fb2t0b2Jyb19ub3ZlbWJyb19kZWNlbWJybyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuX2ZlYl9tYXJ0X2Fwcl9tYWpfanVuX2p1bF9hXHUwMTZkZ19zZXB0X29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJk''@;'; put 'put ''aW1hblx1MDEwOW9fbHVuZG9fbWFyZG9fbWVya3JlZG9fXHUwMTM1YVx1MDE2ZGRvX3ZlbmRyZWRvX3NhYmF0byIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkaW1fbHVuX21hcmRfbWVya19cdTAxMzVhXHUwMTZkX3Zlbl9zYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRpX2x1X21h''@;'; put 'put ''X21lX1x1MDEzNWFfdmVfc2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS1NTS1ERCIsTEw6IltsYV0gRFstYW4gZGVdIE1NTU0sIFlZWVkiLExMTDoiW2xhXSBEWy1hbiBkZV0gTU1NTSwgWVlZWSBISDptbSIsTExMTDoiZGRk''@;'; put 'put ''ZFtuXSwgW2xhXSBEWy1hbiBkZV0gTU1NTSwgWVlZWSBISDptbSIsbGxsbDoiZGRkLCBbbGFdIERbLWFuIGRlXSBNTU0sIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9bYXBdXC50XC5tL2ksaXNQTTpmdW5jdGlvbihwKXtyZXR1cm4icCI9PT1wLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgp''@;'; put 'put ''fSxtZXJpZGllbTpmdW5jdGlvbihwLFYsdyl7cmV0dXJuIHA+MTE/dz8icC50Lm0uIjoiUC5ULk0uIjp3PyJhLnQubS4iOiJBLlQuTS4ifSxjYWxlbmRhcjp7c2FtZURheToiW0hvZGlhXHUwMTZkIGplXSBMVCIsbmV4dERheToiW01vcmdhXHUwMTZkIGplXSBMVCIsbmV4dFdlZWs6ImRkZGRb''@;'; put 'put ''biBqZV0gTFQiLGxhc3REYXk6IltIaWVyYVx1MDE2ZCBqZV0gTFQiLGxhc3RXZWVrOiJbcGFzaW50YW5dIGRkZGRbbiBqZV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InBvc3QgJXMiLHBhc3Q6ImFudGFcdTAxNmQgJXMiLHM6ImtlbGthaiBzZWt1bmRvaiIsc3M6''@;'; put 'put ''IiVkIHNla3VuZG9qIixtOiJ1bnUgbWludXRvIixtbToiJWQgbWludXRvaiIsaDoidW51IGhvcm8iLGhoOiIlZCBob3JvaiIsZDoidW51IHRhZ28iLGRkOiIlZCB0YWdvaiIsTToidW51IG1vbmF0byIsTU06IiVkIG1vbmF0b2oiLHk6InVudSBqYXJvIix5eToiJWQgamFyb2oifSxkYXlPZk1v''@;'; put 'put ''bnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9YS8sb3JkaW5hbDoiJWRhIix3ZWVrOntkb3c6MSxkb3k6N319KX0oYig5NzU4NikpfSw2MTkzNDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDI4MzY3KSxfPWIoOTYwNjIpO0koe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZv''@;'; put 'put ''cmNlZDohYig1MzUwNSkoImlzU3VwZXJzZXRPZiIsZnVuY3Rpb24odyl7cmV0dXJuIXd9KX0se2lzU3VwZXJzZXRPZjpffSl9LDYyMTIyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMzkyMTApLF89Yig3MTk5MykscD1iKDEwMjE5KSxWPWIoNjQxNjYpO2Z1bmN0aW9uIHcoRixS''@;'; put 'put ''KXtJLmVxdWFsKFIubGVuZ3RoLDI0LCJJbnZhbGlkIGtleSBsZW5ndGgiKTt2YXIgej1SLnNsaWNlKDAsOCksTj1SLnNsaWNlKDgsMTYpLE89Ui5zbGljZSgxNiwyNCk7dGhpcy5jaXBoZXJzPSJlbmNyeXB0Ij09PUY/W1YuY3JlYXRlKHt0eXBlOiJlbmNyeXB0IixrZXk6en0pLFYuY3JlYXRl''@;'; put 'put ''KHt0eXBlOiJkZWNyeXB0IixrZXk6Tn0pLFYuY3JlYXRlKHt0eXBlOiJlbmNyeXB0IixrZXk6T30pXTpbVi5jcmVhdGUoe3R5cGU6ImRlY3J5cHQiLGtleTpPfSksVi5jcmVhdGUoe3R5cGU6ImVuY3J5cHQiLGtleTpOfSksVi5jcmVhdGUoe3R5cGU6ImRlY3J5cHQiLGtleTp6fSldfWZ1bmN0''@;'; put 'put ''aW9uIFAoRil7cC5jYWxsKHRoaXMsRik7dmFyIFI9bmV3IHcodGhpcy50eXBlLHRoaXMub3B0aW9ucy5rZXkpO3RoaXMuX2VkZVN0YXRlPVJ9XyhQLHApLGNlLmV4cG9ydHM9UCxQLmNyZWF0ZT1mdW5jdGlvbihSKXtyZXR1cm4gbmV3IFAoUil9LFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rp''@;'; put 'put ''b24oUix6LE4sTyl7dmFyIEs9dGhpcy5fZWRlU3RhdGU7Sy5jaXBoZXJzWzBdLl91cGRhdGUoUix6LE4sTyksSy5jaXBoZXJzWzFdLl91cGRhdGUoTixPLE4sTyksSy5jaXBoZXJzWzJdLl91cGRhdGUoTixPLE4sTyl9LFAucHJvdG90eXBlLl9wYWQ9Vi5wcm90b3R5cGUuX3BhZCxQLnByb3Rv''@;'; put 'put ''dHlwZS5fdW5wYWQ9Vi5wcm90b3R5cGUuX3VucGFkfSw2Mjk1MTpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPUpTT04ucGFyc2UoJ3sic2hhMjI0V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IjMwMmQzMDBkMDYwOTYwODY0ODAxNjUw''@;'; put 'put ''MzA0MDIwNDA1MDAwNDFjIn0sIlJTQS1TSEEyMjQiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IjMwMmQzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwNDA1MDAwNDFjIn0sInNoYTI1NldpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hh''@;'; put 'put ''MjU2IiwiaWQiOiIzMDMxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDEwNTAwMDQyMCJ9LCJSU0EtU0hBMjU2Ijp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIzMDMxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDEwNTAwMDQyMCJ9LCJzaGEzODRXaXRoUlNBRW5j''@;'; put 'put ''cnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiMzA0MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAyMDUwMDA0MzAifSwiUlNBLVNIQTM4NCI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiMzA0MTMwMGQwNjA5NjA4NjQ4MDE2NTAz''@;'; put 'put ''MDQwMjAyMDUwMDA0MzAifSwic2hhNTEyV2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IjMwNTEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMzA1MDAwNDQwIn0sIlJTQS1TSEE1MTIiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGE1''@;'; put 'put ''MTIiLCJpZCI6IjMwNTEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMzA1MDAwNDQwIn0sIlJTQS1TSEExIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiMzAyMTMwMDkwNjA1MmIwZTAzMDIxYTA1MDAwNDE0In0sImVjZHNhLXdpdGgtU0hBMSI6eyJzaWduIjoiZWNkc2EiLCJo''@;'; put 'put ''YXNoIjoic2hhMSIsImlkIjoiIn0sInNoYTI1NiI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIifSwic2hhMjI0Ijp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IiJ9LCJzaGEzODQiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTM4NCIsImlk''@;'; put 'put ''IjoiIn0sInNoYTUxMiI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIifSwiRFNBLVNIQSI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJEU0EtU0hBMSI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJEU0EiOnsic2lnbiI6''@;'; put 'put ''ImRzYSIsImhhc2giOiJzaGExIiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBMjI0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIifSwiRFNBLVNIQTIyNCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTI1NiI6eyJzaWduIjoi''@;'; put 'put ''ZHNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiIn0sIkRTQS1TSEEyNTYiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEEzODQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IiJ9LCJEU0EtU0hBMzg0Ijp7InNpZ24iOiJkc2Ei''@;'; put 'put ''LCJoYXNoIjoic2hhMzg0IiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBNTEyIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIifSwiRFNBLVNIQTUxMiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiIn0sIkRTQS1SSVBFTUQxNjAiOnsic2lnbiI6ImRzYSIs''@;'; put 'put ''Imhhc2giOiJybWQxNjAiLCJpZCI6IiJ9LCJyaXBlbWQxNjBXaXRoUlNBIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoicm1kMTYwIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjI0MDMwMjAxMDUwMDA0MTQifSwiUlNBLVJJUEVNRDE2MCI6eyJzaWduIjoicnNhIiwiaGFzaCI6InJtZDE2MCIsImlkIjoi''@;'; put 'put ''MzAyMTMwMDkwNjA1MmIyNDAzMDIwMTA1MDAwNDE0In0sIm1kNVdpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoibWQ1IiwiaWQiOiIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjA1MDUwMDA0MTAifSwiUlNBLU1ENSI6eyJzaWduIjoicnNhIiwiaGFzaCI6Im1kNSIs''@;'; put 'put ''ImlkIjoiMzAyMDMwMGMwNjA4MmE4NjQ4ODZmNzBkMDIwNTA1MDAwNDEwIn19Jyl9LDYzMzM2OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNDY4KSxfPVR5cGVFcnJvcjtjZS5leHBvcnRzPWZ1bmN0aW9uKHAsVil7aWYoSShWLHApKXJldHVybiBwO3Rocm93IG5ldyBfKCJJbmNv''@;'; put 'put ''cnJlY3QgaW52b2NhdGlvbiIpfX0sNjMzNDk6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJ1Zy1jbiIse21vbnRoczoiXHUwNjRhXHUwNjI3XHUwNjQ2XHUwNmNiXHUwNjI3XHUwNjMxX1x1MDY0MVx1MDZkMFx1MDZjYlx1MDYzMVx1''@;'; put 'put ''MDYyN1x1MDY0NF9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MmFfXHUwNjI2XHUwNjI3XHUwNjdlXHUwNjMxXHUwNmQwXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2MjZcdTA2NDlcdTA2NGFcdTA2YzdcdTA2NDZfXHUwNjI2XHUwNjQ5XHUwNjRhXHUwNmM3XHUwNjQ0X1x1MDYyNlx1MDYy''@;'; put 'put ''N1x1MDZjYlx1MDYzYVx1MDZjN1x1MDYzM1x1MDYyYV9cdTA2MzNcdTA2ZDBcdTA2NDZcdTA2MmFcdTA2ZDVcdTA2MjhcdTA2NDlcdTA2MzFfXHUwNjI2XHUwNmM2XHUwNjQzXHUwNjJhXHUwNmQ1XHUwNjI4XHUwNjQ5XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0YVx1MDYyN1x1MDYyOFx1MDY0''@;'; put 'put ''OVx1MDYzMV9cdTA2MmZcdTA2ZDBcdTA2NDNcdTA2MjdcdTA2MjhcdTA2NDlcdTA2MzEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDY0YVx1MDYyN1x1MDY0Nlx1MDZjYlx1MDYyN1x1MDYzMV9cdTA2NDFcdTA2ZDBcdTA2Y2JcdTA2MzFcdTA2MjdcdTA2NDRfXHUwNjQ1XHUwNjI3XHUw''@;'; put 'put ''NjMxXHUwNjJhX1x1MDYyNlx1MDYyN1x1MDY3ZVx1MDYzMVx1MDZkMFx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUwNjI2XHUwNjQ5XHUwNjRhXHUwNmM3XHUwNjQ2X1x1MDYyNlx1MDY0OVx1MDY0YVx1MDZjN1x1MDY0NF9cdTA2MjZcdTA2MjdcdTA2Y2JcdTA2M2FcdTA2YzdcdTA2MzNc''@;'; put 'put ''dTA2MmFfXHUwNjMzXHUwNmQwXHUwNjQ2XHUwNjJhXHUwNmQ1XHUwNjI4XHUwNjQ5XHUwNjMxX1x1MDYyNlx1MDZjNlx1MDY0M1x1MDYyYVx1MDZkNVx1MDYyOFx1MDY0OVx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NGFcdTA2MjdcdTA2MjhcdTA2NDlcdTA2MzFfXHUwNjJmXHUwNmQwXHUwNjQz''@;'; put 'put ''XHUwNjI3XHUwNjI4XHUwNjQ5XHUwNjMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA2NGFcdTA2ZDVcdTA2NDNcdTA2MzRcdTA2ZDVcdTA2NDZcdTA2MjhcdTA2ZDVfXHUwNjJmXHUwNmM4XHUwNjM0XHUwNmQ1XHUwNjQ2XHUwNjI4XHUwNmQ1X1x1MDYzM1x1MDZkNVx1MDY0YVx1MDYzNFx1''@;'; put 'put ''MDZkNVx1MDY0Nlx1MDYyOFx1MDZkNV9cdTA2ODZcdTA2MjdcdTA2MzFcdTA2MzRcdTA2ZDVcdTA2NDZcdTA2MjhcdTA2ZDVfXHUwNjdlXHUwNmQ1XHUwNjRhXHUwNjM0XHUwNmQ1XHUwNjQ2XHUwNjI4XHUwNmQ1X1x1MDYyY1x1MDZjOFx1MDY0NVx1MDZkNV9cdTA2MzRcdTA2ZDVcdTA2NDZc''@;'; put 'put ''dTA2MjhcdTA2ZDUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjRhXHUwNmQ1X1x1MDYyZlx1MDZjOF9cdTA2MzNcdTA2ZDVfXHUwNjg2XHUwNjI3X1x1MDY3ZVx1MDZkNV9cdTA2MmNcdTA2YzhfXHUwNjM0XHUwNmQ1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2NGFcdTA2''@;'; put 'put ''ZDVfXHUwNjJmXHUwNmM4X1x1MDYzM1x1MDZkNV9cdTA2ODZcdTA2MjdfXHUwNjdlXHUwNmQ1X1x1MDYyY1x1MDZjOF9cdTA2MzRcdTA2ZDUiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS1NTS1ERCIsTEw6IllZWVktXHUwNjRh''@;'; put 'put ''XHUwNjQ5XHUwNjQ0XHUwNjQ5TS1cdTA2MjZcdTA2MjdcdTA2NGFcdTA2NDZcdTA2NDlcdTA2YWRELVx1MDY0M1x1MDZjOFx1MDY0Nlx1MDY0OSIsTExMOiJZWVlZLVx1MDY0YVx1MDY0OVx1MDY0NFx1MDY0OU0tXHUwNjI2XHUwNjI3XHUwNjRhXHUwNjQ2XHUwNjQ5XHUwNmFkRC1cdTA2NDNc''@;'; put 'put ''dTA2YzhcdTA2NDZcdTA2NDlcdTA2MGMgSEg6bW0iLExMTEw6ImRkZGRcdTA2MGMgWVlZWS1cdTA2NGFcdTA2NDlcdTA2NDRcdTA2NDlNLVx1MDYyNlx1MDYyN1x1MDY0YVx1MDY0Nlx1MDY0OVx1MDZhZEQtXHUwNjQzXHUwNmM4XHUwNjQ2XHUwNjQ5XHUwNjBjIEhIOm1tIn0sbWVyaWRpZW1Q''@;'; put 'put ''YXJzZTovXHUwNjRhXHUwNmQwXHUwNjMxXHUwNjQ5XHUwNjQ1IFx1MDY0M1x1MDZkMFx1MDY4Nlx1MDZkNXxcdTA2MzNcdTA2ZDVcdTA2YmVcdTA2ZDVcdTA2MzF8XHUwNjg2XHUwNmM4XHUwNjM0XHUwNjJhXHUwNjQ5XHUwNjQ2IFx1MDYyOFx1MDZjN1x1MDYzMVx1MDZjN1x1MDY0NnxcdTA2''@;'; put 'put ''ODZcdTA2YzhcdTA2MzR8XHUwNjg2XHUwNmM4XHUwNjM0XHUwNjJhXHUwNjQ5XHUwNjQ2IFx1MDY0M1x1MDZkMFx1MDY0YVx1MDY0OVx1MDY0NnxcdTA2NDNcdTA2ZDVcdTA2ODYvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihwLFYpe3JldHVybiAxMj09PXAmJihwPTApLCJcdTA2NGFcdTA2ZDBc''@;'; put 'put ''dTA2MzFcdTA2NDlcdTA2NDUgXHUwNjQzXHUwNmQwXHUwNjg2XHUwNmQ1Ij09PVZ8fCJcdTA2MzNcdTA2ZDVcdTA2YmVcdTA2ZDVcdTA2MzEiPT09Vnx8Ilx1MDY4Nlx1MDZjOFx1MDYzNFx1MDYyYVx1MDY0OVx1MDY0NiBcdTA2MjhcdTA2YzdcdTA2MzFcdTA2YzdcdTA2NDYiPT09Vj9wOiJc''@;'; put 'put ''dTA2ODZcdTA2YzhcdTA2MzRcdTA2MmFcdTA2NDlcdTA2NDYgXHUwNjQzXHUwNmQwXHUwNjRhXHUwNjQ5XHUwNjQ2Ij09PVZ8fCJcdTA2NDNcdTA2ZDVcdTA2ODYiPT09Vj9wKzEyOnA+PTExP3A6cCsxMn0sbWVyaWRpZW06ZnVuY3Rpb24ocCxWLHcpe3ZhciBQPTEwMCpwK1Y7cmV0dXJuIFA8''@;'; put 'put ''NjAwPyJcdTA2NGFcdTA2ZDBcdTA2MzFcdTA2NDlcdTA2NDUgXHUwNjQzXHUwNmQwXHUwNjg2XHUwNmQ1IjpQPDkwMD8iXHUwNjMzXHUwNmQ1XHUwNmJlXHUwNmQ1XHUwNjMxIjpQPDExMzA/Ilx1MDY4Nlx1MDZjOFx1MDYzNFx1MDYyYVx1MDY0OVx1MDY0NiBcdTA2MjhcdTA2YzdcdTA2MzFc''@;'; put 'put ''dTA2YzdcdTA2NDYiOlA8MTIzMD8iXHUwNjg2XHUwNmM4XHUwNjM0IjpQPDE4MDA/Ilx1MDY4Nlx1MDZjOFx1MDYzNFx1MDYyYVx1MDY0OVx1MDY0NiBcdTA2NDNcdTA2ZDBcdTA2NGFcdTA2NDlcdTA2NDYiOiJcdTA2NDNcdTA2ZDVcdTA2ODYifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYy''@;'; put 'put ''OFx1MDZjOFx1MDZhZlx1MDZjOFx1MDY0NiBcdTA2MzNcdTA2MjdcdTA2MjZcdTA2ZDVcdTA2MmFdIExUIixuZXh0RGF5OiJbXHUwNjI2XHUwNmQ1XHUwNjJhXHUwNmQ1IFx1MDYzM1x1MDYyN1x1MDYyNlx1MDZkNVx1MDYyYV0gTFQiLG5leHRXZWVrOiJbXHUwNjQzXHUwNmQwXHUwNjQ0XHUw''@;'; put 'put ''NmQ1XHUwNjMxXHUwNjQzXHUwNjQ5XSBkZGRkIFtcdTA2MzNcdTA2MjdcdTA2MjZcdTA2ZDVcdTA2MmFdIExUIixsYXN0RGF5OiJbXHUwNjJhXHUwNmM2XHUwNjQ2XHUwNmM4XHUwNmFmXHUwNmM4XHUwNjQ2XSBMVCIsbGFzdFdlZWs6IltcdTA2MjZcdTA2MjdcdTA2NDRcdTA2MmZcdTA2NDlc''@;'; put 'put ''dTA2NDZcdTA2NDJcdTA2NDldIGRkZGQgW1x1MDYzM1x1MDYyN1x1MDYyNlx1MDZkNVx1MDYyYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDY0M1x1MDZkMFx1MDY0YVx1MDY0OVx1MDY0NiIscGFzdDoiJXMgXHUwNjI4XHUwNmM3XHUwNjMxXHUwNmM3''@;'; put 'put ''XHUwNjQ2IixzOiJcdTA2NDZcdTA2ZDVcdTA2ODZcdTA2ODZcdTA2ZDUgXHUwNjMzXHUwNmQwXHUwNjQzXHUwNjQ4XHUwNjQ2XHUwNjJhIixzczoiJWQgXHUwNjMzXHUwNmQwXHUwNjQzXHUwNjQ4XHUwNjQ2XHUwNjJhIixtOiJcdTA2MjhcdTA2NDlcdTA2MzEgXHUwNjQ1XHUwNjQ5XHUwNjQ2''@;'; put 'put ''XHUwNmM3XHUwNjJhIixtbToiJWQgXHUwNjQ1XHUwNjQ5XHUwNjQ2XHUwNmM3XHUwNjJhIixoOiJcdTA2MjhcdTA2NDlcdTA2MzEgXHUwNjMzXHUwNjI3XHUwNjI2XHUwNmQ1XHUwNjJhIixoaDoiJWQgXHUwNjMzXHUwNjI3XHUwNjI2XHUwNmQ1XHUwNjJhIixkOiJcdTA2MjhcdTA2NDlcdTA2''@;'; put 'put ''MzEgXHUwNjQzXHUwNmM4XHUwNjQ2IixkZDoiJWQgXHUwNjQzXHUwNmM4XHUwNjQ2IixNOiJcdTA2MjhcdTA2NDlcdTA2MzEgXHUwNjI2XHUwNjI3XHUwNjRhIixNTToiJWQgXHUwNjI2XHUwNjI3XHUwNjRhIix5OiJcdTA2MjhcdTA2NDlcdTA2MzEgXHUwNjRhXHUwNjQ5XHUwNjQ0Iix5eToi''@;'; put 'put ''JWQgXHUwNjRhXHUwNjQ5XHUwNjQ0In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfSgtXHUwNjQzXHUwNmM4XHUwNjQ2XHUwNjQ5fC1cdTA2MjZcdTA2MjdcdTA2NGF8LVx1MDZiZVx1MDZkNVx1MDY3ZVx1MDYyYVx1MDZkNSkvLG9yZGluYWw6ZnVuY3Rpb24ocCxWKXtzd2l0Y2go''@;'; put 'put ''Vil7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gcCsiLVx1MDY0M1x1MDZjOFx1MDY0Nlx1MDY0OSI7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBwKyItXHUwNmJlXHUwNmQ1XHUwNjdlXHUwNjJhXHUwNmQ1IjtkZWZhdWx0OnJldHVybiBwfX0scHJlcGFyc2U6ZnVuY3Rpb24ocCl7''@;'; put 'put ''cmV0dXJuIHAucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihwKXtyZXR1cm4gcC5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6MSxkb3k6N319KX0oYig5NzU4NikpfSw2MzM2MTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgcCxJPWIoNjE4''@;'; put 'put ''ODUpLF89Yig4Mzc5OCk7dHJ5e3A9W10uX19wcm90b19fPT09QXJyYXkucHJvdG90eXBlfWNhdGNoKEYpe2lmKCFGfHwib2JqZWN0IiE9dHlwZW9mIEZ8fCEoImNvZGUiaW4gRil8fCJFUlJfUFJPVE9fQUNDRVNTIiE9PUYuY29kZSl0aHJvdyBGfXZhciBWPSEhcCYmXyYmXyhPYmplY3QucHJv''@;'; put 'put ''dG90eXBlLCJfX3Byb3RvX18iKSx3PU9iamVjdCxQPXcuZ2V0UHJvdG90eXBlT2Y7Y2UuZXhwb3J0cz1WJiYiZnVuY3Rpb24iPT10eXBlb2YgVi5nZXQ/SShbVi5nZXRdKToiZnVuY3Rpb24iPT10eXBlb2YgUCYmZnVuY3Rpb24oUil7cmV0dXJuIFAobnVsbD09Uj9SOncoUikpfX0sNjM1Nzg6''@;'; put 'put ''KGNlLFgsYik9PnshZnVuY3Rpb24gXyh3KXt3LnZlcnNpb249IjEuMjAyMTExMjIuMSI7dmFyIFA9MTIwMCxGPTEyNTI7dHlwZW9mIGNwdGFibGU+InUiJiYodHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsLmNwdGFibGU9Yig0MjkyNCk6dHlwZW9mIHdpbmRvdzwidSImJih3aW5kb3cuY3B0YWJs''@;'; put 'put ''ZT1iKDQyOTI0KSkpO2Zvcih2YXIgUj1bODc0LDkzMiw5MzYsOTQ5LDk1MCwxZTRdLHo9MDt6PD04OysreilSLnB1c2goMTI1MCt6KTt2YXIgTj17MDoxMjUyLDE6NjUwMDEsMjo2NTAwMSw3NzoxZTQsMTI4OjkzMiwxMjk6OTQ5LDEzMDoxMzYxLDEzNDo5MzYsMTM2Ojk1MCwxNjE6MTI1Mywx''@;'; put 'put ''NjI6MTI1NCwxNjM6MTI1OCwxNzc6MTI1NSwxNzg6MTI1NiwxODY6MTI1NywyMDQ6MTI1MSwyMjI6ODc0LDIzODoxMjUwLDI1NToxMjUyLDY5OjY5Njl9LE89ZnVuY3Rpb24oUyl7LTEhPVIuaW5kZXhPZihTKSYmKEY9TlswXT1TKX0sWj1mdW5jdGlvbihTKXtQPVMsTyhTKX07ZnVuY3Rpb24g''@;'; put 'put ''WSgpe1ooMTIwMCksZnVuY3Rpb24gSygpe08oMTI1Mil9KCl9ZnVuY3Rpb24gVyhTKXtmb3IodmFyIEw9W10saz0wLEc9Uy5sZW5ndGg7azxHOysraylMW2tdPVMuY2hhckNvZGVBdChrKTtyZXR1cm4gTH12YXIgSj1mdW5jdGlvbihTKXt2YXIgTD1TLmNoYXJDb2RlQXQoMCksaz1TLmNoYXJD''@;'; put 'put ''b2RlQXQoMSk7cmV0dXJuIDI1NT09TCYmMjU0PT1rP2Z1bmN0aW9uIHEoUyl7Zm9yKHZhciBMPVtdLGs9MDtrPFMubGVuZ3RoPj4xOysraylMW2tdPVN0cmluZy5mcm9tQ2hhckNvZGUoUy5jaGFyQ29kZUF0KDIqaykrKFMuY2hhckNvZGVBdCgyKmsrMSk8PDgpKTtyZXR1cm4gTC5qb2luKCIi''@;'; put 'put ''KX0oUy5zbGljZSgyKSk6MjU0PT1MJiYyNTU9PWs/ZnVuY3Rpb24gZWUoUyl7Zm9yKHZhciBMPVtdLGs9MDtrPFMubGVuZ3RoPj4xOysraylMW2tdPVN0cmluZy5mcm9tQ2hhckNvZGUoUy5jaGFyQ29kZUF0KDIqaysxKSsoUy5jaGFyQ29kZUF0KDIqayk8PDgpKTtyZXR1cm4gTC5qb2luKCIi''@;'; put 'put ''KX0oUy5zbGljZSgyKSk6NjUyNzk9PUw/Uy5zbGljZSgxKTpTfSxyZT1mdW5jdGlvbihMKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShMKX0saWU9ZnVuY3Rpb24oTCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoTCl9O3R5cGVvZiBjcHRhYmxlPCJ1IiYmKFo9ZnVuY3Rpb24oUyl7''@;'; put 'put ''UD1TLE8oUyl9LEo9ZnVuY3Rpb24oUyl7cmV0dXJuIDI1NT09PVMuY2hhckNvZGVBdCgwKSYmMjU0PT09Uy5jaGFyQ29kZUF0KDEpP2NwdGFibGUudXRpbHMuZGVjb2RlKDEyMDAsVyhTLnNsaWNlKDIpKSk6U30scmU9ZnVuY3Rpb24oTCl7cmV0dXJuIDEyMDA9PT1QP1N0cmluZy5mcm9tQ2hh''@;'; put 'put ''ckNvZGUoTCk6Y3B0YWJsZS51dGlscy5kZWNvZGUoUCxbMjU1JkwsTD4+OF0pWzBdfSxpZT1mdW5jdGlvbihMKXtyZXR1cm4gY3B0YWJsZS51dGlscy5kZWNvZGUoRixbTF0pWzBdfSk7dmFyIF9lPWZ1bmN0aW9uKCl7dmFyIEw9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hp''@;'; put 'put ''amtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89IjtyZXR1cm57ZW5jb2RlOmZ1bmN0aW9uKGspe2Zvcih2YXIgRz0iIixRPTAsbGU9MCxtZT0wLHBlPTAsYmU9MCxOZT0wLEJlPTAsR2U9MDtHZTxrLmxlbmd0aDspcGU9KFE9ay5jaGFyQ29kZUF0KEdlKyspKT4+MixiZT0oMyZRKTw8NHwo''@;'; put 'put ''bGU9ay5jaGFyQ29kZUF0KEdlKyspKT4+NCxOZT0oMTUmbGUpPDwyfChtZT1rLmNoYXJDb2RlQXQoR2UrKykpPj42LEJlPTYzJm1lLGlzTmFOKGxlKT9OZT1CZT02NDppc05hTihtZSkmJihCZT02NCksRys9TC5jaGFyQXQocGUpK0wuY2hhckF0KGJlKStMLmNoYXJBdChOZSkrTC5jaGFyQXQo''@;'; put 'put ''QmUpO3JldHVybiBHfSxkZWNvZGU6ZnVuY3Rpb24oRyl7dmFyIFE9IiIsYmU9MCxOZT0wLEJlPTAsR2U9MDtHPUcucmVwbGFjZSgvW15cd1wrXC9cPV0vZywiIik7Zm9yKHZhciBldD0wO2V0PEcubGVuZ3RoOyliZT1MLmluZGV4T2YoRy5jaGFyQXQoZXQrKykpLE5lPUwuaW5kZXhPZihHLmNo''@;'; put 'put ''YXJBdChldCsrKSksUSs9U3RyaW5nLmZyb21DaGFyQ29kZShiZTw8MnxOZT4+NCksNjQhPT0oQmU9TC5pbmRleE9mKEcuY2hhckF0KGV0KyspKSkmJihRKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgxNSZOZSk8PDR8QmU+PjIpKSw2NCE9PShHZT1MLmluZGV4T2YoRy5jaGFyQXQoZXQrKykpKSYm''@;'; put 'put ''KFErPVN0cmluZy5mcm9tQ2hhckNvZGUoKDMmQmUpPDw2fEdlKSk7cmV0dXJuIFF9fX0oKSxUZT10eXBlb2YgQnVmZmVyPCJ1IiYmdHlwZW9mIHByb2Nlc3M8InUiJiZ0eXBlb2YgcHJvY2Vzcy52ZXJzaW9uczwidSImJiEhcHJvY2Vzcy52ZXJzaW9ucy5ub2RlLE1lPWZ1bmN0aW9uKCl7fTtp''@;'; put 'put ''Zih0eXBlb2YgQnVmZmVyPCJ1Iil7dmFyIFplPSFCdWZmZXIuZnJvbTtpZighWmUpdHJ5e0J1ZmZlci5mcm9tKCJmb28iLCJ1dGY4Iil9Y2F0Y2h7WmU9ITB9TWU9WmU/ZnVuY3Rpb24oUyxMKXtyZXR1cm4gTD9uZXcgQnVmZmVyKFMsTCk6bmV3IEJ1ZmZlcihTKX06QnVmZmVyLmZyb20uYmlu''@;'; put 'put ''ZChCdWZmZXIpLEJ1ZmZlci5hbGxvY3x8KEJ1ZmZlci5hbGxvYz1mdW5jdGlvbihTKXtyZXR1cm4gbmV3IEJ1ZmZlcihTKX0pLEJ1ZmZlci5hbGxvY1Vuc2FmZXx8KEJ1ZmZlci5hbGxvY1Vuc2FmZT1mdW5jdGlvbihTKXtyZXR1cm4gbmV3IEJ1ZmZlcihTKX0pfWZ1bmN0aW9uIEIoUyl7cmV0''@;'; put 'put ''dXJuIFRlP0J1ZmZlci5hbGxvYyhTKTpuZXcgQXJyYXkoUyl9ZnVuY3Rpb24gZyhTKXtyZXR1cm4gVGU/QnVmZmVyLmFsbG9jVW5zYWZlKFMpOm5ldyBBcnJheShTKX12YXIgeT1mdW5jdGlvbihMKXtyZXR1cm4gVGU/TWUoTCwiYmluYXJ5Iik6TC5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKGsp''@;'; put 'put ''e3JldHVybiAyNTUmay5jaGFyQ29kZUF0KDApfSl9O2Z1bmN0aW9uIHgoUyl7aWYodHlwZW9mIEFycmF5QnVmZmVyPiJ1IilyZXR1cm4geShTKTtmb3IodmFyIEw9bmV3IEFycmF5QnVmZmVyKFMubGVuZ3RoKSxrPW5ldyBVaW50OEFycmF5KEwpLEc9MDtHIT1TLmxlbmd0aDsrK0cpa1tHXT0y''@;'; put 'put ''NTUmUy5jaGFyQ29kZUF0KEcpO3JldHVybiBMfWZ1bmN0aW9uIEMoUyl7aWYoQXJyYXkuaXNBcnJheShTKSlyZXR1cm4gUy5tYXAoZnVuY3Rpb24oRyl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoRyl9KS5qb2luKCIiKTtmb3IodmFyIEw9W10saz0wO2s8Uy5sZW5ndGg7KytrKUxba109''@;'; put 'put ''U3RyaW5nLmZyb21DaGFyQ29kZShTW2tdKTtyZXR1cm4gTC5qb2luKCIiKX1mdW5jdGlvbiBIKFMpe2lmKHR5cGVvZiBBcnJheUJ1ZmZlcj4idSIpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCIpO2lmKFMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilyZXR1cm4gSChuZXcgVWludDhBcnJh''@;'; put 'put ''eShTKSk7Zm9yKHZhciBMPW5ldyBBcnJheShTLmxlbmd0aCksaz0wO2s8Uy5sZW5ndGg7KytrKUxba109U1trXTtyZXR1cm4gTH12YXIgaj1mdW5jdGlvbihTKXt2YXIgTD1bXTtyZXR1cm4gUy5mb3JFYWNoKGZ1bmN0aW9uKGspe0FycmF5LmlzQXJyYXkoayk/TD1MLmNvbmNhdChrKToodHlw''@;'; put 'put ''ZW9mIFVpbnQ4QXJyYXk8InUiJiZrIGluc3RhbmNlb2YgVWludDhBcnJheXx8dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmayBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSYmKEw9TC5jb25jYXQoSChrKSkpfSksTH0sRT0vXHUwMDAwL2csbT0vW1x1MDAwMS1cdTAwMDZdL2csQT17fSxhZT1mdW5j''@;'; put 'put ''dGlvbihMKXtmdW5jdGlvbiBrKGNuKXtmb3IodmFyIEFuPSIiLEduPWNuLmxlbmd0aC0xO0duPj0wOylBbis9Y24uY2hhckF0KEduLS0pO3JldHVybiBBbn1mdW5jdGlvbiBHKGNuLEFuKXtmb3IodmFyIEduPSIiO0duLmxlbmd0aDxBbjspR24rPWNuO3JldHVybiBHbn1mdW5jdGlvbiBRKGNu''@;'; put 'put ''LEFuKXt2YXIgR249IiIrY247cmV0dXJuIEduLmxlbmd0aD49QW4/R246RygiMCIsQW4tR24ubGVuZ3RoKStHbn1mdW5jdGlvbiBsZShjbixBbil7dmFyIEduPSIiK2NuO3JldHVybiBHbi5sZW5ndGg+PUFuP0duOkcoIiAiLEFuLUduLmxlbmd0aCkrR259ZnVuY3Rpb24gbWUoY24sQW4pe3Zh''@;'; put 'put ''ciBHbj0iIitjbjtyZXR1cm4gR24ubGVuZ3RoPj1Bbj9HbjpHbitHKCIgIixBbi1Hbi5sZW5ndGgpfUwudmVyc2lvbj0iMS4yMDIxMDcyNi4xIjt2YXIgTmU9TWF0aC5wb3coMiwzMik7ZnVuY3Rpb24gQmUoY24sQW4pe3JldHVybiBjbj5OZXx8Y248LU5lP2Z1bmN0aW9uIHBlKGNuLEFuKXt2''@;'; put 'put ''YXIgR249IiIrTWF0aC5yb3VuZChjbik7cmV0dXJuIEduLmxlbmd0aD49QW4/R246RygiMCIsQW4tR24ubGVuZ3RoKStHbn0oY24sQW4pOmZ1bmN0aW9uIGJlKGNuLEFuKXt2YXIgR249IiIrY247cmV0dXJuIEduLmxlbmd0aD49QW4/R246RygiMCIsQW4tR24ubGVuZ3RoKStHbn0oTWF0aC5y''@;'; put 'put ''b3VuZChjbiksQW4pfWZ1bmN0aW9uIEdlKGNuLEFuKXtyZXR1cm4gY24ubGVuZ3RoPj03KyhBbj1Bbnx8MCkmJjEwMz09KDMyfGNuLmNoYXJDb2RlQXQoQW4pKSYmMTAxPT0oMzJ8Y24uY2hhckNvZGVBdChBbisxKSkmJjExMD09KDMyfGNuLmNoYXJDb2RlQXQoQW4rMikpJiYxMDE9PSgzMnxj''@;'; put 'put ''bi5jaGFyQ29kZUF0KEFuKzMpKSYmMTE0PT0oMzJ8Y24uY2hhckNvZGVBdChBbis0KSkmJjk3PT0oMzJ8Y24uY2hhckNvZGVBdChBbis1KSkmJjEwOD09KDMyfGNuLmNoYXJDb2RlQXQoQW4rNikpfWZ1bmN0aW9uIGV0KGNuKXtmb3IodmFyIEFuPVtdLEduPU9iamVjdC5rZXlzKGNuKSxBaT0w''@;'; put 'put ''O0FpIT09R24ubGVuZ3RoOysrQWkpQW5bY25bR25bQWldXV09R25bQWldO3JldHVybiBBbn12YXIgY3Q9W1siU3VuIiwiU3VuZGF5Il0sWyJNb24iLCJNb25kYXkiXSxbIlR1ZSIsIlR1ZXNkYXkiXSxbIldlZCIsIldlZG5lc2RheSJdLFsiVGh1IiwiVGh1cnNkYXkiXSxbIkZyaSIsIkZyaWRh''@;'; put 'put ''eSJdLFsiU2F0IiwiU2F0dXJkYXkiXV0seHQ9W1siSiIsIkphbiIsIkphbnVhcnkiXSxbIkYiLCJGZWIiLCJGZWJydWFyeSJdLFsiTSIsIk1hciIsIk1hcmNoIl0sWyJBIiwiQXByIiwiQXByaWwiXSxbIk0iLCJNYXkiLCJNYXkiXSxbIkoiLCJKdW4iLCJKdW5lIl0sWyJKIiwiSnVsIiwiSnVs''@;'; put 'put ''eSJdLFsiQSIsIkF1ZyIsIkF1Z3VzdCJdLFsiUyIsIlNlcCIsIlNlcHRlbWJlciJdLFsiTyIsIk9jdCIsIk9jdG9iZXIiXSxbIk4iLCJOb3YiLCJOb3ZlbWJlciJdLFsiRCIsIkRlYyIsIkRlY2VtYmVyIl1dO2Z1bmN0aW9uIG90KGNuKXtjblswXT0iR2VuZXJhbCIsY25bMV09IjAiLGNuWzJd''@;'; put 'put ''PSIwLjAwIixjblszXT0iIywjIzAiLGNuWzRdPSIjLCMjMC4wMCIsY25bOV09IjAlIixjblsxMF09IjAuMDAlIixjblsxMV09IjAuMDBFKzAwIixjblsxMl09IiMgPy8/IixjblsxM109IiMgPz8vPz8iLGNuWzE0XT0ibS9kL3l5IixjblsxNV09ImQtbW1tLXl5IixjblsxNl09ImQtbW1tIixj''@;'; put 'put ''blsxN109Im1tbS15eSIsY25bMThdPSJoOm1tIEFNL1BNIixjblsxOV09Img6bW06c3MgQU0vUE0iLGNuWzIwXT0iaDptbSIsY25bMjFdPSJoOm1tOnNzIixjblsyMl09Im0vZC95eSBoOm1tIixjblszN109IiMsIyMwIDsoIywjIzApIixjblszOF09IiMsIyMwIDtbUmVkXSgjLCMjMCkiLGNu''@;'; put 'put ''WzM5XT0iIywjIzAuMDA7KCMsIyMwLjAwKSIsY25bNDBdPSIjLCMjMC4wMDtbUmVkXSgjLCMjMC4wMCkiLGNuWzQ1XT0ibW06c3MiLGNuWzQ2XT0iW2hdOm1tOnNzIixjbls0N109Im1tc3MuMCIsY25bNDhdPSIjIzAuMEUrMCIsY25bNDldPSJAIixjbls1Nl09JyJcdTRlMGFcdTUzNDgvXHU0''@;'; put 'put ''ZTBiXHU1MzQ4ICJoaCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiAiJyxWbihjbil9dmFyIGJ0PXt9O290KGJ0KTt2YXIgRnQ9W10sa3Q9MDtmb3Ioa3Q9NTtrdDw9ODsrK2t0KUZ0W2t0XT0zMitrdDtmb3Ioa3Q9MjM7a3Q8PTI2Oysra3QpRnRba3RdPTA7Zm9yKGt0PTI3O2t0PD0zMTsr''@;'; put 'put ''K2t0KUZ0W2t0XT0xNDtmb3Ioa3Q9NTA7a3Q8PTU4Oysra3QpRnRba3RdPTE0O2ZvcihrdD01OTtrdDw9NjI7KytrdClGdFtrdF09a3QtNTg7Zm9yKGt0PTY3O2t0PD02ODsrK2t0KUZ0W2t0XT1rdC01ODtmb3Ioa3Q9NzI7a3Q8PTc1Oysra3QpRnRba3RdPWt0LTU4O2ZvcihrdD02NztrdDw9''@;'; put 'put ''Njg7KytrdClGdFtrdF09a3QtNTc7Zm9yKGt0PTc2O2t0PD03ODsrK2t0KUZ0W2t0XT1rdC01Njtmb3Ioa3Q9Nzk7a3Q8PTgxOysra3QpRnRba3RdPWt0LTM0O3ZhciBMdD1bXTtmdW5jdGlvbiBKdChjbixBbixHbil7Zm9yKHZhciBBaT1jbjwwPy0xOjEsaHI9Y24qQWksT2k9MCxTcj0xLFBp''@;'; put 'put ''PTAsSmE9MSxEaT0wLGRhPTAsSWk9TWF0aC5mbG9vcihocik7RGk8QW4mJihQaT0oSWk9TWF0aC5mbG9vcihocikpKlNyK09pLGRhPUlpKkRpK0phLCEoaHItSWk8NWUtOCkpOylocj0xLyhoci1JaSksT2k9U3IsU3I9UGksSmE9RGksRGk9ZGE7aWYoZGE+QW4mJihEaT5Bbj8oZGE9SmEsUGk9''@;'; put 'put ''T2kpOihkYT1EaSxQaT1TcikpLCFHbilyZXR1cm5bMCxBaSpQaSxkYV07dmFyIFJzPU1hdGguZmxvb3IoQWkqUGkvZGEpO3JldHVybltScyxBaSpQaS1ScypkYSxkYV19ZnVuY3Rpb24gVG4oY24sQW4sR24pe2lmKGNuPjI5NTg0NjV8fGNuPDApcmV0dXJuIG51bGw7dmFyIEFpPTB8Y24saHI9''@;'; put 'put ''TWF0aC5mbG9vcig4NjQwMCooY24tQWkpKSxPaT0wLFNyPVtdLFBpPXtEOkFpLFQ6aHIsdTo4NjQwMCooY24tQWkpLWhyLHk6MCxtOjAsZDowLEg6MCxNOjAsUzowLHE6MH07aWYoTWF0aC5hYnMoUGkudSk8MWUtNiYmKFBpLnU9MCksQW4mJkFuLmRhdGUxOTA0JiYoQWkrPTE0NjIpLFBpLnU+''@;'; put 'put ''Ljk5OTkmJihQaS51PTAsODY0MDA9PSsraHImJihQaS5UPWhyPTAsKytBaSwrK1BpLkQpKSw2MD09PUFpKVNyPUduP1sxMzE3LDEwLDI5XTpbMTkwMCwyLDI5XSxPaT0zO2Vsc2UgaWYoMD09PUFpKVNyPUduP1sxMzE3LDgsMjldOlsxOTAwLDEsMF0sT2k9NjtlbHNle0FpPjYwJiYtLUFpO3Zh''@;'; put 'put ''ciBKYT1uZXcgRGF0ZSgxOTAwLDAsMSk7SmEuc2V0RGF0ZShKYS5nZXREYXRlKCkrQWktMSksU3I9W0phLmdldEZ1bGxZZWFyKCksSmEuZ2V0TW9udGgoKSsxLEphLmdldERhdGUoKV0sT2k9SmEuZ2V0RGF5KCksQWk8NjAmJihPaT0oT2krNiklNyksR24mJihPaT1mdW5jdGlvbiBmbyhjbixB''@;'; put 'put ''bil7QW5bMF0tPTU4MTt2YXIgR249Y24uZ2V0RGF5KCk7cmV0dXJuIGNuPDYwJiYoR249KEduKzYpJTcpLEdufShKYSxTcikpfXJldHVybiBQaS55PVNyWzBdLFBpLm09U3JbMV0sUGkuZD1TclsyXSxQaS5TPWhyJTYwLGhyPU1hdGguZmxvb3IoaHIvNjApLFBpLk09aHIlNjAsaHI9TWF0aC5m''@;'; put 'put ''bG9vcihoci82MCksUGkuSD1ocixQaS5xPU9pLFBpfUx0WzVdPUx0WzYzXT0nIiQiIywjIzBfKTtcXCgiJCIjLCMjMFxcKScsTHRbNl09THRbNjRdPSciJCIjLCMjMF8pO1tSZWRdXFwoIiQiIywjIzBcXCknLEx0WzddPUx0WzY1XT0nIiQiIywjIzAuMDBfKTtcXCgiJCIjLCMjMC4wMFxcKScs''@;'; put 'put ''THRbOF09THRbNjZdPSciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLEx0WzQxXT0nXygqICMsIyMwXyk7XygqIFxcKCMsIyMwXFwpO18oKiAiLSJfKTtfKEBfKScsTHRbNDJdPSdfKCIkIiogIywjIzBfKTtfKCIkIiogXFwoIywjIzBcXCk7XygiJCIqICItIl8pO18oQF8p''@;'; put 'put ''JyxMdFs0M109J18oKiAjLCMjMC4wMF8pO18oKiBcXCgjLCMjMC4wMFxcKTtfKCogIi0iPz9fKTtfKEBfKScsTHRbNDRdPSdfKCIkIiogIywjIzAuMDBfKTtfKCIkIiogXFwoIywjIzAuMDBcXCk7XygiJCIqICItIj8/Xyk7XyhAXyknLEwucGFyc2VfZGF0ZV9jb2RlPVRuO3ZhciBzcj1uZXcg''@;'; put 'put ''RGF0ZSgxODk5LDExLDMxLDAsMCwwKSxDbj1zci5nZXRUaW1lKCksbHI9bmV3IERhdGUoMTkwMCwyLDEsMCwwLDApO2Z1bmN0aW9uIHFuKGNuLEFuKXt2YXIgR249Y24uZ2V0VGltZSgpO3JldHVybiBBbj9Hbi09MTI2MjMwNGU1OmNuPj1sciYmKEduKz04NjRlNSksKEduLShDbis2ZTQqKGNu''@;'; put 'put ''LmdldFRpbWV6b25lT2Zmc2V0KCktc3IuZ2V0VGltZXpvbmVPZmZzZXQoKSkpKS84NjRlNX12YXIgV249IiIscHI9eyJlbi11cyI6e3k6InkiLGQ6ImQiLCIsIjoiLCIsIi4iOiIuIixkYXRlOiJfLyJ9LCJkZS1kZSI6e3k6ImoiLGQ6InQiLCIsIjoiLiIsIi4iOiIsIixkYXRlOiJfLiJ9LCJp''@;'; put 'put ''dC1pdCI6e3k6InkiLGQ6ImQiLCIsIjoiLiIsIi4iOiIsIixkYXRlOiJfLyJ9fSx5cj1wcltXbi50b0xvd2VyQ2FzZSgpXXx8cHJbImVuLXVzIl0sdHI9ZXQoeXIpLHdpPSIkIixGaT0iIixraT0iLCIsa3I9Ii4iLFluPSIvIjtmdW5jdGlvbiBWbihjbil7c3dpdGNoKChXbnx8IiIpLnRvTG93''@;'; put 'put ''ZXJDYXNlKCkpe2Nhc2UiemgtdHciOmNuWzI3XT0iWyQtNDA0XWUvbS9kIixjblsyOF09J1skLTQwNF1lIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLGNuWzI5XT0nWyQtNDA0XWUiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsY25bMzBdPSdtIi8iZCIvInl5JyxjblszMV09J3l5eXki''@;'; put 'put ''XHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsY25bMzJdPSdoaCJcdTY2NDIibW0iXHU1MjA2IicsY25bMzNdPSdoaCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiInLGNuWzM0XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2IicsY25bMzVdPSdcdTRl''@;'; put 'put ''MGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyIicsY25bMzZdPSJbJC00MDRdZS9tL2QiLGNuWzUwXT0iWyQtNDA0XWUvbS9kIixjbls1MV09J1skLTQwNF1lIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLGNuWzUyXT0nXHU0ZTBhXHU1MzQ4L1x1''@;'; put 'put ''NGUwYlx1NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2IicsY25bNTNdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyIicsY25bNTRdPSdbJC00MDRdZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxjbls1NV09J1x1NGUwYVx1NTM0OC9c''@;'; put 'put ''dTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiInLGNuWzU2XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiInLGNuWzU3XT0iWyQtNDA0XWUvbS9kIixjbls1OF09J1skLTQwNF1lIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSIn''@;'; put 'put ''O2JyZWFrO2Nhc2UiemgtY24iOmNuWzI3XT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxjblsyOF09J20iXHU2NzA4ImQiXHU2NWU1IicsY25bMjldPSdtIlx1NjcwOCJkIlx1NjVlNSInLGNuWzMwXT0nbSItImQiLSJ5eScsY25bMzFdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSIn''@;'; put 'put ''LGNuWzMyXT0naCJcdTY1ZjYibW0iXHU1MjA2IicsY25bMzNdPSdoIlx1NjVmNiJtbSJcdTUyMDYic3MiXHU3OWQyIicsY25bMzRdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGgiXHU2NWY2Im1tIlx1NTIwNiInLGNuWzM1XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoIlx1NjVm''@;'; put 'put ''NiJtbSJcdTUyMDYic3MiXHU3OWQyIicsY25bMzZdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLGNuWzUwXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxjbls1MV09J20iXHU2NzA4ImQiXHU2NWU1IicsY25bNTJdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLGNuWzUzXT0nbSJcdTY3MDgiZCJc''@;'; put 'put ''dTY1ZTUiJyxjbls1NF09J20iXHU2NzA4ImQiXHU2NWU1IicsY25bNTVdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGgiXHU2NWY2Im1tIlx1NTIwNiInLGNuWzU2XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoIlx1NjVmNiJtbSJcdTUyMDYic3MiXHU3OWQyIicsY25bNTddPSd5''@;'; put 'put ''eXl5Ilx1NWU3NCJtIlx1NjcwOCInLGNuWzU4XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJzticmVhaztjYXNlImphLWpwIjpjblsyN109J1skLTQxMV1nZSIuIm0iLiJkJyxjblsyOF09J1skLTQxMV1nZ2dlIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLGNuWzI5XT0nWyQtNDExXWdnZ2UiXHU1''@;'; put 'put ''ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsY25bMzBdPSdtIi8iZCIvInl5JyxjblszMV09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsY25bMzJdPSdoIlx1NjY0MiJtbSJcdTUyMDYiJyxjblszM109J2giXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxjblszNF09J3l5eXki''@;'; put 'put ''XHU1ZTc0Im0iXHU2NzA4IicsY25bMzVdPSdtIlx1NjcwOCJkIlx1NjVlNSInLGNuWzM2XT0nWyQtNDExXWdlIi4ibSIuImQnLGNuWzUwXT0nWyQtNDExXWdlIi4ibSIuImQnLGNuWzUxXT0nWyQtNDExXWdnZ2UiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsY25bNTJdPSd5eXl5Ilx1NWU3''@;'; put 'put ''NCJtIlx1NjcwOCInLGNuWzUzXT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxjbls1NF09J1skLTQxMV1nZ2dlIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLGNuWzU1XT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxjbls1Nl09J20iXHU2NzA4ImQiXHU2NWU1IicsY25bNTddPSdbJC00MTFdZ2Ui''@;'; put 'put ''LiJtIi4iZCcsY25bNThdPSdbJC00MTFdZ2dnZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJzticmVhaztjYXNlImtvLWtyIjpjblsyN109J3l5eXkiXHU1ZTc0IiBtbSJcdTY3MDgiIGRkIlx1NjVlNSInLGNuWzI4XT0ibW0tZGQiLGNuWzI5XT0ibW0tZGQiLGNuWzMwXT0ibW0tZGQteXki''@;'; put 'put ''LGNuWzMxXT0neXl5eSJcdWIxNDQiIG1tIlx1YzZkNCIgZGQiXHVjNzdjIicsY25bMzJdPSdoIlx1YzJkYyIgbW0iXHViZDg0IicsY25bMzNdPSdoIlx1YzJkYyIgbW0iXHViZDg0IiBzcyJcdWNkMDgiJyxjblszNF09Inl5eXktbW0tZGQiLGNuWzM1XT0ieXl5eS1tbS1kZCIsY25bMzZdPSd5''@;'; put 'put ''eXl5Ilx1NWU3NCIgbW0iXHU2NzA4IiBkZCJcdTY1ZTUiJyxjbls1MF09J3l5eXkiXHU1ZTc0IiBtbSJcdTY3MDgiIGRkIlx1NjVlNSInLGNuWzUxXT0ibW0tZGQiLGNuWzUyXT0ieXl5eS1tbS1kZCIsY25bNTNdPSJ5eXl5LW1tLWRkIixjbls1NF09Im1tLWRkIixjbls1NV09Inl5eXktbW0t''@;'; put 'put ''ZGQiLGNuWzU2XT0ieXl5eS1tbS1kZCIsY25bNTddPSd5eXl5Ilx1NWU3NCIgbW0iXHU2NzA4IiBkZCJcdTY1ZTUiJyxjbls1OF09Im1tLWRkIjticmVhaztjYXNlInRoLXRoIjpjbls1OV09JyJ0IjAnLGNuWzYwXT0nInQiMC4wMCcsY25bNjFdPScidCIjLCMjMCcsY25bNjJdPScidCIjLCMj''@;'; put 'put ''MC4wMCcsY25bNjddPSJ0MCUiLGNuWzY4XT0idDAuMDAlIixjbls2OV09InQjID8vPyIsY25bNzBdPSJ0IyA/Py8/PyIsY25bNzFdPSdcdTBlMjciLyJcdTBlMTQiLyJcdTBlMWJcdTBlMWJcdTBlMWJcdTBlMWInLGNuWzcyXT0nXHUwZTI3Ii0iXHUwZTE0XHUwZTE0XHUwZTE0Ii0iXHUwZTFi''@;'; put 'put ''XHUwZTFiJyxjbls3M109J1x1MGUyNyItIlx1MGUxNFx1MGUxNFx1MGUxNCcsY25bNzRdPSdcdTBlMTRcdTBlMTRcdTBlMTQiLSJcdTBlMWJcdTBlMWInLGNuWzc1XT0nXHUwZTBhIjoiXHUwZTE5XHUwZTE5Jyxjbls3Nl09J1x1MGUwYSI6Ilx1MGUxOVx1MGUxOSI6Ilx1MGUxN1x1MGUxNycs''@;'; put 'put ''Y25bNzddPSdcdTBlMjciLyJcdTBlMTQiLyJcdTBlMWJcdTBlMWJcdTBlMWJcdTBlMWIgXHUwZTBhIjoiXHUwZTE5XHUwZTE5Jyxjbls3OF09J1x1MGUxOVx1MGUxOSI6Ilx1MGUxN1x1MGUxNycsY25bNzldPSdbXHUwZTBhXVx1MGUxOVx1MGUxOSI6Ilx1MGUxN1x1MGUxNycsY25bODBdPSdc''@;'; put 'put ''dTBlMTlcdTBlMTkiOiJcdTBlMTdcdTBlMTcuMCcsY25bODFdPSJkL20vYmIifX1MLl9nZW5lcmFsX2ludD1mdW5jdGlvbiBaaShjbil7cmV0dXJuIGNuLnRvU3RyaW5nKDEwKX07dmFyIENpPWZ1bmN0aW9uKCl7dmFyIEFuPS8oPzpcLjAqfChcLlxkKlsxLTldKTArKSQvO2Z1bmN0aW9uIEdu''@;'; put 'put ''KERpKXtyZXR1cm4tMT09RGkuaW5kZXhPZigiLiIpP0RpOkRpLnJlcGxhY2UoQW4sIiQxIil9dmFyIEFpPS8oPzpcLjAqfChcLlxkKlsxLTldKTArKVtFZV0vLGhyPS8oRVsrLV0pKFxkKSQvO3JldHVybiBmdW5jdGlvbihkYSl7dmFyIElpPWZ1bmN0aW9uIEphKERpKXt2YXIgSWksZGE9TWF0''@;'; put 'put ''aC5mbG9vcihNYXRoLmxvZyhNYXRoLmFicyhEaSkpKk1hdGguTE9HMTBFKTtyZXR1cm4gSWk9ZGE+PS00JiZkYTw9LTE/RGkudG9QcmVjaXNpb24oMTArZGEpOk1hdGguYWJzKGRhKTw9OT9mdW5jdGlvbiBTcihEaSl7dmFyIGRhPURpPDA/MTI6MTEsSWk9R24oRGkudG9GaXhlZCgxMikpO3Jl''@;'; put 'put ''dHVybiBJaS5sZW5ndGg8PWRhfHwoSWk9RGkudG9QcmVjaXNpb24oMTApKS5sZW5ndGg8PWRhP0lpOkRpLnRvRXhwb25lbnRpYWwoNSl9KERpKToxMD09PWRhP0RpLnRvRml4ZWQoMTApLnN1YnN0cigwLDEyKTpmdW5jdGlvbiBQaShEaSl7dmFyIGRhPUduKERpLnRvRml4ZWQoMTEpKTtyZXR1''@;'; put 'put ''cm4gZGEubGVuZ3RoPihEaTwwPzEyOjExKXx8IjAiPT09ZGF8fCItMCI9PT1kYT9EaS50b1ByZWNpc2lvbig2KTpkYX0oRGkpLEduKGZ1bmN0aW9uIE9pKERpKXtyZXR1cm4tMT09RGkuaW5kZXhPZigiRSIpP0RpOkRpLnJlcGxhY2UoQWksIiQxRSIpLnJlcGxhY2UoaHIsIiQxMCQyIil9KElp''@;'; put 'put ''LnRvVXBwZXJDYXNlKCkpKX0oZGEpO3JldHVybiIsIj09PWtpJiYiLiI9PT1rcj9JaTpJaS5yZXBsYWNlKC9bLC5dL2csZnVuY3Rpb24oUnMpe3JldHVybiIsIj09UnM/a2k6a3J9KX19KCk7ZnVuY3Rpb24gX2EoY24sQW4pe3N3aXRjaCh0eXBlb2YgY24pe2Nhc2Uic3RyaW5nIjpyZXR1cm4g''@;'; put 'put ''Y247Y2FzZSJib29sZWFuIjpyZXR1cm4gY24/IlRSVUUiOiJGQUxTRSI7Y2FzZSJudW1iZXIiOnJldHVybigwfGNuKT09PWNuP2NuLnRvU3RyaW5nKDEwKTpDaShjbik7Y2FzZSJ1bmRlZmluZWQiOnJldHVybiIiO2Nhc2Uib2JqZWN0IjppZihudWxsPT1jbilyZXR1cm4iIjtpZihjbiBpbnN0''@;'; put 'put ''YW5jZW9mIERhdGUpcmV0dXJuIG8xKDE0LHFuKGNuLEFuJiZBbi5kYXRlMTkwNCksQW4pfXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgdmFsdWUgaW4gR2VuZXJhbCBmb3JtYXQ6ICIrY24pfUwuX2dlbmVyYWxfbnVtPUNpLEwuX2dlbmVyYWw9X2E7dmFyIGFhPSJcdTBlNTBcdTBlNTFc''@;'; put 'put ''dTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTkiLnNwbGl0KCIiKTtmdW5jdGlvbiB6byhjbixBbixHbixBaSl7dmFyIEphLGhyPSIiLE9pPTAsU3I9MCxQaT1Hbi55LERpPTA7c3dpdGNoKGNuKXtjYXNlIDk4OlBpPUduLnkrNTQzO2Nhc2UgMTIxOnN3aXRj''@;'; put 'put ''aChBbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6SmE9UGklMTAwLERpPTI7YnJlYWs7ZGVmYXVsdDpKYT1QaSUxZTQsRGk9NH1icmVhaztjYXNlIDEwOTpzd2l0Y2goQW4ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOkphPUduLm0sRGk9QW4ubGVuZ3RoO2JyZWFrO2Nhc2UgMzpyZXR1cm4geHRbR24u''@;'; put 'put ''bS0xXVsxXTtjYXNlIDU6cmV0dXJuIHh0W0duLm0tMV1bMF07ZGVmYXVsdDpyZXR1cm4geHRbR24ubS0xXVsyXX1icmVhaztjYXNlIDEwMDpzd2l0Y2goQW4ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOkphPUduLmQsRGk9QW4ubGVuZ3RoO2JyZWFrO2Nhc2UgMzpyZXR1cm4gY3RbR24ucV1bMF07''@;'; put 'put ''ZGVmYXVsdDpyZXR1cm4gY3RbR24ucV1bMV19YnJlYWs7Y2FzZSAxMDQ6c3dpdGNoKEFuLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpKYT0xKyhHbi5IKzExKSUxMixEaT1Bbi5sZW5ndGg7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgaG91ciBmb3JtYXQ6ICIrQW59YnJlYWs7Y2FzZSA3Mjpzd2l0''@;'; put 'put ''Y2goQW4ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOkphPUduLkgsRGk9QW4ubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIGhvdXIgZm9ybWF0OiAiK0FufWJyZWFrO2Nhc2UgNzc6c3dpdGNoKEFuLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpKYT1Hbi5NLERpPUFuLmxlbmd0aDticmVhaztk''@;'; put 'put ''ZWZhdWx0OnRocm93ImJhZCBtaW51dGUgZm9ybWF0OiAiK0FufWJyZWFrO2Nhc2UgMTE1OmlmKCJzIiE9QW4mJiJzcyIhPUFuJiYiLjAiIT1BbiYmIi4wMCIhPUFuJiYiLjAwMCIhPUFuKXRocm93ImJhZCBzZWNvbmQgZm9ybWF0OiAiK0FuO3JldHVybiAwIT09R24udXx8InMiIT1BbiYmInNz''@;'; put 'put ''IiE9QW4/KFNyPUFpPj0yPzM9PT1BaT8xZTM6MTAwOjE9PT1BaT8xMDoxLChPaT1NYXRoLnJvdW5kKFNyKihHbi5TK0duLnUpKSk+PTYwKlNyJiYoT2k9MCksInMiPT09QW4/MD09PU9pPyIwIjoiIitPaS9TcjooaHI9UShPaSwyK0FpKSwic3MiPT09QW4/aHIuc3Vic3RyKDAsMik6Ii4iK2hy''@;'; put 'put ''LnN1YnN0cigyLEFuLmxlbmd0aC0xKSkpOlEoR24uUyxBbi5sZW5ndGgpO2Nhc2UgOTA6c3dpdGNoKEFuKXtjYXNlIltoXSI6Y2FzZSJbaGhdIjpjYXNlIltcdTBlMGFdIjpjYXNlIltcdTBlMGFcdTBlMGFdIjpKYT0yNCpHbi5EK0duLkg7YnJlYWs7Y2FzZSJbbV0iOmNhc2UiW21tXSI6Y2Fz''@;'; put 'put ''ZSJbXHUwZTE5XSI6Y2FzZSJbXHUwZTE5XHUwZTE5XSI6SmE9NjAqKDI0KkduLkQrR24uSCkrR24uTTticmVhaztjYXNlIltzXSI6Y2FzZSJbc3NdIjpjYXNlIltcdTBlMTddIjpjYXNlIltcdTBlMTdcdTBlMTddIjpKYT02MCooNjAqKDI0KkduLkQrR24uSCkrR24uTSkrTWF0aC5yb3VuZChH''@;'; put 'put ''bi5TK0duLnUpO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIGFic3RpbWUgZm9ybWF0OiAiK0FufURpPTM9PT1Bbi5sZW5ndGg/MToyO2JyZWFrO2Nhc2UgMTAxOkphPVBpLERpPTE7YnJlYWs7Y2FzZSAzNjIzOkphPUduLmQsRGk9QW4ubGVuZ3RoO2JyZWFrO2Nhc2UgMzYwNDpzd2l0Y2goQW4u''@;'; put 'put ''bGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOkphPUduLm0sRGk9QW4ubGVuZ3RoO2JyZWFrO2Nhc2UgMzpyZXR1cm4geHRbR24ubS0xXVsxXTtjYXNlIDU6cmV0dXJuIHh0W0duLm0tMV1bMF07ZGVmYXVsdDpyZXR1cm4geHRbR24ubS0xXVsyXX1icmVhaztjYXNlIDM2MTE6c3dpdGNoKFBpPUduLnkr''@;'; put 'put ''NTQzLEFuLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpKYT1QaSUxMDAsRGk9MjticmVhaztkZWZhdWx0OkphPVBpJTFlNCxEaT00fWJyZWFrO2Nhc2UgMzU5NDpKYT1Hbi5ILERpPUFuLmxlbmd0aDticmVhaztjYXNlIDM2MDk6SmE9R24uTSxEaT1Bbi5sZW5ndGg7YnJlYWs7Y2FzZSAzNjA3Okph''@;'; put 'put ''PUduLlMsRGk9QW4ubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6dGhyb3cgY24udG9TdHJpbmcoMTYpfXZhciBkYT1EaT4wP1EoSmEsRGkpOiIiO3JldHVybig5MD09Y24/QW4uY2hhckNvZGVBdCgxKTwzNTg0OmNuPDM1ODQpP2RhOmRhLnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24oSWkpe3JldHVy''@;'; put 'put ''biBhYVsrSWldfSl9ZnVuY3Rpb24gamEoY24pe2lmKGNuLmxlbmd0aDw9MylyZXR1cm4gY247Zm9yKHZhciBHbj1jbi5sZW5ndGglMyxBaT1jbi5zdWJzdHIoMCxHbik7R24hPWNuLmxlbmd0aDtHbis9MylBaSs9KEFpLmxlbmd0aD4wPyIsIjoiIikrY24uc3Vic3RyKEduLDMpO3JldHVybiBB''@;'; put 'put ''aX12YXIgd289ZnVuY3Rpb24oKXt2YXIgQW49LyUvZztmdW5jdGlvbiBocihibixZdCl7dmFyIHJuLFNuPWJuLmluZGV4T2YoIkUiKS1ibi5pbmRleE9mKCIuIiktMTtpZihibi5tYXRjaCgvXiMrMC4wRVwrMCQvKSl7aWYoMD09WXQpcmV0dXJuIjAuMEUrMCI7aWYoWXQ8MClyZXR1cm4iLSIr''@;'; put 'put ''aHIoYm4sLVl0KTt2YXIgVW49Ym4uaW5kZXhPZigiLiIpOy0xPT09VW4mJihVbj1ibi5pbmRleE9mKCJFIikpO3ZhciBicj1NYXRoLmZsb29yKE1hdGgubG9nKFl0KSpNYXRoLkxPRzEwRSklVW47aWYoYnI8MCYmKGJyKz1VbiksLTE9PT0ocm49KFl0L01hdGgucG93KDEwLGJyKSkudG9QcmVj''@;'; put 'put ''aXNpb24oU24rMSsoVW4rYnIpJVVuKSkuaW5kZXhPZigiZSIpKXt2YXIgVXI9TWF0aC5mbG9vcihNYXRoLmxvZyhZdCkqTWF0aC5MT0cxMEUpO2ZvcigtMT09PXJuLmluZGV4T2YoIi4iKT9ybj1ybi5jaGFyQXQoMCkrIi4iK3JuLnN1YnN0cigxKSsiRSsiKyhVci1ybi5sZW5ndGgrYnIpOnJu''@;'; put 'put ''Kz0iRSsiKyhVci1icik7IjAuIj09PXJuLnN1YnN0cigwLDIpOylybj0ocm49cm4uY2hhckF0KDApK3JuLnN1YnN0cigyLFVuKSsiLiIrcm4uc3Vic3RyKDIrVW4pKS5yZXBsYWNlKC9eMCsoWzEtOV0pLywiJDEiKS5yZXBsYWNlKC9eMCtcLi8sIjAuIik7cm49cm4ucmVwbGFjZSgvXCstLywi''@;'; put 'put ''LSIpfXJuPXJuLnJlcGxhY2UoL14oWystXT8pKFxkKilcLihcZCopW0VlXS8sZnVuY3Rpb24oeGksSnIsSmksamkpe3JldHVybiBKcitKaStqaS5zdWJzdHIoMCwoVW4rYnIpJVVuKSsiLiIramkuc3Vic3RyKGJyKSsiRSJ9KX1lbHNlIHJuPVl0LnRvRXhwb25lbnRpYWwoU24pO3JldHVybiBi''@;'; put 'put ''bi5tYXRjaCgvRVwrMDAkLykmJnJuLm1hdGNoKC9lWystXVxkJC8pJiYocm49cm4uc3Vic3RyKDAscm4ubGVuZ3RoLTEpKyIwIitybi5jaGFyQXQocm4ubGVuZ3RoLTEpKSxibi5tYXRjaCgvRVwtLykmJnJuLm1hdGNoKC9lXCsvKSYmKHJuPXJuLnJlcGxhY2UoL2VcKy8sImUiKSkscm4ucmVw''@;'; put 'put ''bGFjZSgiZSIsIkUiKX12YXIgT2k9LyMgKFw/KykoID8pXC8oID8pKFxkKykvLEphPS9eIyowKlwuKFswI10rKS8sRGk9L1wpLipbMCNdLyxkYT0vXCgjIyNcKSAjIyNcXD8tIyMjIy87ZnVuY3Rpb24gSWkoYm4pe2Zvcih2YXIgcm4sWXQ9IiIsU249MDtTbiE9Ym4ubGVuZ3RoOysrU24pc3dp''@;'; put 'put ''dGNoKHJuPWJuLmNoYXJDb2RlQXQoU24pKXtjYXNlIDM1OmJyZWFrO2Nhc2UgNjM6WXQrPSIgIjticmVhaztjYXNlIDQ4Oll0Kz0iMCI7YnJlYWs7ZGVmYXVsdDpZdCs9U3RyaW5nLmZyb21DaGFyQ29kZShybil9cmV0dXJuIFl0fWZ1bmN0aW9uIFJzKGJuLFl0KXt2YXIgcm49TWF0aC5wb3co''@;'; put 'put ''MTAsWXQpO3JldHVybiIiK01hdGgucm91bmQoYm4qcm4pL3JufWZ1bmN0aW9uIGRzKGJuLFl0KXtpZihZdD4xMSlyZXR1cm4gZHMoYm4sMTEpKk1hdGgucG93KDEwLFl0LTExKTt2YXIgcm49Ym4tTWF0aC5mbG9vcihibiksU249TWF0aC5wb3coMTAsWXQpO3JldHVybiBZdDwoIiIrTWF0aC5y''@;'; put 'put ''b3VuZChybipTbikpLmxlbmd0aD8wOk1hdGgucm91bmQocm4qU24pfWZ1bmN0aW9uIFJsKGJuLFl0LHJuKXtpZig0MD09PWJuLmNoYXJDb2RlQXQoMCkmJiFZdC5tYXRjaChEaSkpe3ZhciBTbj1ZdC5yZXBsYWNlKC9cKCAqLywiIikucmVwbGFjZSgvIFwpLywiIikucmVwbGFjZSgvXCkvLCIi''@;'; put 'put ''KTtyZXR1cm4gcm4+PTA/UmwoIm4iLFNuLHJuKToiKCIrUmwoIm4iLFNuLC1ybikrIikifWlmKDQ0PT09WXQuY2hhckNvZGVBdChZdC5sZW5ndGgtMSkpcmV0dXJuIGZ1bmN0aW9uIEFpKGJuLFl0LHJuKXtmb3IodmFyIFNuPVl0Lmxlbmd0aC0xOzQ0PT09WXQuY2hhckNvZGVBdChTbi0xKTsp''@;'; put 'put ''LS1TbjtyZXR1cm4gd28oYm4sWXQuc3Vic3RyKDAsU24pLHJuL01hdGgucG93KDEwLDMqKFl0Lmxlbmd0aC1TbikpKX0oYm4sWXQscm4pO2lmKC0xIT09WXQuaW5kZXhPZigiJSIpKXJldHVybiBmdW5jdGlvbiBHbihibixZdCxybil7dmFyIFNuPVl0LnJlcGxhY2UoQW4sIiIpLFVuPVl0Lmxl''@;'; put 'put ''bmd0aC1Tbi5sZW5ndGg7cmV0dXJuIHdvKGJuLFNuLHJuKk1hdGgucG93KDEwLDIqVW4pKStHKCIlIixVbil9KGJuLFl0LHJuKTtpZigtMSE9PVl0LmluZGV4T2YoIkUiKSlyZXR1cm4gaHIoWXQscm4pO2lmKDM2PT09WXQuY2hhckNvZGVBdCgwKSlyZXR1cm4iJCIrUmwoYm4sWXQuc3Vic3Ry''@;'; put 'put ''KCIgIj09WXQuY2hhckF0KDEpPzI6MSkscm4pO3ZhciBVbixicixVcix4aSxKcj1NYXRoLmFicyhybiksSmk9cm48MD8iLSI6IiI7aWYoWXQubWF0Y2goL14wMCskLykpcmV0dXJuIEppK0JlKEpyLFl0Lmxlbmd0aCk7aWYoWXQubWF0Y2goL15bIz9dKyQvKSlyZXR1cm4iMCI9PT0oVW49QmUo''@;'; put 'put ''cm4sMCkpJiYoVW49IiIpLFVuLmxlbmd0aD5ZdC5sZW5ndGg/VW46SWkoWXQuc3Vic3RyKDAsWXQubGVuZ3RoLVVuLmxlbmd0aCkpK1VuO2lmKGJyPVl0Lm1hdGNoKE9pKSlyZXR1cm4gZnVuY3Rpb24gU3IoYm4sWXQscm4pe3ZhciBTbj1wYXJzZUludChibls0XSwxMCksVW49TWF0aC5yb3Vu''@;'; put 'put ''ZChZdCpTbiksYnI9TWF0aC5mbG9vcihVbi9TbiksVXI9VW4tYnIqU24seGk9U247cmV0dXJuIHJuKygwPT09YnI/IiI6IiIrYnIpKyIgIisoMD09PVVyP0coIiAiLGJuWzFdLmxlbmd0aCsxK2JuWzRdLmxlbmd0aCk6bGUoVXIsYm5bMV0ubGVuZ3RoKStiblsyXSsiLyIrYm5bM10rUSh4aSxi''@;'; put 'put ''bls0XS5sZW5ndGgpKX0oYnIsSnIsSmkpO2lmKFl0Lm1hdGNoKC9eIyswKyQvKSlyZXR1cm4gSmkrQmUoSnIsWXQubGVuZ3RoLVl0LmluZGV4T2YoIjAiKSk7aWYoYnI9WXQubWF0Y2goSmEpKXJldHVybiBVbj1ScyhybixiclsxXS5sZW5ndGgpLnJlcGxhY2UoL14oW15cLl0rKSQvLCIkMS4i''@;'; put 'put ''K0lpKGJyWzFdKSkucmVwbGFjZSgvXC4kLywiLiIrSWkoYnJbMV0pKS5yZXBsYWNlKC9cLihcZCopJC8sZnVuY3Rpb24oYXIsX2wpe3JldHVybiIuIitfbCtHKCIwIixJaShiclsxXSkubGVuZ3RoLV9sLmxlbmd0aCl9KSwtMSE9PVl0LmluZGV4T2YoIjAuIik/VW46VW4ucmVwbGFjZSgvXjBc''@;'; put 'put ''Li8sIi4iKTtpZihZdD1ZdC5yZXBsYWNlKC9eIysoWzAuXSkvLCIkMSIpLGJyPVl0Lm1hdGNoKC9eKDAqKVwuKCMqKSQvKSlyZXR1cm4gSmkrUnMoSnIsYnJbMl0ubGVuZ3RoKS5yZXBsYWNlKC9cLihcZCpbMS05XSkwKiQvLCIuJDEiKS5yZXBsYWNlKC9eKC0/XGQqKSQvLCIkMS4iKS5yZXBs''@;'; put 'put ''YWNlKC9eMFwuLyxiclsxXS5sZW5ndGg/IjAuIjoiLiIpO2lmKGJyPVl0Lm1hdGNoKC9eI3sxLDN9LCMjMChcLj8pJC8pKXJldHVybiBKaStqYShCZShKciwwKSk7aWYoYnI9WXQubWF0Y2goL14jLCMjMFwuKFsjMF0qMCkkLykpcmV0dXJuIHJuPDA/Ii0iK1JsKGJuLFl0LC1ybik6amEoIiIr''@;'; put 'put ''KE1hdGguZmxvb3Iocm4pK2Z1bmN0aW9uIFFjKGJuLFl0KXtyZXR1cm4gWXQ8KCIiK01hdGgucm91bmQoKGJuLU1hdGguZmxvb3IoYm4pKSpNYXRoLnBvdygxMCxZdCkpKS5sZW5ndGg/MTowfShybixiclsxXS5sZW5ndGgpKSkrIi4iK1EoZHMocm4sYnJbMV0ubGVuZ3RoKSxiclsxXS5sZW5n''@;'; put 'put ''dGgpO2lmKGJyPVl0Lm1hdGNoKC9eIywjKiwjMC8pKXJldHVybiBSbChibixZdC5yZXBsYWNlKC9eIywjKiwvLCIiKSxybik7aWYoYnI9WXQubWF0Y2goL14oWzAjXSspKFxcPy0oWzAjXSspKSskLykpcmV0dXJuIFVuPWsoUmwoYm4sWXQucmVwbGFjZSgvW1xcLV0vZywiIikscm4pKSxVcj0w''@;'; put 'put ''LGsoayhZdC5yZXBsYWNlKC9cXC9nLCIiKSkucmVwbGFjZSgvWzAjXS9nLGZ1bmN0aW9uKGFyKXtyZXR1cm4gVXI8VW4ubGVuZ3RoP1VuLmNoYXJBdChVcisrKToiMCI9PT1hcj8iMCI6IiJ9KSk7aWYoWXQubWF0Y2goZGEpKXJldHVybiIoIisoVW49UmwoYm4sIiMjIyMjIyMjIyMiLHJuKSku''@;'; put 'put ''c3Vic3RyKDAsMykrIikgIitVbi5zdWJzdHIoMywzKSsiLSIrVW4uc3Vic3RyKDYpO3ZhciBqaT0iIjtpZihicj1ZdC5tYXRjaCgvXihbIzA/XSspKCA/KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIFVyPU1hdGgubWluKGJyWzRdLmxlbmd0aCw3KSx4aT1KdChKcixNYXRoLnBvdygxMCxVcikt''@;'; put 'put ''MSwhMSksVW49IiIrSmksIiAiPT0oamk9d28oIm4iLGJyWzFdLHhpWzFdKSkuY2hhckF0KGppLmxlbmd0aC0xKSYmKGppPWppLnN1YnN0cigwLGppLmxlbmd0aC0xKSsiMCIpLFVuKz1qaSticlsyXSsiLyIrYnJbM10sKGppPW1lKHhpWzJdLFVyKSkubGVuZ3RoPGJyWzRdLmxlbmd0aCYmKGpp''@;'; put 'put ''PUlpKGJyWzRdLnN1YnN0cihicls0XS5sZW5ndGgtamkubGVuZ3RoKSkramkpLFVuKz1qaTtpZihicj1ZdC5tYXRjaCgvXiMgKFsjMD9dKykoID8pXC8oID8pKFsjMD9dKykvKSlyZXR1cm4gVXI9TWF0aC5taW4oTWF0aC5tYXgoYnJbMV0ubGVuZ3RoLGJyWzRdLmxlbmd0aCksNyksSmkrKCh4''@;'; put 'put ''aT1KdChKcixNYXRoLnBvdygxMCxVciktMSwhMCkpWzBdfHwoeGlbMV0/IiI6IjAiKSkrIiAiKyh4aVsxXT9sZSh4aVsxXSxVcikrYnJbMl0rIi8iK2JyWzNdK21lKHhpWzJdLFVyKTpHKCIgIiwyKlVyKzErYnJbMl0ubGVuZ3RoK2JyWzNdLmxlbmd0aCkpO2lmKGJyPVl0Lm1hdGNoKC9eWyMw''@;'; put 'put ''P10rJC8pKXJldHVybiBVbj1CZShybiwwKSxZdC5sZW5ndGg8PVVuLmxlbmd0aD9VbjpJaShZdC5zdWJzdHIoMCxZdC5sZW5ndGgtVW4ubGVuZ3RoKSkrVW47aWYoYnI9WXQubWF0Y2goL14oWyMwP10rKVwuKFsjMF0rKSQvKSl7VW49IiIrcm4udG9GaXhlZChNYXRoLm1pbihiclsyXS5sZW5n''@;'; put 'put ''dGgsMTApKS5yZXBsYWNlKC8oW14wXSkwKyQvLCIkMSIpLFVyPVVuLmluZGV4T2YoIi4iKTt2YXIgdW89WXQuaW5kZXhPZigiLiIpLVVyLHphPVl0Lmxlbmd0aC1Vbi5sZW5ndGgtdW87cmV0dXJuIElpKFl0LnN1YnN0cigwLHVvKStVbitZdC5zdWJzdHIoWXQubGVuZ3RoLXphKSl9aWYoYnI9''@;'; put 'put ''WXQubWF0Y2goL14wMCwwMDBcLihbIzBdKjApJC8pKXJldHVybiBVcj1kcyhybixiclsxXS5sZW5ndGgpLHJuPDA/Ii0iK1JsKGJuLFl0LC1ybik6amEoZnVuY3Rpb24gS3UoYm4pe3JldHVybiBibjwyMTQ3NDgzNjQ3JiZibj4tMjE0NzQ4MzY0OD8iIisoYm4+PTA/MHxibjpibi0xfDApOiIi''@;'; put 'put ''K01hdGguZmxvb3IoYm4pfShybikpLnJlcGxhY2UoL15cZCxcZHszfSQvLCIwJCYiKS5yZXBsYWNlKC9eXGQqJC8sZnVuY3Rpb24oYXIpe3JldHVybiIwMCwiKyhhci5sZW5ndGg8Mz9RKDAsMy1hci5sZW5ndGgpOiIiKSthcn0pKyIuIitRKFVyLGJyWzFdLmxlbmd0aCk7c3dpdGNoKFl0KXtj''@;'; put 'put ''YXNlIiMjIywjIzAuMDAiOnJldHVybiBSbChibiwiIywjIzAuMDAiLHJuKTtjYXNlIiMjIywjIyMiOmNhc2UiIyMsIyMjIjpjYXNlIiMsIyMjIjp2YXIgU2E9amEoQmUoSnIsMCkpO3JldHVybiIwIiE9PVNhP0ppK1NhOiIiO2Nhc2UiIyMjLCMjIy4wMCI6cmV0dXJuIFJsKGJuLCIjIyMsIyMw''@;'; put 'put ''LjAwIixybikucmVwbGFjZSgvXjBcLi8sIi4iKTtjYXNlIiMsIyMjLjAwIjpyZXR1cm4gUmwoYm4sIiMsIyMwLjAwIixybikucmVwbGFjZSgvXjBcLi8sIi4iKX10aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIGZvcm1hdCB8IitZdCsifCIpfWZ1bmN0aW9uIHZuKGJuLFl0KXt2YXIgcm4s''@;'; put 'put ''U249Ym4uaW5kZXhPZigiRSIpLWJuLmluZGV4T2YoIi4iKS0xO2lmKGJuLm1hdGNoKC9eIyswLjBFXCswJC8pKXtpZigwPT1ZdClyZXR1cm4iMC4wRSswIjtpZihZdDwwKXJldHVybiItIit2bihibiwtWXQpO3ZhciBVbj1ibi5pbmRleE9mKCIuIik7LTE9PT1VbiYmKFVuPWJuLmluZGV4T2Yo''@;'; put 'put ''IkUiKSk7dmFyIGJyPU1hdGguZmxvb3IoTWF0aC5sb2coWXQpKk1hdGguTE9HMTBFKSVVbjtpZihicjwwJiYoYnIrPVVuKSwhKHJuPShZdC9NYXRoLnBvdygxMCxicikpLnRvUHJlY2lzaW9uKFNuKzErKFVuK2JyKSVVbikpLm1hdGNoKC9bRWVdLykpe3ZhciBVcj1NYXRoLmZsb29yKE1hdGgu''@;'; put 'put ''bG9nKFl0KSpNYXRoLkxPRzEwRSk7LTE9PT1ybi5pbmRleE9mKCIuIik/cm49cm4uY2hhckF0KDApKyIuIitybi5zdWJzdHIoMSkrIkUrIisoVXItcm4ubGVuZ3RoK2JyKTpybis9IkUrIisoVXItYnIpLHJuPXJuLnJlcGxhY2UoL1wrLS8sIi0iKX1ybj1ybi5yZXBsYWNlKC9eKFsrLV0/KShc''@;'; put 'put ''ZCopXC4oXGQqKVtFZV0vLGZ1bmN0aW9uKHhpLEpyLEppLGppKXtyZXR1cm4gSnIrSmkramkuc3Vic3RyKDAsKFVuK2JyKSVVbikrIi4iK2ppLnN1YnN0cihicikrIkUifSl9ZWxzZSBybj1ZdC50b0V4cG9uZW50aWFsKFNuKTtyZXR1cm4gYm4ubWF0Y2goL0VcKzAwJC8pJiZybi5tYXRjaCgv''@;'; put 'put ''ZVsrLV1cZCQvKSYmKHJuPXJuLnN1YnN0cigwLHJuLmxlbmd0aC0xKSsiMCIrcm4uY2hhckF0KHJuLmxlbmd0aC0xKSksYm4ubWF0Y2goL0VcLS8pJiZybi5tYXRjaCgvZVwrLykmJihybj1ybi5yZXBsYWNlKC9lXCsvLCJlIikpLHJuLnJlcGxhY2UoImUiLCJFIil9ZnVuY3Rpb24gSW4oYm4s''@;'; put 'put ''WXQscm4pe2lmKDQwPT09Ym4uY2hhckNvZGVBdCgwKSYmIVl0Lm1hdGNoKERpKSl7dmFyIFNuPVl0LnJlcGxhY2UoL1woICovLCIiKS5yZXBsYWNlKC8gXCkvLCIiKS5yZXBsYWNlKC9cKS8sIiIpO3JldHVybiBybj49MD9JbigibiIsU24scm4pOiIoIitJbigibiIsU24sLXJuKSsiKSJ9aWYo''@;'; put 'put ''NDQ9PT1ZdC5jaGFyQ29kZUF0KFl0Lmxlbmd0aC0xKSlyZXR1cm4gZnVuY3Rpb24gV2coYm4sWXQscm4pe2Zvcih2YXIgU249WXQubGVuZ3RoLTE7NDQ9PT1ZdC5jaGFyQ29kZUF0KFNuLTEpOyktLVNuO3JldHVybiB3byhibixZdC5zdWJzdHIoMCxTbikscm4vTWF0aC5wb3coMTAsMyooWXQu''@;'; put 'put ''bGVuZ3RoLVNuKSkpfShibixZdCxybik7aWYoLTEhPT1ZdC5pbmRleE9mKCIlIikpcmV0dXJuIGZ1bmN0aW9uIFptKGJuLFl0LHJuKXt2YXIgU249WXQucmVwbGFjZShBbiwiIiksVW49WXQubGVuZ3RoLVNuLmxlbmd0aDtyZXR1cm4gd28oYm4sU24scm4qTWF0aC5wb3coMTAsMipVbikpK0co''@;'; put 'put ''IiUiLFVuKX0oYm4sWXQscm4pO2lmKC0xIT09WXQuaW5kZXhPZigiRSIpKXJldHVybiB2bihZdCxybik7aWYoMzY9PT1ZdC5jaGFyQ29kZUF0KDApKXJldHVybiIkIitJbihibixZdC5zdWJzdHIoIiAiPT1ZdC5jaGFyQXQoMSk/MjoxKSxybik7dmFyIFVuLGJyLFVyLHhpLEpyPU1hdGguYWJz''@;'; put 'put ''KHJuKSxKaT1ybjwwPyItIjoiIjtpZihZdC5tYXRjaCgvXjAwKyQvKSlyZXR1cm4gSmkrUShKcixZdC5sZW5ndGgpO2lmKFl0Lm1hdGNoKC9eWyM/XSskLykpcmV0dXJuIFVuPSIiK3JuLDA9PT1ybiYmKFVuPSIiKSxVbi5sZW5ndGg+WXQubGVuZ3RoP1VuOklpKFl0LnN1YnN0cigwLFl0Lmxl''@;'; put 'put ''bmd0aC1Vbi5sZW5ndGgpKStVbjtpZihicj1ZdC5tYXRjaChPaSkpcmV0dXJuIGZ1bmN0aW9uIFBpKGJuLFl0LHJuKXtyZXR1cm4gcm4rKDA9PT1ZdD8iIjoiIitZdCkrRygiICIsYm5bMV0ubGVuZ3RoKzIrYm5bNF0ubGVuZ3RoKX0oYnIsSnIsSmkpO2lmKFl0Lm1hdGNoKC9eIyswKyQvKSly''@;'; put 'put ''ZXR1cm4gSmkrUShKcixZdC5sZW5ndGgtWXQuaW5kZXhPZigiMCIpKTtpZihicj1ZdC5tYXRjaChKYSkpcmV0dXJuIFVuPShVbj0oIiIrcm4pLnJlcGxhY2UoL14oW15cLl0rKSQvLCIkMS4iK0lpKGJyWzFdKSkucmVwbGFjZSgvXC4kLywiLiIrSWkoYnJbMV0pKSkucmVwbGFjZSgvXC4oXGQq''@;'; put 'put ''KSQvLGZ1bmN0aW9uKGFyLF9sKXtyZXR1cm4iLiIrX2wrRygiMCIsSWkoYnJbMV0pLmxlbmd0aC1fbC5sZW5ndGgpfSksLTEhPT1ZdC5pbmRleE9mKCIwLiIpP1VuOlVuLnJlcGxhY2UoL14wXC4vLCIuIik7aWYoWXQ9WXQucmVwbGFjZSgvXiMrKFswLl0pLywiJDEiKSxicj1ZdC5tYXRjaCgv''@;'; put 'put ''XigwKilcLigjKikkLykpcmV0dXJuIEppKygiIitKcikucmVwbGFjZSgvXC4oXGQqWzEtOV0pMCokLywiLiQxIikucmVwbGFjZSgvXigtP1xkKikkLywiJDEuIikucmVwbGFjZSgvXjBcLi8sYnJbMV0ubGVuZ3RoPyIwLiI6Ii4iKTtpZihicj1ZdC5tYXRjaCgvXiN7MSwzfSwjIzAoXC4/KSQv''@;'; put 'put ''KSlyZXR1cm4gSmkramEoIiIrSnIpO2lmKGJyPVl0Lm1hdGNoKC9eIywjIzBcLihbIzBdKjApJC8pKXJldHVybiBybjwwPyItIitJbihibixZdCwtcm4pOmphKCIiK3JuKSsiLiIrRygiMCIsYnJbMV0ubGVuZ3RoKTtpZihicj1ZdC5tYXRjaCgvXiMsIyosIzAvKSlyZXR1cm4gSW4oYm4sWXQu''@;'; put 'put ''cmVwbGFjZSgvXiMsIyosLywiIikscm4pO2lmKGJyPVl0Lm1hdGNoKC9eKFswI10rKShcXD8tKFswI10rKSkrJC8pKXJldHVybiBVbj1rKEluKGJuLFl0LnJlcGxhY2UoL1tcXC1dL2csIiIpLHJuKSksVXI9MCxrKGsoWXQucmVwbGFjZSgvXFwvZywiIikpLnJlcGxhY2UoL1swI10vZyxmdW5j''@;'; put 'put ''dGlvbihhcil7cmV0dXJuIFVyPFVuLmxlbmd0aD9Vbi5jaGFyQXQoVXIrKyk6IjAiPT09YXI/IjAiOiIifSkpO2lmKFl0Lm1hdGNoKGRhKSlyZXR1cm4iKCIrKFVuPUluKGJuLCIjIyMjIyMjIyMjIixybikpLnN1YnN0cigwLDMpKyIpICIrVW4uc3Vic3RyKDMsMykrIi0iK1VuLnN1YnN0cig2''@;'; put 'put ''KTt2YXIgamk9IiI7aWYoYnI9WXQubWF0Y2goL14oWyMwP10rKSggPylcLyggPykoWyMwP10rKS8pKXJldHVybiBVcj1NYXRoLm1pbihicls0XS5sZW5ndGgsNykseGk9SnQoSnIsTWF0aC5wb3coMTAsVXIpLTEsITEpLFVuPSIiK0ppLCIgIj09KGppPXdvKCJuIixiclsxXSx4aVsxXSkpLmNo''@;'; put 'put ''YXJBdChqaS5sZW5ndGgtMSkmJihqaT1qaS5zdWJzdHIoMCxqaS5sZW5ndGgtMSkrIjAiKSxVbis9amkrYnJbMl0rIi8iK2JyWzNdLChqaT1tZSh4aVsyXSxVcikpLmxlbmd0aDxicls0XS5sZW5ndGgmJihqaT1JaShicls0XS5zdWJzdHIoYnJbNF0ubGVuZ3RoLWppLmxlbmd0aCkpK2ppKSxV''@;'; put 'put ''bis9amk7aWYoYnI9WXQubWF0Y2goL14jIChbIzA/XSspKCA/KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIFVyPU1hdGgubWluKE1hdGgubWF4KGJyWzFdLmxlbmd0aCxicls0XS5sZW5ndGgpLDcpLEppKygoeGk9SnQoSnIsTWF0aC5wb3coMTAsVXIpLTEsITApKVswXXx8KHhpWzFdPyIiOiIw''@;'; put 'put ''IikpKyIgIisoeGlbMV0/bGUoeGlbMV0sVXIpK2JyWzJdKyIvIiticlszXSttZSh4aVsyXSxVcik6RygiICIsMipVcisxK2JyWzJdLmxlbmd0aCticlszXS5sZW5ndGgpKTtpZihicj1ZdC5tYXRjaCgvXlsjMD9dKyQvKSlyZXR1cm4gWXQubGVuZ3RoPD0oVW49IiIrcm4pLmxlbmd0aD9VbjpJ''@;'; put 'put ''aShZdC5zdWJzdHIoMCxZdC5sZW5ndGgtVW4ubGVuZ3RoKSkrVW47aWYoYnI9WXQubWF0Y2goL14oWyMwXSspXC4oWyMwXSspJC8pKXtVbj0iIitybi50b0ZpeGVkKE1hdGgubWluKGJyWzJdLmxlbmd0aCwxMCkpLnJlcGxhY2UoLyhbXjBdKTArJC8sIiQxIiksVXI9VW4uaW5kZXhPZigiLiIp''@;'; put 'put ''O3ZhciB1bz1ZdC5pbmRleE9mKCIuIiktVXIsemE9WXQubGVuZ3RoLVVuLmxlbmd0aC11bztyZXR1cm4gSWkoWXQuc3Vic3RyKDAsdW8pK1VuK1l0LnN1YnN0cihZdC5sZW5ndGgtemEpKX1pZihicj1ZdC5tYXRjaCgvXjAwLDAwMFwuKFsjMF0qMCkkLykpcmV0dXJuIHJuPDA/Ii0iK0luKGJu''@;'; put 'put ''LFl0LC1ybik6amEoIiIrcm4pLnJlcGxhY2UoL15cZCxcZHszfSQvLCIwJCYiKS5yZXBsYWNlKC9eXGQqJC8sZnVuY3Rpb24oYXIpe3JldHVybiIwMCwiKyhhci5sZW5ndGg8Mz9RKDAsMy1hci5sZW5ndGgpOiIiKSthcn0pKyIuIitRKDAsYnJbMV0ubGVuZ3RoKTt2YXIgU2E9amEoIiIrSnIp''@;'; put 'put ''O3N3aXRjaChZdCl7Y2FzZSIjIyMsIyMjIjpjYXNlIiMjLCMjIyI6Y2FzZSIjLCMjIyI6cmV0dXJuIjAiIT09U2E/SmkrU2E6IiI7Y2FzZSIjLCMwMCI6cmV0dXJuIjAwIiE9PShTYT1RKFNhLDIpKT9KaStTYToiIjtkZWZhdWx0OmlmKFl0Lm1hdGNoKC9cLlswIz9dKiQvKSlyZXR1cm4gSW4o''@;'; put 'put ''Ym4sWXQuc2xpY2UoMCxZdC5sYXN0SW5kZXhPZigiLiIpKSxybikrSWkoWXQuc2xpY2UoWXQubGFzdEluZGV4T2YoIi4iKSkpfXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgZm9ybWF0IHwiK1l0KyJ8Iil9cmV0dXJuIGZ1bmN0aW9uKFl0LHJuLFNuKXtyZXR1cm4iMCwwIj09cm4mJihy''@;'; put 'put ''bj0iIywjMDAiKSwoMHxTbik9PT1Tbj9JbihZdCxybixTbik6UmwoWXQscm4sU24pfX0oKTtmdW5jdGlvbiBibyhjbil7Zm9yKHZhciBBbj1bXSxHbj0hMSxBaT0wLGhyPTA7QWk8Y24ubGVuZ3RoOysrQWkpc3dpdGNoKGNuLmNoYXJDb2RlQXQoQWkpKXtjYXNlIDM0OkduPSFHbjticmVhaztj''@;'; put 'put ''YXNlIDk1OmNhc2UgNDI6Y2FzZSA5MjorK0FpO2JyZWFrO2Nhc2UgNTk6QW5bQW4ubGVuZ3RoXT1jbi5zdWJzdHIoaHIsQWktaHIpLGhyPUFpKzF9aWYoQW5bQW4ubGVuZ3RoXT1jbi5zdWJzdHIoaHIpLCEwPT09R24pdGhyb3cgbmV3IEVycm9yKCJGb3JtYXQgfCIrY24rInwgdW50ZXJtaW5h''@;'; put 'put ''dGVkIHN0cmluZyAiKTtyZXR1cm4gQW59TC5fc3BsaXQ9Ym87dmFyIFVpPS9cW1tIaE1tU3NcdTBFMEFcdTBFMTlcdTBFMTddKlxdLztmdW5jdGlvbiBqbChjbil7Zm9yKHZhciBBbj0wLEduPSIiLEFpPSIiO0FuPGNuLmxlbmd0aDspc3dpdGNoKEduPWNuLmNoYXJBdChBbikpe2Nhc2UiRyI6''@;'; put 'put ''R2UoY24sQW4pJiYoQW4rPTYpLEFuKys7YnJlYWs7Y2FzZSciJzpmb3IoOzM0IT09Y24uY2hhckNvZGVBdCgrK0FuKSYmQW48Y24ubGVuZ3RoOyk7KytBbjticmVhaztjYXNlIlxcIjpjYXNlIl8iOkFuKz0yO2JyZWFrO2Nhc2UiQCI6KytBbjticmVhaztjYXNlIkIiOmNhc2UiYiI6aWYoIjEi''@;'; put 'put ''PT09Y24uY2hhckF0KEFuKzEpfHwiMiI9PT1jbi5jaGFyQXQoQW4rMSkpcmV0dXJuITA7Y2FzZSJNIjpjYXNlIkQiOmNhc2UiWSI6Y2FzZSJIIjpjYXNlIlMiOmNhc2UiRSI6Y2FzZSJtIjpjYXNlImQiOmNhc2UieSI6Y2FzZSJoIjpjYXNlInMiOmNhc2UiZSI6Y2FzZSJnIjpyZXR1cm4hMDtj''@;'; put 'put ''YXNlIkEiOmNhc2UiYSI6Y2FzZSJcdTRlMGEiOmlmKCJBL1AiPT09Y24uc3Vic3RyKEFuLDMpLnRvVXBwZXJDYXNlKCl8fCJBTS9QTSI9PT1jbi5zdWJzdHIoQW4sNSkudG9VcHBlckNhc2UoKXx8Ilx1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDgiPT09Y24uc3Vic3RyKEFuLDUpLnRvVXBwZXJD''@;'; put 'put ''YXNlKCkpcmV0dXJuITA7KytBbjticmVhaztjYXNlIlsiOmZvcihBaT1HbjsiXSIhPT1jbi5jaGFyQXQoQW4rKykmJkFuPGNuLmxlbmd0aDspQWkrPWNuLmNoYXJBdChBbik7aWYoQWkubWF0Y2goVWkpKXJldHVybiEwO2JyZWFrO2Nhc2UiLiI6Y2FzZSIwIjpjYXNlIiMiOmZvcig7QW48Y24u''@;'; put 'put ''bGVuZ3RoJiYoIjAjPy4sRSstJSIuaW5kZXhPZihHbj1jbi5jaGFyQXQoKytBbikpPi0xfHwiXFwiPT1HbiYmIi0iPT1jbi5jaGFyQXQoQW4rMSkmJiIwIyIuaW5kZXhPZihjbi5jaGFyQXQoQW4rMikpPi0xKTspO2JyZWFrO2Nhc2UiPyI6Zm9yKDtjbi5jaGFyQXQoKytBbik9PT1HbjspO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiKiI6KytBbiwoIiAiPT1jbi5jaGFyQXQoQW4pfHwiKiI9PWNuLmNoYXJBdChBbikpJiYrK0FuO2JyZWFrO2Nhc2UiKCI6Y2FzZSIpIjorK0FuO2JyZWFrO2Nhc2UiMSI6Y2FzZSIyIjpjYXNlIjMiOmNhc2UiNCI6Y2FzZSI1IjpjYXNlIjYiOmNhc2UiNyI6Y2FzZSI4IjpjYXNl''@;'; put 'put ''IjkiOmZvcig7QW48Y24ubGVuZ3RoJiYiMDEyMzQ1Njc4OSIuaW5kZXhPZihjbi5jaGFyQXQoKytBbikpPi0xOyk7YnJlYWs7ZGVmYXVsdDorK0FufXJldHVybiExfWZ1bmN0aW9uIEJuKGNuLEFuLEduLEFpKXtmb3IodmFyIERpLGRhLElpLGhyPVtdLE9pPSIiLFNyPTAsUGk9IiIsSmE9InQi''@;'; put 'put ''LFJzPSJIIjtTcjxjbi5sZW5ndGg7KXN3aXRjaChQaT1jbi5jaGFyQXQoU3IpKXtjYXNlIkciOmlmKCFHZShjbixTcikpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgY2hhcmFjdGVyICIrUGkrIiBpbiAiK2NuKTtocltoci5sZW5ndGhdPXt0OiJHIix2OiJHZW5lcmFsIn0sU3IrPTc7''@;'; put 'put ''YnJlYWs7Y2FzZSciJzpmb3IoT2k9IiI7MzQhPT0oSWk9Y24uY2hhckNvZGVBdCgrK1NyKSkmJlNyPGNuLmxlbmd0aDspT2krPVN0cmluZy5mcm9tQ2hhckNvZGUoSWkpO2hyW2hyLmxlbmd0aF09e3Q6InQiLHY6T2l9LCsrU3I7YnJlYWs7Y2FzZSJcXCI6dmFyIGRzPWNuLmNoYXJBdCgrK1Ny''@;'; put 'put ''KTtocltoci5sZW5ndGhdPXt0OiIoIj09PWRzfHwiKSI9PT1kcz9kczoidCIsdjpkc30sKytTcjticmVhaztjYXNlIl8iOmhyW2hyLmxlbmd0aF09e3Q6InQiLHY6IiAifSxTcis9MjticmVhaztjYXNlIkAiOmhyW2hyLmxlbmd0aF09e3Q6IlQiLHY6QW59LCsrU3I7YnJlYWs7Y2FzZSJCIjpj''@;'; put 'put ''YXNlImIiOmlmKCIxIj09PWNuLmNoYXJBdChTcisxKXx8IjIiPT09Y24uY2hhckF0KFNyKzEpKXtpZihudWxsPT1EaSYmbnVsbD09KERpPVRuKEFuLEduLCIyIj09PWNuLmNoYXJBdChTcisxKSkpKXJldHVybiIiO2hyW2hyLmxlbmd0aF09e3Q6IlgiLHY6Y24uc3Vic3RyKFNyLDIpfSxKYT1Q''@;'; put 'put ''aSxTcis9MjticmVha31jYXNlIk0iOmNhc2UiRCI6Y2FzZSJZIjpjYXNlIkgiOmNhc2UiUyI6Y2FzZSJFIjpQaT1QaS50b0xvd2VyQ2FzZSgpO2Nhc2UibSI6Y2FzZSJkIjpjYXNlInkiOmNhc2UiaCI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJcdTBlMjciOmNhc2UiXHUwZTE0Ijpj''@;'; put 'put ''YXNlIlx1MGUxYiI6Y2FzZSJcdTBlMGEiOmNhc2UiXHUwZTE5IjpjYXNlIlx1MGUxNyI6aWYoQW48MHx8bnVsbD09RGkmJm51bGw9PShEaT1UbihBbixHbikpKXJldHVybiIiO2ZvcihPaT1QaTsrK1NyPGNuLmxlbmd0aCYmY24uY2hhckF0KFNyKS50b0xvd2VyQ2FzZSgpPT09UGk7KU9pKz1Q''@;'; put 'put ''aTsibSI9PT1QaSYmImgiPT09SmEudG9Mb3dlckNhc2UoKSYmKFBpPSJNIiksImgiPT09UGkmJihQaT1ScyksaHJbaHIubGVuZ3RoXT17dDpQaSx2Ok9pfSxKYT1QaTticmVhaztjYXNlIkEiOmNhc2UiYSI6Y2FzZSJcdTRlMGEiOnZhciBLdT17dDpQaSx2OlBpfTtpZihudWxsPT1EaSYmKERp''@;'; put 'put ''PVRuKEFuLEduKSksIkEvUCI9PT1jbi5zdWJzdHIoU3IsMykudG9VcHBlckNhc2UoKT8obnVsbCE9RGkmJihLdS52PURpLkg+PTEyPyJQIjoiQSIpLEt1LnQ9IlQiLFJzPSJoIixTcis9Myk6IkFNL1BNIj09PWNuLnN1YnN0cihTciw1KS50b1VwcGVyQ2FzZSgpPyhudWxsIT1EaSYmKEt1LnY9''@;'; put 'put ''RGkuSD49MTI/IlBNIjoiQU0iKSxLdS50PSJUIixTcis9NSxScz0iaCIpOiJcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4Ij09PWNuLnN1YnN0cihTciw1KS50b1VwcGVyQ2FzZSgpPyhudWxsIT1EaSYmKEt1LnY9RGkuSD49MTI/Ilx1NGUwYlx1NTM0OCI6Ilx1NGUwYVx1NTM0OCIpLEt1LnQ9''@;'; put 'put ''IlQiLFNyKz01LFJzPSJoIik6KEt1LnQ9InQiLCsrU3IpLG51bGw9PURpJiYiVCI9PT1LdS50KXJldHVybiIiO2hyW2hyLmxlbmd0aF09S3UsSmE9UGk7YnJlYWs7Y2FzZSJbIjpmb3IoT2k9UGk7Il0iIT09Y24uY2hhckF0KFNyKyspJiZTcjxjbi5sZW5ndGg7KU9pKz1jbi5jaGFyQXQoU3Ip''@;'; put 'put ''O2lmKCJdIiE9PU9pLnNsaWNlKC0xKSl0aHJvdyd1bnRlcm1pbmF0ZWQgIlsiIGJsb2NrOiB8JytPaSsifCI7aWYoT2kubWF0Y2goVWkpKXtpZihudWxsPT1EaSYmbnVsbD09KERpPVRuKEFuLEduKSkpcmV0dXJuIiI7aHJbaHIubGVuZ3RoXT17dDoiWiIsdjpPaS50b0xvd2VyQ2FzZSgpfSxK''@;'; put 'put ''YT1PaS5jaGFyQXQoMSl9ZWxzZSBPaS5pbmRleE9mKCIkIik+LTEmJihPaT0oT2kubWF0Y2goL1wkKFteLVxbXF1dKikvKXx8W10pWzFdfHwiJCIsamwoY24pfHwoaHJbaHIubGVuZ3RoXT17dDoidCIsdjpPaX0pKTticmVhaztjYXNlIi4iOmlmKG51bGwhPURpKXtmb3IoT2k9UGk7KytTcjxj''@;'; put 'put ''bi5sZW5ndGgmJiIwIj09PShQaT1jbi5jaGFyQXQoU3IpKTspT2krPVBpO2hyW2hyLmxlbmd0aF09e3Q6InMiLHY6T2l9O2JyZWFrfWNhc2UiMCI6Y2FzZSIjIjpmb3IoT2k9UGk7KytTcjxjbi5sZW5ndGgmJiIwIz8uLEUrLSUiLmluZGV4T2YoUGk9Y24uY2hhckF0KFNyKSk+LTE7KU9pKz1Q''@;'; put 'put ''aTtocltoci5sZW5ndGhdPXt0OiJuIix2Ok9pfTticmVhaztjYXNlIj8iOmZvcihPaT1QaTtjbi5jaGFyQXQoKytTcik9PT1QaTspT2krPVBpO2hyW2hyLmxlbmd0aF09e3Q6UGksdjpPaX0sSmE9UGk7YnJlYWs7Y2FzZSIqIjorK1NyLCgiICI9PWNuLmNoYXJBdChTcil8fCIqIj09Y24uY2hh''@;'; put 'put ''ckF0KFNyKSkmJisrU3I7YnJlYWs7Y2FzZSIoIjpjYXNlIikiOmhyW2hyLmxlbmd0aF09e3Q6MT09PUFpPyJ0IjpQaSx2OlBpfSwrK1NyO2JyZWFrO2Nhc2UiMSI6Y2FzZSIyIjpjYXNlIjMiOmNhc2UiNCI6Y2FzZSI1IjpjYXNlIjYiOmNhc2UiNyI6Y2FzZSI4IjpjYXNlIjkiOmZvcihPaT1Q''@;'; put 'put ''aTtTcjxjbi5sZW5ndGgmJiIwMTIzNDU2Nzg5Ii5pbmRleE9mKGNuLmNoYXJBdCgrK1NyKSk+LTE7KU9pKz1jbi5jaGFyQXQoU3IpO2hyW2hyLmxlbmd0aF09e3Q6IkQiLHY6T2l9O2JyZWFrO2Nhc2UiICI6aHJbaHIubGVuZ3RoXT17dDpQaSx2OlBpfSwrK1NyO2JyZWFrO2Nhc2UiJCI6aHJb''@;'; put 'put ''aHIubGVuZ3RoXT17dDoidCIsdjp3aX0sKytTcjticmVhaztjYXNlIi8iOmhyW2hyLmxlbmd0aF09aHIubGVuZ3RoPjAmJmpsKGhyW2hyLmxlbmd0aC0xXS52KT97dDoidCIsdjpZbn06e3Q6InQiLHY6Ii8ifSwrK1NyO2JyZWFrO2RlZmF1bHQ6aWYoLTE9PT0iLCQtKy8oKTohXiYnfnt9PD49''@;'; put 'put ''XHUyMGFjYWNmaWprbG9wcXJ0dXZ3eHpQIi5pbmRleE9mKFBpKSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCBjaGFyYWN0ZXIgIitQaSsiIGluICIrY24pO2hyW2hyLmxlbmd0aF09e3Q6InQiLHY6UGl9LCsrU3J9dmFyIFptLFJsPTAsV2c9MDtmb3IoU3I9aHIubGVuZ3RoLTEsSmE9''@;'; put 'put ''InQiO1NyPj0wOy0tU3Ipc3dpdGNoKGhyW1NyXS50KXtjYXNlImgiOmNhc2UiSCI6aHJbU3JdLnQ9UnMsSmE9ImgiLFJsPDEmJihSbD0xKTticmVhaztjYXNlInMiOihabT1ocltTcl0udi5tYXRjaCgvXC4wKyQvKSkmJihXZz1NYXRoLm1heChXZyxabVswXS5sZW5ndGgtMSkpLFJsPDMmJihS''@;'; put 'put ''bD0zKTtjYXNlImQiOmNhc2UieSI6Y2FzZSJNIjpjYXNlImUiOkphPWhyW1NyXS50O2JyZWFrO2Nhc2UibSI6InMiPT09SmEmJihocltTcl0udD0iTSIsUmw8MiYmKFJsPTIpKTticmVhaztjYXNlIlgiOmJyZWFrO2Nhc2UiWiI6Umw8MSYmaHJbU3JdLnYubWF0Y2goL1tIaF0vKSYmKFJsPTEp''@;'; put 'put ''LFJsPDImJmhyW1NyXS52Lm1hdGNoKC9bTW1dLykmJihSbD0yKSxSbDwzJiZocltTcl0udi5tYXRjaCgvW1NzXS8pJiYoUmw9Myl9c3dpdGNoKFJsKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOkRpLnU+PS41JiYoRGkudT0wLCsrRGkuUyksRGkuUz49NjAmJihEaS5TPTAsKytEaS5NKSxEaS5NPj02''@;'; put 'put ''MCYmKERpLk09MCwrK0RpLkgpO2JyZWFrO2Nhc2UgMjpEaS51Pj0uNSYmKERpLnU9MCwrK0RpLlMpLERpLlM+PTYwJiYoRGkuUz0wLCsrRGkuTSl9dmFyIEluLHZuPSIiO2ZvcihTcj0wO1NyPGhyLmxlbmd0aDsrK1NyKXN3aXRjaChocltTcl0udCl7Y2FzZSJ0IjpjYXNlIlQiOmNhc2UiICI6''@;'; put 'put ''Y2FzZSJEIjpicmVhaztjYXNlIlgiOmhyW1NyXS52PSIiLGhyW1NyXS50PSI7IjticmVhaztjYXNlImQiOmNhc2UibSI6Y2FzZSJ5IjpjYXNlImgiOmNhc2UiSCI6Y2FzZSJNIjpjYXNlInMiOmNhc2UiZSI6Y2FzZSJiIjpjYXNlIloiOmNhc2UiXHUwZTI3IjpjYXNlIlx1MGUxNCI6Y2FzZSJc''@;'; put 'put ''dTBlMWIiOmNhc2UiXHUwZTBhIjpjYXNlIlx1MGUxOSI6Y2FzZSJcdTBlMTciOmhyW1NyXS52PXpvKGhyW1NyXS50LmNoYXJDb2RlQXQoMCksaHJbU3JdLnYsRGksV2cpLGhyW1NyXS50PSJ0IjticmVhaztjYXNlIm4iOmNhc2UiPyI6Zm9yKEluPVNyKzE7bnVsbCE9aHJbSW5dJiYoIj8iPT09''@;'; put 'put ''KFBpPWhyW0luXS50KXx8IkQiPT09UGl8fCgiICI9PT1QaXx8InQiPT09UGkpJiZudWxsIT1ocltJbisxXSYmKCI/Ij09PWhyW0luKzFdLnR8fCJ0Ij09PWhyW0luKzFdLnQmJiIvIj09PWhyW0luKzFdLnYpfHwiKCI9PT1ocltTcl0udCYmKCIgIj09PVBpfHwibiI9PT1QaXx8IikiPT09UGkp''@;'; put 'put ''fHwidCI9PT1QaSYmKCIvIj09PWhyW0luXS52fHwiICI9PT1ocltJbl0udiYmbnVsbCE9aHJbSW4rMV0mJiI/Ij09aHJbSW4rMV0udCkpOylocltTcl0udis9aHJbSW5dLnYsaHJbSW5dPXt2OiIiLHQ6IjsifSwrK0luO3ZuKz1ocltTcl0udixTcj1Jbi0xO2JyZWFrO2Nhc2UiRyI6aHJbU3Jd''@;'; put 'put ''LnQ9InQiLGhyW1NyXS52PV9hKEFuLEduKX12YXIgWXQscm4sYm49IiI7aWYodm4ubGVuZ3RoPjApezQwPT12bi5jaGFyQ29kZUF0KDApPyhZdD1BbjwwJiY0NT09PXZuLmNoYXJDb2RlQXQoMCk/LUFuOkFuLHJuPXdvKCJuIix2bixZdCkpOihybj13bygibiIsdm4sWXQ9QW48MCYmQWk+MT8t''@;'; put 'put ''QW46QW4pLFl0PDAmJmhyWzBdJiYidCI9PWhyWzBdLnQmJihybj1ybi5zdWJzdHIoMSksaHJbMF0udj0iLSIraHJbMF0udikpLEluPShybj1ybi5yZXBsYWNlKC9bLFwuXS9nLGZ1bmN0aW9uKFVyKXtyZXR1cm4iLiI9PVVyP2tyOmtpfSkpLmxlbmd0aC0xO3ZhciBTbj1oci5sZW5ndGg7Zm9y''@;'; put 'put ''KFNyPTA7U3I8aHIubGVuZ3RoOysrU3IpaWYobnVsbCE9aHJbU3JdJiYidCIhPWhyW1NyXS50JiZocltTcl0udi5pbmRleE9mKCIuIik+LTEpe1NuPVNyO2JyZWFrfXZhciBVbj1oci5sZW5ndGg7aWYoU249PT1oci5sZW5ndGgmJi0xPT09cm4uaW5kZXhPZigiRSIpKXtmb3IoU3I9aHIubGVu''@;'; put 'put ''Z3RoLTE7U3I+PTA7LS1TciludWxsPT1ocltTcl18fC0xPT09Im4/Ii5pbmRleE9mKGhyW1NyXS50KXx8KEluPj1ocltTcl0udi5sZW5ndGgtMT9ocltTcl0udj1ybi5zdWJzdHIoMSsoSW4tPWhyW1NyXS52Lmxlbmd0aCksaHJbU3JdLnYubGVuZ3RoKTpJbjwwP2hyW1NyXS52PSIiOihocltT''@;'; put 'put ''cl0udj1ybi5zdWJzdHIoMCxJbisxKSxJbj0tMSksaHJbU3JdLnQ9InQiLFVuPVNyKTtJbj49MCYmVW48aHIubGVuZ3RoJiYoaHJbVW5dLnY9cm4uc3Vic3RyKDAsSW4rMSkraHJbVW5dLnYpfWVsc2UgaWYoU24hPT1oci5sZW5ndGgmJi0xPT09cm4uaW5kZXhPZigiRSIpKXtmb3IoSW49cm4u''@;'; put 'put ''aW5kZXhPZihrciktMSxTcj1TbjtTcj49MDstLVNyKWlmKG51bGwhPWhyW1NyXSYmLTEhPT0ibj8iLmluZGV4T2YoaHJbU3JdLnQpKXtmb3IoZGE9aHJbU3JdLnYuaW5kZXhPZigiLiIpPi0xJiZTcj09PVNuP2hyW1NyXS52LmluZGV4T2YoIi4iKS0xOmhyW1NyXS52Lmxlbmd0aC0xLGJuPWhy''@;'; put 'put ''W1NyXS52LnN1YnN0cihkYSsxKTtkYT49MDstLWRhKUluPj0wJiYoIjAiPT09aHJbU3JdLnYuY2hhckF0KGRhKXx8IiMiPT09aHJbU3JdLnYuY2hhckF0KGRhKSkmJihibj1ybi5jaGFyQXQoSW4tLSkrYm4pO2hyW1NyXS52PWJuLGhyW1NyXS50PSJ0IixVbj1Tcn1mb3IoSW4+PTAmJlVuPGhy''@;'; put 'put ''Lmxlbmd0aCYmKGhyW1VuXS52PXJuLnN1YnN0cigwLEluKzEpK2hyW1VuXS52KSxJbj1ybi5pbmRleE9mKGtyKSsxLFNyPVNuO1NyPGhyLmxlbmd0aDsrK1NyKWlmKG51bGwhPWhyW1NyXSYmKC0xIT09Im4/KCIuaW5kZXhPZihocltTcl0udCl8fFNyPT09U24pKXtmb3IoZGE9aHJbU3JdLnYu''@;'; put 'put ''aW5kZXhPZihrcik+LTEmJlNyPT09U24/aHJbU3JdLnYuaW5kZXhPZihrcikrMTowLGJuPWhyW1NyXS52LnN1YnN0cigwLGRhKTtkYTxocltTcl0udi5sZW5ndGg7KytkYSlJbjxybi5sZW5ndGgmJihibis9cm4uY2hhckF0KEluKyspKTtocltTcl0udj1ibixocltTcl0udD0idCIsVW49U3J9''@;'; put 'put ''fX1mb3IoU3I9MDtTcjxoci5sZW5ndGg7KytTciludWxsIT1ocltTcl0mJiJuPyIuaW5kZXhPZihocltTcl0udCk+LTEmJihocltTcl0udj13byhocltTcl0udCxocltTcl0udixZdD1BaT4xJiZBbjwwJiZTcj4wJiYiLSI9PT1ocltTci0xXS52Py1BbjpBbikucmVwbGFjZSgvXC4vZyxrciku''@;'; put 'put ''cmVwbGFjZSgvLC8sa2kpLGhyW1NyXS50PSJ0Iik7dmFyIGJyPSIiO2ZvcihTcj0wO1NyIT09aHIubGVuZ3RoOysrU3IpbnVsbCE9aHJbU3JdJiYoYnIrPWhyW1NyXS52KTtyZXR1cm4gYnJ9TC5pc19kYXRlPWpsLEwuX2V2YWw9Qm47dmFyIGVsPS9cW1s9PD5dLyxJdT0vXFsoPXw+Wz1dP3w8''@;'; put 'put ''Wz49XT8pKC0/XGQrKD86XC5cZCopPylcXS87ZnVuY3Rpb24gcHUoY24sQW4pe2lmKG51bGw9PUFuKXJldHVybiExO3ZhciBHbj1wYXJzZUZsb2F0KEFuWzJdKTtzd2l0Y2goQW5bMV0pe2Nhc2UiPSI6aWYoY249PUduKXJldHVybiEwO2JyZWFrO2Nhc2UiPiI6aWYoY24+R24pcmV0dXJuITA7''@;'; put 'put ''YnJlYWs7Y2FzZSI8IjppZihjbjxHbilyZXR1cm4hMDticmVhaztjYXNlIjw+IjppZihjbiE9R24pcmV0dXJuITA7YnJlYWs7Y2FzZSI+PSI6aWYoY24+PUduKXJldHVybiEwO2JyZWFrO2Nhc2UiPD0iOmlmKGNuPD1HbilyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBvMShjbixBbixHbil7''@;'; put 'put ''bnVsbD09R24mJihHbj17fSk7dmFyIEFpPSIiO3N3aXRjaCh0eXBlb2YgY24pe2Nhc2Uic3RyaW5nIjpBaT0ibS9kL3l5Ij09Y24mJkduLmRhdGVORj9Hbi5kYXRlTkY6Y247YnJlYWs7Y2FzZSJudW1iZXIiOm51bGw9PShBaT0xND09Y24mJkduLmRhdGVORj9Hbi5kYXRlTkY6KG51bGwhPUdu''@;'; put 'put ''LnRhYmxlP0duLnRhYmxlOmJ0KVtjbl0pJiYoQWk9R24udGFibGUmJkduLnRhYmxlW0Z0W2NuXV18fGJ0W0Z0W2NuXV0pLG51bGw9PUFpJiYoQWk9THRbY25dfHwiR2VuZXJhbCIpfWlmKEdlKEFpLDApKXJldHVybiBfYShBbixHbik7QW4gaW5zdGFuY2VvZiBEYXRlJiYoQW49cW4oQW4sR24u''@;'; put 'put ''ZGF0ZTE5MDQpKTt2YXIgaHI9ZnVuY3Rpb24gVmMoY24sQW4pe3ZhciBHbj1ibyhjbiksQWk9R24ubGVuZ3RoLGhyPUduW0FpLTFdLmluZGV4T2YoIkAiKTtpZihBaTw0JiZocj4tMSYmLS1BaSxHbi5sZW5ndGg+NCl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBmaW5kIHJpZ2h0IGZvcm1hdCBm''@;'; put 'put ''b3IgfCIrR24uam9pbigifCIpKyJ8Iik7aWYoIm51bWJlciIhPXR5cGVvZiBBbilyZXR1cm5bNCw0PT09R24ubGVuZ3RofHxocj4tMT9HbltHbi5sZW5ndGgtMV06IkAiXTtzd2l0Y2goR24ubGVuZ3RoKXtjYXNlIDE6R249aHI+LTE/WyJHZW5lcmFsIiwiR2VuZXJhbCIsIkdlbmVyYWwiLEdu''@;'; put 'put ''WzBdXTpbR25bMF0sR25bMF0sR25bMF0sIkAiXTticmVhaztjYXNlIDI6R249aHI+LTE/W0duWzBdLEduWzBdLEduWzBdLEduWzFdXTpbR25bMF0sR25bMV0sR25bMF0sIkAiXTticmVhaztjYXNlIDM6R249aHI+LTE/W0duWzBdLEduWzFdLEduWzBdLEduWzJdXTpbR25bMF0sR25bMV0sR25b''@;'; put 'put ''Ml0sIkAiXX12YXIgT2k9QW4+MD9HblswXTpBbjwwP0duWzFdOkduWzJdO2lmKC0xPT09R25bMF0uaW5kZXhPZigiWyIpJiYtMT09PUduWzFdLmluZGV4T2YoIlsiKSlyZXR1cm5bQWksT2ldO2lmKG51bGwhPUduWzBdLm1hdGNoKGVsKXx8bnVsbCE9R25bMV0ubWF0Y2goZWwpKXt2YXIgU3I9''@;'; put 'put ''R25bMF0ubWF0Y2goSXUpLFBpPUduWzFdLm1hdGNoKEl1KTtyZXR1cm4gcHUoQW4sU3IpP1tBaSxHblswXV06cHUoQW4sUGkpP1tBaSxHblsxXV06W0FpLEduW251bGwhPVNyJiZudWxsIT1QaT8yOjFdXX1yZXR1cm5bQWksT2ldfShBaSxBbik7aWYoR2UoaHJbMV0pKXJldHVybiBfYShBbixH''@;'; put 'put ''bik7aWYoITA9PT1BbilBbj0iVFJVRSI7ZWxzZSBpZighMT09PUFuKUFuPSJGQUxTRSI7ZWxzZSBpZigiIj09PUFufHxudWxsPT1BbilyZXR1cm4iIjtyZXR1cm4gQm4oaHJbMV0sQW4sR24saHJbMF0pfWZ1bmN0aW9uIEJjKGNuLEFuKXtpZigibnVtYmVyIiE9dHlwZW9mIEFuKXtBbj0rQW58''@;'; put 'put ''fC0xO2Zvcih2YXIgR249MDtHbjwzOTI7KytHbilpZihudWxsIT1idFtHbl0pe2lmKGJ0W0duXT09Y24pe0FuPUduO2JyZWFrfX1lbHNlIEFuPDAmJihBbj1Hbik7QW48MCYmKEFuPTM5MSl9cmV0dXJuIGJ0W0FuXT1jbixBbn1MLmxvYWQ9QmMsTC5fdGFibGU9YnQsTC5nZXRfdGFibGU9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gYnR9LEwubG9hZF90YWJsZT1mdW5jdGlvbihBbil7Zm9yKHZhciBHbj0wOzM5MiE9R247KytHbil2b2lkIDAhPT1BbltHbl0mJkJjKEFuW0duXSxHbil9LEwuaW5pdF90YWJsZT1vdCxMLmZvcm1hdD1vMSxMLmdldGxvY2FsZT1mdW5jdGlvbiBWcigpe3JldHVybiBX''@;'; put 'put ''bnx8ImVuLVVTIn0sTC5zZXRsb2NhbGU9ZnVuY3Rpb24gd3IoY24pe2lmKGZ1bmN0aW9uIHpyKGNuKXt2YXIgQW49MDtzd2l0Y2goKFdufHwiIikudG9Mb3dlckNhc2UoKSl7Y2FzZSJ6aC10dyI6Y2FzZSJ6aC1jbiI6Y2FzZSJqYS1qcCI6Y2FzZSJrby1rciI6Zm9yKEFuPTI3O0FuPD0zNjsr''@;'; put 'put ''K0FuKWRlbGV0ZSBjbltBbl07Zm9yKEFuPTUwO0FuPD01ODsrK0FuKWRlbGV0ZSBjbltBbl07YnJlYWs7Y2FzZSJ0aC10aCI6Zm9yKEFuPTU5O0FuPD02MjsrK0FuKWRlbGV0ZSBjbltBbl07Zm9yKEFuPTY3O0FuPD04MTsrK0FuKWRlbGV0ZSBjbltBbl19fShidCksV249Y24sVm4oYnQpLHR5''@;'; put 'put ''cGVvZiBJbnRsPCJ1Iil7dmFyIEFuPUludGwuRGF0ZVRpbWVGb3JtYXQoY24pO2lmKEFuLmZvcm1hdFRvUGFydHMpe2Zvcih2YXIgR249QW4uZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgyMDIwLDAsNSwwLDAsMCkpLEFpPTA7QWk8NzsrK0FpKWN0W0FpXVsxXT1JbnRsLkRhdGVUaW1lRm9ybWF0''@;'; put 'put ''KGNuLHt3ZWVrZGF5OiJsb25nIn0pLmZvcm1hdFRvUGFydHMobmV3IERhdGUoMjAyMCwwLDUrQWksMCwwLDApKVswXS52YWx1ZSxjdFtBaV1bMF09SW50bC5EYXRlVGltZUZvcm1hdChjbix7d2Vla2RheToic2hvcnQifSkuZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgyMDIwLDAsNStBaSwwLDAs''@;'; put 'put ''MCkpWzBdLnZhbHVlO2Zvcih2YXIgaHI9MDtocjwxMjsrK2hyKXh0W2hyXVsyXT1JbnRsLkRhdGVUaW1lRm9ybWF0KGNuLHttb250aDoibG9uZyJ9KS5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKDIwMjAsaHIsMiwwLDAsMCkpWzBdLnZhbHVlLHh0W2hyXVsxXT1JbnRsLkRhdGVUaW1lRm9ybWF0''@;'; put 'put ''KGNuLHttb250aDoic2hvcnQifSkuZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgyMDIwLGhyLDIsMCwwLDApKVswXS52YWx1ZSx4dFtocl1bMF09eHRbaHJdWzFdLnNsaWNlKDAsMSk7Zm9yKHZhciBPaT0iIixTcj0wO1NyPEduLmxlbmd0aDsrK1NyKXt2YXIgUGk9R25bU3JdLnZhbHVlO3N3aXRj''@;'; put 'put ''aChHbltTcl0udHlwZSl7Y2FzZSJ5ZWFyIjpPaSs9Mj09UGkubGVuZ3RoPyJ5eSI6Inl5eXkiO2JyZWFrO2Nhc2UibW9udGgiOk9pKz0iMSI9PVBpPyJtIjoiMDEiPT1QaT8ibW0iOlBpPT14dFswXVsxXT8ibW1tIjpQaT09eHRbMF1bMl0/Im1tbW0iOlBpPT14dFswXVswXT8ibW1tbW0iOiJt''@;'; put 'put ''bSI7YnJlYWs7Y2FzZSJkYXkiOk9pKz0iNSI9PVBpPyJkIjoiMDUiPT1QaT8iZGQiOlBpPT1jdFswXVswXT8iZGRkIjpQaT09Y3RbMF1bMV0/ImRkZGQiOiJkZCI7YnJlYWs7Y2FzZSJsaXRlcmFsIjpPaSs9UGkucmVwbGFjZSgvLi9nLCJcXCQmIiksMT09UGkubGVuZ3RoJiYoWW49UGkpfX0o''@;'; put 'put ''Y24ubWF0Y2goL2VuL2kpJiZjbi5tYXRjaCgvdXMvaSl8fCFjbikmJihPaT0ibS9kL3l5IiksYnRbMTRdPU9pfWVsc2UiamEtanAiPT1jbi50b0xvd2VyQ2FzZSgpJiYoYnRbMTRdPSJ5eXl5XFwvbVxcL2QiKTt2YXIgSmE9SW50bC5OdW1iZXJGb3JtYXQoY24se30pLmZvcm1hdCgxMjM0NTY3''@;'; put 'put ''Ljg5KTtKYSYmKGtpPShKYS5tYXRjaCgvMSguKikyLyl8fFtdKVsxXSxrcj0oSmEubWF0Y2goLzcoLiopOC8pfHxbXSlbMV0pfXByW2NuLnRvTG93ZXJDYXNlKCldfHwocHJbY24udG9Mb3dlckNhc2UoKV09eyIuIjprciwiLCI6a2l9KSx0cj1ldCh5cj1wcltjbi50b0xvd2VyQ2FzZSgpXXx8''@;'; put 'put ''cHJbImVuLXVzIl0pfSxMLm5vcm1hbGl6ZT1mdW5jdGlvbiBGcyhjbil7Zm9yKHZhciBBbj0wLEduPTAsQWk9IiIsaHI9IiIsT2k9IiIsU3I9eXIueXx8InkiLFBpPVNyLnRvVXBwZXJDYXNlKCksSmE9eXIuZHx8ImQiLERpPUphLnRvVXBwZXJDYXNlKCksZGE9eXJbIi4iXSxJaT15clsiLCJd''@;'; put 'put ''LFJzPSIwIz9FKy0lIit5clsiLCJdK2RhO0FuPGNuLmxlbmd0aDspc3dpdGNoKEFpPWNuLmNoYXJBdChBbikpe2Nhc2UiRyI6QW4rKyxPaSs9QWk7YnJlYWs7Y2FzZSciJzpmb3IoT2krPUFpOzM0IT09KEduPWNuLmNoYXJDb2RlQXQoKytBbikpJiZBbjxjbi5sZW5ndGg7KU9pKz1TdHJpbmcu''@;'; put 'put ''ZnJvbUNoYXJDb2RlKEduKTtPaSs9JyInLCsrQW47YnJlYWs7Y2FzZSJcXCI6Y2FzZSJfIjpPaSs9Y24uc2xpY2UoQW4sQW4rMiksQW4rPTI7YnJlYWs7Y2FzZSJAIjpPaSs9QWksKytBbjticmVhaztjYXNlIkIiOmNhc2UiYiI6KytBbixPaSs9QWk7YnJlYWs7Y2FzZSBTcjpjYXNlIFBpOmNh''@;'; put 'put ''c2UgSmE6Y2FzZSBEaTpPaSs9dHJbQWkudG9Mb3dlckNhc2UoKV0sKytBbjticmVhaztjYXNlIk0iOmNhc2UiSCI6Y2FzZSJTIjpjYXNlIkUiOmNhc2UibSI6Y2FzZSJoIjpjYXNlInMiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlIkEiOmNhc2UiYSI6T2krPUFpLCsrQW47YnJlYWs7Y2FzZSJbIjpm''@;'; put 'put ''b3IoaHI9QWk7Il0iIT09Y24uY2hhckF0KEFuKyspJiZBbjxjbi5sZW5ndGg7KWhyKz1jbi5jaGFyQXQoQW4pO09pKz1ocjticmVhaztjYXNlIElpOk9pKz0nIicrQWkrJyInLCsrQW47YnJlYWs7Y2FzZSBkYTppZighKEFuPGNuLmxlbmd0aCYmKFJzLmluZGV4T2YoQWk9Y24uY2hhckF0KCsr''@;'; put 'put ''QW4pKT4tMXx8IlxcIj09QWkmJiItIj09Y24uY2hhckF0KEFuKzEpJiYiMCMiLmluZGV4T2YoY24uY2hhckF0KEFuKzIpKT4tMSkpKXtPaSs9JyInK2RhKyciJzticmVha31BaT1kYSwtLUFuO2Nhc2UiMCI6Y2FzZSIjIjpmb3IoT2krPXRyW0FpLnRvTG93ZXJDYXNlKCldfHxBaTtBbjxjbi5s''@;'; put 'put ''ZW5ndGgmJihScy5pbmRleE9mKEFpPWNuLmNoYXJBdCgrK0FuKSk+LTF8fCJcXCI9PUFpJiYiLSI9PWNuLmNoYXJBdChBbisxKSYmIjAjIi5pbmRleE9mKGNuLmNoYXJBdChBbisyKSk+LTEpOylPaSs9dHJbQWkudG9Mb3dlckNhc2UoKV18fEFpO2JyZWFrO2Nhc2UiPyI6Zm9yKE9pKz1BaTtj''@;'; put 'put ''bi5jaGFyQXQoKytBbik9PT1BaTspT2krPUFpO2JyZWFrO2Nhc2UiKiI6T2krPUFpLCsrQW4sKCIgIj09Y24uY2hhckF0KEFuKXx8IioiPT1jbi5jaGFyQXQoQW4pKSYmKE9pKz1jbi5jaGFyQXQoQW4pLCsrQW4pO2JyZWFrO2Nhc2UiKCI6Y2FzZSIpIjpPaSs9QWksKytBbjticmVhaztjYXNl''@;'; put 'put ''IjEiOmNhc2UiMiI6Y2FzZSIzIjpjYXNlIjQiOmNhc2UiNSI6Y2FzZSI2IjpjYXNlIjciOmNhc2UiOCI6Y2FzZSI5Ijpmb3IoT2krPUFpO0FuPGNuLmxlbmd0aCYmIjAxMjM0NTY3ODkiLmluZGV4T2YoY24uY2hhckF0KCsrQW4pKT4tMTspT2krPWNuLmNoYXJBdChBbik7YnJlYWs7ZGVmYXVs''@;'; put 'put ''dDpPaSs9QWksKytBbn1yZXR1cm4gT2l9LEwuZ2V0Y3VycmVuY3k9ZnVuY3Rpb24gcmEoKXtyZXR1cm4gRml8fCJVU0QifSxMLnNldGN1cnJlbmN5PWZ1bmN0aW9uIG9hKGNuKXtGaT1jbix3aT10eXBlb2YgSW50bDwidSI/SW50bC5OdW1iZXJGb3JtYXQoV24se3N0eWxlOiJjdXJyZW5jeSIs''@;'; put 'put ''Y3VycmVuY3lEaXNwbGF5OiJzeW1ib2wiLGN1cnJlbmN5OmNufSkuZm9ybWF0KDApLnJlcGxhY2UoL1swXC5cLFxzXS9nLCIiKToiJCJ9fTthZShBKTt2YXIgeGUsbmU9eyJHZW5lcmFsIE51bWJlciI6IkdlbmVyYWwiLCJHZW5lcmFsIERhdGUiOkEuX3RhYmxlWzIyXSwiTG9uZyBEYXRlIjoi''@;'; put 'put ''ZGRkZCwgbW1tbSBkZCwgeXl5eSIsIk1lZGl1bSBEYXRlIjpBLl90YWJsZVsxNV0sIlNob3J0IERhdGUiOkEuX3RhYmxlWzE0XSwiTG9uZyBUaW1lIjpBLl90YWJsZVsxOV0sIk1lZGl1bSBUaW1lIjpBLl90YWJsZVsxOF0sIlNob3J0IFRpbWUiOkEuX3RhYmxlWzIwXSxDdXJyZW5jeTonIiQi''@;'; put 'put ''IywjIzAuMDBfKTtbUmVkXVxcKCIkIiMsIyMwLjAwXFwpJyxGaXhlZDpBLl90YWJsZVsyXSxTdGFuZGFyZDpBLl90YWJsZVs0XSxQZXJjZW50OkEuX3RhYmxlWzEwXSxTY2llbnRpZmljOkEuX3RhYmxlWzExXSwiWWVzL05vIjonIlllcyI7IlllcyI7Ik5vIjtAJywiVHJ1ZS9GYWxzZSI6JyJU''@;'; put 'put ''cnVlIjsiVHJ1ZSI7IkZhbHNlIjtAJywiT24vT2ZmIjonIlllcyI7IlllcyI7Ik5vIjtAJ30sc2U9ezU6JyIkIiMsIyMwXyk7XFwoIiQiIywjIzBcXCknLDY6JyIkIiMsIyMwXyk7W1JlZF1cXCgiJCIjLCMjMFxcKScsNzonIiQiIywjIzAuMDBfKTtcXCgiJCIjLCMjMC4wMFxcKScsODonIiQi''@;'; put 'put ''IywjIzAuMDBfKTtbUmVkXVxcKCIkIiMsIyMwLjAwXFwpJywyMzoiR2VuZXJhbCIsMjQ6IkdlbmVyYWwiLDI1OiJHZW5lcmFsIiwyNjoiR2VuZXJhbCIsMjc6Im0vZC95eSIsMjg6Im0vZC95eSIsMjk6Im0vZC95eSIsMzA6Im0vZC95eSIsMzE6Im0vZC95eSIsMzI6Img6bW06c3MiLDMzOiJo''@;'; put 'put ''Om1tOnNzIiwzNDoiaDptbTpzcyIsMzU6Img6bW06c3MiLDM2OiJtL2QveXkiLDQxOidfKCogIywjIzBfKTtfKCogKCMsIyMwKTtfKCogIi0iXyk7XyhAXyknLDQyOidfKCIkIiogIywjIzBfKTtfKCIkIiogKCMsIyMwKTtfKCIkIiogIi0iXyk7XyhAXyknLDQzOidfKCogIywjIzAuMDBfKTtf''@;'; put 'put ''KCogKCMsIyMwLjAwKTtfKCogIi0iPz9fKTtfKEBfKScsNDQ6J18oIiQiKiAjLCMjMC4wMF8pO18oIiQiKiAoIywjIzAuMDApO18oIiQiKiAiLSI/P18pO18oQF8pJyw1MDoibS9kL3l5Iiw1MToibS9kL3l5Iiw1MjoibS9kL3l5Iiw1MzoibS9kL3l5Iiw1NDoibS9kL3l5Iiw1NToibS9kL3l5''@;'; put 'put ''Iiw1NjoibS9kL3l5Iiw1NzoibS9kL3l5Iiw1ODoibS9kL3l5Iiw1OToiMCIsNjA6IjAuMDAiLDYxOiIjLCMjMCIsNjI6IiMsIyMwLjAwIiw2MzonIiQiIywjIzBfKTtcXCgiJCIjLCMjMFxcKScsNjQ6JyIkIiMsIyMwXyk7W1JlZF1cXCgiJCIjLCMjMFxcKScsNjU6JyIkIiMsIyMwLjAwXyk7''@;'; put 'put ''XFwoIiQiIywjIzAuMDBcXCknLDY2OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLDY3OiIwJSIsNjg6IjAuMDAlIiw2OToiIyA/Lz8iLDcwOiIjID8/Lz8/Iiw3MToibS9kL3l5Iiw3MjoibS9kL3l5Iiw3MzoiZC1tbW0teXkiLDc0OiJkLW1tbSIsNzU6Im1tbS15eSIs''@;'; put 'put ''NzY6Img6bW0iLDc3OiJoOm1tOnNzIiw3ODoibS9kL3l5IGg6bW0iLDc5OiJtbTpzcyIsODA6IltoXTptbTpzcyIsODE6Im1tc3MuMCJ9LENlPS9bZERdK3xbbU1dK3xbeVllRV0rfFtIaF0rfFtTc10rL2c7IWZ1bmN0aW9uKFMpe1MudmVyc2lvbj0iMS4yLjAiO3ZhciBrPWZ1bmN0aW9uIEwo''@;'; put 'put ''KXtmb3IodmFyIHBlPTAsYmU9bmV3IEFycmF5KDI1NiksTmU9MDsyNTYhPU5lOysrTmUpYmVbTmVdPXBlPTEmKHBlPTEmKHBlPTEmKHBlPTEmKHBlPTEmKHBlPTEmKHBlPTEmKHBlPTEmKHBlPU5lKT8tMzA2Njc0OTEyXnBlPj4+MTpwZT4+PjEpPy0zMDY2NzQ5MTJecGU+Pj4xOnBlPj4+MSk/''@;'; put 'put ''LTMwNjY3NDkxMl5wZT4+PjE6cGU+Pj4xKT8tMzA2Njc0OTEyXnBlPj4+MTpwZT4+PjEpPy0zMDY2NzQ5MTJecGU+Pj4xOnBlPj4+MSk/LTMwNjY3NDkxMl5wZT4+PjE6cGU+Pj4xKT8tMzA2Njc0OTEyXnBlPj4+MTpwZT4+PjEpPy0zMDY2NzQ5MTJecGU+Pj4xOnBlPj4+MTtyZXR1cm4gdHlw''@;'; put 'put ''ZW9mIEludDMyQXJyYXk8InUiP25ldyBJbnQzMkFycmF5KGJlKTpiZX0oKTtTLnRhYmxlPWssUy5ic3RyPWZ1bmN0aW9uIEcocGUsYmUpe2Zvcih2YXIgTmU9fmJlLEJlPXBlLmxlbmd0aC0xLEdlPTA7R2U8QmU7KU5lPShOZT1OZT4+Pjhea1syNTUmKE5lXnBlLmNoYXJDb2RlQXQoR2UrKykp''@;'; put 'put ''XSk+Pj44XmtbMjU1JihOZV5wZS5jaGFyQ29kZUF0KEdlKyspKV07cmV0dXJuIEdlPT09QmUmJihOZT1OZT4+Pjhea1syNTUmKE5lXnBlLmNoYXJDb2RlQXQoR2UpKV0pLH5OZX0sUy5idWY9ZnVuY3Rpb24gUShwZSxiZSl7aWYocGUubGVuZ3RoPjFlNClyZXR1cm4gZnVuY3Rpb24gbGUocGUs''@;'; put 'put ''YmUpe2Zvcih2YXIgTmU9fmJlLEJlPXBlLmxlbmd0aC03LEdlPTA7R2U8QmU7KU5lPShOZT0oTmU9KE5lPShOZT0oTmU9KE5lPShOZT1OZT4+Pjhea1syNTUmKE5lXnBlW0dlKytdKV0pPj4+OF5rWzI1NSYoTmVecGVbR2UrK10pXSk+Pj44XmtbMjU1JihOZV5wZVtHZSsrXSldKT4+Pjhea1sy''@;'; put 'put ''NTUmKE5lXnBlW0dlKytdKV0pPj4+OF5rWzI1NSYoTmVecGVbR2UrK10pXSk+Pj44XmtbMjU1JihOZV5wZVtHZSsrXSldKT4+Pjhea1syNTUmKE5lXnBlW0dlKytdKV0pPj4+OF5rWzI1NSYoTmVecGVbR2UrK10pXTtmb3IoO0dlPEJlKzc7KU5lPU5lPj4+OF5rWzI1NSYoTmVecGVbR2UrK10p''@;'; put 'put ''XTtyZXR1cm5+TmV9KHBlLGJlKTtmb3IodmFyIE5lPX5iZSxCZT1wZS5sZW5ndGgtMyxHZT0wO0dlPEJlOylOZT0oTmU9KE5lPShOZT1OZT4+Pjhea1syNTUmKE5lXnBlW0dlKytdKV0pPj4+OF5rWzI1NSYoTmVecGVbR2UrK10pXSk+Pj44XmtbMjU1JihOZV5wZVtHZSsrXSldKT4+Pjhea1sy''@;'; put 'put ''NTUmKE5lXnBlW0dlKytdKV07Zm9yKDtHZTxCZSszOylOZT1OZT4+Pjhea1syNTUmKE5lXnBlW0dlKytdKV07cmV0dXJufk5lfSxTLnN0cj1mdW5jdGlvbiBtZShwZSxiZSl7Zm9yKHZhciBldCxjdCxOZT1+YmUsQmU9MCxHZT1wZS5sZW5ndGg7QmU8R2U7KShldD1wZS5jaGFyQ29kZUF0KEJl''@;'; put 'put ''KyspKTwxMjg/TmU9TmU+Pj44XmtbMjU1JihOZV5ldCldOmV0PDIwNDg/TmU9KE5lPU5lPj4+OF5rWzI1NSYoTmVeKDE5MnxldD4+NiYzMSkpXSk+Pj44XmtbMjU1JihOZV4oMTI4fDYzJmV0KSldOmV0Pj01NTI5NiYmZXQ8NTczNDQ/KGV0PTY0KygxMDIzJmV0KSxjdD0xMDIzJnBlLmNoYXJD''@;'; put 'put ''b2RlQXQoQmUrKyksTmU9KE5lPShOZT0oTmU9TmU+Pj44XmtbMjU1JihOZV4oMjQwfGV0Pj44JjcpKV0pPj4+OF5rWzI1NSYoTmVeKDEyOHxldD4+MiY2MykpXSk+Pj44XmtbMjU1JihOZV4oMTI4fGN0Pj42JjE1fCgzJmV0KTw8NCkpXSk+Pj44XmtbMjU1JihOZV4oMTI4fDYzJmN0KSldKTpO''@;'; put 'put ''ZT0oTmU9KE5lPU5lPj4+OF5rWzI1NSYoTmVeKDIyNHxldD4+MTImMTUpKV0pPj4+OF5rWzI1NSYoTmVeKDEyOHxldD4+NiY2MykpXSk+Pj44XmtbMjU1JihOZV4oMTI4fDYzJmV0KSldO3JldHVybn5OZX19KHhlPXt9KTt2YXIgS2UseWU9ZnVuY3Rpb24oKXt2YXIgYmUsTD17fTtmdW5jdGlv''@;'; put 'put ''biBHKHZuKXtpZigiLyI9PXZuLmNoYXJBdCh2bi5sZW5ndGgtMSkpcmV0dXJuLTE9PT12bi5zbGljZSgwLC0xKS5pbmRleE9mKCIvIik/dm46Ryh2bi5zbGljZSgwLC0xKSk7dmFyIEluPXZuLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuLTE9PT1Jbj92bjp2bi5zbGljZSgwLEluKzEpfWZ1bmN0''@;'; put 'put ''aW9uIFEodm4pe2lmKCIvIj09dm4uY2hhckF0KHZuLmxlbmd0aC0xKSlyZXR1cm4gUSh2bi5zbGljZSgwLC0xKSk7dmFyIEluPXZuLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuLTE9PT1Jbj92bjp2bi5zbGljZShJbisxKX1mdW5jdGlvbiBsZSh2bixJbil7InN0cmluZyI9PXR5cGVvZiBJbiYm''@;'; put 'put ''KEluPW5ldyBEYXRlKEluKSk7dmFyIGJuPUluLmdldEhvdXJzKCk7Ym49KGJuPWJuPDw2fEluLmdldE1pbnV0ZXMoKSk8PDV8SW4uZ2V0U2Vjb25kcygpPj4+MSx2bi53cml0ZV9zaGlmdCgyLGJuKTt2YXIgWXQ9SW4uZ2V0RnVsbFllYXIoKS0xOTgwO1l0PShZdD1ZdDw8NHxJbi5nZXRNb250''@;'; put 'put ''aCgpKzEpPDw1fEluLmdldERhdGUoKSx2bi53cml0ZV9zaGlmdCgyLFl0KX1mdW5jdGlvbiBwZSh2bil7anQodm4sMCk7Zm9yKHZhciBJbj17fSxibj0wO3ZuLmw8PXZuLmxlbmd0aC00Oyl7dmFyIFl0PXZuLnJlYWRfc2hpZnQoMikscm49dm4ucmVhZF9zaGlmdCgyKSxTbj12bi5sK3JuLFVu''@;'; put 'put ''PXt9OzIxNTg5PT09WXQmJigxJihibj12bi5yZWFkX3NoaWZ0KDEpKSYmKFVuLm10aW1lPXZuLnJlYWRfc2hpZnQoNCkpLHJuPjUmJigyJmJuJiYoVW4uYXRpbWU9dm4ucmVhZF9zaGlmdCg0KSksNCZibiYmKFVuLmN0aW1lPXZuLnJlYWRfc2hpZnQoNCkpKSxVbi5tdGltZSYmKFVuLm10PW5l''@;'; put 'put ''dyBEYXRlKDFlMypVbi5tdGltZSkpKSx2bi5sPVNuLEluW1l0XT1Vbn1yZXR1cm4gSW59ZnVuY3Rpb24gTmUoKXtyZXR1cm4gYmV8fChiZT1iKDgzMzM3KSl9ZnVuY3Rpb24gQmUodm4sSW4pe2lmKDgwPT12blswXSYmNzU9PXZuWzFdKXJldHVybiBJaSh2bixJbik7aWYodm4ubGVuZ3RoPDUx''@;'; put 'put ''Mil0aHJvdyBuZXcgRXJyb3IoIkNGQiBmaWxlIHNpemUgIit2bi5sZW5ndGgrIiA8IDUxMiIpO3ZhciBibixybixTbixVbixicixVcixZdD01MTIseGk9W10sSnI9dm4uc2xpY2UoMCw1MTIpO2p0KEpyLDApO3ZhciBKaT1mdW5jdGlvbiBHZSh2bil7aWYoODA9PXZuW3ZuLmxdJiY3NT09dm5b''@;'; put 'put ''dm4ubCsxXSlyZXR1cm5bMCwwXTt2bi5jaGsod2ksIkhlYWRlciBTaWduYXR1cmU6ICIpLHZuLmwrPTE2O3ZhciBJbj12bi5yZWFkX3NoaWZ0KDIsInUiKTtyZXR1cm5bdm4ucmVhZF9zaGlmdCgyLCJ1IiksSW5dfShKcik7c3dpdGNoKGJuPUppWzBdKXtjYXNlIDM6WXQ9NTEyO2JyZWFrO2Nh''@;'; put 'put ''c2UgNDpZdD00MDk2O2JyZWFrO2Nhc2UgMDppZigwPT1KaVsxXSlyZXR1cm4gSWkodm4sSW4pO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJNYWpvciBWZXJzaW9uOiBFeHBlY3RlZCAzIG9yIDQgc2F3ICIrYm4pfTUxMiE9PVl0JiZqdChKcj12bi5zbGljZSgwLFl0KSwyOCk7dmFyIGppPXZu''@;'; put 'put ''LnNsaWNlKDAsWXQpOyFmdW5jdGlvbiBldCh2bixJbil7dmFyIGJuO3N3aXRjaCh2bi5sKz0yLGJuPXZuLnJlYWRfc2hpZnQoMikpe2Nhc2UgOTppZigzIT1Jbil0aHJvdyBuZXcgRXJyb3IoIlNlY3RvciBTaGlmdDogRXhwZWN0ZWQgOSBzYXcgIitibik7YnJlYWs7Y2FzZSAxMjppZig0IT1J''@;'; put 'put ''bil0aHJvdyBuZXcgRXJyb3IoIlNlY3RvciBTaGlmdDogRXhwZWN0ZWQgMTIgc2F3ICIrYm4pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJTZWN0b3IgU2hpZnQ6IEV4cGVjdGVkIDkgb3IgMTIgc2F3ICIrYm4pfXZuLmNoaygiMDYwMCIsIk1pbmkgU2VjdG9yIFNoaWZ0OiAiKSx2''@;'; put 'put ''bi5jaGsoIjAwMDAwMDAwMDAwMCIsIlJlc2VydmVkOiAiKX0oSnIsYm4pO3ZhciB1bz1Kci5yZWFkX3NoaWZ0KDQsImkiKTtpZigzPT09Ym4mJjAhPT11byl0aHJvdyBuZXcgRXJyb3IoIiMgRGlyZWN0b3J5IFNlY3RvcnM6IEV4cGVjdGVkIDAgc2F3ICIrdW8pO0pyLmwrPTQsVW49SnIucmVh''@;'; put 'put ''ZF9zaGlmdCg0LCJpIiksSnIubCs9NCxKci5jaGsoIjAwMTAwMDAwIiwiTWluaSBTdHJlYW0gQ3V0b2ZmIFNpemU6ICIpLGJyPUpyLnJlYWRfc2hpZnQoNCwiaSIpLHJuPUpyLnJlYWRfc2hpZnQoNCwiaSIpLFVyPUpyLnJlYWRfc2hpZnQoNCwiaSIpLFNuPUpyLnJlYWRfc2hpZnQoNCwiaSIp''@;'; put 'put ''O2Zvcih2YXIgemE9LTEsU2E9MDtTYTwxMDkmJiEoKHphPUpyLnJlYWRfc2hpZnQoNCwiaSIpKTwwKTsrK1NhKXhpW1NhXT16YTt2YXIgYXI9ZnVuY3Rpb24gY3Qodm4sSW4pe2Zvcih2YXIgYm49TWF0aC5jZWlsKHZuLmxlbmd0aC9JbiktMSxZdD1bXSxybj0xO3JuPGJuOysrcm4pWXRbcm4t''@;'; put 'put ''MV09dm4uc2xpY2Uocm4qSW4sKHJuKzEpKkluKTtyZXR1cm4gWXRbYm4tMV09dm4uc2xpY2UoYm4qSW4pLFl0fSh2bixZdCk7YnQoVXIsU24sYXIsWXQseGkpO3ZhciBfbD1mdW5jdGlvbiBrdCh2bixJbixibixZdCl7dmFyIHJuPXZuLmxlbmd0aCxTbj1bXSxVbj1bXSxicj1bXSxVcj1bXSx4''@;'; put 'put ''aT1ZdC0xLEpyPTAsSmk9MCxqaT0wLHVvPTA7Zm9yKEpyPTA7SnI8cm47KytKcilpZihicj1bXSwoamk9SnIrSW4pPj1ybiYmKGppLT1ybiksIVVuW2ppXSl7VXI9W107dmFyIHphPVtdO2ZvcihKaT1qaTtKaT49MDspe3phW0ppXT0hMCxVbltKaV09ITAsYnJbYnIubGVuZ3RoXT1KaSxVci5w''@;'; put 'put ''dXNoKHZuW0ppXSk7dmFyIFNhPWJuW01hdGguZmxvb3IoNCpKaS9ZdCldO2lmKFl0PDQrKHVvPTQqSmkmeGkpKXRocm93IG5ldyBFcnJvcigiRkFUIGJvdW5kYXJ5IGNyb3NzZWQ6ICIrSmkrIiA0ICIrWXQpO2lmKCF2bltTYV18fHphW0ppPVRsKHZuW1NhXSx1byldKWJyZWFrfVNuW2ppXT17''@;'; put 'put ''bm9kZXM6YnIsZGF0YTpPMChbVXJdKX19cmV0dXJuIFNufShhcixVbix4aSxZdCk7X2xbVW5dLm5hbWU9IiFEaXJlY3RvcnkiLHJuPjAmJmJyIT09dHImJihfbFticl0ubmFtZT0iIU1pbmlGQVQiKSxfbFt4aVswXV0ubmFtZT0iIUZBVCIsX2wuZmF0X2FkZHJzPXhpLF9sLnNzej1ZdDt2YXIg''@;'; put 'put ''RWk9W10scGQ9W10sVzc9W107KGZ1bmN0aW9uIEx0KHZuLEluLGJuLFl0LHJuLFNuLFVuLGJyKXtmb3IodmFyIHVvLFVyPTAseGk9WXQubGVuZ3RoPzI6MCxKcj1Jblt2bl0uZGF0YSxKaT0wLGppPTA7Smk8SnIubGVuZ3RoO0ppKz0xMjgpe3ZhciB6YT1Kci5zbGljZShKaSxKaSsxMjgpO2p0''@;'; put 'put ''KHphLDY0KSxqaT16YS5yZWFkX3NoaWZ0KDIpLHVvPWhjKHphLDAsamkteGkpLFl0LnB1c2godW8pO3ZhciBTYT17bmFtZTp1byx0eXBlOnphLnJlYWRfc2hpZnQoMSksY29sb3I6emEucmVhZF9zaGlmdCgxKSxMOnphLnJlYWRfc2hpZnQoNCwiaSIpLFI6emEucmVhZF9zaGlmdCg0LCJpIiks''@;'; put 'put ''Qzp6YS5yZWFkX3NoaWZ0KDQsImkiKSxjbHNpZDp6YS5yZWFkX3NoaWZ0KDE2KSxzdGF0ZTp6YS5yZWFkX3NoaWZ0KDQsImkiKSxzdGFydDowLHNpemU6MH07MCE9PXphLnJlYWRfc2hpZnQoMikremEucmVhZF9zaGlmdCgyKSt6YS5yZWFkX3NoaWZ0KDIpK3phLnJlYWRfc2hpZnQoMikmJihT''@;'; put 'put ''YS5jdD1KdCh6YSx6YS5sLTgpKSwwIT09emEucmVhZF9zaGlmdCgyKSt6YS5yZWFkX3NoaWZ0KDIpK3phLnJlYWRfc2hpZnQoMikremEucmVhZF9zaGlmdCgyKSYmKFNhLm10PUp0KHphLHphLmwtOCkpLFNhLnN0YXJ0PXphLnJlYWRfc2hpZnQoNCwiaSIpLFNhLnNpemU9emEucmVhZF9zaGlm''@;'; put 'put ''dCg0LCJpIiksU2Euc2l6ZTwwJiZTYS5zdGFydDwwJiYoU2Euc2l6ZT1TYS50eXBlPTAsU2Euc3RhcnQ9dHIsU2EubmFtZT0iIiksNT09PVNhLnR5cGU/KFVyPVNhLnN0YXJ0LHJuPjAmJlVyIT09dHImJihJbltVcl0ubmFtZT0iIVN0cmVhbURhdGEiKSk6U2Euc2l6ZT49NDA5Nj8oU2Euc3Rv''@;'; put 'put ''cmFnZT0iZmF0Iix2b2lkIDA9PT1JbltTYS5zdGFydF0mJihJbltTYS5zdGFydF09RnQoYm4sU2Euc3RhcnQsSW4uZmF0X2FkZHJzLEluLnNzeikpLEluW1NhLnN0YXJ0XS5uYW1lPVNhLm5hbWUsU2EuY29udGVudD1JbltTYS5zdGFydF0uZGF0YS5zbGljZSgwLFNhLnNpemUpKTooU2Euc3Rv''@;'; put 'put ''cmFnZT0ibWluaWZhdCIsU2Euc2l6ZTwwP1NhLnNpemU9MDpVciE9PXRyJiZTYS5zdGFydCE9PXRyJiZJbltVcl0mJihTYS5jb250ZW50PW90KFNhLEluW1VyXS5kYXRhLChJblticl18fHt9KS5kYXRhKSkpLFNhLmNvbnRlbnQmJmp0KFNhLmNvbnRlbnQsMCksU25bdW9dPVNhLFVuLnB1c2go''@;'; put 'put ''U2EpfX0pKFVuLF9sLGFyLEVpLHJuLHt9LHBkLGJyKSxmdW5jdGlvbiB4dCh2bixJbixibil7Zm9yKHZhciBZdD0wLHJuPTAsU249MCxVbj0wLGJyPTAsVXI9Ym4ubGVuZ3RoLHhpPVtdLEpyPVtdO1l0PFVyOysrWXQpeGlbWXRdPUpyW1l0XT1ZdCxJbltZdF09Ym5bWXRdO2Zvcig7YnI8SnIu''@;'; put 'put ''bGVuZ3RoOysrYnIpcm49dm5bWXQ9SnJbYnJdXS5MLFNuPXZuW1l0XS5SLFVuPXZuW1l0XS5DLHhpW1l0XT09PVl0JiYoLTEhPT1ybiYmeGlbcm5dIT09cm4mJih4aVtZdF09eGlbcm5dKSwtMSE9PVNuJiZ4aVtTbl0hPT1TbiYmKHhpW1l0XT14aVtTbl0pKSwtMSE9PVVuJiYoeGlbVW5dPVl0''@;'; put 'put ''KSwtMSE9PXJuJiZZdCE9eGlbWXRdJiYoeGlbcm5dPXhpW1l0XSxKci5sYXN0SW5kZXhPZihybik8YnImJkpyLnB1c2gocm4pKSwtMSE9PVNuJiZZdCE9eGlbWXRdJiYoeGlbU25dPXhpW1l0XSxKci5sYXN0SW5kZXhPZihTbik8YnImJkpyLnB1c2goU24pKTtmb3IoWXQ9MTtZdDxVcjsrK1l0''@;'; put 'put ''KXhpW1l0XT09PVl0JiYoLTEhPT1TbiYmeGlbU25dIT09U24/eGlbWXRdPXhpW1NuXTotMSE9PXJuJiZ4aVtybl0hPT1ybiYmKHhpW1l0XT14aVtybl0pKTtmb3IoWXQ9MTtZdDxVcjsrK1l0KWlmKDAhPT12bltZdF0udHlwZSl7aWYoKGJyPVl0KSE9eGlbYnJdKWRve0luW1l0XT1Jblticj14''@;'; put 'put ''aVticl1dKyIvIitJbltZdF19d2hpbGUoMCE9PWJyJiYtMSE9PXhpW2JyXSYmYnIhPXhpW2JyXSk7eGlbWXRdPS0xfWZvcihJblswXSs9Ii8iLFl0PTE7WXQ8VXI7KytZdCkyIT09dm5bWXRdLnR5cGUmJihJbltZdF0rPSIvIil9KHBkLFc3LEVpKSxFaS5zaGlmdCgpO3ZhciBZcj17RmlsZUlu''@;'; put 'put ''ZGV4OnBkLEZ1bGxQYXRoczpXN307cmV0dXJuIEluJiZJbi5yYXcmJihZci5yYXc9e2hlYWRlcjpqaSxzZWN0b3JzOmFyfSksWXJ9ZnVuY3Rpb24gb3Qodm4sSW4sYm4pe2Zvcih2YXIgcm49dm4uc2l6ZSxTbj1bXSxVbj12bi5zdGFydDtibiYmcm4+MCYmVW4+PTA7KVNuLnB1c2goSW4uc2xp''@;'; put 'put ''Y2UoVW4qeXIsVW4qeXIreXIpKSxybi09eXIsVW49VGwoYm4sNCpVbik7cmV0dXJuIDA9PT1Tbi5sZW5ndGg/VnQoMCk6aihTbikuc2xpY2UoMCx2bi5zaXplKX1mdW5jdGlvbiBidCh2bixJbixibixZdCxybil7dmFyIFNuPXRyO2lmKHZuPT09dHIpe2lmKDAhPT1Jbil0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIkRJRkFUIGNoYWluIHNob3J0ZXIgdGhhbiBleHBlY3RlZCIpfWVsc2UgaWYoLTEhPT12bil7dmFyIFVuPWJuW3ZuXSxicj0oWXQ+Pj4yKS0xO2lmKCFVbilyZXR1cm47Zm9yKHZhciBVcj0wO1VyPGJyJiYoU249VGwoVW4sNCpVcikpIT09dHI7KytVcilybi5wdXNoKFNuKTtidChUbChV''@;'; put 'put ''bixZdC00KSxJbi0xLGJuLFl0LHJuKX19ZnVuY3Rpb24gRnQodm4sSW4sYm4sWXQscm4pe3ZhciBTbj1bXSxVbj1bXTtybnx8KHJuPVtdKTt2YXIgYnI9WXQtMSxVcj0wLHhpPTA7Zm9yKFVyPUluO1VyPj0wOyl7cm5bVXJdPSEwLFNuW1NuLmxlbmd0aF09VXIsVW4ucHVzaCh2bltVcl0pO3Zh''@;'; put 'put ''ciBKcj1ibltNYXRoLmZsb29yKDQqVXIvWXQpXTtpZihZdDw0Kyh4aT00KlVyJmJyKSl0aHJvdyBuZXcgRXJyb3IoIkZBVCBib3VuZGFyeSBjcm9zc2VkOiAiK1VyKyIgNCAiK1l0KTtpZighdm5bSnJdKWJyZWFrO1VyPVRsKHZuW0pyXSx4aSl9cmV0dXJue25vZGVzOlNuLGRhdGE6TzAoW1Vu''@;'; put 'put ''XSl9fWZ1bmN0aW9uIEp0KHZuLEluKXtyZXR1cm4gbmV3IERhdGUoMWUzKigkbyh2bixJbis0KS8xZTcqTWF0aC5wb3coMiwzMikrJG8odm4sSW4pLzFlNy0xMTY0NDQ3MzYwMCkpfWZ1bmN0aW9uIENuKHZuLEluKXt2YXIgYm49SW58fHt9LFl0PWJuLnJvb3R8fCJSb290IEVudHJ5IjtpZih2''@;'; put 'put ''bi5GdWxsUGF0aHN8fCh2bi5GdWxsUGF0aHM9W10pLHZuLkZpbGVJbmRleHx8KHZuLkZpbGVJbmRleD1bXSksdm4uRnVsbFBhdGhzLmxlbmd0aCE9PXZuLkZpbGVJbmRleC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJpbmNvbnNpc3RlbnQgQ0ZCIHN0cnVjdHVyZSIpOzA9PT12bi5GdWxsUGF0''@;'; put 'put ''aHMubGVuZ3RoJiYodm4uRnVsbFBhdGhzWzBdPVl0KyIvIix2bi5GaWxlSW5kZXhbMF09e25hbWU6WXQsdHlwZTo1fSksYm4uQ0xTSUQmJih2bi5GaWxlSW5kZXhbMF0uY2xzaWQ9Ym4uQ0xTSUQpLGZ1bmN0aW9uIGxyKHZuKXt2YXIgSW49Ilx4MDFTaDMzdEo1IjtpZigheWUuZmluZCh2biwi''@;'; put 'put ''LyIrSW4pKXt2YXIgYm49VnQoNCk7Ym5bMF09NTUsYm5bMV09Ym5bM109NTAsYm5bMl09NTQsdm4uRmlsZUluZGV4LnB1c2goe25hbWU6SW4sdHlwZToyLGNvbnRlbnQ6Ym4sc2l6ZTo0LEw6NjksUjo2OSxDOjY5fSksdm4uRnVsbFBhdGhzLnB1c2godm4uRnVsbFBhdGhzWzBdK0luKSxxbih2''@;'; put 'put ''bil9fSh2bil9ZnVuY3Rpb24gcW4odm4sSW4pe0NuKHZuKTtmb3IodmFyIGJuPSExLFl0PSExLHJuPXZuLkZ1bGxQYXRocy5sZW5ndGgtMTtybj49MDstLXJuKXt2YXIgU249dm4uRmlsZUluZGV4W3JuXTtzd2l0Y2goU24udHlwZSl7Y2FzZSAwOll0P2JuPSEwOih2bi5GaWxlSW5kZXgucG9w''@;'; put 'put ''KCksdm4uRnVsbFBhdGhzLnBvcCgpKTticmVhaztjYXNlIDE6Y2FzZSAyOmNhc2UgNTpZdD0hMCxpc05hTihTbi5SKlNuLkwqU24uQykmJihibj0hMCksU24uUj4tMSYmU24uTD4tMSYmU24uUj09U24uTCYmKGJuPSEwKTticmVhaztkZWZhdWx0OmJuPSEwfX1pZihibnx8SW4pe3ZhciBVbj1u''@;'; put 'put ''ZXcgRGF0ZSgxOTg3LDEsMTkpLGJyPTAsVXI9W107Zm9yKHJuPTA7cm48dm4uRnVsbFBhdGhzLmxlbmd0aDsrK3JuKTAhPT12bi5GaWxlSW5kZXhbcm5dLnR5cGUmJlVyLnB1c2goW3ZuLkZ1bGxQYXRoc1tybl0sdm4uRmlsZUluZGV4W3JuXV0pO2Zvcihybj0wO3JuPFVyLmxlbmd0aDsrK3Ju''@;'; put 'put ''KXt2YXIgeGk9RyhVcltybl1bMF0pO2ZvcihZdD0hMSxicj0wO2JyPFVyLmxlbmd0aDsrK2JyKVVyW2JyXVswXT09PXhpJiYoWXQ9ITApO1l0fHxVci5wdXNoKFt4aSx7bmFtZTpRKHhpKS5yZXBsYWNlKCIvIiwiIiksdHlwZToxLGNsc2lkOnJhLGN0OlVuLG10OlVuLGNvbnRlbnQ6bnVsbH1d''@;'; put 'put ''KX1mb3IoVXIuc29ydChmdW5jdGlvbihqaSx1byl7cmV0dXJuIGZ1bmN0aW9uIGsodm4sSW4pe2Zvcih2YXIgYm49dm4uc3BsaXQoIi8iKSxZdD1Jbi5zcGxpdCgiLyIpLHJuPTAsU249MCxVbj1NYXRoLm1pbihibi5sZW5ndGgsWXQubGVuZ3RoKTtybjxVbjsrK3JuKXtpZihTbj1ibltybl0u''@;'; put 'put ''bGVuZ3RoLVl0W3JuXS5sZW5ndGgpcmV0dXJuIFNuO2lmKGJuW3JuXSE9WXRbcm5dKXJldHVybiBibltybl08WXRbcm5dPy0xOjF9cmV0dXJuIGJuLmxlbmd0aC1ZdC5sZW5ndGh9KGppWzBdLHVvWzBdKX0pLHZuLkZ1bGxQYXRocz1bXSx2bi5GaWxlSW5kZXg9W10scm49MDtybjxVci5sZW5n''@;'; put 'put ''dGg7Kytybil2bi5GdWxsUGF0aHNbcm5dPVVyW3JuXVswXSx2bi5GaWxlSW5kZXhbcm5dPVVyW3JuXVsxXTtmb3Iocm49MDtybjxVci5sZW5ndGg7Kytybil7dmFyIEpyPXZuLkZpbGVJbmRleFtybl0sSmk9dm4uRnVsbFBhdGhzW3JuXTtpZihKci5uYW1lPVEoSmkpLnJlcGxhY2UoIi8iLCIi''@;'; put 'put ''KSxKci5MPUpyLlI9SnIuQz0tKEpyLmNvbG9yPTEpLEpyLnNpemU9SnIuY29udGVudD9Kci5jb250ZW50Lmxlbmd0aDowLEpyLnN0YXJ0PTAsSnIuY2xzaWQ9SnIuY2xzaWR8fHJhLDA9PT1ybilKci5DPVVyLmxlbmd0aD4xPzE6LTEsSnIuc2l6ZT0wLEpyLnR5cGU9NTtlbHNlIGlmKCIvIj09''@;'; put 'put ''Smkuc2xpY2UoLTEpKXtmb3IoYnI9cm4rMTticjxVci5sZW5ndGgmJkcodm4uRnVsbFBhdGhzW2JyXSkhPUppOysrYnIpO2ZvcihKci5DPWJyPj1Vci5sZW5ndGg/LTE6YnIsYnI9cm4rMTticjxVci5sZW5ndGgmJkcodm4uRnVsbFBhdGhzW2JyXSkhPUcoSmkpOysrYnIpO0pyLlI9YnI+PVVy''@;'; put 'put ''Lmxlbmd0aD8tMTpicixKci50eXBlPTF9ZWxzZSBHKHZuLkZ1bGxQYXRoc1tybisxXXx8IiIpPT1HKEppKSYmKEpyLlI9cm4rMSksSnIudHlwZT0yfX19ZnVuY3Rpb24gV24odm4sSW4pe3ZhciBibj1Jbnx8e307aWYocW4odm4pLCJ6aXAiPT1ibi5maWxlVHlwZSlyZXR1cm4gZnVuY3Rpb24g''@;'; put 'put ''ZHModm4sSW4pe3ZhciBibj1Jbnx8e30sWXQ9W10scm49W10sU249VnQoMSksVW49Ym4uY29tcHJlc3Npb24/ODowLGJyPTAseGk9MCxKcj0wLEppPTAsamk9MCx1bz12bi5GdWxsUGF0aHNbMF0semE9dW8sU2E9dm4uRmlsZUluZGV4WzBdLGFyPVtdLF9sPTA7Zm9yKHhpPTE7eGk8dm4uRnVs''@;'; put 'put ''bFBhdGhzLmxlbmd0aDsrK3hpKWlmKHphPXZuLkZ1bGxQYXRoc1t4aV0uc2xpY2UodW8ubGVuZ3RoKSwoU2E9dm4uRmlsZUluZGV4W3hpXSkuc2l6ZSYmU2EuY29udGVudCYmIlx4MDFTaDMzdEo1IiE9emEpe3ZhciBrMT1KaSxFaT1WdCh6YS5sZW5ndGgpO2ZvcihKcj0wO0pyPHphLmxlbmd0''@;'; put 'put ''aDsrK0pyKUVpLndyaXRlX3NoaWZ0KDEsMTI3JnphLmNoYXJDb2RlQXQoSnIpKTtFaT1FaS5zbGljZSgwLEVpLmwpLGFyW2ppXT14ZS5idWYoU2EuY29udGVudCwwKTt2YXIgcGQ9U2EuY29udGVudDs4PT1VbiYmKHBkPXpyKHBkKSksKFNuPVZ0KDMwKSkud3JpdGVfc2hpZnQoNCw2NzMyNDc1''@;'; put 'put ''MiksU24ud3JpdGVfc2hpZnQoMiwyMCksU24ud3JpdGVfc2hpZnQoMixiciksU24ud3JpdGVfc2hpZnQoMixVbiksU2EubXQ/bGUoU24sU2EubXQpOlNuLndyaXRlX3NoaWZ0KDQsMCksU24ud3JpdGVfc2hpZnQoLTQsOCZicj8wOmFyW2ppXSksU24ud3JpdGVfc2hpZnQoNCw4JmJyPzA6cGQu''@;'; put 'put ''bGVuZ3RoKSxTbi53cml0ZV9zaGlmdCg0LDgmYnI/MDpTYS5jb250ZW50Lmxlbmd0aCksU24ud3JpdGVfc2hpZnQoMixFaS5sZW5ndGgpLFNuLndyaXRlX3NoaWZ0KDIsMCksSmkrPVNuLmxlbmd0aCxZdC5wdXNoKFNuKSxKaSs9RWkubGVuZ3RoLFl0LnB1c2goRWkpLEppKz1wZC5sZW5ndGgs''@;'; put 'put ''WXQucHVzaChwZCksOCZiciYmKChTbj1WdCgxMikpLndyaXRlX3NoaWZ0KC00LGFyW2ppXSksU24ud3JpdGVfc2hpZnQoNCxwZC5sZW5ndGgpLFNuLndyaXRlX3NoaWZ0KDQsU2EuY29udGVudC5sZW5ndGgpLEppKz1Tbi5sLFl0LnB1c2goU24pKSwoU249VnQoNDYpKS53cml0ZV9zaGlmdCg0''@;'; put 'put ''LDMzNjM5MjQ4KSxTbi53cml0ZV9zaGlmdCgyLDApLFNuLndyaXRlX3NoaWZ0KDIsMjApLFNuLndyaXRlX3NoaWZ0KDIsYnIpLFNuLndyaXRlX3NoaWZ0KDIsVW4pLFNuLndyaXRlX3NoaWZ0KDQsMCksU24ud3JpdGVfc2hpZnQoLTQsYXJbamldKSxTbi53cml0ZV9zaGlmdCg0LHBkLmxlbmd0''@;'; put 'put ''aCksU24ud3JpdGVfc2hpZnQoNCxTYS5jb250ZW50Lmxlbmd0aCksU24ud3JpdGVfc2hpZnQoMixFaS5sZW5ndGgpLFNuLndyaXRlX3NoaWZ0KDIsMCksU24ud3JpdGVfc2hpZnQoMiwwKSxTbi53cml0ZV9zaGlmdCgyLDApLFNuLndyaXRlX3NoaWZ0KDIsMCksU24ud3JpdGVfc2hpZnQoNCww''@;'; put 'put ''KSxTbi53cml0ZV9zaGlmdCg0LGsxKSxfbCs9U24ubCxybi5wdXNoKFNuKSxfbCs9RWkubGVuZ3RoLHJuLnB1c2goRWkpLCsraml9cmV0dXJuKFNuPVZ0KDIyKSkud3JpdGVfc2hpZnQoNCwxMDEwMTAyNTYpLFNuLndyaXRlX3NoaWZ0KDIsMCksU24ud3JpdGVfc2hpZnQoMiwwKSxTbi53cml0''@;'; put 'put ''ZV9zaGlmdCgyLGppKSxTbi53cml0ZV9zaGlmdCgyLGppKSxTbi53cml0ZV9zaGlmdCg0LF9sKSxTbi53cml0ZV9zaGlmdCg0LEppKSxTbi53cml0ZV9zaGlmdCgyLDApLGooW2ooWXQpLGoocm4pLFNuXSl9KHZuLGJuKTt2YXIgWXQ9ZnVuY3Rpb24odW8pe2Zvcih2YXIgemE9MCxTYT0wLGFy''@;'; put 'put ''PTA7YXI8dW8uRmlsZUluZGV4Lmxlbmd0aDsrK2FyKXt2YXIgX2w9dW8uRmlsZUluZGV4W2FyXTtpZihfbC5jb250ZW50KXt2YXIgazE9X2wuY29udGVudC5sZW5ndGg7azE+MCYmKGsxPDQwOTY/emErPWsxKzYzPj42OlNhKz1rMSs1MTE+PjkpfX1mb3IodmFyIEVpPXVvLkZ1bGxQYXRocy5s''@;'; put 'put ''ZW5ndGgrMz4+MixXNz16YSsxMjc+PjcsWXI9KHphKzc+PjMpK1NhK0VpK1c3LExsPVlyKzEyNz4+NyxkXz1MbDw9MTA5PzA6TWF0aC5jZWlsKChMbC0xMDkpLzEyNyk7WXIrTGwrZF8rMTI3Pj43PkxsOylkXz0rK0xsPD0xMDk/MDpNYXRoLmNlaWwoKExsLTEwOSkvMTI3KTt2YXIgdmY9WzEs''@;'; put 'put ''ZF8sTGwsVzcsRWksU2EsemEsMF07cmV0dXJuIHVvLkZpbGVJbmRleFswXS5zaXplPXphPDw2LHZmWzddPSh1by5GaWxlSW5kZXhbMF0uc3RhcnQ9dmZbMF0rdmZbMV0rdmZbMl0rdmZbM10rdmZbNF0rdmZbNV0pKyh2Zls2XSs3Pj4zKSx2Zn0odm4pLHJuPVZ0KFl0WzddPDw5KSxTbj0wLFVu''@;'; put 'put ''PTA7Zm9yKFNuPTA7U248ODsrK1NuKXJuLndyaXRlX3NoaWZ0KDEsRmlbU25dKTtmb3IoU249MDtTbjw4OysrU24pcm4ud3JpdGVfc2hpZnQoMiwwKTtmb3Iocm4ud3JpdGVfc2hpZnQoMiw2Mikscm4ud3JpdGVfc2hpZnQoMiwzKSxybi53cml0ZV9zaGlmdCgyLDY1NTM0KSxybi53cml0ZV9z''@;'; put 'put ''aGlmdCgyLDkpLHJuLndyaXRlX3NoaWZ0KDIsNiksU249MDtTbjwzOysrU24pcm4ud3JpdGVfc2hpZnQoMiwwKTtmb3Iocm4ud3JpdGVfc2hpZnQoNCwwKSxybi53cml0ZV9zaGlmdCg0LFl0WzJdKSxybi53cml0ZV9zaGlmdCg0LFl0WzBdK1l0WzFdK1l0WzJdK1l0WzNdLTEpLHJuLndyaXRl''@;'; put 'put ''X3NoaWZ0KDQsMCkscm4ud3JpdGVfc2hpZnQoNCw0MDk2KSxybi53cml0ZV9zaGlmdCg0LFl0WzNdP1l0WzBdK1l0WzFdK1l0WzJdLTE6dHIpLHJuLndyaXRlX3NoaWZ0KDQsWXRbM10pLHJuLndyaXRlX3NoaWZ0KC00LFl0WzFdP1l0WzBdLTE6dHIpLHJuLndyaXRlX3NoaWZ0KDQsWXRbMV0p''@;'; put 'put ''LFNuPTA7U248MTA5OysrU24pcm4ud3JpdGVfc2hpZnQoLTQsU248WXRbMl0/WXRbMV0rU246LTEpO2lmKFl0WzFdKWZvcihVbj0wO1VuPFl0WzFdOysrVW4pe2Zvcig7U248MjM2KzEyNypVbjsrK1NuKXJuLndyaXRlX3NoaWZ0KC00LFNuPFl0WzJdP1l0WzFdK1NuOi0xKTtybi53cml0ZV9z''@;'; put 'put ''aGlmdCgtNCxVbj09PVl0WzFdLTE/dHI6VW4rMSl9dmFyIGJyPWZ1bmN0aW9uKHVvKXtmb3IoVW4rPXVvO1NuPFVuLTE7KytTbilybi53cml0ZV9zaGlmdCgtNCxTbisxKTt1byYmKCsrU24scm4ud3JpdGVfc2hpZnQoLTQsdHIpKX07Zm9yKFVuPVNuPTAsVW4rPVl0WzFdO1NuPFVuOysrU24p''@;'; put 'put ''cm4ud3JpdGVfc2hpZnQoLTQsb2EuRElGU0VDVCk7Zm9yKFVuKz1ZdFsyXTtTbjxVbjsrK1NuKXJuLndyaXRlX3NoaWZ0KC00LG9hLkZBVFNFQ1QpO2JyKFl0WzNdKSxicihZdFs0XSk7Zm9yKHZhciBVcj0wLHhpPTAsSnI9dm4uRmlsZUluZGV4WzBdO1VyPHZuLkZpbGVJbmRleC5sZW5ndGg7''@;'; put 'put ''KytVcikoSnI9dm4uRmlsZUluZGV4W1VyXSkuY29udGVudCYmISgoeGk9SnIuY29udGVudC5sZW5ndGgpPDQwOTYpJiYoSnIuc3RhcnQ9VW4sYnIoeGkrNTExPj45KSk7Zm9yKGJyKFl0WzZdKzc+PjMpOzUxMSZybi5sOylybi53cml0ZV9zaGlmdCgtNCxvYS5FTkRPRkNIQUlOKTtmb3IoVW49''@;'; put 'put ''U249MCxVcj0wO1VyPHZuLkZpbGVJbmRleC5sZW5ndGg7KytVcikoSnI9dm4uRmlsZUluZGV4W1VyXSkuY29udGVudCYmKHhpPUpyLmNvbnRlbnQubGVuZ3RoKSYmISh4aT49NDA5NikmJihKci5zdGFydD1Vbixicih4aSs2Mz4+NikpO2Zvcig7NTExJnJuLmw7KXJuLndyaXRlX3NoaWZ0KC00''@;'; put 'put ''LG9hLkVORE9GQ0hBSU4pO2ZvcihTbj0wO1NuPFl0WzRdPDwyOysrU24pe3ZhciBKaT12bi5GdWxsUGF0aHNbU25dO2lmKEppJiYwIT09SmkubGVuZ3RoKXtKcj12bi5GaWxlSW5kZXhbU25dLDA9PT1TbiYmKEpyLnN0YXJ0PUpyLnNpemU/SnIuc3RhcnQtMTp0cik7dmFyIGppPTA9PT1TbiYm''@;'; put 'put ''Ym4ucm9vdHx8SnIubmFtZTtpZih4aT0yKihqaS5sZW5ndGgrMSkscm4ud3JpdGVfc2hpZnQoNjQsamksInV0ZjE2bGUiKSxybi53cml0ZV9zaGlmdCgyLHhpKSxybi53cml0ZV9zaGlmdCgxLEpyLnR5cGUpLHJuLndyaXRlX3NoaWZ0KDEsSnIuY29sb3IpLHJuLndyaXRlX3NoaWZ0KC00LEpy''@;'; put 'put ''LkwpLHJuLndyaXRlX3NoaWZ0KC00LEpyLlIpLHJuLndyaXRlX3NoaWZ0KC00LEpyLkMpLEpyLmNsc2lkKXJuLndyaXRlX3NoaWZ0KDE2LEpyLmNsc2lkLCJoZXgiKTtlbHNlIGZvcihVcj0wO1VyPDQ7KytVcilybi53cml0ZV9zaGlmdCg0LDApO3JuLndyaXRlX3NoaWZ0KDQsSnIuc3RhdGV8''@;'; put 'put ''fDApLHJuLndyaXRlX3NoaWZ0KDQsMCkscm4ud3JpdGVfc2hpZnQoNCwwKSxybi53cml0ZV9zaGlmdCg0LDApLHJuLndyaXRlX3NoaWZ0KDQsMCkscm4ud3JpdGVfc2hpZnQoNCxKci5zdGFydCkscm4ud3JpdGVfc2hpZnQoNCxKci5zaXplKSxybi53cml0ZV9zaGlmdCg0LDApfWVsc2V7Zm9y''@;'; put 'put ''KFVyPTA7VXI8MTc7KytVcilybi53cml0ZV9zaGlmdCg0LDApO2ZvcihVcj0wO1VyPDM7KytVcilybi53cml0ZV9zaGlmdCg0LC0xKTtmb3IoVXI9MDtVcjwxMjsrK1VyKXJuLndyaXRlX3NoaWZ0KDQsMCl9fWZvcihTbj0xO1NuPHZuLkZpbGVJbmRleC5sZW5ndGg7KytTbilpZigoSnI9dm4u''@;'; put 'put ''RmlsZUluZGV4W1NuXSkuc2l6ZT49NDA5Nil7Zm9yKHJuLmw9SnIuc3RhcnQrMTw8OSxVcj0wO1VyPEpyLnNpemU7KytVcilybi53cml0ZV9zaGlmdCgxLEpyLmNvbnRlbnRbVXJdKTtmb3IoOzUxMSZVcjsrK1VyKXJuLndyaXRlX3NoaWZ0KDEsMCl9Zm9yKFNuPTE7U248dm4uRmlsZUluZGV4''@;'; put 'put ''Lmxlbmd0aDsrK1NuKWlmKChKcj12bi5GaWxlSW5kZXhbU25dKS5zaXplPjAmJkpyLnNpemU8NDA5Nil7Zm9yKFVyPTA7VXI8SnIuc2l6ZTsrK1VyKXJuLndyaXRlX3NoaWZ0KDEsSnIuY29udGVudFtVcl0pO2Zvcig7NjMmVXI7KytVcilybi53cml0ZV9zaGlmdCgxLDApfWZvcig7cm4ubDxy''@;'; put 'put ''bi5sZW5ndGg7KXJuLndyaXRlX3NoaWZ0KDEsMCk7cmV0dXJuIHJufUwudmVyc2lvbj0iMS4xLjQiO3ZhciBWcix5cj02NCx0cj0tMix3aT0iZDBjZjExZTBhMWIxMWFlMSIsRmk9WzIwOCwyMDcsMTcsMjI0LDE2MSwxNzcsMjYsMjI1XSxyYT0iMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAiLG9hPXtNQVhSRUdTRUNUOi02LERJRlNFQ1Q6LTQsRkFUU0VDVDotMyxFTkRPRkNIQUlOOnRyLEZSRUVTRUNUOi0xLEhFQURFUl9TSUdOQVRVUkU6d2ksSEVBREVSX01JTk9SX1ZFUlNJT046IjNlMDAiLE1BWFJFR1NJRDotNixOT1NUUkVBTTotMSxIRUFERVJfQ0xTSUQ6cmEsRW50''@;'; put 'put ''cnlUeXBlczpbInVua25vd24iLCJzdG9yYWdlIiwic3RyZWFtIiwibG9ja2J5dGVzIiwicHJvcGVydHkiLCJyb290Il19O2Z1bmN0aW9uIGtyKHZuKXtmb3IodmFyIEluPW5ldyBBcnJheSh2bi5sZW5ndGgpLGJuPTA7Ym48dm4ubGVuZ3RoOysrYm4pSW5bYm5dPVN0cmluZy5mcm9tQ2hhckNv''@;'; put 'put ''ZGUodm5bYm5dKTtyZXR1cm4gSW4uam9pbigiIil9ZnVuY3Rpb24genIodm4pe3JldHVybiBWcj9Wci5kZWZsYXRlUmF3U3luYyh2bik6VmModm4pfWZvcih2YXIgdm4sSW4sWmk9WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdLENpPVszLDQsNSw2LDcs''@;'; put 'put ''OCw5LDEwLDExLDEzLDE1LDE3LDE5LDIzLDI3LDMxLDM1LDQzLDUxLDU5LDY3LDgzLDk5LDExNSwxMzEsMTYzLDE5NSwyMjcsMjU4XSxfYT1bMSwyLDMsNCw1LDcsOSwxMywxNywyNSwzMyw0OSw2NSw5NywxMjksMTkzLDI1NywzODUsNTEzLDc2OSwxMDI1LDE1MzcsMjA0OSwzMDczLDQwOTcs''@;'; put 'put ''NjE0NSw4MTkzLDEyMjg5LDE2Mzg1LDI0NTc3XSxhYT10eXBlb2YgVWludDhBcnJheTwidSIsem89YWE/bmV3IFVpbnQ4QXJyYXkoMjU2KTpbXSxqYT0wO2phPDI1NjsrK2phKXpvW2phXT0odm9pZCAwLDI1NSYoKEluPTEzOTUzNiYoKHZuPWphKTw8MXx2bjw8MTEpfDU1ODE0NCYodm48PDV8''@;'; put 'put ''dm48PDE1KSk+PjE2fEluPj44fEluKSk7ZnVuY3Rpb24gd28odm4sSW4pe3ZhciBibj16b1syNTUmdm5dO3JldHVybiBJbjw9OD9ibj4+PjgtSW46KGJuPWJuPDw4fHpvW3ZuPj44JjI1NV0sSW48PTE2P2JuPj4+MTYtSW46KGJuPWJuPDw4fHpvW3ZuPj4xNiYyNTVdKT4+PjI0LUluKX1mdW5j''@;'; put 'put ''dGlvbiBibyh2bixJbil7dmFyIGJuPTcmSW4sWXQ9SW4+Pj4zO3JldHVybih2bltZdF18KGJuPD02PzA6dm5bWXQrMV08PDgpKT4+PmJuJjN9ZnVuY3Rpb24gVWkodm4sSW4pe3ZhciBibj03JkluLFl0PUluPj4+MztyZXR1cm4odm5bWXRdfChibjw9NT8wOnZuW1l0KzFdPDw4KSk+Pj5ibiY3''@;'; put 'put ''fWZ1bmN0aW9uIEJuKHZuLEluKXt2YXIgYm49NyZJbixZdD1Jbj4+PjM7cmV0dXJuKHZuW1l0XXwoYm48PTM/MDp2bltZdCsxXTw8OCkpPj4+Ym4mMzF9ZnVuY3Rpb24gRnModm4sSW4pe3ZhciBibj03JkluLFl0PUluPj4+MztyZXR1cm4odm5bWXRdfChibjw9MT8wOnZuW1l0KzFdPDw4KSk+''@;'; put 'put ''Pj5ibiYxMjd9ZnVuY3Rpb24gZWwodm4sSW4sYm4pe3ZhciBZdD03JkluLHJuPUluPj4+MyxVbj12bltybl0+Pj5ZdDtyZXR1cm4gYm48OC1ZdHx8KFVufD12bltybisxXTw8OC1ZdCxibjwxNi1ZdCl8fChVbnw9dm5bcm4rMl08PDE2LVl0LGJuPDI0LVl0KXx8KFVufD12bltybiszXTw8MjQt''@;'; put 'put ''WXQpLFVuJigxPDxibiktMX1mdW5jdGlvbiBJdSh2bixJbil7dmFyIGJuPXZuLmxlbmd0aCxZdD0yKmJuPkluPzIqYm46SW4rNSxybj0wO2lmKGJuPj1JbilyZXR1cm4gdm47aWYoVGUpe3ZhciBTbj1nKFl0KTtpZih2bi5jb3B5KXZuLmNvcHkoU24pO2Vsc2UgZm9yKDtybjx2bi5sZW5ndGg7''@;'; put 'put ''KytybilTbltybl09dm5bcm5dO3JldHVybiBTbn1pZihhYSl7dmFyIFVuPW5ldyBVaW50OEFycmF5KFl0KTtpZihVbi5zZXQpVW4uc2V0KHZuKTtlbHNlIGZvcig7cm48dm4ubGVuZ3RoOysrcm4pVW5bcm5dPXZuW3JuXTtyZXR1cm4gVW59cmV0dXJuIHZuLmxlbmd0aD1ZdCx2bn1mdW5jdGlv''@;'; put 'put ''biBwdSh2bil7Zm9yKHZhciBJbj1uZXcgQXJyYXkodm4pLGJuPTA7Ym48dm47KytibilJbltibl09MDtyZXR1cm4gSW59dmFyIFZjPWZ1bmN0aW9uKCl7dmFyIHZuPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGJuLFl0KXtmb3IodmFyIHJuPTA7cm48Ym4ubGVuZ3RoOyl7dmFyIFNuPU1h''@;'; put 'put ''dGgubWluKDY1NTM1LGJuLmxlbmd0aC1ybik7Zm9yKFl0LndyaXRlX3NoaWZ0KDEsKyhybitTbj09Ym4ubGVuZ3RoKSksWXQud3JpdGVfc2hpZnQoMixTbiksWXQud3JpdGVfc2hpZnQoMiw2NTUzNSZ+U24pO1NuLS0gPjA7KVl0W1l0LmwrK109Ym5bcm4rK119cmV0dXJuIFl0Lmx9fSgpO3Jl''@;'; put 'put ''dHVybiBmdW5jdGlvbihJbil7dmFyIGJuPVZ0KDUwK01hdGguZmxvb3IoMS4xKkluLmxlbmd0aCkpLFl0PXZuKEluLGJuKTtyZXR1cm4gYm4uc2xpY2UoMCxZdCl9fSgpO2Z1bmN0aW9uIG8xKHZuLEluLGJuKXt2YXIgWXQ9MSxybj0wLFNuPTAsVW49MCxicj0wLFVyPXZuLmxlbmd0aCx4aT1h''@;'; put 'put ''YT9uZXcgVWludDE2QXJyYXkoMzIpOnB1KDMyKTtmb3IoU249MDtTbjwzMjsrK1NuKXhpW1NuXT0wO2ZvcihTbj1VcjtTbjxibjsrK1NuKXZuW1NuXT0wO1VyPXZuLmxlbmd0aDt2YXIgSnI9YWE/bmV3IFVpbnQxNkFycmF5KFVyKTpwdShVcik7Zm9yKFNuPTA7U248VXI7KytTbil4aVtybj12''@;'; put 'put ''bltTbl1dKyssWXQ8cm4mJihZdD1ybiksSnJbU25dPTA7Zm9yKHhpWzBdPTAsU249MTtTbjw9WXQ7KytTbil4aVtTbisxNl09YnI9YnIreGlbU24tMV08PDE7Zm9yKFNuPTA7U248VXI7KytTbikwIT0oYnI9dm5bU25dKSYmKEpyW1NuXT14aVticisxNl0rKyk7dmFyIEppPTA7Zm9yKFNuPTA7''@;'; put 'put ''U248VXI7KytTbilpZigwIT0oSmk9dm5bU25dKSlmb3IoYnI9d28oSnJbU25dLFl0KT4+WXQtSmksVW49KDE8PFl0KzQtSmkpLTE7VW4+PTA7LS1VbilJblticnxVbjw8SmldPTE1JkppfFNuPDw0O3JldHVybiBZdH12YXIgQmM9YWE/bmV3IFVpbnQxNkFycmF5KDUxMik6cHUoNTEyKSxjbj1h''@;'; put 'put ''YT9uZXcgVWludDE2QXJyYXkoMzIpOnB1KDMyKTtpZighYWEpe2Zvcih2YXIgQW49MDtBbjw1MTI7KytBbilCY1tBbl09MDtmb3IoQW49MDtBbjwzMjsrK0FuKWNuW0FuXT0wfSFmdW5jdGlvbigpe2Zvcih2YXIgdm49W10sSW49MDtJbjwzMjtJbisrKXZuLnB1c2goNSk7bzEodm4sY24sMzIp''@;'; put 'put ''O3ZhciBibj1bXTtmb3IoSW49MDtJbjw9MTQzO0luKyspYm4ucHVzaCg4KTtmb3IoO0luPD0yNTU7SW4rKylibi5wdXNoKDkpO2Zvcig7SW48PTI3OTtJbisrKWJuLnB1c2goNyk7Zm9yKDtJbjw9Mjg3O0luKyspYm4ucHVzaCg4KTtvMShibixCYywyODgpfSgpO3ZhciBHbj1hYT9uZXcgVWlu''@;'; put 'put ''dDE2QXJyYXkoMzI3NjgpOnB1KDMyNzY4KSxBaT1hYT9uZXcgVWludDE2QXJyYXkoMzI3NjgpOnB1KDMyNzY4KSxocj1hYT9uZXcgVWludDE2QXJyYXkoMTI4KTpwdSgxMjgpLE9pPTEsU3I9MTtmdW5jdGlvbiBQaSh2bixJbil7dmFyIGJuPUJuKHZuLEluKSsyNTcsWXQ9Qm4odm4sSW4rPTUp''@;'; put 'put ''KzEscm49ZnVuY3Rpb24gamwodm4sSW4pe3ZhciBibj03JkluLFl0PUluPj4+MztyZXR1cm4odm5bWXRdfChibjw9ND8wOnZuW1l0KzFdPDw4KSk+Pj5ibiYxNX0odm4sSW4rPTUpKzQ7SW4rPTQ7Zm9yKHZhciBTbj0wLFVuPWFhP25ldyBVaW50OEFycmF5KDE5KTpwdSgxOSksYnI9WzAsMCww''@;'; put 'put ''LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdLFVyPTEseGk9YWE/bmV3IFVpbnQ4QXJyYXkoOCk6cHUoOCksSnI9YWE/bmV3IFVpbnQ4QXJyYXkoOCk6cHUoOCksSmk9VW4ubGVuZ3RoLGppPTA7amk8cm47KytqaSlVbltaaVtqaV1dPVNuPVVpKHZuLEluKSxVcjxTbiYmKFVyPVNu''@;'; put 'put ''KSx4aVtTbl0rKyxJbis9Mzt2YXIgdW89MDtmb3IoeGlbMF09MCxqaT0xO2ppPD1VcjsrK2ppKUpyW2ppXT11bz11byt4aVtqaS0xXTw8MTtmb3Ioamk9MDtqaTxKaTsrK2ppKTAhPSh1bz1VbltqaV0pJiYoYnJbamldPUpyW3VvXSsrKTt2YXIgemE9MDtmb3Ioamk9MDtqaTxKaTsrK2ppKWlm''@;'; put 'put ''KDAhPSh6YT1VbltqaV0pKXt1bz16b1ticltqaV1dPj44LXphO2Zvcih2YXIgU2E9KDE8PDctemEpLTE7U2E+PTA7LS1TYSloclt1b3xTYTw8emFdPTcmemF8amk8PDN9dmFyIGFyPVtdO2ZvcihVcj0xO2FyLmxlbmd0aDxibitZdDspc3dpdGNoKHVvPWhyW0ZzKHZuLEluKV0sSW4rPTcmdW8s''@;'; put 'put ''dW8+Pj49Myl7Y2FzZSAxNjpmb3IoU249Mytibyh2bixJbiksSW4rPTIsdW89YXJbYXIubGVuZ3RoLTFdO1NuLS0gPjA7KWFyLnB1c2godW8pO2JyZWFrO2Nhc2UgMTc6Zm9yKFNuPTMrVWkodm4sSW4pLEluKz0zO1NuLS0gPjA7KWFyLnB1c2goMCk7YnJlYWs7Y2FzZSAxODpmb3IoU249MTEr''@;'; put 'put ''RnModm4sSW4pLEluKz03O1NuLS0gPjA7KWFyLnB1c2goMCk7YnJlYWs7ZGVmYXVsdDphci5wdXNoKHVvKSxVcjx1byYmKFVyPXVvKX12YXIgX2w9YXIuc2xpY2UoMCxibiksazE9YXIuc2xpY2UoYm4pO2ZvcihqaT1ibjtqaTwyODY7KytqaSlfbFtqaV09MDtmb3Ioamk9WXQ7amk8MzA7Kytq''@;'; put 'put ''aSlrMVtqaV09MDtyZXR1cm4gT2k9bzEoX2wsR24sMjg2KSxTcj1vMShrMSxBaSwzMCksSW59ZnVuY3Rpb24gRGkodm4sSW4pe3ZhciBZdD1mdW5jdGlvbiBKYSh2bixJbil7aWYoMz09dm5bMF0mJiEoMyZ2blsxXSkpcmV0dXJuW0IoSW4pLDJdO2Zvcih2YXIgYm49MCxZdD0wLHJuPWcoSW58''@;'; put 'put ''fDE8PDE4KSxTbj0wLFVuPXJuLmxlbmd0aD4+PjAsYnI9MCxVcj0wOyEoMSZZdCk7KWlmKFl0PVVpKHZuLGJuKSxibis9MyxZdD4+PjEpZm9yKFl0Pj4+MT09MT8oYnI9OSxVcj01KTooYm49UGkodm4sYm4pLGJyPU9pLFVyPVNyKSwhSW4mJlVuPFNuKzMyNzY3JiYoVW49KHJuPUl1KHJuLFNu''@;'; put 'put ''KzMyNzY3KSkubGVuZ3RoKTs7KXt2YXIgSnI9ZWwodm4sYm4sYnIpLEppPVl0Pj4+MT09MT9CY1tKcl06R25bSnJdO2lmKGJuKz0xNSZKaSwoSmk+Pj49NCk+Pj44JjI1NSl7aWYoMjU2PT1KaSlicmVhazt2YXIgamk9KEppLT0yNTcpPDg/MDpKaS00Pj4yO2ppPjUmJihqaT0wKTt2YXIgdW89''@;'; put 'put ''U24rQ2lbSmldO2ppPjAmJih1bys9ZWwodm4sYm4samkpLGJuKz1qaSksSnI9ZWwodm4sYm4sVXIpLGJuKz0xNSYoSmk9WXQ+Pj4xPT0xP2NuW0pyXTpBaVtKcl0pO3ZhciB6YT0oSmk+Pj49NCk8ND8wOkppLTI+PjEsU2E9X2FbSmldO2Zvcih6YT4wJiYoU2ErPWVsKHZuLGJuLHphKSxibis9''@;'; put 'put ''emEpLCFJbiYmVW48dW8mJihVbj0ocm49SXUocm4sdW8pKS5sZW5ndGgpO1NuPHVvOylybltTbl09cm5bU24tU2FdLCsrU259ZWxzZSBybltTbisrXT1KaX1lbHNlezcmYm4mJihibis9OC0oNyZibikpO3ZhciB4aT12bltibj4+PjNdfHZuWzErKGJuPj4+MyldPDw4O2lmKGJuKz0zMiwhSW4m''@;'; put 'put ''JlVuPFNuK3hpJiYoVW49KHJuPUl1KHJuLFNuK3hpKSkubGVuZ3RoKSwiZnVuY3Rpb24iPT10eXBlb2Ygdm4uY29weSl2bi5jb3B5KHJuLFNuLGJuPj4+MywoYm4+Pj4zKSt4aSksU24rPXhpLGJuKz04KnhpO2Vsc2UgZm9yKDt4aS0tID4wOylybltTbisrXT12bltibj4+PjNdLGJuKz04fXJl''@;'; put 'put ''dHVybltJbj9ybjpybi5zbGljZSgwLFNuKSxibis3Pj4+M119KHZuLnNsaWNlKHZuLmx8fDApLEluKTtyZXR1cm4gdm4ubCs9WXRbMV0sWXRbMF19ZnVuY3Rpb24gZGEodm4sSW4pe2lmKCF2bil0aHJvdyBuZXcgRXJyb3IoSW4pO3R5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS5lcnJvcihJ''@;'; put 'put ''bil9ZnVuY3Rpb24gSWkodm4sSW4pe3ZhciBibj12bjtqdChibiwwKTt2YXIgU249e0ZpbGVJbmRleDpbXSxGdWxsUGF0aHM6W119O0NuKFNuLHtyb290OkluLnJvb3R9KTtmb3IodmFyIFVuPWJuLmxlbmd0aC00Oyg4MCE9Ym5bVW5dfHw3NSE9Ym5bVW4rMV18fDUhPWJuW1VuKzJdfHw2IT1i''@;'; put 'put ''bltVbiszXSkmJlVuPj0wOyktLVVuO2JuLmw9VW4rNCxibi5sKz00O3ZhciBicj1ibi5yZWFkX3NoaWZ0KDIpO2JuLmwrPTY7dmFyIFVyPWJuLnJlYWRfc2hpZnQoNCk7Zm9yKGJuLmw9VXIsVW49MDtVbjxicjsrK1VuKXtibi5sKz0yMDt2YXIgeGk9Ym4ucmVhZF9zaGlmdCg0KSxKcj1ibi5y''@;'; put 'put ''ZWFkX3NoaWZ0KDQpLEppPWJuLnJlYWRfc2hpZnQoMiksamk9Ym4ucmVhZF9zaGlmdCgyKSx1bz1ibi5yZWFkX3NoaWZ0KDIpO2JuLmwrPTg7dmFyIHphPWJuLnJlYWRfc2hpZnQoNCksU2E9cGUoYm4uc2xpY2UoYm4ubCtKaSxibi5sK0ppK2ppKSk7Ym4ubCs9SmkramkrdW87dmFyIGFyPWJu''@;'; put 'put ''Lmw7Ym4ubD16YSs0LFJzKGJuLHhpLEpyLFNuLFNhKSxibi5sPWFyfXJldHVybiBTbn1mdW5jdGlvbiBScyh2bixJbixibixZdCxybil7dm4ubCs9Mjt2YXIgU249dm4ucmVhZF9zaGlmdCgyKSxVbj12bi5yZWFkX3NoaWZ0KDIpLGJyPWZ1bmN0aW9uIG1lKHZuKXt2YXIgSW49NjU1MzUmdm4u''@;'; put 'put ''cmVhZF9zaGlmdCgyKSxibj02NTUzNSZ2bi5yZWFkX3NoaWZ0KDIpLFl0PW5ldyBEYXRlLHJuPTMxJmJuLFNuPTE1Jihibj4+Pj01KTtibj4+Pj00LFl0LnNldE1pbGxpc2Vjb25kcygwKSxZdC5zZXRGdWxsWWVhcihibisxOTgwKSxZdC5zZXRNb250aChTbi0xKSxZdC5zZXREYXRlKHJuKTt2''@;'; put 'put ''YXIgVW49MzEmSW4sYnI9NjMmKEluPj4+PTUpO3JldHVybiBZdC5zZXRIb3VycyhJbj4+Pj02KSxZdC5zZXRNaW51dGVzKGJyKSxZdC5zZXRTZWNvbmRzKFVuPDwxKSxZdH0odm4pO2lmKDgyNTcmU24pdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBaSVAgZW5jcnlwdGlvbiIpO2Zvcih2''@;'; put 'put ''YXIgVXI9dm4ucmVhZF9zaGlmdCg0KSx4aT12bi5yZWFkX3NoaWZ0KDQpLEpyPXZuLnJlYWRfc2hpZnQoNCksSmk9dm4ucmVhZF9zaGlmdCgyKSxqaT12bi5yZWFkX3NoaWZ0KDIpLHVvPSIiLHphPTA7emE8Smk7Kyt6YSl1bys9U3RyaW5nLmZyb21DaGFyQ29kZSh2blt2bi5sKytdKTtpZihq''@;'; put 'put ''aSl7dmFyIFNhPXBlKHZuLnNsaWNlKHZuLmwsdm4ubCtqaSkpOyhTYVsyMTU4OV18fHt9KS5tdCYmKGJyPVNhWzIxNTg5XS5tdCksKChybnx8e30pWzIxNTg5XXx8e30pLm10JiYoYnI9cm5bMjE1ODldLm10KX12bi5sKz1qaTt2YXIgYXI9dm4uc2xpY2Uodm4ubCx2bi5sK3hpKTtzd2l0Y2go''@;'; put 'put ''VW4pe2Nhc2UgODphcj1mdW5jdGlvbiBWbih2bixJbil7aWYoIVZyKXJldHVybiBEaSh2bixJbik7dmFyIFl0PW5ldygwLFZyLkluZmxhdGVSYXcpLHJuPVl0Ll9wcm9jZXNzQ2h1bmsodm4uc2xpY2Uodm4ubCksWXQuX2ZpbmlzaEZsdXNoRmxhZyk7cmV0dXJuIHZuLmwrPVl0LmJ5dGVzUmVh''@;'; put 'put ''ZCxybn0odm4sSnIpO2JyZWFrO2Nhc2UgMDpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgWklQIENvbXByZXNzaW9uIG1ldGhvZCAiK1VuKX12YXIgX2w9ITE7OCZTbiYmKDEzNDY5NTc2MD09KFVyPXZuLnJlYWRfc2hpZnQoNCkpJiYoVXI9dm4ucmVhZF9zaGlm''@;'; put 'put ''dCg0KSxfbD0hMCkseGk9dm4ucmVhZF9zaGlmdCg0KSxKcj12bi5yZWFkX3NoaWZ0KDQpKSx4aSE9SW4mJmRhKF9sLCJCYWQgY29tcHJlc3NlZCBzaXplOiAiK0luKyIgIT0gIit4aSksSnIhPWJuJiZkYShfbCwiQmFkIHVuY29tcHJlc3NlZCBzaXplOiAiK2JuKyIgIT0gIitKcik7dmFyIGsx''@;'; put 'put ''PXhlLmJ1ZihhciwwKTsoMHxVcikhPSgwfGsxKSYmZGEoX2wsIkJhZCBDUkMzMiBjaGVja3N1bTogIitVcisiICE9ICIrazEpLEt1KFl0LHVvLGFyLHt1bnNhZmU6ITAsbXQ6YnJ9KX1mdW5jdGlvbiBLdSh2bixJbixibixZdCl7dmFyIHJuPVl0JiZZdC51bnNhZmU7cm58fENuKHZuKTt2YXIg''@;'; put 'put ''U249IXJuJiZ5ZS5maW5kKHZuLEluKTtpZighU24pe3ZhciBVbj12bi5GdWxsUGF0aHNbMF07SW4uc2xpY2UoMCxVbi5sZW5ndGgpPT1Vbj9Vbj1JbjooIi8iIT1Vbi5zbGljZSgtMSkmJihVbis9Ii8iKSxVbj0oVW4rSW4pLnJlcGxhY2UoIi8vIiwiLyIpKSxTbj17bmFtZTpRKEluKSx0eXBl''@;'; put 'put ''OjJ9LHZuLkZpbGVJbmRleC5wdXNoKFNuKSx2bi5GdWxsUGF0aHMucHVzaChVbikscm58fHllLnV0aWxzLmNmYl9nYyh2bil9cmV0dXJuIFNuLmNvbnRlbnQ9Ym4sU24uc2l6ZT1ibj9ibi5sZW5ndGg6MCxZdCYmKFl0LkNMU0lEJiYoU24uY2xzaWQ9WXQuQ0xTSUQpLFl0Lm10JiYoU24ubXQ9''@;'; put 'put ''WXQubXQpLFl0LmN0JiYoU24uY3Q9WXQuY3QpKSxTbn1yZXR1cm4gTC5maW5kPWZ1bmN0aW9uIHByKHZuLEluKXt2YXIgYm49dm4uRnVsbFBhdGhzLm1hcChmdW5jdGlvbihVcil7cmV0dXJuIFVyLnRvVXBwZXJDYXNlKCl9KSxZdD1ibi5tYXAoZnVuY3Rpb24oVXIpe3ZhciB4aT1Vci5zcGxp''@;'; put 'put ''dCgiLyIpO3JldHVybiB4aVt4aS5sZW5ndGgtKCIvIj09VXIuc2xpY2UoLTEpPzI6MSldfSkscm49ITE7NDc9PT1Jbi5jaGFyQ29kZUF0KDApPyhybj0hMCxJbj1iblswXS5zbGljZSgwLC0xKStJbik6cm49LTEhPT1Jbi5pbmRleE9mKCIvIik7dmFyIFNuPUluLnRvVXBwZXJDYXNlKCksVW49''@;'; put 'put ''ITA9PT1ybj9ibi5pbmRleE9mKFNuKTpZdC5pbmRleE9mKFNuKTtpZigtMSE9PVVuKXJldHVybiB2bi5GaWxlSW5kZXhbVW5dO3ZhciBicj0hU24ubWF0Y2gobSk7Zm9yKFNuPVNuLnJlcGxhY2UoRSwiIiksYnImJihTbj1Tbi5yZXBsYWNlKG0sIiEiKSksVW49MDtVbjxibi5sZW5ndGg7KytV''@;'; put 'put ''bilpZigoYnI/Ym5bVW5dLnJlcGxhY2UobSwiISIpOmJuW1VuXSkucmVwbGFjZShFLCIiKT09U258fChicj9ZdFtVbl0ucmVwbGFjZShtLCIhIik6WXRbVW5dKS5yZXBsYWNlKEUsIiIpPT1TbilyZXR1cm4gdm4uRmlsZUluZGV4W1VuXTtyZXR1cm4gbnVsbH0sTC5yZWFkPWZ1bmN0aW9uIHNy''@;'; put 'put ''KHZuLEluKXtzd2l0Y2goSW4mJkluLnR5cGV8fCJiYXNlNjQiKXtjYXNlImZpbGUiOnJldHVybiBmdW5jdGlvbiBUbih2bixJbil7cmV0dXJuIE5lKCksQmUoYmUucmVhZEZpbGVTeW5jKHZuKSxJbil9KHZuLEluKTtjYXNlImJhc2U2NCI6cmV0dXJuIEJlKHkoX2UuZGVjb2RlKHZuKSksSW4p''@;'; put 'put ''O2Nhc2UiYmluYXJ5IjpyZXR1cm4gQmUoeSh2biksSW4pfXJldHVybiBCZSh2bixJbil9LEwucGFyc2U9QmUsTC53cml0ZT1mdW5jdGlvbiBZbih2bixJbil7dmFyIGJuPVduKHZuLEluKTtzd2l0Y2goSW4mJkluLnR5cGUpe2Nhc2UiZmlsZSI6cmV0dXJuIE5lKCksYmUud3JpdGVGaWxlU3lu''@;'; put 'put ''YyhJbi5maWxlbmFtZSxibiksYm47Y2FzZSJiaW5hcnkiOnJldHVybiBrcihibik7Y2FzZSJiYXNlNjQiOnJldHVybiBfZS5lbmNvZGUoa3IoYm4pKX1yZXR1cm4gYm59LEwud3JpdGVGaWxlPWZ1bmN0aW9uIGtpKHZuLEluLGJuKXtOZSgpO3ZhciBZdD1Xbih2bixibik7YmUud3JpdGVGaWxl''@;'; put 'put ''U3luYyhJbixZdCl9LEwudXRpbHM9e2NmYl9uZXc6ZnVuY3Rpb24gUWModm4pe3ZhciBJbj17fTtyZXR1cm4gQ24oSW4sdm4pLElufSxjZmJfYWRkOkt1LGNmYl9kZWw6ZnVuY3Rpb24gUmwodm4sSW4pe0NuKHZuKTt2YXIgYm49eWUuZmluZCh2bixJbik7aWYoYm4pZm9yKHZhciBZdD0wO1l0''@;'; put 'put ''PHZuLkZpbGVJbmRleC5sZW5ndGg7KytZdClpZih2bi5GaWxlSW5kZXhbWXRdPT1ibilyZXR1cm4gdm4uRmlsZUluZGV4LnNwbGljZShZdCwxKSx2bi5GdWxsUGF0aHMuc3BsaWNlKFl0LDEpLCEwO3JldHVybiExfSxjZmJfbW92OmZ1bmN0aW9uIFdnKHZuLEluLGJuKXtDbih2bik7dmFyIFl0''@;'; put 'put ''PXllLmZpbmQodm4sSW4pO2lmKFl0KWZvcih2YXIgcm49MDtybjx2bi5GaWxlSW5kZXgubGVuZ3RoOysrcm4paWYodm4uRmlsZUluZGV4W3JuXT09WXQpcmV0dXJuIHZuLkZpbGVJbmRleFtybl0ubmFtZT1RKGJuKSx2bi5GdWxsUGF0aHNbcm5dPWJuLCEwO3JldHVybiExfSxjZmJfZ2M6ZnVu''@;'; put 'put ''Y3Rpb24gWm0odm4pe3FuKHZuLCEwKX0sUmVhZFNoaWZ0OmZyLENoZWNrRmllbGQ6SHQscHJlcF9ibG9iOmp0LGJjb25jYXQ6aix1c2VfemxpYjpmdW5jdGlvbiB3cih2bil7dHJ5e3ZhciBibj1uZXcoMCx2bi5JbmZsYXRlUmF3KTtpZihibi5fcHJvY2Vzc0NodW5rKG5ldyBVaW50OEFycmF5''@;'; put 'put ''KFszLDBdKSxibi5fZmluaXNoRmx1c2hGbGFnKSwhYm4uYnl0ZXNSZWFkKXRocm93IG5ldyBFcnJvcigiemxpYiBkb2VzIG5vdCBleHBvc2UgYnl0ZXNSZWFkIik7VnI9dm59Y2F0Y2goWXQpe2NvbnNvbGUuZXJyb3IoImNhbm5vdCB1c2UgbmF0aXZlIHpsaWI6ICIrKFl0Lm1lc3NhZ2V8fFl0''@;'; put 'put ''KSl9fSxfZGVmbGF0ZVJhdzpWYyxfaW5mbGF0ZVJhdzpEaSxjb25zdHM6b2F9LEx9KCk7dHJ5e0tlPWIoODMzMzcpfWNhdGNoe31mdW5jdGlvbiBqZShTKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIFM/eChTKTpBcnJheS5pc0FycmF5KFMpP2Z1bmN0aW9uIFQoUyl7aWYodHlwZW9mIFVpbnQ4''@;'; put 'put ''QXJyYXk+InUiKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQiKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoUyl9KFMpOlN9ZnVuY3Rpb24ga2UoUyxMLGspe2lmKHR5cGVvZiBLZTwidSImJktlLndyaXRlRmlsZVN5bmMpcmV0dXJuIGs/S2Uud3JpdGVGaWxlU3luYyhTLEwsayk6S2Uud3Jp''@;'; put 'put ''dGVGaWxlU3luYyhTLEwpO3ZhciBHPSJ1dGY4Ij09az9ZYShMKTpMO2lmKHR5cGVvZiBJRV9TYXZlRmlsZTwidSIpcmV0dXJuIElFX1NhdmVGaWxlKEcsUyk7aWYodHlwZW9mIEJsb2I8InUiKXt2YXIgUT1uZXcgQmxvYihbamUoRyldLHt0eXBlOiJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0i''@;'; put 'put ''fSk7aWYodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5tc1NhdmVCbG9iKXJldHVybiBuYXZpZ2F0b3IubXNTYXZlQmxvYihRLFMpO2lmKHR5cGVvZiBzYXZlQXM8InUiKXJldHVybiBzYXZlQXMoUSxTKTtpZih0eXBlb2YgVVJMPCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9j''@;'; put 'put ''dW1lbnQuY3JlYXRlRWxlbWVudCYmVVJMLmNyZWF0ZU9iamVjdFVSTCl7dmFyIGxlPVVSTC5jcmVhdGVPYmplY3RVUkwoUSk7aWYoIm9iamVjdCI9PXR5cGVvZiBjaHJvbWUmJiJmdW5jdGlvbiI9PXR5cGVvZihjaHJvbWUuZG93bmxvYWRzfHx7fSkuZG93bmxvYWQpcmV0dXJuIFVSTC5yZXZv''@;'; put 'put ''a2VPYmplY3RVUkwmJnR5cGVvZiBzZXRUaW1lb3V0PCJ1IiYmc2V0VGltZW91dChmdW5jdGlvbigpe1VSTC5yZXZva2VPYmplY3RVUkwobGUpfSw2ZTQpLGNocm9tZS5kb3dubG9hZHMuZG93bmxvYWQoe3VybDpsZSxmaWxlbmFtZTpTLHNhdmVBczohMH0pO3ZhciBtZT1kb2N1bWVudC5jcmVh''@;'; put 'put ''dGVFbGVtZW50KCJhIik7aWYobnVsbCE9bWUuZG93bmxvYWQpcmV0dXJuIG1lLmRvd25sb2FkPVMsbWUuaHJlZj1sZSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG1lKSxtZS5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobWUpLFVSTC5yZXZva2VPYmplY3RVUkwmJnR5cGVv''@;'; put 'put ''ZiBzZXRUaW1lb3V0PCJ1IiYmc2V0VGltZW91dChmdW5jdGlvbigpe1VSTC5yZXZva2VPYmplY3RVUkwobGUpfSw2ZTQpLGxlfX1pZih0eXBlb2YgJDwidSImJnR5cGVvZiBGaWxlPCJ1IiYmdHlwZW9mIEZvbGRlcjwidSIpdHJ5e3ZhciBwZT1GaWxlKFMpO3JldHVybiBwZS5vcGVuKCJ3Iiks''@;'; put 'put ''cGUuZW5jb2Rpbmc9ImJpbmFyeSIsQXJyYXkuaXNBcnJheShMKSYmKEw9QyhMKSkscGUud3JpdGUoTCkscGUuY2xvc2UoKSxMfWNhdGNoKGJlKXtpZighYmUubWVzc2FnZXx8IWJlLm1lc3NhZ2UubWF0Y2goL29uc3RydWN0LykpdGhyb3cgYmV9dGhyb3cgbmV3IEVycm9yKCJjYW5ub3Qgc2F2''@;'; put 'put ''ZSBmaWxlICIrUyl9ZnVuY3Rpb24gTGUoUyl7Zm9yKHZhciBMPU9iamVjdC5rZXlzKFMpLGs9W10sRz0wO0c8TC5sZW5ndGg7KytHKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChTLExbR10pJiZrLnB1c2goTFtHXSk7cmV0dXJuIGt9ZnVuY3Rpb24gUmUoUyxMKXtmb3Io''@;'; put 'put ''dmFyIGs9W10sRz1MZShTKSxRPTA7USE9PUcubGVuZ3RoOysrUSludWxsPT1rW1NbR1tRXV1bTF1dJiYoa1tTW0dbUV1dW0xdXT1HW1FdKTtyZXR1cm4ga31mdW5jdGlvbiBWZShTKXtmb3IodmFyIEw9W10saz1MZShTKSxHPTA7RyE9PWsubGVuZ3RoOysrRylMW1Nba1tHXV1dPWtbR107cmV0''@;'; put 'put ''dXJuIEx9ZnVuY3Rpb24gQWUoUyl7Zm9yKHZhciBMPVtdLGs9TGUoUyksRz0wO0chPT1rLmxlbmd0aDsrK0cpTFtTW2tbR11dXT1wYXJzZUludChrW0ddLDEwKTtyZXR1cm4gTH12YXIgUWUsc24sX3Q9bmV3IERhdGUoMTg5OSwxMSwzMCwwLDAsMCkscnQ9MDtmdW5jdGlvbiB2dCgpe3J0PV90''@;'; put 'put ''LmdldFRpbWUoKSs2ZTQqKChuZXcgRGF0ZSkuZ2V0VGltZXpvbmVPZmZzZXQoKS1fdC5nZXRUaW1lem9uZU9mZnNldCgpKSxRZT1mdW5jdGlvbihMLGspe3ZhciBHPUwuZ2V0VGltZSgpO3JldHVybiBrJiYoRy09MTI2MzE2OGU1KSwoRy1ydCkvODY0ZTV9LHNuPWZ1bmN0aW9uKEwpe3ZhciBr''@;'; put 'put ''PW5ldyBEYXRlO3JldHVybiBrLnNldFRpbWUoMjQqTCo2MCo2MCoxZTMrcnQpLGt9fWZ1bmN0aW9uIHV0KFMpe3ZhciBMPTAsaz0wLEc9ITEsUT1TLm1hdGNoKC9QKFswLTlcLl0rWSk/KFswLTlcLl0rTSk/KFswLTlcLl0rRCk/VChbMC05XC5dK0gpPyhbMC05XC5dK00pPyhbMC05XC5dK1Mp''@;'; put 'put ''Py8pO2lmKCFRKXRocm93IG5ldyBFcnJvcigifCIrUysifCBpcyBub3QgYW4gSVNPODYwMSBEdXJhdGlvbiIpO2Zvcih2YXIgbGU9MTtsZSE9US5sZW5ndGg7KytsZSlpZihRW2xlXSl7c3dpdGNoKGs9MSxsZT4zJiYoRz0hMCksUVtsZV0uc2xpY2UoUVtsZV0ubGVuZ3RoLTEpKXtjYXNlIlki''@;'; put 'put ''OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgSVNPIER1cmF0aW9uIEZpZWxkOiAiK1FbbGVdLnNsaWNlKFFbbGVdLmxlbmd0aC0xKSk7Y2FzZSJEIjprKj0yNDtjYXNlIkgiOmsqPTYwO2Nhc2UiTSI6aWYoIUcpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBJU08gRHVyYXRpb24g''@;'; put 'put ''RmllbGQ6IE0iKTtrKj02MH1MKz1rKnBhcnNlSW50KFFbbGVdLDEwKX1yZXR1cm4gTH12dCgpO3ZhciBYZT1uZXcgRGF0ZSgiMjAxNy0wMi0xOVQxOTowNjowOS4wMDBaIik7aXNOYU4oWGUuZ2V0RnVsbFllYXIoKSkmJihYZT1uZXcgRGF0ZSgiMi8xOS8xNyIpKTt2YXIgdHQ9MjAxNz09WGUu''@;'; put 'put ''Z2V0RnVsbFllYXIoKTtmdW5jdGlvbiBJZShTLEwpe3ZhciBrPW5ldyBEYXRlKFMpO2lmKHR0KXJldHVybiBMPjA/ay5zZXRUaW1lKGsuZ2V0VGltZSgpKzYwKmsuZ2V0VGltZXpvbmVPZmZzZXQoKSoxZTMpOkw8MCYmay5zZXRUaW1lKGsuZ2V0VGltZSgpLTYwKmsuZ2V0VGltZXpvbmVPZmZz''@;'; put 'put ''ZXQoKSoxZTMpLGs7aWYoUyBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIFM7aWYoMTkxNz09WGUuZ2V0RnVsbFllYXIoKSYmIWlzTmFOKGsuZ2V0RnVsbFllYXIoKSkpe3ZhciBHPWsuZ2V0RnVsbFllYXIoKTtyZXR1cm4gUy5pbmRleE9mKCIiK0cpPi0xfHxrLnNldEZ1bGxZZWFyKGsuZ2V0RnVs''@;'; put 'put ''bFllYXIoKSsxMDApLGt9dmFyIFE9Uy5tYXRjaCgvXGQrL2cpfHxbIjIwMTciLCIyIiwiMTkiLCIwIiwiMCIsIjAiXSxsZT1uZXcgRGF0ZSgrUVswXSwrUVsxXS0xLCtRWzJdLCtRWzNdfHwwLCtRWzRdfHwwLCtRWzVdfHwwKTtyZXR1cm4gUy5pbmRleE9mKCJaIik+LTEmJihsZT1uZXcgRGF0''@;'; put 'put ''ZShsZS5nZXRUaW1lKCktNjAqbGUuZ2V0VGltZXpvbmVPZmZzZXQoKSoxZTMpKSxsZX1mdW5jdGlvbiBhdChTKXtmb3IodmFyIEw9IiIsaz0wO2shPVMubGVuZ3RoOysraylMKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFNba10pO3JldHVybiBMfWZ1bmN0aW9uIHVuKFMpe2lmKCJvYmplY3QiIT10''@;'; put 'put ''eXBlb2YgU3x8bnVsbD09UylyZXR1cm4gUztpZihTIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gbmV3IERhdGUoUy5nZXRUaW1lKCkpO2lmKEFycmF5LmlzQXJyYXkoUykpcmV0dXJuIGZ1bmN0aW9uIEl0KFMpe2Zvcih2YXIgTD1bXSxrPTA7azxTLmxlbmd0aDsrK2spe3ZhciBHPVNba107Im9i''@;'; put 'put ''amVjdCI9PXR5cGVvZiBHP0xba109dW4oRyk6bnVsbCE9RyYmKExba109Ryl9cmV0dXJuIEx9KFMpO3ZhciBMPXt9O2Zvcih2YXIgayBpbiBTKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChTLGspJiYoTFtrXT11bihTW2tdKSk7cmV0dXJuIEx9ZnVuY3Rpb24gUnQoUyxM''@;'; put 'put ''KXtpZigib2JqZWN0IiE9dHlwZW9mIEx8fG51bGw9PUwpcmV0dXJuIFM7Zm9yKHZhciBrIGluIEwpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEwsaykmJihTW2tdPXVuKExba10pKTtyZXR1cm4gU31mdW5jdGlvbiByaShTLEwpe2Zvcih2YXIgaz0iIjtrLmxlbmd0aDxM''@;'; put 'put ''OylrKz1TO3JldHVybiBrfWZ1bmN0aW9uIGFuKFMpe3ZhciBMPU51bWJlcihTKTtpZighaXNOYU4oTCkpcmV0dXJuIGlzRmluaXRlKEwpP0w6TmFOO2lmKCEvXGQvLnRlc3QoUykpcmV0dXJuIEw7dmFyIGs9MSxHPVMucmVwbGFjZSgvKFtcZF0pLChbXGRdKS9nLCIkMSQyIikucmVwbGFjZSgv''@;'; put 'put ''WyRdL2csIiIpLnJlcGxhY2UoL1slXS9nLGZ1bmN0aW9uKCl7cmV0dXJuIGsqPTEwMCwiIn0pO3JldHVybiBpc05hTihMPU51bWJlcihHKSkmJihHPUcucmVwbGFjZSgvWyhdKC4qKVspXS8sZnVuY3Rpb24oUSxsZSl7cmV0dXJuIGs9LWssbGV9KSxpc05hTihMPU51bWJlcihHKSkpP0w6TC9r''@;'; put 'put ''fWZ1bmN0aW9uIGxuKFMpe3ZhciBMPW5ldyBEYXRlKFMpLGs9bmV3IERhdGUoTmFOKSxHPUwuZ2V0WWVhcigpLFE9TC5nZXRNb250aCgpLGxlPUwuZ2V0RGF0ZSgpO3JldHVybiBpc05hTihsZSl8fEc8MHx8Rz44MDk5P2s6KFE+MHx8bGU+MSkmJjEwMSE9R3x8Uy50b0xvd2VyQ2FzZSgpLm1h''@;'; put 'put ''dGNoKC9qYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYy8pP0w6Uy5tYXRjaCgvW14tMC05OixcL1xcXS8pP2s6TH1mdW5jdGlvbiBuaShTLEwpe2lmKEwmJkwucmF3KXJldHVybnt0OiJzIix2OlN9O2lmKCFTKXJldHVybnt0OiJ6In07aWYoIlRSVUUiPT09''@;'; put 'put ''UylyZXR1cm57dDoiYiIsdjohMH07aWYoIkZBTFNFIj09PVMpcmV0dXJue3Q6ImIiLHY6ITF9O3ZhciBrPSIiLEc9TnVtYmVyKFMpO2lmKGlzRmluaXRlKEcpKXJldHVybnt0OiJuIix2Okd9O2lmKGlzTmFOKEcpJiYvXGQvLnRlc3QoUykpe3ZhciBRPTEsbGU9Uy5yZXBsYWNlKC8oW1xkXSks''@;'; put 'put ''KFtcZF0pL2csZnVuY3Rpb24oZXQsY3QseHQpe3JldHVybiBrfHwoaz0iIywjIzAiKSxjdCt4dH0pLnJlcGxhY2UoL1skXS9nLCIiKS5yZXBsYWNlKC9cLlxkKi8sZnVuY3Rpb24oZXQpe2t8fChrPSIwIiksays9Ii4iO2Zvcih2YXIgY3Q9MjtjdDw9ZXQubGVuZ3RoOysrY3Qpays9IjAiO3Jl''@;'; put 'put ''dHVybiBldH0pLnJlcGxhY2UoL1slXS9nLGZ1bmN0aW9uKCl7cmV0dXJuIFEqPTEwMCxrfHwoaz0iMCIpLGsrPSIlIiwiIn0pO2lmKCFpc05hTihHPU51bWJlcihsZSkpKXJldHVybnt0OiJuIix2OkcvUSx6Omt9O2lmKGxlPWxlLnJlcGxhY2UoL1soXSguKilbKV0vLGZ1bmN0aW9uKGV0LGN0''@;'; put 'put ''KXtyZXR1cm4gUT0tUSxjdH0pLCFpc05hTihHPU51bWJlcihsZSkpKXJldHVybnt0OiJuIix2OkcvUSx6OihrfHwiMCIpKyJfKTsoIisoa3x8IjAiKSsiKTtAIn19ZTppZighTHx8IUwucmF3RGF0ZXMpe3ZhciBtZT1MJiZMLmNlbGxEYXRlcyxwZT1uZXcgRGF0ZShTKSxOZT1wZS5nZXRZZWFy''@;'; put 'put ''KCksQmU9cGUuZ2V0TW9udGgoKSxHZT1wZS5nZXREYXRlKCk7aWYoaXNOYU4oR2UpfHxOZTwwfHxOZT44MDk5KWJyZWFrIGU7aWYoKEJlPjB8fEdlPjEpJiYxMDEhPU5lKXJldHVybnt0Om1lPyJkIjoibiIsdjptZT9wZTpRZShwZSksejpMLmRhdGVORnx8QS5fdGFibGVbMTRdfTtpZihTLnRv''@;'; put 'put ''TG93ZXJDYXNlKCkubWF0Y2goL2phbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwfG9jdHxub3Z8ZGVjLykpcmV0dXJue3Q6bWU/ImQiOiJuIix2Om1lP3BlOlFlKHBlKSx6OkwuZGF0ZU5GfHxBLl90YWJsZVsxNF19O2lmKFMubWF0Y2goL1teLTAtOTosXC9cXF0vKSlicmVhayBl''@;'; put 'put ''O3JldHVybiBwZX1yZXR1cm57dDoicyIsdjpTfX12YXIgV3QsaG49NT09ImFiYWNhYmEiLnNwbGl0KC8oOj9iKS9pKS5sZW5ndGg7ZnVuY3Rpb24gQnQoUyl7cmV0dXJuIG51bGwhPVMmJiFTfWZ1bmN0aW9uIEF0KFMpe3JldHVybiBTLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK1Muc2xpY2Uo''@;'; put 'put ''MSl9ZnVuY3Rpb24gRm4oUyl7cmV0dXJuIFM/Uy5kYXRhP0ooUy5kYXRhKTpTLmFzTm9kZUJ1ZmZlciYmVGU/SihTLmFzTm9kZUJ1ZmZlcigpLnRvU3RyaW5nKCJiaW5hcnkiKSk6Uy5hc0JpbmFyeT9KKFMuYXNCaW5hcnkoKSk6Uy5fZGF0YSYmUy5fZGF0YS5nZXRDb250ZW50P0ooYXQoQXJy''@;'; put 'put ''YXkucHJvdG90eXBlLnNsaWNlLmNhbGwoUy5fZGF0YS5nZXRDb250ZW50KCksMCkpKTpTLmNvbnRlbnQmJlMudHlwZT9KKGF0KFMuY29udGVudCkpOm51bGw6bnVsbH1mdW5jdGlvbiBzdChTKXtpZighUylyZXR1cm4gbnVsbDtpZihTLmRhdGEpcmV0dXJuIFcoUy5kYXRhKTtpZihTLmFzTm9k''@;'; put 'put ''ZUJ1ZmZlciYmVGUpcmV0dXJuIFMuYXNOb2RlQnVmZmVyKCk7aWYoUy5fZGF0YSYmUy5fZGF0YS5nZXRDb250ZW50KXt2YXIgTD1TLl9kYXRhLmdldENvbnRlbnQoKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIEw/VyhMKTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChMKX1yZXR1cm4gUy5j''@;'; put 'put ''b250ZW50JiZTLnR5cGU/Uy5jb250ZW50Om51bGx9ZnVuY3Rpb24gUXIoUyxMKXtmb3IodmFyIGs9Uy5GdWxsUGF0aHN8fExlKFMuZmlsZXMpLEc9TC50b0xvd2VyQ2FzZSgpLFE9Ry5yZXBsYWNlKC9cLy9nLCJcXCIpLGxlPTA7bGU8ay5sZW5ndGg7KytsZSl7dmFyIG1lPWtbbGVdLnRvTG93''@;'; put 'put ''ZXJDYXNlKCk7aWYoRz09bWV8fFE9PW1lKXJldHVybiBTLmZpbGVzW2tbbGVdXX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBZZShTLEwpe3ZhciBrPVFyKFMsTCk7aWYobnVsbD09ayl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGZpbGUgIitMKyIgaW4gemlwIik7cmV0dXJuIGt9ZnVuY3Rp''@;'; put 'put ''b24gVHQoUyxMLGspe2lmKCFrKXJldHVybiBmdW5jdGlvbiBadChTKXtyZXR1cm4gUyYmIi5iaW4iPT09Uy5uYW1lLnNsaWNlKC00KT9zdChTKTpGbihTKX0oWWUoUyxMKSk7aWYoIUwpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBUdChTLEwpfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBy''@;'; put 'put ''cihTLEwsayl7aWYoIWspcmV0dXJuIEZuKFllKFMsTCkpO2lmKCFMKXJldHVybiBudWxsO3RyeXtyZXR1cm4gcnIoUyxMKX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gZnQoUyxMLGspe2lmKCFrKXJldHVybiBzdChZZShTLEwpKTtpZighTClyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIGZ0''@;'; put 'put ''KFMsTCl9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIFpuKFMsTCxrKXtTLkZ1bGxQYXRocz95ZS51dGlscy5jZmJfYWRkKFMsTCxrKTpTLmZpbGUoTCxrKX1mdW5jdGlvbiBkaSgpe3JldHVybiBXdD9uZXcgV3Q6eWUudXRpbHMuY2ZiX25ldygpfWZ1bmN0aW9uIGRuKFMsTCl7dmFyIGs7''@;'; put 'put ''aWYoV3Qpc3dpdGNoKEwudHlwZSl7Y2FzZSJiYXNlNjQiOms9bmV3IFd0KFMse2Jhc2U2NDohMH0pO2JyZWFrO2Nhc2UiYmluYXJ5IjpjYXNlImFycmF5IjprPW5ldyBXdChTLHtiYXNlNjQ6ITF9KTticmVhaztjYXNlImJ1ZmZlciI6az1uZXcgV3QoUyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrTC50eXBlKX1lbHNlIHN3aXRjaChMLnR5cGUpe2Nhc2UiYmFzZTY0IjprPXllLnJlYWQoUyx7dHlwZToiYmFzZTY0In0pO2JyZWFrO2Nhc2UiYmluYXJ5IjprPXllLnJlYWQoUyx7dHlwZToiYmluYXJ5In0pO2JyZWFrO2Nhc2UiYnVmZmVy''@;'; put 'put ''IjpjYXNlImFycmF5IjprPXllLnJlYWQoUyx7dHlwZToiYnVmZmVyIn0pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK0wudHlwZSl9cmV0dXJuIGt9ZnVuY3Rpb24gbW4oUyxMKXtpZigiLyI9PVMuY2hhckF0KDApKXJldHVybiBTLnNsaWNlKDEp''@;'; put 'put ''O3ZhciBrPUwuc3BsaXQoIi8iKTsiLyIhPUwuc2xpY2UoLTEpJiZrLnBvcCgpO2Zvcih2YXIgRz1TLnNwbGl0KCIvIik7MCE9PUcubGVuZ3RoOyl7dmFyIFE9Ry5zaGlmdCgpOyIuLiI9PT1RP2sucG9wKCk6Ii4iIT09USYmay5wdXNoKFEpfXJldHVybiBrLmpvaW4oIi8iKX10eXBlb2YgSlNa''@;'; put 'put ''aXBTeW5jPCJ1IiYmKFd0PUpTWmlwU3luYyksY2UuZXhwb3J0cyYmdHlwZW9mIFd0PiJ1IiYmKFd0PWIoMzE3OSkpO3ZhciBwaT0nPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PlxyXG4nLGZuPS8oPzpbXiJccz8+XC9dKylccyo9XHMqKCg/''@;'; put 'put ''OiIpKD86W14iXSo/KSg/OiIpfCg/OicpKD86W14nXSo/KSg/OicpfCg/OlteJyI+XHNdKykpL2csdG49LzxbXC9cP10/W2EtekEtWjAtOTpfLV0rKD86XHMrW14iXHM/PlwvXStccyo9XHMqKD86IlteIl0qInwnW14nXSonfFteJyI+XHM9XSspKSpccz9bXC9cP10/Pi9nO3BpLm1hdGNoKHRu''@;'; put 'put ''KXx8KHRuPS88W14+XSo+L2cpO3ZhciBjYT0vPFx3KjovLF9pPS88KFwvPylcdys6LztmdW5jdGlvbiB2cihTLEwsayl7Zm9yKHZhciBHPXt9LFE9MCxsZT0wO1EhPT1TLmxlbmd0aCYmMzIhPT0obGU9Uy5jaGFyQ29kZUF0KFEpKSYmMTAhPT1sZSYmMTMhPT1sZTsrK1EpO2lmKEx8fChHWzBd''@;'; put 'put ''PVMuc2xpY2UoMCxRKSksUT09PVMubGVuZ3RoKXJldHVybiBHO3ZhciBtZT1TLm1hdGNoKGZuKSxwZT0wLGJlPSIiLE5lPTAsQmU9IiIsR2U9IiIsZXQ9MTtpZihtZSlmb3IoTmU9MDtOZSE9bWUubGVuZ3RoOysrTmUpe2ZvcihHZT1tZVtOZV0sbGU9MDtsZSE9R2UubGVuZ3RoJiY2MSE9PUdl''@;'; put 'put ''LmNoYXJDb2RlQXQobGUpOysrbGUpO2ZvcihCZT1HZS5zbGljZSgwLGxlKS50cmltKCk7MzI9PUdlLmNoYXJDb2RlQXQobGUrMSk7KSsrbGU7Zm9yKGV0PTM0PT0oUT1HZS5jaGFyQ29kZUF0KGxlKzEpKXx8Mzk9PVE/MTowLGJlPUdlLnNsaWNlKGxlKzErZXQsR2UubGVuZ3RoLWV0KSxwZT0w''@;'; put 'put ''O3BlIT1CZS5sZW5ndGgmJjU4IT09QmUuY2hhckNvZGVBdChwZSk7KytwZSk7aWYocGU9PT1CZS5sZW5ndGgpQmUuaW5kZXhPZigiXyIpPjAmJihCZT1CZS5zbGljZSgwLEJlLmluZGV4T2YoIl8iKSkpLEdbQmVdPWJlLGt8fChHW0JlLnRvTG93ZXJDYXNlKCldPWJlKTtlbHNle3ZhciBjdD0o''@;'; put 'put ''NT09PXBlJiYieG1sbnMiPT09QmUuc2xpY2UoMCw1KT8ieG1sbnMiOiIiKStCZS5zbGljZShwZSsxKTtpZihHW2N0XSYmImV4dCI9PUJlLnNsaWNlKHBlLTMscGUpKWNvbnRpbnVlO0dbY3RdPWJlLGt8fChHW2N0LnRvTG93ZXJDYXNlKCldPWJlKX19cmV0dXJuIEd9ZnVuY3Rpb24gWGkoUyl7''@;'; put 'put ''cmV0dXJuIFMucmVwbGFjZShfaSwiPCQxIil9dmFyIFFpPXsiJnF1b3Q7IjonIicsIiZhcG9zOyI6IiciLCImZ3Q7IjoiPiIsIiZsdDsiOiI8IiwiJmFtcDsiOiImIn0sVmk9VmUoUWkpLGVpPWZ1bmN0aW9uKCl7dmFyIFM9LyYoPzpxdW90fGFwb3N8Z3R8bHR8YW1wfCN4PyhbXGRhLWZBLUZd''@;'; put 'put ''KykpOy9naSxMPS9feChbXGRhLWZBLUZdezR9KV8vZ2k7cmV0dXJuIGZ1bmN0aW9uIGsoRyl7dmFyIFE9RysiIixsZT1RLmluZGV4T2YoIjwhW0NEQVRBWyIpO2lmKC0xPT1sZSlyZXR1cm4gUS5yZXBsYWNlKFMsZnVuY3Rpb24ocGUsYmUpe3JldHVybiBRaVtwZV18fFN0cmluZy5mcm9tQ2hh''@;'; put 'put ''ckNvZGUocGFyc2VJbnQoYmUscGUuaW5kZXhPZigieCIpPi0xPzE2OjEwKSl8fHBlfSkucmVwbGFjZShMLGZ1bmN0aW9uKHBlLGJlKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChiZSwxNikpfSk7dmFyIG1lPVEuaW5kZXhPZigiXV0+Iik7cmV0dXJuIGsoUS5zbGljZSgw''@;'; put 'put ''LGxlKSkrUS5zbGljZShsZSs5LG1lKStrKFEuc2xpY2UobWUrMykpfX0oKSx1YT0vWyY8PiciXS9nLFJpPS9bXHUwMDAwLVx1MDAwOFx1MDAwYi1cdTAwMWZdL2csRGE9L194WzAtOWEtZkEtRl17NH1fL2c7ZnVuY3Rpb24gaGkoUyl7cmV0dXJuKFMrIiIpLnJlcGxhY2UoRGEsIl94MDA1RiQm''@;'; put 'put ''IikucmVwbGFjZSh1YSxmdW5jdGlvbihrKXtyZXR1cm4gVmlba119KS5yZXBsYWNlKFJpLGZ1bmN0aW9uKGspe3JldHVybiJfeCIrKCIwMDAiK2suY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KSsiXyJ9KX1mdW5jdGlvbiBxaShTKXtyZXR1cm4gaGkoUykucmVwbGFjZSgv''@;'; put 'put ''XG4vZywiX3gwMDBhXyIpfWZ1bmN0aW9uIFBhKFMpe3JldHVybiBoaShTKS5yZXBsYWNlKC8gL2csIl94MDAyMF8iKX12YXIgdXI9L1tcdTAwMDAtXHUwMDFmXS9nO2Z1bmN0aW9uIGJhKFMpe3JldHVybihTKyIiKS5yZXBsYWNlKHVhLGZ1bmN0aW9uKGspe3JldHVybiBWaVtrXX0pLnJlcGxh''@;'; put 'put ''Y2UoL1xuL2csIjxici8+IikucmVwbGFjZSh1cixmdW5jdGlvbihrKXtyZXR1cm4iJiN4IisoIjAwMCIray5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpKyI7In0pfWZ1bmN0aW9uIE1pKFMpe3JldHVybihTKyIiKS5yZXBsYWNlKHVhLGZ1bmN0aW9uKGspe3JldHVybiBW''@;'; put 'put ''aVtrXX0pLnJlcGxhY2UodXIsZnVuY3Rpb24oayl7cmV0dXJuIiYjeCIray5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpKyI7In0pfXZhciB3YT1mdW5jdGlvbigpe3ZhciBTPS8mIyhcZCspOy9nO2Z1bmN0aW9uIEwoayxHKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFy''@;'; put 'put ''Q29kZShwYXJzZUludChHLDEwKSl9cmV0dXJuIGZ1bmN0aW9uKEcpe3JldHVybiBHLnJlcGxhY2UoUyxMKX19KCksZWE9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oTCl7cmV0dXJuIEwucmVwbGFjZSgvKFxyXG58W1xyXG5dKS9nLCImIzEwOyIpfX0oKTtmdW5jdGlvbiBGcihTKXtzd2l0''@;'; put 'put ''Y2goUyl7Y2FzZSAxOmNhc2UhMDpjYXNlIjEiOmNhc2UidHJ1ZSI6Y2FzZSJUUlVFIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX12YXIgY289ZnVuY3Rpb24oTCl7Zm9yKHZhciBrPSIiLEc9MCxRPTAsbGU9MCxtZT0wLHBlPTAsYmU9MDtHPEwubGVuZ3RoOykoUT1MLmNoYXJDb2RlQXQo''@;'; put 'put ''RysrKSk8MTI4P2srPVN0cmluZy5mcm9tQ2hhckNvZGUoUSk6KGxlPUwuY2hhckNvZGVBdChHKyspLFE+MTkxJiZRPDIyND8ocGU9KDMxJlEpPDw2LHBlfD02MyZsZSxrKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHBlKSk6KG1lPUwuY2hhckNvZGVBdChHKyspLFE8MjQwP2srPVN0cmluZy5mcm9t''@;'; put 'put ''Q2hhckNvZGUoKDE1JlEpPDwxMnwoNjMmbGUpPDw2fDYzJm1lKTooYmU9KCg3JlEpPDwxOHwoNjMmbGUpPDwxMnwoNjMmbWUpPDw2fDYzJihwZT1MLmNoYXJDb2RlQXQoRysrKSkpLTY1NTM2LGsrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKGJlPj4+MTAmMTAyMykpLGsrPVN0cmluZy5m''@;'; put 'put ''cm9tQ2hhckNvZGUoNTYzMjArKDEwMjMmYmUpKSkpKTtyZXR1cm4ga30sWWE9ZnVuY3Rpb24oUyl7Zm9yKHZhciBMPVtdLGs9MCxHPTAsUT0wO2s8Uy5sZW5ndGg7KXN3aXRjaChHPVMuY2hhckNvZGVBdChrKyspLCEwKXtjYXNlIEc8MTI4OkwucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKEcp''@;'; put 'put ''KTticmVhaztjYXNlIEc8MjA0ODpMLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxOTIrKEc+PjYpKSksTC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTI4Kyg2MyZHKSkpO2JyZWFrO2Nhc2UgRz49NTUyOTYmJkc8NTczNDQ6Ry09NTUyOTYsUT1TLmNoYXJDb2RlQXQoaysrKS01NjMyMCso''@;'; put 'put ''Rzw8MTApLEwucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDI0MCsoUT4+MTgmNykpKSxMLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxNDQrKFE+PjEyJjYzKSkpLEwucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoUT4+NiY2MykpKSxMLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgx''@;'; put 'put ''MjgrKDYzJlEpKSk7YnJlYWs7ZGVmYXVsdDpMLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgyMjQrKEc+PjEyKSkpLEwucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoRz4+NiY2MykpKSxMLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKDYzJkcpKSl9cmV0dXJuIEwuam9pbigi''@;'; put 'put ''Iil9O2lmKFRlKXt2YXIgJGM9ZnVuY3Rpb24oTCl7dmFyIEcsUSxiZSxrPUJ1ZmZlci5hbGxvYygyKkwubGVuZ3RoKSxsZT0xLG1lPTAscGU9MDtmb3IoUT0wO1E8TC5sZW5ndGg7USs9bGUpbGU9MSwoYmU9TC5jaGFyQ29kZUF0KFEpKTwxMjg/Rz1iZTpiZTwyMjQ/KEc9NjQqKDMxJmJlKSso''@;'; put 'put ''NjMmTC5jaGFyQ29kZUF0KFErMSkpLGxlPTIpOmJlPDI0MD8oRz00MDk2KigxNSZiZSkrNjQqKDYzJkwuY2hhckNvZGVBdChRKzEpKSsoNjMmTC5jaGFyQ29kZUF0KFErMikpLGxlPTMpOihsZT00LEc9MjYyMTQ0Kig3JmJlKSs0MDk2Kig2MyZMLmNoYXJDb2RlQXQoUSsxKSkrNjQqKDYzJkwu''@;'; put 'put ''Y2hhckNvZGVBdChRKzIpKSsoNjMmTC5jaGFyQ29kZUF0KFErMykpLHBlPTU1Mjk2KygoRy09NjU1MzYpPj4+MTAmMTAyMyksRz01NjMyMCsoMTAyMyZHKSksMCE9PXBlJiYoa1ttZSsrXT0yNTUmcGUsa1ttZSsrXT1wZT4+PjgscGU9MCksa1ttZSsrXT1HJTI1NixrW21lKytdPUc+Pj44O3Jl''@;'; put 'put ''dHVybiBrLnNsaWNlKDAsbWUpLnRvU3RyaW5nKCJ1Y3MyIil9LHYxPSJmb28gYmFyIGJhelx4ZTJceDk4XHg4M1x4ZjBceDlmXHg4ZFx4YTMiO2NvKHYxKT09JGModjEpJiYoY289JGMpO3ZhciBQcj1mdW5jdGlvbihMKXtyZXR1cm4gTWUoTCwiYmluYXJ5IikudG9TdHJpbmcoInV0ZjgiKX07''@;'; put 'put ''Y28odjEpPT1Qcih2MSkmJihjbz1QciksWWE9ZnVuY3Rpb24oUyl7cmV0dXJuIE1lKFMsInV0ZjgiKS50b1N0cmluZygiYmluYXJ5Iil9fXZhciBTLGQwPWZ1bmN0aW9uKCl7dmFyIFM9e307cmV0dXJuIGZ1bmN0aW9uKGssRyl7dmFyIFE9aysifCIrKEd8fCIiKTtyZXR1cm4gU1tRXT9TW1Fd''@;'; put 'put ''OlNbUV09bmV3IFJlZ0V4cCgiPCg/Olxcdys6KT8iK2srJyg/OiB4bWw6c3BhY2U9InByZXNlcnZlIik/KD86W14+XSopPihbXFxzXFxTXSo/KTwvKD86XFx3KzopPycraysiPiIsR3x8IiIpfX0oKSxucj0oUz1bWyJuYnNwIiwiICJdLFsibWlkZG90IiwiXHhiNyJdLFsicXVvdCIsJyInXSxb''@;'; put 'put ''ImFwb3MiLCInIl0sWyJndCIsIj4iXSxbImx0IiwiPCJdLFsiYW1wIiwiJiJdXS5tYXAoZnVuY3Rpb24oTCl7cmV0dXJuW25ldyBSZWdFeHAoIiYiK0xbMF0rIjsiLCJpZyIpLExbMV1dfSksZnVuY3Rpb24oayl7Zm9yKHZhciBHPWsucmVwbGFjZSgvXltcdFxuXHIgXSsvLCIiKS5yZXBsYWNl''@;'; put 'put ''KC9bXHRcblxyIF0rJC8sIiIpLnJlcGxhY2UoL1tcdFxuXHIgXSsvZywiICIpLnJlcGxhY2UoLzxccypbYkJdW3JSXVxzKlwvPz4vZywiXG4iKS5yZXBsYWNlKC88W14+XSo+L2csIiIpLFE9MDtRPFMubGVuZ3RoOysrUSlHPUcucmVwbGFjZShTW1FdWzBdLFNbUV1bMV0pO3JldHVybiBHfSks''@;'; put 'put ''UmE9ZnVuY3Rpb24oKXt2YXIgUz17fTtyZXR1cm4gZnVuY3Rpb24oayl7cmV0dXJuIHZvaWQgMCE9PVNba10/U1trXTpTW2tdPW5ldyBSZWdFeHAoIjwoPzp2dDopPyIraysiPihbXFxzXFxTXSo/KTwvKD86dnQ6KT8iK2srIj4iLCJnIil9fSgpLGFpPS88XC8/KD86dnQ6KT92YXJpYW50Pi9n''@;'; put 'put ''LFV0PS88KD86dnQ6KShbXj5dKik+KFtcc1xTXSopPC87ZnVuY3Rpb24gdGkoUyxMKXt2YXIgaz12cihTKSxHPVMubWF0Y2goUmEoay5iYXNlVHlwZSkpfHxbXSxRPVtdO2lmKEcubGVuZ3RoIT1rLnNpemUpe2lmKEwuV1RGKXRocm93IG5ldyBFcnJvcigidW5leHBlY3RlZCB2ZWN0b3IgbGVu''@;'; put 'put ''Z3RoICIrRy5sZW5ndGgrIiAhPSAiK2suc2l6ZSk7cmV0dXJuIFF9cmV0dXJuIEcuZm9yRWFjaChmdW5jdGlvbihsZSl7dmFyIG1lPWxlLnJlcGxhY2UoYWksIiIpLm1hdGNoKFV0KTttZSYmUS5wdXNoKHt2OmNvKG1lWzJdKSx0Om1lWzFdfSl9KSxRfXZhciB1Yz0vKF5cc3xccyR8XG4pLztm''@;'; put 'put ''dW5jdGlvbiBabyhTLEwpe3JldHVybiI8IitTKyhMLm1hdGNoKHVjKT8nIHhtbDpzcGFjZT0icHJlc2VydmUiJzoiIikrIj4iK0wrIjwvIitTKyI+In1mdW5jdGlvbiBkYyhTKXtyZXR1cm4gTGUoUykubWFwKGZ1bmN0aW9uKEwpe3JldHVybiIgIitMKyc9IicrU1tMXSsnIid9KS5qb2luKCIi''@;'; put 'put ''KX1mdW5jdGlvbiBqcihTLEwsayl7cmV0dXJuIjwiK1MrKG51bGwhPWs/ZGMoayk6IiIpKyhudWxsIT1MPyhMLm1hdGNoKHVjKT8nIHhtbDpzcGFjZT0icHJlc2VydmUiJzoiIikrIj4iK0wrIjwvIitTOiIvIikrIj4ifWZ1bmN0aW9uIHkxKFMsTCl7dHJ5e3JldHVybiBTLnRvSVNPU3RyaW5n''@;'; put 'put ''KCkucmVwbGFjZSgvXC5cZCovLCIiKX1jYXRjaChrKXtpZihMKXRocm93IGt9cmV0dXJuIiJ9dmFyIE5oLE1wLEJhPXtkYzoiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iLGRjdGVybXM6Imh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy8iLGRjbWl0eXBlOiJodHRwOi8vcHVybC5v''@;'; put 'put ''cmcvZGMvZGNtaXR5cGUvIixteDoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvbWFjL2V4Y2VsLzIwMDgvbWFpbiIscjoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcyIsc2pzOiJodHRwOi8vc2No''@;'; put 'put ''ZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3NoZWV0anMvY29yZS1wcm9wZXJ0aWVzIix2dDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvZG9jUHJvcHNWVHlwZXMiLHhzaToiaHR0cDovL3d3dy53My5vcmcvMjAwMS9Y''@;'; put 'put ''TUxTY2hlbWEtaW5zdGFuY2UiLHhzZDoiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLG1haW46WyJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvc3ByZWFkc2hlZXRtbC8yMDA2L21haW4iLCJodHRwOi8vcHVybC5vY2xjLm9yZy9vb3htbC9zcHJlYWRzaGVldG1s''@;'; put 'put ''L21haW4iLCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9leGNlbC8yMDA2L21haW4iLCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9leGNlbC8yMDA2LzIiXX0sS2Nfbz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIixLY194''@;'; put 'put ''PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpleGNlbCIsS2Nfc3M9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOnNwcmVhZHNoZWV0IixLY192PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOnZtbCIsTzA9ZnVuY3Rpb24oUyl7Zm9yKHZhciBMPVtdLEc9MDtH''@;'; put 'put ''PFNbMF0ubGVuZ3RoOysrRylpZihTWzBdW0ddKWZvcih2YXIgUT0wLGxlPVNbMF1bR10ubGVuZ3RoO1E8bGU7USs9MTAyNDApTC5wdXNoLmFwcGx5KEwsU1swXVtHXS5zbGljZShRLFErMTAyNDApKTtyZXR1cm4gTH0sJGw9TzAsaGM9ZnVuY3Rpb24oUyxMLGspe2Zvcih2YXIgRz1bXSxRPUw7''@;'; put 'put ''UTxrO1ErPTIpRy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYW8oUyxRKSkpO3JldHVybiBHLmpvaW4oIiIpLnJlcGxhY2UoRSwiIil9LHZnPWhjLEhoPWZ1bmN0aW9uKFMsTCxrKXtmb3IodmFyIEc9W10sUT1MO1E8TCtrOysrUSlHLnB1c2goKCIwIitTW1FdLnRvU3RyaW5nKDE2KSkuc2xp''@;'; put 'put ''Y2UoLTIpKTtyZXR1cm4gRy5qb2luKCIiKX0sdXM9SGgscWE9ZnVuY3Rpb24oUyxMLGspe2Zvcih2YXIgRz1bXSxRPUw7UTxrO1ErKylHLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh6aShTLFEpKSk7cmV0dXJuIEcuam9pbigiIil9LFdkPXFhLExjPWZ1bmN0aW9uKFMsTCl7dmFyIGs9JG8o''@;'; put 'put ''UyxMKTtyZXR1cm4gaz4wP3FhKFMsTCs0LEwrNCtrLTEpOiIifSx3cD1MYyx0ZD1mdW5jdGlvbihTLEwpe3ZhciBrPSRvKFMsTCk7cmV0dXJuIGs+MD9xYShTLEwrNCxMKzQray0xKToiIn0sQ3A9dGQsaHU9ZnVuY3Rpb24oUyxMKXt2YXIgaz0yKiRvKFMsTCk7cmV0dXJuIGs+MD9xYShTLEwr''@;'; put 'put ''NCxMKzQray0xKToiIn0sU3A9aHU7Tmg9TXA9ZnVuY3Rpb24oTCxrKXt2YXIgRz0kbyhMLGspO3JldHVybiBHPjA/aGMoTCxrKzQsays0K0cpOiIifTt2YXIgZ3IsU2ksJDI9ZnVuY3Rpb24oUyxMKXt2YXIgaz0kbyhTLEwpO3JldHVybiBrPjA/cWEoUyxMKzQsTCs0K2spOiIifSx4bj0kMjtn''@;'; put 'put ''cj1TaT1mdW5jdGlvbihTLEwpe3JldHVybiBmdW5jdGlvbiBRNShTLEwpe2Zvcih2YXIgaz0xLTIqKFNbTCs3XT4+PjcpLEc9KCgxMjcmU1tMKzddKTw8NCkrKFNbTCs2XT4+PjQmMTUpLFE9MTUmU1tMKzZdLGxlPTU7bGU+PTA7LS1sZSlRPTI1NipRK1NbTCtsZV07cmV0dXJuIDIwNDc9PUc/''@;'; put 'put ''MD09UT9rKigxLzApOk5hTjooMD09Rz9HPS0xMDIyOihHLT0xMDIzLFErPU1hdGgucG93KDIsNTIpKSxrKk1hdGgucG93KDIsRy01MikqUSl9KFMsTCl9O3ZhciB0YT1mdW5jdGlvbihMKXtyZXR1cm4gQXJyYXkuaXNBcnJheShMKX07VGUmJihoYz1mdW5jdGlvbihTLEwsayl7cmV0dXJuIEJ1''@;'; put 'put ''ZmZlci5pc0J1ZmZlcihTKT9TLnRvU3RyaW5nKCJ1dGYxNmxlIixMLGspLnJlcGxhY2UoRSwiIik6dmcoUyxMLGspfSxIaD1mdW5jdGlvbihTLEwsayl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihTKT9TLnRvU3RyaW5nKCJoZXgiLEwsTCtrKTp1cyhTLEwsayl9LExjPWZ1bmN0aW9uKEwsayl7''@;'; put 'put ''aWYoIUJ1ZmZlci5pc0J1ZmZlcihMKSlyZXR1cm4gd3AoTCxrKTt2YXIgRz1MLnJlYWRVSW50MzJMRShrKTtyZXR1cm4gRz4wP0wudG9TdHJpbmcoInV0ZjgiLGsrNCxrKzQrRy0xKToiIn0sdGQ9ZnVuY3Rpb24oTCxrKXtpZighQnVmZmVyLmlzQnVmZmVyKEwpKXJldHVybiBDcChMLGspO3Zh''@;'; put 'put ''ciBHPUwucmVhZFVJbnQzMkxFKGspO3JldHVybiBHPjA/TC50b1N0cmluZygidXRmOCIsays0LGsrNCtHLTEpOiIifSxodT1mdW5jdGlvbihMLGspe2lmKCFCdWZmZXIuaXNCdWZmZXIoTCkpcmV0dXJuIFNwKEwsayk7dmFyIEc9MipMLnJlYWRVSW50MzJMRShrKTtyZXR1cm4gTC50b1N0cmlu''@;'; put 'put ''ZygidXRmMTZsZSIsays0LGsrNCtHLTEpfSxOaD1mdW5jdGlvbihMLGspe2lmKCFCdWZmZXIuaXNCdWZmZXIoTCkpcmV0dXJuIE1wKEwsayk7dmFyIEc9TC5yZWFkVUludDMyTEUoayk7cmV0dXJuIEwudG9TdHJpbmcoInV0ZjE2bGUiLGsrNCxrKzQrRyl9LCQyPWZ1bmN0aW9uKEwsayl7aWYo''@;'; put 'put ''IUJ1ZmZlci5pc0J1ZmZlcihMKSlyZXR1cm4geG4oTCxrKTt2YXIgRz1MLnJlYWRVSW50MzJMRShrKTtyZXR1cm4gTC50b1N0cmluZygidXRmOCIsays0LGsrNCtHKX0scWE9ZnVuY3Rpb24oTCxrLEcpe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoTCk/TC50b1N0cmluZygidXRmOCIsayxHKTpX''@;'; put 'put ''ZChMLGssRyl9LE8wPWZ1bmN0aW9uKFMpe3JldHVybiBTWzBdLmxlbmd0aD4wJiZCdWZmZXIuaXNCdWZmZXIoU1swXVswXSk/QnVmZmVyLmNvbmNhdChTWzBdKTokbChTKX0saj1mdW5jdGlvbihTKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKFNbMF0pP0J1ZmZlci5jb25jYXQoUyk6W10uY29u''@;'; put 'put ''Y2F0LmFwcGx5KFtdLFMpfSxncj1mdW5jdGlvbihMLGspe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoTCk/TC5yZWFkRG91YmxlTEUoayk6U2koTCxrKX0sdGE9ZnVuY3Rpb24oTCl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihMKXx8QXJyYXkuaXNBcnJheShMKX0pLHR5cGVvZiBjcHRhYmxlPCJ1''@;'; put 'put ''IiYmKGhjPWZ1bmN0aW9uKFMsTCxrKXtyZXR1cm4gY3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCxTLnNsaWNlKEwsaykpLnJlcGxhY2UoRSwiIil9LHFhPWZ1bmN0aW9uKFMsTCxrKXtyZXR1cm4gY3B0YWJsZS51dGlscy5kZWNvZGUoNjUwMDEsUy5zbGljZShMLGspKX0sTGM9ZnVuY3Rpb24o''@;'; put 'put ''UyxMKXt2YXIgaz0kbyhTLEwpO3JldHVybiBrPjA/Y3B0YWJsZS51dGlscy5kZWNvZGUoRixTLnNsaWNlKEwrNCxMKzQray0xKSk6IiJ9LHRkPWZ1bmN0aW9uKFMsTCl7dmFyIGs9JG8oUyxMKTtyZXR1cm4gaz4wP2NwdGFibGUudXRpbHMuZGVjb2RlKFAsUy5zbGljZShMKzQsTCs0K2stMSkp''@;'; put 'put ''OiIifSxodT1mdW5jdGlvbihTLEwpe3ZhciBrPTIqJG8oUyxMKTtyZXR1cm4gaz4wP2NwdGFibGUudXRpbHMuZGVjb2RlKDEyMDAsUy5zbGljZShMKzQsTCs0K2stMSkpOiIifSxOaD1mdW5jdGlvbihTLEwpe3ZhciBrPSRvKFMsTCk7cmV0dXJuIGs+MD9jcHRhYmxlLnV0aWxzLmRlY29kZSgx''@;'; put 'put ''MjAwLFMuc2xpY2UoTCs0LEwrNCtrKSk6IiJ9LCQyPWZ1bmN0aW9uKFMsTCl7dmFyIGs9JG8oUyxMKTtyZXR1cm4gaz4wP2NwdGFibGUudXRpbHMuZGVjb2RlKDY1MDAxLFMuc2xpY2UoTCs0LEwrNCtrKSk6IiJ9KTt2YXIgemk9ZnVuY3Rpb24oUyxMKXtyZXR1cm4gU1tMXX0sYW89ZnVuY3Rp''@;'; put 'put ''b24oUyxMKXtyZXR1cm4gMjU2KlNbTCsxXStTW0xdfSxvbD1mdW5jdGlvbihTLEwpe3ZhciBrPTI1NipTW0wrMV0rU1tMXTtyZXR1cm4gazwzMjc2OD9rOi0xKig2NTUzNS1rKzEpfSwkbz1mdW5jdGlvbihTLEwpe3JldHVybiBTW0wrM10qKDE8PDI0KSsoU1tMKzJdPDwxNikrKFNbTCsxXTw8''@;'; put 'put ''OCkrU1tMXX0sVGw9ZnVuY3Rpb24oUyxMKXtyZXR1cm4gU1tMKzNdPDwyNHxTW0wrMl08PDE2fFNbTCsxXTw8OHxTW0xdfSxBbD1mdW5jdGlvbihTLEwpe3JldHVybiBTW0xdPDwyNHxTW0wrMV08PDE2fFNbTCsyXTw8OHxTW0wrM119O2Z1bmN0aW9uIGZyKFMsTCl7dmFyIEcsUSxtZSxwZSxi''@;'; put 'put ''ZSxOZSxrPSIiLGxlPVtdO3N3aXRjaChMKXtjYXNlImRiY3MiOmlmKE5lPXRoaXMubCxUZSYmQnVmZmVyLmlzQnVmZmVyKHRoaXMpKWs9dGhpcy5zbGljZSh0aGlzLmwsdGhpcy5sKzIqUykudG9TdHJpbmcoInV0ZjE2bGUiKTtlbHNlIGZvcihiZT0wO2JlPFM7KytiZSlrKz1TdHJpbmcuZnJv''@;'; put 'put ''bUNoYXJDb2RlKGFvKHRoaXMsTmUpKSxOZSs9MjtTKj0yO2JyZWFrO2Nhc2UidXRmOCI6az1xYSh0aGlzLHRoaXMubCx0aGlzLmwrUyk7YnJlYWs7Y2FzZSJ1dGYxNmxlIjprPWhjKHRoaXMsdGhpcy5sLHRoaXMubCsoUyo9MikpO2JyZWFrO2Nhc2Uid3N0ciI6aWYoISh0eXBlb2YgY3B0YWJs''@;'; put 'put ''ZTwidSIpKXJldHVybiBmci5jYWxsKHRoaXMsUywiZGJjcyIpO2s9Y3B0YWJsZS51dGlscy5kZWNvZGUoUCx0aGlzLnNsaWNlKHRoaXMubCx0aGlzLmwrMipTKSksUyo9MjticmVhaztjYXNlImxwc3RyLWFuc2kiOms9TGModGhpcyx0aGlzLmwpLFM9NCskbyh0aGlzLHRoaXMubCk7YnJlYWs7''@;'; put 'put ''Y2FzZSJscHN0ci1jcCI6az10ZCh0aGlzLHRoaXMubCksUz00KyRvKHRoaXMsdGhpcy5sKTticmVhaztjYXNlImxwd3N0ciI6az1odSh0aGlzLHRoaXMubCksUz00KzIqJG8odGhpcyx0aGlzLmwpO2JyZWFrO2Nhc2UibHBwNCI6Uz00KyRvKHRoaXMsdGhpcy5sKSxrPU5oKHRoaXMsdGhpcy5s''@;'; put 'put ''KSwyJlMmJihTKz0yKTticmVhaztjYXNlIjhscHA0IjpTPTQrJG8odGhpcyx0aGlzLmwpLGs9JDIodGhpcyx0aGlzLmwpLDMmUyYmKFMrPTQtKDMmUykpO2JyZWFrO2Nhc2UiY3N0ciI6Zm9yKFM9MCxrPSIiOzAhPT0obWU9emkodGhpcyx0aGlzLmwrUysrKSk7KWxlLnB1c2gocmUobWUpKTtr''@;'; put 'put ''PWxlLmpvaW4oIiIpO2JyZWFrO2Nhc2UiX3dzdHIiOmZvcihTPTAsaz0iIjswIT09KG1lPWFvKHRoaXMsdGhpcy5sK1MpKTspbGUucHVzaChyZShtZSkpLFMrPTI7Uys9MixrPWxlLmpvaW4oIiIpO2JyZWFrO2Nhc2UiZGJjcy1jb250Ijpmb3Ioaz0iIixOZT10aGlzLmwsYmU9MDtiZTxTOysr''@;'; put 'put ''YmUpe2lmKHRoaXMubGVucyYmLTEhPT10aGlzLmxlbnMuaW5kZXhPZihOZSkpcmV0dXJuIG1lPXppKHRoaXMsTmUpLHRoaXMubD1OZSsxLHBlPWZyLmNhbGwodGhpcyxTLWJlLG1lPyJkYmNzLWNvbnQiOiJzYmNzLWNvbnQiKSxsZS5qb2luKCIiKStwZTtsZS5wdXNoKHJlKGFvKHRoaXMsTmUp''@;'; put 'put ''KSksTmUrPTJ9az1sZS5qb2luKCIiKSxTKj0yO2JyZWFrO2Nhc2UiY3BzdHIiOmlmKHR5cGVvZiBjcHRhYmxlPCJ1Iil7az1jcHRhYmxlLnV0aWxzLmRlY29kZShQLHRoaXMuc2xpY2UodGhpcy5sLHRoaXMubCtTKSk7YnJlYWt9Y2FzZSJzYmNzLWNvbnQiOmZvcihrPSIiLE5lPXRoaXMubCxi''@;'; put 'put ''ZT0wO2JlIT1TOysrYmUpe2lmKHRoaXMubGVucyYmLTEhPT10aGlzLmxlbnMuaW5kZXhPZihOZSkpcmV0dXJuIG1lPXppKHRoaXMsTmUpLHRoaXMubD1OZSsxLHBlPWZyLmNhbGwodGhpcyxTLWJlLG1lPyJkYmNzLWNvbnQiOiJzYmNzLWNvbnQiKSxsZS5qb2luKCIiKStwZTtsZS5wdXNoKHJl''@;'; put 'put ''KHppKHRoaXMsTmUpKSksTmUrPTF9az1sZS5qb2luKCIiKTticmVhaztkZWZhdWx0OnN3aXRjaChTKXtjYXNlIDE6cmV0dXJuIEc9emkodGhpcyx0aGlzLmwpLHRoaXMubCsrLEc7Y2FzZSAyOnJldHVybiBHPSgiaSI9PT1MP29sOmFvKSh0aGlzLHRoaXMubCksdGhpcy5sKz0yLEc7Y2FzZSA0''@;'; put 'put ''OmNhc2UtNDpyZXR1cm4iaSIhPT1MJiYxMjgmdGhpc1t0aGlzLmwrM10/KFE9JG8odGhpcyx0aGlzLmwpLHRoaXMubCs9NCxRKTooRz0oUz4wP1RsOkFsKSh0aGlzLHRoaXMubCksdGhpcy5sKz00LEcpO2Nhc2UgODpjYXNlLTg6aWYoImYiPT09TClyZXR1cm4gUT04PT1TP2dyKHRoaXMsdGhp''@;'; put 'put ''cy5sKTpncihbdGhpc1t0aGlzLmwrN10sdGhpc1t0aGlzLmwrNl0sdGhpc1t0aGlzLmwrNV0sdGhpc1t0aGlzLmwrNF0sdGhpc1t0aGlzLmwrM10sdGhpc1t0aGlzLmwrMl0sdGhpc1t0aGlzLmwrMV0sdGhpc1t0aGlzLmwrMF1dLDApLHRoaXMubCs9OCxRO1M9ODtjYXNlIDE2Oms9SGgodGhp''@;'; put 'put ''cyx0aGlzLmwsUyl9fXJldHVybiB0aGlzLmwrPVMsa312YXIgSm89ZnVuY3Rpb24oUyxMLGspe1Nba109MjU1JkwsU1trKzFdPUw+Pj44JjI1NSxTW2srMl09TD4+PjE2JjI1NSxTW2srM109TD4+PjI0JjI1NX0seWk9ZnVuY3Rpb24oUyxMLGspe1Nba109MjU1JkwsU1trKzFdPUw+PjgmMjU1''@;'; put 'put ''LFNbaysyXT1MPj4xNiYyNTUsU1trKzNdPUw+PjI0JjI1NX0sS2w9ZnVuY3Rpb24oUyxMLGspe1Nba109MjU1JkwsU1trKzFdPUw+Pj44JjI1NX07ZnVuY3Rpb24gX3MoUyxMLGspe3ZhciBHPTAsUT0wO2lmKCJkYmNzIj09PWspe2ZvcihRPTA7USE9TC5sZW5ndGg7KytRKUtsKHRoaXMsTC5j''@;'; put 'put ''aGFyQ29kZUF0KFEpLHRoaXMubCsyKlEpO0c9MipMLmxlbmd0aH1lbHNlIGlmKCJzYmNzIj09PWspe2lmKHR5cGVvZiBjcHRhYmxlPCJ1IiYmODc0PT1GKWZvcihRPTA7USE9TC5sZW5ndGg7KytRKXt2YXIgbGU9Y3B0YWJsZS51dGlscy5lbmNvZGUoRixMLmNoYXJBdChRKSk7dGhpc1t0aGlz''@;'; put 'put ''LmwrUV09bGVbMF19ZWxzZSBmb3IoTD1MLnJlcGxhY2UoL1teXHgwMC1ceDdGXS9nLCJfIiksUT0wO1EhPUwubGVuZ3RoOysrUSl0aGlzW3RoaXMubCtRXT0yNTUmTC5jaGFyQ29kZUF0KFEpO0c9TC5sZW5ndGh9ZWxzZXtpZigiaGV4Ij09PWspe2Zvcig7UTxTOysrUSl0aGlzW3RoaXMubCsr''@;'; put 'put ''XT1wYXJzZUludChMLnNsaWNlKDIqUSwyKlErMiksMTYpfHwwO3JldHVybiB0aGlzfWlmKCJ1dGYxNmxlIj09PWspe3ZhciBtZT1NYXRoLm1pbih0aGlzLmwrUyx0aGlzLmxlbmd0aCk7Zm9yKFE9MDtRPE1hdGgubWluKEwubGVuZ3RoLFMpOysrUSl7dmFyIHBlPUwuY2hhckNvZGVBdChRKTt0''@;'; put 'put ''aGlzW3RoaXMubCsrXT0yNTUmcGUsdGhpc1t0aGlzLmwrK109cGU+Pjh9Zm9yKDt0aGlzLmw8bWU7KXRoaXNbdGhpcy5sKytdPTA7cmV0dXJuIHRoaXN9c3dpdGNoKFMpe2Nhc2UgMTpHPTEsdGhpc1t0aGlzLmxdPTI1NSZMO2JyZWFrO2Nhc2UgMjpHPTIsdGhpc1t0aGlzLmxdPTI1NSZMLHRo''@;'; put 'put ''aXNbdGhpcy5sKzFdPTI1NSYoTD4+Pj04KTticmVhaztjYXNlIDM6Rz0zLHRoaXNbdGhpcy5sXT0yNTUmTCx0aGlzW3RoaXMubCsxXT0yNTUmKEw+Pj49OCksdGhpc1t0aGlzLmwrMl09MjU1JihMPj4+PTgpO2JyZWFrO2Nhc2UgNDpHPTQsSm8odGhpcyxMLHRoaXMubCk7YnJlYWs7Y2FzZSA4''@;'; put 'put ''OmlmKEc9OCwiZiI9PT1rKXshZnVuY3Rpb24gSXMoUyxMLGspe3ZhciBHPShMPDB8fDEvTD09LTEvMD8xOjApPDw3LFE9MCxsZT0wLG1lPUc/LUw6TDtpc0Zpbml0ZShtZSk/MD09bWU/UT1sZT0wOihRPU1hdGguZmxvb3IoTWF0aC5sb2cobWUpL01hdGguTE4yKSxsZT1tZSpNYXRoLnBvdygy''@;'; put 'put ''LDUyLVEpLFE8PS0xMDIzJiYoIWlzRmluaXRlKGxlKXx8bGU8TWF0aC5wb3coMiw1MikpP1E9LTEwMjI6KGxlLT1NYXRoLnBvdygyLDUyKSxRKz0xMDIzKSk6KFE9MjA0NyxsZT1pc05hTihMKT8yNjk4NTowKTtmb3IodmFyIHBlPTA7cGU8PTU7KytwZSxsZS89MjU2KVNbaytwZV09MjU1Jmxl''@;'; put 'put ''O1Nbays2XT0oMTUmUSk8PDR8MTUmbGUsU1trKzddPVE+PjR8R30odGhpcyxMLHRoaXMubCk7YnJlYWt9Y2FzZSAxNjpicmVhaztjYXNlLTQ6Rz00LHlpKHRoaXMsTCx0aGlzLmwpfX1yZXR1cm4gdGhpcy5sKz1HLHRoaXN9ZnVuY3Rpb24gSHQoUyxMKXt2YXIgaz1IaCh0aGlzLHRoaXMubCxT''@;'; put 'put ''Lmxlbmd0aD4+MSk7aWYoayE9PVMpdGhyb3cgbmV3IEVycm9yKEwrIkV4cGVjdGVkICIrUysiIHNhdyAiK2spO3RoaXMubCs9Uy5sZW5ndGg+PjF9ZnVuY3Rpb24ganQoUyxMKXtTLmw9TCxTLnJlYWRfc2hpZnQ9ZnIsUy5jaGs9SHQsUy53cml0ZV9zaGlmdD1fc31mdW5jdGlvbiBwbihTLEwp''@;'; put 'put ''e1MubCs9TH1mdW5jdGlvbiBWdChTKXt2YXIgTD1CKFMpO3JldHVybiBqdChMLDApLEx9ZnVuY3Rpb24gRG4oUyxMLGspe2lmKFMpe3ZhciBHLFEsbGU7anQoUyxTLmx8fDApO2Zvcih2YXIgbWU9Uy5sZW5ndGgscGU9MCxiZT0wO1MubDxtZTspezEyOCYocGU9Uy5yZWFkX3NoaWZ0KDEpKSYm''@;'; put 'put ''KHBlPSgxMjcmcGUpKygoMTI3JlMucmVhZF9zaGlmdCgxKSk8PDcpKTt2YXIgTmU9Qm1bcGVdfHxCbVs2NTUzNV07Zm9yKGxlPTEyNyYoRz1TLnJlYWRfc2hpZnQoMSkpLFE9MTtRPDQmJjEyOCZHOysrUSlsZSs9KDEyNyYoRz1TLnJlYWRfc2hpZnQoMSkpKTw8NypRO2JlPVMubCtsZTt2YXIg''@;'; put 'put ''QmU9KE5lLmZ8fHBuKShTLGxlLGspO2lmKFMubD1iZSxMKEJlLE5lLm4scGUpKXJldHVybn19fWZ1bmN0aW9uIG1yKCl7dmFyIFM9W10sTD1UZT8yNTY6MjA0OCxrPWZ1bmN0aW9uKE5lKXt2YXIgQmU9VnQoTmUpO3JldHVybiBqdChCZSwwKSxCZX0sRz1rKEwpLFE9ZnVuY3Rpb24oKXtHJiYo''@;'; put 'put ''Ry5sZW5ndGg+Ry5sJiYoKEc9Ry5zbGljZSgwLEcubCkpLmw9Ry5sZW5ndGgpLEcubGVuZ3RoPjAmJlMucHVzaChHKSxHPW51bGwpfSxsZT1mdW5jdGlvbihOZSl7cmV0dXJuIEcmJk5lPEcubGVuZ3RoLUcubD9HOihRKCksRz1rKE1hdGgubWF4KE5lKzEsTCkpKX07cmV0dXJue25leHQ6bGUs''@;'; put 'put ''cHVzaDpmdW5jdGlvbihOZSl7USgpLG51bGw9PShHPU5lKS5sJiYoRy5sPUcubGVuZ3RoKSxsZShMKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIFEoKSxPMChbU10pfSxfYnVmczpTfX1mdW5jdGlvbiBNbihTLEwsayxHKXt2YXIgbGUsUT0rZ09bTF07aWYoIWlzTmFOKFEpKXtHfHwoRz1CbVtR''@;'; put 'put ''XS5wfHwoa3x8W10pLmxlbmd0aHx8MCksbGU9MSsoUT49MTI4PzE6MCkrMSxHPj0xMjgmJisrbGUsRz49MTYzODQmJisrbGUsRz49MjA5NzE1MiYmKytsZTt2YXIgbWU9Uy5uZXh0KGxlKTtRPD0xMjc/bWUud3JpdGVfc2hpZnQoMSxRKToobWUud3JpdGVfc2hpZnQoMSwxMjgrKDEyNyZRKSks''@;'; put 'put ''bWUud3JpdGVfc2hpZnQoMSxRPj43KSk7Zm9yKHZhciBwZT0wOzQhPXBlOysrcGUpe2lmKCEoRz49MTI4KSl7bWUud3JpdGVfc2hpZnQoMSxHKTticmVha31tZS53cml0ZV9zaGlmdCgxLDEyOCsoMTI3JkcpKSxHPj49N31HPjAmJnRhKGspJiZTLnB1c2goayl9fWZ1bmN0aW9uIGpuKFMsTCxr''@;'; put 'put ''KXt2YXIgRz11bihTKTtpZihMLnM/KEcuY1JlbCYmKEcuYys9TC5zLmMpLEcuclJlbCYmKEcucis9TC5zLnIpKTooRy5jUmVsJiYoRy5jKz1MLmMpLEcuclJlbCYmKEcucis9TC5yKSksIWt8fGsuYmlmZjwxMil7Zm9yKDtHLmM+PTI1NjspRy5jLT0yNTY7Zm9yKDtHLnI+PTY1NTM2OylHLnIt''@;'; put 'put ''PTY1NTM2fXJldHVybiBHfWZ1bmN0aW9uIEVhKFMsTCxrKXt2YXIgRz11bihTKTtyZXR1cm4gRy5zPWpuKEcucyxMLnMsayksRy5lPWpuKEcuZSxMLnMsayksR31mdW5jdGlvbiBXaShTLEwpe2lmKFMuY1JlbCYmUy5jPDApZm9yKFM9dW4oUyk7Uy5jPDA7KVMuYys9TD44PzE2Mzg0OjI1Njtp''@;'; put 'put ''ZihTLnJSZWwmJlMucjwwKWZvcihTPXVuKFMpO1MucjwwOylTLnIrPUw+OD8xMDQ4NTc2Okw+NT82NTUzNjoxNjM4NDtpZihTLmNSZWwmJlMuYz49KEw+OD8xNjM4NDoyNTYpKWZvcihTPXVuKFMpO1MuYz49KEw+OD8xNjM4NDoyNTYpOylTLmMtPUw+OD8xNjM4NDoyNTY7aWYoUy5yUmVsJiZT''@;'; put 'put ''LnI+PTEwNDg1NzYpZm9yKFM9dW4oUyk7Uy5yPj0xMDQ4NTc2OylTLnItPTEwNDg1NzY7dmFyIGs9R2koUyk7cmV0dXJuIVMuY1JlbCYmbnVsbCE9Uy5jUmVsJiYoaz1mdW5jdGlvbiBDYyhTKXtyZXR1cm4gUy5yZXBsYWNlKC9eKFtBLVpdKS8sIiQkJDEiKX0oaykpLCFTLnJSZWwmJm51bGwh''@;'; put 'put ''PVMuclJlbCYmKGs9ZnVuY3Rpb24gT2EoUyl7cmV0dXJuIFMucmVwbGFjZSgvKFtBLVpdfF4pKFxkKykkLywiJDEkJCQyIil9KGspKSxrfWZ1bmN0aW9uIFlpKFMsTCl7cmV0dXJuIDAhPVMucy5yfHxTLnMuclJlbHx8Uy5lLnIhPShMLmJpZmY+PTEyPzEwNDg1NzU6TC5iaWZmPj04PzY1NTM2''@;'; put 'put ''OjE2Mzg0KXx8Uy5lLnJSZWw/MCE9Uy5zLmN8fFMucy5jUmVsfHxTLmUuYyE9KEwuYmlmZj49MTI/MTYzODM6MjU1KXx8Uy5lLmNSZWw/V2koUy5zLEwuYmlmZikrIjoiK1dpKFMuZSxMLmJpZmYpOihTLnMuclJlbD8iIjoiJCIpK0JpKFMucy5yKSsiOiIrKFMuZS5yUmVsPyIiOiIkIikrQmko''@;'; put 'put ''Uy5lLnIpOihTLnMuY1JlbD8iIjoiJCIpK0ZvKFMucy5jKSsiOiIrKFMuZS5jUmVsPyIiOiIkIikrRm8oUy5lLmMpfXZhciAkYT17fTtmdW5jdGlvbiBsbChTKXtyZXR1cm4gcGFyc2VJbnQoZnVuY3Rpb24gV2EoUyl7cmV0dXJuIFMucmVwbGFjZSgvXCQoXGQrKSQvLCIkMSIpfShTKSwxMCkt''@;'; put 'put ''MX1mdW5jdGlvbiBCaShTKXtyZXR1cm4iIisoUysxKX1mdW5jdGlvbiBYbChTKXtmb3IodmFyIEw9ZnVuY3Rpb24gZmMoUyl7cmV0dXJuIFMucmVwbGFjZSgvXlwkKFtBLVpdKS8sIiQxIil9KFMpLGs9MCxHPTA7RyE9PUwubGVuZ3RoOysrRylrPTI2KmsrTC5jaGFyQ29kZUF0KEcpLTY0O3Jl''@;'; put 'put ''dHVybiBrLTF9ZnVuY3Rpb24gRm8oUyl7aWYoUzwwKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjb2x1bW4gIitTKTt2YXIgTD0iIjtmb3IoKytTO1M7Uz1NYXRoLmZsb29yKChTLTEpLzI2KSlMPVN0cmluZy5mcm9tQ2hhckNvZGUoKFMtMSklMjYrNjUpK0w7cmV0dXJuIEx9ZnVuY3Rpb24g''@;'; put 'put ''QW8oUyl7Zm9yKHZhciBMPTAsaz0wLEc9MDtHPFMubGVuZ3RoOysrRyl7dmFyIFE9Uy5jaGFyQ29kZUF0KEcpO1E+PTQ4JiZRPD01Nz9MPTEwKkwrKFEtNDgpOlE+PTY1JiZRPD05MCYmKGs9MjYqaysoUS02NCkpfXJldHVybntjOmstMSxyOkwtMX19ZnVuY3Rpb24gR2koUyl7Zm9yKHZhciBM''@;'; put 'put ''PVMuYysxLGs9IiI7TDtMPShMLTEpLzI2fDApaz1TdHJpbmcuZnJvbUNoYXJDb2RlKChMLTEpJTI2KzY1KStrO3JldHVybiBrKyhTLnIrMSl9ZnVuY3Rpb24gVm8oUyl7dmFyIEw9Uy5pbmRleE9mKCI6Iik7cmV0dXJuLTE9PUw/e3M6QW8oUyksZTpBbyhTKX06e3M6QW8oUy5zbGljZSgwLEwp''@;'; put 'put ''KSxlOkFvKFMuc2xpY2UoTCsxKSl9fWZ1bmN0aW9uIG9vKFMsTCl7cmV0dXJuIHR5cGVvZiBMPiJ1Inx8Im51bWJlciI9PXR5cGVvZiBMP29vKFMucyxTLmUpOigic3RyaW5nIiE9dHlwZW9mIFMmJihTPUdpKFMpKSwic3RyaW5nIiE9dHlwZW9mIEwmJihMPUdpKEwpKSxTPT1MP1M6UysiOiIr''@;'; put 'put ''TCl9ZnVuY3Rpb24gdG8oUyl7dmFyIEw9SlNPTi5wYXJzZSgneyJzIjp7ImMiOjAsInIiOjB9LCJlIjp7ImMiOjAsInIiOjB9fScpLGs9MCxHPTAsUT0wLGxlPVMubGVuZ3RoO2ZvcihrPTA7RzxsZSYmISgoUT1TLmNoYXJDb2RlQXQoRyktNjQpPDF8fFE+MjYpOysrRylrPTI2KmsrUTtmb3Io''@;'; put 'put ''TC5zLmM9LS1rLGs9MDtHPGxlJiYhKChRPVMuY2hhckNvZGVBdChHKS00OCk8MHx8UT45KTsrK0cpaz0xMCprK1E7aWYoTC5zLnI9LS1rLEc9PT1sZXx8NTg9PT1TLmNoYXJDb2RlQXQoKytHKSlyZXR1cm4gTC5lLmM9TC5zLmMsTC5lLnI9TC5zLnIsTDtmb3Ioaz0wO0chPWxlJiYhKChRPVMu''@;'; put 'put ''Y2hhckNvZGVBdChHKS02NCk8MXx8UT4yNik7KytHKWs9MjYqaytRO2ZvcihMLmUuYz0tLWssaz0wO0chPWxlJiYhKChRPVMuY2hhckNvZGVBdChHKS00OCk8MHx8UT45KTsrK0cpaz0xMCprK1E7cmV0dXJuIEwuZS5yPS0tayxMfWZ1bmN0aW9uIE1vKFMsTCl7dmFyIGs9ImQiPT1TLnQmJkwg''@;'; put 'put ''aW5zdGFuY2VvZiBEYXRlO2lmKG51bGwhPVMueil0cnl7cmV0dXJuIFMudz1BLmZvcm1hdChTLnosaz9RZShMKTpMKX1jYXRjaHt9dHJ5e3JldHVybiBTLnc9QS5mb3JtYXQoKFMuWEZ8fHt9KS5udW1GbXRJZHx8KGs/MTQ6MCksaz9RZShMKTpMKX1jYXRjaHtyZXR1cm4iIitMfX1mdW5jdGlv''@;'; put 'put ''biBMbyhTLEwsayl7cmV0dXJuIG51bGw9PVN8fG51bGw9PVMudHx8InoiPT1TLnQ/IiI6dm9pZCAwIT09Uy53P1MudzooImQiPT1TLnQmJiFTLnomJmsmJmsuZGF0ZU5GJiYoUy56PWsuZGF0ZU5GKSwiZSI9PVMudD9vZFtTLnZdfHxTLnY6TW8oUyxudWxsPT1MP1MudjpMKSl9ZnVuY3Rpb24g''@;'; put 'put ''YjEoUyxMKXt2YXIgaz1MJiZMLnNoZWV0P0wuc2hlZXQ6IlNoZWV0MSIsRz17fTtyZXR1cm4gR1trXT1TLHtTaGVldE5hbWVzOltrXSxTaGVldHM6R319ZnVuY3Rpb24gXzEoUyxMLGspe3ZhciBHPWt8fHt9LFE9Uz9BcnJheS5pc0FycmF5KFMpOkcuZGVuc2UsbGU9U3x8KFE/W106e30pLG1l''@;'; put 'put ''PTAscGU9MDtpZihsZSYmbnVsbCE9Ry5vcmlnaW4pe2lmKCJudW1iZXIiPT10eXBlb2YgRy5vcmlnaW4pbWU9Ry5vcmlnaW47ZWxzZXt2YXIgYmU9InN0cmluZyI9PXR5cGVvZiBHLm9yaWdpbj9BbyhHLm9yaWdpbik6Ry5vcmlnaW47bWU9YmUucixwZT1iZS5jfWxlWyIhcmVmIl18fChsZVsi''@;'; put 'put ''IXJlZiJdPSJBMTpBMSIpfXZhciBOZT17czp7YzoxZTcscjoxZTd9LGU6e2M6MCxyOjB9fTtpZihsZVsiIXJlZiJdKXt2YXIgQmU9dG8obGVbIiFyZWYiXSk7TmUucy5jPUJlLnMuYyxOZS5zLnI9QmUucy5yLE5lLmUuYz1NYXRoLm1heChOZS5lLmMsQmUuZS5jKSxOZS5lLnI9TWF0aC5tYXgo''@;'; put 'put ''TmUuZS5yLEJlLmUuciksLTE9PW1lJiYoTmUuZS5yPW1lPUJlLmUucisxKX1mb3IodmFyIEdlPTA7R2UhPUwubGVuZ3RoOysrR2UpaWYoTFtHZV0pe2lmKCFBcnJheS5pc0FycmF5KExbR2VdKSl0aHJvdyBuZXcgRXJyb3IoImFvYV90b19zaGVldCBleHBlY3RzIGFuIGFycmF5IG9mIGFycmF5''@;'; put 'put ''cyIpO2Zvcih2YXIgZXQ9MDtldCE9TFtHZV0ubGVuZ3RoOysrZXQpaWYoISh0eXBlb2YgTFtHZV1bZXRdPiJ1Iikpe3ZhciBjdD17djpMW0dlXVtldF19LHh0PW1lK0dlLG90PXBlK2V0O2lmKE5lLnMucj54dCYmKE5lLnMucj14dCksTmUucy5jPm90JiYoTmUucy5jPW90KSxOZS5lLnI8eHQm''@;'; put 'put ''JihOZS5lLnI9eHQpLE5lLmUuYzxvdCYmKE5lLmUuYz1vdCksIUxbR2VdW2V0XXx8Im9iamVjdCIhPXR5cGVvZiBMW0dlXVtldF18fEFycmF5LmlzQXJyYXkoTFtHZV1bZXRdKXx8TFtHZV1bZXRdaW5zdGFuY2VvZiBEYXRlKWlmKEFycmF5LmlzQXJyYXkoY3QudikmJihjdC5mPUxbR2VdW2V0''@;'; put 'put ''XVsxXSxjdC52PWN0LnZbMF0pLG51bGw9PT1jdC52KWlmKGN0LmYpY3QudD0ibiI7ZWxzZSBpZihHLm51bGxFcnJvciljdC50PSJlIixjdC52PTA7ZWxzZXtpZighRy5zaGVldFN0dWJzKWNvbnRpbnVlO2N0LnQ9InoifWVsc2UibnVtYmVyIj09dHlwZW9mIGN0LnY/Y3QudD0ibiI6ImJvb2xl''@;'; put 'put ''YW4iPT10eXBlb2YgY3Qudj9jdC50PSJiIjpjdC52IGluc3RhbmNlb2YgRGF0ZT8oY3Quej1HLmRhdGVORnx8QS5fdGFibGVbMTRdLEcuY2VsbERhdGVzPyhjdC50PSJkIixjdC53PUEuZm9ybWF0KGN0LnosUWUoY3QudikpKTooY3QudD0ibiIsY3Qudj1RZShjdC52KSxjdC53PUEuZm9ybWF0''@;'; put 'put ''KGN0LnosY3QudikpKTpjdC50PSJzIjtlbHNlIGN0PUxbR2VdW2V0XTtpZihjdCYmY3QuaCl0cnl7Y3QuUj1hMi5odG1sX3RvX3JzKGN0LmgpLGN0LnY9IiI7Zm9yKHZhciBidD0wO2J0PGN0LlIubGVuZ3RoOysrYnQpY3Qudis9Y3QuUltidF0udnx8IiJ9Y2F0Y2h7fWlmKFEpbGVbeHRdfHwo''@;'; put 'put ''bGVbeHRdPVtdKSxsZVt4dF1bb3RdJiZsZVt4dF1bb3RdLnMmJihjdC5zPWxlW3h0XVtvdF0ucyksbGVbeHRdW290XSYmbGVbeHRdW290XS56JiYoY3Quej1sZVt4dF1bb3RdLnopLGxlW3h0XVtvdF09Y3Q7ZWxzZXt2YXIgRnQ9R2koe2M6b3Qscjp4dH0pO2xlW0Z0XSYmbGVbRnRdLnMmJihj''@;'; put 'put ''dC5zPWxlW0Z0XS5zKSxsZVtGdF0mJmxlW0Z0XS56JiYoY3Quej1sZVtGdF0ueiksbGVbRnRdPWN0fX19cmV0dXJuIE5lLnMuYzwxZTcmJihsZVsiIXJlZiJdPW9vKE5lKSksbGV9ZnVuY3Rpb24gaDAoUyxMKXtyZXR1cm4gXzEobnVsbCxTLEwpfWZ1bmN0aW9uIFlkKFMsTCl7cmV0dXJuIEx8''@;'; put 'put ''fChMPVZ0KDQpKSxMLndyaXRlX3NoaWZ0KDQsUyksTH1mdW5jdGlvbiBrbChTKXt2YXIgTD1TLnJlYWRfc2hpZnQoNCk7cmV0dXJuIDA9PT1MPyIiOlMucmVhZF9zaGlmdChMLCJkYmNzIil9ZnVuY3Rpb24gU2MoUyxMKXt2YXIgaz0hMTtyZXR1cm4gbnVsbD09TCYmKGs9ITAsTD1WdCg0KzIq''@;'; put 'put ''Uy5sZW5ndGgpKSxMLndyaXRlX3NoaWZ0KDQsUy5sZW5ndGgpLFMubGVuZ3RoPjAmJkwud3JpdGVfc2hpZnQoMCxTLCJkYmNzIiksaz9MLnNsaWNlKDAsTC5sKTpMfWZ1bmN0aW9uIHhwKFMpe3JldHVybntpY2g6Uy5yZWFkX3NoaWZ0KDIpLGlmbnQ6Uy5yZWFkX3NoaWZ0KDIpfX1mdW5jdGlv''@;'; put 'put ''biBrbyhTLEwpe3ZhciBrPVMubCxHPVMucmVhZF9zaGlmdCgxKSxRPWtsKFMpLGxlPVtdLG1lPXt0OlEsaDpRfTtpZigxJkcpe2Zvcih2YXIgcGU9Uy5yZWFkX3NoaWZ0KDQpLGJlPTA7YmUhPXBlOysrYmUpbGUucHVzaCh4cChTKSk7bWUucj1sZX1lbHNlIG1lLnI9W3tpY2g6MCxpZm50OjB9''@;'; put 'put ''XTtyZXR1cm4gUy5sPWsrTCxtZX0hZnVuY3Rpb24oUyxMKXt2YXIgaztpZih0eXBlb2YgY3J5cHRvQnJvd3NlcmlmeTwidSIpaz1jcnlwdG9Ccm93c2VyaWZ5O2Vsc2UgaWYodHlwZW9mIEw8InUiKWs9TDtlbHNlIHRyeXtrPWIoOTE0MjYpfWNhdGNoe2s9bnVsbH1TLnJjND1mdW5jdGlvbihH''@;'; put 'put ''LFEpe3ZhciBsZT1uZXcgQXJyYXkoMjU2KSxtZT0wLHBlPTAsYmU9MCxOZT0wO2ZvcihwZT0wOzI1NiE9cGU7KytwZSlsZVtwZV09cGU7Zm9yKHBlPTA7MjU2IT1wZTsrK3BlKWJlPWJlK2xlW3BlXStHW3BlJUcubGVuZ3RoXS5jaGFyQ29kZUF0KDApJjI1NSxOZT1sZVtwZV0sbGVbcGVdPWxl''@;'; put 'put ''W2JlXSxsZVtiZV09TmU7cGU9YmU9MDt2YXIgQmU9QihRLmxlbmd0aCk7Zm9yKG1lPTA7bWUhPVEubGVuZ3RoOysrbWUpTmU9bGVbcGU9cGUrMSYyNTVdLGxlW3BlXT1sZVtiZT0oYmUrbGVbcGVdKSUyNTZdLGxlW2JlXT1OZSxCZVttZV09UVttZV1ebGVbbGVbcGVdK2xlW2JlXSYyNTVdO3Jl''@;'; put 'put ''dHVybiBCZX0sUy5tZDU9ZnVuY3Rpb24oRyl7aWYoIWspdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBjcnlwdG8iKTtyZXR1cm4gay5jcmVhdGVIYXNoKCJtZDUiKS51cGRhdGUoQnVmZmVyLmZyb20oRykpLmRpZ2VzdCgiaGV4Iil9fSgkYSx0eXBlb2YgY3J5cHRvPCJ1Ij9jcnlwdG86''@;'; put 'put ''dm9pZCAwKTt2YXIgZW09a287ZnVuY3Rpb24gT2MoUyl7dmFyIEw9Uy5yZWFkX3NoaWZ0KDQpLGs9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBrKz1TLnJlYWRfc2hpZnQoMSk8PDE2LFMubCsrLHtjOkwsaVN0eWxlUmVmOmt9fWZ1bmN0aW9uIEJoKFMsTCl7cmV0dXJuIG51bGw9PUwmJihMPVZ0''@;'; put 'put ''KDgpKSxMLndyaXRlX3NoaWZ0KC00LFMuYyksTC53cml0ZV9zaGlmdCgzLFMuaVN0eWxlUmVmfHxTLnMpLEwud3JpdGVfc2hpZnQoMSwwKSxMfWZ1bmN0aW9uIEsyKFMpe3ZhciBMPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gTCs9Uy5yZWFkX3NoaWZ0KDEpPDwxNixTLmwrKyx7YzotMSxpU3R5''@;'; put 'put ''bGVSZWY6TH19ZnVuY3Rpb24gUDAoUyxMKXtyZXR1cm4gbnVsbD09TCYmKEw9VnQoNCkpLEwud3JpdGVfc2hpZnQoMyxTLmlTdHlsZVJlZnx8Uy5zKSxMLndyaXRlX3NoaWZ0KDEsMCksTH12YXIgRVM9a2wsVHk9U2M7ZnVuY3Rpb24gbmQoUyl7dmFyIEw9Uy5yZWFkX3NoaWZ0KDQpO3JldHVy''@;'; put 'put ''biAwPT09THx8NDI5NDk2NzI5NT09PUw/IiI6Uy5yZWFkX3NoaWZ0KEwsImRiY3MiKX1mdW5jdGlvbiBYMihTLEwpe3ZhciBrPSExO3JldHVybiBudWxsPT1MJiYoaz0hMCxMPVZ0KDEyNykpLEwud3JpdGVfc2hpZnQoNCxTLmxlbmd0aD4wP1MubGVuZ3RoOjQyOTQ5NjcyOTUpLFMubGVuZ3Ro''@;'; put 'put ''PjAmJkwud3JpdGVfc2hpZnQoMCxTLCJkYmNzIiksaz9MLnNsaWNlKDAsTC5sKTpMfXZhciB0bT1rbCxIcj1uZCxubT1YMjtmdW5jdGlvbiBKbihTKXt2YXIgTD1TLnNsaWNlKFMubCxTLmwrNCksaz0xJkxbMF0sRz0yJkxbMF07Uy5sKz00LExbMF0mPTI1Mjt2YXIgUT0wPT09Rz9ncihbMCww''@;'; put 'put ''LDAsMCxMWzBdLExbMV0sTFsyXSxMWzNdXSwwKTpUbChMLDApPj4yO3JldHVybiBrP1EvMTAwOlF9ZnVuY3Rpb24gYmcoUyxMKXtudWxsPT1MJiYoTD1WdCg0KSk7dmFyIGs9MCxHPTAsUT0xMDAqUztpZihTPT0oMHxTKSYmUz49LSgxPDwyOSkmJlM8MTw8Mjk/Rz0xOlE9PSgwfFEpJiZRPj0t''@;'; put 'put ''KDE8PDI5KSYmUTwxPDwyOSYmKEc9MSxrPTEpLCFHKXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgUmtOdW1iZXIgIitTKTtMLndyaXRlX3NoaWZ0KC00LCgoaz9ROlMpPDwyKSsoaysyKSl9ZnVuY3Rpb24gVHAoUyl7dmFyIEw9e3M6e30sZTp7fX07cmV0dXJuIEwucy5yPVMucmVhZF9z''@;'; put 'put ''aGlmdCg0KSxMLmUucj1TLnJlYWRfc2hpZnQoNCksTC5zLmM9Uy5yZWFkX3NoaWZ0KDQpLEwuZS5jPVMucmVhZF9zaGlmdCg0KSxMfXZhciByZD1UcCxkMz1mdW5jdGlvbiB1MyhTLEwpe3JldHVybiBMfHwoTD1WdCgxNikpLEwud3JpdGVfc2hpZnQoNCxTLnMuciksTC53cml0ZV9zaGlmdCg0''@;'; put 'put ''LFMuZS5yKSxMLndyaXRlX3NoaWZ0KDQsUy5zLmMpLEwud3JpdGVfc2hpZnQoNCxTLmUuYyksTH07ZnVuY3Rpb24gQXkoUyl7Zm9yKHZhciBMPVMucmVhZF9zaGlmdCg0KSxrPVtdLEc9MDtHPEw7KytHKXt2YXIgUT1yZChTKTtrLnB1c2gob28oUSkpfXJldHVybiBrLmpvaW4oIiwiKX1mdW5j''@;'; put 'put ''dGlvbiBXcyhTKXtpZihTLmxlbmd0aC1TLmw8OCl0aHJvdyJYTFMgWG51bSBCdWZmZXIgdW5kZXJmbG93IjtyZXR1cm4gUy5yZWFkX3NoaWZ0KDgsImYiKX1mdW5jdGlvbiB0MShTLEwpe3JldHVybihMfHxWdCg4KSkud3JpdGVfc2hpZnQoOCxTLCJmIil9ZnVuY3Rpb24gR2QoUyl7dmFyIEw9''@;'; put 'put ''e30sRz1TLnJlYWRfc2hpZnQoMSk+Pj4xLFE9Uy5yZWFkX3NoaWZ0KDEpLGxlPVMucmVhZF9zaGlmdCgyLCJpIiksbWU9Uy5yZWFkX3NoaWZ0KDEpLHBlPVMucmVhZF9zaGlmdCgxKSxiZT1TLnJlYWRfc2hpZnQoMSk7c3dpdGNoKFMubCsrLEcpe2Nhc2UgMDpMLmF1dG89MTticmVhaztjYXNl''@;'; put 'put ''IDE6TC5pbmRleD1RO3ZhciBOZT1nMFtRXTtOZSYmKEwucmdiPWFmKE5lKSk7YnJlYWs7Y2FzZSAyOkwucmdiPWFmKFttZSxwZSxiZV0pO2JyZWFrO2Nhc2UgMzpMLnRoZW1lPVF9cmV0dXJuIDAhPWxlJiYoTC50aW50PWxlPjA/bGUvMzI3Njc6bGUvMzI3NjgpLEx9ZnVuY3Rpb24gX2coUyxM''@;'; put 'put ''KXtpZihMfHwoTD1WdCg4KSksIVN8fFMuYXV0bylyZXR1cm4gTC53cml0ZV9zaGlmdCg0LDApLEwud3JpdGVfc2hpZnQoNCwwKSxMO251bGwhPVMuaW5kZXg/KEwud3JpdGVfc2hpZnQoMSwyKSxMLndyaXRlX3NoaWZ0KDEsUy5pbmRleCkpOm51bGwhPVMudGhlbWU/KEwud3JpdGVfc2hpZnQo''@;'; put 'put ''MSw2KSxMLndyaXRlX3NoaWZ0KDEsUy50aGVtZSkpOihMLndyaXRlX3NoaWZ0KDEsNSksTC53cml0ZV9zaGlmdCgxLDApKTt2YXIgaz1TLnRpbnR8fDA7aWYoaz4wP2sqPTMyNzY3Oms8MCYmKGsqPTMyNzY4KSxMLndyaXRlX3NoaWZ0KDIsayksUy5yZ2ImJm51bGw9PVMudGhlbWUpe3ZhciBH''@;'; put 'put ''PVMucmdifHwiRkZGRkZGIjsibnVtYmVyIj09dHlwZW9mIEcmJihHPSgiMDAwMDAwIitHLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpKSxMLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoRy5zbGljZSgwLDIpLDE2KSksTC53cml0ZV9zaGlmdCgxLHBhcnNlSW50KEcuc2xpY2UoMiw0KSwxNikpLEwu''@;'; put 'put ''d3JpdGVfc2hpZnQoMSxwYXJzZUludChHLnNsaWNlKDQsNiksMTYpKSxMLndyaXRlX3NoaWZ0KDEsMjU1KX1lbHNlIEwud3JpdGVfc2hpZnQoMiwwKSxMLndyaXRlX3NoaWZ0KDEsMCksTC53cml0ZV9zaGlmdCgxLDApO3JldHVybiBMfWZ1bmN0aW9uIHEyKFMpe3ZhciBMPVMucmVhZF9zaGlm''@;'; put 'put ''dCgxKTtyZXR1cm4gUy5sKysse2ZCb2xkOjEmTCxmSXRhbGljOjImTCxmVW5kZXJsaW5lOjQmTCxmU3RyaWtlb3V0OjgmTCxmT3V0bGluZToxNiZMLGZTaGFkb3c6MzImTCxmQ29uZGVuc2U6NjQmTCxmRXh0ZW5kOjEyOCZMfX1mdW5jdGlvbiBmMChTLEwpe3ZhciBHPVMucmVhZF9zaGlmdCg0''@;'; put 'put ''KTtzd2l0Y2goRyl7Y2FzZSAwOnJldHVybiIiO2Nhc2UgNDI5NDk2NzI5NTpjYXNlIDQyOTQ5NjcyOTQ6cmV0dXJuezI6IkJJVE1BUCIsMzoiTUVUQUZJTEVQSUNUIiw4OiJESUIiLDE0OiJFTkhNRVRBRklMRSJ9W1MucmVhZF9zaGlmdCg0KV18fCIifWlmKEc+NDAwKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigiVW5zdXBwb3J0ZWQgQ2xpcGJvYXJkOiAiK0cudG9TdHJpbmcoMTYpKTtyZXR1cm4gUy5sLT00LFMucmVhZF9zaGlmdCgwLDE9PUw/Imxwc3RyIjoibHB3c3RyIil9dmFyIEQ4PVs4MCw4MV0sa3A9ezE6e246IkNvZGVQYWdlIix0OjJ9LDI6e246IkNhdGVnb3J5Iix0OjgwfSwzOntuOiJQ''@;'; put 'put ''cmVzZW50YXRpb25Gb3JtYXQiLHQ6ODB9LDQ6e246IkJ5dGVDb3VudCIsdDozfSw1OntuOiJMaW5lQ291bnQiLHQ6M30sNjp7bjoiUGFyYWdyYXBoQ291bnQiLHQ6M30sNzp7bjoiU2xpZGVDb3VudCIsdDozfSw4OntuOiJOb3RlQ291bnQiLHQ6M30sOTp7bjoiSGlkZGVuQ291bnQiLHQ6M30s''@;'; put 'put ''MTA6e246Ik11bHRpbWVkaWFDbGlwQ291bnQiLHQ6M30sMTE6e246IlNjYWxlQ3JvcCIsdDoxMX0sMTI6e246IkhlYWRpbmdQYWlycyIsdDo0MTA4fSwxMzp7bjoiVGl0bGVzT2ZQYXJ0cyIsdDo0MTI2fSwxNDp7bjoiTWFuYWdlciIsdDo4MH0sMTU6e246IkNvbXBhbnkiLHQ6ODB9LDE2Ontu''@;'; put 'put ''OiJMaW5rc1VwVG9EYXRlIix0OjExfSwxNzp7bjoiQ2hhcmFjdGVyQ291bnQiLHQ6M30sMTk6e246IlNoYXJlZERvYyIsdDoxMX0sMjI6e246Ikh5cGVybGlua3NDaGFuZ2VkIix0OjExfSwyMzp7bjoiQXBwVmVyc2lvbiIsdDozLHA6InZlcnNpb24ifSwyNDp7bjoiRGlnU2lnIix0OjY1fSwy''@;'; put 'put ''Njp7bjoiQ29udGVudFR5cGUiLHQ6ODB9LDI3OntuOiJDb250ZW50U3RhdHVzIix0OjgwfSwyODp7bjoiTGFuZ3VhZ2UiLHQ6ODB9LDI5OntuOiJWZXJzaW9uIix0OjgwfSwyNTU6e30sMjE0NzQ4MzY0ODp7bjoiTG9jYWxlIix0OjE5fSwyMTQ3NDgzNjUxOntuOiJCZWhhdmlvciIsdDoxOX0s''@;'; put 'put ''MTkxOTA1NDQzNDp7fX0scDA9ezE6e246IkNvZGVQYWdlIix0OjJ9LDI6e246IlRpdGxlIix0OjgwfSwzOntuOiJTdWJqZWN0Iix0OjgwfSw0OntuOiJBdXRob3IiLHQ6ODB9LDU6e246IktleXdvcmRzIix0OjgwfSw2OntuOiJDb21tZW50cyIsdDo4MH0sNzp7bjoiVGVtcGxhdGUiLHQ6ODB9''@;'; put 'put ''LDg6e246Ikxhc3RBdXRob3IiLHQ6ODB9LDk6e246IlJldk51bWJlciIsdDo4MH0sMTA6e246IkVkaXRUaW1lIix0OjY0fSwxMTp7bjoiTGFzdFByaW50ZWQiLHQ6NjR9LDEyOntuOiJDcmVhdGVkRGF0ZSIsdDo2NH0sMTM6e246Ik1vZGlmaWVkRGF0ZSIsdDo2NH0sMTQ6e246IlBhZ2VDb3Vu''@;'; put 'put ''dCIsdDozfSwxNTp7bjoiV29yZENvdW50Iix0OjN9LDE2OntuOiJDaGFyQ291bnQiLHQ6M30sMTc6e246IlRodW1ibmFpbCIsdDo3MX0sMTg6e246IkFwcGxpY2F0aW9uIix0OjgwfSwxOTp7bjoiRG9jU2VjdXJpdHkiLHQ6M30sMjU1Ont9LDIxNDc0ODM2NDg6e246IkxvY2FsZSIsdDoxOX0s''@;'; put 'put ''MjE0NzQ4MzY1MTp7bjoiQmVoYXZpb3IiLHQ6MTl9LDE5MTkwNTQ0MzQ6e319LEtvPVJlKGtwLCJuIiksWGM9UmUocDAsIm4iKSxGMD17MToiVVMiLDI6IkNBIiwzOiIiLDc6IlJVIiwyMDoiRUciLDMwOiJHUiIsMzE6Ik5MIiwzMjoiQkUiLDMzOiJGUiIsMzQ6IkVTIiwzNjoiSFUiLDM5OiJJ''@;'; put 'put ''VCIsNDE6IkNIIiw0MzoiQVQiLDQ0OiJHQiIsNDU6IkRLIiw0NjoiU0UiLDQ3OiJOTyIsNDg6IlBMIiw0OToiREUiLDUyOiJNWCIsNTU6IkJSIiw2MToiQVUiLDY0OiJOWiIsNjY6IlRIIiw4MToiSlAiLDgyOiJLUiIsODQ6IlZOIiw4NjoiQ04iLDkwOiJUUiIsMTA1OiJKUyIsMjEzOiJEWiIs''@;'; put 'put ''MjE2OiJNQSIsMjE4OiJMWSIsMzUxOiJQVCIsMzU0OiJJUyIsMzU4OiJGSSIsNDIwOiJDWiIsODg2OiJUVyIsOTYxOiJMQiIsOTYyOiJKTyIsOTYzOiJTWSIsOTY0OiJJUSIsOTY1OiJLVyIsOTY2OiJTQSIsOTcxOiJBRSIsOTcyOiJJTCIsOTc0OiJRQSIsOTgxOiJJUiIsNjU1MzU6IlVTIn0s''@;'; put 'put ''ZjM9W251bGwsInNvbGlkIiwibWVkaXVtR3JheSIsImRhcmtHcmF5IiwibGlnaHRHcmF5IiwiZGFya0hvcml6b250YWwiLCJkYXJrVmVydGljYWwiLCJkYXJrRG93biIsImRhcmtVcCIsImRhcmtHcmlkIiwiZGFya1RyZWxsaXMiLCJsaWdodEhvcml6b250YWwiLCJsaWdodFZlcnRpY2FsIiwi''@;'; put 'put ''bGlnaHREb3duIiwibGlnaHRVcCIsImxpZ2h0R3JpZCIsImxpZ2h0VHJlbGxpcyIsImdyYXkxMjUiLCJncmF5MDYyNSJdO2Z1bmN0aW9uICRkKFMpe3JldHVybiBTLm1hcChmdW5jdGlvbihMKXtyZXR1cm5bTD4+MTYmMjU1LEw+PjgmMjU1LDI1NSZMXX0pfXZhciBJeT0kZChbMCwxNjc3NzIx''@;'; put 'put ''NSwxNjcxMTY4MCw2NTI4MCwyNTUsMTY3NzY5NjAsMTY3MTE5MzUsNjU1MzUsMCwxNjc3NzIxNSwxNjcxMTY4MCw2NTI4MCwyNTUsMTY3NzY5NjAsMTY3MTE5MzUsNjU1MzUsODM4ODYwOCwzMjc2OCwxMjgsODQyMTM3Niw4Mzg4NzM2LDMyODk2LDEyNjMyMjU2LDg0MjE1MDQsMTAwNjY0MzEs''@;'; put 'put ''MTAwNDAxNjYsMTY3NzcxNjQsMTM0MzQ4NzksNjY4NDc3NCwxNjc0NDU3NiwyNjMxNiwxMzQyMTgyMywxMjgsMTY3MTE5MzUsMTY3NzY5NjAsNjU1MzUsODM4ODczNiw4Mzg4NjA4LDMyODk2LDI1NSw1MjQ3OSwxMzQzNDg3OSwxMzQzNDgyOCwxNjc3NzExMywxMDA3OTQ4NywxNjc1MTA1Miwx''@;'; put 'put ''MzQwODc2NywxNjc2NDA1NywzMzY4NzAzLDMzOTQ3NjQsMTAwNzkyMzIsMTY3NjM5MDQsMTY3NTA4NDgsMTY3Mzc3OTIsNjcxMDkzNyw5ODY4OTUwLDEzMTU4LDMzODE2MDYsMTMwNTYsMzM1NTM5MiwxMDA0MDA2NCwxMDA0MDE2NiwzMzU1NTQ1LDMzNTU0NDMsMCwxNjc3NzIxNSwwLDAsMCww''@;'; put 'put ''LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXSksZzA9dW4oSXkpLEk4PSRkKFsxMjYzMjI1Niw5ODY4OTUwLDg0MjE1MDQsNjcxMDg4NiwzMzU1NDQzLDE2NzExNjgwLDMyNzY4LDEzMzY5NDk3LDEyOCwzMzk0NTYwLDI2MzY3LDEwMDI3MjEyLDEwMDUzMTcxLDEyOCwzMjc2OCw4Mzg4NjA4LDMy''@;'; put 'put ''ODk2LDgzODg3MzYsODQyMTM3NiwxMzYzMTQ4OCwxNDUzOTk5NCwxMzA2ODg1MCwxMzkyNDM1Miw5OTY3NDk2LDkxNzUyNjcsOTE5NTAwOCwzNjgzNTM3LDEwNjkyNTgsODg4MDg5OSw3NDk0NjQsMjg5MzQ3NiwxMTc0NTczMCwzNzUwMjAxLDE1NTU5NTAzLDE4Mzc5NDEsMTIwODQzNTksNzYz''@;'; put 'put ''MjI1MCw3MzYzMzI4LDk1MTQ1ODgsODI4ODYxNywzMDM2ODE0LDExMTg0ODEwXSksb2Q9ezA6IiNOVUxMISIsNzoiI0RJVi8wISIsMTU6IiNWQUxVRSEiLDIzOiIjUkVGISIsMjk6IiNOQU1FPyIsMzY6IiNOVU0hIiw0MjoiI04vQSIsNDM6IiNHRVRUSU5HX0RBVEEiLDI1NToiI1dURj8ifSx6''@;'; put 'put ''aD1BZShvZCksUjg9eyJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldC5tYWluK3htbCI6Indvcmtib29rcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5iaW5JbmRleFdzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5t''@;'; put 'put ''cy1leGNlbC5pbnRsbWFjcm9zaGVldCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYmluSW5kZXhNcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtcGFja2FnZS5jb3JlLXByb3BlcnRpZXMreG1sIjoiY29yZXByb3BzIiwiYXBwbGljYXRpb24vdm5k''@;'; put 'put ''Lm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmN1c3RvbS1wcm9wZXJ0aWVzK3htbCI6ImN1c3Rwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5leHRlbmRlZC1wcm9wZXJ0aWVzK3htbCI6ImV4dHByb3BzIiwiYXBwbGljYXRpb24vdm5k''@;'; put 'put ''Lm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmN1c3RvbVhtbFByb3BlcnRpZXMreG1sIjoiY3VzdG9teG1scHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jdXN0b21Qcm9wZXJ0eSI6IlRPRE8iLCJhcHBsaWNh''@;'; put 'put ''dGlvbi92bmQubXMtZXhjZWwucGl2b3RUYWJsZSI6InBpdm90cyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90VGFibGUreG1sIjoicGl2b3RzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRv''@;'; put 'put ''Y3VtZW50LmRyYXdpbmdtbC5jaGFydCt4bWwiOiJjaGFydG9ianMiLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmNoYXJ0Y29sb3JzdHlsZSt4bWwiOiJjaGFydGNvbG9ycyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuY2hhcnRzdHlsZSt4bWwiOiJjaGFydHN0eWxlcyIsImFwcGxp''@;'; put 'put ''Y2F0aW9uL3ZuZC5tcy1vZmZpY2UuY2hhcnRleCt4bWwiOiJjaGFydGV4cyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jYWxjQ2hhaW4iOiJjYWxjY2hhaW5zIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY2FsY0NoYWlu''@;'; put 'put ''K3htbCI6ImNhbGNjaGFpbnMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5wcmludGVyU2V0dGluZ3MiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5hY3RpdmVYIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5t''@;'; put 'put ''cy1vZmZpY2UuYWN0aXZlWCt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmF0dGFjaGVkVG9vbGJhcnMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNvbm5lY3Rpb25zIjoiY29ubnMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNl''@;'; put 'put ''ZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jb25uZWN0aW9ucyt4bWwiOiJjb25ucyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5leHRlcm5hbExpbmsiOiJsaW5rcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmV4dGVybmFs''@;'; put 'put ''TGluayt4bWwiOiJsaW5rcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldE1ldGFkYXRhIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0TWV0YWRhdGEreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9u''@;'; put 'put ''L3ZuZC5tcy1leGNlbC5waXZvdENhY2hlRGVmaW5pdGlvbiI6InBpdm90Y2FjaGVzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90Q2FjaGVSZWNvcmRzIjoicGl2b3RyZWNvcmRzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNo''@;'; put 'put ''ZWV0bWwucGl2b3RDYWNoZURlZmluaXRpb24reG1sIjoicGl2b3RjYWNoZXMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdENhY2hlUmVjb3Jkcyt4bWwiOiJwaXZvdHJlY29yZHMiLCJhcHBsaWNhdGlvbi92bmQubXMt''@;'; put 'put ''ZXhjZWwucXVlcnlUYWJsZSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5xdWVyeVRhYmxlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudXNlck5hbWVzIjoiVE9ETyIsImFwcGxpY2F0aW9u''@;'; put 'put ''L3ZuZC5tcy1leGNlbC5yZXZpc2lvbkhlYWRlcnMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnJldmlzaW9uTG9nIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnJldmlzaW9uSGVhZGVycyt4bWwi''@;'; put 'put ''OiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucmV2aXNpb25Mb2creG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnVzZXJOYW1lcyt4''@;'; put 'put ''bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnRhYmxlU2luZ2xlQ2VsbHMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGFibGVTaW5nbGVDZWxscyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24v''@;'; put 'put ''dm5kLm1zLWV4Y2VsLnNsaWNlciI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2xpY2VyQ2FjaGUiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNsaWNlcit4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNsaWNlckNhY2hlK3htbCI6IlRP''@;'; put 'put ''RE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwud3NTb3J0TWFwIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC50YWJsZSI6InRhYmxlcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRhYmxlK3htbCI6InRh''@;'; put 'put ''YmxlcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC50aGVtZSt4bWwiOiJ0aGVtZXMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudGhlbWVPdmVycmlkZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1z''@;'; put 'put ''LWV4Y2VsLlRpbWVsaW5lK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuVGltZWxpbmVDYWNoZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS52YmFQcm9qZWN0IjoidmJhIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS52YmFQcm9qZWN0U2ln''@;'; put 'put ''bmF0dXJlIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2Uudm9sYXRpbGVEZXBlbmRlbmNpZXMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudm9sYXRpbGVEZXBlbmRlbmNpZXMreG1sIjoiVE9ETyIs''@;'; put 'put ''ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jb250cm9scHJvcGVydGllcyt4bWwiOiJjdHJscHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQubW9kZWwrZGF0YSI6ImRhdGFtb2RlbHMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuU3VydmV5''@;'; put 'put ''K3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZyt4bWwiOiJkcmF3aW5ncyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuY2hhcnRzaGFwZXMreG1sIjoiVE9ETyIs''@;'; put 'put ''ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbUNvbG9ycyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtRGF0YSt4bWwiOiJUT0RPIiwi''@;'; put 'put ''YXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtTGF5b3V0K3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1TdHlsZSt4bWwiOiJUT0RPIiwi''@;'; put 'put ''YXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnZtbERyYXdpbmciOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLXBhY2thZ2UucmVsYXRpb25zaGlwcyt4bWwiOiJyZWxzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9m''@;'; put 'put ''ZmljZWRvY3VtZW50Lm9sZU9iamVjdCI6IlRPRE8iLCJpbWFnZS9wbmciOiJUT0RPIixzaGVldDoianMifSxpbT1mdW5jdGlvbigpe3ZhciBTPXt3b3JrYm9va3M6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0''@;'; put 'put ''Lm1haW4reG1sIix4bHNtOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hlZXQubWFjcm9FbmFibGVkLm1haW4reG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hlZXQuYmluYXJ5Lm1hY3JvRW5hYmxlZC5tYWluIix4bGFtOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwu''@;'; put 'put ''YWRkaW4ubWFjcm9FbmFibGVkLm1haW4reG1sIix4bHR4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50ZW1wbGF0ZS5tYWluK3htbCJ9LHN0cnM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vk''@;'; put 'put ''b2N1bWVudC5zcHJlYWRzaGVldG1sLnNoYXJlZFN0cmluZ3MreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hhcmVkU3RyaW5ncyJ9LGNvbW1lbnRzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5j''@;'; put 'put ''b21tZW50cyt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jb21tZW50cyJ9LHNoZWV0czp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwud29ya3NoZWV0K3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5k''@;'; put 'put ''Lm1zLWV4Y2VsLndvcmtzaGVldCJ9LGNoYXJ0czp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY2hhcnRzaGVldCt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jaGFydHNoZWV0In0sZGlhbG9nczp7''@;'; put 'put ''eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuZGlhbG9nc2hlZXQreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuZGlhbG9nc2hlZXQifSxtYWNyb3M6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNl''@;'; put 'put ''bC5tYWNyb3NoZWV0K3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLm1hY3Jvc2hlZXQifSx0YWJsZXM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRhYmxlK3htbCIseGxzYjoiYXBwbGljYXRpb24v''@;'; put 'put ''dm5kLm1zLWV4Y2VsLnRhYmxlIn0scGl2b3RzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdFRhYmxlK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90VGFibGUifSxwaXZvdGNhY2hl''@;'; put 'put ''czp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RDYWNoZURlZmluaXRpb24reG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGl2b3RDYWNoZURlZmluaXRpb24ifSxwaXZvdHJlY29yZHM6e3hs''@;'; put 'put ''c3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90Q2FjaGVSZWNvcmRzK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90Q2FjaGVSZWNvcmRzIn0sY29ubnM6e3hsc3g6ImFwcGxpY2F0aW9uL3Zu''@;'; put 'put ''ZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNvbm5lY3Rpb25zK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNvbm5lY3Rpb25zIn0sbGlua3M6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVu''@;'; put 'put ''dC5zcHJlYWRzaGVldG1sLmV4dGVybmFsTGluayt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5leHRlcm5hbExpbmsifSxzdHlsZXM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnN0eWxlcyt4bWwi''@;'; put 'put ''LHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zdHlsZXMifX07cmV0dXJuIExlKFMpLmZvckVhY2goZnVuY3Rpb24oTCl7WyJ4bHNtIiwieGxhbSJdLmZvckVhY2goZnVuY3Rpb24oayl7U1tMXVtrXXx8KFNbTF1ba109U1tMXS54bHN4KX0pfSksTGUoUykuZm9yRWFjaChmdW5jdGlv''@;'; put 'put ''bihMKXtMZShTW0xdKS5mb3JFYWNoKGZ1bmN0aW9uKGspe1I4W1NbTF1ba11dPUx9KX0pLFN9KCksUnk9ZnVuY3Rpb24gRGUoUyl7Zm9yKHZhciBMPVtdLGs9TGUoUyksRz0wO0chPT1rLmxlbmd0aDsrK0cpbnVsbD09TFtTW2tbR11dXSYmKExbU1trW0ddXV09W10pLExbU1trW0ddXV0ucHVz''@;'; put 'put ''aChrW0ddKTtyZXR1cm4gTH0oUjgpO0JhLkNUPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L2NvbnRlbnQtdHlwZXMiO3ZhciBPeT1qcigiVHlwZXMiLG51bGwse3htbG5zOkJhLkNULCJ4bWxuczp4c2QiOkJhLnhzZCwieG1sbnM6eHNpIjpCYS54c2l9''@;'; put 'put ''KSxwMz1bWyJ4bWwiLCJhcHBsaWNhdGlvbi94bWwiXSxbImJpbiIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldC5iaW5hcnkubWFjcm9FbmFibGVkLm1haW4iXSxbInZtbCIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC52bWxEcmF3aW5nIl0s''@;'; put 'put ''WyJkYXRhIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50Lm1vZGVsK2RhdGEiXSxbImJtcCIsImltYWdlL2JtcCJdLFsicG5nIiwiaW1hZ2UvcG5nIl0sWyJnaWYiLCJpbWFnZS9naWYiXSxbImVtZiIsImltYWdlL3gtZW1mIl0sWyJ3bWYiLCJpbWFnZS94''@;'; put 'put ''LXdtZiJdLFsianBnIiwiaW1hZ2UvanBlZyJdLFsianBlZyIsImltYWdlL2pwZWciXSxbInRpZiIsImltYWdlL3RpZmYiXSxbInRpZmYiLCJpbWFnZS90aWZmIl0sWyJwZGYiLCJhcHBsaWNhdGlvbi9wZGYiXSxbInJlbHMiLFJ5LnJlbHNbMF1dXS5tYXAoZnVuY3Rpb24oUyl7cmV0dXJuIGpy''@;'; put 'put ''KCJEZWZhdWx0IixudWxsLHtFeHRlbnNpb246U1swXSxDb250ZW50VHlwZTpTWzFdfSl9KSxLYT17V0I6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvb2ZmaWNlRG9jdW1lbnQiLFNIRUVUOiJodHRwOi8vc2hlZXRq''@;'; put 'put ''cy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL29mZmljZURvY3VtZW50IixITElOSzoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9oeXBlcmxpbmsiLFZNTDoiaHR0''@;'; put 'put ''cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy92bWxEcmF3aW5nIixYUEFUSDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9leHRlcm5hbExpbmtQ''@;'; put 'put ''YXRoIixYTUlTUzoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9yZWxhdGlvbnNoaXBzL3hsRXh0ZXJuYWxMaW5rUGF0aC94bFBhdGhNaXNzaW5nIixYTElOSzoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVs''@;'; put 'put ''YXRpb25zaGlwcy9leHRlcm5hbExpbmsiLENYTUw6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY3VzdG9tWG1sIixDWE1MUDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50''@;'; put 'put ''LzIwMDYvcmVsYXRpb25zaGlwcy9jdXN0b21YbWxQcm9wcyIsVkJBOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L3JlbGF0aW9uc2hpcHMvdmJhUHJvamVjdCJ9O2Z1bmN0aW9uIFVoKFMpe3ZhciBMPVMubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4gUy5zbGljZSgw''@;'; put 'put ''LEwrMSkrIl9yZWxzLyIrUy5zbGljZShMKzEpKyIucmVscyJ9ZnVuY3Rpb24gSjIoUyxMKXt2YXIgaz17IiFpZCI6e319O2lmKCFTKXJldHVybiBrOyIvIiE9PUwuY2hhckF0KDApJiYoTD0iLyIrTCk7dmFyIEc9e307cmV0dXJuKFMubWF0Y2godG4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihR''@;'; put 'put ''KXt2YXIgbGU9dnIoUSk7aWYoIjxSZWxhdGlvbnNoaXAiPT09bGVbMF0pe3ZhciBtZT17fTttZS5UeXBlPWxlLlR5cGUsbWUuVGFyZ2V0PWxlLlRhcmdldCxtZS5JZD1sZS5JZCxtZS5UYXJnZXRNb2RlPWxlLlRhcmdldE1vZGU7dmFyIHBlPSJFeHRlcm5hbCI9PT1sZS5UYXJnZXRNb2RlP2xl''@;'; put 'put ''LlRhcmdldDptbihsZS5UYXJnZXQsTCk7a1twZV09bWUsR1tsZS5JZF09bWV9fSksa1siIWlkIl09RyxrfUJhLlJFTFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvcmVsYXRpb25zaGlwcyI7dmFyIERwPWpyKCJSZWxhdGlvbnNoaXBzIixudWxsLHt4''@;'; put 'put ''bWxuczpCYS5SRUxTfSk7ZnVuY3Rpb24gSDAoUyl7dmFyIEw9W3BpLERwXTtyZXR1cm4gTGUoU1siIWlkIl0pLmZvckVhY2goZnVuY3Rpb24oayl7TFtMLmxlbmd0aF09anIoIlJlbGF0aW9uc2hpcCIsbnVsbCxTWyIhaWQiXVtrXSl9KSxMLmxlbmd0aD4yJiYoTFtMLmxlbmd0aF09IjwvUmVs''@;'; put 'put ''YXRpb25zaGlwcz4iLExbMV09TFsxXS5yZXBsYWNlKCIvPiIsIj4iKSksTC5qb2luKCIiKX12YXIgcWw9W0thLkhMSU5LLEthLlhQQVRILEthLlhNSVNTXTtmdW5jdGlvbiBUcyhTLEwsayxHLFEsbGUpe2lmKFF8fChRPXt9KSxTWyIhaWQiXXx8KFNbIiFpZCJdPXt9KSxMPDApZm9yKEw9MTtT''@;'; put 'put ''WyIhaWQiXVsicklkIitMXTsrK0wpO2lmKFEuSWQ9InJJZCIrTCxRLlR5cGU9RyxRLlRhcmdldD1rLGxlP1EuVGFyZ2V0TW9kZT1sZTpxbC5pbmRleE9mKFEuVHlwZSk+LTEmJihRLlRhcmdldE1vZGU9IkV4dGVybmFsIiksU1siIWlkIl1bUS5JZF0pdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qg''@;'; put 'put ''cmV3cml0ZSBySWQgIitMKTtyZXR1cm4gU1siIWlkIl1bUS5JZF09USxTWygiLyIrUS5UYXJnZXQpLnJlcGxhY2UoIi8vIiwiLyIpXT1RLEx9ZnVuY3Rpb24gTDgoUyxMLGspe3JldHVyblsnICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iJytTKyciPlxuJywnICAgIDxyZGY6dHlwZSBy''@;'; put 'put ''ZGY6cmVzb3VyY2U9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29mZmljZS8xLjIvbWV0YS8nKyhrfHwib2RmIikrIiMiK0wrJyIvPlxuJywiICA8L3JkZjpEZXNjcmlwdGlvbj5cbiJdLmpvaW4oIiIpfWZ1bmN0aW9uIENnKFMsTCl7cmV0dXJuWycgIDxyZGY6RGVzY3JpcHRpb24g''@;'; put 'put ''cmRmOmFib3V0PSInK1MrJyI+XG4nLCcgICAgPG5zMDpoYXNQYXJ0IHhtbG5zOm5zMD0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb2ZmaWNlLzEuMi9tZXRhL3BrZyMiIHJkZjpyZXNvdXJjZT0iJytMKyciLz5cbicsIiAgPC9yZGY6RGVzY3JpcHRpb24+XG4iXS5qb2luKCIiKX12''@;'; put 'put ''YXIgSHk9ZnVuY3Rpb24oKXt2YXIgUz0nPG9mZmljZTpkb2N1bWVudC1tZXRhIHhtbG5zOm9mZmljZT0idXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZmZpY2U6MS4wIiB4bWxuczptZXRhPSJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm1ldGE6''@;'; put 'put ''MS4wIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBvZmZpY2U6dmVyc2lvbj0iMS4yIj48b2ZmaWNlOm1ldGE+PG1ldGE6Z2VuZXJhdG9yPlNoZWV0SlMgJyt3LnZlcnNpb24rIjwv''@;'; put 'put ''bWV0YTpnZW5lcmF0b3I+PC9vZmZpY2U6bWV0YT48L29mZmljZTpkb2N1bWVudC1tZXRhPiI7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFN9fSgpLHcxPVtbImNwOmNhdGVnb3J5IiwiQ2F0ZWdvcnkiXSxbImNwOmNvbnRlbnRTdGF0dXMiLCJDb250ZW50U3RhdHVzIl0sWyJjcDprZXl3b3Jk''@;'; put 'put ''cyIsIktleXdvcmRzIl0sWyJjcDpsYXN0TW9kaWZpZWRCeSIsIkxhc3RBdXRob3IiXSxbImNwOmxhc3RQcmludGVkIiwiTGFzdFByaW50ZWQiXSxbImNwOnJldmlzaW9uIiwiUmV2TnVtYmVyIl0sWyJjcDp2ZXJzaW9uIiwiVmVyc2lvbiJdLFsiZGM6Y3JlYXRvciIsIkF1dGhvciJdLFsiZGM6''@;'; put 'put ''ZGVzY3JpcHRpb24iLCJDb21tZW50cyJdLFsiZGM6aWRlbnRpZmllciIsIklkZW50aWZpZXIiXSxbImRjOmxhbmd1YWdlIiwiTGFuZ3VhZ2UiXSxbImRjOnN1YmplY3QiLCJTdWJqZWN0Il0sWyJkYzp0aXRsZSIsIlRpdGxlIl0sWyJkY3Rlcm1zOmNyZWF0ZWQiLCJDcmVhdGVkRGF0ZSIsImRh''@;'; put 'put ''dGUiXSxbImRjdGVybXM6bW9kaWZpZWQiLCJNb2RpZmllZERhdGUiLCJkYXRlIl1dO0JhLkNPUkVfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvbWV0YWRhdGEvY29yZS1wcm9wZXJ0aWVzIixLYS5DT1JFX1BST1BTPSJodHRwOi8vc2NoZW1h''@;'; put 'put ''cy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3JlbGF0aW9uc2hpcHMvbWV0YWRhdGEvY29yZS1wcm9wZXJ0aWVzIjt2YXIgRFM9ZnVuY3Rpb24oKXtmb3IodmFyIFM9bmV3IEFycmF5KHcxLmxlbmd0aCksTD0wO0w8dzEubGVuZ3RoOysrTCl7dmFyIGs9dzFbTF0sRz0iKD86Iitr''@;'; put 'put ''WzBdLnNsaWNlKDAsa1swXS5pbmRleE9mKCI6IikpKyI6KSIra1swXS5zbGljZShrWzBdLmluZGV4T2YoIjoiKSsxKTtTW0xdPW5ldyBSZWdFeHAoIjwiK0crIltePl0qPihbXFxzXFxTXSo/KTwvIitHKyI+Iil9cmV0dXJuIFN9KCk7ZnVuY3Rpb24gb20oUyl7dmFyIEw9e307Uz1jbyhTKTtm''@;'; put 'put ''b3IodmFyIGs9MDtrPHcxLmxlbmd0aDsrK2spe3ZhciBHPXcxW2tdLFE9Uy5tYXRjaChEU1trXSk7bnVsbCE9USYmUS5sZW5ndGg+MCYmKExbR1sxXV09ZWkoUVsxXSkpLCJkYXRlIj09PUdbMl0mJkxbR1sxXV0mJihMW0dbMV1dPUllKExbR1sxXV0pKX1yZXR1cm4gTH12YXIgQzE9anIoImNw''@;'; put 'put ''OmNvcmVQcm9wZXJ0aWVzIixudWxsLHsieG1sbnM6Y3AiOkJhLkNPUkVfUFJPUFMsInhtbG5zOmRjIjpCYS5kYywieG1sbnM6ZGN0ZXJtcyI6QmEuZGN0ZXJtcywieG1sbnM6ZGNtaXR5cGUiOkJhLmRjbWl0eXBlLCJ4bWxuczp4c2kiOkJhLnhzaX0pO2Z1bmN0aW9uIFNnKFMsTCxrLEcsUSl7''@;'; put 'put ''bnVsbCE9UVtTXXx8bnVsbD09THx8IiI9PT1MfHwoUVtTXT1MLEw9aGkoTCksR1tHLmxlbmd0aF09az9qcihTLEwsayk6Wm8oUyxMKSl9dmFyIFMxPVtbIkFwcGxpY2F0aW9uIiwiQXBwbGljYXRpb24iLCJzdHJpbmciXSxbIkFwcFZlcnNpb24iLCJBcHBWZXJzaW9uIiwic3RyaW5nIl0sWyJD''@;'; put 'put ''b21wYW55IiwiQ29tcGFueSIsInN0cmluZyJdLFsiRG9jU2VjdXJpdHkiLCJEb2NTZWN1cml0eSIsInN0cmluZyJdLFsiTWFuYWdlciIsIk1hbmFnZXIiLCJzdHJpbmciXSxbIkh5cGVybGlua3NDaGFuZ2VkIiwiSHlwZXJsaW5rc0NoYW5nZWQiLCJib29sIl0sWyJTaGFyZWREb2MiLCJTaGFy''@;'; put 'put ''ZWREb2MiLCJib29sIl0sWyJMaW5rc1VwVG9EYXRlIiwiTGlua3NVcFRvRGF0ZSIsImJvb2wiXSxbIlNjYWxlQ3JvcCIsIlNjYWxlQ3JvcCIsImJvb2wiXSxbIkhlYWRpbmdQYWlycyIsIkhlYWRpbmdQYWlycyIsInJhdyJdLFsiVGl0bGVzT2ZQYXJ0cyIsIlRpdGxlc09mUGFydHMiLCJyYXci''@;'; put 'put ''XV07ZnVuY3Rpb24gTnkoUyxMLGssRyl7dmFyIFE9W107aWYoInN0cmluZyI9PXR5cGVvZiBTKVE9dGkoUyxHKTtlbHNlIGZvcih2YXIgbGU9MDtsZTxTLmxlbmd0aDsrK2xlKVE9US5jb25jYXQoU1tsZV0ubWFwKGZ1bmN0aW9uKEJlKXtyZXR1cm57djpCZX19KSk7dmFyIG1lPSJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgTD90aShMLEcpLm1hcChmdW5jdGlvbihCZSl7cmV0dXJuIEJlLnZ9KTpMLHBlPTAsYmU9MDtpZihtZS5sZW5ndGg+MClmb3IodmFyIE5lPTA7TmUhPT1RLmxlbmd0aDtOZSs9Mil7c3dpdGNoKGJlPStRW05lKzFdLnYsUVtOZV0udil7Y2FzZSJXb3Jrc2hlZXRzIjpjYXNlIlx1''@;'; put 'put ''NWRlNVx1NGY1Y1x1ODg2OCI6Y2FzZSJcdTA0MWJcdTA0MzhcdTA0NDFcdTA0NDJcdTA0NGIiOmNhc2UiXHUwNjIzXHUwNjQ4XHUwNjMxXHUwNjI3XHUwNjQyIFx1MDYyN1x1MDY0NFx1MDYzOVx1MDY0NVx1MDY0NCI6Y2FzZSJcdTMwZWZcdTMwZmNcdTMwYWZcdTMwYjdcdTMwZmNcdTMwYzgi''@;'; put 'put ''OmNhc2UiXHUwNWQyXHUwNWRjXHUwNWQ5XHUwNWQ1XHUwNWUwXHUwNWQ1XHUwNWVhIFx1MDVlMlx1MDVkMVx1MDVkNVx1MDVkM1x1MDVkNCI6Y2FzZSJBcmJlaXRzYmxceGU0dHRlciI6Y2FzZSJceGM3YWxcdTAxMzFcdTAxNWZtYSBTYXlmYWxhclx1MDEzMSI6Y2FzZSJGZXVpbGxlcyBkZSBj''@;'; put 'put ''YWxjdWwiOmNhc2UiRm9nbGkgZGkgbGF2b3JvIjpjYXNlIkZvbGhhcyBkZSBjXHhlMWxjdWxvIjpjYXNlIlBsYW5pbGhhcyI6Y2FzZSJSZWduZWFyayI6Y2FzZSJIb2phcyBkZSBjXHhlMWxjdWxvIjpjYXNlIldlcmtibGFkZW4iOmsuV29ya3NoZWV0cz1iZSxrLlNoZWV0TmFtZXM9bWUuc2xp''@;'; put 'put ''Y2UocGUscGUrYmUpO2JyZWFrO2Nhc2UiTmFtZWQgUmFuZ2VzIjpjYXNlIlJhbmdvcyBjb24gbm9tYnJlIjpjYXNlIlx1NTQwZFx1NTI0ZFx1NGVkOFx1MzA0ZFx1NGUwMFx1ODlhNyI6Y2FzZSJCZW5hbm50ZSBCZXJlaWNoZSI6Y2FzZSJOYXZuZ2l2bmUgb21yXHhlNWRlciI6ay5OYW1lZFJh''@;'; put 'put ''bmdlcz1iZSxrLkRlZmluZWROYW1lcz1tZS5zbGljZShwZSxwZStiZSk7YnJlYWs7Y2FzZSJDaGFydHMiOmNhc2UiRGlhZ3JhbW1lIjprLkNoYXJ0c2hlZXRzPWJlLGsuQ2hhcnROYW1lcz1tZS5zbGljZShwZSxwZStiZSl9cGUrPWJlfX1CYS5FWFRfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9w''@;'; put 'put ''ZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2V4dGVuZGVkLXByb3BlcnRpZXMiLEthLkVYVF9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9leHRlbmRlZC1wcm9wZXJ0aWVzIjt2YXIg''@;'; put 'put ''Vnk9anIoIlByb3BlcnRpZXMiLG51bGwse3htbG5zOkJhLkVYVF9QUk9QUywieG1sbnM6dnQiOkJhLnZ0fSk7QmEuQ1VTVF9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvY3VzdG9tLXByb3BlcnRpZXMiLEthLkNVU1RfUFJPUFM9''@;'; put 'put ''Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY3VzdG9tLXByb3BlcnRpZXMiO3ZhciBNZz0vPFtePl0rPltePF0qL2csTFM9anIoIlByb3BlcnRpZXMiLG51bGwse3htbG5zOkJhLkNVU1RfUFJPUFMsInhtbG5zOnZ0''@;'; put 'put ''IjpCYS52dH0pO3ZhciBPOD17VGl0bGU6IlRpdGxlIixTdWJqZWN0OiJTdWJqZWN0IixBdXRob3I6IkF1dGhvciIsS2V5d29yZHM6IktleXdvcmRzIixDb21tZW50czoiRGVzY3JpcHRpb24iLExhc3RBdXRob3I6Ikxhc3RBdXRob3IiLFJldk51bWJlcjoiUmV2aXNpb24iLEFwcGxpY2F0aW9u''@;'; put 'put ''OiJBcHBOYW1lIixMYXN0UHJpbnRlZDoiTGFzdFByaW50ZWQiLENyZWF0ZWREYXRlOiJDcmVhdGVkIixNb2RpZmllZERhdGU6Ikxhc3RTYXZlZCIsQ2F0ZWdvcnk6IkNhdGVnb3J5IixNYW5hZ2VyOiJNYW5hZ2VyIixDb21wYW55OiJDb21wYW55IixBcHBWZXJzaW9uOiJWZXJzaW9uIixDb250''@;'; put 'put ''ZW50U3RhdHVzOiJDb250ZW50U3RhdHVzIixJZGVudGlmaWVyOiJJZGVudGlmaWVyIixMYW5ndWFnZToiTGFuZ3VhZ2UifSxQUz1WZShPOCk7ZnVuY3Rpb24gUDgoUyxMLGspe1NbTD1QU1tMXXx8TF09a31mdW5jdGlvbiBCcyhTKXt2YXIgTD1TLnJlYWRfc2hpZnQoNCksaz1TLnJlYWRfc2hp''@;'; put 'put ''ZnQoNCk7cmV0dXJuIG5ldyBEYXRlKDFlMyooay8xZTcqTWF0aC5wb3coMiwzMikrTC8xZTctMTE2NDQ0NzM2MDApKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1wuMDAwLywiIil9ZnVuY3Rpb24gc28oUyxMLGspe3ZhciBHPVMubCxRPVMucmVhZF9zaGlmdCgwLCJscHN0ci1jcCIpO2lmKGsp''@;'; put 'put ''Zm9yKDtTLmwtRyYzOykrK1MubDtyZXR1cm4gUX1mdW5jdGlvbiBKbChTLEwsayl7dmFyIEc9Uy5yZWFkX3NoaWZ0KDAsImxwd3N0ciIpO3JldHVybiBrJiYoUy5sKz00LShHLmxlbmd0aCsxJjMpJjMpLEd9ZnVuY3Rpb24gRHUoUyxMLGspe3JldHVybiAzMT09PUw/SmwoUyk6c28oUywwLGsp''@;'; put 'put ''fWZ1bmN0aW9uIFBjKFMsTCxrKXtyZXR1cm4gRHUoUyxMLCExPT09az8wOjQpfWZ1bmN0aW9uIFFsKFMpe3ZhciBMPVMubCxrPVdoKFMsODEpO3JldHVybiAwPT1TW1MubF0mJjA9PVNbUy5sKzFdJiZTLmwtTCYyJiYoUy5sKz0yKSxbayxXaChTLDMpXX1mdW5jdGlvbiB5byhTLEwpe2Zvcih2''@;'; put 'put ''YXIgaz1TLnJlYWRfc2hpZnQoNCksRz17fSxRPTA7USE9azsrK1Epe3ZhciBsZT1TLnJlYWRfc2hpZnQoNCksbWU9Uy5yZWFkX3NoaWZ0KDQpO0dbbGVdPVMucmVhZF9zaGlmdChtZSwxMjAwPT09TD8idXRmMTZsZSI6InV0ZjgiKS5yZXBsYWNlKEUsIiIpLnJlcGxhY2UobSwiISIpLDEyMDA9''@;'; put 'put ''PT1MJiZtZSUyJiYoUy5sKz0yKX1yZXR1cm4gMyZTLmwmJihTLmw9Uy5sPj4zPDwyKSxHfWZ1bmN0aW9uIFpoKFMpe3ZhciBMPVMucmVhZF9zaGlmdCg0KSxrPVMuc2xpY2UoUy5sLFMubCtMKTtyZXR1cm4gUy5sKz1MLCgzJkwpPjAmJihTLmwrPTQtKDMmTCkmMyksa31mdW5jdGlvbiBXaChT''@;'; put 'put ''LEwsayl7dmFyIFEsRz1TLnJlYWRfc2hpZnQoMiksbGU9a3x8e307aWYoUy5sKz0yLDEyIT09TCYmRyE9PUwmJi0xPT09RDguaW5kZXhPZihMKSYmKDQxMjYhPSg2NTUzNCZMKXx8NDEyNiE9KDY1NTM0JkcpKSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHR5cGUgIitMKyIgc2F3ICIrRyk7''@;'; put 'put ''c3dpdGNoKDEyPT09TD9HOkwpe2Nhc2UgMjpyZXR1cm4gUT1TLnJlYWRfc2hpZnQoMiwiaSIpLGxlLnJhd3x8KFMubCs9MiksUTtjYXNlIDM6cmV0dXJuIFMucmVhZF9zaGlmdCg0LCJpIik7Y2FzZSAxMTpyZXR1cm4gMCE9PVMucmVhZF9zaGlmdCg0KTtjYXNlIDE5OnJldHVybiBTLnJlYWRf''@;'; put 'put ''c2hpZnQoNCk7Y2FzZSAzMDpyZXR1cm4gc28oUywwLDQpLnJlcGxhY2UoRSwiIik7Y2FzZSAzMTpyZXR1cm4gSmwoUyk7Y2FzZSA2NDpyZXR1cm4gQnMoUyk7Y2FzZSA2NTpyZXR1cm4gWmgoUyk7Y2FzZSA3MTpyZXR1cm4gZnVuY3Rpb24gbG0oUyl7dmFyIEw9e307cmV0dXJuIEwuU2l6ZT1T''@;'; put 'put ''LnJlYWRfc2hpZnQoNCksUy5sKz1MLlNpemUrMy0oTC5TaXplLTEpJTQsTH0oUyk7Y2FzZSA4MDpyZXR1cm4gUGMoUyxHLCFsZS5yYXcpLnJlcGxhY2UoRSwiIik7Y2FzZSA4MTpyZXR1cm4gZnVuY3Rpb24gbTAoUyxMKXtpZighTCl0aHJvdyBuZXcgRXJyb3IoIlZ0VW5hbGlnbmVkU3RyaW5n''@;'; put 'put ''IG11c3QgaGF2ZSBwb3NpdGl2ZSBsZW5ndGgiKTtyZXR1cm4gRHUoUyxMLDApfShTLEcpLnJlcGxhY2UoRSwiIik7Y2FzZSA0MTA4OnJldHVybiBmdW5jdGlvbiBLZChTKXtmb3IodmFyIEw9Uy5yZWFkX3NoaWZ0KDQpLGs9W10sRz0wO0c8TC8yOysrRylrLnB1c2goUWwoUykpO3JldHVybiBr''@;'; put 'put ''fShTKTtjYXNlIDQxMjY6Y2FzZSA0MTI3OnJldHVybiA0MTI3PT1HP2Z1bmN0aW9uIExwKFMpe2Zvcih2YXIgTD1TLnJlYWRfc2hpZnQoNCksaz1bXSxHPTA7RyE9TDsrK0cpe3ZhciBRPVMubDtrW0ddPVMucmVhZF9zaGlmdCgwLCJscHdzdHIiKS5yZXBsYWNlKEUsIiIpLFMubC1RJjImJihT''@;'; put 'put ''LmwrPTIpfXJldHVybiBrfShTKTpmdW5jdGlvbiBZcyhTKXtmb3IodmFyIEw9Uy5yZWFkX3NoaWZ0KDQpLGs9W10sRz0wO0chPUw7KytHKWtbR109Uy5yZWFkX3NoaWZ0KDAsImxwc3RyLWNwIikucmVwbGFjZShFLCIiKTtyZXR1cm4ga30oUyk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlR5''@;'; put 'put ''cGVkUHJvcGVydHlWYWx1ZSB1bnJlY29nbml6ZWQgdHlwZSAiK0wrIiAiK0cpfX1mdW5jdGlvbiBCbChTLEwpe3ZhciBrPVZ0KDQpLEc9VnQoNCk7c3dpdGNoKGsud3JpdGVfc2hpZnQoNCw4MD09Uz8zMTpTKSxTKXtjYXNlIDM6Ry53cml0ZV9zaGlmdCgtNCxMKTticmVhaztjYXNlIDU6KEc9''@;'; put 'put ''VnQoOCkpLndyaXRlX3NoaWZ0KDgsTCwiZiIpO2JyZWFrO2Nhc2UgMTE6Ry53cml0ZV9zaGlmdCg0LEw/MTowKTticmVhaztjYXNlIDY0Okc9ZnVuY3Rpb24gTGkoUyl7dmFyIGs9KCJzdHJpbmciPT10eXBlb2YgUz9uZXcgRGF0ZShEYXRlLnBhcnNlKFMpKTpTKS5nZXRUaW1lKCkvMWUzKzEx''@;'; put 'put ''NjQ0NDczNjAwLEc9ayVNYXRoLnBvdygyLDMyKSxRPShrLUcpL01hdGgucG93KDIsMzIpO1EqPTFlNzt2YXIgbGU9KEcqPTFlNykvTWF0aC5wb3coMiwzMil8MDtsZT4wJiYoRyU9TWF0aC5wb3coMiwzMiksUSs9bGUpO3ZhciBtZT1WdCg4KTtyZXR1cm4gbWUud3JpdGVfc2hpZnQoNCxHKSxt''@;'; put 'put ''ZS53cml0ZV9zaGlmdCg0LFEpLG1lfShMKTticmVhaztjYXNlIDMxOmNhc2UgODA6Zm9yKChHPVZ0KDQrMiooTC5sZW5ndGgrMSkrKEwubGVuZ3RoJTI/MDoyKSkpLndyaXRlX3NoaWZ0KDQsTC5sZW5ndGgrMSksRy53cml0ZV9zaGlmdCgwLEwsImRiY3MiKTtHLmwhPUcubGVuZ3RoOylHLndy''@;'; put 'put ''aXRlX3NoaWZ0KDEsMCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlR5cGVkUHJvcGVydHlWYWx1ZSB1bnJlY29nbml6ZWQgdHlwZSAiK1MrIiAiK0wpfXJldHVybiBqKFtrLEddKX1mdW5jdGlvbiB2MChTLEwpe3ZhciBrPVMubCxHPVMucmVhZF9zaGlmdCg0KSxRPVMucmVhZF9z''@;'; put 'put ''aGlmdCg0KSxsZT1bXSxtZT0wLHBlPTAsYmU9LTEsTmU9e307Zm9yKG1lPTA7bWUhPVE7KyttZSl7dmFyIEJlPVMucmVhZF9zaGlmdCg0KSxHZT1TLnJlYWRfc2hpZnQoNCk7bGVbbWVdPVtCZSxHZStrXX1sZS5zb3J0KGZ1bmN0aW9uKGt0LEx0KXtyZXR1cm4ga3RbMV0tTHRbMV19KTt2YXIg''@;'; put 'put ''ZXQ9e307Zm9yKG1lPTA7bWUhPVE7KyttZSl7aWYoUy5sIT09bGVbbWVdWzFdKXt2YXIgY3Q9ITA7aWYobWU+MCYmTClzd2l0Y2goTFtsZVttZS0xXVswXV0udCl7Y2FzZSAyOlMubCsyPT09bGVbbWVdWzFdJiYoUy5sKz0yLGN0PSExKTticmVhaztjYXNlIDgwOmNhc2UgNDEwODpTLmw8PWxl''@;'; put 'put ''W21lXVsxXSYmKFMubD1sZVttZV1bMV0sY3Q9ITEpfWlmKCghTHx8MD09bWUpJiZTLmw8PWxlW21lXVsxXSYmKGN0PSExLFMubD1sZVttZV1bMV0pLGN0KXRocm93IG5ldyBFcnJvcigiUmVhZCBFcnJvcjogRXhwZWN0ZWQgYWRkcmVzcyAiK2xlW21lXVsxXSsiIGF0ICIrUy5sKyIgOiIrbWUp''@;'; put 'put ''fWlmKEwpe3ZhciB4dD1MW2xlW21lXVswXV07aWYoZXRbeHQubl09V2goUyx4dC50LHtyYXc6ITB9KSwidmVyc2lvbiI9PT14dC5wJiYoZXRbeHQubl09U3RyaW5nKGV0W3h0Lm5dPj4xNikrIi4iKygiMDAwMCIrU3RyaW5nKDY1NTM1JmV0W3h0Lm5dKSkuc2xpY2UoLTQpKSwiQ29kZVBhZ2Ui''@;'; put 'put ''PT14dC5uKXN3aXRjaChldFt4dC5uXSl7Y2FzZSAwOmV0W3h0Lm5dPTEyNTI7Y2FzZSA4NzQ6Y2FzZSA5MzI6Y2FzZSA5MzY6Y2FzZSA5NDk6Y2FzZSA5NTA6Y2FzZSAxMjUwOmNhc2UgMTI1MTpjYXNlIDEyNTM6Y2FzZSAxMjU0OmNhc2UgMTI1NTpjYXNlIDEyNTY6Y2FzZSAxMjU3OmNhc2Ug''@;'; put 'put ''MTI1ODpjYXNlIDFlNDpjYXNlIDEyMDA6Y2FzZSAxMjAxOmNhc2UgMTI1MjpjYXNlIDY1ZTM6Y2FzZS01MzY6Y2FzZSA2NTAwMTpjYXNlLTUzNTpaKHBlPWV0W3h0Lm5dPj4+MCY2NTUzNSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIENvZGVQYWdlOiAiK2V0''@;'; put 'put ''W3h0Lm5dKX19ZWxzZSBpZigxPT09bGVbbWVdWzBdKXtpZihwZT1ldC5Db2RlUGFnZT1XaChTLDIpLFoocGUpLC0xIT09YmUpe3ZhciBvdD1TLmw7Uy5sPWxlW2JlXVsxXSxOZT15byhTLHBlKSxTLmw9b3R9fWVsc2UgaWYoMD09PWxlW21lXVswXSl7aWYoMD09PXBlKXtiZT1tZSxTLmw9bGVb''@;'; put 'put ''bWUrMV1bMV07Y29udGludWV9TmU9eW8oUyxwZSl9ZWxzZXt2YXIgRnQsYnQ9TmVbbGVbbWVdWzBdXTtzd2l0Y2goU1tTLmxdKXtjYXNlIDY1OlMubCs9NCxGdD1aaChTKTticmVhaztjYXNlIDMwOmNhc2UgMzE6Uy5sKz00LEZ0PVBjKFMsU1tTLmwtNF0pLnJlcGxhY2UoL1x1MDAwMCskLywi''@;'; put 'put ''Iik7YnJlYWs7Y2FzZSAzOlMubCs9NCxGdD1TLnJlYWRfc2hpZnQoNCwiaSIpO2JyZWFrO2Nhc2UgMTk6Uy5sKz00LEZ0PVMucmVhZF9zaGlmdCg0KTticmVhaztjYXNlIDU6Uy5sKz00LEZ0PVMucmVhZF9zaGlmdCg4LCJmIik7YnJlYWs7Y2FzZSAxMTpTLmwrPTQsRnQ9bm8oUyw0KTticmVh''@;'; put 'put ''aztjYXNlIDY0OlMubCs9NCxGdD1JZShCcyhTKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVucGFyc2VkIHZhbHVlOiAiK1NbUy5sXSl9ZXRbYnRdPUZ0fX1yZXR1cm4gUy5sPWsrRyxldH12YXIgZWY9WyJDb2RlUGFnZSIsIlRodW1ibmFpbCIsIl9QSURfTElOS0JBU0UiLCJf''@;'; put 'put ''UElEX0hMSU5LUyIsIlN5c3RlbUlkZW50aWZpZXIiLCJGTVRJRCJdLmNvbmNhdChbIldvcmtzaGVldHMiLCJTaGVldE5hbWVzIiwiTmFtZWRSYW5nZXMiLCJEZWZpbmVkTmFtZXMiLCJDaGFydHNoZWV0cyIsIkNoYXJ0TmFtZXMiXSk7ZnVuY3Rpb24gWWgoUyl7c3dpdGNoKHR5cGVvZiBTKXtj''@;'; put 'put ''YXNlImJvb2xlYW4iOnJldHVybiAxMTtjYXNlIm51bWJlciI6cmV0dXJuKDB8Uyk9PVM/Mzo1O2Nhc2Uic3RyaW5nIjpyZXR1cm4gMzE7Y2FzZSJvYmplY3QiOmlmKFMgaW5zdGFuY2VvZiBEYXRlKXJldHVybiA2NH1yZXR1cm4tMX1mdW5jdGlvbiBPcChTLEwsayl7dmFyIEc9VnQoOCksUT1b''@;'; put 'put ''XSxsZT1bXSxtZT04LHBlPTAsYmU9VnQoOCksTmU9VnQoOCk7aWYoYmUud3JpdGVfc2hpZnQoNCwyKSxiZS53cml0ZV9zaGlmdCg0LDEyMDApLE5lLndyaXRlX3NoaWZ0KDQsMSksbGUucHVzaChiZSksUS5wdXNoKE5lKSxtZSs9OCtiZS5sZW5ndGgsIUwpeyhOZT1WdCg4KSkud3JpdGVfc2hp''@;'; put 'put ''ZnQoNCwwKSxRLnVuc2hpZnQoTmUpO3ZhciBCZT1bVnQoNCldO2ZvcihCZVswXS53cml0ZV9zaGlmdCg0LFMubGVuZ3RoKSxwZT0wO3BlPFMubGVuZ3RoOysrcGUpe3ZhciBHZT1TW3BlXVswXTtmb3IoKGJlPVZ0KDgrMiooR2UubGVuZ3RoKzEpKyhHZS5sZW5ndGglMj8wOjIpKSkud3JpdGVf''@;'; put 'put ''c2hpZnQoNCxwZSsyKSxiZS53cml0ZV9zaGlmdCg0LEdlLmxlbmd0aCsxKSxiZS53cml0ZV9zaGlmdCgwLEdlLCJkYmNzIik7YmUubCE9YmUubGVuZ3RoOyliZS53cml0ZV9zaGlmdCgxLDApO0JlLnB1c2goYmUpfWJlPWooQmUpLGxlLnVuc2hpZnQoYmUpLG1lKz04K2JlLmxlbmd0aH1mb3Io''@;'; put 'put ''cGU9MDtwZTxTLmxlbmd0aDsrK3BlKWlmKCghTHx8TFtTW3BlXVswXV0pJiYhKGVmLmluZGV4T2YoU1twZV1bMF0pPi0xKSYmbnVsbCE9U1twZV1bMV0pe3ZhciBldD1TW3BlXVsxXSxjdD0wO2lmKEwpe3ZhciB4dD1rW2N0PStMW1NbcGVdWzBdXV07aWYoInZlcnNpb24iPT14dC5wJiYic3Ry''@;'; put 'put ''aW5nIj09dHlwZW9mIGV0KXt2YXIgb3Q9ZXQuc3BsaXQoIi4iKTtldD0oK290WzBdPDwxNikrKCtvdFsxXXx8MCl9YmU9QmwoeHQudCxldCl9ZWxzZXt2YXIgYnQ9WWgoZXQpOy0xPT1idCYmKGJ0PTMxLGV0PVN0cmluZyhldCkpLGJlPUJsKGJ0LGV0KX1sZS5wdXNoKGJlKSwoTmU9VnQoOCkp''@;'; put 'put ''LndyaXRlX3NoaWZ0KDQsTD9jdDoyK3BlKSxRLnB1c2goTmUpLG1lKz04K2JlLmxlbmd0aH12YXIgRnQ9OCoobGUubGVuZ3RoKzEpO2ZvcihwZT0wO3BlPGxlLmxlbmd0aDsrK3BlKVFbcGVdLndyaXRlX3NoaWZ0KDQsRnQpLEZ0Kz1sZVtwZV0ubGVuZ3RoO3JldHVybiBHLndyaXRlX3NoaWZ0''@;'; put 'put ''KDQsbWUpLEcud3JpdGVfc2hpZnQoNCxsZS5sZW5ndGgpLGooW0ddLmNvbmNhdChRKS5jb25jYXQobGUpKX1mdW5jdGlvbiBIOChTLEwsayl7dmFyIEc9Uy5jb250ZW50O2lmKCFHKXJldHVybnt9O2p0KEcsMCk7dmFyIFEsbGUsbWUscGUsYmU9MDtHLmNoaygiZmVmZiIsIkJ5dGUgT3JkZXI6''@;'; put 'put ''ICIpLEcucmVhZF9zaGlmdCgyKTt2YXIgTmU9Ry5yZWFkX3NoaWZ0KDQpLEJlPUcucmVhZF9zaGlmdCgxNik7aWYoQmUhPT15ZS51dGlscy5jb25zdHMuSEVBREVSX0NMU0lEJiZCZSE9PWspdGhyb3cgbmV3IEVycm9yKCJCYWQgUHJvcGVydHlTZXQgQ0xTSUQgIitCZSk7aWYoMSE9PShRPUcu''@;'; put 'put ''cmVhZF9zaGlmdCg0KSkmJjIhPT1RKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkICNTZXRzOiAiK1EpO2lmKGxlPUcucmVhZF9zaGlmdCgxNikscGU9Ry5yZWFkX3NoaWZ0KDQpLDE9PT1RJiZwZSE9PUcubCl0aHJvdyBuZXcgRXJyb3IoIkxlbmd0aCBtaXNtYXRjaDogIitwZSsiICE9''@;'; put 'put ''PSAiK0cubCk7Mj09PVEmJihtZT1HLnJlYWRfc2hpZnQoMTYpLGJlPUcucmVhZF9zaGlmdCg0KSk7dmFyIHh0LEdlPXYwKEcsTCksZXQ9e1N5c3RlbUlkZW50aWZpZXI6TmV9O2Zvcih2YXIgY3QgaW4gR2UpZXRbY3RdPUdlW2N0XTtpZihldC5GTVRJRD1sZSwxPT09USlyZXR1cm4gZXQ7aWYo''@;'; put 'put ''YmUtRy5sPT0yJiYoRy5sKz0yKSxHLmwhPT1iZSl0aHJvdyBuZXcgRXJyb3IoIkxlbmd0aCBtaXNtYXRjaCAyOiAiK0cubCsiICE9PSAiK2JlKTt0cnl7eHQ9djAoRyxudWxsKX1jYXRjaHt9Zm9yKGN0IGluIHh0KWV0W2N0XT14dFtjdF07cmV0dXJuIGV0LkZNVElEPVtsZSxtZV0sZXR9ZnVu''@;'; put 'put ''Y3Rpb24gSGkoUyxMLGssRyxRLGxlKXt2YXIgbWU9VnQoUT82ODo0OCkscGU9W21lXTttZS53cml0ZV9zaGlmdCgyLDY1NTM0KSxtZS53cml0ZV9zaGlmdCgyLDApLG1lLndyaXRlX3NoaWZ0KDQsODQyNDEyNTk5KSxtZS53cml0ZV9zaGlmdCgxNix5ZS51dGlscy5jb25zdHMuSEVBREVSX0NM''@;'; put 'put ''U0lELCJoZXgiKSxtZS53cml0ZV9zaGlmdCg0LFE/MjoxKSxtZS53cml0ZV9zaGlmdCgxNixMLCJoZXgiKSxtZS53cml0ZV9zaGlmdCg0LFE/Njg6NDgpO3ZhciBiZT1PcChTLGssRyk7aWYocGUucHVzaChiZSksUSl7dmFyIE5lPU9wKFEsbnVsbCxudWxsKTttZS53cml0ZV9zaGlmdCgxNixs''@;'; put 'put ''ZSwiaGV4IiksbWUud3JpdGVfc2hpZnQoNCw2OCtiZS5sZW5ndGgpLHBlLnB1c2goTmUpfXJldHVybiBqKHBlKX1mdW5jdGlvbiBzZChTLEwpe3JldHVybiBTLnJlYWRfc2hpZnQoTCksbnVsbH1mdW5jdGlvbiBubyhTLEwpe3JldHVybiAxPT09Uy5yZWFkX3NoaWZ0KEwpfWZ1bmN0aW9uIGlh''@;'; put 'put ''KFMsTCl7cmV0dXJuIEx8fChMPVZ0KDIpKSxMLndyaXRlX3NoaWZ0KDIsKyEhUyksTH1mdW5jdGlvbiBwYyhTKXtyZXR1cm4gUy5yZWFkX3NoaWZ0KDIsInUiKX1mdW5jdGlvbiBpYyhTLEwpe3JldHVybiBMfHwoTD1WdCgyKSksTC53cml0ZV9zaGlmdCgyLFMpLEx9ZnVuY3Rpb24gbGQoUyxM''@;'; put 'put ''KXtyZXR1cm4gZnVuY3Rpb24gTjAoUyxMLGspe2Zvcih2YXIgRz1bXSxRPVMubCtMO1MubDxROylHLnB1c2goayhTLFEtUy5sKSk7aWYoUSE9PVMubCl0aHJvdyBuZXcgRXJyb3IoIlNsdXJwIGVycm9yIik7cmV0dXJuIEd9KFMsTCxwYyl9ZnVuY3Rpb24gbTMoUyxMLGspe3JldHVybiBrfHwo''@;'; put 'put ''az1WdCgyKSksay53cml0ZV9zaGlmdCgxLCJlIj09TD8rUzorISFTKSxrLndyaXRlX3NoaWZ0KDEsImUiPT1MPzE6MCksa31mdW5jdGlvbiBjbChTLEwsayl7dmFyIEc9Uy5yZWFkX3NoaWZ0KGsmJmsuYmlmZj49MTI/MjoxKSxRPSJzYmNzLWNvbnQiLGxlPVA7ayYmay5iaWZmPj04JiYoUD0x''@;'; put 'put ''MjAwKSxrJiY4IT1rLmJpZmY/MTI9PWsuYmlmZiYmKFE9IndzdHIiKTpTLnJlYWRfc2hpZnQoMSkmJihRPSJkYmNzLWNvbnQiKSxrLmJpZmY+PTImJmsuYmlmZjw9NSYmKFE9ImNwc3RyIik7dmFyIHBlPUc/Uy5yZWFkX3NoaWZ0KEcsUSk6IiI7cmV0dXJuIFA9bGUscGV9ZnVuY3Rpb24gZ2Mo''@;'; put 'put ''Uyl7dmFyIEw9UDtQPTEyMDA7dmFyIGJlLGs9Uy5yZWFkX3NoaWZ0KDIpLEc9Uy5yZWFkX3NoaWZ0KDEpLFE9NCZHLGxlPTgmRyxtZT0xKygxJkcpLHBlPTAsTmU9e307bGUmJihwZT1TLnJlYWRfc2hpZnQoMikpLFEmJihiZT1TLnJlYWRfc2hpZnQoNCkpO3ZhciBHZT0wPT09az8iIjpTLnJl''@;'; put 'put ''YWRfc2hpZnQoaywyPT1tZT8iZGJjcy1jb250Ijoic2Jjcy1jb250Iik7aWYobGUpZm9yKE5lLl9SPVtdO3BlLS0gPjA7KU5lLl9SLnB1c2goe2lkeDpTLnJlYWRfc2hpZnQoMiksaWZudDpTLnJlYWRfc2hpZnQoMil9KTtyZXR1cm4gUSYmKFMubCs9YmUpLE5lLnQ9R2UsbGV8fChOZS5yPSI8''@;'; put 'put ''dD4iK05lLnQrIjwvdD4iKSxQPUwsTmV9ZnVuY3Rpb24gdmwoUyxMKXt2YXIgaz1TLlImJlMuUi5sZW5ndGh8fFMucjtTLnImJihTLlI9dGIoUy5yKSk7dmFyIEc9IiIsUT0wO2s/Uy5SLmZvckVhY2goZnVuY3Rpb24oeHQpe1ErKyxHKz14dC52fHwiIn0pOihHPVMudHx8IiIsUT0xKTt2YXIg''@;'; put 'put ''bGU9VnQoMysoUT4xPzI6MCkpO2xlLndyaXRlX3NoaWZ0KDIsRy5sZW5ndGgpLGxlLndyaXRlX3NoaWZ0KDEsMXwoUT4xPzg6MCkpLFE+MSYmbGUud3JpdGVfc2hpZnQoMixRKTt2YXIgbWU9VnQoMipHLmxlbmd0aCk7bWUud3JpdGVfc2hpZnQoMipHLmxlbmd0aCxHLCJ1dGYxNmxlIik7dmFy''@;'; put 'put ''IHBlPVtsZSxtZV07aWYoayl7dmFyIGJlPVZ0KDQqUy5SLmxlbmd0aCksTmU9MDtwZS5wdXNoKGJlKTtmb3IodmFyIEJlPTA7QmU8Uy5SLmxlbmd0aDsrK0JlKXt2YXIgR2U9Uy5SW0JlXTtiZS53cml0ZV9zaGlmdCgyLE5lKSxOZSs9KEdlLnZ8fCIiKS5sZW5ndGg7dmFyIGV0PUdlLnM/XzAo''@;'; put 'put ''TC5jZWxsWGZzLEwuY2VsbFN0eWxlWGZzLHt0OiJuIix2OjAsczpHZS5zfSxMKTowLGN0PUwuY2VsbFhmc1tldF0uZm9udElkO2JlLndyaXRlX3NoaWZ0KDIsY3Q8ND9jdDpjdCsxKX19cmV0dXJuIGoocGUpfWZ1bmN0aW9uIEdoKFMsTCxrKXtpZihrKXtpZihrLmJpZmY+PTImJmsuYmlmZjw9''@;'; put 'put ''NSlyZXR1cm4gUy5yZWFkX3NoaWZ0KEwsImNwc3RyIik7aWYoay5iaWZmPj0xMilyZXR1cm4gUy5yZWFkX3NoaWZ0KEwsImRiY3MtY29udCIpfXZhciBRPVMucmVhZF9zaGlmdCgxKTtyZXR1cm4gUy5yZWFkX3NoaWZ0KEwsMD09PVE/InNiY3MtY29udCI6ImRiY3MtY29udCIpfWZ1bmN0aW9u''@;'; put 'put ''IFp1KFMsTCxrKXt2YXIgRz1TLnJlYWRfc2hpZnQoayYmMj09ay5iaWZmPzE6Mik7cmV0dXJuIDA9PT1HPyhTLmwrKywiIik6R2goUyxHLGspfWZ1bmN0aW9uIFhkKFMsTCxrKXtpZihrLmJpZmY+NSlyZXR1cm4gWnUoUywwLGspO3ZhciBHPVMucmVhZF9zaGlmdCgxKTtyZXR1cm4gMD09PUc/''@;'; put 'put ''KFMubCsrLCIiKTpTLnJlYWRfc2hpZnQoRyxrLmJpZmY8PTR8fCFTLmxlbnM/ImNwc3RyIjoic2Jjcy1jb250Iil9ZnVuY3Rpb24gVjAoUyxMLGspe3JldHVybiBrfHwoaz1WdCgzKzIqUy5sZW5ndGgpKSxrLndyaXRlX3NoaWZ0KDIsUy5sZW5ndGgpLGsud3JpdGVfc2hpZnQoMSwxKSxrLndy''@;'; put 'put ''aXRlX3NoaWZ0KDMxLFMsInV0ZjE2bGUiKSxrfWZ1bmN0aW9uIHhnKFMpe3ZhciBMPVMucmVhZF9zaGlmdCg0KTtyZXR1cm4gTD4wP1MucmVhZF9zaGlmdChMLCJ1dGYxNmxlIikucmVwbGFjZShFLCIiKToiIn1mdW5jdGlvbiBKZChTLEwpe0x8fChMPVZ0KDYrMipTLmxlbmd0aCkpLEwud3Jp''@;'; put 'put ''dGVfc2hpZnQoNCwxK1MubGVuZ3RoKTtmb3IodmFyIGs9MDtrPFMubGVuZ3RoOysraylMLndyaXRlX3NoaWZ0KDIsUy5jaGFyQ29kZUF0KGspKTtyZXR1cm4gTC53cml0ZV9zaGlmdCgyLDApLEx9ZnVuY3Rpb24gZkkoUyl7dmFyIEw9VnQoNTEyKSxrPTAsRz1TLlRhcmdldDsiZmlsZTovLyI9''@;'; put 'put ''PUcuc2xpY2UoMCw3KSYmKEc9Ry5zbGljZSg3KSk7dmFyIFE9Ry5pbmRleE9mKCIjIiksbGU9UT4tMT8zMToyMztzd2l0Y2goRy5jaGFyQXQoMCkpe2Nhc2UiIyI6bGU9Mjg7YnJlYWs7Y2FzZSIuIjpsZSY9LTN9TC53cml0ZV9zaGlmdCg0LDIpLEwud3JpdGVfc2hpZnQoNCxsZSk7dmFyIG1l''@;'; put 'put ''PVs4LDY4MTU4MjcsNjYxOTIzNyw0ODQ5NzgwLDgzXTtmb3Ioaz0wO2s8bWUubGVuZ3RoOysraylMLndyaXRlX3NoaWZ0KDQsbWVba10pO2lmKDI4PT1sZSlKZChHPUcuc2xpY2UoMSksTCk7ZWxzZSBpZigyJmxlKXtmb3IobWU9ImUwIGM5IGVhIDc5IGY5IGJhIGNlIDExIDhjIDgyIDAwIGFh''@;'; put 'put ''IDAwIDRiIGE5IDBiIi5zcGxpdCgiICIpLGs9MDtrPG1lLmxlbmd0aDsrK2spTC53cml0ZV9zaGlmdCgxLHBhcnNlSW50KG1lW2tdLDE2KSk7dmFyIHBlPVE+LTE/Ry5zbGljZSgwLFEpOkc7Zm9yKEwud3JpdGVfc2hpZnQoNCwyKihwZS5sZW5ndGgrMSkpLGs9MDtrPHBlLmxlbmd0aDsrK2sp''@;'; put 'put ''TC53cml0ZV9zaGlmdCgyLHBlLmNoYXJDb2RlQXQoaykpO0wud3JpdGVfc2hpZnQoMiwwKSw4JmxlJiZKZChRPi0xP0cuc2xpY2UoUSsxKToiIixMKX1lbHNle2ZvcihtZT0iMDMgMDMgMDAgMDAgMDAgMDAgMDAgMDAgYzAgMDAgMDAgMDAgMDAgMDAgMDAgNDYiLnNwbGl0KCIgIiksaz0wO2s8''@;'; put 'put ''bWUubGVuZ3RoOysraylMLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQobWVba10sMTYpKTtmb3IodmFyIGJlPTA7Ii4uLyI9PUcuc2xpY2UoMypiZSwzKmJlKzMpfHwiLi5cXCI9PUcuc2xpY2UoMypiZSwzKmJlKzMpOykrK2JlO2ZvcihMLndyaXRlX3NoaWZ0KDIsYmUpLEwud3JpdGVfc2hpZnQo''@;'; put 'put ''NCxHLmxlbmd0aC0zKmJlKzEpLGs9MDtrPEcubGVuZ3RoLTMqYmU7KytrKUwud3JpdGVfc2hpZnQoMSwyNTUmRy5jaGFyQ29kZUF0KGsrMypiZSkpO2ZvcihMLndyaXRlX3NoaWZ0KDEsMCksTC53cml0ZV9zaGlmdCgyLDY1NTM1KSxMLndyaXRlX3NoaWZ0KDIsNTcwMDUpLGs9MDtrPDY7Kytr''@;'; put 'put ''KUwud3JpdGVfc2hpZnQoNCwwKX1yZXR1cm4gTC5zbGljZSgwLEwubCl9ZnVuY3Rpb24gRlMoUyl7cmV0dXJuW1MucmVhZF9zaGlmdCgxKSxTLnJlYWRfc2hpZnQoMSksUy5yZWFkX3NoaWZ0KDEpLFMucmVhZF9zaGlmdCgxKV19ZnVuY3Rpb24gSFMoUyxMKXt2YXIgaz1GUyhTKTtyZXR1cm4g''@;'; put 'put ''a1szXT0wLGt9ZnVuY3Rpb24gJGgoUyl7cmV0dXJue3I6Uy5yZWFkX3NoaWZ0KDIpLGM6Uy5yZWFkX3NoaWZ0KDIpLGl4ZmU6Uy5yZWFkX3NoaWZ0KDIpfX1mdW5jdGlvbiBQcChTLEwsayxHKXtyZXR1cm4gR3x8KEc9VnQoNikpLEcud3JpdGVfc2hpZnQoMixTKSxHLndyaXRlX3NoaWZ0KDIs''@;'; put 'put ''TCksRy53cml0ZV9zaGlmdCgyLGt8fDApLEd9ZnVuY3Rpb24gZ0koUyxMLGspe3ZhciBHPWsuYmlmZj44PzQ6MjtyZXR1cm5bUy5yZWFkX3NoaWZ0KEcpLFMucmVhZF9zaGlmdChHLCJpIiksUy5yZWFkX3NoaWZ0KEcsImkiKV19ZnVuY3Rpb24gTlMoUyl7cmV0dXJuW1MucmVhZF9zaGlmdCgy''@;'; put 'put ''KSxKbihTKV19ZnVuY3Rpb24gTjgoUyl7dmFyIEw9Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybntzOntjOlMucmVhZF9zaGlmdCgyKSxyOkx9LGU6e2M6Uy5yZWFkX3NoaWZ0KDIpLHI6a319fWZ1bmN0aW9uIEtoKFMsTCl7cmV0dXJuIEx8fChMPVZ0KDgpKSxMLndy''@;'; put 'put ''aXRlX3NoaWZ0KDIsUy5zLnIpLEwud3JpdGVfc2hpZnQoMixTLmUuciksTC53cml0ZV9zaGlmdCgyLFMucy5jKSxMLndyaXRlX3NoaWZ0KDIsUy5lLmMpLEx9ZnVuY3Rpb24gVjgoUyl7dmFyIEw9Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybntzOntjOlMucmVhZF9z''@;'; put 'put ''aGlmdCgxKSxyOkx9LGU6e2M6Uy5yZWFkX3NoaWZ0KDEpLHI6a319fXZhciB5ST1WODtmdW5jdGlvbiBWUyhTKXtTLmwrPTQ7dmFyIEw9Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDIpLEc9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBTLmwrPTEyLFtrLEwsR119ZnVuY3Rpb24gV28o''@;'; put 'put ''Uyl7Uy5sKz0yLFMubCs9Uy5yZWFkX3NoaWZ0KDIpfXZhciBXeT17MDpXbyw0OldvLDU6V28sNjpXbyw3OmZ1bmN0aW9uIFp5KFMpe3JldHVybiBTLmwrPTQsUy5jZj1TLnJlYWRfc2hpZnQoMikse319LDg6V28sOTpXbywxMDpXbywxMTpXbywxMjpXbywxMzpmdW5jdGlvbiBCUyhTKXt2YXIg''@;'; put 'put ''TD17fTtyZXR1cm4gUy5sKz00LFMubCs9MTYsTC5mU2hhcmVkTm90ZT1TLnJlYWRfc2hpZnQoMiksUy5sKz00LEx9LDE0OldvLDE1OldvLDE2OldvLDE3OldvLDE4OldvLDE5OldvLDIwOldvLDIxOlZTfTtmdW5jdGlvbiBxaChTLEwpe3ZhciBrPXtCSUZGVmVyOjAsZHQ6MH07c3dpdGNoKGsu''@;'; put 'put ''QklGRlZlcj1TLnJlYWRfc2hpZnQoMiksKEwtPTIpPj0yJiYoay5kdD1TLnJlYWRfc2hpZnQoMiksUy5sLT0yKSxrLkJJRkZWZXIpe2Nhc2UgMTUzNjpjYXNlIDEyODA6Y2FzZSAxMDI0OmNhc2UgNzY4OmNhc2UgNTEyOmNhc2UgMjpjYXNlIDc6YnJlYWs7ZGVmYXVsdDppZihMPjYpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJVbmV4cGVjdGVkIEJJRkYgVmVyICIray5CSUZGVmVyKX1yZXR1cm4gUy5yZWFkX3NoaWZ0KEwpLGt9ZnVuY3Rpb24gdW0oUyxMLGspe3ZhciBHPTE1MzYsUT0xNjtzd2l0Y2goay5ib29rVHlwZSl7Y2FzZSJiaWZmOCI6Y2FzZSJ4bGEiOmJyZWFrO2Nhc2UiYmlmZjUiOkc9''@;'; put 'put ''MTI4MCxRPTg7YnJlYWs7Y2FzZSJiaWZmNCI6Rz00LFE9NjticmVhaztjYXNlImJpZmYzIjpHPTMsUT02O2JyZWFrO2Nhc2UiYmlmZjIiOkc9MixRPTQ7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIEJJRkYgdmVyc2lvbiIpfXZhciBsZT1WdChRKTtyZXR1cm4g''@;'; put 'put ''bGUud3JpdGVfc2hpZnQoMixHKSxsZS53cml0ZV9zaGlmdCgyLEwpLFE+NCYmbGUud3JpdGVfc2hpZnQoMiwyOTI4MiksUT42JiZsZS53cml0ZV9zaGlmdCgyLDE5OTcpLFE+OCYmKGxlLndyaXRlX3NoaWZ0KDIsNDkxNjEpLGxlLndyaXRlX3NoaWZ0KDIsMSksbGUud3JpdGVfc2hpZnQoMiwx''@;'; put 'put ''Nzk4KSxsZS53cml0ZV9zaGlmdCgyLDApKSxsZX1mdW5jdGlvbiB2MyhTLEwpe3ZhciBrPSFMfHxMLmJpZmY+PTg/MjoxLEc9VnQoOCtrKlMubmFtZS5sZW5ndGgpO0cud3JpdGVfc2hpZnQoNCxTLnBvcyksRy53cml0ZV9zaGlmdCgxLFMuaHN8fDApLEcud3JpdGVfc2hpZnQoMSxTLmR0KSxH''@;'; put 'put ''LndyaXRlX3NoaWZ0KDEsUy5uYW1lLmxlbmd0aCksTC5iaWZmPj04JiZHLndyaXRlX3NoaWZ0KDEsMSksRy53cml0ZV9zaGlmdChrKlMubmFtZS5sZW5ndGgsUy5uYW1lLEwuYmlmZjw4PyJzYmNzIjoidXRmMTZsZSIpO3ZhciBRPUcuc2xpY2UoMCxHLmwpO3JldHVybiBRLmw9Ry5sLFF9ZnVu''@;'; put 'put ''Y3Rpb24gcXIoUyl7cmV0dXJuIFMucmVhZF9zaGlmdCg0KSxyZChTKX1mdW5jdGlvbiBPbyhTKXtyZXR1cm4gUy5yZWFkX3NoaWZ0KDQpLEF5KFMpfWZ1bmN0aW9uIHkwKFMsTCxrKXtyZXR1cm4gUy5yZWFkX3NoaWZ0KDQpLGxaKFMsMCxrKX1mdW5jdGlvbiBRZChTLEwsayl7dmFyIEc9MDtr''@;'; put 'put ''JiYyPT1rLmJpZmZ8fChHPVMucmVhZF9zaGlmdCgyKSk7dmFyIFE9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBrJiYyPT1rLmJpZmYmJihHPTEtKFE+PjE1KSxRJj0zMjc2NyksW3tVbnN5bmNlZDoxJkcsRHlaZXJvOigyJkcpPj4xLEV4QXNjOig0JkcpPj4yLEV4RHNjOig4JkcpPj4zfSxRXX1m''@;'; put 'put ''dW5jdGlvbiAkUyhTLEwsayxHKXt2YXIgUT1rJiY1PT1rLmJpZmY7R3x8KEc9VnQoUT8zK0wubGVuZ3RoOjUrMipMLmxlbmd0aCkpLEcud3JpdGVfc2hpZnQoMixTKSxHLndyaXRlX3NoaWZ0KFE/MToyLEwubGVuZ3RoKSxRfHxHLndyaXRlX3NoaWZ0KDEsMSksRy53cml0ZV9zaGlmdCgoUT8x''@;'; put 'put ''OjIpKkwubGVuZ3RoLEwsUT8ic2JjcyI6InV0ZjE2bGUiKTt2YXIgbGU9Ry5sZW5ndGg+Ry5sP0cuc2xpY2UoMCxHLmwpOkc7cmV0dXJuIG51bGw9PWxlLmwmJihsZS5sPWxlLmxlbmd0aCksbGV9dmFyIEtTPVhkO2Z1bmN0aW9uIF9JKFMsTCxrKXt2YXIgRz1TLmwrTCxRPTghPWsuYmlmZiYm''@;'; put 'put ''ay5iaWZmPzI6NCxsZT1TLnJlYWRfc2hpZnQoUSksbWU9Uy5yZWFkX3NoaWZ0KFEpLHBlPVMucmVhZF9zaGlmdCgyKSxiZT1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIFMubD1HLHtzOntyOmxlLGM6cGV9LGU6e3I6bWUsYzpiZX19fWZ1bmN0aW9uIHdJKFMsTCxrLEcpe3ZhciBsZT0ha3x8IWsu''@;'; put 'put ''YmlmZnx8OD09ay5iaWZmO0d8fChHPVZ0KGsmJjU9PWsuYmlmZj8xNjoyMCkpLEcud3JpdGVfc2hpZnQoMixsZSYmay5jZWxsU3R5bGVzJiZTLmZvbnRJZCYmKFMuZm9udElkPDQ/Uy5mb250SWQ6Uy5mb250SWQrMSl8fDApO3ZhciBtZT0xO1MucHJvdGVjdGlvbiYmKFMucHJvdGVjdGlvbi5l''@;'; put 'put ''ZGl0YWJsZSYmKG1lJj0tMiksUy5wcm90ZWN0aW9uLmhpZGRlbiYmKG1lfD0yKSksUy5zdHlsZT8oRy53cml0ZV9zaGlmdCgyLFMubnVtRm10SWR8fDApLEcud3JpdGVfc2hpZnQoMiw2NTUyNHxtZSkpOihHLndyaXRlX3NoaWZ0KDIsUy5udW1GbXRJZHx8MCksRy53cml0ZV9zaGlmdCgyLEw8''@;'; put 'put ''PDR8bWUpKTt2YXIgcGU9Uy5hbGlnbm1lbnR8fHt9O2lmKGxlKXt2YXIgYmU9MCxOZT0wO3pwLmluZGV4T2YocGUuaG9yaXpvbnRhbCk+LTEmJihiZXw9enAuaW5kZXhPZihwZS5ob3Jpem9udGFsKSkscGUud3JhcFRleHQmJihiZXw9OCksVXAuaW5kZXhPZihwZS52ZXJ0aWNhbCk+LTE/YmV8''@;'; put 'put ''PVVwLmluZGV4T2YocGUudmVydGljYWwpPDw0Om51bGw9PXBlLnZlcnRpY2FsJiYoYmV8PTMyKSxHLndyaXRlX3NoaWZ0KDEsYmUpLEcud3JpdGVfc2hpZnQoMSwwKSxwZS5zaHJpbmtUb0ZpdCYmKE5lfD0xNiksRy53cml0ZV9zaGlmdCgyLE5lKTt2YXIgQmU9bnVsbDtudWxsIT1TLmJvcmRl''@;'; put 'put ''cklkJiYoQmU9ay5Cb3JkZXJzJiZrLkJvcmRlcnNbUy5ib3JkZXJJZHx8MF18fHt9KTt2YXIgR2U9MCxldD0wLGN0PTA7QmUmJihudWxsIT1CZS5sZWZ0JiZCZS5sZWZ0LnN0eWxlJiYoR2V8PShjdD10Mi5pbmRleE9mKEJlLmxlZnQuc3R5bGUpKT4tMT9jdDowKSxudWxsIT1CZS5yaWdodCYm''@;'; put 'put ''QmUucmlnaHQuc3R5bGUmJihHZXw9KChjdD10Mi5pbmRleE9mKEJlLnJpZ2h0LnN0eWxlKSk+LTE/Y3Q6MCk8PDQpLG51bGwhPUJlLnRvcCYmQmUudG9wLnN0eWxlJiYoZXR8PShjdD10Mi5pbmRleE9mKEJlLnRvcC5zdHlsZSkpPi0xP2N0OjApLG51bGwhPUJlLmJvdHRvbSYmQmUuYm90dG9t''@;'; put 'put ''LnN0eWxlJiYoZXR8PSgoY3Q9dDIuaW5kZXhPZihCZS5ib3R0b20uc3R5bGUpKT4tMT9jdDowKTw8NCkpLEcud3JpdGVfc2hpZnQoMSxHZSksRy53cml0ZV9zaGlmdCgxLGV0KSxHLndyaXRlX3NoaWZ0KDIsMCksRy53cml0ZV9zaGlmdCgyLDApLEcud3JpdGVfc2hpZnQoMSwwKTt2YXIgeHQ9''@;'; put 'put ''MCxvdD1rLkZpbGxzJiZrLkZpbGxzW1MuZmlsbElkfHwwXXx8e307KG90LmZnQ29sb3J8fG90LmJnQ29sb3IpJiYoeHR8PTQpLEcud3JpdGVfc2hpZnQoMSx4dCk7dmFyIGJ0PTA7YnR8PUFNKG90LmZnQ29sb3IsNjUpLGJ0fD1BTShvdC5iZ0NvbG9yLDY1KTw8NyxHLndyaXRlX3NoaWZ0KDIs''@;'; put 'put ''YnQpfWVsc2UgRy53cml0ZV9zaGlmdCg0LDApLEcud3JpdGVfc2hpZnQoNCwwKSxHLndyaXRlX3NoaWZ0KDIsMCk7cmV0dXJuIEd9ZnVuY3Rpb24gRG8oUyxMLGspe3ZhciBHPSRoKFMpOygyPT1rLmJpZmZ8fDk9PUwpJiYrK1MubDt2YXIgUT1mdW5jdGlvbiBjbShTKXt2YXIgTD1TLnJlYWRf''@;'; put 'put ''c2hpZnQoMSk7cmV0dXJuIDE9PT1TLnJlYWRfc2hpZnQoMSk/TDoxPT09TH0oUyk7cmV0dXJuIEcudmFsPVEsRy50PSEwPT09UXx8ITE9PT1RPyJiIjoiZSIsR312YXIgcVM9ZnVuY3Rpb24gVXkoUyxMLGspe3JldHVybiAwPT09TD8iIjpYZChTLDAsayl9O2Z1bmN0aW9uIGVoKFMsTCxrKXt2''@;'; put 'put ''YXIgUSxHPVMucmVhZF9zaGlmdCgyKSxsZT17ZkJ1aWx0SW46MSZHLGZXYW50QWR2aXNlOkc+Pj4xJjEsZldhbnRQaWN0Okc+Pj4yJjEsZk9sZTpHPj4+MyYxLGZPbGVMaW5rOkc+Pj40JjEsY2Y6Rz4+PjUmMTAyMyxmSWNvbjpHPj4+MTUmMX07cmV0dXJuIDE0ODQ5PT09ay5zYmNjaCYmKFE9''@;'; put 'put ''ZnVuY3Rpb24gbUkoUyxMLGspe1MubCs9NDt2YXIgRz1TLmwrKEwtPTQpLFE9Y2woUywwLGspLGxlPVMucmVhZF9zaGlmdCgyKTtpZihsZSE9PShHLT1TLmwpKXRocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIEFkZGluVWRmOiBwYWRkaW5nID0gIitHKyIgIT0gIitsZSk7cmV0dXJuIFMubCs9''@;'; put 'put ''bGUsUX0oUyxMLTIsaykpLGxlLmJvZHk9UXx8Uy5yZWFkX3NoaWZ0KEwtMiksInN0cmluZyI9PXR5cGVvZiBRJiYobGUuTmFtZT1RKSxsZX12YXIgSlM9WyJfeGxubS5Db25zb2xpZGF0ZV9BcmVhIiwiX3hsbm0uQXV0b19PcGVuIiwiX3hsbm0uQXV0b19DbG9zZSIsIl94bG5tLkV4dHJhY3Qi''@;'; put 'put ''LCJfeGxubS5EYXRhYmFzZSIsIl94bG5tLkNyaXRlcmlhIiwiX3hsbm0uUHJpbnRfQXJlYSIsIl94bG5tLlByaW50X1RpdGxlcyIsIl94bG5tLlJlY29yZGVyIiwiX3hsbm0uRGF0YV9Gb3JtIiwiX3hsbm0uQXV0b19BY3RpdmF0ZSIsIl94bG5tLkF1dG9fRGVhY3RpdmF0ZSIsIl94bG5tLlNo''@;'; put 'put ''ZWV0X1RpdGxlIiwiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIl07ZnVuY3Rpb24gS3koUyxMLGspe3ZhciBHPVMubCtMLFE9Uy5yZWFkX3NoaWZ0KDIpLGxlPVMucmVhZF9zaGlmdCgxKSxtZT1TLnJlYWRfc2hpZnQoMSkscGU9Uy5yZWFkX3NoaWZ0KGsmJjI9PWsuYmlmZj8xOjIpLGJlPTA7KCFr''@;'; put 'put ''fHxrLmJpZmY+PTUpJiYoNSE9ay5iaWZmJiYoUy5sKz0yKSxiZT1TLnJlYWRfc2hpZnQoMiksNT09ay5iaWZmJiYoUy5sKz0yKSxTLmwrPTQpO3ZhciBOZT1HaChTLG1lLGspOzMyJlEmJihOZT1KU1tOZS5jaGFyQ29kZUF0KDApXSk7dmFyIEJlPUctUy5sO2smJjI9PWsuYmlmZiYmLS1CZTt2''@;'; put 'put ''YXIgR2U9RyE9Uy5sJiYwIT09cGUmJkJlPjA/ZnVuY3Rpb24gZUwoUyxMLGssRyl7dmFyIG1lLFE9Uy5sK0wsbGU9QW0oUyxHLGspO3JldHVybiBRIT09Uy5sJiYobWU9ZGYoUyxRLVMubCxsZSxrKSksW2xlLG1lXX0oUyxCZSxrLHBlKTpbXTtyZXR1cm57Y2hLZXk6bGUsTmFtZTpOZSxpdGFi''@;'; put 'put ''OmJlLHJnY2U6R2V9fWZ1bmN0aW9uIFFTKFMsTCxrKXtpZihrLmJpZmY8OClyZXR1cm4gZnVuY3Rpb24gdW9lKFMsTCxrKXszPT1TW1MubCsxXSYmU1tTLmxdKys7dmFyIEc9Y2woUywwLGspO3JldHVybiAzPT1HLmNoYXJDb2RlQXQoMCk/Ry5zbGljZSgxKTpHfShTLDAsayk7Zm9yKHZhciBH''@;'; put 'put ''PVtdLFE9Uy5sK0wsbGU9Uy5yZWFkX3NoaWZ0KGsuYmlmZj44PzQ6Mik7MCE9bGUtLTspRy5wdXNoKGdJKFMsMCxrKSk7aWYoUy5sIT1RKXRocm93IG5ldyBFcnJvcigiQmFkIEV4dGVyblNoZWV0OiAiK1MubCsiICE9ICIrUSk7cmV0dXJuIEd9ZnVuY3Rpb24gZU0oUyxMLGspe3ZhciBHPXlJ''@;'; put 'put ''KFMsNik7c3dpdGNoKGsuYmlmZil7Y2FzZSAyOlMubCsrLEwtPTc7YnJlYWs7Y2FzZSAzOmNhc2UgNDpTLmwrPTIsTC09ODticmVhaztkZWZhdWx0OlMubCs9NixMLT0xMn1yZXR1cm5bRyxRUihTLEwsayldfXZhciBNST1bXTtmdW5jdGlvbiB0TShTKXt2YXIgTD1WdCgyNCksaz1BbyhTWzBd''@;'; put 'put ''KTtMLndyaXRlX3NoaWZ0KDIsay5yKSxMLndyaXRlX3NoaWZ0KDIsay5yKSxMLndyaXRlX3NoaWZ0KDIsay5jKSxMLndyaXRlX3NoaWZ0KDIsay5jKTtmb3IodmFyIEc9ImQwIGM5IGVhIDc5IGY5IGJhIGNlIDExIDhjIDgyIDAwIGFhIDAwIDRiIGE5IDBiIi5zcGxpdCgiICIpLFE9MDtRPDE2''@;'; put 'put ''OysrUSlMLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoR1tRXSwxNikpO3JldHVybiBqKFtMLGZJKFNbMV0pXSl9ZnVuY3Rpb24gck0oUyl7dmFyIEw9U1sxXS5Ub29sdGlwLGs9VnQoMTArMiooTC5sZW5ndGgrMSkpO2sud3JpdGVfc2hpZnQoMiwyMDQ4KTt2YXIgRz1BbyhTWzBdKTtrLndyaXRl''@;'; put 'put ''X3NoaWZ0KDIsRy5yKSxrLndyaXRlX3NoaWZ0KDIsRy5yKSxrLndyaXRlX3NoaWZ0KDIsRy5jKSxrLndyaXRlX3NoaWZ0KDIsRy5jKTtmb3IodmFyIFE9MDtRPEwubGVuZ3RoOysrUSlrLndyaXRlX3NoaWZ0KDIsTC5jaGFyQ29kZUF0KFEpKTtyZXR1cm4gay53cml0ZV9zaGlmdCgyLDApLGt9''@;'; put 'put ''ZnVuY3Rpb24gYU0oUyxMLGspe2lmKCFrLmNlbGxTdHlsZXMpcmV0dXJuIHBuKFMsTCk7dmFyIEc9ayYmay5iaWZmPj0xMj80OjIsUT1TLnJlYWRfc2hpZnQoRyksbGU9Uy5yZWFkX3NoaWZ0KEcpLG1lPVMucmVhZF9zaGlmdChHKSxwZT1TLnJlYWRfc2hpZnQoRyksYmU9Uy5yZWFkX3NoaWZ0''@;'; put 'put ''KDIpOzI9PUcmJihTLmwrPTIpO3ZhciBOZT17czpRLGU6bGUsdzptZSxpeGZlOnBlLGZsYWdzOmJlfTtyZXR1cm4oay5iaWZmPj01fHwhay5iaWZmKSYmKE5lLmxldmVsPWJlPj44JjcpLE5lfU1JWzhdPWZ1bmN0aW9uKFMsTCl7dmFyIGs9Uy5sK0w7Uy5sKz0xMDt2YXIgRz1TLnJlYWRfc2hp''@;'; put 'put ''ZnQoMik7Uy5sKz00LFMubCs9MixTLmwrPTIsUy5sKz0yLFMubCs9NDt2YXIgUT1TLnJlYWRfc2hpZnQoMSk7cmV0dXJuIFMubCs9USxTLmw9ayx7Zm10Okd9fTt2YXIgRGw9JGgsWXo9bGQsR3o9WnU7dmFyIGhtPWZ1bmN0aW9uKCl7dmFyIFM9ezE6NDM3LDI6ODUwLDM6MTI1Miw0OjFlNCwx''@;'; put 'put ''MDA6ODUyLDEwMTo4NjYsMTAyOjg2NSwxMDM6ODYxLDEwNDo4OTUsMTA1OjYyMCwxMDY6NzM3LDEwNzo4NTcsMTIwOjk1MCwxMjE6OTQ5LDEyMjo5MzYsMTIzOjkzMiwxMjQ6ODc0LDEyNToxMjU1LDEyNjoxMjU2LDE1MDoxMDAwNywxNTE6MTAwMjksMTUyOjEwMDA2LDIwMDoxMjUwLDIwMTox''@;'; put 'put ''MjUxLDIwMjoxMjU0LDIwMzoxMjUzLDA6MjAxMjcsODo4NjUsOTo0MzcsMTA6ODUwLDExOjQzNywxMzo0MzcsMTQ6ODUwLDE1OjQzNywxNjo4NTAsMTc6NDM3LDE4Ojg1MCwxOTo5MzIsMjA6ODUwLDIxOjQzNywyMjo4NTAsMjM6ODY1LDI0OjQzNywyNTo0MzcsMjY6ODUwLDI3OjQzNywyODo4''@;'; put 'put ''NjMsMjk6ODUwLDMxOjg1MiwzNDo4NTIsMzU6ODUyLDM2Ojg2MCwzNzo4NTAsMzg6ODY2LDU1Ojg1MCw2NDo4NTIsNzc6OTM2LDc4Ojk0OSw3OTo5NTAsODA6ODc0LDg3OjEyNTIsODg6MTI1Miw4OToxMjUyLDEwODo4NjMsMTM0OjczNywxMzU6ODUyLDEzNjo4NTcsMjA0OjEyNTcsMjU1OjE2''@;'; put 'put ''OTY5fSxMPVZlKHsxOjQzNywyOjg1MCwzOjEyNTIsNDoxZTQsMTAwOjg1MiwxMDE6ODY2LDEwMjo4NjUsMTAzOjg2MSwxMDQ6ODk1LDEwNTo2MjAsMTA2OjczNywxMDc6ODU3LDEyMDo5NTAsMTIxOjk0OSwxMjI6OTM2LDEyMzo5MzIsMTI0Ojg3NCwxMjU6MTI1NSwxMjY6MTI1NiwxNTA6MTAw''@;'; put 'put ''MDcsMTUxOjEwMDI5LDE1MjoxMDAwNiwyMDA6MTI1MCwyMDE6MTI1MSwyMDI6MTI1NCwyMDM6MTI1MywwOjIwMTI3fSk7ZnVuY3Rpb24gUShiZSxOZSl7dmFyIEJlPU5lfHx7fTtyZXR1cm4gQmUuZGF0ZU5GfHwoQmUuZGF0ZU5GPSJ5eXl5bW1kZCIpLGgwKGZ1bmN0aW9uIEcoYmUsTmUpe3Zh''@;'; put 'put ''ciBCZT1bXSxHZT1CKDEpO3N3aXRjaChOZS50eXBlKXtjYXNlImJhc2U2NCI6R2U9eShfZS5kZWNvZGUoYmUpKTticmVhaztjYXNlImJpbmFyeSI6R2U9eShiZSk7YnJlYWs7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOkdlPWJlfWp0KEdlLDApO3ZhciBldD1HZS5yZWFkX3NoaWZ0KDEpLGN0''@;'; put 'put ''PSEhKDEzNiZldCkseHQ9ITEsb3Q9ITE7c3dpdGNoKGV0KXtjYXNlIDI6Y2FzZSAzOmNhc2UgMTMxOmNhc2UgMTM5OmNhc2UgMjQ1OmJyZWFrO2Nhc2UgNDg6Y2FzZSA0OTp4dD0hMCxjdD0hMDticmVhaztjYXNlIDE0MDpvdD0hMDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiREJG''@;'; put 'put ''IFVuc3VwcG9ydGVkIFZlcnNpb246ICIrZXQudG9TdHJpbmcoMTYpKX12YXIgYnQ9MCxGdD01MjE7Mj09ZXQmJihidD1HZS5yZWFkX3NoaWZ0KDIpKSxHZS5sKz0zLDIhPWV0JiYoYnQ9R2UucmVhZF9zaGlmdCg0KSksYnQ+MTA0ODU3NiYmKGJ0PTFlNiksMiE9ZXQmJihGdD1HZS5yZWFkX3No''@;'; put 'put ''aWZ0KDIpKTt2YXIga3Q9R2UucmVhZF9zaGlmdCgyKSxMdD1OZS5jb2RlcGFnZXx8MTI1MjsyIT1ldCYmKEdlLmwrPTE2LEdlLnJlYWRfc2hpZnQoMSksMCE9PUdlW0dlLmxdJiYoTHQ9U1tHZVtHZS5sXV0pLEdlLmwrPTEsR2UubCs9Miksb3QmJihHZS5sKz0zNik7Zm9yKHZhciBKdD1bXSxU''@;'; put 'put ''bj17fSxzcj1NYXRoLm1pbihHZS5sZW5ndGgsMj09ZXQ/NTIxOkZ0LTEwLSh4dD8yNjQ6MCkpLENuPW90PzMyOjExO0dlLmw8c3ImJjEzIT1HZVtHZS5sXTspc3dpdGNoKFRuPXt9LFRuLm5hbWU9Y3B0YWJsZS51dGlscy5kZWNvZGUoTHQsR2Uuc2xpY2UoR2UubCxHZS5sK0NuKSkucmVwbGFj''@;'; put 'put ''ZSgvW1x1MDAwMFxyXG5dLiokL2csIiIpLEdlLmwrPUNuLFRuLnR5cGU9U3RyaW5nLmZyb21DaGFyQ29kZShHZS5yZWFkX3NoaWZ0KDEpKSwyIT1ldCYmIW90JiYoVG4ub2Zmc2V0PUdlLnJlYWRfc2hpZnQoNCkpLFRuLmxlbj1HZS5yZWFkX3NoaWZ0KDEpLDI9PWV0JiYoVG4ub2Zmc2V0PUdl''@;'; put 'put ''LnJlYWRfc2hpZnQoMikpLFRuLmRlYz1HZS5yZWFkX3NoaWZ0KDEpLFRuLm5hbWUubGVuZ3RoJiZKdC5wdXNoKFRuKSwyIT1ldCYmKEdlLmwrPW90PzEzOjE0KSxUbi50eXBlKXtjYXNlIkIiOigheHR8fDghPVRuLmxlbikmJk5lLldURiYmY29uc29sZS5sb2coIlNraXBwaW5nICIrVG4ubmFt''@;'; put 'put ''ZSsiOiIrVG4udHlwZSk7YnJlYWs7Y2FzZSJHIjpjYXNlIlAiOk5lLldURiYmY29uc29sZS5sb2coIlNraXBwaW5nICIrVG4ubmFtZSsiOiIrVG4udHlwZSk7YnJlYWs7Y2FzZSIrIjpjYXNlIjAiOmNhc2UiQCI6Y2FzZSJDIjpjYXNlIkQiOmNhc2UiRiI6Y2FzZSJJIjpjYXNlIkwiOmNhc2Ui''@;'; put 'put ''TSI6Y2FzZSJOIjpjYXNlIk8iOmNhc2UiVCI6Y2FzZSJZIjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBGaWVsZCBUeXBlOiAiK1RuLnR5cGUpfWlmKDEzIT09R2VbR2UubF0mJihHZS5sPUZ0LTEpLDEzIT09R2UucmVhZF9zaGlmdCgxKSl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''IkRCRiBUZXJtaW5hdG9yIG5vdCBmb3VuZCAiK0dlLmwrIiAiK0dlW0dlLmxdKTtHZS5sPUZ0O3ZhciBscj0wLHFuPTA7Zm9yKEJlWzBdPVtdLHFuPTA7cW4hPUp0Lmxlbmd0aDsrK3FuKUJlWzBdW3FuXT1KdFtxbl0ubmFtZTtmb3IoO2J0LS0gPjA7KWlmKDQyIT09R2VbR2UubF0pZm9yKCsr''@;'; put 'put ''R2UubCxCZVsrK2xyXT1bXSxxbj0wLHFuPTA7cW4hPUp0Lmxlbmd0aDsrK3FuKXt2YXIgV249R2Uuc2xpY2UoR2UubCxHZS5sK0p0W3FuXS5sZW4pO0dlLmwrPUp0W3FuXS5sZW4sanQoV24sMCk7dmFyIHByPWNwdGFibGUudXRpbHMuZGVjb2RlKEx0LFduKTtzd2l0Y2goSnRbcW5dLnR5cGUp''@;'; put 'put ''e2Nhc2UiQyI6cHIudHJpbSgpLmxlbmd0aCYmKEJlW2xyXVtxbl09cHIucmVwbGFjZSgvXHMrJC8sIiIpKTticmVhaztjYXNlIkQiOkJlW2xyXVtxbl09OD09PXByLmxlbmd0aD9uZXcgRGF0ZSgrcHIuc2xpY2UoMCw0KSwrcHIuc2xpY2UoNCw2KS0xLCtwci5zbGljZSg2LDgpKTpwcjticmVh''@;'; put 'put ''aztjYXNlIkYiOkJlW2xyXVtxbl09cGFyc2VGbG9hdChwci50cmltKCkpO2JyZWFrO2Nhc2UiKyI6Y2FzZSJJIjpCZVtscl1bcW5dPW90PzIxNDc0ODM2NDheV24ucmVhZF9zaGlmdCgtNCwiaSIpOlduLnJlYWRfc2hpZnQoNCwiaSIpO2JyZWFrO2Nhc2UiTCI6c3dpdGNoKHByLnRyaW0oKS50''@;'; put 'put ''b1VwcGVyQ2FzZSgpKXtjYXNlIlkiOmNhc2UiVCI6QmVbbHJdW3FuXT0hMDticmVhaztjYXNlIk4iOmNhc2UiRiI6QmVbbHJdW3FuXT0hMTticmVhaztjYXNlIiI6Y2FzZSI/IjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiREJGIFVucmVjb2duaXplZCBMOnwiK3ByKyJ8Iil9YnJl''@;'; put 'put ''YWs7Y2FzZSJNIjppZighY3QpdGhyb3cgbmV3IEVycm9yKCJEQkYgVW5leHBlY3RlZCBNRU1PIGZvciB0eXBlICIrZXQudG9TdHJpbmcoMTYpKTtCZVtscl1bcW5dPSIjI01FTU8jIyIrKG90P3BhcnNlSW50KHByLnRyaW0oKSwxMCk6V24ucmVhZF9zaGlmdCg0KSk7YnJlYWs7Y2FzZSJOIjoo''@;'; put 'put ''cHI9cHIucmVwbGFjZSgvXHUwMDAwL2csIiIpLnRyaW0oKSkmJiIuIiE9cHImJihCZVtscl1bcW5dPStwcnx8MCk7YnJlYWs7Y2FzZSJAIjpCZVtscl1bcW5dPW5ldyBEYXRlKFduLnJlYWRfc2hpZnQoLTgsImYiKS02MjEzNTY4MzJlNSk7YnJlYWs7Y2FzZSJUIjpCZVtscl1bcW5dPW5ldyBE''@;'; put 'put ''YXRlKDg2NGU1KihXbi5yZWFkX3NoaWZ0KDQpLTI0NDA1ODgpK1duLnJlYWRfc2hpZnQoNCkpO2JyZWFrO2Nhc2UiWSI6QmVbbHJdW3FuXT1Xbi5yZWFkX3NoaWZ0KDQsImkiKS8xZTQ7YnJlYWs7Y2FzZSJPIjpCZVtscl1bcW5dPS1Xbi5yZWFkX3NoaWZ0KC04LCJmIik7YnJlYWs7Y2FzZSJC''@;'; put 'put ''IjppZih4dCYmOD09SnRbcW5dLmxlbil7QmVbbHJdW3FuXT1Xbi5yZWFkX3NoaWZ0KDgsImYiKTticmVha31jYXNlIkciOmNhc2UiUCI6V24ubCs9SnRbcW5dLmxlbjticmVhaztjYXNlIjAiOmlmKCJfTnVsbEZsYWdzIj09PUp0W3FuXS5uYW1lKWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJEQkYgVW5zdXBwb3J0ZWQgZGF0YSB0eXBlICIrSnRbcW5dLnR5cGUpfX1lbHNlIEdlLmwrPWt0O2lmKDIhPWV0JiZHZS5sPEdlLmxlbmd0aCYmMjYhPUdlW0dlLmwrK10pdGhyb3cgbmV3IEVycm9yKCJEQkYgRU9GIE1hcmtlciBtaXNzaW5nICIrKEdlLmwtMSkrIiBvZiAiK0dlLmxl''@;'; put 'put ''bmd0aCsiICIrR2VbR2UubC0xXS50b1N0cmluZygxNikpO3JldHVybiBOZSYmTmUuc2hlZXRSb3dzJiYoQmU9QmUuc2xpY2UoMCxOZS5zaGVldFJvd3MpKSxCZX0oYmUsQmUpLEJlKX12YXIgbWU9e0I6OCxDOjI1MCxMOjEsRDo4LCI/IjowLCIiOjB9O3JldHVybnt2ZXJzaW9uczpbMiwzLDQ4''@;'; put 'put ''LDQ5LDEzMSwxMzksMTQwLDI0NV0sdG9fd29ya2Jvb2s6ZnVuY3Rpb24gbGUoYmUsTmUpe3RyeXtyZXR1cm4gYjEoUShiZSxOZSksTmUpfWNhdGNoKEJlKXtpZihOZSYmTmUuV1RGKXRocm93IEJlfXJldHVybntTaGVldE5hbWVzOltdLFNoZWV0czp7fX19LHRvX3NoZWV0OlEsZnJvbV9zaGVl''@;'; put 'put ''dDpmdW5jdGlvbiBwZShiZSxOZSl7dmFyIEJlPU5lfHx7fTtpZigrQmUuY29kZXBhZ2U+PTAmJlooK0JlLmNvZGVwYWdlKSwic3RyaW5nIj09QmUudHlwZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCB3cml0ZSBEQkYgdG8gSlMgc3RyaW5nIik7dmFyIEdlPW1yKCksZXQ9ejcoYmUse2hlYWRl''@;'; put 'put ''cjoxLHJhdzohMCxjZWxsRGF0ZXM6ITB9KSxjdD1ldFswXSx4dD1ldC5zbGljZSgxKSxvdD0wLGJ0PTAsRnQ9MCxrdD0xO2ZvcihvdD0wO290PGN0Lmxlbmd0aDsrK290KWlmKG51bGwhPW90KXtpZigrK0Z0LCJudW1iZXIiPT10eXBlb2YgY3Rbb3RdJiYoY3Rbb3RdPWN0W290XS50b1N0cmlu''@;'; put 'put ''ZygxMCkpLCJzdHJpbmciIT10eXBlb2YgY3Rbb3RdKXRocm93IG5ldyBFcnJvcigiREJGIEludmFsaWQgY29sdW1uIG5hbWUgIitjdFtvdF0rIiB8Iit0eXBlb2YgY3Rbb3RdKyJ8Iik7aWYoY3QuaW5kZXhPZihjdFtvdF0pIT09b3QpZm9yKGJ0PTA7YnQ8MTAyNDsrK2J0KWlmKC0xPT1jdC5p''@;'; put 'put ''bmRleE9mKGN0W290XSsiXyIrYnQpKXtjdFtvdF0rPSJfIitidDticmVha319dmFyIEx0PXRvKGJlWyIhcmVmIl0pLEp0PVtdO2ZvcihvdD0wO290PD1MdC5lLmMtTHQucy5jOysrb3Qpe3ZhciBUbj1bXTtmb3IoYnQ9MDtidDx4dC5sZW5ndGg7KytidCludWxsIT14dFtidF1bb3RdJiZUbi5w''@;'; put 'put ''dXNoKHh0W2J0XVtvdF0pO2lmKDAhPVRuLmxlbmd0aCYmbnVsbCE9Y3Rbb3RdKXt2YXIgc3I9IiIsQ249IiI7Zm9yKGJ0PTA7YnQ8VG4ubGVuZ3RoOysrYnQpe3N3aXRjaCh0eXBlb2YgVG5bYnRdKXtjYXNlIm51bWJlciI6Q249IkIiO2JyZWFrO2Nhc2Uic3RyaW5nIjpkZWZhdWx0OkNuPSJD''@;'; put 'put ''IjticmVhaztjYXNlImJvb2xlYW4iOkNuPSJMIjticmVhaztjYXNlIm9iamVjdCI6Q249VG5bYnRdaW5zdGFuY2VvZiBEYXRlPyJEIjoiQyJ9aWYoIkMiPT0oc3I9c3ImJnNyIT1Dbj8iQyI6Q24pKWJyZWFrfWt0Kz1tZVtzcl18fDAsSnRbb3RdPXNyfWVsc2UgSnRbb3RdPSI/In12YXIgbHI9''@;'; put 'put ''R2UubmV4dCgzMik7Zm9yKGxyLndyaXRlX3NoaWZ0KDQsMzE4OTAyNTc2KSxsci53cml0ZV9zaGlmdCg0LHh0Lmxlbmd0aCksbHIud3JpdGVfc2hpZnQoMiwyOTYrMzIqRnQpLGxyLndyaXRlX3NoaWZ0KDIsa3QpLG90PTA7b3Q8NDsrK290KWxyLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKGxyLndy''@;'; put 'put ''aXRlX3NoaWZ0KDQsKCtMW0ZdfHwzKTw8OCksb3Q9MCxidD0wO290PGN0Lmxlbmd0aDsrK290KWlmKG51bGwhPWN0W290XSl7dmFyIHFuPUdlLm5leHQoMzIpLFduPShjdFtvdF0uc2xpY2UoLTEwKSsiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIpLnNsaWNlKDAsMTEpO3FuLndyaXRlX3NoaWZ0''@;'; put 'put ''KDEsV24sInNiY3MiKSxxbi53cml0ZV9zaGlmdCgxLCI/Ij09SnRbb3RdPyJDIjpKdFtvdF0sInNiY3MiKSxxbi53cml0ZV9zaGlmdCg0LGJ0KSxxbi53cml0ZV9zaGlmdCgxLG1lW0p0W290XV18fDApLHFuLndyaXRlX3NoaWZ0KDEsMCkscW4ud3JpdGVfc2hpZnQoMSwyKSxxbi53cml0ZV9z''@;'; put 'put ''aGlmdCg0LDApLHFuLndyaXRlX3NoaWZ0KDEsMCkscW4ud3JpdGVfc2hpZnQoNCwwKSxxbi53cml0ZV9zaGlmdCg0LDApLGJ0Kz1tZVtKdFtvdF1dfHwwfXZhciBwcj1HZS5uZXh0KDI2NCk7Zm9yKHByLndyaXRlX3NoaWZ0KDQsMTMpLG90PTA7b3Q8NjU7KytvdClwci53cml0ZV9zaGlmdCg0''@;'; put 'put ''LDApO2ZvcihvdD0wO290PHh0Lmxlbmd0aDsrK290KXt2YXIgeXI9R2UubmV4dChrdCk7Zm9yKHlyLndyaXRlX3NoaWZ0KDEsMCksYnQ9MDtidDxjdC5sZW5ndGg7KytidClpZihudWxsIT1jdFtidF0pc3dpdGNoKEp0W2J0XSl7Y2FzZSJMIjp5ci53cml0ZV9zaGlmdCgxLG51bGw9PXh0W290''@;'; put 'put ''XVtidF0/NjM6eHRbb3RdW2J0XT84NDo3MCk7YnJlYWs7Y2FzZSJCIjp5ci53cml0ZV9zaGlmdCg4LHh0W290XVtidF18fDAsImYiKTticmVhaztjYXNlIkQiOnh0W290XVtidF0/KHlyLndyaXRlX3NoaWZ0KDQsKCIwMDAwIit4dFtvdF1bYnRdLmdldEZ1bGxZZWFyKCkpLnNsaWNlKC00KSwi''@;'; put 'put ''c2JjcyIpLHlyLndyaXRlX3NoaWZ0KDIsKCIwMCIrKHh0W290XVtidF0uZ2V0TW9udGgoKSsxKSkuc2xpY2UoLTIpLCJzYmNzIikseXIud3JpdGVfc2hpZnQoMiwoIjAwIit4dFtvdF1bYnRdLmdldERhdGUoKSkuc2xpY2UoLTIpLCJzYmNzIikpOnlyLndyaXRlX3NoaWZ0KDgsIjAwMDAwMDAw''@;'; put 'put ''Iiwic2JjcyIpO2JyZWFrO2Nhc2UiQyI6dmFyIHRyPVN0cmluZyh4dFtvdF1bYnRdfHwiIik7Zm9yKHlyLndyaXRlX3NoaWZ0KDEsdHIsInNiY3MiKSxGdD0wO0Z0PDI1MC10ci5sZW5ndGg7KytGdCl5ci53cml0ZV9zaGlmdCgxLDMyKX19cmV0dXJuIEdlLm5leHQoMSkud3JpdGVfc2hpZnQo''@;'; put 'put ''MSwyNiksR2UuZW5kKCl9fX0oKSxlYj1mdW5jdGlvbigpe3ZhciBTPXtBQToiXHhjMCIsQkE6Ilx4YzEiLENBOiJceGMyIixEQToxOTUsSEE6Ilx4YzQiLEpBOjE5NyxBRToiXHhjOCIsQkU6Ilx4YzkiLENFOiJceGNhIixIRToiXHhjYiIsQUk6Ilx4Y2MiLEJJOiJceGNkIixDSToiXHhjZSIs''@;'; put 'put ''SEk6Ilx4Y2YiLEFPOiJceGQyIixCTzoiXHhkMyIsQ086Ilx4ZDQiLERPOjIxMyxITzoiXHhkNiIsQVU6Ilx4ZDkiLEJVOiJceGRhIixDVToiXHhkYiIsSFU6Ilx4ZGMiLEFhOiJceGUwIixCYToiXHhlMSIsQ2E6Ilx4ZTIiLERhOjIyNyxIYToiXHhlNCIsSmE6MjI5LEFlOiJceGU4IixCZToi''@;'; put 'put ''XHhlOSIsQ2U6Ilx4ZWEiLEhlOiJceGViIixBaToiXHhlYyIsQmk6Ilx4ZWQiLENpOiJceGVlIixIaToiXHhlZiIsQW86Ilx4ZjIiLEJvOiJceGYzIixDbzoiXHhmNCIsRG86MjQ1LEhvOiJceGY2IixBdToiXHhmOSIsQnU6Ilx4ZmEiLEN1OiJceGZiIixIdToiXHhmYyIsS0M6Ilx4YzciLEtj''@;'; put 'put ''OiJceGU3IixxOiJceGU2Iix6OiJcdTAxNTMiLGE6Ilx4YzYiLGo6Ilx1MDE1MiIsRE46MjA5LERuOjI0MSxIeToyNTUsUzoxNjksYzoxNzAsUjoxNzQsIkIgIjoxODAsMDoxNzYsMToxNzcsMjoxNzgsMzoxNzksNToxODEsNjoxODIsNzoxODMsUToxODUsazoxODYsYjoyMDgsaToyMTYsbDoy''@;'; put 'put ''MjIsczoyNDAseToyNDgsIiEiOjE2MSwnIic6MTYyLCIjIjoxNjMsIigiOjE2NCwiJSI6MTY1LCInIjoxNjcsIkggIjoxNjgsIisiOjE3MSwiOyI6MTg3LCI8IjoxODgsIj0iOjE4OSwiPiI6MTkwLCI/IjoxOTEsInsiOjIyM30sTD1uZXcgUmVnRXhwKCJceDFiTigiK0xlKFMpLmpvaW4oInwi''@;'; put 'put ''KS5yZXBsYWNlKC9cfFx8XHwvLCJ8XFx8fCIpLnJlcGxhY2UoLyhbPygpK10pL2csIlxcJDEiKSsifFxcfCkiLCJnbSIpLGs9ZnVuY3Rpb24oZXQsY3Qpe3ZhciB4dD1TW2N0XTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHh0P2llKHh0KTp4dH0sRz1mdW5jdGlvbihldCxjdCx4dCl7dmFyIG90''@;'; put 'put ''PWN0LmNoYXJDb2RlQXQoMCktMzI8PDR8eHQuY2hhckNvZGVBdCgwKS00ODtyZXR1cm4gNTk9PW90P2V0OmllKG90KX07ZnVuY3Rpb24gbGUoZXQsY3Qpe3ZhciBwcix4dD1ldC5zcGxpdCgvW1xuXHJdKy8pLG90PS0xLGJ0PS0xLEZ0PTAsa3Q9MCxMdD1bXSxKdD1bXSxUbj1udWxsLHNyPXt9''@;'; put 'put ''LENuPVtdLGxyPVtdLHFuPVtdLFduPTA7Zm9yKCtjdC5jb2RlcGFnZT49MCYmWigrY3QuY29kZXBhZ2UpO0Z0IT09eHQubGVuZ3RoOysrRnQpe1duPTA7dmFyIEZpLHlyPXh0W0Z0XS50cmltKCkucmVwbGFjZSgvXHgxQihbXHgyMC1ceDJGXSkoW1x4MzAtXHgzRl0pL2csRykucmVwbGFjZShM''@;'; put 'put ''LGspLHRyPXlyLnJlcGxhY2UoLzs7L2csIlwwIikuc3BsaXQoIjsiKS5tYXAoZnVuY3Rpb24oWmkpe3JldHVybiBaaS5yZXBsYWNlKC9cdTAwMDAvZywiOyIpfSk7aWYoeXIubGVuZ3RoPjApc3dpdGNoKHRyWzBdKXtjYXNlIklEIjpjYXNlIkUiOmNhc2UiQiI6Y2FzZSJPIjpjYXNlIlciOmJy''@;'; put 'put ''ZWFrO2Nhc2UiUCI6IlAiPT10clsxXS5jaGFyQXQoMCkmJkp0LnB1c2goeXIuc2xpY2UoMykucmVwbGFjZSgvOzsvZywiOyIpKTticmVhaztjYXNlIkMiOnZhciByYT0hMSxvYT0hMSxraT0hMSxrcj0hMSxZbj0tMSxWcj0tMTtmb3Ioa3Q9MTtrdDx0ci5sZW5ndGg7KytrdClzd2l0Y2godHJb''@;'; put 'put ''a3RdLmNoYXJBdCgwKSl7Y2FzZSJBIjpjYXNlIkciOmJyZWFrO2Nhc2UiWCI6YnQ9cGFyc2VJbnQodHJba3RdLnNsaWNlKDEpKS0xLG9hPSEwO2JyZWFrO2Nhc2UiWSI6Zm9yKG90PXBhcnNlSW50KHRyW2t0XS5zbGljZSgxKSktMSxvYXx8KGJ0PTApLHByPUx0Lmxlbmd0aDtwcjw9b3Q7Kytw''@;'; put 'put ''cilMdFtwcl09W107YnJlYWs7Y2FzZSJLIjonIic9PT0oRmk9dHJba3RdLnNsaWNlKDEpKS5jaGFyQXQoMCk/Rmk9Rmkuc2xpY2UoMSxGaS5sZW5ndGgtMSk6IlRSVUUiPT09Rmk/Rmk9ITA6IkZBTFNFIj09PUZpP0ZpPSExOmlzTmFOKGFuKEZpKSk/aXNOYU4obG4oRmkpLmdldERhdGUoKSl8''@;'; put 'put ''fChGaT1JZShGaSkpOihGaT1hbihGaSksbnVsbCE9PVRuJiZBLmlzX2RhdGUoVG4pJiYoRmk9c24oRmkpKSksdHlwZW9mIGNwdGFibGU8InUiJiYic3RyaW5nIj09dHlwZW9mIEZpJiYic3RyaW5nIiE9KGN0fHx7fSkudHlwZSYmKGN0fHx7fSkuY29kZXBhZ2UmJihGaT1jcHRhYmxlLnV0aWxz''@;'; put 'put ''LmRlY29kZShjdC5jb2RlcGFnZSxGaSkpLHJhPSEwO2JyZWFrO2Nhc2UiRSI6a3I9ITA7dmFyIHdyPWpzKHRyW2t0XS5zbGljZSgxKSx7cjpvdCxjOmJ0fSk7THRbb3RdW2J0XT1bTHRbb3RdW2J0XSx3cl07YnJlYWs7Y2FzZSJTIjpraT0hMCxMdFtvdF1bYnRdPVtMdFtvdF1bYnRdLCJTNVMi''@;'; put 'put ''XTticmVhaztjYXNlIlIiOlluPXBhcnNlSW50KHRyW2t0XS5zbGljZSgxKSktMTticmVhaztjYXNlIkMiOlZyPXBhcnNlSW50KHRyW2t0XS5zbGljZSgxKSktMTticmVhaztkZWZhdWx0OmlmKGN0JiZjdC5XVEYpdGhyb3cgbmV3IEVycm9yKCJTWUxLIGJhZCByZWNvcmQgIit5cil9aWYocmEm''@;'; put 'put ''JihMdFtvdF1bYnRdJiYyPT1MdFtvdF1bYnRdLmxlbmd0aD9MdFtvdF1bYnRdWzBdPUZpOkx0W290XVtidF09RmksVG49bnVsbCksa2kpe2lmKGtyKXRocm93IG5ldyBFcnJvcigiU1lMSyBzaGFyZWQgZm9ybXVsYSBjYW5ub3QgaGF2ZSBvd24gZm9ybXVsYSIpO3ZhciBWbj1Zbj4tMSYmTHRb''@;'; put 'put ''WW5dW1ZyXTtpZighVm58fCFWblsxXSl0aHJvdyBuZXcgRXJyb3IoIlNZTEsgc2hhcmVkIGZvcm11bGEgY2Fubm90IGZpbmQgYmFzZSIpO0x0W290XVtidF1bMV09dWYoVm5bMV0se3I6b3QtWW4sYzpidC1Wcn0pfWJyZWFrO2Nhc2UiRiI6dmFyIHpyPTA7Zm9yKGt0PTE7a3Q8dHIubGVuZ3Ro''@;'; put 'put ''Oysra3Qpc3dpdGNoKHRyW2t0XS5jaGFyQXQoMCkpe2Nhc2UiWCI6YnQ9cGFyc2VJbnQodHJba3RdLnNsaWNlKDEpKS0xLCsrenI7YnJlYWs7Y2FzZSJZIjpmb3Iob3Q9cGFyc2VJbnQodHJba3RdLnNsaWNlKDEpKS0xLHByPUx0Lmxlbmd0aDtwcjw9b3Q7KytwcilMdFtwcl09W107YnJlYWs7''@;'; put 'put ''Y2FzZSJNIjpXbj1wYXJzZUludCh0cltrdF0uc2xpY2UoMSkpLzIwO2JyZWFrO2Nhc2UiRiI6Y2FzZSJHIjpjYXNlIlMiOmNhc2UiRCI6Y2FzZSJOIjpicmVhaztjYXNlIlAiOlRuPUp0W3BhcnNlSW50KHRyW2t0XS5zbGljZSgxKSldO2JyZWFrO2Nhc2UiVyI6Zm9yKHFuPXRyW2t0XS5zbGlj''@;'; put 'put ''ZSgxKS5zcGxpdCgiICIpLHByPXBhcnNlSW50KHFuWzBdLDEwKTtwcjw9cGFyc2VJbnQocW5bMV0sMTApOysrcHIpV249cGFyc2VJbnQocW5bMl0sMTApLGxyW3ByLTFdPTA9PT1Xbj97aGlkZGVuOiEwfTp7d2NoOldufSxyMShscltwci0xXSk7YnJlYWs7Y2FzZSJDIjpscltidD1wYXJzZUlu''@;'; put 'put ''dCh0cltrdF0uc2xpY2UoMSkpLTFdfHwobHJbYnRdPXt9KTticmVhaztjYXNlIlIiOkNuW290PXBhcnNlSW50KHRyW2t0XS5zbGljZSgxKSktMV18fChDbltvdF09e30pLFduPjA/KENuW290XS5ocHQ9V24sQ25bb3RdLmhweD13MyhXbikpOjA9PT1XbiYmKENuW290XS5oaWRkZW49ITApO2Jy''@;'; put 'put ''ZWFrO2RlZmF1bHQ6aWYoY3QmJmN0LldURil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgYmFkIHJlY29yZCAiK3lyKX16cjwxJiYoVG49bnVsbCk7YnJlYWs7ZGVmYXVsdDppZihjdCYmY3QuV1RGKXRocm93IG5ldyBFcnJvcigiU1lMSyBiYWQgcmVjb3JkICIreXIpfX1yZXR1cm4gQ24ubGVuZ3Ro''@;'; put 'put ''PjAmJihzclsiIXJvd3MiXT1DbiksbHIubGVuZ3RoPjAmJihzclsiIWNvbHMiXT1sciksY3QmJmN0LnNoZWV0Um93cyYmKEx0PUx0LnNsaWNlKDAsY3Quc2hlZXRSb3dzKSksW0x0LHNyXX1mdW5jdGlvbiBtZShldCxjdCl7dmFyIHh0PWZ1bmN0aW9uIFEoZXQsY3Qpe3N3aXRjaChjdC50eXBl''@;'; put 'put ''KXtjYXNlImJhc2U2NCI6cmV0dXJuIGxlKF9lLmRlY29kZShldCksY3QpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gbGUoZXQsY3QpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gbGUoZXQudG9TdHJpbmcoImJpbmFyeSIpLGN0KTtjYXNlImFycmF5IjpyZXR1cm4gbGUoYXQoZXQpLGN0KX10aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrY3QudHlwZSl9KGV0LGN0KSxidD14dFsxXSxGdD1oMCh4dFswXSxjdCk7cmV0dXJuIExlKGJ0KS5mb3JFYWNoKGZ1bmN0aW9uKGt0KXtGdFtrdF09YnRba3RdfSksRnR9ZnVuY3Rpb24gYmUoZXQsY3QseHQsb3Qpe3ZhciBidD0iQztZIisoeHQr''@;'; put 'put ''MSkrIjtYIisob3QrMSkrIjtLIjtzd2l0Y2goZXQudCl7Y2FzZSJuIjpidCs9ZXQudnx8MCxldC5mJiYhZXQuRiYmKGJ0Kz0iO0UiKyRwKGV0LmYse3I6eHQsYzpvdH0pKTticmVhaztjYXNlImIiOmJ0Kz1ldC52PyJUUlVFIjoiRkFMU0UiO2JyZWFrO2Nhc2UiZSI6YnQrPWV0Lnd8fGV0LnY7''@;'; put 'put ''YnJlYWs7Y2FzZSJkIjpidCs9JyInKyhldC53fHxldC52KSsnIic7YnJlYWs7Y2FzZSJzIjpidCs9JyInK2V0LnYucmVwbGFjZSgvIi9nLCIiKSsnIid9cmV0dXJuIGJ0fXJldHVybiBTWyJ8Il09MjU0LHt0b193b3JrYm9vazpmdW5jdGlvbiBwZShldCxjdCl7cmV0dXJuIGIxKG1lKGV0LGN0''@;'; put 'put ''KSxjdCl9LHRvX3NoZWV0Om1lLGZyb21fc2hlZXQ6ZnVuY3Rpb24gR2UoZXQsY3Qpe3ZhciBGdCx4dD1bIklEO1BTaGVldEpTO047RSJdLG90PVtdLGJ0PXRvKGV0WyIhcmVmIl0pLGt0PUFycmF5LmlzQXJyYXkoZXQpLEx0PSJcclxuIjt4dC5wdXNoKCJQO1BHZW5lcmFsIikseHQucHVzaCgi''@;'; put 'put ''RjtQMDtERzBHODtNMjU1IiksZXRbIiFjb2xzIl0mJmZ1bmN0aW9uIE5lKGV0LGN0KXtjdC5mb3JFYWNoKGZ1bmN0aW9uKHh0LG90KXt2YXIgYnQ9IkY7VyIrKG90KzEpKyIgIisob3QrMSkrIiAiO3h0LmhpZGRlbj9idCs9IjAiOigibnVtYmVyIj09dHlwZW9mIHh0LndpZHRoJiYheHQud3B4''@;'; put 'put ''JiYoeHQud3B4PXBtKHh0LndpZHRoKSksIm51bWJlciI9PXR5cGVvZiB4dC53cHgmJiF4dC53Y2gmJih4dC53Y2g9cTgoeHQud3B4KSksIm51bWJlciI9PXR5cGVvZiB4dC53Y2gmJihidCs9TWF0aC5yb3VuZCh4dC53Y2gpKSksIiAiIT1idC5jaGFyQXQoYnQubGVuZ3RoLTEpJiZldC5wdXNo''@;'; put 'put ''KGJ0KX0pfSh4dCxldFsiIWNvbHMiXSksZXRbIiFyb3dzIl0mJmZ1bmN0aW9uIEJlKGV0LGN0KXtjdC5mb3JFYWNoKGZ1bmN0aW9uKHh0LG90KXt2YXIgYnQ9IkY7Ijt4dC5oaWRkZW4/YnQrPSJNMDsiOnh0LmhwdD9idCs9Ik0iKzIwKnh0LmhwdCsiOyI6eHQuaHB4JiYoYnQrPSJNIisyMCpW''@;'; put 'put ''cCh4dC5ocHgpKyI7IiksYnQubGVuZ3RoPjImJmV0LnB1c2goYnQrIlIiKyhvdCsxKSl9KX0oeHQsZXRbIiFyb3dzIl0pLHh0LnB1c2goIkI7WSIrKGJ0LmUuci1idC5zLnIrMSkrIjtYIisoYnQuZS5jLWJ0LnMuYysxKSsiO0QiK1tidC5zLmMsYnQucy5yLGJ0LmUuYyxidC5lLnJdLmpvaW4o''@;'; put 'put ''IiAiKSk7Zm9yKHZhciBKdD1idC5zLnI7SnQ8PWJ0LmUucjsrK0p0KWZvcih2YXIgVG49YnQucy5jO1RuPD1idC5lLmM7KytUbil7dmFyIHNyPUdpKHtyOkp0LGM6VG59KTsoRnQ9a3Q/KGV0W0p0XXx8W10pW1RuXTpldFtzcl0pJiYobnVsbCE9RnQudnx8RnQuZiYmIUZ0LkYpJiZvdC5wdXNo''@;'; put 'put ''KGJlKEZ0LDAsSnQsVG4pKX1yZXR1cm4geHQuam9pbihMdCkrTHQrb3Quam9pbihMdCkrTHQrIkUiK0x0fX19KCksY009ZnVuY3Rpb24oKXtmdW5jdGlvbiBMKGxlLG1lKXtmb3IodmFyIHBlPWxlLnNwbGl0KCJcbiIpLGJlPS0xLE5lPS0xLEJlPTAsR2U9W107QmUhPT1wZS5sZW5ndGg7KytC''@;'; put 'put ''ZSlpZigiQk9UIiE9PXBlW0JlXS50cmltKCkpe2lmKCEoYmU8MCkpe2Zvcih2YXIgZXQ9cGVbQmVdLnRyaW0oKS5zcGxpdCgiLCIpLGN0PWV0WzBdLHh0PWV0WzFdLG90PXBlWysrQmVdfHwiIjsxJihvdC5tYXRjaCgvWyJdL2cpfHxbXSkubGVuZ3RoJiZCZTxwZS5sZW5ndGgtMTspb3QrPSJc''@;'; put 'put ''biIrcGVbKytCZV07c3dpdGNoKG90PW90LnRyaW0oKSwrY3Qpe2Nhc2UtMTppZigiQk9UIj09PW90KXtHZVsrK2JlXT1bXSxOZT0wO2NvbnRpbnVlfWlmKCJFT0QiIT09b3QpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgRElGIHNwZWNpYWwgY29tbWFuZCAiK290KTticmVhaztjYXNl''@;'; put 'put ''IDA6R2VbYmVdW05lXT0iVFJVRSI9PT1vdHx8IkZBTFNFIiE9PW90JiYoaXNOYU4oYW4oeHQpKT9pc05hTihsbih4dCkuZ2V0RGF0ZSgpKT94dDpJZSh4dCk6YW4oeHQpKSwrK05lO2JyZWFrO2Nhc2UgMToob3Q9KG90PW90LnNsaWNlKDEsb3QubGVuZ3RoLTEpKS5yZXBsYWNlKC8iIi9nLCci''@;'; put 'put ''JykpJiZvdC5tYXRjaCgvXj0iLioiJC8pJiYob3Q9b3Quc2xpY2UoMiwtMSkpLEdlW2JlXVtOZSsrXT0iIiE9PW90P290Om51bGx9aWYoIkVPRCI9PT1vdClicmVha319ZWxzZSBHZVsrK2JlXT1bXSxOZT0wO3JldHVybiBtZSYmbWUuc2hlZXRSb3dzJiYoR2U9R2Uuc2xpY2UoMCxtZS5zaGVl''@;'; put 'put ''dFJvd3MpKSxHZX1mdW5jdGlvbiBrKGxlLG1lKXtyZXR1cm4gaDAoZnVuY3Rpb24gUyhsZSxtZSl7c3dpdGNoKG1lLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gTChfZS5kZWNvZGUobGUpLG1lKTtjYXNlImJpbmFyeSI6cmV0dXJuIEwobGUsbWUpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gTChs''@;'; put 'put ''ZS50b1N0cmluZygiYmluYXJ5IiksbWUpO2Nhc2UiYXJyYXkiOnJldHVybiBMKGF0KGxlKSxtZSl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK21lLnR5cGUpfShsZSxtZSksbWUpfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBHKGxlLG1lKXtyZXR1cm4gYjEoayhs''@;'; put 'put ''ZSxtZSksbWUpfSx0b19zaGVldDprLGZyb21fc2hlZXQ6ZnVuY3Rpb24oKXt2YXIgbGU9ZnVuY3Rpb24oYmUsTmUsQmUsR2UsZXQpe2JlLnB1c2goTmUpLGJlLnB1c2goQmUrIiwiK0dlKSxiZS5wdXNoKCciJytldC5yZXBsYWNlKC8iL2csJyIiJykrJyInKX0sbWU9ZnVuY3Rpb24oYmUsTmUs''@;'; put 'put ''QmUsR2Upe2JlLnB1c2goTmUrIiwiK0JlKSxiZS5wdXNoKDE9PU5lPyciJytHZS5yZXBsYWNlKC8iL2csJyIiJykrJyInOkdlKX07cmV0dXJuIGZ1bmN0aW9uKGJlKXt2YXIgR2UsTmU9W10sQmU9dG8oYmVbIiFyZWYiXSksZXQ9QXJyYXkuaXNBcnJheShiZSk7bGUoTmUsIlRBQkxFIiwwLDEs''@;'; put 'put ''InNoZWV0anMiKSxsZShOZSwiVkVDVE9SUyIsMCxCZS5lLnItQmUucy5yKzEsIiIpLGxlKE5lLCJUVVBMRVMiLDAsQmUuZS5jLUJlLnMuYysxLCIiKSxsZShOZSwiREFUQSIsMCwwLCIiKTtmb3IodmFyIGN0PUJlLnMucjtjdDw9QmUuZS5yOysrY3Qpe21lKE5lLC0xLDAsIkJPVCIpO2Zvcih2''@;'; put 'put ''YXIgeHQ9QmUucy5jO3h0PD1CZS5lLmM7Kyt4dCl7dmFyIG90PUdpKHtyOmN0LGM6eHR9KTtpZihHZT1ldD8oYmVbY3RdfHxbXSlbeHRdOmJlW290XSlzd2l0Y2goR2UudCl7Y2FzZSJuIjp2YXIgYnQ9R2UudzshYnQmJm51bGwhPUdlLnYmJihidD1HZS52KSxudWxsPT1idD9tZShOZSwxLDAs''@;'; put 'put ''R2UuZiYmIUdlLkY/Ij0iK0dlLmY6IiIpOm1lKE5lLDAsYnQsIlYiKTticmVhaztjYXNlImIiOm1lKE5lLDAsR2Uudj8xOjAsR2Uudj8iVFJVRSI6IkZBTFNFIik7YnJlYWs7Y2FzZSJzIjptZShOZSwxLDAsaXNOYU4oR2Uudik/R2UudjonPSInK0dlLnYrJyInKTticmVhaztjYXNlImQiOkdl''@;'; put 'put ''Lnd8fChHZS53PUEuZm9ybWF0KEdlLnp8fEEuX3RhYmxlWzE0XSxRZShJZShHZS52KSkpKSxtZShOZSwwLEdlLncsIlYiKTticmVhaztkZWZhdWx0Om1lKE5lLDEsMCwiIil9ZWxzZSBtZShOZSwxLDAsIiIpfX1yZXR1cm4gbWUoTmUsLTEsMCwiRU9EIiksTmUuam9pbigiXHJcbiIpfX0oKX19''@;'; put 'put ''KCksRnA9ZnVuY3Rpb24oKXtmdW5jdGlvbiBTKEdlKXtyZXR1cm4gR2UucmVwbGFjZSgvXFxiL2csIlxcIikucmVwbGFjZSgvXFxjL2csIjoiKS5yZXBsYWNlKC9cXG4vZywiXG4iKX1mdW5jdGlvbiBMKEdlKXtyZXR1cm4gR2UucmVwbGFjZSgvXFwvZywiXFxiIikucmVwbGFjZSgvOi9nLCJc''@;'; put 'put ''XGMiKS5yZXBsYWNlKC9cbi9nLCJcXG4iKX1mdW5jdGlvbiBHKEdlLGV0KXtyZXR1cm4gaDAoZnVuY3Rpb24gayhHZSxldCl7Zm9yKHZhciBjdD1HZS5zcGxpdCgiXG4iKSx4dD0tMSxvdD0tMSxidD0wLEZ0PVtdO2J0IT09Y3QubGVuZ3RoOysrYnQpe3ZhciBrdD1jdFtidF0udHJpbSgpLnNw''@;'; put 'put ''bGl0KCI6Iik7aWYoImNlbGwiPT09a3RbMF0pe3ZhciBMdD1BbyhrdFsxXSk7aWYoRnQubGVuZ3RoPD1MdC5yKWZvcih4dD1GdC5sZW5ndGg7eHQ8PUx0LnI7Kyt4dClGdFt4dF18fChGdFt4dF09W10pO3N3aXRjaCh4dD1MdC5yLG90PUx0LmMsa3RbMl0pe2Nhc2UidCI6RnRbeHRdW290XT1T''@;'; put 'put ''KGt0WzNdKTticmVhaztjYXNlInYiOkZ0W3h0XVtvdF09K2t0WzNdO2JyZWFrO2Nhc2UidnRmIjp2YXIgSnQ9a3Rba3QubGVuZ3RoLTFdO2Nhc2UidnRjIjpGdFt4dF1bb3RdPSJubCI9PT1rdFszXT8hIStrdFs0XTora3RbNF0sInZ0ZiI9PWt0WzJdJiYoRnRbeHRdW290XT1bRnRbeHRdW290''@;'; put 'put ''XSxKdF0pfX19cmV0dXJuIGV0JiZldC5zaGVldFJvd3MmJihGdD1GdC5zbGljZSgwLGV0LnNoZWV0Um93cykpLEZ0fShHZSxldCksZXQpfXZhciBsZT1bInNvY2lhbGNhbGM6dmVyc2lvbjoxLjUiLCJNSU1FLVZlcnNpb246IDEuMCIsIkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBi''@;'; put 'put ''b3VuZGFyeT1Tb2NpYWxDYWxjU3ByZWFkc2hlZXRDb250cm9sU2F2ZSJdLmpvaW4oIlxuIiksbWU9WyItLVNvY2lhbENhbGNTcHJlYWRzaGVldENvbnRyb2xTYXZlIiwiQ29udGVudC10eXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04Il0uam9pbigiXG4iKSsiXG4iLHBlPVsiIyBTb2Np''@;'; put 'put ''YWxDYWxjIFNwcmVhZHNoZWV0IENvbnRyb2wgU2F2ZSIsInBhcnQ6c2hlZXQiXS5qb2luKCJcbiIpLGJlPSItLVNvY2lhbENhbGNTcHJlYWRzaGVldENvbnRyb2xTYXZlLS0iO2Z1bmN0aW9uIE5lKEdlKXtpZighR2V8fCFHZVsiIXJlZiJdKXJldHVybiIiO2Zvcih2YXIgeHQsZXQ9W10sY3Q9''@;'; put 'put ''W10sb3Q9IiIsYnQ9Vm8oR2VbIiFyZWYiXSksRnQ9QXJyYXkuaXNBcnJheShHZSksa3Q9YnQucy5yO2t0PD1idC5lLnI7KytrdClmb3IodmFyIEx0PWJ0LnMuYztMdDw9YnQuZS5jOysrTHQpaWYob3Q9R2koe3I6a3QsYzpMdH0pLCh4dD1GdD8oR2Vba3RdfHxbXSlbTHRdOkdlW290XSkmJm51''@;'; put 'put ''bGwhPXh0LnYmJiJ6IiE9PXh0LnQpe3N3aXRjaChjdD1bImNlbGwiLG90LCJ0Il0seHQudCl7Y2FzZSJzIjpjYXNlInN0ciI6Y3QucHVzaChMKHh0LnYpKTticmVhaztjYXNlIm4iOnh0LmY/KGN0WzJdPSJ2dGYiLGN0WzNdPSJuIixjdFs0XT14dC52LGN0WzVdPUwoeHQuZikpOihjdFsyXT0i''@;'; put 'put ''diIsY3RbM109eHQudik7YnJlYWs7Y2FzZSJiIjpjdFsyXT0idnQiKyh4dC5mPyJmIjoiYyIpLGN0WzNdPSJubCIsY3RbNF09eHQudj8iMSI6IjAiLGN0WzVdPUwoeHQuZnx8KHh0LnY/IlRSVUUiOiJGQUxTRSIpKTticmVhaztjYXNlImQiOnZhciBKdD1RZShJZSh4dC52KSk7Y3RbMl09InZ0''@;'; put 'put ''YyIsY3RbM109Im5kIixjdFs0XT0iIitKdCxjdFs1XT14dC53fHxBLmZvcm1hdCh4dC56fHxBLl90YWJsZVsxNF0sSnQpO2JyZWFrO2Nhc2UiZSI6Y29udGludWV9ZXQucHVzaChjdC5qb2luKCI6IikpfXJldHVybiBldC5wdXNoKCJzaGVldDpjOiIrKGJ0LmUuYy1idC5zLmMrMSkrIjpyOiIr''@;'; put 'put ''KGJ0LmUuci1idC5zLnIrMSkrIjp0dmY6MSIpLGV0LnB1c2goInZhbHVlZm9ybWF0OjE6dGV4dC13aWtpIiksZXQuam9pbigiXG4iKX1yZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gUShHZSxldCl7cmV0dXJuIGIxKEcoR2UsZXQpLGV0KX0sdG9fc2hlZXQ6Ryxmcm9tX3NoZWV0OmZ1bmN0''@;'; put 'put ''aW9uIEJlKEdlKXtyZXR1cm5bbGUsbWUscGUsbWUsTmUoR2UpLGJlXS5qb2luKCJcbiIpfX19KCksSmg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBTKEJlLEdlLGV0LGN0LHh0KXt4dC5yYXc/R2VbZXRdW2N0XT1CZToiIj09PUJlfHwoR2VbZXRdW2N0XT1uaShCZSx4dCk/bmkoQmUseHQpLnY6QmUp''@;'; put 'put ''fXZhciBrPXs0NDoiLCIsOToiXHQiLDU5OiI7In0sRz17NDQ6Myw5OjIsNTk6MX07ZnVuY3Rpb24gUShCZSl7Zm9yKHZhciBHZT17fSxldD0hMSxjdD0wLHh0PTA7Y3Q8QmUubGVuZ3RoOysrY3QpMzQ9PSh4dD1CZS5jaGFyQ29kZUF0KGN0KSk/ZXQ9IWV0OiFldCYmeHQgaW4gayYmKEdlW3h0''@;'; put 'put ''XT0oR2VbeHRdfHwwKSsxKTtmb3IoY3QgaW4geHQ9W10sR2UpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEdlLGN0KSYmeHQucHVzaChbR2VbY3RdLGN0XSk7aWYoIXh0Lmxlbmd0aClmb3IoY3QgaW4gR2U9RylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNh''@;'; put 'put ''bGwoR2UsY3QpJiZ4dC5wdXNoKFtHZVtjdF0sY3RdKTtyZXR1cm4geHQuc29ydChmdW5jdGlvbihvdCxidCl7cmV0dXJuIG90WzBdLWJ0WzBdfHxHW290WzFdXS1HW2J0WzFdXX0pLGtbeHQucG9wKClbMV1dfWZ1bmN0aW9uIG1lKEJlLEdlKXtyZXR1cm4hR2V8fCFHZS5QUk58fCJzZXA9Ij09''@;'; put 'put ''QmUuc2xpY2UoMCw0KXx8QmUuaW5kZXhPZigiXHQiKT49MHx8QmUuaW5kZXhPZigiLCIpPj0wfHxCZS5pbmRleE9mKCI7Iik+PTA/ZnVuY3Rpb24gbGUoQmUsR2Upe3ZhciBldD1HZXx8e30sY3Q9IiIseHQ9ZXQuZGVuc2U/W106e30sb3Q9e3M6e2M6MCxyOjB9LGU6e2M6MCxyOjB9fTsic2Vw''@;'; put 'put ''PSI9PUJlLnNsaWNlKDAsNCk/MTM9PUJlLmNoYXJDb2RlQXQoNSkmJjEwPT1CZS5jaGFyQ29kZUF0KDYpPyhjdD1CZS5jaGFyQXQoNCksQmU9QmUuc2xpY2UoNykpOjEzPT1CZS5jaGFyQ29kZUF0KDUpfHwxMD09QmUuY2hhckNvZGVBdCg1KT8oY3Q9QmUuY2hhckF0KDQpLEJlPUJlLnNsaWNl''@;'; put 'put ''KDYpKTpjdD1RKEJlLnNsaWNlKDAsMTAyNCkpOmN0PVEoQmUuc2xpY2UoMCwxMDI0KSk7dmFyIGJ0PTAsRnQ9MCxrdD0wLEx0PTAsSnQ9MCxUbj1jdC5jaGFyQ29kZUF0KDApLHNyPSExLENuPTAsbHI9QmUuY2hhckNvZGVBdCgwKTtCZT1CZS5yZXBsYWNlKC9cclxuL2dtLCJcbiIpO3ZhciBx''@;'; put 'put ''bj1udWxsIT1ldC5kYXRlTkY/ZnVuY3Rpb24gVWUoUyl7dmFyIEw9Im51bWJlciI9PXR5cGVvZiBTP0EuX3RhYmxlW1NdOlM7cmV0dXJuIEw9TC5yZXBsYWNlKENlLCIoXFxkKykiKSxuZXcgUmVnRXhwKCJeIitMKyIkIil9KGV0LmRhdGVORik6bnVsbDtmdW5jdGlvbiBXbigpe3ZhciBwcj1C''@;'; put 'put ''ZS5zbGljZShMdCxKdCkseXI9e307aWYoJyInPT1wci5jaGFyQXQoMCkmJiciJz09cHIuY2hhckF0KHByLmxlbmd0aC0xKSYmKHByPXByLnNsaWNlKDEsLTEpLnJlcGxhY2UoLyIiL2csJyInKSksMD09PXByLmxlbmd0aCl5ci50PSJ6IjtlbHNlIGlmKGV0LnJhdyl5ci50PSJzIix5ci52PXBy''@;'; put 'put ''O2Vsc2UgaWYoMD09PXByLnRyaW0oKS5sZW5ndGgpeXIudD0icyIseXIudj1wcjtlbHNlIGlmKDYxPT1wci5jaGFyQ29kZUF0KDApKTM0PT1wci5jaGFyQ29kZUF0KDEpJiYzND09cHIuY2hhckNvZGVBdChwci5sZW5ndGgtMSk/KHlyLnQ9InMiLHlyLnY9cHIuc2xpY2UoMiwtMSkucmVwbGFj''@;'; put 'put ''ZSgvIiIvZywnIicpKTpmdW5jdGlvbiBNYihTKXtyZXR1cm4gMSE9Uy5sZW5ndGh9KHByKT8oeXIudD0ibiIseXIuZj1wci5zbGljZSgxKSk6KHlyLnQ9InMiLHlyLnY9cHIpO2Vsc2UgaWYoIlRSVUUiPT1wcil5ci50PSJiIix5ci52PSEwO2Vsc2UgaWYoIkZBTFNFIj09cHIpeXIudD0iYiIs''@;'; put 'put ''eXIudj0hMTtlbHNlIGlmKGlzTmFOKGt0PWFuKHByKSkpaWYoIWlzTmFOKGxuKHByKS5nZXREYXRlKCkpfHxxbiYmcHIubWF0Y2gocW4pKXt5ci56PWV0LmRhdGVORnx8QS5fdGFibGVbMTRdO3ZhciB0cj0wO3FuJiZwci5tYXRjaChxbikmJihwcj1mdW5jdGlvbiBKZShTLEwsayl7dmFyIEc9''@;'; put 'put ''LTEsUT0tMSxsZT0tMSxtZT0tMSxwZT0tMSxiZT0tMTsoTC5tYXRjaChDZSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKEdlLGV0KXt2YXIgY3Q9cGFyc2VJbnQoa1tldCsxXSwxMCk7c3dpdGNoKEdlLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApKXtjYXNlInkiOkc9Y3Q7YnJlYWs7Y2FzZSJkIjps''@;'; put 'put ''ZT1jdDticmVhaztjYXNlImgiOm1lPWN0O2JyZWFrO2Nhc2UicyI6YmU9Y3Q7YnJlYWs7Y2FzZSJtIjptZT49MD9wZT1jdDpRPWN0fX0pLGJlPj0wJiYtMT09cGUmJlE+PTAmJihwZT1RLFE9LTEpO3ZhciBOZT0oIiIrKEc+PTA/RzoobmV3IERhdGUpLmdldEZ1bGxZZWFyKCkpKS5zbGljZSgt''@;'; put 'put ''NCkrIi0iKygiMDAiKyhRPj0xP1E6MSkpLnNsaWNlKC0yKSsiLSIrKCIwMCIrKGxlPj0xP2xlOjEpKS5zbGljZSgtMik7Nz09TmUubGVuZ3RoJiYoTmU9IjAiK05lKSw4PT1OZS5sZW5ndGgmJihOZT0iMjAiK05lKTt2YXIgQmU9KCIwMCIrKG1lPj0wP21lOjApKS5zbGljZSgtMikrIjoiKygi''@;'; put 'put ''MDAiKyhwZT49MD9wZTowKSkuc2xpY2UoLTIpKyI6IisoIjAwIisoYmU+PTA/YmU6MCkpLnNsaWNlKC0yKTtyZXR1cm4tMT09bWUmJi0xPT1wZSYmLTE9PWJlP05lOi0xPT1HJiYtMT09USYmLTE9PWxlP0JlOk5lKyJUIitCZX0oMCxldC5kYXRlTkYscHIubWF0Y2gocW4pfHxbXSksdHI9MSks''@;'; put 'put ''ZXQuY2VsbERhdGVzPyh5ci50PSJkIix5ci52PUllKHByLHRyKSk6KHlyLnQ9Im4iLHlyLnY9UWUoSWUocHIsdHIpKSksITEhPT1ldC5jZWxsVGV4dCYmKHlyLnc9QS5mb3JtYXQoeXIueix5ci52IGluc3RhbmNlb2YgRGF0ZT9RZSh5ci52KTp5ci52KSksZXQuY2VsbE5GfHxkZWxldGUgeXIu''@;'; put 'put ''en1lbHNlIHlyLnQ9InMiLHlyLnY9cHI7ZWxzZSB5ci50PSJuIiwhMSE9PWV0LmNlbGxUZXh0JiYoeXIudz1wcikseXIudj1rdDtpZigieiI9PXlyLnR8fChldC5kZW5zZT8oeHRbYnRdfHwoeHRbYnRdPVtdKSx4dFtidF1bRnRdPXlyKTp4dFtHaSh7YzpGdCxyOmJ0fSldPXlyKSxscj1CZS5j''@;'; put 'put ''aGFyQ29kZUF0KEx0PUp0KzEpLG90LmUuYzxGdCYmKG90LmUuYz1GdCksb3QuZS5yPGJ0JiYob3QuZS5yPWJ0KSxDbj09VG4pKytGdDtlbHNlIGlmKEZ0PTAsKytidCxldC5zaGVldFJvd3MmJmV0LnNoZWV0Um93czw9YnQpcmV0dXJuITB9ZTpmb3IoO0p0PEJlLmxlbmd0aDsrK0p0KXN3aXRj''@;'; put 'put ''aChDbj1CZS5jaGFyQ29kZUF0KEp0KSl7Y2FzZSAzNDozND09PWxyJiYoc3I9IXNyKTticmVhaztjYXNlIFRuOmNhc2UgMTA6Y2FzZSAxMzppZighc3ImJlduKCkpYnJlYWsgZX1yZXR1cm4gSnQtTHQ+MCYmV24oKSx4dFsiIXJlZiJdPW9vKG90KSx4dH0oQmUsR2UpOmgwKGZ1bmN0aW9uIEwo''@;'; put 'put ''QmUsR2Upe3ZhciBldD1HZXx8e30sY3Q9W107aWYoIUJlfHwwPT09QmUubGVuZ3RoKXJldHVybiBjdDtmb3IodmFyIHh0PUJlLnNwbGl0KC9bXHJcbl0vKSxvdD14dC5sZW5ndGgtMTtvdD49MCYmMD09PXh0W290XS5sZW5ndGg7KS0tb3Q7Zm9yKHZhciBidD0xMCxGdD0wLGt0PTA7a3Q8PW90''@;'; put 'put ''Oysra3QpLTE9PShGdD14dFtrdF0uaW5kZXhPZigiICIpKT9GdD14dFtrdF0ubGVuZ3RoOkZ0KyssYnQ9TWF0aC5tYXgoYnQsRnQpO2ZvcihrdD0wO2t0PD1vdDsrK2t0KXtjdFtrdF09W107dmFyIEx0PTA7Zm9yKFMoeHRba3RdLnNsaWNlKDAsYnQpLnRyaW0oKSxjdCxrdCxMdCxldCksTHQ9''@;'; put 'put ''MTtMdDw9KHh0W2t0XS5sZW5ndGgtYnQpLzEwKzE7KytMdClTKHh0W2t0XS5zbGljZShidCsxMCooTHQtMSksYnQrMTAqTHQpLnRyaW0oKSxjdCxrdCxMdCxldCl9cmV0dXJuIGV0LnNoZWV0Um93cyYmKGN0PWN0LnNsaWNlKDAsZXQuc2hlZXRSb3dzKSksY3R9KEJlLEdlKSxHZSl9ZnVuY3Rp''@;'; put 'put ''b24gcGUoQmUsR2Upe3ZhciBldD0iIixjdD0ic3RyaW5nIj09R2UudHlwZT9bMCwwLDAsMF06VW0oQmUsR2UpO3N3aXRjaChHZS50eXBlKXtjYXNlImJhc2U2NCI6ZXQ9X2UuZGVjb2RlKEJlKTticmVhaztjYXNlImJpbmFyeSI6Y2FzZSJzdHJpbmciOmV0PUJlO2JyZWFrO2Nhc2UiYnVmZmVy''@;'; put 'put ''IjpldD02NTAwMT09R2UuY29kZXBhZ2U/QmUudG9TdHJpbmcoInV0ZjgiKTpHZS5jb2RlcGFnZSYmdHlwZW9mIGNwdGFibGU8InUiP2NwdGFibGUudXRpbHMuZGVjb2RlKEdlLmNvZGVwYWdlLEJlKTpCZS50b1N0cmluZygiYmluYXJ5Iik7YnJlYWs7Y2FzZSJhcnJheSI6ZXQ9YXQoQmUpO2Jy''@;'; put 'put ''ZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK0dlLnR5cGUpfXJldHVybiAyMzk9PWN0WzBdJiYxODc9PWN0WzFdJiYxOTE9PWN0WzJdP2V0PWNvKGV0LnNsaWNlKDMpKToiYmluYXJ5Ij09R2UudHlwZSYmdHlwZW9mIGNwdGFibGU8InUiJiZHZS5jb2Rl''@;'; put 'put ''cGFnZSYmKGV0PWNwdGFibGUudXRpbHMuZGVjb2RlKEdlLmNvZGVwYWdlLGNwdGFibGUudXRpbHMuZW5jb2RlKDI4NTkxLGV0KSkpLCJzb2NpYWxjYWxjOnZlcnNpb246Ij09ZXQuc2xpY2UoMCwxOSk/RnAudG9fc2hlZXQoInN0cmluZyI9PUdlLnR5cGU/ZXQ6Y28oZXQpLEdlKTptZShldCxH''@;'; put 'put ''ZSl9cmV0dXJue3RvX3dvcmtib29rOmZ1bmN0aW9uIGJlKEJlLEdlKXtyZXR1cm4gYjEocGUoQmUsR2UpLEdlKX0sdG9fc2hlZXQ6cGUsZnJvbV9zaGVldDpmdW5jdGlvbiBOZShCZSl7Zm9yKHZhciBjdCxHZT1bXSxldD10byhCZVsiIXJlZiJdKSx4dD1BcnJheS5pc0FycmF5KEJlKSxvdD1l''@;'; put 'put ''dC5zLnI7b3Q8PWV0LmUucjsrK290KXtmb3IodmFyIGJ0PVtdLEZ0PWV0LnMuYztGdDw9ZXQuZS5jOysrRnQpe3ZhciBrdD1HaSh7cjpvdCxjOkZ0fSk7aWYoKGN0PXh0PyhCZVtvdF18fFtdKVtGdF06QmVba3RdKSYmbnVsbCE9Y3Qudil7Zm9yKHZhciBMdD0oY3Qud3x8KExvKGN0KSxjdC53''@;'; put 'put ''KXx8IiIpLnNsaWNlKDAsMTApO0x0Lmxlbmd0aDwxMDspTHQrPSIgIjtidC5wdXNoKEx0KygwPT09RnQ/IiAiOiIiKSl9ZWxzZSBidC5wdXNoKCIgICAgICAgICAgIil9R2UucHVzaChidC5qb2luKCIiKSl9cmV0dXJuIEdlLmpvaW4oIlxuIil9fX0oKSxaOD1mdW5jdGlvbigpe2Z1bmN0aW9u''@;'; put 'put ''IFMoWW4sVnIsd3Ipe2lmKFluKXtqdChZbixZbi5sfHwwKTtmb3IodmFyIFZuPXdyLkVudW18fGtpO1luLmw8WW4ubGVuZ3RoOyl7dmFyIHpyPVluLnJlYWRfc2hpZnQoMiksWmk9Vm5benJdfHxWbls2NTUzNV0sQ2k9WW4ucmVhZF9zaGlmdCgyKSxfYT1Zbi5sK0NpLGZvPVppLmYmJlppLmYo''@;'; put 'put ''WW4sQ2ksd3IpO2lmKFluLmw9X2EsVnIoZm8sWmksenIpKXJldHVybn19fWZ1bmN0aW9uIGsoWW4sVnIpe2lmKCFZbilyZXR1cm4gWW47dmFyIHdyPVZyfHx7fSxWbj13ci5kZW5zZT9bXTp7fSx6cj0iU2hlZXQxIixaaT0wLENpPXt9LF9hPVt6cl0sZm89W10sYWE9e3M6e3I6MCxjOjB9LGU6''@;'; put 'put ''e3I6MCxjOjB9fSx6bz13ci5zaGVldFJvd3N8fDA7aWYoMj09WW5bMl0pd3IuRW51bT1raSxTKFluLGZ1bmN0aW9uKFVpLGpsLEJuKXtzd2l0Y2goQm4pe2Nhc2UgMDp3ci52ZXJzPVVpLFVpPj00MDk2JiYod3IucXBybz0hMCk7YnJlYWs7Y2FzZSA2OmFhPVVpO2JyZWFrO2Nhc2UgMTU6Y2Fz''@;'; put 'put ''ZSA1MTp3ci5xcHJvfHwoVWlbMV0udj1VaVsxXS52LnNsaWNlKDEpKTtjYXNlIDEzOmNhc2UgMTQ6Y2FzZSAxNjoxND09Qm4mJiEoMTEyJn5VaVsyXSkmJigxNSZVaVsyXSk+MSYmKDE1JlVpWzJdKTwxNSYmKFVpWzFdLno9d3IuZGF0ZU5GfHxBLl90YWJsZVsxNF0sd3IuY2VsbERhdGVzJiYo''@;'; put 'put ''VWlbMV0udD0iZCIsVWlbMV0udj1zbihVaVsxXS52KSkpO3ZhciBGcz13ci5kZW5zZT8oVm5bVWlbMF0ucl18fFtdKVtVaVswXS5jXTpWbltHaShVaVswXSldO2lmKEZzKXtGcy50PVVpWzFdLnQsRnMudj1VaVsxXS52LG51bGwhPVVpWzFdLnomJihGcy56PVVpWzFdLnopLG51bGwhPVVpWzFd''@;'; put 'put ''LmYmJihGcy5mPVVpWzFdLmYpO2JyZWFrfXdyLmRlbnNlPyhWbltVaVswXS5yXXx8KFZuW1VpWzBdLnJdPVtdKSxWbltVaVswXS5yXVtVaVswXS5jXT1VaVsxXSk6Vm5bR2koVWlbMF0pXT1VaVsxXX19LHdyKTtlbHNle2lmKDI2IT1ZblsyXSYmMTQhPVluWzJdKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''VW5yZWNvZ25pemVkIExPVFVTIEJPRiAiK1luWzJdKTt3ci5FbnVtPWtyLDE0PT1ZblsyXSYmKHdyLnFwcm89ITAsWW4ubD0wKSxTKFluLGZ1bmN0aW9uKFVpLGpsLEJuKXtzd2l0Y2goQm4pe2Nhc2UgMjI6VWlbMV0udj1VaVsxXS52LnNsaWNlKDEpO2Nhc2UgMjM6Y2FzZSAyNDpjYXNlIDI1''@;'; put 'put ''OmNhc2UgMzc6Y2FzZSAzOTpjYXNlIDQwOmlmKFVpWzNdPlppJiYoVm5bIiFyZWYiXT1vbyhhYSksQ2lbenJdPVZuLFZuPXdyLmRlbnNlP1tdOnt9LGFhPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX0sX2EucHVzaCh6cj0iU2hlZXQiKygoWmk9VWlbM10pKzEpKSksem8+MCYmVWlbMF0ucj49''@;'; put 'put ''em8pYnJlYWs7d3IuZGVuc2U/KFZuW1VpWzBdLnJdfHwoVm5bVWlbMF0ucl09W10pLFZuW1VpWzBdLnJdW1VpWzBdLmNdPVVpWzFdKTpWbltHaShVaVswXSldPVVpWzFdLGFhLmUuYzxVaVswXS5jJiYoYWEuZS5jPVVpWzBdLmMpLGFhLmUucjxVaVswXS5yJiYoYWEuZS5yPVVpWzBdLnIpO2Jy''@;'; put 'put ''ZWFrO2Nhc2UgMjc6VWlbMTRlM10mJihmb1tVaVsxNGUzXVswXV09VWlbMTRlM11bMV0pfX0sd3IpfWlmKFZuWyIhcmVmIl09b28oYWEpLENpW3pyXT1WbiwhZm8ubGVuZ3RoKXJldHVybntTaGVldE5hbWVzOl9hLFNoZWV0czpDaX07Zm9yKHZhciBqYT17fSx3bz1bXSxibz0wO2JvPGZvLmxl''@;'; put 'put ''bmd0aDsrK2JvKUNpW19hW2JvXV0mJih3by5wdXNoKGZvW2JvXSksamFbZm9bYm9dXT1DaVtfYVtib11dKTtyZXR1cm57U2hlZXROYW1lczp3byxTaGVldHM6amF9fWZ1bmN0aW9uIE5lKFluLFZyLHdyKXt2YXIgVm49W3tjOjAscjowfSx7dDoibiIsdjowfSwwXTtyZXR1cm4gd3IucXBybyYm''@;'; put 'put ''MjA3NjghPXdyLnZlcnM/KFZuWzBdLmM9WW4ucmVhZF9zaGlmdCgxKSxZbi5sKyssVm5bMF0ucj1Zbi5yZWFkX3NoaWZ0KDIpLFluLmwrPTIpOihWblsyXT1Zbi5yZWFkX3NoaWZ0KDEpLFZuWzBdLmM9WW4ucmVhZF9zaGlmdCgyKSxWblswXS5yPVluLnJlYWRfc2hpZnQoMikpLFZufWZ1bmN0''@;'; put 'put ''aW9uIEJlKFluLFZyLHdyKXt2YXIgVm49WW4ubCtWcix6cj1OZShZbiwwLHdyKTtpZih6clsxXS50PSJzIiwyMDc2OD09d3IudmVycyl7WW4ubCsrO3ZhciBaaT1Zbi5yZWFkX3NoaWZ0KDEpO3JldHVybiB6clsxXS52PVluLnJlYWRfc2hpZnQoWmksInV0ZjgiKSx6cn1yZXR1cm4gd3IucXBy''@;'; put 'put ''byYmWW4ubCsrLHpyWzFdLnY9WW4ucmVhZF9zaGlmdChWbi1Zbi5sLCJjc3RyIiksenJ9ZnVuY3Rpb24gR2UoWW4sVnIsd3Ipe3ZhciBWbj1WdCg3K3dyLmxlbmd0aCk7Vm4ud3JpdGVfc2hpZnQoMSwyNTUpLFZuLndyaXRlX3NoaWZ0KDIsVnIpLFZuLndyaXRlX3NoaWZ0KDIsWW4pLFZuLndy''@;'; put 'put ''aXRlX3NoaWZ0KDEsMzkpO2Zvcih2YXIgenI9MDt6cjxWbi5sZW5ndGg7Kyt6cil7dmFyIFppPXdyLmNoYXJDb2RlQXQoenIpO1ZuLndyaXRlX3NoaWZ0KDEsWmk+PTEyOD85NTpaaSl9cmV0dXJuIFZuLndyaXRlX3NoaWZ0KDEsMCksVm59ZnVuY3Rpb24gY3QoWW4sVnIsd3Ipe3ZhciBWbj1W''@;'; put 'put ''dCg3KTtyZXR1cm4gVm4ud3JpdGVfc2hpZnQoMSwyNTUpLFZuLndyaXRlX3NoaWZ0KDIsVnIpLFZuLndyaXRlX3NoaWZ0KDIsWW4pLFZuLndyaXRlX3NoaWZ0KDIsd3IsImkiKSxWbn1mdW5jdGlvbiBvdChZbixWcix3cil7dmFyIFZuPVZ0KDEzKTtyZXR1cm4gVm4ud3JpdGVfc2hpZnQoMSwy''@;'; put 'put ''NTUpLFZuLndyaXRlX3NoaWZ0KDIsVnIpLFZuLndyaXRlX3NoaWZ0KDIsWW4pLFZuLndyaXRlX3NoaWZ0KDgsd3IsImYiKSxWbn1mdW5jdGlvbiBGdChZbixWcix3cil7dmFyIFZuPTMyNzY4JlZyO3JldHVybiBWcj0oVm4/WW46MCkrKChWciY9LTMyNzY5KT49ODE5Mj9Wci0xNjM4NDpWciks''@;'; put 'put ''KFZuPyIiOiIkIikrKHdyP0ZvKFZyKTpCaShWcikpfXZhciBMdD17NTE6WyJGQUxTRSIsMF0sNTI6WyJUUlVFIiwwXSw3MDpbIkxFTiIsMV0sODA6WyJTVU0iLDY5XSw4MTpbIkFWRVJBR0VBIiw2OV0sODI6WyJDT1VOVEEiLDY5XSw4MzpbIk1JTkEiLDY5XSw4NDpbIk1BWEEiLDY5XSwxMTE6''@;'; put 'put ''WyJUIiwxXX0sSnQ9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIrIiwiLSIsIioiLCIvIiwiXiIsIj0iLCI8PiIsIjw9IiwiPj0iLCI8IiwiPiIsIiIsIiIsIiIsIiIsIiYiLCIiLCIiLCIiLCIiLCIiLCIiLCIiXTtmdW5jdGlvbiBzcihZbil7dmFyIFZyPVt7YzowLHI6MH0se3Q6Im4i''@;'; put 'put ''LHY6MH0sMF07cmV0dXJuIFZyWzBdLnI9WW4ucmVhZF9zaGlmdCgyKSxWclszXT1ZbltZbi5sKytdLFZyWzBdLmM9WW5bWW4ubCsrXSxWcn1mdW5jdGlvbiBscihZbixWcix3cixWbil7dmFyIHpyPVZ0KDYrVm4ubGVuZ3RoKTt6ci53cml0ZV9zaGlmdCgyLFluKSx6ci53cml0ZV9zaGlmdCgx''@;'; put 'put ''LHdyKSx6ci53cml0ZV9zaGlmdCgxLFZyKSx6ci53cml0ZV9zaGlmdCgxLDM5KTtmb3IodmFyIFppPTA7Wmk8Vm4ubGVuZ3RoOysrWmkpe3ZhciBDaT1Wbi5jaGFyQ29kZUF0KFppKTt6ci53cml0ZV9zaGlmdCgxLENpPj0xMjg/OTU6Q2kpfXJldHVybiB6ci53cml0ZV9zaGlmdCgxLDApLHpy''@;'; put 'put ''fWZ1bmN0aW9uIFduKFluLFZyKXt2YXIgd3I9c3IoWW4pLFZuPVluLnJlYWRfc2hpZnQoNCksenI9WW4ucmVhZF9zaGlmdCg0KSxaaT1Zbi5yZWFkX3NoaWZ0KDIpO2lmKDY1NTM1PT1aaSlyZXR1cm4gMD09PVZuJiYzMjIxMjI1NDcyPT09enI/KHdyWzFdLnQ9ImUiLHdyWzFdLnY9MTUpOjA9''@;'; put 'put ''PT1WbiYmMzQ4OTY2MDkyOD09PXpyPyh3clsxXS50PSJlIix3clsxXS52PTQyKTp3clsxXS52PTAsd3I7dmFyIENpPTMyNzY4JlppO3JldHVybiBaaT0oMzI3NjcmWmkpLTE2NDQ2LHdyWzFdLnY9KDEtMipDaSkqKHpyKk1hdGgucG93KDIsWmkrMzIpK1ZuKk1hdGgucG93KDIsWmkpKSx3cn1m''@;'; put 'put ''dW5jdGlvbiBwcihZbixWcix3cixWbil7dmFyIHpyPVZ0KDE0KTtpZih6ci53cml0ZV9zaGlmdCgyLFluKSx6ci53cml0ZV9zaGlmdCgxLHdyKSx6ci53cml0ZV9zaGlmdCgxLFZyKSwwPT1WbilyZXR1cm4genIud3JpdGVfc2hpZnQoNCwwKSx6ci53cml0ZV9zaGlmdCg0LDApLHpyLndyaXRl''@;'; put 'put ''X3NoaWZ0KDIsNjU1MzUpLHpyO3ZhciBaaT0wLENpPTAsZm89MDtyZXR1cm4gVm48MCYmKFppPTEsVm49LVZuKSxDaT0wfE1hdGgubG9nMihWbiksISgyMTQ3NDgzNjQ4Jihmbz0oVm4vPU1hdGgucG93KDIsQ2ktMzEpKT4+PjApKSYmKCsrQ2ksZm89KFZuLz0yKT4+PjApLFZuLT1mbyxmb3w9''@;'; put 'put ''MjE0NzQ4MzY0OCxmbz4+Pj0wLFZuKj1NYXRoLnBvdygyLDMyKSx6ci53cml0ZV9zaGlmdCg0LFZuPj4+MCksenIud3JpdGVfc2hpZnQoNCxmbyksenIud3JpdGVfc2hpZnQoMixDaSs9MTYzODMrKFppPzMyNzY4OjApKSx6cn1mdW5jdGlvbiB3aShZbixWcil7dmFyIHdyPXNyKFluKSxWbj1Z''@;'; put 'put ''bi5yZWFkX3NoaWZ0KDgsImYiKTtyZXR1cm4gd3JbMV0udj1Wbix3cn1mdW5jdGlvbiBvYShZbixWcil7dmFyIHdyPVZ0KDUrWW4ubGVuZ3RoKTt3ci53cml0ZV9zaGlmdCgyLDE0ZTMpLHdyLndyaXRlX3NoaWZ0KDIsVnIpO2Zvcih2YXIgVm49MDtWbjxZbi5sZW5ndGg7KytWbil7dmFyIHpy''@;'; put 'put ''PVluLmNoYXJDb2RlQXQoVm4pO3dyW3dyLmwrK109enI+MTI3Pzk1OnpyfXJldHVybiB3clt3ci5sKytdPTAsd3J9dmFyIGtpPXswOntuOiJCT0YiLGY6cGN9LDE6e246IkVPRiJ9LDI6e246IkNBTENNT0RFIn0sMzp7bjoiQ0FMQ09SREVSIn0sNDp7bjoiU1BMSVQifSw1OntuOiJTWU5DIn0s''@;'; put 'put ''Njp7bjoiUkFOR0UiLGY6ZnVuY3Rpb24gcGUoWW4pe3ZhciBWcj17czp7YzowLHI6MH0sZTp7YzowLHI6MH19O3JldHVybiBWci5zLmM9WW4ucmVhZF9zaGlmdCgyKSxWci5zLnI9WW4ucmVhZF9zaGlmdCgyKSxWci5lLmM9WW4ucmVhZF9zaGlmdCgyKSxWci5lLnI9WW4ucmVhZF9zaGlmdCgy''@;'; put 'put ''KSw2NTUzNT09VnIucy5jJiYoVnIucy5jPVZyLmUuYz1Wci5zLnI9VnIuZS5yPTApLFZyfX0sNzp7bjoiV0lORE9XMSJ9LDg6e246IkNPTFcxIn0sOTp7bjoiV0lOVFdPIn0sMTA6e246IkNPTFcyIn0sMTE6e246Ik5BTUUifSwxMjp7bjoiQkxBTksifSwxMzp7bjoiSU5URUdFUiIsZjpmdW5j''@;'; put 'put ''dGlvbiBldChZbixWcix3cil7dmFyIFZuPU5lKFluLDAsd3IpO3JldHVybiBWblsxXS52PVluLnJlYWRfc2hpZnQoMiwiaSIpLFZufX0sMTQ6e246Ik5VTUJFUiIsZjpmdW5jdGlvbiB4dChZbixWcix3cil7dmFyIFZuPU5lKFluLDAsd3IpO3JldHVybiBWblsxXS52PVluLnJlYWRfc2hpZnQo''@;'; put 'put ''OCwiZiIpLFZufX0sMTU6e246IkxBQkVMIixmOkJlfSwxNjp7bjoiRk9STVVMQSIsZjpmdW5jdGlvbiBidChZbixWcix3cil7dmFyIFZuPVluLmwrVnIsenI9TmUoWW4sMCx3cik7aWYoenJbMV0udj1Zbi5yZWFkX3NoaWZ0KDgsImYiKSx3ci5xcHJvKVluLmw9Vm47ZWxzZXt2YXIgWmk9WW4u''@;'; put 'put ''cmVhZF9zaGlmdCgyKTsoZnVuY3Rpb24gVG4oWW4sVnIpe2p0KFluLDApO2Zvcih2YXIgd3I9W10sVm49MCx6cj0iIixaaT0iIjtZbi5sPFluLmxlbmd0aDspe3ZhciBDaT1ZbltZbi5sKytdO3N3aXRjaChDaSl7Y2FzZSAwOndyLnB1c2goWW4ucmVhZF9zaGlmdCg4LCJmIikpO2JyZWFrO2Nh''@;'; put 'put ''c2UgMTpaaT1GdChWclswXS5jLFluLnJlYWRfc2hpZnQoMiksITApLHpyPUZ0KFZyWzBdLnIsWW4ucmVhZF9zaGlmdCgyKSwhMSksd3IucHVzaChaaSt6cik7YnJlYWs7Y2FzZSAyOnZhciBfYT1GdChWclswXS5jLFluLnJlYWRfc2hpZnQoMiksITApLGZvPUZ0KFZyWzBdLnIsWW4ucmVhZF9z''@;'; put 'put ''aGlmdCgyKSwhMSk7Wmk9RnQoVnJbMF0uYyxZbi5yZWFkX3NoaWZ0KDIpLCEwKSx6cj1GdChWclswXS5yLFluLnJlYWRfc2hpZnQoMiksITEpLHdyLnB1c2goX2ErZm8rIjoiK1ppK3pyKTticmVhaztjYXNlIDM6aWYoWW4ubDxZbi5sZW5ndGgpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigi''@;'; put 'put ''V0sxIHByZW1hdHVyZSBmb3JtdWxhIGVuZCIpO2JyZWFrO2Nhc2UgNDp3ci5wdXNoKCIoIit3ci5wb3AoKSsiKSIpO2JyZWFrO2Nhc2UgNTp3ci5wdXNoKFluLnJlYWRfc2hpZnQoMikpO2JyZWFrO2Nhc2UgNjpmb3IodmFyIGFhPSIiO0NpPVluW1luLmwrK107KWFhKz1TdHJpbmcuZnJvbUNo''@;'; put 'put ''YXJDb2RlKENpKTt3ci5wdXNoKCciJythYS5yZXBsYWNlKC8iL2csJyIiJykrJyInKTticmVhaztjYXNlIDg6d3IucHVzaCgiLSIrd3IucG9wKCkpO2JyZWFrO2Nhc2UgMjM6d3IucHVzaCgiKyIrd3IucG9wKCkpO2JyZWFrO2Nhc2UgMjI6d3IucHVzaCgiTk9UKCIrd3IucG9wKCkrIikiKTti''@;'; put 'put ''cmVhaztjYXNlIDIwOmNhc2UgMjE6dmFyIHpvPXdyLnBvcCgpLGphPXdyLnBvcCgpO3dyLnB1c2goWyJBTkQiLCJPUiJdW0NpLTIwXSsiKCIramErIiwiK3pvKyIpIik7YnJlYWs7ZGVmYXVsdDppZihDaTwzMiYmSnRbQ2ldKXpvPXdyLnBvcCgpLGphPXdyLnBvcCgpLHdyLnB1c2goamErSnRb''@;'; put 'put ''Q2ldK3pvKTtlbHNle2lmKCFMdFtDaV0pcmV0dXJuIENpPD03P2NvbnNvbGUuZXJyb3IoIldLMSBpbnZhbGlkIG9wY29kZSAiK0NpLnRvU3RyaW5nKDE2KSk6Q2k8PTI0P2NvbnNvbGUuZXJyb3IoIldLMSB1bnN1cHBvcnRlZCBvcCAiK0NpLnRvU3RyaW5nKDE2KSk6Q2k8PTMwP2NvbnNvbGUu''@;'; put 'put ''ZXJyb3IoIldLMSBpbnZhbGlkIG9wY29kZSAiK0NpLnRvU3RyaW5nKDE2KSk6Q2k8PTExNT9jb25zb2xlLmVycm9yKCJXSzEgdW5zdXBwb3J0ZWQgZnVuY3Rpb24gb3Bjb2RlICIrQ2kudG9TdHJpbmcoMTYpKTpjb25zb2xlLmVycm9yKCJXSzEgdW5yZWNvZ25pemVkIG9wY29kZSAiK0NpLnRv''@;'; put 'put ''U3RyaW5nKDE2KSk7aWYoNjk9PShWbj1MdFtDaV1bMV0pJiYoVm49WW5bWW4ubCsrXSksVm4+d3IubGVuZ3RoKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIldLMSBiYWQgZm9ybXVsYSBwYXJzZSAweCIrQ2kudG9TdHJpbmcoMTYpKyI6fCIrd3Iuam9pbigifCIpKyJ8Iik7dmFyIHdvPXdy''@;'; put 'put ''LnNsaWNlKC1Wbik7d3IubGVuZ3RoLT1Wbix3ci5wdXNoKEx0W0NpXVswXSsiKCIrd28uam9pbigiLCIpKyIpIil9fX0xPT13ci5sZW5ndGg/VnJbMV0uZj0iIit3clswXTpjb25zb2xlLmVycm9yKCJXSzEgYmFkIGZvcm11bGEgcGFyc2UgfCIrd3Iuam9pbigifCIpKyJ8Iil9KShZbi5zbGlj''@;'; put 'put ''ZShZbi5sLFluLmwrWmkpLHpyKSxZbi5sKz1aaX1yZXR1cm4genJ9fSwyNDp7bjoiVEFCTEUifSwyNTp7bjoiT1JBTkdFIn0sMjY6e246IlBSQU5HRSJ9LDI3OntuOiJTUkFOR0UifSwyODp7bjoiRlJBTkdFIn0sMjk6e246IktSQU5HRTEifSwzMjp7bjoiSFJBTkdFIn0sMzU6e246IktSQU5H''@;'; put 'put ''RTIifSwzNjp7bjoiUFJPVEVDIn0sMzc6e246IkZPT1RFUiJ9LDM4OntuOiJIRUFERVIifSwzOTp7bjoiU0VUVVAifSw0MDp7bjoiTUFSR0lOUyJ9LDQxOntuOiJMQUJFTEZNVCJ9LDQyOntuOiJUSVRMRVMifSw0Mzp7bjoiU0hFRVRKUyJ9LDQ1OntuOiJHUkFQSCJ9LDQ2OntuOiJOR1JBUEgi''@;'; put 'put ''fSw0Nzp7bjoiQ0FMQ0NPVU5UIn0sNDg6e246IlVORk9STUFUVEVEIn0sNDk6e246IkNVUlNPUlcxMiJ9LDUwOntuOiJXSU5ET1cifSw1MTp7bjoiU1RSSU5HIixmOkJlfSw1NTp7bjoiUEFTU1dPUkQifSw1Njp7bjoiTE9DS0VEIn0sNjA6e246IlFVRVJZIn0sNjE6e246IlFVRVJZTkFNRSJ9''@;'; put 'put ''LDYyOntuOiJQUklOVCJ9LDYzOntuOiJQUklOVE5BTUUifSw2NDp7bjoiR1JBUEgyIn0sNjU6e246IkdSQVBITkFNRSJ9LDY2OntuOiJaT09NIn0sNjc6e246IlNZTVNQTElUIn0sNjg6e246Ik5TUk9XUyJ9LDY5OntuOiJOU0NPTFMifSw3MDp7bjoiUlVMRVIifSw3MTp7bjoiTk5BTUUifSw3''@;'; put 'put ''Mjp7bjoiQUNPTU0ifSw3Mzp7bjoiQU1BQ1JPIn0sNzQ6e246IlBBUlNFIn0sMTAyOntuOiJQUkFOR0VTPz8ifSwxMDM6e246IlJSQU5HRVM/PyJ9LDEwNDp7bjoiRk5BTUU/PyJ9LDEwNTp7bjoiTVJBTkdFUz8/In0sNjU1MzU6e246IiJ9fSxrcj17MDp7bjoiQk9GIn0sMTp7bjoiRU9GIn0s''@;'; put 'put ''Mjp7bjoiUEFTU1dPUkQifSwzOntuOiJDQUxDU0VUIn0sNDp7bjoiV0lORE9XU0VUIn0sNTp7bjoiU0hFRVRDRUxMUFRSIn0sNjp7bjoiU0hFRVRMQVlPVVQifSw3OntuOiJDT0xVTU5XSURUSCJ9LDg6e246IkhJRERFTkNPTFVNTiJ9LDk6e246IlVTRVJSQU5HRSJ9LDEwOntuOiJTWVNURU1S''@;'; put 'put ''QU5HRSJ9LDExOntuOiJaRVJPRk9SQ0UifSwxMjp7bjoiU09SVEtFWURJUiJ9LDEzOntuOiJGSUxFU0VBTCJ9LDE0OntuOiJEQVRBRklMTE5VTVMifSwxNTp7bjoiUFJJTlRNQUlOIn0sMTY6e246IlBSSU5UU1RSSU5HIn0sMTc6e246IkdSQVBITUFJTiJ9LDE4OntuOiJHUkFQSFNUUklORyJ9''@;'; put 'put ''LDE5OntuOiI/PyJ9LDIwOntuOiJFUlJDRUxMIn0sMjE6e246Ik5BQ0VMTCJ9LDIyOntuOiJMQUJFTDE2IixmOmZ1bmN0aW9uIENuKFluLFZyKXt2YXIgd3I9c3IoWW4pO3JldHVybiB3clsxXS50PSJzIix3clsxXS52PVluLnJlYWRfc2hpZnQoVnItNCwiY3N0ciIpLHdyfX0sMjM6e246Ik5V''@;'; put 'put ''TUJFUjE3IixmOldufSwyNDp7bjoiTlVNQkVSMTgiLGY6ZnVuY3Rpb24gcW4oWW4sVnIpe3ZhciB3cj1zcihZbik7d3JbMV0udj1Zbi5yZWFkX3NoaWZ0KDIpO3ZhciBWbj13clsxXS52Pj4xO2lmKDEmd3JbMV0udilzd2l0Y2goNyZWbil7Y2FzZSAwOlZuPTVlMyooVm4+PjMpO2JyZWFrO2Nh''@;'; put 'put ''c2UgMTpWbj01MDAqKFZuPj4zKTticmVhaztjYXNlIDI6Vm49KFZuPj4zKS8yMDticmVhaztjYXNlIDM6Vm49KFZuPj4zKS8yMDA7YnJlYWs7Y2FzZSA0OlZuPShWbj4+MykvMmUzO2JyZWFrO2Nhc2UgNTpWbj0oVm4+PjMpLzJlNDticmVhaztjYXNlIDY6Vm49KFZuPj4zKS8xNjticmVhaztj''@;'; put 'put ''YXNlIDc6Vm49KFZuPj4zKS82NH1yZXR1cm4gd3JbMV0udj1Wbix3cn19LDI1OntuOiJGT1JNVUxBMTkiLGY6ZnVuY3Rpb24geXIoWW4sVnIpe3ZhciB3cj1XbihZbik7cmV0dXJuIFluLmwrPVZyLTE0LHdyfX0sMjY6e246IkZPUk1VTEExQSJ9LDI3OntuOiJYRk9STUFUIixmOmZ1bmN0aW9u''@;'; put 'put ''IHJhKFluLFZyKXtmb3IodmFyIHdyPXt9LFZuPVluLmwrVnI7WW4ubDxWbjspe3ZhciB6cj1Zbi5yZWFkX3NoaWZ0KDIpO2lmKDE0ZTM9PXpyKXtmb3Iod3JbenJdPVswLCIiXSx3clt6cl1bMF09WW4ucmVhZF9zaGlmdCgyKTtZbltZbi5sXTspd3JbenJdWzFdKz1TdHJpbmcuZnJvbUNoYXJD''@;'; put 'put ''b2RlKFluW1luLmxdKSxZbi5sKys7WW4ubCsrfX1yZXR1cm4gd3J9fSwyODp7bjoiRFRMQUJFTE1JU0MifSwyOTp7bjoiRFRMQUJFTENFTEwifSwzMDp7bjoiR1JBUEhXSU5ET1cifSwzMTp7bjoiQ1BBIn0sMzI6e246IkxQTEFVVE8ifSwzMzp7bjoiUVVFUlkifSwzNDp7bjoiSElEREVOU0hF''@;'; put 'put ''RVQifSwzNTp7bjoiPz8ifSwzNzp7bjoiTlVNQkVSMjUiLGY6ZnVuY3Rpb24gdHIoWW4sVnIpe3ZhciB3cj1zcihZbiksVm49WW4ucmVhZF9zaGlmdCg0KTtyZXR1cm4gd3JbMV0udj1Wbj4+Nix3cn19LDM4OntuOiI/PyJ9LDM5OntuOiJOVU1CRVIyNyIsZjp3aX0sNDA6e246IkZPUk1VTEEy''@;'; put 'put ''OCIsZjpmdW5jdGlvbiBGaShZbixWcil7dmFyIHdyPXdpKFluKTtyZXR1cm4gWW4ubCs9VnItMTAsd3J9fSwxNDI6e246Ij8/In0sMTQ3OntuOiI/PyJ9LDE1MDp7bjoiPz8ifSwxNTE6e246Ij8/In0sMTUyOntuOiI/PyJ9LDE1Mzp7bjoiPz8ifSwxNTQ6e246Ij8/In0sMTU1OntuOiI/PyJ9''@;'; put 'put ''LDE1Njp7bjoiPz8ifSwxNjM6e246Ij8/In0sMTc0OntuOiI/PyJ9LDE3NTp7bjoiPz8ifSwxNzY6e246Ij8/In0sMTc3OntuOiI/PyJ9LDE4NDp7bjoiPz8ifSwxODU6e246Ij8/In0sMTg2OntuOiI/PyJ9LDE4Nzp7bjoiPz8ifSwxODg6e246Ij8/In0sMTk1OntuOiI/PyJ9LDIwMTp7bjoi''@;'; put 'put ''Pz8ifSwyMDU6e246Ij8/In0sMjA2OntuOiI/PyJ9LDIwNzp7bjoiPz8ifSwyMDg6e246Ij8/In0sMjU2OntuOiI/PyJ9LDI1OTp7bjoiPz8ifSwyNjA6e246Ij8/In0sMjYxOntuOiI/PyJ9LDI2Mjp7bjoiPz8ifSwyNjM6e246Ij8/In0sMjY1OntuOiI/PyJ9LDI2Njp7bjoiPz8ifSwyNjc6''@;'; put 'put ''e246Ij8/In0sMjY4OntuOiI/PyJ9LDI3MDp7bjoiPz8ifSwyNzE6e246Ij8/In0sMzg0OntuOiI/PyJ9LDM4OTp7bjoiPz8ifSwzOTA6e246Ij8/In0sMzkzOntuOiI/PyJ9LDM5Njp7bjoiPz8ifSw1MTI6e246Ij8/In0sNTE0OntuOiI/PyJ9LDUxMzp7bjoiPz8ifSw1MTY6e246Ij8/In0s''@;'; put 'put ''NTE3OntuOiI/PyJ9LDY0MDp7bjoiPz8ifSw2NDE6e246Ij8/In0sNjQyOntuOiI/PyJ9LDY0Mzp7bjoiPz8ifSw2NDQ6e246Ij8/In0sNjQ1OntuOiI/PyJ9LDY0Njp7bjoiPz8ifSw2NDc6e246Ij8/In0sNjQ4OntuOiI/PyJ9LDY1ODp7bjoiPz8ifSw2NTk6e246Ij8/In0sNjYwOntuOiI/''@;'; put 'put ''PyJ9LDY2MTp7bjoiPz8ifSw2NjI6e246Ij8/In0sNjY1OntuOiI/PyJ9LDY2Njp7bjoiPz8ifSw3Njg6e246Ij8/In0sNzcyOntuOiI/PyJ9LDE2MDA6e246Ij8/In0sMTYwMjp7bjoiPz8ifSwxNzkzOntuOiI/PyJ9LDE3OTQ6e246Ij8/In0sMTc5NTp7bjoiPz8ifSwxNzk2OntuOiI/PyJ9''@;'; put 'put ''LDE5MjA6e246Ij8/In0sMjA0ODp7bjoiPz8ifSwyMDQ5OntuOiI/PyJ9LDIwNTI6e246Ij8/In0sMjY4ODp7bjoiPz8ifSwxMDk5ODp7bjoiPz8ifSwxMjg0OTp7bjoiPz8ifSwyODIzMzp7bjoiPz8ifSwyODQ4NDp7bjoiPz8ifSw2NTUzNTp7bjoiIn19O3JldHVybntzaGVldF90b193azE6''@;'; put 'put ''ZnVuY3Rpb24gRyhZbixWcil7dmFyIHdyPVZyfHx7fTtpZigrd3IuY29kZXBhZ2U+PTAmJlooK3dyLmNvZGVwYWdlKSwic3RyaW5nIj09d3IudHlwZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCB3cml0ZSBXSzEgdG8gSlMgc3RyaW5nIik7dmFyIFZuPW1yKCksenI9dG8oWW5bIiFyZWYiXSks''@;'; put 'put ''Wmk9QXJyYXkuaXNBcnJheShZbiksQ2k9W107JGkoVm4sMCxmdW5jdGlvbiBsZShZbil7dmFyIFZyPVZ0KDIpO3JldHVybiBWci53cml0ZV9zaGlmdCgyLFluKSxWcn0oMTAzMCkpLCRpKFZuLDYsZnVuY3Rpb24gYmUoWW4pe3ZhciBWcj1WdCg4KTtyZXR1cm4gVnIud3JpdGVfc2hpZnQoMixZ''@;'; put 'put ''bi5zLmMpLFZyLndyaXRlX3NoaWZ0KDIsWW4ucy5yKSxWci53cml0ZV9zaGlmdCgyLFluLmUuYyksVnIud3JpdGVfc2hpZnQoMixZbi5lLnIpLFZyfSh6cikpO2Zvcih2YXIgX2E9enIucy5yO19hPD16ci5lLnI7KytfYSlmb3IodmFyIGZvPUJpKF9hKSxhYT16ci5zLmM7YWE8PXpyLmUuYzsr''@;'; put 'put ''K2FhKXtfYT09PXpyLnMuciYmKENpW2FhXT1GbyhhYSkpO3ZhciBqYT1aaT8oWW5bX2FdfHxbXSlbYWFdOlluW0NpW2FhXStmb107amEmJiJ6IiE9amEudCYmKCJuIj09amEudD8oMHxqYS52KT09amEudiYmamEudj49LTMyNzY4JiZqYS52PD0zMjc2Nz8kaShWbiwxMyxjdChfYSxhYSxqYS52''@;'; put 'put ''KSk6JGkoVm4sMTQsb3QoX2EsYWEsamEudikpOiRpKFZuLDE1LEdlKF9hLGFhLExvKGphKS5zbGljZSgwLDIzOSkpKSl9cmV0dXJuICRpKFZuLDEpLFZuLmVuZCgpfSxib29rX3RvX3drMzpmdW5jdGlvbiBRKFluLFZyKXt2YXIgd3I9VnJ8fHt9O2lmKCt3ci5jb2RlcGFnZT49MCYmWigrd3Iu''@;'; put 'put ''Y29kZXBhZ2UpLCJzdHJpbmciPT13ci50eXBlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHdyaXRlIFdLMyB0byBKUyBzdHJpbmciKTt2YXIgVm49bXIoKTskaShWbiwwLGZ1bmN0aW9uIG1lKFluKXt2YXIgVnI9VnQoMjYpO1ZyLndyaXRlX3NoaWZ0KDIsNDA5NiksVnIud3JpdGVfc2hpZnQo''@;'; put 'put ''Miw0KSxWci53cml0ZV9zaGlmdCg0LDApO2Zvcih2YXIgd3I9MCxWbj0wLHpyPTAsWmk9MDtaaTxZbi5TaGVldE5hbWVzLmxlbmd0aDsrK1ppKXt2YXIgX2E9WW4uU2hlZXRzW1luLlNoZWV0TmFtZXNbWmldXTtpZihfYSYmX2FbIiFyZWYiXSl7Kyt6cjt2YXIgZm89Vm8oX2FbIiFyZWYiXSk7''@;'; put 'put ''d3I8Zm8uZS5yJiYod3I9Zm8uZS5yKSxWbjxmby5lLmMmJihWbj1mby5lLmMpfX1yZXR1cm4gVnIud3JpdGVfc2hpZnQoMix3ciksVnIud3JpdGVfc2hpZnQoMSx6ciksVnIud3JpdGVfc2hpZnQoMSxWbiksVnIud3JpdGVfc2hpZnQoMiwwKSxWci53cml0ZV9zaGlmdCgyLDApLFZyLndyaXRl''@;'; put 'put ''X3NoaWZ0KDEsMSksVnIud3JpdGVfc2hpZnQoMSwyKSxWci53cml0ZV9zaGlmdCg0LDApLFZyLndyaXRlX3NoaWZ0KDQsMCksVnJ9KFluKSk7Zm9yKHZhciB6cj0wLFppPTA7enI8WW4uU2hlZXROYW1lcy5sZW5ndGg7Kyt6cikoWW4uU2hlZXRzW1luLlNoZWV0TmFtZXNbenJdXXx8e30pWyIh''@;'; put 'put ''cmVmIl0mJiRpKFZuLDI3LG9hKFluLlNoZWV0TmFtZXNbenJdLFppKyspKTt2YXIgQ2k9MDtmb3IoenI9MDt6cjxZbi5TaGVldE5hbWVzLmxlbmd0aDsrK3pyKXt2YXIgX2E9WW4uU2hlZXRzW1luLlNoZWV0TmFtZXNbenJdXTtpZihfYSYmX2FbIiFyZWYiXSl7Zm9yKHZhciBmbz10byhfYVsi''@;'; put 'put ''IXJlZiJdKSxhYT1BcnJheS5pc0FycmF5KF9hKSx6bz1bXSxqYT1mby5zLnI7amE8PWZvLmUucjsrK2phKWZvcih2YXIgd289QmkoamEpLGJvPWZvLnMuYztibzw9Zm8uZS5jOysrYm8pe2phPT09Zm8ucy5yJiYoem9bYm9dPUZvKGJvKSk7dmFyIGpsPWFhPyhfYVtqYV18fFtdKVtib106X2Fb''@;'; put 'put ''em9bYm9dK3dvXTtqbCYmInoiIT1qbC50JiYoIm4iPT1qbC50PyRpKFZuLDIzLHByKGphLGJvLENpLGpsLnYpKTokaShWbiwyMixscihqYSxibyxDaSxMbyhqbCkuc2xpY2UoMCwyMzkpKSkpfSsrQ2l9fXJldHVybiAkaShWbiwxKSxWbi5lbmQoKX0sdG9fd29ya2Jvb2s6ZnVuY3Rpb24gTChZ''@;'; put 'put ''bixWcil7c3dpdGNoKFZyLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gayh5KF9lLmRlY29kZShZbikpLFZyKTtjYXNlImJpbmFyeSI6cmV0dXJuIGsoeShZbiksVnIpO2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjpyZXR1cm4gayhZbixWcil9dGhyb3ciVW5zdXBwb3J0ZWQgdHlwZSAiK1Zy''@;'; put 'put ''LnR5cGV9fX0oKSx0Yj1mdW5jdGlvbigpe3ZhciBTPWQwKCJ0IiksTD1kMCgiclByIik7ZnVuY3Rpb24gayhsZSl7dmFyIG1lPWxlLm1hdGNoKFMpO2lmKCFtZSlyZXR1cm57dDoicyIsdjoiIn07dmFyIHBlPXt0OiJzIix2OmVpKG1lWzFdKX0sYmU9bGUubWF0Y2goTCk7cmV0dXJuIGJlJiYo''@;'; put 'put ''cGUucz1mdW5jdGlvbiBxeihTKXt2YXIgTD17fSxrPVMubWF0Y2godG4pLEc9MCxRPSExO2lmKGspZm9yKDtHIT1rLmxlbmd0aDsrK0cpe3ZhciBsZT12cihrW0ddKTtzd2l0Y2gobGVbMF0ucmVwbGFjZSgvXHcqOi9nLCIiKSl7Y2FzZSI8Y29uZGVuc2UiOmNhc2UiPGV4dGVuZCI6YnJlYWs7''@;'; put 'put ''Y2FzZSI8c2hhZG93IjppZighbGUudmFsKWJyZWFrO2Nhc2UiPHNoYWRvdz4iOmNhc2UiPHNoYWRvdy8+IjpMLnNoYWRvdz0xO2JyZWFrO2Nhc2UiPC9zaGFkb3c+IjpicmVhaztjYXNlIjxjaGFyc2V0IjppZigiMSI9PWxlLnZhbClicmVhaztMLmNwPU5bcGFyc2VJbnQobGUudmFsLDEwKV07''@;'; put 'put ''YnJlYWs7Y2FzZSI8b3V0bGluZSI6aWYoIWxlLnZhbClicmVhaztjYXNlIjxvdXRsaW5lPiI6Y2FzZSI8b3V0bGluZS8+IjpMLm91dGxpbmU9MTticmVhaztjYXNlIjwvb3V0bGluZT4iOmJyZWFrO2Nhc2UiPHJGb250IjpMLm5hbWU9bGUudmFsO2JyZWFrO2Nhc2UiPHN6IjpMLnN6PWxlLnZh''@;'; put 'put ''bDticmVhaztjYXNlIjxzdHJpa2UiOmlmKCFsZS52YWwpYnJlYWs7Y2FzZSI8c3RyaWtlPiI6Y2FzZSI8c3RyaWtlLz4iOkwuc3RyaWtlPTE7YnJlYWs7Y2FzZSI8L3N0cmlrZT4iOmJyZWFrO2Nhc2UiPHUiOmlmKCFsZS52YWwpYnJlYWs7c3dpdGNoKGxlLnZhbCl7Y2FzZSJkb3VibGUiOkwu''@;'; put 'put ''dW5kZXJsaW5lPTI7YnJlYWs7Y2FzZSJzaW5nbGVBY2NvdW50aW5nIjpMLnVuZGVybGluZT0zMzticmVhaztjYXNlImRvdWJsZUFjY291bnRpbmciOkwudW5kZXJsaW5lPTM0fWNhc2UiPHU+IjpjYXNlIjx1Lz4iOkwudW5kZXJsaW5lfHwoTC51bmRlcmxpbmU9MSk7YnJlYWs7Y2FzZSI8L3U+''@;'; put 'put ''IjpicmVhaztjYXNlIjxiIjppZigiMCI9PWxlLnZhbClicmVhaztjYXNlIjxiPiI6Y2FzZSI8Yi8+IjpMLmJvbGQ9MTticmVhaztjYXNlIjwvYj4iOmJyZWFrO2Nhc2UiPGkiOmlmKCIwIj09bGUudmFsKWJyZWFrO2Nhc2UiPGk+IjpjYXNlIjxpLz4iOkwuaXRhbGljPTE7YnJlYWs7Y2FzZSI8''@;'; put 'put ''L2k+IjpicmVhaztjYXNlIjxjb2xvciI6bGUucmdiJiYoTC5jb2xvcj17cmdiOjg9PWxlLnJnYi5sZW5ndGg/bGUucmdiLnNsaWNlKDIsOCk6KCIwMDAwMDAiK2xlLnJnYikuc2xpY2UoLTYpfSk7YnJlYWs7Y2FzZSI8ZmFtaWx5IjpMLmZhbWlseT1sZS52YWw7YnJlYWs7Y2FzZSI8dmVydEFs''@;'; put 'put ''aWduIjoibm9uZSIhPShsZS52YWx8fCJub25lIikmJihMLnZhbGlnbj1sZS52YWwucmVwbGFjZSgic2NyaXB0IiwiIikpO2JyZWFrO2Nhc2UiPHNjaGVtZSI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZXh0IjpRPSEwO2JyZWFrO2Nh''@;'; put 'put ''c2UiPC9leHQ+IjpRPSExO2JyZWFrO2RlZmF1bHQ6aWYoNDchPT1sZVswXS5jaGFyQ29kZUF0KDEpJiYhUSl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCByaWNoIGZvcm1hdCAiK2xlWzBdKX19cmV0dXJuIEx9KGJlWzFdKSkscGV9dmFyIEc9LzwoPzpcdys6KT9yPi9nLFE9LzxcLyg/''@;'; put 'put ''Olx3KzopP3I+LztyZXR1cm4gZnVuY3Rpb24obWUpe3JldHVybiBtZS5yZXBsYWNlKEcsIiIpLnNwbGl0KFEpLm1hcChrKS5maWx0ZXIoZnVuY3Rpb24ocGUpe3JldHVybiBwZS52fSl9fSgpLEp6PXsxOiJzaW5nbGUiLDI6ImRvdWJsZSIsMzM6InNpbmdsZS1hY2NvdW50aW5nIiwzNDoiZG91''@;'; put 'put ''YmxlLWFjY291bnRpbmcifSxSST1mdW5jdGlvbigpe3ZhciBMPS8oXHJcbnxcbikvZztmdW5jdGlvbiBHKFEpe3ZhciBsZT1bW10sUS52LFtdXTtyZXR1cm4gUS52PyhRLnMmJmZ1bmN0aW9uIGsoUSxsZSxtZSl7dmFyIHBlPVtdO1EudW5kZXJsaW5lJiZwZS5wdXNoKCJ0ZXh0LWRlY29yYXRp''@;'; put 'put ''b246IHVuZGVybGluZTsiKSxRLnVuZGVybGluZT4xJiZwZS5wdXNoKCJ0ZXh0LXVuZGVybGluZS1zdHlsZToiK0p6W1EudW5kZXJsaW5lXSsiOyIpLFEuc3omJnBlLnB1c2goImZvbnQtc2l6ZToiK1Euc3orInB0OyIpLFEub3V0bGluZSYmcGUucHVzaCgidGV4dC1lZmZlY3Q6IG91dGxpbmU7''@;'; put 'put ''IiksUS5zaGFkb3cmJnBlLnB1c2goInRleHQtc2hhZG93OiBhdXRvOyIpLFEuY29sb3ImJlEuY29sb3IucmdiJiZwZS5wdXNoKCJjb2xvcjogIyIrVDEoUS5jb2xvci5yZ2IpKyI7IiksbGUucHVzaCgnPHNwYW4gc3R5bGU9IicrcGUuam9pbigiIikrJyI+JyksUS5ib2xkJiYobGUucHVzaCgi''@;'; put 'put ''PGI+IiksbWUucHVzaCgiPC9iPiIpKSxRLml0YWxpYyYmKGxlLnB1c2goIjxpPiIpLG1lLnB1c2goIjwvaT4iKSksUS5zdHJpa2UmJihsZS5wdXNoKCI8cz4iKSxtZS5wdXNoKCI8L3M+IikpO3ZhciBiZT1RLnZhbGlnbnx8IiI7InN1cGVyc2NyaXB0Ij09YmV8fCJzdXBlciI9PWJlP2JlPSJz''@;'; put 'put ''dXAiOiJzdWJzY3JpcHQiPT1iZSYmKGJlPSJzdWIiKSwiIiE9YmUmJihsZS5wdXNoKCI8IitiZSsiPiIpLG1lLnB1c2goIjwvIitiZSsiPiIpKSxtZS5wdXNoKCI8L3NwYW4+Iil9KFEucyxsZVswXSxsZVsyXSksbGVbMF0uam9pbigiIikrbGVbMV0ucmVwbGFjZShMLCI8YnIvPiIpK2xlWzJd''@;'; put 'put ''LmpvaW4oIiIpKToiIn1yZXR1cm4gZnVuY3Rpb24obGUpe3JldHVybiBsZS5tYXAoRykuam9pbigiIil9fSgpO2Z1bmN0aW9uIFc4KFMpe3JldHVybiBTLm1hcChmdW5jdGlvbihrKXtyZXR1cm4gZnVuY3Rpb24gaG9lKFMpe3ZhciBMPSIiLGs9W107cmV0dXJuIFMucyYmKFMucy5ib2xkJiZr''@;'; put 'put ''LnB1c2goIjxiLz4iKSxTLnMuaXRhbGljJiZrLnB1c2goIjxpLz4iKSxTLnMuc3RyaWtlJiZrLnB1c2goIjxzdHJpa2UvPiIpLFMucy51bmRlcmxpbmUmJmsucHVzaCgnPHUgdmFsPSInKyhjYltTLnMudW5kZXJsaW5lXXx8InNpbmdsZSIpKyciLz4nKSxTLnMuY29sb3ImJmsucHVzaChyMihT''@;'; put 'put ''LnMuY29sb3IpKSxTLnMuc3omJmsucHVzaCgnPHN6IHZhbD0iJytTLnMuc3orJyIvPicpLFMucy5uYW1lJiZrLnB1c2goJzxyRm9udCB2YWw9IicrUy5zLm5hbWUrJyIvPicpLCgic3VwZXIiPT1TLnMudmFsaWdufHwic3ViIj09Uy5zLnZhbGlnbikmJmsucHVzaCgnPHZlcnRBbGlnbiB2YWw9''@;'; put 'put ''IicrUy5zLnZhbGlnbisnc2NyaXB0Ii8+JykpLGsubGVuZ3RoJiYoTCs9IjxyUHI+IitrLmpvaW4oIiIpKyI8L3JQcj4iKSwiPHI+IisoTCs9anIoInQiLGhpKFMudiksbnVsbCkpKyI8L3I+In0oayl9KS5qb2luKCIiKX12YXIgTEk9LzwoPzpcdys6KT90W14+XSo+KFtePF0qKTxcLyg/Olx3''@;'; put 'put ''KzopP3Q+L2csT0k9LzwoPzpcdys6KT9yXGJbXj5dKj4vLGZtPS88KD86XHcrOik/clBoLio/PihbXHNcU10qPyk8XC8oPzpcdys6KT9yUGg+L2c7ZnVuY3Rpb24gbmIoUyxMKXt2YXIgaz0hTHx8TC5jZWxsSFRNTCxHPXt9O3JldHVybiBTPyhTLm1hdGNoKC9eXHMqPCg/Olx3KzopP3RbXj5d''@;'; put 'put ''Kj4vKT8oRy50PWVpKGNvKFMuc2xpY2UoUy5pbmRleE9mKCI+IikrMSkuc3BsaXQoLzxcLyg/Olx3KzopP3Q+LylbMF18fCIiKSksRy5yPWNvKFMpLGsmJihHLmg9YmEoRy50KSkpOlMubWF0Y2goT0kpJiYoRy5yPWNvKFMpLEcudD1laShjbygoUy5yZXBsYWNlKGZtLCIiKS5tYXRjaChMSSl8''@;'; put 'put ''fFtdKS5qb2luKCIiKS5yZXBsYWNlKHRuLCIiKSkpLEcuUj10YihHLnIpLGsmJihHLmg9UkkoRy5SKSkpLEcpOnt0OiIifX12YXIgZE09LzwoPzpcdys6KT9zc3QoW14+XSopPihbXHNcU10qKTxcLyg/Olx3KzopP3NzdD4vLFk4PS88KD86XHcrOik/KD86c2l8c3N0SXRlbSk+L2csUXo9Lzxc''@;'; put 'put ''Lyg/Olx3KzopPyg/OnNpfHNzdEl0ZW0pPi87S2EuU1NUPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3NoYXJlZFN0cmluZ3MiO3ZhciBoTT0vXlxzfFxzJHxbXHRcblxyXS87ZnVuY3Rpb24gcmIoUyxMKXtpZigh''@;'; put 'put ''TC5ib29rU1NUKXJldHVybiIiO3ZhciBrPVtwaV07a1trLmxlbmd0aF09anIoInNzdCIsbnVsbCx7eG1sbnM6QmEubWFpblswXSxjb3VudDpTLkNvdW50LHVuaXF1ZUNvdW50OlMuVW5pcXVlfSk7Zm9yKHZhciBHPTA7RyE9Uy5sZW5ndGg7KytHKWlmKG51bGwhPVNbR10pe3ZhciBRPVNbR10s''@;'; put 'put ''bGU9IjxzaT4iO1Eucj9sZSs9US5yOihsZSs9Ijx0IixRLnR8fChRLnQ9IiIpLFEudC5tYXRjaChoTSkmJihsZSs9JyB4bWw6c3BhY2U9InByZXNlcnZlIicpLGxlKz0iPiIraGkoUS50KSsiPC90PiIpLGtbay5sZW5ndGhdPWxlKz0iPC9zaT4ifXJldHVybiBrLmxlbmd0aD4yJiYoa1trLmxl''@;'; put 'put ''bmd0aF09Ijwvc3N0PiIsa1sxXT1rWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxrLmpvaW4oIiIpfXZhciBlVT1mdW5jdGlvbiBWaChTLEwsayl7dmFyIEc9MTMrNCpTLnQubGVuZ3RoLFE9Uy5SJiZTLlIubGVuZ3RofHxTLnI7Uy5yJiYoUy5SPXRiKFMucikpLFEmJihHKz00KzQqUy5SLmxlbmd0''@;'; put 'put ''aCk7dmFyIGxlPSExO2lmKG51bGw9PWsmJihsZT0hMCxrPVZ0KEcpKSxrLndyaXRlX3NoaWZ0KDEsUT8xOjApLFNjKFMudCxrKSxRKXtrLndyaXRlX3NoaWZ0KDQsUy5SLmxlbmd0aCk7Zm9yKHZhciBtZT0wLHBlPTA7cGU8Uy5SLmxlbmd0aDsrK3BlKXt2YXIgYmU9Uy5SW3BlXTtrLndyaXRl''@;'; put 'put ''X3NoaWZ0KDIsbWUpLG1lKz0oYmUudnx8IiIpLmxlbmd0aDt2YXIgTmU9YmUucz9fMChMLmNlbGxYZnMsTC5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOmJlLnN9LEwpOjA7ay53cml0ZV9zaGlmdCgyLEwuY2VsbFhmc1tOZV0uZm9udElkKX19cmV0dXJuIGxlP2suc2xpY2UoMCxrLmwpOmt9''@;'; put 'put ''O2Z1bmN0aW9uIG5mKFMsTCl7dmFyIGs9bXIoKTtNbihrLCJCcnRCZWdpblNzdCIsZnVuY3Rpb24gRkkoUyxMKXtyZXR1cm4gTHx8KEw9VnQoOCkpLEwud3JpdGVfc2hpZnQoNCxTLkNvdW50KSxMLndyaXRlX3NoaWZ0KDQsUy5VbmlxdWUpLEx9KFMpKTtmb3IodmFyIEc9MDtHPFMubGVuZ3Ro''@;'; put 'put ''OysrRylNbihrLCJCcnRTU1RJdGVtIixlVShTW0ddLEwpKTtyZXR1cm4gTW4oaywiQnJ0RW5kU3N0Iiksay5lbmQoKX1mdW5jdGlvbiAkOChTKXtpZih0eXBlb2YgY3B0YWJsZTwidSIpcmV0dXJuIGNwdGFibGUudXRpbHMuZW5jb2RlKEYsUyk7Zm9yKHZhciBMPVtdLGs9Uy5zcGxpdCgiIiks''@;'; put 'put ''Rz0wO0c8ay5sZW5ndGg7KytHKUxbR109a1tHXS5jaGFyQ29kZUF0KDApO3JldHVybiBMfWZ1bmN0aW9uIFFoKFMsTCl7dmFyIGs9e307cmV0dXJuIGsuTWFqb3I9Uy5yZWFkX3NoaWZ0KDIpLGsuTWlub3I9Uy5yZWFkX3NoaWZ0KDIpLEw+PTQmJihTLmwrPUwtNCksa31mdW5jdGlvbiBpYihT''@;'; put 'put ''KXtmb3IodmFyIEw9Uy5yZWFkX3NoaWZ0KDQpLGs9Uy5sK0wtNCxHPXt9LFE9Uy5yZWFkX3NoaWZ0KDQpLGxlPVtdO1EtLSA+MDspbGUucHVzaCh7dDpTLnJlYWRfc2hpZnQoNCksdjpTLnJlYWRfc2hpZnQoMCwibHBwNCIpfSk7aWYoRy5uYW1lPVMucmVhZF9zaGlmdCgwLCJscHA0IiksRy5j''@;'; put 'put ''b21wcz1sZSxTLmwhPWspdGhyb3cgbmV3IEVycm9yKCJCYWQgRGF0YVNwYWNlTWFwRW50cnk6ICIrUy5sKyIgIT0gIitrKTtyZXR1cm4gR31mdW5jdGlvbiBwTShTLEwpe3ZhciBrPVMubCtMLEc9e307Ry5GbGFncz02MyZTLnJlYWRfc2hpZnQoNCksUy5sKz00LEcuQWxnSUQ9Uy5yZWFkX3No''@;'; put 'put ''aWZ0KDQpO3ZhciBRPSExO3N3aXRjaChHLkFsZ0lEKXtjYXNlIDI2MTI2OmNhc2UgMjYxMjc6Y2FzZSAyNjEyODpRPTM2PT1HLkZsYWdzO2JyZWFrO2Nhc2UgMjY2MjU6UT00PT0oNTImRy5GbGFncyk7YnJlYWs7Y2FzZSAwOlE9MTY9PUcuRmxhZ3N8fDQ9PUcuRmxhZ3N8fDM2PT1HLkZsYWdz''@;'; put 'put ''O2JyZWFrO2RlZmF1bHQ6dGhyb3ciVW5yZWNvZ25pemVkIGVuY3J5cHRpb24gYWxnb3JpdGhtOiAiK0cuQWxnSUR9aWYoIVEpdGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0aW9uIEZsYWdzL0FsZ0lEIG1pc21hdGNoIik7cmV0dXJuIEcuQWxnSURIYXNoPVMucmVhZF9zaGlmdCg0KSxHLktleVNp''@;'; put 'put ''emU9Uy5yZWFkX3NoaWZ0KDQpLEcuUHJvdmlkZXJUeXBlPVMucmVhZF9zaGlmdCg0KSxTLmwrPTgsRy5DU1BOYW1lPVMucmVhZF9zaGlmdChrLVMubD4+MSwidXRmMTZsZSIpLFMubD1rLEd9ZnVuY3Rpb24gZ00oUyxMKXt2YXIgaz17fSxHPVMubCtMO3JldHVybiBTLmwrPTQsay5TYWx0PVMu''@;'; put 'put ''c2xpY2UoUy5sLFMubCsxNiksUy5sKz0xNixrLlZlcmlmaWVyPVMuc2xpY2UoUy5sLFMubCsxNiksUy5sKz0xNixTLnJlYWRfc2hpZnQoNCksay5WZXJpZmllckhhc2g9Uy5zbGljZShTLmwsRyksUy5sPUcsa31mdW5jdGlvbiBhYihTKXtpZigzNiE9KDYzJlMucmVhZF9zaGlmdCg0KSkpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJFbmNyeXB0aW9uSW5mbyBtaXNtYXRjaCIpO3ZhciBrPVMucmVhZF9zaGlmdCg0KTtyZXR1cm57dDoiU3RkIixoOnBNKFMsayksdjpnTShTLFMubGVuZ3RoLVMubCl9fWZ1bmN0aW9uIEs4KCl7dGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3Rl''@;'; put 'put ''ZDogRUNNQS0zNzYgRXh0ZW5zaWJsZSIpfWZ1bmN0aW9uIGlVKFMpe3ZhciBMPVsic2FsdFNpemUiLCJibG9ja1NpemUiLCJrZXlCaXRzIiwiaGFzaFNpemUiLCJjaXBoZXJBbGdvcml0aG0iLCJjaXBoZXJDaGFpbmluZyIsImhhc2hBbGdvcml0aG0iLCJzYWx0VmFsdWUiXTtTLmwrPTQ7dmFy''@;'; put 'put ''IGs9Uy5yZWFkX3NoaWZ0KFMubGVuZ3RoLVMubCwidXRmOCIpLEc9e307cmV0dXJuIGsucmVwbGFjZSh0bixmdW5jdGlvbihsZSl7dmFyIG1lPXZyKGxlKTtzd2l0Y2goWGkobWVbMF0pKXtjYXNlIjw/eG1sIjpjYXNlIjxlbmNyeXB0aW9uIjpjYXNlIjwvZW5jcnlwdGlvbj4iOmNhc2UiPC9r''@;'; put 'put ''ZXlFbmNyeXB0b3JzPiI6Y2FzZSI8L2tleUVuY3J5cHRvcj4iOmJyZWFrO2Nhc2UiPGtleURhdGEiOkwuZm9yRWFjaChmdW5jdGlvbihwZSl7R1twZV09bWVbcGVdfSk7YnJlYWs7Y2FzZSI8ZGF0YUludGVncml0eSI6Ry5lbmNyeXB0ZWRIbWFjS2V5PW1lLmVuY3J5cHRlZEhtYWNLZXksRy5l''@;'; put 'put ''bmNyeXB0ZWRIbWFjVmFsdWU9bWUuZW5jcnlwdGVkSG1hY1ZhbHVlO2JyZWFrO2Nhc2UiPGtleUVuY3J5cHRvcnM+IjpjYXNlIjxrZXlFbmNyeXB0b3JzIjpHLmVuY3M9W107YnJlYWs7Y2FzZSI8a2V5RW5jcnlwdG9yIjpHLnVyaT1tZS51cmk7YnJlYWs7Y2FzZSI8ZW5jcnlwdGVkS2V5IjpH''@;'; put 'put ''LmVuY3MucHVzaChtZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBtZVswXX19KSxHfWZ1bmN0aW9uIHJmKFMpe3ZhciBrLGxlLEw9MCxHPSQ4KFMpLFE9Ry5sZW5ndGgrMTtmb3IoKGs9QihRKSlbMF09Ry5sZW5ndGgsbGU9MTtsZSE9UTsrK2xlKWtbbGVdPUdbbGUtMV07Zm9yKGxlPVEtMTtsZT49''@;'; put 'put ''MDstLWxlKUw9KCgxNjM4NCZMPzE6MCl8TDw8MSYzMjc2Nylea1tsZV07cmV0dXJuIDUyODExXkx9dmFyIEhwPWZ1bmN0aW9uKCl7dmFyIFM9WzE4NywyNTUsMjU1LDE4NiwyNTUsMjU1LDE4NSwxMjgsMCwxOTAsMTUsMCwxOTEsMTUsMF0sTD1bNTc4NDAsNzQzOSw1MjM4MCwzMzk4NCw0MzY0''@;'; put 'put ''LDM2MDAsNjE5MDIsMTI2MDYsNjI1OCw1NzY1Nyw1NDI4NywzNDA0MSwxMDI1Miw0MzM3MCwyMDE2M10saz1bNDQ3OTYsMTk5MjksMzk4NTgsMTAwNTMsMjAxMDYsNDAyMTIsMTA3NjEsMzE1ODUsNjMxNzAsNjQ5MzMsNjAyNjcsNTA5MzUsNDAzOTksMTExOTksMTc3NjMsMzU1MjYsMTQ1Mywy''@;'; put 'put ''OTA2LDU4MTIsMTE2MjQsMjMyNDgsODg1LDE3NzAsMzU0MCw3MDgwLDE0MTYwLDI4MzIwLDU2NjQwLDU1MzY5LDQxMTM5LDIwODA3LDQxNjE0LDIxODIxLDQzNjQyLDE3NjIxLDI4NDg1LDU2OTcwLDQ0MzQxLDE5MDE5LDM4MDM4LDE0NjA1LDI5MjEwLDYwMTk1LDUwNzkxLDQwMTc1LDEwNzUx''@;'; put 'put ''LDIxNTAyLDQzMDA0LDI0NTM3LDE4Mzg3LDM2Nzc0LDM5NDksNzg5OCwxNTc5NiwzMTU5Miw2MzE4NCw0NzIwMSwyNDgwMyw0OTYwNiwzNzgwNSwxNDIwMywyODQwNiw1NjgxMiwxNzgyNCwzNTY0OCwxNjk3LDMzOTQsNjc4OCwxMzU3NiwyNzE1Miw0MzYwMSwxNzUzOSwzNTA3OCw1NTcsMTEx''@;'; put 'put ''NCwyMjI4LDQ0NTYsMzAzODgsNjA3NzYsNTE5NTMsMzQyNDMsNzA3OSwxNDE1OCwyODMxNiwxNDEyOCwyODI1Niw1NjUxMiw0MzQyNSwxNzI1MSwzNDUwMiw3NTk3LDEzMTA1LDI2MjEwLDUyNDIwLDM1MjQxLDg4MywxNzY2LDM1MzIsNDEyOSw4MjU4LDE2NTE2LDMzMDMyLDQ2NTcsOTMxNCwx''@;'; put 'put ''ODYyOF0sUT1mdW5jdGlvbihtZSxwZSl7cmV0dXJuIGZ1bmN0aW9uKG1lKXtyZXR1cm4gMjU1JihtZT4+MXxtZTw8Nyl9KG1lXnBlKX07cmV0dXJuIGZ1bmN0aW9uKHBlKXtmb3IodmFyIGJlPSQ4KHBlKSxOZT1mdW5jdGlvbihtZSl7Zm9yKHZhciBwZT1MW21lLmxlbmd0aC0xXSxiZT0xMDQs''@;'; put 'put ''TmU9bWUubGVuZ3RoLTE7TmU+PTA7LS1OZSlmb3IodmFyIEJlPW1lW05lXSxHZT0wOzchPUdlOysrR2UpNjQmQmUmJihwZV49a1tiZV0pLEJlKj0yLC0tYmU7cmV0dXJuIHBlfShiZSksQmU9YmUubGVuZ3RoLEdlPUIoMTYpLGV0PTA7MTYhPWV0OysrZXQpR2VbZXRdPTA7dmFyIG90O2Zvcigh''@;'; put 'put ''KDEmfkJlKSYmKEdlW0JlXT1RKFNbMF0sTmU+PjgpLEdlWy0tQmVdPVEoYmVbYmUubGVuZ3RoLTFdLDI1NSZOZSkpO0JlPjA7KUdlWy0tQmVdPVEoYmVbQmVdLE5lPj44KSxHZVstLUJlXT1RKGJlW0JlXSwyNTUmTmUpO2ZvcihCZT0xNSxvdD0xNS1iZS5sZW5ndGg7b3Q+MDspR2VbQmVdPVEo''@;'; put 'put ''U1tvdF0sTmU+PjgpLC0tb3QsR2VbLS1CZV09UShiZVtCZV0sMjU1Jk5lKSwtLUJlLC0tb3Q7cmV0dXJuIEdlfX0oKTt2YXIgb2I9ZnVuY3Rpb24oKXtmdW5jdGlvbiBTKFEsbGUpe3N3aXRjaChsZS50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIEwoX2UuZGVjb2RlKFEpLGxlKTtjYXNlImJp''@;'; put 'put ''bmFyeSI6cmV0dXJuIEwoUSxsZSk7Y2FzZSJidWZmZXIiOnJldHVybiBMKFEudG9TdHJpbmcoImJpbmFyeSIpLGxlKTtjYXNlImFycmF5IjpyZXR1cm4gTChhdChRKSxsZSl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK2xlLnR5cGUpfWZ1bmN0aW9uIEwoUSxsZSl7dmFy''@;'; put 'put ''IHBlPShsZXx8e30pLmRlbnNlP1tdOnt9O2lmKCFRLm1hdGNoKC9cXHRyb3dkLykpdGhyb3cgbmV3IEVycm9yKCJSVEYgbWlzc2luZyB0YWJsZSIpO3JldHVybiBwZVsiIXJlZiJdPW9vKHtzOntjOjAscjowfSxlOntjOjAscjowfX0pLHBlfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBr''@;'; put 'put ''KFEsbGUpe3JldHVybiBiMShTKFEsbGUpLGxlKX0sdG9fc2hlZXQ6Uyxmcm9tX3NoZWV0OmZ1bmN0aW9uIEcoUSl7Zm9yKHZhciBwZSxsZT1bIntcXHJ0ZjFcXGFuc2kiXSxtZT10byhRWyIhcmVmIl0pLGJlPUFycmF5LmlzQXJyYXkoUSksTmU9bWUucy5yO05lPD1tZS5lLnI7KytOZSl7bGUu''@;'; put 'put ''cHVzaCgiXFx0cm93ZFxcdHJhdXRvZml0MSIpO2Zvcih2YXIgQmU9bWUucy5jO0JlPD1tZS5lLmM7KytCZSlsZS5wdXNoKCJcXGNlbGx4IisoQmUrMSkpO2ZvcihsZS5wdXNoKCJcXHBhcmRcXGludGJsIiksQmU9bWUucy5jO0JlPD1tZS5lLmM7KytCZSl7dmFyIEdlPUdpKHtyOk5lLGM6QmV9''@;'; put 'put ''KTsocGU9YmU/KFFbTmVdfHxbXSlbQmVdOlFbR2VdKSYmKG51bGwhPXBlLnZ8fHBlLmYmJiFwZS5GKSYmKGxlLnB1c2goIiAiKyhwZS53fHwoTG8ocGUpLHBlLncpKSksbGUucHVzaCgiXFxjZWxsIikpfWxlLnB1c2goIlxccGFyZFxcaW50YmxcXHJvdyIpfXJldHVybiBsZS5qb2luKCIiKSsi''@;'; put 'put ''fSJ9fX0oKTtmdW5jdGlvbiBOcChTKXt2YXIgTD1TLnNsaWNlKCIjIj09PVNbMF0/MTowKS5zbGljZSgwLDYpO3JldHVybltwYXJzZUludChMLnNsaWNlKDAsMiksMTYpLHBhcnNlSW50KEwuc2xpY2UoMiw0KSwxNikscGFyc2VJbnQoTC5zbGljZSg0LDYpLDE2KV19ZnVuY3Rpb24gYWYoUyl7''@;'; put 'put ''Zm9yKHZhciBMPTAsaz0xOzMhPUw7KytMKWs9MjU2KmsrKFNbTF0+MjU1PzI1NTpTW0xdPDA/MDpTW0xdKTtyZXR1cm4gay50b1N0cmluZygxNikudG9VcHBlckNhc2UoKS5zbGljZSgxKX1mdW5jdGlvbiB1ZChTLEwpe2lmKG51bGw9PVMpcmV0dXJuIG51bGwhPUw7aWYobnVsbD09TClyZXR1''@;'; put 'put ''cm4hMDtpZigxPT1TLmF1dG8mJjE9PUwuYXV0bylyZXR1cm4hMTtpZighIVMuYXV0byE9ISFMLmF1dG98fG51bGw9PVMudGhlbWUhPShudWxsPT1MLnRoZW1lKSlyZXR1cm4hMDtpZihudWxsIT1TLnRoZW1lKXJldHVybiBTLnRoZW1lIT1MLnRoZW1lfHxTLnRpbnQhPUwudGludDtpZihudWxs''@;'; put 'put ''PT1TLnJnYiYmbnVsbD09TC5yZ2IpcmV0dXJuITE7dmFyIGs9Uy5yZ2I7Im51bWJlciI9PXR5cGVvZiBrJiYoaz1rLnRvU3RyaW5nKDE2KSksaz1rLnNsaWNlKC02KTt2YXIgRz1MLnJnYjtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIEcmJihHPUcudG9TdHJpbmcoMTYpKSxHPUcuc2xpY2UoLTYp''@;'; put 'put ''LGsudG9Mb3dlckNhc2UoKSE9Ry50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIFVJKFMsTCl7cmV0dXJuIG51bGw9PVM/bnVsbCE9TDpudWxsPT1MP251bGwhPVM6Uy5zdHlsZSE9TC5zdHlsZXx8dWQoUy5jb2xvcixMLmNvbG9yKX1mdW5jdGlvbiBYOChTLEwpe2lmKDA9PT1MKXJldHVybiBTO3Zh''@;'; put 'put ''ciBrPWZ1bmN0aW9uIHpJKFMpe3ZhciBMPVNbMF0vMjU1LGs9U1sxXS8yNTUsRz1TWzJdLzI1NSxRPU1hdGgubWF4KEwsayxHKSxsZT1NYXRoLm1pbihMLGssRyksbWU9US1sZTtpZigwPT09bWUpcmV0dXJuWzAsMCxMXTt2YXIgYmUscGU9MCxOZT1RK2xlO3N3aXRjaChiZT1tZS8oTmU+MT8y''@;'; put 'put ''LU5lOk5lKSxRKXtjYXNlIEw6cGU9KChrLUcpL21lKzYpJTY7YnJlYWs7Y2FzZSBrOnBlPShHLUwpL21lKzI7YnJlYWs7Y2FzZSBHOnBlPShMLWspL21lKzR9cmV0dXJuW3BlLzYsYmUsTmUvMl19KE5wKFMpKTtyZXR1cm4ga1syXT1MPDA/a1syXSooMStMKToxLSgxLWtbMl0pKigxLUwpLGFm''@;'; put 'put ''KGZ1bmN0aW9uIHZNKFMpe3ZhciBiZSxrPVNbMV0sRz1TWzJdLFE9MiprKihHPC41P0c6MS1HKSxsZT1HLVEvMixtZT1bbGUsbGUsbGVdLHBlPTYqU1swXTtpZigwIT09aylzd2l0Y2goMHxwZSl7Y2FzZSAwOmNhc2UgNjpiZT1RKnBlLG1lWzBdKz1RLG1lWzFdKz1iZTticmVhaztjYXNlIDE6''@;'; put 'put ''bWVbMF0rPWJlPVEqKDItcGUpLG1lWzFdKz1RO2JyZWFrO2Nhc2UgMjpiZT1RKihwZS0yKSxtZVsxXSs9USxtZVsyXSs9YmU7YnJlYWs7Y2FzZSAzOm1lWzFdKz1iZT1RKig0LXBlKSxtZVsyXSs9UTticmVhaztjYXNlIDQ6YmU9USoocGUtNCksbWVbMl0rPVEsbWVbMF0rPWJlO2JyZWFrO2Nh''@;'; put 'put ''c2UgNTptZVsyXSs9YmU9USooNi1wZSksbWVbMF0rPVF9Zm9yKHZhciBOZT0wOzMhPU5lOysrTmUpbWVbTmVdPU1hdGgucm91bmQoMjU1Km1lW05lXSk7cmV0dXJuIG1lfShrKSl9dmFyIE5jPTY7ZnVuY3Rpb24gcG0oUyl7cmV0dXJuIE1hdGguZmxvb3IoKFMrTWF0aC5yb3VuZCgxMjgvTmMp''@;'; put 'put ''LzI1NikqTmMpfWZ1bmN0aW9uIHE4KFMpe3JldHVybiBNYXRoLmZsb29yKChTLTUpL05jKjEwMCsuNSkvMTAwfWZ1bmN0aW9uIHNiKFMpe3JldHVybiBNYXRoLnJvdW5kKChTKk5jKzUpL05jKjI1NikvMjU2fWZ1bmN0aW9uIHIxKFMpe1MuYmVzdEZpdCYmZGVsZXRlIFMuYmVzdEZpdCxTLndp''@;'; put 'put ''ZHRoPyhTLndweD1wbShTLndpZHRoKSxTLndjaD1xOChTLndweCksUy5NRFc9TmMpOlMud3B4PyhTLndjaD1xOChTLndweCksUy53aWR0aD1zYihTLndjaCksUy5NRFc9TmMpOiJudW1iZXIiPT10eXBlb2YgUy53Y2gmJihTLndpZHRoPXNiKFMud2NoKSxTLndweD1wbShTLndpZHRoKSxTLk1E''@;'; put 'put ''Vz1OYyksUy5jdXN0b21XaWR0aCYmZGVsZXRlIFMuY3VzdG9tV2lkdGh9dmFyIGdtPTk2O2Z1bmN0aW9uIFZwKFMpe3JldHVybiA3MipTL2dtfWZ1bmN0aW9uIHczKFMpe3JldHVybiBTKmdtLzcyfWZ1bmN0aW9uIEo4KFMpe2dtPVM9e29zeDo3Mix3aW46OTYsd2luMTAwOjk2LHdpbjEyNTox''@;'; put 'put ''MjAsd2luMTUwOjE0NH1bU118fFN8fDk2LHQ3PVE4W1NdfWZ1bmN0aW9uIE0xKFMpe1MuaHB4P1MuaHB0PVZwKFMuaHB4KTpTLmhwdCYmKFMuaHB4PXczKFMuaHB0KSl9dmFyIHlNPXtOb25lOiJub25lIixTb2xpZDoic29saWQiLEdyYXk1MDoibWVkaXVtR3JheSIsR3JheTc1OiJkYXJrR3Jh''@;'; put 'put ''eSIsR3JheTI1OiJsaWdodEdyYXkiLEhvcnpTdHJpcGU6ImRhcmtIb3Jpem9udGFsIixWZXJ0U3RyaXBlOiJkYXJrVmVydGljYWwiLFJldmVyc2VEaWFnU3RyaXBlOiJkYXJrRG93biIsRGlhZ1N0cmlwZToiZGFya1VwIixEaWFnQ3Jvc3M6ImRhcmtHcmlkIixUaGlja0RpYWdDcm9zczoiZGFy''@;'; put 'put ''a1RyZWxsaXMiLFRoaW5Ib3J6U3RyaXBlOiJsaWdodEhvcml6b250YWwiLFRoaW5WZXJ0U3RyaXBlOiJsaWdodFZlcnRpY2FsIixUaGluUmV2ZXJzZURpYWdTdHJpcGU6ImxpZ2h0RG93biIsVGhpbkhvcnpDcm9zczoibGlnaHRHcmlkIn0sY1U9VmUoeU0pLHNmPXtvcmFuZ2U6MTY3NTM5MjAs''@;'; put 'put ''YmxhY2s6MCxuYXZ5OjEyOCxibHVlOjI1NSxncmVlbjozMjc2OCx0ZWFsOjMyODk2LGxpbWU6NjUyODAsYXF1YTo2NTUzNSxzaWx2ZXI6MTI2MzIyNTYsbWFyb29uOjgzODg2MDgscHVycGxlOjgzODg3MzYsb2xpdmU6ODQyMTM3NixncmF5Ojg0MjE1MDQscmVkOjE2NzExNjgwLGZ1Y2hzaWE6''@;'; put 'put ''MTY3MTE5MzUseWVsbG93OjE2Nzc2OTYwLHdoaXRlOjE2Nzc3MjE1fTtmdW5jdGlvbiBDMyhTLEwpe2lmKFMucmVwbGFjZSgiIyIsIiIpLm1hdGNoKC9eWzAtOWEtZkEtRl17Nn0kLykpcmV0dXJuIHBhcnNlSW50KFMucmVwbGFjZSgiIyIsIiIpLDE2KTtpZihzZltTXSlyZXR1cm4gc2ZbU107''@;'; put 'put ''dmFyIGs9Uy5tYXRjaCgvcmdiXChccyooXGQqKVxzKixccyooXGQqKVxzKixccyooXGQqKVxzKlwpLyk7aWYoaylyZXR1cm4oK2tbMV08PDE2KSsoK2tbMl08PDgpKyAra1szXTtpZihrPVMubWF0Y2goL3JnYmFcKFxzKihcZCopXHMqLFxzKihcZCopXHMqLFxzKihcZCopXHMqKFxkKikvKSly''@;'; put 'put ''ZXR1cm4gMCE9KGtbNF0mJmtbNF0ubGVuZ3RoPjAmJitrWzRdfHwwKXx8K2tbMV0+MHx8K2tbMl0+MHx8K2tbM10+MD8oK2tbMV08PDE2KSsoK2tbMl08PDgpKyAra1szXTpMPy0xOjE2Nzc3MjE1O3Rocm93IG5ldyBFcnJvcigiVW5rbm93biBIVE1MIGNvbG9yICIrUyl9dmFyIFE4PXt9O2Z1''@;'; put 'put ''bmN0aW9uIGU3KFMpe1M9U3x8OTY7dmFyIEw9e0NhbGlicmk6W10sQXJpYWw6W10sIlNwYXJrYXNzZSBSZyI6W10sXHU1YjhiXHU0ZjUzOltdLFx1NmUzOFx1MzBiNFx1MzBiN1x1MzBjM1x1MzBhZjpbXSwiQ2VudHVyeSBHb3RoaWMiOltdfTtyZXR1cm4gTC5DYWxpYnJpWzExXT03LEwuQ2Fs''@;'; put 'put ''aWJyaVsxMl09ezcyOjYsOTY6OCwxMjA6MTAsMTQ0OjEyfVtTXXx8OCxMLkNhbGlicmlbMTNdPTEwLEwuQ2FsaWJyaVsxNF09MTEsTC5DYWxpYnJpWzE2XT0xMixMLkNhbGlicmlbMThdPTE0LEwuQ2FsaWJyaVsyMF09MTYsTC5cdTViOGJcdTRmNTNbMTFdPTgsTC5cdTZlMzhcdTMwYjRcdTMw''@;'; put 'put ''YjdcdTMwYzNcdTMwYWZbMTFdPTgsTFsiU3Bhcmthc3NlIFJnIl1bMTFdPTcsTC5BcmlhbFsxMF09NyxMWyJDZW50dXJ5IEdvdGhpYyJdWzEyXT05LEx9UThbNzJdPWU3KDcyKSxROFs5Nl09ZTcoOTYpLFE4WzEyMF09ZTcoMTIwKSxROFsxNDRdPWU3KDE0NCk7dmFyIHQ3PVE4Wzk2XTtmdW5j''@;'; put 'put ''dGlvbiBsZihTKXtyZXR1cm4odDdbUy5uYW1lfHxTLkZvbnROYW1lXXx8W10pW1Muc3p8fFMuU2l6ZV19ZnVuY3Rpb24gQnAoUyl7aWYoUyl7dmFyIEw9bGYoUyk7aWYoTClyZXR1cm4gTmM9TH1yZXR1cm4gTmM9Nn1mdW5jdGlvbiBYcihTLEwsayl7cmV0dXJuIGFmKGZ1bmN0aW9uIHVVKFMs''@;'; put 'put ''TCxrKXtyZXR1cm5bTWF0aC5yb3VuZChMWzBdKmsrU1swXSooMS1rKSksTWF0aC5yb3VuZChMWzFdKmsrU1sxXSooMS1rKSksTWF0aC5yb3VuZChMWzJdKmsrU1syXSooMS1rKSldfShOcCgibnVtYmVyIj09dHlwZW9mIFMucmdiPygiMDAwMDAiK1MudG9TdHJpbmcoMTYpKS5zbGljZSgtNik6''@;'; put 'put ''Uy5yZ2IpLE5wKCJudW1iZXIiPT10eXBlb2YgTC5yZ2I/KCIwMDAwMCIrTC50b1N0cmluZygxNikpLnNsaWNlKC02KTpMLnJnYiksaykpfWZ1bmN0aW9uIGpwKFMsTCxrKXtpZihrKXN3aXRjaCgrUyl7Y2FzZSA2NDpTPTY1O2JyZWFrO2Nhc2UgNjU6Uz02NH12YXIgRz1MJiZMWytTXXx8ZzBb''@;'; put 'put ''K1NdfHxJOFsrUy0yMDBdO2lmKDgxPT0rUyYmKEc9ZzBbMV0pLEd8fChHPWcwWzFdKSwhRyl0aHJvdyBuZXcgRXJyb3IoImJhZCBJQ1YgaW5kZXggIitTKTtyZXR1cm4gYWYoRyl9ZnVuY3Rpb24gbGIoUyxMLGspe3ZhciBHPXt9O3JldHVybiBudWxsIT1TLmluZGV4ZWQmJihHLmluZGV4PXBh''@;'; put 'put ''cnNlSW50KFMuaW5kZXhlZCwxMCksRy5yZ2I9anAoRy5pbmRleCxMLkluZGV4ZWQpKSxudWxsIT1TLnRoZW1lJiYoRy50aGVtZT1wYXJzZUludChTLnRoZW1lLDEwKSksbnVsbCE9Uy50aW50JiYoRy50aW50PXBhcnNlRmxvYXQoUy50aW50KSksbnVsbCE9Uy5yZ2ImJihHLnJnYj1TLnJnYi5z''@;'; put 'put ''bGljZSgtNikpLG51bGwhPUcudGhlbWUmJiFHLnJnYiYmay50aGVtZUVsZW1lbnRzJiYoRy5yZ2I9WDgoay50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtHLnRoZW1lXS5yZ2IsRy50aW50fHwwKSxHLnJhd19yZ2I9ay50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtHLnRoZW1lXS5yZ2IpLEd9ZnVu''@;'; put 'put ''Y3Rpb24gYk0oUyxMLGssRyl7TC5Cb3JkZXJzPVtdO3ZhciBRPXt9LGxlPXt9LG1lPSExOyhTWzBdLm1hdGNoKHRuKXx8W10pLmZvckVhY2goZnVuY3Rpb24ocGUpe3ZhciBiZT12cihwZSk7c3dpdGNoKFhpKGJlWzBdKSl7Y2FzZSI8Ym9yZGVycyI6Y2FzZSI8Ym9yZGVycz4iOmNhc2UiPC9i''@;'; put 'put ''b3JkZXJzPiI6Y2FzZSI8L2JvcmRlcj4iOmNhc2UiPGxlZnQvPiI6Y2FzZSI8L2xlZnQ+IjpjYXNlIjxyaWdodC8+IjpjYXNlIjwvcmlnaHQ+IjpjYXNlIjx0b3AvPiI6Y2FzZSI8L3RvcD4iOmNhc2UiPGJvdHRvbS8+IjpjYXNlIjwvYm90dG9tPiI6Y2FzZSI8ZGlhZ29uYWwiOmNhc2UiPGRp''@;'; put 'put ''YWdvbmFsPiI6Y2FzZSI8ZGlhZ29uYWwvPiI6Y2FzZSI8aG9yaXpvbnRhbCI6Y2FzZSI8aG9yaXpvbnRhbD4iOmNhc2UiPGhvcml6b250YWwvPiI6Y2FzZSI8dmVydGljYWwiOmNhc2UiPHZlcnRpY2FsPiI6Y2FzZSI8dmVydGljYWwvPiI6Y2FzZSI8c3RhcnQiOmNhc2UiPHN0YXJ0PiI6Y2Fz''@;'; put 'put ''ZSI8c3RhcnQvPiI6Y2FzZSI8L3N0YXJ0PiI6Y2FzZSI8ZW5kIjpjYXNlIjxlbmQ+IjpjYXNlIjxlbmQvPiI6Y2FzZSI8L2VuZD4iOmNhc2UiPGNvbG9yLz4iOmNhc2UiPC9jb2xvcj4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGJv''@;'; put 'put ''cmRlciI6Y2FzZSI8Ym9yZGVyPiI6Y2FzZSI8Ym9yZGVyLz4iOlE9e30sYmUuZGlhZ29uYWxVcCYmKFEuZGlhZ29uYWxVcD1GcihiZS5kaWFnb25hbFVwKSksYmUuZGlhZ29uYWxEb3duJiYoUS5kaWFnb25hbERvd249RnIoYmUuZGlhZ29uYWxEb3duKSksTC5Cb3JkZXJzLnB1c2goUSk7YnJl''@;'; put 'put ''YWs7Y2FzZSI8bGVmdCI6Y2FzZSI8bGVmdD4iOmxlPVEubGVmdD17fSxiZS5zdHlsZSYmKGxlLnN0eWxlPWJlLnN0eWxlKTticmVhaztjYXNlIjxyaWdodCI6Y2FzZSI8cmlnaHQ+IjpsZT1RLnJpZ2h0PXt9LGJlLnN0eWxlJiYobGUuc3R5bGU9YmUuc3R5bGUpO2JyZWFrO2Nhc2UiPHRvcCI6''@;'; put 'put ''Y2FzZSI8dG9wPiI6bGU9US50b3A9e30sYmUuc3R5bGUmJihsZS5zdHlsZT1iZS5zdHlsZSk7YnJlYWs7Y2FzZSI8Ym90dG9tIjpjYXNlIjxib3R0b20+IjpsZT1RLmJvdHRvbT17fSxiZS5zdHlsZSYmKGxlLnN0eWxlPWJlLnN0eWxlKTticmVhaztjYXNlIjwvZGlhZ29uYWw+IjpRLmRpYWdv''@;'; put 'put ''bmFsPWxlLGxlPXt9O2JyZWFrO2Nhc2UiPC9ob3Jpem9udGFsPiI6US5ob3Jpem9udGFsPWxlLGxlPXt9O2JyZWFrO2Nhc2UiPC92ZXJ0aWNhbD4iOlEudmVydGljYWw9bGUsbGU9e307YnJlYWs7Y2FzZSI8Y29sb3IiOmNhc2UiPGNvbG9yPiI6bGUuY29sb3J8fChsZS5jb2xvcj17fSksYmUu''@;'; put 'put ''YXV0byYmKGxlLmNvbG9yLmF1dG89RnIoYmUuYXV0bykpLG51bGwhPWJlLnJnYj9sZS5jb2xvci5yZ2I9YmUucmdiLnNsaWNlKC02KTpiZS5pbmRleGVkPyhsZS5jb2xvci5pbmRleD1wYXJzZUludChiZS5pbmRleGVkLDEwKSxsZS5jb2xvci5yZ2I9anAobGUuY29sb3IuaW5kZXgsTC5JbmRl''@;'; put 'put ''eGVkLCExKSk6YmUudGhlbWUmJihsZS5jb2xvci50aGVtZT1wYXJzZUludChiZS50aGVtZSwxMCksYmUudGludCYmKGxlLmNvbG9yLnRpbnQ9cGFyc2VGbG9hdChiZS50aW50KSksYmUudGhlbWUmJmsudGhlbWVFbGVtZW50cyYmay50aGVtZUVsZW1lbnRzLmNsclNjaGVtZSYmKGxlLmNvbG9y''@;'; put 'put ''LnJnYj1YOChrLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW2xlLmNvbG9yLnRoZW1lXS5yZ2IsbGUuY29sb3IudGludHx8MCkpKSwhYmUuYXV0byYmbnVsbD09YmUucmdiJiYhYmUuaW5kZXhlZCYmZGVsZXRlIGxlLmNvbG9yO2JyZWFrO2Nhc2UiPGV4dCI6bWU9ITA7YnJlYWs7Y2FzZSI8L2V4''@;'; put 'put ''dD4iOm1lPSExO2JyZWFrO2RlZmF1bHQ6aWYoRyYmRy5XVEYmJiFtZSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK2JlWzBdKyIgaW4gYm9yZGVycyIpfX0pfWZ1bmN0aW9uIG43KFMsTCl7dmFyIGs9WyI8IitMXTtyZXR1cm4gUyYmUy5zdHlsZT8oay5wdXNoKCcgc3R5bGU9Iicr''@;'; put 'put ''Uy5zdHlsZSsnIicpLFMuY29sb3I/KGsucHVzaCgiPiIpLGsucHVzaChyMihTLmNvbG9yLCEwKSksay5qb2luKCIiKSsiPC8iK0wrIj4iKTprLmpvaW4oIiIpKyIvPiIpOmtbMF0rIi8+In1mdW5jdGlvbiByNyhTLEwsayxHKXtMLkZpbGxzPVtdO3ZhciBRPXt9LGxlPXt9LG1lPSExLHBlPSEx''@;'; put 'put ''OyhTWzBdLm1hdGNoKHRuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oYmUpe3ZhciBOZT12cihiZSk7c3dpdGNoKFhpKE5lWzBdKSl7Y2FzZSI8ZmlsbHMiOmNhc2UiPGZpbGxzPiI6Y2FzZSI8L2ZpbGxzPiI6Y2FzZSI8L2ZpbGw+IjpjYXNlIjwvZ3JhZGllbnRGaWxsPiI6Y2FzZSI8YmdDb2xv''@;'; put 'put ''ci8+IjpjYXNlIjwvYmdDb2xvcj4iOmNhc2UiPGZnQ29sb3IvPiI6Y2FzZSI8L2ZnQ29sb3I+IjpjYXNlIjxjb2xvci8+IjpjYXNlIjwvY29sb3I+IjpjYXNlIjxzdG9wLz4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGZpbGw+Ijpj''@;'; put 'put ''YXNlIjxmaWxsIjpjYXNlIjxmaWxsLz4iOkwuRmlsbHMucHVzaChRPXt9KTticmVhaztjYXNlIjxncmFkaWVudEZpbGw+IjpRLnN0b3BzPVtdO2JyZWFrO2Nhc2UiPGdyYWRpZW50RmlsbCI6US5zdG9wcz1bXSxOZS5kZWdyZWUmJihRLmFuZ2xlPStOZS5kZWdyZWUpO2JyZWFrO2Nhc2UiPHBh''@;'; put 'put ''dHRlcm5GaWxsIjpjYXNlIjxwYXR0ZXJuRmlsbD4iOk5lLnBhdHRlcm5UeXBlJiYoUS5wYXR0ZXJuVHlwZT1OZS5wYXR0ZXJuVHlwZSk7YnJlYWs7Y2FzZSI8cGF0dGVybkZpbGwvPiI6Y2FzZSI8L3BhdHRlcm5GaWxsPiI6aWYobWUpdGhyb3cgbmV3IEVycm9yKCJiYWQgc3RvcCIpO2JyZWFr''@;'; put 'put ''O2Nhc2UiPGNvbG9yIjpjYXNlIjxiZ0NvbG9yIjpjYXNlIjxmZ0NvbG9yIjp2YXIgQmU9WGkoTmVbMF0pLnNsaWNlKDEpOyJjb2xvciIhPUJlJiYhUVtCZV0mJihRW0JlXT17fSk7dmFyIEdlPW1lP2xlOlFbQmVdO251bGwhPU5lLmluZGV4ZWQmJihHZS5pbmRleD1wYXJzZUludChOZS5pbmRl''@;'; put 'put ''eGVkLDEwKSxHZS5yZ2I9anAoR2UuaW5kZXgsTC5JbmRleGVkKSksbnVsbCE9TmUudGhlbWUmJihHZS50aGVtZT1wYXJzZUludChOZS50aGVtZSwxMCkpLG51bGwhPU5lLnRpbnQmJihHZS50aW50PXBhcnNlRmxvYXQoTmUudGludCkpLG51bGwhPU5lLnJnYiYmKEdlLnJnYj1OZS5yZ2Iuc2xp''@;'; put 'put ''Y2UoLTYpKSxudWxsIT1OZS5hdXRvJiZkZWxldGUgUVtCZV0sbnVsbCE9R2UudGhlbWUmJiFHZS5yZ2ImJmsudGhlbWVFbGVtZW50cyYmKEdlLnJnYj1YOChrLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW0dlLnRoZW1lXS5yZ2IsR2UudGludHx8MCksRy5XVEYmJihHZS5yYXdfcmdiPWsudGhl''@;'; put 'put ''bWVFbGVtZW50cy5jbHJTY2hlbWVbR2UudGhlbWVdLnJnYikpO2JyZWFrO2Nhc2UiPHN0b3A+IjptZT0hMCxsZT17fTticmVhaztjYXNlIjxzdG9wIjptZT0hMCxsZT17fSxudWxsIT1OZS5wb3NpdGlvbiYmKGxlLnY9cGFyc2VGbG9hdChOZS5wb3NpdGlvbikpO2JyZWFrO2Nhc2UiPC9zdG9w''@;'; put 'put ''PiI6bWU9ITEsUS5zdG9wcy5wdXNoKGxlKTticmVhaztjYXNlIjxleHQiOnBlPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpwZT0hMTticmVhaztkZWZhdWx0OmlmKEcmJkcuV1RGJiYhcGUpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitOZVswXSsiIGluIGZpbGxzIil9fSl9ZnVuY3Rp''@;'; put 'put ''b24gWGEoUyxMLGssRyl7TC5Gb250cz1bXTt2YXIgUT17fSxsZT0hMTsoU1swXS5tYXRjaCh0bil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKG1lKXt2YXIgcGU9dnIobWUpO3N3aXRjaChYaShwZVswXSkpe2Nhc2UiPGZvbnRzIjpjYXNlIjxmb250cz4iOmNhc2UiPC9mb250cz4iOmJyZWFrO2Nh''@;'; put 'put ''c2UiPGZvbnQiOmNhc2UiPGZvbnQ+IjppZigiLz4iIT1tZS5zbGljZSgtMikpYnJlYWs7Y2FzZSI8L2ZvbnQ+IjpjYXNlIjxmb250Lz4iOkwuRm9udHMucHVzaChRKSxRPXt9O2JyZWFrO2Nhc2UiPG5hbWUiOnBlLnZhbCYmKFEubmFtZT1jbyhwZS52YWwpKTticmVhaztjYXNlIjxuYW1lLz4i''@;'; put 'put ''OmNhc2UiPC9uYW1lPiI6YnJlYWs7Y2FzZSI8YiI6US5ib2xkPXBlLnZhbD9GcihwZS52YWwpOjE7YnJlYWs7Y2FzZSI8Yi8+IjpjYXNlIjxiPiI6US5ib2xkPTE7YnJlYWs7Y2FzZSI8L2I+IjpicmVhaztjYXNlIjxpIjpRLml0YWxpYz1wZS52YWw/RnIocGUudmFsKToxO2JyZWFrO2Nhc2Ui''@;'; put 'put ''PGkvPiI6Y2FzZSI8aT4iOlEuaXRhbGljPTE7YnJlYWs7Y2FzZSI8L2k+IjpicmVhaztjYXNlIjx1Ijpzd2l0Y2gocGUudmFsKXtjYXNlIm5vbmUiOlEudW5kZXJsaW5lPTA7YnJlYWs7Y2FzZSJzaW5nbGUiOlEudW5kZXJsaW5lPTE7YnJlYWs7Y2FzZSJkb3VibGUiOlEudW5kZXJsaW5lPTI7''@;'; put 'put ''YnJlYWs7Y2FzZSJzaW5nbGVBY2NvdW50aW5nIjpRLnVuZGVybGluZT0zMzticmVhaztjYXNlImRvdWJsZUFjY291bnRpbmciOlEudW5kZXJsaW5lPTM0fWJyZWFrO2Nhc2UiPHUvPiI6Y2FzZSI8dT4iOlEudW5kZXJsaW5lPTE7YnJlYWs7Y2FzZSI8L3U+IjpicmVhaztjYXNlIjxzdHJpa2Ui''@;'; put 'put ''OlEuc3RyaWtlPXBlLnZhbD9GcihwZS52YWwpOjE7YnJlYWs7Y2FzZSI8c3RyaWtlLz4iOlEuc3RyaWtlPTE7YnJlYWs7Y2FzZSI8b3V0bGluZSI6US5vdXRsaW5lPXBlLnZhbD9GcihwZS52YWwpOjE7YnJlYWs7Y2FzZSI8b3V0bGluZS8+IjpRLm91dGxpbmU9MTticmVhaztjYXNlIjxzaGFk''@;'; put 'put ''b3ciOlEuc2hhZG93PXBlLnZhbD9GcihwZS52YWwpOjE7YnJlYWs7Y2FzZSI8c2hhZG93Lz4iOlEuc2hhZG93PTE7YnJlYWs7Y2FzZSI8Y29uZGVuc2UiOlEuY29uZGVuc2U9cGUudmFsP0ZyKHBlLnZhbCk6MTticmVhaztjYXNlIjxjb25kZW5zZS8+IjpRLmNvbmRlbnNlPTE7YnJlYWs7Y2Fz''@;'; put 'put ''ZSI8ZXh0ZW5kIjpRLmV4dGVuZD1wZS52YWw/RnIocGUudmFsKToxO2JyZWFrO2Nhc2UiPGV4dGVuZC8+IjpRLmV4dGVuZD0xO2JyZWFrO2Nhc2UiPHN6IjpwZS52YWwmJihRLnN6PStwZS52YWwpO2JyZWFrO2Nhc2UiPHN6Lz4iOmNhc2UiPC9zej4iOmJyZWFrO2Nhc2UiPHZlcnRBbGlnbiI6''@;'; put 'put ''Im5vbmUiIT0ocGUudmFsfHwibm9uZSIpJiYoUS52YWxpZ249cGUudmFsLnJlcGxhY2UoInNjcmlwdCIsIiIpKTticmVhaztjYXNlIjx2ZXJ0QWxpZ24vPiI6Y2FzZSI8L3ZlcnRBbGlnbj4iOmJyZWFrO2Nhc2UiPGZhbWlseSI6cGUudmFsJiYoUS5mYW1pbHk9cGFyc2VJbnQocGUudmFsLDEw''@;'; put 'put ''KSk7YnJlYWs7Y2FzZSI8ZmFtaWx5Lz4iOmNhc2UiPC9mYW1pbHk+IjpicmVhaztjYXNlIjxzY2hlbWUiOnBlLnZhbCYmKFEuc2NoZW1lPXBlLnZhbCk7YnJlYWs7Y2FzZSI8c2NoZW1lLz4iOmNhc2UiPC9zY2hlbWU+IjpicmVhaztjYXNlIjxjaGFyc2V0IjppZigiMSI9PXBlLnZhbClicmVh''@;'; put 'put ''aztwZS5jb2RlcGFnZT1OW3BhcnNlSW50KHBlLnZhbCwxMCldO2JyZWFrO2Nhc2UiPGNvbG9yIjpRLmNvbG9yfHwoUS5jb2xvcj17fSkscGUuYXV0byYmKFEuY29sb3IuYXV0bz1GcihwZS5hdXRvKSkscGUucmdiP1EuY29sb3IucmdiPXBlLnJnYi5zbGljZSgtNik6cGUuaW5kZXhlZD8oUS5j''@;'; put 'put ''b2xvci5pbmRleD1wYXJzZUludChwZS5pbmRleGVkLDEwKSxRLmNvbG9yLnJnYj1qcChRLmNvbG9yLmluZGV4LEwuSW5kZXhlZCkpOnBlLnRoZW1lJiYoUS5jb2xvci50aGVtZT1wYXJzZUludChwZS50aGVtZSwxMCkscGUudGludCYmKFEuY29sb3IudGludD1wYXJzZUZsb2F0KHBlLnRpbnQp''@;'; put 'put ''KSxwZS50aGVtZSYmay50aGVtZUVsZW1lbnRzJiZrLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lJiYoUS5jb2xvci5yZ2I9WDgoay50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtRLmNvbG9yLnRoZW1lXS5yZ2IsUS5jb2xvci50aW50fHwwKSkpO2JyZWFrO2Nhc2UiPGNvbG9yLz4iOmNhc2UiPC9j''@;'; put 'put ''b2xvcj4iOmJyZWFrO2Nhc2UiPEFsdGVybmF0ZUNvbnRlbnQiOmxlPSEwO2JyZWFrO2Nhc2UiPC9BbHRlcm5hdGVDb250ZW50PiI6bGU9ITE7YnJlYWs7Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZXh0IjpsZT0hMDticmVhaztjYXNl''@;'; put 'put ''IjwvZXh0PiI6bGU9ITE7YnJlYWs7ZGVmYXVsdDppZihHJiZHLldURiYmIWxlKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrcGVbMF0rIiBpbiBmb250cyIpfX0pfXZhciBjYj17MDoibm9uZSIsMToic2luZ2xlIiwyOiJkb3VibGUiLDMzOiJzaW5nbGVBY2NvdW50aW5nIiwzNDoi''@;'; put 'put ''ZG91YmxlQWNjb3VudGluZyJ9LGNmPVsibnVtRm10SWQiLCJmaWxsSWQiLCJmb250SWQiLCJib3JkZXJJZCIsInhmSWQiXSxTMz1bImFwcGx5QWxpZ25tZW50IiwiYXBwbHlCb3JkZXIiLCJhcHBseUZpbGwiLCJhcHBseUZvbnQiLCJhcHBseU51bWJlckZvcm1hdCIsImFwcGx5UHJvdGVjdGlv''@;'; put 'put ''biIsInBpdm90QnV0dG9uIiwicXVvdGVQcmVmaXgiXSxLST1mdW5jdGlvbigpe3ZhciBTPS88KD86XHcrOik/Zm9udChbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9mb250Pi8sTD0vPCg/Olx3KzopP251bUZtdChbXj5dKilcLz4vLGs9LzwoPzpcdys6KT9maWxsKFtePl0qKT5bXFNcc10q''@;'; put 'put ''PzxcLyg/Olx3KzopP2ZpbGw+LyxRPS88KD86XHcrOik/Ym9yZGVyKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2JvcmRlcj4vO3JldHVybiBmdW5jdGlvbihwZSxiZSxOZSxCZSl7dmFyIGN0LHh0LEdlPXt9LGV0PXt9O3JldHVybihjdD1wZS5tYXRjaChTKSkmJihYYShjdCxHZSxOZSxC''@;'; put 'put ''ZSksKEdlLkZvbnRzfHxbXSlbMF0mJlJ0KGV0LEdlLkZvbnRzWzBdKSksKGN0PXBlLm1hdGNoKEwpKSYmKHh0PXZyKGNvKGN0WzBdKSksZXQuej14dC5mb3JtYXRDb2RlP2VpKHh0LmZvcm1hdENvZGUpOihiZS5OdW1iZXJGbXR8fFtdKVsreHQubnVtRm10SWRdfHwiR2VuZXJhbCIpLChjdD1w''@;'; put 'put ''ZS5tYXRjaChrKSkmJihyNyhjdCxHZSxOZSxCZSksKEdlLkZpbGxzfHxbXSlbMF0mJlJ0KGV0LEdlLkZpbGxzWzBdKSksKGN0PXBlLm1hdGNoKFEpKSYmKGJNKGN0LEdlLE5lLEJlKSwoR2UuQm9yZGVyc3x8W10pWzBdJiZSdChldCxHZS5Cb3JkZXJzWzBdKSksZXR9fSgpLFhJPS88KD86XHcr''@;'; put 'put ''Oik/ZHhmPltcU1xzXSo/PFwvKD86XHcrOik/ZHhmPi9nLHZVPS88KD86XHcrOik/dGFibGVTdHlsZVxiLio/PltcU1xzXSo/PFwvKD86XHcrOik/dGFibGVTdHlsZT4vZzt2YXIgSkk9ZnVuY3Rpb24oKXt2YXIgTD0vPCg/Olx3KzopP251bUZtdHMoW14+XSopPltcU1xzXSo/PFwvKD86XHcr''@;'; put 'put ''Oik/bnVtRm10cz4vLGs9LzwoPzpcdys6KT9jZWxsU3R5bGVYZnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Y2VsbFN0eWxlWGZzPi8sRz0vPCg/Olx3KzopP2NlbGxTdHlsZXMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Y2VsbFN0eWxlcz4vLFE9LzwoPzpcdys6KT9jZWxsWGZz''@;'; put 'put ''KFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2NlbGxYZnM+LyxsZT0vPCg/Olx3KzopP2ZpbGxzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2ZpbGxzPi8sbWU9LzwoPzpcdys6KT9mb250cyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9mb250cz4vLHBlPS88KD86XHcrOik/Ym9y''@;'; put 'put ''ZGVycyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9ib3JkZXJzPi8sYmU9LzwoPzpcdys6KT9pbmRleGVkQ29sb3JzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2luZGV4ZWRDb2xvcnM+LyxOZT0vPCg/Olx3KzopP3RhYmxlU3R5bGVzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3Kzop''@;'; put 'put ''P3RhYmxlU3R5bGVzPi8sQmU9LzwoPzpcdys6KT9keGZzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2R4ZnM+LztyZXR1cm4gZnVuY3Rpb24oZXQsY3QseHQpe3ZhciBidCxvdD17fTtyZXR1cm4gZXQ/KChidD0oZXQ9ZXQucmVwbGFjZSgvPCEtLShbXHNcU10qPyktLT4vZ20sIiIpLnJl''@;'; put 'put ''cGxhY2UoLzwhRE9DVFlQRVteXFtdKlxbW15cXV0qXF0+L2dtLCIiKSkubWF0Y2goYmUpKSYmZnVuY3Rpb24gZTIoUyxMLGspe0wuSW5kZXhlZHx8KEwuSW5kZXhlZD1bXSk7dmFyIEc9ITE7KFNbMF0ubWF0Y2godG4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihRKXt2YXIgbGU9dnIoUSk7c3dp''@;'; put 'put ''dGNoKFhpKGxlWzBdKSl7Y2FzZSI8aW5kZXhlZENvbG9ycz4iOmNhc2UiPGluZGV4ZWRDb2xvcnMiOmNhc2UiPGluZGV4ZWRDb2xvcnMvPiI6Y2FzZSI8L2luZGV4ZWRDb2xvcnM+IjpjYXNlIjwvcmdiQ29sb3I+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+''@;'; put 'put ''IjpicmVhaztjYXNlIjxyZ2JDb2xvciI6ZGVsZXRlIGxlWzBdO3ZhciBtZT1wYXJzZUludChsZS5yZ2Iuc2xpY2UoLTYpLDE2KTtMLkluZGV4ZWQucHVzaChbbWU+PjE2JjI1NSxtZT4+OCYyNTUsMjU1Jm1lXSk7YnJlYWs7Y2FzZSI8ZXh0IjpHPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpHPSEx''@;'; put 'put ''O2JyZWFrO2RlZmF1bHQ6aWYoayYmay5XVEYmJiFHKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrbGVbMF0rIiBpbiBjZWxsU3R5bGVzIil9fSl9KGJ0LG90LHh0KSwoYnQ9ZXQubWF0Y2goTCkpJiZmdW5jdGlvbiBoVShTLEwsayl7TC5OdW1iZXJGbXQ9W107Zm9yKHZhciBHPUxl''@;'; put 'put ''KEEuX3RhYmxlKSxRPTA7UTxHLmxlbmd0aDsrK1EpTC5OdW1iZXJGbXRbR1tRXV09QS5fdGFibGVbR1tRXV07dmFyIGxlPVNbMF0ubWF0Y2godG4pO2lmKGxlKWZvcihRPTA7UTxsZS5sZW5ndGg7KytRKXt2YXIgbWU9dnIobGVbUV0pO3N3aXRjaChYaShtZVswXSkpe2Nhc2UiPG51bUZtdHMi''@;'; put 'put ''OmNhc2UiPC9udW1GbXRzPiI6Y2FzZSI8bnVtRm10cy8+IjpjYXNlIjxudW1GbXRzPiI6Y2FzZSI8L251bUZtdD4iOmJyZWFrO2Nhc2UiPG51bUZtdCI6dmFyIHBlPWVpKGNvKG1lLmZvcm1hdENvZGUpKSxiZT1wYXJzZUludChtZS5udW1GbXRJZCwxMCk7aWYoTC5OdW1iZXJGbXRbYmVdPXBl''@;'; put 'put ''LGJlPjApe2lmKGJlPjM5Mil7Zm9yKGJlPTM5MjtiZT42MCYmbnVsbCE9TC5OdW1iZXJGbXRbYmVdOy0tYmUpO0wuTnVtYmVyRm10W2JlXT1wZX1BLmxvYWQocGUsYmUpfWJyZWFrO2RlZmF1bHQ6aWYoay5XVEYpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIittZVswXSsiIGluIG51''@;'; put 'put ''bUZtdHMiKX19fShidCxvdCx4dCksKGJ0PWV0Lm1hdGNoKG1lKSkmJlhhKGJ0LG90LGN0LHh0KSwoYnQ9ZXQubWF0Y2gobGUpKSYmcjcoYnQsb3QsY3QseHQpLChidD1ldC5tYXRjaChwZSkpJiZiTShidCxvdCxjdCx4dCksKGJ0PWV0Lm1hdGNoKGspKSYmZnVuY3Rpb24gcFUoUyxMLGspe0wu''@;'; put 'put ''Q2VsbFN0eWxlWGY9W107dmFyIEcsUT0hMTsoU1swXS5tYXRjaCh0bil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGxlKXt2YXIgbWU9dnIobGUpLHBlPTA7c3dpdGNoKFhpKG1lWzBdKSl7Y2FzZSI8Y2VsbFN0eWxlWGZzIjpjYXNlIjxjZWxsU3R5bGVYZnM+IjpjYXNlIjxjZWxsU3R5bGVYZnMv''@;'; put 'put ''PiI6Y2FzZSI8L2NlbGxTdHlsZVhmcz4iOmNhc2UiPC94Zj4iOmNhc2UiPC9hbGlnbm1lbnQ+IjpjYXNlIjwvcHJvdGVjdGlvbj4iOmNhc2UiPHByb3RlY3Rpb24vPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8eGYiOmNhc2UiPHhm''@;'; put 'put ''Lz4iOmZvcihkZWxldGUoRz1tZSlbMF0scGU9MDtwZTxjZi5sZW5ndGg7KytwZSlHW2NmW3BlXV0mJihHW2NmW3BlXV09cGFyc2VJbnQoR1tjZltwZV1dLDEwKSk7Zm9yKHBlPTA7cGU8UzMubGVuZ3RoOysrcGUpR1tTM1twZV1dJiYoR1tTM1twZV1dPUZyKEdbUzNbcGVdXSkpO2lmKEwuTnVt''@;'; put 'put ''YmVyRm10JiZHLm51bUZtdElkPjM5Milmb3IocGU9MzkyO3BlPjYwOy0tcGUpaWYoTC5OdW1iZXJGbXRbRy5udW1GbXRJZF09PUwuTnVtYmVyRm10W3BlXSl7Ry5udW1GbXRJZD1wZTticmVha31MLkNlbGxTdHlsZVhmLnB1c2goRyk7YnJlYWs7Y2FzZSI8YWxpZ25tZW50IjpjYXNlIjxhbGln''@;'; put 'put ''bm1lbnQvPiI6dmFyIGJlPXt9O21lLnZlcnRpY2FsJiYoYmUudmVydGljYWw9bWUudmVydGljYWwpLG1lLmhvcml6b250YWwmJihiZS5ob3Jpem9udGFsPW1lLmhvcml6b250YWwpLG51bGwhPW1lLnRleHRSb3RhdGlvbiYmKGJlLnRleHRSb3RhdGlvbj1tZS50ZXh0Um90YXRpb24pLG1lLmlu''@;'; put 'put ''ZGVudCYmKGJlLmluZGVudD1tZS5pbmRlbnQpLG1lLndyYXBUZXh0JiYoYmUud3JhcFRleHQ9bWUud3JhcFRleHQpLG1lLnNocmlua1RvRml0JiYoYmUuc2hyaW5rVG9GaXQ9RnIobWUuc2hyaW5rVG9GaXQpKSxHLmFsaWdubWVudD1iZTticmVhaztjYXNlIjxwcm90ZWN0aW9uIjpHLnByb3Rl''@;'; put 'put ''Y3Rpb249e30sRnIobWUuaGlkZGVuKSYmKEcucHJvdGVjdGlvbi5oaWRkZW49ITApLG51bGwhPW1lLmxvY2tlZCYmKEcucHJvdGVjdGlvbi5lZGl0YWJsZT0hRnIobWUubG9ja2VkKSk7YnJlYWs7Y2FzZSI8ZXh0IjpRPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpRPSExO2JyZWFrO2RlZmF1bHQ6''@;'; put 'put ''aWYoayYmay5XVEYmJiFRKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrbWVbMF0rIiBpbiBjZWxsU3R5bGVYZnMiKX19KX0oYnQsb3QseHQpLChidD1ldC5tYXRjaChHKSkmJmZ1bmN0aW9uICRJKFMsTCxrKXtMLkNlbGxTdHlsZVhmfHwoTC5DZWxsU3R5bGVYZj1bXSk7dmFyIEc9''@;'; put 'put ''ITE7KFNbMF0ubWF0Y2godG4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihRKXt2YXIgbGU9dnIoUSk7c3dpdGNoKFhpKGxlWzBdKSl7Y2FzZSI8Y2VsbFN0eWxlcyI6Y2FzZSI8Y2VsbFN0eWxlcz4iOmNhc2UiPGNlbGxTdHlsZXMvPiI6Y2FzZSI8L2NlbGxTdHlsZXM+IjpjYXNlIjwveGY+Ijpj''@;'; put 'put ''YXNlIjwvY2VsbFN0eWxlPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8Y2VsbFN0eWxlIjpjYXNlIjxjZWxsU3R5bGUvPiI6ZGVsZXRlIGxlWzBdO3ZhciBtZT0rbGUueGZJZDtpZihMLkNlbGxTdHlsZVhmW21lXSlMLkNlbGxTdHls''@;'; put 'put ''ZVhmW21lXS5zdHlsZT1jbyhsZS5uYW1lKTtlbHNlIGlmKCFsZS5idWlsdGluSWQpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCBDZWxsU3R5bGUgIittZSk7YnJlYWs7Y2FzZSI8ZXh0IjpHPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpHPSExO2JyZWFrO2RlZmF1bHQ6aWYoayYmay5X''@;'; put 'put ''VEYmJiFHKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrbGVbMF0rIiBpbiBjZWxsU3R5bGVzIil9fSl9KGJ0LG90LHh0KSwoYnQ9ZXQubWF0Y2goUSkpJiZmdW5jdGlvbiBHSShTLEwsayl7TC5DZWxsWGY9W107dmFyIEcsUT0hMTsoU1swXS5tYXRjaCh0bil8fFtdKS5mb3JFYWNo''@;'; put 'put ''KGZ1bmN0aW9uKGxlKXt2YXIgbWU9dnIobGUpLHBlPTA7c3dpdGNoKFhpKG1lWzBdKSl7Y2FzZSI8Y2VsbFhmcyI6Y2FzZSI8Y2VsbFhmcz4iOmNhc2UiPGNlbGxYZnMvPiI6Y2FzZSI8L2NlbGxYZnM+IjpjYXNlIjwveGY+IjpjYXNlIjwvYWxpZ25tZW50PiI6Y2FzZSI8L3Byb3RlY3Rpb24+''@;'; put 'put ''IjpjYXNlIjxwcm90ZWN0aW9uLz4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPHhmIjpjYXNlIjx4Zi8+Ijpmb3IoZGVsZXRlKEc9bWUpWzBdLHBlPTA7cGU8Y2YubGVuZ3RoOysrcGUpR1tjZltwZV1dJiYoR1tjZltwZV1dPXBhcnNl''@;'; put 'put ''SW50KEdbY2ZbcGVdXSwxMCkpO2ZvcihwZT0wO3BlPFMzLmxlbmd0aDsrK3BlKUdbUzNbcGVdXSYmKEdbUzNbcGVdXT1GcihHW1MzW3BlXV0pKTtpZihMLk51bWJlckZtdCYmRy5udW1GbXRJZD4zOTIpZm9yKHBlPTM5MjtwZT42MDstLXBlKWlmKEwuTnVtYmVyRm10W0cubnVtRm10SWRdPT1M''@;'; put 'put ''Lk51bWJlckZtdFtwZV0pe0cubnVtRm10SWQ9cGU7YnJlYWt9TC5DZWxsU3R5bGVYZiYmRy54ZklkJiZMLkNlbGxTdHlsZVhmW0cueGZJZF0mJkwuQ2VsbFN0eWxlWGZbRy54ZklkXS5zdHlsZSYmKEcuc3R5bGU9TC5DZWxsU3R5bGVYZltHLnhmSWRdLnN0eWxlKSxMLkNlbGxYZi5wdXNoKEcp''@;'; put 'put ''O2JyZWFrO2Nhc2UiPGFsaWdubWVudCI6Y2FzZSI8YWxpZ25tZW50Lz4iOnZhciBiZT17fTttZS52ZXJ0aWNhbCYmKGJlLnZlcnRpY2FsPW1lLnZlcnRpY2FsKSxtZS5ob3Jpem9udGFsJiYoYmUuaG9yaXpvbnRhbD1tZS5ob3Jpem9udGFsKSxudWxsIT1tZS50ZXh0Um90YXRpb24mJihiZS50''@;'; put 'put ''ZXh0Um90YXRpb249bWUudGV4dFJvdGF0aW9uKSxtZS5pbmRlbnQmJihiZS5pbmRlbnQ9bWUuaW5kZW50KSxtZS53cmFwVGV4dCYmKGJlLndyYXBUZXh0PUZyKG1lLndyYXBUZXh0KSksbWUuc2hyaW5rVG9GaXQmJihiZS5zaHJpbmtUb0ZpdD1GcihtZS5zaHJpbmtUb0ZpdCkpLEcuYWxpZ25t''@;'; put 'put ''ZW50PWJlO2JyZWFrO2Nhc2UiPHByb3RlY3Rpb24iOkcucHJvdGVjdGlvbj17fSxGcihtZS5oaWRkZW4pJiYoRy5wcm90ZWN0aW9uLmhpZGRlbj0hMCksbnVsbCE9bWUubG9ja2VkJiYoRy5wcm90ZWN0aW9uLmVkaXRhYmxlPSFGcihtZS5sb2NrZWQpKTticmVhaztjYXNlIjxBbHRlcm5hdGVD''@;'; put 'put ''b250ZW50IjpjYXNlIjxleHQiOlE9ITA7YnJlYWs7Y2FzZSI8L0FsdGVybmF0ZUNvbnRlbnQ+IjpjYXNlIjwvZXh0PiI6UT0hMTticmVhaztkZWZhdWx0OmlmKGsmJmsuV1RGJiYhUSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK21lWzBdKyIgaW4gY2VsbFhmcyIpfX0pfShidCxv''@;'; put 'put ''dCx4dCksKGJ0PWV0Lm1hdGNoKEJlKSkmJmZ1bmN0aW9uIHBvZShTLEwsayxHKXtMLkRYRnx8KEwuRFhGPVtdKSwoU1swXS5tYXRjaChYSSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFEpe0wuRFhGLnB1c2goS0koUSxMLGssRykpfSl9KGJ0LG90LGN0LHh0KSwoYnQ9ZXQubWF0Y2goTmUpKSYm''@;'; put 'put ''ZnVuY3Rpb24geVUoUyxMLGssRyl7TC5UYWJsZXx8KEwuVGFibGU9W10pLChTWzBdLm1hdGNoKHZVKXx8W10pLmZvckVhY2goZnVuY3Rpb24oUSl7TC5UYWJsZS5wdXNoKGZ1bmN0aW9uIGdvZShTLEwsayxHKXt2YXIgUT0hMSxsZT17fTtyZXR1cm4oUy5tYXRjaCh0bil8fFtdKS5mb3JFYWNo''@;'; put 'put ''KGZ1bmN0aW9uKG1lKXt2YXIgcGU9dnIobWUpO3N3aXRjaChYaShwZVswXSkpe2Nhc2UiPHRhYmxlU3R5bGU+IjpjYXNlIjx0YWJsZVN0eWxlIjpsZS5uYW1lPXBlLm5hbWUucmVwbGFjZSgvXihUYWJsZXxQaXZvdClTdHlsZS8sIiIpLGxlLnJhd25hbWU9cGUubmFtZSxsZS5waXZvdD0hcGUu''@;'; put 'put ''cGl2b3R8fEZyKHBlLnBpdm90KSxsZS50YWJsZT0hcGUudGFibGV8fEZyKHBlLnRhYmxlKTticmVhaztjYXNlIjx0YWJsZVN0eWxlLz4iOmNhc2UiPC90YWJsZVN0eWxlPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8dGFibGVTdHls''@;'; put 'put ''ZUVsZW1lbnQiOmlmKHBlLnR5cGUmJnBlLmR4ZklkKXtpZighTC5EWEZ8fCFMLkRYRlsrcGUuZHhmSWRdKXRocm93IG5ldyBFcnJvcihtZSsiIGNhbm5vdCBmaW5kIERYRiIpO2xlW3BlLnR5cGVdPUwuRFhGWytwZS5keGZJZF19YnJlYWs7Y2FzZSI8ZXh0IjpRPSEwO2JyZWFrO2Nhc2UiPC9l''@;'; put 'put ''eHQ+IjpRPSExO2JyZWFrO2RlZmF1bHQ6aWYoRyYmRy5XVEYmJiFRKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrcGVbMF0rIiBpbiB0YWJsZVN0eWxlIil9fSksbGV9KFEsTCwwLEcpKX0pfShidCxvdCwwLHh0KSwob3QuRm9udHN8fFtdKVswXSYmQnAob3QuRm9udHNbMF0pLG90''@;'; put 'put ''KTpvdH19KCksUUk9anIoInN0eWxlU2hlZXQiLG51bGwse3htbG5zOkJhLm1haW5bMF0sInhtbG5zOnZ0IjpCYS52dH0pO2Z1bmN0aW9uIG1vZShTLEwpe3ZhciBHLGs9W3BpLFFJXTtTLlNTRiYmbnVsbCE9KEc9ZnVuY3Rpb24gZlUoUyl7dmFyIEw9WyI8bnVtRm10cz4iXTtyZXR1cm5bWzUs''@;'; put 'put ''OF0sWzIzLDI2XSxbNDEsNDRdLFs1MCwzOTJdXS5mb3JFYWNoKGZ1bmN0aW9uKGspe2Zvcih2YXIgRz1rWzBdO0c8PWtbMV07KytHKW51bGwhPVNbR10mJihMW0wubGVuZ3RoXT1qcigibnVtRm10IixudWxsLHtudW1GbXRJZDpHLGZvcm1hdENvZGU6aGkoU1tHXSl9KSl9KSwxPT09TC5sZW5n''@;'; put 'put ''dGg/IiI6KExbTC5sZW5ndGhdPSI8L251bUZtdHM+IixMWzBdPWpyKCJudW1GbXRzIixudWxsLHtjb3VudDpMLmxlbmd0aC0yfSkucmVwbGFjZSgiLz4iLCI+IiksTC5qb2luKCIiKSl9KFMuU1NGKSkmJihrW2subGVuZ3RoXT1HKSxrW2subGVuZ3RoXT1mdW5jdGlvbiB3TShTKXt2YXIgTD1b''@;'; put 'put ''XTtyZXR1cm4gUy5mb3JFYWNoKGZ1bmN0aW9uKGspe3ZhciBHPVsiPGZvbnQ+Il07ay5ib2xkJiZHLnB1c2goIjxiLz4iKSxrLml0YWxpYyYmRy5wdXNoKCI8aS8+Iiksay5zdHJpa2UmJkcucHVzaCgiPHN0cmlrZS8+Iiksay5zaGFkb3cmJkcucHVzaCgiPHNoYWRvdy8+IiksY2JbK2sudW5k''@;'; put 'put ''ZXJsaW5lXSYmRy5wdXNoKCc8dSB2YWw9IicrY2JbK2sudW5kZXJsaW5lXSsnIi8+Jyksay5zeiYmRy5wdXNoKCc8c3ogdmFsPSInK2suc3orJyIvPicpLGsuY29sb3ImJkcucHVzaChyMihrLmNvbG9yLCEwKSksay5uYW1lJiZHLnB1c2goJzxuYW1lIHZhbD0iJytrLm5hbWUrJyIvPicpLGsu''@;'; put 'put ''ZmFtaWx5JiZHLnB1c2goJzxmYW1pbHkgdmFsPSInK2suZmFtaWx5KyciLz4nKSxrLnNjaGVtZSYmRy5wdXNoKCc8c2NoZW1lIHZhbD0iJytrLnNjaGVtZSsnIi8+Jyksay52YWxpZ24mJkcucHVzaCgnPHZlcnRBbGlnbiB2YWw9Iicray52YWxpZ24rKCJzdWIiPT1rLnZhbGlnbnx8InN1cGVy''@;'; put 'put ''Ij09ay52YWxpZ24/InNjcmlwdCI6IiIpKyciLz4nKSxMLnB1c2goRy5qb2luKCIiKSsiPC9mb250PiIpfSksJzxmb250cyBjb3VudD0iJytMLmxlbmd0aCsnIj4nK0wuam9pbigiIikrIjwvZm9udHM+In0oKFMuU3R5bGVzfHx7fSkuRm9udHN8fFtdKSxrW2subGVuZ3RoXT1mdW5jdGlvbiBk''@;'; put 'put ''VShTKXt2YXIgTD1bXTtyZXR1cm4gUy5mb3JFYWNoKGZ1bmN0aW9uKGspe3ZhciBHPW51bGw7aWYoay5zdG9wcyYmay5zdG9wcy5sZW5ndGgpe3ZhciBRPXt9O2suYW5nbGUmJihRLmRlZ3JlZT1NYXRoLnJvdW5kKGsuYW5nbGUpKSxHPWsuc3RvcHMubWFwKGZ1bmN0aW9uKGxlKXtyZXR1cm4g''@;'; put 'put ''anIoInN0b3AiLHIyKGxlLCJjb2xvciIsITApLG51bGwhPWxlLnY/e3Bvc2l0aW9uOmxlLnZ9Ont9KX0pLEwucHVzaCgiPGZpbGw+IitqcigiZ3JhZGllbnRGaWxsIixHLmpvaW4oIiIpLFEpKyI8L2ZpbGw+Iil9ZWxzZXtpZihrLmZnQ29sb3Ipe2lmKEc9KEd8fCIiKSsiPGZnQ29sb3IgIixr''@;'; put 'put ''LmZnQ29sb3IudGhlbWUpRys9J3RoZW1lPSInK2suZmdDb2xvci50aGVtZSsnIicrKGsuZmdDb2xvci50aW50PycgdGludD0iJytrLmZnQ29sb3IudGludCsnIic6IiIpKyIvPiI7ZWxzZSBpZihudWxsIT1rLmZnQ29sb3IuaW5kZXgmJm51bGw9PWsuZmdDb2xvci5yZ2IpRys9J2luZGV4ZWQ9''@;'; put 'put ''Iicray5mZ0NvbG9yLmluZGV4KyciLz4nO2Vsc2UgaWYoay5mZ0NvbG9yLmF1dG8pRys9J2F1dG89IjEiLz4nO2Vsc2V7aWYobnVsbD09ay5mZ0NvbG9yLnJnYil0aHJvdyBuZXcgRXJyb3IoIkJhZCBjb2xvciAiK0xlKGsuZmdDb2xvcikuam9pbigifCIpKTtHKz0ncmdiPSJGRicrVDEoay5m''@;'; put 'put ''Z0NvbG9yLnJnYikrJyIvPid9InNvbGlkIj09ay5wYXR0ZXJuVHlwZSYmIWsuYmdDb2xvciYmKGsuYmdDb2xvcj17aW5kZXg6NjR9KX1pZihrLmJnQ29sb3IpaWYoRz0oR3x8IiIpKyI8YmdDb2xvciAiLGsuYmdDb2xvci50aGVtZSlHKz0ndGhlbWU9Iicray5iZ0NvbG9yLnRoZW1lKyciLz4n''@;'; put 'put ''O2Vsc2UgaWYobnVsbCE9ay5iZ0NvbG9yLmluZGV4JiZudWxsPT1rLmJnQ29sb3IucmdiKUcrPSdpbmRleGVkPSInK2suYmdDb2xvci5pbmRleCsnIi8+JztlbHNlIGlmKGsuYmdDb2xvci5hdXRvKUcrPSdhdXRvPSIxIi8+JztlbHNle2lmKG51bGw9PWsuYmdDb2xvci5yZ2IpdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJCYWQgY29sb3IgIitMZShrLmJnQ29sb3IpLmpvaW4oInwiKSk7Rys9J3JnYj0iRkYnK1QxKGsuYmdDb2xvci5yZ2IpKyciLz4nfUwucHVzaCgiPGZpbGw+IitqcigicGF0dGVybkZpbGwiLEcse3BhdHRlcm5UeXBlOmsucGF0dGVyblR5cGV9KSsiPC9maWxsPiIpfX0pLCc8Zmls''@;'; put 'put ''bHMgY291bnQ9IicrTC5sZW5ndGgrJyI+JytMLmpvaW4oIiIpKyI8L2ZpbGxzPiJ9KChTLlN0eWxlc3x8e30pLkZpbGxzfHxbXSksa1trLmxlbmd0aF09ZnVuY3Rpb24gX00oUyl7dmFyIEw9W107cmV0dXJuIFMuZm9yRWFjaChmdW5jdGlvbihrKXt2YXIgRz1bXTtHLnB1c2gobjcoay5sZWZ0''@;'; put 'put ''LCJsZWZ0IikpLEcucHVzaChuNyhrLnJpZ2h0LCJyaWdodCIpKSxHLnB1c2gobjcoay50b3AsInRvcCIpKSxHLnB1c2gobjcoay5ib3R0b20sImJvdHRvbSIpKSxHLnB1c2gobjcoay5kaWFnb25hbCwiZGlhZ29uYWwiKSksTC5wdXNoKCI8Ym9yZGVyPiIrRy5qb2luKCIiKSsiPC9ib3JkZXI+''@;'; put 'put ''Iil9KSwnPGJvcmRlcnMgY291bnQ9IicrTC5sZW5ndGgrJyI+JytMLmpvaW4oIiIpKyI8L2JvcmRlcnM+In0oKFMuU3R5bGVzfHx7fSkuQm9yZGVyc3x8W10pLGtbay5sZW5ndGhdPWZ1bmN0aW9uIGdVKFMpe3ZhciBMPVsnPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjAiIGZpbGxJZD0iMCIg''@;'; put 'put ''Ym9yZGVySWQ9IjAiLz4nXTtpZihTKWZvcih2YXIgaz0xO2s8Uy5sZW5ndGg7KytrKUwucHVzaChqcigieGYiLG51bGwse251bUZtdElkOlNba10ubnVtRm10SWR8fDAsZm9udElkOlNba10uZm9udElkfHwwLGZpbGxJZDpTW2tdLmZpbGxJZHx8MCxib3JkZXJJZDpTW2tdLmJvcmRlcklkfHww''@;'; put 'put ''fSkpO3JldHVybic8Y2VsbFN0eWxlWGZzIGNvdW50PSInK0wubGVuZ3RoKyciPicrTC5qb2luKCIiKSsiPC9jZWxsU3R5bGVYZnM+In0oTC5jZWxsU3R5bGVYZnMpLChHPWZ1bmN0aW9uIENNKFMpe3ZhciBMPVtdO3JldHVybiBMW0wubGVuZ3RoXT1qcigiY2VsbFhmcyIsbnVsbCksUy5mb3JF''@;'; put 'put ''YWNoKGZ1bmN0aW9uKGspe3ZhciBHPWsuYWxpZ25tZW50O2RlbGV0ZSBrLmFsaWdubWVudDt2YXIgUT1rLnByb3RlY3Rpb247ZGVsZXRlIGsucHJvdGVjdGlvbjt2YXIgbGU9Rz9qcigiYWxpZ25tZW50IixudWxsLEcpOiIiO2xlKz1RP2pyKCJwcm90ZWN0aW9uIixudWxsLHtoaWRkZW46US5o''@;'; put 'put ''aWRkZW4/MTowLGxvY2tlZDpRLmVkaXRhYmxlPzA6MX0pOiIiLExbTC5sZW5ndGhdPWpyKCJ4ZiIsbGV8fG51bGwsayksRyYmKGsuYWxpZ25tZW50PUcpLFEmJihrLnByb3RlY3Rpb249USl9KSxMW0wubGVuZ3RoXT0iPC9jZWxsWGZzPiIsMj09PUwubGVuZ3RoPyIiOihMWzBdPWpyKCJjZWxs''@;'; put 'put ''WGZzIixudWxsLHtjb3VudDpMLmxlbmd0aC0yfSkucmVwbGFjZSgiLz4iLCI+IiksTC5qb2luKCIiKSl9KEwuY2VsbFhmcykpJiYoa1trLmxlbmd0aF09Ryksa1trLmxlbmd0aF09ZnVuY3Rpb24gbVUoUyl7dmFyIEw9Wyc8Y2VsbFN0eWxlIG5hbWU9Ik5vcm1hbCIgeGZJZD0iMCIgYnVpbHRp''@;'; put 'put ''bklkPSIwIi8+J107aWYoUylmb3IodmFyIGs9MTtrPFMubGVuZ3RoOysraylMLnB1c2goanIoImNlbGxTdHlsZSIsbnVsbCx7bmFtZTpTW2tdLm5hbWUseGZJZDprfSkpO3JldHVybic8Y2VsbFN0eWxlcyBjb3VudD0iJytMLmxlbmd0aCsnIj4nK0wuam9pbigiIikrIjwvY2VsbFN0eWxlcz4i''@;'; put 'put ''fShMLmNlbGxTdHlsZVhmcyksUy5TdHlsZXMuRFhGfHwoUy5TdHlsZXMuRFhGPVtdKTt2YXIgUT1mdW5jdGlvbiBiVShTLEwsayl7dmFyIEc9Wyc8dGFibGVTdHlsZXMgY291bnQ9IicrKFN8fFtdKS5sZW5ndGgrJyIgZGVmYXVsdFRhYmxlU3R5bGU9IlRhYmxlU3R5bGVNZWRpdW05IiBkZWZh''@;'; put 'put ''dWx0UGl2b3RTdHlsZT0iUGl2b3RTdHlsZU1lZGl1bTQiJ107cmV0dXJuIFMmJlMubGVuZ3RoPyhHWzBdKz0iPiIsUy5mb3JFYWNoKGZ1bmN0aW9uKFEpe0cucHVzaChmdW5jdGlvbiBxSShTLEwpe3ZhciBHPVtdO1sid2hvbGVUYWJsZSIsImhlYWRlclJvdyIsInRvdGFsUm93IiwiZmlyc3RD''@;'; put 'put ''b2x1bW4iLCJsYXN0Q29sdW1uIiwiZmlyc3RSb3dTdHJpcGUiLCJzZWNvbmRSb3dTdHJpcGUiLCJmaXJzdENvbHVtblN0cmlwZSIsInNlY29uZENvbHVtblN0cmlwZSIsImZpcnN0SGVhZGVyQ2VsbCIsImxhc3RIZWFkZXJDZWxsIiwiZmlyc3RUb3RhbENlbGwiLCJsYXN0VG90YWxDZWxsIiwi''@;'; put 'put ''Zmlyc3RTdWJ0b3RhbENvbHVtbiIsInNlY29uZFN1YnRvdGFsQ29sdW1uIiwidGhpcmRTdWJ0b3RhbENvbHVtbiIsImZpcnN0U3VidG90YWxSb3ciLCJzZWNvbmRTdWJ0b3RhbFJvdyIsInRoaXJkU3VidG90YWxSb3ciLCJibGFua1JvdyIsImZpcnN0Q29sdW1uU3ViaGVhZGluZyIsInNlY29u''@;'; put 'put ''ZENvbHVtblN1YmhlYWRpbmciLCJ0aGlyZENvbHVtblN1YmhlYWRpbmciLCJmaXJzdFJvd1N1YmhlYWRpbmciLCJzZWNvbmRSb3dTdWJoZWFkaW5nIiwidGhpcmRSb3dTdWJoZWFkaW5nIiwicGFnZUZpZWxkTGFiZWxzIiwicGFnZUZpZWxkVmFsdWVzIl0uZm9yRWFjaChmdW5jdGlvbihsZSl7''@;'; put 'put ''aWYoU1tsZV0pe3ZhciBtZT1iNyhMLFNbbGVdKTtHLnB1c2goJzx0YWJsZVN0eWxlRWxlbWVudCBkeGZJZD0iJyttZSsnIiB0eXBlPSInK2xlKyciLz4nKX19KTt2YXIgUT0nPHRhYmxlU3R5bGUgY291bnQ9IicrRy5sZW5ndGgrJyIgcGl2b3Q9IicrICshIVMucGl2b3QrJyIgbmFtZT0iJytT''@;'; put 'put ''Lm5hbWUrJyInO3JldHVybiBHLmxlbmd0aD9RKyI+IitHLmpvaW4oIiIpKyI8L3RhYmxlU3R5bGU+IjpRKyIvPiJ9KFEsTCkpfSksRy5qb2luKCIiKSsiPC90YWJsZVN0eWxlcz4iKTpHWzBdKyIvPiJ9KChTLlN0eWxlc3x8e30pLlRhYmxlfHxbXSxTLlN0eWxlcy5EWEYpO3JldHVybiBrW2su''@;'; put 'put ''bGVuZ3RoXT1mdW5jdGlvbiBuYShTLEwpe2lmKCFTLmxlbmd0aClyZXR1cm4nPGR4ZnMgY291bnQ9IjAiLz4nO3ZhciBrPVsnPGR4ZnMgY291bnQ9IicrUy5sZW5ndGgrJyI+J107cmV0dXJuIFMuZm9yRWFjaChmdW5jdGlvbihHKXtrLnB1c2goZnVuY3Rpb24gbW0oUyxMKXt2YXIgaz17Ym9s''@;'; put 'put ''ZDoiYiIsaXRhbGljOiJpIix2YWxpZ246InZlcnRBbGlnbiJ9LEc9WyI8ZHhmPiJdLFE9W10sbGU9W10sbWU9W10sYmU9W107cmV0dXJuIExlKFMpLmZvckVhY2goZnVuY3Rpb24oQmUpe3N3aXRjaChCZSl7Y2FzZSJib2xkIjpjYXNlIml0YWxpYyI6Y2FzZSJzdHJpa2UiOmNhc2UidW5kZXJs''@;'; put 'put ''aW5lIjpjYXNlImNvbG9yIjpjYXNlInZhbGlnbiI6Y2FzZSJzeiI6Y2FzZSJuYW1lIjpjYXNlIm91dGxpbmUiOmNhc2Uic2hhZG93IjpjYXNlImNoYXJzZXQiOmNhc2UiZmFtaWx5IjpjYXNlImNvbmRlbnNlIjpjYXNlImV4dGVuZCI6Y2FzZSJzY2hlbWUiOlEucHVzaChCZSk7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJiZ0NvbG9yIjpjYXNlImZnQ29sb3IiOm1lLnB1c2goQmUpO2JyZWFrO2Nhc2UieiI6bGUucHVzaChCZSk7YnJlYWs7Y2FzZSJ0b3AiOmNhc2UiYm90dG9tIjpjYXNlImxlZnQiOmNhc2UicmlnaHQiOmNhc2UiZGlhZ29uYWwiOmNhc2UidmVydGljYWwiOmNhc2UiaG9yaXpvbnRhbCI6YmUu''@;'; put 'put ''cHVzaChCZSk7YnJlYWs7Y2FzZSJwYXR0ZXJuVHlwZSI6Y2FzZSJkaWFnb25hbERvd24iOmNhc2UiZGlhZ29uYWxVcCI6Y2FzZSJzdG9wcyI6Y2FzZSJkZWdyZWUiOmJyZWFrO2RlZmF1bHQ6dGhyb3ciVW5yZWNvZ25pemVkICIrQmUrIiBpbiBEWEYifX0pLFEubGVuZ3RoPjAmJihHLnB1c2go''@;'; put 'put ''Ijxmb250PiIpLFEuZm9yRWFjaChmdW5jdGlvbihCZSl7c3dpdGNoKEJlKXtjYXNlImJvbGQiOmNhc2UiaXRhbGljIjpjYXNlInN0cmlrZSI6Y2FzZSJvdXRsaW5lIjpjYXNlInNoYWRvdyI6Y2FzZSJjb25kZW5zZSI6Y2FzZSJleHRlbmQiOkcucHVzaCgiPCIrKGtbQmVdfHxCZSkrJyB2YWw9''@;'; put 'put ''IicrKFNbQmVdPyIxIjoiMCIpKyciLz4nKTticmVhaztjYXNlImNvbG9yIjpHLnB1c2gocjIoU1tCZV0sQmUsITApKTticmVhaztjYXNlImZhbWlseSI6Y2FzZSJuYW1lIjpjYXNlInN6IjpjYXNlInNjaGVtZSI6Ry5wdXNoKCI8Iisoa1tCZV18fEJlKSsnIHZhbD0iJytTW0JlXSsnIi8+Jyk7''@;'; put 'put ''YnJlYWs7Y2FzZSJ1bmRlcmxpbmUiOkcucHVzaCgnPHUgdmFsPSInK2NiW1NbQmVdfHwwXSsnIi8+Jyk7YnJlYWs7Y2FzZSJ2YWxpZ24iOkcucHVzaCgnPHZlcnRBbGlnbiB2YWw9IicrUy52YWxpZ24rKCJzdWIiPT1TLnZhbGlnbnx8InN1cGVyIj09Uy52YWxpZ24/InNjcmlwdCI6IiIpKyci''@;'; put 'put ''Lz4nKTticmVhaztkZWZhdWx0OnRocm93IlVuc3VwcG9ydGVkICIrQmUrIiA6IGZvbnQgRFhGIn19KSxHLnB1c2goIjwvZm9udD4iKSksbGUubGVuZ3RoPjAmJkcucHVzaCgnPG51bUZtdCBmb3JtYXRDb2RlPSInK2hpKFMueikrJyIgbnVtRm10SWQ9IicrZnVuY3Rpb24gZlooUyxMKXtpZigi''@;'; put 'put ''bnVtYmVyIj09dHlwZW9mIFMpcmV0dXJuIFM7dmFyIGs9TC5yZXZzc2ZbUz8/IkdlbmVyYWwiXSxHPTYwO2lmKG51bGw9PWspZm9yKDtHPDM5MjsrK0cpaWYobnVsbD09TC5zc2ZbR10pcmV0dXJuIEEubG9hZChTLEcpLEwuc3NmW0ddPVMsTC5yZXZzc2ZbU109RyxHO3JldHVybiBrfShTLnos''@;'; put 'put ''TCkrJyIvPicpLG1lLmxlbmd0aD4wJiYoRy5wdXNoKCI8ZmlsbD4iKSxHLnB1c2goIjxwYXR0ZXJuRmlsbCIrKFMucGF0dGVyblR5cGU/JyBwYXR0ZXJuVHlwZT0iJytTLnBhdHRlcm5UeXBlKyciPic6Ij4iKSksbWUuZm9yRWFjaChmdW5jdGlvbihCZSl7c3dpdGNoKEJlKXtjYXNlInBhdHRl''@;'; put 'put ''cm5UeXBlIjpicmVhaztjYXNlImZnQ29sb3IiOmNhc2UiYmdDb2xvciI6Ry5wdXNoKHIyKFNbQmVdLEJlLCEwKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnN1cHBvcnRlZCAiK0JlKyIgOiBmaWxsIERYRiJ9fSksRy5wdXNoKCI8L3BhdHRlcm5GaWxsPiIpLEcucHVzaCgiPC9maWxsPiIpKSxi''@;'; put 'put ''ZS5sZW5ndGg+MD8oRy5wdXNoKFsiPGJvcmRlciIsbnVsbCE9Uy5kaWFnb25hbERvd24/JyBkaWFnb25hbERvd249IicrICshIVMuZGlhZ29uYWxEb3duKyciJzoiIixudWxsIT1TLmRpYWdvbmFsVXA/JyBkaWFnb25hbFVwPSInKyArISFTLmRpYWdvbmFsVXArJyInOiIiLCI+Il0uam9pbigi''@;'; put 'put ''IikpLGJlLmZvckVhY2goZnVuY3Rpb24oQmUpe0cucHVzaChuNyhTW0JlXSxCZSkpfSksRy5wdXNoKCI8L2JvcmRlcj4iKSk6KG51bGwhPVMuZGlhZ29uYWxEb3dufHxudWxsIT1TLmRpYWdvbmFsVXApJiZHLnB1c2goWyI8Ym9yZGVyIixudWxsIT1TLmRpYWdvbmFsRG93bj8nIGRpYWdvbmFs''@;'; put 'put ''RG93bj0iJysgKyEhUy5kaWFnb25hbERvd24rJyInOiIiLG51bGwhPVMuZGlhZ29uYWxVcD8nIGRpYWdvbmFsVXA9IicrICshIVMuZGlhZ29uYWxVcCsnIic6IiIsIi8+Il0uam9pbigiIikpLDE9PUcubGVuZ3RoPyI8ZHhmLz4iOkcuam9pbigiIikrIjwvZHhmPiJ9KEcsTCkpfSksay5qb2lu''@;'; put 'put ''KCIiKSsiPC9keGZzPiJ9KFMuU3R5bGVzLkRYRixMKSxrW2subGVuZ3RoXT1RLGsubGVuZ3RoPjImJihrW2subGVuZ3RoXT0iPC9zdHlsZVNoZWV0PiIsa1sxXT1rWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxrLmpvaW4oIiIpfWZ1bmN0aW9uIHViKFMsTCxrKXtrfHwoaz1WdCg2KzQqTC5sZW5n''@;'; put 'put ''dGgpKSxrLndyaXRlX3NoaWZ0KDIsUyksU2MoTCxrKTt2YXIgRz1rLmxlbmd0aD5rLmw/ay5zbGljZSgwLGsubCk6aztyZXR1cm4gbnVsbD09ay5sJiYoay5sPWsubGVuZ3RoKSxHfWZ1bmN0aW9uIERnKFMpe3JldHVybntjb2xvcjpHZChTKSxwb3M6V3MoUyl9fUthLlNUWT0iaHR0cDovL3Nj''@;'; put 'put ''aGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9zdHlsZXMiO3ZhciB2bT1bIm5vbmUiLCJzb2xpZCIsIm1lZGl1bUdyYXkiLCJkYXJrR3JheSIsImxpZ2h0R3JheSIsImRhcmtIb3Jpem9udGFsIiwiZGFya1ZlcnRpY2FsIiwiZGFya0Rv''@;'; put 'put ''d24iLCJkYXJrVXAiLCJkYXJrR3JpZCIsImRhcmtUcmVsbGlzIiwibGlnaHRIb3Jpem9udGFsIiwibGlnaHRWZXJ0aWNhbCIsImxpZ2h0RG93biIsImxpZ2h0VXAiLCJsaWdodEdyaWQiLCJsaWdodFRyZWxsaXMiLCJncmF5MTI1IiwiZ3JheTA2MjUiXSx3VT1WZSh2bSksenA9WyJnZW5lcmFs''@;'; put 'put ''IiwibGVmdCIsImNlbnRlciIsInJpZ2h0IiwiZmlsbCIsImp1c3RpZnkiLCJjZW50ZXJDb250aW51b3VzIiwiZGlzdHJpYnV0ZWQiXSxVcD1bInRvcCIsImNlbnRlciIsImJvdHRvbSIsImp1c3RpZnkiLCJkaXN0cmlidXRlZCJdO2Z1bmN0aW9uIHltKFMsTCxrKXtrfHwoaz1WdCgxNikpLGsu''@;'; put 'put ''d3JpdGVfc2hpZnQoMixMfHwwKSxrLndyaXRlX3NoaWZ0KDIsUy5udW1GbXRJZHx8MCksay53cml0ZV9zaGlmdCgyLFMuZm9udElkfHwwKSxrLndyaXRlX3NoaWZ0KDIsUy5maWxsSWR8fDApLGsud3JpdGVfc2hpZnQoMixTLmJvcmRlcklkfHwwKSxrLndyaXRlX3NoaWZ0KDEsUy5hbGlnbm1l''@;'; put 'put ''bnQmJlMuYWxpZ25tZW50LnRleHRSb3RhdGlvbnx8MCksay53cml0ZV9zaGlmdCgxLFMuYWxpZ25tZW50JiZTLmFsaWdubWVudC5pbmRlbnR8fDApO3ZhciBHPTAsUT0wO2lmKFMuYWxpZ25tZW50KXtpZihTLmFsaWdubWVudC5ob3Jpem9udGFsKXt2YXIgbGU9enAuaW5kZXhPZihTLmFsaWdu''@;'; put 'put ''bWVudC5ob3Jpem9udGFsKTtsZTwwJiYobGU9MCksR3w9bGV9aWYoUy5hbGlnbm1lbnQudmVydGljYWwpe3ZhciBtZT1VcC5pbmRleE9mKFMuYWxpZ25tZW50LnZlcnRpY2FsKTttZTwwJiYobWU9MiksR3w9bWU8PDN9Uy5hbGlnbm1lbnQud3JhcFRleHQmJihHfD02NCksUy5hbGlnbm1lbnQu''@;'; put 'put ''c2hyaW5rVG9GaXQmJihRfD0xKX1yZXR1cm4gay53cml0ZV9zaGlmdCgxLEcpLGsud3JpdGVfc2hpZnQoMSxRKSxrLndyaXRlX3NoaWZ0KDEsMCksay53cml0ZV9zaGlmdCgxLDApLGt9dmFyIHQyPVsibm9uZSIsInRoaW4iLCJtZWRpdW0iLCJkYXNoZWQiLCJkb3R0ZWQiLCJ0aGljayIsImRv''@;'; put 'put ''dWJsZSIsImhhaXIiLCJtZWRpdW1EYXNoZWQiLCJkYXNoRG90IiwibWVkaXVtRGFzaERvdCIsImRhc2hEb3REb3QiLCJtZWRpdW1EYXNoRG90RG90Iiwic2xhbnREYXNoRG90Il07ZnVuY3Rpb24gaTcoUyl7dmFyIEw9Uy5yZWFkX3NoaWZ0KDEpO1MubCs9MTt2YXIgaz1HZChTKTtyZXR1cm57''@;'; put 'put ''c3R5bGU6dDJbTF0sY29sb3I6a319ZnVuY3Rpb24gYTcoUyxMKXtyZXR1cm4gTHx8KEw9VnQoMTApKSxTJiZTLnN0eWxlJiYiIiE9Uy5zdHlsZSYmIm5vbmUiIT1TLnN0eWxlJiYtMSE9PXQyLmluZGV4T2YoUy5zdHlsZSk/KEwud3JpdGVfc2hpZnQoMSx0Mi5pbmRleE9mKFMuc3R5bGUpKSxM''@;'; put 'put ''LndyaXRlX3NoaWZ0KDEsMCksUy5jb2xvcj9fZyhTLmNvbG9yLEwpOihMLndyaXRlX3NoaWZ0KDQsMCksTC53cml0ZV9zaGlmdCg0LDApKSk6KEwud3JpdGVfc2hpZnQoMSwwKSxMLndyaXRlX3NoaWZ0KDEsMCksTC53cml0ZV9zaGlmdCg0LDApLEwud3JpdGVfc2hpZnQoNCwwKSksTH1mdW5j''@;'; put 'put ''dGlvbiBkYihTLEwpe3JldHVybiBMfHwoTD1WdCg1MikpLEwud3JpdGVfc2hpZnQoNCxTLnhmSWQpLEwud3JpdGVfc2hpZnQoMiwxKSxMLndyaXRlX3NoaWZ0KDEsK1MuYnVpbHRpbklkKSxMLndyaXRlX3NoaWZ0KDEsMCksWDIoUy5uYW1lfHwiIixMKSxMLmxlbmd0aD5MLmw/TC5zbGljZSgw''@;'; put 'put ''LEwubCk6TH1mdW5jdGlvbiBoYihTLEwpeyFMfHwhTC50aGVtZUVsZW1lbnRzfHwhTC50aGVtZUVsZW1lbnRzLmNsclNjaGVtZXx8bnVsbCE9Uy50aGVtZSYmKFMucmdiPVg4KEwudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbUy50aGVtZV0ucmdiLFMudGludHx8MCkpfWZ1bmN0aW9uIHNSKFMs''@;'; put 'put ''TCl7dmFyIGs9bXIoKTtyZXR1cm4gTW4oaywiQnJ0QmVnaW5TdHlsZVNoZWV0IiksZnVuY3Rpb24gTU0oUyxMKXtpZihMKXt2YXIgaz0wO1tbNSw4XSxbMjMsMjZdLFs0MSw0NF0sWzUwLDM5Ml1dLmZvckVhY2goZnVuY3Rpb24oRyl7Zm9yKHZhciBRPUdbMF07UTw9R1sxXTsrK1EpbnVsbCE9''@;'; put 'put ''TFtRXSYmKytrfSksMCE9ayYmKE1uKFMsIkJydEJlZ2luRm10cyIsWWQoaykpLFtbNSw4XSxbMjMsMjZdLFs0MSw0NF0sWzUwLDM5Ml1dLmZvckVhY2goZnVuY3Rpb24oRyl7Zm9yKHZhciBRPUdbMF07UTw9R1sxXTsrK1EpbnVsbCE9TFtRXSYmTW4oUywiQnJ0Rm10Iix1YihRLExbUV0pKX0p''@;'; put 'put ''LE1uKFMsIkJydEVuZEZtdHMiKSl9fShrLFMuU1NGKSxmdW5jdGlvbiBpUihTLEwpe3ZhciBrPUwubGVuZ3RoOzAhPWsmJihNbihTLCJCcnRCZWdpbkZvbnRzIixZZChrKSksTC5mb3JFYWNoKGZ1bmN0aW9uKEcpe01uKFMsIkJydEZvbnQiLGZ1bmN0aW9uIF9VKFMsTCl7THx8KEw9VnQoMTUz''@;'; put 'put ''KSksTC53cml0ZV9zaGlmdCgyLDIwKlMuc3opLGZ1bmN0aW9uIFRTKFMsTCl7THx8KEw9VnQoMikpLEwud3JpdGVfc2hpZnQoMSwoUy5pdGFsaWM/MjowKXwoUy5zdHJpa2U/ODowKXwoUy5vdXRsaW5lPzE2OjApfChTLnNoYWRvdz8zMjowKXwoUy5jb25kZW5zZT82NDowKXwoUy5leHRlbmQ/''@;'; put 'put ''MTI4OjApKSxMLndyaXRlX3NoaWZ0KDEsMCl9KFMsTCksTC53cml0ZV9zaGlmdCgyLFMuYm9sZD83MDA6NDAwKTt2YXIgaz0wOyJzdXBlciI9PVMudmFsaWduP2s9MToic3ViIj09Uy52YWxpZ24mJihrPTIpLEwud3JpdGVfc2hpZnQoMixrKSxMLndyaXRlX3NoaWZ0KDEsUy51bmRlcmxpbmV8''@;'; put 'put ''fDApLEwud3JpdGVfc2hpZnQoMSxTLmZhbWlseXx8MCksTC53cml0ZV9zaGlmdCgxLFMuY2hhcnNldHx8MCksTC53cml0ZV9zaGlmdCgxLDApLF9nKFMuY29sb3IsTCk7dmFyIEc9MDtyZXR1cm4ibWFqb3IiPT1TLnNjaGVtZSYmKEc9MSksIm1pbm9yIj09Uy5zY2hlbWUmJihHPTIpLEwud3Jp''@;'; put 'put ''dGVfc2hpZnQoMSxHKSxTYyhTLm5hbWUsTCksTC5sZW5ndGg+TC5sP0wuc2xpY2UoMCxMLmwpOkx9KEcpKX0pLE1uKFMsIkJydEVuZEZvbnRzIikpfShrLChTLlN0eWxlc3x8e30pLkZvbnRzfHxbXSksZnVuY3Rpb24geE0oUyxMKXt2YXIgaz1MLmxlbmd0aDswIT1rJiYoTW4oUywiQnJ0QmVn''@;'; put 'put ''aW5GaWxscyIsWWQoaykpLEwuZm9yRWFjaChmdW5jdGlvbihHKXtNbihTLCJCcnRGaWxsIixmdW5jdGlvbiB0UihTLEwpe0x8fChMPVZ0KDg0KSk7dmFyIGs9d1VbUy5wYXR0ZXJuVHlwZV07bnVsbD09ayYmKGs9NDApLEwud3JpdGVfc2hpZnQoNCxrPStrKTt2YXIgRz0wO2lmKDQwIT1rKWZv''@;'; put 'put ''cihfZyhTLmZnQ29sb3J8fHtpbmRleDo2NH0sTCksX2coUy5iZ0NvbG9yfHx7aW5kZXg6NjV9LEwpO0c8MTI7KytHKUwud3JpdGVfc2hpZnQoNCwwKTtlbHNle2Zvcig7Rzw0OysrRylMLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKDtHPDEyOysrRylMLndyaXRlX3NoaWZ0KDQsMCl9cmV0dXJuIEwu''@;'; put 'put ''bGVuZ3RoPkwubD9MLnNsaWNlKDAsTC5sKTpMfShHKSl9KSxNbihTLCJCcnRFbmRGaWxscyIpKX0oaywoUy5TdHlsZXN8fHt9KS5GaWxsc3x8W10pLGZ1bmN0aW9uIEUxKFMsTCl7dmFyIGs9TC5sZW5ndGg7MCE9ayYmKE1uKFMsIkJydEJlZ2luQm9yZGVycyIsWWQoaykpLEwuZm9yRWFjaChm''@;'; put 'put ''dW5jdGlvbihHKXtNbihTLCJCcnRCb3JkZXIiLGZ1bmN0aW9uIHJSKFMsTCl7cmV0dXJuIEx8fChMPVZ0KDUxKSksTC53cml0ZV9zaGlmdCgxLDApLGE3KFMudG9wLEwpLGE3KFMuYm90dG9tLEwpLGE3KFMubGVmdCxMKSxhNyhTLnJpZ2h0LEwpLGE3KG51bGwsTCksTC5sZW5ndGg+TC5sP0wu''@;'; put 'put ''c2xpY2UoMCxMLmwpOkx9KEcpKX0pLE1uKFMsIkJydEVuZEJvcmRlcnMiKSl9KGssKFMuU3R5bGVzfHx7fSkuQm9yZGVyc3x8W10pLGZ1bmN0aW9uIG83KFMsTCl7dmFyIGs9MTtpZihMJiYoaz1MLmxlbmd0aCksTW4oUywiQnJ0QmVnaW5DZWxsU3R5bGVYRnMiLFlkKGspKSxNbihTLCJCcnRY''@;'; put 'put ''RiIseW0oe251bUZtdElkOjAsZm9udElkOjAsZmlsbElkOjAsYm9yZGVySWQ6MH0sNjU1MzUpKSxMKWZvcih2YXIgRz0xO0c8TC5sZW5ndGg7KytHKU1uKFMsIkJydFhGIix5bSh7bnVtRm10SWQ6TFtHXS5udW1GbXRJZHx8MCxmb250SWQ6TFtHXS5mb250SWR8fDAsZmlsbElkOkxbR10uZmls''@;'; put 'put ''bElkfHwwLGJvcmRlcklkOkxbR10uYm9yZGVySWR8fDB9LDY1NTM1KSk7TW4oUywiQnJ0RW5kQ2VsbFN0eWxlWEZzIil9KGssTC5jZWxsU3R5bGVYZnMpLGZ1bmN0aW9uIEVNKFMsTCl7TW4oUywiQnJ0QmVnaW5DZWxsWEZzIixZZChMLmxlbmd0aCkpLEwuZm9yRWFjaChmdW5jdGlvbihrKXtN''@;'; put 'put ''bihTLCJCcnRYRiIseW0oaywwKSl9KSxNbihTLCJCcnRFbmRDZWxsWEZzIil9KGssTC5jZWxsWGZzKSxmdW5jdGlvbiBhUihTLEwpe3ZhciBrPTE7aWYoTCYmKGs9TC5sZW5ndGgpLE1uKFMsIkJydEJlZ2luU3R5bGVzIixZZChrKSksTW4oUywiQnJ0U3R5bGUiLGRiKHt4ZklkOjAsYnVpbHRp''@;'; put 'put ''bklkOjAsbmFtZToiTm9ybWFsIn0pKSxMKWZvcih2YXIgRz0xO0c8TC5sZW5ndGg7KytHKU1uKFMsIkJydFN0eWxlIixkYih7eGZJZDpHLGJ1aWx0aW5JZDowLG5hbWU6TFtHXS5uYW1lfSkpO01uKFMsIkJydEVuZFN0eWxlcyIpfShrLEwuY2VsbFN0eWxlWGZzKSxmdW5jdGlvbiBNVShTKXtN''@;'; put 'put ''bihTLCJCcnRCZWdpbkRYRnMiLFlkKDApKSxNbihTLCJCcnRFbmREWEZzIil9KGspLGZ1bmN0aW9uIG9SKFMpe01uKFMsIkJydEJlZ2luVGFibGVTdHlsZXMiLGZ1bmN0aW9uIFNVKFMsTCxrKXt2YXIgRz1WdCgyMDUyKTtyZXR1cm4gRy53cml0ZV9zaGlmdCg0LFMpLFgyKEwsRyksWDIoayxH''@;'; put 'put ''KSxHLmxlbmd0aD5HLmw/Ry5zbGljZSgwLEcubCk6R30oMCwiVGFibGVTdHlsZU1lZGl1bTkiLCJQaXZvdFN0eWxlTWVkaXVtNCIpKSxNbihTLCJCcnRFbmRUYWJsZVN0eWxlcyIpfShrKSxNbihrLCJCcnRFbmRTdHlsZVNoZWV0Iiksay5lbmQoKX1LYS5USEVNRT0iaHR0cDovL3NjaGVtYXMu''@;'; put 'put ''b3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy90aGVtZSI7dmFyIHhVPVsiPC9hOmx0MT4iLCI8L2E6ZGsxPiIsIjwvYTpsdDI+IiwiPC9hOmRrMj4iLCI8L2E6YWNjZW50MT4iLCI8L2E6YWNjZW50Mj4iLCI8L2E6YWNjZW50Mz4iLCI8L2E6YWNj''@;'; put 'put ''ZW50ND4iLCI8L2E6YWNjZW50NT4iLCI8L2E6YWNjZW50Nj4iLCI8L2E6aGxpbms+IiwiPC9hOmZvbEhsaW5rPiJdO2Z1bmN0aW9uIGxSKFMsTCxrKXtMLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lPVtdO3ZhciBHPXt9OyhTWzBdLm1hdGNoKHRuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oUSl7''@;'; put 'put ''dmFyIGxlPXZyKFEpO3N3aXRjaChsZVswXSl7Y2FzZSI8YTpjbHJTY2hlbWUiOmNhc2UiPC9hOmNsclNjaGVtZT4iOmNhc2UiPC9hOnNyZ2JDbHI+IjpjYXNlIjwvYTpzeXNDbHI+IjpicmVhaztjYXNlIjxhOnNyZ2JDbHIiOkcucmdiPWxlLnZhbDticmVhaztjYXNlIjxhOnN5c0NsciI6Ry5y''@;'; put 'put ''Z2I9bGUubGFzdENscjticmVhaztjYXNlIjxhOmRrMT4iOmNhc2UiPC9hOmRrMT4iOmNhc2UiPGE6bHQxPiI6Y2FzZSI8L2E6bHQxPiI6Y2FzZSI8YTpkazI+IjpjYXNlIjwvYTpkazI+IjpjYXNlIjxhOmx0Mj4iOmNhc2UiPC9hOmx0Mj4iOmNhc2UiPGE6YWNjZW50MT4iOmNhc2UiPC9hOmFj''@;'; put 'put ''Y2VudDE+IjpjYXNlIjxhOmFjY2VudDI+IjpjYXNlIjwvYTphY2NlbnQyPiI6Y2FzZSI8YTphY2NlbnQzPiI6Y2FzZSI8L2E6YWNjZW50Mz4iOmNhc2UiPGE6YWNjZW50ND4iOmNhc2UiPC9hOmFjY2VudDQ+IjpjYXNlIjxhOmFjY2VudDU+IjpjYXNlIjwvYTphY2NlbnQ1PiI6Y2FzZSI8YTph''@;'; put 'put ''Y2NlbnQ2PiI6Y2FzZSI8L2E6YWNjZW50Nj4iOmNhc2UiPGE6aGxpbms+IjpjYXNlIjwvYTpobGluaz4iOmNhc2UiPGE6Zm9sSGxpbms+IjpjYXNlIjwvYTpmb2xIbGluaz4iOiIvIj09PWxlWzBdLmNoYXJBdCgxKT8oTC50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVt4VS5pbmRleE9mKGxlWzBd''@;'; put 'put ''KV09RyxHPXt9KTpHLm5hbWU9bGVbMF0uc2xpY2UoMyxsZVswXS5sZW5ndGgtMSk7YnJlYWs7ZGVmYXVsdDppZihrJiZrLldURil0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCAiK2xlWzBdKyIgaW4gY2xyU2NoZW1lIil9fSl9ZnVuY3Rpb24gRVUoKXt9ZnVuY3Rpb24gVFUoKXt9dmFy''@;'; put 'put ''IEFVPS88YTpjbHJTY2hlbWUoW14+XSopPltcc1xTXSo8XC9hOmNsclNjaGVtZT4vLGtVPS88YTpmb250U2NoZW1lKFtePl0qKT5bXHNcU10qPFwvYTpmb250U2NoZW1lPi8sY1I9LzxhOmZtdFNjaGVtZShbXj5dKik+W1xzXFNdKjxcL2E6Zm10U2NoZW1lPi8sZFI9LzxhOnRoZW1lRWxlbWVu''@;'; put 'put ''dHMoW14+XSopPltcc1xTXSo8XC9hOnRoZW1lRWxlbWVudHM+LztmdW5jdGlvbiBibShTLEwpe2lmKCFTfHwwPT09Uy5sZW5ndGgpcmV0dXJuIGJtKFRNKCkpO3ZhciBrLEc9e307aWYoIShrPVMubWF0Y2goZFIpKSl0aHJvdyBuZXcgRXJyb3IoInRoZW1lRWxlbWVudHMgbm90IGZvdW5kIGlu''@;'; put 'put ''IHRoZW1lIik7cmV0dXJuIGZ1bmN0aW9uIHVSKFMsTCxrKXt2YXIgRztMLnRoZW1lRWxlbWVudHM9e30sW1siY2xyU2NoZW1lIixBVSxsUl0sWyJmb250U2NoZW1lIixrVSxFVV0sWyJmbXRTY2hlbWUiLGNSLFRVXV0uZm9yRWFjaChmdW5jdGlvbihRKXtpZighKEc9Uy5tYXRjaChRWzFdKSkp''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKFFbMF0rIiBub3QgZm91bmQgaW4gdGhlbWVFbGVtZW50cyIpO1FbMl0oRyxMLGspfSl9KGtbMF0sRyxMKSxHLnJhdz1TLEd9ZnVuY3Rpb24gVE0oUyxMKXtpZihMJiZMLnRoZW1lWExTWClyZXR1cm4gTC50aGVtZVhMU1g7aWYoUyYmInN0cmluZyI9PXR5cGVvZiBT''@;'; put 'put ''LnJhdylyZXR1cm4gUy5yYXc7dmFyIGs9W3BpXTtyZXR1cm4ga1trLmxlbmd0aF09JzxhOnRoZW1lIHhtbG5zOmE9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9kcmF3aW5nbWwvMjAwNi9tYWluIiBuYW1lPSJPZmZpY2UgVGhlbWUiPicsa1trLmxlbmd0aF09IjxhOnRoZW1l''@;'; put 'put ''RWxlbWVudHM+IixrW2subGVuZ3RoXT0nPGE6Y2xyU2NoZW1lIG5hbWU9Ik9mZmljZSI+JyxrW2subGVuZ3RoXT0nPGE6ZGsxPjxhOnN5c0NsciB2YWw9IndpbmRvd1RleHQiIGxhc3RDbHI9IjAwMDAwMCIvPjwvYTpkazE+JyxrW2subGVuZ3RoXT0nPGE6bHQxPjxhOnN5c0NsciB2YWw9Indp''@;'; put 'put ''bmRvdyIgbGFzdENscj0iRkZGRkZGIi8+PC9hOmx0MT4nLGtbay5sZW5ndGhdPSc8YTpkazI+PGE6c3JnYkNsciB2YWw9IjFGNDk3RCIvPjwvYTpkazI+JyxrW2subGVuZ3RoXT0nPGE6bHQyPjxhOnNyZ2JDbHIgdmFsPSJFRUVDRTEiLz48L2E6bHQyPicsa1trLmxlbmd0aF09JzxhOmFjY2Vu''@;'; put 'put ''dDE+PGE6c3JnYkNsciB2YWw9IjRGODFCRCIvPjwvYTphY2NlbnQxPicsa1trLmxlbmd0aF09JzxhOmFjY2VudDI+PGE6c3JnYkNsciB2YWw9IkMwNTA0RCIvPjwvYTphY2NlbnQyPicsa1trLmxlbmd0aF09JzxhOmFjY2VudDM+PGE6c3JnYkNsciB2YWw9IjlCQkI1OSIvPjwvYTphY2NlbnQz''@;'; put 'put ''Picsa1trLmxlbmd0aF09JzxhOmFjY2VudDQ+PGE6c3JnYkNsciB2YWw9IjgwNjRBMiIvPjwvYTphY2NlbnQ0Picsa1trLmxlbmd0aF09JzxhOmFjY2VudDU+PGE6c3JnYkNsciB2YWw9IjRCQUNDNiIvPjwvYTphY2NlbnQ1Picsa1trLmxlbmd0aF09JzxhOmFjY2VudDY+PGE6c3JnYkNsciB2''@;'; put 'put ''YWw9IkY3OTY0NiIvPjwvYTphY2NlbnQ2Picsa1trLmxlbmd0aF09JzxhOmhsaW5rPjxhOnNyZ2JDbHIgdmFsPSIwMDAwRkYiLz48L2E6aGxpbms+JyxrW2subGVuZ3RoXT0nPGE6Zm9sSGxpbms+PGE6c3JnYkNsciB2YWw9IjgwMDA4MCIvPjwvYTpmb2xIbGluaz4nLGtbay5sZW5ndGhdPSI8''@;'; put 'put ''L2E6Y2xyU2NoZW1lPiIsa1trLmxlbmd0aF09JzxhOmZvbnRTY2hlbWUgbmFtZT0iT2ZmaWNlIj4nLGtbay5sZW5ndGhdPSI8YTptYWpvckZvbnQ+IixrW2subGVuZ3RoXT0nPGE6bGF0aW4gdHlwZWZhY2U9IkNhbWJyaWEiLz4nLGtbay5sZW5ndGhdPSc8YTplYSB0eXBlZmFjZT0iIi8+Jyxr''@;'; put 'put ''W2subGVuZ3RoXT0nPGE6Y3MgdHlwZWZhY2U9IiIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJKcGFuIiB0eXBlZmFjZT0iXHVmZjJkXHVmZjMzIFx1ZmYzMFx1MzBiNFx1MzBiN1x1MzBjM1x1MzBhZiIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5nIiB0eXBl''@;'; put 'put ''ZmFjZT0iXHViOWQxXHVjNzQwIFx1YWNlMFx1YjUxNSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5zIiB0eXBlZmFjZT0iXHU1YjhiXHU0ZjUzIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbnQiIHR5cGVmYWNlPSJcdTY1YjBcdTdkMzBcdTY2MGVcdTlh''@;'; put 'put ''ZDQiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQXJhYiIgdHlwZWZhY2U9IlRpbWVzIE5ldyBSb21hbiIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIZWJyIiB0eXBlZmFjZT0iVGltZXMgTmV3IFJvbWFuIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9''@;'; put 'put ''IlRoYWkiIHR5cGVmYWNlPSJUYWhvbWEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRXRoaSIgdHlwZWZhY2U9Ik55YWxhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkJlbmciIHR5cGVmYWNlPSJWcmluZGEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlw''@;'; put 'put ''dD0iR3VqciIgdHlwZWZhY2U9IlNocnV0aSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJLaG1yIiB0eXBlZmFjZT0iTW9vbEJvcmFuIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IktuZGEiIHR5cGVmYWNlPSJUdW5nYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQg''@;'; put 'put ''c2NyaXB0PSJHdXJ1IiB0eXBlZmFjZT0iUmFhdmkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQ2FucyIgdHlwZWZhY2U9IkV1cGhlbWlhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkNoZXIiIHR5cGVmYWNlPSJQbGFudGFnZW5ldCBDaGVyb2tlZSIvPicsa1tr''@;'; put 'put ''Lmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJZaWlpIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFlpIEJhaXRpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRpYnQiIHR5cGVmYWNlPSJNaWNyb3NvZnQgSGltYWxheWEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGhh''@;'; put 'put ''YSIgdHlwZWZhY2U9Ik1WIEJvbGkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRGV2YSIgdHlwZWZhY2U9Ik1hbmdhbCIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUZWx1IiB0eXBlZmFjZT0iR2F1dGFtaSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0''@;'; put 'put ''PSJUYW1sIiB0eXBlZmFjZT0iTGF0aGEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU3lyYyIgdHlwZWZhY2U9IkVzdHJhbmdlbG8gRWRlc3NhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik9yeWEiIHR5cGVmYWNlPSJLYWxpbmdhIi8+JyxrW2subGVuZ3RoXT0n''@;'; put 'put ''PGE6Zm9udCBzY3JpcHQ9Ik1seW0iIHR5cGVmYWNlPSJLYXJ0aWthIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikxhb28iIHR5cGVmYWNlPSJEb2tDaGFtcGEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU2luaCIgdHlwZWZhY2U9Iklza29vbGEgUG90YSIvPics''@;'; put 'put ''a1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJNb25nIiB0eXBlZmFjZT0iTW9uZ29saWFuIEJhaXRpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlZpZXQiIHR5cGVmYWNlPSJUaW1lcyBOZXcgUm9tYW4iLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVWlnaCIg''@;'; put 'put ''dHlwZWZhY2U9Ik1pY3Jvc29mdCBVaWdodXIiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR2VvciIgdHlwZWZhY2U9IlN5bGZhZW4iLz4nLGtbay5sZW5ndGhdPSI8L2E6bWFqb3JGb250PiIsa1trLmxlbmd0aF09IjxhOm1pbm9yRm9udD4iLGtbay5sZW5ndGhdPSc8YTpsYXRp''@;'; put 'put ''biB0eXBlZmFjZT0iQ2FsaWJyaSIvPicsa1trLmxlbmd0aF09JzxhOmVhIHR5cGVmYWNlPSIiLz4nLGtbay5sZW5ndGhdPSc8YTpjcyB0eXBlZmFjZT0iIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkpwYW4iIHR5cGVmYWNlPSJcdWZmMmRcdWZmMzMgXHVmZjMwXHUzMGI0XHUz''@;'; put 'put ''MGI3XHUzMGMzXHUzMGFmIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbmciIHR5cGVmYWNlPSJcdWI5ZDFcdWM3NDAgXHVhY2UwXHViNTE1Ii8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbnMiIHR5cGVmYWNlPSJcdTViOGJcdTRmNTMiLz4nLGtbay5sZW5n''@;'; put 'put ''dGhdPSc8YTpmb250IHNjcmlwdD0iSGFudCIgdHlwZWZhY2U9Ilx1NjViMFx1N2QzMFx1NjYwZVx1OWFkNCIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJBcmFiIiB0eXBlZmFjZT0iQXJpYWwiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGViciIgdHlwZWZhY2U9''@;'; put 'put ''IkFyaWFsIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRoYWkiIHR5cGVmYWNlPSJUYWhvbWEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRXRoaSIgdHlwZWZhY2U9Ik55YWxhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkJlbmciIHR5cGVmYWNl''@;'; put 'put ''PSJWcmluZGEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR3VqciIgdHlwZWZhY2U9IlNocnV0aSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJLaG1yIiB0eXBlZmFjZT0iRGF1blBlbmgiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iS25kYSIgdHlw''@;'; put 'put ''ZWZhY2U9IlR1bmdhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1cnUiIHR5cGVmYWNlPSJSYWF2aSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJDYW5zIiB0eXBlZmFjZT0iRXVwaGVtaWEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQ2hlciIg''@;'; put 'put ''dHlwZWZhY2U9IlBsYW50YWdlbmV0IENoZXJva2VlIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IllpaWkiIHR5cGVmYWNlPSJNaWNyb3NvZnQgWWkgQmFpdGkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGlidCIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBIaW1hbGF5''@;'; put 'put ''YSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFhIiB0eXBlZmFjZT0iTVYgQm9saSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJEZXZhIiB0eXBlZmFjZT0iTWFuZ2FsIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRlbHUiIHR5cGVmYWNlPSJH''@;'; put 'put ''YXV0YW1pIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRhbWwiIHR5cGVmYWNlPSJMYXRoYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJTeXJjIiB0eXBlZmFjZT0iRXN0cmFuZ2VsbyBFZGVzc2EiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iT3J5''@;'; put 'put ''YSIgdHlwZWZhY2U9IkthbGluZ2EiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTWx5bSIgdHlwZWZhY2U9IkthcnRpa2EiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTGFvbyIgdHlwZWZhY2U9IkRva0NoYW1wYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2Ny''@;'; put 'put ''aXB0PSJTaW5oIiB0eXBlZmFjZT0iSXNrb29sYSBQb3RhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik1vbmciIHR5cGVmYWNlPSJNb25nb2xpYW4gQmFpdGkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVmlldCIgdHlwZWZhY2U9IkFyaWFsIi8+JyxrW2subGVu''@;'; put 'put ''Z3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlVpZ2giIHR5cGVmYWNlPSJNaWNyb3NvZnQgVWlnaHVyIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikdlb3IiIHR5cGVmYWNlPSJTeWxmYWVuIi8+JyxrW2subGVuZ3RoXT0iPC9hOm1pbm9yRm9udD4iLGtbay5sZW5ndGhdPSI8L2E6Zm9u''@;'; put 'put ''dFNjaGVtZT4iLGtbay5sZW5ndGhdPSc8YTpmbXRTY2hlbWUgbmFtZT0iT2ZmaWNlIj4nLGtbay5sZW5ndGhdPSI8YTpmaWxsU3R5bGVMc3Q+IixrW2subGVuZ3RoXT0nPGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8+PC9hOnNvbGlkRmlsbD4nLGtbay5sZW5ndGhdPSc8''@;'; put 'put ''YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPicsa1trLmxlbmd0aF09IjxhOmdzTHN0PiIsa1trLmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSI1MDAwMCIvPjxhOnNhdE1vZCB2YWw9IjMwMDAwMCIvPjwvYTpzY2hlbWVDbHI+''@;'; put 'put ''PC9hOmdzPicsa1trLmxlbmd0aF09JzxhOmdzIHBvcz0iMzUwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iMzcwMDAiLz48YTpzYXRNb2QgdmFsPSIzMDAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLGtbay5sZW5ndGhdPSc8YTpncyBwb3M9IjEwMDAwMCI+''@;'; put 'put ''PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSIxNTAwMCIvPjxhOnNhdE1vZCB2YWw9IjM1MDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsa1trLmxlbmd0aF09IjwvYTpnc0xzdD4iLGtbay5sZW5ndGhdPSc8YTpsaW4gYW5nPSIxNjIwMDAwMCIgc2NhbGVkPSIxIi8+''@;'; put 'put ''JyxrW2subGVuZ3RoXT0iPC9hOmdyYWRGaWxsPiIsa1trLmxlbmd0aF09JzxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+JyxrW2subGVuZ3RoXT0iPGE6Z3NMc3Q+IixrW2subGVuZ3RoXT0nPGE6Z3MgcG9zPSIwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjEw''@;'; put 'put ''MDAwMCIvPjxhOnNoYWRlIHZhbD0iMTAwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMTMwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxrW2subGVuZ3RoXT0nPGE6Z3MgcG9zPSIxMDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iNTAwMDAiLz48YTpzaGFkZSB2''@;'; put 'put ''YWw9IjEwMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjM1MDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsa1trLmxlbmd0aF09IjwvYTpnc0xzdD4iLGtbay5sZW5ndGhdPSc8YTpsaW4gYW5nPSIxNjIwMDAwMCIgc2NhbGVkPSIwIi8+JyxrW2subGVuZ3RoXT0iPC9hOmdyYWRGaWxsPiIsa1tr''@;'; put 'put ''Lmxlbmd0aF09IjwvYTpmaWxsU3R5bGVMc3Q+IixrW2subGVuZ3RoXT0iPGE6bG5TdHlsZUxzdD4iLGtbay5sZW5ndGhdPSc8YTpsbiB3PSI5NTI1IiBjYXA9ImZsYXQiIGNtcGQ9InNuZyIgYWxnbj0iY3RyIj48YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnNoYWRl''@;'; put 'put ''IHZhbD0iOTUwMDAiLz48YTpzYXRNb2QgdmFsPSIxMDUwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpzb2xpZEZpbGw+PGE6cHJzdERhc2ggdmFsPSJzb2xpZCIvPjwvYTpsbj4nLGtbay5sZW5ndGhdPSc8YTpsbiB3PSIyNTQwMCIgY2FwPSJmbGF0IiBjbXBkPSJzbmciIGFsZ249ImN0ciI+PGE6''@;'; put 'put ''c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8+PC9hOnNvbGlkRmlsbD48YTpwcnN0RGFzaCB2YWw9InNvbGlkIi8+PC9hOmxuPicsa1trLmxlbmd0aF09JzxhOmxuIHc9IjM4MTAwIiBjYXA9ImZsYXQiIGNtcGQ9InNuZyIgYWxnbj0iY3RyIj48YTpzb2xpZEZpbGw+PGE6c2No''@;'; put 'put ''ZW1lQ2xyIHZhbD0icGhDbHIiLz48L2E6c29saWRGaWxsPjxhOnByc3REYXNoIHZhbD0ic29saWQiLz48L2E6bG4+JyxrW2subGVuZ3RoXT0iPC9hOmxuU3R5bGVMc3Q+IixrW2subGVuZ3RoXT0iPGE6ZWZmZWN0U3R5bGVMc3Q+IixrW2subGVuZ3RoXT0iPGE6ZWZmZWN0U3R5bGU+IixrW2su''@;'; put 'put ''bGVuZ3RoXT0iPGE6ZWZmZWN0THN0PiIsa1trLmxlbmd0aF09JzxhOm91dGVyU2hkdyBibHVyUmFkPSI0MDAwMCIgZGlzdD0iMjAwMDAiIGRpcj0iNTQwMDAwMCIgcm90V2l0aFNoYXBlPSIwIj48YTpzcmdiQ2xyIHZhbD0iMDAwMDAwIj48YTphbHBoYSB2YWw9IjM4MDAwIi8+PC9hOnNyZ2JD''@;'; put 'put ''bHI+PC9hOm91dGVyU2hkdz4nLGtbay5sZW5ndGhdPSI8L2E6ZWZmZWN0THN0PiIsa1trLmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZT4iLGtbay5sZW5ndGhdPSI8YTplZmZlY3RTdHlsZT4iLGtbay5sZW5ndGhdPSI8YTplZmZlY3RMc3Q+IixrW2subGVuZ3RoXT0nPGE6b3V0ZXJTaGR3IGJs''@;'; put 'put ''dXJSYWQ9IjQwMDAwIiBkaXN0PSIyMzAwMCIgZGlyPSI1NDAwMDAwIiByb3RXaXRoU2hhcGU9IjAiPjxhOnNyZ2JDbHIgdmFsPSIwMDAwMDAiPjxhOmFscGhhIHZhbD0iMzUwMDAiLz48L2E6c3JnYkNscj48L2E6b3V0ZXJTaGR3Picsa1trLmxlbmd0aF09IjwvYTplZmZlY3RMc3Q+IixrW2su''@;'; put 'put ''bGVuZ3RoXT0iPC9hOmVmZmVjdFN0eWxlPiIsa1trLmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlPiIsa1trLmxlbmd0aF09IjxhOmVmZmVjdExzdD4iLGtbay5sZW5ndGhdPSc8YTpvdXRlclNoZHcgYmx1clJhZD0iNDAwMDAiIGRpc3Q9IjIzMDAwIiBkaXI9IjU0MDAwMDAiIHJvdFdpdGhTaGFw''@;'; put 'put ''ZT0iMCI+PGE6c3JnYkNsciB2YWw9IjAwMDAwMCI+PGE6YWxwaGEgdmFsPSIzNTAwMCIvPjwvYTpzcmdiQ2xyPjwvYTpvdXRlclNoZHc+JyxrW2subGVuZ3RoXT0iPC9hOmVmZmVjdExzdD4iLGtbay5sZW5ndGhdPSc8YTpzY2VuZTNkPjxhOmNhbWVyYSBwcnN0PSJvcnRob2dyYXBoaWNGcm9u''@;'; put 'put ''dCI+PGE6cm90IGxhdD0iMCIgbG9uPSIwIiByZXY9IjAiLz48L2E6Y2FtZXJhPjxhOmxpZ2h0UmlnIHJpZz0idGhyZWVQdCIgZGlyPSJ0Ij48YTpyb3QgbGF0PSIwIiBsb249IjAiIHJldj0iMTIwMDAwMCIvPjwvYTpsaWdodFJpZz48L2E6c2NlbmUzZD4nLGtbay5sZW5ndGhdPSc8YTpzcDNk''@;'; put 'put ''PjxhOmJldmVsVCB3PSI2MzUwMCIgaD0iMjU0MDAiLz48L2E6c3AzZD4nLGtbay5sZW5ndGhdPSI8L2E6ZWZmZWN0U3R5bGU+IixrW2subGVuZ3RoXT0iPC9hOmVmZmVjdFN0eWxlTHN0PiIsa1trLmxlbmd0aF09IjxhOmJnRmlsbFN0eWxlTHN0PiIsa1trLmxlbmd0aF09JzxhOnNvbGlkRmls''@;'; put 'put ''bD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciIvPjwvYTpzb2xpZEZpbGw+JyxrW2subGVuZ3RoXT0nPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBlPSIxIj4nLGtbay5sZW5ndGhdPSI8YTpnc0xzdD4iLGtbay5sZW5ndGhdPSc8YTpncyBwb3M9IjAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48''@;'; put 'put ''YTp0aW50IHZhbD0iNDAwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLGtbay5sZW5ndGhdPSc8YTpncyBwb3M9IjQwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjQ1MDAwIi8+PGE6c2hhZGUgdmFsPSI5OTAwMCIv''@;'; put 'put ''PjxhOnNhdE1vZCB2YWw9IjM1MDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsa1trLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6c2hhZGUgdmFsPSIyMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjI1NTAwMCIvPjwvYTpzY2hlbWVDbHI+''@;'; put 'put ''PC9hOmdzPicsa1trLmxlbmd0aF09IjwvYTpnc0xzdD4iLGtbay5sZW5ndGhdPSc8YTpwYXRoIHBhdGg9ImNpcmNsZSI+PGE6ZmlsbFRvUmVjdCBsPSI1MDAwMCIgdD0iLTgwMDAwIiByPSI1MDAwMCIgYj0iMTgwMDAwIi8+PC9hOnBhdGg+JyxrW2subGVuZ3RoXT0iPC9hOmdyYWRGaWxsPiIs''@;'; put 'put ''a1trLmxlbmd0aF09JzxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+JyxrW2subGVuZ3RoXT0iPGE6Z3NMc3Q+IixrW2subGVuZ3RoXT0nPGE6Z3MgcG9zPSIwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjgwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMzAwMDAwIi8+''@;'; put 'put ''PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxrW2subGVuZ3RoXT0nPGE6Z3MgcG9zPSIxMDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTpzaGFkZSB2YWw9IjMwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMjAwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxrW2subGVuZ3RoXT0iPC9h''@;'; put 'put ''OmdzTHN0PiIsa1trLmxlbmd0aF09JzxhOnBhdGggcGF0aD0iY2lyY2xlIj48YTpmaWxsVG9SZWN0IGw9IjUwMDAwIiB0PSI1MDAwMCIgcj0iNTAwMDAiIGI9IjUwMDAwIi8+PC9hOnBhdGg+JyxrW2subGVuZ3RoXT0iPC9hOmdyYWRGaWxsPiIsa1trLmxlbmd0aF09IjwvYTpiZ0ZpbGxTdHls''@;'; put 'put ''ZUxzdD4iLGtbay5sZW5ndGhdPSI8L2E6Zm10U2NoZW1lPiIsa1trLmxlbmd0aF09IjwvYTp0aGVtZUVsZW1lbnRzPiIsa1trLmxlbmd0aF09IjxhOm9iamVjdERlZmF1bHRzPiIsa1trLmxlbmd0aF09IjxhOnNwRGVmPiIsa1trLmxlbmd0aF09JzxhOnNwUHIvPjxhOmJvZHlQci8+PGE6bHN0''@;'; put 'put ''U3R5bGUvPjxhOnN0eWxlPjxhOmxuUmVmIGlkeD0iMSI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTpsblJlZj48YTpmaWxsUmVmIGlkeD0iMyI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTpmaWxsUmVmPjxhOmVmZmVjdFJlZiBpZHg9IjIiPjxhOnNjaGVtZUNsciB2''@;'; put 'put ''YWw9ImFjY2VudDEiLz48L2E6ZWZmZWN0UmVmPjxhOmZvbnRSZWYgaWR4PSJtaW5vciI+PGE6c2NoZW1lQ2xyIHZhbD0ibHQxIi8+PC9hOmZvbnRSZWY+PC9hOnN0eWxlPicsa1trLmxlbmd0aF09IjwvYTpzcERlZj4iLGtbay5sZW5ndGhdPSI8YTpsbkRlZj4iLGtbay5sZW5ndGhdPSc8YTpz''@;'; put 'put ''cFByLz48YTpib2R5UHIvPjxhOmxzdFN0eWxlLz48YTpzdHlsZT48YTpsblJlZiBpZHg9IjIiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6bG5SZWY+PGE6ZmlsbFJlZiBpZHg9IjAiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6ZmlsbFJlZj48YTplZmZlY3RSZWYg''@;'; put 'put ''aWR4PSIxIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmVmZmVjdFJlZj48YTpmb250UmVmIGlkeD0ibWlub3IiPjxhOnNjaGVtZUNsciB2YWw9InR4MSIvPjwvYTpmb250UmVmPjwvYTpzdHlsZT4nLGtbay5sZW5ndGhdPSI8L2E6bG5EZWY+IixrW2subGVuZ3RoXT0iPC9hOm9i''@;'; put 'put ''amVjdERlZmF1bHRzPiIsa1trLmxlbmd0aF09IjxhOmV4dHJhQ2xyU2NoZW1lTHN0Lz4iLGtbay5sZW5ndGhdPSI8L2E6dGhlbWU+IixrLmpvaW4oIiIpfWZ1bmN0aW9uIFJVKFMpe3ZhciBMPVMucmVhZF9zaGlmdCgyKSxrPVMucmVhZF9zaGlmdCgyKS00LEc9W0xdO3N3aXRjaChMKXtjYXNl''@;'; put 'put ''IDQ6Y2FzZSA1OmNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpjYXNlIDEzOkdbMV09ZnVuY3Rpb24gcFIoUyl7dmFyIEw9e307c3dpdGNoKEwueGNsclR5cGU9Uy5yZWFkX3NoaWZ0KDIpLEwublRpbnRTaGFkZT1TLnJlYWRfc2hpZnQoMiksTC54Y2xyVHlwZSl7Y2FzZSAw''@;'; put 'put ''OmNhc2UgNDpTLmwrPTQ7YnJlYWs7Y2FzZSAxOkwueGNsclZhbHVlPWZ1bmN0aW9uIERVKFMsTCl7cmV0dXJuIHBuKFMsTCl9KFMsNCk7YnJlYWs7Y2FzZSAyOkwueGNsclZhbHVlPUZTKFMpO2JyZWFrO2Nhc2UgMzpMLnhjbHJWYWx1ZT1mdW5jdGlvbiBmUihTKXtyZXR1cm4gUy5yZWFkX3No''@;'; put 'put ''aWZ0KDQpfShTKX1yZXR1cm4gUy5sKz04LEx9KFMpO2JyZWFrO2Nhc2UgNjpHWzFdPWZ1bmN0aW9uIElVKFMsTCl7cmV0dXJuIHBuKFMsTCl9KFMsayk7YnJlYWs7Y2FzZSAxNDpjYXNlIDE1OkdbMV09Uy5yZWFkX3NoaWZ0KDE9PT1rPzE6Mik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIlVucmVjb2duaXplZCBFeHRQcm9wIHR5cGU6ICIrTCsiICIrayl9cmV0dXJuIEd9ZnVuY3Rpb24gT1UoUyxMKXtMLmZvckVhY2goZnVuY3Rpb24oayl7c3dpdGNoKGtbMF0pe2Nhc2UgNDpjYXNlIDU6Y2FzZSA2OmNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpjYXNl''@;'; put 'put ''IDE0OmNhc2UgMTU6YnJlYWs7Y2FzZSAxMzpTLmZvbnQmJlMuZm9udC5jb2xvciYmQXJyYXkuaXNBcnJheShrWzFdLnhjbHJWYWx1ZSkmJihTLmZvbnQuY29sb3IucmdiPWFmKGtbMV0ueGNsclZhbHVlKSl9fSl9ZnVuY3Rpb24gYmwoUyl7cmV0dXJuIFMvOTE0NDAwKmdtfWZ1bmN0aW9uIFBV''@;'; put 'put ''KFMsTCl7dmFyIGs9e307aWYoUy5wb3Mpay54PWJsKFMucG9zLngpLGsueT1ibChTLnBvcy55KTtlbHNle2lmKCFTLmZyb20pdGhyb3ciYmFkIGFuY2hvciBzdGFydCI7ay5yPVMuZnJvbS5yfHwwLGsuYz1TLmZyb20uY3x8MCxTLmZyb20uY09mZiYmKGsueD1ibChTLmZyb20uY09mZikpLFMu''@;'; put 'put ''ZnJvbS5yT2ZmJiYoay55PWJsKFMuZnJvbS5yT2ZmKSl9aWYoUy5leHQpay53PWJsKFMuZXh0LngpLGsuaD1ibChTLmV4dC55KTtlbHNle2lmKCFTLnRvKXRocm93ImJhZCBhbmNob3IgZW5kIjtrLkM9Uy50by5jLGsuUj1TLnRvLnIsUy50by5jT2ZmJiYoay5YPWJsKFMudG8uY09mZikpLFMu''@;'; put 'put ''dG8uck9mZiYmKGsuWT1ibChTLnRvLnJPZmYpKX1yZXR1cm4ga31mdW5jdGlvbiBzNyhTLEwpe3ZhciBrPXt4Oi0xLHk6LTEsdzotMSxoOi0xfTtpZihTLnBvcylrLng9YmwoUy5wb3MueCksay55PWJsKFMucG9zLnkpO2Vsc2V7aWYoIVMuZnJvbSl0aHJvdyJiYWQgYW5jaG9yIHN0YXJ0Ijtr''@;'; put 'put ''Lng9X20oTCxTLmZyb20uYywiQyIpK2JsKFMuZnJvbS5jT2ZmKSxrLnk9X20oTCxTLmZyb20uciwiUiIpK2JsKFMuZnJvbS5yT2ZmKX1pZihTLmV4dClrLnc9YmwoUy5leHQueCksay5oPWJsKFMuZXh0LnkpO2Vsc2V7aWYoIVMudG8pdGhyb3ciYmFkIGFuY2hvciBlbmQiO2sudz1fbShMLFMu''@;'; put 'put ''dG8uYywiQyIpK2JsKFMudG8uY09mZiktay54LGsuaD1fbShMLFMudG8uciwiUiIpK2JsKFMudG8uck9mZiktay55fXJldHVybiBrfWZ1bmN0aW9uIGZiKFMsTCl7dmFyIGs9e3I6LTEsYzotMSx4Oi0xLHk6LTEsUjotMSxDOi0xLFg6LTEsWTotMX07c3dpdGNoKFMudHlwZSl7Y2FzZSJ0d29D''@;'; put 'put ''ZWxsQW5jaG9yIjprLnI9Uy5mcm9tLnIsay55PWJsKFMuZnJvbS5yT2ZmKSxrLlI9Uy50by5yLGsuWT1ibChTLnRvLnJPZmYpLGsuYz1TLmZyb20uYyxrLng9YmwoUy5mcm9tLmNPZmYpLGsuQz1TLnRvLmMsay5YPWJsKFMudG8uY09mZik7YnJlYWs7Y2FzZSJvbmVDZWxsQW5jaG9yIjprLnI9''@;'; put 'put ''Uy5mcm9tLnIsay55PWJsKFMuZnJvbS5yT2ZmKTt2YXIgRz11bChMLGsucixrLnkrYmwoUy5leHQueSkpO2suUj1HWzBdLGsuWT1HWzFdLGsuYz1TLmZyb20uYyxrLng9YmwoUy5mcm9tLmNPZmYpO3ZhciBRPW1SKEwsay5jLGsueCtibChTLmV4dC54KSk7ay5DPVFbMF0say5YPVFbMV07YnJl''@;'; put 'put ''YWs7Y2FzZSJhYnNvbHV0ZUFuY2hvciI6dmFyIGxlPXVsKEwsMCxibChTLnBvcy55KSk7ay5yPWxlWzBdLGsueT1sZVsxXTt2YXIgbWU9dWwoTCxrLnIsay55K2JsKFMuZXh0LnkpKTtrLlI9bWVbMF0say5ZPW1lWzFdO3ZhciBwZT11bChMLDAsYmwoUy5wb3MueCkpO2suYz1wZVswXSxrLng9''@;'; put 'put ''cGVbMV07dmFyIGJlPXVsKEwsay5jLGsueCtibChTLmV4dC54KSk7ay5DPWJlWzBdLGsuWD1iZVsxXTticmVhaztkZWZhdWx0OnRocm93ImJhZCBhbmNob3IgdHlwZSAiK1MudHlwZX1yZXR1cm4ga31mdW5jdGlvbiBwYihTLEwpe3ZhciBrPVMudHJpbSgpLnNwbGl0KC9ccyosXHMqLyk7TFsi''@;'; put 'put ''IXBvcyJdPXtjOitrWzBdLHg6K2tbMV0scjora1syXSx5OitrWzNdLEM6K2tbNF0sWDora1s1XSxSOitrWzZdLFk6K2tbN119fWZ1bmN0aW9uIGdSKFMsTCxrKXt2YXIgRz0tMTtpZihudWxsIT1TLlJ8fG51bGwhPVMuQylHPTA7ZWxzZXtpZihudWxsPT1TLnh8fG51bGw9PVMueXx8bnVsbD09''@;'; put 'put ''Uy53fHxudWxsPT1TLmgpdGhyb3ciY2Fubm90IHBhcnNlIGFuY2hvciAiK0pTT04uc3RyaW5naWZ5KFMpO0c9MSsyKiEoUy5jfHxTLnIpfWlmKEchPUwpe3N3aXRjaChMKXtjYXNlIDA6Y2FzZSAxOmlmKDMhPUcpYnJlYWs7dmFyIFE9bVIoayxTLmN8fDAsUy54fHwwKTtTLmM9UVswXSxTLng9''@;'; put 'put ''UVsxXTt2YXIgbGU9dWwoayxTLnJ8fDAsUy55fHwwKTtTLnI9bGVbMF0sUy55PWxlWzFdO2JyZWFrO2Nhc2UgMzppZigzPT1HKWJyZWFrO3ZhciBtZT1TLmN8fDAscGU9Uy54fHwwO2RlbGV0ZSBTLmMsZGVsZXRlIFMueCxTLng9KG1lP2diKGssbWUpOjApK3BlO3ZhciBiZT1TLnJ8fDAsTmU9''@;'; put 'put ''Uy55fHwwO2RlbGV0ZSBTLnIsZGVsZXRlIFMueSxTLnk9KGJlP2RkKGssYmUpOjApK05lO2JyZWFrO2RlZmF1bHQ6dGhyb3ciY29udmVydF9hbmNob3IgdW5yZWNvZ25pemVkIHR5cGUgIitMfXN3aXRjaChMKXtjYXNlIDA6aWYoMD09RylicmVhazt2YXIgQmU9bVIoayxTLmN8fDAsKFMueHx8''@;'; put 'put ''MCkrUy53KTtkZWxldGUgUy53LFMuQz1CZVswXSxTLlg9QmVbMV07dmFyIEdlPXVsKGssUy5yfHwwLChTLnl8fDApK1MuaCk7ZGVsZXRlIFMuaCxTLlI9R2VbMF0sUy5ZPUdlWzFdO2JyZWFrO2Nhc2UgMTpjYXNlIDM6aWYoMCE9RylicmVhazt2YXIgZXQ9Uy5DfHwwLGN0PVMuWHx8MDtkZWxl''@;'; put 'put ''dGUgUy5DLGRlbGV0ZSBTLlgsUy53PWdiKGssZXQpK2N0LShTLmM/Z2IoayxTLmMpOjApLShTLnh8fDApO3ZhciB4dD1TLlJ8fDAsb3Q9Uy5ZfHwwO2RlbGV0ZSBTLlIsZGVsZXRlIFMuWSxTLmg9ZGQoayx4dCkrb3QtKFMucj9kZChrLFMucik6MCktKFMueXx8MCk7YnJlYWs7ZGVmYXVsdDp0''@;'; put 'put ''aHJvdyJjb252ZXJ0X2FuY2hvciB1bnJlY29nbml6ZWQgdHlwZSAiK0x9fX1mdW5jdGlvbiBuMihTKXt2YXIgTD1bUy5jfHwwLE1hdGgucm91bmQoUy54fHwwKSxTLnJ8fDAsTWF0aC5yb3VuZChTLnl8fDApXTtyZXR1cm4oTD1MLmNvbmNhdChTLmgmJlMudz9bTFswXSxNYXRoLnJvdW5kKExb''@;'; put 'put ''MV0rUy53KSxMWzJdLE1hdGgucm91bmQoTFszXStTLmgpXTpbUy5DfHwwLE1hdGgucm91bmQoUy5YfHwwKSxTLlJ8fDAsTWF0aC5yb3VuZChTLll8fDApXSkpLmpvaW4oIiwgIil9ZnVuY3Rpb24gZGQoUyxMKXtpZighUylyZXR1cm4gMDtmb3IodmFyIGs9MDstLUw+PTA7KXt2YXIgRz0oKFNb''@;'; put 'put ''IiFyb3dzIl18fFtdKVtMXXx8e30pLmhweDtudWxsPT1HJiYoRz0oKFNbIiFzaGVldEZvcm1hdCJdfHx7fSkucm93fHx7fSkuaHB4KSxudWxsPT1HJiYoRz0yNCksays9R31yZXR1cm4ga31mdW5jdGlvbiBnYihTLEwpe2lmKCFTKXJldHVybiAwO2Zvcih2YXIgaz0wOy0tTD49MDspe3ZhciBH''@;'; put 'put ''PSgoU1siIWNvbHMiXXx8W10pW0xdfHx7fSkud3B4O2lmKG51bGw9PUcmJihHPSgoU1siIXNoZWV0Rm9ybWF0Il18fHt9KS5jb2x8fHt9KS53cHgpLG51bGw9PUcpe3ZhciBRPXt3Y2g6OC40M307cjEoUSksU1siIWNvbHMiXSYmKFNbIiFjb2xzIl1bTF09USksRz1RLndweH1rKz1HfXJldHVy''@;'; put 'put ''biBrfWZ1bmN0aW9uIF9tKFMsTCxrKXtyZXR1cm4iQyI9PWs/Z2IoUyxMKTpkZChTLEwpfWZ1bmN0aW9uIHVsKFMsTCxrKXt2YXIgRz1bTCxrXTtpZighUylyZXR1cm4gRztmb3IoOzspe3ZhciBRPShTWyIhcm93cyJdfHxbXSlbR1swXV18fHt9O2lmKFEuaGlkZGVuKSsrR1swXTtlbHNle3Zh''@;'; put 'put ''ciBsZT1RLmhweDtpZihudWxsPT1sZSYmKGxlPSgoU1siIXNoZWV0Rm9ybWF0Il18fHt9KS5yb3d8fHt9KS5ocHgpLG51bGw9PWxlJiYobGU9dzMoMTUpKSxHWzFdPGxlKWJyZWFrO0dbMF0rKyxHWzFdLT1sZX19cmV0dXJuIEd9ZnVuY3Rpb24gbVIoUyxMLGspe3ZhciBHPVtMLGtdO2lmKCFT''@;'; put 'put ''KXJldHVybiBHO2Zvcig7Oyl7dmFyIFE9KFNbIiFjb2xzIl18fFtdKVtHWzBdXXx8e307aWYoUS5oaWRkZW58fDA9PT1RLndweCkrK0dbMF07ZWxzZXt2YXIgbGU9US53cHg7aWYobnVsbD09bGUmJihsZT0oKFNbIiFzaGVldEZvcm1hdCJdfHx7fSkuY29sfHx7fSkud3B4KSxudWxsPT1sZSl7''@;'; put 'put ''dmFyIG1lPXt3Y2g6OC40M307cjEobWUpLFNbIiFjb2xzIl0mJihTWyIhY29scyJdW0dbMF1dPW1lKSxsZT1tZS53cHh9aWYoR1sxXTxsZSlicmVhaztHWzBdKyssR1sxXS09bGV9fXJldHVybiBHfWZ1bmN0aW9uIFQxKFMpe3JldHVybigiMDAwMDAwIisoIm51bWJlciI9PXR5cGVvZiBTP1Mu''@;'; put 'put ''dG9TdHJpbmcoMTYpOlMpKS5zbGljZSgtNil9ZnVuY3Rpb24gcjIoUyxMLGspe3ZhciBHPSJzdHJpbmciPT10eXBlb2YgTD8hIWs6ISFMOyJzdHJpbmciIT10eXBlb2YgTCYmKEw9ImNvbG9yIik7dmFyIFE9IjwiK0wrIiAiO3JldHVybiBTLmF1dG8/USsnYXV0bz0iMSIvPic6Uy5pbmRleCYm''@;'; put 'put ''bnVsbD09Uy5yZ2I/USsnaW5kZXhlZD0iJytTLmluZGV4KyciLz4nOm51bGwhPVMudGhlbWU/USsndGhlbWU9IicrUy50aGVtZSsnIicrKFMudGludD8nIHRpbnQ9IicrUy50aW50KyciJzoiIikrIi8+IjpudWxsIT1TLnJnYj9RKydyZ2I9IicrKEc/IkZGIjoiIikrVDEoUy5yZ2IpKyciLz4n''@;'; put 'put ''OlErIi8+In1mdW5jdGlvbiBBTShTLEwpe2lmKCFTfHxudWxsPT1TLnJnYilyZXR1cm4gTDtmb3IodmFyIGs9KCIwMDAwMDAiK1MucmdiLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpLEc9W2suc2xpY2UoMCwyKSxrLnNsaWNlKDIsNCksay5zbGljZSg0LDYpXS5tYXAoZnVuY3Rpb24obWUpe3Jl''@;'; put 'put ''dHVybiBwYXJzZUludChtZSwxNil9KSxRPTA7UTxnMC5sZW5ndGg7KytRKXt2YXIgbGU9ZzBbUV07aWYobGVbMF09PUdbMF0mJmxlWzFdPT1HWzFdJiZsZVsyXT09R1syXSlyZXR1cm4gUX1yZXR1cm4gZzAubGVuZ3RoPDY0PyhnMC5wdXNoKFtHWzBdLEdbMV0sR1syXV0pLGcwLmxlbmd0aC0x''@;'; put 'put ''KTpMfWZ1bmN0aW9uIFpwKFMpe3ZhciBMPVsiIiwiIiwiIl07aWYoIVMpcmV0dXJuW107dmFyIGs9IiIsRz1TJiZTLnM/ZnVuY3Rpb24gRlUoUyl7dmFyIEw9WyIiLCIiXTtpZighUylyZXR1cm4gTDtpZihTLnN6JiYoTFswXSs9IiYiK1Muc3osTFsxXT0iJjEyIitMWzFdKSxTLm5hbWUmJihM''@;'; put 'put ''WzBdKz0nJiInK1MubmFtZSsnLFJlZ3VsYXIiJyxMWzFdPScmIi0sUmVndWxhciInK0xbMV0pLFMuYm9sZCYmKExbMF0rPSImQiIsTFsxXT0iJkIiK0xbMV0pLFMudW5kZXJsaW5lKXt2YXIgaz0yPT1TLnVuZGVybGluZT8iJkUiOiImVSI7TFswXSs9ayxMWzFdPWsrTFsxXX1yZXR1cm4gUy5p''@;'; put 'put ''dGFsaWMmJihMWzBdKz0iJkkiLExbMV09IiZJIitMWzFdKSxTLmNvbG9yJiZudWxsIT1TLmNvbG9yLnJnYiYmKExbMF0rPSImSyIrVDEoUy5jb2xvci5yZ2IpLExbMV0rPSImSzAwMDAwMCIpLFMuc3RyaWtlJiYoTFswXSs9IiZTIixMWzFdPSImUyIrTFsxXSksInN1cGVyIj09Uy52YWxpZ24m''@;'; put 'put ''JihMWzBdKz0iJlgiLExbMV09IiZYIitMWzFdKSwic3ViIj09Uy52YWxpZ24mJihMWzBdKz0iJlkiLExbMV09IiZZIitMWzFdKSxMfShTLnMpOlsiIiwiIl07cmV0dXJuInN0cmluZyI9PXR5cGVvZiBTP1tTLFMsU106bnVsbCE9Uy5maXJzdHx8bnVsbCE9Uy5ldmVufHxudWxsIT1TLm9kZD8o''@;'; put 'put ''bnVsbCE9Uy5vZGQmJihMWzBdPVpwKFMub2RkKVswXSksdm9pZCAwPT09Uy5maXJzdCYmTFswXSYmKExbMV09TFswXSksbnVsbCE9Uy5maXJzdCYmKExbMV09WnAoUy5maXJzdClbMF0pLG51bGwhPVMuZXZlbiYmKExbMl09WnAoUy5ldmVuKVswXSksTCk6Uy5sZWZ0fHxTLmNlbnRlcnx8Uy5y''@;'; put 'put ''aWdodD8oUy5sZWZ0JiYoays9IiZMIitacChTLmxlZnQpWzBdKSxTLmNlbnRlciYmKGsrPSImQyIrWnAoUy5jZW50ZXIpWzBdKSxTLnJpZ2h0JiYoays9IiZSIitacChTLnJpZ2h0KVswXSksW2ssayxrXSk6bnVsbCE9Uy52P1trPUdbMF0rUy52LnJlcGxhY2UoLyYvZywiJiYiKStHWzFdLGss''@;'; put 'put ''a106bnVsbCE9Uy53P1trPUdbMF0rUy53K0dbMV0sayxrXTpBcnJheS5pc0FycmF5KFMuUik/KFMuUi5mb3JFYWNoKGZ1bmN0aW9uKFEpe2srPVpwKFEpWzBdfSksW2ssayxrXSk6W119dmFyIHZSPXsxOiJMZXR0ZXIiLDM6IlRhYmxvaWQiLDU6IkxlZ2FsIiw3OiJFeGVjdXRpdmUiLDg6IkEz''@;'; put 'put ''Iiw5OiJBNCIsMTE6IkE1IiwxMjoiQjQiLDEzOiJCNSIsMTQ6IkZvbGlvIiwyMDoiRW52ZWxvcGUiLDM3OiJNb25hcmNoIiw3MDoiQTYifSxtYj1WZSh2Uik7S2EuQ09OTj0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlw''@;'; put 'put ''cy9jb25uZWN0aW9ucyI7dmFyIElNPWpyKCJleHRlcm5hbExpbmsiLG51bGwse3htbG5zOkJhLm1haW5bMF19KTtLYS5JTUc9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvaW1hZ2UiLEthLkRSQVc9Imh0dHA6Ly9z''@;'; put 'put ''Y2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZHJhd2luZyI7dmFyIFJNPXt0OiJ0b3AiLGN0cjoiY2VudGVyIixiOiJib3R0b20iLGp1c3Q6InRvcCIsZGlzdDoidG9wIn0sd209e2N0cjoiY2VudGVyIixkaXN0OiJjZW50ZXIiLGp1''@;'; put 'put ''c3Q6ImNlbnRlciIsanVzdExvdzoiY2VudGVyIixsOiJsZWZ0IixyOiJyaWdodCIsdGhhaURpc3Q6ImNlbnRlciJ9O2Z1bmN0aW9uIGJiKCl7dmFyIFM9W3BpXTtyZXR1cm4gUy5wdXNoKCc8eGRyOndzRHIgeG1sbnM6eGRyPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvZHJh''@;'; put 'put ''d2luZ21sLzIwMDYvc3ByZWFkc2hlZXREcmF3aW5nIiB4bWxuczphPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvZHJhd2luZ21sLzIwMDYvbWFpbiIvPicpLFMuam9pbigiIil9ZnVuY3Rpb24gX1IoUyl7dmFyIGssTD1TWyIhZGF0YSJdO3JldHVybiJiYXNlNjQiPT09U1si''@;'; put 'put ''IWRhdGF0eXBlIl0/KChrPUwubWF0Y2goL15kYXRhOi4qLC8pKSYmKEw9TC5zbGljZShrWzBdLmxlbmd0aCkpLF9lLmRlY29kZShMKSk6TH1LYS5UQUJMRT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy90YWJsZSI7''@;'; put 'put ''dmFyIHdSPS88KD86XHcrOik/c2hhcGUoPzpbXlx3XVtePl0qKT8+KFtcc1xTXSo/KTxcLyg/Olx3KzopP3NoYXBlPi9nO2Z1bmN0aW9uIFNSKFMsTCxrLEcpe3ZhciBRPVsyMTYwMCwyMTYwMF0sbGU9WyJtMCwwbDAiLFFbMV0sUVswXSxRWzFdLFFbMF0sIjB4ZSJdLmpvaW4oIiwiKSxtZT1b''@;'; put 'put ''anIoInhtbCIsbnVsbCx7InhtbG5zOnYiOktjX3YsInhtbG5zOm8iOktjX28sInhtbG5zOngiOktjX3gsInhtbG5zOm12IjoiaHR0cDovL21hY1ZtbFNjaGVtYVVyaSJ9KS5yZXBsYWNlKC9cLz4vLCI+IiksanIoIm86c2hhcGVsYXlvdXQiLGpyKCJvOmlkbWFwIixudWxsLHsidjpleHQiOiJl''@;'; put 'put ''ZGl0In0pLHsidjpleHQiOiJlZGl0In0pXSxwZT0xMDI0KlMsYmU9a3x8W107YmUubGVuZ3RoPjAmJm1lLnB1c2goanIoInY6c2hhcGV0eXBlIixbanIoInY6c3Ryb2tlIixudWxsLHtqb2luc3R5bGU6Im1pdGVyIn0pLGpyKCJ2OnBhdGgiLG51bGwse3NoYWRvd29rOiJmIixleHRydXNpb25v''@;'; put 'put ''azoiZiIsc3Ryb2tlb2s6ImYiLGZpbGxvazoiZiIsIm86Y29ubmVjdHR5cGUiOiJyZWN0In0pLGpyKCJvOmxvY2siLG51bGwseyJ2OmV4dCI6ImVkaXQiLHNoYXBldHlwZToidCJ9KV0uam9pbigiIikse2lkOiJfeDAwMDBfdDIwMSIsY29vcmRzaXplOlEuam9pbigiLCIpLCJvOnNwdCI6MjAx''@;'; put 'put ''LHBhdGg6bGV9KSksYmUuZm9yRWFjaChmdW5jdGlvbihCZSl7KytwZSxtZT1tZS5jb25jYXQoZnVuY3Rpb24gd2IoUyxMKXt2YXIgaz17aWQ6Il94MDAwMF9zIitMLHR5cGU6IiNfeDAwMDBfdDIwMSIsc3R5bGU6Im1zby13cmFwLXN0eWxlOnRpZ2h0In07KCJSYWRpbyI9PVNbIiF0eXBlIl18''@;'; put 'put ''fCJDaGVja2JveCI9PVNbIiF0eXBlIl18fCJMaXN0Ij09U1siIXR5cGUiXXx8IkRyb3AiPT1TWyIhdHlwZSJdKSYmKGsuc3Ryb2tlZD0iZiIpLCJMYWJlbCI9PVNbIiF0eXBlIl0mJihrLmZpbGxlZD0iZiIpO3ZhciBHPSIiO1MudCYmRk1bU1siIXR5cGUiXV0mJihHPUZNW1NbIiF0eXBlIl1d''@;'; put 'put ''LnJlcGxhY2UoLyMjIyMvLGhpKFMudCkpKTt2YXIgUT1bXTtyZXR1cm4gUy5tYWNybyYmUS5wdXNoKFpvKCJ4OkZtbGFNYWNybyIsUy5tYWNybykpLFMubGluayYmUS5wdXNoKFpvKCJ4OkZtbGFMaW5rIixTLmxpbmspKSxTLnZhbCYmUS5wdXNoKFpvKCJSYWRpbyI9PVNbIiF0eXBlIl18fCJD''@;'; put 'put ''aGVja2JveCI9PVNbIiF0eXBlIl0/Ing6Q2hlY2tlZCI6Ing6VmFsIixTdHJpbmcoUy52YWwpKSksUy5yZWYmJlEucHVzaChabygieDpGbWxhUmFuZ2UiLFMucmVmKSksUy5zZWwmJiJMaXN0Ij09U1siIXR5cGUiXSYmUS5wdXNoKFpvKCJ4OlNlbFR5cGUiLFMuc2VsKSksUy5taW4mJlEucHVz''@;'; put 'put ''aChabygieDpNaW4iLFN0cmluZyhTLm1pbikpKSxTLm1heCYmUS5wdXNoKFpvKCJ4Ok1heCIsU3RyaW5nKFMubWF4KSkpLFMuc3RlcCYmUS5wdXNoKFpvKCJ4OkluYyIsU3RyaW5nKFMuc3RlcCkpKSxTLnBhZ2UmJlEucHVzaChabygieDpQYWdlIixTdHJpbmcoUy5wYWdlKSkpLFtdLmNvbmNh''@;'; put 'put ''dChbIjx2OnNoYXBlIitkYyhrKSsiPiJdKS5jb25jYXQoTVJbU1siIXR5cGUiXV18fFtdKS5jb25jYXQoW0ddKS5jb25jYXQoWyc8eDpDbGllbnREYXRhIE9iamVjdFR5cGU9IicrU1siIXR5cGUiXSsnIj4nLFpvKCJ4OkFuY2hvciIsbjIoU1siIXBvcyJdKSksWm8oIng6UHJpbnRPYmplY3Qi''@;'; put 'put ''LCJGYWxzZSIpXSkuY29uY2F0KFEpLmNvbmNhdChQTVtTWyIhdHlwZSJdXXx8W10pLmNvbmNhdChbIjwveDpDbGllbnREYXRhPiIsIjwvdjpzaGFwZT4iXSl9KEJlLHBlKSl9KTt2YXIgTmU9THx8W107cmV0dXJuIE5lLmxlbmd0aD4wJiZtZS5wdXNoKGpyKCJ2OnNoYXBldHlwZSIsW2pyKCJ2''@;'; put 'put ''OnN0cm9rZSIsbnVsbCx7am9pbnN0eWxlOiJtaXRlciJ9KSxqcigidjpwYXRoIixudWxsLHtncmFkaWVudHNoYXBlb2s6InQiLCJvOmNvbm5lY3R0eXBlIjoicmVjdCJ9KV0uam9pbigiIikse2lkOiJfeDAwMDBfdDIwMiIsY29vcmRzaXplOlEuam9pbigiLCIpLCJvOnNwdCI6MjAyLHBhdGg6''@;'; put 'put ''bGV9KSksTmUuZm9yRWFjaChmdW5jdGlvbihCZSl7KytwZSxtZT1tZS5jb25jYXQoZnVuY3Rpb24gSE0oUyxMLGspe3ZhciBHPUFvKFNbMF0pLFE9U1sxXS5maWxsfHx7fTtTWzFdLnMmJihRPXt0eXBlOlNbMV0ucy5wYXR0ZXJuVHlwZXx8InNvbGlkIn0sU1sxXS5zLmZnQ29sb3ImJihRLmNv''@;'; put 'put ''bG9yMj1RLmNvbG9yMT0iIyIrVDEoU1sxXS5zLmZnQ29sb3IucmdiKSksU1sxXS5zLmJnQ29sb3ImJihRLmNvbG9yMj0iIyIrVDEoU1sxXS5zLmJnQ29sb3IucmdiKSkpO3ZhciBsZT17Y29sb3IyOlEuY29sb3IyfHwiI0JFRkY4MiIsdHlwZTpRLnR5cGV8fCJncmFkaWVudCJ9OyJncmFkaWVu''@;'; put 'put ''dCI9PWxlLnR5cGUmJihsZS5hbmdsZT0iLTE4MCIpO3ZhciBtZT0iZ3JhZGllbnQiPT1sZS50eXBlP2pyKCJvOmZpbGwiLG51bGwse3R5cGU6ImdyYWRpZW50VW5zY2FsZWQiLCJ2OmV4dCI6InZpZXcifSk6bnVsbCxwZT1qcigidjpmaWxsIixtZSxsZSksYmU9e307U1sxXS5zaGFkb3cmJihT''@;'; put 'put ''WzFdLnNoYWRvdy5jb2xvciYmKGJlLmNvbG9yPVNbMV0uc2hhZG93LmNvbG9yKSxTWzFdLnNoYWRvdy5vbiYmKGJlLm9uPVNbMV0uc2hhZG93Lm9uKSksYmUub2JzY3VyZWQ9InQiO3ZhciBOZT0hMCxCZT0hMCxHZT1TWzFdWyIhcG9zIl0/dW4oU1sxXVsiIXBvcyJdKTpudWxsO3JldHVybiBH''@;'; put 'put ''ZSYmKEJlPW51bGw9PUdlLlImJm51bGw9PUdlLkMmJm51bGw9PUdlLlgmJm51bGw9PUdlLlksTmU9IUdlLnImJiFHZS5jLGdSKEdlLDAsaykpLFsiPHY6c2hhcGUiK2RjKHtpZDoiX3gwMDAwX3MiK0wsdHlwZToiI194MDAwMF90MjAyIixzdHlsZToicG9zaXRpb246YWJzb2x1dGU7IG1hcmdp''@;'; put 'put ''bi1sZWZ0OjgwcHQ7bWFyZ2luLXRvcDo1cHQ7d2lkdGg6MTA0cHQ7aGVpZ2h0OjY0cHQ7ei1pbmRleDoxMCIrKFNbMV0uaGlkZGVuPyI7dmlzaWJpbGl0eTpoaWRkZW4iOiIiKSxmaWxsY29sb3I6US5jb2xvcjF8fCIjRUNGQUQ0IixzdHJva2Vjb2xvcjooU1sxXS5zdHJva2V8fHt9KS5jb2xv''@;'; put 'put ''cnx8IiNlZGVhYTEifSkrIj4iLHBlLGpyKCJ2OnNoYWRvdyIsbnVsbCxiZSksanIoInY6cGF0aCIsbnVsbCx7Im86Y29ubmVjdHR5cGUiOiJub25lIn0pLCc8djp0ZXh0Ym94PjxkaXYgc3R5bGU9InRleHQtYWxpZ246bGVmdCI+PC9kaXY+PC92OnRleHRib3g+JywnPHg6Q2xpZW50RGF0YSBP''@;'; put 'put ''YmplY3RUeXBlPSJOb3RlIj4nLE5lPyI8eDpNb3ZlV2l0aENlbGxzLz4iOiIiLEJlPyI8eDpTaXplV2l0aENlbGxzLz4iOiIiLFpvKCJ4OkFuY2hvciIsR2U/bjIoR2UpOlNbMV0ucmF3YW5jaG9yfHxbRy5jKzEsMCxHLnIrMSwwLEcuYyszLDIwLEcucis1LDIwXS5qb2luKCIsIikpLFpvKCJ4''@;'; put 'put ''OkF1dG9GaWxsIiwiRmFsc2UiKSxabygieDpSb3ciLFN0cmluZyhHLnIpKSxabygieDpDb2x1bW4iLFN0cmluZyhHLmMpKSxTWzFdLmhpZGRlbj8iIjoiPHg6VmlzaWJsZS8+IiwiPC94OkNsaWVudERhdGE+IiwiPC92OnNoYXBlPiJdfShCZSxwZSxHKSl9KSxtZS5wdXNoKCI8L3htbD4iKSxt''@;'; put 'put ''ZS5qb2luKCIiKX12YXIgUE09e0J1dHRvbjpbIjx4OkF1dG9GaWxsPkZhbHNlPC94OkF1dG9GaWxsPiIsIjx4OlRleHRIQWxpZ24+Q2VudGVyPC94OlRleHRIQWxpZ24+IiwiPHg6VGV4dFZBbGlnbj5DZW50ZXI8L3g6VGV4dFZBbGlnbj4iXSxHQm94OlsiPHg6U2l6ZVdpdGhDZWxscy8+Iiwi''@;'; put 'put ''PHg6QXV0b0ZpbGw+RmFsc2U8L3g6QXV0b0ZpbGw+IiwiPHg6Tm9UaHJlZUQvPiJdLExhYmVsOlsiPHg6QXV0b0ZpbGw+RmFsc2U8L3g6QXV0b0ZpbGw+IiwiPHg6QXV0b0xpbmU+RmFsc2U8L3g6QXV0b0xpbmU+Il0sUmFkaW86WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpBdXRvRmlsbD5G''@;'; put 'put ''YWxzZTwveDpBdXRvRmlsbD4iLCI8eDpBdXRvTGluZT5GYWxzZTwveDpBdXRvTGluZT4iLCI8eDpUZXh0VkFsaWduPkNlbnRlcjwveDpUZXh0VkFsaWduPiIsIjx4Ok5vVGhyZWVELz4iXSxDaGVja2JveDpbIjx4OlNpemVXaXRoQ2VsbHMvPiIsIjx4OkF1dG9GaWxsPkZhbHNlPC94OkF1dG9G''@;'; put 'put ''aWxsPiIsIjx4OkF1dG9MaW5lPkZhbHNlPC94OkF1dG9MaW5lPiIsIjx4OlRleHRWQWxpZ24+Q2VudGVyPC94OlRleHRWQWxpZ24+IiwiPHg6Tm9UaHJlZUQvPiJdLERyb3A6WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpBdXRvTGluZT5GYWxzZTwveDpBdXRvTGluZT4iLCI8eDpOb1RocmVl''@;'; put 'put ''RDIvPiIsIjx4OlNlbFR5cGU+U2luZ2xlPC94OlNlbFR5cGU+IiwiPHg6RHJvcFN0eWxlPkNvbWJvPC94OkRyb3BTdHlsZT4iLCI8eDpMQ1Q+Tm9ybWFsPC94OkxDVD4iLCI8eDpEcm9wTGluZXM+NDwveDpEcm9wTGluZXM+Il0sTGlzdDpbIjx4OlNpemVXaXRoQ2VsbHMvPiIsIjx4OkF1dG9M''@;'; put 'put ''aW5lPkZhbHNlPC94OkF1dG9MaW5lPiIsIjx4Ok5vVGhyZWVEMi8+IiwiPHg6TENUPk5vcm1hbDwveDpMQ1Q+IiwiPHg6VmFsPjA8L3g6VmFsPiIsIjx4Ok1pbj4wPC94Ok1pbj4iLCI8eDpNYXg+NTwveDpNYXg+IiwiPHg6SW5jPjE8L3g6SW5jPiIsIjx4OlBhZ2U+NDwveDpQYWdlPiIsIjx4''@;'; put 'put ''OkR4PjE1PC94OkR4PiJdLFNjcm9sbDpbIjx4OlNpemVXaXRoQ2VsbHMvPiIsIjx4Okhvcml6Lz4iLCI8eDpEeD4xNTwveDpEeD4iXSxTcGluOlsiPHg6RHg+MTU8L3g6RHg+Il19LEZNPXtCdXR0b246Ijx2OnRleHRib3ggc3R5bGU9J21zby1kaXJlY3Rpb24tYWx0OmF1dG8nIG86c2luZ2xl''@;'; put 'put ''Y2xpY2s9J2YnPjxkaXYgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Zm9udCBmYWNlPSdDYWxpYnJpJyBzaXplPScyNDAnIGNvbG9yPScjMDAwMDAwJz4jIyMjPC9mb250PjwvZGl2Pjwvdjp0ZXh0Ym94PiIsR0JveDoiPHY6dGV4dGJveCBzdHlsZT0nbXNvLWRpcmVjdGlvbi1hbHQ6YXV0''@;'; put 'put ''bycgbzpzaW5nbGVjbGljaz0nZic+PGRpdiBzdHlsZT0ndGV4dC1hbGlnbjpsZWZ0Jz48Zm9udCBmYWNlPSdMdWNpZGEgR3JhbmRlJyBzaXplPScyNjAnIGNvbG9yPScjMDAwMDAwJz4jIyMjPC9mb250PjwvZGl2Pjwvdjp0ZXh0Ym94PiIsUmFkaW86Ijx2OnRleHRib3ggc3R5bGU9J21zby1k''@;'; put 'put ''aXJlY3Rpb24tYWx0OmF1dG8nIG86c2luZ2xlY2xpY2s9J2YnPjxkaXYgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+PGZvbnQgZmFjZT0nTHVjaWRhIEdyYW5kZScgc2l6ZT0nMjYwJyBjb2xvcj0nYXV0byc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLExhYmVsOiI8djp0ZXh0Ym94''@;'; put 'put ''IHN0eWxlPSdtc28tZGlyZWN0aW9uLWFsdDphdXRvJyBvOnNpbmdsZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmxlZnQnPjxmb250IGZhY2U9J0x1Y2lkYSBHcmFuZGUnIHNpemU9JzI2MCcgY29sb3I9JyMwMDAwMDAnPiMjIyM8L2ZvbnQ+PC9kaXY+PC92OnRleHRib3g+IixD''@;'; put 'put ''aGVja2JveDoiPHY6dGV4dGJveCBzdHlsZT0nbXNvLWRpcmVjdGlvbi1hbHQ6YXV0bycgbzpzaW5nbGVjbGljaz0nZic+PGRpdiBzdHlsZT0ndGV4dC1hbGlnbjpsZWZ0Jz48Zm9udCBmYWNlPSdMdWNpZGEgR3JhbmRlJyBzaXplPScyNjAnIGNvbG9yPScjMDAwMDAwJz4jIyMjPC9mb250Pjwv''@;'; put 'put ''ZGl2Pjwvdjp0ZXh0Ym94PiIsc2hlZXRqczoiZGFmdXEifSxNUj17QnV0dG9uOlsnPHY6ZmlsbCBjb2xvcjI9IiNmMGYwZjAgWzY3XSIgbzpkZXRlY3Rtb3VzZWNsaWNrPSJ0Ii8+JywnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiLz4nXSxHQm94OlsnPG86bG9jayB2OmV4dD0i''@;'; put 'put ''ZWRpdCIgcm90YXRpb249InQiLz4nXSxEcm9wOlsnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiIHRleHQ9InQiLz4nXSxMaXN0OlsnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiIHRleHQ9InQiLz4nXSxTcGluOlsnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRp''@;'; put 'put ''b249InQiIHRleHQ9InQiLz4nXSxTY3JvbGw6Wyc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIgdGV4dD0idCIvPiddLExhYmVsOlsnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiLz4nXSxSYWRpbzpbJzx2OnBhdGggc2hhZG93b2s9InQiIHN0cm9rZW9rPSJ0IiBm''@;'; put 'put ''aWxsb2s9InQiLz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIvPiddLENoZWNrYm94OlsnPHY6cGF0aCBzaGFkb3dvaz0idCIgc3Ryb2tlb2s9InQiIGZpbGxvaz0idCIvPicsJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sc2hlZXRqczpbXX07ZnVu''@;'; put 'put ''Y3Rpb24gQ20oUyxMLGssRyl7dmFyIFE9eyIhaWQiOnt9fSxsZT1banIoInhtbCIsbnVsbCx7InhtbG5zOnYiOktjX3YsInhtbG5zOm8iOktjX28sInhtbG5zOngiOktjX3h9KS5yZXBsYWNlKC9cLz4vLCI+IiksanIoIm86c2hhcGVsYXlvdXQiLGpyKCJvOmlkbWFwIixudWxsLHsidjpleHQi''@;'; put 'put ''OiJlZGl0IixkYXRhOjF9KSx7InY6ZXh0IjoiZWRpdCJ9KSwnPHY6c2hhcGV0eXBlIGlkPSJfeDAwMDBfdDc1IiBjb29yZHNpemU9IjIxNjAwLDIxNjAwIiBvOnNwdD0iNzUiIG86cHJlZmVycmVsYXRpdmU9InQiIHBhdGg9Im1ANEA1bEA0QDExQDlAMTFAOUA1eGUiIGZpbGxlZD0iZiIgc3Ry''@;'; put 'put ''b2tlZD0iZiI+JywnPHY6c3Ryb2tlIGpvaW5zdHlsZT0ibWl0ZXIiLz4nLCI8djpmb3JtdWxhcz4iLCc8djpmIGVxbj0iaWYgbGluZURyYXduIHBpeGVsTGluZVdpZHRoIDAiLz4nLCc8djpmIGVxbj0ic3VtIEAwIDEgMCIvPicsJzx2OmYgZXFuPSJzdW0gMCAwIEAxIi8+JywnPHY6ZiBlcW49''@;'; put 'put ''InByb2QgQDIgMSAyIi8+JywnPHY6ZiBlcW49InByb2QgQDMgMjE2MDAgcGl4ZWxXaWR0aCIvPicsJzx2OmYgZXFuPSJwcm9kIEAzIDIxNjAwIHBpeGVsSGVpZ2h0Ii8+JywnPHY6ZiBlcW49InN1bSBAMCAwIDEiLz4nLCc8djpmIGVxbj0icHJvZCBANiAxIDIiLz4nLCc8djpmIGVxbj0icHJv''@;'; put 'put ''ZCBANyAyMTYwMCBwaXhlbFdpZHRoIi8+JywnPHY6ZiBlcW49InN1bSBAOCAyMTYwMCAwIi8+JywnPHY6ZiBlcW49InByb2QgQDcgMjE2MDAgcGl4ZWxIZWlnaHQiLz4nLCc8djpmIGVxbj0ic3VtIEAxMCAyMTYwMCAwIi8+JywiPC92OmZvcm11bGFzPiIsJzx2OnBhdGggbzpleHRydXNpb25v''@;'; put 'put ''az0iZiIgZ3JhZGllbnRzaGFwZW9rPSJ0IiBvOmNvbm5lY3R0eXBlPSJyZWN0Ii8+JywnPG86bG9jayB2OmV4dD0iZWRpdCIgYXNwZWN0cmF0aW89InQiLz4nLCI8L3Y6c2hhcGV0eXBlPiJdLG1lPTE7WyJoZWFkZXIiLCJmb290ZXIiXS5mb3JFYWNoKGZ1bmN0aW9uKHBlKXtHW3BlXSYmWyJv''@;'; put 'put ''ZGQiLCJldmVuIiwiZmlyc3QiXS5mb3JFYWNoKGZ1bmN0aW9uKGJlKXtHW3BlXVtiZV0mJlsibGVmdCIsInJpZ2h0IiwiY2VudGVyIl0uZm9yRWFjaChmdW5jdGlvbihOZSl7aWYoQXJyYXkuaXNBcnJheShHW3BlXVtiZV1bTmVdKSlmb3IodmFyIEJlPTA7QmU8R1twZV1bYmVdW05lXS5sZW5n''@;'; put 'put ''dGg7KytCZSlpZihHW3BlXVtiZV1bTmVdW0JlXSl7dmFyIEdlPUdbcGVdW2JlXVtOZV1bQmVdO2lmKCJyZW1vdGUiPT1HZVsiIWRhdGF0eXBlIl0pdGhyb3ciQ2Fubm90IHVzZSBsaW5rZWQgaW1hZ2UgaW4gaGVhZGVyIG9yIGZvb3RlciI7Zm9yKDtRcihTLCJ4bC9tZWRpYS9pbWFnZSIrbWUr''@;'; put 'put ''Ii5qcGciKTspKyttZTtTLmZpbGUoInhsL21lZGlhL2ltYWdlIittZSsiLmpwZyIsX1IoR2UpLHtiaW5hcnk6ITB9KSxUcyhRLC0xLCIuLi9tZWRpYS9pbWFnZSIrbWUrIi5qcGciLEthLklNRyk7dmFyIGV0PSJfeDAwMDBfcyIrKDEwMjUrR2UuX2NudCksY3Q9InBvc2l0aW9uOmFic29sdXRl''@;'; put 'put ''O21hcmdpbi1sZWZ0OjA7bWFyZ2luLXRvcDowO3otaW5kZXg6IisoR2UuX2NudCsxKSsiOyI7Y3QrPSJ3aWR0aDoiK0dlWyIhcG9zIl0udysicHg7IixjdCs9ImhlaWdodDoiK0dlWyIhcG9zIl0uaCsicHg7Ijt2YXIgeHQ9TmUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrcGUuY2hhckF0KDAp''@;'; put 'put ''LnRvVXBwZXJDYXNlKCk7Im9kZCIhPT1iZSYmKHh0Kz1iZS50b1VwcGVyQ2FzZSgpKSxHW3BlXVtiZV1bTmVdLmxlbmd0aD4xJiYoeHQrPUJlKSxsZS5wdXNoKGpyKCJ2OnNoYXBlIixbJzx2OmltYWdlZGF0YSBvOnJlbGlkPSJySWQnKyhHZS5fY250KzEpKyciIG86dGl0bGU9InNoZWV0anMi''@;'; put 'put ''Lz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIvPiddLmpvaW4oIiIpLHtpZDp4dCwibzpzcGlkIjpldCx0eXBlOiIjX3gwMDAwX3Q3NSIsc3R5bGU6Y3R9KSl9fSl9KX0pLGxlLnB1c2goIjwveG1sPiIpLFMuZmlsZSgieGwvZHJhd2luZ3Mvdm1sRHJhd2luZyIraysiSEYu''@;'; put 'put ''dm1sIixsZS5qb2luKCIiKSksUy5maWxlKCJ4bC9kcmF3aW5ncy9fcmVscy92bWxEcmF3aW5nIitrKyJIRi52bWwucmVscyIsSDAoUSkpfUthLkNNTlQ9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY29tbWVudHMi''@;'; put 'put ''O3ZhciBib2U9anIoImNvbW1lbnRzIixudWxsLHt4bWxuczpCYS5tYWluWzBdfSk7ZnVuY3Rpb24gQ2IoUyl7dmFyIEw9W3BpLGJvZV0saz1bXTtyZXR1cm4gTC5wdXNoKCI8YXV0aG9ycz4iKSxTLmZvckVhY2goZnVuY3Rpb24oRyl7R1sxXS5mb3JFYWNoKGZ1bmN0aW9uKFEpe3ZhciBsZT1o''@;'; put 'put ''aShRLmEpO2suaW5kZXhPZihsZSk+LTF8fChrLnB1c2gobGUpLEwucHVzaCgiPGF1dGhvcj4iK2xlKyI8L2F1dGhvcj4iKSl9KX0pLEwucHVzaCgiPC9hdXRob3JzPiIpLEwucHVzaCgiPGNvbW1lbnRMaXN0PiIpLFMuZm9yRWFjaChmdW5jdGlvbihHKXtHWzFdLmZvckVhY2goZnVuY3Rpb24o''@;'; put 'put ''USl7TC5wdXNoKCc8Y29tbWVudCByZWY9IicrR1swXSsnIiBhdXRob3JJZD0iJytrLmluZGV4T2YoaGkoUS5hKSkrJyI+PHRleHQ+JyksTC5wdXNoKFEuUj9XOChRLlIpOlpvKCJ0IixudWxsPT1RLnQ/IiI6aGkoUS50KSkpLEwucHVzaCgiPC90ZXh0PjwvY29tbWVudD4iKX0pfSksTC5wdXNo''@;'; put 'put ''KCI8L2NvbW1lbnRMaXN0PiIpLEwubGVuZ3RoPjImJihMW0wubGVuZ3RoXT0iPC9jb21tZW50cz4iLExbMV09TFsxXS5yZXBsYWNlKCIvPiIsIj4iKSksTC5qb2luKCIiKX12YXIgTk09a2w7ZnVuY3Rpb24gQVIoUyl7dmFyIEw9bXIoKSxrPVtdO3JldHVybiBNbihMLCJCcnRCZWdpbkNvbW1l''@;'; put 'put ''bnRzIiksTW4oTCwiQnJ0QmVnaW5Db21tZW50QXV0aG9ycyIpLFMuZm9yRWFjaChmdW5jdGlvbihHKXtHWzFdLmZvckVhY2goZnVuY3Rpb24oUSl7ay5pbmRleE9mKFEuYSk+LTF8fChrLnB1c2goUS5hLnNsaWNlKDAsNTQpKSxNbihMLCJCcnRDb21tZW50QXV0aG9yIixmdW5jdGlvbiBFUihT''@;'; put 'put ''KXtyZXR1cm4gU2MoUy5zbGljZSgwLDU0KSl9KFEuYSkpKX0pfSksTW4oTCwiQnJ0RW5kQ29tbWVudEF1dGhvcnMiKSxNbihMLCJCcnRCZWdpbkNvbW1lbnRMaXN0IiksUy5mb3JFYWNoKGZ1bmN0aW9uKEcpe0dbMV0uZm9yRWFjaChmdW5jdGlvbihRKXtRLmlhdXRob3I9ay5pbmRleE9mKFEu''@;'; put 'put ''YSk7dmFyIGxlPXtzOkFvKEdbMF0pLGU6QW8oR1swXSl9O01uKEwsIkJydEJlZ2luQ29tbWVudCIsZnVuY3Rpb24gU20oUyxMKXtyZXR1cm4gbnVsbD09TCYmKEw9VnQoMzYpKSxMLndyaXRlX3NoaWZ0KDQsU1sxXS5pYXV0aG9yKSxkMyhTWzBdLEwpLEwud3JpdGVfc2hpZnQoNCwwKSxMLndy''@;'; put 'put ''aXRlX3NoaWZ0KDQsMCksTC53cml0ZV9zaGlmdCg0LDApLEwud3JpdGVfc2hpZnQoNCwwKSxMfShbbGUsUV0pKSxRLnQmJlEudC5sZW5ndGg+MCYmTW4oTCwiQnJ0Q29tbWVudFRleHQiLGZ1bmN0aW9uIEVwKFMsTCl7dmFyIGs9ITE7cmV0dXJuIG51bGw9PUwmJihrPSEwLEw9VnQoMjMrNCpT''@;'; put 'put ''LnQubGVuZ3RoKSksTC53cml0ZV9zaGlmdCgxLDEpLFNjKFMudCxMKSxMLndyaXRlX3NoaWZ0KDQsMSksZnVuY3Rpb24geWcoUyxMKXtMfHwoTD1WdCg0KSksTC53cml0ZV9zaGlmdCgyLFMuaWNofHwwKSxMLndyaXRlX3NoaWZ0KDIsUy5pZm50fHwwKX0oe2ljaDowLGlmbnQ6MH0sTCksaz9M''@;'; put 'put ''LnNsaWNlKDAsTC5sKTpMfShRKSksTW4oTCwiQnJ0RW5kQ29tbWVudCIpLGRlbGV0ZSBRLmlhdXRob3J9KX0pLE1uKEwsIkJydEVuZENvbW1lbnRMaXN0IiksTW4oTCwiQnJ0RW5kQ29tbWVudHMiKSxMLmVuZCgpfXZhciBEUj1bInhsc2IiLCJ4bHNtIiwieGxhbSIsImJpZmY4IiwieGxhIl07''@;'; put 'put ''S2EuRFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZGlhbG9nc2hlZXQiLEthLk1TPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L3JlbGF0aW9uc2hpcHMveGxNYWNyb3NoZWV0Ijt2''@;'; put 'put ''YXIganM9ZnVuY3Rpb24oKXt2YXIgUz0vKF58W15BLVphLXpfXSlSKFxbPy0/XGQrXF18WzEtOV1cZCp8KUMoXFs/LT9cZCtcXXxbMS05XVxkKnwpKD8hW0EtWmEtejAtOV9dKS9nLEw9e3I6MCxjOjB9O2Z1bmN0aW9uIGsoRyxRLGxlLG1lKXt2YXIgcGU9ITEsYmU9ITE7MD09bGUubGVuZ3Ro''@;'; put 'put ''P2JlPSEwOiJbIj09bGUuY2hhckF0KDApJiYoYmU9ITAsbGU9bGUuc2xpY2UoMSwtMSkpLDA9PW1lLmxlbmd0aD9wZT0hMDoiWyI9PW1lLmNoYXJBdCgwKSYmKHBlPSEwLG1lPW1lLnNsaWNlKDEsLTEpKTt2YXIgTmU9bGUubGVuZ3RoPjA/MHxwYXJzZUludChsZSwxMCk6MCxCZT1tZS5sZW5n''@;'; put 'put ''dGg+MD8wfHBhcnNlSW50KG1lLDEwKTowO3JldHVybiBwZT9CZSs9TC5jOi0tQmUsYmU/TmUrPUwucjotLU5lLFErKHBlPyIiOiIkIikrRm8oQmUpKyhiZT8iIjoiJCIpK0JpKE5lKX1yZXR1cm4gZnVuY3Rpb24oUSxsZSl7cmV0dXJuIEw9bGUsUS5yZXBsYWNlKFMsayl9fSgpLEdwPS8oXnxb''@;'; put 'put ''Xi5fQS1aMC05XSkoWyRdPykoW0EtWl17MSwyfXxbQS1XXVtBLVpdezJ9fFhbQS1FXVtBLVpdfFhGW0EtRF0pKFskXT8pKDEwWzAtM11cZHs0fXwxMDRbMC03XVxkezN9fDEwNDhbMC00XVxkezJ9fDEwNDg1WzAtNl1cZHwxMDQ4NTdbMC02XXxbMS05XVxkezAsNX0pKD8hW18uXChBLVphLXow''@;'; put 'put ''LTldKS9nLCRwPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKEwsayl7cmV0dXJuIEwucmVwbGFjZShHcCxmdW5jdGlvbihHLFEsbGUsbWUscGUsYmUpe3ZhciBOZT1YbChtZSktKGxlPzA6ay5jKSxCZT1sbChiZSktKHBlPzA6ay5yKTtyZXR1cm4gUSsiUiIrKDA9PUJlPyIiOnBlP0JlKzE6''@;'; put 'put ''IlsiK0JlKyJdIikrIkMiKygwPT1OZT8iIjpsZT9OZSsxOiJbIitOZSsiXSIpfSl9fSgpO2Z1bmN0aW9uIHVmKFMsTCl7cmV0dXJuIFMucmVwbGFjZShHcCxmdW5jdGlvbihrLEcsUSxsZSxtZSxwZSl7cmV0dXJuIEcrKCIkIj09UT9RK2xlOkZvKFhsKGxlKStMLmMpKSsoIiQiPT1tZT9tZStw''@;'; put 'put ''ZTpCaShsbChwZSkrTC5yKSl9KS5yZXBsYWNlKC8oXGQrKTooXGQrKS9nLGZ1bmN0aW9uKGssRyxRKXtyZXR1cm4gQmkobGwoRykrTC5yKSsiOiIrQmkobGwoUSkrTC5yKX0pfWZ1bmN0aW9uIGM3KFMsTCxrKXt2YXIgUT1WbyhMKS5zLGxlPUFvKGspO3JldHVybiB1ZihTLHtyOmxlLnItUS5y''@;'; put 'put ''LGM6bGUuYy1RLmN9KX1mdW5jdGlvbiBSUihTKXtyZXR1cm4gUy5yZXBsYWNlKC9feGxmblwuL2csIiIpfWZ1bmN0aW9uIGZ1KFMpe1MubCs9MX1mdW5jdGlvbiBoZChTLEwpe3ZhciBrPVMucmVhZF9zaGlmdCgxPT1MPzE6Mik7cmV0dXJuWzE2MzgzJmssaz4+MTQmMSxrPj4xNSYxXX1mdW5j''@;'; put 'put ''dGlvbiBMUihTLEwsayl7dmFyIEc9MjtpZihrKXtpZihrLmJpZmY+PTImJmsuYmlmZjw9NSlyZXR1cm4gUmcoUyk7MTI9PWsuYmlmZiYmKEc9NCl9dmFyIFE9Uy5yZWFkX3NoaWZ0KEcpLGxlPVMucmVhZF9zaGlmdChHKSxtZT1oZChTLDIpLHBlPWhkKFMsMik7cmV0dXJue3M6e3I6USxjOm1l''@;'; put 'put ''WzBdLGNSZWw6bWVbMV0sclJlbDptZVsyXX0sZTp7cjpsZSxjOnBlWzBdLGNSZWw6cGVbMV0sclJlbDpwZVsyXX19fWZ1bmN0aW9uIFJnKFMpe3ZhciBMPWhkKFMsMiksaz1oZChTLDIpLEc9Uy5yZWFkX3NoaWZ0KDEpLFE9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybntzOntyOkxbMF0sYzpHLGNS''@;'; put 'put ''ZWw6TFsxXSxyUmVsOkxbMl19LGU6e3I6a1swXSxjOlEsY1JlbDprWzFdLHJSZWw6a1syXX19fWZ1bmN0aW9uIFZNKFMsTCxrKXtpZihrJiZrLmJpZmY+PTImJmsuYmlmZjw9NSlyZXR1cm4gZnVuY3Rpb24gdTcoUyl7dmFyIEw9aGQoUywyKSxrPVMucmVhZF9zaGlmdCgxKTtyZXR1cm57cjpM''@;'; put 'put ''WzBdLGM6ayxjUmVsOkxbMV0sclJlbDpMWzJdfX0oUyk7dmFyIEc9Uy5yZWFkX3NoaWZ0KGsmJjEyPT1rLmJpZmY/NDoyKSxRPWhkKFMsMik7cmV0dXJue3I6RyxjOlFbMF0sY1JlbDpRWzFdLHJSZWw6UVsyXX19ZnVuY3Rpb24geGIoUyl7dmFyIEw9Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFk''@;'; put 'put ''X3NoaWZ0KDIpO3JldHVybntyOkwsYzoyNTUmayxmUXVvdGVkOiEhKDE2Mzg0JmspLGNSZWw6az4+MTUsclJlbDprPj4xNX19ZnVuY3Rpb24gVlIoUyl7cmV0dXJuW1MucmVhZF9zaGlmdCgxKSxTLnJlYWRfc2hpZnQoMSldfWZ1bmN0aW9uIFRtKFMsTCl7dmFyIGs9W1MucmVhZF9zaGlmdCgx''@;'; put 'put ''KV07aWYoMTI9PUwpc3dpdGNoKGtbMF0pe2Nhc2UgMjprWzBdPTQ7YnJlYWs7Y2FzZSA0OmtbMF09MTY7YnJlYWs7Y2FzZSAwOmtbMF09MTticmVhaztjYXNlIDE6a1swXT0yfXN3aXRjaChrWzBdKXtjYXNlIDQ6a1sxXT1ubyhTLDEpPyJUUlVFIjoiRkFMU0UiLDEyIT1MJiYoUy5sKz03KTti''@;'; put 'put ''cmVhaztjYXNlIDM3OmNhc2UgMTY6a1sxXT1vZFtTW1MubF1dLFMubCs9MTI9PUw/NDo4O2JyZWFrO2Nhc2UgMDpTLmwrPTg7YnJlYWs7Y2FzZSAxOmtbMV09V3MoUyk7YnJlYWs7Y2FzZSAyOmtbMV09WGQoUywwLHtiaWZmOkw+MCYmTDw4PzI6TH0pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJCYWQgU2VyQXI6ICIra1swXSl9cmV0dXJuIGt9ZnVuY3Rpb24gaDcoUyxMLGspe2Zvcih2YXIgRz1TLnJlYWRfc2hpZnQoMTI9PWsuYmlmZj80OjIpLFE9W10sbGU9MDtsZSE9RzsrK2xlKVEucHVzaCgoMTI9PWsuYmlmZj9yZDpOOCkoUyw4KSk7cmV0dXJuIFF9ZnVuY3Rpb24g''@;'; put 'put ''elIoUyxMLGspe3ZhciBHPTAsUT0wOzEyPT1rLmJpZmY/KEc9Uy5yZWFkX3NoaWZ0KDQpLFE9Uy5yZWFkX3NoaWZ0KDQpKTooUT0xK1MucmVhZF9zaGlmdCgxKSxHPTErUy5yZWFkX3NoaWZ0KDIpKSxrLmJpZmY+PTImJmsuYmlmZjw4JiYoLS1HLDA9PS0tUSYmKFE9MjU2KSk7Zm9yKHZhciBs''@;'; put 'put ''ZT0wLG1lPVtdO2xlIT1HJiYobWVbbGVdPVtdKTsrK2xlKWZvcih2YXIgcGU9MDtwZSE9UTsrK3BlKW1lW2xlXVtwZV09VG0oUyxrLmJpZmYpO3JldHVybiBtZX1mdW5jdGlvbiBmNyhTLEwsayl7cmV0dXJuIFMubCs9MixbeGIoUyldfWZ1bmN0aW9uIEdNKFMpe3JldHVybiBTLmwrPTYsW119''@;'; put 'put ''dmFyIE0zPWY3LFhVPUdNLE1vZT1HTSwkTT1mNztmdW5jdGlvbiBxVShTKXtyZXR1cm4gUy5sKz0yLFtwYyhTKSwxJlMucmVhZF9zaGlmdCgyKV19dmFyIGtiPWY3LHA3PXFVLEpVPUdNLCRSPWY3LFFVPWY3LGVaPVsiRGF0YSIsIkFsbCIsIkhlYWRlcnMiLCI/PyIsIj9EYXRhMiIsIj8/Iiwi''@;'; put 'put ''P0RhdGFIZWFkZXJzIiwiPz8iLCJUb3RhbHMiLCI/PyIsIj8/IiwiPz8iLCI/RGF0YVRvdGFscyIsIj8/IiwiPz8iLCI/PyIsIj9DdXJyZW50Il0sWE09ezE6e246IlB0Z0V4cCIsZjpmdW5jdGlvbiBaTShTLEwsayl7cmV0dXJuIFMubCsrLGsmJjEyPT1rLmJpZmY/W1MucmVhZF9zaGlmdCg0''@;'; put 'put ''LCJpIiksMF06W1MucmVhZF9zaGlmdCgyKSxTLnJlYWRfc2hpZnQoayYmMj09ay5iaWZmPzE6MildfX0sMjp7bjoiUHRnVGJsIixmOnBufSwzOntuOiJQdGdBZGQiLGY6ZnV9LDQ6e246IlB0Z1N1YiIsZjpmdX0sNTp7bjoiUHRnTXVsIixmOmZ1fSw2OntuOiJQdGdEaXYiLGY6ZnV9LDc6e246''@;'; put 'put ''IlB0Z1Bvd2VyIixmOmZ1fSw4OntuOiJQdGdDb25jYXQiLGY6ZnV9LDk6e246IlB0Z0x0IixmOmZ1fSwxMDp7bjoiUHRnTGUiLGY6ZnV9LDExOntuOiJQdGdFcSIsZjpmdX0sMTI6e246IlB0Z0dlIixmOmZ1fSwxMzp7bjoiUHRnR3QiLGY6ZnV9LDE0OntuOiJQdGdOZSIsZjpmdX0sMTU6e246''@;'; put 'put ''IlB0Z0lzZWN0IixmOmZ1fSwxNjp7bjoiUHRnVW5pb24iLGY6ZnV9LDE3OntuOiJQdGdSYW5nZSIsZjpmdX0sMTg6e246IlB0Z1VwbHVzIixmOmZ1fSwxOTp7bjoiUHRnVW1pbnVzIixmOmZ1fSwyMDp7bjoiUHRnUGVyY2VudCIsZjpmdX0sMjE6e246IlB0Z1BhcmVuIixmOmZ1fSwyMjp7bjoi''@;'; put 'put ''UHRnTWlzc0FyZyIsZjpmdX0sMjM6e246IlB0Z1N0ciIsZjpmdW5jdGlvbiBZVShTLEwsayl7cmV0dXJuIFMubCsrLGNsKFMsMCxrKX19LDI2OntuOiJQdGdTaGVldCIsZjpmdW5jdGlvbiB0WihTLEwsayl7cmV0dXJuIFMubCs9NSxTLmwrPTIsUy5sKz0yPT1rLmJpZmY/MTo0LFsiUFRHU0hF''@;'; put 'put ''RVQiXX19LDI3OntuOiJQdGdFbmRTaGVldCIsZjpmdW5jdGlvbiBuWihTLEwsayl7cmV0dXJuIFMubCs9Mj09ay5iaWZmPzQ6NSxbIlBUR0VORFNIRUVUIl19fSwyODp7bjoiUHRnRXJyIixmOmZ1bmN0aW9uIEJSKFMpe3JldHVybiBTLmwrKyxvZFtTLnJlYWRfc2hpZnQoMSldfX0sMjk6e246''@;'; put 'put ''IlB0Z0Jvb2wiLGY6ZnVuY3Rpb24gV00oUyl7cmV0dXJuIFMubCsrLDAhPT1TLnJlYWRfc2hpZnQoMSl9fSwzMDp7bjoiUHRnSW50IixmOmZ1bmN0aW9uIGpSKFMpe3JldHVybiBTLmwrKyxTLnJlYWRfc2hpZnQoMil9fSwzMTp7bjoiUHRnTnVtIixmOmZ1bmN0aW9uIFdVKFMpe3JldHVybiBT''@;'; put 'put ''LmwrKyxXcyhTKX19LDMyOntuOiJQdGdBcnJheSIsZjpmdW5jdGlvbiBVVShTLEwsayl7dmFyIEc9KDk2JlNbUy5sKytdKT4+NTtyZXR1cm4gUy5sKz0yPT1rLmJpZmY/NjoxMj09ay5iaWZmPzE0OjcsW0ddfX0sMzM6e246IlB0Z0Z1bmMiLGY6ZnVuY3Rpb24gVGIoUyxMLGspe3ZhciBHPSg5''@;'; put 'put ''NiZTW1MubF0pPj41O1MubCs9MTt2YXIgUT1TLnJlYWRfc2hpZnQoayYmay5iaWZmPD0zPzE6Mik7cmV0dXJuW3J4W1FdLE9iW1FdLEddfX0sMzQ6e246IlB0Z0Z1bmNWYXIiLGY6ZnVuY3Rpb24gQWIoUyxMLGspe3ZhciBHPVNbUy5sKytdLFE9Uy5yZWFkX3NoaWZ0KDEpLGxlPWsmJmsuYmlm''@;'; put 'put ''Zjw9Mz9bODg9PUc/LTE6MCxTLnJlYWRfc2hpZnQoMSldOmZ1bmN0aW9uIEVtKFMpe3JldHVybltTW1MubCsxXT4+NywzMjc2NyZTLnJlYWRfc2hpZnQoMildfShTKTtyZXR1cm5bUSwoMD09PWxlWzBdP09iOmFMKVtsZVsxXV1dfX0sMzU6e246IlB0Z05hbWUiLGY6ZnVuY3Rpb24gR1UoUyxM''@;'; put 'put ''LGspe3ZhciBHPVMucmVhZF9zaGlmdCgxKT4+PjUmMyxsZT1TLnJlYWRfc2hpZnQoIWt8fGsuYmlmZj49OD80OjIpO3N3aXRjaChrLmJpZmYpe2Nhc2UgMjpTLmwrPTU7YnJlYWs7Y2FzZSAzOmNhc2UgNDpTLmwrPTg7YnJlYWs7Y2FzZSA1OlMubCs9MTJ9cmV0dXJuW0csMCxsZV19fSwzNjp7''@;'; put 'put ''bjoiUHRnUmVmIixmOmZ1bmN0aW9uIGpNKFMsTCxrKXt2YXIgRz0oOTYmU1tTLmxdKT4+NTtyZXR1cm4gUy5sKz0xLFtHLFZNKFMsMCxrKV19fSwzNzp7bjoiUHRnQXJlYSIsZjpmdW5jdGlvbiBkNyhTLEwsayl7cmV0dXJuWyg5NiZTW1MubCsrXSk+PjUsTFIoUywwLGspXX19LDM4OntuOiJQ''@;'; put 'put ''dGdNZW1BcmVhIixmOmZ1bmN0aW9uIFpSKFMsTCxrKXt2YXIgRz1TLnJlYWRfc2hpZnQoMSk+Pj41JjM7cmV0dXJuIFMubCs9ayYmMj09ay5iaWZmPzM6NCxbRyxTLnJlYWRfc2hpZnQoayYmMj09ay5iaWZmPzE6MildfX0sMzk6e246IlB0Z01lbUVyciIsZjpwbn0sNDA6e246IlB0Z01lbU5v''@;'; put 'put ''TWVtIixmOnBufSw0MTp7bjoiUHRnTWVtRnVuYyIsZjpmdW5jdGlvbiAkVShTLEwsayl7cmV0dXJuW1MucmVhZF9zaGlmdCgxKT4+PjUmMyxTLnJlYWRfc2hpZnQoayYmMj09ay5iaWZmPzE6MildfX0sNDI6e246IlB0Z1JlZkVyciIsZjpmdW5jdGlvbiBXUihTLEwsayl7dmFyIEc9Uy5yZWFk''@;'; put 'put ''X3NoaWZ0KDEpPj4+NSYzO3JldHVybiBTLmwrPTQsay5iaWZmPDgmJlMubC0tLDEyPT1rLmJpZmYmJihTLmwrPTIpLFtHXX19LDQzOntuOiJQdGdBcmVhRXJyIixmOmZ1bmN0aW9uIGpVKFMsTCxrKXt2YXIgRz0oOTYmU1tTLmwrK10pPj41O3JldHVybiBTLmwrPWsmJmsuYmlmZj44PzEyOmsu''@;'; put 'put ''YmlmZjw4PzY6OCxbR119fSw0NDp7bjoiUHRnUmVmTiIsZjpmdW5jdGlvbiB6TShTLEwsayl7dmFyIEc9KDk2JlNbUy5sXSk+PjU7Uy5sKz0xO3ZhciBRPWZ1bmN0aW9uIE9SKFMsTCxrKXt2YXIgRz1rJiZrLmJpZmY/ay5iaWZmOjg7aWYoRz49MiYmRzw9NSlyZXR1cm4gZnVuY3Rpb24gUFIo''@;'; put 'put ''Uyl7dmFyIEw9Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDEpLEc9KDMyNzY4JkwpPj4xNSxRPSgxNjM4NCZMKT4+MTQ7cmV0dXJuIEwmPTE2MzgzLDE9PUcmJkw+PTgxOTImJihMLT0xNjM4NCksMT09USYmaz49MTI4JiYoay09MjU2KSx7cjpMLGM6ayxjUmVsOlEsclJlbDpHfX0o''@;'; put 'put ''Uyk7dmFyIFE9Uy5yZWFkX3NoaWZ0KEc+PTEyPzQ6MiksbGU9Uy5yZWFkX3NoaWZ0KDIpLG1lPSgxNjM4NCZsZSk+PjE0LHBlPSgzMjc2OCZsZSk+PjE1O2lmKGxlJj0xNjM4MywxPT1wZSlmb3IoO1E+NTI0Mjg3OylRLT0xMDQ4NTc2O2lmKDE9PW1lKWZvcig7bGU+ODE5MTspbGUtPTE2Mzg0''@;'; put 'put ''O3JldHVybntyOlEsYzpsZSxjUmVsOm1lLHJSZWw6cGV9fShTLDAsayk7cmV0dXJuW0csUV19fSw0NTp7bjoiUHRnQXJlYU4iLGY6ZnVuY3Rpb24gelUoUyxMLGspe3ZhciBHPSg5NiZTW1MubCsrXSk+PjUsUT1mdW5jdGlvbiBCVShTLEwsayl7aWYoay5iaWZmPDgpcmV0dXJuIFJnKFMpO3Zh''@;'; put 'put ''ciBHPVMucmVhZF9zaGlmdCgxMj09ay5iaWZmPzQ6MiksUT1TLnJlYWRfc2hpZnQoMTI9PWsuYmlmZj80OjIpLGxlPWhkKFMsMiksbWU9aGQoUywyKTtyZXR1cm57czp7cjpHLGM6bGVbMF0sY1JlbDpsZVsxXSxyUmVsOmxlWzJdfSxlOntyOlEsYzptZVswXSxjUmVsOm1lWzFdLHJSZWw6bWVb''@;'; put 'put ''Ml19fX0oUywwLGspO3JldHVybltHLFFdfX0sNDY6e246IlB0Z01lbUFyZWFOIixmOmZ1bmN0aW9uIGc3KFMpe3JldHVybltTLnJlYWRfc2hpZnQoMSk+Pj41JjMsUy5yZWFkX3NoaWZ0KDIpXX19LDQ3OntuOiJQdGdNZW1Ob01lbU4iLGY6ZnVuY3Rpb24gcVIoUyl7cmV0dXJuW1MucmVhZF9z''@;'; put 'put ''aGlmdCgxKT4+PjUmMyxTLnJlYWRfc2hpZnQoMildfX0sNTc6e246IlB0Z05hbWVYIixmOmZ1bmN0aW9uIFVSKFMsTCxrKXtyZXR1cm4gNT09ay5iaWZmP2Z1bmN0aW9uIFNvZShTKXt2YXIgTD1TLnJlYWRfc2hpZnQoMSk+Pj41JjMsaz1TLnJlYWRfc2hpZnQoMiwiaSIpO1MubCs9ODt2YXIg''@;'; put 'put ''Rz1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIFMubCs9MTIsW0wsayxHXX0oUyk6W1MucmVhZF9zaGlmdCgxKT4+PjUmMyxTLnJlYWRfc2hpZnQoMiksUy5yZWFkX3NoaWZ0KDQpXX19LDU4OntuOiJQdGdSZWYzZCIsZjpmdW5jdGlvbiB4bShTLEwsayl7dmFyIEc9KDk2JlNbUy5sXSk+PjU7Uy5s''@;'; put 'put ''Kz0xO3ZhciBRPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gayYmNT09ay5iaWZmJiYoUy5sKz0xMiksW0csUSxWTShTLDAsayldfX0sNTk6e246IlB0Z0FyZWEzZCIsZjpmdW5jdGlvbiBhMShTLEwsayl7dmFyIEc9KDk2JlNbUy5sKytdKT4+NSxRPVMucmVhZF9zaGlmdCgyLCJpIik7aWYoayYm''@;'; put 'put ''NT09PWsuYmlmZilTLmwrPTEyO3JldHVybltHLFEsTFIoUywwLGspXX19LDYwOntuOiJQdGdSZWZFcnIzZCIsZjpmdW5jdGlvbiBZTShTLEwsayl7dmFyIEc9KDk2JlNbUy5sKytdKT4+NSxRPVMucmVhZF9zaGlmdCgyKSxsZT00O2lmKGspc3dpdGNoKGsuYmlmZil7Y2FzZSA1OmxlPTE1O2Jy''@;'; put 'put ''ZWFrO2Nhc2UgMTI6bGU9Nn1yZXR1cm4gUy5sKz1sZSxbRyxRXX19LDYxOntuOiJQdGdBcmVhRXJyM2QiLGY6ZnVuY3Rpb24gV3UoUyxMLGspe3ZhciBHPSg5NiZTW1MubCsrXSk+PjUsUT1TLnJlYWRfc2hpZnQoMiksbGU9ODtpZihrKXN3aXRjaChrLmJpZmYpe2Nhc2UgNTpTLmwrPTEyLGxl''@;'; put 'put ''PTY7YnJlYWs7Y2FzZSAxMjpsZT0xMn1yZXR1cm4gUy5sKz1sZSxbRyxRXX19LDI1NTp7fX0sclo9ezY0OjMyLDk2OjMyLDY1OjMzLDk3OjMzLDY2OjM0LDk4OjM0LDY3OjM1LDk5OjM1LDY4OjM2LDEwMDozNiw2OTozNywxMDE6MzcsNzA6MzgsMTAyOjM4LDcxOjM5LDEwMzozOSw3Mjo0MCwx''@;'; put 'put ''MDQ6NDAsNzM6NDEsMTA1OjQxLDc0OjQyLDEwNjo0Miw3NTo0MywxMDc6NDMsNzY6NDQsMTA4OjQ0LDc3OjQ1LDEwOTo0NSw3ODo0NiwxMTA6NDYsNzk6NDcsMTExOjQ3LDg4OjM0LDEyMDozNCw4OTo1NywxMjE6NTcsOTA6NTgsMTIyOjU4LDkxOjU5LDEyMzo1OSw5Mjo2MCwxMjQ6NjAsOTM6''@;'; put 'put ''NjEsMTI1OjYxfTshZnVuY3Rpb24oKXtmb3IodmFyIFMgaW4gclopWE1bU109WE1bclpbU11dfSgpO3ZhciB4b2U9ezE6e246IlB0Z0VsZkxlbCIsZjpxVX0sMjp7bjoiUHRnRWxmUnciLGY6JFJ9LDM6e246IlB0Z0VsZkNvbCIsZjpNM30sNjp7bjoiUHRnRWxmUndWIixmOlFVfSw3OntuOiJQ''@;'; put 'put ''dGdFbGZDb2xWIixmOiRNfSwxMDp7bjoiUHRnRWxmUmFkaWNhbCIsZjprYn0sMTE6e246IlB0Z0VsZlJhZGljYWxTIixmOkpVfSwxMzp7bjoiUHRnRWxmQ29sUyIsZjpYVX0sMTU6e246IlB0Z0VsZkNvbFNWIixmOk1vZX0sMTY6e246IlB0Z0VsZlJhZGljYWxMZWwiLGY6cDd9LDI1OntuOiJQ''@;'; put 'put ''dGdMaXN0IixmOmZ1bmN0aW9uIEtSKFMpe1MubCs9Mjt2YXIgTD1TLnJlYWRfc2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMiksRz1TLnJlYWRfc2hpZnQoNCksUT1TLnJlYWRfc2hpZnQoMiksbGU9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybntpeHRpOkwsY29sdHlwZTozJmsscnQ6ZVpbaz4+MiYz''@;'; put 'put ''MV0saWR4OkcsYzpRLEM6bGV9fX0sMjk6e246IlB0Z1N4TmFtZSIsZjpmdW5jdGlvbiBYUihTKXtyZXR1cm4gUy5sKz0yLFtTLnJlYWRfc2hpZnQoNCldfX0sMjU1Ont9fSxKUj17MDp7bjoiUHRnQXR0ck5vb3AiLGY6ZnVuY3Rpb24gS00oUyl7cmV0dXJuIFMubCs9NCxbMCwwXX19LDE6e246''@;'; put 'put ''IlB0Z0F0dHJTZW1pIixmOmZ1bmN0aW9uIE5SKFMsTCxrKXt2YXIgRz0yNTUmU1tTLmwrMV0/MTowO3JldHVybiBTLmwrPWsmJjI9PWsuYmlmZj8zOjQsW0ddfX0sMjp7bjoiUHRnQXR0cklmIixmOmZ1bmN0aW9uIFpVKFMsTCxrKXt2YXIgRz0yNTUmU1tTLmwrMV0/MTowO3JldHVybiBTLmwr''@;'; put 'put ''PTIsW0csUy5yZWFkX3NoaWZ0KGsmJjI9PWsuYmlmZj8xOjIpXX19LDQ6e246IlB0Z0F0dHJDaG9vc2UiLGY6ZnVuY3Rpb24gRlIoUyxMLGspe1MubCs9Mjtmb3IodmFyIEc9Uy5yZWFkX3NoaWZ0KGsmJjI9PWsuYmlmZj8xOjIpLFE9W10sbGU9MDtsZTw9RzsrK2xlKVEucHVzaChTLnJlYWRf''@;'; put 'put ''c2hpZnQoayYmMj09ay5iaWZmPzE6MikpO3JldHVybiBRfX0sODp7bjoiUHRnQXR0ckdvdG8iLGY6ZnVuY3Rpb24gSFIoUyxMLGspe3ZhciBHPTI1NSZTW1MubCsxXT8xOjA7cmV0dXJuIFMubCs9MixbRyxTLnJlYWRfc2hpZnQoayYmMj09ay5iaWZmPzE6MildfX0sMTY6e246IlB0Z0F0dHJT''@;'; put 'put ''dW0iLGY6ZnVuY3Rpb24gVU0oUyxMLGspe1MubCs9ayYmMj09ay5iaWZmPzM6NH19LDMyOntuOiJQdGdBdHRyQmF4Y2VsIixmOmZ1bmN0aW9uIEJNKFMpe3ZhciBMPTEmU1tTLmwrMV07cmV0dXJuIFMubCs9NCxbTCwxXX19LDY0OntuOiJQdGdBdHRyU3BhY2UiLGY6ZnVuY3Rpb24gQ29lKFMp''@;'; put 'put ''e3JldHVybiBTLnJlYWRfc2hpZnQoMiksVlIoUyl9fSw2NTp7bjoiUHRnQXR0clNwYWNlU2VtaSIsZjpmdW5jdGlvbiBFYihTKXtyZXR1cm4gUy5yZWFkX3NoaWZ0KDIpLFZSKFMpfX0sMTI4OntuOiJQdGdBdHRySWZFcnJvciIsZjpmdW5jdGlvbiB3b2UoUyl7dmFyIEw9MjU1JlNbUy5sKzFd''@;'; put 'put ''PzE6MDtyZXR1cm4gUy5sKz0yLFtMLFMucmVhZF9zaGlmdCgyKV19fSwyNTU6e319O2Z1bmN0aW9uIGRmKFMsTCxrLEcsUSl7aWYoRy5iaWZmPDgpcmV0dXJuIHBuKFMsTCk7Zm9yKHZhciBsZT1TLmwrTCxtZT1bXSxwZT0wO3BlIT09ay5sZW5ndGg7KytwZSlzd2l0Y2goa1twZV1bMF0pe2Nh''@;'; put 'put ''c2UiUHRnQXJyYXkiOmtbcGVdWzFdPXpSKFMsMCxHKSxtZS5wdXNoKGtbcGVdWzFdKTticmVhaztjYXNlIlB0Z01lbUFyZWEiOmtbcGVdWzJdPWg3KFMsMCxHKSxtZS5wdXNoKGtbcGVdWzJdKTticmVhaztjYXNlIlB0Z0V4cCI6RyYmMTI9PUcuYmlmZiYmKGtbcGVdWzFdWzFdPVMucmVhZF9z''@;'; put 'put ''aGlmdCg0KSxtZS5wdXNoKGtbcGVdWzFdKSk7YnJlYWs7Y2FzZSJQdGdMaXN0IjpjYXNlIlB0Z0VsZlJhZGljYWxTIjpjYXNlIlB0Z0VsZkNvbFMiOmNhc2UiUHRnRWxmQ29sU1YiOnRocm93IlVuc3VwcG9ydGVkICIra1twZV1bMF19cmV0dXJuIEw9bGUtUy5sLCFRJiYwIT09TCYmbWUucHVz''@;'; put 'put ''aChwbihTLEwpKSxtZX1mdW5jdGlvbiBBbShTLEwsayl7Zm9yKHZhciBRLGxlLEc9Uy5sK0wsbWU9W107RyE9Uy5sOylMPUctUy5sLFE9WE1bbGU9U1tTLmxdXSwoMjQ9PT1sZXx8MjU9PT1sZSkmJihRPSgyND09PWxlP3hvZTpKUilbU1tTLmwrMV1dKSxRJiZRLmY/bWUucHVzaChbUS5uLFEu''@;'; put 'put ''ZihTLEwsayldKTpwbihTLEwpO3JldHVybiBtZX1mdW5jdGlvbiBEYihTKXtmb3IodmFyIEw9W10saz0wO2s8Uy5sZW5ndGg7KytrKXtmb3IodmFyIEc9U1trXSxRPVtdLGxlPTA7bGU8Ry5sZW5ndGg7KytsZSl7dmFyIG1lPUdbbGVdO1EucHVzaChtZT8yPT09bWVbMF0/JyInK21lWzFdLnJl''@;'; put 'put ''cGxhY2UoLyIvZywnIiInKSsnIic6bWVbMV06IiIpfUwucHVzaChRLmpvaW4oIiwiKSl9cmV0dXJuIEwuam9pbigiOyIpfUpSWzMzXT1KUlszMl07dmFyIHFNPXtQdGdBZGQ6IisiLFB0Z0NvbmNhdDoiJiIsUHRnRGl2OiIvIixQdGdFcToiPSIsUHRnR2U6Ij49IixQdGdHdDoiPiIsUHRnTGU6''@;'; put 'put ''Ijw9IixQdGdMdDoiPCIsUHRnTXVsOiIqIixQdGdOZToiPD4iLFB0Z1Bvd2VyOiJeIixQdGdTdWI6Ii0ifSxtNz1uZXcgUmVnRXhwKC9bXlx3XHU0RTAwLVx1OUZGRlx1MzA0MC1cdTMwRkZdLyk7ZnVuY3Rpb24gaVooUyxMLGspe2lmKCFTKXJldHVybiJTSDMzVEpTRVJSMCI7aWYoay5iaWZm''@;'; put 'put ''PjgmJighUy5YVEl8fCFTLlhUSVtMXSkpcmV0dXJuIFMuU2hlZXROYW1lc1tMXTtpZighUy5YVEkpcmV0dXJuIlNIMzNUSlNFUlI2Ijt2YXIgRz1TLlhUSVtMXTtpZihrLmJpZmY8OClyZXR1cm4gTD4xZTQmJihMLT02NTUzNiksTDwwJiYoTD0tTCksMD09TD8iIjpTLlhUSVtMLTFdO2lmKCFH''@;'; put 'put ''KXJldHVybiJTSDMzVEpTRVJSMSI7dmFyIFE9IiI7aWYoay5iaWZmPjgpc3dpdGNoKFNbR1swXV1bMF0pe2Nhc2UgMzU3OnJldHVybiBRPS0xPT1HWzFdPyIjUkVGIjpTLlNoZWV0TmFtZXNbR1sxXV0sR1sxXT09R1syXT9ROlErIjoiK1MuU2hlZXROYW1lc1tHWzJdXTtjYXNlIDM1ODpyZXR1''@;'; put 'put ''cm4gbnVsbCE9ay5TSUQ/Uy5TaGVldE5hbWVzW2suU0lEXToiU0gzM1RKU1NBTUUiK1NbR1swXV1bMF07ZGVmYXVsdDpyZXR1cm4iU0gzM1RKU1NSQyIrU1tHWzBdXVswXX1zd2l0Y2goU1tHWzBdXVswXVswXSl7Y2FzZSAxMDI1OnJldHVybiBRPS0xPT1HWzFdPyIjUkVGIjpTLlNoZWV0TmFt''@;'; put 'put ''ZXNbR1sxXV18fCJTSDMzVEpTRVJSMyIsR1sxXT09R1syXT9ROlErIjoiK1MuU2hlZXROYW1lc1tHWzJdXTtjYXNlIDE0ODQ5OnJldHVybiBTW0dbMF1dLnNsaWNlKDEpLm1hcChmdW5jdGlvbihsZSl7cmV0dXJuIGxlLk5hbWV9KS5qb2luKCI7OyIpO2RlZmF1bHQ6cmV0dXJuIFNbR1swXV1b''@;'; put 'put ''MF1bM10/KFE9LTE9PUdbMV0/IiNSRUYiOlNbR1swXV1bMF1bM11bR1sxXV18fCJTSDMzVEpTRVJSNCIsR1sxXT09R1syXT9ROlErIjoiK1NbR1swXV1bMF1bM11bR1syXV0pOiJTSDMzVEpTRVJSMiJ9fWZ1bmN0aW9uIEpNKFMsTCxrKXtyZXR1cm4gZnVuY3Rpb24gRW9lKFMsTCl7aWYoIShT''@;'; put 'put ''fHxMJiZMLmJpZmY8PTUmJkwuYmlmZj49MikpdGhyb3cgbmV3IEVycm9yKCJlbXB0eSBzaGVldCBuYW1lIik7cmV0dXJuLyNSRUYvLnRlc3QoUyk/UzptNy50ZXN0KFMpPyInIitTKyInIjpTfShpWihTLEwsayksayl9ZnVuY3Rpb24gWXUoUyxMLGssRyxRLGxlKXt2YXIgTmUsQmUsR2UseHQs''@;'; put 'put ''bWU9USYmUS5iaWZmfHw4LHBlPWxlJiZudWxsIT1MP0w6e3M6e2M6MCxyOjB9LGU6e2M6MCxyOjB9fSxiZT1bXSxldD0wLGN0PTAsb3Q9IiI7aWYoIVNbMF18fCFTWzBdWzBdKXJldHVybiIiO2Zvcih2YXIgYnQ9LTEsRnQ9IiIsa3Q9MCxMdD1TWzBdLmxlbmd0aDtrdDxMdDsrK2t0KXt2YXIg''@;'; put 'put ''SnQ9U1swXVtrdF07c3dpdGNoKEp0WzBdKXtjYXNlIlB0Z1VtaW51cyI6YmUucHVzaCgiLSIrYmUucG9wKCkpO2JyZWFrO2Nhc2UiUHRnVXBsdXMiOmJlLnB1c2goIisiK2JlLnBvcCgpKTticmVhaztjYXNlIlB0Z1BlcmNlbnQiOmJlLnB1c2goYmUucG9wKCkrIiUiKTticmVhaztjYXNlIlB0''@;'; put 'put ''Z0FkZCI6Y2FzZSJQdGdDb25jYXQiOmNhc2UiUHRnRGl2IjpjYXNlIlB0Z0VxIjpjYXNlIlB0Z0dlIjpjYXNlIlB0Z0d0IjpjYXNlIlB0Z0xlIjpjYXNlIlB0Z0x0IjpjYXNlIlB0Z011bCI6Y2FzZSJQdGdOZSI6Y2FzZSJQdGdQb3dlciI6Y2FzZSJQdGdTdWIiOmlmKE5lPWJlLnBvcCgpLEJl''@;'; put 'put ''PWJlLnBvcCgpLGJ0Pj0wKXtzd2l0Y2goU1swXVtidF1bMV1bMF0pe2Nhc2UgMDpGdD1yaSgiICIsU1swXVtidF1bMV1bMV0pO2JyZWFrO2Nhc2UgMTpGdD1yaSgiXHIiLFNbMF1bYnRdWzFdWzFdKTticmVhaztkZWZhdWx0OmlmKEZ0PSIiLFEuV1RGKXRocm93IG5ldyBFcnJvcigiVW5leHBl''@;'; put 'put ''Y3RlZCBQdGdBdHRyU3BhY2VUeXBlICIrU1swXVtidF1bMV1bMF0pfUJlKz1GdCxidD0tMX1iZS5wdXNoKEJlK3FNW0p0WzBdXStOZSk7YnJlYWs7Y2FzZSJQdGdJc2VjdCI6TmU9YmUucG9wKCksQmU9YmUucG9wKCksYmUucHVzaChCZSsiICIrTmUpO2JyZWFrO2Nhc2UiUHRnVW5pb24iOk5l''@;'; put 'put ''PWJlLnBvcCgpLEJlPWJlLnBvcCgpLGJlLnB1c2goQmUrIiwiK05lKTticmVhaztjYXNlIlB0Z1JhbmdlIjpOZT1iZS5wb3AoKSxCZT1iZS5wb3AoKSxiZS5wdXNoKEJlKyI6IitOZSk7YnJlYWs7Y2FzZSJQdGdBdHRyQ2hvb3NlIjpjYXNlIlB0Z0F0dHJHb3RvIjpjYXNlIlB0Z0F0dHJJZiI6''@;'; put 'put ''Y2FzZSJQdGdBdHRySWZFcnJvciI6Y2FzZSJQdGdBdHRyQmF4Y2VsIjpjYXNlIlB0Z0F0dHJTZW1pIjpjYXNlIlB0Z01lbUFyZWEiOmNhc2UiUHRnVGJsIjpjYXNlIlB0Z01lbUVyciI6Y2FzZSJQdGdNZW1BcmVhTiI6Y2FzZSJQdGdNZW1Ob01lbU4iOmNhc2UiUHRnQXR0ck5vb3AiOmNhc2Ui''@;'; put 'put ''UHRnU2hlZXQiOmNhc2UiUHRnRW5kU2hlZXQiOmNhc2UiUHRnTWVtRnVuYyI6Y2FzZSJQdGdNZW1Ob01lbSI6YnJlYWs7Y2FzZSJQdGdSZWYiOkdlPWpuKEp0WzFdWzFdLHBlLFEpLGJlLnB1c2goV2koR2UsbWUpKTticmVhaztjYXNlIlB0Z1JlZk4iOkdlPWs/am4oSnRbMV1bMV0sayxRKTpK''@;'; put 'put ''dFsxXVsxXSxiZS5wdXNoKFdpKEdlLG1lKSk7YnJlYWs7Y2FzZSJQdGdSZWYzZCI6ZXQ9SnRbMV1bMV0sR2U9am4oSnRbMV1bMl0scGUsUSksb3Q9Sk0oRyxldCxRKSxiZS5wdXNoKG90KyIhIitXaShHZSxtZSkpO2JyZWFrO2Nhc2UiUHRnRnVuYyI6Y2FzZSJQdGdGdW5jVmFyIjp2YXIgc3I9''@;'; put 'put ''SnRbMV1bMF0sQ249SnRbMV1bMV07c3J8fChzcj0wKTt2YXIgbHI9MD09KHNyJj0xMjcpP1tdOmJlLnNsaWNlKC1zcik7YmUubGVuZ3RoLT1zciwiVXNlciI9PT1DbiYmKENuPWxyLnNoaWZ0KCkpLGJlLnB1c2goQ24rIigiK2xyLmpvaW4oIiwiKSsiKSIpO2JyZWFrO2Nhc2UiUHRnQm9vbCI6''@;'; put 'put ''YmUucHVzaChKdFsxXT8iVFJVRSI6IkZBTFNFIik7YnJlYWs7Y2FzZSJQdGdJbnQiOmNhc2UiUHRnTnVtIjpiZS5wdXNoKFN0cmluZyhKdFsxXSkpO2JyZWFrO2Nhc2UiUHRnU3RyIjpiZS5wdXNoKCciJytKdFsxXS5yZXBsYWNlKC8iL2csJyIiJykrJyInKTticmVhaztjYXNlIlB0Z0VyciI6''@;'; put 'put ''YmUucHVzaChKdFsxXSk7YnJlYWs7Y2FzZSJQdGdBcmVhTiI6eHQ9RWEoSnRbMV1bMV0saz97czprfTpwZSxRKSxiZS5wdXNoKFlpKHh0LFEpKTticmVhaztjYXNlIlB0Z0FyZWEiOnh0PUVhKEp0WzFdWzFdLHBlLFEpLGJlLnB1c2goWWkoeHQsUSkpO2JyZWFrO2Nhc2UiUHRnQXJlYTNkIjpl''@;'; put 'put ''dD1KdFsxXVsxXSx4dD1FYShKdFsxXVsyXSxwZSxRKSxvdD1KTShHLGV0LFEpLGJlLnB1c2gob3QrIiEiK1lpKHh0LFEpKTticmVhaztjYXNlIlB0Z0F0dHJTdW0iOmJlLnB1c2goIlNVTSgiK2JlLnBvcCgpKyIpIik7YnJlYWs7Y2FzZSJQdGdOYW1lIjp2YXIgcW49KEcubmFtZXN8fFtdKVso''@;'; put 'put ''Y3Q9SnRbMV1bMl0pLTFdfHwoR1swXXx8W10pW2N0XSxXbj1xbj9xbi5OYW1lOiJTSDMzVEpTTkFNRSIrU3RyaW5nKGN0KTtXbiBpbiBmZCYmKFduPWZkW1duXSksYmUucHVzaChXbik7YnJlYWs7Y2FzZSJQdGdOYW1lWCI6dmFyIHlyLHByPUp0WzFdWzFdO2lmKGN0PUp0WzFdWzJdLCEoUS5i''@;'; put 'put ''aWZmPD01KSl7dmFyIHRyPSIiO2lmKDE0ODQ5PT0oKEdbcHJdfHxbXSlbMF18fFtdKVswXXx8KDEwMjU9PSgoR1twcl18fFtdKVswXXx8W10pWzBdP0dbcHJdW2N0XSYmR1twcl1bY3RdLml0YWI+MCYmKHRyPUcuU2hlZXROYW1lc1tHW3ByXVtjdF0uaXRhYi0xXSsiISIpOnRyPUcuU2hlZXRO''@;'; put 'put ''YW1lc1tjdC0xXSsiISIpLEdbcHJdJiZHW3ByXVtjdF0pdHIrPUdbcHJdW2N0XS5OYW1lO2Vsc2UgaWYoR1swXSYmR1swXVtjdF0pdHIrPUdbMF1bY3RdLk5hbWU7ZWxzZXt2YXIgRmk9KGlaKEcscHIsUSl8fCIiKS5zcGxpdCgiOzsiKTtGaVtjdC0xXT90cj1GaVtjdC0xXTp0cis9IlNIMzNU''@;'; put 'put ''SlNFUlJYIn1iZS5wdXNoKHRyKTticmVha31wcjwwJiYocHI9LXByKSxHW3ByXSYmKHlyPUdbcHJdW2N0XSkseXJ8fCh5cj17TmFtZToiU0gzM1RKU0VSUlkifSksYmUucHVzaCh5ci5OYW1lKTticmVhaztjYXNlIlB0Z1BhcmVuIjp2YXIgcmE9IigiLG9hPSIpIjtpZihidD49MCl7c3dpdGNo''@;'; put 'put ''KEZ0PSIiLFNbMF1bYnRdWzFdWzBdKXtjYXNlIDI6cmE9cmkoIiAiLFNbMF1bYnRdWzFdWzFdKStyYTticmVhaztjYXNlIDM6cmE9cmkoIlxyIixTWzBdW2J0XVsxXVsxXSkrcmE7YnJlYWs7Y2FzZSA0Om9hPXJpKCIgIixTWzBdW2J0XVsxXVsxXSkrb2E7YnJlYWs7Y2FzZSA1Om9hPXJpKCJc''@;'; put 'put ''ciIsU1swXVtidF1bMV1bMV0pK29hO2JyZWFrO2RlZmF1bHQ6aWYoUS5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIFB0Z0F0dHJTcGFjZVR5cGUgIitTWzBdW2J0XVsxXVswXSl9YnQ9LTF9YmUucHVzaChyYStiZS5wb3AoKStvYSk7YnJlYWs7Y2FzZSJQdGdSZWZFcnIiOmNhc2Ui''@;'; put 'put ''UHRnQXJlYUVyciI6Y2FzZSJQdGdBcmVhRXJyM2QiOmNhc2UiUHRnUmVmRXJyM2QiOmJlLnB1c2goIiNSRUYhIik7YnJlYWs7Y2FzZSJQdGdFeHAiOnZhciBrcj17YzprLmMscjprLnJ9O2lmKEcuc2hhcmVkZltHaShHZT17YzpKdFsxXVsxXSxyOkp0WzFdWzBdfSldKXt2YXIgWW49Ry5zaGFy''@;'; put 'put ''ZWRmW0dpKEdlKV07YmUucHVzaChZdShZbixwZSxrcixHLFEpKX1lbHNle3ZhciBWcj0hMTtmb3IoTmU9MDtOZSE9Ry5hcnJheWYubGVuZ3RoOysrTmUpaWYoIShHZS5jPChCZT1HLmFycmF5ZltOZV0pWzBdLnMuY3x8R2UuYz5CZVswXS5lLmN8fEdlLnI8QmVbMF0ucy5yfHxHZS5yPkJlWzBd''@;'; put 'put ''LmUucikpe2JlLnB1c2goWXUoQmVbMV0scGUsa3IsRyxRKSksVnI9ITA7YnJlYWt9VnJ8fGJlLnB1c2goSnRbMV0pfWJyZWFrO2Nhc2UiUHRnQXJyYXkiOmJlLnB1c2goInsiK0RiKEp0WzFdKSsifSIpO2JyZWFrO2Nhc2UiUHRnQXR0clNwYWNlIjpjYXNlIlB0Z0F0dHJTcGFjZVNlbWkiOmJ0''@;'; put 'put ''PWt0O2JyZWFrO2Nhc2UiUHRnTWlzc0FyZyI6YmUucHVzaCgiIik7YnJlYWs7Y2FzZSJQdGdMaXN0IjpiZS5wdXNoKCJUYWJsZSIrSnRbMV0uaWR4KyJbIyIrSnRbMV0ucnQrIl0iKTticmVhaztjYXNlIlB0Z0VsZkNvbCI6Y2FzZSJQdGdFbGZDb2xTIjpjYXNlIlB0Z0VsZkNvbFNWIjpjYXNl''@;'; put 'put ''IlB0Z0VsZkNvbFYiOmNhc2UiUHRnRWxmTGVsIjpjYXNlIlB0Z0VsZlJhZGljYWwiOmNhc2UiUHRnRWxmUmFkaWNhbExlbCI6Y2FzZSJQdGdFbGZSYWRpY2FsUyI6Y2FzZSJQdGdFbGZSdyI6Y2FzZSJQdGdFbGZSd1YiOnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgRUxGcyIpO2RlZmF1''@;'; put 'put ''bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgRm9ybXVsYSBUb2tlbjogIitTdHJpbmcoSnQpKX1pZigzIT1RLmJpZmYmJmJ0Pj0wJiYtMT09WyJQdGdBdHRyU3BhY2UiLCJQdGdBdHRyU3BhY2VTZW1pIiwiUHRnQXR0ckdvdG8iXS5pbmRleE9mKFNbMF1ba3RdWzBdKSl7dmFyIFZu''@;'; put 'put ''PSEwO3N3aXRjaCgoSnQ9U1swXVtidF0pWzFdWzBdKXtjYXNlIDQ6Vm49ITE7Y2FzZSAwOkZ0PXJpKCIgIixKdFsxXVsxXSk7YnJlYWs7Y2FzZSA1OlZuPSExO2Nhc2UgMTpGdD1yaSgiXHIiLEp0WzFdWzFdKTticmVhaztkZWZhdWx0OmlmKEZ0PSIiLFEuV1RGKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''VW5leHBlY3RlZCBQdGdBdHRyU3BhY2VUeXBlICIrSnRbMV1bMF0pfWJlLnB1c2goKFZuP0Z0OiIiKStiZS5wb3AoKSsoVm4/IiI6RnQpKSxidD0tMX19aWYoYmUubGVuZ3RoPjEmJlEuV1RGKXRocm93IG5ldyBFcnJvcigiYmFkIGZvcm11bGEgc3RhY2siKTtyZXR1cm4gYmVbMF19ZnVuY3Rp''@;'; put 'put ''b24gUVIoUyxMLGspe3ZhciBsZSxHPVMubCtMLFE9Mj09ay5iaWZmPzE6MixtZT1TLnJlYWRfc2hpZnQoUSk7aWYoNjU1MzU9PW1lKXJldHVybltbXSxwbihTLEwtMildO3ZhciBwZT1BbShTLG1lLGspO3JldHVybiBMIT09bWUrUSYmKGxlPWRmKFMsTC1tZS1RLHBlLGspKSxTLmw9RyxbcGUs''@;'; put 'put ''bGVdfWZ1bmN0aW9uIExnKFMsTCxrKXt2YXIgUSxHPVMubCtMLGxlPVMucmVhZF9zaGlmdCgyKSxtZT1BbShTLGxlLGspO3JldHVybiA2NTUzNT09bGU/W1tdLHBuKFMsTC0yKV06KEwhPT1sZSsyJiYoUT1kZihTLEctbGUtMixtZSxrKSksW21lLFFdKX1mdW5jdGlvbiBleChTLEwsayl7dmFy''@;'; put 'put ''IEc9Uy5sK0wsUT0kaChTKTsyPT1rLmJpZmYmJisrUy5sO3ZhciBsZT1mdW5jdGlvbiB0TChTKXt2YXIgTDtpZig2NTUzNSE9PWFvKFMsUy5sKzYpKXJldHVybltXcyhTKSwibiJdO3N3aXRjaChTW1MubF0pe2Nhc2UgMDpyZXR1cm4gUy5sKz04LFsiU3RyaW5nIiwicyJdO2Nhc2UgMTpyZXR1''@;'; put 'put ''cm4gTD0xPT09U1tTLmwrMl0sUy5sKz04LFtMLCJiIl07Y2FzZSAyOnJldHVybiBMPVNbUy5sKzJdLFMubCs9OCxbTCwiZSJdO2Nhc2UgMzpyZXR1cm4gUy5sKz04LFsiIiwicyJdfXJldHVybltdfShTKSxtZT1TLnJlYWRfc2hpZnQoMSk7MiE9ay5iaWZmJiYoUy5yZWFkX3NoaWZ0KDEpLGsu''@;'; put 'put ''YmlmZj49NSYmUy5yZWFkX3NoaWZ0KDQpKTt2YXIgcGU9ZnVuY3Rpb24gUU0oUyxMLGspe3ZhciBsZSxHPVMubCtMLFE9Mj09ay5iaWZmPzE6MixtZT1TLnJlYWRfc2hpZnQoUSk7aWYoNjU1MzU9PW1lKXJldHVybltbXSxwbihTLEwtMildO3ZhciBwZT1BbShTLG1lLGspO3JldHVybiBMIT09''@;'; put 'put ''bWUrUSYmKGxlPWRmKFMsTC1tZS1RLHBlLGspKSxTLmw9RyxbcGUsbGVdfShTLEctUy5sLGspO3JldHVybntjZWxsOlEsdmFsOmxlWzBdLGZvcm11bGE6cGUsc2hhcmVkOm1lPj4zJjEsdHQ6bGVbMV19fWZ1bmN0aW9uIHY3KFMsTCxrKXt2YXIgRz1TLnJlYWRfc2hpZnQoNCksUT1BbShTLEcs''@;'; put 'put ''ayksbGU9Uy5yZWFkX3NoaWZ0KDQpO3JldHVybltRLGxlPjA/ZGYoUyxsZSxRLGssITApOm51bGxdfXZhciBzWj12NyxJYj12NyxyTD12NyxsWj1mdW5jdGlvbiBuTChTLEwsayl7dmFyIEc9Uy5yZWFkX3NoaWZ0KDQpLFE9Uy5yZWFkX3NoaWZ0KDQpLGxlPUFtKFMsRyxrKTtyZXR1cm5bbGUs''@;'; put 'put ''UT4wP2RmKFMsUSxsZSxrLCEwKTpudWxsXX0sY1o9djcsdHg9djc7ZnVuY3Rpb24gbngoUyl7aWYoKDB8Uyk9PVMmJlM8TWF0aC5wb3coMiwxNikmJlM+PTApe3ZhciBMPVZ0KDExKTtyZXR1cm4gTC53cml0ZV9zaGlmdCg0LDMpLEwud3JpdGVfc2hpZnQoMSwzMCksTC53cml0ZV9zaGlmdCgy''@;'; put 'put ''LFMpLEwud3JpdGVfc2hpZnQoNCwwKSxMfXZhciBrPVZ0KDE3KTtyZXR1cm4gay53cml0ZV9zaGlmdCg0LDExKSxrLndyaXRlX3NoaWZ0KDEsMzEpLGsud3JpdGVfc2hpZnQoOCxTKSxrLndyaXRlX3NoaWZ0KDQsMCksa31mdW5jdGlvbiBSYihTKXt2YXIgTD1WdCg3KTtMLndyaXRlX3NoaWZ0''@;'; put 'put ''KDQsMysyKlMubGVuZ3RoKSxMLndyaXRlX3NoaWZ0KDEsMjMpLEwud3JpdGVfc2hpZnQoMixTLmxlbmd0aCk7dmFyIGs9VnQoMipTLmxlbmd0aCk7ay53cml0ZV9zaGlmdCgyKlMubGVuZ3RoLFMsInV0ZjE2bGUiKTt2YXIgRz1WdCg0KTtyZXR1cm4gRy53cml0ZV9zaGlmdCg0LDApLGooW0ws''@;'; put 'put ''ayxHXSl9ZnVuY3Rpb24gTGIoUyl7aWYoUy5tYXRjaCgvXiMoRElWXC8wIXxHRVRUSU5HX0RBVEF8TlwvQXxOQU1FXD98TlVMTCF8TlVNIXxSRUYhfFZBTFVFISkkLykpcmV0dXJuIGZ1bmN0aW9uIHVaKFMpe3ZhciBMPVZ0KDEwKTtyZXR1cm4gTC53cml0ZV9zaGlmdCg0LDIpLEwud3JpdGVf''@;'; put 'put ''c2hpZnQoMSwyOCksTC53cml0ZV9zaGlmdCgxLFMpLEwud3JpdGVfc2hpZnQoNCwwKSxMfSgremhbU10pO2lmKFMubWF0Y2goL15cJD8oPzpbQS1XXVtBLVpdezJ9fFhbQS1FXVtBLVpdfFhGW0EtRF18W0EtWl17MSwyfSlcJD8oPzoxMFswLTNdXGR7NH18MTA0WzAtN11cZHszfXwxMDQ4WzAt''@;'; put 'put ''NF1cZHsyfXwxMDQ4NVswLTZdXGR8MTA0ODU3WzAtNl18WzEtOV1cZHswLDV9KSQvKSlyZXR1cm4gZnVuY3Rpb24gaUwoUyl7dmFyIEw9QW8oUyksaz1WdCgxNSk7cmV0dXJuIGsud3JpdGVfc2hpZnQoNCw3KSxrLndyaXRlX3NoaWZ0KDEsMzYpLGsud3JpdGVfc2hpZnQoNCxMLnIpLGsud3Jp''@;'; put 'put ''dGVfc2hpZnQoMixMLmN8KCIkIj09Uy5jaGFyQXQoMCk/MDoxKTw8MTR8KFMubWF0Y2goL1wkXGQvKT8wOjEpPDwxNSksay53cml0ZV9zaGlmdCg0LDApLGt9KFMpO2lmKFMubWF0Y2goL14iLioiJC8pKXJldHVybiBSYihTKTt0aHJvdyJGb3JtdWxhIHwiK1MrInwgbm90IHN1cHBvcnRlZCBm''@;'; put 'put ''b3IgWExTQiJ9dmFyIGFMPXswOiJCRUVQIiwxOiJPUEVOIiwyOiJPUEVOLkxJTktTIiwzOiJDTE9TRS5BTEwiLDQ6IlNBVkUiLDU6IlNBVkUuQVMiLDY6IkZJTEUuREVMRVRFIiw3OiJQQUdFLlNFVFVQIiw4OiJQUklOVCIsOToiUFJJTlRFUi5TRVRVUCIsMTA6IlFVSVQiLDExOiJORVcuV0lO''@;'; put 'put ''RE9XIiwxMjoiQVJSQU5HRS5BTEwiLDEzOiJXSU5ET1cuU0laRSIsMTQ6IldJTkRPVy5NT1ZFIiwxNToiRlVMTCIsMTY6IkNMT1NFIiwxNzoiUlVOIiwyMjoiU0VULlBSSU5ULkFSRUEiLDIzOiJTRVQuUFJJTlQuVElUTEVTIiwyNDoiU0VULlBBR0UuQlJFQUsiLDI1OiJSRU1PVkUuUEFHRS5C''@;'; put 'put ''UkVBSyIsMjY6IkZPTlQiLDI3OiJESVNQTEFZIiwyODoiUFJPVEVDVC5ET0NVTUVOVCIsMjk6IlBSRUNJU0lPTiIsMzA6IkExLlIxQzEiLDMxOiJDQUxDVUxBVEUuTk9XIiwzMjoiQ0FMQ1VMQVRJT04iLDM0OiJEQVRBLkZJTkQiLDM1OiJFWFRSQUNUIiwzNjoiREFUQS5ERUxFVEUiLDM3OiJT''@;'; put 'put ''RVQuREFUQUJBU0UiLDM4OiJTRVQuQ1JJVEVSSUEiLDM5OiJTT1JUIiw0MDoiREFUQS5TRVJJRVMiLDQxOiJUQUJMRSIsNDI6IkZPUk1BVC5OVU1CRVIiLDQzOiJBTElHTk1FTlQiLDQ0OiJTVFlMRSIsNDU6IkJPUkRFUiIsNDY6IkNFTEwuUFJPVEVDVElPTiIsNDc6IkNPTFVNTi5XSURUSCIs''@;'; put 'put ''NDg6IlVORE8iLDQ5OiJDVVQiLDUwOiJDT1BZIiw1MToiUEFTVEUiLDUyOiJDTEVBUiIsNTM6IlBBU1RFLlNQRUNJQUwiLDU0OiJFRElULkRFTEVURSIsNTU6IklOU0VSVCIsNTY6IkZJTEwuUklHSFQiLDU3OiJGSUxMLkRPV04iLDYxOiJERUZJTkUuTkFNRSIsNjI6IkNSRUFURS5OQU1FUyIs''@;'; put 'put ''NjM6IkZPUk1VTEEuR09UTyIsNjQ6IkZPUk1VTEEuRklORCIsNjU6IlNFTEVDVC5MQVNULkNFTEwiLDY2OiJTSE9XLkFDVElWRS5DRUxMIiw2NzoiR0FMTEVSWS5BUkVBIiw2ODoiR0FMTEVSWS5CQVIiLDY5OiJHQUxMRVJZLkNPTFVNTiIsNzA6IkdBTExFUlkuTElORSIsNzE6IkdBTExFUlku''@;'; put 'put ''UElFIiw3MjoiR0FMTEVSWS5TQ0FUVEVSIiw3MzoiQ09NQklOQVRJT04iLDc0OiJQUkVGRVJSRUQiLDc1OiJBREQuT1ZFUkxBWSIsNzY6IkdSSURMSU5FUyIsNzc6IlNFVC5QUkVGRVJSRUQiLDc4OiJBWEVTIiw3OToiTEVHRU5EIiw4MDoiQVRUQUNILlRFWFQiLDgxOiJBREQuQVJST1ciLDgy''@;'; put 'put ''OiJTRUxFQ1QuQ0hBUlQiLDgzOiJTRUxFQ1QuUExPVC5BUkVBIiw4NDoiUEFUVEVSTlMiLDg1OiJNQUlOLkNIQVJUIiw4NjoiT1ZFUkxBWSIsODc6IlNDQUxFIiw4ODoiRk9STUFULkxFR0VORCIsODk6IkZPUk1BVC5URVhUIiw5MDoiRURJVC5SRVBFQVQiLDkxOiJQQVJTRSIsOTI6IkpVU1RJ''@;'; put 'put ''RlkiLDkzOiJISURFIiw5NDoiVU5ISURFIiw5NToiV09SS1NQQUNFIiw5NjoiRk9STVVMQSIsOTc6IkZPUk1VTEEuRklMTCIsOTg6IkZPUk1VTEEuQVJSQVkiLDk5OiJEQVRBLkZJTkQuTkVYVCIsMTAwOiJEQVRBLkZJTkQuUFJFViIsMTAxOiJGT1JNVUxBLkZJTkQuTkVYVCIsMTAyOiJGT1JN''@;'; put 'put ''VUxBLkZJTkQuUFJFViIsMTAzOiJBQ1RJVkFURSIsMTA0OiJBQ1RJVkFURS5ORVhUIiwxMDU6IkFDVElWQVRFLlBSRVYiLDEwNjoiVU5MT0NLRUQuTkVYVCIsMTA3OiJVTkxPQ0tFRC5QUkVWIiwxMDg6IkNPUFkuUElDVFVSRSIsMTA5OiJTRUxFQ1QiLDExMDoiREVMRVRFLk5BTUUiLDExMToi''@;'; put 'put ''REVMRVRFLkZPUk1BVCIsMTEyOiJWTElORSIsMTEzOiJITElORSIsMTE0OiJWUEFHRSIsMTE1OiJIUEFHRSIsMTE2OiJWU0NST0xMIiwxMTc6IkhTQ1JPTEwiLDExODoiQUxFUlQiLDExOToiTkVXIiwxMjA6IkNBTkNFTC5DT1BZIiwxMjE6IlNIT1cuQ0xJUEJPQVJEIiwxMjI6Ik1FU1NBR0Ui''@;'; put 'put ''LDEyNDoiUEFTVEUuTElOSyIsMTI1OiJBUFAuQUNUSVZBVEUiLDEyNjoiREVMRVRFLkFSUk9XIiwxMjc6IlJPVy5IRUlHSFQiLDEyODoiRk9STUFULk1PVkUiLDEyOToiRk9STUFULlNJWkUiLDEzMDoiRk9STVVMQS5SRVBMQUNFIiwxMzE6IlNFTkQuS0VZUyIsMTMyOiJTRUxFQ1QuU1BFQ0lB''@;'; put 'put ''TCIsMTMzOiJBUFBMWS5OQU1FUyIsMTM0OiJSRVBMQUNFLkZPTlQiLDEzNToiRlJFRVpFLlBBTkVTIiwxMzY6IlNIT1cuSU5GTyIsMTM3OiJTUExJVCIsMTM4OiJPTi5XSU5ET1ciLDEzOToiT04uREFUQSIsMTQwOiJESVNBQkxFLklOUFVUIiwxNDI6Ik9VVExJTkUiLDE0MzoiTElTVC5OQU1F''@;'; put 'put ''UyIsMTQ0OiJGSUxFLkNMT1NFIiwxNDU6IlNBVkUuV09SS0JPT0siLDE0NjoiREFUQS5GT1JNIiwxNDc6IkNPUFkuQ0hBUlQiLDE0ODoiT04uVElNRSIsMTQ5OiJXQUlUIiwxNTA6IkZPUk1BVC5GT05UIiwxNTE6IkZJTEwuVVAiLDE1MjoiRklMTC5MRUZUIiwxNTM6IkRFTEVURS5PVkVSTEFZ''@;'; put 'put ''IiwxNTU6IlNIT1JULk1FTlVTIiwxNTk6IlNFVC5VUERBVEUuU1RBVFVTIiwxNjE6IkNPTE9SLlBBTEVUVEUiLDE2MjoiREVMRVRFLlNUWUxFIiwxNjM6IldJTkRPVy5SRVNUT1JFIiwxNjQ6IldJTkRPVy5NQVhJTUlaRSIsMTY2OiJDSEFOR0UuTElOSyIsMTY3OiJDQUxDVUxBVEUuRE9DVU1F''@;'; put 'put ''TlQiLDE2ODoiT04uS0VZIiwxNjk6IkFQUC5SRVNUT1JFIiwxNzA6IkFQUC5NT1ZFIiwxNzE6IkFQUC5TSVpFIiwxNzI6IkFQUC5NSU5JTUlaRSIsMTczOiJBUFAuTUFYSU1JWkUiLDE3NDoiQlJJTkcuVE8uRlJPTlQiLDE3NToiU0VORC5UTy5CQUNLIiwxODU6Ik1BSU4uQ0hBUlQuVFlQRSIs''@;'; put 'put ''MTg2OiJPVkVSTEFZLkNIQVJULlRZUEUiLDE4NzoiU0VMRUNULkVORCIsMTg4OiJPUEVOLk1BSUwiLDE4OToiU0VORC5NQUlMIiwxOTA6IlNUQU5EQVJELkZPTlQiLDE5MToiQ09OU09MSURBVEUiLDE5MjoiU09SVC5TUEVDSUFMIiwxOTM6IkdBTExFUlkuM0QuQVJFQSIsMTk0OiJHQUxMRVJZ''@;'; put 'put ''LjNELkNPTFVNTiIsMTk1OiJHQUxMRVJZLjNELkxJTkUiLDE5NjoiR0FMTEVSWS4zRC5QSUUiLDE5NzoiVklFVy4zRCIsMTk4OiJHT0FMLlNFRUsiLDE5OToiV09SS0dST1VQIiwyMDA6IkZJTEwuR1JPVVAiLDIwMToiVVBEQVRFLkxJTksiLDIwMjoiUFJPTU9URSIsMjAzOiJERU1PVEUiLDIw''@;'; put 'put ''NDoiU0hPVy5ERVRBSUwiLDIwNjoiVU5HUk9VUCIsMjA3OiJPQkpFQ1QuUFJPUEVSVElFUyIsMjA4OiJTQVZFLk5FVy5PQkpFQ1QiLDIwOToiU0hBUkUiLDIxMDoiU0hBUkUuTkFNRSIsMjExOiJEVVBMSUNBVEUiLDIxMjoiQVBQTFkuU1RZTEUiLDIxMzoiQVNTSUdOLlRPLk9CSkVDVCIsMjE0''@;'; put 'put ''OiJPQkpFQ1QuUFJPVEVDVElPTiIsMjE1OiJISURFLk9CSkVDVCIsMjE2OiJTRVQuRVhUUkFDVCIsMjE3OiJDUkVBVEUuUFVCTElTSEVSIiwyMTg6IlNVQlNDUklCRS5UTyIsMjE5OiJBVFRSSUJVVEVTIiwyMjA6IlNIT1cuVE9PTEJBUiIsMjIyOiJQUklOVC5QUkVWSUVXIiwyMjM6IkVESVQu''@;'; put 'put ''Q09MT1IiLDIyNDoiU0hPVy5MRVZFTFMiLDIyNToiRk9STUFULk1BSU4iLDIyNjoiRk9STUFULk9WRVJMQVkiLDIyNzoiT04uUkVDQUxDIiwyMjg6IkVESVQuU0VSSUVTIiwyMjk6IkRFRklORS5TVFlMRSIsMjQwOiJMSU5FLlBSSU5UIiwyNDM6IkVOVEVSLkRBVEEiLDI0OToiR0FMTEVSWS5S''@;'; put 'put ''QURBUiIsMjUwOiJNRVJHRS5TVFlMRVMiLDI1MToiRURJVElPTi5PUFRJT05TIiwyNTI6IlBBU1RFLlBJQ1RVUkUiLDI1MzoiUEFTVEUuUElDVFVSRS5MSU5LIiwyNTQ6IlNQRUxMSU5HIiwyNTY6IlpPT00iLDI1OToiSU5TRVJULk9CSkVDVCIsMjYwOiJXSU5ET1cuTUlOSU1JWkUiLDI2NToi''@;'; put 'put ''U09VTkQuTk9URSIsMjY2OiJTT1VORC5QTEFZIiwyNjc6IkZPUk1BVC5TSEFQRSIsMjY4OiJFWFRFTkQuUE9MWUdPTiIsMjY5OiJGT1JNQVQuQVVUTyIsMjcyOiJHQUxMRVJZLjNELkJBUiIsMjczOiJHQUxMRVJZLjNELlNVUkZBQ0UiLDI3NDoiRklMTC5BVVRPIiwyNzY6IkNVU1RPTUlaRS5U''@;'; put 'put ''T09MQkFSIiwyNzc6IkFERC5UT09MIiwyNzg6IkVESVQuT0JKRUNUIiwyNzk6Ik9OLkRPVUJMRUNMSUNLIiwyODA6Ik9OLkVOVFJZIiwyODE6IldPUktCT09LLkFERCIsMjgyOiJXT1JLQk9PSy5NT1ZFIiwyODM6IldPUktCT09LLkNPUFkiLDI4NDoiV09SS0JPT0suT1BUSU9OUyIsMjg1OiJT''@;'; put 'put ''QVZFLldPUktTUEFDRSIsMjg4OiJDSEFSVC5XSVpBUkQiLDI4OToiREVMRVRFLlRPT0wiLDI5MDoiTU9WRS5UT09MIiwyOTE6IldPUktCT09LLlNFTEVDVCIsMjkyOiJXT1JLQk9PSy5BQ1RJVkFURSIsMjkzOiJBU1NJR04uVE8uVE9PTCIsMjk1OiJDT1BZLlRPT0wiLDI5NjoiUkVTRVQuVE9P''@;'; put 'put ''TCIsMjk3OiJDT05TVFJBSU4uTlVNRVJJQyIsMjk4OiJQQVNURS5UT09MIiwzMDI6IldPUktCT09LLk5FVyIsMzA1OiJTQ0VOQVJJTy5DRUxMUyIsMzA2OiJTQ0VOQVJJTy5ERUxFVEUiLDMwNzoiU0NFTkFSSU8uQUREIiwzMDg6IlNDRU5BUklPLkVESVQiLDMwOToiU0NFTkFSSU8uU0hPVyIs''@;'; put 'put ''MzEwOiJTQ0VOQVJJTy5TSE9XLk5FWFQiLDMxMToiU0NFTkFSSU8uU1VNTUFSWSIsMzEyOiJQSVZPVC5UQUJMRS5XSVpBUkQiLDMxMzoiUElWT1QuRklFTEQuUFJPUEVSVElFUyIsMzE0OiJQSVZPVC5GSUVMRCIsMzE1OiJQSVZPVC5JVEVNIiwzMTY6IlBJVk9ULkFERC5GSUVMRFMiLDMxODoi''@;'; put 'put ''T1BUSU9OUy5DQUxDVUxBVElPTiIsMzE5OiJPUFRJT05TLkVESVQiLDMyMDoiT1BUSU9OUy5WSUVXIiwzMjE6IkFERElOLk1BTkFHRVIiLDMyMjoiTUVOVS5FRElUT1IiLDMyMzoiQVRUQUNILlRPT0xCQVJTIiwzMjQ6IlZCQUFjdGl2YXRlIiwzMjU6Ik9QVElPTlMuQ0hBUlQiLDMyODoiVkJB''@;'; put 'put ''LklOU0VSVC5GSUxFIiwzMzA6IlZCQS5QUk9DRURVUkUuREVGSU5JVElPTiIsMzM2OiJST1VUSU5HLlNMSVAiLDMzODoiUk9VVEUuRE9DVU1FTlQiLDMzOToiTUFJTC5MT0dPTiIsMzQyOiJJTlNFUlQuUElDVFVSRSIsMzQzOiJFRElULlRPT0wiLDM0NDoiR0FMTEVSWS5ET1VHSE5VVCIsMzUw''@;'; put 'put ''OiJDSEFSVC5UUkVORCIsMzUyOiJQSVZPVC5JVEVNLlBST1BFUlRJRVMiLDM1NDoiV09SS0JPT0suSU5TRVJUIiwzNTU6Ik9QVElPTlMuVFJBTlNJVElPTiIsMzU2OiJPUFRJT05TLkdFTkVSQUwiLDM3MDoiRklMVEVSLkFEVkFOQ0VEIiwzNzM6Ik1BSUwuQURELk1BSUxFUiIsMzc0OiJNQUlM''@;'; put 'put ''LkRFTEVURS5NQUlMRVIiLDM3NToiTUFJTC5SRVBMWSIsMzc2OiJNQUlMLlJFUExZLkFMTCIsMzc3OiJNQUlMLkZPUldBUkQiLDM3ODoiTUFJTC5ORVhULkxFVFRFUiIsMzc5OiJEQVRBLkxBQkVMIiwzODA6IklOU0VSVC5USVRMRSIsMzgxOiJGT05ULlBST1BFUlRJRVMiLDM4MjoiTUFDUk8u''@;'; put 'put ''T1BUSU9OUyIsMzgzOiJXT1JLQk9PSy5ISURFIiwzODQ6IldPUktCT09LLlVOSElERSIsMzg1OiJXT1JLQk9PSy5ERUxFVEUiLDM4NjoiV09SS0JPT0suTkFNRSIsMzg4OiJHQUxMRVJZLkNVU1RPTSIsMzkwOiJBREQuQ0hBUlQuQVVUT0ZPUk1BVCIsMzkxOiJERUxFVEUuQ0hBUlQuQVVUT0ZP''@;'; put 'put ''Uk1BVCIsMzkyOiJDSEFSVC5BREQuREFUQSIsMzkzOiJBVVRPLk9VVExJTkUiLDM5NDoiVEFCLk9SREVSIiwzOTU6IlNIT1cuRElBTE9HIiwzOTY6IlNFTEVDVC5BTEwiLDM5NzoiVU5HUk9VUC5TSEVFVFMiLDM5ODoiU1VCVE9UQUwuQ1JFQVRFIiwzOTk6IlNVQlRPVEFMLlJFTU9WRSIsNDAw''@;'; put 'put ''OiJSRU5BTUUuT0JKRUNUIiw0MTI6IldPUktCT09LLlNDUk9MTCIsNDEzOiJXT1JLQk9PSy5ORVhUIiw0MTQ6IldPUktCT09LLlBSRVYiLDQxNToiV09SS0JPT0suVEFCLlNQTElUIiw0MTY6IkZVTEwuU0NSRUVOIiw0MTc6IldPUktCT09LLlBST1RFQ1QiLDQyMDoiU0NST0xMQkFSLlBST1BF''@;'; put 'put ''UlRJRVMiLDQyMToiUElWT1QuU0hPVy5QQUdFUyIsNDIyOiJURVhULlRPLkNPTFVNTlMiLDQyMzoiRk9STUFULkNIQVJUVFlQRSIsNDI0OiJMSU5LLkZPUk1BVCIsNDI1OiJUUkFDRVIuRElTUExBWSIsNDMwOiJUUkFDRVIuTkFWSUdBVEUiLDQzMToiVFJBQ0VSLkNMRUFSIiw0MzI6IlRSQUNF''@;'; put 'put ''Ui5FUlJPUiIsNDMzOiJQSVZPVC5GSUVMRC5HUk9VUCIsNDM0OiJQSVZPVC5GSUVMRC5VTkdST1VQIiw0MzU6IkNIRUNLQk9YLlBST1BFUlRJRVMiLDQzNjoiTEFCRUwuUFJPUEVSVElFUyIsNDM3OiJMSVNUQk9YLlBST1BFUlRJRVMiLDQzODoiRURJVEJPWC5QUk9QRVJUSUVTIiw0Mzk6IlBJ''@;'; put 'put ''Vk9ULlJFRlJFU0giLDQ0MDoiTElOSy5DT01CTyIsNDQxOiJPUEVOLlRFWFQiLDQ0MjoiSElERS5ESUFMT0ciLDQ0MzoiU0VULkRJQUxPRy5GT0NVUyIsNDQ0OiJFTkFCTEUuT0JKRUNUIiw0NDU6IlBVU0hCVVRUT04uUFJPUEVSVElFUyIsNDQ2OiJTRVQuRElBTE9HLkRFRkFVTFQiLDQ0Nzoi''@;'; put 'put ''RklMVEVSIiw0NDg6IkZJTFRFUi5TSE9XLkFMTCIsNDQ5OiJDTEVBUi5PVVRMSU5FIiw0NTA6IkZVTkNUSU9OLldJWkFSRCIsNDUxOiJBREQuTElTVC5JVEVNIiw0NTI6IlNFVC5MSVNULklURU0iLDQ1MzoiUkVNT1ZFLkxJU1QuSVRFTSIsNDU0OiJTRUxFQ1QuTElTVC5JVEVNIiw0NTU6IlNF''@;'; put 'put ''VC5DT05UUk9MLlZBTFVFIiw0NTY6IlNBVkUuQ09QWS5BUyIsNDU4OiJPUFRJT05TLkxJU1RTLkFERCIsNDU5OiJPUFRJT05TLkxJU1RTLkRFTEVURSIsNDYwOiJTRVJJRVMuQVhFUyIsNDYxOiJTRVJJRVMuWCIsNDYyOiJTRVJJRVMuWSIsNDYzOiJFUlJPUkJBUi5YIiw0NjQ6IkVSUk9SQkFS''@;'; put 'put ''LlkiLDQ2NToiRk9STUFULkNIQVJUIiw0NjY6IlNFUklFUy5PUkRFUiIsNDY3OiJNQUlMLkxPR09GRiIsNDY4OiJDTEVBUi5ST1VUSU5HLlNMSVAiLDQ2OToiQVBQLkFDVElWQVRFLk1JQ1JPU09GVCIsNDcwOiJNQUlMLkVESVQuTUFJTEVSIiw0NzE6Ik9OLlNIRUVUIiw0NzI6IlNUQU5EQVJE''@;'; put 'put ''LldJRFRIIiw0NzM6IlNDRU5BUklPLk1FUkdFIiw0NzQ6IlNVTU1BUlkuSU5GTyIsNDc1OiJGSU5ELkZJTEUiLDQ3NjoiQUNUSVZFLkNFTEwuRk9OVCIsNDc3OiJFTkFCTEUuVElQV0laQVJEIiw0Nzg6IlZCQS5NQUtFLkFERElOIiw0ODA6IklOU0VSVERBVEFUQUJMRSIsNDgxOiJXT1JLR1JP''@;'; put 'put ''VVAuT1BUSU9OUyIsNDgyOiJNQUlMLlNFTkQuTUFJTEVSIiw0ODU6IkFVVE9DT1JSRUNUIiw0ODk6IlBPU1QuRE9DVU1FTlQiLDQ5MToiUElDS0xJU1QiLDQ5MzoiVklFVy5TSE9XIiw0OTQ6IlZJRVcuREVGSU5FIiw0OTU6IlZJRVcuREVMRVRFIiw1MDk6IlNIRUVULkJBQ0tHUk9VTkQiLDUx''@;'; put 'put ''MDoiSU5TRVJULk1BUC5PQkpFQ1QiLDUxMToiT1BUSU9OUy5NRU5PTk8iLDUxNzoiTVNPQ0hFQ0tTIiw1MTg6Ik5PUk1BTCIsNTE5OiJMQVlPVVQiLDUyMDoiUk0uUFJJTlQuQVJFQSIsNTIxOiJDTEVBUi5QUklOVC5BUkVBIiw1MjI6IkFERC5QUklOVC5BUkVBIiw1MjM6Ik1PVkUuQlJLIiw1''@;'; put 'put ''NDU6IkhJREVDVVJSLk5PVEUiLDU0NjoiSElERUFMTC5OT1RFUyIsNTQ3OiJERUxFVEUuTk9URSIsNTQ4OiJUUkFWRVJTRS5OT1RFUyIsNTQ5OiJBQ1RJVkFURS5OT1RFUyIsNjIwOiJQUk9URUNULlJFVklTSU9OUyIsNjIxOiJVTlBST1RFQ1QuUkVWSVNJT05TIiw2NDc6Ik9QVElPTlMuTUUi''@;'; put 'put ''LDY1MzoiV0VCLlBVQkxJU0giLDY2NzoiTkVXV0VCUVVFUlkiLDY3MzoiUElWT1QuVEFCTEUuQ0hBUlQiLDc1MzoiT1BUSU9OUy5TQVZFIiw3NTU6Ik9QVElPTlMuU1BFTEwiLDgwODoiSElERUFMTC5JTktBTk5PVFMifSxPYj17MDoiQ09VTlQiLDE6IklGIiwyOiJJU05BIiwzOiJJU0VSUk9S''@;'; put 'put ''Iiw0OiJTVU0iLDU6IkFWRVJBR0UiLDY6Ik1JTiIsNzoiTUFYIiw4OiJST1ciLDk6IkNPTFVNTiIsMTA6Ik5BIiwxMToiTlBWIiwxMjoiU1RERVYiLDEzOiJET0xMQVIiLDE0OiJGSVhFRCIsMTU6IlNJTiIsMTY6IkNPUyIsMTc6IlRBTiIsMTg6IkFUQU4iLDE5OiJQSSIsMjA6IlNRUlQiLDIx''@;'; put 'put ''OiJFWFAiLDIyOiJMTiIsMjM6IkxPRzEwIiwyNDoiQUJTIiwyNToiSU5UIiwyNjoiU0lHTiIsMjc6IlJPVU5EIiwyODoiTE9PS1VQIiwyOToiSU5ERVgiLDMwOiJSRVBUIiwzMToiTUlEIiwzMjoiTEVOIiwzMzoiVkFMVUUiLDM0OiJUUlVFIiwzNToiRkFMU0UiLDM2OiJBTkQiLDM3OiJPUiIs''@;'; put 'put ''Mzg6Ik5PVCIsMzk6Ik1PRCIsNDA6IkRDT1VOVCIsNDE6IkRTVU0iLDQyOiJEQVZFUkFHRSIsNDM6IkRNSU4iLDQ0OiJETUFYIiw0NToiRFNUREVWIiw0NjoiVkFSIiw0NzoiRFZBUiIsNDg6IlRFWFQiLDQ5OiJMSU5FU1QiLDUwOiJUUkVORCIsNTE6IkxPR0VTVCIsNTI6IkdST1dUSCIsNTM6''@;'; put 'put ''IkdPVE8iLDU0OiJIQUxUIiw1NToiUkVUVVJOIiw1NjoiUFYiLDU3OiJGViIsNTg6Ik5QRVIiLDU5OiJQTVQiLDYwOiJSQVRFIiw2MToiTUlSUiIsNjI6IklSUiIsNjM6IlJBTkQiLDY0OiJNQVRDSCIsNjU6IkRBVEUiLDY2OiJUSU1FIiw2NzoiREFZIiw2ODoiTU9OVEgiLDY5OiJZRUFSIiw3''@;'; put 'put ''MDoiV0VFS0RBWSIsNzE6IkhPVVIiLDcyOiJNSU5VVEUiLDczOiJTRUNPTkQiLDc0OiJOT1ciLDc1OiJBUkVBUyIsNzY6IlJPV1MiLDc3OiJDT0xVTU5TIiw3ODoiT0ZGU0VUIiw3OToiQUJTUkVGIiw4MDoiUkVMUkVGIiw4MToiQVJHVU1FTlQiLDgyOiJTRUFSQ0giLDgzOiJUUkFOU1BPU0Ui''@;'; put 'put ''LDg0OiJFUlJPUiIsODU6IlNURVAiLDg2OiJUWVBFIiw4NzoiRUNITyIsODg6IlNFVC5OQU1FIiw4OToiQ0FMTEVSIiw5MDoiREVSRUYiLDkxOiJXSU5ET1dTIiw5MjoiU0VSSUVTIiw5MzoiRE9DVU1FTlRTIiw5NDoiQUNUSVZFLkNFTEwiLDk1OiJTRUxFQ1RJT04iLDk2OiJSRVNVTFQiLDk3''@;'; put 'put ''OiJBVEFOMiIsOTg6IkFTSU4iLDk5OiJBQ09TIiwxMDA6IkNIT09TRSIsMTAxOiJITE9PS1VQIiwxMDI6IlZMT09LVVAiLDEwMzoiTElOS1MiLDEwNDoiSU5QVVQiLDEwNToiSVNSRUYiLDEwNjoiR0VULkZPUk1VTEEiLDEwNzoiR0VULk5BTUUiLDEwODoiU0VULlZBTFVFIiwxMDk6IkxPRyIs''@;'; put 'put ''MTEwOiJFWEVDIiwxMTE6IkNIQVIiLDExMjoiTE9XRVIiLDExMzoiVVBQRVIiLDExNDoiUFJPUEVSIiwxMTU6IkxFRlQiLDExNjoiUklHSFQiLDExNzoiRVhBQ1QiLDExODoiVFJJTSIsMTE5OiJSRVBMQUNFIiwxMjA6IlNVQlNUSVRVVEUiLDEyMToiQ09ERSIsMTIyOiJOQU1FUyIsMTIzOiJE''@;'; put 'put ''SVJFQ1RPUlkiLDEyNDoiRklORCIsMTI1OiJDRUxMIiwxMjY6IklTRVJSIiwxMjc6IklTVEVYVCIsMTI4OiJJU05VTUJFUiIsMTI5OiJJU0JMQU5LIiwxMzA6IlQiLDEzMToiTiIsMTMyOiJGT1BFTiIsMTMzOiJGQ0xPU0UiLDEzNDoiRlNJWkUiLDEzNToiRlJFQURMTiIsMTM2OiJGUkVBRCIs''@;'; put 'put ''MTM3OiJGV1JJVEVMTiIsMTM4OiJGV1JJVEUiLDEzOToiRlBPUyIsMTQwOiJEQVRFVkFMVUUiLDE0MToiVElNRVZBTFVFIiwxNDI6IlNMTiIsMTQzOiJTWUQiLDE0NDoiRERCIiwxNDU6IkdFVC5ERUYiLDE0NjoiUkVGVEVYVCIsMTQ3OiJURVhUUkVGIiwxNDg6IklORElSRUNUIiwxNDk6IlJF''@;'; put 'put ''R0lTVEVSIiwxNTA6IkNBTEwiLDE1MToiQURELkJBUiIsMTUyOiJBREQuTUVOVSIsMTUzOiJBREQuQ09NTUFORCIsMTU0OiJFTkFCTEUuQ09NTUFORCIsMTU1OiJDSEVDSy5DT01NQU5EIiwxNTY6IlJFTkFNRS5DT01NQU5EIiwxNTc6IlNIT1cuQkFSIiwxNTg6IkRFTEVURS5NRU5VIiwxNTk6''@;'; put 'put ''IkRFTEVURS5DT01NQU5EIiwxNjA6IkdFVC5DSEFSVC5JVEVNIiwxNjE6IkRJQUxPRy5CT1giLDE2MjoiQ0xFQU4iLDE2MzoiTURFVEVSTSIsMTY0OiJNSU5WRVJTRSIsMTY1OiJNTVVMVCIsMTY2OiJGSUxFUyIsMTY3OiJJUE1UIiwxNjg6IlBQTVQiLDE2OToiQ09VTlRBIiwxNzA6IkNBTkNF''@;'; put 'put ''TC5LRVkiLDE3MToiRk9SIiwxNzI6IldISUxFIiwxNzM6IkJSRUFLIiwxNzQ6Ik5FWFQiLDE3NToiSU5JVElBVEUiLDE3NjoiUkVRVUVTVCIsMTc3OiJQT0tFIiwxNzg6IkVYRUNVVEUiLDE3OToiVEVSTUlOQVRFIiwxODA6IlJFU1RBUlQiLDE4MToiSEVMUCIsMTgyOiJHRVQuQkFSIiwxODM6''@;'; put 'put ''IlBST0RVQ1QiLDE4NDoiRkFDVCIsMTg1OiJHRVQuQ0VMTCIsMTg2OiJHRVQuV09SS1NQQUNFIiwxODc6IkdFVC5XSU5ET1ciLDE4ODoiR0VULkRPQ1VNRU5UIiwxODk6IkRQUk9EVUNUIiwxOTA6IklTTk9OVEVYVCIsMTkxOiJHRVQuTk9URSIsMTkyOiJOT1RFIiwxOTM6IlNUREVWUCIsMTk0''@;'; put 'put ''OiJWQVJQIiwxOTU6IkRTVERFVlAiLDE5NjoiRFZBUlAiLDE5NzoiVFJVTkMiLDE5ODoiSVNMT0dJQ0FMIiwxOTk6IkRDT1VOVEEiLDIwMDoiREVMRVRFLkJBUiIsMjAxOiJVTlJFR0lTVEVSIiwyMDQ6IlVTRE9MTEFSIiwyMDU6IkZJTkRCIiwyMDY6IlNFQVJDSEIiLDIwNzoiUkVQTEFDRUIi''@;'; put 'put ''LDIwODoiTEVGVEIiLDIwOToiUklHSFRCIiwyMTA6Ik1JREIiLDIxMToiTEVOQiIsMjEyOiJST1VORFVQIiwyMTM6IlJPVU5ERE9XTiIsMjE0OiJBU0MiLDIxNToiREJDUyIsMjE2OiJSQU5LIiwyMTk6IkFERFJFU1MiLDIyMDoiREFZUzM2MCIsMjIxOiJUT0RBWSIsMjIyOiJWREIiLDIyMzoi''@;'; put 'put ''RUxTRSIsMjI0OiJFTFNFLklGIiwyMjU6IkVORC5JRiIsMjI2OiJGT1IuQ0VMTCIsMjI3OiJNRURJQU4iLDIyODoiU1VNUFJPRFVDVCIsMjI5OiJTSU5IIiwyMzA6IkNPU0giLDIzMToiVEFOSCIsMjMyOiJBU0lOSCIsMjMzOiJBQ09TSCIsMjM0OiJBVEFOSCIsMjM1OiJER0VUIiwyMzY6IkNS''@;'; put 'put ''RUFURS5PQkpFQ1QiLDIzNzoiVk9MQVRJTEUiLDIzODoiTEFTVC5FUlJPUiIsMjM5OiJDVVNUT00uVU5ETyIsMjQwOiJDVVNUT00uUkVQRUFUIiwyNDE6IkZPUk1VTEEuQ09OVkVSVCIsMjQyOiJHRVQuTElOSy5JTkZPIiwyNDM6IlRFWFQuQk9YIiwyNDQ6IklORk8iLDI0NToiR1JPVVAiLDI0''@;'; put 'put ''NjoiR0VULk9CSkVDVCIsMjQ3OiJEQiIsMjQ4OiJQQVVTRSIsMjUxOiJSRVNVTUUiLDI1MjoiRlJFUVVFTkNZIiwyNTM6IkFERC5UT09MQkFSIiwyNTQ6IkRFTEVURS5UT09MQkFSIiwyNTU6IlVzZXIiLDI1NjoiUkVTRVQuVE9PTEJBUiIsMjU3OiJFVkFMVUFURSIsMjU4OiJHRVQuVE9PTEJB''@;'; put 'put ''UiIsMjU5OiJHRVQuVE9PTCIsMjYwOiJTUEVMTElORy5DSEVDSyIsMjYxOiJFUlJPUi5UWVBFIiwyNjI6IkFQUC5USVRMRSIsMjYzOiJXSU5ET1cuVElUTEUiLDI2NDoiU0FWRS5UT09MQkFSIiwyNjU6IkVOQUJMRS5UT09MIiwyNjY6IlBSRVNTLlRPT0wiLDI2NzoiUkVHSVNURVIuSUQiLDI2''@;'; put 'put ''ODoiR0VULldPUktCT09LIiwyNjk6IkFWRURFViIsMjcwOiJCRVRBRElTVCIsMjcxOiJHQU1NQUxOIiwyNzI6IkJFVEFJTlYiLDI3MzoiQklOT01ESVNUIiwyNzQ6IkNISURJU1QiLDI3NToiQ0hJSU5WIiwyNzY6IkNPTUJJTiIsMjc3OiJDT05GSURFTkNFIiwyNzg6IkNSSVRCSU5PTSIsMjc5''@;'; put 'put ''OiJFVkVOIiwyODA6IkVYUE9ORElTVCIsMjgxOiJGRElTVCIsMjgyOiJGSU5WIiwyODM6IkZJU0hFUiIsMjg0OiJGSVNIRVJJTlYiLDI4NToiRkxPT1IiLDI4NjoiR0FNTUFESVNUIiwyODc6IkdBTU1BSU5WIiwyODg6IkNFSUxJTkciLDI4OToiSFlQR0VPTURJU1QiLDI5MDoiTE9HTk9STURJ''@;'; put 'put ''U1QiLDI5MToiTE9HSU5WIiwyOTI6Ik5FR0JJTk9NRElTVCIsMjkzOiJOT1JNRElTVCIsMjk0OiJOT1JNU0RJU1QiLDI5NToiTk9STUlOViIsMjk2OiJOT1JNU0lOViIsMjk3OiJTVEFOREFSRElaRSIsMjk4OiJPREQiLDI5OToiUEVSTVVUIiwzMDA6IlBPSVNTT04iLDMwMToiVERJU1QiLDMw''@;'; put 'put ''MjoiV0VJQlVMTCIsMzAzOiJTVU1YTVkyIiwzMDQ6IlNVTVgyTVkyIiwzMDU6IlNVTVgyUFkyIiwzMDY6IkNISVRFU1QiLDMwNzoiQ09SUkVMIiwzMDg6IkNPVkFSIiwzMDk6IkZPUkVDQVNUIiwzMTA6IkZURVNUIiwzMTE6IklOVEVSQ0VQVCIsMzEyOiJQRUFSU09OIiwzMTM6IlJTUSIsMzE0''@;'; put 'put ''OiJTVEVZWCIsMzE1OiJTTE9QRSIsMzE2OiJUVEVTVCIsMzE3OiJQUk9CIiwzMTg6IkRFVlNRIiwzMTk6IkdFT01FQU4iLDMyMDoiSEFSTUVBTiIsMzIxOiJTVU1TUSIsMzIyOiJLVVJUIiwzMjM6IlNLRVciLDMyNDoiWlRFU1QiLDMyNToiTEFSR0UiLDMyNjoiU01BTEwiLDMyNzoiUVVBUlRJ''@;'; put 'put ''TEUiLDMyODoiUEVSQ0VOVElMRSIsMzI5OiJQRVJDRU5UUkFOSyIsMzMwOiJNT0RFIiwzMzE6IlRSSU1NRUFOIiwzMzI6IlRJTlYiLDMzNDoiTU9WSUUuQ09NTUFORCIsMzM1OiJHRVQuTU9WSUUiLDMzNjoiQ09OQ0FURU5BVEUiLDMzNzoiUE9XRVIiLDMzODoiUElWT1QuQURELkRBVEEiLDMz''@;'; put 'put ''OToiR0VULlBJVk9ULlRBQkxFIiwzNDA6IkdFVC5QSVZPVC5GSUVMRCIsMzQxOiJHRVQuUElWT1QuSVRFTSIsMzQyOiJSQURJQU5TIiwzNDM6IkRFR1JFRVMiLDM0NDoiU1VCVE9UQUwiLDM0NToiU1VNSUYiLDM0NjoiQ09VTlRJRiIsMzQ3OiJDT1VOVEJMQU5LIiwzNDg6IlNDRU5BUklPLkdF''@;'; put 'put ''VCIsMzQ5OiJPUFRJT05TLkxJU1RTLkdFVCIsMzUwOiJJU1BNVCIsMzUxOiJEQVRFRElGIiwzNTI6IkRBVEVTVFJJTkciLDM1MzoiTlVNQkVSU1RSSU5HIiwzNTQ6IlJPTUFOIiwzNTU6Ik9QRU4uRElBTE9HIiwzNTY6IlNBVkUuRElBTE9HIiwzNTc6IlZJRVcuR0VUIiwzNTg6IkdFVFBJVk9U''@;'; put 'put ''REFUQSIsMzU5OiJIWVBFUkxJTksiLDM2MDoiUEhPTkVUSUMiLDM2MToiQVZFUkFHRUEiLDM2MjoiTUFYQSIsMzYzOiJNSU5BIiwzNjQ6IlNUREVWUEEiLDM2NToiVkFSUEEiLDM2NjoiU1RERVZBIiwzNjc6IlZBUkEiLDM2ODoiQkFIVFRFWFQiLDM2OToiVEhBSURBWU9GV0VFSyIsMzcwOiJU''@;'; put 'put ''SEFJRElHSVQiLDM3MToiVEhBSU1PTlRIT0ZZRUFSIiwzNzI6IlRIQUlOVU1TT1VORCIsMzczOiJUSEFJTlVNU1RSSU5HIiwzNzQ6IlRIQUlTVFJJTkdMRU5HVEgiLDM3NToiSVNUSEFJRElHSVQiLDM3NjoiUk9VTkRCQUhURE9XTiIsMzc3OiJST1VOREJBSFRVUCIsMzc4OiJUSEFJWUVBUiIs''@;'; put 'put ''Mzc5OiJSVEQiLDM4MDoiQ1VCRVZBTFVFIiwzODE6IkNVQkVNRU1CRVIiLDM4MjoiQ1VCRU1FTUJFUlBST1BFUlRZIiwzODM6IkNVQkVSQU5LRURNRU1CRVIiLDM4NDoiSEVYMkJJTiIsMzg1OiJIRVgyREVDIiwzODY6IkhFWDJPQ1QiLDM4NzoiREVDMkJJTiIsMzg4OiJERUMySEVYIiwzODk6''@;'; put 'put ''IkRFQzJPQ1QiLDM5MDoiT0NUMkJJTiIsMzkxOiJPQ1QySEVYIiwzOTI6Ik9DVDJERUMiLDM5MzoiQklOMkRFQyIsMzk0OiJCSU4yT0NUIiwzOTU6IkJJTjJIRVgiLDM5NjoiSU1TVUIiLDM5NzoiSU1ESVYiLDM5ODoiSU1QT1dFUiIsMzk5OiJJTUFCUyIsNDAwOiJJTVNRUlQiLDQwMToiSU1M''@;'; put 'put ''TiIsNDAyOiJJTUxPRzIiLDQwMzoiSU1MT0cxMCIsNDA0OiJJTVNJTiIsNDA1OiJJTUNPUyIsNDA2OiJJTUVYUCIsNDA3OiJJTUFSR1VNRU5UIiw0MDg6IklNQ09OSlVHQVRFIiw0MDk6IklNQUdJTkFSWSIsNDEwOiJJTVJFQUwiLDQxMToiQ09NUExFWCIsNDEyOiJJTVNVTSIsNDEzOiJJTVBS''@;'; put 'put ''T0RVQ1QiLDQxNDoiU0VSSUVTU1VNIiw0MTU6IkZBQ1RET1VCTEUiLDQxNjoiU1FSVFBJIiw0MTc6IlFVT1RJRU5UIiw0MTg6IkRFTFRBIiw0MTk6IkdFU1RFUCIsNDIwOiJJU0VWRU4iLDQyMToiSVNPREQiLDQyMjoiTVJPVU5EIiw0MjM6IkVSRiIsNDI0OiJFUkZDIiw0MjU6IkJFU1NFTEoi''@;'; put 'put ''LDQyNjoiQkVTU0VMSyIsNDI3OiJCRVNTRUxZIiw0Mjg6IkJFU1NFTEkiLDQyOToiWElSUiIsNDMwOiJYTlBWIiw0MzE6IlBSSUNFTUFUIiw0MzI6IllJRUxETUFUIiw0MzM6IklOVFJBVEUiLDQzNDoiUkVDRUlWRUQiLDQzNToiRElTQyIsNDM2OiJQUklDRURJU0MiLDQzNzoiWUlFTERESVND''@;'; put 'put ''Iiw0Mzg6IlRCSUxMRVEiLDQzOToiVEJJTExQUklDRSIsNDQwOiJUQklMTFlJRUxEIiw0NDE6IlBSSUNFIiw0NDI6IllJRUxEIiw0NDM6IkRPTExBUkRFIiw0NDQ6IkRPTExBUkZSIiw0NDU6Ik5PTUlOQUwiLDQ0NjoiRUZGRUNUIiw0NDc6IkNVTVBSSU5DIiw0NDg6IkNVTUlQTVQiLDQ0OToi''@;'; put 'put ''RURBVEUiLDQ1MDoiRU9NT05USCIsNDUxOiJZRUFSRlJBQyIsNDUyOiJDT1VQREFZQlMiLDQ1MzoiQ09VUERBWVMiLDQ1NDoiQ09VUERBWVNOQyIsNDU1OiJDT1VQTkNEIiw0NTY6IkNPVVBOVU0iLDQ1NzoiQ09VUFBDRCIsNDU4OiJEVVJBVElPTiIsNDU5OiJNRFVSQVRJT04iLDQ2MDoiT0RE''@;'; put 'put ''TFBSSUNFIiw0NjE6Ik9ERExZSUVMRCIsNDYyOiJPRERGUFJJQ0UiLDQ2MzoiT0RERllJRUxEIiw0NjQ6IlJBTkRCRVRXRUVOIiw0NjU6IldFRUtOVU0iLDQ2NjoiQU1PUkRFR1JDIiw0Njc6IkFNT1JMSU5DIiw0Njg6IkNPTlZFUlQiLDcyNDoiU0hFRVRKUyIsNDY5OiJBQ0NSSU5UIiw0NzA6''@;'; put 'put ''IkFDQ1JJTlRNIiw0NzE6IldPUktEQVkiLDQ3MjoiTkVUV09SS0RBWVMiLDQ3MzoiR0NEIiw0NzQ6Ik1VTFRJTk9NSUFMIiw0NzU6IkxDTSIsNDc2OiJGVlNDSEVEVUxFIiw0Nzc6IkNVQkVLUElNRU1CRVIiLDQ3ODoiQ1VCRVNFVCIsNDc5OiJDVUJFU0VUQ09VTlQiLDQ4MDoiSUZFUlJPUiIs''@;'; put 'put ''NDgxOiJDT1VOVElGUyIsNDgyOiJTVU1JRlMiLDQ4MzoiQVZFUkFHRUlGIiw0ODQ6IkFWRVJBR0VJRlMifSxyeD17MjoxLDM6MSwxMDowLDE1OjEsMTY6MSwxNzoxLDE4OjEsMTk6MCwyMDoxLDIxOjEsMjI6MSwyMzoxLDI0OjEsMjU6MSwyNjoxLDI3OjIsMzA6MiwzMTozLDMyOjEsMzM6MSwz''@;'; put 'put ''NDowLDM1OjAsMzg6MSwzOToyLDQwOjMsNDE6Myw0MjozLDQzOjMsNDQ6Myw0NTozLDQ3OjMsNDg6Miw1MzoxLDYxOjMsNjM6MCw2NTozLDY2OjMsNjc6MSw2ODoxLDY5OjEsNzA6MSw3MToxLDcyOjEsNzM6MSw3NDowLDc1OjEsNzY6MSw3NzoxLDc5OjIsODA6Miw4MzoxLDg1OjAsODY6MSw4''@;'; put 'put ''OTowLDkwOjEsOTQ6MCw5NTowLDk3OjIsOTg6MSw5OToxLDEwMTozLDEwMjozLDEwNToxLDEwNjoxLDEwODoyLDExMToxLDExMjoxLDExMzoxLDExNDoxLDExNzoyLDExODoxLDExOTo0LDEyMToxLDEyNjoxLDEyNzoxLDEyODoxLDEyOToxLDEzMDoxLDEzMToxLDEzMzoxLDEzNDoxLDEzNTox''@;'; put 'put ''LDEzNjoyLDEzNzoyLDEzODoyLDE0MDoxLDE0MToxLDE0MjozLDE0Mzo0LDE0NDo0LDE2MToxLDE2MjoxLDE2MzoxLDE2NDoxLDE2NToyLDE3MjoxLDE3NToyLDE3NjoyLDE3NzozLDE3ODoyLDE3OToxLDE4NDoxLDE4NjoxLDE4OTozLDE5MDoxLDE5NTozLDE5NjozLDE5NzoxLDE5ODoxLDE5''@;'; put 'put ''OTozLDIwMToxLDIwNzo0LDIxMDozLDIxMToxLDIxMjoyLDIxMzoyLDIxNDoxLDIxNToxLDIyNTowLDIyOToxLDIzMDoxLDIzMToxLDIzMjoxLDIzMzoxLDIzNDoxLDIzNTozLDI0NDoxLDI0Nzo0LDI1MjoyLDI1NzoxLDI2MToxLDI3MToxLDI3Mzo0LDI3NDoyLDI3NToyLDI3NjoyLDI3Nzoz''@;'; put 'put ''LDI3ODozLDI3OToxLDI4MDozLDI4MTozLDI4MjozLDI4MzoxLDI4NDoxLDI4NToyLDI4Njo0LDI4NzozLDI4ODoyLDI4OTo0LDI5MDozLDI5MTozLDI5MjozLDI5Mzo0LDI5NDoxLDI5NTozLDI5NjoxLDI5NzozLDI5ODoxLDI5OToyLDMwMDozLDMwMTozLDMwMjo0LDMwMzoyLDMwNDoyLDMw''@;'; put 'put ''NToyLDMwNjoyLDMwNzoyLDMwODoyLDMwOTozLDMxMDoyLDMxMToyLDMxMjoyLDMxMzoyLDMxNDoyLDMxNToyLDMxNjo0LDMyNToyLDMyNjoyLDMyNzoyLDMyODoyLDMzMToyLDMzMjoyLDMzNzoyLDM0MjoxLDM0MzoxLDM0NjoyLDM0NzoxLDM1MDo0LDM1MTozLDM1MjoxLDM1MzoyLDM2MDox''@;'; put 'put ''LDM2ODoxLDM2OToxLDM3MDoxLDM3MToxLDM3MjoxLDM3MzoxLDM3NDoxLDM3NToxLDM3NjoxLDM3NzoxLDM3ODoxLDM4MjozLDM4NToxLDM5MjoxLDM5MzoxLDM5NjoyLDM5NzoyLDM5ODoyLDM5OToxLDQwMDoxLDQwMToxLDQwMjoxLDQwMzoxLDQwNDoxLDQwNToxLDQwNjoxLDQwNzoxLDQw''@;'; put 'put ''ODoxLDQwOToxLDQxMDoxLDQxNDo0LDQxNToxLDQxNjoxLDQxNzoyLDQyMDoxLDQyMToxLDQyMjoyLDQyNDoxLDQyNToyLDQyNjoyLDQyNzoyLDQyODoyLDQzMDozLDQzODozLDQzOTozLDQ0MDozLDQ0MzoyLDQ0NDoyLDQ0NToyLDQ0NjoyLDQ0Nzo2LDQ0ODo2LDQ0OToyLDQ1MDoyLDQ2NDoy''@;'; put 'put ''LDQ2ODozLDQ3NjoyLDQ3OToxLDQ4MDoyLDY1NTM1OjB9LGZkPXsiX3hsZm4uQUNPVCI6IkFDT1QiLCJfeGxmbi5BQ09USCI6IkFDT1RIIiwiX3hsZm4uQUdHUkVHQVRFIjoiQUdHUkVHQVRFIiwiX3hsZm4uQVJBQklDIjoiQVJBQklDIiwiX3hsZm4uQVZFUkFHRUlGIjoiQVZFUkFHRUlGIiwi''@;'; put 'put ''X3hsZm4uQVZFUkFHRUlGUyI6IkFWRVJBR0VJRlMiLCJfeGxmbi5CQVNFIjoiQkFTRSIsIl94bGZuLkJFVEEuRElTVCI6IkJFVEEuRElTVCIsIl94bGZuLkJFVEEuSU5WIjoiQkVUQS5JTlYiLCJfeGxmbi5CSU5PTS5ESVNUIjoiQklOT00uRElTVCIsIl94bGZuLkJJTk9NLkRJU1QuUkFOR0Ui''@;'; put 'put ''OiJCSU5PTS5ESVNULlJBTkdFIiwiX3hsZm4uQklOT00uSU5WIjoiQklOT00uSU5WIiwiX3hsZm4uQklUQU5EIjoiQklUQU5EIiwiX3hsZm4uQklUTFNISUZUIjoiQklUTFNISUZUIiwiX3hsZm4uQklUT1IiOiJCSVRPUiIsIl94bGZuLkJJVFJTSElGVCI6IkJJVFJTSElGVCIsIl94bGZuLkJJ''@;'; put 'put ''VFhPUiI6IkJJVFhPUiIsIl94bGZuLkNFSUxJTkcuTUFUSCI6IkNFSUxJTkcuTUFUSCIsIl94bGZuLkNFSUxJTkcuUFJFQ0lTRSI6IkNFSUxJTkcuUFJFQ0lTRSIsIl94bGZuLkNISVNRLkRJU1QiOiJDSElTUS5ESVNUIiwiX3hsZm4uQ0hJU1EuRElTVC5SVCI6IkNISVNRLkRJU1QuUlQiLCJf''@;'; put 'put ''eGxmbi5DSElTUS5JTlYiOiJDSElTUS5JTlYiLCJfeGxmbi5DSElTUS5JTlYuUlQiOiJDSElTUS5JTlYuUlQiLCJfeGxmbi5DSElTUS5URVNUIjoiQ0hJU1EuVEVTVCIsIl94bGZuLkNPTUJJTkEiOiJDT01CSU5BIiwiX3hsZm4uQ09OQ0FUIjoiQ09OQ0FUIiwiX3hsZm4uQ09ORklERU5DRS5O''@;'; put 'put ''T1JNIjoiQ09ORklERU5DRS5OT1JNIiwiX3hsZm4uQ09ORklERU5DRS5UIjoiQ09ORklERU5DRS5UIiwiX3hsZm4uQ09UIjoiQ09UIiwiX3hsZm4uQ09USCI6IkNPVEgiLCJfeGxmbi5DT1VOVElGUyI6IkNPVU5USUZTIiwiX3hsZm4uQ09WQVJJQU5DRS5QIjoiQ09WQVJJQU5DRS5QIiwiX3hs''@;'; put 'put ''Zm4uQ09WQVJJQU5DRS5TIjoiQ09WQVJJQU5DRS5TIiwiX3hsZm4uQ1NDIjoiQ1NDIiwiX3hsZm4uQ1NDSCI6IkNTQ0giLCJfeGxmbi5EQVlTIjoiREFZUyIsIl94bGZuLkRFQ0lNQUwiOiJERUNJTUFMIiwiX3hsZm4uRUNNQS5DRUlMSU5HIjoiRUNNQS5DRUlMSU5HIiwiX3hsZm4uRVJGLlBS''@;'; put 'put ''RUNJU0UiOiJFUkYuUFJFQ0lTRSIsIl94bGZuLkVSRkMuUFJFQ0lTRSI6IkVSRkMuUFJFQ0lTRSIsIl94bGZuLkVYUE9OLkRJU1QiOiJFWFBPTi5ESVNUIiwiX3hsZm4uRi5ESVNUIjoiRi5ESVNUIiwiX3hsZm4uRi5ESVNULlJUIjoiRi5ESVNULlJUIiwiX3hsZm4uRi5JTlYiOiJGLklOViIs''@;'; put 'put ''Il94bGZuLkYuSU5WLlJUIjoiRi5JTlYuUlQiLCJfeGxmbi5GLlRFU1QiOiJGLlRFU1QiLCJfeGxmbi5GSUxURVJYTUwiOiJGSUxURVJYTUwiLCJfeGxmbi5GTE9PUi5NQVRIIjoiRkxPT1IuTUFUSCIsIl94bGZuLkZMT09SLlBSRUNJU0UiOiJGTE9PUi5QUkVDSVNFIiwiX3hsZm4uRk9SRUNB''@;'; put 'put ''U1QuRVRTIjoiRk9SRUNBU1QuRVRTIiwiX3hsZm4uRk9SRUNBU1QuRVRTLkNPTkZJTlQiOiJGT1JFQ0FTVC5FVFMuQ09ORklOVCIsIl94bGZuLkZPUkVDQVNULkVUUy5TRUFTT05BTElUWSI6IkZPUkVDQVNULkVUUy5TRUFTT05BTElUWSIsIl94bGZuLkZPUkVDQVNULkVUUy5TVEFUIjoiRk9S''@;'; put 'put ''RUNBU1QuRVRTLlNUQVQiLCJfeGxmbi5GT1JFQ0FTVC5MSU5FQVIiOiJGT1JFQ0FTVC5MSU5FQVIiLCJfeGxmbi5GT1JNVUxBVEVYVCI6IkZPUk1VTEFURVhUIiwiX3hsZm4uR0FNTUEiOiJHQU1NQSIsIl94bGZuLkdBTU1BLkRJU1QiOiJHQU1NQS5ESVNUIiwiX3hsZm4uR0FNTUEuSU5WIjoi''@;'; put 'put ''R0FNTUEuSU5WIiwiX3hsZm4uR0FNTUFMTi5QUkVDSVNFIjoiR0FNTUFMTi5QUkVDSVNFIiwiX3hsZm4uR0FVU1MiOiJHQVVTUyIsIl94bGZuLkhZUEdFT00uRElTVCI6IkhZUEdFT00uRElTVCIsIl94bGZuLklGRVJST1IiOiJJRkVSUk9SIiwiX3hsZm4uSUZOQSI6IklGTkEiLCJfeGxmbi5J''@;'; put 'put ''RlMiOiJJRlMiLCJfeGxmbi5JTUNPU0giOiJJTUNPU0giLCJfeGxmbi5JTUNPVCI6IklNQ09UIiwiX3hsZm4uSU1DU0MiOiJJTUNTQyIsIl94bGZuLklNQ1NDSCI6IklNQ1NDSCIsIl94bGZuLklNU0VDIjoiSU1TRUMiLCJfeGxmbi5JTVNFQ0giOiJJTVNFQ0giLCJfeGxmbi5JTVNJTkgiOiJJ''@;'; put 'put ''TVNJTkgiLCJfeGxmbi5JTVRBTiI6IklNVEFOIiwiX3hsZm4uSVNGT1JNVUxBIjoiSVNGT1JNVUxBIiwiX3hsZm4uSVNPLkNFSUxJTkciOiJJU08uQ0VJTElORyIsIl94bGZuLklTT1dFRUtOVU0iOiJJU09XRUVLTlVNIiwiX3hsZm4uTE9HTk9STS5ESVNUIjoiTE9HTk9STS5ESVNUIiwiX3hs''@;'; put 'put ''Zm4uTE9HTk9STS5JTlYiOiJMT0dOT1JNLklOViIsIl94bGZuLk1BWElGUyI6Ik1BWElGUyIsIl94bGZuLk1JTklGUyI6Ik1JTklGUyIsIl94bGZuLk1PREUuTVVMVCI6Ik1PREUuTVVMVCIsIl94bGZuLk1PREUuU05HTCI6Ik1PREUuU05HTCIsIl94bGZuLk1VTklUIjoiTVVOSVQiLCJfeGxm''@;'; put 'put ''bi5ORUdCSU5PTS5ESVNUIjoiTkVHQklOT00uRElTVCIsIl94bGZuLk5FVFdPUktEQVlTLklOVEwiOiJORVRXT1JLREFZUy5JTlRMIiwiX3hsZm4uTklHQklOT00iOiJOSUdCSU5PTSIsIl94bGZuLk5PUk0uRElTVCI6Ik5PUk0uRElTVCIsIl94bGZuLk5PUk0uSU5WIjoiTk9STS5JTlYiLCJf''@;'; put 'put ''eGxmbi5OT1JNLlMuRElTVCI6Ik5PUk0uUy5ESVNUIiwiX3hsZm4uTk9STS5TLklOViI6Ik5PUk0uUy5JTlYiLCJfeGxmbi5OVU1CRVJWQUxVRSI6Ik5VTUJFUlZBTFVFIiwiX3hsZm4uUERVUkFUSU9OIjoiUERVUkFUSU9OIiwiX3hsZm4uUEVSQ0VOVElMRS5FWEMiOiJQRVJDRU5USUxFLkVY''@;'; put 'put ''QyIsIl94bGZuLlBFUkNFTlRJTEUuSU5DIjoiUEVSQ0VOVElMRS5JTkMiLCJfeGxmbi5QRVJDRU5UUkFOSy5FWEMiOiJQRVJDRU5UUkFOSy5FWEMiLCJfeGxmbi5QRVJDRU5UUkFOSy5JTkMiOiJQRVJDRU5UUkFOSy5JTkMiLCJfeGxmbi5QRVJNVVRBVElPTkEiOiJQRVJNVVRBVElPTkEiLCJf''@;'; put 'put ''eGxmbi5QSEkiOiJQSEkiLCJfeGxmbi5QT0lTU09OLkRJU1QiOiJQT0lTU09OLkRJU1QiLCJfeGxmbi5RVUFSVElMRS5FWEMiOiJRVUFSVElMRS5FWEMiLCJfeGxmbi5RVUFSVElMRS5JTkMiOiJRVUFSVElMRS5JTkMiLCJfeGxmbi5RVUVSWVNUUklORyI6IlFVRVJZU1RSSU5HIiwiX3hsZm4u''@;'; put 'put ''UkFOSy5BVkciOiJSQU5LLkFWRyIsIl94bGZuLlJBTksuRVEiOiJSQU5LLkVRIiwiX3hsZm4uUlJJIjoiUlJJIiwiX3hsZm4uU0VDIjoiU0VDIiwiX3hsZm4uU0VDSCI6IlNFQ0giLCJfeGxmbi5TSEVFVCI6IlNIRUVUIiwiX3hsZm4uU0hFRVRTIjoiU0hFRVRTIiwiX3hsZm4uU0tFVy5QIjoi''@;'; put 'put ''U0tFVy5QIiwiX3hsZm4uU1RERVYuUCI6IlNUREVWLlAiLCJfeGxmbi5TVERFVi5TIjoiU1RERVYuUyIsIl94bGZuLlNVTUlGUyI6IlNVTUlGUyIsIl94bGZuLlNXSVRDSCI6IlNXSVRDSCIsIl94bGZuLlQuRElTVCI6IlQuRElTVCIsIl94bGZuLlQuRElTVC4yVCI6IlQuRElTVC4yVCIsIl94''@;'; put 'put ''bGZuLlQuRElTVC5SVCI6IlQuRElTVC5SVCIsIl94bGZuLlQuSU5WIjoiVC5JTlYiLCJfeGxmbi5ULklOVi4yVCI6IlQuSU5WLjJUIiwiX3hsZm4uVC5URVNUIjoiVC5URVNUIiwiX3hsZm4uVEVYVEpPSU4iOiJURVhUSk9JTiIsIl94bGZuLlVOSUNIQVIiOiJVTklDSEFSIiwiX3hsZm4uVU5J''@;'; put 'put ''Q09ERSI6IlVOSUNPREUiLCJfeGxmbi5WQVIuUCI6IlZBUi5QIiwiX3hsZm4uVkFSLlMiOiJWQVIuUyIsIl94bGZuLldFQlNFUlZJQ0UiOiJXRUJTRVJWSUNFIiwiX3hsZm4uV0VJQlVMTC5ESVNUIjoiV0VJQlVMTC5ESVNUIiwiX3hsZm4uV09SS0RBWS5JTlRMIjoiV09SS0RBWS5JTlRMIiwi''@;'; put 'put ''X3hsZm4uWE9SIjoiWE9SIiwiX3hsZm4uWi5URVNUIjoiWi5URVNUIn07ZnVuY3Rpb24gb0woUyl7cmV0dXJuIm9mOiI9PVMuc2xpY2UoMCwzKSYmKFM9Uy5zbGljZSgzKSksNjE9PVMuY2hhckNvZGVBdCgwKSYmNjE9PShTPVMuc2xpY2UoMSkpLmNoYXJDb2RlQXQoMCkmJihTPVMuc2xpY2Uo''@;'; put 'put ''MSkpLChTPShTPShTPVMucmVwbGFjZSgvQ09NXC5NSUNST1NPRlRcLi9nLCIiKSkucmVwbGFjZSgvXFsoKD86XC5bQS1aXStbMC05XSspKD86OlwuW0EtWl0rWzAtOV0rKT8pXF0vZyxmdW5jdGlvbihMLGspe3JldHVybiBrLnJlcGxhY2UoL1wuL2csIiIpfSkpLnJlcGxhY2UoL1xbLigjW0Et''@;'; put 'put ''Wl0qWz8hXSlcXS9nLCIkMSIpKS5yZXBsYWNlKC9bO35dL2csIiwiKS5yZXBsYWNlKC9cfC9nLCI7Iil9ZnVuY3Rpb24gZFooUyl7cmV0dXJuKCJvZjo9IitTLnJlcGxhY2UoR3AsIiQxWy4kMiQzJDQkNV0iKS5yZXBsYWNlKC9cXTpcWy9nLCI6IikpLnJlcGxhY2UoLzsvZywifCIpLnJlcGxh''@;'; put 'put ''Y2UoLywvZywiOyIpfWZ1bmN0aW9uIHk3KFMpe3ZhciBMPVMuc3BsaXQoIjoiKTtyZXR1cm5bTFswXS5zcGxpdCgiLiIpWzBdLExbMF0uc3BsaXQoIi4iKVsxXSsoTC5sZW5ndGg+MT8iOiIrKExbMV0uc3BsaXQoIi4iKVsxXXx8TFsxXS5zcGxpdCgiLiIpWzBdKToiIildfWZ1bmN0aW9uIFRv''@;'; put 'put ''ZShTKXtyZXR1cm4gUy5yZXBsYWNlKC9cLi8sIiEiKX12YXIgUGI9e30sS3A9e307S2EuV1M9WyJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3dvcmtzaGVldCIsImh0dHA6Ly9wdXJsLm9jbGMub3JnL29veG1sL29m''@;'; put 'put ''ZmljZURvY3VtZW50L3JlbGF0aW9uc2hpcHMvd29ya3NoZWV0Il07dmFyIEZiPXR5cGVvZiBNYXA8InUiO2Z1bmN0aW9uIHNMKFMsTCxrLEcpe3ZhciBRPTAsbGU9Uy5sZW5ndGg7aWYoRyl7aWYoRmI/Ry5oYXMoTCk6T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEcsTCkp''@;'; put 'put ''Zm9yKHZhciBtZT1GYj9HLmdldChMKTpHW0xdO1E8bWUubGVuZ3RoOysrUSlpZihTW21lW1FdXS50PT09TCYmKCFTW21lW1FdXS5yJiYha3x8U1ttZVtRXV0ucj09aykpcmV0dXJuIFMuQ291bnQrKyxtZVtRXX1lbHNlIGZvcig7UTxsZTsrK1EpaWYoU1tRXS50PT09TCYmKCFTW1FdLnImJiFr''@;'; put 'put ''fHxTW1FdLnI9PWspKXJldHVybiBTLkNvdW50KyssUTtyZXR1cm4gU1tsZV09e3Q6TCxyOmt9LFMuQ291bnQrKyxTLlVuaXF1ZSsrLEcmJihGYj8oRy5oYXMoTCl8fEcuc2V0KEwsW10pLEcuZ2V0KEwpLnB1c2gobGUpKTooT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEcs''@;'; put 'put ''TCl8fChHW0xdPVtdKSxHW0xdLnB1c2gobGUpKSksbGV9ZnVuY3Rpb24gaXgoUyxMKXt2YXIgaz17bWluOlMrMSxtYXg6UysxfSxHPU5jO2lmKCFMKXJldHVybiBMO3ZhciBRPS0xO3JldHVybiBMLmF1dG8mJihrLmJlc3RGaXQ9MSxMLmJlc3R3aWR0aCYmKFE9TC5iZXN0d2lkdGgpLGRlbGV0''@;'; put 'put ''ZSBMLmJlc3R3aWR0aCksbnVsbCE9TC53cHg/UT1xOChMLndweCk6bnVsbCE9TC53Y2g/UT1MLndjaDpudWxsIT1MLndpZHRoJiYoay5jdXN0b21XaWR0aD0xKSxRPi0xPyhrLndpZHRoPXNiKFEpLGsuY3VzdG9tV2lkdGg9MSk6bnVsbCE9TC53aWR0aCYmKGsud2lkdGg9TC53aWR0aCksTC5o''@;'; put 'put ''aWRkZW4mJihrLmhpZGRlbj0hMCksay5iZXN0Rml0JiZkZWxldGUgay5jdXN0b21XaWR0aCxOYz1HLG51bGwhPUwubGV2ZWwmJihrLm91dGxpbmVMZXZlbD1rLmxldmVsPUwubGV2ZWwpLG51bGwhPUwuc3R5bGUmJihrLnN0eWxlPUwuc3R5bGUpLGt9ZnVuY3Rpb24gaFooUyxMLGspe3ZhciBH''@;'; put 'put ''PVZvKFNbIiFyZWYiXSksUT0wLGxlPVNbIiFtZXJnZXMiXXx8W10sbWU9QXJyYXkuaXNBcnJheShTKTtlOmZvcih2YXIgcGU9MDtwZTw9Ry5lLnI7KytwZSl7Zm9yKHZhciBiZT0wO2JlPGxlLmxlbmd0aDsrK2JlKWlmKGxlW2JlXS5zLnI8PXBlJiZwZTw9bGVbYmVdLmUuciYmbGVbYmVdLnMu''@;'; put 'put ''Yzw9ayYmazw9bGVbYmVdLmUuYyljb250aW51ZSBlO3ZhciBOZT1tZT8oU1twZV18fFtdKVtrXTpTW0dpKHtyOnBlLGM6a30pXTtpZihOZSl7dmFyIEJlPTE7aWYoTmUucyYmKEJlPWxmKE5lLnMpL3Q3LkNhbGlicmlbMTJdfHwxKSxOZS53KVE9TWF0aC5tYXgoUSxOZS53Lmxlbmd0aCpCZSk7''@;'; put 'put ''ZWxzZSBzd2l0Y2goTmUudCl7Y2FzZSJiIjpjYXNlImUiOlE9TWF0aC5tYXgoUSw1KkJlKTticmVhaztjYXNlInMiOlE9TWF0aC5tYXgoUSxOZS52Lmxlbmd0aCpCZSoxLjJ8MCk7YnJlYWs7Y2FzZSJuIjpNbyhOZSxOZS52KSxRPU1hdGgubWF4KFEsU3RyaW5nKE5lLnd8fE5lLnYpLmxlbmd0''@;'; put 'put ''aCpCZSk7YnJlYWs7Y2FzZSJkIjpRPU1hdGgubWF4KFEsOCpCZSl9fX1RPDEmJihRPTEpLEwuYmVzdHdpZHRoPVF9ZnVuY3Rpb24ga20oUyxMKXtpZihTKXt2YXIgaz1bLjcsLjcsLjc1LC43NSwuMywuM107InhsbWwiPT1MJiYoaz1bMSwxLDEsMSwuNSwuNV0pLG51bGw9PVMubGVmdCYmKFMu''@;'; put 'put ''bGVmdD1rWzBdKSxudWxsPT1TLnJpZ2h0JiYoUy5yaWdodD1rWzFdKSxudWxsPT1TLnRvcCYmKFMudG9wPWtbMl0pLG51bGw9PVMuYm90dG9tJiYoUy5ib3R0b209a1szXSksbnVsbD09Uy5oZWFkZXImJihTLmhlYWRlcj1rWzRdKSxudWxsPT1TLmZvb3RlciYmKFMuZm9vdGVyPWtbNV0pfX1m''@;'; put 'put ''dW5jdGlvbiBiNyhTLEwpe2Zvcih2YXIgaz1MZShMKSxHPTA7RzxTLmxlbmd0aDsrK0cpe3ZhciBRPSEwLGxlPVNbR107aWYobGUmJmsubGVuZ3RoPT1MZShsZSkubGVuZ3RoJiYoay5mb3JFYWNoKGZ1bmN0aW9uKG1lKXtpZihRKXtpZihudWxsPT09TFttZV0hPShudWxsPT09bGVbbWVdKSly''@;'; put 'put ''ZXR1cm4gdm9pZChRPSExKTtpZigib2JqZWN0Ij09dHlwZW9mIExbbWVdKWlmKFsiY29sb3IiLCJmZ0NvbG9yIiwiYmdDb2xvciJdLmluZGV4T2YobWUpPi0xKXtpZih1ZChMW21lXSxsZVttZV0pKXJldHVybiB2b2lkKFE9ITEpfWVsc2V7aWYoIShbImxlZnQiLCJyaWdodCIsInRvcCIsImJv''@;'; put 'put ''dHRvbSJdLmluZGV4T2YobWUpPi0xKSlyZXR1cm4gdm9pZChRPSExKTtpZihVSShMW21lXSxsZVttZV0pKXJldHVybiB2b2lkKFE9ITEpfWlmKExbbWVdIT1sZVttZV0pcmV0dXJuIHZvaWQoUT0hMSl9fSksUSkpcmV0dXJuIEd9cmV0dXJuIFNbUy5sZW5ndGhdPXVuKEwpLFMubGVuZ3RoLTF9''@;'; put 'put ''ZnVuY3Rpb24gXzAoUyxMLGssRyl7dmFyIFE9Ry5yZXZzc2ZbbnVsbCE9ay56P2suejoiR2VuZXJhbCJdLGxlPTYwLG1lPVMubGVuZ3RoO2lmKG51bGw9PVEmJkcuc3NmKWZvcig7bGU8MzkyOysrbGUpaWYobnVsbD09Ry5zc2ZbbGVdKXtBLmxvYWQoay56LGxlKSxHLnNzZltsZV09ay56LEcu''@;'; put 'put ''cmV2c3NmW2suel09UT1sZTticmVha312YXIgcGU9MCxiZT0wLE5lPTAsQmU9MDtpZihHLmNlbGxTdHlsZXMpe2lmKGsucyl7aWYoRy5Gb250cyl7ay5zLmNvbG9yfHwoay5zLmNvbG9yPXt0aGVtZToxLHJnYjoiMDAwMDAwIn0pO2Zvcih2YXIgR2U9KGsucy5ib2xkPzE6MCl8KGsucy5pdGFs''@;'; put 'put ''aWM/MjowKXwoay5zLnN0cmlrZT80OjApfChrLnMuc2hhZG93Pzg6MCk7cGU8Ry5Gb250cy5sZW5ndGg7KytwZSl7dmFyIGV0PUcuRm9udHNbcGVdO2lmKG51bGw9PWV0LmZvbnRoYXNoJiYoZXQuZm9udGhhc2g9KGV0LmJvbGQ/MTowKXwoZXQuaXRhbGljPzI6MCl8KGV0LnN0cmlrZT80OjAp''@;'; put 'put ''fChldC5zaGFkb3c/ODowKSksIShHZSE9ZXQuZm9udGhhc2h8fCEhay5zLmNvbG9yIT0hIWV0LmNvbG9yfHxrLnMudmFsaWduIT1ldC52YWxpZ258fChrLnMuc3p8fGV0LnN6KSYmKGsucy5zenx8MTIpIT0oZXQuc3p8fDEyKXx8ay5zLm5hbWUmJmsucy5uYW1lIT1ldC5uYW1lfHwoay5zLnVu''@;'; put 'put ''ZGVybGluZXx8MCkhPShldC51bmRlcmxpbmV8fDApfHxrLnMuY29sb3ImJnVkKGsucy5jb2xvcixldC5jb2xvcikpKWJyZWFrfXBlPT1HLkZvbnRzLmxlbmd0aCYmKEcuRm9udHMucHVzaCh7c3o6ay5zLnN6fHwxMixjb2xvcjprLnMuY29sb3J8fHt0aGVtZToxLHJnYjoiMDAwMDAwIn0sbmFt''@;'; put 'put ''ZTprLnMubmFtZXx8IkNhbGlicmkiLGZhbWlseTprLnMuZmFtaWx5fHwyLHNjaGVtZTprLnMuc2NoZW1lLGJvbGQ6ay5zLmJvbGQsaXRhbGljOmsucy5pdGFsaWMsc3RyaWtlOmsucy5zdHJpa2Usc2hhZG93Omsucy5zaGFkb3csdmFsaWduOmsucy52YWxpZ24sdW5kZXJsaW5lOmsucy51bmRl''@;'; put 'put ''cmxpbmV9KSwxPT1HLkZvbnRzLmxlbmd0aCYmQnAoRy5Gb250c1swXSkpfWlmKEcuRmlsbHMpe2Zvcig7YmU8Ry5GaWxscy5sZW5ndGg7KytiZSl7dmFyIGN0PUcuRmlsbHNbYmVdO2lmKCEhay5zLnN0b3BzPT0hIWN0LnN0b3BzKXtpZihrLnMuc3RvcHMpe2lmKGsucy5hbmdsZSE9Y3QuYW5n''@;'; put 'put ''bGUpY29udGludWU7dmFyIHh0PSEwO2lmKGsucy5zdG9wcy5mb3JFYWNoKGZ1bmN0aW9uKGt0LEx0KXt1ZChrdCxjdC5zdG9wc1tMdF0pJiYoeHQ9ITEpLGt0LnYhPWN0LnN0b3BzW0x0XS52JiYoeHQ9ITEpfSksIXh0KWNvbnRpbnVlfWVsc2V7aWYobnVsbD09ay5zLnBhdHRlcm5UeXBlJiZr''@;'; put 'put ''LnMuZmdDb2xvciYmKGsucy5wYXR0ZXJuVHlwZT0ic29saWQiKSxudWxsPT1rLnMucGF0dGVyblR5cGUpYnJlYWs7aWYoay5zLnBhdHRlcm5UeXBlIT1jdC5wYXR0ZXJuVHlwZXx8dWQoay5zLmZnQ29sb3IsY3QuZmdDb2xvcil8fHVkKGsucy5iZ0NvbG9yLGN0LmJnQ29sb3IpKWNvbnRpbnVl''@;'; put 'put ''fWJyZWFrfX1pZihiZT09Ry5GaWxscy5sZW5ndGgpe3ZhciBvdD17fTtrLnMuc3RvcHM/KG51bGwhPWsucy5hbmdsZSYmKG90LmFuZ2xlPWsucy5hbmdsZSksb3Quc3RvcHM9W10say5zLnN0b3BzLmZvckVhY2goZnVuY3Rpb24oa3Qpe290LnN0b3BzLnB1c2godW4oa3QpKX0pKTpvdD17cGF0''@;'; put 'put ''dGVyblR5cGU6ay5zLnBhdHRlcm5UeXBlLGZnQ29sb3I6ay5zLmZnQ29sb3IsYmdDb2xvcjprLnMuYmdDb2xvcn0sRy5GaWxscy5wdXNoKG90KX19aWYoRy5Cb3JkZXJzKXtmb3IoO05lPEcuQm9yZGVycy5sZW5ndGg7KytOZSl7dmFyIGJ0PUcuQm9yZGVyc1tOZV0sRnQ9InRvcCI7aWYoay5z''@;'; put 'put ''W0Z0XSl7aWYoIWJ0W0Z0XXx8ay5zW0Z0XS5zdHlsZSE9YnRbRnRdLnN0eWxlfHx1ZChrLnNbRnRdLmNvbG9yLGJ0W0Z0XS5jb2xvcikpY29udGludWV9ZWxzZSBpZihudWxsIT1idFtGdF0pY29udGludWU7aWYoay5zW0Z0PSJib3R0b20iXSl7aWYoIWJ0W0Z0XXx8ay5zW0Z0XS5zdHlsZSE9''@;'; put 'put ''YnRbRnRdLnN0eWxlfHx1ZChrLnNbRnRdLmNvbG9yLGJ0W0Z0XS5jb2xvcikpY29udGludWV9ZWxzZSBpZihudWxsIT1idFtGdF0pY29udGludWU7aWYoay5zW0Z0PSJsZWZ0Il0pe2lmKCFidFtGdF18fGsuc1tGdF0uc3R5bGUhPWJ0W0Z0XS5zdHlsZXx8dWQoay5zW0Z0XS5jb2xvcixidFtG''@;'; put 'put ''dF0uY29sb3IpKWNvbnRpbnVlfWVsc2UgaWYobnVsbCE9YnRbRnRdKWNvbnRpbnVlO2lmKGsuc1tGdD0icmlnaHQiXSl7aWYoIWJ0W0Z0XXx8ay5zW0Z0XS5zdHlsZSE9YnRbRnRdLnN0eWxlfHx1ZChrLnNbRnRdLmNvbG9yLGJ0W0Z0XS5jb2xvcikpY29udGludWV9ZWxzZSBpZihudWxsIT1i''@;'; put 'put ''dFtGdF0pY29udGludWU7YnJlYWt9TmU9PUcuQm9yZGVycy5sZW5ndGgmJkcuQm9yZGVycy5wdXNoKHt0b3A6ay5zLnRvcCYmdW4oay5zLnRvcCl8fHZvaWQgMCxib3R0b206ay5zLmJvdHRvbSYmdW4oay5zLmJvdHRvbSl8fHZvaWQgMCxsZWZ0Omsucy5sZWZ0JiZ1bihrLnMubGVmdCl8fHZv''@;'; put 'put ''aWQgMCxyaWdodDprLnMucmlnaHQmJnVuKGsucy5yaWdodCl8fHZvaWQgMH0pfWlmKEwmJmsucy5zdHlsZSYmIk5vcm1hbCIhPT1rLnMuc3R5bGUpe2ZvcihCZT0xO0JlPEwubGVuZ3RoJiZMW0JlXS5uYW1lIT1rLnMuc3R5bGU7KytCZSk7QmU9PUwubGVuZ3RoJiZMLnB1c2goe25hbWU6ay5z''@;'; put 'put ''LnN0eWxlLG51bUZtdElkOlEsZm9udElkOnBlLGZpbGxJZDpiZSxib3JkZXJJZDpOZX0pfX1mb3IobGU9MDtsZSE9bWU7KytsZSlpZihTW2xlXS5udW1GbXRJZD09USYmU1tsZV0uZm9udElkPT1wZSYmU1tsZV0uZmlsbElkPT1iZSYmU1tsZV0uYm9yZGVySWQ9PU5lJiZTW2xlXS54ZklkPT1C''@;'; put 'put ''ZSl7aWYoay5zJiZrLnMuYWxpZ25tZW50KXtpZighU1tsZV0uYWxpZ25tZW50KWNvbnRpbnVlO2lmKGsucy5hbGlnbm1lbnQuaG9yaXpvbnRhbCE9U1tsZV0uYWxpZ25tZW50Lmhvcml6b250YWx8fGsucy5hbGlnbm1lbnQudmVydGljYWwhPVNbbGVdLmFsaWdubWVudC52ZXJ0aWNhbHx8ay5z''@;'; put 'put ''LmFsaWdubWVudC53cmFwVGV4dCE9U1tsZV0uYWxpZ25tZW50LndyYXBUZXh0fHxrLnMuYWxpZ25tZW50LnNocmlua1RvRml0IT1TW2xlXS5hbGlnbm1lbnQuc2hyaW5rVG9GaXR8fGsucy5hbGlnbm1lbnQudGV4dFJvdGF0aW9uIT1TW2xlXS5hbGlnbm1lbnQudGV4dFJvdGF0aW9ufHxrLnMu''@;'; put 'put ''YWxpZ25tZW50LmluZGVudCE9U1tsZV0uYWxpZ25tZW50LmluZGVudCljb250aW51ZX1lbHNlIGlmKFNbbGVdLmFsaWdubWVudCljb250aW51ZTtpZihrLnMpe2lmKCEhay5zLmhpZGRlbj09KCFTW2xlXS5wcm90ZWN0aW9ufHwhU1tsZV0ucHJvdGVjdGlvbi5oaWRkZW4pfHwhIWsucy5lZGl0''@;'; put 'put ''YWJsZT09KCFTW2xlXS5wcm90ZWN0aW9ufHwhU1tsZV0ucHJvdGVjdGlvbi5lZGl0YWJsZSkpY29udGludWV9ZWxzZSBpZihTW2xlXS5wcm90ZWN0aW9uKWNvbnRpbnVlO3JldHVybiBsZX19ZWxzZSBmb3IobGU9MDtsZSE9bWU7KytsZSlpZihTW2xlXS5udW1GbXRJZD09PVEpcmV0dXJuIGxl''@;'; put 'put ''O3JldHVybiBTW21lXT17bnVtRm10SWQ6USxmb250SWQ6cGUsZmlsbElkOmJlLGJvcmRlcklkOk5lLHhmSWQ6QmUsYXBwbHlOdW1iZXJGb3JtYXQ6MX0scGU+MCYmKFNbbWVdLmFwcGx5Rm9udD0xKSxiZT4wJiYoU1ttZV0uYXBwbHlGaWxsPTEpLE5lPjAmJihTW21lXS5hcHBseUJvcmRlcj0x''@;'; put 'put ''KSwhTCYmay5zJiZrLnMuc3R5bGUmJiJOb3JtYWwiIT1rLnMuc3R5bGUmJihTW21lXS5zdHlsZT1rLnMuc3R5bGUpLGsucyYmay5zLmFsaWdubWVudCYmKFNbbWVdLmFsaWdubWVudD17fSxbImhvcml6b250YWwiLCJ2ZXJ0aWNhbCIsIndyYXBUZXh0Iiwic2hyaW5rVG9GaXQiLCJpbmRlbnQi''@;'; put 'put ''LCJ0ZXh0Um90YXRpb24iXS5mb3JFYWNoKGZ1bmN0aW9uKGt0KXtudWxsIT1rLnMuYWxpZ25tZW50W2t0XSYmKFNbbWVdLmFsaWdubWVudFtrdF09ay5zLmFsaWdubWVudFtrdF0pfSkpLGsucyYmay5zLmhpZGRlbiYmKFNbbWVdLnByb3RlY3Rpb258fChTW21lXS5wcm90ZWN0aW9uPXt9KSxT''@;'; put 'put ''W21lXS5wcm90ZWN0aW9uLmhpZGRlbj0hMCksay5zJiZrLnMuZWRpdGFibGUmJihTW21lXS5wcm90ZWN0aW9ufHwoU1ttZV0ucHJvdGVjdGlvbj17fSksU1ttZV0ucHJvdGVjdGlvbi5lZGl0YWJsZT0hMCksbWV9ZnVuY3Rpb24gXzcoUyxMLGssRyxRLGxlLG1lLHBlKXsiZCI9PT1TLnQmJiJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgUy52JiYoUy52PUllKFMudikpO3RyeXtsZS5jZWxsTkYmJihTLno9QS5fdGFibGVbTF0pfWNhdGNoKE5lKXtpZihsZS5XVEYpdGhyb3cgTmV9aWYoKCFsZXx8ITEhPT1sZS5jZWxsVGV4dCkmJiJ6IiE9Uy50KXRyeXtpZihudWxsPT1BLl90YWJsZVtMXSYmQS5sb2Fk''@;'; put 'put ''KHNlW0xdfHwiR2VuZXJhbCIsTCksImUiPT09Uy50KVMudz1TLnd8fG9kW1Mudl07ZWxzZSBpZigwPT09TClpZigibiI9PT1TLnQpUy53PSgwfFMudik9PT1TLnY/QS5fZ2VuZXJhbF9pbnQoUy52KTpBLl9nZW5lcmFsX251bShTLnYpO2Vsc2UgaWYoImQiPT09Uy50KXt2YXIgYmU9UWUoUy52''@;'; put 'put ''KTtTLnc9KDB8YmUpPT09YmU/QS5fZ2VuZXJhbF9pbnQoYmUpOkEuX2dlbmVyYWxfbnVtKGJlKX1lbHNle2lmKHZvaWQgMD09PVMudilyZXR1cm4iIjtTLnc9QS5fZ2VuZXJhbChTLnYsS3ApfWVsc2UgUy53PUEuZm9ybWF0KEwsImQiPT09Uy50P1FlKFMudik6Uy52LEtwKX1jYXRjaChOZSl7''@;'; put 'put ''aWYobGUuV1RGKXRocm93IE5lfWlmKGxlLmNlbGxTdHlsZXMmJnBlKXtpZihTLnM9e30sbnVsbCE9ayYmcGUuRmlsbHMpdHJ5e1J0KFMucyxwZS5GaWxsc1trXSl9Y2F0Y2goTmUpe2lmKGxlLldURil0aHJvdyBOZX1pZihudWxsIT1HJiZwZS5Gb250cyl0cnl7UnQoUy5zLHBlLkZvbnRzW0dd''@;'; put 'put ''KX1jYXRjaChOZSl7aWYobGUuV1RGKXRocm93IE5lfWlmKG51bGwhPVEmJnBlLkJvcmRlcnMpdHJ5e1J0KFMucyxwZS5Cb3JkZXJzW1FdKX1jYXRjaChOZSl7aWYobGUuV1RGKXRocm93IE5lfX19ZnVuY3Rpb24gbEwoUyxMLGspe2lmKFMmJlNbIiFyZWYiXSl7dmFyIEc9dG8oU1siIXJlZiJd''@;'; put 'put ''KTtpZihHLmUuYzxHLnMuY3x8Ry5lLnI8Ry5zLnIpdGhyb3cgbmV3IEVycm9yKCJCYWQgcmFuZ2UgKCIraysiKTogIitTWyIhcmVmIl0pfX12YXIgSGI9LzwoPzpcdzopP21lcmdlQ2VsbCByZWY9IltBLVowLTk6XSsiXHMqW1wvXT8+L2csdUw9LzwoPzpcdys6KT9zaGVldERhdGFbXj5dKj4o''@;'; put 'put ''W1xzXFNdKik8XC8oPzpcdys6KT9zaGVldERhdGE+LyxEbT0vPCg/Olx3Oik/aHlwZXJsaW5rIFtePl0qPi9nbSxwWj0vIihcdyo6XHcqKSIvLE5iPS88KD86XHc6KT9jb2xcYltePl0qW1wvXT8+L2csYXg9LzwoPzpcdzopP2NvbnRyb2xcYltePl0qW1wvXT8+L2csZEw9LzwoPzpcdzopP2F1''@;'; put 'put ''dG9GaWx0ZXJbXj5dKihbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP2F1dG9GaWx0ZXIpPi9nLG94PS88KD86XHc6KT9wYWdlTWFyZ2luc1tePl0qXC8+L2csc3g9LzwoPzpcdzopP3NoZWV0UHJcYig/OltePmEtel1bXj5dKik/XC8+LyxoTD0vPCg/Olx3Oik/c2hlZXRQcm90ZWN0aW9uXGIo''@;'; put 'put ''PzpbXj5hLXpdW14+XSopP1wvPi8sZ1o9LzwoPzpcdzopP3NoZWV0UHJbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/c2hlZXRQcik+LyxtWj0vPCg/Olx3Oik/c2hlZXRWaWV3c1tePl0qKD86W1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9zaGVldFZpZXdzKT4vLGZMPS88KD86''@;'; put 'put ''XHcrOik/ZGF0YVZhbGlkYXRpb25zW14+XSooPzpbXC9dfD4oW1xzXFNdKj8pPFwvKD86XHcrOik/ZGF0YVZhbGlkYXRpb25zKT4vLHBMPS88KD86XHcrOik/Y29uZGl0aW9uYWxGb3JtYXR0aW5nXGJbXj5dKig/OltcL118PihbXHNcU10qPyk8XC8oPzpcdys6KT9jb25kaXRpb25hbEZvcm1h''@;'; put 'put ''dHRpbmcpPi9nLHZaPS88KD86XHc6KT9zaGVldEZvcm1hdFByW14+XSpcLz4vLFhwPS88KD86XHcrOik/dGFibGVQYXJ0cy4qPz4oW1xzXFNdKj8pPFwvKD86XHcrOik/dGFibGVQYXJ0cz4vLHc3PS88KD86XHc6KT9wYWdlU2V0dXBbXj5dKlwvPi8seVo9LzwoPzpcdzopP3Jvd0JyZWFrc1te''@;'; put 'put ''Pl0qKD86W1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9yb3dCcmVha3MpPi8sQW9lPS88KD86XHc6KT9jb2xCcmVha3NbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/Y29sQnJlYWtzKT4vLGtvZT0vPCg/Olx3Oik/aGVhZGVyRm9vdGVyW14+XSooPzpbXC9dfD4oW1xzXFNdKik8''@;'; put 'put ''XC8oPzpcdzopP2hlYWRlckZvb3Rlcik+LyxEb2U9LzwoPzpcdzopP3ByaW50T3B0aW9uc1xiW14+XC9dKlwvPi87dmFyIGdMPS88KD86XHc6KT90YWJsZVBhcnRcYlteXC8+XSpbXC9dPz4vZztmdW5jdGlvbiBseChTLEwsayxHKXt2YXIgUT12cihTKTtrLlNoZWV0c1tHXXx8KGsuU2hlZXRz''@;'; put 'put ''W0ddPXt9KSxRLmNvZGVOYW1lJiYoay5TaGVldHNbR10uQ29kZU5hbWU9US5jb2RlTmFtZSl9dmFyIHdaPS88KD86XHc6KT90YWJDb2xvcltePl0qW1wvXT8+LyxjeD0vPCg/Olx3Oik/cGFnZVNldFVwUHJbXj5dKltcL10/Pi8seDM9LzwoPzpcdzopP291dGxpbmVQcltePl0qW1wvXT8+Lyx1''@;'; put 'put ''eD17ZGlzcGxheWVkOiJhc0Rpc3BsYXllZCIsZW5kOiJhdEVuZCIsbm9uZToibm9uZSJ9LGR4PVZlKHV4KSxDWj17ZGlzcGxheWVkOiJkaXNwbGF5ZWQiLG5vbmU6ImJsYW5rIixkYXNoOiJkYXNoIiwibi9hIjoiTkEifSxTWj1WZShDWiksTVo9LzwoPzpcdzopP2Jya1tePl0qXC8+L2cseUw9''@;'; put 'put ''WyJvYmplY3RzIiwic2NlbmFyaW9zIiwic2VsZWN0TG9ja2VkQ2VsbHMiLCJzZWxlY3RVbmxvY2tlZENlbGxzIl0sYkw9WyJmb3JtYXRDb2x1bW5zIiwiZm9ybWF0Um93cyIsImZvcm1hdENlbGxzIiwiaW5zZXJ0Q29sdW1ucyIsImluc2VydFJvd3MiLCJpbnNlcnRIeXBlcmxpbmtzIiwiZGVs''@;'; put 'put ''ZXRlQ29sdW1ucyIsImRlbGV0ZVJvd3MiLCJzb3J0IiwiYXV0b0ZpbHRlciIsInBpdm90VGFibGVzIl07ZnVuY3Rpb24gQ0woUyl7dmFyIEw9e307cmV0dXJuWyJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJib3R0b20iLCJoZWFkZXIiLCJmb290ZXIiXS5mb3JFYWNoKGZ1bmN0aW9uKGspe1Nba10m''@;'; put 'put ''JihMW2tdPXBhcnNlRmxvYXQoU1trXSkpfSksTH12YXIgTUw9e0N1c3RvbToiY3VzdG9tIixEYXRlOiJkYXRlIixUaW1lOiJ0aW1lIixMZW5ndGg6InRleHRMZW5ndGgiLExpc3Q6Imxpc3QiLERlY2ltYWw6ImRlY2ltYWwiLFdob2xlOiJ3aG9sZSIsQW55OiJub25lIn0seEw9VmUoTUwpLElt''@;'; put 'put ''PXtJTjoiYmV0d2VlbiIsT1Q6Im5vdEJldHdlZW4iLEVROiJlcXVhbCIsTkU6Im5vdEVxdWFsIixHVDoiZ3JlYXRlclRoYW4iLExUOiJsZXNzVGhhbiIsR0U6ImdyZWF0ZXJUaGFuT3JFcXVhbCIsTEU6Imxlc3NUaGFuT3JFcXVhbCJ9LGd4PVZlKEltKTtmdW5jdGlvbiBCYihTLEwsayl7dmFy''@;'; put 'put ''IEc9W10sUT17fSxsZT0iIixtZT0hMSxwZT0wLGJlPTA7cmV0dXJuIFMucmVwbGFjZSh0bixmdW5jdGlvbihOZSxCZSl7dmFyIEdlPXZyKE5lKTtzd2l0Y2goWGkoR2VbMF0pKXtjYXNlIjxkYXRhVmFsaWRhdGlvbnMiOmNhc2UiPGRhdGFWYWxpZGF0aW9ucz4iOmNhc2UiPC9kYXRhVmFsaWRh''@;'; put 'put ''dGlvbnM+IjpicmVhaztjYXNlIjxkYXRhVmFsaWRhdGlvbiI6UT17dDp4TFtHZS50eXBlfHwibm9uZSJdLHJlZjoobGU9R2Uuc3FyZWYpP2xlLmluZGV4T2YoIiAiKT4tMT9sZTp0byhsZSk6IiJ9LEdlLm9wZXJhdG9yJiYoUS5vcD1neFtHZS5vcGVyYXRvcl0pLFEuYmxhbms9ISFHZS5hbGxv''@;'; put 'put ''d0JsYW5rJiZGcihHZS5hbGxvd0JsYW5rKSwoIUdlLnNob3dJbnB1dE1lc3NhZ2V8fCFGcihHZS5zaG93SW5wdXRNZXNzYWdlKSkmJihRLmlucHV0PSExKSxHZS5wcm9tcHRUaXRsZSYmKChRLmlucHV0fHwoUS5pbnB1dD17fSkpLnRpdGxlPWVpKEdlLnByb21wdFRpdGxlKSksR2UucHJvbXB0''@;'; put 'put ''JiYoKFEuaW5wdXR8fChRLmlucHV0PXt9KSkubWVzc2FnZT1laShHZS5wcm9tcHQpKSwoIUdlLnNob3dFcnJvck1lc3NhZ2V8fCFGcihHZS5zaG93RXJyb3JNZXNzYWdlKSkmJihRLmVycm9yPSExKSxHZS5lcnJvclRpdGxlJiYoKFEuZXJyb3J8fChRLmVycm9yPXt9KSkudGl0bGU9ZWkoR2Uu''@;'; put 'put ''ZXJyb3JUaXRsZSkpLEdlLmVycm9yJiYoKFEuZXJyb3J8fChRLmVycm9yPXt9KSkubWVzc2FnZT1laShHZS5lcnJvcikpLFEuZXJyb3I/US5lcnJvci5zdHlsZT1HZS5lcnJvclN0eWxlfHwic3RvcCI6R2UuZXJyb3JTdHlsZSYmKFEuZXJyb3I9e3N0eWxlOkdlLmVycm9yU3R5bGV9KSxRLnQm''@;'; put 'put ''JkcucHVzaChRKTticmVhaztjYXNlIjxkYXRhVmFsaWRhdGlvbi8+IjpjYXNlIjwvZGF0YVZhbGlkYXRpb24+IjpicmVhaztjYXNlIjxzcXJlZj4iOmJlPUJlK05lLmxlbmd0aDticmVhaztjYXNlIjwvc3FyZWY+IjpsZT1TLnNsaWNlKGJlLEJlKSxRLnJlZj1sZT9sZS5pbmRleE9mKCIgIik+''@;'; put 'put ''LTE/bGU6dG8obGUpOiIiO2JyZWFrO2Nhc2UiPGY+IjpjYXNlIjxmb3JtdWxhMSI6Y2FzZSI8Zm9ybXVsYTE+IjpjYXNlIjxmb3JtdWxhMiI6Y2FzZSI8Zm9ybXVsYTI+IjpwZT1CZStOZS5sZW5ndGg7YnJlYWs7Y2FzZSI8L2Zvcm11bGExPiI6Y2FzZSI8L2Zvcm11bGEyPiI6aWYoaylicmVh''@;'; put 'put ''aztjYXNlIjwvZj4iOnZhciBldD1laShjbyhTLnNsaWNlKHBlLEJlKSkpO3N3aXRjaChRLnQpe2Nhc2UiTGlzdCI6aWYoUS5sfHxRLmYpYnJlYWs7aWYoMzQ9PWV0LmNoYXJDb2RlQXQoMCkpe1EubD1ldC5zbGljZSgxLC0xKS5zcGxpdCgiLCIpO2JyZWFrfWNhc2UiQ3VzdG9tIjpudWxsPT1R''@;'; put 'put ''LmYmJihRLmY9ZXQpO2JyZWFrO2Nhc2UiRGF0ZSI6Y2FzZSJEZWNpbWFsIjpjYXNlIkxlbmd0aCI6Y2FzZSJUaW1lIjpjYXNlIldob2xlIjpRLm9wfHwoUS5vcD0iSU4iKSxudWxsPT1RLnY/US52PWlzTmFOKCtldCk/ZXQ6K2V0OihRLm1pbj1RLnYsUS5tYXg9aXNOYU4oK2V0KT9ldDorZXQs''@;'; put 'put ''ZGVsZXRlIFEudil9YnJlYWs7Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZXh0IjptZT0hMDticmVhaztjYXNlIjwvZXh0PiI6bWU9ITE7YnJlYWs7ZGVmYXVsdDppZihMJiZMLldURiYmIW1lKXRocm93IG5ldyBFcnJvcigidW5yZWNv''@;'; put 'put ''Z25pemVkICIrR2VbMF0rIiBpbiBkYXRhIHZhbGlkYXRpb24iKX1yZXR1cm4gTmV9KSxHfXZhciBxcD17SU46ImNvbnRhaW5zVGV4dCIsT1Q6Im5vdENvbnRhaW5zVGV4dCIsU1Q6ImJlZ2luc1dpdGgiLE5EOiJlbmRzV2l0aCJ9LG14PVZlKHFwKSx2eD17TE06Imxhc3RNb250aCIsTFM6Imxh''@;'; put 'put ''c3Q3RGF5cyIsTFc6Imxhc3RXZWVrIixOTToibmV4dE1vbnRoIixOVzoibmV4dFdlZWsiLFRNOiJ0aGlzTW9udGgiLFRXOiJ0aGlzV2VlayIsVEQ6InRvZGF5IixUTzoidG9tb3Jyb3ciLFlTOiJ5ZXN0ZXJkYXkifSxTNz1WZSh2eCk7ZnVuY3Rpb24gTTcoUyl7dmFyIEw9e307cmV0dXJuIG51''@;'; put 'put ''bGwhPVMudmFsJiYoaXNOYU4oK1MudmFsKT9MLmY9Uy52YWw6TC52PStTLnZhbCksTC50PVMudHlwZSxMfWZ1bmN0aW9uIFJtKFMpe3JldHVybiBqcigiY2Z2byIsbnVsbCx7dHlwZTpTLnQsdmFsOm51bGwhPVMudj9TLnY6aGkoUy5mKX0pfWZ1bmN0aW9uIHl4KFMsTCxrLEcpe3ZhciBRPU03''@;'; put 'put ''KFMpO3JldHVybiBRLmNvbG9yPWxiKEwsayxHKSxRfWZ1bmN0aW9uIFRMKFMsTCxrLEcsUSl7dmFyIGxlPShTLm1hdGNoKC9zcXJlZj0iKFtcdzokIF0qKSIvKXx8W10pWzFdO3JldHVybiBmdW5jdGlvbiBFTChTLEwsayxHLFEsbGUpe3ZhciBtZT0hMSxwZT1bXSxiZT17ZjpbXX0sTmU9MCxC''@;'; put 'put ''ZT0wLEdlPXtjZnZvczpbXSxjb2xvcnM6W119LGV0PXt9LGN0PS0xLHh0PTAsb3Q9IiI7cmV0dXJuIFMucmVwbGFjZSh0bixmdW5jdGlvbihidCxGdCl7dmFyIGt0PXZyKGJ0KTtzd2l0Y2goWGkoa3RbMF0pKXtjYXNlIjxjb25kaXRpb25hbEZvcm1hdHRpbmciOmNhc2UiPC9jb25kaXRpb25h''@;'; put 'put ''bEZvcm1hdHRpbmc+IjpicmVhaztjYXNlIjxjZlJ1bGUiOmNhc2UiPGNmUnVsZT4iOmlmKEJlPUZ0LGV0PWt0LGJlPXtyZWY6TCxmOltdfSwhYnQubWF0Y2goL1wvPi8pKWJyZWFrO2Nhc2UiPC9jZlJ1bGU+Ijpzd2l0Y2goZXQuZHhmSWQmJlEmJlEuRFhGJiYoYmUucz1RLkRYRlsrZXQuZHhm''@;'; put 'put ''SWRdKSxldC50eXBlKXtjYXNlImR1cGxpY2F0ZVZhbHVlcyI6YmUudD0iZHVwIjticmVhaztjYXNlInVuaXF1ZVZhbHVlcyI6YmUudD0idW5pcXVlIjticmVhaztjYXNlImNvbnRhaW5zQmxhbmtzIjpiZS50PSJibGFuayIsYmUudj0hMDticmVhaztjYXNlIm5vdENvbnRhaW5zQmxhbmtzIjpi''@;'; put 'put ''ZS50PSJibGFuayIsYmUudj0hMTticmVhaztjYXNlImNvbnRhaW5zRXJyb3JzIjpiZS50PSJlcnJvciIsYmUudj0hMDticmVhaztjYXNlIm5vdENvbnRhaW5zRXJyb3JzIjpiZS50PSJlcnJvciIsYmUudj0hMTticmVhaztjYXNlImNlbGxJcyI6c3dpdGNoKGV0Lm9wZXJhdG9yKXtjYXNlImNv''@;'; put 'put ''bnRhaW5zVGV4dCI6Y2FzZSJub3RDb250YWlucyI6Y2FzZSJiZWdpbnNXaXRoIjpjYXNlImVuZHNXaXRoIjppZihiZS50PSJ0ZXh0IixiZS5vcD1teFtldC5vcGVyYXRvcl0sbnVsbD09ZXQudGV4dCl0aHJvdyBuZXcgRXJyb3IoIkNGIFRleHQgUnVsZSAiK2JlLm9wKyIgbWlzc2luZyB0ZXh0''@;'; put 'put ''Iik7YmUudj1ldC50ZXh0LGJlLmY9YmUuZlswXSxudWxsPT1iZS5mJiZkZWxldGUgYmUuZjticmVhaztkZWZhdWx0OmJlLnQ9InZhbCIsYmUub3A9Z3hbZXQub3BlcmF0b3JdLDE9PWJlLmYubGVuZ3RoP2lzTmFOKCtiZS5mWzBdKT9iZS5mPWJlLmZbMF06KGJlLnY9K2JlLmZbMF0sZGVsZXRl''@;'; put 'put ''IGJlLmYpOihiZS5taW49aXNOYU4oK2JlLmZbMF0pP2JlLmZbMF06K2JlLmZbMF0sYmUubWF4PWlzTmFOKCtiZS5mWzFdKT9iZS5mWzFdOitiZS5mWzFdLGRlbGV0ZSBiZS5mKX1icmVhaztjYXNlImV4cHJlc3Npb24iOmJlLnQ9ImZvcm11bGEiLGJlLmY9YmUuZlswXTticmVhaztjYXNlImNv''@;'; put 'put ''bnRhaW5zVGV4dCI6Y2FzZSJub3RDb250YWluc1RleHQiOmNhc2UiYmVnaW5zV2l0aCI6Y2FzZSJlbmRzV2l0aCI6aWYoYmUudD0idGV4dCIsYmUub3A9bXhbZXQudHlwZV0sbnVsbD09ZXQudGV4dCYmYmUuZi5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoIkNGIFRleHQgUnVsZSAiK2JlLm9w''@;'; put 'put ''KyIgbWlzc2luZyB0ZXh0Iik7YmUudj1udWxsIT1ldC50ZXh0P2V0LnRleHQ6YmUuZlsxXS5tYXRjaCgvIi4qIi8pP2JlLmZbMV0uc2xpY2UoMSwtMSk6YmUuZlsxXSxiZS5mPWJlLmZbMF0sbnVsbD09YmUuZiYmZGVsZXRlIGJlLmY7YnJlYWs7Y2FzZSJjb2xvclNjYWxlIjppZihiZS50PSJz''@;'; put 'put ''Y2FsZSIsIWJlLmNvbG9yU2NhbGUpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nIGNvbG9yU2NhbGUiKTtiZS5jbWluPXl4KChHZT1iZS5jb2xvclNjYWxlKS5jZnZvc1swXSxHZS5jb2xvcnNbMF0sUSxHKSwzPT1HZS5jZnZvcy5sZW5ndGgmJihiZS5jbWlkPXl4KEdlLmNmdm9zWzFdLEdlLmNv''@;'; put 'put ''bG9yc1sxXSxRLEcpKSxiZS5jbWF4PXl4KEdlLmNmdm9zW0dlLmNmdm9zLmxlbmd0aC0xXSxHZS5jb2xvcnNbR2UuY2Z2b3MubGVuZ3RoLTFdLFEsRyk7YnJlYWs7Y2FzZSJkYXRhQmFyIjppZihiZS50PSJiYXIiLCFiZS5kYXRhQmFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZyBkYXRhQmFy''@;'; put 'put ''Iik7KEdlPWJlLmRhdGFCYXIpLmNvbG9yc1swXSYmKGJlLmNvbG9yPWxiKEdlLmNvbG9yc1swXSxRLEcpKSxiZS5jbWluPU03KEdlLmNmdm9zWzBdKSxiZS5jbWF4PU03KEdlLmNmdm9zWzFdKTticmVhaztjYXNlImljb25TZXQiOmlmKGJlLnQ9Imljb24iLCFiZS5pY29uU2V0KXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigibWlzc2luZyBpY29uU2V0Iik7YmUudGhyZXNoPShHZT1iZS5pY29uU2V0KS5jZnZvcy5tYXAoZnVuY3Rpb24oTHQpe3JldHVybiBNNyhMdCl9KSxiZS52PUdlLnRhZyYmR2UudGFnLmljb25TZXR8fCIzVHJhZmZpY0xpZ2h0czEiLGJlLnJldj1GcihHZS50YWcucmV2ZXJzZXx8''@;'; put 'put ''ImZhbHNlIiksYmUucGN0PUZyKEdlLnRhZy5wZXJjZW50fHwidHJ1ZSIpLGJlLmhpZGRlbj0hRnIoR2UudGFnLnNob3dWYWx1ZXx8InRydWUiKTticmVhaztjYXNlInRpbWVQZXJpb2QiOmJlLnQ9ImRhdGUiLGJlLm9wPVM3W2V0LnRpbWVQZXJpb2RdO2JyZWFrO2Nhc2UiYWJvdmVBdmVyYWdl''@;'; put 'put ''IjpiZS50PSJhdmciLGJlLm9wPSIwIj09ZXQuYWJvdmVBdmVyYWdlPyJMIjoiRyIsYmUub3ArPWV0LnN0ZERldj9ldC5zdGREZXY6RnIoZXQuZXF1YWxBdmVyYWdlfHwiMCIpPyJFIjoiVCI7YnJlYWs7Y2FzZSJ0b3AxMCI6YmUudD0icmFuayIsYmUub3A9KEZyKGV0LmJvdHRvbXx8IjAiKT8i''@;'; put 'put ''QiI6IlQiKSsoRnIoZXQucGVyY2VudHx8IjAiKT8iUCI6IlYiKSxiZS52PStldC5yYW5rO2JyZWFrO2RlZmF1bHQ6dGhyb3ciVW5zdXBwb3J0ZWQgQ0YgVHlwZSAiK2V0LnR5cGV9aWYoZGVsZXRlIGJlLmNvbG9yU2NhbGUsZGVsZXRlIGJlLmRhdGFCYXIsZGVsZXRlIGJlLmljb25TZXQsIWJl''@;'; put 'put ''LnQpdGhyb3cgY29uc29sZS5sb2coUy5zbGljZShCZSxGdCtidC5sZW5ndGgpKSwiYmFkIENGIHJ1bGUiO251bGwhPWJlLmYmJiFiZS5mLmxlbmd0aCYmZGVsZXRlIGJlLmYsYmUuZGVsfHxwZS5wdXNoKGJlKTticmVhaztjYXNlIjxmb3JtdWxhIjpjYXNlIjxmb3JtdWxhPiI6TmU9RnQrYnQu''@;'; put 'put ''bGVuZ3RoO2JyZWFrO2Nhc2UiPC9mb3JtdWxhPiI6YmUuZi5wdXNoKGVpKFMuc2xpY2UoTmUsRnQpKSk7YnJlYWs7Y2FzZSI8ZiI6Y2FzZSI8Zj4iOk5lPUZ0K2J0Lmxlbmd0aDticmVhaztjYXNlIjwvZj4iOmJlLmYucHVzaChlaShTLnNsaWNlKE5lLEZ0KSkpO2JyZWFrO2Nhc2UiPHNxcmVm''@;'; put 'put ''PiI6eHQ9RnQrYnQubGVuZ3RoO2JyZWFrO2Nhc2UiPC9zcXJlZj4iOm90PVMuc2xpY2UoeHQsRnQpLEw9b3Q/b3QuaW5kZXhPZigiICIpPi0xP290OnRvKG90KToiIixiZS5yZWY9TCxwZS5mb3JFYWNoKGZ1bmN0aW9uKEx0KXtMdC5yZWY9TH0pO2JyZWFrO2Nhc2UiPGNvbG9yU2NhbGUiOmNh''@;'; put 'put ''c2UiPGNvbG9yU2NhbGU+IjpjYXNlIjxkYXRhQmFyIjpjYXNlIjxkYXRhQmFyPiI6Y2FzZSI8aWNvblNldCI6Y2FzZSI8aWNvblNldD4iOkdlPXtjZnZvczpbXSxjb2xvcnM6W10sdGFnOmt0fSxOZT1GdCtidC5sZW5ndGg7YnJlYWs7Y2FzZSI8L2NvbG9yU2NhbGU+IjpiZS5jb2xvclNjYWxl''@;'; put 'put ''PUdlO2JyZWFrO2Nhc2UiPC9kYXRhQmFyPiI6YmUuZGF0YUJhcj1HZTticmVhaztjYXNlIjwvaWNvblNldD4iOmJlLmljb25TZXQ9R2U7YnJlYWs7Y2FzZSI8Y2Z2byI6Y2FzZSI8Y2Z2by8+IjpHZS5jZnZvcy5wdXNoKGt0KTticmVhaztjYXNlIjwvY2Z2bz4iOmJyZWFrO2Nhc2UiPGNvbG9y''@;'; put 'put ''IjpHZS5jb2xvcnMucHVzaChrdCk7YnJlYWs7Y2FzZSI8L2NvbG9yPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZXh0IjptZT0hMDticmVhaztjYXNlIjwvZXh0PiI6bWU9ITE7YnJlYWs7Y2FzZSI8bmVnYXRpdmVGaWxsQ29sb3Ii''@;'; put 'put ''OmNhc2UiPGF4aXNDb2xvciI6Y2FzZSI8Ym9yZGVyQ29sb3IiOmNhc2UiPG5lZ2F0aXZlQm9yZGVyQ29sb3IiOmNhc2UiPGNmSWNvbiI6YmUuZGVsPSEwO2JyZWFrO2Nhc2UiPGR4Zj4iOm1lPSEwLGN0PUZ0O2JyZWFrO2Nhc2UiPC9keGY+IjptZT0hMSxiZS5zPUtJKFMuc2xpY2UoY3QsRnQr''@;'; put 'put ''YnQubGVuZ3RoKSxRLEcsayk7YnJlYWs7ZGVmYXVsdDppZihrJiZrLldURil7aWYobGUpYnJlYWs7aWYoIW1lKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIra3RbMF0rIiBpbiBjb25kZm10Iil9fXJldHVybiBidH0pLHBlfShTLGxlLEwsayxHLFEpfXZhciBMWj0vPCg/Olx3Oik/''@;'; put 'put ''c2hlZXRWaWV3KD86W14+YS16XVtePl0qKT9cLz8+L2c7ZnVuY3Rpb24gemIoUyxMKXt2YXIgaz0wLEc9MCxRPTAsbGU9MDtpZighTHx8IUwuQ2VsbFhmKXJldHVybiBudWxsO3ZhciBtZT1MLkNlbGxYZltTXTtudWxsIT1tZSYmKG51bGwhPW1lLm51bUZtdElkJiYoaz1tZS5udW1GbXRJZCks''@;'; put 'put ''bnVsbCE9bWUuZmlsbElkJiYoRz1tZS5maWxsSWQpLG51bGwhPW1lLmZvbnRJZCYmKFE9bWUuZm9udElkKSxudWxsIT1tZS5ib3JkZXJJZCYmKGxlPW1lLmJvcmRlcklkKSk7dmFyIHBlPXt0OiJ6In07dHJ5e183KHBlLGssRyxRLGxlLHtXVEY6MSxjZWxsU3R5bGVzOiEwfSwwLEwpfWNhdGNo''@;'; put 'put ''e31yZXR1cm4gcGUuc31mdW5jdGlvbiBPWihTLEwsayxHKXtpZih2b2lkIDA9PT1TLnYmJnZvaWQgMD09PVMuZiYmbnVsbD09Uy5zJiYhUy5jfHwieiI9PT1TLnQmJiFTLmMmJiFHLnNoZWV0U3R1YnMpcmV0dXJuIiI7dmFyIFE9IiIsbGU9Uy50LG1lPVMudjtpZigieiIhPT1TLnQpc3dpdGNo''@;'; put 'put ''KFMudCl7Y2FzZSJiIjpRPVMudj8iMSI6IjAiO2JyZWFrO2Nhc2UibiI6UT0iIitTLnY7YnJlYWs7Y2FzZSJlIjpRPW9kW1Mudl07YnJlYWs7Y2FzZSJkIjpHJiZHLmNlbGxEYXRlcz9RPUllKFMudiwtMSkudG9JU09TdHJpbmcoKTooKFM9dW4oUykpLnQ9Im4iLFE9IiIrKFMudj1RZShJZShT''@;'; put 'put ''LnYpKSkpLHR5cGVvZiBTLno+InUiJiYoUy56PUEuX3RhYmxlWzE0XSk7YnJlYWs7ZGVmYXVsdDpRPVMudn12YXIgcGU9InoiPT1TLnQ/IiI6Wm8oInYiLGhpKFEpKSxiZT17cjpMfSxOZT1HP18wKEcuY2VsbFhmcyxHLmNlbGxTdHlsZVhmcyxTLEcpOjA7c3dpdGNoKDAhPT1OZSYmKGJlLnM9''@;'; put 'put ''TmUpLFMudCl7Y2FzZSJuIjpjYXNlInoiOmJyZWFrO2Nhc2UiZCI6YmUudD0iZCI7YnJlYWs7Y2FzZSJiIjpiZS50PSJiIjticmVhaztjYXNlImUiOmJlLnQ9ImUiO2JyZWFrO2RlZmF1bHQ6aWYobnVsbD09Uy52KXtkZWxldGUgUy50O2JyZWFrfWlmKEcmJkcuYm9va1NTVCl7cGU9Wm8oInYi''@;'; put 'put ''LCIiK3NMKEcuU3RyaW5ncyxTLnYsUy5SP1Mucj1XOChTLlIpOm51bGwsRy5yZXZTdHJpbmdzKSksYmUudD0icyI7YnJlYWt9QXJyYXkuaXNBcnJheShTLlIpPyhwZT0iPGlzPiIrVzgoUy5SKSsiPC9pcz4iLGJlLnQ9ImlubGluZVN0ciIpOmJlLnQ9InN0ciJ9aWYoUy50IT1sZSYmKFMudD1s''@;'; put 'put ''ZSxTLnY9bWUpLFMuZil7dmFyIEJlPVMuRiYmUy5GLnNsaWNlKDAsTC5sZW5ndGgpPT1MP3t0OiJhcnJheSIscmVmOlMuRn06bnVsbDtwZT1qcigiZiIsaGkoUy5mKSxCZSkrKG51bGwhPVMudj9wZToiIil9cmV0dXJuIFMubCYma1siIWxpbmtzIl0ucHVzaChbTCxTLmxdKSxTLmMmJmtbIiFj''@;'; put 'put ''b21tZW50cyJdLnB1c2goW0wsUy5jXSksanIoImMiLHBlLGJlKX12YXIgUFo9ZnVuY3Rpb24oKXt2YXIgUz0vPCg/Olx3KzopP2NbIFwvPl0vLEw9LzxcLyg/Olx3KzopP3Jvdz4vLGs9L3I9WyInXShbXiInXSopWyInXS8sRz0vPCg/Olx3KzopP2lzPihbXFNcc10qPyk8XC8oPzpcdys6KT9p''@;'; put 'put ''cz4vLFE9L3JlZj1bIiddKFteIiddKilbIiddLyxsZT1kMCgidiIpLG1lPWQwKCJmIik7cmV0dXJuIGZ1bmN0aW9uKGJlLE5lLEJlLEdlLGV0LGN0LHh0KXtmb3IodmFyIENuLGxyLHByLHlyLGtpLG90PTAsYnQ9IiIsRnQ9W10sa3Q9W10sTHQ9MCxKdD0wLFRuPTAsc3I9IiIscW49MCxXbj0w''@;'; put 'put ''LHRyPTAsd2k9MCxGaT0wLHJhPTAsb2E9QXJyYXkuaXNBcnJheSh4dC5DZWxsWGYpLGtyPVtdLFluPVtdLFZyPUFycmF5LmlzQXJyYXkoQmUpLHdyPVtdLFZuPXt9LHpyPSExLFppPWJlLnNwbGl0KEwpLENpPSEhR2Uuc2hlZXRTdHVicyxfYT0hIUdlLmNlbGxIVE1MLGZvPSEoITE9PT1HZS5j''@;'; put 'put ''ZWxsVGV4dCYmIUdlLmNlbGxORiYmIUdlLmNlbGxTdHlsZXMpLGFhPTAsem89WmkubGVuZ3RoO2FhIT16bzsrK2FhKXt2YXIgamE9KGJ0PVppW2FhXS50cmltKCkpLmxlbmd0aDtpZigwIT09amEpe3ZhciB3bz0wO2U6Zm9yKG90PTA7b3Q8amE7KytvdClzd2l0Y2goYnRbb3RdKXtjYXNlIj4i''@;'; put 'put ''OmlmKCIvIiE9YnRbb3QtMV0peysrb3Q7YnJlYWsgZX1HZS5jZWxsU3R5bGVzJiZudWxsIT0obHI9dnIoYnQuc2xpY2Uod28sb3QpLCEwKSkuciYmcGFyc2VJbnQobHIuciwxMCkmJihxbj1wYXJzZUludChsci5yLDEwKSxWbj17fSx6cj0hMSxsci5odCYmKHpyPSEwLFZuLmhwdD1wYXJzZUZs''@;'; put 'put ''b2F0KGxyLmh0KSxWbi5ocHg9dzMoVm4uaHB0KSksbHIuZHlEZXNjZW50JiYoenI9ITAsVm4uZHlEZXNjZW50PWxyLmR5RGVzY2VudCksIjEiPT1sci5oaWRkZW4mJih6cj0hMCxWbi5oaWRkZW49ITApLG51bGwhPWxyLm91dGxpbmVMZXZlbCYmKHpyPSEwLFZuLmxldmVsPStsci5vdXRsaW5l''@;'; put 'put ''TGV2ZWwpLGxyLnMmJnh0JiZ4dC5DZWxsWGYmJih6cj0hMCxWbi5zPXpiKGxyLnMseHQpKSx6ciYmKHdyW3FuLTFdPVZuKSk7YnJlYWs7Y2FzZSI8Ijp3bz1vdH1pZih3bz49b3QpYnJlYWs7aWYocW49bnVsbCE9KGxyPXZyKGJ0LnNsaWNlKHdvLG90KSwhMCkpLnI/cGFyc2VJbnQobHIuciwx''@;'; put 'put ''MCk6cW4rMSxXbj0tMSwhKEdlLnNoZWV0Um93cyYmR2Uuc2hlZXRSb3dzPHFuKSl7R2Uubm9kaW18fChldC5zLnI+cW4tMSYmKGV0LnMucj1xbi0xKSxldC5lLnI8cW4tMSYmKGV0LmUucj1xbi0xKSk7dmFyIGJvPXt0OiJyb3ciLHJvdzpbXSxSOnFuLTEsaWR4Ok5lfTtHZS5jZWxsU3R5bGVz''@;'; put 'put ''JiYoVm49e30senI9ITEsbHIuaHQmJih6cj0hMCxWbi5ocHQ9cGFyc2VGbG9hdChsci5odCksVm4uaHB4PXczKFZuLmhwdCkpLGxyLmR5RGVzY2VudCYmKHpyPSEwLFZuLmR5RGVzY2VudD1sci5keURlc2NlbnQpLCIxIj09bHIuaGlkZGVuJiYoenI9ITAsVm4uaGlkZGVuPSEwKSxudWxsIT1s''@;'; put 'put ''ci5vdXRsaW5lTGV2ZWwmJih6cj0hMCxWbi5sZXZlbD0rbHIub3V0bGluZUxldmVsKSxsci5zJiYoenI9ITAsVm4ucz16Yihsci5zLHh0KSksenImJihHZS5jYWxsYmFjaz9iby5wcm9wcz1Wbjp3cltxbi0xXT1WbikpLEZ0PWJ0LnNsaWNlKG90KS5zcGxpdChTKTtmb3IodmFyIFVpPTA7VWkh''@;'; put 'put ''PUZ0Lmxlbmd0aCYmIjwiPT1GdFtVaV0udHJpbSgpLmNoYXJBdCgwKTsrK1VpKTtmb3IoRnQ9RnQuc2xpY2UoVWkpLG90PTA7b3QhPUZ0Lmxlbmd0aDsrK290KWlmKDAhPT0oYnQ9RnRbb3RdLnRyaW0oKSkubGVuZ3RoKXtpZihrdD1idC5tYXRjaChrKSxMdD1vdCxKdD0wLFRuPTAsYnQ9Ijxj''@;'; put 'put ''ICIrKCI8Ij09YnQuc2xpY2UoMCwxKT8iPiI6IiIpK2J0LG51bGwhPWt0JiYyPT09a3QubGVuZ3RoKXtmb3IoTHQ9MCxzcj1rdFsxXSxKdD0wO0p0IT1zci5sZW5ndGgmJiEoKFRuPXNyLmNoYXJDb2RlQXQoSnQpLTY0KTwxfHxUbj4yNik7KytKdClMdD0yNipMdCtUbjtXbj0tLUx0fWVsc2Ur''@;'; put 'put ''K1duO2ZvcihKdD0wO0p0IT1idC5sZW5ndGgmJjYyIT09YnQuY2hhckNvZGVBdChKdCk7KytKdCk7aWYoKytKdCwobHI9dnIoYnQuc2xpY2UoMCxKdCksITApKS5yfHwobHIucj1HaSh7cjpxbi0xLGM6V259KSksQ249e3Q6IiJ9LG51bGwhPShrdD0oc3I9YnQuc2xpY2UoSnQpKS5tYXRjaChs''@;'; put 'put ''ZSkpJiYiIiE9PWt0WzFdJiYoQ24udj1laShrdFsxXSkpLEdlLmNlbGxGb3JtdWxhKXtpZihudWxsIT0oa3Q9c3IubWF0Y2gobWUpKSYmIiIhPT1rdFsxXSl7aWYoQ24uZj1laShjbyhrdFsxXSkpLnJlcGxhY2UoL1xyXG4vZywiXG4iKSxHZS54bGZufHwoQ24uZj1SUihDbi5mKSksa3RbMF0u''@;'; put 'put ''aW5kZXhPZigndD0iYXJyYXkiJyk+LTEpQ24uRj0oc3IubWF0Y2goUSl8fFtdKVsxXSxDbi5GLmluZGV4T2YoIjoiKT4tMSYma3IucHVzaChbdG8oQ24uRiksQ24uRl0pO2Vsc2UgaWYoa3RbMF0uaW5kZXhPZigndD0ic2hhcmVkIicpPi0xKXt5cj12cihrdFswXSk7dmFyIGpsPWVpKGNvKGt0''@;'; put 'put ''WzFdKSk7R2UueGxmbnx8KGpsPVJSKGpsKSksWW5bcGFyc2VJbnQoeXIuc2ksMTApXT1beXIsamwsbHIucl19fWVsc2Uoa3Q9c3IubWF0Y2goLzxmW14+XSpcLz4vKSkmJlluWyh5cj12cihrdFswXSkpLnNpXSYmKENuLmY9YzcoWW5beXIuc2ldWzFdLFluW3lyLnNpXVsyXSxsci5yKSk7dmFy''@;'; put 'put ''IEJuPUFvKGxyLnIpO2ZvcihKdD0wO0p0PGtyLmxlbmd0aDsrK0p0KUJuLnI+PWtyW0p0XVswXS5zLnImJkJuLnI8PWtyW0p0XVswXS5lLnImJkJuLmM+PWtyW0p0XVswXS5zLmMmJkJuLmM8PWtyW0p0XVswXS5lLmMmJihDbi5GPWtyW0p0XVsxXSl9aWYobnVsbD09bHIudCYmdm9pZCAwPT09''@;'; put 'put ''Q24udilpZihDbi5mfHxDbi5GKUNuLnY9MCxDbi50PSJuIjtlbHNle2lmKCFDaSljb250aW51ZTtDbi50PSJ6In1lbHNlIENuLnQ9bHIudHx8Im4iO3N3aXRjaChldC5zLmM+V24mJihldC5zLmM9V24pLGV0LmUuYzxXbiYmKGV0LmUuYz1XbiksQ24udCl7Y2FzZSJuIjppZigiIj09Q24udnx8''@;'; put 'put ''bnVsbD09Q24udil7aWYoIUNpKWNvbnRpbnVlO0NuLnQ9InoifWVsc2UgQ24udj1wYXJzZUZsb2F0KENuLnYpO2JyZWFrO2Nhc2UicyI6aWYodHlwZW9mIENuLnY+InUiKXtpZighQ2kpY29udGludWU7Q24udD0ieiJ9ZWxzZSBwcj1QYltwYXJzZUludChDbi52LDEwKV0sQ24udj1wci50LENu''@;'; put 'put ''LnI9cHIucixwci5SJiYoQ24uUj1wci5SKSxfYSYmKENuLmg9cHIuaCk7YnJlYWs7Y2FzZSJzdHIiOkNuLnQ9InMiLENuLnY9bnVsbCE9Q24udj9jbyhDbi52KToiIixfYSYmKENuLmg9YmEoQ24udikpO2JyZWFrO2Nhc2UiaW5saW5lU3RyIjprdD1zci5tYXRjaChHKSxDbi50PSJzIixudWxs''@;'; put 'put ''IT1rdCYmKHByPW5iKGt0WzFdKSk/KENuLnY9cHIudCxwci5SJiYoQ24uUj1wci5SKSxfYSYmKENuLmg9cHIuaCkpOkNuLnY9IiI7YnJlYWs7Y2FzZSJiIjpDbi52PUZyKENuLnYpO2JyZWFrO2Nhc2UiZCI6R2UuY2VsbERhdGVzP0NuLnY9SWUoQ24udiwxKTooQ24udj1RZShJZShDbi52LDEp''@;'; put 'put ''KSxDbi50PSJuIik7YnJlYWs7Y2FzZSJlIjohMSE9PUdlLmNlbGxUZXh0JiYoQ24udz1Dbi52KSxDbi52PXpoW0NuLnZdfWlmKGZvKXt0cj13aT1GaT1yYT0wLGtpPW51bGwsb2EmJnZvaWQgMCE9PWxyLnMmJm51bGwhPShraT14dC5DZWxsWGZbbHIuc10pJiYobnVsbCE9a2kubnVtRm10SWQm''@;'; put 'put ''Jih0cj1raS5udW1GbXRJZCksR2UuY2VsbFN0eWxlcyYmKG51bGwhPWtpLmZpbGxJZCYmKHdpPWtpLmZpbGxJZCksbnVsbCE9a2kuZm9udElkJiYoRmk9a2kuZm9udElkKSxudWxsIT1raS5ib3JkZXJJZCYmKHJhPWtpLmJvcmRlcklkKSkpO3RyeXtfNyhDbix0cix3aSxGaSxyYSxHZSwwLHh0''@;'; put 'put ''KX1jYXRjaHt9R2UuY2VsbFN0eWxlcyYmQ24ucyYmKGtpJiZraS5hbGlnbm1lbnQmJihDbi5zLmFsaWdubWVudD11bihraS5hbGlnbm1lbnQpKSxraSYma2kucHJvdGVjdGlvbiYmKG51bGwhPWtpLnByb3RlY3Rpb24uaGlkZGVuJiYoQ24ucy5oaWRkZW49a2kucHJvdGVjdGlvbi5oaWRkZW4p''@;'; put 'put ''LG51bGwhPWtpLnByb3RlY3Rpb24uZWRpdGFibGUmJihDbi5zLmVkaXRhYmxlPWtpLnByb3RlY3Rpb24uZWRpdGFibGUpKSxraSYma2kuc3R5bGUmJihDbi5zLnN0eWxlPWtpLnN0eWxlKSksR2UuY2VsbERhdGVzJiZvYSYmIm4iPT1Dbi50JiZBLmlzX2RhdGUoQS5fdGFibGVbdHJdKSYmKENu''@;'; put 'put ''LnQ9ImQiLENuLnY9c24oQ24udikpfXZhciBGcztHZS5ub2RpbSYmKEZzPUFvKGxyLnIpLGV0LnMucj5Gcy5yJiYoZXQucy5yPUZzLnIpLGV0LmUucjxGcy5yJiYoZXQuZS5yPUZzLnIpKSxHZS5jYWxsYmFjaz8oRnM9QW8obHIuciksYm8ucm93W0ZzLmNdPUNuKTpWcj8oQmVbKEZzPUFvKGxy''@;'; put 'put ''LnIpKS5yXXx8KEJlW0ZzLnJdPVtdKSxCZVtGcy5yXVtGcy5jXT1Dbik6QmVbbHIucl09Q259R2UuY2FsbGJhY2smJkdlLmNhbGxiYWNrKGJvKX19fUNpJiYhR2UuY2FsbGJhY2smJnpiKDAseHQpLHdyLmxlbmd0aD4wJiYoQmVbIiFyb3dzIl09d3IpfX0oKSxrTD1qcigid29ya3NoZWV0Iixu''@;'; put 'put ''dWxsLHt4bWxuczpCYS5tYWluWzBdLCJ4bWxuczpyIjpCYS5yLCJ4bWxuczp4MTRhYyI6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL3NwcmVhZHNoZWV0bWwvMjAwOS85L2FjIiwieG1sbnM6bWMiOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvbWFya3Vw''@;'; put 'put ''LWNvbXBhdGliaWxpdHkvMjAwNiIsIm1jOklnbm9yYWJsZSI6IngxNGFjIn0pO2Z1bmN0aW9uIFBvZShTLEwsayxHKXt2YXIgbWUsUT1bcGksa0xdLHBlPSIiLGJlPWsuU2hlZXRzW2suU2hlZXROYW1lc1tTXV07bnVsbD09YmUmJihiZT17fSk7dmFyIE5lPWJlWyIhcmVmIl18fCJBMSIsQmU9''@;'; put 'put ''dG8oTmUpO2lmKEJlLmUuYz4xNjM4M3x8QmUuZS5yPjEwNDg1NzUpe2lmKEwuV1RGKXRocm93IG5ldyBFcnJvcigiUmFuZ2UgIitOZSsiIGV4Y2VlZHMgZm9ybWF0IGxpbWl0IEExOlhGRDEwNDg1NzYiKTtCZS5lLmM9TWF0aC5taW4oQmUuZS5jLDE2MzgzKSxCZS5lLnI9TWF0aC5taW4oQmUu''@;'; put 'put ''ZS5jLDEwNDg1NzUpLE5lPW9vKEJlKX1HfHwoRz17fSksYmVbIiFjb21tZW50cyJdPVtdO3ZhciBHZT1bXSxldD1iZVsiIXByaW50Il07aWYoZnVuY3Rpb24gbUwoUyxMLGssRyxRKXt2YXIgbGU9ITEsbWU9e30scGU9bnVsbDtpZigieGxzeCIhPT1HLmJvb2tUeXBlJiZMLnZiYXJhdyl7dmFy''@;'; put 'put ''IGJlPUwuU2hlZXROYW1lc1trXTt0cnl7TC5Xb3JrYm9vayYmKGJlPUwuV29ya2Jvb2suU2hlZXRzW2tdLkNvZGVOYW1lfHxiZSl9Y2F0Y2h7fWxlPSEwLG1lLmNvZGVOYW1lPWhpKGJlKX1TJiZTWyIhY29uZGZtdCJdJiYobWUuZW5hYmxlRm9ybWF0Q29uZGl0aW9uc0NhbGN1bGF0aW9uPSIx''@;'; put 'put ''IiksUyYmU1siIXRhYmNvbG9yIl0mJihwZT0ocGV8fCIiKSsnPHRhYkNvbG9yIHJnYj0iRkYnK1QxKFNbIiF0YWJjb2xvciJdLnJnYikrJyIvPicpO3ZhciBOZT0hMSxCZT17fTtpZigoKChTfHx7fSlbIiFwcmludCJdfHx7fSkucHJvcHN8fHt9KS5maXQmJihOZT0hMCxCZS5maXRUb1BhZ2U9''@;'; put 'put ''MSksTmUmJihwZT0ocGV8fCIiKStqcigicGFnZVNldFVwUHIiLG51bGwsQmUpKSxTJiZTWyIhb3V0bGluZSJdKXt2YXIgR2U9e3N1bW1hcnlCZWxvdzoxLHN1bW1hcnlSaWdodDoxfTtTWyIhb3V0bGluZSJdLmFib3ZlJiYoR2Uuc3VtbWFyeUJlbG93PTApLFNbIiFvdXRsaW5lIl0ubGVmdCYm''@;'; put 'put ''KEdlLnN1bW1hcnlSaWdodD0wKSxwZT0ocGV8fCIiKStqcigib3V0bGluZVByIixudWxsLEdlKX0hbGUmJiFwZXx8KFFbUS5sZW5ndGhdPWpyKCJzaGVldFByIixwZSxtZSkpfShiZSxrLFMsTCxRKSxRW1EubGVuZ3RoXT1qcigiZGltZW5zaW9uIixudWxsLHtyZWY6TmV9KSxRW1EubGVuZ3Ro''@;'; put 'put ''XT1mdW5jdGlvbiBBTChTLEwsayxHKXt2YXIgUT17d29ya2Jvb2tWaWV3SWQ6IjAifTtpZigoKChHfHx7fSkuV29ya2Jvb2t8fHt9KS5WaWV3c3x8W10pLmxlbmd0aCl7dmFyIGxlPUcuV29ya2Jvb2suVmlld3MsbWU9bGVba118fGxlWzBdO1EucmlnaHRUb0xlZnQ9bWUuUlRMPyIxIjoiMCIs''@;'; put 'put ''bWUuem9vbSYmKFEuem9vbVNjYWxlPW1lLnpvb20pLG51bGwhPW1lLmdyaWQmJihRLnNob3dHcmlkTGluZXM9bWUuZ3JpZCksbWUudmlldyYmKFEudmlldz1tZS52aWV3KX1udWxsIT1TWyIhZ3JpZGxpbmVzIl0mJihRLnNob3dHcmlkTGluZXM9ISFTWyIhZ3JpZGxpbmVzIl0pO3ZhciBwZT0i''@;'; put 'put ''IixiZT17cjowLGM6MH07aWYoU1siIXNlbCJdKXtpZighKGJlPVNbIiFzZWwiXS5jZWxsKSl7aWYoIVNbIiFzZWwiXS5yYW5nZSl0aHJvdyBuZXcgRXJyb3IoIk11c3Qgc3BlY2lmeSBhIHNlbGVjdGlvbiBjZWxsIG9yIHJhbmdlIik7YmU9Vm8oU1siIXNlbCJdLnJhbmdlLnJlcGxhY2UoL1xz''@;'; put 'put ''LiokLywiIikpLnN9InN0cmluZyI9PXR5cGVvZiBiZSYmKGJlPUFvKGJlKSl9dmFyIEJlPVNbIiFmcmVlemUiXT8ic3RyaW5nIj09dHlwZW9mIFNbIiFmcmVlemUiXT9BbyhTWyIhZnJlZXplIl0pOlNbIiFmcmVlemUiXTp7YzowLHI6MH07aWYoU1siIWZyZWV6ZSJdKXt2YXIgR2U9R2koQmUp''@;'; put 'put ''LGV0PXtzdGF0ZToiZnJvemVuIix4U3BsaXQ6QmUuYyx5U3BsaXQ6QmUucix0b3BMZWZ0Q2VsbDpHZX07U1siIXNlbCJdJiYoZXQuYWN0aXZlUGFuZT0oYmUucj49QmUuciYmQmUucj4wPyJib3R0b20iOiJ0b3AiKSsoYmUuYz49QmUuYyYmQmUuYz4wPyJSaWdodCI6IkxlZnQiKSkscGU9anIo''@;'; put 'put ''InBhbmUiLG51bGwsZXQpfWlmKFNbIiFzZWwiXSl7dmFyIGN0PXthY3RpdmVDZWxsOiJzdHJpbmciPT10eXBlb2YgYmU/YmU6R2koYmUpfTtjdC5zcXJlZj1TWyIhc2VsIl0ucmFuZ2U/U1siIXNlbCJdLnJhbmdlOmN0LmFjdGl2ZUNlbGwrIjoiK2N0LmFjdGl2ZUNlbGwscGUrPWpyKCJzZWxl''@;'; put 'put ''Y3Rpb24iLG51bGwsY3QpLFNbIiFmcmVlemUiXSYmKEJlLmM+MCYmKGN0LnBhbmU9InRvcFJpZ2h0IixwZSs9anIoInNlbGVjdGlvbiIsbnVsbCxjdCkpLEJlLnI+MCYmKGN0LnBhbmU9ImJvdHRvbUxlZnQiLHBlKz1qcigic2VsZWN0aW9uIixudWxsLGN0KSksQmUuYz4wJiZCZS5yPjAmJihj''@;'; put 'put ''dC5wYW5lPSJib3R0b21SaWdodCIscGUrPWpyKCJzZWxlY3Rpb24iLG51bGwsY3QpKSl9cmV0dXJuIGpyKCJzaGVldFZpZXdzIixqcigic2hlZXRWaWV3IixwZXx8bnVsbCxRKSx7fSl9KGJlLDAsUyxrKSxMLnNoZWV0Rm9ybWF0KXt2YXIgY3Q9e2RlZmF1bHRSb3dIZWlnaHQ6TC5zaGVldEZv''@;'; put 'put ''cm1hdC5kZWZhdWx0Um93SGVpZ2h0fHwiMTYiLGJhc2VDb2xXaWR0aDpMLnNoZWV0Rm9ybWF0LmJhc2VDb2xXaWR0aHx8IjEwIn07bnVsbCE9TC5zaGVldEZvcm1hdC5vdXRsaW5lTGV2ZWxSb3cmJihjdC5vdXRsaW5lTGV2ZWxSb3c9TC5zaGVldEZvcm1hdC5vdXRsaW5lTGV2ZWxSb3cpLFFb''@;'; put 'put ''US5sZW5ndGhdPWpyKCJzaGVldEZvcm1hdFByIixudWxsLGN0KX1lbHNlIGlmKGJlWyIhc2hlZXRGb3JtYXQiXSl7dmFyIHh0PXt9LG90PSExO2JlWyIhc2hlZXRGb3JtYXQiXS5yb3cmJihiZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhwdD8ob3Q9ITAseHQuZGVmYXVsdFJvd0hlaWdodD1iZVsi''@;'; put 'put ''IXNoZWV0Rm9ybWF0Il0ucm93LmhwdCx4dC5jdXN0b21IZWlnaHQ9MSk6YmVbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHg/KG90PSEwLHh0LmRlZmF1bHRSb3dIZWlnaHQ9VnAoYmVbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHgpLHh0LmN1c3RvbUhlaWdodD0xKTooMD09PWJlWyIhc2hlZXRGb3Jt''@;'; put 'put ''YXQiXS5yb3cuaHB0fHwwPT09YmVbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHh8fGJlWyIhc2hlZXRGb3JtYXQiXS5yb3cuaGlkZGVuKSYmKG90PSEwLHh0LmRlZmF1bHRSb3dIZWlnaHQ9eHQuZGVmYXVsdFJvd0hlaWdodHx8MTYseHQuY3VzdG9tSGVpZ2h0PTEseHQuemVyb0hlaWdodD0xKSxi''@;'; put 'put ''ZVsiIXNoZWV0Rm9ybWF0Il0uZHlEZXNjZW50JiYoeHRbIngxNGFjOmR5RGVzY2VudCJdPWJlWyIhc2hlZXRGb3JtYXQiXS5keURlc2NlbnQpKSxiZVsiIXNoZWV0Rm9ybWF0Il0uY29sJiYoYmVbIiFzaGVldEZvcm1hdCJdLmNvbC53Y2h8fHIxKGJlWyIhc2hlZXRGb3JtYXQiXS5jb2wpLHh0''@;'; put 'put ''LmRlZmF1bHRDb2xXaWR0aD1iZVsiIXNoZWV0Rm9ybWF0Il0uY29sLndjaCs1L05jfHwwLG90PSEwKSxudWxsPT14dC5kZWZhdWx0Um93SGVpZ2h0JiYoeHQuZGVmYXVsdFJvd0hlaWdodD0xNiksbnVsbD09eHQuZGVmYXVsdENvbFdpZHRoJiYoeHQuZGVmYXVsdENvbFdpZHRoPTEwKSx4dC5v''@;'; put 'put ''dXRsaW5lTGV2ZWxSb3c9eHQub3V0bGluZUxldmVsUm93fHw3LG90JiYoUVtRLmxlbmd0aF09anIoInNoZWV0Rm9ybWF0UHIiLG51bGwseHQpKX1udWxsIT1iZVsiIWNvbHMiXSYmYmVbIiFjb2xzIl0ubGVuZ3RoPjAmJihRW1EubGVuZ3RoXT1mdW5jdGlvbiBrWihTLEwsayl7Zm9yKHZhciBR''@;'; put 'put ''LEc9WyI8Y29scz4iXSxsZT0wO2xlIT1MLmxlbmd0aDsrK2xlKWlmKFE9TFtsZV0pe2lmKFEuYXV0byYmaFooUyxRLGxlKSxRLnN8fFEueil7dmFyIG1lPXt0OiJ6In07bnVsbCE9US5zJiYobWUucz1RLnMpLG51bGwhPVEueiYmKG1lLno9US56KSxRLnN0eWxlPV8wKGsuY2VsbFhmcyxrLmNl''@;'; put 'put ''bGxTdHlsZVhmcyxtZSxrKX1HW0cubGVuZ3RoXT1qcigiY29sIixudWxsLGl4KGxlLFEpKX1yZXR1cm4gR1tHLmxlbmd0aF09IjwvY29scz4iLEcuam9pbigiIil9KGJlLGJlWyIhY29scyJdLEwpKSxRW21lPVEubGVuZ3RoXT0iPHNoZWV0RGF0YS8+IixiZVsiIWxpbmtzIl09W10sbnVsbCE9''@;'; put 'put ''YmVbIiFyZWYiXSYmKHBlPWZ1bmN0aW9uIEZaKFMsTCl7dmFyIGJlLGJ0LFE9W10sbGU9W10sbWU9dG8oU1siIXJlZiJdKSxwZT0iIixOZT0iIixCZT1bXSxHZT0wLGV0PTAsY3Q9U1siIXJvd3MiXSx4dD1BcnJheS5pc0FycmF5KFMpLG90PXtyOk5lfSxGdD0tMTtmb3IoZXQ9bWUucy5jO2V0''@;'; put 'put ''PD1tZS5lLmM7KytldClCZVtldF09Rm8oZXQpO2ZvcihHZT1tZS5zLnI7R2U8PW1lLmUucjsrK0dlKXtmb3IobGU9W10sTmU9QmkoR2UpLGV0PW1lLnMuYztldDw9bWUuZS5jOysrZXQpe2JlPUJlW2V0XStOZTt2YXIga3Q9eHQ/KFNbR2VdfHxbXSlbZXRdOlNbYmVdO3ZvaWQgMCE9PWt0JiZu''@;'; put 'put ''dWxsIT0ocGU9T1ooa3QsYmUsUyxMKSkmJmxlLnB1c2gocGUpfShsZS5sZW5ndGg+MHx8Y3QmJmN0W0dlXSkmJihvdD17cjpOZX0sY3QmJmN0W0dlXSYmKChidD1jdFtHZV0pLmhpZGRlbiYmKG90LmhpZGRlbj0xKSxGdD0tMSxidC5ocHg/RnQ9VnAoYnQuaHB4KTpidC5ocHQmJihGdD1idC5o''@;'; put 'put ''cHQpLEZ0Pi0xJiYob3QuaHQ9RnQsb3QuY3VzdG9tSGVpZ2h0PTEpLGJ0LmxldmVsJiYob3Qub3V0bGluZUxldmVsPWJ0LmxldmVsKSxidC5keURlc2NlbnQmJihvdFsieDE0YWM6ZHlEZXNjZW50Il09YnQuZHlEZXNjZW50KSxidC5zJiYob3Qucz1fMChMLmNlbGxYZnMsTC5jZWxsU3R5bGVY''@;'; put 'put ''ZnMse3Q6InoiLHM6YnQuc30sTCksb3QuY3VzdG9tRm9ybWF0PTEpKSxRW1EubGVuZ3RoXT1qcigicm93IixsZS5qb2luKCIiKSxvdCkpfWlmKGN0KWZvcig7R2U8Y3QubGVuZ3RoOysrR2UpY3QmJmN0W0dlXSYmKG90PXtyOkdlKzF9LChidD1jdFtHZV0pLmhpZGRlbiYmKG90LmhpZGRlbj0x''@;'; put 'put ''KSxGdD0tMSxidC5ocHg/RnQ9VnAoYnQuaHB4KTpidC5ocHQmJihGdD1idC5ocHQpLEZ0Pi0xJiYob3QuaHQ9RnQsb3QuY3VzdG9tSGVpZ2h0PTEpLGJ0LmxldmVsJiYob3Qub3V0bGluZUxldmVsPWJ0LmxldmVsKSxRW1EubGVuZ3RoXT1qcigicm93IiwiIixvdCkpO3JldHVybiBRLmpvaW4o''@;'; put 'put ''IiIpfShiZSxMKSxwZS5sZW5ndGg+MCYmKFFbUS5sZW5ndGhdPXBlKSksUS5sZW5ndGg+bWUrMSYmKFFbUS5sZW5ndGhdPSI8L3NoZWV0RGF0YT4iLFFbbWVdPVFbbWVdLnJlcGxhY2UoIi8+IiwiPiIpKSxiZVsiIXByb3RlY3QiXSYmKFFbUS5sZW5ndGhdPWZ1bmN0aW9uIF9MKFMpe3ZhciBM''@;'; put 'put ''PXtzaGVldDoxfTtyZXR1cm4geUwuZm9yRWFjaChmdW5jdGlvbihrKXtudWxsIT1TW2tdJiZTW2tdJiYoTFtrXT0iMSIpfSksYkwuZm9yRWFjaChmdW5jdGlvbihrKXtudWxsIT1TW2tdJiYhU1trXSYmKExba109IjAiKX0pLFMucGFzc3dvcmQ/TC5wYXNzd29yZD1yZihTLnBhc3N3b3JkKS50''@;'; put 'put ''b1N0cmluZygxNikudG9VcHBlckNhc2UoKTpTLmVuY3J5cHRpb24mJihMLmFsZ29yaXRobU5hbWU9Uy5lbmNyeXB0aW9uLmFsZ28sTC5oYXNoVmFsdWU9Uy5lbmNyeXB0aW9uLmhhc2gsTC5zYWx0VmFsdWU9Uy5lbmNyeXB0aW9uLnNhbHQsTC5zcGluQ291bnQ9Uy5lbmNyeXB0aW9uLnNwaW4p''@;'; put 'put ''LGpyKCJzaGVldFByb3RlY3Rpb24iLG51bGwsTCl9KGJlWyIhcHJvdGVjdCJdKSksbnVsbCE9YmVbIiFhdXRvZmlsdGVyIl0mJihRW1EubGVuZ3RoXT1mdW5jdGlvbiBEWihTLEwsayxHKXt2YXIgUT0ic3RyaW5nIj09dHlwZW9mIFMucmVmP1MucmVmOm9vKFMucmVmKTtrLldvcmtib29rfHwo''@;'; put 'put ''ay5Xb3JrYm9vaz17U2hlZXRzOltdfSksay5Xb3JrYm9vay5OYW1lc3x8KGsuV29ya2Jvb2suTmFtZXM9W10pO3ZhciBsZT1rLldvcmtib29rLk5hbWVzLG1lPVZvKFEpO21lLnMucj09bWUuZS5yJiYobWUuZS5yPVZvKExbIiFyZWYiXSkuZS5yLFE9b28obWUpKTtmb3IodmFyIHBlPTA7cGU8''@;'; put 'put ''bGUubGVuZ3RoOysrcGUpe3ZhciBiZT1sZVtwZV07aWYoIl94bG5tLl9GaWx0ZXJEYXRhYmFzZSI9PWJlLk5hbWUmJmJlLlNoZWV0PT1HKXtiZS5SZWY9IiciK2suU2hlZXROYW1lc1tHXSsiJyEiK1E7YnJlYWt9fXJldHVybiBwZT09bGUubGVuZ3RoJiZsZS5wdXNoKHtOYW1lOiJfeGxubS5f''@;'; put 'put ''RmlsdGVyRGF0YWJhc2UiLFNoZWV0OkcsUmVmOiInIitrLlNoZWV0TmFtZXNbR10rIichIitRfSksanIoImF1dG9GaWx0ZXIiLG51bGwse3JlZjpRfSl9KGJlWyIhYXV0b2ZpbHRlciJdLGJlLGssUykpLG51bGwhPWJlWyIhbWVyZ2VzIl0mJmJlWyIhbWVyZ2VzIl0ubGVuZ3RoPjAmJihRW1Eu''@;'; put 'put ''bGVuZ3RoXT1mdW5jdGlvbiBfWihTKXtpZigwPT09Uy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBMPSc8bWVyZ2VDZWxscyBjb3VudD0iJytTLmxlbmd0aCsnIj4nLGs9MDtrIT1TLmxlbmd0aDsrK2spTCs9JzxtZXJnZUNlbGwgcmVmPSInK29vKFNba10pKyciLz4nO3JldHVybiBMKyI8L21l''@;'; put 'put ''cmdlQ2VsbHM+In0oYmVbIiFtZXJnZXMiXSkpLGJlWyIhY29uZGZtdCJdJiYoUVtRLmxlbmd0aF09ZnVuY3Rpb24gT2coUyxMKXtyZXR1cm4gUy5tYXAoZnVuY3Rpb24oayxHKXtyZXR1cm4gZnVuY3Rpb24gTG0oUyxMLGspe3ZhciBHPVMucz9iNyhrLkRYRixTLnMpOi0xLFE9InN0cmluZyI9''@;'; put 'put ''PXR5cGVvZiBTLnJlZj9TLnJlZjpvbyhTLnJlZiksbWU9dG8oUS5yZXBsYWNlKC9ccy4qJC8sIiIpKS5zO21lLnI8MCYmKG1lLnI9MCksbWUuYzwwJiYobWUuYz0wKTt2YXIgcGU9IiIsYmU9e3ByaW9yaXR5OkwrMX07c3dpdGNoKEc+LTEmJihiZS5keGZJZD1HKSxTLnQpe2Nhc2UidW5pcXVl''@;'; put 'put ''IjpiZS50eXBlPSJ1bmlxdWVWYWx1ZXMiO2JyZWFrO2Nhc2UiZHVwIjpiZS50eXBlPSJkdXBsaWNhdGVWYWx1ZXMiO2JyZWFrO2Nhc2UiYmxhbmsiOmJlLnR5cGU9KFMudj8iYyI6Im5vdEMiKSsib250YWluc0JsYW5rcyIscGU9Ijxmb3JtdWxhPkxFTihUUklNKCIrR2kobWUpKyIpKSIrKFMu''@;'; put 'put ''dj8iPSI6IiZndDsiKSsiMDwvZm9ybXVsYT4iO2JyZWFrO2Nhc2UiZXJyb3IiOmJlLnR5cGU9KFMudj8iYyI6Im5vdEMiKSsib250YWluc0Vycm9ycyI7YnJlYWs7Y2FzZSJmb3JtdWxhIjpiZS50eXBlPSJleHByZXNzaW9uIixwZT1qcigiZm9ybXVsYSIsaGkoUy5mKSx7fSk7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJkYXRlIjpiZS50eXBlPSJ0aW1lUGVyaW9kIixiZS50aW1lUGVyaW9kPXZ4W1Mub3BdO2JyZWFrO2Nhc2UidGV4dCI6c3dpdGNoKGJlLnR5cGU9YmUub3BlcmF0b3I9cXBbUy5vcF0sYmUudGV4dD1TLnYsUy5vcCl7Y2FzZSJJTiI6cGU9Jzxmb3JtdWxhPk5PVChJU0VSUk9SKFNFQVJDSCgi''@;'; put 'put ''JytoaShTLnYpKyciLCcrR2kobWUpKyIpKSk8L2Zvcm11bGE+IjticmVhaztjYXNlIk9UIjpwZT0nPGZvcm11bGE+SVNFUlJPUihTRUFSQ0goIicraGkoUy52KSsnIiwnK0dpKG1lKSsiKSk8L2Zvcm11bGE+IjticmVhaztjYXNlIlNUIjpwZT0iPGZvcm11bGE+TEVGVCgiK0dpKG1lKSsnLExF''@;'; put 'put ''TigiJytoaShTLnYpKyciKSk9IicraGkoUy52KSsnIjwvZm9ybXVsYT4nO2JyZWFrO2Nhc2UiTkQiOnBlPSI8Zm9ybXVsYT5SSUdIVCgiK0dpKG1lKSsnLExFTigiJytoaShTLnYpKyciKSk9IicraGkoUy52KSsnIjwvZm9ybXVsYT4nfWJyZWFrO2Nhc2UidmFsIjpiZS50eXBlPSJjZWxsSXMi''@;'; put 'put ''LGJlLm9wZXJhdG9yPUltW1Mub3BdLHBlPW51bGwhPVMubWluP2pyKCJmb3JtdWxhIixoaShTdHJpbmcoUy5taW4pKSx7fSkranIoImZvcm11bGEiLGhpKFN0cmluZyhTLm1heCkpLHt9KTpqcigiZm9ybXVsYSIsaGkobnVsbCE9Uy52P1N0cmluZygic3RyaW5nIj09dHlwZW9mIFMudj8nIicr''@;'; put 'put ''Uy52LnJlcGxhY2UoLyIvZywnIiInKSsnIic6Uy52KTpTLmYpLHt9KTticmVhaztjYXNlImF2ZyI6c3dpdGNoKGJlLnR5cGU9ImFib3ZlQXZlcmFnZSIsYmUuYWJvdmVBdmVyYWdlPSJMIj09Uy5vcC5jaGFyQXQoMCk/IjAiOiIxIixTLm9wLmNoYXJBdCgxKSl7Y2FzZSJUIjpiZS5lcXVhbEF2''@;'; put 'put ''ZXJhZ2U9IjAiO2JyZWFrO2Nhc2UiRSI6YmUuZXF1YWxBdmVyYWdlPSIxIjticmVhaztkZWZhdWx0OmJlLnN0ZERldj1TLm9wLmNoYXJBdCgxKX1icmVhaztjYXNlInJhbmsiOmJlLnR5cGU9InRvcDEwIixiZS5ib3R0b209IkIiPT1TLm9wLmNoYXJBdCgwKT8iMSI6IjAiLGJlLnBlcmNlbnQ9''@;'; put 'put ''IlAiPT1TLm9wLmNoYXJBdCgxKT8iMSI6IjAiLGJlLnJhbms9Uy52O2JyZWFrO2Nhc2UiaWNvbiI6YmUudHlwZT0iaWNvblNldCI7dmFyIE5lPXtpY29uU2V0OlMudixwZXJjZW50OlMucGN0PyJ0cnVlIjoiZmFsc2UifTtTLnJldiYmKE5lLnJldmVyc2U9InRydWUiKSxTLmhpZGRlbiYmKE5l''@;'; put 'put ''LnNob3dWYWx1ZT0iZmFsc2UiKSxwZT1qcigiaWNvblNldCIsUy50aHJlc2gubWFwKFJtKS5qb2luKCIiKSxOZSk7YnJlYWs7Y2FzZSJzY2FsZSI6YmUudHlwZT0iY29sb3JTY2FsZSIscGUrPVJtKFMuY21pbiksUy5jbWlkJiYocGUrPVJtKFMuY21pZCkpLHBlKz1SbShTLmNtYXgpLHBlKz1y''@;'; put 'put ''MihTLmNtaW4uY29sb3IpLFMuY21pZCYmKHBlKz1yMihTLmNtaWQuY29sb3IpKSxwZT1qcigiY29sb3JTY2FsZSIscGUrPXIyKFMuY21heC5jb2xvcikse30pO2JyZWFrO2Nhc2UiYmFyIjpiZS50eXBlPSJkYXRhQmFyIixwZSs9Um0oUy5jbWluKSxwZSs9Um0oUy5jbWF4KSxwZT1qcigiZGF0''@;'; put 'put ''YUJhciIscGUrPXIyKFMuY29sb3IpLHt9KTticmVhaztkZWZhdWx0OnRocm93IGNvbnNvbGUubG9nKFMpLCJDRiBtaXNzaW5nIHR5cGUgIitTLnR9cmV0dXJuJzxjb25kaXRpb25hbEZvcm1hdHRpbmcgc3FyZWY9IicrUSsnIj4nK2pyKCJjZlJ1bGUiLCIiPT1wZT9udWxsOnBlLGJlKSsiPC9j''@;'; put 'put ''b25kaXRpb25hbEZvcm1hdHRpbmc+In0oayxHLEwpfSkuam9pbigiIil9KGJlWyIhY29uZGZtdCJdLEwpKSxiZVsiIXZhbGlkYXRpb25zIl0mJihRW1EubGVuZ3RoXT1mdW5jdGlvbiBqYihTKXtpZighU3x8MD09Uy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBMPVtdLGs9MCxHPTA7RzxTLmxl''@;'; put 'put ''bmd0aDsrK0cpe3ZhciBRPVNbR10sbGU9TUxbUS50XTtpZihRLnJlZiYmKCJzdHJpbmciIT10eXBlb2YgUS5yZWZ8fC0xIT1RLnJlZi5pbmRleE9mKCIgIil8fChRLnJlZj10byhRLnJlZiksUS5yZWYucyYmIShRLnJlZi5zLmM8MCkpKSl7KytrO3ZhciBtZT17dHlwZTpsZSxhbGxvd0JsYW5r''@;'; put 'put ''OisoMCE9US5ibGFuayksc2hvd0lucHV0TWVzc2FnZTorKDAhPVEuaW5wdXQpLHNob3dFcnJvck1lc3NhZ2U6KygwIT1RLmVycm9yKSxzcXJlZjoic3RyaW5nIj09dHlwZW9mIFEucmVmP1EucmVmOm9vKFEucmVmKX07aWYoUS5pbnB1dCYmKFEuaW5wdXQudGl0bGUmJihtZS5wcm9tcHRUaXRs''@;'; put 'put ''ZT1xaShRLmlucHV0LnRpdGxlKSksUS5pbnB1dC5tZXNzYWdlJiYobWUucHJvbXB0PXFpKFEuaW5wdXQubWVzc2FnZSkpKSxRLmVycm9yJiYoUS5lcnJvci50aXRsZSYmKG1lLmVycm9yVGl0bGU9cWkoUS5lcnJvci50aXRsZSkpLFEuZXJyb3IubWVzc2FnZSYmKG1lLmVycm9yPXFpKFEuZXJy''@;'; put 'put ''b3IubWVzc2FnZSkpLFEuZXJyb3Iuc3R5bGUmJihtZS5lcnJvclN0eWxlPVEuZXJyb3Iuc3R5bGUpKSwhbGUpdGhyb3cgbmV3IEVycm9yKCJCYWQgdmFsaWRhdGlvbjogdW5yZWNvZ25pemVkIHR5cGUgIitRLnQpO3ZhciBwZT0iIjtzd2l0Y2goUS50KXtjYXNlIkFueSI6YnJlYWs7Y2FzZSJM''@;'; put 'put ''aXN0IjpjYXNlIkN1c3RvbSI6aWYoUS5sKXtpZihRLmwuam9pbigiLCIpLmxlbmd0aD4yNTApdGhyb3cgbmV3IEVycm9yKCJEViBsZW5ndGggPiAyNTAgdHJpZ2dlcnMgY29ycnVwdGlvbiBlcnJvcnMgaW4gRXhjZWwuICBVc2UgYSBsb29rdXAgdGFibGUiKTtwZT0nPGZvcm11bGExPiInK2hp''@;'; put 'put ''KFEubC5qb2luKCIsIikpKyciPC9mb3JtdWxhMT4nfWVsc2UgcGU9Ijxmb3JtdWxhMT4iK2hpKFEuZikrIjwvZm9ybXVsYTE+IjticmVhaztjYXNlIkRhdGUiOmNhc2UiVGltZSI6Y2FzZSJEZWNpbWFsIjpjYXNlIkxlbmd0aCI6Y2FzZSJXaG9sZSI6aWYoIUltW1Eub3BdKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcigiQmFkIERhdGEgVmFsaWRhdGlvbiB0eXBlICIrUS5vcCsiIGZvciAiK1EudCk7aWYobWUub3BlcmF0b3I9SW1bUS5vcF0sbnVsbCE9US52KXBlPSI8Zm9ybXVsYTE+IitoaShTdHJpbmcoUS52IGluc3RhbmNlb2YgRGF0ZT9RZShRLnYpOlEudikpKyI8L2Zvcm11bGExPiI7ZWxzZXtp''@;'; put 'put ''ZihudWxsPT1RLm1pbnx8bnVsbD09US5tYXgpdGhyb3cgbmV3IEVycm9yKCJCYWQgRGF0YSBWYWxpZGF0aW9uOiBgdmAgb3IgYG1pbmArYG1heGAgcmVxdWlyZWQgZm9yIFR5cGUgIitRLnQpO3BlPSI8Zm9ybXVsYTE+IitoaShTdHJpbmcoUS5taW4gaW5zdGFuY2VvZiBEYXRlP1FlKFEubWlu''@;'; put 'put ''KTpRLm1pbikpKyI8L2Zvcm11bGExPjxmb3JtdWxhMj4iK2hpKFN0cmluZyhRLm1heCBpbnN0YW5jZW9mIERhdGU/UWUoUS5tYXgpOlEubWF4KSkrIjwvZm9ybXVsYTI+In19TC5wdXNoKGpyKCJkYXRhVmFsaWRhdGlvbiIscGV8fG51bGwsbWUpKX19cmV0dXJuIGs+MD8nPGRhdGFWYWxpZGF0''@;'; put 'put ''aW9ucyBjb3VudD0iJytrKyciPicrTC5qb2luKCIiKSsiPC9kYXRhVmFsaWRhdGlvbnM+IjoiIn0oYmVbIiF2YWxpZGF0aW9ucyJdKSk7dmFyIEZ0LGJ0PS0xLGt0PS0xO2lmKGJlWyIhbGlua3MiXS5sZW5ndGg+MCYmKFFbUS5sZW5ndGhdPSI8aHlwZXJsaW5rcz4iLGJlWyIhbGlua3MiXS5m''@;'; put 'put ''b3JFYWNoKGZ1bmN0aW9uKENuKXtDblsxXS5UYXJnZXQmJihGdD17cmVmOkNuWzBdfSwiIyIhPUNuWzFdLlRhcmdldC5jaGFyQXQoMCkmJihrdD1UcyhHLC0xLGhpKENuWzFdLlRhcmdldCkucmVwbGFjZSgvIy4qJC8sIiIpLEthLkhMSU5LKSxGdFsicjppZCJdPSJySWQiK2t0KSwoYnQ9Q25b''@;'; put 'put ''MV0uVGFyZ2V0LmluZGV4T2YoIiMiKSk+LTEmJihGdC5sb2NhdGlvbj1oaShDblsxXS5UYXJnZXQuc2xpY2UoYnQrMSkpKSxDblsxXS5Ub29sdGlwJiYoRnQudG9vbHRpcD1oaShDblsxXS5Ub29sdGlwKSksUVtRLmxlbmd0aF09anIoImh5cGVybGluayIsbnVsbCxGdCkpfSksUVtRLmxlbmd0''@;'; put 'put ''aF09IjwvaHlwZXJsaW5rcz4iKSxkZWxldGUgYmVbIiFsaW5rcyJdLGV0KXt2YXIgTHQ9ZnVuY3Rpb24gT29lKFMpe2lmKFMucHJvcHMpe3ZhciBMPXt9LGs9Uy5wcm9wcztyZXR1cm4gay5ncmlkbGluZXMmJihMLmdyaWRMaW5lcz1MLmdyaWRMaW5lc1NldD0xKSxrLmhlYWRpbmdzJiYoTC5o''@;'; put 'put ''ZWFkaW5ncz0xKSxrLmNlbnRlclgmJihMLmhvcml6b250YWxDZW50ZXJlZD0xKSxrLmNlbnRlclkmJihMLnZlcnRpY2FsQ2VudGVyZWQ9MSksanIoInByaW50T3B0aW9ucyIsbnVsbCxMKX1yZXR1cm4iIn0oZXQpO0x0Lmxlbmd0aCYmKFFbUS5sZW5ndGhdPUx0KX1pZigobnVsbCE9YmVbIiFt''@;'; put 'put ''YXJnaW5zIl18fGV0JiZldC5tYXJnaW5zKSYmKFFbUS5sZW5ndGhdPWZ1bmN0aW9uIFNMKFMpe3JldHVybiBrbShTKSxqcigicGFnZU1hcmdpbnMiLG51bGwsUyl9KGJlWyIhbWFyZ2lucyJdfHxldC5tYXJnaW5zKSksZXQpe3ZhciBKdD1mdW5jdGlvbiBoeChTKXtpZihTLnByb3BzKXt2YXIg''@;'; put 'put ''TD17fSxrPVMucHJvcHM7aWYoay5vcmllbnRhdGlvbiYmKEwub3JpZW50YXRpb249ay5vcmllbnRhdGlvbiksay5zY2FsZSYmKEwuc2NhbGU9ay5zY2FsZSksay5maXQmJihudWxsIT1rLmZpdC5oZWlnaHQmJihMLmZpdFRvSGVpZ2h0PWsuZml0LmhlaWdodCksbnVsbCE9ay5maXQud2lkdGgm''@;'; put 'put ''JihMLmZpdFRvV2lkdGg9ay5maXQud2lkdGgpKSxrLmRwaSYmKEwuaG9yaXpvbnRhbERwaT1MLnZlcnRpY2FsRHBpPWsuZHBpKSxudWxsIT1rLmZpcnN0JiYoTC5maXJzdFBhZ2VOdW1iZXI9ay5maXJzdCxMLnVzZUZpcnN0UGFnZU51bWJlcj0xKSxrLmJ3JiYoTC5ibGFja0FuZFdoaXRlPTEp''@;'; put 'put ''LGsuZHJhZnQmJihMLmRyYWZ0PTEpLGsuY29tbWVudHMmJihMLmNlbGxDb21tZW50cz11eFtrLmNvbW1lbnRzXXx8Im5vbmUiKSxrLmVycm9ycyYmKEwuZXJyb3JzPUNaW2suZXJyb3JzXXx8Im5vbmUiKSxrLnBhcGVyKXN3aXRjaCh0eXBlb2Ygay5wYXBlcil7Y2FzZSJudW1iZXIiOkwucGFw''@;'; put 'put ''ZXJTaXplPWsucGFwZXI7YnJlYWs7Y2FzZSJzdHJpbmciOm1iW2sucGFwZXJdP0wucGFwZXJTaXplPW1iW2sucGFwZXJdOitrLnBhcGVyJiYoTC5wYXBlclNpemU9K2sucGFwZXIpO2JyZWFrO2Nhc2Uib2JqZWN0IjppZighay5wYXBlci5oZWlnaHR8fCFrLnBhcGVyLndpZHRoKXRocm93IkN1''@;'; put 'put ''c3RvbSBQYXBlciBTaXplIG11c3QgaW5jbHVkZSB3aWR0aCBhbmQgaGVpZ2h0ISI7TC5wYXBlckhlaWdodD1rLnBhcGVyLmhlaWdodCxMLnBhcGVyV2lkdGg9ay5wYXBlci53aWR0aH1yZXR1cm5bMSwhMCwidHJ1ZSIsIm92ZXIiXS5pbmRleE9mKGsub3JkZXIpPi0xJiYoTC5wYWdlT3JkZXI9''@;'; put 'put ''Im92ZXJUaGVuRG93biIpLGpyKCJwYWdlU2V0dXAiLG51bGwsTCl9cmV0dXJuIiJ9KGV0KTtKdC5sZW5ndGgmJihRW1EubGVuZ3RoXT1KdCksSnQ9ZnVuY3Rpb24gUlooUyl7dmFyIEw9W10saz0iIixHPSIiLFE9IiIsbGU9IiIsbWU9IiIscGU9IiIsYmU9IiIsTmU9WnAoUy5oZWFkZXIpO05l''@;'; put 'put ''Lmxlbmd0aCYmKEc9TmVbMF0scGU9TmVbMV0sbGU9TmVbMl0pO3ZhciBCZT1acChTLmZvb3Rlcik7cmV0dXJuIEJlLmxlbmd0aCYmKFE9QmVbMF0sYmU9QmVbMV0sbWU9QmVbMl0pLEcmJkwucHVzaCgiPG9kZEhlYWRlcj4iK2hpKEcpKyI8L29kZEhlYWRlcj4iKSxRJiZMLnB1c2goIjxvZGRG''@;'; put 'put ''b290ZXI+IitoaShRKSsiPC9vZGRGb290ZXI+IiksKG1lIT1RfHxsZSE9RykmJihrKz0nIGRpZmZlcmVudE9kZEV2ZW49IjEiJyxMLnB1c2goIjxldmVuSGVhZGVyPiIraGkobGUpKyI8L2V2ZW5IZWFkZXI+IiksTC5wdXNoKCI8ZXZlbkZvb3Rlcj4iK2hpKG1lKSsiPC9ldmVuRm9vdGVyPiIp''@;'; put 'put ''KSwoYmUhPVF8fHBlIT1HKSYmKGsrPScgZGlmZmVyZW50Rmlyc3Q9IjEiJyxMLnB1c2goIjxmaXJzdEhlYWRlcj4iK2hpKHBlKSsiPC9maXJzdEhlYWRlcj4iKSxMLnB1c2goIjxmaXJzdEZvb3Rlcj4iK2hpKGJlKSsiPC9maXJzdEZvb3Rlcj4iKSksTC5sZW5ndGg/IjxoZWFkZXJGb290ZXIi''@;'; put 'put ''K2srIj4iK0wuam9pbigiIikrIjwvaGVhZGVyRm9vdGVyPiI6IiJ9KGV0KSxKdC5sZW5ndGgmJihRW1EubGVuZ3RoXT1KdCl9aWYoKG51bGwhPWJlWyIhcm93QnJlYWtzIl18fGV0JiZldC5yb3dCcmVha3MpJiYoUVtRLmxlbmd0aF09ZnVuY3Rpb24geFooUyl7aWYoMD09Uy5sZW5ndGgpcmV0''@;'; put 'put ''dXJuIiI7Zm9yKHZhciBMPVsnPHJvd0JyZWFrcyBjb3VudD0iJytTLmxlbmd0aCsnIiBtYW51YWxCcmVha0NvdW50PSInK1MubGVuZ3RoKyciPiddLGs9MDtrPFMubGVuZ3RoOysraylMLnB1c2goJzxicmsgaWQ9IicrU1trXS5SKyciIG1hbj0iMSIvPicpO3JldHVybiBMLmpvaW4oIiIpKyI8''@;'; put 'put ''L3Jvd0JyZWFrcz4ifShiZVsiIXJvd0JyZWFrcyJdfHxldC5yb3dCcmVha3MpKSwobnVsbCE9YmVbIiFjb2xCcmVha3MiXXx8ZXQmJmV0LmNvbEJyZWFrcykmJihRW1EubGVuZ3RoXT1mdW5jdGlvbiBUWihTKXtpZigwPT1TLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIEw9Wyc8Y29sQnJlYWtz''@;'; put 'put ''IGNvdW50PSInK1MubGVuZ3RoKyciIG1hbnVhbEJyZWFrQ291bnQ9IicrUy5sZW5ndGgrJyI+J10saz0wO2s8Uy5sZW5ndGg7KytrKUwucHVzaCgnPGJyayBpZD0iJytTW2tdLkMrJyIgbWFuPSIxIi8+Jyk7cmV0dXJuIEwuam9pbigiIikrIjwvY29sQnJlYWtzPiJ9KGJlWyIhY29sQnJlYWtz''@;'; put 'put ''Il18fGV0LmNvbEJyZWFrcykpLCghTHx8TC5pZ25vcmVFQ3x8bnVsbD09TC5pZ25vcmVFQykmJihRW1EubGVuZ3RoXT1abygiaWdub3JlZEVycm9ycyIsanIoImlnbm9yZWRFcnJvciIsbnVsbCx7bnVtYmVyU3RvcmVkQXNUZXh0OjEsc3FyZWY6TmV9KSkpLGJlWyIhY2hhcnRzIl0mJkdlLnB1''@;'; put 'put ''c2guYXBwbHkoR2UsYmVbIiFjaGFydHMiXSksYmVbIiFpbWFnZXMiXSYmR2UucHVzaC5hcHBseShHZSxiZVsiIWltYWdlcyJdKSxiZVsiIXNoYXBlcyJdJiZHZS5wdXNoLmFwcGx5KEdlLGJlWyIhc2hhcGVzIl0pLEdlLmxlbmd0aD4wJiYoa3Q9VHMoRywtMSwiLi4vZHJhd2luZ3MvZHJhd2lu''@;'; put 'put ''ZyIrKFMrMSkrIi54bWwiLEthLkRSQVcpLFFbUS5sZW5ndGhdPWpyKCJkcmF3aW5nIixudWxsLHsicjppZCI6InJJZCIra3R9KSxiZVsiIWRyYXdpbmciXT1HZSksKGJlWyIhY29tbWVudHMiXS5sZW5ndGg+MHx8KGJlWyIhY29udHJvbHMiXXx8W10pLmxlbmd0aD4wKSYmKGt0PVRzKEcsLTEs''@;'; put 'put ''Ii4uL2RyYXdpbmdzL3ZtbERyYXdpbmciKyhTKzEpKyIudm1sIixLYS5WTUwpLFFbUS5sZW5ndGhdPWpyKCJsZWdhY3lEcmF3aW5nIixudWxsLHsicjppZCI6InJJZCIra3R9KSxiZVsiIWxlZ2FjeSJdPWt0KSxiZVsiIXByaW50Il0mJmJlWyIhcHJpbnQiXS5pbWFnZXMpe3ZhciBUbj1iZVsi''@;'; put 'put ''IXByaW50Il0uaW1hZ2VzLHNyPTA7WyJoZWFkZXIiLCJmb290ZXIiXS5mb3JFYWNoKGZ1bmN0aW9uKENuKXtUbltDbl0mJlsib2RkIiwiZXZlbiIsImZpcnN0Il0uZm9yRWFjaChmdW5jdGlvbihscil7VG5bQ25dW2xyXSYmWyJsZWZ0IiwicmlnaHQiLCJjZW50ZXIiXS5mb3JFYWNoKGZ1bmN0''@;'; put 'put ''aW9uKHFuKXtpZihBcnJheS5pc0FycmF5KFRuW0NuXVtscl1bcW5dKSlmb3IodmFyIFduPTA7V248VG5bQ25dW2xyXVtxbl0ubGVuZ3RoOysrV24pVG5bQ25dW2xyXVtxbl1bV25dJiYoVG5bQ25dW2xyXVtxbl1bV25dLl9jbnQ9c3IrKyl9KX0pfSksc3I+MCYmKGt0PVRzKEcsLTEsIi4uL2Ry''@;'; put 'put ''YXdpbmdzL3ZtbERyYXdpbmciKyhTKzEpKyJIRi52bWwiLEthLlZNTCksUVtRLmxlbmd0aF09anIoImxlZ2FjeURyYXdpbmdIRiIsbnVsbCx7InI6aWQiOiJySWQiK2t0fSksYmVbIiFsZWdhY3lIRiJdPWt0KX1yZXR1cm4oYmVbIiF0YWJsZXMiXXx8W10pLmxlbmd0aD4wJiYoUVtRLmxlbmd0''@;'; put 'put ''aF09Jzx0YWJsZVBhcnRzIGNvdW50PSInK2JlWyIhdGFibGVzIl0ubGVuZ3RoKyciPicsYmVbIiF0YWJsZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKENuLGxyKXtrdD1UcyhHLC0xLCIuLi90YWJsZXMvdGFibGUiKyhTKzEpKyJfIitscisiLnhtbCIsS2EuVEFCTEUpLFFbUS5sZW5ndGhdPSc8dGFi''@;'; put 'put ''bGVQYXJ0IHI6aWQ9InJJZCcra3QrJyIvPid9KSxRW1EubGVuZ3RoXT0iPC90YWJsZVBhcnRzPiIpLFEubGVuZ3RoPjEmJihRW1EubGVuZ3RoXT0iPC93b3Jrc2hlZXQ+IixRWzFdPVFbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFEuam9pbigiIil9ZnVuY3Rpb24gVWIoUyxMLGssRyl7dmFyIFE9''@;'; put 'put ''ZnVuY3Rpb24geDcoUyxMLGspe3ZhciBHPVZ0KDE0NSksUT0oa1siIXJvd3MiXXx8W10pW1NdfHx7fTtHLndyaXRlX3NoaWZ0KDQsUyksRy53cml0ZV9zaGlmdCg0LDApO3ZhciBsZT0zMjA7US5ocHg/bGU9MjAqVnAoUS5ocHgpOlEuaHB0JiYobGU9MjAqUS5ocHQpLEcud3JpdGVfc2hpZnQo''@;'; put 'put ''MixsZSksRy53cml0ZV9zaGlmdCgxLDApO3ZhciBtZT0wO1EubGV2ZWwmJihtZXw9US5sZXZlbCksUS5oaWRkZW4mJihtZXw9MTYpLChRLmhweHx8US5ocHQpJiYobWV8PTMyKSxHLndyaXRlX3NoaWZ0KDEsbWUpLEcud3JpdGVfc2hpZnQoMSwwKTt2YXIgcGU9MCxiZT1HLmw7Ry5sKz00O2Zv''@;'; put 'put ''cih2YXIgTmU9e3I6UyxjOjB9LEJlPTA7QmU8MTY7KytCZSlpZighKEwucy5jPkJlKzE8PDEwfHxMLmUuYzxCZTw8MTApKXtmb3IodmFyIEdlPS0xLGV0PS0xLGN0PUJlPDwxMDtjdDxCZSsxPDwxMDsrK2N0KU5lLmM9Y3QsKEFycmF5LmlzQXJyYXkoayk/KGtbTmUucl18fFtdKVtOZS5jXTpr''@;'; put 'put ''W0dpKE5lKV0pJiYoR2U8MCYmKEdlPWN0KSxldD1jdCk7R2U8MHx8KCsrcGUsRy53cml0ZV9zaGlmdCg0LEdlKSxHLndyaXRlX3NoaWZ0KDQsZXQpKX12YXIgb3Q9Ry5sO3JldHVybiBHLmw9YmUsRy53cml0ZV9zaGlmdCg0LHBlKSxHLmw9b3QsRy5sZW5ndGg+Ry5sP0cuc2xpY2UoMCxHLmwp''@;'; put 'put ''Okd9KEcsayxMKTsoUS5sZW5ndGg+MTd8fChMWyIhcm93cyJdfHxbXSlbR10pJiZNbihTLCJCcnRSb3dIZHIiLFEpfXZhciBIWj1yZCxOWj1kMztmdW5jdGlvbiBQTChTKXtyZXR1cm5bSzIoUyksV3MoUyksIm4iXX12YXIgQ3g9cmQsdFc9ZDMsRXg9WyJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJi''@;'; put 'put ''b3R0b20iLCJoZWFkZXIiLCJmb290ZXIiXSxBeD1bIkFueSIsIldob2xlIiwiRGVjaW1hbCIsIkxpc3QiLCJEYXRlIiwiVGltZSIsIkxlbmd0aCIsIkN1c3RvbSJdLEIwPVsiSU4iLCJPVCIsIkVRIiwiTkUiLCJHVCIsIkxUIiwiR0UiLCJMRSJdO2Z1bmN0aW9uIGxXKFMpe3ZhciBMPVZ0KDQp''@;'; put 'put ''LGs9W0xdLEc9QXguaW5kZXhPZihTLnQpO2lmKEc8MCl0aHJvdyBuZXcgRXJyb3IoIkJhZCB2YWxpZGF0aW9uOiB1bnJlY29nbml6ZWQgdHlwZSAiK1MudCk7dmFyIGxlPUIwLmluZGV4T2YoUy5vcCk7c3dpdGNoKEcpe2Nhc2UgMDpjYXNlIDM6Y2FzZSA3OmxlPTA7YnJlYWs7ZGVmYXVsdDpp''@;'; put 'put ''ZigtMT09bGUpdGhyb3cgbmV3IEVycm9yKCJCYWQgRGF0YSBWYWxpZGF0aW9uIHR5cGUgIitTLm9wKyIgZm9yICIrUy50KX1MLndyaXRlX3NoaWZ0KDEsMHxHKSxMLndyaXRlX3NoaWZ0KDEsMSksTC53cml0ZV9zaGlmdCgxLDEyfGxlPDw0KSxMLndyaXRlX3NoaWZ0KDEsMCksay5wdXNoKGZ1''@;'; put 'put ''bmN0aW9uIGt5KFMpe3ZhciBMPVMuc3BsaXQoL1xzKixccyovKSxrPVZ0KDQpO2sud3JpdGVfc2hpZnQoNCxMLmxlbmd0aCk7dmFyIEc9W2tdO3JldHVybiBMLmZvckVhY2goZnVuY3Rpb24oUSl7Ry5wdXNoKGQzKHRvKFEpKSl9KSxqKEcpfSgic3RyaW5nIj09dHlwZW9mIFMucmVmP1MucmVm''@;'; put 'put ''Om9vKFMucmVmKSkpO3ZhciBtZT1WdCgxNik7bWUud3JpdGVfc2hpZnQoNCw0Mjk0OTY3Mjk1KSxtZS53cml0ZV9zaGlmdCg0LDQyOTQ5NjcyOTUpLG1lLndyaXRlX3NoaWZ0KDQsNDI5NDk2NzI5NSksbWUud3JpdGVfc2hpZnQoNCw0Mjk0OTY3Mjk1KSxrLnB1c2gobWUpO3ZhciBwZT1WdCg4''@;'; put 'put ''KTtwZS53cml0ZV9zaGlmdCg0LDApLHBlLndyaXRlX3NoaWZ0KDQsMCk7dmFyIGJlPTE7c3dpdGNoKFMudCl7Y2FzZSJBbnkiOmsucHVzaChwZSksay5wdXNoKHBlKTticmVhaztjYXNlIkRlY2ltYWwiOmNhc2UiTGVuZ3RoIjpjYXNlIldob2xlIjppZihudWxsIT1TLnZ8fG51bGwhPVMuZilr''@;'; put 'put ''LnB1c2goIm51bWJlciI9PXR5cGVvZiBTLnY/bngoUy52KTpMYihudWxsPT1TLnY/Uy5mOlMudikpO2Vsc2V7aWYobnVsbD09Uy5taW58fG51bGw9PVMubWF4KXRocm93IlVuc3VwcG9ydGVkIERhdGEgVmFsaWRhdGlvbjogYHZgIG9yIGBtaW5gK2BtYXhgIHJlcXVpcmVkIGZvciBUeXBlICIr''@;'; put 'put ''Uy50O2sucHVzaCgibnVtYmVyIj09dHlwZW9mIFMubWluP254KFMubWluKTpMYihTLm1pbikpLGsucHVzaCgibnVtYmVyIj09dHlwZW9mIFMubWF4P254KFMubWF4KTpMYihTLm1heCkpLGJlPTJ9YnJlYWs7Y2FzZSJMaXN0IjppZihudWxsIT1TLmwpe2sucHVzaChSYihTLmwuam9pbigiLCIp''@;'; put 'put ''KSk7YnJlYWt9Y2FzZSJDdXN0b20iOmlmKCJudWxsIiE9Uy5mKXtrLnB1c2goTGIoUy5mKSk7YnJlYWt9dGhyb3ciVW5zdXBwb3J0ZWQgRGF0YSBWYWxpZGF0aW9uOiBgZmAiKygiTGlzdCI9PVMudD8iIG9yIGBsYCI6IiIpKyIgcmVxdWlyZWQgZm9yIFR5cGUgIitTLnQ7ZGVmYXVsdDp0aHJv''@;'; put 'put ''dyJYTFNCIGRvZXMgbm90IHN1cHBvcnQgRGF0YSBWYWxpZGF0aW9uIHR5cGUgIitTLnR9cmV0dXJuIDE9PWJlJiZrLnB1c2gocGUpLGooayl9ZnVuY3Rpb24gdVcoUyxMLGssRyxRLGxlLG1lKXtpZih2b2lkIDA9PT1MLnYmJm51bGw9PUwuc3x8InoiPT09TC50JiYhUS5zaGVldFN0dWJzKXJl''@;'; put 'put ''dHVybiExO3ZhciBwZT0iIjtzd2l0Y2goTC50KXtjYXNlImIiOnBlPUwudj8iMSI6IjAiO2JyZWFrO2Nhc2UiZCI6KEw9dW4oTCkpLno9TC56fHxBLl90YWJsZVsxNF0sTC52PVFlKEllKEwudikpLEwudD0ibiI7YnJlYWs7Y2FzZSJuIjpjYXNlImUiOnBlPSIiK0wudjticmVhaztkZWZhdWx0''@;'; put 'put ''OnBlPUwudn12YXIgYmU9e3I6ayxjOkd9O3N3aXRjaChiZS5zPV8wKFEuY2VsbFhmcyxRLmNlbGxTdHlsZVhmcyxMLFEpLEwubCYmbGVbIiFsaW5rcyJdLnB1c2goW0dpKGJlKSxMLmxdKSxMLmMmJmxlWyIhY29tbWVudHMiXS5wdXNoKFtHaShiZSksTC5jXSksTC50KXtjYXNlInMiOmNhc2Ui''@;'; put 'put ''c3RyIjppZihRLmJvb2tTU1Qpe2lmKHBlPXNMKFEuU3RyaW5ncyxMLnYsTC5SP0wucj1XOChMLlIpOm51bGwsUS5yZXZTdHJpbmdzKSxMLlIpZm9yKHZhciBOZT0wO05lPEwuUi5sZW5ndGg7KytOZSlMLlJbTmVdLnMmJl8wKFEuY2VsbFhmcyxRLmNlbGxTdHlsZVhmcyx7dDoibiIsdjowLHM6''@;'; put 'put ''TC5SW05lXS5zfSxRKTtiZS50PSJzIixiZS52PXBlLG1lP01uKFMsIkJydFNob3J0SXNzdCIsZnVuY3Rpb24gT0woUyxMLGspe3JldHVybiBudWxsPT1rJiYoaz1WdCg4KSksUDAoTCxrKSxrLndyaXRlX3NoaWZ0KDQsTC52KSxrfSgwLGJlKSk6TW4oUywiQnJ0Q2VsbElzc3QiLGZ1bmN0aW9u''@;'; put 'put ''IEJvZShTLEwsayl7cmV0dXJuIG51bGw9PWsmJihrPVZ0KDEyKSksQmgoTCxrKSxrLndyaXRlX3NoaWZ0KDQsTC52KSxrfSgwLGJlKSl9ZWxzZSBiZS50PSJzdHIiLG1lP01uKFMsIkJydFNob3J0U3QiLGZ1bmN0aW9uIEhMKFMsTCxrKXtyZXR1cm4gbnVsbD09ayYmKGs9VnQoOCs0KlMudi5s''@;'; put 'put ''ZW5ndGgpKSxQMChMLGspLFNjKFMudixrKSxrLmxlbmd0aD5rLmw/ay5zbGljZSgwLGsubCk6a30oTCxiZSkpOk1uKFMsIkJydENlbGxTdCIsZnVuY3Rpb24gWFooUyxMLGspe3JldHVybiBudWxsPT1rJiYoaz1WdCgxMis0KlMudi5sZW5ndGgpKSxCaChMLGspLFNjKFMudixrKSxrLmxlbmd0''@;'; put 'put ''aD5rLmw/ay5zbGljZSgwLGsubCk6a30oTCxiZSkpO3JldHVybiEwO2Nhc2UibiI6cmV0dXJuIEwudj09KDB8TC52KSYmTC52Pi0xZTMmJkwudjwxZTM/bWU/TW4oUywiQnJ0U2hvcnRSayIsZnVuY3Rpb24gJFooUyxMLGspe3JldHVybiBudWxsPT1rJiYoaz1WdCg4KSksUDAoTCxrKSxiZyhT''@;'; put 'put ''LnYsayksa30oTCxiZSkpOk1uKFMsIkJydENlbGxSayIsZnVuY3Rpb24gR1ooUyxMLGspe3JldHVybiBudWxsPT1rJiYoaz1WdCgxMikpLEJoKEwsayksYmcoUy52LGspLGt9KEwsYmUpKTptZT9NbihTLCJCcnRTaG9ydFJlYWwiLGZ1bmN0aW9uIFlaKFMsTCxrKXtyZXR1cm4gbnVsbD09ayYm''@;'; put 'put ''KGs9VnQoMTIpKSxQMChMLGspLHQxKFMudixrKSxrfShMLGJlKSk6TW4oUywiQnJ0Q2VsbFJlYWwiLGZ1bmN0aW9uIHd4KFMsTCxrKXtyZXR1cm4gbnVsbD09ayYmKGs9VnQoMTYpKSxCaChMLGspLHQxKFMudixrKSxrfShMLGJlKSksITA7Y2FzZSJiIjpyZXR1cm4gYmUudD0iYiIsbWU/TW4o''@;'; put 'put ''UywiQnJ0U2hvcnRCb29sIixmdW5jdGlvbiBIb2UoUyxMLGspe3JldHVybiBudWxsPT1rJiYoaz1WdCg1KSksUDAoTCxrKSxrLndyaXRlX3NoaWZ0KDEsUy52PzE6MCksa30oTCxiZSkpOk1uKFMsIkJydENlbGxCb29sIixmdW5jdGlvbiBoZihTLEwsayl7cmV0dXJuIG51bGw9PWsmJihrPVZ0''@;'; put 'put ''KDkpKSxCaChMLGspLGsud3JpdGVfc2hpZnQoMSxTLnY/MTowKSxrfShMLGJlKSksITA7Y2FzZSJlIjpyZXR1cm4gYmUudD0iZSIsbWU/TW4oUywiQnJ0U2hvcnRFcnJvciIsZnVuY3Rpb24gUkwoUyxMLGspe3JldHVybiBudWxsPT1rJiYoaz1WdCg4KSksUDAoTCxrKSxrLndyaXRlX3NoaWZ0''@;'; put 'put ''KDEsUy52KSxrLndyaXRlX3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCgxLDApLGt9KEwsYmUpKTpNbihTLCJCcnRDZWxsRXJyb3IiLGZ1bmN0aW9uIE5vZShTLEwsayl7cmV0dXJuIG51bGw9PWsmJihrPVZ0KDkpKSxCaChMLGspLGsud3JpdGVfc2hpZnQoMSxTLnYpLGt9KEwsYmUpKSwhMH1y''@;'; put 'put ''ZXR1cm4gbWU/TW4oUywiQnJ0U2hvcnRCbGFuayIsZnVuY3Rpb24gREwoUyxMLGspe3JldHVybiBudWxsPT1rJiYoaz1WdCg0KSksUDAoTCxrKX0oMCxiZSkpOk1uKFMsIkJydENlbGxCbGFuayIsZnVuY3Rpb24gX3goUyxMLGspe3JldHVybiBudWxsPT1rJiYoaz1WdCg4KSksQmgoTCxrKX0o''@;'; put 'put ''MCxiZSkpLCEwfWZ1bmN0aW9uIGZXKFMsTCxrLEcpe3ZhciBRPW1yKCksbGU9ay5TaGVldE5hbWVzW1NdLG1lPWsuU2hlZXRzW2xlXXx8e30scGU9bGU7dHJ5e2smJmsuV29ya2Jvb2smJihwZT1rLldvcmtib29rLlNoZWV0c1tTXS5Db2RlTmFtZXx8cGUpfWNhdGNoe312YXIgYmU9dG8obWVb''@;'; put 'put ''IiFyZWYiXXx8IkExIik7aWYoYmUuZS5jPjE2MzgzfHxiZS5lLnI+MTA0ODU3NSl7aWYoTC5XVEYpdGhyb3cgbmV3IEVycm9yKCJSYW5nZSAiKyhtZVsiIXJlZiJdfHwiQTEiKSsiIGV4Y2VlZHMgZm9ybWF0IGxpbWl0IEExOlhGRDEwNDg1NzYiKTtiZS5lLmM9TWF0aC5taW4oYmUuZS5jLDE2''@;'; put 'put ''MzgzKSxiZS5lLnI9TWF0aC5taW4oYmUuZS5jLDEwNDg1NzUpfXJldHVybiBtZVsiIWxpbmtzIl09W10sbWVbIiFjb21tZW50cyJdPVtdLE1uKFEsIkJydEJlZ2luU2hlZXQiKSwoay52YmFyYXd8fG1lWyIhb3V0bGluZSJdKSYmTW4oUSwiQnJ0V3NQcm9wIixmdW5jdGlvbiBqWihTLEwsayl7''@;'; put 'put ''bnVsbD09ayYmKGs9VnQoODQrNCpTLmxlbmd0aCkpO3ZhciBHPTE5MjtMJiYoTC5hYm92ZSYmKEcmPS02NSksTC5sZWZ0JiYoRyY9LTEyOSkpLGsud3JpdGVfc2hpZnQoMSxHKTtmb3IodmFyIFE9MTtRPDM7KytRKWsud3JpdGVfc2hpZnQoMSwwKTtyZXR1cm4gX2coe2F1dG86MX0sayksay53''@;'; put 'put ''cml0ZV9zaGlmdCgtNCwtMSksay53cml0ZV9zaGlmdCgtNCwtMSksVHkoUyxrKSxrLnNsaWNlKDAsay5sKX0ocGUsbWVbIiFvdXRsaW5lIl0pKSxNbihRLCJCcnRXc0RpbSIsTlooYmUpKSxmdW5jdGlvbiBSeChTLEwsayl7TW4oUywiQnJ0QmVnaW5Xc1ZpZXdzIiksTW4oUywiQnJ0QmVnaW5X''@;'; put 'put ''c1ZpZXciLGZ1bmN0aW9uIGlXKFMsTCxrKXtudWxsPT1rJiYoaz1WdCgzMCkpO3ZhciBHPTkyNDtyZXR1cm4oKChMfHx7fSkuVmlld3N8fFtdKVswXXx8e30pLlJUTCYmKEd8PTMyKSxCdChTWyIhZ3JpZGxpbmVzIl0pJiYoRyY9LTUpLEJ0KCgoKEx8fHt9KS5WaWV3c3x8W10pWzBdfHx7fSku''@;'; put 'put ''Z3JpZCkmJihHJj0tNSksay53cml0ZV9zaGlmdCgyLEcpLGsud3JpdGVfc2hpZnQoNCwwKSxrLndyaXRlX3NoaWZ0KDQsMCksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoMSwwKSxrLndyaXRlX3NoaWZ0KDEsMCksay53cml0ZV9zaGlmdCgyLDApLGsud3JpdGVfc2hpZnQoMiwx''@;'; put 'put ''MDApLGsud3JpdGVfc2hpZnQoMiwwKSxrLndyaXRlX3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCgyLDApLGsud3JpdGVfc2hpZnQoNCwwKSxrfShMLGspKSxMWyIhZnJlZXplIl0mJk1uKFMsIkJydFBhbmUiLGZ1bmN0aW9uIEU3KFMpe3ZhciBMPUFvKFNbIiFmcmVlemUiXSksaz1WdCgyOSk7''@;'; put 'put ''cmV0dXJuIGsud3JpdGVfc2hpZnQoOCxMLmMsImYiKSxrLndyaXRlX3NoaWZ0KDgsTC5yLCJmIiksay53cml0ZV9zaGlmdCg0LEwuciksay53cml0ZV9zaGlmdCg0LEwuYyksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoMSwzKSxrfShMKSksTFsiIXNlbCJdJiZNbihTLCJCcnRT''@;'; put 'put ''ZWwiLGZ1bmN0aW9uIGZlKFMsTCl7dmFyIGs9VnQoMzYpLEc9Uy5jZWxsO2lmKCFHKXtpZighUy5yYW5nZSl0aHJvdyBuZXcgRXJyb3IoIk11c3Qgc3BlY2lmeSBhIHNlbGVjdGlvbiBjZWxsIG9yIHJhbmdlIik7Rz1HaShWbyhTLnJhbmdlLnJlcGxhY2UoL1xzLiokLywiIikpLnMpfXZhciBR''@;'; put 'put ''PSJzdHJpbmciPT10eXBlb2YgRz9BbyhHKTpHO2lmKEwpe3ZhciBsZT0ic3RyaW5nIj09dHlwZW9mIEw/QW8oTCk6TDtrLndyaXRlX3NoaWZ0KDQsUS5yPj1sZS5yJiZRLmM+PWxlLmM/MDpRLnI+PWxlLnImJlEuYzxsZS5jPzI6US5yPGxlLnImJlEuYz49bGUuYz8xOjMpfWVsc2Ugay53cml0''@;'; put 'put ''ZV9zaGlmdCg0LDMpO3JldHVybiBrLndyaXRlX3NoaWZ0KDQsUS5yKSxrLndyaXRlX3NoaWZ0KDQsUS5jKSxrLndyaXRlX3NoaWZ0KDQsMCksay53cml0ZV9zaGlmdCg0LDEpLGsud3JpdGVfc2hpZnQoNCxRLnIpLGsud3JpdGVfc2hpZnQoNCxRLnIpLGsud3JpdGVfc2hpZnQoNCxRLmMpLGsu''@;'; put 'put ''d3JpdGVfc2hpZnQoNCxRLmMpLGt9KExbIiFzZWwiXSxMWyIhZnJlZXplIl0pKSxNbihTLCJCcnRFbmRXc1ZpZXciKSxNbihTLCJCcnRFbmRXc1ZpZXdzIil9KFEsbWUsay5Xb3JrYm9vayksZnVuY3Rpb24gRHgoUyxMKXshTHx8IUxbIiFjb2xzIl18fChNbihTLCJCcnRCZWdpbkNvbEluZm9z''@;'; put 'put ''IiksTFsiIWNvbHMiXS5mb3JFYWNoKGZ1bmN0aW9uKGssRyl7ayYmTW4oUywiQnJ0Q29sSW5mbyIsZnVuY3Rpb24geHgoUyxMLGspe251bGw9PWsmJihrPVZ0KDE4KSk7dmFyIEc9aXgoUyxMKTtrLndyaXRlX3NoaWZ0KC00LFMpLGsud3JpdGVfc2hpZnQoLTQsUyksay53cml0ZV9zaGlmdCg0''@;'; put 'put ''LDI1NiooRy53aWR0aHx8MTApKSxrLndyaXRlX3NoaWZ0KDQsMCk7dmFyIFE9MDtyZXR1cm4gTC5oaWRkZW4mJihRfD0xKSwibnVtYmVyIj09dHlwZW9mIEcud2lkdGgmJihRfD0yKSxMLmxldmVsJiYoUXw9TC5sZXZlbDw8OCksay53cml0ZV9zaGlmdCgyLFEpLGt9KEcsaykpfSksTW4oUywi''@;'; put 'put ''QnJ0RW5kQ29sSW5mb3MiKSl9KFEsbWUpLGZ1bmN0aW9uIGt4KFMsTCxrLEcpe3ZhciBRPXRvKExbIiFyZWYiXXx8IkExIiksbWU9IiIscGU9W107TW4oUywiQnJ0QmVnaW5TaGVldERhdGEiKTt2YXIgYmU9QXJyYXkuaXNBcnJheShMKSxOZT1RLmUucjtMWyIhcm93cyJdJiYoTmU9TWF0aC5t''@;'; put 'put ''YXgoUS5lLnIsTFsiIXJvd3MiXS5sZW5ndGgtMSkpO2Zvcih2YXIgQmU9US5zLnI7QmU8PU5lOysrQmUpe21lPUJpKEJlKSxVYihTLEwsUSxCZSk7dmFyIEdlPSExO2lmKEJlPD1RLmUucilmb3IodmFyIGV0PVEucy5jO2V0PD1RLmUuYzsrK2V0KXtCZT09PVEucy5yJiYocGVbZXRdPUZvKGV0''@;'; put 'put ''KSk7dmFyIGN0PWJlPyhMW0JlXXx8W10pW2V0XTpMW3BlW2V0XSttZV07R2U9ISFjdCYmdVcoUyxjdCxCZSxldCxHLEwsR2UpfX1NbihTLCJCcnRFbmRTaGVldERhdGEiKX0oUSxtZSwwLEwpLGZ1bmN0aW9uIGhXKFMsTCl7TFsiIXByb3RlY3QiXSYmTW4oUywiQnJ0U2hlZXRQcm90ZWN0aW9u''@;'; put 'put ''IixmdW5jdGlvbiBhVyhTLEwpe3JldHVybiBudWxsPT1MJiYoTD1WdCg2NikpLEwud3JpdGVfc2hpZnQoMixTLnBhc3N3b3JkP3JmKFMucGFzc3dvcmQpOjApLEwud3JpdGVfc2hpZnQoNCwxKSxbWyJvYmplY3RzIiwhMV0sWyJzY2VuYXJpb3MiLCExXSxbImZvcm1hdENlbGxzIiwhMF0sWyJm''@;'; put 'put ''b3JtYXRDb2x1bW5zIiwhMF0sWyJmb3JtYXRSb3dzIiwhMF0sWyJpbnNlcnRDb2x1bW5zIiwhMF0sWyJpbnNlcnRSb3dzIiwhMF0sWyJpbnNlcnRIeXBlcmxpbmtzIiwhMF0sWyJkZWxldGVDb2x1bW5zIiwhMF0sWyJkZWxldGVSb3dzIiwhMF0sWyJzZWxlY3RMb2NrZWRDZWxscyIsITFdLFsi''@;'; put 'put ''c29ydCIsITBdLFsiYXV0b0ZpbHRlciIsITBdLFsicGl2b3RUYWJsZXMiLCEwXSxbInNlbGVjdFVubG9ja2VkQ2VsbHMiLCExXV0uZm9yRWFjaChmdW5jdGlvbihrKXtMLndyaXRlX3NoaWZ0KDQsa1sxXT9udWxsPT1TW2tbMF1dfHxTW2tbMF1dPzA6MTpudWxsIT1TW2tbMF1dJiZTW2tbMF1d''@;'; put 'put ''PzA6MSl9KSxMfShMWyIhcHJvdGVjdCJdKSl9KFEsbWUpLGZ1bmN0aW9uIEl4KFMsTCxrLEcpe2lmKExbIiFhdXRvZmlsdGVyIl0pe3ZhciBRPUxbIiFhdXRvZmlsdGVyIl0sbGU9InN0cmluZyI9PXR5cGVvZiBRLnJlZj9RLnJlZjpvbyhRLnJlZik7ay5Xb3JrYm9va3x8KGsuV29ya2Jvb2s9''@;'; put 'put ''e1NoZWV0czpbXX0pLGsuV29ya2Jvb2suTmFtZXN8fChrLldvcmtib29rLk5hbWVzPVtdKTt2YXIgbWU9ay5Xb3JrYm9vay5OYW1lcyxwZT1WbyhsZSk7cGUucy5yPT1wZS5lLnImJihwZS5lLnI9Vm8oTFsiIXJlZiJdKS5lLnIsbGU9b28ocGUpKTtmb3IodmFyIGJlPTA7YmU8bWUubGVuZ3Ro''@;'; put 'put ''OysrYmUpe3ZhciBOZT1tZVtiZV07aWYoIl94bG5tLl9GaWx0ZXJEYXRhYmFzZSI9PU5lLk5hbWUmJk5lLlNoZWV0PT1HKXtOZS5SZWY9IiciK2suU2hlZXROYW1lc1tHXSsiJyEiK2xlO2JyZWFrfX1iZT09bWUubGVuZ3RoJiZtZS5wdXNoKHtOYW1lOiJfeGxubS5fRmlsdGVyRGF0YWJhc2Ui''@;'; put 'put ''LFNoZWV0OkcsUmVmOiInIitrLlNoZWV0TmFtZXNbR10rIichIitsZX0pLE1uKFMsIkJydEJlZ2luQUZpbHRlciIsZDModG8obGUpKSksTW4oUywiQnJ0RW5kQUZpbHRlciIpfX0oUSxtZSxrLFMpLGZ1bmN0aW9uIGZmKFMsTCl7IUx8fCFMWyIhbWVyZ2VzIl18fChNbihTLCJCcnRCZWdpbk1l''@;'; put 'put ''cmdlQ2VsbHMiLGZ1bmN0aW9uIE5MKFMsTCl7cmV0dXJuIG51bGw9PUwmJihMPVZ0KDQpKSxMLndyaXRlX3NoaWZ0KDQsUyksTH0oTFsiIW1lcmdlcyJdLmxlbmd0aCkpLExbIiFtZXJnZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKGspe01uKFMsIkJydE1lcmdlQ2VsbCIsdFcoaykpfSksTW4oUywi''@;'; put 'put ''QnJ0RW5kTWVyZ2VDZWxscyIpKX0oUSxtZSksZnVuY3Rpb24gR2IoUyxMKXtpZihMKXtNbihTLCJCcnRCZWdpbkRWYWxzIixmdW5jdGlvbiBvVyhTLEwpe251bGw9PUwmJihMPVZ0KDE4KSksTC53cml0ZV9zaGlmdCgyLDApLEwud3JpdGVfc2hpZnQoNCwwKSxMLndyaXRlX3NoaWZ0KDQsMCks''@;'; put 'put ''TC53cml0ZV9zaGlmdCg0LDApO2Zvcih2YXIgaz0wLEc9MDtHPFMubGVuZ3RoOysrRykoKFNbR118fHt9KS5yZWZ8fHt9KS5zJiZTW0ddLnJlZi5zLmM8MHx8KytrO3JldHVybiBMLndyaXRlX3NoaWZ0KDQsayksTH0oTCkpO2Zvcih2YXIgaz0wO2s8TC5sZW5ndGg7KytrKSgoTFtrXXx8e30p''@;'; put 'put ''LnJlZnx8e30pLnMmJkxba10ucmVmLnMuYzwwfHxNbihTLCJCcnREVmFsIixsVyhMW2tdKSk7TW4oUywiQnJ0RW5kRFZhbHMiKX19KFEsbWVbIiF2YWxpZGF0aW9ucyJdKSxmdW5jdGlvbiB6b2UoUyxMLGspe0xbIiFsaW5rcyJdLmZvckVhY2goZnVuY3Rpb24oRyl7aWYoR1sxXS5UYXJnZXQp''@;'; put 'put ''e3ZhciBRPVRzKGssLTEsR1sxXS5UYXJnZXQucmVwbGFjZSgvIy4qJC8sIiIpLEthLkhMSU5LKTtNbihTLCJCcnRITGluayIsZnVuY3Rpb24gblcoUyxMKXt2YXIgaz1WdCg1MCs0KihTWzFdLlRhcmdldC5sZW5ndGgrKFNbMV0uVG9vbHRpcHx8IiIpLmxlbmd0aCkpO2QzKHtzOkFvKFNbMF0p''@;'; put 'put ''LGU6QW8oU1swXSl9LGspLG5tKCJySWQiK0wsayk7dmFyIEc9U1sxXS5UYXJnZXQuaW5kZXhPZigiIyIpO3JldHVybiBTYygoLTE9PUc/IiI6U1sxXS5UYXJnZXQuc2xpY2UoRysxKSl8fCIiLGspLFNjKFNbMV0uVG9vbHRpcHx8IiIsayksU2MoIiIsayksay5zbGljZSgwLGsubCl9KEcsUSkp''@;'; put 'put ''fX0pLGRlbGV0ZSBMWyIhbGlua3MiXX0oUSxtZSxHKSxtZVsiIW1hcmdpbnMiXSYmTW4oUSwiQnJ0TWFyZ2lucyIsZnVuY3Rpb24gVHgoUyxMKXtyZXR1cm4gbnVsbD09TCYmKEw9VnQoNDgpKSxrbShTKSxFeC5mb3JFYWNoKGZ1bmN0aW9uKGspe3QxKFNba10sTCl9KSxMfShtZVsiIW1hcmdp''@;'; put 'put ''bnMiXSkpLCghTHx8TC5pZ25vcmVFQ3x8bnVsbD09TC5pZ25vcmVFQykmJmZ1bmN0aW9uIGRXKFMsTCl7IUx8fCFMWyIhcmVmIl18fChNbihTLCJCcnRCZWdpbkNlbGxJZ25vcmVFQ3MiKSxNbihTLCJCcnRDZWxsSWdub3JlRUMiLGZ1bmN0aW9uIEJMKFMpe3ZhciBMPVZ0KDI0KTtyZXR1cm4g''@;'; put 'put ''TC53cml0ZV9zaGlmdCg0LDQpLEwud3JpdGVfc2hpZnQoNCwxKSxkMyhTLEwpLEx9KHRvKExbIiFyZWYiXSkpKSxNbihTLCJCcnRFbmRDZWxsSWdub3JlRUNzIikpfShRLG1lKSxmdW5jdGlvbiB6TChTLEwsayxHKXtpZihMWyIhY29tbWVudHMiXS5sZW5ndGg+MCl7dmFyIFE9VHMoRywtMSwi''@;'; put 'put ''Li4vZHJhd2luZ3Mvdm1sRHJhd2luZyIrKGsrMSkrIi52bWwiLEthLlZNTCk7TW4oUywiQnJ0TGVnYWN5RHJhd2luZyIsbm0oInJJZCIrUSkpLExbIiFsZWdhY3kiXT1RfX0oUSxtZSxTLEcpLE1uKFEsIkJydEVuZFNoZWV0IiksUS5lbmQoKX1mdW5jdGlvbiBQZyhTKXt2YXIgRyxMPVtdLGs9''@;'; put 'put ''Uy5tYXRjaCgvXjxjOm51bUNhY2hlPi8pOyhTLm1hdGNoKC88YzpwdCBpZHg9IihcZCopIj4oLio/KTxcL2M6cHQ+L2dtKXx8W10pLmZvckVhY2goZnVuY3Rpb24obGUpe3ZhciBtZT1sZS5tYXRjaCgvPGM6cHQgaWR4PSIoXGQqPykiPjxjOnY+KC4qKTxcL2M6dj48XC9jOnB0Pi8pO21lJiYo''@;'; put 'put ''TFsrbWVbMV1dPWs/K21lWzJdOm1lWzJdKX0pO3ZhciBRPWVpKChTLm1hdGNoKC88Yzpmb3JtYXRDb2RlPihbXHNcU10qPyk8XC9jOmZvcm1hdENvZGU+Lyl8fFsiIiwiR2VuZXJhbCJdKVsxXSk7cmV0dXJuKFMubWF0Y2goLzxjOmY+KC4qPyk8XC9jOmY+L2dtKXx8W10pLmZvckVhY2goZnVu''@;'; put 'put ''Y3Rpb24obGUpe0c9bGUucmVwbGFjZSgvPC4qPz4vZywiIil9KSxbTCxRLEddfUthLkNIQVJUPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2NoYXJ0IixLYS5DSEFSVEVYPSJodHRwOi8vc2NoZW1hcy5taWNyb3Nv''@;'; put 'put ''ZnQuY29tL29mZmljZS8yMDE0L3JlbGF0aW9uc2hpcHMvY2hhcnRFeCI7dmFyIE94PS88KD86XHcrOik/Y2hhcnQ+KFtcc1xTXSo/KTxcLyg/Olx3KzopP2NoYXJ0Pi8scFc9LzwoPzpcdys6KT9wbG90QXJlYT4oW1xzXFNdKj8pPFwvKD86XHcrOik/cGxvdEFyZWE+LyxKcD0vPCg/Olx3Kzop''@;'; put 'put ''P2xlZ2VuZD4oW1xzXFNdKj8pPFwvKD86XHcrOik/bGVnZW5kPi8sUXA9LzwoPzpcdys6KT90aXRsZT4oW1xzXFNdKj8pPFwvKD86XHcrOik/dGl0bGU+LztmdW5jdGlvbiBGbShTLEwsayxHLFEsbGUsbWUscGUpe3ZhciBiZT1sZXx8eyIhdHlwZSI6ImNoYXJ0In07aWYoIVMpcmV0dXJuIGxl''@;'; put 'put ''O21lJiZtZS5BbmNob3ImJihiZVsiIXBvcyJdPXM3KG1lLkFuY2hvcixwZSksYmVbIiFwb3NUeXBlIl09bWUuQW5jaG9yLnR5cGUucmVwbGFjZSgvQW5jaG9yLywiIiksYmVbIiFhYnNwb3MiXT1zNyhtZS5BbmNob3IscGUpLGJlWyIhcmVscG9zIl09ZmIobWUuQW5jaG9yLHBlKSksYmVbIiFw''@;'; put 'put ''bG90Il09W107dmFyIE5lPSIiLEJlPSIiLEdlPVMubWF0Y2goT3gpO0dlPyhOZT1TLnNsaWNlKDAsR2UuaW5kZXgpLEJlPVMuc2xpY2UoR2UuaW5kZXgrR2VbMF0ubGVuZ3RoKSk6TmU9QmU9Uzt2YXIgZXQ9W10sY3Q9TmUubWF0Y2goLzxjOmxhbmcuKj8+Lyl8fFMubWF0Y2goLzxjOmxhbmcu''@;'; put 'put ''Kj8+Lyl8fEJlLm1hdGNoKC88YzpsYW5nLio/Pi8pO3JldHVybiBjdCYmKGJlWyIhbGFuZyJdPSh2cihjdFswXSl8fHt9KS52YWx8fCJlbi1VUyIpLEdlJiYoKGV0PUdlWzFdLm1hdGNoKFFwKSkmJmZ1bmN0aW9uIEx4KFMsTCl7dmFyIGs9IiI7Uy5tYXRjaCgvPGM6cmljaD4vKSYmUy5yZXBs''@;'; put 'put ''YWNlKC88YTp0PihbXHNcU10qPyk8XC9hOnQ+L2csZnVuY3Rpb24oRyxRKXtrKz1RfSksTFsiIXRpdGxlIl09a3x8IkNoYXJ0IFRpdGxlIn0oZXRbMV0sYmUpLGZ1bmN0aW9uIFpMKFMsTCl7aWYoUyl7dmFyIGs9MCxHPTAsUT0iQSIsbGU9e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX07''@;'; put 'put ''Uy5yZXBsYWNlKFVMLGZ1bmN0aW9uKG1lLHBlKXt2YXIgYmU9e3Q6cGUsYzprLHc6MCxzZXI6W119LE5lPVtdLEJlPShtZS5tYXRjaCgvPGM6c2VyLyl8fFtdKS5pbmRleCxHZT1CZT9tZS5zbGljZSgwLEJlKTptZTsic2NhdHRlciI9PXBlJiYoTmU9bWUubWF0Y2goLzxjOnNjYXR0ZXJTdHls''@;'; put 'put ''ZShbXlwvPl0qKVwvPi9tKSkmJnZyKE5lWzBdKSwiYmFyIj09cGUmJihOZT1tZS5tYXRjaCgvPGM6YmFyRGlyKFteXC8+XSopXC8+L20pKSYmKGJlLmJhckRpcj0iYmFyIj09dnIoTmVbMF0pLnZhbD8iaCI6InYiKSwoTmU9R2UubWF0Y2goLzxjOmdyb3VwaW5nKFteXC8+XSopXC8+L20pKSYm''@;'; put 'put ''KGJlLmdyb3VwaW5nPXZyKE5lWzBdKS52YWx8fCJzdGFuZGFyZCIpLChtZS5tYXRjaChnVyl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGN0KXt2YXIgeHQ9W10sb3Q9e30sYnQ9W107aWYoY3QubWF0Y2goLzxjOnR4Pi8pKXt2YXIgRnQ9UGcoKGN0Lm1hdGNoKC88Yzp0eD4oW1xzXFNdKj8pPFwv''@;'; put 'put ''Yzp0eD4vKXx8W10pWzFdfHwiIil8fFtdO0Z0WzBdJiZGdFswXVswXSYmKG90Lm5hbWU9RnRbMF1bMF0pLEZ0WzJdJiYob3QubmFtZXJlZj1GdFsyXSl9WyJ4VmFsIiwieVZhbCIsImNhdCIsInZhbCIsImJ1YmJsZVNpemUiXS5mb3JFYWNoKGZ1bmN0aW9uKGt0KXt2YXIgSnQsTHQ9Y3QubWF0''@;'; put 'put ''Y2gobmV3IFJlZ0V4cCgiPGM6IitrdCsiPltcXHNcXFNdKj88XFwvYzoiK2t0KyI+IiwiZ20iKSk7THQmJigoTHRbMF0ubWF0Y2goLzxjOmY+KC4qPyk8XC9jOmY+L2dtKXx8W10pLmZvckVhY2goZnVuY3Rpb24oVG4pe0p0PVRuLnJlcGxhY2UoLzwuKj8+L2csIiIpfSksKEx0WzBdLm1hdGNo''@;'; put 'put ''KC88YzooPzpcdyopQ2FjaGU+W1xzXFNdKj88XC9jOig/Olx3KilDYWNoZT4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihUbil7dmFyIHNyPVBnKFRuKTtsZS5zLnI9bGUucy5jPTAsbGUuZS5jPWssUT1GbyhrKSxzclswXS5mb3JFYWNoKGZ1bmN0aW9uKENuLGxyKXtMW1ErQmkobHIpXT17''@;'; put 'put ''dDoibnVtYmVyIj09dHlwZW9mIENuPyJuIjoicyIsdjpDbix6OnNyWzFdfSxHPWxyfSksbGUuZS5yPEcmJihsZS5lLnI9RyksKytrLGJlLncrKyx4dC5wdXNoKGt0KSwoc3JbMl18fEp0KSYmYnQucHVzaChzclsyXXx8SnQpLCJ2YWwiPT1rdCYmKG90Lno9c3JbMV18fCJHZW5lcmFsIil9KSl9''@;'; put 'put ''KSwoTmU9bWUubWF0Y2goLzxjOnNtb290aChbXlwvPl0qKVwvPi9tKSkmJihvdC5zbW9vdGg9bnVsbD09dnIoTmVbMF0pLnZhbHx8RnIodnIoTmVbMF0pLnZhbCkpLG90LmNvbHM9eHQsb3QucmFuZ2VzPWJ0LGJlLnNlci5wdXNoKG90KX0pLCJkb3VnaG51dCI9PXBlJiYoTmU9bWUubWF0Y2go''@;'; put 'put ''LzxjOmhvbGVTaXplKFteXC8+XSopXC8+L20pKSYmKGJlLmhvbGU9KHZyKE5lWzBdKS52YWx8fDEwKS8xMDApLExbIiFwbG90Il0ucHVzaChiZSl9KSxrPjAmJihMWyIhcmVmIl09b28obGUpKX19KChHZVsxXS5tYXRjaChwVyl8fFtdKVsxXSxiZSksbnVsbCE9KGV0PUdlWzFdLm1hdGNoKEpw''@;'; put 'put ''KSkmJmZ1bmN0aW9uIEZnKFMsTCl7dmFyIGs7TFsiIWxlZ2VuZCJdPXtwb3M6InIifSwoaz1TLm1hdGNoKC88YzpsZWdlbmRQb3MoW15cLz5dKilcLz4vbSkpJiYoTFsiIWxlZ2VuZCJdLnBvcz12cihrWzBdKS52YWx8fCJyIil9KGV0WzBdLGJlKSksYmV9dmFyIFVMPS88YzooKD86YXJlYXxs''@;'; put 'put ''aW5lfHN0b2NrfHJhZGFyfHNjYXR0ZXJ8cGllfGRvdWdobnV0fGJhcnxvZlBpZXxzdXJmYWNlfGJ1YmJsZSkoPzozRCk/KUNoYXJ0W14+XSo+KFtcc1xTXSo/KTxcL2M6KD86YXJlYXxsaW5lfHN0b2NrfHJhZGFyfHNjYXR0ZXJ8cGllfGRvdWdobnV0fGJhcnxvZlBpZXxzdXJmYWNlfGJ1YmJs''@;'; put 'put ''ZSkoPzozRCk/Q2hhcnQ+L2dtLGdXPS88YzpzZXI+KFtcc1xTXSo/KTxcL2M6c2VyPi9nbTtLYS5DUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jaGFydHNoZWV0Ijt2YXIgbVc9anIoImNoYXJ0c2hlZXQiLG51''@;'; put 'put ''bGwse3htbG5zOkJhLm1haW5bMF0sInhtbG5zOnIiOkJhLnJ9KTtmdW5jdGlvbiBUNyhTLEwsayxHKXt2YXIgUT1bcGksbVddO3JldHVybiBRLnB1c2goIjxzaGVldFByLz4iKSxRLnB1c2goJzxzaGVldFZpZXdzPjxzaGVldFZpZXcgem9vbVNjYWxlPSIxMDAiIHdvcmtib29rVmlld0lkPSIw''@;'; put 'put ''IiB6b29tVG9GaXQ9IjEiLz48L3NoZWV0Vmlld3M+JyksUVtRLmxlbmd0aF09anIoImRyYXdpbmciLG51bGwseyJyOmlkIjoicklkMSJ9KSxUcyhHLC0xLCIuLi9kcmF3aW5ncy9kcmF3aW5nIisoUysxKSsiLnhtbCIsS2EuRFJBVyksUS5sZW5ndGg+MiYmKFFbUS5sZW5ndGhdPSI8L2NoYXJ0''@;'; put 'put ''c2hlZXQ+IixRWzFdPVFbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFEuam9pbigiIil9ZnVuY3Rpb24geVcoKXt2YXIgUz1tcigpO3JldHVybiBNbihTLCJCcnRCZWdpblNoZWV0IiksTW4oUywiQnJ0RW5kU2hlZXQiKSxTLmVuZCgpfXZhciBBNz1bWyJhbGxvd1JlZnJlc2hRdWVyeSIsITEsImJv''@;'; put 'put ''b2wiXSxbImF1dG9Db21wcmVzc1BpY3R1cmVzIiwhMCwiYm9vbCJdLFsiYmFja3VwRmlsZSIsITEsImJvb2wiXSxbImNoZWNrQ29tcGF0aWJpbGl0eSIsITEsImJvb2wiXSxbIkNvZGVOYW1lIiwiIl0sWyJkYXRlMTkwNCIsITEsImJvb2wiXSxbImRlZmF1bHRUaGVtZVZlcnNpb24iLDAsImlu''@;'; put 'put ''dCJdLFsiZmlsdGVyUHJpdmFjeSIsITEsImJvb2wiXSxbImhpZGVQaXZvdEZpZWxkTGlzdCIsITEsImJvb2wiXSxbInByb21wdGVkU29sdXRpb25zIiwhMSwiYm9vbCJdLFsicHVibGlzaEl0ZW1zIiwhMSwiYm9vbCJdLFsicmVmcmVzaEFsbENvbm5lY3Rpb25zIiwhMSwiYm9vbCJdLFsic2F2''@;'; put 'put ''ZUV4dGVybmFsTGlua1ZhbHVlcyIsITAsImJvb2wiXSxbInNob3dCb3JkZXJVbnNlbGVjdGVkVGFibGVzIiwhMCwiYm9vbCJdLFsic2hvd0lua0Fubm90YXRpb24iLCEwLCJib29sIl0sWyJzaG93T2JqZWN0cyIsImFsbCJdLFsic2hvd1Bpdm90Q2hhcnRGaWx0ZXIiLCExLCJib29sIl0sWyJ1''@;'; put 'put ''cGRhdGVMaW5rcyIsInVzZXJTZXQiXV0sV0w9W1siYWN0aXZlVGFiIiwwLCJpbnQiXSxbImF1dG9GaWx0ZXJEYXRlR3JvdXBpbmciLCEwLCJib29sIl0sWyJmaXJzdFNoZWV0IiwwLCJpbnQiXSxbIm1pbmltaXplZCIsITEsImJvb2wiXSxbInNob3dIb3Jpem9udGFsU2Nyb2xsIiwhMCwiYm9v''@;'; put 'put ''bCJdLFsic2hvd1NoZWV0VGFicyIsITAsImJvb2wiXSxbInNob3dWZXJ0aWNhbFNjcm9sbCIsITAsImJvb2wiXSxbInRhYlJhdGlvIiw2MDAsImludCJdLFsidmlzaWJpbGl0eSIsInZpc2libGUiXV0sWUw9W10sR0w9W1siY2FsY0NvbXBsZXRlZCIsInRydWUiXSxbImNhbGNNb2RlIiwiYXV0''@;'; put 'put ''byJdLFsiY2FsY09uU2F2ZSIsInRydWUiXSxbImNvbmN1cnJlbnRDYWxjIiwidHJ1ZSJdLFsiZnVsbENhbGNPbkxvYWQiLCJmYWxzZSJdLFsiZnVsbFByZWNpc2lvbiIsInRydWUiXSxbIml0ZXJhdGUiLCJmYWxzZSJdLFsiaXRlcmF0ZUNvdW50IiwiMTAwIl0sWyJpdGVyYXRlRGVsdGEiLCIw''@;'; put 'put ''LjAwMSJdLFsicmVmTW9kZSIsIkExIl1dO2Z1bmN0aW9uIEh4KFMsTCl7Zm9yKHZhciBrPTA7ayE9Uy5sZW5ndGg7KytrKWZvcih2YXIgRz1TW2tdLFE9MDtRIT1MLmxlbmd0aDsrK1Epe3ZhciBsZT1MW1FdO2lmKG51bGw9PUdbbGVbMF1dKUdbbGVbMF1dPWxlWzFdO2Vsc2Ugc3dpdGNoKGxl''@;'; put 'put ''WzJdKXtjYXNlImJvb2wiOiJzdHJpbmciPT10eXBlb2YgR1tsZVswXV0mJihHW2xlWzBdXT1GcihHW2xlWzBdXSkpO2JyZWFrO2Nhc2UiaW50Ijoic3RyaW5nIj09dHlwZW9mIEdbbGVbMF1dJiYoR1tsZVswXV09cGFyc2VJbnQoR1tsZVswXV0sMTApKX19fWZ1bmN0aW9uICRiKFMsTCl7Zm9y''@;'; put 'put ''KHZhciBrPTA7ayE9TC5sZW5ndGg7KytrKXt2YXIgRz1MW2tdO2lmKG51bGw9PVNbR1swXV0pU1tHWzBdXT1HWzFdO2Vsc2Ugc3dpdGNoKEdbMl0pe2Nhc2UiYm9vbCI6InN0cmluZyI9PXR5cGVvZiBTW0dbMF1dJiYoU1tHWzBdXT1GcihTW0dbMF1dKSk7YnJlYWs7Y2FzZSJpbnQiOiJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgU1tHWzBdXSYmKFNbR1swXV09cGFyc2VJbnQoU1tHWzBdXSwxMCkpfX19ZnVuY3Rpb24gTngoUyl7JGIoUy5XQlByb3BzLEE3KSwkYihTLkNhbGNQcixHTCksSHgoUy5XQlZpZXcsV0wpLEh4KFMuU2hlZXRzLFlMKSxLcC5kYXRlMTkwND1GcihTLldCUHJvcHMuZGF0ZTE5''@;'; put 'put ''MDQpfXZhciBIZz0iXVsqPy9cXCIuc3BsaXQoIiIpO2Z1bmN0aW9uIFZ4KFMsTCl7aWYoUy5sZW5ndGg+MzEpe2lmKEwpcmV0dXJuITE7dGhyb3cgbmV3IEVycm9yKCJTaGVldCBuYW1lcyBjYW5ub3QgZXhjZWVkIDMxIGNoYXJzIil9dmFyIGs9ITA7cmV0dXJuIEhnLmZvckVhY2goZnVuY3Rp''@;'; put 'put ''b24oRyl7aWYoLTEhPVMuaW5kZXhPZihHKSl7aWYoIUwpdGhyb3cgbmV3IEVycm9yKCJTaGVldCBuYW1lIGNhbm5vdCBjb250YWluIDogXFwgLyA/ICogWyBdIik7az0hMX19KSxrfXZhciBYYj0vPFx3Kzp3b3JrYm9vay8sd1c9anIoIndvcmtib29rIixudWxsLHt4bWxuczpCYS5tYWluWzBd''@;'; put 'put ''LCJ4bWxuczpyIjpCYS5yfSk7ZnVuY3Rpb24gSG0oUyxMKXt2YXIgaz1MfHx7fSxHPVtwaV07R1tHLmxlbmd0aF09d1c7dmFyIFE9Uy5Xb3JrYm9vayYmKFMuV29ya2Jvb2suTmFtZXN8fFtdKS5sZW5ndGg+MDtTLldvcmtib29rJiZTLldvcmtib29rLk1vZGlmeSYmKEdbRy5sZW5ndGhdPWZ1''@;'; put 'put ''bmN0aW9uICRMKFMpe3ZhciBMPXt9O3JldHVybiBTLndhcm4mJihMLnJlYWRPbmx5UmVjb21tZW5kZWQ9MSksTC51c2VyTmFtZT1TLnVzZXJ8fCJTaGVldCBKUyIsUy5lbmNyeXB0aW9uJiYoUy5lbmNyeXB0aW9uLmFsZ28mJihMLmFsZ29yaXRobU5hbWU9Uy5lbmNyeXB0aW9uLmFsZ28pLFMu''@;'; put 'put ''ZW5jcnlwdGlvbi5oYXNoJiYoTC5oYXNoVmFsdWU9Uy5lbmNyeXB0aW9uLmhhc2gpLFMuZW5jcnlwdGlvbi5zYWx0JiYoTC5zYWx0VmFsdWU9Uy5lbmNyeXB0aW9uLnNhbHQpLFMuZW5jcnlwdGlvbi5zcGluJiYoTC5zcGluQ291bnQ9Uy5lbmNyeXB0aW9uLnNwaW4pKSxqcigiZmlsZVNoYXJp''@;'; put 'put ''bmciLG51bGwsTCl9KFMuV29ya2Jvb2suTW9kaWZ5KSk7dmFyIGxlPXtjb2RlTmFtZToiVGhpc1dvcmtib29rIn07Uy5Xb3JrYm9vayYmUy5Xb3JrYm9vay5XQlByb3BzJiYoQTcuZm9yRWFjaChmdW5jdGlvbihOZSl7bnVsbCE9Uy5Xb3JrYm9vay5XQlByb3BzW05lWzBdXSYmUy5Xb3JrYm9v''@;'; put 'put ''ay5XQlByb3BzW05lWzBdXSE9TmVbMV0mJihsZVtOZVswXV09Uy5Xb3JrYm9vay5XQlByb3BzW05lWzBdXSl9KSxTLldvcmtib29rLldCUHJvcHMuQ29kZU5hbWUmJihsZS5jb2RlTmFtZT1TLldvcmtib29rLldCUHJvcHMuQ29kZU5hbWUsZGVsZXRlIGxlLkNvZGVOYW1lKSksR1tHLmxlbmd0''@;'; put 'put ''aF09anIoIndvcmtib29rUHIiLG51bGwsbGUpLFMuV29ya2Jvb2smJlMuV29ya2Jvb2suUHJvdGVjdGlvbiYmKEdbRy5sZW5ndGhdPWZ1bmN0aW9uIF9XKFMpe3ZhciBMPXt9O3JldHVybiBTLmxvY2tTdHJ1Y3R1cmUmJihMLmxvY2tTdHJ1Y3R1cmU9MSksUy5sb2NrV2luZG93cyYmKEwubG9j''@;'; put 'put ''a1dpbmRvd3M9MSksUy5lbmNyeXB0aW9uJiYoUy5lbmNyeXB0aW9uLmFsZ28mJihMLndvcmtib29rQWxnb3JpdGhtTmFtZT1TLmVuY3J5cHRpb24uYWxnbyksUy5lbmNyeXB0aW9uLmhhc2gmJihMLndvcmtib29rSGFzaFZhbHVlPVMuZW5jcnlwdGlvbi5oYXNoKSxTLmVuY3J5cHRpb24uc2Fs''@;'; put 'put ''dCYmKEwud29ya2Jvb2tTYWx0VmFsdWU9Uy5lbmNyeXB0aW9uLnNhbHQpLFMuZW5jcnlwdGlvbi5zcGluJiYoTC53b3JrYm9va1NwaW5Db3VudD1TLmVuY3J5cHRpb24uc3BpbikpLGpyKCJ3b3JrYm9va1Byb3RlY3Rpb24iLG51bGwsTCl9KFMuV29ya2Jvb2suUHJvdGVjdGlvbikpO3ZhciBt''@;'; put 'put ''ZT1TLldvcmtib29rJiZTLldvcmtib29rLlNoZWV0c3x8W10scGU9MDtpZihtZSYmbWVbMF0mJm1lWzBdLkhpZGRlbil7Zm9yKEdbRy5sZW5ndGhdPSI8Ym9va1ZpZXdzPiIscGU9MDtwZSE9Uy5TaGVldE5hbWVzLmxlbmd0aCYmbWVbcGVdJiZtZVtwZV0uSGlkZGVuOysrcGUpO3BlPT1TLlNo''@;'; put 'put ''ZWV0TmFtZXMubGVuZ3RoJiYocGU9MCksR1tHLmxlbmd0aF09Jzx3b3JrYm9va1ZpZXcgZmlyc3RTaGVldD0iJytwZSsnIiBhY3RpdmVUYWI9IicrcGUrJyIvPicsR1tHLmxlbmd0aF09IjwvYm9va1ZpZXdzPiJ9Zm9yKEdbRy5sZW5ndGhdPSI8c2hlZXRzPiIscGU9MDtwZSE9Uy5TaGVldE5h''@;'; put 'put ''bWVzLmxlbmd0aDsrK3BlKXt2YXIgYmU9e25hbWU6aGkoUy5TaGVldE5hbWVzW3BlXS5zbGljZSgwLDMxKSl9O2lmKGJlLnNoZWV0SWQ9IiIrKHBlKzEpLGJlWyJyOmlkIl09InJJZCIrKHBlKzEpLG1lW3BlXSlzd2l0Y2gobWVbcGVdLkhpZGRlbil7Y2FzZSAxOmJlLnN0YXRlPSJoaWRkZW4i''@;'; put 'put ''O2JyZWFrO2Nhc2UgMjpiZS5zdGF0ZT0idmVyeUhpZGRlbiJ9R1tHLmxlbmd0aF09anIoInNoZWV0IixudWxsLGJlKX1yZXR1cm4gR1tHLmxlbmd0aF09Ijwvc2hlZXRzPiIsUy5FeHRlcm5hbFdCJiZTLkV4dGVybmFsV0IubGVuZ3RoJiYoR1tHLmxlbmd0aF09IjxleHRlcm5hbFJlZmVyZW5j''@;'; put 'put ''ZXM+IiwoUy5FeHRlcm5hbFdCfHxbXSkuZm9yRWFjaChmdW5jdGlvbihOZSxCZSl7dmFyIEdlPVRzKGsud2JyZWxzLC0xLCJleHRlcm5hbExpbmtzL2V4dGVybmFsTGluayIrKEJlKzEpKyIueG1sIixLYS5YTElOSyk7R1tHLmxlbmd0aF09JzxleHRlcm5hbFJlZmVyZW5jZSByOmlkPSJySWQn''@;'; put 'put ''K0dlKyciLz4nfSksR1tHLmxlbmd0aF09IjwvZXh0ZXJuYWxSZWZlcmVuY2VzPiIpLFEmJihHW0cubGVuZ3RoXT0iPGRlZmluZWROYW1lcz4iLFMuV29ya2Jvb2smJlMuV29ya2Jvb2suTmFtZXMmJlMuV29ya2Jvb2suTmFtZXMuZm9yRWFjaChmdW5jdGlvbihOZSl7dmFyIEJlPXtuYW1lOk5l''@;'; put 'put ''Lk5hbWV9O05lLkNvbW1lbnQmJihCZS5jb21tZW50PU5lLkNvbW1lbnQpLG51bGwhPU5lLlNoZWV0JiYoQmUubG9jYWxTaGVldElkPSIiK05lLlNoZWV0KSxOZS5IaWRkZW4mJihCZS5oaWRkZW49IjEiKSxOZS5SZWYmJihHW0cubGVuZ3RoXT1qcigiZGVmaW5lZE5hbWUiLGhpKE5lLlJlZiks''@;'; put 'put ''QmUpKX0pLEdbRy5sZW5ndGhdPSI8L2RlZmluZWROYW1lcz4iKSxrJiZrLnBpdm90cyYmay5waXZvdHMubGVuZ3RoPjAmJihHLnB1c2goIjxwaXZvdENhY2hlcz4iKSxrLnBpdm90cy5mb3JFYWNoKGZ1bmN0aW9uKE5lLEJlKXtHLnB1c2goJzxwaXZvdENhY2hlIGNhY2hlSWQ9IicrKEJlKzEp''@;'; put 'put ''KyciIHI6aWQ9InJJZCcrTmVbMl0rJyIvPicpfSksRy5wdXNoKCI8L3Bpdm90Q2FjaGVzPiIpKSxHLmxlbmd0aD4yJiYoR1tHLmxlbmd0aF09Ijwvd29ya2Jvb2s+IixHWzFdPUdbMV0ucmVwbGFjZSgiLz4iLCI+IikpLEcuam9pbigiIil9ZnVuY3Rpb24gS0woUyxMKXtyZXR1cm4gTHx8KEw9''@;'; put 'put ''VnQoMTI3KSksTC53cml0ZV9zaGlmdCg0LFMuSGlkZGVuKSxMLndyaXRlX3NoaWZ0KDQsUy5pVGFiSUQpLG5tKFMuc3RyUmVsSUQsTCksU2MoUy5uYW1lLnNsaWNlKDAsMzEpLEwpLEwubGVuZ3RoPkwubD9MLnNsaWNlKDAsTC5sKTpMfWZ1bmN0aW9uIFNXKFMsTCl7dmFyIGs9e307cmV0dXJu''@;'; put 'put ''IFMucmVhZF9zaGlmdCg0KSxrLkFyY2hJRD1TLnJlYWRfc2hpZnQoNCksUy5sKz1MLTgsa31mdW5jdGlvbiBBVyhTLEwpe3ZhciBrPW1yKCk7cmV0dXJuIE1uKGssIkJydEJlZ2luQm9vayIpLE1uKGssIkJydEZpbGVWZXJzaW9uIixmdW5jdGlvbiBUVyhTLEwpe0x8fChMPVZ0KDEyNykpO2Zv''@;'; put 'put ''cih2YXIgaz0wOzQhPWs7KytrKUwud3JpdGVfc2hpZnQoNCwwKTtyZXR1cm4gU2MoIlNoZWV0SlMiLEwpLFNjKHcudmVyc2lvbixMKSxTYyh3LnZlcnNpb24sTCksU2MoIjcyNjIiLEwpLEwubGVuZ3RoPkwubD9MLnNsaWNlKDAsTC5sKTpMfSgpKSxNbihrLCJCcnRXYlByb3AiLGZ1bmN0aW9u''@;'; put 'put ''IENXKFMsTCl7THx8KEw9VnQoNzIpKTt2YXIgaz0wO3JldHVybiBTJiZTLmZpbHRlclByaXZhY3kmJihrfD04KSxMLndyaXRlX3NoaWZ0KDQsayksTC53cml0ZV9zaGlmdCg0LDApLFR5KFMmJlMuQ29kZU5hbWV8fCJUaGlzV29ya2Jvb2siLEwpLEwuc2xpY2UoMCxMLmwpfShTLldvcmtib29r''@;'; put 'put ''JiZTLldvcmtib29rLldCUHJvcHN8fG51bGwpKSxmdW5jdGlvbiBKTChTLEwpe2lmKEwuV29ya2Jvb2smJkwuV29ya2Jvb2suU2hlZXRzKXtmb3IodmFyIGs9TC5Xb3JrYm9vay5TaGVldHMsRz0wLFE9LTEsbGU9LTE7RzxrLmxlbmd0aDsrK0cpIWtbR118fCFrW0ddLkhpZGRlbiYmLTE9PVE/''@;'; put 'put ''UT1HOjE9PWtbR10uSGlkZGVuJiYtMT09bGUmJihsZT1HKTtsZT5RfHwoTW4oUywiQnJ0QmVnaW5Cb29rVmlld3MiKSxNbihTLCJCcnRCb29rVmlldyIsZnVuY3Rpb24gcUwoUyxMKXtyZXR1cm4gTHx8KEw9VnQoMjkpKSxMLndyaXRlX3NoaWZ0KC00LDApLEwud3JpdGVfc2hpZnQoLTQsNDYw''@;'; put 'put ''KSxMLndyaXRlX3NoaWZ0KDQsMjg4MDApLEwud3JpdGVfc2hpZnQoNCwxNzYwMCksTC53cml0ZV9zaGlmdCg0LDUwMCksTC53cml0ZV9zaGlmdCg0LFMpLEwud3JpdGVfc2hpZnQoNCxTKSxMLndyaXRlX3NoaWZ0KDEsMTIwKSxMLmxlbmd0aD5MLmw/TC5zbGljZSgwLEwubCk6TH0oUSkpLE1u''@;'; put 'put ''KFMsIkJydEVuZEJvb2tWaWV3cyIpKX19KGssUyksZnVuY3Rpb24gRVcoUyxMKXtNbihTLCJCcnRCZWdpbkJ1bmRsZVNocyIpO2Zvcih2YXIgaz0wO2shPUwuU2hlZXROYW1lcy5sZW5ndGg7KytrKU1uKFMsIkJydEJ1bmRsZVNoIixLTCh7SGlkZGVuOkwuV29ya2Jvb2smJkwuV29ya2Jvb2su''@;'; put 'put ''U2hlZXRzJiZMLldvcmtib29rLlNoZWV0c1trXSYmTC5Xb3JrYm9vay5TaGVldHNba10uSGlkZGVufHwwLGlUYWJJRDprKzEsc3RyUmVsSUQ6InJJZCIrKGsrMSksbmFtZTpMLlNoZWV0TmFtZXNba119KSk7TW4oUywiQnJ0RW5kQnVuZGxlU2hzIil9KGssUyksTW4oaywiQnJ0RW5kQm9vayIp''@;'; put 'put ''LGsuZW5kKCl9ZnVuY3Rpb24gaU8oUyxMLGssRyxRKXtyZXR1cm4oIi5iaW4iPT09TC5zbGljZSgtNCk/Zlc6UG9lKShTLGssRyxRKX1mdW5jdGlvbiBhTyhTLEwsayxHLFEpe3JldHVybigiLmJpbiI9PT1MLnNsaWNlKC00KT95VzpUNykoUyxrLEcsUSl9ZnVuY3Rpb24gWngoUyxMLGspe3Jl''@;'; put 'put ''dHVybigiLmJpbiI9PT1MLnNsaWNlKC00KT9uZjpyYikoUyxrKX1mdW5jdGlvbiBENyhTLEwsayl7cmV0dXJuKCIuYmluIj09PUwuc2xpY2UoLTQpP0FSOkNiKShTLGspfXZhciBvTz0vKFtcdzpdKyk9KCg/OiIpKFteIl0qKSg/OiIpfCg/OicpKFteJ10qKSg/OicpKS9nLFd4PS8oW1x3Ol0r''@;'; put 'put ''KT0oKD86IikoPzpbXiJdKikoPzoiKXwoPzonKSg/OlteJ10qKSg/OicpKS87ZnVuY3Rpb24gR3UoUyxMKXt2YXIgaz1TLnNwbGl0KC9ccysvKSxHPVtdO2lmKEx8fChHWzBdPWtbMF0pLDE9PT1rLmxlbmd0aClyZXR1cm4gRzt2YXIgbGUsbWUsYmUsUT1TLm1hdGNoKG9PKTtpZihRKWZvcihi''@;'; put 'put ''ZT0wO2JlIT1RLmxlbmd0aDsrK2JlKS0xPT09KG1lPShsZT1RW2JlXS5tYXRjaChXeCkpWzFdLmluZGV4T2YoIjoiKSk/R1tsZVsxXV09bGVbMl0uc2xpY2UoMSxsZVsyXS5sZW5ndGgtMSk6R1sieG1sbnM6Ij09PWxlWzFdLnNsaWNlKDAsNik/InhtbG5zIitsZVsxXS5zbGljZSg2KTpsZVsx''@;'; put 'put ''XS5zbGljZShtZSsxKV09bGVbMl0uc2xpY2UoMSxsZVsyXS5sZW5ndGgtMSk7cmV0dXJuIEd9ZnVuY3Rpb24gTFcoUyl7dmFyIGs9e307aWYoMT09PVMuc3BsaXQoL1xzKy8pLmxlbmd0aClyZXR1cm4gazt2YXIgUSxsZSxwZSxHPVMubWF0Y2gob08pO2lmKEcpZm9yKHBlPTA7cGUhPUcubGVu''@;'; put 'put ''Z3RoOysrcGUpLTE9PT0obGU9KFE9R1twZV0ubWF0Y2goV3gpKVsxXS5pbmRleE9mKCI6IikpP2tbUVsxXV09UVsyXS5zbGljZSgxLFFbMl0ubGVuZ3RoLTEpOmtbInhtbG5zOiI9PT1RWzFdLnNsaWNlKDAsNik/InhtbG5zIitRWzFdLnNsaWNlKDYpOlFbMV0uc2xpY2UobGUrMSldPVFbMl0u''@;'; put 'put ''c2xpY2UoMSxRWzJdLmxlbmd0aC0xKTtyZXR1cm4ga31mdW5jdGlvbiBab2UoUyl7dmFyIEw9e307aWYoUy5EZWZhdWx0Um93SGVpZ2h0KXt2YXIgaz17aHB4OjQqcGFyc2VJbnQoUy5EZWZhdWx0Um93SGVpZ2h0KS8zfTtNMShrKSxMLnJvdz1rfWlmKFMuRGVmYXVsdENvbFdpZHRoKXt2YXIg''@;'; put 'put ''Rz17d3B4OjQqcGFyc2VJbnQoUy5EZWZhdWx0Q29sV2lkdGgpLzN9O3IxKEcpLEwuY29sPUd9cmV0dXJuIEx9ZnVuY3Rpb24gT1coUyxMLGssRyl7dmFyIFE9Rztzd2l0Y2goKGtbMF0ubWF0Y2goL2R0OmR0PSIoW1x3Ll0rKSIvKXx8WyIiLCIiXSlbMV0pe2Nhc2UiYm9vbGVhbiI6UT1GcihH''@;'; put 'put ''KTticmVhaztjYXNlImkyIjpjYXNlImludCI6UT1wYXJzZUludChHLDEwKTticmVhaztjYXNlInI0IjpjYXNlImZsb2F0IjpRPXBhcnNlRmxvYXQoRyk7YnJlYWs7Y2FzZSJkYXRlIjpjYXNlImRhdGVUaW1lLnR6IjpRPUllKEcpO2JyZWFrO2Nhc2UiaTgiOmNhc2Uic3RyaW5nIjpjYXNlImZp''@;'; put 'put ''eGVkIjpjYXNlInV1aWQiOmNhc2UiYmluLmJhc2U2NCI6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImJhZCBjdXN0cHJvcDoiK2tbMF0pfVNbZWkoTCldPVF9dmFyIHNPPXswOiJOb25lIiwxOiJTaW5nbGUiLDI6IkRvdWJsZSIsMzM6IlNpbmdsZUFjY291bnRpbmciLDM0OiJEb3Vi''@;'; put 'put ''bGVBY2NvdW50aW5nIn0sSmI9QWUoc08pO2Z1bmN0aW9uIFl4KFMsTCxrLEcpe2lmKEcuY2VsbFN0eWxlcyl7aWYoaz1rLnJlcGxhY2UoL1xzKy9nLCIgIiksTC5JbnRlcmlvcil7dmFyIFE9TC5JbnRlcmlvcjtRLlBhdHRlcm4mJihRLnBhdHRlcm5UeXBlPXlNW1EuUGF0dGVybl18fFEuUGF0''@;'; put 'put ''dGVybiksUS5Db2xvciYmUS5Db2xvci5tYXRjaCgvI1swLTlBLUZhLWZdKi8pJiYoUS5mZ0NvbG9yPXtyZ2I6US5Db2xvci5zbGljZSgxKX0pfSFmdW5jdGlvbiBXb2UoUyl7Uy5Cb3JkZXJzJiYoUy5Cb3JkZXJzLmZvckVhY2goZnVuY3Rpb24oTCl7dmFyIGs9TC5Qb3NpdGlvbi50b0xvd2Vy''@;'; put 'put ''Q2FzZSgpO1Nba109e3N0eWxlOkZXKEwuTGluZVN0eWxlLCtMLldlaWdodCksY29sb3I6e3JnYjooTC5Db2xvcnx8IiMwMDAwMDAiKS5zbGljZSgxKX19fSksZGVsZXRlIFMuQm9yZGVycyl9KEwpO3ZhciBtZSxsZT1rLm1hdGNoKC88KD86XHcrOik/Rm9udFxzW14+XSo+Lyk7bGUmJihGcigo''@;'; put 'put ''bWU9dnIobGVbMF0pKS5Cb2xkKSYmKEwuQm9sZD0hMCksRnIobWUuSXRhbGljKSYmKEwuSXRhbGljPSEwKSxGcihtZS5TdHJpa2VUaHJvdWdoKSYmKEwuU3RyaWtlPSEwKSxtZS5TaXplJiYoTC5TaXplPSttZS5TaXplKSxMLkZvbnROYW1lPW1lLkZvbnROYW1lP21lLkZvbnROYW1lOiJBcmlh''@;'; put 'put ''bCIsbWUuVW5kZXJsaW5lJiYoTC5VbmRlcmxpbmU9SmJbbWUuVW5kZXJsaW5lXSksbWUuQ29sb3ImJihMLlJHQj1tZS5Db2xvci5zbGljZSgtNikpKSxMLkFsaWdubWVudCYmKEwuYWxpZ25tZW50PXt9LEwuQWxpZ25tZW50LlZlcnRpY2FsJiYoTC5hbGlnbm1lbnQudmVydGljYWw9TC5BbGln''@;'; put 'put ''bm1lbnQuVmVydGljYWwudG9Mb3dlckNhc2UoKSksTC5BbGlnbm1lbnQuSG9yaXpvbnRhbCYmKEwuYWxpZ25tZW50Lmhvcml6b250YWw9TC5BbGlnbm1lbnQuSG9yaXpvbnRhbC50b0xvd2VyQ2FzZSgpKSxGcihMLkFsaWdubWVudC5XcmFwVGV4dHx8IjAiKT9MLmFsaWdubWVudC53cmFwVGV4''@;'; put 'put ''dD0hMDpudWxsPT1MLkFsaWdubWVudC5XcmFwVGV4dCYmZGVsZXRlIEwuYWxpZ25tZW50LndyYXBUZXh0LEZyKEwuQWxpZ25tZW50LlNocmlua1RvRml0fHwiMCIpJiYoTC5hbGlnbm1lbnQuc2hyaW5rVG9GaXQ9ITApLCtMLkFsaWdubWVudC5JbmRlbnQmJihMLmFsaWdubWVudC5pbmRlbnQ9''@;'; put 'put ''K0wuQWxpZ25tZW50LkluZGVudHx8MCksK0wuQWxpZ25tZW50LlJvdGF0ZSYmKEwuYWxpZ25tZW50LnRleHRSb3RhdGlvbj0rTC5BbGlnbm1lbnQuUm90YXRlfHwwKSl9U1tMLklEXT1MLCgiRGVmYXVsdCI9PUwuSUR8fCJOb3JtYWwiPT1MLk5hbWUpJiZCcChMKX1mdW5jdGlvbiBGVyhTLEwp''@;'; put 'put ''e3N3aXRjaChTKXtjYXNlIk5vbmUiOnJldHVybiJub25lIjtjYXNlIkRhc2giOnJldHVybiJkYXNoZWQiO2Nhc2UiRG90IjpyZXR1cm4iZG90dGVkIjtjYXNlIkRhc2hEb3QiOnJldHVybiJkYXNoRG90IjtjYXNlIkRhc2hEb3REb3QiOnJldHVybiJkYXNoRG90RG90IjtjYXNlIlNsYW50RGFz''@;'; put 'put ''aERvdCI6cmV0dXJuInNsYW50RGFzaERvdCI7Y2FzZSJEb3VibGUiOnJldHVybiJkb3VibGUiO2Nhc2UiQ29udGludW91cyI6c3dpdGNoKCtMfHwwKXtjYXNlIDA6cmV0dXJuImhhaXIiO2Nhc2UgMTpyZXR1cm4idGhpbiI7Y2FzZSAyOnJldHVybiJtZWRpdW0iO2Nhc2UgMzpyZXR1cm4idGhp''@;'; put 'put ''Y2sifXJldHVybiJ0aGluIn1yZXR1cm4gU31mdW5jdGlvbiBIVyhTLEwsayxHLFEsbGUsbWUscGUsYmUsTmUpe3ZhciBCZT0iR2VuZXJhbCIsR2U9Ry5TdHlsZUlELGV0PXt9O05lPU5lfHx7fTt2YXIgY3Q9W10seHQ9MDtmb3Iodm9pZCAwPT09R2UmJnBlJiYoR2U9cGUuU3R5bGVJRCksdm9p''@;'; put 'put ''ZCAwPT09R2UmJm1lJiYoR2U9bWUuU3R5bGVJRCk7dm9pZCAwIT09bGVbR2VdOyl7dmFyIG90PWxlW0dlXTtpZigiR2VuZXJhbCI9PUJlJiZvdC5uZiYmKEJlPWxlW0dlXS5uZiksb3QuSW50ZXJpb3ImJmN0LnB1c2gobGVbR2VdLkludGVyaW9yKSxvdC5hbGlnbm1lbnQmJihldC5hbGlnbm1l''@;'; put 'put ''bnR8fChldC5hbGlnbm1lbnQ9dW4ob3QuYWxpZ25tZW50KSkpLG51bGw9PWV0LmJvbGQmJm90LkJvbGQmJihldC5ib2xkPSEwKSxudWxsPT1ldC5pdGFsaWMmJm90Lkl0YWxpYyYmKGV0Lml0YWxpYz0hMCksbnVsbD09ZXQuc3RyaWtlJiZvdC5TdHJpa2UmJihldC5zdHJpa2U9ITApLG51bGw9''@;'; put 'put ''PWV0LnN6JiZvdC5TaXplJiYoZXQuc3o9b3QuU2l6ZSksbnVsbD09ZXQubmFtZSYmb3QuRm9udE5hbWUmJihldC5uYW1lPW90LkZvbnROYW1lKSxudWxsPT1ldC51bmRlcmxpbmUmJm90LlVuZGVybGluZSYmKGV0LnVuZGVybGluZT1vdC5VbmRlcmxpbmUpLG51bGw9PWV0LmNvbG9yJiZvdC5S''@;'; put 'put ''R0ImJihldC5jb2xvcj17cmdiOm90LlJHQn0pLFsidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0Il0uZm9yRWFjaChmdW5jdGlvbihMdCl7bnVsbD09ZXRbTHRdJiZvdFtMdF0mJihldFtMdF09dW4ob3RbTHRdKSl9KSwiRGVmYXVsdCI9PUdlKWJyZWFrO0dlPW90LlBhcmVudHx8IkRlZmF1''@;'; put 'put ''bHQifWV0Lm5hbWV8fChldC5uYW1lPWxlLkRlZmF1bHQmJmxlLkRlZmF1bHQuRm9udE5hbWV8fCJBcmlhbCIpLGV0LnN6fHwoZXQuc3o9bGUuRGVmYXVsdCYmbGUuRGVmYXVsdC5TaXplfHwxMik7dmFyIGJ0PSIiO2lmKFN8fEcuRm9ybXVsYXx8IlN0cmluZyI9PWsuVHlwZXx8Ik51bWJlciI9''@;'; put 'put ''PWsuVHlwZSlzd2l0Y2goay5UeXBlKXtjYXNlIkJvb2xlYW4iOkcudD0iYiIsRy52PUZyKFMpO2JyZWFrO2Nhc2UiU3RyaW5nIjpHLnQ9InMiLGJ0PXdhKGVpKFMpKSxHLnY9Uy5pbmRleE9mKCI8Iik+LTE/ZWkoTHx8UykucmVwbGFjZSgvPFteXSo/Pi9nLCIiKTpidCxTLmluZGV4T2YoIjwi''@;'; put 'put ''KT4tMSYmKEcuUj1hMi5odG1sX3RvX3JzKGVpKFMpKSk7YnJlYWs7Y2FzZSJEYXRlVGltZSI6IloiIT1TLnNsaWNlKC0xKSYmKFMrPSJaIiksRy52PShJZShTKS1uZXcgRGF0ZShEYXRlLlVUQygxODk5LDExLDMwKSkpLzg2NGU1LEcudiE9Ry52P0cudj1laShTKTpHLnY8NjAmJihHLnY9Ry52''@;'; put 'put ''LTEpLCghQmV8fCJHZW5lcmFsIj09QmUpJiYoQmU9Inl5eXktbW0tZGQiKTtjYXNlIk51bWJlciI6dm9pZCAwPT09Ry52JiYoRy52PStTKSxHLnR8fChHLnQ9Im4iKTticmVhaztjYXNlIkVycm9yIjpHLnQ9ImUiLEcudj16aFtTXSwhMSE9PU5lLmNlbGxUZXh0JiYoRy53PVMpO2JyZWFrO2Rl''@;'; put 'put ''ZmF1bHQ6IiI9PVMmJiIiPT1MP0cudD0ieiI6KEcudD0icyIsYnQ9d2EoZWkoUykpLEcudj1TLmluZGV4T2YoIjwiKT4tMT9laShMfHxTKS5yZXBsYWNlKC88W15dKj8+L2csIiIpOmJ0LFMuaW5kZXhPZigiPCIpPi0xJiYoRy5SPWEyLmh0bWxfdG9fcnMoZWkoUykpKSl9ZWxzZSBHLnQ9Inoi''@;'; put 'put ''LGRlbGV0ZSBHLnY7aWYoZnVuY3Rpb24gUFcoUyxMLGspe2lmKCJ6IiE9PVMudCl7aWYoIWt8fCExIT09ay5jZWxsVGV4dCl0cnl7Uy53PSJlIj09PVMudD9TLnd8fG9kW1Mudl06IkdlbmVyYWwiPT09TD8ibiI9PT1TLnQ/KDB8Uy52KT09PVMudj9BLl9nZW5lcmFsX2ludChTLnYpOkEuX2dl''@;'; put 'put ''bmVyYWxfbnVtKFMudik6QS5fZ2VuZXJhbChTLnYpOmZ1bmN0aW9uIElsKFMsTCl7dmFyIGs9bmVbU118fGVpKFMpO3JldHVybiJHZW5lcmFsIj09PWs/QS5fZ2VuZXJhbChMKTpBLmZvcm1hdChrLEwpfShMfHwiR2VuZXJhbCIsUy52KX1jYXRjaChsZSl7aWYoay5XVEYpdGhyb3cgbGV9dHJ5''@;'; put 'put ''e3ZhciBHPW5lW0xdfHxMfHwiR2VuZXJhbCI7aWYoay5jZWxsTkYmJihTLno9Ryksay5jZWxsRGF0ZXMmJiJuIj09Uy50JiZBLmlzX2RhdGUoRykpe3ZhciBRPUEucGFyc2VfZGF0ZV9jb2RlKFMudik7USYmKFMudD0iZCIsUy52PW5ldyBEYXRlKFEueSxRLm0tMSxRLmQsUS5ILFEuTSxRLlMs''@;'; put 'put ''US51KSl9fWNhdGNoKGxlKXtpZihrLldURil0aHJvdyBsZX19fShHLEJlLE5lKSwhMSE9PU5lLmNlbGxGb3JtdWxhKWlmKEcuRm9ybXVsYSl7dmFyIEZ0PWVpKEcuRm9ybXVsYSk7NjE9PUZ0LmNoYXJDb2RlQXQoMCkmJihGdD1GdC5zbGljZSgxKSksRy5mPWpzKEZ0LFEpLGRlbGV0ZSBHLkZv''@;'; put 'put ''cm11bGEsIlJDIj09Ry5BcnJheVJhbmdlP0cuRj1qcygiUkM6UkMiLFEpOkcuQXJyYXlSYW5nZSYmKEcuRj1qcyhHLkFycmF5UmFuZ2UsUSksYmUucHVzaChbdG8oRy5GKSxHLkZdKSl9ZWxzZSBmb3IoeHQ9MDt4dDxiZS5sZW5ndGg7Kyt4dClRLnI+PWJlW3h0XVswXS5zLnImJlEucjw9YmVb''@;'; put 'put ''eHRdWzBdLmUuciYmUS5jPj1iZVt4dF1bMF0ucy5jJiZRLmM8PWJlW3h0XVswXS5lLmMmJihHLkY9YmVbeHRdWzFdKTtpZihOZS5jZWxsU3R5bGVzJiYoY3QuZm9yRWFjaChmdW5jdGlvbihMdCl7IWV0LnBhdHRlcm5UeXBlJiZMdC5wYXR0ZXJuVHlwZSYmKGV0LnBhdHRlcm5UeXBlPUx0LnBh''@;'; put 'put ''dHRlcm5UeXBlKSwhZXQuZmdDb2xvciYmTHQuZmdDb2xvciYmKGV0LmZnQ29sb3I9THQuZmdDb2xvcil9KSxHLnM9ZXQpLHZvaWQgMCE9PUcuU3R5bGVJRCYmKEcuaXhmZT1HLlN0eWxlSUQpLEcuUiYmRy5zKXt2YXIga3Q9dW4oRy5zKTtkZWxldGUga3QuYm9sZCxkZWxldGUga3QuaXRhbGlj''@;'; put 'put ''LGRlbGV0ZSBrdC51bmRlcmxpbmUsZGVsZXRlIGt0LnN0cmlrZSxHLlIuZm9yRWFjaChmdW5jdGlvbihMdCl7THQucz1SdCh1bihrdCksTHQucyl9KX19ZnVuY3Rpb24gTlcoUyl7Uy50PVMudnx8IiIsUy50PVMudC5yZXBsYWNlKC9cclxuL2csIlxuIikucmVwbGFjZSgvXHIvZywiXG4iKSxT''@;'; put 'put ''LnY9Uy53PVMuaXhmZT12b2lkIDB9ZnVuY3Rpb24gR3goUyl7aWYoVGUmJkJ1ZmZlci5pc0J1ZmZlcihTKSlyZXR1cm4gUy50b1N0cmluZygidXRmOCIpO2lmKCJzdHJpbmciPT10eXBlb2YgUylyZXR1cm4gUztpZih0eXBlb2YgVWludDhBcnJheTwidSImJlMgaW5zdGFuY2VvZiBVaW50OEFy''@;'; put 'put ''cmF5KXJldHVybiBjbyhDKEgoUykpKTt0aHJvdyBuZXcgRXJyb3IoIkJhZCBpbnB1dCBmb3JtYXQ6IGV4cGVjdGVkIEJ1ZmZlciBvciBzdHJpbmciKX12YXIgUWI9LzwoXC8/KShbXlxzPz48IVwvOl0qOnwpKFteXHM/PD46XC9cW10rKSg/Oltccz86PFwvXVtePl0qKT8+L2dtO2Z1bmN0aW9u''@;'; put 'put ''ICR4KFMsTCl7dmFyIGs9THx8e30sRz1KKEd4KFMpKTsoImJpbmFyeSI9PWsudHlwZXx8ImFycmF5Ij09ay50eXBlfHwiYmFzZTY0Ij09ay50eXBlKSYmKEc9dHlwZW9mIGNwdGFibGU8InUiP2NwdGFibGUudXRpbHMuZGVjb2RlKDY1MDAxLFcoRykpOmNvKEcpKTt2YXIgUT1HLnNsaWNlKDAs''@;'; put 'put ''MTAyNCkudG9Mb3dlckNhc2UoKSxsZT0hMTtpZigoMTAyMyZRLmluZGV4T2YoIj4iKSk+TWF0aC5taW4oMTAyMyZRLmluZGV4T2YoIiwiKSwxMDIzJlEuaW5kZXhPZigiOyIpKSl7dmFyIG1lPXVuKGspO3JldHVybiBtZS50eXBlPSJzdHJpbmciLEpoLnRvX3dvcmtib29rKEcsbWUpfWlmKC0x''@;'; put 'put ''PT1RLmluZGV4T2YoIjw/eG1sIikmJlsiaHRtbCIsInRhYmxlIiwiaGVhZCIsIm1ldGEiLCJzY3JpcHQiLCJzdHlsZSIsImRpdiJdLmZvckVhY2goZnVuY3Rpb24obzEpe1EuaW5kZXhPZigiPCIrbzEpPj0wJiYobGU9ITApfSksbGUpcmV0dXJuIGEyLnRvX3dvcmtib29rKEcsayk7dmFyIHBl''@;'; put 'put ''LE5lLGtyLGJlPVtdLEJlPXt9LEdlPVtdLGV0PWsuZGVuc2U/W106e30sY3Q9IiIseHQ9e30sb3Q9e30sYnQ9e30sRnQ9R3UoJzxEYXRhIHNzOlR5cGU9IlN0cmluZyI+Jyksa3Q9MCxMdD0wLEp0PTAsVG49e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0sc3I9e30sQ249e30sbHI9IiIs''@;'; put 'put ''cW49MCxXbj1bXSxwcj17fSx5cj17fSx0cj0wLHdpPVtdLEZpPXt9LHJhPVtdLG9hPXt9LGtpPVtdLFluPSExLFZyPVtdLHdyPVtdLFZuPXt9LHpyPTAsWmk9MCxDaT17U2hlZXRzOltdLFdCUHJvcHM6e2RhdGUxOTA0OiExfX0sX2E9e307UWIubGFzdEluZGV4PTAsRz1HLnJlcGxhY2UoLzwh''@;'; put 'put ''LS0oW1xzXFNdKj8pLS0+L2dtLCIiKTtmb3IodmFyIGZvPSIiO3BlPVFiLmV4ZWMoRyk7KXN3aXRjaChwZVszXT0oZm89cGVbM10pLnRvTG93ZXJDYXNlKCkpe2Nhc2UiZGF0YSI6aWYoImRhdGEiPT1mbyl7aWYoIi8iPT09cGVbMV0pe2lmKChOZT1iZS5wb3AoKSlbMF0hPT1wZVszXSl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitOZS5qb2luKCJ8IikpfWVsc2UiLyIhPT1wZVswXS5jaGFyQXQocGVbMF0ubGVuZ3RoLTIpJiZiZS5wdXNoKFtwZVszXSwhMF0pO2JyZWFrfWlmKGJlW2JlLmxlbmd0aC0xXVsxXSlicmVhazsiLyI9PT1wZVsxXT9IVyhHLnNsaWNlKGt0LHBlLmlu''@;'; put 'put ''ZGV4KSxscixGdCwiY29tbWVudCI9PWJlW2JlLmxlbmd0aC0xXVswXT9vYTpvdCx7YzpMdCxyOkp0fSxzcixraVtMdF0sYnQsVnIsayk6KGxyPSIiLEZ0PUd1KHBlWzBdKSxrdD1wZS5pbmRleCtwZVswXS5sZW5ndGgpO2JyZWFrO2Nhc2UiY2VsbCI6aWYoIi8iPT09cGVbMV18fCIvPiI9PT1w''@;'; put 'put ''ZVswXS5zbGljZSgtMikpe2lmKCIvPiI9PT1wZVswXS5zbGljZSgtMikpe2lmKChvdD1MVyhwZVswXSkpLkluZGV4JiYoTHQ9K290LkluZGV4LTEpLEx0PFRuLnMuYyYmKFRuLnMuYz1MdCksTHQ+VG4uZS5jJiYoVG4uZS5jPUx0KSxyYT1bXSwhay5zaGVldFN0dWJzKXsrK0x0O2JyZWFrfUhX''@;'; put 'put ''KCIiLCIiLHt9LCJjb21tZW50Ij09YmVbYmUubGVuZ3RoLTFdWzBdP29hOm90LHtjOkx0LHI6SnR9LHNyLGtpW0x0XSxidCxWcixrKX1pZihyYS5sZW5ndGg+MCYmKG90LmM9cmEpLCghay5zaGVldFJvd3N8fGsuc2hlZXRSb3dzPkp0KSYmKHZvaWQgMCE9PW90LnZ8fGsuc2hlZXRTdHVicykm''@;'; put 'put ''JihrLmRlbnNlPyhldFtKdF18fChldFtKdF09W10pLGV0W0p0XVtMdF09b3QpOmV0W0ZvKEx0KStCaShKdCldPW90KSxvdC5IUmVmJiYob3QubD17VGFyZ2V0OmVpKG90LkhSZWYpfSxvdC5IUmVmU2NyZWVuVGlwJiYob3QubC5Ub29sdGlwPW90LkhSZWZTY3JlZW5UaXApLGRlbGV0ZSBvdC5I''@;'; put 'put ''UmVmLGRlbGV0ZSBvdC5IUmVmU2NyZWVuVGlwKSwob3QuTWVyZ2VBY3Jvc3N8fG90Lk1lcmdlRG93bikmJih6cj1MdCsoMHxwYXJzZUludChvdC5NZXJnZUFjcm9zcywxMCkpLFppPUp0KygwfHBhcnNlSW50KG90Lk1lcmdlRG93biwxMCkpLCh6cj5MdHx8Wmk+SnQpJiZXbi5wdXNoKHtzOntj''@;'; put 'put ''Okx0LHI6SnR9LGU6e2M6enIscjpaaX19KSksay5zaGVldFN0dWJzKWlmKG90Lk1lcmdlQWNyb3NzfHxvdC5NZXJnZURvd24pe2Zvcih2YXIgYWE9THQ7YWE8PXpyOysrYWEpZm9yKHZhciB6bz1KdDt6bzw9Wmk7Kyt6bykoYWE+THR8fHpvPkp0KSYmKGsuZGVuc2U/KGV0W3pvXXx8KGV0W3pv''@;'; put 'put ''XT1bXSksZXRbem9dW2FhXT17dDoieiJ9KTpldFtGbyhhYSkrQmkoem8pXT17dDoieiJ9KTtMdD16cisxfWVsc2UrK0x0O2Vsc2Ugb3QuTWVyZ2VBY3Jvc3M/THQ9enIrMTorK0x0fWVsc2Uob3Q9TFcocGVbMF0pKS5JbmRleCYmKEx0PStvdC5JbmRleC0xKSxMdDxUbi5zLmMmJihUbi5zLmM9''@;'; put 'put ''THQpLEx0PlRuLmUuYyYmKFRuLmUuYz1MdCksIi8+Ij09PXBlWzBdLnNsaWNlKC0yKSYmKytMdCxyYT1bXTticmVhaztjYXNlInJvdyI6Ii8iPT09cGVbMV18fCIvPiI9PT1wZVswXS5zbGljZSgtMik/KEp0PFRuLnMuciYmKFRuLnMucj1KdCksSnQ+VG4uZS5yJiYoVG4uZS5yPUp0KSwiLz4i''@;'; put 'put ''PT09cGVbMF0uc2xpY2UoLTIpJiYoYnQ9R3UocGVbMF0pKS5JbmRleCYmKEp0PStidC5JbmRleC0xKSxMdD0wLCsrSnQpOigoYnQ9R3UocGVbMF0pKS5JbmRleCYmKEp0PStidC5JbmRleC0xKSxWbj17fSwoIjAiPT1idC5BdXRvRml0SGVpZ2h0fHxidC5IZWlnaHQpJiYoVm4uaHB0PXBhcnNl''@;'; put 'put ''RmxvYXQoYnQuSGVpZ2h0KSxWbi5ocHg9dzMoVm4uaHB0KSx3cltKdF09Vm4pLCIxIj09YnQuSGlkZGVuJiYoVm4uaGlkZGVuPSEwLHdyW0p0XT1WbikpO2JyZWFrO2Nhc2Uid29ya3NoZWV0IjppZigiLyI9PT1wZVsxXSl7aWYoKE5lPWJlLnBvcCgpKVswXSE9PXBlWzNdKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcigiQmFkIHN0YXRlOiAiK05lLmpvaW4oInwiKSk7R2UucHVzaChjdCksVG4ucy5yPD1Ubi5lLnImJlRuLnMuYzw9VG4uZS5jJiYoZXRbIiFyZWYiXT1vbyhUbiksay5zaGVldFJvd3MmJmsuc2hlZXRSb3dzPD1Ubi5lLnImJihldFsiIWZ1bGxyZWYiXT1ldFsiIXJlZiJdLFRuLmUucj1r''@;'; put 'put ''LnNoZWV0Um93cy0xLGV0WyIhcmVmIl09b28oVG4pKSksV24ubGVuZ3RoJiYoZXRbIiFtZXJnZXMiXT1Xbiksa2kubGVuZ3RoPjAmJihldFsiIWNvbHMiXT1raSksd3IubGVuZ3RoPjAmJihldFsiIXJvd3MiXT13cikseHQmJihldFsiIXNoZWV0Rm9ybWF0Il09Wm9lKHh0KSksQmVbY3RdPWV0''@;'; put 'put ''fWVsc2UgVG49e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0sSnQ9THQ9MCxiZS5wdXNoKFtwZVszXSwhMV0pLE5lPUd1KHBlWzBdKSxjdD1laShOZS5OYW1lKSxldD1rLmRlbnNlP1tdOnt9LFduPVtdLFZyPVtdLHdyPVtdLENpLlNoZWV0cy5wdXNoKF9hPXtuYW1lOmN0LEhpZGRlbjow''@;'; put 'put ''fSk7YnJlYWs7Y2FzZSJ0YWJsZSI6aWYoIi8iPT09cGVbMV0pe2lmKChOZT1iZS5wb3AoKSlbMF0hPT1wZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitOZS5qb2luKCJ8IikpfWVsc2V7aWYoIi8+Ij09cGVbMF0uc2xpY2UoLTIpKWJyZWFrO3h0PUd1KHBlWzBdKSxiZS5wdXNo''@;'; put 'put ''KFtwZVszXSwhMV0pLGtpPVtdLFluPSExfWJyZWFrO2Nhc2Uic3R5bGUiOiIvIj09PXBlWzFdP1l4KHNyLENuLGxyLGspOihDbj1HdShwZVswXSksbHI9IiIpO2JyZWFrO2Nhc2UibnVtYmVyZm9ybWF0IjpDbi5uZj1laShHdShwZVswXSkuRm9ybWF0fHwiR2VuZXJhbCIpLG5lW0NuLm5mXSYm''@;'; put 'put ''KENuLm5mPW5lW0NuLm5mXSk7Zm9yKHZhciBqYT0wOzM5MiE9amEmJkEuX3RhYmxlW2phXSE9Q24ubmY7KytqYSk7aWYoMzkyPT1qYSlmb3IoamE9NTc7MzkyIT1qYTsrK2phKWlmKG51bGw9PUEuX3RhYmxlW2phXSl7QS5sb2FkKENuLm5mLGphKTticmVha31icmVhaztjYXNlImNvbHVtbiI6''@;'; put 'put ''aWYoInRhYmxlIiE9PWJlW2JlLmxlbmd0aC0xXVswXXx8Ii8iPT09cGVbMV0pYnJlYWs7aWYoKGtyPUd1KHBlWzBdKSkuSGlkZGVuJiYoa3IuaGlkZGVuPSEwLGRlbGV0ZSBrci5IaWRkZW4pLGtyLldpZHRoP2tyLndweD00KnBhcnNlSW50KGtyLldpZHRoLDEwKS8zOitrci5BdXRvRml0V2lk''@;'; put 'put ''dGgmJihrci5hdXRvPTEpLCFZbiYma3Iud3B4PjEwKXtZbj0hMCxOYz02O2Zvcih2YXIgd289MDt3bzxraS5sZW5ndGg7Kyt3bylraVt3b10mJnIxKGtpW3dvXSl9WW4mJnIxKGtyKSxraVtrci5JbmRleC0xfHxraS5sZW5ndGhdPWtyO2Zvcih2YXIgYm89MDtibzwra3IuU3BhbjsrK2JvKWtp''@;'; put 'put ''W2tpLmxlbmd0aF09dW4oa3IpO2JyZWFrO2Nhc2UibmFtZWRyYW5nZSI6aWYoIi8iPT09cGVbMV0pYnJlYWs7Q2kuTmFtZXN8fChDaS5OYW1lcz1bXSk7dmFyIFVpPXZyKHBlWzBdKSxqbD17TmFtZTpVaS5OYW1lLFJlZjpqcyhVaS5SZWZlcnNUby5zbGljZSgxKSx7cjowLGM6MH0pfTtDaS5T''@;'; put 'put ''aGVldHMubGVuZ3RoPjAmJihqbC5TaGVldD1DaS5TaGVldHMubGVuZ3RoLTEpLENpLk5hbWVzLnB1c2goamwpO2JyZWFrO2Nhc2UibmFtZWRjZWxsIjpjYXNlImIiOmNhc2UiaSI6Y2FzZSJ1IjpjYXNlInMiOmNhc2UiZW0iOmNhc2UiaDIiOmNhc2UiaDMiOmNhc2Uic3ViIjpjYXNlInN1cCI6''@;'; put 'put ''Y2FzZSJzcGFuIjpjYXNlInByb3RlY3Rpb24iOmNhc2UicGFyYWdyYXBocyI6Y2FzZSJuYW1lIjpicmVhaztjYXNlImFsaWdubWVudCI6aWYoIWsuY2VsbFN0eWxlc3x8Ii8iPT09cGVbMV0pYnJlYWs7Q24uQWxpZ25tZW50PUd1KHBlWzBdKTticmVhaztjYXNlImJvcmRlcnMiOiIvIiE9PXBl''@;'; put 'put ''WzFdJiYoQ24uQm9yZGVycz1bXSk7YnJlYWs7Y2FzZSJib3JkZXIiOmlmKCIvIj09PXBlWzFdKWJyZWFrO0NuLkJvcmRlcnN8fChDbi5Cb3JkZXJzPVtdKSxDbi5Cb3JkZXJzLnB1c2goR3UocGVbMF0pKTticmVhaztjYXNlImZvbnQiOmlmKCIvPiI9PT1wZVswXS5zbGljZSgtMikpe2xyKz1w''@;'; put 'put ''ZVswXTticmVha30iLyI9PT1wZVsxXT9scis9Ry5zbGljZShxbixwZS5pbmRleCtwZVswXS5sZW5ndGgpOnFuPXBlLmluZGV4O2JyZWFrO2Nhc2UiaW50ZXJpb3IiOmlmKCFrLmNlbGxTdHlsZXN8fCIvIj09PXBlWzFdKWJyZWFrO0NuLkludGVyaW9yPUd1KHBlWzBdKTticmVhaztjYXNlImF1''@;'; put 'put ''dGhvciI6Y2FzZSJ0aXRsZSI6Y2FzZSJkZXNjcmlwdGlvbiI6Y2FzZSJjcmVhdGVkIjpjYXNlImtleXdvcmRzIjpjYXNlInN1YmplY3QiOmNhc2UiY2F0ZWdvcnkiOmNhc2UiY29tcGFueSI6Y2FzZSJsYXN0YXV0aG9yIjpjYXNlImxhc3RzYXZlZCI6Y2FzZSJsYXN0cHJpbnRlZCI6Y2FzZSJ2''@;'; put 'put ''ZXJzaW9uIjpjYXNlInJldmlzaW9uIjpjYXNlInRvdGFsdGltZSI6Y2FzZSJoeXBlcmxpbmtiYXNlIjpjYXNlIm1hbmFnZXIiOmNhc2UiY29udGVudHN0YXR1cyI6Y2FzZSJpZGVudGlmaWVyIjpjYXNlImxhbmd1YWdlIjpjYXNlImFwcG5hbWUiOmlmKCIvPiI9PT1wZVswXS5zbGljZSgtMikp''@;'; put 'put ''YnJlYWs7Ii8iPT09cGVbMV0/UDgocHIsZm8sRy5zbGljZSh0cixwZS5pbmRleCkpOnRyPXBlLmluZGV4K3BlWzBdLmxlbmd0aDticmVhaztjYXNlInN0eWxlcyI6Y2FzZSJ3b3JrYm9vayI6aWYoIi8iPT09cGVbMV0pe2lmKChOZT1iZS5wb3AoKSlbMF0hPT1wZVszXSl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIkJhZCBzdGF0ZTogIitOZS5qb2luKCJ8IikpfWVsc2UgYmUucHVzaChbcGVbM10sITFdKTticmVhaztjYXNlImNvbW1lbnQiOmlmKCIvIj09PXBlWzFdKXtpZigoTmU9YmUucG9wKCkpWzBdIT09cGVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrTmUuam9pbigifCIpKTtO''@;'; put 'put ''VyhvYSkscmEucHVzaChvYSl9ZWxzZSBiZS5wdXNoKFtwZVszXSwhMV0pLG9hPXthOihOZT1HdShwZVswXSkpLkF1dGhvcn07YnJlYWs7Y2FzZSJhdXRvZmlsdGVyIjppZigiLyI9PT1wZVsxXSl7aWYoKE5lPWJlLnBvcCgpKVswXSE9PXBlWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRl''@;'; put 'put ''OiAiK05lLmpvaW4oInwiKSl9ZWxzZSBpZigiLyIhPT1wZVswXS5jaGFyQXQocGVbMF0ubGVuZ3RoLTIpKXt2YXIgQm49R3UocGVbMF0pO2V0WyIhYXV0b2ZpbHRlciJdPXtyZWY6anMoQm4uUmFuZ2UpLnJlcGxhY2UoL1wkL2csIiIpfSxiZS5wdXNoKFtwZVszXSwhMF0pfWJyZWFrO2Nhc2Ui''@;'; put 'put ''ZGF0YXZhbGlkYXRpb24iOmlmKGV0WyIhdmFsaWRhdGlvbnMiXXx8KGV0WyIhdmFsaWRhdGlvbnMiXT1bXSksIi8iPT09cGVbMV0pe2lmKChOZT1iZS5wb3AoKSlbMF0hPT1wZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitOZS5qb2luKCJ8IikpfWVsc2UiLyIhPT1wZVswXS5j''@;'; put 'put ''aGFyQXQocGVbMF0ubGVuZ3RoLTIpJiZiZS5wdXNoKFtwZVszXSwhMF0pLEZpPXt9O2JyZWFrO2Nhc2UicGl4ZWxzcGVyaW5jaCI6aWYoIi8iPT09cGVbMV0pe3ZhciBGcz0rRy5zbGljZShrdCxwZS5pbmRleCk7KDcyPT1Gc3x8OTY9PUZzKSYmSjgoRnMpfWVsc2Uga3Q9cGUuaW5kZXgrcGVb''@;'; put 'put ''MF0ubGVuZ3RoO2JyZWFrO2Nhc2UiY29tcG9uZW50b3B0aW9ucyI6Y2FzZSJkb2N1bWVudHByb3BlcnRpZXMiOmNhc2UiY3VzdG9tZG9jdW1lbnRwcm9wZXJ0aWVzIjpjYXNlIm9mZmljZWRvY3VtZW50c2V0dGluZ3MiOmNhc2UicGl2b3R0YWJsZSI6Y2FzZSJwaXZvdGNhY2hlIjpjYXNlIm5h''@;'; put 'put ''bWVzIjpjYXNlIm1hcGluZm8iOmNhc2UicGFnZWJyZWFrcyI6Y2FzZSJxdWVyeXRhYmxlIjpjYXNlInNvcnRpbmciOmNhc2Uic2NoZW1hIjpjYXNlImNvbmRpdGlvbmFsZm9ybWF0dGluZyI6Y2FzZSJzbWFydHRhZ3R5cGUiOmNhc2Uic21hcnR0YWdzIjpjYXNlImV4Y2Vsd29ya2Jvb2siOmNh''@;'; put 'put ''c2Uid29ya2Jvb2tvcHRpb25zIjpjYXNlIndvcmtzaGVldG9wdGlvbnMiOmlmKCIvIj09PXBlWzFdKXtpZigoTmU9YmUucG9wKCkpWzBdIT09cGVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrTmUuam9pbigifCIpKX1lbHNlIi8iIT09cGVbMF0uY2hhckF0KHBlWzBdLmxlbmd0''@;'; put 'put ''aC0yKSYmYmUucHVzaChbcGVbM10sITBdKTticmVhaztkZWZhdWx0OmlmKDA9PWJlLmxlbmd0aCYmImRvY3VtZW50Ij09cGVbM118fDA9PWJlLmxlbmd0aCYmInVvZiI9PXBlWzNdKXJldHVybiBhXyhHLGspO3ZhciBlbD0hMDtzd2l0Y2goYmVbYmUubGVuZ3RoLTFdWzBdKXtjYXNlIm9mZmlj''@;'; put 'put ''ZWRvY3VtZW50c2V0dGluZ3MiOnN3aXRjaChwZVszXSl7Y2FzZSJhbGxvd3BuZyI6Y2FzZSJyZW1vdmVwZXJzb25hbGluZm9ybWF0aW9uIjpjYXNlImRvd25sb2FkY29tcG9uZW50cyI6Y2FzZSJsb2NhdGlvbm9mY29tcG9uZW50cyI6Y2FzZSJjb2xvcnMiOmNhc2UiY29sb3IiOmNhc2UiaW5k''@;'; put 'put ''ZXgiOmNhc2UicmdiIjpjYXNlInRhcmdldHNjcmVlbnNpemUiOmNhc2UicmVhZG9ubHlyZWNvbW1lbmRlZCI6YnJlYWs7ZGVmYXVsdDplbD0hMX1icmVhaztjYXNlImNvbXBvbmVudG9wdGlvbnMiOnN3aXRjaChwZVszXSl7Y2FzZSJ0b29sYmFyIjpjYXNlImhpZGVvZmZpY2Vsb2dvIjpjYXNl''@;'; put 'put ''InNwcmVhZHNoZWV0YXV0b2ZpdCI6Y2FzZSJsYWJlbCI6Y2FzZSJjYXB0aW9uIjpjYXNlIm1heGhlaWdodCI6Y2FzZSJtYXh3aWR0aCI6Y2FzZSJuZXh0c2hlZXRudW1iZXIiOmJyZWFrO2RlZmF1bHQ6ZWw9ITF9YnJlYWs7Y2FzZSJleGNlbHdvcmtib29rIjpzd2l0Y2gocGVbM10pe2Nhc2Ui''@;'; put 'put ''ZGF0ZTE5MDQiOkNpLldCUHJvcHMuZGF0ZTE5MDQ9ITA7YnJlYWs7Y2FzZSJ3aW5kb3doZWlnaHQiOmNhc2Uid2luZG93d2lkdGgiOmNhc2Uid2luZG93dG9weCI6Y2FzZSJ3aW5kb3d0b3B5IjpjYXNlInRhYnJhdGlvIjpjYXNlInByb3RlY3RzdHJ1Y3R1cmUiOmNhc2UicHJvdGVjdHdpbmRv''@;'; put 'put ''dyI6Y2FzZSJwcm90ZWN0d2luZG93cyI6Y2FzZSJhY3RpdmVzaGVldCI6Y2FzZSJkaXNwbGF5aW5rbm90ZXMiOmNhc2UiZmlyc3R2aXNpYmxlc2hlZXQiOmNhc2Uic3VwYm9vayI6Y2FzZSJzaGVldG5hbWUiOmNhc2Uic2hlZXRpbmRleCI6Y2FzZSJzaGVldGluZGV4Zmlyc3QiOmNhc2Uic2hl''@;'; put 'put ''ZXRpbmRleGxhc3QiOmNhc2UiZGxsIjpjYXNlImFjY2VwdGxhYmVsc2luZm9ybXVsYXMiOmNhc2UiZG9ub3RzYXZlbGlua3ZhbHVlcyI6Y2FzZSJpdGVyYXRpb24iOmNhc2UibWF4aXRlcmF0aW9ucyI6Y2FzZSJtYXhjaGFuZ2UiOmNhc2UicGF0aCI6Y2FzZSJ4Y3QiOmNhc2UiY291bnQiOmNh''@;'; put 'put ''c2Uic2VsZWN0ZWRzaGVldHMiOmNhc2UiY2FsY3VsYXRpb24iOmNhc2UidW5jYWxjZWQiOmNhc2Uic3RhcnR1cHByb21wdCI6Y2FzZSJjcm4iOmNhc2UiZXh0ZXJubmFtZSI6Y2FzZSJmb3JtdWxhIjpjYXNlImNvbGZpcnN0IjpjYXNlImNvbGxhc3QiOmNhc2Uid2FudGFkdmlzZSI6Y2FzZSJi''@;'; put 'put ''b29sZWFuIjpjYXNlImVycm9yIjpjYXNlInRleHQiOmNhc2Uib2xlIjpjYXNlIm5vYXV0b3JlY292ZXIiOmNhc2UicHVibGlzaG9iamVjdHMiOmNhc2UiZG9ub3RjYWxjdWxhdGViZWZvcmVzYXZlIjpjYXNlIm51bWJlciI6Y2FzZSJyZWZtb2RlcjFjMSI6Y2FzZSJlbWJlZHNhdmVzbWFydHRh''@;'; put 'put ''Z3MiOmJyZWFrO2RlZmF1bHQ6ZWw9ITF9YnJlYWs7Y2FzZSJ3b3JrYm9va29wdGlvbnMiOnN3aXRjaChwZVszXSl7Y2FzZSJvd2N2ZXJzaW9uIjpjYXNlImhlaWdodCI6Y2FzZSJ3aWR0aCI6YnJlYWs7ZGVmYXVsdDplbD0hMX1icmVhaztjYXNlIndvcmtzaGVldG9wdGlvbnMiOnN3aXRjaChw''@;'; put 'put ''ZVszXSl7Y2FzZSJ2aXNpYmxlIjppZigiLz4iIT09cGVbMF0uc2xpY2UoLTIpKWlmKCIvIj09PXBlWzFdKXN3aXRjaChHLnNsaWNlKHRyLHBlLmluZGV4KSl7Y2FzZSJTaGVldEhpZGRlbiI6X2EuSGlkZGVuPTE7YnJlYWs7Y2FzZSJTaGVldFZlcnlIaWRkZW4iOl9hLkhpZGRlbj0yfWVsc2Ug''@;'; put 'put ''dHI9cGUuaW5kZXgrcGVbMF0ubGVuZ3RoO2JyZWFrO2Nhc2UiaGVhZGVyIjpldFsiIW1hcmdpbnMiXXx8a20oZXRbIiFtYXJnaW5zIl09e30sInhsbWwiKSxldFsiIW1hcmdpbnMiXS5oZWFkZXI9dnIocGVbMF0pLk1hcmdpbjticmVhaztjYXNlImZvb3RlciI6ZXRbIiFtYXJnaW5zIl18fGtt''@;'; put 'put ''KGV0WyIhbWFyZ2lucyJdPXt9LCJ4bG1sIiksZXRbIiFtYXJnaW5zIl0uZm9vdGVyPXZyKHBlWzBdKS5NYXJnaW47YnJlYWs7Y2FzZSJwYWdlbWFyZ2lucyI6dmFyIEl1PXZyKHBlWzBdKTtldFsiIW1hcmdpbnMiXXx8a20oZXRbIiFtYXJnaW5zIl09e30sInhsbWwiKSxJdS5Ub3AmJihldFsi''@;'; put 'put ''IW1hcmdpbnMiXS50b3A9SXUuVG9wKSxJdS5MZWZ0JiYoZXRbIiFtYXJnaW5zIl0ubGVmdD1JdS5MZWZ0KSxJdS5SaWdodCYmKGV0WyIhbWFyZ2lucyJdLnJpZ2h0PUl1LlJpZ2h0KSxJdS5Cb3R0b20mJihldFsiIW1hcmdpbnMiXS5ib3R0b209SXUuQm90dG9tKTticmVhaztjYXNlImRpc3Bs''@;'; put 'put ''YXlyaWdodHRvbGVmdCI6Q2kuVmlld3N8fChDaS5WaWV3cz1bXSksQ2kuVmlld3NbMF18fChDaS5WaWV3c1swXT17fSksQ2kuVmlld3NbMF0uUlRMPSEwO2JyZWFrO2Nhc2UiZnJlZXplcGFuZXMiOmNhc2UiZnJvemVubm9zcGxpdCI6Y2FzZSJhY3RpdmVyb3ciOmNhc2UiYWN0aXZlY29sIjpj''@;'; put 'put ''YXNlInRvcHJvd2JvdHRvbXBhbmUiOmNhc2UibGVmdGNvbHVtbnJpZ2h0cGFuZSI6Y2FzZSJ1bnN5bmNlZCI6Y2FzZSJwcmludCI6Y2FzZSJwcmludGVycm9ycyI6Y2FzZSJwYW5lcyI6Y2FzZSJzY2FsZSI6Y2FzZSJwYW5lIjpjYXNlIm51bWJlciI6Y2FzZSJsYXlvdXQiOmNhc2UicGFnZXNl''@;'; put 'put ''dHVwIjpjYXNlInNlbGVjdGVkIjpjYXNlInByb3RlY3RvYmplY3RzIjpjYXNlImVuYWJsZXNlbGVjdGlvbiI6Y2FzZSJwcm90ZWN0c2NlbmFyaW9zIjpjYXNlInZhbGlkcHJpbnRlcmluZm8iOmNhc2UiaG9yaXpvbnRhbHJlc29sdXRpb24iOmNhc2UidmVydGljYWxyZXNvbHV0aW9uIjpjYXNl''@;'; put 'put ''Im51bWJlcm9mY29waWVzIjpjYXNlImFjdGl2ZXBhbmUiOmNhc2UidG9wcm93dmlzaWJsZSI6Y2FzZSJsZWZ0Y29sdW1udmlzaWJsZSI6Y2FzZSJmaXR0b3BhZ2UiOmNhc2UicmFuZ2VzZWxlY3Rpb24iOmNhc2UicGFwZXJzaXplaW5kZXgiOmNhc2UicGFnZWxheW91dHpvb20iOmNhc2UicGFn''@;'; put 'put ''ZWJyZWFrem9vbSI6Y2FzZSJmaWx0ZXJvbiI6Y2FzZSJmaXR3aWR0aCI6Y2FzZSJmaXRoZWlnaHQiOmNhc2UiY29tbWVudHNsYXlvdXQiOmNhc2Uiem9vbSI6Y2FzZSJsZWZ0dG9yaWdodCI6Y2FzZSJncmlkbGluZXMiOmNhc2UiYWxsb3dzb3J0IjpjYXNlImFsbG93ZmlsdGVyIjpjYXNlImFs''@;'; put 'put ''bG93aW5zZXJ0cm93cyI6Y2FzZSJhbGxvd2RlbGV0ZXJvd3MiOmNhc2UiYWxsb3dpbnNlcnRjb2xzIjpjYXNlImFsbG93ZGVsZXRlY29scyI6Y2FzZSJhbGxvd2luc2VydGh5cGVybGlua3MiOmNhc2UiYWxsb3dmb3JtYXRjZWxscyI6Y2FzZSJhbGxvd3NpemVjb2xzIjpjYXNlImFsbG93c2l6''@;'; put 'put ''ZXJvd3MiOmNhc2UidGFiY29sb3JpbmRleCI6Y2FzZSJkb25vdGRpc3BsYXloZWFkaW5ncyI6Y2FzZSJzaG93cGFnZWxheW91dHpvb20iOmNhc2UiYmxhY2thbmR3aGl0ZSI6Y2FzZSJkb25vdGRpc3BsYXl6ZXJvcyI6Y2FzZSJkaXNwbGF5cGFnZWJyZWFrIjpjYXNlInJvd2NvbGhlYWRpbmdz''@;'; put 'put ''IjpjYXNlImRvbm90ZGlzcGxheW91dGxpbmUiOmNhc2Uibm9vcmllbnRhdGlvbiI6Y2FzZSJhbGxvd3VzZXBpdm90dGFibGVzIjpjYXNlInplcm9oZWlnaHQiOmNhc2Uidmlld2FibGVyYW5nZSI6Y2FzZSJzZWxlY3Rpb24iOmNhc2UicHJvdGVjdGNvbnRlbnRzIjpicmVhaztjYXNlInNwbGl0''@;'; put 'put ''aG9yaXpvbnRhbCI6Y2FzZSJzcGxpdHZlcnRpY2FsIjppZigiLz4iIT09cGVbMF0uc2xpY2UoLTIpKWlmKCIvIj09cGVbMV0pe2V0WyIhZnJlZXplIl18fChldFsiIWZyZWV6ZSJdPSJBMSIpO3ZhciBwdT1BbyhldFsiIWZyZWV6ZSJdKTsic3BsaXRob3Jpem9udGFsIj09cGVbM10/cHUucj0r''@;'; put 'put ''Ry5zbGljZSh0cixwZS5pbmRleCk6cHUuYz0rRy5zbGljZSh0cixwZS5pbmRleCksZXRbIiFmcmVlemUiXT1HaShwdSl9ZWxzZSB0cj1wZS5pbmRleCtwZVswXS5sZW5ndGg7YnJlYWs7Y2FzZSJkb25vdGRpc3BsYXlncmlkbGluZXMiOmV0WyIhZ3JpZGxpbmVzIl09ITE7YnJlYWs7Y2FzZSJu''@;'; put 'put ''b3N1bW1hcnlyb3dzYmVsb3dkZXRhaWwiOmV0WyIhb3V0bGluZSJdfHwoZXRbIiFvdXRsaW5lIl09e30pLGV0WyIhb3V0bGluZSJdLmFib3ZlPSEwO2JyZWFrO2Nhc2Uibm9zdW1tYXJ5Y29sdW1uc3JpZ2h0ZGV0YWlsIjpldFsiIW91dGxpbmUiXXx8KGV0WyIhb3V0bGluZSJdPXt9KSxldFsi''@;'; put 'put ''IW91dGxpbmUiXS5sZWZ0PSEwO2JyZWFrO2RlZmF1bHQ6ZWw9ITF9YnJlYWs7Y2FzZSJwaXZvdHRhYmxlIjpjYXNlInBpdm90Y2FjaGUiOnN3aXRjaChwZVszXSl7Y2FzZSJpbW1lZGlhdGVpdGVtc29uZHJvcCI6Y2FzZSJzaG93cGFnZW11bHRpcGxlaXRlbWxhYmVsIjpjYXNlImNvbXBhY3Ry''@;'; put 'put ''b3dpbmRlbnQiOmNhc2UibG9jYXRpb24iOmNhc2UicGl2b3RmaWVsZCI6Y2FzZSJvcmllbnRhdGlvbiI6Y2FzZSJsYXlvdXRmb3JtIjpjYXNlImxheW91dHN1YnRvdGFsbG9jYXRpb24iOmNhc2UibGF5b3V0Y29tcGFjdHJvdyI6Y2FzZSJwb3NpdGlvbiI6Y2FzZSJwaXZvdGl0ZW0iOmNhc2Ui''@;'; put 'put ''ZGF0YXR5cGUiOmNhc2UiZGF0YWZpZWxkIjpjYXNlInNvdXJjZW5hbWUiOmNhc2UicGFyZW50ZmllbGQiOmNhc2UicHRsaW5laXRlbXMiOmNhc2UicHRsaW5laXRlbSI6Y2FzZSJjb3VudG9mc2FtZWl0ZW1zIjpjYXNlIml0ZW0iOmNhc2UiaXRlbXR5cGUiOmNhc2UicHRzb3VyY2UiOmNhc2Ui''@;'; put 'put ''Y2FjaGVpbmRleCI6Y2FzZSJjb25zb2xpZGF0aW9ucmVmZXJlbmNlIjpjYXNlImZpbGVuYW1lIjpjYXNlInJlZmVyZW5jZSI6Y2FzZSJub2NvbHVtbmdyYW5kIjpjYXNlIm5vcm93Z3JhbmQiOmNhc2UiYmxhbmtsaW5lYWZ0ZXJpdGVtcyI6Y2FzZSJoaWRkZW4iOmNhc2Uic3VidG90YWwiOmNh''@;'; put 'put ''c2UiYmFzZWZpZWxkIjpjYXNlIm1hcGNoaWxkaXRlbXMiOmNhc2UiZnVuY3Rpb24iOmNhc2UicmVmcmVzaG9uZmlsZW9wZW4iOmNhc2UicHJpbnRzZXR0aXRsZXMiOmNhc2UibWVyZ2VsYWJlbHMiOmNhc2UiZGVmYXVsdHZlcnNpb24iOmNhc2UicmVmcmVzaG5hbWUiOmNhc2UicmVmcmVzaGRh''@;'; put 'put ''dGUiOmNhc2UicmVmcmVzaGRhdGVjb3B5IjpjYXNlInZlcnNpb25sYXN0cmVmcmVzaCI6Y2FzZSJ2ZXJzaW9ubGFzdHVwZGF0ZSI6Y2FzZSJ2ZXJzaW9udXBkYXRlYWJsZW1pbiI6Y2FzZSJ2ZXJzaW9ucmVmcmVzaGFibGVtaW4iOmNhc2UiY2FsY3VsYXRpb24iOmJyZWFrO2RlZmF1bHQ6ZWw9''@;'; put 'put ''ITF9YnJlYWs7Y2FzZSJwYWdlYnJlYWtzIjpzd2l0Y2gocGVbM10pe2Nhc2UiY29sYnJlYWtzIjpjYXNlImNvbGJyZWFrIjpjYXNlInJvd2JyZWFrcyI6Y2FzZSJyb3dicmVhayI6Y2FzZSJjb2xzdGFydCI6Y2FzZSJjb2xlbmQiOmNhc2Uicm93ZW5kIjpicmVhaztkZWZhdWx0OmVsPSExfWJy''@;'; put 'put ''ZWFrO2Nhc2UiYXV0b2ZpbHRlciI6c3dpdGNoKHBlWzNdKXtjYXNlImF1dG9maWx0ZXJjb2x1bW4iOmNhc2UiYXV0b2ZpbHRlcmNvbmRpdGlvbiI6Y2FzZSJhdXRvZmlsdGVyYW5kIjpjYXNlImF1dG9maWx0ZXJvciI6YnJlYWs7ZGVmYXVsdDplbD0hMX1icmVhaztjYXNlInF1ZXJ5dGFibGUi''@;'; put 'put ''OnN3aXRjaChwZVszXSl7Y2FzZSJpZCI6Y2FzZSJhdXRvZm9ybWF0Zm9udCI6Y2FzZSJhdXRvZm9ybWF0cGF0dGVybiI6Y2FzZSJxdWVyeXNvdXJjZSI6Y2FzZSJxdWVyeXR5cGUiOmNhc2UiZW5hYmxlcmVkaXJlY3Rpb25zIjpjYXNlInJlZnJlc2hlZGlueGw5IjpjYXNlInVybHN0cmluZyI6''@;'; put 'put ''Y2FzZSJodG1sdGFibGVzIjpjYXNlImNvbm5lY3Rpb24iOmNhc2UiY29tbWFuZHRleHQiOmNhc2UicmVmcmVzaGluZm8iOmNhc2Uibm90aXRsZXMiOmNhc2UibmV4dGlkIjpjYXNlImNvbHVtbmluZm8iOmNhc2Uib3ZlcndyaXRlY2VsbHMiOmNhc2UiZG9ub3Rwcm9tcHRmb3JmaWxlIjpjYXNl''@;'; put 'put ''InRleHR3aXphcmRzZXR0aW5ncyI6Y2FzZSJzb3VyY2UiOmNhc2UibnVtYmVyIjpjYXNlImRlY2ltYWwiOmNhc2UidGhvdXNhbmRzZXBhcmF0b3IiOmNhc2UidHJhaWxpbmdtaW51c251bWJlcnMiOmNhc2UiZm9ybWF0c2V0dGluZ3MiOmNhc2UiZmllbGR0eXBlIjpjYXNlImRlbGltaXRlcnMi''@;'; put 'put ''OmNhc2UidGFiIjpjYXNlImNvbW1hIjpjYXNlImF1dG9mb3JtYXRuYW1lIjpjYXNlInZlcnNpb25sYXN0ZWRpdCI6Y2FzZSJ2ZXJzaW9ubGFzdHJlZnJlc2giOmJyZWFrO2RlZmF1bHQ6ZWw9ITF9YnJlYWs7Y2FzZSJkYXRhdmFsaWRhdGlvbiI6c3dpdGNoKHBlWzNdKXtjYXNlInJhbmdlIjpG''@;'; put 'put ''aS5yZWY9cGU7YnJlYWs7Y2FzZSJ0eXBlIjpjYXNlIm1pbiI6Y2FzZSJtYXgiOmNhc2Uic29ydCI6Y2FzZSJkZXNjZW5kaW5nIjpjYXNlIm9yZGVyIjpjYXNlImNhc2VzZW5zaXRpdmUiOmNhc2UidmFsdWUiOmNhc2UiZXJyb3JzdHlsZSI6Y2FzZSJlcnJvcm1lc3NhZ2UiOmNhc2UiZXJyb3J0''@;'; put 'put ''aXRsZSI6Y2FzZSJpbnB1dG1lc3NhZ2UiOmNhc2UiaW5wdXR0aXRsZSI6Y2FzZSJjb21ib2hpZGUiOmNhc2UiaW5wdXRoaWRlIjpjYXNlImNvbmRpdGlvbiI6Y2FzZSJxdWFsaWZpZXIiOmNhc2UidXNlYmxhbmsiOmNhc2UidmFsdWUxIjpjYXNlInZhbHVlMiI6Y2FzZSJmb3JtYXQiOmNhc2Ui''@;'; put 'put ''Y2VsbHJhbmdlbGlzdCI6YnJlYWs7ZGVmYXVsdDplbD0hMX1icmVhaztjYXNlInNvcnRpbmciOmNhc2UiY29uZGl0aW9uYWxmb3JtYXR0aW5nIjpzd2l0Y2gocGVbM10pe2Nhc2UicmFuZ2UiOmNhc2UidHlwZSI6Y2FzZSJtaW4iOmNhc2UibWF4IjpjYXNlInNvcnQiOmNhc2UiZGVzY2VuZGlu''@;'; put 'put ''ZyI6Y2FzZSJvcmRlciI6Y2FzZSJjYXNlc2Vuc2l0aXZlIjpjYXNlInZhbHVlIjpjYXNlImVycm9yc3R5bGUiOmNhc2UiZXJyb3JtZXNzYWdlIjpjYXNlImVycm9ydGl0bGUiOmNhc2UiY2VsbHJhbmdlbGlzdCI6Y2FzZSJpbnB1dG1lc3NhZ2UiOmNhc2UiaW5wdXR0aXRsZSI6Y2FzZSJjb21i''@;'; put 'put ''b2hpZGUiOmNhc2UiaW5wdXRoaWRlIjpjYXNlImNvbmRpdGlvbiI6Y2FzZSJxdWFsaWZpZXIiOmNhc2UidXNlYmxhbmsiOmNhc2UidmFsdWUxIjpjYXNlInZhbHVlMiI6Y2FzZSJmb3JtYXQiOmJyZWFrO2RlZmF1bHQ6ZWw9ITF9YnJlYWs7Y2FzZSJtYXBpbmZvIjpjYXNlInNjaGVtYSI6Y2Fz''@;'; put 'put ''ZSJkYXRhIjpzd2l0Y2gocGVbM10pe2Nhc2UibWFwIjpjYXNlImVudHJ5IjpjYXNlInJhbmdlIjpjYXNlInhwYXRoIjpjYXNlImZpZWxkIjpjYXNlInhzZHR5cGUiOmNhc2UiZmlsdGVyb24iOmNhc2UiYWdncmVnYXRlIjpjYXNlImVsZW1lbnR0eXBlIjpjYXNlImF0dHJpYnV0ZXR5cGUiOmNh''@;'; put 'put ''c2Uic2NoZW1hIjpjYXNlImVsZW1lbnQiOmNhc2UiY29tcGxleHR5cGUiOmNhc2UiZGF0YXR5cGUiOmNhc2UiYWxsIjpjYXNlImF0dHJpYnV0ZSI6Y2FzZSJleHRlbmRzIjpjYXNlInJvdyI6YnJlYWs7ZGVmYXVsdDplbD0hMX1icmVhaztjYXNlInNtYXJ0dGFncyI6YnJlYWs7ZGVmYXVsdDpl''@;'; put 'put ''bD0hMX1pZihlbHx8cGVbM10ubWF0Y2goLyFcW0NEQVRBLykpYnJlYWs7aWYoIWJlW2JlLmxlbmd0aC0xXVsxXSl0aHJvdyJVbnJlY29nbml6ZWQgdGFnOiAiK3BlWzNdKyJ8IitiZS5qb2luKCJ8Iik7aWYoImN1c3RvbWRvY3VtZW50cHJvcGVydGllcyI9PT1iZVtiZS5sZW5ndGgtMV1bMF0p''@;'; put 'put ''e2lmKCIvPiI9PT1wZVswXS5zbGljZSgtMikpYnJlYWs7Ii8iPT09cGVbMV0/T1coeXIsZm8sd2ksRy5zbGljZSh0cixwZS5pbmRleCkpOih3aT1wZSx0cj1wZS5pbmRleCtwZVswXS5sZW5ndGgpO2JyZWFrfWlmKGsuV1RGKXRocm93IlVucmVjb2duaXplZCB0YWc6ICIrcGVbM10rInwiK2Jl''@;'; put 'put ''LmpvaW4oInwiKX12YXIgVmM9e307cmV0dXJuIWsuYm9va1NoZWV0cyYmIWsuYm9va1Byb3BzJiYoVmMuU2hlZXRzPUJlKSxWYy5TaGVldE5hbWVzPUdlLFZjLldvcmtib29rPUNpLFZjLlNTRj1BLmdldF90YWJsZSgpLFZjLlByb3BzPXByLFZjLkN1c3Rwcm9wcz15cixWYy5TaGVldHMmJlZj''@;'; put 'put ''LlNoZWV0TmFtZXMuZm9yRWFjaChmdW5jdGlvbihvMSl7dmFyIEJjPVZjLlNoZWV0c1tvMV07QmNbIiFtZXJnZXMiXSYmQmNbIiFtZXJnZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKGNuKXsic3RyaW5nIj09dHlwZW9mIGNuJiYoY249dy51dGlscy5kZWNvZGVfcmFuZ2UoY24pKTt2YXIgQW49dy51''@;'; put 'put ''dGlscy5lbmNvZGVfY2VsbChjbi5zKSxHbj1BcnJheS5pc0FycmF5KEJjKT8oQmNbY24ucy5yXXx8W10pW2NuLnMuY106QmNbQW5dO0duJiZHbi5zJiYobnVsbCE9R24ucy50b3AmJncwLnNoZWV0X3NldF9yYW5nZV9zdHlsZShCYyxjbix7dG9wOkduLnMudG9wfSksbnVsbCE9R24ucy5ib3R0''@;'; put 'put ''b20mJncwLnNoZWV0X3NldF9yYW5nZV9zdHlsZShCYyxjbix7Ym90dG9tOkduLnMuYm90dG9tfSksbnVsbCE9R24ucy5sZWZ0JiZ3MC5zaGVldF9zZXRfcmFuZ2Vfc3R5bGUoQmMsY24se2xlZnQ6R24ucy5sZWZ0fSksbnVsbCE9R24ucy5yaWdodCYmdzAuc2hlZXRfc2V0X3JhbmdlX3N0eWxl''@;'; put 'put ''KEJjLGNuLHtyaWdodDpHbi5zLnJpZ2h0fSkpfSl9KSxWY31mdW5jdGlvbiBsTyhTLEwpe3N3aXRjaChsRShMPUx8fHt9KSxMLnR5cGV8fCJiYXNlNjQiKXtjYXNlImJhc2U2NCI6cmV0dXJuICR4KF9lLmRlY29kZShTKSxMKTtjYXNlImJpbmFyeSI6Y2FzZSJidWZmZXIiOmNhc2UiZmlsZSI6''@;'; put 'put ''cmV0dXJuICR4KFMsTCk7Y2FzZSJhcnJheSI6cmV0dXJuICR4KEMoUyksTCl9fWZ1bmN0aW9uIGVfKFMpe3JldHVybiBqcigiTmFtZWRSYW5nZSIsbnVsbCx7InNzOk5hbWUiOlMuTmFtZSwic3M6UmVmZXJzVG8iOiI9IiskcChTLlJlZix7cjowLGM6MH0pfSl9ZnVuY3Rpb24gdU8oUyxMLGss''@;'; put 'put ''RyxRLGxlLG1lKXtpZighU3x8bnVsbD09Uy52JiZudWxsPT1TLmYmJiFHLnNoZWV0U3R1YnMpcmV0dXJuIiI7dmFyIHBlPXt9O2lmKFMuZiYmKHBlWyJzczpGb3JtdWxhIl09Ij0iK2hpKCRwKFMuZixtZSkpKSxTLkYmJlMuRi5zbGljZSgwLEwubGVuZ3RoKT09TCl7dmFyIGJlPUFvKFMuRi5z''@;'; put 'put ''bGljZShMLmxlbmd0aCsxKSk7cGVbInNzOkFycmF5UmFuZ2UiXT0iUkM6UiIrKGJlLnI9PW1lLnI/IiI6IlsiKyhiZS5yLW1lLnIpKyJdIikrIkMiKyhiZS5jPT1tZS5jPyIiOiJbIisoYmUuYy1tZS5jKSsiXSIpfWlmKFMubCYmUy5sLlRhcmdldCYmKHBlWyJzczpIUmVmIl09aGkoUy5sLlRh''@;'; put 'put ''cmdldCksUy5sLlRvb2x0aXAmJihwZVsieDpIUmVmU2NyZWVuVGlwIl09aGkoUy5sLlRvb2x0aXApKSksa1siIW1lcmdlcyJdKWZvcih2YXIgTmU9a1siIW1lcmdlcyJdLEJlPTA7QmUhPU5lLmxlbmd0aDsrK0JlKU5lW0JlXS5zLmMhPW1lLmN8fE5lW0JlXS5zLnIhPW1lLnJ8fChOZVtCZV0u''@;'; put 'put ''ZS5jPk5lW0JlXS5zLmMmJihwZVsic3M6TWVyZ2VBY3Jvc3MiXT1OZVtCZV0uZS5jLU5lW0JlXS5zLmMpLE5lW0JlXS5lLnI+TmVbQmVdLnMuciYmKHBlWyJzczpNZXJnZURvd24iXT1OZVtCZV0uZS5yLU5lW0JlXS5zLnIpKTt2YXIgR2U9IiIsZXQ9IiI7c3dpdGNoKFMudCl7Y2FzZSJ6Ijpp''@;'; put 'put ''ZighRy5zaGVldFN0dWJzKXJldHVybiIiO2JyZWFrO2Nhc2UibiI6R2U9Ik51bWJlciIsZXQ9U3RyaW5nKFMudik7YnJlYWs7Y2FzZSJiIjpHZT0iQm9vbGVhbiIsZXQ9Uy52PyIxIjoiMCI7YnJlYWs7Y2FzZSJlIjpHZT0iRXJyb3IiLGV0PW9kW1Mudl07YnJlYWs7Y2FzZSJkIjpHZT0iRGF0''@;'; put 'put ''ZVRpbWUiLGV0PW5ldyBEYXRlKFMudikudG9JU09TdHJpbmcoKSxudWxsPT1TLnomJihTLno9Uy56fHxBLl90YWJsZVsxNF0pO2JyZWFrO2Nhc2UicyI6R2U9IlN0cmluZyIsZXQ9TWkoUy52fHwiIil9dmFyIGN0PV8wKEcuY2VsbFhmcyxudWxsLFMsRyk7cGVbInNzOlN0eWxlSUQiXT0icyIr''@;'; put 'put ''KDIxK2N0KSxwZVsic3M6SW5kZXgiXT1tZS5jKzE7dmFyIHh0PW51bGwhPVMudj9ldDoiIixvdD0ieiI9PVMudD8iIjpTLlI/ZnVuY3Rpb24gUjcoUyl7cmV0dXJuJzxzczpEYXRhIHNzOlR5cGU9IlN0cmluZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPicrUy5t''@;'; put 'put ''YXAoZnVuY3Rpb24oayl7dmFyIEc9TWkoay52KTtyZXR1cm4gay5zJiYoay5zLmJvbGQmJihHPSI8Qj4iK0crIjwvQj4iKSxrLnMuaXRhbGljJiYoRz0iPEk+IitHKyI8L0k+Iiksay5zLnN0cmlrZSYmKEc9IjxTPiIrRysiPC9TPiIpLGsucy51bmRlcmxpbmUmJihHPSI8VT4iK0crIjwvVT4i''@;'; put 'put ''KSwic3VwZXIiPT1rLnMudmFsaWduJiYoRz0iPFN1cD4iK0crIjwvU3VwPiIpLCJzdWIiPT1rLnMudmFsaWduJiYoRz0iPFN1Yj4iK0crIjwvU3ViPiIpLChrLnMubmFtZXx8ay5zLnN6fHxrLnMuY29sb3ImJm51bGwhPWsucy5jb2xvci5yZ2IpJiYoRz1bIjxGb250IixrLnMubmFtZT8nIGh0''@;'; put 'put ''bWw6RmFjZT0iJytrLnMubmFtZSsnIic6IiIsay5zLnN6PycgaHRtbDpTaXplPSInK2sucy5zeisnIic6IiIsay5zLmNvbG9yPycgaHRtbDpDb2xvcj0iIycrKCIwMDAwMDAiKygibnVtYmVyIj09dHlwZW9mIGsucy5jb2xvci5yZ2I/ay5zLmNvbG9yLnJnYi50b1N0cmluZygxNik6ay5zLmNv''@;'; put 'put ''bG9yLnJnYikpLnNsaWNlKC02KSsnIic6IiIsIj4iLEcsIjwvRm9udD4iXS5qb2luKCIiKSkpLEd9KS5qb2luKCIiKSsiPC9EYXRhPiJ9KFMuUik6JzxEYXRhIHNzOlR5cGU9IicrR2UrJyI+Jyt4dCsiPC9EYXRhPiI7cmV0dXJuKFMuY3x8W10pLmxlbmd0aD4wJiYob3QrPWZ1bmN0aW9uIGNP''@;'; put 'put ''KFMpe3JldHVybiBTLm1hcChmdW5jdGlvbihMKXt2YXIgRz1qcigic3M6RGF0YSIsZWEoTC50fHwiIikse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIn0pO3JldHVybiBqcigiQ29tbWVudCIsRyx7InNzOkF1dGhvciI6TC5hfSl9KS5qb2luKCIiKX0oUy5jKSksanIo''@;'; put 'put ''IkNlbGwiLG90LHBlKX1mdW5jdGlvbiB6VyhTLEwpe3ZhciBrPSc8Um93IHNzOkluZGV4PSInKyhTKzEpKyciJztyZXR1cm4gTCYmKEwuaHB4JiYhTC5ocHQmJihMLmhwdD1WcChMLmhweCkpLEwuaHB0JiYoays9JyBzczpBdXRvRml0SGVpZ2h0PSIwIiBzczpIZWlnaHQ9IicrTC5ocHQrJyIn''@;'; put 'put ''KSxMLmhpZGRlbiYmKGsrPScgc3M6SGlkZGVuPSIxIicpKSxrKyI+In1mdW5jdGlvbiBkTyhTLEwsayl7dmFyIEc9W10sbGU9ay5TaGVldHNbay5TaGVldE5hbWVzW1NdXSxtZT1sZT9mdW5jdGlvbiBLeChTLEwsayxHKXtpZighU3x8ISgoR3x8e30pLldvcmtib29rfHx7fSkuTmFtZXMpcmV0''@;'; put 'put ''dXJuIiI7Zm9yKHZhciBRPUcuV29ya2Jvb2suTmFtZXMsbGU9W10sbWU9MDttZTxRLmxlbmd0aDsrK21lKXt2YXIgcGU9UVttZV07cGUuU2hlZXQ9PWsmJihwZS5OYW1lLm1hdGNoKC9eX3hsZm5cLi8pfHxsZS5wdXNoKGVfKHBlKSkpfXJldHVybiBsZS5qb2luKCIiKX0obGUsMCxTLGspOiIi''@;'; put 'put ''O3JldHVybiBtZS5sZW5ndGg+MCYmRy5wdXNoKCI8TmFtZXM+IittZSsiPC9OYW1lcz4iKSxtZT1sZT9mdW5jdGlvbiBMNyhTLEwpe2lmKCFTWyIhcmVmIl0pcmV0dXJuIiI7dmFyIFE9dG8oU1siIXJlZiJdKSxsZT1TWyIhbWVyZ2VzIl18fFtdLG1lPTAscGU9W107U1siIWNvbHMiXSYmU1si''@;'; put 'put ''IWNvbHMiXS5mb3JFYWNoKGZ1bmN0aW9uKGJ0LEZ0KXtyMShidCk7dmFyIGt0PSEhYnQud2lkdGgsTHQ9aXgoRnQsYnQpLEp0PXsic3M6SW5kZXgiOkZ0KzF9O2t0JiYoSnRbInNzOldpZHRoIl09cG0oTHQud2lkdGgpKSxidC5oaWRkZW4mJihKdFsic3M6SGlkZGVuIl09IjEiKSxwZS5wdXNo''@;'; put 'put ''KGpyKCJDb2x1bW4iLG51bGwsSnQpKX0pO2Zvcih2YXIgYmU9QXJyYXkuaXNBcnJheShTKSxOZT1RLnMucjtOZTw9US5lLnI7KytOZSl7Zm9yKHZhciBCZT1belcoTmUsKFNbIiFyb3dzIl18fFtdKVtOZV0pXSxHZT1RLnMuYztHZTw9US5lLmM7KytHZSl7dmFyIGV0PSExO2ZvcihtZT0wO21l''@;'; put 'put ''IT1sZS5sZW5ndGg7KyttZSlpZighKGxlW21lXS5zLmM+R2V8fGxlW21lXS5zLnI+TmV8fGxlW21lXS5lLmM8R2V8fGxlW21lXS5lLnI8TmUpKXsobGVbbWVdLnMuYyE9R2V8fGxlW21lXS5zLnIhPU5lKSYmKGV0PSEwKTticmVha31pZighZXQpe3ZhciBjdD17cjpOZSxjOkdlfSx4dD1HaShj''@;'; put 'put ''dCk7QmUucHVzaCh1TyhiZT8oU1tOZV18fFtdKVtHZV06U1t4dF0seHQsUyxMLDAsMCxjdCkpfX1CZS5wdXNoKCI8L1Jvdz4iKSxCZS5sZW5ndGg+MiYmcGUucHVzaChCZS5qb2luKCIiKSl9cmV0dXJuIHBlLmpvaW4oIiIpfShsZSxMKToiIixtZS5sZW5ndGg+MCYmRy5wdXNoKCI8VGFibGU+''@;'; put 'put ''IittZSsiPC9UYWJsZT4iKSxHLnB1c2goZnVuY3Rpb24gdF8oUyxMLGssRyl7aWYoIVMpcmV0dXJuIiI7dmFyIFE9W107aWYoU1siIW1hcmdpbnMiXSYmKFEucHVzaCgiPFBhZ2VTZXR1cD4iKSxTWyIhbWFyZ2lucyJdLmhlYWRlciYmUS5wdXNoKGpyKCJIZWFkZXIiLG51bGwseyJ4Ok1hcmdp''@;'; put 'put ''biI6U1siIW1hcmdpbnMiXS5oZWFkZXJ9KSksU1siIW1hcmdpbnMiXS5mb290ZXImJlEucHVzaChqcigiRm9vdGVyIixudWxsLHsieDpNYXJnaW4iOlNbIiFtYXJnaW5zIl0uZm9vdGVyfSkpLFEucHVzaChqcigiUGFnZU1hcmdpbnMiLG51bGwseyJ4OkJvdHRvbSI6U1siIW1hcmdpbnMiXS5i''@;'; put 'put ''b3R0b218fCIwLjc1IiwieDpMZWZ0IjpTWyIhbWFyZ2lucyJdLmxlZnR8fCIwLjciLCJ4OlJpZ2h0IjpTWyIhbWFyZ2lucyJdLnJpZ2h0fHwiMC43IiwieDpUb3AiOlNbIiFtYXJnaW5zIl0udG9wfHwiMC43NSJ9KSksUS5wdXNoKCI8L1BhZ2VTZXR1cD4iKSksRyYmRy5Xb3JrYm9vayYmRy5X''@;'; put 'put ''b3JrYm9vay5TaGVldHMmJkcuV29ya2Jvb2suU2hlZXRzW2tdKWlmKEcuV29ya2Jvb2suU2hlZXRzW2tdLkhpZGRlbilRLnB1c2goanIoIlZpc2libGUiLDE9PUcuV29ya2Jvb2suU2hlZXRzW2tdLkhpZGRlbj8iU2hlZXRIaWRkZW4iOiJTaGVldFZlcnlIaWRkZW4iLHt9KSk7ZWxzZXtmb3Io''@;'; put 'put ''dmFyIGxlPTA7bGU8ayYmKCFHLldvcmtib29rLlNoZWV0c1tsZV18fEcuV29ya2Jvb2suU2hlZXRzW2xlXS5IaWRkZW4pOysrbGUpO2xlPT1rJiZRLnB1c2goIjxTZWxlY3RlZC8+Iil9aWYoKCgoKEd8fHt9KS5Xb3JrYm9va3x8e30pLlZpZXdzfHxbXSlbMF18fHt9KS5SVEwmJlEucHVzaCgi''@;'; put 'put ''PERpc3BsYXlSaWdodFRvTGVmdC8+IiksQnQoU1siIWdyaWRsaW5lcyJdKSYmUS5wdXNoKCI8RG9Ob3REaXNwbGF5R3JpZGxpbmVzLz4iKSxTWyIhZnJlZXplIl0pe1EucHVzaCgiPEZyZWV6ZVBhbmVzLz4iKSxRLnB1c2goIjxGcm96ZW5Ob1NwbGl0Lz4iKTt2YXIgbWU9QW8oU1siIWZyZWV6''@;'; put 'put ''ZSJdKTttZS5yPjAmJihRLnB1c2goWm8oIlNwbGl0SG9yaXpvbnRhbCIsIiIrbWUucikpLFEucHVzaChabygiVG9wUm93Qm90dG9tUGFuZSIsIiIrbWUucikpKSxtZS5jPjAmJihRLnB1c2goWm8oIlNwbGl0VmVydGljYWwiLCIiK21lLmMpKSxRLnB1c2goWm8oIkxlZnRDb2x1bW5SaWdodFBh''@;'; put 'put ''bmUiLCIiK21lLmMpKSl9cmV0dXJuIFNbIiFwcm90ZWN0Il0mJihRLnB1c2goWm8oIlByb3RlY3RDb250ZW50cyIsIlRydWUiKSksU1siIXByb3RlY3QiXS5vYmplY3RzJiZRLnB1c2goWm8oIlByb3RlY3RPYmplY3RzIiwiVHJ1ZSIpKSxTWyIhcHJvdGVjdCJdLnNjZW5hcmlvcyYmUS5wdXNo''@;'; put 'put ''KFpvKCJQcm90ZWN0U2NlbmFyaW9zIiwiVHJ1ZSIpKSxudWxsPT1TWyIhcHJvdGVjdCJdLnNlbGVjdExvY2tlZENlbGxzfHxTWyIhcHJvdGVjdCJdLnNlbGVjdExvY2tlZENlbGxzP251bGwhPVNbIiFwcm90ZWN0Il0uc2VsZWN0VW5sb2NrZWRDZWxscyYmIVNbIiFwcm90ZWN0Il0uc2VsZWN0''@;'; put 'put ''VW5sb2NrZWRDZWxscyYmUS5wdXNoKFpvKCJFbmFibGVTZWxlY3Rpb24iLCJVbmxvY2tlZENlbGxzIikpOlEucHVzaChabygiRW5hYmxlU2VsZWN0aW9uIiwiTm9TZWxlY3Rpb24iKSksW1siZm9ybWF0Q2VsbHMiLCJBbGxvd0Zvcm1hdENlbGxzIl0sWyJmb3JtYXRDb2x1bW5zIiwiQWxsb3dT''@;'; put 'put ''aXplQ29scyJdLFsiZm9ybWF0Um93cyIsIkFsbG93U2l6ZVJvd3MiXSxbImluc2VydENvbHVtbnMiLCJBbGxvd0luc2VydENvbHMiXSxbImluc2VydFJvd3MiLCJBbGxvd0luc2VydFJvd3MiXSxbImluc2VydEh5cGVybGlua3MiLCJBbGxvd0luc2VydEh5cGVybGlua3MiXSxbImRlbGV0ZUNv''@;'; put 'put ''bHVtbnMiLCJBbGxvd0RlbGV0ZUNvbHMiXSxbImRlbGV0ZVJvd3MiLCJBbGxvd0RlbGV0ZVJvd3MiXSxbInNvcnQiLCJBbGxvd1NvcnQiXSxbImF1dG9GaWx0ZXIiLCJBbGxvd0ZpbHRlciJdLFsicGl2b3RUYWJsZXMiLCJBbGxvd1VzZVBpdm90VGFibGVzIl1dLmZvckVhY2goZnVuY3Rpb24o''@;'; put 'put ''cGUpe1NbIiFwcm90ZWN0Il1bcGVbMF1dJiZRLnB1c2goIjwiK3BlWzFdKyIvPiIpfSkpLDA9PVEubGVuZ3RoPyIiOmpyKCJXb3Jrc2hlZXRPcHRpb25zIixRLmpvaW4oIiIpLHt4bWxuczpLY194fSl9KGxlLDAsUyxrKSksRy5qb2luKCIiKX1mdW5jdGlvbiBoTyhTLEwpe0x8fChMPXt9KSxT''@;'; put 'put ''LlNTRnx8KFMuU1NGPUEuZ2V0X3RhYmxlKCkpLFMuU1NGJiYoYWUoQSksQS5sb2FkX3RhYmxlKFMuU1NGKSxMLnJldnNzZj1BZShTLlNTRiksTC5yZXZzc2ZbUy5TU0ZbNjU1MzVdXT0wLEwuc3NmPVMuU1NGLFMuU3R5bGVzPXtGb250czpMLkZvbnRzPVt7c3o6MTIsY29sb3I6e3RoZW1lOjEs''@;'; put 'put ''cmdiOiIwMDAwMDAifSxuYW1lOiJDYWxpYnJpIixmYW1pbHk6MixzY2hlbWU6Im1pbm9yIn1dLEZpbGxzOkwuRmlsbHM9W3twYXR0ZXJuVHlwZToibm9uZSJ9LHtwYXR0ZXJuVHlwZToiZ3JheTEyNSJ9XSxCb3JkZXJzOkwuQm9yZGVycz1be31dfSxMLmNlbGxYZnM9W10sTC5jZWxsU3R5bGVY''@;'; put 'put ''ZnM9W3tuYW1lOiJOb3JtYWwifV0sXzAoTC5jZWxsWGZzLG51bGwse30se3JldnNzZjp7R2VuZXJhbDowfX0pKTt2YXIgaz1bXTtrLnB1c2goZnVuY3Rpb24gVlcoUyxMKXt2YXIgaz1bXTtyZXR1cm4gUy5Qcm9wcyYmay5wdXNoKGZ1bmN0aW9uIEY4KFMsTCl7dmFyIGs9W107cmV0dXJuIExl''@;'; put 'put ''KE84KS5tYXAoZnVuY3Rpb24oRyl7Zm9yKHZhciBRPTA7UTx3MS5sZW5ndGg7KytRKWlmKHcxW1FdWzFdPT1HKXJldHVybiB3MVtRXTtmb3IoUT0wO1E8UzEubGVuZ3RoOysrUSlpZihTMVtRXVsxXT09RylyZXR1cm4gUzFbUV07dGhyb3cgR30pLmZvckVhY2goZnVuY3Rpb24oRyl7aWYobnVs''@;'; put 'put ''bCE9U1tHWzFdXSl7dmFyIFE9TCYmTC5Qcm9wcyYmbnVsbCE9TC5Qcm9wc1tHWzFdXT9MLlByb3BzW0dbMV1dOlNbR1sxXV07ImRhdGUiPT09R1syXSYmKFE9bmV3IERhdGUoUSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cLlxkKlovLCJaIikpLCJudW1iZXIiPT10eXBlb2YgUT9RPVN0cmlu''@;'; put 'put ''ZyhRKTohMD09PVF8fCExPT09UT9RPVE/IjEiOiIwIjpRIGluc3RhbmNlb2YgRGF0ZSYmKFE9bmV3IERhdGUoUSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cLlxkKlovLCIiKSksay5wdXNoKFpvKE84W0dbMV1dfHxHWzFdLFEpKX19KSxqcigiRG9jdW1lbnRQcm9wZXJ0aWVzIixrLmpvaW4o''@;'; put 'put ''IiIpLHt4bWxuczpLY19vfSl9KFMuUHJvcHMsTCkpLFMuQ3VzdHByb3BzJiZrLnB1c2goZnVuY3Rpb24gc20oUyxMKXt2YXIgaz1bIldvcmtzaGVldHMiLCJTaGVldE5hbWVzIl0sRz0iQ3VzdG9tRG9jdW1lbnRQcm9wZXJ0aWVzIixRPVtdO3JldHVybiBTJiZMZShTKS5mb3JFYWNoKGZ1bmN0''@;'; put 'put ''aW9uKGxlKXtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUyxsZSkpe2Zvcih2YXIgbWU9MDttZTx3MS5sZW5ndGg7KyttZSlpZihsZT09dzFbbWVdWzFdKXJldHVybjtmb3IobWU9MDttZTxTMS5sZW5ndGg7KyttZSlpZihsZT09UzFbbWVdWzFdKXJldHVybjtmb3Io''@;'; put 'put ''bWU9MDttZTxrLmxlbmd0aDsrK21lKWlmKGxlPT1rW21lXSlyZXR1cm47dmFyIHBlPVNbbGVdLGJlPSJzdHJpbmciOyJudW1iZXIiPT10eXBlb2YgcGU/KGJlPSJmbG9hdCIscGU9U3RyaW5nKHBlKSk6ITA9PT1wZXx8ITE9PT1wZT8oYmU9ImJvb2xlYW4iLHBlPXBlPyIxIjoiMCIpOnBlPVN0''@;'; put 'put ''cmluZyhwZSksUS5wdXNoKGpyKFBhKGxlKSxwZSx7ImR0OmR0IjpiZX0pKX19KSxMJiZMZShMKS5mb3JFYWNoKGZ1bmN0aW9uKGxlKXtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoTCxsZSkmJighU3x8IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2Fs''@;'; put 'put ''bChTLGxlKSkpe3ZhciBtZT1MW2xlXSxwZT0ic3RyaW5nIjsibnVtYmVyIj09dHlwZW9mIG1lPyhwZT0iZmxvYXQiLG1lPVN0cmluZyhtZSkpOiEwPT09bWV8fCExPT09bWU/KHBlPSJib29sZWFuIixtZT1tZT8iMSI6IjAiKTptZSBpbnN0YW5jZW9mIERhdGU/KHBlPSJkYXRlVGltZS50eiIs''@;'; put 'put ''bWU9bWUudG9JU09TdHJpbmcoKSk6bWU9U3RyaW5nKG1lKSxRLnB1c2goanIoUGEobGUpLG1lLHsiZHQ6ZHQiOnBlfSkpfX0pLCI8IitHKycgeG1sbnM9IicrS2NfbysnIj4nK1Euam9pbigiIikrIjwvIitHKyI+In0oUy5Qcm9wcyxTLkN1c3Rwcm9wcykpLGsuam9pbigiIil9KFMsTCkpLGsu''@;'; put 'put ''cHVzaCgiIiksay5wdXNoKCIiKSxrLnB1c2goIiIpO2Zvcih2YXIgRz0wO0c8Uy5TaGVldE5hbWVzLmxlbmd0aDsrK0cpay5wdXNoKGpyKCJXb3Jrc2hlZXQiLGRPKEcsTCxTKSx7InNzOk5hbWUiOmhpKFMuU2hlZXROYW1lc1tHXSl9KSk7cmV0dXJuIGtbMl09ZnVuY3Rpb24galcoUyxMKXt2''@;'; put 'put ''YXIgRz1bWyc8U3R5bGUgc3M6SUQ9IkRlZmF1bHQiIHNzOk5hbWU9Ik5vcm1hbCI+JywnPEFsaWdubWVudCBzczpWZXJ0aWNhbD0iQm90dG9tIi8+JywiPEJvcmRlcnMvPiIsJzxGb250IHNzOkZvbnROYW1lPSJDYWxpYnJpIiB4OkZhbWlseT0iU3dpc3MiIHNzOlNpemU9IjEyIiBzczpDb2xv''@;'; put 'put ''cj0iIzAwMDAwMCIvPicsIjxJbnRlcmlvci8+IiwiPE51bWJlckZvcm1hdC8+IiwiPFByb3RlY3Rpb24vPiIsIjwvU3R5bGU+Il0uam9pbigiIildO3JldHVybiBMLmNlbGxYZnMuZm9yRWFjaChmdW5jdGlvbihRLGxlKXt2YXIgbWU9W107aWYoUS5hbGlnbm1lbnQpe3ZhciBwZT17fTtRLmFs''@;'; put 'put ''aWdubWVudC5zaHJpbmtUb0ZpdCYmKHBlWyJzczpTaHJpbmtUb0ZpdCJdPSIxIiksUS5hbGlnbm1lbnQud3JhcFRleHQmJihwZVsic3M6V3JhcFRleHQiXT0iMSIpLFEuYWxpZ25tZW50LnZlcnRpY2FsJiYocGVbInNzOlZlcnRpY2FsIl09QXQoUS5hbGlnbm1lbnQudmVydGljYWwpKSxRLmFs''@;'; put 'put ''aWdubWVudC5ob3Jpem9udGFsJiYocGVbInNzOkhvcml6b250YWwiXT1BdChRLmFsaWdubWVudC5ob3Jpem9udGFsKSksUS5hbGlnbm1lbnQuaW5kZW50JiYocGVbInNzOkluZGVudCJdPVEuYWxpZ25tZW50LmluZGVudCksUS5hbGlnbm1lbnQudGV4dFJvdGF0aW9uJiYocGVbInNzOlJvdGF0''@;'; put 'put ''ZSJdPVEuYWxpZ25tZW50LnRleHRSb3RhdGlvbiksbWUucHVzaChqcigiQWxpZ25tZW50IixudWxsLHBlKSl9ZTppZihudWxsIT1RLmZvbnRJZCl7dmFyIGJlPUwuRm9udHNbUS5mb250SWRdO2lmKCFiZSlicmVhayBlO3ZhciBOZT17InNzOkZvbnROYW1lIjoiQ2FsaWJyaSIsInNzOlNpemUi''@;'; put 'put ''OiIxMiJ9LEJlPSExO2JlLmJvbGQmJihCZT0hMCxOZVsic3M6Qm9sZCJdPSIxIiksYmUuaXRhbGljJiYoQmU9ITAsTmVbInNzOkl0YWxpYyJdPSIxIiksYmUuc3RyaWtlJiYoQmU9ITAsTmVbInNzOlN0cmlrZVRocm91Z2giXT0iMSIpLG51bGwhPWJlLnVuZGVybGluZSYmKEJlPSEwLE5lWyJz''@;'; put 'put ''czpVbmRlcmxpbmUiXT1zT1tiZS51bmRlcmxpbmVdfHwoYmUudW5kZXJsaW5lPyJTaW5nbGUiOiJOb25lIikpLG51bGwhPWJlLnN6JiYoQmU9ITAsTmVbInNzOlNpemUiXT1iZS5zeiksbnVsbCE9YmUubmFtZSYmKEJlPSEwLE5lWyJzczpGb250TmFtZSJdPWJlLm5hbWUpLGJlLmNvbG9yJiZu''@;'; put 'put ''dWxsIT1iZS5jb2xvci5yZ2ImJihCZT0hMCxOZVsic3M6Q29sb3IiXT0iIyIrKCJudW1iZXIiPT10eXBlb2YgYmUuY29sb3IucmdiPyIwMDAwMDAiK2JlLmNvbG9yLnJnYi50b1N0cmluZygxNik6YmUuY29sb3IucmdiKS5zbGljZSgtNikpLFsic3ViIiwic3VwZXIiXS5pbmRleE9mKGJlLnZh''@;'; put 'put ''bGlnbik+LTEmJihOZVsic3M6VmVydGljYWxBbGlnbiJdPUF0KGJlLnZhbGlnbikrInNjcmlwdCIpLEJlJiZtZS5wdXNoKGpyKCJGb250IixudWxsLE5lKSl9ZTppZihRLmZpbGxJZD4wKXt2YXIgR2U9TC5GaWxsc1tRLmZpbGxJZF07aWYoIUdlfHwhR2UuZmdDb2xvcnx8bnVsbD09R2UuZmdD''@;'; put 'put ''b2xvci5yZ2IpYnJlYWsgZTttZS5wdXNoKGpyKCJJbnRlcmlvciIsbnVsbCx7InNzOlBhdHRlcm4iOmNVW0dlLnBhdHRlcm5UeXBlXXx8IlNvbGlkIiwic3M6Q29sb3IiOiIjIisoIm51bWJlciI9PXR5cGVvZiBHZS5mZ0NvbG9yLnJnYj8iMDAiK0dlLmZnQ29sb3IucmdiLnRvU3RyaW5nKDE2''@;'; put 'put ''KTpHZS5mZ0NvbG9yLnJnYikuc2xpY2UoLTYpfSkpfW1lLnB1c2goanIoIk51bWJlckZvcm1hdCIsbnVsbCx7InNzOkZvcm1hdCI6aGkoQS5fdGFibGVbUS5udW1GbXRJZF0pfSkpO3ZhciBldD17InNzOklEIjoicyIrKDIxK2xlKX07US5zdHlsZSYmKGV0WyJzczpOYW1lIl09US5zdHlsZSks''@;'; put 'put ''Ry5wdXNoKGpyKCJTdHlsZSIsbWUuam9pbigiIiksZXQpKX0pLGpyKCJTdHlsZXMiLEcuam9pbigiIikpfSgwLEwpLGtbM109ZnVuY3Rpb24gSTcoUyl7aWYoISgoU3x8e30pLldvcmtib29rfHx7fSkuTmFtZXMpcmV0dXJuIiI7Zm9yKHZhciBMPVMuV29ya2Jvb2suTmFtZXMsaz1bXSxHPTA7''@;'; put 'put ''RzxMLmxlbmd0aDsrK0cpe3ZhciBRPUxbR107bnVsbD09US5TaGVldCYmKFEuTmFtZS5tYXRjaCgvXl94bGZuXC4vKXx8ay5wdXNoKGVfKFEpKSl9cmV0dXJuIGpyKCJOYW1lcyIsay5qb2luKCIiKSl9KFMpLHBpK2pyKCJXb3JrYm9vayIsay5qb2luKCIiKSx7eG1sbnM6S2Nfc3MsInhtbG5z''@;'; put 'put ''Om8iOktjX28sInhtbG5zOngiOktjX3gsInhtbG5zOnNzIjpLY19zcywieG1sbnM6ZHQiOiJ1dWlkOkMyRjQxMDEwLTY1QjMtMTFkMS1BMjlGLTAwQUEwMEMxNDg4MiIsInhtbG5zOmh0bWwiOiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIn0pfWZ1bmN0aW9uIFh4KFMsTCxrLEcp''@;'; put 'put ''e3ZhciBRPWssbGU9W10sbWU9TC5zbGljZShMLmwsTC5sK1EpO2lmKEcmJkcuZW5jJiZHLmVuYy5pbnNpdHUmJm1lLmxlbmd0aD4wKXN3aXRjaChTLm4pe2Nhc2UiQk9GIjpjYXNlIkZpbGVQYXNzIjpjYXNlIkZpbGVMb2NrIjpjYXNlIkludGVyZmFjZUhkciI6Y2FzZSJSUkRJbmZvIjpjYXNl''@;'; put 'put ''IlJSREhlYWQiOmNhc2UiVXNyRXhjbCI6Y2FzZSJFT0YiOkcuZW5jLmluc2l0dShNZSh7bGVuZ3RoOm1lLmxlbmd0aH0pLCJza2lwIik7YnJlYWs7Y2FzZSJCb3VuZFNoZWV0OCI6Ry5lbmMuaW5zaXR1KE1lKHtsZW5ndGg6NH0pLCJza2lwIiksbWU9QnVmZmVyLmNvbmNhdChbQnVmZmVyLmZy''@;'; put 'put ''b20obWUuc2xpY2UoMCw0KSksQnVmZmVyLmZyb20oRy5lbmMuaW5zaXR1KG1lLnNsaWNlKDQpKSldKTticmVhaztkZWZhdWx0Om1lPUcuZW5jLmluc2l0dShtZSl9QXJyYXkuaXNBcnJheShMKSYmIUFycmF5LmlzQXJyYXkobWUpJiYobWU9QXJyYXkuZnJvbShtZSkpLGxlLnB1c2gobWUpLEwu''@;'; put 'put ''bCs9UTtmb3IodmFyIHBlPU5nW2FvKEwsTC5sKV0sYmU9MDtudWxsIT1wZSYmIkNvbnRpbnVlIj09PXBlLm4uc2xpY2UoMCw4KTspUT1hbyhMLEwubCsyKSxiZT1MLmwrNCxHJiZHLmVuYyYmRy5lbmMuaW5zaXR1JiZHLmVuYy5pbnNpdHUoTWUoe2xlbmd0aDo0fSksInNraXAiKSwiQ29udGlu''@;'; put 'put ''dWVGcnQiPT1wZS5uP2JlKz00OiJDb250aW51ZUZydCI9PXBlLm4uc2xpY2UoMCwxMSkmJihiZSs9MTIsRyYmRy5lbmMmJkcuZW5jLmluc2l0dSYmRy5lbmMuaW5zaXR1KE1lKHtsZW5ndGg6OH0pLCJza2lwIikpLG1lPUwuc2xpY2UoYmUsTC5sKzQrUSksRyYmRy5lbmMmJkcuZW5jLmluc2l0''@;'; put 'put ''dSYmbWUubGVuZ3RoPjAmJihtZT1HLmVuYy5pbnNpdHUobWUpKSxsZS5wdXNoKG1lKSxMLmwrPTQrUSxwZT1OZ1thbyhMLEwubCldO3ZhciBOZT1qKGxlKTtqdChOZSwwKTt2YXIgQmU9MDtOZS5sZW5zPVtdO2Zvcih2YXIgR2U9MDtHZTxsZS5sZW5ndGg7KytHZSlOZS5sZW5zLnB1c2goQmUp''@;'; put 'put ''LEJlKz1sZVtHZV0ubGVuZ3RoO2lmKE5lLmxlbmd0aDxrKXRocm93IlhMUyBSZWNvcmQgIisoUyYmUy5ufHwiPz8iKSsiIFRydW5jYXRlZDogIitOZS5sZW5ndGgrIiA8ICIraztyZXR1cm4gUy5mKE5lLE5lLmxlbmd0aCxHKX1mdW5jdGlvbiBwZihTLEwsayl7aWYoInoiIT09Uy50JiZTLlhG''@;'; put 'put ''KXt2YXIgRz0wO3RyeXtHPVMuenx8Uy5YRi5udW1GbXRJZHx8MCxMLmNlbGxORiYmKFMuej1BLl90YWJsZVtHXSl9Y2F0Y2gobGUpe2lmKEwuV1RGKXRocm93IGxlfWlmKCFMfHwhMSE9PUwuY2VsbFRleHQpdHJ5e1Mudz0iZSI9PT1TLnQ/Uy53fHxvZFtTLnZdOjA9PT1HfHwiR2VuZXJhbCI9''@;'; put 'put ''PUc/Im4iPT09Uy50PygwfFMudik9PT1TLnY/QS5fZ2VuZXJhbF9pbnQoUy52KTpBLl9nZW5lcmFsX251bShTLnYpOkEuX2dlbmVyYWwoUy52KTpBLmZvcm1hdChHLFMudix7ZGF0ZTE5MDQ6ISFrLGRhdGVORjpMJiZMLmRhdGVORn0pfWNhdGNoKGxlKXtpZihMLldURil0aHJvdyBsZX1pZihM''@;'; put 'put ''LmNlbGxEYXRlcyYmRyYmIm4iPT1TLnQmJkEuaXNfZGF0ZShBLl90YWJsZVtHXXx8U3RyaW5nKEcpKSl7dmFyIFE9QS5wYXJzZV9kYXRlX2NvZGUoUy52KTtRJiYoUy50PSJkIixTLnY9bmV3IERhdGUoUS55LFEubS0xLFEuZCxRLkgsUS5NLFEuUyxRLnUpKX19fWZ1bmN0aW9uIG5fKFMsTCxr''@;'; put 'put ''KXtyZXR1cm57djpTLGl4ZmU6TCx0Omt9fXZhciBmTz1mdW5jdGlvbihTLEwsayl7TFsiIW9iamVjdHMiXT1TfSxPN19TST0iZTA4NTlmZjJmOTRmNjgxMGFiOTEwODAwMmIyN2IzZDkiLE83X0RTST0iMDJkNWNkZDU5YzJlMWIxMDkzOTcwODAwMmIyY2Y5YWUiO2Z1bmN0aW9uIGU0KFMsTCl7''@;'; put 'put ''dmFyIGssRyxRLGxlO2lmKEx8fChMPXt9KSxsRShMKSxZKCksTC5jb2RlcGFnZSYmTyhMLmNvZGVwYWdlKSxTLkZ1bGxQYXRocyl7aWYoeWUuZmluZChTLCIvZW5jcnlwdGlvbiIpKXRocm93IG5ldyBFcnJvcigiRmlsZSBpcyBwYXNzd29yZC1wcm90ZWN0ZWQiKTtrPXllLmZpbmQoUywiIUNv''@;'; put 'put ''bXBPYmoiKSxHPXllLmZpbmQoUywiL1dvcmtib29rIil8fHllLmZpbmQoUywiL0Jvb2siKX1lbHNle3N3aXRjaChMLnR5cGUpe2Nhc2UiYmFzZTY0IjpTPXkoX2UuZGVjb2RlKFMpKTticmVhaztjYXNlImJpbmFyeSI6Uz15KFMpO2JyZWFrO2Nhc2UiYnVmZmVyIjpicmVhaztjYXNlImFycmF5''@;'; put 'put ''IjpBcnJheS5pc0FycmF5KFMpfHwoUz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChTKSl9anQoUywwKSxHPXtjb250ZW50OlN9fWlmKGsmJmZ1bmN0aW9uIFZtKFMpe3ZhciBMPXt9LGs9Uy5jb250ZW50O2lmKGsubD0yOCxMLkFuc2lVc2VyVHlwZT1rLnJlYWRfc2hpZnQoMCwibHBzdHIt''@;'; put 'put ''YW5zaSIpLEwuQW5zaUNsaXBib2FyZEZvcm1hdD1mdW5jdGlvbiBoMyhTKXtyZXR1cm4gZjAoUywxKX0oayksay5sZW5ndGgtay5sPD00KXJldHVybiBMO3ZhciBHPWsucmVhZF9zaGlmdCg0KTtpZigwPT1HfHxHPjQwfHwoay5sLT00LEwuUmVzZXJ2ZWQxPWsucmVhZF9zaGlmdCgwLCJscHN0''@;'; put 'put ''ci1hbnNpIiksay5sZW5ndGgtay5sPD00KXx8MTkwNzUwNTY1MiE9PShHPWsucmVhZF9zaGlmdCg0KSl8fChMLlVuaWNvZGVDbGlwYm9hcmRGb3JtYXQ9ZnVuY3Rpb24gRHkoUyl7cmV0dXJuIGYwKFMsMil9KGspLDA9PShHPWsucmVhZF9zaGlmdCg0KSl8fEc+NDApKXJldHVybiBMO2subC09''@;'; put 'put ''NCxMLlJlc2VydmVkMj1rLnJlYWRfc2hpZnQoMCwibHB3c3RyIil9KGspLEwuYm9va1Byb3BzJiYhTC5ib29rU2hlZXRzKVE9e307ZWxzZXt2YXIgbWU9VGU/ImJ1ZmZlciI6ImFycmF5IjtpZihHJiZHLmNvbnRlbnQpUT1mdW5jdGlvbiBwTyhTLEwpe3ZhciBHZSxjdCxvdCxidCxMdCxKdCxr''@;'; put 'put ''PXtvcHRzOnt9fSxHPXt9LFE9TC5kZW5zZT9bXTp7fSxsZT17fSxtZT17fSxwZT1udWxsLGJlPVtdLE5lPSIiLEJlPXt9LGV0PSIiLEZ0PXt9LGt0PVtdLFRuPVtdLHNyPVtdLENuPXtTaGVldHM6W10sV0JQcm9wczp7ZGF0ZTE5MDQ6ITF9LFZpZXdzOlt7fV19LGxyPXt9LHFuPXtGb250czpb''@;'; put 'put ''XX0sV249ZnVuY3Rpb24oSWkpe3JldHVybiBJaTw4P2cwW0lpXTpJaTw2NCYmc3JbSWktOF18fGcwW0lpXX0scHI9ZnVuY3Rpb24oSWksUnMpe3ZhciBRYyxkcz1JaS5YRi5kYXRhO2RzJiYoZHMucGF0dGVyblR5cGV8fG51bGwhPWRzLmljdkZvcmUpJiZScyYmUnMuY2VsbFN0eWxlcyYmKElp''@;'; put 'put ''LnM9e30sSWkucy5wYXR0ZXJuVHlwZT1kcy5wYXR0ZXJuVHlwZSxJaS5YRi5mb250JiZSdChJaS5zLElpLlhGLmZvbnQpLGRzLmZXcmFwJiYoKElpLnMuYWxpZ25tZW50fHwoSWkucy5hbGlnbm1lbnQ9e30pKS53cmFwVGV4dD0hMCksZHMuZlNocmlua1RvRml0JiYoKElpLnMuYWxpZ25tZW50''@;'; put 'put ''fHwoSWkucy5hbGlnbm1lbnQ9e30pKS5zaHJpbmtUb0ZpdD0hMCksZHMuaGFsaWduJiYoKElpLnMuYWxpZ25tZW50fHwoSWkucy5hbGlnbm1lbnQ9e30pKS5ob3Jpem9udGFsPWRzLmhhbGlnbiksZHMudmFsaWduJiYoKElpLnMuYWxpZ25tZW50fHwoSWkucy5hbGlnbm1lbnQ9e30pKS52ZXJ0''@;'; put 'put ''aWNhbD1kcy52YWxpZ24pLGRzLmNJbmRlbnQmJigoSWkucy5hbGlnbm1lbnR8fChJaS5zLmFsaWdubWVudD17fSkpLmluZGVudD1kcy5jSW5kZW50KSw2NCE9ZHMuaWN2Rm9yZSYmNjUhPWRzLmljdkJhY2smJigoUWM9YWYoV24oZHMuaWN2Rm9yZSkpKSYmKElpLnMuZmdDb2xvcj17cmdiOlFj''@;'; put 'put ''fSksKFFjPWFmKFduKGRzLmljdkJhY2spKSkmJihJaS5zLmJnQ29sb3I9e3JnYjpRY30pKSxbIkxlZnQiLCJSaWdodCIsIlRvcCIsIkJvdHRvbSJdLmZvckVhY2goZnVuY3Rpb24oS3Upe2RzWyJkZyIrS3VdJiYoSWkuc1tLdS50b0xvd2VyQ2FzZSgpXT17c3R5bGU6dDJbZHNbImRnIitLdV1d''@;'; put 'put ''LGNvbG9yOntyZ2I6YWYoV24oZHNbImljdiIrS3VdKSl9fSl9KSl9LHlyPWZ1bmN0aW9uKElpLFJzLGRzKXtpZighKFppPjF8fGRzLnNoZWV0Um93cyYmSWkucj49ZHMuc2hlZXRSb3dzKSl7aWYoZHMuY2VsbFN0eWxlcyYmUnMuWEYmJlJzLlhGLmRhdGEmJnByKFJzLGRzKSxkZWxldGUgUnMu''@;'; put 'put ''aXhmZSxkZWxldGUgUnMuWEYsR2U9SWksZXQ9R2koSWkpLCghbWV8fCFtZS5zfHwhbWUuZSkmJihtZT17czp7cjowLGM6MH0sZTp7cjowLGM6MH19KSxJaS5yPG1lLnMuciYmKG1lLnMucj1JaS5yKSxJaS5jPG1lLnMuYyYmKG1lLnMuYz1JaS5jKSxJaS5yKzE+bWUuZS5yJiYobWUuZS5yPUlp''@;'; put 'put ''LnIrMSksSWkuYysxPm1lLmUuYyYmKG1lLmUuYz1JaS5jKzEpLGRzLmNlbGxGb3JtdWxhJiZScy5mKWZvcih2YXIgUWM9MDtRYzxrdC5sZW5ndGg7KytRYylpZighKGt0W1FjXVswXS5zLmM+SWkuY3x8a3RbUWNdWzBdLnMucj5JaS5yfHxrdFtRY11bMF0uZS5jPElpLmN8fGt0W1FjXVswXS5l''@;'; put 'put ''LnI8SWkucikpe1JzLkY9b28oa3RbUWNdWzBdKSwoa3RbUWNdWzBdLnMuYyE9SWkuY3x8a3RbUWNdWzBdLnMuciE9SWkucikmJmRlbGV0ZSBScy5mLFJzLmYmJihScy5mPSIiK1l1KGt0W1FjXVsxXSxtZSxJaSxWbix0cikpO2JyZWFrfWRzLmRlbnNlPyhRW0lpLnJdfHwoUVtJaS5yXT1bXSks''@;'; put 'put ''UVtJaS5yXVtJaS5jXT1Scyk6UVtldF09UnN9fSx0cj17ZW5jOiExLHNiY2NoOjAsc25hbWVzOltdLHNoYXJlZGY6RnQsYXJyYXlmOmt0LHJydGFiaWQ6W10sbGFzdHVzZXI6IiIsYmlmZjo4LGNvZGVwYWdlOjAsd2lubG9ja2VkOjAsY2VsbFN0eWxlczohIUwmJiEhTC5jZWxsU3R5bGVzLFdU''@;'; put 'put ''RjohIUwmJiEhTC53dGZ9O3RyLnBhc3N3b3JkPUwucGFzc3dvcmQ/TC5wYXNzd29yZDoiVmVsdmV0U3dlYXRzaG9wIjt2YXIgRmksd2k9bnVsbCxyYT1bXSxvYT1bXSxraT1bXSxrcj1bXSx3cj0hMSxWbj1bXTtWbi5TaGVldE5hbWVzPXRyLnNuYW1lcyxWbi5zaGFyZWRmPXRyLnNoYXJlZGYs''@;'; put 'put ''Vm4uYXJyYXlmPXRyLmFycmF5ZixWbi5uYW1lcz1bXSxWbi5YVEk9W107dmFyIGFhLHpyPSIiLFppPTAsQ2k9MCxfYT1bXSxmbz1bXTt0ci5jb2RlcGFnZT0xMjAwLFooMTIwMCk7Zm9yKHZhciB6bz0hMTtTLmw8Uy5sZW5ndGgtMTspe3ZhciBqYT1TLmwsd289Uy5yZWFkX3NoaWZ0KDIpO2lm''@;'; put 'put ''KHRyJiZ0ci5lbmMmJnRyLmVuYy5pbnNpdHUmJnRyLmVuYy5pbnNpdHUoTWUoWzAsMF0pLCJoZWFkZXItMCIpLDA9PT13byYmIkVPRiI9PT16cilicmVhazt2YXIgYm89Uy5sPT09Uy5sZW5ndGg/MDpTLnJlYWRfc2hpZnQoMik7dHImJnRyLmVuYyYmdHIuZW5jLmluc2l0dSYmdHIuZW5jLmlu''@;'; put 'put ''c2l0dShNZShbMCwwXSksImxlbmd0aC0wIik7dmFyIFVpPU5nW3dvXTtpZihVaSYmVWkuZil7aWYoTC5ib29rU2hlZXRzJiYiQm91bmRTaGVldDgiPT09enImJiJCb3VuZFNoZWV0OCIhPT1VaS5uKWJyZWFrO2lmKHpyPVVpLm4sMj09PVVpLnJ8fDEyPT1VaS5yKXt2YXIgamw9Uy5yZWFkX3No''@;'; put 'put ''aWZ0KDIpO2lmKGJvLT0yLHRyJiZ0ci5lbmMmJnRyLmVuYy5pbnNpdHUmJnRyLmVuYy5pbnNpdHUoTWUoWzAsMF0pKSwhdHIuZW5jJiZqbCE9PXdvJiYoKDI1NSZqbCk8PDh8amw+PjgpIT09d28pdGhyb3cgbmV3IEVycm9yKCJydCBtaXNtYXRjaDogIitqbCsiIT0iK3dvKTsxMj09VWkuciYm''@;'; put 'put ''KFMubCs9MTAsYm8tPTEwLHRyJiZ0ci5lbmMmJnRyLmVuYy5pbnNpdHUmJnRyLmVuYy5pbnNpdHUoTWUoWzAsMCwwLDAsMCwwLDAsMCwwLDBdKSkpfXZhciBCbj1YeChVaSxTLGJvLHRyKSxGcz1VaS5uO2lmKDA9PVppJiYiQk9GIiE9RnMpY29udGludWU7c3dpdGNoKEZzKXtjYXNlIkRhdGUx''@;'; put 'put ''OTA0IjprLm9wdHMuRGF0ZTE5MDQ9Q24uV0JQcm9wcy5kYXRlMTkwND1CbjticmVhaztjYXNlIldyaXRlUHJvdGVjdCI6ay5vcHRzLldyaXRlUHJvdGVjdD0hMDticmVhaztjYXNlIkZpbGVQYXNzIjppZih0ci5lbmN8fChTLmw9MCxaaT0wKSx0ci5lbmM9Qm4sIUwucGFzc3dvcmQmJm51bGw9''@;'; put 'put ''PUJuLnZhbGlkKXRocm93IG5ldyBFcnJvcigiRmlsZSBpcyBwYXNzd29yZC1wcm90ZWN0ZWQiKTtpZihudWxsPT1Cbi52YWxpZCl0aHJvdyBuZXcgRXJyb3IoIkVuY3J5cHRpb24gc2NoZW1lIHVuc3VwcG9ydGVkIik7aWYoIUJuLnZhbGlkKXRocm93IG5ldyBFcnJvcigiUGFzc3dvcmQgaXMg''@;'; put 'put ''aW5jb3JyZWN0Iik7YnJlYWs7Y2FzZSJXcml0ZUFjY2VzcyI6dHIubGFzdHVzZXI9Qm47YnJlYWs7Y2FzZSJGaWxlU2hhcmluZyI6Y2FzZSJUZW1wbGF0ZSI6Y2FzZSJCb29rQm9vbCI6Y2FzZSJVc2VzRUxGcyI6Y2FzZSJNVFJTZXR0aW5ncyI6Y2FzZSJVbmNhbGNlZCI6Y2FzZSJFeHRTU1Qi''@;'; put 'put ''OmNhc2UiQm9va0V4dCI6Y2FzZSJSaWNoVGV4dFN0cmVhbSI6Y2FzZSJCa0hpbSI6Y2FzZSJJbmRleCI6Y2FzZSJQcm90NFJldiI6Y2FzZSJQcm90NFJldlBhc3MiOmJyZWFrO2Nhc2UiQ29kZVBhZ2UiOnZhciBlbD1OdW1iZXIoQm4pO3N3aXRjaChlbCl7Y2FzZSAyMTAxMDplbD0xMjAwO2Jy''@;'; put 'put ''ZWFrO2Nhc2UgMzI3Njg6ZWw9MWU0O2JyZWFrO2Nhc2UgMzI3Njk6ZWw9MTI1Mn1aKHRyLmNvZGVwYWdlPWVsKSx6bz0hMDticmVhaztjYXNlIlJSVGFiSWQiOnRyLnJydGFiaWQ9Qm47YnJlYWs7Y2FzZSJXaW5Qcm90ZWN0Ijp0ci53aW5sb2NrZWQ9Qm47YnJlYWs7Y2FzZSJSZWZyZXNoQWxs''@;'; put 'put ''IjpjYXNlIkNhbGNDb3VudCI6Y2FzZSJDYWxjRGVsdGEiOmNhc2UiQ2FsY0l0ZXIiOmNhc2UiQ2FsY01vZGUiOmNhc2UiQ2FsY1ByZWNpc2lvbiI6Y2FzZSJDYWxjU2F2ZVJlY2FsYyI6ay5vcHRzW0ZzXT1CbjticmVhaztjYXNlIkNhbGNSZWZNb2RlIjp0ci5DYWxjUmVmTW9kZT1CbjticmVh''@;'; put 'put ''aztjYXNlIkZvcmNlRnVsbENhbGN1bGF0aW9uIjprLm9wdHMuRnVsbENhbGM9Qm47YnJlYWs7Y2FzZSJXc0Jvb2wiOkJuLmZEaWFsb2cmJihRWyIhdHlwZSJdPSJkaWFsb2ciKSxCbi5mQmVsb3d8fCgoUVsiIW91dGxpbmUiXXx8KFFbIiFvdXRsaW5lIl09e30pKS5hYm92ZT0hMCksQm4uZlJp''@;'; put 'put ''Z2h0fHwoKFFbIiFvdXRsaW5lIl18fChRWyIhb3V0bGluZSJdPXt9KSkubGVmdD0hMCk7YnJlYWs7Y2FzZSJYRiI6Qm4uZm9udD1xbi5Gb250c1tCbi5pZm50PDQ/Qm4uaWZudDpCbi5pZm50LTFdLFRuLnB1c2goQm4pO2JyZWFrO2Nhc2UiU3VwQm9vayI6Vm4ucHVzaChbQm5dKSxWbltWbi5s''@;'; put 'put ''ZW5ndGgtMV0uWFRJPVtdO2JyZWFrO2Nhc2UiRXh0ZXJuTmFtZSI6Vm5bVm4ubGVuZ3RoLTFdLnB1c2goQm4pO2JyZWFrO2Nhc2UiTGJsIjphYT17TmFtZTpCbi5OYW1lLFJlZjpZdShCbi5yZ2NlLG1lLG51bGwsVm4sdHIpfSxCbi5pdGFiPjAmJihhYS5TaGVldD1Cbi5pdGFiLTEpLFZuLm5h''@;'; put 'put ''bWVzLnB1c2goYWEpLFZuWzBdfHwoVm5bMF09W10sVm5bMF0uWFRJPVtdKSxWbltWbi5sZW5ndGgtMV0ucHVzaChCbiksIl94bG5tLl9GaWx0ZXJEYXRhYmFzZSI9PUJuLk5hbWUmJkJuLml0YWI+MCYmQm4ucmdjZSYmQm4ucmdjZVswXSYmQm4ucmdjZVswXVswXSYmIlB0Z0FyZWEzZCI9PUJu''@;'; put 'put ''LnJnY2VbMF1bMF1bMF0mJihmb1tCbi5pdGFiLTFdPXtyZWY6b28oQm4ucmdjZVswXVswXVsxXVsyXSl9KTticmVhaztjYXNlIkV4dGVybkNvdW50Ijp0ci5FeHRlcm5Db3VudD1CbjticmVhaztjYXNlIkV4dGVyblNoZWV0IjowPT1Wbi5sZW5ndGgmJihWblswXT1bXSxWblswXS5YVEk9W10p''@;'; put 'put ''LFZuW1ZuLmxlbmd0aC0xXS5YVEk9Vm5bVm4ubGVuZ3RoLTFdLlhUSS5jb25jYXQoQm4pLFZuLlhUST1Wbi5YVEkuY29uY2F0KEJuKTticmVhaztjYXNlIk5hbWVDbXQiOmlmKHRyLmJpZmY8OClicmVhaztudWxsIT1hYSYmKGFhLkNvbW1lbnQ9Qm5bMV0pO2JyZWFrO2Nhc2UiUHJvdGVjdCI6''@;'; put 'put ''UVsiIXByb3RlY3QiXT1CbjticmVhaztjYXNlIlBhc3N3b3JkIjowIT09Qm4mJnRyLldURiYmY29uc29sZS5lcnJvcigiUGFzc3dvcmQgdmVyaWZpZXI6ICIrQm4pO2JyZWFrO2Nhc2UiQm91bmRTaGVldDgiOmxlW0JuLnBvc109Qm4sdHIuc25hbWVzLnB1c2goQm4ubmFtZSk7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJFT0YiOmlmKFFbIiFncmlkbGluZXMiXT0hd2l8fHdpLmdyaWQsd2k9bnVsbCwtLVppKWJyZWFrO2lmKG1lLmUpe2lmKG1lLmUucj4wJiZtZS5lLmM+MCl7aWYobWUuZS5yLS0sbWUuZS5jLS0sUVsiIXJlZiJdPW9vKG1lKSxMLnNoZWV0Um93cyYmTC5zaGVldFJvd3M8PW1lLmUucil7dmFy''@;'; put 'put ''IEl1PW1lLmUucjttZS5lLnI9TC5zaGVldFJvd3MtMSxRWyIhZnVsbHJlZiJdPVFbIiFyZWYiXSxRWyIhcmVmIl09b28obWUpLG1lLmUucj1JdX1tZS5lLnIrKyxtZS5lLmMrK31yYS5sZW5ndGg+MCYmKFFbIiFtZXJnZXMiXT1yYSksb2EubGVuZ3RoPjAmJmZPKG9hLFEpLGtpLmxlbmd0aD4w''@;'; put 'put ''JiYoUVsiIWNvbHMiXT1raSksa3IubGVuZ3RoPjAmJihRWyIhcm93cyJdPWtyKSxDbi5TaGVldHMucHVzaChscil9IiI9PT1OZT9CZT1ROkdbTmVdPVEsUT1MLmRlbnNlP1tdOnt9O2JyZWFrO2Nhc2UiQk9GIjppZig4PT09dHIuYmlmZiYmKHRyLmJpZmY9ezk6Miw1MjE6MywxMDMzOjR9W3dv''@;'; put 'put ''XXx8ezUxMjoyLDc2ODozLDEwMjQ6NCwxMjgwOjUsMTUzNjo4LDI6Miw3OjJ9W0JuLkJJRkZWZXJdfHw4KSx0ci5iaWZmZ3Vlc3M9MD09Qm4uQklGRlZlciwwPT1Cbi5CSUZGVmVyJiY0MDk2PT1Cbi5kdCYmKHRyLmJpZmY9NSx6bz0hMCxaKHRyLmNvZGVwYWdlPTI4NTkxKSksOD09dHIuYmlm''@;'; put 'put ''ZiYmMD09Qm4uQklGRlZlciYmMTY9PUJuLmR0JiYodHIuYmlmZj0yKSxaaSsrKWJyZWFrO2lmKFE9TC5kZW5zZT9bXTp7fSx0ci5iaWZmPDgmJiF6byYmKHpvPSEwLFoodHIuY29kZXBhZ2U9TC5jb2RlcGFnZXx8MTI1MikpLHRyLmJpZmY8NXx8MD09Qm4uQklGRlZlciYmNDA5Nj09Qm4uZHQp''@;'; put 'put ''eyIiPT09TmUmJihOZT0iU2hlZXQxIiksbWU9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fTt2YXIgcHU9e3BvczpTLmwtYm8sbmFtZTpOZX07bGVbcHUucG9zXT1wdSx0ci5zbmFtZXMucHVzaChOZSl9ZWxzZSBOZT0obGVbamFdfHx7bmFtZToiIn0pLm5hbWU7MzI9PUJuLmR0JiYoUVsiIXR5''@;'; put 'put ''cGUiXT0iY2hhcnQiKSw2ND09Qm4uZHQmJihRWyIhdHlwZSJdPSJtYWNybyIpLHJhPVtdLG9hPVtdLHRyLmFycmF5Zj1rdD1bXSxraT1bXSxrcj1bXSx3cj0hMSxscj17SGlkZGVuOihsZVtqYV18fHtoczowfSkuaHMsbmFtZTpOZX07YnJlYWs7Y2FzZSJOdW1iZXIiOmNhc2UiQklGRjJOVU0i''@;'; put 'put ''OmNhc2UiQklGRjJJTlQiOiJjaGFydCI9PVFbIiF0eXBlIl0mJihMLmRlbnNlPyhRW0JuLnJdfHxbXSlbQm4uY106UVtHaSh7YzpCbi5jLHI6Qm4ucn0pXSkmJisrQm4uYyxMdD17aXhmZTpCbi5peGZlLFhGOlRuW0JuLml4ZmVdfHx7fSx2OkJuLnZhbCx0OiJuIn0sQ2k+MCYmKEx0Lno9X2Fb''@;'; put 'put ''THQuaXhmZT4+OCY2M10pLHBmKEx0LEwsay5vcHRzLkRhdGUxOTA0KSx5cih7YzpCbi5jLHI6Qm4ucn0sTHQsTCk7YnJlYWs7Y2FzZSJCb29sRXJyIjpMdD17aXhmZTpCbi5peGZlLFhGOlRuW0JuLml4ZmVdLHY6Qm4udmFsLHQ6Qm4udH0sQ2k+MCYmKEx0Lno9X2FbTHQuaXhmZT4+OCY2M10p''@;'; put 'put ''LHBmKEx0LEwsay5vcHRzLkRhdGUxOTA0KSx5cih7YzpCbi5jLHI6Qm4ucn0sTHQsTCk7YnJlYWs7Y2FzZSJSSyI6THQ9e2l4ZmU6Qm4uaXhmZSxYRjpUbltCbi5peGZlXSx2OkJuLnJrbnVtLHQ6Im4ifSxDaT4wJiYoTHQuej1fYVtMdC5peGZlPj44JjYzXSkscGYoTHQsTCxrLm9wdHMuRGF0''@;'; put 'put ''ZTE5MDQpLHlyKHtjOkJuLmMscjpCbi5yfSxMdCxMKTticmVhaztjYXNlIk11bFJrIjpmb3IodmFyIFZjPUJuLmM7VmM8PUJuLkM7KytWYyl7dmFyIG8xPUJuLnJrcmVjW1ZjLUJuLmNdWzBdO0x0PXtpeGZlOm8xLFhGOlRuW28xXSx2OkJuLnJrcmVjW1ZjLUJuLmNdWzFdLHQ6Im4ifSxDaT4w''@;'; put 'put ''JiYoTHQuej1fYVtMdC5peGZlPj44JjYzXSkscGYoTHQsTCxrLm9wdHMuRGF0ZTE5MDQpLHlyKHtjOlZjLHI6Qm4ucn0sTHQsTCl9YnJlYWs7Y2FzZSJGb3JtdWxhIjppZigiU3RyaW5nIj09Qm4udmFsKXtwZT1CbjticmVha31pZigoTHQ9bl8oQm4udmFsLEJuLmNlbGwuaXhmZSxCbi50dCkp''@;'; put 'put ''LlhGPVRuW0x0Lml4ZmVdLEwuY2VsbEZvcm11bGEpe3ZhciBCYz1Cbi5mb3JtdWxhO2lmKEJjJiZCY1swXSYmQmNbMF1bMF0mJiJQdGdFeHAiPT1CY1swXVswXVswXSl7dmFyIGNuPUJjWzBdWzBdWzFdWzBdLEFuPUJjWzBdWzBdWzFdWzFdLEduPUdpKHtyOmNuLGM6QW59KTtGdFtHbl0/THQu''@;'; put 'put ''Zj0iIitZdShCbi5mb3JtdWxhLG1lLEJuLmNlbGwsVm4sdHIpOkx0LkY9KChMLmRlbnNlPyhRW2NuXXx8W10pW0FuXTpRW0duXSl8fHt9KS5GfWVsc2UgTHQuZj0iIitZdShCbi5mb3JtdWxhLG1lLEJuLmNlbGwsVm4sdHIpfUNpPjAmJihMdC56PV9hW0x0Lml4ZmU+PjgmNjNdKSxwZihMdCxM''@;'; put 'put ''LGsub3B0cy5EYXRlMTkwNCkseXIoQm4uY2VsbCxMdCxMKSxwZT1CbjticmVhaztjYXNlIlN0cmluZyI6aWYoIXBlKXRocm93IG5ldyBFcnJvcigiU3RyaW5nIHJlY29yZCBleHBlY3RzIEZvcm11bGEiKTtwZS52YWw9Qm4sKEx0PW5fKEJuLHBlLmNlbGwuaXhmZSwicyIpKS5YRj1UbltMdC5p''@;'; put 'put ''eGZlXSxMLmNlbGxGb3JtdWxhJiYoTHQuZj0iIitZdShwZS5mb3JtdWxhLG1lLHBlLmNlbGwsVm4sdHIpKSxDaT4wJiYoTHQuej1fYVtMdC5peGZlPj44JjYzXSkscGYoTHQsTCxrLm9wdHMuRGF0ZTE5MDQpLHlyKHBlLmNlbGwsTHQsTCkscGU9bnVsbDticmVhaztjYXNlIkFycmF5IjprdC5w''@;'; put 'put ''dXNoKEJuKTt2YXIgQWk9R2koQm5bMF0ucyk7aWYoY3Q9TC5kZW5zZT8oUVtCblswXS5zLnJdfHxbXSlbQm5bMF0ucy5jXTpRW0FpXSxMLmNlbGxGb3JtdWxhJiZjdCl7aWYoIXBlfHwhQWl8fCFjdClicmVhaztjdC5mPSIiK1l1KEJuWzFdLG1lLEJuWzBdLFZuLHRyKSxjdC5GPW9vKEJuWzBd''@;'; put 'put ''KX1icmVhaztjYXNlIlNockZtbGEiOmlmKCFMLmNlbGxGb3JtdWxhKWJyZWFrO2lmKGV0KXtpZighcGUpYnJlYWs7RnRbR2kocGUuY2VsbCldPUJuWzBdLCgoY3Q9TC5kZW5zZT8oUVtwZS5jZWxsLnJdfHxbXSlbcGUuY2VsbC5jXTpRW0dpKHBlLmNlbGwpXSl8fHt9KS5mPSIiK1l1KEJuWzBd''@;'; put 'put ''LG1lLEdlLFZuLHRyKX1icmVhaztjYXNlIkxhYmVsU3N0IjpMdD1uXyhiZVtCbi5pc3N0XS50LEJuLml4ZmUsInMiKSxiZVtCbi5pc3N0XS5oJiYoTHQuaD1iZVtCbi5pc3N0XS5oKSxMdC5YRj1UbltMdC5peGZlXSxDaT4wJiYoTHQuej1fYVtMdC5peGZlPj44JjYzXSkscGYoTHQsTCxrLm9w''@;'; put 'put ''dHMuRGF0ZTE5MDQpLHlyKHtjOkJuLmMscjpCbi5yfSxMdCxMKSxiZVtCbi5pc3N0XS5SJiYoTHQuUj1iZVtCbi5pc3N0XS5SLm1hcChmdW5jdGlvbihkYSl7dmFyIElpPXVuKGRhKTtyZXR1cm4gZGEucz09cW4uRm9udHNbMF0mJihJaS5zPUx0LnMpLElpfSkpO2JyZWFrO2Nhc2UiQmxhbmsi''@;'; put 'put ''Okwuc2hlZXRTdHVicyYmKEx0PXtpeGZlOkJuLml4ZmUsWEY6VG5bQm4uaXhmZV0sdDoieiJ9LENpPjAmJihMdC56PV9hW0x0Lml4ZmU+PjgmNjNdKSxwZihMdCxMLGsub3B0cy5EYXRlMTkwNCkseXIoe2M6Qm4uYyxyOkJuLnJ9LEx0LEwpKTticmVhaztjYXNlIk11bEJsYW5rIjppZihMLnNo''@;'; put 'put ''ZWV0U3R1YnMpZm9yKHZhciBocj1Cbi5jO2hyPD1Cbi5DOysraHIpe3ZhciBPaT1Cbi5peGZlW2hyLUJuLmNdO0x0PXtpeGZlOk9pLFhGOlRuW09pXSx0OiJ6In0sQ2k+MCYmKEx0Lno9X2FbTHQuaXhmZT4+OCY2M10pLHBmKEx0LEwsay5vcHRzLkRhdGUxOTA0KSx5cih7YzpocixyOkJuLnJ9''@;'; put 'put ''LEx0LEwpfWJyZWFrO2Nhc2UiUlN0cmluZyI6Y2FzZSJMYWJlbCI6Y2FzZSJCSUZGMlNUUiI6KEx0PW5fKEJuLnZhbCxCbi5peGZlLCJzIikpLlhGPVRuW0x0Lml4ZmVdLENpPjAmJihMdC56PV9hW0x0Lml4ZmU+PjgmNjNdKSxwZihMdCxMLGsub3B0cy5EYXRlMTkwNCkseXIoe2M6Qm4uYyxy''@;'; put 'put ''OkJuLnJ9LEx0LEwpO2JyZWFrO2Nhc2UiRGltZW5zaW9ucyI6MT09PVppJiYobWU9Qm4pO2JyZWFrO2Nhc2UiU1NUIjooYmU9Qm4pLmZvckVhY2goZnVuY3Rpb24oZGEpe2RhLl9SPyhkYS5fUlswXSYmZGEuX1JbMF0uaWR4PjAmJmRhLl9SLnVuc2hpZnQoe2lkeDowLGlmbnQ6MH0pLGRhLlI9''@;'; put 'put ''ZGEuX1IubWFwKGZ1bmN0aW9uKElpLFJzKXtyZXR1cm57dDoicyIsdjpkYS50LnNsaWNlKElpLmlkeCwoZGEuX1JbUnMrMV18fHt9KS5pZHgpLHM6cW4uRm9udHNbSWkuaWZudDw0P0lpLmlmbnQ6SWkuaWZudC0xXX19KSxMLmNlbGxIVE1MJiYoZGEuaD1SSShkYS5SKSkpOkwuY2VsbEhUTUwm''@;'; put 'put ''JihkYS5oPWJhKGRhLnQpKSxkZWxldGUgZGEuX1J9KTticmVhaztjYXNlIkZvcm1hdCI6aWYoND09dHIuYmlmZil7X2FbQ2krK109Qm5bMV07Zm9yKHZhciBTcj0wO1NyPENpKzE2MyYmQS5fdGFibGVbU3JdIT1CblsxXTsrK1NyKTtTcj49MTYzJiZBLmxvYWQoQm5bMV0sQ2krMTYzKX1lbHNl''@;'; put 'put ''IEEubG9hZChCblsxXSxCblswXSk7YnJlYWs7Y2FzZSJCSUZGMkZPUk1BVCI6X2FbQ2krK109Qm47Zm9yKHZhciBQaT0wO1BpPENpKzE2MyYmQS5fdGFibGVbUGldIT1CbjsrK1BpKTtQaT49MTYzJiZBLmxvYWQoQm4sQ2krMTYzKTticmVhaztjYXNlIk1lcmdlQ2VsbHMiOnJhPXJhLmNvbmNh''@;'; put 'put ''dChCbik7YnJlYWs7Y2FzZSJPYmoiOm9hW0JuLmNtb1swXV09dHIubGFzdG9iaj1CbjticmVhaztjYXNlIlR4TyI6dHIubGFzdG9iai5UeE89Qm47YnJlYWs7Y2FzZSJJbURhdGEiOnRyLmxhc3RvYmouSW1EYXRhPUJuO2JyZWFrO2Nhc2UiSExpbmsiOmZvcihidD1CblswXS5zLnI7YnQ8PUJu''@;'; put 'put ''WzBdLmUucjsrK2J0KWZvcihvdD1CblswXS5zLmM7b3Q8PUJuWzBdLmUuYzsrK290KShjdD1MLmRlbnNlPyhRW2J0XXx8W10pW290XTpRW0dpKHtjOm90LHI6YnR9KV0pJiYoY3QubD1CblsxXSk7YnJlYWs7Y2FzZSJITGlua1Rvb2x0aXAiOmZvcihidD1CblswXS5zLnI7YnQ8PUJuWzBdLmUu''@;'; put 'put ''cjsrK2J0KWZvcihvdD1CblswXS5zLmM7b3Q8PUJuWzBdLmUuYzsrK290KShjdD1MLmRlbnNlPyhRW2J0XXx8W10pW290XTpRW0dpKHtjOm90LHI6YnR9KV0pJiZjdC5sJiYoY3QubC5Ub29sdGlwPUJuWzFdKTticmVhaztjYXNlIk5vdGUiOmlmKHRyLmJpZmY8PTUmJnRyLmJpZmY+PTIpYnJl''@;'; put 'put ''YWs7Y3Q9TC5kZW5zZT8oUVtCblswXS5yXXx8W10pW0JuWzBdLmNdOlFbR2koQm5bMF0pXTt2YXIgSmE9b2FbQm5bMl1dO2N0fHwoTC5kZW5zZT8oUVtCblswXS5yXXx8KFFbQm5bMF0ucl09W10pLGN0PVFbQm5bMF0ucl1bQm5bMF0uY109e3Q6InoifSk6Y3Q9UVtHaShCblswXSldPXt0OiJ6''@;'; put 'put ''In0sbWUuZS5yPU1hdGgubWF4KG1lLmUucixCblswXS5yKSxtZS5zLnI9TWF0aC5taW4obWUucy5yLEJuWzBdLnIpLG1lLmUuYz1NYXRoLm1heChtZS5lLmMsQm5bMF0uYyksbWUucy5jPU1hdGgubWluKG1lLnMuYyxCblswXS5jKSksY3QuY3x8KGN0LmM9W10pLGN0LmMucHVzaCh7YTpCblsx''@;'; put 'put ''XSx0OkphLlR4Ty50fSk7YnJlYWs7ZGVmYXVsdDpzd2l0Y2goVWkubil7Y2FzZSJDbHJ0Q2xpZW50IjpjYXNlIkhlYWRlciI6Y2FzZSJGb290ZXIiOmNhc2UiSENlbnRlciI6Y2FzZSJWQ2VudGVyIjpjYXNlIlBscyI6Y2FzZSJHQ1ciOmNhc2UiTEhSZWNvcmQiOmNhc2UiREJDZWxsIjpjYXNl''@;'; put 'put ''IkVudEV4VTIiOmNhc2UiU3hWaWV3IjpjYXNlIlN4dmQiOmNhc2UiU1hWSSI6Y2FzZSJTWFZERXgiOmNhc2UiU3hJdmQiOmNhc2UiU1hTdHJpbmciOmNhc2UiU3luYyI6Y2FzZSJBZGRpbiI6Y2FzZSJTWERJIjpjYXNlIlNYTEkiOmNhc2UiU1hFeCI6Y2FzZSJRc2lTWFRhZyI6Y2FzZSJGZWF0''@;'; put 'put ''IjpjYXNlIkZlYXRIZHIiOmNhc2UiRmVhdEhkcjExIjpjYXNlIkZlYXR1cmUxMSI6Y2FzZSJGZWF0dXJlMTIiOmNhc2UiTGlzdDEyIjpjYXNlIlJlY2FsY0lkIjpjYXNlIkR4R0NvbCI6Y2FzZSJGYmkiOmNhc2UiRmJpMiI6Y2FzZSJHZWxGcmFtZSI6Y2FzZSJYRkNSQyI6Y2FzZSJTdHlsZSI6''@;'; put 'put ''Y2FzZSJTdHlsZUV4dCI6Y2FzZSJTY2VuYXJpb1Byb3RlY3QiOmNhc2UiT2JqUHJvdGVjdCI6Y2FzZSJDb25kRm10MTIiOmNhc2UiVGFibGUiOmNhc2UiVGFibGVTdHlsZXMiOmNhc2UiVGFibGVTdHlsZSI6Y2FzZSJUYWJsZVN0eWxlRWxlbWVudCI6Y2FzZSJTWFN0cmVhbUlEIjpjYXNlIlNY''@;'; put 'put ''VlMiOmNhc2UiRENvblJlZiI6Y2FzZSJTWEFkZGwiOmNhc2UiRENvbkJpbiI6Y2FzZSJEQ29uTmFtZSI6Y2FzZSJTWFBJIjpjYXNlIlN4Rm9ybWF0IjpjYXNlIlN4U2VsZWN0IjpjYXNlIlN4UnVsZSI6Y2FzZSJTeEZpbHQiOmNhc2UiU3hJdG0iOmNhc2UiU3hEWEYiOmNhc2UiU2Nlbk1hbiI6''@;'; put 'put ''Y2FzZSJEQ29uIjpjYXNlIkNlbGxXYXRjaCI6Y2FzZSJQcmludFJvd0NvbCI6Y2FzZSJQcmludEdyaWQiOmNhc2UiUHJpbnRTaXplIjpjYXNlIlhDVCI6Y2FzZSJDUk4iOmNhc2UiU2NsIjpjYXNlIlNoZWV0RXh0IjpjYXNlIlNoZWV0RXh0T3B0aW9uYWwiOmNhc2UiT2JOb01hY3JvcyI6Y2Fz''@;'; put 'put ''ZSJPYlByb2oiOmNhc2UiR1VJRFR5cGVMaWIiOmNhc2UiV09wdCI6Y2FzZSJQaG9uZXRpY0luZm8iOmNhc2UiT2xlT2JqZWN0U2l6ZSI6Y2FzZSJEWEYiOmNhc2UiRFhGTiI6Y2FzZSJEWEZOMTIiOmNhc2UiRFhGTjEyTGlzdCI6Y2FzZSJEWEZOMTJOb0NCIjpjYXNlIkR2IjpjYXNlIkRWYWwi''@;'; put 'put ''OmNhc2UiQlJBSSI6Y2FzZSJTZXJpZXMiOmNhc2UiU2VyaWVzVGV4dCI6Y2FzZSJEQ29ubiI6Y2FzZSJEYk9yUGFyYW1RcnkiOmNhc2UiREJRdWVyeUV4dCI6Y2FzZSJPbGVEYkNvbm4iOmNhc2UiRXh0U3RyaW5nIjpjYXNlIklGbXRSZWNvcmQiOmNhc2UiQ29uZEZtdCI6Y2FzZSJDRiI6Y2Fz''@;'; put 'put ''ZSJDRjEyIjpjYXNlIkNGRXgiOmNhc2UiRXhjZWw5RmlsZSI6Y2FzZSJVbml0cyI6Y2FzZSJJbnRlcmZhY2VIZHIiOmNhc2UiTW1zIjpjYXNlIkludGVyZmFjZUVuZCI6Y2FzZSJEU0YiOmNhc2UiQnVpbHRJbkZuR3JvdXBDb3VudCI6Y2FzZSJXaW5kb3cxIjpjYXNlIkhpZGVPYmoiOmNhc2Ui''@;'; put 'put ''R3JpZFNldCI6Y2FzZSJHdXRzIjpjYXNlIlVzZXJCVmlldyI6Y2FzZSJVc2VyU1ZpZXdCZWdpbiI6Y2FzZSJVc2VyU1ZpZXdFbmQiOmNhc2UiRGVmQ29sV2lkdGgiOmNhc2UiRGVmYXVsdFJvd0hlaWdodCI6YnJlYWs7Y2FzZSJYRkV4dCI6T1UoVG5bQm4uaXhmZV0sQm4uZXh0KTticmVhaztj''@;'; put 'put ''YXNlIkNvbEluZm8iOmlmKCF0ci5jZWxsU3R5bGVzKWJyZWFrO2Zvcig7Qm4uZT49Qm4uczspa2lbQm4uZS0tXT17d2lkdGg6Qm4udy8yNTYsbGV2ZWw6Qm4ubGV2ZWx8fDAsaGlkZGVuOiEhKDEmQm4uZmxhZ3MpfSx3cnx8KHdyPSEwKSxyMShraVtCbi5lKzFdKTticmVhaztjYXNlIlJvdyI6''@;'; put 'put ''dmFyIERpPXt9O251bGwhPUJuLmxldmVsJiYoa3JbQm4ucl09RGksRGkubGV2ZWw9Qm4ubGV2ZWwpLEJuLmhpZGRlbiYmKGtyW0JuLnJdPURpLERpLmhpZGRlbj0hMCksQm4uaHB0JiYoa3JbQm4ucl09RGksRGkuaHB0PUJuLmhwdCxEaS5ocHg9dzMoQm4uaHB0KSksQm4uaXhmZSYmKGtyW0Ju''@;'; put 'put ''LnJdPURpLHByKEx0PXtpeGZlOkJuLml4ZmUsWEY6VG5bQm4uaXhmZV18fHt9LHY6MCx0OiJuIn0sTCksRGkucz1MdC5zKTticmVhaztjYXNlIkxlZnRNYXJnaW4iOmNhc2UiUmlnaHRNYXJnaW4iOmNhc2UiVG9wTWFyZ2luIjpjYXNlIkJvdHRvbU1hcmdpbiI6UVsiIW1hcmdpbnMiXXx8a20o''@;'; put 'put ''UVsiIW1hcmdpbnMiXT17fSksUVsiIW1hcmdpbnMiXVtGcy5zbGljZSgwLC02KS50b0xvd2VyQ2FzZSgpXT1CbjticmVhaztjYXNlIlNlbGVjdGlvbiI6UVsiIXNlbCJdPUJuO2JyZWFrO2Nhc2UiU2V0dXAiOlFbIiFtYXJnaW5zIl18fGttKFFbIiFtYXJnaW5zIl09e30pLFFbIiFtYXJnaW5z''@;'; put 'put ''Il0uaGVhZGVyPUJuLmhlYWRlcixRWyIhbWFyZ2lucyJdLmZvb3Rlcj1Cbi5mb290ZXI7YnJlYWs7Y2FzZSJXaW5kb3cyIjpCbi5SVEwmJihDbi5WaWV3c1swXS5SVEw9ITApLHdpPUJuO2JyZWFrO2Nhc2UiQ291bnRyeSI6SnQ9Qm47YnJlYWs7Y2FzZSJGb250IjpCbi5pY3YmJlduKEJuLmlj''@;'; put 'put ''dikmJihCbi5jb2xvcj17cmdiOmFmKFduKEJuLmljdikpfSksZGVsZXRlIEJuLmljdiwwPT1xbi5Gb250cy5sZW5ndGgmJkJwKEJuKSxxbi5Gb250cy5wdXNoKEJuKTticmVhaztjYXNlIlBhbGV0dGUiOnNyPUJuO2JyZWFrO2Nhc2UiVGhlbWUiOkZpPUJuO2JyZWFrO2Nhc2UiQ29kZU5hbWUi''@;'; put 'put ''Ok5lP2xyLkNvZGVOYW1lPUJufHxsci5uYW1lOkNuLldCUHJvcHMuQ29kZU5hbWU9Qm58fCJUaGlzV29ya2Jvb2siO2JyZWFrO2Nhc2UiUGFuZSI6KHdpfHx7fSkuZnJvemVuJiYoUVsiIWZyZWV6ZSJdPUdpKHtyOkJuLnl8fDAsYzpCbi54fHwwfSkpO2JyZWFrO2RlZmF1bHQ6c3dpdGNoKFVp''@;'; put 'put ''Lm4pe2Nhc2UiRGF0IjpjYXNlIkJlZ2luIjpjYXNlIkVuZCI6Y2FzZSJTdGFydEJsb2NrIjpjYXNlIkVuZEJsb2NrIjpjYXNlIkZyYW1lIjpjYXNlIkFyZWEiOmNhc2UiQXhpcyI6Y2FzZSJBeGlzTGluZSI6Y2FzZSJUaWNrIjpjYXNlIkF4ZXNVc2VkIjpjYXNlIkNydExheW91dDEyIjpjYXNl''@;'; put 'put ''IkNydExheW91dDEyQSI6Y2FzZSJDcnRMaW5rIjpjYXNlIkNydExpbmUiOmNhc2UiQ3J0TWxGcnQiOmNhc2UiQ3J0TWxGcnRDb250aW51ZSI6Y2FzZSJMaW5lRm9ybWF0IjpjYXNlIkFyZWFGb3JtYXQiOmNhc2UiQ2hhcnQiOmNhc2UiQ2hhcnQzZCI6Y2FzZSJDaGFydDNEQmFyU2hhcGUiOmNh''@;'; put 'put ''c2UiQ2hhcnRGb3JtYXQiOmNhc2UiQ2hhcnRGcnRJbmZvIjpjYXNlIlBsb3RBcmVhIjpjYXNlIlBsb3RHcm93dGgiOmNhc2UiU2VyaWVzTGlzdCI6Y2FzZSJTZXJQYXJlbnQiOmNhc2UiU2VyQXV4VHJlbmQiOmNhc2UiRGF0YUZvcm1hdCI6Y2FzZSJTZXJUb0NydCI6Y2FzZSJGb250WCI6Y2Fz''@;'; put 'put ''ZSJDYXRTZXJSYW5nZSI6Y2FzZSJBeGNFeHQiOmNhc2UiU2VyRm10IjpjYXNlIlNodFByb3BzIjpjYXNlIkRlZmF1bHRUZXh0IjpjYXNlIlRleHQiOmNhc2UiQ2F0TGFiIjpjYXNlIkRhdGFMYWJFeHRDb250ZW50cyI6Y2FzZSJMZWdlbmQiOmNhc2UiTGVnZW5kRXhjZXB0aW9uIjpjYXNlIlBp''@;'; put 'put ''ZSI6Y2FzZSJTY2F0dGVyIjpjYXNlIlBpZUZvcm1hdCI6Y2FzZSJNYXJrZXJGb3JtYXQiOmNhc2UiU3RhcnRPYmplY3QiOmNhc2UiRW5kT2JqZWN0IjpjYXNlIkFsUnVucyI6Y2FzZSJPYmplY3RMaW5rIjpjYXNlIlNJSW5kZXgiOmNhc2UiQXR0YWNoZWRMYWJlbCI6Y2FzZSJZTXVsdCI6Y2Fz''@;'; put 'put ''ZSJMaW5lIjpjYXNlIkJhciI6Y2FzZSJTdXJmIjpjYXNlIkF4aXNQYXJlbnQiOmNhc2UiUG9zIjpjYXNlIlZhbHVlUmFuZ2UiOmNhc2UiU1hWaWV3RXg5IjpjYXNlIlNYVmlld0xpbmsiOmNhc2UiUGl2b3RDaGFydEJpdHMiOmNhc2UiU0Jhc2VSZWYiOmNhc2UiVGV4dFByb3BzU3RyZWFtIjpj''@;'; put 'put ''YXNlIkxuRXh0IjpjYXNlIk1rckV4dCI6Y2FzZSJDcnRDb29wdCI6Y2FzZSJRc2kiOmNhc2UiUXNpZiI6Y2FzZSJRc2lyIjpjYXNlIlFzaVNYVGFnIjpjYXNlIlR4dFFyeSI6Y2FzZSJGaWx0ZXJNb2RlIjpjYXNlIkF1dG9GaWx0ZXIiOmNhc2UiQXV0b0ZpbHRlckluZm8iOmNhc2UiQXV0b0Zp''@;'; put 'put ''bHRlcjEyIjpjYXNlIkRyb3BEb3duT2JqSWRzIjpjYXNlIlNvcnQiOmNhc2UiU29ydERhdGEiOmNhc2UiU2hhcGVQcm9wc1N0cmVhbSI6Y2FzZSJNc29EcmF3aW5nIjpjYXNlIk1zb0RyYXdpbmdHcm91cCI6Y2FzZSJNc29EcmF3aW5nU2VsZWN0aW9uIjpjYXNlIldlYlB1YiI6Y2FzZSJBdXRv''@;'; put 'put ''V2ViUHViIjpjYXNlIkhlYWRlckZvb3RlciI6Y2FzZSJIRlBpY3R1cmUiOmNhc2UiUExWIjpjYXNlIkhvcml6b250YWxQYWdlQnJlYWtzIjpjYXNlIlZlcnRpY2FsUGFnZUJyZWFrcyI6Y2FzZSJCYWNrdXAiOmNhc2UiQ29tcHJlc3NQaWN0dXJlcyI6Y2FzZSJDb21wYXQxMiI6Y2FzZSJDb250''@;'; put 'put ''aW51ZSI6Y2FzZSJDb250aW51ZUZydDEyIjpjYXNlIkZydEZvbnRMaXN0IjpjYXNlIkZydFdyYXBwZXIiOmJyZWFrO2RlZmF1bHQ6c3dpdGNoKFVpLm4pe2Nhc2UiVGFiSWRDb25mIjpjYXNlIlJhZGFyIjpjYXNlIlJhZGFyQXJlYSI6Y2FzZSJEcm9wQmFyIjpjYXNlIkludGwiOmNhc2UiQ29v''@;'; put 'put ''cmRMaXN0IjpjYXNlIlNlckF1eEVyckJhciI6Y2FzZSJCSUZGMkZPTlRDTFIiOmNhc2UiQklGRjJGTVRDTlQiOmNhc2UiQklGRjJGT05UWFRSQSI6Y2FzZSJCSUZGMlhGIjpjYXNlIkJJRkYzWEYiOmNhc2UiQklGRjRYRiI6Y2FzZSJCSUZGMlhGSU5ERVgiOmNhc2UiQklGRjRGTVRDTlQiOmNh''@;'; put 'put ''c2UiQklGRjJST1ciOmNhc2UiQklGRjJXSU5ET1cyIjpjYXNlIlNDRU5BUklPIjpjYXNlIkRDb25CaW4iOmNhc2UiUGljRiI6Y2FzZSJEYXRhTGFiRXh0IjpjYXNlIkxlbCI6Y2FzZSJCb3BQb3AiOmNhc2UiQm9wUG9wQ3VzdG9tIjpjYXNlIlJlYWxUaW1lRGF0YSI6Y2FzZSJOYW1lIjpjYXNl''@;'; put 'put ''IkxITkdyYXBoIjpjYXNlIkZuR3JvdXBOYW1lIjpjYXNlIkFkZE1lbnUiOmNhc2UiTFByIjpjYXNlIkxpc3RPYmoiOmNhc2UiTGlzdEZpZWxkIjpjYXNlIlJSU29ydCI6Y2FzZSJCaWdOYW1lIjpjYXNlIlRvb2xiYXJIZHIiOmNhc2UiVG9vbGJhckVuZCI6Y2FzZSJEREVPYmpOYW1lIjpjYXNl''@;'; put 'put ''IkZSVEFyY2hJZCQiOmJyZWFrO2RlZmF1bHQ6aWYoTC5XVEYpdGhyb3ciVW5yZWNvZ25pemVkIFJlY29yZCAiK1VpLm59fX19fWVsc2UgUy5sKz1ibyx0ciYmdHIuZW5jJiZ0ci5lbmMuaW5zaXR1JiZ0ci5lbmMuaW5zaXR1KE1lKHtsZW5ndGg6Ym99KSl9cmV0dXJuIGsuU2hlZXROYW1lcz1M''@;'; put 'put ''ZShsZSkuc29ydChmdW5jdGlvbihkYSxJaSl7cmV0dXJuIE51bWJlcihkYSktTnVtYmVyKElpKX0pLm1hcChmdW5jdGlvbihkYSl7cmV0dXJuIGxlW2RhXS5uYW1lfSksTC5ib29rU2hlZXRzfHwoay5TaGVldHM9RyksIWsuU2hlZXROYW1lcy5sZW5ndGgmJkJlWyIhcmVmIl0/KGsuU2hlZXRO''@;'; put 'put ''YW1lcy5wdXNoKCJTaGVldDEiKSxrLlNoZWV0cyYmKGsuU2hlZXRzLlNoZWV0MT1CZSkpOmsuUHJlYW1ibGU9QmUsay5TaGVldHMmJmZvLmZvckVhY2goZnVuY3Rpb24oZGEsSWkpe2suU2hlZXRzW2suU2hlZXROYW1lc1tJaV1dWyIhYXV0b2ZpbHRlciJdPWRhfSksay5TdHJpbmdzPWJlLGsu''@;'; put 'put ''U1NGPUEuZ2V0X3RhYmxlKCksdHIuZW5jJiYoay5FbmNyeXB0aW9uPXRyLmVuYyksRmkmJihrLlRoZW1lcz1GaSksay5NZXRhZGF0YT17fSx2b2lkIDAhPT1KdCYmKGsuTWV0YWRhdGEuQ291bnRyeT1KdCksVm4ubmFtZXMubGVuZ3RoPjAmJihDbi5OYW1lcz1Wbi5uYW1lcyksay5Xb3JrYm9v''@;'; put 'put ''az1DbixrfShHLmNvbnRlbnQsTCk7ZWxzZSBpZigobGU9eWUuZmluZChTLCJQZXJmZWN0T2ZmaWNlX01BSU4iKSkmJmxlLmNvbnRlbnQpUT1aOC50b193b3JrYm9vayhsZS5jb250ZW50LChMLnR5cGU9bWUsTCkpO2Vsc2V7aWYoIShsZT15ZS5maW5kKFMsIk5hdGl2ZUNvbnRlbnRfTUFJTiIp''@;'; put 'put ''KXx8IWxlLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBXb3JrYm9vayBzdHJlYW0iKTtRPVo4LnRvX3dvcmtib29rKGxlLmNvbnRlbnQsKEwudHlwZT1tZSxMKSl9TC5ib29rVkJBJiZTLkZ1bGxQYXRocyYmeWUuZmluZChTLCIvX1ZCQV9QUk9KRUNUX0NVUi9WQkEvZGly''@;'; put 'put ''IikmJihRLnZiYXJhdz1mdW5jdGlvbiBNbShTKXt2YXIgTD15ZS51dGlscy5jZmJfbmV3KHtyb290OiJSIn0pO3JldHVybiBTLkZ1bGxQYXRocy5mb3JFYWNoKGZ1bmN0aW9uKGssRyl7aWYoIi8iIT09ay5zbGljZSgtMSkmJmsubWF0Y2goL19WQkFfUFJPSkVDVF9DVVIvKSl7dmFyIFE9ay5y''@;'; put 'put ''ZXBsYWNlKC9eW15cL10qLywiUiIpLnJlcGxhY2UoL1wvX1ZCQV9QUk9KRUNUX0NVUlx1MDAwMCovLCIiKTt5ZS51dGlscy5jZmJfYWRkKEwsUSxTLkZpbGVJbmRleFtHXS5jb250ZW50KX19KSx5ZS53cml0ZShMKX0oUykpfXZhciBwZT17fTtyZXR1cm4gUy5GdWxsUGF0aHMmJmZ1bmN0aW9u''@;'; put 'put ''IFVXKFMsTCxrKXt2YXIgRz15ZS5maW5kKFMsIiFEb2N1bWVudFN1bW1hcnlJbmZvcm1hdGlvbiIpO2lmKEcmJkcuc2l6ZT4wKXRyeXt2YXIgUT1IOChHLGtwLE83X0RTSSk7Zm9yKHZhciBsZSBpbiBRKUxbbGVdPVFbbGVdfWNhdGNoKE5lKXtpZihrLldURil0aHJvdyBOZX12YXIgbWU9eWUu''@;'; put 'put ''ZmluZChTLCIhU3VtbWFyeUluZm9ybWF0aW9uIik7aWYobWUmJm1lLnNpemU+MCl0cnl7dmFyIHBlPUg4KG1lLHAwLE83X1NJKTtmb3IodmFyIGJlIGluIHBlKW51bGw9PUxbYmVdJiYoTFtiZV09cGVbYmVdKX1jYXRjaChOZSl7aWYoay5XVEYpdGhyb3cgTmV9TC5IZWFkaW5nUGFpcnMmJkwu''@;'; put 'put ''VGl0bGVzT2ZQYXJ0cyYmKE55KEwuSGVhZGluZ1BhaXJzLEwuVGl0bGVzT2ZQYXJ0cyxMLGspLGRlbGV0ZSBMLkhlYWRpbmdQYWlycyxkZWxldGUgTC5UaXRsZXNPZlBhcnRzKX0oUyxwZSxMKSxRLlByb3BzPVEuQ3VzdHByb3BzPXBlLEwuYm9va0ZpbGVzJiYoUS5jZmI9UyksUX12YXIgQm09''@;'; put 'put ''ezA6e246IkJydFJvd0hkciIsZjpmdW5jdGlvbiBGb2UoUyxMKXt2YXIgaz17fSxHPVMubCtMO2sucj1TLnJlYWRfc2hpZnQoNCksUy5sKz00O3ZhciBRPVMucmVhZF9zaGlmdCgyKTtTLmwrPTE7dmFyIGxlPVMucmVhZF9zaGlmdCgxKTtyZXR1cm4gUy5sPUcsNyZsZSYmKGsubGV2ZWw9NyZs''@;'; put 'put ''ZSksMTYmbGUmJihrLmhpZGRlbj0hMCksMzImbGUmJihrLmhwdD1RLzIwKSxrfX0sMTp7bjoiQnJ0Q2VsbEJsYW5rIixmOmZ1bmN0aW9uIHpaKFMpe3JldHVybltPYyhTKV19fSwyOntuOiJCcnRDZWxsUmsiLGY6ZnVuY3Rpb24gaTIoUyl7cmV0dXJuW09jKFMpLEpuKFMpLCJuIl19fSwzOntu''@;'; put 'put ''OiJCcnRDZWxsRXJyb3IiLGY6ZnVuY3Rpb24gVVooUyl7cmV0dXJuW09jKFMpLFMucmVhZF9zaGlmdCgxKSwiZSJdfX0sNDp7bjoiQnJ0Q2VsbEJvb2wiLGY6ZnVuY3Rpb24gUG0oUyl7cmV0dXJuW09jKFMpLFMucmVhZF9zaGlmdCgxKSwiYiJdfX0sNTp7bjoiQnJ0Q2VsbFJlYWwiLGY6ZnVu''@;'; put 'put ''Y3Rpb24gV1ooUyl7cmV0dXJuW09jKFMpLFdzKFMpLCJuIl19fSw2OntuOiJCcnRDZWxsU3QiLGY6ZnVuY3Rpb24gS1ooUyl7cmV0dXJuW09jKFMpLGtsKFMpLCJzdHIiXX19LDc6e246IkJydENlbGxJc3N0IixmOmZ1bmN0aW9uIExMKFMpe3JldHVybltPYyhTKSxTLnJlYWRfc2hpZnQoNCks''@;'; put 'put ''InMiXX19LDg6e246IkJydEZtbGFTdHJpbmciLGY6ZnVuY3Rpb24gam8oUyxMLGspe3ZhciBHPVMubCtMLFE9T2MoUyk7US5yPWtbIiFyb3ciXTt2YXIgbWU9W1Esa2woUyksInN0ciJdO2lmKGsuY2VsbEZvcm11bGEpe1MubCs9Mjt2YXIgcGU9SWIoUyxHLVMubCxrKTttZVszXT1ZdShwZSxu''@;'; put 'put ''dWxsLFEsay5zdXBib29rcyxrKX1lbHNlIFMubD1HO3JldHVybiBtZX19LDk6e246IkJydEZtbGFOdW0iLGY6ZnVuY3Rpb24gZVcoUyxMLGspe3ZhciBHPVMubCtMLFE9T2MoUyk7US5yPWtbIiFyb3ciXTt2YXIgbWU9W1EsV3MoUyksIm4iXTtpZihrLmNlbGxGb3JtdWxhKXtTLmwrPTI7dmFy''@;'; put 'put ''IHBlPUliKFMsRy1TLmwsayk7bWVbM109WXUocGUsbnVsbCxRLGsuc3VwYm9va3Msayl9ZWxzZSBTLmw9RztyZXR1cm4gbWV9fSwxMDp7bjoiQnJ0Rm1sYUJvb2wiLGY6ZnVuY3Rpb24gSlooUyxMLGspe3ZhciBHPVMubCtMLFE9T2MoUyk7US5yPWtbIiFyb3ciXTt2YXIgbWU9W1EsUy5yZWFk''@;'; put 'put ''X3NoaWZ0KDEpLCJiIl07aWYoay5jZWxsRm9ybXVsYSl7Uy5sKz0yO3ZhciBwZT1JYihTLEctUy5sLGspO21lWzNdPVl1KHBlLG51bGwsUSxrLnN1cGJvb2tzLGspfWVsc2UgUy5sPUc7cmV0dXJuIG1lfX0sMTE6e246IkJydEZtbGFFcnJvciIsZjpmdW5jdGlvbiBRWihTLEwsayl7dmFyIEc9''@;'; put 'put ''Uy5sK0wsUT1PYyhTKTtRLnI9a1siIXJvdyJdO3ZhciBtZT1bUSxTLnJlYWRfc2hpZnQoMSksImUiXTtpZihrLmNlbGxGb3JtdWxhKXtTLmwrPTI7dmFyIHBlPUliKFMsRy1TLmwsayk7bWVbM109WXUocGUsbnVsbCxRLGsuc3VwYm9va3Msayl9ZWxzZSBTLmw9RztyZXR1cm4gbWV9fSwxMjp7''@;'; put 'put ''bjoiQnJ0U2hvcnRCbGFuayIsZjpmdW5jdGlvbiBPbShTKXtyZXR1cm5bSzIoUyldfX0sMTM6e246IkJydFNob3J0UmsiLGY6ZnVuY3Rpb24gRkwoUyl7cmV0dXJuW0syKFMpLEpuKFMpLCJuIl19fSwxNDp7bjoiQnJ0U2hvcnRFcnJvciIsZjpmdW5jdGlvbiBWb2UoUyl7cmV0dXJuW0syKFMp''@;'; put 'put ''LFMucmVhZF9zaGlmdCgxKSwiZSJdfX0sMTU6e246IkJydFNob3J0Qm9vbCIsZjpmdW5jdGlvbiBJTChTKXtyZXR1cm5bSzIoUyksUy5yZWFkX3NoaWZ0KDEpLCJiIl19fSwxNjp7bjoiQnJ0U2hvcnRSZWFsIixmOlBMfSwxNzp7bjoiQnJ0U2hvcnRTdCIsZjpmdW5jdGlvbiBxWihTKXtyZXR1''@;'; put 'put ''cm5bSzIoUyksa2woUyksInN0ciJdfX0sMTg6e246IkJydFNob3J0SXNzdCIsZjpmdW5jdGlvbiBaWihTKXtyZXR1cm5bSzIoUyksUy5yZWFkX3NoaWZ0KDQpLCJzIl19fSwxOTp7bjoiQnJ0U1NUSXRlbSIsZjprb30sMjA6e246IkJydFBDRElNaXNzaW5nIn0sMjE6e246IkJydFBDRElOdW1i''@;'; put 'put ''ZXIifSwyMjp7bjoiQnJ0UENESUJvb2xlYW4ifSwyMzp7bjoiQnJ0UENESUVycm9yIn0sMjQ6e246IkJydFBDRElTdHJpbmcifSwyNTp7bjoiQnJ0UENESURhdGV0aW1lIn0sMjY6e246IkJydFBDRElJbmRleCJ9LDI3OntuOiJCcnRQQ0RJQU1pc3NpbmcifSwyODp7bjoiQnJ0UENESUFOdW1i''@;'; put 'put ''ZXIifSwyOTp7bjoiQnJ0UENESUFCb29sZWFuIn0sMzA6e246IkJydFBDRElBRXJyb3IifSwzMTp7bjoiQnJ0UENESUFTdHJpbmcifSwzMjp7bjoiQnJ0UENESUFEYXRldGltZSJ9LDMzOntuOiJCcnRQQ1JSZWNvcmQifSwzNDp7bjoiQnJ0UENSUmVjb3JkRHQifSwzNTp7bjoiQnJ0RlJUQmVn''@;'; put 'put ''aW4ifSwzNjp7bjoiQnJ0RlJURW5kIn0sMzc6e246IkJydEFDQmVnaW4ifSwzODp7bjoiQnJ0QUNFbmQifSwzOTp7bjoiQnJ0TmFtZSIsZjpmdW5jdGlvbiBNVyhTLEwsayl7dmFyIEc9Uy5sK0w7Uy5sKz00LFMubCs9MTt2YXIgUT1TLnJlYWRfc2hpZnQoNCksbGU9dG0oUyksbWU9Y1ooUyww''@;'; put 'put ''LGspLHBlPW5kKFMpO1MubD1HO3ZhciBiZT17TmFtZTpsZSxQdGc6bWV9O3JldHVybiBRPDI2ODQzNTQ1NSYmKGJlLlNoZWV0PVEpLHBlJiYoYmUuQ29tbWVudD1wZSksYmV9fSw0MDp7bjoiQnJ0SW5kZXhSb3dCbG9jayJ9LDQyOntuOiJCcnRJbmRleEJsb2NrIn0sNDM6e246IkJydEZvbnQi''@;'; put 'put ''LGY6ZnVuY3Rpb24gZVIoUyxMLGspe3ZhciBHPXt9O0cuc3o9Uy5yZWFkX3NoaWZ0KDIpLzIwO3ZhciBRPXEyKFMpO3N3aXRjaChRLmZCb2xkJiYoRy5ib2xkPTEpLFEuZkl0YWxpYyYmKEcuaXRhbGljPTEpLFEuZlVuZGVybGluZSYmKEcudW5kZXJsaW5lPTEpLFEuZkNvbmRlbnNlJiYoRy5j''@;'; put 'put ''b25kZW5zZT0xKSxRLmZFeHRlbmQmJihHLmV4dGVuZD0xKSxRLmZTaGFkb3cmJihHLnNoYWRvdz0xKSxRLmZPdXRsaW5lJiYoRy5vdXRsaW5lPTEpLFEuZlN0cmlrZW91dCYmKEcuc3RyaWtlPTEpLDcwMD09PVMucmVhZF9zaGlmdCgyKSYmKEcuYm9sZD0xKSxTLnJlYWRfc2hpZnQoMikpe2Nh''@;'; put 'put ''c2UgMTpHLnZhbGlnbj0ic3VwZXIiO2JyZWFrO2Nhc2UgMjpHLnZhbGlnbj0ic3ViIn12YXIgbWU9Uy5yZWFkX3NoaWZ0KDEpOzAhPW1lJiYoRy51bmRlcmxpbmU9bWUpO3ZhciBwZT1TLnJlYWRfc2hpZnQoMSk7cGU+MCYmKEcuZmFtaWx5PXBlKTt2YXIgYmU9Uy5yZWFkX3NoaWZ0KDEpO3N3''@;'; put 'put ''aXRjaChiZT4wJiYoRy5jaGFyc2V0PWJlKSxTLmwrKyxHLmNvbG9yPUdkKFMpLFMucmVhZF9zaGlmdCgxKSl7Y2FzZSAxOkcuc2NoZW1lPSJtYWpvciI7YnJlYWs7Y2FzZSAyOkcuc2NoZW1lPSJtaW5vciJ9cmV0dXJuIEcubmFtZT1rbChTKSxHfX0sNDQ6e246IkJydEZtdCIsZjpmdW5jdGlv''@;'; put 'put ''biBuaChTLEwpe3JldHVybltTLnJlYWRfc2hpZnQoMiksa2woUyldfX0sNDU6e246IkJydEZpbGwiLGY6ZnVuY3Rpb24gU00oUyxMKXt2YXIgaz1TLmwrTCxHPXt9LFE9Uy5yZWFkX3NoaWZ0KDQpO2lmKDQwIT1RKXtHLnBhdHRlcm5UeXBlPXZtW1FdO3ZhciBsZT1HZChTKTs2NCE9bGUuaW5k''@;'; put 'put ''ZXgmJihHLmZnQ29sb3I9bGUpO3ZhciBtZT1HZChTKTs2NSE9bWUuaW5kZXgmJihHLmJnQ29sb3I9bWUpfWVsc2V7Uy5sKz0xNixTLnJlYWRfc2hpZnQoNCksV3MoUyksV3MoUyksV3MoUyksV3MoUyksV3MoUyk7Zm9yKHZhciBwZT1TLnJlYWRfc2hpZnQoNCksYmU9W10sTmU9MDtOZTxwZTsr''@;'; put 'put ''K05lKWJlLnB1c2goRGcoUykpfXJldHVybiBTLmw9ayxHfX0sNDY6e246IkJydEJvcmRlciIsZjpmdW5jdGlvbiBDVShTKXt2YXIgTD17fTtTLnJlYWRfc2hpZnQoMSk7dmFyIGs9aTcoUyk7Im5vbmUiIT1rLnN0eWxlJiYoTC50b3A9ayk7dmFyIEc9aTcoUyk7Im5vbmUiIT1HLnN0eWxlJiYo''@;'; put 'put ''TC5ib3R0b209Ryk7dmFyIFE9aTcoUyk7Im5vbmUiIT1RLnN0eWxlJiYoTC5sZWZ0PVEpO3ZhciBsZT1pNyhTKTsibm9uZSIhPWxlLnN0eWxlJiYoTC5yaWdodD1sZSk7dmFyIG1lPWk3KFMpO3JldHVybiJub25lIiE9bWUuc3R5bGUmJihMLmRpYWc9bWUpLEx9fSw0Nzp7bjoiQnJ0WEYiLGY6''@;'; put 'put ''ZnVuY3Rpb24gblIoUyxMKXt2YXIgaz1TLmwrTCxHPXt9LFE9Uy5yZWFkX3NoaWZ0KDIpLGxlPVMucmVhZF9zaGlmdCgyKSxtZT1TLnJlYWRfc2hpZnQoMikscGU9Uy5yZWFkX3NoaWZ0KDIpLGJlPVMucmVhZF9zaGlmdCgyKSxOZT1TLnJlYWRfc2hpZnQoMSk7Uy5yZWFkX3NoaWZ0KDEpO3Zh''@;'; put 'put ''ciBCZT1TLnJlYWRfc2hpZnQoMiksR2U9Uy5yZWFkX3NoaWZ0KDEpO1MubD1rLEcueGZJZD1RLEcubnVtRm10SWQ9bGUsRy5mb250SWQ9bWUsRy5maWxsSWQ9cGUsRy5ib3JkZXJJZD1iZSwxJkdlJiYwIT1HLm51bUZtdElkJiYoRy5hcHBseU51bWJlckZvcm1hdD0hMCksRy5hbGlnbm1lbnQ9''@;'; put 'put ''e30sTmU+MCYmKEcuYWxpZ25tZW50LnRleHRSb3RhdGlvbj1OZSk7dmFyIGV0PSExO3JldHVybiA3JkJlJiYoZXQ9ITAsRy5hbGlnbm1lbnQuaG9yaXpvbnRhbD16cFs3JkJlXSksRy5hbGlnbm1lbnQudmVydGljYWw9VXBbQmU+Pj4zJjddLEcuYWxpZ25tZW50LnZlcnRpY2FsJiYoZXQ9ITAp''@;'; put 'put ''LEJlPj4+NiYxJiYoRy5hbGlnbm1lbnQud3JhcFRleHQ9ITApLEJlPj4+OCYxJiYoRy5hbGlnbm1lbnQuc2hyaW5rVG9GaXQ9ITApLGV0fHxkZWxldGUgRy5hbGlnbm1lbnQsNCZHZSYmZXQmJihHLmFwcGx5QWxpZ25tZW50PSEwKSxHfX0sNDg6e246IkJydFN0eWxlIn0sNDk6e246IkJydENl''@;'; put 'put ''bGxNZXRhIn0sNTA6e246IkJydFZhbHVlTWV0YSJ9LDUxOntuOiJCcnRNZGIifSw1Mjp7bjoiQnJ0QmVnaW5GbWQifSw1Mzp7bjoiQnJ0RW5kRm1kIn0sNTQ6e246IkJydEJlZ2luTWR4In0sNTU6e246IkJydEVuZE1keCJ9LDU2OntuOiJCcnRCZWdpbk1keFR1cGxlIn0sNTc6e246IkJydEVu''@;'; put 'put ''ZE1keFR1cGxlIn0sNTg6e246IkJydE1keE1icklzdHIifSw1OTp7bjoiQnJ0U3RyIn0sNjA6e246IkJydENvbEluZm8iLGY6YU19LDYyOntuOiJCcnRDZWxsUlN0cmluZyJ9LDYzOntuOiJCcnRDYWxjQ2hhaW5JdGVtJCIsZjpmdW5jdGlvbiBETShTKXt2YXIgTD17fTtMLmk9Uy5yZWFkX3No''@;'; put 'put ''aWZ0KDQpO3ZhciBrPXt9O2sucj1TLnJlYWRfc2hpZnQoNCksay5jPVMucmVhZF9zaGlmdCg0KSxMLnI9R2koayk7dmFyIEc9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybiAyJkcmJihMLmw9IjEiKSw4JkcmJihMLmE9IjEiKSxMfX0sNjQ6e246IkJydERWYWwiLGY6ZnVuY3Rpb24gc1coUyxMLGsp''@;'; put 'put ''e3ZhciBHPVMubCtMLFE9Uy5yZWFkX3NoaWZ0KDQpLGxlPUF5KFMpLG1lPW5kKFMpLHBlPW5kKFMpLGJlPW5kKFMpLE5lPW5kKFMpLEJlPXJMKFMsTCxrKSxHZT1TLmw8Rz9yTChTLEwsayk6bnVsbCxldD0xNSZRLGN0PXt0OkF4W2V0XSxzcXJmeDpsZSxzOlttZSxwZSxiZSxOZV19O3JldHVy''@;'; put 'put ''biBCZSYmKGN0LmYxPUJlKSxHZSYmKGN0LmYyPUdlKSwwPT1ldHx8Mz09ZXR8fDc9PWV0fHwoY3Qub3A9QjBbUT4+MjAmMTVdKSxjdH19LDY1OntuOiJCcnRTeHZjZWxsTnVtIn0sNjY6e246IkJydFN4dmNlbGxTdHIifSw2Nzp7bjoiQnJ0U3h2Y2VsbEJvb2wifSw2ODp7bjoiQnJ0U3h2Y2Vs''@;'; put 'put ''bEVyciJ9LDY5OntuOiJCcnRTeHZjZWxsRGF0ZSJ9LDcwOntuOiJCcnRTeHZjZWxsTmlsIn0sMTI4OntuOiJCcnRGaWxlVmVyc2lvbiJ9LDEyOTp7bjoiQnJ0QmVnaW5TaGVldCJ9LDEzMDp7bjoiQnJ0RW5kU2hlZXQifSwxMzE6e246IkJydEJlZ2luQm9vayIsZjpwbixwOjB9LDEzMjp7bjoi''@;'; put 'put ''QnJ0RW5kQm9vayJ9LDEzMzp7bjoiQnJ0QmVnaW5Xc1ZpZXdzIn0sMTM0OntuOiJCcnRFbmRXc1ZpZXdzIn0sMTM1OntuOiJCcnRCZWdpbkJvb2tWaWV3cyJ9LDEzNjp7bjoiQnJ0RW5kQm9va1ZpZXdzIn0sMTM3OntuOiJCcnRCZWdpbldzVmlldyIsZjpmdW5jdGlvbiByVyhTKXt2YXIgTD1T''@;'; put 'put ''LnJlYWRfc2hpZnQoMik7cmV0dXJuIFMubCs9Mjgse1JUTDozMiZMLGdyaWQ6ISEoNCZMKX19fSwxMzg6e246IkJydEVuZFdzVmlldyJ9LDEzOTp7bjoiQnJ0QmVnaW5Dc1ZpZXdzIn0sMTQwOntuOiJCcnRFbmRDc1ZpZXdzIn0sMTQxOntuOiJCcnRCZWdpbkNzVmlldyJ9LDE0Mjp7bjoiQnJ0''@;'; put 'put ''RW5kQ3NWaWV3In0sMTQzOntuOiJCcnRCZWdpbkJ1bmRsZVNocyJ9LDE0NDp7bjoiQnJ0RW5kQnVuZGxlU2hzIn0sMTQ1OntuOiJCcnRCZWdpblNoZWV0RGF0YSJ9LDE0Njp7bjoiQnJ0RW5kU2hlZXREYXRhIn0sMTQ3OntuOiJCcnRXc1Byb3AiLGY6ZnVuY3Rpb24gQlooUyxMKXt2YXIgaz17''@;'; put 'put ''fSxHPVNbUy5sXTtyZXR1cm4rK1MubCxrLmFib3ZlPSEoNjQmRyksay5sZWZ0PSEoMTI4JkcpLFMubCs9MTgsay5uYW1lPUVTKFMsTC0xOSksa319LDE0ODp7bjoiQnJ0V3NEaW0iLGY6SFoscDoxNn0sMTUxOntuOiJCcnRQYW5lIixmOmZ1bmN0aW9uIFN4KFMsTCl7dmFyIGs9Uy5sK0w7V3Mo''@;'; put 'put ''UyksV3MoUyk7dmFyIEc9Uy5yZWFkX3NoaWZ0KDQsImkiKSxRPVMucmVhZF9zaGlmdCg0LCJpIik7aWYoUy5yZWFkX3NoaWZ0KDQpLFMucmVhZF9zaGlmdCgxKSxrIT1TLmwpdGhyb3cgbmV3IEVycm9yKCJCYWQgQnJ0UGFuZTogIitrKyIgIT0gIitTLmwpO3JldHVybltHaSh7cjpHLGM6UX0p''@;'; put 'put ''XX19LDE1Mjp7bjoiQnJ0U2VsIixmOmZ1bmN0aW9uIE14KFMsTCl7cmV0dXJuIFMucmVhZF9zaGlmdCg0KSx7Y2VsbDpHaSh7cjpTLnJlYWRfc2hpZnQoNCksYzpTLnJlYWRfc2hpZnQoNCl9KX19fSwxNTM6e246IkJydFdiUHJvcCIsZjpmdW5jdGlvbiBYTChTLEwpe3ZhciBrPXt9LEc9Uy5y''@;'; put 'put ''ZWFkX3NoaWZ0KDQpO2suZGVmYXVsdFRoZW1lVmVyc2lvbj1TLnJlYWRfc2hpZnQoNCk7dmFyIFE9TD44P2tsKFMpOiIiO3JldHVybiBRLmxlbmd0aD4wJiYoay5Db2RlTmFtZT1RKSxrLmF1dG9Db21wcmVzc1BpY3R1cmVzPSEhKDY1NTM2JkcpLGsuYmFja3VwRmlsZT0hISg2NCZHKSxrLmNo''@;'; put 'put ''ZWNrQ29tcGF0aWJpbGl0eT0hISg0MDk2JkcpLGsuZGF0ZTE5MDQ9ISEoMSZHKSxrLmZpbHRlclByaXZhY3k9ISEoOCZHKSxrLmhpZGVQaXZvdEZpZWxkTGlzdD0hISgxMDI0JkcpLGsucHJvbXB0ZWRTb2x1dGlvbnM9ISEoMTYmRyksay5wdWJsaXNoSXRlbXM9ISEoMjA0OCZHKSxrLnJlZnJl''@;'; put 'put ''c2hBbGxDb25uZWN0aW9ucz0hISgyNjIxNDQmRyksay5zYXZlRXh0ZXJuYWxMaW5rVmFsdWVzPSEhKDEyOCZHKSxrLnNob3dCb3JkZXJVbnNlbGVjdGVkVGFibGVzPSEhKDQmRyksay5zaG93SW5rQW5ub3RhdGlvbj0hISgzMiZHKSxrLnNob3dPYmplY3RzPVsiYWxsIiwicGxhY2Vob2xkZXJz''@;'; put 'put ''Iiwibm9uZSJdW0c+PjEzJjNdLGsuc2hvd1Bpdm90Q2hhcnRGaWx0ZXI9ISEoMzI3NjgmRyksay51cGRhdGVMaW5rcz1bInVzZXJTZXQiLCJuZXZlciIsImFsd2F5cyJdW0c+PjgmM10sa319LDE1NDp7bjoiQnJ0V2JGYWN0b2lkIn0sMTU1OntuOiJCcnRGaWxlUmVjb3ZlciJ9LDE1Njp7bjoi''@;'; put 'put ''QnJ0QnVuZGxlU2giLGY6ZnVuY3Rpb24gengoUyxMKXt2YXIgaz17fTtyZXR1cm4gay5IaWRkZW49Uy5yZWFkX3NoaWZ0KDQpLGsuaVRhYklEPVMucmVhZF9zaGlmdCg0KSxrLnN0clJlbElEPUhyKFMsTC04KSxrLm5hbWU9a2woUyksa319LDE1Nzp7bjoiQnJ0Q2FsY1Byb3AifSwxNTg6e246''@;'; put 'put ''IkJydEJvb2tWaWV3In0sMTU5OntuOiJCcnRCZWdpblNzdCIsZjpmdW5jdGlvbiBmb2UoUyl7cmV0dXJuW1MucmVhZF9zaGlmdCg0KSxTLnJlYWRfc2hpZnQoNCldfX0sMTYwOntuOiJCcnRFbmRTc3QifSwxNjE6e246IkJydEJlZ2luQUZpbHRlciIsZjpyZH0sMTYyOntuOiJCcnRFbmRBRmls''@;'; put 'put ''dGVyIn0sMTYzOntuOiJCcnRCZWdpbkZpbHRlckNvbHVtbiJ9LDE2NDp7bjoiQnJ0RW5kRmlsdGVyQ29sdW1uIn0sMTY1OntuOiJCcnRCZWdpbkZpbHRlcnMifSwxNjY6e246IkJydEVuZEZpbHRlcnMifSwxNjc6e246IkJydEZpbHRlciJ9LDE2ODp7bjoiQnJ0Q29sb3JGaWx0ZXIifSwxNjk6''@;'; put 'put ''e246IkJydEljb25GaWx0ZXIifSwxNzA6e246IkJydFRvcDEwRmlsdGVyIn0sMTcxOntuOiJCcnREeW5hbWljRmlsdGVyIn0sMTcyOntuOiJCcnRCZWdpbkN1c3RvbUZpbHRlcnMifSwxNzM6e246IkJydEVuZEN1c3RvbUZpbHRlcnMifSwxNzQ6e246IkJydEN1c3RvbUZpbHRlciJ9LDE3NTp7''@;'; put 'put ''bjoiQnJ0QUZpbHRlckRhdGVHcm91cEl0ZW0ifSwxNzY6e246IkJydE1lcmdlQ2VsbCIsZjpDeH0sMTc3OntuOiJCcnRCZWdpbk1lcmdlQ2VsbHMifSwxNzg6e246IkJydEVuZE1lcmdlQ2VsbHMifSwxNzk6e246IkJydEJlZ2luUGl2b3RDYWNoZURlZiJ9LDE4MDp7bjoiQnJ0RW5kUGl2b3RD''@;'; put 'put ''YWNoZURlZiJ9LDE4MTp7bjoiQnJ0QmVnaW5QQ0RGaWVsZHMifSwxODI6e246IkJydEVuZFBDREZpZWxkcyJ9LDE4Mzp7bjoiQnJ0QmVnaW5QQ0RGaWVsZCJ9LDE4NDp7bjoiQnJ0RW5kUENERmllbGQifSwxODU6e246IkJydEJlZ2luUENEU291cmNlIn0sMTg2OntuOiJCcnRFbmRQQ0RTb3Vy''@;'; put 'put ''Y2UifSwxODc6e246IkJydEJlZ2luUENEU1JhbmdlIn0sMTg4OntuOiJCcnRFbmRQQ0RTUmFuZ2UifSwxODk6e246IkJydEJlZ2luUENERkF0YmwifSwxOTA6e246IkJydEVuZFBDREZBdGJsIn0sMTkxOntuOiJCcnRCZWdpblBDRElSdW4ifSwxOTI6e246IkJydEVuZFBDRElSdW4ifSwxOTM6''@;'; put 'put ''e246IkJydEJlZ2luUGl2b3RDYWNoZVJlY29yZHMifSwxOTQ6e246IkJydEVuZFBpdm90Q2FjaGVSZWNvcmRzIn0sMTk1OntuOiJCcnRCZWdpblBDREhpZXJhcmNoaWVzIn0sMTk2OntuOiJCcnRFbmRQQ0RIaWVyYXJjaGllcyJ9LDE5Nzp7bjoiQnJ0QmVnaW5QQ0RIaWVyYXJjaHkifSwxOTg6''@;'; put 'put ''e246IkJydEVuZFBDREhpZXJhcmNoeSJ9LDE5OTp7bjoiQnJ0QmVnaW5QQ0RIRmllbGRzVXNhZ2UifSwyMDA6e246IkJydEVuZFBDREhGaWVsZHNVc2FnZSJ9LDIwMTp7bjoiQnJ0QmVnaW5FeHRDb25uZWN0aW9uIn0sMjAyOntuOiJCcnRFbmRFeHRDb25uZWN0aW9uIn0sMjAzOntuOiJCcnRC''@;'; put 'put ''ZWdpbkVDRGJQcm9wcyJ9LDIwNDp7bjoiQnJ0RW5kRUNEYlByb3BzIn0sMjA1OntuOiJCcnRCZWdpbkVDT2xhcFByb3BzIn0sMjA2OntuOiJCcnRFbmRFQ09sYXBQcm9wcyJ9LDIwNzp7bjoiQnJ0QmVnaW5QQ0RTQ29uc29sIn0sMjA4OntuOiJCcnRFbmRQQ0RTQ29uc29sIn0sMjA5OntuOiJC''@;'; put 'put ''cnRCZWdpblBDRFNDUGFnZXMifSwyMTA6e246IkJydEVuZFBDRFNDUGFnZXMifSwyMTE6e246IkJydEJlZ2luUENEU0NQYWdlIn0sMjEyOntuOiJCcnRFbmRQQ0RTQ1BhZ2UifSwyMTM6e246IkJydEJlZ2luUENEU0NQSXRlbSJ9LDIxNDp7bjoiQnJ0RW5kUENEU0NQSXRlbSJ9LDIxNTp7bjoi''@;'; put 'put ''QnJ0QmVnaW5QQ0RTQ1NldHMifSwyMTY6e246IkJydEVuZFBDRFNDU2V0cyJ9LDIxNzp7bjoiQnJ0QmVnaW5QQ0RTQ1NldCJ9LDIxODp7bjoiQnJ0RW5kUENEU0NTZXQifSwyMTk6e246IkJydEJlZ2luUENERkdyb3VwIn0sMjIwOntuOiJCcnRFbmRQQ0RGR3JvdXAifSwyMjE6e246IkJydEJl''@;'; put 'put ''Z2luUENERkdJdGVtcyJ9LDIyMjp7bjoiQnJ0RW5kUENERkdJdGVtcyJ9LDIyMzp7bjoiQnJ0QmVnaW5QQ0RGR1JhbmdlIn0sMjI0OntuOiJCcnRFbmRQQ0RGR1JhbmdlIn0sMjI1OntuOiJCcnRCZWdpblBDREZHRGlzY3JldGUifSwyMjY6e246IkJydEVuZFBDREZHRGlzY3JldGUifSwyMjc6''@;'; put 'put ''e246IkJydEJlZ2luUENEU0RUdXBsZUNhY2hlIn0sMjI4OntuOiJCcnRFbmRQQ0RTRFR1cGxlQ2FjaGUifSwyMjk6e246IkJydEJlZ2luUENEU0RUQ0VudHJpZXMifSwyMzA6e246IkJydEVuZFBDRFNEVENFbnRyaWVzIn0sMjMxOntuOiJCcnRCZWdpblBDRFNEVENFTWVtYmVycyJ9LDIzMjp7''@;'; put 'put ''bjoiQnJ0RW5kUENEU0RUQ0VNZW1iZXJzIn0sMjMzOntuOiJCcnRCZWdpblBDRFNEVENFTWVtYmVyIn0sMjM0OntuOiJCcnRFbmRQQ0RTRFRDRU1lbWJlciJ9LDIzNTp7bjoiQnJ0QmVnaW5QQ0RTRFRDUXVlcmllcyJ9LDIzNjp7bjoiQnJ0RW5kUENEU0RUQ1F1ZXJpZXMifSwyMzc6e246IkJy''@;'; put 'put ''dEJlZ2luUENEU0RUQ1F1ZXJ5In0sMjM4OntuOiJCcnRFbmRQQ0RTRFRDUXVlcnkifSwyMzk6e246IkJydEJlZ2luUENEU0RUQ1NldHMifSwyNDA6e246IkJydEVuZFBDRFNEVENTZXRzIn0sMjQxOntuOiJCcnRCZWdpblBDRFNEVENTZXQifSwyNDI6e246IkJydEVuZFBDRFNEVENTZXQifSwy''@;'; put 'put ''NDM6e246IkJydEJlZ2luUENEQ2FsY0l0ZW1zIn0sMjQ0OntuOiJCcnRFbmRQQ0RDYWxjSXRlbXMifSwyNDU6e246IkJydEJlZ2luUENEQ2FsY0l0ZW0ifSwyNDY6e246IkJydEVuZFBDRENhbGNJdGVtIn0sMjQ3OntuOiJCcnRCZWdpblBSdWxlIn0sMjQ4OntuOiJCcnRFbmRQUnVsZSJ9LDI0''@;'; put 'put ''OTp7bjoiQnJ0QmVnaW5QUkZpbHRlcnMifSwyNTA6e246IkJydEVuZFBSRmlsdGVycyJ9LDI1MTp7bjoiQnJ0QmVnaW5QUkZpbHRlciJ9LDI1Mjp7bjoiQnJ0RW5kUFJGaWx0ZXIifSwyNTM6e246IkJydEJlZ2luUE5hbWVzIn0sMjU0OntuOiJCcnRFbmRQTmFtZXMifSwyNTU6e246IkJydEJl''@;'; put 'put ''Z2luUE5hbWUifSwyNTY6e246IkJydEVuZFBOYW1lIn0sMjU3OntuOiJCcnRCZWdpblBOUGFpcnMifSwyNTg6e246IkJydEVuZFBOUGFpcnMifSwyNTk6e246IkJydEJlZ2luUE5QYWlyIn0sMjYwOntuOiJCcnRFbmRQTlBhaXIifSwyNjE6e246IkJydEJlZ2luRUNXZWJQcm9wcyJ9LDI2Mjp7''@;'; put 'put ''bjoiQnJ0RW5kRUNXZWJQcm9wcyJ9LDI2Mzp7bjoiQnJ0QmVnaW5FY1dwVGFibGVzIn0sMjY0OntuOiJCcnRFbmRFQ1dQVGFibGVzIn0sMjY1OntuOiJCcnRCZWdpbkVDUGFyYW1zIn0sMjY2OntuOiJCcnRFbmRFQ1BhcmFtcyJ9LDI2Nzp7bjoiQnJ0QmVnaW5FQ1BhcmFtIn0sMjY4OntuOiJC''@;'; put 'put ''cnRFbmRFQ1BhcmFtIn0sMjY5OntuOiJCcnRCZWdpblBDREtQSXMifSwyNzA6e246IkJydEVuZFBDREtQSXMifSwyNzE6e246IkJydEJlZ2luUENES1BJIn0sMjcyOntuOiJCcnRFbmRQQ0RLUEkifSwyNzM6e246IkJydEJlZ2luRGltcyJ9LDI3NDp7bjoiQnJ0RW5kRGltcyJ9LDI3NTp7bjoi''@;'; put 'put ''QnJ0QmVnaW5EaW0ifSwyNzY6e246IkJydEVuZERpbSJ9LDI3Nzp7bjoiQnJ0SW5kZXhQYXJ0RW5kIn0sMjc4OntuOiJCcnRCZWdpblN0eWxlU2hlZXQifSwyNzk6e246IkJydEVuZFN0eWxlU2hlZXQifSwyODA6e246IkJydEJlZ2luU1hWaWV3In0sMjgxOntuOiJCcnRFbmRTWFZJIn0sMjgy''@;'; put 'put ''OntuOiJCcnRCZWdpblNYVkkifSwyODM6e246IkJydEJlZ2luU1hWSXMifSwyODQ6e246IkJydEVuZFNYVklzIn0sMjg1OntuOiJCcnRCZWdpblNYVkQifSwyODY6e246IkJydEVuZFNYVkQifSwyODc6e246IkJydEJlZ2luU1hWRHMifSwyODg6e246IkJydEVuZFNYVkRzIn0sMjg5OntuOiJC''@;'; put 'put ''cnRCZWdpblNYUEkifSwyOTA6e246IkJydEVuZFNYUEkifSwyOTE6e246IkJydEJlZ2luU1hQSXMifSwyOTI6e246IkJydEVuZFNYUElzIn0sMjkzOntuOiJCcnRCZWdpblNYREkifSwyOTQ6e246IkJydEVuZFNYREkifSwyOTU6e246IkJydEJlZ2luU1hESXMifSwyOTY6e246IkJydEVuZFNY''@;'; put 'put ''RElzIn0sMjk3OntuOiJCcnRCZWdpblNYTEkifSwyOTg6e246IkJydEVuZFNYTEkifSwyOTk6e246IkJydEJlZ2luU1hMSVJ3cyJ9LDMwMDp7bjoiQnJ0RW5kU1hMSVJ3cyJ9LDMwMTp7bjoiQnJ0QmVnaW5TWExJQ29scyJ9LDMwMjp7bjoiQnJ0RW5kU1hMSUNvbHMifSwzMDM6e246IkJydEJl''@;'; put 'put ''Z2luU1hGb3JtYXQifSwzMDQ6e246IkJydEVuZFNYRm9ybWF0In0sMzA1OntuOiJCcnRCZWdpblNYRm9ybWF0cyJ9LDMwNjp7bjoiQnJ0RW5kU3hGb3JtYXRzIn0sMzA3OntuOiJCcnRCZWdpblN4U2VsZWN0In0sMzA4OntuOiJCcnRFbmRTeFNlbGVjdCJ9LDMwOTp7bjoiQnJ0QmVnaW5JU1hW''@;'; put 'put ''RFJ3cyJ9LDMxMDp7bjoiQnJ0RW5kSVNYVkRSd3MifSwzMTE6e246IkJydEJlZ2luSVNYVkRDb2xzIn0sMzEyOntuOiJCcnRFbmRJU1hWRENvbHMifSwzMTM6e246IkJydEVuZFNYTG9jYXRpb24ifSwzMTQ6e246IkJydEJlZ2luU1hMb2NhdGlvbiJ9LDMxNTp7bjoiQnJ0RW5kU1hWaWV3In0s''@;'; put 'put ''MzE2OntuOiJCcnRCZWdpblNYVEhzIn0sMzE3OntuOiJCcnRFbmRTWFRIcyJ9LDMxODp7bjoiQnJ0QmVnaW5TWFRIIn0sMzE5OntuOiJCcnRFbmRTWFRIIn0sMzIwOntuOiJCcnRCZWdpbklTWFRIUndzIn0sMzIxOntuOiJCcnRFbmRJU1hUSFJ3cyJ9LDMyMjp7bjoiQnJ0QmVnaW5JU1hUSENv''@;'; put 'put ''bHMifSwzMjM6e246IkJydEVuZElTWFRIQ29scyJ9LDMyNDp7bjoiQnJ0QmVnaW5TWFRETVBTIn0sMzI1OntuOiJCcnRFbmRTWFRETVBzIn0sMzI2OntuOiJCcnRCZWdpblNYVERNUCJ9LDMyNzp7bjoiQnJ0RW5kU1hURE1QIn0sMzI4OntuOiJCcnRCZWdpblNYVEhJdGVtcyJ9LDMyOTp7bjoi''@;'; put 'put ''QnJ0RW5kU1hUSEl0ZW1zIn0sMzMwOntuOiJCcnRCZWdpblNYVEhJdGVtIn0sMzMxOntuOiJCcnRFbmRTWFRISXRlbSJ9LDMzMjp7bjoiQnJ0QmVnaW5NZXRhZGF0YSJ9LDMzMzp7bjoiQnJ0RW5kTWV0YWRhdGEifSwzMzQ6e246IkJydEJlZ2luRXNtZHRpbmZvIn0sMzM1OntuOiJCcnRNZHRp''@;'; put 'put ''bmZvIn0sMzM2OntuOiJCcnRFbmRFc21kdGluZm8ifSwzMzc6e246IkJydEJlZ2luRXNtZGIifSwzMzg6e246IkJydEVuZEVzbWRiIn0sMzM5OntuOiJCcnRCZWdpbkVzZm1kIn0sMzQwOntuOiJCcnRFbmRFc2ZtZCJ9LDM0MTp7bjoiQnJ0QmVnaW5TaW5nbGVDZWxscyJ9LDM0Mjp7bjoiQnJ0''@;'; put 'put ''RW5kU2luZ2xlQ2VsbHMifSwzNDM6e246IkJydEJlZ2luTGlzdCJ9LDM0NDp7bjoiQnJ0RW5kTGlzdCJ9LDM0NTp7bjoiQnJ0QmVnaW5MaXN0Q29scyJ9LDM0Njp7bjoiQnJ0RW5kTGlzdENvbHMifSwzNDc6e246IkJydEJlZ2luTGlzdENvbCJ9LDM0ODp7bjoiQnJ0RW5kTGlzdENvbCJ9LDM0''@;'; put 'put ''OTp7bjoiQnJ0QmVnaW5MaXN0WG1sQ1ByIn0sMzUwOntuOiJCcnRFbmRMaXN0WG1sQ1ByIn0sMzUxOntuOiJCcnRMaXN0Q0NGbWxhIn0sMzUyOntuOiJCcnRMaXN0VHJGbWxhIn0sMzUzOntuOiJCcnRCZWdpbkV4dGVybmFscyJ9LDM1NDp7bjoiQnJ0RW5kRXh0ZXJuYWxzIn0sMzU1OntuOiJC''@;'; put 'put ''cnRTdXBCb29rU3JjIixmOkhyfSwzNTc6e246IkJydFN1cFNlbGYifSwzNTg6e246IkJydFN1cFNhbWUifSwzNTk6e246IkJydFN1cFRhYnMifSwzNjA6e246IkJydEJlZ2luU3VwQm9vayJ9LDM2MTp7bjoiQnJ0UGxhY2Vob2xkZXJOYW1lIn0sMzYyOntuOiJCcnRFeHRlcm5TaGVldCIsZjpR''@;'; put 'put ''U30sMzYzOntuOiJCcnRFeHRlcm5UYWJsZVN0YXJ0In0sMzY0OntuOiJCcnRFeHRlcm5UYWJsZUVuZCJ9LDM2Njp7bjoiQnJ0RXh0ZXJuUm93SGRyIn0sMzY3OntuOiJCcnRFeHRlcm5DZWxsQmxhbmsifSwzNjg6e246IkJydEV4dGVybkNlbGxSZWFsIn0sMzY5OntuOiJCcnRFeHRlcm5DZWxs''@;'; put 'put ''Qm9vbCJ9LDM3MDp7bjoiQnJ0RXh0ZXJuQ2VsbEVycm9yIn0sMzcxOntuOiJCcnRFeHRlcm5DZWxsU3RyaW5nIn0sMzcyOntuOiJCcnRCZWdpbkVzbWR4In0sMzczOntuOiJCcnRFbmRFc21keCJ9LDM3NDp7bjoiQnJ0QmVnaW5NZHhTZXQifSwzNzU6e246IkJydEVuZE1keFNldCJ9LDM3Njp7''@;'; put 'put ''bjoiQnJ0QmVnaW5NZHhNYnJQcm9wIn0sMzc3OntuOiJCcnRFbmRNZHhNYnJQcm9wIn0sMzc4OntuOiJCcnRCZWdpbk1keEtQSSJ9LDM3OTp7bjoiQnJ0RW5kTWR4S1BJIn0sMzgwOntuOiJCcnRCZWdpbkVzc3RyIn0sMzgxOntuOiJCcnRFbmRFc3N0ciJ9LDM4Mjp7bjoiQnJ0QmVnaW5QUkZJ''@;'; put 'put ''dGVtIn0sMzgzOntuOiJCcnRFbmRQUkZJdGVtIn0sMzg0OntuOiJCcnRCZWdpblBpdm90Q2FjaGVJRHMifSwzODU6e246IkJydEVuZFBpdm90Q2FjaGVJRHMifSwzODY6e246IkJydEJlZ2luUGl2b3RDYWNoZUlEIn0sMzg3OntuOiJCcnRFbmRQaXZvdENhY2hlSUQifSwzODg6e246IkJydEJl''@;'; put 'put ''Z2luSVNYVklzIn0sMzg5OntuOiJCcnRFbmRJU1hWSXMifSwzOTA6e246IkJydEJlZ2luQ29sSW5mb3MifSwzOTE6e246IkJydEVuZENvbEluZm9zIn0sMzkyOntuOiJCcnRCZWdpblJ3QnJrIn0sMzkzOntuOiJCcnRFbmRSd0JyayJ9LDM5NDp7bjoiQnJ0QmVnaW5Db2xCcmsifSwzOTU6e246''@;'; put 'put ''IkJydEVuZENvbEJyayJ9LDM5Njp7bjoiQnJ0QnJrIn0sMzk3OntuOiJCcnRVc2VyQm9va1ZpZXcifSwzOTg6e246IkJydEluZm8ifSwzOTk6e246IkJydENVc3IifSw0MDA6e246IkJydFVzciJ9LDQwMTp7bjoiQnJ0QmVnaW5Vc2VycyJ9LDQwMzp7bjoiQnJ0RU9GIn0sNDA0OntuOiJCcnRV''@;'; put 'put ''Q1IifSw0MDU6e246IkJydFJSSW5zRGVsIn0sNDA2OntuOiJCcnRSUkVuZEluc0RlbCJ9LDQwNzp7bjoiQnJ0UlJNb3ZlIn0sNDA4OntuOiJCcnRSUkVuZE1vdmUifSw0MDk6e246IkJydFJSQ2hnQ2VsbCJ9LDQxMDp7bjoiQnJ0UlJFbmRDaGdDZWxsIn0sNDExOntuOiJCcnRSUkhlYWRlciJ9''@;'; put 'put ''LDQxMjp7bjoiQnJ0UlJVc2VyVmlldyJ9LDQxMzp7bjoiQnJ0UlJSZW5TaGVldCJ9LDQxNDp7bjoiQnJ0UlJJbnNlcnRTaCJ9LDQxNTp7bjoiQnJ0UlJEZWZOYW1lIn0sNDE2OntuOiJCcnRSUk5vdGUifSw0MTc6e246IkJydFJSQ29uZmxpY3QifSw0MTg6e246IkJydFJSVFFTSUYifSw0MTk6''@;'; put 'put ''e246IkJydFJSRm9ybWF0In0sNDIwOntuOiJCcnRSUkVuZEZvcm1hdCJ9LDQyMTp7bjoiQnJ0UlJBdXRvRm10In0sNDIyOntuOiJCcnRCZWdpblVzZXJTaFZpZXdzIn0sNDIzOntuOiJCcnRCZWdpblVzZXJTaFZpZXcifSw0MjQ6e246IkJydEVuZFVzZXJTaFZpZXcifSw0MjU6e246IkJydEVu''@;'; put 'put ''ZFVzZXJTaFZpZXdzIn0sNDI2OntuOiJCcnRBcnJGbWxhIixmOmZ1bmN0aW9uIFZMKFMsTCxrKXt2YXIgRz1TLmwrTCxRPVRwKFMpLGxlPVMucmVhZF9zaGlmdCgxKSxtZT1bUV07aWYobWVbMl09bGUsay5jZWxsRm9ybXVsYSl7dmFyIHBlPXNaKFMsRy1TLmwsayk7bWVbMV09cGV9ZWxzZSBT''@;'; put 'put ''Lmw9RztyZXR1cm4gbWV9fSw0Mjc6e246IkJydFNockZtbGEiLGY6ZnVuY3Rpb24gV2IoUyxMLGspe3ZhciBHPVMubCtMLGxlPVtyZChTLDE2KV07aWYoay5jZWxsRm9ybXVsYSl7dmFyIG1lPXR4KFMsRy1TLmwsayk7bGVbMV09bWUsUy5sPUd9ZWxzZSBTLmw9RztyZXR1cm4gbGV9fSw0Mjg6''@;'; put 'put ''e246IkJydFRhYmxlIn0sNDI5OntuOiJCcnRCZWdpbkV4dENvbm5lY3Rpb25zIn0sNDMwOntuOiJCcnRFbmRFeHRDb25uZWN0aW9ucyJ9LDQzMTp7bjoiQnJ0QmVnaW5QQ0RDYWxjTWVtcyJ9LDQzMjp7bjoiQnJ0RW5kUENEQ2FsY01lbXMifSw0MzM6e246IkJydEJlZ2luUENEQ2FsY01lbSJ9''@;'; put 'put ''LDQzNDp7bjoiQnJ0RW5kUENEQ2FsY01lbSJ9LDQzNTp7bjoiQnJ0QmVnaW5QQ0RIR0xldmVscyJ9LDQzNjp7bjoiQnJ0RW5kUENESEdMZXZlbHMifSw0Mzc6e246IkJydEJlZ2luUENESEdMZXZlbCJ9LDQzODp7bjoiQnJ0RW5kUENESEdMZXZlbCJ9LDQzOTp7bjoiQnJ0QmVnaW5QQ0RIR0xH''@;'; put 'put ''cm91cHMifSw0NDA6e246IkJydEVuZFBDREhHTEdyb3VwcyJ9LDQ0MTp7bjoiQnJ0QmVnaW5QQ0RIR0xHcm91cCJ9LDQ0Mjp7bjoiQnJ0RW5kUENESEdMR3JvdXAifSw0NDM6e246IkJydEJlZ2luUENESEdMR01lbWJlcnMifSw0NDQ6e246IkJydEVuZFBDREhHTEdNZW1iZXJzIn0sNDQ1Ontu''@;'; put 'put ''OiJCcnRCZWdpblBDREhHTEdNZW1iZXIifSw0NDY6e246IkJydEVuZFBDREhHTEdNZW1iZXIifSw0NDc6e246IkJydEJlZ2luUVNJIn0sNDQ4OntuOiJCcnRFbmRRU0kifSw0NDk6e246IkJydEJlZ2luUVNJUiJ9LDQ1MDp7bjoiQnJ0RW5kUVNJUiJ9LDQ1MTp7bjoiQnJ0QmVnaW5EZWxldGVk''@;'; put 'put ''TmFtZXMifSw0NTI6e246IkJydEVuZERlbGV0ZWROYW1lcyJ9LDQ1Mzp7bjoiQnJ0QmVnaW5EZWxldGVkTmFtZSJ9LDQ1NDp7bjoiQnJ0RW5kRGVsZXRlZE5hbWUifSw0NTU6e246IkJydEJlZ2luUVNJRnMifSw0NTY6e246IkJydEVuZFFTSUZzIn0sNDU3OntuOiJCcnRCZWdpblFTSUYifSw0''@;'; put 'put ''NTg6e246IkJydEVuZFFTSUYifSw0NTk6e246IkJydEJlZ2luQXV0b1NvcnRTY29wZSJ9LDQ2MDp7bjoiQnJ0RW5kQXV0b1NvcnRTY29wZSJ9LDQ2MTp7bjoiQnJ0QmVnaW5Db25kaXRpb25hbEZvcm1hdHRpbmcifSw0NjI6e246IkJydEVuZENvbmRpdGlvbmFsRm9ybWF0dGluZyJ9LDQ2Mzp7''@;'; put 'put ''bjoiQnJ0QmVnaW5DRlJ1bGUifSw0NjQ6e246IkJydEVuZENGUnVsZSJ9LDQ2NTp7bjoiQnJ0QmVnaW5JY29uU2V0In0sNDY2OntuOiJCcnRFbmRJY29uU2V0In0sNDY3OntuOiJCcnRCZWdpbkRhdGFiYXIifSw0Njg6e246IkJydEVuZERhdGFiYXIifSw0Njk6e246IkJydEJlZ2luQ29sb3JT''@;'; put 'put ''Y2FsZSJ9LDQ3MDp7bjoiQnJ0RW5kQ29sb3JTY2FsZSJ9LDQ3MTp7bjoiQnJ0Q0ZWTyJ9LDQ3Mjp7bjoiQnJ0RXh0ZXJuVmFsdWVNZXRhIn0sNDczOntuOiJCcnRCZWdpbkNvbG9yUGFsZXR0ZSJ9LDQ3NDp7bjoiQnJ0RW5kQ29sb3JQYWxldHRlIn0sNDc1OntuOiJCcnRJbmRleGVkQ29sb3Ii''@;'; put 'put ''fSw0NzY6e246IkJydE1hcmdpbnMiLGY6ZnVuY3Rpb24gWWIoUyl7dmFyIEw9e307cmV0dXJuIEV4LmZvckVhY2goZnVuY3Rpb24oayl7TFtrXT1XcyhTKX0pLEx9fSw0Nzc6e246IkJydFByaW50T3B0aW9ucyJ9LDQ3ODp7bjoiQnJ0UGFnZVNldHVwIn0sNDc5OntuOiJCcnRCZWdpbkhlYWRl''@;'; put 'put ''ckZvb3RlciJ9LDQ4MDp7bjoiQnJ0RW5kSGVhZGVyRm9vdGVyIn0sNDgxOntuOiJCcnRCZWdpblNYQ3J0Rm9ybWF0In0sNDgyOntuOiJCcnRFbmRTWENydEZvcm1hdCJ9LDQ4Mzp7bjoiQnJ0QmVnaW5TWENydEZvcm1hdHMifSw0ODQ6e246IkJydEVuZFNYQ3J0Rm9ybWF0cyJ9LDQ4NTp7bjoi''@;'; put 'put ''QnJ0V3NGbXRJbmZvIixmOmZ1bmN0aW9uIFZaKFMpe3ZhciBMPXt9LGs9e30sRz17fSxRPVMucmVhZF9zaGlmdCg0KSxsZT1TLnJlYWRfc2hpZnQoMik7Ry53Y2g9UTw9NjU1MzY/US8yNTY6bGU7dmFyIG1lPVMucmVhZF9zaGlmdCgyKTtrLmhwdD1tZS8yMDt2YXIgcGU9Uy5yZWFkX3NoaWZ0''@;'; put 'put ''KDIpO3JldHVybiAyJnBlJiYoay5oaWRkZW49ITApLDQmcGUmJihMLnRvcHRoaWNrPSEwKSw4JnBlJiYoTC5ib3R0aGljaz0hMCksTC5yb3dvdXRsaW5lPVMucmVhZF9zaGlmdCgxKSxMLmNvbG91dGxpbmU9Uy5yZWFkX3NoaWZ0KDEpLE0xKGspLEwucm93PWsscjEoRyksTC5jb2w9RyxMfX0s''@;'; put 'put ''NDg2OntuOiJCcnRCZWdpbk1ncyJ9LDQ4Nzp7bjoiQnJ0RW5kTUdzIn0sNDg4OntuOiJCcnRCZWdpbk1HTWFwcyJ9LDQ4OTp7bjoiQnJ0RW5kTUdNYXBzIn0sNDkwOntuOiJCcnRCZWdpbk1HIn0sNDkxOntuOiJCcnRFbmRNRyJ9LDQ5Mjp7bjoiQnJ0QmVnaW5NYXAifSw0OTM6e246IkJydEVu''@;'; put 'put ''ZE1hcCJ9LDQ5NDp7bjoiQnJ0SExpbmsiLGY6ZnVuY3Rpb24gWmIoUyxMKXt2YXIgaz1TLmwrTCxHPXJkKFMsMTYpLFE9bmQoUyksbGU9a2woUyksbWU9a2woUykscGU9a2woUyk7Uy5sPWs7dmFyIGJlPXtyZng6RyxyZWxJZDpRLGxvYzpsZSxkaXNwbGF5OnBlfTtyZXR1cm4gbWUmJihiZS5U''@;'; put 'put ''b29sdGlwPW1lKSxiZX19LDQ5NTp7bjoiQnJ0QmVnaW5EQ29uIn0sNDk2OntuOiJCcnRFbmREQ29uIn0sNDk3OntuOiJCcnRCZWdpbkRSZWZzIn0sNDk4OntuOiJCcnRFbmREUmVmcyJ9LDQ5OTp7bjoiQnJ0RFJlZiJ9LDUwMDp7bjoiQnJ0QmVnaW5TY2VuTWFuIn0sNTAxOntuOiJCcnRFbmRT''@;'; put 'put ''Y2VuTWFuIn0sNTAyOntuOiJCcnRCZWdpblNjdCJ9LDUwMzp7bjoiQnJ0RW5kU2N0In0sNTA0OntuOiJCcnRTbGMifSw1MDU6e246IkJydEJlZ2luRFhGcyJ9LDUwNjp7bjoiQnJ0RW5kRFhGcyJ9LDUwNzp7bjoiQnJ0RFhGIn0sNTA4OntuOiJCcnRCZWdpblRhYmxlU3R5bGVzIn0sNTA5Ontu''@;'; put 'put ''OiJCcnRFbmRUYWJsZVN0eWxlcyJ9LDUxMDp7bjoiQnJ0QmVnaW5UYWJsZVN0eWxlIn0sNTExOntuOiJCcnRFbmRUYWJsZVN0eWxlIn0sNTEyOntuOiJCcnRUYWJsZVN0eWxlRWxlbWVudCJ9LDUxMzp7bjoiQnJ0VGFibGVTdHlsZUNsaWVudCJ9LDUxNDp7bjoiQnJ0QmVnaW5Wb2xEZXBzIn0s''@;'; put 'put ''NTE1OntuOiJCcnRFbmRWb2xEZXBzIn0sNTE2OntuOiJCcnRCZWdpblZvbFR5cGUifSw1MTc6e246IkJydEVuZFZvbFR5cGUifSw1MTg6e246IkJydEJlZ2luVm9sTWFpbiJ9LDUxOTp7bjoiQnJ0RW5kVm9sTWFpbiJ9LDUyMDp7bjoiQnJ0QmVnaW5Wb2xUb3BpYyJ9LDUyMTp7bjoiQnJ0RW5k''@;'; put 'put ''Vm9sVG9waWMifSw1MjI6e246IkJydFZvbFN1YnRvcGljIn0sNTIzOntuOiJCcnRWb2xSZWYifSw1MjQ6e246IkJydFZvbE51bSJ9LDUyNTp7bjoiQnJ0Vm9sRXJyIn0sNTI2OntuOiJCcnRWb2xTdHIifSw1Mjc6e246IkJydFZvbEJvb2wifSw1Mjg6e246IkJydEJlZ2luQ2FsY0NoYWluJCJ9''@;'; put 'put ''LDUyOTp7bjoiQnJ0RW5kQ2FsY0NoYWluJCJ9LDUzMDp7bjoiQnJ0QmVnaW5Tb3J0U3RhdGUifSw1MzE6e246IkJydEVuZFNvcnRTdGF0ZSJ9LDUzMjp7bjoiQnJ0QmVnaW5Tb3J0Q29uZCJ9LDUzMzp7bjoiQnJ0RW5kU29ydENvbmQifSw1MzQ6e246IkJydEJvb2tQcm90ZWN0aW9uIn0sNTM1''@;'; put 'put ''OntuOiJCcnRTaGVldFByb3RlY3Rpb24ifSw1MzY6e246IkJydFJhbmdlUHJvdGVjdGlvbiJ9LDUzNzp7bjoiQnJ0UGhvbmV0aWNJbmZvIn0sNTM4OntuOiJCcnRCZWdpbkVDVHh0V2l6In0sNTM5OntuOiJCcnRFbmRFQ1R4dFdpeiJ9LDU0MDp7bjoiQnJ0QmVnaW5FQ1RXRmxkSW5mb0xzdCJ9''@;'; put 'put ''LDU0MTp7bjoiQnJ0RW5kRUNUV0ZsZEluZm9Mc3QifSw1NDI6e246IkJydEJlZ2luRUNUd0ZsZEluZm8ifSw1NDg6e246IkJydEZpbGVTaGFyaW5nIn0sNTQ5OntuOiJCcnRPbGVTaXplIn0sNTUwOntuOiJCcnREcmF3aW5nIixmOkhyfSw1NTE6e246IkJydExlZ2FjeURyYXdpbmcifSw1NTI6''@;'; put 'put ''e246IkJydExlZ2FjeURyYXdpbmdIRiJ9LDU1Mzp7bjoiQnJ0V2ViT3B0In0sNTU0OntuOiJCcnRCZWdpbldlYlB1Ykl0ZW1zIn0sNTU1OntuOiJCcnRFbmRXZWJQdWJJdGVtcyJ9LDU1Njp7bjoiQnJ0QmVnaW5XZWJQdWJJdGVtIn0sNTU3OntuOiJCcnRFbmRXZWJQdWJJdGVtIn0sNTU4Ontu''@;'; put 'put ''OiJCcnRCZWdpblNYQ29uZEZtdCJ9LDU1OTp7bjoiQnJ0RW5kU1hDb25kRm10In0sNTYwOntuOiJCcnRCZWdpblNYQ29uZEZtdHMifSw1NjE6e246IkJydEVuZFNYQ29uZEZtdHMifSw1NjI6e246IkJydEJrSGltIn0sNTY0OntuOiJCcnRDb2xvciJ9LDU2NTp7bjoiQnJ0QmVnaW5JbmRleGVk''@;'; put 'put ''Q29sb3JzIn0sNTY2OntuOiJCcnRFbmRJbmRleGVkQ29sb3JzIn0sNTY5OntuOiJCcnRCZWdpbk1SVUNvbG9ycyJ9LDU3MDp7bjoiQnJ0RW5kTVJVQ29sb3JzIn0sNTcyOntuOiJCcnRNUlVDb2xvciJ9LDU3Mzp7bjoiQnJ0QmVnaW5EVmFscyJ9LDU3NDp7bjoiQnJ0RW5kRFZhbHMifSw1Nzc6''@;'; put 'put ''e246IkJydFN1cE5hbWVTdGFydCJ9LDU3ODp7bjoiQnJ0U3VwTmFtZVZhbHVlU3RhcnQifSw1Nzk6e246IkJydFN1cE5hbWVWYWx1ZUVuZCJ9LDU4MDp7bjoiQnJ0U3VwTmFtZU51bSJ9LDU4MTp7bjoiQnJ0U3VwTmFtZUVyciJ9LDU4Mjp7bjoiQnJ0U3VwTmFtZVN0In0sNTgzOntuOiJCcnRT''@;'; put 'put ''dXBOYW1lTmlsIn0sNTg0OntuOiJCcnRTdXBOYW1lQm9vbCJ9LDU4NTp7bjoiQnJ0U3VwTmFtZUZtbGEifSw1ODY6e246IkJydFN1cE5hbWVCaXRzIn0sNTg3OntuOiJCcnRTdXBOYW1lRW5kIn0sNTg4OntuOiJCcnRFbmRTdXBCb29rIn0sNTg5OntuOiJCcnRDZWxsU21hcnRUYWdQcm9wZXJ0''@;'; put 'put ''eSJ9LDU5MDp7bjoiQnJ0QmVnaW5DZWxsU21hcnRUYWcifSw1OTE6e246IkJydEVuZENlbGxTbWFydFRhZyJ9LDU5Mjp7bjoiQnJ0QmVnaW5DZWxsU21hcnRUYWdzIn0sNTkzOntuOiJCcnRFbmRDZWxsU21hcnRUYWdzIn0sNTk0OntuOiJCcnRCZWdpblNtYXJ0VGFncyJ9LDU5NTp7bjoiQnJ0''@;'; put 'put ''RW5kU21hcnRUYWdzIn0sNTk2OntuOiJCcnRTbWFydFRhZ1R5cGUifSw1OTc6e246IkJydEJlZ2luU21hcnRUYWdUeXBlcyJ9LDU5ODp7bjoiQnJ0RW5kU21hcnRUYWdUeXBlcyJ9LDU5OTp7bjoiQnJ0QmVnaW5TWEZpbHRlcnMifSw2MDA6e246IkJydEVuZFNYRmlsdGVycyJ9LDYwMTp7bjoi''@;'; put 'put ''QnJ0QmVnaW5TWEZJTFRFUiJ9LDYwMjp7bjoiQnJ0RW5kU1hGaWx0ZXIifSw2MDM6e246IkJydEJlZ2luRmlsbHMifSw2MDQ6e246IkJydEVuZEZpbGxzIn0sNjA1OntuOiJCcnRCZWdpbkNlbGxXYXRjaGVzIn0sNjA2OntuOiJCcnRFbmRDZWxsV2F0Y2hlcyJ9LDYwNzp7bjoiQnJ0Q2VsbFdh''@;'; put 'put ''dGNoIn0sNjA4OntuOiJCcnRCZWdpbkNSRXJycyJ9LDYwOTp7bjoiQnJ0RW5kQ1JFcnJzIn0sNjEwOntuOiJCcnRDcmFzaFJlY0VyciJ9LDYxMTp7bjoiQnJ0QmVnaW5Gb250cyJ9LDYxMjp7bjoiQnJ0RW5kRm9udHMifSw2MTM6e246IkJydEJlZ2luQm9yZGVycyJ9LDYxNDp7bjoiQnJ0RW5k''@;'; put 'put ''Qm9yZGVycyJ9LDYxNTp7bjoiQnJ0QmVnaW5GbXRzIn0sNjE2OntuOiJCcnRFbmRGbXRzIn0sNjE3OntuOiJCcnRCZWdpbkNlbGxYRnMifSw2MTg6e246IkJydEVuZENlbGxYRnMifSw2MTk6e246IkJydEJlZ2luU3R5bGVzIn0sNjIwOntuOiJCcnRFbmRTdHlsZXMifSw2MjU6e246IkJydEJp''@;'; put 'put ''Z05hbWUifSw2MjY6e246IkJydEJlZ2luQ2VsbFN0eWxlWEZzIn0sNjI3OntuOiJCcnRFbmRDZWxsU3R5bGVYRnMifSw2Mjg6e246IkJydEJlZ2luQ29tbWVudHMifSw2Mjk6e246IkJydEVuZENvbW1lbnRzIn0sNjMwOntuOiJCcnRCZWdpbkNvbW1lbnRBdXRob3JzIn0sNjMxOntuOiJCcnRF''@;'; put 'put ''bmRDb21tZW50QXV0aG9ycyJ9LDYzMjp7bjoiQnJ0Q29tbWVudEF1dGhvciIsZjpOTX0sNjMzOntuOiJCcnRCZWdpbkNvbW1lbnRMaXN0In0sNjM0OntuOiJCcnRFbmRDb21tZW50TGlzdCJ9LDYzNTp7bjoiQnJ0QmVnaW5Db21tZW50IixmOmZ1bmN0aW9uIE5VKFMpe3ZhciBMPXt9O0wuaWF1''@;'; put 'put ''dGhvcj1TLnJlYWRfc2hpZnQoNCk7dmFyIGs9cmQoUywxNik7cmV0dXJuIEwucmZ4PWsucyxMLnJlZj1HaShrLnMpLFMubCs9MTYsTH19LDYzNjp7bjoiQnJ0RW5kQ29tbWVudCJ9LDYzNzp7bjoiQnJ0Q29tbWVudFRleHQiLGY6ZW19LDYzODp7bjoiQnJ0QmVnaW5PbGVPYmplY3RzIn0sNjM5''@;'; put 'put ''OntuOiJCcnRPbGVPYmplY3QifSw2NDA6e246IkJydEVuZE9sZU9iamVjdHMifSw2NDE6e246IkJydEJlZ2luU3hydWxlcyJ9LDY0Mjp7bjoiQnJ0RW5kU3hSdWxlcyJ9LDY0Mzp7bjoiQnJ0QmVnaW5BY3RpdmVYQ29udHJvbHMifSw2NDQ6e246IkJydEFjdGl2ZVgifSw2NDU6e246IkJydEVu''@;'; put 'put ''ZEFjdGl2ZVhDb250cm9scyJ9LDY0Njp7bjoiQnJ0QmVnaW5QQ0RTRFRDRU1lbWJlcnNTb3J0QnkifSw2NDg6e246IkJydEJlZ2luQ2VsbElnbm9yZUVDcyJ9LDY0OTp7bjoiQnJ0Q2VsbElnbm9yZUVDIn0sNjUwOntuOiJCcnRFbmRDZWxsSWdub3JlRUNzIn0sNjUxOntuOiJCcnRDc1Byb3Ai''@;'; put 'put ''LGY6ZnVuY3Rpb24gRngoUyxMKXtyZXR1cm4gUy5sKz0xMCx7bmFtZTprbChTKX19fSw2NTI6e246IkJydENzUGFnZVNldHVwIn0sNjUzOntuOiJCcnRCZWdpblVzZXJDc1ZpZXdzIn0sNjU0OntuOiJCcnRFbmRVc2VyQ3NWaWV3cyJ9LDY1NTp7bjoiQnJ0QmVnaW5Vc2VyQ3NWaWV3In0sNjU2''@;'; put 'put ''OntuOiJCcnRFbmRVc2VyQ3NWaWV3In0sNjU3OntuOiJCcnRCZWdpblBjZFNGQ0lFbnRyaWVzIn0sNjU4OntuOiJCcnRFbmRQQ0RTRkNJRW50cmllcyJ9LDY1OTp7bjoiQnJ0UENEU0ZDSUVudHJ5In0sNjYwOntuOiJCcnRCZWdpbkxpc3RQYXJ0cyJ9LDY2MTp7bjoiQnJ0TGlzdFBhcnQifSw2''@;'; put 'put ''NjI6e246IkJydEVuZExpc3RQYXJ0cyJ9LDY2Mzp7bjoiQnJ0U2hlZXRDYWxjUHJvcCJ9LDY2NDp7bjoiQnJ0QmVnaW5Gbkdyb3VwIn0sNjY1OntuOiJCcnRGbkdyb3VwIn0sNjY2OntuOiJCcnRFbmRGbkdyb3VwIn0sNjY3OntuOiJCcnRTdXBBZGRpbiJ9LDY2ODp7bjoiQnJ0U1hURE1QT3Jk''@;'; put 'put ''ZXIifSw2Njk6e246IkJydENzUHJvdGVjdGlvbiJ9LDY3MTp7bjoiQnJ0QmVnaW5Xc1NvcnRNYXAifSw2NzI6e246IkJydEVuZFdzU29ydE1hcCJ9LDY3Mzp7bjoiQnJ0QmVnaW5SUlNvcnQifSw2NzQ6e246IkJydEVuZFJSU29ydCJ9LDY3NTp7bjoiQnJ0UlJTb3J0SXRlbSJ9LDY3Njp7bjoi''@;'; put 'put ''QnJ0RmlsZVNoYXJpbmdJc28ifSw2Nzc6e246IkJydEJvb2tQcm90ZWN0aW9uSXNvIn0sNjc4OntuOiJCcnRTaGVldFByb3RlY3Rpb25Jc28ifSw2Nzk6e246IkJydENzUHJvdGVjdGlvbklzbyJ9LDY4MDp7bjoiQnJ0UmFuZ2VQcm90ZWN0aW9uSXNvIn0sNjgxOntuOiJCcnREVmFsTGlzdCJ9''@;'; put 'put ''LDEwMjQ6e246IkJydFJ3RGVzY2VudCJ9LDEwMjU6e246IkJydEtub3duRm9udHMifSwxMDI2OntuOiJCcnRCZWdpblNYVHVwbGVTZXQifSwxMDI3OntuOiJCcnRFbmRTWFR1cGxlU2V0In0sMTAyODp7bjoiQnJ0QmVnaW5TWFR1cGxlU2V0SGVhZGVyIn0sMTAyOTp7bjoiQnJ0RW5kU1hUdXBs''@;'; put 'put ''ZVNldEhlYWRlciJ9LDEwMzA6e246IkJydFNYVHVwbGVTZXRIZWFkZXJJdGVtIn0sMTAzMTp7bjoiQnJ0QmVnaW5TWFR1cGxlU2V0RGF0YSJ9LDEwMzI6e246IkJydEVuZFNYVHVwbGVTZXREYXRhIn0sMTAzMzp7bjoiQnJ0QmVnaW5TWFR1cGxlU2V0Um93In0sMTAzNDp7bjoiQnJ0RW5kU1hU''@;'; put 'put ''dXBsZVNldFJvdyJ9LDEwMzU6e246IkJydFNYVHVwbGVTZXRSb3dJdGVtIn0sMTAzNjp7bjoiQnJ0TmFtZUV4dCJ9LDEwMzc6e246IkJydFBDREgxNCJ9LDEwMzg6e246IkJydEJlZ2luUENEQ2FsY01lbTE0In0sMTAzOTp7bjoiQnJ0RW5kUENEQ2FsY01lbTE0In0sMTA0MDp7bjoiQnJ0U1hU''@;'; put 'put ''SDE0In0sMTA0MTp7bjoiQnJ0QmVnaW5TcGFya2xpbmVHcm91cCJ9LDEwNDI6e246IkJydEVuZFNwYXJrbGluZUdyb3VwIn0sMTA0Mzp7bjoiQnJ0U3BhcmtsaW5lIn0sMTA0NDp7bjoiQnJ0U1hESTE0In0sMTA0NTp7bjoiQnJ0V3NGbXRJbmZvRXgxNCJ9LDEwNDY6e246IkJydEJlZ2luQ29u''@;'; put 'put ''ZGl0aW9uYWxGb3JtYXR0aW5nMTQifSwxMDQ3OntuOiJCcnRFbmRDb25kaXRpb25hbEZvcm1hdHRpbmcxNCJ9LDEwNDg6e246IkJydEJlZ2luQ0ZSdWxlMTQifSwxMDQ5OntuOiJCcnRFbmRDRlJ1bGUxNCJ9LDEwNTA6e246IkJydENGVk8xNCJ9LDEwNTE6e246IkJydEJlZ2luRGF0YWJhcjE0''@;'; put 'put ''In0sMTA1Mjp7bjoiQnJ0QmVnaW5JY29uU2V0MTQifSwxMDUzOntuOiJCcnREVmFsMTQiLGY6ZnVuY3Rpb24gakwoUyxMLGspe3ZhciBHPWZ1bmN0aW9uIG9uKFMsTCxrKXt2YXIgRz1TLnJlYWRfc2hpZnQoNCksUT17fTtyZXR1cm4gMSZHJiYoUS5yZWZzPWZ1bmN0aW9uICRuKFMpe2Zvcih2''@;'; put 'put ''YXIgTD1TLnJlYWRfc2hpZnQoNCksaz1bXTtMLS0gPjA7KWsucHVzaChxcihTKSk7cmV0dXJuIGt9KFMpKSwyJkcmJihRLnNxcmVmcz1mdW5jdGlvbiBsYShTKXtmb3IodmFyIEw9Uy5yZWFkX3NoaWZ0KDQpLGs9W107TC0tID4wOylrLnB1c2goT28oUykpO3JldHVybiBrfShTKSksNCZHJiYo''@;'; put 'put ''US5mb3JtdWxhcz1mdW5jdGlvbiBucyhTLEwsayl7Zm9yKHZhciBHPVMucmVhZF9zaGlmdCg0KSxRPVtdO0ctLSA+MDspUS5wdXNoKHkwKFMsMCxrKSk7cmV0dXJuIFF9KFMsMCxrKSksOCZHJiYoUS5yZWxJRD1mdW5jdGlvbiB4byhTKXt2YXIgTD1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIDA9''@;'; put 'put ''PT1MPyIiOlMucmVhZF9zaGlmdChMLCJ1dGYxNmxlIil9KFMpKSxRfShTLDAsayksUT1TLnJlYWRfc2hpZnQoNCksbGU9bmQoUyksbWU9bmQoUykscGU9bmQoUyksYmU9bmQoUyksTmU9KEcuZm9ybXVsYXN8fFtdKVswXSxCZT0oRy5mb3JtdWxhc3x8W10pWzFdLEdlPTE1JlEsZXQ9e3Q6QXhb''@;'; put 'put ''R2VdLHNxcmZ4Okcuc3FyZWZzWzBdLHM6W2xlLG1lLHBlLGJlXX07cmV0dXJuIE5lJiYoZXQuZjE9TmUpLEJlJiYoZXQuZjI9QmUpLDA9PUdlfHwzPT1HZXx8Nz09R2V8fChldC5vcD1CMFtRPj4yMCYxNV0pLGV0fX0sMTA1NDp7bjoiQnJ0QmVnaW5EVmFsczE0In0sMTA1NTp7bjoiQnJ0Q29s''@;'; put 'put ''b3IxNCJ9LDEwNTY6e246IkJydEJlZ2luU3BhcmtsaW5lcyJ9LDEwNTc6e246IkJydEVuZFNwYXJrbGluZXMifSwxMDU4OntuOiJCcnRCZWdpblNwYXJrbGluZUdyb3VwcyJ9LDEwNTk6e246IkJydEVuZFNwYXJrbGluZUdyb3VwcyJ9LDEwNjE6e246IkJydFNYVkQxNCJ9LDEwNjI6e246IkJy''@;'; put 'put ''dEJlZ2luU1hWaWV3MTQifSwxMDYzOntuOiJCcnRFbmRTWFZpZXcxNCJ9LDEwNjQ6e246IkJydEJlZ2luU1hWaWV3MTYifSwxMDY1OntuOiJCcnRFbmRTWFZpZXcxNiJ9LDEwNjY6e246IkJydEJlZ2luUENEMTQifSwxMDY3OntuOiJCcnRFbmRQQ0QxNCJ9LDEwNjg6e246IkJydEJlZ2luRXh0''@;'; put 'put ''Q29ubjE0In0sMTA2OTp7bjoiQnJ0RW5kRXh0Q29ubjE0In0sMTA3MDp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZUlEcyJ9LDEwNzE6e246IkJydEVuZFNsaWNlckNhY2hlSURzIn0sMTA3Mjp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZUlEIn0sMTA3Mzp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVJRCJ9''@;'; put 'put ''LDEwNzU6e246IkJydEJlZ2luU2xpY2VyQ2FjaGUifSwxMDc2OntuOiJCcnRFbmRTbGljZXJDYWNoZSJ9LDEwNzc6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVEZWYifSwxMDc4OntuOiJCcnRFbmRTbGljZXJDYWNoZURlZiJ9LDEwNzk6e246IkJydEJlZ2luU2xpY2Vyc0V4In0sMTA4MDp7bjoi''@;'; put 'put ''QnJ0RW5kU2xpY2Vyc0V4In0sMTA4MTp7bjoiQnJ0QmVnaW5TbGljZXJFeCJ9LDEwODI6e246IkJydEVuZFNsaWNlckV4In0sMTA4Mzp7bjoiQnJ0QmVnaW5TbGljZXIifSwxMDg0OntuOiJCcnRFbmRTbGljZXIifSwxMDg1OntuOiJCcnRTbGljZXJDYWNoZVBpdm90VGFibGVzIn0sMTA4Njp7''@;'; put 'put ''bjoiQnJ0QmVnaW5TbGljZXJDYWNoZU9sYXBJbXBsIn0sMTA4Nzp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVPbGFwSW1wbCJ9LDEwODg6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVMZXZlbHNEYXRhIn0sMTA4OTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVMZXZlbHNEYXRhIn0sMTA5MDp7bjoiQnJ0QmVn''@;'; put 'put ''aW5TbGljZXJDYWNoZUxldmVsRGF0YSJ9LDEwOTE6e246IkJydEVuZFNsaWNlckNhY2hlTGV2ZWxEYXRhIn0sMTA5Mjp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZVNpUmFuZ2VzIn0sMTA5Mzp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVTaVJhbmdlcyJ9LDEwOTQ6e246IkJydEJlZ2luU2xpY2VyQ2Fj''@;'; put 'put ''aGVTaVJhbmdlIn0sMTA5NTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVTaVJhbmdlIn0sMTA5Njp7bjoiQnJ0U2xpY2VyQ2FjaGVPbGFwSXRlbSJ9LDEwOTc6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVTZWxlY3Rpb25zIn0sMTA5ODp7bjoiQnJ0U2xpY2VyQ2FjaGVTZWxlY3Rpb24ifSwxMDk5Ontu''@;'; put 'put ''OiJCcnRFbmRTbGljZXJDYWNoZVNlbGVjdGlvbnMifSwxMTAwOntuOiJCcnRCZWdpblNsaWNlckNhY2hlTmF0aXZlIn0sMTEwMTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVOYXRpdmUifSwxMTAyOntuOiJCcnRTbGljZXJDYWNoZU5hdGl2ZUl0ZW0ifSwxMTAzOntuOiJCcnRSYW5nZVByb3RlY3Rp''@;'; put 'put ''b24xNCJ9LDExMDQ6e246IkJydFJhbmdlUHJvdGVjdGlvbklzbzE0In0sMTEwNTp7bjoiQnJ0Q2VsbElnbm9yZUVDMTQifSwxMTExOntuOiJCcnRMaXN0MTQifSwxMTEyOntuOiJCcnRDRkljb24ifSwxMTEzOntuOiJCcnRCZWdpblNsaWNlckNhY2hlc1Bpdm90Q2FjaGVJRHMifSwxMTE0Ontu''@;'; put 'put ''OiJCcnRFbmRTbGljZXJDYWNoZXNQaXZvdENhY2hlSURzIn0sMTExNTp7bjoiQnJ0QmVnaW5TbGljZXJzIn0sMTExNjp7bjoiQnJ0RW5kU2xpY2VycyJ9LDExMTc6e246IkJydFdiUHJvcDE0In0sMTExODp7bjoiQnJ0QmVnaW5TWEVkaXQifSwxMTE5OntuOiJCcnRFbmRTWEVkaXQifSwxMTIw''@;'; put 'put ''OntuOiJCcnRCZWdpblNYRWRpdHMifSwxMTIxOntuOiJCcnRFbmRTWEVkaXRzIn0sMTEyMjp7bjoiQnJ0QmVnaW5TWENoYW5nZSJ9LDExMjM6e246IkJydEVuZFNYQ2hhbmdlIn0sMTEyNDp7bjoiQnJ0QmVnaW5TWENoYW5nZXMifSwxMTI1OntuOiJCcnRFbmRTWENoYW5nZXMifSwxMTI2Ontu''@;'; put 'put ''OiJCcnRTWFR1cGxlSXRlbXMifSwxMTI4OntuOiJCcnRCZWdpblNsaWNlclN0eWxlIn0sMTEyOTp7bjoiQnJ0RW5kU2xpY2VyU3R5bGUifSwxMTMwOntuOiJCcnRTbGljZXJTdHlsZUVsZW1lbnQifSwxMTMxOntuOiJCcnRCZWdpblN0eWxlU2hlZXRFeHQxNCJ9LDExMzI6e246IkJydEVuZFN0''@;'; put 'put ''eWxlU2hlZXRFeHQxNCJ9LDExMzM6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVzUGl2b3RDYWNoZUlEIn0sMTEzNDp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVzUGl2b3RDYWNoZUlEIn0sMTEzNTp7bjoiQnJ0QmVnaW5Db25kaXRpb25hbEZvcm1hdHRpbmdzIn0sMTEzNjp7bjoiQnJ0RW5kQ29uZGl0''@;'; put 'put ''aW9uYWxGb3JtYXR0aW5ncyJ9LDExMzc6e246IkJydEJlZ2luUENEQ2FsY01lbUV4dCJ9LDExMzg6e246IkJydEVuZFBDRENhbGNNZW1FeHQifSwxMTM5OntuOiJCcnRCZWdpblBDRENhbGNNZW1zRXh0In0sMTE0MDp7bjoiQnJ0RW5kUENEQ2FsY01lbXNFeHQifSwxMTQxOntuOiJCcnRQQ0RG''@;'; put 'put ''aWVsZDE0In0sMTE0Mjp7bjoiQnJ0QmVnaW5TbGljZXJTdHlsZXMifSwxMTQzOntuOiJCcnRFbmRTbGljZXJTdHlsZXMifSwxMTQ0OntuOiJCcnRCZWdpblNsaWNlclN0eWxlRWxlbWVudHMifSwxMTQ1OntuOiJCcnRFbmRTbGljZXJTdHlsZUVsZW1lbnRzIn0sMTE0Njp7bjoiQnJ0Q0ZSdWxl''@;'; put 'put ''RXh0In0sMTE0Nzp7bjoiQnJ0QmVnaW5TWENvbmRGbXQxNCJ9LDExNDg6e246IkJydEVuZFNYQ29uZEZtdDE0In0sMTE0OTp7bjoiQnJ0QmVnaW5TWENvbmRGbXRzMTQifSwxMTUwOntuOiJCcnRFbmRTWENvbmRGbXRzMTQifSwxMTUyOntuOiJCcnRCZWdpblNvcnRDb25kMTQifSwxMTUzOntu''@;'; put 'put ''OiJCcnRFbmRTb3J0Q29uZDE0In0sMTE1NDp7bjoiQnJ0RW5kRFZhbHMxNCJ9LDExNTU6e246IkJydEVuZEljb25TZXQxNCJ9LDExNTY6e246IkJydEVuZERhdGFiYXIxNCJ9LDExNTc6e246IkJydEJlZ2luQ29sb3JTY2FsZTE0In0sMTE1ODp7bjoiQnJ0RW5kQ29sb3JTY2FsZTE0In0sMTE1''@;'; put 'put ''OTp7bjoiQnJ0QmVnaW5TeHJ1bGVzMTQifSwxMTYwOntuOiJCcnRFbmRTeHJ1bGVzMTQifSwxMTYxOntuOiJCcnRCZWdpblBSdWxlMTQifSwxMTYyOntuOiJCcnRFbmRQUnVsZTE0In0sMTE2Mzp7bjoiQnJ0QmVnaW5QUkZpbHRlcnMxNCJ9LDExNjQ6e246IkJydEVuZFBSRmlsdGVyczE0In0s''@;'; put 'put ''MTE2NTp7bjoiQnJ0QmVnaW5QUkZpbHRlcjE0In0sMTE2Njp7bjoiQnJ0RW5kUFJGaWx0ZXIxNCJ9LDExNjc6e246IkJydEJlZ2luUFJGSXRlbTE0In0sMTE2ODp7bjoiQnJ0RW5kUFJGSXRlbTE0In0sMTE2OTp7bjoiQnJ0QmVnaW5DZWxsSWdub3JlRUNzMTQifSwxMTcwOntuOiJCcnRFbmRD''@;'; put 'put ''ZWxsSWdub3JlRUNzMTQifSwxMTcxOntuOiJCcnREeGYxNCJ9LDExNzI6e246IkJydEJlZ2luRHhGMTRzIn0sMTE3Mzp7bjoiQnJ0RW5kRHhmMTRzIn0sMTE3Nzp7bjoiQnJ0RmlsdGVyMTQifSwxMTc4OntuOiJCcnRCZWdpbkN1c3RvbUZpbHRlcnMxNCJ9LDExODA6e246IkJydEN1c3RvbUZp''@;'; put 'put ''bHRlcjE0In0sMTE4MTp7bjoiQnJ0SWNvbkZpbHRlcjE0In0sMTE4Mjp7bjoiQnJ0UGl2b3RDYWNoZUNvbm5lY3Rpb25OYW1lIn0sMjA0ODp7bjoiQnJ0QmVnaW5EZWNvdXBsZWRQaXZvdENhY2hlSURzIn0sMjA0OTp7bjoiQnJ0RW5kRGVjb3VwbGVkUGl2b3RDYWNoZUlEcyJ9LDIwNTA6e246''@;'; put 'put ''IkJydERlY291cGxlZFBpdm90Q2FjaGVJRCJ9LDIwNTE6e246IkJydEJlZ2luUGl2b3RUYWJsZVJlZnMifSwyMDUyOntuOiJCcnRFbmRQaXZvdFRhYmxlUmVmcyJ9LDIwNTM6e246IkJydFBpdm90VGFibGVSZWYifSwyMDU0OntuOiJCcnRTbGljZXJDYWNoZUJvb2tQaXZvdFRhYmxlcyJ9LDIw''@;'; put 'put ''NTU6e246IkJydEJlZ2luU3h2Y2VsbHMifSwyMDU2OntuOiJCcnRFbmRTeHZjZWxscyJ9LDIwNTc6e246IkJydEJlZ2luU3hSb3cifSwyMDU4OntuOiJCcnRFbmRTeFJvdyJ9LDIwNjA6e246IkJydFBjZENhbGNNZW0xNSJ9LDIwNjc6e246IkJydFFzaTE1In0sMjA2ODp7bjoiQnJ0QmVnaW5X''@;'; put 'put ''ZWJFeHRlbnNpb25zIn0sMjA2OTp7bjoiQnJ0RW5kV2ViRXh0ZW5zaW9ucyJ9LDIwNzA6e246IkJydFdlYkV4dGVuc2lvbiJ9LDIwNzE6e246IkJydEFic1BhdGgxNSJ9LDIwNzI6e246IkJydEJlZ2luUGl2b3RUYWJsZVVJU2V0dGluZ3MifSwyMDczOntuOiJCcnRFbmRQaXZvdFRhYmxlVUlT''@;'; put 'put ''ZXR0aW5ncyJ9LDIwNzU6e246IkJydFRhYmxlU2xpY2VyQ2FjaGVJRHMifSwyMDc2OntuOiJCcnRUYWJsZVNsaWNlckNhY2hlSUQifSwyMDc3OntuOiJCcnRCZWdpblRhYmxlU2xpY2VyQ2FjaGUifSwyMDc4OntuOiJCcnRFbmRUYWJsZVNsaWNlckNhY2hlIn0sMjA3OTp7bjoiQnJ0U3hGaWx0''@;'; put 'put ''ZXIxNSJ9LDIwODA6e246IkJydEJlZ2luVGltZWxpbmVDYWNoZVBpdm90Q2FjaGVJRHMifSwyMDgxOntuOiJCcnRFbmRUaW1lbGluZUNhY2hlUGl2b3RDYWNoZUlEcyJ9LDIwODI6e246IkJydFRpbWVsaW5lQ2FjaGVQaXZvdENhY2hlSUQifSwyMDgzOntuOiJCcnRCZWdpblRpbWVsaW5lQ2Fj''@;'; put 'put ''aGVJRHMifSwyMDg0OntuOiJCcnRFbmRUaW1lbGluZUNhY2hlSURzIn0sMjA4NTp7bjoiQnJ0QmVnaW5UaW1lbGluZUNhY2hlSUQifSwyMDg2OntuOiJCcnRFbmRUaW1lbGluZUNhY2hlSUQifSwyMDg3OntuOiJCcnRCZWdpblRpbWVsaW5lc0V4In0sMjA4ODp7bjoiQnJ0RW5kVGltZWxpbmVz''@;'; put 'put ''RXgifSwyMDg5OntuOiJCcnRCZWdpblRpbWVsaW5lRXgifSwyMDkwOntuOiJCcnRFbmRUaW1lbGluZUV4In0sMjA5MTp7bjoiQnJ0V29ya0Jvb2tQcjE1In0sMjA5Mjp7bjoiQnJ0UENESDE1In0sMjA5Mzp7bjoiQnJ0QmVnaW5UaW1lbGluZVN0eWxlIn0sMjA5NDp7bjoiQnJ0RW5kVGltZWxp''@;'; put 'put ''bmVTdHlsZSJ9LDIwOTU6e246IkJydFRpbWVsaW5lU3R5bGVFbGVtZW50In0sMjA5Njp7bjoiQnJ0QmVnaW5UaW1lbGluZVN0eWxlc2hlZXRFeHQxNSJ9LDIwOTc6e246IkJydEVuZFRpbWVsaW5lU3R5bGVzaGVldEV4dDE1In0sMjA5ODp7bjoiQnJ0QmVnaW5UaW1lbGluZVN0eWxlcyJ9LDIw''@;'; put 'put ''OTk6e246IkJydEVuZFRpbWVsaW5lU3R5bGVzIn0sMjEwMDp7bjoiQnJ0QmVnaW5UaW1lbGluZVN0eWxlRWxlbWVudHMifSwyMTAxOntuOiJCcnRFbmRUaW1lbGluZVN0eWxlRWxlbWVudHMifSwyMTAyOntuOiJCcnREeGYxNSJ9LDIxMDM6e246IkJydEJlZ2luRHhmczE1In0sMjEwNDp7bjoi''@;'; put 'put ''YnJ0RW5kRHhmczE1In0sMjEwNTp7bjoiQnJ0U2xpY2VyQ2FjaGVIaWRlSXRlbXNXaXRoTm9EYXRhIn0sMjEwNjp7bjoiQnJ0QmVnaW5JdGVtVW5pcXVlTmFtZXMifSwyMTA3OntuOiJCcnRFbmRJdGVtVW5pcXVlTmFtZXMifSwyMTA4OntuOiJCcnRJdGVtVW5pcXVlTmFtZSJ9LDIxMDk6e246''@;'; put 'put ''IkJydEJlZ2luRXh0Q29ubjE1In0sMjExMDp7bjoiQnJ0RW5kRXh0Q29ubjE1In0sMjExMTp7bjoiQnJ0QmVnaW5PbGVkYlByMTUifSwyMTEyOntuOiJCcnRFbmRPbGVkYlByMTUifSwyMTEzOntuOiJCcnRCZWdpbkRhdGFGZWVkUHIxNSJ9LDIxMTQ6e246IkJydEVuZERhdGFGZWVkUHIxNSJ9''@;'; put 'put ''LDIxMTU6e246IkJydFRleHRQcjE1In0sMjExNjp7bjoiQnJ0UmFuZ2VQcjE1In0sMjExNzp7bjoiQnJ0RGJDb21tYW5kMTUifSwyMTE4OntuOiJCcnRCZWdpbkRiVGFibGVzMTUifSwyMTE5OntuOiJCcnRFbmREYlRhYmxlczE1In0sMjEyMDp7bjoiQnJ0RGJUYWJsZTE1In0sMjEyMTp7bjoi''@;'; put 'put ''QnJ0QmVnaW5EYXRhTW9kZWwifSwyMTIyOntuOiJCcnRFbmREYXRhTW9kZWwifSwyMTIzOntuOiJCcnRCZWdpbk1vZGVsVGFibGVzIn0sMjEyNDp7bjoiQnJ0RW5kTW9kZWxUYWJsZXMifSwyMTI1OntuOiJCcnRNb2RlbFRhYmxlIn0sMjEyNjp7bjoiQnJ0QmVnaW5Nb2RlbFJlbGF0aW9uc2hp''@;'; put 'put ''cHMifSwyMTI3OntuOiJCcnRFbmRNb2RlbFJlbGF0aW9uc2hpcHMifSwyMTI4OntuOiJCcnRNb2RlbFJlbGF0aW9uc2hpcCJ9LDIxMjk6e246IkJydEJlZ2luRUNUeHRXaXoxNSJ9LDIxMzA6e246IkJydEVuZEVDVHh0V2l6MTUifSwyMTMxOntuOiJCcnRCZWdpbkVDVFdGbGRJbmZvTHN0MTUi''@;'; put 'put ''fSwyMTMyOntuOiJCcnRFbmRFQ1RXRmxkSW5mb0xzdDE1In0sMjEzMzp7bjoiQnJ0QmVnaW5FQ1RXRmxkSW5mbzE1In0sMjEzNDp7bjoiQnJ0RmllbGRMaXN0QWN0aXZlSXRlbSJ9LDIxMzU6e246IkJydFBpdm90Q2FjaGVJZFZlcnNpb24ifSwyMTM2OntuOiJCcnRTWERJMTUifSwyMTM3Ontu''@;'; put 'put ''OiJCcnRCZWdpbk1vZGVsVGltZUdyb3VwaW5ncyJ9LDIxMzg6e246IkJydEVuZE1vZGVsVGltZUdyb3VwaW5ncyJ9LDIxMzk6e246IkJydEJlZ2luTW9kZWxUaW1lR3JvdXBpbmcifSwyMTQwOntuOiJCcnRFbmRNb2RlbFRpbWVHcm91cGluZyJ9LDIxNDE6e246IkJydE1vZGVsVGltZUdyb3Vw''@;'; put 'put ''aW5nQ2FsY0NvbCJ9LDMwNzI6e246IkJydFVpZCJ9LDMwNzM6e246IkJydFJldmlzaW9uUHRyIn0sNTA5NTp7bjoiQnJ0QmVnaW5DYWxjRmVhdHVyZXMifSw1MDk2OntuOiJCcnRFbmRDYWxjRmVhdHVyZXMifSw1MDk3OntuOiJCcnRDYWxjRmVhdHVyZSJ9LDY1NTM1OntuOiIifX0sZ089UmUo''@;'; put 'put ''Qm0sIm4iKTtnTy5CcnRGUlRBcmNoSUQkPTE2O3ZhciBOZz17Njp7bjoiRm9ybXVsYSIsZjpleH0sMTA6e246IkVPRiIsZjpzZH0sMTI6e246IkNhbGNDb3VudCIsZjpwY30sMTM6e246IkNhbGNNb2RlIixmOnBjfSwxNDp7bjoiQ2FsY1ByZWNpc2lvbiIsZjpub30sMTU6e246IkNhbGNSZWZN''@;'; put 'put ''b2RlIixmOm5vfSwxNjp7bjoiQ2FsY0RlbHRhIixmOldzfSwxNzp7bjoiQ2FsY0l0ZXIiLGY6bm99LDE4OntuOiJQcm90ZWN0IixmOm5vfSwxOTp7bjoiUGFzc3dvcmQiLGY6cGN9LDIwOntuOiJIZWFkZXIiLGY6cVN9LDIxOntuOiJGb290ZXIiLGY6cVN9LDIzOntuOiJFeHRlcm5TaGVldCIs''@;'; put 'put ''ZjpRU30sMjQ6e246IkxibCIsZjpLeX0sMjU6e246IldpblByb3RlY3QiLGY6bm99LDI2OntuOiJWZXJ0aWNhbFBhZ2VCcmVha3MifSwyNzp7bjoiSG9yaXpvbnRhbFBhZ2VCcmVha3MifSwyODp7bjoiTm90ZSIsZjpmdW5jdGlvbiBiMyhTLEwsayl7cmV0dXJuIGZ1bmN0aW9uIG4xKFMsTCxr''@;'; put 'put ''KXtpZighKGsuYmlmZjw4KSl7dmFyIEc9Uy5yZWFkX3NoaWZ0KDIpLFE9Uy5yZWFkX3NoaWZ0KDIpLGxlPVMucmVhZF9zaGlmdCgyKSxtZT1TLnJlYWRfc2hpZnQoMikscGU9WGQoUywwLGspO3JldHVybiBrLmJpZmY8OCYmUy5yZWFkX3NoaWZ0KDEpLFt7cjpHLGM6UX0scGUsbWUsbGVdfX0o''@;'; put 'put ''UywwLGspfX0sMjk6e246IlNlbGVjdGlvbiIsZjpmdW5jdGlvbiAkeihTLEwsayl7cmV0dXJuIGsmJmsuYmlmZjw1PyhTLmwrPUwse2NlbGw6e3I6MCxjOjB9fSk6KFMucmVhZF9zaGlmdCgxKSx7Y2VsbDpHaSh7cjpTLnJlYWRfc2hpZnQoMiksYzpTLnJlYWRfc2hpZnQoMil9KX0pfX0sMzQ6''@;'; put 'put ''e246IkRhdGUxOTA0IixmOm5vfSwzNTp7bjoiRXh0ZXJuTmFtZSIsZjplaH0sMzg6e246IkxlZnRNYXJnaW4iLGY6V3N9LDM5OntuOiJSaWdodE1hcmdpbiIsZjpXc30sNDA6e246IlRvcE1hcmdpbiIsZjpXc30sNDE6e246IkJvdHRvbU1hcmdpbiIsZjpXc30sNDI6e246IlByaW50Um93Q29s''@;'; put 'put ''IixmOm5vfSw0Mzp7bjoiUHJpbnRHcmlkIixmOm5vfSw0Nzp7bjoiRmlsZVBhc3MiLGY6ZnVuY3Rpb24gb1UoUyxMLGspe2lmKGsuZW5jKXJldHVybiBrLmVuYzt2YXIgRz17VHlwZTprLmJpZmY+PTg/Uy5yZWFkX3NoaWZ0KDIpOjB9O3JldHVybiBHLlR5cGU/ZnVuY3Rpb24gbU0oUyxMLGss''@;'; put 'put ''Ryl7dmFyIFE9R3x8e307aWYoUS5JbmZvPVMucmVhZF9zaGlmdCgyKSxTLmwtPTIsMT09PVEuSW5mbyl7aWYoUS5EYXRhPWZ1bmN0aW9uIGpJKFMpe3ZhciBMPXt9LGs9TC5FbmNyeXB0aW9uVmVyc2lvbkluZm89UWgoUyw0KTtpZigxIT1rLk1ham9yfHwxIT1rLk1pbm9yKXRocm93InVucmVj''@;'; put 'put ''b2duaXplZCB2ZXJzaW9uIGNvZGUgIitrLk1ham9yKyIgOiAiK2suTWlub3I7cmV0dXJuIEwuU2FsdD1TLnJlYWRfc2hpZnQoMTYpLEwuRW5jcnlwdGVkVmVyaWZpZXI9Uy5yZWFkX3NoaWZ0KDE2KSxMLkVuY3J5cHRlZFZlcmlmaWVySGFzaD1TLnJlYWRfc2hpZnQoMTYpLEx9KFMpLGsucGFz''@;'; put 'put ''c3dvcmQmJnR5cGVvZiBvXzwidSIpe3ZhciBsZT1vXyhrLnBhc3N3b3JkLFEuRGF0YS5TYWx0LCIwMDAwMDAwMCIpLG1lPU1lKFEuRGF0YS5FbmNyeXB0ZWRWZXJpZmllcitRLkRhdGEuRW5jcnlwdGVkVmVyaWZpZXJIYXNoLCJoZXgiKSxwZT0kYS5yYzQoTWUobGUsImhleCIpLnRvU3RyaW5n''@;'; put 'put ''KCJiaW5hcnkiKSxtZSk7Ry52YWxpZD0kYS5tZDUocGUuc2xpY2UoMCwxNikpPT1CdWZmZXIuZnJvbShwZS5zbGljZSgxNikpLnRvU3RyaW5nKCJoZXgiKSxRLkRhdGEuS2V5PWxlLEcuaW5zaXR1PWZ1bmN0aW9uIElPKFMsTCl7dmFyIGs9bmV3IEFycmF5KDI1NiksRz0wLFE9MCxsZT0wLG1l''@;'; put 'put ''PTA7ZnVuY3Rpb24gcGUoZXQpe2ZvcihHPTAsUT0wLGxlPTAsbWU9MCxRPTA7MjU2IT1ROysrUSlrW1FdPVE7Zm9yKGxlPTAsUT0wOzI1NiE9UTsrK1Epe3RyeXtsZT1sZStrW1FdK2V0W1ElZXQubGVuZ3RoXS5jaGFyQ29kZUF0KDApJjI1NX1jYXRjaChjdCl7dGhyb3cgY29uc29sZS5sb2co''@;'; put 'put ''USxldFtRJWV0Lmxlbmd0aF0pLGN0fW1lPWtbUV0sa1tRXT1rW2xlXSxrW2xlXT1tZX1RPWxlPTB9ZnVuY3Rpb24gYmUoZXQpe3ZhciBjdD1CKGV0Lmxlbmd0aCk7Zm9yKEc9MDtHIT1ldC5sZW5ndGg7KytHKW1lPWtbUT1RKzEmMjU1XSxrW1FdPWtbbGU9KGxlK2tbUV0pJTI1Nl0sa1tsZV09''@;'; put 'put ''bWUsY3RbR109ZXRbR11ea1trW1FdK2tbbGVdJjI1NV07cmV0dXJuIEJ1ZmZlci5mcm9tKGN0KX12YXIgTmU9Uy5LZXksQmU9MDtwZShNZShOZSwiaGV4IikudG9TdHJpbmcoImJpbmFyeSIpKTt2YXIgR2U9MDtyZXR1cm4gZnVuY3Rpb24oZXQpe2lmKEdlK2V0Lmxlbmd0aDwxMDI0KXJldHVy''@;'; put 'put ''biBHZSs9ZXQubGVuZ3RoLGJlKGV0KTt2YXIgb3Q9MCxidD1NZShldC5zbGljZShvdCxvdCsoeHQ9MTAyNC1HZSkpKTtvdCs9eHQsR2U9MDt2YXIgRnQ9YmUoYnQpO2ZvcihvdD09ZXQubGVuZ3RoJiYoKytCZSxOZT1vXyhMLFMuU2FsdCxCNyhCZSkpLHBlKE1lKE5lLCJoZXgiKS50b1N0cmlu''@;'; put 'put ''ZygiYmluYXJ5IikpKTtvdDxldC5sZW5ndGg7KXsrK0JlLE5lPW9fKEwsUy5TYWx0LEI3KEJlKSkscGUoQnVmZmVyLmZyb20oTmUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSk7dmFyIHh0PU1hdGgubWluKDEwMjQsZXQubGVuZ3RoLW90KTtidD1NZShldC5zbGljZShvdCxvdCt4dCkpLG90''@;'; put 'put ''Kz14dCxHZT14dCxGdD1CdWZmZXIuY29uY2F0KFtGdCxiZShidCldKX1yZXR1cm4gRnR9fShRLkRhdGEsay5wYXNzd29yZCl9fWVsc2UgaWYoUS5EYXRhPWZ1bmN0aW9uIEJJKFMsTCl7dmFyIGs9e30sRz1rLkVuY3J5cHRpb25WZXJzaW9uSW5mbz1RaChTLDQpO2lmKEwtPTQsMiE9Ry5NaW5v''@;'; put 'put ''cil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCBtaW5vciB2ZXJzaW9uIGNvZGU6ICIrRy5NaW5vcik7aWYoRy5NYWpvcj40fHxHLk1ham9yPDIpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgbWFqb3IgdmVyc2lvbiBjb2RlOiAiK0cuTWFqb3IpO2suRmxhZ3M9Uy5yZWFkX3No''@;'; put 'put ''aWZ0KDQpLEwtPTQ7dmFyIFE9Uy5yZWFkX3NoaWZ0KDQpO3JldHVybiBMLT00LGsuRW5jcnlwdGlvbkhlYWRlcj1wTShTLFEpLGsuRW5jcnlwdGlvblZlcmlmaWVyPWdNKFMsTC09USksa30oUyxMKSxRLkRhdGEmJlEuRGF0YS5FbmNyeXB0aW9uSGVhZGVyJiYyNjYyNT09PVEuRGF0YS5FbmNy''@;'; put 'put ''eXB0aW9uSGVhZGVyLkFsZ0lEJiZrLnBhc3N3b3JkJiZ0eXBlb2Ygemc8InUiKXt2YXIgYmU9emcoay5wYXNzd29yZCxRLkRhdGEuRW5jcnlwdGlvblZlcmlmaWVyLlNhbHQudG9TdHJpbmcoImhleCIpLCIwMDAwMDAwMCIpLE5lPVEuRGF0YS5FbmNyeXB0aW9uSGVhZGVyLktleVNpemU+Pj4z''@;'; put 'put ''OzU9PU5lfHxOZTxiZS5sZW5ndGgmJihiZT1iZS5zbGljZSgwLE5lKSk7dmFyIEJlPU1lKFEuRGF0YS5FbmNyeXB0aW9uVmVyaWZpZXIuVmVyaWZpZXIudG9TdHJpbmcoImhleCIpK1EuRGF0YS5FbmNyeXB0aW9uVmVyaWZpZXIuVmVyaWZpZXJIYXNoLnRvU3RyaW5nKCJoZXgiKSwiaGV4Iiks''@;'; put 'put ''R2U9JGEucmM0KGJlLnRvU3RyaW5nKCJiaW5hcnkiKSxCZSk7Ry52YWxpZD1NYyhHZS5zbGljZSgwLE5lKSwiU0hBMSIpLnRvU3RyaW5nKCJoZXgiKT09R2Uuc2xpY2UoTmUpLnRvU3RyaW5nKCJoZXgiKSxRLkRhdGEuS2V5PWJlLEcudmFsaWQmJihHLmluc2l0dT1mdW5jdGlvbiBzXyhTLEwp''@;'; put 'put ''e3ZhciBrPW5ldyBBcnJheSgyNTYpLEc9MCxRPTAsbGU9MCxtZT0wLHBlPVMuRW5jcnlwdGlvbkhlYWRlci5LZXlTaXplPj4+MztmdW5jdGlvbiBiZShjdCl7Zm9yKGN0PUJ1ZmZlci5mcm9tKGN0LnNsaWNlKDAscGUpKSxHPTAsUT0wLGxlPTAsbWU9MCxRPTA7MjU2IT1ROysrUSlrW1FdPVE7''@;'; put 'put ''Zm9yKGxlPTAsUT0wOzI1NiE9UTsrK1Epe3ZhciB4dD1jdFtRJWN0Lmxlbmd0aF07bGU9bGUra1tRXSsoInN0cmluZyI9PXR5cGVvZiB4dD94dC5jaGFyQ29kZUF0KDApOnh0KSYyNTUsbWU9a1tRXSxrW1FdPWtbbGVdLGtbbGVdPW1lfVE9bGU9MH1mdW5jdGlvbiBOZShjdCl7dmFyIHh0PUIo''@;'; put 'put ''Y3QubGVuZ3RoKTtmb3IoRz0wO0chPWN0Lmxlbmd0aDsrK0cpbWU9a1tRPVErMSYyNTVdLGtbUV09a1tsZT0obGUra1tRXSklMjU2XSxrW2xlXT1tZSx4dFtHXT1jdFtHXV5rW2tbUV0ra1tsZV0mMjU1XTtyZXR1cm4gQnVmZmVyLmZyb20oeHQpfXZhciBCZT1TLktleSxHZT0wO2JlKE1lKEJl''@;'; put 'put ''LCJoZXgiKS50b1N0cmluZygiYmluYXJ5IikpO3ZhciBldD0wO3JldHVybiBmdW5jdGlvbihjdCl7aWYoZXQrY3QubGVuZ3RoPDEwMjQpcmV0dXJuIGV0Kz1jdC5sZW5ndGgsTmUoY3QpO3ZhciBvdD0xMDI0LWV0LGJ0PTAsRnQ9QnVmZmVyLmZyb20oY3Quc2xpY2UoYnQsYnQrb3QpKTtidCs9''@;'; put 'put ''b3QsZXQ9MDt2YXIga3Q9TmUoRnQpO2ZvcihidD09Y3QubGVuZ3RoJiYoKytHZSxCZT16ZyhMLFMuRW5jcnlwdGlvblZlcmlmaWVyLlNhbHQsQjcoR2UpKSxiZShCdWZmZXIuZnJvbShCZSwiaGV4IikudG9TdHJpbmcoImJpbmFyeSIpKSk7YnQ8Y3QubGVuZ3RoOykrK0dlLEJlPXpnKEwsUy5F''@;'; put 'put ''bmNyeXB0aW9uVmVyaWZpZXIuU2FsdCxCNyhHZSkpLGJlKEJ1ZmZlci5mcm9tKEJlLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IikpLG90PU1hdGgubWluKDEwMjQsY3QubGVuZ3RoLWJ0KSxGdD1CdWZmZXIuZnJvbShjdC5zbGljZShidCxidCtvdCkpLGJ0Kz1vdCxvdDwxMDI0JiYoZXQ9b3Qp''@;'; put 'put ''LGt0PUJ1ZmZlci5jb25jYXQoW2t0LE5lKEZ0KV0pO3JldHVybiBrdH19KFEuRGF0YSxrLnBhc3N3b3JkKSl9cmV0dXJuIFF9KFMsTC0yLGssRyk6ZnVuY3Rpb24geWwoUyxMLGssRyl7dmFyIFE9e2tleTpwYyhTKSx2ZXJpZmljYXRpb25CeXRlczpwYyhTKX07ay5wYXNzd29yZCYmKFEudmVy''@;'; put 'put ''aWZpZXI9cmYoay5wYXNzd29yZCkpLEcudmFsaWQ9US52ZXJpZmljYXRpb25CeXRlcz09PVEudmVyaWZpZXIsRy52YWxpZCYmKEcuaW5zaXR1PWZ1bmN0aW9uKFMsTCl7dmFyIGs9THx8MCxHPUhwKFMpO3JldHVybiBmdW5jdGlvbihRKXt2YXIgbGU9ZnVuY3Rpb24oUyxMLGssRyxRKXt2YXIg''@;'; put 'put ''bGUsbWU7Zm9yKFF8fChRPUwpLEd8fChHPUhwKCIiKSksbGU9MDtsZSE9TC5sZW5ndGg7KytsZSltZT0yNTUmKChtZT1MW2xlXSk+PjV8bWU8PDMpLFFbbGVdPW1lXj1HW2tdLGs9aysxJjE1O3JldHVybltRLGssR119KDAsUSxrLEcpO3JldHVybiBrPWxlWzFdLGxlWzBdfX0oay5wYXNzd29y''@;'; put 'put ''ZCwwKSl9KFMsMCxrLEcpLEd9fSw0OTp7bjoiRm9udCIsZjpmdW5jdGlvbiBXUyhTLEwsayl7dmFyIEc9e3N6OlMucmVhZF9zaGlmdCgyKS8yMH0sUT1xMihTKTtRLmZCb2xkJiYoRy5ib2xkPTEpLFEuZkl0YWxpYyYmKEcuaXRhbGljPTEpLFEuZlVuZGVybGluZSYmKEcudW5kZXJsaW5lPTEp''@;'; put 'put ''LFEuZkNvbmRlbnNlJiYoRy5jb25kZW5zZT0xKSxRLmZFeHRlbmQmJihHLmV4dGVuZD0xKSxRLmZTaGFkb3cmJihHLnNoYWRvdz0xKSxRLmZPdXRsaW5lJiYoRy5vdXRsaW5lPTEpLFEuZlN0cmlrZW91dCYmKEcuc3RyaWtlPTEpO3ZhciBsZT1rJiZrLmJpZmZ8fDg7aWYoMiE9bGUmJihHLmlj''@;'; put 'put ''dj1TLnJlYWRfc2hpZnQoMiksMyE9bGUmJjQhPWxlKSl7c3dpdGNoKDcwMD09PVMucmVhZF9zaGlmdCgyKSYmKEcuYm9sZD0xKSxTLnJlYWRfc2hpZnQoMikpe2Nhc2UgMTpHLnZhbGlnbj0ic3VwZXIiO2JyZWFrO2Nhc2UgMjpHLnZhbGlnbj0ic3ViIn12YXIgcGU9Uy5yZWFkX3NoaWZ0KDEp''@;'; put 'put ''OzAhPXBlJiYoRy51bmRlcmxpbmU9cGUpO3ZhciBiZT1TLnJlYWRfc2hpZnQoMSk7YmU+MCYmKEcuZmFtaWx5PWJlKTt2YXIgTmU9Uy5yZWFkX3NoaWZ0KDEpO05lPjAmJihHLmNoYXJzZXQ9TmUpLFMubCs9MX1yZXR1cm4gRy5uYW1lPWNsKFMsMCxrKSxHfX0sNTE6e246IlByaW50U2l6ZSIs''@;'; put 'put ''ZjpwY30sNjA6e246IkNvbnRpbnVlIn0sNjE6e246IldpbmRvdzEiLGY6ZnVuY3Rpb24gVVMoUyl7cmV0dXJue1BvczpbUy5yZWFkX3NoaWZ0KDIpLFMucmVhZF9zaGlmdCgyKV0sRGltOltTLnJlYWRfc2hpZnQoMiksUy5yZWFkX3NoaWZ0KDIpXSxGbGFnczpTLnJlYWRfc2hpZnQoMiksQ3Vy''@;'; put 'put ''VGFiOlMucmVhZF9zaGlmdCgyKSxGaXJzdFRhYjpTLnJlYWRfc2hpZnQoMiksU2VsZWN0ZWQ6Uy5yZWFkX3NoaWZ0KDIpLFRhYlJhdGlvOlMucmVhZF9zaGlmdCgyKX19fSw2NDp7bjoiQmFja3VwIixmOm5vfSw2NTp7bjoiUGFuZSIsZjpmdW5jdGlvbiBkbShTLEwsayl7aWYoayYmay5iaWZm''@;'; put 'put ''PDUpcmV0dXJue307dmFyIEc9e307cmV0dXJuIEcueD1TLnJlYWRfc2hpZnQoMiksRy55PVMucmVhZF9zaGlmdCgyKSxHLnJ3VG9wPVMucmVhZF9zaGlmdCgyKSxHLmNvbExlZnQ9Uy5yZWFkX3NoaWZ0KDIpLEcucG5uQWNjdD1TLnJlYWRfc2hpZnQoMSksUy5yZWFkX3NoaWZ0KDEpLEd9fSw2''@;'; put 'put ''Njp7bjoiQ29kZVBhZ2UiLGY6cGN9LDc3OntuOiJQbHMiLGY6cG59LDgwOntuOiJEQ29uIn0sODE6e246IkRDb25SZWYifSw4Mjp7bjoiRENvbk5hbWUifSw4NTp7bjoiRGVmQ29sV2lkdGgiLGY6cGN9LDg5OntuOiJYQ1QifSw5MDp7bjoiQ1JOIn0sOTE6e246IkZpbGVTaGFyaW5nIn0sOTI6''@;'; put 'put ''e246IldyaXRlQWNjZXNzIixmOmZ1bmN0aW9uIGpTKFMsTCxrKXtpZihrLmVuYylyZXR1cm4gUy5sKz1MLCIiO3ZhciBHPVMubCxRPVhkKFMsMCxrKTtyZXR1cm4gUy5yZWFkX3NoaWZ0KEwrRy1TLmwpLFF9fSw5Mzp7bjoiT2JqIixmOmZ1bmN0aW9uIF8zKFMsTCxrKXtpZihrJiZrLmJpZmY8''@;'; put 'put ''OClyZXR1cm4gZnVuY3Rpb24geEkoUyxMLGspe1MubCs9NDt2YXIgRz1TLnJlYWRfc2hpZnQoMiksUT1TLnJlYWRfc2hpZnQoMiksbGU9Uy5yZWFkX3NoaWZ0KDIpO1MubCs9MixTLmwrPTIsUy5sKz0yLFMubCs9MixTLmwrPTIsUy5sKz0yLFMubCs9MixTLmwrPTIsUy5sKz0yLFMubCs9Njt2''@;'; put 'put ''YXIgbWU9W107cmV0dXJuIG1lLnB1c2goKE1JW0ddfHxwbikoUyxMLT0zNixrKSkse2NtbzpbUSxHLGxlXSxmdDptZX19KFMsTCxrKTt2YXIgRz1WUyhTKSxRPWZ1bmN0aW9uIFhoKFMsTCl7Zm9yKHZhciBHPVMubCtMLFE9W107Uy5sPEc7KXt2YXIgbGU9Uy5yZWFkX3NoaWZ0KDIpO1MubC09''@;'; put 'put ''Mjt0cnl7UVtsZV09V3lbbGVdKFMsRy1TLmwpfWNhdGNoe3JldHVybiBTLmw9RyxRfX1yZXR1cm4gUy5sIT1HJiYoUy5sPUcpLFF9KFMsTC0yMik7cmV0dXJue2NtbzpHLGZ0OlF9fX0sOTQ6e246IlVuY2FsY2VkIn0sOTU6e246IkNhbGNTYXZlUmVjYWxjIixmOm5vfSw5Njp7bjoiVGVtcGxh''@;'; put 'put ''dGUifSw5Nzp7bjoiSW50bCJ9LDk5OntuOiJPYmpQcm90ZWN0IixmOm5vfSwxMjU6e246IkNvbEluZm8iLGY6YU19LDEyODp7bjoiR3V0cyIsZjpmdW5jdGlvbiBqeihTKXtTLmwrPTQ7dmFyIEw9W1MucmVhZF9zaGlmdCgyKSxTLnJlYWRfc2hpZnQoMildO2lmKDAhPT1MWzBdJiZMWzBdLS0s''@;'; put 'put ''MCE9PUxbMV0mJkxbMV0tLSxMWzBdPjd8fExbMV0+Nyl0aHJvdyBuZXcgRXJyb3IoIkJhZCBHdXR0ZXJzOiAiK0wuam9pbigifCIpKTtyZXR1cm4gTH19LDEyOTp7bjoiV3NCb29sIixmOmZ1bmN0aW9uIHpTKFMsTCxrKXt2YXIgRz1rJiY4PT1rLmJpZmZ8fDI9PUw/Uy5yZWFkX3NoaWZ0KDIp''@;'; put 'put ''OihTLmwrPUwsMCk7cmV0dXJue2ZEaWFsb2c6MTYmRyxmQmVsb3c6NjQmRyxmUmlnaHQ6MTI4Jkd9fX0sMTMwOntuOiJHcmlkU2V0IixmOnBjfSwxMzE6e246IkhDZW50ZXIiLGY6bm99LDEzMjp7bjoiVkNlbnRlciIsZjpub30sMTMzOntuOiJCb3VuZFNoZWV0OCIsZjpmdW5jdGlvbiBQcyhT''@;'; put 'put ''LEwsayl7dmFyIEc9Uy5yZWFkX3NoaWZ0KDQpLFE9MyZTLnJlYWRfc2hpZnQoMSksbGU9Uy5yZWFkX3NoaWZ0KDEpO3N3aXRjaChsZSl7Y2FzZSAwOmxlPSJXb3Jrc2hlZXQiO2JyZWFrO2Nhc2UgMTpsZT0iTWFjcm9zaGVldCI7YnJlYWs7Y2FzZSAyOmxlPSJDaGFydHNoZWV0IjticmVhaztj''@;'; put 'put ''YXNlIDY6bGU9IlZCQU1vZHVsZSJ9dmFyIG1lPWNsKFMsMCxrKTtyZXR1cm4gMD09PW1lLmxlbmd0aCYmKG1lPSJTaGVldDEiKSx7cG9zOkcsaHM6USxkdDpsZSxuYW1lOm1lfX19LDEzNDp7bjoiV3JpdGVQcm90ZWN0In0sMTQwOntuOiJDb3VudHJ5IixmOmZ1bmN0aW9uIHF5KFMpe3ZhciBr''@;'; put 'put ''LEw9WzAsMF07cmV0dXJuIGs9Uy5yZWFkX3NoaWZ0KDIpLExbMF09RjBba118fGssaz1TLnJlYWRfc2hpZnQoMiksTFsxXT1GMFtrXXx8ayxMfX0sMTQxOntuOiJIaWRlT2JqIixmOnBjfSwxNDQ6e246IlNvcnQifSwxNDY6e246IlBhbGV0dGUiLGY6ZnVuY3Rpb24gaU0oUyl7Zm9yKHZhciBM''@;'; put 'put ''PVMucmVhZF9zaGlmdCgyKSxrPVtdO0wtLSA+MDspay5wdXNoKEhTKFMpKTtyZXR1cm4ga319LDE1MTp7bjoiU3luYyJ9LDE1Mjp7bjoiTFByIn0sMTUzOntuOiJEeEdDb2wifSwxNTQ6e246IkZuR3JvdXBOYW1lIn0sMTU1OntuOiJGaWx0ZXJNb2RlIn0sMTU2OntuOiJCdWlsdEluRm5Hcm91''@;'; put 'put ''cENvdW50IixmOnBjfSwxNTc6e246IkF1dG9GaWx0ZXJJbmZvIn0sMTU4OntuOiJBdXRvRmlsdGVyIn0sMTYwOntuOiJTY2wiLGY6WXp9LDE2MTp7bjoiU2V0dXAiLGY6ZnVuY3Rpb24gb00oUyxMKXt2YXIgaz17fTtyZXR1cm4gTDwzMnx8KFMubCs9MTYsay5oZWFkZXI9V3MoUyksay5mb290''@;'; put 'put ''ZXI9V3MoUyksUy5sKz0yKSxrfX0sMTc0OntuOiJTY2VuTWFuIn0sMTc1OntuOiJTQ0VOQVJJTyJ9LDE3Njp7bjoiU3hWaWV3In0sMTc3OntuOiJTeHZkIn0sMTc4OntuOiJTWFZJIn0sMTgwOntuOiJTeEl2ZCJ9LDE4MTp7bjoiU1hMSSJ9LDE4Mjp7bjoiU1hQSSJ9LDE4NDp7bjoiRG9jUm91''@;'; put 'put ''dGUifSwxODU6e246IlJlY2lwTmFtZSJ9LDE4OTp7bjoiTXVsUmsiLGY6ZnVuY3Rpb24gWFMoUyxMKXtmb3IodmFyIGs9Uy5sK0wtMixHPVMucmVhZF9zaGlmdCgyKSxRPVMucmVhZF9zaGlmdCgyKSxsZT1bXTtTLmw8azspbGUucHVzaChOUyhTKSk7aWYoUy5sIT09ayl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIk11bFJLIHJlYWQgZXJyb3IiKTt2YXIgbWU9Uy5yZWFkX3NoaWZ0KDIpO2lmKGxlLmxlbmd0aCE9bWUtUSsxKXRocm93IG5ldyBFcnJvcigiTXVsUksgbGVuZ3RoIG1pc21hdGNoIik7cmV0dXJue3I6RyxjOlEsQzptZSxya3JlYzpsZX19fSwxOTA6e246Ik11bEJsYW5rIixmOmZ1bmN0''@;'; put 'put ''aW9uIEFnKFMsTCl7Zm9yKHZhciBrPVMubCtMLTIsRz1TLnJlYWRfc2hpZnQoMiksUT1TLnJlYWRfc2hpZnQoMiksbGU9W107Uy5sPGs7KWxlLnB1c2goUy5yZWFkX3NoaWZ0KDIpKTtpZihTLmwhPT1rKXRocm93IG5ldyBFcnJvcigiTXVsQmxhbmsgcmVhZCBlcnJvciIpO3ZhciBtZT1TLnJl''@;'; put 'put ''YWRfc2hpZnQoMik7aWYobGUubGVuZ3RoIT1tZS1RKzEpdGhyb3cgbmV3IEVycm9yKCJNdWxCbGFuayBsZW5ndGggbWlzbWF0Y2giKTtyZXR1cm57cjpHLGM6USxDOm1lLGl4ZmU6bGV9fX0sMTkzOntuOiJNbXMiLGY6c2R9LDE5Nzp7bjoiU1hESSJ9LDE5ODp7bjoiU1hEQiJ9LDE5OTp7bjoi''@;'; put 'put ''U1hGREIifSwyMDA6e246IlNYREJCIn0sMjAxOntuOiJTWE51bSJ9LDIwMjp7bjoiU3hCb29sIixmOm5vfSwyMDM6e246IlN4RXJyIn0sMjA0OntuOiJTWEludCJ9LDIwNTp7bjoiU1hTdHJpbmcifSwyMDY6e246IlNYRHRyIn0sMjA3OntuOiJTeE5pbCJ9LDIwODp7bjoiU1hUYmwifSwyMDk6''@;'; put 'put ''e246IlNYVEJSR0lJVE0ifSwyMTA6e246IlN4VGJwZyJ9LDIxMTp7bjoiT2JQcm9qIn0sMjEzOntuOiJTWFN0cmVhbUlEIn0sMjE1OntuOiJEQkNlbGwifSwyMTY6e246IlNYUm5nIn0sMjE3OntuOiJTeElzeG9wZXIifSwyMTg6e246IkJvb2tCb29sIixmOnBjfSwyMjA6e246IkRiT3JQYXJh''@;'; put 'put ''bVFyeSJ9LDIyMTp7bjoiU2NlbmFyaW9Qcm90ZWN0IixmOm5vfSwyMjI6e246Ik9sZU9iamVjdFNpemUifSwyMjQ6e246IlhGIixmOmZ1bmN0aW9uIFZ6KFMsTCxrKXt2YXIgRz17fTtyZXR1cm4gRy5pZm50PVMucmVhZF9zaGlmdCgyKSxHLm51bUZtdElkPVMucmVhZF9zaGlmdCgyKSxHLmZs''@;'; put 'put ''YWdzPVMucmVhZF9zaGlmdCgyKSxHLmZTdHlsZT1HLmZsYWdzPj4yJjEsRy5kYXRhPWZ1bmN0aW9uIE56KFMsTCxrLEcpe3ZhciBRPXt9LGxlPVMucmVhZF9zaGlmdCg0KSxtZT1TLnJlYWRfc2hpZnQoNCkscGU9Uy5yZWFkX3NoaWZ0KDQpLGJlPVMucmVhZF9zaGlmdCgyKTtpZihRLnBhdHRl''@;'; put 'put ''cm5UeXBlPWYzW3BlPj4yNl0sIUcuY2VsbFN0eWxlcylyZXR1cm4gUTt2YXIgTmU9NyZsZTtzd2l0Y2goTmUpe2Nhc2UgMTpRLmhhbGlnbj0ibGVmdCI7YnJlYWs7Y2FzZSAyOlEuaGFsaWduPSJjZW50ZXIiO2JyZWFrO2Nhc2UgMzpRLmhhbGlnbj0icmlnaHQifXN3aXRjaChRLmZXcmFwPWxl''@;'; put 'put ''Pj4zJjEsTmU9bGU+PjQmNyl7Y2FzZSAwOlEudmFsaWduPSJ0b3AiO2JyZWFrO2Nhc2UgMTpRLnZhbGlnbj0iY2VudGVyIjticmVhaztjYXNlIDI6US52YWxpZ249ImJvdHRvbSJ9cmV0dXJuIFEuZkp1c3RMYXN0PWxlPj43JjEsUS50cm90PWxlPj44JjI1NSxRLmNJbmRlbnQ9bGU+PjE2JjE1''@;'; put 'put ''LFEuZlNocmlua1RvRml0PWxlPj4yMCYxLFEuaVJlYWRPcmRlcj1sZT4+MjImMixRLmZBdHJOdW09bGU+PjI2JjEsUS5mQXRyRm50PWxlPj4yNyYxLFEuZkF0ckFsYz1sZT4+MjgmMSxRLmZBdHJCZHI9bGU+PjI5JjEsUS5mQXRyUGF0PWxlPj4zMCYxLFEuZkF0clByb3Q9bGU+PjMxJjEsUS5k''@;'; put 'put ''Z0xlZnQ9MTUmbWUsUS5kZ1JpZ2h0PW1lPj40JjE1LFEuZGdUb3A9bWU+PjgmMTUsUS5kZ0JvdHRvbT1tZT4+MTImMTUsUS5pY3ZMZWZ0PW1lPj4xNiYxMjcsUS5pY3ZSaWdodD1tZT4+MjMmMTI3LFEuZ3JiaXREaWFnPW1lPj4zMCYzLFEuaWN2VG9wPTEyNyZwZSxRLmljdkJvdHRvbT1wZT4+''@;'; put 'put ''NyYxMjcsUS5pY3ZEaWFnPXBlPj4xNCYxMjcsUS5kZ0RpYWc9cGU+PjIxJjE1LFEuaWN2Rm9yZT0xMjcmYmUsUS5pY3ZCYWNrPWJlPj43JjEyNyxRLmZzeEJ1dHRvbj1iZT4+MTQmMSxRfShTLDAsMCxrKSxHfX0sMjI1OntuOiJJbnRlcmZhY2VIZHIiLGY6ZnVuY3Rpb24gWXkoUyxMKXtyZXR1''@;'; put 'put ''cm4gMD09PUx8fFMucmVhZF9zaGlmdCgyKSwxMjAwfX0sMjI2OntuOiJJbnRlcmZhY2VFbmQiLGY6c2R9LDIyNzp7bjoiU1hWUyJ9LDIyOTp7bjoiTWVyZ2VDZWxscyIsZjpmdW5jdGlvbiBTSShTLEwpe2Zvcih2YXIgaz1bXSxHPVMucmVhZF9zaGlmdCgyKTtHLS07KWsucHVzaChOOChTKSk7''@;'; put 'put ''cmV0dXJuIGt9fSwyMzM6e246IkJrSGltIn0sMjM1OntuOiJNc29EcmF3aW5nR3JvdXAifSwyMzY6e246Ik1zb0RyYXdpbmcifSwyMzc6e246Ik1zb0RyYXdpbmdTZWxlY3Rpb24ifSwyMzk6e246IlBob25ldGljSW5mbyJ9LDI0MDp7bjoiU3hSdWxlIn0sMjQxOntuOiJTWEV4In0sMjQyOntu''@;'; put 'put ''OiJTeEZpbHQifSwyNDQ6e246IlN4RFhGIn0sMjQ1OntuOiJTeEl0bSJ9LDI0Njp7bjoiU3hOYW1lIn0sMjQ3OntuOiJTeFNlbGVjdCJ9LDI0ODp7bjoiU1hQYWlyIn0sMjQ5OntuOiJTeEZtbGEifSwyNTE6e246IlN4Rm9ybWF0In0sMjUyOntuOiJTU1QiLGY6ZnVuY3Rpb24gVGcoUyxMKXtm''@;'; put 'put ''b3IodmFyIGs9Uy5sK0wsRz1TLnJlYWRfc2hpZnQoNCksUT1TLnJlYWRfc2hpZnQoNCksbGU9W10sbWU9MDttZSE9USYmUy5sPGs7KyttZSlsZS5wdXNoKGdjKFMpKTtyZXR1cm4gbGUuQ291bnQ9RyxsZS5VbmlxdWU9USxsZX19LDI1Mzp7bjoiTGFiZWxTc3QiLGY6ZnVuY3Rpb24gWVMoUyl7''@;'; put 'put ''dmFyIEw9JGgoUyk7cmV0dXJuIEwuaXNzdD1TLnJlYWRfc2hpZnQoNCksTH19LDI1NTp7bjoiRXh0U1NUIixmOmZ1bmN0aW9uIFNlKFMsTCl7dmFyIGs9e307cmV0dXJuIGsuZHNzdD1TLnJlYWRfc2hpZnQoMiksUy5sKz1MLTIsa319LDI1Njp7bjoiU1hWREV4In0sMjU5OntuOiJTWEZvcm11''@;'; put 'put ''bGEifSwyOTA6e246IlNYREJFeCJ9LDMxMTp7bjoiUlJESW5zRGVsIn0sMzEyOntuOiJSUkRIZWFkIn0sMzE1OntuOiJSUkRDaGdDZWxsIn0sMzE3OntuOiJSUlRhYklkIixmOmxkfSwzMTg6e246IlJSRFJlblNoZWV0In0sMzE5OntuOiJSUlNvcnQifSwzMjA6e246IlJSRE1vdmUifSwzMzA6''@;'; put 'put ''e246IlJSRm9ybWF0In0sMzMxOntuOiJSUkF1dG9GbXQifSwzMzM6e246IlJSSW5zZXJ0U2gifSwzMzQ6e246IlJSRE1vdmVCZWdpbiJ9LDMzNTp7bjoiUlJETW92ZUVuZCJ9LDMzNjp7bjoiUlJESW5zRGVsQmVnaW4ifSwzMzc6e246IlJSREluc0RlbEVuZCJ9LDMzODp7bjoiUlJEQ29uZmxp''@;'; put 'put ''Y3QifSwzMzk6e246IlJSRERlZk5hbWUifSwzNDA6e246IlJSRFJzdEV0eHAifSwzNTE6e246IkxSbmcifSwzNTI6e246IlVzZXNFTEZzIixmOm5vfSwzNTM6e246IkRTRiIsZjpzZH0sNDAxOntuOiJDVXNyIn0sNDAyOntuOiJDYlVzciJ9LDQwMzp7bjoiVXNySW5mbyJ9LDQwNDp7bjoiVXNy''@;'; put 'put ''RXhjbCJ9LDQwNTp7bjoiRmlsZUxvY2sifSw0MDY6e246IlJSREluZm8ifSw0MDc6e246IkJDVXNycyJ9LDQwODp7bjoiVXNyQ2hrIn0sNDI1OntuOiJVc2VyQlZpZXcifSw0MjY6e246IlVzZXJTVmlld0JlZ2luIn0sNDI3OntuOiJVc2VyU1ZpZXdFbmQifSw0Mjg6e246IlJSRFVzZXJWaWV3''@;'; put 'put ''In0sNDI5OntuOiJRc2kifSw0MzA6e246IlN1cEJvb2siLGY6ZnVuY3Rpb24gejgoUyxMLGspe3ZhciBHPVMubCtMLFE9Uy5yZWFkX3NoaWZ0KDIpLGxlPVMucmVhZF9zaGlmdCgyKTtpZihrLnNiY2NoPWxlLDEwMjU9PWxlfHwxNDg0OT09bGUpcmV0dXJuW2xlLFFdO2lmKGxlPDF8fGxlPjI1''@;'; put 'put ''NSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgU3VwQm9vayB0eXBlOiAiK2xlKTtmb3IodmFyIG1lPUdoKFMsbGUpLHBlPVtdO0c+Uy5sOylwZS5wdXNoKFp1KFMpKTtyZXR1cm5bbGUsUSxtZSxwZV19fSw0MzE6e246IlByb3Q0UmV2IixmOm5vfSw0MzI6e246IkNvbmRGbXQifSw0MzM6''@;'; put 'put ''e246IkNGIn0sNDM0OntuOiJEVmFsIn0sNDM3OntuOiJEQ29uQmluIn0sNDM4OntuOiJUeE8iLGY6ZnVuY3Rpb24genooUyxMLGspe3ZhciBHPVMubCxRPSIiLGxlPS0xO3RyeXtTLmwrPTQsLTE9PVswLDUsNywxMSwxMiwxNF0uaW5kZXhPZigoay5sYXN0b2JqfHx7Y21vOlswLDBdfSkuY21v''@;'; put 'put ''WzFdKT9TLmwrPTY6ZnVuY3Rpb24gcWQoUyl7dmFyIEw9Uy5yZWFkX3NoaWZ0KDEpO1MubCsrO3ZhciBrPVMucmVhZF9zaGlmdCgyKTtTLmwrPTJ9KFMpO3ZhciBiZT1TLnJlYWRfc2hpZnQoMik7Uy5yZWFkX3NoaWZ0KDIpLGxlPVMucmVhZF9zaGlmdCgyKTt2YXIgQmU9Uy5yZWFkX3NoaWZ0''@;'; put 'put ''KDIpO1MubCs9QmU7Zm9yKHZhciBHZT0xO0dlPFMubGVucy5sZW5ndGgtMTsrK0dlKXtpZihTLmwtRyE9Uy5sZW5zW0dlXSl0aHJvdyBuZXcgRXJyb3IoIlR4TzogYmFkIGNvbnRpbnVlIHJlY29yZCIpO3ZhciBldD1TW1MubF07aWYoKFErPUdoKFMsUy5sZW5zW0dlKzFdLVMubGVuc1tHZV0t''@;'; put 'put ''MSkpLmxlbmd0aD49KGV0P2JlOjIqYmUpKWJyZWFrfWlmKFEubGVuZ3RoIT09YmUmJlEubGVuZ3RoIT09MipiZSl0aHJvdyBuZXcgRXJyb3IoImNjaFRleHQ6ICIrYmUrIiAhPSAiK1EubGVuZ3RoKTtyZXR1cm4gUy5sPUcrTCx7dDpRLGlmbnQ6bGV9fWNhdGNoe3JldHVybiBTLmw9RytMLHt0''@;'; put 'put ''OlEsaWZudDpsZX19fX0sNDM5OntuOiJSZWZyZXNoQWxsIixmOm5vfSw0NDA6e246IkhMaW5rIixmOmZ1bmN0aW9uIFV6KFMsTCl7dmFyIGs9TjgoUyk7Uy5sKz0xNjt2YXIgRz1mdW5jdGlvbiBFZyhTLEwpe3ZhciBrPVMubCtMLEc9Uy5yZWFkX3NoaWZ0KDQpO2lmKDIhPT1HKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiVW5yZWNvZ25pemVkIHN0cmVhbVZlcnNpb246ICIrRyk7dmFyIFE9Uy5yZWFkX3NoaWZ0KDIpO1MubCs9Mjt2YXIgbGUsbWUscGUsYmUsQmUsR2UsTmU9IiI7MTYmUSYmKGxlPXhnKFMpKSwxMjgmUSYmKG1lPXhnKFMpKSwhKDI1NyZ+USkmJihwZT14ZyhTKSksMT09KDI1NyZR''@;'; put 'put ''KSYmKGJlPWZ1bmN0aW9uIGNkKFMsTCl7dmFyIGs9Uy5yZWFkX3NoaWZ0KDE2KTtzd2l0Y2goayl7Y2FzZSJlMGM5ZWE3OWY5YmFjZTExOGM4MjAwYWEwMDRiYTkwYiI6cmV0dXJuIGZ1bmN0aW9uIGp5KFMpe3ZhciBMPVMucmVhZF9zaGlmdCg0KSxrPVMubCxHPSExO0w+MjQmJihTLmwrPUwt''@;'; put 'put ''MjQsIjc5NTg4MWY0M2IxZDdmNDhhZjJjODI1ZGM0ODUyNzYzIj09PVMucmVhZF9zaGlmdCgxNikmJihHPSEwKSxTLmw9ayk7dmFyIFE9Uy5yZWFkX3NoaWZ0KChHP0wtMjQ6TCk+PjEsInV0ZjE2bGUiKS5yZXBsYWNlKEUsIiIpO3JldHVybiBHJiYoUy5sKz0yNCksUX0oUyk7Y2FzZSIwMzAz''@;'; put 'put ''MDAwMDAwMDAwMDAwYzAwMDAwMDAwMDAwMDA0NiI6cmV0dXJuIGZ1bmN0aW9uIHp5KFMpe2Zvcih2YXIgTD1TLnJlYWRfc2hpZnQoMiksaz0iIjtMLS0gPjA7KWsrPSIuLi8iO3ZhciBHPVMucmVhZF9zaGlmdCgwLCJscHN0ci1hbnNpIik7aWYoUy5sKz0yLDU3MDA1IT1TLnJlYWRfc2hpZnQo''@;'; put 'put ''MikpdGhyb3cgbmV3IEVycm9yKCJCYWQgRmlsZU1vbmlrZXIiKTtpZigwPT09Uy5yZWFkX3NoaWZ0KDQpKXJldHVybiBrK0cucmVwbGFjZSgvXFwvZywiLyIpO3ZhciBsZT1TLnJlYWRfc2hpZnQoNCk7aWYoMyE9Uy5yZWFkX3NoaWZ0KDIpKXRocm93IG5ldyBFcnJvcigiQmFkIEZpbGVNb25p''@;'; put 'put ''a2VyIik7cmV0dXJuIGsrUy5yZWFkX3NoaWZ0KGxlPj4xLCJ1dGYxNmxlIikucmVwbGFjZShFLCIiKX0oUyk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIE1vbmlrZXIgIitrKX19KFMpKSw4JlEmJihOZT14ZyhTKSksMzImUSYmKEJlPVMucmVhZF9zaGlmdCgxNikpLDY0''@;'; put 'put ''JlEmJihHZT1CcyhTKSksUy5sPWs7dmFyIGV0PW1lfHxwZXx8YmV8fCIiO2V0JiZOZSYmKGV0Kz0iIyIrTmUpLGV0fHwoZXQ9IiMiK05lKSwyJlEmJiIvIj09ZXQuY2hhckF0KDApJiYiLyIhPWV0LmNoYXJBdCgxKSYmKGV0PSJmaWxlOi8vIitldCk7dmFyIGN0PXtUYXJnZXQ6ZXR9O3JldHVy''@;'; put 'put ''biBCZSYmKGN0Lmd1aWQ9QmUpLEdlJiYoY3QudGltZT1HZSksbGUmJihjdC5Ub29sdGlwPWxlKSxjdH0oUyxMLTI0KTtyZXR1cm5bayxHXX19LDQ0MTp7bjoiTGVsIn0sNDQyOntuOiJDb2RlTmFtZSIsZjpadX0sNDQzOntuOiJTWEZEQlR5cGUifSw0NDQ6e246IlByb3Q0UmV2UGFzcyIsZjpw''@;'; put 'put ''Y30sNDQ1OntuOiJPYk5vTWFjcm9zIn0sNDQ2OntuOiJEdiJ9LDQ0ODp7bjoiRXhjZWw5RmlsZSIsZjpzZH0sNDQ5OntuOiJSZWNhbGNJZCIsZjpmdW5jdGlvbiBGYyhTKXtyZXR1cm4gUy5yZWFkX3NoaWZ0KDIpLFMucmVhZF9zaGlmdCg0KX0scjoyfSw0NTA6e246IkVudEV4VTIiLGY6c2R9''@;'; put 'put ''LDUxMjp7bjoiRGltZW5zaW9ucyIsZjpfSX0sNTEzOntuOiJCbGFuayIsZjpEbH0sNTE1OntuOiJOdW1iZXIiLGY6ZnVuY3Rpb24gQ3QoUyxMLGspe2suYmlmZmd1ZXNzJiYyPT1rLmJpZmYmJihrLmJpZmY9NSk7dmFyIEc9JGgoUyksUT1XcyhTKTtyZXR1cm4gRy52YWw9USxHfX0sNTE2Ontu''@;'; put 'put ''OiJMYWJlbCIsZjpmdW5jdGlvbiBQeihTLEwsayl7ay5iaWZmZ3Vlc3MmJjI9PWsuYmlmZiYmKGsuYmlmZj01KTt2YXIgUT0kaChTKTsyPT1rLmJpZmYmJlMubCsrO3ZhciBsZT1adShTLDAsayk7cmV0dXJuIFEudmFsPWxlLFF9fSw1MTc6e246IkJvb2xFcnIiLGY6RG99LDUxOTp7bjoiU3Ry''@;'; put 'put ''aW5nIixmOkd6fSw1MjA6e246IlJvdyIsZjpmdW5jdGlvbiAkZShTKXt2YXIgTD17fTtMLnI9Uy5yZWFkX3NoaWZ0KDIpLEwuYz1TLnJlYWRfc2hpZnQoMiksTC5jbnQ9Uy5yZWFkX3NoaWZ0KDIpLUwuYzt2YXIgaz1TLnJlYWRfc2hpZnQoMik7Uy5sKz00O3ZhciBHPVMucmVhZF9zaGlmdCgx''@;'; put 'put ''KTtTLmwrPTE7dmFyIFE9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBMLml4ZmU9NDA5NSZRLDcmRyYmKEwubGV2ZWw9NyZHKSwzMiZHJiYoTC5oaWRkZW49ITApLDY0JkcmJihMLmhwdD1rLzIwKSxMfX0sNTIzOntuOiJJbmRleCJ9LDU0NTp7bjoiQXJyYXkiLGY6ZU19LDU0OTp7bjoiRGVmYXVs''@;'; put 'put ''dFJvd0hlaWdodCIsZjpRZH0sNTY2OntuOiJUYWJsZSJ9LDU3NDp7bjoiV2luZG93MiIsZjpmdW5jdGlvbiBqOChTLEwsayl7aWYoayYmay5iaWZmPj0yJiZrLmJpZmY8NSlyZXR1cm57fTt2YXIgRz1TLnJlYWRfc2hpZnQoMik7cmV0dXJue1JUTDo2NCZHLGdyaWQ6ISEoMiZHKSxmcm96ZW46''@;'; put 'put ''ISEoOCZHKX19fSw2Mzg6e246IlJLIixmOmZ1bmN0aW9uIEh6KFMpe3ZhciBMPVMucmVhZF9zaGlmdCgyKSxrPVMucmVhZF9zaGlmdCgyKSxHPU5TKFMpO3JldHVybntyOkwsYzprLGl4ZmU6R1swXSxya251bTpHWzFdfX19LDY1OTp7bjoiU3R5bGUiLGY6ZnVuY3Rpb24gQnooUyxMLGspe3Jl''@;'; put 'put ''dHVybiBTLmwrPUwse319fSwxMDQ4OntuOiJCaWdOYW1lIn0sMTA1NDp7bjoiRm9ybWF0IixmOmZ1bmN0aW9uICR5KFMsTCxrKXtyZXR1cm5bUy5yZWFkX3NoaWZ0KDIpLFhkKFMsMCxrKV19fSwxMDg0OntuOiJDb250aW51ZUJpZ05hbWUifSwxMjEyOntuOiJTaHJGbWxhIixmOmZ1bmN0aW9u''@;'; put 'put ''IENJKFMsTCxrKXt2YXIgRz1WOChTKTtTLmwrKzt2YXIgUT1TLnJlYWRfc2hpZnQoMSk7cmV0dXJuW0xnKFMsTC09OCxrKSxRLEddfX0sMjA0ODp7bjoiSExpbmtUb29sdGlwIixmOmZ1bmN0aW9uIG5NKFMsTCl7Uy5yZWFkX3NoaWZ0KDIpO3ZhciBrPU44KFMpLEc9Uy5yZWFkX3NoaWZ0KChM''@;'; put 'put ''LTEwKS8yLCJkYmNzLWNvbnQiKTtyZXR1cm5bayxHPUcucmVwbGFjZShFLCIiKV19fSwyMDQ5OntuOiJXZWJQdWIifSwyMDUwOntuOiJRc2lTWFRhZyJ9LDIwNTE6e246IkRCUXVlcnlFeHQifSwyMDUyOntuOiJFeHRTdHJpbmcifSwyMDUzOntuOiJUeHRRcnkifSwyMDU0OntuOiJRc2lyIn0s''@;'; put 'put ''MjA1NTp7bjoiUXNpZiJ9LDIwNTY6e246IlJSRFRRU0lGIn0sMjA1Nzp7bjoiQk9GIixmOnFofSwyMDU4OntuOiJPbGVEYkNvbm4ifSwyMDU5OntuOiJXT3B0In0sMjA2MDp7bjoiU1hWaWV3RXgifSwyMDYxOntuOiJTWFRIIn0sMjA2Mjp7bjoiU1hQSUV4In0sMjA2Mzp7bjoiU1hWRFRFeCJ9''@;'; put 'put ''LDIwNjQ6e246IlNYVmlld0V4OSJ9LDIwNjY6e246IkNvbnRpbnVlRnJ0In0sMjA2Nzp7bjoiUmVhbFRpbWVEYXRhIn0sMjEyODp7bjoiQ2hhcnRGcnRJbmZvIn0sMjEyOTp7bjoiRnJ0V3JhcHBlciJ9LDIxMzA6e246IlN0YXJ0QmxvY2sifSwyMTMxOntuOiJFbmRCbG9jayJ9LDIxMzI6e246''@;'; put 'put ''IlN0YXJ0T2JqZWN0In0sMjEzMzp7bjoiRW5kT2JqZWN0In0sMjEzNDp7bjoiQ2F0TGFiIn0sMjEzNTp7bjoiWU11bHQifSwyMTM2OntuOiJTWFZpZXdMaW5rIn0sMjEzNzp7bjoiUGl2b3RDaGFydEJpdHMifSwyMTM4OntuOiJGcnRGb250TGlzdCJ9LDIxNDY6e246IlNoZWV0RXh0In0sMjE0''@;'; put 'put ''Nzp7bjoiQm9va0V4dCIscjoxMn0sMjE0ODp7bjoiU1hBZGRsIn0sMjE0OTp7bjoiQ3JFcnIifSwyMTUwOntuOiJIRlBpY3R1cmUifSwyMTUxOntuOiJGZWF0SGRyIixmOnNkfSwyMTUyOntuOiJGZWF0In0sMjE1NDp7bjoiRGF0YUxhYkV4dCJ9LDIxNTU6e246IkRhdGFMYWJFeHRDb250ZW50''@;'; put 'put ''cyJ9LDIxNTY6e246IkNlbGxXYXRjaCJ9LDIxNjE6e246IkZlYXRIZHIxMSJ9LDIxNjI6e246IkZlYXR1cmUxMSJ9LDIxNjQ6e246IkRyb3BEb3duT2JqSWRzIn0sMjE2NTp7bjoiQ29udGludWVGcnQxMSJ9LDIxNjY6e246IkRDb25uIn0sMjE2Nzp7bjoiTGlzdDEyIn0sMjE2ODp7bjoiRmVh''@;'; put 'put ''dHVyZTEyIn0sMjE2OTp7bjoiQ29uZEZtdDEyIn0sMjE3MDp7bjoiQ0YxMiJ9LDIxNzE6e246IkNGRXgifSwyMTcyOntuOiJYRkNSQyIsZjpmdW5jdGlvbiBBSShTKXtTLmwrPTI7dmFyIEw9e2N4ZnM6MCxjcmM6MH07cmV0dXJuIEwuY3hmcz1TLnJlYWRfc2hpZnQoMiksTC5jcmM9Uy5yZWFk''@;'; put 'put ''X3NoaWZ0KDQpLEx9LHI6MTJ9LDIxNzM6e246IlhGRXh0IixmOmZ1bmN0aW9uIExVKFMsTCl7Uy5sKz0yO3ZhciBHPVMucmVhZF9zaGlmdCgyKTtTLmwrPTI7Zm9yKHZhciBRPVMucmVhZF9zaGlmdCgyKSxsZT1bXTtRLS0gPjA7KWxlLnB1c2goUlUoUykpO3JldHVybntpeGZlOkcsZXh0Omxl''@;'; put 'put ''fX0scjoxMn0sMjE3NDp7bjoiQXV0b0ZpbHRlcjEyIn0sMjE3NTp7bjoiQ29udGludWVGcnQxMiJ9LDIxODA6e246Ik1EVEluZm8ifSwyMTgxOntuOiJNRFhTdHIifSwyMTgyOntuOiJNRFhUdXBsZSJ9LDIxODM6e246Ik1EWFNldCJ9LDIxODQ6e246Ik1EWFByb3AifSwyMTg1OntuOiJNRFhL''@;'; put 'put ''UEkifSwyMTg2OntuOiJNREIifSwyMTg3OntuOiJQTFYifSwyMTg4OntuOiJDb21wYXQxMiIsZjpubyxyOjEyfSwyMTg5OntuOiJEWEYifSwyMTkwOntuOiJUYWJsZVN0eWxlcyIscjoxMn0sMjE5MTp7bjoiVGFibGVTdHlsZSJ9LDIxOTI6e246IlRhYmxlU3R5bGVFbGVtZW50In0sMjE5NDp7''@;'; put 'put ''bjoiU3R5bGVFeHQifSwyMTk1OntuOiJOYW1lUHVibGlzaCJ9LDIxOTY6e246Ik5hbWVDbXQiLGY6ZnVuY3Rpb24gZG9lKFMsTCxrKXtpZighKGsuYmlmZjw4KSl7dmFyIEc9Uy5yZWFkX3NoaWZ0KDIpLFE9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybltHaChTLEcsayksR2goUyxRLGspXX1TLmwr''@;'; put 'put ''PUx9LHI6MTJ9LDIxOTc6e246IlNvcnREYXRhIn0sMjE5ODp7bjoiVGhlbWUiLGY6ZnVuY3Rpb24gaFIoUyxMLGspe3ZhciBHPVMubCtMO2lmKDEyNDIyNiE9PVMucmVhZF9zaGlmdCg0KSl7aWYoIWsuY2VsbFN0eWxlcylyZXR1cm4gdm9pZChTLmw9Ryk7dmFyIG1lLGxlPVMuc2xpY2UoUy5s''@;'; put 'put ''KTtTLmw9Rzt0cnl7bWU9ZG4obGUse3R5cGU6ImFycmF5In0pfWNhdGNoe3JldHVybn12YXIgcGU9cnIobWUsInRoZW1lL3RoZW1lL3RoZW1lMS54bWwiLCEwKTtpZihwZSlyZXR1cm4gYm0ocGUsayl9fSxyOjEyfSwyMTk5OntuOiJHVUlEVHlwZUxpYiJ9LDIyMDA6e246IkZuR3JwMTIifSwy''@;'; put 'put ''MjAxOntuOiJOYW1lRm5HcnAxMiJ9LDIyMDI6e246Ik1UUlNldHRpbmdzIixmOmZ1bmN0aW9uIFh5KFMpe3JldHVyblswIT09Uy5yZWFkX3NoaWZ0KDQpLDAhPT1TLnJlYWRfc2hpZnQoNCksUy5yZWFkX3NoaWZ0KDQpXX0scjoxMn0sMjIwMzp7bjoiQ29tcHJlc3NQaWN0dXJlcyIsZjpzZH0s''@;'; put 'put ''MjIwNDp7bjoiSGVhZGVyRm9vdGVyIn0sMjIwNTp7bjoiQ3J0TGF5b3V0MTIifSwyMjA2OntuOiJDcnRNbEZydCJ9LDIyMDc6e246IkNydE1sRnJ0Q29udGludWUifSwyMjExOntuOiJGb3JjZUZ1bGxDYWxjdWxhdGlvbiIsZjpmdW5jdGlvbiBEdChTKXt2YXIgTD1mdW5jdGlvbiBwSShTKXt2''@;'; put 'put ''YXIgTD1TLnJlYWRfc2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIFMubCs9OCx7dHlwZTpMLGZsYWdzOmt9fShTKTtpZigyMjExIT1MLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIEZ1dHVyZSBSZWNvcmQgIitMLnR5cGUpO3JldHVybiAwIT09Uy5yZWFkX3NoaWZ0KDQp''@;'; put 'put ''fX0sMjIxMjp7bjoiU2hhcGVQcm9wc1N0cmVhbSJ9LDIyMTM6e246IlRleHRQcm9wc1N0cmVhbSJ9LDIyMTQ6e246IlJpY2hUZXh0U3RyZWFtIn0sMjIxNTp7bjoiQ3J0TGF5b3V0MTJBIn0sNDA5Nzp7bjoiVW5pdHMifSw0MDk4OntuOiJDaGFydCJ9LDQwOTk6e246IlNlcmllcyJ9LDQxMDI6''@;'; put 'put ''e246IkRhdGFGb3JtYXQifSw0MTAzOntuOiJMaW5lRm9ybWF0In0sNDEwNTp7bjoiTWFya2VyRm9ybWF0In0sNDEwNjp7bjoiQXJlYUZvcm1hdCJ9LDQxMDc6e246IlBpZUZvcm1hdCJ9LDQxMDg6e246IkF0dGFjaGVkTGFiZWwifSw0MTA5OntuOiJTZXJpZXNUZXh0In0sNDExNjp7bjoiQ2hh''@;'; put 'put ''cnRGb3JtYXQifSw0MTE3OntuOiJMZWdlbmQifSw0MTE4OntuOiJTZXJpZXNMaXN0In0sNDExOTp7bjoiQmFyIn0sNDEyMDp7bjoiTGluZSJ9LDQxMjE6e246IlBpZSJ9LDQxMjI6e246IkFyZWEifSw0MTIzOntuOiJTY2F0dGVyIn0sNDEyNDp7bjoiQ3J0TGluZSJ9LDQxMjU6e246IkF4aXMi''@;'; put 'put ''fSw0MTI2OntuOiJUaWNrIn0sNDEyNzp7bjoiVmFsdWVSYW5nZSJ9LDQxMjg6e246IkNhdFNlclJhbmdlIn0sNDEyOTp7bjoiQXhpc0xpbmUifSw0MTMwOntuOiJDcnRMaW5rIn0sNDEzMjp7bjoiRGVmYXVsdFRleHQifSw0MTMzOntuOiJUZXh0In0sNDEzNDp7bjoiRm9udFgiLGY6cGN9LDQx''@;'; put 'put ''MzU6e246Ik9iamVjdExpbmsifSw0MTQ2OntuOiJGcmFtZSJ9LDQxNDc6e246IkJlZ2luIn0sNDE0ODp7bjoiRW5kIn0sNDE0OTp7bjoiUGxvdEFyZWEifSw0MTU0OntuOiJDaGFydDNkIn0sNDE1Njp7bjoiUGljRiJ9LDQxNTc6e246IkRyb3BCYXIifSw0MTU4OntuOiJSYWRhciJ9LDQxNTk6''@;'; put 'put ''e246IlN1cmYifSw0MTYwOntuOiJSYWRhckFyZWEifSw0MTYxOntuOiJBeGlzUGFyZW50In0sNDE2Mzp7bjoiTGVnZW5kRXhjZXB0aW9uIn0sNDE2NDp7bjoiU2h0UHJvcHMiLGY6ZnVuY3Rpb24gYjAoUyxMLGspe3ZhciBHPXthcmVhOiExfTtpZig1IT1rLmJpZmYpcmV0dXJuIFMubCs9TCxH''@;'; put 'put ''O3ZhciBRPVMucmVhZF9zaGlmdCgxKTtyZXR1cm4gUy5sKz0zLDE2JlEmJihHLmFyZWE9ITApLEd9fSw0MTY1OntuOiJTZXJUb0NydCJ9LDQxNjY6e246IkF4ZXNVc2VkIn0sNDE2ODp7bjoiU0Jhc2VSZWYifSw0MTcwOntuOiJTZXJQYXJlbnQifSw0MTcxOntuOiJTZXJBdXhUcmVuZCJ9LDQx''@;'; put 'put ''NzQ6e246IklGbXRSZWNvcmQifSw0MTc1OntuOiJQb3MifSw0MTc2OntuOiJBbFJ1bnMifSw0MTc3OntuOiJCUkFJIn0sNDE4Nzp7bjoiU2VyQXV4RXJyQmFyIn0sNDE4ODp7bjoiQ2xydENsaWVudCIsZjpmdW5jdGlvbiBFSShTKXtmb3IodmFyIEw9Uy5yZWFkX3NoaWZ0KDIpLGs9W107TC0t''@;'; put 'put ''ID4wOylrLnB1c2goSFMoUykpO3JldHVybiBrfX0sNDE4OTp7bjoiU2VyRm10In0sNDE5MTp7bjoiQ2hhcnQzREJhclNoYXBlIn0sNDE5Mjp7bjoiRmJpIn0sNDE5Mzp7bjoiQm9wUG9wIn0sNDE5NDp7bjoiQXhjRXh0In0sNDE5NTp7bjoiRGF0In0sNDE5Njp7bjoiUGxvdEdyb3d0aCJ9LDQx''@;'; put 'put ''OTc6e246IlNJSW5kZXgifSw0MTk4OntuOiJHZWxGcmFtZSJ9LDQxOTk6e246IkJvcFBvcEN1c3RvbSJ9LDQyMDA6e246IkZiaTIifSwwOntuOiJEaW1lbnNpb25zIixmOl9JfSwxOntuOiJCSUZGMkJMQU5LIn0sMjp7bjoiQklGRjJJTlQiLGY6ZnVuY3Rpb24gWHooUyl7dmFyIEw9JGgoUyk7''@;'; put 'put ''KytTLmw7dmFyIGs9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBMLnQ9Im4iLEwudmFsPWssTH19LDM6e246IkJJRkYyTlVNIixmOmZ1bmN0aW9uIFU4KFMpe3ZhciBMPSRoKFMpOysrUy5sO3ZhciBrPVdzKFMpO3JldHVybiBMLnQ9Im4iLEwudmFsPWssTH19LDQ6e246IkJJRkYyU1RSIixmOmZ1''@;'; put 'put ''bmN0aW9uIElJKFMsTCxrKXtrLmJpZmZndWVzcyYmNT09ay5iaWZmJiYoay5iaWZmPTIpO3ZhciBHPSRoKFMpOysrUy5sO3ZhciBRPVhkKFMsMCxrKTtyZXR1cm4gRy50PSJzdHIiLEcudmFsPVEsR319LDU6e246IkJvb2xFcnIiLGY6RG99LDc6e246IlN0cmluZyIsZjpmdW5jdGlvbiBKeShT''@;'; put 'put ''KXt2YXIgTD1TLnJlYWRfc2hpZnQoMSk7cmV0dXJuIDA9PT1MPyhTLmwrKywiIik6Uy5yZWFkX3NoaWZ0KEwsInNiY3MtY29udCIpfX0sODp7bjoiQklGRjJST1cifSw5OntuOiJCT0YiLGY6cWh9LDExOntuOiJJbmRleCJ9LDIyOntuOiJFeHRlcm5Db3VudCIsZjpwY30sMzA6e246IkJJRkYy''@;'; put 'put ''Rk9STUFUIixmOktTfSwzMTp7bjoiQklGRjJGTVRDTlQifSwzMjp7bjoiQklGRjJDT0xJTkZPIn0sMzM6e246IkFycmF5IixmOmVNfSwzNjp7bjoiQ09MV0lEVEgifSwzNzp7bjoiRGVmYXVsdFJvd0hlaWdodCIsZjpRZH0sNTA6e246IkJJRkYyRk9OVFhUUkEiLGY6ZnVuY3Rpb24gUXkoUyxM''@;'; put 'put ''KXtTLmwrPTYsUy5sKz0yLFMubCs9MSxTLmwrPTMsUy5sKz0xLFMubCs9TC0xM319LDYyOntuOiJCSUZGMldJTkRPVzIifSw1Mjp7bjoiRERFT2JqTmFtZSJ9LDY3OntuOiJCSUZGMlhGIn0sNjg6e246IkJJRkYyWEZJTkRFWCIsZjpwY30sNjk6e246IkJJRkYyRk9OVENMUiJ9LDg2OntuOiJC''@;'; put 'put ''SUZGNEZNVENOVCJ9LDEyNjp7bjoiUksifSwxMjc6e246IkltRGF0YSIsZjpmdW5jdGlvbiBESShTKXt2YXIgTD1TLnJlYWRfc2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMiksRz1TLnJlYWRfc2hpZnQoNCksUT17Zm10OkwsZW52OmssbGVuOkcsZGF0YTpTLnNsaWNlKFMubCxTLmwrRyl9O3Jl''@;'; put 'put ''dHVybiBTLmwrPUcsUX19LDEzNTp7bjoiQWRkaW4ifSwxMzY6e246IkVkZyJ9LDEzNzp7bjoiUHViIn0sMTQ1OntuOiJTdWIifSwxNDg6e246IkxIUmVjb3JkIn0sMTQ5OntuOiJMSE5HcmFwaCJ9LDE1MDp7bjoiU291bmQifSwxNjk6e246IkNvb3JkTGlzdCJ9LDE3MTp7bjoiR0NXIn0sMTg4''@;'; put 'put ''OntuOiJTaHJGbWxhIn0sMTkxOntuOiJUb29sYmFySGRyIn0sMTkyOntuOiJUb29sYmFyRW5kIn0sMTk0OntuOiJBZGRNZW51In0sMTk1OntuOiJEZWxNZW51In0sMjE0OntuOiJSU3RyaW5nIixmOmZ1bmN0aW9uIGxNKFMsTCxrKXt2YXIgRz1TLmwrTCxRPSRoKFMpLGxlPVMucmVhZF9zaGlm''@;'; put 'put ''dCgyKSxtZT1HaChTLGxlLGspO3JldHVybiBTLmw9RyxRLnQ9InN0ciIsUS52YWw9bWUsUX19LDIyMzp7bjoiVUREZXNjIn0sMjM0OntuOiJUYWJJZENvbmYifSwzNTQ6e246IlhMNU1vZGlmeSJ9LDQyMTp7bjoiRmlsZVNoYXJpbmcyIn0sNTE4OntuOiJGb3JtdWxhIixmOmV4fSw1MjE6e246''@;'; put 'put ''IkJPRiIsZjpxaH0sNTM2OntuOiJMYmwiLGY6S3l9LDU0Nzp7bjoiRXh0ZXJuTmFtZSIsZjplaH0sNTYxOntuOiJGb250In0sNTc5OntuOiJCSUZGM1hGIn0sMTAzMDp7bjoiRm9ybXVsYSIsZjpleH0sMTAzMzp7bjoiQk9GIixmOnFofSwxMDkxOntuOiJCSUZGNFhGIn0sMjE1Nzp7bjoiRmVh''@;'; put 'put ''dEluZm8ifSwyMTYzOntuOiJGZWF0SW5mbzExIn0sMjE3Nzp7bjoiU1hBZGRsMTIifSwyMjQwOntuOiJBdXRvV2ViUHViIn0sMjI0MTp7bjoiTGlzdE9iaiJ9LDIyNDI6e246Ikxpc3RGaWVsZCJ9LDIyNDM6e246Ikxpc3REViJ9LDIyNDQ6e246Ikxpc3RDb25kRm10In0sMjI0NTp7bjoiTGlz''@;'; put 'put ''dENGIn0sMjI0Njp7bjoiRk1RcnkifSwyMjQ3OntuOiJGTVNRcnkifSwyMjQ4OntuOiJQTFYifSwyMjQ5OntuOiJMbkV4dCJ9LDIyNTA6e246Ik1rckV4dCJ9LDIyNTE6e246IkNydENvb3B0In0sMjI2Mjp7bjoiRlJUQXJjaElkJCIscjoxMn0sMjkyODI6e319LHF4PVJlKE5nLCJuIik7ZnVu''@;'; put 'put ''Y3Rpb24gJGkoUyxMLGssRyl7dmFyIFE9K0x8fCtxeFtMXTtpZighaXNOYU4oUSkpe3ZhciBsZT1HfHwoa3x8W10pLmxlbmd0aHx8MCxtZT1TLm5leHQoNCk7bWUud3JpdGVfc2hpZnQoMixRKSxtZS53cml0ZV9zaGlmdCgyLGxlKSxsZT4wJiZ0YShrKSYmUy5wdXNoKGspfX1mdW5jdGlvbiBQ''@;'; put 'put ''NyhTLEwsayl7cmV0dXJuIFN8fChTPVZ0KDcpKSxTLndyaXRlX3NoaWZ0KDIsTCksUy53cml0ZV9zaGlmdCgyLGspLFMud3JpdGVfc2hpZnQoMiwwKSxTLndyaXRlX3NoaWZ0KDEsMCksU31mdW5jdGlvbiByXyhTLEwsayxHKXtpZihudWxsIT1MLnYpc3dpdGNoKEwudCl7Y2FzZSJkIjpjYXNl''@;'; put 'put ''Im4iOnZhciBRPSJkIj09TC50P1FlKEllKEwudikpOkwudjtyZXR1cm4gdm9pZChRPT0oMHxRKSYmUT49MCYmUTw2NTUzNj8kaShTLDIsZnVuY3Rpb24gc00oUyxMLGspe3ZhciBHPVZ0KDkpO3JldHVybiBQNyhHLFMsTCksRy53cml0ZV9zaGlmdCgyLGspLEd9KGssRyxRKSk6JGkoUywzLGZ1''@;'; put 'put ''bmN0aW9uIHRmKFMsTCxrKXt2YXIgRz1WdCgxNSk7cmV0dXJuIFA3KEcsUyxMKSxHLndyaXRlX3NoaWZ0KDgsaywiZiIpLEd9KGssRyxRKSkpO2Nhc2UiYiI6Y2FzZSJlIjpyZXR1cm4gdm9pZCAkaShTLDUsZnVuY3Rpb24gdk8oUyxMLGssRyl7dmFyIFE9VnQoOSk7cmV0dXJuIFA3KFEsUyxM''@;'; put 'put ''KSxtMyhrLEd8fCJiIixRKSxRfShrLEcsTC52LEwudCkpO2Nhc2UicyI6Y2FzZSJzdHIiOnJldHVybiB2b2lkICRpKFMsNCxmdW5jdGlvbiBKeChTLEwsayl7dmFyIEc9VnQoOCsyKmsubGVuZ3RoKTtyZXR1cm4gUDcoRyxTLEwpLEcud3JpdGVfc2hpZnQoMSxrLmxlbmd0aCksRy53cml0ZV9z''@;'; put 'put ''aGlmdChrLmxlbmd0aCxrLCJzYmNzIiksRy5sPEcubGVuZ3RoP0cuc2xpY2UoMCxHLmwpOkd9KGssRywoTC52fHwiIikuc2xpY2UoMCwyNTUpKSl9JGkoUywxLFA3KG51bGwsayxHKSl9ZnVuY3Rpb24geU8oUyxMLGssRyxRKXt2YXIgbGU9MTYrXzAoUS5jZWxsWGZzLFEuY2VsbFN0eWxlWGZz''@;'; put 'put ''LEwsUSk7aWYobnVsbCE9TC52fHxMLmJmKWlmKEwuYmYpJGkoUywiRm9ybXVsYSIsZnVuY3Rpb24gb1ooUyxMLGssRyxRKXt2YXIgbGU9UHAoTCxrLFEpLG1lPWZ1bmN0aW9uIGFaKFMpe2lmKG51bGw9PVMpe3ZhciBMPVZ0KDgpO3JldHVybiBMLndyaXRlX3NoaWZ0KDEsMyksTC53cml0ZV9z''@;'; put 'put ''aGlmdCgxLDApLEwud3JpdGVfc2hpZnQoMiwwKSxMLndyaXRlX3NoaWZ0KDIsMCksTC53cml0ZV9zaGlmdCgyLDY1NTM1KSxMfXJldHVybiB0MSgibnVtYmVyIj09dHlwZW9mIFM/UzowKX0oUy52KSxwZT1WdCg2KTtwZS53cml0ZV9zaGlmdCgyLDMzKSxwZS53cml0ZV9zaGlmdCg0LDApO2Zv''@;'; put 'put ''cih2YXIgTmU9VnQoUy5iZi5sZW5ndGgpLEJlPTA7QmU8Uy5iZi5sZW5ndGg7KytCZSlOZVtCZV09Uy5iZltCZV07cmV0dXJuIGooW2xlLG1lLHBlLE5lXSl9KEwsayxHLDAsbGUpKTtlbHNlIHN3aXRjaChMLnQpe2Nhc2UiZCI6Y2FzZSJuIjokaShTLCJOdW1iZXIiLGZ1bmN0aW9uIHJzKFMs''@;'; put 'put ''TCxrLEcpe3ZhciBRPVZ0KDE0KTtyZXR1cm4gUHAoUyxMLEcsUSksdDEoayxRKSxRfShrLEcsImQiPT1MLnQ/UWUoSWUoTC52KSk6TC52LGxlKSk7YnJlYWs7Y2FzZSJiIjpjYXNlImUiOiRpKFMsNTE3LGZ1bmN0aW9uIHd0KFMsTCxrLEcsUSxsZSl7dmFyIG1lPVZ0KDgpO3JldHVybiBQcChT''@;'; put 'put ''LEwsRyxtZSksbTMoayxsZSxtZSksbWV9KGssRyxMLnYsbGUsMCxMLnQpKTticmVhaztjYXNlInMiOmNhc2Uic3RyIjppZihRLmJvb2tTU1Qpe3ZhciBwZT1zTChRLlN0cmluZ3MsTC52LEwuUj9MLnI9VzgoTC5SKTpudWxsLFEucmV2U3RyaW5ncyk7aWYoTC5SKWZvcih2YXIgYmU9MDtiZTxM''@;'; put 'put ''LlIubGVuZ3RoOysrYmUpTC5SW2JlXS5zJiZfMChRLmNlbGxYZnMsUS5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOkwuUltiZV0uc30sUSk7JGkoUywiTGFiZWxTc3QiLGZ1bmN0aW9uIEdTKFMsTCxrLEcpe3ZhciBRPVZ0KDEwKTtyZXR1cm4gUHAoUyxMLEcsUSksUS53cml0ZV9zaGlmdCg0''@;'; put 'put ''LGspLFF9KGssRyxwZSxsZSkpfWVsc2UgJGkoUywiTGFiZWwiLGZ1bmN0aW9uIEhvKFMsTCxrLEcsUSl7dmFyIGxlPSFRfHw4PT1RLmJpZmYsbWU9VnQoK2xlKzgrKDErbGUpKmsubGVuZ3RoKTtyZXR1cm4gUHAoUyxMLEcsbWUpLG1lLndyaXRlX3NoaWZ0KDIsay5sZW5ndGgpLGxlJiZtZS53''@;'; put 'put ''cml0ZV9zaGlmdCgxLDEpLG1lLndyaXRlX3NoaWZ0KCgxK2xlKSprLmxlbmd0aCxrLGxlPyJ1dGYxNmxlIjoic2JjcyIpLG1lfShrLEcsKEwudnx8IiIpLnNsaWNlKDAsMjU1KSxsZSxRKSk7YnJlYWs7ZGVmYXVsdDokaShTLCJCbGFuayIsUHAoayxHLGxlKSl9ZWxzZSAkaShTLCJCbGFuayIs''@;'; put 'put ''UHAoayxHLGxlKSl9ZnVuY3Rpb24gYk8oUyxMLGspe3ZhciBCZSxHPW1yKCksUT1rLlNoZWV0TmFtZXNbU10sbGU9ay5TaGVldHNbUV18fHt9LG1lPShrfHx7fSkuV29ya2Jvb2t8fHt9LHBlPShtZS5TaGVldHN8fFtdKVtTXXx8e30sYmU9QXJyYXkuaXNBcnJheShsZSksTmU9OD09TC5iaWZm''@;'; put 'put ''LEdlPSIiLGV0PVtdLGN0PXRvKGxlWyIhcmVmIl18fCJBMSIpLHh0PU5lPzY1NTM2OjE2Mzg0O2lmKGN0LmUuYz4yNTV8fGN0LmUucj49eHQpe2lmKEwuV1RGKXRocm93IG5ldyBFcnJvcigiUmFuZ2UgIisobGVbIiFyZWYiXXx8IkExIikrIiBleGNlZWRzIGZvcm1hdCBsaW1pdCBBMTpJVjE2''@;'; put 'put ''Mzg0Iik7Y3QuZS5jPU1hdGgubWluKGN0LmUuYywyNTUpLGN0LmUucj1NYXRoLm1pbihjdC5lLmMseHQtMSl9JGkoRywyMDU3LHVtKDAsMTYsTCkpLCRpKEcsIkNhbGNNb2RlIixpYygxKSksJGkoRywiQ2FsY0NvdW50IixpYygxMDApKSwkaShHLCJDYWxjUmVmTW9kZSIsaWEoITApKSwkaShH''@;'; put 'put ''LCJDYWxjSXRlciIsaWEoITEpKSwkaShHLCJDYWxjRGVsdGEiLHQxKC4wMDEpKSwkaShHLCJDYWxjU2F2ZVJlY2FsYyIsaWEoITApKSwkaShHLCJQcmludFJvd0NvbCIsaWEoITEpKSwkaShHLCJQcmludEdyaWQiLGlhKCExKSksJGkoRywiR3JpZFNldCIsaWMoMSkpLCRpKEcsIkd1dHMiLGZ1''@;'; put 'put ''bmN0aW9uIEtyKFMpe3ZhciBMPVZ0KDgpO3JldHVybiBMLndyaXRlX3NoaWZ0KDQsMCksTC53cml0ZV9zaGlmdCgyLFNbMF0/U1swXSsxOjApLEwud3JpdGVfc2hpZnQoMixTWzFdP1NbMV0rMTowKSxMfShbMCwwXSkpLCRpKEcsIkhDZW50ZXIiLGlhKCExKSksJGkoRywiVkNlbnRlciIsaWEo''@;'; put 'put ''ITEpKTt2YXIgb3Q9bGVbIiFwcmludCJdJiZsZVsiIXByaW50Il0ubWFyZ2luc3x8bGVbIiFtYXJnaW5zIl07b3QmJihudWxsIT1vdC5sZWZ0JiYkaShHLCJMZWZ0TWFyZ2luIix0MShvdC5sZWZ0KSksbnVsbCE9b3QucmlnaHQmJiRpKEcsIlJpZ2h0TWFyZ2luIix0MShvdC5yaWdodCkpLG51''@;'; put 'put ''bGwhPW90LnRvcCYmJGkoRywiVG9wTWFyZ2luIix0MShvdC50b3ApKSxudWxsIT1vdC5ib3R0b20mJiRpKEcsIkJvdHRvbU1hcmdpbiIsdDEob3QuYm90dG9tKSksKG51bGwhPW90LmhlYWRlcnx8bnVsbCE9b3QuZm9vdGVyKSYmJGkoRywiU2V0dXAiLGZ1bmN0aW9uIFd6KFMsTCl7dmFyIGs9''@;'; put 'put ''VnQoMzQpLEc9ITEsUT03MDtyZXR1cm4ibGFuZHNjYXBlIj09KEwucHJvcHN8fHt9KS5vcmllbnRhdGlvbiYmKEc9ITAsUSY9LTY3KSxHJiYoUSY9LTUpLGsud3JpdGVfc2hpZnQoMiwxKSxrLndyaXRlX3NoaWZ0KDIsMTAwKSxrLndyaXRlX3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCgyLDAp''@;'; put 'put ''LGsud3JpdGVfc2hpZnQoMiwwKSxrLndyaXRlX3NoaWZ0KDEsUSksay53cml0ZV9zaGlmdCgxLDApLGsud3JpdGVfc2hpZnQoMiw2MDApLGsud3JpdGVfc2hpZnQoMiw2MDApLHQxKG51bGw9PVMuaGVhZGVyPy41OlMuaGVhZGVyLGspLHQxKG51bGw9PVMuZm9vdGVyPy41OlMuZm9vdGVyLGsp''@;'; put 'put ''LGsud3JpdGVfc2hpZnQoMiwxKSxrfShvdCxsZVsiIXByaW50Il18fHt9KSkpLE5lJiZmdW5jdGlvbiBGNyhTLEwsayl7aWYoTCl7dmFyIEc9MDtMLmZvckVhY2goZnVuY3Rpb24oUSxsZSl7KytHPD0yNTYmJlEmJihRLmF1dG8mJmhaKGssUSxsZSksJGkoUywiQ29sSW5mbyIsZnVuY3Rpb24g''@;'; put 'put ''a0koUyxMKXt2YXIgaz1WdCgxMik7ay53cml0ZV9zaGlmdCgyLEwpLGsud3JpdGVfc2hpZnQoMixMKSxrLndyaXRlX3NoaWZ0KDIsMjU2KlMud2lkdGgpLGsud3JpdGVfc2hpZnQoMiwwKTt2YXIgRz0wO3JldHVybiBTLmhpZGRlbiYmKEd8PTEpLGsud3JpdGVfc2hpZnQoMSxHKSxrLndyaXRl''@;'; put 'put ''X3NoaWZ0KDEsRz1TLmxldmVsfHwwKSxrLndyaXRlX3NoaWZ0KDIsMCksa30oaXgobGUsUSksbGUpKSl9KX19KEcsbGVbIiFjb2xzIl0sbGUpLCRpKEcsIkRpbWVuc2lvbnMiLGZ1bmN0aW9uIEZ6KFMsTCl7dmFyIGs9OCE9TC5iaWZmJiZMLmJpZmY/Mjo0LEc9VnQoMiprKzYpO3JldHVybiBH''@;'; put 'put ''LndyaXRlX3NoaWZ0KGssUy5zLnIpLEcud3JpdGVfc2hpZnQoayxTLmUucisxKSxHLndyaXRlX3NoaWZ0KDIsUy5zLmMpLEcud3JpdGVfc2hpZnQoMixTLmUuYysxKSxHLndyaXRlX3NoaWZ0KDIsMCksR30oY3QsTCkpLE5lJiYobGVbIiFsaW5rcyJdPVtdKSxsZVsiIXJvd3MiXSYmTmUmJmxl''@;'; put 'put ''WyIhcm93cyJdLmZvckVhY2goZnVuY3Rpb24oSnQsVG4pe2Zvcih2YXIgc3I9QmkoVG4pLENuPTI1Nixscj0wLHFuPUp0LnM/MTYrXzAoTC5jZWxsWGZzLEwuY2VsbFN0eWxlWGZzLHt0OiJuIix2OjAsczpKdC5zfSxMKTowLFduPWN0LnMuYztXbjw9Y3QuZS5jOysrV24pKGJlPyhsZVtUbl18''@;'; put 'put ''fFtdKVtXbl06bGVbZXRbV25dK3NyXSkmJihXbjxDbiYmKENuPVduKSxXbj5sciYmKGxyPVduKSk7bHI8Q24mJihDbj1scj0wKSwkaShHLCJSb3ciLGZ1bmN0aW9uIHB0KFMsTCxrKXt2YXIgRz1WdCgxNik7Ry53cml0ZV9zaGlmdCgyLEwpLEcud3JpdGVfc2hpZnQoMixrWzBdKSxHLndyaXRl''@;'; put 'put ''X3NoaWZ0KDIsa1sxXSsxKSxHLndyaXRlX3NoaWZ0KDIsMjAqUy5ocHR8fDIwKlZwKFMuaHB4KXx8MzMwKSxHLndyaXRlX3NoaWZ0KDQsMCk7dmFyIFE9MDtyZXR1cm4gUXw9MHxTLmxldmVsLFMuaGlkZGVuJiYoUXw9MzIpLFF8PTY0LGtbMl0mJihRfD0xMjgpLEcud3JpdGVfc2hpZnQoMSxR''@;'; put 'put ''KSxHLndyaXRlX3NoaWZ0KDEsMSksRy53cml0ZV9zaGlmdCgyLGtbMl18fDApLEd9KEp0LFRuLFtDbixscixxbl0pKX0pO2Zvcih2YXIgYnQ9Y3Qucy5yO2J0PD1jdC5lLnI7KytidCl7R2U9QmkoYnQpO2Zvcih2YXIgRnQ9Y3Qucy5jO0Z0PD1jdC5lLmM7KytGdCl7YnQ9PT1jdC5zLnImJihl''@;'; put 'put ''dFtGdF09Rm8oRnQpKSxCZT1ldFtGdF0rR2U7dmFyIGt0PWJlPyhsZVtidF18fFtdKVtGdF06bGVbQmVdO2t0JiYoeU8oRyxrdCxidCxGdCxMKSxOZSYma3QubCYmbGVbIiFsaW5rcyJdLnB1c2goW0JlLGt0LmxdKSl9fXZhciBMdD1wZS5Db2RlTmFtZXx8cGUubmFtZXx8UTtyZXR1cm4oTmV8''@;'; put 'put ''fDU9PUwuYmlmZiYmbGVbIiFmcmVlemUiXSkmJiRpKEcsIldpbmRvdzIiLGZ1bmN0aW9uIFpTKFMsTCxrLEcpe3ZhciBRPUcmJkcuYmlmZnx8OCxsZT1WdCg4PT1RPzE4OjEwKSxtZT0xNzE4O3JldHVybiBrPjAmJihtZSY9LTUxMyksQnQoTFsiIWdyaWRsaW5lcyJdKSYmKG1lJj0tMyksTFsi''@;'; put 'put ''IWZyZWV6ZSJdJiYobWV8PTgpLFMmJlMuUlRMJiYobWV8PTY0KSw1PT1RJiYobWU9NDQ2KSxsZS53cml0ZV9zaGlmdCgyLG1lKSw4PT1RPyhsZS53cml0ZV9zaGlmdCg0LDApLGxlLndyaXRlX3NoaWZ0KDQsNjQpLGxlLndyaXRlX3NoaWZ0KDQsMCksbGUud3JpdGVfc2hpZnQoNCwwKSk6KGxl''@;'; put 'put ''LndyaXRlX3NoaWZ0KDQsMCksbGUud3JpdGVfc2hpZnQoNCwwKSksbGV9KChtZS5WaWV3c3x8W10pWzBdLGxlLFMpKSwoTmV8fDU9PUwuYmlmZikmJmxlWyIhZnJlZXplIl0mJiRpKEcsIlBhbmUiLGZ1bmN0aW9uIEd5KFMpeyJzdHJpbmciPT10eXBlb2YgUyYmKFM9QW8oUykpO3ZhciBMPVZ0''@;'; put 'put ''KDEwKTtyZXR1cm4gTC53cml0ZV9zaGlmdCgyLFMuYyksTC53cml0ZV9zaGlmdCgyLFMuciksTC53cml0ZV9zaGlmdCgyLFMuciksTC53cml0ZV9zaGlmdCgyLFMuYyksTC53cml0ZV9zaGlmdCgxLDMpLEwud3JpdGVfc2hpZnQoMSwwKSxMfShsZVsiIWZyZWV6ZSJdKSksTmUmJmxlWyIhc2Vs''@;'; put 'put ''Il0mJiRpKEcsIlNlbGVjdGlvbiIsZnVuY3Rpb24gS3ooUyxMKXt2YXIgaz1WdCgxNSksRz1TLmNlbGw7aWYoIUcpe2lmKCFTLnJhbmdlKXRocm93IG5ldyBFcnJvcigiTXVzdCBzcGVjaWZ5IGEgc2VsZWN0aW9uIGNlbGwgb3IgcmFuZ2UiKTtHPUdpKFZvKFMucmFuZ2UucmVwbGFjZSgvXHMu''@;'; put 'put ''KiQvLCIiKSkucyl9dmFyIFE9InN0cmluZyI9PXR5cGVvZiBHP0FvKEcpOkc7aWYoTCl7dmFyIGxlPSJzdHJpbmciPT10eXBlb2YgTD9BbyhMKTpMO2sud3JpdGVfc2hpZnQoMSxRLnI+PWxlLnImJlEuYz49bGUuYz8wOlEucj49bGUuciYmUS5jPGxlLmM/MjpRLnI8bGUuciYmUS5jPj1sZS5j''@;'; put 'put ''PzE6Myl9ZWxzZSBrLndyaXRlX3NoaWZ0KDEsMyk7cmV0dXJuIGsud3JpdGVfc2hpZnQoMixRLnIpLGsud3JpdGVfc2hpZnQoMixRLmMpLGsud3JpdGVfc2hpZnQoMiwwKSxrLndyaXRlX3NoaWZ0KDIsMSksZnVuY3Rpb24gdkkoUyxMKXtMfHwoTD1WdCg2KSksTC53cml0ZV9zaGlmdCgyLFMu''@;'; put 'put ''cz9TLnMucjpTLnIpLEwud3JpdGVfc2hpZnQoMixTLmU/Uy5lLnI6Uy5yKSxMLndyaXRlX3NoaWZ0KDEsUy5zP1Mucy5jOlMuYyksTC53cml0ZV9zaGlmdCgxLFMuZT9TLmUuYzpTLmMpfSh7czpRLGU6UX0sayksa30obGVbIiFzZWwiXSxsZVsiIWZyZWV6ZSJdKSksTmUmJihsZVsiIW1lcmdl''@;'; put 'put ''cyJdfHxbXSkubGVuZ3RoJiYkaShHLCJNZXJnZUNlbGxzIixmdW5jdGlvbiB0aChTKXt2YXIgTD1WdCgyKzgqUy5sZW5ndGgpO0wud3JpdGVfc2hpZnQoMixTLmxlbmd0aCk7Zm9yKHZhciBrPTA7azxTLmxlbmd0aDsrK2spS2goU1trXSxMKTtyZXR1cm4gTH0obGVbIiFtZXJnZXMiXSkpLE5l''@;'; put 'put ''JiZmdW5jdGlvbiBReChTLEwpe2Zvcih2YXIgaz0wO2s8TFsiIWxpbmtzIl0ubGVuZ3RoOysrayl7dmFyIEc9TFsiIWxpbmtzIl1ba107JGkoUywiSExpbmsiLHRNKEcpKSxHWzFdLlRvb2x0aXAmJiRpKFMsIkhMaW5rVG9vbHRpcCIsck0oRykpfWRlbGV0ZSBMWyIhbGlua3MiXX0oRyxsZSks''@;'; put 'put ''JGkoRywiQ29kZU5hbWUiLFYwKEx0KSksTmUmJmZ1bmN0aW9uIFhXKFMsTCl7dmFyIGs9VnQoMTkpO2sud3JpdGVfc2hpZnQoNCwyMTUxKSxrLndyaXRlX3NoaWZ0KDQsMCksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoMiwzKSxrLndyaXRlX3NoaWZ0KDEsMSksay53cml0ZV9z''@;'; put 'put ''aGlmdCg0LDApLCRpKFMsIkZlYXRIZHIiLGspLChrPVZ0KDM5KSkud3JpdGVfc2hpZnQoNCwyMTUyKSxrLndyaXRlX3NoaWZ0KDQsMCksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoMiwzKSxrLndyaXRlX3NoaWZ0KDEsMCksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hp''@;'; put 'put ''ZnQoMiwxKSxrLndyaXRlX3NoaWZ0KDQsNCksay53cml0ZV9zaGlmdCgyLDApLEtoKHRvKExbIiFyZWYiXXx8IkExIiksayksay53cml0ZV9zaGlmdCg0LDQpLCRpKFMsIkZlYXQiLGspfShHLGxlKSwkaShHLCJFT0YiKSxHLmVuZCgpfWZ1bmN0aW9uIEpXKFMsTCxrKXt2YXIgRz1tcigpLFE9''@;'; put 'put ''KFN8fHt9KS5Xb3JrYm9va3x8e30sbGU9US5TaGVldHN8fFtdLG1lPVEuV0JQcm9wc3x8e30scGU9OD09ay5iaWZmLGJlPTU9PWsuYmlmZjskaShHLDIwNTcsdW0oMCw1LGspKSwieGxhIj09ay5ib29rVHlwZSYmJGkoRywiQWRkaW4iKSwkaShHLCJJbnRlcmZhY2VIZHIiLHBlP2ljKDEyMDAp''@;'; put 'put ''Om51bGwpLCRpKEcsIk1tcyIsZnVuY3Rpb24gZzMoUyxMKXtMfHwoTD1WdChTKSk7Zm9yKHZhciBrPTA7azxTOysraylMLndyaXRlX3NoaWZ0KDEsMCk7cmV0dXJuIEx9KDIpKSxiZSYmJGkoRywiVG9vbGJhckhkciIpLGJlJiYkaShHLCJUb29sYmFyRW5kIiksJGkoRywiSW50ZXJmYWNlRW5k''@;'; put 'put ''IiksJGkoRywiV3JpdGVBY2Nlc3MiLGZ1bmN0aW9uIEI4KFMsTCl7dmFyIGs9IUx8fDg9PUwuYmlmZixHPVZ0KGs/MTEyOjU0KTtmb3IoRy53cml0ZV9zaGlmdCg4PT1MLmJpZmY/MjoxLDcpLGsmJkcud3JpdGVfc2hpZnQoMSwwKSxHLndyaXRlX3NoaWZ0KDQsODU5MDA3MDU5KSxHLndyaXRl''@;'; put 'put ''X3NoaWZ0KDQsNTQ1ODU0OHwoaz8wOjUzNjg3MDkxMikpO0cubDxHLmxlbmd0aDspRy53cml0ZV9zaGlmdCgxLGs/MDozMik7cmV0dXJuIEd9KDAsaykpLCRpKEcsIkNvZGVQYWdlIixpYyhwZT8xMjAwOjEyNTIpKSxwZSYmJGkoRywiRFNGIixpYygwKSkscGUmJiRpKEcsIkV4Y2VsOUZpbGUi''@;'; put 'put ''KSwkaShHLCJSUlRhYklkIixmdW5jdGlvbiBrZyhTKXtmb3IodmFyIEw9VnQoMipTKSxrPTA7azxTOysraylMLndyaXRlX3NoaWZ0KDIsaysxKTtyZXR1cm4gTH0oUy5TaGVldE5hbWVzLmxlbmd0aCkpLHBlJiZTLnZiYXJhdyYmJGkoRywiT2JQcm9qIikscGUmJlMudmJhcmF3JiYkaShHLCJD''@;'; put 'put ''b2RlTmFtZSIsVjAobWUuQ29kZU5hbWV8fCJUaGlzV29ya2Jvb2siKSksJGkoRywiQnVpbHRJbkZuR3JvdXBDb3VudCIsaWMoMTcpKSwkaShHLCJXaW5Qcm90ZWN0IixpYSghMSkpLCRpKEcsIlByb3RlY3QiLGlhKCExKSksJGkoRywiUGFzc3dvcmQiLGljKDApKSxwZSYmJGkoRywiUHJvdDRS''@;'; put 'put ''ZXYiLGlhKCExKSkscGUmJiRpKEcsIlByb3Q0UmV2UGFzcyIsaWMoMCkpLCRpKEcsIldpbmRvdzEiLGZ1bmN0aW9uIGJJKCl7dmFyIFM9VnQoMTgpO3JldHVybiBTLndyaXRlX3NoaWZ0KDIsMCksUy53cml0ZV9zaGlmdCgyLDApLFMud3JpdGVfc2hpZnQoMiwyOTI4MCksUy53cml0ZV9zaGlm''@;'; put 'put ''dCgyLDE3NjAwKSxTLndyaXRlX3NoaWZ0KDIsNTYpLFMud3JpdGVfc2hpZnQoMiwwKSxTLndyaXRlX3NoaWZ0KDIsMCksUy53cml0ZV9zaGlmdCgyLDEpLFMud3JpdGVfc2hpZnQoMiw1MDApLFN9KCkpLCRpKEcsIkJhY2t1cCIsaWEoITEpKSwkaShHLCJIaWRlT2JqIixpYygwKSksJGkoRywi''@;'; put 'put ''RGF0ZTE5MDQiLGlhKCJ0cnVlIj09ZnVuY3Rpb24gS2IoUyl7cmV0dXJuIFMuV29ya2Jvb2smJlMuV29ya2Jvb2suV0JQcm9wcyYmRnIoUy5Xb3JrYm9vay5XQlByb3BzLmRhdGUxOTA0KT8idHJ1ZSI6ImZhbHNlIn0oUykpKSwkaShHLCJDYWxjUHJlY2lzaW9uIixpYSghMCkpLHBlJiYkaShH''@;'; put 'put ''LCJSZWZyZXNoQWxsIixpYSghMSkpLCRpKEcsIkJvb2tCb29sIixpYygwKSksZzA9JGQoWzAsMTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1LDAsMTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1XSksZnVu''@;'; put 'put ''Y3Rpb24gJFcoUyxMLGspeygoKEx8fHt9KS5TdHlsZXN8fHt9KS5Gb250c3x8W3tzejoxMixjb2xvcjp7dGhlbWU6MX0sbmFtZToiQXJpYWwiLGZhbWlseToyLHNjaGVtZToibWlub3IifV0pLmZvckVhY2goZnVuY3Rpb24oRyl7JGkoUywiRm9udCIsZnVuY3Rpb24geTMoUyxMKXt2YXIgaz1T''@;'; put 'put ''Lm5hbWV8fCJBcmlhbCIsRz1MJiY1PT1MLmJpZmYsbGU9VnQoRz8xNStrLmxlbmd0aDoxNisyKmsubGVuZ3RoKTtsZS53cml0ZV9zaGlmdCgyLDIwKihTLnN6fHwxMikpO3ZhciBtZT0wO3JldHVybiBTLmJvbGQmJihtZXw9MSksUy5pdGFsaWMmJihtZXw9MiksUy5zdHJpa2UmJihtZXw9OCks''@;'; put 'put ''Uy5zaGFkb3cmJihtZXw9MzIpLGxlLndyaXRlX3NoaWZ0KDEsbWUpLGxlLndyaXRlX3NoaWZ0KDEsMCksbGUud3JpdGVfc2hpZnQoMixTLmNvbG9yP0FNKFMuY29sb3IsNjQpOjY0KSxsZS53cml0ZV9zaGlmdCgyLFMuYm9sZD83MDA6NDAwKSxsZS53cml0ZV9zaGlmdCgyLCJzdXBlciI9PVMu''@;'; put 'put ''dmFsaWduPzE6InN1YiI9PVMudmFsaWduPzI6MCksbGUud3JpdGVfc2hpZnQoMSxTLnVuZGVybGluZXx8MCksbGUud3JpdGVfc2hpZnQoMSxsZS5mYW1pbHl8fDApLGxlLndyaXRlX3NoaWZ0KDEsbGUuY2hhcnNldHx8MCksbGUud3JpdGVfc2hpZnQoMSwwKSxsZS53cml0ZV9zaGlmdCgxLGsu''@;'; put 'put ''bGVuZ3RoKSxHfHxsZS53cml0ZV9zaGlmdCgxLDEpLGxlLndyaXRlX3NoaWZ0KChHPzE6Mikqay5sZW5ndGgsayxHPyJzYmNzIjoidXRmMTZsZSIpLGxlfShHLGspKX0pfShHLFMsayksZnVuY3Rpb24gS1coUyxMLGspe0wmJltbNSw4XSxbMjMsMjZdLFs0MSw0NF0sWzUwLDM5Ml1dLmZvckVh''@;'; put 'put ''Y2goZnVuY3Rpb24oRyl7Zm9yKHZhciBRPUdbMF07UTw9R1sxXTsrK1EpbnVsbCE9TFtRXSYmJGkoUywiRm9ybWF0IiwkUyhRLExbUV0saykpfSl9KEcsUy5TU0YsayksZnVuY3Rpb24gcVcoUyxMKXtmb3IodmFyIGs9MDtrPDE2OysraykkaShTLCJYRiIsd0koe251bUZtdElkOjAsc3R5bGU6''@;'; put 'put ''ITB9LDAsTCkpO0wuY2VsbFhmcy5mb3JFYWNoKGZ1bmN0aW9uKEcpeyRpKFMsIlhGIix3SShHLDAsTCkpfSl9KEcsayksJGkoRywiUGFsZXR0ZSIsZnVuY3Rpb24gVEkoUyl7dmFyIEw9VnQoMjI2KTtMLndyaXRlX3NoaWZ0KDIsNTYpO2Zvcih2YXIgaz0wO2s8NTY7KytrKXt2YXIgRz1TW2sr''@;'; put 'put ''OF18fEl5W2srOF07TC53cml0ZV9zaGlmdCgxLEdbMF0pLEwud3JpdGVfc2hpZnQoMSxHWzFdKSxMLndyaXRlX3NoaWZ0KDEsR1syXSksTC53cml0ZV9zaGlmdCgxLDApfXJldHVybiBMfShnMCkpLGcwPXVuKEl5KSxwZSYmJGkoRywiVXNlc0VMRnMiLGlhKCExKSk7dmFyIEJlPUcuZW5kKCks''@;'; put 'put ''R2U9bXIoKTtwZSYmJGkoR2UsIkNvdW50cnkiLGZ1bmN0aW9uIFp6KFMpe3JldHVybiBTfHwoUz1WdCg0KSksUy53cml0ZV9zaGlmdCgyLDEpLFMud3JpdGVfc2hpZnQoMiwxKSxTfSgpKSxwZSYmay5TdHJpbmdzJiZmdW5jdGlvbiBtTyhTLEwsayxHKXt2YXIgUT1HfHwoa3x8W10pLmxlbmd0''@;'; put 'put ''aHx8MDtpZihRPD04MjI0KXJldHVybiAkaShTLEwsayxRKTt2YXIgbGU9K0x8fCtxeFtMXTtpZighaXNOYU4obGUpKXtmb3IodmFyIG1lPWsucGFydHN8fFtdLHBlPTAsYmU9MCxOZT0wO05lKyhtZVtwZV18fDgyMjQpPD04MjI0OylOZSs9bWVbcGVdfHw4MjI0LHBlKys7dmFyIEJlPVMubmV4''@;'; put 'put ''dCg0KTtmb3IoQmUud3JpdGVfc2hpZnQoMixsZSksQmUud3JpdGVfc2hpZnQoMixOZSksUy5wdXNoKGsuc2xpY2UoYmUsYmUrTmUpKSxiZSs9TmU7YmU8UTspe2ZvcigoQmU9Uy5uZXh0KDQpKS53cml0ZV9zaGlmdCgyLDYwKSxOZT0wO05lKyhtZVtwZV18fDgyMjQpPD04MjI0OylOZSs9bWVb''@;'; put 'put ''cGVdfHw4MjI0LHBlKys7QmUud3JpdGVfc2hpZnQoMixOZSksUy5wdXNoKGsuc2xpY2UoYmUsYmUrTmUpKSxiZSs9TmV9fX0oR2UsIlNTVCIsZnVuY3Rpb24gSGEoUyxMKXt2YXIgaz1WdCg4KTtrLndyaXRlX3NoaWZ0KDQsUy5Db3VudCksay53cml0ZV9zaGlmdCg0LFMuVW5pcXVlKTtmb3Io''@;'; put 'put ''dmFyIEc9W10sUT0wO1E8Uy5sZW5ndGg7KytRKUdbUV09dmwoU1tRXSxMKTt2YXIgbGU9aihba10uY29uY2F0KEcpKTtyZXR1cm4gbGUucGFydHM9W2subGVuZ3RoXS5jb25jYXQoRy5tYXAoZnVuY3Rpb24obWUpe3JldHVybiBtZS5sZW5ndGh9KSksbGV9KGsuU3RyaW5ncyxrKSksJGkoR2Us''@;'; put 'put ''IkVPRiIpO3ZhciBldD1HZS5lbmQoKSxjdD1tcigpLHh0PTAsb3Q9MDtmb3Iob3Q9MDtvdDxTLlNoZWV0TmFtZXMubGVuZ3RoOysrb3QpeHQrPShwZT8xMjoxMSkrKHBlPzI6MSkqUy5TaGVldE5hbWVzW290XS5sZW5ndGg7dmFyIGJ0PUJlLmxlbmd0aCt4dCtldC5sZW5ndGg7Zm9yKG90PTA7''@;'; put 'put ''b3Q8Uy5TaGVldE5hbWVzLmxlbmd0aDsrK290KSRpKGN0LCJCb3VuZFNoZWV0OCIsdjMoe3BvczpidCxoczoobGVbb3RdfHx7fSkuSGlkZGVufHwwLGR0OjAsbmFtZTpTLlNoZWV0TmFtZXNbb3RdfSxrKSksYnQrPUxbb3RdLmxlbmd0aDt2YXIga3Q9Y3QuZW5kKCk7aWYoeHQhPWt0Lmxlbmd0''@;'; put 'put ''aCl0aHJvdyBuZXcgRXJyb3IoIkJTOCAiK3h0KyIgIT0gIitrdC5sZW5ndGgpO3ZhciBMdD1bXTtyZXR1cm4gQmUubGVuZ3RoJiZMdC5wdXNoKEJlKSxrdC5sZW5ndGgmJkx0LnB1c2goa3QpLGV0Lmxlbmd0aCYmTHQucHVzaChldCksTzAoW0x0XSl9ZnVuY3Rpb24gTjcoUyxMKXt2YXIgaz1M''@;'; put 'put ''fHx7fTtzd2l0Y2goay5iaWZmfHwyKXtjYXNlIDg6Y2FzZSA1OnJldHVybiBmdW5jdGlvbiBINyhTLEwpe3ZhciBrPUx8fHt9LEc9W107SjgoTCYmTC5QUEl8fDk2KSxTJiYhUy5TU0YmJihTLlNTRj1BLmdldF90YWJsZSgpKSxTJiZTLlNTRiYmKGFlKEEpLEEubG9hZF90YWJsZShTLlNTRiks''@;'; put 'put ''ay5yZXZzc2Y9QWUoUy5TU0YpLGsucmV2c3NmW1MuU1NGWzY1NTM1XV09MCxrLnNzZj1TLlNTRiksUy5TdHlsZXM9e0ZvbnRzOmsuRm9udHM9W3tzejoxMixjb2xvcjp7dGhlbWU6MSxyZ2I6IjAwMDAwMCJ9LG5hbWU6IkNhbGlicmkiLGZhbWlseToyLHNjaGVtZToibWlub3IifV0sRmlsbHM6''@;'; put 'put ''ay5GaWxscz1be3BhdHRlcm5UeXBlOiJub25lIn0se3BhdHRlcm5UeXBlOiJncmF5MTI1In1dLEJvcmRlcnM6ay5Cb3JkZXJzPVt7fV0sRFhGOmsuRFhGPVMuU3R5bGVzJiZTLlN0eWxlcy5EWEZ8fFtdfSxCcChrLkZvbnRzWzBdKSxrLlN0cmluZ3M9W10say5TdHJpbmdzLkNvdW50PTAsay5T''@;'; put 'put ''dHJpbmdzLlVuaXF1ZT0wLEZiP2sucmV2U3RyaW5ncz1uZXcgTWFwOihrLnJldlN0cmluZ3M9e30say5yZXZTdHJpbmdzLmZvbz1bXSxkZWxldGUgay5yZXZTdHJpbmdzLmZvbyksY0Uoayksay5jZWxsWGZzPVtdLGsuY2VsbFN0eWxlWGZzPVt7bmFtZToiTm9ybWFsIn1dLF8wKGsuY2VsbFhm''@;'; put 'put ''cyxrLmNlbGxTdHlsZVhmcyx7fSx7cmV2c3NmOntHZW5lcmFsOjB9fSksUy5Qcm9wc3x8KFMuUHJvcHM9e30pO2Zvcih2YXIgUT0wO1E8Uy5TaGVldE5hbWVzLmxlbmd0aDsrK1EpR1tHLmxlbmd0aF09Yk8oUSxrLFMpO3JldHVybiBHLnVuc2hpZnQoSlcoUyxHLGspKSxPMChbR10pfShTLEwp''@;'; put 'put ''O2Nhc2UgNDpjYXNlIDM6Y2FzZSAyOnJldHVybiBmdW5jdGlvbiBHVyhTLEwpe2Zvcih2YXIgaz1MfHx7fSxHPW1yKCksUT0wLGxlPTA7bGU8Uy5TaGVldE5hbWVzLmxlbmd0aDsrK2xlKVMuU2hlZXROYW1lc1tsZV09PWsuc2hlZXQmJihRPWxlKTtpZigwPT1RJiZrLnNoZWV0JiZTLlNoZWV0''@;'; put 'put ''TmFtZXNbMF0hPWsuc2hlZXQpdGhyb3cgbmV3IEVycm9yKCJTaGVldCBub3QgZm91bmQ6ICIray5zaGVldCk7cmV0dXJuICRpKEcsND09ay5iaWZmPzEwMzM6Mz09ay5iaWZmPzUyMTo5LHVtKDAsMTYsaykpLGZ1bmN0aW9uIFlXKFMsTCxrLEcpe3ZhciBtZSxRPUFycmF5LmlzQXJyYXkoTCks''@;'; put 'put ''bGU9dG8oTFsiIXJlZiJdfHwiQTEiKSxwZT0iIixiZT1bXTtpZihsZS5lLmM+MjU1fHxsZS5lLnI+MTYzODMpe2lmKEcuV1RGKXRocm93IG5ldyBFcnJvcigiUmFuZ2UgIisoTFsiIXJlZiJdfHwiQTEiKSsiIGV4Y2VlZHMgZm9ybWF0IGxpbWl0IEExOklWMTYzODQiKTtsZS5lLmM9TWF0aC5t''@;'; put 'put ''aW4obGUuZS5jLDI1NSksbGUuZS5yPU1hdGgubWluKGxlLmUuYywxNjM4MyksbWU9b28obGUpfWZvcih2YXIgTmU9bGUucy5yO05lPD1sZS5lLnI7KytOZSl7cGU9QmkoTmUpO2Zvcih2YXIgQmU9bGUucy5jO0JlPD1sZS5lLmM7KytCZSl7TmU9PT1sZS5zLnImJihiZVtCZV09Rm8oQmUpKSxt''@;'; put 'put ''ZT1iZVtCZV0rcGU7dmFyIEdlPVE/KExbTmVdfHxbXSlbQmVdOkxbbWVdO0dlJiZyXyhTLEdlLE5lLEJlKX19fShHLFMuU2hlZXRzW1MuU2hlZXROYW1lc1tRXV0sMCxrKSwkaShHLDEwKSxHLmVuZCgpfShTLEwpfXRocm93IG5ldyBFcnJvcigiaW52YWxpZCB0eXBlICIray5ib29rVHlwZSsi''@;'; put 'put ''IGZvciBCSUZGIil9dmFyIGEyPWZ1bmN0aW9uKCl7dmFyIFM9e2NlbnRlckNvbnRpbnVvdXM6ImNlbnRlciIsanVzdGlmeToibGVmdCJ9O2Z1bmN0aW9uIGsoR2UsZXQpe3ZhciBjdD1ldHx8e30seHQ9Y3QuZGVuc2U/W106e30sb3Q9KEdlPUdlLnJlcGxhY2UoLzwhLS0uKj8tLT4vZywiIikp''@;'; put 'put ''Lm1hdGNoKC88dGFibGUvaSk7aWYoIW90KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBIVE1MOiBjb3VsZCBub3QgZmluZCA8dGFibGU+Iik7dmFyIGJ0PUdlLm1hdGNoKC88XC90YWJsZS9pKSxGdD1vdC5pbmRleCxrdD1idCYmYnQuaW5kZXh8fEdlLmxlbmd0aCxMdD1mdW5jdGlvbiBodChT''@;'; put 'put ''LEwsayl7aWYoaG58fCJzdHJpbmciPT10eXBlb2YgTClyZXR1cm4gUy5zcGxpdChMKTtmb3IodmFyIEc9Uy5zcGxpdChMKSxRPVtHWzBdXSxsZT0xO2xlPEcubGVuZ3RoOysrbGUpUS5wdXNoKGspLFEucHVzaChHW2xlXSk7cmV0dXJuIFF9KEdlLnNsaWNlKEZ0LGt0KSwvKDo/PHRyW14+XSo+''@;'; put 'put ''KS9pLCI8dHI+IiksSnQ9LTEsVG49MCxzcj0wLENuPTAsbHI9e3M6e3I6MWU3LGM6MWU3fSxlOntyOjAsYzowfX0scW49W107Zm9yKEZ0PTA7RnQ8THQubGVuZ3RoOysrRnQpe3ZhciBXbj1MdFtGdF0udHJpbSgpLHByPVduLnNsaWNlKDAsMykudG9Mb3dlckNhc2UoKTtpZigiPHRyIiE9cHIp''@;'; put 'put ''e2lmKCI8dGQiPT1wcnx8Ijx0aCI9PXByKXt2YXIgeXI9V24uc3BsaXQoLzxcL3RbZGhdPi9pKTtmb3Ioa3Q9MDtrdDx5ci5sZW5ndGg7KytrdCl7dmFyIHRyPXlyW2t0XS50cmltKCk7aWYodHIubWF0Y2goLzx0W2RoXS9pKSl7Zm9yKHZhciB3aT10cixGaT0wOyI8Ij09d2kuY2hhckF0KDAp''@;'; put 'put ''JiYoRmk9d2kuaW5kZXhPZigiPiIpKT4tMTspd2k9d2kuc2xpY2UoRmkrMSk7Zm9yKHZhciByYT0wO3JhPHFuLmxlbmd0aDsrK3JhKXt2YXIgb2E9cW5bcmFdO29hLnMuYz09VG4mJm9hLnMucjxKdCYmSnQ8PW9hLmUuciYmKFRuPW9hLmUuYysxLHJhPS0xKX12YXIga2k9dnIodHIuc2xpY2Uo''@;'; put 'put ''MCx0ci5pbmRleE9mKCI+IikpKTtDbj1raS5jb2xzcGFuPytraS5jb2xzcGFuOjEsKChzcj0ra2kucm93c3Bhbik+MXx8Q24+MSkmJnFuLnB1c2goe3M6e3I6SnQsYzpUbn0sZTp7cjpKdCsoc3J8fDEpLTEsYzpUbitDbi0xfX0pO3ZhciBrcj1raS50fHxraVsiZGF0YS10Il18fCIiO2lmKCF3''@;'; put 'put ''aS5sZW5ndGgpe1RuKz1Dbjtjb250aW51ZX1pZih3aT1ucih3aSksbHIucy5yPkp0JiYobHIucy5yPUp0KSxsci5lLnI8SnQmJihsci5lLnI9SnQpLGxyLnMuYz5UbiYmKGxyLnMuYz1UbiksbHIuZS5jPFRuJiYobHIuZS5jPVRuKSx3aS5sZW5ndGgpe3ZhciBZbj17dDoicyIsdjp3aX07Y3Qu''@;'; put 'put ''cmF3fHwhd2kudHJpbSgpLmxlbmd0aHx8InMiPT1rcnx8KFluPW5pKHdpLGN0KSksY3QuZGVuc2U/KHh0W0p0XXx8KHh0W0p0XT1bXSkseHRbSnRdW1RuXT1Zbik6eHRbR2koe3I6SnQsYzpUbn0pXT1ZbixUbis9Q259fX19fWVsc2V7aWYoKytKdCxjdC5zaGVldFJvd3MmJmN0LnNoZWV0Um93''@;'; put 'put ''czw9SnQpey0tSnQ7YnJlYWt9VG49MH19cmV0dXJuIHh0WyIhcmVmIl09b28obHIpLHFuLmxlbmd0aCYmKHh0WyIhbWVyZ2VzIl09cW4pLHh0fWZ1bmN0aW9uIFEoR2UsZXQsY3QseHQsb3QsYnQpe3ZhciBMdCxGdD1HZVsiIW1lcmdlcyJdfHxbXSxrdD1bXSxKdD17c3R5bGU6W119LFRuPSEx''@;'; put 'put ''O2Z1bmN0aW9uIHNyKGFhLHpvLGphKXt2YXIgd289IiIsYm89MDtpZihMdFthYV0pc3dpdGNoKEx0W2FhXS5zdHlsZSl7Y2FzZSJ0aGluIjpjYXNlImhhaXIiOndvPSJzb2xpZCIsYm89MTticmVhaztjYXNlIm1lZGl1bSI6d289InNvbGlkIixibz0yO2JyZWFrO2Nhc2UidGhpY2siOndvPSJz''@;'; put 'put ''b2xpZCIsYm89MzticmVhaztjYXNlImRvdWJsZSI6d289ImRvdWJsZSIsYm89MzticmVhaztjYXNlImRvdHRlZCI6Y2FzZSJkYXNoRG90RG90Ijp3bz0iZG90dGVkIixibz0xO2JyZWFrO2Nhc2UibWVkaXVtRGFzaERvdERvdCI6d289ImRvdHRlZCIsYm89MjticmVhaztjYXNlImRhc2hlZCI6''@;'; put 'put ''Y2FzZSJkYXNoRG90IjpjYXNlInNsYW50RGFzaERvdCI6d289ImRhc2hlZCIsYm89MTticmVhaztjYXNlIm1lZGl1bURhc2hlZCI6Y2FzZSJtZWRpdW1EYXNoRG90Ijp3bz0iZGFzaGVkIixibz0yfWU6aWYoMD09Ym8pe3N3aXRjaChhYSl7Y2FzZSJ0b3AiOi0tem87YnJlYWs7Y2FzZSJsZWZ0''@;'; put 'put ''IjotLWphO2JyZWFrO2Nhc2UiYm90dG9tIjorK3pvO2JyZWFrO2Nhc2UicmlnaHQiOisramF9dmFyIFVpPXpvPj0wJiZqYT49MD94dC5kZW5zZT8oR2Vbem9dfHxbXSlbamFdOkdlW0dpKHtyOnpvLGM6amF9KV06bnVsbDtpZihVaSl7aWYoVWkucyYmVWkuc1t7dG9wOiJib3R0b20iLGJvdHRv''@;'; put 'put ''bToidG9wIixsZWZ0OiJyaWdodCIscmlnaHQ6ImxlZnQifVthYV1dKWJyZWFrIGU7VWkucyYmVWkucy5mZ0NvbG9yJiYoYm89MSl9THQuZmdDb2xvciYmKGJvPTEpLCFVaSYmVG4mJjA9PWJvJiYoYm89MSl9MCE9Ym8mJmJvJiYoSnQuc3R5bGUucHVzaCgiYm9yZGVyLSIrYWErIi1zdHlsZToi''@;'; put 'put ''Kyh3b3x8InRyYW5zcGFyZW50IikpLEp0LnN0eWxlLnB1c2goImJvcmRlci0iK2FhKyItd2lkdGg6IitibysicHgiKSwiIj09d28/SnQuc3R5bGUucHVzaCgiYm9yZGVyLSIrYWErIi1jb2xvcjogdHJhbnNwYXJlbnQiKTpMdFthYV0uY29sb3ImJkx0W2FhXS5jb2xvci5yZ2ImJkp0LnN0eWxl''@;'; put 'put ''LnB1c2goImJvcmRlci0iK2FhKyItY29sb3I6IyIrVDEoTHRbYWFdLmNvbG9yLnJnYikpKX1mb3IodmFyIENuPWV0LnMuYztDbjw9ZXQuZS5jOysrQ24pe2Zvcih2YXIgbHI9MCxxbj0wLFduPTA7V248RnQubGVuZ3RoOysrV24paWYoIShGdFtXbl0ucy5yPmN0fHxGdFtXbl0ucy5jPkNufHxG''@;'; put 'put ''dFtXbl0uZS5yPGN0fHxGdFtXbl0uZS5jPENuKSl7aWYoRnRbV25dLnMucjxjdHx8RnRbV25dLnMuYzxDbil7bHI9LTE7YnJlYWt9bHI9RnRbV25dLmUuci1GdFtXbl0ucy5yKzEscW49RnRbV25dLmUuYy1GdFtXbl0ucy5jKzE7YnJlYWt9aWYoIShscjwwKSl7dmFyIHByPUdpKHtyOmN0LGM6''@;'; put 'put ''Q259KSx5cj14dC5kZW5zZT8oR2VbY3RdfHxbXSlbQ25dOkdlW3ByXTt5cj9Ubj0hMTooVG49ITAseXI9e3Q6InoiLHM6e319KTt2YXIgdHI9InoiPT15ci50PyIiOnlyLmh8fGJhKHlyLnd8fChMbyh5cikseXIudyl8fCIiKTtpZihKdD17c3R5bGU6W119LEx0PXlyLnMpe3ZhciB3aT0xO2lm''@;'; put 'put ''KCgic3VwZXIiPT1MdC52YWxpZ258fCJzdWIiPT1MdC52YWxpZ24pJiYod2k9LjgzLHRyPWpyKCJzcGFuIix0cix7c3R5bGU6InZlcnRpY2FsLWFsaWduOiAiK0x0LnZhbGlnbn0pKSxKdC5zdHlsZS5wdXNoKCJmb250LXdlaWdodDoiKyhMdC5ib2xkPzcwMDo0MDApKSxMdC5pdGFsaWMmJkp0''@;'; put 'put ''LnN0eWxlLnB1c2goImZvbnQtc3R5bGU6IGl0YWxpYyIpLChMdC51bmRlcmxpbmV8fEx0LnN0cmlrZSkmJkp0LnN0eWxlLnB1c2goInRleHQtZGVjb3JhdGlvbjoiKyhMdC51bmRlcmxpbmU/IiB1bmRlcmxpbmUiOiIiKSsoTHQuc3RyaWtlPyIgbGluZS10aHJvdWdoIjoiIikpLEx0LmNvbG9y''@;'; put 'put ''JiZMdC5jb2xvci5yZ2ImJkp0LnN0eWxlLnB1c2goImNvbG9yOiAjIitUMShMdC5jb2xvci5yZ2IpKSxMdC5uYW1lJiZKdC5zdHlsZS5wdXNoKCJmb250LWZhbWlseToiK0x0Lm5hbWUrIiwgc2Fucy1zZXJpZiIpLEx0LnN6JiZKdC5zdHlsZS5wdXNoKCJmb250LXNpemU6IitMdC5zeip3aSsi''@;'; put 'put ''cHQiKSxudWxsIT09THQucGF0dGVyblR5cGUmJkx0LmZnQ29sb3ImJkx0LmZnQ29sb3IucmdiJiZKdC5zdHlsZS5wdXNoKCJiYWNrZ3JvdW5kLWNvbG9yOiAjIitUMShMdC5mZ0NvbG9yLnJnYikpLFsidG9wIiwibGVmdCJdLmZvckVhY2goZnVuY3Rpb24oYWEpe3NyKGFhLGN0LENuKX0pLGxy''@;'; put 'put ''PjF8fHFuPjEpe3ZhciBGaT1HaSh7cjpjdCtsci0xLGM6Q24rcW4tMX0pLHJhPXh0LmRlbnNlPyhHZVtjdCtsci0xXXx8W10pW0NuK3FuLTFdOkdlW0ZpXSxraT1MdDtMdD1yYSYmcmEuc3x8THQsWyJib3R0b20iLCJyaWdodCJdLmZvckVhY2goZnVuY3Rpb24oYWEpe3NyKGFhLGN0LENuKX0p''@;'; put 'put ''LEx0PWtpfWVsc2VbImJvdHRvbSIsInJpZ2h0Il0uZm9yRWFjaChmdW5jdGlvbihhYSl7c3IoYWEsY3QsQ24pfSk7aWYoTHQuYWxpZ25tZW50KXtpZihMdC5hbGlnbm1lbnQuaG9yaXpvbnRhbD9KdC5zdHlsZS5wdXNoKCJ0ZXh0LWFsaWduOiAiKyhTW0x0LmFsaWdubWVudC5ob3Jpem9udGFs''@;'; put 'put ''XXx8THQuYWxpZ25tZW50Lmhvcml6b250YWwpKToibiI9PXlyLnQmJkp0LnN0eWxlLnB1c2goInRleHQtYWxpZ246IHJpZ2h0IiksTHQuYWxpZ25tZW50LnZlcnRpY2FsKXt2YXIga3I9THQuYWxpZ25tZW50LnZlcnRpY2FsO0p0LnN0eWxlLnB1c2goInZlcnRpY2FsLWFsaWduOiAiKygiY2Vu''@;'; put 'put ''dGVyIj09a3I/Im1pZGRsZSI6a3IpKX1pZihMdC5hbGlnbm1lbnQud3JhcFRleHQpSnQuc3R5bGUucHVzaCgid2hpdGUtc3BhY2U6IHByZS13cmFwIik7ZWxzZXt2YXIgWW49eHQuZGVuc2U/KEdlW2N0XXx8W10pW0NuKzFdOkdlW0dpKHtyOmN0LGM6Q24rMX0pXTtZbiYmInoiIT1Zbi50JiZK''@;'; put 'put ''dC5zdHlsZS5wdXNoKCJ3aGl0ZS1zcGFjZTogcHJlLXdyYXAiKX19ZWxzZSJuIj09eXIudCYmSnQuc3R5bGUucHVzaCgidGV4dC1hbGlnbjogcmlnaHQiKTt2YXIgVnI9KChHZVsiIWNvbHMiXXx8W10pW0NuXXx8e30pLndweDtudWxsPT1WciYmKFZyPSgoR2VbIiFzaGVldEZvcm1hdCJdfHx7''@;'; put 'put ''fSkuY29sfHx7fSkud3B4KX12YXIgd3I9MDtpZihxbjw9MSYmbHI8PTEmJih3cj0oKEdlWyIhY29scyJdfHxbXSlbQ25dfHx7fSkud3B4KSYmSnQuc3R5bGUucHVzaCgid2lkdGg6ICIrd3IrInB4IiksR2VbIiFjb25kZm10Il0mJmxlKHlyLGN0LENuLEdlWyIhY29uZGZtdCJdLEp0LnN0eWxl''@;'; put 'put ''LEdlKSwwPT1KdC5zdHlsZS5sZW5ndGg/ZGVsZXRlIEp0LnN0eWxlOkp0LnN0eWxlPUp0LnN0eWxlLmpvaW4oIjsiKSx4dC5jc3Mpe3ZhciBWbj1vdC5pbmRleE9mKEp0LnN0eWxlKTstMT09Vm4mJihvdC5wdXNoKEp0LnN0eWxlKSxWbj1vdC5sZW5ndGgtMSksZGVsZXRlIEp0LnN0eWxlLEp0''@;'; put 'put ''LmNsYXNzPSJzanMiKyhidHx8IiIpKyItIitWbn1scj4xJiYoSnQucm93c3Bhbj1scikscW4+MSYmKEp0LmNvbHNwYW49cW4pLHh0LmVkaXRhYmxlP3RyPSc8c3BhbiBjb250ZW50ZWRpdGFibGU9InRydWUiPicrdHIrIjwvc3Bhbj4iOnlyJiYoSnRbImRhdGEtdCJdPXlyJiZ5ci50fHwieiIs''@;'; put 'put ''bnVsbCE9eXIudiYmKEp0WyJkYXRhLXYiXT15ci52KSxudWxsIT15ci56JiYoSnRbImRhdGEteiJdPXlyLnopKSxKdC5pZD0oeHQuaWR8fCJzanMiKSsiLSIrcHIsa3QucHVzaChqcigidGQiLHRyLEp0KSl9fXZhciBaaSx6cj17c3R5bGU6W119OyhaaT1HZVsiIXNoZWV0Rm9ybWF0Il0pJiZa''@;'; put 'put ''aS5yb3cmJihNMShaaS5yb3cpLFppLnJvdy5ocHgmJih6ci5zdHlsZS5wdXNoKFsiaGVpZ2h0IixaaS5yb3cuaHB4KyJweCJdKSx6ci5oZWlnaHQ9TWF0aC5yb3VuZChaaS5yb3cuaHB4KSkpO3ZhciBDaT1HZVsiIXJvd3MiXTtpZihDaSYmQ2lbY3RdKXt2YXIgX2E9Q2lbY3RdO19hLmhweCYm''@;'; put 'put ''KHpyLnN0eWxlLnB1c2goWyJoZWlnaHQiLCtfYS5ocHgrInB4Il0pLHpyLmhlaWdodD1NYXRoLnJvdW5kKF9hLmhweCkpLF9hLmhpZGRlbiYmenIuc3R5bGUucHVzaChbImRpc3BsYXkiLCJub25lIl0pfXZhciBmbz1bXTtyZXR1cm4genIuc3R5bGU9enIuc3R5bGUucmV2ZXJzZSgpLmZpbHRl''@;'; put 'put ''cihmdW5jdGlvbihhYSl7cmV0dXJuIShmby5pbmRleE9mKGFhWzBdKT4tMXx8KGZvLnB1c2goYWFbMF0pLDApKX0pLm1hcChmdW5jdGlvbihhYSl7cmV0dXJuIGFhWzBdKyI6IithYVsxXX0pLDA9PXpyLnN0eWxlLmxlbmd0aD9kZWxldGUgenIuc3R5bGU6enIuc3R5bGU9enIuc3R5bGUuam9p''@;'; put 'put ''bigiOyIpLGpyKCJ0ciIsa3Quam9pbigiIiksenIpfWZ1bmN0aW9uIGxlKEdlLGV0LGN0LHh0LG90LGJ0KXt4dC5mb3JFYWNoKGZ1bmN0aW9uKEZ0KXtpZihGdC5fcmVmfHwoRnQuX3JlZj0ic3RyaW5nIj09dHlwZW9mIEZ0LnJlZj9WbyhGdC5yZWYpOkZ0LnJlZiksIShGdC5fcmVmLnMuYz5j''@;'; put 'put ''dHx8RnQuX3JlZi5lLmM8Y3R8fEZ0Ll9yZWYucy5yPmV0fHxGdC5fcmVmLmUucjxldHx8InNjYWxlIiE9PUZ0LnQpKXtpZigibiIhPUdlLnQpcmV0dXJuO3ZhciBrdDtpZihudWxsPT1GdC5fbWluKXtGdC5fdmFsdWVzPVtdO2Zvcih2YXIgTHQ9RnQuX3JlZi5zLnI7THQ8PUZ0Ll9yZWYuZS5y''@;'; put 'put ''OysrTHQpZm9yKHZhciBKdD1GdC5fcmVmLnMuYztKdDw9RnQuX3JlZi5lLmM7KytKdCl7dmFyIFRuPUFycmF5LmlzQXJyYXkoYnQpPyhidFtMdF18fFtdKVtKdF06YnRbR2koe3I6THQsYzpKdH0pXTtUbiYmIm4iPT1Ubi50JiZGdC5fdmFsdWVzLnB1c2goVG4udil9aWYoRnQuX3ZhbHVlcy5z''@;'; put 'put ''b3J0KGZ1bmN0aW9uKHNyLENuKXtyZXR1cm4gc3ItQ259KSxGdC5fbWluPUZ0Ll92YWx1ZXNbMF0sRnQuX21heD1GdC5fdmFsdWVzLnNsaWNlKC0xKVswXSxGdC5fYmFuZD1GdC5fbWF4LUZ0Ll9taW4sRnQuY21pZCl7c3dpdGNoKEZ0LmNtaWQudCl7Y2FzZSJudW0iOkZ0Ll9taWQ9RnQuY21p''@;'; put 'put ''ZC52O2JyZWFrO2Nhc2UicGVyY2VudCI6RnQuX21pZD1GdC5jbWlkLnYvMTAwKkZ0Ll9iYW5kK0Z0Ll9taW47YnJlYWs7Y2FzZSJwZXJjZW50aWxlIjpGdC5fbWlkPWZ1bmN0aW9uIFJyKFMsTCl7aWYoMD09TClyZXR1cm4gU1swXTtpZigxMDA9PUwpcmV0dXJuIFNbUy5sZW5ndGgtMV07dmFy''@;'; put 'put ''IEc9TC8xMDAqKFMubGVuZ3RoLTEpLFE9Ry1NYXRoLmZsb29yKEcpO3JldHVybiBRKlNbTWF0aC5jZWlsKEcpXSsoMS1RKSpTW01hdGguZmxvb3IoRyldfShGdC5fdmFsdWVzLEZ0LmNtaWQudil9RnQuX2JhbmRoPUZ0Ll9tYXgtRnQuX21pZCxGdC5fYmFuZGw9RnQuX21pZC1GdC5fbWlufX0o''@;'; put 'put ''a3Q9RnQuY21pZD9HZS52Pj1GdC5fbWlkP1hyKEZ0LmNtaWQuY29sb3IsRnQuY21heC5jb2xvciwoR2Uudi1GdC5fbWlkKS9GdC5fYmFuZGgpOlhyKEZ0LmNtaW4uY29sb3IsRnQuY21pZC5jb2xvciwoR2Uudi1GdC5fbWluKS9GdC5fYmFuZGwpOlhyKEZ0LmNtaW4uY29sb3IsRnQuY21heC5j''@;'; put 'put ''b2xvciwoR2Uudi1GdC5fbWluKS9GdC5fYmFuZCkpJiZvdC5wdXNoKCJiYWNrZ3JvdW5kLWNvbG9yOiAjIitrdCl9fSl9ZnVuY3Rpb24gbWUoR2UsZXQpe3ZhciBjdD17c3BhbjpldHx8MSxzdHlsZToiIn0seHQ9W107cmV0dXJuIEdlJiZHZS53cHgmJihjdC53aWR0aD1NYXRoLnJvdW5kKDQq''@;'; put 'put ''R2Uud3B4LzMpLHh0LnB1c2goIndpZHRoOiIrKEdlLndweHx8MCkrInB4IikpLHh0Lmxlbmd0aD4wJiYoY3Quc3R5bGU9eHQuam9pbigiOyIpKSxqcigiY29sIixudWxsLGN0KX1mdW5jdGlvbiBwZShHZSxldCxjdCl7dmFyIHh0PXtib3JkZXI6MCxjZWxscGFkZGluZzowLGNlbGxzcGFjaW5n''@;'; put 'put ''OjAsc3R5bGU6WyJib3JkZXItY29sbGFwc2U6Y29sbGFwc2UiLCJ0YWJsZS1sYXlvdXQ6Zml4ZWQiXS5qb2luKCI7Iil9O2N0JiZjdC5pZCYmKHh0LmlkPWN0LmlkKTt2YXIgb3Q9R2VbIiFjb2xzIl0sYnQ9R2VbIiFzaGVldEZvcm1hdCJdO2lmKEdlJiZvdCl7Zm9yKHZhciBGdD0wLEx0PWV0''@;'; put 'put ''LnMuYztMdDw9ZXQuZS5jOysrTHQpe3ZhciBKdD1vdFtMdF07RnQrPUp0JiZKdC53cHg/SnQud3B4OmJ0JiZidC5jb2wmJmJ0LmNvbC53cHg/YnQuY29sLndweDo1M314dC5zdHlsZSs9Ijt3aWR0aDoiK0Z0KyJweCJ9dmFyIHNyLFRuPVsiPHRhYmxlIitkYyh4dCkrIj4iXTtpZihUbi5wdXNo''@;'; put 'put ''KCI8c3R5bGU+dGQgeyBwYWRkaW5nLXRvcDogMXB4OyBwYWRkaW5nLXJpZ2h0OjFweDsgcGFkZGluZy1sZWZ0OjFweDsgdGV4dC1hbGlnbjpnZW5lcmFsOyB2ZXJ0aWNhbC1hbGlnbjpib3R0b207IGJvcmRlcjoxcHggc29saWQ7IGJvcmRlci1jb2xvcjoiKyhjdCYmY3QuZ3JpZGNvbG9yP2N0''@;'; put 'put ''LmdyaWRjb2xvcjpCdChHZVsiIWdyaWRsaW5lcyJdKT8idHJhbnNwYXJlbnQiOiJibGFjayIpKyI7IHdoaXRlLXNwYWNlOm5vd3JhcDsgdGV4dC1vdmVyZmxvdzplbGxpcHNpc308L3N0eWxlPiIpLFRuLnB1c2goJzxjb2xncm91cCBzcGFuPSInKyhldC5lLmMtZXQucy5jKzEpKyciPicpLG90''@;'; put 'put ''KXtmb3IodmFyIENuPWV0LnMuYztDbjxNYXRoLm1pbihvdC5sZW5ndGgsZXQuZS5jKzEpOysrQ24pIShzcj1vdFtDbl0pJiZidCYmYnQuY29sJiYoc3I9YnQuY29sKSxzcnx8KHNyPXt3cHg6NTN9KSxUbi5wdXNoKG1lKHNyLDEpKTtldC5lLmMtZXQucy5jKzE+b3QubGVuZ3RoJiYoc3I9bnVs''@;'; put 'put ''bCxidCYmYnQuY29sJiYoc3I9YnQuY29sKSxzcnx8KHNyPXt3cHg6NTN9KSxUbi5wdXNoKG1lKHNyLGV0LmUuYy1ldC5zLmMrMS1vdC5sZW5ndGgpKSl9ZWxzZSBzcj1udWxsLGJ0JiZidC5jb2wmJihzcj1idC5jb2wpLHNyfHwoc3I9e3dweDo1M30pLFRuLnB1c2gobWUoc3IsZXQuZS5jLWV0''@;'; put 'put ''LnMuYysxKSk7cmV0dXJuIFRuLnB1c2goIjwvY29sZ3JvdXA+IiksVG4uam9pbigiIil9dmFyIGJlPSc8aHRtbD48aGVhZD48bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPjx0aXRsZT5TaGVldEpTIFRhYmxlIEV4cG9ydDwvdGl0bGU+PC9oZWFkPjxib2R5PicsTmU9IjwvYm9keT48L2h0bWw+Ijty''@;'; put 'put ''ZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gRyhHZSxldCl7cmV0dXJuIGIxKGsoR2UsZXQpLGV0KX0sdG9fc2hlZXQ6ayxfcm93OlEsQkVHSU46YmUsRU5EOk5lLF9wcmVhbWJsZTpwZSxodG1sX3RvX3JzOmZ1bmN0aW9uIEwoR2Upe3ZhciBldD1bXSxjdD17fSx4dD0wO3JldHVybiBHZS5y''@;'; put 'put ''ZXBsYWNlKC88KFwvPykoW15ccz8+IVwvOl0qOnwpKFteXHM/PjpcL10rKVtePl0qPi9nbSxmdW5jdGlvbihvdCxidCxGdCxrdCxMdCl7dmFyIFRuPVhpKHZyKG90KVswXSkucmVwbGFjZSgvWzxcLz5dL2csIiIpLHNyPUdlLnNsaWNlKHh0LEx0KS5yZXBsYWNlKC9ccy9nLCIgIik7c3dpdGNo''@;'; put 'put ''KHNyLmxlbmd0aD4wJiYoZXQucHVzaCh7dDoicyIsdjpzcixzOmN0fSksY3Q9dW4oY3QpKSxUbi50b0xvd2VyQ2FzZSgpKXtjYXNlImIiOiIvIiE9YnQ/Y3QuYm9sZD0hMDpkZWxldGUgY3QuYm9sZDticmVhaztjYXNlImkiOiIvIiE9YnQ/Y3QuaXRhbGljPSEwOmRlbGV0ZSBjdC5pdGFsaWM7''@;'; put 'put ''YnJlYWs7Y2FzZSJ1IjoiLyIhPWJ0P2N0LnVuZGVybGluZT0xOmRlbGV0ZSBjdC51bmRlcmxpbmU7YnJlYWs7Y2FzZSJzIjoiLyIhPWJ0P2N0LnN0cmlrZT0hMDpkZWxldGUgY3Quc3RyaWtlfXJldHVybiB4dD1MdCtvdC5sZW5ndGgsb3R9KSxldH0sZnJvbV9zaGVldDpmdW5jdGlvbiBCZShH''@;'; put 'put ''ZSxldCl7dmFyIGN0PWV0fHx7fSxvdD1udWxsIT1jdC5mb290ZXI/Y3QuZm9vdGVyOk5lLGJ0PVtudWxsIT1jdC5oZWFkZXI/Y3QuaGVhZGVyOmJlLCIiXSxGdD1bXSxrdD0obmV3IERhdGUpLnZhbHVlT2YoKTtHZXx8KEdlPXt9KSxHZVsiIXJlZiJdfHwoR2VbIiFyZWYiXT0iQTE6QTEiKTt2''@;'; put 'put ''YXIgTHQ9Vm8oR2VbIiFyZWYiXSk7aWYoY3QuZGVuc2U9QXJyYXkuaXNBcnJheShHZSksY3Quc2tpcGVuZCl7dmFyIEp0PUx0LmUucjtlOmZvcig7SnQ+PUx0LnMucjstLUp0KWZvcih2YXIgVG49THQuZS5jO1RuPj1MdC5zLmM7LS1UbilpZihudWxsIT0oKGN0LmRlbnNlPyhHZVtKdF18fFtd''@;'; put 'put ''KVtUbl06R2VbR2koe3I6SnQsYzpUbn0pXSl8fHt9KS52KWJyZWFrIGU7THQuZS5yPUp0O3ZhciBzcj1MdC5lLmM7ZTpmb3IoO3NyPj1MdC5zLmM7LS1zcilmb3IodmFyIENuPUx0LmUucjtDbj49THQucy5yOy0tQ24paWYobnVsbCE9KChjdC5kZW5zZT8oR2VbQ25dfHxbXSlbc3JdOkdlW0dp''@;'; put 'put ''KHtyOkNuLGM6c3J9KV0pfHx7fSkudilicmVhayBlO0x0LmUuYz1zcn1idC5wdXNoKHBlKEdlLEx0LGN0KSk7Zm9yKHZhciBscj1MdC5zLnI7bHI8PUx0LmUucjsrK2xyKWJ0LnB1c2goUShHZSxMdCxscixjdCxGdCxrdCkpO3JldHVybiBidC5wdXNoKCI8L3RhYmxlPiIrb3QpLGN0LmNzcyYm''@;'; put 'put ''KGJ0WzFdPSI8c3R5bGU+XG4iK0Z0Lm1hcChmdW5jdGlvbihxbixXbil7cmV0dXJuIi5zanMiK2t0KyItIitXbisiIHsiK3FuKyJ9In0pLmpvaW4oIlxuIikrIjwvc3R5bGU+IiksYnQuam9pbigiIil9fX0oKTtmdW5jdGlvbiBfTyhTLEwsayl7dmFyIEc9e307aWYodHlwZW9mIGdldENvbXB1''@;'; put 'put ''dGVkU3R5bGU+InUiKXJldHVybiBHO3ZhciBRPWdldENvbXB1dGVkU3R5bGUoUyk7aWYoKDcwMD09UVsiZm9udC13ZWlnaHQiXXx8ImJvbGQiPT1RWyJmb250LXdlaWdodCJdKSYmKEcuYm9sZD0hMCksKFFbImZvbnQtc3R5bGUiXXx8IiIpLm1hdGNoKC9pdGFsaWMvKSYmKEcuaXRhbGljPSEw''@;'; put 'put ''KSwoUVsidGV4dC1kZWNvcmF0aW9uIl18fCIiKS5tYXRjaCgvdW5kZXJsaW5lLykmJihHLnVuZGVybGluZT0xKSwoUVsidGV4dC1kZWNvcmF0aW9uIl18fCIiKS5tYXRjaCgvbGluZS10aHJvdWdoLykmJihHLnN0cmlrZT0xKSxwYXJzZUludChRWyJmb250LXNpemUiXSkmJihHLnN6PXBhcnNl''@;'; put 'put ''RmxvYXQoUVsiZm9udC1zaXplIl0pKihRWyJmb250LXNpemUiXS5tYXRjaCgvcHgvKT8zLzQ6MSkpLFFbImZvbnQtZmFtaWx5Il0mJihHLm5hbWU9UVsiZm9udC1mYW1pbHkiXS5zcGxpdCgiLCIpWzBdLnJlcGxhY2UoL1xzKiJccyovZywiIikpLFEuY29sb3Ipe3ZhciBsZT1DMyhRLmNvbG9y''@;'; put 'put ''LnRvTG93ZXJDYXNlKCksITApO2xlPj0wJiYoRy5jb2xvcj17cmdiOmxlfSl9c3dpdGNoKFFbInRleHQtdHJhbnNmb3JtIl0mJihHLnRleHRfdHJhbnNmb3JtPVFbInRleHQtdHJhbnNmb3JtIl0udG9Mb3dlckNhc2UoKSksIm5vbmUiIT0oUVsidGV4dC1zaGFkb3ciXXx8Im5vbmUiKSYmKEcu''@;'; put 'put ''c2hhZG93PSEwKSxRWyJ0ZXh0LWFsaWduIl0pe2Nhc2UiY2VudGVyIjpHLmFsaWdubWVudD17aG9yaXpvbnRhbDoiY2VudGVyIn07YnJlYWs7Y2FzZSJyaWdodCI6Ry5hbGlnbm1lbnQ9e2hvcml6b250YWw6InJpZ2h0In07YnJlYWs7Y2FzZSJsZWZ0IjpHLmFsaWdubWVudD17aG9yaXpvbnRh''@;'; put 'put ''bDoibGVmdCJ9O2JyZWFrO2Nhc2UianVzdGlmeSI6Ry5hbGlnbm1lbnQ9e2hvcml6b250YWw6Imp1c3RpZnkifX1zd2l0Y2goUVsidmVydGljYWwtYWxpZ24iXSl7Y2FzZSJ0b3AiOmNhc2UibWlkZGxlIjpjYXNlImJvdHRvbSI6Ry5hbGlnbm1lbnR8fChHLmFsaWdubWVudD17fSksRy5hbGln''@;'; put 'put ''bm1lbnQudmVydGljYWw9UVsidmVydGljYWwtYWxpZ24iXSwibWlkZGxlIj09Ry5hbGlnbm1lbnQudmVydGljYWwmJihHLmFsaWdubWVudC52ZXJ0aWNhbD0iY2VudGVyIik7YnJlYWs7Y2FzZSJzdWIiOmNhc2Uic3VwZXIiOkcudmFsaWduPVFbInZlcnRpY2FsLWFsaWduIl0sRy5zeiYmKEcu''@;'; put 'put ''c3ovPS44Myl9dmFyIG1lPUwmJmdldENvbXB1dGVkU3R5bGUoTCk7cmV0dXJuIG1lJiZrJiZMJiZbImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSJdLmZvckVhY2goZnVuY3Rpb24ocGUpe3ZhciBiZT1wZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStwZS5zbGljZSgxKSxOZT1tZVsiYm9y''@;'; put 'put ''ZGVyLSIrcGUrIi1zdHlsZSJdO2lmKCgibm9uZSI9PU5lfHwhTmUpJiYoTmU9bWVbImJvcmRlciIrYmUrIlN0eWxlIl0pLCJub25lIiE9TmUmJk5lKXt2YXIgQmU9cGFyc2VJbnQobWVbImJvcmRlci0iK3BlKyItd2lkdGgiXXx8bWVbImJvcmRlciIrYmUrIldpZHRoIl0sMTApLEdlPSJ0aGlu''@;'; put 'put ''IjtpZihCZT4wKXtzd2l0Y2goTmUpe2Nhc2UiZG91YmxlIjpHZT0iZG91YmxlIjticmVhaztjYXNlImRhc2hlZCI6R2U9QmU+PTI/Im1lZGl1bURhc2hlZCI6ImRhc2hlZCI7YnJlYWs7Y2FzZSJkb3R0ZWQiOkdlPUJlPj0yPyJtZWRpdW1EYXNoRG90RG90IjoiZG90dGVkIjticmVhaztjYXNl''@;'; put 'put ''InNvbGlkIjpHZT1CZT49Mz8idGhpY2siOkJlPj0yPyJtZWRpdW0iOiJ0aGluIn1pZihHW3BlXT17c3R5bGU6R2V9LG1lWyJib3JkZXItIitwZSsiLWNvbG9yIl18fG1lWyJib3JkZXIiK2JlKyJDb2xvciJdKXt2YXIgZXQ9QzMoKG1lWyJib3JkZXItIitwZSsiLWNvbG9yIl18fG1lWyJib3Jk''@;'; put 'put ''ZXIiK2JlKyJDb2xvciJdKS50b0xvd2VyQ2FzZSgpLCEwKTtldD49MCYmKEdbcGVdLmNvbG9yPXtyZ2I6ZXR9KX19fX0pLEd9ZnVuY3Rpb24gQ08oUyxMLGspe3ZhciBHPVMuY2hpbGROb2RlcztpZigxPT1TLm5vZGVUeXBlKXN3aXRjaChTLnRhZ05hbWUudG9Mb3dlckNhc2UoKSl7Y2FzZSJw''@;'; put 'put ''IjpMLmxlbmd0aD4wJiZMLnB1c2goe3Q6InQiLHY6IlxuIixzOmt9KTticmVhaztjYXNlInNlbGVjdCI6cmV0dXJuIGZ1bmN0aW9uIGVFKFMsTCxrKXtMLnB1c2goe3Q6InQiLHY6Uy5jaGlsZHJlbltTLnNlbGVjdGVkSW5kZXhdLmlubmVyVGV4dCxzOmt9KX0oUyxMLGspfWlmKEcubGVuZ3Ro''@;'; put 'put ''PjApe3ZhciBRPV9PKFMsbnVsbCwhMSk7ayYmKGsudW5kZXJsaW5lJiYoUS51bmRlcmxpbmU9ay51bmRlcmxpbmUpLGsuc3RyaWtlJiYoUS5zdHJpa2U9ay5zdHJpa2UpKTtmb3IodmFyIGxlPTA7bGU8Ry5sZW5ndGg7KytsZSl7dHJ5e2lmKEdbbGVdLmdldEF0dHJpYnV0ZSgiYXJpYS1oaWRk''@;'; put 'put ''ZW4iKSljb250aW51ZX1jYXRjaHt9Q08oR1tsZV0sTCxRKX1kZWxldGUgUS50ZXh0X3RyYW5zZm9ybX1lbHNlIGlmKDM9PVMubm9kZVR5cGUpe3ZhciBtZT17dDoidCIsdjpTLm5vZGVWYWx1ZS5yZXBsYWNlKC9eW1xuIF0rLywiICIpLnJlcGxhY2UoL1tcbiBdKyQvLCIgIiksczprfTtzd2l0''@;'; put 'put ''Y2goay50ZXh0X3RyYW5zZm9ybSl7Y2FzZSJ1cHBlcmNhc2UiOm1lLnY9bWUudi50b1VwcGVyQ2FzZSgpO2JyZWFrO2Nhc2UibG93ZXJjYXNlIjptZS52PW1lLnYudG9Mb3dlckNhc2UoKX0oTC5sZW5ndGg+MHx8bWUudiYmIiAiIT1tZS52KSYmTC5wdXNoKG1lKX1lbHNlIDE9PVMubm9kZVR5''@;'; put 'put ''cGUmJiJiciI9PT1TLnRhZ05hbWUudG9Mb3dlckNhc2UoKSYmTC5wdXNoKHt0OiJ0Iix2OiJcbiIsczprfSl9ZnVuY3Rpb24gaV8oUyxMLGssRyxRKXt2YXIgbWUsbGU9Uy5pbm5lckhUTUw7aWYodHlwZW9mIGdldENvbXB1dGVkU3R5bGU8InUiKXN3aXRjaChtZT1nZXRDb21wdXRlZFN0eWxl''@;'; put 'put ''KFMpLChtZVsid2hpdGUtc3BhY2UiXXx8IiIpLm1hdGNoKC9wcmUvKSYmKGxlPWxlLnJlcGxhY2UoL1xuL2csIjxici8+IikpLChtZVsidGV4dC10cmFuc2Zvcm0iXXx8IiIpLnRvTG93ZXJDYXNlKCkpe2Nhc2UidXBwZXJjYXNlIjpsZT1sZS50b1VwcGVyQ2FzZSgpO2JyZWFrO2Nhc2UibG93''@;'; put 'put ''ZXJjYXNlIjpsZT1sZS50b0xvd2VyQ2FzZSgpfXZhciBwZT1mdW5jdGlvbiB3TyhTLEwsayxHKXt2YXIgUT17dDoicyIsdjpMfSxsZT0iIjtpZihTKXtrPVMuZ2V0QXR0cmlidXRlKCJkYXRhLXQiKXx8Uy5nZXRBdHRyaWJ1dGUoInQiKTt2YXIgbWU9Uy5nZXRBdHRyaWJ1dGUoImRhdGEtdiIp''@;'; put 'put ''fHxTLmdldEF0dHJpYnV0ZSgidiIpO2lmKG51bGwhPShsZT1TLmdldEF0dHJpYnV0ZSgiZGF0YS16Iil8fFMuZ2V0QXR0cmlidXRlKCJ6IikpJiYoUS56PWxlKSxudWxsIT1rJiZudWxsIT1tZSlyZXR1cm4gUS50PWssUS52PW1lLFF9cmV0dXJuIG51bGwhPUwmJigwPT1MLmxlbmd0aD9RLnQ9''@;'; put 'put ''a3x8InoiOkcucmF3fHwhTC50cmltKCkubGVuZ3RofHwicyI9PWt8fChRPW5pKEwsRykpKSxsZSYmKFEuej1sZSksUX0oUyxucihsZSksayxRKTtpZih0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZTwidSImJihwZS5zPV9PKFMsTCxRLmJvcmRlcnMpLGRlbGV0ZSBwZS5zLnRleHRfdHJhbnNmb3Jt''@;'; put 'put ''LFMuY2hpbGROb2Rlcy5sZW5ndGg+MXx8MT09Uy5jaGlsZE5vZGVzLmxlbmd0aCYmMyE9Uy5jaGlsZE5vZGVzWzBdLm5vZGVUeXBlKSlzd2l0Y2goQ08oUyxwZS5SPVtdLG51bGwpLHBlLlImJnBlLlJbcGUuUi5sZW5ndGgtMV0mJiJcbiI9PXBlLlJbcGUuUi5sZW5ndGgtMV0udiYmcGUuUi5s''@;'; put 'put ''ZW5ndGgtLSwobWVbInRleHQtdHJhbnNmb3JtIl18fCIiKS50b0xvd2VyQ2FzZSgpKXtjYXNlInVwcGVyY2FzZSI6cGUuUi5mb3JFYWNoKGZ1bmN0aW9uKGV0KXtldC52PWV0LnYudG9VcHBlckNhc2UoKX0pO2JyZWFrO2Nhc2UibG93ZXJjYXNlIjpwZS5SLmZvckVhY2goZnVuY3Rpb24oZXQp''@;'; put 'put ''e2V0LnY9ZXQudi50b0xvd2VyQ2FzZSgpfSl9aWYoInMiPT1wZS50KXt2YXIgYmU9cGUudi5tYXRjaCgvXG4vKTshYmUmJnBlLlImJnBlLlIuZm9yRWFjaChmdW5jdGlvbihldCl7InN0cmluZyI9PXR5cGVvZiBldC52JiZldC52Lm1hdGNoKC9cbi8pJiYoYmU9ITApfSksInMiPT1wZS50JiZi''@;'; put 'put ''ZSYmKHBlLnN8fChwZS5zPXt9KSxwZS5zLmFsaWdubWVudHx8KHBlLnMuYWxpZ25tZW50PXt9KSxwZS5zLmFsaWdubWVudC53cmFwVGV4dD0hMCl9aWYoTCl7dmFyIE5lPSIiLEJlPUwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkEiKTtpZihCZSYmQmUubGVuZ3RoKWZvcih2YXIgR2U9MDtHZTxC''@;'; put 'put ''ZS5sZW5ndGgmJighQmVbR2VdLmhhc0F0dHJpYnV0ZSgiaHJlZiIpfHwiIyI9PShOZT1CZVtHZV0uZ2V0QXR0cmlidXRlKCJocmVmIikpLmNoYXJBdCgwKSk7KytHZSk7TmUmJiIjIiE9TmUuY2hhckF0KDApJiYocGUubD17VGFyZ2V0Ok5lfSl9cmV0dXJuIHBlfWZ1bmN0aW9uIHRFKFMsTCxr''@;'; put 'put ''KXt2YXIgUSxHPUwucm93cztpZighRyl7aWYoayYmbnVsbCE9ay5vcmlnaW4pdGhyb3ciVW5zdXBwb3J0ZWQgb3JpZ2luIHdoZW4gIitMLnRhZ05hbWUrIiBpcyBub3QgYSBUQUJMRSI7cmV0dXJuIGZ1bmN0aW9uIFFXKFMsTCxrKXtrPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoa3x8e30p''@;'; put 'put ''KTt2YXIgbGU9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fTtTWyIhbWVyZ2VzIl18fChTWyIhbWVyZ2VzIl09W10pO2Zvcih2YXIgcGUsbWU9TC5jaGlsZHJlbixiZT0wLE5lPTA7TmU8bWUubGVuZ3RoOysrTmUpe3ZhciBldCxCZT1tZVtOZV0sR2U9IiI7dHJ5e3R5cGVvZiBnZXRDb21wdXRl''@;'; put 'put ''ZFN0eWxlPCJ1Ij9ldD1nZXRDb21wdXRlZFN0eWxlOkJlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcmJiJmdW5jdGlvbiI9PXR5cGVvZiBCZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUmJihldD1CZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENv''@;'; put 'put ''bXB1dGVkU3R5bGUpfWNhdGNoe31pZighZXR8fCJub25lIiE9ZXQoQmUpLmRpc3BsYXkpc3dpdGNoKEJlLnRhZ05hbWUudG9VcHBlckNhc2UoKSl7Y2FzZSJUQUJMRSI6YmU9LTEsU1siIXJlZiJdJiYoay5vcmlnaW49LTEpLHRFKFMsQmUsayk7YnJlYWs7Y2FzZSJCUiI6Y2FzZSJIUiI6YmU9''@;'; put 'put ''LTEsU1siIXJlZiJdPygrKyhsZT1WbyhTWyIhcmVmIl0pKS5lLnIsU1siIXJlZiJdPW9vKGxlKSk6U1siIXJlZiJdPSJBMTpBMSI7YnJlYWs7Y2FzZSJESVYiOmNhc2UiUCI6Y2FzZSJIMSI6Y2FzZSJIMiI6Y2FzZSJIMyI6Y2FzZSJINCI6Y2FzZSJINSI6Y2FzZSJINiI6YmU9LTEscGU9aV8o''@;'; put 'put ''QmUsbnVsbCwiIiwwLGspLFNbIiFyZWYiXT8oay5vcmlnaW49LTEsXzEoUyxbW3BlXV0saykpOihTWyIhcmVmIl09IkExIixBcnJheS5pc0FycmF5KFMpPyhTWzBdfHwoU1swXT1bXSksU1swXVswXT1wZSk6Uy5BMT1wZSksU1siIXJvd3MiXXx8KFNbIiFyb3dzIl09W10pLGV0JiYobGU9Vm8o''@;'; put 'put ''U1siIXJlZiJdKSwoR2U9ZXQoQmUpLmhlaWdodCkmJiJhdXRvIiE9R2UmJihTWyIhcm93cyJdW2xlLmUucl09e2hwdDpwYXJzZUludChHZSwxMCl9KSk7YnJlYWs7Y2FzZSJTUEFOIjpjYXNlIkEiOmNhc2UiQiI6Y2FzZSJFTSI6Y2FzZSJJIjpjYXNlIkZPTlQiOmNhc2UiUyI6Y2FzZSJTVUIi''@;'; put 'put ''OmNhc2UiU1VQIjpjYXNlIlUiOnBlPWlfKEJlLG51bGwsIiIsMCxrKSxTWyIhcmVmIl18fChTWyIhcmVmIl09IkExOkExIiksXzEoUyxbW3BlXV0se29yaWdpbjpHaSh7cjooYmU8MD8xOjApKyhsZT1WbyhTWyIhcmVmIl0pKS5lLnIsYzorK2JlfSl9KTticmVhaztjYXNlIkRMIjpjYXNlIlVM''@;'; put 'put ''IjpjYXNlIk9MIjpiZT0tMSxjb25zb2xlLmVycm9yKCJIVE1MIENvbnZlcnNpb24gZG9lcyBub3Qgc3VwcG9ydCBsaXN0IGVsZW1lbnQgIitCZS50YWdOYW1lLnRvVXBwZXJDYXNlKCkpO2JyZWFrO2RlZmF1bHQ6YmU9LTEsY29uc29sZS5lcnJvcigiU2tpcHBpbmcgIitCZS50YWdOYW1lLnRv''@;'; put 'put ''VXBwZXJDYXNlKCkpfX1yZXR1cm4gU30oUyxMLGspfXRyeXt0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZTwidSI/UT1nZXRDb21wdXRlZFN0eWxlOkwub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyYmImZ1bmN0aW9uIj09dHlwZW9mIEwub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21w''@;'; put 'put ''dXRlZFN0eWxlJiYoUT1MLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSl9Y2F0Y2h7fXZhciBsZT1rfHx7fSxtZT0wLHBlPTA7aWYobnVsbCE9bGUub3JpZ2luKWlmKCJudW1iZXIiPT10eXBlb2YgbGUub3JpZ2luKW1lPWxlLm9yaWdpbjtlbHNle3ZhciBiZT0i''@;'; put 'put ''c3RyaW5nIj09dHlwZW9mIGxlLm9yaWdpbj9BbyhsZS5vcmlnaW4pOmxlLm9yaWdpbjttZT1iZS5yLHBlPWJlLmN9dmFyIE5lPU1hdGgubWluKGxlLnNoZWV0Um93c3x8MWU3LEcubGVuZ3RoKSxCZT17czp7cjowLGM6MH0sZTp7cjptZSxjOnBlfX07aWYoU1siIXJlZiJdKXt2YXIgR2U9Vm8o''@;'; put 'put ''U1siIXJlZiJdKTtCZS5zLnI9TWF0aC5taW4oQmUucy5yLEdlLnMuciksQmUucy5jPU1hdGgubWluKEJlLnMuYyxHZS5zLmMpLEJlLmUucj1NYXRoLm1heChCZS5lLnIsR2UuZS5yKSxCZS5lLmM9TWF0aC5tYXgoQmUuZS5jLEdlLmUuYyksLTE9PW1lJiYoQmUuZS5yPW1lPUdlLmUucisxKX12''@;'; put 'put ''YXIgZXQ9W10sY3Q9MCx4dD1TWyIhcm93cyJdfHwoU1siIXJvd3MiXT1bXSksb3Q9MCxidD0wLEZ0PTAsa3Q9MCxMdD0wLEp0PTA7Zm9yKFNbIiFjb2xzIl18fChTWyIhY29scyJdPVtdKTtvdDxHLmxlbmd0aCYmYnQ8TmU7KytvdCl7Zm9yKHZhciBUbj1HW290XSxzcj1Ubi5wYXJlbnRFbGVt''@;'; put 'put ''ZW50OyJUQUJMRSIhPXNyLnRhZ05hbWUudG9VcHBlckNhc2UoKTspc3I9c3IucGFyZW50RWxlbWVudDtpZihzcj09TCl7ZTppZih0eXBlb2YgUTwidSIpe3ZhciBDbj1RKFRuKTtpZihudWxsPT1DbilicmVhayBlO2lmKENuLnN0eWxlfHwoQ24uc3R5bGU9e30pLGxlLmRpc3BsYXkmJiJub25l''@;'; put 'put ''Ij09KENuLmRpc3BsYXl8fENuLnN0eWxlLmRpc3BsYXkpKWNvbnRpbnVlOyJub25lIj09KENuLmRpc3BsYXl8fENuLnN0eWxlLmRpc3BsYXkpJiYoKHh0W2J0XXx8KHh0W2J0XT17fSkpLmhpZGRlbj0hMCl9dmFyIGxyPVRuLmNlbGxzO2ZvcihGdD1rdD0wO0Z0PGxyLmxlbmd0aDsrK0Z0KXt2''@;'; put 'put ''YXIgcW49bHJbRnRdLFduPW51bGw7aWYoISh0eXBlb2YgUTwidSImJihudWxsPT1XbiYmKFduPVEocW4pKSxXbi5zdHlsZXx8KFduLnN0eWxlPXt9KSxsZS5kaXNwbGF5JiZudWxsIT1XbiYmIm5vbmUiPT0oV24uZGlzcGxheXx8V24uc3R5bGUuZGlzcGxheSkpKSl7Zm9yKEp0PStxbi5nZXRB''@;'; put 'put ''dHRyaWJ1dGUoImNvbHNwYW4iKXx8MSxjdD0wO2N0PGV0Lmxlbmd0aDsrK2N0KXt2YXIgcHI9ZXRbY3RdO3ByLnMuYz09a3QrcGUmJnByLnMucjxidCttZSYmYnQrbWU8PXByLmUuciYmKGt0PXByLmUuYysxLXBlLGN0PS0xKX0oKEx0PStxbi5nZXRBdHRyaWJ1dGUoInJvd3NwYW4iKXx8MSk+''@;'; put 'put ''MXx8SnQ+MSkmJmV0LnB1c2goe3M6e3I6YnQrbWUsYzprdCtwZX0sZTp7cjpidCttZSsoTHR8fDEpLTEsYzprdCtwZSsoSnR8fDEpLTF9fSk7dmFyIHlyPXFuLmdldEF0dHJpYnV0ZSgidCIpfHwiIix0cj1xbi5nZXRBdHRyaWJ1dGUoImJnY29sb3IiKTtlOmlmKHR5cGVvZiBRPCJ1Iil7aWYo''@;'; put 'put ''bnVsbD09V24mJihXbj1RKHFuKSksbnVsbD09V24pYnJlYWsgZTtpZihXbi5zdHlsZXx8KFduLnN0eWxlPXt9KSwxPT1KdCYmV24ud2lkdGgmJihTWyIhY29scyJdW2t0K3BlXT1TWyIhY29scyJdW2t0K3BlXXx8e30sV24ud2lkdGgubWF0Y2goL3B4Lyk/U1siIWNvbHMiXVtrdCtwZV0ud3B4''@;'; put 'put ''PU1hdGgubWF4KHBhcnNlSW50KFduLndpZHRoLDEwKSs1LFNbIiFjb2xzIl1ba3QrcGVdLndweHx8MCk6V24ud2lkdGgubWF0Y2goL3B0LykmJihTWyIhY29scyJdW2t0K3BlXS53cHg9TWF0aC5tYXgoNCpwYXJzZUludChXbi53aWR0aCwxMCkvMys1LFNbIiFjb2xzIl1ba3QrcGVdLndweHx8''@;'; put 'put ''MCkpKSxMdDw9MSl7eHRbYnQrbWVdfHwoeHRbYnQrbWVdPXt9KTt2YXIgd2k9V24uaGVpZ2h0Oyh3aT13aS5tYXRjaCgvcHQvKT93MyhwYXJzZUludCh3aSwxMCkpOnBhcnNlSW50KHdpLDEwKSk+KHh0W2J0K21lXS5ocHh8fHczKHh0W2J0K21lXS5ocHQpfHwwKSYmKGRlbGV0ZSB4dFtidCtt''@;'; put 'put ''ZV0uaHB0LHh0W2J0K21lXS5ocHg9d2kpfX12YXIgRmk9cW47aWYocW4uZmlyc3RFbGVtZW50Q2hpbGQmJjE9PXFuLmNoaWxkcmVuLmxlbmd0aCYmInNwYW4iPT1xbi5maXJzdEVsZW1lbnRDaGlsZC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXtmb3IodmFyIHJhPTAsb2E9cW4uY2hpbGROb2Rl''@;'; put 'put ''cyxraT0wO2tpPG9hLmxlbmd0aDsrK2tpKTM9PW9hW2tpXS5ub2RlVHlwZSYmKytyYTswPT1yYSYmKHFuPXFuLmZpcnN0RWxlbWVudENoaWxkKX12YXIga3I9aV8ocW4sRmkseXIsMCxsZSk7aWYoV24pe3ZhciBZbj1RKHFuKTtpZihZbiYmIVluLnN0eWxlJiYoWW4uc3R5bGU9e30pLChZbiYm''@;'; put 'put ''WW5bImJhY2tncm91bmQtY29sb3IiXXx8V25bImJhY2tncm91bmQtY29sb3IiXSkmJihrci5zfHwoa3Iucz17fSksIWtyLnMuZmdDb2xvcikpdHJ5e3ZhciBWcj1ZbiYmWW5bImJhY2tncm91bmQtY29sb3IiXXx8V25bImJhY2tncm91bmQtY29sb3IiXTtWci5tYXRjaCgvcmdiYVsoXVxzKjAu''@;'; put 'put ''KlspXS9pKSYmKFZyPVduWyJiYWNrZ3JvdW5kLWNvbG9yIl0pO3ZhciB3cj1DMyhWci50b0xvd2VyQ2FzZSgpLCEwKTt3cj49MCYmKGtyLnMuZmdDb2xvcj17cmdiOndyfSl9Y2F0Y2h7fXN3aXRjaChXblsidmVydGljYWwtYWxpZ24iXSl7Y2FzZSJtaWRkbGUiOmNhc2UiYmFzZWxpbmUiOmty''@;'; put 'put ''LnN8fChrci5zPXt9KSxrci5zLmFsaWdubWVudHx8KGtyLnMuYWxpZ25tZW50PXt9KSxrci5zLmFsaWdubWVudC52ZXJ0aWNhbD0iY2VudGVyIn19aWYodHImJihrci5zfHwoa3Iucz17fSksIWtyLnMuZmdDb2xvcikpdHJ5e3ZhciBWbj1DMyh0ci50b0xvd2VyQ2FzZSgpLCEwKTtWbj49MCYm''@;'; put 'put ''KGtyLnMuZmdDb2xvcj17cmdiOlZufSl9Y2F0Y2h7fWlmKGxlLmRlbnNlPyhTW2J0K21lXXx8KFNbYnQrbWVdPVtdKSxTW2J0K21lXVtrdCtwZV09a3IpOlNbR2koe2M6a3QrcGUscjpidCttZX0pXT1rcixMdD4xfHxKdD4xKWZvcih2YXIgenI9YnQ7enI8YnQrTHQ7Kyt6cilmb3IodmFyIFpp''@;'; put 'put ''PWt0O1ppPGt0K0p0OysrWmkpYnQ9PXpyJiZrdD09Wml8fChsZS5kZW5zZT8oU1t6cittZV18fChTW3pyK21lXT1bXSksU1t6cittZV1bWmkrcGVdPXt0OiJ6IixzOnVuKGtyLnN8fHt9KX0pOlNbR2koe2M6WmkrcGUscjp6cittZX0pXT17dDoieiIsczp1bihrci5zfHx7fSl9KTtCZS5lLmM8''@;'; put 'put ''a3QrcGUmJihCZS5lLmM9a3QrcGUpLGt0Kz1KdH19KytidH19aWYoZXQubGVuZ3RoJiYoU1siIW1lcmdlcyJdPShTWyIhbWVyZ2VzIl18fFtdKS5jb25jYXQoZXQpKSxCZS5lLnI9TWF0aC5tYXgoQmUuZS5yLGJ0LTErbWUpLFNbIiFyZWYiXT1vbyhCZSksYnQ+PU5lJiYoU1siIWZ1bGxyZWYi''@;'; put 'put ''XT1vbygoQmUuZS5yPUcubGVuZ3RoLW90K2J0LTErbWUsQmUpKSksbGUuYm9yZGVycylmb3IoYnQ9QmUucy5yO2J0PD1CZS5lLnI7KytidClmb3Ioa3Q9QmUucy5jO2t0PD1CZS5lLmM7KytrdClpZighbGUuZGVuc2Upe3ZhciBDaT1TW0dpKHtyOmJ0LGM6a3R9KV07aWYoIUNpfHwhQ2kucylj''@;'; put 'put ''b250aW51ZTtpZihidD4wKXt2YXIgX2E9U1tHaSh7cjpidC0xLGM6a3R9KV07X2EmJl9hLnMmJl9hLnMuYm90dG9tJiZkZWxldGUgQ2kucy50b3B9aWYoa3Q+MCl7dmFyIGZvPVNbR2koe3I6YnQsYzprdC0xfSldO2ZvJiZmby5zJiZmby5zLmJvdHRvbSYmZGVsZXRlIENpLnMubGVmdH19cmV0''@;'; put 'put ''dXJuIFN9ZnVuY3Rpb24gU08oUyxMKXtyZXR1cm4gdEUoKEx8fHt9KS5kZW5zZT9bXTp7fSxTLEwpfXZhciBuRT1mdW5jdGlvbigpe3ZhciBTPWZ1bmN0aW9uKEcsUSxsZSl7dmFyIG1lPUcucmVwbGFjZSgvW1x0XHJcbl0vZywiICIpLnRyaW0oKS5yZXBsYWNlKC8gKy9nLCIgIikucmVwbGFj''@;'; put 'put ''ZSgvPHRleHQ6c1wvPi9nLCIgIikucmVwbGFjZSgvPHRleHQ6cyB0ZXh0OmM9IihcZCspIlwvPi9nLGZ1bmN0aW9uKEJlLEdlKXtyZXR1cm4gQXJyYXkocGFyc2VJbnQoR2UsMTApKzEpLmpvaW4oIiAiKX0pLnJlcGxhY2UoLzx0ZXh0OnRhYltePl0qXC8+L2csIlx0IikucmVwbGFjZSgvPHRl''@;'; put 'put ''eHQ6bGluZS1icmVha1wvPi9nLCJcbiIpLHBlPWVpKG1lLnJlcGxhY2UoLzxbXj5dKj4vZywiIikpLGJlPVtdLE5lPTA7cmV0dXJuIG1lLnJlcGxhY2UoLyg8dGV4dDpzcGFuLio/PikoLio/KTxbXC9ddGV4dDpzcGFuPi9nLGZ1bmN0aW9uKEJlLEdlLGV0LGN0KXtjdCE9TmUmJmJlLnB1c2go''@;'; put 'put ''e3Q6InMiLHY6ZWkobWUuc2xpY2UoTmUsY3QpKX0pO3ZhciB4dD17dDoicyIsdjplaShldCl9LG90PXZyKEdlKVsic3R5bGUtbmFtZSJdO3JldHVybiBvdCYmbGVbb3RdJiYoeHQucz11bihsZVtvdF0pKSxiZS5wdXNoKHh0KSxOZT1jdCtCZS5sZW5ndGgsIiJ9KSxOZTxtZS5sZW5ndGgmJmJl''@;'; put 'put ''LnB1c2goe3Q6InMiLHY6ZWkobWUuc2xpY2UoTmUpKX0pLFtwZSxiZV19LEw9e2RheTpbImQiLCJkZCJdLG1vbnRoOlsibSIsIm1tIl0seWVhcjpbInkiLCJ5eSJdLGhvdXJzOlsiaCIsImhoIl0sbWludXRlczpbIm0iLCJtbSJdLHNlY29uZHM6WyJzIiwic3MiXSwiYW0tcG0iOlsiQS9QIiwi''@;'; put 'put ''QU0vUE0iXSwiZGF5LW9mLXdlZWsiOlsiZGRkIiwiZGRkZCJdLGVyYTpbImUiLCJlZSJdLHF1YXJ0ZXI6WyJcXFFtIiwnbVxcInRoIHF1YXJ0ZXIiJ119LGs9ZnVuY3Rpb24oRyxRKXt2YXIgbGU9dnIoRy5zbGljZSgwLEcuaW5kZXhPZigiPiIpKSksbWU9Ry5zbGljZShHLmluZGV4T2YoIj4i''@;'; put 'put ''KSsxKSxwZT17bmFtZTpsZS5uYW1lLGZhbWlseTpsZS5mYW1pbHl9O1tbInBhcmVudCIsInBhcmVudC1zdHlsZS1uYW1lIl0sWyJkYXRhbmFtZSIsImRhdGEtc3R5bGUtbmFtZSJdLFsibXBuYW1lIiwibWFzdGVyLXBhZ2UtbmFtZSJdXS5mb3JFYWNoKGZ1bmN0aW9uKE5lKXtsZVtOZVsxXV0m''@;'; put 'put ''JihwZVtOZVswXV09bGVbTmVbMV1dKX0pO3ZhciBiZT17fTttZS5yZXBsYWNlKHRuLGZ1bmN0aW9uKE5lKXt2YXIgQmU9dnIoTmUpO2lmKCI8c3R5bGU6dGV4dC1wcm9wZXJ0aWVzIj09PUJlWzBdKXtpZihCZVsiZm9udC13ZWlnaHQiXSYmKGJlLmJvbGQ9KygiYm9sZCI9PUJlWyJmb250LXdl''@;'; put 'put ''aWdodCJdfHwiNzAwIj09QmVbImZvbnQtd2VpZ2h0Il0pKSwoIml0YWxpYyI9PUJlWyJmb250LXN0eWxlIl18fCJvYmxpcXVlIj09QmVbImZvbnQtc3R5bGUiXSkmJihiZS5pdGFsaWM9MSksIm5vbmUiIT0oQmVbInRleHQtdW5kZXJsaW5lLXN0eWxlIl18fCJub25lIik/YmUudW5kZXJsaW5l''@;'; put 'put ''PSJkb3VibGUiPT1CZVsidGV4dC11bmRlcmxpbmUtdHlwZSJdPzI6MTooQmVbInRleHQtdW5kZXJsaW5lLXN0eWxlIl18fCJub25lIj09QmVbInRleHQtdW5kZXJsaW5lLXR5cGUiXSkmJihiZS51bmRlcmxpbmU9MCksKEJlWyJmb250LXNpemUiXXx8IiIpLm1hdGNoKC9wdCQvKSYmKGJlLnN6''@;'; put 'put ''PStCZVsiZm9udC1zaXplIl0ucmVwbGFjZSgicHQiLCIiKSksIm5vbmUiIT0oQmVbInRleHQtbGluZS10aHJvdWdoLXN0eWxlIl18fCJub25lIikmJihiZS5zdHJpa2U9MSksQmVbImZvbnQtbmFtZSJdJiYoYmUubmFtZT1CZVsiZm9udC1uYW1lIl0pLEJlLmNvbG9yKXt2YXIgR2U9QzMoQmUu''@;'; put 'put ''Y29sb3IsITApO0dlPj0wJiYoYmUuY29sb3I9R2UpfXN3aXRjaChCZVsidGV4dC1wb3NpdGlvbiJdKXtjYXNlInN1cGVyIjpiZS52YWxpZ249InN1cGVyIjticmVhaztjYXNlInN1YiI6YmUudmFsaWduPSJzdWIiO2JyZWFrO2RlZmF1bHQ6KEJlWyJ0ZXh0LXBvc2l0aW9uIl18fCIiKS5tYXRj''@;'; put 'put ''aCgvJS8pJiYoYmUudmFsaWduPSItIj09QmVbInRleHQtcG9zaXRpb24iXS5jaGFyQXQoMCk/InN1YiI6InN1cGVyIil9Im5vbmUiIT0oQmVbInRleHQtc2hhZG93Il18fCJub25lIikmJihiZS5zaGFkb3c9MSl9cmV0dXJuIiJ9KSxRW2xlLm5hbWVdPWJlfTtyZXR1cm4gZnVuY3Rpb24oUSxs''@;'; put 'put ''ZSl7dmFyIE5lLEJlLHh0LG90LEx0LEp0LG1lPWxlfHx7fSxwZT1HeChRKSxiZT1bXSxHZT17bmFtZToiIn0sZXQ9IiIsY3Q9MCxidD17fSxGdD1bXSxrdD1tZS5kZW5zZT9bXTp7fSxUbj17dmFsdWU6IiJ9LHNyPSIiLENuPTAscW49W10sV249LTEscHI9LTEseXI9e3M6e3I6MWU2LGM6MWU3''@;'; put 'put ''fSxlOntyOjAsYzowfX0sdHI9MCx3aT17fSxGaT1bXSxyYT17fSxvYT0wLGtpPTAsa3I9W10sWW49MSxWcj0xLHdyPVtdLFZuPXtOYW1lczpbXX0senI9e30sWmk9WyIiLCIiXSxDaT1bXSxfYT17fSxmbz17fSxhYT0wLHpvPSIiLGphPTAsd289ITEsYm89ITEsVWk9MDtmb3IoUWIubGFzdElu''@;'; put 'put ''ZGV4PTAscGU9cGUucmVwbGFjZSgvPCEtLShbXHNcU10qPyktLT4vZ20sIiIpLnJlcGxhY2UoLzwhRE9DVFlQRVteXFtdKlxbW15cXV0qXF0+L2dtLCIiKTtMdD1RYi5leGVjKHBlKTspc3dpdGNoKEx0WzNdPUx0WzNdLnJlcGxhY2UoL18uKiQvLCIiKSl7Y2FzZSJ0YWJsZSI6Y2FzZSJcdTVk''@;'; put 'put ''ZTVcdTRmNWNcdTg4NjgiOiIvIj09PUx0WzFdPyhrdFsiIXJlZiJdPXlyLmUuYz49eXIucy5jJiZ5ci5lLnI+PXlyLnMucj9vbyh5cik6IkExOkExIixtZS5zaGVldFJvd3M+MCYmbWUuc2hlZXRSb3dzPD15ci5lLnImJihrdFsiIWZ1bGxyZWYiXT1rdFsiIXJlZiJdLHlyLmUucj1tZS5zaGVl''@;'; put 'put ''dFJvd3MtMSxrdFsiIXJlZiJdPW9vKHlyKSksRmkubGVuZ3RoJiYoa3RbIiFtZXJnZXMiXT1GaSksa3IubGVuZ3RoJiYoa3RbIiFyb3dzIl09a3IpLHh0Lm5hbWU9eHQuXHU1NDBkXHU3OWYwfHx4dC5uYW1lLHR5cGVvZiBKU09OPCJ1IiYmSlNPTi5zdHJpbmdpZnkoeHQpLEZ0LnB1c2goeHQu''@;'; put 'put ''bmFtZSksYnRbeHQubmFtZV09a3QsYm89ITEpOiIvIiE9PUx0WzBdLmNoYXJBdChMdFswXS5sZW5ndGgtMikmJih4dD12cihMdFswXSwhMSksV249cHI9LTEseXIucy5yPXlyLnMuYz0xZTcseXIuZS5yPXlyLmUuYz0wLGt0PW1lLmRlbnNlP1tdOnt9LEZpPVtdLGtyPVtdLGJvPSEwKTticmVh''@;'; put 'put ''aztjYXNlInRhYmxlLXJvdy1ncm91cCI6Ii8iPT09THRbMV0/LS10cjorK3RyO2JyZWFrO2Nhc2UidGFibGUtcm93IjpjYXNlIlx1ODg0YyI6aWYoIi8iPT09THRbMV0pe1duKz1ZbixZbj0xO2JyZWFrfWlmKChvdD12cihMdFswXSwhMSkpLlx1ODg0Y1x1NTNmNz9Xbj1vdC5cdTg4NGNcdTUz''@;'; put 'put ''ZjctMTotMT09V24mJihXbj0wKSwoWW49K290WyJudW1iZXItcm93cy1yZXBlYXRlZCJdfHwxKTwxMClmb3IoVWk9MDtVaTxZbjsrK1VpKXRyPjAmJihrcltXbitVaV09e2xldmVsOnRyfSk7cHI9LTE7YnJlYWs7Y2FzZSJjb3ZlcmVkLXRhYmxlLWNlbGwiOiIvIiE9PUx0WzFdJiYrK3ByLG1l''@;'; put 'put ''LnNoZWV0U3R1YnMmJihtZS5kZW5zZT8oa3RbV25dfHwoa3RbV25dPVtdKSxrdFtXbl1bcHJdPXt0OiJ6In0pOmt0W0dpKHtyOlduLGM6cHJ9KV09e3Q6InoifSksc3I9IiIscW49W107YnJlYWs7Y2FzZSJ0YWJsZS1jZWxsIjpjYXNlIlx1NjU3MFx1NjM2ZSI6aWYoIi8iPT09THRbMF0uY2hh''@;'; put 'put ''ckF0KEx0WzBdLmxlbmd0aC0yKSkrK3ByLFRuPXZyKEx0WzBdLCExKSxWcj1wYXJzZUludChUblsibnVtYmVyLWNvbHVtbnMtcmVwZWF0ZWQiXXx8IjEiLDEwKSxKdD17dDoieiIsdjpudWxsfSxUbi5mb3JtdWxhJiYwIT1tZS5jZWxsRm9ybXVsYSYmKEp0LmY9b0woZWkoVG4uZm9ybXVsYSkp''@;'; put 'put ''KSwic3RyaW5nIj09KFRuLlx1NjU3MFx1NjM2ZVx1N2M3Ylx1NTc4Ynx8VG5bInZhbHVlLXR5cGUiXSkmJihKdC50PSJzIixKdC52PWVpKFRuWyJzdHJpbmctdmFsdWUiXXx8IiIpLG1lLmRlbnNlPyhrdFtXbl18fChrdFtXbl09W10pLGt0W1duXVtwcl09SnQpOmt0W0dpKHtyOlduLGM6cHJ9''@;'; put 'put ''KV09SnQpLHByKz1Wci0xO2Vsc2UgaWYoIi8iIT09THRbMV0pe1ZyPTE7dmFyIGpsPVluP1duK1luLTE6V247aWYoKytwcj55ci5lLmMmJih5ci5lLmM9cHIpLHByPHlyLnMuYyYmKHlyLnMuYz1wciksV248eXIucy5yJiYoeXIucy5yPVduKSxqbD55ci5lLnImJih5ci5lLnI9amwpLENpPVtd''@;'; put 'put ''LF9hPXt9LEp0PXt0OihUbj12cihMdFswXSwhMSkpLlx1NjU3MFx1NjM2ZVx1N2M3Ylx1NTc4Ynx8VG5bInZhbHVlLXR5cGUiXSx2Om51bGx9LG1lLmNlbGxGb3JtdWxhKWlmKFRuLmZvcm11bGEmJihUbi5mb3JtdWxhPWVpKFRuLmZvcm11bGEpKSxUblsibnVtYmVyLW1hdHJpeC1jb2x1bW5z''@;'; put 'put ''LXNwYW5uZWQiXSYmVG5bIm51bWJlci1tYXRyaXgtcm93cy1zcGFubmVkIl0mJihvYT1wYXJzZUludChUblsibnVtYmVyLW1hdHJpeC1yb3dzLXNwYW5uZWQiXSwxMCl8fDAsa2k9cGFyc2VJbnQoVG5bIm51bWJlci1tYXRyaXgtY29sdW1ucy1zcGFubmVkIl0sMTApfHwwLEp0LkY9b28ocmE9''@;'; put 'put ''e3M6e3I6V24sYzpwcn0sZTp7cjpXbitvYS0xLGM6cHIra2ktMX19KSx3ci5wdXNoKFtyYSxKdC5GXSkpLFRuLmZvcm11bGEpSnQuZj1vTChUbi5mb3JtdWxhKTtlbHNlIGZvcihVaT0wO1VpPHdyLmxlbmd0aDsrK1VpKVduPj13cltVaV1bMF0ucy5yJiZXbjw9d3JbVWldWzBdLmUuciYmcHI+''@;'; put 'put ''PXdyW1VpXVswXS5zLmMmJnByPD13cltVaV1bMF0uZS5jJiYoSnQuRj13cltVaV1bMV0pO3N3aXRjaCgoVG5bIm51bWJlci1jb2x1bW5zLXNwYW5uZWQiXXx8VG5bIm51bWJlci1yb3dzLXNwYW5uZWQiXSkmJihvYT1wYXJzZUludChUblsibnVtYmVyLXJvd3Mtc3Bhbm5lZCJdLDEwKXx8MCxr''@;'; put 'put ''aT1wYXJzZUludChUblsibnVtYmVyLWNvbHVtbnMtc3Bhbm5lZCJdLDEwKXx8MCxGaS5wdXNoKHJhPXtzOntyOlduLGM6cHJ9LGU6e3I6V24rb2EtMSxjOnByK2tpLTF9fSkpLFRuWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdJiYoVnI9cGFyc2VJbnQoVG5bIm51bWJlci1jb2x1bW5zLXJl''@;'; put 'put ''cGVhdGVkIl0sMTApKSxKdC50KXtjYXNlImJvb2xlYW4iOkp0LnQ9ImIiLEp0LnY9RnIoVG5bImJvb2xlYW4tdmFsdWUiXSk7YnJlYWs7Y2FzZSJmbG9hdCI6Y2FzZSJwZXJjZW50YWdlIjpjYXNlImN1cnJlbmN5IjpKdC50PSJuIixKdC52PXBhcnNlRmxvYXQoVG4udmFsdWUpO2JyZWFrO2Nh''@;'; put 'put ''c2UiZGF0ZSI6SnQudD0iZCIsSnQudj1JZShUblsiZGF0ZS12YWx1ZSJdKSxtZS5jZWxsRGF0ZXN8fChKdC50PSJuIixKdC52PVFlKEp0LnYpKSxKdC56PSJtL2QveXkiO2JyZWFrO2Nhc2UidGltZSI6SnQudD0ibiIsSnQudj11dChUblsidGltZS12YWx1ZSJdKS84NjQwMCxtZS5jZWxsRGF0''@;'; put 'put ''ZXMmJihKdC50PSJkIixKdC52PXNuKEp0LnYpKSxKdC56PSJISDpNTTpTUyI7YnJlYWs7Y2FzZSJudW1iZXIiOkp0LnQ9Im4iLEp0LnY9cGFyc2VGbG9hdChUbi5cdTY1NzBcdTYzNmVcdTY1NzBcdTUwM2MpO2JyZWFrO2RlZmF1bHQ6aWYoInN0cmluZyIhPT1KdC50JiYidGV4dCIhPT1KdC50''@;'; put 'put ''JiZKdC50KXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdmFsdWUgdHlwZSAiK0p0LnQpO0p0LnQ9InMiLG51bGwhPVRuWyJzdHJpbmctdmFsdWUiXSYmKHNyPWVpKFRuWyJzdHJpbmctdmFsdWUiXSkscW49W10pfX1lbHNle2lmKHdvPSExLCJzIj09PUp0LnQmJihKdC52PXNyfHwiIixx''@;'; put 'put ''bi5sZW5ndGgmJihKdC5SPXFuKSx3bz0wPT1DbiksenIuVGFyZ2V0JiYoSnQubD16ciksQ2kubGVuZ3RoPjAmJihKdC5jPUNpLENpPVtdKSxzciYmITEhPT1tZS5jZWxsVGV4dCYmKEp0Lnc9c3IpLHdvJiYoSnQudD0ieiIsZGVsZXRlIEp0LnYpLG1lLmNlbGxIVE1MJiYoSnQuaD1KdC5SP1JJ''@;'; put 'put ''KEp0LlIpOmJhKCIiK0p0LnYpKSwoIXdvfHxtZS5zaGVldFN0dWJzKSYmIShtZS5zaGVldFJvd3MmJm1lLnNoZWV0Um93czw9V24pKWZvcih2YXIgQm49MDtCbjxZbjsrK0JuKXtpZihWcj1wYXJzZUludChUblsibnVtYmVyLWNvbHVtbnMtcmVwZWF0ZWQiXXx8IjEiLDEwKSxtZS5kZW5zZSlm''@;'; put 'put ''b3Ioa3RbV24rQm5dfHwoa3RbV24rQm5dPVtdKSxrdFtXbitCbl1bcHJdPTA9PUJuP0p0OnVuKEp0KTstLVZyPjA7KWt0W1duK0JuXVtwcitWcl09dW4oSnQpO2Vsc2UgZm9yKGt0W0dpKHtyOlduK0JuLGM6cHJ9KV09SnQ7LS1Wcj4wOylrdFtHaSh7cjpXbitCbixjOnByK1ZyfSldPXVuKEp0''@;'; put 'put ''KTt5ci5lLmM8PXByJiYoeXIuZS5jPXByKX1wcis9KFZyPXBhcnNlSW50KFRuWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdfHwiMSIsMTApKS0xLFZyPTAsSnQ9e30sc3I9IiIscW49W119enI9e307YnJlYWs7Y2FzZSJkb2N1bWVudCI6Y2FzZSJkb2N1bWVudC1jb250ZW50IjpjYXNlIlx1''@;'; put 'put ''NzUzNVx1NWI1MFx1ODg2OFx1NjgzY1x1NjU4N1x1Njg2MyI6Y2FzZSJzcHJlYWRzaGVldCI6Y2FzZSJcdTRlM2JcdTRmNTMiOmNhc2Uic2NyaXB0cyI6Y2FzZSJzdHlsZXMiOmNhc2UiZm9udC1mYWNlLWRlY2xzIjpjYXNlIm1hc3Rlci1zdHlsZXMiOmlmKCIvIj09PUx0WzFdKXtpZigoTmU9''@;'; put 'put ''YmUucG9wKCkpWzBdIT09THRbM10pdGhyb3ciQmFkIHN0YXRlOiAiK05lfWVsc2UiLyIhPT1MdFswXS5jaGFyQXQoTHRbMF0ubGVuZ3RoLTIpJiZiZS5wdXNoKFtMdFszXSwhMF0pO2JyZWFrO2Nhc2UiYW5ub3RhdGlvbiI6aWYoIi8iPT09THRbMV0pe2lmKChOZT1iZS5wb3AoKSlbMF0hPT1M''@;'; put 'put ''dFszXSl0aHJvdyJCYWQgc3RhdGU6ICIrTmU7X2EudD1zcixxbi5sZW5ndGgmJihfYS5SPXFuKSxfYS5hPXpvLENpLnB1c2goX2EpfWVsc2UiLyIhPT1MdFswXS5jaGFyQXQoTHRbMF0ubGVuZ3RoLTIpJiZiZS5wdXNoKFtMdFszXSwhMV0pO3pvPSIiLGphPTAsc3I9IiIsQ249MCxxbj1bXTti''@;'; put 'put ''cmVhaztjYXNlImNyZWF0b3IiOiIvIj09PUx0WzFdP3pvPXBlLnNsaWNlKGphLEx0LmluZGV4KTpqYT1MdC5pbmRleCtMdFswXS5sZW5ndGg7YnJlYWs7Y2FzZSJtZXRhIjpjYXNlIlx1NTE0M1x1NjU3MFx1NjM2ZSI6Y2FzZSJzZXR0aW5ncyI6Y2FzZSJjb25maWctaXRlbS1zZXQiOmNhc2Ui''@;'; put 'put ''Y29uZmlnLWl0ZW0tbWFwLWluZGV4ZWQiOmNhc2UiY29uZmlnLWl0ZW0tbWFwLWVudHJ5IjpjYXNlImNvbmZpZy1pdGVtLW1hcC1uYW1lZCI6Y2FzZSJzaGFwZXMiOmNhc2UiZnJhbWUiOmNhc2UidGV4dC1ib3giOmNhc2UiaW1hZ2UiOmNhc2UiZGF0YS1waWxvdC10YWJsZXMiOmNhc2UibGlz''@;'; put 'put ''dC1zdHlsZSI6Y2FzZSJmb3JtIjpjYXNlImRkZS1saW5rcyI6Y2FzZSJldmVudC1saXN0ZW5lcnMiOmNhc2UiY2hhcnQiOmlmKCIvIj09PUx0WzFdKXtpZigoTmU9YmUucG9wKCkpWzBdIT09THRbM10pdGhyb3ciQmFkIHN0YXRlOiAiK05lfWVsc2UiLyIhPT1MdFswXS5jaGFyQXQoTHRbMF0u''@;'; put 'put ''bGVuZ3RoLTIpJiZiZS5wdXNoKFtMdFszXSwhMV0pO3NyPSIiLENuPTAscW49W107YnJlYWs7Y2FzZSJzY2llbnRpZmljLW51bWJlciI6Y2FzZSJjdXJyZW5jeS1zeW1ib2wiOmNhc2UiY3VycmVuY3ktc3R5bGUiOmNhc2Uic2NyaXB0IjpjYXNlImxpYnJhcmllcyI6Y2FzZSJhdXRvbWF0aWMt''@;'; put 'put ''c3R5bGVzIjpjYXNlImRlZmF1bHQtc3R5bGUiOmNhc2UicGFnZS1sYXlvdXQiOmNhc2UibWFwIjpjYXNlImZvbnQtZmFjZSI6Y2FzZSJwYXJhZ3JhcGgtcHJvcGVydGllcyI6Y2FzZSJ0YWJsZS1wcm9wZXJ0aWVzIjpjYXNlInRhYmxlLWNvbHVtbi1wcm9wZXJ0aWVzIjpjYXNlInRhYmxlLXJv''@;'; put 'put ''dy1wcm9wZXJ0aWVzIjpjYXNlInRhYmxlLWNlbGwtcHJvcGVydGllcyI6Y2FzZSJmcmFjdGlvbiI6Y2FzZSJib29sZWFuLXN0eWxlIjpjYXNlImJvb2xlYW4iOmNhc2UidGV4dC1zdHlsZSI6Y2FzZSJ0ZXh0LWNvbnRlbnQiOmNhc2UidGV4dC1wcm9wZXJ0aWVzIjpjYXNlImVtYmVkZGVkLXRl''@;'; put 'put ''eHQiOmNhc2UiYm9keSI6Y2FzZSJcdTc1MzVcdTViNTBcdTg4NjhcdTY4M2MiOmNhc2UiZm9ybXMiOmNhc2UidGFibGUtY29sdW1uIjpjYXNlInRhYmxlLWhlYWRlci1yb3dzIjpjYXNlInRhYmxlLXJvd3MiOmNhc2UidGFibGUtY29sdW1uLWdyb3VwIjpjYXNlInRhYmxlLWhlYWRlci1jb2x1''@;'; put 'put ''bW5zIjpjYXNlInRhYmxlLWNvbHVtbnMiOmNhc2UibnVsbC1kYXRlIjpjYXNlImdyYXBoaWMtcHJvcGVydGllcyI6Y2FzZSJjYWxjdWxhdGlvbi1zZXR0aW5ncyI6Y2FzZSJuYW1lZC1leHByZXNzaW9ucyI6Y2FzZSJsYWJlbC1yYW5nZSI6Y2FzZSJsYWJlbC1yYW5nZXMiOmNhc2UibmFtZWQt''@;'; put 'put ''ZXhwcmVzc2lvbiI6Y2FzZSJzb3J0IjpjYXNlInNvcnQtYnkiOmNhc2Uic29ydC1ncm91cHMiOmNhc2UidGFiIjpjYXNlImxpbmUtYnJlYWsiOmNhc2Uic3BhbiI6Y2FzZSJzIjpjYXNlImRhdGUiOmNhc2Uib2JqZWN0IjpjYXNlInRpdGxlIjpjYXNlIlx1NjgwN1x1OTg5OCI6Y2FzZSJkZXNj''@;'; put 'put ''IjpjYXNlImJpbmFyeS1kYXRhIjpjYXNlInRhYmxlLXNvdXJjZSI6Y2FzZSJzY2VuYXJpbyI6Y2FzZSJpdGVyYXRpb24iOmNhc2UiY29udGVudC12YWxpZGF0aW9ucyI6Y2FzZSJjb250ZW50LXZhbGlkYXRpb24iOmNhc2UiaGVscC1tZXNzYWdlIjpjYXNlImVycm9yLW1lc3NhZ2UiOmNhc2Ui''@;'; put 'put ''ZGF0YWJhc2UtcmFuZ2VzIjpjYXNlImZpbHRlciI6Y2FzZSJmaWx0ZXItYW5kIjpjYXNlImZpbHRlci1vciI6Y2FzZSJmaWx0ZXItY29uZGl0aW9uIjpjYXNlImxpc3QtbGV2ZWwtc3R5bGUtYnVsbGV0IjpjYXNlImxpc3QtbGV2ZWwtc3R5bGUtbnVtYmVyIjpjYXNlImxpc3QtbGV2ZWwtcHJv''@;'; put 'put ''cGVydGllcyI6Y2FzZSJzZW5kZXItZmlyc3RuYW1lIjpjYXNlInNlbmRlci1sYXN0bmFtZSI6Y2FzZSJzZW5kZXItaW5pdGlhbHMiOmNhc2Uic2VuZGVyLXRpdGxlIjpjYXNlInNlbmRlci1wb3NpdGlvbiI6Y2FzZSJzZW5kZXItZW1haWwiOmNhc2Uic2VuZGVyLXBob25lLXByaXZhdGUiOmNh''@;'; put 'put ''c2Uic2VuZGVyLWZheCI6Y2FzZSJzZW5kZXItY29tcGFueSI6Y2FzZSJzZW5kZXItcGhvbmUtd29yayI6Y2FzZSJzZW5kZXItc3RyZWV0IjpjYXNlInNlbmRlci1jaXR5IjpjYXNlInNlbmRlci1wb3N0YWwtY29kZSI6Y2FzZSJzZW5kZXItY291bnRyeSI6Y2FzZSJzZW5kZXItc3RhdGUtb3It''@;'; put 'put ''cHJvdmluY2UiOmNhc2UiYXV0aG9yLW5hbWUiOmNhc2UiYXV0aG9yLWluaXRpYWxzIjpjYXNlImNoYXB0ZXIiOmNhc2UiZmlsZS1uYW1lIjpjYXNlInRlbXBsYXRlLW5hbWUiOmNhc2Uic2hlZXQtbmFtZSI6Y2FzZSJldmVudC1saXN0ZW5lciI6Y2FzZSJpbml0aWFsLWNyZWF0b3IiOmNhc2Ui''@;'; put 'put ''Y3JlYXRpb24tZGF0ZSI6Y2FzZSJwcmludC1kYXRlIjpjYXNlImdlbmVyYXRvciI6Y2FzZSJkb2N1bWVudC1zdGF0aXN0aWMiOmNhc2UidXNlci1kZWZpbmVkIjpjYXNlImVkaXRpbmctZHVyYXRpb24iOmNhc2UiZWRpdGluZy1jeWNsZXMiOmNhc2UiY29uZmlnLWl0ZW0iOmNhc2UicGFnZS1u''@;'; put 'put ''dW1iZXIiOmNhc2UicGFnZS1jb3VudCI6Y2FzZSJ0aW1lIjpjYXNlImNlbGwtcmFuZ2Utc291cmNlIjpjYXNlImRldGVjdGl2ZSI6Y2FzZSJvcGVyYXRpb24iOmNhc2UiaGlnaGxpZ2h0ZWQtcmFuZ2UiOmNhc2UiZGF0YS1waWxvdC10YWJsZSI6Y2FzZSJzb3VyY2UtY2VsbC1yYW5nZSI6Y2Fz''@;'; put 'put ''ZSJzb3VyY2Utc2VydmljZSI6Y2FzZSJkYXRhLXBpbG90LWZpZWxkIjpjYXNlImRhdGEtcGlsb3QtbGV2ZWwiOmNhc2UiZGF0YS1waWxvdC1zdWJ0b3RhbHMiOmNhc2UiZGF0YS1waWxvdC1zdWJ0b3RhbCI6Y2FzZSJkYXRhLXBpbG90LW1lbWJlcnMiOmNhc2UiZGF0YS1waWxvdC1tZW1iZXIi''@;'; put 'put ''OmNhc2UiZGF0YS1waWxvdC1kaXNwbGF5LWluZm8iOmNhc2UiZGF0YS1waWxvdC1zb3J0LWluZm8iOmNhc2UiZGF0YS1waWxvdC1sYXlvdXQtaW5mbyI6Y2FzZSJkYXRhLXBpbG90LWZpZWxkLXJlZmVyZW5jZSI6Y2FzZSJkYXRhLXBpbG90LWdyb3VwcyI6Y2FzZSJkYXRhLXBpbG90LWdyb3Vw''@;'; put 'put ''IjpjYXNlImRhdGEtcGlsb3QtZ3JvdXAtbWVtYmVyIjpjYXNlInJlY3QiOmNhc2UiZGRlLWNvbm5lY3Rpb24tZGVjbHMiOmNhc2UiZGRlLWNvbm5lY3Rpb24tZGVjbCI6Y2FzZSJkZGUtbGluayI6Y2FzZSJkZGUtc291cmNlIjpjYXNlInByb3BlcnRpZXMiOmNhc2UicHJvcGVydHkiOmNhc2Ui''@;'; put 'put ''dGFibGUtcHJvdGVjdGlvbiI6Y2FzZSJkYXRhLXBpbG90LWdyYW5kLXRvdGFsIjpjYXNlIm9mZmljZS1kb2N1bWVudC1jb21tb24tYXR0cnMiOmJyZWFrO2Nhc2UibnVtYmVyLXN0eWxlIjpjYXNlInBlcmNlbnRhZ2Utc3R5bGUiOmNhc2UiZGF0ZS1zdHlsZSI6Y2FzZSJ0aW1lLXN0eWxlIjpp''@;'; put 'put ''ZigiLyI9PT1MdFsxXSl7aWYod2lbR2UubmFtZV09ZXQsKE5lPWJlLnBvcCgpKVswXSE9PUx0WzNdKXRocm93IkJhZCBzdGF0ZTogIitOZX1lbHNlIi8iIT09THRbMF0uY2hhckF0KEx0WzBdLmxlbmd0aC0yKSYmKGV0PSIiLEdlPXZyKEx0WzBdLCExKSxiZS5wdXNoKFtMdFszXSwhMF0pKTti''@;'; put 'put ''cmVhaztjYXNlInN0eWxlIjoiLz4iPT09THRbMF0uc2xpY2UoLTIpP2soTHRbMF0sZm8pOiIvIj09THRbMV0/ayhwZS5zbGljZShhYSxMdC5pbmRleCtMdFswXS5sZW5ndGgpLGZvKTphYT1MdC5pbmRleDticmVhaztjYXNlIm51bWJlciI6Y2FzZSJkYXkiOmNhc2UibW9udGgiOmNhc2UieWVh''@;'; put 'put ''ciI6Y2FzZSJlcmEiOmNhc2UiZGF5LW9mLXdlZWsiOmNhc2Uid2Vlay1vZi15ZWFyIjpjYXNlInF1YXJ0ZXIiOmNhc2UiaG91cnMiOmNhc2UibWludXRlcyI6Y2FzZSJzZWNvbmRzIjpjYXNlImFtLXBtIjpzd2l0Y2goYmVbYmUubGVuZ3RoLTFdWzBdKXtjYXNlInRpbWUtc3R5bGUiOmNhc2Ui''@;'; put 'put ''ZGF0ZS1zdHlsZSI6QmU9dnIoTHRbMF0sITEpLGV0Kz1MW0x0WzNdXVsibG9uZyI9PT1CZS5zdHlsZT8xOjBdfWJyZWFrO2Nhc2UidGV4dCI6aWYoIi8+Ij09PUx0WzBdLnNsaWNlKC0yKSlicmVhaztpZigiLyI9PT1MdFsxXSlzd2l0Y2goYmVbYmUubGVuZ3RoLTFdWzBdKXtjYXNlIm51bWJl''@;'; put 'put ''ci1zdHlsZSI6Y2FzZSJkYXRlLXN0eWxlIjpjYXNlInRpbWUtc3R5bGUiOmV0Kz1wZS5zbGljZShjdCxMdC5pbmRleCl9ZWxzZSBjdD1MdC5pbmRleCtMdFswXS5sZW5ndGg7YnJlYWs7Y2FzZSJuYW1lZC1yYW5nZSI6Wmk9eTcoKEJlPXZyKEx0WzBdLCExKSlbImNlbGwtcmFuZ2UtYWRkcmVz''@;'; put 'put ''cyJdKTt2YXIgRnM9e05hbWU6QmUubmFtZSxSZWY6WmlbMF0rIiEiK1ppWzFdfTtibyYmKEZzLlNoZWV0PUZ0Lmxlbmd0aCksVm4uTmFtZXMucHVzaChGcyk7YnJlYWs7Y2FzZSJwIjpjYXNlIlx1NjU4N1x1NjcyY1x1NGUzMiI6aWYoWyJtYXN0ZXItc3R5bGVzIl0uaW5kZXhPZihiZVtiZS5s''@;'; put 'put ''ZW5ndGgtMV1bMF0pPi0xKWJyZWFrO2lmKCIvIiE9PUx0WzFdfHxUbiYmVG5bInN0cmluZy12YWx1ZSJdKXZyKEx0WzBdLCExKSxDbj1MdC5pbmRleCtMdFswXS5sZW5ndGg7ZWxzZXt2YXIgZWw9UyhwZS5zbGljZShDbixMdC5pbmRleCksMCxmbyk7c3I9KHNyLmxlbmd0aD4wP3NyKyJcbiI6''@;'; put 'put ''IiIpK2VsWzBdLHFuPWVsWzFdfWJyZWFrO2Nhc2UiZGF0YWJhc2UtcmFuZ2UiOmlmKCIvIj09PUx0WzFdKWJyZWFrO3RyeXtidFsoWmk9eTcodnIoTHRbMF0pWyJ0YXJnZXQtcmFuZ2UtYWRkcmVzcyJdKSlbMF1dWyIhYXV0b2ZpbHRlciJdPXtyZWY6WmlbMV19fWNhdGNoe31icmVhaztjYXNl''@;'; put 'put ''ImEiOmlmKCIvIiE9PUx0WzFdKXtpZighKHpyPXZyKEx0WzBdLCExKSkuaHJlZilicmVhazt6ci5UYXJnZXQ9ZWkoenIuaHJlZiksZGVsZXRlIHpyLmhyZWYsIiMiPT16ci5UYXJnZXQuY2hhckF0KDApJiZ6ci5UYXJnZXQuaW5kZXhPZigiLiIpPi0xPyhaaT15Nyh6ci5UYXJnZXQuc2xpY2Uo''@;'; put 'put ''MSkpLHpyLlRhcmdldD0iIyIrWmlbMF0rIiEiK1ppWzFdKTp6ci5UYXJnZXQubWF0Y2goL15cLlwuW1xcXC9dLykmJih6ci5UYXJnZXQ9enIuVGFyZ2V0LnNsaWNlKDMpKX1icmVhaztkZWZhdWx0OnN3aXRjaChMdFsyXSl7Y2FzZSJkYzoiOmNhc2UiY2FsY2V4dDoiOmNhc2UibG9leHQ6Ijpj''@;'; put 'put ''YXNlIm9vbzoiOmNhc2UiY2hhcnRvb286IjpjYXNlImRyYXc6IjpjYXNlInN0eWxlOiI6Y2FzZSJjaGFydDoiOmNhc2UiZm9ybToiOmNhc2UidW9mOiI6Y2FzZSJcdTg4Njg6IjpjYXNlIlx1NWI1NzoiOmJyZWFrO2RlZmF1bHQ6aWYobWUuV1RGKXRocm93IG5ldyBFcnJvcihMdCl9fXZhciBJ''@;'; put 'put ''dT17U2hlZXRzOmJ0LFNoZWV0TmFtZXM6RnQsV29ya2Jvb2s6Vm59O3JldHVybiBtZS5ib29rU2hlZXRzJiZkZWxldGUgSXUuU2hlZXRzLEl1fX0oKTtmdW5jdGlvbiBhXyhTLEwpe3JldHVybiBuRShTLEwpfXZhciBlWT1mdW5jdGlvbigpe3ZhciBTPVsiICA8b2ZmaWNlOm1hc3Rlci1zdHls''@;'; put 'put ''ZXM+IiwnICAgIDxzdHlsZTptYXN0ZXItcGFnZSBzdHlsZTpuYW1lPSJtcDEiIHN0eWxlOnBhZ2UtbGF5b3V0LW5hbWU9Im1wMSI+JywiICAgICAgPHN0eWxlOmhlYWRlci8+IiwnICAgICAgPHN0eWxlOmhlYWRlci1sZWZ0IHN0eWxlOmRpc3BsYXk9ImZhbHNlIi8+JywiICAgICAgPHN0eWxl''@;'; put 'put ''OmZvb3Rlci8+IiwnICAgICAgPHN0eWxlOmZvb3Rlci1sZWZ0IHN0eWxlOmRpc3BsYXk9ImZhbHNlIi8+JywiICAgIDwvc3R5bGU6bWFzdGVyLXBhZ2U+IiwiICA8L29mZmljZTptYXN0ZXItc3R5bGVzPiJdLmpvaW4oIlxuIiksTD0iPG9mZmljZTpkb2N1bWVudC1zdHlsZXMgIitkYyh7Inht''@;'; put 'put ''bG5zOm9mZmljZSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6b2ZmaWNlOjEuMCIsInhtbG5zOnRhYmxlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp0YWJsZToxLjAiLCJ4bWxuczpzdHlsZSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVu''@;'; put 'put ''ZG9jdW1lbnQ6eG1sbnM6c3R5bGU6MS4wIiwieG1sbnM6dGV4dCI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6dGV4dDoxLjAiLCJ4bWxuczpkcmF3IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpkcmF3aW5nOjEuMCIsInhtbG5zOmZvIjoi''@;'; put 'put ''dXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp4c2wtZm8tY29tcGF0aWJsZToxLjAiLCJ4bWxuczp4bGluayI6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCJ4bWxuczpkYyI6Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiwieG1sbnM6bnVtYmVy''@;'; put 'put ''IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpkYXRhc3R5bGU6MS4wIiwieG1sbnM6c3ZnIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpzdmctY29tcGF0aWJsZToxLjAiLCJ4bWxuczpvZiI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9j''@;'; put 'put ''dW1lbnQ6eG1sbnM6b2Y6MS4yIiwib2ZmaWNlOnZlcnNpb24iOiIxLjIifSkrIj5cbiIrUysiXG48L29mZmljZTpkb2N1bWVudC1zdHlsZXM+IjtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcGkrTH19KCkseE89ZnVuY3Rpb24oKXt2YXIgUz1mdW5jdGlvbihwZSxiZSl7cmV0dXJuIGhpKHBl''@;'; put 'put ''KS5yZXBsYWNlKC8gICsvZyxmdW5jdGlvbihOZSl7cmV0dXJuJzx0ZXh0OnMgdGV4dDpjPSInK05lLmxlbmd0aCsnIi8+J30pLnJlcGxhY2UoL1x0L2csIjx0ZXh0OnRhYi8+IikucmVwbGFjZSgvXG4vZyxiZT8iPHRleHQ6bGluZS1icmVhay8+IjoiPC90ZXh0OnA+PHRleHQ6cD4iKS5yZXBs''@;'; put 'put ''YWNlKC9eIC8sIjx0ZXh0OnMvPiIpLnJlcGxhY2UoLyAkLywiPHRleHQ6cy8+Iil9LEw9ZnVuY3Rpb24ocGUpe3JldHVybiBwZS5tYXAoZnVuY3Rpb24oYmUpe3ZhciBOZT0iIjtyZXR1cm4gbnVsbCE9YmUub2RzJiYoTmUrPScgdGV4dDpzdHlsZS1uYW1lPSJUJytiZS5vZHMrJyInKSxiZS52''@;'; put 'put ''PyI8dGV4dDpzcGFuIitOZSsiPiIrUyhiZS52LCEwKSsiPC90ZXh0OnNwYW4+IjoiIn0pLmpvaW4oIiIpfSxrPSIgICAgICAgICAgPHRhYmxlOnRhYmxlLWNlbGwgLz5cbiIsUT1mdW5jdGlvbihwZSxiZSxOZSl7dmFyIEJlPVtdO0JlLnB1c2goJyAgICAgIDx0YWJsZTp0YWJsZSB0YWJsZTpu''@;'; put 'put ''YW1lPSInK2hpKGJlLlNoZWV0TmFtZXNbTmVdKSsnIiB0YWJsZTpzdHlsZS1uYW1lPSJ0YTEiPlxuJyk7dmFyIEdlPTAsZXQ9MCxjdD1WbyhwZVsiIXJlZiJdfHwiQTEiKSx4dD1wZVsiIW1lcmdlcyJdfHxbXSxvdD0wLGJ0PUFycmF5LmlzQXJyYXkocGUpO2lmKHBlWyIhY29scyJdKWZvcihl''@;'; put 'put ''dD0wO2V0PD1jdC5lLmM7KytldClCZS5wdXNoKCIgICAgICAgIDx0YWJsZTp0YWJsZS1jb2x1bW4iKyhwZVsiIWNvbHMiXVtldF0/JyB0YWJsZTpzdHlsZS1uYW1lPSJjbycrcGVbIiFjb2xzIl1bZXRdLm9kcysnIic6IiIpKyI+PC90YWJsZTp0YWJsZS1jb2x1bW4+XG4iKTt2YXIga3Q9cGVb''@;'; put 'put ''IiFyb3dzIl18fFtdO2ZvcihHZT0wO0dlPGN0LnMucjsrK0dlKUJlLnB1c2goIiAgICAgICAgPHRhYmxlOnRhYmxlLXJvdyIrKGt0W0dlXT8nIHRhYmxlOnN0eWxlLW5hbWU9InJvJytrdFtHZV0ub2RzKyciJzoiIikrIj48L3RhYmxlOnRhYmxlLXJvdz5cbiIpO2Zvcig7R2U8PWN0LmUucjsr''@;'; put 'put ''K0dlKXtmb3IoQmUucHVzaCgiICAgICAgICA8dGFibGU6dGFibGUtcm93Iisoa3RbR2VdPycgdGFibGU6c3R5bGUtbmFtZT0icm8nK2t0W0dlXS5vZHMrJyInOiIiKSsiPlxuIiksZXQ9MDtldDxjdC5zLmM7KytldClCZS5wdXNoKGspO2Zvcig7ZXQ8PWN0LmUuYzsrK2V0KXt2YXIgTHQ9ITEs''@;'; put 'put ''SnQ9e30sVG49IiI7Zm9yKG90PTA7b3QhPXh0Lmxlbmd0aDsrK290KWlmKCEoeHRbb3RdLnMuYz5ldHx8eHRbb3RdLnMucj5HZXx8eHRbb3RdLmUuYzxldHx8eHRbb3RdLmUucjxHZSkpeyh4dFtvdF0ucy5jIT1ldHx8eHRbb3RdLnMuciE9R2UpJiYoTHQ9ITApLEp0WyJ0YWJsZTpudW1iZXIt''@;'; put 'put ''Y29sdW1ucy1zcGFubmVkIl09eHRbb3RdLmUuYy14dFtvdF0ucy5jKzEsSnRbInRhYmxlOm51bWJlci1yb3dzLXNwYW5uZWQiXT14dFtvdF0uZS5yLXh0W290XS5zLnIrMTticmVha31pZihMdClCZS5wdXNoKCIgICAgICAgICAgPHRhYmxlOmNvdmVyZWQtdGFibGUtY2VsbC8+XG4iKTtlbHNl''@;'; put 'put ''e3ZhciBzcj1HaSh7cjpHZSxjOmV0fSksQ249YnQ/KHBlW0dlXXx8W10pW2V0XTpwZVtzcl07aWYoQ24mJkNuLmYmJihKdFsidGFibGU6Zm9ybXVsYSJdPWhpKGRaKENuLmYpKSxDbi5GJiZDbi5GLnNsaWNlKDAsc3IubGVuZ3RoKT09c3IpKXt2YXIgbHI9Vm8oQ24uRik7SnRbInRhYmxlOm51''@;'; put 'put ''bWJlci1tYXRyaXgtY29sdW1ucy1zcGFubmVkIl09bHIuZS5jLWxyLnMuYysxLEp0WyJ0YWJsZTpudW1iZXItbWF0cml4LXJvd3Mtc3Bhbm5lZCJdPWxyLmUuci1sci5zLnIrMX1pZihDbil7c3dpdGNoKENuLnQpe2Nhc2UiYiI6VG49Q24udj8iVFJVRSI6IkZBTFNFIixKdFsib2ZmaWNlOnZh''@;'; put 'put ''bHVlLXR5cGUiXT0iYm9vbGVhbiIsSnRbIm9mZmljZTpib29sZWFuLXZhbHVlIl09Q24udj8idHJ1ZSI6ImZhbHNlIjticmVhaztjYXNlIm4iOlRuPUNuLnd8fFN0cmluZyhDbi52fHwwKSxKdFsib2ZmaWNlOnZhbHVlLXR5cGUiXT0iZmxvYXQiLEp0WyJvZmZpY2U6dmFsdWUiXT1Dbi52fHww''@;'; put 'put ''O2JyZWFrO2Nhc2UicyI6Y2FzZSJzdHIiOlRuPUNuLnYsSnRbIm9mZmljZTp2YWx1ZS10eXBlIl09InN0cmluZyI7YnJlYWs7Y2FzZSJkIjpUbj1Dbi53fHxJZShDbi52KS50b0lTT1N0cmluZygpLEp0WyJvZmZpY2U6dmFsdWUtdHlwZSJdPSJkYXRlIixKdFsib2ZmaWNlOmRhdGUtdmFsdWUi''@;'; put 'put ''XT1JZShDbi52KS50b0lTT1N0cmluZygpLEp0WyJ0YWJsZTpzdHlsZS1uYW1lIl09ImNlMSI7YnJlYWs7ZGVmYXVsdDpCZS5wdXNoKGspO2NvbnRpbnVlfW51bGwhPUNuLm9kcyYmIUp0WyJ0YWJsZTpzdHlsZS1uYW1lIl0mJihKdFsidGFibGU6c3R5bGUtbmFtZSJdPSJjZSIrQ24ub2RzKTt2''@;'; put 'put ''YXIgcW49IUNuLlJ8fENuLmwmJkNuLmwuVGFyZ2V0P1MoVG4pOkwoQ24uUik7aWYoQ24ubCYmQ24ubC5UYXJnZXQpe3ZhciBXbj1Dbi5sLlRhcmdldDsiIyIhPShXbj0iIyI9PVduLmNoYXJBdCgwKT8iIyIrVG9lKFduLnNsaWNlKDEpKTpXbikuY2hhckF0KDApJiYhV24ubWF0Y2goL15cdys6''@;'; put 'put ''LykmJihXbj0iLi4vIitXbikscW49anIoInRleHQ6YSIscW4seyJ4bGluazpocmVmIjpXbi5yZXBsYWNlKC8mL2csIiZhbXA7Iil9KX1CZS5wdXNoKCIgICAgICAgICAgIitqcigidGFibGU6dGFibGUtY2VsbCIsanIoInRleHQ6cCIscW4se30pLEp0KSsiXG4iKX1lbHNlIEJlLnB1c2goayl9''@;'; put 'put ''fUJlLnB1c2goIiAgICAgICAgPC90YWJsZTp0YWJsZS1yb3c+XG4iKX1yZXR1cm4gQmUucHVzaCgiICAgICAgPC90YWJsZTp0YWJsZT5cbiIpLEJlLmpvaW4oIiIpfSxsZT17Y2VudGVyOiJjZW50ZXIiLGxlZnQ6InN0YXJ0IixyaWdodDoiZW5kIn07cmV0dXJuIGZ1bmN0aW9uKGJlLE5lKXt2''@;'; put 'put ''YXIgQmU9W3BpXSxHZT1kYyh7InhtbG5zOm9mZmljZSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6b2ZmaWNlOjEuMCIsInhtbG5zOnRhYmxlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp0YWJsZToxLjAiLCJ4bWxuczpzdHlsZSI6InVy''@;'; put 'put ''bjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c3R5bGU6MS4wIiwieG1sbnM6dGV4dCI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6dGV4dDoxLjAiLCJ4bWxuczpkcmF3IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpkcmF3''@;'; put 'put ''aW5nOjEuMCIsInhtbG5zOmZvIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp4c2wtZm8tY29tcGF0aWJsZToxLjAiLCJ4bWxuczp4bGluayI6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCJ4bWxuczpkYyI6Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50''@;'; put 'put ''cy8xLjEvIiwieG1sbnM6bWV0YSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6bWV0YToxLjAiLCJ4bWxuczpudW1iZXIiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRhdGFzdHlsZToxLjAiLCJ4bWxuczpwcmVzZW50YXRpb24iOiJ1cm46''@;'; put 'put ''b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnByZXNlbnRhdGlvbjoxLjAiLCJ4bWxuczpzdmciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnN2Zy1jb21wYXRpYmxlOjEuMCIsInhtbG5zOmNoYXJ0IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1''@;'; put 'put ''bWVudDp4bWxuczpjaGFydDoxLjAiLCJ4bWxuczpkcjNkIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpkcjNkOjEuMCIsInhtbG5zOm1hdGgiOiJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIiwieG1sbnM6Zm9ybSI6InVybjpvYXNpczpuYW1lczp0''@;'; put 'put ''YzpvcGVuZG9jdW1lbnQ6eG1sbnM6Zm9ybToxLjAiLCJ4bWxuczpzY3JpcHQiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnNjcmlwdDoxLjAiLCJ4bWxuczpvb28iOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAwNC9vZmZpY2UiLCJ4bWxuczpvb293IjoiaHR0cDov''@;'; put 'put ''L29wZW5vZmZpY2Uub3JnLzIwMDQvd3JpdGVyIiwieG1sbnM6b29vYyI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA0L2NhbGMiLCJ4bWxuczpkb20iOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC1ldmVudHMiLCJ4bWxuczp4Zm9ybXMiOiJodHRwOi8vd3d3LnczLm9yZy8yMDAyL3hm''@;'; put 'put ''b3JtcyIsInhtbG5zOnhzZCI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiwieG1sbnM6eHNpIjoiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiLCJ4bWxuczpzaGVldCI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6c2gzM3Rqczox''@;'; put 'put ''LjAiLCJ4bWxuczpycHQiOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAwNS9yZXBvcnQiLCJ4bWxuczpvZiI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6b2Y6MS4yIiwieG1sbnM6eGh0bWwiOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwieG1sbnM6Z3Jk''@;'; put 'put ''ZGwiOiJodHRwOi8vd3d3LnczLm9yZy8yMDAzL2cvZGF0YS12aWV3IyIsInhtbG5zOnRhYmxlb29vIjoiaHR0cDovL29wZW5vZmZpY2Uub3JnLzIwMDkvdGFibGUiLCJ4bWxuczpkcmF3b29vIjoiaHR0cDovL29wZW5vZmZpY2Uub3JnLzIwMTAvZHJhdyIsInhtbG5zOmNhbGNleHQiOiJ1cm46''@;'; put 'put ''b3JnOmRvY3VtZW50Zm91bmRhdGlvbjpuYW1lczpleHBlcmltZW50YWw6Y2FsYzp4bWxuczpjYWxjZXh0OjEuMCIsInhtbG5zOmxvZXh0IjoidXJuOm9yZzpkb2N1bWVudGZvdW5kYXRpb246bmFtZXM6ZXhwZXJpbWVudGFsOm9mZmljZTp4bWxuczpsb2V4dDoxLjAiLCJ4bWxuczpmaWVsZCI6''@;'; put 'put ''InVybjpvcGVub2ZmaWNlOm5hbWVzOmV4cGVyaW1lbnRhbDpvb28tbXMtaW50ZXJvcDp4bWxuczpmaWVsZDoxLjAiLCJ4bWxuczpmb3JteCI6InVybjpvcGVub2ZmaWNlOm5hbWVzOmV4cGVyaW1lbnRhbDpvb3htbC1vZGYtaW50ZXJvcDp4bWxuczpmb3JtOjEuMCIsInhtbG5zOmNzczN0Ijoi''@;'; put 'put ''aHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy10ZXh0LyIsIm9mZmljZTp2ZXJzaW9uIjoiMS4yIn0pLGV0PWRjKHsieG1sbnM6Y29uZmlnIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpjb25maWc6MS4wIiwib2ZmaWNlOm1pbWV0eXBlIjoiYXBwbGljYXRpb24vdm5k''@;'; put 'put ''Lm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldCJ9KTsiZm9kcyI9PU5lLmJvb2tUeXBlPyhCZS5wdXNoKCI8b2ZmaWNlOmRvY3VtZW50IitHZStldCsiPlxuIiksQmUucHVzaChIeSgpLnJlcGxhY2UoL29mZmljZTpkb2N1bWVudC1tZXRhL2csIm9mZmljZTptZXRhIikpKTpCZS5wdXNo''@;'; put 'put ''KCI8b2ZmaWNlOmRvY3VtZW50LWNvbnRlbnQiK0dlKyI+XG4iKSxmdW5jdGlvbihwZSxiZSl7dmFyIE5lPVtdLEJlPXt9O05lLnB1c2goIiA8b2ZmaWNlOmF1dG9tYXRpYy1zdHlsZXM+XG4iKSxOZS5wdXNoKCcgIDxudW1iZXI6ZGF0ZS1zdHlsZSBzdHlsZTpuYW1lPSJOMzciIG51bWJlcjph''@;'; put 'put ''dXRvbWF0aWMtb3JkZXI9InRydWUiPlxuJyksTmUucHVzaCgnICAgPG51bWJlcjptb250aCBudW1iZXI6c3R5bGU9ImxvbmciLz5cbicpLE5lLnB1c2goIiAgIDxudW1iZXI6dGV4dD4vPC9udW1iZXI6dGV4dD5cbiIpLE5lLnB1c2goJyAgIDxudW1iZXI6ZGF5IG51bWJlcjpzdHlsZT0ibG9u''@;'; put 'put ''ZyIvPlxuJyksTmUucHVzaCgiICAgPG51bWJlcjp0ZXh0Pi88L251bWJlcjp0ZXh0PlxuIiksTmUucHVzaCgiICAgPG51bWJlcjp5ZWFyLz5cbiIpLE5lLnB1c2goIiAgPC9udW1iZXI6ZGF0ZS1zdHlsZT5cbiIpO3ZhciBHZT0wO2JlLlNoZWV0TmFtZXMubWFwKGZ1bmN0aW9uKG90KXtyZXR1''@;'; put 'put ''cm4gYmUuU2hlZXRzW290XX0pLmZvckVhY2goZnVuY3Rpb24ob3Qpe2lmKG90JiZvdFsiIWNvbHMiXSlmb3IodmFyIGJ0PTA7YnQ8b3RbIiFjb2xzIl0ubGVuZ3RoOysrYnQpaWYob3RbIiFjb2xzIl1bYnRdKXt2YXIgRnQ9b3RbIiFjb2xzIl1bYnRdO2lmKG51bGw9PUZ0LndpZHRoJiZudWxs''@;'; put 'put ''PT1GdC53cHgmJm51bGw9PUZ0LndjaCljb250aW51ZTtyMShGdCksRnQub2RzPUdlO3ZhciBrdD1vdFsiIWNvbHMiXVtidF0ud3B4KyJweCI7TmUucHVzaCgnICA8c3R5bGU6c3R5bGUgc3R5bGU6bmFtZT0iY28nK0dlKyciIHN0eWxlOmZhbWlseT0idGFibGUtY29sdW1uIj5cbicpLE5lLnB1''@;'; put 'put ''c2goJyAgIDxzdHlsZTp0YWJsZS1jb2x1bW4tcHJvcGVydGllcyBmbzpicmVhay1iZWZvcmU9ImF1dG8iIHN0eWxlOmNvbHVtbi13aWR0aD0iJytrdCsnIi8+XG4nKSxOZS5wdXNoKCIgIDwvc3R5bGU6c3R5bGU+XG4iKSwrK0dlfX0pO3ZhciBldD0wO2JlLlNoZWV0TmFtZXMubWFwKGZ1bmN0''@;'; put 'put ''aW9uKG90KXtyZXR1cm4gYmUuU2hlZXRzW290XX0pLmZvckVhY2goZnVuY3Rpb24ob3Qpe2lmKG90JiZvdFsiIXJvd3MiXSlmb3IodmFyIGJ0PTA7YnQ8b3RbIiFyb3dzIl0ubGVuZ3RoOysrYnQpaWYob3RbIiFyb3dzIl1bYnRdKXtvdFsiIXJvd3MiXVtidF0ub2RzPWV0O3ZhciBGdD1vdFsi''@;'; put 'put ''IXJvd3MiXVtidF0uaHB4KyJweCI7TmUucHVzaCgnICA8c3R5bGU6c3R5bGUgc3R5bGU6bmFtZT0icm8nK2V0KyciIHN0eWxlOmZhbWlseT0idGFibGUtcm93Ij5cbicpLE5lLnB1c2goJyAgIDxzdHlsZTp0YWJsZS1yb3ctcHJvcGVydGllcyBmbzpicmVhay1iZWZvcmU9ImF1dG8iIHN0eWxl''@;'; put 'put ''OnJvdy1oZWlnaHQ9IicrRnQrJyIvPlxuJyksTmUucHVzaCgiICA8L3N0eWxlOnN0eWxlPlxuIiksKytldH19KSxOZS5wdXNoKCcgIDxzdHlsZTpzdHlsZSBzdHlsZTpuYW1lPSJ0YTEiIHN0eWxlOmZhbWlseT0idGFibGUiIHN0eWxlOm1hc3Rlci1wYWdlLW5hbWU9Im1wMSI+XG4nKSxOZS5w''@;'; put 'put ''dXNoKCcgICA8c3R5bGU6dGFibGUtcHJvcGVydGllcyB0YWJsZTpkaXNwbGF5PSJ0cnVlIiBzdHlsZTp3cml0aW5nLW1vZGU9ImxyLXRiIi8+XG4nKSxOZS5wdXNoKCIgIDwvc3R5bGU6c3R5bGU+XG4iKSxOZS5wdXNoKCcgIDxzdHlsZTpzdHlsZSBzdHlsZTpuYW1lPSJjZTEiIHN0eWxlOmZh''@;'; put 'put ''bWlseT0idGFibGUtY2VsbCIgc3R5bGU6cGFyZW50LXN0eWxlLW5hbWU9IkRlZmF1bHQiIHN0eWxlOmRhdGEtc3R5bGUtbmFtZT0iTjM3Ii8+XG4nKTt2YXIgY3Q9MjtldD0wLGJlLlNoZWV0TmFtZXMubWFwKGZ1bmN0aW9uKG90KXtyZXR1cm4gYmUuU2hlZXRzW290XX0pLmZvckVhY2goZnVu''@;'; put 'put ''Y3Rpb24ob3Qpe2lmKG90KWZvcih2YXIgYnQ9MCxGdD0wLGt0PVZvKG90WyIhcmVmIl0pLEx0PUFycmF5LmlzQXJyYXkob3QpO2J0PD1rdC5lLnI7KytidClmb3IoRnQ9MDtGdDw9a3QuZS5jOysrRnQpe3ZhciBKdD1HaSh7cjpidCxjOkZ0fSksVG49THQ/KG90W2J0XXx8W10pW0Z0XTpvdFtK''@;'; put 'put ''dF07aWYoVG4mJihUbi5zfHxUbi5SKSl7dmFyIHNyPVtdO1RuLnMmJnNyLnB1c2goW1RuLCEwXSksVG4uUiYmVG4uUi5mb3JFYWNoKGZ1bmN0aW9uKENuKXtDbiYmQ24ucyYmc3IucHVzaChbQ24sITFdKX0pLHNyLmZvckVhY2goZnVuY3Rpb24oQ24pe3ZhciBscj1DblswXSxxbj1sci5zLFdu''@;'; put 'put ''PSIiLHByPXsic3R5bGU6bmFtZSI6KENuWzFdPyJjZSI6IlQiKStjdCwic3R5bGU6ZmFtaWx5IjpDblsxXT8idGFibGUtY2VsbCI6InRleHQifTtDblsxXSYmKHByWyJzdHlsZTpwYXJlbnQtc3R5bGUtbmFtZSJdPSJEZWZhdWx0Iixwclsic3R5bGU6ZGF0YS1zdHlsZS1uYW1lIl09Ik4wIik7''@;'; put 'put ''dmFyIHlyPXt9LHRyPSExLHdpPXt9LEZpPSExLHJhPXt9LG9hPSExO2lmKHFuLmNvbG9yJiYod2lbImZvOmNvbG9yIl09IiMiK1QxKHFuLmNvbG9yLnJnYiksRmk9ITApLHFuLnN6JiYod2lbImZvOmZvbnQtc2l6ZSJdPXFuLnN6KyJwdCIsRmk9ITApLHFuLmJvbGQmJih3aVsiZm86Zm9udC13''@;'; put 'put ''ZWlnaHQiXT0iYm9sZCIsRmk9ITApLHFuLml0YWxpYyYmKHdpWyJmbzpmb250LXN0eWxlIl09Iml0YWxpYyIsRmk9ITApLHFuLm5hbWUmJihCZVtxbi5uYW1lXXx8KEJlW3FuLm5hbWVdPXFuLm5hbWUubWF0Y2goLyAvKT8iJmFwb3M7Iitxbi5uYW1lKyImYXBvczsiOnFuLm5hbWUpLHdpWyJz''@;'; put 'put ''dHlsZTpmb250LW5hbWUiXT1xbi5uYW1lLEZpPSEwKSxxbi5zdHJpa2UmJih3aVsic3R5bGU6dGV4dC1saW5lLXRocm91Z2gtc3R5bGUiXT0ic29saWQiLHdpWyJzdHlsZTp0ZXh0LWxpbmUtdGhyb3VnaC10eXBlIl09InNpbmdsZSIsRmk9ITApLHFuLnVuZGVybGluZSYmKHdpWyJzdHlsZTp0''@;'; put 'put ''ZXh0LXVuZGVybGluZS1zdHlsZSJdPSJzb2xpZCIsd2lbInN0eWxlOnRleHQtdW5kZXJsaW5lLXdpZHRoIl09ImF1dG8iLHdpWyJzdHlsZTp0ZXh0LXVuZGVybGluZS1jb2xvciJdPSJmb250LWNvbG9yIixGaT0hMCksQ25bMV0pe2lmKHFuLmFsaWdubWVudCl7dmFyIGtpPXFuLmFsaWdubWVu''@;'; put 'put ''dDtraS53cmFwVGV4dCYmKHlyWyJmbzp3cmFwLW9wdGlvbiJdPSJ3cmFwIix0cj0hMCksa2kudmVydGljYWwmJih5clsic3R5bGU6dmVydGljYWwtYWxpZ24iXT0iY2VudGVyIj09a2kudmVydGljYWw/Im1pZGRsZSI6a2kudmVydGljYWwsdHI9ITApLGxlW2tpLmhvcml6b250YWxdJiYocmFb''@;'; put 'put ''ImZvOnRleHQtYWxpZ24iXT1sZVtraS5ob3Jpem9udGFsXSxvYT0hMCl9cW4uZmdDb2xvciYmKHlyWyJmbzpiYWNrZ3JvdW5kLWNvbG9yIl09IiMiK1QxKHFuLmZnQ29sb3IucmdiKSx0cj0hMCl9dHImJihXbis9anIoInN0eWxlOnRhYmxlLWNlbGwtcHJvcGVydGllcyIsbnVsbCx5cikpLEZp''@;'; put 'put ''JiYoV24rPWpyKCJzdHlsZTp0ZXh0LXByb3BlcnRpZXMiLG51bGwsd2kpKSxvYSYmKFduKz1qcigic3R5bGU6cGFyYWdyYXBoLXByb3BlcnRpZXMiLG51bGwscmEpKSxOZS5wdXNoKCIgICIranIoInN0eWxlOnN0eWxlIixXbixwcikrIlxuIiksbHIub2RzPWN0LCsrY3R9KX19fSksTmUucHVz''@;'; put 'put ''aCgiIDwvb2ZmaWNlOmF1dG9tYXRpYy1zdHlsZXM+XG4iKTt2YXIgeHQ9IiA8b2ZmaWNlOmZvbnQtZmFjZS1kZWNscz5cbiIrTGUoQmUpLm1hcChmdW5jdGlvbihvdCl7cmV0dXJuJyAgPHN0eWxlOmZvbnQtZmFjZSBzdHlsZTpuYW1lPSInK290KyciIHN2Zzpmb250LWZhbWlseT0iJytCZVtv''@;'; put 'put ''dF0rJyIvPlxuJ30pLmpvaW4oIiIpKyIgPC9vZmZpY2U6Zm9udC1mYWNlLWRlY2xzPlxuIjtwZS5wdXNoKHh0KSxwZS5wdXNoKE5lLmpvaW4oIiIpKX0oQmUsYmUpLEJlLnB1c2goIiAgPG9mZmljZTpib2R5PlxuIiksQmUucHVzaCgiICAgIDxvZmZpY2U6c3ByZWFkc2hlZXQ+XG4iKTtmb3Io''@;'; put 'put ''dmFyIGN0PTA7Y3QhPWJlLlNoZWV0TmFtZXMubGVuZ3RoOysrY3QpQmUucHVzaChRKGJlLlNoZWV0c1tiZS5TaGVldE5hbWVzW2N0XV0sYmUsY3QpKTtyZXR1cm4gQmUucHVzaCgiICAgIDwvb2ZmaWNlOnNwcmVhZHNoZWV0PlxuIiksQmUucHVzaCgiICA8L29mZmljZTpib2R5PlxuIiksQmUu''@;'; put 'put ''cHVzaCgiZm9kcyI9PU5lLmJvb2tUeXBlPyI8L29mZmljZTpkb2N1bWVudD4iOiI8L29mZmljZTpkb2N1bWVudC1jb250ZW50PiIpLEJlLmpvaW4oIiIpfX0oKTtmdW5jdGlvbiBFTyhTLEwpe2lmKCJmb2RzIj09TC5ib29rVHlwZSlyZXR1cm4geE8oUyxMKTt2YXIgaz1kaSgpLEc9IiIsUT1b''@;'; put 'put ''XSxsZT1bXTtyZXR1cm4gWm4oayxHPSJtaW1ldHlwZSIsImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQiKSxabihrLEc9ImNvbnRlbnQueG1sIix4TyhTLEwpKSxRLnB1c2goW0csInRleHQveG1sIl0pLGxlLnB1c2goW0csIkNvbnRlbnRGaWxlIl0pLFpu''@;'; put 'put ''KGssRz0ic3R5bGVzLnhtbCIsZVkoUyxMKSksUS5wdXNoKFtHLCJ0ZXh0L3htbCJdKSxsZS5wdXNoKFtHLCJTdHlsZXNGaWxlIl0pLFpuKGssRz0ibWV0YS54bWwiLHBpK0h5KCkpLFEucHVzaChbRywidGV4dC94bWwiXSksbGUucHVzaChbRywiTWV0YWRhdGFGaWxlIl0pLFpuKGssRz0ibWFu''@;'; put 'put ''aWZlc3QucmRmIixmdW5jdGlvbiBJcChTKXt2YXIgTD1bcGldO0wucHVzaCgnPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj5cbicpO2Zvcih2YXIgaz0wO2shPVMubGVuZ3RoOysraylMLnB1c2goTDgoU1trXVswXSxTW2td''@;'; put 'put ''WzFdKSksTC5wdXNoKENnKCIiLFNba11bMF0pKTtyZXR1cm4gTC5wdXNoKEw4KCIiLCJEb2N1bWVudCIsInBrZyIpKSxMLnB1c2goIjwvcmRmOlJERj4iKSxMLmpvaW4oIiIpfShsZSkpLFEucHVzaChbRywiYXBwbGljYXRpb24vcmRmK3htbCJdKSxabihrLEc9Ik1FVEEtSU5GL21hbmlmZXN0''@;'; put 'put ''LnhtbCIsZnVuY3Rpb24gRnkoUyl7dmFyIEw9W3BpXTtMLnB1c2goJzxtYW5pZmVzdDptYW5pZmVzdCB4bWxuczptYW5pZmVzdD0idXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczptYW5pZmVzdDoxLjAiIG1hbmlmZXN0OnZlcnNpb249IjEuMiI+XG4nKSxMLnB1c2goJyAg''@;'; put 'put ''PG1hbmlmZXN0OmZpbGUtZW50cnkgbWFuaWZlc3Q6ZnVsbC1wYXRoPSIvIiBtYW5pZmVzdDp2ZXJzaW9uPSIxLjIiIG1hbmlmZXN0Om1lZGlhLXR5cGU9ImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQiLz5cbicpO2Zvcih2YXIgaz0wO2s8Uy5sZW5ndGg7''@;'; put 'put ''KytrKUwucHVzaCgnICA8bWFuaWZlc3Q6ZmlsZS1lbnRyeSBtYW5pZmVzdDpmdWxsLXBhdGg9IicrU1trXVswXSsnIiBtYW5pZmVzdDptZWRpYS10eXBlPSInK1Nba11bMV0rJyIvPlxuJyk7cmV0dXJuIEwucHVzaCgiPC9tYW5pZmVzdDptYW5pZmVzdD4iKSxMLmpvaW4oIiIpfShRKSksa31m''@;'; put 'put ''dW5jdGlvbiBFMyhTKXtyZXR1cm4gZnVuY3Rpb24oayxHKXt2YXIgUT1mdW5jdGlvbiB0WShTLEwpe2lmKCFMKXJldHVybiAwO3ZhciBrPVMuU2hlZXROYW1lcy5pbmRleE9mKEwpO2lmKC0xPT1rKXRocm93IG5ldyBFcnJvcigiU2hlZXQgbm90IGZvdW5kOiAiK0wpO3JldHVybiBrfShrLEcu''@;'; put 'put ''c2hlZXQpO3JldHVybiBTLmZyb21fc2hlZXQoay5TaGVldHNbay5TaGVldE5hbWVzW1FdXSxHLGspfX12YXIgblk9RTMoYTIpLGlFPUUzKHtmcm9tX3NoZWV0Olo3fSksclk9RTModHlwZW9mIGViPCJ1Ij9lYjp7fSksaVk9RTModHlwZW9mIGNNPCJ1Ij9jTTp7fSksYVk9RTModHlwZW9mIEpo''@;'; put 'put ''PCJ1Ij9KaDp7fSksVmc9RTModHlwZW9mIG9iPCJ1Ij9vYjp7fSksVjc9RTMoe2Zyb21fc2hlZXQ6ak99KSxhRT1FMyh0eXBlb2YgaG08InUiP2htOnt9KSxvRT1FMyh0eXBlb2YgRnA8InUiP0ZwOnt9KSwkdT1iKDkxNDI2KXx8dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5jcnlwdG9Ccm93''@;'; put 'put ''c2VyaWZ5O2lmKCEkdSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGNyeXB0byBleHRlbnNpb25zISIpO3ZhciBCZz17U0hBNTEyOiJzaGE1MTIiLFNIQTI1Njoic2hhMjU2IixTSEEzODQ6InNoYTM4NCIsU0hBMToic2hhMSIsTUQ1OiJtZDUiLE1ENDoibWQ0IixNRDI6Im1kMiJ9O2Z1''@;'; put 'put ''bmN0aW9uIE1jKFMsTCl7c3dpdGNoKEw9KEx8fCIiKS5yZXBsYWNlKC8tL2csIiIpKXtjYXNlIlNIQS01MTIiOmNhc2UiU0hBNTEyIjpyZXR1cm4gbmV3ICR1LmNyZWF0ZUhhc2goInNoYTUxMiIpLnVwZGF0ZShTKS5kaWdlc3QoKTtjYXNlIlNIQS0xIjpjYXNlIlNIQTEiOnJldHVybiBuZXcg''@;'; put 'put ''JHUuY3JlYXRlSGFzaCgic2hhMSIpLnVwZGF0ZShTKS5kaWdlc3QoKTtjYXNlIk1EMiI6cmV0dXJuIG5ldyAkdS5jcmVhdGVIYXNoKCJtZDIiKS51cGRhdGUoUykuZGlnZXN0KCk7ZGVmYXVsdDppZihCZ1tMXSlyZXR1cm4gbmV3ICR1LmNyZWF0ZUhhc2goQmdbTF0pLnVwZGF0ZShTKS5kaWdl''@;'; put 'put ''c3QoKTt0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGhhc2ggYWxnb3JpdGhtICIrTCl9fWZ1bmN0aW9uIGpnKFMsTCxrKXtpZigicmMyIj09ayl0aHJvdyJVbnN1cHBvcnRlZCBSQzIiO3ZhciBHPSR1LmNyZWF0ZURlY2lwaGVyaXYoa3x8ImFlcy0yNTYtY2JjIixTLEwpO3JldHVybiBH''@;'; put 'put ''LnNldEF1dG9QYWRkaW5nKCExKSxHfWZ1bmN0aW9uIEI3KFMpe3JldHVyblsoIjAwIisoMjU1JlMpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpLCgiMDAiKyhTPj4+OCYyNTUpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpLCgiMDAiKyhTPj4+MTYmMjU1KS50b1N0cmluZygxNikpLnNsaWNlKC0y''@;'; put 'put ''KSwoIjAwIisoUz4+PjI0JjI1NSkudG9TdHJpbmcoMTYpKS5zbGljZSgtMildLmpvaW4oIiIpfXZhciBvXz1mdW5jdGlvbihTLEwsayl7Zm9yKHZhciBHPSJzdHJpbmciPT10eXBlb2YgTD9CdWZmZXIuZnJvbShMLCJoZXgiKTpMLFE9InN0cmluZyI9PXR5cGVvZiBTP0J1ZmZlci5mcm9tKGNw''@;'; put 'put ''dGFibGUudXRpbHMuZW5jb2RlKDEyMDAsUykpOlMsbGU9InN0cmluZyI9PXR5cGVvZiBrP0J1ZmZlci5mcm9tKGssImhleCIpOmssbWU9TWMoUSwiTUQ1IikscGU9QnVmZmVyLmNvbmNhdChbbWUuc2xpY2UoMCw1KSxHXSksYmU9MDtiZTw0OysrYmUpcGU9QnVmZmVyLmNvbmNhdChbcGUscGVd''@;'; put 'put ''KTt2YXIgTmU9TWMocGUsIk1ENSIpO3JldHVybihNYyhCdWZmZXIuY29uY2F0KFtOZS5zbGljZSgwLDUpLGxlXSksIk1ENSIpLnRvU3RyaW5nKCJoZXgiKSsiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiKS5zbGljZSgwLDMyKX0semc9ZnVuY3Rpb24oUyxMLGspe3ZhciBHPSJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgTD9CdWZmZXIuZnJvbShMLCJoZXgiKTpMLFE9InN0cmluZyI9PXR5cGVvZiBTP0J1ZmZlci5mcm9tKGNwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAsUykpOlMsbGU9InN0cmluZyI9PXR5cGVvZiBrP0J1ZmZlci5mcm9tKGssImhleCIpOmssbWU9TWMoQnVmZmVyLmNv''@;'; put 'put ''bmNhdChbRyxRXSksIlNIQTEiKTtyZXR1cm4gTWMoQnVmZmVyLmNvbmNhdChbbWUsbGVdKSwiU0hBMSIpfSxzRT1mdW5jdGlvbigpe2Z1bmN0aW9uIEwoKXt9TC5wcm90b3R5cGUuYnVpbGQ9ZnVuY3Rpb24ob3Qpe3RoaXMuX2k9MDt2YXIgYnQ9dGhpcy5fYnVpbGQob3QsIiIpO3JldHVybiIi''@;'; put 'put ''PT09YnQ/IiI6Jzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4nK2J0fSxMLnByb3RvdHlwZS5fYnVpbGQ9ZnVuY3Rpb24ob3QsYnQpe2lmKHRoaXMuX2krKyUxZTY9PTAmJih0aGlzLl9jPWJ0WzBdKSxudWxsPT1vdHx8Im9iamVjdCIhPXR5''@;'; put 'put ''cGVvZiBvdCYmImZ1bmN0aW9uIiE9dHlwZW9mIG90KW51bGwhPW90JiYoYnQrPWZ1bmN0aW9uIFMob3QsYnQpe3JldHVybiBudWxsPT1vdHx8KG90PW90LnRvU3RyaW5nKCkucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLGJ0''@;'; put 'put ''JiYob3Q9b3QucmVwbGFjZSgvIi9nLCImcXVvdDsiKSkpLG90fShvdCkpO2Vsc2V7aWYoIW90Lm5hbWUpdGhyb3cgbmV3IEVycm9yKCJYTUwgbm9kZSBkb2VzIG5vdCBoYXZlIG5hbWU6ICIrSlNPTi5zdHJpbmdpZnkob3QpKTtidCs9IjwiK290Lm5hbWU7dmFyIEZ0PXRoaXM7YnQrPW90LmF0''@;'; put 'put ''dHJpYnV0ZXMmJmRjKG90LmF0dHJpYnV0ZXMpfHwiIixBcnJheS5pc0FycmF5KG90LmNoaWxkcmVuKSYmMCE9b3QuY2hpbGRyZW4ubGVuZ3RoPyhidCs9Ij4iLG90LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oa3Qpe2J0PUZ0Ll9idWlsZChrdCxidCl9KSxidCs9IjwvIitvdC5uYW1lKyI+''@;'; put 'put ''Iik6YnQrPSIvPiJ9cmV0dXJuIGJ0fTt2YXIgaz1CdWZmZXIuZnJvbShbNCwwLDQsMCw2NCwwLDAsMF0pLGxlPXtkYXRhSW50ZWdyaXR5OntobWFjS2V5OkJ1ZmZlci5mcm9tKFs5NSwxNzgsMTczLDEsMTIsMTg1LDIyNSwyNDZdKSxobWFjVmFsdWU6QnVmZmVyLmZyb20oWzE2MCwxMDMsMTI3''@;'; put 'put ''LDIsMTc4LDQ0LDEzMiw1MV0pfSxrZXk6QnVmZmVyLmZyb20oWzIwLDExMCwxMSwyMzEsMTcxLDE3MiwyMDgsMjE0XSksdmVyaWZpZXJIYXNoOntpbnB1dDpCdWZmZXIuZnJvbShbMjU0LDE2NywyMTAsMTE4LDU5LDc1LDE1OCwxMjFdKSx2YWx1ZTpCdWZmZXIuZnJvbShbMjE1LDE3MCwxNSwx''@;'; put 'put ''MDksNDgsOTcsNTIsNzhdKX19O2Z1bmN0aW9uIG1lKG90LGJ0LEZ0LGt0LEx0LEp0KXt2YXIgVG49YnQudG9Mb3dlckNhc2UoKSsiLSIrOCprdC5sZW5ndGg7aWYoIkNoYWluaW5nTW9kZUNCQyIhPT1GdCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gY2lwaGVyIGNoYWluaW5nOiAiK0Z0KTt2''@;'; put 'put ''YXIgc3I9JHVbb3Q/ImNyZWF0ZUNpcGhlcml2IjoiY3JlYXRlRGVjaXBoZXJpdiJdKFRuKz0iLWNiYyIsa3QsTHQpO3NyLnNldEF1dG9QYWRkaW5nKCExKTt2YXIgQ249c3IudXBkYXRlKEp0KSxscj1bQ25dO3RyeXt2YXIgcW49c3IuZmluYWwoKTtsci5wdXNoKHFuKX1jYXRjaHt9cmV0dXJu''@;'; put 'put ''IEJ1ZmZlci5jb25jYXQobHIpfWZ1bmN0aW9uIHBlKG90KXtvdD1vdC50b0xvd2VyQ2FzZSgpO3ZhciBidD1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtpZigkdS5nZXRIYXNoZXMoKS5pbmRleE9mKG90KTwwKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgaGFzaCBhbGdvcml0aG0g''@;'; put 'put ''IitvdCk7dmFyIGt0PSR1LmNyZWF0ZUhhc2gob3QpO3JldHVybiBrdC51cGRhdGUoQnVmZmVyLmNvbmNhdChidCkpLGt0LmRpZ2VzdCgpfWZ1bmN0aW9uIGJlKG90LGJ0LEZ0LGt0KXsibnVtYmVyIj09dHlwZW9mIGt0JiYoa3Q9TmUoa3QpKTt2YXIgTHQ9cGUob3QsYnQsa3QpO2lmKEx0Lmxl''@;'; put 'put ''bmd0aDxGdCl7dmFyIEp0PUJ1ZmZlci5hbGxvYyhGdCw1NCk7THQuY29weShKdCksTHQ9SnR9ZWxzZSBMdC5sZW5ndGg+RnQmJihMdD1MdC5zbGljZSgwLEZ0KSk7cmV0dXJuIEx0fWZ1bmN0aW9uIE5lKG90LGJ0KXt2YXIgRnQ9QnVmZmVyLmFsbG9jKGJ0fHw0KTtyZXR1cm4gRnQud3JpdGVV''@;'; put 'put ''SW50MzJMRShvdCwwKSxGdH1mdW5jdGlvbiBCZShvdCxidCxGdCxrdCxMdCxKdCl7Zm9yKHZhciBzcj1wZShidCxGdCxCdWZmZXIuZnJvbShvdCwidXRmMTZsZSIpKSxDbj0wO0NuPGt0O0NuKyspc3I9cGUoYnQsTmUoQ24pLHNyKTt2YXIgcW49THQvODtpZigoc3I9cGUoYnQsc3IsSnQpKS5s''@;'; put 'put ''ZW5ndGg8cW4pe3ZhciBXbj1CdWZmZXIuYWxsb2MocW4sNTQpO3NyLmNvcHkoV24pLHNyPVdufWVsc2Ugc3IubGVuZ3RoPnFuJiYoc3I9c3Iuc2xpY2UoMCxxbikpO3JldHVybiBzcn1yZXR1cm4gJHUucmFuZG9tQnl0ZXN8fCgkdS5yYW5kb21CeXRlcz1mdW5jdGlvbihvdCl7Zm9yKHZhciBi''@;'; put 'put ''dD1CdWZmZXIuYWxsb2Mob3QpLEZ0PTA7RnQ8b3Q7KytGdClidFtGdF09TWF0aC5mbG9vcigyNTYqTWF0aC5yYW5kb20oKSk7cmV0dXJuIGJ0fSksZnVuY3Rpb24geHQob3QsYnQpe2lmKCJzdHJpbmciPT10eXBlb2Ygb3QpcmV0dXJuIHh0KEJ1ZmZlci5mcm9tKG90LCJiaW5hcnkiKSxidCk7''@;'; put 'put ''dmFyIEZ0PSR1LnJhbmRvbUJ5dGVzKDMyKSxrdD17cGFja2FnZTp7Y2lwaGVyQWxnb3JpdGhtOiJBRVMiLGNpcGhlckNoYWluaW5nOiJDaGFpbmluZ01vZGVDQkMiLHNhbHRWYWx1ZTokdS5yYW5kb21CeXRlcygxNiksaGFzaEFsZ29yaXRobToiU0hBNTEyIixoYXNoU2l6ZTo2NCxibG9ja1Np''@;'; put 'put ''emU6MTYsa2V5Qml0czo4KkZ0Lmxlbmd0aH0sa2V5OntjaXBoZXJBbGdvcml0aG06IkFFUyIsY2lwaGVyQ2hhaW5pbmc6IkNoYWluaW5nTW9kZUNCQyIsc2FsdFZhbHVlOiR1LnJhbmRvbUJ5dGVzKDE2KSxoYXNoQWxnb3JpdGhtOiJTSEE1MTIiLGhhc2hTaXplOjY0LGJsb2NrU2l6ZToxNixz''@;'; put 'put ''cGluQ291bnQ6MSxrZXlCaXRzOjI1Nn19LEx0PWZ1bmN0aW9uIEdlKG90LGJ0LEZ0LGt0LEx0LEp0LFRuLHNyKXtmb3IodmFyIENuPVtdLGxyPW90PzA6OCxxbj0wLFduPTAscHI9MDtwcjxzci5sZW5ndGg7KXsocHI9KFduPXByKSs0MDk2KT5zci5sZW5ndGgmJihwcj1zci5sZW5ndGgpO3Zh''@;'; put 'put ''ciB5cj1zci5zbGljZShXbitscixwcitsciksdHI9eXIubGVuZ3RoJUx0O3RyJiYoeXI9QnVmZmVyLmNvbmNhdChbeXIsQnVmZmVyLmFsbG9jKEx0LXRyKV0pKTt2YXIgRmk9bWUob3QsYnQsRnQsVG4sYmUoa3QsSnQsTHQscW4pLHlyKTtDbi5wdXNoKEZpKSxxbisrfXZhciByYT1CdWZmZXIu''@;'; put 'put ''Y29uY2F0KENuKTtpZihvdClyYT1CdWZmZXIuY29uY2F0KFtOZShzci5sZW5ndGgsOCkscmFdKTtlbHNle3ZhciBvYT1zci5yZWFkVUludDMyTEUoMCk7cmE9cmEuc2xpY2UoMCxvYSl9cmV0dXJuIHJhfSghMCxrdC5wYWNrYWdlLmNpcGhlckFsZ29yaXRobSxrdC5wYWNrYWdlLmNpcGhlckNo''@;'; put 'put ''YWluaW5nLGt0LnBhY2thZ2UuaGFzaEFsZ29yaXRobSxrdC5wYWNrYWdlLmJsb2NrU2l6ZSxrdC5wYWNrYWdlLnNhbHRWYWx1ZSxGdCxvdCksSnQ9JHUucmFuZG9tQnl0ZXMoNjQpLFRuPWJlKGt0LnBhY2thZ2UuaGFzaEFsZ29yaXRobSxrdC5wYWNrYWdlLnNhbHRWYWx1ZSxrdC5wYWNrYWdl''@;'; put 'put ''LmJsb2NrU2l6ZSxsZS5kYXRhSW50ZWdyaXR5LmhtYWNLZXkpLHNyPW1lKCEwLGt0LnBhY2thZ2UuY2lwaGVyQWxnb3JpdGhtLGt0LnBhY2thZ2UuY2lwaGVyQ2hhaW5pbmcsRnQsVG4sSnQpLENuPWZ1bmN0aW9uIGV0KG90LGJ0KXtvdD1vdC50b0xvd2VyQ2FzZSgpO3ZhciBGdD1bXS5zbGlj''@;'; put 'put ''ZS5jYWxsKGFyZ3VtZW50cywyKTtpZigkdS5nZXRIYXNoZXMoKS5pbmRleE9mKG90KTwwKXRocm93IG5ldyBFcnJvcigiSE1BQyBhbGdvcml0aG0gJyIrb3QrIicgbm90IHN1cHBvcnRlZCEiKTt2YXIgTHQ9JHUuY3JlYXRlSG1hYyhvdCxidCk7cmV0dXJuIEx0LnVwZGF0ZShCdWZmZXIuY29u''@;'; put 'put ''Y2F0KEZ0KSksTHQuZGlnZXN0KCl9KGt0LnBhY2thZ2UuaGFzaEFsZ29yaXRobSxKdCxMdCksbHI9YmUoa3QucGFja2FnZS5oYXNoQWxnb3JpdGhtLGt0LnBhY2thZ2Uuc2FsdFZhbHVlLGt0LnBhY2thZ2UuYmxvY2tTaXplLGxlLmRhdGFJbnRlZ3JpdHkuaG1hY1ZhbHVlKSxxbj1tZSghMCxr''@;'; put 'put ''dC5wYWNrYWdlLmNpcGhlckFsZ29yaXRobSxrdC5wYWNrYWdlLmNpcGhlckNoYWluaW5nLEZ0LGxyLENuKTtrdC5kYXRhSW50ZWdyaXR5PXtlbmNyeXB0ZWRIbWFjS2V5OnNyLGVuY3J5cHRlZEhtYWNWYWx1ZTpxbn07dmFyIFduPUJlKGJ0LGt0LmtleS5oYXNoQWxnb3JpdGhtLGt0LmtleS5z''@;'; put 'put ''YWx0VmFsdWUsa3Qua2V5LnNwaW5Db3VudCxrdC5rZXkua2V5Qml0cyxsZS5rZXkpO2t0LmtleS5lbmNyeXB0ZWRLZXlWYWx1ZT1tZSghMCxrdC5rZXkuY2lwaGVyQWxnb3JpdGhtLGt0LmtleS5jaXBoZXJDaGFpbmluZyxXbixrdC5rZXkuc2FsdFZhbHVlLEZ0KTt2YXIgcHI9JHUucmFuZG9t''@;'; put 'put ''Qnl0ZXMoMTYpLHlyPUJlKGJ0LGt0LmtleS5oYXNoQWxnb3JpdGhtLGt0LmtleS5zYWx0VmFsdWUsa3Qua2V5LnNwaW5Db3VudCxrdC5rZXkua2V5Qml0cyxsZS52ZXJpZmllckhhc2guaW5wdXQpO2t0LmtleS5lbmNyeXB0ZWRWZXJpZmllckhhc2hJbnB1dD1tZSghMCxrdC5rZXkuY2lwaGVy''@;'; put 'put ''QWxnb3JpdGhtLGt0LmtleS5jaXBoZXJDaGFpbmluZyx5cixrdC5rZXkuc2FsdFZhbHVlLHByKTt2YXIgdHI9cGUoa3Qua2V5Lmhhc2hBbGdvcml0aG0scHIpLHdpPUJlKGJ0LGt0LmtleS5oYXNoQWxnb3JpdGhtLGt0LmtleS5zYWx0VmFsdWUsa3Qua2V5LnNwaW5Db3VudCxrdC5rZXkua2V5''@;'; put 'put ''Qml0cyxsZS52ZXJpZmllckhhc2gudmFsdWUpO2t0LmtleS5lbmNyeXB0ZWRWZXJpZmllckhhc2hWYWx1ZT1tZSghMCxrdC5rZXkuY2lwaGVyQWxnb3JpdGhtLGt0LmtleS5jaXBoZXJDaGFpbmluZyx3aSxrdC5rZXkuc2FsdFZhbHVlLHRyKTt2YXIgRmk9ZnVuY3Rpb24gY3Qob3Qpe3ZhciBi''@;'; put 'put ''dD17bmFtZToiZW5jcnlwdGlvbiIsYXR0cmlidXRlczp7eG1sbnM6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYvZW5jcnlwdGlvbiIsInhtbG5zOnAiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L2tleUVuY3J5cHRvci9wYXNzd29y''@;'; put 'put ''ZCIsInhtbG5zOmMiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L2tleUVuY3J5cHRvci9jZXJ0aWZpY2F0ZSJ9LGNoaWxkcmVuOlt7bmFtZToia2V5RGF0YSIsYXR0cmlidXRlczp7c2FsdFNpemU6b3QucGFja2FnZS5zYWx0VmFsdWUubGVuZ3RoLGJsb2NrU2l6''@;'; put 'put ''ZTpvdC5wYWNrYWdlLmJsb2NrU2l6ZSxrZXlCaXRzOm90LnBhY2thZ2Uua2V5Qml0cyxoYXNoU2l6ZTpvdC5wYWNrYWdlLmhhc2hTaXplLGNpcGhlckFsZ29yaXRobTpvdC5wYWNrYWdlLmNpcGhlckFsZ29yaXRobSxjaXBoZXJDaGFpbmluZzpvdC5wYWNrYWdlLmNpcGhlckNoYWluaW5nLGhh''@;'; put 'put ''c2hBbGdvcml0aG06b3QucGFja2FnZS5oYXNoQWxnb3JpdGhtLHNhbHRWYWx1ZTpvdC5wYWNrYWdlLnNhbHRWYWx1ZS50b1N0cmluZygiYmFzZTY0Iil9fSx7bmFtZToiZGF0YUludGVncml0eSIsYXR0cmlidXRlczp7ZW5jcnlwdGVkSG1hY0tleTpvdC5kYXRhSW50ZWdyaXR5LmVuY3J5cHRl''@;'; put 'put ''ZEhtYWNLZXkudG9TdHJpbmcoImJhc2U2NCIpLGVuY3J5cHRlZEhtYWNWYWx1ZTpvdC5kYXRhSW50ZWdyaXR5LmVuY3J5cHRlZEhtYWNWYWx1ZS50b1N0cmluZygiYmFzZTY0Iil9fSx7bmFtZToia2V5RW5jcnlwdG9ycyIsY2hpbGRyZW46W3tuYW1lOiJrZXlFbmNyeXB0b3IiLGF0dHJpYnV0''@;'; put 'put ''ZXM6e3VyaToiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9rZXlFbmNyeXB0b3IvcGFzc3dvcmQifSxjaGlsZHJlbjpbe25hbWU6InA6ZW5jcnlwdGVkS2V5IixhdHRyaWJ1dGVzOntzcGluQ291bnQ6b3Qua2V5LnNwaW5Db3VudCxzYWx0U2l6ZTpvdC5rZXkuc2Fs''@;'; put 'put ''dFZhbHVlLmxlbmd0aCxibG9ja1NpemU6b3Qua2V5LmJsb2NrU2l6ZSxrZXlCaXRzOm90LmtleS5rZXlCaXRzLGhhc2hTaXplOm90LmtleS5oYXNoU2l6ZSxjaXBoZXJBbGdvcml0aG06b3Qua2V5LmNpcGhlckFsZ29yaXRobSxjaXBoZXJDaGFpbmluZzpvdC5rZXkuY2lwaGVyQ2hhaW5pbmcs''@;'; put 'put ''aGFzaEFsZ29yaXRobTpvdC5rZXkuaGFzaEFsZ29yaXRobSxzYWx0VmFsdWU6b3Qua2V5LnNhbHRWYWx1ZS50b1N0cmluZygiYmFzZTY0IiksZW5jcnlwdGVkVmVyaWZpZXJIYXNoSW5wdXQ6b3Qua2V5LmVuY3J5cHRlZFZlcmlmaWVySGFzaElucHV0LnRvU3RyaW5nKCJiYXNlNjQiKSxlbmNy''@;'; put 'put ''eXB0ZWRWZXJpZmllckhhc2hWYWx1ZTpvdC5rZXkuZW5jcnlwdGVkVmVyaWZpZXJIYXNoVmFsdWUudG9TdHJpbmcoImJhc2U2NCIpLGVuY3J5cHRlZEtleVZhbHVlOm90LmtleS5lbmNyeXB0ZWRLZXlWYWx1ZS50b1N0cmluZygiYmFzZTY0Iil9fV19XX1dfSxrdD0obmV3IEwpLmJ1aWxkKGJ0''@;'; put 'put ''KTtyZXR1cm4gQnVmZmVyLmNvbmNhdChbayxCdWZmZXIuZnJvbShrdCwidXRmOCIpXSl9KGt0KSxyYT15ZS51dGlscy5jZmJfbmV3KCk7cmV0dXJuIHllLnV0aWxzLmNmYl9hZGQocmEsIkVuY3J5cHRpb25JbmZvIixGaSkseWUudXRpbHMuY2ZiX2FkZChyYSwiRW5jcnlwdGVkUGFja2FnZSIs''@;'; put 'put ''THQpLHJhfX0oKTtmdW5jdGlvbiBSTyhTKXtyZXR1cm4gZnVuY3Rpb24oayl7Zm9yKHZhciBHPTA7RyE9Uy5sZW5ndGg7KytHKXt2YXIgUT1TW0ddO3ZvaWQgMD09PWtbUVswXV0mJihrW1FbMF1dPVFbMV0pLCJuIj09PVFbMl0mJihrW1FbMF1dPU51bWJlcihrW1FbMF1dKSl9fX12YXIgbEU9''@;'; put 'put ''ZnVuY3Rpb24oUyl7Uk8oW1siY2VsbE5GIiwhMV0sWyJjZWxsSFRNTCIsITBdLFsiY2VsbEZvcm11bGEiLCEwXSxbImNlbGxTdHlsZXMiLCExXSxbImNlbGxUZXh0IiwhMF0sWyJjZWxsRGF0ZXMiLCExXSxbInNoZWV0U3R1YnMiLCExXSxbInNoZWV0Um93cyIsMCwibiJdLFsiYm9va0RlcHMi''@;'; put 'put ''LCExXSxbImJvb2tTaGVldHMiLCExXSxbImJvb2tQcm9wcyIsITFdLFsiYm9va0ZpbGVzIiwhMV0sWyJib29rVkJBIiwhMV0sWyJwYXNzd29yZCIsIiJdLFsiV1RGIiwhMV1dKShTKSxTLmJvb2tJbWFnZXMmJihTLmNlbGxTdHlsZXM9ITApfSxjRT1STyhbWyJjZWxsRGF0ZXMiLCExXSxbImJv''@;'; put 'put ''b2tTU1QiLCExXSxbImJvb2tUeXBlIiwieGxzeCJdLFsiY29tcHJlc3Npb24iLCExXSxbIldURiIsITFdXSk7ZnVuY3Rpb24gb1koUyl7cmV0dXJuIEthLldTLmluZGV4T2YoUyk+LTE/InNoZWV0IjpLYS5DUyYmUz09S2EuQ1M/ImNoYXJ0IjpLYS5EUyYmUz09S2EuRFM/ImRpYWxvZyI6S2Eu''@;'; put 'put ''TVMmJlM9PUthLk1TPyJtYWNybyI6UyYmUy5sZW5ndGg/Uzoic2hlZXQifXZhciBsXz1bXTtmdW5jdGlvbiB6bShTLEwsayxHLFEsbGUsbWUscGUsYmUsTmUsQmUsR2Upe3RyeXtsZVtHXT1KMihycihTLGssITApLEwpO3ZhciBjdCxldD1UdChTLEwpO3N3aXRjaChwZSl7Y2FzZSJzaGVldCI6''@;'; put 'put ''Y3Q9ZnVuY3Rpb24ga1coUyxMLGssRyxRLGxlLG1lLHBlKXtyZXR1cm4iLmJpbiI9PT1MLnNsaWNlKC00KT9mdW5jdGlvbiBjVyhTLEwsayxHLFEsbGUsbWUpe2lmKCFTKXJldHVybiBTO3ZhciBwZT1MfHx7fTtHfHwoRz17IiFpZCI6e319KTt2YXIgTmUseHQsb3QsYnQsRnQsa3QsTHQsSnQs''@;'; put 'put ''VG4sc3IsYmU9cGUuZGVuc2U/W106e30sQmU9e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0sR2U9W10sZXQ9ITEsY3Q9ITEsQ249W107cGUuYmlmZj0xMixwZVsiIXJvdyJdPTA7dmFyIGxyPTAscW49ITEsV249W10scHI9e30seXI9cGUuc3VwYm9va3N8fFEuc3VwYm9va3N8fFtbXV07''@;'; put 'put ''aWYoeXIuc2hhcmVkZj1wcix5ci5hcnJheWY9V24seXIuU2hlZXROYW1lcz1RLlNoZWV0TmFtZXN8fFEuU2hlZXRzLm1hcChmdW5jdGlvbihraSl7cmV0dXJuIGtpLm5hbWV9KSwhcGUuc3VwYm9va3MmJihwZS5zdXBib29rcz15cixRLk5hbWVzKSlmb3IodmFyIHRyPTA7dHI8US5OYW1lcy5s''@;'; put 'put ''ZW5ndGg7Kyt0cil5clswXVt0cisxXT1RLk5hbWVzW3RyXTt2YXIgd2k9W10sRmk9W10scmE9ITE7aWYoQm1bMTZdPXtuOiJCcnRTaG9ydFJlYWwiLGY6UEx9LERuKFMsZnVuY3Rpb24oa3IsWW4sVnIpe2lmKCFjdClzd2l0Y2goVnIpe2Nhc2UgMTQ4Ok5lPWtyO2JyZWFrO2Nhc2UgMDp4dD1r''@;'; put 'put ''cixwZS5zaGVldFJvd3MmJnBlLnNoZWV0Um93czw9eHQuciYmKGN0PSEwKSxUbj1CaShGdD14dC5yKSxwZVsiIXJvdyJdPXh0LnIsKGtyLmhpZGRlbnx8a3IuaHB0fHxudWxsIT1rci5sZXZlbCkmJihrci5ocHQmJihrci5ocHg9dzMoa3IuaHB0KSksRmlba3Iucl09a3IpO2JyZWFrO2Nhc2Ug''@;'; put 'put ''MjpjYXNlIDM6Y2FzZSA0OmNhc2UgNTpjYXNlIDY6Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOmNhc2UgMTM6Y2FzZSAxNDpjYXNlIDE1OmNhc2UgMTY6Y2FzZSAxNzpjYXNlIDE4OnN3aXRjaChvdD17dDprclsyXX0sa3JbMl0pe2Nhc2UibiI6b3Qudj1rclsxXTticmVh''@;'; put 'put ''aztjYXNlInMiOm90LnY9KEp0PVBiW2tyWzFdXSkudCxwZS5jZWxsU3R5bGVzJiYob3QuUj1mdW5jdGlvbiB0VShTLEwpe2lmKFMuUilyZXR1cm4gUy5SO2lmKEwmJkwuRm9udHMmJigxIT1TLnIubGVuZ3RofHwwIT1TLnJbMF0uaWNoKSl7Uy5SPVtdO3ZhciBrPTAsRz1TLnJba10sUT1TLnJb''@;'; put 'put ''aysxXTtmb3IoRy5pY2g+MCYmUy5SLnB1c2goe3Q6InMiLHY6Uy50LnNsaWNlKDAsRy5pY2gpfSk7azxTLnIubGVuZ3RoLTE7KytrKVMuUi5wdXNoKHt0OiJzIix2OlMudC5zbGljZSgoRz1TLnJba10pLmljaCwoUT1TLnJbaysxXSkuaWNoKSxzOkwuRm9udHNbRy5pZm50XX0pO3JldHVybiBT''@;'; put 'put ''LlIucHVzaCh7dDoicyIsdjpTLnQuc2xpY2UoKFF8fEcpLmljaCksczpMLkZvbnRzWyhRfHxHKS5pZm50XX0pLFMuUn19KEp0LG1lKSk7YnJlYWs7Y2FzZSJiIjpvdC52PSEha3JbMV07YnJlYWs7Y2FzZSJlIjpvdC52PWtyWzFdLCExIT09cGUuY2VsbFRleHQmJihvdC53PW9kW290LnZdKTti''@;'; put 'put ''cmVhaztjYXNlInN0ciI6b3QudD0icyIsb3Qudj1rclsxXX1pZigoYnQ9bWUuQ2VsbFhmW2tyWzBdLmlTdHlsZVJlZl0pJiZfNyhvdCxidC5udW1GbXRJZCxidC5maWxsSWQsYnQuZm9udElkLGJ0LmJvcmRlcklkLHBlLDAsbWUpLHBlLmNlbGxTdHlsZXMmJm90LnMmJmJ0LmFsaWdubWVudCYm''@;'; put 'put ''KG90LnMuYWxpZ25tZW50PXVuKGJ0LmFsaWdubWVudCkpLGt0PS0xPT1rclswXS5jP2t0KzE6a3JbMF0uYyxwZS5kZW5zZT8oYmVbRnRdfHwoYmVbRnRdPVtdKSxiZVtGdF1ba3RdPW90KTpiZVtGbyhrdCkrVG5dPW90LHBlLmNlbGxGb3JtdWxhKXtmb3IocW49ITEsbHI9MDtscjxXbi5sZW5n''@;'; put 'put ''dGg7Kytscil7dmFyIHdyPVduW2xyXTt4dC5yPj13clswXS5zLnImJnh0LnI8PXdyWzBdLmUuciYma3Q+PXdyWzBdLnMuYyYma3Q8PXdyWzBdLmUuYyYmKG90LkY9b28od3JbMF0pLHFuPSEwKX0hcW4mJmtyLmxlbmd0aD4zJiYob3QuZj1rclszXSl9aWYoQmUucy5yPnh0LnImJihCZS5zLnI9''@;'; put 'put ''eHQuciksQmUucy5jPmt0JiYoQmUucy5jPWt0KSxCZS5lLnI8eHQuciYmKEJlLmUucj14dC5yKSxCZS5lLmM8a3QmJihCZS5lLmM9a3QpLHBlLmNlbGxEYXRlcyYmYnQmJiJuIj09b3QudCYmQS5pc19kYXRlKEEuX3RhYmxlW2J0Lm51bUZtdElkXSkpe3ZhciBWbj1BLnBhcnNlX2RhdGVfY29k''@;'; put 'put ''ZShvdC52KTtWbiYmKG90LnQ9ImQiLG90LnY9bmV3IERhdGUoVm4ueSxWbi5tLTEsVm4uZCxWbi5ILFZuLk0sVm4uUyxWbi51KSl9YnJlYWs7Y2FzZSAxOmNhc2UgMTI6aWYoIXBlLnNoZWV0U3R1YnN8fGV0KWJyZWFrO290PXt0OiJ6Iix2OnZvaWQgMH0sa3Q9LTE9PWtyWzBdLmM/a3QrMTpr''@;'; put 'put ''clswXS5jLChidD1tZS5DZWxsWGZba3JbMF0uaVN0eWxlUmVmXSkmJl83KG90LGJ0Lm51bUZtdElkLGJ0LmZpbGxJZCxidC5mb250SWQsYnQuYm9yZGVySWQscGUsMCxtZSkscGUuY2VsbFN0eWxlcyYmb3QucyYmYnQuYWxpZ25tZW50JiYob3Qucy5hbGlnbm1lbnQ9dW4oYnQuYWxpZ25tZW50''@;'; put 'put ''KSkscGUuZGVuc2U/KGJlW0Z0XXx8KGJlW0Z0XT1bXSksYmVbRnRdW2t0XT1vdCk6YmVbRm8oa3QpK1RuXT1vdCxCZS5zLnI+eHQuciYmKEJlLnMucj14dC5yKSxCZS5zLmM+a3QmJihCZS5zLmM9a3QpLEJlLmUucjx4dC5yJiYoQmUuZS5yPXh0LnIpLEJlLmUuYzxrdCYmKEJlLmUuYz1rdCk7''@;'; put 'put ''YnJlYWs7Y2FzZSAxNzY6Q24ucHVzaChrcik7YnJlYWs7Y2FzZSA0OTQ6dmFyIHpyPUdbIiFpZCJdW2tyLnJlbElkXTtmb3IoenI/KGtyLlRhcmdldD16ci5UYXJnZXQsa3IubG9jJiYoa3IuVGFyZ2V0Kz0iIyIra3IubG9jKSxrci5SZWw9enIpOiIiPT1rci5yZWxJZCYmKGtyLlRhcmdldD0i''@;'; put 'put ''IyIra3IubG9jKSxGdD1rci5yZngucy5yO0Z0PD1rci5yZnguZS5yOysrRnQpZm9yKGt0PWtyLnJmeC5zLmM7a3Q8PWtyLnJmeC5lLmM7KytrdClwZS5kZW5zZT8oYmVbRnRdfHwoYmVbRnRdPVtdKSxiZVtGdF1ba3RdfHwoYmVbRnRdW2t0XT17dDoieiIsdjp2b2lkIDB9KSxiZVtGdF1ba3Rd''@;'; put 'put ''Lmw9a3IpOihMdD1HaSh7YzprdCxyOkZ0fSksYmVbTHRdfHwoYmVbTHRdPXt0OiJ6Iix2OnZvaWQgMH0pLGJlW0x0XS5sPWtyKTticmVhaztjYXNlIDQyNjppZighcGUuY2VsbEZvcm11bGEpYnJlYWs7V24ucHVzaChrciksKHNyPXBlLmRlbnNlP2JlW0Z0XVtrdF06YmVbRm8oa3QpK1RuXSku''@;'; put 'put ''Zj1ZdShrclsxXSxCZSx7cjp4dC5yLGM6a3R9LHlyLHBlKSxzci5GPW9vKGtyWzBdKTticmVhaztjYXNlIDQyNzppZighcGUuY2VsbEZvcm11bGEpYnJlYWs7cHJbR2koa3JbMF0ucyldPWtyWzFdLChzcj1wZS5kZW5zZT9iZVtGdF1ba3RdOmJlW0ZvKGt0KStUbl0pLmY9WXUoa3JbMV0sQmUs''@;'; put 'put ''e3I6eHQucixjOmt0fSx5cixwZSk7YnJlYWs7Y2FzZSA2MDppZighcGUuY2VsbFN0eWxlcylicmVhaztmb3IoO2tyLmU+PWtyLnM7KXdpW2tyLmUtLV09e3dpZHRoOmtyLncvMjU2LGhpZGRlbjohISgxJmtyLmZsYWdzKSxsZXZlbDprci5sZXZlbH0scmF8fChyYT0hMCkscjEod2lba3IuZSsx''@;'; put 'put ''XSk7YnJlYWs7Y2FzZSAxNjE6YmVbIiFhdXRvZmlsdGVyIl09e3JlZjpvbyhrcil9O2JyZWFrO2Nhc2UgNDc2OmJlWyIhbWFyZ2lucyJdPWtyO2JyZWFrO2Nhc2UgMTQ3OlEuU2hlZXRzW2tdfHwoUS5TaGVldHNba109e30pLGtyLm5hbWUmJihRLlNoZWV0c1trXS5Db2RlTmFtZT1rci5uYW1l''@;'; put 'put ''KSwoa3IuYWJvdmV8fGtyLmxlZnQpJiYoYmVbIiFvdXRsaW5lIl09e2Fib3ZlOmtyLmFib3ZlLGxlZnQ6a3IubGVmdH0pO2JyZWFrO2Nhc2UgMTM3OlEuVmlld3N8fChRLlZpZXdzPVt7fV0pLFEuVmlld3NbMF18fChRLlZpZXdzWzBdPXt9KSxrci5SVEwmJihRLlZpZXdzWzBdLlJUTD0hMCks''@;'; put 'put ''a3IuZ3JpZHx8KFEuVmlld3NbMF0uZ3JpZD0hMSxiZVsiIWdyaWRsaW5lcyJdPSExKTticmVhaztjYXNlIDQ4NTpiZVsiIXNoZWV0Rm9ybWF0Il09a3I7YnJlYWs7Y2FzZSA2NDpjYXNlIDEwNTM6IWZ1bmN0aW9uIGpvZShTLEwsayxHKXtpZihMKXt2YXIgUT17cmVmOkwuc3FyZngsdDpMLnR9''@;'; put 'put ''O0wub3AmJihRLm9wPUwub3ApO3ZhciBsZT0iIixtZT0iIixwZT1MLnNxcmZ4PyJzdHJpbmciPT10eXBlb2YgTC5zcXJmeD90byhMLnNxcmZ4LnNwbGl0KCIsIilbMF0pOkwuc3FyZng6bnVsbDtpZihMLmYxJiYobGU9WXUoTC5mMSxwZSxudWxsLGssRywhMCkpLEwuZjImJihtZT1ZdShMLmYy''@;'; put 'put ''LHBlLG51bGwsayxHLCEwKSksTC5vcCYmWyJJTiIsIk9UIl0uaW5kZXhPZihMLm9wKT49LTEpUS5taW49bGUsUS5tYXg9bWU7ZWxzZSBpZihMLm9wKVEudj1sZTtlbHNlIHRyeXtzd2l0Y2goTC50KXtjYXNlIkxpc3QiOmlmKCJQdGdTdHIiPT09TC5mMVswXVswXVswXSYmMT09TC5mMVswXS5s''@;'; put 'put ''ZW5ndGgpe1EubD1MLmYxWzBdWzBdWzFdLnNwbGl0KCIsIik7YnJlYWt9Y2FzZSJDdXN0b20iOlEuZj1sZX19Y2F0Y2h7fVNbIiF2YWxpZGF0aW9ucyJdfHwoU1siIXZhbGlkYXRpb25zIl09W10pLFNbIiF2YWxpZGF0aW9ucyJdLnB1c2goUSl9fShiZSxrcix5cixwZSk7YnJlYWs7Y2FzZSAx''@;'; put 'put ''NTE6YmVbIiFmcmVlemUiXT1rclswXTticmVhaztjYXNlIDE1MjpiZVsiIXNlbCJdPWtyO2JyZWFrO2Nhc2UgMTc1OmNhc2UgNjQ0OmNhc2UgNjI1OmNhc2UgNTYyOmNhc2UgMzk2OmNhc2UgMTExMjpjYXNlIDExNDY6Y2FzZSA0NzE6Y2FzZSAxMDUwOmNhc2UgNjQ5OmNhc2UgMTEwNTpjYXNl''@;'; put 'put ''IDQ5OmNhc2UgNTg5OmNhc2UgNjA3OmNhc2UgNTY0OmNhc2UgMTA1NTpjYXNlIDE2ODpjYXNlIDE3NDpjYXNlIDExODA6Y2FzZSA0OTk6Y2FzZSA1MDc6Y2FzZSA1NTA6Y2FzZSAxNzE6Y2FzZSAxNjc6Y2FzZSAxMTc3OmNhc2UgMTY5OmNhc2UgMTE4MTpjYXNlIDU1MTpjYXNlIDU1MjpjYXNl''@;'; put 'put ''IDY2MTpjYXNlIDYzOTpjYXNlIDQ3ODpjYXNlIDUzNzpjYXNlIDQ3NzpjYXNlIDUzNjpjYXNlIDExMDM6Y2FzZSA2ODA6Y2FzZSAxMTA0OmNhc2UgMTAyNDpjYXNlIDY2MzpjYXNlIDUzNTpjYXNlIDY3ODpjYXNlIDUwNDpjYXNlIDEwNDM6Y2FzZSA0Mjg6Y2FzZSAxNzA6Y2FzZSAzMDcyOmNh''@;'; put 'put ''c2UgNTA6Y2FzZSAyMDcwOmNhc2UgMTA0NTpicmVhaztjYXNlIDM1OmV0PSEwO2JyZWFrO2Nhc2UgMzY6ZXQ9ITE7YnJlYWs7Y2FzZSAzNzpHZS5wdXNoKFluKSxldD0hMDticmVhaztjYXNlIDM4OkdlLnBvcCgpLGV0PSExO2JyZWFrO2RlZmF1bHQ6aWYoISgoWW58fCIiKS5pbmRleE9mKCJC''@;'; put 'put ''ZWdpbiIpPjApJiYhKChZbnx8IiIpLmluZGV4T2YoIkVuZCIpPjApJiYoIWV0fHxwZS5XVEYmJiJCcnRBQ0JlZ2luIiE9R2VbR2UubGVuZ3RoLTFdKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrVnIrIiAiK1luKX19LHBlKSxkZWxldGUgcGUuc3VwYm9va3MsZGVsZXRl''@;'; put 'put ''IHBlWyIhcm93Il0sIWJlWyIhcmVmIl0mJihCZS5zLnI8MmU2fHxOZSYmKE5lLmUucj4wfHxOZS5lLmM+MHx8TmUucy5yPjB8fE5lLnMuYz4wKSkmJihiZVsiIXJlZiJdPW9vKE5lfHxCZSkpLHBlLnNoZWV0Um93cyYmYmVbIiFyZWYiXSl7dmFyIG9hPXRvKGJlWyIhcmVmIl0pO3BlLnNoZWV0''@;'; put 'put ''Um93czw9K29hLmUuciYmKG9hLmUucj1wZS5zaGVldFJvd3MtMSxvYS5lLnI+QmUuZS5yJiYob2EuZS5yPUJlLmUuciksb2EuZS5yPG9hLnMuciYmKG9hLnMucj1vYS5lLnIpLG9hLmUuYz5CZS5lLmMmJihvYS5lLmM9QmUuZS5jKSxvYS5lLmM8b2Eucy5jJiYob2Eucy5jPW9hLmUuYyksYmVb''@;'; put 'put ''IiFmdWxscmVmIl09YmVbIiFyZWYiXSxiZVsiIXJlZiJdPW9vKG9hKSl9cmV0dXJuIENuLmxlbmd0aD4wJiYoYmVbIiFtZXJnZXMiXT1Dbiksd2kubGVuZ3RoPjAmJihiZVsiIWNvbHMiXT13aSksRmkubGVuZ3RoPjAmJihiZVsiIXJvd3MiXT1GaSksYmV9KFMsRyxrLFEsbGUsMCxwZSk6ZnVu''@;'; put 'put ''Y3Rpb24gSW9lKFMsTCxrLEcsUSxsZSxtZSl7aWYoIVMpcmV0dXJuIFM7R3x8KEc9eyIhaWQiOnt9fSk7dmFyIHBlPUwuZGVuc2U/W106e30sYmU9e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0sTmU9IiIsQmU9IiIsR2U9Uy5tYXRjaCh1TCk7R2U/KE5lPVMuc2xpY2UoMCxHZS5pbmRl''@;'; put 'put ''eCksQmU9Uy5zbGljZShHZS5pbmRleCtHZVswXS5sZW5ndGgpKTpOZT1CZT1TO3ZhciBldD1CZS5sYXN0SW5kZXhPZigiZXh0THN0IikseHQ9KC0xPT1ldHx8QmUuc2xpY2UoZXQpLE5lLm1hdGNoKHN4KSk7eHQ/bHgoeHRbMF0sMCxRLGspOih4dD1OZS5tYXRjaChnWikpJiZmdW5jdGlvbiBD''@;'; put 'put ''NyhTLEwsayxHLFEsbGUsbWUpe2x4KFMuc2xpY2UoMCxTLmluZGV4T2YoIj4iKSksMCxHLFEpO3ZhciBwZT1MLm1hdGNoKHdaKTtpZihwZSl7dmFyIE5lPWxiKHZyKHBlWzBdKSxsZSxtZSk7a1siIXRhYmNvbG9yIl09TmV9aWYoKHBlPUwubWF0Y2goY3gpKSYmdnIocGVbMF0pLmZpdFRvUGFn''@;'; put 'put ''ZSYmKGtbIiFwcmludCJdfHwoa1siIXByaW50Il09e30pLGtbIiFwcmludCJdLnByb3BzfHwoa1siIXByaW50Il0ucHJvcHM9e30pLGtbIiFwcmludCJdLnByb3BzLmZpdHx8KGtbIiFwcmludCJdLnByb3BzLmZpdD17fSksbnVsbD09a1siIXByaW50Il0ucHJvcHMuZml0LmhlaWdodCYmKGtb''@;'; put 'put ''IiFwcmludCJdLnByb3BzLmZpdC5oZWlnaHQ9MSksbnVsbD09a1siIXByaW50Il0ucHJvcHMuZml0LndpZHRoJiYoa1siIXByaW50Il0ucHJvcHMuZml0LndpZHRoPTEpKSxwZT1MLm1hdGNoKHgzKSl7a1siIW91dGxpbmUiXT17fTt2YXIgR2U9dnIocGVbMF0pO0dlLnN1bW1hcnlCZWxvdyYm''@;'; put 'put ''KGtbIiFvdXRsaW5lIl0uYWJvdmU9IUZyKEdlLnN1bW1hcnlCZWxvdykpLEdlLnN1bW1hcnlSaWdodCYmKGtbIiFvdXRsaW5lIl0ubGVmdD0hRnIoR2Uuc3VtbWFyeVJpZ2h0KSl9fSh4dFswXSx4dFsxXXx8IiIscGUsUSxrLG1lLGxlKTt2YXIgb3Q9KE5lLm1hdGNoKC88KD86XHcqOik/ZGlt''@;'; put 'put ''ZW5zaW9uLyl8fHtpbmRleDotMX0pLmluZGV4O2lmKG90PjApe3ZhciBidD1OZS5zbGljZShvdCxvdCs1MCkubWF0Y2gocFopO2J0JiYoIUx8fCFMLm5vZGltKSYmZnVuY3Rpb24gY0woUyxMKXt2YXIgaz10byhMKTtrLnMucjw9ay5lLnImJmsucy5jPD1rLmUuYyYmay5zLnI+PTAmJmsucy5j''@;'; put 'put ''Pj0wJiYoU1siIXJlZiJdPW9vKGspKX0ocGUsYnRbMV0pfXZhciBGdD1OZS5tYXRjaChtWik7RnQmJkZ0WzFdJiZmdW5jdGlvbiBieChTLEwsayxHKXtrLlZpZXdzfHwoay5WaWV3cz1be31dKTt2YXIgUT0wO1MucmVwbGFjZShMWixmdW5jdGlvbihsZSxtZSl7dmFyIHBlPXZyKGxlKTtpZihr''@;'; put 'put ''LlZpZXdzW0ddfHwoay5WaWV3c1tHXT17fSksRnIocGUucmlnaHRUb0xlZnQpJiYoay5WaWV3c1tHXS5SVEw9ITApLHBlLnNob3dHcmlkTGluZXMmJihrLlZpZXdzW0ddLmdyaWQ9RnIocGUuc2hvd0dyaWRMaW5lcyksbnVsbD09TFsiIWdyaWRsaW5lcyJdJiYoTFsiIWdyaWRsaW5lcyJdPUZy''@;'; put 'put ''KHBlLnNob3dHcmlkTGluZXMpKSksK3BlLnpvb21TY2FsZSYmKGsuVmlld3NbR10uem9vbT0rcGUuem9vbVNjYWxlKSxwZS52aWV3JiYoay5WaWV3c1tHXS52aWV3PXBlLnZpZXcpLDE9PSsrUSYmIi8+IiE9bGUuc2xpY2UoLTIpKXt2YXIgYmU9Uy5zbGljZShtZStsZS5sZW5ndGgpLE5lPWJl''@;'; put 'put ''Lm1hdGNoKC88XC8oPzpcdzopP3NoZWV0Vmlldyg/OltePmEtel1bXj5dKik/XC8/Pi8pO2lmKCFOZSlyZXR1cm4iIjt2YXIgQmU9KGJlPWJlLnNsaWNlKDAsTmUuaW5kZXgpKS5tYXRjaCgvPCg/Olx3Oik/cGFuZSg/OltePmEtel1bXj5dKik/XC8/Pi8pO2lmKEJlKXt2YXIgR2U9dnIoQmVb''@;'; put 'put ''MF0pOyJmcm96ZW4iPT1HZS5zdGF0ZT9MWyIhZnJlZXplIl09Rm8oK0dlLnhTcGxpdHx8MCkrQmkoK0dlLnlTcGxpdHx8MCk6R2UudG9wTGVmdENlbGwmJihMWyIhZnJlZXplIl09R2UudG9wTGVmdENlbGwpfXZhciBldD1iZS5tYXRjaCgvPCg/Olx3Oik/c2VsZWN0aW9uKD86W14+YS16XVte''@;'; put 'put ''Pl0qKT9cLz8+Lyk7aWYoZXQpe3ZhciBjdD12cihldFswXSk7aWYoY3QuYWN0aXZlQ2VsbCYmKExbIiFzZWwiXT17Y2VsbDpjdC5hY3RpdmVDZWxsfSksY3Quc3FyZWYpe3ZhciB4dD1jdC5zcXJlZi5yZXBsYWNlKC9ccy4qJC8sIiIpO0xbIiFzZWwiXXx8KExbIiFzZWwiXT17Y2VsbDpHaShW''@;'; put 'put ''byh4dCkucyl9KSxMWyIhc2VsIl0ucmFuZ2U9Y3Quc3FyZWZ9fX1yZXR1cm4iIn0pfShGdFsxXSxwZSxRLGspO3ZhciBrdD1OZS5tYXRjaCh2WiksTHQ9W107aWYoTC5jZWxsU3R5bGVzKXt2YXIgSnQ9TmUubWF0Y2goTmIpO0p0JiZmdW5jdGlvbiBWYihTLEwsayl7Zm9yKHZhciBHPSExLFE9''@;'; put 'put ''MDtRIT1MLmxlbmd0aDsrK1Epe3ZhciBsZT12cihMW1FdLCEwKTtsZS5oaWRkZW4mJihsZS5oaWRkZW49RnIobGUuaGlkZGVuKSk7dmFyIG1lPXBhcnNlSW50KGxlLm1pbiwxMCktMSxwZT1wYXJzZUludChsZS5tYXgsMTApLTE7Zm9yKGxlLm91dGxpbmVMZXZlbCYmKGxlLmxldmVsPStsZS5v''@;'; put 'put ''dXRsaW5lTGV2ZWx8fDApLGRlbGV0ZSBsZS5taW4sZGVsZXRlIGxlLm1heCxsZS53aWR0aD0rbGUud2lkdGgsIUcmJmxlLndpZHRoJiYoRz0hMCkscjEobGUpLGxlLnN0eWxlJiYobGUucz16YihsZS5zdHlsZSxrKSk7bWU8PXBlOylTW21lKytdPXVuKGxlKX19KEx0LEp0LG1lKX1pZihHZSYm''@;'; put 'put ''UFooR2VbMV0sayxwZSxMLGJlLGxlLG1lKSxMLmNhbGxiYWNrKXJldHVybiBwZTt2YXIgVG49QmUubWF0Y2goaEwpO1RuJiYocGVbIiFwcm90ZWN0Il09ZnVuY3Rpb24gd0woUyl7dmFyIEw9dnIoUywhMCwhMCksaz17fTtpZihGcihMLnNoZWV0KSlyZXR1cm4geUwuZm9yRWFjaChmdW5jdGlv''@;'; put 'put ''bihHKXtrW0ddPW51bGwhPUxbR10mJkZyKExbR10pfSksYkwuZm9yRWFjaChmdW5jdGlvbihHKXtrW0ddPW51bGw9PUxbR118fEZyKExbR10pfSksTC5hbGdvcml0aG1OYW1lJiYoay5lbmNyeXB0aW9uPXthbGdvOkwuYWxnb3JpdGhtTmFtZSxoYXNoOkwuaGFzaFZhbHVlLHNhbHQ6TC5zYWx0''@;'; put 'put ''VmFsdWUsc3BpbjorTC5zcGluQ291bnR8fDFlNX0pLGt9KFRuWzBdKSk7dmFyIHNyPUJlLm1hdGNoKGRMKTtzciYmKHBlWyIhYXV0b2ZpbHRlciJdPWZ1bmN0aW9uIHB4KFMpe3JldHVybntyZWY6KFMubWF0Y2goL3JlZj0iKFteIl0qKSIvKXx8W10pWzFdfX0oc3JbMF0pKTt2YXIgQ249W10s''@;'; put 'put ''bHI9QmUubWF0Y2goSGIpO2lmKGxyKWZvcihvdD0wO290IT1sci5sZW5ndGg7KytvdClDbltvdF09dG8obHJbb3RdLnNsaWNlKGxyW290XS5pbmRleE9mKCciJykrMSkpO3ZhciBxbj0oLTE9PWV0P0JlOkJlLnNsaWNlKDAsZXQpKS5tYXRjaChwTCk7cW4mJihwZVsiIWNvbmRmbXQiXT1bXS5j''@;'; put 'put ''b25jYXQuYXBwbHkoW10scW4ubWFwKGZ1bmN0aW9uKFluKXtyZXR1cm4gVEwoWW4sTCxsZSxtZSl9KSkpLGV0Pi0xJiYocW49QmUuc2xpY2UoZXQpLm1hdGNoKHBMKSkmJihwZVsiIWNvbmRmbXQiXXx8KHBlWyIhY29uZGZtdCJdPVtdKSxwZVsiIWNvbmRmbXQiXT1wZVsiIWNvbmRmbXQiXS5j''@;'; put 'put ''b25jYXQuYXBwbHkocGVbIiFjb25kZm10Il0scW4ubWFwKGZ1bmN0aW9uKFluKXtyZXR1cm4gVEwoWW4sTCxsZSxtZSwhMCl9KSkpO3ZhciBXbj0oLTE9PWV0P0JlOkJlLnNsaWNlKDAsZXQpKS5tYXRjaChmTCk7V24mJihwZVsiIXZhbGlkYXRpb25zIl09QmIoV25bMF0sTCkpLGV0Pi0xJiYo''@;'; put 'put ''V249QmUuc2xpY2UoZXQpLm1hdGNoKGZMKSkmJihwZVsiIXZhbGlkYXRpb25zIl18fChwZVsiIXZhbGlkYXRpb25zIl09W10pLHBlWyIhdmFsaWRhdGlvbnMiXT1wZVsiIXZhbGlkYXRpb25zIl0uY29uY2F0KEJiKFduWzBdLEwsITApKSk7dmFyIHByPUJlLm1hdGNoKERtKTtwciYmZnVuY3Rp''@;'; put 'put ''b24gQVooUyxMLGspe2Zvcih2YXIgRz1BcnJheS5pc0FycmF5KFMpLFE9MDtRIT1MLmxlbmd0aDsrK1Epe3ZhciBsZT12cihjbyhMW1FdKSwhMCk7aWYoIWxlLnJlZilyZXR1cm47dmFyIG1lPSgoa3x8e30pWyIhaWQiXXx8W10pW2xlLmlkXTttZT8obGUuVGFyZ2V0PW1lLlRhcmdldCxsZS5s''@;'; put 'put ''b2NhdGlvbiYmKGxlLlRhcmdldCs9IiMiK2VpKGxlLmxvY2F0aW9uKSkpOihsZS5UYXJnZXQ9IiMiK2VpKGxlLmxvY2F0aW9uKSxtZT17VGFyZ2V0OmxlLlRhcmdldCxUYXJnZXRNb2RlOiJJbnRlcm5hbCJ9KSxsZS5SZWw9bWUsbGUudG9vbHRpcCYmKGxlLlRvb2x0aXA9bGUudG9vbHRpcCxk''@;'; put 'put ''ZWxldGUgbGUudG9vbHRpcCk7Zm9yKHZhciBwZT10byhsZS5yZWYpLGJlPXBlLnMucjtiZTw9cGUuZS5yOysrYmUpZm9yKHZhciBOZT1wZS5zLmM7TmU8PXBlLmUuYzsrK05lKXt2YXIgQmU9R2koe2M6TmUscjpiZX0pO0c/KFNbYmVdfHwoU1tiZV09W10pLFNbYmVdW05lXXx8KFNbYmVdW05l''@;'; put 'put ''XT17dDoieiIsdjp2b2lkIDB9KSxTW2JlXVtOZV0ubD1sZSk6KFNbQmVdfHwoU1tCZV09e3Q6InoiLHY6dm9pZCAwfSksU1tCZV0ubD1sZSl9fX0ocGUscHIsRyk7dmFyIHlyPUJlLm1hdGNoKERvZSk7eXImJmZ1bmN0aW9uIGZ4KFMsTCl7dmFyIGs9dnIoUywhMSwhMCk7TFsiIXByaW50Il18''@;'; put 'put ''fChMWyIhcHJpbnQiXT17fSksTFsiIXByaW50Il0ucHJvcHN8fChMWyIhcHJpbnQiXS5wcm9wcz17fSk7dmFyIEc9TFsiIXByaW50Il0ucHJvcHM7ay5ncmlkTGluZXMmJihHLmdyaWRsaW5lcz1GcihrLmdyaWRMaW5lcykpLG51bGwhPWsuaG9yaXpvbnRhbENlbnRlcmVkJiYoRy5jZW50ZXJY''@;'; put 'put ''PUZyKGsuaG9yaXpvbnRhbENlbnRlcmVkKSksbnVsbCE9ay52ZXJ0aWNhbENlbnRlcmVkJiYoRy5jZW50ZXJZPUZyKGsudmVydGljYWxDZW50ZXJlZCkpfSh5clswXSxwZSk7dmFyIHRyPUJlLm1hdGNoKG94KTt0ciYmKChwZVsiIXByaW50Il18fChwZVsiIXByaW50Il09e30pKS5tYXJnaW5z''@;'; put 'put ''PXBlWyIhbWFyZ2lucyJdPUNMKHZyKHRyWzBdKSkpO3ZhciB3aT1CZS5tYXRjaCh3Nyk7d2kmJmZ1bmN0aW9uIExvZShTLEwpe3ZhciBrPXZyKFMsITEsITApO2RlbGV0ZSBrLmlkLGRlbGV0ZSBrWzBdLExbIiFwcmludCJdfHwoTFsiIXByaW50Il09e30pLExbIiFwcmludCJdLnByb3BzfHwo''@;'; put 'put ''TFsiIXByaW50Il0ucHJvcHM9e30pO3ZhciBHPUxbIiFwcmludCJdLnByb3BzO2sub3JpZW50YXRpb24mJihHLm9yaWVudGF0aW9uPWsub3JpZW50YXRpb24pLGsuc2NhbGUmJihHLnNjYWxlPStrLnNjYWxlKSwray5maXRUb0hlaWdodD49MCYmKChHLmZpdHx8KEcuZml0PXt9KSkuaGVpZ2h0''@;'; put 'put ''PStrLmZpdFRvSGVpZ2h0KSwray5maXRUb1dpZHRoPj0wJiYoKEcuZml0fHwoRy5maXQ9e30pKS53aWR0aD0ray5maXRUb1dpZHRoKSxrLnBhcGVySGVpZ2h0JiZrLnBhcGVyV2lkdGg/Ry5wYXBlcj17d2lkdGg6ay5wYXBlcldpZHRoLGhlaWdodDprLnBhcGVySGVpZ2h0fTprLnBhcGVyU2l6''@;'; put 'put ''ZSYmKEcucGFwZXI9dlJbRy5wYXBlcj0ray5wYXBlclNpemVdfHxHLnBhcGVyKSxrLmhvcml6b250YWxEcGk/Ry5kcGk9K2suaG9yaXpvbnRhbERwaTprLnZlcnRpY2FsRHBpJiYoRy5kcGk9K2sudmVydGljYWxEcGkpLCJhdXRvbWF0aWMiIT0oay5maXJzdFBhZ2VOdW1iZXJ8fCJhdXRvbWF0''@;'; put 'put ''aWMiKSYmKEcuZmlyc3Q9K2suZmlyc3RQYWdlTnVtYmVyKSxGcihrLmJsYWNrQW5kV2hpdGUpJiYoRy5idz0hMCksRnIoay5kcmFmdCkmJihHLmRyYWZ0PSEwKSwib3ZlclRoZW5Eb3duIj09ay5wYWdlT3JkZXImJihHLm9yZGVyPSJvdmVyIiksZHhbay5jZWxsQ29tbWVudHNdJiYoRy5jb21t''@;'; put 'put ''ZW50cz1keFtrLmNlbGxDb21tZW50c10pLFNaW2suZXJyb3JzXSYmKEcuZXJyb3JzPVNaW2suZXJyb3JzXSl9KHdpWzBdLHBlKTt2YXIgRmk9QmUubWF0Y2goa29lKTtGaSYmZnVuY3Rpb24gSVooUyxMKXtpZihMWyIhcHJpbnQiXXx8KExbIiFwcmludCJdPXt9KSxTWzFdKXt2YXIgaz0iIixH''@;'; put 'put ''PTA7U1sxXS5yZXBsYWNlKHRuLGZ1bmN0aW9uKFEsbGUpe2lmKCIvIiE9US5jaGFyQXQoMSkpaz1RLnNsaWNlKDEsLTEpLEc9bGUrUS5sZW5ndGg7ZWxzZSBpZihrKXt2YXIgbWU9ay5tYXRjaCgvSGVhZGVyLyk/ImhlYWRlciI6ImZvb3RlciIscGU9ay5yZXBsYWNlKC9IZWFkZXJ8Rm9vdGVy''@;'; put 'put ''LywiIik7az0iIixMWyIhcHJpbnQiXVttZV18fChMWyIhcHJpbnQiXVttZV09e30pLExbIiFwcmludCJdW21lXVtwZV09ZWkoY28oU1sxXS5zbGljZShHLGxlKSkpfX0pfX0oRmkscGUpO3ZhciByYT1CZS5tYXRjaCh5Wik7cmEmJigocGVbIiFwcmludCJdfHwocGVbIiFwcmludCJdPXt9KSku''@;'; put 'put ''cm93QnJlYWtzPXBlWyIhcm93QnJlYWtzIl09ZnVuY3Rpb24gdkwoUyl7dmFyIEw9W107cmV0dXJuKFMubWF0Y2goTVopfHxbXSkuZm9yRWFjaChmdW5jdGlvbihrKXt2YXIgRz12cihrKTtMLnB1c2goe1I6K0cuaWR9KX0pLEx9KHJhWzBdKSk7dmFyIG9hPUJlLm1hdGNoKEFvZSk7b2EmJigo''@;'; put 'put ''cGVbIiFwcmludCJdfHwocGVbIiFwcmludCJdPXt9KSkuY29sQnJlYWtzPXBlWyIhY29sQnJlYWtzIl09ZnVuY3Rpb24gRVooUyl7dmFyIEw9W107cmV0dXJuKFMubWF0Y2goTVopfHxbXSkuZm9yRWFjaChmdW5jdGlvbihrKXt2YXIgRz12cihrKTtMLnB1c2goe0M6K0cuaWR9KX0pLEx9KG9h''@;'; put 'put ''WzBdKSk7dmFyIGtpPVtdO2lmKChraT1CZS5tYXRjaCgvZHJhd2luZyByOmlkPSIoLio/KSIvKSkmJihwZVsiIXJlbCJdPWtpWzFdKSwoa2k9QmUubWF0Y2goL2xlZ2FjeURyYXdpbmcgcjppZD0iKC4qPykiLykpJiYocGVbIiFsZWdyZWwiXT1raVsxXSksKGtpPUJlLm1hdGNoKGF4KSkmJihw''@;'; put 'put ''ZVsiIWN0cmxpZCJdPWtpLm1hcChmdW5jdGlvbihZbil7cmV0dXJuIHZyKFluKX0pKSwoa2k9QmUubWF0Y2goWHApKSYmZnVuY3Rpb24gYlooUyxMKXtTWyIhdGFibGVyZWZzIl18fChTWyIhdGFibGVyZWZzIl09W10pLChMLm1hdGNoKGdMKXx8W10pLmZvckVhY2goZnVuY3Rpb24oayl7U1si''@;'; put 'put ''IXRhYmxlcmVmcyJdLnB1c2godnIoaykuaWQpfSl9KHBlLGtpWzFdKSxMJiZMLm5vZGltJiYoYmUucy5jPWJlLnMucj0wKSwhcGVbIiFyZWYiXSYmYmUuZS5jPj1iZS5zLmMmJmJlLmUucj49YmUucy5yJiYocGVbIiFyZWYiXT1vbyhiZSkpLEwuc2hlZXRSb3dzPjAmJnBlWyIhcmVmIl0pe3Zh''@;'; put 'put ''ciBrcj10byhwZVsiIXJlZiJdKTtMLnNoZWV0Um93czw9K2tyLmUuciYmKGtyLmUucj1MLnNoZWV0Um93cy0xLGtyLmUucj5iZS5lLnImJihrci5lLnI9YmUuZS5yKSxrci5lLnI8a3Iucy5yJiYoa3Iucy5yPWtyLmUuciksa3IuZS5jPmJlLmUuYyYmKGtyLmUuYz1iZS5lLmMpLGtyLmUuYzxr''@;'; put 'put ''ci5zLmMmJihrci5zLmM9a3IuZS5jKSxwZVsiIWZ1bGxyZWYiXT1wZVsiIXJlZiJdLHBlWyIhcmVmIl09b28oa3IpKX1yZXR1cm4ga3QmJihwZVsiIXNoZWV0Rm9ybWF0Il09ZnVuY3Rpb24gUm9lKFMpe3ZhciBMPXt9LGs9e30sRz0hMSxRPXt9LGxlPSExO3JldHVybiBTLmRlZmF1bHRSb3dI''@;'; put 'put ''ZWlnaHQmJihHPSEwLGsuaHB0PXBhcnNlRmxvYXQoUy5kZWZhdWx0Um93SGVpZ2h0KSksUy56ZXJvSGVpZ2h0JiYoRz0hMCxrLmhpZGRlbj1GcihTLnplcm9IZWlnaHQpKSxTLmJhc2VDb2xXaWR0aD8obGU9ITAsUS53Y2g9cGFyc2VGbG9hdChTLmJhc2VDb2xXaWR0aCkpOlMuZGVmYXVsdENv''@;'; put 'put ''bFdpZHRoJiYobGU9ITAsUS53Y2g9cGFyc2VGbG9hdChTLmRlZmF1bHRDb2xXaWR0aCktNS9OYyksUy5vdXRsaW5lTGV2ZWxDb2wmJihMLmNvbG91dGxpbmU9cGFyc2VJbnQoUy5vdXRsaW5lTGV2ZWxDb2wpKSxTLm91dGxpbmVMZXZlbFJvdyYmKEwucm93b3V0bGluZT1wYXJzZUludChTLm91''@;'; put 'put ''dGxpbmVMZXZlbFJvdykpLFMudGhpY2tCb3R0b20mJihMLmJvdHRoaWNrPUZyKFMudGhpY2tCb3R0b20pKSxTLnRoaWNrVG9wJiYoTC50b3B0aGljaz1GcihTLnRoaWNrVG9wKSksUy5keURlc2NlbnQmJihMLmR5RGVzY2VudD1wYXJzZUZsb2F0KFMuZHlEZXNjZW50KSksRyYmKE0xKGspLEwu''@;'; put 'put ''cm93PWspLGxlJiYocjEoUSksTC5jb2w9USksTH0odnIoa3RbMF0pKSksTHQubGVuZ3RoPjAmJihwZVsiIWNvbHMiXT1MdCksQ24ubGVuZ3RoPjAmJihwZVsiIW1lcmdlcyJdPUNuKSxHWyIhaWQiXVtwZVsiIXJlbCJdXSYmKHBlWyIhZHJhd2VsIl09R1siIWlkIl1bcGVbIiFyZWwiXV0pLEdb''@;'; put 'put ''IiFpZCJdW3BlWyIhbGVncmVsIl1dJiYocGVbIiFsZWdkcmF3ZWwiXT1HWyIhaWQiXVtwZVsiIWxlZ3JlbCJdXSksKHBlWyIhY3RybGlkIl18fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFluKXtZbi5yZWw9R1siIWlkIl1bWW4uaWRdfSksbnVsbD09cGVbIiFncmlkbGluZXMiXSYmKHBlWyIhZ3Jp''@;'; put 'put ''ZGxpbmVzIl09ITApLHBlfShTLEcsayxRLGxlLG1lLHBlKX0oZXQsTCxRLGJlLGxlW0ddLE5lLEJlLEdlKTticmVhaztjYXNlImNoYXJ0IjpjdD1mdW5jdGlvbiBRTChTLEwsayxHLFEsbGUsbWUscGUpe3JldHVybiIuYmluIj09PUwuc2xpY2UoLTQpP2Z1bmN0aW9uIHZXKFMsTCxrLEcsUSl7''@;'; put 'put ''aWYoIVMpcmV0dXJuIFM7R3x8KEc9eyIhaWQiOnt9fSk7dmFyIGxlPXsiIXR5cGUiOiJjaGFydCIsIiFkcmF3ZWwiOm51bGwsIiFyZWwiOiIifSxtZT1bXSxwZT0hMTtyZXR1cm4gRG4oUyxmdW5jdGlvbihOZSxCZSxHZSl7c3dpdGNoKEdlKXtjYXNlIDU1MDpsZVsiIXJlbCJdPU5lO2JyZWFr''@;'; put 'put ''O2Nhc2UgNjUxOlEuU2hlZXRzW2tdfHwoUS5TaGVldHNba109e30pLE5lLm5hbWUmJihRLlNoZWV0c1trXS5Db2RlTmFtZT1OZS5uYW1lKTticmVhaztjYXNlIDU2MjpjYXNlIDY1MjpjYXNlIDY2OTpjYXNlIDY3OTpjYXNlIDU1MTpjYXNlIDU1MjpjYXNlIDQ3NjpjYXNlIDMwNzI6YnJlYWs7''@;'; put 'put ''Y2FzZSAzNTpwZT0hMDticmVhaztjYXNlIDM2OnBlPSExO2JyZWFrO2Nhc2UgMzc6bWUucHVzaChCZSk7YnJlYWs7Y2FzZSAzODptZS5wb3AoKTticmVhaztkZWZhdWx0OmlmKChCZXx8IiIpLmluZGV4T2YoIkJlZ2luIik+MCltZS5wdXNoKEJlKTtlbHNlIGlmKChCZXx8IiIpLmluZGV4T2Yo''@;'; put 'put ''IkVuZCIpPjApbWUucG9wKCk7ZWxzZSBpZighcGV8fEwuV1RGKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitHZSsiICIrQmUpfX0sTCksR1siIWlkIl1bbGVbIiFyZWwiXV0mJihsZVsiIWRyYXdlbCJdPUdbIiFpZCJdW2xlWyIhcmVsIl1dKSxsZX0oUyxHLGssUSxsZSk6''@;'; put 'put ''ZnVuY3Rpb24gUHgoUyxMLGssRyxRKXtpZighUylyZXR1cm4gUztHfHwoRz17IiFpZCI6e319KTt2YXIgbWUsbGU9eyIhdHlwZSI6ImNoYXJ0IiwiIWRyYXdlbCI6bnVsbCwiIXJlbCI6IiJ9LHBlPVMubWF0Y2goc3gpO3BlJiZseChwZVswXSwwLFEsayk7dmFyIGJlPVMubWF0Y2gob3gpO3Jl''@;'; put 'put ''dHVybiBiZSYmKGxlWyIhbWFyZ2lucyJdPUNMKHZyKGJlWzBdKSkpLChtZT1TLm1hdGNoKC9kcmF3aW5nIHI6aWQ9IiguKj8pIi8pKSYmKGxlWyIhcmVsIl09bWVbMV0pLEdbIiFpZCJdW2xlWyIhcmVsIl1dJiYobGVbIiFkcmF3ZWwiXT1HWyIhaWQiXVtsZVsiIXJlbCJdXSksbGV9KFMsMCxr''@;'; put 'put ''LFEsbGUpfShldCxMLFEsYmUsbGVbR10sTmUpO2JyZWFrO2Nhc2UibWFjcm8iOmN0PWZ1bmN0aW9uIGVPKFMsTCl7cmV0dXJuIEwuc2xpY2UoLTQpLHsiIXR5cGUiOiJtYWNybyJ9fSgwLEwpO2JyZWFrO2Nhc2UiZGlhbG9nIjpjdD1mdW5jdGlvbiB0TyhTLEwpe3JldHVybiBMLnNsaWNlKC00''@;'; put 'put ''KSx7IiF0eXBlIjoiZGlhbG9nIn19KDAsTCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBzaGVldCB0eXBlICIrcGUpfWlmKGJlLmNhbGxiYWNrKXJldHVybjttZVtHXT1jdCxmdW5jdGlvbiBqbShTLEwsayxHLFEsbGUsbWUscGUpe2lmKFMmJlNbIiFkcmF3''@;'; put 'put ''ZWwiXSl7dmFyIGJlPW1uKFNbIiFkcmF3ZWwiXS5UYXJnZXQsRyksTmU9VWgoYmUpLEJlPWZ1bmN0aW9uIE9NKFMsTCxrLEcsUSl7dmFyIGxlPXtjaGFydHM6W10saW1hZ2VzOltdLHNoYXBlczpbXX07aWYoIVMpcmV0dXJuIGxlO3ZhciBtZT1RfHx7fTtyZXR1cm4oUy5tYXRjaCgvPFtePF0q''@;'; put 'put ''PyhhYnNvbHV0ZUFuY2hvcnxvbmVDZWxsQW5jaG9yfHR3b0NlbGxBbmNob3IpLio/KGFic29sdXRlQW5jaG9yfG9uZUNlbGxBbmNob3J8dHdvQ2VsbEFuY2hvcikuKj8+L2cpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihwZSl7dmFyIGJlPSIiLE5lPXt0eXBlOiIifSxCZT17fSxHZT0hMCxldD0h''@;'; put 'put ''MSxjdD0hMSx4dD0hMSxvdD17czp7fX0sYnQ9LTEsRnQ9W10sa3Q9W10sTHQ9e3M6e2FsaWdubWVudDp7aG9yaXpvbnRhbDoiY2VudGVyIix2ZXJ0aWNhbDoiY2VudGVyIn19fSxKdD0iIixUbj0tMSxDbj17fTtwZS5yZXBsYWNlKHRuLGZ1bmN0aW9uKGxyLHFuKXtGdD1udWxsO3ZhciBXbj12''@;'; put 'put ''cihscikscHI9WGkoV25bMF0pLnJlcGxhY2UoL1tcL10/PiQvLCIiKTtzd2l0Y2gocHIpe2Nhc2UiPGNsaWVudERhdGEiOmJyZWFrO2Nhc2UiPGFic29sdXRlQW5jaG9yIjpjYXNlIjxvbmVDZWxsQW5jaG9yIjpjYXNlIjx0d29DZWxsQW5jaG9yIjpOZS50eXBlPVhpKFduWzBdKS5yZXBsYWNl''@;'; put 'put ''KC9bPD5dL2csIiIpO2JyZWFrO2Nhc2UiPC9hYnNvbHV0ZUFuY2hvciI6Y2FzZSI8L29uZUNlbGxBbmNob3IiOmNhc2UiPC90d29DZWxsQW5jaG9yIjpicmVhaztjYXNlIjxwb3MiOk5lLnBvcz17eDorV24ueCx5OitXbi55fTticmVhaztjYXNlIjxleHQiOkdlJiYoTmUuZXh0PXt4OitXbi5j''@;'; put 'put ''eCx5OitXbi5jeX0pO2JyZWFrO2Nhc2UiPGZyb20iOmNhc2UiPHRvIjpCZT17fTticmVhaztjYXNlIjwvZnJvbSI6R2UmJihOZS5mcm9tPUJlKTticmVhaztjYXNlIjwvdG8iOkdlJiYoTmUudG89QmUpO2JyZWFrO2Nhc2UiPGNvbCI6Y2FzZSI8Y29sT2ZmIjpjYXNlIjxyb3ciOmNhc2UiPHJv''@;'; put 'put ''d09mZiI6YnQ9cW4rbHIubGVuZ3RoO2JyZWFrO2Nhc2UiPC9jb2wiOkJlLmM9K3BlLnNsaWNlKGJ0LHFuKTticmVhaztjYXNlIjwvY29sT2ZmIjpCZS5jT2ZmPStwZS5zbGljZShidCxxbik7YnJlYWs7Y2FzZSI8L3JvdyI6QmUucj0rcGUuc2xpY2UoYnQscW4pO2JyZWFrO2Nhc2UiPC9yb3dP''@;'; put 'put ''ZmYiOkJlLnJPZmY9K3BlLnNsaWNlKGJ0LHFuKTticmVhaztjYXNlIjxzcCI6YmU9InNoYXBlIixMdC5BbmNob3I9TmUsbGUuc2hhcGVzLnB1c2goTHQpLEdlPSExO2JyZWFrO2Nhc2UiPC9zcCI6R2U9ITA7YnJlYWs7Y2FzZSI8Z3JhcGhpY0ZyYW1lIjpiZT0iZ3JhcGhpYyIsR2U9ITE7YnJl''@;'; put 'put ''YWs7Y2FzZSI8L2dyYXBoaWNGcmFtZSI6R2U9ITA7YnJlYWs7Y2FzZSI8cGljIjpiZT0icGljdHVyZSIsR2U9ITE7YnJlYWs7Y2FzZSI8L3BpYyI6R2U9ITA7YnJlYWs7Y2FzZSI8Z3JwU3AiOmJlPSJncm91cHNoYXBlIixHZT0hMTticmVhaztjYXNlIjwvZ3JwU3AiOkdlPSEwO2JyZWFrO2Nh''@;'; put 'put ''c2UiPGdyYXBoaWMiOmNhc2UiPC9ncmFwaGljIjpjYXNlIjx4ZnJtIjpjYXNlIjwveGZybSI6Y2FzZSI8b2ZmIjpicmVhaztjYXNlIjxncmFwaGljRGF0YSI6ZXQ9ITA7YnJlYWs7Y2FzZSI8L2dyYXBoaWNEYXRhIjpldD0hMTticmVhaztjYXNlIjxibGlwRmlsbCI6ZXQ9ITA7YnJlYWs7Y2Fz''@;'; put 'put ''ZSI8L2JsaXBGaWxsIjpldD0hMTticmVhaztjYXNlIjwvYmxpcCI6YnJlYWs7Y2FzZSI8c3JjUmVjdCI6ZXQ9ITA7YnJlYWs7Y2FzZSI8L3NyY1JlY3QiOmV0PSExO2JyZWFrO2Nhc2UiPG5vRmlsbCI6aWYoY3QpYnJlYWs7IjxzcFByIj09a3Quc2xpY2UoLTEpWzBdJiYoTHQucy5mZ0NvbG9y''@;'; put 'put ''PW51bGwpO2JyZWFrO2Nhc2UiPC9zb2xpZEZpbGwiOmlmKGN0fHx4dClicmVhazsiPHNwUHIiPT1rdC5zbGljZSgtMilbMF0/THQucy5mZ0NvbG9yPUNuOiI8clByIj09a3Quc2xpY2UoLTIpWzBdJiZrdC5pbmRleE9mKCI8dHhCb2R5Iik+LTEmJihvdC5zLmNvbG9yPUNuKSxDbj17fSx4dD0h''@;'; put 'put ''MTticmVhaztjYXNlIjxwcnN0R2VvbSI6InNoYXBlIj09YmUmJihMdFsiIXNoYXBlIl09V24ucHJzdCk7YnJlYWs7Y2FzZSI8L3Byc3RHZW9tIjpjYXNlIjxhdkxzdCI6YnJlYWs7Y2FzZSI8dHhCb2R5IjpldD0hMCxMdC5SPVtdO2JyZWFrO2Nhc2UiPC90eEJvZHkiOmV0PSExO2JyZWFrO2Nh''@;'; put 'put ''c2UiPGJvZHlQciI6THQucy5hbGlnbm1lbnQudmVydGljYWw9Uk1bV24uYW5jaG9yfHwidCJdfHwidG9wIjticmVhaztjYXNlIjxsc3RTdHlsZSI6YnJlYWs7Y2FzZSI8dCI6VG49cW4rbHIubGVuZ3RoO2JyZWFrO2Nhc2UiPGJyIjpjYXNlIjxici8+IjpKdCs9IlxuIjticmVhaztjYXNlIjwv''@;'; put 'put ''dCI6SnQrPXBlLnNsaWNlKFRuLHFuKTticmVhaztjYXNlIjxwUHIiOkx0LnMuYWxpZ25tZW50Lmhvcml6b250YWx8fChMdC5zLmFsaWdubWVudC5ob3Jpem9udGFsPXdtW1duLmFsZ258fCJsIl18fCJsZWZ0Iiksa3QuaW5kZXhPZigiPHR4Qm9keSIpPi0xJiYob3Qucy5hbGlnbm1lbnQuaG9y''@;'; put 'put ''aXpvbnRhbD13bVtXbi5hbGdufHwibCJdfHwibGVmdCIpO2JyZWFrO2Nhc2UiPHJQciI6V24uc3omJmt0LmluZGV4T2YoIjx0eEJvZHkiKT4tMSYmKEx0LnMuc3o9b3Qucy5zej0rV24uc3ovMTAwKTticmVhaztjYXNlIjxwIjpKdD0iIixvdD17dDoicyIsdjoiIixzOnthbGlnbm1lbnQ6e319''@;'; put 'put ''fTticmVhaztjYXNlIjwvcCI6InNoYXBlIj09YmUmJmt0LmluZGV4T2YoIjx0eEJvZHkiKT4tMSYmKEx0LnY9KEx0LnZ8fCIiKStKdCxvdC52PUp0LEx0LlIucHVzaChvdCkpO2JyZWFrO2Nhc2UiPGxhdGluIjpXbi50eXBlZmFjZSYma3QuaW5kZXhPZigiPHR4Qm9keSIpPi0xJiYob3Qucy5u''@;'; put 'put ''YW1lPVduLnR5cGVmYWNlKTticmVhaztjYXNlIjxzdHlsZSI6ZXQ9ITAsY3Q9ITA7YnJlYWs7Y2FzZSI8L3N0eWxlIjpldD0hMSxjdD0hMTticmVhaztjYXNlIjxsblJlZiI6Y2FzZSI8ZmlsbFJlZiI6Y2FzZSI8ZWZmZWN0UmVmIjpjYXNlIjxmb250UmVmIjpicmVhaztjYXNlIjwvZmlsbFJl''@;'; put 'put ''ZiI6IWN0JiYic2hhcGUiPT1iZSYmKEx0LnMuZmdDb2xvcj1DbiksQ249e307YnJlYWs7Y2FzZSI8L2ZvbnRSZWYiOiFjdCYmInNoYXBlIj09YmUmJihMdC5zLmNvbG9yPUNuKSxDbj17fTticmVhaztjYXNlIjxzY2hlbWVDbHIiOnZhciB5cj17YmcxOiJsdDEiLGJnMjoibHQyIix0eDE6ImRr''@;'; put 'put ''MSIsdHgyOiJkazIifVtXbi52YWxdfHxXbi52YWwsdHI9KChHLnRoZW1lRWxlbWVudHN8fHt9KS5jbHJTY2hlbWV8fFtdKS5maW5kKGZ1bmN0aW9uKEZpKXtyZXR1cm4gRmkubmFtZT09eXJ9KTt0cj9Dbi5yZ2I9dHIucmdiOnh0PSEwO2JyZWFrO2Nhc2UiPHNjcmdiQ2xyIjp4dD0hMDticmVh''@;'; put 'put ''aztjYXNlIjxzcmdiQ2xyIjpDbi5yZ2I9V24udmFsLnNsaWNlKC02KTticmVhaztjYXNlIjxoc2xDbHIiOmNhc2UiPHN5c0NsciI6Y2FzZSI8cHJzdENsciI6eHQ9ITA7YnJlYWs7Y2FzZSI8Y2hhcnQiOkZ0PWxlLmNoYXJ0czt2YXIgd2k9V24uaWQ7Y2FzZSI8YmxpcCI6RnR8fChGdD1sZS5p''@;'; put 'put ''bWFnZXMsd2k9V24uZW1iZWQpLEZ0LnB1c2goe0FuY2hvcjpOZSxUYXJnZXQ6KExbIiFpZCJdW3dpXXx8e30pLlRhcmdldH0pLFduLmxpbmsmJihGdFtGdC5sZW5ndGgtMV0uTGluaz0oTFsiIWlkIl1bV24ubGlua118fHt9KS5UYXJnZXQpO2JyZWFrO2Nhc2UiPGdycFNwUHIiOmV0PSEwO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiPC9ncnBTcFByIjpldD0hMTticmVhaztjYXNlIjxudkdycFNwUHIiOmV0PSEwO2JyZWFrO2Nhc2UiPC9udkdycFNwUHIiOmV0PSExO2JyZWFrO2Nhc2UiPHNwUHIiOmV0PSEwO2JyZWFrO2Nhc2UiPC9zcFByIjpldD0hMTticmVhaztjYXNlIjxzdHJldGNoIjpjYXNlIjwvc3Ry''@;'; put 'put ''ZXRjaCI6Y2FzZSI8ZmlsbFJlY3QiOmNhc2UiPG52R3JhcGhpY0ZyYW1lUHIiOmNhc2UiPC9udkdyYXBoaWNGcmFtZVByIjpjYXNlIjxjTnZHcmFwaGljRnJhbWVQciI6Y2FzZSI8L2NOdkdyYXBoaWNGcmFtZVByIjpjYXNlIjxncmFwaGljRnJhbWVMb2NrcyI6Y2FzZSI8bnZQaWNQciI6Y2Fz''@;'; put 'put ''ZSI8L252UGljUHIiOmNhc2UiPGNOdlBpY1ByIjpjYXNlIjwvY052UGljUHIiOmNhc2UiPHBpY0xvY2tzIjpjYXNlIjxjTnZHcnBTcFByIjpjYXNlIjwvY052R3JwU3BQciI6Y2FzZSI8Z3JwU3BMb2NrcyI6Y2FzZSI8bnZTcFByIjpjYXNlIjwvbnZTcFByIjpjYXNlIjxjTnZTcFByIjpjYXNl''@;'; put 'put ''IjwvY052U3BQciI6Y2FzZSI8c3BMb2NrcyI6YnJlYWs7Y2FzZSI8Y052UHIiOmV0PSEwO2JyZWFrO2Nhc2UiPC9jTnZQciI6ZXQ9ITE7YnJlYWs7Y2FzZSI8Y3huU3AiOmV0PSEwO2JyZWFrO2Nhc2UiPC9jeG5TcCI6ZXQ9ITE7YnJlYWs7Y2FzZSI8Y052Q3huU3BQciI6ZXQ9ITA7YnJlYWs7''@;'; put 'put ''Y2FzZSI8L2NOdkN4blNwUHIiOmV0PSExO2JyZWFrO2Nhc2UiPG52Q3huU3BQciI6Y2FzZSI8L252Q3huU3BQciI6YnJlYWs7Y2FzZSI8ZXh0THN0IjpldD0hMCxjdD0hMDticmVhaztjYXNlIjwvZXh0THN0IjpldD0hMSxjdD0hMTticmVhaztjYXNlIjwvZXh0IjpicmVhaztkZWZhdWx0Omlm''@;'; put 'put ''KG1lJiZtZS5XVEYmJiFldCl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK1duWzBdKyIgaW4gZHJhd2luZyIpfXJldHVybiI8LyI9PXByLnNsaWNlKDAsMik/a3QucG9wKCk6Ii8+IiE9bHIuc2xpY2UobHIubGVuZ3RoLTIpJiZrdC5wdXNoKHByKSwiIn0pfSksbGV9KHJyKGssYmUs''@;'; put 'put ''ITApLEoyKHJyKGssTmUsITApLGJlKSwwLHBlLFEpO2lmKEJlKXtpZihCZS5jaGFydHMpZm9yKHZhciBHZT0wO0dlPEJlLmNoYXJ0cy5sZW5ndGg7KytHZSl7dmFyIGV0PUJlLmNoYXJ0c1tHZV0sY3Q9bW4oZXQuVGFyZ2V0LGJlKSx4dD1VaChjdCksb3Q9ImNoYXJ0Ij09TCYmMD09R2UsYnQ9''@;'; put 'put ''Rm0ocnIoayxjdCwhMCksMCwwLEoyKHJyKGsseHQsITApLGN0KSwwLG90P1M6bnVsbCxldCxvdD9udWxsOlMpO290fHwoU1siIWNoYXJ0cyJdfHwoU1siIWNoYXJ0cyJdPVtdKSxTWyIhY2hhcnRzIl0ucHVzaChidCkpfWlmKFEuYm9va0ltYWdlcyYmQmUuaW1hZ2VzKWZvcih2YXIgRnQ9MDtG''@;'; put 'put ''dDxCZS5pbWFnZXMubGVuZ3RoOysrRnQpe3ZhciBrdD1CZS5pbWFnZXNbRnRdLEx0PXsiIXR5cGUiOiJpbWFnZSIsIiFwb3MiOlBVKGt0LkFuY2hvciksIiFwb3NUeXBlIjprdC5BbmNob3IudHlwZS5yZXBsYWNlKC9BbmNob3IvLCIiKSwiIWFic3BvcyI6czcoa3QuQW5jaG9yLFMpLCIhcmVs''@;'; put 'put ''cG9zIjpmYihrdC5BbmNob3IsUyl9O2lmKGt0LlRhcmdldCYmKEx0WyIhcGF0aCJdPW1uKGt0LlRhcmdldCxiZSksTHRbIiFkYXRhIl09VHQoayxMdFsiIXBhdGgiXSksTHRbIiFkYXRhdHlwZSJdPSJzdHJpbmciPT10eXBlb2YgTHRbIiFkYXRhIl0/ImJpbmFyeSI6ImJ1ZmZlciIpLGt0Lkxp''@;'; put 'put ''bmsmJihMdFsiIWRhdGF0eXBlIl18fChMdFsiIWRhdGF0eXBlIl09InJlbW90ZSIpLEx0WyIhbGluayJdPWt0LkxpbmspLCFMdFsiIWRhdGF0eXBlIl0pdGhyb3ciSW1hZ2UgZGF0YSBjYW5ub3QgYmUgZm91bmQiO1NbIiFpbWFnZXMiXXx8KFNbIiFpbWFnZXMiXT1bXSksU1siIWltYWdlcyJd''@;'; put 'put ''LnB1c2goTHQpfXZhciBKdCxUbjtpZihCZS5zaGFwZXMpZm9yKHZhciBDbj0wO0NuPEJlLnNoYXBlcy5sZW5ndGg7KytDbilUbj17IiF0eXBlIjoic2hhcGUiLCIhcG9zIjpzNygoSnQ9QmUuc2hhcGVzW0NuXSkuQW5jaG9yLFMpLCIhcG9zVHlwZSI6SnQuQW5jaG9yLnR5cGUucmVwbGFjZSgv''@;'; put 'put ''QW5jaG9yLywiIiksIiFhYnNwb3MiOnM3KEp0LkFuY2hvcixTKSwiIXJlbHBvcyI6ZmIoSnQuQW5jaG9yLFMpfSxbInYiLCIhc2hhcGUiLCJzIiwiUiJdLmZvckVhY2goc3IpLFNbIiFzaGFwZXMiXXx8KFNbIiFzaGFwZXMiXT1bXSksU1siIXNoYXBlcyJdLnB1c2goVG4pfX1mdW5jdGlvbiBz''@;'; put 'put ''cihscil7SnRbbHJdJiYoVG5bbHJdPUp0W2xyXSl9fShjdCxwZSxTLEwsYmUsMCwwLEJlKTt2YXIgeHQ9W107cmV0dXJuIGxlJiZsZVtHXSYmTGUobGVbR10pLmZvckVhY2goZnVuY3Rpb24ob3Qpe2lmKGxlW0ddW290XS5UeXBlPT1LYS5DTU5UKXt2YXIgYnQ9bW4obGVbR11bb3RdLlRhcmdl''@;'; put 'put ''dCxMKTtpZighKHh0PWZ1bmN0aW9uIFV4KFMsTCxrKXtyZXR1cm4iLmJpbiI9PT1MLnNsaWNlKC00KT9mdW5jdGlvbiBUUihTLEwpe3ZhciBrPVtdLEc9W10sUT17fSxsZT0hMTtyZXR1cm4gRG4oUyxmdW5jdGlvbihwZSxiZSxOZSl7c3dpdGNoKE5lKXtjYXNlIDYzMjpHLnB1c2gocGUpO2Jy''@;'; put 'put ''ZWFrO2Nhc2UgNjM1OlE9cGU7YnJlYWs7Y2FzZSA2Mzc6US50PXBlLnQsUS5oPXBlLmgsUS5yPXBlLnI7YnJlYWs7Y2FzZSA2MzY6aWYoUS5hdXRob3I9R1tRLmlhdXRob3JdLGRlbGV0ZSBRLmlhdXRob3IsTC5zaGVldFJvd3MmJlEucmZ4JiZMLnNoZWV0Um93czw9US5yZngucilicmVhaztR''@;'; put 'put ''LnR8fChRLnQ9IiIpLGRlbGV0ZSBRLnJmeCxrLnB1c2goUSk7YnJlYWs7Y2FzZSAzMDcyOmNhc2UgMzc6Y2FzZSAzODpicmVhaztjYXNlIDM1OmxlPSEwO2JyZWFrO2Nhc2UgMzY6bGU9ITE7YnJlYWs7ZGVmYXVsdDppZighKChiZXx8IiIpLmluZGV4T2YoIkJlZ2luIik+MCkmJiEoKGJlfHwi''@;'; put 'put ''IikuaW5kZXhPZigiRW5kIik+MCkmJighbGV8fEwuV1RGKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrTmUrIiAiK2JlKX19KSxrfShTLGspOmZ1bmN0aW9uIEExKFMsTCl7aWYoUy5tYXRjaCgvPCg/Olx3KzopP2NvbW1lbnRzICpcLz4vKSlyZXR1cm5bXTt2YXIgaz1b''@;'; put 'put ''XSxHPVtdLFE9Uy5tYXRjaCgvPCg/Olx3KzopP2F1dGhvcnM+KFtcc1xTXSopPFwvKD86XHcrOik/YXV0aG9ycz4vKTtRJiZRWzFdJiZRWzFdLnNwbGl0KC88XC9cdyo6P2F1dGhvcj4vKS5mb3JFYWNoKGZ1bmN0aW9uKG1lKXtpZigiIiE9PW1lJiYiIiE9PW1lLnRyaW0oKSl7dmFyIHBlPW1l''@;'; put 'put ''Lm1hdGNoKC88KD86XHcrOik/YXV0aG9yW14+XSo+KC4qKS8pO3BlJiZrLnB1c2gocGVbMV0pfX0pO3ZhciBsZT1TLm1hdGNoKC88KD86XHcrOik/Y29tbWVudExpc3Q+KFtcc1xTXSopPFwvKD86XHcrOik/Y29tbWVudExpc3Q+Lyk7cmV0dXJuIGxlJiZsZVsxXSYmbGVbMV0uc3BsaXQoLzxc''@;'; put 'put ''L1x3Kjo/Y29tbWVudD4vKS5mb3JFYWNoKGZ1bmN0aW9uKG1lKXtpZigiIiE9PW1lJiYiIiE9PW1lLnRyaW0oKSl7dmFyIHBlPW1lLm1hdGNoKC88KD86XHcrOik/Y29tbWVudFtePl0qPi8pO2lmKHBlKXt2YXIgYmU9dnIocGVbMF0pLE5lPXthdXRob3I6YmUuYXV0aG9ySWQmJmtbYmUuYXV0''@;'; put 'put ''aG9ySWRdfHwic2hlZXRqc2dob3N0IixyZWY6YmUucmVmLGd1aWQ6YmUuZ3VpZH0sQmU9QW8oYmUucmVmKTtpZighKEwuc2hlZXRSb3dzJiZMLnNoZWV0Um93czw9QmUucikpe3ZhciBHZT1tZS5tYXRjaCgvPCg/Olx3KzopP3RleHQ+KFtcc1xTXSopPFwvKD86XHcrOik/dGV4dD4vKSxldD0h''@;'; put 'put ''IUdlJiYhIUdlWzFdJiZuYihHZVsxXSl8fHtyOiIiLHQ6IiIsaDoiIn07TmUucj1ldC5yLCI8dD48L3Q+Ij09ZXQuciYmKGV0LnQ9ZXQuaD0iIiksTmUudD0oZXQudHx8IiIpLnJlcGxhY2UoL1xyXG4vZywiXG4iKS5yZXBsYWNlKC9cci9nLCJcbiIpLEwuY2VsbEhUTUwmJihOZS5oPWV0Lmgp''@;'; put 'put ''LEcucHVzaChOZSl9fX19KSxHfShTLGspfShUdChTLGJ0LCEwKSxidCxiZSkpfHwheHQubGVuZ3RoKXJldHVybjshZnVuY3Rpb24geFIoUyxMKXt2YXIgRyxrPUFycmF5LmlzQXJyYXkoUyk7TC5mb3JFYWNoKGZ1bmN0aW9uKFEpe3ZhciBsZT1BbyhRLnJlZik7aWYoaz8oU1tsZS5yXXx8KFNb''@;'; put 'put ''bGUucl09W10pLEc9U1tsZS5yXVtsZS5jXSk6Rz1TW1EucmVmXSwhRyl7Rz17dDoieiJ9LGs/U1tsZS5yXVtsZS5jXT1HOlNbUS5yZWZdPUc7dmFyIG1lPXRvKFNbIiFyZWYiXXx8IkJEV0dPMTAwMDAwMTpBMSIpO21lLnMucj5sZS5yJiYobWUucy5yPWxlLnIpLG1lLmUucjxsZS5yJiYobWUu''@;'; put 'put ''ZS5yPWxlLnIpLG1lLnMuYz5sZS5jJiYobWUucy5jPWxlLmMpLG1lLmUuYzxsZS5jJiYobWUuZS5jPWxlLmMpO3ZhciBwZT1vbyhtZSk7cGUhPT1TWyIhcmVmIl0mJihTWyIhcmVmIl09cGUpfUcuY3x8KEcuYz1bXSk7dmFyIGJlPXthOlEuYXV0aG9yLHQ6US50LHI6US5yfTtiZS5yJiYic3Ry''@;'; put 'put ''aW5nIj09dHlwZW9mIGJlLnImJihiZS5SPXRiKGJlLnIpKSxRLmgmJihiZS5oPVEuaCksRy5jLnB1c2goYmUpfSl9KGN0LHh0KX19KSxmdW5jdGlvbiBMTyhTLEwsayxHLFEsbGUsbWUpeyFTfHwhU1siIXRhYmxlcmVmcyJdfHwha3x8IWtbIiFpZCJdfHwoU1siIXRhYmxlcyJdPVtdLFNbIiF0''@;'; put 'put ''YWJsZXJlZnMiXS5mb3JFYWNoKGZ1bmN0aW9uKHBlKXt2YXIgYmU9a1siIWlkIl1bcGVdO2lmKGJlJiZiZS5UYXJnZXQpe3ZhciBOZT1tbihiZS5UYXJnZXQsRyk7IWZ1bmN0aW9uIF9iKFMsTCxrLEcsUSl7dmFyIGxlPXtzdHlsZTp7fSxoZWFkZXI6MH0sbWU9ITE7Uy5yZXBsYWNlKHRuLGZ1''@;'; put 'put ''bmN0aW9uKHBlKXt2YXIgYmU9dnIocGUpO3N3aXRjaChYaShiZVswXSkpe2Nhc2UiPD94bWwiOmNhc2UiPC90YWJsZT4iOmNhc2UiPC9hdXRvRmlsdGVyPiI6Y2FzZSI8c29ydFN0YXRlIjpjYXNlIjxzb3J0U3RhdGU+IjpjYXNlIjwvc29ydFN0YXRlPiI6Y2FzZSI8L3RhYmxlQ29sdW1ucyI6''@;'; put 'put ''Y2FzZSI8L3RhYmxlQ29sdW1ucz4iOmNhc2UiPC90YWJsZUNvbHVtbj4iOmNhc2UiPGNhbGN1bGF0ZWRDb2x1bW5Gb3JtdWxhPiI6Y2FzZSI8Y2FsY3VsYXRlZENvbHVtbkZvcm11bGEiOmNhc2UiPC9jYWxjdWxhdGVkQ29sdW1uRm9ybXVsYT4iOmNhc2UiPHRvdGFsc1Jvd0Zvcm11bGE+Ijpj''@;'; put 'put ''YXNlIjx0b3RhbHNSb3dGb3JtdWxhIjpjYXNlIjwvdG90YWxzUm93Rm9ybXVsYT4iOmNhc2UiPHhtbENvbHVtblByPiI6Y2FzZSI8eG1sQ29sdW1uUHIiOmNhc2UiPC94bWxDb2x1bW5Qcj4iOmNhc2UiPHNvcnRDb25kaXRpb24+IjpjYXNlIjxzb3J0Q29uZGl0aW9uIjpjYXNlIjxleHRMc3Qi''@;'; put 'put ''OmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpjYXNlIjxleHRMc3QvPiI6YnJlYWs7Y2FzZSI8dGFibGUiOmJlLnJlZiYmKGxlLnJlZj1iZS5yZWYpLGJlLm5hbWU/bGUubmFtZT1iZS5uYW1lOmJlLmRpc3BsYXlOYW1lJiYobGUubmFtZT1iZS5kaXNwbGF5TmFtZSksbnVsbCE9YmUu''@;'; put 'put ''aGVhZGVycm93Y291bnQmJjEhPStiZS5oZWFkZXJyb3djb3VudD9sZS5oZWFkZXI9K2JlLmhlYWRlcnJvd2NvdW50Om51bGw9PWJlLmhlYWRlcnJvd2NvdW50JiYobGUuaGVhZGVyPTEpO2JyZWFrO2Nhc2UiPGF1dG9GaWx0ZXIiOmNhc2UiPGF1dG9GaWx0ZXI+IjpsZS5maWx0ZXI9ITA7YnJl''@;'; put 'put ''YWs7Y2FzZSI8dGFibGVDb2x1bW5zIjpjYXNlIjx0YWJsZUNvbHVtbnM+IjpsZS5jb2xzPVtdO2JyZWFrO2Nhc2UiPHRhYmxlU3R5bGVJbmZvIjpiZS5zaG93Um93U3RyaXBlcyYmKGxlLnN0eWxlLnJvd3N0cmlwZT1GcihiZS5zaG93Um93U3RyaXBlcykpLGJlLnNob3dDb2x1bW5TdHJpcGVz''@;'; put 'put ''JiYobGUuc3R5bGUuY29sc3RyaXBlPUZyKGJlLnNob3dDb2x1bW5TdHJpcGVzKSksYmUuc2hvd0ZpcnN0Q29sdW1uJiYobGUuc3R5bGUuY29sZmlyc3Q9RnIoYmUuc2hvd0ZpcnN0Q29sdW1uKSksYmUuc2hvd0xhc3RDb2x1bW4mJihsZS5zdHlsZS5jb2xsYXN0PUZyKGJlLnNob3dMYXN0Q29s''@;'; put 'put ''dW1uKSksYmUubmFtZSYmKGxlLnN0eWxlLm5hbWU9YmUubmFtZS5yZXBsYWNlKC9eVGFibGVTdHlsZS8sIiIpKTticmVhaztjYXNlIjx0YWJsZUNvbHVtbiI6Y2FzZSI8dGFibGVDb2x1bW4+IjpsZS5jb2xzLnB1c2goe2lkOitiZS5pZCxuYW1lOmJlLm5hbWV9KTticmVhaztjYXNlIjxmaWx0''@;'; put 'put ''ZXJDb2x1bW4+IjpjYXNlIjxmaWx0ZXJDb2x1bW4iOmNhc2UiPGN1c3RvbUZpbHRlcnMiOmNhc2UiPGN1c3RvbUZpbHRlcnM+IjpjYXNlIjxleHQiOm1lPSEwO2JyZWFrO2Nhc2UiPC9maWx0ZXJDb2x1bW4+IjpjYXNlIjwvY3VzdG9tRmlsdGVycz4iOmNhc2UiPC9leHQ+IjptZT0hMTticmVh''@;'; put 'put ''aztkZWZhdWx0OmlmKCFtZSYmUS5XVEYpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitiZVswXSsiIGluIHRhYmxlIil9cmV0dXJuIHBlfSksbGUuZmlsdGVyfHwobGUuZmlsdGVyPSExKSxsZS5zdHlsZS5uYW1lJiYhbGUuc3R5bGUubmFtZS5tYXRjaCgvXihMaWdodHxNZWRpdW18''@;'; put 'put ''RGFyaylcZCskLykmJmsuVGFibGUmJmsuVGFibGUuZm9yRWFjaChmdW5jdGlvbihwZSl7KHBlLm5hbWU9PWxlLnN0eWxlLm5hbWV8fHBlLnJhd25hbWU9PWxlLnN0eWxlLm5hbWUpJiYobGUuc3R5bGUucmF3PXVuKHBlKSl9KSxMWyIhdGFibGVzIl0ucHVzaChsZSl9KFR0KEwsTmUsITApLFMs''@;'; put 'put ''USwwLG1lKX19KSxkZWxldGUgU1siIXRhYmxlcmVmcyJdKX0oY3QsUyxsZVtHXSxMLEdlLDAsYmUpLHR5cGVvZiBwYXJzZV9zaGVldF9waXZvdDwidSImJmxfLnB1c2goW2N0LFMsbGVbR10sTCx7U2hlZXRzOm1lfSxHZSxiZV0pLGZ1bmN0aW9uIGxZKFMsTCxrLEcsUSxsZSxtZSxwZSl7aWYo''@;'; put 'put ''UyYmU1siIWxlZ2RyYXdlbCJdKXt2YXIgYmU9bW4oU1siIWxlZ2RyYXdlbCJdLlRhcmdldCxHKSxOZT1ycihrLGJlLCEwKTtOZSYmZnVuY3Rpb24gQ1IoUyxMLGspe3ZhciBHPTA7KFMubWF0Y2god1IpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihRKXt2YXIgRnQsa3QsTHQsSnQsVG4sc3IsQ24s''@;'; put 'put ''bHIsbGU9IiIsbWU9ITAscGU9IiIsYmU9LTEsTmU9e30sQmU9e30sR2U9e30sZXQ9LTEsY3Q9LTEseHQ9IiIsb3Q9IiIsYnQ9IiIscW49ITEsV249ITE7c3dpdGNoKFEucmVwbGFjZSh0bixmdW5jdGlvbih0cix3aSl7dmFyIEZpPXZyKHRyKTtzd2l0Y2goWGkoRmlbMF0pKXtjYXNlIjxzaGFw''@;'; put 'put ''ZSI6RmkuZmlsbGNvbG9yJiYoTmUuY29sb3IxPUZpLmZpbGxjb2xvciksRmkuc3Ryb2tlY29sb3ImJihHZS5jb2xvcj1GaS5zdHJva2Vjb2xvcik7YnJlYWs7Y2FzZSI8ZmlsbCI6Y2FzZSI8ZmlsbD4iOiI8djpmaWxsIj09RmlbMF0mJihGaS5jb2xvcjImJihOZS5jb2xvcjI9RmkuY29sb3Iy''@;'; put 'put ''KSxGaS50eXBlJiYoTmUudHlwZT1GaS50eXBlKSk7YnJlYWs7Y2FzZSI8L2ZpbGw+IjpjYXNlIjxsb2NrIjpjYXNlIjxsb2NrLz4iOmJyZWFrO2Nhc2UiPHNoYWRvdyI6RmkuY29sb3ImJihCZS5jb2xvcj1GaS5jb2xvciksRmkub24mJihCZS5vbj1GaS5vbik7YnJlYWs7Y2FzZSI8Q2xpZW50''@;'; put 'put ''RGF0YSI6RmkuT2JqZWN0VHlwZSYmKGxlPUZpLk9iamVjdFR5cGUpO2JyZWFrO2Nhc2UiPFZpc2libGUiOmNhc2UiPFZpc2libGUvPiI6bWU9ITE7YnJlYWs7Y2FzZSI8QW5jaG9yIjpjYXNlIjxBbmNob3I+IjpjYXNlIjxSb3ciOmNhc2UiPFJvdz4iOmNhc2UiPENvbHVtbiI6Y2FzZSI8Q29s''@;'; put 'put ''dW1uPiI6Y2FzZSI8Rm1sYU1hY3JvIjpjYXNlIjxGbWxhTWFjcm8+IjpjYXNlIjxGbWxhTGluayI6Y2FzZSI8Rm1sYUxpbms+IjpjYXNlIjxGbWxhUmFuZ2UiOmNhc2UiPEZtbGFSYW5nZT4iOmNhc2UiPFNlbFR5cGUiOmNhc2UiPFNlbFR5cGU+IjpjYXNlIjxWYWwiOmNhc2UiPFZhbD4iOmNh''@;'; put 'put ''c2UiPE1pbiI6Y2FzZSI8TWluPiI6Y2FzZSI8TWF4IjpjYXNlIjxNYXg+IjpjYXNlIjxJbmMiOmNhc2UiPEluYz4iOmNhc2UiPFBhZ2UiOmNhc2UiPFBhZ2U+IjpjYXNlIjxDaGVja2VkIjpjYXNlIjxDaGVja2VkPiI6Y2FzZSI8dGV4dGJveCI6Y2FzZSI8dGV4dGJveD4iOmJlPXdpK3RyLmxl''@;'; put 'put ''bmd0aDticmVhaztjYXNlIjwvQW5jaG9yPiI6cGU9US5zbGljZShiZSx3aSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9Sb3c+IjpldD0rUS5zbGljZShiZSx3aSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9Db2x1bW4+IjpjdD0rUS5zbGljZShiZSx3aSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9GbWxhTWFj''@;'; put 'put ''cm8+Ijp4dD1RLnNsaWNlKGJlLHdpKS50cmltKCk7YnJlYWs7Y2FzZSI8L0ZtbGFMaW5rPiI6b3Q9US5zbGljZShiZSx3aSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9GbWxhUmFuZ2U+IjpDbj1RLnNsaWNlKGJlLHdpKS50cmltKCk7YnJlYWs7Y2FzZSI8L1NlbFR5cGU+Ijpscj1RLnNsaWNlKGJl''@;'; put 'put ''LHdpKS50cmltKCk7YnJlYWs7Y2FzZSI8L1ZhbD4iOkZ0PStRLnNsaWNlKGJlLHdpKS50cmltKCk7YnJlYWs7Y2FzZSI8L01pbj4iOmt0PStRLnNsaWNlKGJlLHdpKS50cmltKCk7YnJlYWs7Y2FzZSI8L01heD4iOkx0PStRLnNsaWNlKGJlLHdpKS50cmltKCk7YnJlYWs7Y2FzZSI8L0luYz4i''@;'; put 'put ''Okp0PStRLnNsaWNlKGJlLHdpKS50cmltKCk7YnJlYWs7Y2FzZSI8L1BhZ2U+IjpUbj0rUS5zbGljZShiZSx3aSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9DaGVja2VkPiI6c3I9K1Euc2xpY2UoYmUsd2kpLnRyaW0oKTticmVhaztjYXNlIjwvdGV4dGJveD4iOmJ0PVEuc2xpY2UoYmUsd2kpLnRy''@;'; put 'put ''aW0oKTticmVhaztjYXNlIjxNb3ZlV2l0aENlbGxzLz4iOmNhc2UiPE1vdmVXaXRoQ2VsbHM+Ijpxbj0hMDticmVhaztjYXNlIjxTaXplV2l0aENlbGxzLz4iOmNhc2UiPFNpemVXaXRoQ2VsbHM+IjpXbj0hMH1yZXR1cm4iIn0pLGxlKXtjYXNlIk5vdGUiOnZhciBwcj13MC5zaGVldF9nZXRf''@;'; put 'put ''Y2VsbChMLGV0Pj0wJiZjdD49MD9HaSh7cjpldCxjOmN0fSk6a1tHXS5yZWYpO3ByLmMmJihwci5jLmhpZGRlbj1tZSxwZSYmKHByLmMucmF3YW5jaG9yPXBlLHBiKHBlLHByLmMpLGdSKHByLmNbIiFwb3MiXSwyKiEhcW4rISFXbixMKSksTmUuY29sb3IxJiYocHIuYy5maWxsPU5lKSxCZS5j''@;'; put 'put ''b2xvciYmKHByLmMuc2hhZG93PUJlKSxHZS5jb2xvciYmKHByLmMuc3Ryb2tlPUdlKSksKytHO2JyZWFrO2Nhc2UiQnV0dG9uIjpjYXNlIkdCb3giOmNhc2UiRHJvcCI6Y2FzZSJMYWJlbCI6Y2FzZSJDaGVja2JveCI6Y2FzZSJTY3JvbGwiOmNhc2UiTGlzdCI6Y2FzZSJSYWRpbyI6Y2FzZSJT''@;'; put 'put ''cGluIjpjYXNlIkVkaXQiOkxbIiFjb250cm9scyJdfHwoTFsiIWNvbnRyb2xzIl09W10pO3ZhciB5cj17IiF0eXBlIjpsZX07cGUmJnBiKHBlLHlyKSx4dCYmKHlyLm1hY3JvPXh0LnJlcGxhY2UoIlswXSEiLCIiKSksb3QmJih5ci5saW5rPW90KSwiU2Nyb2xsIj09bGV8fCJTcGluIj09bGU/''@;'; put 'put ''KG51bGw9PUZ0JiYoRnQ9MCksbnVsbD09a3QmJihrdD0wKSxudWxsPT1MdCYmKEx0PTNlNCksbnVsbD09SnQmJihKdD0xKSwiU2Nyb2xsIj09bGUmJm51bGw9PVRuJiYoVG49MTApKToiUmFkaW8iPT1sZXx8IkNoZWNrYm94Ij09bGU/KG51bGw9PXNyJiYoc3I9MCksRnQ9c3IpOigiTGlzdCI9''@;'; put 'put ''PWxlfHwiRHJvcCI9PWxlKSYmKG51bGwhPUNuJiYoeXIucmVmPUNuKSxudWxsPT1sciYmKGxyPSJTaW5nbGUiKSwiTGlzdCI9PWxlJiYoeXIuc2VsPWxyKSksbnVsbCE9RnQmJih5ci52YWw9RnQpLG51bGwhPWt0JiYoeXIubWluPWt0KSxudWxsIT1MdCYmKHlyLm1heD1MdCksbnVsbCE9SnQm''@;'; put 'put ''Jih5ci5zdGVwPUp0KSxudWxsIT1UbiYmKHlyLnBhZ2U9VG4pLGJ0JiYoeXIudD1idC5yZXBsYWNlKC9ccyo8W1xzXFNdKj8+XHMqL2csIiIpKSxMWyIhY29udHJvbHMiXS5wdXNoKHlyKX19KX0oY28oTmUpLFMscGV8fFtdKSxTWyIhTERQIl09YmUsU1siIWN0cmxpZCJdJiZTWyIhY3RybGlk''@;'; put 'put ''Il0uZm9yRWFjaChmdW5jdGlvbihCZSl7aWYoQmUucmVsJiZCZS5yZWwuVGFyZ2V0KXt2YXIgR2U9bW4oQmUucmVsLlRhcmdldCxHKTtCZS5wYXRoPUdlLGRlbGV0ZSBCZS5yZWx9fSl9fShjdCwwLFMsTCwwLDAsMCx4dCksY3R9Y2F0Y2gob3Qpe2lmKGJlLldURil0aHJvdyBvdH19ZnVuY3Rp''@;'; put 'put ''b24gZWMoUyl7cmV0dXJuIi8iPT1TLmNoYXJBdCgwKT9TLnNsaWNlKDEpOlN9dmFyIE5vPWZ1bmN0aW9uKCl7fTtmdW5jdGlvbiBPTyhTLEwpe2lmKGxfPVtdLGxFKEw9THx8e30pLFFyKFMsIk1FVEEtSU5GL21hbmlmZXN0LnhtbCIpfHxRcihTLCJvYmplY3RkYXRhLnhtbCIpKXJldHVybiBm''@;'; put 'put ''dW5jdGlvbiByRShTLEwpe0w9THx8e30sUXIoUywiTUVUQS1JTkYvbWFuaWZlc3QueG1sIikmJmZ1bmN0aW9uIFB5KFMsTCl7Zm9yKHZhciBHLFEsaz1HeChTKTtHPVFiLmV4ZWMoayk7KXN3aXRjaChHWzNdKXtjYXNlIm1hbmlmZXN0IjpicmVhaztjYXNlImZpbGUtZW50cnkiOmlmKCIvIj09''@;'; put 'put ''KFE9dnIoR1swXSwhMSkpLnBhdGgmJiJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0IiE9PVEudHlwZSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgT3BlbkRvY3VtZW50IGlzIG5vdCBhIHNwcmVhZHNoZWV0Iik7YnJlYWs7Y2FzZSJlbmNyeXB0aW9uLWRhdGEi''@;'; put 'put ''OmNhc2UiYWxnb3JpdGhtIjpjYXNlInN0YXJ0LWtleS1nZW5lcmF0aW9uIjpjYXNlImtleS1kZXJpdmF0aW9uIjp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIE9EUyBFbmNyeXB0aW9uIik7ZGVmYXVsdDppZihMJiZMLldURil0aHJvdyBHfX0oVHQoUywiTUVUQS1JTkYvbWFuaWZlc3Qu''@;'; put 'put ''eG1sIiksTCk7dmFyIGs9cnIoUywiY29udGVudC54bWwiKTtpZighayl0aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgY29udGVudC54bWwgaW4gT0RTIC8gVU9GIGZpbGUiKTt2YXIgRz1uRShjbyhrKSxMKTtyZXR1cm4gUXIoUywibWV0YS54bWwiKSYmKEcuUHJvcHM9b20oVHQoUywibWV0YS54''@;'; put 'put ''bWwiKSkpLEd9KFMsTCk7aWYoUXIoUywiSW5kZXgvRG9jdW1lbnQuaXdhIikpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBOVU1CRVJTIGZpbGUiKTt2YXIgbGUsbWUsaz1mdW5jdGlvbiBNdChTKXtmb3IodmFyIEw9Uy5GdWxsUGF0aHN8fExlKFMuZmlsZXMpLGs9W10sRz0wO0c8TC5s''@;'; put 'put ''ZW5ndGg7KytHKSIvIiE9TFtHXS5zbGljZSgtMSkmJmsucHVzaChMW0ddKTtyZXR1cm4gay5zb3J0KCl9KFMpLEc9ZnVuY3Rpb24gTHkoUyl7dmFyIEw9e3dvcmtib29rczpbXSxzaGVldHM6W10sY2hhcnRzOltdLGRpYWxvZ3M6W10sbWFjcm9zOltdLHJlbHM6W10sc3RyczpbXSxjb21tZW50''@;'; put 'put ''czpbXSxsaW5rczpbXSxjb3JlcHJvcHM6W10sZXh0cHJvcHM6W10sY3VzdHByb3BzOltdLHRoZW1lczpbXSxzdHlsZXM6W10sY2FsY2NoYWluczpbXSx2YmE6W10sZHJhd2luZ3M6W10scGl2b3RzOltdLHBpdm90Y2FjaGVzOltdLHBpdm90cmVjb3JkczpbXSxkYXRhbW9kZWxzOltdLGNoYXJ0''@;'; put 'put ''b2JqczpbXSxjaGFydHN0eWxlczpbXSxjaGFydGNvbG9yczpbXSxjaGFydGV4czpbXSx0YWJsZXM6W10sY29ubnM6W10sY3RybHByb3BzOltdLGN1c3RvbXhtbHByb3BzOltdLFRPRE86W10seG1sbnM6IiJ9O2lmKCFTfHwhUy5tYXRjaClyZXR1cm4gTDt2YXIgaz17fTtpZigoUy5tYXRjaCh0''@;'; put 'put ''bil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKEcpe3ZhciBRPXZyKEcpO3N3aXRjaChRWzBdLnJlcGxhY2UoY2EsIjwiKSl7Y2FzZSI8P3htbCI6YnJlYWs7Y2FzZSI8VHlwZXMiOkwueG1sbnM9UVsieG1sbnMiKyhRWzBdLm1hdGNoKC88KFx3Kyk6Lyl8fFsiIiwiIl0pWzFdXTticmVhaztjYXNl''@;'; put 'put ''IjxEZWZhdWx0IjprW1EuRXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCldPVEuQ29udGVudFR5cGU7YnJlYWs7Y2FzZSI8T3ZlcnJpZGUiOnZvaWQgMCE9PUxbUjhbUS5Db250ZW50VHlwZV1dJiZMW1I4W1EuQ29udGVudFR5cGVdXS5wdXNoKFEuUGFydE5hbWUpfX0pLEwueG1sbnMhPT1CYS5DVCl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIlVua25vd24gTmFtZXNwYWNlOiAiK0wueG1sbnMpO3JldHVybiBMLmNhbGNjaGFpbj1MLmNhbGNjaGFpbnMubGVuZ3RoPjA/TC5jYWxjY2hhaW5zWzBdOiIiLEwuc3N0PUwuc3Rycy5sZW5ndGg+MD9MLnN0cnNbMF06IiIsTC5zdHlsZT1MLnN0eWxlcy5sZW5ndGg+''@;'; put 'put ''MD9MLnN0eWxlc1swXToiIixMLmNvbm49TC5jb25ucy5sZW5ndGg+MD9MLmNvbm5zWzBdOiIiLEwuZGVmYXVsdHM9ayxkZWxldGUgTC5jYWxjY2hhaW5zLEx9KHJyKFMsIltDb250ZW50X1R5cGVzXS54bWwiKSksUT0hMTtpZigwPT09Ry53b3JrYm9va3MubGVuZ3RoJiZUdChTLG1lPSJ4bC93''@;'; put 'put ''b3JrYm9vay54bWwiLCEwKSYmRy53b3JrYm9va3MucHVzaChtZSksMD09PUcud29ya2Jvb2tzLmxlbmd0aCl7aWYoIVR0KFMsbWU9InhsL3dvcmtib29rLmJpbiIsITApKXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgd29ya2Jvb2siKTtHLndvcmtib29rcy5wdXNoKG1lKSxRPSEw''@;'; put 'put ''fSJiaW4iPT1HLndvcmtib29rc1swXS5zbGljZSgtMykmJihRPSEwKTt2YXIgcGU9e30sYmU9e307aWYoIUwuYm9va1NoZWV0cyYmIUwuYm9va1Byb3BzKXtpZihQYj1bXSxHLnNzdCl0cnl7UGI9ZnVuY3Rpb24gbk8oUyxMLGspe3JldHVybiIuYmluIj09PUwuc2xpY2UoLTQpP2Z1bmN0aW9u''@;'; put 'put ''IFBJKFMsTCl7dmFyIGs9W10sRz0hMTtyZXR1cm4gRG4oUyxmdW5jdGlvbihsZSxtZSxwZSl7c3dpdGNoKHBlKXtjYXNlIDE1OTprLkNvdW50PWxlWzBdLGsuVW5pcXVlPWxlWzFdO2JyZWFrO2Nhc2UgMTk6ay5wdXNoKGxlKTticmVhaztjYXNlIDE2MDpyZXR1cm4hMDtjYXNlIDM1Okc9ITA7''@;'; put 'put ''YnJlYWs7Y2FzZSAzNjpHPSExO2JyZWFrO2RlZmF1bHQ6aWYobWUuaW5kZXhPZigiQmVnaW4iKT4wfHxtZS5pbmRleE9mKCJFbmQiKSwhR3x8TC5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK3BlKyIgIittZSl9fSksa30oUyxrKTpmdW5jdGlvbiBHOChTLEwpe3Zh''@;'; put 'put ''ciBrPVtdLEc9IiI7aWYoIVMpcmV0dXJuIGs7dmFyIFE9Uy5tYXRjaChkTSk7aWYoUSl7Rz1RWzJdLnJlcGxhY2UoWTgsIiIpLnNwbGl0KFF6KTtmb3IodmFyIGxlPTA7bGUhPUcubGVuZ3RoOysrbGUpe3ZhciBtZT1uYihHW2xlXS50cmltKCksTCk7bnVsbCE9bWUmJihrW2subGVuZ3RoXT1t''@;'; put 'put ''ZSl9UT12cihRWzFdKSxrLkNvdW50PVEuY291bnQsay5VbmlxdWU9US51bmlxdWVDb3VudH1yZXR1cm4ga30oUyxrKX0oVHQoUyxlYyhHLnNzdCkpLEcuc3N0LEwpfWNhdGNoKHdyKXtpZihMLldURil0aHJvdyB3cn1MLmNlbGxTdHlsZXMmJkcudGhlbWVzLmxlbmd0aCYmKHBlPWZ1bmN0aW9u''@;'; put 'put ''IElXKFMsTCxrKXtyZXR1cm4gYm0oUyxrKX0ocnIoUyxHLnRoZW1lc1swXS5yZXBsYWNlKC9eXC8vLCIiKSwhMCl8fCIiLDAsTCkpLEcuc3R5bGUmJihiZT1mdW5jdGlvbiBEVyhTLEwsayxHKXtyZXR1cm4iLmJpbiI9PT1MLnNsaWNlKC00KT9mdW5jdGlvbiB4MShTLEwsayl7dmFyIEc9e051''@;'; put 'put ''bWJlckZtdDpbXX07Zm9yKHZhciBRIGluIEEuX3RhYmxlKUcuTnVtYmVyRm10W1FdPUEuX3RhYmxlW1FdO0cuQ2VsbFhmPVtdLEcuRm9udHM9W10sRy5GaWxscz1bXSxHLkJvcmRlcnM9W107dmFyIGxlPVtdLG1lPSExO3JldHVybiBEbihTLGZ1bmN0aW9uKGJlLE5lLEJlKXtzd2l0Y2goQmUp''@;'; put 'put ''e2Nhc2UgNDQ6Ry5OdW1iZXJGbXRbYmVbMF1dPWJlWzFdLEEubG9hZChiZVsxXSxiZVswXSk7YnJlYWs7Y2FzZSA0MzpoYihiZS5jb2xvcixMKSxHLkZvbnRzLnB1c2goYmUpO2JyZWFrO2Nhc2UgMTAyNTpjYXNlIDQ4OmNhc2UgNTA3OmNhc2UgNTcyOmNhc2UgNDc1OmNhc2UgMTE3MTpjYXNl''@;'; put 'put ''IDIxMDI6Y2FzZSAxMTMwOmNhc2UgNTEyOmNhc2UgMjA5NTpjYXNlIDMwNzI6YnJlYWs7Y2FzZSA0NTpiZS5mZ0NvbG9yJiZoYihiZS5mZ0NvbG9yLEwpLGJlLmJnQ29sb3ImJmhiKGJlLmJnQ29sb3IsTCksRy5GaWxscy5wdXNoKGJlKTticmVhaztjYXNlIDQ2OlsidG9wIiwiYm90dG9tIiwi''@;'; put 'put ''bGVmdCIsInJpZ2h0IiwiZGlhZyJdLmZvckVhY2goZnVuY3Rpb24oR2Upe2JlW0dlXSYmYmVbR2VdLmNvbG9yJiZoYihiZVtHZV0uY29sb3IsTCl9KSxHLkJvcmRlcnMucHVzaChiZSk7YnJlYWs7Y2FzZSA0NzoiQnJ0QmVnaW5DZWxsWEZzIj09bGVbbGUubGVuZ3RoLTFdJiZHLkNlbGxYZi5w''@;'; put 'put ''dXNoKGJlKTticmVhaztjYXNlIDM1Om1lPSEwO2JyZWFrO2Nhc2UgMzY6bWU9ITE7YnJlYWs7Y2FzZSAzNzpsZS5wdXNoKE5lKSxtZT0hMDticmVhaztjYXNlIDM4OmxlLnBvcCgpLG1lPSExO2JyZWFrO2RlZmF1bHQ6aWYoKE5lfHwiIikuaW5kZXhPZigiQmVnaW4iKT4wKWxlLnB1c2goTmUp''@;'; put 'put ''O2Vsc2UgaWYoKE5lfHwiIikuaW5kZXhPZigiRW5kIik+MClsZS5wb3AoKTtlbHNlIGlmKCFtZXx8ay5XVEYmJiJCcnRBQ0JlZ2luIiE9bGVbbGUubGVuZ3RoLTFdKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitCZSsiICIrTmUpfX0pLChHLkZvbnRzfHxbXSlbMF0mJkJw''@;'; put 'put ''KEcuRm9udHNbMF0pLEd9KFMsayxHKTpKSShTLGssRyl9KFR0KFMsZWMoRy5zdHlsZSkpLEcuc3R5bGUscGUsTCkpfXZhciBOZT1HLmxpbmtzLm1hcChmdW5jdGlvbih3cil7dHJ5e3ZhciBWbj1KMihycihTLFVoKGVjKHdyKSkpLHdyKTtyZXR1cm4gZnVuY3Rpb24gUlcoUyxMLGssRyl7cmV0''@;'; put 'put ''dXJuIi5iaW4iPT09ay5zbGljZSgtNCk/ZnVuY3Rpb24gV3AoUyxMLGssRyl7aWYoIVMpcmV0dXJuIFM7dmFyIFE9R3x8e30sbGU9ITE7RG4oUyxmdW5jdGlvbihiZSxOZSxCZSl7c3dpdGNoKEJlKXtjYXNlIDM1OTpjYXNlIDM2MzpjYXNlIDM2NDpjYXNlIDM2NjpjYXNlIDM2NzpjYXNlIDM2''@;'; put 'put ''ODpjYXNlIDM2OTpjYXNlIDM3MDpjYXNlIDM3MTpjYXNlIDQ3MjpjYXNlIDU3NzpjYXNlIDU3ODpjYXNlIDU3OTpjYXNlIDU4MDpjYXNlIDU4MTpjYXNlIDU4MjpjYXNlIDU4MzpjYXNlIDU4NDpjYXNlIDU4NTpjYXNlIDU4NjpjYXNlIDU4NzpicmVhaztjYXNlIDM1OmxlPSEwO2JyZWFrO2Nh''@;'; put 'put ''c2UgMzY6bGU9ITE7YnJlYWs7ZGVmYXVsdDppZighKChOZXx8IiIpLmluZGV4T2YoIkJlZ2luIik+MCkmJiEoKE5lfHwiIikuaW5kZXhPZigiRW5kIik+MCkmJighbGV8fFEuV1RGKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrQmUudG9TdHJpbmcoMTYpKyIgIitOZSl9''@;'; put 'put ''fSxRKX0oUywwLDAsRyk6ZnVuY3Rpb24gdmIoUyxMLGssRyl7dmFyIFE9R3x8e30sbGU9e1NoZWV0TmFtZXM6W10sU2hlZXRzOnt9fSxwZT0hMSxiZT17fSxOZT0tMSxCZT0tMSxHZT17czp7cjowLGM6MH0sZTp7cjotMSxjOi0xfX0sZXQ9e30sY3Q9MDtyZXR1cm4oU3x8IiIpLnJlcGxhY2Uo''@;'; put 'put ''dG4sZnVuY3Rpb24oeHQsb3Qpe3ZhciBidD12cih4dCk7c3dpdGNoKFhpKGJ0WzBdKSl7Y2FzZSI8P3htbCI6Y2FzZSI8ZXh0ZXJuYWxMaW5rIjpjYXNlIjwvZXh0ZXJuYWxMaW5rPiI6Y2FzZSI8L2V4dGVybmFsQm9vaz4iOmNhc2UiPHNoZWV0TmFtZXMiOmNhc2UiPHNoZWV0TmFtZXM+Ijpj''@;'; put 'put ''YXNlIjwvc2hlZXROYW1lcz4iOmNhc2UiPHNoZWV0RGF0YVNldD4iOmNhc2UiPHNoZWV0RGF0YVNldC8+IjpjYXNlIjwvc2hlZXREYXRhU2V0PiI6Y2FzZSI8L3Jvdz4iOmJyZWFrO2Nhc2UiPGV4dGVybmFsQm9vayI6Y2FzZSI8ZXh0ZXJuYWxCb29rPiI6bGUuVGFyZ2V0PUxbIiFpZCJdW2J0''@;'; put 'put ''LmlkXS5UYXJnZXQsbGUuTWlzc2luZz1MWyIhaWQiXVtidC5pZF0uVHlwZT09S2EuWE1JU1M7YnJlYWs7Y2FzZSI8c2hlZXROYW1lIjpsZS5TaGVldE5hbWVzLnB1c2goZWkoY28oYnQudmFsKSkpO2JyZWFrO2Nhc2UiPHNoZWV0RGF0YSI6YmU9e30sbGUuU2hlZXRzW2xlLlNoZWV0TmFtZXNb''@;'; put 'put ''YnQuc2hlZXRJZF1dPUZyKGJ0LnJlZnJlc2hFcnJvcnx8IjAiKT9udWxsOmJlO2JyZWFrO2Nhc2UiPC9zaGVldERhdGE+IjpHZS5lLmM+PTAmJihiZVsiIXJlZiJdPW9vKEdlKSk7YnJlYWs7Y2FzZSI8cm93IjpjYXNlIjxyb3c+IjpidC5yP05lPXBhcnNlSW50KGJ0LnIsMTApLTE6TmUrKyxC''@;'; put 'put ''ZT0tMTticmVhaztjYXNlIjxjZWxsIjpjYXNlIjxjZWxsPiI6YnQucj9CZT1BbyhidC5yKS5jOisrQmUsZXQudD1idC50fHwibiIsInN0ciI9PWV0LnQmJihldC50PSJzIik7YnJlYWs7Y2FzZSI8L2NlbGw+IjpHZS5lLnI8TmUmJihHZS5lLnI9TmUpLEdlLmUuYzxCZSYmKEdlLmUuYz1CZSks''@;'; put 'put ''YmVbR2koe3I6TmUsYzpCZX0pXT1ldCxldD17fTticmVhaztjYXNlIjx2IjpjYXNlIjx2PiI6Y3Q9eHQubGVuZ3RoK290O2JyZWFrO2Nhc2UiPC92PiI6dmFyIEZ0PWVpKFMuc2xpY2UoY3Qsb3QpKTtldC52PSJuIj09ZXQudD9wYXJzZUZsb2F0KEZ0KTpGdDticmVhaztjYXNlIjx2Lz4iOmV0''@;'; put 'put ''LnY9IiI7YnJlYWs7Y2FzZSI8ZGVmaW5lZE5hbWVzPiI6cGU9ITA7YnJlYWs7Y2FzZSI8L2RlZmluZWROYW1lcz4iOnBlPSExO2JyZWFrO2RlZmF1bHQ6aWYoIXBlJiZRLldURil0aHJvdyJ1bnJlY29nbml6ZWQgIitidFswXSsiIGluIGV4dGVybmFsIGxpbmsifX0pLGxlfShTLEwsMCxHKX0o''@;'; put 'put ''VHQoUyxlYyh3cikpLFZuLHdyLEwpfWNhdGNoe319KSxCZT1mdW5jdGlvbiBxYihTLEwsayl7cmV0dXJuIi5iaW4iPT09TC5zbGljZSgtNCk/ZnVuY3Rpb24geFcoUyxMKXt2YXIgaz17QXBwVmVyc2lvbjp7fSxXQlByb3BzOnt9LFdCVmlldzpbXSxTaGVldHM6W10sQ2FsY1ByOnt9LHhtbG5z''@;'; put 'put ''OiIifSxHPVtdLFE9ITE7THx8KEw9e30pLEwuYmlmZj0xMjt2YXIgbGU9W10sbWU9W1tdXTtyZXR1cm4gbWUuU2hlZXROYW1lcz1bXSxtZS5YVEk9W10sQm1bMTZdPXtuOiJCcnRGUlRBcmNoSUQkIixmOlNXfSxEbihTLGZ1bmN0aW9uKGJlLE5lLEJlKXtzd2l0Y2goQmUpe2Nhc2UgMTU2Om1l''@;'; put 'put ''LlNoZWV0TmFtZXMucHVzaChiZS5uYW1lKSxrLlNoZWV0cy5wdXNoKGJlKTticmVhaztjYXNlIDE1MzprLldCUHJvcHM9YmU7YnJlYWs7Y2FzZSAzOTpudWxsIT1iZS5TaGVldCYmKEwuU0lEPWJlLlNoZWV0KSxiZS5SZWY9WXUoYmUuUHRnLG51bGwsbnVsbCxtZSxMKSxkZWxldGUgTC5TSUQs''@;'; put 'put ''ZGVsZXRlIGJlLlB0ZyxsZS5wdXNoKGJlKTticmVhaztjYXNlIDEwMzY6Y2FzZSAzNjE6Y2FzZSAyMDcxOmNhc2UgMTU4OmNhc2UgMTQzOmNhc2UgNjY0OmNhc2UgMzUzOmNhc2UgMzA3MjpjYXNlIDMwNzM6Y2FzZSA1MzQ6Y2FzZSA2Nzc6Y2FzZSAxNTc6Y2FzZSA2MTA6Y2FzZSAyMDUwOmNh''@;'; put 'put ''c2UgMTU1OmNhc2UgNTQ4OmNhc2UgNjc2OmNhc2UgMTI4OmNhc2UgNjY1OmNhc2UgMjEyODpjYXNlIDIxMjU6Y2FzZSA1NDk6Y2FzZSAyMDUzOmNhc2UgNTk2OmNhc2UgMjA3NjpjYXNlIDIwNzU6Y2FzZSAyMDgyOmNhc2UgMzk3OmNhc2UgMTU0OmNhc2UgMTExNzpjYXNlIDU1MzpjYXNlIDIw''@;'; put 'put ''OTE6Y2FzZSAxNjpicmVhaztjYXNlIDM1NzpjYXNlIDM1ODpjYXNlIDM1NTpjYXNlIDY2NzptZVswXS5sZW5ndGg/bWUucHVzaChbQmUsYmVdKTptZVswXT1bQmUsYmVdLG1lW21lLmxlbmd0aC0xXS5YVEk9W107YnJlYWs7Y2FzZSAzNjI6MD09PW1lLmxlbmd0aCYmKG1lWzBdPVtdLG1lWzBd''@;'; put 'put ''LlhUST1bXSksbWVbbWUubGVuZ3RoLTFdLlhUST1tZVttZS5sZW5ndGgtMV0uWFRJLmNvbmNhdChiZSksbWUuWFRJPW1lLlhUSS5jb25jYXQoYmUpO2JyZWFrO2Nhc2UgMzU6Y2FzZSAzNzpHLnB1c2goTmUpLFE9ITA7YnJlYWs7Y2FzZSAzNjpjYXNlIDM4OkcucG9wKCksUT0hMTticmVhaztk''@;'; put 'put ''ZWZhdWx0OmlmKCEoKE5lfHwiIikuaW5kZXhPZigiQmVnaW4iKT4wKSYmISgoTmV8fCIiKS5pbmRleE9mKCJFbmQiKT4wKSYmKCFRfHxMLldURiYmIkJydEFDQmVnaW4iIT1HW0cubGVuZ3RoLTFdJiYiQnJ0RlJUQmVnaW4iIT1HW0cubGVuZ3RoLTFdKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhw''@;'; put 'put ''ZWN0ZWQgcmVjb3JkICIrQmUrIiAiK05lKX19LEwpLE54KGspLGsuTmFtZXM9bGUsay5zdXBib29rcz1tZSxrfShTLGspOmZ1bmN0aW9uIGJXKFMsTCl7aWYoIVMpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCBmaWxlIik7dmFyIGs9e0FwcFZlcnNpb246e30sV0JQcm9wczp7fSxX''@;'; put 'put ''QlZpZXc6W10sU2hlZXRzOltdLENhbGNQcjp7fSxOYW1lczpbXSxFeHRlcm46W10seG1sbnM6IiJ9LEc9ITEsUT0ieG1sbnMiLGxlPXt9LG1lPTA7aWYoUy5yZXBsYWNlKHRuLGZ1bmN0aW9uKGJlLE5lKXt2YXIgQmU9dnIoYmUpO3N3aXRjaChYaShCZVswXSkpe2Nhc2UiPD94bWwiOmNhc2Ui''@;'; put 'put ''PC93b3JrYm9vaz4iOmNhc2UiPGZpbGVWZXJzaW9uLz4iOmNhc2UiPC9maWxlVmVyc2lvbj4iOmNhc2UiPGZpbGVTaGFyaW5nLz4iOmNhc2UiPC93b3JrYm9va1ByPiI6Y2FzZSI8d29ya2Jvb2tQcm90ZWN0aW9uLz4iOmNhc2UiPGJvb2tWaWV3cyI6Y2FzZSI8Ym9va1ZpZXdzPiI6Y2FzZSI8''@;'; put 'put ''L2Jvb2tWaWV3cz4iOmNhc2UiPC93b3JrYm9va1ZpZXc+IjpjYXNlIjxzaGVldHMiOmNhc2UiPHNoZWV0cz4iOmNhc2UiPC9zaGVldHM+IjpjYXNlIjwvc2hlZXQ+IjpjYXNlIjxmdW5jdGlvbkdyb3VwcyI6Y2FzZSI8ZnVuY3Rpb25Hcm91cHMvPiI6Y2FzZSI8ZnVuY3Rpb25Hcm91cCI6Y2Fz''@;'; put 'put ''ZSI8ZXh0ZXJuYWxSZWZlcmVuY2VzIjpjYXNlIjwvZXh0ZXJuYWxSZWZlcmVuY2VzPiI6Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2VzPiI6Y2FzZSI8ZGVmaW5lZE5hbWVzLz4iOmNhc2UiPGRlZmluZWROYW1lLz4iOmNhc2UiPC9jYWxjUHI+IjpjYXNlIjxvbGVTaXplIjpjYXNlIjxjdXN0b21X''@;'; put 'put ''b3JrYm9va1ZpZXdzPiI6Y2FzZSI8L2N1c3RvbVdvcmtib29rVmlld3M+IjpjYXNlIjxjdXN0b21Xb3JrYm9va1ZpZXdzIjpjYXNlIjxjdXN0b21Xb3JrYm9va1ZpZXciOmNhc2UiPC9jdXN0b21Xb3JrYm9va1ZpZXc+IjpjYXNlIjxwaXZvdENhY2hlcz4iOmNhc2UiPC9waXZvdENhY2hlcz4i''@;'; put 'put ''OmNhc2UiPHBpdm90Q2FjaGVzIjpjYXNlIjxwaXZvdENhY2hlIjpjYXNlIjxzbWFydFRhZ1ByIjpjYXNlIjxzbWFydFRhZ1ByLz4iOmNhc2UiPHNtYXJ0VGFnVHlwZXMiOmNhc2UiPHNtYXJ0VGFnVHlwZXM+IjpjYXNlIjwvc21hcnRUYWdUeXBlcz4iOmNhc2UiPHNtYXJ0VGFnVHlwZSI6Y2Fz''@;'; put 'put ''ZSI8d2ViUHVibGlzaGluZyI6Y2FzZSI8d2ViUHVibGlzaGluZy8+IjpjYXNlIjxmaWxlUmVjb3ZlcnlQciI6Y2FzZSI8ZmlsZVJlY292ZXJ5UHIvPiI6Y2FzZSI8d2ViUHVibGlzaE9iamVjdHM+IjpjYXNlIjx3ZWJQdWJsaXNoT2JqZWN0cyI6Y2FzZSI8L3dlYlB1Ymxpc2hPYmplY3RzPiI6''@;'; put 'put ''Y2FzZSI8d2ViUHVibGlzaE9iamVjdCI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6Y2FzZSI8ZXh0THN0Lz4iOmNhc2UiPEFyY2hJRCI6Y2FzZSI8cmV2aXNpb25QdHIiOmJyZWFrO2Nhc2UiPHdvcmtib29rIjpiZS5tYXRjaChYYikmJihRPSJ4bWxucyIr''@;'; put 'put ''YmUubWF0Y2goLzwoXHcrKTovKVsxXSksay54bWxucz1CZVtRXTticmVhaztjYXNlIjxmaWxlVmVyc2lvbiI6ZGVsZXRlIEJlWzBdLGsuQXBwVmVyc2lvbj1CZTticmVhaztjYXNlIjxmaWxlU2hhcmluZyI6ay5Nb2RpZnk9e3VzZXI6QmUudXNlck5hbWUsd2FybjpGcihCZS5yZWFkT25seVJl''@;'; put 'put ''Y29tbWVuZGVkfHwiZmFsc2UiKX0sKEJlLmFsZ29yaXRobU5hbWV8fEJlLmhhc2hWYWx1ZXx8QmUuc2FsdFZhbHVlfHxCZS5zcGluQ291bnQpJiYoay5Nb2RpZnkuZW5jcnlwdGlvbj17YWxnbzpCZS5hbGdvcml0aG1OYW1lLGhhc2g6QmUuaGFzaFZhbHVlLHNhbHQ6QmUuc2FsdFZhbHVlLHNw''@;'; put 'put ''aW46K0JlLnNwaW5Db3VudHx8MWU1fSk7YnJlYWs7Y2FzZSI8d29ya2Jvb2tQciI6Y2FzZSI8d29ya2Jvb2tQci8+IjpBNy5mb3JFYWNoKGZ1bmN0aW9uKGV0KXtpZihudWxsIT1CZVtldFswXV0pc3dpdGNoKGV0WzJdKXtjYXNlImJvb2wiOmsuV0JQcm9wc1tldFswXV09RnIoQmVbZXRbMF1d''@;'; put 'put ''KTticmVhaztjYXNlImludCI6ay5XQlByb3BzW2V0WzBdXT1wYXJzZUludChCZVtldFswXV0sMTApO2JyZWFrO2RlZmF1bHQ6ay5XQlByb3BzW2V0WzBdXT1CZVtldFswXV19fSksQmUuY29kZU5hbWUmJihrLldCUHJvcHMuQ29kZU5hbWU9Y28oQmUuY29kZU5hbWUpKTticmVhaztjYXNlIjx3''@;'; put 'put ''b3JrYm9va1Byb3RlY3Rpb24iOnZhciBHZT1rLlByb3RlY3Rpb258fHt9O0dlLmxvY2tTdHJ1Y3R1cmU9RnIoQmUubG9ja1N0cnVjdHVyZXx8ImZhbHNlIiksR2UubG9ja1dpbmRvd3M9RnIoQmUubG9ja1dpbmRvd3N8fCJmYWxzZSIpLEJlLndvcmtib29rQWxnb3JpdGhtTmFtZSYmKEdlLmVu''@;'; put 'put ''Y3J5cHRpb249e2FsZ286QmUud29ya2Jvb2tBbGdvcml0aG1OYW1lLGhhc2g6QmUud29ya2Jvb2tIYXNoVmFsdWUsc2FsdDpCZS53b3JrYm9va1NhbHRWYWx1ZSxzcGluOitCZS53b3JrYm9va1NwaW5Db3VudHx8MWU1fSksay5Qcm90ZWN0aW9uPUdlO2JyZWFrO2Nhc2UiPHdvcmtib29rVmll''@;'; put 'put ''dyI6Y2FzZSI8d29ya2Jvb2tWaWV3Lz4iOmRlbGV0ZSBCZVswXSxrLldCVmlldy5wdXNoKEJlKTticmVhaztjYXNlIjxzaGVldCI6c3dpdGNoKEJlLnN0YXRlKXtjYXNlImhpZGRlbiI6QmUuSGlkZGVuPTE7YnJlYWs7Y2FzZSJ2ZXJ5SGlkZGVuIjpCZS5IaWRkZW49MjticmVhaztkZWZhdWx0''@;'; put 'put ''OkJlLkhpZGRlbj0wfWRlbGV0ZSBCZS5zdGF0ZSxCZS5uYW1lPWVpKGNvKEJlLm5hbWUpKSxkZWxldGUgQmVbMF0say5TaGVldHMucHVzaChCZSk7YnJlYWs7Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2UiOmsuRXh0ZXJuLnB1c2goQmUuaWQpO2JyZWFrO2Nhc2UiPGRlZmluZWROYW1lcz4iOmNh''@;'; put 'put ''c2UiPGRlZmluZWROYW1lcyI6Y2FzZSI8ZXh0IjpjYXNlIjxBbHRlcm5hdGVDb250ZW50IjpjYXNlIjxBbHRlcm5hdGVDb250ZW50PiI6Rz0hMDticmVhaztjYXNlIjwvZGVmaW5lZE5hbWVzPiI6Y2FzZSI8L2V4dD4iOmNhc2UiPC9BbHRlcm5hdGVDb250ZW50PiI6Rz0hMTticmVhaztjYXNl''@;'; put 'put ''IjxkZWZpbmVkTmFtZSI6KGxlPXt9KS5OYW1lPWNvKEJlLm5hbWUpLEJlLmNvbW1lbnQmJihsZS5Db21tZW50PUJlLmNvbW1lbnQpLEJlLmxvY2FsU2hlZXRJZCYmKGxlLlNoZWV0PStCZS5sb2NhbFNoZWV0SWQpLEZyKEJlLmhpZGRlbnx8IjAiKSYmKGxlLkhpZGRlbj0hMCksbWU9TmUrYmUu''@;'; put 'put ''bGVuZ3RoO2JyZWFrO2Nhc2UiPC9kZWZpbmVkTmFtZT4iOmxlLlJlZj1laShjbyhTLnNsaWNlKG1lLE5lKSkpLGsuTmFtZXMucHVzaChsZSk7YnJlYWs7Y2FzZSI8Y2FsY1ByIjpjYXNlIjxjYWxjUHIvPiI6ZGVsZXRlIEJlWzBdLGsuQ2FsY1ByPUJlO2JyZWFrO2RlZmF1bHQ6aWYoIUcmJkwu''@;'; put 'put ''V1RGKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrQmVbMF0rIiBpbiB3b3JrYm9vayIpfXJldHVybiBiZX0pLC0xPT09QmEubWFpbi5pbmRleE9mKGsueG1sbnMpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBOYW1lc3BhY2U6ICIray54bWxucyk7cmV0dXJuIE54KGspLGt9KFMs''@;'; put 'put ''ayl9KFR0KFMsZWMoRy53b3JrYm9va3NbMF0pKSxHLndvcmtib29rc1swXSxMKSxHZT17fSxldD0iIjtHLmNvcmVwcm9wcy5sZW5ndGgmJigoZXQ9VHQoUyxlYyhHLmNvcmVwcm9wc1swXSksITApKSYmKEdlPW9tKGV0KSksMCE9PUcuZXh0cHJvcHMubGVuZ3RoJiYoZXQ9VHQoUyxlYyhHLmV4''@;'; put 'put ''dHByb3BzWzBdKSwhMCkpJiZmdW5jdGlvbiBxYyhTLEwsayl7dmFyIEc9e307THx8KEw9e30pLFM9Y28oUyksUzEuZm9yRWFjaChmdW5jdGlvbihRKXt2YXIgbGU9KFMubWF0Y2goZDAoUVswXSkpfHxbXSlbMV07c3dpdGNoKFFbMl0pe2Nhc2Uic3RyaW5nIjpsZSYmKExbUVsxXV09ZWkobGUp''@;'; put 'put ''KTticmVhaztjYXNlImJvb2wiOkxbUVsxXV09InRydWUiPT09bGU7YnJlYWs7Y2FzZSJyYXciOnZhciBtZT1TLm1hdGNoKG5ldyBSZWdFeHAoIjwiK1FbMF0rIltePl0qPihbXFxzXFxTXSo/KTwvIitRWzBdKyI+IikpO21lJiZtZS5sZW5ndGg+MCYmKEdbUVsxXV09bWVbMV0pfX0pLEcuSGVh''@;'; put 'put ''ZGluZ1BhaXJzJiZHLlRpdGxlc09mUGFydHMmJk55KEcuSGVhZGluZ1BhaXJzLEcuVGl0bGVzT2ZQYXJ0cyxMLGspfShldCxHZSxMKSk7dmFyIGN0PXt9OyghTC5ib29rU2hlZXRzfHxMLmJvb2tQcm9wcykmJjAhPT1HLmN1c3Rwcm9wcy5sZW5ndGgmJihldD1ycihTLGVjKEcuY3VzdHByb3Bz''@;'; put 'put ''WzBdKSwhMCkpJiYoY3Q9ZnVuY3Rpb24gUlMoUyxMKXt2YXIgaz17fSxHPSIiLFE9Uy5tYXRjaChNZyk7aWYoUSlmb3IodmFyIGxlPTA7bGUhPVEubGVuZ3RoOysrbGUpe3ZhciBtZT1RW2xlXSxwZT12cihtZSk7c3dpdGNoKHBlWzBdKXtjYXNlIjw/eG1sIjpjYXNlIjxQcm9wZXJ0aWVzIjpi''@;'; put 'put ''cmVhaztjYXNlIjxwcm9wZXJ0eSI6Rz1laShwZS5uYW1lKTticmVhaztjYXNlIjwvcHJvcGVydHk+IjpHPW51bGw7YnJlYWs7ZGVmYXVsdDppZigwPT09bWUuaW5kZXhPZigiPHZ0OiIpKXt2YXIgYmU9bWUuc3BsaXQoIj4iKSxOZT1iZVswXS5zbGljZSg0KSxCZT1iZVsxXTtzd2l0Y2goTmUp''@;'; put 'put ''e2Nhc2UibHBzdHIiOmNhc2UiYnN0ciI6Y2FzZSJscHdzdHIiOmNhc2UiY3kiOmNhc2UiZXJyb3IiOmtbR109ZWkoQmUpO2JyZWFrO2Nhc2UiYm9vbCI6a1tHXT1GcihCZSk7YnJlYWs7Y2FzZSJpMSI6Y2FzZSJpMiI6Y2FzZSJpNCI6Y2FzZSJpOCI6Y2FzZSJpbnQiOmNhc2UidWludCI6a1tH''@;'; put 'put ''XT1wYXJzZUludChCZSwxMCk7YnJlYWs7Y2FzZSJyNCI6Y2FzZSJyOCI6Y2FzZSJkZWNpbWFsIjprW0ddPXBhcnNlRmxvYXQoQmUpO2JyZWFrO2Nhc2UiZmlsZXRpbWUiOmNhc2UiZGF0ZSI6a1tHXT1JZShCZSk7YnJlYWs7ZGVmYXVsdDppZigiLyI9PU5lLnNsaWNlKC0xKSlicmVhaztMLldU''@;'; put 'put ''RiYmdHlwZW9mIGNvbnNvbGU8InUiJiZjb25zb2xlLndhcm4oIlVuZXhwZWN0ZWQiLG1lLE5lLGJlKX19ZWxzZSBpZigiPC8iIT09bWUuc2xpY2UoMCwyKSYmTC5XVEYpdGhyb3cgbmV3IEVycm9yKG1lKX19cmV0dXJuIGt9KGV0LEwpKTt2YXIgeHQ9e307aWYoKEwuYm9va1NoZWV0c3x8TC5i''@;'; put 'put ''b29rUHJvcHMpJiYoQmUuU2hlZXRzP2xlPUJlLlNoZWV0cy5tYXAoZnVuY3Rpb24oVm4pe3JldHVybiBWbi5uYW1lfSk6R2UuV29ya3NoZWV0cyYmR2UuU2hlZXROYW1lcy5sZW5ndGg+MCYmKGxlPUdlLlNoZWV0TmFtZXMpLEwuYm9va1Byb3BzJiYoeHQuUHJvcHM9R2UseHQuQ3VzdHByb3Bz''@;'; put 'put ''PWN0KSxMLmJvb2tTaGVldHMmJnR5cGVvZiBsZTwidSImJih4dC5TaGVldE5hbWVzPWxlKSxMLmJvb2tTaGVldHM/eHQuU2hlZXROYW1lczpMLmJvb2tQcm9wcykpcmV0dXJuIHh0O2xlPXt9O3ZhciBvdD17fTtMLmJvb2tEZXBzJiZHLmNhbGNjaGFpbiYmKG90PWZ1bmN0aW9uIHJPKFMsTCxr''@;'; put 'put ''KXtyZXR1cm4iLmJpbiI9PT1MLnNsaWNlKC00KT9mdW5jdGlvbiB5UihTKXt2YXIgRz1bXTtyZXR1cm4gRG4oUyxmdW5jdGlvbihtZSxwZSxiZSl7aWYoNjM9PT1iZSlHLnB1c2gobWUpO2Vsc2UgaWYoISgocGV8fCIiKS5pbmRleE9mKCJCZWdpbiIpPjB8fChwZXx8IiIpLmluZGV4T2YoIkVu''@;'; put 'put ''ZCIpPjApKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitiZSsiICIrcGUpfSksR30oUyk6ZnVuY3Rpb24ga00oUyl7dmFyIEw9W107aWYoIVMpcmV0dXJuIEw7dmFyIGs9MTtyZXR1cm4oUy5tYXRjaCh0bil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKEcpe3ZhciBRPXZyKEcp''@;'; put 'put ''O3N3aXRjaChRWzBdKXtjYXNlIjw/eG1sIjpjYXNlIjxjYWxjQ2hhaW4iOmNhc2UiPGNhbGNDaGFpbj4iOmNhc2UiPC9jYWxjQ2hhaW4+IjpicmVhaztjYXNlIjxjIjpkZWxldGUgUVswXSxRLmk/az1RLmk6US5pPWssTC5wdXNoKFEpfX0pLEx9KFMpfShUdChTLGVjKEcuY2FsY2NoYWluKSks''@;'; put 'put ''Ry5jYWxjY2hhaW4pKTt2YXIga3QsTHQsYnQ9MCxGdD17fSxKdD1CZS5TaGVldHM7R2UuV29ya3NoZWV0cz1KdC5sZW5ndGgsR2UuU2hlZXROYW1lcz1bXTtmb3IodmFyIFRuPTA7VG4hPUp0Lmxlbmd0aDsrK1RuKUdlLlNoZWV0TmFtZXNbVG5dPUp0W1RuXS5uYW1lO3ZhciBzcj1RPyJiaW4i''@;'; put 'put ''OiJ4bWwiLENuPUcud29ya2Jvb2tzWzBdLmxhc3RJbmRleE9mKCIvIiksbHI9KEcud29ya2Jvb2tzWzBdLnNsaWNlKDAsQ24rMSkrIl9yZWxzLyIrRy53b3JrYm9va3NbMF0uc2xpY2UoQ24rMSkrIi5yZWxzIikucmVwbGFjZSgvXlwvLywiIik7UXIoUyxscil8fChscj0ieGwvX3JlbHMvd29y''@;'; put 'put ''a2Jvb2suIitzcisiLnJlbHMiKTt2YXIgcW49SjIocnIoUyxsciwhMCksbHIpLFduPXFuLHByPVtdO3FuJiYoQmUmJkJlLkV4dGVybiYmQmUuRXh0ZXJuLmxlbmd0aCYmQmUuRXh0ZXJuLmZvckVhY2goZnVuY3Rpb24od3IsVm4pe3ZhciBaaT0oIi94bC8iK3FuWyIhaWQiXVt3cl0uVGFyZ2V0''@;'; put 'put ''KS5yZXBsYWNlKC9bXC9dW1wvXS9nLCIvIiksQ2k9Ry5saW5rcy5pbmRleE9mKFppKTtDaT4tMSYmKHByW1ZuXT1OZVtDaV0pfSksQmUmJmRlbGV0ZSBCZS5FeHRlcm4pLHFuJiYocW49ZnVuY3Rpb24gc1koUyxMKXtpZighUylyZXR1cm4gMDt0cnl7Uz1MLm1hcChmdW5jdGlvbihHKXtyZXR1''@;'; put 'put ''cm4gRy5pZHx8KEcuaWQ9Ry5zdHJSZWxJRCksW0cubmFtZSxTWyIhaWQiXVtHLmlkXS5UYXJnZXQsb1koU1siIWlkIl1bRy5pZF0uVHlwZSldfSl9Y2F0Y2h7cmV0dXJuIG51bGx9cmV0dXJuIFMmJjAhPT1TLmxlbmd0aD9TOm51bGx9KHFuLEJlLlNoZWV0cykpO3ZhciB5cj1RcihTLCJ4bC93''@;'; put 'put ''b3Jrc2hlZXRzL3NoZWV0LnhtbCIpPzE6MCx0cj1bXSx3aT1bXTtlOmZvcihidD0wO2J0IT1HZS5Xb3Jrc2hlZXRzOysrYnQpe3ZhciBGaT0ic2hlZXQiO2lmKHFuJiZxbltidF0/KGt0PSJ4bC8iK3FuW2J0XVsxXS5yZXBsYWNlKC9bXC9dP3hsXC8vLCIiKSxRcihTLGt0KXx8KGt0PXFuW2J0''@;'; put 'put ''XVsxXSksUXIoUyxrdCl8fChrdD1sci5yZXBsYWNlKC9fcmVsc1wvLiokLywiIikrcW5bYnRdWzFdKSxGaT1xbltidF1bMl0pOmt0PShrdD0ieGwvd29ya3NoZWV0cy9zaGVldCIrKGJ0KzEteXIpKyIuIitzcikucmVwbGFjZSgvc2hlZXQwXC4vLCJzaGVldC4iKSxMdD1rdC5yZXBsYWNlKC9e''@;'; put 'put ''KC4qKShcLykoW15cL10qKSQvLCIkMS9fcmVscy8kMy5yZWxzIiksdHIucHVzaChrdCksTCYmbnVsbCE9TC5zaGVldHMpc3dpdGNoKHR5cGVvZiBMLnNoZWV0cyl7Y2FzZSJudW1iZXIiOmlmKGJ0IT1MLnNoZWV0cyljb250aW51ZSBlO2JyZWFrO2Nhc2Uic3RyaW5nIjppZihHZS5TaGVldE5h''@;'; put 'put ''bWVzW2J0XS50b0xvd2VyQ2FzZSgpIT1MLnNoZWV0cy50b0xvd2VyQ2FzZSgpKWNvbnRpbnVlIGU7YnJlYWs7ZGVmYXVsdDppZihBcnJheS5pc0FycmF5JiZBcnJheS5pc0FycmF5KEwuc2hlZXRzKSl7Zm9yKHZhciByYT0wLG9hPTA7b2EhPUwuc2hlZXRzLmxlbmd0aDsrK29hKSJudW1iZXIi''@;'; put 'put ''PT10eXBlb2YgTC5zaGVldHNbb2FdJiZMLnNoZWV0c1tvYV09PWJ0JiYocmE9MSksInN0cmluZyI9PXR5cGVvZiBMLnNoZWV0c1tvYV0mJkwuc2hlZXRzW29hXS50b0xvd2VyQ2FzZSgpPT1HZS5TaGVldE5hbWVzW2J0XS50b0xvd2VyQ2FzZSgpJiYocmE9MSk7aWYoIXJhKWNvbnRpbnVlIGV9''@;'; put 'put ''fWlmKCFMLnNraXBQYXJzZSl7dmFyIGtpPXptKFMsa3QsTHQsR2UuU2hlZXROYW1lc1tidF0sYnQsRnQsbGUsRmksTCxCZSxwZSxiZSk7a2kmJmtpWyIhTERQIl0mJih3aVtidF09a2lbIiFMRFAiXSxkZWxldGUga2lbIiFMRFAiXSl9fWlmKHR5cGVvZiBwYXJzZV9zaGVldF9waXZvdDwidSIp''@;'; put 'put ''Zm9yKGJ0PTA7YnQ8bF8ubGVuZ3RoOysrYnQpcGFyc2Vfc2hlZXRfcGl2b3QuYXBwbHkobnVsbCxsX1tidF0pO2lmKHh0PXtEaXJlY3Rvcnk6RyxXb3JrYm9vazpCZSxQcm9wczpHZSxDdXN0cHJvcHM6Y3QsRGVwczpvdCxTaGVldHM6bGUsU2hlZXROYW1lczpHZS5TaGVldE5hbWVzLFN0cmlu''@;'; put 'put ''Z3M6UGIsU3R5bGVzOmJlLFRoZW1lczpwZSxTU0Y6QS5nZXRfdGFibGUoKX0sIUwuc2tpcFBhcnNlKXtpZihmdW5jdGlvbiBIVShTKXshU3x8IVMuV29ya2Jvb2t8fCFTLldvcmtib29rLk5hbWVzfHxTLldvcmtib29rLk5hbWVzLmZvckVhY2goZnVuY3Rpb24oTCl7aWYoTC5OYW1lJiYiX3hs''@;'; put 'put ''bm0uIj09TC5OYW1lLnNsaWNlKDAsNikmJigiX3hsbm0uUHJpbnRfQXJlYSI9PUwuTmFtZXx8Il94bG5tLlByaW50X1RpdGxlcyI9PUwuTmFtZSkpe3ZhciBrPVMuU2hlZXRzW1MuU2hlZXROYW1lc1tMLlNoZWV0XV07aWYoayl7a1siIXByaW50Il18fChrWyIhcHJpbnQiXT17fSksa1siIXBy''@;'; put 'put ''aW50Il0ucHJvcHN8fChrWyIhcHJpbnQiXS5wcm9wcz17fSk7dmFyIEc9a1siIXByaW50Il0sUT1MLlJlZjtpZigiX3hsbm0uUHJpbnRfQXJlYSI9PUwuTmFtZSl7US5pbmRleE9mKCIhIik+LTEmJihRPVEuc2xpY2UoUS5pbmRleE9mKCIhIikrMSkpO3ZhciBsZT10byhRPVEucmVwbGFjZSgv''@;'; put 'put ''WyRdL2csIiIpKTtHLmFyZWE9bGV9ZWxzZSJfeGxubS5QcmludF9UaXRsZXMiPT1MLk5hbWUmJihHLnRpdGxlcz17czp7cjotMSxjOi0xfSxlOntyOi0xLGM6LTF9fSxRLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihtZSl7dmFyIGJlPVZvKG1lLnNsaWNlKG1lLmluZGV4T2YoIiEiKSsx''@;'; put 'put ''KS5yZXBsYWNlKC9bJF0vZywiIikpO2JlLnMuYz4tMSYmKEcudGl0bGVzLnMuYz1iZS5zLmMpLGJlLmUuYz4tMSYmKEcudGl0bGVzLmUuYz1iZS5lLmMpLGJlLnMucj4tMSYmKEcudGl0bGVzLnMucj1iZS5zLnIpLGJlLmUucj4tMSYmKEcudGl0bGVzLmUucj1iZS5lLnIpfSkpfX19KX0oeHQp''@;'; put 'put ''LEwmJkwuYm9va0ZpbGVzJiYoeHQua2V5cz1rLHh0LmZpbGVzPVMuZmlsZXMpLEwmJkwuYm9va1ZCQSYmKEcudmJhLmxlbmd0aD4wP3h0LnZiYXJhdz1UdChTLGVjKEcudmJhWzBdKSwhMCk6Ry5kZWZhdWx0cyYmImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdCI9PT1HLmRl''@;'; put 'put ''ZmF1bHRzLmJpbiYmKHh0LnZiYXJhdz1UdChTLCJ4bC92YmFQcm9qZWN0LmJpbiIsITApKSksV24mJlduWyIhaWQiXSl7Zm9yKHZhciBrcj1bXSxZbj0xO1luPD0xMDI0OysrWW4pV25bIiFpZCJdWyJySWQiK1luXSYmV25bIiFpZCJdWyJySWQiK1luXS5UeXBlJiYvY3VzdG9tWG1sJC8udGVz''@;'; put 'put ''dChXblsiIWlkIl1bInJJZCIrWW5dLlR5cGUpJiZrci5wdXNoKG1uKFduWyIhaWQiXVsicklkIitZbl0uVGFyZ2V0LEcud29ya2Jvb2tzWzBdKSk7a3IubGVuZ3RoPjAmJih4dC5DdXN0b21YTUw9W10sa3IuZm9yRWFjaChmdW5jdGlvbih3cil7dmFyIFZuPXtkYXRhOnJyKFMsZWMod3IpKX0s''@;'; put 'put ''enI9VWgod3IpO3RyeXt2YXIgWmk9SjIocnIoUyxlYyh6ciksITApLHpyKTtpZihaaSlmb3IodmFyIENpPTE7Q2k8PTEwMjQ7KytDaSlaaVsiIWlkIl1bInJJZCIrQ2ldJiZaaVsiIWlkIl1bInJJZCIrQ2ldLlR5cGUmJi9jdXN0b21YbWxQcm9wcyQvLnRlc3QoWmlbIiFpZCJdWyJySWQiK0Np''@;'; put 'put ''XS5UeXBlKSYmKFZuLnByb3BzPXJyKFMsZWMobW4oWmlbIiFpZCJdWyJySWQiK0NpXS5UYXJnZXQsd3IpKSkpfWNhdGNoe314dC5DdXN0b21YTUwucHVzaChWbil9KSl9dmFyIFZyPWZ0KFMsInhsL21vZGVsL2l0ZW0uZGF0YSIsITApO1ZyJiYoeHQubW9kZWw9VnIpLEcuY29ubiYmKHh0LmNv''@;'; put 'put ''bm49VHQoUyxlYyhHLmNvbm4pLCEwKSkscHIubGVuZ3RoJiYoeHQuRXh0ZXJuYWxXQj1wciksQmUmJihCZS5QUEk9Z20pfXJldHVybiBMLnRlbXBsYXRlJiYoeHQuX3dzcGF0aHM9dHIseHQuX3N0eXBhdGg9ZWMoRy5zdHlsZXx8IiIpLHh0Ll93YnBhdGg9ZWMoRy53b3JrYm9va3NbMF18fCJ4''@;'; put 'put ''bC93b3JrYm9vay54bWwiKSx4dC5fdm1scGF0aHM9d2kseHQuX3dicmVsc3BhdGg9bHIseHQuX2N0PXJyKFMsIltDb250ZW50X1R5cGVzXS54bWwiKSx4dC5maWxlcz1TLmZpbGVzLE5vKHh0LFMsTCkpLHh0fWZ1bmN0aW9uIGNZKFMsTCl7dmFyIGs9THx8e307ay5wYXNzd29yZHx8KGsucGFz''@;'; put 'put ''c3dvcmQ9IlZlbHZldFN3ZWF0c2hvcCIpO3ZhciBHPSJXb3JrYm9vayIsUT15ZS5maW5kKFMsRyk7dHJ5e2lmKCEoUT15ZS5maW5kKFMsRz0iLyFEYXRhU3BhY2VzL1ZlcnNpb24iKSl8fCFRLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5n''@;'; put 'put ''ICIrRyk7aWYoZnVuY3Rpb24gSEkoUyl7dmFyIEw9e307TC5pZD1TLnJlYWRfc2hpZnQoMCwibHBwNCIpLEwuUj1RaChTLDQpLEwuVT1RaChTLDQpLEwuVz1RaChTLDQpfShRLmNvbnRlbnQpLCEoUT15ZS5maW5kKFMsRz0iLyFEYXRhU3BhY2VzL0RhdGFTcGFjZU1hcCIpKXx8IVEuY29udGVu''@;'; put 'put ''dCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIG1pc3NpbmcgIitHKTt2YXIgbGU9ZnVuY3Rpb24gZk0oUyl7dmFyIEw9W107Uy5sKz00O2Zvcih2YXIgaz1TLnJlYWRfc2hpZnQoNCk7ay0tID4wOylMLnB1c2goaWIoUykpO3JldHVybiBMfShRLmNvbnRlbnQpO2lm''@;'; put 'put ''KDEhPT1sZS5sZW5ndGh8fDEhPT1sZVswXS5jb21wcy5sZW5ndGh8fDAhPT1sZVswXS5jb21wc1swXS50fHwiU3Ryb25nRW5jcnlwdGlvbkRhdGFTcGFjZSIhPT1sZVswXS5uYW1lfHwiRW5jcnlwdGVkUGFja2FnZSIhPT1sZVswXS5jb21wc1swXS52KXRocm93IG5ldyBFcnJvcigiRUNNQS0z''@;'; put 'put ''NzYgRW5jcnlwdGVkIGZpbGUgYmFkICIrRyk7aWYoIShRPXllLmZpbmQoUyxHPSIvIURhdGFTcGFjZXMvRGF0YVNwYWNlSW5mby9TdHJvbmdFbmNyeXB0aW9uRGF0YVNwYWNlIikpfHwhUS5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAi''@;'; put 'put ''K0cpO3ZhciBtZT1mdW5jdGlvbiBuVShTKXt2YXIgTD1bXTtTLmwrPTQ7Zm9yKHZhciBrPVMucmVhZF9zaGlmdCg0KTtrLS0gPjA7KUwucHVzaChTLnJlYWRfc2hpZnQoMCwibHBwNCIpKTtyZXR1cm4gTH0oUS5jb250ZW50KTtpZigxIT1tZS5sZW5ndGh8fCJTdHJvbmdFbmNyeXB0aW9uVHJh''@;'; put 'put ''bnNmb3JtIiE9bWVbMF0pdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBiYWQgIitHKTtpZighKFE9eWUuZmluZChTLEc9Ii8hRGF0YVNwYWNlcy9UcmFuc2Zvcm1JbmZvL1N0cm9uZ0VuY3J5cHRpb25UcmFuc2Zvcm0vIVByaW1hcnkiKSl8fCFRLmNvbnRlbnQpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrRyk7IWZ1bmN0aW9uIFZJKFMpe3ZhciBMPWZ1bmN0aW9uIE5JKFMpe3ZhciBMPXt9O3JldHVybiBTLnJlYWRfc2hpZnQoNCksUy5sKz00LEwuaWQ9Uy5yZWFkX3NoaWZ0KDAsImxwcDQiKSxMLm5hbWU9Uy5y''@;'; put 'put ''ZWFkX3NoaWZ0KDAsImxwcDQiKSxMLlI9UWgoUyw0KSxMLlU9UWgoUyw0KSxMLlc9UWgoUyw0KSxMfShTKTtpZihMLmVuYW1lPVMucmVhZF9zaGlmdCgwLCI4bHBwNCIpLEwuYmxrc3o9Uy5yZWFkX3NoaWZ0KDQpLEwuY21vZGU9Uy5yZWFkX3NoaWZ0KDQpLDQhPVMucmVhZF9zaGlmdCg0KSl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIkJhZCAhUHJpbWFyeSByZWNvcmQiKTtyZXR1cm4gTH0oUS5jb250ZW50KX1jYXRjaHt9aWYoIShRPXllLmZpbmQoUyxHPSIvRW5jcnlwdGlvbkluZm8iKSl8fCFRLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5n''@;'; put 'put ''ICIrRyk7dmFyIHBlPWZ1bmN0aW9uIHJVKFMpe3ZhciBMPVFoKFMpO3N3aXRjaChMLk1pbm9yKXtjYXNlIDI6cmV0dXJuW0wuTWlub3IsYWIoUyldO2Nhc2UgMzpyZXR1cm5bTC5NaW5vcixLOCgpXTtjYXNlIDQ6cmV0dXJuW0wuTWlub3IsaVUoUyldfXRocm93IG5ldyBFcnJvcigiRUNNQS0z''@;'; put 'put ''NzYgRW5jcnlwdGVkIGZpbGUgdW5yZWNvZ25pemVkIFZlcnNpb246ICIrTC5NaW5vcil9KFEuY29udGVudCk7aWYoIShRPXllLmZpbmQoUyxHPSIvRW5jcnlwdGVkUGFja2FnZSIpKXx8IVEuY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIG1pc3Npbmcg''@;'; put 'put ''IitHKTtpZig0PT1wZVswXSlyZXR1cm4gZnVuY3Rpb24ga08oUyxMLGssRyl7dmFyIFE9eWUudXRpbHMucHJlcF9ibG9iO2lmKCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L2tleUVuY3J5cHRvci9wYXNzd29yZCIhPVMudXJpKXRocm93IG5ldyBFcnJvcigiVW5z''@;'; put 'put ''dXBwb3J0ZWQgRUNNQS0zNzYgQWdpbGUgVVJJICIrUy51cmkpO3ZhciBsZT1TLmVuY3NbMF0sbWU9bGUuaGFzaEFsZ29yaXRobSxwZT0iYWVzLTI1Ni1jYmMiLGJlPUJ1ZmZlci5mcm9tKGxlLnNhbHRWYWx1ZSwiYmFzZTY0IiksTmU9QnVmZmVyLmZyb20oUy5zYWx0VmFsdWUsImJhc2U2NCIp''@;'; put 'put ''LEJlPStsZS5ibG9ja1NpemUsR2U9K2xlLmtleUJpdHM+PjMsZXQ9TWMoQnVmZmVyLmNvbmNhdChbYmUsQnVmZmVyLmZyb20oY3B0YWJsZS51dGlscy5lbmNvZGUoMTIwMCxrKSldKSxtZSksY3Q9QnVmZmVyLmFsbG9jKDQpO1EoY3QsMCk7Zm9yKHZhciB4dD0wO3h0PGxlLnNwaW5Db3VudDsr''@;'; put 'put ''K3h0KWN0Lmw9MCxjdC53cml0ZV9zaGlmdCg0LHh0KSxldD1NYyhCdWZmZXIuY29uY2F0KFtjdCxldF0pLG1lKTt2YXIgb3Q9ZnVuY3Rpb24oeXIsdHIsd2ksRmkpe3ZhciByYT1NYyhCdWZmZXIuY29uY2F0KFt5cixCdWZmZXIuZnJvbShbMjAsMTEwLDExLDIzMSwxNzEsMTcyLDIwOCwyMTRd''@;'; put 'put ''KV0pLEZpKSxvYT1yYS5sZW5ndGg+PXdpP3JhLnNsaWNlKDAsd2kpOkJ1ZmZlci5hbGxvYyh3aSk7aWYocmEubGVuZ3RoPHdpKXtmb3IodmFyIGtpPTA7a2k8cmEubGVuZ3RoOysra2kpb2Fba2ldPXJhW2tpXTtmb3IoO2tpPHdpOysra2kpb2Fba2ldPTU0fXJldHVybiBvYX0oZXQsMCxHZSxt''@;'; put 'put ''ZSk7c3dpdGNoKGxlLmNpcGhlckFsZ29yaXRobSl7Y2FzZSJBRVMiOmlmKCJDaGFpbmluZ01vZGVDQkMiIT1sZS5jaXBoZXJDaGFpbmluZyl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGNpcGhlciBjaGFpbmluZyAiK2xlLmNpcGhlckNoYWluaW5nKTtwZT0iYWVzLSIrbGUua2V5Qml0''@;'; put 'put ''cysiLWNiYyI7YnJlYWs7Y2FzZSJSQzIiOnBlPSJyYzIiO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBjaXBoZXIgYWxnbyAiK2xlLmNpcGhlckFsZ29yaXRobSl9YmU9ZnVuY3Rpb24ocHIpe2Zvcih2YXIgeXI9QnVmZmVyLmFsbG9jKEJlKSx0cj0wO3RyPEJl''@;'; put 'put ''OysrdHIpeXJbdHJdPXRyPHByLmxlbmd0aD9wclt0cl06NTQ7cmV0dXJuIHlyfShiZSk7dmFyIGJ0PUJ1ZmZlci5mcm9tKGxlLmVuY3J5cHRlZEtleVZhbHVlLCJiYXNlNjQiKSxGdD1qZyhvdCxiZSxwZSkudXBkYXRlKGJ0KSxrdD1qZyhNYyhCdWZmZXIuY29uY2F0KFtldCxCdWZmZXIuZnJv''@;'; put 'put ''bShbMjE1LDE3MCwxNSwxMDksNDgsOTcsNTIsNzhdKV0pLG1lKS5zbGljZSgwLEdlKSxiZSxwZSkudXBkYXRlKEJ1ZmZlci5mcm9tKGxlLmVuY3J5cHRlZFZlcmlmaWVySGFzaFZhbHVlLCJiYXNlNjQiKSksTHQ9TWMoamcoTWMoQnVmZmVyLmNvbmNhdChbZXQsQnVmZmVyLmZyb20oWzI1NCwx''@;'; put 'put ''NjcsMjEwLDExOCw1OSw3NSwxNTgsMTIxXSldKSxtZSkuc2xpY2UoMCxHZSksYmUscGUpLnVwZGF0ZShCdWZmZXIuZnJvbShsZS5lbmNyeXB0ZWRWZXJpZmllckhhc2hJbnB1dCwiYmFzZTY0IikpLG1lKSxKdD0rbGUuaGFzaFNpemV8fE1hdGgubWluKGt0Lmxlbmd0aCxMdC5sZW5ndGgpO2lm''@;'; put 'put ''KDAhPWt0LnNsaWNlKDAsSnQpLmNvbXBhcmUoTHQuc2xpY2UoMCxKdCkpKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IFBhc3N3b3JkIik7UShMLDApO3ZhciBUbj1MLnJlYWRfc2hpZnQoNCk7TC5sKz00O3ZhciBzcj1bXSxDbj1CdWZmZXIuY29uY2F0KFtOZSxCdWZmZXIuYWxsb2MoNCld''@;'; put 'put ''KTtmb3IoUShDbikseHQ9MDtMLmw8TC5sZW5ndGg7KUNuLmw9YmUubGVuZ3RoLENuLndyaXRlX3NoaWZ0KDQseHQpLHNyLnB1c2goamcoRnQsTWMoQnVmZmVyLmZyb20oQ24pLG1lKS5zbGljZSgwLDE2KSxwZSkudXBkYXRlKEJ1ZmZlci5mcm9tKEwuc2xpY2UoTC5sLEwubCs0MDk2KSkpKSxM''@;'; put 'put ''LmwrPTQwOTYsKyt4dDt2YXIgcW49QnVmZmVyLmNvbmNhdChzcikuc2xpY2UoMCxUbiksV249dW4oRyk7cmV0dXJuIFduLnR5cGU9ImJ1ZmZlciIsbWYocW4sV24pfShwZVsxXSxRLmNvbnRlbnQsay5wYXNzd29yZHx8IiIsayk7aWYoMj09cGVbMF0pcmV0dXJuIGZ1bmN0aW9uIERPKFMsTCxr''@;'; put 'put ''LEcpe3ZhciBRPXllLnV0aWxzLnByZXBfYmxvYjtpZigiU3RkIiE9PVMudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEJhZCBTdGFuZGFyZCBFbmNyeXB0aW9uIik7dmFyIGxlPVMudi5TYWx0LG1lPVMudi5WZXJpZmllcixwZT1TLnYuVmVyaWZpZXJIYXNoO2lmKDM2IT1TLmguRmxhZ3Mp''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBTdGFuZGFyZCBFbmNyeXB0aW9uIGJhZCBGbGFncyIpO3ZhciBiZT0wLE5lPSIiO3N3aXRjaChTLmguQWxnSUQpe2Nhc2UgMjYxMjY6YmU9MTI4LE5lPSJhZXMtMTI4LWVjYiI7YnJlYWs7Y2FzZSAyNjEyNzpiZT0xOTYsTmU9ImFlcy0xOTItZWNi''@;'; put 'put ''IjticmVhaztjYXNlIDI2MTI4OmJlPTI1NixOZT0iYWVzLTI1Ni1lY2IiO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBCYWQgU3RhbmRhcmQgRW5jcnlwdGlvbiIpfWlmKDMyNzcyIT1TLmguQWxnSURIYXNoKXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgQmFkIFN0''@;'; put 'put ''YW5kYXJkIEVuY3J5cHRpb24iKTtpZihTLmguS2V5U2l6ZSE9YmUpdGhyb3cgbmV3IEVycm9yKCJBbGdJRC9LZXlTaXplIG1pc21hdGNoIik7aWYoMjQhPVMuaC5Qcm92aWRlclR5cGUpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiB1bnN1cHBvcnRlZCBQcm92aWRlclR5cGUgIitTLmguUHJv''@;'; put 'put ''dmlkZXJUeXBlKTtpZigiTWljcm9zb2Z0IEVuaGFuY2VkIFJTQSBhbmQgQUVTIENyeXB0b2dyYXBoaWMgUHJvdmlkZXIiIT09Uy5oLkNTUE5hbWUuc2xpY2UoMCw1MykpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBDcnlwdG8gUHJvdmlkZXIgIitTLmguQ1NQTmFtZSk7dmFyIEdlPSJT''@;'; put 'put ''SEEtMSIsZXQ9YmU+PjMsY3Q9TWMoQnVmZmVyLmNvbmNhdChbbGUsY3B0YWJsZS51dGlscy5lbmNvZGUoMTIwMCxrKV0pLEdlKSx4dD1CdWZmZXIuYWxsb2MoNCk7USh4dCwwKTtmb3IodmFyIG90PTA7b3Q8NWU0Oysrb3QpeHQubD0wLHh0LndyaXRlX3NoaWZ0KDQsb3QpLGN0PU1jKEJ1ZmZl''@;'; put 'put ''ci5jb25jYXQoW3h0LGN0XSksR2UpO3h0Lmw9MCx4dC53cml0ZV9zaGlmdCg0LDApO3ZhciBzcixDbixscixxbixXbixGdD0ocW49KGxyPWZ1bmN0aW9uKHlyLHRyLHdpKXtmb3IodmFyIEZpPUJ1ZmZlci5hbGxvYyg2NCkscmE9MDtyYTxGaS5sZW5ndGg7KytyYSlGaVtyYV09eXI7Zm9yKHJh''@;'; put 'put ''PTA7cmE8dHIubGVuZ3RoOysrcmEpRmlbcmFdXj10cltyYV07cmV0dXJuIE1jKEZpLHdpKX0pKDU0LHNyPU1jKEJ1ZmZlci5jb25jYXQoW2N0LHh0XSksR2UpLENuPUdlKSxXbj1scig5MixzcixDbiksQnVmZmVyLmNvbmNhdChbcW4sV25dKS5zbGljZSgwLGV0KSk7aWYoamcoRnQsQnVmZmVy''@;'; put 'put ''LmFsbG9jKDApLE5lKS51cGRhdGUocGUpLnNsaWNlKDAsMjApLmNvbXBhcmUoTWMoamcoRnQsQnVmZmVyLmFsbG9jKDApLE5lKS51cGRhdGUobWUpLEdlKSkpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgUGFzc3dvcmQiKTtRKEwsMCk7dmFyIGt0PUwucmVhZF9zaGlmdCg0KTtMLmwrPTQ7''@;'; put 'put ''dmFyIEx0PVtdO2ZvcihvdD0wO0wubDxMLmxlbmd0aDspTHQucHVzaChqZyhGdCxCdWZmZXIuYWxsb2MoMCksTmUpLnVwZGF0ZShMLnNsaWNlKEwubCxMLmwrNDA5NikpKSxMLmwrPTQwOTYsKytvdDtyZXR1cm4gbWYoQnVmZmVyLmNvbmNhdChMdCkuc2xpY2UoMCxrdCksRyl9KHBlWzFdLFEu''@;'; put 'put ''Y29udGVudCxrLnBhc3N3b3JkfHwiIixrKTt0aHJvdyBuZXcgRXJyb3IoIkZpbGUgaXMgcGFzc3dvcmQtcHJvdGVjdGVkIil9ZnVuY3Rpb24gVWcoUyxMKXtpZighTC50ZW1wbGF0ZSl7aWYoIm9kcyI9PUwuYm9va1R5cGUpcmV0dXJuIEVPKFMsTCk7SjgoTCYmTC5QUEl8fDk2KSxTJiYhUy5T''@;'; put 'put ''U0YmJihTLlNTRj1BLmdldF90YWJsZSgpKSxTJiZTLlNTRiYmKGFlKEEpLEEubG9hZF90YWJsZShTLlNTRiksTC5yZXZzc2Y9QWUoUy5TU0YpLEwucmV2c3NmW1MuU1NGWzY1NTM1XV09MCxMLnNzZj1TLlNTRiksUy5TdHlsZXM9e0ZvbnRzOkwuRm9udHM9W3tzejoxMixjb2xvcjp7dGhlbWU6''@;'; put 'put ''MSxyZ2I6IjAwMDAwMCJ9LG5hbWU6IkNhbGlicmkiLGZhbWlseToyLHNjaGVtZToibWlub3IifV0sRmlsbHM6TC5GaWxscz1be3BhdHRlcm5UeXBlOiJub25lIn0se3BhdHRlcm5UeXBlOiJncmF5MTI1In1dLEJvcmRlcnM6TC5Cb3JkZXJzPVt7fV0sRFhGOkwuRFhGPVMuU3R5bGVzJiZTLlN0''@;'; put 'put ''eWxlcy5EWEZ8fFtdLFRhYmxlOkwuVGFibGU9Uy5TdHlsZXMmJlMuU3R5bGVzLlRhYmxlfHxbXX0sTC5vdmVycmlkZU1EVz9OYz1MLm92ZXJyaWRlTURXOkJwKEwuRm9udHNbMF0pLEwucmVscz17fSxMLndicmVscz17fSxMLlN0cmluZ3M9W10sTC5TdHJpbmdzLkNvdW50PTAsTC5TdHJpbmdz''@;'; put 'put ''LlVuaXF1ZT0wLEZiP0wucmV2U3RyaW5ncz1uZXcgTWFwOihMLnJldlN0cmluZ3M9e30sTC5yZXZTdHJpbmdzLmZvbz1bXSxkZWxldGUgTC5yZXZTdHJpbmdzLmZvbyk7dmFyIGs9Inhsc2IiPT1MLmJvb2tUeXBlPyJiaW4iOiJ4bWwiLEc9RFIuaW5kZXhPZihMLmJvb2tUeXBlKT4tMSxRPXt3''@;'; put 'put ''b3JrYm9va3M6W10sc2hlZXRzOltdLGNoYXJ0czpbXSxkaWFsb2dzOltdLG1hY3JvczpbXSxyZWxzOltdLHN0cnM6W10sY29tbWVudHM6W10sbGlua3M6W10sY29yZXByb3BzOltdLGV4dHByb3BzOltdLGN1c3Rwcm9wczpbXSx0aGVtZXM6W10sc3R5bGVzOltdLGNhbGNjaGFpbnM6W10sdmJh''@;'; put 'put ''OltdLGRyYXdpbmdzOltdLHBpdm90czpbXSxwaXZvdGNhY2hlczpbXSxwaXZvdHJlY29yZHM6W10sZGF0YW1vZGVsczpbXSxjaGFydG9ianM6W10sY2hhcnRzdHlsZXM6W10sY2hhcnRjb2xvcnM6W10sY2hhcnRleHM6W10sdGFibGVzOltdLGNvbm5zOltdLGN0cmxwcm9wczpbXSxjdXN0b214''@;'; put 'put ''bWxwcm9wczpbXSxUT0RPOltdLHhtbG5zOiIifTtjRShMPUx8fHt9KTt2YXIgbGU9ZGkoKSxtZT0iIixwZT0wO2lmKEwuY2VsbFhmcz1bXSxMLmNlbGxTdHlsZVhmcz1be25hbWU6Ik5vcm1hbCJ9XSxfMChMLmNlbGxYZnMsTC5jZWxsU3R5bGVYZnMse30se3JldnNzZjp7R2VuZXJhbDowfX0p''@;'; put 'put ''LFMuUHJvcHN8fChTLlByb3BzPXt9KSxabihsZSxtZT0iZG9jUHJvcHMvY29yZS54bWwiLGZ1bmN0aW9uIFJwKFMsTCl7dmFyIGs9THx8e30sRz1bcGksQzFdLFE9e307aWYoIVMmJiFrLlByb3BzKXJldHVybiBHLmpvaW4oIiIpO1MmJihudWxsIT1TLkNyZWF0ZWREYXRlJiZTZygiZGN0ZXJt''@;'; put 'put ''czpjcmVhdGVkIiwic3RyaW5nIj09dHlwZW9mIFMuQ3JlYXRlZERhdGU/Uy5DcmVhdGVkRGF0ZTp5MShTLkNyZWF0ZWREYXRlLGsuV1RGKSx7InhzaTp0eXBlIjoiZGN0ZXJtczpXM0NEVEYifSxHLFEpLG51bGwhPVMuTW9kaWZpZWREYXRlJiZTZygiZGN0ZXJtczptb2RpZmllZCIsInN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZiBTLk1vZGlmaWVkRGF0ZT9TLk1vZGlmaWVkRGF0ZTp5MShTLk1vZGlmaWVkRGF0ZSxrLldURikseyJ4c2k6dHlwZSI6ImRjdGVybXM6VzNDRFRGIn0sRyxRKSk7Zm9yKHZhciBsZT0wO2xlIT13MS5sZW5ndGg7KytsZSl7dmFyIG1lPXcxW2xlXSxwZT1rLlByb3BzJiZudWxs''@;'; put 'put ''IT1rLlByb3BzW21lWzFdXT9rLlByb3BzW21lWzFdXTpTP1NbbWVbMV1dOm51bGw7ITA9PT1wZT9wZT0iMSI6ITE9PT1wZT9wZT0iMCI6Im51bWJlciI9PXR5cGVvZiBwZSYmKHBlPVN0cmluZyhwZSkpLG51bGwhPXBlJiZTZyhtZVswXSxwZSxudWxsLEcsUSl9cmV0dXJuIEcubGVuZ3RoPjIm''@;'; put 'put ''JihHW0cubGVuZ3RoXT0iPC9jcDpjb3JlUHJvcGVydGllcz4iLEdbMV09R1sxXS5yZXBsYWNlKCIvPiIsIj4iKSksRy5qb2luKCIiKX0oUy5Qcm9wcyxMKSksUS5jb3JlcHJvcHMucHVzaChtZSksVHMoTC5yZWxzLDIsbWUsS2EuQ09SRV9QUk9QUyksbWU9ImRvY1Byb3BzL2FwcC54bWwiLCFT''@;'; put 'put ''LlByb3BzfHwhUy5Qcm9wcy5TaGVldE5hbWVzKWlmKFMuV29ya2Jvb2smJlMuV29ya2Jvb2suU2hlZXRzKXtmb3IodmFyIGJlPVtdLE5lPTA7TmU8Uy5TaGVldE5hbWVzLmxlbmd0aDsrK05lKTIhPShTLldvcmtib29rLlNoZWV0c1tOZV18fHt9KS5IaWRkZW4mJmJlLnB1c2goUy5TaGVldE5h''@;'; put 'put ''bWVzW05lXSk7Uy5Qcm9wcy5TaGVldE5hbWVzPWJlfWVsc2UgUy5Qcm9wcy5TaGVldE5hbWVzPVMuU2hlZXROYW1lcztTLlByb3BzLldvcmtzaGVldHM9Uy5Qcm9wcy5TaGVldE5hbWVzLmxlbmd0aCxabihsZSxtZSxmdW5jdGlvbiBCeShTKXt2YXIgTD1bXSxrPWpyO3JldHVybiBTfHwoUz17''@;'; put 'put ''fSksUy5BcHBsaWNhdGlvbj0iU2hlZXRKUyIsTFtMLmxlbmd0aF09cGksTFtMLmxlbmd0aF09VnksUzEuZm9yRWFjaChmdW5jdGlvbihHKXtpZih2b2lkIDAhPT1TW0dbMV1dKXt2YXIgUTtzd2l0Y2goR1syXSl7Y2FzZSJzdHJpbmciOlE9aGkoU3RyaW5nKFNbR1sxXV0pKTticmVhaztjYXNl''@;'; put 'put ''ImJvb2wiOlE9U1tHWzFdXT8idHJ1ZSI6ImZhbHNlIn12b2lkIDAhPT1RJiYoTFtMLmxlbmd0aF09ayhHWzBdLFEpKX19KSxMW0wubGVuZ3RoXT1rKCJIZWFkaW5nUGFpcnMiLGsoInZ0OnZlY3RvciIsaygidnQ6dmFyaWFudCIsIjx2dDpscHN0cj5Xb3Jrc2hlZXRzPC92dDpscHN0cj4iKStr''@;'; put 'put ''KCJ2dDp2YXJpYW50IixrKCJ2dDppNCIsU3RyaW5nKFMuV29ya3NoZWV0cykpKSx7c2l6ZToyLGJhc2VUeXBlOiJ2YXJpYW50In0pKSxMW0wubGVuZ3RoXT1rKCJUaXRsZXNPZlBhcnRzIixrKCJ2dDp2ZWN0b3IiLFMuU2hlZXROYW1lcy5tYXAoZnVuY3Rpb24oRyl7cmV0dXJuIjx2dDpscHN0''@;'; put 'put ''cj4iK2hpKEcpKyI8L3Z0Omxwc3RyPiJ9KS5qb2luKCIiKSx7c2l6ZTpTLldvcmtzaGVldHMsYmFzZVR5cGU6Imxwc3RyIn0pKSxMLmxlbmd0aD4yJiYoTFtMLmxlbmd0aF09IjwvUHJvcGVydGllcz4iLExbMV09TFsxXS5yZXBsYWNlKCIvPiIsIj4iKSksTC5qb2luKCIiKX0oUy5Qcm9wcykp''@;'; put 'put ''LFEuZXh0cHJvcHMucHVzaChtZSksVHMoTC5yZWxzLDMsbWUsS2EuRVhUX1BST1BTKSxTLkN1c3Rwcm9wcyE9PVMuUHJvcHMmJkxlKFMuQ3VzdHByb3BzfHx7fSkubGVuZ3RoPjAmJihabihsZSxtZT0iZG9jUHJvcHMvY3VzdG9tLnhtbCIsZnVuY3Rpb24gT1MoUyl7dmFyIEw9W3BpLExTXTtp''@;'; put 'put ''ZighUylyZXR1cm4gTC5qb2luKCIiKTt2YXIgaz0xO3JldHVybiBMZShTKS5mb3JFYWNoKGZ1bmN0aW9uKFEpeysrayxMW0wubGVuZ3RoXT1qcigicHJvcGVydHkiLGZ1bmN0aW9uIEE4KFMsTCl7c3dpdGNoKHR5cGVvZiBTKXtjYXNlInN0cmluZyI6dmFyIGs9anIoInZ0Omxwd3N0ciIsaGko''@;'; put 'put ''UykpO3JldHVybiBMJiYoaz1rLnJlcGxhY2UoLyZxdW90Oy9nLCJfeDAwMjJfIikpLGs7Y2FzZSJudW1iZXIiOnJldHVybiBqcigoMHxTKT09Uz8idnQ6aTQiOiJ2dDpyOCIsaGkoU3RyaW5nKFMpKSk7Y2FzZSJib29sZWFuIjpyZXR1cm4ganIoInZ0OmJvb2wiLFM/InRydWUiOiJmYWxzZSIp''@;'; put 'put ''fWlmKFMgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBqcigidnQ6ZmlsZXRpbWUiLHkxKFMpKTt0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBzZXJpYWxpemUgIitTKX0oU1tRXSwhMCkse2ZtdGlkOiJ7RDVDREQ1MDUtMkU5Qy0xMDFCLTkzOTctMDgwMDJCMkNGOUFFfSIscGlkOmssbmFtZTpo''@;'; put 'put ''aShRKX0pfSksTC5sZW5ndGg+MiYmKExbTC5sZW5ndGhdPSI8L1Byb3BlcnRpZXM+IixMWzFdPUxbMV0ucmVwbGFjZSgiLz4iLCI+IikpLEwuam9pbigiIil9KFMuQ3VzdHByb3BzKSksUS5jdXN0cHJvcHMucHVzaChtZSksVHMoTC5yZWxzLDQsbWUsS2EuQ1VTVF9QUk9QUykpO3ZhciBCZT1b''@;'; put 'put ''XSxHZT1bXTtmb3IocGU9MTtwZTw9Uy5TaGVldE5hbWVzLmxlbmd0aDsrK3BlKXt2YXIgeHQ9eyIhaWQiOnt9fSxvdD1TLlNoZWV0c1tTLlNoZWV0TmFtZXNbcGUtMV1dLGJ0PShvdHx8e30pWyIhdHlwZSJdfHwic2hlZXQiO3N3aXRjaChidCl7Y2FzZSJjaGFydCI6aWYodHlwZW9mIHdyaXRl''@;'; put 'put ''X2RyYXdpbmdfPCJ1Iil7Wm4obGUsbWU9InhsL2NoYXJ0c2hlZXRzL3NoZWV0IitwZSsiLiIrayxhTyhwZS0xLG1lLEwsUyx4dCkpLFEuY2hhcnRzLnB1c2gobWUpLFRzKEwud2JyZWxzLC0xLCJjaGFydHNoZWV0cy9zaGVldCIrcGUrIi4iK2ssS2EuQ1MpO2JyZWFrfWRlZmF1bHQ6Wm4obGUs''@;'; put 'put ''bWU9InhsL3dvcmtzaGVldHMvc2hlZXQiK3BlKyIuIitrLGlPKHBlLTEsbWUsTCxTLHh0KSksUS5zaGVldHMucHVzaChtZSksVHMoTC53YnJlbHMsLTEsIndvcmtzaGVldHMvc2hlZXQiK3BlKyIuIitrLEthLldTWzBdKX1pZihvdCl7ImNoYXJ0Ij09YnQmJiFvdFsiIXBvcyJdJiYob3RbIiFw''@;'; put 'put ''b3MiXT17eDowLHk6MCx3OjkwMCxoOjYwMH0pO3ZhciBGdD1vdFsiIWNvbW1lbnRzIl0sa3Q9ITE7aWYoRnQmJkZ0Lmxlbmd0aD4wKXt2YXIgTHQ9InhsL2NvbW1lbnRzIitwZSsiLiIraztabihsZSxMdCxENyhGdCxMdCxMKSksUS5jb21tZW50cy5wdXNoKEx0KSxUcyh4dCwtMSwiLi4vY29t''@;'; put 'put ''bWVudHMiK3BlKyIuIitrLEthLkNNTlQpLGt0PSEwfShvdFsiIWNvbnRyb2xzIl18fFtdKS5sZW5ndGg+MCYmKGt0PSEwKSxvdFsiIWxlZ2FjeSJdJiZrdCYmWm4obGUsInhsL2RyYXdpbmdzL3ZtbERyYXdpbmciK3BlKyIudm1sIixTUihwZSxvdFsiIWNvbW1lbnRzIl0sb3RbIiFjb250cm9s''@;'; put 'put ''cyJdLG90KSksb3RbIiFsZWdhY3lIRiJdJiZDbShsZSwwLHBlLG90WyIhcHJpbnQiXS5pbWFnZXMpO3ZhciBKdD0oImNoYXJ0Ij09b3RbIiF0eXBlIl0/W290XTpvdFsiIWNoYXJ0cyJdfHxbXSkuY29uY2F0KChvdFsiIWltYWdlcyJdfHxbXSkubWFwKGZ1bmN0aW9uKFRuKXtyZXR1cm4gVG5b''@;'; put 'put ''IiF0eXBlIl18fChUblsiIXR5cGUiXT0iaW1hZ2UiKSxUbn0pKS5jb25jYXQoKG90WyIhc2hhcGVzIl18fFtdKS5tYXAoZnVuY3Rpb24oVG4pe3JldHVybiBUblsiIXR5cGUiXXx8KFRuWyIhdHlwZSJdPSJzaGFwZSIpLFRufSkpO0p0JiZKdC5sZW5ndGgmJih0eXBlb2Ygd3JpdGVfZHJhd2lu''@;'; put 'put ''Z188InUiP3dyaXRlX2RyYXdpbmdfKGxlLFEscGUsb3QsSnQpOihabihsZSwieGwvZHJhd2luZ3MvZHJhd2luZyIrcGUrIi54bWwiLGJiKCkpLFEuZHJhd2luZ3MucHVzaCgieGwvZHJhd2luZ3MvZHJhd2luZyIrcGUrIi54bWwiKSkpLGRlbGV0ZSBvdFsiIWNvbW1lbnRzIl0sZGVsZXRlIG90''@;'; put 'put ''WyIhbGVnYWN5Il0sZGVsZXRlIG90WyIhbGVnYWN5SEYiXX1vdCYmb3RbIiFwaXZvdHMiXSYmInhtbCI9PWsmJnR5cGVvZiB3cml0ZV9waXZvdF94bWw8InUiJiZvdFsiIXBpdm90cyJdLmZvckVhY2goY3QpLHh0WyIhaWQiXS5ySWQxJiZabihsZSxVaChtZSksSDAoeHQpKSxvdCYmb3RbIiF0''@;'; put 'put ''YWJsZXMiXSYmInhtbCI9PWsmJm90WyIhdGFibGVzIl0uZm9yRWFjaChldCl9cmV0dXJuIG51bGwhPUwuU3RyaW5ncyYmTC5TdHJpbmdzLmxlbmd0aD4wJiYoWm4obGUsbWU9InhsL3NoYXJlZFN0cmluZ3MuIitrLFp4KEwuU3RyaW5ncyxtZSxMKSksUS5zdHJzLnB1c2gobWUpLFRzKEwud2Jy''@;'; put 'put ''ZWxzLC0xLCJzaGFyZWRTdHJpbmdzLiIrayxLYS5TU1QpKSwieG1sIj09ayYmdHlwZW9mIHdyaXRlX3Bpdm90X3htbDwidSImJndyaXRlX3Bpdm90X3htbChCZSxTLGxlLFEsTCksInhtbCI9PWsmJmZ1bmN0aW9uIFlwKFMsTCxrLEcpe1MuZm9yRWFjaChmdW5jdGlvbihRLGxlKXt2YXIgbWU9''@;'; put 'put ''TC5TaGVldHNbTC5TaGVldE5hbWVzW1FbMF1dXSxwZT0ieGwvdGFibGVzL3RhYmxlIisoUVswXSsxKSsiXyIrUVsxXSsiLnhtbCI7Ry50YWJsZXMucHVzaChwZSk7dmFyIGJlPVFbMl0ucmVmfHxtZVsiIXJlZiJdOyJzdHJpbmciIT10eXBlb2YgYmUmJihiZT1vbyhiZSkpO3ZhciBOZT10byhi''@;'; put 'put ''ZSksQmU9UVsyXS5uYW1lfHwic2pzdGJsXyIrUVswXSsiXyIrUVsxXSxHZT1bcGldLGV0PSFCdChRWzJdLmhlYWRlciksY3Q9ZXQmJiFCdChRWzJdLmZpbHRlcik7R2UucHVzaCgnPHRhYmxlIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvc3ByZWFkc2hlZXRtbC8y''@;'; put 'put ''MDA2L21haW4iIGlkPSInKyhsZSsxKSsnIiBuYW1lPSInK2hpKEJlKSsnIiBkaXNwbGF5TmFtZT0iJytoaShCZSkrJyIgcmVmPSInK2JlKyciICcrKG51bGwhPVFbMl0uaGVhZGVyJiYxIT1RWzJdLmhlYWRlcj8naGVhZGVyUm93Q291bnQ9IicrKFFbMl0uaGVhZGVyfHwwKSsnIiAnOiIiKSsi''@;'; put 'put ''PiIpLGN0JiZHZS5wdXNoKCc8YXV0b0ZpbHRlciByZWY9IicrYmUrJyIvPicpLEdlLnB1c2goJzx0YWJsZUNvbHVtbnMgY291bnQ9IicrKE5lLmUuYy1OZS5zLmMrMSkrJyI+Jyk7Zm9yKHZhciB4dD1bXSxvdD1OZS5zLmM7b3Q8PU5lLmUuYzsrK290KWlmKGV0KXtmb3IodmFyIGJ0PUdpKHty''@;'; put 'put ''Ok5lLnMucixjOm90fSksRnQ9bWVbYnRdLGt0PVFbMl0uY29scyYmUVsyXS5jb2xzW290LU5lLnMuY10mJlFbMl0uY29sc1tvdC1OZS5zLmNdLm5hbWV8fEZ0JiYoRnQud3x8RnQudil8fCJDb2x1bW4gIisob3QtTmUucy5jKzEpLEx0PWt0LEp0PTE7eHQuaW5kZXhPZihMdCk+LTEmJisrSnQ8''@;'; put 'put ''MTYzODQ7KUx0PWt0K0p0O2lmKEx0IT1rdCl0aHJvdyJ0YWJsZSBjb2x1bW5zICIrb3QrIiBhbmQgIisoeHQuaW5kZXhPZihrdCkrTmUucy5jKSsiIGhhdmUgdGhlIHNhbWUgaGVhZGVyICciK2t0KyInOyB0cnkgc2V0dGluZyBjZWxsICIrYnQrIiB0byAnIitMdCsiJyI7eHQucHVzaChMdCks''@;'; put 'put ''R2UucHVzaCgnPHRhYmxlQ29sdW1uIGlkPSInKyhRWzJdLmNvbHMmJlFbMl0uY29sc1tvdC1OZS5zLmNdJiZudWxsIT1RWzJdLmNvbHNbb3QtTmUucy5jXS5pZD9RWzJdLmNvbHNbb3QtTmUucy5jXS5pZDpvdC1OZS5zLmMrMSkrJyIgbmFtZT0iJytoaShMdCkrJyIvPicpfWVsc2UgR2UucHVz''@;'; put 'put ''aChRWzJdLmNvbHMmJlFbMl0uY29sc1tvdC1OZS5zLmNdPyc8dGFibGVDb2x1bW4gaWQ9IicrUVsyXS5jb2xzW290LU5lLnMuY10uaWQrJyIgbmFtZT0iJytRWzJdLmNvbHNbb3QtTmUucy5jXS5uYW1lKyciLz4nOic8dGFibGVDb2x1bW4gaWQ9IicrKG90LU5lLnMuYysxKSsnIiB1bmlxdWVO''@;'; put 'put ''YW1lPSInKyhvdC1OZS5zLmMrMSkrJyIgbmFtZT0iJysob3QtTmUucy5jKzEpKyciLz4nKTtHZS5wdXNoKCI8L3RhYmxlQ29sdW1ucz4iKTt2YXIgc3I9KyghMSE9PShRWzJdLnN0eWxlfHx7fSkucm93c3RyaXBlKSxDbj0rISEoUVsyXS5zdHlsZXx8e30pLmNvbHN0cmlwZSxscj0rISEoUVsy''@;'; put 'put ''XS5zdHlsZXx8e30pLmNvbGZpcnN0LHFuPSshIShRWzJdLnN0eWxlfHx7fSkuY29sbGFzdCxXbj0oUVsyXS5zdHlsZXx8e30pLm5hbWV8fCJNZWRpdW05IjtXbj1Xbi5tYXRjaCgvXihMaWdodHxNZWRpdW18RGFyaylcZCskLyk/IlRhYmxlU3R5bGUiK1duOlduLEdlLnB1c2goJzx0YWJsZVN0''@;'; put 'put ''eWxlSW5mbyBuYW1lPSInK1duKyciIHNob3dGaXJzdENvbHVtbj0iJytscisnIiBzaG93TGFzdENvbHVtbj0iJytxbisnIiBzaG93Um93U3RyaXBlcz0iJytzcisnIiBzaG93Q29sdW1uU3RyaXBlcz0iJytDbisnIi8+JyksR2UucHVzaCgiPC90YWJsZT4iKSxabihrLHBlLEdlLmpvaW4oIiIp''@;'; put 'put ''KX0pfShHZSxTLGxlLFEpLCJ4bWwiPT1rJiYoUy5FeHRlcm5hbFdCfHxbXSkubGVuZ3RoJiZmdW5jdGlvbiB5YihTLEwsayl7ay5saW5rc3x8KGsubGlua3M9W10pLFMuRXh0ZXJuYWxXQiYmUy5FeHRlcm5hbFdCLmZvckVhY2goZnVuY3Rpb24oRyxRKXt2YXIgbGU9Ii94bC9leHRlcm5hbExp''@;'; put 'put ''bmtzL19yZWxzL2V4dGVybmFsTGluayIrKFErMSkrIi54bWwucmVscyIsbWU9e307VHMobWUsLTEsRy5UYXJnZXQsRy5NaXNzaW5nP0thLlhNSVNTOkthLlhQQVRIKSxabihMLGVjKGxlKSxIMChtZSkpO3ZhciBwZT0iL3hsL2V4dGVybmFsTGlua3MvZXh0ZXJuYWxMaW5rIisoUSsxKSsiLnht''@;'; put 'put ''bCI7ay5saW5rcy5wdXNoKHBlKSxabihMLGVjKHBlKSxmdW5jdGlvbiBsNyhTKXt2YXIgTD1bcGksSU1dO3JldHVybihTLlNoZWV0TmFtZXN8fFtdKS5sZW5ndGgmJihMLnB1c2goJzxleHRlcm5hbEJvb2sgeG1sbnM6cj0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmlj''@;'; put 'put ''ZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcyIgcjppZD0icklkMSI+JyksTC5wdXNoKCI8c2hlZXROYW1lcz4iKSxTLlNoZWV0TmFtZXMuZm9yRWFjaChmdW5jdGlvbihrKXtMLnB1c2goJzxzaGVldE5hbWUgdmFsPSInK2hpKGspKyciLz4nKX0pLEwucHVzaCgiPC9zaGVldE5hbWVzPiIp''@;'; put 'put ''LEwucHVzaCgiPHNoZWV0RGF0YVNldD4iKSxTLlNoZWV0TmFtZXMuZm9yRWFjaChmdW5jdGlvbihrLEcpe3ZhciBRPVMuU2hlZXRzW2tdLGxlPXtzaGVldElkOkd9LG1lPW51bGw7aWYobnVsbD09USlsZS5yZWZyZXNoRXJyb3I9MTtlbHNlIGlmKFFbIiFyZWYiXSl7dmFyIHBlPVZvKFFbIiFy''@;'; put 'put ''ZWYiXSk7bWU9IiI7Zm9yKHZhciBiZT1wZS5zLnI7YmU8PXBlLmUucjsrK2JlKXtmb3IodmFyIE5lPSIiLEJlPXBlLnMuYztCZTw9cGUuZS5jOysrQmUpe3ZhciBHZT1HaSh7cjpiZSxjOkJlfSk7UVtHZV0mJihOZXx8KE5lPSc8cm93IHI9IicrKGJlKzEpKyciPicpLE5lKz0nPGNlbGwgcj0i''@;'; put 'put ''JytHZSsnIicrKFFbR2VdLnQ/JyB0PSInK1FbR2VdLnQrJyInOiIiKSsiPjx2PiIraGkoUVtHZV0udikrIjwvdj48L2NlbGw+Iil9TmUmJihtZSs9TmUrIjwvcm93PiIpfX1MLnB1c2goanIoInNoZWV0RGF0YSIsbWUsbGUpKX0pLEwucHVzaCgiPC9zaGVldERhdGFTZXQ+IiksTC5wdXNoKCI8''@;'; put 'put ''L2V4dGVybmFsQm9vaz4iKSksTC5sZW5ndGg+MiYmKExbTC5sZW5ndGhdPSI8L2V4dGVybmFsTGluaz4iLExbMV09TFsxXS5yZXBsYWNlKCIvPiIsIj4iKSksTC5qb2luKCIiKX0oRykpfSl9KFMsbGUsUSksInhtbCI9PWsmJmZ1bmN0aW9uIElnKFMpe3ZhciBMLGs7Uy5Xb3JrYm9va3x8KFMu''@;'; put 'put ''V29ya2Jvb2s9e05hbWVzOltdfSksUy5Xb3JrYm9vay5OYW1lc3x8KFMuV29ya2Jvb2suTmFtZXM9W10pO2Zvcih2YXIgRz1TLldvcmtib29rLk5hbWVzLFE9MDtRPFMuU2hlZXROYW1lcy5sZW5ndGg7KytRKXt2YXIgbGU9Uy5TaGVldE5hbWVzW1FdLG1lPVMuU2hlZXRzW2xlXTtpZihtZSYm''@;'; put 'put ''bWVbIiFwcmludCJdKXt2YXIgcGU9IiciK2xlKyInISIsYmU9bWVbIiFwcmludCJdO2lmKGJlKXt2YXIgTmU9IShMPWJlLmFyZWEpLEJlPSEoaz1iZS50aXRsZXMpLEdlPUw/InN0cmluZyI9PXR5cGVvZiBMP0w6b28oTCk6IiI7aWYoTCYmKEcuZm9yRWFjaChmdW5jdGlvbihjdCl7Y3QuU2hl''@;'; put 'put ''ZXQ9PVEmJiFOZSYmIl94bG5tLlByaW50X0FyZWEiPT1jdC5OYW1lJiYoTmU9ITAsY3QuUmVmPXBlK0dlKX0pLE5lfHxHLnB1c2goe05hbWU6Il94bG5tLlByaW50X0FyZWEiLFJlZjpwZStHZSxTaGVldDpRfSkpLGspe3ZhciBldD0iIjtrLnMuYz4tMSYmay5lLmM+LTEmJihldCs9cGUrRm8o''@;'; put 'put ''ay5zLmMpKyI6IitGbyhrLmUuYykrIiwiKSxrLnMucj4tMSYmay5lLnI+LTEmJihldCs9cGUrQmkoay5zLnIpKyI6IitCaShrLmUucikrIiwiKSxldD1ldC5zbGljZSgwLC0xKSxHLmZvckVhY2goZnVuY3Rpb24oY3Qpe2N0LlNoZWV0PT1RJiYhQmUmJiJfeGxubS5QcmludF9UaXRsZXMiPT1j''@;'; put 'put ''dC5OYW1lJiYoTmU9ITAsY3QuUmVmPWV0KX0pLEJlfHxHLnB1c2goe05hbWU6Il94bG5tLlByaW50X1RpdGxlcyIsUmVmOmV0LFNoZWV0OlF9KX19fX19KFMpLFpuKGxlLG1lPSJ4bC93b3JrYm9vay4iK2ssZnVuY3Rpb24gazcoUyxMLGspe3JldHVybigiLmJpbiI9PT1MLnNsaWNlKC00KT9B''@;'; put 'put ''VzpIbSkoUyxrKX0oUyxtZSxMKSksUS53b3JrYm9va3MucHVzaChtZSksVHMoTC5yZWxzLDEsbWUsS2EuV0IpLFpuKGxlLG1lPSJ4bC90aGVtZS90aGVtZTEueG1sIixUTShTLlRoZW1lcyxMKSksUS50aGVtZXMucHVzaChtZSksVHMoTC53YnJlbHMsLTEsInRoZW1lL3RoZW1lMS54bWwiLEth''@;'; put 'put ''LlRIRU1FKSxabihsZSxtZT0ieGwvc3R5bGVzLiIrayxmdW5jdGlvbiBObShTLEwsayl7cmV0dXJuKCIuYmluIj09PUwuc2xpY2UoLTQpP3NSOm1vZSkoUyxrKX0oUyxtZSxMKSksUS5zdHlsZXMucHVzaChtZSksVHMoTC53YnJlbHMsLTEsInN0eWxlcy4iK2ssS2EuU1RZKSxTLnZiYXJhdyYm''@;'; put 'put ''RyYmKFpuKGxlLG1lPSJ4bC92YmFQcm9qZWN0LmJpbiIsUy52YmFyYXcpLFEudmJhLnB1c2gobWUpLFRzKEwud2JyZWxzLC0xLCJ2YmFQcm9qZWN0LmJpbiIsS2EuVkJBKSksUy5tb2RlbCYmUy5tb2RlbC5sZW5ndGgmJihabihsZSwieGwvbW9kZWwvaXRlbS5kYXRhIixTLm1vZGVsKSxUcyhM''@;'; put 'put ''LndicmVscywtMSwibW9kZWwvaXRlbS5kYXRhIixLYS5QV1JQRCkpLFMuY29ubiYmKFpuKGxlLCJ4bC9jb25uZWN0aW9ucy54bWwiLFMuY29ubiksUS5jb25ucy5wdXNoKCIveGwvY29ubmVjdGlvbnMueG1sIiksVHMoTC53YnJlbHMsLTEsImNvbm5lY3Rpb25zLnhtbCIsS2EuQ09OTikpLFMu''@;'; put 'put ''Q3VzdG9tWE1MJiZTLkN1c3RvbVhNTC5mb3JFYWNoKGZ1bmN0aW9uKFRuLHNyKXtpZihabihsZSwiY3VzdG9tWG1sL2l0ZW0iKyhzcisxKSsiLnhtbCIsVG4uZGF0YSksVHMoTC53YnJlbHMsLTEsIi4uL2N1c3RvbVhtbC9pdGVtIisoc3IrMSkrIi54bWwiLEthLkNYTUwpLFRuLnByb3BzKXta''@;'; put 'put ''bihsZSwiY3VzdG9tWG1sL2l0ZW1Qcm9wcyIrKHNyKzEpKyIueG1sIixUbi5wcm9wcyksUS5jdXN0b214bWxwcm9wcy5wdXNoKCIvY3VzdG9tWG1sL2l0ZW1Qcm9wcyIrKHNyKzEpKyIueG1sIik7dmFyIENuPXt9O1RzKENuLC0xLCJpdGVtUHJvcHMiKyhzcisxKSsiLnhtbCIsS2EuQ1hNTFAp''@;'; put 'put ''LFpuKGxlLCJjdXN0b21YbWwvX3JlbHMvaXRlbSIrKHNyKzEpKyIueG1sLnJlbHMiLEgwKENuKSl9fSksWm4obGUsIltDb250ZW50X1R5cGVzXS54bWwiLGZ1bmN0aW9uIGtTKFMsTCxrKXt2YXIgUSxHPVtdO2t8fChHW0cubGVuZ3RoXT1waSxHW0cubGVuZ3RoXT1PeSxHPUcuY29uY2F0KHAz''@;'; put 'put ''KSk7dmFyIGxlPWZ1bmN0aW9uKGJlKXtTW2JlXSYmU1tiZV0ubGVuZ3RoPjAmJihHW0cubGVuZ3RoXT1qcigiT3ZlcnJpZGUiLG51bGwse1BhcnROYW1lOigiLyI9PShRPVNbYmVdWzBdKVswXT8iIjoiLyIpK1EsQ29udGVudFR5cGU6aW1bYmVdW0wuYm9va1R5cGV8fCJ4bHN4Il19KSl9LG1l''@;'; put 'put ''PWZ1bmN0aW9uKGJlKXsoU1tiZV18fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKE5lKXtHW0cubGVuZ3RoXT1qcigiT3ZlcnJpZGUiLG51bGwse1BhcnROYW1lOigiLyI9PU5lWzBdPyIiOiIvIikrTmUsQ29udGVudFR5cGU6aW1bYmVdW0wuYm9va1R5cGV8fCJ4bHN4Il19KX0pfSxwZT1mdW5jdGlv''@;'; put 'put ''bihiZSl7KFNbYmVdfHxbXSkuZm9yRWFjaChmdW5jdGlvbihOZSl7R1tHLmxlbmd0aF09anIoIk92ZXJyaWRlIixudWxsLHtQYXJ0TmFtZTooIi8iPT1OZVswXT8iIjoiLyIpK05lLENvbnRlbnRUeXBlOlJ5W2JlXVswXX0pfSl9O3JldHVybiBsZSgid29ya2Jvb2tzIiksbWUoInNoZWV0cyIp''@;'; put 'put ''LG1lKCJjaGFydHMiKSxwZSgidGhlbWVzIiksWyJzdHJzIiwic3R5bGVzIiwiY29ubnMiXS5mb3JFYWNoKGxlKSxbImNvcmVwcm9wcyIsImV4dHByb3BzIiwiY3VzdHByb3BzIl0uZm9yRWFjaChwZSkscGUoInZiYSIpLHBlKCJjb21tZW50cyIpLHBlKCJkcmF3aW5ncyIpLG1lKCJ0YWJsZXMi''@;'; put 'put ''KSxtZSgicGl2b3RzIiksbWUoInBpdm90Y2FjaGVzIiksbWUoInBpdm90cmVjb3JkcyIpLHBlKCJkYXRhbW9kZWxzIikscGUoImN0cmxwcm9wcyIpLHBlKCJjaGFydG9ianMiKSxwZSgiY2hhcnRzdHlsZXMiKSxwZSgiY2hhcnRjb2xvcnMiKSxwZSgiY2hhcnRleHMiKSxtZSgibGlua3MiKSxw''@;'; put 'put ''ZSgiY3VzdG9teG1scHJvcHMiKSwhayYmRy5sZW5ndGg+MiYmKEdbRy5sZW5ndGhdPSI8L1R5cGVzPiIsR1sxXT1HWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxHLmpvaW4oIiIpfShRLEwpKSxabihsZSwiX3JlbHMvLnJlbHMiLEgwKEwucmVscykpLFpuKGxlLCJ4bC9fcmVscy93b3JrYm9vay4i''@;'; put 'put ''K2srIi5yZWxzIixIMChMLndicmVscykpLGRlbGV0ZSBMLkZvbnRzLGRlbGV0ZSBMLkZpbGxzLGRlbGV0ZSBMLkJvcmRlcnMsZGVsZXRlIEwucmV2c3NmLGRlbGV0ZSBMLnNzZixsZX1mdW5jdGlvbiBldChUbixzcil7R2UucHVzaChbcGUtMSxzcixUbl0pfWZ1bmN0aW9uIGN0KFRuKXtCZS5w''@;'; put 'put ''dXNoKFtwZS0xLFRuXSksVHMoeHQsLTEsIi4uL3Bpdm90VGFibGVzL3Bpdm90VGFibGUiK0JlLmxlbmd0aCsiLiIrayxLYS5QSVZPVCl9fWZ1bmN0aW9uIFVtKFMsTCl7dmFyIGs9IiI7c3dpdGNoKChMfHx7fSkudHlwZXx8ImJhc2U2NCIpe2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjpyZXR1''@;'; put 'put ''cm5bU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddXTtjYXNlImJhc2U2NCI6az1fZS5kZWNvZGUoUy5zbGljZSgwLDEyKSk7YnJlYWs7Y2FzZSJiaW5hcnkiOms9UzticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIisoTCYmTC50''@;'; put 'put ''eXBlfHwidW5kZWZpbmVkIikpfXJldHVybltrLmNoYXJDb2RlQXQoMCksay5jaGFyQ29kZUF0KDEpLGsuY2hhckNvZGVBdCgyKSxrLmNoYXJDb2RlQXQoMyksay5jaGFyQ29kZUF0KDQpLGsuY2hhckNvZGVBdCg1KSxrLmNoYXJDb2RlQXQoNiksay5jaGFyQ29kZUF0KDcpXX1mdW5jdGlvbiBG''@;'; put 'put ''TyhTLEwpe3ZhciBrPTA7ZTpmb3IoO2s8Uy5sZW5ndGg7KXN3aXRjaChTLmNoYXJDb2RlQXQoaykpe2Nhc2UgMTA6Y2FzZSAxMzpjYXNlIDMyOisrazticmVhaztjYXNlIDYwOnJldHVybiBsTyhTLnNsaWNlKGspLEwpO2RlZmF1bHQ6YnJlYWsgZX1yZXR1cm4gSmgudG9fd29ya2Jvb2soUyxM''@;'; put 'put ''KX1mdW5jdGlvbiBnZihTLEwsayxHKXtyZXR1cm4gRz8oay50eXBlPSJzdHJpbmciLEpoLnRvX3dvcmtib29rKFMsaykpOkpoLnRvX3dvcmtib29rKEwsayl9ZnVuY3Rpb24gbWYoUyxMKXt2YXIgaz1BLmdldGxvY2FsZSgpO2FlKEEpLEEuc2V0bG9jYWxlKGspLFkoKTt2YXIgRz1MfHx7fTtp''@;'; put 'put ''Zih0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZTIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIG1mKG5ldyBVaW50OEFycmF5KFMpLCgoRz11bihHKSkudHlwZT0iYXJyYXkiLEcpKTt2YXIgbGUsUT1TLG1lPSExO2lmKEo4KGdtPUcuUFBJfHw5NiksRy5jZWxsU3R5bGVzJiYoRy5jZWxs''@;'; put 'put ''TkY9ITAsRy5zaGVldFN0dWJzPSEwKSxLcD17fSxHLmRhdGVORiYmKEtwLmRhdGVORj1HLmRhdGVORiksRy50eXBlfHwoRy50eXBlPVRlJiZCdWZmZXIuaXNCdWZmZXIoUyk/ImJ1ZmZlciI6ImJhc2U2NCIpLCJmaWxlIj09Ry50eXBlJiYoRy50eXBlPVRlPyJidWZmZXIiOiJiaW5hcnkiLFE9''@;'; put 'put ''ZnVuY3Rpb24gSGUoUyl7aWYodHlwZW9mIEtlPCJ1IilyZXR1cm4gS2UucmVhZEZpbGVTeW5jKFMpO2lmKHR5cGVvZiAkPCJ1IiYmdHlwZW9mIEZpbGU8InUiJiZ0eXBlb2YgRm9sZGVyPCJ1Iil0cnl7dmFyIEw9RmlsZShTKTtMLm9wZW4oInIiKSxMLmVuY29kaW5nPSJiaW5hcnkiO3ZhciBr''@;'; put 'put ''PUwucmVhZCgpO3JldHVybiBMLmNsb3NlKCksa31jYXRjaChHKXtpZighRy5tZXNzYWdlfHwhRy5tZXNzYWdlLm1hdGNoKC9vbnN0cnVjdC8pKXRocm93IEd9dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgYWNjZXNzIGZpbGUgIitTKX0oUykpLCJzdHJpbmciPT1HLnR5cGUmJihtZT0hMCxHLnR5''@;'; put 'put ''cGU9ImJpbmFyeSIsRy5jb2RlcGFnZT02NTAwMSxRPWZ1bmN0aW9uIGRZKFMpe3JldHVybiBTLm1hdGNoKC9bXlx4MDAtXHg3Rl0vKT9ZYShTKTpTfShTKSksImFycmF5Ij09Ry50eXBlJiZ0eXBlb2YgVWludDhBcnJheTwidSImJlMgaW5zdGFuY2VvZiBVaW50OEFycmF5JiZ0eXBlb2YgQXJy''@;'; put 'put ''YXlCdWZmZXI8InUiKXt2YXIgcGU9bmV3IEFycmF5QnVmZmVyKDMpLGJlPW5ldyBVaW50OEFycmF5KHBlKTtpZihiZS5mb289ImJhciIsIWJlLmZvbylyZXR1cm4oRz11bihHKSkudHlwZT0iYXJyYXkiLG1mKEgoUSksRyl9c3dpdGNoKChsZT1VbShRLEcpKVswXSl7Y2FzZSAyMDg6aWYoMjA3''@;'; put 'put ''PT09bGVbMV0mJjE3PT09bGVbMl0mJjIyND09PWxlWzNdJiYxNjE9PT1sZVs0XSYmMTc3PT09bGVbNV0mJjI2PT09bGVbNl0mJjIyNT09PWxlWzddKXJldHVybiBmdW5jdGlvbiBQTyhTLEwpe3JldHVybiB5ZS5maW5kKFMsIkVuY3J5cHRlZFBhY2thZ2UiKT9jWShTLEwpOmU0KFMsTCl9KHll''@;'; put 'put ''LnJlYWQoUSxHKSxHKTticmVhaztjYXNlIDk6aWYobGVbMV08PTgpcmV0dXJuIGU0KFEsRyk7YnJlYWs7Y2FzZSA2MDpyZXR1cm4gbE8oUSxHKTtjYXNlIDczOmlmKDczPT09bGVbMV0mJjQyPT09bGVbMl0mJjA9PT1sZVszXSl0aHJvdyBuZXcgRXJyb3IoIlRJRkYgSW1hZ2UgRmlsZSBpcyBu''@;'; put 'put ''b3QgYSBzcHJlYWRzaGVldCIpO2lmKDY4PT09bGVbMV0pcmV0dXJuIGZ1bmN0aW9uIHVNKFMsTCl7dmFyIGs9THx8e30sRz0hIWsuV1RGO2suV1RGPSEwO3RyeXt2YXIgUT1lYi50b193b3JrYm9vayhTLGspO3JldHVybiBrLldURj1HLFF9Y2F0Y2gobGUpe2lmKGsuV1RGPUcsIWxlLm1lc3Nh''@;'; put 'put ''Z2UubWF0Y2goL1NZTEsgYmFkIHJlY29yZCBJRC8pJiZHKXRocm93IGxlO3JldHVybiBKaC50b193b3JrYm9vayhTLEwpfX0oUSxHKTticmVhaztjYXNlIDg0OmlmKDY1PT09bGVbMV0mJjY2PT09bGVbMl0mJjc2PT09bGVbM10pcmV0dXJuIGNNLnRvX3dvcmtib29rKFEsRyk7YnJlYWs7Y2Fz''@;'; put 'put ''ZSA4MDpyZXR1cm4gNzU9PT1sZVsxXSYmbGVbMl08OSYmbGVbM108OT9mdW5jdGlvbiBqNyhTLEwpe3ZhciBHPVMsUT1MfHx7fTtyZXR1cm4gUS50eXBlfHwoUS50eXBlPVRlJiZCdWZmZXIuaXNCdWZmZXIoUyk/ImJ1ZmZlciI6ImJhc2U2NCIpLE9PKGRuKEcsUSksUSl9KFEsRyk6Z2YoUyxR''@;'; put 'put ''LEcsbWUpO2Nhc2UgMjM5OnJldHVybiA2MD09PWxlWzNdP2xPKFEsRyk6Z2YoUyxRLEcsbWUpO2Nhc2UgMjU1OmlmKDI1ND09PWxlWzFdKXJldHVybiBmdW5jdGlvbiBZb2UoUyxMKXt2YXIgaz1TO3JldHVybiJiYXNlNjQiPT1MLnR5cGUmJihrPV9lLmRlY29kZShrKSksaz1jcHRhYmxlLnV0''@;'; put 'put ''aWxzLmRlY29kZSgxMjAwLGsuc2xpY2UoMiksInN0ciIpLEwudHlwZT0iYmluYXJ5IixGTyhrLEwpfShRLEcpO2JyZWFrO2Nhc2UgMDppZigwPT09bGVbMV0mJmxlWzJdPj0yJiYwPT09bGVbM10pcmV0dXJuIFo4LnRvX3dvcmtib29rKFEsRyk7YnJlYWs7Y2FzZSAzOmNhc2UgMTMxOmNhc2Ug''@;'; put 'put ''MTM5OmNhc2UgMTQwOnJldHVybiBobS50b193b3JrYm9vayhRLEcpO2Nhc2UgMTIzOmlmKDkyPT09bGVbMV0mJjExND09PWxlWzJdJiYxMTY9PT1sZVszXSlyZXR1cm4gb2IudG9fd29ya2Jvb2soUSxHKTticmVhaztjYXNlIDEwOmNhc2UgMTM6Y2FzZSAzMjpyZXR1cm4gZnVuY3Rpb24gdVko''@;'; put 'put ''UyxMKXt2YXIgaz0iIixHPVVtKFMsTCk7c3dpdGNoKEwudHlwZSl7Y2FzZSJiYXNlNjQiOms9X2UuZGVjb2RlKFMpO2JyZWFrO2Nhc2UiYmluYXJ5IjprPVM7YnJlYWs7Y2FzZSJidWZmZXIiOms9Uy50b1N0cmluZygiYmluYXJ5Iik7YnJlYWs7Y2FzZSJhcnJheSI6az1hdChTKTticmVhaztk''@;'; put 'put ''ZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitMLnR5cGUpfXJldHVybiAyMzk9PUdbMF0mJjE4Nz09R1sxXSYmMTkxPT1HWzJdJiYoaz1jbyhrKSksRk8oayxMKX0oUSxHKX1yZXR1cm4gaG0udmVyc2lvbnMuaW5kZXhPZihsZVswXSk+LTEmJmxlWzJdPD0xMiYm''@;'; put 'put ''bGVbM108PTMxP2htLnRvX3dvcmtib29rKFEsRyk6Z2YoUyxRLEcsbWUpfWZ1bmN0aW9uIGNfKFMsTCl7dmFyIGs9THx8e307cmV0dXJuIGsudHlwZT0iZmlsZSIsbWYoUyxrKX1mdW5jdGlvbiBaZyhTLEwpe3N3aXRjaChMLnR5cGUpe2Nhc2UiYmFzZTY0IjpjYXNlImJpbmFyeSI6YnJlYWs7''@;'; put 'put ''Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOkwudHlwZT0iIjticmVhaztjYXNlImZpbGUiOnJldHVybiBrZShMLmZpbGUseWUud3JpdGUoUyx7dHlwZTpUZT8iYnVmZmVyIjoiIn0pKTtjYXNlInN0cmluZyI6dGhyb3cgbmV3IEVycm9yKCInc3RyaW5nJyBvdXRwdXQgdHlwZSBpbnZhbGlkIGZv''@;'; put 'put ''ciAnIitMLmJvb2tUeXBlKyInIGZpbGVzIik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrTC50eXBlKX1yZXR1cm4geWUud3JpdGUoUyxMKX1mdW5jdGlvbiBvMihTLEwsayl7a3x8KGs9IiIpO3ZhciBHPWsrUztzd2l0Y2goTC50eXBlKXtjYXNlImJhc2U2''@;'; put 'put ''NCI6cmV0dXJuIF9lLmVuY29kZShZYShHKSk7Y2FzZSJiaW5hcnkiOnJldHVybiBZYShHKTtjYXNlInN0cmluZyI6cmV0dXJuIFM7Y2FzZSJmaWxlIjpyZXR1cm4ga2UoTC5maWxlLEcsInV0ZjgiKTtjYXNlImJ1ZmZlciI6cmV0dXJuIFRlP01lKEcsInV0ZjgiKTpvMihHLHt0eXBlOiJiaW5h''@;'; put 'put ''cnkifSkuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihRKXtyZXR1cm4gUS5jaGFyQ29kZUF0KDApfSl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK0wudHlwZSl9ZnVuY3Rpb24gSE8oUyxMKXtzd2l0Y2goTC50eXBlKXtjYXNlInN0cmluZyI6Y2FzZSJiYXNlNjQiOmNhc2Ui''@;'; put 'put ''YmluYXJ5Ijpmb3IodmFyIGs9IiIsRz0wO0c8Uy5sZW5ndGg7KytHKWsrPVN0cmluZy5mcm9tQ2hhckNvZGUoU1tHXSk7cmV0dXJuImJhc2U2NCI9PUwudHlwZT9fZS5lbmNvZGUoayk6InN0cmluZyI9PUwudHlwZT9jbyhrKTprO2Nhc2UiZmlsZSI6cmV0dXJuIGtlKEwuZmlsZSxTKTtjYXNl''@;'; put 'put ''ImJ1ZmZlciI6cmV0dXJuIFM7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrTC50eXBlKX19ZnVuY3Rpb24gdV8oUyxMKXtZKCksZnVuY3Rpb24gangoUyl7aWYoIVN8fCFTLlNoZWV0TmFtZXN8fCFTLlNoZWV0cyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQg''@;'; put 'put ''V29ya2Jvb2siKTtpZighUy5TaGVldE5hbWVzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIldvcmtib29rIGlzIGVtcHR5Iik7IWZ1bmN0aW9uIEJ4KFMsTCxrKXtTLmZvckVhY2goZnVuY3Rpb24oRyxRKXtWeChHKTtmb3IodmFyIGxlPTA7bGU8UTsrK2xlKWlmKEc9PVNbbGVdKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiRHVwbGljYXRlIFNoZWV0IE5hbWU6ICIrRyk7aWYoayl7dmFyIG1lPUwmJkxbUV0mJkxbUV0uQ29kZU5hbWV8fEc7aWYoOTU9PW1lLmNoYXJDb2RlQXQoMCkmJm1lLmxlbmd0aD4yMil0aHJvdyBuZXcgRXJyb3IoIkJhZCBDb2RlIE5hbWU6IFdvcmtzaGVldCIrbWUpfX0pfShT''@;'; put 'put ''LlNoZWV0TmFtZXMsUy5Xb3JrYm9vayYmUy5Xb3JrYm9vay5TaGVldHN8fFtdLCEhUy52YmFyYXcpO2Zvcih2YXIgaz0wO2s8Uy5TaGVldE5hbWVzLmxlbmd0aDsrK2spbEwoUy5TaGVldHNbUy5TaGVldE5hbWVzW2tdXSwwLGspfShTKTt2YXIgaz1MfHx7fTtpZihrLmNlbGxTdHlsZXMmJihr''@;'; put 'put ''LmNlbGxORj0hMCxrLnNoZWV0U3R1YnM9ITApLCJhcnJheSI9PWsudHlwZSl7ay50eXBlPSJiaW5hcnkiO3ZhciBHPXVfKFMsayk7cmV0dXJuIGsudHlwZT0iYXJyYXkiLHgoRyl9c3dpdGNoKGsuYm9va1R5cGV8fCJ4bHNiIil7Y2FzZSJ4bWwiOmNhc2UieGxtbCI6cmV0dXJuIG8yKGhPKFMs''@;'; put 'put ''ayksayk7Y2FzZSJzbGsiOmNhc2Uic3lsayI6cmV0dXJuIG8yKHJZKFMsayksayk7Y2FzZSJodG0iOmNhc2UiaHRtbCI6cmV0dXJuIG8yKG5ZKFMsayksayk7Y2FzZSJ0eHQiOnJldHVybiBmdW5jdGlvbiBoRShTLEwpe3N3aXRjaChMLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gX2UuZW5j''@;'; put 'put ''b2RlKFMpO2Nhc2UiYmluYXJ5IjpjYXNlInN0cmluZyI6cmV0dXJuIFM7Y2FzZSJmaWxlIjpyZXR1cm4ga2UoTC5maWxlLFMsImJpbmFyeSIpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gVGU/TWUoUywiYmluYXJ5Iik6Uy5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKGspe3JldHVybiBrLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCl9KX10aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrTC50eXBlKX0oVjcoUyxrKSxrKTtjYXNlImNzdiI6cmV0dXJuIG8yKGlFKFMsayksaywiXHVmZWZmIik7Y2FzZSJkaWYiOnJldHVybiBvMihpWShTLGspLGspO2Nhc2UiZGJmIjpyZXR1cm4gSE8oYUUoUyxrKSxr''@;'; put 'put ''KTtjYXNlInBybiI6cmV0dXJuIG8yKGFZKFMsayksayk7Y2FzZSJydGYiOnJldHVybiBvMihWZyhTLGspLGspO2Nhc2UiZXRoIjpyZXR1cm4gbzIob0UoUyxrKSxrKTtjYXNlImZvZHMiOnJldHVybiBvMihFTyhTLGspLGspO2Nhc2UiYmlmZjIiOmsuYmlmZnx8KGsuYmlmZj0yKTtjYXNlImJp''@;'; put 'put ''ZmYzIjprLmJpZmZ8fChrLmJpZmY9Myk7Y2FzZSJiaWZmNCI6cmV0dXJuIGsuYmlmZnx8KGsuYmlmZj00KSxITyhONyhTLGspLGspO2Nhc2UiYmlmZjUiOmsuYmlmZnx8KGsuYmlmZj01KTtjYXNlImJpZmY4IjpjYXNlInhsYSI6Y2FzZSJ4bHMiOnJldHVybiBrLmJpZmZ8fChrLmJpZmY9OCks''@;'; put 'put ''ZnVuY3Rpb24gcWUoUyxMKXt2YXIgaz1MfHx7fTtyZXR1cm4gWmcoZnVuY3Rpb24gV1coUyxMKXt2YXIgaz1MfHx7fSxHPXllLnV0aWxzLmNmYl9uZXcoe3Jvb3Q6IlIifSksUT0iL1dvcmtib29rIjtzd2l0Y2goay5ib29rVHlwZXx8InhscyIpe2Nhc2UieGxzIjprLmJvb2tUeXBlPSJiaWZm''@;'; put 'put ''OCI7Y2FzZSJ4bGEiOmsuYm9va1R5cGV8fChrLmJvb2tUeXBlPSJ4bGEiKTtjYXNlImJpZmY4IjpRPSIvV29ya2Jvb2siLGsuYmlmZj04O2JyZWFrO2Nhc2UiYmlmZjUiOlE9Ii9Cb29rIixrLmJpZmY9NTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW52YWxpZCB0eXBlICIray5i''@;'; put 'put ''b29rVHlwZSsiIGZvciBYTFMgQ0ZCIil9cmV0dXJuIHllLnV0aWxzLmNmYl9hZGQoRyxRLE43KFMsaykpLDg9PWsuYmlmZiYmKFMuUHJvcHN8fFMuQ3VzdHByb3BzKSYmZnVuY3Rpb24gWlcoUyxMKXt2YXIgbWUsaz1bXSxHPVtdLFE9W10sbGU9MDtpZihTLlByb3BzKWZvcihtZT1MZShTLlBy''@;'; put 'put ''b3BzKSxsZT0wO2xlPG1lLmxlbmd0aDsrK2xlKShPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoS28sbWVbbGVdKT9rOk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChYYyxtZVtsZV0pP0c6USkucHVzaChbbWVbbGVdLFMuUHJvcHNbbWVbbGVdXV0pO2lm''@;'; put 'put ''KFMuQ3VzdHByb3BzKWZvcihtZT1MZShTLkN1c3Rwcm9wcyksbGU9MDtsZTxtZS5sZW5ndGg7KytsZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUy5Qcm9wc3x8e30sbWVbbGVdKXx8KE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChLbyxtZVtsZV0p''@;'; put 'put ''P2s6T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFhjLG1lW2xlXSk/RzpRKS5wdXNoKFttZVtsZV0sUy5DdXN0cHJvcHNbbWVbbGVdXV0pO3ZhciBwZT1bXTtmb3IobGU9MDtsZTxRLmxlbmd0aDsrK2xlKWVmLmluZGV4T2YoUVtsZV1bMF0pPi0xfHxudWxsIT1RW2xlXVsx''@;'; put 'put ''XSYmcGUucHVzaChRW2xlXSk7Ry5sZW5ndGgmJnllLnV0aWxzLmNmYl9hZGQoTCwiL1x4MDVTdW1tYXJ5SW5mb3JtYXRpb24iLEhpKEcsTzdfU0ksWGMscDApKSwoay5sZW5ndGh8fHBlLmxlbmd0aCkmJnllLnV0aWxzLmNmYl9hZGQoTCwiL1x4MDVEb2N1bWVudFN1bW1hcnlJbmZvcm1hdGlv''@;'; put 'put ''biIsSGkoayxPN19EU0ksS28sa3AscGUubGVuZ3RoP3BlOm51bGwsIjA1ZDVjZGQ1OWMyZTFiMTA5Mzk3MDgwMDJiMmNmOWFlIikpfShTLEcpLDg9PWsuYmlmZiYmUy52YmFyYXcmJmZ1bmN0aW9uIFZVKFMsTCl7TC5GdWxsUGF0aHMuZm9yRWFjaChmdW5jdGlvbihrLEcpe2lmKDAhPUcpe3Zh''@;'; put 'put ''ciBRPWsucmVwbGFjZSgvW15cL10qW1wvXS8sIi9fVkJBX1BST0pFQ1RfQ1VSLyIpOyIvIiE9PVEuc2xpY2UoLTEpJiZ5ZS51dGlscy5jZmJfYWRkKFMsUSxMLkZpbGVJbmRleFtHXS5jb250ZW50KX19KX0oRyx5ZS5yZWFkKFMudmJhcmF3LHt0eXBlOiJzdHJpbmciPT10eXBlb2YgUy52YmFy''@;'; put 'put ''YXc/ImJpbmFyeSI6ImJ1ZmZlciJ9KSksR30oUyxrKSxrKX0oUyxrKTtjYXNlInhsc3giOmNhc2UieGxzbSI6Y2FzZSJ4bGFtIjpjYXNlInhsc2IiOmNhc2Uib2RzIjpyZXR1cm4gZnVuY3Rpb24gZEUoUyxMKXt2YXIgaz1MfHx7fSxHPVVnKFMsayksUT17fTtpZihrLmNvbXByZXNzaW9uJiYo''@;'; put 'put ''US5jb21wcmVzc2lvbj0iREVGTEFURSIpLGsucGFzc3dvcmQpUS50eXBlPVRlPyJub2RlYnVmZmVyIjoic3RyaW5nIjtlbHNlIHN3aXRjaChrLnR5cGUpe2Nhc2UiYmFzZTY0IjpRLnR5cGU9ImJhc2U2NCI7YnJlYWs7Y2FzZSJiaW5hcnkiOlEudHlwZT0ic3RyaW5nIjticmVhaztjYXNlInN0''@;'; put 'put ''cmluZyI6dGhyb3cgbmV3IEVycm9yKCInc3RyaW5nJyBvdXRwdXQgdHlwZSBpbnZhbGlkIGZvciAnIitrLmJvb2tUeXBlKyInIGZpbGVzIik7Y2FzZSJidWZmZXIiOmNhc2UiZmlsZSI6US50eXBlPVRlPyJub2RlYnVmZmVyIjoic3RyaW5nIjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJv''@;'; put 'put ''cigiVW5yZWNvZ25pemVkIHR5cGUgIitrLnR5cGUpfXZhciBsZT1HLkZ1bGxQYXRocz95ZS53cml0ZShHLHtmaWxlVHlwZToiemlwIix0eXBlOntub2RlYnVmZmVyOiJidWZmZXIiLHN0cmluZzoiYmluYXJ5In1bUS50eXBlXXx8US50eXBlfSk6Ry5nZW5lcmF0ZShRKTtyZXR1cm4gay5wYXNz''@;'; put 'put ''d29yZCYmdHlwZW9mIHNFPCJ1Ij9aZyhzRShsZSxrLnBhc3N3b3JkKSxrKToiZmlsZSI9PT1rLnR5cGU/a2Uoay5maWxlLGxlKToic3RyaW5nIj09ay50eXBlP2NvKGxlKTpsZX0oUyxrKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIGJvb2tUeXBlIHwiK2suYm9va1R5''@;'; put 'put ''cGUrInwiKX19ZnVuY3Rpb24gTk8oUyl7aWYoIVMuYm9va1R5cGUpe3ZhciBrPVMuZmlsZS5zbGljZShTLmZpbGUubGFzdEluZGV4T2YoIi4iKSkudG9Mb3dlckNhc2UoKTtrLm1hdGNoKC9eXC5bYS16XSskLykmJihTLmJvb2tUeXBlPWsuc2xpY2UoMSkpLFMuYm9va1R5cGU9e3hsczoiYmlm''@;'; put 'put ''ZjgiLGh0bToiaHRtbCIsc2xrOiJzeWxrIixzb2NpYWxjYWxjOiJldGgiLFNoMzN0SlM6IldURiJ9W1MuYm9va1R5cGVdfHxTLmJvb2tUeXBlfX1mdW5jdGlvbiBWTyhTLEwsayl7dmFyIEc9a3x8e307cmV0dXJuIEcudHlwZT0iZmlsZSIsRy5maWxlPUwsTk8oRyksdV8oUyxHKX1mdW5jdGlv''@;'; put 'put ''biBCTyhTLEwsayxHLFEsbGUsbWUscGUpe3ZhciBiZT1CaShrKSxOZT1wZS5kZWZ2YWwsQmU9cGUucmF3LEdlPSEwLGV0PTE9PT1RP1tdOnt9O2lmKDEhPT1RKWlmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSl0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV0LCJfX3Jvd051bV9fIix7dmFsdWU6''@;'; put 'put ''ayxlbnVtZXJhYmxlOiExfSl9Y2F0Y2h7ZXQuX19yb3dOdW1fXz1rfWVsc2UgZXQuX19yb3dOdW1fXz1rO2lmKCFtZXx8U1trXSlmb3IodmFyIGN0PUwucy5jO2N0PD1MLmUuYzsrK2N0KXt2YXIgeHQ9bWU/U1trXVtjdF06U1tHW2N0XStiZV07aWYodm9pZCAwIT09eHQmJnZvaWQgMCE9PXh0''@;'; put 'put ''LnQpe3ZhciBvdD14dC52O3N3aXRjaCh4dC50KXtjYXNlInoiOmlmKG51bGw9PW90KWJyZWFrO2NvbnRpbnVlO2Nhc2UiZSI6b3Q9MD09b3Q/bnVsbDp2b2lkIDA7YnJlYWs7Y2FzZSJzIjpjYXNlImQiOmNhc2UiYiI6Y2FzZSJuIjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5y''@;'; put 'put ''ZWNvZ25pemVkIHR5cGUgIit4dC50KX1pZihudWxsIT1sZVtjdF0pe2lmKG51bGw9PW90KWlmKCJlIj09eHQudCYmbnVsbD09PW90KWV0W2xlW2N0XV09bnVsbDtlbHNlIGlmKHZvaWQgMCE9PU5lKWV0W2xlW2N0XV09TmU7ZWxzZXtpZighQmV8fG51bGwhPT1vdCljb250aW51ZTtldFtsZVtj''@;'; put 'put ''dF1dPW51bGx9ZWxzZSBldFtsZVtjdF1dPUJlP290OkxvKHh0LG90LHBlKTtudWxsIT1vdCYmKEdlPSExKX19ZWxzZXtpZih2b2lkIDA9PT1OZSljb250aW51ZTtudWxsIT1sZVtjdF0mJihldFtsZVtjdF1dPU5lKX19cmV0dXJue3JvdzpldCxpc2VtcHR5OkdlfX1mdW5jdGlvbiB6NyhTLEwp''@;'; put 'put ''e2lmKG51bGw9PVN8fG51bGw9PVNbIiFyZWYiXSlyZXR1cm5bXTt2YXIgaz17dDoibiIsdjowfSxHPTAsUT0xLGxlPVtdLG1lPTAscGU9IiIsYmU9SlNPTi5wYXJzZSgneyJzIjp7InIiOjAsImMiOjB9LCJlIjp7InIiOjAsImMiOjB9fScpLE5lPUx8fHt9LEJlPW51bGwhPU5lLnJhbmdlP05l''@;'; put 'put ''LnJhbmdlOlNbIiFyZWYiXTtzd2l0Y2goMT09PU5lLmhlYWRlcj9HPTE6IkEiPT09TmUuaGVhZGVyP0c9MjpBcnJheS5pc0FycmF5KE5lLmhlYWRlcik/Rz0zOm51bGw9PU5lLmhlYWRlciYmKEc9MCksdHlwZW9mIEJlKXtjYXNlInN0cmluZyI6YmU9dG8oQmUpO2JyZWFrO2Nhc2UibnVtYmVy''@;'; put 'put ''IjooYmU9dG8oU1siIXJlZiJdKSkucy5yPUJlO2JyZWFrO2RlZmF1bHQ6YmU9QmV9Rz4wJiYoUT0wKTt2YXIgR2U9QmkoYmUucy5yKSxldD1bXSxjdD1bXSx4dD0wLG90PTAsYnQ9QXJyYXkuaXNBcnJheShTKSxGdD1iZS5zLnIsa3Q9MCxMdD0wO2ZvcihidCYmIVNbRnRdJiYoU1tGdF09W10p''@;'; put 'put ''LGt0PWJlLnMuYztrdDw9YmUuZS5jOysra3Qpc3dpdGNoKGV0W2t0XT1GbyhrdCksaz1idD9TW0Z0XVtrdF06U1tldFtrdF0rR2VdLEcpe2Nhc2UgMTpsZVtrdF09a3QtYmUucy5jO2JyZWFrO2Nhc2UgMjpsZVtrdF09ZXRba3RdO2JyZWFrO2Nhc2UgMzpsZVtrdF09TmUuaGVhZGVyW2t0LWJl''@;'; put 'put ''LnMuY107YnJlYWs7ZGVmYXVsdDpmb3IobnVsbD09ayYmKGs9SlNPTi5wYXJzZSgneyJ3IjogIl9fRU1QVFkiLCAidCI6ICJzIn0nKSkscGU9bWU9TG8oayxudWxsLE5lKSxvdD0wLEx0PTA7THQ8bGUubGVuZ3RoOysrTHQpbGVbTHRdPT1wZSYmKHBlPW1lKyJfIisgKytvdCk7bGVba3RdPXBl''@;'; put 'put ''fWZvcihGdD1iZS5zLnIrUTtGdDw9YmUuZS5yOysrRnQpe3ZhciBKdD1CTyhTLGJlLEZ0LGV0LEcsbGUsYnQsTmUpOyghMT09PUp0LmlzZW1wdHl8fCgxPT09Rz8hMSE9PU5lLmJsYW5rcm93czpOZS5ibGFua3Jvd3MpKSYmKGN0W3h0KytdPUp0LnJvdyl9cmV0dXJuIGN0Lmxlbmd0aD14dCxj''@;'; put 'put ''dH12YXIgVTc9LyIvZztmdW5jdGlvbiBmRShTLEwsayxHLFEsbGUsbWUscGUpe2Zvcih2YXIgYmU9ITAsTmU9W10sQmU9IiIsR2U9QmkoayksZXQ9TC5zLmM7ZXQ8PUwuZS5jOysrZXQpaWYoR1tldF0pe3ZhciBjdD1wZS5kZW5zZT8oU1trXXx8W10pW2V0XTpTW0dbZXRdK0dlXTtpZihudWxs''@;'; put 'put ''PT1jdClCZT0iIjtlbHNlIGlmKG51bGwhPWN0LnYpe2JlPSExLEJlPSIiK0xvKGN0LG51bGwscGUpO2Zvcih2YXIgeHQ9MCxvdD0wO3h0IT09QmUubGVuZ3RoOysreHQpaWYoKG90PUJlLmNoYXJDb2RlQXQoeHQpKT09PVF8fG90PT09bGV8fDM0PT09b3Qpe0JlPSciJytCZS5yZXBsYWNlKFU3''@;'; put 'put ''LCciIicpKyciJzticmVha30iSUQiPT1CZSYmKEJlPSciSUQiJyl9ZWxzZSBudWxsPT1jdC5mfHxjdC5GP0JlPSIiOihiZT0hMSwoQmU9Ij0iK2N0LmYpLmluZGV4T2YoIiwiKT49MCYmKEJlPSciJytCZS5yZXBsYWNlKFU3LCciIicpKyciJykpO05lLnB1c2goQmUpfXJldHVybiExPT09cGUu''@;'; put 'put ''Ymxhbmtyb3dzJiZiZT9udWxsOk5lLmpvaW4obWUpfWZ1bmN0aW9uIFo3KFMsTCl7dmFyIGs9W10sRz1MPz97fTtpZihudWxsPT1TfHxudWxsPT1TWyIhcmVmIl0pcmV0dXJuIiI7dmFyIFE9dG8oU1siIXJlZiJdKSxsZT12b2lkIDAhPT1HLkZTP0cuRlM6IiwiLG1lPWxlLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkscGU9dm9pZCAwIT09Ry5SUz9HLlJTOiJcbiIsYmU9cGUuY2hhckNvZGVBdCgwKSxOZT1uZXcgUmVnRXhwKCgifCI9PWxlPyJcXHwiOmxlKSsiKyQiKSxCZT0iIixHZT1bXTtHLmRlbnNlPUFycmF5LmlzQXJyYXkoUyk7Zm9yKHZhciBldD1HLnNraXBIaWRkZW4mJlNbIiFjb2xzIl18fFtd''@;'; put 'put ''LGN0PUcuc2tpcEhpZGRlbiYmU1siIXJvd3MiXXx8W10seHQ9US5zLmM7eHQ8PVEuZS5jOysreHQpKGV0W3h0XXx8e30pLmhpZGRlbnx8KEdlW3h0XT1Gbyh4dCkpO2Zvcih2YXIgb3Q9US5zLnI7b3Q8PVEuZS5yOysrb3QpKGN0W290XXx8e30pLmhpZGRlbnx8bnVsbCE9KEJlPWZFKFMsUSxv''@;'; put 'put ''dCxHZSxtZSxiZSxsZSxHKSkmJihHLnN0cmlwJiYoQmU9QmUucmVwbGFjZShOZSwiIikpLGsucHVzaChCZStwZSkpO3JldHVybiBkZWxldGUgRy5kZW5zZSxrLmpvaW4oIiIpfWZ1bmN0aW9uIGpPKFMsTCl7THx8KEw9e30pLEwuRlM9Ilx0IixMLlJTPSJcbiI7dmFyIGs9WjcoUyxMKTtyZXR1''@;'; put 'put ''cm4gdHlwZW9mIGNwdGFibGU+InUifHwic3RyaW5nIj09TC50eXBlP2s6Ilx4ZmZceGZlIitjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLGssInN0ciIpfWZ1bmN0aW9uIHBFKFMpe3ZhciBrLEw9IiIsRz0iIjtpZihudWxsPT1TfHxudWxsPT1TWyIhcmVmIl0pcmV0dXJuW107dmFyIHBlLFE9''@;'; put 'put ''dG8oU1siIXJlZiJdKSxsZT0iIixtZT1bXSxiZT1bXSxOZT1BcnJheS5pc0FycmF5KFMpO2ZvcihwZT1RLnMuYztwZTw9US5lLmM7KytwZSltZVtwZV09Rm8ocGUpO2Zvcih2YXIgQmU9US5zLnI7QmU8PVEuZS5yOysrQmUpZm9yKGxlPUJpKEJlKSxwZT1RLnMuYztwZTw9US5lLmM7KytwZSlp''@;'; put 'put ''ZihMPW1lW3BlXStsZSxHPSIiLHZvaWQgMCE9PShrPU5lPyhTW0JlXXx8W10pW3BlXTpTW0xdKSl7aWYobnVsbCE9ay5GKXtpZihMPWsuRiwhay5mKWNvbnRpbnVlO0c9ay5mLC0xPT1MLmluZGV4T2YoIjoiKSYmKEw9TCsiOiIrTCl9aWYobnVsbCE9ay5mKUc9ay5mO2Vsc2V7aWYoInoiPT1r''@;'; put 'put ''LnQpY29udGludWU7aWYoIm4iPT1rLnQmJm51bGwhPWsudilHPSIiK2sudjtlbHNlIGlmKCJiIj09ay50KUc9ay52PyJUUlVFIjoiRkFMU0UiO2Vsc2UgaWYodm9pZCAwIT09ay53KUc9IiciK2sudztlbHNle2lmKHZvaWQgMD09PWsudiljb250aW51ZTtHPSJzIj09ay50PyInIitrLnY6IiIr''@;'; put 'put ''ay52fX1iZVtiZS5sZW5ndGhdPUwrIj0iK0d9cmV0dXJuIGJlfWZ1bmN0aW9uIHpPKFMsTCxrKXt2YXIgRz1rfHx7fSxRPSshRy5za2lwSGVhZGVyLGxlPVN8fHt9LG1lPTAscGU9MDtpZihsZSYmbnVsbCE9Ry5vcmlnaW4paWYoIm51bWJlciI9PXR5cGVvZiBHLm9yaWdpbiltZT1HLm9yaWdp''@;'; put 'put ''bjtlbHNle3ZhciBiZT0ic3RyaW5nIj09dHlwZW9mIEcub3JpZ2luP0FvKEcub3JpZ2luKTpHLm9yaWdpbjttZT1iZS5yLHBlPWJlLmN9dmFyIE5lLEJlPUpTT04ucGFyc2UoJ3sicyI6IHsiYyI6MCwgInIiOjB9LCAiZSI6IHsiYyI6MCwgInIiOjB9fScpO2lmKEJlLmUuYz1wZSxCZS5lLnI9''@;'; put 'put ''bWUrTC5sZW5ndGgtMStRLGxlWyIhcmVmIl0pe3ZhciBHZT10byhsZVsiIXJlZiJdKTtCZS5lLmM9TWF0aC5tYXgoQmUuZS5jLEdlLmUuYyksQmUuZS5yPU1hdGgubWF4KEJlLmUucixHZS5lLnIpLC0xPT1tZSYmKEJlLmUucj0obWU9R2UuZS5yKzEpK0wubGVuZ3RoLTErUSl9ZWxzZS0xPT1t''@;'; put 'put ''ZSYmKG1lPTAsQmUuZS5yPUwubGVuZ3RoLTErUSk7dmFyIGV0PUcuaGVhZGVyfHxbXSxjdD0wO0wuZm9yRWFjaChmdW5jdGlvbihvdCxidCl7TGUob3QpLmZvckVhY2goZnVuY3Rpb24oRnQpey0xPT0oY3Q9ZXQuaW5kZXhPZihGdCkpJiYoZXRbY3Q9ZXQubGVuZ3RoXT1GdCk7dmFyIGt0PW90''@;'; put 'put ''W0Z0XSxMdD0ieiIsSnQ9IiIsVG49R2koe2M6cGUrY3QscjptZStidCtRfSk7aWYoTmU9dzAuc2hlZXRfZ2V0X2NlbGwobGUsVG4pLCFrdHx8Im9iamVjdCIhPXR5cGVvZiBrdHx8a3QgaW5zdGFuY2VvZiBEYXRlKXtpZigibnVtYmVyIj09dHlwZW9mIGt0P0x0PSJuIjoiYm9vbGVhbiI9PXR5''@;'; put 'put ''cGVvZiBrdD9MdD0iYiI6InN0cmluZyI9PXR5cGVvZiBrdD9MdD0icyI6a3QgaW5zdGFuY2VvZiBEYXRlPyhMdD0iZCIsRy5jZWxsRGF0ZXN8fChMdD0ibiIsa3Q9UWUoa3QpKSxKdD1OZS56JiZBLmlzX2RhdGUoTmUueik/TmUuejpHLmRhdGVORnx8QS5fdGFibGVbMTRdKTpudWxsPT09a3Qm''@;'; put 'put ''JkcubnVsbEVycm9yJiYoTHQ9ImUiLGt0PTApLE5lPyhOZS50PUx0LE5lLnY9a3QsZGVsZXRlIE5lLncsZGVsZXRlIE5lLlIsSnQmJihOZS56PUp0KSk6bGVbVG5dPU5lPXt0Okx0LHY6a3R9LEp0JiYoTmUuej1KdCksTmUmJk5lLmgpdHJ5e2lmKE5lLlI9YTIuaHRtbF90b19ycyhOZS5oKSwh''@;'; put 'put ''TmUudil7TmUudj0iIjtmb3IodmFyIHNyPTA7c3I8TmUuUi5sZW5ndGg7KytzcilOZS52Kz1OZS5SW3NyXS52fHwiIn19Y2F0Y2h7fX1lbHNlIGxlW1RuXT1rdH0pfSksQmUuZS5jPU1hdGgubWF4KEJlLmUuYyxwZStldC5sZW5ndGgtMSk7dmFyIHh0PUJpKG1lKTtpZihRKWZvcihjdD0wO2N0''@;'; put 'put ''PGV0Lmxlbmd0aDsrK2N0KWxlW0ZvKGN0K3BlKSt4dF09e3Q6InMiLHY6ZXRbY3RdfTtyZXR1cm4gbGVbIiFyZWYiXT1vbyhCZSksbGV9dmFyIHcwPXtlbmNvZGVfY29sOkZvLGVuY29kZV9yb3c6QmksZW5jb2RlX2NlbGw6R2ksZW5jb2RlX3JhbmdlOm9vLGRlY29kZV9jb2w6WGwsZGVjb2Rl''@;'; put 'put ''X3JvdzpsbCxzcGxpdF9jZWxsOmZ1bmN0aW9uIGUxKFMpe3JldHVybiBTLnJlcGxhY2UoLyhcJD9bQS1aXSopKFwkP1xkKikvLCIkMSwkMiIpLnNwbGl0KCIsIil9LGRlY29kZV9jZWxsOkFvLGRlY29kZV9yYW5nZTpWbyxmb3JtYXRfY2VsbDpMbyxnZXRfZm9ybXVsYWU6cEUsbWFrZV9jc3Y6''@;'; put 'put ''WjcsbWFrZV9qc29uOno3LG1ha2VfZm9ybXVsYWU6cEUsaHRtbF90b19yczphMi5odG1sX3RvX3JzLHNoZWV0X2FkZF9hb2E6XzEsc2hlZXRfYWRkX2pzb246ek8sc2hlZXRfYWRkX2RvbTp0RSxhb2FfdG9fc2hlZXQ6aDAsanNvbl90b19zaGVldDpmdW5jdGlvbiBmWShTLEwpe3JldHVybiB6''@;'; put 'put ''TyhudWxsLFMsTCl9LHRhYmxlX3RvX3NoZWV0OlNPLHRhYmxlX3RvX2Jvb2s6ZnVuY3Rpb24gTU8oUyxMKXtyZXR1cm4gYjEoU08oUyxMKSxMKX0sc2hlZXRfdG9fY3N2Olo3LHNoZWV0X3RvX3R4dDpqTyxzaGVldF90b19qc29uOno3LHNoZWV0X3RvX2h0bWw6YTIuZnJvbV9zaGVldCxzaGVl''@;'; put 'put ''dF90b19mb3JtdWxhZTpwRSxzaGVldF90b19yb3dfb2JqZWN0X2FycmF5Ono3fTtmdW5jdGlvbiBnRShTLEwsayxHLFEpe3ZhciBsZTtpZihTLnN0eWxlJiYhKFMuX3JhbmdlJiYobGU9InN0cmluZyI9PXR5cGVvZiBTLl9yYW5nZT93LnV0aWxzLmRlY29kZV9yYW5nZShTLl9yYW5nZSk6Uy5f''@;'; put 'put ''cmFuZ2Usay5jPmxlLmUuY3x8ay5jPGxlLnMuY3x8ay5yPmxlLmUucnx8ay5yPGxlLnMucikpJiZsZSl7dmFyIG1lPVMuc3R5bGUuc3R5bGU7aWYobWUpe21lLndob2xlVGFibGUmJncwLmFwcGx5X3N0eWxlX2RlbHRhKEcsbWUud2hvbGVUYWJsZSk7ZTppZihtZS5oZWFkZXJSb3cpaWYoUSl7''@;'; put 'put ''aWYoay5yIT1sZS5zLnIpYnJlYWsgZTtCdChTLnN0eWxlLmNvbGhlYWQpfHx3MC5hcHBseV9zdHlsZV9kZWx0YShHLG1lLmhlYWRlclJvdyl9ZWxzZXtpZihrLnIhPWxlLnMucilicmVhayBlO0J0KFMuaGVhZGVyKXx8dzAuYXBwbHlfc3R5bGVfZGVsdGEoRyxtZS5oZWFkZXJSb3cpfX19fXcw''@;'; put 'put ''LnRlc3RfcGFzc3dvcmQ9ZnVuY3Rpb24gVE8oUyxMKXt2YXIgaz1CdWZmZXIuZnJvbShTLnNhbHQsImJhc2U2NCIpLEc9Uy5hbGdvLFE9TWMoQnVmZmVyLmNvbmNhdChbayxCdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLEwpKV0pLEcpLGxlPUJ1ZmZlci5hbGxvYyg0KTtq''@;'; put 'put ''dChsZSwwKTtmb3IodmFyIG1lPTA7bWU8Uy5zcGluOysrbWUpbGUubD0wLGxlLndyaXRlX3NoaWZ0KDQsbWUpLFE9TWMoQnVmZmVyLmNvbmNhdChbUSxsZV0pLEcpO3ZhciBwZT1CdWZmZXIuZnJvbShTLmhhc2gsImJhc2U2NCIpO3JldHVybiAwPT1RLmNvbXBhcmUocGUpfSx3MC5oYXNoX3Bh''@;'; put 'put ''c3N3b3JkPWZ1bmN0aW9uIEFPKFMpe3ZhciBMPXthbGdvOiJTSEEtNTEyIixzYWx0OiJVMmhsWlhSS1V5NWpiMjB2ZUd4emVBPT0iLHNwaW46MWUzfSxrPUJ1ZmZlci5mcm9tKEwuc2FsdCwiYmFzZTY0IiksRz1MLmFsZ28sUT1NYyhCdWZmZXIuY29uY2F0KFtrLEJ1ZmZlci5mcm9tKGNwdGFi''@;'; put 'put ''bGUudXRpbHMuZW5jb2RlKDEyMDAsUykpXSksRyksbGU9QnVmZmVyLmFsbG9jKDQpO2p0KGxlLDApO2Zvcih2YXIgbWU9MDttZTxMLnNwaW47KyttZSlsZS5sPTAsbGUud3JpdGVfc2hpZnQoNCxtZSksUT1NYyhCdWZmZXIuY29uY2F0KFtRLGxlXSksRyk7cmV0dXJuIEwuaGFzaD1RLnRvU3Ry''@;'; put 'put ''aW5nKCJiYXNlNjQiKSxMfSx3MC5zaGVldF9zZXRfcmFuZ2Vfc3R5bGU9ZnVuY3Rpb24oUyxMLGspe2lmKGspe3ZhciBHPSJzdHJpbmciPT10eXBlb2YgTD90byhMKTpMO251bGwhPUcuciYmbnVsbCE9Ry5jJiYoRz17czpHLGU6R30pO3ZhciBwZSxRPUcucy5yLGxlPTAsbWU9IiIsYmU9Vm8o''@;'; put 'put ''U1siIXJlZiJdfHwiQTEiKTtiZS5zLnI+Ry5zLnImJihiZS5zLnI9Ry5zLnIpLGJlLnMuYz5HLnMuYyYmKGJlLnMuYz1HLnMuYyksYmUuZS5yPEcuZS5yJiYoYmUuZS5yPUcuZS5yKSxiZS5lLmM8Ry5lLmMmJihiZS5lLmM9Ry5lLmMpLFNbIiFyZWYiXT1vbyhiZSk7Zm9yKHZhciBCZT1BcnJh''@;'; put 'put ''eS5pc0FycmF5KFMpO1E8PUcuZS5yOysrUSlmb3IobGU9Ry5zLmM7bGU8PUcuZS5jOysrbGUpQmU/KFNbUV18fChTW1FdPVtdKSxTW1FdW2xlXXx8KFNbUV1bbGVdPXt0OiJ6In0pLHBlPVNbUV1bbGVdKTooU1ttZT1HaSh7cjpRLGM6bGV9KV18fChTW21lXT17dDoieiJ9KSxwZT1TW21lXSks''@;'; put 'put ''cGUuc3x8KHBlLnM9e30pLE9iamVjdC5rZXlzKGspLmZvckVhY2goTmUpLHBlLnMucGF0dGVyblR5cGUmJiFwZS5zLmZnQ29sb3ImJihkZWxldGUgcGUucy5wYXR0ZXJuVHlwZSxkZWxldGUgcGUucy5iZ0NvbG9yKSwocGUucy5mZ0NvbG9yfHxwZS5zLmJnQ29sb3IpJiYibm9uZSI9PShwZS5z''@;'; put 'put ''LnBhdHRlcm5UeXBlfHwibm9uZSIpJiYocGUucy5wYXR0ZXJuVHlwZT0ic29saWQiKTtpZihRPUcucy5yLGsudG9wfHxudWxsPT09ay50b3ApZm9yKGxlPUcucy5jO2xlPD1HLmUuYzsrK2xlKXtpZihCZSl7aWYoIVNbUV0pY29udGludWU7cGU9U1tRXVtsZV19ZWxzZSBtZT1HaSh7cjpRLGM6''@;'; put 'put ''bGV9KSxwZT1TW21lXTtwZSYmKG51bGw9PT1rLnRvcD9kZWxldGUgcGUucy50b3A6cGUucy50b3A9dW4oay50b3ApKX1pZihRPUcuZS5yLGsuYm90dG9tfHxudWxsPT09ay5ib3R0b20pZm9yKGxlPUcucy5jO2xlPD1HLmUuYzsrK2xlKXtpZihCZSl7aWYoIVNbUV0pY29udGludWU7cGU9U1tR''@;'; put 'put ''XVtsZV19ZWxzZSBtZT1HaSh7cjpRLGM6bGV9KSxwZT1TW21lXTtwZSYmKG51bGw9PT1rLmJvdHRvbT9kZWxldGUgcGUucy5ib3R0b206cGUucy5ib3R0b209dW4oay5ib3R0b20pKX1pZihsZT1HLnMuYyxrLmxlZnR8fG51bGw9PT1rLmxlZnQpZm9yKFE9Ry5zLnI7UTw9Ry5lLnI7KytRKXtp''@;'; put 'put ''ZihCZSl7aWYoIVNbUV0pY29udGludWU7cGU9U1tRXVtsZV19ZWxzZSBtZT1HaSh7cjpRLGM6bGV9KSxwZT1TW21lXTtwZSYmKG51bGw9PT1rLmxlZnQ/ZGVsZXRlIHBlLnMubGVmdDpwZS5zLmxlZnQ9dW4oay5sZWZ0KSl9aWYobGU9Ry5lLmMsay5yaWdodHx8bnVsbD09PWsucmlnaHQpZm9y''@;'; put 'put ''KFE9Ry5zLnI7UTw9Ry5lLnI7KytRKXtpZihCZSl7aWYoIVNbUV0pY29udGludWU7cGU9U1tRXVtsZV19ZWxzZSBtZT1HaSh7cjpRLGM6bGV9KSxwZT1TW21lXTtwZSYmKG51bGw9PT1rLnJpZ2h0P2RlbGV0ZSBwZS5zLnJpZ2h0OnBlLnMucmlnaHQ9dW4oay5yaWdodCkpfX1mdW5jdGlvbiBO''@;'; put 'put ''ZShHZSl7aWYoInRvcCIhPUdlJiYiYm90dG9tIiE9R2UmJiJsZWZ0IiE9R2UmJiJyaWdodCIhPUdlKXtpZigieiI9PUdlKXJldHVybiB2b2lkKHBlLno9ay56KTtpZigiYWxpZ25tZW50Ij09R2UpcmV0dXJuIHZvaWQocGUuc1tHZV0/T2JqZWN0LmtleXMoa1tHZV0pLmZvckVhY2goZnVuY3Rp''@;'; put 'put ''b24oZXQpe3BlLnNbR2VdW2V0XT1rW0dlXVtldF19KTpwZS5zW0dlXT11bihrW0dlXSkpO2lmKCJpbmNvbCI9PUdlKXJldHVybiBsZT5HLnMuYyYmKG51bGw9PT1rLmxlZnQ/ZGVsZXRlIHBlLnMubGVmdDpwZS5zLmxlZnQ9Im9iamVjdCI9PXR5cGVvZiBrW0dlXT91bihrW0dlXSk6a1tHZV0p''@;'; put 'put ''LHZvaWQobGU8Ry5lLmMmJihudWxsPT09ay5yaWdodD9kZWxldGUgcGUucy5yaWdodDpwZS5zLnJpZ2h0PSJvYmplY3QiPT10eXBlb2Yga1tHZV0/dW4oa1tHZV0pOmtbR2VdKSk7aWYoImlucm93Ij09R2UpcmV0dXJuIFE+Ry5zLnImJihudWxsPT09ay50b3A/ZGVsZXRlIHBlLnMudG9wOnBl''@;'; put 'put ''LnMudG9wPSJvYmplY3QiPT10eXBlb2Yga1tHZV0/dW4oa1tHZV0pOmtbR2VdKSx2b2lkKFE8Ry5lLnImJihudWxsPT09ay5ib3R0b20/ZGVsZXRlIHBlLnMuYm90dG9tOnBlLnMuYm90dG9tPSJvYmplY3QiPT10eXBlb2Yga1tHZV0/dW4oa1tHZV0pOmtbR2VdKSk7bnVsbD09PWtbR2VdP2Rl''@;'; put 'put ''bGV0ZSBwZS5zW0dlXTpwZS5zW0dlXT1rW0dlXSYmQXJyYXkuaXNBcnJheShrW0dlXSk/a1tHZV0uc2xpY2UoKS5tYXAoZnVuY3Rpb24oZXQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZXQ/dW4oZXQpOmV0fSk6Im9iamVjdCI9PXR5cGVvZiBrW0dlXT91bihrW0dlXSk6a1tHZV19fX0sdzAu''@;'; put 'put ''YXBwbHlfc3R5bGVfZGVsdGE9ZnVuY3Rpb24oUyxMKXtbInN6IiwiYm9sZCIsIml0YWxpYyIsInVuZGVybGluZSIsInN0cmlrZSIsIm5hbWUiLCJ2YWxpZ24iXS5mb3JFYWNoKGZ1bmN0aW9uKGspe3ZhciBHPWs7ImJnQ29sb3IiPT1rP0c9ImZnQ29sb3IiOiJmZ0NvbG9yIj09ayYmKEc9ImJn''@;'; put 'put ''Q29sb3IiKSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoTCxrKSYmKG51bGw9PT1MW2tdP2RlbGV0ZSBTW0ddOm51bGwhPUxba10mJihTW0ddPUxba10pKX0pLFsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIiwiYWxpZ25tZW50IiwicHJvdGVjdGlvbiIsImNvbG9y''@;'; put 'put ''IiwiZmdDb2xvciIsImJnQ29sb3IiXS5mb3JFYWNoKGZ1bmN0aW9uKGspe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChMLGspJiYobnVsbD09PUxba10/ZGVsZXRlIFNba106bnVsbCE9TFtrXSYmKFNba109dW4oTFtrXSkpKX0pfSx3MC5nZXRfY29tcHV0ZWRfc3R5bGU9''@;'; put 'put ''ZnVuY3Rpb24oUyxMKXsic3RyaW5nIj09dHlwZW9mIEwmJihMPXcudXRpbHMuZGVjb2RlX2NlbGwoTCkpO3ZhciBrPUFycmF5LmlzQXJyYXkoUyk/KFNbTC5yXXx8W10pW0wuY106U1t3LnV0aWxzLmVuY29kZV9jZWxsKEwpXSxHPXVuKGsmJmsuc3x8e30pO3JldHVybiBTWyIhdGFibGVzIl0m''@;'; put 'put ''JlNbIiF0YWJsZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKFEpe2dFKFEsMCxMLEcpfSksU1siIXBpdm90cyJdJiZTWyIhcGl2b3RzIl0uZm9yRWFjaChmdW5jdGlvbihRKXtnRShRLDAsTCxHLCEwKX0pLEd9O3ZhciBXTz17fTt3MC5jZWxsX2FycmF5X3RvX2Nzdl9yb3c9ZnVuY3Rpb24oUyxMKXt2''@;'; put 'put ''YXIgaz1MPz97fSxHPXZvaWQgMCE9PWsuRlM/ay5GUzoiLCIsUT1HLmNoYXJDb2RlQXQoMCksbGU9dm9pZCAwIT09ay5SUz9rLlJTOiJcbiIsbWU9bGUuY2hhckNvZGVBdCgwKSxwZT1XT1tHXXx8KFdPW0ddPW5ldyBSZWdFeHAoKCJ8Ij09Rz8iXFx8IjpHKSsiKyQiKSksYmU9ZnVuY3Rpb24g''@;'; put 'put ''Wk8oUyxMLGssRyxRKXtmb3IodmFyIGxlPSEwLG1lPVtdLHBlPSIiLGJlPTA7YmU8PVMubGVuZ3RoLTE7KytiZSl7dmFyIE5lPVNbYmVdO2lmKG51bGw9PU5lKXBlPSIiO2Vsc2UgaWYobnVsbCE9TmUudil7bGU9ITEscGU9IiIrTG8oTmUsbnVsbCxRKTtmb3IodmFyIEJlPTAsR2U9MDtCZSE9''@;'; put 'put ''PXBlLmxlbmd0aDsrK0JlKWlmKChHZT1wZS5jaGFyQ29kZUF0KEJlKSk9PT1MfHxHZT09PWt8fDM0PT09R2Upe3BlPSciJytwZS5yZXBsYWNlKFU3LCciIicpKyciJzticmVha30iSUQiPT1wZSYmKHBlPSciSUQiJyl9ZWxzZSBudWxsPT1OZS5mfHxOZS5GP3BlPSIiOihsZT0hMSwocGU9Ij0i''@;'; put 'put ''K05lLmYpLmluZGV4T2YoIiwiKT49MCYmKHBlPSciJytwZS5yZXBsYWNlKFU3LCciIicpKyciJykpO21lLnB1c2gocGUpfXJldHVybiExPT09US5ibGFua3Jvd3MmJmxlP251bGw6bWUuam9pbihHKX0oUyxRLG1lLEcsayk7cmV0dXJuIGsuc3RyaXAmJihiZT1iZS5yZXBsYWNlKHBlLCIiKSks''@;'; put 'put ''YmUrbGV9LGZ1bmN0aW9uKFMpe2Z1bmN0aW9uIGsobGUsbWUscGUpe3JldHVybiBudWxsIT1sZVttZV0/bGVbbWVdOmxlW21lXT1wZX1mdW5jdGlvbiBHKGxlLG1lLHBlKXtpZigic3RyaW5nIj09dHlwZW9mIG1lKXtpZihBcnJheS5pc0FycmF5KGxlKSl7dmFyIGJlPUFvKG1lKTtyZXR1cm4g''@;'; put 'put ''bGVbYmUucl18fChsZVtiZS5yXT1bXSksbGVbYmUucl1bYmUuY118fChsZVtiZS5yXVtiZS5jXT17dDoieiJ9KX1yZXR1cm4gbGVbbWVdfHwobGVbbWVdPXt0OiJ6In0pfXJldHVybiBHKGxlLEdpKCJudW1iZXIiIT10eXBlb2YgbWU/bWU6e3I6bWUsYzpwZXx8MH0pKX1TLmNvbnN0cz1TLmNv''@;'; put 'put ''bnN0c3x8e30sUy5zaGVldF9nZXRfY2VsbD1HLFMuYm9va19uZXc9ZnVuY3Rpb24oKXtyZXR1cm57U2hlZXROYW1lczpbXSxTaGVldHM6e319fSxTLmJvb2tfYXBwZW5kX3NoZWV0PWZ1bmN0aW9uKGxlLG1lLHBlKXtpZighcGUpZm9yKHZhciBiZT0xO2JlPD02NTUzNSYmLTEhPWxlLlNoZWV0''@;'; put 'put ''TmFtZXMuaW5kZXhPZihwZT0iU2hlZXQiK2JlKTsrK2JlKTtpZihWeChwZSksbGUuU2hlZXROYW1lcy5pbmRleE9mKHBlKT49MCl0aHJvdyBuZXcgRXJyb3IoIldvcmtzaGVldCB3aXRoIG5hbWUgfCIrcGUrInwgYWxyZWFkeSBleGlzdHMhIik7bGUuU2hlZXROYW1lcy5wdXNoKHBlKSxsZS5T''@;'; put 'put ''aGVldHNbcGVdPW1lfSxTLmJvb2tfc2V0X3NoZWV0X3Zpc2liaWxpdHk9ZnVuY3Rpb24obGUsbWUscGUpe2sobGUsIldvcmtib29rIix7fSksayhsZS5Xb3JrYm9vaywiU2hlZXRzIixbXSk7dmFyIGJlPWZ1bmN0aW9uIFEobGUsbWUpe2lmKCJudW1iZXIiPT10eXBlb2YgbWUpe2lmKG1lPj0w''@;'; put 'put ''JiZsZS5TaGVldE5hbWVzLmxlbmd0aD5tZSlyZXR1cm4gbWU7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzaGVldCAjICIrbWUpfWlmKCJzdHJpbmciPT10eXBlb2YgbWUpe3ZhciBwZT1sZS5TaGVldE5hbWVzLmluZGV4T2YobWUpO2lmKHBlPi0xKXJldHVybiBwZTt0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIkNhbm5vdCBmaW5kIHNoZWV0IG5hbWUgfCIrbWUrInwiKX10aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNoZWV0IHwiK21lKyJ8Iil9KGxlLG1lKTtzd2l0Y2goayhsZS5Xb3JrYm9vay5TaGVldHMsYmUse30pLHBlKXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpicmVhaztkZWZh''@;'; put 'put ''dWx0OnRocm93IG5ldyBFcnJvcigiQmFkIHNoZWV0IHZpc2liaWxpdHkgc2V0dGluZyAiK3BlKX1sZS5Xb3JrYm9vay5TaGVldHNbYmVdLkhpZGRlbj1wZX0sZnVuY3Rpb24gTChsZSl7bGUuZm9yRWFjaChmdW5jdGlvbihtZSl7Uy5jb25zdHNbbWVbMF1dPW1lWzFdfSl9KFtbIlNIRUVUX1ZJ''@;'; put 'put ''U0lCTEUiLDBdLFsiU0hFRVRfSElEREVOIiwxXSxbIlNIRUVUX1ZFUllfSElEREVOIiwyXV0pLFMuY2VsbF9zZXRfbnVtYmVyX2Zvcm1hdD1mdW5jdGlvbihsZSxtZSl7cmV0dXJuIGxlLno9bWUsbGV9LFMuY2VsbF9zZXRfaHlwZXJsaW5rPWZ1bmN0aW9uKGxlLG1lLHBlKXtyZXR1cm4gbWU/''@;'; put 'put ''KGxlLmw9e1RhcmdldDptZX0scGUmJihsZS5sLlRvb2x0aXA9cGUpLGxlLnN8fChsZS5zPXt9KSxsZS5zLmNvbG9yPXt0aGVtZToxMH0pOihkZWxldGUgbGUubCxsZS5zJiZsZS5zLmNvbG9yJiYxMD09bGUucy5jb2xvci50aGVtZSYmZGVsZXRlIGxlLnMuY29sb3IpLGxlfSxTLmNlbGxfc2V0''@;'; put 'put ''X2ludGVybmFsX2xpbms9ZnVuY3Rpb24obGUsbWUscGUpe3JldHVybiBTLmNlbGxfc2V0X2h5cGVybGluayhsZSwiIyIrbWUscGUpfSxTLmNlbGxfYWRkX2NvbW1lbnQ9ZnVuY3Rpb24obGUsbWUscGUpe2xlLmN8fChsZS5jPVtdKSxsZS5jLnB1c2goe3Q6bWUsYTpwZXx8IlNoZWV0SlMifSl9''@;'; put 'put ''LFMuc2hlZXRfc2V0X2FycmF5X2Zvcm11bGE9ZnVuY3Rpb24obGUsbWUscGUpe2Zvcih2YXIgYmU9InN0cmluZyIhPXR5cGVvZiBtZT9tZTp0byhtZSksTmU9InN0cmluZyI9PXR5cGVvZiBtZT9tZTpvbyhtZSksQmU9YmUucy5yO0JlPD1iZS5lLnI7KytCZSlmb3IodmFyIEdlPWJlLnMuYztH''@;'; put 'put ''ZTw9YmUuZS5jOysrR2Upe3ZhciBldD1HKGxlLEJlLEdlKTtldC50PSJuIixldC5GPU5lLGRlbGV0ZSBldC52LEJlPT1iZS5zLnImJkdlPT1iZS5zLmMmJihldC5mPXBlKX1yZXR1cm4gbGV9fSh3MCksVGUmJmZ1bmN0aW9uKCl7dmFyIFM9Yig3MDQ1KS5SZWFkYWJsZTt3LnN0cmVhbT17dG9f''@;'; put 'put ''anNvbjpmdW5jdGlvbihRLGxlKXt2YXIgbWU9Uyh7b2JqZWN0TW9kZTohMH0pO2lmKG51bGw9PVF8fG51bGw9PVFbIiFyZWYiXSlyZXR1cm4gbWUucHVzaChudWxsKSxtZTt2YXIgcGU9e3Q6Im4iLHY6MH0sYmU9MCxOZT0xLEJlPVtdLEdlPTAsZXQ9IiIsY3Q9e3M6e3I6MCxjOjB9LGU6e3I6''@;'; put 'put ''MCxjOjB9fSx4dD1sZXx8e30sb3Q9bnVsbCE9eHQucmFuZ2U/eHQucmFuZ2U6UVsiIXJlZiJdO3N3aXRjaCgxPT09eHQuaGVhZGVyP2JlPTE6IkEiPT09eHQuaGVhZGVyP2JlPTI6QXJyYXkuaXNBcnJheSh4dC5oZWFkZXIpJiYoYmU9MyksdHlwZW9mIG90KXtjYXNlInN0cmluZyI6Y3Q9dG8o''@;'; put 'put ''b3QpO2JyZWFrO2Nhc2UibnVtYmVyIjooY3Q9dG8oUVsiIXJlZiJdKSkucy5yPW90O2JyZWFrO2RlZmF1bHQ6Y3Q9b3R9YmU+MCYmKE5lPTApO3ZhciBidD1CaShjdC5zLnIpLEZ0PVtdLGt0PTAsTHQ9QXJyYXkuaXNBcnJheShRKSxKdD1jdC5zLnIsVG49MCxzcj0wO2ZvcihMdCYmIVFbSnRd''@;'; put 'put ''JiYoUVtKdF09W10pLFRuPWN0LnMuYztUbjw9Y3QuZS5jOysrVG4pc3dpdGNoKEZ0W1RuXT1GbyhUbikscGU9THQ/UVtKdF1bVG5dOlFbRnRbVG5dK2J0XSxiZSl7Y2FzZSAxOkJlW1RuXT1Ubi1jdC5zLmM7YnJlYWs7Y2FzZSAyOkJlW1RuXT1GdFtUbl07YnJlYWs7Y2FzZSAzOkJlW1RuXT14''@;'; put 'put ''dC5oZWFkZXJbVG4tY3Qucy5jXTticmVhaztkZWZhdWx0OmZvcihudWxsPT1wZSYmKHBlPXt3OiJfX0VNUFRZIix0OiJzIn0pLGV0PUdlPUxvKHBlLG51bGwseHQpLGt0PTAsc3I9MDtzcjxCZS5sZW5ndGg7KytzcilCZVtzcl09PWV0JiYoZXQ9R2UrIl8iKyArK2t0KTtCZVtUbl09ZXR9cmV0''@;'; put 'put ''dXJuIEp0PWN0LnMucitOZSxtZS5fcmVhZD1mdW5jdGlvbigpe2lmKEp0PmN0LmUucilyZXR1cm4gbWUucHVzaChudWxsKTtmb3IoO0p0PD1jdC5lLnI7KXt2YXIgQ249Qk8oUSxjdCxKdCxGdCxiZSxCZSxMdCx4dCk7aWYoKytKdCwhMT09PUNuLmlzZW1wdHl8fCgxPT09YmU/ITEhPT14dC5i''@;'; put 'put ''bGFua3Jvd3M6eHQuYmxhbmtyb3dzKSl7bWUucHVzaChDbi5yb3cpO2JyZWFrfX19LG1lfSx0b19odG1sOmZ1bmN0aW9uKFEsbGUpe3ZhciBtZT1TKCkscGU9bGV8fHt9LE5lPW51bGwhPXBlLmZvb3Rlcj9wZS5mb290ZXI6YTIuRU5EO21lLnB1c2gobnVsbCE9cGUuaGVhZGVyP3BlLmhlYWRl''@;'; put 'put ''cjphMi5CRUdJTik7dmFyIEJlPVZvKFFbIiFyZWYiXSk7cGUuZGVuc2U9QXJyYXkuaXNBcnJheShRKSxtZS5wdXNoKGEyLl9wcmVhbWJsZShRLEJlLHBlKSk7dmFyIEdlPUJlLnMucixldD0hMSxjdD1bXTtyZXR1cm4gbWUuX3JlYWQ9ZnVuY3Rpb24oKXtpZihHZT5CZS5lLnIpcmV0dXJuIGV0''@;'; put 'put ''fHwoZXQ9ITAsbWUucHVzaCgiPC90YWJsZT4iK05lKSksbWUucHVzaChudWxsKTtmb3IoO0dlPD1CZS5lLnI7KXttZS5wdXNoKGEyLl9yb3coUSxCZSxHZSxwZSxjdCwiIikpLCsrR2U7YnJlYWt9fSxtZX0sdG9fY3N2OmZ1bmN0aW9uKFEsbGUpe3ZhciBtZT1TKCkscGU9bGU/P3t9O2lmKG51''@;'; put 'put ''bGw9PVF8fG51bGw9PVFbIiFyZWYiXSlyZXR1cm4gbWUucHVzaChudWxsKSxtZTt2YXIgYmU9dG8oUVsiIXJlZiJdKSxOZT12b2lkIDAhPT1wZS5GUz9wZS5GUzoiLCIsQmU9TmUuY2hhckNvZGVBdCgwKSxHZT12b2lkIDAhPT1wZS5SUz9wZS5SUzoiXG4iLGV0PUdlLmNoYXJDb2RlQXQoMCks''@;'; put 'put ''Y3Q9bmV3IFJlZ0V4cCgoInwiPT1OZT8iXFx8IjpOZSkrIiskIikseHQ9IiIsb3Q9W107cGUuZGVuc2U9QXJyYXkuaXNBcnJheShRKTtmb3IodmFyIGJ0PXBlLnNraXBIaWRkZW4mJlFbIiFjb2xzIl18fFtdLEZ0PXBlLnNraXBIaWRkZW4mJlFbIiFyb3dzIl18fFtdLGt0PWJlLnMuYztrdDw9''@;'; put 'put ''YmUuZS5jOysra3QpKGJ0W2t0XXx8e30pLmhpZGRlbnx8KG90W2t0XT1GbyhrdCkpO3ZhciBMdD1iZS5zLnIsSnQ9ITE7cmV0dXJuIG1lLl9yZWFkPWZ1bmN0aW9uKCl7aWYoIUp0KXJldHVybiBKdD0hMCxtZS5wdXNoKCJcdWZlZmYiKTtmb3IoO0x0PD1iZS5lLnI7KWlmKCsrTHQsIShGdFtM''@;'; put 'put ''dC0xXXx8e30pLmhpZGRlbiYmbnVsbCE9KHh0PWZFKFEsYmUsTHQtMSxvdCxCZSxldCxOZSxwZSkpKXtwZS5zdHJpcCYmKHh0PXh0LnJlcGxhY2UoY3QsIiIpKSxtZS5wdXNoKHh0K0dlKTticmVha31yZXR1cm4gTHQ+YmUuZS5yP21lLnB1c2gobnVsbCk6dm9pZCAwfSxtZX19fSgpLHcucGFy''@;'; put 'put ''c2VfeGxzY2ZiPWU0LHcucGFyc2VfemlwPU9PLHcucmVhZD1tZix3LnJlYWRGaWxlPWNfLHcucmVhZEZpbGVTeW5jPWNfLHcud3JpdGU9dV8sdy53cml0ZUZpbGU9Vk8sdy53cml0ZUZpbGVTeW5jPVZPLHcud3JpdGVGaWxlQXN5bmM9ZnVuY3Rpb24gaFkoUyxMLGssRyl7dmFyIFE9a3x8e307''@;'; put 'put ''US50eXBlPSJmaWxlIixRLmZpbGU9UyxOTyhRKSxRLnR5cGU9ImJ1ZmZlciI7dmFyIGxlPUc7cmV0dXJuIGxlIGluc3RhbmNlb2YgRnVuY3Rpb258fChsZT1rKSxLZS53cml0ZUZpbGUoUyx1XyhMLFEpLGxlKX0sdy5zZXRfZGF0ZV9zdHlsZT1mdW5jdGlvbiBlbihTKXtzd2l0Y2goUyl7Y2Fz''@;'; put 'put ''ZSAwOnZ0KCk7YnJlYWs7Y2FzZSAxOiFmdW5jdGlvbiBTdCgpe3ZhciBTPW5ldyBEYXRlO3J0PV90LmdldFRpbWUoKSs2ZTQqKFMuZ2V0VGltZXpvbmVPZmZzZXQoKS1fdC5nZXRUaW1lem9uZU9mZnNldCgpKTt2YXIgTD1TLmdldFRpbWV6b25lT2Zmc2V0KCk7UWU9ZnVuY3Rpb24oRyxRKXt2''@;'; put 'put ''YXIgbGU9Ry5nZXRUaW1lKCk7cmV0dXJuIFEmJihsZS09MTI2MzE2OGU1KSwobGUtKF90LmdldFRpbWUoKSs2ZTQqKEcuZ2V0VGltZXpvbmVPZmZzZXQoKS1fdC5nZXRUaW1lem9uZU9mZnNldCgpKSkpLzg2NGU1fSxzbj1mdW5jdGlvbihHKXt2YXIgUT1uZXcgRGF0ZTtyZXR1cm4gUS5zZXRU''@;'; put 'put ''aW1lKDI0KkcqNjAqNjAqMWUzK3J0KSxRLmdldFRpbWV6b25lT2Zmc2V0KCkhPT1MJiZRLnNldFRpbWUoUS5nZXRUaW1lKCkrNmU0KihRLmdldFRpbWV6b25lT2Zmc2V0KCktTCkpLFF9fSgpfX0sdy51dGlscz13MCx3LlNTRj1BLHR5cGVvZiB5ZTwidSImJih3LkNGQj15ZSl9KFgpfSw2MzYy''@;'; put 'put ''NzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQ2OTI2KSxfPWIoMTEwOCkscD1iKDc1NDI0KSxWPWIoMzY5MzIpO2NlLmV4cG9ydHM9ZnVuY3Rpb24odyxQKXsoIVB8fCJzdHJpbmciIT10eXBlb2YgdykmJl8odyk7dmFyIEY9Vih3KTtyZXR1cm4gcChfKHZvaWQgMCE9PUY/SShG''@;'; put 'put ''LHcpOncpKX19LDYzNzQ0OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKHcsUCxGLFIpe3ZhciB6PXtzOlsiXHhlN2VuZCBzYW5ceGVleWUiLCJceGU3ZW5kIHNhblx4ZWV5ZXlhbiJdLHNzOlt3KyIgc2FuXHhlZXllIix3KyIgc2FuXHhlZXll''@;'; put 'put ''eWFuIl0sbTpbImRlcVx4ZWVxZXllayIsImRlcVx4ZWVxZXlla1x4ZWEiXSxtbTpbdysiIGRlcVx4ZWVxZSIsdysiIGRlcVx4ZWVxZXlhbiJdLGg6WyJzYWV0ZWsiLCJzYWV0ZWtceGVhIl0saGg6W3crIiBzYWV0Iix3KyIgc2FldGFuIl0sZDpbInJvamVrIiwicm9qZWtceGVhIl0sZGQ6W3cr''@;'; put 'put ''IiByb2oiLHcrIiByb2phbiJdLHc6WyJoZWZ0ZXllayIsImhlZnRleWVrXHhlYSJdLHd3Olt3KyIgaGVmdGUiLHcrIiBoZWZ0ZXlhbiJdLE06WyJtZWhlayIsIm1laGVrXHhlYSJdLE1NOlt3KyIgbWVoIix3KyIgbWVoYW4iXSx5Olsic2FsZWsiLCJzYWxla1x4ZWEiXSx5eTpbdysiIHNhbCIs''@;'; put 'put ''dysiIHNhbGFuIl19O3JldHVybiBQP3pbRl1bMF06eltGXVsxXX1JLmRlZmluZUxvY2FsZSgia3Uta21yIix7bW9udGhzOiJSXHhlYWJlbmRhbl9TaWJhdF9BZGFyX05ceGVlc2FuX0d1bGFuX0hlelx4ZWVyYW5fVFx4ZWVybWVoX1RlYmF4X1x4Y2Vsb25fQ290bWVoX01pamRhcl9CZXJmYW5i''@;'; put 'put ''YXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IlJceGVhYl9TaWJfQWRhX05ceGVlc19HdWxfSGV6X1RceGVlcl9UZWJfXHhjZWxvX0NvdF9NaWpfQmVyIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Illla1x1MDE1ZmVtX0R1XHUwMTVmZW1fU1x4ZWFcdTAxNWZl''@;'; put 'put ''bV9ceGM3YXJcdTAxNWZlbV9QXHhlYW5jXHUwMTVmZW1fXHhjZW5fXHUwMTVlZW1ceGVlIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Illla19EdV9TXHhlYV9ceGM3YXJfUFx4ZWFuX1x4Y2VuX1x1MDE1ZWVtIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJZZV9EdV9TXHhlYV9ceGM3YV9Q''@;'; put 'put ''XHhlYV9ceGNlbl9cdTAxNWVlIi5zcGxpdCgiXyIpLG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzwxMj9GPyJibiI6IkJOIjpGPyJwbiI6IlBOIn0sbWVyaWRpZW1QYXJzZTovYm58Qk58cG58UE4vLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6''@;'; put 'put ''IkRELk1NLllZWVkiLExMOiJEbyBNTU1NW2FdIFlZWVlbYW5dIixMTEw6IkRvIE1NTU1bYV0gWVlZWVthbl0gSEg6bW0iLExMTEw6ImRkZGQsIERvIE1NTU1bYV0gWVlZWVthbl0gSEg6bW0iLGxsOiJEbyBNTU1bLl0gWVlZWVthbl0iLGxsbDoiRG8gTU1NWy5dIFlZWVlbYW5dIEhIOm1tIixs''@;'; put 'put ''bGxsOiJkZGRbLl0sIERvIE1NTVsuXSBZWVlZW2FuXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHhjZXJvIGRpIHNhZXRdIExUIFtkZV0iLG5leHREYXk6IltTaWJceGVhIGRpIHNhZXRdIExUIFtkZV0iLG5leHRXZWVrOiJkZGRkIFtkaSBzYWV0XSBMVCBbZGVdIixsYXN0RGF5OiJb''@;'; put 'put ''RHVoIGRpIHNhZXRdIExUIFtkZV0iLGxhc3RXZWVrOiJkZGRkW2EgYm9yXHhlZSBkaSBzYWV0XSBMVCBbZGVdIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkaSAlcyBkZSIscGFzdDoiYmVyXHhlZSAlcyIsczpfLHNzOl8sbTpfLG1tOl8saDpfLGhoOl8sZDpfLGRkOl8s''@;'; put 'put ''dzpfLHd3Ol8sTTpfLE1NOl8seTpfLHl5Ol99LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oPzp5XHhlYXxceGVhfFwuKS8sb3JkaW5hbDpmdW5jdGlvbih3LFApe3ZhciBGPVAudG9Mb3dlckNhc2UoKTtyZXR1cm4gRi5pbmNsdWRlcygidyIpfHxGLmluY2x1ZGVzKCJtIik/dysi''@;'; put 'put ''LiI6dytmdW5jdGlvbiBwKHcpe3ZhciBQPSh3PSIiK3cpLnN1YnN0cmluZyh3Lmxlbmd0aC0xKSxGPXcubGVuZ3RoPjE/dy5zdWJzdHJpbmcody5sZW5ndGgtMik6IiI7cmV0dXJuIDEyPT1GfHwxMz09Rnx8IjIiIT1QJiYiMyIhPVAmJiI1MCIhPUYmJiI3MCIhPVAmJiI4MCIhPVA/Ilx4ZWEi''@;'; put 'put ''OiJ5XHhlYSJ9KHcpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw2Mzc3OTooKT0+e30sNjM5NTE6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig1ODYwNyksXz0wLHA9TWF0aC5yYW5kb20oKSxWPUkoMS4xLnRvU3RyaW5nKTtjZS5leHBvcnRzPWZ1bmN0aW9uKHcp''@;'; put 'put ''e3JldHVybiJTeW1ib2woIisodm9pZCAwPT09dz8iIjp3KSsiKV8iK1YoKytfK3AsMzYpfX0sNjQxNjY6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigzOTIxMCksXz1iKDcxOTkzKSxwPWIoODU2NzEpLFY9YigxMDIxOSk7ZnVuY3Rpb24gdygpe3RoaXMudG1wPW5ldyBBcnJheSgy''@;'; put 'put ''KSx0aGlzLmtleXM9bnVsbH1mdW5jdGlvbiBQKFIpe1YuY2FsbCh0aGlzLFIpO3ZhciB6PW5ldyB3O3RoaXMuX2Rlc1N0YXRlPXosdGhpcy5kZXJpdmVLZXlzKHosUi5rZXkpfV8oUCxWKSxjZS5leHBvcnRzPVAsUC5jcmVhdGU9ZnVuY3Rpb24oeil7cmV0dXJuIG5ldyBQKHopfTt2YXIgRj1b''@;'; put 'put ''MSwxLDIsMiwyLDIsMiwyLDEsMiwyLDIsMiwyLDIsMV07UC5wcm90b3R5cGUuZGVyaXZlS2V5cz1mdW5jdGlvbih6LE4pe3oua2V5cz1uZXcgQXJyYXkoMzIpLEkuZXF1YWwoTi5sZW5ndGgsdGhpcy5ibG9ja1NpemUsIkludmFsaWQga2V5IGxlbmd0aCIpO3ZhciBPPXAucmVhZFVJbnQzMkJF''@;'; put 'put ''KE4sMCksSz1wLnJlYWRVSW50MzJCRShOLDQpO3AucGMxKE8sSyx6LnRtcCwwKSxPPXoudG1wWzBdLEs9ei50bXBbMV07Zm9yKHZhciBaPTA7Wjx6LmtleXMubGVuZ3RoO1orPTIpe3ZhciBZPUZbWj4+PjFdO089cC5yMjhzaGwoTyxZKSxLPXAucjI4c2hsKEssWSkscC5wYzIoTyxLLHoua2V5''@;'; put 'put ''cyxaKX19LFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oeixOLE8sSyl7dmFyIFo9dGhpcy5fZGVzU3RhdGUsWT1wLnJlYWRVSW50MzJCRSh6LE4pLFc9cC5yZWFkVUludDMyQkUoeixOKzQpO3AuaXAoWSxXLFoudG1wLDApLFk9Wi50bXBbMF0sVz1aLnRtcFsxXSwiZW5jcnlwdCI9PT10''@;'; put 'put ''aGlzLnR5cGU/dGhpcy5fZW5jcnlwdChaLFksVyxaLnRtcCwwKTp0aGlzLl9kZWNyeXB0KFosWSxXLFoudG1wLDApLFc9Wi50bXBbMV0scC53cml0ZVVJbnQzMkJFKE8sWT1aLnRtcFswXSxLKSxwLndyaXRlVUludDMyQkUoTyxXLEsrNCl9LFAucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24oeixO''@;'; put 'put ''KXtpZighMT09PXRoaXMucGFkZGluZylyZXR1cm4hMTtmb3IodmFyIE89ei5sZW5ndGgtTixLPU47Szx6Lmxlbmd0aDtLKyspeltLXT1PO3JldHVybiEwfSxQLnByb3RvdHlwZS5fdW5wYWQ9ZnVuY3Rpb24oeil7aWYoITE9PT10aGlzLnBhZGRpbmcpcmV0dXJuIHo7Zm9yKHZhciBOPXpbei5s''@;'; put 'put ''ZW5ndGgtMV0sTz16Lmxlbmd0aC1OO088ei5sZW5ndGg7TysrKUkuZXF1YWwoeltPXSxOKTtyZXR1cm4gei5zbGljZSgwLHoubGVuZ3RoLU4pfSxQLnByb3RvdHlwZS5fZW5jcnlwdD1mdW5jdGlvbih6LE4sTyxLLFope2Zvcih2YXIgWT1OLFc9TyxxPTA7cTx6LmtleXMubGVuZ3RoO3ErPTIp''@;'; put 'put ''e3ZhciBlZT16LmtleXNbcV0sSj16LmtleXNbcSsxXTtwLmV4cGFuZChXLHoudG1wLDApO3ZhciByZT1wLnN1YnN0aXR1dGUoZWVePXoudG1wWzBdLEpePXoudG1wWzFdKSx1ZT1XO1c9KFlecC5wZXJtdXRlKHJlKSk+Pj4wLFk9dWV9cC5yaXAoVyxZLEssWil9LFAucHJvdG90eXBlLl9kZWNy''@;'; put 'put ''eXB0PWZ1bmN0aW9uKHosTixPLEssWil7Zm9yKHZhciBZPU8sVz1OLHE9ei5rZXlzLmxlbmd0aC0yO3E+PTA7cS09Mil7dmFyIGVlPXoua2V5c1txXSxKPXoua2V5c1txKzFdO3AuZXhwYW5kKFksei50bXAsMCk7dmFyIHJlPXAuc3Vic3RpdHV0ZShlZV49ei50bXBbMF0sSl49ei50bXBbMV0p''@;'; put 'put ''LHVlPVk7WT0oV15wLnBlcm11dGUocmUpKT4+PjAsVz11ZX1wLnJpcChZLFcsSyxaKX19LDY0MzE4OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKERlLF90LHJ0KXtyZXR1cm4gX3Q8PURlJiZEZTw9cnR9Y2UuZXhwb3J0cyYmIUlbImVuY29k''@;'; put 'put ''aW5nLWluZGV4ZXMiXSYmKElbImVuY29kaW5nLWluZGV4ZXMiXT1iKDY3OTUxKVsiZW5jb2RpbmctaW5kZXhlcyJdKTt2YXIgVj1NYXRoLmZsb29yO2Z1bmN0aW9uIHcoRGUpe2lmKHZvaWQgMD09PURlKXJldHVybnt9O2lmKERlPT09T2JqZWN0KERlKSlyZXR1cm4gRGU7dGhyb3cgVHlwZUVy''@;'; put 'put ''cm9yKCJDb3VsZCBub3QgY29udmVydCBhcmd1bWVudCB0byBkaWN0aW9uYXJ5Iil9ZnVuY3Rpb24gUihEZSl7cmV0dXJuIDA8PURlJiZEZTw9MTI3fXZhciB6PVIsTj0tMTtmdW5jdGlvbiBPKERlKXt0aGlzLnRva2Vucz1bXS5zbGljZS5jYWxsKERlKSx0aGlzLnRva2Vucy5yZXZlcnNlKCl9''@;'; put 'put ''Ty5wcm90b3R5cGU9e2VuZE9mU3RyZWFtOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMudG9rZW5zLmxlbmd0aH0scmVhZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRva2Vucy5sZW5ndGg/dGhpcy50b2tlbnMucG9wKCk6Tn0scHJlcGVuZDpmdW5jdGlvbihEZSl7aWYoQXJyYXkuaXNBcnJheShE''@;'; put 'put ''ZSkpZm9yKHZhciBfdD1EZTtfdC5sZW5ndGg7KXRoaXMudG9rZW5zLnB1c2goX3QucG9wKCkpO2Vsc2UgdGhpcy50b2tlbnMucHVzaChEZSl9LHB1c2g6ZnVuY3Rpb24oRGUpe2lmKEFycmF5LmlzQXJyYXkoRGUpKWZvcih2YXIgX3Q9RGU7X3QubGVuZ3RoOyl0aGlzLnRva2Vucy51bnNoaWZ0''@;'; put 'put ''KF90LnNoaWZ0KCkpO2Vsc2UgdGhpcy50b2tlbnMudW5zaGlmdChEZSl9fTt2YXIgSz0tMTtmdW5jdGlvbiBaKERlLF90KXtpZihEZSl0aHJvdyBUeXBlRXJyb3IoIkRlY29kZXIgZXJyb3IiKTtyZXR1cm4gX3R8fDY1NTMzfWZ1bmN0aW9uIFkoRGUpe3Rocm93IFR5cGVFcnJvcigiVGhlIGNv''@;'; put 'put ''ZGUgcG9pbnQgIitEZSsiIGNvdWxkIG5vdCBiZSBlbmNvZGVkLiIpfWZ1bmN0aW9uIGVlKERlKXtyZXR1cm4gRGU9U3RyaW5nKERlKS50cmltKCkudG9Mb3dlckNhc2UoKSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmUsRGUpP3JlW0RlXTpudWxsfXZhciBKPVt7ZW5j''@;'; put 'put ''b2RpbmdzOlt7bGFiZWxzOlsidW5pY29kZS0xLTEtdXRmLTgiLCJ1dGYtOCIsInV0ZjgiXSxuYW1lOiJVVEYtOCJ9XSxoZWFkaW5nOiJUaGUgRW5jb2RpbmcifSx7ZW5jb2RpbmdzOlt7bGFiZWxzOlsiODY2IiwiY3A4NjYiLCJjc2libTg2NiIsImlibTg2NiJdLG5hbWU6IklCTTg2NiJ9LHts''@;'; put 'put ''YWJlbHM6WyJjc2lzb2xhdGluMiIsImlzby04ODU5LTIiLCJpc28taXItMTAxIiwiaXNvODg1OS0yIiwiaXNvODg1OTIiLCJpc29fODg1OS0yIiwiaXNvXzg4NTktMjoxOTg3IiwibDIiLCJsYXRpbjIiXSxuYW1lOiJJU08tODg1OS0yIn0se2xhYmVsczpbImNzaXNvbGF0aW4zIiwiaXNvLTg4''@;'; put 'put ''NTktMyIsImlzby1pci0xMDkiLCJpc284ODU5LTMiLCJpc284ODU5MyIsImlzb184ODU5LTMiLCJpc29fODg1OS0zOjE5ODgiLCJsMyIsImxhdGluMyJdLG5hbWU6IklTTy04ODU5LTMifSx7bGFiZWxzOlsiY3Npc29sYXRpbjQiLCJpc28tODg1OS00IiwiaXNvLWlyLTExMCIsImlzbzg4NTkt''@;'; put 'put ''NCIsImlzbzg4NTk0IiwiaXNvXzg4NTktNCIsImlzb184ODU5LTQ6MTk4OCIsImw0IiwibGF0aW40Il0sbmFtZToiSVNPLTg4NTktNCJ9LHtsYWJlbHM6WyJjc2lzb2xhdGluY3lyaWxsaWMiLCJjeXJpbGxpYyIsImlzby04ODU5LTUiLCJpc28taXItMTQ0IiwiaXNvODg1OS01IiwiaXNvODg1''@;'; put 'put ''OTUiLCJpc29fODg1OS01IiwiaXNvXzg4NTktNToxOTg4Il0sbmFtZToiSVNPLTg4NTktNSJ9LHtsYWJlbHM6WyJhcmFiaWMiLCJhc21vLTcwOCIsImNzaXNvODg1OTZlIiwiY3Npc284ODU5NmkiLCJjc2lzb2xhdGluYXJhYmljIiwiZWNtYS0xMTQiLCJpc28tODg1OS02IiwiaXNvLTg4NTkt''@;'; put 'put ''Ni1lIiwiaXNvLTg4NTktNi1pIiwiaXNvLWlyLTEyNyIsImlzbzg4NTktNiIsImlzbzg4NTk2IiwiaXNvXzg4NTktNiIsImlzb184ODU5LTY6MTk4NyJdLG5hbWU6IklTTy04ODU5LTYifSx7bGFiZWxzOlsiY3Npc29sYXRpbmdyZWVrIiwiZWNtYS0xMTgiLCJlbG90XzkyOCIsImdyZWVrIiwi''@;'; put 'put ''Z3JlZWs4IiwiaXNvLTg4NTktNyIsImlzby1pci0xMjYiLCJpc284ODU5LTciLCJpc284ODU5NyIsImlzb184ODU5LTciLCJpc29fODg1OS03OjE5ODciLCJzdW5fZXVfZ3JlZWsiXSxuYW1lOiJJU08tODg1OS03In0se2xhYmVsczpbImNzaXNvODg1OThlIiwiY3Npc29sYXRpbmhlYnJldyIs''@;'; put 'put ''ImhlYnJldyIsImlzby04ODU5LTgiLCJpc28tODg1OS04LWUiLCJpc28taXItMTM4IiwiaXNvODg1OS04IiwiaXNvODg1OTgiLCJpc29fODg1OS04IiwiaXNvXzg4NTktODoxOTg4IiwidmlzdWFsIl0sbmFtZToiSVNPLTg4NTktOCJ9LHtsYWJlbHM6WyJjc2lzbzg4NTk4aSIsImlzby04ODU5''@;'; put 'put ''LTgtaSIsImxvZ2ljYWwiXSxuYW1lOiJJU08tODg1OS04LUkifSx7bGFiZWxzOlsiY3Npc29sYXRpbjYiLCJpc28tODg1OS0xMCIsImlzby1pci0xNTciLCJpc284ODU5LTEwIiwiaXNvODg1OTEwIiwibDYiLCJsYXRpbjYiXSxuYW1lOiJJU08tODg1OS0xMCJ9LHtsYWJlbHM6WyJpc28tODg1''@;'; put 'put ''OS0xMyIsImlzbzg4NTktMTMiLCJpc284ODU5MTMiXSxuYW1lOiJJU08tODg1OS0xMyJ9LHtsYWJlbHM6WyJpc28tODg1OS0xNCIsImlzbzg4NTktMTQiLCJpc284ODU5MTQiXSxuYW1lOiJJU08tODg1OS0xNCJ9LHtsYWJlbHM6WyJjc2lzb2xhdGluOSIsImlzby04ODU5LTE1IiwiaXNvODg1''@;'; put 'put ''OS0xNSIsImlzbzg4NTkxNSIsImlzb184ODU5LTE1IiwibDkiXSxuYW1lOiJJU08tODg1OS0xNSJ9LHtsYWJlbHM6WyJpc28tODg1OS0xNiJdLG5hbWU6IklTTy04ODU5LTE2In0se2xhYmVsczpbImNza29pOHIiLCJrb2kiLCJrb2k4Iiwia29pOC1yIiwia29pOF9yIl0sbmFtZToiS09JOC1S''@;'; put 'put ''In0se2xhYmVsczpbImtvaTgtcnUiLCJrb2k4LXUiXSxuYW1lOiJLT0k4LVUifSx7bGFiZWxzOlsiY3NtYWNpbnRvc2giLCJtYWMiLCJtYWNpbnRvc2giLCJ4LW1hYy1yb21hbiJdLG5hbWU6Im1hY2ludG9zaCJ9LHtsYWJlbHM6WyJkb3MtODc0IiwiaXNvLTg4NTktMTEiLCJpc284ODU5LTEx''@;'; put 'put ''IiwiaXNvODg1OTExIiwidGlzLTYyMCIsIndpbmRvd3MtODc0Il0sbmFtZToid2luZG93cy04NzQifSx7bGFiZWxzOlsiY3AxMjUwIiwid2luZG93cy0xMjUwIiwieC1jcDEyNTAiXSxuYW1lOiJ3aW5kb3dzLTEyNTAifSx7bGFiZWxzOlsiY3AxMjUxIiwid2luZG93cy0xMjUxIiwieC1jcDEy''@;'; put 'put ''NTEiXSxuYW1lOiJ3aW5kb3dzLTEyNTEifSx7bGFiZWxzOlsiYW5zaV94My40LTE5NjgiLCJhc2NpaSIsImNwMTI1MiIsImNwODE5IiwiY3Npc29sYXRpbjEiLCJpYm04MTkiLCJpc28tODg1OS0xIiwiaXNvLWlyLTEwMCIsImlzbzg4NTktMSIsImlzbzg4NTkxIiwiaXNvXzg4NTktMSIsImlz''@;'; put 'put ''b184ODU5LTE6MTk4NyIsImwxIiwibGF0aW4xIiwidXMtYXNjaWkiLCJ3aW5kb3dzLTEyNTIiLCJ4LWNwMTI1MiJdLG5hbWU6IndpbmRvd3MtMTI1MiJ9LHtsYWJlbHM6WyJjcDEyNTMiLCJ3aW5kb3dzLTEyNTMiLCJ4LWNwMTI1MyJdLG5hbWU6IndpbmRvd3MtMTI1MyJ9LHtsYWJlbHM6WyJj''@;'; put 'put ''cDEyNTQiLCJjc2lzb2xhdGluNSIsImlzby04ODU5LTkiLCJpc28taXItMTQ4IiwiaXNvODg1OS05IiwiaXNvODg1OTkiLCJpc29fODg1OS05IiwiaXNvXzg4NTktOToxOTg5IiwibDUiLCJsYXRpbjUiLCJ3aW5kb3dzLTEyNTQiLCJ4LWNwMTI1NCJdLG5hbWU6IndpbmRvd3MtMTI1NCJ9LHts''@;'; put 'put ''YWJlbHM6WyJjcDEyNTUiLCJ3aW5kb3dzLTEyNTUiLCJ4LWNwMTI1NSJdLG5hbWU6IndpbmRvd3MtMTI1NSJ9LHtsYWJlbHM6WyJjcDEyNTYiLCJ3aW5kb3dzLTEyNTYiLCJ4LWNwMTI1NiJdLG5hbWU6IndpbmRvd3MtMTI1NiJ9LHtsYWJlbHM6WyJjcDEyNTciLCJ3aW5kb3dzLTEyNTciLCJ4''@;'; put 'put ''LWNwMTI1NyJdLG5hbWU6IndpbmRvd3MtMTI1NyJ9LHtsYWJlbHM6WyJjcDEyNTgiLCJ3aW5kb3dzLTEyNTgiLCJ4LWNwMTI1OCJdLG5hbWU6IndpbmRvd3MtMTI1OCJ9LHtsYWJlbHM6WyJ4LW1hYy1jeXJpbGxpYyIsIngtbWFjLXVrcmFpbmlhbiJdLG5hbWU6IngtbWFjLWN5cmlsbGljIn1d''@;'; put 'put ''LGhlYWRpbmc6IkxlZ2FjeSBzaW5nbGUtYnl0ZSBlbmNvZGluZ3MifSx7ZW5jb2RpbmdzOlt7bGFiZWxzOlsiY2hpbmVzZSIsImNzZ2IyMzEyIiwiY3Npc281OGdiMjMxMjgwIiwiZ2IyMzEyIiwiZ2JfMjMxMiIsImdiXzIzMTItODAiLCJnYmsiLCJpc28taXItNTgiLCJ4LWdiayJdLG5hbWU6''@;'; put 'put ''IkdCSyJ9LHtsYWJlbHM6WyJnYjE4MDMwIl0sbmFtZToiZ2IxODAzMCJ9XSxoZWFkaW5nOiJMZWdhY3kgbXVsdGktYnl0ZSBDaGluZXNlIChzaW1wbGlmaWVkKSBlbmNvZGluZ3MifSx7ZW5jb2RpbmdzOlt7bGFiZWxzOlsiYmlnNSIsImJpZzUtaGtzY3MiLCJjbi1iaWc1IiwiY3NiaWc1Iiwi''@;'; put 'put ''eC14LWJpZzUiXSxuYW1lOiJCaWc1In1dLGhlYWRpbmc6IkxlZ2FjeSBtdWx0aS1ieXRlIENoaW5lc2UgKHRyYWRpdGlvbmFsKSBlbmNvZGluZ3MifSx7ZW5jb2RpbmdzOlt7bGFiZWxzOlsiY3NldWNwa2RmbXRqYXBhbmVzZSIsImV1Yy1qcCIsIngtZXVjLWpwIl0sbmFtZToiRVVDLUpQIn0s''@;'; put 'put ''e2xhYmVsczpbImNzaXNvMjAyMmpwIiwiaXNvLTIwMjItanAiXSxuYW1lOiJJU08tMjAyMi1KUCJ9LHtsYWJlbHM6WyJjc3NoaWZ0amlzIiwibXM5MzIiLCJtc19rYW5qaSIsInNoaWZ0LWppcyIsInNoaWZ0X2ppcyIsInNqaXMiLCJ3aW5kb3dzLTMxaiIsIngtc2ppcyJdLG5hbWU6IlNoaWZ0''@;'; put 'put ''X0pJUyJ9XSxoZWFkaW5nOiJMZWdhY3kgbXVsdGktYnl0ZSBKYXBhbmVzZSBlbmNvZGluZ3MifSx7ZW5jb2RpbmdzOlt7bGFiZWxzOlsiY3NldWNrciIsImNza3NjNTYwMTE5ODciLCJldWMta3IiLCJpc28taXItMTQ5Iiwia29yZWFuIiwia3NfY181NjAxLTE5ODciLCJrc19jXzU2MDEtMTk4''@;'; put 'put ''OSIsImtzYzU2MDEiLCJrc2NfNTYwMSIsIndpbmRvd3MtOTQ5Il0sbmFtZToiRVVDLUtSIn1dLGhlYWRpbmc6IkxlZ2FjeSBtdWx0aS1ieXRlIEtvcmVhbiBlbmNvZGluZ3MifSx7ZW5jb2RpbmdzOlt7bGFiZWxzOlsiY3Npc28yMDIya3IiLCJoei1nYi0yMzEyIiwiaXNvLTIwMjItY24iLCJp''@;'; put 'put ''c28tMjAyMi1jbi1leHQiLCJpc28tMjAyMi1rciJdLG5hbWU6InJlcGxhY2VtZW50In0se2xhYmVsczpbInV0Zi0xNmJlIl0sbmFtZToiVVRGLTE2QkUifSx7bGFiZWxzOlsidXRmLTE2IiwidXRmLTE2bGUiXSxuYW1lOiJVVEYtMTZMRSJ9LHtsYWJlbHM6WyJ4LXVzZXItZGVmaW5lZCJdLG5h''@;'; put 'put ''bWU6IngtdXNlci1kZWZpbmVkIn1dLGhlYWRpbmc6IkxlZ2FjeSBtaXNjZWxsYW5lb3VzIGVuY29kaW5ncyJ9XSxyZT17fTtKLmZvckVhY2goZnVuY3Rpb24oRGUpe0RlLmVuY29kaW5ncy5mb3JFYWNoKGZ1bmN0aW9uKF90KXtfdC5sYWJlbHMuZm9yRWFjaChmdW5jdGlvbihydCl7cmVbcnRd''@;'; put 'put ''PV90fSl9KX0pO3ZhciBnLGllPXt9LHVlPXt9O2Z1bmN0aW9uIGdlKERlLF90KXtyZXR1cm4gX3QmJl90W0RlXXx8bnVsbH1mdW5jdGlvbiBfZShEZSxfdCl7dmFyIHJ0PV90LmluZGV4T2YoRGUpO3JldHVybi0xPT09cnQ/bnVsbDpydH1mdW5jdGlvbiBUZShEZSl7aWYoISgiZW5jb2Rpbmct''@;'; put 'put ''aW5kZXhlcyJpbiBJKSl0aHJvdyBFcnJvcigiSW5kZXhlcyBtaXNzaW5nLiBEaWQgeW91IGZvcmdldCB0byBpbmNsdWRlIGVuY29kaW5nLWluZGV4ZXMuanMgZmlyc3Q/Iik7cmV0dXJuIElbImVuY29kaW5nLWluZGV4ZXMiXVtEZV19dmFyIHgsQz0idXRmLTgiO2Z1bmN0aW9uIFQoRGUsX3Qp''@;'; put 'put ''e2lmKCEodGhpcyBpbnN0YW5jZW9mIFQpKXRocm93IFR5cGVFcnJvcigiQ2FsbGVkIGFzIGEgZnVuY3Rpb24uIERpZCB5b3UgZm9yZ2V0ICduZXcnPyIpO0RlPXZvaWQgMCE9PURlP1N0cmluZyhEZSk6QyxfdD13KF90KSx0aGlzLl9lbmNvZGluZz1udWxsLHRoaXMuX2RlY29kZXI9bnVsbCx0''@;'; put 'put ''aGlzLl9pZ25vcmVCT009ITEsdGhpcy5fQk9Nc2Vlbj0hMSx0aGlzLl9lcnJvcl9tb2RlPSJyZXBsYWNlbWVudCIsdGhpcy5fZG9fbm90X2ZsdXNoPSExO3ZhciBydD1lZShEZSk7aWYobnVsbD09PXJ0fHwicmVwbGFjZW1lbnQiPT09cnQubmFtZSl0aHJvdyBSYW5nZUVycm9yKCJVbmtub3du''@;'; put 'put ''IGVuY29kaW5nOiAiK0RlKTtpZighdWVbcnQubmFtZV0pdGhyb3cgRXJyb3IoIkRlY29kZXIgbm90IHByZXNlbnQuIERpZCB5b3UgZm9yZ2V0IHRvIGluY2x1ZGUgZW5jb2RpbmctaW5kZXhlcy5qcyBmaXJzdD8iKTt2YXIgUWU9dGhpcztyZXR1cm4gUWUuX2VuY29kaW5nPXJ0LF90LmZhdGFs''@;'; put 'put ''JiYoUWUuX2Vycm9yX21vZGU9ImZhdGFsIiksX3QuaWdub3JlQk9NJiYoUWUuX2lnbm9yZUJPTT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5fHwodGhpcy5lbmNvZGluZz1RZS5fZW5jb2RpbmcubmFtZS50b0xvd2VyQ2FzZSgpLHRoaXMuZmF0YWw9ImZhdGFsIj09PVFlLl9lcnJvcl9tb2Rl''@;'; put 'put ''LHRoaXMuaWdub3JlQk9NPVFlLl9pZ25vcmVCT00pLFFlfWZ1bmN0aW9uIEgoRGUsX3Qpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEgpKXRocm93IFR5cGVFcnJvcigiQ2FsbGVkIGFzIGEgZnVuY3Rpb24uIERpZCB5b3UgZm9yZ2V0ICduZXcnPyIpO2lmKF90PXcoX3QpLHRoaXMuX2VuY29kaW5n''@;'; put 'put ''PW51bGwsdGhpcy5fZW5jb2Rlcj1udWxsLHRoaXMuX2RvX25vdF9mbHVzaD0hMSx0aGlzLl9mYXRhbD1fdC5mYXRhbD8iZmF0YWwiOiJyZXBsYWNlbWVudCIsX3QuTk9OU1RBTkRBUkRfYWxsb3dMZWdhY3lFbmNvZGluZyl7dmFyIFFlPWVlKERlPXZvaWQgMCE9PURlP1N0cmluZyhEZSk6Qyk7''@;'; put 'put ''aWYobnVsbD09PVFlfHwicmVwbGFjZW1lbnQiPT09UWUubmFtZSl0aHJvdyBSYW5nZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK0RlKTtpZighaWVbUWUubmFtZV0pdGhyb3cgRXJyb3IoIkVuY29kZXIgbm90IHByZXNlbnQuIERpZCB5b3UgZm9yZ2V0IHRvIGluY2x1ZGUgZW5jb2Rpbmct''@;'; put 'put ''aW5kZXhlcy5qcyBmaXJzdD8iKTt0aGlzLl9lbmNvZGluZz1RZX1lbHNlIHRoaXMuX2VuY29kaW5nPWVlKCJ1dGYtOCIpLHZvaWQgMCE9PURlJiYiY29uc29sZSJpbiBJJiZjb25zb2xlLndhcm4oIlRleHRFbmNvZGVyIGNvbnN0cnVjdG9yIGNhbGxlZCB3aXRoIGVuY29kaW5nIGxhYmVsLCB3''@;'; put 'put ''aGljaCBpcyBpZ25vcmVkLiIpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHl8fCh0aGlzLmVuY29kaW5nPXRoaXMuX2VuY29kaW5nLm5hbWUudG9Mb3dlckNhc2UoKSksdGhpc31mdW5jdGlvbiBqKERlKXt2YXIgX3Q9RGUuZmF0YWwscnQ9MCxRZT0wLHNuPTAsdnQ9MTI4LFN0PTE5MTt0''@;'; put 'put ''aGlzLmhhbmRsZXI9ZnVuY3Rpb24oZW4sdXQpe2lmKHV0PT09TiYmMCE9PXNuKXJldHVybiBzbj0wLFooX3QpO2lmKHV0PT09TilyZXR1cm4gSztpZigwPT09c24pe2lmKF8odXQsMCwxMjcpKXJldHVybiB1dDtpZihfKHV0LDE5NCwyMjMpKXNuPTEscnQ9MzEmdXQ7ZWxzZSBpZihfKHV0LDIy''@;'; put 'put ''NCwyMzkpKTIyND09PXV0JiYodnQ9MTYwKSwyMzc9PT11dCYmKFN0PTE1OSksc249MixydD0xNSZ1dDtlbHNle2lmKCFfKHV0LDI0MCwyNDQpKXJldHVybiBaKF90KTsyNDA9PT11dCYmKHZ0PTE0NCksMjQ0PT09dXQmJihTdD0xNDMpLHNuPTMscnQ9NyZ1dH1yZXR1cm4gbnVsbH1pZighXyh1''@;'; put 'put ''dCx2dCxTdCkpcmV0dXJuIHJ0PXNuPVFlPTAsdnQ9MTI4LFN0PTE5MSxlbi5wcmVwZW5kKHV0KSxaKF90KTtpZih2dD0xMjgsU3Q9MTkxLHJ0PXJ0PDw2fDYzJnV0LChRZSs9MSkhPT1zbilyZXR1cm4gbnVsbDt2YXIgWGU9cnQ7cmV0dXJuIHJ0PXNuPVFlPTAsWGV9fWZ1bmN0aW9uIEUoRGUp''@;'; put 'put ''e3RoaXMuaGFuZGxlcj1mdW5jdGlvbihydCxRZSl7aWYoUWU9PT1OKXJldHVybiBLO2lmKHooUWUpKXJldHVybiBRZTt2YXIgc24sdnQ7XyhRZSwxMjgsMjA0Nyk/KHNuPTEsdnQ9MTkyKTpfKFFlLDIwNDgsNjU1MzUpPyhzbj0yLHZ0PTIyNCk6XyhRZSw2NTUzNiwxMTE0MTExKSYmKHNuPTMs''@;'; put 'put ''dnQ9MjQwKTtmb3IodmFyIFN0PVsoUWU+PjYqc24pK3Z0XTtzbj4wOylTdC5wdXNoKDEyOHw2MyZRZT4+Niooc24tMSkpLHNuLT0xO3JldHVybiBTdH19ZnVuY3Rpb24gbShEZSxfdCl7dmFyIHJ0PV90LmZhdGFsO3RoaXMuaGFuZGxlcj1mdW5jdGlvbihRZSxzbil7aWYoc249PT1OKXJldHVy''@;'; put 'put ''biBLO2lmKFIoc24pKXJldHVybiBzbjt2YXIgdnQ9RGVbc24tMTI4XTtyZXR1cm4gbnVsbD09PXZ0P1oocnQpOnZ0fX1mdW5jdGlvbiBBKERlLF90KXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oUWUsc24pe2lmKHNuPT09TilyZXR1cm4gSztpZih6KHNuKSlyZXR1cm4gc247dmFyIHZ0PV9lKHNu''@;'; put 'put ''LERlKTtyZXR1cm4gbnVsbD09PXZ0JiZZKHNuKSx2dCsxMjh9fWZ1bmN0aW9uIGFlKERlKXt2YXIgX3Q9RGUuZmF0YWwscnQ9MCxRZT0wLHNuPTA7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKHZ0LFN0KXtpZihTdD09PU4mJjA9PT1ydCYmMD09PVFlJiYwPT09c24pcmV0dXJuIEs7dmFyIGVuO2lm''@;'; put 'put ''KFN0PT09TiYmKDAhPT1ydHx8MCE9PVFlfHwwIT09c24pJiYocnQ9MCxRZT0wLHNuPTAsWihfdCkpLDAhPT1zbil7ZW49bnVsbCxfKFN0LDQ4LDU3KSYmKGVuPWZ1bmN0aW9uIE1lKERlKXtpZihEZT4zOTQxOSYmRGU8MTg5ZTN8fERlPjEyMzc1NzUpcmV0dXJuIG51bGw7aWYoNzQ1Nz09PURl''@;'; put 'put ''KXJldHVybiA1OTMzNTt2YXIgc24sX3Q9MCxydD0wLFFlPVRlKCJnYjE4MDMwLXJhbmdlcyIpO2Zvcihzbj0wO3NuPFFlLmxlbmd0aDsrK3NuKXt2YXIgdnQ9UWVbc25dO2lmKCEodnRbMF08PURlKSlicmVhaztfdD12dFswXSxydD12dFsxXX1yZXR1cm4gcnQrRGUtX3R9KDEwKigxMjYqKDEw''@;'; put 'put ''KihydC0xMjkpK1FlLTQ4KStzbi0xMjkpK1N0LTQ4KSk7dmFyIHV0PVtRZSxzbixTdF07cmV0dXJuIHJ0PTAsUWU9MCxzbj0wLG51bGw9PT1lbj8odnQucHJlcGVuZCh1dCksWihfdCkpOmVufWlmKDAhPT1RZSlyZXR1cm4gXyhTdCwxMjksMjU0KT8oc249U3QsbnVsbCk6KHZ0LnByZXBlbmQo''@;'; put 'put ''W1FlLFN0XSkscnQ9MCxRZT0wLFooX3QpKTtpZigwIT09cnQpe2lmKF8oU3QsNDgsNTcpKXJldHVybiBRZT1TdCxudWxsO3ZhciBYZT1ydCx0dD1udWxsO3J0PTA7dmFyIEllPVN0PDEyNz82NDo2NTtyZXR1cm4oXyhTdCw2NCwxMjYpfHxfKFN0LDEyOCwyNTQpKSYmKHR0PTE5MCooWGUtMTI5''@;'; put 'put ''KSsoU3QtSWUpKSxudWxsPT09KGVuPW51bGw9PT10dD9udWxsOmdlKHR0LFRlKCJnYjE4MDMwIikpKSYmUihTdCkmJnZ0LnByZXBlbmQoU3QpLG51bGw9PT1lbj9aKF90KTplbn1yZXR1cm4gUihTdCk/U3Q6MTI4PT09U3Q/ODM2NDpfKFN0LDEyOSwyNTQpPyhydD1TdCxudWxsKTpaKF90KX19''@;'; put 'put ''ZnVuY3Rpb24gbmUoRGUsX3Qpe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihRZSxzbil7aWYoc249PT1OKXJldHVybiBLO2lmKHooc24pKXJldHVybiBzbjtpZig1ODg1Mz09PXNuKXJldHVybiBZKHNuKTtpZihfdCYmODM2ND09PXNuKXJldHVybiAxMjg7dmFyIHZ0PV9lKHNuLFRlKCJnYjE4MDMw''@;'; put 'put ''IikpO2lmKG51bGwhPT12dCl7dmFyIGVuPXZ0JTE5MDtyZXR1cm5bVih2dC8xOTApKzEyOSxlbisoZW48NjM/NjQ6NjUpXX1pZihfdClyZXR1cm4gWShzbik7dnQ9ZnVuY3Rpb24gWmUoRGUpe2lmKDU5MzM1PT09RGUpcmV0dXJuIDc0NTc7dmFyIHNuLF90PTAscnQ9MCxRZT1UZSgiZ2IxODAz''@;'; put 'put ''MC1yYW5nZXMiKTtmb3Ioc249MDtzbjxRZS5sZW5ndGg7Kytzbil7dmFyIHZ0PVFlW3NuXTtpZighKHZ0WzFdPD1EZSkpYnJlYWs7X3Q9dnRbMV0scnQ9dnRbMF19cmV0dXJuIHJ0K0RlLV90fShzbik7dmFyIFhlPVYodnQvMTAvMTI2LzEwKSx0dD1WKCh2dC09MTAqWGUqMTI2KjEwKS8xMC8x''@;'; put 'put ''MjYpLEllPVYoKHZ0LT0xMCp0dCoxMjYpLzEwKTtyZXR1cm5bWGUrMTI5LHR0KzQ4LEllKzEyOSx2dC0xMCpJZSs0OF19fWZ1bmN0aW9uIHNlKERlKXt2YXIgX3Q9RGUuZmF0YWwscnQ9MDt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oUWUsc24pe2lmKHNuPT09TiYmMCE9PXJ0KXJldHVybiBydD0w''@;'; put 'put ''LFooX3QpO2lmKHNuPT09TiYmMD09PXJ0KXJldHVybiBLO2lmKDAhPT1ydCl7dmFyIHZ0PXJ0LFN0PW51bGw7cnQ9MDt2YXIgZW49c248MTI3PzY0Ojk4O3N3aXRjaCgoXyhzbiw2NCwxMjYpfHxfKHNuLDE2MSwyNTQpKSYmKFN0PTE1NyoodnQtMTI5KSsoc24tZW4pKSxTdCl7Y2FzZSAxMTMz''@;'; put 'put ''OnJldHVyblsyMDIsNzcyXTtjYXNlIDExMzU6cmV0dXJuWzIwMiw3ODBdO2Nhc2UgMTE2NDpyZXR1cm5bMjM0LDc3Ml07Y2FzZSAxMTY2OnJldHVyblsyMzQsNzgwXX12YXIgdXQ9bnVsbD09PVN0P251bGw6Z2UoU3QsVGUoImJpZzUiKSk7cmV0dXJuIG51bGw9PT11dCYmUihzbikmJlFlLnBy''@;'; put 'put ''ZXBlbmQoc24pLG51bGw9PT11dD9aKF90KTp1dH1yZXR1cm4gUihzbik/c246XyhzbiwxMjksMjU0KT8ocnQ9c24sbnVsbCk6WihfdCl9fWZ1bmN0aW9uIENlKERlKXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24ocnQsUWUpe2lmKFFlPT09TilyZXR1cm4gSztpZih6KFFlKSlyZXR1cm4gUWU7dmFy''@;'; put 'put ''IHNuPWZ1bmN0aW9uIHkoRGUpe3ZhciBfdD14PXh8fFRlKCJiaWc1IikubWFwKGZ1bmN0aW9uKHJ0LFFlKXtyZXR1cm4gUWU8NTAyND9udWxsOnJ0fSk7cmV0dXJuIDk1NTI9PT1EZXx8OTU2Nj09PURlfHw5NTY5PT09RGV8fDk1Nzg9PT1EZXx8MjEzMTM9PT1EZXx8MjEzMTc9PT1EZT9fdC5s''@;'; put 'put ''YXN0SW5kZXhPZihEZSk6X2UoRGUsX3QpfShRZSk7aWYobnVsbD09PXNuKXJldHVybiBZKFFlKTt2YXIgdnQ9Vihzbi8xNTcpKzEyOTtpZih2dDwxNjEpcmV0dXJuIFkoUWUpO3ZhciBTdD1zbiUxNTc7cmV0dXJuW3Z0LFN0KyhTdDw2Mz82NDo5OCldfX1mdW5jdGlvbiBVZShEZSl7dmFyIF90''@;'; put 'put ''PURlLmZhdGFsLHJ0PSExLFFlPTA7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKHNuLHZ0KXtpZih2dD09PU4mJjAhPT1RZSlyZXR1cm4gUWU9MCxaKF90KTtpZih2dD09PU4mJjA9PT1RZSlyZXR1cm4gSztpZigxNDI9PT1RZSYmXyh2dCwxNjEsMjIzKSlyZXR1cm4gUWU9MCw2NTIxNit2dDtpZigx''@;'; put 'put ''NDM9PT1RZSYmXyh2dCwxNjEsMjU0KSlyZXR1cm4gcnQ9ITAsUWU9dnQsbnVsbDtpZigwIT09UWUpe3ZhciBTdD1RZTtRZT0wO3ZhciBlbj1udWxsO3JldHVybiBfKFN0LDE2MSwyNTQpJiZfKHZ0LDE2MSwyNTQpJiYoZW49Z2UoOTQqKFN0LTE2MSkrKHZ0LTE2MSksVGUocnQ/ImppczAyMTIi''@;'; put 'put ''OiJqaXMwMjA4IikpKSxydD0hMSxfKHZ0LDE2MSwyNTQpfHxzbi5wcmVwZW5kKHZ0KSxudWxsPT09ZW4/WihfdCk6ZW59cmV0dXJuIFIodnQpP3Z0OjE0Mj09PXZ0fHwxNDM9PT12dHx8Xyh2dCwxNjEsMjU0KT8oUWU9dnQsbnVsbCk6WihfdCl9fWZ1bmN0aW9uIEplKERlKXt0aGlzLmhhbmRs''@;'; put 'put ''ZXI9ZnVuY3Rpb24ocnQsUWUpe2lmKFFlPT09TilyZXR1cm4gSztpZih6KFFlKSlyZXR1cm4gUWU7aWYoMTY1PT09UWUpcmV0dXJuIDkyO2lmKDgyNTQ9PT1RZSlyZXR1cm4gMTI2O2lmKF8oUWUsNjUzNzcsNjU0MzkpKXJldHVyblsxNDIsUWUtNjUzNzcrMTYxXTs4NzIyPT09UWUmJihRZT02''@;'; put 'put ''NTI5Myk7dmFyIHNuPV9lKFFlLFRlKCJqaXMwMjA4IikpO3JldHVybiBudWxsPT09c24/WShRZSk6W1Yoc24vOTQpKzE2MSxzbiU5NCsxNjFdfX1mdW5jdGlvbiBpdChEZSl7dmFyIF90PURlLmZhdGFsLFFlPTAsdnQ9MCxTdD0hMTt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oZW4sdXQpe3N3aXRj''@;'; put 'put ''aChRZSl7ZGVmYXVsdDpjYXNlIDA6cmV0dXJuIDI3PT09dXQ/KFFlPTUsbnVsbCk6Xyh1dCwwLDEyNykmJjE0IT09dXQmJjE1IT09dXQmJjI3IT09dXQ/KFN0PSExLHV0KTp1dD09PU4/SzooU3Q9ITEsWihfdCkpO2Nhc2UgMTpyZXR1cm4gMjc9PT11dD8oUWU9NSxudWxsKTo5Mj09PXV0PyhT''@;'; put 'put ''dD0hMSwxNjUpOjEyNj09PXV0PyhTdD0hMSw4MjU0KTpfKHV0LDAsMTI3KSYmMTQhPT11dCYmMTUhPT11dCYmMjchPT11dCYmOTIhPT11dCYmMTI2IT09dXQ/KFN0PSExLHV0KTp1dD09PU4/SzooU3Q9ITEsWihfdCkpO2Nhc2UgMjpyZXR1cm4gMjc9PT11dD8oUWU9NSxudWxsKTpfKHV0LDMz''@;'; put 'put ''LDk1KT8oU3Q9ITEsNjUzNDQrdXQpOnV0PT09Tj9LOihTdD0hMSxaKF90KSk7Y2FzZSAzOnJldHVybiAyNz09PXV0PyhRZT01LG51bGwpOl8odXQsMzMsMTI2KT8oU3Q9ITEsdnQ9dXQsUWU9NCxudWxsKTp1dD09PU4/SzooU3Q9ITEsWihfdCkpO2Nhc2UgNDppZigyNz09PXV0KXJldHVybiBR''@;'; put 'put ''ZT01LFooX3QpO2lmKF8odXQsMzMsMTI2KSl7UWU9Mzt2YXIgdHQ9Z2UoOTQqKHZ0LTMzKSt1dC0zMyxUZSgiamlzMDIwOCIpKTtyZXR1cm4gbnVsbD09PXR0P1ooX3QpOnR0fXJldHVybiB1dD09PU4/KFFlPTMsZW4ucHJlcGVuZCh1dCksWihfdCkpOihRZT0zLFooX3QpKTtjYXNlIDU6cmV0''@;'; put 'put ''dXJuIDM2PT09dXR8fDQwPT09dXQ/KHZ0PXV0LFFlPTYsbnVsbCk6KGVuLnByZXBlbmQodXQpLFN0PSExLFFlPTAsWihfdCkpO2Nhc2UgNjp2YXIgSWU9dnQ7dnQ9MDt2YXIgYXQ9bnVsbDtpZig0MD09PUllJiY2Nj09PXV0JiYoYXQ9MCksNDA9PT1JZSYmNzQ9PT11dCYmKGF0PTEpLDQwPT09''@;'; put 'put ''SWUmJjczPT09dXQmJihhdD0yKSwzNj09PUllJiYoNjQ9PT11dHx8NjY9PT11dCkmJihhdD0zKSxudWxsIT09YXQpe1FlPVFlPWF0O3ZhciB1bj1TdDtyZXR1cm4gU3Q9ITAsdW4/WihfdCk6bnVsbH1yZXR1cm4gZW4ucHJlcGVuZChbSWUsdXRdKSxTdD0hMSxRZT0wLFooX3QpfX19ZnVuY3Rp''@;'; put 'put ''b24geGUoRGUpe3ZhciBRZT0wO3RoaXMuaGFuZGxlcj1mdW5jdGlvbihzbix2dCl7aWYodnQ9PT1OJiYwIT09UWUpcmV0dXJuIHNuLnByZXBlbmQodnQpLFFlPTAsWzI3LDQwLDY2XTtpZih2dD09PU4mJjA9PT1RZSlyZXR1cm4gSztpZighKDAhPT1RZSYmMSE9PVFlfHwxNCE9PXZ0JiYxNSE9''@;'; put 'put ''PXZ0JiYyNyE9PXZ0KSlyZXR1cm4gWSg2NTUzMyk7aWYoMD09PVFlJiZ6KHZ0KSlyZXR1cm4gdnQ7aWYoMT09PVFlJiYoeih2dCkmJjkyIT09dnQmJjEyNiE9PXZ0fHwxNjU9PXZ0fHw4MjU0PT12dCkpe2lmKHoodnQpKXJldHVybiB2dDtpZigxNjU9PT12dClyZXR1cm4gOTI7aWYoODI1ND09''@;'; put 'put ''PXZ0KXJldHVybiAxMjZ9aWYoeih2dCkmJjAhPT1RZSlyZXR1cm4gc24ucHJlcGVuZCh2dCksUWU9MCxbMjcsNDAsNjZdO2lmKCgxNjU9PT12dHx8ODI1ND09PXZ0KSYmMSE9PVFlKXJldHVybiBzbi5wcmVwZW5kKHZ0KSxRZT0xLFsyNyw0MCw3NF07ODcyMj09PXZ0JiYodnQ9NjUyOTMpO3Zh''@;'; put 'put ''ciBTdD1fZSh2dCxUZSgiamlzMDIwOCIpKTtyZXR1cm4gbnVsbD09PVN0P1kodnQpOjIhPT1RZT8oc24ucHJlcGVuZCh2dCksUWU9MixbMjcsMzYsNjZdKTpbVihTdC85NCkrMzMsU3QlOTQrMzNdfX1mdW5jdGlvbiB5ZShEZSl7dmFyIF90PURlLmZhdGFsLHJ0PTA7dGhpcy5oYW5kbGVyPWZ1''@;'; put 'put ''bmN0aW9uKFFlLHNuKXtpZihzbj09PU4mJjAhPT1ydClyZXR1cm4gcnQ9MCxaKF90KTtpZihzbj09PU4mJjA9PT1ydClyZXR1cm4gSztpZigwIT09cnQpe3ZhciB2dD1ydCxTdD1udWxsO3J0PTA7dmFyIGVuPXNuPDEyNz82NDo2NSx1dD12dDwxNjA/MTI5OjE5MztpZigoXyhzbiw2NCwxMjYp''@;'; put 'put ''fHxfKHNuLDEyOCwyNTIpKSYmKFN0PTE4OCoodnQtdXQpK3NuLWVuKSxfKFN0LDg4MzYsMTA3MTUpKXJldHVybiA0ODUwOCtTdDt2YXIgWGU9bnVsbD09PVN0P251bGw6Z2UoU3QsVGUoImppczAyMDgiKSk7cmV0dXJuIG51bGw9PT1YZSYmUihzbikmJlFlLnByZXBlbmQoc24pLG51bGw9PT1Y''@;'; put 'put ''ZT9aKF90KTpYZX1yZXR1cm4gUihzbil8fDEyOD09PXNuP3NuOl8oc24sMTYxLDIyMyk/NjUyMTYrc246XyhzbiwxMjksMTU5KXx8XyhzbiwyMjQsMjUyKT8ocnQ9c24sbnVsbCk6WihfdCl9fWZ1bmN0aW9uIEtlKERlKXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24ocnQsUWUpe2lmKFFlPT09Tily''@;'; put 'put ''ZXR1cm4gSztpZih6KFFlKXx8MTI4PT09UWUpcmV0dXJuIFFlO2lmKDE2NT09PVFlKXJldHVybiA5MjtpZig4MjU0PT09UWUpcmV0dXJuIDEyNjtpZihfKFFlLDY1Mzc3LDY1NDM5KSlyZXR1cm4gUWUtNjUzNzcrMTYxOzg3MjI9PT1RZSYmKFFlPTY1MjkzKTt2YXIgc249ZnVuY3Rpb24gQihE''@;'; put 'put ''ZSl7cmV0dXJuKGc9Z3x8VGUoImppczAyMDgiKS5tYXAoZnVuY3Rpb24ocnQsUWUpe3JldHVybiBfKFFlLDgyNzIsODgzNSk/bnVsbDpydH0pKS5pbmRleE9mKERlKX0oUWUpO2lmKG51bGw9PT1zbilyZXR1cm4gWShRZSk7dmFyIHZ0PVYoc24vMTg4KSxlbj1zbiUxODg7cmV0dXJuW3Z0Kyh2''@;'; put 'put ''dDwzMT8xMjk6MTkzKSxlbisoZW48NjM/NjQ6NjUpXX19ZnVuY3Rpb24gamUoRGUpe3ZhciBfdD1EZS5mYXRhbCxydD0wO3RoaXMuaGFuZGxlcj1mdW5jdGlvbihRZSxzbil7aWYoc249PT1OJiYwIT09cnQpcmV0dXJuIHJ0PTAsWihfdCk7aWYoc249PT1OJiYwPT09cnQpcmV0dXJuIEs7aWYo''@;'; put 'put ''MCE9PXJ0KXt2YXIgdnQ9cnQsU3Q9bnVsbDtydD0wLF8oc24sNjUsMjU0KSYmKFN0PTE5MCoodnQtMTI5KSsoc24tNjUpKTt2YXIgZW49bnVsbD09PVN0P251bGw6Z2UoU3QsVGUoImV1Yy1rciIpKTtyZXR1cm4gbnVsbD09PVN0JiZSKHNuKSYmUWUucHJlcGVuZChzbiksbnVsbD09PWVuP1oo''@;'; put 'put ''X3QpOmVufXJldHVybiBSKHNuKT9zbjpfKHNuLDEyOSwyNTQpPyhydD1zbixudWxsKTpaKF90KX19ZnVuY3Rpb24ga2UoRGUpe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihydCxRZSl7aWYoUWU9PT1OKXJldHVybiBLO2lmKHooUWUpKXJldHVybiBRZTt2YXIgc249X2UoUWUsVGUoImV1Yy1rciIp''@;'; put 'put ''KTtyZXR1cm4gbnVsbD09PXNuP1koUWUpOltWKHNuLzE5MCkrMTI5LHNuJTE5MCs2NV19fWZ1bmN0aW9uIEhlKERlLF90KXt2YXIgcnQ9RGU+PjgsUWU9MjU1JkRlO3JldHVybiBfdD9bcnQsUWVdOltRZSxydF19ZnVuY3Rpb24gTGUoRGUsX3Qpe3ZhciBydD1fdC5mYXRhbCxRZT1udWxsLHNu''@;'; put 'put ''PW51bGw7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKHZ0LFN0KXtpZihTdD09PU4mJihudWxsIT09UWV8fG51bGwhPT1zbikpcmV0dXJuIFoocnQpO2lmKFN0PT09TiYmbnVsbD09PVFlJiZudWxsPT09c24pcmV0dXJuIEs7aWYobnVsbD09PVFlKXJldHVybiBRZT1TdCxudWxsO3ZhciBlbjtpZihl''@;'; put 'put ''bj1EZT8oUWU8PDgpK1N0OihTdDw8OCkrUWUsUWU9bnVsbCxudWxsIT09c24pe3ZhciB1dD1zbjtyZXR1cm4gc249bnVsbCxfKGVuLDU2MzIwLDU3MzQzKT82NTUzNisxMDI0Kih1dC01NTI5NikrKGVuLTU2MzIwKToodnQucHJlcGVuZChIZShlbixEZSkpLFoocnQpKX1yZXR1cm4gXyhlbiw1''@;'; put 'put ''NTI5Niw1NjMxOSk/KHNuPWVuLG51bGwpOl8oZW4sNTYzMjAsNTczNDMpP1oocnQpOmVufX1mdW5jdGlvbiBSZShEZSxfdCl7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKFFlLHNuKXtpZihzbj09PU4pcmV0dXJuIEs7aWYoXyhzbiwwLDY1NTM1KSlyZXR1cm4gSGUoc24sRGUpO3ZhciB2dD1IZSg1''@;'; put 'put ''NTI5Nisoc24tNjU1MzY+PjEwKSxEZSksU3Q9SGUoNTYzMjArKHNuLTY1NTM2JjEwMjMpLERlKTtyZXR1cm4gdnQuY29uY2F0KFN0KX19ZnVuY3Rpb24gVmUoRGUpe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihydCxRZSl7cmV0dXJuIFFlPT09Tj9LOlIoUWUpP1FlOjYzMzYwK1FlLTEyOH19ZnVu''@;'; put 'put ''Y3Rpb24gQWUoRGUpe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihydCxRZSl7cmV0dXJuIFFlPT09Tj9LOnooUWUpP1FlOl8oUWUsNjMzNjAsNjM0ODcpP1FlLTYzMzYwKzEyODpZKFFlKX19T2JqZWN0LmRlZmluZVByb3BlcnR5JiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KFQucHJvdG90eXBlLCJl''@;'; put 'put ''bmNvZGluZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmNvZGluZy5uYW1lLnRvTG93ZXJDYXNlKCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFQucHJvdG90eXBlLCJmYXRhbCIse2dldDpmdW5jdGlvbigpe3JldHVybiJmYXRhbCI9PT10aGlzLl9lcnJvcl9tb2RlfX0pLE9i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShULnByb3RvdHlwZSwiaWdub3JlQk9NIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lnbm9yZUJPTX19KSksVC5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKF90LHJ0KXt2YXIgUWU7UWU9Im9iamVjdCI9PXR5cGVvZiBfdCYmX3QgaW5zdGFuY2Vv''@;'; put 'put ''ZiBBcnJheUJ1ZmZlcj9uZXcgVWludDhBcnJheShfdCk6Im9iamVjdCI9PXR5cGVvZiBfdCYmImJ1ZmZlciJpbiBfdCYmX3QuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/bmV3IFVpbnQ4QXJyYXkoX3QuYnVmZmVyLF90LmJ5dGVPZmZzZXQsX3QuYnl0ZUxlbmd0aCk6bmV3IFVpbnQ4''@;'; put 'put ''QXJyYXkoMCkscnQ9dyhydCksdGhpcy5fZG9fbm90X2ZsdXNofHwodGhpcy5fZGVjb2Rlcj11ZVt0aGlzLl9lbmNvZGluZy5uYW1lXSh7ZmF0YWw6ImZhdGFsIj09PXRoaXMuX2Vycm9yX21vZGV9KSx0aGlzLl9CT01zZWVuPSExKSx0aGlzLl9kb19ub3RfZmx1c2g9ISFydC5zdHJlYW07Zm9y''@;'; put 'put ''KHZhciBTdCxzbj1uZXcgTyhRZSksdnQ9W107Oyl7dmFyIGVuPXNuLnJlYWQoKTtpZihlbj09PU58fChTdD10aGlzLl9kZWNvZGVyLmhhbmRsZXIoc24sZW4pKT09PUspYnJlYWs7bnVsbCE9PVN0JiYoQXJyYXkuaXNBcnJheShTdCk/dnQucHVzaC5hcHBseSh2dCxTdCk6dnQucHVzaChTdCkp''@;'; put 'put ''fWlmKCF0aGlzLl9kb19ub3RfZmx1c2gpe2Rve2lmKChTdD10aGlzLl9kZWNvZGVyLmhhbmRsZXIoc24sc24ucmVhZCgpKSk9PT1LKWJyZWFrO251bGwhPT1TdCYmKEFycmF5LmlzQXJyYXkoU3QpP3Z0LnB1c2guYXBwbHkodnQsU3QpOnZ0LnB1c2goU3QpKX13aGlsZSghc24uZW5kT2ZTdHJl''@;'; put 'put ''YW0oKSk7dGhpcy5fZGVjb2Rlcj1udWxsfXJldHVybiBmdW5jdGlvbiB1dChYZSl7cmV0dXJuIGZ1bmN0aW9uIHAoRGUsX3Qpe3JldHVybi0xIT09RGUuaW5kZXhPZihfdCl9KFsiVVRGLTgiLCJVVEYtMTZMRSIsIlVURi0xNkJFIl0sdGhpcy5fZW5jb2RpbmcubmFtZSkmJiF0aGlzLl9pZ25v''@;'; put 'put ''cmVCT00mJiF0aGlzLl9CT01zZWVuJiYoWGUubGVuZ3RoPjAmJjY1Mjc5PT09WGVbMF0/KHRoaXMuX0JPTXNlZW49ITAsWGUuc2hpZnQoKSk6WGUubGVuZ3RoPjAmJih0aGlzLl9CT01zZWVuPSEwKSksZnVuY3Rpb24gRihEZSl7Zm9yKHZhciBfdD0iIixydD0wO3J0PERlLmxlbmd0aDsrK3J0''@;'; put 'put ''KXt2YXIgUWU9RGVbcnRdO1FlPD02NTUzNT9fdCs9U3RyaW5nLmZyb21DaGFyQ29kZShRZSk6KFFlLT02NTUzNixfdCs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NisoUWU+PjEwKSw1NjMyMCsoMTAyMyZRZSkpKX1yZXR1cm4gX3R9KFhlKX0uY2FsbCh0aGlzLHZ0KX0sT2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5JiZPYmplY3QuZGVmaW5lUHJvcGVydHkoSC5wcm90b3R5cGUsImVuY29kaW5nIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuY29kaW5nLm5hbWUudG9Mb3dlckNhc2UoKX19KSxILnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oX3QscnQpe190PXZvaWQgMD09PV90''@;'; put 'put ''PyIiOlN0cmluZyhfdCkscnQ9dyhydCksdGhpcy5fZG9fbm90X2ZsdXNofHwodGhpcy5fZW5jb2Rlcj1pZVt0aGlzLl9lbmNvZGluZy5uYW1lXSh7ZmF0YWw6ImZhdGFsIj09PXRoaXMuX2ZhdGFsfSkpLHRoaXMuX2RvX25vdF9mbHVzaD0hIXJ0LnN0cmVhbTtmb3IodmFyIHZ0LFFlPW5ldyBP''@;'; put 'put ''KGZ1bmN0aW9uIFAoRGUpe2Zvcih2YXIgX3Q9U3RyaW5nKERlKSxydD1fdC5sZW5ndGgsUWU9MCxzbj1bXTtRZTxydDspe3ZhciB2dD1fdC5jaGFyQ29kZUF0KFFlKTtpZih2dDw1NTI5Nnx8dnQ+NTczNDMpc24ucHVzaCh2dCk7ZWxzZSBpZig1NjMyMDw9dnQmJnZ0PD01NzM0Mylzbi5wdXNo''@;'; put 'put ''KDY1NTMzKTtlbHNlIGlmKDU1Mjk2PD12dCYmdnQ8PTU2MzE5KWlmKFFlPT09cnQtMSlzbi5wdXNoKDY1NTMzKTtlbHNle3ZhciBTdD1fdC5jaGFyQ29kZUF0KFFlKzEpOzU2MzIwPD1TdCYmU3Q8PTU3MzQzPyhzbi5wdXNoKDY1NTM2KygoMTAyMyZ2dCk8PDEwKSsoMTAyMyZTdCkpLFFlKz0x''@;'; put 'put ''KTpzbi5wdXNoKDY1NTMzKX1RZSs9MX1yZXR1cm4gc259KF90KSksc249W107Oyl7dmFyIFN0PVFlLnJlYWQoKTtpZihTdD09PU58fCh2dD10aGlzLl9lbmNvZGVyLmhhbmRsZXIoUWUsU3QpKT09PUspYnJlYWs7QXJyYXkuaXNBcnJheSh2dCk/c24ucHVzaC5hcHBseShzbix2dCk6c24ucHVz''@;'; put 'put ''aCh2dCl9aWYoIXRoaXMuX2RvX25vdF9mbHVzaCl7Zm9yKDsodnQ9dGhpcy5fZW5jb2Rlci5oYW5kbGVyKFFlLFFlLnJlYWQoKSkpIT09SzspQXJyYXkuaXNBcnJheSh2dCk/c24ucHVzaC5hcHBseShzbix2dCk6c24ucHVzaCh2dCk7dGhpcy5fZW5jb2Rlcj1udWxsfXJldHVybiBuZXcgVWlu''@;'; put 'put ''dDhBcnJheShzbil9LGllWyJVVEYtOCJdPWZ1bmN0aW9uKERlKXtyZXR1cm4gbmV3IEUoRGUpfSx1ZVsiVVRGLTgiXT1mdW5jdGlvbihEZSl7cmV0dXJuIG5ldyBqKERlKX0sImVuY29kaW5nLWluZGV4ZXMiaW4gSSYmSi5mb3JFYWNoKGZ1bmN0aW9uKERlKXsiTGVnYWN5IHNpbmdsZS1ieXRl''@;'; put 'put ''IGVuY29kaW5ncyI9PT1EZS5oZWFkaW5nJiZEZS5lbmNvZGluZ3MuZm9yRWFjaChmdW5jdGlvbihfdCl7dmFyIHJ0PV90Lm5hbWUsUWU9VGUocnQudG9Mb3dlckNhc2UoKSk7dWVbcnRdPWZ1bmN0aW9uKHNuKXtyZXR1cm4gbmV3IG0oUWUsc24pfSxpZVtydF09ZnVuY3Rpb24oc24pe3JldHVy''@;'; put 'put ''biBuZXcgQShRZSxzbil9fSl9KSx1ZS5HQks9ZnVuY3Rpb24oRGUpe3JldHVybiBuZXcgYWUoRGUpfSxpZS5HQks9ZnVuY3Rpb24oRGUpe3JldHVybiBuZXcgbmUoRGUsITApfSxpZS5nYjE4MDMwPWZ1bmN0aW9uKERlKXtyZXR1cm4gbmV3IG5lKERlKX0sdWUuZ2IxODAzMD1mdW5jdGlvbihE''@;'; put 'put ''ZSl7cmV0dXJuIG5ldyBhZShEZSl9LGllLkJpZzU9ZnVuY3Rpb24oRGUpe3JldHVybiBuZXcgQ2UoRGUpfSx1ZS5CaWc1PWZ1bmN0aW9uKERlKXtyZXR1cm4gbmV3IHNlKERlKX0saWVbIkVVQy1KUCJdPWZ1bmN0aW9uKERlKXtyZXR1cm4gbmV3IEplKERlKX0sdWVbIkVVQy1KUCJdPWZ1bmN0''@;'; put 'put ''aW9uKERlKXtyZXR1cm4gbmV3IFVlKERlKX0saWVbIklTTy0yMDIyLUpQIl09ZnVuY3Rpb24oRGUpe3JldHVybiBuZXcgeGUoRGUpfSx1ZVsiSVNPLTIwMjItSlAiXT1mdW5jdGlvbihEZSl7cmV0dXJuIG5ldyBpdChEZSl9LGllLlNoaWZ0X0pJUz1mdW5jdGlvbihEZSl7cmV0dXJuIG5ldyBL''@;'; put 'put ''ZShEZSl9LHVlLlNoaWZ0X0pJUz1mdW5jdGlvbihEZSl7cmV0dXJuIG5ldyB5ZShEZSl9LGllWyJFVUMtS1IiXT1mdW5jdGlvbihEZSl7cmV0dXJuIG5ldyBrZShEZSl9LHVlWyJFVUMtS1IiXT1mdW5jdGlvbihEZSl7cmV0dXJuIG5ldyBqZShEZSl9LGllWyJVVEYtMTZCRSJdPWZ1bmN0aW9u''@;'; put 'put ''KERlKXtyZXR1cm4gbmV3IFJlKCEwLERlKX0sdWVbIlVURi0xNkJFIl09ZnVuY3Rpb24oRGUpe3JldHVybiBuZXcgTGUoITAsRGUpfSxpZVsiVVRGLTE2TEUiXT1mdW5jdGlvbihEZSl7cmV0dXJuIG5ldyBSZSghMSxEZSl9LHVlWyJVVEYtMTZMRSJdPWZ1bmN0aW9uKERlKXtyZXR1cm4gbmV3''@;'; put 'put ''IExlKCExLERlKX0saWVbIngtdXNlci1kZWZpbmVkIl09ZnVuY3Rpb24oRGUpe3JldHVybiBuZXcgQWUoRGUpfSx1ZVsieC11c2VyLWRlZmluZWQiXT1mdW5jdGlvbihEZSl7cmV0dXJuIG5ldyBWZShEZSl9LEkuVGV4dEVuY29kZXJ8fChJLlRleHRFbmNvZGVyPUgpLEkuVGV4dERlY29kZXJ8''@;'; put 'put ''fChJLlRleHREZWNvZGVyPVQpLGNlLmV4cG9ydHMmJihjZS5leHBvcnRzPXtUZXh0RW5jb2RlcjpJLlRleHRFbmNvZGVyLFRleHREZWNvZGVyOkkuVGV4dERlY29kZXIsRW5jb2RpbmdJbmRleGVzOklbImVuY29kaW5nLWluZGV4ZXMiXX0pfSh0aGlzfHx7fSl9LDY0NTUwOihjZSxYLGIpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBJPWIoMTg1NTYpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oXyl7dmFyIHA9K187cmV0dXJuIHAhPXB8fDA9PT1wPzA6SShwKX19LDY0NTg5OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyIxLjMuMTMyLjAuMTAiOiJzZWNwMjU2azEiLCIx''@;'; put 'put ''LjMuMTMyLjAuMzMiOiJwMjI0IiwiMS4yLjg0MC4xMDA0NS4zLjEuMSI6InAxOTIiLCIxLjIuODQwLjEwMDQ1LjMuMS43IjoicDI1NiIsIjEuMy4xMzIuMC4zNCI6InAzODQiLCIxLjMuMTMyLjAuMzUiOiJwNTIxIn0nKX0sNjQ2ODg6KCk9Pnt9LDY0ODU1OihjZSxYLGIpPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBJPWIoMzI2MzMpLF89YigzNjY3OCk7Y2UuZXhwb3J0cz1mdW5jdGlvbihwLFYpe0koVikmJiJjYXVzZSJpbiBWJiZfKHAsImNhdXNlIixWLmNhdXNlKX19LDY0OTQ3OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoODg3MjMpLF89Yig3MTk5MykscD1iKDk4ODI4KSxW''@;'; put 'put ''PWIoMzEzNik7ZnVuY3Rpb24gdyhGKXtwLmNhbGwodGhpcywibW9udCIsRiksdGhpcy5hPW5ldyBJKEYuYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgSShGLmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmk0PW5ldyBJKDQpLnRvUmVkKHRoaXMucmVkKS5yZWRJbnZtKCksdGhp''@;'; put 'put ''cy50d289bmV3IEkoMikudG9SZWQodGhpcy5yZWQpLHRoaXMuYTI0PXRoaXMuaTQucmVkTXVsKHRoaXMuYS5yZWRBZGQodGhpcy50d28pKX1mdW5jdGlvbiBQKEYsUix6KXtwLkJhc2VQb2ludC5jYWxsKHRoaXMsRiwicHJvamVjdGl2ZSIpLG51bGw9PT1SJiZudWxsPT09ej8odGhpcy54PXRo''@;'; put 'put ''aXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLnplcm8pOih0aGlzLng9bmV3IEkoUiwxNiksdGhpcy56PW5ldyBJKHosMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5j''@;'; put 'put ''dXJ2ZS5yZWQpKSl9Xyh3LHApLGNlLmV4cG9ydHM9dyx3LnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbihSKXt2YXIgej1SLm5vcm1hbGl6ZSgpLngsTj16LnJlZFNxcigpLE89Ti5yZWRNdWwoeikucmVkQWRkKE4ucmVkTXVsKHRoaXMuYSkpLnJlZEFkZCh6KTtyZXR1cm4gMD09PU8ucmVk''@;'; put 'put ''U3FydCgpLnJlZFNxcigpLmNtcChPKX0sXyhQLHAuQmFzZVBvaW50KSx3LnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbihSLHope3JldHVybiB0aGlzLnBvaW50KFYudG9BcnJheShSLHopLDEpfSx3LnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihSLHope3JldHVybiBuZXcgUCh0aGlz''@;'; put 'put ''LFIseil9LHcucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oUil7cmV0dXJuIFAuZnJvbUpTT04odGhpcyxSKX0sUC5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5jdGlvbigpe30sUC5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFgoKS50b0FycmF5''@;'; put 'put ''KCJiZSIsdGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSl9LFAuZnJvbUpTT049ZnVuY3Rpb24oUix6KXtyZXR1cm4gbmV3IFAoUix6WzBdLHpbMV18fFIub25lKX0sUC5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmlu''@;'; put 'put ''aXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxQLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX0sUC5wcm90''@;'; put 'put ''b3R5cGUuZGJsPWZ1bmN0aW9uKCl7dmFyIHo9dGhpcy54LnJlZEFkZCh0aGlzLnopLnJlZFNxcigpLE89dGhpcy54LnJlZFN1Yih0aGlzLnopLnJlZFNxcigpLEs9ei5yZWRTdWIoTyksWj16LnJlZE11bChPKSxZPUsucmVkTXVsKE8ucmVkQWRkKHRoaXMuY3VydmUuYTI0LnJlZE11bChLKSkp''@;'; put 'put ''O3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFosWSl9LFAucHJvdG90eXBlLmFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LFAucHJvdG90eXBlLmRpZmZBZGQ9ZnVuY3Rpb24oUix6KXt2YXIgTj10aGlzLngucmVkQWRk''@;'; put 'put ''KHRoaXMueiksTz10aGlzLngucmVkU3ViKHRoaXMueiksSz1SLngucmVkQWRkKFIueiksWT1SLngucmVkU3ViKFIueikucmVkTXVsKE4pLFc9Sy5yZWRNdWwoTykscT16LnoucmVkTXVsKFkucmVkQWRkKFcpLnJlZFNxcigpKSxlZT16LngucmVkTXVsKFkucmVkSVN1YihXKS5yZWRTcXIoKSk7''@;'; put 'put ''cmV0dXJuIHRoaXMuY3VydmUucG9pbnQocSxlZSl9LFAucHJvdG90eXBlLm11bD1mdW5jdGlvbihSKXtmb3IodmFyIHo9Ui5jbG9uZSgpLE49dGhpcyxPPXRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKSxaPVtdOzAhPT16LmNtcG4oMCk7ei5pdXNocm4oMSkpWi5wdXNoKHouYW5kbG4oMSkp''@;'; put 'put ''O2Zvcih2YXIgWT1aLmxlbmd0aC0xO1k+PTA7WS0tKTA9PT1aW1ldPyhOPU4uZGlmZkFkZChPLHRoaXMpLE89Ty5kYmwoKSk6KE89Ti5kaWZmQWRkKE8sdGhpcyksTj1OLmRibCgpKTtyZXR1cm4gT30sUC5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qg''@;'; put 'put ''c3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sUC5wcm90b3R5cGUuanVtbEFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LFAucHJvdG90eXBlLmVxPWZ1bmN0aW9uKFIpe3JldHVybiAwPT09dGhpcy5nZXRY''@;'; put 'put ''KCkuY21wKFIuZ2V0WCgpKX0sUC5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD10aGlzLngucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzfSxQLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''bm9ybWFsaXplKCksdGhpcy54LmZyb21SZWQoKX19LDY1MDgyOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwY2U3IiwyOiJcdTBjZTgiLDM6Ilx1MGNlOSIsNDoiXHUwY2VhIiw1OiJcdTBjZWIiLDY6Ilx1MGNlYyIsNzoiXHUwY2VkIiw4''@;'; put 'put ''OiJcdTBjZWUiLDk6Ilx1MGNlZiIsMDoiXHUwY2U2In0scD17Ilx1MGNlNyI6IjEiLCJcdTBjZTgiOiIyIiwiXHUwY2U5IjoiMyIsIlx1MGNlYSI6IjQiLCJcdTBjZWIiOiI1IiwiXHUwY2VjIjoiNiIsIlx1MGNlZCI6IjciLCJcdTBjZWUiOiI4IiwiXHUwY2VmIjoiOSIsIlx1MGNlNiI6IjAi''@;'; put 'put ''fTtJLmRlZmluZUxvY2FsZSgia24iLHttb250aHM6Ilx1MGM5Y1x1MGNhOFx1MGNiNVx1MGNiMFx1MGNiZl9cdTBjYWJcdTBjYzZcdTBjYWNcdTBjY2RcdTBjYjBcdTBjYjVcdTBjYjBcdTBjYmZfXHUwY2FlXHUwY2JlXHUwY2IwXHUwY2NkXHUwYzlhXHUwY2NkX1x1MGM4Zlx1MGNhYVx1MGNj''@;'; put 'put ''ZFx1MGNiMFx1MGNiZlx1MGNiMlx1MGNjZF9cdTBjYWVcdTBjYzZcdTBjZDVfXHUwYzljXHUwY2MyXHUwY2E4XHUwY2NkX1x1MGM5Y1x1MGNjMVx1MGNiMlx1MGNjNlx1MGNkNl9cdTBjODZcdTBjOTdcdTBjYjhcdTBjY2RcdTBjOWZcdTBjY2RfXHUwY2I4XHUwY2M2XHUwY2FhXHUwY2NkXHUw''@;'; put 'put ''YzlmXHUwY2M2XHUwYzgyXHUwY2FjXHUwY2IwXHUwY2NkX1x1MGM4NVx1MGM5NVx1MGNjZFx1MGM5Zlx1MGNjNlx1MGNjMlx1MGNkNVx1MGNhY1x1MGNiMFx1MGNjZF9cdTBjYThcdTBjYjVcdTBjYzZcdTBjODJcdTBjYWNcdTBjYjBcdTBjY2RfXHUwY2ExXHUwY2JmXHUwY2I4XHUwY2M2XHUw''@;'; put 'put ''YzgyXHUwY2FjXHUwY2IwXHUwY2NkIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBjOWNcdTBjYThfXHUwY2FiXHUwY2M2XHUwY2FjXHUwY2NkXHUwY2IwX1x1MGNhZVx1MGNiZVx1MGNiMFx1MGNjZFx1MGM5YVx1MGNjZF9cdTBjOGZcdTBjYWFcdTBjY2RcdTBjYjBcdTBjYmZcdTBjYjJc''@;'; put 'put ''dTBjY2RfXHUwY2FlXHUwY2M2XHUwY2Q1X1x1MGM5Y1x1MGNjMlx1MGNhOFx1MGNjZF9cdTBjOWNcdTBjYzFcdTBjYjJcdTBjYzZcdTBjZDZfXHUwYzg2XHUwYzk3XHUwY2I4XHUwY2NkXHUwYzlmXHUwY2NkX1x1MGNiOFx1MGNjNlx1MGNhYVx1MGNjZFx1MGM5Zlx1MGNjNlx1MGM4Ml9cdTBj''@;'; put 'put ''ODVcdTBjOTVcdTBjY2RcdTBjOWZcdTBjYzZcdTBjYzJcdTBjZDVfXHUwY2E4XHUwY2I1XHUwY2M2XHUwYzgyX1x1MGNhMVx1MGNiZlx1MGNiOFx1MGNjNlx1MGM4MiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTBjYWRcdTBjYmVcdTBjYThcdTBjYzFcdTBj''@;'; put 'put ''YjVcdTBjYmVcdTBjYjBfXHUwY2I4XHUwY2M2XHUwY2MyXHUwY2Q1XHUwY2FlXHUwY2I1XHUwY2JlXHUwY2IwX1x1MGNhZVx1MGM4Mlx1MGM5N1x1MGNiM1x1MGNiNVx1MGNiZVx1MGNiMF9cdTBjYWNcdTBjYzFcdTBjYTdcdTBjYjVcdTBjYmVcdTBjYjBfXHUwYzk3XHUwY2MxXHUwY2IwXHUw''@;'; put 'put ''Y2MxXHUwY2I1XHUwY2JlXHUwY2IwX1x1MGNiNlx1MGNjMVx1MGM5NVx1MGNjZFx1MGNiMFx1MGNiNVx1MGNiZVx1MGNiMF9cdTBjYjZcdTBjYThcdTBjYmZcdTBjYjVcdTBjYmVcdTBjYjAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwY2FkXHUwY2JlXHUwY2E4XHUwY2MxX1x1MGNi''@;'; put 'put ''OFx1MGNjNlx1MGNjMlx1MGNkNVx1MGNhZV9cdTBjYWVcdTBjODJcdTBjOTdcdTBjYjNfXHUwY2FjXHUwY2MxXHUwY2E3X1x1MGM5N1x1MGNjMVx1MGNiMFx1MGNjMV9cdTBjYjZcdTBjYzFcdTBjOTVcdTBjY2RcdTBjYjBfXHUwY2I2XHUwY2E4XHUwY2JmIi5zcGxpdCgiXyIpLHdlZWtkYXlz''@;'; put 'put ''TWluOiJcdTBjYWRcdTBjYmVfXHUwY2I4XHUwY2M2XHUwY2MyXHUwY2Q1X1x1MGNhZVx1MGM4Ml9cdTBjYWNcdTBjYzFfXHUwYzk3XHUwY2MxX1x1MGNiNlx1MGNjMV9cdTBjYjYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0iLExUUzoiQSBoOm1tOnNzIixMOiJERC9N''@;'; put 'put ''TS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwYzg3XHUwYzgyXHUwY2E2XHUwY2MxXSBMVCIsbmV4dERheToiW1x1MGNhOFx1MGNiZVx1MGNiM1x1''@;'; put 'put ''MGNjNl0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MGNhOFx1MGNiZlx1MGNhOFx1MGNjZFx1MGNhOFx1MGNjNl0gTFQiLGxhc3RXZWVrOiJbXHUwYzk1XHUwY2M2XHUwY2MyXHUwY2E4XHUwY2M2XHUwY2FmXSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRp''@;'; put 'put ''bWU6e2Z1dHVyZToiJXMgXHUwY2E4XHUwYzgyXHUwY2E0XHUwY2IwIixwYXN0OiIlcyBcdTBjYjlcdTBjYmZcdTBjODJcdTBjYTZcdTBjYzYiLHM6Ilx1MGM5NVx1MGNjNlx1MGNiMlx1MGNiNVx1MGNjMSBcdTBjOTVcdTBjY2RcdTBjYjdcdTBjYTNcdTBjOTdcdTBjYjNcdTBjYzEiLHNzOiIl''@;'; put 'put ''ZCBcdTBjYjhcdTBjYzZcdTBjOTVcdTBjYzZcdTBjODJcdTBjYTFcdTBjYzFcdTBjOTdcdTBjYjNcdTBjYzEiLG06Ilx1MGM5Mlx1MGM4Mlx1MGNhNlx1MGNjMSBcdTBjYThcdTBjYmZcdTBjYWVcdTBjYmZcdTBjYjciLG1tOiIlZCBcdTBjYThcdTBjYmZcdTBjYWVcdTBjYmZcdTBjYjciLGg6''@;'; put 'put ''Ilx1MGM5Mlx1MGM4Mlx1MGNhNlx1MGNjMSBcdTBjOTdcdTBjODJcdTBjOWZcdTBjYzYiLGhoOiIlZCBcdTBjOTdcdTBjODJcdTBjOWZcdTBjYzYiLGQ6Ilx1MGM5Mlx1MGM4Mlx1MGNhNlx1MGNjMSBcdTBjYTZcdTBjYmZcdTBjYTgiLGRkOiIlZCBcdTBjYTZcdTBjYmZcdTBjYTgiLE06Ilx1''@;'; put 'put ''MGM5Mlx1MGM4Mlx1MGNhNlx1MGNjMSBcdTBjYTRcdTBjYmZcdTBjODJcdTBjOTdcdTBjYjNcdTBjYzEiLE1NOiIlZCBcdTBjYTRcdTBjYmZcdTBjODJcdTBjOTdcdTBjYjNcdTBjYzEiLHk6Ilx1MGM5Mlx1MGM4Mlx1MGNhNlx1MGNjMSBcdTBjYjVcdTBjYjBcdTBjY2RcdTBjYjciLHl5OiIl''@;'; put 'put ''ZCBcdTBjYjVcdTBjYjBcdTBjY2RcdTBjYjcifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUwY2U3XHUwY2U4XHUwY2U5XHUwY2VhXHUwY2ViXHUwY2VjXHUwY2VkXHUwY2VlXHUwY2VmXHUwY2U2XS9nLGZ1bmN0aW9uKFApe3JldHVybiBwW1BdfSl9LHBvc3Rm''@;'; put 'put ''b3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihQKXtyZXR1cm4gX1tQXX0pfSxtZXJpZGllbVBhcnNlOi9cdTBjYjBcdTBjYmVcdTBjYTRcdTBjY2RcdTBjYjBcdTBjYmZ8XHUwY2FjXHUwY2M2XHUwY2IzXHUwY2JmXHUwYzk3XHUwY2NkXHUwYzk3XHUw''@;'; put 'put ''Y2M2fFx1MGNhZVx1MGNhN1x1MGNjZFx1MGNhZlx1MGNiZVx1MGNiOVx1MGNjZFx1MGNhOHxcdTBjYjhcdTBjODJcdTBjOWNcdTBjYzYvLG1lcmlkaWVtSG91cjpmdW5jdGlvbih3LFApe3JldHVybiAxMj09PXcmJih3PTApLCJcdTBjYjBcdTBjYmVcdTBjYTRcdTBjY2RcdTBjYjBcdTBjYmYi''@;'; put 'put ''PT09UD93PDQ/dzp3KzEyOiJcdTBjYWNcdTBjYzZcdTBjYjNcdTBjYmZcdTBjOTdcdTBjY2RcdTBjOTdcdTBjYzYiPT09UD93OiJcdTBjYWVcdTBjYTdcdTBjY2RcdTBjYWZcdTBjYmVcdTBjYjlcdTBjY2RcdTBjYTgiPT09UD93Pj0xMD93OncrMTI6Ilx1MGNiOFx1MGM4Mlx1MGM5Y1x1MGNj''@;'; put 'put ''NiI9PT1QP3crMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbih3LFAsRil7cmV0dXJuIHc8ND8iXHUwY2IwXHUwY2JlXHUwY2E0XHUwY2NkXHUwY2IwXHUwY2JmIjp3PDEwPyJcdTBjYWNcdTBjYzZcdTBjYjNcdTBjYmZcdTBjOTdcdTBjY2RcdTBjOTdcdTBjYzYiOnc8MTc/Ilx1MGNhZVx1''@;'; put 'put ''MGNhN1x1MGNjZFx1MGNhZlx1MGNiZVx1MGNiOVx1MGNjZFx1MGNhOCI6dzwyMD8iXHUwY2I4XHUwYzgyXHUwYzljXHUwY2M2IjoiXHUwY2IwXHUwY2JlXHUwY2E0XHUwY2NkXHUwY2IwXHUwY2JmIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcdTBjYThcdTBjYzZcdTBjZDUp''@;'; put 'put ''LyxvcmRpbmFsOmZ1bmN0aW9uKHcpe3JldHVybiB3KyJcdTBjYThcdTBjYzZcdTBjZDUifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oYig5NzU4NikpfSw2NTExNzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0IjtiKDcxMzU0KX0sNjU0NDE6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBfPSJqYW4uX2ZlYi5fbXJ0Ll9hcHIuX21laV9qdW4uX2p1bC5fYXVnLl9zZXAuX29rdC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLHA9Imphbl9mZWJfbXJ0X2Fwcl9tZWlfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpLFY9Wy9eamFuL2ksL15m''@;'; put 'put ''ZWIvaSwvXihtYWFydHxtcnRcLj8pJC9pLC9eYXByL2ksL15tZWkkL2ksL15qdW5baS5dPyQvaSwvXmp1bFtpLl0/JC9pLC9eYXVnL2ksL15zZXAvaSwvXm9rdC9pLC9ebm92L2ksL15kZWMvaV0sdz0vXihqYW51YXJpfGZlYnJ1YXJpfG1hYXJ0fGFwcmlsfG1laXxqdVtubF1pfGF1Z3VzdHVz''@;'; put 'put ''fHNlcHRlbWJlcnxva3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyfGphblwuP3xmZWJcLj98bXJ0XC4/fGFwclwuP3xqdVtubF1cLj98YXVnXC4/fHNlcFwuP3xva3RcLj98bm92XC4/fGRlY1wuPykvaTtJLmRlZmluZUxvY2FsZSgibmwiLHttb250aHM6ImphbnVhcmlfZmVicnVhcmlfbWFhcnRf''@;'; put 'put ''YXByaWxfbWVpX2p1bmlfanVsaV9hdWd1c3R1c19zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDpmdW5jdGlvbihGLFIpe3JldHVybiBGPy8tTU1NLS8udGVzdChSKT9wW0YubW9udGgoKV06X1tGLm1vbnRoKCldOl99LG1vbnRoc1Jl''@;'; put 'put ''Z2V4OncsbW9udGhzU2hvcnRSZWdleDp3LG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGphbnVhcml8ZmVicnVhcml8bWFhcnR8YXByaWx8bWVpfGp1W25sXWl8YXVndXN0dXN8c2VwdGVtYmVyfG9rdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXIpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihqYW5c''@;'; put 'put ''Lj98ZmViXC4/fG1ydFwuP3xhcHJcLj98bWVpfGp1W25sXVwuP3xhdWdcLj98c2VwXC4/fG9rdFwuP3xub3ZcLj98ZGVjXC4/KS9pLG1vbnRoc1BhcnNlOlYsbG9uZ01vbnRoc1BhcnNlOlYsc2hvcnRNb250aHNQYXJzZTpWLHdlZWtkYXlzOiJ6b25kYWdfbWFhbmRhZ19kaW5zZGFnX3dvZW5z''@;'; put 'put ''ZGFnX2RvbmRlcmRhZ192cmlqZGFnX3phdGVyZGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InpvLl9tYS5fZGkuX3dvLl9kby5fdnIuX3phLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiem9fbWFfZGlfd29fZG9fdnJfemEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEw''@;'; put 'put ''LGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELU1NLVlZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbdmFuZGFhZyBvbV0gTFQi''@;'; put 'put ''LG5leHREYXk6Ilttb3JnZW4gb21dIExUIixuZXh0V2VlazoiZGRkZCBbb21dIExUIixsYXN0RGF5OiJbZ2lzdGVyZW4gb21dIExUIixsYXN0V2VlazoiW2FmZ2Vsb3Blbl0gZGRkZCBbb21dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvdmVyICVzIixwYXN0OiIl''@;'; put 'put ''cyBnZWxlZGVuIixzOiJlZW4gcGFhciBzZWNvbmRlbiIsc3M6IiVkIHNlY29uZGVuIixtOiJceGU5XHhlOW4gbWludXV0IixtbToiJWQgbWludXRlbiIsaDoiXHhlOVx4ZTluIHV1ciIsaGg6IiVkIHV1ciIsZDoiXHhlOVx4ZTluIGRhZyIsZGQ6IiVkIGRhZ2VuIix3OiJceGU5XHhlOW4gd2Vl''@;'; put 'put ''ayIsd3c6IiVkIHdla2VuIixNOiJceGU5XHhlOW4gbWFhbmQiLE1NOiIlZCBtYWFuZGVuIix5OiJceGU5XHhlOW4gamFhciIseXk6IiVkIGphYXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0ZXxkZSkvLG9yZGluYWw6ZnVuY3Rpb24oRil7cmV0dXJuIEYrKDE9PT1GfHw4''@;'; put 'put ''PT09Rnx8Rj49MjA/InN0ZSI6ImRlIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDY1NjY3OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoODMxMzgpLF89YigxNTU3OSkscD1iKDg5NDcyKSxWPWIoNDMzODgpLHc9Yig5MzM5NykucGJrZGYyU3luYyxQPWIoMjcw''@;'; put 'put ''NTQpLkJ1ZmZlcjtmdW5jdGlvbiBSKHope3ZhciBOOyJvYmplY3QiPT10eXBlb2YgeiYmIVAuaXNCdWZmZXIoeikmJihOPXoucGFzc3BocmFzZSx6PXoua2V5KSwic3RyaW5nIj09dHlwZW9mIHomJih6PVAuZnJvbSh6KSk7dmFyIFksVyxPPXAoeixOKSxLPU8udGFnLFo9Ty5kYXRhO3N3aXRj''@;'; put 'put ''aChLKXtjYXNlIkNFUlRJRklDQVRFIjpXPUkuY2VydGlmaWNhdGUuZGVjb2RlKFosImRlciIpLnRic0NlcnRpZmljYXRlLnN1YmplY3RQdWJsaWNLZXlJbmZvO2Nhc2UiUFVCTElDIEtFWSI6c3dpdGNoKFd8fChXPUkuUHVibGljS2V5LmRlY29kZShaLCJkZXIiKSksWT1XLmFsZ29yaXRobS5h''@;'; put 'put ''bGdvcml0aG0uam9pbigiLiIpKXtjYXNlIjEuMi44NDAuMTEzNTQ5LjEuMS4xIjpyZXR1cm4gSS5SU0FQdWJsaWNLZXkuZGVjb2RlKFcuc3ViamVjdFB1YmxpY0tleS5kYXRhLCJkZXIiKTtjYXNlIjEuMi44NDAuMTAwNDUuMi4xIjpyZXR1cm4gVy5zdWJqZWN0UHJpdmF0ZUtleT1XLnN1Ympl''@;'; put 'put ''Y3RQdWJsaWNLZXkse3R5cGU6ImVjIixkYXRhOld9O2Nhc2UiMS4yLjg0MC4xMDA0MC40LjEiOnJldHVybiBXLmFsZ29yaXRobS5wYXJhbXMucHViX2tleT1JLkRTQXBhcmFtLmRlY29kZShXLnN1YmplY3RQdWJsaWNLZXkuZGF0YSwiZGVyIikse3R5cGU6ImRzYSIsZGF0YTpXLmFsZ29yaXRo''@;'; put 'put ''bS5wYXJhbXN9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGtleSBpZCAiK1kpfWNhc2UiRU5DUllQVEVEIFBSSVZBVEUgS0VZIjpaPWZ1bmN0aW9uIEYoeixOKXt2YXIgTz16LmFsZ29yaXRobS5kZWNyeXB0LmtkZS5rZGVwYXJhbXMuc2FsdCxLPXBhcnNlSW50KHouYWxnb3Jp''@;'; put 'put ''dGhtLmRlY3J5cHQua2RlLmtkZXBhcmFtcy5pdGVycy50b1N0cmluZygpLDEwKSxaPV9bei5hbGdvcml0aG0uZGVjcnlwdC5jaXBoZXIuYWxnby5qb2luKCIuIildLFk9ei5hbGdvcml0aG0uZGVjcnlwdC5jaXBoZXIuaXYsVz16LnN1YmplY3RQcml2YXRlS2V5LHE9cGFyc2VJbnQoWi5zcGxp''@;'; put 'put ''dCgiLSIpWzFdLDEwKS84LGVlPXcoTixPLEsscSwic2hhMSIpLEo9Vi5jcmVhdGVEZWNpcGhlcml2KFosZWUsWSkscmU9W107cmV0dXJuIHJlLnB1c2goSi51cGRhdGUoVykpLHJlLnB1c2goSi5maW5hbCgpKSxQLmNvbmNhdChyZSl9KFo9SS5FbmNyeXB0ZWRQcml2YXRlS2V5LmRlY29kZSha''@;'; put 'put ''LCJkZXIiKSxOKTtjYXNlIlBSSVZBVEUgS0VZIjpzd2l0Y2goWT0oVz1JLlByaXZhdGVLZXkuZGVjb2RlKFosImRlciIpKS5hbGdvcml0aG0uYWxnb3JpdGhtLmpvaW4oIi4iKSl7Y2FzZSIxLjIuODQwLjExMzU0OS4xLjEuMSI6cmV0dXJuIEkuUlNBUHJpdmF0ZUtleS5kZWNvZGUoVy5zdWJq''@;'; put 'put ''ZWN0UHJpdmF0ZUtleSwiZGVyIik7Y2FzZSIxLjIuODQwLjEwMDQ1LjIuMSI6cmV0dXJue2N1cnZlOlcuYWxnb3JpdGhtLmN1cnZlLHByaXZhdGVLZXk6SS5FQ1ByaXZhdGVLZXkuZGVjb2RlKFcuc3ViamVjdFByaXZhdGVLZXksImRlciIpLnByaXZhdGVLZXl9O2Nhc2UiMS4yLjg0MC4xMDA0''@;'; put 'put ''MC40LjEiOnJldHVybiBXLmFsZ29yaXRobS5wYXJhbXMucHJpdl9rZXk9SS5EU0FwYXJhbS5kZWNvZGUoVy5zdWJqZWN0UHJpdmF0ZUtleSwiZGVyIikse3R5cGU6ImRzYSIscGFyYW1zOlcuYWxnb3JpdGhtLnBhcmFtc307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVua25vd24ga2V5IGlk''@;'; put 'put ''ICIrWSl9Y2FzZSJSU0EgUFVCTElDIEtFWSI6cmV0dXJuIEkuUlNBUHVibGljS2V5LmRlY29kZShaLCJkZXIiKTtjYXNlIlJTQSBQUklWQVRFIEtFWSI6cmV0dXJuIEkuUlNBUHJpdmF0ZUtleS5kZWNvZGUoWiwiZGVyIik7Y2FzZSJEU0EgUFJJVkFURSBLRVkiOnJldHVybnt0eXBlOiJkc2Ei''@;'; put 'put ''LHBhcmFtczpJLkRTQVByaXZhdGVLZXkuZGVjb2RlKFosImRlciIpfTtjYXNlIkVDIFBSSVZBVEUgS0VZIjpyZXR1cm57Y3VydmU6KFo9SS5FQ1ByaXZhdGVLZXkuZGVjb2RlKFosImRlciIpKS5wYXJhbWV0ZXJzLnZhbHVlLHByaXZhdGVLZXk6Wi5wcml2YXRlS2V5fTtkZWZhdWx0OnRocm93''@;'; put 'put ''IG5ldyBFcnJvcigidW5rbm93biBrZXkgdHlwZSAiK0spfX1SLnNpZ25hdHVyZT1JLnNpZ25hdHVyZSxjZS5leHBvcnRzPVJ9LDY1NzQyOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwNmYxIiwyOiJcdTA2ZjIiLDM6Ilx1MDZmMyIsNDoi''@;'; put 'put ''XHUwNmY0Iiw1OiJcdTA2ZjUiLDY6Ilx1MDZmNiIsNzoiXHUwNmY3Iiw4OiJcdTA2ZjgiLDk6Ilx1MDZmOSIsMDoiXHUwNmYwIn0scD17Ilx1MDZmMSI6IjEiLCJcdTA2ZjIiOiIyIiwiXHUwNmYzIjoiMyIsIlx1MDZmNCI6IjQiLCJcdTA2ZjUiOiI1IiwiXHUwNmY2IjoiNiIsIlx1MDZmNyI6''@;'; put 'put ''IjciLCJcdTA2ZjgiOiI4IiwiXHUwNmY5IjoiOSIsIlx1MDZmMCI6IjAifTtJLmRlZmluZUxvY2FsZSgiZmEiLHttb250aHM6Ilx1MDY5OFx1MDYyN1x1MDY0Nlx1MDY0OFx1MDZjY1x1MDY0N19cdTA2NDFcdTA2NDhcdTA2MzFcdTA2Y2NcdTA2NDdfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMz''@;'; put 'put ''X1x1MDYyMlx1MDY0OFx1MDYzMVx1MDZjY1x1MDY0NF9cdTA2NDVcdTA2NDdfXHUwNjk4XHUwNjQ4XHUwNjI2XHUwNjQ2X1x1MDY5OFx1MDY0OFx1MDYyNlx1MDZjY1x1MDY0N19cdTA2MjdcdTA2NDhcdTA2MmFfXHUwNjMzXHUwNjdlXHUwNjJhXHUwNjI3XHUwNjQ1XHUwNjI4XHUwNjMxX1x1''@;'; put 'put ''MDYyN1x1MDZhOVx1MDYyYVx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2MjdcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjMzXHUwNjI3XHUwNjQ1XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA2OThcdTA2MjdcdTA2NDZcdTA2NDhcdTA2Y2NcdTA2NDdf''@;'; put 'put ''XHUwNjQxXHUwNjQ4XHUwNjMxXHUwNmNjXHUwNjQ3X1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjJcdTA2NDhcdTA2MzFcdTA2Y2NcdTA2NDRfXHUwNjQ1XHUwNjQ3X1x1MDY5OFx1MDY0OFx1MDYyNlx1MDY0Nl9cdTA2OThcdTA2NDhcdTA2MjZcdTA2Y2NcdTA2NDdfXHUwNjI3XHUw''@;'; put 'put ''NjQ4XHUwNjJhX1x1MDYzM1x1MDY3ZVx1MDYyYVx1MDYyN1x1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MjdcdTA2YTlcdTA2MmFcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjI3XHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDYzM1x1MDYyN1x1MDY0NVx1MDYyOFx1MDYzMSIuc3BsaXQo''@;'; put 'put ''Il8iKSx3ZWVrZGF5czoiXHUwNmNjXHUwNmE5XHUyMDBjXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDYyZlx1MDY0OFx1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2MzNcdTA2NDdcdTIwMGNcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjg2XHUwNjQ3XHUwNjI3XHUwNjMxXHUw''@;'; put 'put ''NjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDY3ZVx1MDY0Nlx1MDYyY1x1MjAwY1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2NDdfXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDZjY1x1MDZhOVx1MjAw''@;'; put 'put ''Y1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2MmZcdTA2NDhcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjMzXHUwNjQ3XHUyMDBjXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDY4Nlx1MDY0N1x1MDYyN1x1MDYzMVx1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2N2VcdTA2''@;'; put 'put ''NDZcdTA2MmNcdTIwMGNcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjQ3X1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0NyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNmNjX1x1MDYyZl9cdTA2MzNfXHUwNjg2X1x1MDY3ZV9cdTA2MmNfXHUwNjM0Ii5z''@;'; put 'put ''cGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVy''@;'; put 'put ''aWRpZW1QYXJzZTovXHUwNjQyXHUwNjI4XHUwNjQ0IFx1MDYyN1x1MDYzMiBcdTA2MzhcdTA2NDdcdTA2MzF8XHUwNjI4XHUwNjM5XHUwNjJmIFx1MDYyN1x1MDYzMiBcdTA2MzhcdTA2NDdcdTA2MzEvLGlzUE06ZnVuY3Rpb24odyl7cmV0dXJuL1x1MDYyOFx1MDYzOVx1MDYyZiBcdTA2Mjdc''@;'; put 'put ''dTA2MzIgXHUwNjM4XHUwNjQ3XHUwNjMxLy50ZXN0KHcpfSxtZXJpZGllbTpmdW5jdGlvbih3LFAsRil7cmV0dXJuIHc8MTI/Ilx1MDY0Mlx1MDYyOFx1MDY0NCBcdTA2MjdcdTA2MzIgXHUwNjM4XHUwNjQ3XHUwNjMxIjoiXHUwNjI4XHUwNjM5XHUwNjJmIFx1MDYyN1x1MDYzMiBcdTA2Mzhc''@;'; put 'put ''dTA2NDdcdTA2MzEifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NVx1MDYzMVx1MDY0OFx1MDYzMiBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFdIExUIixuZXh0RGF5OiJbXHUwNjQxXHUwNjMxXHUwNjJmXHUwNjI3IFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYV0gTFQiLG5leHRX''@;'; put 'put ''ZWVrOiJkZGRkIFtcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFdIExUIixsYXN0RGF5OiJbXHUwNjJmXHUwNmNjXHUwNjMxXHUwNjQ4XHUwNjMyIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2N2VcdTA2Y2NcdTA2MzRdIFtcdTA2MzNcdTA2MjdcdTA2''@;'; put 'put ''MzlcdTA2MmFdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2MmZcdTA2MzEgJXMiLHBhc3Q6IiVzIFx1MDY3ZVx1MDZjY1x1MDYzNCIsczoiXHUwNjg2XHUwNjQ2XHUwNjJmIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDZjY1x1MDY0NyIsc3M6IiVkIFx1MDYyYlx1''@;'; put 'put ''MDYyN1x1MDY0Nlx1MDZjY1x1MDY0NyIsbToiXHUwNmNjXHUwNmE5IFx1MDYyZlx1MDY0Mlx1MDZjY1x1MDY0Mlx1MDY0NyIsbW06IiVkIFx1MDYyZlx1MDY0Mlx1MDZjY1x1MDY0Mlx1MDY0NyIsaDoiXHUwNmNjXHUwNmE5IFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYSIsaGg6IiVkIFx1MDYz''@;'; put 'put ''M1x1MDYyN1x1MDYzOVx1MDYyYSIsZDoiXHUwNmNjXHUwNmE5IFx1MDYzMVx1MDY0OFx1MDYzMiIsZGQ6IiVkIFx1MDYzMVx1MDY0OFx1MDYzMiIsTToiXHUwNmNjXHUwNmE5IFx1MDY0NVx1MDYyN1x1MDY0NyIsTU06IiVkIFx1MDY0NVx1MDYyN1x1MDY0NyIseToiXHUwNmNjXHUwNmE5IFx1''@;'; put 'put ''MDYzM1x1MDYyN1x1MDY0NCIseXk6IiVkIFx1MDYzM1x1MDYyN1x1MDY0NCJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTA2ZjAtXHUwNmY5XS9nLGZ1bmN0aW9uKFApe3JldHVybiBwW1BdfSkucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpm''@;'; put 'put ''dW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKFApe3JldHVybiBfW1BdfSkucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx1MDY0NS8sb3JkaW5hbDoiJWRcdTA2NDUiLHdlZWs6e2Rvdzo2LGRveToxMn19KX0o''@;'; put 'put ''Yig5NzU4NikpfSw2NTc0NTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0IjtiKDkyNTgwKX0sNjU4OTE6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1PYmplY3R9LDY1OTkyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNDkxMzIpO2NlLmV4cG9ydHM9RnVuY3Rpb24ucHJvdG90''@;'; put 'put ''eXBlLmJpbmR8fEl9LDY2MDg5OigpPT57fSw2NjUwMzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDMzOTYzKTtjZS5leHBvcnRzPWZ1bmN0aW9uKF8scCl7dmFyIFY9SVtfXSx3PVYmJlYucHJvdG90eXBlO3JldHVybiB3JiZ3W3BdfX0sNjY1NDI6KGNlLFgsYik9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIEk9Yig0NjkyNiksXz1iKDExMDgpLHA9Yig4NjExNSk7Y2UuZXhwb3J0cz1mdW5jdGlvbihWLHcsUCl7dmFyIEYsUjtfKFYpO3RyeXtpZighKEY9cChWLCJyZXR1cm4iKSkpe2lmKCJ0aHJvdyI9PT13KXRocm93IFA7cmV0dXJuIFB9Rj1JKEYsVil9Y2F0Y2goeil7Uj0hMCxG''@;'; put 'put ''PXp9aWYoInRocm93Ij09PXcpdGhyb3cgUDtpZihSKXRocm93IEY7cmV0dXJuIF8oRiksUH19LDY2NjY2OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiY3YiLHttb250aHM6Ilx1MDQzYVx1MDRkMVx1MDQ0MFx1MDQzYlx1MDQzMFx1''@;'; put 'put ''MDQ0N19cdTA0M2RcdTA0MzBcdTA0NDBcdTA0ZDFcdTA0NDFfXHUwNDNmXHUwNDQzXHUwNDQ4X1x1MDQzMFx1MDQzYVx1MDQzMF9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNGFiXHUwNGQ3XHUwNDQwXHUwNDQyXHUwNDNjXHUwNDM1X1x1MDQ0M1x1MDQ0Mlx1MDRkMV9cdTA0YWJcdTA0NDNcdTA0''@;'; put 'put ''NDBcdTA0M2JcdTA0MzBfXHUwNDMwXHUwNDMyXHUwNGQxXHUwNDNkX1x1MDQ0ZVx1MDQzZlx1MDQzMF9cdTA0NDdcdTA0ZjNcdTA0M2FfXHUwNDQwXHUwNDMwXHUwNDQ4XHUwNDQyXHUwNDMwXHUwNDMyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0M2FcdTA0ZDFcdTA0NDBfXHUwNDNk''@;'; put 'put ''XHUwNDMwXHUwNDQwX1x1MDQzZlx1MDQ0M1x1MDQ0OF9cdTA0MzBcdTA0M2FcdTA0MzBfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDRhYlx1MDRkN1x1MDQ0MF9cdTA0NDNcdTA0NDJcdTA0ZDFfXHUwNGFiXHUwNDQzXHUwNDQwX1x1MDQzMFx1MDQzMlx1MDQzZF9cdTA0NGVcdTA0M2ZcdTA0MzBf''@;'; put 'put ''XHUwNDQ3XHUwNGYzXHUwNDNhX1x1MDQ0MFx1MDQzMFx1MDQ0OCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDMyXHUwNDRiXHUwNDQwXHUwNDQxXHUwNDMwXHUwNDQwXHUwNDNkXHUwNDM4XHUwNDNhXHUwNDQzXHUwNDNkX1x1MDQ0Mlx1MDQ0M1x1MDQzZFx1MDQ0Mlx1MDQzOFx1MDQzYVx1''@;'; put 'put ''MDQ0M1x1MDQzZF9cdTA0NGJcdTA0NDJcdTA0M2JcdTA0MzBcdTA0NDBcdTA0MzhcdTA0M2FcdTA0NDNcdTA0M2RfXHUwNDRlXHUwNDNkXHUwNDNhXHUwNDQzXHUwNDNkX1x1MDQzYVx1MDRkN1x1MDRhYlx1MDQzZFx1MDQzNVx1MDQ0MFx1MDQzZFx1MDQzOFx1MDQzYVx1MDQ0M1x1MDQzZF9c''@;'; put 'put ''dTA0NGRcdTA0NDBcdTA0M2RcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RfXHUwNDQ4XHUwNGQxXHUwNDNjXHUwNDMwXHUwNDQyXHUwNDNhXHUwNDQzXHUwNDNkIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQzMlx1MDQ0Ylx1MDQ0MF9cdTA0NDJcdTA0NDNcdTA0M2RfXHUwNDRiXHUw''@;'; put 'put ''NDQyXHUwNDNiX1x1MDQ0ZVx1MDQzZF9cdTA0M2FcdTA0ZDdcdTA0YWJfXHUwNDRkXHUwNDQwXHUwNDNkX1x1MDQ0OFx1MDRkMVx1MDQzYyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDMyXHUwNDQwX1x1MDQ0Mlx1MDQzZF9cdTA0NGJcdTA0NDJfXHUwNDRlXHUwNDNkX1x1MDQzYVx1''@;'; put 'put ''MDRhYl9cdTA0NGRcdTA0NDBfXHUwNDQ4XHUwNDNjIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELU1NLVlZWVkiLExMOiJZWVlZIFtcdTA0YWJcdTA0NDNcdTA0M2JcdTA0NDVcdTA0MzhdIE1NTU0gW1x1MDQ0M1x1MDQzOVx1MDRk''@;'; put 'put ''MVx1MDQ0NVx1MDRkN1x1MDQzZF0gRFstXHUwNDNjXHUwNGQ3XHUwNDQ4XHUwNGQ3XSIsTExMOiJZWVlZIFtcdTA0YWJcdTA0NDNcdTA0M2JcdTA0NDVcdTA0MzhdIE1NTU0gW1x1MDQ0M1x1MDQzOVx1MDRkMVx1MDQ0NVx1MDRkN1x1MDQzZF0gRFstXHUwNDNjXHUwNGQ3XHUwNDQ4XHUwNGQ3''@;'; put 'put ''XSwgSEg6bW0iLExMTEw6ImRkZGQsIFlZWVkgW1x1MDRhYlx1MDQ0M1x1MDQzYlx1MDQ0NVx1MDQzOF0gTU1NTSBbXHUwNDQzXHUwNDM5XHUwNGQxXHUwNDQ1XHUwNGQ3XHUwNDNkXSBEWy1cdTA0M2NcdTA0ZDdcdTA0NDhcdTA0ZDddLCBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUw''@;'; put 'put ''NDFmXHUwNDMwXHUwNDRmXHUwNDNkXSBMVCBbXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyXHUwNDQwXHUwNDM1XSIsbmV4dERheToiW1x1MDQyYlx1MDQ0MFx1MDQzMFx1MDQzZF0gTFQgW1x1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0Mlx1MDQ0MFx1MDQzNV0iLGxhc3REYXk6''@;'; put 'put ''IltcdTA0ZDZcdTA0M2RcdTA0MzVcdTA0NDBdIExUIFtcdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDJcdTA0NDBcdTA0MzVdIixuZXh0V2VlazoiW1x1MDRhYVx1MDQzOFx1MDQ0Mlx1MDQzNVx1MDQ0MV0gZGRkZCBMVCBbXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyXHUwNDQw''@;'; put 'put ''XHUwNDM1XSIsbGFzdFdlZWs6IltcdTA0MThcdTA0NDBcdTA0NDJcdTA0M2RcdTA0ZDddIGRkZGQgTFQgW1x1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0Mlx1MDQ0MFx1MDQzNV0iLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ZnVuY3Rpb24ocCl7cmV0dXJuIHArKC9c''@;'; put 'put ''dTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDIkL2kuZXhlYyhwKT8iXHUwNDQwXHUwNDM1XHUwNDNkIjovXHUwNGFiXHUwNDQzXHUwNDNiJC9pLmV4ZWMocCk/Ilx1MDQ0Mlx1MDQzMFx1MDQzZCI6Ilx1MDQ0MFx1MDQzMFx1MDQzZCIpfSxwYXN0OiIlcyBcdTA0M2FcdTA0MzBcdTA0NGZc''@;'; put 'put ''dTA0M2JcdTA0M2JcdTA0MzAiLHM6Ilx1MDQzZlx1MDRkN1x1MDQ0MC1cdTA0MzhcdTA0M2EgXHUwNGFiXHUwNDM1XHUwNDNhXHUwNDNhXHUwNDQzXHUwNDNkXHUwNDQyIixzczoiJWQgXHUwNGFiXHUwNDM1XHUwNDNhXHUwNDNhXHUwNDQzXHUwNDNkXHUwNDQyIixtOiJcdTA0M2ZcdTA0ZDdc''@;'; put 'put ''dTA0NDAgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIixtbToiJWQgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIixoOiJcdTA0M2ZcdTA0ZDdcdTA0NDAgXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyIixoaDoiJWQgXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUw''@;'; put 'put ''NDQyIixkOiJcdTA0M2ZcdTA0ZDdcdTA0NDAgXHUwNDNhXHUwNDQzXHUwNDNkIixkZDoiJWQgXHUwNDNhXHUwNDQzXHUwNDNkIixNOiJcdTA0M2ZcdTA0ZDdcdTA0NDAgXHUwNDQzXHUwNDM5XHUwNGQxXHUwNDQ1IixNTToiJWQgXHUwNDQzXHUwNDM5XHUwNGQxXHUwNDQ1Iix5OiJcdTA0M2Zc''@;'; put 'put ''dTA0ZDdcdTA0NDAgXHUwNGFiXHUwNDQzXHUwNDNiIix5eToiJWQgXHUwNGFiXHUwNDQzXHUwNDNiIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS1cdTA0M2NcdTA0ZDdcdTA0NDgvLG9yZGluYWw6IiVkLVx1MDQzY1x1MDRkN1x1MDQ0OCIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9''@;'; put 'put ''KGIoOTc1ODYpKX0sNjY3OTI6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig1ODAxMiksXz1iKDE5MjU4KSxwPUkoIml0ZXJhdG9yIiksVj1BcnJheS5wcm90b3R5cGU7Y2UuZXhwb3J0cz1mdW5jdGlvbih3KXtyZXR1cm4gdm9pZCAwIT09dyYmKF8uQXJyYXk9PT13fHxWW3BdPT09''@;'; put 'put ''dyl9fSw2Njk5NTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDM2NTA2KTtjZS5leHBvcnRzPUkmJiFTeW1ib2wuc2hhbSYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3J9LDY3MDI4OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRl''@;'; put 'put ''ZmluZUxvY2FsZSgiZ2QiLHttb250aHM6WyJBbSBGYW9pbGxlYWNoIiwiQW4gR2VhcnJhbiIsIkFtIE1ceGUwcnQiLCJBbiBHaWJsZWFuIiwiQW4gQ1x4ZThpdGVhbiIsIkFuIHQtXHhkMmdtaGlvcyIsIkFuIHQtSXVjaGFyIiwiQW4gTFx4ZjluYXN0YWwiLCJBbiB0LVN1bHRhaW4iLCJBbiBE''@;'; put 'put ''XHhlMG1oYWlyIiwiQW4gdC1TYW1oYWluIiwiQW4gRFx4ZjliaGxhY2hkIl0sbW9udGhzU2hvcnQ6WyJGYW9pIiwiR2VhciIsIk1ceGUwcnQiLCJHaWJsIiwiQ1x4ZThpdCIsIlx4ZDJnbWgiLCJJdWNoIiwiTFx4ZjluIiwiU3VsdCIsIkRceGUwbWgiLCJTYW1oIiwiRFx4ZjliaCJdLG1vbnRo''@;'; put 'put ''c1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6WyJEaWRceGYybWhuYWljaCIsIkRpbHVhaW4iLCJEaW1ceGUwaXJ0IiwiRGljaWFkYWluIiwiRGlhcmRhb2luIiwiRGloYW9pbmUiLCJEaXNhdGhhaXJuZSJdLHdlZWtkYXlzU2hvcnQ6WyJEaWQiLCJEaWwiLCJEaW0iLCJEaWMiLCJEaWEiLCJEaWgi''@;'; put 'put ''LCJEaXMiXSx3ZWVrZGF5c01pbjpbIkRceGYyIiwiTHUiLCJNXHhlMCIsIkNpIiwiQXIiLCJIYSIsIlNhIl0sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExM''@;'; put 'put ''OiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQW4tZGl1Z2ggYWlnXSBMVCIsbmV4dERheToiW0EtbVx4ZTBpcmVhY2ggYWlnXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2FpZ10gTFQiLGxhc3REYXk6IltBbi1kXHhlOCBhaWddIExUIixsYXN0V2VlazoiZGRk''@;'; put 'put ''ZCBbc2VvIGNoYWlkaF0gW2FpZ10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImFubiBhbiAlcyIscGFzdDoiYmhvIGNoaW9ubiAlcyIsczoiYmVhZ2FuIGRpb2dhbiIsc3M6IiVkIGRpb2dhbiIsbToibWlvbmFpZCIsbW06IiVkIG1pb25haWRlYW4iLGg6InVhaXIi''@;'; put 'put ''LGhoOiIlZCB1YWlyZWFuIixkOiJsYXRoYSIsZGQ6IiVkIGxhdGhhIixNOiJtXHhlY29zIixNTToiJWQgbVx4ZWNvc2FuIix5OiJibGlhZGhuYSIseXk6IiVkIGJsaWFkaG5hIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShkfG5hfG1oKS8sb3JkaW5hbDpmdW5jdGlvbihSKXty''@;'; put 'put ''ZXR1cm4gUisoMT09PVI/ImQiOlIlMTA9PTI/Im5hIjoibWgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sNjcyMTE6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig3MTk5MyksXz1iKDM0NzI1KSxwPWIoMzY2MzYpLFY9YigyNTQ0Myksdz1iKDMyNDcpO2Z1bmN0''@;'; put 'put ''aW9uIFAoRil7dy5jYWxsKHRoaXMsImRpZ2VzdCIpLHRoaXMuX2hhc2g9Rn1JKFAsdyksUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihGKXt0aGlzLl9oYXNoLnVwZGF0ZShGKX0sUC5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hhc2guZGlnZXN0KCl9LGNl''@;'; put 'put ''LmV4cG9ydHM9ZnVuY3Rpb24oUil7cmV0dXJuIm1kNSI9PT0oUj1SLnRvTG93ZXJDYXNlKCkpP25ldyBfOiJybWQxNjAiPT09Unx8InJpcGVtZDE2MCI9PT1SP25ldyBwOm5ldyBQKFYoUikpfX0sNjcyNzc6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig4NjY3NSk7Y2UuZXhwb3J0''@;'; put 'put ''cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihwKXtyZXR1cm4iQXJyYXkiPT09SShwKX19LDY3ODU5OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgibmIiLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcnNfYXByaWxfbWFpX2p1bmlf''@;'; put 'put ''anVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbi5fZmViLl9tYXJzX2Fwci5fbWFpX2p1bmlfanVsaV9hdWcuX3NlcC5fb2t0Ll9ub3YuX2Rlcy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3''@;'; put 'put ''ZWVrZGF5czoic1x4ZjhuZGFnX21hbmRhZ190aXJzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sXHhmOHJkYWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic1x4ZjguX21hLl90aS5fb24uX3RvLl9mci5fbFx4ZjguIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJzXHhmOF9tYV90aV9v''@;'; put 'put ''bl90b19mcl9sXHhmOCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgW2tsLl0gSEg6bW0iLExMTEw6ImRkZGQg''@;'; put 'put ''RC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltpIGRhZyBrbC5dIExUIixuZXh0RGF5OiJbaSBtb3JnZW4ga2wuXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2tsLl0gTFQiLGxhc3REYXk6IltpIGdceGU1ciBrbC5dIExUIixsYXN0V2VlazoiW2ZvcnJpZ2VdIGRk''@;'; put 'put ''ZGQgW2tsLl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im9tICVzIixwYXN0OiIlcyBzaWRlbiIsczoibm9lbiBzZWt1bmRlciIsc3M6IiVkIHNla3VuZGVyIixtOiJldHQgbWludXR0IixtbToiJWQgbWludXR0ZXIiLGg6Ilx4ZTluIHRpbWUiLGhoOiIlZCB0aW1l''@;'; put 'put ''ciIsZDoiXHhlOW4gZGFnIixkZDoiJWQgZGFnZXIiLHc6Ilx4ZTluIHVrZSIsd3c6IiVkIHVrZXIiLE06Ilx4ZTluIG1ceGU1bmVkIixNTToiJWQgbVx4ZTVuZWRlciIseToiZXR0IFx4ZTVyIix5eToiJWQgXHhlNXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGlu''@;'; put 'put ''YWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sNjc5NTE6ZnVuY3Rpb24oY2UpeyFmdW5jdGlvbihYKXsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cyYmKGNlLmV4cG9ydHM9WCksWFsiZW5jb2RpbmctaW5kZXhlcyJdPXtiaWc1OltudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxNzM5MiwxOTUwNiwxNzkyMywxNzgzMCwxNzc4NCwxNjAzNTksMTk4MzEsMTc4NDMsMTYyOTkzLDE5NjgyLDE2MzAxMywxNTI1MywxODIzMCwxODI0NCwxOTUyNywxOTUy''@;'; put 'put ''MCwxNDgxNTksMTQ0OTE5LDE2MDU5NCwxNTkzNzEsMTU5OTU0LDE5NTQzLDE3Mjg4MSwxODI1NSwxNzg4MiwxOTU4OSwxNjI5MjQsMTk3MTksMTkxMDgsMTgwODEsMTU4NDk5LDI5MjIxLDE1NDE5NiwxMzc4MjcsMTQ2OTUwLDE0NzI5NywyNjE4OSwyMjI2NyxudWxsLDMyMTQ5LDIyODEzLDE2''@;'; put 'put ''Njg0MSwxNTg2MCwzODcwOCwxNjI3OTksMjM1MTUsMTM4NTkwLDIzMjA0LDEzODYxLDE3MTY5NiwyMzI0OSwyMzQ3OSwyMzgwNCwyNjQ3OCwzNDE5NSwxNzAzMDksMjk3OTMsMjk4NTMsMTQ0NTMsMTM4NTc5LDE0NTA1NCwxNTU2ODEsMTYxMDgsMTUzODIyLDE1MDkzLDMxNDg0LDQwODU1LDE0''@;'; put 'put ''NzgwOSwxNjYxNTcsMTQzODUwLDEzMzc3MCwxNDM5NjYsMTcxNjIsMzM5MjQsNDA4NTQsMzc5MzUsMTg3MzYsMzQzMjMsMjI2NzgsMzg3MzAsMzc0MDAsMzExODQsMzEyODIsMjYyMDgsMjcxNzcsMzQ5NzMsMjk3NzIsMzE2ODUsMjY0OTgsMzEyNzYsMjEwNzEsMzY5MzQsMTM1NDIsMjk2MzYs''@;'; put 'put ''MTU1MDY1LDI5ODk0LDQwOTAzLDIyNDUxLDE4NzM1LDIxNTgwLDE2Njg5LDE0NTAzOCwyMjU1MiwzMTM0NiwxNjI2NjEsMzU3MjcsMTgwOTQsMTU5MzY4LDE2NzY5LDE1NTAzMywzMTY2MiwxNDA0NzYsNDA5MDQsMTQwNDgxLDE0MDQ4OSwxNDA0OTIsNDA5MDUsMzQwNTIsMTQ0ODI3LDE2NTY0''@;'; put 'put ''LDQwOTA2LDE3NjMzLDE3NTYxNSwyNTI4MSwyODc4Miw0MDkwNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDEyNzM2LDEyNzM3LDEyNzM4LDEyNzM5LDEyNzQwLDEzMTM0MCwxMjc0MSwxMzEyODEsMTMxMjc3LDEyNzQyLDEyNzQzLDEzMTI3NSwxMzkyNDAsMTI3NDQsMTMxMjc0LDEyNzQ1LDEyNzQ2LDEyNzQ3LDEyNzQ4LDEzMTM0MiwxMjc0OSwxMjc1''@;'; put 'put ''MCwyNTYsMTkzLDQ2MSwxOTIsMjc0LDIwMSwyODIsMjAwLDMzMiwyMTEsNDY1LDIxMCxudWxsLDc4NzAsbnVsbCw3ODcyLDIwMiwyNTcsMjI1LDQ2MiwyMjQsNTkzLDI3NSwyMzMsMjgzLDIzMiwyOTksMjM3LDQ2NCwyMzYsMzMzLDI0Myw0NjYsMjQyLDM2MywyNTAsNDY4LDI0OSw0NzAsNDcy''@;'; put 'put ''LDQ3NCw0NzYsMjUyLG51bGwsNzg3MSxudWxsLDc4NzMsMjM0LDYwOSw5MTc4LDkxNzksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTcyOTY5LDEzNTQ5MyxudWxsLDI1ODY2''@;'; put 'put ''LG51bGwsbnVsbCwyMDAyOSwyODM4MSw0MDI3MCwzNzM0MyxudWxsLG51bGwsMTYxNTg5LDI1NzQ1LDIwMjUwLDIwMjY0LDIwMzkyLDIwODIyLDIwODUyLDIwODkyLDIwOTY0LDIxMTUzLDIxMTYwLDIxMzA3LDIxMzI2LDIxNDU3LDIxNDY0LDIyMjQyLDIyNzY4LDIyNzg4LDIyNzkxLDIyODM0''@;'; put 'put ''LDIyODM2LDIzMzk4LDIzNDU0LDIzNDU1LDIzNzA2LDI0MTk4LDI0NjM1LDI1OTkzLDI2NjIyLDI2NjI4LDI2NzI1LDI3OTgyLDI4ODYwLDMwMDA1LDMyNDIwLDMyNDI4LDMyNDQyLDMyNDU1LDMyNDYzLDMyNDc5LDMyNTE4LDMyNTY3LDMzNDAyLDMzNDg3LDMzNjQ3LDM1MjcwLDM1Nzc0LDM1''@;'; put 'put ''ODEwLDM2NzEwLDM2NzExLDM2NzE4LDI5NzEzLDMxOTk2LDMyMjA1LDI2OTUwLDMxNDMzLDIxMDMxLG51bGwsbnVsbCxudWxsLG51bGwsMzcyNjAsMzA5MDQsMzcyMTQsMzI5NTYsbnVsbCwzNjEwNywzMzAxNCwxMzM2MDcsbnVsbCxudWxsLDMyOTI3LDQwNjQ3LDE5NjYxLDQwMzkzLDQwNDYw''@;'; put 'put ''LDE5NTE4LDE3MTUxMCwxNTk3NTgsNDA0NTgsMTcyMzM5LDEzNzYxLG51bGwsMjgzMTQsMzMzNDIsMjk5NzcsbnVsbCwxODcwNSwzOTUzMiwzOTU2Nyw0MDg1NywzMTExMSwxNjQ5NzIsMTM4Njk4LDEzMjU2MCwxNDIwNTQsMjAwMDQsMjAwOTcsMjAwOTYsMjAxMDMsMjAxNTksMjAyMDMsMjAy''@;'; put 'put ''NzksMTMzODgsMjA0MTMsMTU5NDQsMjA0ODMsMjA2MTYsMTM0MzcsMTM0NTksMTM0NzcsMjA4NzAsMjI3ODksMjA5NTUsMjA5ODgsMjA5OTcsMjAxMDUsMjExMTMsMjExMzYsMjEyODcsMTM3NjcsMjE0MTcsMTM2NDksMjE0MjQsMTM2NTEsMjE0NDIsMjE1MzksMTM2NzcsMTM2ODIsMTM5NTMs''@;'; put 'put ''MjE2NTEsMjE2NjcsMjE2ODQsMjE2ODksMjE3MTIsMjE3NDMsMjE3ODQsMjE3OTUsMjE4MDAsMTM3MjAsMjE4MjMsMTM3MzMsMTM3NTksMjE5NzUsMTM3NjUsMTYzMjA0LDIxNzk3LG51bGwsMTM0MjEwLDEzNDQyMSwxNTE4NTEsMjE5MDQsMTQyNTM0LDE0ODI4LDEzMTkwNSwzNjQyMiwxNTA5''@;'; put 'put ''NjgsMTY5MTg5LDE2NDY3LDE2NDAzMCwzMDU4NiwxNDIzOTIsMTQ5MDAsMTgzODksMTY0MTg5LDE1ODE5NCwxNTEwMTgsMjU4MjEsMTM0NTI0LDEzNTA5MiwxMzQzNTcsMTM1NDEyLDI1NzQxLDM2NDc4LDEzNDgwNiwxMzQxNTUsMTM1MDEyLDE0MjUwNSwxNjQ0MzgsMTQ4NjkxLG51bGwsMTM0''@;'; put 'put ''NDcwLDE3MDU3MywxNjQwNzMsMTg0MjAsMTUxMjA3LDE0MjUzMCwzOTYwMiwxNDk1MSwxNjk0NjAsMTYzNjUsMTM1NzQsMTUyMjYzLDE2OTk0MCwxNjE5OTIsMTQyNjYwLDQwMzAyLDM4OTMzLG51bGwsMTczNjksMTU1ODEzLDI1NzgwLDIxNzMxLDE0MjY2OCwxNDIyODIsMTM1Mjg3LDE0ODQz''@;'; put 'put ''LDEzNTI3OSwxNTc0MDIsMTU3NDYyLDE2MjIwOCwyNTgzNCwxNTE2MzQsMTM0MjExLDM2NDU2LDEzOTY4MSwxNjY3MzIsMTMyOTEzLG51bGwsMTg0NDMsMTMxNDk3LDE2Mzc4LDIyNjQzLDE0MjczMyxudWxsLDE0ODkzNiwxMzIzNDgsMTU1Nzk5LDEzNDk4OCwxMzQ1NTAsMjE4ODEsMTY1NzEs''@;'; put 'put ''MTczMzgsbnVsbCwxOTEyNCwxNDE5MjYsMTM1MzI1LDMzMTk0LDM5MTU3LDEzNDU1NiwyNTQ2NSwxNDg0NiwxNDExNzMsMzYyODgsMjIxNzcsMjU3MjQsMTU5MzksbnVsbCwxNzM1NjksMTM0NjY1LDE0MjAzMSwxNDI1MzcsbnVsbCwxMzUzNjgsMTQ1ODU4LDE0NzM4LDE0ODU0LDE2NDUwNywx''@;'; put 'put ''MzY4OCwxNTUyMDksMTM5NDYzLDIyMDk4LDEzNDk2MSwxNDI1MTQsMTY5NzYwLDEzNTAwLDI3NzA5LDE1MTA5OSxudWxsLG51bGwsMTYxMTQwLDE0Mjk4NywxMzk3ODQsMTczNjU5LDE2NzExNywxMzQ3NzgsMTM0MTk2LDE1NzcyNCwzMjY1OSwxMzUzNzUsMTQxMzE1LDE0MTYyNSwxMzgxOSwx''@;'; put 'put ''NTIwMzUsMTM0Nzk2LDEzNTA1MywxMzQ4MjYsMTYyNzUsMTM0OTYwLDEzNDQ3MSwxMzU1MDMsMTM0NzMyLG51bGwsMTM0ODI3LDEzNDA1NywxMzQ0NzIsMTM1MzYwLDEzNTQ4NSwxNjM3NywxNDA5NTAsMjU2NTAsMTM1MDg1LDE0NDM3MiwxNjEzMzcsMTQyMjg2LDEzNDUyNiwxMzQ1MjcsMTQy''@;'; put 'put ''NDE3LDE0MjQyMSwxNDg3MiwxMzQ4MDgsMTM1MzY3LDEzNDk1OCwxNzM2MTgsMTU4NTQ0LDE2NzEyMiwxNjczMjEsMTY3MTE0LDM4MzE0LDIxNzA4LDMzNDc2LDIxOTQ1LG51bGwsMTcxNzE1LDM5OTc0LDM5NjA2LDE2MTYzMCwxNDI4MzAsMjg5OTIsMzMxMzMsMzMwMDQsMjM1ODAsMTU3MDQy''@;'; put 'put ''LDMzMDc2LDE0MjMxLDIxMzQzLDE2NDAyOSwzNzMwMiwxMzQ5MDYsMTM0NjcxLDEzNDc3NSwxMzQ5MDcsMTM3ODksMTUxMDE5LDEzODMzLDEzNDM1OCwyMjE5MSwxNDEyMzcsMTM1MzY5LDEzNDY3MiwxMzQ3NzYsMTM1Mjg4LDEzNTQ5NiwxNjQzNTksMTM2Mjc3LDEzNDc3NywxNTExMjAsMTQy''@;'; put 'put ''NzU2LDIzMTI0LDEzNTE5NywxMzUxOTgsMTM1NDEzLDEzNTQxNCwyMjQyOCwxMzQ2NzMsMTYxNDI4LDE2NDU1NywxMzUwOTMsMTM0Nzc5LDE1MTkzNCwxNDA4MywxMzUwOTQsMTM1NTUyLDE1MjI4MCwxNzI3MzMsMTQ5OTc4LDEzNzI3NCwxNDc4MzEsMTY0NDc2LDIyNjgxLDIxMDk2LDEzODUw''@;'; put 'put ''LDE1MzQwNSwzMTY2NiwyMzQwMCwxODQzMiwxOTI0NCw0MDc0MywxODkxOSwzOTk2NywzOTgyMSwxNTQ0ODQsMTQzNjc3LDIyMDExLDEzODEwLDIyMTUzLDIwMDA4LDIyNzg2LDEzODE3NywxOTQ2ODAsMzg3MzcsMTMxMjA2LDIwMDU5LDIwMTU1LDEzNjMwLDIzNTg3LDI0NDAxLDI0NTE2LDE0''@;'; put 'put ''NTg2LDI1MTY0LDI1OTA5LDI3NTE0LDI3NzAxLDI3NzA2LDI4NzgwLDI5MjI3LDIwMDEyLDI5MzU3LDE0OTczNywzMjU5NCwzMTAzNSwzMTk5MywzMjU5NSwxNTYyNjYsMTM1MDUsbnVsbCwxNTY0OTEsMzI3NzAsMzI4OTYsMTU3MjAyLDE1ODAzMywyMTM0MSwzNDkxNiwzNTI2NSwxNjE5NzAs''@;'; put 'put ''MzU3NDQsMzYxMjUsMzgwMjEsMzgyNjQsMzgyNzEsMzgzNzYsMTY3NDM5LDM4ODg2LDM5MDI5LDM5MTE4LDM5MTM0LDM5MjY3LDE3ZTQsNDAwNjAsNDA0NzksNDA2NDQsMjc1MDMsNjM3NTEsMjAwMjMsMTMxMjA3LDM4NDI5LDI1MTQzLDM4MDUwLG51bGwsMjA1MzksMjgxNTgsMTcxMTIzLDQw''@;'; put 'put ''ODcwLDE1ODE3LDM0OTU5LDE0Nzc5MCwyODc5MSwyMzc5NywxOTIzMiwxNTIwMTMsMTM2NTcsMTU0OTI4LDI0ODY2LDE2NjQ1MCwzNjc3NSwzNzM2NiwyOTA3MywyNjM5MywyOTYyNiwxNDQwMDEsMTcyMjk1LDE1NDk5LDEzNzYwMCwxOTIxNiwzMDk0OCwyOTY5OCwyMDkxMCwxNjU2NDcsMTYz''@;'; put 'put ''OTMsMjcyMzUsMTcyNzMwLDE2OTMxLDM0MzE5LDEzMzc0MywzMTI3NCwxNzAzMTEsMTY2NjM0LDM4NzQxLDI4NzQ5LDIxMjg0LDEzOTM5MCwzNzg3NiwzMDQyNSwxNjYzNzEsNDA4NzEsMzA2ODUsMjAxMzEsMjA0NjQsMjA2NjgsMjAwMTUsMjAyNDcsNDA4NzIsMjE1NTYsMzIxMzksMjI2NzQs''@;'; put 'put ''MjI3MzYsMTM4Njc4LDI0MjEwLDI0MjE3LDI0NTE0LDE0MTA3NCwyNTk5NSwxNDQzNzcsMjY5MDUsMjcyMDMsMTQ2NTMxLDI3OTAzLG51bGwsMjkxODQsMTQ4NzQxLDI5NTgwLDE2MDkxLDE1MDAzNSwyMzMxNywyOTg4MSwzNTcxNSwxNTQ3ODgsMTUzMjM3LDMxMzc5LDMxNzI0LDMxOTM5LDMy''@;'; put 'put ''MzY0LDMzNTI4LDM0MTk5LDQwODczLDM0OTYwLDQwODc0LDM2NTM3LDQwODc1LDM2ODE1LDM0MTQzLDM5MzkyLDM3NDA5LDQwODc2LDE2NzM1MywxMzYyNTUsMTY0OTcsMTcwNTgsMjMwNjYsbnVsbCxudWxsLG51bGwsMzkwMTYsMjY0NzUsMTcwMTQsMjIzMzMsbnVsbCwzNDI2MiwxNDk4ODMs''@;'; put 'put ''MzM0NzEsMTYwMDEzLDE5NTg1LDE1OTA5MiwyMzkzMSwxNTg0ODUsMTU5Njc4LDQwODc3LDQwODc4LDIzNDQ2LDQwODc5LDI2MzQzLDMyMzQ3LDI4MjQ3LDMxMTc4LDE1NzUyLDE3NjAzLDE0Mzk1OCwxNDEyMDYsMTczMDYsMTc3MTgsbnVsbCwyMzc2NSwxNDYyMDIsMzU1NzcsMjM2NzIsMTU2''@;'; put 'put ''MzQsMTQ0NzIxLDIzOTI4LDQwODgyLDI5MDE1LDE3NzUyLDE0NzY5MiwxMzg3ODcsMTk1NzUsMTQ3MTIsMTMzODYsMTMxNDkyLDE1ODc4NSwzNTUzMiwyMDQwNCwxMzE2NDEsMjI5NzUsMzMxMzIsMzg5OTgsMTcwMjM0LDI0Mzc5LDEzNDA0NyxudWxsLDEzOTcxMywxNjYyNTMsMTY2NDIsMTgx''@;'; put 'put ''MDcsMTY4MDU3LDE2MTM1LDQwODgzLDE3MjQ2OSwxNjYzMiwxNDI5NCwxODE2NywxNTg3OTAsMTY3NjQsMTY1NTU0LDE2MDc2NywxNzc3MywxNDU0OCwxNTI3MzAsMTc3NjEsMTc2OTEsMTk4NDksMTk1NzksMTk4MzAsMTc4OTgsMTYzMjgsMTUwMjg3LDEzOTIxLDE3NjMwLDE3NTk3LDE2ODc3''@;'; put 'put ''LDIzODcwLDIzODgwLDIzODk0LDE1ODY4LDE0MzUxLDIzOTcyLDIzOTkzLDE0MzY4LDE0MzkyLDI0MTMwLDI0MjUzLDI0MzU3LDI0NDUxLDE0NjAwLDE0NjEyLDE0NjU1LDE0NjY5LDI0NzkxLDI0ODkzLDIzNzgxLDE0NzI5LDI1MDE1LDI1MDE3LDI1MDM5LDE0Nzc2LDI1MTMyLDI1MjMyLDI1''@;'; put 'put ''MzE3LDI1MzY4LDE0ODQwLDIyMTkzLDE0ODUxLDI1NTcwLDI1NTk1LDI1NjA3LDI1NjkwLDE0OTIzLDI1NzkyLDIzODI5LDIyMDQ5LDQwODYzLDE0OTk5LDI1OTkwLDE1MDM3LDI2MTExLDI2MTk1LDE1MDkwLDI2MjU4LDE1MTM4LDI2MzkwLDE1MTcwLDI2NTMyLDI2NjI0LDE1MTkyLDI2Njk4''@;'; put 'put ''LDI2NzU2LDE1MjE4LDE1MjE3LDE1MjI3LDI2ODg5LDI2OTQ3LDI5Mjc2LDI2OTgwLDI3MDM5LDI3MDEzLDE1MjkyLDI3MDk0LDE1MzI1LDI3MjM3LDI3MjUyLDI3MjQ5LDI3MjY2LDE1MzQwLDI3Mjg5LDE1MzQ2LDI3MzA3LDI3MzE3LDI3MzQ4LDI3MzgyLDI3NTIxLDI3NTg1LDI3NjI2LDI3''@;'; put 'put ''NzY1LDI3ODE4LDE1NTYzLDI3OTA2LDI3OTEwLDI3OTQyLDI4MDMzLDE1NTk5LDI4MDY4LDI4MDgxLDI4MTgxLDI4MTg0LDI4MjAxLDI4Mjk0LDE2NjMzNiwyODM0NywyODM4NiwyODM3OCw0MDgzMSwyODM5MiwyODM5MywyODQ1MiwyODQ2OCwxNTY4NiwxNDcyNjUsMjg1NDUsMjg2MDYsMTU3''@;'; put 'put ''MjIsMTU3MzMsMjkxMTEsMjM3MDUsMTU3NTQsMjg3MTYsMTU3NjEsMjg3NTIsMjg3NTYsMjg3ODMsMjg3OTksMjg4MDksMTMxODc3LDE3MzQ1LDEzODA5LDEzNDg3MiwxNDcxNTksMjI0NjIsMTU5NDQzLDI4OTkwLDE1MzU2OCwxMzkwMiwyNzA0MiwxNjY4ODksMjM0MTIsMzEzMDUsMTUzODI1''@;'; put 'put ''LDE2OTE3NywzMTMzMywzMTM1NywxNTQwMjgsMzE0MTksMzE0MDgsMzE0MjYsMzE0MjcsMjkxMzcsMTU2ODEzLDE2ODQyLDMxNDUwLDMxNDUzLDMxNDY2LDE2ODc5LDIxNjgyLDE1NDYyNSwzMTQ5OSwzMTU3MywzMTUyOSwxNTIzMzQsMTU0ODc4LDMxNjUwLDMxNTk5LDMzNjkyLDE1NDU0OCwx''@;'; put 'put ''NTg4NDcsMzE2OTYsMzM4MjUsMzE2MzQsMzE2NzIsMTU0OTEyLDE1Nzg5LDE1NDcyNSwzMzkzOCwzMTczOCwzMTc1MCwzMTc5NywxNTQ4MTcsMzE4MTIsMzE4NzUsMTQ5NjM0LDMxOTEwLDI2MjM3LDE0ODg1NiwzMTk0NSwzMTk0MywzMTk3NCwzMTg2MCwzMTk4NywzMTk4OSwzMTk1MCwzMjM1''@;'; put 'put ''OSwxNzY5MywxNTkzMDAsMzIwOTMsMTU5NDQ2LDI5ODM3LDMyMTM3LDMyMTcxLDI4OTgxLDMyMTc5LDMyMjEwLDE0NzU0MywxNTU2ODksMzIyMjgsMTU2MzUsMzIyNDUsMTM3MjA5LDMyMjI5LDE2NDcxNywzMjI4NSwxNTU5MzcsMTU1OTk0LDMyMzY2LDMyNDAyLDE3MTk1LDM3OTk2LDMyMjk1''@;'; put 'put ''LDMyNTc2LDMyNTc3LDMyNTgzLDMxMDMwLDE1NjM2OCwzOTM5MywzMjY2MywxNTY0OTcsMzI2NzUsMTM2ODAxLDEzMTE3NiwxNzc1NiwxNDUyNTQsMTc2NjcsMTY0NjY2LDMyNzYyLDE1NjgwOSwzMjc3MywzMjc3NiwzMjc5NywzMjgwOCwzMjgxNSwxNzIxNjcsMTU4OTE1LDMyODI3LDMyODI4''@;'; put 'put ''LDMyODY1LDE0MTA3NiwxODgyNSwxNTcyMjIsMTQ2OTE1LDE1NzQxNiwyNjQwNSwzMjkzNSwxNjY0NzIsMzMwMzEsMzMwNTAsMjI3MDQsMTQxMDQ2LDI3Nzc1LDE1NjgyNCwxNTE0ODAsMjU4MzEsMTM2MzMwLDMzMzA0LDEzNzMxMCwyNzIxOSwxNTAxMTcsMTUwMTY1LDE3NTMwLDMzMzIxLDEz''@;'; put 'put ''MzkwMSwxNTgyOTAsMTQ2ODE0LDIwNDczLDEzNjQ0NSwzNDAxOCwzMzYzNCwxNTg0NzQsMTQ5OTI3LDE0NDY4OCwxMzcwNzUsMTQ2OTM2LDMzNDUwLDI2OTA3LDE5NDk2NCwxNjg1OSwzNDEyMywzMzQ4OCwzMzU2MiwxMzQ2NzgsMTM3MTQwLDE0MDE3LDE0Mzc0MSwxNDQ3MzAsMzM0MDMsMzM1''@;'; put 'put ''MDYsMzM1NjAsMTQ3MDgzLDE1OTEzOSwxNTg0NjksMTU4NjE1LDE0NDg0NiwxNTgwNywzMzU2NSwyMTk5NiwzMzY2OSwxNzY3NSwxNTkxNDEsMzM3MDgsMzM3MjksMzM3NDcsMTM0MzgsMTU5NDQ0LDI3MjIzLDM0MTM4LDEzNDYyLDE1OTI5OCwxNDMwODcsMzM4ODAsMTU0NTk2LDMzOTA1LDE1''@;'; put 'put ''ODI3LDE3NjM2LDI3MzAzLDMzODY2LDE0NjYxMywzMTA2NCwzMzk2MCwxNTg2MTQsMTU5MzUxLDE1OTI5OSwzNDAxNCwzMzgwNywzMzY4MSwxNzU2OCwzMzkzOSwzNDAyMCwxNTQ3NjksMTY5NjAsMTU0ODE2LDE3NzMxLDM0MTAwLDIzMjgyLDE1OTM4NSwxNzcwMywzNDE2MywxNzY4NiwyNjU1''@;'; put 'put ''OSwzNDMyNiwxNjU0MTMsMTY1NDM1LDM0MjQxLDE1OTg4MCwzNDMwNiwxMzY1NzgsMTU5OTQ5LDE5NDk5NCwxNzc3MCwzNDM0NCwxMzg5NiwxMzczNzgsMjE0OTUsMTYwNjY2LDM0NDMwLDM0NjczLDE3MjI4MCwzNDc5OCwxNDIzNzUsMzQ3MzcsMzQ3NzgsMzQ4MzEsMjIxMTMsMzQ0MTIsMjY3''@;'; put 'put ''MTAsMTc5MzUsMzQ4ODUsMzQ4ODYsMTYxMjQ4LDE0Njg3MywxNjEyNTIsMzQ5MTAsMzQ5NzIsMTgwMTEsMzQ5OTYsMzQ5OTcsMjU1MzcsMzUwMTMsMzA1ODMsMTYxNTUxLDM1MjA3LDM1MjEwLDM1MjM4LDM1MjQxLDM1MjM5LDM1MjYwLDE2NjQzNywzNTMwMywxNjIwODQsMTYyNDkzLDM1NDg0''@;'; put 'put ''LDMwNjExLDM3Mzc0LDM1NDcyLDE2MjM5MywzMTQ2NSwxNjI2MTgsMTQ3MzQzLDE4MTk1LDE2MjYxNiwyOTA1MiwzNTU5NiwzNTYxNSwxNTI2MjQsMTUyOTMzLDM1NjQ3LDM1NjYwLDM1NjYxLDM1NDk3LDE1MDEzOCwzNTcyOCwzNTczOSwzNTUwMywxMzY5MjcsMTc5NDEsMzQ4OTUsMzU5OTUs''@;'; put 'put ''MTYzMTU2LDE2MzIxNSwxOTUwMjgsMTQxMTcsMTYzMTU1LDM2MDU0LDE2MzIyNCwxNjMyNjEsMzYxMTQsMzYwOTksMTM3NDg4LDM2MDU5LDI4NzY0LDM2MTEzLDE1MDcyOSwxNjA4MCwzNjIxNSwzNjI2NSwxNjM4NDIsMTM1MTg4LDE0OTg5OCwxNTIyOCwxNjQyODQsMTYwMDEyLDMxNDYzLDM2''@;'; put 'put ''NTI1LDM2NTM0LDM2NTQ3LDM3NTg4LDM2NjMzLDM2NjUzLDE2NDcwOSwxNjQ4ODIsMzY3NzMsMzc2MzUsMTcyNzAzLDEzMzcxMiwzNjc4NywxODczMCwxNjYzNjYsMTY1MTgxLDE0Njg3NSwyNDMxMiwxNDM5NzAsMzY4NTcsMTcyMDUyLDE2NTU2NCwxNjUxMjEsMTQwMDY5LDE0NzIwLDE1OTQ0''@;'; put 'put ''NywzNjkxOSwxNjUxODAsMTYyNDk0LDM2OTYxLDE2NTIyOCwxNjUzODcsMzcwMzIsMTY1NjUxLDM3MDYwLDE2NTYwNiwzNzAzOCwzNzExNywzNzIyMywxNTA4OCwzNzI4OSwzNzMxNiwzMTkxNiwxNjYxOTUsMTM4ODg5LDM3MzkwLDI3ODA3LDM3NDQxLDM3NDc0LDE1MzAxNywzNzU2MSwxNjY1''@;'; put 'put ''OTgsMTQ2NTg3LDE2NjY2OCwxNTMwNTEsMTM0NDQ5LDM3Njc2LDM3NzM5LDE2NjYyNSwxNjY4OTEsMjg4MTUsMjMyMzUsMTY2NjI2LDE2NjYyOSwxODc4OSwzNzQ0NCwxNjY4OTIsMTY2OTY5LDE2NjkxMSwzNzc0NywzNzk3OSwzNjU0MCwzODI3NywzODMxMCwzNzkyNiwzODMwNCwyODY2Miwx''@;'; put 'put ''NzA4MSwxNDA5MjIsMTY1NTkyLDEzNTgwNCwxNDY5OTAsMTg5MTEsMjc2NzYsMzg1MjMsMzg1NTAsMTY3NDgsMzg1NjMsMTU5NDQ1LDI1MDUwLDM4NTgyLDMwOTY1LDE2NjYyNCwzODU4OSwyMTQ1MiwxODg0OSwxNTg5MDQsMTMxNzAwLDE1NjY4OCwxNjgxMTEsMTY4MTY1LDE1MDIyNSwxMzc0''@;'; put 'put ''OTMsMTQ0MTM4LDM4NzA1LDM0MzcwLDM4NzEwLDE4OTU5LDE3NzI1LDE3Nzk3LDE1MDI0OSwyODc4OSwyMzM2MSwzODY4MywzODc0OCwxNjg0MDUsMzg3NDMsMjMzNzAsMTY4NDI3LDM4NzUxLDM3OTI1LDIwNjg4LDE0MzU0MywxNDM1NDgsMzg3OTMsMzg4MTUsMzg4MzMsMzg4NDYsMzg4NDgs''@;'; put 'put ''Mzg4NjYsMzg4ODAsMTUyNjg0LDM4ODk0LDI5NzI0LDE2OTAxMSwzODkxMSwzODkwMSwxNjg5ODksMTYyMTcwLDE5MTUzLDM4OTY0LDM4OTYzLDM4OTg3LDM5MDE0LDE1MTE4LDE2MDExNywxNTY5NywxMzI2NTYsMTQ3ODA0LDE1MzM1MCwzOTExNCwzOTA5NSwzOTExMiwzOTExMSwxOTE5OSwx''@;'; put 'put ''NTkwMTUsMTM2OTE1LDIxOTM2LDM5MTM3LDM5MTQyLDM5MTQ4LDM3NzUyLDM5MjI1LDE1MDA1NywxOTMxNCwxNzAwNzEsMTcwMjQ1LDM5NDEzLDM5NDM2LDM5NDgzLDM5NDQwLDM5NTEyLDE1MzM4MSwxNDAyMCwxNjgxMTMsMTcwOTY1LDM5NjQ4LDM5NjUwLDE3MDc1NywzOTY2OCwxOTQ3MCwz''@;'; put 'put ''OTcwMCwzOTcyNSwxNjUzNzYsMjA1MzIsMzk3MzIsMTU4MTIwLDE0NTMxLDE0MzQ4NSwzOTc2MCwzOTc0NCwxNzEzMjYsMjMxMDksMTM3MzE1LDM5ODIyLDE0ODA0MywzOTkzOCwzOTkzNSwzOTk0OCwxNzE2MjQsNDA0MDQsMTcxOTU5LDE3MjQzNCwxNzI0NTksMTcyMjU3LDE3MjMyMywxNzI1''@;'; put 'put ''MTEsNDAzMTgsNDAzMjMsMTcyMzQwLDQwNDYyLDI2NzYwLDQwMzg4LDEzOTYxMSwxNzI0MzUsMTcyNTc2LDEzNzUzMSwxNzI1OTUsNDAyNDksMTcyMjE3LDE3MjcyNCw0MDU5Miw0MDU5Nyw0MDYwNiw0MDYxMCwxOTc2NCw0MDYxOCw0MDYyMywxNDgzMjQsNDA2NDEsMTUyMDAsMTQ4MjEsMTU2''@;'; put 'put ''NDUsMjAyNzQsMTQyNzAsMTY2OTU1LDQwNzA2LDQwNzEyLDE5MzUwLDM3OTI0LDE1OTEzOCw0MDcyNyw0MDcyNiw0MDc2MSwyMjE3NSwyMjE1NCw0MDc3MywzOTM1MiwxNjgwNzUsMzg4OTgsMzM5MTksNDA4MDIsNDA4MDksMzE0NTIsNDA4NDYsMjkyMDYsMTkzOTAsMTQ5ODc3LDE0OTk0Nywy''@;'; put 'put ''OTA0NywxNTAwMDgsMTQ4Mjk2LDE1MDA5NywyOTU5OCwxNjY4NzQsMTM3NDY2LDMxMTM1LDE2NjI3MCwxNjc0NzgsMzc3MzcsMzc4NzUsMTY2NDY4LDM3NjEyLDM3NzYxLDM3ODM1LDE2NjI1MiwxNDg2NjUsMjkyMDcsMTYxMDcsMzA1NzgsMzEyOTksMjg4ODAsMTQ4NTk1LDE0ODQ3MiwyOTA1''@;'; put 'put ''NCwxMzcxOTksMjg4MzUsMTM3NDA2LDE0NDc5MywxNjA3MSwxMzczNDksMTUyNjIzLDEzNzIwOCwxNDExNCwxMzY5NTUsMTM3MjczLDE0MDQ5LDEzNzA3NiwxMzc0MjUsMTU1NDY3LDE0MTE1LDEzNjg5NiwyMjM2MywxNTAwNTMsMTM2MTkwLDEzNTg0OCwxMzYxMzQsMTM2Mzc0LDM0MDUxLDE0''@;'; put 'put ''NTA2MiwzNDA1MSwzMzg3NywxNDk5MDgsMTYwMTAxLDE0Njk5MywxNTI5MjQsMTQ3MTk1LDE1OTgyNiwxNzY1MiwxNDUxMzQsMTcwMzk3LDE1OTUyNiwyNjYxNywxNDEzMSwxNTM4MSwxNTg0NywyMjYzNiwxMzc1MDYsMjY2NDAsMTY0NzEsMTQ1MjE1LDE0NzY4MSwxNDc1OTUsMTQ3NzI3LDE1''@;'; put 'put ''ODc1MywyMTcwNywyMjE3NCwxNTczNjEsMjIxNjIsMTM1MTM1LDEzNDA1NiwxMzQ2NjksMzc4MzAsMTY2Njc1LDM3Nzg4LDIwMjE2LDIwNzc5LDE0MzYxLDE0ODUzNCwyMDE1NiwxMzIxOTcsMTMxOTY3LDIwMjk5LDIwMzYyLDE1MzE2OSwyMzE0NCwxMzE0OTksMTMyMDQzLDE0NzQ1LDEzMTg1''@;'; put 'put ''MCwxMzIxMTYsMTMzNjUsMjAyNjUsMTMxNzc2LDE2NzYwMywxMzE3MDEsMzU1NDYsMTMxNTk2LDIwMTIwLDIwNjg1LDIwNzQ5LDIwMzg2LDIwMjI3LDE1MDAzMCwxNDcwODIsMjAyOTAsMjA1MjYsMjA1ODgsMjA2MDksMjA0MjgsMjA0NTMsMjA1NjgsMjA3MzIsMjA4MjUsMjA4MjcsMjA4Mjks''@;'; put 'put ''MjA4MzAsMjgyNzgsMTQ0Nzg5LDE0NzAwMSwxNDcxMzUsMjgwMTgsMTM3MzQ4LDE0NzA4MSwyMDkwNCwyMDkzMSwxMzI1NzYsMTc2MjksMTMyMjU5LDEzMjI0MiwxMzIyNDEsMzYyMTgsMTY2NTU2LDEzMjg3OCwyMTA4MSwyMTE1NiwxMzMyMzUsMjEyMTcsMzc3NDIsMTgwNDIsMjkwNjgsMTQ4''@;'; put 'put ''MzY0LDEzNDE3NiwxNDk5MzIsMTM1Mzk2LDI3MDg5LDEzNDY4NSwyOTgxNywxNjA5NCwyOTg0OSwyOTcxNiwyOTc4MiwyOTU5MiwxOTM0MiwxNTAyMDQsMTQ3NTk3LDIxNDU2LDEzNzAwLDI5MTk5LDE0NzY1NywyMTk0MCwxMzE5MDksMjE3MDksMTM0MDg2LDIyMzAxLDM3NDY5LDM4NjQ0LDM3''@;'; put 'put ''NzM0LDIyNDkzLDIyNDEzLDIyMzk5LDEzODg2LDIyNzMxLDIzMTkzLDE2NjQ3MCwxMzY5NTQsMTM3MDcxLDEzNjk3NiwyMzA4NCwyMjk2OCwzNzUxOSwyMzE2NiwyMzI0NywyMzA1OCwxNTM5MjYsMTM3NzE1LDEzNzMxMywxNDgxMTcsMTQwNjksMjc5MDksMjk3NjMsMjMwNzMsMTU1MjY3LDIz''@;'; put 'put ''MTY5LDE2Njg3MSwxMzIxMTUsMzc4NTYsMjk4MzYsMTM1OTM5LDI4OTMzLDE4ODAyLDM3ODk2LDE2NjM5NSwzNzgyMSwxNDI0MCwyMzU4MiwyMzcxMCwyNDE1OCwyNDEzNiwxMzc2MjIsMTM3NTk2LDE0NjE1OCwyNDI2OSwyMzM3NSwxMzc0NzUsMTM3NDc2LDE0MDgxLDEzNzM3NiwxNDA0NSwx''@;'; put 'put ''MzY5NTgsMTQwMzUsMzMwNjYsMTY2NDcxLDEzODY4MiwxNDQ0OTgsMTY2MzEyLDI0MzMyLDI0MzM0LDEzNzUxMSwxMzcxMzEsMjMxNDcsMTM3MDE5LDIzMzY0LDM0MzI0LDE2MTI3NywzNDkxMiwyNDcwMiwxNDE0MDgsMTQwODQzLDI0NTM5LDE2MDU2LDE0MDcxOSwxNDA3MzQsMTY4MDcyLDE1''@;'; put 'put ''OTYwMywyNTAyNCwxMzExMzQsMTMxMTQyLDE0MDgyNywyNDk4NSwyNDk4NCwyNDY5MywxNDI0OTEsMTQyNTk5LDE0OTIwNCwxNjgyNjksMjU3MTMsMTQ5MDkzLDE0MjE4NiwxNDg4OSwxNDIxMTQsMTQ0NDY0LDE3MDIxOCwxNDI5NjgsMjUzOTksMTczMTQ3LDI1NzgyLDI1MzkzLDI1NTUzLDE0''@;'; put 'put ''OTk4NywxNDI2OTUsMjUyNTIsMTQyNDk3LDI1NjU5LDI1OTYzLDI2OTk0LDE1MzQ4LDE0MzUwMiwxNDQwNDUsMTQ5ODk3LDE0NDA0MywyMTc3MywxNDQwOTYsMTM3NDMzLDE2OTAyMywyNjMxOCwxNDQwMDksMTQzNzk1LDE1MDcyLDE2Nzg0LDE1Mjk2NCwxNjY2OTAsMTUyOTc1LDEzNjk1Niwx''@;'; put 'put ''NTI5MjMsMTUyNjEzLDMwOTU4LDE0MzYxOSwxMzcyNTgsMTQzOTI0LDEzNDEyLDE0Mzg4NywxNDM3NDYsMTQ4MTY5LDI2MjU0LDE1OTAxMiwyNjIxOSwxOTM0NywyNjE2MCwxNjE5MDQsMTM4NzMxLDI2MjExLDE0NDA4MiwxNDQwOTcsMjYxNDIsMTUzNzE0LDE0NTQ1LDE0NTQ2NiwxNDUzNDAs''@;'; put 'put ''MTUyNTcsMTQ1MzE0LDE0NDM4MiwyOTkwNCwxNTI1NCwyNjUxMSwxNDkwMzQsMjY4MDYsMjY2NTQsMTUzMDAsMjczMjYsMTQ0MzUsMTQ1MzY1LDE0ODYxNSwyNzE4NywyNzIxOCwyNzMzNywyNzM5NywxMzc0OTAsMjU4NzMsMjY3NzYsMjcyMTIsMTUzMTksMjcyNTgsMjc0NzksMTQ3MzkyLDE0''@;'; put 'put ''NjU4NiwzNzc5MiwzNzYxOCwxNjY4OTAsMTY2NjAzLDM3NTEzLDE2Mzg3MCwxNjYzNjQsMzc5OTEsMjgwNjksMjg0MjcsMTQ5OTk2LDI4MDA3LDE0NzMyNywxNTc1OSwyODE2NCwxNDc1MTYsMjMxMDEsMjgxNzAsMjI1OTksMjc5NDAsMzA3ODYsMjg5ODcsMTQ4MjUwLDE0ODA4NiwyODkxMywy''@;'; put 'put ''OTI2NCwyOTMxOSwyOTMzMiwxNDkzOTEsMTQ5Mjg1LDIwODU3LDE1MDE4MCwxMzI1ODcsMjk4MTgsMTQ3MTkyLDE0NDk5MSwxNTAwOTAsMTQ5NzgzLDE1NTYxNywxNjEzNCwxNjA0OSwxNTAyMzksMTY2OTQ3LDE0NzI1MywyNDc0MywxNjExNSwyOTkwMCwyOTc1NiwzNzc2NywyOTc1MSwxNzU2''@;'; put 'put ''NywxNTkyMTAsMTc3NDUsMzAwODMsMTYyMjcsMTUwNzQ1LDE1MDc5MCwxNjIxNiwzMDAzNywzMDMyMywxNzM1MTAsMTUxMjksMjk4MDAsMTY2NjA0LDE0OTkzMSwxNDk5MDIsMTUwOTksMTU4MjEsMTUwMDk0LDE2MTI3LDE0OTk1NywxNDk3NDcsMzczNzAsMjIzMjIsMzc2OTgsMTY2NjI3LDEz''@;'; put 'put ''NzMxNiwyMDcwMywxNTIwOTcsMTUyMDM5LDMwNTg0LDE0MzkyMiwzMDQ3OCwzMDQ3OSwzMDU4NywxNDkxNDMsMTQ1MjgxLDE0OTQyLDE0OTc0NCwyOTc1MiwyOTg1MSwxNjA2MywxNTAyMDIsMTUwMjE1LDE2NTg0LDE1MDE2NiwxNTYwNzgsMzc2MzksMTUyOTYxLDMwNzUwLDMwODYxLDMwODU2''@;'; put 'put ''LDMwOTMwLDI5NjQ4LDMxMDY1LDE2MTYwMSwxNTMzMTUsMTY2NTQsMzExMzEsMzM5NDIsMzExNDEsMjcxODEsMTQ3MTk0LDMxMjkwLDMxMjIwLDE2NzUwLDEzNjkzNCwxNjY5MCwzNzQyOSwzMTIxNywxMzQ0NzYsMTQ5OTAwLDEzMTczNywxNDY4NzQsMTM3MDcwLDEzNzE5LDIxODY3LDEzNjgw''@;'; put 'put ''LDEzOTk0LDEzMTU0MCwxMzQxNTcsMzE0NTgsMjMxMjksMTQxMDQ1LDE1NDI4NywxNTQyNjgsMjMwNTMsMTMxNjc1LDMwOTYwLDIzMDgyLDE1NDU2NiwzMTQ4NiwxNjg4OSwzMTgzNywzMTg1MywxNjkxMywxNTQ1NDcsMTU1MzI0LDE1NTMwMiwzMTk0OSwxNTAwMDksMTM3MTM2LDMxODg2LDMx''@;'; put 'put ''ODY4LDMxOTE4LDI3MzE0LDMyMjIwLDMyMjYzLDMyMjExLDMyNTkwLDE1NjI1NywxNTU5OTYsMTYyNjMyLDMyMTUxLDE1NTI2NiwxNzAwMiwxNTg1ODEsMTMzMzk4LDI2NTgyLDEzMTE1MCwxNDQ4NDcsMjI0NjgsMTU2NjkwLDE1NjY2NCwxNDk4NTgsMzI3MzMsMzE1MjcsMTMzMTY0LDE1NDM0''@;'; put 'put ''NSwxNTQ5NDcsMzE1MDAsMTU1MTUwLDM5Mzk4LDM0MzczLDM5NTIzLDI3MTY0LDE0NDQ0NywxNDgxOCwxNTAwMDcsMTU3MTAxLDM5NDU1LDE1NzA4OCwzMzkyMCwxNjAwMzksMTU4OTI5LDE3NjQyLDMzMDc5LDE3NDEwLDMyOTY2LDMzMDMzLDMzMDkwLDE1NzYyMCwzOTEwNywxNTgyNzQsMzMz''@;'; put 'put ''NzgsMzMzODEsMTU4Mjg5LDMzODc1LDE1OTE0MywzNDMyMCwxNjAyODMsMjMxNzQsMTY3NjcsMTM3MjgwLDIzMzM5LDEzNzM3NywyMzI2OCwxMzc0MzIsMzQ0NjQsMTk1MDA0LDE0NjgzMSwzNDg2MSwxNjA4MDIsMjMwNDIsMzQ5MjYsMjAyOTMsMzQ5NTEsMzUwMDcsMzUwNDYsMzUxNzMsMzUx''@;'; put 'put ''NDksMTUzMjE5LDM1MTU2LDE2MTY2OSwxNjE2NjgsMTY2OTAxLDE2Njg3MywxNjY4MTIsMTY2MzkzLDE2MDQ1LDMzOTU1LDE4MTY1LDE4MTI3LDE0MzIyLDM1Mzg5LDM1MzU2LDE2OTAzMiwyNDM5NywzNzQxOSwxNDgxMDAsMjYwNjgsMjg5NjksMjg4NjgsMTM3Mjg1LDQwMzAxLDM1OTk5LDM2''@;'; put 'put ''MDczLDE2MzI5MiwyMjkzOCwzMDY1OSwyMzAyNCwxNzI2MiwxNDAzNiwzNjM5NCwzNjUxOSwxNTA1MzcsMzY2NTYsMzY2ODIsMTcxNDAsMjc3MzYsMjg2MDMsMTQwMDY1LDE4NTg3LDI4NTM3LDI4Mjk5LDEzNzE3OCwzOTkxMywxNDAwNSwxNDk4MDcsMzcwNTEsMzcwMTUsMjE4NzMsMTg2OTQs''@;'; put 'put ''MzczMDcsMzc4OTIsMTY2NDc1LDE2NDgyLDE2NjY1MiwzNzkyNywxNjY5NDEsMTY2OTcxLDM0MDIxLDM1MzcxLDM4Mjk3LDM4MzExLDM4Mjk1LDM4Mjk0LDE2NzIyMCwyOTc2NSwxNjA2NiwxNDk3NTksMTUwMDgyLDE0ODQ1OCwxNjEwMywxNDM5MDksMzg1NDMsMTY3NjU1LDE2NzUyNiwxNjc1''@;'; put 'put ''MjUsMTYwNzYsMTQ5OTk3LDE1MDEzNiwxNDc0MzgsMjk3MTQsMjk4MDMsMTYxMjQsMzg3MjEsMTY4MTEyLDI2Njk1LDE4OTczLDE2ODA4MywxNTM1NjcsMzg3NDksMzc3MzYsMTY2MjgxLDE2Njk1MCwxNjY3MDMsMTU2NjA2LDM3NTYyLDIzMzEzLDM1Njg5LDE4NzQ4LDI5Njg5LDE0Nzk5NSwz''@;'; put 'put ''ODgxMSwzODc2OSwzOTIyNCwxMzQ5NTAsMjQwMDEsMTY2ODUzLDE1MDE5NCwzODk0MywxNjkxNzgsMzc2MjIsMTY5NDMxLDM3MzQ5LDE3NjAwLDE2NjczNiwxNTAxMTksMTY2NzU2LDM5MTMyLDE2NjQ2OSwxNjEyOCwzNzQxOCwxODcyNSwzMzgxMiwzOTIyNywzOTI0NSwxNjI1NjYsMTU4Njks''@;'; put 'put ''MzkzMjMsMTkzMTEsMzkzMzgsMzk1MTYsMTY2NzU3LDE1MzgwMCwyNzI3OSwzOTQ1NywyMzI5NCwzOTQ3MSwxNzAyMjUsMTkzNDQsMTcwMzEyLDM5MzU2LDE5Mzg5LDE5MzUxLDM3NzU3LDIyNjQyLDEzNTkzOCwyMjU2MiwxNDk5NDQsMTM2NDI0LDMwNzg4LDE0MTA4NywxNDY4NzIsMjY4MjEs''@;'; put 'put ''MTU3NDEsMzc5NzYsMTQ2MzEsMjQ5MTIsMTQxMTg1LDE0MTY3NSwyNDgzOSw0MDAxNSw0MDAxOSw0MDA1OSwzOTk4OSwzOTk1MiwzOTgwNywzOTg4NywxNzE1NjUsMzk4MzksMTcyNTMzLDE3MjI4Niw0MDIyNSwxOTYzMCwxNDc3MTYsNDA0NzIsMTk2MzIsNDAyMDQsMTcyNDY4LDE3MjI2OSwx''@;'; put 'put ''NzIyNzUsMTcwMjg3LDQwMzU3LDMzOTgxLDE1OTI1MCwxNTk3MTEsMTU4NTk0LDM0MzAwLDE3NzE1LDE1OTE0MCwxNTkzNjQsMTU5MjE2LDMzODI0LDM0Mjg2LDE1OTIzMiwxNDUzNjcsMTU1NzQ4LDMxMjAyLDE0NDc5NiwxNDQ5NjAsMTg3MzMsMTQ5OTgyLDE1NzE0LDM3ODUxLDM3NTY2LDM3''@;'; put 'put ''NzA0LDEzMTc3NSwzMDkwNSwzNzQ5NSwzNzk2NSwyMDQ1MiwxMzM3NiwzNjk2NCwxNTI5MjUsMzA3ODEsMzA4MDQsMzA5MDIsMzA3OTUsMTM3MDQ3LDE0MzgxNywxNDk4MjUsMTM5NzgsMjAzMzgsMjg2MzQsMjg2MzMsMjg3MDIsMjg3MDIsMjE1MjQsMTQ3ODkzLDIyNDU5LDIyNzcxLDIyNDEw''@;'; put 'put ''LDQwMjE0LDIyNDg3LDI4OTgwLDEzNDg3LDE0Nzg4NCwyOTE2MywxNTg3ODQsMTUxNDQ3LDIzMzM2LDEzNzE0MSwxNjY0NzMsMjQ4NDQsMjMyNDYsMjMwNTEsMTcwODQsMTQ4NjE2LDE0MTI0LDE5MzIzLDE2NjM5NiwzNzgxOSwzNzgxNiwxMzc0MzAsMTM0OTQxLDMzOTA2LDE1ODkxMiwxMzYy''@;'; put 'put ''MTEsMTQ4MjE4LDE0MjM3NCwxNDg0MTcsMjI5MzIsMTQ2ODcxLDE1NzUwNSwzMjE2OCwxNTU5OTUsMTU1ODEyLDE0OTk0NSwxNDk4OTksMTY2Mzk0LDM3NjA1LDI5NjY2LDE2MTA1LDI5ODc2LDE2Njc1NSwxMzczNzUsMTYwOTcsMTUwMTk1LDI3MzUyLDI5NjgzLDI5NjkxLDE2MDg2LDE1MDA3''@;'; put 'put ''OCwxNTAxNjQsMTM3MTc3LDE1MDExOCwxMzIwMDcsMTM2MjI4LDE0OTk4OSwyOTc2OCwxNDk3ODIsMjg4MzcsMTQ5ODc4LDM3NTA4LDI5NjcwLDM3NzI3LDEzMjM1MCwzNzY4MSwxNjY2MDYsMTY2NDIyLDM3NzY2LDE2Njg4NywxNTMwNDUsMTg3NDEsMTY2NTMwLDI5MDM1LDE0OTgyNywxMzQz''@;'; put 'put ''OTksMjIxODAsMTMyNjM0LDEzNDEyMywxMzQzMjgsMjE3NjIsMzExNzIsMTM3MjEwLDMyMjU0LDEzNjg5OCwxNTAwOTYsMTM3Mjk4LDE3NzEwLDM3ODg5LDE0MDkwLDE2NjU5MiwxNDk5MzMsMjI5NjAsMTM3NDA3LDEzNzM0NywxNjA5MDAsMjMyMDEsMTQwNTAsMTQ2Nzc5LDE0ZTMsMzc0NzEs''@;'; put 'put ''MjMxNjEsMTY2NTI5LDEzNzMxNCwzNzc0OCwxNTU2NSwxMzM4MTIsMTkwOTQsMTQ3MzAsMjA3MjQsMTU3MjEsMTU2OTIsMTM2MDkyLDI5MDQ1LDE3MTQ3LDE2NDM3NiwyODE3NSwxNjgxNjQsMTc2NDMsMjc5OTEsMTYzNDA3LDI4Nzc1LDI3ODIzLDE1NTc0LDE0NzQzNywxNDY5ODksMjgxNjIs''@;'; put 'put ''Mjg0MjgsMTU3MjcsMTMyMDg1LDMwMDMzLDE0MDEyLDEzNTEyLDE4MDQ4LDE2MDkwLDE4NTQ1LDIyOTgwLDM3NDg2LDE4NzUwLDM2NjczLDE2Njk0MCwxNTg2NTYsMjI1NDYsMjI0NzIsMTQwMzgsMTM2Mjc0LDI4OTI2LDE0ODMyMiwxNTAxMjksMTQzMzMxLDEzNTg1NiwxNDAyMjEsMjY4MDks''@;'; put 'put ''MjY5ODMsMTM2MDg4LDE0NDYxMywxNjI4MDQsMTQ1MTE5LDE2NjUzMSwxNDUzNjYsMTQ0Mzc4LDE1MDY4NywyNzE2MiwxNDUwNjksMTU4OTAzLDMzODU0LDE3NjMxLDE3NjE0LDE1OTAxNCwxNTkwNTcsMTU4ODUwLDE1OTcxMCwyODQzOSwxNjAwMDksMzM1OTcsMTM3MDE4LDMzNzczLDE1ODg0''@;'; put 'put ''OCwxNTk4MjcsMTM3MTc5LDIyOTIxLDIzMTcwLDEzNzEzOSwyMzEzNywyMzE1MywxMzc0NzcsMTQ3OTY0LDE0MTI1LDIzMDIzLDEzNzAyMCwxNDAyMywyOTA3MCwzNzc3NiwyNjI2NiwxNDgxMzMsMjMxNTAsMjMwODMsMTQ4MTE1LDI3MTc5LDE0NzE5MywxNjE1OTAsMTQ4NTcxLDE0ODE3MCwy''@;'; put 'put ''ODk1NywxNDgwNTcsMTY2MzY5LDIwNDAwLDE1OTAxNiwyMzc0NiwxNDg2ODYsMTYzNDA1LDE0ODQxMywyNzE0OCwxNDgwNTQsMTM1OTQwLDI4ODM4LDI4OTc5LDE0ODQ1NywxNTc4MSwyNzg3MSwxOTQ1OTcsMTUwMDk1LDMyMzU3LDIzMDE5LDIzODU1LDE1ODU5LDI0NDEyLDE1MDEwOSwxMzcx''@;'; put 'put ''ODMsMzIxNjQsMzM4MzAsMjE2MzcsMTQ2MTcwLDE0NDEyOCwxMzE2MDQsMjIzOTgsMTMzMzMzLDEzMjYzMywxNjM1NywxMzkxNjYsMTcyNzI2LDI4Njc1LDE2ODI4MywyMzkyMCwyOTU4MywzMTk1NSwxNjY0ODksMTY4OTkyLDIwNDI0LDMyNzQzLDI5Mzg5LDI5NDU2LDE2MjU0OCwyOTQ5Niwy''@;'; put 'put ''OTQ5NywxNTMzMzQsMjk1MDUsMjk1MTIsMTYwNDEsMTYyNTg0LDM2OTcyLDI5MTczLDE0OTc0NiwyOTY2NSwzMzI3MCwxNjA3NCwzMDQ3NiwxNjA4MSwyNzgxMCwyMjI2OSwyOTcyMSwyOTcyNiwyOTcyNywxNjA5OCwxNjExMiwxNjExNiwxNjEyMiwyOTkwNywxNjE0MiwxNjIxMSwzMDAxOCwz''@;'; put 'put ''MDA2MSwzMDA2NiwzMDA5MywxNjI1MiwzMDE1MiwzMDE3MiwxNjMyMCwzMDI4NSwxNjM0MywzMDMyNCwxNjM0OCwzMDMzMCwxNTEzODgsMjkwNjQsMjIwNTEsMzUyMDAsMjI2MzMsMTY0MTMsMzA1MzEsMTY0NDEsMjY0NjUsMTY0NTMsMTM3ODcsMzA2MTYsMTY0OTAsMTY0OTUsMjM2NDYsMzA2''@;'; put 'put ''NTQsMzA2NjcsMjI3NzAsMzA3NDQsMjg4NTcsMzA3NDgsMTY1NTIsMzA3NzcsMzA3OTEsMzA4MDEsMzA4MjIsMzM4NjQsMTUyODg1LDMxMDI3LDI2NjI3LDMxMDI2LDE2NjQzLDE2NjQ5LDMxMTIxLDMxMTI5LDM2Nzk1LDMxMjM4LDM2Nzk2LDE2NzQzLDMxMzc3LDE2ODE4LDMxNDIwLDMzNDAx''@;'; put 'put ''LDE2ODM2LDMxNDM5LDMxNDUxLDE2ODQ3LDIwMDAxLDMxNTg2LDMxNTk2LDMxNjExLDMxNzYyLDMxNzcxLDE2OTkyLDE3MDE4LDMxODY3LDMxOTAwLDE3MDM2LDMxOTI4LDE3MDQ0LDMxOTgxLDM2NzU1LDI4ODY0LDEzNDM1MSwzMjIwNywzMjIxMiwzMjIwOCwzMjI1MywzMjY4NiwzMjY5Miwy''@;'; put 'put ''OTM0MywxNzMwMywzMjgwMCwzMjgwNSwzMTU0NSwzMjgxNCwzMjgxNywzMjg1MiwxNTgyMCwyMjQ1MiwyODgzMiwzMjk1MSwzMzAwMSwxNzM4OSwzMzAzNiwyOTQ4MiwzMzAzOCwzMzA0MiwzMDA0OCwzMzA0NCwxNzQwOSwxNTE2MSwzMzExMCwzMzExMywzMzExNCwxNzQyNywyMjU4NiwzMzE0''@;'; put 'put ''OCwzMzE1NiwxNzQ0NSwzMzE3MSwxNzQ1MywzMzE4OSwyMjUxMSwzMzIxNywzMzI1MiwzMzM2NCwxNzU1MSwzMzQ0NiwzMzM5OCwzMzQ4MiwzMzQ5NiwzMzUzNSwxNzU4NCwzMzYyMywzODUwNSwyNzAxOCwzMzc5NywyODkxNywzMzg5MiwyNDgwMywzMzkyOCwxNzY2OCwzMzk4MiwzNDAxNywz''@;'; put 'put ''NDA0MCwzNDA2NCwzNDEwNCwzNDEzMCwxNzcyMywzNDE1OSwzNDE2MCwzNDI3MiwxNzc4MywzNDQxOCwzNDQ1MCwzNDQ4MiwzNDU0MywzODQ2OSwzNDY5OSwxNzkyNiwxNzk0MywzNDk5MCwzNTA3MSwzNTEwOCwzNTE0MywzNTIxNywxNjIxNTEsMzUzNjksMzUzODQsMzU0NzYsMzU1MDgsMzU5''@;'; put 'put ''MjEsMzYwNTIsMzYwODIsMzYxMjQsMTgzMjgsMjI2MjMsMzYyOTEsMTg0MTMsMjAyMDYsMzY0MTAsMjE5NzYsMjIzNTYsMzY0NjUsMjIwMDUsMzY1MjgsMTg0ODcsMzY1NTgsMzY1NzgsMzY1ODAsMzY1ODksMzY1OTQsMzY3OTEsMzY4MDEsMzY4MTAsMzY4MTIsMzY5MTUsMzkzNjQsMTg2MDUs''@;'; put 'put ''MzkxMzYsMzczOTUsMTg3MTgsMzc0MTYsMzc0NjQsMzc0ODMsMzc1NTMsMzc1NTAsMzc1NjcsMzc2MDMsMzc2MTEsMzc2MTksMzc2MjAsMzc2MjksMzc2OTksMzc3NjQsMzc4MDUsMTg3NTcsMTg3NjksNDA2MzksMzc5MTEsMjEyNDksMzc5MTcsMzc5MzMsMzc5NTAsMTg3OTQsMzc5NzIsMzgw''@;'; put 'put ''MDksMzgxODksMzgzMDYsMTg4NTUsMzgzODgsMzg0NTEsMTg5MTcsMjY1MjgsMTg5ODAsMzg3MjAsMTg5OTcsMzg4MzQsMzg4NTAsMjIxMDAsMTkxNzIsMjQ4MDgsMzkwOTcsMTkyMjUsMzkxNTMsMjI1OTYsMzkxODIsMzkxOTMsMjA5MTYsMzkxOTYsMzkyMjMsMzkyMzQsMzkyNjEsMzkyNjYs''@;'; put 'put ''MTkzMTIsMzkzNjUsMTkzNTcsMzk0ODQsMzk2OTUsMzEzNjMsMzk3ODUsMzk4MDksMzk5MDEsMzk5MjEsMzk5MjQsMTk1NjUsMzk5NjgsMTQxOTEsMTM4MTc4LDQwMjY1LDM5OTk0LDQwNzAyLDIyMDk2LDQwMzM5LDQwMzgxLDQwMzg0LDQwNDQ0LDM4MTM0LDM2NzkwLDQwNTcxLDQwNjIwLDQw''@;'; put 'put ''NjI1LDQwNjM3LDQwNjQ2LDM4MTA4LDQwNjc0LDQwNjg5LDQwNjk2LDMxNDMyLDQwNzcyLDEzMTIyMCwxMzE3NjcsMTMyZTMsMjY5MDYsMzgwODMsMjI5NTYsMTMyMzExLDIyNTkyLDM4MDgxLDE0MjY1LDEzMjU2NSwxMzI2MjksMTMyNzI2LDEzNjg5MCwyMjM1OSwyOTA0MywxMzM4MjYsMTMz''@;'; put 'put ''ODM3LDEzNDA3OSwyMTYxMCwxOTQ2MTksMTM0MDkxLDIxNjYyLDEzNDEzOSwxMzQyMDMsMTM0MjI3LDEzNDI0NSwxMzQyNjgsMjQ4MDcsMTM0Mjg1LDIyMTM4LDEzNDMyNSwxMzQzNjUsMTM0MzgxLDEzNDUxMSwxMzQ1NzgsMTM0NjAwLDI2OTY1LDM5OTgzLDM0NzI1LDEzNDY2MCwxMzQ2NzAs''@;'; put 'put ''MTM0ODcxLDEzNTA1NiwxMzQ5NTcsMTM0NzcxLDIzNTg0LDEzNTEwMCwyNDA3NSwxMzUyNjAsMTM1MjQ3LDEzNTI4NiwyNjM5OCwxMzUyOTEsMTM1MzA0LDEzNTMxOCwxMzg5NSwxMzUzNTksMTM1Mzc5LDEzNTQ3MSwxMzU0ODMsMjEzNDgsMzM5NjUsMTM1OTA3LDEzNjA1MywxMzU5OTAsMzU3''@;'; put 'put ''MTMsMTM2NTY3LDEzNjcyOSwxMzcxNTUsMTM3MTU5LDIwMDg4LDI4ODU5LDEzNzI2MSwxMzc1NzgsMTM3NzczLDEzNzc5NywxMzgyODIsMTM4MzUyLDEzODQxMiwxMzg5NTIsMjUyODMsMTM4OTY1LDEzOTAyOSwyOTA4MCwyNjcwOSwxMzkzMzMsMjcxMTMsMTQwMjQsMTM5OTAwLDE0MDI0Nywx''@;'; put 'put ''NDAyODIsMTQxMDk4LDE0MTQyNSwxNDE2NDcsMzM1MzMsMTQxNjcxLDE0MTcxNSwxNDIwMzcsMzUyMzcsMTQyMDU2LDM2NzY4LDE0MjA5NCwzODg0MCwxNDIxNDMsMzg5ODMsMzk2MTMsMTQyNDEyLG51bGwsMTQyNDcyLDE0MjUxOSwxNTQ2MDAsMTQyNjAwLDE0MjYxMCwxNDI3NzUsMTQyNzQx''@;'; put 'put ''LDE0MjkxNCwxNDMyMjAsMTQzMzA4LDE0MzQxMSwxNDM0NjIsMTQ0MTU5LDE0NDM1MCwyNDQ5NywyNjE4NCwyNjMwMywxNjI0MjUsMTQ0NzQzLDE0NDg4MywyOTE4NSwxNDk5NDYsMzA2NzksMTQ0OTIyLDE0NTE3NCwzMjM5MSwxMzE5MTAsMjI3MDksMjYzODIsMjY5MDQsMTQ2MDg3LDE2MTM2''@;'; put 'put ''NywxNTU2MTgsMTQ2OTYxLDE0NzEyOSwxNjEyNzgsMTM5NDE4LDE4NjQwLDE5MTI4LDE0NzczNywxNjY1NTQsMTQ4MjA2LDE0ODIzNywxNDc1MTUsMTQ4Mjc2LDE0ODM3NCwxNTAwODUsMTMyNTU0LDIwOTQ2LDEzMjYyNSwyMjk0MywxMzg5MjAsMTUyOTQsMTQ2Njg3LDE0ODQ4NCwxNDg2OTQs''@;'; put 'put ''MjI0MDgsMTQ5MTA4LDE0NzQ3LDE0OTI5NSwxNjUzNTIsMTcwNDQxLDE0MTc4LDEzOTcxNSwzNTY3OCwxNjY3MzQsMzkzODIsMTQ5NTIyLDE0OTc1NSwxNTAwMzcsMjkxOTMsMTUwMjA4LDEzNDI2NCwyMjg4NSwxNTEyMDUsMTUxNDMwLDEzMjk4NSwzNjU3MCwxNTE1OTYsMjExMzUsMjIzMzUs''@;'; put 'put ''MjkwNDEsMTUyMjE3LDE1MjYwMSwxNDcyNzQsMTUwMTgzLDIxOTQ4LDE1MjY0NiwxNTI2ODYsMTU4NTQ2LDM3MzMyLDEzNDI3LDE1Mjg5NSwxNjEzMzAsMTUyOTI2LDE4MjAwLDE1MjkzMCwxNTI5MzQsMTUzNTQzLDE0OTgyMywxNTM2OTMsMjA1ODIsMTM1NjMsMTQ0MzMyLDI0Nzk4LDE1Mzg1''@;'; put 'put ''OSwxODMwMCwxNjYyMTYsMTU0Mjg2LDE1NDUwNSwxNTQ2MzAsMTM4NjQwLDIyNDMzLDI5MDA5LDI4NTk4LDE1NTkwNiwxNjI4MzQsMzY5NTAsMTU2MDgyLDE1MTQ1MCwzNTY4MiwxNTY2NzQsMTU2NzQ2LDIzODk5LDE1ODcxMSwzNjY2MiwxNTY4MDQsMTM3NTAwLDM1NTYyLDE1MDAwNiwxNTY4''@;'; put 'put ''MDgsMTQ3NDM5LDE1Njk0NiwxOTM5MiwxNTcxMTksMTU3MzY1LDE0MTA4MywzNzk4OSwxNTM1NjksMjQ5ODEsMjMwNzksMTk0NzY1LDIwNDExLDIyMjAxLDE0ODc2OSwxNTc0MzYsMjAwNzQsMTQ5ODEyLDM4NDg2LDI4MDQ3LDE1ODkwOSwxMzg0OCwzNTE5MSwxNTc1OTMsMTU3ODA2LDE1NjY4''@;'; put 'put ''OSwxNTc3OTAsMjkxNTEsMTU3ODk1LDMxNTU0LDE2ODEyOCwxMzM2NDksMTU3OTkwLDM3MTI0LDE1ODAwOSwzMTMwMSw0MDQzMiwxNTgyMDIsMzk0NjIsMTU4MjUzLDEzOTE5LDE1Njc3NywxMzExMDUsMzExMDcsMTU4MjYwLDE1ODU1NSwyMzg1MiwxNDQ2NjUsMzM3NDMsMTU4NjIxLDE4MTI4''@;'; put 'put ''LDE1ODg4NCwzMDAxMSwzNDkxNywxNTkxNTAsMjI3MTAsMTQxMDgsMTQwNjg1LDE1OTgxOSwxNjAyMDUsMTU0NDQsMTYwMzg0LDE2MDM4OSwzNzUwNSwxMzk2NDIsMTYwMzk1LDM3NjgwLDE2MDQ4NiwxNDk5NjgsMjc3MDUsMzgwNDcsMTYwODQ4LDEzNDkwNCwzNDg1NSwzNTA2MSwxNDE2MDYs''@;'; put 'put ''MTY0OTc5LDEzNzEzNywyODM0NCwxNTAwNTgsMTM3MjQ4LDE0NzU2LDE0MDA5LDIzNTY4LDMxMjAzLDE3NzI3LDI2Mjk0LDE3MTE4MSwxNzAxNDgsMzUxMzksMTYxNzQwLDE2MTg4MCwyMjIzMCwxNjYwNywxMzY3MTQsMTQ3NTMsMTQ1MTk5LDE2NDA3MiwxMzYxMzMsMjkxMDEsMzM2MzgsMTYy''@;'; put 'put ''MjY5LDE2ODM2MCwyMzE0MywxOTYzOSwxNTk5MTksMTY2MzE1LDE2MjMwMSwxNjIzMTQsMTYyNTcxLDE2MzE3NCwxNDc4MzQsMzE1NTUsMzExMDIsMTYzODQ5LDI4NTk3LDE3Mjc2NywyNzEzOSwxNjQ2MzIsMjE0MTAsMTU5MjM5LDM3ODIzLDI2Njc4LDM4NzQ5LDE2NDIwNywxNjM4NzUsMTU4''@;'; put 'put ''MTMzLDEzNjE3MywxNDM5MTksMTYzOTEyLDIzOTQxLDE2Njk2MCwxNjM5NzEsMjIyOTMsMzg5NDcsMTY2MjE3LDIzOTc5LDE0OTg5NiwyNjA0NiwyNzA5MywyMTQ1OCwxNTAxODEsMTQ3MzI5LDE1Mzc3LDI2NDIyLDE2Mzk4NCwxNjQwODQsMTY0MTQyLDEzOTE2OSwxNjQxNzUsMTY0MjMzLDE2''@;'; put 'put ''NDI3MSwxNjQzNzgsMTY0NjE0LDE2NDY1NSwxNjQ3NDYsMTM3NzAsMTY0OTY4LDE2NTU0NiwxODY4MiwyNTU3NCwxNjYyMzAsMzA3MjgsMzc0NjEsMTY2MzI4LDE3Mzk0LDE2NjM3NSwxNzM3NSwxNjYzNzYsMTY2NzI2LDE2Njg2OCwyMzAzMiwxNjY5MjEsMzY2MTksMTY3ODc3LDE2ODE3Miwz''@;'; put 'put ''MTU2OSwxNjgyMDgsMTY4MjUyLDE1ODYzLDE2ODI4NiwxNTAyMTgsMzY4MTYsMjkzMjcsMjIxNTUsMTY5MTkxLDE2OTQ0OSwxNjkzOTIsMTY5NDAwLDE2OTc3OCwxNzAxOTMsMTcwMzEzLDE3MDM0NiwxNzA0MzUsMTcwNTM2LDE3MDc2NiwxNzEzNTQsMTcxNDE5LDMyNDE1LDE3MTc2OCwxNzE4''@;'; put 'put ''MTEsMTk2MjAsMzgyMTUsMTcyNjkxLDI5MDkwLDE3Mjc5OSwxOTg1NywzNjg4MiwxNzM1MTUsMTk4NjgsMTM0MzAwLDM2Nzk4LDIxOTUzLDM2Nzk0LDE0MDQ2NCwzNjc5MywxNTAxNjMsMTc2NzMsMzIzODMsMjg1MDIsMjczMTMsMjAyMDIsMTM1NDAsMTY2NzAwLDE2MTk0OSwxNDEzOCwzNjQ4''@;'; put 'put ''MCwxMzcyMDUsMTYzODc2LDE2Njc2NCwxNjY4MDksMTYyMzY2LDE1NzM1OSwxNTg1MSwxNjEzNjUsMTQ2NjE1LDE1MzE0MSwxNTM5NDIsMjAxMjIsMTU1MjY1LDE1NjI0OCwyMjIwNywxMzQ3NjUsMzYzNjYsMjM0MDUsMTQ3MDgwLDE1MDY4NiwyNTU2NiwyNTI5NiwxMzcyMDYsMTM3MzM5LDI1''@;'; put 'put ''OTA0LDIyMDYxLDE1NDY5OCwyMTUzMCwxNTIzMzcsMTU4MTQsMTcxNDE2LDE5NTgxLDIyMDUwLDIyMDQ2LDMyNTg1LDE1NTM1MiwyMjkwMSwxNDY3NTIsMzQ2NzIsMTk5OTYsMTM1MTQ2LDEzNDQ3MywxNDUwODIsMzMwNDcsNDAyODYsMzYxMjAsMzAyNjcsNDAwMDUsMzAyODYsMzA2NDksMzc3''@;'; put 'put ''MDEsMjE1NTQsMzMwOTYsMzM1MjcsMjIwNTMsMzMwNzQsMzM4MTYsMzI5NTcsMjE5OTQsMzEwNzQsMjIwODMsMjE1MjYsMTM0ODEzLDEzNzc0LDIyMDIxLDIyMDAxLDI2MzUzLDE2NDU3OCwxMzg2OSwzMDAwNCwyMmUzLDIxOTQ2LDIxNjU1LDIxODc0LDEzNDIwOSwxMzQyOTQsMjQyNzIsMTUx''@;'; put 'put ''ODgwLDEzNDc3NCwxNDI0MzQsMTM0ODE4LDQwNjE5LDMyMDkwLDIxOTgyLDEzNTI4NSwyNTI0NSwzODc2NSwyMTY1MiwzNjA0NSwyOTE3NCwzNzIzOCwyNTU5NiwyNTUyOSwyNTU5OCwyMTg2NSwxNDIxNDcsNDAwNTAsMTQzMDI3LDIwODkwLDEzNTM1LDEzNDU2NywyMDkwMywyMTU4MSwyMTc5''@;'; put 'put ''MCwyMTc3OSwzMDMxMCwzNjM5NywxNTc4MzQsMzAxMjksMzI5NTAsMzQ4MjAsMzQ2OTQsMzUwMTUsMzMyMDYsMzM4MjAsMTM1MzYxLDE3NjQ0LDI5NDQ0LDE0OTI1NCwyMzQ0MCwzMzU0NywxNTc4NDMsMjIxMzksMTQxMDQ0LDE2MzExOSwxNDc4NzUsMTYzMTg3LDE1OTQ0MCwxNjA0MzgsMzcy''@;'; put 'put ''MzIsMTM1NjQxLDM3Mzg0LDE0NjY4NCwxNzM3MzcsMTM0ODI4LDEzNDkwNSwyOTI4NiwxMzg0MDIsMTgyNTQsMTUxNDkwLDE2MzgzMywxMzUxNDcsMTY2MzQsNDAwMjksMjU4ODcsMTQyNzUyLDE4Njc1LDE0OTQ3MiwxNzEzODgsMTM1MTQ4LDEzNDY2NiwyNDY3NCwxNjExODcsMTM1MTQ5LG51''@;'; put 'put ''bGwsMTU1NzIwLDEzNTU1OSwyOTA5MSwzMjM5OCw0MDI3MiwxOTk5NCwxOTk3MiwxMzY4NywyMzMwOSwyNzgyNiwyMTM1MSwxMzk5NiwxNDgxMiwyMTM3MywxMzk4OSwxNDkwMTYsMjI2ODIsMTUwMzgyLDMzMzI1LDIxNTc5LDIyNDQyLDE1NDI2MSwxMzM0OTcsbnVsbCwxNDkzMCwxNDAzODks''@;'; put 'put ''Mjk1NTYsMTcxNjkyLDE5NzIxLDM5OTE3LDE0NjY4NiwxNzE4MjQsMTk1NDcsMTUxNDY1LDE2OTM3NCwxNzE5OTgsMzM4ODQsMTQ2ODcwLDE2MDQzNCwxNTc2MTksMTQ1MTg0LDI1MzkwLDMyMDM3LDE0NzE5MSwxNDY5ODgsMTQ4OTAsMzY4NzIsMjExOTYsMTU5ODgsMTM5NDYsMTc4OTcsMTMy''@;'; put 'put ''MjM4LDMwMjcyLDIzMjgwLDEzNDgzOCwzMDg0MiwxNjM2MzAsMjI2OTUsMTY1NzUsMjIxNDAsMzk4MTksMjM5MjQsMzAyOTIsMTczMTA4LDQwNTgxLDE5NjgxLDMwMjAxLDE0MzMxLDI0ODU3LDE0MzU3OCwxNDg0NjYsbnVsbCwyMjEwOSwxMzU4NDksMjI0MzksMTQ5ODU5LDE3MTUyNiwyMTA0''@;'; put 'put ''NCwxNTk5MTgsMTM3NDEsMjc3MjIsNDAzMTYsMzE4MzAsMzk3MzcsMjI0OTQsMTM3MDY4LDIzNjM1LDI1ODExLDE2OTE2OCwxNTY0NjksMTYwMTAwLDM0NDc3LDEzNDQ0MCwxNTkwMTAsMTUwMjQyLDEzNDUxMyxudWxsLDIwOTkwLDEzOTAyMywyMzk1MCwzODY1OSwxMzg3MDUsNDA1NzcsMzY5''@;'; put 'put ''NDAsMzE1MTksMzk2ODIsMjM3NjEsMzE2NTEsMjUxOTIsMjUzOTcsMzk2NzksMzE2OTUsMzk3MjIsMzE4NzAsMzk3MjYsMzE4MTAsMzE4NzgsMzk5NTcsMzE3NDAsMzk2ODksNDA3MjcsMzk5NjMsMTQ5ODIyLDQwNzk0LDIxODc1LDIzNDkxLDIwNDc3LDQwNjAwLDIwNDY2LDIxMDg4LDE1ODc4''@;'; put 'put ''LDIxMjAxLDIyMzc1LDIwNTY2LDIyOTY3LDI0MDgyLDM4ODU2LDQwMzYzLDM2NzAwLDIxNjA5LDM4ODM2LDM5MjMyLDM4ODQyLDIxMjkyLDI0ODgwLDI2OTI0LDIxNDY2LDM5OTQ2LDQwMTk0LDE5NTE1LDM4NDY1LDI3MDA4LDIwNjQ2LDMwMDIyLDEzNzA2OSwzOTM4NiwyMTEwNyxudWxsLDM3''@;'; put 'put ''MjA5LDM4NTI5LDM3MjEyLG51bGwsMzcyMDEsMTY3NTc1LDI1NDcxLDE1OTAxMSwyNzMzOCwyMjAzMywzNzI2MiwzMDA3NCwyNTIyMSwxMzIwOTIsMjk1MTksMzE4NTYsMTU0NjU3LDE0NjY4NSxudWxsLDE0OTc4NSwzMDQyMiwzOTgzNywyMDAxMCwxMzQzNTYsMzM3MjYsMzQ4ODIsbnVsbCwy''@;'; put 'put ''MzYyNiwyNzA3MiwyMDcxNywyMjM5NCwyMTAyMywyNDA1MywyMDE3NCwyNzY5NywxMzE1NzAsMjAyODEsMjE2NjAsMjE3MjIsMjExNDYsMzYyMjYsMTM4MjIsMjQzMzIsMTM4MTEsbnVsbCwyNzQ3NCwzNzI0NCw0MDg2OSwzOTgzMSwzODk1OCwzOTA5MiwzOTYxMCw0MDYxNiw0MDU4MCwyOTA1''@;'; put 'put ''MCwzMTUwOCxudWxsLDI3NjQyLDM0ODQwLDMyNjMyLG51bGwsMjIwNDgsMTczNjQyLDM2NDcxLDQwNzg3LG51bGwsMzYzMDgsMzY0MzEsNDA0NzYsMzYzNTMsMjUyMTgsMTY0NzMzLDM2MzkyLDM2NDY5LDMxNDQzLDE1MDEzNSwzMTI5NCwzMDkzNiwyNzg4MiwzNTQzMSwzMDIxNSwxNjY0OTAs''@;'; put 'put ''NDA3NDIsMjc4NTQsMzQ3NzQsMzAxNDcsMTcyNzIyLDMwODAzLDE5NDYyNCwzNjEwOCwyOTQxMCwyOTU1MywzNTYyOSwyOTQ0MiwyOTkzNywzNjA3NSwxNTAyMDMsMzQzNTEsMjQ1MDYsMzQ5NzYsMTc1OTEsbnVsbCwxMzcyNzUsMTU5MjM3LG51bGwsMzU0NTQsMTQwNTcxLG51bGwsMjQ4Mjks''@;'; put 'put ''MzAzMTEsMzk2MzksNDAyNjAsMzc3NDIsMzk4MjMsMzQ4MDUsbnVsbCwzNDgzMSwzNjA4NywyOTQ4NCwzODY4OSwzOTg1NiwxMzc4MiwyOTM2MiwxOTQ2MywzMTgyNSwzOTI0MiwxNTU5OTMsMjQ5MjEsMTk0NjAsNDA1OTgsMjQ5NTcsbnVsbCwyMjM2NywyNDk0MywyNTI1NCwyNTE0NSwyNTI5''@;'; put 'put ''NCwxNDk0MCwyNTA1OCwyMTQxOCwxNDQzNzMsMjU0NDQsMjY2MjYsMTM3NzgsMjM4OTUsMTY2ODUwLDM2ODI2LDE2NzQ4MSxudWxsLDIwNjk3LDEzODU2NiwzMDk4MiwyMTI5OCwzODQ1NiwxMzQ5NzEsMTY0ODUsbnVsbCwzMDcxOCxudWxsLDMxOTM4LDE1NTQxOCwzMTk2MiwzMTI3NywzMjg3''@;'; put 'put ''MCwzMjg2NywzMjA3NywyOTk1NywyOTkzOCwzNTIyMCwzMzMwNiwyNjM4MCwzMjg2NiwxNjA5MDIsMzI4NTksMjk5MzYsMzMwMjcsMzA1MDAsMzUyMDksMTU3NjQ0LDMwMDM1LDE1OTQ0MSwzNDcyOSwzNDc2NiwzMzIyNCwzNDcwMCwzNTQwMSwzNjAxMywzNTY1MSwzMDUwNywyOTk0NCwzNDAx''@;'; put 'put ''MCwxMzg3NywyNzA1OCwzNjI2MixudWxsLDM1MjQxLDI5ODAwLDI4MDg5LDM0NzUzLDE0NzQ3MywyOTkyNywxNTgzNSwyOTA0NiwyNDc0MCwyNDk4OCwxNTU2OSwyOTAyNiwyNDY5NSxudWxsLDMyNjI1LDE2NjcwMSwyOTI2NCwyNDgwOSwxOTMyNiwyMTAyNCwxNTM4NCwxNDY2MzEsMTU1MzUx''@;'; put 'put ''LDE2MTM2NiwxNTI4ODEsMTM3NTQwLDEzNTkzNCwxNzAyNDMsMTU5MTk2LDE1OTkxNywyMzc0NSwxNTYwNzcsMTY2NDE1LDE0NTAxNSwxMzEzMTAsMTU3NzY2LDE1MTMxMCwxNzc2MiwyMzMyNywxNTY0OTIsNDA3ODQsNDA2MTQsMTU2MjY3LDEyMjg4LDY1MjkyLDEyMjg5LDEyMjkwLDY1Mjk0''@;'; put 'put ''LDgyMzEsNjUzMDcsNjUzMDYsNjUzMTEsNjUyODEsNjUwNzIsODIzMCw4MjI5LDY1MTA0LDY1MTA1LDY1MTA2LDE4Myw2NTEwOCw2NTEwOSw2NTExMCw2NTExMSw2NTM3Miw4MjExLDY1MDczLDgyMTIsNjUwNzUsOTU4OCw2NTA3Niw2NTEwMyw2NTI4OCw2NTI4OSw2NTA3Nyw2NTA3OCw2NTM3''@;'; put 'put ''MSw2NTM3Myw2NTA3OSw2NTA4MCwxMjMwOCwxMjMwOSw2NTA4MSw2NTA4MiwxMjMwNCwxMjMwNSw2NTA4Myw2NTA4NCwxMjI5OCwxMjI5OSw2NTA4NSw2NTA4NiwxMjI5NiwxMjI5Nyw2NTA4Nyw2NTA4OCwxMjMwMCwxMjMwMSw2NTA4OSw2NTA5MCwxMjMwMiwxMjMwMyw2NTA5MSw2NTA5Miw2''@;'; put 'put ''NTExMyw2NTExNCw2NTExNSw2NTExNiw2NTExNyw2NTExOCw4MjE2LDgyMTcsODIyMCw4MjIxLDEyMzE3LDEyMzE4LDgyNDUsODI0Miw2NTI4Myw2NTI4Niw2NTI5MCw4MjUxLDE2NywxMjI5MSw5Njc1LDk2NzksOTY1MSw5NjUwLDk2NzgsOTczNCw5NzMzLDk2NzEsOTY3MCw5NjMzLDk2MzIs''@;'; put 'put ''OTY2MSw5NjYwLDEyOTYzLDg0NTMsMTc1LDY1NTA3LDY1MzQzLDcxNyw2NTA5Nyw2NTA5OCw2NTEwMSw2NTEwMiw2NTA5OSw2NTEwMCw2NTExOSw2NTEyMCw2NTEyMSw2NTI5MSw2NTI5MywyMTUsMjQ3LDE3Nyw4NzMwLDY1MzA4LDY1MzEwLDY1MzA5LDg4MDYsODgwNyw4ODAwLDg3MzQsODc4''@;'; put 'put ''Niw4ODAxLDY1MTIyLDY1MTIzLDY1MTI0LDY1MTI1LDY1MTI2LDY1Mzc0LDg3NDUsODc0Niw4ODY5LDg3MzYsODczNSw4ODk1LDEzMjY2LDEzMjY1LDg3NDcsODc1MCw4NzU3LDg3NTYsOTc5Miw5Nzk0LDg4NTMsODg1Nyw4NTkzLDg1OTUsODU5Miw4NTk0LDg1OTgsODU5OSw4NjAxLDg2MDAs''@;'; put 'put ''ODc0MSw4NzM5LDY1Mjk1LDY1MzQwLDg3MjUsNjUxMjgsNjUyODQsNjU1MDksMTIzMDYsNjU1MDQsNjU1MDUsNjUyODUsNjUzMTIsODQ1MSw4NDU3LDY1MTI5LDY1MTMwLDY1MTMxLDEzMjY5LDEzMjEyLDEzMjEzLDEzMjE0LDEzMjYyLDEzMjE3LDEzMTk4LDEzMTk5LDEzMjUyLDE3NiwyMDgy''@;'; put 'put ''NSwyMDgyNywyMDgzMCwyMDgyOSwyMDgzMywyMDgzNSwyMTk5MSwyOTkyOSwzMTk1MCw5NjAxLDk2MDIsOTYwMyw5NjA0LDk2MDUsOTYwNiw5NjA3LDk2MDgsOTYxNSw5NjE0LDk2MTMsOTYxMiw5NjExLDk2MTAsOTYwOSw5NTMyLDk1MjQsOTUxNiw5NTA4LDk1MDAsOTYyMCw5NDcyLDk0NzQs''@;'; put 'put ''OTYyMSw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1ODEsOTU4Miw5NTg0LDk1ODMsOTU1Miw5NTY2LDk1NzgsOTU2OSw5Njk4LDk2OTksOTcwMSw5NzAwLDk1ODUsOTU4Niw5NTg3LDY1Mjk2LDY1Mjk3LDY1Mjk4LDY1Mjk5LDY1MzAwLDY1MzAxLDY1MzAyLDY1MzAzLDY1MzA0LDY1MzA1LDg1NDQs''@;'; put 'put ''ODU0NSw4NTQ2LDg1NDcsODU0OCw4NTQ5LDg1NTAsODU1MSw4NTUyLDg1NTMsMTIzMjEsMTIzMjIsMTIzMjMsMTIzMjQsMTIzMjUsMTIzMjYsMTIzMjcsMTIzMjgsMTIzMjksMjEzMTMsMjEzMTYsMjEzMTcsNjUzMTMsNjUzMTQsNjUzMTUsNjUzMTYsNjUzMTcsNjUzMTgsNjUzMTksNjUzMjAs''@;'; put 'put ''NjUzMjEsNjUzMjIsNjUzMjMsNjUzMjQsNjUzMjUsNjUzMjYsNjUzMjcsNjUzMjgsNjUzMjksNjUzMzAsNjUzMzEsNjUzMzIsNjUzMzMsNjUzMzQsNjUzMzUsNjUzMzYsNjUzMzcsNjUzMzgsNjUzNDUsNjUzNDYsNjUzNDcsNjUzNDgsNjUzNDksNjUzNTAsNjUzNTEsNjUzNTIsNjUzNTMsNjUz''@;'; put 'put ''NTQsNjUzNTUsNjUzNTYsNjUzNTcsNjUzNTgsNjUzNTksNjUzNjAsNjUzNjEsNjUzNjIsNjUzNjMsNjUzNjQsNjUzNjUsNjUzNjYsNjUzNjcsNjUzNjgsNjUzNjksNjUzNzAsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDky''@;'; put 'put ''OSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksMTI1NDksMTI1NTAsMTI1NTEsMTI1NTIsMTI1NTMsMTI1NTQsMTI1''@;'; put 'put ''NTUsMTI1NTYsMTI1NTcsMTI1NTgsMTI1NTksMTI1NjAsMTI1NjEsMTI1NjIsMTI1NjMsMTI1NjQsMTI1NjUsMTI1NjYsMTI1NjcsMTI1NjgsMTI1NjksMTI1NzAsMTI1NzEsMTI1NzIsMTI1NzMsMTI1NzQsMTI1NzUsMTI1NzYsMTI1NzcsMTI1NzgsMTI1NzksMTI1ODAsMTI1ODEsMTI1ODIs''@;'; put 'put ''MTI1ODMsMTI1ODQsMTI1ODUsNzI5LDcxMyw3MTQsNzExLDcxNSw5MjE2LDkyMTcsOTIxOCw5MjE5LDkyMjAsOTIyMSw5MjIyLDkyMjMsOTIyNCw5MjI1LDkyMjYsOTIyNyw5MjI4LDkyMjksOTIzMCw5MjMxLDkyMzIsOTIzMyw5MjM0LDkyMzUsOTIzNiw5MjM3LDkyMzgsOTIzOSw5MjQwLDky''@;'; put 'put ''NDEsOTI0Miw5MjQzLDkyNDQsOTI0NSw5MjQ2LDkyNDcsOTI0OSw4MzY0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxOTk2OCwyMDA1NywxOTk2OSwxOTk3MSwyMDAzNSwyMDA2MSwyMDEwMiwyMDEwOCwyMDE1NCwyMDc5OSwyMDgzNywyMDg0MywyMDk2MCwyMDk5MiwyMDk5MywyMTE0NywyMTI2OSwyMTMxMywyMTM0MCwyMTQ0OCwxOTk3NywxOTk3OSwxOTk3NiwxOTk3''@;'; put 'put ''OCwyMDAxMSwyMDAyNCwyMDk2MSwyMDAzNywyMDA0MCwyMDA2MywyMDA2MiwyMDExMCwyMDEyOSwyMDgwMCwyMDk5NSwyMTI0MiwyMTMxNSwyMTQ0OSwyMTQ3NSwyMjMwMywyMjc2MywyMjgwNSwyMjgyMywyMjg5OSwyMzM3NiwyMzM3NywyMzM3OSwyMzU0NCwyMzU2NywyMzU4NiwyMzYwOCwy''@;'; put 'put ''MzY2NSwyNDAyOSwyNDAzNywyNDA0OSwyNDA1MCwyNDA1MSwyNDA2MiwyNDE3OCwyNDMxOCwyNDMzMSwyNDMzOSwyNTE2NSwxOTk4NSwxOTk4NCwxOTk4MSwyMDAxMywyMDAxNiwyMDAyNSwyMDA0MywyMzYwOSwyMDEwNCwyMDExMywyMDExNywyMDExNCwyMDExNiwyMDEzMCwyMDE2MSwyMDE2''@;'; put 'put ''MCwyMDE2MywyMDE2NiwyMDE2NywyMDE3MywyMDE3MCwyMDE3MSwyMDE2NCwyMDgwMywyMDgwMSwyMDgzOSwyMDg0NSwyMDg0NiwyMDg0NCwyMDg4NywyMDk4MiwyMDk5OCwyMDk5OSwyMWUzLDIxMjQzLDIxMjQ2LDIxMjQ3LDIxMjcwLDIxMzA1LDIxMzIwLDIxMzE5LDIxMzE3LDIxMzQyLDIx''@;'; put 'put ''MzgwLDIxNDUxLDIxNDUwLDIxNDUzLDIyNzY0LDIyODI1LDIyODI3LDIyODI2LDIyODI5LDIzMzgwLDIzNTY5LDIzNTg4LDIzNjEwLDIzNjYzLDI0MDUyLDI0MTg3LDI0MzE5LDI0MzQwLDI0MzQxLDI0NTE1LDI1MDk2LDI1MTQyLDI1MTYzLDI1MTY2LDI1OTAzLDI1OTkxLDI2MDA3LDI2MDIw''@;'; put 'put ''LDI2MDQxLDI2MDg1LDI2MzUyLDI2Mzc2LDI2NDA4LDI3NDI0LDI3NDkwLDI3NTEzLDI3NTk1LDI3NjA0LDI3NjExLDI3NjYzLDI3NzAwLDI4Nzc5LDI5MjI2LDI5MjM4LDI5MjQzLDI5MjU1LDI5MjczLDI5Mjc1LDI5MzU2LDI5NTc5LDE5OTkzLDE5OTkwLDE5OTg5LDE5OTg4LDE5OTkyLDIw''@;'; put 'put ''MDI3LDIwMDQ1LDIwMDQ3LDIwMDQ2LDIwMTk3LDIwMTg0LDIwMTgwLDIwMTgxLDIwMTgyLDIwMTgzLDIwMTk1LDIwMTk2LDIwMTg1LDIwMTkwLDIwODA1LDIwODA0LDIwODczLDIwODc0LDIwOTA4LDIwOTg1LDIwOTg2LDIwOTg0LDIxMDAyLDIxMTUyLDIxMTUxLDIxMjUzLDIxMjU0LDIxMjcx''@;'; put 'put ''LDIxMjc3LDIwMTkxLDIxMzIyLDIxMzIxLDIxMzQ1LDIxMzQ0LDIxMzU5LDIxMzU4LDIxNDM1LDIxNDg3LDIxNDc2LDIxNDkxLDIxNDg0LDIxNDg2LDIxNDgxLDIxNDgwLDIxNTAwLDIxNDk2LDIxNDkzLDIxNDgzLDIxNDc4LDIxNDgyLDIxNDkwLDIxNDg5LDIxNDg4LDIxNDc3LDIxNDg1LDIx''@;'; put 'put ''NDk5LDIyMjM1LDIyMjM0LDIyODA2LDIyODMwLDIyODMzLDIyOTAwLDIyOTAyLDIzMzgxLDIzNDI3LDIzNjEyLDI0MDQwLDI0MDM5LDI0MDM4LDI0MDY2LDI0MDY3LDI0MTc5LDI0MTg4LDI0MzIxLDI0MzQ0LDI0MzQzLDI0NTE3LDI1MDk4LDI1MTcxLDI1MTcyLDI1MTcwLDI1MTY5LDI2MDIx''@;'; put 'put ''LDI2MDg2LDI2NDE0LDI2NDEyLDI2NDEwLDI2NDExLDI2NDEzLDI3NDkxLDI3NTk3LDI3NjY1LDI3NjY0LDI3NzA0LDI3NzEzLDI3NzEyLDI3NzEwLDI5MzU5LDI5NTcyLDI5NTc3LDI5OTE2LDI5OTI2LDI5OTc2LDI5OTgzLDI5OTkyLDI5OTkzLDNlNCwzMDAwMSwzMDAwMiwzMDAwMywzMDA5''@;'; put 'put ''MSwzMDMzMywzMDM4MiwzMDM5OSwzMDQ0NiwzMDY4MywzMDY5MCwzMDcwNywzMTAzNCwzMTE2NiwzMTM0OCwzMTQzNSwxOTk5OCwxOTk5OSwyMDA1MCwyMDA1MSwyMDA3MywyMDEyMSwyMDEzMiwyMDEzNCwyMDEzMywyMDIyMywyMDIzMywyMDI0OSwyMDIzNCwyMDI0NSwyMDIzNywyMDI0MCwy''@;'; put 'put ''MDI0MSwyMDIzOSwyMDIxMCwyMDIxNCwyMDIxOSwyMDIwOCwyMDIxMSwyMDIyMSwyMDIyNSwyMDIzNSwyMDgwOSwyMDgwNywyMDgwNiwyMDgwOCwyMDg0MCwyMDg0OSwyMDg3NywyMDkxMiwyMTAxNSwyMTAwOSwyMTAxMCwyMTAwNiwyMTAxNCwyMTE1NSwyMTI1NiwyMTI4MSwyMTI4MCwyMTM2''@;'; put 'put ''MCwyMTM2MSwyMTUxMywyMTUxOSwyMTUxNiwyMTUxNCwyMTUyMCwyMTUwNSwyMTUxNSwyMTUwOCwyMTUyMSwyMTUxNywyMTUxMiwyMTUwNywyMTUxOCwyMTUxMCwyMTUyMiwyMjI0MCwyMjIzOCwyMjIzNywyMjMyMywyMjMyMCwyMjMxMiwyMjMxNywyMjMxNiwyMjMxOSwyMjMxMywyMjgwOSwy''@;'; put 'put ''MjgxMCwyMjgzOSwyMjg0MCwyMjkxNiwyMjkwNCwyMjkxNSwyMjkwOSwyMjkwNSwyMjkxNCwyMjkxMywyMzM4MywyMzM4NCwyMzQzMSwyMzQzMiwyMzQyOSwyMzQzMywyMzU0NiwyMzU3NCwyMzY3MywyNDAzMCwyNDA3MCwyNDE4MiwyNDE4MCwyNDMzNSwyNDM0NywyNDUzNywyNDUzNCwyNTEw''@;'; put 'put ''MiwyNTEwMCwyNTEwMSwyNTEwNCwyNTE4NywyNTE3OSwyNTE3NiwyNTkxMCwyNjA4OSwyNjA4OCwyNjA5MiwyNjA5MywyNjM1NCwyNjM1NSwyNjM3NywyNjQyOSwyNjQyMCwyNjQxNywyNjQyMSwyNzQyNSwyNzQ5MiwyNzUxNSwyNzY3MCwyNzc0MSwyNzczNSwyNzczNywyNzc0MywyNzc0NCwy''@;'; put 'put ''NzcyOCwyNzczMywyNzc0NSwyNzczOSwyNzcyNSwyNzcyNiwyODc4NCwyOTI3OSwyOTI3NywzMDMzNCwzMTQ4MSwzMTg1OSwzMTk5MiwzMjU2NiwzMjY1MCwzMjcwMSwzMjc2OSwzMjc3MSwzMjc4MCwzMjc4NiwzMjgxOSwzMjg5NSwzMjkwNSwzMjkwNywzMjkwOCwzMzI1MSwzMzI1OCwzMzI2''@;'; put 'put ''NywzMzI3NiwzMzI5MiwzMzMwNywzMzMxMSwzMzM5MCwzMzM5NCwzMzQwNiwzNDQxMSwzNDg4MCwzNDg5MiwzNDkxNSwzNTE5OSwzODQzMywyMDAxOCwyMDEzNiwyMDMwMSwyMDMwMywyMDI5NSwyMDMxMSwyMDMxOCwyMDI3NiwyMDMxNSwyMDMwOSwyMDI3MiwyMDMwNCwyMDMwNSwyMDI4NSwy''@;'; put 'put ''MDI4MiwyMDI4MCwyMDI5MSwyMDMwOCwyMDI4NCwyMDI5NCwyMDMyMywyMDMxNiwyMDMyMCwyMDI3MSwyMDMwMiwyMDI3OCwyMDMxMywyMDMxNywyMDI5NiwyMDMxNCwyMDgxMiwyMDgxMSwyMDgxMywyMDg1MywyMDkxOCwyMDkxOSwyMTAyOSwyMTAyOCwyMTAzMywyMTAzNCwyMTAzMiwyMTE2''@;'; put 'put ''MywyMTE2MSwyMTE2MiwyMTE2NCwyMTI4MywyMTM2MywyMTM2NSwyMTUzMywyMTU0OSwyMTUzNCwyMTU2NiwyMTU0MiwyMTU4MiwyMTU0MywyMTU3NCwyMTU3MSwyMTU1NSwyMTU3NiwyMTU3MCwyMTUzMSwyMTU0NSwyMTU3OCwyMTU2MSwyMTU2MywyMTU2MCwyMTU1MCwyMTU1NywyMTU1OCwy''@;'; put 'put ''MTUzNiwyMTU2NCwyMTU2OCwyMTU1MywyMTU0NywyMTUzNSwyMTU0OCwyMjI1MCwyMjI1NiwyMjI0NCwyMjI1MSwyMjM0NiwyMjM1MywyMjMzNiwyMjM0OSwyMjM0MywyMjM1MCwyMjMzNCwyMjM1MiwyMjM1MSwyMjMzMSwyMjc2NywyMjg0NiwyMjk0MSwyMjkzMCwyMjk1MiwyMjk0MiwyMjk0''@;'; put 'put ''NywyMjkzNywyMjkzNCwyMjkyNSwyMjk0OCwyMjkzMSwyMjkyMiwyMjk0OSwyMzM4OSwyMzM4OCwyMzM4NiwyMzM4NywyMzQzNiwyMzQzNSwyMzQzOSwyMzU5NiwyMzYxNiwyMzYxNywyMzYxNSwyMzYxNCwyMzY5NiwyMzY5NywyMzcwMCwyMzY5MiwyNDA0MywyNDA3NiwyNDIwNywyNDE5OSwy''@;'; put 'put ''NDIwMiwyNDMxMSwyNDMyNCwyNDM1MSwyNDQyMCwyNDQxOCwyNDQzOSwyNDQ0MSwyNDUzNiwyNDUyNCwyNDUzNSwyNDUyNSwyNDU2MSwyNDU1NSwyNDU2OCwyNDU1NCwyNTEwNiwyNTEwNSwyNTIyMCwyNTIzOSwyNTIzOCwyNTIxNiwyNTIwNiwyNTIyNSwyNTE5NywyNTIyNiwyNTIxMiwyNTIx''@;'; put 'put ''NCwyNTIwOSwyNTIwMywyNTIzNCwyNTE5OSwyNTI0MCwyNTE5OCwyNTIzNywyNTIzNSwyNTIzMywyNTIyMiwyNTkxMywyNTkxNSwyNTkxMiwyNjA5NywyNjM1NiwyNjQ2MywyNjQ0NiwyNjQ0NywyNjQ0OCwyNjQ0OSwyNjQ2MCwyNjQ1NCwyNjQ2MiwyNjQ0MSwyNjQzOCwyNjQ2NCwyNjQ1MSwy''@;'; put 'put ''NjQ1NSwyNzQ5MywyNzU5OSwyNzcxNCwyNzc0MiwyNzgwMSwyNzc3NywyNzc4NCwyNzc4NSwyNzc4MSwyNzgwMywyNzc1NCwyNzc3MCwyNzc5MiwyNzc2MCwyNzc4OCwyNzc1MiwyNzc5OCwyNzc5NCwyNzc3MywyNzc3OSwyNzc2MiwyNzc3NCwyNzc2NCwyNzc4MiwyNzc2NiwyNzc4OSwyNzc5''@;'; put 'put ''NiwyNzgwMCwyNzc3OCwyODc5MCwyODc5NiwyODc5NywyODc5MiwyOTI4MiwyOTI4MSwyOTI4MCwyOTM4MCwyOTM3OCwyOTU5MCwyOTk5NiwyOTk5NSwzMDAwNywzMDAwOCwzMDMzOCwzMDQ0NywzMDY5MSwzMTE2OSwzMTE2OCwzMTE2NywzMTM1MCwzMTk5NSwzMjU5NywzMjkxOCwzMjkxNSwz''@;'; put 'put ''MjkyNSwzMjkyMCwzMjkyMywzMjkyMiwzMjk0NiwzMzM5MSwzMzQyNiwzMzQxOSwzMzQyMSwzNTIxMSwzNTI4MiwzNTMyOCwzNTg5NSwzNTkxMCwzNTkyNSwzNTk5NywzNjE5NiwzNjIwOCwzNjI3NSwzNjUyMywzNjU1NCwzNjc2MywzNjc4NCwzNjgwMiwzNjgwNiwzNjgwNSwzNjgwNCwyNDAz''@;'; put 'put ''MywzNzAwOSwzNzAyNiwzNzAzNCwzNzAzMCwzNzAyNywzNzE5MywzNzMxOCwzNzMyNCwzODQ1MCwzODQ0NiwzODQ0OSwzODQ0MiwzODQ0NCwyMDAwNiwyMDA1NCwyMDA4MywyMDEwNywyMDEyMywyMDEyNiwyMDEzOSwyMDE0MCwyMDMzNSwyMDM4MSwyMDM2NSwyMDMzOSwyMDM1MSwyMDMzMiwy''@;'; put 'put ''MDM3OSwyMDM2MywyMDM1OCwyMDM1NSwyMDMzNiwyMDM0MSwyMDM2MCwyMDMyOSwyMDM0NywyMDM3NCwyMDM1MCwyMDM2NywyMDM2OSwyMDM0NiwyMDgyMCwyMDgxOCwyMDgyMSwyMDg0MSwyMDg1NSwyMDg1NCwyMDg1NiwyMDkyNSwyMDk4OSwyMTA1MSwyMTA0OCwyMTA0NywyMTA1MCwyMTA0''@;'; put 'put ''MCwyMTAzOCwyMTA0NiwyMTA1NywyMTE4MiwyMTE3OSwyMTMzMCwyMTMzMiwyMTMzMSwyMTMyOSwyMTM1MCwyMTM2NywyMTM2OCwyMTM2OSwyMTQ2MiwyMTQ2MCwyMTQ2MywyMTYxOSwyMTYyMSwyMTY1NCwyMTYyNCwyMTY1MywyMTYzMiwyMTYyNywyMTYyMywyMTYzNiwyMTY1MCwyMTYzOCwy''@;'; put 'put ''MTYyOCwyMTY0OCwyMTYxNywyMTYyMiwyMTY0NCwyMTY1OCwyMTYwMiwyMTYwOCwyMTY0MywyMTYyOSwyMTY0NiwyMjI2NiwyMjQwMywyMjM5MSwyMjM3OCwyMjM3NywyMjM2OSwyMjM3NCwyMjM3MiwyMjM5NiwyMjgxMiwyMjg1NywyMjg1NSwyMjg1NiwyMjg1MiwyMjg2OCwyMjk3NCwyMjk3''@;'; put 'put ''MSwyMjk5NiwyMjk2OSwyMjk1OCwyMjk5MywyMjk4MiwyMjk5MiwyMjk4OSwyMjk4NywyMjk5NSwyMjk4NiwyMjk1OSwyMjk2MywyMjk5NCwyMjk4MSwyMzM5MSwyMzM5NiwyMzM5NSwyMzQ0NywyMzQ1MCwyMzQ0OCwyMzQ1MiwyMzQ0OSwyMzQ1MSwyMzU3OCwyMzYyNCwyMzYyMSwyMzYyMiwy''@;'; put 'put ''MzczNSwyMzcxMywyMzczNiwyMzcyMSwyMzcyMywyMzcyOSwyMzczMSwyNDA4OCwyNDA5MCwyNDA4NiwyNDA4NSwyNDA5MSwyNDA4MSwyNDE4NCwyNDIxOCwyNDIxNSwyNDIyMCwyNDIxMywyNDIxNCwyNDMxMCwyNDM1OCwyNDM1OSwyNDM2MSwyNDQ0OCwyNDQ0OSwyNDQ0NywyNDQ0NCwyNDU0''@;'; put 'put ''MSwyNDU0NCwyNDU3MywyNDU2NSwyNDU3NSwyNDU5MSwyNDU5NiwyNDYyMywyNDYyOSwyNDU5OCwyNDYxOCwyNDU5NywyNDYwOSwyNDYxNSwyNDYxNywyNDYxOSwyNDYwMywyNTExMCwyNTEwOSwyNTE1MSwyNTE1MCwyNTE1MiwyNTIxNSwyNTI4OSwyNTI5MiwyNTI4NCwyNTI3OSwyNTI4Miwy''@;'; put 'put ''NTI3MywyNTI5OCwyNTMwNywyNTI1OSwyNTI5OSwyNTMwMCwyNTI5MSwyNTI4OCwyNTI1NiwyNTI3NywyNTI3NiwyNTI5NiwyNTMwNSwyNTI4NywyNTI5MywyNTI2OSwyNTMwNiwyNTI2NSwyNTMwNCwyNTMwMiwyNTMwMywyNTI4NiwyNTI2MCwyNTI5NCwyNTkxOCwyNjAyMywyNjA0NCwyNjEw''@;'; put 'put ''NiwyNjEzMiwyNjEzMSwyNjEyNCwyNjExOCwyNjExNCwyNjEyNiwyNjExMiwyNjEyNywyNjEzMywyNjEyMiwyNjExOSwyNjM4MSwyNjM3OSwyNjQ3NywyNjUwNywyNjUxNywyNjQ4MSwyNjUyNCwyNjQ4MywyNjQ4NywyNjUwMywyNjUyNSwyNjUxOSwyNjQ3OSwyNjQ4MCwyNjQ5NSwyNjUwNSwy''@;'; put 'put ''NjQ5NCwyNjUxMiwyNjQ4NSwyNjUyMiwyNjUxNSwyNjQ5MiwyNjQ3NCwyNjQ4MiwyNzQyNywyNzQ5NCwyNzQ5NSwyNzUxOSwyNzY2NywyNzY3NSwyNzg3NSwyNzg4MCwyNzg5MSwyNzgyNSwyNzg1MiwyNzg3NywyNzgyNywyNzgzNywyNzgzOCwyNzgzNiwyNzg3NCwyNzgxOSwyNzg2MSwyNzg1''@;'; put 'put ''OSwyNzgzMiwyNzg0NCwyNzgzMywyNzg0MSwyNzgyMiwyNzg2MywyNzg0NSwyNzg4OSwyNzgzOSwyNzgzNSwyNzg3MywyNzg2NywyNzg1MCwyNzgyMCwyNzg4NywyNzg2OCwyNzg2MiwyNzg3MiwyODgyMSwyODgxNCwyODgxOCwyODgxMCwyODgyNSwyOTIyOCwyOTIyOSwyOTI0MCwyOTI1Niwy''@;'; put 'put ''OTI4NywyOTI4OSwyOTM3NiwyOTM5MCwyOTQwMSwyOTM5OSwyOTM5MiwyOTYwOSwyOTYwOCwyOTU5OSwyOTYxMSwyOTYwNSwzMDAxMywzMDEwOSwzMDEwNSwzMDEwNiwzMDM0MCwzMDQwMiwzMDQ1MCwzMDQ1MiwzMDY5MywzMDcxNywzMTAzOCwzMTA0MCwzMTA0MSwzMTE3NywzMTE3NiwzMTM1''@;'; put 'put ''NCwzMTM1MywzMTQ4MiwzMTk5OCwzMjU5NiwzMjY1MiwzMjY1MSwzMjc3MywzMjk1NCwzMjkzMywzMjkzMCwzMjk0NSwzMjkyOSwzMjkzOSwzMjkzNywzMjk0OCwzMjkzOCwzMjk0MywzMzI1MywzMzI3OCwzMzI5MywzMzQ1OSwzMzQzNywzMzQzMywzMzQ1MywzMzQ2OSwzMzQzOSwzMzQ2NSwz''@;'; put 'put ''MzQ1NywzMzQ1MiwzMzQ0NSwzMzQ1NSwzMzQ2NCwzMzQ0MywzMzQ1NiwzMzQ3MCwzMzQ2MywzNDM4MiwzNDQxNywyMTAyMSwzNDkyMCwzNjU1NSwzNjgxNCwzNjgyMCwzNjgxNywzNzA0NSwzNzA0OCwzNzA0MSwzNzA0NiwzNzMxOSwzNzMyOSwzODI2MywzODI3MiwzODQyOCwzODQ2NCwzODQ2''@;'; put 'put ''MywzODQ1OSwzODQ2OCwzODQ2NiwzODU4NSwzODYzMiwzODczOCwzODc1MCwyMDEyNywyMDE0MSwyMDE0MiwyMDQ0OSwyMDQwNSwyMDM5OSwyMDQxNSwyMDQ0OCwyMDQzMywyMDQzMSwyMDQ0NSwyMDQxOSwyMDQwNiwyMDQ0MCwyMDQ0NywyMDQyNiwyMDQzOSwyMDM5OCwyMDQzMiwyMDQyMCwy''@;'; put 'put ''MDQxOCwyMDQ0MiwyMDQzMCwyMDQ0NiwyMDQwNywyMDgyMywyMDg4MiwyMDg4MSwyMDg5NiwyMTA3MCwyMTA1OSwyMTA2NiwyMTA2OSwyMTA2OCwyMTA2NywyMTA2MywyMTE5MSwyMTE5MywyMTE4NywyMTE4NSwyMTI2MSwyMTMzNSwyMTM3MSwyMTQwMiwyMTQ2NywyMTY3NiwyMTY5NiwyMTY3''@;'; put 'put ''MiwyMTcxMCwyMTcwNSwyMTY4OCwyMTY3MCwyMTY4MywyMTcwMywyMTY5OCwyMTY5MywyMTY3NCwyMTY5NywyMTcwMCwyMTcwNCwyMTY3OSwyMTY3NSwyMTY4MSwyMTY5MSwyMTY3MywyMTY3MSwyMTY5NSwyMjI3MSwyMjQwMiwyMjQxMSwyMjQzMiwyMjQzNSwyMjQzNCwyMjQ3OCwyMjQ0Niwy''@;'; put 'put ''MjQxOSwyMjg2OSwyMjg2NSwyMjg2MywyMjg2MiwyMjg2NCwyMzAwNCwyM2UzLDIzMDM5LDIzMDExLDIzMDE2LDIzMDQzLDIzMDEzLDIzMDE4LDIzMDAyLDIzMDE0LDIzMDQxLDIzMDM1LDIzNDAxLDIzNDU5LDIzNDYyLDIzNDYwLDIzNDU4LDIzNDYxLDIzNTUzLDIzNjMwLDIzNjMxLDIzNjI5''@;'; put 'put ''LDIzNjI3LDIzNzY5LDIzNzYyLDI0MDU1LDI0MDkzLDI0MTAxLDI0MDk1LDI0MTg5LDI0MjI0LDI0MjMwLDI0MzE0LDI0MzI4LDI0MzY1LDI0NDIxLDI0NDU2LDI0NDUzLDI0NDU4LDI0NDU5LDI0NDU1LDI0NDYwLDI0NDU3LDI0NTk0LDI0NjA1LDI0NjA4LDI0NjEzLDI0NTkwLDI0NjE2LDI0''@;'; put 'put ''NjUzLDI0Njg4LDI0NjgwLDI0Njc0LDI0NjQ2LDI0NjQzLDI0Njg0LDI0NjgzLDI0NjgyLDI0Njc2LDI1MTUzLDI1MzA4LDI1MzY2LDI1MzUzLDI1MzQwLDI1MzI1LDI1MzQ1LDI1MzI2LDI1MzQxLDI1MzUxLDI1MzI5LDI1MzM1LDI1MzI3LDI1MzI0LDI1MzQyLDI1MzMyLDI1MzYxLDI1MzQ2''@;'; put 'put ''LDI1OTE5LDI1OTI1LDI2MDI3LDI2MDQ1LDI2MDgyLDI2MTQ5LDI2MTU3LDI2MTQ0LDI2MTUxLDI2MTU5LDI2MTQzLDI2MTUyLDI2MTYxLDI2MTQ4LDI2MzU5LDI2NjIzLDI2NTc5LDI2NjA5LDI2NTgwLDI2NTc2LDI2NjA0LDI2NTUwLDI2NTQzLDI2NjEzLDI2NjAxLDI2NjA3LDI2NTY0LDI2''@;'; put 'put ''NTc3LDI2NTQ4LDI2NTg2LDI2NTk3LDI2NTUyLDI2NTc1LDI2NTkwLDI2NjExLDI2NTQ0LDI2NTg1LDI2NTk0LDI2NTg5LDI2NTc4LDI3NDk4LDI3NTIzLDI3NTI2LDI3NTczLDI3NjAyLDI3NjA3LDI3Njc5LDI3ODQ5LDI3OTE1LDI3OTU0LDI3OTQ2LDI3OTY5LDI3OTQxLDI3OTE2LDI3OTUz''@;'; put 'put ''LDI3OTM0LDI3OTI3LDI3OTYzLDI3OTY1LDI3OTY2LDI3OTU4LDI3OTMxLDI3ODkzLDI3OTYxLDI3OTQzLDI3OTYwLDI3OTQ1LDI3OTUwLDI3OTU3LDI3OTE4LDI3OTQ3LDI4ODQzLDI4ODU4LDI4ODUxLDI4ODQ0LDI4ODQ3LDI4ODQ1LDI4ODU2LDI4ODQ2LDI4ODM2LDI5MjMyLDI5Mjk4LDI5''@;'; put 'put ''Mjk1LDI5MzAwLDI5NDE3LDI5NDA4LDI5NDA5LDI5NjIzLDI5NjQyLDI5NjI3LDI5NjE4LDI5NjQ1LDI5NjMyLDI5NjE5LDI5OTc4LDI5OTk3LDMwMDMxLDMwMDI4LDMwMDMwLDMwMDI3LDMwMTIzLDMwMTE2LDMwMTE3LDMwMTE0LDMwMTE1LDMwMzI4LDMwMzQyLDMwMzQzLDMwMzQ0LDMwNDA4''@;'; put 'put ''LDMwNDA2LDMwNDAzLDMwNDA1LDMwNDY1LDMwNDU3LDMwNDU2LDMwNDczLDMwNDc1LDMwNDYyLDMwNDYwLDMwNDcxLDMwNjg0LDMwNzIyLDMwNzQwLDMwNzMyLDMwNzMzLDMxMDQ2LDMxMDQ5LDMxMDQ4LDMxMDQ3LDMxMTYxLDMxMTYyLDMxMTg1LDMxMTg2LDMxMTc5LDMxMzU5LDMxMzYxLDMx''@;'; put 'put ''NDg3LDMxNDg1LDMxODY5LDMyMDAyLDMyMDA1LDMyZTMsMzIwMDksMzIwMDcsMzIwMDQsMzIwMDYsMzI1NjgsMzI2NTQsMzI3MDMsMzI3NzIsMzI3ODQsMzI3ODEsMzI3ODUsMzI4MjIsMzI5ODIsMzI5OTcsMzI5ODYsMzI5NjMsMzI5NjQsMzI5NzIsMzI5OTMsMzI5ODcsMzI5NzQsMzI5OTAs''@;'; put 'put ''MzI5OTYsMzI5ODksMzMyNjgsMzMzMTQsMzM1MTEsMzM1MzksMzM1NDEsMzM1MDcsMzM0OTksMzM1MTAsMzM1NDAsMzM1MDksMzM1MzgsMzM1NDUsMzM0OTAsMzM0OTUsMzM1MjEsMzM1MzcsMzM1MDAsMzM0OTIsMzM0ODksMzM1MDIsMzM0OTEsMzM1MDMsMzM1MTksMzM1NDIsMzQzODQsMzQ0''@;'; put 'put ''MjUsMzQ0MjcsMzQ0MjYsMzQ4OTMsMzQ5MjMsMzUyMDEsMzUyODQsMzUzMzYsMzUzMzAsMzUzMzEsMzU5OTgsMzZlMywzNjIxMiwzNjIxMSwzNjI3NiwzNjU1NywzNjU1NiwzNjg0OCwzNjgzOCwzNjgzNCwzNjg0MiwzNjgzNywzNjg0NSwzNjg0MywzNjgzNiwzNjg0MCwzNzA2NiwzNzA3MCwz''@;'; put 'put ''NzA1NywzNzA1OSwzNzE5NSwzNzE5NCwzNzMyNSwzODI3NCwzODQ4MCwzODQ3NSwzODQ3NiwzODQ3NywzODc1NCwzODc2MSwzODg1OSwzODg5MywzODg5OSwzODkxMywzOTA4MCwzOTEzMSwzOTEzNSwzOTMxOCwzOTMyMSwyMDA1NiwyMDE0NywyMDQ5MiwyMDQ5MywyMDUxNSwyMDQ2MywyMDUx''@;'; put 'put ''OCwyMDUxNywyMDQ3MiwyMDUyMSwyMDUwMiwyMDQ4NiwyMDU0MCwyMDUxMSwyMDUwNiwyMDQ5OCwyMDQ5NywyMDQ3NCwyMDQ4MCwyMDUwMCwyMDUyMCwyMDQ2NSwyMDUxMywyMDQ5MSwyMDUwNSwyMDUwNCwyMDQ2NywyMDQ2MiwyMDUyNSwyMDUyMiwyMDQ3OCwyMDUyMywyMDQ4OSwyMDg2MCwy''@;'; put 'put ''MDkwMCwyMDkwMSwyMDg5OCwyMDk0MSwyMDk0MCwyMDkzNCwyMDkzOSwyMTA3OCwyMTA4NCwyMTA3NiwyMTA4MywyMTA4NSwyMTI5MCwyMTM3NSwyMTQwNywyMTQwNSwyMTQ3MSwyMTczNiwyMTc3NiwyMTc2MSwyMTgxNSwyMTc1NiwyMTczMywyMTc0NiwyMTc2NiwyMTc1NCwyMTc4MCwyMTcz''@;'; put 'put ''NywyMTc0MSwyMTcyOSwyMTc2OSwyMTc0MiwyMTczOCwyMTczNCwyMTc5OSwyMTc2NywyMTc1NywyMTc3NSwyMjI3NSwyMjI3NiwyMjQ2NiwyMjQ4NCwyMjQ3NSwyMjQ2NywyMjUzNywyMjc5OSwyMjg3MSwyMjg3MiwyMjg3NCwyMzA1NywyMzA2NCwyMzA2OCwyMzA3MSwyMzA2NywyMzA1OSwy''@;'; put 'put ''MzAyMCwyMzA3MiwyMzA3NSwyMzA4MSwyMzA3NywyMzA1MiwyMzA0OSwyMzQwMywyMzY0MCwyMzQ3MiwyMzQ3NSwyMzQ3OCwyMzQ3NiwyMzQ3MCwyMzQ3NywyMzQ4MSwyMzQ4MCwyMzU1NiwyMzYzMywyMzYzNywyMzYzMiwyMzc4OSwyMzgwNSwyMzgwMywyMzc4NiwyMzc4NCwyMzc5MiwyMzc5''@;'; put 'put ''OCwyMzgwOSwyMzc5NiwyNDA0NiwyNDEwOSwyNDEwNywyNDIzNSwyNDIzNywyNDIzMSwyNDM2OSwyNDQ2NiwyNDQ2NSwyNDQ2NCwyNDY2NSwyNDY3NSwyNDY3NywyNDY1NiwyNDY2MSwyNDY4NSwyNDY4MSwyNDY4NywyNDcwOCwyNDczNSwyNDczMCwyNDcxNywyNDcyNCwyNDcxNiwyNDcwOSwy''@;'; put 'put ''NDcyNiwyNTE1OSwyNTMzMSwyNTM1MiwyNTM0MywyNTQyMiwyNTQwNiwyNTM5MSwyNTQyOSwyNTQxMCwyNTQxNCwyNTQyMywyNTQxNywyNTQwMiwyNTQyNCwyNTQwNSwyNTM4NiwyNTM4NywyNTM4NCwyNTQyMSwyNTQyMCwyNTkyOCwyNTkyOSwyNjAwOSwyNjA0OSwyNjA1MywyNjE3OCwyNjE4''@;'; put 'put ''NSwyNjE5MSwyNjE3OSwyNjE5NCwyNjE4OCwyNjE4MSwyNjE3NywyNjM2MCwyNjM4OCwyNjM4OSwyNjM5MSwyNjY1NywyNjY4MCwyNjY5NiwyNjY5NCwyNjcwNywyNjY4MSwyNjY5MCwyNjcwOCwyNjY2NSwyNjgwMywyNjY0NywyNjcwMCwyNjcwNSwyNjY4NSwyNjYxMiwyNjcwNCwyNjY4OCwy''@;'; put 'put ''NjY4NCwyNjY5MSwyNjY2NiwyNjY5MywyNjY0MywyNjY0OCwyNjY4OSwyNzUzMCwyNzUyOSwyNzU3NSwyNzY4MywyNzY4NywyNzY4OCwyNzY4NiwyNzY4NCwyNzg4OCwyODAxMCwyODA1MywyODA0MCwyODAzOSwyODAwNiwyODAyNCwyODAyMywyNzk5MywyODA1MSwyODAxMiwyODA0MSwyODAx''@;'; put 'put ''NCwyNzk5NCwyODAyMCwyODAwOSwyODA0NCwyODA0MiwyODAyNSwyODAzNywyODAwNSwyODA1MiwyODg3NCwyODg4OCwyODkwMCwyODg4OSwyODg3MiwyODg3OSwyOTI0MSwyOTMwNSwyOTQzNiwyOTQzMywyOTQzNywyOTQzMiwyOTQzMSwyOTU3NCwyOTY3NywyOTcwNSwyOTY3OCwyOTY2NCwy''@;'; put 'put ''OTY3NCwyOTY2MiwzMDAzNiwzMDA0NSwzMDA0NCwzMDA0MiwzMDA0MSwzMDE0MiwzMDE0OSwzMDE1MSwzMDEzMCwzMDEzMSwzMDE0MSwzMDE0MCwzMDEzNywzMDE0NiwzMDEzNiwzMDM0NywzMDM4NCwzMDQxMCwzMDQxMywzMDQxNCwzMDUwNSwzMDQ5NSwzMDQ5NiwzMDUwNCwzMDY5NywzMDc2''@;'; put 'put ''OCwzMDc1OSwzMDc3NiwzMDc0OSwzMDc3MiwzMDc3NSwzMDc1NywzMDc2NSwzMDc1MiwzMDc1MSwzMDc3MCwzMTA2MSwzMTA1NiwzMTA3MiwzMTA3MSwzMTA2MiwzMTA3MCwzMTA2OSwzMTA2MywzMTA2NiwzMTIwNCwzMTIwMywzMTIwNywzMTE5OSwzMTIwNiwzMTIwOSwzMTE5MiwzMTM2NCwz''@;'; put 'put ''MTM2OCwzMTQ0OSwzMTQ5NCwzMTUwNSwzMTg4MSwzMjAzMywzMjAyMywzMjAxMSwzMjAxMCwzMjAzMiwzMjAzNCwzMjAyMCwzMjAxNiwzMjAyMSwzMjAyNiwzMjAyOCwzMjAxMywzMjAyNSwzMjAyNywzMjU3MCwzMjYwNywzMjY2MCwzMjcwOSwzMjcwNSwzMjc3NCwzMjc5MiwzMjc4OSwzMjc5''@;'; put 'put ''MywzMjc5MSwzMjgyOSwzMjgzMSwzMzAwOSwzMzAyNiwzMzAwOCwzMzAyOSwzMzAwNSwzMzAxMiwzMzAzMCwzMzAxNiwzMzAxMSwzMzAzMiwzMzAyMSwzMzAzNCwzMzAyMCwzMzAwNywzMzI2MSwzMzI2MCwzMzI4MCwzMzI5NiwzMzMyMiwzMzMyMywzMzMyMCwzMzMyNCwzMzQ2NywzMzU3OSwz''@;'; put 'put ''MzYxOCwzMzYyMCwzMzYxMCwzMzU5MiwzMzYxNiwzMzYwOSwzMzU4OSwzMzU4OCwzMzYxNSwzMzU4NiwzMzU5MywzMzU5MCwzMzU1OSwzMzYwMCwzMzU4NSwzMzU3NiwzMzYwMywzNDM4OCwzNDQ0MiwzNDQ3NCwzNDQ1MSwzNDQ2OCwzNDQ3MywzNDQ0NCwzNDQ2NywzNDQ2MCwzNDkyOCwzNDkz''@;'; put 'put ''NSwzNDk0NSwzNDk0NiwzNDk0MSwzNDkzNywzNTM1MiwzNTM0NCwzNTM0MiwzNTM0MCwzNTM0OSwzNTMzOCwzNTM1MSwzNTM0NywzNTM1MCwzNTM0MywzNTM0NSwzNTkxMiwzNTk2MiwzNTk2MSwzNjAwMSwzNjAwMiwzNjIxNSwzNjUyNCwzNjU2MiwzNjU2NCwzNjU1OSwzNjc4NSwzNjg2NSwz''@;'; put 'put ''Njg3MCwzNjg1NSwzNjg2NCwzNjg1OCwzNjg1MiwzNjg2NywzNjg2MSwzNjg2OSwzNjg1NiwzNzAxMywzNzA4OSwzNzA4NSwzNzA5MCwzNzIwMiwzNzE5NywzNzE5NiwzNzMzNiwzNzM0MSwzNzMzNSwzNzM0MCwzNzMzNywzODI3NSwzODQ5OCwzODQ5OSwzODQ5NywzODQ5MSwzODQ5MywzODUw''@;'; put 'put ''MCwzODQ4OCwzODQ5NCwzODU4NywzOTEzOCwzOTM0MCwzOTU5MiwzOTY0MCwzOTcxNywzOTczMCwzOTc0MCwyMDA5NCwyMDYwMiwyMDYwNSwyMDU3MiwyMDU1MSwyMDU0NywyMDU1NiwyMDU3MCwyMDU1MywyMDU4MSwyMDU5OCwyMDU1OCwyMDU2NSwyMDU5NywyMDU5NiwyMDU5OSwyMDU1OSwy''@;'; put 'put ''MDQ5NSwyMDU5MSwyMDU4OSwyMDgyOCwyMDg4NSwyMDk3NiwyMTA5OCwyMTEwMywyMTIwMiwyMTIwOSwyMTIwOCwyMTIwNSwyMTI2NCwyMTI2MywyMTI3MywyMTMxMSwyMTMxMiwyMTMxMCwyMTQ0MywyNjM2NCwyMTgzMCwyMTg2NiwyMTg2MiwyMTgyOCwyMTg1NCwyMTg1NywyMTgyNywyMTgz''@;'; put 'put ''NCwyMTgwOSwyMTg0NiwyMTgzOSwyMTg0NSwyMTgwNywyMTg2MCwyMTgxNiwyMTgwNiwyMTg1MiwyMTgwNCwyMTg1OSwyMTgxMSwyMTgyNSwyMTg0NywyMjI4MCwyMjI4MywyMjI4MSwyMjQ5NSwyMjUzMywyMjUzOCwyMjUzNCwyMjQ5NiwyMjUwMCwyMjUyMiwyMjUzMCwyMjU4MSwyMjUxOSwy''@;'; put 'put ''MjUyMSwyMjgxNiwyMjg4MiwyMzA5NCwyMzEwNSwyMzExMywyMzE0MiwyMzE0NiwyMzEwNCwyMzEwMCwyMzEzOCwyMzEzMCwyMzExMCwyMzExNCwyMzQwOCwyMzQ5NSwyMzQ5MywyMzQ5MiwyMzQ5MCwyMzQ4NywyMzQ5NCwyMzU2MSwyMzU2MCwyMzU1OSwyMzY0OCwyMzY0NCwyMzY0NSwyMzgx''@;'; put 'put ''NSwyMzgxNCwyMzgyMiwyMzgzNSwyMzgzMCwyMzg0MiwyMzgyNSwyMzg0OSwyMzgyOCwyMzgzMywyMzg0NCwyMzg0NywyMzgzMSwyNDAzNCwyNDEyMCwyNDExOCwyNDExNSwyNDExOSwyNDI0NywyNDI0OCwyNDI0NiwyNDI0NSwyNDI1NCwyNDM3MywyNDM3NSwyNDQwNywyNDQyOCwyNDQyNSwy''@;'; put 'put ''NDQyNywyNDQ3MSwyNDQ3MywyNDQ3OCwyNDQ3MiwyNDQ4MSwyNDQ4MCwyNDQ3NiwyNDcwMywyNDczOSwyNDcxMywyNDczNiwyNDc0NCwyNDc3OSwyNDc1NiwyNDgwNiwyNDc2NSwyNDc3MywyNDc2MywyNDc1NywyNDc5NiwyNDc2NCwyNDc5MiwyNDc4OSwyNDc3NCwyNDc5OSwyNDc2MCwyNDc5''@;'; put 'put ''NCwyNDc3NSwyNTExNCwyNTExNSwyNTE2MCwyNTUwNCwyNTUxMSwyNTQ1OCwyNTQ5NCwyNTUwNiwyNTUwOSwyNTQ2MywyNTQ0NywyNTQ5NiwyNTUxNCwyNTQ1NywyNTUxMywyNTQ4MSwyNTQ3NSwyNTQ5OSwyNTQ1MSwyNTUxMiwyNTQ3NiwyNTQ4MCwyNTQ5NywyNTUwNSwyNTUxNiwyNTQ5MCwy''@;'; put 'put ''NTQ4NywyNTQ3MiwyNTQ2NywyNTQ0OSwyNTQ0OCwyNTQ2NiwyNTk0OSwyNTk0MiwyNTkzNywyNTk0NSwyNTk0MywyMTg1NSwyNTkzNSwyNTk0NCwyNTk0MSwyNTk0MCwyNjAxMiwyNjAxMSwyNjAyOCwyNjA2MywyNjA1OSwyNjA2MCwyNjA2MiwyNjIwNSwyNjIwMiwyNjIxMiwyNjIxNiwyNjIx''@;'; put 'put ''NCwyNjIwNiwyNjM2MSwyMTIwNywyNjM5NSwyNjc1MywyNjc5OSwyNjc4NiwyNjc3MSwyNjgwNSwyNjc1MSwyNjc0MiwyNjgwMSwyNjc5MSwyNjc3NSwyNjgwMCwyNjc1NSwyNjgyMCwyNjc5NywyNjc1OCwyNjc1NywyNjc3MiwyNjc4MSwyNjc5MiwyNjc4MywyNjc4NSwyNjc1NCwyNzQ0Miwy''@;'; put 'put ''NzU3OCwyNzYyNywyNzYyOCwyNzY5MSwyODA0NiwyODA5MiwyODE0NywyODEyMSwyODA4MiwyODEyOSwyODEwOCwyODEzMiwyODE1NSwyODE1NCwyODE2NSwyODEwMywyODEwNywyODA3OSwyODExMywyODA3OCwyODEyNiwyODE1MywyODA4OCwyODE1MSwyODE0OSwyODEwMSwyODExNCwyODE4''@;'; put 'put ''NiwyODA4NSwyODEyMiwyODEzOSwyODEyMCwyODEzOCwyODE0NSwyODE0MiwyODEzNiwyODEwMiwyODEwMCwyODA3NCwyODE0MCwyODA5NSwyODEzNCwyODkyMSwyODkzNywyODkzOCwyODkyNSwyODkxMSwyOTI0NSwyOTMwOSwyOTMxMywyOTQ2OCwyOTQ2NywyOTQ2MiwyOTQ1OSwyOTQ2NSwy''@;'; put 'put ''OTU3NSwyOTcwMSwyOTcwNiwyOTY5OSwyOTcwMiwyOTY5NCwyOTcwOSwyOTkyMCwyOTk0MiwyOTk0MywyOTk4MCwyOTk4NiwzMDA1MywzMDA1NCwzMDA1MCwzMDA2NCwzMDA5NSwzMDE2NCwzMDE2NSwzMDEzMywzMDE1NCwzMDE1NywzMDM1MCwzMDQyMCwzMDQxOCwzMDQyNywzMDUxOSwzMDUy''@;'; put 'put ''NiwzMDUyNCwzMDUxOCwzMDUyMCwzMDUyMiwzMDgyNywzMDc4NywzMDc5OCwzMTA3NywzMTA4MCwzMTA4NSwzMTIyNywzMTM3OCwzMTM4MSwzMTUyMCwzMTUyOCwzMTUxNSwzMTUzMiwzMTUyNiwzMTUxMywzMTUxOCwzMTUzNCwzMTg5MCwzMTg5NSwzMTg5MywzMjA3MCwzMjA2NywzMjExMywz''@;'; put 'put ''MjA0NiwzMjA1NywzMjA2MCwzMjA2NCwzMjA0OCwzMjA1MSwzMjA2OCwzMjA0NywzMjA2NiwzMjA1MCwzMjA0OSwzMjU3MywzMjY3MCwzMjY2NiwzMjcxNiwzMjcxOCwzMjcyMiwzMjc5NiwzMjg0MiwzMjgzOCwzMzA3MSwzMzA0NiwzMzA1OSwzMzA2NywzMzA2NSwzMzA3MiwzMzA2MCwzMzI4''@;'; put 'put ''MiwzMzMzMywzMzMzNSwzMzMzNCwzMzMzNywzMzY3OCwzMzY5NCwzMzY4OCwzMzY1NiwzMzY5OCwzMzY4NiwzMzcyNSwzMzcwNywzMzY4MiwzMzY3NCwzMzY4MywzMzY3MywzMzY5NiwzMzY1NSwzMzY1OSwzMzY2MCwzMzY3MCwzMzcwMywzNDM4OSwyNDQyNiwzNDUwMywzNDQ5NiwzNDQ4Niwz''@;'; put 'put ''NDUwMCwzNDQ4NSwzNDUwMiwzNDUwNywzNDQ4MSwzNDQ3OSwzNDUwNSwzNDg5OSwzNDk3NCwzNDk1MiwzNDk4NywzNDk2MiwzNDk2NiwzNDk1NywzNDk1NSwzNTIxOSwzNTIxNSwzNTM3MCwzNTM1NywzNTM2MywzNTM2NSwzNTM3NywzNTM3MywzNTM1OSwzNTM1NSwzNTM2MiwzNTkxMywzNTkz''@;'; put 'put ''MCwzNjAwOSwzNjAxMiwzNjAxMSwzNjAwOCwzNjAxMCwzNjAwNywzNjE5OSwzNjE5OCwzNjI4NiwzNjI4MiwzNjU3MSwzNjU3NSwzNjg4OSwzNjg3NywzNjg5MCwzNjg4NywzNjg5OSwzNjg5NSwzNjg5MywzNjg4MCwzNjg4NSwzNjg5NCwzNjg5NiwzNjg3OSwzNjg5OCwzNjg4NiwzNjg5MSwz''@;'; put 'put ''Njg4NCwzNzA5NiwzNzEwMSwzNzExNywzNzIwNywzNzMyNiwzNzM2NSwzNzM1MCwzNzM0NywzNzM1MSwzNzM1NywzNzM1MywzODI4MSwzODUwNiwzODUxNywzODUxNSwzODUyMCwzODUxMiwzODUxNiwzODUxOCwzODUxOSwzODUwOCwzODU5MiwzODYzNCwzODYzMywzMTQ1NiwzMTQ1NSwzODkx''@;'; put 'put ''NCwzODkxNSwzOTc3MCw0MDE2NSw0MDU2NSw0MDU3NSw0MDYxMyw0MDYzNSwyMDY0MiwyMDYyMSwyMDYxMywyMDYzMywyMDYyNSwyMDYwOCwyMDYzMCwyMDYzMiwyMDYzNCwyNjM2OCwyMDk3NywyMTEwNiwyMTEwOCwyMTEwOSwyMTA5NywyMTIxNCwyMTIxMywyMTIxMSwyMTMzOCwyMTQxMywy''@;'; put 'put ''MTg4MywyMTg4OCwyMTkyNywyMTg4NCwyMTg5OCwyMTkxNywyMTkxMiwyMTg5MCwyMTkxNiwyMTkzMCwyMTkwOCwyMTg5NSwyMTg5OSwyMTg5MSwyMTkzOSwyMTkzNCwyMTkxOSwyMTgyMiwyMTkzOCwyMTkxNCwyMTk0NywyMTkzMiwyMTkzNywyMTg4NiwyMTg5NywyMTkzMSwyMTkxMywyMjI4''@;'; put 'put ''NSwyMjU3NSwyMjU3MCwyMjU4MCwyMjU2NCwyMjU3NiwyMjU3NywyMjU2MSwyMjU1NywyMjU2MCwyMjc3NywyMjc3OCwyMjg4MCwyMzE1OSwyMzE5NCwyMzE2NywyMzE4NiwyMzE5NSwyMzIwNywyMzQxMSwyMzQwOSwyMzUwNiwyMzUwMCwyMzUwNywyMzUwNCwyMzU2MiwyMzU2MywyMzYwMSwy''@;'; put 'put ''Mzg4NCwyMzg4OCwyMzg2MCwyMzg3OSwyNDA2MSwyNDEzMywyNDEyNSwyNDEyOCwyNDEzMSwyNDE5MCwyNDI2NiwyNDI1NywyNDI1OCwyNDI2MCwyNDM4MCwyNDQyOSwyNDQ4OSwyNDQ5MCwyNDQ4OCwyNDc4NSwyNDgwMSwyNDc1NCwyNDc1OCwyNDgwMCwyNDg2MCwyNDg2NywyNDgyNiwyNDg1''@;'; put 'put ''MywyNDgxNiwyNDgyNywyNDgyMCwyNDkzNiwyNDgxNywyNDg0NiwyNDgyMiwyNDg0MSwyNDgzMiwyNDg1MCwyNTExOSwyNTE2MSwyNTUwNywyNTQ4NCwyNTU1MSwyNTUzNiwyNTU3NywyNTU0NSwyNTU0MiwyNTU0OSwyNTU1NCwyNTU3MSwyNTU1MiwyNTU2OSwyNTU1OCwyNTU4MSwyNTU4Miwy''@;'; put 'put ''NTQ2MiwyNTU4OCwyNTU3OCwyNTU2MywyNTY4MiwyNTU2MiwyNTU5MywyNTk1MCwyNTk1OCwyNTk1NCwyNTk1NSwyNjAwMSwyNmUzLDI2MDMxLDI2MjIyLDI2MjI0LDI2MjI4LDI2MjMwLDI2MjIzLDI2MjU3LDI2MjM0LDI2MjM4LDI2MjMxLDI2MzY2LDI2MzY3LDI2Mzk5LDI2Mzk3LDI2ODc0''@;'; put 'put ''LDI2ODM3LDI2ODQ4LDI2ODQwLDI2ODM5LDI2ODg1LDI2ODQ3LDI2ODY5LDI2ODYyLDI2ODU1LDI2ODczLDI2ODM0LDI2ODY2LDI2ODUxLDI2ODI3LDI2ODI5LDI2ODkzLDI2ODk4LDI2ODk0LDI2ODI1LDI2ODQyLDI2OTkwLDI2ODc1LDI3NDU0LDI3NDUwLDI3NDUzLDI3NTQ0LDI3NTQyLDI3''@;'; put 'put ''NTgwLDI3NjMxLDI3Njk0LDI3Njk1LDI3NjkyLDI4MjA3LDI4MjE2LDI4MjQ0LDI4MTkzLDI4MjEwLDI4MjYzLDI4MjM0LDI4MTkyLDI4MTk3LDI4MTk1LDI4MTg3LDI4MjUxLDI4MjQ4LDI4MTk2LDI4MjQ2LDI4MjcwLDI4MjA1LDI4MTk4LDI4MjcxLDI4MjEyLDI4MjM3LDI4MjE4LDI4MjA0''@;'; put 'put ''LDI4MjI3LDI4MTg5LDI4MjIyLDI4MzYzLDI4Mjk3LDI4MTg1LDI4MjM4LDI4MjU5LDI4MjI4LDI4Mjc0LDI4MjY1LDI4MjU1LDI4OTUzLDI4OTU0LDI4OTY2LDI4OTc2LDI4OTYxLDI4OTgyLDI5MDM4LDI4OTU2LDI5MjYwLDI5MzE2LDI5MzEyLDI5NDk0LDI5NDc3LDI5NDkyLDI5NDgxLDI5''@;'; put 'put ''NzU0LDI5NzM4LDI5NzQ3LDI5NzMwLDI5NzMzLDI5NzQ5LDI5NzUwLDI5NzQ4LDI5NzQzLDI5NzIzLDI5NzM0LDI5NzM2LDI5OTg5LDI5OTkwLDMwMDU5LDMwMDU4LDMwMTc4LDMwMTcxLDMwMTc5LDMwMTY5LDMwMTY4LDMwMTc0LDMwMTc2LDMwMzMxLDMwMzMyLDMwMzU4LDMwMzU1LDMwMzg4''@;'; put 'put ''LDMwNDI4LDMwNTQzLDMwNzAxLDMwODEzLDMwODI4LDMwODMxLDMxMjQ1LDMxMjQwLDMxMjQzLDMxMjM3LDMxMjMyLDMxMzg0LDMxMzgzLDMxMzgyLDMxNDYxLDMxNDU5LDMxNTYxLDMxNTc0LDMxNTU4LDMxNTY4LDMxNTcwLDMxNTcyLDMxNTY1LDMxNTYzLDMxNTY3LDMxNTY5LDMxOTAzLDMx''@;'; put 'put ''OTA5LDMyMDk0LDMyMDgwLDMyMTA0LDMyMDg1LDMyMDQzLDMyMTEwLDMyMTE0LDMyMDk3LDMyMTAyLDMyMDk4LDMyMTEyLDMyMTE1LDIxODkyLDMyNzI0LDMyNzI1LDMyNzc5LDMyODUwLDMyOTAxLDMzMTA5LDMzMTA4LDMzMDk5LDMzMTA1LDMzMTAyLDMzMDgxLDMzMDk0LDMzMDg2LDMzMTAw''@;'; put 'put ''LDMzMTA3LDMzMTQwLDMzMjk4LDMzMzA4LDMzNzY5LDMzNzk1LDMzNzg0LDMzODA1LDMzNzYwLDMzNzMzLDMzODAzLDMzNzI5LDMzNzc1LDMzNzc3LDMzNzgwLDMzODc5LDMzODAyLDMzNzc2LDMzODA0LDMzNzQwLDMzNzg5LDMzNzc4LDMzNzM4LDMzODQ4LDMzODA2LDMzNzk2LDMzNzU2LDMz''@;'; put 'put ''Nzk5LDMzNzQ4LDMzNzU5LDM0Mzk1LDM0NTI3LDM0NTIxLDM0NTQxLDM0NTE2LDM0NTIzLDM0NTMyLDM0NTEyLDM0NTI2LDM0OTAzLDM1MDA5LDM1MDEwLDM0OTkzLDM1MjAzLDM1MjIyLDM1Mzg3LDM1NDI0LDM1NDEzLDM1NDIyLDM1Mzg4LDM1MzkzLDM1NDEyLDM1NDE5LDM1NDA4LDM1Mzk4''@;'; put 'put ''LDM1MzgwLDM1Mzg2LDM1MzgyLDM1NDE0LDM1OTM3LDM1OTcwLDM2MDE1LDM2MDI4LDM2MDE5LDM2MDI5LDM2MDMzLDM2MDI3LDM2MDMyLDM2MDIwLDM2MDIzLDM2MDIyLDM2MDMxLDM2MDI0LDM2MjM0LDM2MjI5LDM2MjI1LDM2MzAyLDM2MzE3LDM2Mjk5LDM2MzE0LDM2MzA1LDM2MzAwLDM2''@;'; put 'put ''MzE1LDM2Mjk0LDM2NjAzLDM2NjAwLDM2NjA0LDM2NzY0LDM2OTEwLDM2OTE3LDM2OTEzLDM2OTIwLDM2OTE0LDM2OTE4LDM3MTIyLDM3MTA5LDM3MTI5LDM3MTE4LDM3MjE5LDM3MjIxLDM3MzI3LDM3Mzk2LDM3Mzk3LDM3NDExLDM3Mzg1LDM3NDA2LDM3Mzg5LDM3MzkyLDM3MzgzLDM3Mzkz''@;'; put 'put ''LDM4MjkyLDM4Mjg3LDM4MjgzLDM4Mjg5LDM4MjkxLDM4MjkwLDM4Mjg2LDM4NTM4LDM4NTQyLDM4NTM5LDM4NTI1LDM4NTMzLDM4NTM0LDM4NTQxLDM4NTE0LDM4NTMyLDM4NTkzLDM4NTk3LDM4NTk2LDM4NTk4LDM4NTk5LDM4NjM5LDM4NjQyLDM4ODYwLDM4OTE3LDM4OTE4LDM4OTIwLDM5''@;'; put 'put ''MTQzLDM5MTQ2LDM5MTUxLDM5MTQ1LDM5MTU0LDM5MTQ5LDM5MzQyLDM5MzQxLDQwNjQzLDQwNjUzLDQwNjU3LDIwMDk4LDIwNjUzLDIwNjYxLDIwNjU4LDIwNjU5LDIwNjc3LDIwNjcwLDIwNjUyLDIwNjYzLDIwNjY3LDIwNjU1LDIwNjc5LDIxMTE5LDIxMTExLDIxMTE3LDIxMjE1LDIxMjIy''@;'; put 'put ''LDIxMjIwLDIxMjE4LDIxMjE5LDIxMjk1LDIxOTgzLDIxOTkyLDIxOTcxLDIxOTkwLDIxOTY2LDIxOTgwLDIxOTU5LDIxOTY5LDIxOTg3LDIxOTg4LDIxOTk5LDIxOTc4LDIxOTg1LDIxOTU3LDIxOTU4LDIxOTg5LDIxOTYxLDIyMjkwLDIyMjkxLDIyNjIyLDIyNjA5LDIyNjE2LDIyNjE1LDIy''@;'; put 'put ''NjE4LDIyNjEyLDIyNjM1LDIyNjA0LDIyNjM3LDIyNjAyLDIyNjI2LDIyNjEwLDIyNjAzLDIyODg3LDIzMjMzLDIzMjQxLDIzMjQ0LDIzMjMwLDIzMjI5LDIzMjI4LDIzMjE5LDIzMjM0LDIzMjE4LDIzOTEzLDIzOTE5LDI0MTQwLDI0MTg1LDI0MjY1LDI0MjY0LDI0MzM4LDI0NDA5LDI0NDky''@;'; put 'put ''LDI0NDk0LDI0ODU4LDI0ODQ3LDI0OTA0LDI0ODYzLDI0ODE5LDI0ODU5LDI0ODI1LDI0ODMzLDI0ODQwLDI0OTEwLDI0OTA4LDI0OTAwLDI0OTA5LDI0ODk0LDI0ODg0LDI0ODcxLDI0ODQ1LDI0ODM4LDI0ODg3LDI1MTIxLDI1MTIyLDI1NjE5LDI1NjYyLDI1NjMwLDI1NjQyLDI1NjQ1LDI1''@;'; put 'put ''NjYxLDI1NjQ0LDI1NjE1LDI1NjI4LDI1NjIwLDI1NjEzLDI1NjU0LDI1NjIyLDI1NjIzLDI1NjA2LDI1OTY0LDI2MDE1LDI2MDMyLDI2MjYzLDI2MjQ5LDI2MjQ3LDI2MjQ4LDI2MjYyLDI2MjQ0LDI2MjY0LDI2MjUzLDI2MzcxLDI3MDI4LDI2OTg5LDI2OTcwLDI2OTk5LDI2OTc2LDI2OTY0''@;'; put 'put ''LDI2OTk3LDI2OTI4LDI3MDEwLDI2OTU0LDI2OTg0LDI2OTg3LDI2OTc0LDI2OTYzLDI3MDAxLDI3MDE0LDI2OTczLDI2OTc5LDI2OTcxLDI3NDYzLDI3NTA2LDI3NTg0LDI3NTgzLDI3NjAzLDI3NjQ1LDI4MzIyLDI4MzM1LDI4MzcxLDI4MzQyLDI4MzU0LDI4MzA0LDI4MzE3LDI4MzU5LDI4''@;'; put 'put ''MzU3LDI4MzI1LDI4MzEyLDI4MzQ4LDI4MzQ2LDI4MzMxLDI4MzY5LDI4MzEwLDI4MzE2LDI4MzU2LDI4MzcyLDI4MzMwLDI4MzI3LDI4MzQwLDI5MDA2LDI5MDE3LDI5MDMzLDI5MDI4LDI5MDAxLDI5MDMxLDI5MDIwLDI5MDM2LDI5MDMwLDI5MDA0LDI5MDI5LDI5MDIyLDI4OTk4LDI5MDMy''@;'; put 'put ''LDI5MDE0LDI5MjQyLDI5MjY2LDI5NDk1LDI5NTA5LDI5NTAzLDI5NTAyLDI5ODA3LDI5Nzg2LDI5NzgxLDI5NzkxLDI5NzkwLDI5NzYxLDI5NzU5LDI5Nzg1LDI5Nzg3LDI5Nzg4LDMwMDcwLDMwMDcyLDMwMjA4LDMwMTkyLDMwMjA5LDMwMTk0LDMwMTkzLDMwMjAyLDMwMjA3LDMwMTk2LDMw''@;'; put 'put ''MTk1LDMwNDMwLDMwNDMxLDMwNTU1LDMwNTcxLDMwNTY2LDMwNTU4LDMwNTYzLDMwNTg1LDMwNTcwLDMwNTcyLDMwNTU2LDMwNTY1LDMwNTY4LDMwNTYyLDMwNzAyLDMwODYyLDMwODk2LDMwODcxLDMwODcyLDMwODYwLDMwODU3LDMwODQ0LDMwODY1LDMwODY3LDMwODQ3LDMxMDk4LDMxMTAz''@;'; put 'put ''LDMxMTA1LDMzODM2LDMxMTY1LDMxMjYwLDMxMjU4LDMxMjY0LDMxMjUyLDMxMjYzLDMxMjYyLDMxMzkxLDMxMzkyLDMxNjA3LDMxNjgwLDMxNTg0LDMxNTk4LDMxNTkxLDMxOTIxLDMxOTIzLDMxOTI1LDMyMTQ3LDMyMTIxLDMyMTQ1LDMyMTI5LDMyMTQzLDMyMDkxLDMyNjIyLDMyNjE3LDMy''@;'; put 'put ''NjE4LDMyNjI2LDMyNjgxLDMyNjgwLDMyNjc2LDMyODU0LDMyODU2LDMyOTAyLDMyOTAwLDMzMTM3LDMzMTM2LDMzMTQ0LDMzMTI1LDMzMTM0LDMzMTM5LDMzMTMxLDMzMTQ1LDMzMTQ2LDMzMTI2LDMzMjg1LDMzMzUxLDMzOTIyLDMzOTExLDMzODUzLDMzODQxLDMzOTA5LDMzODk0LDMzODk5''@;'; put 'put ''LDMzODY1LDMzOTAwLDMzODgzLDMzODUyLDMzODQ1LDMzODg5LDMzODkxLDMzODk3LDMzOTAxLDMzODYyLDM0Mzk4LDM0Mzk2LDM0Mzk5LDM0NTUzLDM0NTc5LDM0NTY4LDM0NTY3LDM0NTYwLDM0NTU4LDM0NTU1LDM0NTYyLDM0NTYzLDM0NTY2LDM0NTcwLDM0OTA1LDM1MDM5LDM1MDI4LDM1''@;'; put 'put ''MDMzLDM1MDM2LDM1MDMyLDM1MDM3LDM1MDQxLDM1MDE4LDM1MDI5LDM1MDI2LDM1MjI4LDM1Mjk5LDM1NDM1LDM1NDQyLDM1NDQzLDM1NDMwLDM1NDMzLDM1NDQwLDM1NDYzLDM1NDUyLDM1NDI3LDM1NDg4LDM1NDQxLDM1NDYxLDM1NDM3LDM1NDI2LDM1NDM4LDM1NDM2LDM1NDQ5LDM1NDUx''@;'; put 'put ''LDM1MzkwLDM1NDMyLDM1OTM4LDM1OTc4LDM1OTc3LDM2MDQyLDM2MDM5LDM2MDQwLDM2MDM2LDM2MDE4LDM2MDM1LDM2MDM0LDM2MDM3LDM2MzIxLDM2MzE5LDM2MzI4LDM2MzM1LDM2MzM5LDM2MzQ2LDM2MzMwLDM2MzI0LDM2MzI2LDM2NTMwLDM2NjExLDM2NjE3LDM2NjA2LDM2NjE4LDM2''@;'; put 'put ''NzY3LDM2Nzg2LDM2OTM5LDM2OTM4LDM2OTQ3LDM2OTMwLDM2OTQ4LDM2OTI0LDM2OTQ5LDM2OTQ0LDM2OTM1LDM2OTQzLDM2OTQyLDM2OTQxLDM2OTQ1LDM2OTI2LDM2OTI5LDM3MTM4LDM3MTQzLDM3MjI4LDM3MjI2LDM3MjI1LDM3MzIxLDM3NDMxLDM3NDYzLDM3NDMyLDM3NDM3LDM3NDQw''@;'; put 'put ''LDM3NDM4LDM3NDY3LDM3NDUxLDM3NDc2LDM3NDU3LDM3NDI4LDM3NDQ5LDM3NDUzLDM3NDQ1LDM3NDMzLDM3NDM5LDM3NDY2LDM4Mjk2LDM4NTUyLDM4NTQ4LDM4NTQ5LDM4NjA1LDM4NjAzLDM4NjAxLDM4NjAyLDM4NjQ3LDM4NjUxLDM4NjQ5LDM4NjQ2LDM4NzQyLDM4NzcyLDM4Nzc0LDM4''@;'; put 'put ''OTI4LDM4OTI5LDM4OTMxLDM4OTIyLDM4OTMwLDM4OTI0LDM5MTY0LDM5MTU2LDM5MTY1LDM5MTY2LDM5MzQ3LDM5MzQ1LDM5MzQ4LDM5NjQ5LDQwMTY5LDQwNTc4LDQwNzE4LDQwNzIzLDQwNzM2LDIwNzExLDIwNzE4LDIwNzA5LDIwNjk0LDIwNzE3LDIwNjk4LDIwNjkzLDIwNjg3LDIwNjg5''@;'; put 'put ''LDIwNzIxLDIwNjg2LDIwNzEzLDIwODM0LDIwOTc5LDIxMTIzLDIxMTIyLDIxMjk3LDIxNDIxLDIyMDE0LDIyMDE2LDIyMDQzLDIyMDM5LDIyMDEzLDIyMDM2LDIyMDIyLDIyMDI1LDIyMDI5LDIyMDMwLDIyMDA3LDIyMDM4LDIyMDQ3LDIyMDI0LDIyMDMyLDIyMDA2LDIyMjk2LDIyMjk0LDIy''@;'; put 'put ''NjQ1LDIyNjU0LDIyNjU5LDIyNjc1LDIyNjY2LDIyNjQ5LDIyNjYxLDIyNjUzLDIyNzgxLDIyODIxLDIyODE4LDIyODIwLDIyODkwLDIyODg5LDIzMjY1LDIzMjcwLDIzMjczLDIzMjU1LDIzMjU0LDIzMjU2LDIzMjY3LDIzNDEzLDIzNTE4LDIzNTI3LDIzNTIxLDIzNTI1LDIzNTI2LDIzNTI4''@;'; put 'put ''LDIzNTIyLDIzNTI0LDIzNTE5LDIzNTY1LDIzNjUwLDIzOTQwLDIzOTQzLDI0MTU1LDI0MTYzLDI0MTQ5LDI0MTUxLDI0MTQ4LDI0Mjc1LDI0Mjc4LDI0MzMwLDI0MzkwLDI0NDMyLDI0NTA1LDI0OTAzLDI0ODk1LDI0OTA3LDI0OTUxLDI0OTMwLDI0OTMxLDI0OTI3LDI0OTIyLDI0OTIwLDI0''@;'; put 'put ''OTQ5LDI1MTMwLDI1NzM1LDI1Njg4LDI1Njg0LDI1NzY0LDI1NzIwLDI1Njk1LDI1NzIyLDI1NjgxLDI1NzAzLDI1NjUyLDI1NzA5LDI1NzIzLDI1OTcwLDI2MDE3LDI2MDcxLDI2MDcwLDI2Mjc0LDI2MjgwLDI2MjY5LDI3MDM2LDI3MDQ4LDI3MDI5LDI3MDczLDI3MDU0LDI3MDkxLDI3MDgz''@;'; put 'put ''LDI3MDM1LDI3MDYzLDI3MDY3LDI3MDUxLDI3MDYwLDI3MDg4LDI3MDg1LDI3MDUzLDI3MDg0LDI3MDQ2LDI3MDc1LDI3MDQzLDI3NDY1LDI3NDY4LDI3Njk5LDI4NDY3LDI4NDM2LDI4NDE0LDI4NDM1LDI4NDA0LDI4NDU3LDI4NDc4LDI4NDQ4LDI4NDYwLDI4NDMxLDI4NDE4LDI4NDUwLDI4''@;'; put 'put ''NDE1LDI4Mzk5LDI4NDIyLDI4NDY1LDI4NDcyLDI4NDY2LDI4NDUxLDI4NDM3LDI4NDU5LDI4NDYzLDI4NTUyLDI4NDU4LDI4Mzk2LDI4NDE3LDI4NDAyLDI4MzY0LDI4NDA3LDI5MDc2LDI5MDgxLDI5MDUzLDI5MDY2LDI5MDYwLDI5MDc0LDI5MjQ2LDI5MzMwLDI5MzM0LDI5NTA4LDI5NTIw''@;'; put 'put ''LDI5Nzk2LDI5Nzk1LDI5ODAyLDI5ODA4LDI5ODA1LDI5OTU2LDMwMDk3LDMwMjQ3LDMwMjIxLDMwMjE5LDMwMjE3LDMwMjI3LDMwNDMzLDMwNDM1LDMwNTk2LDMwNTg5LDMwNTkxLDMwNTYxLDMwOTEzLDMwODc5LDMwODg3LDMwODk5LDMwODg5LDMwODgzLDMxMTE4LDMxMTE5LDMxMTE3LDMx''@;'; put 'put ''Mjc4LDMxMjgxLDMxNDAyLDMxNDAxLDMxNDY5LDMxNDcxLDMxNjQ5LDMxNjM3LDMxNjI3LDMxNjA1LDMxNjM5LDMxNjQ1LDMxNjM2LDMxNjMxLDMxNjcyLDMxNjIzLDMxNjIwLDMxOTI5LDMxOTMzLDMxOTM0LDMyMTg3LDMyMTc2LDMyMTU2LDMyMTg5LDMyMTkwLDMyMTYwLDMyMjAyLDMyMTgw''@;'; put 'put ''LDMyMTc4LDMyMTc3LDMyMTg2LDMyMTYyLDMyMTkxLDMyMTgxLDMyMTg0LDMyMTczLDMyMjEwLDMyMTk5LDMyMTcyLDMyNjI0LDMyNzM2LDMyNzM3LDMyNzM1LDMyODYyLDMyODU4LDMyOTAzLDMzMTA0LDMzMTUyLDMzMTY3LDMzMTYwLDMzMTYyLDMzMTUxLDMzMTU0LDMzMjU1LDMzMjc0LDMz''@;'; put 'put ''Mjg3LDMzMzAwLDMzMzEwLDMzMzU1LDMzOTkzLDMzOTgzLDMzOTkwLDMzOTg4LDMzOTQ1LDMzOTUwLDMzOTcwLDMzOTQ4LDMzOTk1LDMzOTc2LDMzOTg0LDM0MDAzLDMzOTM2LDMzOTgwLDM0MDAxLDMzOTk0LDM0NjIzLDM0NTg4LDM0NjE5LDM0NTk0LDM0NTk3LDM0NjEyLDM0NTg0LDM0NjQ1''@;'; put 'put ''LDM0NjE1LDM0NjAxLDM1MDU5LDM1MDc0LDM1MDYwLDM1MDY1LDM1MDY0LDM1MDY5LDM1MDQ4LDM1MDk4LDM1MDU1LDM1NDk0LDM1NDY4LDM1NDg2LDM1NDkxLDM1NDY5LDM1NDg5LDM1NDc1LDM1NDkyLDM1NDk4LDM1NDkzLDM1NDk2LDM1NDgwLDM1NDczLDM1NDgyLDM1NDk1LDM1OTQ2LDM1''@;'; put 'put ''OTgxLDM1OTgwLDM2MDUxLDM2MDQ5LDM2MDUwLDM2MjAzLDM2MjQ5LDM2MjQ1LDM2MzQ4LDM2NjI4LDM2NjI2LDM2NjI5LDM2NjI3LDM2NzcxLDM2OTYwLDM2OTUyLDM2OTU2LDM2OTYzLDM2OTUzLDM2OTU4LDM2OTYyLDM2OTU3LDM2OTU1LDM3MTQ1LDM3MTQ0LDM3MTUwLDM3MjM3LDM3MjQw''@;'; put 'put ''LDM3MjM5LDM3MjM2LDM3NDk2LDM3NTA0LDM3NTA5LDM3NTI4LDM3NTI2LDM3NDk5LDM3NTIzLDM3NTMyLDM3NTQ0LDM3NTAwLDM3NTIxLDM4MzA1LDM4MzEyLDM4MzEzLDM4MzA3LDM4MzA5LDM4MzA4LDM4NTUzLDM4NTU2LDM4NTU1LDM4NjA0LDM4NjEwLDM4NjU2LDM4NzgwLDM4Nzg5LDM4''@;'; put 'put ''OTAyLDM4OTM1LDM4OTM2LDM5MDg3LDM5MDg5LDM5MTcxLDM5MTczLDM5MTgwLDM5MTc3LDM5MzYxLDM5NTk5LDM5NjAwLDM5NjU0LDM5NzQ1LDM5NzQ2LDQwMTgwLDQwMTgyLDQwMTc5LDQwNjM2LDQwNzYzLDQwNzc4LDIwNzQwLDIwNzM2LDIwNzMxLDIwNzI1LDIwNzI5LDIwNzM4LDIwNzQ0''@;'; put 'put ''LDIwNzQ1LDIwNzQxLDIwOTU2LDIxMTI3LDIxMTI4LDIxMTI5LDIxMTMzLDIxMTMwLDIxMjMyLDIxNDI2LDIyMDYyLDIyMDc1LDIyMDczLDIyMDY2LDIyMDc5LDIyMDY4LDIyMDU3LDIyMDk5LDIyMDk0LDIyMTAzLDIyMTMyLDIyMDcwLDIyMDYzLDIyMDY0LDIyNjU2LDIyNjg3LDIyNjg2LDIy''@;'; put 'put ''NzA3LDIyNjg0LDIyNzAyLDIyNjk3LDIyNjk0LDIyODkzLDIzMzA1LDIzMjkxLDIzMzA3LDIzMjg1LDIzMzA4LDIzMzA0LDIzNTM0LDIzNTMyLDIzNTI5LDIzNTMxLDIzNjUyLDIzNjUzLDIzOTY1LDIzOTU2LDI0MTYyLDI0MTU5LDI0MTYxLDI0MjkwLDI0MjgyLDI0Mjg3LDI0Mjg1LDI0Mjkx''@;'; put 'put ''LDI0Mjg4LDI0MzkyLDI0NDMzLDI0NTAzLDI0NTAxLDI0OTUwLDI0OTM1LDI0OTQyLDI0OTI1LDI0OTE3LDI0OTYyLDI0OTU2LDI0OTQ0LDI0OTM5LDI0OTU4LDI0OTk5LDI0OTc2LDI1MDAzLDI0OTc0LDI1MDA0LDI0OTg2LDI0OTk2LDI0OTgwLDI1MDA2LDI1MTM0LDI1NzA1LDI1NzExLDI1''@;'; put 'put ''NzIxLDI1NzU4LDI1Nzc4LDI1NzM2LDI1NzQ0LDI1Nzc2LDI1NzY1LDI1NzQ3LDI1NzQ5LDI1NzY5LDI1NzQ2LDI1Nzc0LDI1NzczLDI1NzcxLDI1NzU0LDI1NzcyLDI1NzUzLDI1NzYyLDI1Nzc5LDI1OTczLDI1OTc1LDI1OTc2LDI2Mjg2LDI2MjgzLDI2MjkyLDI2Mjg5LDI3MTcxLDI3MTY3''@;'; put 'put ''LDI3MTEyLDI3MTM3LDI3MTY2LDI3MTYxLDI3MTMzLDI3MTY5LDI3MTU1LDI3MTQ2LDI3MTIzLDI3MTM4LDI3MTQxLDI3MTE3LDI3MTUzLDI3NDcyLDI3NDcwLDI3NTU2LDI3NTg5LDI3NTkwLDI4NDc5LDI4NTQwLDI4NTQ4LDI4NDk3LDI4NTE4LDI4NTAwLDI4NTUwLDI4NTI1LDI4NTA3LDI4''@;'; put 'put ''NTM2LDI4NTI2LDI4NTU4LDI4NTM4LDI4NTI4LDI4NTE2LDI4NTY3LDI4NTA0LDI4MzczLDI4NTI3LDI4NTEyLDI4NTExLDI5MDg3LDI5MTAwLDI5MTA1LDI5MDk2LDI5MjcwLDI5MzM5LDI5NTE4LDI5NTI3LDI5ODAxLDI5ODM1LDI5ODI3LDI5ODIyLDI5ODI0LDMwMDc5LDMwMjQwLDMwMjQ5''@;'; put 'put ''LDMwMjM5LDMwMjQ0LDMwMjQ2LDMwMjQxLDMwMjQyLDMwMzYyLDMwMzk0LDMwNDM2LDMwNjA2LDMwNTk5LDMwNjA0LDMwNjA5LDMwNjAzLDMwOTIzLDMwOTE3LDMwOTA2LDMwOTIyLDMwOTEwLDMwOTMzLDMwOTA4LDMwOTI4LDMxMjk1LDMxMjkyLDMxMjk2LDMxMjkzLDMxMjg3LDMxMjkxLDMx''@;'; put 'put ''NDA3LDMxNDA2LDMxNjYxLDMxNjY1LDMxNjg0LDMxNjY4LDMxNjg2LDMxNjg3LDMxNjgxLDMxNjQ4LDMxNjkyLDMxOTQ2LDMyMjI0LDMyMjQ0LDMyMjM5LDMyMjUxLDMyMjE2LDMyMjM2LDMyMjIxLDMyMjMyLDMyMjI3LDMyMjE4LDMyMjIyLDMyMjMzLDMyMTU4LDMyMjE3LDMyMjQyLDMyMjQ5''@;'; put 'put ''LDMyNjI5LDMyNjMxLDMyNjg3LDMyNzQ1LDMyODA2LDMzMTc5LDMzMTgwLDMzMTgxLDMzMTg0LDMzMTc4LDMzMTc2LDM0MDcxLDM0MTA5LDM0MDc0LDM0MDMwLDM0MDkyLDM0MDkzLDM0MDY3LDM0MDY1LDM0MDgzLDM0MDgxLDM0MDY4LDM0MDI4LDM0MDg1LDM0MDQ3LDM0MDU0LDM0NjkwLDM0''@;'; put 'put ''Njc2LDM0Njc4LDM0NjU2LDM0NjYyLDM0NjgwLDM0NjY0LDM0NjQ5LDM0NjQ3LDM0NjM2LDM0NjQzLDM0OTA3LDM0OTA5LDM1MDg4LDM1MDc5LDM1MDkwLDM1MDkxLDM1MDkzLDM1MDgyLDM1NTE2LDM1NTM4LDM1NTI3LDM1NTI0LDM1NDc3LDM1NTMxLDM1NTc2LDM1NTA2LDM1NTI5LDM1NTIy''@;'; put 'put ''LDM1NTE5LDM1NTA0LDM1NTQyLDM1NTMzLDM1NTEwLDM1NTEzLDM1NTQ3LDM1OTE2LDM1OTE4LDM1OTQ4LDM2MDY0LDM2MDYyLDM2MDcwLDM2MDY4LDM2MDc2LDM2MDc3LDM2MDY2LDM2MDY3LDM2MDYwLDM2MDc0LDM2MDY1LDM2MjA1LDM2MjU1LDM2MjU5LDM2Mzk1LDM2MzY4LDM2MzgxLDM2''@;'; put 'put ''Mzg2LDM2MzY3LDM2MzkzLDM2MzgzLDM2Mzg1LDM2MzgyLDM2NTM4LDM2NjM3LDM2NjM1LDM2NjM5LDM2NjQ5LDM2NjQ2LDM2NjUwLDM2NjM2LDM2NjM4LDM2NjQ1LDM2OTY5LDM2OTc0LDM2OTY4LDM2OTczLDM2OTgzLDM3MTY4LDM3MTY1LDM3MTU5LDM3MTY5LDM3MjU1LDM3MjU3LDM3MjU5''@;'; put 'put ''LDM3MjUxLDM3NTczLDM3NTYzLDM3NTU5LDM3NjEwLDM3NTQ4LDM3NjA0LDM3NTY5LDM3NTU1LDM3NTY0LDM3NTg2LDM3NTc1LDM3NjE2LDM3NTU0LDM4MzE3LDM4MzIxLDM4NjYwLDM4NjYyLDM4NjYzLDM4NjY1LDM4NzUyLDM4Nzk3LDM4Nzk1LDM4Nzk5LDM4OTQ1LDM4OTU1LDM4OTQwLDM5''@;'; put 'put ''MDkxLDM5MTc4LDM5MTg3LDM5MTg2LDM5MTkyLDM5Mzg5LDM5Mzc2LDM5MzkxLDM5Mzg3LDM5Mzc3LDM5MzgxLDM5Mzc4LDM5Mzg1LDM5NjA3LDM5NjYyLDM5NjYzLDM5NzE5LDM5NzQ5LDM5NzQ4LDM5Nzk5LDM5NzkxLDQwMTk4LDQwMjAxLDQwMTk1LDQwNjE3LDQwNjM4LDQwNjU0LDIyNjk2''@;'; put 'put ''LDQwNzg2LDIwNzU0LDIwNzYwLDIwNzU2LDIwNzUyLDIwNzU3LDIwODY0LDIwOTA2LDIwOTU3LDIxMTM3LDIxMTM5LDIxMjM1LDIyMTA1LDIyMTIzLDIyMTM3LDIyMTIxLDIyMTE2LDIyMTM2LDIyMTIyLDIyMTIwLDIyMTE3LDIyMTI5LDIyMTI3LDIyMTI0LDIyMTE0LDIyMTM0LDIyNzIxLDIy''@;'; put 'put ''NzE4LDIyNzI3LDIyNzI1LDIyODk0LDIzMzI1LDIzMzQ4LDIzNDE2LDIzNTM2LDIzNTY2LDI0Mzk0LDI1MDEwLDI0OTc3LDI1MDAxLDI0OTcwLDI1MDM3LDI1MDE0LDI1MDIyLDI1MDM0LDI1MDMyLDI1MTM2LDI1Nzk3LDI1NzkzLDI1ODAzLDI1Nzg3LDI1Nzg4LDI1ODE4LDI1Nzk2LDI1Nzk5''@;'; put 'put ''LDI1Nzk0LDI1ODA1LDI1NzkxLDI1ODEwLDI1ODEyLDI1NzkwLDI1OTcyLDI2MzEwLDI2MzEzLDI2Mjk3LDI2MzA4LDI2MzExLDI2Mjk2LDI3MTk3LDI3MTkyLDI3MTk0LDI3MjI1LDI3MjQzLDI3MjI0LDI3MTkzLDI3MjA0LDI3MjM0LDI3MjMzLDI3MjExLDI3MjA3LDI3MTg5LDI3MjMxLDI3''@;'; put 'put ''MjA4LDI3NDgxLDI3NTExLDI3NjUzLDI4NjEwLDI4NTkzLDI4NTc3LDI4NjExLDI4NTgwLDI4NjA5LDI4NTgzLDI4NTk1LDI4NjA4LDI4NjAxLDI4NTk4LDI4NTgyLDI4NTc2LDI4NTk2LDI5MTE4LDI5MTI5LDI5MTM2LDI5MTM4LDI5MTI4LDI5MTQxLDI5MTEzLDI5MTM0LDI5MTQ1LDI5MTQ4''@;'; put 'put ''LDI5MTIzLDI5MTI0LDI5NTQ0LDI5ODUyLDI5ODU5LDI5ODQ4LDI5ODU1LDI5ODU0LDI5OTIyLDI5OTY0LDI5OTY1LDMwMjYwLDMwMjY0LDMwMjY2LDMwNDM5LDMwNDM3LDMwNjI0LDMwNjIyLDMwNjIzLDMwNjI5LDMwOTUyLDMwOTM4LDMwOTU2LDMwOTUxLDMxMTQyLDMxMzA5LDMxMzEwLDMx''@;'; put 'put ''MzAyLDMxMzA4LDMxMzA3LDMxNDE4LDMxNzA1LDMxNzYxLDMxNjg5LDMxNzE2LDMxNzA3LDMxNzEzLDMxNzIxLDMxNzE4LDMxOTU3LDMxOTU4LDMyMjY2LDMyMjczLDMyMjY0LDMyMjgzLDMyMjkxLDMyMjg2LDMyMjg1LDMyMjY1LDMyMjcyLDMyNjMzLDMyNjkwLDMyNzUyLDMyNzUzLDMyNzUw''@;'; put 'put ''LDMyODA4LDMzMjAzLDMzMTkzLDMzMTkyLDMzMjc1LDMzMjg4LDMzMzY4LDMzMzY5LDM0MTIyLDM0MTM3LDM0MTIwLDM0MTUyLDM0MTUzLDM0MTE1LDM0MTIxLDM0MTU3LDM0MTU0LDM0MTQyLDM0NjkxLDM0NzE5LDM0NzE4LDM0NzIyLDM0NzAxLDM0OTEzLDM1MTE0LDM1MTIyLDM1MTA5LDM1''@;'; put 'put ''MTE1LDM1MTA1LDM1MjQyLDM1MjM4LDM1NTU4LDM1NTc4LDM1NTYzLDM1NTY5LDM1NTg0LDM1NTQ4LDM1NTU5LDM1NTY2LDM1NTgyLDM1NTg1LDM1NTg2LDM1NTc1LDM1NTY1LDM1NTcxLDM1NTc0LDM1NTgwLDM1OTQ3LDM1OTQ5LDM1OTg3LDM2MDg0LDM2NDIwLDM2NDAxLDM2NDA0LDM2NDE4''@;'; put 'put ''LDM2NDA5LDM2NDA1LDM2NjY3LDM2NjU1LDM2NjY0LDM2NjU5LDM2Nzc2LDM2Nzc0LDM2OTgxLDM2OTgwLDM2OTg0LDM2OTc4LDM2OTg4LDM2OTg2LDM3MTcyLDM3MjY2LDM3NjY0LDM3Njg2LDM3NjI0LDM3NjgzLDM3Njc5LDM3NjY2LDM3NjI4LDM3Njc1LDM3NjM2LDM3NjU4LDM3NjQ4LDM3''@;'; put 'put ''NjcwLDM3NjY1LDM3NjUzLDM3Njc4LDM3NjU3LDM4MzMxLDM4NTY3LDM4NTY4LDM4NTcwLDM4NjEzLDM4NjcwLDM4NjczLDM4Njc4LDM4NjY5LDM4Njc1LDM4NjcxLDM4NzQ3LDM4NzQ4LDM4NzU4LDM4ODA4LDM4OTYwLDM4OTY4LDM4OTcxLDM4OTY3LDM4OTU3LDM4OTY5LDM4OTQ4LDM5MTg0''@;'; put 'put ''LDM5MjA4LDM5MTk4LDM5MTk1LDM5MjAxLDM5MTk0LDM5NDA1LDM5Mzk0LDM5NDA5LDM5NjA4LDM5NjEyLDM5Njc1LDM5NjYxLDM5NzIwLDM5ODI1LDQwMjEzLDQwMjI3LDQwMjMwLDQwMjMyLDQwMjEwLDQwMjE5LDQwNjY0LDQwNjYwLDQwODQ1LDQwODYwLDIwNzc4LDIwNzY3LDIwNzY5LDIw''@;'; put 'put ''Nzg2LDIxMjM3LDIyMTU4LDIyMTQ0LDIyMTYwLDIyMTQ5LDIyMTUxLDIyMTU5LDIyNzQxLDIyNzM5LDIyNzM3LDIyNzM0LDIzMzQ0LDIzMzM4LDIzMzMyLDIzNDE4LDIzNjA3LDIzNjU2LDIzOTk2LDIzOTk0LDIzOTk3LDIzOTkyLDI0MTcxLDI0Mzk2LDI0NTA5LDI1MDMzLDI1MDI2LDI1MDMx''@;'; put 'put ''LDI1MDYyLDI1MDM1LDI1MTM4LDI1MTQwLDI1ODA2LDI1ODAyLDI1ODE2LDI1ODI0LDI1ODQwLDI1ODMwLDI1ODM2LDI1ODQxLDI1ODI2LDI1ODM3LDI1OTg2LDI1OTg3LDI2MzI5LDI2MzI2LDI3MjY0LDI3Mjg0LDI3MjY4LDI3Mjk4LDI3MjkyLDI3MzU1LDI3Mjk5LDI3MjYyLDI3Mjg3LDI3''@;'; put 'put ''MjgwLDI3Mjk2LDI3NDg0LDI3NTY2LDI3NjEwLDI3NjU2LDI4NjMyLDI4NjU3LDI4NjM5LDI4NjQwLDI4NjM1LDI4NjQ0LDI4NjUxLDI4NjU1LDI4NTQ0LDI4NjUyLDI4NjQxLDI4NjQ5LDI4NjI5LDI4NjU0LDI4NjU2LDI5MTU5LDI5MTUxLDI5MTY2LDI5MTU4LDI5MTU3LDI5MTY1LDI5MTY0''@;'; put 'put ''LDI5MTcyLDI5MTUyLDI5MjM3LDI5MjU0LDI5NTUyLDI5NTU0LDI5ODY1LDI5ODcyLDI5ODYyLDI5ODY0LDMwMjc4LDMwMjc0LDMwMjg0LDMwNDQyLDMwNjQzLDMwNjM0LDMwNjQwLDMwNjM2LDMwNjMxLDMwNjM3LDMwNzAzLDMwOTY3LDMwOTcwLDMwOTY0LDMwOTU5LDMwOTc3LDMxMTQzLDMx''@;'; put 'put ''MTQ2LDMxMzE5LDMxNDIzLDMxNzUxLDMxNzU3LDMxNzQyLDMxNzM1LDMxNzU2LDMxNzEyLDMxOTY4LDMxOTY0LDMxOTY2LDMxOTcwLDMxOTY3LDMxOTYxLDMxOTY1LDMyMzAyLDMyMzE4LDMyMzI2LDMyMzExLDMyMzA2LDMyMzIzLDMyMjk5LDMyMzE3LDMyMzA1LDMyMzI1LDMyMzIxLDMyMzA4''@;'; put 'put ''LDMyMzEzLDMyMzI4LDMyMzA5LDMyMzE5LDMyMzAzLDMyNTgwLDMyNzU1LDMyNzY0LDMyODgxLDMyODgyLDMyODgwLDMyODc5LDMyODgzLDMzMjIyLDMzMjE5LDMzMjEwLDMzMjE4LDMzMjE2LDMzMjE1LDMzMjEzLDMzMjI1LDMzMjE0LDMzMjU2LDMzMjg5LDMzMzkzLDM0MjE4LDM0MTgwLDM0''@;'; put 'put ''MTc0LDM0MjA0LDM0MTkzLDM0MTk2LDM0MjIzLDM0MjAzLDM0MTgzLDM0MjE2LDM0MTg2LDM0NDA3LDM0NzUyLDM0NzY5LDM0NzM5LDM0NzcwLDM0NzU4LDM0NzMxLDM0NzQ3LDM0NzQ2LDM0NzYwLDM0NzYzLDM1MTMxLDM1MTI2LDM1MTQwLDM1MTI4LDM1MTMzLDM1MjQ0LDM1NTk4LDM1NjA3''@;'; put 'put ''LDM1NjA5LDM1NjExLDM1NTk0LDM1NjE2LDM1NjEzLDM1NTg4LDM1NjAwLDM1OTA1LDM1OTAzLDM1OTU1LDM2MDkwLDM2MDkzLDM2MDkyLDM2MDg4LDM2MDkxLDM2MjY0LDM2NDI1LDM2NDI3LDM2NDI0LDM2NDI2LDM2Njc2LDM2NjcwLDM2Njc0LDM2Njc3LDM2NjcxLDM2OTkxLDM2OTg5LDM2''@;'; put 'put ''OTk2LDM2OTkzLDM2OTk0LDM2OTkyLDM3MTc3LDM3MjgzLDM3Mjc4LDM3Mjc2LDM3NzA5LDM3NzYyLDM3NjcyLDM3NzQ5LDM3NzA2LDM3NzMzLDM3NzA3LDM3NjU2LDM3NzU4LDM3NzQwLDM3NzIzLDM3NzQ0LDM3NzIyLDM3NzE2LDM4MzQ2LDM4MzQ3LDM4MzQ4LDM4MzQ0LDM4MzQyLDM4NTc3''@;'; put 'put ''LDM4NTg0LDM4NjE0LDM4Njg0LDM4Njg2LDM4ODE2LDM4ODY3LDM4OTgyLDM5MDk0LDM5MjIxLDM5NDI1LDM5NDIzLDM5ODU0LDM5ODUxLDM5ODUwLDM5ODUzLDQwMjUxLDQwMjU1LDQwNTg3LDQwNjU1LDQwNjcwLDQwNjY4LDQwNjY5LDQwNjY3LDQwNzY2LDQwNzc5LDIxNDc0LDIyMTY1LDIy''@;'; put 'put ''MTkwLDIyNzQ1LDIyNzQ0LDIzMzUyLDI0NDEzLDI1MDU5LDI1MTM5LDI1ODQ0LDI1ODQyLDI1ODU0LDI1ODYyLDI1ODUwLDI1ODUxLDI1ODQ3LDI2MDM5LDI2MzMyLDI2NDA2LDI3MzE1LDI3MzA4LDI3MzMxLDI3MzIzLDI3MzIwLDI3MzMwLDI3MzEwLDI3MzExLDI3NDg3LDI3NTEyLDI3NTY3''@;'; put 'put ''LDI4NjgxLDI4NjgzLDI4NjcwLDI4Njc4LDI4NjY2LDI4Njg5LDI4Njg3LDI5MTc5LDI5MTgwLDI5MTgyLDI5MTc2LDI5NTU5LDI5NTU3LDI5ODYzLDI5ODg3LDI5OTczLDMwMjk0LDMwMjk2LDMwMjkwLDMwNjUzLDMwNjU1LDMwNjUxLDMwNjUyLDMwOTkwLDMxMTUwLDMxMzI5LDMxMzMwLDMx''@;'; put 'put ''MzI4LDMxNDI4LDMxNDI5LDMxNzg3LDMxNzgzLDMxNzg2LDMxNzc0LDMxNzc5LDMxNzc3LDMxOTc1LDMyMzQwLDMyMzQxLDMyMzUwLDMyMzQ2LDMyMzUzLDMyMzM4LDMyMzQ1LDMyNTg0LDMyNzYxLDMyNzYzLDMyODg3LDMyODg2LDMzMjI5LDMzMjMxLDMzMjkwLDM0MjU1LDM0MjE3LDM0MjUz''@;'; put 'put ''LDM0MjU2LDM0MjQ5LDM0MjI0LDM0MjM0LDM0MjMzLDM0MjE0LDM0Nzk5LDM0Nzk2LDM0ODAyLDM0Nzg0LDM1MjA2LDM1MjUwLDM1MzE2LDM1NjI0LDM1NjQxLDM1NjI4LDM1NjI3LDM1OTIwLDM2MTAxLDM2NDQxLDM2NDUxLDM2NDU0LDM2NDUyLDM2NDQ3LDM2NDM3LDM2NTQ0LDM2NjgxLDM2''@;'; put 'put ''Njg1LDM2OTk5LDM2OTk1LDM3ZTMsMzcyOTEsMzcyOTIsMzczMjgsMzc3ODAsMzc3NzAsMzc3ODIsMzc3OTQsMzc4MTEsMzc4MDYsMzc4MDQsMzc4MDgsMzc3ODQsMzc3ODYsMzc3ODMsMzgzNTYsMzgzNTgsMzgzNTIsMzgzNTcsMzg2MjYsMzg2MjAsMzg2MTcsMzg2MTksMzg2MjIsMzg2OTIs''@;'; put 'put ''Mzg4MTksMzg4MjIsMzg4MjksMzg5MDUsMzg5ODksMzg5OTEsMzg5ODgsMzg5OTAsMzg5OTUsMzkwOTgsMzkyMzAsMzkyMzEsMzkyMjksMzkyMTQsMzkzMzMsMzk0MzgsMzk2MTcsMzk2ODMsMzk2ODYsMzk3NTksMzk3NTgsMzk3NTcsMzk4ODIsMzk4ODEsMzk5MzMsMzk4ODAsMzk4NzIsNDAy''@;'; put 'put ''NzMsNDAyODUsNDAyODgsNDA2NzIsNDA3MjUsNDA3NDgsMjA3ODcsMjIxODEsMjI3NTAsMjI3NTEsMjI3NTQsMjM1NDEsNDA4NDgsMjQzMDAsMjUwNzQsMjUwNzksMjUwNzgsMjUwNzcsMjU4NTYsMjU4NzEsMjYzMzYsMjYzMzMsMjczNjUsMjczNTcsMjczNTQsMjczNDcsMjg2OTksMjg3MDMs''@;'; put 'put ''Mjg3MTIsMjg2OTgsMjg3MDEsMjg2OTMsMjg2OTYsMjkxOTAsMjkxOTcsMjkyNzIsMjkzNDYsMjk1NjAsMjk1NjIsMjk4ODUsMjk4OTgsMjk5MjMsMzAwODcsMzAwODYsMzAzMDMsMzAzMDUsMzA2NjMsMzEwMDEsMzExNTMsMzEzMzksMzEzMzcsMzE4MDYsMzE4MDcsMzE4MDAsMzE4MDUsMzE3''@;'; put 'put ''OTksMzE4MDgsMzIzNjMsMzIzNjUsMzIzNzcsMzIzNjEsMzIzNjIsMzI2NDUsMzIzNzEsMzI2OTQsMzI2OTcsMzI2OTYsMzMyNDAsMzQyODEsMzQyNjksMzQyODIsMzQyNjEsMzQyNzYsMzQyNzcsMzQyOTUsMzQ4MTEsMzQ4MjEsMzQ4MjksMzQ4MDksMzQ4MTQsMzUxNjgsMzUxNjcsMzUxNTgs''@;'; put 'put ''MzUxNjYsMzU2NDksMzU2NzYsMzU2NzIsMzU2NTcsMzU2NzQsMzU2NjIsMzU2NjMsMzU2NTQsMzU2NzMsMzYxMDQsMzYxMDYsMzY0NzYsMzY0NjYsMzY0ODcsMzY0NzAsMzY0NjAsMzY0NzQsMzY0NjgsMzY2OTIsMzY2ODYsMzY3ODEsMzcwMDIsMzcwMDMsMzcyOTcsMzcyOTQsMzc4NTcsMzc4''@;'; put 'put ''NDEsMzc4NTUsMzc4MjcsMzc4MzIsMzc4NTIsMzc4NTMsMzc4NDYsMzc4NTgsMzc4MzcsMzc4NDgsMzc4NjAsMzc4NDcsMzc4NjQsMzgzNjQsMzg1ODAsMzg2MjcsMzg2OTgsMzg2OTUsMzg3NTMsMzg4NzYsMzg5MDcsMzkwMDYsMzllMywzOTAwMywzOTEwMCwzOTIzNywzOTI0MSwzOTQ0Niwz''@;'; put 'put ''OTQ0OSwzOTY5MywzOTkxMiwzOTkxMSwzOTg5NCwzOTg5OSw0MDMyOSw0MDI4OSw0MDMwNiw0MDI5OCw0MDMwMCw0MDU5NCw0MDU5OSw0MDU5NSw0MDYyOCwyMTI0MCwyMjE4NCwyMjE5OSwyMjE5OCwyMjE5NiwyMjIwNCwyMjc1NiwyMzM2MCwyMzM2MywyMzQyMSwyMzU0MiwyNDAwOSwyNTA4''@;'; put 'put ''MCwyNTA4MiwyNTg4MCwyNTg3NiwyNTg4MSwyNjM0MiwyNjQwNywyNzM3MiwyODczNCwyODcyMCwyODcyMiwyOTIwMCwyOTU2MywyOTkwMywzMDMwNiwzMDMwOSwzMTAxNCwzMTAxOCwzMTAyMCwzMTAxOSwzMTQzMSwzMTQ3OCwzMTgyMCwzMTgxMSwzMTgyMSwzMTk4MywzMTk4NCwzNjc4Miwz''@;'; put 'put ''MjM4MSwzMjM4MCwzMjM4NiwzMjU4OCwzMjc2OCwzMzI0MiwzMzM4MiwzNDI5OSwzNDI5NywzNDMyMSwzNDI5OCwzNDMxMCwzNDMxNSwzNDMxMSwzNDMxNCwzNDgzNiwzNDgzNywzNTE3MiwzNTI1OCwzNTMyMCwzNTY5NiwzNTY5MiwzNTY4NiwzNTY5NSwzNTY3OSwzNTY5MSwzNjExMSwzNjEw''@;'; put 'put ''OSwzNjQ4OSwzNjQ4MSwzNjQ4NSwzNjQ4MiwzNzMwMCwzNzMyMywzNzkxMiwzNzg5MSwzNzg4NSwzODM2OSwzODcwNCwzOTEwOCwzOTI1MCwzOTI0OSwzOTMzNiwzOTQ2NywzOTQ3MiwzOTQ3OSwzOTQ3NywzOTk1NSwzOTk0OSw0MDU2OSw0MDYyOSw0MDY4MCw0MDc1MSw0MDc5OSw0MDgwMyw0''@;'; put 'put ''MDgwMSwyMDc5MSwyMDc5MiwyMjIwOSwyMjIwOCwyMjIxMCwyMjgwNCwyMzY2MCwyNDAxMywyNTA4NCwyNTA4NiwyNTg4NSwyNTg4NCwyNjAwNSwyNjM0NSwyNzM4NywyNzM5NiwyNzM4NiwyNzU3MCwyODc0OCwyOTIxMSwyOTM1MSwyOTkxMCwyOTkwOCwzMDMxMywzMDY3NSwzMTgyNCwzMjM5''@;'; put 'put ''OSwzMjM5NiwzMjcwMCwzNDMyNywzNDM0OSwzNDMzMCwzNDg1MSwzNDg1MCwzNDg0OSwzNDg0NywzNTE3OCwzNTE4MCwzNTI2MSwzNTcwMCwzNTcwMywzNTcwOSwzNjExNSwzNjQ5MCwzNjQ5MywzNjQ5MSwzNjcwMywzNjc4MywzNzMwNiwzNzkzNCwzNzkzOSwzNzk0MSwzNzk0NiwzNzk0NCwz''@;'; put 'put ''NzkzOCwzNzkzMSwzODM3MCwzODcxMiwzODcxMywzODcwNiwzODkxMSwzOTAxNSwzOTAxMywzOTI1NSwzOTQ5MywzOTQ5MSwzOTQ4OCwzOTQ4NiwzOTYzMSwzOTc2NCwzOTc2MSwzOTk4MSwzOTk3Myw0MDM2Nyw0MDM3Miw0MDM4Niw0MDM3Niw0MDYwNSw0MDY4Nyw0MDcyOSw0MDc5Niw0MDgw''@;'; put 'put ''Niw0MDgwNywyMDc5NiwyMDc5NSwyMjIxNiwyMjIxOCwyMjIxNywyMzQyMywyNDAyMCwyNDAxOCwyNDM5OCwyNTA4NywyNTg5MiwyNzQwMiwyNzQ4OSwyODc1MywyODc2MCwyOTU2OCwyOTkyNCwzMDA5MCwzMDMxOCwzMDMxNiwzMTE1NSwzMTg0MCwzMTgzOSwzMjg5NCwzMjg5MywzMzI0Nywz''@;'; put 'put ''NTE4NiwzNTE4MywzNTMyNCwzNTcxMiwzNjExOCwzNjExOSwzNjQ5NywzNjQ5OSwzNjcwNSwzNzE5MiwzNzk1NiwzNzk2OSwzNzk3MCwzODcxNywzODcxOCwzODg1MSwzODg0OSwzOTAxOSwzOTI1MywzOTUwOSwzOTUwMSwzOTYzNCwzOTcwNiw0MDAwOSwzOTk4NSwzOTk5OCwzOTk5NSw0MDQw''@;'; put 'put ''Myw0MDQwNyw0MDc1Niw0MDgxMiw0MDgxMCw0MDg1MiwyMjIyMCwyNDAyMiwyNTA4OCwyNTg5MSwyNTg5OSwyNTg5OCwyNjM0OCwyNzQwOCwyOTkxNCwzMTQzNCwzMTg0NCwzMTg0MywzMTg0NSwzMjQwMywzMjQwNiwzMjQwNCwzMzI1MCwzNDM2MCwzNDM2NywzNDg2NSwzNTcyMiwzNzAwOCwz''@;'; put 'put ''NzAwNywzNzk4NywzNzk4NCwzNzk4OCwzODc2MCwzOTAyMywzOTI2MCwzOTUxNCwzOTUxNSwzOTUxMSwzOTYzNSwzOTYzNiwzOTYzMyw0MDAyMCw0MDAyMyw0MDAyMiw0MDQyMSw0MDYwNyw0MDY5MiwyMjIyNSwyMjc2MSwyNTkwMCwyODc2NiwzMDMyMSwzMDMyMiwzMDY3OSwzMjU5MiwzMjY0''@;'; put 'put ''OCwzNDg3MCwzNDg3MywzNDkxNCwzNTczMSwzNTczMCwzNTczNCwzMzM5OSwzNjEyMywzNzMxMiwzNzk5NCwzODcyMiwzODcyOCwzODcyNCwzODg1NCwzOTAyNCwzOTUxOSwzOTcxNCwzOTc2OCw0MDAzMSw0MDQ0MSw0MDQ0Miw0MDU3Miw0MDU3Myw0MDcxMSw0MDgyMyw0MDgxOCwyNDMwNywy''@;'; put 'put ''NzQxNCwyODc3MSwzMTg1MiwzMTg1NCwzNDg3NSwzNTI2NCwzNjUxMywzNzMxMywzODAwMiwzOGUzLDM5MDI1LDM5MjYyLDM5NjM4LDM5NzE1LDQwNjUyLDI4NzcyLDMwNjgyLDM1NzM4LDM4MDA3LDM4ODU3LDM5NTIyLDM5NTI1LDMyNDEyLDM1NzQwLDM2NTIyLDM3MzE3LDM4MDEzLDM4MDE0''@;'; put 'put ''LDM4MDEyLDQwMDU1LDQwMDU2LDQwNjk1LDM1OTI0LDM4MDE1LDQwNDc0LDI5MjI0LDM5NTMwLDM5NzI5LDQwNDc1LDQwNDc4LDMxODU4LDkzMTIsOTMxMyw5MzE0LDkzMTUsOTMxNiw5MzE3LDkzMTgsOTMxOSw5MzIwLDkzMjEsOTMzMiw5MzMzLDkzMzQsOTMzNSw5MzM2LDkzMzcsOTMzOCw5''@;'; put 'put ''MzM5LDkzNDAsOTM0MSw4NTYwLDg1NjEsODU2Miw4NTYzLDg1NjQsODU2NSw4NTY2LDg1NjcsODU2OCw4NTY5LDIwMDIyLDIwMDMxLDIwMTAxLDIwMTI4LDIwODY2LDIwODg2LDIwOTA3LDIxMjQxLDIxMzA0LDIxMzUzLDIxNDMwLDIyNzk0LDIzNDI0LDI0MDI3LDEyMDgzLDI0MTkxLDI0MzA4''@;'; put 'put ''LDI0NDAwLDI0NDE3LDI1OTA4LDI2MDgwLDMwMDk4LDMwMzI2LDM2Nzg5LDM4NTgyLDE2OCw3MTAsMTI1NDEsMTI1NDIsMTI0NDUsMTI0NDYsMTIyOTEsMjAxODksMTIyOTMsMTIyOTQsMTIyOTUsMTI1NDAsNjUzMzksNjUzNDEsMTAwNDUsMTIzNTMsMTIzNTQsMTIzNTUsMTIzNTYsMTIzNTcs''@;'; put 'put ''MTIzNTgsMTIzNTksMTIzNjAsMTIzNjEsMTIzNjIsMTIzNjMsMTIzNjQsMTIzNjUsMTIzNjYsMTIzNjcsMTIzNjgsMTIzNjksMTIzNzAsMTIzNzEsMTIzNzIsMTIzNzMsMTIzNzQsMTIzNzUsMTIzNzYsMTIzNzcsMTIzNzgsMTIzNzksMTIzODAsMTIzODEsMTIzODIsMTIzODMsMTIzODQsMTIz''@;'; put 'put ''ODUsMTIzODYsMTIzODcsMTIzODgsMTIzODksMTIzOTAsMTIzOTEsMTIzOTIsMTIzOTMsMTIzOTQsMTIzOTUsMTIzOTYsMTIzOTcsMTIzOTgsMTIzOTksMTI0MDAsMTI0MDEsMTI0MDIsMTI0MDMsMTI0MDQsMTI0MDUsMTI0MDYsMTI0MDcsMTI0MDgsMTI0MDksMTI0MTAsMTI0MTEsMTI0MTIs''@;'; put 'put ''MTI0MTMsMTI0MTQsMTI0MTUsMTI0MTYsMTI0MTcsMTI0MTgsMTI0MTksMTI0MjAsMTI0MjEsMTI0MjIsMTI0MjMsMTI0MjQsMTI0MjUsMTI0MjYsMTI0MjcsMTI0MjgsMTI0MjksMTI0MzAsMTI0MzEsMTI0MzIsMTI0MzMsMTI0MzQsMTI0MzUsMTI0NDksMTI0NTAsMTI0NTEsMTI0NTIsMTI0''@;'; put 'put ''NTMsMTI0NTQsMTI0NTUsMTI0NTYsMTI0NTcsMTI0NTgsMTI0NTksMTI0NjAsMTI0NjEsMTI0NjIsMTI0NjMsMTI0NjQsMTI0NjUsMTI0NjYsMTI0NjcsMTI0NjgsMTI0NjksMTI0NzAsMTI0NzEsMTI0NzIsMTI0NzMsMTI0NzQsMTI0NzUsMTI0NzYsMTI0NzcsMTI0NzgsMTI0NzksMTI0ODAs''@;'; put 'put ''MTI0ODEsMTI0ODIsMTI0ODMsMTI0ODQsMTI0ODUsMTI0ODYsMTI0ODcsMTI0ODgsMTI0ODksMTI0OTAsMTI0OTEsMTI0OTIsMTI0OTMsMTI0OTQsMTI0OTUsMTI0OTYsMTI0OTcsMTI0OTgsMTI0OTksMTI1MDAsMTI1MDEsMTI1MDIsMTI1MDMsMTI1MDQsMTI1MDUsMTI1MDYsMTI1MDcsMTI1''@;'; put 'put ''MDgsMTI1MDksMTI1MTAsMTI1MTEsMTI1MTIsMTI1MTMsMTI1MTQsMTI1MTUsMTI1MTYsMTI1MTcsMTI1MTgsMTI1MTksMTI1MjAsMTI1MjEsMTI1MjIsMTI1MjMsMTI1MjQsMTI1MjUsMTI1MjYsMTI1MjcsMTI1MjgsMTI1MjksMTI1MzAsMTI1MzEsMTI1MzIsMTI1MzMsMTI1MzQsMTA0MCwx''@;'; put 'put ''MDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTAyNSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3Miwx''@;'; put 'put ''MDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTEwNSwxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsODY3OSw4''@;'; put 'put ''NjMyLDg2MzMsMTI3NTEsMTMxMjc2LDIwMDU4LDEzMTIxMCwyMDk5NCwxNzU1Myw0MDg4MCwyMDg3Miw0MDg4MSwxNjEyODcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2NTUwNiw2NTUwOCw2NTI4Nyw2NTI4MiwxMjg0OSw4NDcwLDg0ODEsMTI0NDMsMTI0NDQsMTE5MDQs''@;'; put 'put ''MTE5MDgsMTE5MTAsMTE5MTEsMTE5MTIsMTE5MTQsMTE5MTYsMTE5MTcsMTE5MjUsMTE5MzIsMTE5MzMsMTE5NDEsMTE5NDMsMTE5NDYsMTE5NDgsMTE5NTAsMTE5NTgsMTE5NjQsMTE5NjYsMTE5NzQsMTE5NzgsMTE5ODAsMTE5ODEsMTE5ODMsMTE5OTAsMTE5OTEsMTE5OTgsMTIwMDMsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsNjQzLDU5Miw2MDMsNTk2LDYyOSwzMzksMjQ4LDMzMSw2NTAsNjE4LDIwMDM0LDIwMDYwLDIwOTgxLDIxMjc0LDIxMzc4LDE5OTc1LDE5OTgwLDIwMDM5LDIwMTA5LDIyMjMxLDY0MDEyLDIzNjYyLDI0NDM1LDE5OTgzLDIwODcxLDE5OTgyLDIwMDE0LDIwMTE1LDIwMTYy''@;'; put 'put ''LDIwMTY5LDIwMTY4LDIwODg4LDIxMjQ0LDIxMzU2LDIxNDMzLDIyMzA0LDIyNzg3LDIyODI4LDIzNTY4LDI0MDYzLDI2MDgxLDI3NTcxLDI3NTk2LDI3NjY4LDI5MjQ3LDIwMDE3LDIwMDI4LDIwMjAwLDIwMTg4LDIwMjAxLDIwMTkzLDIwMTg5LDIwMTg2LDIxMDA0LDIxMjc2LDIxMzI0LDIy''@;'; put 'put ''MzA2LDIyMzA3LDIyODA3LDIyODMxLDIzNDI1LDIzNDI4LDIzNTcwLDIzNjExLDIzNjY4LDIzNjY3LDI0MDY4LDI0MTkyLDI0MTk0LDI0NTIxLDI1MDk3LDI1MTY4LDI3NjY5LDI3NzAyLDI3NzE1LDI3NzExLDI3NzA3LDI5MzU4LDI5MzYwLDI5NTc4LDMxMTYwLDMyOTA2LDM4NDMwLDIwMjM4''@;'; put 'put ''LDIwMjQ4LDIwMjY4LDIwMjEzLDIwMjQ0LDIwMjA5LDIwMjI0LDIwMjE1LDIwMjMyLDIwMjUzLDIwMjI2LDIwMjI5LDIwMjU4LDIwMjQzLDIwMjI4LDIwMjEyLDIwMjQyLDIwOTEzLDIxMDExLDIxMDAxLDIxMDA4LDIxMTU4LDIxMjgyLDIxMjc5LDIxMzI1LDIxMzg2LDIxNTExLDIyMjQxLDIy''@;'; put 'put ''MjM5LDIyMzE4LDIyMzE0LDIyMzI0LDIyODQ0LDIyOTEyLDIyOTA4LDIyOTE3LDIyOTA3LDIyOTEwLDIyOTAzLDIyOTExLDIzMzgyLDIzNTczLDIzNTg5LDIzNjc2LDIzNjc0LDIzNjc1LDIzNjc4LDI0MDMxLDI0MTgxLDI0MTk2LDI0MzIyLDI0MzQ2LDI0NDM2LDI0NTMzLDI0NTMyLDI0NTI3''@;'; put 'put ''LDI1MTgwLDI1MTgyLDI1MTg4LDI1MTg1LDI1MTkwLDI1MTg2LDI1MTc3LDI1MTg0LDI1MTc4LDI1MTg5LDI2MDk1LDI2MDk0LDI2NDMwLDI2NDI1LDI2NDI0LDI2NDI3LDI2NDI2LDI2NDMxLDI2NDI4LDI2NDE5LDI3NjcyLDI3NzE4LDI3NzMwLDI3NzQwLDI3NzI3LDI3NzIyLDI3NzMyLDI3''@;'; put 'put ''NzIzLDI3NzI0LDI4Nzg1LDI5Mjc4LDI5MzY0LDI5MzY1LDI5NTgyLDI5OTk0LDMwMzM1LDMxMzQ5LDMyNTkzLDMzNDAwLDMzNDA0LDMzNDA4LDMzNDA1LDMzNDA3LDM0MzgxLDM1MTk4LDM3MDE3LDM3MDE1LDM3MDE2LDM3MDE5LDM3MDEyLDM4NDM0LDM4NDM2LDM4NDMyLDM4NDM1LDIwMzEw''@;'; put 'put ''LDIwMjgzLDIwMzIyLDIwMjk3LDIwMzA3LDIwMzI0LDIwMjg2LDIwMzI3LDIwMzA2LDIwMzE5LDIwMjg5LDIwMzEyLDIwMjY5LDIwMjc1LDIwMjg3LDIwMzIxLDIwODc5LDIwOTIxLDIxMDIwLDIxMDIyLDIxMDI1LDIxMTY1LDIxMTY2LDIxMjU3LDIxMzQ3LDIxMzYyLDIxMzkwLDIxMzkxLDIx''@;'; put 'put ''NTUyLDIxNTU5LDIxNTQ2LDIxNTg4LDIxNTczLDIxNTI5LDIxNTMyLDIxNTQxLDIxNTI4LDIxNTY1LDIxNTgzLDIxNTY5LDIxNTQ0LDIxNTQwLDIxNTc1LDIyMjU0LDIyMjQ3LDIyMjQ1LDIyMzM3LDIyMzQxLDIyMzQ4LDIyMzQ1LDIyMzQ3LDIyMzU0LDIyNzkwLDIyODQ4LDIyOTUwLDIyOTM2''@;'; put 'put ''LDIyOTQ0LDIyOTM1LDIyOTI2LDIyOTQ2LDIyOTI4LDIyOTI3LDIyOTUxLDIyOTQ1LDIzNDM4LDIzNDQyLDIzNTkyLDIzNTk0LDIzNjkzLDIzNjk1LDIzNjg4LDIzNjkxLDIzNjg5LDIzNjk4LDIzNjkwLDIzNjg2LDIzNjk5LDIzNzAxLDI0MDMyLDI0MDc0LDI0MDc4LDI0MjAzLDI0MjAxLDI0''@;'; put 'put ''MjA0LDI0MjAwLDI0MjA1LDI0MzI1LDI0MzQ5LDI0NDQwLDI0NDM4LDI0NTMwLDI0NTI5LDI0NTI4LDI0NTU3LDI0NTUyLDI0NTU4LDI0NTYzLDI0NTQ1LDI0NTQ4LDI0NTQ3LDI0NTcwLDI0NTU5LDI0NTY3LDI0NTcxLDI0NTc2LDI0NTY0LDI1MTQ2LDI1MjE5LDI1MjI4LDI1MjMwLDI1MjMx''@;'; put 'put ''LDI1MjM2LDI1MjIzLDI1MjAxLDI1MjExLDI1MjEwLDI1MjAwLDI1MjE3LDI1MjI0LDI1MjA3LDI1MjEzLDI1MjAyLDI1MjA0LDI1OTExLDI2MDk2LDI2MTAwLDI2MDk5LDI2MDk4LDI2MTAxLDI2NDM3LDI2NDM5LDI2NDU3LDI2NDUzLDI2NDQ0LDI2NDQwLDI2NDYxLDI2NDQ1LDI2NDU4LDI2''@;'; put 'put ''NDQzLDI3NjAwLDI3NjczLDI3Njc0LDI3NzY4LDI3NzUxLDI3NzU1LDI3NzgwLDI3Nzg3LDI3NzkxLDI3NzYxLDI3NzU5LDI3NzUzLDI3ODAyLDI3NzU3LDI3NzgzLDI3Nzk3LDI3ODA0LDI3NzUwLDI3NzYzLDI3NzQ5LDI3NzcxLDI3NzkwLDI4Nzg4LDI4Nzk0LDI5MjgzLDI5Mzc1LDI5Mzcz''@;'; put 'put ''LDI5Mzc5LDI5MzgyLDI5Mzc3LDI5MzcwLDI5MzgxLDI5NTg5LDI5NTkxLDI5NTg3LDI5NTg4LDI5NTg2LDMwMDEwLDMwMDA5LDMwMTAwLDMwMTAxLDMwMzM3LDMxMDM3LDMyODIwLDMyOTE3LDMyOTIxLDMyOTEyLDMyOTE0LDMyOTI0LDMzNDI0LDMzNDIzLDMzNDEzLDMzNDIyLDMzNDI1LDMz''@;'; put 'put ''NDI3LDMzNDE4LDMzNDExLDMzNDEyLDM1OTYwLDM2ODA5LDM2Nzk5LDM3MDIzLDM3MDI1LDM3MDI5LDM3MDIyLDM3MDMxLDM3MDI0LDM4NDQ4LDM4NDQwLDM4NDQ3LDM4NDQ1LDIwMDE5LDIwMzc2LDIwMzQ4LDIwMzU3LDIwMzQ5LDIwMzUyLDIwMzU5LDIwMzQyLDIwMzQwLDIwMzYxLDIwMzU2''@;'; put 'put ''LDIwMzQzLDIwMzAwLDIwMzc1LDIwMzMwLDIwMzc4LDIwMzQ1LDIwMzUzLDIwMzQ0LDIwMzY4LDIwMzgwLDIwMzcyLDIwMzgyLDIwMzcwLDIwMzU0LDIwMzczLDIwMzMxLDIwMzM0LDIwODk0LDIwOTI0LDIwOTI2LDIxMDQ1LDIxMDQyLDIxMDQzLDIxMDYyLDIxMDQxLDIxMTgwLDIxMjU4LDIx''@;'; put 'put ''MjU5LDIxMzA4LDIxMzk0LDIxMzk2LDIxNjM5LDIxNjMxLDIxNjMzLDIxNjQ5LDIxNjM0LDIxNjQwLDIxNjExLDIxNjI2LDIxNjMwLDIxNjA1LDIxNjEyLDIxNjIwLDIxNjA2LDIxNjQ1LDIxNjE1LDIxNjAxLDIxNjAwLDIxNjU2LDIxNjAzLDIxNjA3LDIxNjA0LDIyMjYzLDIyMjY1LDIyMzgz''@;'; put 'put ''LDIyMzg2LDIyMzgxLDIyMzc5LDIyMzg1LDIyMzg0LDIyMzkwLDIyNDAwLDIyMzg5LDIyMzk1LDIyMzg3LDIyMzg4LDIyMzcwLDIyMzc2LDIyMzk3LDIyNzk2LDIyODUzLDIyOTY1LDIyOTcwLDIyOTkxLDIyOTkwLDIyOTYyLDIyOTg4LDIyOTc3LDIyOTY2LDIyOTcyLDIyOTc5LDIyOTk4LDIy''@;'; put 'put ''OTYxLDIyOTczLDIyOTc2LDIyOTg0LDIyOTY0LDIyOTgzLDIzMzk0LDIzMzk3LDIzNDQzLDIzNDQ1LDIzNjIwLDIzNjIzLDIzNzI2LDIzNzE2LDIzNzEyLDIzNzMzLDIzNzI3LDIzNzIwLDIzNzI0LDIzNzExLDIzNzE1LDIzNzI1LDIzNzE0LDIzNzIyLDIzNzE5LDIzNzA5LDIzNzE3LDIzNzM0''@;'; put 'put ''LDIzNzI4LDIzNzE4LDI0MDg3LDI0MDg0LDI0MDg5LDI0MzYwLDI0MzU0LDI0MzU1LDI0MzU2LDI0NDA0LDI0NDUwLDI0NDQ2LDI0NDQ1LDI0NTQyLDI0NTQ5LDI0NjIxLDI0NjE0LDI0NjAxLDI0NjI2LDI0NTg3LDI0NjI4LDI0NTg2LDI0NTk5LDI0NjI3LDI0NjAyLDI0NjA2LDI0NjIwLDI0''@;'; put 'put ''NjEwLDI0NTg5LDI0NTkyLDI0NjIyLDI0NTk1LDI0NTkzLDI0NTg4LDI0NTg1LDI0NjA0LDI1MTA4LDI1MTQ5LDI1MjYxLDI1MjY4LDI1Mjk3LDI1Mjc4LDI1MjU4LDI1MjcwLDI1MjkwLDI1MjYyLDI1MjY3LDI1MjYzLDI1Mjc1LDI1MjU3LDI1MjY0LDI1MjcyLDI1OTE3LDI2MDI0LDI2MDQz''@;'; put 'put ''LDI2MTIxLDI2MTA4LDI2MTE2LDI2MTMwLDI2MTIwLDI2MTA3LDI2MTE1LDI2MTIzLDI2MTI1LDI2MTE3LDI2MTA5LDI2MTI5LDI2MTI4LDI2MzU4LDI2Mzc4LDI2NTAxLDI2NDc2LDI2NTEwLDI2NTE0LDI2NDg2LDI2NDkxLDI2NTIwLDI2NTAyLDI2NTAwLDI2NDg0LDI2NTA5LDI2NTA4LDI2''@;'; put 'put ''NDkwLDI2NTI3LDI2NTEzLDI2NTIxLDI2NDk5LDI2NDkzLDI2NDk3LDI2NDg4LDI2NDg5LDI2NTE2LDI3NDI5LDI3NTIwLDI3NTE4LDI3NjE0LDI3Njc3LDI3Nzk1LDI3ODg0LDI3ODgzLDI3ODg2LDI3ODY1LDI3ODMwLDI3ODYwLDI3ODIxLDI3ODc5LDI3ODMxLDI3ODU2LDI3ODQyLDI3ODM0''@;'; put 'put ''LDI3ODQzLDI3ODQ2LDI3ODg1LDI3ODkwLDI3ODU4LDI3ODY5LDI3ODI4LDI3Nzg2LDI3ODA1LDI3Nzc2LDI3ODcwLDI3ODQwLDI3OTUyLDI3ODUzLDI3ODQ3LDI3ODI0LDI3ODk3LDI3ODU1LDI3ODgxLDI3ODU3LDI4ODIwLDI4ODI0LDI4ODA1LDI4ODE5LDI4ODA2LDI4ODA0LDI4ODE3LDI4''@;'; put 'put ''ODIyLDI4ODAyLDI4ODI2LDI4ODAzLDI5MjkwLDI5Mzk4LDI5Mzg3LDI5NDAwLDI5Mzg1LDI5NDA0LDI5Mzk0LDI5Mzk2LDI5NDAyLDI5Mzg4LDI5MzkzLDI5NjA0LDI5NjAxLDI5NjEzLDI5NjA2LDI5NjAyLDI5NjAwLDI5NjEyLDI5NTk3LDI5OTE3LDI5OTI4LDMwMDE1LDMwMDE2LDMwMDE0''@;'; put 'put ''LDMwMDkyLDMwMTA0LDMwMzgzLDMwNDUxLDMwNDQ5LDMwNDQ4LDMwNDUzLDMwNzEyLDMwNzE2LDMwNzEzLDMwNzE1LDMwNzE0LDMwNzExLDMxMDQyLDMxMDM5LDMxMTczLDMxMzUyLDMxMzU1LDMxNDgzLDMxODYxLDMxOTk3LDMyODIxLDMyOTExLDMyOTQyLDMyOTMxLDMyOTUyLDMyOTQ5LDMy''@;'; put 'put ''OTQxLDMzMzEyLDMzNDQwLDMzNDcyLDMzNDUxLDMzNDM0LDMzNDMyLDMzNDM1LDMzNDYxLDMzNDQ3LDMzNDU0LDMzNDY4LDMzNDM4LDMzNDY2LDMzNDYwLDMzNDQ4LDMzNDQxLDMzNDQ5LDMzNDc0LDMzNDQ0LDMzNDc1LDMzNDYyLDMzNDQyLDM0NDE2LDM0NDE1LDM0NDEzLDM0NDE0LDM1OTI2''@;'; put 'put ''LDM2ODE4LDM2ODExLDM2ODE5LDM2ODEzLDM2ODIyLDM2ODIxLDM2ODIzLDM3MDQyLDM3MDQ0LDM3MDM5LDM3MDQzLDM3MDQwLDM4NDU3LDM4NDYxLDM4NDYwLDM4NDU4LDM4NDY3LDIwNDI5LDIwNDIxLDIwNDM1LDIwNDAyLDIwNDI1LDIwNDI3LDIwNDE3LDIwNDM2LDIwNDQ0LDIwNDQxLDIw''@;'; put 'put ''NDExLDIwNDAzLDIwNDQzLDIwNDIzLDIwNDM4LDIwNDEwLDIwNDE2LDIwNDA5LDIwNDYwLDIxMDYwLDIxMDY1LDIxMTg0LDIxMTg2LDIxMzA5LDIxMzcyLDIxMzk5LDIxMzk4LDIxNDAxLDIxNDAwLDIxNjkwLDIxNjY1LDIxNjc3LDIxNjY5LDIxNzExLDIxNjk5LDMzNTQ5LDIxNjg3LDIxNjc4''@;'; put 'put ''LDIxNzE4LDIxNjg2LDIxNzAxLDIxNzAyLDIxNjY0LDIxNjE2LDIxNjkyLDIxNjY2LDIxNjk0LDIxNjE4LDIxNzI2LDIxNjgwLDIyNDUzLDIyNDMwLDIyNDMxLDIyNDM2LDIyNDEyLDIyNDIzLDIyNDI5LDIyNDI3LDIyNDIwLDIyNDI0LDIyNDE1LDIyNDI1LDIyNDM3LDIyNDI2LDIyNDIxLDIy''@;'; put 'put ''NzcyLDIyNzk3LDIyODY3LDIzMDA5LDIzMDA2LDIzMDIyLDIzMDQwLDIzMDI1LDIzMDA1LDIzMDM0LDIzMDM3LDIzMDM2LDIzMDMwLDIzMDEyLDIzMDI2LDIzMDMxLDIzMDAzLDIzMDE3LDIzMDI3LDIzMDI5LDIzMDA4LDIzMDM4LDIzMDI4LDIzMDIxLDIzNDY0LDIzNjI4LDIzNzYwLDIzNzY4''@;'; put 'put ''LDIzNzU2LDIzNzY3LDIzNzU1LDIzNzcxLDIzNzc0LDIzNzcwLDIzNzUzLDIzNzUxLDIzNzU0LDIzNzY2LDIzNzYzLDIzNzY0LDIzNzU5LDIzNzUyLDIzNzUwLDIzNzU4LDIzNzc1LDIzODAwLDI0MDU3LDI0MDk3LDI0MDk4LDI0MDk5LDI0MDk2LDI0MTAwLDI0MjQwLDI0MjI4LDI0MjI2LDI0''@;'; put 'put ''MjE5LDI0MjI3LDI0MjI5LDI0MzI3LDI0MzY2LDI0NDA2LDI0NDU0LDI0NjMxLDI0NjMzLDI0NjYwLDI0NjkwLDI0NjcwLDI0NjQ1LDI0NjU5LDI0NjQ3LDI0NjQ5LDI0NjY3LDI0NjUyLDI0NjQwLDI0NjQyLDI0NjcxLDI0NjEyLDI0NjQ0LDI0NjY0LDI0Njc4LDI0Njg2LDI1MTU0LDI1MTU1''@;'; put 'put ''LDI1Mjk1LDI1MzU3LDI1MzU1LDI1MzMzLDI1MzU4LDI1MzQ3LDI1MzIzLDI1MzM3LDI1MzU5LDI1MzU2LDI1MzM2LDI1MzM0LDI1MzQ0LDI1MzYzLDI1MzY0LDI1MzM4LDI1MzY1LDI1MzM5LDI1MzI4LDI1OTIxLDI1OTIzLDI2MDI2LDI2MDQ3LDI2MTY2LDI2MTQ1LDI2MTYyLDI2MTY1LDI2''@;'; put 'put ''MTQwLDI2MTUwLDI2MTQ2LDI2MTYzLDI2MTU1LDI2MTcwLDI2MTQxLDI2MTY0LDI2MTY5LDI2MTU4LDI2MzgzLDI2Mzg0LDI2NTYxLDI2NjEwLDI2NTY4LDI2NTU0LDI2NTg4LDI2NTU1LDI2NjE2LDI2NTg0LDI2NTYwLDI2NTUxLDI2NTY1LDI2NjAzLDI2NTk2LDI2NTkxLDI2NTQ5LDI2NTcz''@;'; put 'put ''LDI2NTQ3LDI2NjE1LDI2NjE0LDI2NjA2LDI2NTk1LDI2NTYyLDI2NTUzLDI2NTc0LDI2NTk5LDI2NjA4LDI2NTQ2LDI2NjIwLDI2NTY2LDI2NjA1LDI2NTcyLDI2NTQyLDI2NTk4LDI2NTg3LDI2NjE4LDI2NTY5LDI2NTcwLDI2NTYzLDI2NjAyLDI2NTcxLDI3NDMyLDI3NTIyLDI3NTI0LDI3''@;'; put 'put ''NTc0LDI3NjA2LDI3NjA4LDI3NjE2LDI3NjgwLDI3NjgxLDI3OTQ0LDI3OTU2LDI3OTQ5LDI3OTM1LDI3OTY0LDI3OTY3LDI3OTIyLDI3OTE0LDI3ODY2LDI3OTU1LDI3OTA4LDI3OTI5LDI3OTYyLDI3OTMwLDI3OTIxLDI3OTA0LDI3OTMzLDI3OTcwLDI3OTA1LDI3OTI4LDI3OTU5LDI3OTA3''@;'; put 'put ''LDI3OTE5LDI3OTY4LDI3OTExLDI3OTM2LDI3OTQ4LDI3OTEyLDI3OTM4LDI3OTEzLDI3OTIwLDI4ODU1LDI4ODMxLDI4ODYyLDI4ODQ5LDI4ODQ4LDI4ODMzLDI4ODUyLDI4ODUzLDI4ODQxLDI5MjQ5LDI5MjU3LDI5MjU4LDI5MjkyLDI5Mjk2LDI5Mjk5LDI5Mjk0LDI5Mzg2LDI5NDEyLDI5''@;'; put 'put ''NDE2LDI5NDE5LDI5NDA3LDI5NDE4LDI5NDE0LDI5NDExLDI5NTczLDI5NjQ0LDI5NjM0LDI5NjQwLDI5NjM3LDI5NjI1LDI5NjIyLDI5NjIxLDI5NjIwLDI5Njc1LDI5NjMxLDI5NjM5LDI5NjMwLDI5NjM1LDI5NjM4LDI5NjI0LDI5NjQzLDI5OTMyLDI5OTM0LDI5OTk4LDMwMDIzLDMwMDI0''@;'; put 'put ''LDMwMTE5LDMwMTIyLDMwMzI5LDMwNDA0LDMwNDcyLDMwNDY3LDMwNDY4LDMwNDY5LDMwNDc0LDMwNDU1LDMwNDU5LDMwNDU4LDMwNjk1LDMwNjk2LDMwNzI2LDMwNzM3LDMwNzM4LDMwNzI1LDMwNzM2LDMwNzM1LDMwNzM0LDMwNzI5LDMwNzIzLDMwNzM5LDMxMDUwLDMxMDUyLDMxMDUxLDMx''@;'; put 'put ''MDQ1LDMxMDQ0LDMxMTg5LDMxMTgxLDMxMTgzLDMxMTkwLDMxMTgyLDMxMzYwLDMxMzU4LDMxNDQxLDMxNDg4LDMxNDg5LDMxODY2LDMxODY0LDMxODY1LDMxODcxLDMxODcyLDMxODczLDMyMDAzLDMyMDA4LDMyMDAxLDMyNjAwLDMyNjU3LDMyNjUzLDMyNzAyLDMyNzc1LDMyNzgyLDMyNzgz''@;'; put 'put ''LDMyNzg4LDMyODIzLDMyOTg0LDMyOTY3LDMyOTkyLDMyOTc3LDMyOTY4LDMyOTYyLDMyOTc2LDMyOTY1LDMyOTk1LDMyOTg1LDMyOTg4LDMyOTcwLDMyOTgxLDMyOTY5LDMyOTc1LDMyOTgzLDMyOTk4LDMyOTczLDMzMjc5LDMzMzEzLDMzNDI4LDMzNDk3LDMzNTM0LDMzNTI5LDMzNTQzLDMz''@;'; put 'put ''NTEyLDMzNTM2LDMzNDkzLDMzNTk0LDMzNTE1LDMzNDk0LDMzNTI0LDMzNTE2LDMzNTA1LDMzNTIyLDMzNTI1LDMzNTQ4LDMzNTMxLDMzNTI2LDMzNTIwLDMzNTE0LDMzNTA4LDMzNTA0LDMzNTMwLDMzNTIzLDMzNTE3LDM0NDIzLDM0NDIwLDM0NDI4LDM0NDE5LDM0ODgxLDM0ODk0LDM0OTE5''@;'; put 'put ''LDM0OTIyLDM0OTIxLDM1MjgzLDM1MzMyLDM1MzM1LDM2MjEwLDM2ODM1LDM2ODMzLDM2ODQ2LDM2ODMyLDM3MTA1LDM3MDUzLDM3MDU1LDM3MDc3LDM3MDYxLDM3MDU0LDM3MDYzLDM3MDY3LDM3MDY0LDM3MzMyLDM3MzMxLDM4NDg0LDM4NDc5LDM4NDgxLDM4NDgzLDM4NDc0LDM4NDc4LDIw''@;'; put 'put ''NTEwLDIwNDg1LDIwNDg3LDIwNDk5LDIwNTE0LDIwNTI4LDIwNTA3LDIwNDY5LDIwNDY4LDIwNTMxLDIwNTM1LDIwNTI0LDIwNDcwLDIwNDcxLDIwNTAzLDIwNTA4LDIwNTEyLDIwNTE5LDIwNTMzLDIwNTI3LDIwNTI5LDIwNDk0LDIwODI2LDIwODg0LDIwODgzLDIwOTM4LDIwOTMyLDIwOTMz''@;'; put 'put ''LDIwOTM2LDIwOTQyLDIxMDg5LDIxMDgyLDIxMDc0LDIxMDg2LDIxMDg3LDIxMDc3LDIxMDkwLDIxMTk3LDIxMjYyLDIxNDA2LDIxNzk4LDIxNzMwLDIxNzgzLDIxNzc4LDIxNzM1LDIxNzQ3LDIxNzMyLDIxNzg2LDIxNzU5LDIxNzY0LDIxNzY4LDIxNzM5LDIxNzc3LDIxNzY1LDIxNzQ1LDIx''@;'; put 'put ''NzcwLDIxNzU1LDIxNzUxLDIxNzUyLDIxNzI4LDIxNzc0LDIxNzYzLDIxNzcxLDIyMjczLDIyMjc0LDIyNDc2LDIyNTc4LDIyNDg1LDIyNDgyLDIyNDU4LDIyNDcwLDIyNDYxLDIyNDYwLDIyNDU2LDIyNDU0LDIyNDYzLDIyNDcxLDIyNDgwLDIyNDU3LDIyNDY1LDIyNzk4LDIyODU4LDIzMDY1''@;'; put 'put ''LDIzMDYyLDIzMDg1LDIzMDg2LDIzMDYxLDIzMDU1LDIzMDYzLDIzMDUwLDIzMDcwLDIzMDkxLDIzNDA0LDIzNDYzLDIzNDY5LDIzNDY4LDIzNTU1LDIzNjM4LDIzNjM2LDIzNzg4LDIzODA3LDIzNzkwLDIzNzkzLDIzNzk5LDIzODA4LDIzODAxLDI0MTA1LDI0MTA0LDI0MjMyLDI0MjM4LDI0''@;'; put 'put ''MjM0LDI0MjM2LDI0MzcxLDI0MzY4LDI0NDIzLDI0NjY5LDI0NjY2LDI0Njc5LDI0NjQxLDI0NzM4LDI0NzEyLDI0NzA0LDI0NzIyLDI0NzA1LDI0NzMzLDI0NzA3LDI0NzI1LDI0NzMxLDI0NzI3LDI0NzExLDI0NzMyLDI0NzE4LDI1MTEzLDI1MTU4LDI1MzMwLDI1MzYwLDI1NDMwLDI1Mzg4''@;'; put 'put ''LDI1NDEyLDI1NDEzLDI1Mzk4LDI1NDExLDI1NTcyLDI1NDAxLDI1NDE5LDI1NDE4LDI1NDA0LDI1Mzg1LDI1NDA5LDI1Mzk2LDI1NDMyLDI1NDI4LDI1NDMzLDI1Mzg5LDI1NDE1LDI1Mzk1LDI1NDM0LDI1NDI1LDI1NDAwLDI1NDMxLDI1NDA4LDI1NDE2LDI1OTMwLDI1OTI2LDI2MDU0LDI2''@;'; put 'put ''MDUxLDI2MDUyLDI2MDUwLDI2MTg2LDI2MjA3LDI2MTgzLDI2MTkzLDI2Mzg2LDI2Mzg3LDI2NjU1LDI2NjUwLDI2Njk3LDI2Njc0LDI2Njc1LDI2NjgzLDI2Njk5LDI2NzAzLDI2NjQ2LDI2NjczLDI2NjUyLDI2Njc3LDI2NjY3LDI2NjY5LDI2NjcxLDI2NzAyLDI2NjkyLDI2Njc2LDI2NjUz''@;'; put 'put ''LDI2NjQyLDI2NjQ0LDI2NjYyLDI2NjY0LDI2NjcwLDI2NzAxLDI2NjgyLDI2NjYxLDI2NjU2LDI3NDM2LDI3NDM5LDI3NDM3LDI3NDQxLDI3NDQ0LDI3NTAxLDMyODk4LDI3NTI4LDI3NjIyLDI3NjIwLDI3NjI0LDI3NjE5LDI3NjE4LDI3NjIzLDI3Njg1LDI4MDI2LDI4MDAzLDI4MDA0LDI4''@;'; put 'put ''MDIyLDI3OTE3LDI4MDAxLDI4MDUwLDI3OTkyLDI4MDAyLDI4MDEzLDI4MDE1LDI4MDQ5LDI4MDQ1LDI4MTQzLDI4MDMxLDI4MDM4LDI3OTk4LDI4MDA3LDI4ZTMsMjgwNTUsMjgwMTYsMjgwMjgsMjc5OTksMjgwMzQsMjgwNTYsMjc5NTEsMjgwMDgsMjgwNDMsMjgwMzAsMjgwMzIsMjgwMzYs''@;'; put 'put ''Mjc5MjYsMjgwMzUsMjgwMjcsMjgwMjksMjgwMjEsMjgwNDgsMjg4OTIsMjg4ODMsMjg4ODEsMjg4OTMsMjg4NzUsMzI1NjksMjg4OTgsMjg4ODcsMjg4ODIsMjg4OTQsMjg4OTYsMjg4ODQsMjg4NzcsMjg4NjksMjg4NzAsMjg4NzEsMjg4OTAsMjg4NzgsMjg4OTcsMjkyNTAsMjkzMDQsMjkz''@;'; put 'put ''MDMsMjkzMDIsMjk0NDAsMjk0MzQsMjk0MjgsMjk0MzgsMjk0MzAsMjk0MjcsMjk0MzUsMjk0NDEsMjk2NTEsMjk2NTcsMjk2NjksMjk2NTQsMjk2MjgsMjk2NzEsMjk2NjcsMjk2NzMsMjk2NjAsMjk2NTAsMjk2NTksMjk2NTIsMjk2NjEsMjk2NTgsMjk2NTUsMjk2NTYsMjk2NzIsMjk5MTgs''@;'; put 'put ''Mjk5MTksMjk5NDAsMjk5NDEsMjk5ODUsMzAwNDMsMzAwNDcsMzAxMjgsMzAxNDUsMzAxMzksMzAxNDgsMzAxNDQsMzAxNDMsMzAxMzQsMzAxMzgsMzAzNDYsMzA0MDksMzA0OTMsMzA0OTEsMzA0ODAsMzA0ODMsMzA0ODIsMzA0OTksMzA0ODEsMzA0ODUsMzA0ODksMzA0OTAsMzA0OTgsMzA1''@;'; put 'put ''MDMsMzA3NTUsMzA3NjQsMzA3NTQsMzA3NzMsMzA3NjcsMzA3NjAsMzA3NjYsMzA3NjMsMzA3NTMsMzA3NjEsMzA3NzEsMzA3NjIsMzA3NjksMzEwNjAsMzEwNjcsMzEwNTUsMzEwNjgsMzEwNTksMzEwNTgsMzEwNTcsMzEyMTEsMzEyMTIsMzEyMDAsMzEyMTQsMzEyMTMsMzEyMTAsMzExOTYs''@;'; put 'put ''MzExOTgsMzExOTcsMzEzNjYsMzEzNjksMzEzNjUsMzEzNzEsMzEzNzIsMzEzNzAsMzEzNjcsMzE0NDgsMzE1MDQsMzE0OTIsMzE1MDcsMzE0OTMsMzE1MDMsMzE0OTYsMzE0OTgsMzE1MDIsMzE0OTcsMzE1MDYsMzE4NzYsMzE4ODksMzE4ODIsMzE4ODQsMzE4ODAsMzE4ODUsMzE4NzcsMzIw''@;'; put 'put ''MzAsMzIwMjksMzIwMTcsMzIwMTQsMzIwMjQsMzIwMjIsMzIwMTksMzIwMzEsMzIwMTgsMzIwMTUsMzIwMTIsMzI2MDQsMzI2MDksMzI2MDYsMzI2MDgsMzI2MDUsMzI2MDMsMzI2NjIsMzI2NTgsMzI3MDcsMzI3MDYsMzI3MDQsMzI3OTAsMzI4MzAsMzI4MjUsMzMwMTgsMzMwMTAsMzMwMTcs''@;'; put 'put ''MzMwMTMsMzMwMjUsMzMwMTksMzMwMjQsMzMyODEsMzMzMjcsMzMzMTcsMzM1ODcsMzM1ODEsMzM2MDQsMzM1NjEsMzM2MTcsMzM1NzMsMzM2MjIsMzM1OTksMzM2MDEsMzM1NzQsMzM1NjQsMzM1NzAsMzM2MDIsMzM2MTQsMzM1NjMsMzM1NzgsMzM1NDQsMzM1OTYsMzM2MTMsMzM1NTgsMzM1''@;'; put 'put ''NzIsMzM1NjgsMzM1OTEsMzM1ODMsMzM1NzcsMzM2MDcsMzM2MDUsMzM2MTIsMzM2MTksMzM1NjYsMzM1ODAsMzM2MTEsMzM1NzUsMzM2MDgsMzQzODcsMzQzODYsMzQ0NjYsMzQ0NzIsMzQ0NTQsMzQ0NDUsMzQ0NDksMzQ0NjIsMzQ0MzksMzQ0NTUsMzQ0MzgsMzQ0NDMsMzQ0NTgsMzQ0Mzcs''@;'; put 'put ''MzQ0NjksMzQ0NTcsMzQ0NjUsMzQ0NzEsMzQ0NTMsMzQ0NTYsMzQ0NDYsMzQ0NjEsMzQ0NDgsMzQ0NTIsMzQ4ODMsMzQ4ODQsMzQ5MjUsMzQ5MzMsMzQ5MzQsMzQ5MzAsMzQ5NDQsMzQ5MjksMzQ5NDMsMzQ5MjcsMzQ5NDcsMzQ5NDIsMzQ5MzIsMzQ5NDAsMzUzNDYsMzU5MTEsMzU5MjcsMzU5''@;'; put 'put ''NjMsMzYwMDQsMzYwMDMsMzYyMTQsMzYyMTYsMzYyNzcsMzYyNzksMzYyNzgsMzY1NjEsMzY1NjMsMzY4NjIsMzY4NTMsMzY4NjYsMzY4NjMsMzY4NTksMzY4NjgsMzY4NjAsMzY4NTQsMzcwNzgsMzcwODgsMzcwODEsMzcwODIsMzcwOTEsMzcwODcsMzcwOTMsMzcwODAsMzcwODMsMzcwNzks''@;'; put 'put ''MzcwODQsMzcwOTIsMzcyMDAsMzcxOTgsMzcxOTksMzczMzMsMzczNDYsMzczMzgsMzg0OTIsMzg0OTUsMzg1ODgsMzkxMzksMzk2NDcsMzk3MjcsMjAwOTUsMjA1OTIsMjA1ODYsMjA1NzcsMjA1NzQsMjA1NzYsMjA1NjMsMjA1NTUsMjA1NzMsMjA1OTQsMjA1NTIsMjA1NTcsMjA1NDUsMjA1''@;'; put 'put ''NzEsMjA1NTQsMjA1NzgsMjA1MDEsMjA1NDksMjA1NzUsMjA1ODUsMjA1ODcsMjA1NzksMjA1ODAsMjA1NTAsMjA1NDQsMjA1OTAsMjA1OTUsMjA1NjcsMjA1NjEsMjA5NDQsMjEwOTksMjExMDEsMjExMDAsMjExMDIsMjEyMDYsMjEyMDMsMjEyOTMsMjE0MDQsMjE4NzcsMjE4NzgsMjE4MjAs''@;'; put 'put ''MjE4MzcsMjE4NDAsMjE4MTIsMjE4MDIsMjE4NDEsMjE4NTgsMjE4MTQsMjE4MTMsMjE4MDgsMjE4NDIsMjE4MjksMjE3NzIsMjE4MTAsMjE4NjEsMjE4MzgsMjE4MTcsMjE4MzIsMjE4MDUsMjE4MTksMjE4MjQsMjE4MzUsMjIyODIsMjIyNzksMjI1MjMsMjI1NDgsMjI0OTgsMjI1MTgsMjI0''@;'; put 'put ''OTIsMjI1MTYsMjI1MjgsMjI1MDksMjI1MjUsMjI1MzYsMjI1MjAsMjI1MzksMjI1MTUsMjI0NzksMjI1MzUsMjI1MTAsMjI0OTksMjI1MTQsMjI1MDEsMjI1MDgsMjI0OTcsMjI1NDIsMjI1MjQsMjI1NDQsMjI1MDMsMjI1MjksMjI1NDAsMjI1MTMsMjI1MDUsMjI1MTIsMjI1NDEsMjI1MzIs''@;'; put 'put ''MjI4NzYsMjMxMzYsMjMxMjgsMjMxMjUsMjMxNDMsMjMxMzQsMjMwOTYsMjMwOTMsMjMxNDksMjMxMjAsMjMxMzUsMjMxNDEsMjMxNDgsMjMxMjMsMjMxNDAsMjMxMjcsMjMxMDcsMjMxMzMsMjMxMjIsMjMxMDgsMjMxMzEsMjMxMTIsMjMxODIsMjMxMDIsMjMxMTcsMjMwOTcsMjMxMTYsMjMx''@;'; put 'put ''NTIsMjMxNDUsMjMxMTEsMjMxMjEsMjMxMjYsMjMxMDYsMjMxMzIsMjM0MTAsMjM0MDYsMjM0ODksMjM0ODgsMjM2NDEsMjM4MzgsMjM4MTksMjM4MzcsMjM4MzQsMjM4NDAsMjM4MjAsMjM4NDgsMjM4MjEsMjM4NDYsMjM4NDUsMjM4MjMsMjM4NTYsMjM4MjYsMjM4NDMsMjM4MzksMjM4NTQs''@;'; put 'put ''MjQxMjYsMjQxMTYsMjQyNDEsMjQyNDQsMjQyNDksMjQyNDIsMjQyNDMsMjQzNzQsMjQzNzYsMjQ0NzUsMjQ0NzAsMjQ0NzksMjQ3MTQsMjQ3MjAsMjQ3MTAsMjQ3NjYsMjQ3NTIsMjQ3NjIsMjQ3ODcsMjQ3ODgsMjQ3ODMsMjQ4MDQsMjQ3OTMsMjQ3OTcsMjQ3NzYsMjQ3NTMsMjQ3OTUsMjQ3''@;'; put 'put ''NTksMjQ3NzgsMjQ3NjcsMjQ3NzEsMjQ3ODEsMjQ3NjgsMjUzOTQsMjU0NDUsMjU0ODIsMjU0NzQsMjU0NjksMjU1MzMsMjU1MDIsMjU1MTcsMjU1MDEsMjU0OTUsMjU1MTUsMjU0ODYsMjU0NTUsMjU0NzksMjU0ODgsMjU0NTQsMjU1MTksMjU0NjEsMjU1MDAsMjU0NTMsMjU1MTgsMjU0Njgs''@;'; put 'put ''MjU1MDgsMjU0MDMsMjU1MDMsMjU0NjQsMjU0NzcsMjU0NzMsMjU0ODksMjU0ODUsMjU0NTYsMjU5MzksMjYwNjEsMjYyMTMsMjYyMDksMjYyMDMsMjYyMDEsMjYyMDQsMjYyMTAsMjYzOTIsMjY3NDUsMjY3NTksMjY3NjgsMjY3ODAsMjY3MzMsMjY3MzQsMjY3OTgsMjY3OTUsMjY5NjYsMjY3''@;'; put 'put ''MzUsMjY3ODcsMjY3OTYsMjY3OTMsMjY3NDEsMjY3NDAsMjY4MDIsMjY3NjcsMjY3NDMsMjY3NzAsMjY3NDgsMjY3MzEsMjY3MzgsMjY3OTQsMjY3NTIsMjY3MzcsMjY3NTAsMjY3NzksMjY3NzQsMjY3NjMsMjY3ODQsMjY3NjEsMjY3ODgsMjY3NDQsMjY3NDcsMjY3NjksMjY3NjQsMjY3NjIs''@;'; put 'put ''MjY3NDksMjc0NDYsMjc0NDMsMjc0NDcsMjc0NDgsMjc1MzcsMjc1MzUsMjc1MzMsMjc1MzQsMjc1MzIsMjc2OTAsMjgwOTYsMjgwNzUsMjgwODQsMjgwODMsMjgyNzYsMjgwNzYsMjgxMzcsMjgxMzAsMjgwODcsMjgxNTAsMjgxMTYsMjgxNjAsMjgxMDQsMjgxMjgsMjgxMjcsMjgxMTgsMjgw''@;'; put 'put ''OTQsMjgxMzMsMjgxMjQsMjgxMjUsMjgxMjMsMjgxNDgsMjgxMDYsMjgwOTMsMjgxNDEsMjgxNDQsMjgwOTAsMjgxMTcsMjgwOTgsMjgxMTEsMjgxMDUsMjgxMTIsMjgxNDYsMjgxMTUsMjgxNTcsMjgxMTksMjgxMDksMjgxMzEsMjgwOTEsMjg5MjIsMjg5NDEsMjg5MTksMjg5NTEsMjg5MTYs''@;'; put 'put ''Mjg5NDAsMjg5MTIsMjg5MzIsMjg5MTUsMjg5NDQsMjg5MjQsMjg5MjcsMjg5MzQsMjg5NDcsMjg5MjgsMjg5MjAsMjg5MTgsMjg5MzksMjg5MzAsMjg5NDIsMjkzMTAsMjkzMDcsMjkzMDgsMjkzMTEsMjk0NjksMjk0NjMsMjk0NDcsMjk0NTcsMjk0NjQsMjk0NTAsMjk0NDgsMjk0MzksMjk0''@;'; put 'put ''NTUsMjk0NzAsMjk1NzYsMjk2ODYsMjk2ODgsMjk2ODUsMjk3MDAsMjk2OTcsMjk2OTMsMjk3MDMsMjk2OTYsMjk2OTAsMjk2OTIsMjk2OTUsMjk3MDgsMjk3MDcsMjk2ODQsMjk3MDQsMzAwNTIsMzAwNTEsMzAxNTgsMzAxNjIsMzAxNTksMzAxNTUsMzAxNTYsMzAxNjEsMzAxNjAsMzAzNTEs''@;'; put 'put ''MzAzNDUsMzA0MTksMzA1MjEsMzA1MTEsMzA1MDksMzA1MTMsMzA1MTQsMzA1MTYsMzA1MTUsMzA1MjUsMzA1MDEsMzA1MjMsMzA1MTcsMzA3OTIsMzA4MDIsMzA3OTMsMzA3OTcsMzA3OTQsMzA3OTYsMzA3NTgsMzA3ODksMzA4MDAsMzEwNzYsMzEwNzksMzEwODEsMzEwODIsMzEwNzUsMzEw''@;'; put 'put ''ODMsMzEwNzMsMzExNjMsMzEyMjYsMzEyMjQsMzEyMjIsMzEyMjMsMzEzNzUsMzEzODAsMzEzNzYsMzE1NDEsMzE1NTksMzE1NDAsMzE1MjUsMzE1MzYsMzE1MjIsMzE1MjQsMzE1MzksMzE1MTIsMzE1MzAsMzE1MTcsMzE1MzcsMzE1MzEsMzE1MzMsMzE1MzUsMzE1MzgsMzE1NDQsMzE1MTQs''@;'; put 'put ''MzE1MjMsMzE4OTIsMzE4OTYsMzE4OTQsMzE5MDcsMzIwNTMsMzIwNjEsMzIwNTYsMzIwNTQsMzIwNTgsMzIwNjksMzIwNDQsMzIwNDEsMzIwNjUsMzIwNzEsMzIwNjIsMzIwNjMsMzIwNzQsMzIwNTksMzIwNDAsMzI2MTEsMzI2NjEsMzI2NjgsMzI2NjksMzI2NjcsMzI3MTQsMzI3MTUsMzI3''@;'; put 'put ''MTcsMzI3MjAsMzI3MjEsMzI3MTEsMzI3MTksMzI3MTMsMzI3OTksMzI3OTgsMzI3OTUsMzI4MzksMzI4MzUsMzI4NDAsMzMwNDgsMzMwNjEsMzMwNDksMzMwNTEsMzMwNjksMzMwNTUsMzMwNjgsMzMwNTQsMzMwNTcsMzMwNDUsMzMwNjMsMzMwNTMsMzMwNTgsMzMyOTcsMzMzMzYsMzMzMzEs''@;'; put 'put ''MzMzMzgsMzMzMzIsMzMzMzAsMzMzOTYsMzM2ODAsMzM2OTksMzM3MDQsMzM2NzcsMzM2NTgsMzM2NTEsMzM3MDAsMzM2NTIsMzM2NzksMzM2NjUsMzM2ODUsMzM2ODksMzM2NTMsMzM2ODQsMzM3MDUsMzM2NjEsMzM2NjcsMzM2NzYsMzM2OTMsMzM2OTEsMzM3MDYsMzM2NzUsMzM2NjIsMzM3''@;'; put 'put ''MDEsMzM3MTEsMzM2NzIsMzM2ODcsMzM3MTIsMzM2NjMsMzM3MDIsMzM2NzEsMzM3MTAsMzM2NTQsMzM2OTAsMzQzOTMsMzQzOTAsMzQ0OTUsMzQ0ODcsMzQ0OTgsMzQ0OTcsMzQ1MDEsMzQ0OTAsMzQ0ODAsMzQ1MDQsMzQ0ODksMzQ0ODMsMzQ0ODgsMzQ1MDgsMzQ0ODQsMzQ0OTEsMzQ0OTIs''@;'; put 'put ''MzQ0OTksMzQ0OTMsMzQ0OTQsMzQ4OTgsMzQ5NTMsMzQ5NjUsMzQ5ODQsMzQ5NzgsMzQ5ODYsMzQ5NzAsMzQ5NjEsMzQ5NzcsMzQ5NzUsMzQ5NjgsMzQ5ODMsMzQ5NjksMzQ5NzEsMzQ5NjcsMzQ5ODAsMzQ5ODgsMzQ5NTYsMzQ5NjMsMzQ5NTgsMzUyMDIsMzUyODYsMzUyODksMzUyODUsMzUz''@;'; put 'put ''NzYsMzUzNjcsMzUzNzIsMzUzNTgsMzU4OTcsMzU4OTksMzU5MzIsMzU5MzMsMzU5NjUsMzYwMDUsMzYyMjEsMzYyMTksMzYyMTcsMzYyODQsMzYyOTAsMzYyODEsMzYyODcsMzYyODksMzY1NjgsMzY1NzQsMzY1NzMsMzY1NzIsMzY1NjcsMzY1NzYsMzY1NzcsMzY5MDAsMzY4NzUsMzY4ODEs''@;'; put 'put ''MzY4OTIsMzY4NzYsMzY4OTcsMzcxMDMsMzcwOTgsMzcxMDQsMzcxMDgsMzcxMDYsMzcxMDcsMzcwNzYsMzcwOTksMzcxMDAsMzcwOTcsMzcyMDYsMzcyMDgsMzcyMTAsMzcyMDMsMzcyMDUsMzczNTYsMzczNjQsMzczNjEsMzczNjMsMzczNjgsMzczNDgsMzczNjksMzczNTQsMzczNTUsMzcz''@;'; put 'put ''NjcsMzczNTIsMzczNTgsMzgyNjYsMzgyNzgsMzgyODAsMzg1MjQsMzg1MDksMzg1MDcsMzg1MTMsMzg1MTEsMzg1OTEsMzg3NjIsMzg5MTYsMzkxNDEsMzkzMTksMjA2MzUsMjA2MjksMjA2MjgsMjA2MzgsMjA2MTksMjA2NDMsMjA2MTEsMjA2MjAsMjA2MjIsMjA2MzcsMjA1ODQsMjA2MzYs''@;'; put 'put ''MjA2MjYsMjA2MTAsMjA2MTUsMjA4MzEsMjA5NDgsMjEyNjYsMjEyNjUsMjE0MTIsMjE0MTUsMjE5MDUsMjE5MjgsMjE5MjUsMjE5MzMsMjE4NzksMjIwODUsMjE5MjIsMjE5MDcsMjE4OTYsMjE5MDMsMjE5NDEsMjE4ODksMjE5MjMsMjE5MDYsMjE5MjQsMjE4ODUsMjE5MDAsMjE5MjYsMjE4''@;'; put 'put ''ODcsMjE5MDksMjE5MjEsMjE5MDIsMjIyODQsMjI1NjksMjI1ODMsMjI1NTMsMjI1NTgsMjI1NjcsMjI1NjMsMjI1NjgsMjI1MTcsMjI2MDAsMjI1NjUsMjI1NTYsMjI1NTUsMjI1NzksMjI1OTEsMjI1ODIsMjI1NzQsMjI1ODUsMjI1ODQsMjI1NzMsMjI1NzIsMjI1ODcsMjI4ODEsMjMyMTUs''@;'; put 'put ''MjMxODgsMjMxOTksMjMxNjIsMjMyMDIsMjMxOTgsMjMxNjAsMjMyMDYsMjMxNjQsMjMyMDUsMjMyMTIsMjMxODksMjMyMTQsMjMwOTUsMjMxNzIsMjMxNzgsMjMxOTEsMjMxNzEsMjMxNzksMjMyMDksMjMxNjMsMjMxNjUsMjMxODAsMjMxOTYsMjMxODMsMjMxODcsMjMxOTcsMjM1MzAsMjM1''@;'; put 'put ''MDEsMjM0OTksMjM1MDgsMjM1MDUsMjM0OTgsMjM1MDIsMjM1NjQsMjM2MDAsMjM4NjMsMjM4NzUsMjM5MTUsMjM4NzMsMjM4ODMsMjM4NzEsMjM4NjEsMjM4ODksMjM4ODYsMjM4OTMsMjM4NTksMjM4NjYsMjM4OTAsMjM4NjksMjM4NTcsMjM4OTcsMjM4NzQsMjM4NjUsMjM4ODEsMjM4NjQs''@;'; put 'put ''MjM4NjgsMjM4NTgsMjM4NjIsMjM4NzIsMjM4NzcsMjQxMzIsMjQxMjksMjQ0MDgsMjQ0ODYsMjQ0ODUsMjQ0OTEsMjQ3NzcsMjQ3NjEsMjQ3ODAsMjQ4MDIsMjQ3ODIsMjQ3NzIsMjQ4NTIsMjQ4MTgsMjQ4NDIsMjQ4NTQsMjQ4MzcsMjQ4MjEsMjQ4NTEsMjQ4MjQsMjQ4MjgsMjQ4MzAsMjQ3''@;'; put 'put ''NjksMjQ4MzUsMjQ4NTYsMjQ4NjEsMjQ4NDgsMjQ4MzEsMjQ4MzYsMjQ4NDMsMjUxNjIsMjU0OTIsMjU1MjEsMjU1MjAsMjU1NTAsMjU1NzMsMjU1NzYsMjU1ODMsMjU1MzksMjU3NTcsMjU1ODcsMjU1NDYsMjU1NjgsMjU1OTAsMjU1NTcsMjU1ODYsMjU1ODksMjU2OTcsMjU1NjcsMjU1MzQs''@;'; put 'put ''MjU1NjUsMjU1NjQsMjU1NDAsMjU1NjAsMjU1NTUsMjU1MzgsMjU1NDMsMjU1NDgsMjU1NDcsMjU1NDQsMjU1ODQsMjU1NTksMjU1NjEsMjU5MDYsMjU5NTksMjU5NjIsMjU5NTYsMjU5NDgsMjU5NjAsMjU5NTcsMjU5OTYsMjYwMTMsMjYwMTQsMjYwMzAsMjYwNjQsMjYwNjYsMjYyMzYsMjYy''@;'; put 'put ''MjAsMjYyMzUsMjYyNDAsMjYyMjUsMjYyMzMsMjYyMTgsMjYyMjYsMjYzNjksMjY4OTIsMjY4MzUsMjY4ODQsMjY4NDQsMjY5MjIsMjY4NjAsMjY4NTgsMjY4NjUsMjY4OTUsMjY4MzgsMjY4NzEsMjY4NTksMjY4NTIsMjY4NzAsMjY4OTksMjY4OTYsMjY4NjcsMjY4NDksMjY4ODcsMjY4Mjgs''@;'; put 'put ''MjY4ODgsMjY5OTIsMjY4MDQsMjY4OTcsMjY4NjMsMjY4MjIsMjY5MDAsMjY4NzIsMjY4MzIsMjY4NzcsMjY4NzYsMjY4NTYsMjY4OTEsMjY4OTAsMjY5MDMsMjY4MzAsMjY4MjQsMjY4NDUsMjY4NDYsMjY4NTQsMjY4NjgsMjY4MzMsMjY4ODYsMjY4MzYsMjY4NTcsMjY5MDEsMjY5MTcsMjY4''@;'; put 'put ''MjMsMjc0NDksMjc0NTEsMjc0NTUsMjc0NTIsMjc1NDAsMjc1NDMsMjc1NDUsMjc1NDEsMjc1ODEsMjc2MzIsMjc2MzQsMjc2MzUsMjc2OTYsMjgxNTYsMjgyMzAsMjgyMzEsMjgxOTEsMjgyMzMsMjgyOTYsMjgyMjAsMjgyMjEsMjgyMjksMjgyNTgsMjgyMDMsMjgyMjMsMjgyMjUsMjgyNTMs''@;'; put 'put ''MjgyNzUsMjgxODgsMjgyMTEsMjgyMzUsMjgyMjQsMjgyNDEsMjgyMTksMjgxNjMsMjgyMDYsMjgyNTQsMjgyNjQsMjgyNTIsMjgyNTcsMjgyMDksMjgyMDAsMjgyNTYsMjgyNzMsMjgyNjcsMjgyMTcsMjgxOTQsMjgyMDgsMjgyNDMsMjgyNjEsMjgxOTksMjgyODAsMjgyNjAsMjgyNzksMjgy''@;'; put 'put ''NDUsMjgyODEsMjgyNDIsMjgyNjIsMjgyMTMsMjgyMTQsMjgyNTAsMjg5NjAsMjg5NTgsMjg5NzUsMjg5MjMsMjg5NzQsMjg5NzcsMjg5NjMsMjg5NjUsMjg5NjIsMjg5NzgsMjg5NTksMjg5NjgsMjg5ODYsMjg5NTUsMjkyNTksMjkyNzQsMjkzMjAsMjkzMjEsMjkzMTgsMjkzMTcsMjkzMjMs''@;'; put 'put ''Mjk0NTgsMjk0NTEsMjk0ODgsMjk0NzQsMjk0ODksMjk0OTEsMjk0NzksMjk0OTAsMjk0ODUsMjk0NzgsMjk0NzUsMjk0OTMsMjk0NTIsMjk3NDIsMjk3NDAsMjk3NDQsMjk3MzksMjk3MTgsMjk3MjIsMjk3MjksMjk3NDEsMjk3NDUsMjk3MzIsMjk3MzEsMjk3MjUsMjk3MzcsMjk3MjgsMjk3''@;'; put 'put ''NDYsMjk5NDcsMjk5OTksMzAwNjMsMzAwNjAsMzAxODMsMzAxNzAsMzAxNzcsMzAxODIsMzAxNzMsMzAxNzUsMzAxODAsMzAxNjcsMzAzNTcsMzAzNTQsMzA0MjYsMzA1MzQsMzA1MzUsMzA1MzIsMzA1NDEsMzA1MzMsMzA1MzgsMzA1NDIsMzA1MzksMzA1NDAsMzA2ODYsMzA3MDAsMzA4MTYs''@;'; put 'put ''MzA4MjAsMzA4MjEsMzA4MTIsMzA4MjksMzA4MzMsMzA4MjYsMzA4MzAsMzA4MzIsMzA4MjUsMzA4MjQsMzA4MTQsMzA4MTgsMzEwOTIsMzEwOTEsMzEwOTAsMzEwODgsMzEyMzQsMzEyNDIsMzEyMzUsMzEyNDQsMzEyMzYsMzEzODUsMzE0NjIsMzE0NjAsMzE1NjIsMzE1NDcsMzE1NTYsMzE1''@;'; put 'put ''NjAsMzE1NjQsMzE1NjYsMzE1NTIsMzE1NzYsMzE1NTcsMzE5MDYsMzE5MDIsMzE5MTIsMzE5MDUsMzIwODgsMzIxMTEsMzIwOTksMzIwODMsMzIwODYsMzIxMDMsMzIxMDYsMzIwNzksMzIxMDksMzIwOTIsMzIxMDcsMzIwODIsMzIwODQsMzIxMDUsMzIwODEsMzIwOTUsMzIwNzgsMzI1NzQs''@;'; put 'put ''MzI1NzUsMzI2MTMsMzI2MTQsMzI2NzQsMzI2NzIsMzI2NzMsMzI3MjcsMzI4NDksMzI4NDcsMzI4NDgsMzMwMjIsMzI5ODAsMzMwOTEsMzMwOTgsMzMxMDYsMzMxMDMsMzMwOTUsMzMwODUsMzMxMDEsMzMwODIsMzMyNTQsMzMyNjIsMzMyNzEsMzMyNzIsMzMyNzMsMzMyODQsMzMzNDAsMzMz''@;'; put 'put ''NDEsMzMzNDMsMzMzOTcsMzM1OTUsMzM3NDMsMzM3ODUsMzM4MjcsMzM3MjgsMzM3NjgsMzM4MTAsMzM3NjcsMzM3NjQsMzM3ODgsMzM3ODIsMzM4MDgsMzM3MzQsMzM3MzYsMzM3NzEsMzM3NjMsMzM3MjcsMzM3OTMsMzM3NTcsMzM3NjUsMzM3NTIsMzM3OTEsMzM3NjEsMzM3MzksMzM3NDIs''@;'; put 'put ''MzM3NTAsMzM3ODEsMzM3MzcsMzM4MDEsMzM4MDcsMzM3NTgsMzM4MDksMzM3OTgsMzM3MzAsMzM3NzksMzM3NDksMzM3ODYsMzM3MzUsMzM3NDUsMzM3NzAsMzM4MTEsMzM3MzEsMzM3NzIsMzM3NzQsMzM3MzIsMzM3ODcsMzM3NTEsMzM3NjIsMzM4MTksMzM3NTUsMzM3OTAsMzQ1MjAsMzQ1''@;'; put 'put ''MzAsMzQ1MzQsMzQ1MTUsMzQ1MzEsMzQ1MjIsMzQ1MzgsMzQ1MjUsMzQ1MzksMzQ1MjQsMzQ1NDAsMzQ1MzcsMzQ1MTksMzQ1MzYsMzQ1MTMsMzQ4ODgsMzQ5MDIsMzQ5MDEsMzUwMDIsMzUwMzEsMzUwMDEsMzVlMywzNTAwOCwzNTAwNiwzNDk5OCwzNTAwNCwzNDk5OSwzNTAwNSwzNDk5NCwz''@;'; put 'put ''NTA3MywzNTAxNywzNTIyMSwzNTIyNCwzNTIyMywzNTI5MywzNTI5MCwzNTI5MSwzNTQwNiwzNTQwNSwzNTM4NSwzNTQxNywzNTM5MiwzNTQxNSwzNTQxNiwzNTM5NiwzNTM5NywzNTQxMCwzNTQwMCwzNTQwOSwzNTQwMiwzNTQwNCwzNTQwNywzNTkzNSwzNTk2OSwzNTk2OCwzNjAyNiwzNjAz''@;'; put 'put ''MCwzNjAxNiwzNjAyNSwzNjAyMSwzNjIyOCwzNjIyNCwzNjIzMywzNjMxMiwzNjMwNywzNjMwMSwzNjI5NSwzNjMxMCwzNjMxNiwzNjMwMywzNjMwOSwzNjMxMywzNjI5NiwzNjMxMSwzNjI5MywzNjU5MSwzNjU5OSwzNjYwMiwzNjYwMSwzNjU4MiwzNjU5MCwzNjU4MSwzNjU5NywzNjU4Mywz''@;'; put 'put ''NjU4NCwzNjU5OCwzNjU4NywzNjU5MywzNjU4OCwzNjU5NiwzNjU4NSwzNjkwOSwzNjkxNiwzNjkxMSwzNzEyNiwzNzE2NCwzNzEyNCwzNzExOSwzNzExNiwzNzEyOCwzNzExMywzNzExNSwzNzEyMSwzNzEyMCwzNzEyNywzNzEyNSwzNzEyMywzNzIxNywzNzIyMCwzNzIxNSwzNzIxOCwzNzIx''@;'; put 'put ''NiwzNzM3NywzNzM4NiwzNzQxMywzNzM3OSwzNzQwMiwzNzQxNCwzNzM5MSwzNzM4OCwzNzM3NiwzNzM5NCwzNzM3NSwzNzM3MywzNzM4MiwzNzM4MCwzNzQxNSwzNzM3OCwzNzQwNCwzNzQxMiwzNzQwMSwzNzM5OSwzNzM4MSwzNzM5OCwzODI2NywzODI4NSwzODI4NCwzODI4OCwzODUzNSwz''@;'; put 'put ''ODUyNiwzODUzNiwzODUzNywzODUzMSwzODUyOCwzODU5NCwzODYwMCwzODU5NSwzODY0MSwzODY0MCwzODc2NCwzODc2OCwzODc2NiwzODkxOSwzOTA4MSwzOTE0Nyw0MDE2Niw0MDY5NywyMDA5OSwyMDEwMCwyMDE1MCwyMDY2OSwyMDY3MSwyMDY3OCwyMDY1NCwyMDY3NiwyMDY4MiwyMDY2''@;'; put 'put ''MCwyMDY4MCwyMDY3NCwyMDY1NiwyMDY3MywyMDY2NiwyMDY1NywyMDY4MywyMDY4MSwyMDY2MiwyMDY2NCwyMDk1MSwyMTExNCwyMTExMiwyMTExNSwyMTExNiwyMTk1NSwyMTk3OSwyMTk2NCwyMTk2OCwyMTk2MywyMTk2MiwyMTk4MSwyMTk1MiwyMTk3MiwyMTk1NiwyMTk5MywyMTk1MSwy''@;'; put 'put ''MTk3MCwyMTkwMSwyMTk2NywyMTk3MywyMTk4NiwyMTk3NCwyMTk2MCwyMjAwMiwyMTk2NSwyMTk3NywyMTk1NCwyMjI5MiwyMjYxMSwyMjYzMiwyMjYyOCwyMjYwNywyMjYwNSwyMjYwMSwyMjYzOSwyMjYxMywyMjYwNiwyMjYyMSwyMjYxNywyMjYyOSwyMjYxOSwyMjU4OSwyMjYyNywyMjY0''@;'; put 'put ''MSwyMjc4MCwyMzIzOSwyMzIzNiwyMzI0MywyMzIyNiwyMzIyNCwyMzIxNywyMzIyMSwyMzIxNiwyMzIzMSwyMzI0MCwyMzIyNywyMzIzOCwyMzIyMywyMzIzMiwyMzI0MiwyMzIyMCwyMzIyMiwyMzI0NSwyMzIyNSwyMzE4NCwyMzUxMCwyMzUxMiwyMzUxMywyMzU4MywyMzYwMywyMzkyMSwy''@;'; put 'put ''MzkwNywyMzg4MiwyMzkwOSwyMzkyMiwyMzkxNiwyMzkwMiwyMzkxMiwyMzkxMSwyMzkwNiwyNDA0OCwyNDE0MywyNDE0MiwyNDEzOCwyNDE0MSwyNDEzOSwyNDI2MSwyNDI2OCwyNDI2MiwyNDI2NywyNDI2MywyNDM4NCwyNDQ5NSwyNDQ5MywyNDgyMywyNDkwNSwyNDkwNiwyNDg3NSwyNDkw''@;'; put 'put ''MSwyNDg4NiwyNDg4MiwyNDg3OCwyNDkwMiwyNDg3OSwyNDkxMSwyNDg3MywyNDg5NiwyNTEyMCwzNzIyNCwyNTEyMywyNTEyNSwyNTEyNCwyNTU0MSwyNTU4NSwyNTU3OSwyNTYxNiwyNTYxOCwyNTYwOSwyNTYzMiwyNTYzNiwyNTY1MSwyNTY2NywyNTYzMSwyNTYyMSwyNTYyNCwyNTY1Nywy''@;'; put 'put ''NTY1NSwyNTYzNCwyNTYzNSwyNTYxMiwyNTYzOCwyNTY0OCwyNTY0MCwyNTY2NSwyNTY1MywyNTY0NywyNTYxMCwyNTYyNiwyNTY2NCwyNTYzNywyNTYzOSwyNTYxMSwyNTU3NSwyNTYyNywyNTY0NiwyNTYzMywyNTYxNCwyNTk2NywyNjAwMiwyNjA2NywyNjI0NiwyNjI1MiwyNjI2MSwyNjI1''@;'; put 'put ''NiwyNjI1MSwyNjI1MCwyNjI2NSwyNjI2MCwyNjIzMiwyNjQwMCwyNjk4MiwyNjk3NSwyNjkzNiwyNjk1OCwyNjk3OCwyNjk5MywyNjk0MywyNjk0OSwyNjk4NiwyNjkzNywyNjk0NiwyNjk2NywyNjk2OSwyNzAwMiwyNjk1MiwyNjk1MywyNjkzMywyNjk4OCwyNjkzMSwyNjk0MSwyNjk4MSwy''@;'; put 'put ''Njg2NCwyN2UzLDI2OTMyLDI2OTg1LDI2OTQ0LDI2OTkxLDI2OTQ4LDI2OTk4LDI2OTY4LDI2OTQ1LDI2OTk2LDI2OTU2LDI2OTM5LDI2OTU1LDI2OTM1LDI2OTcyLDI2OTU5LDI2OTYxLDI2OTMwLDI2OTYyLDI2OTI3LDI3MDAzLDI2OTQwLDI3NDYyLDI3NDYxLDI3NDU5LDI3NDU4LDI3NDY0''@;'; put 'put ''LDI3NDU3LDI3NTQ3LDY0MDEzLDI3NjQzLDI3NjQ0LDI3NjQxLDI3NjM5LDI3NjQwLDI4MzE1LDI4Mzc0LDI4MzYwLDI4MzAzLDI4MzUyLDI4MzE5LDI4MzA3LDI4MzA4LDI4MzIwLDI4MzM3LDI4MzQ1LDI4MzU4LDI4MzcwLDI4MzQ5LDI4MzUzLDI4MzE4LDI4MzYxLDI4MzQzLDI4MzM2LDI4''@;'; put 'put ''MzY1LDI4MzI2LDI4MzY3LDI4MzM4LDI4MzUwLDI4MzU1LDI4MzgwLDI4Mzc2LDI4MzEzLDI4MzA2LDI4MzAyLDI4MzAxLDI4MzI0LDI4MzIxLDI4MzUxLDI4MzM5LDI4MzY4LDI4MzYyLDI4MzExLDI4MzM0LDI4MzIzLDI4OTk5LDI5MDEyLDI5MDEwLDI5MDI3LDI5MDI0LDI4OTkzLDI5MDIx''@;'; put 'put ''LDI5MDI2LDI5MDQyLDI5MDQ4LDI5MDM0LDI5MDI1LDI4OTk0LDI5MDE2LDI4OTk1LDI5MDAzLDI5MDQwLDI5MDIzLDI5MDA4LDI5MDExLDI4OTk2LDI5MDA1LDI5MDE4LDI5MjYzLDI5MzI1LDI5MzI0LDI5MzI5LDI5MzI4LDI5MzI2LDI5NTAwLDI5NTA2LDI5NDk5LDI5NDk4LDI5NTA0LDI5''@;'; put 'put ''NTE0LDI5NTEzLDI5NzY0LDI5NzcwLDI5NzcxLDI5Nzc4LDI5Nzc3LDI5NzgzLDI5NzYwLDI5Nzc1LDI5Nzc2LDI5Nzc0LDI5NzYyLDI5NzY2LDI5NzczLDI5NzgwLDI5OTIxLDI5OTUxLDI5OTUwLDI5OTQ5LDI5OTgxLDMwMDczLDMwMDcxLDI3MDExLDMwMTkxLDMwMjIzLDMwMjExLDMwMTk5''@;'; put 'put ''LDMwMjA2LDMwMjA0LDMwMjAxLDMwMjAwLDMwMjI0LDMwMjAzLDMwMTk4LDMwMTg5LDMwMTk3LDMwMjA1LDMwMzYxLDMwMzg5LDMwNDI5LDMwNTQ5LDMwNTU5LDMwNTYwLDMwNTQ2LDMwNTUwLDMwNTU0LDMwNTY5LDMwNTY3LDMwNTQ4LDMwNTUzLDMwNTczLDMwNjg4LDMwODU1LDMwODc0LDMw''@;'; put 'put ''ODY4LDMwODYzLDMwODUyLDMwODY5LDMwODUzLDMwODU0LDMwODgxLDMwODUxLDMwODQxLDMwODczLDMwODQ4LDMwODcwLDMwODQzLDMxMTAwLDMxMTA2LDMxMTAxLDMxMDk3LDMxMjQ5LDMxMjU2LDMxMjU3LDMxMjUwLDMxMjU1LDMxMjUzLDMxMjY2LDMxMjUxLDMxMjU5LDMxMjQ4LDMxMzk1''@;'; put 'put ''LDMxMzk0LDMxMzkwLDMxNDY3LDMxNTkwLDMxNTg4LDMxNTk3LDMxNjA0LDMxNTkzLDMxNjAyLDMxNTg5LDMxNjAzLDMxNjAxLDMxNjAwLDMxNTg1LDMxNjA4LDMxNjA2LDMxNTg3LDMxOTIyLDMxOTI0LDMxOTE5LDMyMTM2LDMyMTM0LDMyMTI4LDMyMTQxLDMyMTI3LDMyMTMzLDMyMTIyLDMy''@;'; put 'put ''MTQyLDMyMTIzLDMyMTMxLDMyMTI0LDMyMTQwLDMyMTQ4LDMyMTMyLDMyMTI1LDMyMTQ2LDMyNjIxLDMyNjE5LDMyNjE1LDMyNjE2LDMyNjIwLDMyNjc4LDMyNjc3LDMyNjc5LDMyNzMxLDMyNzMyLDMyODAxLDMzMTI0LDMzMTIwLDMzMTQzLDMzMTE2LDMzMTI5LDMzMTE1LDMzMTIyLDMzMTM4''@;'; put 'put ''LDI2NDAxLDMzMTE4LDMzMTQyLDMzMTI3LDMzMTM1LDMzMDkyLDMzMTIxLDMzMzA5LDMzMzUzLDMzMzQ4LDMzMzQ0LDMzMzQ2LDMzMzQ5LDM0MDMzLDMzODU1LDMzODc4LDMzOTEwLDMzOTEzLDMzOTM1LDMzOTMzLDMzODkzLDMzODczLDMzODU2LDMzOTI2LDMzODk1LDMzODQwLDMzODY5LDMz''@;'; put 'put ''OTE3LDMzODgyLDMzODgxLDMzOTA4LDMzOTA3LDMzODg1LDM0MDU1LDMzODg2LDMzODQ3LDMzODUwLDMzODQ0LDMzOTE0LDMzODU5LDMzOTEyLDMzODQyLDMzODYxLDMzODMzLDMzNzUzLDMzODY3LDMzODM5LDMzODU4LDMzODM3LDMzODg3LDMzOTA0LDMzODQ5LDMzODcwLDMzODY4LDMzODc0''@;'; put 'put ''LDMzOTAzLDMzOTg5LDMzOTM0LDMzODUxLDMzODYzLDMzODQ2LDMzODQzLDMzODk2LDMzOTE4LDMzODYwLDMzODM1LDMzODg4LDMzODc2LDMzOTAyLDMzODcyLDM0NTcxLDM0NTY0LDM0NTUxLDM0NTcyLDM0NTU0LDM0NTE4LDM0NTQ5LDM0NjM3LDM0NTUyLDM0NTc0LDM0NTY5LDM0NTYxLDM0''@;'; put 'put ''NTUwLDM0NTczLDM0NTY1LDM1MDMwLDM1MDE5LDM1MDIxLDM1MDIyLDM1MDM4LDM1MDM1LDM1MDM0LDM1MDIwLDM1MDI0LDM1MjA1LDM1MjI3LDM1Mjk1LDM1MzAxLDM1MzAwLDM1Mjk3LDM1Mjk2LDM1Mjk4LDM1MjkyLDM1MzAyLDM1NDQ2LDM1NDYyLDM1NDU1LDM1NDI1LDM1MzkxLDM1NDQ3''@;'; put 'put ''LDM1NDU4LDM1NDYwLDM1NDQ1LDM1NDU5LDM1NDU3LDM1NDQ0LDM1NDUwLDM1OTAwLDM1OTE1LDM1OTE0LDM1OTQxLDM1OTQwLDM1OTQyLDM1OTc0LDM1OTcyLDM1OTczLDM2MDQ0LDM2MjAwLDM2MjAxLDM2MjQxLDM2MjM2LDM2MjM4LDM2MjM5LDM2MjM3LDM2MjQzLDM2MjQ0LDM2MjQwLDM2''@;'; put 'put ''MjQyLDM2MzM2LDM2MzIwLDM2MzMyLDM2MzM3LDM2MzM0LDM2MzA0LDM2MzI5LDM2MzIzLDM2MzIyLDM2MzI3LDM2MzM4LDM2MzMxLDM2MzQwLDM2NjE0LDM2NjA3LDM2NjA5LDM2NjA4LDM2NjEzLDM2NjE1LDM2NjE2LDM2NjEwLDM2NjE5LDM2OTQ2LDM2OTI3LDM2OTMyLDM2OTM3LDM2OTI1''@;'; put 'put ''LDM3MTM2LDM3MTMzLDM3MTM1LDM3MTM3LDM3MTQyLDM3MTQwLDM3MTMxLDM3MTM0LDM3MjMwLDM3MjMxLDM3NDQ4LDM3NDU4LDM3NDI0LDM3NDM0LDM3NDc4LDM3NDI3LDM3NDc3LDM3NDcwLDM3NTA3LDM3NDIyLDM3NDUwLDM3NDQ2LDM3NDg1LDM3NDg0LDM3NDU1LDM3NDcyLDM3NDc5LDM3''@;'; put 'put ''NDg3LDM3NDMwLDM3NDczLDM3NDg4LDM3NDI1LDM3NDYwLDM3NDc1LDM3NDU2LDM3NDkwLDM3NDU0LDM3NDU5LDM3NDUyLDM3NDYyLDM3NDI2LDM4MzAzLDM4MzAwLDM4MzAyLDM4Mjk5LDM4NTQ2LDM4NTQ3LDM4NTQ1LDM4NTUxLDM4NjA2LDM4NjUwLDM4NjUzLDM4NjQ4LDM4NjQ1LDM4Nzcx''@;'; put 'put ''LDM4Nzc1LDM4Nzc2LDM4NzcwLDM4OTI3LDM4OTI1LDM4OTI2LDM5MDg0LDM5MTU4LDM5MTYxLDM5MzQzLDM5MzQ2LDM5MzQ0LDM5MzQ5LDM5NTk3LDM5NTk1LDM5NzcxLDQwMTcwLDQwMTczLDQwMTY3LDQwNTc2LDQwNzAxLDIwNzEwLDIwNjkyLDIwNjk1LDIwNzEyLDIwNzIzLDIwNjk5LDIw''@;'; put 'put ''NzE0LDIwNzAxLDIwNzA4LDIwNjkxLDIwNzE2LDIwNzIwLDIwNzE5LDIwNzA3LDIwNzA0LDIwOTUyLDIxMTIwLDIxMTIxLDIxMjI1LDIxMjI3LDIxMjk2LDIxNDIwLDIyMDU1LDIyMDM3LDIyMDI4LDIyMDM0LDIyMDEyLDIyMDMxLDIyMDQ0LDIyMDE3LDIyMDM1LDIyMDE4LDIyMDEwLDIyMDQ1''@;'; put 'put ''LDIyMDIwLDIyMDE1LDIyMDA5LDIyNjY1LDIyNjUyLDIyNjcyLDIyNjgwLDIyNjYyLDIyNjU3LDIyNjU1LDIyNjQ0LDIyNjY3LDIyNjUwLDIyNjYzLDIyNjczLDIyNjcwLDIyNjQ2LDIyNjU4LDIyNjY0LDIyNjUxLDIyNjc2LDIyNjcxLDIyNzgyLDIyODkxLDIzMjYwLDIzMjc4LDIzMjY5LDIz''@;'; put 'put ''MjUzLDIzMjc0LDIzMjU4LDIzMjc3LDIzMjc1LDIzMjgzLDIzMjY2LDIzMjY0LDIzMjU5LDIzMjc2LDIzMjYyLDIzMjYxLDIzMjU3LDIzMjcyLDIzMjYzLDIzNDE1LDIzNTIwLDIzNTIzLDIzNjUxLDIzOTM4LDIzOTM2LDIzOTMzLDIzOTQyLDIzOTMwLDIzOTM3LDIzOTI3LDIzOTQ2LDIzOTQ1''@;'; put 'put ''LDIzOTQ0LDIzOTM0LDIzOTMyLDIzOTQ5LDIzOTI5LDIzOTM1LDI0MTUyLDI0MTUzLDI0MTQ3LDI0MjgwLDI0MjczLDI0Mjc5LDI0MjcwLDI0Mjg0LDI0Mjc3LDI0MjgxLDI0Mjc0LDI0Mjc2LDI0Mzg4LDI0Mzg3LDI0NDMxLDI0NTAyLDI0ODc2LDI0ODcyLDI0ODk3LDI0OTI2LDI0OTQ1LDI0''@;'; put 'put ''OTQ3LDI0OTE0LDI0OTE1LDI0OTQ2LDI0OTQwLDI0OTYwLDI0OTQ4LDI0OTE2LDI0OTU0LDI0OTIzLDI0OTMzLDI0ODkxLDI0OTM4LDI0OTI5LDI0OTE4LDI1MTI5LDI1MTI3LDI1MTMxLDI1NjQzLDI1Njc3LDI1NjkxLDI1NjkzLDI1NzE2LDI1NzE4LDI1NzE0LDI1NzE1LDI1NzI1LDI1NzE3''@;'; put 'put ''LDI1NzAyLDI1NzY2LDI1Njc4LDI1NzMwLDI1Njk0LDI1NjkyLDI1Njc1LDI1NjgzLDI1Njk2LDI1NjgwLDI1NzI3LDI1NjYzLDI1NzA4LDI1NzA3LDI1Njg5LDI1NzAxLDI1NzE5LDI1OTcxLDI2MDE2LDI2MjczLDI2MjcyLDI2MjcxLDI2MzczLDI2MzcyLDI2NDAyLDI3MDU3LDI3MDYyLDI3''@;'; put 'put ''MDgxLDI3MDQwLDI3MDg2LDI3MDMwLDI3MDU2LDI3MDUyLDI3MDY4LDI3MDI1LDI3MDMzLDI3MDIyLDI3MDQ3LDI3MDIxLDI3MDQ5LDI3MDcwLDI3MDU1LDI3MDcxLDI3MDc2LDI3MDY5LDI3MDQ0LDI3MDkyLDI3MDY1LDI3MDgyLDI3MDM0LDI3MDg3LDI3MDU5LDI3MDI3LDI3MDUwLDI3MDQx''@;'; put 'put ''LDI3MDM4LDI3MDk3LDI3MDMxLDI3MDI0LDI3MDc0LDI3MDYxLDI3MDQ1LDI3MDc4LDI3NDY2LDI3NDY5LDI3NDY3LDI3NTUwLDI3NTUxLDI3NTUyLDI3NTg3LDI3NTg4LDI3NjQ2LDI4MzY2LDI4NDA1LDI4NDAxLDI4NDE5LDI4NDUzLDI4NDA4LDI4NDcxLDI4NDExLDI4NDYyLDI4NDI1LDI4''@;'; put 'put ''NDk0LDI4NDQxLDI4NDQyLDI4NDU1LDI4NDQwLDI4NDc1LDI4NDM0LDI4Mzk3LDI4NDI2LDI4NDcwLDI4NTMxLDI4NDA5LDI4Mzk4LDI4NDYxLDI4NDgwLDI4NDY0LDI4NDc2LDI4NDY5LDI4Mzk1LDI4NDIzLDI4NDMwLDI4NDgzLDI4NDIxLDI4NDEzLDI4NDA2LDI4NDczLDI4NDQ0LDI4NDEy''@;'; put 'put ''LDI4NDc0LDI4NDQ3LDI4NDI5LDI4NDQ2LDI4NDI0LDI4NDQ5LDI5MDYzLDI5MDcyLDI5MDY1LDI5MDU2LDI5MDYxLDI5MDU4LDI5MDcxLDI5MDUxLDI5MDYyLDI5MDU3LDI5MDc5LDI5MjUyLDI5MjY3LDI5MzM1LDI5MzMzLDI5MzMxLDI5NTA3LDI5NTE3LDI5NTIxLDI5NTE2LDI5Nzk0LDI5''@;'; put 'put ''ODExLDI5ODA5LDI5ODEzLDI5ODEwLDI5Nzk5LDI5ODA2LDI5OTUyLDI5OTU0LDI5OTU1LDMwMDc3LDMwMDk2LDMwMjMwLDMwMjE2LDMwMjIwLDMwMjI5LDMwMjI1LDMwMjE4LDMwMjI4LDMwMzkyLDMwNTkzLDMwNTg4LDMwNTk3LDMwNTk0LDMwNTc0LDMwNTkyLDMwNTc1LDMwNTkwLDMwNTk1''@;'; put 'put ''LDMwODk4LDMwODkwLDMwOTAwLDMwODkzLDMwODg4LDMwODQ2LDMwODkxLDMwODc4LDMwODg1LDMwODgwLDMwODkyLDMwODgyLDMwODg0LDMxMTI4LDMxMTE0LDMxMTE1LDMxMTI2LDMxMTI1LDMxMTI0LDMxMTIzLDMxMTI3LDMxMTEyLDMxMTIyLDMxMTIwLDMxMjc1LDMxMzA2LDMxMjgwLDMx''@;'; put 'put ''Mjc5LDMxMjcyLDMxMjcwLDMxNDAwLDMxNDAzLDMxNDA0LDMxNDcwLDMxNjI0LDMxNjQ0LDMxNjI2LDMxNjMzLDMxNjMyLDMxNjM4LDMxNjI5LDMxNjI4LDMxNjQzLDMxNjMwLDMxNjIxLDMxNjQwLDIxMTI0LDMxNjQxLDMxNjUyLDMxNjE4LDMxOTMxLDMxOTM1LDMxOTMyLDMxOTMwLDMyMTY3''@;'; put 'put ''LDMyMTgzLDMyMTk0LDMyMTYzLDMyMTcwLDMyMTkzLDMyMTkyLDMyMTk3LDMyMTU3LDMyMjA2LDMyMTk2LDMyMTk4LDMyMjAzLDMyMjA0LDMyMTc1LDMyMTg1LDMyMTUwLDMyMTg4LDMyMTU5LDMyMTY2LDMyMTc0LDMyMTY5LDMyMTYxLDMyMjAxLDMyNjI3LDMyNzM4LDMyNzM5LDMyNzQxLDMy''@;'; put 'put ''NzM0LDMyODA0LDMyODYxLDMyODYwLDMzMTYxLDMzMTU4LDMzMTU1LDMzMTU5LDMzMTY1LDMzMTY0LDMzMTYzLDMzMzAxLDMzOTQzLDMzOTU2LDMzOTUzLDMzOTUxLDMzOTc4LDMzOTk4LDMzOTg2LDMzOTY0LDMzOTY2LDMzOTYzLDMzOTc3LDMzOTcyLDMzOTg1LDMzOTk3LDMzOTYyLDMzOTQ2''@;'; put 'put ''LDMzOTY5LDM0ZTMsMzM5NDksMzM5NTksMzM5NzksMzM5NTQsMzM5NDAsMzM5OTEsMzM5OTYsMzM5NDcsMzM5NjEsMzM5NjcsMzM5NjAsMzQwMDYsMzM5NDQsMzM5NzQsMzM5OTksMzM5NTIsMzQwMDcsMzQwMDQsMzQwMDIsMzQwMTEsMzM5NjgsMzM5MzcsMzQ0MDEsMzQ2MTEsMzQ1OTUsMzQ2''@;'; put 'put ''MDAsMzQ2NjcsMzQ2MjQsMzQ2MDYsMzQ1OTAsMzQ1OTMsMzQ1ODUsMzQ1ODcsMzQ2MjcsMzQ2MDQsMzQ2MjUsMzQ2MjIsMzQ2MzAsMzQ1OTIsMzQ2MTAsMzQ2MDIsMzQ2MDUsMzQ2MjAsMzQ1NzgsMzQ2MTgsMzQ2MDksMzQ2MTMsMzQ2MjYsMzQ1OTgsMzQ1OTksMzQ2MTYsMzQ1OTYsMzQ1ODYs''@;'; put 'put ''MzQ2MDgsMzQ1NzcsMzUwNjMsMzUwNDcsMzUwNTcsMzUwNTgsMzUwNjYsMzUwNzAsMzUwNTQsMzUwNjgsMzUwNjIsMzUwNjcsMzUwNTYsMzUwNTIsMzUwNTEsMzUyMjksMzUyMzMsMzUyMzEsMzUyMzAsMzUzMDUsMzUzMDcsMzUzMDQsMzU0OTksMzU0ODEsMzU0NjcsMzU0NzQsMzU0NzEsMzU0''@;'; put 'put ''NzgsMzU5MDEsMzU5NDQsMzU5NDUsMzYwNTMsMzYwNDcsMzYwNTUsMzYyNDYsMzYzNjEsMzYzNTQsMzYzNTEsMzYzNjUsMzYzNDksMzYzNjIsMzYzNTUsMzYzNTksMzYzNTgsMzYzNTcsMzYzNTAsMzYzNTIsMzYzNTYsMzY2MjQsMzY2MjUsMzY2MjIsMzY2MjEsMzcxNTUsMzcxNDgsMzcxNTIs''@;'; put 'put ''MzcxNTQsMzcxNTEsMzcxNDksMzcxNDYsMzcxNTYsMzcxNTMsMzcxNDcsMzcyNDIsMzcyMzQsMzcyNDEsMzcyMzUsMzc1NDEsMzc1NDAsMzc0OTQsMzc1MzEsMzc0OTgsMzc1MzYsMzc1MjQsMzc1NDYsMzc1MTcsMzc1NDIsMzc1MzAsMzc1NDcsMzc0OTcsMzc1MjcsMzc1MDMsMzc1MzksMzc2''@;'; put 'put ''MTQsMzc1MTgsMzc1MDYsMzc1MjUsMzc1MzgsMzc1MDEsMzc1MTIsMzc1MzcsMzc1MTQsMzc1MTAsMzc1MTYsMzc1MjksMzc1NDMsMzc1MDIsMzc1MTEsMzc1NDUsMzc1MzMsMzc1MTUsMzc0MjEsMzg1NTgsMzg1NjEsMzg2NTUsMzg3NDQsMzg3ODEsMzg3NzgsMzg3ODIsMzg3ODcsMzg3ODQs''@;'; put 'put ''Mzg3ODYsMzg3NzksMzg3ODgsMzg3ODUsMzg3ODMsMzg4NjIsMzg4NjEsMzg5MzQsMzkwODUsMzkwODYsMzkxNzAsMzkxNjgsMzkxNzUsMzkzMjUsMzkzMjQsMzkzNjMsMzkzNTMsMzkzNTUsMzkzNTQsMzkzNjIsMzkzNTcsMzkzNjcsMzk2MDEsMzk2NTEsMzk2NTUsMzk3NDIsMzk3NDMsMzk3''@;'; put 'put ''NzYsMzk3NzcsMzk3NzUsNDAxNzcsNDAxNzgsNDAxODEsNDA2MTUsMjA3MzUsMjA3MzksMjA3ODQsMjA3MjgsMjA3NDIsMjA3NDMsMjA3MjYsMjA3MzQsMjA3NDcsMjA3NDgsMjA3MzMsMjA3NDYsMjExMzEsMjExMzIsMjEyMzMsMjEyMzEsMjIwODgsMjIwODIsMjIwOTIsMjIwNjksMjIwODEs''@;'; put 'put ''MjIwOTAsMjIwODksMjIwODYsMjIxMDQsMjIxMDYsMjIwODAsMjIwNjcsMjIwNzcsMjIwNjAsMjIwNzgsMjIwNzIsMjIwNTgsMjIwNzQsMjIyOTgsMjI2OTksMjI2ODUsMjI3MDUsMjI2ODgsMjI2OTEsMjI3MDMsMjI3MDAsMjI2OTMsMjI2ODksMjI3ODMsMjMyOTUsMjMyODQsMjMyOTMsMjMy''@;'; put 'put ''ODcsMjMyODYsMjMyOTksMjMyODgsMjMyOTgsMjMyODksMjMyOTcsMjMzMDMsMjMzMDEsMjMzMTEsMjM2NTUsMjM5NjEsMjM5NTksMjM5NjcsMjM5NTQsMjM5NzAsMjM5NTUsMjM5NTcsMjM5NjgsMjM5NjQsMjM5NjksMjM5NjIsMjM5NjYsMjQxNjksMjQxNTcsMjQxNjAsMjQxNTYsMzIyNDMs''@;'; put 'put ''MjQyODMsMjQyODYsMjQyODksMjQzOTMsMjQ0OTgsMjQ5NzEsMjQ5NjMsMjQ5NTMsMjUwMDksMjUwMDgsMjQ5OTQsMjQ5NjksMjQ5ODcsMjQ5NzksMjUwMDcsMjUwMDUsMjQ5OTEsMjQ5NzgsMjUwMDIsMjQ5OTMsMjQ5NzMsMjQ5MzQsMjUwMTEsMjUxMzMsMjU3MTAsMjU3MTIsMjU3NTAsMjU3''@;'; put 'put ''NjAsMjU3MzMsMjU3NTEsMjU3NTYsMjU3NDMsMjU3MzksMjU3MzgsMjU3NDAsMjU3NjMsMjU3NTksMjU3MDQsMjU3NzcsMjU3NTIsMjU5NzQsMjU5NzgsMjU5NzcsMjU5NzksMjYwMzQsMjYwMzUsMjYyOTMsMjYyODgsMjYyODEsMjYyOTAsMjYyOTUsMjYyODIsMjYyODcsMjcxMzYsMjcxNDIs''@;'; put 'put ''MjcxNTksMjcxMDksMjcxMjgsMjcxNTcsMjcxMjEsMjcxMDgsMjcxNjgsMjcxMzUsMjcxMTYsMjcxMDYsMjcxNjMsMjcxNjUsMjcxMzQsMjcxNzUsMjcxMjIsMjcxMTgsMjcxNTYsMjcxMjcsMjcxMTEsMjcyMDAsMjcxNDQsMjcxMTAsMjcxMzEsMjcxNDksMjcxMzIsMjcxMTUsMjcxNDUsMjcx''@;'; put 'put ''NDAsMjcxNjAsMjcxNzMsMjcxNTEsMjcxMjYsMjcxNzQsMjcxNDMsMjcxMjQsMjcxNTgsMjc0NzMsMjc1NTcsMjc1NTUsMjc1NTQsMjc1NTgsMjc2NDksMjc2NDgsMjc2NDcsMjc2NTAsMjg0ODEsMjg0NTQsMjg1NDIsMjg1NTEsMjg2MTQsMjg1NjIsMjg1NTcsMjg1NTMsMjg1NTYsMjg1MTQs''@;'; put 'put ''Mjg0OTUsMjg1NDksMjg1MDYsMjg1NjYsMjg1MzQsMjg1MjQsMjg1NDYsMjg1MDEsMjg1MzAsMjg0OTgsMjg0OTYsMjg1MDMsMjg1NjQsMjg1NjMsMjg1MDksMjg0MTYsMjg1MTMsMjg1MjMsMjg1NDEsMjg1MTksMjg1NjAsMjg0OTksMjg1NTUsMjg1MjEsMjg1NDMsMjg1NjUsMjg1MTUsMjg1''@;'; put 'put ''MzUsMjg1MjIsMjg1MzksMjkxMDYsMjkxMDMsMjkwODMsMjkxMDQsMjkwODgsMjkwODIsMjkwOTcsMjkxMDksMjkwODUsMjkwOTMsMjkwODYsMjkwOTIsMjkwODksMjkwOTgsMjkwODQsMjkwOTUsMjkxMDcsMjkzMzYsMjkzMzgsMjk1MjgsMjk1MjIsMjk1MzQsMjk1MzUsMjk1MzYsMjk1MzMs''@;'; put 'put ''Mjk1MzEsMjk1MzcsMjk1MzAsMjk1MjksMjk1MzgsMjk4MzEsMjk4MzMsMjk4MzQsMjk4MzAsMjk4MjUsMjk4MjEsMjk4MjksMjk4MzIsMjk4MjAsMjk4MTcsMjk5NjAsMjk5NTksMzAwNzgsMzAyNDUsMzAyMzgsMzAyMzMsMzAyMzcsMzAyMzYsMzAyNDMsMzAyMzQsMzAyNDgsMzAyMzUsMzAz''@;'; put 'put ''NjQsMzAzNjUsMzAzNjYsMzAzNjMsMzA2MDUsMzA2MDcsMzA2MDEsMzA2MDAsMzA5MjUsMzA5MDcsMzA5MjcsMzA5MjQsMzA5MjksMzA5MjYsMzA5MzIsMzA5MjAsMzA5MTUsMzA5MTYsMzA5MjEsMzExMzAsMzExMzcsMzExMzYsMzExMzIsMzExMzgsMzExMzEsMjc1MTAsMzEyODksMzE0MTAs''@;'; put 'put ''MzE0MTIsMzE0MTEsMzE2NzEsMzE2OTEsMzE2NzgsMzE2NjAsMzE2OTQsMzE2NjMsMzE2NzMsMzE2OTAsMzE2NjksMzE5NDEsMzE5NDQsMzE5NDgsMzE5NDcsMzIyNDcsMzIyMTksMzIyMzQsMzIyMzEsMzIyMTUsMzIyMjUsMzIyNTksMzIyNTAsMzIyMzAsMzIyNDYsMzIyNDEsMzIyNDAsMzIy''@;'; put 'put ''MzgsMzIyMjMsMzI2MzAsMzI2ODQsMzI2ODgsMzI2ODUsMzI3NDksMzI3NDcsMzI3NDYsMzI3NDgsMzI3NDIsMzI3NDQsMzI4NjgsMzI4NzEsMzMxODcsMzMxODMsMzMxODIsMzMxNzMsMzMxODYsMzMxNzcsMzMxNzUsMzMzMDIsMzMzNTksMzMzNjMsMzMzNjIsMzMzNjAsMzMzNTgsMzMzNjEs''@;'; put 'put ''MzQwODQsMzQxMDcsMzQwNjMsMzQwNDgsMzQwODksMzQwNjIsMzQwNTcsMzQwNjEsMzQwNzksMzQwNTgsMzQwODcsMzQwNzYsMzQwNDMsMzQwOTEsMzQwNDIsMzQwNTYsMzQwNjAsMzQwMzYsMzQwOTAsMzQwMzQsMzQwNjksMzQwMzksMzQwMjcsMzQwMzUsMzQwNDQsMzQwNjYsMzQwMjYsMzQw''@;'; put 'put ''MjUsMzQwNzAsMzQwNDYsMzQwODgsMzQwNzcsMzQwOTQsMzQwNTAsMzQwNDUsMzQwNzgsMzQwMzgsMzQwOTcsMzQwODYsMzQwMjMsMzQwMjQsMzQwMzIsMzQwMzEsMzQwNDEsMzQwNzIsMzQwODAsMzQwOTYsMzQwNTksMzQwNzMsMzQwOTUsMzQ0MDIsMzQ2NDYsMzQ2NTksMzQ2NjAsMzQ2Nzks''@;'; put 'put ''MzQ3ODUsMzQ2NzUsMzQ2NDgsMzQ2NDQsMzQ2NTEsMzQ2NDIsMzQ2NTcsMzQ2NTAsMzQ2NDEsMzQ2NTQsMzQ2NjksMzQ2NjYsMzQ2NDAsMzQ2MzgsMzQ2NTUsMzQ2NTMsMzQ2NzEsMzQ2NjgsMzQ2ODIsMzQ2NzAsMzQ2NTIsMzQ2NjEsMzQ2MzksMzQ2ODMsMzQ2NzcsMzQ2NTgsMzQ2NjMsMzQ2''@;'; put 'put ''NjUsMzQ5MDYsMzUwNzcsMzUwODQsMzUwOTIsMzUwODMsMzUwOTUsMzUwOTYsMzUwOTcsMzUwNzgsMzUwOTQsMzUwODksMzUwODYsMzUwODEsMzUyMzQsMzUyMzYsMzUyMzUsMzUzMDksMzUzMTIsMzUzMDgsMzU1MzUsMzU1MjYsMzU1MTIsMzU1MzksMzU1MzcsMzU1NDAsMzU1NDEsMzU1MTUs''@;'; put 'put ''MzU1NDMsMzU1MTgsMzU1MjAsMzU1MjUsMzU1NDQsMzU1MjMsMzU1MTQsMzU1MTcsMzU1NDUsMzU5MDIsMzU5MTcsMzU5ODMsMzYwNjksMzYwNjMsMzYwNTcsMzYwNzIsMzYwNTgsMzYwNjEsMzYwNzEsMzYyNTYsMzYyNTIsMzYyNTcsMzYyNTEsMzYzODQsMzYzODcsMzYzODksMzYzODgsMzYz''@;'; put 'put ''OTgsMzYzNzMsMzYzNzksMzYzNzQsMzYzNjksMzYzNzcsMzYzOTAsMzYzOTEsMzYzNzIsMzYzNzAsMzYzNzYsMzYzNzEsMzYzODAsMzYzNzUsMzYzNzgsMzY2NTIsMzY2NDQsMzY2MzIsMzY2MzQsMzY2NDAsMzY2NDMsMzY2MzAsMzY2MzEsMzY5NzksMzY5NzYsMzY5NzUsMzY5NjcsMzY5NzEs''@;'; put 'put ''MzcxNjcsMzcxNjMsMzcxNjEsMzcxNjIsMzcxNzAsMzcxNTgsMzcxNjYsMzcyNTMsMzcyNTQsMzcyNTgsMzcyNDksMzcyNTAsMzcyNTIsMzcyNDgsMzc1ODQsMzc1NzEsMzc1NzIsMzc1NjgsMzc1OTMsMzc1NTgsMzc1ODMsMzc2MTcsMzc1OTksMzc1OTIsMzc2MDksMzc1OTEsMzc1OTcsMzc1''@;'; put 'put ''ODAsMzc2MTUsMzc1NzAsMzc2MDgsMzc1NzgsMzc1NzYsMzc1ODIsMzc2MDYsMzc1ODEsMzc1ODksMzc1NzcsMzc2MDAsMzc1OTgsMzc2MDcsMzc1ODUsMzc1ODcsMzc1NTcsMzc2MDEsMzc1NzQsMzc1NTYsMzgyNjgsMzgzMTYsMzgzMTUsMzgzMTgsMzgzMjAsMzg1NjQsMzg1NjIsMzg2MTEs''@;'; put 'put ''Mzg2NjEsMzg2NjQsMzg2NTgsMzg3NDYsMzg3OTQsMzg3OTgsMzg3OTIsMzg4NjQsMzg4NjMsMzg5NDIsMzg5NDEsMzg5NTAsMzg5NTMsMzg5NTIsMzg5NDQsMzg5MzksMzg5NTEsMzkwOTAsMzkxNzYsMzkxNjIsMzkxODUsMzkxODgsMzkxOTAsMzkxOTEsMzkxODksMzkzODgsMzkzNzMsMzkz''@;'; put 'put ''NzUsMzkzNzksMzkzODAsMzkzNzQsMzkzNjksMzkzODIsMzkzODQsMzkzNzEsMzkzODMsMzkzNzIsMzk2MDMsMzk2NjAsMzk2NTksMzk2NjcsMzk2NjYsMzk2NjUsMzk3NTAsMzk3NDcsMzk3ODMsMzk3OTYsMzk3OTMsMzk3ODIsMzk3OTgsMzk3OTcsMzk3OTIsMzk3ODQsMzk3ODAsMzk3ODgs''@;'; put 'put ''NDAxODgsNDAxODYsNDAxODksNDAxOTEsNDAxODMsNDAxOTksNDAxOTIsNDAxODUsNDAxODcsNDAyMDAsNDAxOTcsNDAxOTYsNDA1NzksNDA2NTksNDA3MTksNDA3MjAsMjA3NjQsMjA3NTUsMjA3NTksMjA3NjIsMjA3NTMsMjA5NTgsMjEzMDAsMjE0NzMsMjIxMjgsMjIxMTIsMjIxMjYsMjIx''@;'; put 'put ''MzEsMjIxMTgsMjIxMTUsMjIxMjUsMjIxMzAsMjIxMTAsMjIxMzUsMjIzMDAsMjIyOTksMjI3MjgsMjI3MTcsMjI3MjksMjI3MTksMjI3MTQsMjI3MjIsMjI3MTYsMjI3MjYsMjMzMTksMjMzMjEsMjMzMjMsMjMzMjksMjMzMTYsMjMzMTUsMjMzMTIsMjMzMTgsMjMzMzYsMjMzMjIsMjMzMjgs''@;'; put 'put ''MjMzMjYsMjM1MzUsMjM5ODAsMjM5ODUsMjM5NzcsMjM5NzUsMjM5ODksMjM5ODQsMjM5ODIsMjM5NzgsMjM5NzYsMjM5ODYsMjM5ODEsMjM5ODMsMjM5ODgsMjQxNjcsMjQxNjgsMjQxNjYsMjQxNzUsMjQyOTcsMjQyOTUsMjQyOTQsMjQyOTYsMjQyOTMsMjQzOTUsMjQ1MDgsMjQ5ODksMjVl''@;'; put 'put ''MywyNDk4MiwyNTAyOSwyNTAxMiwyNTAzMCwyNTAyNSwyNTAzNiwyNTAxOCwyNTAyMywyNTAxNiwyNDk3MiwyNTgxNSwyNTgxNCwyNTgwOCwyNTgwNywyNTgwMSwyNTc4OSwyNTczNywyNTc5NSwyNTgxOSwyNTg0MywyNTgxNywyNTkwNywyNTk4MywyNTk4MCwyNjAxOCwyNjMxMiwyNjMwMiwy''@;'; put 'put ''NjMwNCwyNjMxNCwyNjMxNSwyNjMxOSwyNjMwMSwyNjI5OSwyNjI5OCwyNjMxNiwyNjQwMywyNzE4OCwyNzIzOCwyNzIwOSwyNzIzOSwyNzE4NiwyNzI0MCwyNzE5OCwyNzIyOSwyNzI0NSwyNzI1NCwyNzIyNywyNzIxNywyNzE3NiwyNzIyNiwyNzE5NSwyNzE5OSwyNzIwMSwyNzI0MiwyNzIz''@;'; put 'put ''NiwyNzIxNiwyNzIxNSwyNzIyMCwyNzI0NywyNzI0MSwyNzIzMiwyNzE5NiwyNzIzMCwyNzIyMiwyNzIyMSwyNzIxMywyNzIxNCwyNzIwNiwyNzQ3NywyNzQ3NiwyNzQ3OCwyNzU1OSwyNzU2MiwyNzU2MywyNzU5MiwyNzU5MSwyNzY1MiwyNzY1MSwyNzY1NCwyODU4OSwyODYxOSwyODU3OSwy''@;'; put 'put ''ODYxNSwyODYwNCwyODYyMiwyODYxNiwyODUxMCwyODYxMiwyODYwNSwyODU3NCwyODYxOCwyODU4NCwyODY3NiwyODU4MSwyODU5MCwyODYwMiwyODU4OCwyODU4NiwyODYyMywyODYwNywyODYwMCwyODU3OCwyODYxNywyODU4NywyODYyMSwyODU5MSwyODU5NCwyODU5MiwyOTEyNSwyOTEy''@;'; put 'put ''MiwyOTExOSwyOTExMiwyOTE0MiwyOTEyMCwyOTEyMSwyOTEzMSwyOTE0MCwyOTEzMCwyOTEyNywyOTEzNSwyOTExNywyOTE0NCwyOTExNiwyOTEyNiwyOTE0NiwyOTE0NywyOTM0MSwyOTM0MiwyOTU0NSwyOTU0MiwyOTU0MywyOTU0OCwyOTU0MSwyOTU0NywyOTU0NiwyOTgyMywyOTg1MCwy''@;'; put 'put ''OTg1NiwyOTg0NCwyOTg0MiwyOTg0NSwyOTg1NywyOTk2MywzMDA4MCwzMDI1NSwzMDI1MywzMDI1NywzMDI2OSwzMDI1OSwzMDI2OCwzMDI2MSwzMDI1OCwzMDI1NiwzMDM5NSwzMDQzOCwzMDYxOCwzMDYyMSwzMDYyNSwzMDYyMCwzMDYxOSwzMDYyNiwzMDYyNywzMDYxMywzMDYxNywzMDYx''@;'; put 'put ''NSwzMDk0MSwzMDk1MywzMDk0OSwzMDk1NCwzMDk0MiwzMDk0NywzMDkzOSwzMDk0NSwzMDk0NiwzMDk1NywzMDk0MywzMDk0NCwzMTE0MCwzMTMwMCwzMTMwNCwzMTMwMywzMTQxNCwzMTQxNiwzMTQxMywzMTQwOSwzMTQxNSwzMTcxMCwzMTcxNSwzMTcxOSwzMTcwOSwzMTcwMSwzMTcxNywz''@;'; put 'put ''MTcwNiwzMTcyMCwzMTczNywzMTcwMCwzMTcyMiwzMTcxNCwzMTcwOCwzMTcyMywzMTcwNCwzMTcxMSwzMTk1NCwzMTk1NiwzMTk1OSwzMTk1MiwzMTk1MywzMjI3NCwzMjI4OSwzMjI3OSwzMjI2OCwzMjI4NywzMjI4OCwzMjI3NSwzMjI3MCwzMjI4NCwzMjI3NywzMjI4MiwzMjI5MCwzMjI2''@;'; put 'put ''NywzMjI3MSwzMjI3OCwzMjI2OSwzMjI3NiwzMjI5MywzMjI5MiwzMjU3OSwzMjYzNSwzMjYzNiwzMjYzNCwzMjY4OSwzMjc1MSwzMjgxMCwzMjgwOSwzMjg3NiwzMzIwMSwzMzE5MCwzMzE5OCwzMzIwOSwzMzIwNSwzMzE5NSwzMzIwMCwzMzE5NiwzMzIwNCwzMzIwMiwzMzIwNywzMzE5MSwz''@;'; put 'put ''MzI2NiwzMzM2NSwzMzM2NiwzMzM2NywzNDEzNCwzNDExNywzNDE1NSwzNDEyNSwzNDEzMSwzNDE0NSwzNDEzNiwzNDExMiwzNDExOCwzNDE0OCwzNDExMywzNDE0NiwzNDExNiwzNDEyOSwzNDExOSwzNDE0NywzNDExMCwzNDEzOSwzNDE2MSwzNDEyNiwzNDE1OCwzNDE2NSwzNDEzMywzNDE1''@;'; put 'put ''MSwzNDE0NCwzNDE4OCwzNDE1MCwzNDE0MSwzNDEzMiwzNDE0OSwzNDE1NiwzNDQwMywzNDQwNSwzNDQwNCwzNDcxNSwzNDcwMywzNDcxMSwzNDcwNywzNDcwNiwzNDY5NiwzNDY4OSwzNDcxMCwzNDcxMiwzNDY4MSwzNDY5NSwzNDcyMywzNDY5MywzNDcwNCwzNDcwNSwzNDcxNywzNDY5Miwz''@;'; put 'put ''NDcwOCwzNDcxNiwzNDcxNCwzNDY5NywzNTEwMiwzNTExMCwzNTEyMCwzNTExNywzNTExOCwzNTExMSwzNTEyMSwzNTEwNiwzNTExMywzNTEwNywzNTExOSwzNTExNiwzNTEwMywzNTMxMywzNTU1MiwzNTU1NCwzNTU3MCwzNTU3MiwzNTU3MywzNTU0OSwzNTYwNCwzNTU1NiwzNTU1MSwzNTU2''@;'; put 'put ''OCwzNTUyOCwzNTU1MCwzNTU1MywzNTU2MCwzNTU4MywzNTU2NywzNTU3OSwzNTk4NSwzNTk4NiwzNTk4NCwzNjA4NSwzNjA3OCwzNjA4MSwzNjA4MCwzNjA4MywzNjIwNCwzNjIwNiwzNjI2MSwzNjI2MywzNjQwMywzNjQxNCwzNjQwOCwzNjQxNiwzNjQyMSwzNjQwNiwzNjQxMiwzNjQxMywz''@;'; put 'put ''NjQxNywzNjQwMCwzNjQxNSwzNjU0MSwzNjY2MiwzNjY1NCwzNjY2MSwzNjY1OCwzNjY2NSwzNjY2MywzNjY2MCwzNjk4MiwzNjk4NSwzNjk4NywzNjk5OCwzNzExNCwzNzE3MSwzNzE3MywzNzE3NCwzNzI2NywzNzI2NCwzNzI2NSwzNzI2MSwzNzI2MywzNzY3MSwzNzY2MiwzNzY0MCwzNzY2''@;'; put 'put ''MywzNzYzOCwzNzY0NywzNzc1NCwzNzY4OCwzNzY5MiwzNzY1OSwzNzY2NywzNzY1MCwzNzYzMywzNzcwMiwzNzY3NywzNzY0NiwzNzY0NSwzNzU3OSwzNzY2MSwzNzYyNiwzNzY2OSwzNzY1MSwzNzYyNSwzNzYyMywzNzY4NCwzNzYzNCwzNzY2OCwzNzYzMSwzNzY3MywzNzY4OSwzNzY4NSwz''@;'; put 'put ''NzY3NCwzNzY1MiwzNzY0NCwzNzY0MywzNzYzMCwzNzY0MSwzNzYzMiwzNzYyNywzNzY1NCwzODMzMiwzODM0OSwzODMzNCwzODMyOSwzODMzMCwzODMyNiwzODMzNSwzODMyNSwzODMzMywzODU2OSwzODYxMiwzODY2NywzODY3NCwzODY3MiwzODgwOSwzODgwNywzODgwNCwzODg5NiwzODkw''@;'; put 'put ''NCwzODk2NSwzODk1OSwzODk2MiwzOTIwNCwzOTE5OSwzOTIwNywzOTIwOSwzOTMyNiwzOTQwNiwzOTQwNCwzOTM5NywzOTM5NiwzOTQwOCwzOTM5NSwzOTQwMiwzOTQwMSwzOTM5OSwzOTYwOSwzOTYxNSwzOTYwNCwzOTYxMSwzOTY3MCwzOTY3NCwzOTY3MywzOTY3MSwzOTczMSwzOTgwOCwz''@;'; put 'put ''OTgxMywzOTgxNSwzOTgwNCwzOTgwNiwzOTgwMywzOTgxMCwzOTgyNywzOTgyNiwzOTgyNCwzOTgwMiwzOTgyOSwzOTgwNSwzOTgxNiw0MDIyOSw0MDIxNSw0MDIyNCw0MDIyMiw0MDIxMiw0MDIzMyw0MDIyMSw0MDIxNiw0MDIyNiw0MDIwOCw0MDIxNyw0MDIyMyw0MDU4NCw0MDU4Miw0MDU4''@;'; put 'put ''Myw0MDYyMiw0MDYyMSw0MDY2MSw0MDY2Miw0MDY5OCw0MDcyMiw0MDc2NSwyMDc3NCwyMDc3MywyMDc3MCwyMDc3MiwyMDc2OCwyMDc3NywyMTIzNiwyMjE2MywyMjE1NiwyMjE1NywyMjE1MCwyMjE0OCwyMjE0NywyMjE0MiwyMjE0NiwyMjE0MywyMjE0NSwyMjc0MiwyMjc0MCwyMjczNSwy''@;'; put 'put ''MjczOCwyMzM0MSwyMzMzMywyMzM0NiwyMzMzMSwyMzM0MCwyMzMzNSwyMzMzNCwyMzM0MywyMzM0MiwyMzQxOSwyMzUzNywyMzUzOCwyMzk5MSwyNDE3MiwyNDE3MCwyNDUxMCwyNDUwNywyNTAyNywyNTAxMywyNTAyMCwyNTA2MywyNTA1NiwyNTA2MSwyNTA2MCwyNTA2NCwyNTA1NCwyNTgz''@;'; put 'put ''OSwyNTgzMywyNTgyNywyNTgzNSwyNTgyOCwyNTgzMiwyNTk4NSwyNTk4NCwyNjAzOCwyNjA3NCwyNjMyMiwyNzI3NywyNzI4NiwyNzI2NSwyNzMwMSwyNzI3MywyNzI5NSwyNzI5MSwyNzI5NywyNzI5NCwyNzI3MSwyNzI4MywyNzI3OCwyNzI4NSwyNzI2NywyNzMwNCwyNzMwMCwyNzI4MSwy''@;'; put 'put ''NzI2MywyNzMwMiwyNzI5MCwyNzI2OSwyNzI3NiwyNzI4MiwyNzQ4MywyNzU2NSwyNzY1NywyODYyMCwyODU4NSwyODY2MCwyODYyOCwyODY0MywyODYzNiwyODY1MywyODY0NywyODY0NiwyODYzOCwyODY1OCwyODYzNywyODY0MiwyODY0OCwyOTE1MywyOTE2OSwyOTE2MCwyOTE3MCwyOTE1''@;'; put 'put ''NiwyOTE2OCwyOTE1NCwyOTU1NSwyOTU1MCwyOTU1MSwyOTg0NywyOTg3NCwyOTg2NywyOTg0MCwyOTg2NiwyOTg2OSwyOTg3MywyOTg2MSwyOTg3MSwyOTk2OCwyOTk2OSwyOTk3MCwyOTk2NywzMDA4NCwzMDI3NSwzMDI4MCwzMDI4MSwzMDI3OSwzMDM3MiwzMDQ0MSwzMDY0NSwzMDYzNSwz''@;'; put 'put ''MDY0MiwzMDY0NywzMDY0NiwzMDY0NCwzMDY0MSwzMDYzMiwzMDcwNCwzMDk2MywzMDk3MywzMDk3OCwzMDk3MSwzMDk3MiwzMDk2MiwzMDk4MSwzMDk2OSwzMDk3NCwzMDk4MCwzMTE0NywzMTE0NCwzMTMyNCwzMTMyMywzMTMxOCwzMTMyMCwzMTMxNiwzMTMyMiwzMTQyMiwzMTQyNCwzMTQy''@;'; put 'put ''NSwzMTc0OSwzMTc1OSwzMTczMCwzMTc0NCwzMTc0MywzMTczOSwzMTc1OCwzMTczMiwzMTc1NSwzMTczMSwzMTc0NiwzMTc1MywzMTc0NywzMTc0NSwzMTczNiwzMTc0MSwzMTc1MCwzMTcyOCwzMTcyOSwzMTc2MCwzMTc1NCwzMTk3NiwzMjMwMSwzMjMxNiwzMjMyMiwzMjMwNywzODk4NCwz''@;'; put 'put ''MjMxMiwzMjI5OCwzMjMyOSwzMjMyMCwzMjMyNywzMjI5NywzMjMzMiwzMjMwNCwzMjMxNSwzMjMxMCwzMjMyNCwzMjMxNCwzMjU4MSwzMjYzOSwzMjYzOCwzMjYzNywzMjc1NiwzMjc1NCwzMjgxMiwzMzIxMSwzMzIyMCwzMzIyOCwzMzIyNiwzMzIyMSwzMzIyMywzMzIxMiwzMzI1NywzMzM3''@;'; put 'put ''MSwzMzM3MCwzMzM3MiwzNDE3OSwzNDE3NiwzNDE5MSwzNDIxNSwzNDE5NywzNDIwOCwzNDE4NywzNDIxMSwzNDE3MSwzNDIxMiwzNDIwMiwzNDIwNiwzNDE2NywzNDE3MiwzNDE4NSwzNDIwOSwzNDE3MCwzNDE2OCwzNDEzNSwzNDE5MCwzNDE5OCwzNDE4MiwzNDE4OSwzNDIwMSwzNDIwNSwz''@;'; put 'put ''NDE3NywzNDIxMCwzNDE3OCwzNDE4NCwzNDE4MSwzNDE2OSwzNDE2NiwzNDIwMCwzNDE5MiwzNDIwNywzNDQwOCwzNDc1MCwzNDczMCwzNDczMywzNDc1NywzNDczNiwzNDczMiwzNDc0NSwzNDc0MSwzNDc0OCwzNDczNCwzNDc2MSwzNDc1NSwzNDc1NCwzNDc2NCwzNDc0MywzNDczNSwzNDc1''@;'; put 'put ''NiwzNDc2MiwzNDc0MCwzNDc0MiwzNDc1MSwzNDc0NCwzNDc0OSwzNDc4MiwzNDczOCwzNTEyNSwzNTEyMywzNTEzMiwzNTEzNCwzNTEzNywzNTE1NCwzNTEyNywzNTEzOCwzNTI0NSwzNTI0NywzNTI0NiwzNTMxNCwzNTMxNSwzNTYxNCwzNTYwOCwzNTYwNiwzNTYwMSwzNTU4OSwzNTU5NSwz''@;'; put 'put ''NTYxOCwzNTU5OSwzNTYwMiwzNTYwNSwzNTU5MSwzNTU5NywzNTU5MiwzNTU5MCwzNTYxMiwzNTYwMywzNTYxMCwzNTkxOSwzNTk1MiwzNTk1NCwzNTk1MywzNTk1MSwzNTk4OSwzNTk4OCwzNjA4OSwzNjIwNywzNjQzMCwzNjQyOSwzNjQzNSwzNjQzMiwzNjQyOCwzNjQyMywzNjY3NSwzNjY3''@;'; put 'put ''MiwzNjk5NywzNjk5MCwzNzE3NiwzNzI3NCwzNzI4MiwzNzI3NSwzNzI3MywzNzI3OSwzNzI4MSwzNzI3NywzNzI4MCwzNzc5MywzNzc2MywzNzgwNywzNzczMiwzNzcxOCwzNzcwMywzNzc1NiwzNzcyMCwzNzcyNCwzNzc1MCwzNzcwNSwzNzcxMiwzNzcxMywzNzcyOCwzNzc0MSwzNzc3NSwz''@;'; put 'put ''NzcwOCwzNzczOCwzNzc1MywzNzcxOSwzNzcxNywzNzcxNCwzNzcxMSwzNzc0NSwzNzc1MSwzNzc1NSwzNzcyOSwzNzcyNiwzNzczMSwzNzczNSwzNzc2MCwzNzcxMCwzNzcyMSwzODM0MywzODMzNiwzODM0NSwzODMzOSwzODM0MSwzODMyNywzODU3NCwzODU3NiwzODU3MiwzODY4OCwzODY4''@;'; put 'put ''NywzODY4MCwzODY4NSwzODY4MSwzODgxMCwzODgxNywzODgxMiwzODgxNCwzODgxMywzODg2OSwzODg2OCwzODg5NywzODk3NywzODk4MCwzODk4NiwzODk4NSwzODk4MSwzODk3OSwzOTIwNSwzOTIxMSwzOTIxMiwzOTIxMCwzOTIxOSwzOTIxOCwzOTIxNSwzOTIxMywzOTIxNywzOTIxNiwz''@;'; put 'put ''OTMyMCwzOTMzMSwzOTMyOSwzOTQyNiwzOTQxOCwzOTQxMiwzOTQxNSwzOTQxNywzOTQxNiwzOTQxNCwzOTQxOSwzOTQyMSwzOTQyMiwzOTQyMCwzOTQyNywzOTYxNCwzOTY3OCwzOTY3NywzOTY4MSwzOTY3NiwzOTc1MiwzOTgzNCwzOTg0OCwzOTgzOCwzOTgzNSwzOTg0NiwzOTg0MSwzOTg0''@;'; put 'put ''NSwzOTg0NCwzOTgxNCwzOTg0MiwzOTg0MCwzOTg1NSw0MDI0Myw0MDI1Nyw0MDI5NSw0MDI0Niw0MDIzOCw0MDIzOSw0MDI0MSw0MDI0OCw0MDI0MCw0MDI2MSw0MDI1OCw0MDI1OSw0MDI1NCw0MDI0Nyw0MDI1Niw0MDI1MywzMjc1Nyw0MDIzNyw0MDU4Niw0MDU4NSw0MDU4OSw0MDYyNCw0''@;'; put 'put ''MDY0OCw0MDY2Niw0MDY5OSw0MDcwMyw0MDc0MCw0MDczOSw0MDczOCw0MDc4OCw0MDg2NCwyMDc4NSwyMDc4MSwyMDc4MiwyMjE2OCwyMjE3MiwyMjE2NywyMjE3MCwyMjE3MywyMjE2OSwyMjg5NiwyMzM1NiwyMzY1NywyMzY1OCwyNGUzLDI0MTczLDI0MTc0LDI1MDQ4LDI1MDU1LDI1MDY5''@;'; put 'put ''LDI1MDcwLDI1MDczLDI1MDY2LDI1MDcyLDI1MDY3LDI1MDQ2LDI1MDY1LDI1ODU1LDI1ODYwLDI1ODUzLDI1ODQ4LDI1ODU3LDI1ODU5LDI1ODUyLDI2MDA0LDI2MDc1LDI2MzMwLDI2MzMxLDI2MzI4LDI3MzMzLDI3MzIxLDI3MzI1LDI3MzYxLDI3MzM0LDI3MzIyLDI3MzE4LDI3MzE5LDI3''@;'; put 'put ''MzM1LDI3MzE2LDI3MzA5LDI3NDg2LDI3NTkzLDI3NjU5LDI4Njc5LDI4Njg0LDI4Njg1LDI4NjczLDI4Njc3LDI4NjkyLDI4Njg2LDI4NjcxLDI4NjcyLDI4NjY3LDI4NzEwLDI4NjY4LDI4NjYzLDI4NjgyLDI5MTg1LDI5MTgzLDI5MTc3LDI5MTg3LDI5MTgxLDI5NTU4LDI5ODgwLDI5ODg4''@;'; put 'put ''LDI5ODc3LDI5ODg5LDI5ODg2LDI5ODc4LDI5ODgzLDI5ODkwLDI5OTcyLDI5OTcxLDMwMzAwLDMwMzA4LDMwMjk3LDMwMjg4LDMwMjkxLDMwMjk1LDMwMjk4LDMwMzc0LDMwMzk3LDMwNDQ0LDMwNjU4LDMwNjUwLDMwOTc1LDMwOTg4LDMwOTk1LDMwOTk2LDMwOTg1LDMwOTkyLDMwOTk0LDMw''@;'; put 'put ''OTkzLDMxMTQ5LDMxMTQ4LDMxMzI3LDMxNzcyLDMxNzg1LDMxNzY5LDMxNzc2LDMxNzc1LDMxNzg5LDMxNzczLDMxNzgyLDMxNzg0LDMxNzc4LDMxNzgxLDMxNzkyLDMyMzQ4LDMyMzM2LDMyMzQyLDMyMzU1LDMyMzQ0LDMyMzU0LDMyMzUxLDMyMzM3LDMyMzUyLDMyMzQzLDMyMzM5LDMyNjkz''@;'; put 'put ''LDMyNjkxLDMyNzU5LDMyNzYwLDMyODg1LDMzMjMzLDMzMjM0LDMzMjMyLDMzMzc1LDMzMzc0LDM0MjI4LDM0MjQ2LDM0MjQwLDM0MjQzLDM0MjQyLDM0MjI3LDM0MjI5LDM0MjM3LDM0MjQ3LDM0MjQ0LDM0MjM5LDM0MjUxLDM0MjU0LDM0MjQ4LDM0MjQ1LDM0MjI1LDM0MjMwLDM0MjU4LDM0''@;'; put 'put ''MzQwLDM0MjMyLDM0MjMxLDM0MjM4LDM0NDA5LDM0NzkxLDM0NzkwLDM0Nzg2LDM0Nzc5LDM0Nzk1LDM0Nzk0LDM0Nzg5LDM0NzgzLDM0ODAzLDM0Nzg4LDM0NzcyLDM0NzgwLDM0NzcxLDM0Nzk3LDM0Nzc2LDM0Nzg3LDM0NzI0LDM0Nzc1LDM0Nzc3LDM0ODE3LDM0ODA0LDM0NzkyLDM0Nzgx''@;'; put 'put ''LDM1MTU1LDM1MTQ3LDM1MTUxLDM1MTQ4LDM1MTQyLDM1MTUyLDM1MTUzLDM1MTQ1LDM1NjI2LDM1NjIzLDM1NjE5LDM1NjM1LDM1NjMyLDM1NjM3LDM1NjU1LDM1NjMxLDM1NjQ0LDM1NjQ2LDM1NjMzLDM1NjIxLDM1NjM5LDM1NjIyLDM1NjM4LDM1NjMwLDM1NjIwLDM1NjQzLDM1NjQ1LDM1''@;'; put 'put ''NjQyLDM1OTA2LDM1OTU3LDM1OTkzLDM1OTkyLDM1OTkxLDM2MDk0LDM2MTAwLDM2MDk4LDM2MDk2LDM2NDQ0LDM2NDUwLDM2NDQ4LDM2NDM5LDM2NDM4LDM2NDQ2LDM2NDUzLDM2NDU1LDM2NDQzLDM2NDQyLDM2NDQ5LDM2NDQ1LDM2NDU3LDM2NDM2LDM2Njc4LDM2Njc5LDM2NjgwLDM2Njgz''@;'; put 'put ''LDM3MTYwLDM3MTc4LDM3MTc5LDM3MTgyLDM3Mjg4LDM3Mjg1LDM3Mjg3LDM3Mjk1LDM3MjkwLDM3ODEzLDM3NzcyLDM3Nzc4LDM3ODE1LDM3Nzg3LDM3Nzg5LDM3NzY5LDM3Nzk5LDM3Nzc0LDM3ODAyLDM3NzkwLDM3Nzk4LDM3NzgxLDM3NzY4LDM3Nzg1LDM3NzkxLDM3NzczLDM3ODA5LDM3''@;'; put 'put ''Nzc3LDM3ODEwLDM3Nzk2LDM3ODAwLDM3ODEyLDM3Nzk1LDM3Nzk3LDM4MzU0LDM4MzU1LDM4MzUzLDM4NTc5LDM4NjE1LDM4NjE4LDI0MDAyLDM4NjIzLDM4NjE2LDM4NjIxLDM4NjkxLDM4NjkwLDM4NjkzLDM4ODI4LDM4ODMwLDM4ODI0LDM4ODI3LDM4ODIwLDM4ODI2LDM4ODE4LDM4ODIx''@;'; put 'put ''LDM4ODcxLDM4ODczLDM4ODcwLDM4ODcyLDM4OTA2LDM4OTkyLDM4OTkzLDM4OTk0LDM5MDk2LDM5MjMzLDM5MjI4LDM5MjI2LDM5NDM5LDM5NDM1LDM5NDMzLDM5NDM3LDM5NDI4LDM5NDQxLDM5NDM0LDM5NDI5LDM5NDMxLDM5NDMwLDM5NjE2LDM5NjQ0LDM5Njg4LDM5Njg0LDM5Njg1LDM5''@;'; put 'put ''NzIxLDM5NzMzLDM5NzU0LDM5NzU2LDM5NzU1LDM5ODc5LDM5ODc4LDM5ODc1LDM5ODcxLDM5ODczLDM5ODYxLDM5ODY0LDM5ODkxLDM5ODYyLDM5ODc2LDM5ODY1LDM5ODY5LDQwMjg0LDQwMjc1LDQwMjcxLDQwMjY2LDQwMjgzLDQwMjY3LDQwMjgxLDQwMjc4LDQwMjY4LDQwMjc5LDQwMjc0''@;'; put 'put ''LDQwMjc2LDQwMjg3LDQwMjgwLDQwMjgyLDQwNTkwLDQwNTg4LDQwNjcxLDQwNzA1LDQwNzA0LDQwNzI2LDQwNzQxLDQwNzQ3LDQwNzQ2LDQwNzQ1LDQwNzQ0LDQwNzgwLDQwNzg5LDIwNzg4LDIwNzg5LDIxMTQyLDIxMjM5LDIxNDI4LDIyMTg3LDIyMTg5LDIyMTgyLDIyMTgzLDIyMTg2LDIy''@;'; put 'put ''MTg4LDIyNzQ2LDIyNzQ5LDIyNzQ3LDIyODAyLDIzMzU3LDIzMzU4LDIzMzU5LDI0MDAzLDI0MTc2LDI0NTExLDI1MDgzLDI1ODYzLDI1ODcyLDI1ODY5LDI1ODY1LDI1ODY4LDI1ODcwLDI1OTg4LDI2MDc4LDI2MDc3LDI2MzM0LDI3MzY3LDI3MzYwLDI3MzQwLDI3MzQ1LDI3MzUzLDI3MzM5''@;'; put 'put ''LDI3MzU5LDI3MzU2LDI3MzQ0LDI3MzcxLDI3MzQzLDI3MzQxLDI3MzU4LDI3NDg4LDI3NTY4LDI3NjYwLDI4Njk3LDI4NzExLDI4NzA0LDI4Njk0LDI4NzE1LDI4NzA1LDI4NzA2LDI4NzA3LDI4NzEzLDI4Njk1LDI4NzA4LDI4NzAwLDI4NzE0LDI5MTk2LDI5MTk0LDI5MTkxLDI5MTg2LDI5''@;'; put 'put ''MTg5LDI5MzQ5LDI5MzUwLDI5MzQ4LDI5MzQ3LDI5MzQ1LDI5ODk5LDI5ODkzLDI5ODc5LDI5ODkxLDI5OTc0LDMwMzA0LDMwNjY1LDMwNjY2LDMwNjYwLDMwNzA1LDMxMDA1LDMxMDAzLDMxMDA5LDMxMDA0LDMwOTk5LDMxMDA2LDMxMTUyLDMxMzM1LDMxMzM2LDMxNzk1LDMxODA0LDMxODAx''@;'; put 'put ''LDMxNzg4LDMxODAzLDMxOTgwLDMxOTc4LDMyMzc0LDMyMzczLDMyMzc2LDMyMzY4LDMyMzc1LDMyMzY3LDMyMzc4LDMyMzcwLDMyMzcyLDMyMzYwLDMyNTg3LDMyNTg2LDMyNjQzLDMyNjQ2LDMyNjk1LDMyNzY1LDMyNzY2LDMyODg4LDMzMjM5LDMzMjM3LDMzMzgwLDMzMzc3LDMzMzc5LDM0''@;'; put 'put ''MjgzLDM0Mjg5LDM0Mjg1LDM0MjY1LDM0MjczLDM0MjgwLDM0MjY2LDM0MjYzLDM0Mjg0LDM0MjkwLDM0Mjk2LDM0MjY0LDM0MjcxLDM0Mjc1LDM0MjY4LDM0MjU3LDM0Mjg4LDM0Mjc4LDM0Mjg3LDM0MjcwLDM0Mjc0LDM0ODE2LDM0ODEwLDM0ODE5LDM0ODA2LDM0ODA3LDM0ODI1LDM0ODI4''@;'; put 'put ''LDM0ODI3LDM0ODIyLDM0ODEyLDM0ODI0LDM0ODE1LDM0ODI2LDM0ODE4LDM1MTcwLDM1MTYyLDM1MTYzLDM1MTU5LDM1MTY5LDM1MTY0LDM1MTYwLDM1MTY1LDM1MTYxLDM1MjA4LDM1MjU1LDM1MjU0LDM1MzE4LDM1NjY0LDM1NjU2LDM1NjU4LDM1NjQ4LDM1NjY3LDM1NjcwLDM1NjY4LDM1''@;'; put 'put ''NjU5LDM1NjY5LDM1NjY1LDM1NjUwLDM1NjY2LDM1NjcxLDM1OTA3LDM1OTU5LDM1OTU4LDM1OTk0LDM2MTAyLDM2MTAzLDM2MTA1LDM2MjY4LDM2MjY2LDM2MjY5LDM2MjY3LDM2NDYxLDM2NDcyLDM2NDY3LDM2NDU4LDM2NDYzLDM2NDc1LDM2NTQ2LDM2NjkwLDM2Njg5LDM2Njg3LDM2Njg4''@;'; put 'put ''LDM2NjkxLDM2Nzg4LDM3MTg0LDM3MTgzLDM3Mjk2LDM3MjkzLDM3ODU0LDM3ODMxLDM3ODM5LDM3ODI2LDM3ODUwLDM3ODQwLDM3ODgxLDM3ODY4LDM3ODM2LDM3ODQ5LDM3ODAxLDM3ODYyLDM3ODM0LDM3ODQ0LDM3ODcwLDM3ODU5LDM3ODQ1LDM3ODI4LDM3ODM4LDM3ODI0LDM3ODQyLDM3''@;'; put 'put ''ODYzLDM4MjY5LDM4MzYyLDM4MzYzLDM4NjI1LDM4Njk3LDM4Njk5LDM4NzAwLDM4Njk2LDM4Njk0LDM4ODM1LDM4ODM5LDM4ODM4LDM4ODc3LDM4ODc4LDM4ODc5LDM5MDA0LDM5MDAxLDM5MDA1LDM4OTk5LDM5MTAzLDM5MTAxLDM5MDk5LDM5MTAyLDM5MjQwLDM5MjM5LDM5MjM1LDM5MzM0''@;'; put 'put ''LDM5MzM1LDM5NDUwLDM5NDQ1LDM5NDYxLDM5NDUzLDM5NDYwLDM5NDUxLDM5NDU4LDM5NDU2LDM5NDYzLDM5NDU5LDM5NDU0LDM5NDUyLDM5NDQ0LDM5NjE4LDM5NjkxLDM5NjkwLDM5Njk0LDM5NjkyLDM5NzM1LDM5OTE0LDM5OTE1LDM5OTA0LDM5OTAyLDM5OTA4LDM5OTEwLDM5OTA2LDM5''@;'; put 'put ''OTIwLDM5ODkyLDM5ODk1LDM5OTE2LDM5OTAwLDM5ODk3LDM5OTA5LDM5ODkzLDM5OTA1LDM5ODk4LDQwMzExLDQwMzIxLDQwMzMwLDQwMzI0LDQwMzI4LDQwMzA1LDQwMzIwLDQwMzEyLDQwMzI2LDQwMzMxLDQwMzMyLDQwMzE3LDQwMjk5LDQwMzA4LDQwMzA5LDQwMzA0LDQwMjk3LDQwMzI1''@;'; put 'put ''LDQwMzA3LDQwMzE1LDQwMzIyLDQwMzAzLDQwMzEzLDQwMzE5LDQwMzI3LDQwMjk2LDQwNTk2LDQwNTkzLDQwNjQwLDQwNzAwLDQwNzQ5LDQwNzY4LDQwNzY5LDQwNzgxLDQwNzkwLDQwNzkxLDQwNzkyLDIxMzAzLDIyMTk0LDIyMTk3LDIyMTk1LDIyNzU1LDIzMzY1LDI0MDA2LDI0MDA3LDI0''@;'; put 'put ''MzAyLDI0MzAzLDI0NTEyLDI0NTEzLDI1MDgxLDI1ODc5LDI1ODc4LDI1ODc3LDI1ODc1LDI2MDc5LDI2MzQ0LDI2MzM5LDI2MzQwLDI3Mzc5LDI3Mzc2LDI3MzcwLDI3MzY4LDI3Mzg1LDI3Mzc3LDI3Mzc0LDI3Mzc1LDI4NzMyLDI4NzI1LDI4NzE5LDI4NzI3LDI4NzI0LDI4NzIxLDI4NzM4''@;'; put 'put ''LDI4NzI4LDI4NzM1LDI4NzMwLDI4NzI5LDI4NzM2LDI4NzMxLDI4NzIzLDI4NzM3LDI5MjAzLDI5MjA0LDI5MzUyLDI5NTY1LDI5NTY0LDI5ODgyLDMwMzc5LDMwMzc4LDMwMzk4LDMwNDQ1LDMwNjY4LDMwNjcwLDMwNjcxLDMwNjY5LDMwNzA2LDMxMDEzLDMxMDExLDMxMDE1LDMxMDE2LDMx''@;'; put 'put ''MDEyLDMxMDE3LDMxMTU0LDMxMzQyLDMxMzQwLDMxMzQxLDMxNDc5LDMxODE3LDMxODE2LDMxODE4LDMxODE1LDMxODEzLDMxOTgyLDMyMzc5LDMyMzgyLDMyMzg1LDMyMzg0LDMyNjk4LDMyNzY3LDMyODg5LDMzMjQzLDMzMjQxLDMzMjkxLDMzMzg0LDMzMzg1LDM0MzM4LDM0MzAzLDM0MzA1''@;'; put 'put ''LDM0MzAyLDM0MzMxLDM0MzA0LDM0Mjk0LDM0MzA4LDM0MzEzLDM0MzA5LDM0MzE2LDM0MzAxLDM0ODQxLDM0ODMyLDM0ODMzLDM0ODM5LDM0ODM1LDM0ODM4LDM1MTcxLDM1MTc0LDM1MjU3LDM1MzE5LDM1NjgwLDM1NjkwLDM1Njc3LDM1Njg4LDM1NjgzLDM1Njg1LDM1Njg3LDM1NjkzLDM2''@;'; put 'put ''MjcwLDM2NDg2LDM2NDg4LDM2NDg0LDM2Njk3LDM2Njk0LDM2Njk1LDM2NjkzLDM2Njk2LDM2Njk4LDM3MDA1LDM3MTg3LDM3MTg1LDM3MzAzLDM3MzAxLDM3Mjk4LDM3Mjk5LDM3ODk5LDM3OTA3LDM3ODgzLDM3OTIwLDM3OTAzLDM3OTA4LDM3ODg2LDM3OTA5LDM3OTA0LDM3OTI4LDM3OTEz''@;'; put 'put ''LDM3OTAxLDM3ODc3LDM3ODg4LDM3ODc5LDM3ODk1LDM3OTAyLDM3OTEwLDM3OTA2LDM3ODgyLDM3ODk3LDM3ODgwLDM3ODk4LDM3ODg3LDM3ODg0LDM3OTAwLDM3ODc4LDM3OTA1LDM3ODk0LDM4MzY2LDM4MzY4LDM4MzY3LDM4NzAyLDM4NzAzLDM4ODQxLDM4ODQzLDM4OTA5LDM4OTEwLDM5''@;'; put 'put ''MDA4LDM5MDEwLDM5MDExLDM5MDA3LDM5MTA1LDM5MTA2LDM5MjQ4LDM5MjQ2LDM5MjU3LDM5MjQ0LDM5MjQzLDM5MjUxLDM5NDc0LDM5NDc2LDM5NDczLDM5NDY4LDM5NDY2LDM5NDc4LDM5NDY1LDM5NDcwLDM5NDgwLDM5NDY5LDM5NjIzLDM5NjI2LDM5NjIyLDM5Njk2LDM5Njk4LDM5Njk3''@;'; put 'put ''LDM5OTQ3LDM5OTQ0LDM5OTI3LDM5OTQxLDM5OTU0LDM5OTI4LDRlNCwzOTk0MywzOTk1MCwzOTk0MiwzOTk1OSwzOTk1NiwzOTk0NSw0MDM1MSw0MDM0NSw0MDM1Niw0MDM0OSw0MDMzOCw0MDM0NCw0MDMzNiw0MDM0Nyw0MDM1Miw0MDM0MCw0MDM0OCw0MDM2Miw0MDM0Myw0MDM1Myw0MDM0''@;'; put 'put ''Niw0MDM1NCw0MDM2MCw0MDM1MCw0MDM1NSw0MDM4Myw0MDM2MSw0MDM0Miw0MDM1OCw0MDM1OSw0MDYwMSw0MDYwMyw0MDYwMiw0MDY3Nyw0MDY3Niw0MDY3OSw0MDY3OCw0MDc1Miw0MDc1MCw0MDc5NSw0MDgwMCw0MDc5OCw0MDc5Nyw0MDc5Myw0MDg0OSwyMDc5NCwyMDc5MywyMTE0NCwy''@;'; put 'put ''MTE0MywyMjIxMSwyMjIwNSwyMjIwNiwyMzM2OCwyMzM2NywyNDAxMSwyNDAxNSwyNDMwNSwyNTA4NSwyNTg4MywyNzM5NCwyNzM4OCwyNzM5NSwyNzM4NCwyNzM5MiwyODczOSwyODc0MCwyODc0NiwyODc0NCwyODc0NSwyODc0MSwyODc0MiwyOTIxMywyOTIxMCwyOTIwOSwyOTU2NiwyOTk3''@;'; put 'put ''NSwzMDMxNCwzMDY3MiwzMTAyMSwzMTAyNSwzMTAyMywzMTgyOCwzMTgyNywzMTk4NiwzMjM5NCwzMjM5MSwzMjM5MiwzMjM5NSwzMjM5MCwzMjM5NywzMjU4OSwzMjY5OSwzMjgxNiwzMzI0NSwzNDMyOCwzNDM0NiwzNDM0MiwzNDMzNSwzNDMzOSwzNDMzMiwzNDMyOSwzNDM0MywzNDM1MCwz''@;'; put 'put ''NDMzNywzNDMzNiwzNDM0NSwzNDMzNCwzNDM0MSwzNDg1NywzNDg0NSwzNDg0MywzNDg0OCwzNDg1MiwzNDg0NCwzNDg1OSwzNDg5MCwzNTE4MSwzNTE3NywzNTE4MiwzNTE3OSwzNTMyMiwzNTcwNSwzNTcwNCwzNTY1MywzNTcwNiwzNTcwNywzNjExMiwzNjExNiwzNjI3MSwzNjQ5NCwzNjQ5''@;'; put 'put ''MiwzNjcwMiwzNjY5OSwzNjcwMSwzNzE5MCwzNzE4OCwzNzE4OSwzNzMwNSwzNzk1MSwzNzk0NywzNzk0MiwzNzkyOSwzNzk0OSwzNzk0OCwzNzkzNiwzNzk0NSwzNzkzMCwzNzk0MywzNzkzMiwzNzk1MiwzNzkzNywzODM3MywzODM3MiwzODM3MSwzODcwOSwzODcxNCwzODg0NywzODg4MSwz''@;'; put 'put ''OTAxMiwzOTExMywzOTExMCwzOTEwNCwzOTI1NiwzOTI1NCwzOTQ4MSwzOTQ4NSwzOTQ5NCwzOTQ5MiwzOTQ5MCwzOTQ4OSwzOTQ4MiwzOTQ4NywzOTYyOSwzOTcwMSwzOTcwMywzOTcwNCwzOTcwMiwzOTczOCwzOTc2MiwzOTk3OSwzOTk2NSwzOTk2NCwzOTk4MCwzOTk3MSwzOTk3NiwzOTk3''@;'; put 'put ''NywzOTk3MiwzOTk2OSw0MDM3NSw0MDM3NCw0MDM4MCw0MDM4NSw0MDM5MSw0MDM5NCw0MDM5OSw0MDM4Miw0MDM4OSw0MDM4Nyw0MDM3OSw0MDM3Myw0MDM5OCw0MDM3Nyw0MDM3OCw0MDM2NCw0MDM5Miw0MDM2OSw0MDM2NSw0MDM5Niw0MDM3MSw0MDM5Nyw0MDM3MCw0MDU3MCw0MDYwNCw0''@;'; put 'put ''MDY4Myw0MDY4Niw0MDY4NSw0MDczMSw0MDcyOCw0MDczMCw0MDc1Myw0MDc4Miw0MDgwNSw0MDgwNCw0MDg1MCwyMDE1MywyMjIxNCwyMjIxMywyMjIxOSwyMjg5NywyMzM3MSwyMzM3MiwyNDAyMSwyNDAxNywyNDMwNiwyNTg4OSwyNTg4OCwyNTg5NCwyNTg5MCwyNzQwMywyNzQwMCwyNzQw''@;'; put 'put ''MSwyNzY2MSwyODc1NywyODc1OCwyODc1OSwyODc1NCwyOTIxNCwyOTIxNSwyOTM1MywyOTU2NywyOTkxMiwyOTkwOSwyOTkxMywyOTkxMSwzMDMxNywzMDM4MSwzMTAyOSwzMTE1NiwzMTM0NCwzMTM0NSwzMTgzMSwzMTgzNiwzMTgzMywzMTgzNSwzMTgzNCwzMTk4OCwzMTk4NSwzMjQwMSwz''@;'; put 'put ''MjU5MSwzMjY0NywzMzI0NiwzMzM4NywzNDM1NiwzNDM1NywzNDM1NSwzNDM0OCwzNDM1NCwzNDM1OCwzNDg2MCwzNDg1NiwzNDg1NCwzNDg1OCwzNDg1MywzNTE4NSwzNTI2MywzNTI2MiwzNTMyMywzNTcxMCwzNTcxNiwzNTcxNCwzNTcxOCwzNTcxNywzNTcxMSwzNjExNywzNjUwMSwzNjUw''@;'; put 'put ''MCwzNjUwNiwzNjQ5OCwzNjQ5NiwzNjUwMiwzNjUwMywzNjcwNCwzNjcwNiwzNzE5MSwzNzk2NCwzNzk2OCwzNzk2MiwzNzk2MywzNzk2NywzNzk1OSwzNzk1NywzNzk2MCwzNzk2MSwzNzk1OCwzODcxOSwzODg4MywzOTAxOCwzOTAxNywzOTExNSwzOTI1MiwzOTI1OSwzOTUwMiwzOTUwNywz''@;'; put 'put ''OTUwOCwzOTUwMCwzOTUwMywzOTQ5NiwzOTQ5OCwzOTQ5NywzOTUwNiwzOTUwNCwzOTYzMiwzOTcwNSwzOTcyMywzOTczOSwzOTc2NiwzOTc2NSw0MDAwNiw0MDAwOCwzOTk5OSw0MDAwNCwzOTk5MywzOTk4Nyw0MDAwMSwzOTk5NiwzOTk5MSwzOTk4OCwzOTk4NiwzOTk5NywzOTk5MCw0MDQx''@;'; put 'put ''MSw0MDQwMiw0MDQxNCw0MDQxMCw0MDM5NSw0MDQwMCw0MDQxMiw0MDQwMSw0MDQxNSw0MDQyNSw0MDQwOSw0MDQwOCw0MDQwNiw0MDQzNyw0MDQwNSw0MDQxMyw0MDYzMCw0MDY4OCw0MDc1Nyw0MDc1NSw0MDc1NCw0MDc3MCw0MDgxMSw0MDg1Myw0MDg2NiwyMDc5NywyMTE0NSwyMjc2MCwy''@;'; put 'put ''Mjc1OSwyMjg5OCwyMzM3MywyNDAyNCwzNDg2MywyNDM5OSwyNTA4OSwyNTA5MSwyNTA5MiwyNTg5NywyNTg5MywyNjAwNiwyNjM0NywyNzQwOSwyNzQxMCwyNzQwNywyNzU5NCwyODc2MywyODc2MiwyOTIxOCwyOTU3MCwyOTU2OSwyOTU3MSwzMDMyMCwzMDY3NiwzMTg0NywzMTg0NiwzMjQw''@;'; put 'put ''NSwzMzM4OCwzNDM2MiwzNDM2OCwzNDM2MSwzNDM2NCwzNDM1MywzNDM2MywzNDM2NiwzNDg2NCwzNDg2NiwzNDg2MiwzNDg2NywzNTE5MCwzNTE4OCwzNTE4NywzNTMyNiwzNTcyNCwzNTcyNiwzNTcyMywzNTcyMCwzNTkwOSwzNjEyMSwzNjUwNCwzNjcwOCwzNjcwNywzNzMwOCwzNzk4Niwz''@;'; put 'put ''Nzk3MywzNzk4MSwzNzk3NSwzNzk4MiwzODg1MiwzODg1MywzODkxMiwzOTUxMCwzOTUxMywzOTcxMCwzOTcxMSwzOTcxMiw0MDAxOCw0MDAyNCw0MDAxNiw0MDAxMCw0MDAxMyw0MDAxMSw0MDAyMSw0MDAyNSw0MDAxMiw0MDAxNCw0MDQ0Myw0MDQzOSw0MDQzMSw0MDQxOSw0MDQyNyw0MDQ0''@;'; put 'put ''MCw0MDQyMCw0MDQzOCw0MDQxNyw0MDQzMCw0MDQyMiw0MDQzNCw0MDQzMiw0MDQxOCw0MDQyOCw0MDQzNiw0MDQzNSw0MDQyNCw0MDQyOSw0MDY0Miw0MDY1Niw0MDY5MCw0MDY5MSw0MDcxMCw0MDczMiw0MDc2MCw0MDc1OSw0MDc1OCw0MDc3MSw0MDc4Myw0MDgxNyw0MDgxNiw0MDgxNCw0''@;'; put 'put ''MDgxNSwyMjIyNywyMjIyMSwyMzM3NCwyMzY2MSwyNTkwMSwyNjM0OSwyNjM1MCwyNzQxMSwyODc2NywyODc2OSwyODc2NSwyODc2OCwyOTIxOSwyOTkxNSwyOTkyNSwzMDY3NywzMTAzMiwzMTE1OSwzMTE1OCwzMTg1MCwzMjQwNywzMjY0OSwzMzM4OSwzNDM3MSwzNDg3MiwzNDg3MSwzNDg2''@;'; put 'put ''OSwzNDg5MSwzNTczMiwzNTczMywzNjUxMCwzNjUxMSwzNjUxMiwzNjUwOSwzNzMxMCwzNzMwOSwzNzMxNCwzNzk5NSwzNzk5MiwzNzk5MywzODYyOSwzODcyNiwzODcyMywzODcyNywzODg1NSwzODg4NSwzOTUxOCwzOTYzNywzOTc2OSw0MDAzNSw0MDAzOSw0MDAzOCw0MDAzNCw0MDAzMCw0''@;'; put 'put ''MDAzMiw0MDQ1MCw0MDQ0Niw0MDQ1NSw0MDQ1MSw0MDQ1NCw0MDQ1Myw0MDQ0OCw0MDQ0OSw0MDQ1Nyw0MDQ0Nyw0MDQ0NSw0MDQ1Miw0MDYwOCw0MDczNCw0MDc3NCw0MDgyMCw0MDgyMSw0MDgyMiwyMjIyOCwyNTkwMiwyNjA0MCwyNzQxNiwyNzQxNywyNzQxNSwyNzQxOCwyODc3MCwyOTIy''@;'; put 'put ''MiwyOTM1NCwzMDY4MCwzMDY4MSwzMTAzMywzMTg0OSwzMTg1MSwzMTk5MCwzMjQxMCwzMjQwOCwzMjQxMSwzMjQwOSwzMzI0OCwzMzI0OSwzNDM3NCwzNDM3NSwzNDM3NiwzNTE5MywzNTE5NCwzNTE5NiwzNTE5NSwzNTMyNywzNTczNiwzNTczNywzNjUxNywzNjUxNiwzNjUxNSwzNzk5OCwz''@;'; put 'put ''Nzk5NywzNzk5OSwzODAwMSwzODAwMywzODcyOSwzOTAyNiwzOTI2Myw0MDA0MCw0MDA0Niw0MDA0NSw0MDQ1OSw0MDQ2MSw0MDQ2NCw0MDQ2Myw0MDQ2Niw0MDQ2NSw0MDYwOSw0MDY5Myw0MDcxMyw0MDc3NSw0MDgyNCw0MDgyNyw0MDgyNiw0MDgyNSwyMjMwMiwyODc3NCwzMTg1NSwzNDg3''@;'; put 'put ''NiwzNjI3NCwzNjUxOCwzNzMxNSwzODAwNCwzODAwOCwzODAwNiwzODAwNSwzOTUyMCw0MDA1Miw0MDA1MSw0MDA0OSw0MDA1Myw0MDQ2OCw0MDQ2Nyw0MDY5NCw0MDcxNCw0MDg2OCwyODc3NiwyODc3MywzMTk5MSwzNDQxMCwzNDg3OCwzNDg3NywzNDg3OSwzNTc0MiwzNTk5NiwzNjUyMSwz''@;'; put 'put ''NjU1MywzODczMSwzOTAyNywzOTAyOCwzOTExNiwzOTI2NSwzOTMzOSwzOTUyNCwzOTUyNiwzOTUyNywzOTcxNiw0MDQ2OSw0MDQ3MSw0MDc3NiwyNTA5NSwyNzQyMiwyOTIyMywzNDM4MCwzNjUyMCwzODAxOCwzODAxNiwzODAxNywzOTUyOSwzOTUyOCwzOTcyNiw0MDQ3MywyOTIyNSwzNDM3''@;'; put 'put ''OSwzNTc0MywzODAxOSw0MDA1Nyw0MDYzMSwzMDMyNSwzOTUzMSw0MDA1OCw0MDQ3NywyODc3NywyODc3OCw0MDYxMiw0MDgzMCw0MDc3Nyw0MDg1NiwzMDg0OSwzNzU2MSwzNTAyMywyMjcxNSwyNDY1OCwzMTkxMSwyMzI5MCw5NTU2LDk1NzQsOTU1OSw5NTY4LDk1ODAsOTU3MSw5NTYyLDk1''@;'; put 'put ''NzcsOTU2NSw5NTU0LDk1NzIsOTU1Nyw5NTY2LDk1NzgsOTU2OSw5NTYwLDk1NzUsOTU2Myw5NTU1LDk1NzMsOTU1OCw5NTY3LDk1NzksOTU3MCw5NTYxLDk1NzYsOTU2NCw5NTUzLDk1NTIsOTU4MSw5NTgyLDk1ODQsOTU4Myw2NTUxNywxMzI0MjMsMzc1OTUsMTMyNTc1LDE0NzM5NywzNDEy''@;'; put 'put ''NCwxNzA3NywyOTY3OSwyMDkxNywxMzg5NywxNDk4MjYsMTY2MzcyLDM3NzAwLDEzNzY5MSwzMzUxOCwxNDY2MzIsMzA3ODAsMjY0MzYsMjUzMTEsMTQ5ODExLDE2NjMxNCwxMzE3NDQsMTU4NjQzLDEzNTk0MSwyMDM5NSwxNDA1MjUsMjA0ODgsMTU5MDE3LDE2MjQzNiwxNDQ4OTYsMTUwMTkz''@;'; put 'put ''LDE0MDU2MywyMDUyMSwxMzE5NjYsMjQ0ODQsMTMxOTY4LDEzMTkxMSwyODM3OSwxMzIxMjcsMjA2MDUsMjA3MzcsMTM0MzQsMjA3NTAsMzkwMjAsMTQxNDcsMzM4MTQsMTQ5OTI0LDEzMjIzMSwyMDgzMiwxNDQzMDgsMjA4NDIsMTM0MTQzLDEzOTUxNiwxMzE4MTMsMTQwNTkyLDEzMjQ5NCwx''@;'; put 'put ''NDM5MjMsMTM3NjAzLDIzNDI2LDM0Njg1LDEzMjUzMSwxNDY1ODUsMjA5MTQsMjA5MjAsNDAyNDQsMjA5MzcsMjA5NDMsMjA5NDUsMTU1ODAsMjA5NDcsMTUwMTgyLDIwOTE1LDIwOTYyLDIxMzE0LDIwOTczLDMzNzQxLDI2OTQyLDE0NTE5NywyNDQ0MywyMTAwMywyMTAzMCwyMTA1MiwyMTE3''@;'; put 'put ''MywyMTA3OSwyMTE0MCwyMTE3NywyMTE4OSwzMTc2NSwzNDExNCwyMTIxNiwzNDMxNywxNTg0ODMsMjEyNTMsMTY2NjIyLDIxODMzLDI4Mzc3LDE0NzMyOCwxMzM0NjAsMTQ3NDM2LDIxMjk5LDIxMzE2LDEzNDExNCwyNzg1MSwxMzY5OTgsMjY2NTEsMjk2NTMsMjQ2NTAsMTYwNDIsMTQ1NDAs''@;'; put 'put ''MTM2OTM2LDI5MTQ5LDE3NTcwLDIxMzU3LDIxMzY0LDE2NTU0NywyMTM3NCwyMTM3NSwxMzY1OTgsMTM2NzIzLDMwNjk0LDIxMzk1LDE2NjU1NSwyMTQwOCwyMTQxOSwyMTQyMiwyOTYwNywxNTM0NTgsMTYyMTcsMjk1OTYsMjE0NDEsMjE0NDUsMjc3MjEsMjAwNDEsMjI1MjYsMjE0NjUsMTUw''@;'; put 'put ''MTksMTM0MDMxLDIxNDcyLDE0NzQzNSwxNDI3NTUsMjE0OTQsMTM0MjYzLDIxNTIzLDI4NzkzLDIxODAzLDI2MTk5LDI3OTk1LDIxNjEzLDE1ODU0NywxMzQ1MTYsMjE4NTMsMjE2NDcsMjE2NjgsMTgzNDIsMTM2OTczLDEzNDg3NywxNTc5NiwxMzQ0NzcsMTY2MzMyLDE0MDk1MiwyMTgzMSwx''@;'; put 'put ''OTY5MywyMTU1MSwyOTcxOSwyMTg5NCwyMTkyOSwyMjAyMSwxMzc0MzEsMTQ3NTE0LDE3NzQ2LDE0ODUzMywyNjI5MSwxMzUzNDgsMjIwNzEsMjYzMTcsMTQ0MDEwLDI2Mjc2LDI2Mjg1LDIyMDkzLDIyMDk1LDMwOTYxLDIyMjU3LDM4NzkxLDIxNTAyLDIyMjcyLDIyMjU1LDIyMjUzLDE2Njc1''@;'; put 'put ''OCwxMzg1OSwxMzU3NTksMjIzNDIsMTQ3ODc3LDI3NzU4LDI4ODExLDIyMzM4LDE0MDAxLDE1ODg0NiwyMjUwMiwxMzYyMTQsMjI1MzEsMTM2Mjc2LDE0ODMyMywyMjU2NiwxNTA1MTcsMjI2MjAsMjI2OTgsMTM2NjUsMjI3NTIsMjI3NDgsMTM1NzQwLDIyNzc5LDIzNTUxLDIyMzM5LDE3MjM2''@;'; put 'put ''OCwxNDgwODgsMzc4NDMsMTM3MjksMjI4MTUsMjY3OTAsMTQwMTksMjgyNDksMTM2NzY2LDIzMDc2LDIxODQzLDEzNjg1MCwzNDA1MywyMjk4NSwxMzQ0NzgsMTU4ODQ5LDE1OTAxOCwxMzcxODAsMjMwMDEsMTM3MjExLDEzNzEzOCwxNTkxNDIsMjgwMTcsMTM3MjU2LDEzNjkxNywyMzAzMywx''@;'; put 'put ''NTkzMDEsMjMyMTEsMjMxMzksMTQwNTQsMTQ5OTI5LDIzMTU5LDE0MDg4LDIzMTkwLDI5Nzk3LDIzMjUxLDE1OTY0OSwxNDA2MjgsMTU3NDksMTM3NDg5LDE0MTMwLDEzNjg4OCwyNDE5NSwyMTIwMCwyMzQxNCwyNTk5MiwyMzQyMCwxNjIzMTgsMTYzODgsMTg1MjUsMTMxNTg4LDIzNTA5LDI0''@;'; put 'put ''OTI4LDEzNzc4MCwxNTQwNjAsMTMyNTE3LDIzNTM5LDIzNDUzLDE5NzI4LDIzNTU3LDEzODA1MiwyMzU3MSwyOTY0NiwyMzU3MiwxMzg0MDUsMTU4NTA0LDIzNjI1LDE4NjUzLDIzNjg1LDIzNzg1LDIzNzkxLDIzOTQ3LDEzODc0NSwxMzg4MDcsMjM4MjQsMjM4MzIsMjM4NzgsMTM4OTE2LDIz''@;'; put 'put ''NzM4LDI0MDIzLDMzNTMyLDE0MzgxLDE0OTc2MSwxMzkzMzcsMTM5NjM1LDMzNDE1LDE0MzkwLDE1Mjk4LDI0MTEwLDI3Mjc0LDI0MTgxLDI0MTg2LDE0ODY2OCwxMzQzNTUsMjE0MTQsMjAxNTEsMjQyNzIsMjE0MTYsMTM3MDczLDI0MDczLDI0MzA4LDE2NDk5NCwyNDMxMywyNDMxNSwxNDQ5''@;'; put 'put ''NiwyNDMxNiwyNjY4NiwzNzkxNSwyNDMzMywxMzE1MjEsMTk0NzA4LDE1MDcwLDE4NjA2LDEzNTk5NCwyNDM3OCwxNTc4MzIsMTQwMjQwLDI0NDA4LDE0MDQwMSwyNDQxOSwzODg0NSwxNTkzNDIsMjQ0MzQsMzc2OTYsMTY2NDU0LDI0NDg3LDIzOTkwLDE1NzExLDE1MjE0NCwxMzkxMTQsMTU5''@;'; put 'put ''OTkyLDE0MDkwNCwzNzMzNCwxMzE3NDIsMTY2NDQxLDI0NjI1LDI2MjQ1LDEzNzMzNSwxNDY5MSwxNTgxNSwxMzg4MSwyMjQxNiwxNDEyMzYsMzEwODksMTU5MzYsMjQ3MzQsMjQ3NDAsMjQ3NTUsMTQ5ODkwLDE0OTkwMywxNjIzODcsMjk4NjAsMjA3MDUsMjMyMDAsMjQ5MzIsMzM4MjgsMjQ4''@;'; put 'put ''OTgsMTk0NzI2LDE1OTQ0MiwyNDk2MSwyMDk4MCwxMzI2OTQsMjQ5NjcsMjM0NjYsMTQ3MzgzLDE0MTQwNywyNTA0MywxNjY4MTMsMTcwMzMzLDI1MDQwLDE0NjQyLDE0MTY5NiwxNDE1MDUsMjQ2MTEsMjQ5MjQsMjU4ODYsMjU0ODMsMTMxMzUyLDI1Mjg1LDEzNzA3MiwyNTMwMSwxNDI4NjEs''@;'; put 'put ''MjU0NTIsMTQ5OTgzLDE0ODcxLDI1NjU2LDI1NTkyLDEzNjA3OCwxMzcyMTIsMjU3NDQsMjg1NTQsMTQyOTAyLDM4OTMyLDE0NzU5NiwxNTMzNzMsMjU4MjUsMjU4MjksMzgwMTEsMTQ5NTAsMjU2NTgsMTQ5MzUsMjU5MzMsMjg0MzgsMTUwMDU2LDE1MDA1MSwyNTk4OSwyNTk2NSwyNTk1MSwx''@;'; put 'put ''NDM0ODYsMjYwMzcsMTQ5ODI0LDE5MjU1LDI2MDY1LDE2NjAwLDEzNzI1NywyNjA4MCwyNjA4MywyNDU0MywxNDQzODQsMjYxMzYsMTQzODYzLDE0Mzg2NCwyNjE4MCwxNDM3ODAsMTQzNzgxLDI2MTg3LDEzNDc3MywyNjIxNSwxNTIwMzgsMjYyMjcsMjYyMjgsMTM4ODEzLDE0MzkyMSwxNjUz''@;'; put 'put ''NjQsMTQzODE2LDE1MjMzOSwzMDY2MSwxNDE1NTksMzkzMzIsMjYzNzAsMTQ4MzgwLDE1MDA0OSwxNTE0NywyNzEzMCwxNDUzNDYsMjY0NjIsMjY0NzEsMjY0NjYsMTQ3OTE3LDE2ODE3MywyNjU4MywxNzY0MSwyNjY1OCwyODI0MCwzNzQzNiwyNjYyNSwxNDQzNTgsMTU5MTM2LDI2NzE3LDE0''@;'; put 'put ''NDQ5NSwyNzEwNSwyNzE0NywxNjY2MjMsMjY5OTUsMjY4MTksMTQ0ODQ1LDI2ODgxLDI2ODgwLDE1NjY2LDE0ODQ5LDE0NDk1NiwxNTIzMiwyNjU0MCwyNjk3NywxNjY0NzQsMTcxNDgsMjY5MzQsMjcwMzIsMTUyNjUsMTMyMDQxLDMzNjM1LDIwNjI0LDI3MTI5LDE0NDk4NSwxMzk1NjIsMjcy''@;'; put 'put ''MDUsMTQ1MTU1LDI3MjkzLDE1MzQ3LDI2NTQ1LDI3MzM2LDE2ODM0OCwxNTM3MywyNzQyMSwxMzM0MTEsMjQ3OTgsMjc0NDUsMjc1MDgsMTQxMjYxLDI4MzQxLDE0NjEzOSwxMzIwMjEsMTM3NTYwLDE0MTQ0LDIxNTM3LDE0NjI2NiwyNzYxNywxNDcxOTYsMjc2MTIsMjc3MDMsMTQwNDI3LDE0''@;'; put 'put ''OTc0NSwxNTg1NDUsMjc3MzgsMzMzMTgsMjc3NjksMTQ2ODc2LDE3NjA1LDE0Njg3NywxNDc4NzYsMTQ5NzcyLDE0OTc2MCwxNDY2MzMsMTQwNTMsMTU1OTUsMTM0NDUwLDM5ODExLDE0Mzg2NSwxNDA0MzMsMzI2NTUsMjY2NzksMTU5MDEzLDE1OTEzNywxNTkyMTEsMjgwNTQsMjc5OTYsMjgy''@;'; put 'put ''ODQsMjg0MjAsMTQ5ODg3LDE0NzU4OSwxNTkzNDYsMzQwOTksMTU5NjA0LDIwOTM1LDI3ODA0LDI4MTg5LDMzODM4LDE2NjY4OSwyODIwNywxNDY5OTEsMjk3NzksMTQ3MzMwLDMxMTgwLDI4MjM5LDIzMTg1LDE0MzQzNSwyODY2NCwxNDA5MywyODU3MywxNDY5OTIsMjg0MTAsMTM2MzQzLDE0''@;'; put 'put ''NzUxNywxNzc0OSwzNzg3MiwyODQ4NCwyODUwOCwxNTY5NCwyODUzMiwxNjgzMDQsMTU2NzUsMjg1NzUsMTQ3NzgwLDI4NjI3LDE0NzYwMSwxNDc3OTcsMTQ3NTEzLDE0NzQ0MCwxNDczODAsMTQ3Nzc1LDIwOTU5LDE0Nzc5OCwxNDc3OTksMTQ3Nzc2LDE1NjEyNSwyODc0NywyODc5OCwyODgz''@;'; put 'put ''OSwyODgwMSwyODg3NiwyODg4NSwyODg4NiwyODg5NSwxNjY0NCwxNTg0OCwyOTEwOCwyOTA3OCwxNDgwODcsMjg5NzEsMjg5OTcsMjMxNzYsMjkwMDIsMjkwMzgsMjM3MDgsMTQ4MzI1LDI5MDA3LDM3NzMwLDE0ODE2MSwyODk3MiwxNDg1NzAsMTUwMDU1LDE1MDA1MCwyOTExNCwxNjY4ODgs''@;'; put 'put ''Mjg4NjEsMjkxOTgsMzc5NTQsMjkyMDUsMjI4MDEsMzc5NTUsMjkyMjAsMzc2OTcsMTUzMDkzLDI5MjMwLDI5MjQ4LDE0OTg3NiwyNjgxMywyOTI2OSwyOTI3MSwxNTk1NywxNDM0MjgsMjY2MzcsMjg0NzcsMjkzMTQsMjk0ODIsMjk0ODMsMTQ5NTM5LDE2NTkzMSwxODY2OSwxNjU4OTIsMjk0''@;'; put 'put ''ODAsMjk0ODYsMjk2NDcsMjk2MTAsMTM0MjAyLDE1ODI1NCwyOTY0MSwyOTc2OSwxNDc5MzgsMTM2OTM1LDE1MDA1MiwyNjE0NywxNDAyMSwxNDk5NDMsMTQ5OTAxLDE1MDAxMSwyOTY4NywyOTcxNywyNjg4MywxNTAwNTQsMjk3NTMsMTMyNTQ3LDE2MDg3LDI5Nzg4LDE0MTQ4NSwyOTc5Miwx''@;'; put 'put ''Njc2MDIsMjk3NjcsMjk2NjgsMjk4MTQsMzM3MjEsMjk4MDQsMTQxMjgsMjk4MTIsMzc4NzMsMjcxODAsMjk4MjYsMTg3NzEsMTUwMTU2LDE0NzgwNywxNTAxMzcsMTY2Nzk5LDIzMzY2LDE2NjkxNSwxMzczNzQsMjk4OTYsMTM3NjA4LDI5OTY2LDI5OTI5LDI5OTgyLDE2NzY0MSwxMzc4MDMs''@;'; put 'put ''MjM1MTEsMTY3NTk2LDM3NzY1LDMwMDI5LDMwMDI2LDMwMDU1LDMwMDYyLDE1MTQyNiwxNjEzMiwxNTA4MDMsMzAwOTQsMjk3ODksMzAxMTAsMzAxMzIsMzAyMTAsMzAyNTIsMzAyODksMzAyODcsMzAzMTksMzAzMjYsMTU2NjYxLDMwMzUyLDMzMjYzLDE0MzI4LDE1Nzk2OSwxNTc5NjYsMzAz''@;'; put 'put ''NjksMzAzNzMsMzAzOTEsMzA0MTIsMTU5NjQ3LDMzODkwLDE1MTcwOSwxNTE5MzMsMTM4NzgwLDMwNDk0LDMwNTAyLDMwNTI4LDI1Nzc1LDE1MjA5NiwzMDU1MiwxNDQwNDQsMzA2MzksMTY2MjQ0LDE2NjI0OCwxMzY4OTcsMzA3MDgsMzA3MjksMTM2MDU0LDE1MDAzNCwyNjgyNiwzMDg5NSwz''@;'; put 'put ''MDkxOSwzMDkzMSwzODU2NSwzMTAyMiwxNTMwNTYsMzA5MzUsMzEwMjgsMzA4OTcsMTYxMjkyLDM2NzkyLDM0OTQ4LDE2NjY5OSwxNTU3NzksMTQwODI4LDMxMTEwLDM1MDcyLDI2ODgyLDMxMTA0LDE1MzY4NywzMTEzMywxNjI2MTcsMzEwMzYsMzExNDUsMjgyMDIsMTYwMDM4LDE2MDQwLDMx''@;'; put 'put ''MTc0LDE2ODIwNSwzMTE4OF0sImV1Yy1rciI6WzQ0MDM0LDQ0MDM1LDQ0MDM3LDQ0MDM4LDQ0MDQzLDQ0MDQ0LDQ0MDQ1LDQ0MDQ2LDQ0MDQ3LDQ0MDU2LDQ0MDYyLDQ0MDYzLDQ0MDY1LDQ0MDY2LDQ0MDY3LDQ0MDY5LDQ0MDcwLDQ0MDcxLDQ0MDcyLDQ0MDczLDQ0MDc0LDQ0MDc1LDQ0MDc4''@;'; put 'put ''LDQ0MDgyLDQ0MDgzLDQ0MDg0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0MDg1LDQ0MDg2LDQ0MDg3LDQ0MDkwLDQ0MDkxLDQ0MDkzLDQ0MDk0LDQ0MDk1LDQ0MDk3LDQ0MDk4LDQ0MDk5LDQ0MTAwLDQ0MTAxLDQ0MTAyLDQ0MTAzLDQ0MTA0LDQ0MTA1LDQ0MTA2LDQ0MTA4LDQ0''@;'; put 'put ''MTEwLDQ0MTExLDQ0MTEyLDQ0MTEzLDQ0MTE0LDQ0MTE1LDQ0MTE3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0MTE4LDQ0MTE5LDQ0MTIxLDQ0MTIyLDQ0MTIzLDQ0MTI1LDQ0MTI2LDQ0MTI3LDQ0MTI4LDQ0MTI5LDQ0MTMwLDQ0MTMxLDQ0MTMyLDQ0MTMzLDQ0MTM0LDQ0MTM1''@;'; put 'put ''LDQ0MTM2LDQ0MTM3LDQ0MTM4LDQ0MTM5LDQ0MTQwLDQ0MTQxLDQ0MTQyLDQ0MTQzLDQ0MTQ2LDQ0MTQ3LDQ0MTQ5LDQ0MTUwLDQ0MTUzLDQ0MTU1LDQ0MTU2LDQ0MTU3LDQ0MTU4LDQ0MTU5LDQ0MTYyLDQ0MTY3LDQ0MTY4LDQ0MTczLDQ0MTc0LDQ0MTc1LDQ0MTc3LDQ0MTc4LDQ0MTc5LDQ0''@;'; put 'put ''MTgxLDQ0MTgyLDQ0MTgzLDQ0MTg0LDQ0MTg1LDQ0MTg2LDQ0MTg3LDQ0MTkwLDQ0MTk0LDQ0MTk1LDQ0MTk2LDQ0MTk3LDQ0MTk4LDQ0MTk5LDQ0MjAzLDQ0MjA1LDQ0MjA2LDQ0MjA5LDQ0MjEwLDQ0MjExLDQ0MjEyLDQ0MjEzLDQ0MjE0LDQ0MjE1LDQ0MjE4LDQ0MjIyLDQ0MjIzLDQ0MjI0''@;'; put 'put ''LDQ0MjI2LDQ0MjI3LDQ0MjI5LDQ0MjMwLDQ0MjMxLDQ0MjMzLDQ0MjM0LDQ0MjM1LDQ0MjM3LDQ0MjM4LDQ0MjM5LDQ0MjQwLDQ0MjQxLDQ0MjQyLDQ0MjQzLDQ0MjQ0LDQ0MjQ2LDQ0MjQ4LDQ0MjQ5LDQ0MjUwLDQ0MjUxLDQ0MjUyLDQ0MjUzLDQ0MjU0LDQ0MjU1LDQ0MjU4LDQ0MjU5LDQ0''@;'; put 'put ''MjYxLDQ0MjYyLDQ0MjY1LDQ0MjY3LDQ0MjY5LDQ0MjcwLDQ0Mjc0LDQ0Mjc2LDQ0Mjc5LDQ0MjgwLDQ0MjgxLDQ0MjgyLDQ0MjgzLDQ0Mjg2LDQ0Mjg3LDQ0Mjg5LDQ0MjkwLDQ0MjkxLDQ0MjkzLDQ0Mjk1LDQ0Mjk2LDQ0Mjk3LDQ0Mjk4LDQ0Mjk5LDQ0MzAyLDQ0MzA0LDQ0MzA2LDQ0MzA3''@;'; put 'put ''LDQ0MzA4LDQ0MzA5LDQ0MzEwLDQ0MzExLDQ0MzEzLDQ0MzE0LDQ0MzE1LDQ0MzE3LDQ0MzE4LDQ0MzE5LDQ0MzIxLDQ0MzIyLDQ0MzIzLDQ0MzI0LDQ0MzI1LDQ0MzI2LDQ0MzI3LDQ0MzI4LDQ0MzMwLDQ0MzMxLDQ0MzM0LDQ0MzM1LDQ0MzM2LDQ0MzM3LDQ0MzM4LDQ0MzM5LG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLDQ0MzQyLDQ0MzQzLDQ0MzQ1LDQ0MzQ2LDQ0MzQ3LDQ0MzQ5LDQ0MzUwLDQ0MzUxLDQ0MzUyLDQ0MzUzLDQ0MzU0LDQ0MzU1LDQ0MzU4LDQ0MzYwLDQ0MzYyLDQ0MzYzLDQ0MzY0LDQ0MzY1LDQ0MzY2LDQ0MzY3LDQ0MzY5LDQ0MzcwLDQ0MzcxLDQ0Mzcz''@;'; put 'put ''LDQ0Mzc0LDQ0Mzc1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0Mzc3LDQ0Mzc4LDQ0Mzc5LDQ0MzgwLDQ0MzgxLDQ0MzgyLDQ0MzgzLDQ0Mzg0LDQ0Mzg2LDQ0Mzg4LDQ0Mzg5LDQ0MzkwLDQ0MzkxLDQ0MzkyLDQ0MzkzLDQ0Mzk0LDQ0Mzk1LDQ0Mzk4LDQ0Mzk5LDQ0NDAxLDQ0''@;'; put 'put ''NDAyLDQ0NDA3LDQ0NDA4LDQ0NDA5LDQ0NDEwLDQ0NDE0LDQ0NDE2LDQ0NDE5LDQ0NDIwLDQ0NDIxLDQ0NDIyLDQ0NDIzLDQ0NDI2LDQ0NDI3LDQ0NDI5LDQ0NDMwLDQ0NDMxLDQ0NDMzLDQ0NDM0LDQ0NDM1LDQ0NDM2LDQ0NDM3LDQ0NDM4LDQ0NDM5LDQ0NDQwLDQ0NDQxLDQ0NDQyLDQ0NDQz''@;'; put 'put ''LDQ0NDQ2LDQ0NDQ3LDQ0NDQ4LDQ0NDQ5LDQ0NDUwLDQ0NDUxLDQ0NDUzLDQ0NDU0LDQ0NDU1LDQ0NDU2LDQ0NDU3LDQ0NDU4LDQ0NDU5LDQ0NDYwLDQ0NDYxLDQ0NDYyLDQ0NDYzLDQ0NDY0LDQ0NDY1LDQ0NDY2LDQ0NDY3LDQ0NDY4LDQ0NDY5LDQ0NDcwLDQ0NDcyLDQ0NDczLDQ0NDc0LDQ0''@;'; put 'put ''NDc1LDQ0NDc2LDQ0NDc3LDQ0NDc4LDQ0NDc5LDQ0NDgyLDQ0NDgzLDQ0NDg1LDQ0NDg2LDQ0NDg3LDQ0NDg5LDQ0NDkwLDQ0NDkxLDQ0NDkyLDQ0NDkzLDQ0NDk0LDQ0NDk1LDQ0NDk4LDQ0NTAwLDQ0NTAxLDQ0NTAyLDQ0NTAzLDQ0NTA0LDQ0NTA1LDQ0NTA2LDQ0NTA3LDQ0NTA5LDQ0NTEw''@;'; put 'put ''LDQ0NTExLDQ0NTEzLDQ0NTE0LDQ0NTE1LDQ0NTE3LDQ0NTE4LDQ0NTE5LDQ0NTIwLDQ0NTIxLDQ0NTIyLDQ0NTIzLDQ0NTI0LDQ0NTI1LDQ0NTI2LDQ0NTI3LDQ0NTI4LDQ0NTI5LDQ0NTMwLDQ0NTMxLDQ0NTMyLDQ0NTMzLDQ0NTM0LDQ0NTM1LDQ0NTM4LDQ0NTM5LDQ0NTQxLDQ0NTQyLDQ0''@;'; put 'put ''NTQ2LDQ0NTQ3LDQ0NTQ4LDQ0NTQ5LDQ0NTUwLDQ0NTUxLDQ0NTU0LDQ0NTU2LDQ0NTU4LDQ0NTU5LDQ0NTYwLDQ0NTYxLDQ0NTYyLDQ0NTYzLDQ0NTY1LDQ0NTY2LDQ0NTY3LDQ0NTY4LDQ0NTY5LDQ0NTcwLDQ0NTcxLDQ0NTcyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0NTcz''@;'; put 'put ''LDQ0NTc0LDQ0NTc1LDQ0NTc2LDQ0NTc3LDQ0NTc4LDQ0NTc5LDQ0NTgwLDQ0NTgxLDQ0NTgyLDQ0NTgzLDQ0NTg0LDQ0NTg1LDQ0NTg2LDQ0NTg3LDQ0NTg4LDQ0NTg5LDQ0NTkwLDQ0NTkxLDQ0NTk0LDQ0NTk1LDQ0NTk3LDQ0NTk4LDQ0NjAxLDQ0NjAzLDQ0NjA0LG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLDQ0NjA1LDQ0NjA2LDQ0NjA3LDQ0NjEwLDQ0NjEyLDQ0NjE1LDQ0NjE2LDQ0NjE3LDQ0NjE5LDQ0NjIzLDQ0NjI1LDQ0NjI2LDQ0NjI3LDQ0NjI5LDQ0NjMxLDQ0NjMyLDQ0NjMzLDQ0NjM0LDQ0NjM1LDQ0NjM4LDQ0NjQyLDQ0NjQzLDQ0NjQ0LDQ0NjQ2LDQ0NjQ3''@;'; put 'put ''LDQ0NjUwLDQ0NjUxLDQ0NjUzLDQ0NjU0LDQ0NjU1LDQ0NjU3LDQ0NjU4LDQ0NjU5LDQ0NjYwLDQ0NjYxLDQ0NjYyLDQ0NjYzLDQ0NjY2LDQ0NjcwLDQ0NjcxLDQ0NjcyLDQ0NjczLDQ0Njc0LDQ0Njc1LDQ0Njc4LDQ0Njc5LDQ0NjgwLDQ0NjgxLDQ0NjgyLDQ0NjgzLDQ0Njg1LDQ0Njg2LDQ0''@;'; put 'put ''Njg3LDQ0Njg4LDQ0Njg5LDQ0NjkwLDQ0NjkxLDQ0NjkyLDQ0NjkzLDQ0Njk0LDQ0Njk1LDQ0Njk2LDQ0Njk3LDQ0Njk4LDQ0Njk5LDQ0NzAwLDQ0NzAxLDQ0NzAyLDQ0NzAzLDQ0NzA0LDQ0NzA1LDQ0NzA2LDQ0NzA3LDQ0NzA4LDQ0NzA5LDQ0NzEwLDQ0NzExLDQ0NzEyLDQ0NzEzLDQ0NzE0''@;'; put 'put ''LDQ0NzE1LDQ0NzE2LDQ0NzE3LDQ0NzE4LDQ0NzE5LDQ0NzIwLDQ0NzIxLDQ0NzIyLDQ0NzIzLDQ0NzI0LDQ0NzI1LDQ0NzI2LDQ0NzI3LDQ0NzI4LDQ0NzI5LDQ0NzMwLDQ0NzMxLDQ0NzM1LDQ0NzM3LDQ0NzM4LDQ0NzM5LDQ0NzQxLDQ0NzQyLDQ0NzQzLDQ0NzQ0LDQ0NzQ1LDQ0NzQ2LDQ0''@;'; put 'put ''NzQ3LDQ0NzUwLDQ0NzU0LDQ0NzU1LDQ0NzU2LDQ0NzU3LDQ0NzU4LDQ0NzU5LDQ0NzYyLDQ0NzYzLDQ0NzY1LDQ0NzY2LDQ0NzY3LDQ0NzY4LDQ0NzY5LDQ0NzcwLDQ0NzcxLDQ0NzcyLDQ0NzczLDQ0Nzc0LDQ0Nzc1LDQ0Nzc3LDQ0Nzc4LDQ0NzgwLDQ0NzgyLDQ0NzgzLDQ0Nzg0LDQ0Nzg1''@;'; put 'put ''LDQ0Nzg2LDQ0Nzg3LDQ0Nzg5LDQ0NzkwLDQ0NzkxLDQ0NzkzLDQ0Nzk0LDQ0Nzk1LDQ0Nzk3LDQ0Nzk4LDQ0Nzk5LDQ0ODAwLDQ0ODAxLDQ0ODAyLDQ0ODAzLDQ0ODA0LDQ0ODA1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0ODA2LDQ0ODA5LDQ0ODEwLDQ0ODExLDQ0ODEyLDQ0''@;'; put 'put ''ODE0LDQ0ODE1LDQ0ODE3LDQ0ODE4LDQ0ODE5LDQ0ODIwLDQ0ODIxLDQ0ODIyLDQ0ODIzLDQ0ODI0LDQ0ODI1LDQ0ODI2LDQ0ODI3LDQ0ODI4LDQ0ODI5LDQ0ODMwLDQ0ODMxLDQ0ODMyLDQ0ODMzLDQ0ODM0LDQ0ODM1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0ODM2LDQ0ODM3''@;'; put 'put ''LDQ0ODM4LDQ0ODM5LDQ0ODQwLDQ0ODQxLDQ0ODQyLDQ0ODQzLDQ0ODQ2LDQ0ODQ3LDQ0ODQ5LDQ0ODUxLDQ0ODUzLDQ0ODU0LDQ0ODU1LDQ0ODU2LDQ0ODU3LDQ0ODU4LDQ0ODU5LDQ0ODYyLDQ0ODY0LDQ0ODY4LDQ0ODY5LDQ0ODcwLDQ0ODcxLDQ0ODc0LDQ0ODc1LDQ0ODc2LDQ0ODc3LDQ0''@;'; put 'put ''ODc4LDQ0ODc5LDQ0ODgxLDQ0ODgyLDQ0ODgzLDQ0ODg0LDQ0ODg1LDQ0ODg2LDQ0ODg3LDQ0ODg4LDQ0ODg5LDQ0ODkwLDQ0ODkxLDQ0ODk0LDQ0ODk1LDQ0ODk2LDQ0ODk3LDQ0ODk4LDQ0ODk5LDQ0OTAyLDQ0OTAzLDQ0OTA0LDQ0OTA1LDQ0OTA2LDQ0OTA3LDQ0OTA4LDQ0OTA5LDQ0OTEw''@;'; put 'put ''LDQ0OTExLDQ0OTEyLDQ0OTEzLDQ0OTE0LDQ0OTE1LDQ0OTE2LDQ0OTE3LDQ0OTE4LDQ0OTE5LDQ0OTIwLDQ0OTIyLDQ0OTIzLDQ0OTI0LDQ0OTI1LDQ0OTI2LDQ0OTI3LDQ0OTI5LDQ0OTMwLDQ0OTMxLDQ0OTMzLDQ0OTM0LDQ0OTM1LDQ0OTM3LDQ0OTM4LDQ0OTM5LDQ0OTQwLDQ0OTQxLDQ0''@;'; put 'put ''OTQyLDQ0OTQzLDQ0OTQ2LDQ0OTQ3LDQ0OTQ4LDQ0OTUwLDQ0OTUxLDQ0OTUyLDQ0OTUzLDQ0OTU0LDQ0OTU1LDQ0OTU3LDQ0OTU4LDQ0OTU5LDQ0OTYwLDQ0OTYxLDQ0OTYyLDQ0OTYzLDQ0OTY0LDQ0OTY1LDQ0OTY2LDQ0OTY3LDQ0OTY4LDQ0OTY5LDQ0OTcwLDQ0OTcxLDQ0OTcyLDQ0OTcz''@;'; put 'put ''LDQ0OTc0LDQ0OTc1LDQ0OTc2LDQ0OTc3LDQ0OTc4LDQ0OTc5LDQ0OTgwLDQ0OTgxLDQ0OTgyLDQ0OTgzLDQ0OTg2LDQ0OTg3LDQ0OTg5LDQ0OTkwLDQ0OTkxLDQ0OTkzLDQ0OTk0LDQ0OTk1LDQ0OTk2LDQ0OTk3LDQ0OTk4LDQ1MDAyLDQ1MDA0LDQ1MDA3LDQ1MDA4LDQ1MDA5LDQ1MDEwLDQ1''@;'; put 'put ''MDExLDQ1MDEzLDQ1MDE0LDQ1MDE1LDQ1MDE2LDQ1MDE3LDQ1MDE4LDQ1MDE5LDQ1MDIxLDQ1MDIyLDQ1MDIzLDQ1MDI0LDQ1MDI1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1MDI2LDQ1MDI3LDQ1MDI4LDQ1MDI5LDQ1MDMwLDQ1MDMxLDQ1MDM0LDQ1MDM1LDQ1MDM2LDQ1MDM3''@;'; put 'put ''LDQ1MDM4LDQ1MDM5LDQ1MDQyLDQ1MDQzLDQ1MDQ1LDQ1MDQ2LDQ1MDQ3LDQ1MDQ5LDQ1MDUwLDQ1MDUxLDQ1MDUyLDQ1MDUzLDQ1MDU0LDQ1MDU1LDQ1MDU4LDQ1MDU5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1MDYxLDQ1MDYyLDQ1MDYzLDQ1MDY0LDQ1MDY1LDQ1MDY2LDQ1''@;'; put 'put ''MDY3LDQ1MDY5LDQ1MDcwLDQ1MDcxLDQ1MDczLDQ1MDc0LDQ1MDc1LDQ1MDc3LDQ1MDc4LDQ1MDc5LDQ1MDgwLDQ1MDgxLDQ1MDgyLDQ1MDgzLDQ1MDg2LDQ1MDg3LDQ1MDg4LDQ1MDg5LDQ1MDkwLDQ1MDkxLDQ1MDkyLDQ1MDkzLDQ1MDk0LDQ1MDk1LDQ1MDk3LDQ1MDk4LDQ1MDk5LDQ1MTAw''@;'; put 'put ''LDQ1MTAxLDQ1MTAyLDQ1MTAzLDQ1MTA0LDQ1MTA1LDQ1MTA2LDQ1MTA3LDQ1MTA4LDQ1MTA5LDQ1MTEwLDQ1MTExLDQ1MTEyLDQ1MTEzLDQ1MTE0LDQ1MTE1LDQ1MTE2LDQ1MTE3LDQ1MTE4LDQ1MTE5LDQ1MTIwLDQ1MTIxLDQ1MTIyLDQ1MTIzLDQ1MTI2LDQ1MTI3LDQ1MTI5LDQ1MTMxLDQ1''@;'; put 'put ''MTMzLDQ1MTM1LDQ1MTM2LDQ1MTM3LDQ1MTM4LDQ1MTQyLDQ1MTQ0LDQ1MTQ2LDQ1MTQ3LDQ1MTQ4LDQ1MTUwLDQ1MTUxLDQ1MTUyLDQ1MTUzLDQ1MTU0LDQ1MTU1LDQ1MTU2LDQ1MTU3LDQ1MTU4LDQ1MTU5LDQ1MTYwLDQ1MTYxLDQ1MTYyLDQ1MTYzLDQ1MTY0LDQ1MTY1LDQ1MTY2LDQ1MTY3''@;'; put 'put ''LDQ1MTY4LDQ1MTY5LDQ1MTcwLDQ1MTcxLDQ1MTcyLDQ1MTczLDQ1MTc0LDQ1MTc1LDQ1MTc2LDQ1MTc3LDQ1MTc4LDQ1MTc5LDQ1MTgyLDQ1MTgzLDQ1MTg1LDQ1MTg2LDQ1MTg3LDQ1MTg5LDQ1MTkwLDQ1MTkxLDQ1MTkyLDQ1MTkzLDQ1MTk0LDQ1MTk1LDQ1MTk4LDQ1MjAwLDQ1MjAyLDQ1''@;'; put 'put ''MjAzLDQ1MjA0LDQ1MjA1LDQ1MjA2LDQ1MjA3LDQ1MjExLDQ1MjEzLDQ1MjE0LDQ1MjE5LDQ1MjIwLDQ1MjIxLDQ1MjIyLDQ1MjIzLDQ1MjI2LDQ1MjMyLDQ1MjM0LDQ1MjM4LDQ1MjM5LDQ1MjQxLDQ1MjQyLDQ1MjQzLDQ1MjQ1LDQ1MjQ2LDQ1MjQ3LDQ1MjQ4LDQ1MjQ5LDQ1MjUwLDQ1MjUx''@;'; put 'put ''LDQ1MjU0LDQ1MjU4LDQ1MjU5LDQ1MjYwLDQ1MjYxLDQ1MjYyLDQ1MjYzLDQ1MjY2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1MjY3LDQ1MjY5LDQ1MjcwLDQ1MjcxLDQ1MjczLDQ1Mjc0LDQ1Mjc1LDQ1Mjc2LDQ1Mjc3LDQ1Mjc4LDQ1Mjc5LDQ1MjgxLDQ1MjgyLDQ1MjgzLDQ1''@;'; put 'put ''Mjg0LDQ1Mjg2LDQ1Mjg3LDQ1Mjg4LDQ1Mjg5LDQ1MjkwLDQ1MjkxLDQ1MjkyLDQ1MjkzLDQ1Mjk0LDQ1Mjk1LDQ1Mjk2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1Mjk3LDQ1Mjk4LDQ1Mjk5LDQ1MzAwLDQ1MzAxLDQ1MzAyLDQ1MzAzLDQ1MzA0LDQ1MzA1LDQ1MzA2LDQ1MzA3''@;'; put 'put ''LDQ1MzA4LDQ1MzA5LDQ1MzEwLDQ1MzExLDQ1MzEyLDQ1MzEzLDQ1MzE0LDQ1MzE1LDQ1MzE2LDQ1MzE3LDQ1MzE4LDQ1MzE5LDQ1MzIyLDQ1MzI1LDQ1MzI2LDQ1MzI3LDQ1MzI5LDQ1MzMyLDQ1MzMzLDQ1MzM0LDQ1MzM1LDQ1MzM4LDQ1MzQyLDQ1MzQzLDQ1MzQ0LDQ1MzQ1LDQ1MzQ2LDQ1''@;'; put 'put ''MzUwLDQ1MzUxLDQ1MzUzLDQ1MzU0LDQ1MzU1LDQ1MzU3LDQ1MzU4LDQ1MzU5LDQ1MzYwLDQ1MzYxLDQ1MzYyLDQ1MzYzLDQ1MzY2LDQ1MzcwLDQ1MzcxLDQ1MzcyLDQ1MzczLDQ1Mzc0LDQ1Mzc1LDQ1Mzc4LDQ1Mzc5LDQ1MzgxLDQ1MzgyLDQ1MzgzLDQ1Mzg1LDQ1Mzg2LDQ1Mzg3LDQ1Mzg4''@;'; put 'put ''LDQ1Mzg5LDQ1MzkwLDQ1MzkxLDQ1Mzk0LDQ1Mzk1LDQ1Mzk4LDQ1Mzk5LDQ1NDAxLDQ1NDAyLDQ1NDAzLDQ1NDA1LDQ1NDA2LDQ1NDA3LDQ1NDA5LDQ1NDEwLDQ1NDExLDQ1NDEyLDQ1NDEzLDQ1NDE0LDQ1NDE1LDQ1NDE2LDQ1NDE3LDQ1NDE4LDQ1NDE5LDQ1NDIwLDQ1NDIxLDQ1NDIyLDQ1''@;'; put 'put ''NDIzLDQ1NDI0LDQ1NDI1LDQ1NDI2LDQ1NDI3LDQ1NDI4LDQ1NDI5LDQ1NDMwLDQ1NDMxLDQ1NDM0LDQ1NDM1LDQ1NDM3LDQ1NDM4LDQ1NDM5LDQ1NDQxLDQ1NDQzLDQ1NDQ0LDQ1NDQ1LDQ1NDQ2LDQ1NDQ3LDQ1NDUwLDQ1NDUyLDQ1NDU0LDQ1NDU1LDQ1NDU2LDQ1NDU3LDQ1NDYxLDQ1NDYy''@;'; put 'put ''LDQ1NDYzLDQ1NDY1LDQ1NDY2LDQ1NDY3LDQ1NDY5LDQ1NDcwLDQ1NDcxLDQ1NDcyLDQ1NDczLDQ1NDc0LDQ1NDc1LDQ1NDc2LDQ1NDc3LDQ1NDc4LDQ1NDc5LDQ1NDgxLDQ1NDgyLDQ1NDgzLDQ1NDg0LDQ1NDg1LDQ1NDg2LDQ1NDg3LDQ1NDg4LDQ1NDg5LDQ1NDkwLDQ1NDkxLDQ1NDkyLDQ1''@;'; put 'put ''NDkzLDQ1NDk0LDQ1NDk1LDQ1NDk2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1NDk3LDQ1NDk4LDQ1NDk5LDQ1NTAwLDQ1NTAxLDQ1NTAyLDQ1NTAzLDQ1NTA0LDQ1NTA1LDQ1NTA2LDQ1NTA3LDQ1NTA4LDQ1NTA5LDQ1NTEwLDQ1NTExLDQ1NTEyLDQ1NTEzLDQ1NTE0LDQ1NTE1''@;'; put 'put ''LDQ1NTE3LDQ1NTE4LDQ1NTE5LDQ1NTIxLDQ1NTIyLDQ1NTIzLDQ1NTI1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1NTI2LDQ1NTI3LDQ1NTI4LDQ1NTI5LDQ1NTMwLDQ1NTMxLDQ1NTM0LDQ1NTM2LDQ1NTM3LDQ1NTM4LDQ1NTM5LDQ1NTQwLDQ1NTQxLDQ1NTQyLDQ1NTQzLDQ1''@;'; put 'put ''NTQ2LDQ1NTQ3LDQ1NTQ5LDQ1NTUwLDQ1NTUxLDQ1NTUzLDQ1NTU0LDQ1NTU1LDQ1NTU2LDQ1NTU3LDQ1NTU4LDQ1NTU5LDQ1NTYwLDQ1NTYyLDQ1NTY0LDQ1NTY2LDQ1NTY3LDQ1NTY4LDQ1NTY5LDQ1NTcwLDQ1NTcxLDQ1NTc0LDQ1NTc1LDQ1NTc3LDQ1NTc4LDQ1NTgxLDQ1NTgyLDQ1NTgz''@;'; put 'put ''LDQ1NTg0LDQ1NTg1LDQ1NTg2LDQ1NTg3LDQ1NTkwLDQ1NTkyLDQ1NTk0LDQ1NTk1LDQ1NTk2LDQ1NTk3LDQ1NTk4LDQ1NTk5LDQ1NjAxLDQ1NjAyLDQ1NjAzLDQ1NjA0LDQ1NjA1LDQ1NjA2LDQ1NjA3LDQ1NjA4LDQ1NjA5LDQ1NjEwLDQ1NjExLDQ1NjEyLDQ1NjEzLDQ1NjE0LDQ1NjE1LDQ1''@;'; put 'put ''NjE2LDQ1NjE3LDQ1NjE4LDQ1NjE5LDQ1NjIxLDQ1NjIyLDQ1NjIzLDQ1NjI0LDQ1NjI1LDQ1NjI2LDQ1NjI3LDQ1NjI5LDQ1NjMwLDQ1NjMxLDQ1NjMyLDQ1NjMzLDQ1NjM0LDQ1NjM1LDQ1NjM2LDQ1NjM3LDQ1NjM4LDQ1NjM5LDQ1NjQwLDQ1NjQxLDQ1NjQyLDQ1NjQzLDQ1NjQ0LDQ1NjQ1''@;'; put 'put ''LDQ1NjQ2LDQ1NjQ3LDQ1NjQ4LDQ1NjQ5LDQ1NjUwLDQ1NjUxLDQ1NjUyLDQ1NjUzLDQ1NjU0LDQ1NjU1LDQ1NjU3LDQ1NjU4LDQ1NjU5LDQ1NjYxLDQ1NjYyLDQ1NjYzLDQ1NjY1LDQ1NjY2LDQ1NjY3LDQ1NjY4LDQ1NjY5LDQ1NjcwLDQ1NjcxLDQ1Njc0LDQ1Njc1LDQ1Njc2LDQ1Njc3LDQ1''@;'; put 'put ''Njc4LDQ1Njc5LDQ1NjgwLDQ1NjgxLDQ1NjgyLDQ1NjgzLDQ1Njg2LDQ1Njg3LDQ1Njg4LDQ1Njg5LDQ1NjkwLDQ1NjkxLDQ1NjkzLDQ1Njk0LDQ1Njk1LDQ1Njk2LDQ1Njk3LDQ1Njk4LDQ1Njk5LDQ1NzAyLDQ1NzAzLDQ1NzA0LDQ1NzA2LDQ1NzA3LDQ1NzA4LDQ1NzA5LDQ1NzEwLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1NzExLDQ1NzE0LDQ1NzE1LDQ1NzE3LDQ1NzE4LDQ1NzE5LDQ1NzIzLDQ1NzI0LDQ1NzI1LDQ1NzI2LDQ1NzI3LDQ1NzMwLDQ1NzMyLDQ1NzM1LDQ1NzM2LDQ1NzM3LDQ1NzM5LDQ1NzQxLDQ1NzQyLDQ1NzQzLDQ1NzQ1LDQ1NzQ2LDQ1NzQ3LDQ1''@;'; put 'put ''NzQ5LDQ1NzUwLDQ1NzUxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1NzUyLDQ1NzUzLDQ1NzU0LDQ1NzU1LDQ1NzU2LDQ1NzU3LDQ1NzU4LDQ1NzU5LDQ1NzYwLDQ1NzYxLDQ1NzYyLDQ1NzYzLDQ1NzY0LDQ1NzY1LDQ1NzY2LDQ1NzY3LDQ1NzcwLDQ1NzcxLDQ1NzczLDQ1Nzc0''@;'; put 'put ''LDQ1Nzc1LDQ1Nzc3LDQ1Nzc5LDQ1NzgwLDQ1NzgxLDQ1NzgyLDQ1NzgzLDQ1Nzg2LDQ1Nzg4LDQ1NzkwLDQ1NzkxLDQ1NzkyLDQ1NzkzLDQ1Nzk1LDQ1Nzk5LDQ1ODAxLDQ1ODAyLDQ1ODA4LDQ1ODA5LDQ1ODEwLDQ1ODE0LDQ1ODIwLDQ1ODIxLDQ1ODIyLDQ1ODI2LDQ1ODI3LDQ1ODI5LDQ1''@;'; put 'put ''ODMwLDQ1ODMxLDQ1ODMzLDQ1ODM0LDQ1ODM1LDQ1ODM2LDQ1ODM3LDQ1ODM4LDQ1ODM5LDQ1ODQyLDQ1ODQ2LDQ1ODQ3LDQ1ODQ4LDQ1ODQ5LDQ1ODUwLDQ1ODUxLDQ1ODUzLDQ1ODU0LDQ1ODU1LDQ1ODU2LDQ1ODU3LDQ1ODU4LDQ1ODU5LDQ1ODYwLDQ1ODYxLDQ1ODYyLDQ1ODYzLDQ1ODY0''@;'; put 'put ''LDQ1ODY1LDQ1ODY2LDQ1ODY3LDQ1ODY4LDQ1ODY5LDQ1ODcwLDQ1ODcxLDQ1ODcyLDQ1ODczLDQ1ODc0LDQ1ODc1LDQ1ODc2LDQ1ODc3LDQ1ODc4LDQ1ODc5LDQ1ODgwLDQ1ODgxLDQ1ODgyLDQ1ODgzLDQ1ODg0LDQ1ODg1LDQ1ODg2LDQ1ODg3LDQ1ODg4LDQ1ODg5LDQ1ODkwLDQ1ODkxLDQ1''@;'; put 'put ''ODkyLDQ1ODkzLDQ1ODk0LDQ1ODk1LDQ1ODk2LDQ1ODk3LDQ1ODk4LDQ1ODk5LDQ1OTAwLDQ1OTAxLDQ1OTAyLDQ1OTAzLDQ1OTA0LDQ1OTA1LDQ1OTA2LDQ1OTA3LDQ1OTExLDQ1OTEzLDQ1OTE0LDQ1OTE3LDQ1OTIwLDQ1OTIxLDQ1OTIyLDQ1OTIzLDQ1OTI2LDQ1OTI4LDQ1OTMwLDQ1OTMy''@;'; put 'put ''LDQ1OTMzLDQ1OTM1LDQ1OTM4LDQ1OTM5LDQ1OTQxLDQ1OTQyLDQ1OTQzLDQ1OTQ1LDQ1OTQ2LDQ1OTQ3LDQ1OTQ4LDQ1OTQ5LDQ1OTUwLDQ1OTUxLDQ1OTU0LDQ1OTU4LDQ1OTU5LDQ1OTYwLDQ1OTYxLDQ1OTYyLDQ1OTYzLDQ1OTY1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1''@;'; put 'put ''OTY2LDQ1OTY3LDQ1OTY5LDQ1OTcwLDQ1OTcxLDQ1OTczLDQ1OTc0LDQ1OTc1LDQ1OTc2LDQ1OTc3LDQ1OTc4LDQ1OTc5LDQ1OTgwLDQ1OTgxLDQ1OTgyLDQ1OTgzLDQ1OTg2LDQ1OTg3LDQ1OTg4LDQ1OTg5LDQ1OTkwLDQ1OTkxLDQ1OTkzLDQ1OTk0LDQ1OTk1LDQ1OTk3LG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLDQ1OTk4LDQ1OTk5LDQ2ZTMsNDYwMDEsNDYwMDIsNDYwMDMsNDYwMDQsNDYwMDUsNDYwMDYsNDYwMDcsNDYwMDgsNDYwMDksNDYwMTAsNDYwMTEsNDYwMTIsNDYwMTMsNDYwMTQsNDYwMTUsNDYwMTYsNDYwMTcsNDYwMTgsNDYwMTksNDYwMjIsNDYwMjMsNDYw''@;'; put 'put ''MjUsNDYwMjYsNDYwMjksNDYwMzEsNDYwMzMsNDYwMzQsNDYwMzUsNDYwMzgsNDYwNDAsNDYwNDIsNDYwNDQsNDYwNDYsNDYwNDcsNDYwNDksNDYwNTAsNDYwNTEsNDYwNTMsNDYwNTQsNDYwNTUsNDYwNTcsNDYwNTgsNDYwNTksNDYwNjAsNDYwNjEsNDYwNjIsNDYwNjMsNDYwNjQsNDYwNjUs''@;'; put 'put ''NDYwNjYsNDYwNjcsNDYwNjgsNDYwNjksNDYwNzAsNDYwNzEsNDYwNzIsNDYwNzMsNDYwNzQsNDYwNzUsNDYwNzcsNDYwNzgsNDYwNzksNDYwODAsNDYwODEsNDYwODIsNDYwODMsNDYwODQsNDYwODUsNDYwODYsNDYwODcsNDYwODgsNDYwODksNDYwOTAsNDYwOTEsNDYwOTIsNDYwOTMsNDYw''@;'; put 'put ''OTQsNDYwOTUsNDYwOTcsNDYwOTgsNDYwOTksNDYxMDAsNDYxMDEsNDYxMDIsNDYxMDMsNDYxMDUsNDYxMDYsNDYxMDcsNDYxMDksNDYxMTAsNDYxMTEsNDYxMTMsNDYxMTQsNDYxMTUsNDYxMTYsNDYxMTcsNDYxMTgsNDYxMTksNDYxMjIsNDYxMjQsNDYxMjUsNDYxMjYsNDYxMjcsNDYxMjgs''@;'; put 'put ''NDYxMjksNDYxMzAsNDYxMzEsNDYxMzMsNDYxMzQsNDYxMzUsNDYxMzYsNDYxMzcsNDYxMzgsNDYxMzksNDYxNDAsNDYxNDEsNDYxNDIsNDYxNDMsNDYxNDQsNDYxNDUsNDYxNDYsNDYxNDcsNDYxNDgsNDYxNDksNDYxNTAsNDYxNTEsNDYxNTIsNDYxNTMsNDYxNTQsNDYxNTUsNDYxNTYsNDYx''@;'; put 'put ''NTcsNDYxNTgsNDYxNTksNDYxNjIsNDYxNjMsNDYxNjUsNDYxNjYsNDYxNjcsNDYxNjksNDYxNzAsNDYxNzEsNDYxNzIsNDYxNzMsNDYxNzQsNDYxNzUsNDYxNzgsNDYxODAsNDYxODIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDYxODMsNDYxODQsNDYxODUsNDYxODYsNDYxODcs''@;'; put 'put ''NDYxODksNDYxOTAsNDYxOTEsNDYxOTIsNDYxOTMsNDYxOTQsNDYxOTUsNDYxOTYsNDYxOTcsNDYxOTgsNDYxOTksNDYyMDAsNDYyMDEsNDYyMDIsNDYyMDMsNDYyMDQsNDYyMDUsNDYyMDYsNDYyMDcsNDYyMDksNDYyMTAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDYyMTEsNDYy''@;'; put 'put ''MTIsNDYyMTMsNDYyMTQsNDYyMTUsNDYyMTcsNDYyMTgsNDYyMTksNDYyMjAsNDYyMjEsNDYyMjIsNDYyMjMsNDYyMjQsNDYyMjUsNDYyMjYsNDYyMjcsNDYyMjgsNDYyMjksNDYyMzAsNDYyMzEsNDYyMzIsNDYyMzMsNDYyMzQsNDYyMzUsNDYyMzYsNDYyMzgsNDYyMzksNDYyNDAsNDYyNDEs''@;'; put 'put ''NDYyNDIsNDYyNDMsNDYyNDUsNDYyNDYsNDYyNDcsNDYyNDksNDYyNTAsNDYyNTEsNDYyNTMsNDYyNTQsNDYyNTUsNDYyNTYsNDYyNTcsNDYyNTgsNDYyNTksNDYyNjAsNDYyNjIsNDYyNjQsNDYyNjYsNDYyNjcsNDYyNjgsNDYyNjksNDYyNzAsNDYyNzEsNDYyNzMsNDYyNzQsNDYyNzUsNDYy''@;'; put 'put ''NzcsNDYyNzgsNDYyNzksNDYyODEsNDYyODIsNDYyODMsNDYyODQsNDYyODUsNDYyODYsNDYyODcsNDYyODksNDYyOTAsNDYyOTEsNDYyOTIsNDYyOTQsNDYyOTUsNDYyOTYsNDYyOTcsNDYyOTgsNDYyOTksNDYzMDIsNDYzMDMsNDYzMDUsNDYzMDYsNDYzMDksNDYzMTEsNDYzMTIsNDYzMTMs''@;'; put 'put ''NDYzMTQsNDYzMTUsNDYzMTgsNDYzMjAsNDYzMjIsNDYzMjMsNDYzMjQsNDYzMjUsNDYzMjYsNDYzMjcsNDYzMjksNDYzMzAsNDYzMzEsNDYzMzIsNDYzMzMsNDYzMzQsNDYzMzUsNDYzMzYsNDYzMzcsNDYzMzgsNDYzMzksNDYzNDAsNDYzNDEsNDYzNDIsNDYzNDMsNDYzNDQsNDYzNDUsNDYz''@;'; put 'put ''NDYsNDYzNDcsNDYzNDgsNDYzNDksNDYzNTAsNDYzNTEsNDYzNTIsNDYzNTMsNDYzNTQsNDYzNTUsNDYzNTgsNDYzNTksNDYzNjEsNDYzNjIsNDYzNjUsNDYzNjYsNDYzNjcsNDYzNjgsNDYzNjksNDYzNzAsNDYzNzEsNDYzNzQsNDYzNzksNDYzODAsNDYzODEsNDYzODIsNDYzODMsNDYzODYs''@;'; put 'put ''NDYzODcsNDYzODksNDYzOTAsNDYzOTEsNDYzOTMsNDYzOTQsNDYzOTUsNDYzOTYsNDYzOTcsNDYzOTgsNDYzOTksNDY0MDIsNDY0MDYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDY0MDcsNDY0MDgsNDY0MDksNDY0MTAsNDY0MTQsNDY0MTUsNDY0MTcsNDY0MTgsNDY0MTksNDY0''@;'; put 'put ''MjEsNDY0MjIsNDY0MjMsNDY0MjQsNDY0MjUsNDY0MjYsNDY0MjcsNDY0MzAsNDY0MzQsNDY0MzUsNDY0MzYsNDY0MzcsNDY0MzgsNDY0MzksNDY0NDAsNDY0NDEsNDY0NDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDY0NDMsNDY0NDQsNDY0NDUsNDY0NDYsNDY0NDcsNDY0NDgs''@;'; put 'put ''NDY0NDksNDY0NTAsNDY0NTEsNDY0NTIsNDY0NTMsNDY0NTQsNDY0NTUsNDY0NTYsNDY0NTcsNDY0NTgsNDY0NTksNDY0NjAsNDY0NjEsNDY0NjIsNDY0NjMsNDY0NjQsNDY0NjUsNDY0NjYsNDY0NjcsNDY0NjgsNDY0NjksNDY0NzAsNDY0NzEsNDY0NzIsNDY0NzMsNDY0NzQsNDY0NzUsNDY0''@;'; put 'put ''NzYsNDY0NzcsNDY0NzgsNDY0NzksNDY0ODAsNDY0ODEsNDY0ODIsNDY0ODMsNDY0ODQsNDY0ODUsNDY0ODYsNDY0ODcsNDY0ODgsNDY0ODksNDY0OTAsNDY0OTEsNDY0OTIsNDY0OTMsNDY0OTQsNDY0OTUsNDY0OTgsNDY0OTksNDY1MDEsNDY1MDIsNDY1MDMsNDY1MDUsNDY1MDgsNDY1MDks''@;'; put 'put ''NDY1MTAsNDY1MTEsNDY1MTQsNDY1MTgsNDY1MTksNDY1MjAsNDY1MjEsNDY1MjIsNDY1MjYsNDY1MjcsNDY1MjksNDY1MzAsNDY1MzEsNDY1MzMsNDY1MzQsNDY1MzUsNDY1MzYsNDY1MzcsNDY1MzgsNDY1MzksNDY1NDIsNDY1NDYsNDY1NDcsNDY1NDgsNDY1NDksNDY1NTAsNDY1NTEsNDY1''@;'; put 'put ''NTMsNDY1NTQsNDY1NTUsNDY1NTYsNDY1NTcsNDY1NTgsNDY1NTksNDY1NjAsNDY1NjEsNDY1NjIsNDY1NjMsNDY1NjQsNDY1NjUsNDY1NjYsNDY1NjcsNDY1NjgsNDY1NjksNDY1NzAsNDY1NzEsNDY1NzMsNDY1NzQsNDY1NzUsNDY1NzYsNDY1NzcsNDY1NzgsNDY1NzksNDY1ODAsNDY1ODEs''@;'; put 'put ''NDY1ODIsNDY1ODMsNDY1ODQsNDY1ODUsNDY1ODYsNDY1ODcsNDY1ODgsNDY1ODksNDY1OTAsNDY1OTEsNDY1OTIsNDY1OTMsNDY1OTQsNDY1OTUsNDY1OTYsNDY1OTcsNDY1OTgsNDY1OTksNDY2MDAsNDY2MDEsNDY2MDIsNDY2MDMsNDY2MDQsNDY2MDUsNDY2MDYsNDY2MDcsNDY2MTAsNDY2''@;'; put 'put ''MTEsNDY2MTMsNDY2MTQsNDY2MTUsNDY2MTcsNDY2MTgsNDY2MTksNDY2MjAsNDY2MjEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDY2MjIsNDY2MjMsNDY2MjQsNDY2MjUsNDY2MjYsNDY2MjcsNDY2MjgsNDY2MzAsNDY2MzEsNDY2MzIsNDY2MzMsNDY2MzQsNDY2MzUsNDY2Mzcs''@;'; put 'put ''NDY2MzgsNDY2MzksNDY2NDAsNDY2NDEsNDY2NDIsNDY2NDMsNDY2NDUsNDY2NDYsNDY2NDcsNDY2NDgsNDY2NDksNDY2NTAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDY2NTEsNDY2NTIsNDY2NTMsNDY2NTQsNDY2NTUsNDY2NTYsNDY2NTcsNDY2NTgsNDY2NTksNDY2NjAsNDY2''@;'; put 'put ''NjEsNDY2NjIsNDY2NjMsNDY2NjUsNDY2NjYsNDY2NjcsNDY2NjgsNDY2NjksNDY2NzAsNDY2NzEsNDY2NzIsNDY2NzMsNDY2NzQsNDY2NzUsNDY2NzYsNDY2NzcsNDY2NzgsNDY2NzksNDY2ODAsNDY2ODEsNDY2ODIsNDY2ODMsNDY2ODQsNDY2ODUsNDY2ODYsNDY2ODcsNDY2ODgsNDY2ODks''@;'; put 'put ''NDY2OTAsNDY2OTEsNDY2OTMsNDY2OTQsNDY2OTUsNDY2OTcsNDY2OTgsNDY2OTksNDY3MDAsNDY3MDEsNDY3MDIsNDY3MDMsNDY3MDQsNDY3MDUsNDY3MDYsNDY3MDcsNDY3MDgsNDY3MDksNDY3MTAsNDY3MTEsNDY3MTIsNDY3MTMsNDY3MTQsNDY3MTUsNDY3MTYsNDY3MTcsNDY3MTgsNDY3''@;'; put 'put ''MTksNDY3MjAsNDY3MjEsNDY3MjIsNDY3MjMsNDY3MjQsNDY3MjUsNDY3MjYsNDY3MjcsNDY3MjgsNDY3MjksNDY3MzAsNDY3MzEsNDY3MzIsNDY3MzMsNDY3MzQsNDY3MzUsNDY3MzYsNDY3MzcsNDY3MzgsNDY3MzksNDY3NDAsNDY3NDEsNDY3NDIsNDY3NDMsNDY3NDQsNDY3NDUsNDY3NDYs''@;'; put 'put ''NDY3NDcsNDY3NTAsNDY3NTEsNDY3NTMsNDY3NTQsNDY3NTUsNDY3NTcsNDY3NTgsNDY3NTksNDY3NjAsNDY3NjEsNDY3NjIsNDY3NjUsNDY3NjYsNDY3NjcsNDY3NjgsNDY3NzAsNDY3NzEsNDY3NzIsNDY3NzMsNDY3NzQsNDY3NzUsNDY3NzYsNDY3NzcsNDY3NzgsNDY3NzksNDY3ODAsNDY3''@;'; put 'put ''ODEsNDY3ODIsNDY3ODMsNDY3ODQsNDY3ODUsNDY3ODYsNDY3ODcsNDY3ODgsNDY3ODksNDY3OTAsNDY3OTEsNDY3OTIsNDY3OTMsNDY3OTQsNDY3OTUsNDY3OTYsNDY3OTcsNDY3OTgsNDY3OTksNDY4MDAsNDY4MDEsNDY4MDIsNDY4MDMsNDY4MDUsNDY4MDYsNDY4MDcsNDY4MDgsNDY4MDks''@;'; put 'put ''NDY4MTAsNDY4MTEsNDY4MTIsNDY4MTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDY4MTQsNDY4MTUsNDY4MTYsNDY4MTcsNDY4MTgsNDY4MTksNDY4MjAsNDY4MjEsNDY4MjIsNDY4MjMsNDY4MjQsNDY4MjUsNDY4MjYsNDY4MjcsNDY4MjgsNDY4MjksNDY4MzAsNDY4MzEsNDY4''@;'; put 'put ''MzMsNDY4MzQsNDY4MzUsNDY4MzcsNDY4MzgsNDY4MzksNDY4NDEsNDY4NDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDY4NDMsNDY4NDQsNDY4NDUsNDY4NDYsNDY4NDcsNDY4NTAsNDY4NTEsNDY4NTIsNDY4NTQsNDY4NTUsNDY4NTYsNDY4NTcsNDY4NTgsNDY4NTksNDY4NjAs''@;'; put 'put ''NDY4NjEsNDY4NjIsNDY4NjMsNDY4NjQsNDY4NjUsNDY4NjYsNDY4NjcsNDY4NjgsNDY4NjksNDY4NzAsNDY4NzEsNDY4NzIsNDY4NzMsNDY4NzQsNDY4NzUsNDY4NzYsNDY4NzcsNDY4NzgsNDY4NzksNDY4ODAsNDY4ODEsNDY4ODIsNDY4ODMsNDY4ODQsNDY4ODUsNDY4ODYsNDY4ODcsNDY4''@;'; put 'put ''OTAsNDY4OTEsNDY4OTMsNDY4OTQsNDY4OTcsNDY4OTgsNDY4OTksNDY5MDAsNDY5MDEsNDY5MDIsNDY5MDMsNDY5MDYsNDY5MDgsNDY5MDksNDY5MTAsNDY5MTEsNDY5MTIsNDY5MTMsNDY5MTQsNDY5MTUsNDY5MTcsNDY5MTgsNDY5MTksNDY5MjEsNDY5MjIsNDY5MjMsNDY5MjUsNDY5MjYs''@;'; put 'put ''NDY5MjcsNDY5MjgsNDY5MjksNDY5MzAsNDY5MzEsNDY5MzQsNDY5MzUsNDY5MzYsNDY5MzcsNDY5MzgsNDY5MzksNDY5NDAsNDY5NDEsNDY5NDIsNDY5NDMsNDY5NDUsNDY5NDYsNDY5NDcsNDY5NDksNDY5NTAsNDY5NTEsNDY5NTMsNDY5NTQsNDY5NTUsNDY5NTYsNDY5NTcsNDY5NTgsNDY5''@;'; put 'put ''NTksNDY5NjIsNDY5NjQsNDY5NjYsNDY5NjcsNDY5NjgsNDY5NjksNDY5NzAsNDY5NzEsNDY5NzQsNDY5NzUsNDY5NzcsNDY5NzgsNDY5NzksNDY5ODEsNDY5ODIsNDY5ODMsNDY5ODQsNDY5ODUsNDY5ODYsNDY5ODcsNDY5OTAsNDY5OTUsNDY5OTYsNDY5OTcsNDcwMDIsNDcwMDMsNDcwMDUs''@;'; put 'put ''NDcwMDYsNDcwMDcsNDcwMDksNDcwMTAsNDcwMTEsNDcwMTIsNDcwMTMsNDcwMTQsNDcwMTUsNDcwMTgsNDcwMjIsNDcwMjMsNDcwMjQsNDcwMjUsNDcwMjYsNDcwMjcsNDcwMzAsNDcwMzEsNDcwMzMsNDcwMzQsNDcwMzUsNDcwMzYsNDcwMzcsNDcwMzgsNDcwMzksNDcwNDAsNDcwNDEsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDcwNDIsNDcwNDMsNDcwNDQsNDcwNDUsNDcwNDYsNDcwNDgsNDcwNTAsNDcwNTEsNDcwNTIsNDcwNTMsNDcwNTQsNDcwNTUsNDcwNTYsNDcwNTcsNDcwNTgsNDcwNTksNDcwNjAsNDcwNjEsNDcwNjIsNDcwNjMsNDcwNjQsNDcwNjUsNDcwNjYs''@;'; put 'put ''NDcwNjcsNDcwNjgsNDcwNjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDcwNzAsNDcwNzEsNDcwNzIsNDcwNzMsNDcwNzQsNDcwNzUsNDcwNzYsNDcwNzcsNDcwNzgsNDcwNzksNDcwODAsNDcwODEsNDcwODIsNDcwODMsNDcwODYsNDcwODcsNDcwODksNDcwOTAsNDcwOTEsNDcw''@;'; put 'put ''OTMsNDcwOTQsNDcwOTUsNDcwOTYsNDcwOTcsNDcwOTgsNDcwOTksNDcxMDIsNDcxMDYsNDcxMDcsNDcxMDgsNDcxMDksNDcxMTAsNDcxMTQsNDcxMTUsNDcxMTcsNDcxMTgsNDcxMTksNDcxMjEsNDcxMjIsNDcxMjMsNDcxMjQsNDcxMjUsNDcxMjYsNDcxMjcsNDcxMzAsNDcxMzIsNDcxMzQs''@;'; put 'put ''NDcxMzUsNDcxMzYsNDcxMzcsNDcxMzgsNDcxMzksNDcxNDIsNDcxNDMsNDcxNDUsNDcxNDYsNDcxNDcsNDcxNDksNDcxNTAsNDcxNTEsNDcxNTIsNDcxNTMsNDcxNTQsNDcxNTUsNDcxNTgsNDcxNjIsNDcxNjMsNDcxNjQsNDcxNjUsNDcxNjYsNDcxNjcsNDcxNjksNDcxNzAsNDcxNzEsNDcx''@;'; put 'put ''NzMsNDcxNzQsNDcxNzUsNDcxNzYsNDcxNzcsNDcxNzgsNDcxNzksNDcxODAsNDcxODEsNDcxODIsNDcxODMsNDcxODQsNDcxODYsNDcxODgsNDcxODksNDcxOTAsNDcxOTEsNDcxOTIsNDcxOTMsNDcxOTQsNDcxOTUsNDcxOTgsNDcxOTksNDcyMDEsNDcyMDIsNDcyMDMsNDcyMDUsNDcyMDYs''@;'; put 'put ''NDcyMDcsNDcyMDgsNDcyMDksNDcyMTAsNDcyMTEsNDcyMTQsNDcyMTYsNDcyMTgsNDcyMTksNDcyMjAsNDcyMjEsNDcyMjIsNDcyMjMsNDcyMjUsNDcyMjYsNDcyMjcsNDcyMjksNDcyMzAsNDcyMzEsNDcyMzIsNDcyMzMsNDcyMzQsNDcyMzUsNDcyMzYsNDcyMzcsNDcyMzgsNDcyMzksNDcy''@;'; put 'put ''NDAsNDcyNDEsNDcyNDIsNDcyNDMsNDcyNDQsNDcyNDYsNDcyNDcsNDcyNDgsNDcyNDksNDcyNTAsNDcyNTEsNDcyNTIsNDcyNTMsNDcyNTQsNDcyNTUsNDcyNTYsNDcyNTcsNDcyNTgsNDcyNTksNDcyNjAsNDcyNjEsNDcyNjIsNDcyNjMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''NDcyNjQsNDcyNjUsNDcyNjYsNDcyNjcsNDcyNjgsNDcyNjksNDcyNzAsNDcyNzEsNDcyNzMsNDcyNzQsNDcyNzUsNDcyNzYsNDcyNzcsNDcyNzgsNDcyNzksNDcyODEsNDcyODIsNDcyODMsNDcyODUsNDcyODYsNDcyODcsNDcyODksNDcyOTAsNDcyOTEsNDcyOTIsNDcyOTMsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsNDcyOTQsNDcyOTUsNDcyOTgsNDczMDAsNDczMDIsNDczMDMsNDczMDQsNDczMDUsNDczMDYsNDczMDcsNDczMDksNDczMTAsNDczMTEsNDczMTMsNDczMTQsNDczMTUsNDczMTcsNDczMTgsNDczMTksNDczMjAsNDczMjEsNDczMjIsNDczMjMsNDczMjQs''@;'; put 'put ''NDczMjYsNDczMjgsNDczMzAsNDczMzEsNDczMzIsNDczMzMsNDczMzQsNDczMzUsNDczMzgsNDczMzksNDczNDEsNDczNDIsNDczNDMsNDczNDUsNDczNDYsNDczNDcsNDczNDgsNDczNDksNDczNTAsNDczNTEsNDczNTQsNDczNTYsNDczNTgsNDczNTksNDczNjAsNDczNjEsNDczNjIsNDcz''@;'; put 'put ''NjMsNDczNjUsNDczNjYsNDczNjcsNDczNjgsNDczNjksNDczNzAsNDczNzEsNDczNzIsNDczNzMsNDczNzQsNDczNzUsNDczNzYsNDczNzcsNDczNzgsNDczNzksNDczODAsNDczODEsNDczODIsNDczODMsNDczODUsNDczODYsNDczODcsNDczODgsNDczODksNDczOTAsNDczOTEsNDczOTMs''@;'; put 'put ''NDczOTQsNDczOTUsNDczOTYsNDczOTcsNDczOTgsNDczOTksNDc0MDAsNDc0MDEsNDc0MDIsNDc0MDMsNDc0MDQsNDc0MDUsNDc0MDYsNDc0MDcsNDc0MDgsNDc0MDksNDc0MTAsNDc0MTEsNDc0MTIsNDc0MTMsNDc0MTQsNDc0MTUsNDc0MTYsNDc0MTcsNDc0MTgsNDc0MTksNDc0MjIsNDc0''@;'; put 'put ''MjMsNDc0MjUsNDc0MjYsNDc0MjcsNDc0MjksNDc0MzAsNDc0MzEsNDc0MzIsNDc0MzMsNDc0MzQsNDc0MzUsNDc0MzcsNDc0MzgsNDc0NDAsNDc0NDIsNDc0NDMsNDc0NDQsNDc0NDUsNDc0NDYsNDc0NDcsNDc0NTAsNDc0NTEsNDc0NTMsNDc0NTQsNDc0NTUsNDc0NTcsNDc0NTgsNDc0NTks''@;'; put 'put ''NDc0NjAsNDc0NjEsNDc0NjIsNDc0NjMsNDc0NjYsNDc0NjgsNDc0NzAsNDc0NzEsNDc0NzIsNDc0NzMsNDc0NzQsNDc0NzUsNDc0NzgsNDc0NzksNDc0ODEsNDc0ODIsNDc0ODMsNDc0ODUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDc0ODYsNDc0ODcsNDc0ODgsNDc0ODksNDc0''@;'; put 'put ''OTAsNDc0OTEsNDc0OTQsNDc0OTYsNDc0OTksNDc1MDAsNDc1MDMsNDc1MDQsNDc1MDUsNDc1MDYsNDc1MDcsNDc1MDgsNDc1MDksNDc1MTAsNDc1MTEsNDc1MTIsNDc1MTMsNDc1MTQsNDc1MTUsNDc1MTYsNDc1MTcsNDc1MTgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDc1MTks''@;'; put 'put ''NDc1MjAsNDc1MjEsNDc1MjIsNDc1MjMsNDc1MjQsNDc1MjUsNDc1MjYsNDc1MjcsNDc1MjgsNDc1MjksNDc1MzAsNDc1MzEsNDc1MzQsNDc1MzUsNDc1MzcsNDc1MzgsNDc1MzksNDc1NDEsNDc1NDIsNDc1NDMsNDc1NDQsNDc1NDUsNDc1NDYsNDc1NDcsNDc1NTAsNDc1NTIsNDc1NTQsNDc1''@;'; put 'put ''NTUsNDc1NTYsNDc1NTcsNDc1NTgsNDc1NTksNDc1NjIsNDc1NjMsNDc1NjUsNDc1NzEsNDc1NzIsNDc1NzMsNDc1NzQsNDc1NzUsNDc1NzgsNDc1ODAsNDc1ODMsNDc1ODQsNDc1ODYsNDc1OTAsNDc1OTEsNDc1OTMsNDc1OTQsNDc1OTUsNDc1OTcsNDc1OTgsNDc1OTksNDc2MDAsNDc2MDEs''@;'; put 'put ''NDc2MDIsNDc2MDMsNDc2MDYsNDc2MTEsNDc2MTIsNDc2MTMsNDc2MTQsNDc2MTUsNDc2MTgsNDc2MTksNDc2MjAsNDc2MjEsNDc2MjIsNDc2MjMsNDc2MjUsNDc2MjYsNDc2MjcsNDc2MjgsNDc2MjksNDc2MzAsNDc2MzEsNDc2MzIsNDc2MzMsNDc2MzQsNDc2MzUsNDc2MzYsNDc2MzgsNDc2''@;'; put 'put ''MzksNDc2NDAsNDc2NDEsNDc2NDIsNDc2NDMsNDc2NDQsNDc2NDUsNDc2NDYsNDc2NDcsNDc2NDgsNDc2NDksNDc2NTAsNDc2NTEsNDc2NTIsNDc2NTMsNDc2NTQsNDc2NTUsNDc2NTYsNDc2NTcsNDc2NTgsNDc2NTksNDc2NjAsNDc2NjEsNDc2NjIsNDc2NjMsNDc2NjQsNDc2NjUsNDc2NjYs''@;'; put 'put ''NDc2NjcsNDc2NjgsNDc2NjksNDc2NzAsNDc2NzEsNDc2NzQsNDc2NzUsNDc2NzcsNDc2NzgsNDc2NzksNDc2ODEsNDc2ODMsNDc2ODQsNDc2ODUsNDc2ODYsNDc2ODcsNDc2OTAsNDc2OTIsNDc2OTUsNDc2OTYsNDc2OTcsNDc2OTgsNDc3MDIsNDc3MDMsNDc3MDUsNDc3MDYsNDc3MDcsNDc3''@;'; put 'put ''MDksNDc3MTAsNDc3MTEsNDc3MTIsNDc3MTMsNDc3MTQsNDc3MTUsNDc3MTgsNDc3MjIsNDc3MjMsNDc3MjQsNDc3MjUsNDc3MjYsNDc3MjcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDc3MzAsNDc3MzEsNDc3MzMsNDc3MzQsNDc3MzUsNDc3MzcsNDc3MzgsNDc3MzksNDc3NDAs''@;'; put 'put ''NDc3NDEsNDc3NDIsNDc3NDMsNDc3NDQsNDc3NDUsNDc3NDYsNDc3NTAsNDc3NTIsNDc3NTMsNDc3NTQsNDc3NTUsNDc3NTcsNDc3NTgsNDc3NTksNDc3NjAsNDc3NjEsNDc3NjIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDc3NjMsNDc3NjQsNDc3NjUsNDc3NjYsNDc3NjcsNDc3''@;'; put 'put ''NjgsNDc3NjksNDc3NzAsNDc3NzEsNDc3NzIsNDc3NzMsNDc3NzQsNDc3NzUsNDc3NzYsNDc3NzcsNDc3NzgsNDc3NzksNDc3ODAsNDc3ODEsNDc3ODIsNDc3ODMsNDc3ODYsNDc3ODksNDc3OTAsNDc3OTEsNDc3OTMsNDc3OTUsNDc3OTYsNDc3OTcsNDc3OTgsNDc3OTksNDc4MDIsNDc4MDQs''@;'; put 'put ''NDc4MDYsNDc4MDcsNDc4MDgsNDc4MDksNDc4MTAsNDc4MTEsNDc4MTMsNDc4MTQsNDc4MTUsNDc4MTcsNDc4MTgsNDc4MTksNDc4MjAsNDc4MjEsNDc4MjIsNDc4MjMsNDc4MjQsNDc4MjUsNDc4MjYsNDc4MjcsNDc4MjgsNDc4MjksNDc4MzAsNDc4MzEsNDc4MzQsNDc4MzUsNDc4MzYsNDc4''@;'; put 'put ''MzcsNDc4MzgsNDc4MzksNDc4NDAsNDc4NDEsNDc4NDIsNDc4NDMsNDc4NDQsNDc4NDUsNDc4NDYsNDc4NDcsNDc4NDgsNDc4NDksNDc4NTAsNDc4NTEsNDc4NTIsNDc4NTMsNDc4NTQsNDc4NTUsNDc4NTYsNDc4NTcsNDc4NTgsNDc4NTksNDc4NjAsNDc4NjEsNDc4NjIsNDc4NjMsNDc4NjQs''@;'; put 'put ''NDc4NjUsNDc4NjYsNDc4NjcsNDc4NjksNDc4NzAsNDc4NzEsNDc4NzMsNDc4NzQsNDc4NzUsNDc4NzcsNDc4NzgsNDc4NzksNDc4ODAsNDc4ODEsNDc4ODIsNDc4ODMsNDc4ODQsNDc4ODYsNDc4ODgsNDc4OTAsNDc4OTEsNDc4OTIsNDc4OTMsNDc4OTQsNDc4OTUsNDc4OTcsNDc4OTgsNDc4''@;'; put 'put ''OTksNDc5MDEsNDc5MDIsNDc5MDMsNDc5MDUsNDc5MDYsNDc5MDcsNDc5MDgsNDc5MDksNDc5MTAsNDc5MTEsNDc5MTIsNDc5MTQsNDc5MTYsNDc5MTcsNDc5MTgsNDc5MTksNDc5MjAsNDc5MjEsNDc5MjIsNDc5MjMsNDc5MjcsNDc5MjksNDc5MzAsNDc5MzUsNDc5MzYsNDc5MzcsNDc5Mzgs''@;'; put 'put ''NDc5MzksNDc5NDIsNDc5NDQsNDc5NDYsNDc5NDcsNDc5NDgsNDc5NTAsNDc5NTMsNDc5NTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDc5NTUsNDc5NTcsNDc5NTgsNDc5NTksNDc5NjEsNDc5NjIsNDc5NjMsNDc5NjQsNDc5NjUsNDc5NjYsNDc5NjcsNDc5NjgsNDc5NzAsNDc5''@;'; put 'put ''NzIsNDc5NzMsNDc5NzQsNDc5NzUsNDc5NzYsNDc5NzcsNDc5NzgsNDc5NzksNDc5ODEsNDc5ODIsNDc5ODMsNDc5ODQsNDc5ODUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDc5ODYsNDc5ODcsNDc5ODgsNDc5ODksNDc5OTAsNDc5OTEsNDc5OTIsNDc5OTMsNDc5OTQsNDc5OTUs''@;'; put 'put ''NDc5OTYsNDc5OTcsNDc5OTgsNDc5OTksNDhlMyw0ODAwMSw0ODAwMiw0ODAwMyw0ODAwNCw0ODAwNSw0ODAwNiw0ODAwNyw0ODAwOSw0ODAxMCw0ODAxMSw0ODAxMyw0ODAxNCw0ODAxNSw0ODAxNyw0ODAxOCw0ODAxOSw0ODAyMCw0ODAyMSw0ODAyMiw0ODAyMyw0ODAyNCw0ODAyNSw0ODAy''@;'; put 'put ''Niw0ODAyNyw0ODAyOCw0ODAyOSw0ODAzMCw0ODAzMSw0ODAzMiw0ODAzMyw0ODAzNCw0ODAzNSw0ODAzNyw0ODAzOCw0ODAzOSw0ODA0MSw0ODA0Miw0ODA0Myw0ODA0NSw0ODA0Niw0ODA0Nyw0ODA0OCw0ODA0OSw0ODA1MCw0ODA1MSw0ODA1Myw0ODA1NCw0ODA1Niw0ODA1Nyw0ODA1OCw0''@;'; put 'put ''ODA1OSw0ODA2MCw0ODA2MSw0ODA2Miw0ODA2Myw0ODA2NSw0ODA2Niw0ODA2Nyw0ODA2OSw0ODA3MCw0ODA3MSw0ODA3Myw0ODA3NCw0ODA3NSw0ODA3Niw0ODA3Nyw0ODA3OCw0ODA3OSw0ODA4MSw0ODA4Miw0ODA4NCw0ODA4NSw0ODA4Niw0ODA4Nyw0ODA4OCw0ODA4OSw0ODA5MCw0ODA5''@;'; put 'put ''MSw0ODA5Miw0ODA5Myw0ODA5NCw0ODA5NSw0ODA5Niw0ODA5Nyw0ODA5OCw0ODA5OSw0ODEwMCw0ODEwMSw0ODEwMiw0ODEwMyw0ODEwNCw0ODEwNSw0ODEwNiw0ODEwNyw0ODEwOCw0ODEwOSw0ODExMCw0ODExMSw0ODExMiw0ODExMyw0ODExNCw0ODExNSw0ODExNiw0ODExNyw0ODExOCw0''@;'; put 'put ''ODExOSw0ODEyMiw0ODEyMyw0ODEyNSw0ODEyNiw0ODEyOSw0ODEzMSw0ODEzMiw0ODEzMyw0ODEzNCw0ODEzNSw0ODEzOCw0ODE0Miw0ODE0NCw0ODE0Niw0ODE0Nyw0ODE1Myw0ODE1NCw0ODE2MCw0ODE2MSw0ODE2Miw0ODE2Myw0ODE2Niw0ODE2OCw0ODE3MCw0ODE3MSw0ODE3Miw0ODE3''@;'; put 'put ''NCw0ODE3NSw0ODE3OCw0ODE3OSw0ODE4MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0ODE4Miw0ODE4Myw0ODE4NSw0ODE4Niw0ODE4Nyw0ODE4OCw0ODE4OSw0ODE5MCw0ODE5MSw0ODE5NCw0ODE5OCw0ODE5OSw0ODIwMCw0ODIwMiw0ODIwMyw0ODIwNiw0ODIwNyw0ODIwOSw0''@;'; put 'put ''ODIxMCw0ODIxMSw0ODIxMiw0ODIxMyw0ODIxNCw0ODIxNSw0ODIxNiw0ODIxNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0ODIxOCw0ODIxOSw0ODIyMCw0ODIyMiw0ODIyMyw0ODIyNCw0ODIyNSw0ODIyNiw0ODIyNyw0ODIyOCw0ODIyOSw0ODIzMCw0ODIzMSw0ODIzMiw0ODIz''@;'; put 'put ''Myw0ODIzNCw0ODIzNSw0ODIzNiw0ODIzNyw0ODIzOCw0ODIzOSw0ODI0MCw0ODI0MSw0ODI0Miw0ODI0Myw0ODI0NCw0ODI0NSw0ODI0Niw0ODI0Nyw0ODI0OCw0ODI0OSw0ODI1MCw0ODI1MSw0ODI1Miw0ODI1Myw0ODI1NCw0ODI1NSw0ODI1Niw0ODI1Nyw0ODI1OCw0ODI1OSw0ODI2Miw0''@;'; put 'put ''ODI2Myw0ODI2NSw0ODI2Niw0ODI2OSw0ODI3MSw0ODI3Miw0ODI3Myw0ODI3NCw0ODI3NSw0ODI3OCw0ODI4MCw0ODI4Myw0ODI4NCw0ODI4NSw0ODI4Niw0ODI4Nyw0ODI5MCw0ODI5MSw0ODI5Myw0ODI5NCw0ODI5Nyw0ODI5OCw0ODI5OSw0ODMwMCw0ODMwMSw0ODMwMiw0ODMwMyw0ODMw''@;'; put 'put ''Niw0ODMxMCw0ODMxMSw0ODMxMiw0ODMxMyw0ODMxNCw0ODMxNSw0ODMxOCw0ODMxOSw0ODMyMSw0ODMyMiw0ODMyMyw0ODMyNSw0ODMyNiw0ODMyNyw0ODMyOCw0ODMyOSw0ODMzMCw0ODMzMSw0ODMzMiw0ODMzNCw0ODMzOCw0ODMzOSw0ODM0MCw0ODM0Miw0ODM0Myw0ODM0NSw0ODM0Niw0''@;'; put 'put ''ODM0Nyw0ODM0OSw0ODM1MCw0ODM1MSw0ODM1Miw0ODM1Myw0ODM1NCw0ODM1NSw0ODM1Niw0ODM1Nyw0ODM1OCw0ODM1OSw0ODM2MCw0ODM2MSw0ODM2Miw0ODM2Myw0ODM2NCw0ODM2NSw0ODM2Niw0ODM2Nyw0ODM2OCw0ODM2OSw0ODM3MCw0ODM3MSw0ODM3NSw0ODM3Nyw0ODM3OCw0ODM3''@;'; put 'put ''OSw0ODM4MSw0ODM4Miw0ODM4Myw0ODM4NCw0ODM4NSw0ODM4Niw0ODM4Nyw0ODM5MCw0ODM5Miw0ODM5NCw0ODM5NSw0ODM5Niw0ODM5Nyw0ODM5OCw0ODM5OSw0ODQwMSw0ODQwMiw0ODQwMyw0ODQwNSw0ODQwNiw0ODQwNyw0ODQwOCw0ODQwOSw0ODQxMCw0ODQxMSw0ODQxMiw0ODQxMyxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0ODQxNCw0ODQxNSw0ODQxNiw0ODQxNyw0ODQxOCw0ODQxOSw0ODQyMSw0ODQyMiw0ODQyMyw0ODQyNCw0ODQyNSw0ODQyNiw0ODQyNyw0ODQyOSw0ODQzMCw0ODQzMSw0ODQzMiw0ODQzMyw0ODQzNCw0ODQzNSw0ODQzNiw0ODQzNyw0ODQz''@;'; put 'put ''OCw0ODQzOSw0ODQ0MCw0ODQ0MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0ODQ0Miw0ODQ0Myw0ODQ0NCw0ODQ0NSw0ODQ0Niw0ODQ0Nyw0ODQ0OSw0ODQ1MCw0ODQ1MSw0ODQ1Miw0ODQ1Myw0ODQ1NCw0ODQ1NSw0ODQ1OCw0ODQ1OSw0ODQ2MSw0ODQ2Miw0ODQ2Myw0ODQ2NSw0''@;'; put 'put ''ODQ2Niw0ODQ2Nyw0ODQ2OCw0ODQ2OSw0ODQ3MCw0ODQ3MSw0ODQ3NCw0ODQ3NSw0ODQ3Niw0ODQ3Nyw0ODQ3OCw0ODQ3OSw0ODQ4MCw0ODQ4MSw0ODQ4Miw0ODQ4Myw0ODQ4NSw0ODQ4Niw0ODQ4Nyw0ODQ4OSw0ODQ5MCw0ODQ5MSw0ODQ5Miw0ODQ5Myw0ODQ5NCw0ODQ5NSw0ODQ5Niw0ODQ5''@;'; put 'put ''Nyw0ODQ5OCw0ODQ5OSw0ODUwMCw0ODUwMSw0ODUwMiw0ODUwMyw0ODUwNCw0ODUwNSw0ODUwNiw0ODUwNyw0ODUwOCw0ODUwOSw0ODUxMCw0ODUxMSw0ODUxNCw0ODUxNSw0ODUxNyw0ODUxOCw0ODUyMyw0ODUyNCw0ODUyNSw0ODUyNiw0ODUyNyw0ODUzMCw0ODUzMiw0ODUzNCw0ODUzNSw0''@;'; put 'put ''ODUzNiw0ODUzOSw0ODU0MSw0ODU0Miw0ODU0Myw0ODU0NCw0ODU0NSw0ODU0Niw0ODU0Nyw0ODU0OSw0ODU1MCw0ODU1MSw0ODU1Miw0ODU1Myw0ODU1NCw0ODU1NSw0ODU1Niw0ODU1Nyw0ODU1OCw0ODU1OSw0ODU2MSw0ODU2Miw0ODU2Myw0ODU2NCw0ODU2NSw0ODU2Niw0ODU2Nyw0ODU2''@;'; put 'put ''OSw0ODU3MCw0ODU3MSw0ODU3Miw0ODU3Myw0ODU3NCw0ODU3NSw0ODU3Niw0ODU3Nyw0ODU3OCw0ODU3OSw0ODU4MCw0ODU4MSw0ODU4Miw0ODU4Myw0ODU4NCw0ODU4NSw0ODU4Niw0ODU4Nyw0ODU4OCw0ODU4OSw0ODU5MCw0ODU5MSw0ODU5Miw0ODU5Myw0ODU5NCw0ODU5NSw0ODU5OCw0''@;'; put 'put ''ODU5OSw0ODYwMSw0ODYwMiw0ODYwMyw0ODYwNSw0ODYwNiw0ODYwNyw0ODYwOCw0ODYwOSw0ODYxMCw0ODYxMSw0ODYxMiw0ODYxMyw0ODYxNCw0ODYxNSw0ODYxNiw0ODYxOCw0ODYxOSw0ODYyMCw0ODYyMSw0ODYyMiw0ODYyMyw0ODYyNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCw0ODYyNiw0ODYyNyw0ODYyOSw0ODYzMCw0ODYzMSw0ODYzMyw0ODYzNCw0ODYzNSw0ODYzNiw0ODYzNyw0ODYzOCw0ODYzOSw0ODY0MSw0ODY0Miw0ODY0NCw0ODY0Niw0ODY0Nyw0ODY0OCw0ODY0OSw0ODY1MCw0ODY1MSw0ODY1NCw0ODY1NSw0ODY1Nyw0ODY1OCw0ODY1OSxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0ODY2MSw0ODY2Miw0ODY2Myw0ODY2NCw0ODY2NSw0ODY2Niw0ODY2Nyw0ODY3MCw0ODY3Miw0ODY3Myw0ODY3NCw0ODY3NSw0ODY3Niw0ODY3Nyw0ODY3OCw0ODY3OSw0ODY4MCw0ODY4MSw0ODY4Miw0ODY4Myw0ODY4NCw0ODY4NSw0ODY4Niw0ODY4''@;'; put 'put ''Nyw0ODY4OCw0ODY4OSw0ODY5MCw0ODY5MSw0ODY5Miw0ODY5Myw0ODY5NCw0ODY5NSw0ODY5Niw0ODY5Nyw0ODY5OCw0ODY5OSw0ODcwMCw0ODcwMSw0ODcwMiw0ODcwMyw0ODcwNCw0ODcwNSw0ODcwNiw0ODcwNyw0ODcxMCw0ODcxMSw0ODcxMyw0ODcxNCw0ODcxNSw0ODcxNyw0ODcxOSw0''@;'; put 'put ''ODcyMCw0ODcyMSw0ODcyMiw0ODcyMyw0ODcyNiw0ODcyOCw0ODczMiw0ODczMyw0ODczNCw0ODczNSw0ODczOCw0ODczOSw0ODc0MSw0ODc0Miw0ODc0Myw0ODc0NSw0ODc0Nyw0ODc0OCw0ODc0OSw0ODc1MCw0ODc1MSw0ODc1NCw0ODc1OCw0ODc1OSw0ODc2MCw0ODc2MSw0ODc2Miw0ODc2''@;'; put 'put ''Niw0ODc2Nyw0ODc2OSw0ODc3MCw0ODc3MSw0ODc3Myw0ODc3NCw0ODc3NSw0ODc3Niw0ODc3Nyw0ODc3OCw0ODc3OSw0ODc4Miw0ODc4Niw0ODc4Nyw0ODc4OCw0ODc4OSw0ODc5MCw0ODc5MSw0ODc5NCw0ODc5NSw0ODc5Niw0ODc5Nyw0ODc5OCw0ODc5OSw0ODgwMCw0ODgwMSw0ODgwMiw0''@;'; put 'put ''ODgwMyw0ODgwNCw0ODgwNSw0ODgwNiw0ODgwNyw0ODgwOSw0ODgxMCw0ODgxMSw0ODgxMiw0ODgxMyw0ODgxNCw0ODgxNSw0ODgxNiw0ODgxNyw0ODgxOCw0ODgxOSw0ODgyMCw0ODgyMSw0ODgyMiw0ODgyMyw0ODgyNCw0ODgyNSw0ODgyNiw0ODgyNyw0ODgyOCw0ODgyOSw0ODgzMCw0ODgz''@;'; put 'put ''MSw0ODgzMiw0ODgzMyw0ODgzNCw0ODgzNSw0ODgzNiw0ODgzNyw0ODgzOCw0ODgzOSw0ODg0MCw0ODg0MSw0ODg0Miw0ODg0Myw0ODg0NCw0ODg0NSw0ODg0Niw0ODg0Nyw0ODg1MCw0ODg1MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0ODg1Myw0ODg1NCw0ODg1Nyw0ODg1OCw0''@;'; put 'put ''ODg1OSw0ODg2MCw0ODg2MSw0ODg2Miw0ODg2Myw0ODg2NSw0ODg2Niw0ODg3MCw0ODg3MSw0ODg3Miw0ODg3Myw0ODg3NCw0ODg3NSw0ODg3Nyw0ODg3OCw0ODg3OSw0ODg4MCw0ODg4MSw0ODg4Miw0ODg4Myw0ODg4NCw0ODg4NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0ODg4''@;'; put 'put ''Niw0ODg4Nyw0ODg4OCw0ODg4OSw0ODg5MCw0ODg5MSw0ODg5Miw0ODg5Myw0ODg5NCw0ODg5NSw0ODg5Niw0ODg5OCw0ODg5OSw0ODkwMCw0ODkwMSw0ODkwMiw0ODkwMyw0ODkwNiw0ODkwNyw0ODkwOCw0ODkwOSw0ODkxMCw0ODkxMSw0ODkxMiw0ODkxMyw0ODkxNCw0ODkxNSw0ODkxNiw0''@;'; put 'put ''ODkxNyw0ODkxOCw0ODkxOSw0ODkyMiw0ODkyNiw0ODkyNyw0ODkyOCw0ODkyOSw0ODkzMCw0ODkzMSw0ODkzMiw0ODkzMyw0ODkzNCw0ODkzNSw0ODkzNiw0ODkzNyw0ODkzOCw0ODkzOSw0ODk0MCw0ODk0MSw0ODk0Miw0ODk0Myw0ODk0NCw0ODk0NSw0ODk0Niw0ODk0Nyw0ODk0OCw0ODk0''@;'; put 'put ''OSw0ODk1MCw0ODk1MSw0ODk1Miw0ODk1Myw0ODk1NCw0ODk1NSw0ODk1Niw0ODk1Nyw0ODk1OCw0ODk1OSw0ODk2Miw0ODk2Myw0ODk2NSw0ODk2Niw0ODk2Nyw0ODk2OSw0ODk3MCw0ODk3MSw0ODk3Miw0ODk3Myw0ODk3NCw0ODk3NSw0ODk3OCw0ODk3OSw0ODk4MCw0ODk4Miw0ODk4Myw0''@;'; put 'put ''ODk4NCw0ODk4NSw0ODk4Niw0ODk4Nyw0ODk4OCw0ODk4OSw0ODk5MCw0ODk5MSw0ODk5Miw0ODk5Myw0ODk5NCw0ODk5NSw0ODk5Niw0ODk5Nyw0ODk5OCw0ODk5OSw0OWUzLDQ5MDAxLDQ5MDAyLDQ5MDAzLDQ5MDA0LDQ5MDA1LDQ5MDA2LDQ5MDA3LDQ5MDA4LDQ5MDA5LDQ5MDEwLDQ5MDEx''@;'; put 'put ''LDQ5MDEyLDQ5MDEzLDQ5MDE0LDQ5MDE1LDQ5MDE2LDQ5MDE3LDQ5MDE4LDQ5MDE5LDQ5MDIwLDQ5MDIxLDQ5MDIyLDQ5MDIzLDQ5MDI0LDQ5MDI1LDQ5MDI2LDQ5MDI3LDQ5MDI4LDQ5MDI5LDQ5MDMwLDQ5MDMxLDQ5MDMyLDQ5MDMzLDQ5MDM0LDQ5MDM1LDQ5MDM2LDQ5MDM3LDQ5MDM4LDQ5''@;'; put 'put ''MDM5LDQ5MDQwLDQ5MDQxLDQ5MDQyLDQ5MDQzLDQ5MDQ1LDQ5MDQ2LDQ5MDQ3LDQ5MDQ4LDQ5MDQ5LDQ5MDUwLDQ5MDUxLDQ5MDUyLDQ5MDUzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5MDU0LDQ5MDU1LDQ5MDU2LDQ5MDU3LDQ5MDU4LDQ5MDU5LDQ5MDYwLDQ5MDYxLDQ5MDYy''@;'; put 'put ''LDQ5MDYzLDQ5MDY0LDQ5MDY1LDQ5MDY2LDQ5MDY3LDQ5MDY4LDQ5MDY5LDQ5MDcwLDQ5MDcxLDQ5MDczLDQ5MDc0LDQ5MDc1LDQ5MDc2LDQ5MDc3LDQ5MDc4LDQ5MDc5LDQ5MDgwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5MDgxLDQ5MDgyLDQ5MDgzLDQ5MDg0LDQ5MDg1LDQ5''@;'; put 'put ''MDg2LDQ5MDg3LDQ5MDg4LDQ5MDg5LDQ5MDkwLDQ5MDkxLDQ5MDkyLDQ5MDk0LDQ5MDk1LDQ5MDk2LDQ5MDk3LDQ5MDk4LDQ5MDk5LDQ5MTAyLDQ5MTAzLDQ5MTA1LDQ5MTA2LDQ5MTA3LDQ5MTA5LDQ5MTEwLDQ5MTExLDQ5MTEyLDQ5MTEzLDQ5MTE0LDQ5MTE1LDQ5MTE3LDQ5MTE4LDQ5MTIw''@;'; put 'put ''LDQ5MTIyLDQ5MTIzLDQ5MTI0LDQ5MTI1LDQ5MTI2LDQ5MTI3LDQ5MTI4LDQ5MTI5LDQ5MTMwLDQ5MTMxLDQ5MTMyLDQ5MTMzLDQ5MTM0LDQ5MTM1LDQ5MTM2LDQ5MTM3LDQ5MTM4LDQ5MTM5LDQ5MTQwLDQ5MTQxLDQ5MTQyLDQ5MTQzLDQ5MTQ0LDQ5MTQ1LDQ5MTQ2LDQ5MTQ3LDQ5MTQ4LDQ5''@;'; put 'put ''MTQ5LDQ5MTUwLDQ5MTUxLDQ5MTUyLDQ5MTUzLDQ5MTU0LDQ5MTU1LDQ5MTU2LDQ5MTU3LDQ5MTU4LDQ5MTU5LDQ5MTYwLDQ5MTYxLDQ5MTYyLDQ5MTYzLDQ5MTY0LDQ5MTY1LDQ5MTY2LDQ5MTY3LDQ5MTY4LDQ5MTY5LDQ5MTcwLDQ5MTcxLDQ5MTcyLDQ5MTczLDQ5MTc0LDQ5MTc1LDQ5MTc2''@;'; put 'put ''LDQ5MTc3LDQ5MTc4LDQ5MTc5LDQ5MTgwLDQ5MTgxLDQ5MTgyLDQ5MTgzLDQ5MTg0LDQ5MTg1LDQ5MTg2LDQ5MTg3LDQ5MTg4LDQ5MTg5LDQ5MTkwLDQ5MTkxLDQ5MTkyLDQ5MTkzLDQ5MTk0LDQ5MTk1LDQ5MTk2LDQ5MTk3LDQ5MTk4LDQ5MTk5LDQ5MjAwLDQ5MjAxLDQ5MjAyLDQ5MjAzLDQ5''@;'; put 'put ''MjA0LDQ5MjA1LDQ5MjA2LDQ5MjA3LDQ5MjA4LDQ5MjA5LDQ5MjEwLDQ5MjExLDQ5MjEzLDQ5MjE0LDQ5MjE1LDQ5MjE2LDQ5MjE3LDQ5MjE4LDQ5MjE5LDQ5MjIwLDQ5MjIxLDQ5MjIyLDQ5MjIzLDQ5MjI0LDQ5MjI1LDQ5MjI2LDQ5MjI3LDQ5MjI4LDQ5MjI5LDQ5MjMwLDQ5MjMxLDQ5MjMy''@;'; put 'put ''LDQ5MjM0LDQ5MjM1LDQ5MjM2LDQ5MjM3LDQ5MjM4LDQ5MjM5LDQ5MjQxLDQ5MjQyLDQ5MjQzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5MjQ1LDQ5MjQ2LDQ5MjQ3LDQ5MjQ5LDQ5MjUwLDQ5MjUxLDQ5MjUyLDQ5MjUzLDQ5MjU0LDQ5MjU1LDQ5MjU4LDQ5MjU5LDQ5MjYwLDQ5''@;'; put 'put ''MjYxLDQ5MjYyLDQ5MjYzLDQ5MjY0LDQ5MjY1LDQ5MjY2LDQ5MjY3LDQ5MjY4LDQ5MjY5LDQ5MjcwLDQ5MjcxLDQ5MjcyLDQ5MjczLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5Mjc0LDQ5Mjc1LDQ5Mjc2LDQ5Mjc3LDQ5Mjc4LDQ5Mjc5LDQ5MjgwLDQ5MjgxLDQ5MjgyLDQ5Mjgz''@;'; put 'put ''LDQ5Mjg0LDQ5Mjg1LDQ5Mjg2LDQ5Mjg3LDQ5Mjg4LDQ5Mjg5LDQ5MjkwLDQ5MjkxLDQ5MjkyLDQ5MjkzLDQ5Mjk0LDQ5Mjk1LDQ5Mjk4LDQ5Mjk5LDQ5MzAxLDQ5MzAyLDQ5MzAzLDQ5MzA1LDQ5MzA2LDQ5MzA3LDQ5MzA4LDQ5MzA5LDQ5MzEwLDQ5MzExLDQ5MzE0LDQ5MzE2LDQ5MzE4LDQ5''@;'; put 'put ''MzE5LDQ5MzIwLDQ5MzIxLDQ5MzIyLDQ5MzIzLDQ5MzI2LDQ5MzI5LDQ5MzMwLDQ5MzM1LDQ5MzM2LDQ5MzM3LDQ5MzM4LDQ5MzM5LDQ5MzQyLDQ5MzQ2LDQ5MzQ3LDQ5MzQ4LDQ5MzUwLDQ5MzUxLDQ5MzU0LDQ5MzU1LDQ5MzU3LDQ5MzU4LDQ5MzU5LDQ5MzYxLDQ5MzYyLDQ5MzYzLDQ5MzY0''@;'; put 'put ''LDQ5MzY1LDQ5MzY2LDQ5MzY3LDQ5MzcwLDQ5Mzc0LDQ5Mzc1LDQ5Mzc2LDQ5Mzc3LDQ5Mzc4LDQ5Mzc5LDQ5MzgyLDQ5MzgzLDQ5Mzg1LDQ5Mzg2LDQ5Mzg3LDQ5Mzg5LDQ5MzkwLDQ5MzkxLDQ5MzkyLDQ5MzkzLDQ5Mzk0LDQ5Mzk1LDQ5Mzk4LDQ5NDAwLDQ5NDAyLDQ5NDAzLDQ5NDA0LDQ5''@;'; put 'put ''NDA1LDQ5NDA2LDQ5NDA3LDQ5NDA5LDQ5NDEwLDQ5NDExLDQ5NDEzLDQ5NDE0LDQ5NDE1LDQ5NDE3LDQ5NDE4LDQ5NDE5LDQ5NDIwLDQ5NDIxLDQ5NDIyLDQ5NDIzLDQ5NDI1LDQ5NDI2LDQ5NDI3LDQ5NDI4LDQ5NDMwLDQ5NDMxLDQ5NDMyLDQ5NDMzLDQ5NDM0LDQ5NDM1LDQ5NDQxLDQ5NDQy''@;'; put 'put ''LDQ5NDQ1LDQ5NDQ4LDQ5NDQ5LDQ5NDUwLDQ5NDUxLDQ5NDU0LDQ5NDU4LDQ5NDU5LDQ5NDYwLDQ5NDYxLDQ5NDYzLDQ5NDY2LDQ5NDY3LDQ5NDY5LDQ5NDcwLDQ5NDcxLDQ5NDczLDQ5NDc0LDQ5NDc1LDQ5NDc2LDQ5NDc3LDQ5NDc4LDQ5NDc5LDQ5NDgyLDQ5NDg2LDQ5NDg3LDQ5NDg4LDQ5''@;'; put 'put ''NDg5LDQ5NDkwLDQ5NDkxLDQ5NDk0LDQ5NDk1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5NDk3LDQ5NDk4LDQ5NDk5LDQ5NTAxLDQ5NTAyLDQ5NTAzLDQ5NTA0LDQ5NTA1LDQ5NTA2LDQ5NTA3LDQ5NTEwLDQ5NTE0LDQ5NTE1LDQ5NTE2LDQ5NTE3LDQ5NTE4LDQ5NTE5LDQ5NTIx''@;'; put 'put ''LDQ5NTIyLDQ5NTIzLDQ5NTI1LDQ5NTI2LDQ5NTI3LDQ5NTI5LDQ5NTMwLDQ5NTMxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5NTMyLDQ5NTMzLDQ5NTM0LDQ5NTM1LDQ5NTM2LDQ5NTM3LDQ5NTM4LDQ5NTM5LDQ5NTQwLDQ5NTQyLDQ5NTQzLDQ5NTQ0LDQ5NTQ1LDQ5NTQ2LDQ5''@;'; put 'put ''NTQ3LDQ5NTUxLDQ5NTUzLDQ5NTU0LDQ5NTU1LDQ5NTU3LDQ5NTU5LDQ5NTYwLDQ5NTYxLDQ5NTYyLDQ5NTYzLDQ5NTY2LDQ5NTY4LDQ5NTcwLDQ5NTcxLDQ5NTcyLDQ5NTc0LDQ5NTc1LDQ5NTc4LDQ5NTc5LDQ5NTgxLDQ5NTgyLDQ5NTgzLDQ5NTg1LDQ5NTg2LDQ5NTg3LDQ5NTg4LDQ5NTg5''@;'; put 'put ''LDQ5NTkwLDQ5NTkxLDQ5NTkyLDQ5NTkzLDQ5NTk0LDQ5NTk1LDQ5NTk2LDQ5NTk4LDQ5NTk5LDQ5NjAwLDQ5NjAxLDQ5NjAyLDQ5NjAzLDQ5NjA1LDQ5NjA2LDQ5NjA3LDQ5NjA5LDQ5NjEwLDQ5NjExLDQ5NjEzLDQ5NjE0LDQ5NjE1LDQ5NjE2LDQ5NjE3LDQ5NjE4LDQ5NjE5LDQ5NjIxLDQ5''@;'; put 'put ''NjIyLDQ5NjI1LDQ5NjI2LDQ5NjI3LDQ5NjI4LDQ5NjI5LDQ5NjMwLDQ5NjMxLDQ5NjMzLDQ5NjM0LDQ5NjM1LDQ5NjM3LDQ5NjM4LDQ5NjM5LDQ5NjQxLDQ5NjQyLDQ5NjQzLDQ5NjQ0LDQ5NjQ1LDQ5NjQ2LDQ5NjQ3LDQ5NjUwLDQ5NjUyLDQ5NjUzLDQ5NjU0LDQ5NjU1LDQ5NjU2LDQ5NjU3''@;'; put 'put ''LDQ5NjU4LDQ5NjU5LDQ5NjYyLDQ5NjYzLDQ5NjY1LDQ5NjY2LDQ5NjY3LDQ5NjY5LDQ5NjcwLDQ5NjcxLDQ5NjcyLDQ5NjczLDQ5Njc0LDQ5Njc1LDQ5Njc4LDQ5NjgwLDQ5NjgyLDQ5NjgzLDQ5Njg0LDQ5Njg1LDQ5Njg2LDQ5Njg3LDQ5NjkwLDQ5NjkxLDQ5NjkzLDQ5Njk0LDQ5Njk3LDQ5''@;'; put 'put ''Njk4LDQ5Njk5LDQ5NzAwLDQ5NzAxLDQ5NzAyLDQ5NzAzLDQ5NzA2LDQ5NzA4LDQ5NzEwLDQ5NzEyLDQ5NzE1LDQ5NzE3LDQ5NzE4LDQ5NzE5LDQ5NzIwLDQ5NzIxLDQ5NzIyLDQ5NzIzLDQ5NzI0LDQ5NzI1LDQ5NzI2LDQ5NzI3LDQ5NzI4LDQ5NzI5LDQ5NzMwLDQ5NzMxLDQ5NzMyLDQ5NzMz''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5NzM0LDQ5NzM1LDQ5NzM3LDQ5NzM4LDQ5NzM5LDQ5NzQwLDQ5NzQxLDQ5NzQyLDQ5NzQzLDQ5NzQ2LDQ5NzQ3LDQ5NzQ5LDQ5NzUwLDQ5NzUxLDQ5NzUzLDQ5NzU0LDQ5NzU1LDQ5NzU2LDQ5NzU3LDQ5NzU4LDQ5NzU5LDQ5NzYxLDQ5''@;'; put 'put ''NzYyLDQ5NzYzLDQ5NzY0LDQ5NzY2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5NzY3LDQ5NzY4LDQ5NzY5LDQ5NzcwLDQ5NzcxLDQ5Nzc0LDQ5Nzc1LDQ5Nzc3LDQ5Nzc4LDQ5Nzc5LDQ5NzgxLDQ5NzgyLDQ5NzgzLDQ5Nzg0LDQ5Nzg1LDQ5Nzg2LDQ5Nzg3LDQ5NzkwLDQ5Nzky''@;'; put 'put ''LDQ5Nzk0LDQ5Nzk1LDQ5Nzk2LDQ5Nzk3LDQ5Nzk4LDQ5Nzk5LDQ5ODAyLDQ5ODAzLDQ5ODA0LDQ5ODA1LDQ5ODA2LDQ5ODA3LDQ5ODA5LDQ5ODEwLDQ5ODExLDQ5ODEyLDQ5ODEzLDQ5ODE0LDQ5ODE1LDQ5ODE3LDQ5ODE4LDQ5ODIwLDQ5ODIyLDQ5ODIzLDQ5ODI0LDQ5ODI1LDQ5ODI2LDQ5''@;'; put 'put ''ODI3LDQ5ODMwLDQ5ODMxLDQ5ODMzLDQ5ODM0LDQ5ODM1LDQ5ODM4LDQ5ODM5LDQ5ODQwLDQ5ODQxLDQ5ODQyLDQ5ODQzLDQ5ODQ2LDQ5ODQ4LDQ5ODUwLDQ5ODUxLDQ5ODUyLDQ5ODUzLDQ5ODU0LDQ5ODU1LDQ5ODU2LDQ5ODU3LDQ5ODU4LDQ5ODU5LDQ5ODYwLDQ5ODYxLDQ5ODYyLDQ5ODYz''@;'; put 'put ''LDQ5ODY0LDQ5ODY1LDQ5ODY2LDQ5ODY3LDQ5ODY4LDQ5ODY5LDQ5ODcwLDQ5ODcxLDQ5ODcyLDQ5ODczLDQ5ODc0LDQ5ODc1LDQ5ODc2LDQ5ODc3LDQ5ODc4LDQ5ODc5LDQ5ODgwLDQ5ODgxLDQ5ODgyLDQ5ODgzLDQ5ODg2LDQ5ODg3LDQ5ODg5LDQ5ODkwLDQ5ODkzLDQ5ODk0LDQ5ODk1LDQ5''@;'; put 'put ''ODk2LDQ5ODk3LDQ5ODk4LDQ5OTAyLDQ5OTA0LDQ5OTA2LDQ5OTA3LDQ5OTA4LDQ5OTA5LDQ5OTExLDQ5OTE0LDQ5OTE3LDQ5OTE4LDQ5OTE5LDQ5OTIxLDQ5OTIyLDQ5OTIzLDQ5OTI0LDQ5OTI1LDQ5OTI2LDQ5OTI3LDQ5OTMwLDQ5OTMxLDQ5OTM0LDQ5OTM1LDQ5OTM2LDQ5OTM3LDQ5OTM4''@;'; put 'put ''LDQ5OTQyLDQ5OTQzLDQ5OTQ1LDQ5OTQ2LDQ5OTQ3LDQ5OTQ5LDQ5OTUwLDQ5OTUxLDQ5OTUyLDQ5OTUzLDQ5OTU0LDQ5OTU1LDQ5OTU4LDQ5OTU5LDQ5OTYyLDQ5OTYzLDQ5OTY0LDQ5OTY1LDQ5OTY2LDQ5OTY3LDQ5OTY4LDQ5OTY5LDQ5OTcwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLDQ5OTcxLDQ5OTcyLDQ5OTczLDQ5OTc0LDQ5OTc1LDQ5OTc2LDQ5OTc3LDQ5OTc4LDQ5OTc5LDQ5OTgwLDQ5OTgxLDQ5OTgyLDQ5OTgzLDQ5OTg0LDQ5OTg1LDQ5OTg2LDQ5OTg3LDQ5OTg4LDQ5OTkwLDQ5OTkxLDQ5OTkyLDQ5OTkzLDQ5OTk0LDQ5OTk1LDQ5OTk2LDQ5OTk3LG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5OTk4LDQ5OTk5LDVlNCw1MDAwMSw1MDAwMiw1MDAwMyw1MDAwNCw1MDAwNSw1MDAwNiw1MDAwNyw1MDAwOCw1MDAwOSw1MDAxMCw1MDAxMSw1MDAxMiw1MDAxMyw1MDAxNCw1MDAxNSw1MDAxNiw1MDAxNyw1MDAxOCw1MDAxOSw1MDAyMCw1MDAy''@;'; put 'put ''MSw1MDAyMiw1MDAyMyw1MDAyNiw1MDAyNyw1MDAyOSw1MDAzMCw1MDAzMSw1MDAzMyw1MDAzNSw1MDAzNiw1MDAzNyw1MDAzOCw1MDAzOSw1MDA0Miw1MDA0Myw1MDA0Niw1MDA0Nyw1MDA0OCw1MDA0OSw1MDA1MCw1MDA1MSw1MDA1Myw1MDA1NCw1MDA1NSw1MDA1Nyw1MDA1OCw1MDA1OSw1''@;'; put 'put ''MDA2MSw1MDA2Miw1MDA2Myw1MDA2NCw1MDA2NSw1MDA2Niw1MDA2Nyw1MDA2OCw1MDA2OSw1MDA3MCw1MDA3MSw1MDA3Miw1MDA3Myw1MDA3NCw1MDA3NSw1MDA3Niw1MDA3Nyw1MDA3OCw1MDA3OSw1MDA4MCw1MDA4MSw1MDA4Miw1MDA4Myw1MDA4NCw1MDA4NSw1MDA4Niw1MDA4Nyw1MDA4''@;'; put 'put ''OCw1MDA4OSw1MDA5MCw1MDA5MSw1MDA5Miw1MDA5Myw1MDA5NCw1MDA5NSw1MDA5Niw1MDA5Nyw1MDA5OCw1MDA5OSw1MDEwMCw1MDEwMSw1MDEwMiw1MDEwMyw1MDEwNCw1MDEwNSw1MDEwNiw1MDEwNyw1MDEwOCw1MDEwOSw1MDExMCw1MDExMSw1MDExMyw1MDExNCw1MDExNSw1MDExNiw1''@;'; put 'put ''MDExNyw1MDExOCw1MDExOSw1MDEyMCw1MDEyMSw1MDEyMiw1MDEyMyw1MDEyNCw1MDEyNSw1MDEyNiw1MDEyNyw1MDEyOCw1MDEyOSw1MDEzMCw1MDEzMSw1MDEzMiw1MDEzMyw1MDEzNCw1MDEzNSw1MDEzOCw1MDEzOSw1MDE0MSw1MDE0Miw1MDE0NSw1MDE0Nyw1MDE0OCw1MDE0OSw1MDE1''@;'; put 'put ''MCw1MDE1MSw1MDE1NCw1MDE1NSw1MDE1Niw1MDE1OCw1MDE1OSw1MDE2MCw1MDE2MSw1MDE2Miw1MDE2Myw1MDE2Niw1MDE2Nyw1MDE2OSw1MDE3MCw1MDE3MSw1MDE3Miw1MDE3Myw1MDE3NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MDE3NSw1MDE3Niw1MDE3Nyw1MDE3OCw1''@;'; put 'put ''MDE3OSw1MDE4MCw1MDE4MSw1MDE4Miw1MDE4Myw1MDE4NSw1MDE4Niw1MDE4Nyw1MDE4OCw1MDE4OSw1MDE5MCw1MDE5MSw1MDE5Myw1MDE5NCw1MDE5NSw1MDE5Niw1MDE5Nyw1MDE5OCw1MDE5OSw1MDIwMCw1MDIwMSw1MDIwMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MDIw''@;'; put 'put ''Myw1MDIwNCw1MDIwNSw1MDIwNiw1MDIwNyw1MDIwOCw1MDIwOSw1MDIxMCw1MDIxMSw1MDIxMyw1MDIxNCw1MDIxNSw1MDIxNiw1MDIxNyw1MDIxOCw1MDIxOSw1MDIyMSw1MDIyMiw1MDIyMyw1MDIyNSw1MDIyNiw1MDIyNyw1MDIyOSw1MDIzMCw1MDIzMSw1MDIzMiw1MDIzMyw1MDIzNCw1''@;'; put 'put ''MDIzNSw1MDIzOCw1MDIzOSw1MDI0MCw1MDI0MSw1MDI0Miw1MDI0Myw1MDI0NCw1MDI0NSw1MDI0Niw1MDI0Nyw1MDI0OSw1MDI1MCw1MDI1MSw1MDI1Miw1MDI1Myw1MDI1NCw1MDI1NSw1MDI1Niw1MDI1Nyw1MDI1OCw1MDI1OSw1MDI2MCw1MDI2MSw1MDI2Miw1MDI2Myw1MDI2NCw1MDI2''@;'; put 'put ''NSw1MDI2Niw1MDI2Nyw1MDI2OCw1MDI2OSw1MDI3MCw1MDI3MSw1MDI3Miw1MDI3Myw1MDI3NCw1MDI3NSw1MDI3OCw1MDI3OSw1MDI4MSw1MDI4Miw1MDI4Myw1MDI4NSw1MDI4Niw1MDI4Nyw1MDI4OCw1MDI4OSw1MDI5MCw1MDI5MSw1MDI5NCw1MDI5NSw1MDI5Niw1MDI5OCw1MDI5OSw1''@;'; put 'put ''MDMwMCw1MDMwMSw1MDMwMiw1MDMwMyw1MDMwNSw1MDMwNiw1MDMwNyw1MDMwOCw1MDMwOSw1MDMxMCw1MDMxMSw1MDMxMiw1MDMxMyw1MDMxNCw1MDMxNSw1MDMxNiw1MDMxNyw1MDMxOCw1MDMxOSw1MDMyMCw1MDMyMSw1MDMyMiw1MDMyMyw1MDMyNSw1MDMyNiw1MDMyNyw1MDMyOCw1MDMy''@;'; put 'put ''OSw1MDMzMCw1MDMzMSw1MDMzMyw1MDMzNCw1MDMzNSw1MDMzNiw1MDMzNyw1MDMzOCw1MDMzOSw1MDM0MCw1MDM0MSw1MDM0Miw1MDM0Myw1MDM0NCw1MDM0NSw1MDM0Niw1MDM0Nyw1MDM0OCw1MDM0OSw1MDM1MCw1MDM1MSw1MDM1Miw1MDM1Myw1MDM1NCw1MDM1NSw1MDM1Niw1MDM1Nyw1''@;'; put 'put ''MDM1OCw1MDM1OSw1MDM2MSw1MDM2Miw1MDM2Myw1MDM2NSw1MDM2Niw1MDM2Nyw1MDM2OCw1MDM2OSw1MDM3MCw1MDM3MSw1MDM3Miw1MDM3MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MDM3NCw1MDM3NSw1MDM3Niw1MDM3Nyw1MDM3OCw1MDM3OSw1MDM4MCw1MDM4MSw1MDM4''@;'; put 'put ''Miw1MDM4Myw1MDM4NCw1MDM4NSw1MDM4Niw1MDM4Nyw1MDM4OCw1MDM4OSw1MDM5MCw1MDM5MSw1MDM5Miw1MDM5Myw1MDM5NCw1MDM5NSw1MDM5Niw1MDM5Nyw1MDM5OCw1MDM5OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MDQwMCw1MDQwMSw1MDQwMiw1MDQwMyw1MDQwNCw1''@;'; put 'put ''MDQwNSw1MDQwNiw1MDQwNyw1MDQwOCw1MDQxMCw1MDQxMSw1MDQxMiw1MDQxMyw1MDQxNCw1MDQxNSw1MDQxOCw1MDQxOSw1MDQyMSw1MDQyMiw1MDQyMyw1MDQyNSw1MDQyNyw1MDQyOCw1MDQyOSw1MDQzMCw1MDQzNCw1MDQzNSw1MDQzNiw1MDQzNyw1MDQzOCw1MDQzOSw1MDQ0MCw1MDQ0''@;'; put 'put ''MSw1MDQ0Miw1MDQ0Myw1MDQ0NSw1MDQ0Niw1MDQ0Nyw1MDQ0OSw1MDQ1MCw1MDQ1MSw1MDQ1Myw1MDQ1NCw1MDQ1NSw1MDQ1Niw1MDQ1Nyw1MDQ1OCw1MDQ1OSw1MDQ2MSw1MDQ2Miw1MDQ2Myw1MDQ2NCw1MDQ2NSw1MDQ2Niw1MDQ2Nyw1MDQ2OCw1MDQ2OSw1MDQ3MCw1MDQ3MSw1MDQ3NCw1''@;'; put 'put ''MDQ3NSw1MDQ3Nyw1MDQ3OCw1MDQ3OSw1MDQ4MSw1MDQ4Miw1MDQ4Myw1MDQ4NCw1MDQ4NSw1MDQ4Niw1MDQ4Nyw1MDQ5MCw1MDQ5Miw1MDQ5NCw1MDQ5NSw1MDQ5Niw1MDQ5Nyw1MDQ5OCw1MDQ5OSw1MDUwMiw1MDUwMyw1MDUwNyw1MDUxMSw1MDUxMiw1MDUxMyw1MDUxNCw1MDUxOCw1MDUy''@;'; put 'put ''Miw1MDUyMyw1MDUyNCw1MDUyNyw1MDUzMCw1MDUzMSw1MDUzMyw1MDUzNCw1MDUzNSw1MDUzNyw1MDUzOCw1MDUzOSw1MDU0MCw1MDU0MSw1MDU0Miw1MDU0Myw1MDU0Niw1MDU1MCw1MDU1MSw1MDU1Miw1MDU1Myw1MDU1NCw1MDU1NSw1MDU1OCw1MDU1OSw1MDU2MSw1MDU2Miw1MDU2Myw1''@;'; put 'put ''MDU2NSw1MDU2Niw1MDU2OCw1MDU2OSw1MDU3MCw1MDU3MSw1MDU3NCw1MDU3Niw1MDU3OCw1MDU3OSw1MDU4MCw1MDU4Miw1MDU4NSw1MDU4Niw1MDU4Nyw1MDU4OSw1MDU5MCw1MDU5MSw1MDU5Myw1MDU5NCw1MDU5NSw1MDU5Niw1MDU5Nyw1MDU5OCw1MDU5OSw1MDYwMCw1MDYwMiw1MDYw''@;'; put 'put ''Myw1MDYwNCw1MDYwNSw1MDYwNiw1MDYwNyw1MDYwOCw1MDYwOSw1MDYxMCw1MDYxMSw1MDYxNCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MDYxNSw1MDYxOCw1MDYyMyw1MDYyNCw1MDYyNSw1MDYyNiw1MDYyNyw1MDYzNSw1MDYzNyw1MDYzOSw1MDY0Miw1MDY0Myw1MDY0NSw1''@;'; put 'put ''MDY0Niw1MDY0Nyw1MDY0OSw1MDY1MCw1MDY1MSw1MDY1Miw1MDY1Myw1MDY1NCw1MDY1NSw1MDY1OCw1MDY2MCw1MDY2Miw1MDY2MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MDY2NCw1MDY2NSw1MDY2Niw1MDY2Nyw1MDY3MSw1MDY3Myw1MDY3NCw1MDY3NSw1MDY3Nyw1MDY4''@;'; put 'put ''MCw1MDY4MSw1MDY4Miw1MDY4Myw1MDY5MCw1MDY5MSw1MDY5Miw1MDY5Nyw1MDY5OCw1MDY5OSw1MDcwMSw1MDcwMiw1MDcwMyw1MDcwNSw1MDcwNiw1MDcwNyw1MDcwOCw1MDcwOSw1MDcxMCw1MDcxMSw1MDcxNCw1MDcxNyw1MDcxOCw1MDcxOSw1MDcyMCw1MDcyMSw1MDcyMiw1MDcyMyw1''@;'; put 'put ''MDcyNiw1MDcyNyw1MDcyOSw1MDczMCw1MDczMSw1MDczNSw1MDczNyw1MDczOCw1MDc0Miw1MDc0NCw1MDc0Niw1MDc0OCw1MDc0OSw1MDc1MCw1MDc1MSw1MDc1NCw1MDc1NSw1MDc1Nyw1MDc1OCw1MDc1OSw1MDc2MSw1MDc2Miw1MDc2Myw1MDc2NCw1MDc2NSw1MDc2Niw1MDc2Nyw1MDc3''@;'; put 'put ''MCw1MDc3NCw1MDc3NSw1MDc3Niw1MDc3Nyw1MDc3OCw1MDc3OSw1MDc4Miw1MDc4Myw1MDc4NSw1MDc4Niw1MDc4Nyw1MDc4OCw1MDc4OSw1MDc5MCw1MDc5MSw1MDc5Miw1MDc5Myw1MDc5NCw1MDc5NSw1MDc5Nyw1MDc5OCw1MDgwMCw1MDgwMiw1MDgwMyw1MDgwNCw1MDgwNSw1MDgwNiw1''@;'; put 'put ''MDgwNyw1MDgxMCw1MDgxMSw1MDgxMyw1MDgxNCw1MDgxNSw1MDgxNyw1MDgxOCw1MDgxOSw1MDgyMCw1MDgyMSw1MDgyMiw1MDgyMyw1MDgyNiw1MDgyOCw1MDgzMCw1MDgzMSw1MDgzMiw1MDgzMyw1MDgzNCw1MDgzNSw1MDgzOCw1MDgzOSw1MDg0MSw1MDg0Miw1MDg0Myw1MDg0NSw1MDg0''@;'; put 'put ''Niw1MDg0Nyw1MDg0OCw1MDg0OSw1MDg1MCw1MDg1MSw1MDg1NCw1MDg1Niw1MDg1OCw1MDg1OSw1MDg2MCw1MDg2MSw1MDg2Miw1MDg2Myw1MDg2Niw1MDg2Nyw1MDg2OSw1MDg3MCw1MDg3MSw1MDg3NSw1MDg3Niw1MDg3Nyw1MDg3OCw1MDg3OSw1MDg4Miw1MDg4NCw1MDg4Niw1MDg4Nyw1''@;'; put 'put ''MDg4OCw1MDg4OSw1MDg5MCw1MDg5MSw1MDg5NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MDg5NSw1MDg5Nyw1MDg5OCw1MDg5OSw1MDkwMSw1MDkwMiw1MDkwMyw1MDkwNCw1MDkwNSw1MDkwNiw1MDkwNyw1MDkxMCw1MDkxMSw1MDkxNCw1MDkxNSw1MDkxNiw1MDkxNyw1MDkx''@;'; put 'put ''OCw1MDkxOSw1MDkyMiw1MDkyMyw1MDkyNSw1MDkyNiw1MDkyNyw1MDkyOSw1MDkzMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MDkzMSw1MDkzMiw1MDkzMyw1MDkzNCw1MDkzNSw1MDkzOCw1MDkzOSw1MDk0MCw1MDk0Miw1MDk0Myw1MDk0NCw1MDk0NSw1MDk0Niw1MDk0Nyw1''@;'; put 'put ''MDk1MCw1MDk1MSw1MDk1Myw1MDk1NCw1MDk1NSw1MDk1Nyw1MDk1OCw1MDk1OSw1MDk2MCw1MDk2MSw1MDk2Miw1MDk2Myw1MDk2Niw1MDk2OCw1MDk3MCw1MDk3MSw1MDk3Miw1MDk3Myw1MDk3NCw1MDk3NSw1MDk3OCw1MDk3OSw1MDk4MSw1MDk4Miw1MDk4Myw1MDk4NSw1MDk4Niw1MDk4''@;'; put 'put ''Nyw1MDk4OCw1MDk4OSw1MDk5MCw1MDk5MSw1MDk5NCw1MDk5Niw1MDk5OCw1MWUzLDUxMDAxLDUxMDAyLDUxMDAzLDUxMDA2LDUxMDA3LDUxMDA5LDUxMDEwLDUxMDExLDUxMDEzLDUxMDE0LDUxMDE1LDUxMDE2LDUxMDE3LDUxMDE5LDUxMDIyLDUxMDI0LDUxMDMzLDUxMDM0LDUxMDM1LDUx''@;'; put 'put ''MDM3LDUxMDM4LDUxMDM5LDUxMDQxLDUxMDQyLDUxMDQzLDUxMDQ0LDUxMDQ1LDUxMDQ2LDUxMDQ3LDUxMDQ5LDUxMDUwLDUxMDUyLDUxMDUzLDUxMDU0LDUxMDU1LDUxMDU2LDUxMDU3LDUxMDU4LDUxMDU5LDUxMDYyLDUxMDYzLDUxMDY1LDUxMDY2LDUxMDY3LDUxMDcxLDUxMDcyLDUxMDcz''@;'; put 'put ''LDUxMDc0LDUxMDc4LDUxMDgzLDUxMDg0LDUxMDg1LDUxMDg3LDUxMDkwLDUxMDkxLDUxMDkzLDUxMDk3LDUxMDk5LDUxMTAwLDUxMTAxLDUxMTAyLDUxMTAzLDUxMTA2LDUxMTExLDUxMTEyLDUxMTEzLDUxMTE0LDUxMTE1LDUxMTE4LDUxMTE5LDUxMTIxLDUxMTIyLDUxMTIzLDUxMTI1LDUx''@;'; put 'put ''MTI2LDUxMTI3LDUxMTI4LDUxMTI5LDUxMTMwLDUxMTMxLDUxMTM0LDUxMTM4LDUxMTM5LDUxMTQwLDUxMTQxLDUxMTQyLDUxMTQzLDUxMTQ2LDUxMTQ3LDUxMTQ5LDUxMTUxLDUxMTUzLDUxMTU0LDUxMTU1LDUxMTU2LDUxMTU3LDUxMTU4LDUxMTU5LDUxMTYxLDUxMTYyLDUxMTYzLDUxMTY0''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxMTY2LDUxMTY3LDUxMTY4LDUxMTY5LDUxMTcwLDUxMTcxLDUxMTczLDUxMTc0LDUxMTc1LDUxMTc3LDUxMTc4LDUxMTc5LDUxMTgxLDUxMTgyLDUxMTgzLDUxMTg0LDUxMTg1LDUxMTg2LDUxMTg3LDUxMTg4LDUxMTg5LDUxMTkwLDUx''@;'; put 'put ''MTkxLDUxMTkyLDUxMTkzLDUxMTk0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxMTk1LDUxMTk2LDUxMTk3LDUxMTk4LDUxMTk5LDUxMjAyLDUxMjAzLDUxMjA1LDUxMjA2LDUxMjA3LDUxMjA5LDUxMjExLDUxMjEyLDUxMjEzLDUxMjE0LDUxMjE1LDUxMjE4LDUxMjIwLDUxMjIz''@;'; put 'put ''LDUxMjI0LDUxMjI1LDUxMjI2LDUxMjI3LDUxMjMwLDUxMjMxLDUxMjMzLDUxMjM0LDUxMjM1LDUxMjM3LDUxMjM4LDUxMjM5LDUxMjQwLDUxMjQxLDUxMjQyLDUxMjQzLDUxMjQ2LDUxMjQ4LDUxMjUwLDUxMjUxLDUxMjUyLDUxMjUzLDUxMjU0LDUxMjU1LDUxMjU3LDUxMjU4LDUxMjU5LDUx''@;'; put 'put ''MjYxLDUxMjYyLDUxMjYzLDUxMjY1LDUxMjY2LDUxMjY3LDUxMjY4LDUxMjY5LDUxMjcwLDUxMjcxLDUxMjc0LDUxMjc1LDUxMjc4LDUxMjc5LDUxMjgwLDUxMjgxLDUxMjgyLDUxMjgzLDUxMjg1LDUxMjg2LDUxMjg3LDUxMjg4LDUxMjg5LDUxMjkwLDUxMjkxLDUxMjkyLDUxMjkzLDUxMjk0''@;'; put 'put ''LDUxMjk1LDUxMjk2LDUxMjk3LDUxMjk4LDUxMjk5LDUxMzAwLDUxMzAxLDUxMzAyLDUxMzAzLDUxMzA0LDUxMzA1LDUxMzA2LDUxMzA3LDUxMzA4LDUxMzA5LDUxMzEwLDUxMzExLDUxMzE0LDUxMzE1LDUxMzE3LDUxMzE4LDUxMzE5LDUxMzIxLDUxMzIzLDUxMzI0LDUxMzI1LDUxMzI2LDUx''@;'; put 'put ''MzI3LDUxMzMwLDUxMzMyLDUxMzM2LDUxMzM3LDUxMzM4LDUxMzQyLDUxMzQzLDUxMzQ0LDUxMzQ1LDUxMzQ2LDUxMzQ3LDUxMzQ5LDUxMzUwLDUxMzUxLDUxMzUyLDUxMzUzLDUxMzU0LDUxMzU1LDUxMzU2LDUxMzU4LDUxMzYwLDUxMzYyLDUxMzYzLDUxMzY0LDUxMzY1LDUxMzY2LDUxMzY3''@;'; put 'put ''LDUxMzY5LDUxMzcwLDUxMzcxLDUxMzcyLDUxMzczLDUxMzc0LDUxMzc1LDUxMzc2LDUxMzc3LDUxMzc4LDUxMzc5LDUxMzgwLDUxMzgxLDUxMzgyLDUxMzgzLDUxMzg0LDUxMzg1LDUxMzg2LDUxMzg3LDUxMzkwLDUxMzkxLDUxMzkyLDUxMzkzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLDUxMzk0LDUxMzk1LDUxMzk3LDUxMzk4LDUxMzk5LDUxNDAxLDUxNDAyLDUxNDAzLDUxNDA1LDUxNDA2LDUxNDA3LDUxNDA4LDUxNDA5LDUxNDEwLDUxNDExLDUxNDE0LDUxNDE2LDUxNDE4LDUxNDE5LDUxNDIwLDUxNDIxLDUxNDIyLDUxNDIzLDUxNDI2LDUxNDI3LDUxNDI5LG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNDMwLDUxNDMxLDUxNDMyLDUxNDMzLDUxNDM0LDUxNDM1LDUxNDM2LDUxNDM3LDUxNDM4LDUxNDM5LDUxNDQwLDUxNDQxLDUxNDQyLDUxNDQzLDUxNDQ0LDUxNDQ2LDUxNDQ3LDUxNDQ4LDUxNDQ5LDUxNDUwLDUxNDUxLDUxNDU0LDUxNDU1LDUx''@;'; put 'put ''NDU3LDUxNDU4LDUxNDU5LDUxNDYzLDUxNDY0LDUxNDY1LDUxNDY2LDUxNDY3LDUxNDcwLDEyMjg4LDEyMjg5LDEyMjkwLDE4Myw4MjI5LDgyMzAsMTY4LDEyMjkxLDE3Myw4MjEzLDg3NDEsNjUzNDAsODc2NCw4MjE2LDgyMTcsODIyMCw4MjIxLDEyMzA4LDEyMzA5LDEyMjk2LDEyMjk3LDEy''@;'; put 'put ''Mjk4LDEyMjk5LDEyMzAwLDEyMzAxLDEyMzAyLDEyMzAzLDEyMzA0LDEyMzA1LDE3NywyMTUsMjQ3LDg4MDAsODgwNCw4ODA1LDg3MzQsODc1NiwxNzYsODI0Miw4MjQzLDg0NTEsODQ5MSw2NTUwNCw2NTUwNSw2NTUwOSw5Nzk0LDk3OTIsODczNiw4ODY5LDg5NzgsODcwNiw4NzExLDg4MDEs''@;'; put 'put ''ODc4NiwxNjcsODI1MSw5NzM0LDk3MzMsOTY3NSw5Njc5LDk2NzgsOTY3MSw5NjcwLDk2MzMsOTYzMiw5NjUxLDk2NTAsOTY2MSw5NjYwLDg1OTQsODU5Miw4NTkzLDg1OTUsODU5NiwxMjMwNyw4ODEwLDg4MTEsODczMCw4NzY1LDg3MzMsODc1Nyw4NzQ3LDg3NDgsODcxMiw4NzE1LDg4Mzgs''@;'; put 'put ''ODgzOSw4ODM0LDg4MzUsODc0Niw4NzQ1LDg3NDMsODc0NCw2NTUwNiw1MTQ3Miw1MTQ3NCw1MTQ3NSw1MTQ3Niw1MTQ3Nyw1MTQ3OCw1MTQ3OSw1MTQ4MSw1MTQ4Miw1MTQ4Myw1MTQ4NCw1MTQ4NSw1MTQ4Niw1MTQ4Nyw1MTQ4OCw1MTQ4OSw1MTQ5MCw1MTQ5MSw1MTQ5Miw1MTQ5Myw1MTQ5''@;'; put 'put ''NCw1MTQ5NSw1MTQ5Niw1MTQ5Nyw1MTQ5OCw1MTQ5OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTUwMSw1MTUwMiw1MTUwMyw1MTUwNCw1MTUwNSw1MTUwNiw1MTUwNyw1MTUwOSw1MTUxMCw1MTUxMSw1MTUxMiw1MTUxMyw1MTUxNCw1MTUxNSw1MTUxNiw1MTUxNyw1MTUxOCw1''@;'; put 'put ''MTUxOSw1MTUyMCw1MTUyMSw1MTUyMiw1MTUyMyw1MTUyNCw1MTUyNSw1MTUyNiw1MTUyNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTUyOCw1MTUyOSw1MTUzMCw1MTUzMSw1MTUzMiw1MTUzMyw1MTUzNCw1MTUzNSw1MTUzOCw1MTUzOSw1MTU0MSw1MTU0Miw1MTU0Myw1MTU0''@;'; put 'put ''NSw1MTU0Niw1MTU0Nyw1MTU0OCw1MTU0OSw1MTU1MCw1MTU1MSw1MTU1NCw1MTU1Niw1MTU1Nyw1MTU1OCw1MTU1OSw1MTU2MCw1MTU2MSw1MTU2Miw1MTU2Myw1MTU2NSw1MTU2Niw1MTU2Nyw4NjU4LDg2NjAsODcwNCw4NzA3LDE4MCw2NTM3NCw3MTEsNzI4LDczMyw3MzAsNzI5LDE4NCw3''@;'; put 'put ''MzEsMTYxLDE5MSw3MjAsODc1MCw4NzIxLDg3MTksMTY0LDg0NTcsODI0MCw5NjY1LDk2NjQsOTY1NSw5NjU0LDk4MjgsOTgyNCw5ODI1LDk4MjksOTgzMSw5ODI3LDg4NTcsOTY3Miw5NjM1LDk2ODAsOTY4MSw5NjE4LDk2MzYsOTYzNyw5NjQwLDk2MzksOTYzOCw5NjQxLDk4MzIsOTc0Myw5''@;'; put 'put ''NzQyLDk3NTYsOTc1OCwxODIsODIyNCw4MjI1LDg1OTcsODU5OSw4NjAxLDg1OTgsODYwMCw5ODM3LDk4MzMsOTgzNCw5ODM2LDEyOTI3LDEyODI4LDg0NzAsMTMyNTUsODQ4MiwxMzI1MCwxMzI3Miw4NDgxLDgzNjQsMTc0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTU2OSw1MTU3MCw1MTU3MSw1MTU3Myw1MTU3NCw1MTU3NSw1MTU3Niw1MTU3Nyw1MTU3OCw1MTU3OSw1MTU4MSw1MTU4Miw1MTU4Myw1MTU4NCw1MTU4''@;'; put 'put ''NSw1MTU4Niw1MTU4Nyw1MTU4OCw1MTU4OSw1MTU5MCw1MTU5MSw1MTU5NCw1MTU5NSw1MTU5Nyw1MTU5OCw1MTU5OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTYwMSw1MTYwMiw1MTYwMyw1MTYwNCw1MTYwNSw1MTYwNiw1MTYwNyw1MTYxMCw1MTYxMiw1MTYxNCw1MTYxNSw1''@;'; put 'put ''MTYxNiw1MTYxNyw1MTYxOCw1MTYxOSw1MTYyMCw1MTYyMSw1MTYyMiw1MTYyMyw1MTYyNCw1MTYyNSw1MTYyNiw1MTYyNyw1MTYyOCw1MTYyOSw1MTYzMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTYzMSw1MTYzMiw1MTYzMyw1MTYzNCw1MTYzNSw1MTYzNiw1MTYzNyw1MTYz''@;'; put 'put ''OCw1MTYzOSw1MTY0MCw1MTY0MSw1MTY0Miw1MTY0Myw1MTY0NCw1MTY0NSw1MTY0Niw1MTY0Nyw1MTY1MCw1MTY1MSw1MTY1Myw1MTY1NCw1MTY1Nyw1MTY1OSw1MTY2MCw1MTY2MSw1MTY2Miw1MTY2Myw1MTY2Niw1MTY2OCw1MTY3MSw1MTY3Miw1MTY3NSw2NTI4MSw2NTI4Miw2NTI4Myw2''@;'; put 'put ''NTI4NCw2NTI4NSw2NTI4Niw2NTI4Nyw2NTI4OCw2NTI4OSw2NTI5MCw2NTI5MSw2NTI5Miw2NTI5Myw2NTI5NCw2NTI5NSw2NTI5Niw2NTI5Nyw2NTI5OCw2NTI5OSw2NTMwMCw2NTMwMSw2NTMwMiw2NTMwMyw2NTMwNCw2NTMwNSw2NTMwNiw2NTMwNyw2NTMwOCw2NTMwOSw2NTMxMCw2NTMx''@;'; put 'put ''MSw2NTMxMiw2NTMxMyw2NTMxNCw2NTMxNSw2NTMxNiw2NTMxNyw2NTMxOCw2NTMxOSw2NTMyMCw2NTMyMSw2NTMyMiw2NTMyMyw2NTMyNCw2NTMyNSw2NTMyNiw2NTMyNyw2NTMyOCw2NTMyOSw2NTMzMCw2NTMzMSw2NTMzMiw2NTMzMyw2NTMzNCw2NTMzNSw2NTMzNiw2NTMzNyw2NTMzOCw2''@;'; put 'put ''NTMzOSw2NTUxMCw2NTM0MSw2NTM0Miw2NTM0Myw2NTM0NCw2NTM0NSw2NTM0Niw2NTM0Nyw2NTM0OCw2NTM0OSw2NTM1MCw2NTM1MSw2NTM1Miw2NTM1Myw2NTM1NCw2NTM1NSw2NTM1Niw2NTM1Nyw2NTM1OCw2NTM1OSw2NTM2MCw2NTM2MSw2NTM2Miw2NTM2Myw2NTM2NCw2NTM2NSw2NTM2''@;'; put 'put ''Niw2NTM2Nyw2NTM2OCw2NTM2OSw2NTM3MCw2NTM3MSw2NTM3Miw2NTM3Myw2NTUwNyw1MTY3OCw1MTY3OSw1MTY4MSw1MTY4Myw1MTY4NSw1MTY4Niw1MTY4OCw1MTY4OSw1MTY5MCw1MTY5MSw1MTY5NCw1MTY5OCw1MTY5OSw1MTcwMCw1MTcwMSw1MTcwMiw1MTcwMyw1MTcwNiw1MTcwNyw1''@;'; put 'put ''MTcwOSw1MTcxMCw1MTcxMSw1MTcxMyw1MTcxNCw1MTcxNSw1MTcxNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTcxNyw1MTcxOCw1MTcxOSw1MTcyMiw1MTcyNiw1MTcyNyw1MTcyOCw1MTcyOSw1MTczMCw1MTczMSw1MTczMyw1MTczNCw1MTczNSw1MTczNyw1MTczOCw1MTcz''@;'; put 'put ''OSw1MTc0MCw1MTc0MSw1MTc0Miw1MTc0Myw1MTc0NCw1MTc0NSw1MTc0Niw1MTc0Nyw1MTc0OCw1MTc0OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTc1MCw1MTc1MSw1MTc1Miw1MTc1NCw1MTc1NSw1MTc1Niw1MTc1Nyw1MTc1OCw1MTc1OSw1MTc2MCw1MTc2MSw1MTc2Miw1''@;'; put 'put ''MTc2Myw1MTc2NCw1MTc2NSw1MTc2Niw1MTc2Nyw1MTc2OCw1MTc2OSw1MTc3MCw1MTc3MSw1MTc3Miw1MTc3Myw1MTc3NCw1MTc3NSw1MTc3Niw1MTc3Nyw1MTc3OCw1MTc3OSw1MTc4MCw1MTc4MSw1MTc4MiwxMjU5MywxMjU5NCwxMjU5NSwxMjU5NiwxMjU5NywxMjU5OCwxMjU5OSwxMjYw''@;'; put 'put ''MCwxMjYwMSwxMjYwMiwxMjYwMywxMjYwNCwxMjYwNSwxMjYwNiwxMjYwNywxMjYwOCwxMjYwOSwxMjYxMCwxMjYxMSwxMjYxMiwxMjYxMywxMjYxNCwxMjYxNSwxMjYxNiwxMjYxNywxMjYxOCwxMjYxOSwxMjYyMCwxMjYyMSwxMjYyMiwxMjYyMywxMjYyNCwxMjYyNSwxMjYyNiwxMjYyNywx''@;'; put 'put ''MjYyOCwxMjYyOSwxMjYzMCwxMjYzMSwxMjYzMiwxMjYzMywxMjYzNCwxMjYzNSwxMjYzNiwxMjYzNywxMjYzOCwxMjYzOSwxMjY0MCwxMjY0MSwxMjY0MiwxMjY0MywxMjY0NCwxMjY0NSwxMjY0NiwxMjY0NywxMjY0OCwxMjY0OSwxMjY1MCwxMjY1MSwxMjY1MiwxMjY1MywxMjY1NCwxMjY1''@;'; put 'put ''NSwxMjY1NiwxMjY1NywxMjY1OCwxMjY1OSwxMjY2MCwxMjY2MSwxMjY2MiwxMjY2MywxMjY2NCwxMjY2NSwxMjY2NiwxMjY2NywxMjY2OCwxMjY2OSwxMjY3MCwxMjY3MSwxMjY3MiwxMjY3MywxMjY3NCwxMjY3NSwxMjY3NiwxMjY3NywxMjY3OCwxMjY3OSwxMjY4MCwxMjY4MSwxMjY4Miwx''@;'; put 'put ''MjY4MywxMjY4NCwxMjY4NSwxMjY4Niw1MTc4Myw1MTc4NCw1MTc4NSw1MTc4Niw1MTc4Nyw1MTc5MCw1MTc5MSw1MTc5Myw1MTc5NCw1MTc5NSw1MTc5Nyw1MTc5OCw1MTc5OSw1MTgwMCw1MTgwMSw1MTgwMiw1MTgwMyw1MTgwNiw1MTgxMCw1MTgxMSw1MTgxMiw1MTgxMyw1MTgxNCw1MTgx''@;'; put 'put ''NSw1MTgxNyw1MTgxOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTgxOSw1MTgyMCw1MTgyMSw1MTgyMiw1MTgyMyw1MTgyNCw1MTgyNSw1MTgyNiw1MTgyNyw1MTgyOCw1MTgyOSw1MTgzMCw1MTgzMSw1MTgzMiw1MTgzMyw1MTgzNCw1MTgzNSw1MTgzNiw1MTgzOCw1MTgzOSw1''@;'; put 'put ''MTg0MCw1MTg0MSw1MTg0Miw1MTg0Myw1MTg0NSw1MTg0NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTg0Nyw1MTg0OCw1MTg0OSw1MTg1MCw1MTg1MSw1MTg1Miw1MTg1Myw1MTg1NCw1MTg1NSw1MTg1Niw1MTg1Nyw1MTg1OCw1MTg1OSw1MTg2MCw1MTg2MSw1MTg2Miw1MTg2''@;'; put 'put ''Myw1MTg2NSw1MTg2Niw1MTg2Nyw1MTg2OCw1MTg2OSw1MTg3MCw1MTg3MSw1MTg3Miw1MTg3Myw1MTg3NCw1MTg3NSw1MTg3Niw1MTg3Nyw1MTg3OCw1MTg3OSw4NTYwLDg1NjEsODU2Miw4NTYzLDg1NjQsODU2NSw4NTY2LDg1NjcsODU2OCw4NTY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCw4NTQ0LDg1NDUsODU0Niw4NTQ3LDg1NDgsODU0OSw4NTUwLDg1NTEsODU1Miw4NTUzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkz''@;'; put 'put ''Myw5MzQsOTM1LDkzNiw5MzcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLDUxODgwLDUxODgxLDUxODgyLDUxODgzLDUxODg0LDUxODg1LDUxODg2LDUxODg3LDUxODg4LDUxODg5LDUxODkwLDUxODkxLDUxODkyLDUxODkzLDUxODk0LDUxODk1LDUxODk2LDUxODk3LDUxODk4LDUxODk5LDUxOTAyLDUxOTAzLDUxOTA1LDUxOTA2LDUx''@;'; put 'put ''OTA3LDUxOTA5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxOTEwLDUxOTExLDUxOTEyLDUxOTEzLDUxOTE0LDUxOTE1LDUxOTE4LDUxOTIwLDUxOTIyLDUxOTI0LDUxOTI1LDUxOTI2LDUxOTI3LDUxOTMwLDUxOTMxLDUxOTMyLDUxOTMzLDUxOTM0LDUxOTM1LDUxOTM3LDUxOTM4''@;'; put 'put ''LDUxOTM5LDUxOTQwLDUxOTQxLDUxOTQyLDUxOTQzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxOTQ0LDUxOTQ1LDUxOTQ2LDUxOTQ3LDUxOTQ5LDUxOTUwLDUxOTUxLDUxOTUyLDUxOTUzLDUxOTU0LDUxOTU1LDUxOTU3LDUxOTU4LDUxOTU5LDUxOTYwLDUxOTYxLDUxOTYyLDUx''@;'; put 'put ''OTYzLDUxOTY0LDUxOTY1LDUxOTY2LDUxOTY3LDUxOTY4LDUxOTY5LDUxOTcwLDUxOTcxLDUxOTcyLDUxOTczLDUxOTc0LDUxOTc1LDUxOTc3LDUxOTc4LDk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Niw5NDkyLDk1MDAsOTUxNiw5NTA4LDk1MjQsOTUzMiw5NDczLDk0NzUsOTQ4Nyw5NDkxLDk0''@;'; put 'put ''OTksOTQ5NSw5NTA3LDk1MjMsOTUxNSw5NTMxLDk1NDcsOTUwNCw5NTE5LDk1MTIsOTUyNyw5NTM1LDk1MDEsOTUyMCw5NTA5LDk1MjgsOTUzOCw5NDkwLDk0ODksOTQ5OCw5NDk3LDk0OTQsOTQ5Myw5NDg2LDk0ODUsOTUwMiw5NTAzLDk1MDUsOTUwNiw5NTEwLDk1MTEsOTUxMyw5NTE0LDk1''@;'; put 'put ''MTcsOTUxOCw5NTIxLDk1MjIsOTUyNSw5NTI2LDk1MjksOTUzMCw5NTMzLDk1MzQsOTUzNiw5NTM3LDk1MzksOTU0MCw5NTQxLDk1NDIsOTU0Myw5NTQ0LDk1NDUsOTU0NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE5NzksNTE5ODAsNTE5ODEsNTE5ODIsNTE5ODMsNTE5ODUsNTE5ODYsNTE5ODcsNTE5ODksNTE5OTAsNTE5OTEsNTE5OTMsNTE5OTQsNTE5OTUsNTE5OTYsNTE5OTcsNTE5OTgs''@;'; put 'put ''NTE5OTksNTIwMDIsNTIwMDMsNTIwMDQsNTIwMDUsNTIwMDYsNTIwMDcsNTIwMDgsNTIwMDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIwMTAsNTIwMTEsNTIwMTIsNTIwMTMsNTIwMTQsNTIwMTUsNTIwMTYsNTIwMTcsNTIwMTgsNTIwMTksNTIwMjAsNTIwMjEsNTIwMjIsNTIw''@;'; put 'put ''MjMsNTIwMjQsNTIwMjUsNTIwMjYsNTIwMjcsNTIwMjgsNTIwMjksNTIwMzAsNTIwMzEsNTIwMzIsNTIwMzQsNTIwMzUsNTIwMzYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIwMzcsNTIwMzgsNTIwMzksNTIwNDIsNTIwNDMsNTIwNDUsNTIwNDYsNTIwNDcsNTIwNDksNTIwNTAs''@;'; put 'put ''NTIwNTEsNTIwNTIsNTIwNTMsNTIwNTQsNTIwNTUsNTIwNTgsNTIwNTksNTIwNjAsNTIwNjIsNTIwNjMsNTIwNjQsNTIwNjUsNTIwNjYsNTIwNjcsNTIwNjksNTIwNzAsNTIwNzEsNTIwNzIsNTIwNzMsNTIwNzQsNTIwNzUsNTIwNzYsMTMyMDUsMTMyMDYsMTMyMDcsODQ2NywxMzIwOCwxMzI1''@;'; put 'put ''MiwxMzIxOSwxMzIyMCwxMzIyMSwxMzIyMiwxMzIwOSwxMzIxMCwxMzIxMSwxMzIxMiwxMzIxMywxMzIxNCwxMzIxNSwxMzIxNiwxMzIxNywxMzIxOCwxMzI1OCwxMzE5NywxMzE5OCwxMzE5OSwxMzI2MywxMzE5MiwxMzE5MywxMzI1NiwxMzIyMywxMzIyNCwxMzIzMiwxMzIzMywxMzIzNCwx''@;'; put 'put ''MzIzNSwxMzIzNiwxMzIzNywxMzIzOCwxMzIzOSwxMzI0MCwxMzI0MSwxMzE4NCwxMzE4NSwxMzE4NiwxMzE4NywxMzE4OCwxMzI0MiwxMzI0MywxMzI0NCwxMzI0NSwxMzI0NiwxMzI0NywxMzIwMCwxMzIwMSwxMzIwMiwxMzIwMywxMzIwNCw4NDg2LDEzMjQ4LDEzMjQ5LDEzMTk0LDEzMTk1''@;'; put 'put ''LDEzMTk2LDEzMjcwLDEzMjUzLDEzMjI5LDEzMjMwLDEzMjMxLDEzMjc1LDEzMjI1LDEzMjI2LDEzMjI3LDEzMjI4LDEzMjc3LDEzMjY0LDEzMjY3LDEzMjUxLDEzMjU3LDEzMjc2LDEzMjU0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLDUyMDc3LDUyMDc4LDUyMDc5LDUyMDgwLDUyMDgxLDUyMDgyLDUyMDgzLDUyMDg0LDUyMDg1LDUyMDg2LDUyMDg3LDUyMDkwLDUyMDkxLDUyMDkyLDUyMDkzLDUyMDk0LDUyMDk1LDUyMDk2LDUyMDk3LDUyMDk4LDUyMDk5LDUyMTAwLDUyMTAxLDUyMTAyLDUy''@;'; put 'put ''MTAzLDUyMTA0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMTA1LDUyMTA2LDUyMTA3LDUyMTA4LDUyMTA5LDUyMTEwLDUyMTExLDUyMTEyLDUyMTEzLDUyMTE0LDUyMTE1LDUyMTE2LDUyMTE3LDUyMTE4LDUyMTE5LDUyMTIwLDUyMTIxLDUyMTIyLDUyMTIzLDUyMTI1LDUyMTI2''@;'; put 'put ''LDUyMTI3LDUyMTI4LDUyMTI5LDUyMTMwLDUyMTMxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMTMyLDUyMTMzLDUyMTM0LDUyMTM1LDUyMTM2LDUyMTM3LDUyMTM4LDUyMTM5LDUyMTQwLDUyMTQxLDUyMTQyLDUyMTQzLDUyMTQ0LDUyMTQ1LDUyMTQ2LDUyMTQ3LDUyMTQ4LDUy''@;'; put 'put ''MTQ5LDUyMTUwLDUyMTUxLDUyMTUzLDUyMTU0LDUyMTU1LDUyMTU2LDUyMTU3LDUyMTU4LDUyMTU5LDUyMTYwLDUyMTYxLDUyMTYyLDUyMTYzLDUyMTY0LDE5OCwyMDgsMTcwLDI5NCxudWxsLDMwNixudWxsLDMxOSwzMjEsMjE2LDMzOCwxODYsMjIyLDM1OCwzMzAsbnVsbCwxMjg5NiwxMjg5''@;'; put 'put ''NywxMjg5OCwxMjg5OSwxMjkwMCwxMjkwMSwxMjkwMiwxMjkwMywxMjkwNCwxMjkwNSwxMjkwNiwxMjkwNywxMjkwOCwxMjkwOSwxMjkxMCwxMjkxMSwxMjkxMiwxMjkxMywxMjkxNCwxMjkxNSwxMjkxNiwxMjkxNywxMjkxOCwxMjkxOSwxMjkyMCwxMjkyMSwxMjkyMiwxMjkyMyw5NDI0LDk0''@;'; put 'put ''MjUsOTQyNiw5NDI3LDk0MjgsOTQyOSw5NDMwLDk0MzEsOTQzMiw5NDMzLDk0MzQsOTQzNSw5NDM2LDk0MzcsOTQzOCw5NDM5LDk0NDAsOTQ0MSw5NDQyLDk0NDMsOTQ0NCw5NDQ1LDk0NDYsOTQ0Nyw5NDQ4LDk0NDksOTMxMiw5MzEzLDkzMTQsOTMxNSw5MzE2LDkzMTcsOTMxOCw5MzE5LDkz''@;'; put 'put ''MjAsOTMyMSw5MzIyLDkzMjMsOTMyNCw5MzI1LDkzMjYsMTg5LDg1MzEsODUzMiwxODgsMTkwLDg1MzksODU0MCw4NTQxLDg1NDIsNTIxNjUsNTIxNjYsNTIxNjcsNTIxNjgsNTIxNjksNTIxNzAsNTIxNzEsNTIxNzIsNTIxNzMsNTIxNzQsNTIxNzUsNTIxNzYsNTIxNzcsNTIxNzgsNTIxNzks''@;'; put 'put ''NTIxODEsNTIxODIsNTIxODMsNTIxODQsNTIxODUsNTIxODYsNTIxODcsNTIxODgsNTIxODksNTIxOTAsNTIxOTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIxOTIsNTIxOTMsNTIxOTQsNTIxOTUsNTIxOTcsNTIxOTgsNTIyMDAsNTIyMDIsNTIyMDMsNTIyMDQsNTIyMDUsNTIy''@;'; put 'put ''MDYsNTIyMDcsNTIyMDgsNTIyMDksNTIyMTAsNTIyMTEsNTIyMTIsNTIyMTMsNTIyMTQsNTIyMTUsNTIyMTYsNTIyMTcsNTIyMTgsNTIyMTksNTIyMjAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIyMjEsNTIyMjIsNTIyMjMsNTIyMjQsNTIyMjUsNTIyMjYsNTIyMjcsNTIyMjgs''@;'; put 'put ''NTIyMjksNTIyMzAsNTIyMzEsNTIyMzIsNTIyMzMsNTIyMzQsNTIyMzUsNTIyMzgsNTIyMzksNTIyNDEsNTIyNDIsNTIyNDMsNTIyNDUsNTIyNDYsNTIyNDcsNTIyNDgsNTIyNDksNTIyNTAsNTIyNTEsNTIyNTQsNTIyNTUsNTIyNTYsNTIyNTksNTIyNjAsMjMwLDI3MywyNDAsMjk1LDMwNSwz''@;'; put 'put ''MDcsMzEyLDMyMCwzMjIsMjQ4LDMzOSwyMjMsMjU0LDM1OSwzMzEsMzI5LDEyODAwLDEyODAxLDEyODAyLDEyODAzLDEyODA0LDEyODA1LDEyODA2LDEyODA3LDEyODA4LDEyODA5LDEyODEwLDEyODExLDEyODEyLDEyODEzLDEyODE0LDEyODE1LDEyODE2LDEyODE3LDEyODE4LDEyODE5LDEy''@;'; put 'put ''ODIwLDEyODIxLDEyODIyLDEyODIzLDEyODI0LDEyODI1LDEyODI2LDEyODI3LDkzNzIsOTM3Myw5Mzc0LDkzNzUsOTM3Niw5Mzc3LDkzNzgsOTM3OSw5MzgwLDkzODEsOTM4Miw5MzgzLDkzODQsOTM4NSw5Mzg2LDkzODcsOTM4OCw5Mzg5LDkzOTAsOTM5MSw5MzkyLDkzOTMsOTM5NCw5Mzk1''@;'; put 'put ''LDkzOTYsOTM5Nyw5MzMyLDkzMzMsOTMzNCw5MzM1LDkzMzYsOTMzNyw5MzM4LDkzMzksOTM0MCw5MzQxLDkzNDIsOTM0Myw5MzQ0LDkzNDUsOTM0NiwxODUsMTc4LDE3OSw4MzA4LDgzMTksODMyMSw4MzIyLDgzMjMsODMyNCw1MjI2MSw1MjI2Miw1MjI2Niw1MjI2Nyw1MjI2OSw1MjI3MSw1''@;'; put 'put ''MjI3Myw1MjI3NCw1MjI3NSw1MjI3Niw1MjI3Nyw1MjI3OCw1MjI3OSw1MjI4Miw1MjI4Nyw1MjI4OCw1MjI4OSw1MjI5MCw1MjI5MSw1MjI5NCw1MjI5NSw1MjI5Nyw1MjI5OCw1MjI5OSw1MjMwMSw1MjMwMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjMwMyw1MjMwNCw1MjMw''@;'; put 'put ''NSw1MjMwNiw1MjMwNyw1MjMxMCw1MjMxNCw1MjMxNSw1MjMxNiw1MjMxNyw1MjMxOCw1MjMxOSw1MjMyMSw1MjMyMiw1MjMyMyw1MjMyNSw1MjMyNyw1MjMyOSw1MjMzMCw1MjMzMSw1MjMzMiw1MjMzMyw1MjMzNCw1MjMzNSw1MjMzNyw1MjMzOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCw1MjMzOSw1MjM0MCw1MjM0Miw1MjM0Myw1MjM0NCw1MjM0NSw1MjM0Niw1MjM0Nyw1MjM0OCw1MjM0OSw1MjM1MCw1MjM1MSw1MjM1Miw1MjM1Myw1MjM1NCw1MjM1NSw1MjM1Niw1MjM1Nyw1MjM1OCw1MjM1OSw1MjM2MCw1MjM2MSw1MjM2Miw1MjM2Myw1MjM2NCw1MjM2NSw1MjM2''@;'; put 'put ''Niw1MjM2Nyw1MjM2OCw1MjM2OSw1MjM3MCw1MjM3MSwxMjM1MywxMjM1NCwxMjM1NSwxMjM1NiwxMjM1NywxMjM1OCwxMjM1OSwxMjM2MCwxMjM2MSwxMjM2MiwxMjM2MywxMjM2NCwxMjM2NSwxMjM2NiwxMjM2NywxMjM2OCwxMjM2OSwxMjM3MCwxMjM3MSwxMjM3MiwxMjM3MywxMjM3NCwx''@;'; put 'put ''MjM3NSwxMjM3NiwxMjM3NywxMjM3OCwxMjM3OSwxMjM4MCwxMjM4MSwxMjM4MiwxMjM4MywxMjM4NCwxMjM4NSwxMjM4NiwxMjM4NywxMjM4OCwxMjM4OSwxMjM5MCwxMjM5MSwxMjM5MiwxMjM5MywxMjM5NCwxMjM5NSwxMjM5NiwxMjM5NywxMjM5OCwxMjM5OSwxMjQwMCwxMjQwMSwxMjQw''@;'; put 'put ''MiwxMjQwMywxMjQwNCwxMjQwNSwxMjQwNiwxMjQwNywxMjQwOCwxMjQwOSwxMjQxMCwxMjQxMSwxMjQxMiwxMjQxMywxMjQxNCwxMjQxNSwxMjQxNiwxMjQxNywxMjQxOCwxMjQxOSwxMjQyMCwxMjQyMSwxMjQyMiwxMjQyMywxMjQyNCwxMjQyNSwxMjQyNiwxMjQyNywxMjQyOCwxMjQyOSwx''@;'; put 'put ''MjQzMCwxMjQzMSwxMjQzMiwxMjQzMywxMjQzNCwxMjQzNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIzNzIsNTIzNzMsNTIzNzQsNTIzNzUsNTIzNzgsNTIzNzksNTIzODEsNTIzODIsNTIzODMsNTIzODUsNTIzODYsNTIzODcsNTIz''@;'; put 'put ''ODgsNTIzODksNTIzOTAsNTIzOTEsNTIzOTQsNTIzOTgsNTIzOTksNTI0MDAsNTI0MDEsNTI0MDIsNTI0MDMsNTI0MDYsNTI0MDcsNTI0MDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI0MTAsNTI0MTEsNTI0MTMsNTI0MTQsNTI0MTUsNTI0MTYsNTI0MTcsNTI0MTgsNTI0MTks''@;'; put 'put ''NTI0MjIsNTI0MjQsNTI0MjYsNTI0MjcsNTI0MjgsNTI0MjksNTI0MzAsNTI0MzEsNTI0MzMsNTI0MzQsNTI0MzUsNTI0MzcsNTI0MzgsNTI0MzksNTI0NDAsNTI0NDEsNTI0NDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI0NDMsNTI0NDQsNTI0NDUsNTI0NDYsNTI0NDcsNTI0''@;'; put 'put ''NDgsNTI0NDksNTI0NTAsNTI0NTEsNTI0NTMsNTI0NTQsNTI0NTUsNTI0NTYsNTI0NTcsNTI0NTgsNTI0NTksNTI0NjEsNTI0NjIsNTI0NjMsNTI0NjUsNTI0NjYsNTI0NjcsNTI0NjgsNTI0NjksNTI0NzAsNTI0NzEsNTI0NzIsNTI0NzMsNTI0NzQsNTI0NzUsNTI0NzYsNTI0NzcsMTI0NDks''@;'; put 'put ''MTI0NTAsMTI0NTEsMTI0NTIsMTI0NTMsMTI0NTQsMTI0NTUsMTI0NTYsMTI0NTcsMTI0NTgsMTI0NTksMTI0NjAsMTI0NjEsMTI0NjIsMTI0NjMsMTI0NjQsMTI0NjUsMTI0NjYsMTI0NjcsMTI0NjgsMTI0NjksMTI0NzAsMTI0NzEsMTI0NzIsMTI0NzMsMTI0NzQsMTI0NzUsMTI0NzYsMTI0''@;'; put 'put ''NzcsMTI0NzgsMTI0NzksMTI0ODAsMTI0ODEsMTI0ODIsMTI0ODMsMTI0ODQsMTI0ODUsMTI0ODYsMTI0ODcsMTI0ODgsMTI0ODksMTI0OTAsMTI0OTEsMTI0OTIsMTI0OTMsMTI0OTQsMTI0OTUsMTI0OTYsMTI0OTcsMTI0OTgsMTI0OTksMTI1MDAsMTI1MDEsMTI1MDIsMTI1MDMsMTI1MDQs''@;'; put 'put ''MTI1MDUsMTI1MDYsMTI1MDcsMTI1MDgsMTI1MDksMTI1MTAsMTI1MTEsMTI1MTIsMTI1MTMsMTI1MTQsMTI1MTUsMTI1MTYsMTI1MTcsMTI1MTgsMTI1MTksMTI1MjAsMTI1MjEsMTI1MjIsMTI1MjMsMTI1MjQsMTI1MjUsMTI1MjYsMTI1MjcsMTI1MjgsMTI1MjksMTI1MzAsMTI1MzEsMTI1''@;'; put 'put ''MzIsMTI1MzMsMTI1MzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNDc4LDUyNDc5LDUyNDgwLDUyNDgyLDUyNDgzLDUyNDg0LDUyNDg1LDUyNDg2LDUyNDg3LDUyNDkwLDUyNDkxLDUyNDkzLDUyNDk0LDUyNDk1LDUyNDk3LDUyNDk4LDUyNDk5LDUyNTAwLDUy''@;'; put 'put ''NTAxLDUyNTAyLDUyNTAzLDUyNTA2LDUyNTA4LDUyNTEwLDUyNTExLDUyNTEyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNTEzLDUyNTE0LDUyNTE1LDUyNTE3LDUyNTE4LDUyNTE5LDUyNTIxLDUyNTIyLDUyNTIzLDUyNTI1LDUyNTI2LDUyNTI3LDUyNTI4LDUyNTI5LDUyNTMw''@;'; put 'put ''LDUyNTMxLDUyNTMyLDUyNTMzLDUyNTM0LDUyNTM1LDUyNTM2LDUyNTM4LDUyNTM5LDUyNTQwLDUyNTQxLDUyNTQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNTQzLDUyNTQ0LDUyNTQ1LDUyNTQ2LDUyNTQ3LDUyNTQ4LDUyNTQ5LDUyNTUwLDUyNTUxLDUyNTUyLDUyNTUzLDUy''@;'; put 'put ''NTU0LDUyNTU1LDUyNTU2LDUyNTU3LDUyNTU4LDUyNTU5LDUyNTYwLDUyNTYxLDUyNTYyLDUyNTYzLDUyNTY0LDUyNTY1LDUyNTY2LDUyNTY3LDUyNTY4LDUyNTY5LDUyNTcwLDUyNTcxLDUyNTczLDUyNTc0LDUyNTc1LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwMjUsMTA0Niwx''@;'; put 'put ''MDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDExMDUsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5Niwx''@;'; put 'put ''MDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI1NzcsNTI1NzgsNTI1NzksNTI1ODEsNTI1ODIsNTI1ODMsNTI1ODQsNTI1ODUsNTI1ODYsNTI1ODcsNTI1OTAs''@;'; put 'put ''NTI1OTIsNTI1OTQsNTI1OTUsNTI1OTYsNTI1OTcsNTI1OTgsNTI1OTksNTI2MDEsNTI2MDIsNTI2MDMsNTI2MDQsNTI2MDUsNTI2MDYsNTI2MDcsNTI2MDgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI2MDksNTI2MTAsNTI2MTEsNTI2MTIsNTI2MTMsNTI2MTQsNTI2MTUsNTI2''@;'; put 'put ''MTcsNTI2MTgsNTI2MTksNTI2MjAsNTI2MjEsNTI2MjIsNTI2MjMsNTI2MjQsNTI2MjUsNTI2MjYsNTI2MjcsNTI2MzAsNTI2MzEsNTI2MzMsNTI2MzQsNTI2MzUsNTI2MzcsNTI2MzgsNTI2MzksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI2NDAsNTI2NDEsNTI2NDIsNTI2NDMs''@;'; put 'put ''NTI2NDYsNTI2NDgsNTI2NTAsNTI2NTEsNTI2NTIsNTI2NTMsNTI2NTQsNTI2NTUsNTI2NTcsNTI2NTgsNTI2NTksNTI2NjAsNTI2NjEsNTI2NjIsNTI2NjMsNTI2NjQsNTI2NjUsNTI2NjYsNTI2NjcsNTI2NjgsNTI2NjksNTI2NzAsNTI2NzEsNTI2NzIsNTI2NzMsNTI2NzQsNTI2NzUsNTI2''@;'; put 'put ''NzcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjY3OCw1MjY3OSw1MjY4MCw1MjY4''@;'; put 'put ''MSw1MjY4Miw1MjY4Myw1MjY4NSw1MjY4Niw1MjY4Nyw1MjY4OSw1MjY5MCw1MjY5MSw1MjY5Miw1MjY5Myw1MjY5NCw1MjY5NSw1MjY5Niw1MjY5Nyw1MjY5OCw1MjY5OSw1MjcwMCw1MjcwMSw1MjcwMiw1MjcwMyw1MjcwNCw1MjcwNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1''@;'; put 'put ''MjcwNiw1MjcwNyw1MjcwOCw1MjcwOSw1MjcxMCw1MjcxMSw1MjcxMyw1MjcxNCw1MjcxNSw1MjcxNyw1MjcxOCw1MjcxOSw1MjcyMSw1MjcyMiw1MjcyMyw1MjcyNCw1MjcyNSw1MjcyNiw1MjcyNyw1MjczMCw1MjczMiw1MjczNCw1MjczNSw1MjczNiw1MjczNyw1MjczOCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCw1MjczOSw1Mjc0MSw1Mjc0Miw1Mjc0Myw1Mjc0NSw1Mjc0Niw1Mjc0Nyw1Mjc0OSw1Mjc1MCw1Mjc1MSw1Mjc1Miw1Mjc1Myw1Mjc1NCw1Mjc1NSw1Mjc1Nyw1Mjc1OCw1Mjc1OSw1Mjc2MCw1Mjc2Miw1Mjc2Myw1Mjc2NCw1Mjc2NSw1Mjc2Niw1Mjc2Nyw1''@;'; put 'put ''Mjc3MCw1Mjc3MSw1Mjc3Myw1Mjc3NCw1Mjc3NSw1Mjc3Nyw1Mjc3OCw1Mjc3OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLDUyNzgwLDUyNzgxLDUyNzgyLDUyNzgzLDUyNzg2LDUyNzg4LDUyNzkwLDUyNzkxLDUyNzkyLDUyNzkzLDUyNzk0LDUyNzk1LDUyNzk2LDUyNzk3LDUyNzk4LDUyNzk5LDUyODAwLDUyODAxLDUyODAyLDUyODAzLDUyODA0LDUyODA1LDUyODA2LDUyODA3''@;'; put 'put ''LDUyODA4LDUyODA5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyODEwLDUyODExLDUyODEyLDUyODEzLDUyODE0LDUyODE1LDUyODE2LDUyODE3LDUyODE4LDUyODE5LDUyODIwLDUyODIxLDUyODIyLDUyODIzLDUyODI2LDUyODI3LDUyODI5LDUyODMwLDUyODM0LDUyODM1LDUy''@;'; put 'put ''ODM2LDUyODM3LDUyODM4LDUyODM5LDUyODQyLDUyODQ0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyODQ2LDUyODQ3LDUyODQ4LDUyODQ5LDUyODUwLDUyODUxLDUyODU0LDUyODU1LDUyODU3LDUyODU4LDUyODU5LDUyODYxLDUyODYyLDUyODYzLDUyODY0LDUyODY1LDUyODY2''@;'; put 'put ''LDUyODY3LDUyODcwLDUyODcyLDUyODc0LDUyODc1LDUyODc2LDUyODc3LDUyODc4LDUyODc5LDUyODgyLDUyODgzLDUyODg1LDUyODg2LDUyODg3LDUyODg5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI4OTAsNTI4OTEsNTI4OTIsNTI4OTMsNTI4OTQsNTI4OTUsNTI4OTgsNTI5MDIsNTI5MDMsNTI5MDQsNTI5MDUsNTI5MDYsNTI5MDcsNTI5MTAsNTI5MTEsNTI5MTIsNTI5''@;'; put 'put ''MTMsNTI5MTQsNTI5MTUsNTI5MTYsNTI5MTcsNTI5MTgsNTI5MTksNTI5MjAsNTI5MjEsNTI5MjIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI5MjMsNTI5MjQsNTI5MjUsNTI5MjYsNTI5MjcsNTI5MjgsNTI5MzAsNTI5MzEsNTI5MzIsNTI5MzMsNTI5MzQsNTI5MzUsNTI5MzYs''@;'; put 'put ''NTI5MzcsNTI5MzgsNTI5MzksNTI5NDAsNTI5NDEsNTI5NDIsNTI5NDMsNTI5NDQsNTI5NDUsNTI5NDYsNTI5NDcsNTI5NDgsNTI5NDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI5NTAsNTI5NTEsNTI5NTIsNTI5NTMsNTI5NTQsNTI5NTUsNTI5NTYsNTI5NTcsNTI5NTgsNTI5''@;'; put 'put ''NTksNTI5NjAsNTI5NjEsNTI5NjIsNTI5NjMsNTI5NjYsNTI5NjcsNTI5NjksNTI5NzAsNTI5NzMsNTI5NzQsNTI5NzUsNTI5NzYsNTI5NzcsNTI5NzgsNTI5NzksNTI5ODIsNTI5ODYsNTI5ODcsNTI5ODgsNTI5ODksNTI5OTAsNTI5OTEsNDQwMzIsNDQwMzMsNDQwMzYsNDQwMzksNDQwNDAs''@;'; put 'put ''NDQwNDEsNDQwNDIsNDQwNDgsNDQwNDksNDQwNTAsNDQwNTEsNDQwNTIsNDQwNTMsNDQwNTQsNDQwNTUsNDQwNTcsNDQwNTgsNDQwNTksNDQwNjAsNDQwNjEsNDQwNjQsNDQwNjgsNDQwNzYsNDQwNzcsNDQwNzksNDQwODAsNDQwODEsNDQwODgsNDQwODksNDQwOTIsNDQwOTYsNDQxMDcsNDQx''@;'; put 'put ''MDksNDQxMTYsNDQxMjAsNDQxMjQsNDQxNDQsNDQxNDUsNDQxNDgsNDQxNTEsNDQxNTIsNDQxNTQsNDQxNjAsNDQxNjEsNDQxNjMsNDQxNjQsNDQxNjUsNDQxNjYsNDQxNjksNDQxNzAsNDQxNzEsNDQxNzIsNDQxNzYsNDQxODAsNDQxODgsNDQxODksNDQxOTEsNDQxOTIsNDQxOTMsNDQyMDAs''@;'; put 'put ''NDQyMDEsNDQyMDIsNDQyMDQsNDQyMDcsNDQyMDgsNDQyMTYsNDQyMTcsNDQyMTksNDQyMjAsNDQyMjEsNDQyMjUsNDQyMjgsNDQyMzIsNDQyMzYsNDQyNDUsNDQyNDcsNDQyNTYsNDQyNTcsNDQyNjAsNDQyNjMsNDQyNjQsNDQyNjYsNDQyNjgsNDQyNzEsNDQyNzIsNDQyNzMsNDQyNzUsNDQy''@;'; put 'put ''NzcsNDQyNzgsNDQyODQsNDQyODUsNDQyODgsNDQyOTIsNDQyOTQsNTI5OTQsNTI5OTUsNTI5OTcsNTI5OTgsNTI5OTksNTMwMDEsNTMwMDIsNTMwMDMsNTMwMDQsNTMwMDUsNTMwMDYsNTMwMDcsNTMwMTAsNTMwMTIsNTMwMTQsNTMwMTUsNTMwMTYsNTMwMTcsNTMwMTgsNTMwMTksNTMwMjEs''@;'; put 'put ''NTMwMjIsNTMwMjMsNTMwMjUsNTMwMjYsNTMwMjcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMwMjksNTMwMzAsNTMwMzEsNTMwMzIsNTMwMzMsNTMwMzQsNTMwMzUsNTMwMzgsNTMwNDIsNTMwNDMsNTMwNDQsNTMwNDUsNTMwNDYsNTMwNDcsNTMwNDksNTMwNTAsNTMwNTEsNTMw''@;'; put 'put ''NTIsNTMwNTMsNTMwNTQsNTMwNTUsNTMwNTYsNTMwNTcsNTMwNTgsNTMwNTksNTMwNjAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMwNjEsNTMwNjIsNTMwNjMsNTMwNjQsNTMwNjUsNTMwNjYsNTMwNjcsNTMwNjgsNTMwNjksNTMwNzAsNTMwNzEsNTMwNzIsNTMwNzMsNTMwNzQs''@;'; put 'put ''NTMwNzUsNTMwNzgsNTMwNzksNTMwODEsNTMwODIsNTMwODMsNTMwODUsNTMwODYsNTMwODcsNTMwODgsNTMwODksNTMwOTAsNTMwOTEsNTMwOTQsNTMwOTYsNTMwOTgsNTMwOTksNTMxMDAsNDQzMDAsNDQzMDEsNDQzMDMsNDQzMDUsNDQzMTIsNDQzMTYsNDQzMjAsNDQzMjksNDQzMzIsNDQz''@;'; put 'put ''MzMsNDQzNDAsNDQzNDEsNDQzNDQsNDQzNDgsNDQzNTYsNDQzNTcsNDQzNTksNDQzNjEsNDQzNjgsNDQzNzIsNDQzNzYsNDQzODUsNDQzODcsNDQzOTYsNDQzOTcsNDQ0MDAsNDQ0MDMsNDQ0MDQsNDQ0MDUsNDQ0MDYsNDQ0MTEsNDQ0MTIsNDQ0MTMsNDQ0MTUsNDQ0MTcsNDQ0MTgsNDQ0MjQs''@;'; put 'put ''NDQ0MjUsNDQ0MjgsNDQ0MzIsNDQ0NDQsNDQ0NDUsNDQ0NTIsNDQ0NzEsNDQ0ODAsNDQ0ODEsNDQ0ODQsNDQ0ODgsNDQ0OTYsNDQ0OTcsNDQ0OTksNDQ1MDgsNDQ1MTIsNDQ1MTYsNDQ1MzYsNDQ1MzcsNDQ1NDAsNDQ1NDMsNDQ1NDQsNDQ1NDUsNDQ1NTIsNDQ1NTMsNDQ1NTUsNDQ1NTcsNDQ1''@;'; put 'put ''NjQsNDQ1OTIsNDQ1OTMsNDQ1OTYsNDQ1OTksNDQ2MDAsNDQ2MDIsNDQ2MDgsNDQ2MDksNDQ2MTEsNDQ2MTMsNDQ2MTQsNDQ2MTgsNDQ2MjAsNDQ2MjEsNDQ2MjIsNDQ2MjQsNDQ2MjgsNDQ2MzAsNDQ2MzYsNDQ2MzcsNDQ2MzksNDQ2NDAsNDQ2NDEsNDQ2NDUsNDQ2NDgsNDQ2NDksNDQ2NTIs''@;'; put 'put ''NDQ2NTYsNDQ2NjQsNTMxMDEsNTMxMDIsNTMxMDMsNTMxMDYsNTMxMDcsNTMxMDksNTMxMTAsNTMxMTEsNTMxMTMsNTMxMTQsNTMxMTUsNTMxMTYsNTMxMTcsNTMxMTgsNTMxMTksNTMxMjEsNTMxMjIsNTMxMjMsNTMxMjQsNTMxMjYsNTMxMjcsNTMxMjgsNTMxMjksNTMxMzAsNTMxMzEsNTMx''@;'; put 'put ''MzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMxMzQsNTMxMzUsNTMxMzYsNTMxMzcsNTMxMzgsNTMxMzksNTMxNDAsNTMxNDEsNTMxNDIsNTMxNDMsNTMxNDQsNTMxNDUsNTMxNDYsNTMxNDcsNTMxNDgsNTMxNDksNTMxNTAsNTMxNTEsNTMxNTIsNTMxNTQsNTMxNTUsNTMxNTYs''@;'; put 'put ''NTMxNTcsNTMxNTgsNTMxNTksNTMxNjEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMxNjIsNTMxNjMsNTMxNjQsNTMxNjUsNTMxNjYsNTMxNjcsNTMxNjksNTMxNzAsNTMxNzEsNTMxNzIsNTMxNzMsNTMxNzQsNTMxNzUsNTMxNzYsNTMxNzcsNTMxNzgsNTMxNzksNTMxODAsNTMx''@;'; put 'put ''ODEsNTMxODIsNTMxODMsNTMxODQsNTMxODUsNTMxODYsNTMxODcsNTMxODksNTMxOTAsNTMxOTEsNTMxOTIsNTMxOTMsNTMxOTQsNTMxOTUsNDQ2NjUsNDQ2NjcsNDQ2NjgsNDQ2NjksNDQ2NzYsNDQ2NzcsNDQ2ODQsNDQ3MzIsNDQ3MzMsNDQ3MzQsNDQ3MzYsNDQ3NDAsNDQ3NDgsNDQ3NDks''@;'; put 'put ''NDQ3NTEsNDQ3NTIsNDQ3NTMsNDQ3NjAsNDQ3NjEsNDQ3NjQsNDQ3NzYsNDQ3NzksNDQ3ODEsNDQ3ODgsNDQ3OTIsNDQ3OTYsNDQ4MDcsNDQ4MDgsNDQ4MTMsNDQ4MTYsNDQ4NDQsNDQ4NDUsNDQ4NDgsNDQ4NTAsNDQ4NTIsNDQ4NjAsNDQ4NjEsNDQ4NjMsNDQ4NjUsNDQ4NjYsNDQ4NjcsNDQ4''@;'; put 'put ''NzIsNDQ4NzMsNDQ4ODAsNDQ4OTIsNDQ4OTMsNDQ5MDAsNDQ5MDEsNDQ5MjEsNDQ5MjgsNDQ5MzIsNDQ5MzYsNDQ5NDQsNDQ5NDUsNDQ5NDksNDQ5NTYsNDQ5ODQsNDQ5ODUsNDQ5ODgsNDQ5OTIsNDQ5OTksNDVlMyw0NTAwMSw0NTAwMyw0NTAwNSw0NTAwNiw0NTAxMiw0NTAyMCw0NTAzMiw0''@;'; put 'put ''NTAzMyw0NTA0MCw0NTA0MSw0NTA0NCw0NTA0OCw0NTA1Niw0NTA1Nyw0NTA2MCw0NTA2OCw0NTA3Miw0NTA3Niw0NTA4NCw0NTA4NSw0NTA5Niw0NTEyNCw0NTEyNSw0NTEyOCw0NTEzMCw0NTEzMiw0NTEzNCw0NTEzOSw0NTE0MCw0NTE0MSw0NTE0Myw0NTE0NSw1MzE5Niw1MzE5Nyw1MzE5''@;'; put 'put ''OCw1MzE5OSw1MzIwMCw1MzIwMSw1MzIwMiw1MzIwMyw1MzIwNCw1MzIwNSw1MzIwNiw1MzIwNyw1MzIwOCw1MzIwOSw1MzIxMCw1MzIxMSw1MzIxMiw1MzIxMyw1MzIxNCw1MzIxNSw1MzIxOCw1MzIxOSw1MzIyMSw1MzIyMiw1MzIyMyw1MzIyNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCw1MzIyNiw1MzIyNyw1MzIyOCw1MzIyOSw1MzIzMCw1MzIzMSw1MzIzNCw1MzIzNiw1MzIzOCw1MzIzOSw1MzI0MCw1MzI0MSw1MzI0Miw1MzI0Myw1MzI0NSw1MzI0Niw1MzI0Nyw1MzI0OSw1MzI1MCw1MzI1MSw1MzI1Myw1MzI1NCw1MzI1NSw1MzI1Niw1MzI1Nyw1MzI1OCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzI1OSw1MzI2MCw1MzI2MSw1MzI2Miw1MzI2Myw1MzI2NCw1MzI2Niw1MzI2Nyw1MzI2OCw1MzI2OSw1MzI3MCw1MzI3MSw1MzI3Myw1MzI3NCw1MzI3NSw1MzI3Niw1MzI3Nyw1MzI3OCw1MzI3OSw1MzI4MCw1MzI4MSw1MzI4Miw1MzI4Myw1''@;'; put 'put ''MzI4NCw1MzI4NSw1MzI4Niw1MzI4Nyw1MzI4OCw1MzI4OSw1MzI5MCw1MzI5MSw1MzI5Miw0NTE0OSw0NTE4MCw0NTE4MSw0NTE4NCw0NTE4OCw0NTE5Niw0NTE5Nyw0NTE5OSw0NTIwMSw0NTIwOCw0NTIwOSw0NTIxMCw0NTIxMiw0NTIxNSw0NTIxNiw0NTIxNyw0NTIxOCw0NTIyNCw0NTIy''@;'; put 'put ''NSw0NTIyNyw0NTIyOCw0NTIyOSw0NTIzMCw0NTIzMSw0NTIzMyw0NTIzNSw0NTIzNiw0NTIzNyw0NTI0MCw0NTI0NCw0NTI1Miw0NTI1Myw0NTI1NSw0NTI1Niw0NTI1Nyw0NTI2NCw0NTI2NSw0NTI2OCw0NTI3Miw0NTI4MCw0NTI4NSw0NTMyMCw0NTMyMSw0NTMyMyw0NTMyNCw0NTMyOCw0''@;'; put 'put ''NTMzMCw0NTMzMSw0NTMzNiw0NTMzNyw0NTMzOSw0NTM0MCw0NTM0MSw0NTM0Nyw0NTM0OCw0NTM0OSw0NTM1Miw0NTM1Niw0NTM2NCw0NTM2NSw0NTM2Nyw0NTM2OCw0NTM2OSw0NTM3Niw0NTM3Nyw0NTM4MCw0NTM4NCw0NTM5Miw0NTM5Myw0NTM5Niw0NTM5Nyw0NTQwMCw0NTQwNCw0NTQw''@;'; put 'put ''OCw0NTQzMiw0NTQzMyw0NTQzNiw0NTQ0MCw0NTQ0Miw0NTQ0OCw0NTQ0OSw0NTQ1MSw0NTQ1Myw0NTQ1OCw0NTQ1OSw0NTQ2MCw0NTQ2NCw0NTQ2OCw0NTQ4MCw0NTUxNiw0NTUyMCw0NTUyNCw0NTUzMiw0NTUzMyw1MzI5NCw1MzI5NSw1MzI5Niw1MzI5Nyw1MzI5OCw1MzI5OSw1MzMwMiw1''@;'; put 'put ''MzMwMyw1MzMwNSw1MzMwNiw1MzMwNyw1MzMwOSw1MzMxMCw1MzMxMSw1MzMxMiw1MzMxMyw1MzMxNCw1MzMxNSw1MzMxOCw1MzMyMCw1MzMyMiw1MzMyMyw1MzMyNCw1MzMyNSw1MzMyNiw1MzMyNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzMyOSw1MzMzMCw1MzMzMSw1MzMz''@;'; put 'put ''Myw1MzMzNCw1MzMzNSw1MzMzNyw1MzMzOCw1MzMzOSw1MzM0MCw1MzM0MSw1MzM0Miw1MzM0Myw1MzM0NSw1MzM0Niw1MzM0Nyw1MzM0OCw1MzM0OSw1MzM1MCw1MzM1MSw1MzM1Miw1MzM1Myw1MzM1NCw1MzM1NSw1MzM1OCw1MzM1OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1''@;'; put 'put ''MzM2MSw1MzM2Miw1MzM2Myw1MzM2NSw1MzM2Niw1MzM2Nyw1MzM2OCw1MzM2OSw1MzM3MCw1MzM3MSw1MzM3NCw1MzM3NSw1MzM3Niw1MzM3OCw1MzM3OSw1MzM4MCw1MzM4MSw1MzM4Miw1MzM4Myw1MzM4NCw1MzM4NSw1MzM4Niw1MzM4Nyw1MzM4OCw1MzM4OSw1MzM5MCw1MzM5MSw1MzM5''@;'; put 'put ''Miw1MzM5Myw1MzM5NCw1MzM5NSw1MzM5Niw0NTUzNSw0NTU0NCw0NTU0NSw0NTU0OCw0NTU1Miw0NTU2MSw0NTU2Myw0NTU2NSw0NTU3Miw0NTU3Myw0NTU3Niw0NTU3OSw0NTU4MCw0NTU4OCw0NTU4OSw0NTU5MSw0NTU5Myw0NTYwMCw0NTYyMCw0NTYyOCw0NTY1Niw0NTY2MCw0NTY2NCw0''@;'; put 'put ''NTY3Miw0NTY3Myw0NTY4NCw0NTY4NSw0NTY5Miw0NTcwMCw0NTcwMSw0NTcwNSw0NTcxMiw0NTcxMyw0NTcxNiw0NTcyMCw0NTcyMSw0NTcyMiw0NTcyOCw0NTcyOSw0NTczMSw0NTczMyw0NTczNCw0NTczOCw0NTc0MCw0NTc0NCw0NTc0OCw0NTc2OCw0NTc2OSw0NTc3Miw0NTc3Niw0NTc3''@;'; put 'put ''OCw0NTc4NCw0NTc4NSw0NTc4Nyw0NTc4OSw0NTc5NCw0NTc5Niw0NTc5Nyw0NTc5OCw0NTgwMCw0NTgwMyw0NTgwNCw0NTgwNSw0NTgwNiw0NTgwNyw0NTgxMSw0NTgxMiw0NTgxMyw0NTgxNSw0NTgxNiw0NTgxNyw0NTgxOCw0NTgxOSw0NTgyMyw0NTgyNCw0NTgyNSw0NTgyOCw0NTgzMiw0''@;'; put 'put ''NTg0MCw0NTg0MSw0NTg0Myw0NTg0NCw0NTg0NSw0NTg1Miw0NTkwOCw0NTkwOSw0NTkxMCw0NTkxMiw0NTkxNSw0NTkxNiw0NTkxOCw0NTkxOSw0NTkyNCw0NTkyNSw1MzM5Nyw1MzM5OCw1MzM5OSw1MzQwMCw1MzQwMSw1MzQwMiw1MzQwMyw1MzQwNCw1MzQwNSw1MzQwNiw1MzQwNyw1MzQw''@;'; put 'put ''OCw1MzQwOSw1MzQxMCw1MzQxMSw1MzQxNCw1MzQxNSw1MzQxNyw1MzQxOCw1MzQxOSw1MzQyMSw1MzQyMiw1MzQyMyw1MzQyNCw1MzQyNSw1MzQyNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzQyNyw1MzQzMCw1MzQzMiw1MzQzNCw1MzQzNSw1MzQzNiw1MzQzNyw1MzQzOCw1''@;'; put 'put ''MzQzOSw1MzQ0Miw1MzQ0Myw1MzQ0NSw1MzQ0Niw1MzQ0Nyw1MzQ1MCw1MzQ1MSw1MzQ1Miw1MzQ1Myw1MzQ1NCw1MzQ1NSw1MzQ1OCw1MzQ2Miw1MzQ2Myw1MzQ2NCw1MzQ2NSw1MzQ2NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzQ2Nyw1MzQ3MCw1MzQ3MSw1MzQ3Myw1MzQ3''@;'; put 'put ''NCw1MzQ3NSw1MzQ3Nyw1MzQ3OCw1MzQ3OSw1MzQ4MCw1MzQ4MSw1MzQ4Miw1MzQ4Myw1MzQ4Niw1MzQ5MCw1MzQ5MSw1MzQ5Miw1MzQ5Myw1MzQ5NCw1MzQ5NSw1MzQ5Nyw1MzQ5OCw1MzQ5OSw1MzUwMCw1MzUwMSw1MzUwMiw1MzUwMyw1MzUwNCw1MzUwNSw1MzUwNiw1MzUwNyw1MzUwOCw0''@;'; put 'put ''NTkyNyw0NTkyOSw0NTkzMSw0NTkzNCw0NTkzNiw0NTkzNyw0NTk0MCw0NTk0NCw0NTk1Miw0NTk1Myw0NTk1NSw0NTk1Niw0NTk1Nyw0NTk2NCw0NTk2OCw0NTk3Miw0NTk4NCw0NTk4NSw0NTk5Miw0NTk5Niw0NjAyMCw0NjAyMSw0NjAyNCw0NjAyNyw0NjAyOCw0NjAzMCw0NjAzMiw0NjAz''@;'; put 'put ''Niw0NjAzNyw0NjAzOSw0NjA0MSw0NjA0Myw0NjA0NSw0NjA0OCw0NjA1Miw0NjA1Niw0NjA3Niw0NjA5Niw0NjEwNCw0NjEwOCw0NjExMiw0NjEyMCw0NjEyMSw0NjEyMyw0NjEzMiw0NjE2MCw0NjE2MSw0NjE2NCw0NjE2OCw0NjE3Niw0NjE3Nyw0NjE3OSw0NjE4MSw0NjE4OCw0NjIwOCw0''@;'; put 'put ''NjIxNiw0NjIzNyw0NjI0NCw0NjI0OCw0NjI1Miw0NjI2MSw0NjI2Myw0NjI2NSw0NjI3Miw0NjI3Niw0NjI4MCw0NjI4OCw0NjI5Myw0NjMwMCw0NjMwMSw0NjMwNCw0NjMwNyw0NjMwOCw0NjMxMCw0NjMxNiw0NjMxNyw0NjMxOSw0NjMyMSw0NjMyOCw0NjM1Niw0NjM1Nyw0NjM2MCw0NjM2''@;'; put 'put ''Myw0NjM2NCw0NjM3Miw0NjM3Myw0NjM3NSw0NjM3Niw0NjM3Nyw0NjM3OCw0NjM4NCw0NjM4NSw0NjM4OCw0NjM5Miw1MzUwOSw1MzUxMCw1MzUxMSw1MzUxMiw1MzUxMyw1MzUxNCw1MzUxNSw1MzUxNiw1MzUxOCw1MzUxOSw1MzUyMCw1MzUyMSw1MzUyMiw1MzUyMyw1MzUyNCw1MzUyNSw1''@;'; put 'put ''MzUyNiw1MzUyNyw1MzUyOCw1MzUyOSw1MzUzMCw1MzUzMSw1MzUzMiw1MzUzMyw1MzUzNCw1MzUzNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzUzNiw1MzUzNyw1MzUzOCw1MzUzOSw1MzU0MCw1MzU0MSw1MzU0Miw1MzU0Myw1MzU0NCw1MzU0NSw1MzU0Niw1MzU0Nyw1MzU0''@;'; put 'put ''OCw1MzU0OSw1MzU1MCw1MzU1MSw1MzU1NCw1MzU1NSw1MzU1Nyw1MzU1OCw1MzU1OSw1MzU2MSw1MzU2Myw1MzU2NCw1MzU2NSw1MzU2NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzU2Nyw1MzU3MCw1MzU3NCw1MzU3NSw1MzU3Niw1MzU3Nyw1MzU3OCw1MzU3OSw1MzU4Miw1''@;'; put 'put ''MzU4Myw1MzU4NSw1MzU4Niw1MzU4Nyw1MzU4OSw1MzU5MCw1MzU5MSw1MzU5Miw1MzU5Myw1MzU5NCw1MzU5NSw1MzU5OCw1MzYwMCw1MzYwMiw1MzYwMyw1MzYwNCw1MzYwNSw1MzYwNiw1MzYwNyw1MzYwOSw1MzYxMCw1MzYxMSw1MzYxMyw0NjQwMCw0NjQwMSw0NjQwMyw0NjQwNCw0NjQw''@;'; put 'put ''NSw0NjQxMSw0NjQxMiw0NjQxMyw0NjQxNiw0NjQyMCw0NjQyOCw0NjQyOSw0NjQzMSw0NjQzMiw0NjQzMyw0NjQ5Niw0NjQ5Nyw0NjUwMCw0NjUwNCw0NjUwNiw0NjUwNyw0NjUxMiw0NjUxMyw0NjUxNSw0NjUxNiw0NjUxNyw0NjUyMyw0NjUyNCw0NjUyNSw0NjUyOCw0NjUzMiw0NjU0MCw0''@;'; put 'put ''NjU0MSw0NjU0Myw0NjU0NCw0NjU0NSw0NjU1Miw0NjU3Miw0NjYwOCw0NjYwOSw0NjYxMiw0NjYxNiw0NjYyOSw0NjYzNiw0NjY0NCw0NjY2NCw0NjY5Miw0NjY5Niw0Njc0OCw0Njc0OSw0Njc1Miw0Njc1Niw0Njc2Myw0Njc2NCw0Njc2OSw0NjgwNCw0NjgzMiw0NjgzNiw0Njg0MCw0Njg0''@;'; put 'put ''OCw0Njg0OSw0Njg1Myw0Njg4OCw0Njg4OSw0Njg5Miw0Njg5NSw0Njg5Niw0NjkwNCw0NjkwNSw0NjkwNyw0NjkxNiw0NjkyMCw0NjkyNCw0NjkzMiw0NjkzMyw0Njk0NCw0Njk0OCw0Njk1Miw0Njk2MCw0Njk2MSw0Njk2Myw0Njk2NSw0Njk3Miw0Njk3Myw0Njk3Niw0Njk4MCw0Njk4OCw0''@;'; put 'put ''Njk4OSw0Njk5MSw0Njk5Miw0Njk5Myw0Njk5NCw0Njk5OCw0Njk5OSw1MzYxNCw1MzYxNSw1MzYxNiw1MzYxNyw1MzYxOCw1MzYxOSw1MzYyMCw1MzYyMSw1MzYyMiw1MzYyMyw1MzYyNCw1MzYyNSw1MzYyNiw1MzYyNyw1MzYyOSw1MzYzMCw1MzYzMSw1MzYzMiw1MzYzMyw1MzYzNCw1MzYz''@;'; put 'put ''NSw1MzYzNyw1MzYzOCw1MzYzOSw1MzY0MSw1MzY0MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzY0Myw1MzY0NCw1MzY0NSw1MzY0Niw1MzY0Nyw1MzY0OCw1MzY0OSw1MzY1MCw1MzY1MSw1MzY1Miw1MzY1Myw1MzY1NCw1MzY1NSw1MzY1Niw1MzY1Nyw1MzY1OCw1MzY1OSw1''@;'; put 'put ''MzY2MCw1MzY2MSw1MzY2Miw1MzY2Myw1MzY2Niw1MzY2Nyw1MzY2OSw1MzY3MCw1MzY3MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzY3Myw1MzY3NCw1MzY3NSw1MzY3Niw1MzY3Nyw1MzY3OCw1MzY3OSw1MzY4Miw1MzY4NCw1MzY4Niw1MzY4Nyw1MzY4OCw1MzY4OSw1MzY5''@;'; put 'put ''MSw1MzY5Myw1MzY5NCw1MzY5NSw1MzY5Nyw1MzY5OCw1MzY5OSw1MzcwMCw1MzcwMSw1MzcwMiw1MzcwMyw1MzcwNCw1MzcwNSw1MzcwNiw1MzcwNyw1MzcwOCw1MzcwOSw1MzcxMCw1MzcxMSw0N2UzLDQ3MDAxLDQ3MDA0LDQ3MDA4LDQ3MDE2LDQ3MDE3LDQ3MDE5LDQ3MDIwLDQ3MDIxLDQ3''@;'; put 'put ''MDI4LDQ3MDI5LDQ3MDMyLDQ3MDQ3LDQ3MDQ5LDQ3MDg0LDQ3MDg1LDQ3MDg4LDQ3MDkyLDQ3MTAwLDQ3MTAxLDQ3MTAzLDQ3MTA0LDQ3MTA1LDQ3MTExLDQ3MTEyLDQ3MTEzLDQ3MTE2LDQ3MTIwLDQ3MTI4LDQ3MTI5LDQ3MTMxLDQ3MTMzLDQ3MTQwLDQ3MTQxLDQ3MTQ0LDQ3MTQ4LDQ3MTU2''@;'; put 'put ''LDQ3MTU3LDQ3MTU5LDQ3MTYwLDQ3MTYxLDQ3MTY4LDQ3MTcyLDQ3MTg1LDQ3MTg3LDQ3MTk2LDQ3MTk3LDQ3MjAwLDQ3MjA0LDQ3MjEyLDQ3MjEzLDQ3MjE1LDQ3MjE3LDQ3MjI0LDQ3MjI4LDQ3MjQ1LDQ3MjcyLDQ3MjgwLDQ3Mjg0LDQ3Mjg4LDQ3Mjk2LDQ3Mjk3LDQ3Mjk5LDQ3MzAxLDQ3''@;'; put 'put ''MzA4LDQ3MzEyLDQ3MzE2LDQ3MzI1LDQ3MzI3LDQ3MzI5LDQ3MzM2LDQ3MzM3LDQ3MzQwLDQ3MzQ0LDQ3MzUyLDQ3MzUzLDQ3MzU1LDQ3MzU3LDQ3MzY0LDQ3Mzg0LDQ3MzkyLDQ3NDIwLDQ3NDIxLDQ3NDI0LDQ3NDI4LDQ3NDM2LDQ3NDM5LDQ3NDQxLDQ3NDQ4LDQ3NDQ5LDQ3NDUyLDQ3NDU2''@;'; put 'put ''LDQ3NDY0LDQ3NDY1LDUzNzEyLDUzNzEzLDUzNzE0LDUzNzE1LDUzNzE2LDUzNzE3LDUzNzE4LDUzNzE5LDUzNzIxLDUzNzIyLDUzNzIzLDUzNzI0LDUzNzI1LDUzNzI2LDUzNzI3LDUzNzI4LDUzNzI5LDUzNzMwLDUzNzMxLDUzNzMyLDUzNzMzLDUzNzM0LDUzNzM1LDUzNzM2LDUzNzM3LDUz''@;'; put 'put ''NzM4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzNzM5LDUzNzQwLDUzNzQxLDUzNzQyLDUzNzQzLDUzNzQ0LDUzNzQ1LDUzNzQ2LDUzNzQ3LDUzNzQ5LDUzNzUwLDUzNzUxLDUzNzUzLDUzNzU0LDUzNzU1LDUzNzU2LDUzNzU3LDUzNzU4LDUzNzU5LDUzNzYwLDUzNzYxLDUzNzYy''@;'; put 'put ''LDUzNzYzLDUzNzY0LDUzNzY1LDUzNzY2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzNzY4LDUzNzcwLDUzNzcxLDUzNzcyLDUzNzczLDUzNzc0LDUzNzc1LDUzNzc3LDUzNzc4LDUzNzc5LDUzNzgwLDUzNzgxLDUzNzgyLDUzNzgzLDUzNzg0LDUzNzg1LDUzNzg2LDUzNzg3LDUz''@;'; put 'put ''Nzg4LDUzNzg5LDUzNzkwLDUzNzkxLDUzNzkyLDUzNzkzLDUzNzk0LDUzNzk1LDUzNzk2LDUzNzk3LDUzNzk4LDUzNzk5LDUzODAwLDUzODAxLDQ3NDY3LDQ3NDY5LDQ3NDc2LDQ3NDc3LDQ3NDgwLDQ3NDg0LDQ3NDkyLDQ3NDkzLDQ3NDk1LDQ3NDk3LDQ3NDk4LDQ3NTAxLDQ3NTAyLDQ3NTMy''@;'; put 'put ''LDQ3NTMzLDQ3NTM2LDQ3NTQwLDQ3NTQ4LDQ3NTQ5LDQ3NTUxLDQ3NTUzLDQ3NTYwLDQ3NTYxLDQ3NTY0LDQ3NTY2LDQ3NTY3LDQ3NTY4LDQ3NTY5LDQ3NTcwLDQ3NTc2LDQ3NTc3LDQ3NTc5LDQ3NTgxLDQ3NTgyLDQ3NTg1LDQ3NTg3LDQ3NTg4LDQ3NTg5LDQ3NTkyLDQ3NTk2LDQ3NjA0LDQ3''@;'; put 'put ''NjA1LDQ3NjA3LDQ3NjA4LDQ3NjA5LDQ3NjEwLDQ3NjE2LDQ3NjE3LDQ3NjI0LDQ3NjM3LDQ3NjcyLDQ3NjczLDQ3Njc2LDQ3NjgwLDQ3NjgyLDQ3Njg4LDQ3Njg5LDQ3NjkxLDQ3NjkzLDQ3Njk0LDQ3Njk5LDQ3NzAwLDQ3NzAxLDQ3NzA0LDQ3NzA4LDQ3NzE2LDQ3NzE3LDQ3NzE5LDQ3NzIw''@;'; put 'put ''LDQ3NzIxLDQ3NzI4LDQ3NzI5LDQ3NzMyLDQ3NzM2LDQ3NzQ3LDQ3NzQ4LDQ3NzQ5LDQ3NzUxLDQ3NzU2LDQ3Nzg0LDQ3Nzg1LDQ3Nzg3LDQ3Nzg4LDQ3NzkyLDQ3Nzk0LDQ3ODAwLDQ3ODAxLDQ3ODAzLDQ3ODA1LDQ3ODEyLDQ3ODE2LDQ3ODMyLDQ3ODMzLDQ3ODY4LDUzODAyLDUzODAzLDUz''@;'; put 'put ''ODA2LDUzODA3LDUzODA5LDUzODEwLDUzODExLDUzODEzLDUzODE0LDUzODE1LDUzODE2LDUzODE3LDUzODE4LDUzODE5LDUzODIyLDUzODI0LDUzODI2LDUzODI3LDUzODI4LDUzODI5LDUzODMwLDUzODMxLDUzODMzLDUzODM0LDUzODM1LDUzODM2LG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLDUzODM3LDUzODM4LDUzODM5LDUzODQwLDUzODQxLDUzODQyLDUzODQzLDUzODQ0LDUzODQ1LDUzODQ2LDUzODQ3LDUzODQ4LDUzODQ5LDUzODUwLDUzODUxLDUzODUzLDUzODU0LDUzODU1LDUzODU2LDUzODU3LDUzODU4LDUzODU5LDUzODYxLDUzODYyLDUzODYzLDUzODY0LG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzODY1LDUzODY2LDUzODY3LDUzODY4LDUzODY5LDUzODcwLDUzODcxLDUzODcyLDUzODczLDUzODc0LDUzODc1LDUzODc2LDUzODc3LDUzODc4LDUzODc5LDUzODgwLDUzODgxLDUzODgyLDUzODgzLDUzODg0LDUzODg1LDUzODg2LDUzODg3''@;'; put 'put ''LDUzODkwLDUzODkxLDUzODkzLDUzODk0LDUzODk1LDUzODk3LDUzODk4LDUzODk5LDUzOTAwLDQ3ODcyLDQ3ODc2LDQ3ODg1LDQ3ODg3LDQ3ODg5LDQ3ODk2LDQ3OTAwLDQ3OTA0LDQ3OTEzLDQ3OTE1LDQ3OTI0LDQ3OTI1LDQ3OTI2LDQ3OTI4LDQ3OTMxLDQ3OTMyLDQ3OTMzLDQ3OTM0LDQ3''@;'; put 'put ''OTQwLDQ3OTQxLDQ3OTQzLDQ3OTQ1LDQ3OTQ5LDQ3OTUxLDQ3OTUyLDQ3OTU2LDQ3OTYwLDQ3OTY5LDQ3OTcxLDQ3OTgwLDQ4MDA4LDQ4MDEyLDQ4MDE2LDQ4MDM2LDQ4MDQwLDQ4MDQ0LDQ4MDUyLDQ4MDU1LDQ4MDY0LDQ4MDY4LDQ4MDcyLDQ4MDgwLDQ4MDgzLDQ4MTIwLDQ4MTIxLDQ4MTI0''@;'; put 'put ''LDQ4MTI3LDQ4MTI4LDQ4MTMwLDQ4MTM2LDQ4MTM3LDQ4MTM5LDQ4MTQwLDQ4MTQxLDQ4MTQzLDQ4MTQ1LDQ4MTQ4LDQ4MTQ5LDQ4MTUwLDQ4MTUxLDQ4MTUyLDQ4MTU1LDQ4MTU2LDQ4MTU3LDQ4MTU4LDQ4MTU5LDQ4MTY0LDQ4MTY1LDQ4MTY3LDQ4MTY5LDQ4MTczLDQ4MTc2LDQ4MTc3LDQ4''@;'; put 'put ''MTgwLDQ4MTg0LDQ4MTkyLDQ4MTkzLDQ4MTk1LDQ4MTk2LDQ4MTk3LDQ4MjAxLDQ4MjA0LDQ4MjA1LDQ4MjA4LDQ4MjIxLDQ4MjYwLDQ4MjYxLDQ4MjY0LDQ4MjY3LDQ4MjY4LDQ4MjcwLDQ4Mjc2LDQ4Mjc3LDQ4Mjc5LDUzOTAxLDUzOTAyLDUzOTAzLDUzOTA2LDUzOTA3LDUzOTA4LDUzOTEw''@;'; put 'put ''LDUzOTExLDUzOTEyLDUzOTEzLDUzOTE0LDUzOTE1LDUzOTE3LDUzOTE4LDUzOTE5LDUzOTIxLDUzOTIyLDUzOTIzLDUzOTI1LDUzOTI2LDUzOTI3LDUzOTI4LDUzOTI5LDUzOTMwLDUzOTMxLDUzOTMzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzOTM0LDUzOTM1LDUzOTM2LDUz''@;'; put 'put ''OTM4LDUzOTM5LDUzOTQwLDUzOTQxLDUzOTQyLDUzOTQzLDUzOTQ2LDUzOTQ3LDUzOTQ5LDUzOTUwLDUzOTUzLDUzOTU1LDUzOTU2LDUzOTU3LDUzOTU4LDUzOTU5LDUzOTYyLDUzOTY0LDUzOTY1LDUzOTY2LDUzOTY3LDUzOTY4LDUzOTY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LDUzOTcwLDUzOTcxLDUzOTczLDUzOTc0LDUzOTc1LDUzOTc3LDUzOTc4LDUzOTc5LDUzOTgxLDUzOTgyLDUzOTgzLDUzOTg0LDUzOTg1LDUzOTg2LDUzOTg3LDUzOTkwLDUzOTkxLDUzOTkyLDUzOTkzLDUzOTk0LDUzOTk1LDUzOTk2LDUzOTk3LDUzOTk4LDUzOTk5LDU0MDAyLDU0MDAzLDU0''@;'; put 'put ''MDA1LDU0MDA2LDU0MDA3LDU0MDA5LDU0MDEwLDQ4MjgxLDQ4MjgyLDQ4Mjg4LDQ4Mjg5LDQ4MjkyLDQ4Mjk1LDQ4Mjk2LDQ4MzA0LDQ4MzA1LDQ4MzA3LDQ4MzA4LDQ4MzA5LDQ4MzE2LDQ4MzE3LDQ4MzIwLDQ4MzI0LDQ4MzMzLDQ4MzM1LDQ4MzM2LDQ4MzM3LDQ4MzQxLDQ4MzQ0LDQ4MzQ4''@;'; put 'put ''LDQ4MzcyLDQ4MzczLDQ4Mzc0LDQ4Mzc2LDQ4MzgwLDQ4Mzg4LDQ4Mzg5LDQ4MzkxLDQ4MzkzLDQ4NDAwLDQ4NDA0LDQ4NDIwLDQ4NDI4LDQ4NDQ4LDQ4NDU2LDQ4NDU3LDQ4NDYwLDQ4NDY0LDQ4NDcyLDQ4NDczLDQ4NDg0LDQ4NDg4LDQ4NTEyLDQ4NTEzLDQ4NTE2LDQ4NTE5LDQ4NTIwLDQ4''@;'; put 'put ''NTIxLDQ4NTIyLDQ4NTI4LDQ4NTI5LDQ4NTMxLDQ4NTMzLDQ4NTM3LDQ4NTM4LDQ4NTQwLDQ4NTQ4LDQ4NTYwLDQ4NTY4LDQ4NTk2LDQ4NTk3LDQ4NjAwLDQ4NjA0LDQ4NjE3LDQ4NjI0LDQ4NjI4LDQ4NjMyLDQ4NjQwLDQ4NjQzLDQ4NjQ1LDQ4NjUyLDQ4NjUzLDQ4NjU2LDQ4NjYwLDQ4NjY4''@;'; put 'put ''LDQ4NjY5LDQ4NjcxLDQ4NzA4LDQ4NzA5LDQ4NzEyLDQ4NzE2LDQ4NzE4LDQ4NzI0LDQ4NzI1LDQ4NzI3LDQ4NzI5LDQ4NzMwLDQ4NzMxLDQ4NzM2LDQ4NzM3LDQ4NzQwLDU0MDExLDU0MDEyLDU0MDEzLDU0MDE0LDU0MDE1LDU0MDE4LDU0MDIwLDU0MDIyLDU0MDIzLDU0MDI0LDU0MDI1LDU0''@;'; put 'put ''MDI2LDU0MDI3LDU0MDMxLDU0MDMzLDU0MDM0LDU0MDM1LDU0MDM3LDU0MDM5LDU0MDQwLDU0MDQxLDU0MDQyLDU0MDQzLDU0MDQ2LDU0MDUwLDU0MDUxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0MDUyLDU0MDU0LDU0MDU1LDU0MDU4LDU0MDU5LDU0MDYxLDU0MDYyLDU0MDYz''@;'; put 'put ''LDU0MDY1LDU0MDY2LDU0MDY3LDU0MDY4LDU0MDY5LDU0MDcwLDU0MDcxLDU0MDc0LDU0MDc4LDU0MDc5LDU0MDgwLDU0MDgxLDU0MDgyLDU0MDgzLDU0MDg2LDU0MDg3LDU0MDg4LDU0MDg5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0MDkwLDU0MDkxLDU0MDkyLDU0MDkzLDU0''@;'; put 'put ''MDk0LDU0MDk1LDU0MDk2LDU0MDk3LDU0MDk4LDU0MDk5LDU0MTAwLDU0MTAxLDU0MTAyLDU0MTAzLDU0MTA0LDU0MTA1LDU0MTA2LDU0MTA3LDU0MTA4LDU0MTA5LDU0MTEwLDU0MTExLDU0MTEyLDU0MTEzLDU0MTE0LDU0MTE1LDU0MTE2LDU0MTE3LDU0MTE4LDU0MTE5LDU0MTIwLDU0MTIx''@;'; put 'put ''LDQ4NzQ0LDQ4NzQ2LDQ4NzUyLDQ4NzUzLDQ4NzU1LDQ4NzU2LDQ4NzU3LDQ4NzYzLDQ4NzY0LDQ4NzY1LDQ4NzY4LDQ4NzcyLDQ4NzgwLDQ4NzgxLDQ4NzgzLDQ4Nzg0LDQ4Nzg1LDQ4NzkyLDQ4NzkzLDQ4ODA4LDQ4ODQ4LDQ4ODQ5LDQ4ODUyLDQ4ODU1LDQ4ODU2LDQ4ODY0LDQ4ODY3LDQ4''@;'; put 'put ''ODY4LDQ4ODY5LDQ4ODc2LDQ4ODk3LDQ4OTA0LDQ4OTA1LDQ4OTIwLDQ4OTIxLDQ4OTIzLDQ4OTI0LDQ4OTI1LDQ4OTYwLDQ4OTYxLDQ4OTY0LDQ4OTY4LDQ4OTc2LDQ4OTc3LDQ4OTgxLDQ5MDQ0LDQ5MDcyLDQ5MDkzLDQ5MTAwLDQ5MTAxLDQ5MTA0LDQ5MTA4LDQ5MTE2LDQ5MTE5LDQ5MTIx''@;'; put 'put ''LDQ5MjEyLDQ5MjMzLDQ5MjQwLDQ5MjQ0LDQ5MjQ4LDQ5MjU2LDQ5MjU3LDQ5Mjk2LDQ5Mjk3LDQ5MzAwLDQ5MzA0LDQ5MzEyLDQ5MzEzLDQ5MzE1LDQ5MzE3LDQ5MzI0LDQ5MzI1LDQ5MzI3LDQ5MzI4LDQ5MzMxLDQ5MzMyLDQ5MzMzLDQ5MzM0LDQ5MzQwLDQ5MzQxLDQ5MzQzLDQ5MzQ0LDQ5''@;'; put 'put ''MzQ1LDQ5MzQ5LDQ5MzUyLDQ5MzUzLDQ5MzU2LDQ5MzYwLDQ5MzY4LDQ5MzY5LDQ5MzcxLDQ5MzcyLDQ5MzczLDQ5MzgwLDU0MTIyLDU0MTIzLDU0MTI0LDU0MTI1LDU0MTI2LDU0MTI3LDU0MTI4LDU0MTI5LDU0MTMwLDU0MTMxLDU0MTMyLDU0MTMzLDU0MTM0LDU0MTM1LDU0MTM2LDU0MTM3''@;'; put 'put ''LDU0MTM4LDU0MTM5LDU0MTQyLDU0MTQzLDU0MTQ1LDU0MTQ2LDU0MTQ3LDU0MTQ5LDU0MTUwLDU0MTUxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0MTUyLDU0MTUzLDU0MTU0LDU0MTU1LDU0MTU4LDU0MTYyLDU0MTYzLDU0MTY0LDU0MTY1LDU0MTY2LDU0MTY3LDU0MTcwLDU0''@;'; put 'put ''MTcxLDU0MTczLDU0MTc0LDU0MTc1LDU0MTc3LDU0MTc4LDU0MTc5LDU0MTgwLDU0MTgxLDU0MTgyLDU0MTgzLDU0MTg2LDU0MTg4LDU0MTkwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0MTkxLDU0MTkyLDU0MTkzLDU0MTk0LDU0MTk1LDU0MTk3LDU0MTk4LDU0MTk5LDU0MjAx''@;'; put 'put ''LDU0MjAyLDU0MjAzLDU0MjA1LDU0MjA2LDU0MjA3LDU0MjA4LDU0MjA5LDU0MjEwLDU0MjExLDU0MjE0LDU0MjE1LDU0MjE4LDU0MjE5LDU0MjIwLDU0MjIxLDU0MjIyLDU0MjIzLDU0MjI1LDU0MjI2LDU0MjI3LDU0MjI4LDU0MjI5LDU0MjMwLDQ5MzgxLDQ5Mzg0LDQ5Mzg4LDQ5Mzk2LDQ5''@;'; put 'put ''Mzk3LDQ5Mzk5LDQ5NDAxLDQ5NDA4LDQ5NDEyLDQ5NDE2LDQ5NDI0LDQ5NDI5LDQ5NDM2LDQ5NDM3LDQ5NDM4LDQ5NDM5LDQ5NDQwLDQ5NDQzLDQ5NDQ0LDQ5NDQ2LDQ5NDQ3LDQ5NDUyLDQ5NDUzLDQ5NDU1LDQ5NDU2LDQ5NDU3LDQ5NDYyLDQ5NDY0LDQ5NDY1LDQ5NDY4LDQ5NDcyLDQ5NDgw''@;'; put 'put ''LDQ5NDgxLDQ5NDgzLDQ5NDg0LDQ5NDg1LDQ5NDkyLDQ5NDkzLDQ5NDk2LDQ5NTAwLDQ5NTA4LDQ5NTA5LDQ5NTExLDQ5NTEyLDQ5NTEzLDQ5NTIwLDQ5NTI0LDQ5NTI4LDQ5NTQxLDQ5NTQ4LDQ5NTQ5LDQ5NTUwLDQ5NTUyLDQ5NTU2LDQ5NTU4LDQ5NTY0LDQ5NTY1LDQ5NTY3LDQ5NTY5LDQ5''@;'; put 'put ''NTczLDQ5NTc2LDQ5NTc3LDQ5NTgwLDQ5NTg0LDQ5NTk3LDQ5NjA0LDQ5NjA4LDQ5NjEyLDQ5NjIwLDQ5NjIzLDQ5NjI0LDQ5NjMyLDQ5NjM2LDQ5NjQwLDQ5NjQ4LDQ5NjQ5LDQ5NjUxLDQ5NjYwLDQ5NjYxLDQ5NjY0LDQ5NjY4LDQ5Njc2LDQ5Njc3LDQ5Njc5LDQ5NjgxLDQ5Njg4LDQ5Njg5''@;'; put 'put ''LDQ5NjkyLDQ5Njk1LDQ5Njk2LDQ5NzA0LDQ5NzA1LDQ5NzA3LDQ5NzA5LDU0MjMxLDU0MjMzLDU0MjM0LDU0MjM1LDU0MjM2LDU0MjM3LDU0MjM4LDU0MjM5LDU0MjQwLDU0MjQyLDU0MjQ0LDU0MjQ1LDU0MjQ2LDU0MjQ3LDU0MjQ4LDU0MjQ5LDU0MjUwLDU0MjUxLDU0MjU0LDU0MjU1LDU0''@;'; put 'put ''MjU3LDU0MjU4LDU0MjU5LDU0MjYxLDU0MjYyLDU0MjYzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0MjY0LDU0MjY1LDU0MjY2LDU0MjY3LDU0MjcwLDU0MjcyLDU0Mjc0LDU0Mjc1LDU0Mjc2LDU0Mjc3LDU0Mjc4LDU0Mjc5LDU0MjgxLDU0MjgyLDU0MjgzLDU0Mjg0LDU0Mjg1''@;'; put 'put ''LDU0Mjg2LDU0Mjg3LDU0Mjg4LDU0Mjg5LDU0MjkwLDU0MjkxLDU0MjkyLDU0MjkzLDU0Mjk0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0Mjk1LDU0Mjk2LDU0Mjk3LDU0Mjk4LDU0Mjk5LDU0MzAwLDU0MzAyLDU0MzAzLDU0MzA0LDU0MzA1LDU0MzA2LDU0MzA3LDU0MzA4LDU0''@;'; put 'put ''MzA5LDU0MzEwLDU0MzExLDU0MzEyLDU0MzEzLDU0MzE0LDU0MzE1LDU0MzE2LDU0MzE3LDU0MzE4LDU0MzE5LDU0MzIwLDU0MzIxLDU0MzIyLDU0MzIzLDU0MzI0LDU0MzI1LDU0MzI2LDU0MzI3LDQ5NzExLDQ5NzEzLDQ5NzE0LDQ5NzE2LDQ5NzM2LDQ5NzQ0LDQ5NzQ1LDQ5NzQ4LDQ5NzUy''@;'; put 'put ''LDQ5NzYwLDQ5NzY1LDQ5NzcyLDQ5NzczLDQ5Nzc2LDQ5NzgwLDQ5Nzg4LDQ5Nzg5LDQ5NzkxLDQ5NzkzLDQ5ODAwLDQ5ODAxLDQ5ODA4LDQ5ODE2LDQ5ODE5LDQ5ODIxLDQ5ODI4LDQ5ODI5LDQ5ODMyLDQ5ODM2LDQ5ODM3LDQ5ODQ0LDQ5ODQ1LDQ5ODQ3LDQ5ODQ5LDQ5ODg0LDQ5ODg1LDQ5''@;'; put 'put ''ODg4LDQ5ODkxLDQ5ODkyLDQ5ODk5LDQ5OTAwLDQ5OTAxLDQ5OTAzLDQ5OTA1LDQ5OTEwLDQ5OTEyLDQ5OTEzLDQ5OTE1LDQ5OTE2LDQ5OTIwLDQ5OTI4LDQ5OTI5LDQ5OTMyLDQ5OTMzLDQ5OTM5LDQ5OTQwLDQ5OTQxLDQ5OTQ0LDQ5OTQ4LDQ5OTU2LDQ5OTU3LDQ5OTYwLDQ5OTYxLDQ5OTg5''@;'; put 'put ''LDUwMDI0LDUwMDI1LDUwMDI4LDUwMDMyLDUwMDM0LDUwMDQwLDUwMDQxLDUwMDQ0LDUwMDQ1LDUwMDUyLDUwMDU2LDUwMDYwLDUwMTEyLDUwMTM2LDUwMTM3LDUwMTQwLDUwMTQzLDUwMTQ0LDUwMTQ2LDUwMTUyLDUwMTUzLDUwMTU3LDUwMTY0LDUwMTY1LDUwMTY4LDUwMTg0LDUwMTkyLDUw''@;'; put 'put ''MjEyLDUwMjIwLDUwMjI0LDU0MzI4LDU0MzI5LDU0MzMwLDU0MzMxLDU0MzMyLDU0MzMzLDU0MzM0LDU0MzM1LDU0MzM3LDU0MzM4LDU0MzM5LDU0MzQxLDU0MzQyLDU0MzQzLDU0MzQ0LDU0MzQ1LDU0MzQ2LDU0MzQ3LDU0MzQ4LDU0MzQ5LDU0MzUwLDU0MzUxLDU0MzUyLDU0MzUzLDU0MzU0''@;'; put 'put ''LDU0MzU1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0MzU2LDU0MzU3LDU0MzU4LDU0MzU5LDU0MzYwLDU0MzYxLDU0MzYyLDU0MzYzLDU0MzY1LDU0MzY2LDU0MzY3LDU0MzY5LDU0MzcwLDU0MzcxLDU0MzczLDU0Mzc0LDU0Mzc1LDU0Mzc2LDU0Mzc3LDU0Mzc4LDU0Mzc5LDU0''@;'; put 'put ''MzgwLDU0MzgyLDU0Mzg0LDU0Mzg1LDU0Mzg2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0Mzg3LDU0Mzg4LDU0Mzg5LDU0MzkwLDU0MzkxLDU0Mzk0LDU0Mzk1LDU0Mzk3LDU0Mzk4LDU0NDAxLDU0NDAzLDU0NDA0LDU0NDA1LDU0NDA2LDU0NDA3LDU0NDEwLDU0NDEyLDU0NDE0''@;'; put 'put ''LDU0NDE1LDU0NDE2LDU0NDE3LDU0NDE4LDU0NDE5LDU0NDIxLDU0NDIyLDU0NDIzLDU0NDI0LDU0NDI1LDU0NDI2LDU0NDI3LDU0NDI4LDU0NDI5LDUwMjI4LDUwMjM2LDUwMjM3LDUwMjQ4LDUwMjc2LDUwMjc3LDUwMjgwLDUwMjg0LDUwMjkyLDUwMjkzLDUwMjk3LDUwMzA0LDUwMzI0LDUw''@;'; put 'put ''MzMyLDUwMzYwLDUwMzY0LDUwNDA5LDUwNDE2LDUwNDE3LDUwNDIwLDUwNDI0LDUwNDI2LDUwNDMxLDUwNDMyLDUwNDMzLDUwNDQ0LDUwNDQ4LDUwNDUyLDUwNDYwLDUwNDcyLDUwNDczLDUwNDc2LDUwNDgwLDUwNDg4LDUwNDg5LDUwNDkxLDUwNDkzLDUwNTAwLDUwNTAxLDUwNTA0LDUwNTA1''@;'; put 'put ''LDUwNTA2LDUwNTA4LDUwNTA5LDUwNTEwLDUwNTE1LDUwNTE2LDUwNTE3LDUwNTE5LDUwNTIwLDUwNTIxLDUwNTI1LDUwNTI2LDUwNTI4LDUwNTI5LDUwNTMyLDUwNTM2LDUwNTQ0LDUwNTQ1LDUwNTQ3LDUwNTQ4LDUwNTQ5LDUwNTU2LDUwNTU3LDUwNTYwLDUwNTY0LDUwNTY3LDUwNTcyLDUw''@;'; put 'put ''NTczLDUwNTc1LDUwNTc3LDUwNTgxLDUwNTgzLDUwNTg0LDUwNTg4LDUwNTkyLDUwNjAxLDUwNjEyLDUwNjEzLDUwNjE2LDUwNjE3LDUwNjE5LDUwNjIwLDUwNjIxLDUwNjIyLDUwNjI4LDUwNjI5LDUwNjMwLDUwNjMxLDUwNjMyLDUwNjMzLDUwNjM0LDUwNjM2LDUwNjM4LDU0NDMwLDU0NDMx''@;'; put 'put ''LDU0NDMyLDU0NDMzLDU0NDM0LDU0NDM1LDU0NDM2LDU0NDM3LDU0NDM4LDU0NDM5LDU0NDQwLDU0NDQyLDU0NDQzLDU0NDQ0LDU0NDQ1LDU0NDQ2LDU0NDQ3LDU0NDQ4LDU0NDQ5LDU0NDUwLDU0NDUxLDU0NDUyLDU0NDUzLDU0NDU0LDU0NDU1LDU0NDU2LG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLDU0NDU3LDU0NDU4LDU0NDU5LDU0NDYwLDU0NDYxLDU0NDYyLDU0NDYzLDU0NDY0LDU0NDY1LDU0NDY2LDU0NDY3LDU0NDY4LDU0NDY5LDU0NDcwLDU0NDcxLDU0NDcyLDU0NDczLDU0NDc0LDU0NDc1LDU0NDc3LDU0NDc4LDU0NDc5LDU0NDgxLDU0NDgyLDU0NDgzLDU0NDg1''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0NDg2LDU0NDg3LDU0NDg4LDU0NDg5LDU0NDkwLDU0NDkxLDU0NDkzLDU0NDk0LDU0NDk2LDU0NDk3LDU0NDk4LDU0NDk5LDU0NTAwLDU0NTAxLDU0NTAyLDU0NTAzLDU0NTA1LDU0NTA2LDU0NTA3LDU0NTA5LDU0NTEwLDU0NTExLDU0''@;'; put 'put ''NTEzLDU0NTE0LDU0NTE1LDU0NTE2LDU0NTE3LDU0NTE4LDU0NTE5LDU0NTIxLDU0NTIyLDU0NTI0LDUwNjQwLDUwNjQxLDUwNjQ0LDUwNjQ4LDUwNjU2LDUwNjU3LDUwNjU5LDUwNjYxLDUwNjY4LDUwNjY5LDUwNjcwLDUwNjcyLDUwNjc2LDUwNjc4LDUwNjc5LDUwNjg0LDUwNjg1LDUwNjg2''@;'; put 'put ''LDUwNjg3LDUwNjg4LDUwNjg5LDUwNjkzLDUwNjk0LDUwNjk1LDUwNjk2LDUwNzAwLDUwNzA0LDUwNzEyLDUwNzEzLDUwNzE1LDUwNzE2LDUwNzI0LDUwNzI1LDUwNzI4LDUwNzMyLDUwNzMzLDUwNzM0LDUwNzM2LDUwNzM5LDUwNzQwLDUwNzQxLDUwNzQzLDUwNzQ1LDUwNzQ3LDUwNzUyLDUw''@;'; put 'put ''NzUzLDUwNzU2LDUwNzYwLDUwNzY4LDUwNzY5LDUwNzcxLDUwNzcyLDUwNzczLDUwNzgwLDUwNzgxLDUwNzg0LDUwNzk2LDUwNzk5LDUwODAxLDUwODA4LDUwODA5LDUwODEyLDUwODE2LDUwODI0LDUwODI1LDUwODI3LDUwODI5LDUwODM2LDUwODM3LDUwODQwLDUwODQ0LDUwODUyLDUwODUz''@;'; put 'put ''LDUwODU1LDUwODU3LDUwODY0LDUwODY1LDUwODY4LDUwODcyLDUwODczLDUwODc0LDUwODgwLDUwODgxLDUwODgzLDUwODg1LDUwODkyLDUwODkzLDUwODk2LDUwOTAwLDUwOTA4LDUwOTA5LDUwOTEyLDUwOTEzLDUwOTIwLDU0NTI2LDU0NTI3LDU0NTI4LDU0NTI5LDU0NTMwLDU0NTMxLDU0''@;'; put 'put ''NTMzLDU0NTM0LDU0NTM1LDU0NTM3LDU0NTM4LDU0NTM5LDU0NTQxLDU0NTQyLDU0NTQzLDU0NTQ0LDU0NTQ1LDU0NTQ2LDU0NTQ3LDU0NTUwLDU0NTUyLDU0NTUzLDU0NTU0LDU0NTU1LDU0NTU2LDU0NTU3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0NTU4LDU0NTU5LDU0NTYw''@;'; put 'put ''LDU0NTYxLDU0NTYyLDU0NTYzLDU0NTY0LDU0NTY1LDU0NTY2LDU0NTY3LDU0NTY4LDU0NTY5LDU0NTcwLDU0NTcxLDU0NTcyLDU0NTczLDU0NTc0LDU0NTc1LDU0NTc2LDU0NTc3LDU0NTc4LDU0NTc5LDU0NTgwLDU0NTgxLDU0NTgyLDU0NTgzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLDU0NTg0LDU0NTg1LDU0NTg2LDU0NTg3LDU0NTkwLDU0NTkxLDU0NTkzLDU0NTk0LDU0NTk1LDU0NTk3LDU0NTk4LDU0NTk5LDU0NjAwLDU0NjAxLDU0NjAyLDU0NjAzLDU0NjA2LDU0NjA4LDU0NjEwLDU0NjExLDU0NjEyLDU0NjEzLDU0NjE0LDU0NjE1LDU0NjE4LDU0NjE5LDU0NjIx''@;'; put 'put ''LDU0NjIyLDU0NjIzLDU0NjI1LDU0NjI2LDU0NjI3LDUwOTIxLDUwOTI0LDUwOTI4LDUwOTM2LDUwOTM3LDUwOTQxLDUwOTQ4LDUwOTQ5LDUwOTUyLDUwOTU2LDUwOTY0LDUwOTY1LDUwOTY3LDUwOTY5LDUwOTc2LDUwOTc3LDUwOTgwLDUwOTg0LDUwOTkyLDUwOTkzLDUwOTk1LDUwOTk3LDUw''@;'; put 'put ''OTk5LDUxMDA0LDUxMDA1LDUxMDA4LDUxMDEyLDUxMDE4LDUxMDIwLDUxMDIxLDUxMDIzLDUxMDI1LDUxMDI2LDUxMDI3LDUxMDI4LDUxMDI5LDUxMDMwLDUxMDMxLDUxMDMyLDUxMDM2LDUxMDQwLDUxMDQ4LDUxMDUxLDUxMDYwLDUxMDYxLDUxMDY0LDUxMDY4LDUxMDY5LDUxMDcwLDUxMDc1''@;'; put 'put ''LDUxMDc2LDUxMDc3LDUxMDc5LDUxMDgwLDUxMDgxLDUxMDgyLDUxMDg2LDUxMDg4LDUxMDg5LDUxMDkyLDUxMDk0LDUxMDk1LDUxMDk2LDUxMDk4LDUxMTA0LDUxMTA1LDUxMTA3LDUxMTA4LDUxMTA5LDUxMTEwLDUxMTE2LDUxMTE3LDUxMTIwLDUxMTI0LDUxMTMyLDUxMTMzLDUxMTM1LDUx''@;'; put 'put ''MTM2LDUxMTM3LDUxMTQ0LDUxMTQ1LDUxMTQ4LDUxMTUwLDUxMTUyLDUxMTYwLDUxMTY1LDUxMTcyLDUxMTc2LDUxMTgwLDUxMjAwLDUxMjAxLDUxMjA0LDUxMjA4LDUxMjEwLDU0NjI4LDU0NjMwLDU0NjMxLDU0NjM0LDU0NjM2LDU0NjM4LDU0NjM5LDU0NjQwLDU0NjQxLDU0NjQyLDU0NjQz''@;'; put 'put ''LDU0NjQ2LDU0NjQ3LDU0NjQ5LDU0NjUwLDU0NjUxLDU0NjUzLDU0NjU0LDU0NjU1LDU0NjU2LDU0NjU3LDU0NjU4LDU0NjU5LDU0NjYyLDU0NjY2LDU0NjY3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0NjY4LDU0NjY5LDU0NjcwLDU0NjcxLDU0NjczLDU0Njc0LDU0Njc1LDU0''@;'; put 'put ''Njc2LDU0Njc3LDU0Njc4LDU0Njc5LDU0NjgwLDU0NjgxLDU0NjgyLDU0NjgzLDU0Njg0LDU0Njg1LDU0Njg2LDU0Njg3LDU0Njg4LDU0Njg5LDU0NjkwLDU0NjkxLDU0NjkyLDU0Njk0LDU0Njk1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0Njk2LDU0Njk3LDU0Njk4LDU0Njk5''@;'; put 'put ''LDU0NzAwLDU0NzAxLDU0NzAyLDU0NzAzLDU0NzA0LDU0NzA1LDU0NzA2LDU0NzA3LDU0NzA4LDU0NzA5LDU0NzEwLDU0NzExLDU0NzEyLDU0NzEzLDU0NzE0LDU0NzE1LDU0NzE2LDU0NzE3LDU0NzE4LDU0NzE5LDU0NzIwLDU0NzIxLDU0NzIyLDU0NzIzLDU0NzI0LDU0NzI1LDU0NzI2LDU0''@;'; put 'put ''NzI3LDUxMjE2LDUxMjE3LDUxMjE5LDUxMjIxLDUxMjIyLDUxMjI4LDUxMjI5LDUxMjMyLDUxMjM2LDUxMjQ0LDUxMjQ1LDUxMjQ3LDUxMjQ5LDUxMjU2LDUxMjYwLDUxMjY0LDUxMjcyLDUxMjczLDUxMjc2LDUxMjc3LDUxMjg0LDUxMzEyLDUxMzEzLDUxMzE2LDUxMzIwLDUxMzIyLDUxMzI4''@;'; put 'put ''LDUxMzI5LDUxMzMxLDUxMzMzLDUxMzM0LDUxMzM1LDUxMzM5LDUxMzQwLDUxMzQxLDUxMzQ4LDUxMzU3LDUxMzU5LDUxMzYxLDUxMzY4LDUxMzg4LDUxMzg5LDUxMzk2LDUxNDAwLDUxNDA0LDUxNDEyLDUxNDEzLDUxNDE1LDUxNDE3LDUxNDI0LDUxNDI1LDUxNDI4LDUxNDQ1LDUxNDUyLDUx''@;'; put 'put ''NDUzLDUxNDU2LDUxNDYwLDUxNDYxLDUxNDYyLDUxNDY4LDUxNDY5LDUxNDcxLDUxNDczLDUxNDgwLDUxNTAwLDUxNTA4LDUxNTM2LDUxNTM3LDUxNTQwLDUxNTQ0LDUxNTUyLDUxNTUzLDUxNTU1LDUxNTY0LDUxNTY4LDUxNTcyLDUxNTgwLDUxNTkyLDUxNTkzLDUxNTk2LDUxNjAwLDUxNjA4''@;'; put 'put ''LDUxNjA5LDUxNjExLDUxNjEzLDUxNjQ4LDUxNjQ5LDUxNjUyLDUxNjU1LDUxNjU2LDUxNjU4LDUxNjY0LDUxNjY1LDUxNjY3LDU0NzMwLDU0NzMxLDU0NzMzLDU0NzM0LDU0NzM1LDU0NzM3LDU0NzM5LDU0NzQwLDU0NzQxLDU0NzQyLDU0NzQzLDU0NzQ2LDU0NzQ4LDU0NzUwLDU0NzUxLDU0''@;'; put 'put ''NzUyLDU0NzUzLDU0NzU0LDU0NzU1LDU0NzU4LDU0NzU5LDU0NzYxLDU0NzYyLDU0NzYzLDU0NzY1LDU0NzY2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0NzY3LDU0NzY4LDU0NzY5LDU0NzcwLDU0NzcxLDU0Nzc0LDU0Nzc2LDU0Nzc4LDU0Nzc5LDU0NzgwLDU0NzgxLDU0Nzgy''@;'; put 'put ''LDU0NzgzLDU0Nzg2LDU0Nzg3LDU0Nzg5LDU0NzkwLDU0NzkxLDU0NzkzLDU0Nzk0LDU0Nzk1LDU0Nzk2LDU0Nzk3LDU0Nzk4LDU0Nzk5LDU0ODAyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0ODA2LDU0ODA3LDU0ODA4LDU0ODA5LDU0ODEwLDU0ODExLDU0ODEzLDU0ODE0LDU0''@;'; put 'put ''ODE1LDU0ODE3LDU0ODE4LDU0ODE5LDU0ODIxLDU0ODIyLDU0ODIzLDU0ODI0LDU0ODI1LDU0ODI2LDU0ODI3LDU0ODI4LDU0ODMwLDU0ODMxLDU0ODMyLDU0ODMzLDU0ODM0LDU0ODM1LDU0ODM2LDU0ODM3LDU0ODM4LDU0ODM5LDU0ODQyLDU0ODQzLDUxNjY5LDUxNjcwLDUxNjczLDUxNjc0''@;'; put 'put ''LDUxNjc2LDUxNjc3LDUxNjgwLDUxNjgyLDUxNjg0LDUxNjg3LDUxNjkyLDUxNjkzLDUxNjk1LDUxNjk2LDUxNjk3LDUxNzA0LDUxNzA1LDUxNzA4LDUxNzEyLDUxNzIwLDUxNzIxLDUxNzIzLDUxNzI0LDUxNzI1LDUxNzMyLDUxNzM2LDUxNzUzLDUxNzg4LDUxNzg5LDUxNzkyLDUxNzk2LDUx''@;'; put 'put ''ODA0LDUxODA1LDUxODA3LDUxODA4LDUxODA5LDUxODE2LDUxODM3LDUxODQ0LDUxODY0LDUxOTAwLDUxOTAxLDUxOTA0LDUxOTA4LDUxOTE2LDUxOTE3LDUxOTE5LDUxOTIxLDUxOTIzLDUxOTI4LDUxOTI5LDUxOTM2LDUxOTQ4LDUxOTU2LDUxOTc2LDUxOTg0LDUxOTg4LDUxOTkyLDUyZTMs''@;'; put 'put ''NTIwMDEsNTIwMzMsNTIwNDAsNTIwNDEsNTIwNDQsNTIwNDgsNTIwNTYsNTIwNTcsNTIwNjEsNTIwNjgsNTIwODgsNTIwODksNTIxMjQsNTIxNTIsNTIxODAsNTIxOTYsNTIxOTksNTIyMDEsNTIyMzYsNTIyMzcsNTIyNDAsNTIyNDQsNTIyNTIsNTIyNTMsNTIyNTcsNTIyNTgsNTIyNjMsNTIy''@;'; put 'put ''NjQsNTIyNjUsNTIyNjgsNTIyNzAsNTIyNzIsNTIyODAsNTIyODEsNTIyODMsNTQ4NDUsNTQ4NDYsNTQ4NDcsNTQ4NDksNTQ4NTAsNTQ4NTEsNTQ4NTIsNTQ4NTQsNTQ4NTUsNTQ4NTgsNTQ4NjAsNTQ4NjIsNTQ4NjMsNTQ4NjQsNTQ4NjYsNTQ4NjcsNTQ4NzAsNTQ4NzEsNTQ4NzMsNTQ4NzQs''@;'; put 'put ''NTQ4NzUsNTQ4NzcsNTQ4NzgsNTQ4NzksNTQ4ODAsNTQ4ODEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ4ODIsNTQ4ODMsNTQ4ODQsNTQ4ODUsNTQ4ODYsNTQ4ODgsNTQ4OTAsNTQ4OTEsNTQ4OTIsNTQ4OTMsNTQ4OTQsNTQ4OTUsNTQ4OTgsNTQ4OTksNTQ5MDEsNTQ5MDIsNTQ5''@;'; put 'put ''MDMsNTQ5MDQsNTQ5MDUsNTQ5MDYsNTQ5MDcsNTQ5MDgsNTQ5MDksNTQ5MTAsNTQ5MTEsNTQ5MTIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ5MTMsNTQ5MTQsNTQ5MTYsNTQ5MTgsNTQ5MTksNTQ5MjAsNTQ5MjEsNTQ5MjIsNTQ5MjMsNTQ5MjYsNTQ5MjcsNTQ5MjksNTQ5MzAs''@;'; put 'put ''NTQ5MzEsNTQ5MzMsNTQ5MzQsNTQ5MzUsNTQ5MzYsNTQ5MzcsNTQ5MzgsNTQ5MzksNTQ5NDAsNTQ5NDIsNTQ5NDQsNTQ5NDYsNTQ5NDcsNTQ5NDgsNTQ5NDksNTQ5NTAsNTQ5NTEsNTQ5NTMsNTQ5NTQsNTIyODQsNTIyODUsNTIyODYsNTIyOTIsNTIyOTMsNTIyOTYsNTIzMDAsNTIzMDgsNTIz''@;'; put 'put ''MDksNTIzMTEsNTIzMTIsNTIzMTMsNTIzMjAsNTIzMjQsNTIzMjYsNTIzMjgsNTIzMzYsNTIzNDEsNTIzNzYsNTIzNzcsNTIzODAsNTIzODQsNTIzOTIsNTIzOTMsNTIzOTUsNTIzOTYsNTIzOTcsNTI0MDQsNTI0MDUsNTI0MDgsNTI0MTIsNTI0MjAsNTI0MjEsNTI0MjMsNTI0MjUsNTI0MzIs''@;'; put 'put ''NTI0MzYsNTI0NTIsNTI0NjAsNTI0NjQsNTI0ODEsNTI0ODgsNTI0ODksNTI0OTIsNTI0OTYsNTI1MDQsNTI1MDUsNTI1MDcsNTI1MDksNTI1MTYsNTI1MjAsNTI1MjQsNTI1MzcsNTI1NzIsNTI1NzYsNTI1ODAsNTI1ODgsNTI1ODksNTI1OTEsNTI1OTMsNTI2MDAsNTI2MTYsNTI2MjgsNTI2''@;'; put 'put ''MjksNTI2MzIsNTI2MzYsNTI2NDQsNTI2NDUsNTI2NDcsNTI2NDksNTI2NTYsNTI2NzYsNTI2ODQsNTI2ODgsNTI3MTIsNTI3MTYsNTI3MjAsNTI3MjgsNTI3MjksNTI3MzEsNTI3MzMsNTI3NDAsNTI3NDQsNTI3NDgsNTI3NTYsNTI3NjEsNTI3NjgsNTI3NjksNTI3NzIsNTI3NzYsNTI3ODQs''@;'; put 'put ''NTI3ODUsNTI3ODcsNTI3ODksNTQ5NTUsNTQ5NTcsNTQ5NTgsNTQ5NTksNTQ5NjEsNTQ5NjIsNTQ5NjMsNTQ5NjQsNTQ5NjUsNTQ5NjYsNTQ5NjcsNTQ5NjgsNTQ5NzAsNTQ5NzIsNTQ5NzMsNTQ5NzQsNTQ5NzUsNTQ5NzYsNTQ5NzcsNTQ5NzgsNTQ5NzksNTQ5ODIsNTQ5ODMsNTQ5ODUsNTQ5''@;'; put 'put ''ODYsNTQ5ODcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ5ODksNTQ5OTAsNTQ5OTEsNTQ5OTIsNTQ5OTQsNTQ5OTUsNTQ5OTcsNTQ5OTgsNTVlMyw1NTAwMiw1NTAwMyw1NTAwNCw1NTAwNSw1NTAwNiw1NTAwNyw1NTAwOSw1NTAxMCw1NTAxMSw1NTAxMyw1NTAxNCw1NTAxNSw1''@;'; put 'put ''NTAxNyw1NTAxOCw1NTAxOSw1NTAyMCw1NTAyMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NTAyMiw1NTAyMyw1NTAyNSw1NTAyNiw1NTAyNyw1NTAyOCw1NTAzMCw1NTAzMSw1NTAzMiw1NTAzMyw1NTAzNCw1NTAzNSw1NTAzOCw1NTAzOSw1NTA0MSw1NTA0Miw1NTA0Myw1NTA0''@;'; put 'put ''NSw1NTA0Niw1NTA0Nyw1NTA0OCw1NTA0OSw1NTA1MCw1NTA1MSw1NTA1Miw1NTA1Myw1NTA1NCw1NTA1NSw1NTA1Niw1NTA1OCw1NTA1OSw1NTA2MCw1MjgyNCw1MjgyNSw1MjgyOCw1MjgzMSw1MjgzMiw1MjgzMyw1Mjg0MCw1Mjg0MSw1Mjg0Myw1Mjg0NSw1Mjg1Miw1Mjg1Myw1Mjg1Niw1''@;'; put 'put ''Mjg2MCw1Mjg2OCw1Mjg2OSw1Mjg3MSw1Mjg3Myw1Mjg4MCw1Mjg4MSw1Mjg4NCw1Mjg4OCw1Mjg5Niw1Mjg5Nyw1Mjg5OSw1MjkwMCw1MjkwMSw1MjkwOCw1MjkwOSw1MjkyOSw1Mjk2NCw1Mjk2NSw1Mjk2OCw1Mjk3MSw1Mjk3Miw1Mjk4MCw1Mjk4MSw1Mjk4Myw1Mjk4NCw1Mjk4NSw1Mjk5''@;'; put 'put ''Miw1Mjk5Myw1Mjk5Niw1M2UzLDUzMDA4LDUzMDA5LDUzMDExLDUzMDEzLDUzMDIwLDUzMDI0LDUzMDI4LDUzMDM2LDUzMDM3LDUzMDM5LDUzMDQwLDUzMDQxLDUzMDQ4LDUzMDc2LDUzMDc3LDUzMDgwLDUzMDg0LDUzMDkyLDUzMDkzLDUzMDk1LDUzMDk3LDUzMTA0LDUzMTA1LDUzMTA4LDUz''@;'; put 'put ''MTEyLDUzMTIwLDUzMTI1LDUzMTMyLDUzMTUzLDUzMTYwLDUzMTY4LDUzMTg4LDUzMjE2LDUzMjE3LDUzMjIwLDUzMjI0LDUzMjMyLDUzMjMzLDUzMjM1LDUzMjM3LDUzMjQ0LDUzMjQ4LDUzMjUyLDUzMjY1LDUzMjcyLDUzMjkzLDUzMzAwLDUzMzAxLDUzMzA0LDUzMzA4LDU1MDYxLDU1MDYy''@;'; put 'put ''LDU1MDYzLDU1MDY2LDU1MDY3LDU1MDY5LDU1MDcwLDU1MDcxLDU1MDczLDU1MDc0LDU1MDc1LDU1MDc2LDU1MDc3LDU1MDc4LDU1MDc5LDU1MDgyLDU1MDg0LDU1MDg2LDU1MDg3LDU1MDg4LDU1MDg5LDU1MDkwLDU1MDkxLDU1MDk0LDU1MDk1LDU1MDk3LG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLDU1MDk4LDU1MDk5LDU1MTAxLDU1MTAyLDU1MTAzLDU1MTA0LDU1MTA1LDU1MTA2LDU1MTA3LDU1MTA5LDU1MTEwLDU1MTEyLDU1MTE0LDU1MTE1LDU1MTE2LDU1MTE3LDU1MTE4LDU1MTE5LDU1MTIyLDU1MTIzLDU1MTI1LDU1MTMwLDU1MTMxLDU1MTMyLDU1MTMzLDU1MTM0''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU1MTM1LDU1MTM4LDU1MTQwLDU1MTQyLDU1MTQzLDU1MTQ0LDU1MTQ2LDU1MTQ3LDU1MTQ5LDU1MTUwLDU1MTUxLDU1MTUzLDU1MTU0LDU1MTU1LDU1MTU3LDU1MTU4LDU1MTU5LDU1MTYwLDU1MTYxLDU1MTYyLDU1MTYzLDU1MTY2LDU1''@;'; put 'put ''MTY3LDU1MTY4LDU1MTcwLDU1MTcxLDU1MTcyLDU1MTczLDU1MTc0LDU1MTc1LDU1MTc4LDU1MTc5LDUzMzE2LDUzMzE3LDUzMzE5LDUzMzIxLDUzMzI4LDUzMzMyLDUzMzM2LDUzMzQ0LDUzMzU2LDUzMzU3LDUzMzYwLDUzMzY0LDUzMzcyLDUzMzczLDUzMzc3LDUzNDEyLDUzNDEzLDUzNDE2''@;'; put 'put ''LDUzNDIwLDUzNDI4LDUzNDI5LDUzNDMxLDUzNDMzLDUzNDQwLDUzNDQxLDUzNDQ0LDUzNDQ4LDUzNDQ5LDUzNDU2LDUzNDU3LDUzNDU5LDUzNDYwLDUzNDYxLDUzNDY4LDUzNDY5LDUzNDcyLDUzNDc2LDUzNDg0LDUzNDg1LDUzNDg3LDUzNDg4LDUzNDg5LDUzNDk2LDUzNTE3LDUzNTUyLDUz''@;'; put 'put ''NTUzLDUzNTU2LDUzNTYwLDUzNTYyLDUzNTY4LDUzNTY5LDUzNTcxLDUzNTcyLDUzNTczLDUzNTgwLDUzNTgxLDUzNTg0LDUzNTg4LDUzNTk2LDUzNTk3LDUzNTk5LDUzNjAxLDUzNjA4LDUzNjEyLDUzNjI4LDUzNjM2LDUzNjQwLDUzNjY0LDUzNjY1LDUzNjY4LDUzNjcyLDUzNjgwLDUzNjgx''@;'; put 'put ''LDUzNjgzLDUzNjg1LDUzNjkwLDUzNjkyLDUzNjk2LDUzNzIwLDUzNzQ4LDUzNzUyLDUzNzY3LDUzNzY5LDUzNzc2LDUzODA0LDUzODA1LDUzODA4LDUzODEyLDUzODIwLDUzODIxLDUzODIzLDUzODI1LDUzODMyLDUzODUyLDU1MTgxLDU1MTgyLDU1MTgzLDU1MTg1LDU1MTg2LDU1MTg3LDU1''@;'; put 'put ''MTg4LDU1MTg5LDU1MTkwLDU1MTkxLDU1MTk0LDU1MTk2LDU1MTk4LDU1MTk5LDU1MjAwLDU1MjAxLDU1MjAyLDU1MjAzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzODYwLDUzODg4LDUzODg5LDUzODkyLDUzODk2LDUzOTA0''@;'; put 'put ''LDUzOTA1LDUzOTA5LDUzOTE2LDUzOTIwLDUzOTI0LDUzOTMyLDUzOTM3LDUzOTQ0LDUzOTQ1LDUzOTQ4LDUzOTUxLDUzOTUyLDUzOTU0LDUzOTYwLDUzOTYxLDUzOTYzLDUzOTcyLDUzOTc2LDUzOTgwLDUzOTg4LDUzOTg5LDU0ZTMsNTQwMDEsNTQwMDQsNTQwMDgsNTQwMTYsNTQwMTcsNTQw''@;'; put 'put ''MTksNTQwMjEsNTQwMjgsNTQwMjksNTQwMzAsNTQwMzIsNTQwMzYsNTQwMzgsNTQwNDQsNTQwNDUsNTQwNDcsNTQwNDgsNTQwNDksNTQwNTMsNTQwNTYsNTQwNTcsNTQwNjAsNTQwNjQsNTQwNzIsNTQwNzMsNTQwNzUsNTQwNzYsNTQwNzcsNTQwODQsNTQwODUsNTQxNDAsNTQxNDEsNTQxNDQs''@;'; put 'put ''NTQxNDgsNTQxNTYsNTQxNTcsNTQxNTksNTQxNjAsNTQxNjEsNTQxNjgsNTQxNjksNTQxNzIsNTQxNzYsNTQxODQsNTQxODUsNTQxODcsNTQxODksNTQxOTYsNTQyMDAsNTQyMDQsNTQyMTIsNTQyMTMsNTQyMTYsNTQyMTcsNTQyMjQsNTQyMzIsNTQyNDEsNTQyNDMsNTQyNTIsNTQyNTMsNTQy''@;'; put 'put ''NTYsNTQyNjAsNTQyNjgsNTQyNjksNTQyNzEsNTQyNzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsNTQyODAsNTQzMDEsNTQzMzYsNTQzNDAsNTQzNjQsNTQzNjgsNTQzNzIsNTQzODEsNTQzODMsNTQzOTIsNTQzOTMsNTQzOTYsNTQzOTksNTQ0MDAsNTQ0MDIsNTQ0MDgsNTQ0MDksNTQ0MTEsNTQ0MTMsNTQ0MjAsNTQ0NDEsNTQ0NzYsNTQ0ODAsNTQ0ODQsNTQ0''@;'; put 'put ''OTIsNTQ0OTUsNTQ1MDQsNTQ1MDgsNTQ1MTIsNTQ1MjAsNTQ1MjMsNTQ1MjUsNTQ1MzIsNTQ1MzYsNTQ1NDAsNTQ1NDgsNTQ1NDksNTQ1NTEsNTQ1ODgsNTQ1ODksNTQ1OTIsNTQ1OTYsNTQ2MDQsNTQ2MDUsNTQ2MDcsNTQ2MDksNTQ2MTYsNTQ2MTcsNTQ2MjAsNTQ2MjQsNTQ2MjksNTQ2MzIs''@;'; put 'put ''NTQ2MzMsNTQ2MzUsNTQ2MzcsNTQ2NDQsNTQ2NDUsNTQ2NDgsNTQ2NTIsNTQ2NjAsNTQ2NjEsNTQ2NjMsNTQ2NjQsNTQ2NjUsNTQ2NzIsNTQ2OTMsNTQ3MjgsNTQ3MjksNTQ3MzIsNTQ3MzYsNTQ3MzgsNTQ3NDQsNTQ3NDUsNTQ3NDcsNTQ3NDksNTQ3NTYsNTQ3NTcsNTQ3NjAsNTQ3NjQsNTQ3''@;'; put 'put ''NzIsNTQ3NzMsNTQ3NzUsNTQ3NzcsNTQ3ODQsNTQ3ODUsNTQ3ODgsNTQ3OTIsNTQ4MDAsNTQ4MDEsNTQ4MDMsNTQ4MDQsNTQ4MDUsNTQ4MTIsNTQ4MTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ4MjAsNTQ4MjksNTQ4NDAsNTQ4NDEsNTQ4NDQsNTQ4NDgsNTQ4NTMsNTQ4NTYsNTQ4NTcsNTQ4NTksNTQ4NjEsNTQ4NjUsNTQ4NjgsNTQ4NjksNTQ4NzIsNTQ4''@;'; put 'put ''NzYsNTQ4ODcsNTQ4ODksNTQ4OTYsNTQ4OTcsNTQ5MDAsNTQ5MTUsNTQ5MTcsNTQ5MjQsNTQ5MjUsNTQ5MjgsNTQ5MzIsNTQ5NDEsNTQ5NDMsNTQ5NDUsNTQ5NTIsNTQ5NTYsNTQ5NjAsNTQ5NjksNTQ5NzEsNTQ5ODAsNTQ5ODEsNTQ5ODQsNTQ5ODgsNTQ5OTMsNTQ5OTYsNTQ5OTksNTUwMDEs''@;'; put 'put ''NTUwMDgsNTUwMTIsNTUwMTYsNTUwMjQsNTUwMjksNTUwMzYsNTUwMzcsNTUwNDAsNTUwNDQsNTUwNTcsNTUwNjQsNTUwNjUsNTUwNjgsNTUwNzIsNTUwODAsNTUwODEsNTUwODMsNTUwODUsNTUwOTIsNTUwOTMsNTUwOTYsNTUxMDAsNTUxMDgsNTUxMTEsNTUxMTMsNTUxMjAsNTUxMjEsNTUx''@;'; put 'put ''MjQsNTUxMjYsNTUxMjcsNTUxMjgsNTUxMjksNTUxMzYsNTUxMzcsNTUxMzksNTUxNDEsNTUxNDUsNTUxNDgsNTUxNTIsNTUxNTYsNTUxNjQsNTUxNjUsNTUxNjksNTUxNzYsNTUxNzcsNTUxODAsNTUxODQsNTUxOTIsNTUxOTMsNTUxOTUsNTUxOTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMDI4NSwyMDMzOSwyMDU1MSwyMDcyOSwyMTE1MiwyMTQ4NywyMTYyMSwyMTczMywyMjAyNSwyMzIzMywyMzQ3OCwyNjI0NywyNjU1MCwy''@;'; put 'put ''NjU1MSwyNjYwNywyNzQ2OCwyOTYzNCwzMDE0NiwzMTI5MiwzMzQ5OSwzMzU0MCwzNDkwMywzNDk1MiwzNTM4MiwzNjA0MCwzNjMwMywzNjYwMywzNjgzOCwzOTM4MSwyMTA1MSwyMTM2NCwyMTUwOCwyNDY4MiwyNDkzMiwyNzU4MCwyOTY0NywzMzA1MCwzNTI1OCwzNTI4MiwzODMwNywyMDM1''@;'; put 'put ''NSwyMTAwMiwyMjcxOCwyMjkwNCwyMzAxNCwyNDE3OCwyNDE4NSwyNTAzMSwyNTUzNiwyNjQzOCwyNjYwNCwyNjc1MSwyODU2NywzMDI4NiwzMDQ3NSwzMDk2NSwzMTI0MCwzMTQ4NywzMTc3NywzMjkyNSwzMzM5MCwzMzM5MywzNTU2MywzODI5MSwyMDA3NSwyMTkxNywyNjM1OSwyODIxMiwz''@;'; put 'put ''MDg4MywzMTQ2OSwzMzg4MywzNTA4OCwzNDYzOCwzODgyNCwyMTIwOCwyMjM1MCwyMjU3MCwyMzg4NCwyNDg2MywyNTAyMiwyNTEyMSwyNTk1NCwyNjU3NywyNzIwNCwyODE4NywyOTk3NiwzMDEzMSwzMDQzNSwzMDY0MCwzMjA1OCwzNzAzOSwzNzk2OSwzNzk3MCw0MDg1MyxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMTI4MywyMzcyNCwzMDAwMiwzMjk4Nywz''@;'; put 'put ''NzQ0MCwzODI5NiwyMTA4MywyMjUzNiwyMzAwNCwyMzcxMywyMzgzMSwyNDI0NywyNDM3OCwyNDM5NCwyNDk1MSwyNzc0MywzMDA3NCwzMDA4NiwzMTk2OCwzMjExNSwzMjE3NywzMjY1MiwzMzEwOCwzMzMxMywzNDE5MywzNTEzNywzNTYxMSwzNzYyOCwzODQ3Nyw0MDAwNywyMDE3MSwyMDIx''@;'; put 'put ''NSwyMDQ5MSwyMDk3NywyMjYwNywyNDg4NywyNDg5NCwyNDkzNiwyNTkxMywyNzExNCwyODQzMywzMDExNywzMDM0MiwzMDQyMiwzMTYyMywzMzQ0NSwzMzk5NSw2Mzc0NCwzNzc5OSwzODI4MywyMTg4OCwyMzQ1OCwyMjM1Myw2Mzc0NSwzMTkyMywzMjY5NywzNzMwMSwyMDUyMCwyMTQzNSwy''@;'; put 'put ''MzYyMSwyNDA0MCwyNTI5OCwyNTQ1NCwyNTgxOCwyNTgzMSwyODE5MiwyODg0NCwzMTA2NywzNjMxNywzNjM4Miw2Mzc0NiwzNjk4OSwzNzQ0NSwzNzYyNCwyMDA5NCwyMDIxNCwyMDU4MSwyNDA2MiwyNDMxNCwyNDgzOCwyNjk2NywzMzEzNywzNDM4OCwzNjQyMywzNzc0OSwzOTQ2NywyMDA2''@;'; put 'put ''MiwyMDYyNSwyNjQ4MCwyNjY4OCwyMDc0NSwyMTEzMywyMTEzOCwyNzI5OCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMDY1MiwzNzM5Miw0MDY2MCwyMTE2MywyNDYyMywzNjg1MCwyMDU1MiwyNTAwMSwyNTU4MSwyNTgwMiwyNjY4NCwyNzI2OCwyODYwOCwzMzE2MCwzNTIzMywzODU0OCwyMjUzMywyOTMwOSwyOTM1NiwyOTk1NiwzMjEyMSwzMjM2NSwzMjkz''@;'; put 'put ''NywzNTIxMSwzNTcwMCwzNjk2Myw0MDI3MywyNTIyNSwyNzc3MCwyODUwMCwzMjA4MCwzMjU3MCwzNTM2MywyMDg2MCwyNDkwNiwzMTY0NSwzNTYwOSwzNzQ2MywzNzc3MiwyMDE0MCwyMDQzNSwyMDUxMCwyMDY3MCwyMDc0MiwyMTE4NSwyMTE5NywyMTM3NSwyMjM4NCwyMjY1OSwyNDIxOCwy''@;'; put 'put ''NDQ2NSwyNDk1MCwyNTAwNCwyNTgwNiwyNTk2NCwyNjIyMywyNjI5OSwyNjM1NiwyNjc3NSwyODAzOSwyODgwNSwyODkxMywyOTg1NSwyOTg2MSwyOTg5OCwzMDE2OSwzMDgyOCwzMDk1NiwzMTQ1NSwzMTQ3OCwzMjA2OSwzMjE0NywzMjc4OSwzMjgzMSwzMzA1MSwzMzY4NiwzNTY4NiwzNjYy''@;'; put 'put ''OSwzNjg4NSwzNzg1NywzODkxNSwzODk2OCwzOTUxNCwzOTkxMiwyMDQxOCwyMTg0MywyMjU4NiwyMjg2NSwyMzM5NSwyMzYyMiwyNDc2MCwyNTEwNiwyNjY5MCwyNjgwMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNjg1NiwyODMzMCwzMDAyOCwzMDMyOCwzMDkyNiwzMTI5MywzMTk5NSwzMjM2MywzMjM4MCwzNTMzNiwzNTQ4OSwzNTkwMywzODU0Miw0MDM4''@;'; put 'put ''OCwyMTQ3NiwyMTQ4MSwyMTU3OCwyMTYxNywyMjI2NiwyMjk5MywyMzM5NiwyMzYxMSwyNDIzNSwyNTMzNSwyNTkxMSwyNTkyNSwyNTk3MCwyNjI3MiwyNjU0MywyNzA3MywyNzgzNywzMDIwNCwzMDM1MiwzMDU5MCwzMTI5NSwzMjY2MCwzMjc3MSwzMjkyOSwzMzE2NywzMzUxMCwzMzUzMywz''@;'; put 'put ''Mzc3NiwzNDI0MSwzNDg2NSwzNDk5NiwzNTQ5Myw2Mzc0NywzNjc2NCwzNzY3OCwzODU5OSwzOTAxNSwzOTY0MCw0MDcyMywyMTc0MSwyNjAxMSwyNjM1NCwyNjc2NywzMTI5NiwzNTg5NSw0MDI4OCwyMjI1NiwyMjM3MiwyMzgyNSwyNjExOCwyNjgwMSwyNjgyOSwyODQxNCwyOTczNiwzNDk3''@;'; put 'put ''NCwzOTkwOCwyNzc1Miw2Mzc0OCwzOTU5MiwyMDM3OSwyMDg0NCwyMDg0OSwyMTE1MSwyMzM4MCwyNDAzNywyNDY1NiwyNDY4NSwyNTMyOSwyNTUxMSwyNTkxNSwyOTY1NywzMTM1NCwzNDQ2NywzNjAwMiwzODc5OSwyMDAxOCwyMzUyMSwyNTA5NiwyNjUyNCwyOTkxNixudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMTE4NSwzMzc0NywzNTQ2MywzNTUwNiwzNjMy''@;'; put 'put ''OCwzNjk0MiwzNzcwNywzODk4MiwyNDI3NSwyNzExMiwzNDMwMywzNzEwMSw2Mzc0OSwyMDg5NiwyMzQ0OCwyMzUzMiwyNDkzMSwyNjg3NCwyNzQ1NCwyODc0OCwyOTc0MywyOTkxMiwzMTY0OSwzMjU5MiwzMzczMywzNTI2NCwzNjAxMSwzODM2NCwzOTIwOCwyMTAzOCwyNDY2OSwyNTMyNCwz''@;'; put 'put ''Njg2NiwyMDM2MiwyMDgwOSwyMTI4MSwyMjc0NSwyNDI5MSwyNjMzNiwyNzk2MCwyODgyNiwyOTM3OCwyOTY1NCwzMTU2OCwzMzAwOSwzNzk3OSwyMTM1MCwyNTQ5OSwzMjYxOSwyMDA1NCwyMDYwOCwyMjYwMiwyMjc1MCwyNDYxOCwyNDg3MSwyNTI5NiwyNzA4OCwzOTc0NSwyMzQzOSwzMjAy''@;'; put 'put ''NCwzMjk0NSwzNjcwMywyMDEzMiwyMDY4OSwyMTY3NiwyMTkzMiwyMzMwOCwyMzk2OCwyNDAzOSwyNTg5OCwyNTkzNCwyNjY1NywyNzIxMSwyOTQwOSwzMDM1MCwzMDcwMywzMjA5NCwzMjc2MSwzMzE4NCwzNDEyNiwzNDUyNywzNjYxMSwzNjY4NiwzNzA2NiwzOTE3MSwzOTUwOSwzOTg1MSwx''@;'; put 'put ''OTk5MiwyMDAzNywyMDA2MSwyMDE2NywyMDQ2NSwyMDg1NSwyMTI0NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMTMxMiwyMTQ3NSwyMTQ3NywyMTY0NiwyMjAzNiwyMjM4OSwyMjQzNCwyMzQ5NSwyMzk0MywyNDI3MiwyNTA4NCwyNTMwNCwyNTkzNywyNjU1MiwyNjYwMSwyNzA4MywyNzQ3MiwyNzU5MCwyNzYyOCwyNzcxNCwyODMxNywyODc5MiwyOTM5OSwy''@;'; put 'put ''OTU5MCwyOTY5OSwzMDY1NSwzMDY5NywzMTM1MCwzMjEyNywzMjc3NywzMzI3NiwzMzI4NSwzMzI5MCwzMzUwMywzNDkxNCwzNTYzNSwzNjA5MiwzNjU0NCwzNjg4MSwzNzA0MSwzNzQ3NiwzNzU1OCwzOTM3OCwzOTQ5Myw0MDE2OSw0MDQwNyw0MDg2MCwyMjI4MywyMzYxNiwzMzczOCwzODgx''@;'; put 'put ''NiwzODgyNyw0MDYyOCwyMTUzMSwzMTM4NCwzMjY3NiwzNTAzMywzNjU1NywzNzA4OSwyMjUyOCwyMzYyNCwyNTQ5NiwzMTM5MSwyMzQ3MCwyNDMzOSwzMTM1MywzMTQwNiwzMzQyMiwzNjUyNCwyMDUxOCwyMTA0OCwyMTI0MCwyMTM2NywyMjI4MCwyNTMzMSwyNTQ1OCwyNzQwMiwyODA5OSwz''@;'; put 'put ''MDUxOSwyMTQxMywyOTUyNywzNDE1MiwzNjQ3MCwzODM1NywyNjQyNiwyNzMzMSwyODUyOCwzNTQzNywzNjU1NiwzOTI0Myw2Mzc1MCwyNjIzMSwyNzUxMiwzNjAyMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzOTc0MCw2Mzc1MSwyMTQ4MywyMjMxNywyMjg2MiwyNTU0MiwyNzEzMSwyOTY3NCwzMDc4OSwzMTQxOCwzMTQyOSwzMTk5OCwzMzkwOSwzNTIxNSwz''@;'; put 'put ''NjIxMSwzNjkxNywzODMxMiwyMTI0MywyMjM0MywzMDAyMywzMTU4NCwzMzc0MCwzNzQwNiw2Mzc1MiwyNzIyNCwyMDgxMSwyMTA2NywyMTEyNywyNTExOSwyNjg0MCwyNjk5NywzODU1MywyMDY3NywyMTE1NiwyMTIyMCwyNTAyNywyNjAyMCwyNjY4MSwyNzEzNSwyOTgyMiwzMTU2MywzMzQ2''@;'; put 'put ''NSwzMzc3MSwzNTI1MCwzNTY0MSwzNjgxNywzOTI0MSw2Mzc1MywyMDE3MCwyMjkzNSwyNTgxMCwyNjEyOSwyNzI3OCwyOTc0OCwzMTEwNSwzMTE2NSwzMzQ0OSwzNDk0MiwzNDk0MywzNTE2Nyw2Mzc1NCwzNzY3MCwyMDIzNSwyMTQ1MCwyNDYxMywyNTIwMSwyNzc2MiwzMjAyNiwzMjEwMiwy''@;'; put 'put ''MDEyMCwyMDgzNCwzMDY4NCwzMjk0MywyMDIyNSwyMDIzOCwyMDg1NCwyMDg2NCwyMTk4MCwyMjEyMCwyMjMzMSwyMjUyMiwyMjUyNCwyMjgwNCwyMjg1NSwyMjkzMSwyMzQ5MiwyMzY5NiwyMzgyMiwyNDA0OSwyNDE5MCwyNDUyNCwyNTIxNiwyNjA3MSwyNjA4MyxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNjM5OCwyNjM5OSwyNjQ2MiwyNjgyNywyNjgyMCwy''@;'; put 'put ''NzIzMSwyNzQ1MCwyNzY4MywyNzc3MywyNzc3OCwyODEwMywyOTU5MiwyOTczNCwyOTczOCwyOTgyNiwyOTg1OSwzMDA3MiwzMDA3OSwzMDg0OSwzMDk1OSwzMTA0MSwzMTA0NywzMTA0OCwzMTA5OCwzMTYzNywzMmUzLDMyMTg2LDMyNjQ4LDMyNzc0LDMyODEzLDMyOTA4LDM1MzUyLDM1NjYz''@;'; put 'put ''LDM1OTEyLDM2MjE1LDM3NjY1LDM3NjY4LDM5MTM4LDM5MjQ5LDM5NDM4LDM5NDM5LDM5NTI1LDQwNTk0LDMyMjAyLDIwMzQyLDIxNTEzLDI1MzI2LDI2NzA4LDM3MzI5LDIxOTMxLDIwNzk0LDYzNzU1LDYzNzU2LDIzMDY4LDI1MDYyLDYzNzU3LDI1Mjk1LDI1MzQzLDYzNzU4LDYzNzU5LDYz''@;'; put 'put ''NzYwLDYzNzYxLDYzNzYyLDYzNzYzLDM3MDI3LDYzNzY0LDYzNzY1LDYzNzY2LDYzNzY3LDYzNzY4LDM1NTgyLDYzNzY5LDYzNzcwLDYzNzcxLDYzNzcyLDI2MjYyLDYzNzczLDI5MDE0LDYzNzc0LDYzNzc1LDM4NjI3LDYzNzc2LDI1NDIzLDI1NDY2LDIxMzM1LDYzNzc3LDI2NTExLDI2OTc2''@;'; put 'put ''LDI4Mjc1LDYzNzc4LDMwMDA3LDYzNzc5LDYzNzgwLDYzNzgxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLDMyMDEzLDYzNzgyLDYzNzgzLDM0OTMwLDIyMjE4LDIzMDY0LDYzNzg0LDYzNzg1LDYzNzg2LDYzNzg3LDYzNzg4LDIwMDM1LDYzNzg5LDIwODM5LDIyODU2LDI2NjA4LDMyNzg0LDYzNzkwLDIyODk5LDI0MTgwLDI1NzU0LDMxMTc4LDI0NTY1LDI0Njg0''@;'; put 'put ''LDI1Mjg4LDI1NDY3LDIzNTI3LDIzNTExLDIxMTYyLDYzNzkxLDIyOTAwLDI0MzYxLDI0NTk0LDYzNzkyLDYzNzkzLDYzNzk0LDI5Nzg1LDYzNzk1LDYzNzk2LDYzNzk3LDYzNzk4LDYzNzk5LDYzODAwLDM5Mzc3LDYzODAxLDYzODAyLDYzODAzLDYzODA0LDYzODA1LDYzODA2LDYzODA3LDYz''@;'; put 'put ''ODA4LDYzODA5LDYzODEwLDYzODExLDI4NjExLDYzODEyLDYzODEzLDMzMjE1LDM2Nzg2LDI0ODE3LDYzODE0LDYzODE1LDMzMTI2LDYzODE2LDYzODE3LDIzNjE1LDYzODE4LDYzODE5LDYzODIwLDYzODIxLDYzODIyLDYzODIzLDYzODI0LDYzODI1LDIzMjczLDM1MzY1LDI2NDkxLDMyMDE2''@;'; put 'put ''LDYzODI2LDYzODI3LDYzODI4LDYzODI5LDYzODMwLDYzODMxLDMzMDIxLDYzODMyLDYzODMzLDIzNjEyLDI3ODc3LDIxMzExLDI4MzQ2LDIyODEwLDMzNTkwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIwMDI1LDIwMTUwLDIwMjk0LDIxOTM0LDIyMjk2LDIyNzI3LDI0NDA2LDI2MDM5LDI2MDg2LDI3MjY0LDI3NTczLDI4MjM3LDMwNzAxLDMxNDcxLDMxNzc0''@;'; put 'put ''LDMyMjIyLDM0NTA3LDM0OTYyLDM3MTcwLDM3NzIzLDI1Nzg3LDI4NjA2LDI5NTYyLDMwMTM2LDM2OTQ4LDIxODQ2LDIyMzQ5LDI1MDE4LDI1ODEyLDI2MzExLDI4MTI5LDI4MjUxLDI4NTI1LDI4NjAxLDMwMTkyLDMyODM1LDMzMjEzLDM0MTEzLDM1MjAzLDM1NTI3LDM1Njc0LDM3NjYzLDI3''@;'; put 'put ''Nzk1LDMwMDM1LDMxNTcyLDM2MzY3LDM2OTU3LDIxNzc2LDIyNTMwLDIyNjE2LDI0MTYyLDI1MDk1LDI1NzU4LDI2ODQ4LDMwMDcwLDMxOTU4LDM0NzM5LDQwNjgwLDIwMTk1LDIyNDA4LDIyMzgyLDIyODIzLDIzNTY1LDIzNzI5LDI0MTE4LDI0NDUzLDI1MTQwLDI1ODI1LDI5NjE5LDMzMjc0''@;'; put 'put ''LDM0OTU1LDM2MDI0LDM4NTM4LDQwNjY3LDIzNDI5LDI0NTAzLDI0NzU1LDIwNDk4LDIwOTkyLDIxMDQwLDIyMjk0LDIyNTgxLDIyNjE1LDIzNTY2LDIzNjQ4LDIzNzk4LDIzOTQ3LDI0MjMwLDI0NDY2LDI0NzY0LDI1MzYxLDI1NDgxLDI1NjIzLDI2NjkxLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI2ODczLDI3MzMwLDI4MTIwLDI4MTkzLDI4MzcyLDI4NjQ0''@;'; put 'put ''LDI5MTgyLDMwNDI4LDMwNTg1LDMxMTUzLDMxMjkxLDMzNzk2LDM1MjQxLDM2MDc3LDM2MzM5LDM2NDI0LDM2ODY3LDM2ODg0LDM2OTQ3LDM3MTE3LDM3NzA5LDM4NTE4LDM4ODc2LDI3NjAyLDI4Njc4LDI5MjcyLDI5MzQ2LDI5NTQ0LDMwNTYzLDMxMTY3LDMxNzE2LDMyNDExLDM1NzEyLDIy''@;'; put 'put ''Njk3LDI0Nzc1LDI1OTU4LDI2MTA5LDI2MzAyLDI3Nzg4LDI4OTU4LDI5MTI5LDM1OTMwLDM4OTMxLDIwMDc3LDMxMzYxLDIwMTg5LDIwOTA4LDIwOTQxLDIxMjA1LDIxNTE2LDI0OTk5LDI2NDgxLDI2NzA0LDI2ODQ3LDI3OTM0LDI4NTQwLDMwMTQwLDMwNjQzLDMxNDYxLDMzMDEyLDMzODkx''@;'; put 'put ''LDM3NTA5LDIwODI4LDI2MDA3LDI2NDYwLDI2NTE1LDMwMTY4LDMxNDMxLDMzNjUxLDYzODM0LDM1OTEwLDM2ODg3LDM4OTU3LDIzNjYzLDMzMjE2LDMzNDM0LDM2OTI5LDM2OTc1LDM3Mzg5LDI0NDcxLDIzOTY1LDI3MjI1LDI5MTI4LDMwMzMxLDMxNTYxLDM0Mjc2LDM1NTg4LDM3MTU5LDM5''@;'; put 'put ''NDcyLDIxODk1LDI1MDc4LDYzODM1LDMwMzEzLDMyNjQ1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLDM0MzY3LDM0NzQ2LDM1MDY0LDM3MDA3LDYzODM2LDI3OTMxLDI4ODg5LDI5NjYyLDMyMDk3LDMzODUzLDYzODM3LDM3MjI2LDM5NDA5LDYzODM4LDIwMDk4LDIxMzY1LDI3Mzk2LDI3NDEwLDI4NzM0LDI5MjExLDM0MzQ5LDQwNDc4LDIxMDY4LDM2NzcxLDIz''@;'; put 'put ''ODg4LDI1ODI5LDI1OTAwLDI3NDE0LDI4NjUxLDMxODExLDMyNDEyLDM0MjUzLDM1MTcyLDM1MjYxLDI1Mjg5LDMzMjQwLDM0ODQ3LDI0MjY2LDI2MzkxLDI4MDEwLDI5NDM2LDI5NzAxLDI5ODA3LDM0NjkwLDM3MDg2LDIwMzU4LDIzODIxLDI0NDgwLDMzODAyLDIwOTE5LDI1NTA0LDMwMDUz''@;'; put 'put ''LDIwMTQyLDIwNDg2LDIwODQxLDIwOTM3LDI2NzUzLDI3MTUzLDMxOTE4LDMxOTIxLDMxOTc1LDMzMzkxLDM1NTM4LDM2NjM1LDM3MzI3LDIwNDA2LDIwNzkxLDIxMjM3LDIxNTcwLDI0MzAwLDI0OTQyLDI1MTUwLDI2MDUzLDI3MzU0LDI4NjcwLDMxMDE4LDM0MjY4LDM0ODUxLDM4MzE3LDM5''@;'; put 'put ''NTIyLDM5NTMwLDQwNTk5LDQwNjU0LDIxMTQ3LDI2MzEwLDI3NTExLDI4NzAxLDMxMDE5LDM2NzA2LDM4NzIyLDI0OTc2LDI1MDg4LDI1ODkxLDI4NDUxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI5MDAxLDI5ODMzLDMyMjQ0LDMyODc5LDM0MDMwLDM2NjQ2LDM2ODk5LDM3NzA2LDIwOTI1LDIxMDE1LDIxMTU1LDI3OTE2LDI4ODcyLDM1MDEwLDI0MjY1LDI1''@;'; put 'put ''OTg2LDI3NTY2LDI4NjEwLDMxODA2LDI5NTU3LDIwMTk2LDIwMjc4LDIyMjY1LDYzODM5LDIzNzM4LDIzOTk0LDI0NjA0LDI5NjE4LDMxNTMzLDMyNjY2LDMyNzE4LDMyODM4LDM2ODk0LDM3NDI4LDM4NjQ2LDM4NzI4LDM4OTM2LDQwODAxLDIwMzYzLDI4NTgzLDMxMTUwLDM3MzAwLDM4NTgz''@;'; put 'put ''LDIxMjE0LDYzODQwLDI1NzM2LDI1Nzk2LDI3MzQ3LDI4NTEwLDI4Njk2LDI5MjAwLDMwNDM5LDMyNzY5LDM0MzEwLDM0Mzk2LDM2MzM1LDM2NjEzLDM4NzA2LDM5NzkxLDQwNDQyLDQwNTY1LDMwODYwLDMxMTAzLDMyMTYwLDMzNzM3LDM3NjM2LDQwNTc1LDQwNTk1LDM1NTQyLDIyNzUxLDI0''@;'; put 'put ''MzI0LDI2NDA3LDI4NzExLDI5OTAzLDMxODQwLDMyODk0LDIwNzY5LDI4NzEyLDI5MjgyLDMwOTIyLDM2MDM0LDM2MDU4LDM2MDg0LDM4NjQ3LDIwMTAyLDIwNjk4LDIzNTM0LDI0Mjc4LDI2MDA5LDI5MTM0LDMwMjc0LDMwNjM3LDMyODQyLDM0MDQ0LG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM2OTg4LDM5NzE5LDQwODQ1LDIyNzQ0LDIzMTA1LDIzNjUwLDI3''@;'; put 'put ''MTU1LDI4MTIyLDI4NDMxLDMwMjY3LDMyMDQ3LDMyMzExLDM0MDc4LDM1MTI4LDM3ODYwLDM4NDc1LDIxMTI5LDI2MDY2LDI2NjExLDI3MDYwLDI3OTY5LDI4MzE2LDI4Njg3LDI5NzA1LDI5NzkyLDMwMDQxLDMwMjQ0LDMwODI3LDM1NjI4LDM5MDA2LDIwODQ1LDI1MTM0LDM4NTIwLDIwMzc0''@;'; put 'put ''LDIwNTIzLDIzODMzLDI4MTM4LDMyMTg0LDM2NjUwLDI0NDU5LDI0OTAwLDI2NjQ3LDYzODQxLDM4NTM0LDIxMjAyLDMyOTA3LDIwOTU2LDIwOTQwLDI2OTc0LDMxMjYwLDMyMTkwLDMzNzc3LDM4NTE3LDIwNDQyLDIxMDMzLDIxNDAwLDIxNTE5LDIxNzc0LDIzNjUzLDI0NzQzLDI2NDQ2LDI2''@;'; put 'put ''NzkyLDI4MDEyLDI5MzEzLDI5NDMyLDI5NzAyLDI5ODI3LDYzODQyLDMwMTc4LDMxODUyLDMyNjMzLDMyNjk2LDMzNjczLDM1MDIzLDM1MDQxLDM3MzI0LDM3MzI4LDM4NjI2LDM5ODgxLDIxNTMzLDI4NTQyLDI5MTM2LDI5ODQ4LDM0Mjk4LDM2NTIyLDM4NTYzLDQwMDIzLDQwNjA3LDI2NTE5''@;'; put 'put ''LDI4MTA3LDI5NzQ3LDMzMjU2LDM4Njc4LDMwNzY0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLDMxNDM1LDMxNTIwLDMxODkwLDI1NzA1LDI5ODAyLDMwMTk0LDMwOTA4LDMwOTUyLDM5MzQwLDM5NzY0LDQwNjM1LDIzNTE4LDI0MTQ5LDI4NDQ4LDMzMTgwLDMzNzA3LDM3ZTMsMTk5NzUsMjEzMjUsMjMwODEsMjQwMTgsMjQzOTgsMjQ5MzAsMjU0MDUsMjYyMTcs''@;'; put 'put ''MjYzNjQsMjg0MTUsMjg0NTksMjg3NzEsMzA2MjIsMzM4MzYsMzQwNjcsMzQ4NzUsMzY2MjcsMzkyMzcsMzk5OTUsMjE3ODgsMjUyNzMsMjY0MTEsMjc4MTksMzM1NDUsMzUxNzgsMzg3NzgsMjAxMjksMjI5MTYsMjQ1MzYsMjQ1MzcsMjYzOTUsMzIxNzgsMzI1OTYsMzM0MjYsMzM1NzksMzM3''@;'; put 'put ''MjUsMzY2MzgsMzcwMTcsMjI0NzUsMjI5NjksMjMxODYsMjM1MDQsMjYxNTEsMjY1MjIsMjY3NTcsMjc1OTksMjkwMjgsMzI2MjksMzYwMjMsMzYwNjcsMzY5OTMsMzk3NDksMzMwMzIsMzU5NzgsMzg0NzYsMzk0ODgsNDA2MTMsMjMzOTEsMjc2NjcsMjk0NjcsMzA0NTAsMzA0MzEsMzM4MDQs''@;'; put 'put ''MjA5MDYsMzUyMTksMjA4MTMsMjA4ODUsMjExOTMsMjY4MjUsMjc3OTYsMzA0NjgsMzA0OTYsMzIxOTEsMzIyMzYsMzg3NTQsNDA2MjksMjgzNTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzQwNjUsMjA5MDEsMjE1MTcsMjE2MjksMjYxMjYsMjYyNjksMjY5MTksMjgzMTksMzAzOTksMzA2MDksMzM1NTksMzM5ODYsMzQ3MTksMzcyMjUsMzc1MjgsNDAxODAs''@;'; put 'put ''MzQ5NDYsMjAzOTgsMjA4ODIsMjEyMTUsMjI5ODIsMjQxMjUsMjQ5MTcsMjU3MjAsMjU3MjEsMjYyODYsMjY1NzYsMjcxNjksMjc1OTcsMjc2MTEsMjkyNzksMjkyODEsMjk3NjEsMzA1MjAsMzA2ODMsMzI3OTEsMzM0NjgsMzM1NDEsMzU1ODQsMzU2MjQsMzU5ODAsMjY0MDgsMjc3OTIsMjky''@;'; put 'put ''ODcsMzA0NDYsMzA1NjYsMzEzMDIsNDAzNjEsMjc1MTksMjc3OTQsMjI4MTgsMjY0MDYsMzM5NDUsMjEzNTksMjI2NzUsMjI5MzcsMjQyODcsMjU1NTEsMjYxNjQsMjY0ODMsMjgyMTgsMjk0ODMsMzE0NDcsMzM0OTUsMzc2NzIsMjEyMDksMjQwNDMsMjUwMDYsMjUwMzUsMjUwOTgsMjUyODcs''@;'; put 'put ''MjU3NzEsMjYwODAsMjY5NjksMjc0OTQsMjc1OTUsMjg5NjEsMjk2ODcsMzAwNDUsMzIzMjYsMzMzMTAsMzM1MzgsMzQxNTQsMzU0OTEsMzYwMzEsMzg2OTUsNDAyODksMjI2OTYsNDA2NjQsMjA0OTcsMjEwMDYsMjE1NjMsMjE4MzksMjU5OTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjc3NjYsMzIwMTAsMzIwMTEsMzI4NjIsMzQ0NDIsMzgyNzIsMzg2Mzks''@;'; put 'put ''MjEyNDcsMjc3OTcsMjkyODksMjE2MTksMjMxOTQsMjM2MTQsMjM4ODMsMjQzOTYsMjQ0OTQsMjY0MTAsMjY4MDYsMjY5NzksMjgyMjAsMjgyMjgsMzA0NzMsMzE4NTksMzI2NTQsMzQxODMsMzU1OTgsMzY4NTUsMzg3NTMsNDA2OTIsMjM3MzUsMjQ3NTgsMjQ4NDUsMjUwMDMsMjU5MzUsMjYx''@;'; put 'put ''MDcsMjYxMDgsMjc2NjUsMjc4ODcsMjk1OTksMjk2NDEsMzIyMjUsMzgyOTIsMjM0OTQsMzQ1ODgsMzU2MDAsMjEwODUsMjEzMzgsMjUyOTMsMjU2MTUsMjU3NzgsMjY0MjAsMjcxOTIsMjc4NTAsMjk2MzIsMjk4NTQsMzE2MzYsMzE4OTMsMzIyODMsMzMxNjIsMzMzMzQsMzQxODAsMzY4NDMs''@;'; put 'put ''Mzg2NDksMzkzNjEsMjAyNzYsMjEzMjIsMjE0NTMsMjE0NjcsMjUyOTIsMjU2NDQsMjU4NTYsMjYwMDEsMjcwNzUsMjc4ODYsMjg1MDQsMjk2NzcsMzAwMzYsMzAyNDIsMzA0MzYsMzA0NjAsMzA5MjgsMzA5NzEsMzEwMjAsMzIwNzAsMzMzMjQsMzQ3ODQsMzY4MjAsMzg5MzAsMzkxNTEsMjEx''@;'; put 'put ''ODcsMjUzMDAsMjU3NjUsMjgxOTYsMjg0OTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsMzAzMzIsMzYyOTksMzcyOTcsMzc0NzQsMzk2NjIsMzk3NDcsMjA1MTUsMjA2MjEsMjIzNDYsMjI5NTIsMjM1OTIsMjQxMzUsMjQ0MzksMjUxNTEsMjU5MTgsMjYwNDEsMjYwNDksMjYxMjEsMjY1MDcsMjcwMzYsMjgzNTQsMzA5MTcsMzIwMzMsMzI5MzgsMzMxNTIsMzMz''@;'; put 'put ''MjMsMzM0NTksMzM5NTMsMzQ0NDQsMzUzNzAsMzU2MDcsMzcwMzAsMzg0NTAsNDA4NDgsMjA0OTMsMjA0NjcsNjM4NDMsMjI1MjEsMjQ0NzIsMjUzMDgsMjU0OTAsMjY0NzksMjgyMjcsMjg5NTMsMzA0MDMsMzI5NzIsMzI5ODYsMzUwNjAsMzUwNjEsMzUwOTcsMzYwNjQsMzY2NDksMzcxOTcs''@;'; put 'put ''Mzg1MDYsMjAyNzEsMjAzMzYsMjQwOTEsMjY1NzUsMjY2NTgsMzAzMzMsMzAzMzQsMzk3NDgsMjQxNjEsMjcxNDYsMjkwMzMsMjkxNDAsMzAwNTgsNjM4NDQsMzIzMjEsMzQxMTUsMzQyODEsMzkxMzIsMjAyNDAsMzE1NjcsMzI2MjQsMzgzMDksMjA5NjEsMjQwNzAsMjY4MDUsMjc3MTAsMjc3''@;'; put 'put ''MjYsMjc4NjcsMjkzNTksMzE2ODQsMzM1MzksMjc4NjEsMjk3NTQsMjA3MzEsMjExMjgsMjI3MjEsMjU4MTYsMjcyODcsMjk4NjMsMzAyOTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzA4ODcsMzQzMjcsMzgzNzAsMzg3MTMsNjM4NDUsMjEzNDIsMjQzMjEsMzU3MjIsMzY3NzYsMzY3ODMsMzcwMDIsMjEwMjksMzA2MjksNDAwMDksNDA3MTIsMTk5OTMsMjA0''@;'; put 'put ''ODIsMjA4NTMsMjM2NDMsMjQxODMsMjYxNDIsMjYxNzAsMjY1NjQsMjY4MjEsMjg4NTEsMjk5NTMsMzAxNDksMzExNzcsMzE0NTMsMzY2NDcsMzkyMDAsMzk0MzIsMjA0NDUsMjI1NjEsMjI1NzcsMjM1NDIsMjYyMjIsMjc0OTMsMjc5MjEsMjgyODIsMjg1NDEsMjk2NjgsMjk5OTUsMzM3Njks''@;'; put 'put ''MzUwMzYsMzUwOTEsMzU2NzYsMzY2MjgsMjAyMzksMjA2OTMsMjEyNjQsMjEzNDAsMjM0NDMsMjQ0ODksMjYzODEsMzExMTksMzMxNDUsMzM1ODMsMzQwNjgsMzUwNzksMzUyMDYsMzY2NjUsMzY2NjcsMzkzMzMsMzk5NTQsMjY0MTIsMjAwODYsMjA0NzIsMjI4NTcsMjM1NTMsMjM3OTEsMjM3''@;'; put 'put ''OTIsMjU0NDcsMjY4MzQsMjg5MjUsMjkwOTAsMjk3MzksMzIyOTksMzQwMjgsMzQ1NjIsMzY4OTgsMzc1ODYsNDAxNzksMTk5ODEsMjAxODQsMjA0NjMsMjA2MTMsMjEwNzgsMjExMDMsMjE1NDIsMjE2NDgsMjI0OTYsMjI4MjcsMjMxNDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjMzODYsMjM0MTMsMjM1MDAsMjQyMjAsNjM4NDYsMjUyMDYsMjU5NzUsMjYw''@;'; put 'put ''MjMsMjgwMTQsMjgzMjUsMjkyMzgsMzE1MjYsMzE4MDcsMzI1NjYsMzMxMDQsMzMxMDUsMzMxNzgsMzMzNDQsMzM0MzMsMzM3MDUsMzUzMzEsMzZlMywzNjA3MCwzNjA5MSwzNjIxMiwzNjI4MiwzNzA5NiwzNzM0MCwzODQyOCwzODQ2OCwzOTM4NSw0MDE2NywyMTI3MSwyMDk5OCwyMTU0NSwy''@;'; put 'put ''MjEzMiwyMjcwNywyMjg2OCwyMjg5NCwyNDU3NSwyNDk5NiwyNTE5OCwyNjEyOCwyNzc3NCwyODk1NCwzMDQwNiwzMTg4MSwzMTk2NiwzMjAyNywzMzQ1MiwzNjAzMywzODY0MCw2Mzg0NywyMDMxNSwyNDM0MywyNDQ0NywyNTI4MiwyMzg0OSwyNjM3OSwyNjg0MiwzMDg0NCwzMjMyMyw0MDMw''@;'; put 'put ''MCwxOTk4OSwyMDYzMywyMTI2OSwyMTI5MCwyMTMyOSwyMjkxNSwyMzEzOCwyNDE5OSwyNDc1NCwyNDk3MCwyNTE2MSwyNTIwOSwyNmUzLDI2NTAzLDI3MDQ3LDI3NjA0LDI3NjA2LDI3NjA3LDI3NjA4LDI3ODMyLDYzODQ4LDI5NzQ5LDMwMjAyLDMwNzM4LDMwODY1LDMxMTg5LDMxMTkyLDMx''@;'; put 'put ''ODc1LDMyMjAzLDMyNzM3LDMyOTMzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLDMzMDg2LDMzMjE4LDMzNzc4LDM0NTg2LDM1MDQ4LDM1NTEzLDM1NjkyLDM2MDI3LDM3MTQ1LDM4NzUwLDM5MTMxLDQwNzYzLDIyMTg4LDIzMzM4LDI0NDI4LDI1OTk2LDI3MzE1LDI3NTY3LDI3OTk2LDI4NjU3LDI4NjkzLDI5Mjc3LDI5NjEzLDM2MDA3LDM2MDUxLDM4OTcxLDI0''@;'; put 'put ''OTc3LDI3NzAzLDMyODU2LDM5NDI1LDIwMDQ1LDIwMTA3LDIwMTIzLDIwMTgxLDIwMjgyLDIwMjg0LDIwMzUxLDIwNDQ3LDIwNzM1LDIxNDkwLDIxNDk2LDIxNzY2LDIxOTg3LDIyMjM1LDIyNzYzLDIyODgyLDIzMDU3LDIzNTMxLDIzNTQ2LDIzNTU2LDI0MDUxLDI0MTA3LDI0NDczLDI0NjA1''@;'; put 'put ''LDI1NDQ4LDI2MDEyLDI2MDMxLDI2NjE0LDI2NjE5LDI2Nzk3LDI3NTE1LDI3ODAxLDI3ODYzLDI4MTk1LDI4NjgxLDI5NTA5LDMwNzIyLDMxMDM4LDMxMDQwLDMxMDcyLDMxMTY5LDMxNzIxLDMyMDIzLDMyMTE0LDMyOTAyLDMzMjkzLDMzNjc4LDM0MDAxLDM0NTAzLDM1MDM5LDM1NDA4LDM1''@;'; put 'put ''NDIyLDM1NjEzLDM2MDYwLDM2MTk4LDM2NzgxLDM3MDM0LDM5MTY0LDM5MzkxLDQwNjA1LDIxMDY2LDYzODQ5LDI2Mzg4LDYzODUwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIwNjMyLDIxMDM0LDIzNjY1LDI1OTU1LDI3NzMzLDI5NjQyLDI5OTg3LDMwMTA5LDMxNjM5LDMzOTQ4LDM3MjQwLDM4NzA0LDIwMDg3LDI1NzQ2LDI3NTc4LDI5MDIyLDM0MjE3LDE5''@;'; put 'put ''OTc3LDYzODUxLDI2NDQxLDI2ODYyLDI4MTgzLDMzNDM5LDM0MDcyLDM0OTIzLDI1NTkxLDI4NTQ1LDM3Mzk0LDM5MDg3LDE5OTc4LDIwNjYzLDIwNjg3LDIwNzY3LDIxODMwLDIxOTMwLDIyMDM5LDIzMzYwLDIzNTc3LDIzNzc2LDI0MTIwLDI0MjAyLDI0MjI0LDI0MjU4LDI0ODE5LDI2NzA1''@;'; put 'put ''LDI3MjMzLDI4MjQ4LDI5MjQ1LDI5MjQ4LDI5Mzc2LDMwNDU2LDMxMDc3LDMxNjY1LDMyNzI0LDM1MDU5LDM1MzE2LDM1NDQzLDM1OTM3LDM2MDYyLDM4Njg0LDIyNjIyLDI5ODg1LDM2MDkzLDIxOTU5LDYzODUyLDMxMzI5LDMyMDM0LDMzMzk0LDI5Mjk4LDI5OTgzLDI5OTg5LDYzODUzLDMx''@;'; put 'put ''NTEzLDIyNjYxLDIyNzc5LDIzOTk2LDI0MjA3LDI0MjQ2LDI0NDY0LDI0NjYxLDI1MjM0LDI1NDcxLDI1OTMzLDI2MjU3LDI2MzI5LDI2MzYwLDI2NjQ2LDI2ODY2LDI5MzEyLDI5NzkwLDMxNTk4LDMyMTEwLDMyMjE0LDMyNjI2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMyOTk3LDMzMjk4LDM0MjIzLDM1MTk5LDM1NDc1LDM2ODkzLDM3NjA0LDQwNjUzLDQw''@;'; put 'put ''NzM2LDIyODA1LDIyODkzLDI0MTA5LDI0Nzk2LDI2MTMyLDI2MjI3LDI2NTEyLDI3NzI4LDI4MTAxLDI4NTExLDMwNzA3LDMwODg5LDMzOTkwLDM3MzIzLDM3Njc1LDIwMTg1LDIwNjgyLDIwODA4LDIxODkyLDIzMzA3LDIzNDU5LDI1MTU5LDI1OTgyLDI2MDU5LDI4MjEwLDI5MDUzLDI5Njk3''@;'; put 'put ''LDI5NzY0LDI5ODMxLDI5ODg3LDMwMzE2LDMxMTQ2LDMyMjE4LDMyMzQxLDMyNjgwLDMzMTQ2LDMzMjAzLDMzMzM3LDM0MzMwLDM0Nzk2LDM1NDQ1LDM2MzIzLDM2OTg0LDM3NTIxLDM3OTI1LDM5MjQ1LDM5ODU0LDIxMzUyLDIzNjMzLDI2OTY0LDI3ODQ0LDI3OTQ1LDI4MjAzLDMzMjkyLDM0''@;'; put 'put ''MjAzLDM1MTMxLDM1MzczLDM1NDk4LDM4NjM0LDQwODA3LDIxMDg5LDI2Mjk3LDI3NTcwLDMyNDA2LDM0ODE0LDM2MTA5LDM4Mjc1LDM4NDkzLDI1ODg1LDI4MDQxLDI5MTY2LDYzODU0LDIyNDc4LDIyOTk1LDIzNDY4LDI0NjE1LDI0ODI2LDI1MTA0LDI2MTQzLDI2MjA3LDI5NDgxLDI5Njg5''@;'; put 'put ''LDMwNDI3LDMwNDY1LDMxNTk2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLDMyODU0LDMyODgyLDMzMTI1LDM1NDg4LDM3MjY2LDE5OTkwLDIxMjE4LDI3NTA2LDI3OTI3LDMxMjM3LDMxNTQ1LDMyMDQ4LDYzODU1LDM2MDE2LDIxNDg0LDIyMDYzLDIyNjA5LDIzNDc3LDIzNTY3LDIzNTY5LDI0MDM0LDI1MTUyLDI1NDc1LDI1NjIwLDI2MTU3LDI2ODAzLDI3ODM2''@;'; put 'put ''LDI4MDQwLDI4MzM1LDI4NzAzLDI4ODM2LDI5MTM4LDI5OTkwLDMwMDk1LDMwMDk0LDMwMjMzLDMxNTA1LDMxNzEyLDMxNzg3LDMyMDMyLDMyMDU3LDM0MDkyLDM0MTU3LDM0MzExLDM1MzgwLDM2ODc3LDM2OTYxLDM3MDQ1LDM3NTU5LDM4OTAyLDM5NDc5LDIwNDM5LDIzNjYwLDI2NDYzLDI4''@;'; put 'put ''MDQ5LDMxOTAzLDMyMzk2LDM1NjA2LDM2MTE4LDM2ODk1LDIzNDAzLDI0MDYxLDI1NjEzLDMzOTg0LDM2OTU2LDM5MTM3LDI5NTc1LDIzNDM1LDI0NzMwLDI2NDk0LDI4MTI2LDM1MzU5LDM1NDk0LDM2ODY1LDM4OTI0LDIxMDQ3LDYzODU2LDI4NzUzLDMwODYyLDM3NzgyLDM0OTI4LDM3MzM1''@;'; put 'put ''LDIwNDYyLDIxNDYzLDIyMDEzLDIyMjM0LDIyNDAyLDIyNzgxLDIzMjM0LDIzNDMyLDIzNzIzLDIzNzQ0LDI0MTAxLDI0ODMzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI1MTAxLDI1MTYzLDI1NDgwLDI1NjI4LDI1OTEwLDI1OTc2LDI3MTkzLDI3NTMwLDI3NzAwLDI3OTI5LDI4NDY1LDI5MTU5LDI5NDE3LDI5NTYwLDI5NzAzLDI5ODc0LDMwMjQ2LDMwNTYx''@;'; put 'put ''LDMxMTY4LDMxMzE5LDMxNDY2LDMxOTI5LDMyMTQzLDMyMTcyLDMyMzUzLDMyNjcwLDMzMDY1LDMzNTg1LDMzOTM2LDM0MDEwLDM0MjgyLDM0OTY2LDM1NTA0LDM1NzI4LDM2NjY0LDM2OTMwLDM2OTk1LDM3MjI4LDM3NTI2LDM3NTYxLDM4NTM5LDM4NTY3LDM4NTY4LDM4NjE0LDM4NjU2LDM4''@;'; put 'put ''OTIwLDM5MzE4LDM5NjM1LDM5NzA2LDIxNDYwLDIyNjU0LDIyODA5LDIzNDA4LDIzNDg3LDI4MTEzLDI4NTA2LDI5MDg3LDI5NzI5LDI5ODgxLDMyOTAxLDMzNzg5LDI0MDMzLDI0NDU1LDI0NDkwLDI0NjQyLDI2MDkyLDI2NjQyLDI2OTkxLDI3MjE5LDI3NTI5LDI3OTU3LDI4MTQ3LDI5NjY3''@;'; put 'put ''LDMwNDYyLDMwNjM2LDMxNTY1LDMyMDIwLDMzMDU5LDMzMzA4LDMzNjAwLDM0MDM2LDM0MTQ3LDM1NDI2LDM1NTI0LDM3MjU1LDM3NjYyLDM4OTE4LDM5MzQ4LDI1MTAwLDM0ODk5LDM2ODQ4LDM3NDc3LDIzODE1LDIzODQ3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIzOTEzLDI5NzkxLDMzMTgxLDM0NjY0LDI4NjI5LDI1MzQyLDMyNzIyLDM1MTI2LDM1MTg2''@;'; put 'put ''LDE5OTk4LDIwMDU2LDIwNzExLDIxMjEzLDIxMzE5LDI1MjE1LDI2MTE5LDMyMzYxLDM0ODIxLDM4NDk0LDIwMzY1LDIxMjczLDIyMDcwLDIyOTg3LDIzMjA0LDIzNjA4LDIzNjMwLDIzNjI5LDI0MDY2LDI0MzM3LDI0NjQzLDI2MDQ1LDI2MTU5LDI2MTc4LDI2NTU4LDI2NjEyLDI5NDY4LDMw''@;'; put 'put ''NjkwLDMxMDM0LDMyNzA5LDMzOTQwLDMzOTk3LDM1MjIyLDM1NDMwLDM1NDMzLDM1NTUzLDM1OTI1LDM1OTYyLDIyNTE2LDIzNTA4LDI0MzM1LDI0Njg3LDI1MzI1LDI2ODkzLDI3NTQyLDI4MjUyLDI5MDYwLDMxNjk4LDM0NjQ1LDM1NjcyLDM2NjA2LDM5MTM1LDM5MTY2LDIwMjgwLDIwMzUz''@;'; put 'put ''LDIwNDQ5LDIxNjI3LDIzMDcyLDIzNDgwLDI0ODkyLDI2MDMyLDI2MjE2LDI5MTgwLDMwMDAzLDMxMDcwLDMyMDUxLDMzMTAyLDMzMjUxLDMzNjg4LDM0MjE4LDM0MjU0LDM0NTYzLDM1MzM4LDM2NTIzLDM2NzYzLDYzODU3LDM2ODA1LDIyODMzLDIzNDYwLDIzNTI2LDI0NzEzLDIzNTI5LDIz''@;'; put 'put ''NTYzLDI0NTE1LDI3Nzc3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LDYzODU4LDI4MTQ1LDI4NjgzLDI5OTc4LDMzNDU1LDM1NTc0LDIwMTYwLDIxMzEzLDYzODU5LDM4NjE3LDI3NjYzLDIwMTI2LDIwNDIwLDIwODE4LDIxODU0LDIzMDc3LDIzNzg0LDI1MTA1LDI5MjczLDMzNDY5LDMzNzA2LDM0NTU4LDM0OTA1LDM1MzU3LDM4NDYzLDM4NTk3LDM5MTg3LDQw''@;'; put 'put ''MjAxLDQwMjg1LDIyNTM4LDIzNzMxLDIzOTk3LDI0MTMyLDI0ODAxLDI0ODUzLDI1NTY5LDI3MTM4LDI4MTk3LDM3MTIyLDM3NzE2LDM4OTkwLDM5OTUyLDQwODIzLDIzNDMzLDIzNzM2LDI1MzUzLDI2MTkxLDI2Njk2LDMwNTI0LDM4NTkzLDM4Nzk3LDM4OTk2LDM5ODM5LDI2MDE3LDM1NTg1''@;'; put 'put ''LDM2NTU1LDM4MzMyLDIxODEzLDIzNzIxLDI0MDIyLDI0MjQ1LDI2MjYzLDMwMjg0LDMzNzgwLDM4MzQzLDIyNzM5LDI1Mjc2LDI5MzkwLDQwMjMyLDIwMjA4LDIyODMwLDI0NTkxLDI2MTcxLDI3NTIzLDMxMjA3LDQwMjMwLDIxMzk1LDIxNjk2LDIyNDY3LDIzODMwLDI0ODU5LDI2MzI2LDI4''@;'; put 'put ''MDc5LDMwODYxLDMzNDA2LDM4NTUyLDM4NzI0LDIxMzgwLDI1MjEyLDI1NDk0LDI4MDgyLDMyMjY2LDMzMDk5LDM4OTg5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI3Mzg3LDMyNTg4LDQwMzY3LDQwNDc0LDIwMDYzLDIwNTM5LDIwOTE4LDIyODEyLDI0ODI1LDI1NTkwLDI2OTI4LDI5MjQyLDMyODIyLDYzODYwLDM3MzI2LDI0MzY5LDYzODYxLDYzODYyLDMy''@;'; put 'put ''MDA0LDMzNTA5LDMzOTAzLDMzOTc5LDM0Mjc3LDM2NDkzLDYzODYzLDIwMzM1LDYzODY0LDYzODY1LDIyNzU2LDIzMzYzLDI0NjY1LDI1NTYyLDI1ODgwLDI1OTY1LDI2MjY0LDYzODY2LDI2OTU0LDI3MTcxLDI3OTE1LDI4NjczLDI5MDM2LDMwMTYyLDMwMjIxLDMxMTU1LDMxMzQ0LDYzODY3''@;'; put 'put ''LDMyNjUwLDYzODY4LDM1MTQwLDYzODY5LDM1NzMxLDM3MzEyLDM4NTI1LDYzODcwLDM5MTc4LDIyMjc2LDI0NDgxLDI2MDQ0LDI4NDE3LDMwMjA4LDMxMTQyLDM1NDg2LDM5MzQxLDM5NzcwLDQwODEyLDIwNzQwLDI1MDE0LDI1MjMzLDI3Mjc3LDMzMjIyLDIwNTQ3LDIyNTc2LDI0NDIyLDI4''@;'; put 'put ''OTM3LDM1MzI4LDM1NTc4LDIzNDIwLDM0MzI2LDIwNDc0LDIwNzk2LDIyMTk2LDIyODUyLDI1NTEzLDI4MTUzLDIzOTc4LDI2OTg5LDIwODcwLDIwMTA0LDIwMzEzLDYzODcxLDYzODcyLDYzODczLDIyOTE0LDYzODc0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDYzODc1LDI3NDg3LDI3NzQxLDYzODc2LDI5ODc3LDMwOTk4LDYzODc3LDMzMjg3LDMzMzQ5LDMz''@;'; put 'put ''NTkzLDM2NjcxLDM2NzAxLDYzODc4LDM5MTkyLDYzODc5LDYzODgwLDYzODgxLDIwMTM0LDYzODgyLDIyNDk1LDI0NDQxLDI2MTMxLDYzODgzLDYzODg0LDMwMTIzLDMyMzc3LDM1Njk1LDYzODg1LDM2ODcwLDM5NTE1LDIyMTgxLDIyNTY3LDIzMDMyLDIzMDcxLDIzNDc2LDYzODg2LDI0MzEw''@;'; put 'put ''LDYzODg3LDYzODg4LDI1NDI0LDI1NDAzLDYzODg5LDI2OTQxLDI3NzgzLDI3ODM5LDI4MDQ2LDI4MDUxLDI4MTQ5LDI4NDM2LDYzODkwLDI4ODk1LDI4OTgyLDI5MDE3LDYzODkxLDI5MTIzLDI5MTQxLDYzODkyLDMwNzk5LDMwODMxLDYzODkzLDMxNjA1LDMyMjI3LDYzODk0LDMyMzAzLDYz''@;'; put 'put ''ODk1LDM0ODkzLDM2NTc1LDYzODk2LDYzODk3LDYzODk4LDM3NDY3LDYzODk5LDQwMTgyLDYzOTAwLDYzOTAxLDYzOTAyLDI0NzA5LDI4MDM3LDYzOTAzLDI5MTA1LDYzOTA0LDYzOTA1LDM4MzIxLDIxNDIxLDYzOTA2LDYzOTA3LDYzOTA4LDI2NTc5LDYzOTA5LDI4ODE0LDI4OTc2LDI5NzQ0''@;'; put 'put ''LDMzMzk4LDMzNDkwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDYz''@;'; put 'put ''OTEwLDM4MzMxLDM5NjUzLDQwNTczLDI2MzA4LDYzOTExLDI5MTIxLDMzODY1LDYzOTEyLDYzOTEzLDIyNjAzLDYzOTE0LDYzOTE1LDIzOTkyLDI0NDMzLDYzOTE2LDI2MTQ0LDI2MjU0LDI3MDAxLDI3MDU0LDI3NzA0LDI3ODkxLDI4MjE0LDI4NDgxLDI4NjM0LDI4Njk5LDI4NzE5LDI5MDA4''@;'; put 'put ''LDI5MTUxLDI5NTUyLDYzOTE3LDI5Nzg3LDYzOTE4LDI5OTA4LDMwNDA4LDMxMzEwLDMyNDAzLDYzOTE5LDYzOTIwLDMzNTIxLDM1NDI0LDM2ODE0LDYzOTIxLDM3NzA0LDYzOTIyLDM4NjgxLDYzOTIzLDYzOTI0LDIwMDM0LDIwNTIyLDYzOTI1LDIxZTMsMjE0NzMsMjYzNTUsMjc3NTcsMjg2''@;'; put 'put ''MTgsMjk0NTAsMzA1OTEsMzEzMzAsMzM0NTQsMzQyNjksMzQzMDYsNjM5MjYsMzUwMjgsMzU0MjcsMzU3MDksMzU5NDcsNjM5MjcsMzc1NTUsNjM5MjgsMzg2NzUsMzg5MjgsMjAxMTYsMjAyMzcsMjA0MjUsMjA2NTgsMjEzMjAsMjE1NjYsMjE1NTUsMjE5NzgsMjI2MjYsMjI3MTQsMjI4ODcs''@;'; put 'put ''MjMwNjcsMjM1MjQsMjQ3MzUsNjM5MjksMjUwMzQsMjU5NDIsMjYxMTEsMjYyMTIsMjY3OTEsMjc3MzgsMjg1OTUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjg4NzksMjkxMDAsMjk1MjIsMzE2MTMsMzQ1NjgsMzU0OTIsMzk5ODYsNDA3MTEsMjM2MjcsMjc3NzksMjk1MDgsMjk1NzcsMzc0MzQsMjgzMzEsMjk3OTcsMzAyMzksMzEzMzcsMzIyNzcsMzQzMTQs''@;'; put 'put ''MjA4MDAsMjI3MjUsMjU3OTMsMjk5MzQsMjk5NzMsMzAzMjAsMzI3MDUsMzcwMTMsMzg2MDUsMzkyNTIsMjgxOTgsMjk5MjYsMzE0MDEsMzE0MDIsMzMyNTMsMzQ1MjEsMzQ2ODAsMzUzNTUsMjMxMTMsMjM0MzYsMjM0NTEsMjY3ODUsMjY4ODAsMjgwMDMsMjk2MDksMjk3MTUsMjk3NDAsMzA4''@;'; put 'put ''NzEsMzIyMzMsMzI3NDcsMzMwNDgsMzMxMDksMzM2OTQsMzU5MTYsMzg0NDYsMzg5MjksMjYzNTIsMjQ0NDgsMjYxMDYsMjY1MDUsMjc3NTQsMjk1NzksMjA1MjUsMjMwNDMsMjc0OTgsMzA3MDIsMjI4MDYsMjM5MTYsMjQwMTMsMjk0NzcsMzAwMzEsNjM5MzAsNjM5MzEsMjA3MDksMjA5ODUs''@;'; put 'put ''MjI1NzUsMjI4MjksMjI5MzQsMjMwMDIsMjM1MjUsNjM5MzIsNjM5MzMsMjM5NzAsMjUzMDMsMjU2MjIsMjU3NDcsMjU4NTQsNjM5MzQsMjYzMzIsNjM5MzUsMjcyMDgsNjM5MzYsMjkxODMsMjk3OTYsNjM5MzcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzEzNjgsMzE0MDcsMzIzMjcsMzIzNTAsMzI3NjgsMzMxMzYsNjM5MzgsMzQ3OTksMzUyMDEsMzU2MTYs''@;'; put 'put ''MzY5NTMsNjM5MzksMzY5OTIsMzkyNTAsMjQ5NTgsMjc0NDIsMjgwMjAsMzIyODcsMzUxMDksMzY3ODUsMjA0MzMsMjA2NTMsMjA4ODcsMjExOTEsMjI0NzEsMjI2NjUsMjM0ODEsMjQyNDgsMjQ4OTgsMjcwMjksMjgwNDQsMjgyNjMsMjgzNDIsMjkwNzYsMjk3OTQsMjk5OTIsMjk5OTYsMzI4''@;'; put 'put ''ODMsMzM1OTIsMzM5OTMsMzYzNjIsMzc3ODAsMzc4NTQsNjM5NDAsMjAxMTAsMjAzMDUsMjA1OTgsMjA3NzgsMjE0NDgsMjE0NTEsMjE0OTEsMjM0MzEsMjM1MDcsMjM1ODgsMjQ4NTgsMjQ5NjIsMjYxMDAsMjkyNzUsMjk1OTEsMjk3NjAsMzA0MDIsMzEwNTYsMzExMjEsMzExNjEsMzIwMDYs''@;'; put 'put ''MzI3MDEsMzM0MTksMzQyNjEsMzQzOTgsMzY4MDIsMzY5MzUsMzcxMDksMzczNTQsMzg1MzMsMzg2MzIsMzg2MzMsMjEyMDYsMjQ0MjMsMjYwOTMsMjYxNjEsMjY2NzEsMjkwMjAsMzEyODYsMzcwNTcsMzg5MjIsMjAxMTMsNjM5NDEsMjcyMTgsMjc1NTAsMjg1NjAsMjkwNjUsMzI3OTIsMzM0''@;'; put 'put ''NjQsMzQxMzEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzY5Mzks''@;'; put 'put ''Mzg1NDksMzg2NDIsMzg5MDcsMzQwNzQsMzk3MjksMjAxMTIsMjkwNjYsMzg1OTYsMjA4MDMsMjE0MDcsMjE3MjksMjIyOTEsMjIyOTAsMjI0MzUsMjMxOTUsMjMyMzYsMjM0OTEsMjQ2MTYsMjQ4OTUsMjU1ODgsMjc3ODEsMjc5NjEsMjgyNzQsMjgzMDQsMjkyMzIsMjk1MDMsMjk3ODMsMzM0''@;'; put 'put ''ODksMzQ5NDUsMzY2NzcsMzY5NjAsNjM5NDIsMzg0OTgsMzllMyw0MDIxOSwyNjM3NiwzNjIzNCwzNzQ3MCwyMDMwMSwyMDU1MywyMDcwMiwyMTM2MSwyMjI4NSwyMjk5NiwyMzA0MSwyMzU2MSwyNDk0NCwyNjI1NiwyODIwNSwyOTIzNCwyOTc3MSwzMjIzOSwzMjk2MywzMzgwNiwzMzg5NCwz''@;'; put 'put ''NDExMSwzNDY1NSwzNDkwNywzNTA5NiwzNTU4NiwzNjk0OSwzODg1OSwzOTc1OSwyMDA4MywyMDM2OSwyMDc1NCwyMDg0Miw2Mzk0MywyMTgwNywyMTkyOSwyMzQxOCwyMzQ2MSwyNDE4OCwyNDE4OSwyNDI1NCwyNDczNiwyNDc5OSwyNDg0MCwyNDg0MSwyNTU0MCwyNTkxMiwyNjM3Nyw2Mzk0''@;'; put 'put ''NCwyNjU4MCwyNjU4Niw2Mzk0NSwyNjk3NywyNjk3OCwyNzgzMywyNzk0Myw2Mzk0NiwyODIxNiw2Mzk0NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyODY0MSwyOTQ5NCwyOTQ5NSw2Mzk0OCwyOTc4OCwzMDAwMSw2Mzk0OSwzMDI5MCw2Mzk1MCw2Mzk1MSwzMjE3MywzMzI3OCwzMzg0OCwzNTAyOSwzNTQ4MCwzNTU0NywzNTU2NSwzNjQwMCwzNjQxOCwzNjkz''@;'; put 'put ''OCwzNjkyNiwzNjk4NiwzNzE5MywzNzMyMSwzNzc0Miw2Mzk1Miw2Mzk1MywyMjUzNyw2Mzk1NCwyNzYwMywzMjkwNSwzMjk0Niw2Mzk1NSw2Mzk1NiwyMDgwMSwyMjg5MSwyMzYwOSw2Mzk1Nyw2Mzk1OCwyODUxNiwyOTYwNywzMjk5NiwzNjEwMyw2Mzk1OSwzNzM5OSwzODI4Nyw2Mzk2MCw2''@;'; put 'put ''Mzk2MSw2Mzk2Miw2Mzk2MywzMjg5NSwyNTEwMiwyODcwMCwzMjEwNCwzNDcwMSw2Mzk2NCwyMjQzMiwyNDY4MSwyNDkwMywyNzU3NSwzNTUxOCwzNzUwNCwzODU3NywyMDA1NywyMTUzNSwyODEzOSwzNDA5MywzODUxMiwzODg5OSwzOTE1MCwyNTU1OCwyNzg3NSwzNzAwOSwyMDk1NywyNTAz''@;'; put 'put ''MywzMzIxMCw0MDQ0MSwyMDM4MSwyMDUwNiwyMDczNiwyMzQ1MiwyNDg0NywyNTA4NywyNTgzNiwyNjg4NSwyNzU4OSwzMDA5NywzMDY5MSwzMjY4MSwzMzM4MCwzNDE5MSwzNDgxMSwzNDkxNSwzNTUxNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNTY5NiwzNzI5MSwyMDEwOCwyMDE5NywyMDIzNCw2Mzk2NSw2Mzk2NiwyMjgzOSwyMzAxNiw2Mzk2NywyNDA1''@;'; put 'put ''MCwyNDM0NywyNDQxMSwyNDYwOSw2Mzk2OCw2Mzk2OSw2Mzk3MCw2Mzk3MSwyOTI0NiwyOTY2OSw2Mzk3MiwzMDA2NCwzMDE1Nyw2Mzk3MywzMTIyNyw2Mzk3NCwzMjc4MCwzMjgxOSwzMjkwMCwzMzUwNSwzMzYxNyw2Mzk3NSw2Mzk3NiwzNjAyOSwzNjAxOSwzNjk5OSw2Mzk3Nyw2Mzk3OCwz''@;'; put 'put ''OTE1NiwzOTE4MCw2Mzk3OSw2Mzk4MCwyODcyNywzMDQxMCwzMjcxNCwzMjcxNiwzMjc2NCwzNTYxMCwyMDE1NCwyMDE2MSwyMDk5NSwyMTM2MCw2Mzk4MSwyMTY5MywyMjI0MCwyMzAzNSwyMzQ5MywyNDM0MSwyNDUyNSwyODI3MCw2Mzk4Miw2Mzk4MywzMjEwNiwzMzU4OSw2Mzk4NCwzNDQ1''@;'; put 'put ''MSwzNTQ2OSw2Mzk4NSwzODc2NSwzODc3NSw2Mzk4Niw2Mzk4NywxOTk2OCwyMDMxNCwyMDM1MCwyMjc3NywyNjA4NSwyODMyMiwzNjkyMCwzNzgwOCwzOTM1MywyMDIxOSwyMjc2NCwyMjkyMiwyMzAwMSwyNDY0MSw2Mzk4OCw2Mzk4OSwzMTI1Miw2Mzk5MCwzMzYxNSwzNjAzNSwyMDgzNywy''@;'; put 'put ''MTMxNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2Mzk5MSw2Mzk5''@;'; put 'put ''Miw2Mzk5MywyMDE3MywyMTA5NywyMzM4MSwzMzQ3MSwyMDE4MCwyMTA1MCwyMTY3MiwyMjk4NSwyMzAzOSwyMzM3NiwyMzM4MywyMzM4OCwyNDY3NSwyNDkwNCwyODM2MywyODgyNSwyOTAzOCwyOTU3NCwyOTk0MywzMDEzMywzMDkxMywzMjA0MywzMjc3MywzMzI1OCwzMzU3NiwzNDA3MSwz''@;'; put 'put ''NDI0OSwzNTU2NiwzNjAzOSwzODYwNCwyMDMxNiwyMTI0MiwyMjIwNCwyNjAyNywyNjE1MiwyODc5NiwyODg1NiwyOTIzNywzMjE4OSwzMzQyMSwzNzE5NiwzODU5Miw0MDMwNiwyMzQwOSwyNjg1NSwyNzU0NCwyODUzOCwzMDQzMCwyMzY5NywyNjI4MywyODUwNywzMTY2OCwzMTc4NiwzNDg3''@;'; put 'put ''MCwzODYyMCwxOTk3NiwyMDE4MywyMTI4MCwyMjU4MCwyMjcxNSwyMjc2NywyMjg5MiwyMzU1OSwyNDExNSwyNDE5NiwyNDM3MywyNTQ4NCwyNjI5MCwyNjQ1NCwyNzE2NywyNzI5OSwyNzQwNCwyODQ3OSwyOTI1NCw2Mzk5NCwyOTUyMCwyOTgzNSwzMTQ1NiwzMTkxMSwzMzE0NCwzMzI0Nywz''@;'; put 'put ''MzI1NSwzMzY3NCwzMzkwMCwzNDA4MywzNDE5NiwzNDI1NSwzNTAzNywzNjExNSwzNzI5MiwzODI2MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzODU1NiwyMDg3NywyMTcwNSwyMjMxMiwyMzQ3MiwyNTE2NSwyNjQ0OCwyNjY4NSwyNjc3MSwyODIyMSwyODM3MSwyODc5NywzMjI4OSwzNTAwOSwzNjAwMSwzNjYxNyw0MDc3OSw0MDc4MiwyOTIyOSwzMTYzMSwz''@;'; put 'put ''NTUzMywzNzY1OCwyMDI5NSwyMDMwMiwyMDc4NiwyMTYzMiwyMjk5MiwyNDIxMywyNTI2OSwyNjQ4NSwyNjk5MCwyNzE1OSwyNzgyMiwyODE4NiwyOTQwMSwyOTQ4MiwzMDE0MSwzMTY3MiwzMjA1MywzMzUxMSwzMzc4NSwzMzg3OSwzNDI5NSwzNTQxOSwzNjAxNSwzNjQ4NywzNjg4OSwzNzA0''@;'; put 'put ''OCwzODYwNiw0MDc5OSwyMTIxOSwyMTUxNCwyMzI2NSwyMzQ5MCwyNTY4OCwyNTk3MywyODQwNCwyOTM4MCw2Mzk5NSwzMDM0MCwzMTMwOSwzMTUxNSwzMTgyMSwzMjMxOCwzMjczNSwzMzY1OSwzNTYyNywzNjA0MiwzNjE5NiwzNjMyMSwzNjQ0NywzNjg0MiwzNjg1NywzNjk2OSwzNzg0MSwy''@;'; put 'put ''MDI5MSwyMDM0NiwyMDY1OSwyMDg0MCwyMDg1NiwyMTA2OSwyMTA5OCwyMjYyNSwyMjY1MiwyMjg4MCwyMzU2MCwyMzYzNywyNDI4MywyNDczMSwyNTEzNiwyNjY0MywyNzU4MywyNzY1NiwyODU5MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyOTAwNiwyOTcyOCwzZTQsMzAwMDgsMzAwMzMsMzAzMjIsMzE1NjQsMzE2MjcsMzE2NjEsMzE2ODYsMzIzOTksMzU0''@;'; put 'put ''MzgsMzY2NzAsMzY2ODEsMzc0MzksMzc1MjMsMzc2NjYsMzc5MzEsMzg2NTEsMzkwMDIsMzkwMTksMzkxOTgsMjA5OTksMjUxMzAsMjUyNDAsMjc5OTMsMzAzMDgsMzE0MzQsMzE2ODAsMzIxMTgsMjEzNDQsMjM3NDIsMjQyMTUsMjg0NzIsMjg4NTcsMzE4OTYsMzg2NzMsMzk4MjIsNDA2NzAs''@;'; put 'put ''MjU1MDksMjU3MjIsMzQ2NzgsMTk5NjksMjAxMTcsMjAxNDEsMjA1NzIsMjA1OTcsMjE1NzYsMjI5NzksMjM0NTAsMjQxMjgsMjQyMzcsMjQzMTEsMjQ0NDksMjQ3NzMsMjU0MDIsMjU5MTksMjU5NzIsMjYwNjAsMjYyMzAsMjYyMzIsMjY2MjIsMjY5ODQsMjcyNzMsMjc0OTEsMjc3MTIsMjgw''@;'; put 'put ''OTYsMjgxMzYsMjgxOTEsMjgyNTQsMjg3MDIsMjg4MzMsMjk1ODIsMjk2OTMsMzAwMTAsMzA1NTUsMzA4NTUsMzExMTgsMzEyNDMsMzEzNTcsMzE5MzQsMzIxNDIsMzMzNTEsMzUzMzAsMzU1NjIsMzU5OTgsMzcxNjUsMzcxOTQsMzczMzYsMzc0NzgsMzc1ODAsMzc2NjQsMzg2NjIsMzg3NDIs''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzg3NDgsMzg5MTQsNDA3''@;'; put 'put ''MTgsMjEwNDYsMjExMzcsMjE4ODQsMjI1NjQsMjQwOTMsMjQzNTEsMjQ3MTYsMjU1NTIsMjY3OTksMjg2MzksMzEwODUsMzE1MzIsMzMyMjksMzQyMzQsMzUwNjksMzU1NzYsMzY0MjAsMzcyNjEsMzg1MDAsMzg1NTUsMzg3MTcsMzg5ODgsNDA3NzgsMjA0MzAsMjA4MDYsMjA5MzksMjExNjEs''@;'; put 'put ''MjIwNjYsMjQzNDAsMjQ0MjcsMjU1MTQsMjU4MDUsMjYwODksMjYxNzcsMjYzNjIsMjYzNjEsMjYzOTcsMjY3ODEsMjY4MzksMjcxMzMsMjg0MzcsMjg1MjYsMjkwMzEsMjkxNTcsMjkyMjYsMjk4NjYsMzA1MjIsMzEwNjIsMzEwNjYsMzExOTksMzEyNjQsMzEzODEsMzE4OTUsMzE5NjcsMzIw''@;'; put 'put ''NjgsMzIzNjgsMzI5MDMsMzQyOTksMzQ0NjgsMzU0MTIsMzU1MTksMzYyNDksMzY0ODEsMzY4OTYsMzY5NzMsMzczNDcsMzg0NTksMzg2MTMsNDAxNjUsMjYwNjMsMzE3NTEsMzYyNzUsMzc4MjcsMjMzODQsMjM1NjIsMjEzMzAsMjUzMDUsMjk0NjksMjA1MTksMjM0NDcsMjQ0NzgsMjQ3NTIs''@;'; put 'put ''MjQ5MzksMjY4MzcsMjgxMjEsMjk3NDIsMzEyNzgsMzIwNjYsMzIxNTYsMzIzMDUsMzMxMzEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzYzOTQsMzY0MDUsMzc3NTgsMzc5MTIsMjAzMDQsMjIzNTIsMjQwMzgsMjQyMzEsMjUzODcsMzI2MTgsMjAwMjcsMjAzMDMsMjAzNjcsMjA1NzAsMjMwMDUsMzI5NjQsMjE2MTAsMjE2MDgsMjIwMTQsMjI4NjMsMjM0NDks''@;'; put 'put ''MjQwMzAsMjQyODIsMjYyMDUsMjY0MTcsMjY2MDksMjY2NjYsMjc4ODAsMjc5NTQsMjgyMzQsMjg1NTcsMjg4NTUsMjk2NjQsMzAwODcsMzE4MjAsMzIwMDIsMzIwNDQsMzIxNjIsMzMzMTEsMzQ1MjMsMzUzODcsMzU0NjEsMzYyMDgsMzY0OTAsMzY2NTksMzY5MTMsMzcxOTgsMzcyMDIsMzc5''@;'; put 'put ''NTYsMzkzNzYsMzE0ODEsMzE5MDksMjA0MjYsMjA3MzcsMjA5MzQsMjI0NzIsMjM1MzUsMjM4MDMsMjYyMDEsMjcxOTcsMjc5OTQsMjgzMTAsMjg2NTIsMjg5NDAsMzAwNjMsMzE0NTksMzQ4NTAsMzY4OTcsMzY5ODEsMzg2MDMsMzk0MjMsMzM1MzcsMjAwMTMsMjAyMTAsMzQ4ODYsMzczMjUs''@;'; put 'put ''MjEzNzMsMjczNTUsMjY5ODcsMjc3MTMsMzM5MTQsMjI2ODYsMjQ5NzQsMjYzNjYsMjUzMjcsMjg4OTMsMjk5NjksMzAxNTEsMzIzMzgsMzM5NzYsMzU2NTcsMzYxMDQsMjAwNDMsMjE0ODIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjE2NzUsMjIzMjAsMjIzMzYsMjQ1MzUsMjUzNDUsMjUzNTEsMjU3MTEsMjU5MDMsMjYwODgsMjYyMzQsMjY1MjUsMjY1NDcs''@;'; put 'put ''Mjc0OTAsMjc3NDQsMjc4MDIsMjg0NjAsMzA2OTMsMzA3NTcsMzEwNDksMzEwNjMsMzIwMjUsMzI5MzAsMzMwMjYsMzMyNjcsMzM0MzcsMzM0NjMsMzQ1ODQsMzU0NjgsNjM5OTYsMzYxMDAsMzYyODYsMzY5NzgsMzA0NTIsMzEyNTcsMzEyODcsMzIzNDAsMzI4ODcsMjE3NjcsMjE5NzIsMjI2''@;'; put 'put ''NDUsMjUzOTEsMjU2MzQsMjYxODUsMjYxODcsMjY3MzMsMjcwMzUsMjc1MjQsMjc5NDEsMjgzMzcsMjk2NDUsMjk4MDAsMjk4NTcsMzAwNDMsMzAxMzcsMzA0MzMsMzA0OTQsMzA2MDMsMzEyMDYsMzIyNjUsMzIyODUsMzMyNzUsMzQwOTUsMzQ5NjcsMzUzODYsMzYwNDksMzY1ODcsMzY3ODQs''@;'; put 'put ''MzY5MTQsMzc4MDUsMzg0OTksMzg1MTUsMzg2NjMsMjAzNTYsMjE0ODksMjMwMTgsMjMyNDEsMjQwODksMjY3MDIsMjk4OTQsMzAxNDIsMzEyMDksMzEzNzgsMzMxODcsMzQ1NDEsMzYwNzQsMzYzMDAsMzY4NDUsMjYwMTUsMjYzODksNjM5OTcsMjI1MTksMjg1MDMsMzIyMjEsMzY2NTUsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzc4NzgsMzg1OTgsMjQ1MDEs''@;'; put 'put ''MjUwNzQsMjg1NDgsMTk5ODgsMjAzNzYsMjA1MTEsMjE0NDksMjE5ODMsMjM5MTksMjQwNDYsMjc0MjUsMjc0OTIsMzA5MjMsMzE2NDIsNjM5OTgsMzY0MjUsMzY1NTQsMzY5NzQsMjU0MTcsMjU2NjIsMzA1MjgsMzEzNjQsMzc2NzksMzgwMTUsNDA4MTAsMjU3NzYsMjg1OTEsMjkxNTgsMjk4''@;'; put 'put ''NjQsMjk5MTQsMzE0MjgsMzE3NjIsMzIzODYsMzE5MjIsMzI0MDgsMzU3MzgsMzYxMDYsMzgwMTMsMzkxODQsMzkyNDQsMjEwNDksMjM1MTksMjU4MzAsMjY0MTMsMzIwNDYsMjA3MTcsMjE0NDMsMjI2NDksMjQ5MjAsMjQ5MjEsMjUwODIsMjYwMjgsMzE0NDksMzU3MzAsMzU3MzQsMjA0ODks''@;'; put 'put ''MjA1MTMsMjExMDksMjE4MDksMjMxMDAsMjQyODgsMjQ0MzIsMjQ4ODQsMjU5NTAsMjYxMjQsMjYxNjYsMjYyNzQsMjcwODUsMjgzNTYsMjg0NjYsMjk0NjIsMzAyNDEsMzEzNzksMzMwODEsMzMzNjksMzM3NTAsMzM5ODAsMjA2NjEsMjI1MTIsMjM0ODgsMjM1MjgsMjQ0MjUsMjU1MDUsMzA3''@;'; put 'put ''NTgsMzIxODEsMzM3NTYsMzQwODEsMzczMTksMzczNjUsMjA4NzQsMjY2MTMsMzE1NzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzYwMTIsMjA5MzIsMjI5NzEsMjQ3NjUsMzQzODksMjA1MDgsNjM5OTksMjEwNzYsMjM2MTAsMjQ5NTcsMjUxMTQsMjUyOTksMjU4NDIsMjYwMjEsMjgzNjQsMzAyNDAsMzMwMzQsMzY0NDgsMzg0OTUsMzg1ODcsMjAxOTEsMjEz''@;'; put 'put ''MTUsMjE5MTIsMjI4MjUsMjQwMjksMjU3OTcsMjc4NDksMjgxNTQsMjk1ODgsMzEzNTksMzMzMDcsMzQyMTQsMzYwNjgsMzYzNjgsMzY5ODMsMzczNTEsMzgzNjksMzg0MzMsMzg4NTQsMjA5ODQsMjE3NDYsMjE4OTQsMjQ1MDUsMjU3NjQsMjg1NTIsMzIxODAsMzY2MzksMzY2ODUsMzc5NDEs''@;'; put 'put ''MjA2ODEsMjM1NzQsMjc4MzgsMjgxNTUsMjk5NzksMzA2NTEsMzE4MDUsMzE4NDQsMzU0NDksMzU1MjIsMjI1NTgsMjI5NzQsMjQwODYsMjU0NjMsMjkyNjYsMzAwOTAsMzA1NzEsMzU1NDgsMzYwMjgsMzY2MjYsMjQzMDcsMjYyMjgsMjgxNTIsMzI4OTMsMzM3MjksMzU1MzEsMzg3MzcsMzk4''@;'; put 'put ''OTQsNjRlMywyMTA1OSwyNjM2NywyODA1MywyODM5OSwzMjIyNCwzNTU1OCwzNjkxMCwzNjk1OCwzOTYzNiwyMTAyMSwyMTExOSwyMTczNiwyNDk4MCwyNTIyMCwyNTMwNywyNjc4NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNjg5OCwyNjk3MCwyNzE4OSwyODgxOCwyODk2NiwzMDgxMywzMDk3NywzMDk5MCwzMTE4NiwzMTI0NSwzMjkxOCwzMzQwMCwzMzQ5''@;'; put 'put ''MywzMzYwOSwzNDEyMSwzNTk3MCwzNjIyOSwzNzIxOCwzNzI1OSwzNzI5NCwyMDQxOSwyMjIyNSwyOTE2NSwzMDY3OSwzNDU2MCwzNTMyMCwyMzU0NCwyNDUzNCwyNjQ0OSwzNzAzMiwyMTQ3NCwyMjYxOCwyMzU0MSwyNDc0MCwyNDk2MSwyNTY5NiwzMjMxNywzMjg4MCwzNDA4NSwzNzUwNywy''@;'; put 'put ''NTc3NCwyMDY1MiwyMzgyOCwyNjM2OCwyMjY4NCwyNTI3NywyNTUxMiwyNjg5NCwyN2UzLDI3MTY2LDI4MjY3LDMwMzk0LDMxMTc5LDMzNDY3LDMzODMzLDM1NTM1LDM2MjY0LDM2ODYxLDM3MTM4LDM3MTk1LDM3Mjc2LDM3NjQ4LDM3NjU2LDM3Nzg2LDM4NjE5LDM5NDc4LDM5OTQ5LDE5OTg1''@;'; put 'put ''LDMwMDQ0LDMxMDY5LDMxNDgyLDMxNTY5LDMxNjg5LDMyMzAyLDMzOTg4LDM2NDQxLDM2NDY4LDM2NjAwLDM2ODgwLDI2MTQ5LDI2OTQzLDI5NzYzLDIwOTg2LDI2NDE0LDQwNjY4LDIwODA1LDI0NTQ0LDI3Nzk4LDM0ODAyLDM0OTA5LDM0OTM1LDI0NzU2LDMzMjA1LDMzNzk1LG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM2MTAxLDIxNDYyLDIxNTYxLDIyMDY4''@;'; put 'put ''LDIzMDk0LDIzNjAxLDI4ODEwLDMyNzM2LDMyODU4LDMzMDMwLDMzMjYxLDM2MjU5LDM3MjU3LDM5NTE5LDQwNDM0LDIwNTk2LDIwMTY0LDIxNDA4LDI0ODI3LDI4MjA0LDIzNjUyLDIwMzYwLDIwNTE2LDIxOTg4LDIzNzY5LDI0MTU5LDI0Njc3LDI2NzcyLDI3ODM1LDI4MTAwLDI5MTE4LDMw''@;'; put 'put ''MTY0LDMwMTk2LDMwMzA1LDMxMjU4LDMxMzA1LDMyMTk5LDMyMjUxLDMyNjIyLDMzMjY4LDM0NDczLDM2NjM2LDM4NjAxLDM5MzQ3LDQwNzg2LDIxMDYzLDIxMTg5LDM5MTQ5LDM1MjQyLDE5OTcxLDI2NTc4LDI4NDIyLDIwNDA1LDIzNTIyLDI2NTE3LDI3Nzg0LDI4MDI0LDI5NzIzLDMwNzU5''@;'; put 'put ''LDM3MzQxLDM3NzU2LDM0NzU2LDMxMjA0LDMxMjgxLDI0NTU1LDIwMTgyLDIxNjY4LDIxODIyLDIyNzAyLDIyOTQ5LDI0ODE2LDI1MTcxLDI1MzAyLDI2NDIyLDI2OTY1LDMzMzMzLDM4NDY0LDM5MzQ1LDM5Mzg5LDIwNTI0LDIxMzMxLDIxODI4LDIyMzk2LDY0MDAxLDI1MTc2LDY0MDAyLDI1''@;'; put 'put ''ODI2LDI2MjE5LDI2NTg5LDI4NjA5LDI4NjU1LDI5NzMwLDI5NzUyLDM1MzUxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM3OTQ0LDIxNTg1LDIyMDIyLDIyMzc0LDI0MzkyLDI0OTg2LDI3NDcwLDI4NzYwLDI4ODQ1LDMyMTg3LDM1NDc3LDIyODkwLDMzMDY3LDI1NTA2LDMwNDcyLDMyODI5LDM2MDEwLDIyNjEyLDI1NjQ1LDI3MDY3LDIzNDQ1LDI0MDgxLDI4''@;'; put 'put ''MjcxLDY0MDAzLDM0MTUzLDIwODEyLDIxNDg4LDIyODI2LDI0NjA4LDI0OTA3LDI3NTI2LDI3NzYwLDI3ODg4LDMxNTE4LDMyOTc0LDMzNDkyLDM2Mjk0LDM3MDQwLDM5MDg5LDY0MDA0LDI1Nzk5LDI4NTgwLDI1NzQ1LDI1ODYwLDIwODE0LDIxNTIwLDIyMzAzLDM1MzQyLDI0OTI3LDI2NzQy''@;'; put 'put ''LDY0MDA1LDMwMTcxLDMxNTcwLDMyMTEzLDM2ODkwLDIyNTM0LDI3MDg0LDMzMTUxLDM1MTE0LDM2ODY0LDM4OTY5LDIwNjAwLDIyODcxLDIyOTU2LDI1MjM3LDM2ODc5LDM5NzIyLDI0OTI1LDI5MzA1LDM4MzU4LDIyMzY5LDIzMTEwLDI0MDUyLDI1MjI2LDI1NzczLDI1ODUwLDI2NDg3LDI3''@;'; put 'put ''ODc0LDI3OTY2LDI5MjI4LDI5NzUwLDMwNzcyLDMyNjMxLDMzNDUzLDM2MzE1LDM4OTM1LDIxMDI4LDIyMzM4LDI2NDk1LDI5MjU2LDI5OTIzLDM2MDA5LDM2Nzc0LDM3MzkzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM4NDQyLDIwODQzLDIxNDg1LDI1NDIwLDIwMzI5LDIxNzY0LDI0NzI2LDI1OTQzLDI3ODAzLDI4MDMxLDI5MjYwLDI5NDM3LDMxMjU1LDM1''@;'; put 'put ''MjA3LDM1OTk3LDI0NDI5LDI4NTU4LDI4OTIxLDMzMTkyLDI0ODQ2LDIwNDE1LDIwNTU5LDI1MTUzLDI5MjU1LDMxNjg3LDMyMjMyLDMyNzQ1LDM2OTQxLDM4ODI5LDM5NDQ5LDM2MDIyLDIyMzc4LDI0MTc5LDI2NTQ0LDMzODA1LDM1NDEzLDIxNTM2LDIzMzE4LDI0MTYzLDI0MjkwLDI0MzMw''@;'; put 'put ''LDI1OTg3LDMyOTU0LDM0MTA5LDM4MjgxLDM4NDkxLDIwMjk2LDIxMjUzLDIxMjYxLDIxMjYzLDIxNjM4LDIxNzU0LDIyMjc1LDI0MDY3LDI0NTk4LDI1MjQzLDI1MjY1LDI1NDI5LDY0MDA2LDI3ODczLDI4MDA2LDMwMTI5LDMwNzcwLDMyOTkwLDMzMDcxLDMzNTAyLDMzODg5LDMzOTcwLDM0''@;'; put 'put ''OTU3LDM1MDkwLDM2ODc1LDM3NjEwLDM5MTY1LDM5ODI1LDI0MTMzLDI2MjkyLDI2MzMzLDI4Njg5LDI5MTkwLDY0MDA3LDIwNDY5LDIxMTE3LDI0NDI2LDI0OTE1LDI2NDUxLDI3MTYxLDI4NDE4LDI5OTIyLDMxMDgwLDM0OTIwLDM1OTYxLDM5MTExLDM5MTA4LDM5NDkxLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIxNjk3LDMxMjYzLDI2OTYzLDM1NTc1LDM1''@;'; put 'put ''OTE0LDM5MDgwLDM5MzQyLDI0NDQ0LDI1MjU5LDMwMTMwLDMwMzgyLDM0OTg3LDM2OTkxLDM4NDY2LDIxMzA1LDI0MzgwLDI0NTE3LDI3ODUyLDI5NjQ0LDMwMDUwLDMwMDkxLDMxNTU4LDMzNTM0LDM5MzI1LDIwMDQ3LDM2OTI0LDE5OTc5LDIwMzA5LDIxNDE0LDIyNzk5LDI0MjY0LDI2MTYw''@;'; put 'put ''LDI3ODI3LDI5NzgxLDMzNjU1LDM0NjYyLDM2MDMyLDM2OTQ0LDM4Njg2LDM5OTU3LDIyNzM3LDIzNDE2LDM0Mzg0LDM1NjA0LDQwMzcyLDIzNTA2LDI0NjgwLDI0NzE3LDI2MDk3LDI3NzM1LDI4NDUwLDI4NTc5LDI4Njk4LDMyNTk3LDMyNzUyLDM4Mjg5LDM4MjkwLDM4NDgwLDM4ODY3LDIx''@;'; put 'put ''MTA2LDM2Njc2LDIwOTg5LDIxNTQ3LDIxNjg4LDIxODU5LDIxODk4LDI3MzIzLDI4MDg1LDMyMjE2LDMzMzgyLDM3NTMyLDM4NTE5LDQwNTY5LDIxNTEyLDIxNzA0LDMwNDE4LDM0NTMyLDM4MzA4LDM4MzU2LDM4NDkyLDIwMTMwLDIwMjMzLDIzMDIyLDIzMjcwLDI0MDU1LDI0NjU4LDI1MjM5''@;'; put 'put ''LDI2NDc3LDI2Njg5LDI3NzgyLDI4MjA3LDMyNTY4LDMyOTIzLDMzMzIyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDY0MDA4LDY0MDA5LDM4OTE3LDIwMTMzLDIwNTY1LDIxNjgzLDIyNDE5LDIyODc0LDIzNDAxLDIzNDc1LDI1MDMyLDI2OTk5LDI4MDIzLDI4NzA3LDM0ODA5LDM1Mjk5LDM1NDQyLDM1NTU5LDM2OTk0LDM5NDA1LDM5NjA4LDIxMTgyLDI2Njgw''@;'; put 'put ''LDIwNTAyLDI0MTg0LDI2NDQ3LDMzNjA3LDM0ODkyLDIwMTM5LDIxNTIxLDIyMTkwLDI5NjcwLDM3MTQxLDM4OTExLDM5MTc3LDM5MjU1LDM5MzIxLDIyMDk5LDIyNjg3LDM0Mzk1LDM1Mzc3LDI1MDEwLDI3MzgyLDI5NTYzLDM2NTYyLDI3NDYzLDM4NTcwLDM5NTExLDIyODY5LDI5MTg0LDM2''@;'; put 'put ''MjAzLDM4NzYxLDIwNDM2LDIzNzk2LDI0MzU4LDI1MDgwLDI2MjAzLDI3ODgzLDI4ODQzLDI5NTcyLDI5NjI1LDI5Njk0LDMwNTA1LDMwNTQxLDMyMDY3LDMyMDk4LDMyMjkxLDMzMzM1LDM0ODk4LDY0MDEwLDM2MDY2LDM3NDQ5LDM5MDIzLDIzMzc3LDMxMzQ4LDM0ODgwLDM4OTEzLDIzMjQ0''@;'; put 'put ''LDIwNDQ4LDIxMzMyLDIyODQ2LDIzODA1LDI1NDA2LDI4MDI1LDI5NDMzLDMzMDI5LDMzMDMxLDMzNjk4LDM3NTgzLDM4OTYwLDIwMTM2LDIwODA0LDIxMDA5LDIyNDExLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI0NDE4LDI3ODQyLDI4MzY2LDI4Njc3LDI4NzUyLDI4ODQ3LDI5MDc0LDI5NjczLDI5ODAxLDMzNjEwLDM0NzIyLDM0OTEzLDM2ODcyLDM3MDI2''@;'; put 'put ''LDM3Nzk1LDM5MzM2LDIwODQ2LDI0NDA3LDI0ODAwLDI0OTM1LDI2MjkxLDM0MTM3LDM2NDI2LDM3Mjk1LDM4Nzk1LDIwMDQ2LDIwMTE0LDIxNjI4LDIyNzQxLDIyNzc4LDIyOTA5LDIzNzMzLDI0MzU5LDI1MTQyLDI1MTYwLDI2MTIyLDI2MjE1LDI3NjI3LDI4MDA5LDI4MTExLDI4MjQ2LDI4''@;'; put 'put ''NDA4LDI4NTY0LDI4NjQwLDI4NjQ5LDI4NzY1LDI5MzkyLDI5NzMzLDI5Nzg2LDI5OTIwLDMwMzU1LDMxMDY4LDMxOTQ2LDMyMjg2LDMyOTkzLDMzNDQ2LDMzODk5LDMzOTgzLDM0MzgyLDM0Mzk5LDM0Njc2LDM1NzAzLDM1OTQ2LDM3ODA0LDM4OTEyLDM5MDEzLDI0Nzg1LDI1MTEwLDM3MjM5''@;'; put 'put ''LDIzMTMwLDI2MTI3LDI4MTUxLDI4MjIyLDI5NzU5LDM5NzQ2LDI0NTczLDI0Nzk0LDMxNTAzLDIxNzAwLDI0MzQ0LDI3NzQyLDI3ODU5LDI3OTQ2LDI4ODg4LDMyMDA1LDM0NDI1LDM1MzQwLDQwMjUxLDIxMjcwLDIxNjQ0LDIzMzAxLDI3MTk0LDI4Nzc5LDMwMDY5LG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMxMTE3LDMxMTY2LDMzNDU3LDMzNzc1LDM1NDQx''@;'; put 'put ''LDM1NjQ5LDM2MDA4LDM4NzcyLDY0MDExLDI1ODQ0LDI1ODk5LDMwOTA2LDMwOTA3LDMxMzM5LDIwMDI0LDIxOTE0LDIyODY0LDIzNDYyLDI0MTg3LDI0NzM5LDI1NTYzLDI3NDg5LDI2MjEzLDI2NzA3LDI4MTg1LDI5MDI5LDI5ODcyLDMyMDA4LDM2OTk2LDM5NTI5LDM5OTczLDI3OTYzLDI4''@;'; put 'put ''MzY5LDI5NTAyLDM1OTA1LDM4MzQ2LDIwOTc2LDI0MTQwLDI0NDg4LDI0NjUzLDI0ODIyLDI0ODgwLDI0OTA4LDI2MTc5LDI2MTgwLDI3MDQ1LDI3ODQxLDI4MjU1LDI4MzYxLDI4NTE0LDI5MDA0LDI5ODUyLDMwMzQzLDMxNjgxLDMxNzgzLDMzNjE4LDM0NjQ3LDM2OTQ1LDM4NTQxLDQwNjQz''@;'; put 'put ''LDIxMjk1LDIyMjM4LDI0MzE1LDI0NDU4LDI0Njc0LDI0NzI0LDI1MDc5LDI2MjE0LDI2MzcxLDI3MjkyLDI4MTQyLDI4NTkwLDI4Nzg0LDI5NTQ2LDMyMzYyLDMzMjE0LDMzNTg4LDM0NTE2LDM1NDk2LDM2MDM2LDIxMTIzLDI5NTU0LDIzNDQ2LDI3MjQzLDM3ODkyLDIxNzQyLDIyMTUwLDIz''@;'; put 'put ''Mzg5LDI1OTI4LDI1OTg5LDI2MzEzLDI2NzgzLDI4MDQ1LDI4MTAyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI5MjQzLDMyOTQ4LDM3MjM3LDM5NTAxLDIwMzk5LDIwNTA1LDIxNDAyLDIxNTE4LDIxNTY0LDIxODk3LDIxOTU3LDI0MTI3LDI0NDYwLDI2NDI5LDI5MDMwLDI5NjYxLDM2ODY5LDIxMjExLDIxMjM1LDIyNjI4LDIyNzM0LDI4OTMyLDI5MDcxLDI5''@;'; put 'put ''MTc5LDM0MjI0LDM1MzQ3LDI2MjQ4LDM0MjE2LDIxOTI3LDI2MjQ0LDI5MDAyLDMzODQxLDIxMzIxLDIxOTEzLDI3NTg1LDI0NDA5LDI0NTA5LDI1NTgyLDI2MjQ5LDI4OTk5LDM1NTY5LDM2NjM3LDQwNjM4LDIwMjQxLDI1NjU4LDI4ODc1LDMwMDU0LDM0NDA3LDI0Njc2LDM1NjYyLDQwNDQw''@;'; put 'put ''LDIwODA3LDIwOTgyLDIxMjU2LDI3OTU4LDMzMDE2LDQwNjU3LDI2MTMzLDI3NDI3LDI4ODI0LDMwMTY1LDIxNTA3LDIzNjczLDMyMDA3LDM1MzUwLDI3NDI0LDI3NDUzLDI3NDYyLDIxNTYwLDI0Njg4LDI3OTY1LDMyNzI1LDMzMjg4LDIwNjk0LDIwOTU4LDIxOTE2LDIyMTIzLDIyMjIxLDIz''@;'; put 'put ''MDIwLDIzMzA1LDI0MDc2LDI0OTg1LDI0OTg0LDI1MTM3LDI2MjA2LDI2MzQyLDI5MDgxLDI5MTEzLDI5MTE0LDI5MzUxLDMxMTQzLDMxMjMyLDMyNjkwLDM1NDQwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLGdiMTgwMzA6WzE5OTcwLDE5OTcyLDE5OTczLDE5OTc0LDE5OTgzLDE5OTg2LDE5OTkxLDE5OTk5LDJlNCwyMDAwMSwyMDAwMywyMDAwNiwyMDAwOSwyMDAxNCwyMDAxNSwyMDAxNywyMDAxOSwy''@;'; put 'put ''MDAyMSwyMDAyMywyMDAyOCwyMDAzMiwyMDAzMywyMDAzNCwyMDAzNiwyMDAzOCwyMDA0MiwyMDA0OSwyMDA1MywyMDA1NSwyMDA1OCwyMDA1OSwyMDA2NiwyMDA2NywyMDA2OCwyMDA2OSwyMDA3MSwyMDA3MiwyMDA3NCwyMDA3NSwyMDA3NiwyMDA3NywyMDA3OCwyMDA3OSwyMDA4MiwyMDA4''@;'; put 'put ''NCwyMDA4NSwyMDA4NiwyMDA4NywyMDA4OCwyMDA4OSwyMDA5MCwyMDA5MSwyMDA5MiwyMDA5MywyMDA5NSwyMDA5NiwyMDA5NywyMDA5OCwyMDA5OSwyMDEwMCwyMDEwMSwyMDEwMywyMDEwNiwyMDExMiwyMDExOCwyMDExOSwyMDEyMSwyMDEyNCwyMDEyNSwyMDEyNiwyMDEzMSwyMDEzOCwy''@;'; put 'put ''MDE0MywyMDE0NCwyMDE0NSwyMDE0OCwyMDE1MCwyMDE1MSwyMDE1MiwyMDE1MywyMDE1NiwyMDE1NywyMDE1OCwyMDE2OCwyMDE3MiwyMDE3NSwyMDE3NiwyMDE3OCwyMDE4NiwyMDE4NywyMDE4OCwyMDE5MiwyMDE5NCwyMDE5OCwyMDE5OSwyMDIwMSwyMDIwNSwyMDIwNiwyMDIwNywyMDIw''@;'; put 'put ''OSwyMDIxMiwyMDIxNiwyMDIxNywyMDIxOCwyMDIyMCwyMDIyMiwyMDIyNCwyMDIyNiwyMDIyNywyMDIyOCwyMDIyOSwyMDIzMCwyMDIzMSwyMDIzMiwyMDIzNSwyMDIzNiwyMDI0MiwyMDI0MywyMDI0NCwyMDI0NSwyMDI0NiwyMDI1MiwyMDI1MywyMDI1NywyMDI1OSwyMDI2NCwyMDI2NSwy''@;'; put 'put ''MDI2OCwyMDI2OSwyMDI3MCwyMDI3MywyMDI3NSwyMDI3NywyMDI3OSwyMDI4MSwyMDI4MywyMDI4NiwyMDI4NywyMDI4OCwyMDI4OSwyMDI5MCwyMDI5MiwyMDI5MywyMDI5NSwyMDI5NiwyMDI5NywyMDI5OCwyMDI5OSwyMDMwMCwyMDMwNiwyMDMwOCwyMDMxMCwyMDMyMSwyMDMyMiwyMDMy''@;'; put 'put ''NiwyMDMyOCwyMDMzMCwyMDMzMSwyMDMzMywyMDMzNCwyMDMzNywyMDMzOCwyMDM0MSwyMDM0MywyMDM0NCwyMDM0NSwyMDM0NiwyMDM0OSwyMDM1MiwyMDM1MywyMDM1NCwyMDM1NywyMDM1OCwyMDM1OSwyMDM2MiwyMDM2NCwyMDM2NiwyMDM2OCwyMDM3MCwyMDM3MSwyMDM3MywyMDM3NCwy''@;'; put 'put ''MDM3NiwyMDM3NywyMDM3OCwyMDM4MCwyMDM4MiwyMDM4MywyMDM4NSwyMDM4NiwyMDM4OCwyMDM5NSwyMDM5NywyMDQwMCwyMDQwMSwyMDQwMiwyMDQwMywyMDQwNCwyMDQwNiwyMDQwNywyMDQwOCwyMDQwOSwyMDQxMCwyMDQxMSwyMDQxMiwyMDQxMywyMDQxNCwyMDQxNiwyMDQxNywyMDQx''@;'; put 'put ''OCwyMDQyMiwyMDQyMywyMDQyNCwyMDQyNSwyMDQyNywyMDQyOCwyMDQyOSwyMDQzNCwyMDQzNSwyMDQzNiwyMDQzNywyMDQzOCwyMDQ0MSwyMDQ0MywyMDQ0OCwyMDQ1MCwyMDQ1MiwyMDQ1MywyMDQ1NSwyMDQ1OSwyMDQ2MCwyMDQ2NCwyMDQ2NiwyMDQ2OCwyMDQ2OSwyMDQ3MCwyMDQ3MSwy''@;'; put 'put ''MDQ3MywyMDQ3NSwyMDQ3NiwyMDQ3NywyMDQ3OSwyMDQ4MCwyMDQ4MSwyMDQ4MiwyMDQ4MywyMDQ4NCwyMDQ4NSwyMDQ4NiwyMDQ4NywyMDQ4OCwyMDQ4OSwyMDQ5MCwyMDQ5MSwyMDQ5NCwyMDQ5NiwyMDQ5NywyMDQ5OSwyMDUwMSwyMDUwMiwyMDUwMywyMDUwNywyMDUwOSwyMDUxMCwyMDUx''@;'; put 'put ''MiwyMDUxNCwyMDUxNSwyMDUxNiwyMDUxOSwyMDUyMywyMDUyNywyMDUyOCwyMDUyOSwyMDUzMCwyMDUzMSwyMDUzMiwyMDUzMywyMDUzNCwyMDUzNSwyMDUzNiwyMDUzNywyMDUzOSwyMDU0MSwyMDU0MywyMDU0NCwyMDU0NSwyMDU0NiwyMDU0OCwyMDU0OSwyMDU1MCwyMDU1MywyMDU1NCwy''@;'; put 'put ''MDU1NSwyMDU1NywyMDU2MCwyMDU2MSwyMDU2MiwyMDU2MywyMDU2NCwyMDU2NiwyMDU2NywyMDU2OCwyMDU2OSwyMDU3MSwyMDU3MywyMDU3NCwyMDU3NSwyMDU3NiwyMDU3NywyMDU3OCwyMDU3OSwyMDU4MCwyMDU4MiwyMDU4MywyMDU4NCwyMDU4NSwyMDU4NiwyMDU4NywyMDU4OSwyMDU5''@;'; put 'put ''MCwyMDU5MSwyMDU5MiwyMDU5MywyMDU5NCwyMDU5NSwyMDU5NiwyMDU5NywyMDYwMCwyMDYwMSwyMDYwMiwyMDYwNCwyMDYwNSwyMDYwOSwyMDYxMCwyMDYxMSwyMDYxMiwyMDYxNCwyMDYxNSwyMDYxNywyMDYxOCwyMDYxOSwyMDYyMCwyMDYyMiwyMDYyMywyMDYyNCwyMDYyNSwyMDYyNiwy''@;'; put 'put ''MDYyNywyMDYyOCwyMDYyOSwyMDYzMCwyMDYzMSwyMDYzMiwyMDYzMywyMDYzNCwyMDYzNSwyMDYzNiwyMDYzNywyMDYzOCwyMDYzOSwyMDY0MCwyMDY0MSwyMDY0MiwyMDY0NCwyMDY0NiwyMDY1MCwyMDY1MSwyMDY1MywyMDY1NCwyMDY1NSwyMDY1NiwyMDY1NywyMDY1OSwyMDY2MCwyMDY2''@;'; put 'put ''MSwyMDY2MiwyMDY2MywyMDY2NCwyMDY2NSwyMDY2OCwyMDY2OSwyMDY3MCwyMDY3MSwyMDY3MiwyMDY3MywyMDY3NCwyMDY3NSwyMDY3NiwyMDY3NywyMDY3OCwyMDY3OSwyMDY4MCwyMDY4MSwyMDY4MiwyMDY4MywyMDY4NCwyMDY4NSwyMDY4NiwyMDY4OCwyMDY4OSwyMDY5MCwyMDY5MSwy''@;'; put 'put ''MDY5MiwyMDY5MywyMDY5NSwyMDY5NiwyMDY5NywyMDY5OSwyMDcwMCwyMDcwMSwyMDcwMiwyMDcwMywyMDcwNCwyMDcwNSwyMDcwNiwyMDcwNywyMDcwOCwyMDcwOSwyMDcxMiwyMDcxMywyMDcxNCwyMDcxNSwyMDcxOSwyMDcyMCwyMDcyMSwyMDcyMiwyMDcyNCwyMDcyNiwyMDcyNywyMDcy''@;'; put 'put ''OCwyMDcyOSwyMDczMCwyMDczMiwyMDczMywyMDczNCwyMDczNSwyMDczNiwyMDczNywyMDczOCwyMDczOSwyMDc0MCwyMDc0MSwyMDc0NCwyMDc0NSwyMDc0NiwyMDc0OCwyMDc0OSwyMDc1MCwyMDc1MSwyMDc1MiwyMDc1MywyMDc1NSwyMDc1NiwyMDc1NywyMDc1OCwyMDc1OSwyMDc2MCwy''@;'; put 'put ''MDc2MSwyMDc2MiwyMDc2MywyMDc2NCwyMDc2NSwyMDc2NiwyMDc2NywyMDc2OCwyMDc3MCwyMDc3MSwyMDc3MiwyMDc3MywyMDc3NCwyMDc3NSwyMDc3NiwyMDc3NywyMDc3OCwyMDc3OSwyMDc4MCwyMDc4MSwyMDc4MiwyMDc4MywyMDc4NCwyMDc4NSwyMDc4NiwyMDc4NywyMDc4OCwyMDc4''@;'; put 'put ''OSwyMDc5MCwyMDc5MSwyMDc5MiwyMDc5MywyMDc5NCwyMDc5NSwyMDc5NiwyMDc5NywyMDc5OCwyMDgwMiwyMDgwNywyMDgxMCwyMDgxMiwyMDgxNCwyMDgxNSwyMDgxNiwyMDgxOCwyMDgxOSwyMDgyMywyMDgyNCwyMDgyNSwyMDgyNywyMDgyOSwyMDgzMCwyMDgzMSwyMDgzMiwyMDgzMywy''@;'; put 'put ''MDgzNSwyMDgzNiwyMDgzOCwyMDgzOSwyMDg0MSwyMDg0MiwyMDg0NywyMDg1MCwyMDg1OCwyMDg2MiwyMDg2MywyMDg2NywyMDg2OCwyMDg3MCwyMDg3MSwyMDg3NCwyMDg3NSwyMDg3OCwyMDg3OSwyMDg4MCwyMDg4MSwyMDg4MywyMDg4NCwyMDg4OCwyMDg5MCwyMDg5MywyMDg5NCwyMDg5''@;'; put 'put ''NSwyMDg5NywyMDg5OSwyMDkwMiwyMDkwMywyMDkwNCwyMDkwNSwyMDkwNiwyMDkwOSwyMDkxMCwyMDkxNiwyMDkyMCwyMDkyMSwyMDkyMiwyMDkyNiwyMDkyNywyMDkyOSwyMDkzMCwyMDkzMSwyMDkzMywyMDkzNiwyMDkzOCwyMDk0MSwyMDk0MiwyMDk0NCwyMDk0NiwyMDk0NywyMDk0OCwy''@;'; put 'put ''MDk0OSwyMDk1MCwyMDk1MSwyMDk1MiwyMDk1MywyMDk1NCwyMDk1NiwyMDk1OCwyMDk1OSwyMDk2MiwyMDk2MywyMDk2NSwyMDk2NiwyMDk2NywyMDk2OCwyMDk2OSwyMDk3MCwyMDk3MiwyMDk3NCwyMDk3NywyMDk3OCwyMDk4MCwyMDk4MywyMDk5MCwyMDk5NiwyMDk5NywyMTAwMSwyMTAw''@;'; put 'put ''MywyMTAwNCwyMTAwNywyMTAwOCwyMTAxMSwyMTAxMiwyMTAxMywyMTAyMCwyMTAyMiwyMTAyMywyMTAyNSwyMTAyNiwyMTAyNywyMTAyOSwyMTAzMCwyMTAzMSwyMTAzNCwyMTAzNiwyMTAzOSwyMTA0MSwyMTA0MiwyMTA0NCwyMTA0NSwyMTA1MiwyMTA1NCwyMTA2MCwyMTA2MSwyMTA2Miwy''@;'; put 'put ''MTA2MywyMTA2NCwyMTA2NSwyMTA2NywyMTA3MCwyMTA3MSwyMTA3NCwyMTA3NSwyMTA3NywyMTA3OSwyMTA4MCwyMTA4MSwyMTA4MiwyMTA4MywyMTA4NSwyMTA4NywyMTA4OCwyMTA5MCwyMTA5MSwyMTA5MiwyMTA5NCwyMTA5NiwyMTA5OSwyMTEwMCwyMTEwMSwyMTEwMiwyMTEwNCwyMTEw''@;'; put 'put ''NSwyMTEwNywyMTEwOCwyMTEwOSwyMTExMCwyMTExMSwyMTExMiwyMTExMywyMTExNCwyMTExNSwyMTExNiwyMTExOCwyMTEyMCwyMTEyMywyMTEyNCwyMTEyNSwyMTEyNiwyMTEyNywyMTEyOSwyMTEzMCwyMTEzMSwyMTEzMiwyMTEzMywyMTEzNCwyMTEzNSwyMTEzNywyMTEzOCwyMTE0MCwy''@;'; put 'put ''MTE0MSwyMTE0MiwyMTE0MywyMTE0NCwyMTE0NSwyMTE0NiwyMTE0OCwyMTE1NiwyMTE1NywyMTE1OCwyMTE1OSwyMTE2NiwyMTE2NywyMTE2OCwyMTE3MiwyMTE3MywyMTE3NCwyMTE3NSwyMTE3NiwyMTE3NywyMTE3OCwyMTE3OSwyMTE4MCwyMTE4MSwyMTE4NCwyMTE4NSwyMTE4NiwyMTE4''@;'; put 'put ''OCwyMTE4OSwyMTE5MCwyMTE5MiwyMTE5NCwyMTE5NiwyMTE5NywyMTE5OCwyMTE5OSwyMTIwMSwyMTIwMywyMTIwNCwyMTIwNSwyMTIwNywyMTIwOSwyMTIxMCwyMTIxMSwyMTIxMiwyMTIxMywyMTIxNCwyMTIxNiwyMTIxNywyMTIxOCwyMTIxOSwyMTIyMSwyMTIyMiwyMTIyMywyMTIyNCwy''@;'; put 'put ''MTIyNSwyMTIyNiwyMTIyNywyMTIyOCwyMTIyOSwyMTIzMCwyMTIzMSwyMTIzMywyMTIzNCwyMTIzNSwyMTIzNiwyMTIzNywyMTIzOCwyMTIzOSwyMTI0MCwyMTI0MywyMTI0NCwyMTI0NSwyMTI0OSwyMTI1MCwyMTI1MSwyMTI1MiwyMTI1NSwyMTI1NywyMTI1OCwyMTI1OSwyMTI2MCwyMTI2''@;'; put 'put ''MiwyMTI2NSwyMTI2NiwyMTI2NywyMTI2OCwyMTI3MiwyMTI3NSwyMTI3NiwyMTI3OCwyMTI3OSwyMTI4MiwyMTI4NCwyMTI4NSwyMTI4NywyMTI4OCwyMTI4OSwyMTI5MSwyMTI5MiwyMTI5MywyMTI5NSwyMTI5NiwyMTI5NywyMTI5OCwyMTI5OSwyMTMwMCwyMTMwMSwyMTMwMiwyMTMwMywy''@;'; put 'put ''MTMwNCwyMTMwOCwyMTMwOSwyMTMxMiwyMTMxNCwyMTMxNiwyMTMxOCwyMTMyMywyMTMyNCwyMTMyNSwyMTMyOCwyMTMzMiwyMTMzNiwyMTMzNywyMTMzOSwyMTM0MSwyMTM0OSwyMTM1MiwyMTM1NCwyMTM1NiwyMTM1NywyMTM2MiwyMTM2NiwyMTM2OSwyMTM3MSwyMTM3MiwyMTM3MywyMTM3''@;'; put 'put ''NCwyMTM3NiwyMTM3NywyMTM3OSwyMTM4MywyMTM4NCwyMTM4NiwyMTM5MCwyMTM5MSwyMTM5MiwyMTM5MywyMTM5NCwyMTM5NSwyMTM5NiwyMTM5OCwyMTM5OSwyMTQwMSwyMTQwMywyMTQwNCwyMTQwNiwyMTQwOCwyMTQwOSwyMTQxMiwyMTQxNSwyMTQxOCwyMTQxOSwyMTQyMCwyMTQyMSwy''@;'; put 'put ''MTQyMywyMTQyNCwyMTQyNSwyMTQyNiwyMTQyNywyMTQyOCwyMTQyOSwyMTQzMSwyMTQzMiwyMTQzMywyMTQzNCwyMTQzNiwyMTQzNywyMTQzOCwyMTQ0MCwyMTQ0MywyMTQ0NCwyMTQ0NSwyMTQ0NiwyMTQ0NywyMTQ1NCwyMTQ1NSwyMTQ1NiwyMTQ1OCwyMTQ1OSwyMTQ2MSwyMTQ2NiwyMTQ2''@;'; put 'put ''OCwyMTQ2OSwyMTQ3MCwyMTQ3MywyMTQ3NCwyMTQ3OSwyMTQ5MiwyMTQ5OCwyMTUwMiwyMTUwMywyMTUwNCwyMTUwNiwyMTUwOSwyMTUxMSwyMTUxNSwyMTUyNCwyMTUyOCwyMTUyOSwyMTUzMCwyMTUzMiwyMTUzOCwyMTU0MCwyMTU0MSwyMTU0NiwyMTU1MiwyMTU1NSwyMTU1OCwyMTU1OSwy''@;'; put 'put ''MTU2MiwyMTU2NSwyMTU2NywyMTU2OSwyMTU3MCwyMTU3MiwyMTU3MywyMTU3NSwyMTU3NywyMTU4MCwyMTU4MSwyMTU4MiwyMTU4MywyMTU4NSwyMTU5NCwyMTU5NywyMTU5OCwyMTU5OSwyMTYwMCwyMTYwMSwyMTYwMywyMTYwNSwyMTYwNywyMTYwOSwyMTYxMCwyMTYxMSwyMTYxMiwyMTYx''@;'; put 'put ''MywyMTYxNCwyMTYxNSwyMTYxNiwyMTYyMCwyMTYyNSwyMTYyNiwyMTYzMCwyMTYzMSwyMTYzMywyMTYzNSwyMTYzNywyMTYzOSwyMTY0MCwyMTY0MSwyMTY0MiwyMTY0NSwyMTY0OSwyMTY1MSwyMTY1NSwyMTY1NiwyMTY2MCwyMTY2MiwyMTY2MywyMTY2NCwyMTY2NSwyMTY2NiwyMTY2OSwy''@;'; put 'put ''MTY3OCwyMTY4MCwyMTY4MiwyMTY4NSwyMTY4NiwyMTY4NywyMTY4OSwyMTY5MCwyMTY5MiwyMTY5NCwyMTY5OSwyMTcwMSwyMTcwNiwyMTcwNywyMTcxOCwyMTcyMCwyMTcyMywyMTcyOCwyMTcyOSwyMTczMCwyMTczMSwyMTczMiwyMTczOSwyMTc0MCwyMTc0MywyMTc0NCwyMTc0NSwyMTc0''@;'; put 'put ''OCwyMTc0OSwyMTc1MCwyMTc1MSwyMTc1MiwyMTc1MywyMTc1NSwyMTc1OCwyMTc2MCwyMTc2MiwyMTc2MywyMTc2NCwyMTc2NSwyMTc2OCwyMTc3MCwyMTc3MSwyMTc3MiwyMTc3MywyMTc3NCwyMTc3OCwyMTc3OSwyMTc4MSwyMTc4MiwyMTc4MywyMTc4NCwyMTc4NSwyMTc4NiwyMTc4OCwy''@;'; put 'put ''MTc4OSwyMTc5MCwyMTc5MSwyMTc5MywyMTc5NywyMTc5OCwyMTgwMCwyMTgwMSwyMTgwMywyMTgwNSwyMTgxMCwyMTgxMiwyMTgxMywyMTgxNCwyMTgxNiwyMTgxNywyMTgxOCwyMTgxOSwyMTgyMSwyMTgyNCwyMTgyNiwyMTgyOSwyMTgzMSwyMTgzMiwyMTgzNSwyMTgzNiwyMTgzNywyMTgz''@;'; put 'put ''OCwyMTgzOSwyMTg0MSwyMTg0MiwyMTg0MywyMTg0NCwyMTg0NywyMTg0OCwyMTg0OSwyMTg1MCwyMTg1MSwyMTg1MywyMTg1NCwyMTg1NSwyMTg1NiwyMTg1OCwyMTg1OSwyMTg2NCwyMTg2NSwyMTg2NywyMTg3MSwyMTg3MiwyMTg3MywyMTg3NCwyMTg3NSwyMTg3NiwyMTg4MSwyMTg4Miwy''@;'; put 'put ''MTg4NSwyMTg4NywyMTg5MywyMTg5NCwyMTkwMCwyMTkwMSwyMTkwMiwyMTkwNCwyMTkwNiwyMTkwNywyMTkwOSwyMTkxMCwyMTkxMSwyMTkxNCwyMTkxNSwyMTkxOCwyMTkyMCwyMTkyMSwyMTkyMiwyMTkyMywyMTkyNCwyMTkyNSwyMTkyNiwyMTkyOCwyMTkyOSwyMTkzMCwyMTkzMSwyMTkz''@;'; put 'put ''MiwyMTkzMywyMTkzNCwyMTkzNSwyMTkzNiwyMTkzOCwyMTk0MCwyMTk0MiwyMTk0NCwyMTk0NiwyMTk0OCwyMTk1MSwyMTk1MiwyMTk1MywyMTk1NCwyMTk1NSwyMTk1OCwyMTk1OSwyMTk2MCwyMTk2MiwyMTk2MywyMTk2NiwyMTk2NywyMTk2OCwyMTk3MywyMTk3NSwyMTk3NiwyMTk3Nywy''@;'; put 'put ''MTk3OCwyMTk3OSwyMTk4MiwyMTk4NCwyMTk4NiwyMTk5MSwyMTk5MywyMTk5NywyMTk5OCwyMmUzLDIyMDAxLDIyMDA0LDIyMDA2LDIyMDA4LDIyMDA5LDIyMDEwLDIyMDExLDIyMDEyLDIyMDE1LDIyMDE4LDIyMDE5LDIyMDIwLDIyMDIxLDIyMDIyLDIyMDIzLDIyMDI2LDIyMDI3LDIyMDI5''@;'; put 'put ''LDIyMDMyLDIyMDMzLDIyMDM0LDIyMDM1LDIyMDM2LDIyMDM3LDIyMDM4LDIyMDM5LDIyMDQxLDIyMDQyLDIyMDQ0LDIyMDQ1LDIyMDQ4LDIyMDQ5LDIyMDUwLDIyMDUzLDIyMDU0LDIyMDU2LDIyMDU3LDIyMDU4LDIyMDU5LDIyMDYyLDIyMDYzLDIyMDY0LDIyMDY3LDIyMDY5LDIyMDcxLDIy''@;'; put 'put ''MDcyLDIyMDc0LDIyMDc2LDIyMDc3LDIyMDc4LDIyMDgwLDIyMDgxLDIyMDgyLDIyMDgzLDIyMDg0LDIyMDg1LDIyMDg2LDIyMDg3LDIyMDg4LDIyMDg5LDIyMDkwLDIyMDkxLDIyMDk1LDIyMDk2LDIyMDk3LDIyMDk4LDIyMDk5LDIyMTAxLDIyMTAyLDIyMTA2LDIyMTA3LDIyMTA5LDIyMTEw''@;'; put 'put ''LDIyMTExLDIyMTEyLDIyMTEzLDIyMTE1LDIyMTE3LDIyMTE4LDIyMTE5LDIyMTI1LDIyMTI2LDIyMTI3LDIyMTI4LDIyMTMwLDIyMTMxLDIyMTMyLDIyMTMzLDIyMTM1LDIyMTM2LDIyMTM3LDIyMTM4LDIyMTQxLDIyMTQyLDIyMTQzLDIyMTQ0LDIyMTQ1LDIyMTQ2LDIyMTQ3LDIyMTQ4LDIy''@;'; put 'put ''MTUxLDIyMTUyLDIyMTUzLDIyMTU0LDIyMTU1LDIyMTU2LDIyMTU3LDIyMTYwLDIyMTYxLDIyMTYyLDIyMTY0LDIyMTY1LDIyMTY2LDIyMTY3LDIyMTY4LDIyMTY5LDIyMTcwLDIyMTcxLDIyMTcyLDIyMTczLDIyMTc0LDIyMTc1LDIyMTc2LDIyMTc3LDIyMTc4LDIyMTgwLDIyMTgxLDIyMTgy''@;'; put 'put ''LDIyMTgzLDIyMTg0LDIyMTg1LDIyMTg2LDIyMTg3LDIyMTg4LDIyMTg5LDIyMTkwLDIyMTkyLDIyMTkzLDIyMTk0LDIyMTk1LDIyMTk2LDIyMTk3LDIyMTk4LDIyMjAwLDIyMjAxLDIyMjAyLDIyMjAzLDIyMjA1LDIyMjA2LDIyMjA3LDIyMjA4LDIyMjA5LDIyMjEwLDIyMjExLDIyMjEyLDIy''@;'; put 'put ''MjEzLDIyMjE0LDIyMjE1LDIyMjE2LDIyMjE3LDIyMjE5LDIyMjIwLDIyMjIxLDIyMjIyLDIyMjIzLDIyMjI0LDIyMjI1LDIyMjI2LDIyMjI3LDIyMjI5LDIyMjMwLDIyMjMyLDIyMjMzLDIyMjM2LDIyMjQzLDIyMjQ1LDIyMjQ2LDIyMjQ3LDIyMjQ4LDIyMjQ5LDIyMjUwLDIyMjUyLDIyMjU0''@;'; put 'put ''LDIyMjU1LDIyMjU4LDIyMjU5LDIyMjYyLDIyMjYzLDIyMjY0LDIyMjY3LDIyMjY4LDIyMjcyLDIyMjczLDIyMjc0LDIyMjc3LDIyMjc5LDIyMjgzLDIyMjg0LDIyMjg1LDIyMjg2LDIyMjg3LDIyMjg4LDIyMjg5LDIyMjkwLDIyMjkxLDIyMjkyLDIyMjkzLDIyMjk0LDIyMjk1LDIyMjk2LDIy''@;'; put 'put ''Mjk3LDIyMjk4LDIyMjk5LDIyMzAxLDIyMzAyLDIyMzA0LDIyMzA1LDIyMzA2LDIyMzA4LDIyMzA5LDIyMzEwLDIyMzExLDIyMzE1LDIyMzIxLDIyMzIyLDIyMzI0LDIyMzI1LDIyMzI2LDIyMzI3LDIyMzI4LDIyMzMyLDIyMzMzLDIyMzM1LDIyMzM3LDIyMzM5LDIyMzQwLDIyMzQxLDIyMzQy''@;'; put 'put ''LDIyMzQ0LDIyMzQ1LDIyMzQ3LDIyMzU0LDIyMzU1LDIyMzU2LDIyMzU3LDIyMzU4LDIyMzYwLDIyMzYxLDIyMzcwLDIyMzcxLDIyMzczLDIyMzc1LDIyMzgwLDIyMzgyLDIyMzg0LDIyMzg1LDIyMzg2LDIyMzg4LDIyMzg5LDIyMzkyLDIyMzkzLDIyMzk0LDIyMzk3LDIyMzk4LDIyMzk5LDIy''@;'; put 'put ''NDAwLDIyNDAxLDIyNDA3LDIyNDA4LDIyNDA5LDIyNDEwLDIyNDEzLDIyNDE0LDIyNDE1LDIyNDE2LDIyNDE3LDIyNDIwLDIyNDIxLDIyNDIyLDIyNDIzLDIyNDI0LDIyNDI1LDIyNDI2LDIyNDI4LDIyNDI5LDIyNDMwLDIyNDMxLDIyNDM3LDIyNDQwLDIyNDQyLDIyNDQ0LDIyNDQ3LDIyNDQ4''@;'; put 'put ''LDIyNDQ5LDIyNDUxLDIyNDUzLDIyNDU0LDIyNDU1LDIyNDU3LDIyNDU4LDIyNDU5LDIyNDYwLDIyNDYxLDIyNDYyLDIyNDYzLDIyNDY0LDIyNDY1LDIyNDY4LDIyNDY5LDIyNDcwLDIyNDcxLDIyNDcyLDIyNDczLDIyNDc0LDIyNDc2LDIyNDc3LDIyNDgwLDIyNDgxLDIyNDgzLDIyNDg2LDIy''@;'; put 'put ''NDg3LDIyNDkxLDIyNDkyLDIyNDk0LDIyNDk3LDIyNDk4LDIyNDk5LDIyNTAxLDIyNTAyLDIyNTAzLDIyNTA0LDIyNTA1LDIyNTA2LDIyNTA3LDIyNTA4LDIyNTEwLDIyNTEyLDIyNTEzLDIyNTE0LDIyNTE1LDIyNTE3LDIyNTE4LDIyNTE5LDIyNTIzLDIyNTI0LDIyNTI2LDIyNTI3LDIyNTI5''@;'; put 'put ''LDIyNTMxLDIyNTMyLDIyNTMzLDIyNTM2LDIyNTM3LDIyNTM4LDIyNTQwLDIyNTQyLDIyNTQzLDIyNTQ0LDIyNTQ2LDIyNTQ3LDIyNTQ4LDIyNTUwLDIyNTUxLDIyNTUyLDIyNTU0LDIyNTU1LDIyNTU2LDIyNTU3LDIyNTU5LDIyNTYyLDIyNTYzLDIyNTY1LDIyNTY2LDIyNTY3LDIyNTY4LDIy''@;'; put 'put ''NTY5LDIyNTcxLDIyNTcyLDIyNTczLDIyNTc0LDIyNTc1LDIyNTc3LDIyNTc4LDIyNTc5LDIyNTgwLDIyNTgyLDIyNTgzLDIyNTg0LDIyNTg1LDIyNTg2LDIyNTg3LDIyNTg4LDIyNTg5LDIyNTkwLDIyNTkxLDIyNTkyLDIyNTkzLDIyNTk0LDIyNTk1LDIyNTk3LDIyNTk4LDIyNTk5LDIyNjAw''@;'; put 'put ''LDIyNjAxLDIyNjAyLDIyNjAzLDIyNjA2LDIyNjA3LDIyNjA4LDIyNjEwLDIyNjExLDIyNjEzLDIyNjE0LDIyNjE1LDIyNjE3LDIyNjE4LDIyNjE5LDIyNjIwLDIyNjIxLDIyNjIzLDIyNjI0LDIyNjI1LDIyNjI2LDIyNjI3LDIyNjI4LDIyNjMwLDIyNjMxLDIyNjMyLDIyNjMzLDIyNjM0LDIy''@;'; put 'put ''NjM3LDIyNjM4LDIyNjM5LDIyNjQwLDIyNjQxLDIyNjQyLDIyNjQzLDIyNjQ0LDIyNjQ1LDIyNjQ2LDIyNjQ3LDIyNjQ4LDIyNjQ5LDIyNjUwLDIyNjUxLDIyNjUyLDIyNjUzLDIyNjU1LDIyNjU4LDIyNjYwLDIyNjYyLDIyNjYzLDIyNjY0LDIyNjY2LDIyNjY3LDIyNjY4LDIyNjY5LDIyNjcw''@;'; put 'put ''LDIyNjcxLDIyNjcyLDIyNjczLDIyNjc2LDIyNjc3LDIyNjc4LDIyNjc5LDIyNjgwLDIyNjgzLDIyNjg0LDIyNjg1LDIyNjg4LDIyNjg5LDIyNjkwLDIyNjkxLDIyNjkyLDIyNjkzLDIyNjk0LDIyNjk1LDIyNjk4LDIyNjk5LDIyNzAwLDIyNzAxLDIyNzAyLDIyNzAzLDIyNzA0LDIyNzA1LDIy''@;'; put 'put ''NzA2LDIyNzA3LDIyNzA4LDIyNzA5LDIyNzEwLDIyNzExLDIyNzEyLDIyNzEzLDIyNzE0LDIyNzE1LDIyNzE3LDIyNzE4LDIyNzE5LDIyNzIwLDIyNzIyLDIyNzIzLDIyNzI0LDIyNzI2LDIyNzI3LDIyNzI4LDIyNzI5LDIyNzMwLDIyNzMxLDIyNzMyLDIyNzMzLDIyNzM0LDIyNzM1LDIyNzM2''@;'; put 'put ''LDIyNzM4LDIyNzM5LDIyNzQwLDIyNzQyLDIyNzQzLDIyNzQ0LDIyNzQ1LDIyNzQ2LDIyNzQ3LDIyNzQ4LDIyNzQ5LDIyNzUwLDIyNzUxLDIyNzUyLDIyNzUzLDIyNzU0LDIyNzU1LDIyNzU3LDIyNzU4LDIyNzU5LDIyNzYwLDIyNzYxLDIyNzYyLDIyNzY1LDIyNzY3LDIyNzY5LDIyNzcwLDIy''@;'; put 'put ''NzcyLDIyNzczLDIyNzc1LDIyNzc2LDIyNzc4LDIyNzc5LDIyNzgwLDIyNzgxLDIyNzgyLDIyNzgzLDIyNzg0LDIyNzg1LDIyNzg3LDIyNzg5LDIyNzkwLDIyNzkyLDIyNzkzLDIyNzk0LDIyNzk1LDIyNzk2LDIyNzk4LDIyODAwLDIyODAxLDIyODAyLDIyODAzLDIyODA3LDIyODA4LDIyODEx''@;'; put 'put ''LDIyODEzLDIyODE0LDIyODE2LDIyODE3LDIyODE4LDIyODE5LDIyODIyLDIyODI0LDIyODI4LDIyODMyLDIyODM0LDIyODM1LDIyODM3LDIyODM4LDIyODQzLDIyODQ1LDIyODQ2LDIyODQ3LDIyODQ4LDIyODUxLDIyODUzLDIyODU0LDIyODU4LDIyODYwLDIyODYxLDIyODY0LDIyODY2LDIy''@;'; put 'put ''ODY3LDIyODczLDIyODc1LDIyODc2LDIyODc3LDIyODc4LDIyODc5LDIyODgxLDIyODgzLDIyODg0LDIyODg2LDIyODg3LDIyODg4LDIyODg5LDIyODkwLDIyODkxLDIyODkyLDIyODkzLDIyODk0LDIyODk1LDIyODk2LDIyODk3LDIyODk4LDIyOTAxLDIyOTAzLDIyOTA2LDIyOTA3LDIyOTA4''@;'; put 'put ''LDIyOTEwLDIyOTExLDIyOTEyLDIyOTE3LDIyOTIxLDIyOTIzLDIyOTI0LDIyOTI2LDIyOTI3LDIyOTI4LDIyOTI5LDIyOTMyLDIyOTMzLDIyOTM2LDIyOTM4LDIyOTM5LDIyOTQwLDIyOTQxLDIyOTQzLDIyOTQ0LDIyOTQ1LDIyOTQ2LDIyOTUwLDIyOTUxLDIyOTU2LDIyOTU3LDIyOTYwLDIy''@;'; put 'put ''OTYxLDIyOTYzLDIyOTY0LDIyOTY1LDIyOTY2LDIyOTY3LDIyOTY4LDIyOTcwLDIyOTcyLDIyOTczLDIyOTc1LDIyOTc2LDIyOTc3LDIyOTc4LDIyOTc5LDIyOTgwLDIyOTgxLDIyOTgzLDIyOTg0LDIyOTg1LDIyOTg4LDIyOTg5LDIyOTkwLDIyOTkxLDIyOTk3LDIyOTk4LDIzMDAxLDIzMDAz''@;'; put 'put ''LDIzMDA2LDIzMDA3LDIzMDA4LDIzMDA5LDIzMDEwLDIzMDEyLDIzMDE0LDIzMDE1LDIzMDE3LDIzMDE4LDIzMDE5LDIzMDIxLDIzMDIyLDIzMDIzLDIzMDI0LDIzMDI1LDIzMDI2LDIzMDI3LDIzMDI4LDIzMDI5LDIzMDMwLDIzMDMxLDIzMDMyLDIzMDM0LDIzMDM2LDIzMDM3LDIzMDM4LDIz''@;'; put 'put ''MDQwLDIzMDQyLDIzMDUwLDIzMDUxLDIzMDUzLDIzMDU0LDIzMDU1LDIzMDU2LDIzMDU4LDIzMDYwLDIzMDYxLDIzMDYyLDIzMDYzLDIzMDY1LDIzMDY2LDIzMDY3LDIzMDY5LDIzMDcwLDIzMDczLDIzMDc0LDIzMDc2LDIzMDc4LDIzMDc5LDIzMDgwLDIzMDgyLDIzMDgzLDIzMDg0LDIzMDg1''@;'; put 'put ''LDIzMDg2LDIzMDg3LDIzMDg4LDIzMDkxLDIzMDkzLDIzMDk1LDIzMDk2LDIzMDk3LDIzMDk4LDIzMDk5LDIzMTAxLDIzMTAyLDIzMTAzLDIzMTA1LDIzMTA2LDIzMTA3LDIzMTA4LDIzMTA5LDIzMTExLDIzMTEyLDIzMTE1LDIzMTE2LDIzMTE3LDIzMTE4LDIzMTE5LDIzMTIwLDIzMTIxLDIz''@;'; put 'put ''MTIyLDIzMTIzLDIzMTI0LDIzMTI2LDIzMTI3LDIzMTI4LDIzMTI5LDIzMTMxLDIzMTMyLDIzMTMzLDIzMTM0LDIzMTM1LDIzMTM2LDIzMTM3LDIzMTM5LDIzMTQwLDIzMTQxLDIzMTQyLDIzMTQ0LDIzMTQ1LDIzMTQ3LDIzMTQ4LDIzMTQ5LDIzMTUwLDIzMTUxLDIzMTUyLDIzMTUzLDIzMTU0''@;'; put 'put ''LDIzMTU1LDIzMTYwLDIzMTYxLDIzMTYzLDIzMTY0LDIzMTY1LDIzMTY2LDIzMTY4LDIzMTY5LDIzMTcwLDIzMTcxLDIzMTcyLDIzMTczLDIzMTc0LDIzMTc1LDIzMTc2LDIzMTc3LDIzMTc4LDIzMTc5LDIzMTgwLDIzMTgxLDIzMTgyLDIzMTgzLDIzMTg0LDIzMTg1LDIzMTg3LDIzMTg4LDIz''@;'; put 'put ''MTg5LDIzMTkwLDIzMTkxLDIzMTkyLDIzMTkzLDIzMTk2LDIzMTk3LDIzMTk4LDIzMTk5LDIzMjAwLDIzMjAxLDIzMjAyLDIzMjAzLDIzMjA0LDIzMjA1LDIzMjA2LDIzMjA3LDIzMjA4LDIzMjA5LDIzMjExLDIzMjEyLDIzMjEzLDIzMjE0LDIzMjE1LDIzMjE2LDIzMjE3LDIzMjIwLDIzMjIy''@;'; put 'put ''LDIzMjIzLDIzMjI1LDIzMjI2LDIzMjI3LDIzMjI4LDIzMjI5LDIzMjMxLDIzMjMyLDIzMjM1LDIzMjM2LDIzMjM3LDIzMjM4LDIzMjM5LDIzMjQwLDIzMjQyLDIzMjQzLDIzMjQ1LDIzMjQ2LDIzMjQ3LDIzMjQ4LDIzMjQ5LDIzMjUxLDIzMjUzLDIzMjU1LDIzMjU3LDIzMjU4LDIzMjU5LDIz''@;'; put 'put ''MjYxLDIzMjYyLDIzMjYzLDIzMjY2LDIzMjY4LDIzMjY5LDIzMjcxLDIzMjcyLDIzMjc0LDIzMjc2LDIzMjc3LDIzMjc4LDIzMjc5LDIzMjgwLDIzMjgyLDIzMjgzLDIzMjg0LDIzMjg1LDIzMjg2LDIzMjg3LDIzMjg4LDIzMjg5LDIzMjkwLDIzMjkxLDIzMjkyLDIzMjkzLDIzMjk0LDIzMjk1''@;'; put 'put ''LDIzMjk2LDIzMjk3LDIzMjk4LDIzMjk5LDIzMzAwLDIzMzAxLDIzMzAyLDIzMzAzLDIzMzA0LDIzMzA2LDIzMzA3LDIzMzA4LDIzMzA5LDIzMzEwLDIzMzExLDIzMzEyLDIzMzEzLDIzMzE0LDIzMzE1LDIzMzE2LDIzMzE3LDIzMzIwLDIzMzIxLDIzMzIyLDIzMzIzLDIzMzI0LDIzMzI1LDIz''@;'; put 'put ''MzI2LDIzMzI3LDIzMzI4LDIzMzI5LDIzMzMwLDIzMzMxLDIzMzMyLDIzMzMzLDIzMzM0LDIzMzM1LDIzMzM2LDIzMzM3LDIzMzM4LDIzMzM5LDIzMzQwLDIzMzQxLDIzMzQyLDIzMzQzLDIzMzQ0LDIzMzQ1LDIzMzQ3LDIzMzQ5LDIzMzUwLDIzMzUyLDIzMzUzLDIzMzU0LDIzMzU1LDIzMzU2''@;'; put 'put ''LDIzMzU3LDIzMzU4LDIzMzU5LDIzMzYxLDIzMzYyLDIzMzYzLDIzMzY0LDIzMzY1LDIzMzY2LDIzMzY3LDIzMzY4LDIzMzY5LDIzMzcwLDIzMzcxLDIzMzcyLDIzMzczLDIzMzc0LDIzMzc1LDIzMzc4LDIzMzgyLDIzMzkwLDIzMzkyLDIzMzkzLDIzMzk5LDIzNDAwLDIzNDAzLDIzNDA1LDIz''@;'; put 'put ''NDA2LDIzNDA3LDIzNDEwLDIzNDEyLDIzNDE0LDIzNDE1LDIzNDE2LDIzNDE3LDIzNDE5LDIzNDIwLDIzNDIyLDIzNDIzLDIzNDI2LDIzNDMwLDIzNDM0LDIzNDM3LDIzNDM4LDIzNDQwLDIzNDQxLDIzNDQyLDIzNDQ0LDIzNDQ2LDIzNDU1LDIzNDYzLDIzNDY0LDIzNDY1LDIzNDY4LDIzNDY5''@;'; put 'put ''LDIzNDcwLDIzNDcxLDIzNDczLDIzNDc0LDIzNDc5LDIzNDgyLDIzNDgzLDIzNDg0LDIzNDg4LDIzNDg5LDIzNDkxLDIzNDk2LDIzNDk3LDIzNDk4LDIzNDk5LDIzNTAxLDIzNTAyLDIzNTAzLDIzNTA1LDIzNTA4LDIzNTA5LDIzNTEwLDIzNTExLDIzNTEyLDIzNTEzLDIzNTE0LDIzNTE1LDIz''@;'; put 'put ''NTE2LDIzNTIwLDIzNTIyLDIzNTIzLDIzNTI2LDIzNTI3LDIzNTI5LDIzNTMwLDIzNTMxLDIzNTMyLDIzNTMzLDIzNTM1LDIzNTM3LDIzNTM4LDIzNTM5LDIzNTQwLDIzNTQxLDIzNTQyLDIzNTQzLDIzNTQ5LDIzNTUwLDIzNTUyLDIzNTU0LDIzNTU1LDIzNTU3LDIzNTU5LDIzNTYwLDIzNTYz''@;'; put 'put ''LDIzNTY0LDIzNTY1LDIzNTY2LDIzNTY4LDIzNTcwLDIzNTcxLDIzNTc1LDIzNTc3LDIzNTc5LDIzNTgyLDIzNTgzLDIzNTg0LDIzNTg1LDIzNTg3LDIzNTkwLDIzNTkyLDIzNTkzLDIzNTk0LDIzNTk1LDIzNTk3LDIzNTk4LDIzNTk5LDIzNjAwLDIzNjAyLDIzNjAzLDIzNjA1LDIzNjA2LDIz''@;'; put 'put ''NjA3LDIzNjE5LDIzNjIwLDIzNjIyLDIzNjIzLDIzNjI4LDIzNjI5LDIzNjM0LDIzNjM1LDIzNjM2LDIzNjM4LDIzNjM5LDIzNjQwLDIzNjQyLDIzNjQzLDIzNjQ0LDIzNjQ1LDIzNjQ3LDIzNjUwLDIzNjUyLDIzNjU1LDIzNjU2LDIzNjU3LDIzNjU4LDIzNjU5LDIzNjYwLDIzNjYxLDIzNjY0''@;'; put 'put ''LDIzNjY2LDIzNjY3LDIzNjY4LDIzNjY5LDIzNjcwLDIzNjcxLDIzNjcyLDIzNjc1LDIzNjc2LDIzNjc3LDIzNjc4LDIzNjgwLDIzNjgzLDIzNjg0LDIzNjg1LDIzNjg2LDIzNjg3LDIzNjg5LDIzNjkwLDIzNjkxLDIzNjk0LDIzNjk1LDIzNjk4LDIzNjk5LDIzNzAxLDIzNzA5LDIzNzEwLDIz''@;'; put 'put ''NzExLDIzNzEyLDIzNzEzLDIzNzE2LDIzNzE3LDIzNzE4LDIzNzE5LDIzNzIwLDIzNzIyLDIzNzI2LDIzNzI3LDIzNzI4LDIzNzMwLDIzNzMyLDIzNzM0LDIzNzM3LDIzNzM4LDIzNzM5LDIzNzQwLDIzNzQyLDIzNzQ0LDIzNzQ2LDIzNzQ3LDIzNzQ5LDIzNzUwLDIzNzUxLDIzNzUyLDIzNzUz''@;'; put 'put ''LDIzNzU0LDIzNzU2LDIzNzU3LDIzNzU4LDIzNzU5LDIzNzYwLDIzNzYxLDIzNzYzLDIzNzY0LDIzNzY1LDIzNzY2LDIzNzY3LDIzNzY4LDIzNzcwLDIzNzcxLDIzNzcyLDIzNzczLDIzNzc0LDIzNzc1LDIzNzc2LDIzNzc4LDIzNzc5LDIzNzgzLDIzNzg1LDIzNzg3LDIzNzg4LDIzNzkwLDIz''@;'; put 'put ''NzkxLDIzNzkzLDIzNzk0LDIzNzk1LDIzNzk2LDIzNzk3LDIzNzk4LDIzNzk5LDIzODAwLDIzODAxLDIzODAyLDIzODA0LDIzODA1LDIzODA2LDIzODA3LDIzODA4LDIzODA5LDIzODEyLDIzODEzLDIzODE2LDIzODE3LDIzODE4LDIzODE5LDIzODIwLDIzODIxLDIzODIzLDIzODI0LDIzODI1''@;'; put 'put ''LDIzODI2LDIzODI3LDIzODI5LDIzODMxLDIzODMyLDIzODMzLDIzODM0LDIzODM2LDIzODM3LDIzODM5LDIzODQwLDIzODQxLDIzODQyLDIzODQzLDIzODQ1LDIzODQ4LDIzODUwLDIzODUxLDIzODUyLDIzODU1LDIzODU2LDIzODU3LDIzODU4LDIzODU5LDIzODYxLDIzODYyLDIzODYzLDIz''@;'; put 'put ''ODY0LDIzODY1LDIzODY2LDIzODY3LDIzODY4LDIzODcxLDIzODcyLDIzODczLDIzODc0LDIzODc1LDIzODc2LDIzODc3LDIzODc4LDIzODgwLDIzODgxLDIzODg1LDIzODg2LDIzODg3LDIzODg4LDIzODg5LDIzODkwLDIzODkxLDIzODkyLDIzODkzLDIzODk0LDIzODk1LDIzODk3LDIzODk4''@;'; put 'put ''LDIzOTAwLDIzOTAyLDIzOTAzLDIzOTA0LDIzOTA1LDIzOTA2LDIzOTA3LDIzOTA4LDIzOTA5LDIzOTEwLDIzOTExLDIzOTEyLDIzOTE0LDIzOTE3LDIzOTE4LDIzOTIwLDIzOTIxLDIzOTIyLDIzOTIzLDIzOTI1LDIzOTI2LDIzOTI3LDIzOTI4LDIzOTI5LDIzOTMwLDIzOTMxLDIzOTMyLDIz''@;'; put 'put ''OTMzLDIzOTM0LDIzOTM1LDIzOTM2LDIzOTM3LDIzOTM5LDIzOTQwLDIzOTQxLDIzOTQyLDIzOTQzLDIzOTQ0LDIzOTQ1LDIzOTQ2LDIzOTQ3LDIzOTQ4LDIzOTQ5LDIzOTUwLDIzOTUxLDIzOTUyLDIzOTUzLDIzOTU0LDIzOTU1LDIzOTU2LDIzOTU3LDIzOTU4LDIzOTU5LDIzOTYwLDIzOTYy''@;'; put 'put ''LDIzOTYzLDIzOTY0LDIzOTY2LDIzOTY3LDIzOTY4LDIzOTY5LDIzOTcwLDIzOTcxLDIzOTcyLDIzOTczLDIzOTc0LDIzOTc1LDIzOTc2LDIzOTc3LDIzOTc4LDIzOTc5LDIzOTgwLDIzOTgxLDIzOTgyLDIzOTgzLDIzOTg0LDIzOTg1LDIzOTg2LDIzOTg3LDIzOTg4LDIzOTg5LDIzOTkwLDIz''@;'; put 'put ''OTkyLDIzOTkzLDIzOTk0LDIzOTk1LDIzOTk2LDIzOTk3LDIzOTk4LDIzOTk5LDI0ZTMsMjQwMDEsMjQwMDIsMjQwMDMsMjQwMDQsMjQwMDYsMjQwMDcsMjQwMDgsMjQwMDksMjQwMTAsMjQwMTEsMjQwMTIsMjQwMTQsMjQwMTUsMjQwMTYsMjQwMTcsMjQwMTgsMjQwMTksMjQwMjAsMjQwMjEs''@;'; put 'put ''MjQwMjIsMjQwMjMsMjQwMjQsMjQwMjUsMjQwMjYsMjQwMjgsMjQwMzEsMjQwMzIsMjQwMzUsMjQwMzYsMjQwNDIsMjQwNDQsMjQwNDUsMjQwNDgsMjQwNTMsMjQwNTQsMjQwNTYsMjQwNTcsMjQwNTgsMjQwNTksMjQwNjAsMjQwNjMsMjQwNjQsMjQwNjgsMjQwNzEsMjQwNzMsMjQwNzQsMjQw''@;'; put 'put ''NzUsMjQwNzcsMjQwNzgsMjQwODIsMjQwODMsMjQwODcsMjQwOTQsMjQwOTUsMjQwOTYsMjQwOTcsMjQwOTgsMjQwOTksMjQxMDAsMjQxMDEsMjQxMDQsMjQxMDUsMjQxMDYsMjQxMDcsMjQxMDgsMjQxMTEsMjQxMTIsMjQxMTQsMjQxMTUsMjQxMTYsMjQxMTcsMjQxMTgsMjQxMjEsMjQxMjIs''@;'; put 'put ''MjQxMjYsMjQxMjcsMjQxMjgsMjQxMjksMjQxMzEsMjQxMzQsMjQxMzUsMjQxMzYsMjQxMzcsMjQxMzgsMjQxMzksMjQxNDEsMjQxNDIsMjQxNDMsMjQxNDQsMjQxNDUsMjQxNDYsMjQxNDcsMjQxNTAsMjQxNTEsMjQxNTIsMjQxNTMsMjQxNTQsMjQxNTYsMjQxNTcsMjQxNTksMjQxNjAsMjQx''@;'; put 'put ''NjMsMjQxNjQsMjQxNjUsMjQxNjYsMjQxNjcsMjQxNjgsMjQxNjksMjQxNzAsMjQxNzEsMjQxNzIsMjQxNzMsMjQxNzQsMjQxNzUsMjQxNzYsMjQxNzcsMjQxODEsMjQxODMsMjQxODUsMjQxOTAsMjQxOTMsMjQxOTQsMjQxOTUsMjQxOTcsMjQyMDAsMjQyMDEsMjQyMDQsMjQyMDUsMjQyMDYs''@;'; put 'put ''MjQyMTAsMjQyMTYsMjQyMTksMjQyMjEsMjQyMjUsMjQyMjYsMjQyMjcsMjQyMjgsMjQyMzIsMjQyMzMsMjQyMzQsMjQyMzUsMjQyMzYsMjQyMzgsMjQyMzksMjQyNDAsMjQyNDEsMjQyNDIsMjQyNDQsMjQyNTAsMjQyNTEsMjQyNTIsMjQyNTMsMjQyNTUsMjQyNTYsMjQyNTcsMjQyNTgsMjQy''@;'; put 'put ''NTksMjQyNjAsMjQyNjEsMjQyNjIsMjQyNjMsMjQyNjQsMjQyNjcsMjQyNjgsMjQyNjksMjQyNzAsMjQyNzEsMjQyNzIsMjQyNzYsMjQyNzcsMjQyNzksMjQyODAsMjQyODEsMjQyODIsMjQyODQsMjQyODUsMjQyODYsMjQyODcsMjQyODgsMjQyODksMjQyOTAsMjQyOTEsMjQyOTIsMjQyOTMs''@;'; put 'put ''MjQyOTQsMjQyOTUsMjQyOTcsMjQyOTksMjQzMDAsMjQzMDEsMjQzMDIsMjQzMDMsMjQzMDQsMjQzMDUsMjQzMDYsMjQzMDcsMjQzMDksMjQzMTIsMjQzMTMsMjQzMTUsMjQzMTYsMjQzMTcsMjQzMjUsMjQzMjYsMjQzMjcsMjQzMjksMjQzMzIsMjQzMzMsMjQzMzQsMjQzMzYsMjQzMzgsMjQz''@;'; put 'put ''NDAsMjQzNDIsMjQzNDUsMjQzNDYsMjQzNDgsMjQzNDksMjQzNTAsMjQzNTMsMjQzNTQsMjQzNTUsMjQzNTYsMjQzNjAsMjQzNjMsMjQzNjQsMjQzNjYsMjQzNjgsMjQzNzAsMjQzNzEsMjQzNzIsMjQzNzMsMjQzNzQsMjQzNzUsMjQzNzYsMjQzNzksMjQzODEsMjQzODIsMjQzODMsMjQzODUs''@;'; put 'put ''MjQzODYsMjQzODcsMjQzODgsMjQzODksMjQzOTAsMjQzOTEsMjQzOTIsMjQzOTMsMjQzOTQsMjQzOTUsMjQzOTYsMjQzOTcsMjQzOTgsMjQzOTksMjQ0MDEsMjQ0MDQsMjQ0MDksMjQ0MTAsMjQ0MTEsMjQ0MTIsMjQ0MTQsMjQ0MTUsMjQ0MTYsMjQ0MTksMjQ0MjEsMjQ0MjMsMjQ0MjQsMjQ0''@;'; put 'put ''MjcsMjQ0MzAsMjQ0MzEsMjQ0MzQsMjQ0MzYsMjQ0MzcsMjQ0MzgsMjQ0NDAsMjQ0NDIsMjQ0NDUsMjQ0NDYsMjQ0NDcsMjQ0NTEsMjQ0NTQsMjQ0NjEsMjQ0NjIsMjQ0NjMsMjQ0NjUsMjQ0NjcsMjQ0NjgsMjQ0NzAsMjQ0NzQsMjQ0NzUsMjQ0NzcsMjQ0NzgsMjQ0NzksMjQ0ODAsMjQ0ODIs''@;'; put 'put ''MjQ0ODMsMjQ0ODQsMjQ0ODUsMjQ0ODYsMjQ0ODcsMjQ0ODksMjQ0OTEsMjQ0OTIsMjQ0OTUsMjQ0OTYsMjQ0OTcsMjQ0OTgsMjQ0OTksMjQ1MDAsMjQ1MDIsMjQ1MDQsMjQ1MDUsMjQ1MDYsMjQ1MDcsMjQ1MTAsMjQ1MTEsMjQ1MTIsMjQ1MTMsMjQ1MTQsMjQ1MTksMjQ1MjAsMjQ1MjIsMjQ1''@;'; put 'put ''MjMsMjQ1MjYsMjQ1MzEsMjQ1MzIsMjQ1MzMsMjQ1MzgsMjQ1MzksMjQ1NDAsMjQ1NDIsMjQ1NDMsMjQ1NDYsMjQ1NDcsMjQ1NDksMjQ1NTAsMjQ1NTIsMjQ1NTMsMjQ1NTYsMjQ1NTksMjQ1NjAsMjQ1NjIsMjQ1NjMsMjQ1NjQsMjQ1NjYsMjQ1NjcsMjQ1NjksMjQ1NzAsMjQ1NzIsMjQ1ODMs''@;'; put 'put ''MjQ1ODQsMjQ1ODUsMjQ1ODcsMjQ1ODgsMjQ1OTIsMjQ1OTMsMjQ1OTUsMjQ1OTksMjQ2MDAsMjQ2MDIsMjQ2MDYsMjQ2MDcsMjQ2MTAsMjQ2MTEsMjQ2MTIsMjQ2MjAsMjQ2MjEsMjQ2MjIsMjQ2MjQsMjQ2MjUsMjQ2MjYsMjQ2MjcsMjQ2MjgsMjQ2MzAsMjQ2MzEsMjQ2MzIsMjQ2MzMsMjQ2''@;'; put 'put ''MzQsMjQ2MzcsMjQ2MzgsMjQ2NDAsMjQ2NDQsMjQ2NDUsMjQ2NDYsMjQ2NDcsMjQ2NDgsMjQ2NDksMjQ2NTAsMjQ2NTIsMjQ2NTQsMjQ2NTUsMjQ2NTcsMjQ2NTksMjQ2NjAsMjQ2NjIsMjQ2NjMsMjQ2NjQsMjQ2NjcsMjQ2NjgsMjQ2NzAsMjQ2NzEsMjQ2NzIsMjQ2NzMsMjQ2NzcsMjQ2Nzgs''@;'; put 'put ''MjQ2ODYsMjQ2ODksMjQ2OTAsMjQ2OTIsMjQ2OTMsMjQ2OTUsMjQ3MDIsMjQ3MDQsMjQ3MDUsMjQ3MDYsMjQ3MDksMjQ3MTAsMjQ3MTEsMjQ3MTIsMjQ3MTQsMjQ3MTUsMjQ3MTgsMjQ3MTksMjQ3MjAsMjQ3MjEsMjQ3MjMsMjQ3MjUsMjQ3MjcsMjQ3MjgsMjQ3MjksMjQ3MzIsMjQ3MzQsMjQ3''@;'; put 'put ''MzcsMjQ3MzgsMjQ3NDAsMjQ3NDEsMjQ3NDMsMjQ3NDUsMjQ3NDYsMjQ3NTAsMjQ3NTIsMjQ3NTUsMjQ3NTcsMjQ3NTgsMjQ3NTksMjQ3NjEsMjQ3NjIsMjQ3NjUsMjQ3NjYsMjQ3NjcsMjQ3NjgsMjQ3NjksMjQ3NzAsMjQ3NzEsMjQ3NzIsMjQ3NzUsMjQ3NzYsMjQ3NzcsMjQ3ODAsMjQ3ODEs''@;'; put 'put ''MjQ3ODIsMjQ3ODMsMjQ3ODQsMjQ3ODYsMjQ3ODcsMjQ3ODgsMjQ3OTAsMjQ3OTEsMjQ3OTMsMjQ3OTUsMjQ3OTgsMjQ4MDEsMjQ4MDIsMjQ4MDMsMjQ4MDQsMjQ4MDUsMjQ4MTAsMjQ4MTcsMjQ4MTgsMjQ4MjEsMjQ4MjMsMjQ4MjQsMjQ4MjcsMjQ4MjgsMjQ4MjksMjQ4MzAsMjQ4MzEsMjQ4''@;'; put 'put ''MzQsMjQ4MzUsMjQ4MzYsMjQ4MzcsMjQ4MzksMjQ4NDIsMjQ4NDMsMjQ4NDQsMjQ4NDgsMjQ4NDksMjQ4NTAsMjQ4NTEsMjQ4NTIsMjQ4NTQsMjQ4NTUsMjQ4NTYsMjQ4NTcsMjQ4NTksMjQ4NjAsMjQ4NjEsMjQ4NjIsMjQ4NjUsMjQ4NjYsMjQ4NjksMjQ4NzIsMjQ4NzMsMjQ4NzQsMjQ4NzYs''@;'; put 'put ''MjQ4NzcsMjQ4NzgsMjQ4NzksMjQ4ODAsMjQ4ODEsMjQ4ODIsMjQ4ODMsMjQ4ODQsMjQ4ODUsMjQ4ODYsMjQ4ODcsMjQ4ODgsMjQ4ODksMjQ4OTAsMjQ4OTEsMjQ4OTIsMjQ4OTMsMjQ4OTQsMjQ4OTYsMjQ4OTcsMjQ4OTgsMjQ4OTksMjQ5MDAsMjQ5MDEsMjQ5MDIsMjQ5MDMsMjQ5MDUsMjQ5''@;'; put 'put ''MDcsMjQ5MDksMjQ5MTEsMjQ5MTIsMjQ5MTQsMjQ5MTUsMjQ5MTYsMjQ5MTgsMjQ5MTksMjQ5MjAsMjQ5MjEsMjQ5MjIsMjQ5MjMsMjQ5MjQsMjQ5MjYsMjQ5MjcsMjQ5MjgsMjQ5MjksMjQ5MzEsMjQ5MzIsMjQ5MzMsMjQ5MzQsMjQ5MzcsMjQ5MzgsMjQ5MzksMjQ5NDAsMjQ5NDEsMjQ5NDIs''@;'; put 'put ''MjQ5NDMsMjQ5NDUsMjQ5NDYsMjQ5NDcsMjQ5NDgsMjQ5NTAsMjQ5NTIsMjQ5NTMsMjQ5NTQsMjQ5NTUsMjQ5NTYsMjQ5NTcsMjQ5NTgsMjQ5NTksMjQ5NjAsMjQ5NjEsMjQ5NjIsMjQ5NjMsMjQ5NjQsMjQ5NjUsMjQ5NjYsMjQ5NjcsMjQ5NjgsMjQ5NjksMjQ5NzAsMjQ5NzIsMjQ5NzMsMjQ5''@;'; put 'put ''NzUsMjQ5NzYsMjQ5NzcsMjQ5NzgsMjQ5NzksMjQ5ODEsMjQ5ODIsMjQ5ODMsMjQ5ODQsMjQ5ODUsMjQ5ODYsMjQ5ODcsMjQ5ODgsMjQ5OTAsMjQ5OTEsMjQ5OTIsMjQ5OTMsMjQ5OTQsMjQ5OTUsMjQ5OTYsMjQ5OTcsMjQ5OTgsMjUwMDIsMjUwMDMsMjUwMDUsMjUwMDYsMjUwMDcsMjUwMDgs''@;'; put 'put ''MjUwMDksMjUwMTAsMjUwMTEsMjUwMTIsMjUwMTMsMjUwMTQsMjUwMTYsMjUwMTcsMjUwMTgsMjUwMTksMjUwMjAsMjUwMjEsMjUwMjMsMjUwMjQsMjUwMjUsMjUwMjcsMjUwMjgsMjUwMjksMjUwMzAsMjUwMzEsMjUwMzMsMjUwMzYsMjUwMzcsMjUwMzgsMjUwMzksMjUwNDAsMjUwNDMsMjUw''@;'; put 'put ''NDUsMjUwNDYsMjUwNDcsMjUwNDgsMjUwNDksMjUwNTAsMjUwNTEsMjUwNTIsMjUwNTMsMjUwNTQsMjUwNTUsMjUwNTYsMjUwNTcsMjUwNTgsMjUwNTksMjUwNjAsMjUwNjEsMjUwNjMsMjUwNjQsMjUwNjUsMjUwNjYsMjUwNjcsMjUwNjgsMjUwNjksMjUwNzAsMjUwNzEsMjUwNzIsMjUwNzMs''@;'; put 'put ''MjUwNzQsMjUwNzUsMjUwNzYsMjUwNzgsMjUwNzksMjUwODAsMjUwODEsMjUwODIsMjUwODMsMjUwODQsMjUwODUsMjUwODYsMjUwODgsMjUwODksMjUwOTAsMjUwOTEsMjUwOTIsMjUwOTMsMjUwOTUsMjUwOTcsMjUxMDcsMjUxMDgsMjUxMTMsMjUxMTYsMjUxMTcsMjUxMTgsMjUxMjAsMjUx''@;'; put 'put ''MjMsMjUxMjYsMjUxMjcsMjUxMjgsMjUxMjksMjUxMzEsMjUxMzMsMjUxMzUsMjUxMzYsMjUxMzcsMjUxMzgsMjUxNDEsMjUxNDIsMjUxNDQsMjUxNDUsMjUxNDYsMjUxNDcsMjUxNDgsMjUxNTQsMjUxNTYsMjUxNTcsMjUxNTgsMjUxNjIsMjUxNjcsMjUxNjgsMjUxNzMsMjUxNzQsMjUxNzUs''@;'; put 'put ''MjUxNzcsMjUxNzgsMjUxODAsMjUxODEsMjUxODIsMjUxODMsMjUxODQsMjUxODUsMjUxODYsMjUxODgsMjUxODksMjUxOTIsMjUyMDEsMjUyMDIsMjUyMDQsMjUyMDUsMjUyMDcsMjUyMDgsMjUyMTAsMjUyMTEsMjUyMTMsMjUyMTcsMjUyMTgsMjUyMTksMjUyMjEsMjUyMjIsMjUyMjMsMjUy''@;'; put 'put ''MjQsMjUyMjcsMjUyMjgsMjUyMjksMjUyMzAsMjUyMzEsMjUyMzIsMjUyMzYsMjUyNDEsMjUyNDQsMjUyNDUsMjUyNDYsMjUyNTEsMjUyNTQsMjUyNTUsMjUyNTcsMjUyNTgsMjUyNjEsMjUyNjIsMjUyNjMsMjUyNjQsMjUyNjYsMjUyNjcsMjUyNjgsMjUyNzAsMjUyNzEsMjUyNzIsMjUyNzQs''@;'; put 'put ''MjUyNzgsMjUyODAsMjUyODEsMjUyODMsMjUyOTEsMjUyOTUsMjUyOTcsMjUzMDEsMjUzMDksMjUzMTAsMjUzMTIsMjUzMTMsMjUzMTYsMjUzMjIsMjUzMjMsMjUzMjgsMjUzMzAsMjUzMzMsMjUzMzYsMjUzMzcsMjUzMzgsMjUzMzksMjUzNDQsMjUzNDcsMjUzNDgsMjUzNDksMjUzNTAsMjUz''@;'; put 'put ''NTQsMjUzNTUsMjUzNTYsMjUzNTcsMjUzNTksMjUzNjAsMjUzNjIsMjUzNjMsMjUzNjQsMjUzNjUsMjUzNjcsMjUzNjgsMjUzNjksMjUzNzIsMjUzODIsMjUzODMsMjUzODUsMjUzODgsMjUzODksMjUzOTAsMjUzOTIsMjUzOTMsMjUzOTUsMjUzOTYsMjUzOTcsMjUzOTgsMjUzOTksMjU0MDAs''@;'; put 'put ''MjU0MDMsMjU0MDQsMjU0MDYsMjU0MDcsMjU0MDgsMjU0MDksMjU0MTIsMjU0MTUsMjU0MTYsMjU0MTgsMjU0MjUsMjU0MjYsMjU0MjcsMjU0MjgsMjU0MzAsMjU0MzEsMjU0MzIsMjU0MzMsMjU0MzQsMjU0MzUsMjU0MzYsMjU0MzcsMjU0NDAsMjU0NDQsMjU0NDUsMjU0NDYsMjU0NDgsMjU0''@;'; put 'put ''NTAsMjU0NTEsMjU0NTIsMjU0NTUsMjU0NTYsMjU0NTgsMjU0NTksMjU0NjAsMjU0NjEsMjU0NjQsMjU0NjUsMjU0NjgsMjU0NjksMjU0NzAsMjU0NzEsMjU0NzMsMjU0NzUsMjU0NzYsMjU0NzcsMjU0NzgsMjU0ODMsMjU0ODUsMjU0ODksMjU0OTEsMjU0OTIsMjU0OTMsMjU0OTUsMjU0OTcs''@;'; put 'put ''MjU0OTgsMjU0OTksMjU1MDAsMjU1MDEsMjU1MDIsMjU1MDMsMjU1MDUsMjU1MDgsMjU1MTAsMjU1MTUsMjU1MTksMjU1MjEsMjU1MjIsMjU1MjUsMjU1MjYsMjU1MjksMjU1MzEsMjU1MzMsMjU1MzUsMjU1MzYsMjU1MzcsMjU1MzgsMjU1MzksMjU1NDEsMjU1NDMsMjU1NDQsMjU1NDYsMjU1''@;'; put 'put ''NDcsMjU1NDgsMjU1NTMsMjU1NTUsMjU1NTYsMjU1NTcsMjU1NTksMjU1NjAsMjU1NjEsMjU1NjIsMjU1NjMsMjU1NjQsMjU1NjUsMjU1NjcsMjU1NzAsMjU1NzIsMjU1NzMsMjU1NzQsMjU1NzUsMjU1NzYsMjU1NzksMjU1ODAsMjU1ODIsMjU1ODMsMjU1ODQsMjU1ODUsMjU1ODcsMjU1ODks''@;'; put 'put ''MjU1OTEsMjU1OTMsMjU1OTQsMjU1OTUsMjU1OTYsMjU1OTgsMjU2MDMsMjU2MDQsMjU2MDYsMjU2MDcsMjU2MDgsMjU2MDksMjU2MTAsMjU2MTMsMjU2MTQsMjU2MTcsMjU2MTgsMjU2MjEsMjU2MjIsMjU2MjMsMjU2MjQsMjU2MjUsMjU2MjYsMjU2MjksMjU2MzEsMjU2MzQsMjU2MzUsMjU2''@;'; put 'put ''MzYsMjU2MzcsMjU2MzksMjU2NDAsMjU2NDEsMjU2NDMsMjU2NDYsMjU2NDcsMjU2NDgsMjU2NDksMjU2NTAsMjU2NTEsMjU2NTMsMjU2NTQsMjU2NTUsMjU2NTYsMjU2NTcsMjU2NTksMjU2NjAsMjU2NjIsMjU2NjQsMjU2NjYsMjU2NjcsMjU2NzMsMjU2NzUsMjU2NzYsMjU2NzcsMjU2Nzgs''@;'; put 'put ''MjU2NzksMjU2ODAsMjU2ODEsMjU2ODMsMjU2ODUsMjU2ODYsMjU2ODcsMjU2ODksMjU2OTAsMjU2OTEsMjU2OTIsMjU2OTMsMjU2OTUsMjU2OTYsMjU2OTcsMjU2OTgsMjU2OTksMjU3MDAsMjU3MDEsMjU3MDIsMjU3MDQsMjU3MDYsMjU3MDcsMjU3MDgsMjU3MTAsMjU3MTEsMjU3MTIsMjU3''@;'; put 'put ''MTMsMjU3MTQsMjU3MTUsMjU3MTYsMjU3MTcsMjU3MTgsMjU3MTksMjU3MjMsMjU3MjQsMjU3MjUsMjU3MjYsMjU3MjcsMjU3MjgsMjU3MjksMjU3MzEsMjU3MzQsMjU3MzYsMjU3MzcsMjU3MzgsMjU3MzksMjU3NDAsMjU3NDEsMjU3NDIsMjU3NDMsMjU3NDQsMjU3NDcsMjU3NDgsMjU3NTEs''@;'; put 'put ''MjU3NTIsMjU3NTQsMjU3NTUsMjU3NTYsMjU3NTcsMjU3NTksMjU3NjAsMjU3NjEsMjU3NjIsMjU3NjMsMjU3NjUsMjU3NjYsMjU3NjcsMjU3NjgsMjU3NzAsMjU3NzEsMjU3NzUsMjU3NzcsMjU3NzgsMjU3NzksMjU3ODAsMjU3ODIsMjU3ODUsMjU3ODcsMjU3ODksMjU3OTAsMjU3OTEsMjU3''@;'; put 'put ''OTMsMjU3OTUsMjU3OTYsMjU3OTgsMjU3OTksMjU4MDAsMjU4MDEsMjU4MDIsMjU4MDMsMjU4MDQsMjU4MDcsMjU4MDksMjU4MTEsMjU4MTIsMjU4MTMsMjU4MTQsMjU4MTcsMjU4MTgsMjU4MTksMjU4MjAsMjU4MjEsMjU4MjMsMjU4MjQsMjU4MjUsMjU4MjcsMjU4MjksMjU4MzEsMjU4MzIs''@;'; put 'put ''MjU4MzMsMjU4MzQsMjU4MzUsMjU4MzYsMjU4MzcsMjU4MzgsMjU4MzksMjU4NDAsMjU4NDEsMjU4NDIsMjU4NDMsMjU4NDQsMjU4NDUsMjU4NDYsMjU4NDcsMjU4NDgsMjU4NDksMjU4NTAsMjU4NTEsMjU4NTIsMjU4NTMsMjU4NTQsMjU4NTUsMjU4NTcsMjU4NTgsMjU4NTksMjU4NjAsMjU4''@;'; put 'put ''NjEsMjU4NjIsMjU4NjMsMjU4NjQsMjU4NjYsMjU4NjcsMjU4NjgsMjU4NjksMjU4NzAsMjU4NzEsMjU4NzIsMjU4NzMsMjU4NzUsMjU4NzYsMjU4NzcsMjU4NzgsMjU4NzksMjU4ODEsMjU4ODIsMjU4ODMsMjU4ODQsMjU4ODUsMjU4ODYsMjU4ODcsMjU4ODgsMjU4ODksMjU4OTAsMjU4OTEs''@;'; put 'put ''MjU4OTIsMjU4OTQsMjU4OTUsMjU4OTYsMjU4OTcsMjU4OTgsMjU5MDAsMjU5MDEsMjU5MDQsMjU5MDUsMjU5MDYsMjU5MDcsMjU5MTEsMjU5MTQsMjU5MTYsMjU5MTcsMjU5MjAsMjU5MjEsMjU5MjIsMjU5MjMsMjU5MjQsMjU5MjYsMjU5MjcsMjU5MzAsMjU5MzEsMjU5MzMsMjU5MzQsMjU5''@;'; put 'put ''MzYsMjU5MzgsMjU5MzksMjU5NDAsMjU5NDMsMjU5NDQsMjU5NDYsMjU5NDgsMjU5NTEsMjU5NTIsMjU5NTMsMjU5NTYsMjU5NTcsMjU5NTksMjU5NjAsMjU5NjEsMjU5NjIsMjU5NjUsMjU5NjYsMjU5NjcsMjU5NjksMjU5NzEsMjU5NzMsMjU5NzQsMjU5NzYsMjU5NzcsMjU5NzgsMjU5Nzks''@;'; put 'put ''MjU5ODAsMjU5ODEsMjU5ODIsMjU5ODMsMjU5ODQsMjU5ODUsMjU5ODYsMjU5ODcsMjU5ODgsMjU5ODksMjU5OTAsMjU5OTIsMjU5OTMsMjU5OTQsMjU5OTcsMjU5OTgsMjU5OTksMjYwMDIsMjYwMDQsMjYwMDUsMjYwMDYsMjYwMDgsMjYwMTAsMjYwMTMsMjYwMTQsMjYwMTYsMjYwMTgsMjYw''@;'; put 'put ''MTksMjYwMjIsMjYwMjQsMjYwMjYsMjYwMjgsMjYwMzAsMjYwMzMsMjYwMzQsMjYwMzUsMjYwMzYsMjYwMzcsMjYwMzgsMjYwMzksMjYwNDAsMjYwNDIsMjYwNDMsMjYwNDYsMjYwNDcsMjYwNDgsMjYwNTAsMjYwNTUsMjYwNTYsMjYwNTcsMjYwNTgsMjYwNjEsMjYwNjQsMjYwNjUsMjYwNjcs''@;'; put 'put ''MjYwNjgsMjYwNjksMjYwNzIsMjYwNzMsMjYwNzQsMjYwNzUsMjYwNzYsMjYwNzcsMjYwNzgsMjYwNzksMjYwODEsMjYwODMsMjYwODQsMjYwOTAsMjYwOTEsMjYwOTgsMjYwOTksMjYxMDAsMjYxMDEsMjYxMDQsMjYxMDUsMjYxMDcsMjYxMDgsMjYxMDksMjYxMTAsMjYxMTEsMjYxMTMsMjYx''@;'; put 'put ''MTYsMjYxMTcsMjYxMTksMjYxMjAsMjYxMjEsMjYxMjMsMjYxMjUsMjYxMjgsMjYxMjksMjYxMzAsMjYxMzQsMjYxMzUsMjYxMzYsMjYxMzgsMjYxMzksMjYxNDAsMjYxNDIsMjYxNDUsMjYxNDYsMjYxNDcsMjYxNDgsMjYxNTAsMjYxNTMsMjYxNTQsMjYxNTUsMjYxNTYsMjYxNTgsMjYxNjAs''@;'; put 'put ''MjYxNjIsMjYxNjMsMjYxNjcsMjYxNjgsMjYxNjksMjYxNzAsMjYxNzEsMjYxNzMsMjYxNzUsMjYxNzYsMjYxNzgsMjYxODAsMjYxODEsMjYxODIsMjYxODMsMjYxODQsMjYxODUsMjYxODYsMjYxODksMjYxOTAsMjYxOTIsMjYxOTMsMjYyMDAsMjYyMDEsMjYyMDMsMjYyMDQsMjYyMDUsMjYy''@;'; put 'put ''MDYsMjYyMDgsMjYyMTAsMjYyMTEsMjYyMTMsMjYyMTUsMjYyMTcsMjYyMTgsMjYyMTksMjYyMjAsMjYyMjEsMjYyMjUsMjYyMjYsMjYyMjcsMjYyMjksMjYyMzIsMjYyMzMsMjYyMzUsMjYyMzYsMjYyMzcsMjYyMzksMjYyNDAsMjYyNDEsMjYyNDMsMjYyNDUsMjYyNDYsMjYyNDgsMjYyNDks''@;'; put 'put ''MjYyNTAsMjYyNTEsMjYyNTMsMjYyNTQsMjYyNTUsMjYyNTYsMjYyNTgsMjYyNTksMjYyNjAsMjYyNjEsMjYyNjQsMjYyNjUsMjYyNjYsMjYyNjcsMjYyNjgsMjYyNzAsMjYyNzEsMjYyNzIsMjYyNzMsMjYyNzQsMjYyNzUsMjYyNzYsMjYyNzcsMjYyNzgsMjYyODEsMjYyODIsMjYyODMsMjYy''@;'; put 'put ''ODQsMjYyODUsMjYyODcsMjYyODgsMjYyODksMjYyOTAsMjYyOTEsMjYyOTMsMjYyOTQsMjYyOTUsMjYyOTYsMjYyOTgsMjYyOTksMjYzMDAsMjYzMDEsMjYzMDMsMjYzMDQsMjYzMDUsMjYzMDYsMjYzMDcsMjYzMDgsMjYzMDksMjYzMTAsMjYzMTEsMjYzMTIsMjYzMTMsMjYzMTQsMjYzMTUs''@;'; put 'put ''MjYzMTYsMjYzMTcsMjYzMTgsMjYzMTksMjYzMjAsMjYzMjEsMjYzMjIsMjYzMjMsMjYzMjQsMjYzMjUsMjYzMjYsMjYzMjcsMjYzMjgsMjYzMzAsMjYzMzQsMjYzMzUsMjYzMzYsMjYzMzcsMjYzMzgsMjYzMzksMjYzNDAsMjYzNDEsMjYzNDMsMjYzNDQsMjYzNDYsMjYzNDcsMjYzNDgsMjYz''@;'; put 'put ''NDksMjYzNTAsMjYzNTEsMjYzNTMsMjYzNTcsMjYzNTgsMjYzNjAsMjYzNjIsMjYzNjMsMjYzNjUsMjYzNjksMjYzNzAsMjYzNzEsMjYzNzIsMjYzNzMsMjYzNzQsMjYzNzUsMjYzODAsMjYzODIsMjYzODMsMjYzODUsMjYzODYsMjYzODcsMjYzOTAsMjYzOTIsMjYzOTMsMjYzOTQsMjYzOTYs''@;'; put 'put ''MjYzOTgsMjY0MDAsMjY0MDEsMjY0MDIsMjY0MDMsMjY0MDQsMjY0MDUsMjY0MDcsMjY0MDksMjY0MTQsMjY0MTYsMjY0MTgsMjY0MTksMjY0MjIsMjY0MjMsMjY0MjQsMjY0MjUsMjY0MjcsMjY0MjgsMjY0MzAsMjY0MzEsMjY0MzMsMjY0MzYsMjY0MzcsMjY0MzksMjY0NDIsMjY0NDMsMjY0''@;'; put 'put ''NDUsMjY0NTAsMjY0NTIsMjY0NTMsMjY0NTUsMjY0NTYsMjY0NTcsMjY0NTgsMjY0NTksMjY0NjEsMjY0NjYsMjY0NjcsMjY0NjgsMjY0NzAsMjY0NzEsMjY0NzUsMjY0NzYsMjY0NzgsMjY0ODEsMjY0ODQsMjY0ODYsMjY0ODgsMjY0ODksMjY0OTAsMjY0OTEsMjY0OTMsMjY0OTYsMjY0OTgs''@;'; put 'put ''MjY0OTksMjY1MDEsMjY1MDIsMjY1MDQsMjY1MDYsMjY1MDgsMjY1MDksMjY1MTAsMjY1MTEsMjY1MTMsMjY1MTQsMjY1MTUsMjY1MTYsMjY1MTgsMjY1MjEsMjY1MjMsMjY1MjcsMjY1MjgsMjY1MjksMjY1MzIsMjY1MzQsMjY1MzcsMjY1NDAsMjY1NDIsMjY1NDUsMjY1NDYsMjY1NDgsMjY1''@;'; put 'put ''NTMsMjY1NTQsMjY1NTUsMjY1NTYsMjY1NTcsMjY1NTgsMjY1NTksMjY1NjAsMjY1NjIsMjY1NjUsMjY1NjYsMjY1NjcsMjY1NjgsMjY1NjksMjY1NzAsMjY1NzEsMjY1NzIsMjY1NzMsMjY1NzQsMjY1ODEsMjY1ODIsMjY1ODMsMjY1ODcsMjY1OTEsMjY1OTMsMjY1OTUsMjY1OTYsMjY1OTgs''@;'; put 'put ''MjY1OTksMjY2MDAsMjY2MDIsMjY2MDMsMjY2MDUsMjY2MDYsMjY2MTAsMjY2MTMsMjY2MTQsMjY2MTUsMjY2MTYsMjY2MTcsMjY2MTgsMjY2MTksMjY2MjAsMjY2MjIsMjY2MjUsMjY2MjYsMjY2MjcsMjY2MjgsMjY2MzAsMjY2MzcsMjY2NDAsMjY2NDIsMjY2NDQsMjY2NDUsMjY2NDgsMjY2''@;'; put 'put ''NDksMjY2NTAsMjY2NTEsMjY2NTIsMjY2NTQsMjY2NTUsMjY2NTYsMjY2NTgsMjY2NTksMjY2NjAsMjY2NjEsMjY2NjIsMjY2NjMsMjY2NjQsMjY2NjcsMjY2NjgsMjY2NjksMjY2NzAsMjY2NzEsMjY2NzIsMjY2NzMsMjY2NzYsMjY2NzcsMjY2NzgsMjY2ODIsMjY2ODMsMjY2ODcsMjY2OTUs''@;'; put 'put ''MjY2OTksMjY3MDEsMjY3MDMsMjY3MDYsMjY3MTAsMjY3MTEsMjY3MTIsMjY3MTMsMjY3MTQsMjY3MTUsMjY3MTYsMjY3MTcsMjY3MTgsMjY3MTksMjY3MzAsMjY3MzIsMjY3MzMsMjY3MzQsMjY3MzUsMjY3MzYsMjY3MzcsMjY3MzgsMjY3MzksMjY3NDEsMjY3NDQsMjY3NDUsMjY3NDYsMjY3''@;'; put 'put ''NDcsMjY3NDgsMjY3NDksMjY3NTAsMjY3NTEsMjY3NTIsMjY3NTQsMjY3NTYsMjY3NTksMjY3NjAsMjY3NjEsMjY3NjIsMjY3NjMsMjY3NjQsMjY3NjUsMjY3NjYsMjY3NjgsMjY3NjksMjY3NzAsMjY3NzIsMjY3NzMsMjY3NzQsMjY3NzYsMjY3NzcsMjY3NzgsMjY3NzksMjY3ODAsMjY3ODEs''@;'; put 'put ''MjY3ODIsMjY3ODMsMjY3ODQsMjY3ODUsMjY3ODcsMjY3ODgsMjY3ODksMjY3OTMsMjY3OTQsMjY3OTUsMjY3OTYsMjY3OTgsMjY4MDEsMjY4MDIsMjY4MDQsMjY4MDYsMjY4MDcsMjY4MDgsMjY4MDksMjY4MTAsMjY4MTEsMjY4MTIsMjY4MTMsMjY4MTQsMjY4MTUsMjY4MTcsMjY4MTksMjY4''@;'; put 'put ''MjAsMjY4MjEsMjY4MjIsMjY4MjMsMjY4MjQsMjY4MjYsMjY4MjgsMjY4MzAsMjY4MzEsMjY4MzIsMjY4MzMsMjY4MzUsMjY4MzYsMjY4MzgsMjY4MzksMjY4NDEsMjY4NDMsMjY4NDQsMjY4NDUsMjY4NDYsMjY4NDcsMjY4NDksMjY4NTAsMjY4NTIsMjY4NTMsMjY4NTQsMjY4NTUsMjY4NTYs''@;'; put 'put ''MjY4NTcsMjY4NTgsMjY4NTksMjY4NjAsMjY4NjEsMjY4NjMsMjY4NjYsMjY4NjcsMjY4NjgsMjY4NzAsMjY4NzEsMjY4NzIsMjY4NzUsMjY4NzcsMjY4NzgsMjY4NzksMjY4ODAsMjY4ODIsMjY4ODMsMjY4ODQsMjY4ODYsMjY4ODcsMjY4ODgsMjY4ODksMjY4OTAsMjY4OTIsMjY4OTUsMjY4''@;'; put 'put ''OTcsMjY4OTksMjY5MDAsMjY5MDEsMjY5MDIsMjY5MDMsMjY5MDQsMjY5MDUsMjY5MDYsMjY5MDcsMjY5MDgsMjY5MDksMjY5MTAsMjY5MTMsMjY5MTQsMjY5MTUsMjY5MTcsMjY5MTgsMjY5MTksMjY5MjAsMjY5MjEsMjY5MjIsMjY5MjMsMjY5MjQsMjY5MjYsMjY5MjcsMjY5MjksMjY5MzAs''@;'; put 'put ''MjY5MzEsMjY5MzMsMjY5MzQsMjY5MzUsMjY5MzYsMjY5MzgsMjY5MzksMjY5NDAsMjY5NDIsMjY5NDQsMjY5NDUsMjY5NDcsMjY5NDgsMjY5NDksMjY5NTAsMjY5NTEsMjY5NTIsMjY5NTMsMjY5NTQsMjY5NTUsMjY5NTYsMjY5NTcsMjY5NTgsMjY5NTksMjY5NjAsMjY5NjEsMjY5NjIsMjY5''@;'; put 'put ''NjMsMjY5NjUsMjY5NjYsMjY5NjgsMjY5NjksMjY5NzEsMjY5NzIsMjY5NzUsMjY5NzcsMjY5NzgsMjY5ODAsMjY5ODEsMjY5ODMsMjY5ODQsMjY5ODUsMjY5ODYsMjY5ODgsMjY5ODksMjY5OTEsMjY5OTIsMjY5OTQsMjY5OTUsMjY5OTYsMjY5OTcsMjY5OTgsMjcwMDIsMjcwMDMsMjcwMDUs''@;'; put 'put ''MjcwMDYsMjcwMDcsMjcwMDksMjcwMTEsMjcwMTMsMjcwMTgsMjcwMTksMjcwMjAsMjcwMjIsMjcwMjMsMjcwMjQsMjcwMjUsMjcwMjYsMjcwMjcsMjcwMzAsMjcwMzEsMjcwMzMsMjcwMzQsMjcwMzcsMjcwMzgsMjcwMzksMjcwNDAsMjcwNDEsMjcwNDIsMjcwNDMsMjcwNDQsMjcwNDUsMjcw''@;'; put 'put ''NDYsMjcwNDksMjcwNTAsMjcwNTIsMjcwNTQsMjcwNTUsMjcwNTYsMjcwNTgsMjcwNTksMjcwNjEsMjcwNjIsMjcwNjQsMjcwNjUsMjcwNjYsMjcwNjgsMjcwNjksMjcwNzAsMjcwNzEsMjcwNzIsMjcwNzQsMjcwNzUsMjcwNzYsMjcwNzcsMjcwNzgsMjcwNzksMjcwODAsMjcwODEsMjcwODMs''@;'; put 'put ''MjcwODUsMjcwODcsMjcwODksMjcwOTAsMjcwOTEsMjcwOTMsMjcwOTQsMjcwOTUsMjcwOTYsMjcwOTcsMjcwOTgsMjcxMDAsMjcxMDEsMjcxMDIsMjcxMDUsMjcxMDYsMjcxMDcsMjcxMDgsMjcxMDksMjcxMTAsMjcxMTEsMjcxMTIsMjcxMTMsMjcxMTQsMjcxMTUsMjcxMTYsMjcxMTgsMjcx''@;'; put 'put ''MTksMjcxMjAsMjcxMjEsMjcxMjMsMjcxMjQsMjcxMjUsMjcxMjYsMjcxMjcsMjcxMjgsMjcxMjksMjcxMzAsMjcxMzEsMjcxMzIsMjcxMzQsMjcxMzYsMjcxMzcsMjcxMzgsMjcxMzksMjcxNDAsMjcxNDEsMjcxNDIsMjcxNDMsMjcxNDQsMjcxNDUsMjcxNDcsMjcxNDgsMjcxNDksMjcxNTAs''@;'; put 'put ''MjcxNTEsMjcxNTIsMjcxNTMsMjcxNTQsMjcxNTUsMjcxNTYsMjcxNTcsMjcxNTgsMjcxNjEsMjcxNjIsMjcxNjMsMjcxNjQsMjcxNjUsMjcxNjYsMjcxNjgsMjcxNzAsMjcxNzEsMjcxNzIsMjcxNzMsMjcxNzQsMjcxNzUsMjcxNzcsMjcxNzksMjcxODAsMjcxODEsMjcxODIsMjcxODQsMjcx''@;'; put 'put ''ODYsMjcxODcsMjcxODgsMjcxOTAsMjcxOTEsMjcxOTIsMjcxOTMsMjcxOTQsMjcxOTUsMjcxOTYsMjcxOTksMjcyMDAsMjcyMDEsMjcyMDIsMjcyMDMsMjcyMDUsMjcyMDYsMjcyMDgsMjcyMDksMjcyMTAsMjcyMTEsMjcyMTIsMjcyMTMsMjcyMTQsMjcyMTUsMjcyMTcsMjcyMTgsMjcyMTks''@;'; put 'put ''MjcyMjAsMjcyMjEsMjcyMjIsMjcyMjMsMjcyMjYsMjcyMjgsMjcyMjksMjcyMzAsMjcyMzEsMjcyMzIsMjcyMzQsMjcyMzUsMjcyMzYsMjcyMzgsMjcyMzksMjcyNDAsMjcyNDEsMjcyNDIsMjcyNDMsMjcyNDQsMjcyNDUsMjcyNDYsMjcyNDcsMjcyNDgsMjcyNTAsMjcyNTEsMjcyNTIsMjcy''@;'; put 'put ''NTMsMjcyNTQsMjcyNTUsMjcyNTYsMjcyNTgsMjcyNTksMjcyNjEsMjcyNjIsMjcyNjMsMjcyNjUsMjcyNjYsMjcyNjcsMjcyNjksMjcyNzAsMjcyNzEsMjcyNzIsMjcyNzMsMjcyNzQsMjcyNzUsMjcyNzYsMjcyNzcsMjcyNzksMjcyODIsMjcyODMsMjcyODQsMjcyODUsMjcyODYsMjcyODgs''@;'; put 'put ''MjcyODksMjcyOTAsMjcyOTEsMjcyOTIsMjcyOTMsMjcyOTQsMjcyOTUsMjcyOTcsMjcyOTgsMjcyOTksMjczMDAsMjczMDEsMjczMDIsMjczMDMsMjczMDQsMjczMDYsMjczMDksMjczMTAsMjczMTEsMjczMTIsMjczMTMsMjczMTQsMjczMTUsMjczMTYsMjczMTcsMjczMTgsMjczMTksMjcz''@;'; put 'put ''MjAsMjczMjEsMjczMjIsMjczMjMsMjczMjQsMjczMjUsMjczMjYsMjczMjcsMjczMjgsMjczMjksMjczMzAsMjczMzEsMjczMzIsMjczMzMsMjczMzQsMjczMzUsMjczMzYsMjczMzcsMjczMzgsMjczMzksMjczNDAsMjczNDEsMjczNDIsMjczNDMsMjczNDQsMjczNDUsMjczNDYsMjczNDcs''@;'; put 'put ''MjczNDgsMjczNDksMjczNTAsMjczNTEsMjczNTIsMjczNTMsMjczNTQsMjczNTUsMjczNTYsMjczNTcsMjczNTgsMjczNTksMjczNjAsMjczNjEsMjczNjIsMjczNjMsMjczNjQsMjczNjUsMjczNjYsMjczNjcsMjczNjgsMjczNjksMjczNzAsMjczNzEsMjczNzIsMjczNzMsMjczNzQsMjcz''@;'; put 'put ''NzUsMjczNzYsMjczNzcsMjczNzgsMjczNzksMjczODAsMjczODEsMjczODIsMjczODMsMjczODQsMjczODUsMjczODYsMjczODcsMjczODgsMjczODksMjczOTAsMjczOTEsMjczOTIsMjczOTMsMjczOTQsMjczOTUsMjczOTYsMjczOTcsMjczOTgsMjczOTksMjc0MDAsMjc0MDEsMjc0MDIs''@;'; put 'put ''Mjc0MDMsMjc0MDQsMjc0MDUsMjc0MDYsMjc0MDcsMjc0MDgsMjc0MDksMjc0MTAsMjc0MTEsMjc0MTIsMjc0MTMsMjc0MTQsMjc0MTUsMjc0MTYsMjc0MTcsMjc0MTgsMjc0MTksMjc0MjAsMjc0MjEsMjc0MjIsMjc0MjMsMjc0MjksMjc0MzAsMjc0MzIsMjc0MzMsMjc0MzQsMjc0MzUsMjc0''@;'; put 'put ''MzYsMjc0MzcsMjc0MzgsMjc0MzksMjc0NDAsMjc0NDEsMjc0NDMsMjc0NDQsMjc0NDUsMjc0NDYsMjc0NDgsMjc0NTEsMjc0NTIsMjc0NTMsMjc0NTUsMjc0NTYsMjc0NTcsMjc0NTgsMjc0NjAsMjc0NjEsMjc0NjQsMjc0NjYsMjc0NjcsMjc0NjksMjc0NzAsMjc0NzEsMjc0NzIsMjc0NzMs''@;'; put 'put ''Mjc0NzQsMjc0NzUsMjc0NzYsMjc0NzcsMjc0NzgsMjc0NzksMjc0ODAsMjc0ODIsMjc0ODMsMjc0ODQsMjc0ODUsMjc0ODYsMjc0ODcsMjc0ODgsMjc0ODksMjc0OTYsMjc0OTcsMjc0OTksMjc1MDAsMjc1MDEsMjc1MDIsMjc1MDMsMjc1MDQsMjc1MDUsMjc1MDYsMjc1MDcsMjc1MDgsMjc1''@;'; put 'put ''MDksMjc1MTAsMjc1MTEsMjc1MTIsMjc1MTQsMjc1MTcsMjc1MTgsMjc1MTksMjc1MjAsMjc1MjUsMjc1MjgsMjc1MzIsMjc1MzQsMjc1MzUsMjc1MzYsMjc1MzcsMjc1NDAsMjc1NDEsMjc1NDMsMjc1NDQsMjc1NDUsMjc1NDgsMjc1NDksMjc1NTAsMjc1NTEsMjc1NTIsMjc1NTQsMjc1NTUs''@;'; put 'put ''Mjc1NTYsMjc1NTcsMjc1NTgsMjc1NTksMjc1NjAsMjc1NjEsMjc1NjMsMjc1NjQsMjc1NjUsMjc1NjYsMjc1NjcsMjc1NjgsMjc1NjksMjc1NzAsMjc1NzQsMjc1NzYsMjc1NzcsMjc1NzgsMjc1NzksMjc1ODAsMjc1ODEsMjc1ODIsMjc1ODQsMjc1ODcsMjc1ODgsMjc1OTAsMjc1OTEsMjc1''@;'; put 'put ''OTIsMjc1OTMsMjc1OTQsMjc1OTYsMjc1OTgsMjc2MDAsMjc2MDEsMjc2MDgsMjc2MTAsMjc2MTIsMjc2MTMsMjc2MTQsMjc2MTUsMjc2MTYsMjc2MTgsMjc2MTksMjc2MjAsMjc2MjEsMjc2MjIsMjc2MjMsMjc2MjQsMjc2MjUsMjc2MjgsMjc2MjksMjc2MzAsMjc2MzIsMjc2MzMsMjc2MzQs''@;'; put 'put ''Mjc2MzYsMjc2MzgsMjc2MzksMjc2NDAsMjc2NDIsMjc2NDMsMjc2NDQsMjc2NDYsMjc2NDcsMjc2NDgsMjc2NDksMjc2NTAsMjc2NTEsMjc2NTIsMjc2NTYsMjc2NTcsMjc2NTgsMjc2NTksMjc2NjAsMjc2NjIsMjc2NjYsMjc2NzEsMjc2NzYsMjc2NzcsMjc2NzgsMjc2ODAsMjc2ODMsMjc2''@;'; put 'put ''ODUsMjc2OTEsMjc2OTIsMjc2OTMsMjc2OTcsMjc2OTksMjc3MDIsMjc3MDMsMjc3MDUsMjc3MDYsMjc3MDcsMjc3MDgsMjc3MTAsMjc3MTEsMjc3MTUsMjc3MTYsMjc3MTcsMjc3MjAsMjc3MjMsMjc3MjQsMjc3MjUsMjc3MjYsMjc3MjcsMjc3MjksMjc3MzAsMjc3MzEsMjc3MzQsMjc3MzYs''@;'; put 'put ''Mjc3MzcsMjc3MzgsMjc3NDYsMjc3NDcsMjc3NDksMjc3NTAsMjc3NTEsMjc3NTUsMjc3NTYsMjc3NTcsMjc3NTgsMjc3NTksMjc3NjEsMjc3NjMsMjc3NjUsMjc3NjcsMjc3NjgsMjc3NzAsMjc3NzEsMjc3NzIsMjc3NzUsMjc3NzYsMjc3ODAsMjc3ODMsMjc3ODYsMjc3ODcsMjc3ODksMjc3''@;'; put 'put ''OTAsMjc3OTMsMjc3OTQsMjc3OTcsMjc3OTgsMjc3OTksMjc4MDAsMjc4MDIsMjc4MDQsMjc4MDUsMjc4MDYsMjc4MDgsMjc4MTAsMjc4MTYsMjc4MjAsMjc4MjMsMjc4MjQsMjc4MjgsMjc4MjksMjc4MzAsMjc4MzEsMjc4MzQsMjc4NDAsMjc4NDEsMjc4NDIsMjc4NDMsMjc4NDYsMjc4NDcs''@;'; put 'put ''Mjc4NDgsMjc4NTEsMjc4NTMsMjc4NTQsMjc4NTUsMjc4NTcsMjc4NTgsMjc4NjQsMjc4NjUsMjc4NjYsMjc4NjgsMjc4NjksMjc4NzEsMjc4NzYsMjc4NzgsMjc4NzksMjc4ODEsMjc4ODQsMjc4ODUsMjc4OTAsMjc4OTIsMjc4OTcsMjc5MDMsMjc5MDQsMjc5MDYsMjc5MDcsMjc5MDksMjc5''@;'; put 'put ''MTAsMjc5MTIsMjc5MTMsMjc5MTQsMjc5MTcsMjc5MTksMjc5MjAsMjc5MjEsMjc5MjMsMjc5MjQsMjc5MjUsMjc5MjYsMjc5MjgsMjc5MzIsMjc5MzMsMjc5MzUsMjc5MzYsMjc5MzcsMjc5MzgsMjc5MzksMjc5NDAsMjc5NDIsMjc5NDQsMjc5NDUsMjc5NDgsMjc5NDksMjc5NTEsMjc5NTIs''@;'; put 'put ''Mjc5NTYsMjc5NTgsMjc5NTksMjc5NjAsMjc5NjIsMjc5NjcsMjc5NjgsMjc5NzAsMjc5NzIsMjc5NzcsMjc5ODAsMjc5ODQsMjc5ODksMjc5OTAsMjc5OTEsMjc5OTIsMjc5OTUsMjc5OTcsMjc5OTksMjgwMDEsMjgwMDIsMjgwMDQsMjgwMDUsMjgwMDcsMjgwMDgsMjgwMTEsMjgwMTIsMjgw''@;'; put 'put ''MTMsMjgwMTYsMjgwMTcsMjgwMTgsMjgwMTksMjgwMjEsMjgwMjIsMjgwMjUsMjgwMjYsMjgwMjcsMjgwMjksMjgwMzAsMjgwMzEsMjgwMzIsMjgwMzMsMjgwMzUsMjgwMzYsMjgwMzgsMjgwMzksMjgwNDIsMjgwNDMsMjgwNDUsMjgwNDcsMjgwNDgsMjgwNTAsMjgwNTQsMjgwNTUsMjgwNTYs''@;'; put 'put ''MjgwNTcsMjgwNTgsMjgwNjAsMjgwNjYsMjgwNjksMjgwNzYsMjgwNzcsMjgwODAsMjgwODEsMjgwODMsMjgwODQsMjgwODYsMjgwODcsMjgwODksMjgwOTAsMjgwOTEsMjgwOTIsMjgwOTMsMjgwOTQsMjgwOTcsMjgwOTgsMjgwOTksMjgxMDQsMjgxMDUsMjgxMDYsMjgxMDksMjgxMTAsMjgx''@;'; put 'put ''MTEsMjgxMTIsMjgxMTQsMjgxMTUsMjgxMTYsMjgxMTcsMjgxMTksMjgxMjIsMjgxMjMsMjgxMjQsMjgxMjcsMjgxMzAsMjgxMzEsMjgxMzMsMjgxMzUsMjgxMzYsMjgxMzcsMjgxMzgsMjgxNDEsMjgxNDMsMjgxNDQsMjgxNDYsMjgxNDgsMjgxNDksMjgxNTAsMjgxNTIsMjgxNTQsMjgxNTcs''@;'; put 'put ''MjgxNTgsMjgxNTksMjgxNjAsMjgxNjEsMjgxNjIsMjgxNjMsMjgxNjQsMjgxNjYsMjgxNjcsMjgxNjgsMjgxNjksMjgxNzEsMjgxNzUsMjgxNzgsMjgxNzksMjgxODEsMjgxODQsMjgxODUsMjgxODcsMjgxODgsMjgxOTAsMjgxOTEsMjgxOTQsMjgxOTgsMjgxOTksMjgyMDAsMjgyMDIsMjgy''@;'; put 'put ''MDQsMjgyMDYsMjgyMDgsMjgyMDksMjgyMTEsMjgyMTMsMjgyMTQsMjgyMTUsMjgyMTcsMjgyMTksMjgyMjAsMjgyMjEsMjgyMjIsMjgyMjMsMjgyMjQsMjgyMjUsMjgyMjYsMjgyMjksMjgyMzAsMjgyMzEsMjgyMzIsMjgyMzMsMjgyMzQsMjgyMzUsMjgyMzYsMjgyMzksMjgyNDAsMjgyNDEs''@;'; put 'put ''MjgyNDIsMjgyNDUsMjgyNDcsMjgyNDksMjgyNTAsMjgyNTIsMjgyNTMsMjgyNTQsMjgyNTYsMjgyNTcsMjgyNTgsMjgyNTksMjgyNjAsMjgyNjEsMjgyNjIsMjgyNjMsMjgyNjQsMjgyNjUsMjgyNjYsMjgyNjgsMjgyNjksMjgyNzEsMjgyNzIsMjgyNzMsMjgyNzQsMjgyNzUsMjgyNzYsMjgy''@;'; put 'put ''NzcsMjgyNzgsMjgyNzksMjgyODAsMjgyODEsMjgyODIsMjgyODMsMjgyODQsMjgyODUsMjgyODgsMjgyODksMjgyOTAsMjgyOTIsMjgyOTUsMjgyOTYsMjgyOTgsMjgyOTksMjgzMDAsMjgzMDEsMjgzMDIsMjgzMDUsMjgzMDYsMjgzMDcsMjgzMDgsMjgzMDksMjgzMTAsMjgzMTEsMjgzMTMs''@;'; put 'put ''MjgzMTQsMjgzMTUsMjgzMTcsMjgzMTgsMjgzMjAsMjgzMjEsMjgzMjMsMjgzMjQsMjgzMjYsMjgzMjgsMjgzMjksMjgzMzEsMjgzMzIsMjgzMzMsMjgzMzQsMjgzMzYsMjgzMzksMjgzNDEsMjgzNDQsMjgzNDUsMjgzNDgsMjgzNTAsMjgzNTEsMjgzNTIsMjgzNTUsMjgzNTYsMjgzNTcsMjgz''@;'; put 'put ''NTgsMjgzNjAsMjgzNjEsMjgzNjIsMjgzNjQsMjgzNjUsMjgzNjYsMjgzNjgsMjgzNzAsMjgzNzQsMjgzNzYsMjgzNzcsMjgzNzksMjgzODAsMjgzODEsMjgzODcsMjgzOTEsMjgzOTQsMjgzOTUsMjgzOTYsMjgzOTcsMjgzOTgsMjgzOTksMjg0MDAsMjg0MDEsMjg0MDIsMjg0MDMsMjg0MDUs''@;'; put 'put ''Mjg0MDYsMjg0MDcsMjg0MDgsMjg0MTAsMjg0MTEsMjg0MTIsMjg0MTMsMjg0MTQsMjg0MTUsMjg0MTYsMjg0MTcsMjg0MTksMjg0MjAsMjg0MjEsMjg0MjMsMjg0MjQsMjg0MjYsMjg0MjcsMjg0MjgsMjg0MjksMjg0MzAsMjg0MzIsMjg0MzMsMjg0MzQsMjg0MzgsMjg0MzksMjg0NDAsMjg0''@;'; put 'put ''NDEsMjg0NDIsMjg0NDMsMjg0NDQsMjg0NDUsMjg0NDYsMjg0NDcsMjg0NDksMjg0NTAsMjg0NTEsMjg0NTMsMjg0NTQsMjg0NTUsMjg0NTYsMjg0NjAsMjg0NjIsMjg0NjQsMjg0NjYsMjg0NjgsMjg0NjksMjg0NzEsMjg0NzIsMjg0NzMsMjg0NzQsMjg0NzUsMjg0NzYsMjg0NzcsMjg0Nzks''@;'; put 'put ''Mjg0ODAsMjg0ODEsMjg0ODIsMjg0ODMsMjg0ODQsMjg0ODUsMjg0ODgsMjg0ODksMjg0OTAsMjg0OTIsMjg0OTQsMjg0OTUsMjg0OTYsMjg0OTcsMjg0OTgsMjg0OTksMjg1MDAsMjg1MDEsMjg1MDIsMjg1MDMsMjg1MDUsMjg1MDYsMjg1MDcsMjg1MDksMjg1MTEsMjg1MTIsMjg1MTMsMjg1''@;'; put 'put ''MTUsMjg1MTYsMjg1MTcsMjg1MTksMjg1MjAsMjg1MjEsMjg1MjIsMjg1MjMsMjg1MjQsMjg1MjcsMjg1MjgsMjg1MjksMjg1MzEsMjg1MzMsMjg1MzQsMjg1MzUsMjg1MzcsMjg1MzksMjg1NDEsMjg1NDIsMjg1NDMsMjg1NDQsMjg1NDUsMjg1NDYsMjg1NDcsMjg1NDksMjg1NTAsMjg1NTEs''@;'; put 'put ''Mjg1NTQsMjg1NTUsMjg1NTksMjg1NjAsMjg1NjEsMjg1NjIsMjg1NjMsMjg1NjQsMjg1NjUsMjg1NjYsMjg1NjcsMjg1NjgsMjg1NjksMjg1NzAsMjg1NzEsMjg1NzMsMjg1NzQsMjg1NzUsMjg1NzYsMjg1NzgsMjg1NzksMjg1ODAsMjg1ODEsMjg1ODIsMjg1ODQsMjg1ODUsMjg1ODYsMjg1''@;'; put 'put ''ODcsMjg1ODgsMjg1ODksMjg1OTAsMjg1OTEsMjg1OTIsMjg1OTMsMjg1OTQsMjg1OTYsMjg1OTcsMjg1OTksMjg2MDAsMjg2MDIsMjg2MDMsMjg2MDQsMjg2MDUsMjg2MDYsMjg2MDcsMjg2MDksMjg2MTEsMjg2MTIsMjg2MTMsMjg2MTQsMjg2MTUsMjg2MTYsMjg2MTgsMjg2MTksMjg2MjAs''@;'; put 'put ''Mjg2MjEsMjg2MjIsMjg2MjMsMjg2MjQsMjg2MjcsMjg2MjgsMjg2MjksMjg2MzAsMjg2MzEsMjg2MzIsMjg2MzMsMjg2MzQsMjg2MzUsMjg2MzYsMjg2MzcsMjg2MzksMjg2NDIsMjg2NDMsMjg2NDQsMjg2NDUsMjg2NDYsMjg2NDcsMjg2NDgsMjg2NDksMjg2NTAsMjg2NTEsMjg2NTIsMjg2''@;'; put 'put ''NTMsMjg2NTYsMjg2NTcsMjg2NTgsMjg2NTksMjg2NjAsMjg2NjEsMjg2NjIsMjg2NjMsMjg2NjQsMjg2NjUsMjg2NjYsMjg2NjcsMjg2NjgsMjg2NjksMjg2NzAsMjg2NzEsMjg2NzIsMjg2NzMsMjg2NzQsMjg2NzUsMjg2NzYsMjg2NzcsMjg2NzgsMjg2NzksMjg2ODAsMjg2ODEsMjg2ODIs''@;'; put 'put ''Mjg2ODMsMjg2ODQsMjg2ODUsMjg2ODYsMjg2ODcsMjg2ODgsMjg2OTAsMjg2OTEsMjg2OTIsMjg2OTMsMjg2OTQsMjg2OTUsMjg2OTYsMjg2OTcsMjg3MDAsMjg3MDEsMjg3MDIsMjg3MDMsMjg3MDQsMjg3MDUsMjg3MDYsMjg3MDgsMjg3MDksMjg3MTAsMjg3MTEsMjg3MTIsMjg3MTMsMjg3''@;'; put 'put ''MTQsMjg3MTUsMjg3MTYsMjg3MTcsMjg3MTgsMjg3MTksMjg3MjAsMjg3MjEsMjg3MjIsMjg3MjMsMjg3MjQsMjg3MjYsMjg3MjcsMjg3MjgsMjg3MzAsMjg3MzEsMjg3MzIsMjg3MzMsMjg3MzQsMjg3MzUsMjg3MzYsMjg3MzcsMjg3MzgsMjg3MzksMjg3NDAsMjg3NDEsMjg3NDIsMjg3NDMs''@;'; put 'put ''Mjg3NDQsMjg3NDUsMjg3NDYsMjg3NDcsMjg3NDksMjg3NTAsMjg3NTIsMjg3NTMsMjg3NTQsMjg3NTUsMjg3NTYsMjg3NTcsMjg3NTgsMjg3NTksMjg3NjAsMjg3NjEsMjg3NjIsMjg3NjMsMjg3NjQsMjg3NjUsMjg3NjcsMjg3NjgsMjg3NjksMjg3NzAsMjg3NzEsMjg3NzIsMjg3NzMsMjg3''@;'; put 'put ''NzQsMjg3NzUsMjg3NzYsMjg3NzcsMjg3NzgsMjg3ODIsMjg3ODUsMjg3ODYsMjg3ODcsMjg3ODgsMjg3OTEsMjg3OTMsMjg3OTQsMjg3OTUsMjg3OTcsMjg4MDEsMjg4MDIsMjg4MDMsMjg4MDQsMjg4MDYsMjg4MDcsMjg4MDgsMjg4MTEsMjg4MTIsMjg4MTMsMjg4MTUsMjg4MTYsMjg4MTcs''@;'; put 'put ''Mjg4MTksMjg4MjMsMjg4MjQsMjg4MjYsMjg4MjcsMjg4MzAsMjg4MzEsMjg4MzIsMjg4MzMsMjg4MzQsMjg4MzUsMjg4MzYsMjg4MzcsMjg4MzgsMjg4MzksMjg4NDAsMjg4NDEsMjg4NDIsMjg4NDgsMjg4NTAsMjg4NTIsMjg4NTMsMjg4NTQsMjg4NTgsMjg4NjIsMjg4NjMsMjg4NjgsMjg4''@;'; put 'put ''NjksMjg4NzAsMjg4NzEsMjg4NzMsMjg4NzUsMjg4NzYsMjg4NzcsMjg4NzgsMjg4NzksMjg4ODAsMjg4ODEsMjg4ODIsMjg4ODMsMjg4ODQsMjg4ODUsMjg4ODYsMjg4ODcsMjg4OTAsMjg4OTIsMjg4OTMsMjg4OTQsMjg4OTYsMjg4OTcsMjg4OTgsMjg4OTksMjg5MDEsMjg5MDYsMjg5MTAs''@;'; put 'put ''Mjg5MTIsMjg5MTMsMjg5MTQsMjg5MTUsMjg5MTYsMjg5MTcsMjg5MTgsMjg5MjAsMjg5MjIsMjg5MjMsMjg5MjQsMjg5MjYsMjg5MjcsMjg5MjgsMjg5MjksMjg5MzAsMjg5MzEsMjg5MzIsMjg5MzMsMjg5MzQsMjg5MzUsMjg5MzYsMjg5MzksMjg5NDAsMjg5NDEsMjg5NDIsMjg5NDMsMjg5''@;'; put 'put ''NDUsMjg5NDYsMjg5NDgsMjg5NTEsMjg5NTUsMjg5NTYsMjg5NTcsMjg5NTgsMjg5NTksMjg5NjAsMjg5NjEsMjg5NjIsMjg5NjMsMjg5NjQsMjg5NjUsMjg5NjcsMjg5NjgsMjg5NjksMjg5NzAsMjg5NzEsMjg5NzIsMjg5NzMsMjg5NzQsMjg5NzgsMjg5NzksMjg5ODAsMjg5ODEsMjg5ODMs''@;'; put 'put ''Mjg5ODQsMjg5ODUsMjg5ODYsMjg5ODcsMjg5ODgsMjg5ODksMjg5OTAsMjg5OTEsMjg5OTIsMjg5OTMsMjg5OTQsMjg5OTUsMjg5OTYsMjg5OTgsMjg5OTksMjllMywyOTAwMSwyOTAwMywyOTAwNSwyOTAwNywyOTAwOCwyOTAwOSwyOTAxMCwyOTAxMSwyOTAxMiwyOTAxMywyOTAxNCwyOTAx''@;'; put 'put ''NSwyOTAxNiwyOTAxNywyOTAxOCwyOTAxOSwyOTAyMSwyOTAyMywyOTAyNCwyOTAyNSwyOTAyNiwyOTAyNywyOTAyOSwyOTAzMywyOTAzNCwyOTAzNSwyOTAzNiwyOTAzNywyOTAzOSwyOTA0MCwyOTA0MSwyOTA0NCwyOTA0NSwyOTA0NiwyOTA0NywyOTA0OSwyOTA1MSwyOTA1MiwyOTA1NCwy''@;'; put 'put ''OTA1NSwyOTA1NiwyOTA1NywyOTA1OCwyOTA1OSwyOTA2MSwyOTA2MiwyOTA2MywyOTA2NCwyOTA2NSwyOTA2NywyOTA2OCwyOTA2OSwyOTA3MCwyOTA3MiwyOTA3MywyOTA3NCwyOTA3NSwyOTA3NywyOTA3OCwyOTA3OSwyOTA4MiwyOTA4MywyOTA4NCwyOTA4NSwyOTA4NiwyOTA4OSwyOTA5''@;'; put 'put ''MCwyOTA5MSwyOTA5MiwyOTA5MywyOTA5NCwyOTA5NSwyOTA5NywyOTA5OCwyOTA5OSwyOTEwMSwyOTEwMiwyOTEwMywyOTEwNCwyOTEwNSwyOTEwNiwyOTEwOCwyOTExMCwyOTExMSwyOTExMiwyOTExNCwyOTExNSwyOTExNiwyOTExNywyOTExOCwyOTExOSwyOTEyMCwyOTEyMSwyOTEyMiwy''@;'; put 'put ''OTEyNCwyOTEyNSwyOTEyNiwyOTEyNywyOTEyOCwyOTEyOSwyOTEzMCwyOTEzMSwyOTEzMiwyOTEzMywyOTEzNSwyOTEzNiwyOTEzNywyOTEzOCwyOTEzOSwyOTE0MiwyOTE0MywyOTE0NCwyOTE0NSwyOTE0NiwyOTE0NywyOTE0OCwyOTE0OSwyOTE1MCwyOTE1MSwyOTE1MywyOTE1NCwyOTE1''@;'; put 'put ''NSwyOTE1NiwyOTE1OCwyOTE2MCwyOTE2MSwyOTE2MiwyOTE2MywyOTE2NCwyOTE2NSwyOTE2NywyOTE2OCwyOTE2OSwyOTE3MCwyOTE3MSwyOTE3MiwyOTE3MywyOTE3NCwyOTE3NSwyOTE3NiwyOTE3OCwyOTE3OSwyOTE4MCwyOTE4MSwyOTE4MiwyOTE4MywyOTE4NCwyOTE4NSwyOTE4Niwy''@;'; put 'put ''OTE4NywyOTE4OCwyOTE4OSwyOTE5MSwyOTE5MiwyOTE5MywyOTE5NCwyOTE5NSwyOTE5NiwyOTE5NywyOTE5OCwyOTE5OSwyOTIwMCwyOTIwMSwyOTIwMiwyOTIwMywyOTIwNCwyOTIwNSwyOTIwNiwyOTIwNywyOTIwOCwyOTIwOSwyOTIxMCwyOTIxMSwyOTIxMiwyOTIxNCwyOTIxNSwyOTIx''@;'; put 'put ''NiwyOTIxNywyOTIxOCwyOTIxOSwyOTIyMCwyOTIyMSwyOTIyMiwyOTIyMywyOTIyNSwyOTIyNywyOTIyOSwyOTIzMCwyOTIzMSwyOTIzNCwyOTIzNSwyOTIzNiwyOTI0MiwyOTI0NCwyOTI0NiwyOTI0OCwyOTI0OSwyOTI1MCwyOTI1MSwyOTI1MiwyOTI1MywyOTI1NCwyOTI1NywyOTI1OCwy''@;'; put 'put ''OTI1OSwyOTI2MiwyOTI2MywyOTI2NCwyOTI2NSwyOTI2NywyOTI2OCwyOTI2OSwyOTI3MSwyOTI3MiwyOTI3NCwyOTI3NiwyOTI3OCwyOTI4MCwyOTI4MywyOTI4NCwyOTI4NSwyOTI4OCwyOTI5MCwyOTI5MSwyOTI5MiwyOTI5MywyOTI5NiwyOTI5NywyOTI5OSwyOTMwMCwyOTMwMiwyOTMw''@;'; put 'put ''MywyOTMwNCwyOTMwNywyOTMwOCwyOTMwOSwyOTMxNCwyOTMxNSwyOTMxNywyOTMxOCwyOTMxOSwyOTMyMCwyOTMyMSwyOTMyNCwyOTMyNiwyOTMyOCwyOTMyOSwyOTMzMSwyOTMzMiwyOTMzMywyOTMzNCwyOTMzNSwyOTMzNiwyOTMzNywyOTMzOCwyOTMzOSwyOTM0MCwyOTM0MSwyOTM0Miwy''@;'; put 'put ''OTM0NCwyOTM0NSwyOTM0NiwyOTM0NywyOTM0OCwyOTM0OSwyOTM1MCwyOTM1MSwyOTM1MiwyOTM1MywyOTM1NCwyOTM1NSwyOTM1OCwyOTM2MSwyOTM2MiwyOTM2MywyOTM2NSwyOTM3MCwyOTM3MSwyOTM3MiwyOTM3MywyOTM3NCwyOTM3NSwyOTM3NiwyOTM4MSwyOTM4MiwyOTM4MywyOTM4''@;'; put 'put ''NSwyOTM4NiwyOTM4NywyOTM4OCwyOTM5MSwyOTM5MywyOTM5NSwyOTM5NiwyOTM5NywyOTM5OCwyOTQwMCwyOTQwMiwyOTQwMyw1ODU2Niw1ODU2Nyw1ODU2OCw1ODU2OSw1ODU3MCw1ODU3MSw1ODU3Miw1ODU3Myw1ODU3NCw1ODU3NSw1ODU3Niw1ODU3Nyw1ODU3OCw1ODU3OSw1ODU4MCw1''@;'; put 'put ''ODU4MSw1ODU4Miw1ODU4Myw1ODU4NCw1ODU4NSw1ODU4Niw1ODU4Nyw1ODU4OCw1ODU4OSw1ODU5MCw1ODU5MSw1ODU5Miw1ODU5Myw1ODU5NCw1ODU5NSw1ODU5Niw1ODU5Nyw1ODU5OCw1ODU5OSw1ODYwMCw1ODYwMSw1ODYwMiw1ODYwMyw1ODYwNCw1ODYwNSw1ODYwNiw1ODYwNyw1ODYw''@;'; put 'put ''OCw1ODYwOSw1ODYxMCw1ODYxMSw1ODYxMiw1ODYxMyw1ODYxNCw1ODYxNSw1ODYxNiw1ODYxNyw1ODYxOCw1ODYxOSw1ODYyMCw1ODYyMSw1ODYyMiw1ODYyMyw1ODYyNCw1ODYyNSw1ODYyNiw1ODYyNyw1ODYyOCw1ODYyOSw1ODYzMCw1ODYzMSw1ODYzMiw1ODYzMyw1ODYzNCw1ODYzNSw1''@;'; put 'put ''ODYzNiw1ODYzNyw1ODYzOCw1ODYzOSw1ODY0MCw1ODY0MSw1ODY0Miw1ODY0Myw1ODY0NCw1ODY0NSw1ODY0Niw1ODY0Nyw1ODY0OCw1ODY0OSw1ODY1MCw1ODY1MSw1ODY1Miw1ODY1Myw1ODY1NCw1ODY1NSw1ODY1Niw1ODY1Nyw1ODY1OCw1ODY1OSw1ODY2MCw1ODY2MSwxMjI4OCwxMjI4''@;'; put 'put ''OSwxMjI5MCwxODMsNzEzLDcxMSwxNjgsMTIyOTEsMTIyOTMsODIxMiw2NTM3NCw4MjE0LDgyMzAsODIxNiw4MjE3LDgyMjAsODIyMSwxMjMwOCwxMjMwOSwxMjI5NiwxMjI5NywxMjI5OCwxMjI5OSwxMjMwMCwxMjMwMSwxMjMwMiwxMjMwMywxMjMxMCwxMjMxMSwxMjMwNCwxMjMwNSwxNzcs''@;'; put 'put ''MjE1LDI0Nyw4NzU4LDg3NDMsODc0NCw4NzIxLDg3MTksODc0Niw4NzQ1LDg3MTIsODc1OSw4NzMwLDg4NjksODc0MSw4NzM2LDg5NzgsODg1Nyw4NzQ3LDg3NTAsODgwMSw4NzgwLDg3NzYsODc2NSw4NzMzLDg4MDAsODgxNCw4ODE1LDg4MDQsODgwNSw4NzM0LDg3NTcsODc1Niw5Nzk0LDk3''@;'; put 'put ''OTIsMTc2LDgyNDIsODI0Myw4NDUxLDY1Mjg0LDE2NCw2NTUwNCw2NTUwNSw4MjQwLDE2Nyw4NDcwLDk3MzQsOTczMyw5Njc1LDk2NzksOTY3OCw5NjcxLDk2NzAsOTYzMyw5NjMyLDk2NTEsOTY1MCw4MjUxLDg1OTQsODU5Miw4NTkzLDg1OTUsMTIzMDcsNTg2NjIsNTg2NjMsNTg2NjQsNTg2''@;'; put 'put ''NjUsNTg2NjYsNTg2NjcsNTg2NjgsNTg2NjksNTg2NzAsNTg2NzEsNTg2NzIsNTg2NzMsNTg2NzQsNTg2NzUsNTg2NzYsNTg2NzcsNTg2NzgsNTg2NzksNTg2ODAsNTg2ODEsNTg2ODIsNTg2ODMsNTg2ODQsNTg2ODUsNTg2ODYsNTg2ODcsNTg2ODgsNTg2ODksNTg2OTAsNTg2OTEsNTg2OTIs''@;'; put 'put ''NTg2OTMsNTg2OTQsNTg2OTUsNTg2OTYsNTg2OTcsNTg2OTgsNTg2OTksNTg3MDAsNTg3MDEsNTg3MDIsNTg3MDMsNTg3MDQsNTg3MDUsNTg3MDYsNTg3MDcsNTg3MDgsNTg3MDksNTg3MTAsNTg3MTEsNTg3MTIsNTg3MTMsNTg3MTQsNTg3MTUsNTg3MTYsNTg3MTcsNTg3MTgsNTg3MTksNTg3''@;'; put 'put ''MjAsNTg3MjEsNTg3MjIsNTg3MjMsNTg3MjQsNTg3MjUsNTg3MjYsNTg3MjcsNTg3MjgsNTg3MjksNTg3MzAsNTg3MzEsNTg3MzIsNTg3MzMsNTg3MzQsNTg3MzUsNTg3MzYsNTg3MzcsNTg3MzgsNTg3MzksNTg3NDAsNTg3NDEsNTg3NDIsNTg3NDMsNTg3NDQsNTg3NDUsNTg3NDYsNTg3NDcs''@;'; put 'put ''NTg3NDgsNTg3NDksNTg3NTAsNTg3NTEsNTg3NTIsNTg3NTMsNTg3NTQsNTg3NTUsNTg3NTYsNTg3NTcsODU2MCw4NTYxLDg1NjIsODU2Myw4NTY0LDg1NjUsODU2Niw4NTY3LDg1NjgsODU2OSw1OTIzOCw1OTIzOSw1OTI0MCw1OTI0MSw1OTI0Miw1OTI0Myw5MzUyLDkzNTMsOTM1NCw5MzU1''@;'; put 'put ''LDkzNTYsOTM1Nyw5MzU4LDkzNTksOTM2MCw5MzYxLDkzNjIsOTM2Myw5MzY0LDkzNjUsOTM2Niw5MzY3LDkzNjgsOTM2OSw5MzcwLDkzNzEsOTMzMiw5MzMzLDkzMzQsOTMzNSw5MzM2LDkzMzcsOTMzOCw5MzM5LDkzNDAsOTM0MSw5MzQyLDkzNDMsOTM0NCw5MzQ1LDkzNDYsOTM0Nyw5MzQ4''@;'; put 'put ''LDkzNDksOTM1MCw5MzUxLDkzMTIsOTMxMyw5MzE0LDkzMTUsOTMxNiw5MzE3LDkzMTgsOTMxOSw5MzIwLDkzMjEsODM2NCw1OTI0NSwxMjgzMiwxMjgzMywxMjgzNCwxMjgzNSwxMjgzNiwxMjgzNywxMjgzOCwxMjgzOSwxMjg0MCwxMjg0MSw1OTI0Niw1OTI0Nyw4NTQ0LDg1NDUsODU0Niw4''@;'; put 'put ''NTQ3LDg1NDgsODU0OSw4NTUwLDg1NTEsODU1Miw4NTUzLDg1NTQsODU1NSw1OTI0OCw1OTI0OSw1ODc1OCw1ODc1OSw1ODc2MCw1ODc2MSw1ODc2Miw1ODc2Myw1ODc2NCw1ODc2NSw1ODc2Niw1ODc2Nyw1ODc2OCw1ODc2OSw1ODc3MCw1ODc3MSw1ODc3Miw1ODc3Myw1ODc3NCw1ODc3NSw1''@;'; put 'put ''ODc3Niw1ODc3Nyw1ODc3OCw1ODc3OSw1ODc4MCw1ODc4MSw1ODc4Miw1ODc4Myw1ODc4NCw1ODc4NSw1ODc4Niw1ODc4Nyw1ODc4OCw1ODc4OSw1ODc5MCw1ODc5MSw1ODc5Miw1ODc5Myw1ODc5NCw1ODc5NSw1ODc5Niw1ODc5Nyw1ODc5OCw1ODc5OSw1ODgwMCw1ODgwMSw1ODgwMiw1ODgw''@;'; put 'put ''Myw1ODgwNCw1ODgwNSw1ODgwNiw1ODgwNyw1ODgwOCw1ODgwOSw1ODgxMCw1ODgxMSw1ODgxMiw1ODgxMyw1ODgxNCw1ODgxNSw1ODgxNiw1ODgxNyw1ODgxOCw1ODgxOSw1ODgyMCw1ODgyMSw1ODgyMiw1ODgyMyw1ODgyNCw1ODgyNSw1ODgyNiw1ODgyNyw1ODgyOCw1ODgyOSw1ODgzMCw1''@;'; put 'put ''ODgzMSw1ODgzMiw1ODgzMyw1ODgzNCw1ODgzNSw1ODgzNiw1ODgzNyw1ODgzOCw1ODgzOSw1ODg0MCw1ODg0MSw1ODg0Miw1ODg0Myw1ODg0NCw1ODg0NSw1ODg0Niw1ODg0Nyw1ODg0OCw1ODg0OSw1ODg1MCw1ODg1MSw1ODg1MiwxMjI4OCw2NTI4MSw2NTI4Miw2NTI4Myw2NTUwOSw2NTI4''@;'; put 'put ''NSw2NTI4Niw2NTI4Nyw2NTI4OCw2NTI4OSw2NTI5MCw2NTI5MSw2NTI5Miw2NTI5Myw2NTI5NCw2NTI5NSw2NTI5Niw2NTI5Nyw2NTI5OCw2NTI5OSw2NTMwMCw2NTMwMSw2NTMwMiw2NTMwMyw2NTMwNCw2NTMwNSw2NTMwNiw2NTMwNyw2NTMwOCw2NTMwOSw2NTMxMCw2NTMxMSw2NTMxMiw2''@;'; put 'put ''NTMxMyw2NTMxNCw2NTMxNSw2NTMxNiw2NTMxNyw2NTMxOCw2NTMxOSw2NTMyMCw2NTMyMSw2NTMyMiw2NTMyMyw2NTMyNCw2NTMyNSw2NTMyNiw2NTMyNyw2NTMyOCw2NTMyOSw2NTMzMCw2NTMzMSw2NTMzMiw2NTMzMyw2NTMzNCw2NTMzNSw2NTMzNiw2NTMzNyw2NTMzOCw2NTMzOSw2NTM0''@;'; put 'put ''MCw2NTM0MSw2NTM0Miw2NTM0Myw2NTM0NCw2NTM0NSw2NTM0Niw2NTM0Nyw2NTM0OCw2NTM0OSw2NTM1MCw2NTM1MSw2NTM1Miw2NTM1Myw2NTM1NCw2NTM1NSw2NTM1Niw2NTM1Nyw2NTM1OCw2NTM1OSw2NTM2MCw2NTM2MSw2NTM2Miw2NTM2Myw2NTM2NCw2NTM2NSw2NTM2Niw2NTM2Nyw2''@;'; put 'put ''NTM2OCw2NTM2OSw2NTM3MCw2NTM3MSw2NTM3Miw2NTM3Myw2NTUwNyw1ODg1NCw1ODg1NSw1ODg1Niw1ODg1Nyw1ODg1OCw1ODg1OSw1ODg2MCw1ODg2MSw1ODg2Miw1ODg2Myw1ODg2NCw1ODg2NSw1ODg2Niw1ODg2Nyw1ODg2OCw1ODg2OSw1ODg3MCw1ODg3MSw1ODg3Miw1ODg3Myw1ODg3''@;'; put 'put ''NCw1ODg3NSw1ODg3Niw1ODg3Nyw1ODg3OCw1ODg3OSw1ODg4MCw1ODg4MSw1ODg4Miw1ODg4Myw1ODg4NCw1ODg4NSw1ODg4Niw1ODg4Nyw1ODg4OCw1ODg4OSw1ODg5MCw1ODg5MSw1ODg5Miw1ODg5Myw1ODg5NCw1ODg5NSw1ODg5Niw1ODg5Nyw1ODg5OCw1ODg5OSw1ODkwMCw1ODkwMSw1''@;'; put 'put ''ODkwMiw1ODkwMyw1ODkwNCw1ODkwNSw1ODkwNiw1ODkwNyw1ODkwOCw1ODkwOSw1ODkxMCw1ODkxMSw1ODkxMiw1ODkxMyw1ODkxNCw1ODkxNSw1ODkxNiw1ODkxNyw1ODkxOCw1ODkxOSw1ODkyMCw1ODkyMSw1ODkyMiw1ODkyMyw1ODkyNCw1ODkyNSw1ODkyNiw1ODkyNyw1ODkyOCw1ODky''@;'; put 'put ''OSw1ODkzMCw1ODkzMSw1ODkzMiw1ODkzMyw1ODkzNCw1ODkzNSw1ODkzNiw1ODkzNyw1ODkzOCw1ODkzOSw1ODk0MCw1ODk0MSw1ODk0Miw1ODk0Myw1ODk0NCw1ODk0NSw1ODk0Niw1ODk0Nyw1ODk0OCw1ODk0OSwxMjM1MywxMjM1NCwxMjM1NSwxMjM1NiwxMjM1NywxMjM1OCwxMjM1OSwx''@;'; put 'put ''MjM2MCwxMjM2MSwxMjM2MiwxMjM2MywxMjM2NCwxMjM2NSwxMjM2NiwxMjM2NywxMjM2OCwxMjM2OSwxMjM3MCwxMjM3MSwxMjM3MiwxMjM3MywxMjM3NCwxMjM3NSwxMjM3NiwxMjM3NywxMjM3OCwxMjM3OSwxMjM4MCwxMjM4MSwxMjM4MiwxMjM4MywxMjM4NCwxMjM4NSwxMjM4NiwxMjM4''@;'; put 'put ''NywxMjM4OCwxMjM4OSwxMjM5MCwxMjM5MSwxMjM5MiwxMjM5MywxMjM5NCwxMjM5NSwxMjM5NiwxMjM5NywxMjM5OCwxMjM5OSwxMjQwMCwxMjQwMSwxMjQwMiwxMjQwMywxMjQwNCwxMjQwNSwxMjQwNiwxMjQwNywxMjQwOCwxMjQwOSwxMjQxMCwxMjQxMSwxMjQxMiwxMjQxMywxMjQxNCwx''@;'; put 'put ''MjQxNSwxMjQxNiwxMjQxNywxMjQxOCwxMjQxOSwxMjQyMCwxMjQyMSwxMjQyMiwxMjQyMywxMjQyNCwxMjQyNSwxMjQyNiwxMjQyNywxMjQyOCwxMjQyOSwxMjQzMCwxMjQzMSwxMjQzMiwxMjQzMywxMjQzNCwxMjQzNSw1OTI1MCw1OTI1MSw1OTI1Miw1OTI1Myw1OTI1NCw1OTI1NSw1OTI1''@;'; put 'put ''Niw1OTI1Nyw1OTI1OCw1OTI1OSw1OTI2MCw1ODk1MCw1ODk1MSw1ODk1Miw1ODk1Myw1ODk1NCw1ODk1NSw1ODk1Niw1ODk1Nyw1ODk1OCw1ODk1OSw1ODk2MCw1ODk2MSw1ODk2Miw1ODk2Myw1ODk2NCw1ODk2NSw1ODk2Niw1ODk2Nyw1ODk2OCw1ODk2OSw1ODk3MCw1ODk3MSw1ODk3Miw1''@;'; put 'put ''ODk3Myw1ODk3NCw1ODk3NSw1ODk3Niw1ODk3Nyw1ODk3OCw1ODk3OSw1ODk4MCw1ODk4MSw1ODk4Miw1ODk4Myw1ODk4NCw1ODk4NSw1ODk4Niw1ODk4Nyw1ODk4OCw1ODk4OSw1ODk5MCw1ODk5MSw1ODk5Miw1ODk5Myw1ODk5NCw1ODk5NSw1ODk5Niw1ODk5Nyw1ODk5OCw1ODk5OSw1OWUz''@;'; put 'put ''LDU5MDAxLDU5MDAyLDU5MDAzLDU5MDA0LDU5MDA1LDU5MDA2LDU5MDA3LDU5MDA4LDU5MDA5LDU5MDEwLDU5MDExLDU5MDEyLDU5MDEzLDU5MDE0LDU5MDE1LDU5MDE2LDU5MDE3LDU5MDE4LDU5MDE5LDU5MDIwLDU5MDIxLDU5MDIyLDU5MDIzLDU5MDI0LDU5MDI1LDU5MDI2LDU5MDI3LDU5''@;'; put 'put ''MDI4LDU5MDI5LDU5MDMwLDU5MDMxLDU5MDMyLDU5MDMzLDU5MDM0LDU5MDM1LDU5MDM2LDU5MDM3LDU5MDM4LDU5MDM5LDU5MDQwLDU5MDQxLDU5MDQyLDU5MDQzLDU5MDQ0LDU5MDQ1LDEyNDQ5LDEyNDUwLDEyNDUxLDEyNDUyLDEyNDUzLDEyNDU0LDEyNDU1LDEyNDU2LDEyNDU3LDEyNDU4''@;'; put 'put ''LDEyNDU5LDEyNDYwLDEyNDYxLDEyNDYyLDEyNDYzLDEyNDY0LDEyNDY1LDEyNDY2LDEyNDY3LDEyNDY4LDEyNDY5LDEyNDcwLDEyNDcxLDEyNDcyLDEyNDczLDEyNDc0LDEyNDc1LDEyNDc2LDEyNDc3LDEyNDc4LDEyNDc5LDEyNDgwLDEyNDgxLDEyNDgyLDEyNDgzLDEyNDg0LDEyNDg1LDEy''@;'; put 'put ''NDg2LDEyNDg3LDEyNDg4LDEyNDg5LDEyNDkwLDEyNDkxLDEyNDkyLDEyNDkzLDEyNDk0LDEyNDk1LDEyNDk2LDEyNDk3LDEyNDk4LDEyNDk5LDEyNTAwLDEyNTAxLDEyNTAyLDEyNTAzLDEyNTA0LDEyNTA1LDEyNTA2LDEyNTA3LDEyNTA4LDEyNTA5LDEyNTEwLDEyNTExLDEyNTEyLDEyNTEz''@;'; put 'put ''LDEyNTE0LDEyNTE1LDEyNTE2LDEyNTE3LDEyNTE4LDEyNTE5LDEyNTIwLDEyNTIxLDEyNTIyLDEyNTIzLDEyNTI0LDEyNTI1LDEyNTI2LDEyNTI3LDEyNTI4LDEyNTI5LDEyNTMwLDEyNTMxLDEyNTMyLDEyNTMzLDEyNTM0LDU5MjYxLDU5MjYyLDU5MjYzLDU5MjY0LDU5MjY1LDU5MjY2LDU5''@;'; put 'put ''MjY3LDU5MjY4LDU5MDQ2LDU5MDQ3LDU5MDQ4LDU5MDQ5LDU5MDUwLDU5MDUxLDU5MDUyLDU5MDUzLDU5MDU0LDU5MDU1LDU5MDU2LDU5MDU3LDU5MDU4LDU5MDU5LDU5MDYwLDU5MDYxLDU5MDYyLDU5MDYzLDU5MDY0LDU5MDY1LDU5MDY2LDU5MDY3LDU5MDY4LDU5MDY5LDU5MDcwLDU5MDcx''@;'; put 'put ''LDU5MDcyLDU5MDczLDU5MDc0LDU5MDc1LDU5MDc2LDU5MDc3LDU5MDc4LDU5MDc5LDU5MDgwLDU5MDgxLDU5MDgyLDU5MDgzLDU5MDg0LDU5MDg1LDU5MDg2LDU5MDg3LDU5MDg4LDU5MDg5LDU5MDkwLDU5MDkxLDU5MDkyLDU5MDkzLDU5MDk0LDU5MDk1LDU5MDk2LDU5MDk3LDU5MDk4LDU5''@;'; put 'put ''MDk5LDU5MTAwLDU5MTAxLDU5MTAyLDU5MTAzLDU5MTA0LDU5MTA1LDU5MTA2LDU5MTA3LDU5MTA4LDU5MTA5LDU5MTEwLDU5MTExLDU5MTEyLDU5MTEzLDU5MTE0LDU5MTE1LDU5MTE2LDU5MTE3LDU5MTE4LDU5MTE5LDU5MTIwLDU5MTIxLDU5MTIyLDU5MTIzLDU5MTI0LDU5MTI1LDU5MTI2''@;'; put 'put ''LDU5MTI3LDU5MTI4LDU5MTI5LDU5MTMwLDU5MTMxLDU5MTMyLDU5MTMzLDU5MTM0LDU5MTM1LDU5MTM2LDU5MTM3LDU5MTM4LDU5MTM5LDU5MTQwLDU5MTQxLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkz''@;'; put 'put ''Miw5MzMsOTM0LDkzNSw5MzYsOTM3LDU5MjY5LDU5MjcwLDU5MjcxLDU5MjcyLDU5MjczLDU5Mjc0LDU5Mjc1LDU5Mjc2LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5''@;'; put 'put ''LDU5Mjc3LDU5Mjc4LDU5Mjc5LDU5MjgwLDU5MjgxLDU5MjgyLDU5MjgzLDY1MDc3LDY1MDc4LDY1MDgxLDY1MDgyLDY1MDg3LDY1MDg4LDY1MDg1LDY1MDg2LDY1MDg5LDY1MDkwLDY1MDkxLDY1MDkyLDU5Mjg0LDU5Mjg1LDY1MDgzLDY1MDg0LDY1MDc5LDY1MDgwLDY1MDczLDU5Mjg2LDY1''@;'; put 'put ''MDc1LDY1MDc2LDU5Mjg3LDU5Mjg4LDU5Mjg5LDU5MjkwLDU5MjkxLDU5MjkyLDU5MjkzLDU5Mjk0LDU5Mjk1LDU5MTQyLDU5MTQzLDU5MTQ0LDU5MTQ1LDU5MTQ2LDU5MTQ3LDU5MTQ4LDU5MTQ5LDU5MTUwLDU5MTUxLDU5MTUyLDU5MTUzLDU5MTU0LDU5MTU1LDU5MTU2LDU5MTU3LDU5MTU4''@;'; put 'put ''LDU5MTU5LDU5MTYwLDU5MTYxLDU5MTYyLDU5MTYzLDU5MTY0LDU5MTY1LDU5MTY2LDU5MTY3LDU5MTY4LDU5MTY5LDU5MTcwLDU5MTcxLDU5MTcyLDU5MTczLDU5MTc0LDU5MTc1LDU5MTc2LDU5MTc3LDU5MTc4LDU5MTc5LDU5MTgwLDU5MTgxLDU5MTgyLDU5MTgzLDU5MTg0LDU5MTg1LDU5''@;'; put 'put ''MTg2LDU5MTg3LDU5MTg4LDU5MTg5LDU5MTkwLDU5MTkxLDU5MTkyLDU5MTkzLDU5MTk0LDU5MTk1LDU5MTk2LDU5MTk3LDU5MTk4LDU5MTk5LDU5MjAwLDU5MjAxLDU5MjAyLDU5MjAzLDU5MjA0LDU5MjA1LDU5MjA2LDU5MjA3LDU5MjA4LDU5MjA5LDU5MjEwLDU5MjExLDU5MjEyLDU5MjEz''@;'; put 'put ''LDU5MjE0LDU5MjE1LDU5MjE2LDU5MjE3LDU5MjE4LDU5MjE5LDU5MjIwLDU5MjIxLDU5MjIyLDU5MjIzLDU5MjI0LDU5MjI1LDU5MjI2LDU5MjI3LDU5MjI4LDU5MjI5LDU5MjMwLDU5MjMxLDU5MjMyLDU5MjMzLDU5MjM0LDU5MjM1LDU5MjM2LDU5MjM3LDEwNDAsMTA0MSwxMDQyLDEwNDMs''@;'; put 'put ''MTA0NCwxMDQ1LDEwMjUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDU5Mjk2LDU5Mjk3LDU5Mjk4LDU5''@;'; put 'put ''Mjk5LDU5MzAwLDU5MzAxLDU5MzAyLDU5MzAzLDU5MzA0LDU5MzA1LDU5MzA2LDU5MzA3LDU5MzA4LDU5MzA5LDU5MzEwLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDExMDUsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODks''@;'; put 'put ''MTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDU5MzExLDU5MzEyLDU5MzEzLDU5MzE0LDU5MzE1LDU5MzE2LDU5MzE3LDU5MzE4LDU5MzE5LDU5MzIwLDU5MzIxLDU5MzIyLDU5MzIzLDcxNCw3MTUsNzI5LDgyMTEs''@;'; put 'put ''ODIxMyw4MjI5LDgyNDUsODQ1Myw4NDU3LDg1OTgsODU5OSw4NjAwLDg2MDEsODcyNSw4NzM1LDg3MzksODc4Niw4ODA2LDg4MDcsODg5NSw5NTUyLDk1NTMsOTU1NCw5NTU1LDk1NTYsOTU1Nyw5NTU4LDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2Myw5NTY0LDk1NjUsOTU2Niw5NTY3LDk1Njgs''@;'; put 'put ''OTU2OSw5NTcwLDk1NzEsOTU3Miw5NTczLDk1NzQsOTU3NSw5NTc2LDk1NzcsOTU3OCw5NTc5LDk1ODAsOTU4MSw5NTgyLDk1ODMsOTU4NCw5NTg1LDk1ODYsOTU4Nyw5NjAxLDk2MDIsOTYwMyw5NjA0LDk2MDUsOTYwNiw5NjA3LDk2MDgsOTYwOSw5NjEwLDk2MTEsOTYxMiw5NjEzLDk2MTQs''@;'; put 'put ''OTYxNSw5NjE5LDk2MjAsOTYyMSw5NjYwLDk2NjEsOTY5OCw5Njk5LDk3MDAsOTcwMSw5NzM3LDg4NTMsMTIzMDYsMTIzMTcsMTIzMTgsNTkzMjQsNTkzMjUsNTkzMjYsNTkzMjcsNTkzMjgsNTkzMjksNTkzMzAsNTkzMzEsNTkzMzIsNTkzMzMsNTkzMzQsMjU3LDIyNSw0NjIsMjI0LDI3NSwy''@;'; put 'put ''MzMsMjgzLDIzMiwyOTksMjM3LDQ2NCwyMzYsMzMzLDI0Myw0NjYsMjQyLDM2MywyNTAsNDY4LDI0OSw0NzAsNDcyLDQ3NCw0NzYsMjUyLDIzNCw1OTMsNzc0MywzMjQsMzI4LDUwNSw2MDksNTkzMzcsNTkzMzgsNTkzMzksNTkzNDAsMTI1NDksMTI1NTAsMTI1NTEsMTI1NTIsMTI1NTMsMTI1''@;'; put 'put ''NTQsMTI1NTUsMTI1NTYsMTI1NTcsMTI1NTgsMTI1NTksMTI1NjAsMTI1NjEsMTI1NjIsMTI1NjMsMTI1NjQsMTI1NjUsMTI1NjYsMTI1NjcsMTI1NjgsMTI1NjksMTI1NzAsMTI1NzEsMTI1NzIsMTI1NzMsMTI1NzQsMTI1NzUsMTI1NzYsMTI1NzcsMTI1NzgsMTI1NzksMTI1ODAsMTI1ODEs''@;'; put 'put ''MTI1ODIsMTI1ODMsMTI1ODQsMTI1ODUsNTkzNDEsNTkzNDIsNTkzNDMsNTkzNDQsNTkzNDUsNTkzNDYsNTkzNDcsNTkzNDgsNTkzNDksNTkzNTAsNTkzNTEsNTkzNTIsNTkzNTMsNTkzNTQsNTkzNTUsNTkzNTYsNTkzNTcsNTkzNTgsNTkzNTksNTkzNjAsNTkzNjEsMTIzMjEsMTIzMjIsMTIz''@;'; put 'put ''MjMsMTIzMjQsMTIzMjUsMTIzMjYsMTIzMjcsMTIzMjgsMTIzMjksMTI5NjMsMTMxOTgsMTMxOTksMTMyMTIsMTMyMTMsMTMyMTQsMTMyMTcsMTMyNTIsMTMyNjIsMTMyNjUsMTMyNjYsMTMyNjksNjUwNzIsNjU1MDYsNjU1MDgsNTkzNjIsODQ4MSwxMjg0OSw1OTM2Myw4MjA4LDU5MzY0LDU5''@;'; put 'put ''MzY1LDU5MzY2LDEyNTQwLDEyNDQzLDEyNDQ0LDEyNTQxLDEyNTQyLDEyMjk0LDEyNDQ1LDEyNDQ2LDY1MDk3LDY1MDk4LDY1MDk5LDY1MTAwLDY1MTAxLDY1MTAyLDY1MTAzLDY1MTA0LDY1MTA1LDY1MTA2LDY1MTA4LDY1MTA5LDY1MTEwLDY1MTExLDY1MTEzLDY1MTE0LDY1MTE1LDY1MTE2''@;'; put 'put ''LDY1MTE3LDY1MTE4LDY1MTE5LDY1MTIwLDY1MTIxLDY1MTIyLDY1MTIzLDY1MTI0LDY1MTI1LDY1MTI2LDY1MTI4LDY1MTI5LDY1MTMwLDY1MTMxLDEyMzUwLDEyMjcyLDEyMjczLDEyMjc0LDEyMjc1LDEyMjc2LDEyMjc3LDEyMjc4LDEyMjc5LDEyMjgwLDEyMjgxLDEyMjgyLDEyMjgzLDEy''@;'; put 'put ''Mjk1LDU5MzgwLDU5MzgxLDU5MzgyLDU5MzgzLDU5Mzg0LDU5Mzg1LDU5Mzg2LDU5Mzg3LDU5Mzg4LDU5Mzg5LDU5MzkwLDU5MzkxLDU5MzkyLDk0NzIsOTQ3Myw5NDc0LDk0NzUsOTQ3Niw5NDc3LDk0NzgsOTQ3OSw5NDgwLDk0ODEsOTQ4Miw5NDgzLDk0ODQsOTQ4NSw5NDg2LDk0ODcsOTQ4''@;'; put 'put ''OCw5NDg5LDk0OTAsOTQ5MSw5NDkyLDk0OTMsOTQ5NCw5NDk1LDk0OTYsOTQ5Nyw5NDk4LDk0OTksOTUwMCw5NTAxLDk1MDIsOTUwMyw5NTA0LDk1MDUsOTUwNiw5NTA3LDk1MDgsOTUwOSw5NTEwLDk1MTEsOTUxMiw5NTEzLDk1MTQsOTUxNSw5NTE2LDk1MTcsOTUxOCw5NTE5LDk1MjAsOTUy''@;'; put 'put ''MSw5NTIyLDk1MjMsOTUyNCw5NTI1LDk1MjYsOTUyNyw5NTI4LDk1MjksOTUzMCw5NTMxLDk1MzIsOTUzMyw5NTM0LDk1MzUsOTUzNiw5NTM3LDk1MzgsOTUzOSw5NTQwLDk1NDEsOTU0Miw5NTQzLDk1NDQsOTU0NSw5NTQ2LDk1NDcsNTkzOTMsNTkzOTQsNTkzOTUsNTkzOTYsNTkzOTcsNTkz''@;'; put 'put ''OTgsNTkzOTksNTk0MDAsNTk0MDEsNTk0MDIsNTk0MDMsNTk0MDQsNTk0MDUsNTk0MDYsNTk0MDcsMjk0MDQsMjk0MDUsMjk0MDcsMjk0MTAsMjk0MTEsMjk0MTIsMjk0MTMsMjk0MTQsMjk0MTUsMjk0MTgsMjk0MTksMjk0MjksMjk0MzAsMjk0MzMsMjk0MzcsMjk0MzgsMjk0MzksMjk0NDAs''@;'; put 'put ''Mjk0NDIsMjk0NDQsMjk0NDUsMjk0NDYsMjk0NDcsMjk0NDgsMjk0NDksMjk0NTEsMjk0NTIsMjk0NTMsMjk0NTUsMjk0NTYsMjk0NTcsMjk0NTgsMjk0NjAsMjk0NjQsMjk0NjUsMjk0NjYsMjk0NzEsMjk0NzIsMjk0NzUsMjk0NzYsMjk0NzgsMjk0NzksMjk0ODAsMjk0ODUsMjk0ODcsMjk0''@;'; put 'put ''ODgsMjk0OTAsMjk0OTEsMjk0OTMsMjk0OTQsMjk0OTgsMjk0OTksMjk1MDAsMjk1MDEsMjk1MDQsMjk1MDUsMjk1MDYsMjk1MDcsMjk1MDgsMjk1MDksMjk1MTAsMjk1MTEsMjk1MTIsMjk1MTMsMjk1MTQsMjk1MTUsMjk1MTYsMjk1MTgsMjk1MTksMjk1MjEsMjk1MjMsMjk1MjQsMjk1MjUs''@;'; put 'put ''Mjk1MjYsMjk1MjgsMjk1MjksMjk1MzAsMjk1MzEsMjk1MzIsMjk1MzMsMjk1MzQsMjk1MzUsMjk1MzcsMjk1MzgsMjk1MzksMjk1NDAsMjk1NDEsMjk1NDIsMjk1NDMsMjk1NDQsMjk1NDUsMjk1NDYsMjk1NDcsMjk1NTAsMjk1NTIsMjk1NTMsNTczNDQsNTczNDUsNTczNDYsNTczNDcsNTcz''@;'; put 'put ''NDgsNTczNDksNTczNTAsNTczNTEsNTczNTIsNTczNTMsNTczNTQsNTczNTUsNTczNTYsNTczNTcsNTczNTgsNTczNTksNTczNjAsNTczNjEsNTczNjIsNTczNjMsNTczNjQsNTczNjUsNTczNjYsNTczNjcsNTczNjgsNTczNjksNTczNzAsNTczNzEsNTczNzIsNTczNzMsNTczNzQsNTczNzUs''@;'; put 'put ''NTczNzYsNTczNzcsNTczNzgsNTczNzksNTczODAsNTczODEsNTczODIsNTczODMsNTczODQsNTczODUsNTczODYsNTczODcsNTczODgsNTczODksNTczOTAsNTczOTEsNTczOTIsNTczOTMsNTczOTQsNTczOTUsNTczOTYsNTczOTcsNTczOTgsNTczOTksNTc0MDAsNTc0MDEsNTc0MDIsNTc0''@;'; put 'put ''MDMsNTc0MDQsNTc0MDUsNTc0MDYsNTc0MDcsNTc0MDgsNTc0MDksNTc0MTAsNTc0MTEsNTc0MTIsNTc0MTMsNTc0MTQsNTc0MTUsNTc0MTYsNTc0MTcsNTc0MTgsNTc0MTksNTc0MjAsNTc0MjEsNTc0MjIsNTc0MjMsNTc0MjQsNTc0MjUsNTc0MjYsNTc0MjcsNTc0MjgsNTc0MjksNTc0MzAs''@;'; put 'put ''NTc0MzEsNTc0MzIsNTc0MzMsNTc0MzQsNTc0MzUsNTc0MzYsNTc0MzcsMjk1NTQsMjk1NTUsMjk1NTYsMjk1NTcsMjk1NTgsMjk1NTksMjk1NjAsMjk1NjEsMjk1NjIsMjk1NjMsMjk1NjQsMjk1NjUsMjk1NjcsMjk1NjgsMjk1NjksMjk1NzAsMjk1NzEsMjk1NzMsMjk1NzQsMjk1NzYsMjk1''@;'; put 'put ''NzgsMjk1ODAsMjk1ODEsMjk1ODMsMjk1ODQsMjk1ODYsMjk1ODcsMjk1ODgsMjk1ODksMjk1OTEsMjk1OTIsMjk1OTMsMjk1OTQsMjk1OTYsMjk1OTcsMjk1OTgsMjk2MDAsMjk2MDEsMjk2MDMsMjk2MDQsMjk2MDUsMjk2MDYsMjk2MDcsMjk2MDgsMjk2MTAsMjk2MTIsMjk2MTMsMjk2MTcs''@;'; put 'put ''Mjk2MjAsMjk2MjEsMjk2MjIsMjk2MjQsMjk2MjUsMjk2MjgsMjk2MjksMjk2MzAsMjk2MzEsMjk2MzMsMjk2MzUsMjk2MzYsMjk2MzcsMjk2MzgsMjk2MzksMjk2NDMsMjk2NDQsMjk2NDYsMjk2NTAsMjk2NTEsMjk2NTIsMjk2NTMsMjk2NTQsMjk2NTUsMjk2NTYsMjk2NTgsMjk2NTksMjk2''@;'; put 'put ''NjAsMjk2NjEsMjk2NjMsMjk2NjUsMjk2NjYsMjk2NjcsMjk2NjgsMjk2NzAsMjk2NzIsMjk2NzQsMjk2NzUsMjk2NzYsMjk2NzgsMjk2NzksMjk2ODAsMjk2ODEsMjk2ODMsMjk2ODQsMjk2ODUsMjk2ODYsMjk2ODcsNTc0MzgsNTc0MzksNTc0NDAsNTc0NDEsNTc0NDIsNTc0NDMsNTc0NDQs''@;'; put 'put ''NTc0NDUsNTc0NDYsNTc0NDcsNTc0NDgsNTc0NDksNTc0NTAsNTc0NTEsNTc0NTIsNTc0NTMsNTc0NTQsNTc0NTUsNTc0NTYsNTc0NTcsNTc0NTgsNTc0NTksNTc0NjAsNTc0NjEsNTc0NjIsNTc0NjMsNTc0NjQsNTc0NjUsNTc0NjYsNTc0NjcsNTc0NjgsNTc0NjksNTc0NzAsNTc0NzEsNTc0''@;'; put 'put ''NzIsNTc0NzMsNTc0NzQsNTc0NzUsNTc0NzYsNTc0NzcsNTc0NzgsNTc0NzksNTc0ODAsNTc0ODEsNTc0ODIsNTc0ODMsNTc0ODQsNTc0ODUsNTc0ODYsNTc0ODcsNTc0ODgsNTc0ODksNTc0OTAsNTc0OTEsNTc0OTIsNTc0OTMsNTc0OTQsNTc0OTUsNTc0OTYsNTc0OTcsNTc0OTgsNTc0OTks''@;'; put 'put ''NTc1MDAsNTc1MDEsNTc1MDIsNTc1MDMsNTc1MDQsNTc1MDUsNTc1MDYsNTc1MDcsNTc1MDgsNTc1MDksNTc1MTAsNTc1MTEsNTc1MTIsNTc1MTMsNTc1MTQsNTc1MTUsNTc1MTYsNTc1MTcsNTc1MTgsNTc1MTksNTc1MjAsNTc1MjEsNTc1MjIsNTc1MjMsNTc1MjQsNTc1MjUsNTc1MjYsNTc1''@;'; put 'put ''MjcsNTc1MjgsNTc1MjksNTc1MzAsNTc1MzEsMjk2ODgsMjk2ODksMjk2OTAsMjk2OTEsMjk2OTIsMjk2OTMsMjk2OTQsMjk2OTUsMjk2OTYsMjk2OTcsMjk2OTgsMjk3MDAsMjk3MDMsMjk3MDQsMjk3MDcsMjk3MDgsMjk3MDksMjk3MTAsMjk3MTMsMjk3MTQsMjk3MTUsMjk3MTYsMjk3MTcs''@;'; put 'put ''Mjk3MTgsMjk3MTksMjk3MjAsMjk3MjEsMjk3MjQsMjk3MjUsMjk3MjYsMjk3MjcsMjk3MjgsMjk3MjksMjk3MzEsMjk3MzIsMjk3MzUsMjk3MzcsMjk3MzksMjk3NDEsMjk3NDMsMjk3NDUsMjk3NDYsMjk3NTEsMjk3NTIsMjk3NTMsMjk3NTQsMjk3NTUsMjk3NTcsMjk3NTgsMjk3NTksMjk3''@;'; put 'put ''NjAsMjk3NjIsMjk3NjMsMjk3NjQsMjk3NjUsMjk3NjYsMjk3NjcsMjk3NjgsMjk3NjksMjk3NzAsMjk3NzEsMjk3NzIsMjk3NzMsMjk3NzQsMjk3NzUsMjk3NzYsMjk3NzcsMjk3NzgsMjk3NzksMjk3ODAsMjk3ODIsMjk3ODQsMjk3ODksMjk3OTIsMjk3OTMsMjk3OTQsMjk3OTUsMjk3OTYs''@;'; put 'put ''Mjk3OTcsMjk3OTgsMjk3OTksMjk4MDAsMjk4MDEsMjk4MDIsMjk4MDMsMjk4MDQsMjk4MDYsMjk4MDcsMjk4MDksMjk4MTAsMjk4MTEsMjk4MTIsMjk4MTMsMjk4MTYsMjk4MTcsMjk4MTgsNTc1MzIsNTc1MzMsNTc1MzQsNTc1MzUsNTc1MzYsNTc1MzcsNTc1MzgsNTc1MzksNTc1NDAsNTc1''@;'; put 'put ''NDEsNTc1NDIsNTc1NDMsNTc1NDQsNTc1NDUsNTc1NDYsNTc1NDcsNTc1NDgsNTc1NDksNTc1NTAsNTc1NTEsNTc1NTIsNTc1NTMsNTc1NTQsNTc1NTUsNTc1NTYsNTc1NTcsNTc1NTgsNTc1NTksNTc1NjAsNTc1NjEsNTc1NjIsNTc1NjMsNTc1NjQsNTc1NjUsNTc1NjYsNTc1NjcsNTc1Njgs''@;'; put 'put ''NTc1NjksNTc1NzAsNTc1NzEsNTc1NzIsNTc1NzMsNTc1NzQsNTc1NzUsNTc1NzYsNTc1NzcsNTc1NzgsNTc1NzksNTc1ODAsNTc1ODEsNTc1ODIsNTc1ODMsNTc1ODQsNTc1ODUsNTc1ODYsNTc1ODcsNTc1ODgsNTc1ODksNTc1OTAsNTc1OTEsNTc1OTIsNTc1OTMsNTc1OTQsNTc1OTUsNTc1''@;'; put 'put ''OTYsNTc1OTcsNTc1OTgsNTc1OTksNTc2MDAsNTc2MDEsNTc2MDIsNTc2MDMsNTc2MDQsNTc2MDUsNTc2MDYsNTc2MDcsNTc2MDgsNTc2MDksNTc2MTAsNTc2MTEsNTc2MTIsNTc2MTMsNTc2MTQsNTc2MTUsNTc2MTYsNTc2MTcsNTc2MTgsNTc2MTksNTc2MjAsNTc2MjEsNTc2MjIsNTc2MjMs''@;'; put 'put ''NTc2MjQsNTc2MjUsMjk4MTksMjk4MjAsMjk4MjEsMjk4MjMsMjk4MjYsMjk4MjgsMjk4MjksMjk4MzAsMjk4MzIsMjk4MzMsMjk4MzQsMjk4MzYsMjk4MzcsMjk4MzksMjk4NDEsMjk4NDIsMjk4NDMsMjk4NDQsMjk4NDUsMjk4NDYsMjk4NDcsMjk4NDgsMjk4NDksMjk4NTAsMjk4NTEsMjk4''@;'; put 'put ''NTMsMjk4NTUsMjk4NTYsMjk4NTcsMjk4NTgsMjk4NTksMjk4NjAsMjk4NjEsMjk4NjIsMjk4NjYsMjk4NjcsMjk4NjgsMjk4NjksMjk4NzAsMjk4NzEsMjk4NzIsMjk4NzMsMjk4NzQsMjk4NzUsMjk4NzYsMjk4NzcsMjk4NzgsMjk4NzksMjk4ODAsMjk4ODEsMjk4ODMsMjk4ODQsMjk4ODUs''@;'; put 'put ''Mjk4ODYsMjk4ODcsMjk4ODgsMjk4ODksMjk4OTAsMjk4OTEsMjk4OTIsMjk4OTMsMjk4OTQsMjk4OTUsMjk4OTYsMjk4OTcsMjk4OTgsMjk4OTksMjk5MDAsMjk5MDEsMjk5MDIsMjk5MDMsMjk5MDQsMjk5MDUsMjk5MDcsMjk5MDgsMjk5MDksMjk5MTAsMjk5MTEsMjk5MTIsMjk5MTMsMjk5''@;'; put 'put ''MTQsMjk5MTUsMjk5MTcsMjk5MTksMjk5MjEsMjk5MjUsMjk5MjcsMjk5MjgsMjk5MjksMjk5MzAsMjk5MzEsMjk5MzIsMjk5MzMsMjk5MzYsMjk5MzcsMjk5MzgsNTc2MjYsNTc2MjcsNTc2MjgsNTc2MjksNTc2MzAsNTc2MzEsNTc2MzIsNTc2MzMsNTc2MzQsNTc2MzUsNTc2MzYsNTc2Mzcs''@;'; put 'put ''NTc2MzgsNTc2MzksNTc2NDAsNTc2NDEsNTc2NDIsNTc2NDMsNTc2NDQsNTc2NDUsNTc2NDYsNTc2NDcsNTc2NDgsNTc2NDksNTc2NTAsNTc2NTEsNTc2NTIsNTc2NTMsNTc2NTQsNTc2NTUsNTc2NTYsNTc2NTcsNTc2NTgsNTc2NTksNTc2NjAsNTc2NjEsNTc2NjIsNTc2NjMsNTc2NjQsNTc2''@;'; put 'put ''NjUsNTc2NjYsNTc2NjcsNTc2NjgsNTc2NjksNTc2NzAsNTc2NzEsNTc2NzIsNTc2NzMsNTc2NzQsNTc2NzUsNTc2NzYsNTc2NzcsNTc2NzgsNTc2NzksNTc2ODAsNTc2ODEsNTc2ODIsNTc2ODMsNTc2ODQsNTc2ODUsNTc2ODYsNTc2ODcsNTc2ODgsNTc2ODksNTc2OTAsNTc2OTEsNTc2OTIs''@;'; put 'put ''NTc2OTMsNTc2OTQsNTc2OTUsNTc2OTYsNTc2OTcsNTc2OTgsNTc2OTksNTc3MDAsNTc3MDEsNTc3MDIsNTc3MDMsNTc3MDQsNTc3MDUsNTc3MDYsNTc3MDcsNTc3MDgsNTc3MDksNTc3MTAsNTc3MTEsNTc3MTIsNTc3MTMsNTc3MTQsNTc3MTUsNTc3MTYsNTc3MTcsNTc3MTgsNTc3MTksMjk5''@;'; put 'put ''MzksMjk5NDEsMjk5NDQsMjk5NDUsMjk5NDYsMjk5NDcsMjk5NDgsMjk5NDksMjk5NTAsMjk5NTIsMjk5NTMsMjk5NTQsMjk5NTUsMjk5NTcsMjk5NTgsMjk5NTksMjk5NjAsMjk5NjEsMjk5NjIsMjk5NjMsMjk5NjQsMjk5NjYsMjk5NjgsMjk5NzAsMjk5NzIsMjk5NzMsMjk5NzQsMjk5NzUs''@;'; put 'put ''Mjk5NzksMjk5ODEsMjk5ODIsMjk5ODQsMjk5ODUsMjk5ODYsMjk5ODcsMjk5ODgsMjk5OTAsMjk5OTEsMjk5OTQsMjk5OTgsMzAwMDQsMzAwMDYsMzAwMDksMzAwMTIsMzAwMTMsMzAwMTUsMzAwMTcsMzAwMTgsMzAwMTksMzAwMjAsMzAwMjIsMzAwMjMsMzAwMjUsMzAwMjYsMzAwMjksMzAw''@;'; put 'put ''MzIsMzAwMzMsMzAwMzQsMzAwMzUsMzAwMzcsMzAwMzgsMzAwMzksMzAwNDAsMzAwNDUsMzAwNDYsMzAwNDcsMzAwNDgsMzAwNDksMzAwNTAsMzAwNTEsMzAwNTIsMzAwNTUsMzAwNTYsMzAwNTcsMzAwNTksMzAwNjAsMzAwNjEsMzAwNjIsMzAwNjMsMzAwNjQsMzAwNjUsMzAwNjcsMzAwNjks''@;'; put 'put ''MzAwNzAsMzAwNzEsMzAwNzQsMzAwNzUsMzAwNzYsMzAwNzcsMzAwNzgsMzAwODAsMzAwODEsMzAwODIsMzAwODQsMzAwODUsMzAwODcsNTc3MjAsNTc3MjEsNTc3MjIsNTc3MjMsNTc3MjQsNTc3MjUsNTc3MjYsNTc3MjcsNTc3MjgsNTc3MjksNTc3MzAsNTc3MzEsNTc3MzIsNTc3MzMsNTc3''@;'; put 'put ''MzQsNTc3MzUsNTc3MzYsNTc3MzcsNTc3MzgsNTc3MzksNTc3NDAsNTc3NDEsNTc3NDIsNTc3NDMsNTc3NDQsNTc3NDUsNTc3NDYsNTc3NDcsNTc3NDgsNTc3NDksNTc3NTAsNTc3NTEsNTc3NTIsNTc3NTMsNTc3NTQsNTc3NTUsNTc3NTYsNTc3NTcsNTc3NTgsNTc3NTksNTc3NjAsNTc3NjEs''@;'; put 'put ''NTc3NjIsNTc3NjMsNTc3NjQsNTc3NjUsNTc3NjYsNTc3NjcsNTc3NjgsNTc3NjksNTc3NzAsNTc3NzEsNTc3NzIsNTc3NzMsNTc3NzQsNTc3NzUsNTc3NzYsNTc3NzcsNTc3NzgsNTc3NzksNTc3ODAsNTc3ODEsNTc3ODIsNTc3ODMsNTc3ODQsNTc3ODUsNTc3ODYsNTc3ODcsNTc3ODgsNTc3''@;'; put 'put ''ODksNTc3OTAsNTc3OTEsNTc3OTIsNTc3OTMsNTc3OTQsNTc3OTUsNTc3OTYsNTc3OTcsNTc3OTgsNTc3OTksNTc4MDAsNTc4MDEsNTc4MDIsNTc4MDMsNTc4MDQsNTc4MDUsNTc4MDYsNTc4MDcsNTc4MDgsNTc4MDksNTc4MTAsNTc4MTEsNTc4MTIsNTc4MTMsMzAwODgsMzAwODksMzAwOTAs''@;'; put 'put ''MzAwOTIsMzAwOTMsMzAwOTQsMzAwOTYsMzAwOTksMzAxMDEsMzAxMDQsMzAxMDcsMzAxMDgsMzAxMTAsMzAxMTQsMzAxMTgsMzAxMTksMzAxMjAsMzAxMjEsMzAxMjIsMzAxMjUsMzAxMzQsMzAxMzUsMzAxMzgsMzAxMzksMzAxNDMsMzAxNDQsMzAxNDUsMzAxNTAsMzAxNTUsMzAxNTYsMzAx''@;'; put 'put ''NTgsMzAxNTksMzAxNjAsMzAxNjEsMzAxNjMsMzAxNjcsMzAxNjksMzAxNzAsMzAxNzIsMzAxNzMsMzAxNzUsMzAxNzYsMzAxNzcsMzAxODEsMzAxODUsMzAxODgsMzAxODksMzAxOTAsMzAxOTEsMzAxOTQsMzAxOTUsMzAxOTcsMzAxOTgsMzAxOTksMzAyMDAsMzAyMDIsMzAyMDMsMzAyMDUs''@;'; put 'put ''MzAyMDYsMzAyMTAsMzAyMTIsMzAyMTQsMzAyMTUsMzAyMTYsMzAyMTcsMzAyMTksMzAyMjEsMzAyMjIsMzAyMjMsMzAyMjUsMzAyMjYsMzAyMjcsMzAyMjgsMzAyMzAsMzAyMzQsMzAyMzYsMzAyMzcsMzAyMzgsMzAyNDEsMzAyNDMsMzAyNDcsMzAyNDgsMzAyNTIsMzAyNTQsMzAyNTUsMzAy''@;'; put 'put ''NTcsMzAyNTgsMzAyNjIsMzAyNjMsMzAyNjUsMzAyNjYsMzAyNjcsMzAyNjksMzAyNzMsMzAyNzQsMzAyNzYsNTc4MTQsNTc4MTUsNTc4MTYsNTc4MTcsNTc4MTgsNTc4MTksNTc4MjAsNTc4MjEsNTc4MjIsNTc4MjMsNTc4MjQsNTc4MjUsNTc4MjYsNTc4MjcsNTc4MjgsNTc4MjksNTc4MzAs''@;'; put 'put ''NTc4MzEsNTc4MzIsNTc4MzMsNTc4MzQsNTc4MzUsNTc4MzYsNTc4MzcsNTc4MzgsNTc4MzksNTc4NDAsNTc4NDEsNTc4NDIsNTc4NDMsNTc4NDQsNTc4NDUsNTc4NDYsNTc4NDcsNTc4NDgsNTc4NDksNTc4NTAsNTc4NTEsNTc4NTIsNTc4NTMsNTc4NTQsNTc4NTUsNTc4NTYsNTc4NTcsNTc4''@;'; put 'put ''NTgsNTc4NTksNTc4NjAsNTc4NjEsNTc4NjIsNTc4NjMsNTc4NjQsNTc4NjUsNTc4NjYsNTc4NjcsNTc4NjgsNTc4NjksNTc4NzAsNTc4NzEsNTc4NzIsNTc4NzMsNTc4NzQsNTc4NzUsNTc4NzYsNTc4NzcsNTc4NzgsNTc4NzksNTc4ODAsNTc4ODEsNTc4ODIsNTc4ODMsNTc4ODQsNTc4ODUs''@;'; put 'put ''NTc4ODYsNTc4ODcsNTc4ODgsNTc4ODksNTc4OTAsNTc4OTEsNTc4OTIsNTc4OTMsNTc4OTQsNTc4OTUsNTc4OTYsNTc4OTcsNTc4OTgsNTc4OTksNTc5MDAsNTc5MDEsNTc5MDIsNTc5MDMsNTc5MDQsNTc5MDUsNTc5MDYsNTc5MDcsMzAyNzcsMzAyNzgsMzAyNzksMzAyODAsMzAyODEsMzAy''@;'; put 'put ''ODIsMzAyODMsMzAyODYsMzAyODcsMzAyODgsMzAyODksMzAyOTAsMzAyOTEsMzAyOTMsMzAyOTUsMzAyOTYsMzAyOTcsMzAyOTgsMzAyOTksMzAzMDEsMzAzMDMsMzAzMDQsMzAzMDUsMzAzMDYsMzAzMDgsMzAzMDksMzAzMTAsMzAzMTEsMzAzMTIsMzAzMTMsMzAzMTQsMzAzMTYsMzAzMTcs''@;'; put 'put ''MzAzMTgsMzAzMjAsMzAzMjEsMzAzMjIsMzAzMjMsMzAzMjQsMzAzMjUsMzAzMjYsMzAzMjcsMzAzMjksMzAzMzAsMzAzMzIsMzAzMzUsMzAzMzYsMzAzMzcsMzAzMzksMzAzNDEsMzAzNDUsMzAzNDYsMzAzNDgsMzAzNDksMzAzNTEsMzAzNTIsMzAzNTQsMzAzNTYsMzAzNTcsMzAzNTksMzAz''@;'; put 'put ''NjAsMzAzNjIsMzAzNjMsMzAzNjQsMzAzNjUsMzAzNjYsMzAzNjcsMzAzNjgsMzAzNjksMzAzNzAsMzAzNzEsMzAzNzMsMzAzNzQsMzAzNzUsMzAzNzYsMzAzNzcsMzAzNzgsMzAzNzksMzAzODAsMzAzODEsMzAzODMsMzAzODQsMzAzODcsMzAzODksMzAzOTAsMzAzOTEsMzAzOTIsMzAzOTMs''@;'; put 'put ''MzAzOTQsMzAzOTUsMzAzOTYsMzAzOTcsMzAzOTgsMzA0MDAsMzA0MDEsMzA0MDMsMjE4MzQsMzg0NjMsMjI0NjcsMjUzODQsMjE3MTAsMjE3NjksMjE2OTYsMzAzNTMsMzAyODQsMzQxMDgsMzA3MDIsMzM0MDYsMzA4NjEsMjkyMzMsMzg1NTIsMzg3OTcsMjc2ODgsMjM0MzMsMjA0NzQsMjUz''@;'; put 'put ''NTMsMjYyNjMsMjM3MzYsMzMwMTgsMjY2OTYsMzI5NDIsMjYxMTQsMzA0MTQsMjA5ODUsMjU5NDIsMjkxMDAsMzI3NTMsMzQ5NDgsMjA2NTgsMjI4ODUsMjUwMzQsMjg1OTUsMzM0NTMsMjU0MjAsMjUxNzAsMjE0ODUsMjE1NDMsMzE0OTQsMjA4NDMsMzAxMTYsMjQwNTIsMjUzMDAsMzYyOTks''@;'; put 'put ''Mzg3NzQsMjUyMjYsMzI3OTMsMjIzNjUsMzg3MTIsMzI2MTAsMjkyNDAsMzAzMzMsMjY1NzUsMzAzMzQsMjU2NzAsMjAzMzYsMzYxMzMsMjUzMDgsMzEyNTUsMjYwMDEsMjk2NzcsMjU2NDQsMjUyMDMsMzMzMjQsMzkwNDEsMjY0OTUsMjkyNTYsMjUxOTgsMjUyOTIsMjAyNzYsMjk5MjMsMjEz''@;'; put 'put ''MjIsMjExNTAsMzI0NTgsMzcwMzAsMjQxMTAsMjY3NTgsMjcwMzYsMzMxNTIsMzI0NjUsMjY4MzQsMzA5MTcsMzQ0NDQsMzgyMjUsMjA2MjEsMzU4NzYsMzM1MDIsMzI5OTAsMjEyNTMsMzUwOTAsMjEwOTMsMzA0MDQsMzA0MDcsMzA0MDksMzA0MTEsMzA0MTIsMzA0MTksMzA0MjEsMzA0MjUs''@;'; put 'put ''MzA0MjYsMzA0MjgsMzA0MjksMzA0MzAsMzA0MzIsMzA0MzMsMzA0MzQsMzA0MzUsMzA0MzYsMzA0MzgsMzA0MzksMzA0NDAsMzA0NDEsMzA0NDIsMzA0NDMsMzA0NDQsMzA0NDUsMzA0NDgsMzA0NTEsMzA0NTMsMzA0NTQsMzA0NTUsMzA0NTgsMzA0NTksMzA0NjEsMzA0NjMsMzA0NjQsMzA0''@;'; put 'put ''NjYsMzA0NjcsMzA0NjksMzA0NzAsMzA0NzQsMzA0NzYsMzA0NzgsMzA0NzksMzA0ODAsMzA0ODEsMzA0ODIsMzA0ODMsMzA0ODQsMzA0ODUsMzA0ODYsMzA0ODcsMzA0ODgsMzA0OTEsMzA0OTIsMzA0OTMsMzA0OTQsMzA0OTcsMzA0OTksMzA1MDAsMzA1MDEsMzA1MDMsMzA1MDYsMzA1MDcs''@;'; put 'put ''MzA1MDgsMzA1MTAsMzA1MTIsMzA1MTMsMzA1MTQsMzA1MTUsMzA1MTYsMzA1MjEsMzA1MjMsMzA1MjUsMzA1MjYsMzA1MjcsMzA1MzAsMzA1MzIsMzA1MzMsMzA1MzQsMzA1MzYsMzA1MzcsMzA1MzgsMzA1MzksMzA1NDAsMzA1NDEsMzA1NDIsMzA1NDMsMzA1NDYsMzA1NDcsMzA1NDgsMzA1''@;'; put 'put ''NDksMzA1NTAsMzA1NTEsMzA1NTIsMzA1NTMsMzA1NTYsMzQxODAsMzg2NDksMjA0NDUsMjI1NjEsMzkyODEsMjM0NTMsMjUyNjUsMjUyNTMsMjYyOTIsMzU5NjEsNDAwNzcsMjkxOTAsMjY0NzksMzA4NjUsMjQ3NTQsMjEzMjksMjEyNzEsMzY3NDQsMzI5NzIsMzYxMjUsMzgwNDksMjA0OTMs''@;'; put 'put ''MjkzODQsMjI3OTEsMjQ4MTEsMjg5NTMsMzQ5ODcsMjI4NjgsMzM1MTksMjY0MTIsMzE1MjgsMjM4NDksMzI1MDMsMjk5OTcsMjc4OTMsMzY0NTQsMzY4NTYsMzY5MjQsNDA3NjMsMjc2MDQsMzcxNDUsMzE1MDgsMjQ0NDQsMzA4ODcsMzQwMDYsMzQxMDksMjc2MDUsMjc2MDksMjc2MDYsMjQw''@;'; put 'put ''NjUsMjQxOTksMzAyMDEsMzgzODEsMjU5NDksMjQzMzAsMjQ1MTcsMzY3NjcsMjI3MjEsMzMyMTgsMzY5OTEsMzg0OTEsMzg4MjksMzY3OTMsMzI1MzQsMzYxNDAsMjUxNTMsMjA0MTUsMjE0NjQsMjEzNDIsMzY3NzYsMzY3NzcsMzY3NzksMzY5NDEsMjY2MzEsMjQ0MjYsMzMxNzYsMzQ5MjAs''@;'; put 'put ''NDAxNTAsMjQ5NzEsMjEwMzUsMzAyNTAsMjQ0MjgsMjU5OTYsMjg2MjYsMjgzOTIsMjM0ODYsMjU2NzIsMjA4NTMsMjA5MTIsMjY1NjQsMTk5OTMsMzExNzcsMzkyOTIsMjg4NTEsMzA1NTcsMzA1NTgsMzA1NTksMzA1NjAsMzA1NjQsMzA1NjcsMzA1NjksMzA1NzAsMzA1NzMsMzA1NzQsMzA1''@;'; put 'put ''NzUsMzA1NzYsMzA1NzcsMzA1NzgsMzA1NzksMzA1ODAsMzA1ODEsMzA1ODIsMzA1ODMsMzA1ODQsMzA1ODYsMzA1ODcsMzA1ODgsMzA1OTMsMzA1OTQsMzA1OTUsMzA1OTgsMzA1OTksMzA2MDAsMzA2MDEsMzA2MDIsMzA2MDMsMzA2MDcsMzA2MDgsMzA2MTEsMzA2MTIsMzA2MTMsMzA2MTQs''@;'; put 'put ''MzA2MTUsMzA2MTYsMzA2MTcsMzA2MTgsMzA2MTksMzA2MjAsMzA2MjEsMzA2MjIsMzA2MjUsMzA2MjcsMzA2MjgsMzA2MzAsMzA2MzIsMzA2MzUsMzA2MzcsMzA2MzgsMzA2MzksMzA2NDEsMzA2NDIsMzA2NDQsMzA2NDYsMzA2NDcsMzA2NDgsMzA2NDksMzA2NTAsMzA2NTIsMzA2NTQsMzA2''@;'; put 'put ''NTYsMzA2NTcsMzA2NTgsMzA2NTksMzA2NjAsMzA2NjEsMzA2NjIsMzA2NjMsMzA2NjQsMzA2NjUsMzA2NjYsMzA2NjcsMzA2NjgsMzA2NzAsMzA2NzEsMzA2NzIsMzA2NzMsMzA2NzQsMzA2NzUsMzA2NzYsMzA2NzcsMzA2NzgsMzA2ODAsMzA2ODEsMzA2ODIsMzA2ODUsMzA2ODYsMzA2ODcs''@;'; put 'put ''MzA2ODgsMzA2ODksMzA2OTIsMzAxNDksMjQxODIsMjk2MjcsMzM3NjAsMjU3NzMsMjUzMjAsMzgwNjksMjc4NzQsMjEzMzgsMjExODcsMjU2MTUsMzgwODIsMzE2MzYsMjAyNzEsMjQwOTEsMzMzMzQsMzMwNDYsMzMxNjIsMjgxOTYsMjc4NTAsMzk1MzksMjU0MjksMjEzNDAsMjE3NTQsMzQ5''@;'; put 'put ''MTcsMjI0OTYsMTk5ODEsMjQwNjcsMjc0OTMsMzE4MDcsMzcwOTYsMjQ1OTgsMjU4MzAsMjk0NjgsMzUwMDksMjY0NDgsMjUxNjUsMzYxMzAsMzA1NzIsMzYzOTMsMzczMTksMjQ0MjUsMzM3NTYsMzQwODEsMzkxODQsMjE0NDIsMzQ0NTMsMjc1MzEsMjQ4MTMsMjQ4MDgsMjg3OTksMzM0ODUs''@;'; put 'put ''MzMzMjksMjAxNzksMjc4MTUsMzQyNTUsMjU4MDUsMzE5NjEsMjcxMzMsMjYzNjEsMzM2MDksMjEzOTcsMzE1NzQsMjAzOTEsMjA4NzYsMjc5NzksMjM2MTgsMzY0NjEsMjU1NTQsMjE0NDksMzM1ODAsMzM1OTAsMjY1OTcsMzA5MDAsMjU2NjEsMjM1MTksMjM3MDAsMjQwNDYsMzU4MTUsMjUy''@;'; put 'put ''ODYsMjY2MTIsMzU5NjIsMjU2MDAsMjU1MzAsMzQ2MzMsMzkzMDcsMzU4NjMsMzI1NDQsMzgxMzAsMjAxMzUsMzg0MTYsMzkwNzYsMjYxMjQsMjk0NjIsMzA2OTQsMzA2OTYsMzA2OTgsMzA3MDMsMzA3MDQsMzA3MDUsMzA3MDYsMzA3MDgsMzA3MDksMzA3MTEsMzA3MTMsMzA3MTQsMzA3MTUs''@;'; put 'put ''MzA3MTYsMzA3MjMsMzA3MjQsMzA3MjUsMzA3MjYsMzA3MjcsMzA3MjgsMzA3MzAsMzA3MzEsMzA3MzQsMzA3MzUsMzA3MzYsMzA3MzksMzA3NDEsMzA3NDUsMzA3NDcsMzA3NTAsMzA3NTIsMzA3NTMsMzA3NTQsMzA3NTYsMzA3NjAsMzA3NjIsMzA3NjMsMzA3NjYsMzA3NjcsMzA3NjksMzA3''@;'; put 'put ''NzAsMzA3NzEsMzA3NzMsMzA3NzQsMzA3ODEsMzA3ODMsMzA3ODUsMzA3ODYsMzA3ODcsMzA3ODgsMzA3OTAsMzA3OTIsMzA3OTMsMzA3OTQsMzA3OTUsMzA3OTcsMzA3OTksMzA4MDEsMzA4MDMsMzA4MDQsMzA4MDgsMzA4MDksMzA4MTAsMzA4MTEsMzA4MTIsMzA4MTQsMzA4MTUsMzA4MTYs''@;'; put 'put ''MzA4MTcsMzA4MTgsMzA4MTksMzA4MjAsMzA4MjEsMzA4MjIsMzA4MjMsMzA4MjQsMzA4MjUsMzA4MzEsMzA4MzIsMzA4MzMsMzA4MzQsMzA4MzUsMzA4MzYsMzA4MzcsMzA4MzgsMzA4NDAsMzA4NDEsMzA4NDIsMzA4NDMsMzA4NDUsMzA4NDYsMzA4NDcsMzA4NDgsMzA4NDksMzA4NTAsMzA4''@;'; put 'put ''NTEsMjIzMzAsMjM1ODEsMjQxMjAsMzgyNzEsMjA2MDcsMzI5MjgsMjEzNzgsMjU5NTAsMzAwMjEsMjE4MDksMjA1MTMsMzYyMjksMjUyMjAsMzgwNDYsMjYzOTcsMjIwNjYsMjg1MjYsMjQwMzQsMjE1NTcsMjg4MTgsMzY3MTAsMjUxOTksMjU3NjQsMjU1MDcsMjQ0NDMsMjg1NTIsMzcxMDgs''@;'; put 'put ''MzMyNTEsMzY3ODQsMjM1NzYsMjYyMTYsMjQ1NjEsMjc3ODUsMzg0NzIsMzYyMjUsMzQ5MjQsMjU3NDUsMzEyMTYsMjI0NzgsMjcyMjUsMjUxMDQsMjE1NzYsMjAwNTYsMzEyNDMsMjQ4MDksMjg1NDgsMzU4MDIsMjUyMTUsMzY4OTQsMzk1NjMsMzEyMDQsMjE1MDcsMzAxOTYsMjUzNDUsMjEy''@;'; put 'put ''NzMsMjc3NDQsMzY4MzEsMjQzNDcsMzk1MzYsMzI4MjcsNDA4MzEsMjAzNjAsMjM2MTAsMzYxOTYsMzI3MDksMjYwMjEsMjg4NjEsMjA4MDUsMjA5MTQsMzQ0MTEsMjM4MTUsMjM0NTYsMjUyNzcsMzcyMjgsMzAwNjgsMzYzNjQsMzEyNjQsMjQ4MzMsMzE2MDksMjAxNjcsMzI1MDQsMzA1OTcs''@;'; put 'put ''MTk5ODUsMzMyNjEsMjEwMjEsMjA5ODYsMjcyNDksMjE0MTYsMzY0ODcsMzgxNDgsMzg2MDcsMjgzNTMsMzg1MDAsMjY5NzAsMzA4NTIsMzA4NTMsMzA4NTQsMzA4NTYsMzA4NTgsMzA4NTksMzA4NjMsMzA4NjQsMzA4NjYsMzA4NjgsMzA4NjksMzA4NzAsMzA4NzMsMzA4NzcsMzA4NzgsMzA4''@;'; put 'put ''ODAsMzA4ODIsMzA4ODQsMzA4ODYsMzA4ODgsMzA4ODksMzA4OTAsMzA4OTEsMzA4OTIsMzA4OTMsMzA4OTQsMzA4OTUsMzA5MDEsMzA5MDIsMzA5MDMsMzA5MDQsMzA5MDYsMzA5MDcsMzA5MDgsMzA5MDksMzA5MTEsMzA5MTIsMzA5MTQsMzA5MTUsMzA5MTYsMzA5MTgsMzA5MTksMzA5MjAs''@;'; put 'put ''MzA5MjQsMzA5MjUsMzA5MjYsMzA5MjcsMzA5MjksMzA5MzAsMzA5MzEsMzA5MzQsMzA5MzUsMzA5MzYsMzA5MzgsMzA5MzksMzA5NDAsMzA5NDEsMzA5NDIsMzA5NDMsMzA5NDQsMzA5NDUsMzA5NDYsMzA5NDcsMzA5NDgsMzA5NDksMzA5NTAsMzA5NTEsMzA5NTMsMzA5NTQsMzA5NTUsMzA5''@;'; put 'put ''NTcsMzA5NTgsMzA5NTksMzA5NjAsMzA5NjEsMzA5NjMsMzA5NjUsMzA5NjYsMzA5NjgsMzA5NjksMzA5NzEsMzA5NzIsMzA5NzMsMzA5NzQsMzA5NzUsMzA5NzYsMzA5NzgsMzA5NzksMzA5ODAsMzA5ODIsMzA5ODMsMzA5ODQsMzA5ODUsMzA5ODYsMzA5ODcsMzA5ODgsMzA3ODQsMjA2NDgs''@;'; put 'put ''MzA2NzksMjU2MTYsMzUzMDIsMjI3ODgsMjU1NzEsMjQwMjksMzEzNTksMjY5NDEsMjAyNTYsMzMzMzcsMjE5MTIsMjAwMTgsMzAxMjYsMzEzODMsMjQxNjIsMjQyMDIsMzgzODMsMjEwMTksMjE1NjEsMjg4MTAsMjU0NjIsMzgxODAsMjI0MDIsMjYxNDksMjY5NDMsMzcyNTUsMjE3NjcsMjgx''@;'; put 'put ''NDcsMzI0MzEsMzQ4NTAsMjUxMzksMzI0OTYsMzAxMzMsMzM1NzYsMzA5MTMsMzg2MDQsMzY3NjYsMjQ5MDQsMjk5NDMsMzU3ODksMjc0OTIsMjEwNTAsMzYxNzYsMjc0MjUsMzI4NzQsMzM5MDUsMjIyNTcsMjEyNTQsMjAxNzQsMTk5OTUsMjA5NDUsMzE4OTUsMzcyNTksMzE3NTEsMjA0MTks''@;'; put 'put ''MzY0NzksMzE3MTMsMzEzODgsMjU3MDMsMjM4MjgsMjA2NTIsMzMwMzAsMzAyMDksMzE5MjksMjgxNDAsMzI3MzYsMjY0NDksMjMzODQsMjM1NDQsMzA5MjMsMjU3NzQsMjU2MTksMjU1MTQsMjUzODcsMzgxNjksMjU2NDUsMzY3OTgsMzE1NzIsMzAyNDksMjUxNzEsMjI4MjMsMjE1NzQsMjc1''@;'; put 'put ''MTMsMjA2NDMsMjUxNDAsMjQxMDIsMjc1MjYsMjAxOTUsMzYxNTEsMzQ5NTUsMjQ0NTMsMzY5MTAsMzA5ODksMzA5OTAsMzA5OTEsMzA5OTIsMzA5OTMsMzA5OTQsMzA5OTYsMzA5OTcsMzA5OTgsMzA5OTksMzFlMywzMTAwMSwzMTAwMiwzMTAwMywzMTAwNCwzMTAwNSwzMTAwNywzMTAwOCwz''@;'; put 'put ''MTAwOSwzMTAxMCwzMTAxMSwzMTAxMywzMTAxNCwzMTAxNSwzMTAxNiwzMTAxNywzMTAxOCwzMTAxOSwzMTAyMCwzMTAyMSwzMTAyMiwzMTAyMywzMTAyNCwzMTAyNSwzMTAyNiwzMTAyNywzMTAyOSwzMTAzMCwzMTAzMSwzMTAzMiwzMTAzMywzMTAzNywzMTAzOSwzMTA0MiwzMTA0MywzMTA0''@;'; put 'put ''NCwzMTA0NSwzMTA0NywzMTA1MCwzMTA1MSwzMTA1MiwzMTA1MywzMTA1NCwzMTA1NSwzMTA1NiwzMTA1NywzMTA1OCwzMTA2MCwzMTA2MSwzMTA2NCwzMTA2NSwzMTA3MywzMTA3NSwzMTA3NiwzMTA3OCwzMTA4MSwzMTA4MiwzMTA4MywzMTA4NCwzMTA4NiwzMTA4OCwzMTA4OSwzMTA5MCwz''@;'; put 'put ''MTA5MSwzMTA5MiwzMTA5MywzMTA5NCwzMTA5NywzMTA5OSwzMTEwMCwzMTEwMSwzMTEwMiwzMTEwMywzMTEwNiwzMTEwNywzMTExMCwzMTExMSwzMTExMiwzMTExMywzMTExNSwzMTExNiwzMTExNywzMTExOCwzMTEyMCwzMTEyMSwzMTEyMiwyNDYwOCwzMjgyOSwyNTI4NSwyMDAyNSwyMTMz''@;'; put 'put ''MywzNzExMiwyNTUyOCwzMjk2NiwyNjA4NiwyNzY5NCwyMDI5NCwyNDgxNCwyODEyOSwzNTgwNiwyNDM3NywzNDUwNywyNDQwMywyNTM3NywyMDgyNiwzMzYzMywyNjcyMywyMDk5MiwyNTQ0MywzNjQyNCwyMDQ5OCwyMzcwNywzMTA5NSwyMzU0OCwyMTA0MCwzMTI5MSwyNDc2NCwzNjk0Nywz''@;'; put 'put ''MDQyMywyNDUwMywyNDQ3MSwzMDM0MCwzNjQ2MCwyODc4MywzMDMzMSwzMTU2MSwzMDYzNCwyMDk3OSwzNzAxMSwyMjU2NCwyMDMwMiwyODQwNCwzNjg0MiwyNTkzMiwzMTUxNSwyOTM4MCwyODA2OCwzMjczNSwyMzI2NSwyNTI2OSwyNDIxMywyMjMyMCwzMzkyMiwzMTUzMiwyNDA5MywyNDM1''@;'; put 'put ''MSwzNjg4MiwzMjUzMiwzOTA3MiwyNTQ3NCwyODM1OSwzMDg3MiwyODg1NywyMDg1NiwzODc0NywyMjQ0MywzMDAwNSwyMDI5MSwzMDAwOCwyNDIxNSwyNDgwNiwyMjg4MCwyODA5NiwyNzU4MywzMDg1NywyMTUwMCwzODYxMywyMDkzOSwyMDk5MywyNTQ4MSwyMTUxNCwzODAzNSwzNTg0Mywz''@;'; put 'put ''NjMwMCwyOTI0MSwzMDg3OSwzNDY3OCwzNjg0NSwzNTg1MywyMTQ3MiwzMTEyMywzMTEyNCwzMTEyNSwzMTEyNiwzMTEyNywzMTEyOCwzMTEyOSwzMTEzMSwzMTEzMiwzMTEzMywzMTEzNCwzMTEzNSwzMTEzNiwzMTEzNywzMTEzOCwzMTEzOSwzMTE0MCwzMTE0MSwzMTE0MiwzMTE0NCwzMTE0''@;'; put 'put ''NSwzMTE0NiwzMTE0NywzMTE0OCwzMTE0OSwzMTE1MCwzMTE1MSwzMTE1MiwzMTE1MywzMTE1NCwzMTE1NiwzMTE1NywzMTE1OCwzMTE1OSwzMTE2MCwzMTE2NCwzMTE2NywzMTE3MCwzMTE3MiwzMTE3MywzMTE3NSwzMTE3NiwzMTE3OCwzMTE4MCwzMTE4MiwzMTE4MywzMTE4NCwzMTE4Nywz''@;'; put 'put ''MTE4OCwzMTE5MCwzMTE5MSwzMTE5MywzMTE5NCwzMTE5NSwzMTE5NiwzMTE5NywzMTE5OCwzMTIwMCwzMTIwMSwzMTIwMiwzMTIwNSwzMTIwOCwzMTIxMCwzMTIxMiwzMTIxNCwzMTIxNywzMTIxOCwzMTIxOSwzMTIyMCwzMTIyMSwzMTIyMiwzMTIyMywzMTIyNSwzMTIyNiwzMTIyOCwzMTIz''@;'; put 'put ''MCwzMTIzMSwzMTIzMywzMTIzNiwzMTIzNywzMTIzOSwzMTI0MCwzMTI0MSwzMTI0MiwzMTI0NCwzMTI0NywzMTI0OCwzMTI0OSwzMTI1MCwzMTI1MSwzMTI1MywzMTI1NCwzMTI1NiwzMTI1NywzMTI1OSwzMTI2MCwxOTk2OSwzMDQ0NywyMTQ4NiwzODAyNSwzOTAzMCw0MDcxOCwzODE4OSwy''@;'; put 'put ''MzQ1MCwzNTc0NiwyMDAwMiwxOTk5NiwyMDkwOCwzMzg5MSwyNTAyNiwyMTE2MCwyNjYzNSwyMDM3NSwyNDY4MywyMDkyMywyNzkzNCwyMDgyOCwyNTIzOCwyNjAwNywzODQ5NywzNTkxMCwzNjg4NywzMDE2OCwzNzExNywzMDU2MywyNzYwMiwyOTMyMiwyOTQyMCwzNTgzNSwyMjU4MSwzMDU4''@;'; put 'put ''NSwzNjE3MiwyNjQ2MCwzODIwOCwzMjkyMiwyNDIzMCwyODE5MywyMjkzMCwzMTQ3MSwzMDcwMSwzODIwMywyNzU3MywyNjAyOSwzMjUyNiwyMjUzNCwyMDgxNywzODQzMSwyMzU0NSwyMjY5NywyMTU0NCwzNjQ2NiwyNTk1OCwzOTAzOSwyMjI0NCwzODA0NSwzMDQ2MiwzNjkyOSwyNTQ3OSwy''@;'; put 'put ''MTcwMiwyMjgxMCwyMjg0MiwyMjQyNywzNjUzMCwyNjQyMSwzNjM0NiwzMzMzMywyMTA1NywyNDgxNiwyMjU0OSwzNDU1OCwyMzc4NCw0MDUxNywyMDQyMCwzOTA2OSwzNTc2OSwyMzA3NywyNDY5NCwyMTM4MCwyNTIxMiwzNjk0MywzNzEyMiwzOTI5NSwyNDY4MSwzMjc4MCwyMDc5OSwzMjgx''@;'; put 'put ''OSwyMzU3MiwzOTI4NSwyNzk1MywyMDEwOCwzMTI2MSwzMTI2MywzMTI2NSwzMTI2NiwzMTI2OCwzMTI2OSwzMTI3MCwzMTI3MSwzMTI3MiwzMTI3MywzMTI3NCwzMTI3NSwzMTI3NiwzMTI3NywzMTI3OCwzMTI3OSwzMTI4MCwzMTI4MSwzMTI4MiwzMTI4NCwzMTI4NSwzMTI4NiwzMTI4OCwz''@;'; put 'put ''MTI5MCwzMTI5NCwzMTI5NiwzMTI5NywzMTI5OCwzMTI5OSwzMTMwMCwzMTMwMSwzMTMwMywzMTMwNCwzMTMwNSwzMTMwNiwzMTMwNywzMTMwOCwzMTMwOSwzMTMxMCwzMTMxMSwzMTMxMiwzMTMxNCwzMTMxNSwzMTMxNiwzMTMxNywzMTMxOCwzMTMyMCwzMTMyMSwzMTMyMiwzMTMyMywzMTMy''@;'; put 'put ''NCwzMTMyNSwzMTMyNiwzMTMyNywzMTMyOCwzMTMyOSwzMTMzMCwzMTMzMSwzMTMzMiwzMTMzMywzMTMzNCwzMTMzNSwzMTMzNiwzMTMzNywzMTMzOCwzMTMzOSwzMTM0MCwzMTM0MSwzMTM0MiwzMTM0MywzMTM0NSwzMTM0NiwzMTM0NywzMTM0OSwzMTM1NSwzMTM1NiwzMTM1NywzMTM1OCwz''@;'; put 'put ''MTM2MiwzMTM2NSwzMTM2NywzMTM2OSwzMTM3MCwzMTM3MSwzMTM3MiwzMTM3NCwzMTM3NSwzMTM3NiwzMTM3OSwzMTM4MCwzMTM4NSwzMTM4NiwzMTM4NywzMTM5MCwzMTM5MywzMTM5NCwzNjE0NCwyMTQ1NywzMjYwMiwzMTU2NywyMDI0MCwyMDA0NywzODQwMCwyNzg2MSwyOTY0OCwzNDI4''@;'; put 'put ''MSwyNDA3MCwzMDA1OCwzMjc2MywyNzE0NiwzMDcxOCwzODAzNCwzMjMyMSwyMDk2MSwyODkwMiwyMTQ1MywzNjgyMCwzMzUzOSwzNjEzNywyOTM1OSwzOTI3NywyNzg2NywyMjM0NiwzMzQ1OSwyNjA0MSwzMjkzOCwyNTE1MSwzODQ1MCwyMjk1MiwyMDIyMywzNTc3NSwzMjQ0MiwyNTkxOCwz''@;'; put 'put ''Mzc3OCwzODc1MCwyMTg1NywzOTEzNCwzMjkzMywyMTI5MCwzNTgzNywyMTUzNiwzMjk1NCwyNDIyMywyNzgzMiwzNjE1MywzMzQ1MiwzNzIxMCwyMTU0NSwyNzY3NSwyMDk5OCwzMjQzOSwyMjM2NywyODk1NCwyNzc3NCwzMTg4MSwyMjg1OSwyMDIyMSwyNDU3NSwyNDg2OCwzMTkxNCwyMDAx''@;'; put 'put ''NiwyMzU1MywyNjUzOSwzNDU2MiwyMzc5MiwzODE1NSwzOTExOCwzMDEyNywyODkyNSwzNjg5OCwyMDkxMSwzMjU0MSwzNTc3MywyMjg1NywyMDk2NCwyMDMxNSwyMTU0MiwyMjgyNywyNTk3NSwzMjkzMiwyMzQxMywyNTIwNiwyNTI4MiwzNjc1MiwyNDEzMywyNzY3OSwzMTUyNiwyMDIzOSwy''@;'; put 'put ''MDQ0MCwyNjM4MSwzMTM5NSwzMTM5NiwzMTM5OSwzMTQwMSwzMTQwMiwzMTQwMywzMTQwNiwzMTQwNywzMTQwOCwzMTQwOSwzMTQxMCwzMTQxMiwzMTQxMywzMTQxNCwzMTQxNSwzMTQxNiwzMTQxNywzMTQxOCwzMTQxOSwzMTQyMCwzMTQyMSwzMTQyMiwzMTQyNCwzMTQyNSwzMTQyNiwzMTQy''@;'; put 'put ''NywzMTQyOCwzMTQyOSwzMTQzMCwzMTQzMSwzMTQzMiwzMTQzMywzMTQzNCwzMTQzNiwzMTQzNywzMTQzOCwzMTQzOSwzMTQ0MCwzMTQ0MSwzMTQ0MiwzMTQ0MywzMTQ0NCwzMTQ0NSwzMTQ0NywzMTQ0OCwzMTQ1MCwzMTQ1MSwzMTQ1MiwzMTQ1MywzMTQ1NywzMTQ1OCwzMTQ2MCwzMTQ2Mywz''@;'; put 'put ''MTQ2NCwzMTQ2NSwzMTQ2NiwzMTQ2NywzMTQ2OCwzMTQ3MCwzMTQ3MiwzMTQ3MywzMTQ3NCwzMTQ3NSwzMTQ3NiwzMTQ3NywzMTQ3OCwzMTQ3OSwzMTQ4MCwzMTQ4MywzMTQ4NCwzMTQ4NiwzMTQ4OCwzMTQ4OSwzMTQ5MCwzMTQ5MywzMTQ5NSwzMTQ5NywzMTUwMCwzMTUwMSwzMTUwMiwzMTUw''@;'; put 'put ''NCwzMTUwNiwzMTUwNywzMTUxMCwzMTUxMSwzMTUxMiwzMTUxNCwzMTUxNiwzMTUxNywzMTUxOSwzMTUyMSwzMTUyMiwzMTUyMywzMTUyNywzMTUyOSwzMTUzMywyODAxNCwyODA3NCwzMTExOSwzNDk5MywyNDM0MywyOTk5NSwyNTI0MiwzNjc0MSwyMDQ2MywzNzM0MCwyNjAyMywzMzA3MSwz''@;'; put 'put ''MzEwNSwyNDIyMCwzMzEwNCwzNjIxMiwyMTEwMywzNTIwNiwzNjE3MSwyMjc5NywyMDYxMywyMDE4NCwzODQyOCwyOTIzOCwzMzE0NSwzNjEyNywyMzUwMCwzNTc0NywzODQ2OCwyMjkxOSwzMjUzOCwyMTY0OCwyMjEzNCwyMjAzMCwzNTgxMywyNTkxMywyNzAxMCwzODA0MSwzMDQyMiwyODI5''@;'; put 'put ''NywyNDE3OCwyOTk3NiwyNjQzOCwyNjU3NywzMTQ4NywzMjkyNSwzNjIxNCwyNDg2MywzMTE3NCwyNTk1NCwzNjE5NSwyMDg3MiwyMTAxOCwzODA1MCwzMjU2OCwzMjkyMywzMjQzNCwyMzcwMywyODIwNywyNjQ2NCwzMTcwNSwzMDM0NywzOTY0MCwzMzE2NywzMjY2MCwzMTk1NywyNTYzMCwz''@;'; put 'put ''ODIyNCwzMTI5NSwyMTU3OCwyMTczMywyNzQ2OCwyNTYwMSwyNTA5Niw0MDUwOSwzMzAxMSwzMDEwNSwyMTEwNiwzODc2MSwzMzg4MywyNjY4NCwzNDUzMiwzODQwMSwzODU0OCwzODEyNCwyMDAxMCwyMTUwOCwzMjQ3MywyNjY4MSwzNjMxOSwzMjc4OSwyNjM1NiwyNDIxOCwzMjY5NywzMTUz''@;'; put 'put ''NSwzMTUzNiwzMTUzOCwzMTU0MCwzMTU0MSwzMTU0MiwzMTU0MywzMTU0NSwzMTU0NywzMTU0OSwzMTU1MSwzMTU1MiwzMTU1MywzMTU1NCwzMTU1NSwzMTU1NiwzMTU1OCwzMTU2MCwzMTU2MiwzMTU2NSwzMTU2NiwzMTU3MSwzMTU3MywzMTU3NSwzMTU3NywzMTU4MCwzMTU4MiwzMTU4Mywz''@;'; put 'put ''MTU4NSwzMTU4NywzMTU4OCwzMTU4OSwzMTU5MCwzMTU5MSwzMTU5MiwzMTU5MywzMTU5NCwzMTU5NSwzMTU5NiwzMTU5NywzMTU5OSwzMTYwMCwzMTYwMywzMTYwNCwzMTYwNiwzMTYwOCwzMTYxMCwzMTYxMiwzMTYxMywzMTYxNSwzMTYxNywzMTYxOCwzMTYxOSwzMTYyMCwzMTYyMiwzMTYy''@;'; put 'put ''MywzMTYyNCwzMTYyNSwzMTYyNiwzMTYyNywzMTYyOCwzMTYzMCwzMTYzMSwzMTYzMywzMTYzNCwzMTYzNSwzMTYzOCwzMTY0MCwzMTY0MSwzMTY0MiwzMTY0MywzMTY0NiwzMTY0NywzMTY0OCwzMTY1MSwzMTY1MiwzMTY1MywzMTY2MiwzMTY2MywzMTY2NCwzMTY2NiwzMTY2NywzMTY2OSwz''@;'; put 'put ''MTY3MCwzMTY3MSwzMTY3MywzMTY3NCwzMTY3NSwzMTY3NiwzMTY3NywzMTY3OCwzMTY3OSwzMTY4MCwzMTY4MiwzMTY4MywzMTY4NCwyMjQ2NiwzMjgzMSwyNjc3NSwyNDAzNywyNTkxNSwyMTE1MSwyNDY4NSw0MDg1OCwyMDM3OSwzNjUyNCwyMDg0NCwyMzQ2NywyNDMzOSwyNDA0MSwyNzc0''@;'; put 'put ''MiwyNTMyOSwzNjEyOSwyMDg0OSwzODA1NywyMTI0NiwyNzgwNywzMzUwMywyOTM5OSwyMjQzNCwyNjUwMCwzNjE0MSwyMjgxNSwzNjc2NCwzMzczNSwyMTY1MywzMTYyOSwyMDI3MiwyNzgzNywyMzM5NiwyMjk5Myw0MDcyMywyMTQ3NiwzNDUwNiwzOTU5MiwzNTg5NSwzMjkyOSwyNTkyNSwz''@;'; put 'put ''OTAzOCwyMjI2NiwzODU5OSwyMTAzOCwyOTkxNiwyMTA3MiwyMzUyMSwyNTM0NiwzNTA3NCwyMDA1NCwyNTI5NiwyNDYxOCwyNjg3NCwyMDg1MSwyMzQ0OCwyMDg5NiwzNTI2NiwzMTY0OSwzOTMwMiwzMjU5MiwyNDgxNSwyODc0OCwzNjE0MywyMDgwOSwyNDE5MSwzNjg5MSwyOTgwOCwzNTI2''@;'; put 'put ''OCwyMjMxNywzMDc4OSwyNDQwMiw0MDg2MywzODM5NCwzNjcxMiwzOTc0MCwzNTgwOSwzMDMyOCwyNjY5MCwyNjU4OCwzNjMzMCwzNjE0OSwyMTA1MywzNjc0NiwyODM3OCwyNjgyOSwzODE0OSwzNzEwMSwyMjI2OSwyNjUyNCwzNTA2NSwzNjgwNywyMTcwNCwzMTY4NSwzMTY4OCwzMTY4OSwz''@;'; put 'put ''MTY5MCwzMTY5MSwzMTY5MywzMTY5NCwzMTY5NSwzMTY5NiwzMTY5OCwzMTcwMCwzMTcwMSwzMTcwMiwzMTcwMywzMTcwNCwzMTcwNywzMTcwOCwzMTcxMCwzMTcxMSwzMTcxMiwzMTcxNCwzMTcxNSwzMTcxNiwzMTcxOSwzMTcyMCwzMTcyMSwzMTcyMywzMTcyNCwzMTcyNSwzMTcyNywzMTcy''@;'; put 'put ''OCwzMTczMCwzMTczMSwzMTczMiwzMTczMywzMTczNCwzMTczNiwzMTczNywzMTczOCwzMTczOSwzMTc0MSwzMTc0MywzMTc0NCwzMTc0NSwzMTc0NiwzMTc0NywzMTc0OCwzMTc0OSwzMTc1MCwzMTc1MiwzMTc1MywzMTc1NCwzMTc1NywzMTc1OCwzMTc2MCwzMTc2MSwzMTc2MiwzMTc2Mywz''@;'; put 'put ''MTc2NCwzMTc2NSwzMTc2NywzMTc2OCwzMTc2OSwzMTc3MCwzMTc3MSwzMTc3MiwzMTc3MywzMTc3NCwzMTc3NiwzMTc3NywzMTc3OCwzMTc3OSwzMTc4MCwzMTc4MSwzMTc4NCwzMTc4NSwzMTc4NywzMTc4OCwzMTc4OSwzMTc5MCwzMTc5MSwzMTc5MiwzMTc5MywzMTc5NCwzMTc5NSwzMTc5''@;'; put 'put ''NiwzMTc5NywzMTc5OCwzMTc5OSwzMTgwMSwzMTgwMiwzMTgwMywzMTgwNCwzMTgwNSwzMTgwNiwzMTgxMCwzOTYwOCwyMzQwMSwyODAyMywyNzY4NiwyMDEzMywyMzQ3NSwzOTU1OSwzNzIxOSwyNWUzLDM3MDM5LDM4ODg5LDIxNTQ3LDI4MDg1LDIzNTA2LDIwOTg5LDIxODk4LDMyNTk3LDMy''@;'; put 'put ''NzUyLDI1Nzg4LDI1NDIxLDI2MDk3LDI1MDIyLDI0NzE3LDI4OTM4LDI3NzM1LDI3NzIxLDIyODMxLDI2NDc3LDMzMzIyLDIyNzQxLDIyMTU4LDM1OTQ2LDI3NjI3LDM3MDg1LDIyOTA5LDMyNzkxLDIxNDk1LDI4MDA5LDIxNjIxLDIxOTE3LDMzNjU1LDMzNzQzLDI2NjgwLDMxMTY2LDIxNjQ0''@;'; put 'put ''LDIwMzA5LDIxNTEyLDMwNDE4LDM1OTc3LDM4NDAyLDI3ODI3LDI4MDg4LDM2MjAzLDM1MDg4LDQwNTQ4LDM2MTU0LDIyMDc5LDQwNjU3LDMwMTY1LDI0NDU2LDI5NDA4LDI0NjgwLDIxNzU2LDIwMTM2LDI3MTc4LDM0OTEzLDI0NjU4LDM2NzIwLDIxNzAwLDI4ODg4LDM0NDI1LDQwNTExLDI3''@;'; put 'put ''OTQ2LDIzNDM5LDI0MzQ0LDMyNDE4LDIxODk3LDIwMzk5LDI5NDkyLDIxNTY0LDIxNDAyLDIwNTA1LDIxNTE4LDIxNjI4LDIwMDQ2LDI0NTczLDI5Nzg2LDIyNzc0LDMzODk5LDMyOTkzLDM0Njc2LDI5MzkyLDMxOTQ2LDI4MjQ2LDMxODExLDMxODEyLDMxODEzLDMxODE0LDMxODE1LDMxODE2''@;'; put 'put ''LDMxODE3LDMxODE4LDMxODE5LDMxODIwLDMxODIyLDMxODIzLDMxODI0LDMxODI1LDMxODI2LDMxODI3LDMxODI4LDMxODI5LDMxODMwLDMxODMxLDMxODMyLDMxODMzLDMxODM0LDMxODM1LDMxODM2LDMxODM3LDMxODM4LDMxODM5LDMxODQwLDMxODQxLDMxODQyLDMxODQzLDMxODQ0LDMx''@;'; put 'put ''ODQ1LDMxODQ2LDMxODQ3LDMxODQ4LDMxODQ5LDMxODUwLDMxODUxLDMxODUyLDMxODUzLDMxODU0LDMxODU1LDMxODU2LDMxODU3LDMxODU4LDMxODYxLDMxODYyLDMxODYzLDMxODY0LDMxODY1LDMxODY2LDMxODcwLDMxODcxLDMxODcyLDMxODczLDMxODc0LDMxODc1LDMxODc2LDMxODc3''@;'; put 'put ''LDMxODc4LDMxODc5LDMxODgwLDMxODgyLDMxODgzLDMxODg0LDMxODg1LDMxODg2LDMxODg3LDMxODg4LDMxODkxLDMxODkyLDMxODk0LDMxODk3LDMxODk4LDMxODk5LDMxOTA0LDMxOTA1LDMxOTA3LDMxOTEwLDMxOTExLDMxOTEyLDMxOTEzLDMxOTE1LDMxOTE2LDMxOTE3LDMxOTE5LDMx''@;'; put 'put ''OTIwLDMxOTI0LDMxOTI1LDMxOTI2LDMxOTI3LDMxOTI4LDMxOTMwLDMxOTMxLDI0MzU5LDM0MzgyLDIxODA0LDI1MjUyLDIwMTE0LDI3ODE4LDI1MTQzLDMzNDU3LDIxNzE5LDIxMzI2LDI5NTAyLDI4MzY5LDMwMDExLDIxMDEwLDIxMjcwLDM1ODA1LDI3MDg4LDI0NDU4LDI0NTc2LDI4MTQy''@;'; put 'put ''LDIyMzUxLDI3NDI2LDI5NjE1LDI2NzA3LDM2ODI0LDMyNTMxLDI1NDQyLDI0NzM5LDIxNzk2LDMwMTg2LDM1OTM4LDI4OTQ5LDI4MDY3LDIzNDYyLDI0MTg3LDMzNjE4LDI0OTA4LDQwNjQ0LDMwOTcwLDM0NjQ3LDMxNzgzLDMwMzQzLDIwOTc2LDI0ODIyLDI5MDA0LDI2MTc5LDI0MTQwLDI0''@;'; put 'put ''NjUzLDM1ODU0LDI4Nzg0LDI1MzgxLDM2NzQ1LDI0NTA5LDI0Njc0LDM0NTE2LDIyMjM4LDI3NTg1LDI0NzI0LDI0OTM1LDIxMzIxLDI0ODAwLDI2MjE0LDM2MTU5LDMxMjI5LDIwMjUwLDI4OTA1LDI3NzE5LDM1NzYzLDM1ODI2LDMyNDcyLDMzNjM2LDI2MTI3LDIzMTMwLDM5NzQ2LDI3OTg1''@;'; put 'put ''LDI4MTUxLDM1OTA1LDI3OTYzLDIwMjQ5LDI4Nzc5LDMzNzE5LDI1MTEwLDI0Nzg1LDM4NjY5LDM2MTM1LDMxMDk2LDIwOTg3LDIyMzM0LDIyNTIyLDI2NDI2LDMwMDcyLDMxMjkzLDMxMjE1LDMxNjM3LDMxOTM1LDMxOTM2LDMxOTM4LDMxOTM5LDMxOTQwLDMxOTQyLDMxOTQ1LDMxOTQ3LDMx''@;'; put 'put ''OTUwLDMxOTUxLDMxOTUyLDMxOTUzLDMxOTU0LDMxOTU1LDMxOTU2LDMxOTYwLDMxOTYyLDMxOTYzLDMxOTY1LDMxOTY2LDMxOTY5LDMxOTcwLDMxOTcxLDMxOTcyLDMxOTczLDMxOTc0LDMxOTc1LDMxOTc3LDMxOTc4LDMxOTc5LDMxOTgwLDMxOTgxLDMxOTgyLDMxOTg0LDMxOTg1LDMxOTg2''@;'; put 'put ''LDMxOTg3LDMxOTg4LDMxOTg5LDMxOTkwLDMxOTkxLDMxOTkzLDMxOTk0LDMxOTk2LDMxOTk3LDMxOTk4LDMxOTk5LDMyZTMsMzIwMDEsMzIwMDIsMzIwMDMsMzIwMDQsMzIwMDUsMzIwMDYsMzIwMDcsMzIwMDgsMzIwMDksMzIwMTEsMzIwMTIsMzIwMTMsMzIwMTQsMzIwMTUsMzIwMTYsMzIw''@;'; put 'put ''MTcsMzIwMTgsMzIwMTksMzIwMjAsMzIwMjEsMzIwMjIsMzIwMjMsMzIwMjQsMzIwMjUsMzIwMjYsMzIwMjcsMzIwMjgsMzIwMjksMzIwMzAsMzIwMzEsMzIwMzMsMzIwMzUsMzIwMzYsMzIwMzcsMzIwMzgsMzIwNDAsMzIwNDEsMzIwNDIsMzIwNDQsMzIwNDUsMzIwNDYsMzIwNDgsMzIwNDks''@;'; put 'put ''MzIwNTAsMzIwNTEsMzIwNTIsMzIwNTMsMzIwNTQsMzI5MDgsMzkyNjksMzY4NTcsMjg2MDgsMzU3NDksNDA0ODEsMjMwMjAsMzI0ODksMzI1MjEsMjE1MTMsMjY0OTcsMjY4NDAsMzY3NTMsMzE4MjEsMzg1OTgsMjE0NTAsMjQ2MTMsMzAxNDIsMjc3NjIsMjEzNjMsMjMyNDEsMzI0MjMsMjUz''@;'; put 'put ''ODAsMjA5NjAsMzMwMzQsMjQwNDksMzQwMTUsMjUyMTYsMjA4NjQsMjMzOTUsMjAyMzgsMzEwODUsMjEwNTgsMjQ3NjAsMjc5ODIsMjM0OTIsMjM0OTAsMzU3NDUsMzU3NjAsMjYwODIsMjQ1MjQsMzg0NjksMjI5MzEsMzI0ODcsMzI0MjYsMjIwMjUsMjY1NTEsMjI4NDEsMjAzMzksMjM0Nzgs''@;'; put 'put ''MjExNTIsMzM2MjYsMzkwNTAsMzYxNTgsMzAwMDIsMzgwNzgsMjA1NTEsMzEyOTIsMjAyMTUsMjY1NTAsMzk1NTAsMjMyMzMsMjc1MTYsMzA0MTcsMjIzNjIsMjM1NzQsMzE1NDYsMzgzODgsMjkwMDYsMjA4NjAsMzI5MzcsMzMzOTIsMjI5MDQsMzI1MTYsMzM1NzUsMjY4MTYsMjY2MDQsMzA4''@;'; put 'put ''OTcsMzA4MzksMjUzMTUsMjU0NDEsMzE2MTYsMjA0NjEsMjEwOTgsMjA5NDMsMzM2MTYsMjcwOTksMzc0OTIsMzYzNDEsMzYxNDUsMzUyNjUsMzgxOTAsMzE2NjEsMjAyMTQsMzIwNTUsMzIwNTYsMzIwNTcsMzIwNTgsMzIwNTksMzIwNjAsMzIwNjEsMzIwNjIsMzIwNjMsMzIwNjQsMzIwNjUs''@;'; put 'put ''MzIwNjYsMzIwNjcsMzIwNjgsMzIwNjksMzIwNzAsMzIwNzEsMzIwNzIsMzIwNzMsMzIwNzQsMzIwNzUsMzIwNzYsMzIwNzcsMzIwNzgsMzIwNzksMzIwODAsMzIwODEsMzIwODIsMzIwODMsMzIwODQsMzIwODUsMzIwODYsMzIwODcsMzIwODgsMzIwODksMzIwOTAsMzIwOTEsMzIwOTIsMzIw''@;'; put 'put ''OTMsMzIwOTQsMzIwOTUsMzIwOTYsMzIwOTcsMzIwOTgsMzIwOTksMzIxMDAsMzIxMDEsMzIxMDIsMzIxMDMsMzIxMDQsMzIxMDUsMzIxMDYsMzIxMDcsMzIxMDgsMzIxMDksMzIxMTEsMzIxMTIsMzIxMTMsMzIxMTQsMzIxMTUsMzIxMTYsMzIxMTcsMzIxMTgsMzIxMjAsMzIxMjEsMzIxMjIs''@;'; put 'put ''MzIxMjMsMzIxMjQsMzIxMjUsMzIxMjYsMzIxMjcsMzIxMjgsMzIxMjksMzIxMzAsMzIxMzEsMzIxMzIsMzIxMzMsMzIxMzQsMzIxMzUsMzIxMzYsMzIxMzcsMzIxMzgsMzIxMzksMzIxNDAsMzIxNDEsMzIxNDIsMzIxNDMsMzIxNDQsMzIxNDUsMzIxNDYsMzIxNDcsMzIxNDgsMzIxNDksMzIx''@;'; put 'put ''NTAsMzIxNTEsMzIxNTIsMjA1ODEsMzMzMjgsMjEwNzMsMzkyNzksMjgxNzYsMjgyOTMsMjgwNzEsMjQzMTQsMjA3MjUsMjMwMDQsMjM1NTgsMjc5NzQsMjc3NDMsMzAwODYsMzM5MzEsMjY3MjgsMjI4NzAsMzU3NjIsMjEyODAsMzcyMzMsMzg0NzcsMzQxMjEsMjY4OTgsMzA5NzcsMjg5NjYs''@;'; put 'put ''MzMwMTQsMjAxMzIsMzcwNjYsMjc5NzUsMzk1NTYsMjMwNDcsMjIyMDQsMjU2MDUsMzgxMjgsMzA2OTksMjAzODksMzMwNTAsMjk0MDksMzUyODIsMzkyOTAsMzI1NjQsMzI0NzgsMjExMTksMjU5NDUsMzcyMzcsMzY3MzUsMzY3MzksMjE0ODMsMzEzODIsMjU1ODEsMjU1MDksMzAzNDIsMzEy''@;'; put 'put ''MjQsMzQ5MDMsMzg0NTQsMjUxMzAsMjExNjMsMzM0MTAsMjY3MDgsMjY0ODAsMjU0NjMsMzA1NzEsMzE0NjksMjc5MDUsMzI0NjcsMzUyOTksMjI5OTIsMjUxMDYsMzQyNDksMzM0NDUsMzAwMjgsMjA1MTEsMjAxNzEsMzAxMTcsMzU4MTksMjM2MjYsMjQwNjIsMzE1NjMsMjYwMjAsMzczMjks''@;'; put 'put ''MjAxNzAsMjc5NDEsMzUxNjcsMzIwMzksMzgxODIsMjAxNjUsMzU4ODAsMzY4MjcsMzg3NzEsMjYxODcsMzExMDUsMzY4MTcsMjg5MDgsMjgwMjQsMzIxNTMsMzIxNTQsMzIxNTUsMzIxNTYsMzIxNTcsMzIxNTgsMzIxNTksMzIxNjAsMzIxNjEsMzIxNjIsMzIxNjMsMzIxNjQsMzIxNjUsMzIx''@;'; put 'put ''NjcsMzIxNjgsMzIxNjksMzIxNzAsMzIxNzEsMzIxNzIsMzIxNzMsMzIxNzUsMzIxNzYsMzIxNzcsMzIxNzgsMzIxNzksMzIxODAsMzIxODEsMzIxODIsMzIxODMsMzIxODQsMzIxODUsMzIxODYsMzIxODcsMzIxODgsMzIxODksMzIxOTAsMzIxOTEsMzIxOTIsMzIxOTMsMzIxOTQsMzIxOTUs''@;'; put 'put ''MzIxOTYsMzIxOTcsMzIxOTgsMzIxOTksMzIyMDAsMzIyMDEsMzIyMDIsMzIyMDMsMzIyMDQsMzIyMDUsMzIyMDYsMzIyMDcsMzIyMDgsMzIyMDksMzIyMTAsMzIyMTEsMzIyMTIsMzIyMTMsMzIyMTQsMzIyMTUsMzIyMTYsMzIyMTcsMzIyMTgsMzIyMTksMzIyMjAsMzIyMjEsMzIyMjIsMzIy''@;'; put 'put ''MjMsMzIyMjQsMzIyMjUsMzIyMjYsMzIyMjcsMzIyMjgsMzIyMjksMzIyMzAsMzIyMzEsMzIyMzIsMzIyMzMsMzIyMzQsMzIyMzUsMzIyMzYsMzIyMzcsMzIyMzgsMzIyMzksMzIyNDAsMzIyNDEsMzIyNDIsMzIyNDMsMzIyNDQsMzIyNDUsMzIyNDYsMzIyNDcsMzIyNDgsMzIyNDksMzIyNTAs''@;'; put 'put ''MjM2MTMsMjExNzAsMzM2MDYsMjA4MzQsMzM1NTAsMzA1NTUsMjYyMzAsNDAxMjAsMjAxNDAsMjQ3NzgsMzE5MzQsMzE5MjMsMzI0NjMsMjAxMTcsMzU2ODYsMjYyMjMsMzkwNDgsMzg3NDUsMjI2NTksMjU5NjQsMzgyMzYsMjQ0NTIsMzAxNTMsMzg3NDIsMzE0NTUsMzE0NTQsMjA5MjgsMjg4''@;'; put 'put ''NDcsMzEzODQsMjU1NzgsMzEzNTAsMzI0MTYsMjk1OTAsMzg4OTMsMjAwMzcsMjg3OTIsMjAwNjEsMzcyMDIsMjE0MTcsMjU5MzcsMjYwODcsMzMyNzYsMzMyODUsMjE2NDYsMjM2MDEsMzAxMDYsMzg4MTYsMjUzMDQsMjk0MDEsMzAxNDEsMjM2MjEsMzk1NDUsMzM3MzgsMjM2MTYsMjE2MzIs''@;'; put 'put ''MzA2OTcsMjAwMzAsMjc4MjIsMzI4NTgsMjUyOTgsMjU0NTQsMjQwNDAsMjA4NTUsMzYzMTcsMzYzODIsMzgxOTEsMjA0NjUsMjE0NzcsMjQ4MDcsMjg4NDQsMjEwOTUsMjU0MjQsNDA1MTUsMjMwNzEsMjA1MTgsMzA1MTksMjEzNjcsMzI0ODIsMjU3MzMsMjU4OTksMjUyMjUsMjU0OTYsMjA1''@;'; put 'put ''MDAsMjkyMzcsMzUyNzMsMjA5MTUsMzU3NzYsMzI0NzcsMjIzNDMsMzM3NDAsMzgwNTUsMjA4OTEsMjE1MzEsMjM4MDMsMzIyNTEsMzIyNTIsMzIyNTMsMzIyNTQsMzIyNTUsMzIyNTYsMzIyNTcsMzIyNTgsMzIyNTksMzIyNjAsMzIyNjEsMzIyNjIsMzIyNjMsMzIyNjQsMzIyNjUsMzIyNjYs''@;'; put 'put ''MzIyNjcsMzIyNjgsMzIyNjksMzIyNzAsMzIyNzEsMzIyNzIsMzIyNzMsMzIyNzQsMzIyNzUsMzIyNzYsMzIyNzcsMzIyNzgsMzIyNzksMzIyODAsMzIyODEsMzIyODIsMzIyODMsMzIyODQsMzIyODUsMzIyODYsMzIyODcsMzIyODgsMzIyODksMzIyOTAsMzIyOTEsMzIyOTIsMzIyOTMsMzIy''@;'; put 'put ''OTQsMzIyOTUsMzIyOTYsMzIyOTcsMzIyOTgsMzIyOTksMzIzMDAsMzIzMDEsMzIzMDIsMzIzMDMsMzIzMDQsMzIzMDUsMzIzMDYsMzIzMDcsMzIzMDgsMzIzMDksMzIzMTAsMzIzMTEsMzIzMTIsMzIzMTMsMzIzMTQsMzIzMTYsMzIzMTcsMzIzMTgsMzIzMTksMzIzMjAsMzIzMjIsMzIzMjMs''@;'; put 'put ''MzIzMjQsMzIzMjUsMzIzMjYsMzIzMjgsMzIzMjksMzIzMzAsMzIzMzEsMzIzMzIsMzIzMzMsMzIzMzQsMzIzMzUsMzIzMzYsMzIzMzcsMzIzMzgsMzIzMzksMzIzNDAsMzIzNDEsMzIzNDIsMzIzNDMsMzIzNDQsMzIzNDUsMzIzNDYsMzIzNDcsMzIzNDgsMzIzNDksMjA0MjYsMzE0NTksMjc5''@;'; put 'put ''OTQsMzcwODksMzk1NjcsMjE4ODgsMjE2NTQsMjEzNDUsMjE2NzksMjQzMjAsMjU1NzcsMjY5OTksMjA5NzUsMjQ5MzYsMjEwMDIsMjI1NzAsMjEyMDgsMjIzNTAsMzA3MzMsMzA0NzUsMjQyNDcsMjQ5NTEsMzE5NjgsMjUxNzksMjUyMzksMjAxMzAsMjg4MjEsMzI3NzEsMjUzMzUsMjg5MDAs''@;'; put 'put ''Mzg3NTIsMjIzOTEsMzM0OTksMjY2MDcsMjY4NjksMzA5MzMsMzkwNjMsMzExODUsMjI3NzEsMjE2ODMsMjE0ODcsMjgyMTIsMjA4MTEsMjEwNTEsMjM0NTgsMzU4MzgsMzI5NDMsMjE4MjcsMjI0MzgsMjQ2OTEsMjIzNTMsMjE1NDksMzEzNTQsMjQ2NTYsMjMzODAsMjU1MTEsMjUyNDgsMjE0''@;'; put 'put ''NzUsMjUxODcsMjM0OTUsMjY1NDMsMjE3NDEsMzEzOTEsMzM1MTAsMzcyMzksMjQyMTEsMzUwNDQsMjI4NDAsMjI0NDYsMjUzNTgsMzYzMjgsMzMwMDcsMjIzNTksMzE2MDcsMjAzOTMsMjQ1NTUsMjM0ODUsMjc0NTQsMjEyODEsMzE1NjgsMjkzNzgsMjY2OTQsMzA3MTksMzA1MTgsMjYxMDMs''@;'; put 'put ''MjA5MTcsMjAxMTEsMzA0MjAsMjM3NDMsMzEzOTcsMzM5MDksMjI4NjIsMzk3NDUsMjA2MDgsMzIzNTAsMzIzNTEsMzIzNTIsMzIzNTMsMzIzNTQsMzIzNTUsMzIzNTYsMzIzNTcsMzIzNTgsMzIzNTksMzIzNjAsMzIzNjEsMzIzNjIsMzIzNjMsMzIzNjQsMzIzNjUsMzIzNjYsMzIzNjcsMzIz''@;'; put 'put ''NjgsMzIzNjksMzIzNzAsMzIzNzEsMzIzNzIsMzIzNzMsMzIzNzQsMzIzNzUsMzIzNzYsMzIzNzcsMzIzNzgsMzIzNzksMzIzODAsMzIzODEsMzIzODIsMzIzODMsMzIzODQsMzIzODUsMzIzODcsMzIzODgsMzIzODksMzIzOTAsMzIzOTEsMzIzOTIsMzIzOTMsMzIzOTQsMzIzOTUsMzIzOTYs''@;'; put 'put ''MzIzOTcsMzIzOTgsMzIzOTksMzI0MDAsMzI0MDEsMzI0MDIsMzI0MDMsMzI0MDQsMzI0MDUsMzI0MDYsMzI0MDcsMzI0MDgsMzI0MDksMzI0MTAsMzI0MTIsMzI0MTMsMzI0MTQsMzI0MzAsMzI0MzYsMzI0NDMsMzI0NDQsMzI0NzAsMzI0ODQsMzI0OTIsMzI1MDUsMzI1MjIsMzI1MjgsMzI1''@;'; put 'put ''NDIsMzI1NjcsMzI1NjksMzI1NzEsMzI1NzIsMzI1NzMsMzI1NzQsMzI1NzUsMzI1NzYsMzI1NzcsMzI1NzksMzI1ODIsMzI1ODMsMzI1ODQsMzI1ODUsMzI1ODYsMzI1ODcsMzI1ODgsMzI1ODksMzI1OTAsMzI1OTEsMzI1OTQsMzI1OTUsMzkzMDQsMjQ4NzEsMjgyOTEsMjIzNzIsMjYxMTgs''@;'; put 'put ''MjU0MTQsMjIyNTYsMjUzMjQsMjUxOTMsMjQyNzUsMzg0MjAsMjI0MDMsMjUyODksMjE4OTUsMzQ1OTMsMzMwOTgsMzY3NzEsMjE4NjIsMzM3MTMsMjY0NjksMzYxODIsMzQwMTMsMjMxNDYsMjY2MzksMjUzMTgsMzE3MjYsMzg0MTcsMjA4NDgsMjg1NzIsMzU4ODgsMjU1OTcsMzUyNzIsMjUw''@;'; put 'put ''NDIsMzI1MTgsMjg4NjYsMjgzODksMjk3MDEsMjcwMjgsMjk0MzYsMjQyNjYsMzcwNzAsMjYzOTEsMjgwMTAsMjU0MzgsMjExNzEsMjkyODIsMzI3NjksMjAzMzIsMjMwMTMsMzcyMjYsMjg4ODksMjgwNjEsMjEyMDIsMjAwNDgsMzg2NDcsMzgyNTMsMzQxNzQsMzA5MjIsMzIwNDcsMjA3Njks''@;'; put 'put ''MjI0MTgsMjU3OTQsMzI5MDcsMzE4NjcsMjc4ODIsMjY4NjUsMjY5NzQsMjA5MTksMjE0MDAsMjY3OTIsMjkzMTMsNDA2NTQsMzE3MjksMjk0MzIsMzExNjMsMjg0MzUsMjk3MDIsMjY0NDYsMzczMjQsNDAxMDAsMzEwMzYsMzM2NzMsMzM2MjAsMjE1MTksMjY2NDcsMjAwMjksMjEzODUsMjEx''@;'; put 'put ''NjksMzA3ODIsMjEzODIsMjEwMzMsMjA2MTYsMjAzNjMsMjA0MzIsMzI1OTgsMzI2MDEsMzI2MDMsMzI2MDQsMzI2MDUsMzI2MDYsMzI2MDgsMzI2MTEsMzI2MTIsMzI2MTMsMzI2MTQsMzI2MTUsMzI2MTksMzI2MjAsMzI2MjEsMzI2MjMsMzI2MjQsMzI2MjcsMzI2MjksMzI2MzAsMzI2MzEs''@;'; put 'put ''MzI2MzIsMzI2MzQsMzI2MzUsMzI2MzYsMzI2MzcsMzI2MzksMzI2NDAsMzI2NDIsMzI2NDMsMzI2NDQsMzI2NDUsMzI2NDYsMzI2NDcsMzI2NDgsMzI2NDksMzI2NTEsMzI2NTMsMzI2NTUsMzI2NTYsMzI2NTcsMzI2NTgsMzI2NTksMzI2NjEsMzI2NjIsMzI2NjMsMzI2NjQsMzI2NjUsMzI2''@;'; put 'put ''NjcsMzI2NjgsMzI2NzIsMzI2NzQsMzI2NzUsMzI2NzcsMzI2NzgsMzI2ODAsMzI2ODEsMzI2ODIsMzI2ODMsMzI2ODQsMzI2ODUsMzI2ODYsMzI2ODksMzI2OTEsMzI2OTIsMzI2OTMsMzI2OTQsMzI2OTUsMzI2OTgsMzI2OTksMzI3MDIsMzI3MDQsMzI3MDYsMzI3MDcsMzI3MDgsMzI3MTAs''@;'; put 'put ''MzI3MTEsMzI3MTIsMzI3MTMsMzI3MTUsMzI3MTcsMzI3MTksMzI3MjAsMzI3MjEsMzI3MjIsMzI3MjMsMzI3MjYsMzI3MjcsMzI3MjksMzI3MzAsMzI3MzEsMzI3MzIsMzI3MzMsMzI3MzQsMzI3MzgsMzI3MzksMzAxNzgsMzE0MzUsMzE4OTAsMjc4MTMsMzg1ODIsMjExNDcsMjk4MjcsMjE3''@;'; put 'put ''MzcsMjA0NTcsMzI4NTIsMzM3MTQsMzY4MzAsMzgyNTYsMjQyNjUsMjQ2MDQsMjgwNjMsMjQwODgsMjU5NDcsMzMwODAsMzgxNDIsMjQ2NTEsMjg4NjAsMzI0NTEsMzE5MTgsMjA5MzcsMjY3NTMsMzE5MjEsMzMzOTEsMjAwMDQsMzY3NDIsMzczMjcsMjYyMzgsMjAxNDIsMzU4NDUsMjU3Njks''@;'; put 'put ''MzI4NDIsMjA2OTgsMzAxMDMsMjkxMzQsMjM1MjUsMzY3OTcsMjg1MTgsMjAxMDIsMjU3MzAsMzgyNDMsMjQyNzgsMjYwMDksMjEwMTUsMzUwMTAsMjg4NzIsMjExNTUsMjk0NTQsMjk3NDcsMjY1MTksMzA5NjcsMzg2NzgsMjAwMjAsMzcwNTEsNDAxNTgsMjgxMDcsMjA5NTUsMzYxNjEsMjE1''@;'; put 'put ''MzMsMjUyOTQsMjk2MTgsMzM3NzcsMzg2NDYsNDA4MzYsMzgwODMsMjAyNzgsMzI2NjYsMjA5NDAsMjg3ODksMzg1MTcsMjM3MjUsMzkwNDYsMjE0NzgsMjAxOTYsMjgzMTYsMjk3MDUsMjcwNjAsMzA4MjcsMzkzMTEsMzAwNDEsMjEwMTYsMzAyNDQsMjc5NjksMjY2MTEsMjA4NDUsNDA4NTcs''@;'; put 'put ''MzI4NDMsMjE2NTcsMzE1NDgsMzE0MjMsMzI3NDAsMzI3NDMsMzI3NDQsMzI3NDYsMzI3NDcsMzI3NDgsMzI3NDksMzI3NTEsMzI3NTQsMzI3NTYsMzI3NTcsMzI3NTgsMzI3NTksMzI3NjAsMzI3NjEsMzI3NjIsMzI3NjUsMzI3NjYsMzI3NjcsMzI3NzAsMzI3NzUsMzI3NzYsMzI3NzcsMzI3''@;'; put 'put ''NzgsMzI3ODIsMzI3ODMsMzI3ODUsMzI3ODcsMzI3OTQsMzI3OTUsMzI3OTcsMzI3OTgsMzI3OTksMzI4MDEsMzI4MDMsMzI4MDQsMzI4MTEsMzI4MTIsMzI4MTMsMzI4MTQsMzI4MTUsMzI4MTYsMzI4MTgsMzI4MjAsMzI4MjUsMzI4MjYsMzI4MjgsMzI4MzAsMzI4MzIsMzI4MzMsMzI4MzYs''@;'; put 'put ''MzI4MzcsMzI4MzksMzI4NDAsMzI4NDEsMzI4NDYsMzI4NDcsMzI4NDgsMzI4NDksMzI4NTEsMzI4NTMsMzI4NTQsMzI4NTUsMzI4NTcsMzI4NTksMzI4NjAsMzI4NjEsMzI4NjIsMzI4NjMsMzI4NjQsMzI4NjUsMzI4NjYsMzI4NjcsMzI4NjgsMzI4NjksMzI4NzAsMzI4NzEsMzI4NzIsMzI4''@;'; put 'put ''NzUsMzI4NzYsMzI4NzcsMzI4NzgsMzI4NzksMzI4ODAsMzI4ODIsMzI4ODMsMzI4ODQsMzI4ODUsMzI4ODYsMzI4ODcsMzI4ODgsMzI4ODksMzI4OTAsMzI4OTEsMzI4OTIsMzI4OTMsMzg1MzQsMjI0MDQsMjUzMTQsMzg0NzEsMjcwMDQsMjMwNDQsMjU2MDIsMzE2OTksMjg0MzEsMzg0NzUs''@;'; put 'put ''MzM0NDYsMjEzNDYsMzkwNDUsMjQyMDgsMjg4MDksMjU1MjMsMjEzNDgsMzQzODMsNDAwNjUsNDA1OTUsMzA4NjAsMzg3MDYsMzYzMzUsMzYxNjIsNDA1NzUsMjg1MTAsMzExMDgsMjQ0MDUsMzg0NzAsMjUxMzQsMzk1NDAsMjE1MjUsMzgxMDksMjAzODcsMjYwNTMsMjM2NTMsMjM2NDksMzI1''@;'; put 'put ''MzMsMzQzODUsMjc2OTUsMjQ0NTksMjk1NzUsMjgzODgsMzI1MTEsMjM3ODIsMjUzNzEsMjM0MDIsMjgzOTAsMjEzNjUsMjAwODEsMjU1MDQsMzAwNTMsMjUyNDksMzY3MTgsMjAyNjIsMjAxNzcsMjc4MTQsMzI0MzgsMzU3NzAsMzM4MjEsMzQ3NDYsMzI1OTksMzY5MjMsMzgxNzksMzE2NTcs''@;'; put 'put ''Mzk1ODUsMzUwNjQsMzM4NTMsMjc5MzEsMzk1NTgsMzI0NzYsMjI5MjAsNDA2MzUsMjk1OTUsMzA3MjEsMzQ0MzQsMzk1MzIsMzk1NTQsMjIwNDMsMjE1MjcsMjI0NzUsMjAwODAsNDA2MTQsMjEzMzQsMzY4MDgsMzMwMzMsMzA2MTAsMzkzMTQsMzQ1NDIsMjgzODUsMzQwNjcsMjYzNjQsMjQ5''@;'; put 'put ''MzAsMjg0NTksMzI4OTQsMzI4OTcsMzI4OTgsMzI5MDEsMzI5MDQsMzI5MDYsMzI5MDksMzI5MTAsMzI5MTEsMzI5MTIsMzI5MTMsMzI5MTQsMzI5MTYsMzI5MTcsMzI5MTksMzI5MjEsMzI5MjYsMzI5MzEsMzI5MzQsMzI5MzUsMzI5MzYsMzI5NDAsMzI5NDQsMzI5NDcsMzI5NDksMzI5NTAs''@;'; put 'put ''MzI5NTIsMzI5NTMsMzI5NTUsMzI5NjUsMzI5NjcsMzI5NjgsMzI5NjksMzI5NzAsMzI5NzEsMzI5NzUsMzI5NzYsMzI5NzcsMzI5NzgsMzI5NzksMzI5ODAsMzI5ODEsMzI5ODQsMzI5OTEsMzI5OTIsMzI5OTQsMzI5OTUsMzI5OTgsMzMwMDYsMzMwMTMsMzMwMTUsMzMwMTcsMzMwMTksMzMw''@;'; put 'put ''MjIsMzMwMjMsMzMwMjQsMzMwMjUsMzMwMjcsMzMwMjgsMzMwMjksMzMwMzEsMzMwMzIsMzMwMzUsMzMwMzYsMzMwNDUsMzMwNDcsMzMwNDksMzMwNTEsMzMwNTIsMzMwNTMsMzMwNTUsMzMwNTYsMzMwNTcsMzMwNTgsMzMwNTksMzMwNjAsMzMwNjEsMzMwNjIsMzMwNjMsMzMwNjQsMzMwNjUs''@;'; put 'put ''MzMwNjYsMzMwNjcsMzMwNjksMzMwNzAsMzMwNzIsMzMwNzUsMzMwNzYsMzMwNzcsMzMwNzksMzMwODEsMzMwODIsMzMwODMsMzMwODQsMzMwODUsMzMwODcsMzU4ODEsMzM0MjYsMzM1NzksMzA0NTAsMjc2NjcsMjQ1MzcsMzM3MjUsMjk0ODMsMzM1NDEsMzgxNzAsMjc2MTEsMzA2ODMsMzgw''@;'; put 'put ''ODYsMjEzNTksMzM1MzgsMjA4ODIsMjQxMjUsMzU5ODAsMzYxNTIsMjAwNDAsMjk2MTEsMjY1MjIsMjY3NTcsMzcyMzgsMzg2NjUsMjkwMjgsMjc4MDksMzA0NzMsMjMxODYsMzgyMDksMjc1OTksMzI2NTQsMjYxNTEsMjM1MDQsMjI5NjksMjMxOTQsMzgzNzYsMzgzOTEsMjAyMDQsMzM4MDQs''@;'; put 'put ''MzM5NDUsMjczMDgsMzA0MzEsMzgxOTIsMjk0NjcsMjY3OTAsMjMzOTEsMzA1MTEsMzcyNzQsMzg3NTMsMzE5NjQsMzY4NTUsMzU4NjgsMjQzNTcsMzE4NTksMzExOTIsMzUyNjksMjc4NTIsMzQ1ODgsMjM0OTQsMjQxMzAsMjY4MjUsMzA0OTYsMzI1MDEsMjA4ODUsMjA4MTMsMjExOTMsMjMw''@;'; put 'put ''ODEsMzI1MTcsMzg3NTQsMzM0OTUsMjU1NTEsMzA1OTYsMzQyNTYsMzExODYsMjgyMTgsMjQyMTcsMjI5MzcsMzQwNjUsMjg3ODEsMjc2NjUsMjUyNzksMzAzOTksMjU5MzUsMjQ3NTEsMzgzOTcsMjYxMjYsMzQ3MTksNDA0ODMsMzgxMjUsMjE1MTcsMjE2MjksMzU4ODQsMjU3MjAsMzMwODgs''@;'; put 'put ''MzMwODksMzMwOTAsMzMwOTEsMzMwOTIsMzMwOTMsMzMwOTUsMzMwOTcsMzMxMDEsMzMxMDIsMzMxMDMsMzMxMDYsMzMxMTAsMzMxMTEsMzMxMTIsMzMxMTUsMzMxMTYsMzMxMTcsMzMxMTgsMzMxMTksMzMxMjEsMzMxMjIsMzMxMjMsMzMxMjQsMzMxMjYsMzMxMjgsMzMxMzAsMzMxMzEsMzMx''@;'; put 'put ''MzIsMzMxMzUsMzMxMzgsMzMxMzksMzMxNDEsMzMxNDIsMzMxNDMsMzMxNDQsMzMxNTMsMzMxNTUsMzMxNTYsMzMxNTcsMzMxNTgsMzMxNTksMzMxNjEsMzMxNjMsMzMxNjQsMzMxNjUsMzMxNjYsMzMxNjgsMzMxNzAsMzMxNzEsMzMxNzIsMzMxNzMsMzMxNzQsMzMxNzUsMzMxNzcsMzMxNzgs''@;'; put 'put ''MzMxODIsMzMxODMsMzMxODQsMzMxODUsMzMxODYsMzMxODgsMzMxODksMzMxOTEsMzMxOTMsMzMxOTUsMzMxOTYsMzMxOTcsMzMxOTgsMzMxOTksMzMyMDAsMzMyMDEsMzMyMDIsMzMyMDQsMzMyMDUsMzMyMDYsMzMyMDcsMzMyMDgsMzMyMDksMzMyMTIsMzMyMTMsMzMyMTQsMzMyMTUsMzMy''@;'; put 'put ''MjAsMzMyMjEsMzMyMjMsMzMyMjQsMzMyMjUsMzMyMjcsMzMyMjksMzMyMzAsMzMyMzEsMzMyMzIsMzMyMzMsMzMyMzQsMzMyMzUsMjU3MjEsMzQzMjEsMjcxNjksMzMxODAsMzA5NTIsMjU3MDUsMzk3NjQsMjUyNzMsMjY0MTEsMzM3MDcsMjI2OTYsNDA2NjQsMjc4MTksMjg0NDgsMjM1MTgs''@;'; put 'put ''Mzg0NzYsMzU4NTEsMjkyNzksMjY1NzYsMjUyODcsMjkyODEsMjAxMzcsMjI5ODIsMjc1OTcsMjI2NzUsMjYyODYsMjQxNDksMjEyMTUsMjQ5MTcsMjY0MDgsMzA0NDYsMzA1NjYsMjkyODcsMzEzMDIsMjUzNDMsMjE3MzgsMjE1ODQsMzgwNDgsMzcwMjcsMjMwNjgsMzI0MzUsMjc2NzAsMjAw''@;'; put 'put ''MzUsMjI5MDIsMzI3ODQsMjI4NTYsMjEzMzUsMzAwMDcsMzg1OTAsMjIyMTgsMjUzNzYsMzMwNDEsMjQ3MDAsMzgzOTMsMjgxMTgsMjE2MDIsMzkyOTcsMjA4NjksMjMyNzMsMzMwMjEsMjI5NTgsMzg2NzUsMjA1MjIsMjc4NzcsMjM2MTIsMjUzMTEsMjAzMjAsMjEzMTEsMzMxNDcsMzY4NzAs''@;'; put 'put ''MjgzNDYsMzQwOTEsMjUyODgsMjQxODAsMzA5MTAsMjU3ODEsMjU0NjcsMjQ1NjUsMjMwNjQsMzcyNDcsNDA0NzksMjM2MTUsMjU0MjMsMzI4MzQsMjM0MjEsMjE4NzAsMzgyMTgsMzgyMjEsMjgwMzcsMjQ3NDQsMjY1OTIsMjk0MDYsMjA5NTcsMjM0MjUsMzMyMzYsMzMyMzcsMzMyMzgsMzMy''@;'; put 'put ''MzksMzMyNDAsMzMyNDEsMzMyNDIsMzMyNDMsMzMyNDQsMzMyNDUsMzMyNDYsMzMyNDcsMzMyNDgsMzMyNDksMzMyNTAsMzMyNTIsMzMyNTMsMzMyNTQsMzMyNTYsMzMyNTcsMzMyNTksMzMyNjIsMzMyNjMsMzMyNjQsMzMyNjUsMzMyNjYsMzMyNjksMzMyNzAsMzMyNzEsMzMyNzIsMzMyNzMs''@;'; put 'put ''MzMyNzQsMzMyNzcsMzMyNzksMzMyODMsMzMyODcsMzMyODgsMzMyODksMzMyOTAsMzMyOTEsMzMyOTQsMzMyOTUsMzMyOTcsMzMyOTksMzMzMDEsMzMzMDIsMzMzMDMsMzMzMDQsMzMzMDUsMzMzMDYsMzMzMDksMzMzMTIsMzMzMTYsMzMzMTcsMzMzMTgsMzMzMTksMzMzMjEsMzMzMjYsMzMz''@;'; put 'put ''MzAsMzMzMzgsMzMzNDAsMzMzNDEsMzMzNDMsMzMzNDQsMzMzNDUsMzMzNDYsMzMzNDcsMzMzNDksMzMzNTAsMzMzNTIsMzMzNTQsMzMzNTYsMzMzNTcsMzMzNTgsMzMzNjAsMzMzNjEsMzMzNjIsMzMzNjMsMzMzNjQsMzMzNjUsMzMzNjYsMzMzNjcsMzMzNjksMzMzNzEsMzMzNzIsMzMzNzMs''@;'; put 'put ''MzMzNzQsMzMzNzYsMzMzNzcsMzMzNzgsMzMzNzksMzMzODAsMzMzODEsMzMzODIsMzMzODMsMzMzODUsMjUzMTksMjc4NzAsMjkyNzUsMjUxOTcsMzgwNjIsMzI0NDUsMzMwNDMsMjc5ODcsMjA4OTIsMjQzMjQsMjI5MDAsMjExNjIsMjQ1OTQsMjI4OTksMjYyNjIsMzQzODQsMzAxMTEsMjUz''@;'; put 'put ''ODYsMjUwNjIsMzE5ODMsMzU4MzQsMjE3MzQsMjc0MzEsNDA0ODUsMjc1NzIsMzQyNjEsMjE1ODksMjA1OTgsMjc4MTIsMjE4NjYsMzYyNzYsMjkyMjgsMjQwODUsMjQ1OTcsMjk3NTAsMjUyOTMsMjU0OTAsMjkyNjAsMjQ0NzIsMjgyMjcsMjc5NjYsMjU4NTYsMjg1MDQsMzA0MjQsMzA5Mjgs''@;'; put 'put ''MzA0NjAsMzAwMzYsMjEwMjgsMjE0NjcsMjAwNTEsMjQyMjIsMjYwNDksMzI4MTAsMzI5ODIsMjUyNDMsMjE2MzgsMjEwMzIsMjg4NDYsMzQ5NTcsMzYzMDUsMjc4NzMsMjE2MjQsMzI5ODYsMjI1MjEsMzUwNjAsMzYxODAsMzg1MDYsMzcxOTcsMjAzMjksMjc4MDMsMjE5NDMsMzA0MDYsMzA3''@;'; put 'put ''NjgsMjUyNTYsMjg5MjEsMjg1NTgsMjQ0MjksMzQwMjgsMjY4NDIsMzA4NDQsMzE3MzUsMzMxOTIsMjYzNzksNDA1MjcsMjU0NDcsMzA4OTYsMjIzODMsMzA3MzgsMzg3MTMsMjUyMDksMjUyNTksMjExMjgsMjk3NDksMjc2MDcsMzMzODYsMzMzODcsMzMzODgsMzMzODksMzMzOTMsMzMzOTcs''@;'; put 'put ''MzMzOTgsMzMzOTksMzM0MDAsMzM0MDMsMzM0MDQsMzM0MDgsMzM0MDksMzM0MTEsMzM0MTMsMzM0MTQsMzM0MTUsMzM0MTcsMzM0MjAsMzM0MjQsMzM0MjcsMzM0MjgsMzM0MjksMzM0MzAsMzM0MzQsMzM0MzUsMzM0MzgsMzM0NDAsMzM0NDIsMzM0NDMsMzM0NDcsMzM0NTgsMzM0NjEsMzM0''@;'; put 'put ''NjIsMzM0NjYsMzM0NjcsMzM0NjgsMzM0NzEsMzM0NzIsMzM0NzQsMzM0NzUsMzM0NzcsMzM0NzgsMzM0ODEsMzM0ODgsMzM0OTQsMzM0OTcsMzM0OTgsMzM1MDEsMzM1MDYsMzM1MTEsMzM1MTIsMzM1MTMsMzM1MTQsMzM1MTYsMzM1MTcsMzM1MTgsMzM1MjAsMzM1MjIsMzM1MjMsMzM1MjUs''@;'; put 'put ''MzM1MjYsMzM1MjgsMzM1MzAsMzM1MzIsMzM1MzMsMzM1MzQsMzM1MzUsMzM1MzYsMzM1NDYsMzM1NDcsMzM1NDksMzM1NTIsMzM1NTQsMzM1NTUsMzM1NTgsMzM1NjAsMzM1NjEsMzM1NjUsMzM1NjYsMzM1NjcsMzM1NjgsMzM1NjksMzM1NzAsMzM1NzEsMzM1NzIsMzM1NzMsMzM1NzQsMzM1''@;'; put 'put ''NzcsMzM1NzgsMzM1ODIsMzM1ODQsMzM1ODYsMzM1OTEsMzM1OTUsMzM1OTcsMjE4NjAsMzMwODYsMzAxMzAsMzAzODIsMjEzMDUsMzAxNzQsMjA3MzEsMjM2MTcsMzU2OTIsMzE2ODcsMjA1NTksMjkyNTUsMzk1NzUsMzkxMjgsMjg0MTgsMjk5MjIsMzEwODAsMjU3MzUsMzA2MjksMjUzNDAs''@;'; put 'put ''MzkwNTcsMzYxMzksMjE2OTcsMzI4NTYsMjAwNTAsMjIzNzgsMzM1MjksMzM4MDUsMjQxNzksMjA5NzMsMjk5NDIsMzU3ODAsMjM2MzEsMjIzNjksMjc5MDAsMzkwNDcsMjMxMTAsMzA3NzIsMzk3NDgsMzY4NDMsMzE4OTMsMjEwNzgsMjUxNjksMzgxMzgsMjAxNjYsMzM2NzAsMzM4ODksMzM3''@;'; put 'put ''NjksMzM5NzAsMjI0ODQsMjY0MjAsMjIyNzUsMjYyMjIsMjgwMDYsMzU4ODksMjYzMzMsMjg2ODksMjYzOTksMjc0NTAsMjY2NDYsMjUxMTQsMjI5NzEsMTk5NzEsMjA5MzIsMjg0MjIsMjY1NzgsMjc3OTEsMjA4NTQsMjY4MjcsMjI4NTUsMjc0OTUsMzAwNTQsMjM4MjIsMzMwNDAsNDA3ODQs''@;'; put 'put ''MjYwNzEsMzEwNDgsMzEwNDEsMzk1NjksMzYyMTUsMjM2ODIsMjAwNjIsMjAyMjUsMjE1NTEsMjI4NjUsMzA3MzIsMjIxMjAsMjc2NjgsMzY4MDQsMjQzMjMsMjc3NzMsMjc4NzUsMzU3NTUsMjU0ODgsMzM1OTgsMzM1OTksMzM2MDEsMzM2MDIsMzM2MDQsMzM2MDUsMzM2MDgsMzM2MTAsMzM2''@;'; put 'put ''MTEsMzM2MTIsMzM2MTMsMzM2MTQsMzM2MTksMzM2MjEsMzM2MjIsMzM2MjMsMzM2MjQsMzM2MjUsMzM2MjksMzM2MzQsMzM2NDgsMzM2NDksMzM2NTAsMzM2NTEsMzM2NTIsMzM2NTMsMzM2NTQsMzM2NTcsMzM2NTgsMzM2NjIsMzM2NjMsMzM2NjQsMzM2NjUsMzM2NjYsMzM2NjcsMzM2Njgs''@;'; put 'put ''MzM2NzEsMzM2NzIsMzM2NzQsMzM2NzUsMzM2NzYsMzM2NzcsMzM2NzksMzM2ODAsMzM2ODEsMzM2ODQsMzM2ODUsMzM2ODYsMzM2ODcsMzM2ODksMzM2OTAsMzM2OTMsMzM2OTUsMzM2OTcsMzM2OTgsMzM2OTksMzM3MDAsMzM3MDEsMzM3MDIsMzM3MDMsMzM3MDgsMzM3MDksMzM3MTAsMzM3''@;'; put 'put ''MTEsMzM3MTcsMzM3MjMsMzM3MjYsMzM3MjcsMzM3MzAsMzM3MzEsMzM3MzIsMzM3MzQsMzM3MzYsMzM3MzcsMzM3MzksMzM3NDEsMzM3NDIsMzM3NDQsMzM3NDUsMzM3NDYsMzM3NDcsMzM3NDksMzM3NTEsMzM3NTMsMzM3NTQsMzM3NTUsMzM3NTgsMzM3NjIsMzM3NjMsMzM3NjQsMzM3NjYs''@;'; put 'put ''MzM3NjcsMzM3NjgsMzM3NzEsMzM3NzIsMzM3NzMsMjQ2ODgsMjc5NjUsMjkzMDEsMjUxOTAsMzgwMzAsMzgwODUsMjEzMTUsMzY4MDEsMzE2MTQsMjAxOTEsMzU4NzgsMjAwOTQsNDA2NjAsMzgwNjUsMzgwNjcsMjEwNjksMjg1MDgsMzY5NjMsMjc5NzMsMzU4OTIsMjI1NDUsMjM4ODQsMjc0''@;'; put 'put ''MjQsMjc0NjUsMjY1MzgsMjE1OTUsMzMxMDgsMzI2NTIsMjI2ODEsMzQxMDMsMjQzNzgsMjUyNTAsMjcyMDcsMzgyMDEsMjU5NzAsMjQ3MDgsMjY3MjUsMzA2MzEsMjAwNTIsMjAzOTIsMjQwMzksMzg4MDgsMjU3NzIsMzI3MjgsMjM3ODksMjA0MzEsMzEzNzMsMjA5OTksMzM1NDAsMTk5ODgs''@;'; put 'put ''MjQ2MjMsMzEzNjMsMzgwNTQsMjA0MDUsMjAxNDYsMzEyMDYsMjk3NDgsMjEyMjAsMzM0NjUsMjU4MTAsMzExNjUsMjM1MTcsMjc3NzcsMzg3MzgsMzY3MzEsMjc2ODIsMjA1NDIsMjEzNzUsMjgxNjUsMjU4MDYsMjYyMjgsMjc2OTYsMjQ3NzMsMzkwMzEsMzU4MzEsMjQxOTgsMjk3NTYsMzEz''@;'; put 'put ''NTEsMzExNzksMTk5OTIsMzcwNDEsMjk2OTksMjc3MTQsMjIyMzQsMzcxOTUsMjc4NDUsMzYyMzUsMjEzMDYsMzQ1MDIsMjYzNTQsMzY1MjcsMjM2MjQsMzk1MzcsMjgxOTIsMzM3NzQsMzM3NzUsMzM3NzksMzM3ODAsMzM3ODEsMzM3ODIsMzM3ODMsMzM3ODYsMzM3ODcsMzM3ODgsMzM3OTAs''@;'; put 'put ''MzM3OTEsMzM3OTIsMzM3OTQsMzM3OTcsMzM3OTksMzM4MDAsMzM4MDEsMzM4MDIsMzM4MDgsMzM4MTAsMzM4MTEsMzM4MTIsMzM4MTMsMzM4MTQsMzM4MTUsMzM4MTcsMzM4MTgsMzM4MTksMzM4MjIsMzM4MjMsMzM4MjQsMzM4MjUsMzM4MjYsMzM4MjcsMzM4MzMsMzM4MzQsMzM4MzUsMzM4''@;'; put 'put ''MzYsMzM4MzcsMzM4MzgsMzM4MzksMzM4NDAsMzM4NDIsMzM4NDMsMzM4NDQsMzM4NDUsMzM4NDYsMzM4NDcsMzM4NDksMzM4NTAsMzM4NTEsMzM4NTQsMzM4NTUsMzM4NTYsMzM4NTcsMzM4NTgsMzM4NTksMzM4NjAsMzM4NjEsMzM4NjMsMzM4NjQsMzM4NjUsMzM4NjYsMzM4NjcsMzM4Njgs''@;'; put 'put ''MzM4NjksMzM4NzAsMzM4NzEsMzM4NzIsMzM4NzQsMzM4NzUsMzM4NzYsMzM4NzcsMzM4NzgsMzM4ODAsMzM4ODUsMzM4ODYsMzM4ODcsMzM4ODgsMzM4OTAsMzM4OTIsMzM4OTMsMzM4OTQsMzM4OTUsMzM4OTYsMzM4OTgsMzM5MDIsMzM5MDMsMzM5MDQsMzM5MDYsMzM5MDgsMzM5MTEsMzM5''@;'; put 'put ''MTMsMzM5MTUsMzM5MTYsMjE0NjIsMjMwOTQsNDA4NDMsMzYyNTksMjE0MzUsMjIyODAsMzkwNzksMjY0MzUsMzcyNzUsMjc4NDksMjA4NDAsMzAxNTQsMjUzMzEsMjkzNTYsMjEwNDgsMjExNDksMzI1NzAsMjg4MjAsMzAyNjQsMjEzNjQsNDA1MjIsMjcwNjMsMzA4MzAsMzg1OTIsMzUwMzMs''@;'; put 'put ''MzI2NzYsMjg5ODIsMjkxMjMsMjA4NzMsMjY1NzksMjk5MjQsMjI3NTYsMjU4ODAsMjIxOTksMzU3NTMsMzkyODYsMjUyMDAsMzI0NjksMjQ4MjUsMjg5MDksMjI3NjQsMjAxNjEsMjAxNTQsMjQ1MjUsMzg4ODcsMjAyMTksMzU3NDgsMjA5OTUsMjI5MjIsMzI0MjcsMjUxNzIsMjAxNzMsMjYw''@;'; put 'put ''ODUsMjUxMDIsMzM1OTIsMzM5OTMsMzM2MzUsMzQ3MDEsMjkwNzYsMjgzNDIsMjM0ODEsMzI0NjYsMjA4ODcsMjU1NDUsMjY1ODAsMzI5MDUsMzM1OTMsMzQ4MzcsMjA3NTQsMjM0MTgsMjI5MTQsMzY3ODUsMjAwODMsMjc3NDEsMjA4MzcsMzUxMDksMzY3MTksMzg0NDYsMzQxMjIsMjk3OTAs''@;'; put 'put ''MzgxNjAsMzgzODQsMjgwNzAsMzM1MDksMjQzNjksMjU3NDYsMjc5MjIsMzM4MzIsMzMxMzQsNDAxMzEsMjI2MjIsMzYxODcsMTk5NzcsMjE0NDEsMzM5MTcsMzM5MTgsMzM5MTksMzM5MjAsMzM5MjEsMzM5MjMsMzM5MjQsMzM5MjUsMzM5MjYsMzM5MzAsMzM5MzMsMzM5MzUsMzM5MzYsMzM5''@;'; put 'put ''MzcsMzM5MzgsMzM5MzksMzM5NDAsMzM5NDEsMzM5NDIsMzM5NDQsMzM5NDYsMzM5NDcsMzM5NDksMzM5NTAsMzM5NTEsMzM5NTIsMzM5NTQsMzM5NTUsMzM5NTYsMzM5NTcsMzM5NTgsMzM5NTksMzM5NjAsMzM5NjEsMzM5NjIsMzM5NjMsMzM5NjQsMzM5NjUsMzM5NjYsMzM5NjgsMzM5Njks''@;'; put 'put ''MzM5NzEsMzM5NzMsMzM5NzQsMzM5NzUsMzM5NzksMzM5ODAsMzM5ODIsMzM5ODQsMzM5ODYsMzM5ODcsMzM5ODksMzM5OTAsMzM5OTEsMzM5OTIsMzM5OTUsMzM5OTYsMzM5OTgsMzM5OTksMzQwMDIsMzQwMDQsMzQwMDUsMzQwMDcsMzQwMDgsMzQwMDksMzQwMTAsMzQwMTEsMzQwMTIsMzQw''@;'; put 'put ''MTQsMzQwMTcsMzQwMTgsMzQwMjAsMzQwMjMsMzQwMjQsMzQwMjUsMzQwMjYsMzQwMjcsMzQwMjksMzQwMzAsMzQwMzEsMzQwMzMsMzQwMzQsMzQwMzUsMzQwMzYsMzQwMzcsMzQwMzgsMzQwMzksMzQwNDAsMzQwNDEsMzQwNDIsMzQwNDMsMzQwNDUsMzQwNDYsMzQwNDgsMzQwNDksMzQwNTAs''@;'; put 'put ''MjAyNTQsMjU5NTUsMjY3MDUsMjE5NzEsMjAwMDcsMjU2MjAsMzk1NzgsMjUxOTUsMjMyMzQsMjk3OTEsMzMzOTQsMjgwNzMsMjY4NjIsMjA3MTEsMzM2NzgsMzA3MjIsMjY0MzIsMjEwNDksMjc4MDEsMzI0MzMsMjA2NjcsMjE4NjEsMjkwMjIsMzE1NzksMjYxOTQsMjk2NDIsMzM1MTUsMjY0''@;'; put 'put ''NDEsMjM2NjUsMjEwMjQsMjkwNTMsMzQ5MjMsMzgzNzgsMzg0ODUsMjU3OTcsMzYxOTMsMzMyMDMsMjE4OTIsMjc3MzMsMjUxNTksMzI1NTgsMjI2NzQsMjAyNjAsMjE4MzAsMzYxNzUsMjYxODgsMTk5NzgsMjM1NzgsMzUwNTksMjY3ODYsMjU0MjIsMzEyNDUsMjg5MDMsMzM0MjEsMjEyNDIs''@;'; put 'put ''Mzg5MDIsMjM1NjksMjE3MzYsMzcwNDUsMzI0NjEsMjI4ODIsMzYxNzAsMzQ1MDMsMzMyOTIsMzMyOTMsMzYxOTgsMjU2NjgsMjM1NTYsMjQ5MTMsMjgwNDEsMzEwMzgsMzU3NzQsMzA3NzUsMzAwMDMsMjE2MjcsMjAyODAsMzY1MjMsMjgxNDUsMjMwNzIsMzI0NTMsMzEwNzAsMjc3ODQsMjM0''@;'; put 'put ''NTcsMjMxNTgsMjk5NzgsMzI5NTgsMjQ5MTAsMjgxODMsMjI3NjgsMjk5ODMsMjk5ODksMjkyOTgsMjEzMTksMzI0OTksMzQwNTEsMzQwNTIsMzQwNTMsMzQwNTQsMzQwNTUsMzQwNTYsMzQwNTcsMzQwNTgsMzQwNTksMzQwNjEsMzQwNjIsMzQwNjMsMzQwNjQsMzQwNjYsMzQwNjgsMzQwNjks''@;'; put 'put ''MzQwNzAsMzQwNzIsMzQwNzMsMzQwNzUsMzQwNzYsMzQwNzcsMzQwNzgsMzQwODAsMzQwODIsMzQwODMsMzQwODQsMzQwODUsMzQwODYsMzQwODcsMzQwODgsMzQwODksMzQwOTAsMzQwOTMsMzQwOTQsMzQwOTUsMzQwOTYsMzQwOTcsMzQwOTgsMzQwOTksMzQxMDAsMzQxMDEsMzQxMDIsMzQx''@;'; put 'put ''MTAsMzQxMTEsMzQxMTIsMzQxMTMsMzQxMTQsMzQxMTYsMzQxMTcsMzQxMTgsMzQxMTksMzQxMjMsMzQxMjQsMzQxMjUsMzQxMjYsMzQxMjcsMzQxMjgsMzQxMjksMzQxMzAsMzQxMzEsMzQxMzIsMzQxMzMsMzQxMzUsMzQxMzYsMzQxMzgsMzQxMzksMzQxNDAsMzQxNDEsMzQxNDMsMzQxNDQs''@;'; put 'put ''MzQxNDUsMzQxNDYsMzQxNDcsMzQxNDksMzQxNTAsMzQxNTEsMzQxNTMsMzQxNTQsMzQxNTUsMzQxNTYsMzQxNTcsMzQxNTgsMzQxNTksMzQxNjAsMzQxNjEsMzQxNjMsMzQxNjUsMzQxNjYsMzQxNjcsMzQxNjgsMzQxNzIsMzQxNzMsMzQxNzUsMzQxNzYsMzQxNzcsMzA0NjUsMzA0MjcsMjEw''@;'; put 'put ''OTcsMzI5ODgsMjIzMDcsMjQwNzIsMjI4MzMsMjk0MjIsMjYwNDUsMjgyODcsMzU3OTksMjM2MDgsMzQ0MTcsMjEzMTMsMzA3MDcsMjUzNDIsMjYxMDIsMjAxNjAsMzkxMzUsMzQ0MzIsMjM0NTQsMzU3ODIsMjE0OTAsMzA2OTAsMjAzNTEsMjM2MzAsMzk1NDIsMjI5ODcsMjQzMzUsMzEwMzQs''@;'; put 'put ''MjI3NjMsMTk5OTAsMjY2MjMsMjAxMDcsMjUzMjUsMzU0NzUsMzY4OTMsMjExODMsMjYxNTksMjE5ODAsMjIxMjQsMzY4NjYsMjAxODEsMjAzNjUsMzczMjIsMzkyODAsMjc2NjMsMjQwNjYsMjQ2NDMsMjM0NjAsMzUyNzAsMzU3OTcsMjU5MTAsMjUxNjMsMzkzMTgsMjM0MzIsMjM1NTEsMjU0''@;'; put 'put ''ODAsMjE4MDYsMjE0NjMsMzAyNDYsMjA4NjEsMzQwOTIsMjY1MzAsMjY4MDMsMjc1MzAsMjUyMzQsMzY3NTUsMjE0NjAsMzMyOTgsMjgxMTMsMzAwOTUsMjAwNzAsMzYxNzQsMjM0MDgsMjkwODcsMzQyMjMsMjYyNTcsMjYzMjksMzI2MjYsMzQ1NjAsNDA2NTMsNDA3MzYsMjM2NDYsMjY0MTUs''@;'; put 'put ''MzY4NDgsMjY2NDEsMjY0NjMsMjUxMDEsMzE0NDYsMjI2NjEsMjQyNDYsMjU5NjgsMjg0NjUsMzQxNzgsMzQxNzksMzQxODIsMzQxODQsMzQxODUsMzQxODYsMzQxODcsMzQxODgsMzQxODksMzQxOTAsMzQxOTIsMzQxOTMsMzQxOTQsMzQxOTUsMzQxOTYsMzQxOTcsMzQxOTgsMzQxOTksMzQy''@;'; put 'put ''MDAsMzQyMDEsMzQyMDIsMzQyMDUsMzQyMDYsMzQyMDcsMzQyMDgsMzQyMDksMzQyMTAsMzQyMTEsMzQyMTMsMzQyMTQsMzQyMTUsMzQyMTcsMzQyMTksMzQyMjAsMzQyMjEsMzQyMjUsMzQyMjYsMzQyMjcsMzQyMjgsMzQyMjksMzQyMzAsMzQyMzIsMzQyMzQsMzQyMzUsMzQyMzYsMzQyMzcs''@;'; put 'put ''MzQyMzgsMzQyMzksMzQyNDAsMzQyNDIsMzQyNDMsMzQyNDQsMzQyNDUsMzQyNDYsMzQyNDcsMzQyNDgsMzQyNTAsMzQyNTEsMzQyNTIsMzQyNTMsMzQyNTQsMzQyNTcsMzQyNTgsMzQyNjAsMzQyNjIsMzQyNjMsMzQyNjQsMzQyNjUsMzQyNjYsMzQyNjcsMzQyNjksMzQyNzAsMzQyNzEsMzQy''@;'; put 'put ''NzIsMzQyNzMsMzQyNzQsMzQyNzUsMzQyNzcsMzQyNzgsMzQyNzksMzQyODAsMzQyODIsMzQyODMsMzQyODQsMzQyODUsMzQyODYsMzQyODcsMzQyODgsMzQyODksMzQyOTAsMzQyOTEsMzQyOTIsMzQyOTMsMzQyOTQsMzQyOTUsMzQyOTYsMjQ2NjEsMjEwNDcsMzI3ODEsMjU2ODQsMzQ5Mjgs''@;'; put 'put ''Mjk5OTMsMjQwNjksMjY2NDMsMjUzMzIsMzg2ODQsMjE0NTIsMjkyNDUsMzU4NDEsMjc3MDAsMzA1NjEsMzEyNDYsMjE1NTAsMzA2MzYsMzkwMzQsMzMzMDgsMzU4MjgsMzA4MDUsMjYzODgsMjg4NjUsMjYwMzEsMjU3NDksMjIwNzAsMjQ2MDUsMzExNjksMjE0OTYsMTk5OTcsMjc1MTUsMzI5''@;'; put 'put ''MDIsMjM1NDYsMjE5ODcsMjIyMzUsMjAyODIsMjAyODQsMzkyODIsMjQwNTEsMjY0OTQsMzI4MjQsMjQ1NzgsMzkwNDIsMzY4NjUsMjM0MzUsMzU3NzIsMzU4MjksMjU2MjgsMzMzNjgsMjU4MjIsMjIwMTMsMzM0ODcsMzcyMjEsMjA0MzksMzIwMzIsMzY4OTUsMzE5MDMsMjA3MjMsMjI2MDks''@;'; put 'put ''MjgzMzUsMjM0ODcsMzU3ODUsMzI4OTksMzcyNDAsMzM5NDgsMzE2MzksMzQ0MjksMzg1MzksMzg1NDMsMzI0ODUsMzk2MzUsMzA4NjIsMjM2ODEsMzEzMTksMzY5MzAsMzg1NjcsMzEwNzEsMjMzODUsMjU0MzksMzE0OTksMzQwMDEsMjY3OTcsMjE3NjYsMzI1NTMsMjk3MTIsMzIwMzQsMzgx''@;'; put 'put ''NDUsMjUxNTIsMjI2MDQsMjAxODIsMjM0MjcsMjI5MDUsMjI2MTIsMzQyOTcsMzQyOTgsMzQzMDAsMzQzMDEsMzQzMDIsMzQzMDQsMzQzMDUsMzQzMDYsMzQzMDcsMzQzMDgsMzQzMTAsMzQzMTEsMzQzMTIsMzQzMTMsMzQzMTQsMzQzMTUsMzQzMTYsMzQzMTcsMzQzMTgsMzQzMTksMzQzMjAs''@;'; put 'put ''MzQzMjIsMzQzMjMsMzQzMjQsMzQzMjUsMzQzMjcsMzQzMjgsMzQzMjksMzQzMzAsMzQzMzEsMzQzMzIsMzQzMzMsMzQzMzQsMzQzMzUsMzQzMzYsMzQzMzcsMzQzMzgsMzQzMzksMzQzNDAsMzQzNDEsMzQzNDIsMzQzNDQsMzQzNDYsMzQzNDcsMzQzNDgsMzQzNDksMzQzNTAsMzQzNTEsMzQz''@;'; put 'put ''NTIsMzQzNTMsMzQzNTQsMzQzNTUsMzQzNTYsMzQzNTcsMzQzNTgsMzQzNTksMzQzNjEsMzQzNjIsMzQzNjMsMzQzNjUsMzQzNjYsMzQzNjcsMzQzNjgsMzQzNjksMzQzNzAsMzQzNzEsMzQzNzIsMzQzNzMsMzQzNzQsMzQzNzUsMzQzNzYsMzQzNzcsMzQzNzgsMzQzNzksMzQzODAsMzQzODYs''@;'; put 'put ''MzQzODcsMzQzODksMzQzOTAsMzQzOTEsMzQzOTIsMzQzOTMsMzQzOTUsMzQzOTYsMzQzOTcsMzQzOTksMzQ0MDAsMzQ0MDEsMzQ0MDMsMzQ0MDQsMzQ0MDUsMzQ0MDYsMzQ0MDcsMzQ0MDgsMzQ0MDksMzQ0MTAsMjk1NDksMjUzNzQsMzY0MjcsMzYzNjcsMzI5NzQsMzM0OTIsMjUyNjAsMjE0''@;'; put 'put ''ODgsMjc4ODgsMzcyMTQsMjI4MjYsMjQ1NzcsMjc3NjAsMjIzNDksMjU2NzQsMzYxMzgsMzAyNTEsMjgzOTMsMjIzNjMsMjcyNjQsMzAxOTIsMjg1MjUsMzU4ODUsMzU4NDgsMjIzNzQsMjc2MzEsMzQ5NjIsMzA4OTksMjU1MDYsMjE0OTcsMjg4NDUsMjc3NDgsMjI2MTYsMjU2NDIsMjI1MzAs''@;'; put 'put ''MjY4NDgsMzMxNzksMjE3NzYsMzE5NTgsMjA1MDQsMzY1MzgsMjgxMDgsMzYyNTUsMjg5MDcsMjU0ODcsMjgwNTksMjgzNzIsMzI0ODYsMzM3OTYsMjY2OTEsMzY4NjcsMjgxMjAsMzg1MTgsMzU3NTIsMjI4NzEsMjkzMDUsMzQyNzYsMzMxNTAsMzAxNDAsMzU0NjYsMjY3OTksMjEwNzYsMzYz''@;'; put 'put ''ODYsMzgxNjEsMjU1NTIsMzkwNjQsMzY0MjAsMjE4ODQsMjAzMDcsMjYzNjcsMjIxNTksMjQ3ODksMjgwNTMsMjEwNTksMjM2MjUsMjI4MjUsMjgxNTUsMjI2MzUsM2U0LDI5OTgwLDI0Njg0LDMzMzAwLDMzMDk0LDI1MzYxLDI2NDY1LDM2ODM0LDMwNTIyLDM2MzM5LDM2MTQ4LDM4MDgxLDI0''@;'; put 'put ''MDg2LDIxMzgxLDIxNTQ4LDI4ODY3LDM0NDEzLDM0NDE1LDM0NDE2LDM0NDE4LDM0NDE5LDM0NDIwLDM0NDIxLDM0NDIyLDM0NDIzLDM0NDI0LDM0NDM1LDM0NDM2LDM0NDM3LDM0NDM4LDM0NDM5LDM0NDQwLDM0NDQxLDM0NDQ2LDM0NDQ3LDM0NDQ4LDM0NDQ5LDM0NDUwLDM0NDUyLDM0NDU0''@;'; put 'put ''LDM0NDU1LDM0NDU2LDM0NDU3LDM0NDU4LDM0NDU5LDM0NDYyLDM0NDYzLDM0NDY0LDM0NDY1LDM0NDY2LDM0NDY5LDM0NDcwLDM0NDc1LDM0NDc3LDM0NDc4LDM0NDgyLDM0NDgzLDM0NDg3LDM0NDg4LDM0NDg5LDM0NDkxLDM0NDkyLDM0NDkzLDM0NDk0LDM0NDk1LDM0NDk3LDM0NDk4LDM0''@;'; put 'put ''NDk5LDM0NTAxLDM0NTA0LDM0NTA4LDM0NTA5LDM0NTE0LDM0NTE1LDM0NTE3LDM0NTE4LDM0NTE5LDM0NTIyLDM0NTI0LDM0NTI1LDM0NTI4LDM0NTI5LDM0NTMwLDM0NTMxLDM0NTMzLDM0NTM0LDM0NTM1LDM0NTM2LDM0NTM4LDM0NTM5LDM0NTQwLDM0NTQzLDM0NTQ5LDM0NTUwLDM0NTUx''@;'; put 'put ''LDM0NTU0LDM0NTU1LDM0NTU2LDM0NTU3LDM0NTU5LDM0NTYxLDM0NTY0LDM0NTY1LDM0NTY2LDM0NTcxLDM0NTcyLDM0NTc0LDM0NTc1LDM0NTc2LDM0NTc3LDM0NTgwLDM0NTgyLDI3NzEyLDI0MzExLDIwNTcyLDIwMTQxLDI0MjM3LDI1NDAyLDMzMzUxLDM2ODkwLDI2NzA0LDM3MjMwLDMw''@;'; put 'put ''NjQzLDIxNTE2LDM4MTA4LDI0NDIwLDMxNDYxLDI2NzQyLDI1NDEzLDMxNTcwLDMyNDc5LDMwMTcxLDIwNTk5LDI1MjM3LDIyODM2LDM2ODc5LDIwOTg0LDMxMTcxLDMxMzYxLDIyMjcwLDI0NDY2LDM2ODg0LDI4MDM0LDIzNjQ4LDIyMzAzLDIxNTIwLDIwODIwLDI4MjM3LDIyMjQyLDI1NTEy''@;'; put 'put ''LDM5MDU5LDMzMTUxLDM0NTgxLDM1MTE0LDM2ODY0LDIxNTM0LDIzNjYzLDMzMjE2LDI1MzAyLDI1MTc2LDMzMDczLDQwNTAxLDM4NDY0LDM5NTM0LDM5NTQ4LDI2OTI1LDIyOTQ5LDI1Mjk5LDIxODIyLDI1MzY2LDIxNzAzLDM0NTIxLDI3OTY0LDIzMDQzLDI5OTI2LDM0OTcyLDI3NDk4LDIy''@;'; put 'put ''ODA2LDM1OTE2LDI0MzY3LDI4Mjg2LDI5NjA5LDM5MDM3LDIwMDI0LDI4OTE5LDIzNDM2LDMwODcxLDI1NDA1LDI2MjAyLDMwMzU4LDI0Nzc5LDIzNDUxLDIzMTEzLDE5OTc1LDMzMTA5LDI3NzU0LDI5NTc5LDIwMTI5LDI2NTA1LDMyNTkzLDI0NDQ4LDI2MTA2LDI2Mzk1LDI0NTM2LDIyOTE2''@;'; put 'put ''LDIzMDQxLDM0NTg1LDM0NTg3LDM0NTg5LDM0NTkxLDM0NTkyLDM0NTk2LDM0NTk4LDM0NTk5LDM0NjAwLDM0NjAyLDM0NjAzLDM0NjA0LDM0NjA1LDM0NjA3LDM0NjA4LDM0NjEwLDM0NjExLDM0NjEzLDM0NjE0LDM0NjE2LDM0NjE3LDM0NjE4LDM0NjIwLDM0NjIxLDM0NjI0LDM0NjI1LDM0''@;'; put 'put ''NjI2LDM0NjI3LDM0NjI4LDM0NjI5LDM0NjMwLDM0NjM0LDM0NjM1LDM0NjM3LDM0NjM5LDM0NjQwLDM0NjQxLDM0NjQyLDM0NjQ0LDM0NjQ1LDM0NjQ2LDM0NjQ4LDM0NjUwLDM0NjUxLDM0NjUyLDM0NjUzLDM0NjU0LDM0NjU1LDM0NjU3LDM0NjU4LDM0NjYyLDM0NjYzLDM0NjY0LDM0NjY1''@;'; put 'put ''LDM0NjY2LDM0NjY3LDM0NjY4LDM0NjY5LDM0NjcxLDM0NjczLDM0Njc0LDM0Njc1LDM0Njc3LDM0Njc5LDM0NjgwLDM0NjgxLDM0NjgyLDM0Njg3LDM0Njg4LDM0Njg5LDM0NjkyLDM0Njk0LDM0Njk1LDM0Njk3LDM0Njk4LDM0NzAwLDM0NzAyLDM0NzAzLDM0NzA0LDM0NzA1LDM0NzA2LDM0''@;'; put 'put ''NzA4LDM0NzA5LDM0NzEwLDM0NzEyLDM0NzEzLDM0NzE0LDM0NzE1LDM0NzE2LDM0NzE3LDM0NzE4LDM0NzIwLDM0NzIxLDM0NzIyLDM0NzIzLDM0NzI0LDI0MDEzLDI0NDk0LDIxMzYxLDM4ODg2LDM2ODI5LDI2NjkzLDIyMjYwLDIxODA3LDI0Nzk5LDIwMDI2LDI4NDkzLDMyNTAwLDMzNDc5''@;'; put 'put ''LDMzODA2LDIyOTk2LDIwMjU1LDIwMjY2LDIzNjE0LDMyNDI4LDI2NDEwLDM0MDc0LDIxNjE5LDMwMDMxLDMyOTYzLDIxODkwLDM5NzU5LDIwMzAxLDI4MjA1LDM1ODU5LDIzNTYxLDI0OTQ0LDIxMzU1LDMwMjM5LDI4MjAxLDM0NDQyLDI1OTkxLDM4Mzk1LDMyNDQxLDIxNTYzLDMxMjgzLDMy''@;'; put 'put ''MDEwLDM4MzgyLDIxOTg1LDMyNzA1LDI5OTM0LDI1MzczLDM0NTgzLDI4MDY1LDMxMzg5LDI1MTA1LDI2MDE3LDIxMzUxLDI1NTY5LDI3Nzc5LDI0MDQzLDIxNTk2LDM4MDU2LDIwMDQ0LDI3NzQ1LDM1ODIwLDIzNjI3LDI2MDgwLDMzNDM2LDI2NzkxLDIxNTY2LDIxNTU2LDI3NTk1LDI3NDk0''@;'; put 'put ''LDIwMTE2LDI1NDEwLDIxMzIwLDMzMzEwLDIwMjM3LDIwMzk4LDIyMzY2LDI1MDk4LDM4NjU0LDI2MjEyLDI5Mjg5LDIxMjQ3LDIxMTUzLDI0NzM1LDM1ODIzLDI2MTMyLDI5MDgxLDI2NTEyLDM1MTk5LDMwODAyLDMwNzE3LDI2MjI0LDIyMDc1LDIxNTYwLDM4MTc3LDI5MzA2LDM0NzI1LDM0''@;'; put 'put ''NzI2LDM0NzI3LDM0NzI5LDM0NzMwLDM0NzM0LDM0NzM2LDM0NzM3LDM0NzM4LDM0NzQwLDM0NzQyLDM0NzQzLDM0NzQ0LDM0NzQ1LDM0NzQ3LDM0NzQ4LDM0NzUwLDM0NzUxLDM0NzUzLDM0NzU0LDM0NzU1LDM0NzU2LDM0NzU3LDM0NzU5LDM0NzYwLDM0NzYxLDM0NzY0LDM0NzY1LDM0NzY2''@;'; put 'put ''LDM0NzY3LDM0NzY4LDM0NzcyLDM0NzczLDM0Nzc0LDM0Nzc1LDM0Nzc2LDM0Nzc3LDM0Nzc4LDM0NzgwLDM0NzgxLDM0NzgyLDM0NzgzLDM0Nzg1LDM0Nzg2LDM0Nzg3LDM0Nzg4LDM0NzkwLDM0NzkxLDM0NzkyLDM0NzkzLDM0Nzk1LDM0Nzk2LDM0Nzk3LDM0Nzk5LDM0ODAwLDM0ODAxLDM0''@;'; put 'put ''ODAyLDM0ODAzLDM0ODA0LDM0ODA1LDM0ODA2LDM0ODA3LDM0ODA4LDM0ODEwLDM0ODExLDM0ODEyLDM0ODEzLDM0ODE1LDM0ODE2LDM0ODE3LDM0ODE4LDM0ODIwLDM0ODIxLDM0ODIyLDM0ODIzLDM0ODI0LDM0ODI1LDM0ODI3LDM0ODI4LDM0ODI5LDM0ODMwLDM0ODMxLDM0ODMyLDM0ODMz''@;'; put 'put ''LDM0ODM0LDM0ODM2LDM0ODM5LDM0ODQwLDM0ODQxLDM0ODQyLDM0ODQ0LDM0ODQ1LDM0ODQ2LDM0ODQ3LDM0ODQ4LDM0ODUxLDMxMjMyLDI0Njg3LDI0MDc2LDI0NzEzLDMzMTgxLDIyODA1LDI0Nzk2LDI5MDYwLDI4OTExLDI4MzMwLDI3NzI4LDI5MzEyLDI3MjY4LDM0OTg5LDI0MTA5LDIw''@;'; put 'put ''MDY0LDIzMjE5LDIxOTE2LDM4MTE1LDI3OTI3LDMxOTk1LDM4NTUzLDI1MTAzLDMyNDU0LDMwNjA2LDM0NDMwLDIxMjgzLDM4Njg2LDM2NzU4LDI2MjQ3LDIzNzc3LDIwMzg0LDI5NDIxLDE5OTc5LDIxNDE0LDIyNzk5LDIxNTIzLDI1NDcyLDM4MTg0LDIwODA4LDIwMTg1LDQwMDkyLDMyNDIw''@;'; put 'put ''LDIxNjg4LDM2MTMyLDM0OTAwLDMzMzM1LDM4Mzg2LDI4MDQ2LDI0MzU4LDIzMjQ0LDI2MTc0LDM4NTA1LDI5NjE2LDI5NDg2LDIxNDM5LDMzMTQ2LDM5MzAxLDMyNjczLDIzNDY2LDM4NTE5LDM4NDgwLDMyNDQ3LDMwNDU2LDIxNDEwLDM4MjYyLDM5MzIxLDMxNjY1LDM1MTQwLDI4MjQ4LDIw''@;'; put 'put ''MDY1LDMyNzI0LDMxMDc3LDM1ODE0LDI0ODE5LDIxNzA5LDIwMTM5LDM5MDMzLDI0MDU1LDI3MjMzLDIwNjg3LDIxNTIxLDM1OTM3LDMzODMxLDMwODEzLDM4NjYwLDIxMDY2LDIxNzQyLDIyMTc5LDM4MTQ0LDI4MDQwLDIzNDc3LDI4MTAyLDI2MTk1LDM0ODUyLDM0ODUzLDM0ODU0LDM0ODU1''@;'; put 'put ''LDM0ODU2LDM0ODU3LDM0ODU4LDM0ODU5LDM0ODYwLDM0ODYxLDM0ODYyLDM0ODYzLDM0ODY0LDM0ODY1LDM0ODY3LDM0ODY4LDM0ODY5LDM0ODcwLDM0ODcxLDM0ODcyLDM0ODc0LDM0ODc1LDM0ODc3LDM0ODc4LDM0ODc5LDM0ODgxLDM0ODgyLDM0ODgzLDM0ODg2LDM0ODg3LDM0ODg4LDM0''@;'; put 'put ''ODg5LDM0ODkwLDM0ODkxLDM0ODk0LDM0ODk1LDM0ODk2LDM0ODk3LDM0ODk4LDM0ODk5LDM0OTAxLDM0OTAyLDM0OTA0LDM0OTA2LDM0OTA3LDM0OTA4LDM0OTA5LDM0OTEwLDM0OTExLDM0OTEyLDM0OTE4LDM0OTE5LDM0OTIyLDM0OTI1LDM0OTI3LDM0OTI5LDM0OTMxLDM0OTMyLDM0OTMz''@;'; put 'put ''LDM0OTM0LDM0OTM2LDM0OTM3LDM0OTM4LDM0OTM5LDM0OTQwLDM0OTQ0LDM0OTQ3LDM0OTUwLDM0OTUxLDM0OTUzLDM0OTU0LDM0OTU2LDM0OTU4LDM0OTU5LDM0OTYwLDM0OTYxLDM0OTYzLDM0OTY0LDM0OTY1LDM0OTY3LDM0OTY4LDM0OTY5LDM0OTcwLDM0OTcxLDM0OTczLDM0OTc0LDM0''@;'; put 'put ''OTc1LDM0OTc2LDM0OTc3LDM0OTc5LDM0OTgxLDM0OTgyLDM0OTgzLDM0OTg0LDM0OTg1LDM0OTg2LDIzNTY3LDIzMzg5LDI2NjU3LDMyOTE4LDIxODgwLDMxNTA1LDI1OTI4LDI2OTY0LDIwMTIzLDI3NDYzLDM0NjM4LDM4Nzk1LDIxMzI3LDI1Mzc1LDI1NjU4LDM3MDM0LDI2MDEyLDMyOTYx''@;'; put 'put ''LDM1ODU2LDIwODg5LDI2ODAwLDIxMzY4LDM0ODA5LDI1MDMyLDI3ODQ0LDI3ODk5LDM1ODc0LDIzNjMzLDM0MjE4LDMzNDU1LDM4MTU2LDI3NDI3LDM2NzYzLDI2MDMyLDI0NTcxLDI0NTE1LDIwNDQ5LDM0ODg1LDI2MTQzLDMzMTI1LDI5NDgxLDI0ODI2LDIwODUyLDIxMDA5LDIyNDExLDI0''@;'; put 'put ''NDE4LDM3MDI2LDM0ODkyLDM3MjY2LDI0MTg0LDI2NDQ3LDI0NjE1LDIyOTk1LDIwODA0LDIwOTgyLDMzMDE2LDIxMjU2LDI3NzY5LDM4NTk2LDI5MDY2LDIwMjQxLDIwNDYyLDMyNjcwLDI2NDI5LDIxOTU3LDM4MTUyLDMxMTY4LDM0OTY2LDMyNDgzLDIyNjg3LDI1MTAwLDM4NjU2LDM0Mzk0''@;'; put 'put ''LDIyMDQwLDM5MDM1LDI0NDY0LDM1NzY4LDMzOTg4LDM3MjA3LDIxNDY1LDI2MDkzLDI0MjA3LDMwMDQ0LDI0Njc2LDMyMTEwLDIzMTY3LDMyNDkwLDMyNDkzLDM2NzEzLDIxOTI3LDIzNDU5LDI0NzQ4LDI2MDU5LDI5NTcyLDM0OTg4LDM0OTkwLDM0OTkxLDM0OTkyLDM0OTk0LDM0OTk1LDM0''@;'; put 'put ''OTk2LDM0OTk3LDM0OTk4LDM1ZTMsMzUwMDEsMzUwMDIsMzUwMDMsMzUwMDUsMzUwMDYsMzUwMDcsMzUwMDgsMzUwMTEsMzUwMTIsMzUwMTUsMzUwMTYsMzUwMTgsMzUwMTksMzUwMjAsMzUwMjEsMzUwMjMsMzUwMjQsMzUwMjUsMzUwMjcsMzUwMzAsMzUwMzEsMzUwMzQsMzUwMzUsMzUwMzYs''@;'; put 'put ''MzUwMzcsMzUwMzgsMzUwNDAsMzUwNDEsMzUwNDYsMzUwNDcsMzUwNDksMzUwNTAsMzUwNTEsMzUwNTIsMzUwNTMsMzUwNTQsMzUwNTUsMzUwNTgsMzUwNjEsMzUwNjIsMzUwNjMsMzUwNjYsMzUwNjcsMzUwNjksMzUwNzEsMzUwNzIsMzUwNzMsMzUwNzUsMzUwNzYsMzUwNzcsMzUwNzgsMzUw''@;'; put 'put ''NzksMzUwODAsMzUwODEsMzUwODMsMzUwODQsMzUwODUsMzUwODYsMzUwODcsMzUwODksMzUwOTIsMzUwOTMsMzUwOTQsMzUwOTUsMzUwOTYsMzUxMDAsMzUxMDEsMzUxMDIsMzUxMDMsMzUxMDQsMzUxMDYsMzUxMDcsMzUxMDgsMzUxMTAsMzUxMTEsMzUxMTIsMzUxMTMsMzUxMTYsMzUxMTcs''@;'; put 'put ''MzUxMTgsMzUxMTksMzUxMjEsMzUxMjIsMzUxMjMsMzUxMjUsMzUxMjcsMzY4NzMsMzAzMDcsMzA1MDUsMzI0NzQsMzg3NzIsMzQyMDMsMjMzOTgsMzEzNDgsMzg2MzQsMzQ4ODAsMjExOTUsMjkwNzEsMjQ0OTAsMjYwOTIsMzU4MTAsMjM1NDcsMzk1MzUsMjQwMzMsMjc1MjksMjc3MzksMzU3''@;'; put 'put ''NTcsMzU3NTksMzY4NzQsMzY4MDUsMjEzODcsMjUyNzYsNDA0ODYsNDA0OTMsMjE1NjgsMjAwMTEsMzM0NjksMjkyNzMsMzQ0NjAsMjM4MzAsMzQ5MDUsMjgwNzksMzg1OTcsMjE3MTMsMjAxMjIsMzU3NjYsMjg5MzcsMjE2OTMsMzg0MDksMjg4OTUsMjgxNTMsMzA0MTYsMjAwMDUsMzA3NDAs''@;'; put 'put ''MzQ1NzgsMjM3MjEsMjQzMTAsMzUzMjgsMzkwNjgsMzg0MTQsMjg4MTQsMjc4MzksMjI4NTIsMjU1MTMsMzA1MjQsMzQ4OTMsMjg0MzYsMzMzOTUsMjI1NzYsMjkxNDEsMjEzODgsMzA3NDYsMzg1OTMsMjE3NjEsMjQ0MjIsMjg5NzYsMjM0NzYsMzU4NjYsMzk1NjQsMjc1MjMsMjI4MzAsNDA0''@;'; put 'put ''OTUsMzEyMDcsMjY0NzIsMjUxOTYsMjAzMzUsMzAxMTMsMzI2NTAsMjc5MTUsMzg0NTEsMjc2ODcsMjAyMDgsMzAxNjIsMjA4NTksMjY2NzksMjg0NzgsMzY5OTIsMzMxMzYsMjI5MzQsMjk4MTQsMzUxMjgsMzUxMjksMzUxMzAsMzUxMzEsMzUxMzIsMzUxMzMsMzUxMzQsMzUxMzUsMzUxMzYs''@;'; put 'put ''MzUxMzgsMzUxMzksMzUxNDEsMzUxNDIsMzUxNDMsMzUxNDQsMzUxNDUsMzUxNDYsMzUxNDcsMzUxNDgsMzUxNDksMzUxNTAsMzUxNTEsMzUxNTIsMzUxNTMsMzUxNTQsMzUxNTUsMzUxNTYsMzUxNTcsMzUxNTgsMzUxNTksMzUxNjAsMzUxNjEsMzUxNjIsMzUxNjMsMzUxNjQsMzUxNjUsMzUx''@;'; put 'put ''NjgsMzUxNjksMzUxNzAsMzUxNzEsMzUxNzIsMzUxNzMsMzUxNzUsMzUxNzYsMzUxNzcsMzUxNzgsMzUxNzksMzUxODAsMzUxODEsMzUxODIsMzUxODMsMzUxODQsMzUxODUsMzUxODYsMzUxODcsMzUxODgsMzUxODksMzUxOTAsMzUxOTEsMzUxOTIsMzUxOTMsMzUxOTQsMzUxOTYsMzUxOTcs''@;'; put 'put ''MzUxOTgsMzUyMDAsMzUyMDIsMzUyMDQsMzUyMDUsMzUyMDcsMzUyMDgsMzUyMDksMzUyMTAsMzUyMTEsMzUyMTIsMzUyMTMsMzUyMTQsMzUyMTUsMzUyMTYsMzUyMTcsMzUyMTgsMzUyMTksMzUyMjAsMzUyMjEsMzUyMjIsMzUyMjMsMzUyMjQsMzUyMjUsMzUyMjYsMzUyMjcsMzUyMjgsMzUy''@;'; put 'put ''MjksMzUyMzAsMzUyMzEsMzUyMzIsMzUyMzMsMjU2NzEsMjM1OTEsMzY5NjUsMzEzNzcsMzU4NzUsMjMwMDIsMjE2NzYsMzMyODAsMzM2NDcsMzUyMDEsMzI3NjgsMjY5MjgsMjIwOTQsMzI4MjIsMjkyMzksMzczMjYsMjA5MTgsMjAwNjMsMzkwMjksMjU0OTQsMTk5OTQsMjE0OTQsMjYzNTUs''@;'; put 'put ''MzMwOTksMjI4MTIsMjgwODIsMTk5NjgsMjI3NzcsMjEzMDcsMjU1NTgsMzgxMjksMjAzODEsMjAyMzQsMzQ5MTUsMzkwNTYsMjI4MzksMzY5NTEsMzEyMjcsMjAyMDIsMzMwMDgsMzAwOTcsMjc3NzgsMjM0NTIsMjMwMTYsMjQ0MTMsMjY4ODUsMzQ0MzMsMjA1MDYsMjQwNTAsMjAwNTcsMzA2''@;'; put 'put ''OTEsMjAxOTcsMzM0MDIsMjUyMzMsMjYxMzEsMzcwMDksMjM2NzMsMjAxNTksMjQ0NDEsMzMyMjIsMzY5MjAsMzI5MDAsMzAxMjMsMjAxMzQsMzUwMjgsMjQ4NDcsMjc1ODksMjQ1MTgsMjAwNDEsMzA0MTAsMjgzMjIsMzU4MTEsMzU3NTgsMzU4NTAsMzU3OTMsMjQzMjIsMzI3NjQsMzI3MTYs''@;'; put 'put ''MzI0NjIsMzM1ODksMzM2NDMsMjIyNDAsMjc1NzUsMzg4OTksMzg0NTIsMjMwMzUsMjE1MzUsMzgxMzQsMjgxMzksMjM0OTMsMzkyNzgsMjM2MDksMjQzNDEsMzg1NDQsMzUyMzQsMzUyMzUsMzUyMzYsMzUyMzcsMzUyMzgsMzUyMzksMzUyNDAsMzUyNDEsMzUyNDIsMzUyNDMsMzUyNDQsMzUy''@;'; put 'put ''NDUsMzUyNDYsMzUyNDcsMzUyNDgsMzUyNDksMzUyNTAsMzUyNTEsMzUyNTIsMzUyNTMsMzUyNTQsMzUyNTUsMzUyNTYsMzUyNTcsMzUyNTgsMzUyNTksMzUyNjAsMzUyNjEsMzUyNjIsMzUyNjMsMzUyNjQsMzUyNjcsMzUyNzcsMzUyODMsMzUyODQsMzUyODUsMzUyODcsMzUyODgsMzUyODks''@;'; put 'put ''MzUyOTEsMzUyOTMsMzUyOTUsMzUyOTYsMzUyOTcsMzUyOTgsMzUzMDAsMzUzMDMsMzUzMDQsMzUzMDUsMzUzMDYsMzUzMDgsMzUzMDksMzUzMTAsMzUzMTIsMzUzMTMsMzUzMTQsMzUzMTYsMzUzMTcsMzUzMTgsMzUzMTksMzUzMjAsMzUzMjEsMzUzMjIsMzUzMjMsMzUzMjQsMzUzMjUsMzUz''@;'; put 'put ''MjYsMzUzMjcsMzUzMjksMzUzMzAsMzUzMzEsMzUzMzIsMzUzMzMsMzUzMzQsMzUzMzYsMzUzMzcsMzUzMzgsMzUzMzksMzUzNDAsMzUzNDEsMzUzNDIsMzUzNDMsMzUzNDQsMzUzNDUsMzUzNDYsMzUzNDcsMzUzNDgsMzUzNDksMzUzNTAsMzUzNTEsMzUzNTIsMzUzNTMsMzUzNTQsMzUzNTUs''@;'; put 'put ''MzUzNTYsMzUzNTcsMjEzNjAsMzM1MjEsMjcxODUsMjMxNTYsNDA1NjAsMjQyMTIsMzI1NTIsMzM3MjEsMzM4MjgsMzM4MjksMzM2MzksMzQ2MzEsMzY4MTQsMzYxOTQsMzA0MDgsMjQ0MzMsMzkwNjIsMzA4MjgsMjYxNDQsMjE3MjcsMjUzMTcsMjAzMjMsMzMyMTksMzAxNTIsMjQyNDgsMzg2''@;'; put 'put ''MDUsMzYzNjIsMzQ1NTMsMjE2NDcsMjc4OTEsMjgwNDQsMjc3MDQsMjQ3MDMsMjExOTEsMjk5OTIsMjQxODksMjAyNDgsMjQ3MzYsMjQ1NTEsMjM1ODgsMzAwMDEsMzcwMzgsMzgwODAsMjkzNjksMjc4MzMsMjgyMTYsMzcxOTMsMjYzNzcsMjE0NTEsMjE0OTEsMjAzMDUsMzczMjEsMzU4MjUs''@;'; put 'put ''MjE0NDgsMjQxODgsMzY4MDIsMjgxMzIsMjAxMTAsMzA0MDIsMjcwMTQsMzQzOTgsMjQ4NTgsMzMyODYsMjAzMTMsMjA0NDYsMzY5MjYsNDAwNjAsMjQ4NDEsMjgxODksMjgxODAsMzg1MzMsMjAxMDQsMjMwODksMzg2MzIsMTk5ODIsMjM2NzksMzExNjEsMjM0MzEsMzU4MjEsMzI3MDEsMjk1''@;'; put 'put ''NzcsMjI0OTUsMzM0MTksMzcwNTcsMjE1MDUsMzY5MzUsMjE5NDcsMjM3ODYsMjQ0ODEsMjQ4NDAsMjc0NDIsMjk0MjUsMzI5NDYsMzU0NjUsMzUzNTgsMzUzNTksMzUzNjAsMzUzNjEsMzUzNjIsMzUzNjMsMzUzNjQsMzUzNjUsMzUzNjYsMzUzNjcsMzUzNjgsMzUzNjksMzUzNzAsMzUzNzEs''@;'; put 'put ''MzUzNzIsMzUzNzMsMzUzNzQsMzUzNzUsMzUzNzYsMzUzNzcsMzUzNzgsMzUzNzksMzUzODAsMzUzODEsMzUzODIsMzUzODMsMzUzODQsMzUzODUsMzUzODYsMzUzODcsMzUzODgsMzUzODksMzUzOTEsMzUzOTIsMzUzOTMsMzUzOTQsMzUzOTUsMzUzOTYsMzUzOTcsMzUzOTgsMzUzOTksMzU0''@;'; put 'put ''MDEsMzU0MDIsMzU0MDMsMzU0MDQsMzU0MDUsMzU0MDYsMzU0MDcsMzU0MDgsMzU0MDksMzU0MTAsMzU0MTEsMzU0MTIsMzU0MTMsMzU0MTQsMzU0MTUsMzU0MTYsMzU0MTcsMzU0MTgsMzU0MTksMzU0MjAsMzU0MjEsMzU0MjIsMzU0MjMsMzU0MjQsMzU0MjUsMzU0MjYsMzU0MjcsMzU0Mjgs''@;'; put 'put ''MzU0MjksMzU0MzAsMzU0MzEsMzU0MzIsMzU0MzMsMzU0MzQsMzU0MzUsMzU0MzYsMzU0MzcsMzU0MzgsMzU0MzksMzU0NDAsMzU0NDEsMzU0NDIsMzU0NDMsMzU0NDQsMzU0NDUsMzU0NDYsMzU0NDcsMzU0NDgsMzU0NTAsMzU0NTEsMzU0NTIsMzU0NTMsMzU0NTQsMzU0NTUsMzU0NTYsMjgw''@;'; put 'put ''MjAsMjM1MDcsMzUwMjksMzkwNDQsMzU5NDcsMzk1MzMsNDA0OTksMjgxNzAsMjA5MDAsMjA4MDMsMjI0MzUsMzQ5NDUsMjE0MDcsMjU1ODgsMzY3NTcsMjIyNTMsMjE1OTIsMjIyNzgsMjk1MDMsMjgzMDQsMzI1MzYsMzY4MjgsMzM0ODksMjQ4OTUsMjQ2MTYsMzg0OTgsMjYzNTIsMzI0MjIs''@;'; put 'put ''MzYyMzQsMzYyOTEsMzgwNTMsMjM3MzEsMzE5MDgsMjYzNzYsMjQ3NDIsMzg0MDUsMzI3OTIsMjAxMTMsMzcwOTUsMjEyNDgsMzg1MDQsMjA4MDEsMzY4MTYsMzQxNjQsMzcyMTMsMjYxOTcsMzg5MDEsMjMzODEsMjEyNzcsMzA3NzYsMjY0MzQsMjY2ODUsMjE3MDUsMjg3OTgsMjM0NzIsMzY3''@;'; put 'put ''MzMsMjA4NzcsMjIzMTIsMjE2ODEsMjU4NzQsMjYyNDIsMzYxOTAsMzYxNjMsMzMwMzksMzM5MDAsMzY5NzMsMzE5NjcsMjA5OTEsMzQyOTksMjY1MzEsMjYwODksMjg1NzcsMzQ0NjgsMzY0ODEsMjIxMjIsMzY4OTYsMzAzMzgsMjg3OTAsMjkxNTcsMzYxMzEsMjUzMjEsMjEwMTcsMjc5MDEs''@;'; put 'put ''MzYxNTYsMjQ1OTAsMjI2ODYsMjQ5NzQsMjYzNjYsMzYxOTIsMjUxNjYsMjE5MzksMjgxOTUsMjY0MTMsMzY3MTEsMzU0NTcsMzU0NTgsMzU0NTksMzU0NjAsMzU0NjEsMzU0NjIsMzU0NjMsMzU0NjQsMzU0NjcsMzU0NjgsMzU0NjksMzU0NzAsMzU0NzEsMzU0NzIsMzU0NzMsMzU0NzQsMzU0''@;'; put 'put ''NzYsMzU0NzcsMzU0NzgsMzU0NzksMzU0ODAsMzU0ODEsMzU0ODIsMzU0ODMsMzU0ODQsMzU0ODUsMzU0ODYsMzU0ODcsMzU0ODgsMzU0ODksMzU0OTAsMzU0OTEsMzU0OTIsMzU0OTMsMzU0OTQsMzU0OTUsMzU0OTYsMzU0OTcsMzU0OTgsMzU0OTksMzU1MDAsMzU1MDEsMzU1MDIsMzU1MDMs''@;'; put 'put ''MzU1MDQsMzU1MDUsMzU1MDYsMzU1MDcsMzU1MDgsMzU1MDksMzU1MTAsMzU1MTEsMzU1MTIsMzU1MTMsMzU1MTQsMzU1MTUsMzU1MTYsMzU1MTcsMzU1MTgsMzU1MTksMzU1MjAsMzU1MjEsMzU1MjIsMzU1MjMsMzU1MjQsMzU1MjUsMzU1MjYsMzU1MjcsMzU1MjgsMzU1MjksMzU1MzAsMzU1''@;'; put 'put ''MzEsMzU1MzIsMzU1MzMsMzU1MzQsMzU1MzUsMzU1MzYsMzU1MzcsMzU1MzgsMzU1MzksMzU1NDAsMzU1NDEsMzU1NDIsMzU1NDMsMzU1NDQsMzU1NDUsMzU1NDYsMzU1NDcsMzU1NDgsMzU1NDksMzU1NTAsMzU1NTEsMzU1NTIsMzU1NTMsMzU1NTQsMzU1NTUsMzgxMTMsMzgzOTIsMzA1MDQs''@;'; put 'put ''MjY2MjksMjcwNDgsMjE2NDMsMjAwNDUsMjg4NTYsMzU3ODQsMjU2ODgsMjU5OTUsMjM0MjksMzEzNjQsMjA1MzgsMjM1MjgsMzA2NTEsMjc2MTcsMzU0NDksMzE4OTYsMjc4MzgsMzA0MTUsMjYwMjUsMzY3NTksMjM4NTMsMjM2MzcsMzQzNjAsMjY2MzIsMjEzNDQsMjUxMTIsMzE0NDksMjgy''@;'; put 'put ''NTEsMzI1MDksMjcxNjcsMzE0NTYsMjQ0MzIsMjg0NjcsMjQzNTIsMjU0ODQsMjgwNzIsMjY0NTQsMTk5NzYsMjQwODAsMzYxMzQsMjAxODMsMzI5NjAsMzAyNjAsMzg1NTYsMjUzMDcsMjYxNTcsMjUyMTQsMjc4MzYsMzYyMTMsMjkwMzEsMzI2MTcsMjA4MDYsMzI5MDMsMjE0ODQsMzY5NzQs''@;'; put 'put ''MjUyNDAsMjE3NDYsMzQ1NDQsMzY3NjEsMzI3NzMsMzgxNjcsMzQwNzEsMzY4MjUsMjc5OTMsMjk2NDUsMjYwMTUsMzA0OTUsMjk5NTYsMzA3NTksMzMyNzUsMzYxMjYsMzgwMjQsMjAzOTAsMjY1MTcsMzAxMzcsMzU3ODYsMzg2NjMsMjUzOTEsMzgyMTUsMzg0NTMsMzM5NzYsMjUzNzksMzA1''@;'; put 'put ''MjksMjQ0NDksMjk0MjQsMjAxMDUsMjQ1OTYsMjU5NzIsMjUzMjcsMjc0OTEsMjU5MTksMzU1NTYsMzU1NTcsMzU1NTgsMzU1NTksMzU1NjAsMzU1NjEsMzU1NjIsMzU1NjMsMzU1NjQsMzU1NjUsMzU1NjYsMzU1NjcsMzU1NjgsMzU1NjksMzU1NzAsMzU1NzEsMzU1NzIsMzU1NzMsMzU1NzQs''@;'; put 'put ''MzU1NzUsMzU1NzYsMzU1NzcsMzU1NzgsMzU1NzksMzU1ODAsMzU1ODEsMzU1ODIsMzU1ODMsMzU1ODQsMzU1ODUsMzU1ODYsMzU1ODcsMzU1ODgsMzU1ODksMzU1OTAsMzU1OTIsMzU1OTMsMzU1OTQsMzU1OTUsMzU1OTYsMzU1OTcsMzU1OTgsMzU1OTksMzU2MDAsMzU2MDEsMzU2MDIsMzU2''@;'; put 'put ''MDMsMzU2MDQsMzU2MDUsMzU2MDYsMzU2MDcsMzU2MDgsMzU2MDksMzU2MTAsMzU2MTEsMzU2MTIsMzU2MTMsMzU2MTQsMzU2MTUsMzU2MTYsMzU2MTcsMzU2MTgsMzU2MTksMzU2MjAsMzU2MjEsMzU2MjMsMzU2MjQsMzU2MjUsMzU2MjYsMzU2MjcsMzU2MjgsMzU2MjksMzU2MzAsMzU2MzEs''@;'; put 'put ''MzU2MzIsMzU2MzMsMzU2MzQsMzU2MzUsMzU2MzYsMzU2MzcsMzU2MzgsMzU2MzksMzU2NDAsMzU2NDEsMzU2NDIsMzU2NDMsMzU2NDQsMzU2NDUsMzU2NDYsMzU2NDcsMzU2NDgsMzU2NDksMzU2NTAsMzU2NTEsMzU2NTIsMzU2NTMsMjQxMDMsMzAxNTEsMzcwNzMsMzU3NzcsMzM0MzcsMjY1''@;'; put 'put ''MjUsMjU5MDMsMjE1NTMsMzQ1ODQsMzA2OTMsMzI5MzAsMzMwMjYsMjc3MTMsMjAwNDMsMzI0NTUsMzI4NDQsMzA0NTIsMjY4OTMsMjc1NDIsMjUxOTEsMjA1NDAsMjAzNTYsMjIzMzYsMjUzNTEsMjc0OTAsMzYyODYsMjE0ODIsMjYwODgsMzI0NDAsMjQ1MzUsMjUzNzAsMjU1MjcsMzMyNjcs''@;'; put 'put ''MzMyNjgsMzI2MjIsMjQwOTIsMjM3NjksMjEwNDYsMjYyMzQsMzEyMDksMzEyNTgsMzYxMzYsMjg4MjUsMzAxNjQsMjgzODIsMjc4MzUsMzEzNzgsMjAwMTMsMzA0MDUsMjQ1NDQsMzgwNDcsMzQ5MzUsMzI0NTYsMzExODEsMzI5NTksMzczMjUsMjAyMTAsMjAyNDcsMzMzMTEsMjE2MDgsMjQw''@;'; put 'put ''MzAsMjc5NTQsMzU3ODgsMzE5MDksMzY3MjQsMzI5MjAsMjQwOTAsMjE2NTAsMzAzODUsMjM0NDksMjYxNzIsMzk1ODgsMjk2NjQsMjY2NjYsMzQ1MjMsMjY0MTcsMjk0ODIsMzU4MzIsMzU4MDMsMzY4ODAsMzE0ODEsMjg4OTEsMjkwMzgsMjUyODQsMzA2MzMsMjIwNjUsMjAwMjcsMzM4Nzks''@;'; put 'put ''MjY2MDksMjExNjEsMzQ0OTYsMzYxNDIsMzgxMzYsMzE1NjksMzU2NTQsMzU2NTUsMzU2NTYsMzU2NTcsMzU2NTgsMzU2NTksMzU2NjAsMzU2NjEsMzU2NjIsMzU2NjMsMzU2NjQsMzU2NjUsMzU2NjYsMzU2NjcsMzU2NjgsMzU2NjksMzU2NzAsMzU2NzEsMzU2NzIsMzU2NzMsMzU2NzQsMzU2''@;'; put 'put ''NzUsMzU2NzYsMzU2NzcsMzU2NzgsMzU2NzksMzU2ODAsMzU2ODEsMzU2ODIsMzU2ODMsMzU2ODQsMzU2ODUsMzU2ODcsMzU2ODgsMzU2ODksMzU2OTAsMzU2OTEsMzU2OTMsMzU2OTQsMzU2OTUsMzU2OTYsMzU2OTcsMzU2OTgsMzU2OTksMzU3MDAsMzU3MDEsMzU3MDIsMzU3MDMsMzU3MDQs''@;'; put 'put ''MzU3MDUsMzU3MDYsMzU3MDcsMzU3MDgsMzU3MDksMzU3MTAsMzU3MTEsMzU3MTIsMzU3MTMsMzU3MTQsMzU3MTUsMzU3MTYsMzU3MTcsMzU3MTgsMzU3MTksMzU3MjAsMzU3MjEsMzU3MjIsMzU3MjMsMzU3MjQsMzU3MjUsMzU3MjYsMzU3MjcsMzU3MjgsMzU3MjksMzU3MzAsMzU3MzEsMzU3''@;'; put 'put ''MzIsMzU3MzMsMzU3MzQsMzU3MzUsMzU3MzYsMzU3MzcsMzU3MzgsMzU3MzksMzU3NDAsMzU3NDEsMzU3NDIsMzU3NDMsMzU3NTYsMzU3NjEsMzU3NzEsMzU3ODMsMzU3OTIsMzU4MTgsMzU4NDksMzU4NzAsMjAzMDMsMjc4ODAsMzEwNjksMzk1NDcsMjUyMzUsMjkyMjYsMjUzNDEsMTk5ODcs''@;'; put 'put ''MzA3NDIsMzY3MTYsMjU3NzYsMzYxODYsMzE2ODYsMjY3MjksMjQxOTYsMzUwMTMsMjI5MTgsMjU3NTgsMjI3NjYsMjkzNjYsMjY4OTQsMzgxODEsMzY4NjEsMzYxODQsMjIzNjgsMzI1MTIsMzU4NDYsMjA5MzQsMjU0MTcsMjUzMDUsMjEzMzEsMjY3MDAsMjk3MzAsMzM1MzcsMzcxOTYsMjE4''@;'; put 'put ''MjgsMzA1MjgsMjg3OTYsMjc5NzgsMjA4NTcsMjE2NzIsMzYxNjQsMjMwMzksMjgzNjMsMjgxMDAsMjMzODgsMzIwNDMsMjAxODAsMzE4NjksMjgzNzEsMjMzNzYsMzMyNTgsMjgxNzMsMjMzODMsMzk2ODMsMjY4MzcsMzYzOTQsMjM0NDcsMzI1MDgsMjQ2MzUsMzI0MzcsMzcwNDksMzYyMDgs''@;'; put 'put ''MjI4NjMsMjU1NDksMzExOTksMzYyNzUsMjEzMzAsMjYwNjMsMzEwNjIsMzU3ODEsMzg0NTksMzI0NTIsMzgwNzUsMzIzODYsMjIwNjgsMzcyNTcsMjYzNjgsMzI2MTgsMjM1NjIsMzY5ODEsMjYxNTIsMjQwMzgsMjAzMDQsMjY1OTAsMjA1NzAsMjAzMTYsMjIzNTIsMjQyMzEsNTk0MDgsNTk0''@;'; put 'put ''MDksNTk0MTAsNTk0MTEsNTk0MTIsMzU4OTYsMzU4OTcsMzU4OTgsMzU4OTksMzU5MDAsMzU5MDEsMzU5MDIsMzU5MDMsMzU5MDQsMzU5MDYsMzU5MDcsMzU5MDgsMzU5MDksMzU5MTIsMzU5MTQsMzU5MTUsMzU5MTcsMzU5MTgsMzU5MTksMzU5MjAsMzU5MjEsMzU5MjIsMzU5MjMsMzU5MjQs''@;'; put 'put ''MzU5MjYsMzU5MjcsMzU5MjgsMzU5MjksMzU5MzEsMzU5MzIsMzU5MzMsMzU5MzQsMzU5MzUsMzU5MzYsMzU5MzksMzU5NDAsMzU5NDEsMzU5NDIsMzU5NDMsMzU5NDQsMzU5NDUsMzU5NDgsMzU5NDksMzU5NTAsMzU5NTEsMzU5NTIsMzU5NTMsMzU5NTQsMzU5NTYsMzU5NTcsMzU5NTgsMzU5''@;'; put 'put ''NTksMzU5NjMsMzU5NjQsMzU5NjUsMzU5NjYsMzU5NjcsMzU5NjgsMzU5NjksMzU5NzEsMzU5NzIsMzU5NzQsMzU5NzUsMzU5NzYsMzU5NzksMzU5ODEsMzU5ODIsMzU5ODMsMzU5ODQsMzU5ODUsMzU5ODYsMzU5ODcsMzU5ODksMzU5OTAsMzU5OTEsMzU5OTMsMzU5OTQsMzU5OTUsMzU5OTYs''@;'; put 'put ''MzU5OTcsMzU5OTgsMzU5OTksMzZlMywzNjAwMSwzNjAwMiwzNjAwMywzNjAwNCwzNjAwNSwzNjAwNiwzNjAwNywzNjAwOCwzNjAwOSwzNjAxMCwzNjAxMSwzNjAxMiwzNjAxMywyMDEwOSwxOTk4MCwyMDgwMCwxOTk4NCwyNDMxOSwyMTMxNywxOTk4OSwyMDEyMCwxOTk5OCwzOTczMCwyMzQw''@;'; put 'put ''NCwyMjEyMSwyMDAwOCwzMTE2MiwyMDAzMSwyMTI2OSwyMDAzOSwyMjgyOSwyOTI0MywyMTM1OCwyNzY2NCwyMjIzOSwzMjk5NiwzOTMxOSwyNzYwMywzMDU5MCw0MDcyNywyMDAyMiwyMDEyNyw0MDcyMCwyMDA2MCwyMDA3MywyMDExNSwzMzQxNiwyMzM4NywyMTg2OCwyMjAzMSwyMDE2NCwy''@;'; put 'put ''MTM4OSwyMTQwNSwyMTQxMSwyMTQxMywyMTQyMiwzODc1NywzNjE4OSwyMTI3NCwyMTQ5MywyMTI4NiwyMTI5NCwyMTMxMCwzNjE4OCwyMTM1MCwyMTM0NywyMDk5NCwyMWUzLDIxMDA2LDIxMDM3LDIxMDQzLDIxMDU1LDIxMDU2LDIxMDY4LDIxMDg2LDIxMDg5LDIxMDg0LDMzOTY3LDIxMTE3''@;'; put 'put ''LDIxMTIyLDIxMTIxLDIxMTM2LDIxMTM5LDIwODY2LDMyNTk2LDIwMTU1LDIwMTYzLDIwMTY5LDIwMTYyLDIwMjAwLDIwMTkzLDIwMjAzLDIwMTkwLDIwMjUxLDIwMjExLDIwMjU4LDIwMzI0LDIwMjEzLDIwMjYxLDIwMjYzLDIwMjMzLDIwMjY3LDIwMzE4LDIwMzI3LDI1OTEyLDIwMzE0LDIw''@;'; put 'put ''MzE3LDM2MDE0LDM2MDE1LDM2MDE2LDM2MDE3LDM2MDE4LDM2MDE5LDM2MDIwLDM2MDIxLDM2MDIyLDM2MDIzLDM2MDI0LDM2MDI1LDM2MDI2LDM2MDI3LDM2MDI4LDM2MDI5LDM2MDMwLDM2MDMxLDM2MDMyLDM2MDMzLDM2MDM0LDM2MDM1LDM2MDM2LDM2MDM3LDM2MDM4LDM2MDM5LDM2MDQw''@;'; put 'put ''LDM2MDQxLDM2MDQyLDM2MDQzLDM2MDQ0LDM2MDQ1LDM2MDQ2LDM2MDQ3LDM2MDQ4LDM2MDQ5LDM2MDUwLDM2MDUxLDM2MDUyLDM2MDUzLDM2MDU0LDM2MDU1LDM2MDU2LDM2MDU3LDM2MDU4LDM2MDU5LDM2MDYwLDM2MDYxLDM2MDYyLDM2MDYzLDM2MDY0LDM2MDY1LDM2MDY2LDM2MDY3LDM2''@;'; put 'put ''MDY4LDM2MDY5LDM2MDcwLDM2MDcxLDM2MDcyLDM2MDczLDM2MDc0LDM2MDc1LDM2MDc2LDM2MDc3LDM2MDc4LDM2MDc5LDM2MDgwLDM2MDgxLDM2MDgyLDM2MDgzLDM2MDg0LDM2MDg1LDM2MDg2LDM2MDg3LDM2MDg4LDM2MDg5LDM2MDkwLDM2MDkxLDM2MDkyLDM2MDkzLDM2MDk0LDM2MDk1''@;'; put 'put ''LDM2MDk2LDM2MDk3LDM2MDk4LDM2MDk5LDM2MTAwLDM2MTAxLDM2MTAyLDM2MTAzLDM2MTA0LDM2MTA1LDM2MTA2LDM2MTA3LDM2MTA4LDM2MTA5LDIwMzE5LDIwMzExLDIwMjc0LDIwMjg1LDIwMzQyLDIwMzQwLDIwMzY5LDIwMzYxLDIwMzU1LDIwMzY3LDIwMzUwLDIwMzQ3LDIwMzk0LDIw''@;'; put 'put ''MzQ4LDIwMzk2LDIwMzcyLDIwNDU0LDIwNDU2LDIwNDU4LDIwNDIxLDIwNDQyLDIwNDUxLDIwNDQ0LDIwNDMzLDIwNDQ3LDIwNDcyLDIwNTIxLDIwNTU2LDIwNDY3LDIwNTI0LDIwNDk1LDIwNTI2LDIwNTI1LDIwNDc4LDIwNTA4LDIwNDkyLDIwNTE3LDIwNTIwLDIwNjA2LDIwNTQ3LDIwNTY1''@;'; put 'put ''LDIwNTUyLDIwNTU4LDIwNTg4LDIwNjAzLDIwNjQ1LDIwNjQ3LDIwNjQ5LDIwNjY2LDIwNjk0LDIwNzQyLDIwNzE3LDIwNzE2LDIwNzEwLDIwNzE4LDIwNzQzLDIwNzQ3LDIwMTg5LDI3NzA5LDIwMzEyLDIwMzI1LDIwNDMwLDQwODY0LDI3NzE4LDMxODYwLDIwODQ2LDI0MDYxLDQwNjQ5LDM5''@;'; put 'put ''MzIwLDIwODY1LDIyODA0LDIxMjQxLDIxMjYxLDM1MzM1LDIxMjY0LDIwOTcxLDIyODA5LDIwODIxLDIwMTI4LDIwODIyLDIwMTQ3LDM0OTI2LDM0OTgwLDIwMTQ5LDMzMDQ0LDM1MDI2LDMxMTA0LDIzMzQ4LDM0ODE5LDMyNjk2LDIwOTA3LDIwOTEzLDIwOTI1LDIwOTI0LDM2MTEwLDM2MTEx''@;'; put 'put ''LDM2MTEyLDM2MTEzLDM2MTE0LDM2MTE1LDM2MTE2LDM2MTE3LDM2MTE4LDM2MTE5LDM2MTIwLDM2MTIxLDM2MTIyLDM2MTIzLDM2MTI0LDM2MTI4LDM2MTc3LDM2MTc4LDM2MTgzLDM2MTkxLDM2MTk3LDM2MjAwLDM2MjAxLDM2MjAyLDM2MjA0LDM2MjA2LDM2MjA3LDM2MjA5LDM2MjEwLDM2''@;'; put 'put ''MjE2LDM2MjE3LDM2MjE4LDM2MjE5LDM2MjIwLDM2MjIxLDM2MjIyLDM2MjIzLDM2MjI0LDM2MjI2LDM2MjI3LDM2MjMwLDM2MjMxLDM2MjMyLDM2MjMzLDM2MjM2LDM2MjM3LDM2MjM4LDM2MjM5LDM2MjQwLDM2MjQyLDM2MjQzLDM2MjQ1LDM2MjQ2LDM2MjQ3LDM2MjQ4LDM2MjQ5LDM2MjUw''@;'; put 'put ''LDM2MjUxLDM2MjUyLDM2MjUzLDM2MjU0LDM2MjU2LDM2MjU3LDM2MjU4LDM2MjYwLDM2MjYxLDM2MjYyLDM2MjYzLDM2MjY0LDM2MjY1LDM2MjY2LDM2MjY3LDM2MjY4LDM2MjY5LDM2MjcwLDM2MjcxLDM2MjcyLDM2Mjc0LDM2Mjc4LDM2Mjc5LDM2MjgxLDM2MjgzLDM2Mjg1LDM2Mjg4LDM2''@;'; put 'put ''Mjg5LDM2MjkwLDM2MjkzLDM2Mjk1LDM2Mjk2LDM2Mjk3LDM2Mjk4LDM2MzAxLDM2MzA0LDM2MzA2LDM2MzA3LDM2MzA4LDIwOTM1LDIwODg2LDIwODk4LDIwOTAxLDM1NzQ0LDM1NzUwLDM1NzUxLDM1NzU0LDM1NzY0LDM1NzY1LDM1NzY3LDM1Nzc4LDM1Nzc5LDM1Nzg3LDM1NzkxLDM1Nzkw''@;'; put 'put ''LDM1Nzk0LDM1Nzk1LDM1Nzk2LDM1Nzk4LDM1ODAwLDM1ODAxLDM1ODA0LDM1ODA3LDM1ODA4LDM1ODEyLDM1ODE2LDM1ODE3LDM1ODIyLDM1ODI0LDM1ODI3LDM1ODMwLDM1ODMzLDM1ODM2LDM1ODM5LDM1ODQwLDM1ODQyLDM1ODQ0LDM1ODQ3LDM1ODUyLDM1ODU1LDM1ODU3LDM1ODU4LDM1''@;'; put 'put ''ODYwLDM1ODYxLDM1ODYyLDM1ODY1LDM1ODY3LDM1ODY0LDM1ODY5LDM1ODcxLDM1ODcyLDM1ODczLDM1ODc3LDM1ODc5LDM1ODgyLDM1ODgzLDM1ODg2LDM1ODg3LDM1ODkwLDM1ODkxLDM1ODkzLDM1ODk0LDIxMzUzLDIxMzcwLDM4NDI5LDM4NDM0LDM4NDMzLDM4NDQ5LDM4NDQyLDM4NDYx''@;'; put 'put ''LDM4NDYwLDM4NDY2LDM4NDczLDM4NDg0LDM4NDk1LDM4NTAzLDM4NTA4LDM4NTE0LDM4NTE2LDM4NTM2LDM4NTQxLDM4NTUxLDM4NTc2LDM3MDE1LDM3MDE5LDM3MDIxLDM3MDE3LDM3MDM2LDM3MDI1LDM3MDQ0LDM3MDQzLDM3MDQ2LDM3MDUwLDM2MzA5LDM2MzEyLDM2MzEzLDM2MzE2LDM2''@;'; put 'put ''MzIwLDM2MzIxLDM2MzIyLDM2MzI1LDM2MzI2LDM2MzI3LDM2MzI5LDM2MzMzLDM2MzM0LDM2MzM2LDM2MzM3LDM2MzM4LDM2MzQwLDM2MzQyLDM2MzQ4LDM2MzUwLDM2MzUxLDM2MzUyLDM2MzUzLDM2MzU0LDM2MzU1LDM2MzU2LDM2MzU4LDM2MzU5LDM2MzYwLDM2MzYzLDM2MzY1LDM2MzY2''@;'; put 'put ''LDM2MzY4LDM2MzY5LDM2MzcwLDM2MzcxLDM2MzczLDM2Mzc0LDM2Mzc1LDM2Mzc2LDM2Mzc3LDM2Mzc4LDM2Mzc5LDM2MzgwLDM2Mzg0LDM2Mzg1LDM2Mzg4LDM2Mzg5LDM2MzkwLDM2MzkxLDM2MzkyLDM2Mzk1LDM2Mzk3LDM2NDAwLDM2NDAyLDM2NDAzLDM2NDA0LDM2NDA2LDM2NDA3LDM2''@;'; put 'put ''NDA4LDM2NDExLDM2NDEyLDM2NDE0LDM2NDE1LDM2NDE5LDM2NDIxLDM2NDIyLDM2NDI4LDM2NDI5LDM2NDMwLDM2NDMxLDM2NDMyLDM2NDM1LDM2NDM2LDM2NDM3LDM2NDM4LDM2NDM5LDM2NDQwLDM2NDQyLDM2NDQzLDM2NDQ0LDM2NDQ1LDM2NDQ2LDM2NDQ3LDM2NDQ4LDM2NDQ5LDM2NDUw''@;'; put 'put ''LDM2NDUxLDM2NDUyLDM2NDUzLDM2NDU1LDM2NDU2LDM2NDU4LDM2NDU5LDM2NDYyLDM2NDY1LDM3MDQ4LDM3MDQwLDM3MDcxLDM3MDYxLDM3MDU0LDM3MDcyLDM3MDYwLDM3MDYzLDM3MDc1LDM3MDk0LDM3MDkwLDM3MDg0LDM3MDc5LDM3MDgzLDM3MDk5LDM3MTAzLDM3MTE4LDM3MTI0LDM3''@;'; put 'put ''MTU0LDM3MTUwLDM3MTU1LDM3MTY5LDM3MTY3LDM3MTc3LDM3MTg3LDM3MTkwLDIxMDA1LDIyODUwLDIxMTU0LDIxMTY0LDIxMTY1LDIxMTgyLDIxNzU5LDIxMjAwLDIxMjA2LDIxMjMyLDIxNDcxLDI5MTY2LDMwNjY5LDI0MzA4LDIwOTgxLDIwOTg4LDM5NzI3LDIxNDMwLDI0MzIxLDMwMDQy''@;'; put 'put ''LDI0MDQ3LDIyMzQ4LDIyNDQxLDIyNDMzLDIyNjU0LDIyNzE2LDIyNzI1LDIyNzM3LDIyMzEzLDIyMzE2LDIyMzE0LDIyMzIzLDIyMzI5LDIyMzE4LDIyMzE5LDIyMzY0LDIyMzMxLDIyMzM4LDIyMzc3LDIyNDA1LDIyMzc5LDIyNDA2LDIyMzk2LDIyMzk1LDIyMzc2LDIyMzgxLDIyMzkwLDIy''@;'; put 'put ''Mzg3LDIyNDQ1LDIyNDM2LDIyNDEyLDIyNDUwLDIyNDc5LDIyNDM5LDIyNDUyLDIyNDE5LDIyNDMyLDIyNDg1LDIyNDg4LDIyNDkwLDIyNDg5LDIyNDgyLDIyNDU2LDIyNTE2LDIyNTExLDIyNTIwLDIyNTAwLDIyNDkzLDM2NDY3LDM2NDY5LDM2NDcxLDM2NDcyLDM2NDczLDM2NDc0LDM2NDc1''@;'; put 'put ''LDM2NDc3LDM2NDc4LDM2NDgwLDM2NDgyLDM2NDgzLDM2NDg0LDM2NDg2LDM2NDg4LDM2NDg5LDM2NDkwLDM2NDkxLDM2NDkyLDM2NDkzLDM2NDk0LDM2NDk3LDM2NDk4LDM2NDk5LDM2NTAxLDM2NTAyLDM2NTAzLDM2NTA0LDM2NTA1LDM2NTA2LDM2NTA3LDM2NTA5LDM2NTExLDM2NTEyLDM2''@;'; put 'put ''NTEzLDM2NTE0LDM2NTE1LDM2NTE2LDM2NTE3LDM2NTE4LDM2NTE5LDM2NTIwLDM2NTIxLDM2NTIyLDM2NTI1LDM2NTI2LDM2NTI4LDM2NTI5LDM2NTMxLDM2NTMyLDM2NTMzLDM2NTM0LDM2NTM1LDM2NTM2LDM2NTM3LDM2NTM5LDM2NTQwLDM2NTQxLDM2NTQyLDM2NTQzLDM2NTQ0LDM2NTQ1''@;'; put 'put ''LDM2NTQ2LDM2NTQ3LDM2NTQ4LDM2NTQ5LDM2NTUwLDM2NTUxLDM2NTUyLDM2NTUzLDM2NTU0LDM2NTU1LDM2NTU2LDM2NTU3LDM2NTU5LDM2NTYwLDM2NTYxLDM2NTYyLDM2NTYzLDM2NTY0LDM2NTY1LDM2NTY2LDM2NTY3LDM2NTY4LDM2NTY5LDM2NTcwLDM2NTcxLDM2NTcyLDM2NTczLDM2''@;'; put 'put ''NTc0LDM2NTc1LDM2NTc2LDM2NTc3LDM2NTc4LDM2NTc5LDM2NTgwLDIyNTM5LDIyNTQxLDIyNTI1LDIyNTA5LDIyNTI4LDIyNTU4LDIyNTUzLDIyNTk2LDIyNTYwLDIyNjI5LDIyNjM2LDIyNjU3LDIyNjY1LDIyNjgyLDIyNjU2LDM5MzM2LDQwNzI5LDI1MDg3LDMzNDAxLDMzNDA1LDMzNDA3''@;'; put 'put ''LDMzNDIzLDMzNDE4LDMzNDQ4LDMzNDEyLDMzNDIyLDMzNDI1LDMzNDMxLDMzNDMzLDMzNDUxLDMzNDY0LDMzNDcwLDMzNDU2LDMzNDgwLDMzNDgyLDMzNTA3LDMzNDMyLDMzNDYzLDMzNDU0LDMzNDgzLDMzNDg0LDMzNDczLDMzNDQ5LDMzNDYwLDMzNDQxLDMzNDUwLDMzNDM5LDMzNDc2LDMz''@;'; put 'put ''NDg2LDMzNDQ0LDMzNTA1LDMzNTQ1LDMzNTI3LDMzNTA4LDMzNTUxLDMzNTQzLDMzNTAwLDMzNTI0LDMzNDkwLDMzNDk2LDMzNTQ4LDMzNTMxLDMzNDkxLDMzNTUzLDMzNTYyLDMzNTQyLDMzNTU2LDMzNTU3LDMzNTA0LDMzNDkzLDMzNTY0LDMzNjE3LDMzNjI3LDMzNjI4LDMzNTQ0LDMzNjgy''@;'; put 'put ''LDMzNTk2LDMzNTg4LDMzNTg1LDMzNjkxLDMzNjMwLDMzNTgzLDMzNjE1LDMzNjA3LDMzNjAzLDMzNjMxLDMzNjAwLDMzNTU5LDMzNjMyLDMzNTgxLDMzNTk0LDMzNTg3LDMzNjM4LDMzNjM3LDM2NTgxLDM2NTgyLDM2NTgzLDM2NTg0LDM2NTg1LDM2NTg2LDM2NTg3LDM2NTg4LDM2NTg5LDM2''@;'; put 'put ''NTkwLDM2NTkxLDM2NTkyLDM2NTkzLDM2NTk0LDM2NTk1LDM2NTk2LDM2NTk3LDM2NTk4LDM2NTk5LDM2NjAwLDM2NjAxLDM2NjAyLDM2NjAzLDM2NjA0LDM2NjA1LDM2NjA2LDM2NjA3LDM2NjA4LDM2NjA5LDM2NjEwLDM2NjExLDM2NjEyLDM2NjEzLDM2NjE0LDM2NjE1LDM2NjE2LDM2NjE3''@;'; put 'put ''LDM2NjE4LDM2NjE5LDM2NjIwLDM2NjIxLDM2NjIyLDM2NjIzLDM2NjI0LDM2NjI1LDM2NjI2LDM2NjI3LDM2NjI4LDM2NjI5LDM2NjMwLDM2NjMxLDM2NjMyLDM2NjMzLDM2NjM0LDM2NjM1LDM2NjM2LDM2NjM3LDM2NjM4LDM2NjM5LDM2NjQwLDM2NjQxLDM2NjQyLDM2NjQzLDM2NjQ0LDM2''@;'; put 'put ''NjQ1LDM2NjQ2LDM2NjQ3LDM2NjQ4LDM2NjQ5LDM2NjUwLDM2NjUxLDM2NjUyLDM2NjUzLDM2NjU0LDM2NjU1LDM2NjU2LDM2NjU3LDM2NjU4LDM2NjU5LDM2NjYwLDM2NjYxLDM2NjYyLDM2NjYzLDM2NjY0LDM2NjY1LDM2NjY2LDM2NjY3LDM2NjY4LDM2NjY5LDM2NjcwLDM2NjcxLDM2Njcy''@;'; put 'put ''LDM2NjczLDM2Njc0LDM2Njc1LDM2Njc2LDMzNjQwLDMzNTYzLDMzNjQxLDMzNjQ0LDMzNjQyLDMzNjQ1LDMzNjQ2LDMzNzEyLDMzNjU2LDMzNzE1LDMzNzE2LDMzNjk2LDMzNzA2LDMzNjgzLDMzNjkyLDMzNjY5LDMzNjYwLDMzNzE4LDMzNzA1LDMzNjYxLDMzNzIwLDMzNjU5LDMzNjg4LDMz''@;'; put 'put ''Njk0LDMzNzA0LDMzNzIyLDMzNzI0LDMzNzI5LDMzNzkzLDMzNzY1LDMzNzUyLDIyNTM1LDMzODE2LDMzODAzLDMzNzU3LDMzNzg5LDMzNzUwLDMzODIwLDMzODQ4LDMzODA5LDMzNzk4LDMzNzQ4LDMzNzU5LDMzODA3LDMzNzk1LDMzNzg0LDMzNzg1LDMzNzcwLDMzNzMzLDMzNzI4LDMzODMw''@;'; put 'put ''LDMzNzc2LDMzNzYxLDMzODg0LDMzODczLDMzODgyLDMzODgxLDMzOTA3LDMzOTI3LDMzOTI4LDMzOTE0LDMzOTI5LDMzOTEyLDMzODUyLDMzODYyLDMzODk3LDMzOTEwLDMzOTMyLDMzOTM0LDMzODQxLDMzOTAxLDMzOTg1LDMzOTk3LDM0ZTMsMzQwMjIsMzM5ODEsMzQwMDMsMzM5OTQsMzM5''@;'; put 'put ''ODMsMzM5NzgsMzQwMTYsMzM5NTMsMzM5NzcsMzM5NzIsMzM5NDMsMzQwMjEsMzQwMTksMzQwNjAsMjk5NjUsMzQxMDQsMzQwMzIsMzQxMDUsMzQwNzksMzQxMDYsMzY2NzcsMzY2NzgsMzY2NzksMzY2ODAsMzY2ODEsMzY2ODIsMzY2ODMsMzY2ODQsMzY2ODUsMzY2ODYsMzY2ODcsMzY2ODgs''@;'; put 'put ''MzY2ODksMzY2OTAsMzY2OTEsMzY2OTIsMzY2OTMsMzY2OTQsMzY2OTUsMzY2OTYsMzY2OTcsMzY2OTgsMzY2OTksMzY3MDAsMzY3MDEsMzY3MDIsMzY3MDMsMzY3MDQsMzY3MDUsMzY3MDYsMzY3MDcsMzY3MDgsMzY3MDksMzY3MTQsMzY3MzYsMzY3NDgsMzY3NTQsMzY3NjUsMzY3NjgsMzY3''@;'; put 'put ''NjksMzY3NzAsMzY3NzIsMzY3NzMsMzY3NzQsMzY3NzUsMzY3NzgsMzY3ODAsMzY3ODEsMzY3ODIsMzY3ODMsMzY3ODYsMzY3ODcsMzY3ODgsMzY3ODksMzY3OTEsMzY3OTIsMzY3OTQsMzY3OTUsMzY3OTYsMzY3OTksMzY4MDAsMzY4MDMsMzY4MDYsMzY4MDksMzY4MTAsMzY4MTEsMzY4MTIs''@;'; put 'put ''MzY4MTMsMzY4MTUsMzY4MTgsMzY4MjIsMzY4MjMsMzY4MjYsMzY4MzIsMzY4MzMsMzY4MzUsMzY4MzksMzY4NDQsMzY4NDcsMzY4NDksMzY4NTAsMzY4NTIsMzY4NTMsMzY4NTQsMzY4NTgsMzY4NTksMzY4NjAsMzY4NjIsMzY4NjMsMzY4NzEsMzY4NzIsMzY4NzYsMzY4NzgsMzY4ODMsMzY4''@;'; put 'put ''ODUsMzY4ODgsMzQxMzQsMzQxMDcsMzQwNDcsMzQwNDQsMzQxMzcsMzQxMjAsMzQxNTIsMzQxNDgsMzQxNDIsMzQxNzAsMzA2MjYsMzQxMTUsMzQxNjIsMzQxNzEsMzQyMTIsMzQyMTYsMzQxODMsMzQxOTEsMzQxNjksMzQyMjIsMzQyMDQsMzQxODEsMzQyMzMsMzQyMzEsMzQyMjQsMzQyNTks''@;'; put 'put ''MzQyNDEsMzQyNjgsMzQzMDMsMzQzNDMsMzQzMDksMzQzNDUsMzQzMjYsMzQzNjQsMjQzMTgsMjQzMjgsMjI4NDQsMjI4NDksMzI4MjMsMjI4NjksMjI4NzQsMjI4NzIsMjEyNjMsMjM1ODYsMjM1ODksMjM1OTYsMjM2MDQsMjUxNjQsMjUxOTQsMjUyNDcsMjUyNzUsMjUyOTAsMjUzMDYsMjUz''@;'; put 'put ''MDMsMjUzMjYsMjUzNzgsMjUzMzQsMjU0MDEsMjU0MTksMjU0MTEsMjU1MTcsMjU1OTAsMjU0NTcsMjU0NjYsMjU0ODYsMjU1MjQsMjU0NTMsMjU1MTYsMjU0ODIsMjU0NDksMjU1MTgsMjU1MzIsMjU1ODYsMjU1OTIsMjU1NjgsMjU1OTksMjU1NDAsMjU1NjYsMjU1NTAsMjU2ODIsMjU1NDIs''@;'; put 'put ''MjU1MzQsMjU2NjksMjU2NjUsMjU2MTEsMjU2MjcsMjU2MzIsMjU2MTIsMjU2MzgsMjU2MzMsMjU2OTQsMjU3MzIsMjU3MDksMjU3NTAsMzY4ODksMzY4OTIsMzY4OTksMzY5MDAsMzY5MDEsMzY5MDMsMzY5MDQsMzY5MDUsMzY5MDYsMzY5MDcsMzY5MDgsMzY5MTIsMzY5MTMsMzY5MTQsMzY5''@;'; put 'put ''MTUsMzY5MTYsMzY5MTksMzY5MjEsMzY5MjIsMzY5MjUsMzY5MjcsMzY5MjgsMzY5MzEsMzY5MzMsMzY5MzQsMzY5MzYsMzY5MzcsMzY5MzgsMzY5MzksMzY5NDAsMzY5NDIsMzY5NDgsMzY5NDksMzY5NTAsMzY5NTMsMzY5NTQsMzY5NTYsMzY5NTcsMzY5NTgsMzY5NTksMzY5NjAsMzY5NjEs''@;'; put 'put ''MzY5NjQsMzY5NjYsMzY5NjcsMzY5NjksMzY5NzAsMzY5NzEsMzY5NzIsMzY5NzUsMzY5NzYsMzY5NzcsMzY5NzgsMzY5NzksMzY5ODIsMzY5ODMsMzY5ODQsMzY5ODUsMzY5ODYsMzY5ODcsMzY5ODgsMzY5OTAsMzY5OTMsMzY5OTYsMzY5OTcsMzY5OTgsMzY5OTksMzcwMDEsMzcwMDIsMzcw''@;'; put 'put ''MDQsMzcwMDUsMzcwMDYsMzcwMDcsMzcwMDgsMzcwMTAsMzcwMTIsMzcwMTQsMzcwMTYsMzcwMTgsMzcwMjAsMzcwMjIsMzcwMjMsMzcwMjQsMzcwMjgsMzcwMjksMzcwMzEsMzcwMzIsMzcwMzMsMzcwMzUsMzcwMzcsMzcwNDIsMzcwNDcsMzcwNTIsMzcwNTMsMzcwNTUsMzcwNTYsMjU3MjIs''@;'; put 'put ''MjU3ODMsMjU3ODQsMjU3NTMsMjU3ODYsMjU3OTIsMjU4MDgsMjU4MTUsMjU4MjgsMjU4MjYsMjU4NjUsMjU4OTMsMjU5MDIsMjQzMzEsMjQ1MzAsMjk5NzcsMjQzMzcsMjEzNDMsMjE0ODksMjE1MDEsMjE0ODEsMjE0ODAsMjE0OTksMjE1MjIsMjE1MjYsMjE1MTAsMjE1NzksMjE1ODYsMjE1''@;'; put 'put ''ODcsMjE1ODgsMjE1OTAsMjE1NzEsMjE1MzcsMjE1OTEsMjE1OTMsMjE1MzksMjE1NTQsMjE2MzQsMjE2NTIsMjE2MjMsMjE2MTcsMjE2MDQsMjE2NTgsMjE2NTksMjE2MzYsMjE2MjIsMjE2MDYsMjE2NjEsMjE3MTIsMjE2NzcsMjE2OTgsMjE2ODQsMjE3MTQsMjE2NzEsMjE2NzAsMjE3MTUs''@;'; put 'put ''MjE3MTYsMjE2MTgsMjE2NjcsMjE3MTcsMjE2OTEsMjE2OTUsMjE3MDgsMjE3MjEsMjE3MjIsMjE3MjQsMjE2NzMsMjE2NzQsMjE2NjgsMjE3MjUsMjE3MTEsMjE3MjYsMjE3ODcsMjE3MzUsMjE3OTIsMjE3NTcsMjE3ODAsMjE3NDcsMjE3OTQsMjE3OTUsMjE3NzUsMjE3NzcsMjE3OTksMjE4''@;'; put 'put ''MDIsMjE4NjMsMjE5MDMsMjE5NDEsMjE4MzMsMjE4NjksMjE4MjUsMjE4NDUsMjE4MjMsMjE4NDAsMjE4MjAsMzcwNTgsMzcwNTksMzcwNjIsMzcwNjQsMzcwNjUsMzcwNjcsMzcwNjgsMzcwNjksMzcwNzQsMzcwNzYsMzcwNzcsMzcwNzgsMzcwODAsMzcwODEsMzcwODIsMzcwODYsMzcwODcs''@;'; put 'put ''MzcwODgsMzcwOTEsMzcwOTIsMzcwOTMsMzcwOTcsMzcwOTgsMzcxMDAsMzcxMDIsMzcxMDQsMzcxMDUsMzcxMDYsMzcxMDcsMzcxMDksMzcxMTAsMzcxMTEsMzcxMTMsMzcxMTQsMzcxMTUsMzcxMTYsMzcxMTksMzcxMjAsMzcxMjEsMzcxMjMsMzcxMjUsMzcxMjYsMzcxMjcsMzcxMjgsMzcx''@;'; put 'put ''MjksMzcxMzAsMzcxMzEsMzcxMzIsMzcxMzMsMzcxMzQsMzcxMzUsMzcxMzYsMzcxMzcsMzcxMzgsMzcxMzksMzcxNDAsMzcxNDEsMzcxNDIsMzcxNDMsMzcxNDQsMzcxNDYsMzcxNDcsMzcxNDgsMzcxNDksMzcxNTEsMzcxNTIsMzcxNTMsMzcxNTYsMzcxNTcsMzcxNTgsMzcxNTksMzcxNjAs''@;'; put 'put ''MzcxNjEsMzcxNjIsMzcxNjMsMzcxNjQsMzcxNjUsMzcxNjYsMzcxNjgsMzcxNzAsMzcxNzEsMzcxNzIsMzcxNzMsMzcxNzQsMzcxNzUsMzcxNzYsMzcxNzgsMzcxNzksMzcxODAsMzcxODEsMzcxODIsMzcxODMsMzcxODQsMzcxODUsMzcxODYsMzcxODgsMjE4MTUsMjE4NDYsMjE4NzcsMjE4''@;'; put 'put ''NzgsMjE4NzksMjE4MTEsMjE4MDgsMjE4NTIsMjE4OTksMjE5NzAsMjE4OTEsMjE5MzcsMjE5NDUsMjE4OTYsMjE4ODksMjE5MTksMjE4ODYsMjE5NzQsMjE5MDUsMjE4ODMsMjE5ODMsMjE5NDksMjE5NTAsMjE5MDgsMjE5MTMsMjE5OTQsMjIwMDcsMjE5NjEsMjIwNDcsMjE5NjksMjE5OTUs''@;'; put 'put ''MjE5OTYsMjE5NzIsMjE5OTAsMjE5ODEsMjE5NTYsMjE5OTksMjE5ODksMjIwMDIsMjIwMDMsMjE5NjQsMjE5NjUsMjE5OTIsMjIwMDUsMjE5ODgsMzY3NTYsMjIwNDYsMjIwMjQsMjIwMjgsMjIwMTcsMjIwNTIsMjIwNTEsMjIwMTQsMjIwMTYsMjIwNTUsMjIwNjEsMjIxMDQsMjIwNzMsMjIx''@;'; put 'put ''MDMsMjIwNjAsMjIwOTMsMjIxMTQsMjIxMDUsMjIxMDgsMjIwOTIsMjIxMDAsMjIxNTAsMjIxMTYsMjIxMjksMjIxMjMsMjIxMzksMjIxNDAsMjIxNDksMjIxNjMsMjIxOTEsMjIyMjgsMjIyMzEsMjIyMzcsMjIyNDEsMjIyNjEsMjIyNTEsMjIyNjUsMjIyNzEsMjIyNzYsMjIyODIsMjIyODEs''@;'; put 'put ''MjIzMDAsMjQwNzksMjQwODksMjQwODQsMjQwODEsMjQxMTMsMjQxMjMsMjQxMjQsMzcxODksMzcxOTEsMzcxOTIsMzcyMDEsMzcyMDMsMzcyMDQsMzcyMDUsMzcyMDYsMzcyMDgsMzcyMDksMzcyMTEsMzcyMTIsMzcyMTUsMzcyMTYsMzcyMjIsMzcyMjMsMzcyMjQsMzcyMjcsMzcyMjksMzcy''@;'; put 'put ''MzUsMzcyNDIsMzcyNDMsMzcyNDQsMzcyNDgsMzcyNDksMzcyNTAsMzcyNTEsMzcyNTIsMzcyNTQsMzcyNTYsMzcyNTgsMzcyNjIsMzcyNjMsMzcyNjcsMzcyNjgsMzcyNjksMzcyNzAsMzcyNzEsMzcyNzIsMzcyNzMsMzcyNzYsMzcyNzcsMzcyNzgsMzcyNzksMzcyODAsMzcyODEsMzcyODQs''@;'; put 'put ''MzcyODUsMzcyODYsMzcyODcsMzcyODgsMzcyODksMzcyOTEsMzcyOTIsMzcyOTYsMzcyOTcsMzcyOTgsMzcyOTksMzczMDIsMzczMDMsMzczMDQsMzczMDUsMzczMDcsMzczMDgsMzczMDksMzczMTAsMzczMTEsMzczMTIsMzczMTMsMzczMTQsMzczMTUsMzczMTYsMzczMTcsMzczMTgsMzcz''@;'; put 'put ''MjAsMzczMjMsMzczMjgsMzczMzAsMzczMzEsMzczMzIsMzczMzMsMzczMzQsMzczMzUsMzczMzYsMzczMzcsMzczMzgsMzczMzksMzczNDEsMzczNDIsMzczNDMsMzczNDQsMzczNDUsMzczNDYsMzczNDcsMzczNDgsMzczNDksMjQxMTksMjQxMzIsMjQxNDgsMjQxNTUsMjQxNTgsMjQxNjEs''@;'; put 'put ''MjM2OTIsMjM2NzQsMjM2OTMsMjM2OTYsMjM3MDIsMjM2ODgsMjM3MDQsMjM3MDUsMjM2OTcsMjM3MDYsMjM3MDgsMjM3MzMsMjM3MTQsMjM3NDEsMjM3MjQsMjM3MjMsMjM3MjksMjM3MTUsMjM3NDUsMjM3MzUsMjM3NDgsMjM3NjIsMjM3ODAsMjM3NTUsMjM3ODEsMjM4MTAsMjM4MTEsMjM4''@;'; put 'put ''NDcsMjM4NDYsMjM4NTQsMjM4NDQsMjM4MzgsMjM4MTQsMjM4MzUsMjM4OTYsMjM4NzAsMjM4NjAsMjM4NjksMjM5MTYsMjM4OTksMjM5MTksMjM5MDEsMjM5MTUsMjM4ODMsMjM4ODIsMjM5MTMsMjM5MjQsMjM5MzgsMjM5NjEsMjM5NjUsMzU5NTUsMjM5OTEsMjQwMDUsMjQ0MzUsMjQ0Mzks''@;'; put 'put ''MjQ0NTAsMjQ0NTUsMjQ0NTcsMjQ0NjAsMjQ0NjksMjQ0NzMsMjQ0NzYsMjQ0ODgsMjQ0OTMsMjQ1MDEsMjQ1MDgsMzQ5MTQsMjQ0MTcsMjkzNTcsMjkzNjAsMjkzNjQsMjkzNjcsMjkzNjgsMjkzNzksMjkzNzcsMjkzOTAsMjkzODksMjkzOTQsMjk0MTYsMjk0MjMsMjk0MTcsMjk0MjYsMjk0''@;'; put 'put ''MjgsMjk0MzEsMjk0NDEsMjk0MjcsMjk0NDMsMjk0MzQsMzczNTAsMzczNTEsMzczNTIsMzczNTMsMzczNTQsMzczNTUsMzczNTYsMzczNTcsMzczNTgsMzczNTksMzczNjAsMzczNjEsMzczNjIsMzczNjMsMzczNjQsMzczNjUsMzczNjYsMzczNjcsMzczNjgsMzczNjksMzczNzAsMzczNzEs''@;'; put 'put ''MzczNzIsMzczNzMsMzczNzQsMzczNzUsMzczNzYsMzczNzcsMzczNzgsMzczNzksMzczODAsMzczODEsMzczODIsMzczODMsMzczODQsMzczODUsMzczODYsMzczODcsMzczODgsMzczODksMzczOTAsMzczOTEsMzczOTIsMzczOTMsMzczOTQsMzczOTUsMzczOTYsMzczOTcsMzczOTgsMzcz''@;'; put 'put ''OTksMzc0MDAsMzc0MDEsMzc0MDIsMzc0MDMsMzc0MDQsMzc0MDUsMzc0MDYsMzc0MDcsMzc0MDgsMzc0MDksMzc0MTAsMzc0MTEsMzc0MTIsMzc0MTMsMzc0MTQsMzc0MTUsMzc0MTYsMzc0MTcsMzc0MTgsMzc0MTksMzc0MjAsMzc0MjEsMzc0MjIsMzc0MjMsMzc0MjQsMzc0MjUsMzc0MjYs''@;'; put 'put ''Mzc0MjcsMzc0MjgsMzc0MjksMzc0MzAsMzc0MzEsMzc0MzIsMzc0MzMsMzc0MzQsMzc0MzUsMzc0MzYsMzc0MzcsMzc0MzgsMzc0MzksMzc0NDAsMzc0NDEsMzc0NDIsMzc0NDMsMzc0NDQsMzc0NDUsMjk0MzUsMjk0NjMsMjk0NTksMjk0NzMsMjk0NTAsMjk0NzAsMjk0NjksMjk0NjEsMjk0''@;'; put 'put ''NzQsMjk0OTcsMjk0NzcsMjk0ODQsMjk0OTYsMjk0ODksMjk1MjAsMjk1MTcsMjk1MjcsMjk1MzYsMjk1NDgsMjk1NTEsMjk1NjYsMzMzMDcsMjI4MjEsMzkxNDMsMjI4MjAsMjI3ODYsMzkyNjcsMzkyNzEsMzkyNzIsMzkyNzMsMzkyNzQsMzkyNzUsMzkyNzYsMzkyODQsMzkyODcsMzkyOTMs''@;'; put 'put ''MzkyOTYsMzkzMDAsMzkzMDMsMzkzMDYsMzkzMDksMzkzMTIsMzkzMTMsMzkzMTUsMzkzMTYsMzkzMTcsMjQxOTIsMjQyMDksMjQyMDMsMjQyMTQsMjQyMjksMjQyMjQsMjQyNDksMjQyNDUsMjQyNTQsMjQyNDMsMzYxNzksMjQyNzQsMjQyNzMsMjQyODMsMjQyOTYsMjQyOTgsMzMyMTAsMjQ1''@;'; put 'put ''MTYsMjQ1MjEsMjQ1MzQsMjQ1MjcsMjQ1NzksMjQ1NTgsMjQ1ODAsMjQ1NDUsMjQ1NDgsMjQ1NzQsMjQ1ODEsMjQ1ODIsMjQ1NTQsMjQ1NTcsMjQ1NjgsMjQ2MDEsMjQ2MjksMjQ2MTQsMjQ2MDMsMjQ1OTEsMjQ1ODksMjQ2MTcsMjQ2MTksMjQ1ODYsMjQ2MzksMjQ2MDksMjQ2OTYsMjQ2OTcs''@;'; put 'put ''MjQ2OTksMjQ2OTgsMjQ2NDIsMzc0NDYsMzc0NDcsMzc0NDgsMzc0NDksMzc0NTAsMzc0NTEsMzc0NTIsMzc0NTMsMzc0NTQsMzc0NTUsMzc0NTYsMzc0NTcsMzc0NTgsMzc0NTksMzc0NjAsMzc0NjEsMzc0NjIsMzc0NjMsMzc0NjQsMzc0NjUsMzc0NjYsMzc0NjcsMzc0NjgsMzc0NjksMzc0''@;'; put 'put ''NzAsMzc0NzEsMzc0NzIsMzc0NzMsMzc0NzQsMzc0NzUsMzc0NzYsMzc0NzcsMzc0NzgsMzc0NzksMzc0ODAsMzc0ODEsMzc0ODIsMzc0ODMsMzc0ODQsMzc0ODUsMzc0ODYsMzc0ODcsMzc0ODgsMzc0ODksMzc0OTAsMzc0OTEsMzc0OTMsMzc0OTQsMzc0OTUsMzc0OTYsMzc0OTcsMzc0OTgs''@;'; put 'put ''Mzc0OTksMzc1MDAsMzc1MDEsMzc1MDIsMzc1MDMsMzc1MDQsMzc1MDUsMzc1MDYsMzc1MDcsMzc1MDgsMzc1MDksMzc1MTAsMzc1MTEsMzc1MTIsMzc1MTMsMzc1MTQsMzc1MTUsMzc1MTYsMzc1MTcsMzc1MTksMzc1MjAsMzc1MjEsMzc1MjIsMzc1MjMsMzc1MjQsMzc1MjUsMzc1MjYsMzc1''@;'; put 'put ''MjcsMzc1MjgsMzc1MjksMzc1MzAsMzc1MzEsMzc1MzIsMzc1MzMsMzc1MzQsMzc1MzUsMzc1MzYsMzc1MzcsMzc1MzgsMzc1MzksMzc1NDAsMzc1NDEsMzc1NDIsMzc1NDMsMjQ2ODIsMjQ3MDEsMjQ3MjYsMjQ3MzAsMjQ3NDksMjQ3MzMsMjQ3MDcsMjQ3MjIsMjQ3MTYsMjQ3MzEsMjQ4MTIs''@;'; put 'put ''MjQ3NjMsMjQ3NTMsMjQ3OTcsMjQ3OTIsMjQ3NzQsMjQ3OTQsMjQ3NTYsMjQ4NjQsMjQ4NzAsMjQ4NTMsMjQ4NjcsMjQ4MjAsMjQ4MzIsMjQ4NDYsMjQ4NzUsMjQ5MDYsMjQ5NDksMjUwMDQsMjQ5ODAsMjQ5OTksMjUwMTUsMjUwNDQsMjUwNzcsMjQ1NDEsMzg1NzksMzgzNzcsMzgzNzksMzgz''@;'; put 'put ''ODUsMzgzODcsMzgzODksMzgzOTAsMzgzOTYsMzgzOTgsMzg0MDMsMzg0MDQsMzg0MDYsMzg0MDgsMzg0MTAsMzg0MTEsMzg0MTIsMzg0MTMsMzg0MTUsMzg0MTgsMzg0MjEsMzg0MjIsMzg0MjMsMzg0MjUsMzg0MjYsMjAwMTIsMjkyNDcsMjUxMDksMjc3MDEsMjc3MzIsMjc3NDAsMjc3MjIs''@;'; put 'put ''Mjc4MTEsMjc3ODEsMjc3OTIsMjc3OTYsMjc3ODgsMjc3NTIsMjc3NTMsMjc3NjQsMjc3NjYsMjc3ODIsMjc4MTcsMjc4NTYsMjc4NjAsMjc4MjEsMjc4OTUsMjc4OTYsMjc4ODksMjc4NjMsMjc4MjYsMjc4NzIsMjc4NjIsMjc4OTgsMjc4ODMsMjc4ODYsMjc4MjUsMjc4NTksMjc4ODcsMjc5''@;'; put 'put ''MDIsMzc1NDQsMzc1NDUsMzc1NDYsMzc1NDcsMzc1NDgsMzc1NDksMzc1NTEsMzc1NTIsMzc1NTMsMzc1NTQsMzc1NTUsMzc1NTYsMzc1NTcsMzc1NTgsMzc1NTksMzc1NjAsMzc1NjEsMzc1NjIsMzc1NjMsMzc1NjQsMzc1NjUsMzc1NjYsMzc1NjcsMzc1NjgsMzc1NjksMzc1NzAsMzc1NzEs''@;'; put 'put ''Mzc1NzIsMzc1NzMsMzc1NzQsMzc1NzUsMzc1NzcsMzc1NzgsMzc1NzksMzc1ODAsMzc1ODEsMzc1ODIsMzc1ODMsMzc1ODQsMzc1ODUsMzc1ODYsMzc1ODcsMzc1ODgsMzc1ODksMzc1OTAsMzc1OTEsMzc1OTIsMzc1OTMsMzc1OTQsMzc1OTUsMzc1OTYsMzc1OTcsMzc1OTgsMzc1OTksMzc2''@;'; put 'put ''MDAsMzc2MDEsMzc2MDIsMzc2MDMsMzc2MDQsMzc2MDUsMzc2MDYsMzc2MDcsMzc2MDgsMzc2MDksMzc2MTAsMzc2MTEsMzc2MTIsMzc2MTMsMzc2MTQsMzc2MTUsMzc2MTYsMzc2MTcsMzc2MTgsMzc2MTksMzc2MjAsMzc2MjEsMzc2MjIsMzc2MjMsMzc2MjQsMzc2MjUsMzc2MjYsMzc2Mjcs''@;'; put 'put ''Mzc2MjgsMzc2MjksMzc2MzAsMzc2MzEsMzc2MzIsMzc2MzMsMzc2MzQsMzc2MzUsMzc2MzYsMzc2MzcsMzc2MzgsMzc2MzksMzc2NDAsMzc2NDEsMjc5NjEsMjc5NDMsMjc5MTYsMjc5NzEsMjc5NzYsMjc5MTEsMjc5MDgsMjc5MjksMjc5MTgsMjc5NDcsMjc5ODEsMjc5NTAsMjc5NTcsMjc5''@;'; put 'put ''MzAsMjc5ODMsMjc5ODYsMjc5ODgsMjc5NTUsMjgwNDksMjgwMTUsMjgwNjIsMjgwNjQsMjc5OTgsMjgwNTEsMjgwNTIsMjc5OTYsMjhlMywyODAyOCwyODAwMywyODE4NiwyODEwMywyODEwMSwyODEyNiwyODE3NCwyODA5NSwyODEyOCwyODE3NywyODEzNCwyODEyNSwyODEyMSwyODE4Miwy''@;'; put 'put ''ODA3NSwyODE3MiwyODA3OCwyODIwMywyODI3MCwyODIzOCwyODI2NywyODMzOCwyODI1NSwyODI5NCwyODI0MywyODI0NCwyODIxMCwyODE5NywyODIyOCwyODM4MywyODMzNywyODMxMiwyODM4NCwyODQ2MSwyODM4NiwyODMyNSwyODMyNywyODM0OSwyODM0NywyODM0MywyODM3NSwyODM0''@;'; put 'put ''MCwyODM2NywyODMwMywyODM1NCwyODMxOSwyODUxNCwyODQ4NiwyODQ4NywyODQ1MiwyODQzNywyODQwOSwyODQ2MywyODQ3MCwyODQ5MSwyODUzMiwyODQ1OCwyODQyNSwyODQ1NywyODU1MywyODU1NywyODU1NiwyODUzNiwyODUzMCwyODU0MCwyODUzOCwyODYyNSwzNzY0MiwzNzY0Mywz''@;'; put 'put ''NzY0NCwzNzY0NSwzNzY0NiwzNzY0NywzNzY0OCwzNzY0OSwzNzY1MCwzNzY1MSwzNzY1MiwzNzY1MywzNzY1NCwzNzY1NSwzNzY1NiwzNzY1NywzNzY1OCwzNzY1OSwzNzY2MCwzNzY2MSwzNzY2MiwzNzY2MywzNzY2NCwzNzY2NSwzNzY2NiwzNzY2NywzNzY2OCwzNzY2OSwzNzY3MCwzNzY3''@;'; put 'put ''MSwzNzY3MiwzNzY3MywzNzY3NCwzNzY3NSwzNzY3NiwzNzY3NywzNzY3OCwzNzY3OSwzNzY4MCwzNzY4MSwzNzY4MiwzNzY4MywzNzY4NCwzNzY4NSwzNzY4NiwzNzY4NywzNzY4OCwzNzY4OSwzNzY5MCwzNzY5MSwzNzY5MiwzNzY5MywzNzY5NSwzNzY5NiwzNzY5NywzNzY5OCwzNzY5OSwz''@;'; put 'put ''NzcwMCwzNzcwMSwzNzcwMiwzNzcwMywzNzcwNCwzNzcwNSwzNzcwNiwzNzcwNywzNzcwOCwzNzcwOSwzNzcxMCwzNzcxMSwzNzcxMiwzNzcxMywzNzcxNCwzNzcxNSwzNzcxNiwzNzcxNywzNzcxOCwzNzcxOSwzNzcyMCwzNzcyMSwzNzcyMiwzNzcyMywzNzcyNCwzNzcyNSwzNzcyNiwzNzcy''@;'; put 'put ''NywzNzcyOCwzNzcyOSwzNzczMCwzNzczMSwzNzczMiwzNzczMywzNzczNCwzNzczNSwzNzczNiwzNzczNywzNzczOSwyODYxNywyODU4MywyODYwMSwyODU5OCwyODYxMCwyODY0MSwyODY1NCwyODYzOCwyODY0MCwyODY1NSwyODY5OCwyODcwNywyODY5OSwyODcyOSwyODcyNSwyODc1MSwy''@;'; put 'put ''ODc2NiwyMzQyNCwyMzQyOCwyMzQ0NSwyMzQ0MywyMzQ2MSwyMzQ4MCwyOTk5OSwzOTU4MiwyNTY1MiwyMzUyNCwyMzUzNCwzNTEyMCwyMzUzNiwzNjQyMywzNTU5MSwzNjc5MCwzNjgxOSwzNjgyMSwzNjgzNywzNjg0NiwzNjgzNiwzNjg0MSwzNjgzOCwzNjg1MSwzNjg0MCwzNjg2OSwzNjg2''@;'; put 'put ''OCwzNjg3NSwzNjkwMiwzNjg4MSwzNjg3NywzNjg4NiwzNjg5NywzNjkxNywzNjkxOCwzNjkwOSwzNjkxMSwzNjkzMiwzNjk0NSwzNjk0NiwzNjk0NCwzNjk2OCwzNjk1MiwzNjk2MiwzNjk1NSwyNjI5NywzNjk4MCwzNjk4OSwzNjk5NCwzN2UzLDM2OTk1LDM3MDAzLDI0NDAwLDI0NDA3LDI0''@;'; put 'put ''NDA2LDI0NDA4LDIzNjExLDIxNjc1LDIzNjMyLDIzNjQxLDIzNDA5LDIzNjUxLDIzNjU0LDMyNzAwLDI0MzYyLDI0MzYxLDI0MzY1LDMzMzk2LDI0MzgwLDM5NzM5LDIzNjYyLDIyOTEzLDIyOTE1LDIyOTI1LDIyOTUzLDIyOTU0LDIyOTQ3LDM3NzQwLDM3NzQxLDM3NzQyLDM3NzQzLDM3NzQ0''@;'; put 'put ''LDM3NzQ1LDM3NzQ2LDM3NzQ3LDM3NzQ4LDM3NzQ5LDM3NzUwLDM3NzUxLDM3NzUyLDM3NzUzLDM3NzU0LDM3NzU1LDM3NzU2LDM3NzU3LDM3NzU4LDM3NzU5LDM3NzYwLDM3NzYxLDM3NzYyLDM3NzYzLDM3NzY0LDM3NzY1LDM3NzY2LDM3NzY3LDM3NzY4LDM3NzY5LDM3NzcwLDM3NzcxLDM3''@;'; put 'put ''NzcyLDM3NzczLDM3Nzc0LDM3Nzc2LDM3Nzc3LDM3Nzc4LDM3Nzc5LDM3NzgwLDM3NzgxLDM3NzgyLDM3NzgzLDM3Nzg0LDM3Nzg1LDM3Nzg2LDM3Nzg3LDM3Nzg4LDM3Nzg5LDM3NzkwLDM3NzkxLDM3NzkyLDM3NzkzLDM3Nzk0LDM3Nzk1LDM3Nzk2LDM3Nzk3LDM3Nzk4LDM3Nzk5LDM3ODAw''@;'; put 'put ''LDM3ODAxLDM3ODAyLDM3ODAzLDM3ODA0LDM3ODA1LDM3ODA2LDM3ODA3LDM3ODA4LDM3ODA5LDM3ODEwLDM3ODExLDM3ODEyLDM3ODEzLDM3ODE0LDM3ODE1LDM3ODE2LDM3ODE3LDM3ODE4LDM3ODE5LDM3ODIwLDM3ODIxLDM3ODIyLDM3ODIzLDM3ODI0LDM3ODI1LDM3ODI2LDM3ODI3LDM3''@;'; put 'put ''ODI4LDM3ODI5LDM3ODMwLDM3ODMxLDM3ODMyLDM3ODMzLDM3ODM1LDM3ODM2LDM3ODM3LDIyOTM1LDIyOTg2LDIyOTU1LDIyOTQyLDIyOTQ4LDIyOTk0LDIyOTYyLDIyOTU5LDIyOTk5LDIyOTc0LDIzMDQ1LDIzMDQ2LDIzMDA1LDIzMDQ4LDIzMDExLDIzZTMsMjMwMzMsMjMwNTIsMjMwNDks''@;'; put 'put ''MjMwOTAsMjMwOTIsMjMwNTcsMjMwNzUsMjMwNTksMjMxMDQsMjMxNDMsMjMxMTQsMjMxMjUsMjMxMDAsMjMxMzgsMjMxNTcsMzMwMDQsMjMyMTAsMjMxOTUsMjMxNTksMjMxNjIsMjMyMzAsMjMyNzUsMjMyMTgsMjMyNTAsMjMyNTIsMjMyMjQsMjMyNjQsMjMyNjcsMjMyODEsMjMyNTQsMjMy''@;'; put 'put ''NzAsMjMyNTYsMjMyNjAsMjMzMDUsMjMzMTksMjMzMTgsMjMzNDYsMjMzNTEsMjMzNjAsMjM1NzMsMjM1ODAsMjMzODYsMjMzOTcsMjM0MTEsMjMzNzcsMjMzNzksMjMzOTQsMzk1NDEsMzk1NDMsMzk1NDQsMzk1NDYsMzk1NTEsMzk1NDksMzk1NTIsMzk1NTMsMzk1NTcsMzk1NjAsMzk1NjIs''@;'; put 'put ''Mzk1NjgsMzk1NzAsMzk1NzEsMzk1NzQsMzk1NzYsMzk1NzksMzk1ODAsMzk1ODEsMzk1ODMsMzk1ODQsMzk1ODYsMzk1ODcsMzk1ODksMzk1OTEsMzI0MTUsMzI0MTcsMzI0MTksMzI0MjEsMzI0MjQsMzI0MjUsMzc4MzgsMzc4MzksMzc4NDAsMzc4NDEsMzc4NDIsMzc4NDMsMzc4NDQsMzc4''@;'; put 'put ''NDUsMzc4NDcsMzc4NDgsMzc4NDksMzc4NTAsMzc4NTEsMzc4NTIsMzc4NTMsMzc4NTQsMzc4NTUsMzc4NTYsMzc4NTcsMzc4NTgsMzc4NTksMzc4NjAsMzc4NjEsMzc4NjIsMzc4NjMsMzc4NjQsMzc4NjUsMzc4NjYsMzc4NjcsMzc4NjgsMzc4NjksMzc4NzAsMzc4NzEsMzc4NzIsMzc4NzMs''@;'; put 'put ''Mzc4NzQsMzc4NzUsMzc4NzYsMzc4NzcsMzc4NzgsMzc4NzksMzc4ODAsMzc4ODEsMzc4ODIsMzc4ODMsMzc4ODQsMzc4ODUsMzc4ODYsMzc4ODcsMzc4ODgsMzc4ODksMzc4OTAsMzc4OTEsMzc4OTIsMzc4OTMsMzc4OTQsMzc4OTUsMzc4OTYsMzc4OTcsMzc4OTgsMzc4OTksMzc5MDAsMzc5''@;'; put 'put ''MDEsMzc5MDIsMzc5MDMsMzc5MDQsMzc5MDUsMzc5MDYsMzc5MDcsMzc5MDgsMzc5MDksMzc5MTAsMzc5MTEsMzc5MTIsMzc5MTMsMzc5MTQsMzc5MTUsMzc5MTYsMzc5MTcsMzc5MTgsMzc5MTksMzc5MjAsMzc5MjEsMzc5MjIsMzc5MjMsMzc5MjQsMzc5MjUsMzc5MjYsMzc5MjcsMzc5Mjgs''@;'; put 'put ''Mzc5MjksMzc5MzAsMzc5MzEsMzc5MzIsMzc5MzMsMzc5MzQsMzI0MjksMzI0MzIsMzI0NDYsMzI0NDgsMzI0NDksMzI0NTAsMzI0NTcsMzI0NTksMzI0NjAsMzI0NjQsMzI0NjgsMzI0NzEsMzI0NzUsMzI0ODAsMzI0ODEsMzI0ODgsMzI0OTEsMzI0OTQsMzI0OTUsMzI0OTcsMzI0OTgsMzI1''@;'; put 'put ''MjUsMzI1MDIsMzI1MDYsMzI1MDcsMzI1MTAsMzI1MTMsMzI1MTQsMzI1MTUsMzI1MTksMzI1MjAsMzI1MjMsMzI1MjQsMzI1MjcsMzI1MjksMzI1MzAsMzI1MzUsMzI1MzcsMzI1NDAsMzI1MzksMzI1NDMsMzI1NDUsMzI1NDYsMzI1NDcsMzI1NDgsMzI1NDksMzI1NTAsMzI1NTEsMzI1NTQs''@;'; put 'put ''MzI1NTUsMzI1NTYsMzI1NTcsMzI1NTksMzI1NjAsMzI1NjEsMzI1NjIsMzI1NjMsMzI1NjUsMjQxODYsMzAwNzksMjQwMjcsMzAwMTQsMzcwMTMsMjk1ODIsMjk1ODUsMjk2MTQsMjk2MDIsMjk1OTksMjk2NDcsMjk2MzQsMjk2NDksMjk2MjMsMjk2MTksMjk2MzIsMjk2NDEsMjk2NDAsMjk2''@;'; put 'put ''NjksMjk2NTcsMzkwMzYsMjk3MDYsMjk2NzMsMjk2NzEsMjk2NjIsMjk2MjYsMjk2ODIsMjk3MTEsMjk3MzgsMjk3ODcsMjk3MzQsMjk3MzMsMjk3MzYsMjk3NDQsMjk3NDIsMjk3NDAsMzc5MzUsMzc5MzYsMzc5MzcsMzc5MzgsMzc5MzksMzc5NDAsMzc5NDEsMzc5NDIsMzc5NDMsMzc5NDQs''@;'; put 'put ''Mzc5NDUsMzc5NDYsMzc5NDcsMzc5NDgsMzc5NDksMzc5NTEsMzc5NTIsMzc5NTMsMzc5NTQsMzc5NTUsMzc5NTYsMzc5NTcsMzc5NTgsMzc5NTksMzc5NjAsMzc5NjEsMzc5NjIsMzc5NjMsMzc5NjQsMzc5NjUsMzc5NjYsMzc5NjcsMzc5NjgsMzc5NjksMzc5NzAsMzc5NzEsMzc5NzIsMzc5''@;'; put 'put ''NzMsMzc5NzQsMzc5NzUsMzc5NzYsMzc5NzcsMzc5NzgsMzc5NzksMzc5ODAsMzc5ODEsMzc5ODIsMzc5ODMsMzc5ODQsMzc5ODUsMzc5ODYsMzc5ODcsMzc5ODgsMzc5ODksMzc5OTAsMzc5OTEsMzc5OTIsMzc5OTMsMzc5OTQsMzc5OTYsMzc5OTcsMzc5OTgsMzc5OTksMzhlMywzODAwMSwz''@;'; put 'put ''ODAwMiwzODAwMywzODAwNCwzODAwNSwzODAwNiwzODAwNywzODAwOCwzODAwOSwzODAxMCwzODAxMSwzODAxMiwzODAxMywzODAxNCwzODAxNSwzODAxNiwzODAxNywzODAxOCwzODAxOSwzODAyMCwzODAzMywzODAzOCwzODA0MCwzODA4NywzODA5NSwzODA5OSwzODEwMCwzODEwNiwzODEx''@;'; put 'put ''OCwzODEzOSwzODE3MiwzODE3NiwyOTcyMywyOTcyMiwyOTc2MSwyOTc4OCwyOTc4MywyOTc4MSwyOTc4NSwyOTgxNSwyOTgwNSwyOTgyMiwyOTg1MiwyOTgzOCwyOTgyNCwyOTgyNSwyOTgzMSwyOTgzNSwyOTg1NCwyOTg2NCwyOTg2NSwyOTg0MCwyOTg2MywyOTkwNiwyOTg4MiwzODg5MCwz''@;'; put 'put ''ODg5MSwzODg5MiwyNjQ0NCwyNjQ1MSwyNjQ2MiwyNjQ0MCwyNjQ3MywyNjUzMywyNjUwMywyNjQ3NCwyNjQ4MywyNjUyMCwyNjUzNSwyNjQ4NSwyNjUzNiwyNjUyNiwyNjU0MSwyNjUwNywyNjQ4NywyNjQ5MiwyNjYwOCwyNjYzMywyNjU4NCwyNjYzNCwyNjYwMSwyNjU0NCwyNjYzNiwyNjU4''@;'; put 'put ''NSwyNjU0OSwyNjU4NiwyNjU0NywyNjU4OSwyNjYyNCwyNjU2MywyNjU1MiwyNjU5NCwyNjYzOCwyNjU2MSwyNjYyMSwyNjY3NCwyNjY3NSwyNjcyMCwyNjcyMSwyNjcwMiwyNjcyMiwyNjY5MiwyNjcyNCwyNjc1NSwyNjY1MywyNjcwOSwyNjcyNiwyNjY4OSwyNjcyNywyNjY4OCwyNjY4Niwy''@;'; put 'put ''NjY5OCwyNjY5NywyNjY2NSwyNjgwNSwyNjc2NywyNjc0MCwyNjc0MywyNjc3MSwyNjczMSwyNjgxOCwyNjk5MCwyNjg3NiwyNjkxMSwyNjkxMiwyNjg3MywzODE4MywzODE5NSwzODIwNSwzODIxMSwzODIxNiwzODIxOSwzODIyOSwzODIzNCwzODI0MCwzODI1NCwzODI2MCwzODI2MSwzODI2''@;'; put 'put ''MywzODI2NCwzODI2NSwzODI2NiwzODI2NywzODI2OCwzODI2OSwzODI3MCwzODI3MiwzODI3MywzODI3NCwzODI3NSwzODI3NiwzODI3NywzODI3OCwzODI3OSwzODI4MCwzODI4MSwzODI4MiwzODI4MywzODI4NCwzODI4NSwzODI4NiwzODI4NywzODI4OCwzODI4OSwzODI5MCwzODI5MSwz''@;'; put 'put ''ODI5MiwzODI5MywzODI5NCwzODI5NSwzODI5NiwzODI5NywzODI5OCwzODI5OSwzODMwMCwzODMwMSwzODMwMiwzODMwMywzODMwNCwzODMwNSwzODMwNiwzODMwNywzODMwOCwzODMwOSwzODMxMCwzODMxMSwzODMxMiwzODMxMywzODMxNCwzODMxNSwzODMxNiwzODMxNywzODMxOCwzODMx''@;'; put 'put ''OSwzODMyMCwzODMyMSwzODMyMiwzODMyMywzODMyNCwzODMyNSwzODMyNiwzODMyNywzODMyOCwzODMyOSwzODMzMCwzODMzMSwzODMzMiwzODMzMywzODMzNCwzODMzNSwzODMzNiwzODMzNywzODMzOCwzODMzOSwzODM0MCwzODM0MSwzODM0MiwzODM0MywzODM0NCwzODM0NSwzODM0Niwz''@;'; put 'put ''ODM0NywyNjkxNiwyNjg2NCwyNjg5MSwyNjg4MSwyNjk2NywyNjg1MSwyNjg5NiwyNjk5MywyNjkzNywyNjk3NiwyNjk0NiwyNjk3MywyNzAxMiwyNjk4NywyNzAwOCwyNzAzMiwyN2UzLDI2OTMyLDI3MDg0LDI3MDE1LDI3MDE2LDI3MDg2LDI3MDE3LDI2OTgyLDI2OTc5LDI3MDAxLDI3MDM1''@;'; put 'put ''LDI3MDQ3LDI3MDY3LDI3MDUxLDI3MDUzLDI3MDkyLDI3MDU3LDI3MDczLDI3MDgyLDI3MTAzLDI3MDI5LDI3MTA0LDI3MDIxLDI3MTM1LDI3MTgzLDI3MTE3LDI3MTU5LDI3MTYwLDI3MjM3LDI3MTIyLDI3MjA0LDI3MTk4LDI3Mjk2LDI3MjE2LDI3MjI3LDI3MTg5LDI3Mjc4LDI3MjU3LDI3''@;'; put 'put ''MTk3LDI3MTc2LDI3MjI0LDI3MjYwLDI3MjgxLDI3MjgwLDI3MzA1LDI3Mjg3LDI3MzA3LDI5NDk1LDI5NTIyLDI3NTIxLDI3NTIyLDI3NTI3LDI3NTI0LDI3NTM4LDI3NTM5LDI3NTMzLDI3NTQ2LDI3NTQ3LDI3NTUzLDI3NTYyLDM2NzE1LDM2NzE3LDM2NzIxLDM2NzIyLDM2NzIzLDM2NzI1''@;'; put 'put ''LDM2NzI2LDM2NzI4LDM2NzI3LDM2NzI5LDM2NzMwLDM2NzMyLDM2NzM0LDM2NzM3LDM2NzM4LDM2NzQwLDM2NzQzLDM2NzQ3LDM4MzQ4LDM4MzQ5LDM4MzUwLDM4MzUxLDM4MzUyLDM4MzUzLDM4MzU0LDM4MzU1LDM4MzU2LDM4MzU3LDM4MzU4LDM4MzU5LDM4MzYwLDM4MzYxLDM4MzYyLDM4''@;'; put 'put ''MzYzLDM4MzY0LDM4MzY1LDM4MzY2LDM4MzY3LDM4MzY4LDM4MzY5LDM4MzcwLDM4MzcxLDM4MzcyLDM4MzczLDM4Mzc0LDM4Mzc1LDM4MzgwLDM4Mzk5LDM4NDA3LDM4NDE5LDM4NDI0LDM4NDI3LDM4NDMwLDM4NDMyLDM4NDM1LDM4NDM2LDM4NDM3LDM4NDM4LDM4NDM5LDM4NDQwLDM4NDQx''@;'; put 'put ''LDM4NDQzLDM4NDQ0LDM4NDQ1LDM4NDQ3LDM4NDQ4LDM4NDU1LDM4NDU2LDM4NDU3LDM4NDU4LDM4NDYyLDM4NDY1LDM4NDY3LDM4NDc0LDM4NDc4LDM4NDc5LDM4NDgxLDM4NDgyLDM4NDgzLDM4NDg2LDM4NDg3LDM4NDg4LDM4NDg5LDM4NDkwLDM4NDkyLDM4NDkzLDM4NDk0LDM4NDk2LDM4''@;'; put 'put ''NDk5LDM4NTAxLDM4NTAyLDM4NTA3LDM4NTA5LDM4NTEwLDM4NTExLDM4NTEyLDM4NTEzLDM4NTE1LDM4NTIwLDM4NTIxLDM4NTIyLDM4NTIzLDM4NTI0LDM4NTI1LDM4NTI2LDM4NTI3LDM4NTI4LDM4NTI5LDM4NTMwLDM4NTMxLDM4NTMyLDM4NTM1LDM4NTM3LDM4NTM4LDM2NzQ5LDM2NzUw''@;'; put 'put ''LDM2NzUxLDM2NzYwLDM2NzYyLDM2NTU4LDI1MDk5LDI1MTExLDI1MTE1LDI1MTE5LDI1MTIyLDI1MTIxLDI1MTI1LDI1MTI0LDI1MTMyLDMzMjU1LDI5OTM1LDI5OTQwLDI5OTUxLDI5OTY3LDI5OTY5LDI5OTcxLDI1OTA4LDI2MDk0LDI2MDk1LDI2MDk2LDI2MTIyLDI2MTM3LDI2NDgyLDI2''@;'; put 'put ''MTE1LDI2MTMzLDI2MTEyLDI4ODA1LDI2MzU5LDI2MTQxLDI2MTY0LDI2MTYxLDI2MTY2LDI2MTY1LDMyNzc0LDI2MjA3LDI2MTk2LDI2MTc3LDI2MTkxLDI2MTk4LDI2MjA5LDI2MTk5LDI2MjMxLDI2MjQ0LDI2MjUyLDI2Mjc5LDI2MjY5LDI2MzAyLDI2MzMxLDI2MzMyLDI2MzQyLDI2MzQ1''@;'; put 'put ''LDM2MTQ2LDM2MTQ3LDM2MTUwLDM2MTU1LDM2MTU3LDM2MTYwLDM2MTY1LDM2MTY2LDM2MTY4LDM2MTY5LDM2MTY3LDM2MTczLDM2MTgxLDM2MTg1LDM1MjcxLDM1Mjc0LDM1Mjc1LDM1Mjc2LDM1Mjc4LDM1Mjc5LDM1MjgwLDM1MjgxLDI5Mjk0LDI5MzQzLDI5Mjc3LDI5Mjg2LDI5Mjk1LDI5''@;'; put 'put ''MzEwLDI5MzExLDI5MzE2LDI5MzIzLDI5MzI1LDI5MzI3LDI5MzMwLDI1MzUyLDI1Mzk0LDI1NTIwLDM4NTQwLDM4NTQyLDM4NTQ1LDM4NTQ2LDM4NTQ3LDM4NTQ5LDM4NTUwLDM4NTU0LDM4NTU1LDM4NTU3LDM4NTU4LDM4NTU5LDM4NTYwLDM4NTYxLDM4NTYyLDM4NTYzLDM4NTY0LDM4NTY1''@;'; put 'put ''LDM4NTY2LDM4NTY4LDM4NTY5LDM4NTcwLDM4NTcxLDM4NTcyLDM4NTczLDM4NTc0LDM4NTc1LDM4NTc3LDM4NTc4LDM4NTgwLDM4NTgxLDM4NTgzLDM4NTg0LDM4NTg2LDM4NTg3LDM4NTkxLDM4NTk0LDM4NTk1LDM4NjAwLDM4NjAyLDM4NjAzLDM4NjA4LDM4NjA5LDM4NjExLDM4NjEyLDM4''@;'; put 'put ''NjE0LDM4NjE1LDM4NjE2LDM4NjE3LDM4NjE4LDM4NjE5LDM4NjIwLDM4NjIxLDM4NjIyLDM4NjIzLDM4NjI1LDM4NjI2LDM4NjI3LDM4NjI4LDM4NjI5LDM4NjMwLDM4NjMxLDM4NjM1LDM4NjM2LDM4NjM3LDM4NjM4LDM4NjQwLDM4NjQxLDM4NjQyLDM4NjQ0LDM4NjQ1LDM4NjQ4LDM4NjUw''@;'; put 'put ''LDM4NjUxLDM4NjUyLDM4NjUzLDM4NjU1LDM4NjU4LDM4NjU5LDM4NjYxLDM4NjY2LDM4NjY3LDM4NjY4LDM4NjcyLDM4NjczLDM4Njc0LDM4Njc2LDM4Njc3LDM4Njc5LDM4NjgwLDM4NjgxLDM4NjgyLDM4NjgzLDM4Njg1LDM4Njg3LDM4Njg4LDI1NjYzLDI1ODE2LDMyNzcyLDI3NjI2LDI3''@;'; put 'put ''NjM1LDI3NjQ1LDI3NjM3LDI3NjQxLDI3NjUzLDI3NjU1LDI3NjU0LDI3NjYxLDI3NjY5LDI3NjcyLDI3NjczLDI3Njc0LDI3NjgxLDI3Njg5LDI3Njg0LDI3NjkwLDI3Njk4LDI1OTA5LDI1OTQxLDI1OTYzLDI5MjYxLDI5MjY2LDI5MjcwLDI5MjMyLDM0NDAyLDIxMDE0LDMyOTI3LDMyOTI0''@;'; put 'put ''LDMyOTE1LDMyOTU2LDI2Mzc4LDMyOTU3LDMyOTQ1LDMyOTM5LDMyOTQxLDMyOTQ4LDMyOTUxLDMyOTk5LDMzZTMsMzMwMDEsMzMwMDIsMzI5ODcsMzI5NjIsMzI5NjQsMzI5ODUsMzI5NzMsMzI5ODMsMjYzODQsMzI5ODksMzMwMDMsMzMwMDksMzMwMTIsMzMwMDUsMzMwMzcsMzMwMzgsMzMw''@;'; put 'put ''MTAsMzMwMjAsMjYzODksMzMwNDIsMzU5MzAsMzMwNzgsMzMwNTQsMzMwNjgsMzMwNDgsMzMwNzQsMzMwOTYsMzMxMDAsMzMxMDcsMzMxNDAsMzMxMTMsMzMxMTQsMzMxMzcsMzMxMjAsMzMxMjksMzMxNDgsMzMxNDksMzMxMzMsMzMxMjcsMjI2MDUsMjMyMjEsMzMxNjAsMzMxNTQsMzMxNjks''@;'; put 'put ''MjgzNzMsMzMxODcsMzMxOTQsMzMyMjgsMjY0MDYsMzMyMjYsMzMyMTEsMzg2ODksMzg2OTAsMzg2OTEsMzg2OTIsMzg2OTMsMzg2OTQsMzg2OTUsMzg2OTYsMzg2OTcsMzg2OTksMzg3MDAsMzg3MDIsMzg3MDMsMzg3MDUsMzg3MDcsMzg3MDgsMzg3MDksMzg3MTAsMzg3MTEsMzg3MTQsMzg3''@;'; put 'put ''MTUsMzg3MTYsMzg3MTcsMzg3MTksMzg3MjAsMzg3MjEsMzg3MjIsMzg3MjMsMzg3MjQsMzg3MjUsMzg3MjYsMzg3MjcsMzg3MjgsMzg3MjksMzg3MzAsMzg3MzEsMzg3MzIsMzg3MzMsMzg3MzQsMzg3MzUsMzg3MzYsMzg3MzcsMzg3NDAsMzg3NDEsMzg3NDMsMzg3NDQsMzg3NDYsMzg3NDgs''@;'; put 'put ''Mzg3NDksMzg3NTEsMzg3NTUsMzg3NTYsMzg3NTgsMzg3NTksMzg3NjAsMzg3NjIsMzg3NjMsMzg3NjQsMzg3NjUsMzg3NjYsMzg3NjcsMzg3NjgsMzg3NjksMzg3NzAsMzg3NzMsMzg3NzUsMzg3NzYsMzg3NzcsMzg3NzgsMzg3NzksMzg3ODEsMzg3ODIsMzg3ODMsMzg3ODQsMzg3ODUsMzg3''@;'; put 'put ''ODYsMzg3ODcsMzg3ODgsMzg3OTAsMzg3OTEsMzg3OTIsMzg3OTMsMzg3OTQsMzg3OTYsMzg3OTgsMzg3OTksMzg4MDAsMzg4MDMsMzg4MDUsMzg4MDYsMzg4MDcsMzg4MDksMzg4MTAsMzg4MTEsMzg4MTIsMzg4MTMsMzMyMTcsMzMxOTAsMjc0MjgsMjc0NDcsMjc0NDksMjc0NTksMjc0NjIs''@;'; put 'put ''Mjc0ODEsMzkxMjEsMzkxMjIsMzkxMjMsMzkxMjUsMzkxMjksMzkxMzAsMjc1NzEsMjQzODQsMjc1ODYsMzUzMTUsMjZlMyw0MDc4NSwyNjAwMywyNjA0NCwyNjA1NCwyNjA1MiwyNjA1MSwyNjA2MCwyNjA2MiwyNjA2NiwyNjA3MCwyODgwMCwyODgyOCwyODgyMiwyODgyOSwyODg1OSwyODg2''@;'; put 'put ''NCwyODg1NSwyODg0MywyODg0OSwyODkwNCwyODg3NCwyODk0NCwyODk0NywyODk1MCwyODk3NSwyODk3NywyOTA0MywyOTAyMCwyOTAzMiwyODk5NywyOTA0MiwyOTAwMiwyOTA0OCwyOTA1MCwyOTA4MCwyOTEwNywyOTEwOSwyOTA5NiwyOTA4OCwyOTE1MiwyOTE0MCwyOTE1OSwyOTE3Nywy''@;'; put 'put ''OTIxMywyOTIyNCwyODc4MCwyODk1MiwyOTAzMCwyOTExMywyNTE1MCwyNTE0OSwyNTE1NSwyNTE2MCwyNTE2MSwzMTAzNSwzMTA0MCwzMTA0NiwzMTA0OSwzMTA2NywzMTA2OCwzMTA1OSwzMTA2NiwzMTA3NCwzMTA2MywzMTA3MiwzMTA4NywzMTA3OSwzMTA5OCwzMTEwOSwzMTExNCwzMTEz''@;'; put 'put ''MCwzMTE0MywzMTE1NSwyNDUyOSwyNDUyOCwzODgxNCwzODgxNSwzODgxNywzODgxOCwzODgyMCwzODgyMSwzODgyMiwzODgyMywzODgyNCwzODgyNSwzODgyNiwzODgyOCwzODgzMCwzODgzMiwzODgzMywzODgzNSwzODgzNywzODgzOCwzODgzOSwzODg0MCwzODg0MSwzODg0MiwzODg0Mywz''@;'; put 'put ''ODg0NCwzODg0NSwzODg0NiwzODg0NywzODg0OCwzODg0OSwzODg1MCwzODg1MSwzODg1MiwzODg1MywzODg1NCwzODg1NSwzODg1NiwzODg1NywzODg1OCwzODg1OSwzODg2MCwzODg2MSwzODg2MiwzODg2MywzODg2NCwzODg2NSwzODg2NiwzODg2NywzODg2OCwzODg2OSwzODg3MCwzODg3''@;'; put 'put ''MSwzODg3MiwzODg3MywzODg3NCwzODg3NSwzODg3NiwzODg3NywzODg3OCwzODg3OSwzODg4MCwzODg4MSwzODg4MiwzODg4MywzODg4NCwzODg4NSwzODg4OCwzODg5NCwzODg5NSwzODg5NiwzODg5NywzODg5OCwzODkwMCwzODkwMywzODkwNCwzODkwNSwzODkwNiwzODkwNywzODkwOCwz''@;'; put 'put ''ODkwOSwzODkxMCwzODkxMSwzODkxMiwzODkxMywzODkxNCwzODkxNSwzODkxNiwzODkxNywzODkxOCwzODkxOSwzODkyMCwzODkyMSwzODkyMiwzODkyMywzODkyNCwzODkyNSwzODkyNiwyNDYzNiwyNDY2OSwyNDY2NiwyNDY3OSwyNDY0MSwyNDY2NSwyNDY3NSwyNDc0NywyNDgzOCwyNDg0''@;'; put 'put ''NSwyNDkyNSwyNTAwMSwyNDk4OSwyNTAzNSwyNTA0MSwyNTA5NCwzMjg5NiwzMjg5NSwyNzc5NSwyNzg5NCwyODE1NiwzMDcxMCwzMDcxMiwzMDcyMCwzMDcyOSwzMDc0MywzMDc0NCwzMDczNywyNjAyNywzMDc2NSwzMDc0OCwzMDc0OSwzMDc3NywzMDc3OCwzMDc3OSwzMDc1MSwzMDc4MCwz''@;'; put 'put ''MDc1NywzMDc2NCwzMDc1NSwzMDc2MSwzMDc5OCwzMDgyOSwzMDgwNiwzMDgwNywzMDc1OCwzMDgwMCwzMDc5MSwzMDc5NiwzMDgyNiwzMDg3NSwzMDg2NywzMDg3NCwzMDg1NSwzMDg3NiwzMDg4MSwzMDg4MywzMDg5OCwzMDkwNSwzMDg4NSwzMDkzMiwzMDkzNywzMDkyMSwzMDk1NiwzMDk2''@;'; put 'put ''MiwzMDk4MSwzMDk2NCwzMDk5NSwzMTAxMiwzMTAwNiwzMTAyOCw0MDg1OSw0MDY5Nyw0MDY5OSw0MDcwMCwzMDQ0OSwzMDQ2OCwzMDQ3NywzMDQ1NywzMDQ3MSwzMDQ3MiwzMDQ5MCwzMDQ5OCwzMDQ4OSwzMDUwOSwzMDUwMiwzMDUxNywzMDUyMCwzMDU0NCwzMDU0NSwzMDUzNSwzMDUzMSwz''@;'; put 'put ''MDU1NCwzMDU2OCwzODkyNywzODkyOCwzODkyOSwzODkzMCwzODkzMSwzODkzMiwzODkzMywzODkzNCwzODkzNSwzODkzNiwzODkzNywzODkzOCwzODkzOSwzODk0MCwzODk0MSwzODk0MiwzODk0MywzODk0NCwzODk0NSwzODk0NiwzODk0NywzODk0OCwzODk0OSwzODk1MCwzODk1MSwzODk1''@;'; put 'put ''MiwzODk1MywzODk1NCwzODk1NSwzODk1NiwzODk1NywzODk1OCwzODk1OSwzODk2MCwzODk2MSwzODk2MiwzODk2MywzODk2NCwzODk2NSwzODk2NiwzODk2NywzODk2OCwzODk2OSwzODk3MCwzODk3MSwzODk3MiwzODk3MywzODk3NCwzODk3NSwzODk3NiwzODk3NywzODk3OCwzODk3OSwz''@;'; put 'put ''ODk4MCwzODk4MSwzODk4MiwzODk4MywzODk4NCwzODk4NSwzODk4NiwzODk4NywzODk4OCwzODk4OSwzODk5MCwzODk5MSwzODk5MiwzODk5MywzODk5NCwzODk5NSwzODk5NiwzODk5NywzODk5OCwzODk5OSwzOWUzLDM5MDAxLDM5MDAyLDM5MDAzLDM5MDA0LDM5MDA1LDM5MDA2LDM5MDA3''@;'; put 'put ''LDM5MDA4LDM5MDA5LDM5MDEwLDM5MDExLDM5MDEyLDM5MDEzLDM5MDE0LDM5MDE1LDM5MDE2LDM5MDE3LDM5MDE4LDM5MDE5LDM5MDIwLDM5MDIxLDM5MDIyLDMwNTYyLDMwNTY1LDMwNTkxLDMwNjA1LDMwNTg5LDMwNTkyLDMwNjA0LDMwNjA5LDMwNjIzLDMwNjI0LDMwNjQwLDMwNjQ1LDMw''@;'; put 'put ''NjUzLDMwMDEwLDMwMDE2LDMwMDMwLDMwMDI3LDMwMDI0LDMwMDQzLDMwMDY2LDMwMDczLDMwMDgzLDMyNjAwLDMyNjA5LDMyNjA3LDM1NDAwLDMyNjE2LDMyNjI4LDMyNjI1LDMyNjMzLDMyNjQxLDMyNjM4LDMwNDEzLDMwNDM3LDM0ODY2LDM4MDIxLDM4MDIyLDM4MDIzLDM4MDI3LDM4MDI2''@;'; put 'put ''LDM4MDI4LDM4MDI5LDM4MDMxLDM4MDMyLDM4MDM2LDM4MDM5LDM4MDM3LDM4MDQyLDM4MDQzLDM4MDQ0LDM4MDUxLDM4MDUyLDM4MDU5LDM4MDU4LDM4MDYxLDM4MDYwLDM4MDYzLDM4MDY0LDM4MDY2LDM4MDY4LDM4MDcwLDM4MDcxLDM4MDcyLDM4MDczLDM4MDc0LDM4MDc2LDM4MDc3LDM4''@;'; put 'put ''MDc5LDM4MDg0LDM4MDg4LDM4MDg5LDM4MDkwLDM4MDkxLDM4MDkyLDM4MDkzLDM4MDk0LDM4MDk2LDM4MDk3LDM4MDk4LDM4MTAxLDM4MTAyLDM4MTAzLDM4MTA1LDM4MTA0LDM4MTA3LDM4MTEwLDM4MTExLDM4MTEyLDM4MTE0LDM4MTE2LDM4MTE3LDM4MTE5LDM4MTIwLDM4MTIyLDM5MDIz''@;'; put 'put ''LDM5MDI0LDM5MDI1LDM5MDI2LDM5MDI3LDM5MDI4LDM5MDUxLDM5MDU0LDM5MDU4LDM5MDYxLDM5MDY1LDM5MDc1LDM5MDgwLDM5MDgxLDM5MDgyLDM5MDgzLDM5MDg0LDM5MDg1LDM5MDg2LDM5MDg3LDM5MDg4LDM5MDg5LDM5MDkwLDM5MDkxLDM5MDkyLDM5MDkzLDM5MDk0LDM5MDk1LDM5''@;'; put 'put ''MDk2LDM5MDk3LDM5MDk4LDM5MDk5LDM5MTAwLDM5MTAxLDM5MTAyLDM5MTAzLDM5MTA0LDM5MTA1LDM5MTA2LDM5MTA3LDM5MTA4LDM5MTA5LDM5MTEwLDM5MTExLDM5MTEyLDM5MTEzLDM5MTE0LDM5MTE1LDM5MTE2LDM5MTE3LDM5MTE5LDM5MTIwLDM5MTI0LDM5MTI2LDM5MTI3LDM5MTMx''@;'; put 'put ''LDM5MTMyLDM5MTMzLDM5MTM2LDM5MTM3LDM5MTM4LDM5MTM5LDM5MTQwLDM5MTQxLDM5MTQyLDM5MTQ1LDM5MTQ2LDM5MTQ3LDM5MTQ4LDM5MTQ5LDM5MTUwLDM5MTUxLDM5MTUyLDM5MTUzLDM5MTU0LDM5MTU1LDM5MTU2LDM5MTU3LDM5MTU4LDM5MTU5LDM5MTYwLDM5MTYxLDM5MTYyLDM5''@;'; put 'put ''MTYzLDM5MTY0LDM5MTY1LDM5MTY2LDM5MTY3LDM5MTY4LDM5MTY5LDM5MTcwLDM5MTcxLDM5MTcyLDM5MTczLDM5MTc0LDM5MTc1LDM4MTIxLDM4MTIzLDM4MTI2LDM4MTI3LDM4MTMxLDM4MTMyLDM4MTMzLDM4MTM1LDM4MTM3LDM4MTQwLDM4MTQxLDM4MTQzLDM4MTQ3LDM4MTQ2LDM4MTUw''@;'; put 'put ''LDM4MTUxLDM4MTUzLDM4MTU0LDM4MTU3LDM4MTU4LDM4MTU5LDM4MTYyLDM4MTYzLDM4MTY0LDM4MTY1LDM4MTY2LDM4MTY4LDM4MTcxLDM4MTczLDM4MTc0LDM4MTc1LDM4MTc4LDM4MTg2LDM4MTg3LDM4MTg1LDM4MTg4LDM4MTkzLDM4MTk0LDM4MTk2LDM4MTk4LDM4MTk5LDM4MjAwLDM4''@;'; put 'put ''MjA0LDM4MjA2LDM4MjA3LDM4MjEwLDM4MTk3LDM4MjEyLDM4MjEzLDM4MjE0LDM4MjE3LDM4MjIwLDM4MjIyLDM4MjIzLDM4MjI2LDM4MjI3LDM4MjI4LDM4MjMwLDM4MjMxLDM4MjMyLDM4MjMzLDM4MjM1LDM4MjM4LDM4MjM5LDM4MjM3LDM4MjQxLDM4MjQyLDM4MjQ0LDM4MjQ1LDM4MjQ2''@;'; put 'put ''LDM4MjQ3LDM4MjQ4LDM4MjQ5LDM4MjUwLDM4MjUxLDM4MjUyLDM4MjU1LDM4MjU3LDM4MjU4LDM4MjU5LDM4MjAyLDMwNjk1LDMwNzAwLDM4NjAxLDMxMTg5LDMxMjEzLDMxMjAzLDMxMjExLDMxMjM4LDIzODc5LDMxMjM1LDMxMjM0LDMxMjYyLDMxMjUyLDM5MTc2LDM5MTc3LDM5MTc4LDM5''@;'; put 'put ''MTc5LDM5MTgwLDM5MTgyLDM5MTgzLDM5MTg1LDM5MTg2LDM5MTg3LDM5MTg4LDM5MTg5LDM5MTkwLDM5MTkxLDM5MTkyLDM5MTkzLDM5MTk0LDM5MTk1LDM5MTk2LDM5MTk3LDM5MTk4LDM5MTk5LDM5MjAwLDM5MjAxLDM5MjAyLDM5MjAzLDM5MjA0LDM5MjA1LDM5MjA2LDM5MjA3LDM5MjA4''@;'; put 'put ''LDM5MjA5LDM5MjEwLDM5MjExLDM5MjEyLDM5MjEzLDM5MjE1LDM5MjE2LDM5MjE3LDM5MjE4LDM5MjE5LDM5MjIwLDM5MjIxLDM5MjIyLDM5MjIzLDM5MjI0LDM5MjI1LDM5MjI2LDM5MjI3LDM5MjI4LDM5MjI5LDM5MjMwLDM5MjMxLDM5MjMyLDM5MjMzLDM5MjM0LDM5MjM1LDM5MjM2LDM5''@;'; put 'put ''MjM3LDM5MjM4LDM5MjM5LDM5MjQwLDM5MjQxLDM5MjQyLDM5MjQzLDM5MjQ0LDM5MjQ1LDM5MjQ2LDM5MjQ3LDM5MjQ4LDM5MjQ5LDM5MjUwLDM5MjUxLDM5MjU0LDM5MjU1LDM5MjU2LDM5MjU3LDM5MjU4LDM5MjU5LDM5MjYwLDM5MjYxLDM5MjYyLDM5MjYzLDM5MjY0LDM5MjY1LDM5MjY2''@;'; put 'put ''LDM5MjY4LDM5MjcwLDM5MjgzLDM5Mjg4LDM5Mjg5LDM5MjkxLDM5Mjk0LDM5Mjk4LDM5Mjk5LDM5MzA1LDMxMjg5LDMxMjg3LDMxMzEzLDQwNjU1LDM5MzMzLDMxMzQ0LDMwMzQ0LDMwMzUwLDMwMzU1LDMwMzYxLDMwMzcyLDI5OTE4LDI5OTIwLDI5OTk2LDQwNDgwLDQwNDgyLDQwNDg4LDQw''@;'; put 'put ''NDg5LDQwNDkwLDQwNDkxLDQwNDkyLDQwNDk4LDQwNDk3LDQwNTAyLDQwNTA0LDQwNTAzLDQwNTA1LDQwNTA2LDQwNTEwLDQwNTEzLDQwNTE0LDQwNTE2LDQwNTE4LDQwNTE5LDQwNTIwLDQwNTIxLDQwNTIzLDQwNTI0LDQwNTI2LDQwNTI5LDQwNTMzLDQwNTM1LDQwNTM4LDQwNTM5LDQwNTQw''@;'; put 'put ''LDQwNTQyLDQwNTQ3LDQwNTUwLDQwNTUxLDQwNTUyLDQwNTUzLDQwNTU0LDQwNTU1LDQwNTU2LDQwNTYxLDQwNTU3LDQwNTYzLDMwMDk4LDMwMTAwLDMwMTAyLDMwMTEyLDMwMTA5LDMwMTI0LDMwMTE1LDMwMTMxLDMwMTMyLDMwMTM2LDMwMTQ4LDMwMTI5LDMwMTI4LDMwMTQ3LDMwMTQ2LDMw''@;'; put 'put ''MTY2LDMwMTU3LDMwMTc5LDMwMTg0LDMwMTgyLDMwMTgwLDMwMTg3LDMwMTgzLDMwMjExLDMwMTkzLDMwMjA0LDMwMjA3LDMwMjI0LDMwMjA4LDMwMjEzLDMwMjIwLDMwMjMxLDMwMjE4LDMwMjQ1LDMwMjMyLDMwMjI5LDMwMjMzLDM5MzA4LDM5MzEwLDM5MzIyLDM5MzIzLDM5MzI0LDM5MzI1''@;'; put 'put ''LDM5MzI2LDM5MzI3LDM5MzI4LDM5MzI5LDM5MzMwLDM5MzMxLDM5MzMyLDM5MzM0LDM5MzM1LDM5MzM3LDM5MzM4LDM5MzM5LDM5MzQwLDM5MzQxLDM5MzQyLDM5MzQzLDM5MzQ0LDM5MzQ1LDM5MzQ2LDM5MzQ3LDM5MzQ4LDM5MzQ5LDM5MzUwLDM5MzUxLDM5MzUyLDM5MzUzLDM5MzU0LDM5''@;'; put 'put ''MzU1LDM5MzU2LDM5MzU3LDM5MzU4LDM5MzU5LDM5MzYwLDM5MzYxLDM5MzYyLDM5MzYzLDM5MzY0LDM5MzY1LDM5MzY2LDM5MzY3LDM5MzY4LDM5MzY5LDM5MzcwLDM5MzcxLDM5MzcyLDM5MzczLDM5Mzc0LDM5Mzc1LDM5Mzc2LDM5Mzc3LDM5Mzc4LDM5Mzc5LDM5MzgwLDM5MzgxLDM5Mzgy''@;'; put 'put ''LDM5MzgzLDM5Mzg0LDM5Mzg1LDM5Mzg2LDM5Mzg3LDM5Mzg4LDM5Mzg5LDM5MzkwLDM5MzkxLDM5MzkyLDM5MzkzLDM5Mzk0LDM5Mzk1LDM5Mzk2LDM5Mzk3LDM5Mzk4LDM5Mzk5LDM5NDAwLDM5NDAxLDM5NDAyLDM5NDAzLDM5NDA0LDM5NDA1LDM5NDA2LDM5NDA3LDM5NDA4LDM5NDA5LDM5''@;'; put 'put ''NDEwLDM5NDExLDM5NDEyLDM5NDEzLDM5NDE0LDM5NDE1LDM5NDE2LDM5NDE3LDMwMjM1LDMwMjY4LDMwMjQyLDMwMjQwLDMwMjcyLDMwMjUzLDMwMjU2LDMwMjcxLDMwMjYxLDMwMjc1LDMwMjcwLDMwMjU5LDMwMjg1LDMwMzAyLDMwMjkyLDMwMzAwLDMwMjk0LDMwMzE1LDMwMzE5LDMyNzE0''@;'; put 'put ''LDMxNDYyLDMxMzUyLDMxMzUzLDMxMzYwLDMxMzY2LDMxMzY4LDMxMzgxLDMxMzk4LDMxMzkyLDMxNDA0LDMxNDAwLDMxNDA1LDMxNDExLDM0OTE2LDM0OTIxLDM0OTMwLDM0OTQxLDM0OTQzLDM0OTQ2LDM0OTc4LDM1MDE0LDM0OTk5LDM1MDA0LDM1MDE3LDM1MDQyLDM1MDIyLDM1MDQzLDM1''@;'; put 'put ''MDQ1LDM1MDU3LDM1MDk4LDM1MDY4LDM1MDQ4LDM1MDcwLDM1MDU2LDM1MTA1LDM1MDk3LDM1MDkxLDM1MDk5LDM1MDgyLDM1MTI0LDM1MTE1LDM1MTI2LDM1MTM3LDM1MTc0LDM1MTk1LDMwMDkxLDMyOTk3LDMwMzg2LDMwMzg4LDMwNjg0LDMyNzg2LDMyNzg4LDMyNzkwLDMyNzk2LDMyODAw''@;'; put 'put ''LDMyODAyLDMyODA1LDMyODA2LDMyODA3LDMyODA5LDMyODA4LDMyODE3LDMyNzc5LDMyODIxLDMyODM1LDMyODM4LDMyODQ1LDMyODUwLDMyODczLDMyODgxLDM1MjAzLDM5MDMyLDM5MDQwLDM5MDQzLDM5NDE4LDM5NDE5LDM5NDIwLDM5NDIxLDM5NDIyLDM5NDIzLDM5NDI0LDM5NDI1LDM5''@;'; put 'put ''NDI2LDM5NDI3LDM5NDI4LDM5NDI5LDM5NDMwLDM5NDMxLDM5NDMyLDM5NDMzLDM5NDM0LDM5NDM1LDM5NDM2LDM5NDM3LDM5NDM4LDM5NDM5LDM5NDQwLDM5NDQxLDM5NDQyLDM5NDQzLDM5NDQ0LDM5NDQ1LDM5NDQ2LDM5NDQ3LDM5NDQ4LDM5NDQ5LDM5NDUwLDM5NDUxLDM5NDUyLDM5NDUz''@;'; put 'put ''LDM5NDU0LDM5NDU1LDM5NDU2LDM5NDU3LDM5NDU4LDM5NDU5LDM5NDYwLDM5NDYxLDM5NDYyLDM5NDYzLDM5NDY0LDM5NDY1LDM5NDY2LDM5NDY3LDM5NDY4LDM5NDY5LDM5NDcwLDM5NDcxLDM5NDcyLDM5NDczLDM5NDc0LDM5NDc1LDM5NDc2LDM5NDc3LDM5NDc4LDM5NDc5LDM5NDgwLDM5''@;'; put 'put ''NDgxLDM5NDgyLDM5NDgzLDM5NDg0LDM5NDg1LDM5NDg2LDM5NDg3LDM5NDg4LDM5NDg5LDM5NDkwLDM5NDkxLDM5NDkyLDM5NDkzLDM5NDk0LDM5NDk1LDM5NDk2LDM5NDk3LDM5NDk4LDM5NDk5LDM5NTAwLDM5NTAxLDM5NTAyLDM5NTAzLDM5NTA0LDM5NTA1LDM5NTA2LDM5NTA3LDM5NTA4''@;'; put 'put ''LDM5NTA5LDM5NTEwLDM5NTExLDM5NTEyLDM5NTEzLDM5MDQ5LDM5MDUyLDM5MDUzLDM5MDU1LDM5MDYwLDM5MDY2LDM5MDY3LDM5MDcwLDM5MDcxLDM5MDczLDM5MDc0LDM5MDc3LDM5MDc4LDM0MzgxLDM0Mzg4LDM0NDEyLDM0NDE0LDM0NDMxLDM0NDI2LDM0NDI4LDM0NDI3LDM0NDcyLDM0''@;'; put 'put ''NDQ1LDM0NDQzLDM0NDc2LDM0NDYxLDM0NDcxLDM0NDY3LDM0NDc0LDM0NDUxLDM0NDczLDM0NDg2LDM0NTAwLDM0NDg1LDM0NTEwLDM0NDgwLDM0NDkwLDM0NDgxLDM0NDc5LDM0NTA1LDM0NTExLDM0NDg0LDM0NTM3LDM0NTQ1LDM0NTQ2LDM0NTQxLDM0NTQ3LDM0NTEyLDM0NTc5LDM0NTI2''@;'; put 'put ''LDM0NTQ4LDM0NTI3LDM0NTIwLDM0NTEzLDM0NTYzLDM0NTY3LDM0NTUyLDM0NTY4LDM0NTcwLDM0NTczLDM0NTY5LDM0NTk1LDM0NjE5LDM0NTkwLDM0NTk3LDM0NjA2LDM0NTg2LDM0NjIyLDM0NjMyLDM0NjEyLDM0NjA5LDM0NjAxLDM0NjE1LDM0NjIzLDM0NjkwLDM0NTk0LDM0Njg1LDM0''@;'; put 'put ''Njg2LDM0NjgzLDM0NjU2LDM0NjcyLDM0NjM2LDM0NjcwLDM0Njk5LDM0NjQzLDM0NjU5LDM0Njg0LDM0NjYwLDM0NjQ5LDM0NjYxLDM0NzA3LDM0NzM1LDM0NzI4LDM0NzcwLDM5NTE0LDM5NTE1LDM5NTE2LDM5NTE3LDM5NTE4LDM5NTE5LDM5NTIwLDM5NTIxLDM5NTIyLDM5NTIzLDM5NTI0''@;'; put 'put ''LDM5NTI1LDM5NTI2LDM5NTI3LDM5NTI4LDM5NTI5LDM5NTMwLDM5NTMxLDM5NTM4LDM5NTU1LDM5NTYxLDM5NTY1LDM5NTY2LDM5NTcyLDM5NTczLDM5NTc3LDM5NTkwLDM5NTkzLDM5NTk0LDM5NTk1LDM5NTk2LDM5NTk3LDM5NTk4LDM5NTk5LDM5NjAyLDM5NjAzLDM5NjA0LDM5NjA1LDM5''@;'; put 'put ''NjA5LDM5NjExLDM5NjEzLDM5NjE0LDM5NjE1LDM5NjE5LDM5NjIwLDM5NjIyLDM5NjIzLDM5NjI0LDM5NjI1LDM5NjI2LDM5NjI5LDM5NjMwLDM5NjMxLDM5NjMyLDM5NjM0LDM5NjM2LDM5NjM3LDM5NjM4LDM5NjM5LDM5NjQxLDM5NjQyLDM5NjQzLDM5NjQ0LDM5NjQ1LDM5NjQ2LDM5NjQ4''@;'; put 'put ''LDM5NjUwLDM5NjUxLDM5NjUyLDM5NjUzLDM5NjU1LDM5NjU2LDM5NjU3LDM5NjU4LDM5NjYwLDM5NjYyLDM5NjY0LDM5NjY1LDM5NjY2LDM5NjY3LDM5NjY4LDM5NjY5LDM5NjcwLDM5NjcxLDM5NjcyLDM5Njc0LDM5Njc2LDM5Njc3LDM5Njc4LDM5Njc5LDM5NjgwLDM5NjgxLDM5NjgyLDM5''@;'; put 'put ''Njg0LDM5Njg1LDM5Njg2LDM0NzU4LDM0Njk2LDM0NjkzLDM0NzMzLDM0NzExLDM0NjkxLDM0NzMxLDM0Nzg5LDM0NzMyLDM0NzQxLDM0NzM5LDM0NzYzLDM0NzcxLDM0NzQ5LDM0NzY5LDM0NzUyLDM0NzYyLDM0Nzc5LDM0Nzk0LDM0Nzg0LDM0Nzk4LDM0ODM4LDM0ODM1LDM0ODE0LDM0ODI2''@;'; put 'put ''LDM0ODQzLDM0ODQ5LDM0ODczLDM0ODc2LDMyNTY2LDMyNTc4LDMyNTgwLDMyNTgxLDMzMjk2LDMxNDgyLDMxNDg1LDMxNDk2LDMxNDkxLDMxNDkyLDMxNTA5LDMxNDk4LDMxNTMxLDMxNTAzLDMxNTU5LDMxNTQ0LDMxNTMwLDMxNTEzLDMxNTM0LDMxNTM3LDMxNTIwLDMxNTI1LDMxNTI0LDMx''@;'; put 'put ''NTM5LDMxNTUwLDMxNTE4LDMxNTc2LDMxNTc4LDMxNTU3LDMxNjA1LDMxNTY0LDMxNTgxLDMxNTg0LDMxNTk4LDMxNjExLDMxNTg2LDMxNjAyLDMxNjAxLDMxNjMyLDMxNjU0LDMxNjU1LDMxNjcyLDMxNjYwLDMxNjQ1LDMxNjU2LDMxNjIxLDMxNjU4LDMxNjQ0LDMxNjUwLDMxNjU5LDMxNjY4''@;'; put 'put ''LDMxNjk3LDMxNjgxLDMxNjkyLDMxNzA5LDMxNzA2LDMxNzE3LDMxNzE4LDMxNzIyLDMxNzU2LDMxNzQyLDMxNzQwLDMxNzU5LDMxNzY2LDMxNzU1LDM5Njg3LDM5Njg5LDM5NjkwLDM5NjkxLDM5NjkyLDM5NjkzLDM5Njk0LDM5Njk2LDM5Njk3LDM5Njk4LDM5NzAwLDM5NzAxLDM5NzAyLDM5''@;'; put 'put ''NzAzLDM5NzA0LDM5NzA1LDM5NzA2LDM5NzA3LDM5NzA4LDM5NzA5LDM5NzEwLDM5NzEyLDM5NzEzLDM5NzE0LDM5NzE2LDM5NzE3LDM5NzE4LDM5NzE5LDM5NzIwLDM5NzIxLDM5NzIyLDM5NzIzLDM5NzI0LDM5NzI1LDM5NzI2LDM5NzI4LDM5NzI5LDM5NzMxLDM5NzMyLDM5NzMzLDM5NzM0''@;'; put 'put ''LDM5NzM1LDM5NzM2LDM5NzM3LDM5NzM4LDM5NzQxLDM5NzQyLDM5NzQzLDM5NzQ0LDM5NzUwLDM5NzU0LDM5NzU1LDM5NzU2LDM5NzU4LDM5NzYwLDM5NzYyLDM5NzYzLDM5NzY1LDM5NzY2LDM5NzY3LDM5NzY4LDM5NzY5LDM5NzcwLDM5NzcxLDM5NzcyLDM5NzczLDM5Nzc0LDM5Nzc1LDM5''@;'; put 'put ''Nzc2LDM5Nzc3LDM5Nzc4LDM5Nzc5LDM5NzgwLDM5NzgxLDM5NzgyLDM5NzgzLDM5Nzg0LDM5Nzg1LDM5Nzg2LDM5Nzg3LDM5Nzg4LDM5Nzg5LDM5NzkwLDM5NzkxLDM5NzkyLDM5NzkzLDM5Nzk0LDM5Nzk1LDM5Nzk2LDM5Nzk3LDM5Nzk4LDM5Nzk5LDM5ODAwLDM5ODAxLDM5ODAyLDM5ODAz''@;'; put 'put ''LDMxNzc1LDMxNzg2LDMxNzgyLDMxODAwLDMxODA5LDMxODA4LDMzMjc4LDMzMjgxLDMzMjgyLDMzMjg0LDMzMjYwLDM0ODg0LDMzMzEzLDMzMzE0LDMzMzE1LDMzMzI1LDMzMzI3LDMzMzIwLDMzMzIzLDMzMzM2LDMzMzM5LDMzMzMxLDMzMzMyLDMzMzQyLDMzMzQ4LDMzMzUzLDMzMzU1LDMz''@;'; put 'put ''MzU5LDMzMzcwLDMzMzc1LDMzMzg0LDM0OTQyLDM0OTQ5LDM0OTUyLDM1MDMyLDM1MDM5LDM1MTY2LDMyNjY5LDMyNjcxLDMyNjc5LDMyNjg3LDMyNjg4LDMyNjkwLDMxODY4LDI1OTI5LDMxODg5LDMxOTAxLDMxOTAwLDMxOTAyLDMxOTA2LDMxOTIyLDMxOTMyLDMxOTMzLDMxOTM3LDMxOTQz''@;'; put 'put ''LDMxOTQ4LDMxOTQ5LDMxOTQ0LDMxOTQxLDMxOTU5LDMxOTc2LDMzMzkwLDI2MjgwLDMyNzAzLDMyNzE4LDMyNzI1LDMyNzQxLDMyNzM3LDMyNzQyLDMyNzQ1LDMyNzUwLDMyNzU1LDMxOTkyLDMyMTE5LDMyMTY2LDMyMTc0LDMyMzI3LDMyNDExLDQwNjMyLDQwNjI4LDM2MjExLDM2MjI4LDM2''@;'; put 'put ''MjQ0LDM2MjQxLDM2MjczLDM2MTk5LDM2MjA1LDM1OTExLDM1OTEzLDM3MTk0LDM3MjAwLDM3MTk4LDM3MTk5LDM3MjIwLDM5ODA0LDM5ODA1LDM5ODA2LDM5ODA3LDM5ODA4LDM5ODA5LDM5ODEwLDM5ODExLDM5ODEyLDM5ODEzLDM5ODE0LDM5ODE1LDM5ODE2LDM5ODE3LDM5ODE4LDM5ODE5''@;'; put 'put ''LDM5ODIwLDM5ODIxLDM5ODIyLDM5ODIzLDM5ODI0LDM5ODI1LDM5ODI2LDM5ODI3LDM5ODI4LDM5ODI5LDM5ODMwLDM5ODMxLDM5ODMyLDM5ODMzLDM5ODM0LDM5ODM1LDM5ODM2LDM5ODM3LDM5ODM4LDM5ODM5LDM5ODQwLDM5ODQxLDM5ODQyLDM5ODQzLDM5ODQ0LDM5ODQ1LDM5ODQ2LDM5''@;'; put 'put ''ODQ3LDM5ODQ4LDM5ODQ5LDM5ODUwLDM5ODUxLDM5ODUyLDM5ODUzLDM5ODU0LDM5ODU1LDM5ODU2LDM5ODU3LDM5ODU4LDM5ODU5LDM5ODYwLDM5ODYxLDM5ODYyLDM5ODYzLDM5ODY0LDM5ODY1LDM5ODY2LDM5ODY3LDM5ODY4LDM5ODY5LDM5ODcwLDM5ODcxLDM5ODcyLDM5ODczLDM5ODc0''@;'; put 'put ''LDM5ODc1LDM5ODc2LDM5ODc3LDM5ODc4LDM5ODc5LDM5ODgwLDM5ODgxLDM5ODgyLDM5ODgzLDM5ODg0LDM5ODg1LDM5ODg2LDM5ODg3LDM5ODg4LDM5ODg5LDM5ODkwLDM5ODkxLDM5ODkyLDM5ODkzLDM5ODk0LDM5ODk1LDM5ODk2LDM5ODk3LDM5ODk4LDM5ODk5LDM3MjE4LDM3MjE3LDM3''@;'; put 'put ''MjMyLDM3MjI1LDM3MjMxLDM3MjQ1LDM3MjQ2LDM3MjM0LDM3MjM2LDM3MjQxLDM3MjYwLDM3MjUzLDM3MjY0LDM3MjYxLDM3MjY1LDM3MjgyLDM3MjgzLDM3MjkwLDM3MjkzLDM3Mjk0LDM3Mjk1LDM3MzAxLDM3MzAwLDM3MzA2LDM1OTI1LDQwNTc0LDM2MjgwLDM2MzMxLDM2MzU3LDM2NDQx''@;'; put 'put ''LDM2NDU3LDM2Mjc3LDM2Mjg3LDM2Mjg0LDM2MjgyLDM2MjkyLDM2MzEwLDM2MzExLDM2MzE0LDM2MzE4LDM2MzAyLDM2MzAzLDM2MzE1LDM2Mjk0LDM2MzMyLDM2MzQzLDM2MzQ0LDM2MzIzLDM2MzQ1LDM2MzQ3LDM2MzI0LDM2MzYxLDM2MzQ5LDM2MzcyLDM2MzgxLDM2MzgzLDM2Mzk2LDM2''@;'; put 'put ''Mzk4LDM2Mzg3LDM2Mzk5LDM2NDEwLDM2NDE2LDM2NDA5LDM2NDA1LDM2NDEzLDM2NDAxLDM2NDI1LDM2NDE3LDM2NDE4LDM2NDMzLDM2NDM0LDM2NDI2LDM2NDY0LDM2NDcwLDM2NDc2LDM2NDYzLDM2NDY4LDM2NDg1LDM2NDk1LDM2NTAwLDM2NDk2LDM2NTA4LDM2NTEwLDM1OTYwLDM1OTcw''@;'; put 'put ''LDM1OTc4LDM1OTczLDM1OTkyLDM1OTg4LDI2MDExLDM1Mjg2LDM1Mjk0LDM1MjkwLDM1MjkyLDM5OTAwLDM5OTAxLDM5OTAyLDM5OTAzLDM5OTA0LDM5OTA1LDM5OTA2LDM5OTA3LDM5OTA4LDM5OTA5LDM5OTEwLDM5OTExLDM5OTEyLDM5OTEzLDM5OTE0LDM5OTE1LDM5OTE2LDM5OTE3LDM5''@;'; put 'put ''OTE4LDM5OTE5LDM5OTIwLDM5OTIxLDM5OTIyLDM5OTIzLDM5OTI0LDM5OTI1LDM5OTI2LDM5OTI3LDM5OTI4LDM5OTI5LDM5OTMwLDM5OTMxLDM5OTMyLDM5OTMzLDM5OTM0LDM5OTM1LDM5OTM2LDM5OTM3LDM5OTM4LDM5OTM5LDM5OTQwLDM5OTQxLDM5OTQyLDM5OTQzLDM5OTQ0LDM5OTQ1''@;'; put 'put ''LDM5OTQ2LDM5OTQ3LDM5OTQ4LDM5OTQ5LDM5OTUwLDM5OTUxLDM5OTUyLDM5OTUzLDM5OTU0LDM5OTU1LDM5OTU2LDM5OTU3LDM5OTU4LDM5OTU5LDM5OTYwLDM5OTYxLDM5OTYyLDM5OTYzLDM5OTY0LDM5OTY1LDM5OTY2LDM5OTY3LDM5OTY4LDM5OTY5LDM5OTcwLDM5OTcxLDM5OTcyLDM5''@;'; put 'put ''OTczLDM5OTc0LDM5OTc1LDM5OTc2LDM5OTc3LDM5OTc4LDM5OTc5LDM5OTgwLDM5OTgxLDM5OTgyLDM5OTgzLDM5OTg0LDM5OTg1LDM5OTg2LDM5OTg3LDM5OTg4LDM5OTg5LDM5OTkwLDM5OTkxLDM5OTkyLDM5OTkzLDM5OTk0LDM5OTk1LDM1MzAxLDM1MzA3LDM1MzExLDM1MzkwLDM1NjIy''@;'; put 'put ''LDM4NzM5LDM4NjMzLDM4NjQzLDM4NjM5LDM4NjYyLDM4NjU3LDM4NjY0LDM4NjcxLDM4NjcwLDM4Njk4LDM4NzAxLDM4NzA0LDM4NzE4LDQwODMyLDQwODM1LDQwODM3LDQwODM4LDQwODM5LDQwODQwLDQwODQxLDQwODQyLDQwODQ0LDQwNzAyLDQwNzE1LDQwNzE3LDM4NTg1LDM4NTg4LDM4''@;'; put 'put ''NTg5LDM4NjA2LDM4NjEwLDMwNjU1LDM4NjI0LDM3NTE4LDM3NTUwLDM3NTc2LDM3Njk0LDM3NzM4LDM3ODM0LDM3Nzc1LDM3OTUwLDM3OTk1LDQwMDYzLDQwMDY2LDQwMDY5LDQwMDcwLDQwMDcxLDQwMDcyLDMxMjY3LDQwMDc1LDQwMDc4LDQwMDgwLDQwMDgxLDQwMDgyLDQwMDg0LDQwMDg1''@;'; put 'put ''LDQwMDkwLDQwMDkxLDQwMDk0LDQwMDk1LDQwMDk2LDQwMDk3LDQwMDk4LDQwMDk5LDQwMTAxLDQwMTAyLDQwMTAzLDQwMTA0LDQwMTA1LDQwMTA3LDQwMTA5LDQwMTEwLDQwMTEyLDQwMTEzLDQwMTE0LDQwMTE1LDQwMTE2LDQwMTE3LDQwMTE4LDQwMTE5LDQwMTIyLDQwMTIzLDQwMTI0LDQw''@;'; put 'put ''MTI1LDQwMTMyLDQwMTMzLDQwMTM0LDQwMTM1LDQwMTM4LDQwMTM5LDM5OTk2LDM5OTk3LDM5OTk4LDM5OTk5LDRlNCw0MDAwMSw0MDAwMiw0MDAwMyw0MDAwNCw0MDAwNSw0MDAwNiw0MDAwNyw0MDAwOCw0MDAwOSw0MDAxMCw0MDAxMSw0MDAxMiw0MDAxMyw0MDAxNCw0MDAxNSw0MDAxNiw0''@;'; put 'put ''MDAxNyw0MDAxOCw0MDAxOSw0MDAyMCw0MDAyMSw0MDAyMiw0MDAyMyw0MDAyNCw0MDAyNSw0MDAyNiw0MDAyNyw0MDAyOCw0MDAyOSw0MDAzMCw0MDAzMSw0MDAzMiw0MDAzMyw0MDAzNCw0MDAzNSw0MDAzNiw0MDAzNyw0MDAzOCw0MDAzOSw0MDA0MCw0MDA0MSw0MDA0Miw0MDA0Myw0MDA0''@;'; put 'put ''NCw0MDA0NSw0MDA0Niw0MDA0Nyw0MDA0OCw0MDA0OSw0MDA1MCw0MDA1MSw0MDA1Miw0MDA1Myw0MDA1NCw0MDA1NSw0MDA1Niw0MDA1Nyw0MDA1OCw0MDA1OSw0MDA2MSw0MDA2Miw0MDA2NCw0MDA2Nyw0MDA2OCw0MDA3Myw0MDA3NCw0MDA3Niw0MDA3OSw0MDA4Myw0MDA4Niw0MDA4Nyw0''@;'; put 'put ''MDA4OCw0MDA4OSw0MDA5Myw0MDEwNiw0MDEwOCw0MDExMSw0MDEyMSw0MDEyNiw0MDEyNyw0MDEyOCw0MDEyOSw0MDEzMCw0MDEzNiw0MDEzNyw0MDE0NSw0MDE0Niw0MDE1NCw0MDE1NSw0MDE2MCw0MDE2MSw0MDE0MCw0MDE0MSw0MDE0Miw0MDE0Myw0MDE0NCw0MDE0Nyw0MDE0OCw0MDE0''@;'; put 'put ''OSw0MDE1MSw0MDE1Miw0MDE1Myw0MDE1Niw0MDE1Nyw0MDE1OSw0MDE2MiwzODc4MCwzODc4OSwzODgwMSwzODgwMiwzODgwNCwzODgzMSwzODgyNywzODgxOSwzODgzNCwzODgzNiwzOTYwMSwzOTYwMCwzOTYwNyw0MDUzNiwzOTYwNiwzOTYxMCwzOTYxMiwzOTYxNywzOTYxNiwzOTYyMSwz''@;'; put 'put ''OTYxOCwzOTYyNywzOTYyOCwzOTYzMywzOTc0OSwzOTc0NywzOTc1MSwzOTc1MywzOTc1MiwzOTc1NywzOTc2MSwzOTE0NCwzOTE4MSwzOTIxNCwzOTI1MywzOTI1MiwzOTY0NywzOTY0OSwzOTY1NCwzOTY2MywzOTY1OSwzOTY3NSwzOTY2MSwzOTY3MywzOTY4OCwzOTY5NSwzOTY5OSwzOTcx''@;'; put 'put ''MSwzOTcxNSw0MDYzNyw0MDYzOCwzMjMxNSw0MDU3OCw0MDU4Myw0MDU4NCw0MDU4Nyw0MDU5NCwzNzg0Niw0MDYwNSw0MDYwNyw0MDY2Nyw0MDY2OCw0MDY2OSw0MDY3Miw0MDY3MSw0MDY3NCw0MDY4MSw0MDY3OSw0MDY3Nyw0MDY4Miw0MDY4Nyw0MDczOCw0MDc0OCw0MDc1MSw0MDc2MSw0''@;'; put 'put ''MDc1OSw0MDc2NSw0MDc2Niw0MDc3Miw0MDE2Myw0MDE2NCw0MDE2NSw0MDE2Niw0MDE2Nyw0MDE2OCw0MDE2OSw0MDE3MCw0MDE3MSw0MDE3Miw0MDE3Myw0MDE3NCw0MDE3NSw0MDE3Niw0MDE3Nyw0MDE3OCw0MDE3OSw0MDE4MCw0MDE4MSw0MDE4Miw0MDE4Myw0MDE4NCw0MDE4NSw0MDE4''@;'; put 'put ''Niw0MDE4Nyw0MDE4OCw0MDE4OSw0MDE5MCw0MDE5MSw0MDE5Miw0MDE5Myw0MDE5NCw0MDE5NSw0MDE5Niw0MDE5Nyw0MDE5OCw0MDE5OSw0MDIwMCw0MDIwMSw0MDIwMiw0MDIwMyw0MDIwNCw0MDIwNSw0MDIwNiw0MDIwNyw0MDIwOCw0MDIwOSw0MDIxMCw0MDIxMSw0MDIxMiw0MDIxMyw0''@;'; put 'put ''MDIxNCw0MDIxNSw0MDIxNiw0MDIxNyw0MDIxOCw0MDIxOSw0MDIyMCw0MDIyMSw0MDIyMiw0MDIyMyw0MDIyNCw0MDIyNSw0MDIyNiw0MDIyNyw0MDIyOCw0MDIyOSw0MDIzMCw0MDIzMSw0MDIzMiw0MDIzMyw0MDIzNCw0MDIzNSw0MDIzNiw0MDIzNyw0MDIzOCw0MDIzOSw0MDI0MCw0MDI0''@;'; put 'put ''MSw0MDI0Miw0MDI0Myw0MDI0NCw0MDI0NSw0MDI0Niw0MDI0Nyw0MDI0OCw0MDI0OSw0MDI1MCw0MDI1MSw0MDI1Miw0MDI1Myw0MDI1NCw0MDI1NSw0MDI1Niw0MDI1Nyw0MDI1OCw1NzkwOCw1NzkwOSw1NzkxMCw1NzkxMSw1NzkxMiw1NzkxMyw1NzkxNCw1NzkxNSw1NzkxNiw1NzkxNyw1''@;'; put 'put ''NzkxOCw1NzkxOSw1NzkyMCw1NzkyMSw1NzkyMiw1NzkyMyw1NzkyNCw1NzkyNSw1NzkyNiw1NzkyNyw1NzkyOCw1NzkyOSw1NzkzMCw1NzkzMSw1NzkzMiw1NzkzMyw1NzkzNCw1NzkzNSw1NzkzNiw1NzkzNyw1NzkzOCw1NzkzOSw1Nzk0MCw1Nzk0MSw1Nzk0Miw1Nzk0Myw1Nzk0NCw1Nzk0''@;'; put 'put ''NSw1Nzk0Niw1Nzk0Nyw1Nzk0OCw1Nzk0OSw1Nzk1MCw1Nzk1MSw1Nzk1Miw1Nzk1Myw1Nzk1NCw1Nzk1NSw1Nzk1Niw1Nzk1Nyw1Nzk1OCw1Nzk1OSw1Nzk2MCw1Nzk2MSw1Nzk2Miw1Nzk2Myw1Nzk2NCw1Nzk2NSw1Nzk2Niw1Nzk2Nyw1Nzk2OCw1Nzk2OSw1Nzk3MCw1Nzk3MSw1Nzk3Miw1''@;'; put 'put ''Nzk3Myw1Nzk3NCw1Nzk3NSw1Nzk3Niw1Nzk3Nyw1Nzk3OCw1Nzk3OSw1Nzk4MCw1Nzk4MSw1Nzk4Miw1Nzk4Myw1Nzk4NCw1Nzk4NSw1Nzk4Niw1Nzk4Nyw1Nzk4OCw1Nzk4OSw1Nzk5MCw1Nzk5MSw1Nzk5Miw1Nzk5Myw1Nzk5NCw1Nzk5NSw1Nzk5Niw1Nzk5Nyw1Nzk5OCw1Nzk5OSw1OGUz''@;'; put 'put ''LDU4MDAxLDQwMjU5LDQwMjYwLDQwMjYxLDQwMjYyLDQwMjYzLDQwMjY0LDQwMjY1LDQwMjY2LDQwMjY3LDQwMjY4LDQwMjY5LDQwMjcwLDQwMjcxLDQwMjcyLDQwMjczLDQwMjc0LDQwMjc1LDQwMjc2LDQwMjc3LDQwMjc4LDQwMjc5LDQwMjgwLDQwMjgxLDQwMjgyLDQwMjgzLDQwMjg0LDQw''@;'; put 'put ''Mjg1LDQwMjg2LDQwMjg3LDQwMjg4LDQwMjg5LDQwMjkwLDQwMjkxLDQwMjkyLDQwMjkzLDQwMjk0LDQwMjk1LDQwMjk2LDQwMjk3LDQwMjk4LDQwMjk5LDQwMzAwLDQwMzAxLDQwMzAyLDQwMzAzLDQwMzA0LDQwMzA1LDQwMzA2LDQwMzA3LDQwMzA4LDQwMzA5LDQwMzEwLDQwMzExLDQwMzEy''@;'; put 'put ''LDQwMzEzLDQwMzE0LDQwMzE1LDQwMzE2LDQwMzE3LDQwMzE4LDQwMzE5LDQwMzIwLDQwMzIxLDQwMzIyLDQwMzIzLDQwMzI0LDQwMzI1LDQwMzI2LDQwMzI3LDQwMzI4LDQwMzI5LDQwMzMwLDQwMzMxLDQwMzMyLDQwMzMzLDQwMzM0LDQwMzM1LDQwMzM2LDQwMzM3LDQwMzM4LDQwMzM5LDQw''@;'; put 'put ''MzQwLDQwMzQxLDQwMzQyLDQwMzQzLDQwMzQ0LDQwMzQ1LDQwMzQ2LDQwMzQ3LDQwMzQ4LDQwMzQ5LDQwMzUwLDQwMzUxLDQwMzUyLDQwMzUzLDQwMzU0LDU4MDAyLDU4MDAzLDU4MDA0LDU4MDA1LDU4MDA2LDU4MDA3LDU4MDA4LDU4MDA5LDU4MDEwLDU4MDExLDU4MDEyLDU4MDEzLDU4MDE0''@;'; put 'put ''LDU4MDE1LDU4MDE2LDU4MDE3LDU4MDE4LDU4MDE5LDU4MDIwLDU4MDIxLDU4MDIyLDU4MDIzLDU4MDI0LDU4MDI1LDU4MDI2LDU4MDI3LDU4MDI4LDU4MDI5LDU4MDMwLDU4MDMxLDU4MDMyLDU4MDMzLDU4MDM0LDU4MDM1LDU4MDM2LDU4MDM3LDU4MDM4LDU4MDM5LDU4MDQwLDU4MDQxLDU4''@;'; put 'put ''MDQyLDU4MDQzLDU4MDQ0LDU4MDQ1LDU4MDQ2LDU4MDQ3LDU4MDQ4LDU4MDQ5LDU4MDUwLDU4MDUxLDU4MDUyLDU4MDUzLDU4MDU0LDU4MDU1LDU4MDU2LDU4MDU3LDU4MDU4LDU4MDU5LDU4MDYwLDU4MDYxLDU4MDYyLDU4MDYzLDU4MDY0LDU4MDY1LDU4MDY2LDU4MDY3LDU4MDY4LDU4MDY5''@;'; put 'put ''LDU4MDcwLDU4MDcxLDU4MDcyLDU4MDczLDU4MDc0LDU4MDc1LDU4MDc2LDU4MDc3LDU4MDc4LDU4MDc5LDU4MDgwLDU4MDgxLDU4MDgyLDU4MDgzLDU4MDg0LDU4MDg1LDU4MDg2LDU4MDg3LDU4MDg4LDU4MDg5LDU4MDkwLDU4MDkxLDU4MDkyLDU4MDkzLDU4MDk0LDU4MDk1LDQwMzU1LDQw''@;'; put 'put ''MzU2LDQwMzU3LDQwMzU4LDQwMzU5LDQwMzYwLDQwMzYxLDQwMzYyLDQwMzYzLDQwMzY0LDQwMzY1LDQwMzY2LDQwMzY3LDQwMzY4LDQwMzY5LDQwMzcwLDQwMzcxLDQwMzcyLDQwMzczLDQwMzc0LDQwMzc1LDQwMzc2LDQwMzc3LDQwMzc4LDQwMzc5LDQwMzgwLDQwMzgxLDQwMzgyLDQwMzgz''@;'; put 'put ''LDQwMzg0LDQwMzg1LDQwMzg2LDQwMzg3LDQwMzg4LDQwMzg5LDQwMzkwLDQwMzkxLDQwMzkyLDQwMzkzLDQwMzk0LDQwMzk1LDQwMzk2LDQwMzk3LDQwMzk4LDQwMzk5LDQwNDAwLDQwNDAxLDQwNDAyLDQwNDAzLDQwNDA0LDQwNDA1LDQwNDA2LDQwNDA3LDQwNDA4LDQwNDA5LDQwNDEwLDQw''@;'; put 'put ''NDExLDQwNDEyLDQwNDEzLDQwNDE0LDQwNDE1LDQwNDE2LDQwNDE3LDQwNDE4LDQwNDE5LDQwNDIwLDQwNDIxLDQwNDIyLDQwNDIzLDQwNDI0LDQwNDI1LDQwNDI2LDQwNDI3LDQwNDI4LDQwNDI5LDQwNDMwLDQwNDMxLDQwNDMyLDQwNDMzLDQwNDM0LDQwNDM1LDQwNDM2LDQwNDM3LDQwNDM4''@;'; put 'put ''LDQwNDM5LDQwNDQwLDQwNDQxLDQwNDQyLDQwNDQzLDQwNDQ0LDQwNDQ1LDQwNDQ2LDQwNDQ3LDQwNDQ4LDQwNDQ5LDQwNDUwLDU4MDk2LDU4MDk3LDU4MDk4LDU4MDk5LDU4MTAwLDU4MTAxLDU4MTAyLDU4MTAzLDU4MTA0LDU4MTA1LDU4MTA2LDU4MTA3LDU4MTA4LDU4MTA5LDU4MTEwLDU4''@;'; put 'put ''MTExLDU4MTEyLDU4MTEzLDU4MTE0LDU4MTE1LDU4MTE2LDU4MTE3LDU4MTE4LDU4MTE5LDU4MTIwLDU4MTIxLDU4MTIyLDU4MTIzLDU4MTI0LDU4MTI1LDU4MTI2LDU4MTI3LDU4MTI4LDU4MTI5LDU4MTMwLDU4MTMxLDU4MTMyLDU4MTMzLDU4MTM0LDU4MTM1LDU4MTM2LDU4MTM3LDU4MTM4''@;'; put 'put ''LDU4MTM5LDU4MTQwLDU4MTQxLDU4MTQyLDU4MTQzLDU4MTQ0LDU4MTQ1LDU4MTQ2LDU4MTQ3LDU4MTQ4LDU4MTQ5LDU4MTUwLDU4MTUxLDU4MTUyLDU4MTUzLDU4MTU0LDU4MTU1LDU4MTU2LDU4MTU3LDU4MTU4LDU4MTU5LDU4MTYwLDU4MTYxLDU4MTYyLDU4MTYzLDU4MTY0LDU4MTY1LDU4''@;'; put 'put ''MTY2LDU4MTY3LDU4MTY4LDU4MTY5LDU4MTcwLDU4MTcxLDU4MTcyLDU4MTczLDU4MTc0LDU4MTc1LDU4MTc2LDU4MTc3LDU4MTc4LDU4MTc5LDU4MTgwLDU4MTgxLDU4MTgyLDU4MTgzLDU4MTg0LDU4MTg1LDU4MTg2LDU4MTg3LDU4MTg4LDU4MTg5LDQwNDUxLDQwNDUyLDQwNDUzLDQwNDU0''@;'; put 'put ''LDQwNDU1LDQwNDU2LDQwNDU3LDQwNDU4LDQwNDU5LDQwNDYwLDQwNDYxLDQwNDYyLDQwNDYzLDQwNDY0LDQwNDY1LDQwNDY2LDQwNDY3LDQwNDY4LDQwNDY5LDQwNDcwLDQwNDcxLDQwNDcyLDQwNDczLDQwNDc0LDQwNDc1LDQwNDc2LDQwNDc3LDQwNDc4LDQwNDg0LDQwNDg3LDQwNDk0LDQw''@;'; put 'put ''NDk2LDQwNTAwLDQwNTA3LDQwNTA4LDQwNTEyLDQwNTI1LDQwNTI4LDQwNTMwLDQwNTMxLDQwNTMyLDQwNTM0LDQwNTM3LDQwNTQxLDQwNTQzLDQwNTQ0LDQwNTQ1LDQwNTQ2LDQwNTQ5LDQwNTU4LDQwNTU5LDQwNTYyLDQwNTY0LDQwNTY1LDQwNTY2LDQwNTY3LDQwNTY4LDQwNTY5LDQwNTcw''@;'; put 'put ''LDQwNTcxLDQwNTcyLDQwNTczLDQwNTc2LDQwNTc3LDQwNTc5LDQwNTgwLDQwNTgxLDQwNTgyLDQwNTg1LDQwNTg2LDQwNTg4LDQwNTg5LDQwNTkwLDQwNTkxLDQwNTkyLDQwNTkzLDQwNTk2LDQwNTk3LDQwNTk4LDQwNTk5LDQwNjAwLDQwNjAxLDQwNjAyLDQwNjAzLDQwNjA0LDQwNjA2LDQw''@;'; put 'put ''NjA4LDQwNjA5LDQwNjEwLDQwNjExLDQwNjEyLDQwNjEzLDQwNjE1LDQwNjE2LDQwNjE3LDQwNjE4LDU4MTkwLDU4MTkxLDU4MTkyLDU4MTkzLDU4MTk0LDU4MTk1LDU4MTk2LDU4MTk3LDU4MTk4LDU4MTk5LDU4MjAwLDU4MjAxLDU4MjAyLDU4MjAzLDU4MjA0LDU4MjA1LDU4MjA2LDU4MjA3''@;'; put 'put ''LDU4MjA4LDU4MjA5LDU4MjEwLDU4MjExLDU4MjEyLDU4MjEzLDU4MjE0LDU4MjE1LDU4MjE2LDU4MjE3LDU4MjE4LDU4MjE5LDU4MjIwLDU4MjIxLDU4MjIyLDU4MjIzLDU4MjI0LDU4MjI1LDU4MjI2LDU4MjI3LDU4MjI4LDU4MjI5LDU4MjMwLDU4MjMxLDU4MjMyLDU4MjMzLDU4MjM0LDU4''@;'; put 'put ''MjM1LDU4MjM2LDU4MjM3LDU4MjM4LDU4MjM5LDU4MjQwLDU4MjQxLDU4MjQyLDU4MjQzLDU4MjQ0LDU4MjQ1LDU4MjQ2LDU4MjQ3LDU4MjQ4LDU4MjQ5LDU4MjUwLDU4MjUxLDU4MjUyLDU4MjUzLDU4MjU0LDU4MjU1LDU4MjU2LDU4MjU3LDU4MjU4LDU4MjU5LDU4MjYwLDU4MjYxLDU4MjYy''@;'; put 'put ''LDU4MjYzLDU4MjY0LDU4MjY1LDU4MjY2LDU4MjY3LDU4MjY4LDU4MjY5LDU4MjcwLDU4MjcxLDU4MjcyLDU4MjczLDU4Mjc0LDU4Mjc1LDU4Mjc2LDU4Mjc3LDU4Mjc4LDU4Mjc5LDU4MjgwLDU4MjgxLDU4MjgyLDU4MjgzLDQwNjE5LDQwNjIwLDQwNjIxLDQwNjIyLDQwNjIzLDQwNjI0LDQw''@;'; put 'put ''NjI1LDQwNjI2LDQwNjI3LDQwNjI5LDQwNjMwLDQwNjMxLDQwNjMzLDQwNjM0LDQwNjM2LDQwNjM5LDQwNjQwLDQwNjQxLDQwNjQyLDQwNjQzLDQwNjQ1LDQwNjQ2LDQwNjQ3LDQwNjQ4LDQwNjUwLDQwNjUxLDQwNjUyLDQwNjU2LDQwNjU4LDQwNjU5LDQwNjYxLDQwNjYyLDQwNjYzLDQwNjY1''@;'; put 'put ''LDQwNjY2LDQwNjcwLDQwNjczLDQwNjc1LDQwNjc2LDQwNjc4LDQwNjgwLDQwNjgzLDQwNjg0LDQwNjg1LDQwNjg2LDQwNjg4LDQwNjg5LDQwNjkwLDQwNjkxLDQwNjkyLDQwNjkzLDQwNjk0LDQwNjk1LDQwNjk2LDQwNjk4LDQwNzAxLDQwNzAzLDQwNzA0LDQwNzA1LDQwNzA2LDQwNzA3LDQw''@;'; put 'put ''NzA4LDQwNzA5LDQwNzEwLDQwNzExLDQwNzEyLDQwNzEzLDQwNzE0LDQwNzE2LDQwNzE5LDQwNzIxLDQwNzIyLDQwNzI0LDQwNzI1LDQwNzI2LDQwNzI4LDQwNzMwLDQwNzMxLDQwNzMyLDQwNzMzLDQwNzM0LDQwNzM1LDQwNzM3LDQwNzM5LDQwNzQwLDQwNzQxLDQwNzQyLDQwNzQzLDQwNzQ0''@;'; put 'put ''LDQwNzQ1LDQwNzQ2LDQwNzQ3LDQwNzQ5LDQwNzUwLDQwNzUyLDQwNzUzLDU4Mjg0LDU4Mjg1LDU4Mjg2LDU4Mjg3LDU4Mjg4LDU4Mjg5LDU4MjkwLDU4MjkxLDU4MjkyLDU4MjkzLDU4Mjk0LDU4Mjk1LDU4Mjk2LDU4Mjk3LDU4Mjk4LDU4Mjk5LDU4MzAwLDU4MzAxLDU4MzAyLDU4MzAzLDU4''@;'; put 'put ''MzA0LDU4MzA1LDU4MzA2LDU4MzA3LDU4MzA4LDU4MzA5LDU4MzEwLDU4MzExLDU4MzEyLDU4MzEzLDU4MzE0LDU4MzE1LDU4MzE2LDU4MzE3LDU4MzE4LDU4MzE5LDU4MzIwLDU4MzIxLDU4MzIyLDU4MzIzLDU4MzI0LDU4MzI1LDU4MzI2LDU4MzI3LDU4MzI4LDU4MzI5LDU4MzMwLDU4MzMx''@;'; put 'put ''LDU4MzMyLDU4MzMzLDU4MzM0LDU4MzM1LDU4MzM2LDU4MzM3LDU4MzM4LDU4MzM5LDU4MzQwLDU4MzQxLDU4MzQyLDU4MzQzLDU4MzQ0LDU4MzQ1LDU4MzQ2LDU4MzQ3LDU4MzQ4LDU4MzQ5LDU4MzUwLDU4MzUxLDU4MzUyLDU4MzUzLDU4MzU0LDU4MzU1LDU4MzU2LDU4MzU3LDU4MzU4LDU4''@;'; put 'put ''MzU5LDU4MzYwLDU4MzYxLDU4MzYyLDU4MzYzLDU4MzY0LDU4MzY1LDU4MzY2LDU4MzY3LDU4MzY4LDU4MzY5LDU4MzcwLDU4MzcxLDU4MzcyLDU4MzczLDU4Mzc0LDU4Mzc1LDU4Mzc2LDU4Mzc3LDQwNzU0LDQwNzU1LDQwNzU2LDQwNzU3LDQwNzU4LDQwNzYwLDQwNzYyLDQwNzY0LDQwNzY3''@;'; put 'put ''LDQwNzY4LDQwNzY5LDQwNzcwLDQwNzcxLDQwNzczLDQwNzc0LDQwNzc1LDQwNzc2LDQwNzc3LDQwNzc4LDQwNzc5LDQwNzgwLDQwNzgxLDQwNzgyLDQwNzgzLDQwNzg2LDQwNzg3LDQwNzg4LDQwNzg5LDQwNzkwLDQwNzkxLDQwNzkyLDQwNzkzLDQwNzk0LDQwNzk1LDQwNzk2LDQwNzk3LDQw''@;'; put 'put ''Nzk4LDQwNzk5LDQwODAwLDQwODAxLDQwODAyLDQwODAzLDQwODA0LDQwODA1LDQwODA2LDQwODA3LDQwODA4LDQwODA5LDQwODEwLDQwODExLDQwODEyLDQwODEzLDQwODE0LDQwODE1LDQwODE2LDQwODE3LDQwODE4LDQwODE5LDQwODIwLDQwODIxLDQwODIyLDQwODIzLDQwODI0LDQwODI1''@;'; put 'put ''LDQwODI2LDQwODI3LDQwODI4LDQwODI5LDQwODMwLDQwODMzLDQwODM0LDQwODQ1LDQwODQ2LDQwODQ3LDQwODQ4LDQwODQ5LDQwODUwLDQwODUxLDQwODUyLDQwODUzLDQwODU0LDQwODU1LDQwODU2LDQwODYwLDQwODYxLDQwODYyLDQwODY1LDQwODY2LDQwODY3LDQwODY4LDQwODY5LDYz''@;'; put 'put ''Nzg4LDYzODY1LDYzODkzLDYzOTc1LDYzOTg1LDU4Mzc4LDU4Mzc5LDU4MzgwLDU4MzgxLDU4MzgyLDU4MzgzLDU4Mzg0LDU4Mzg1LDU4Mzg2LDU4Mzg3LDU4Mzg4LDU4Mzg5LDU4MzkwLDU4MzkxLDU4MzkyLDU4MzkzLDU4Mzk0LDU4Mzk1LDU4Mzk2LDU4Mzk3LDU4Mzk4LDU4Mzk5LDU4NDAw''@;'; put 'put ''LDU4NDAxLDU4NDAyLDU4NDAzLDU4NDA0LDU4NDA1LDU4NDA2LDU4NDA3LDU4NDA4LDU4NDA5LDU4NDEwLDU4NDExLDU4NDEyLDU4NDEzLDU4NDE0LDU4NDE1LDU4NDE2LDU4NDE3LDU4NDE4LDU4NDE5LDU4NDIwLDU4NDIxLDU4NDIyLDU4NDIzLDU4NDI0LDU4NDI1LDU4NDI2LDU4NDI3LDU4''@;'; put 'put ''NDI4LDU4NDI5LDU4NDMwLDU4NDMxLDU4NDMyLDU4NDMzLDU4NDM0LDU4NDM1LDU4NDM2LDU4NDM3LDU4NDM4LDU4NDM5LDU4NDQwLDU4NDQxLDU4NDQyLDU4NDQzLDU4NDQ0LDU4NDQ1LDU4NDQ2LDU4NDQ3LDU4NDQ4LDU4NDQ5LDU4NDUwLDU4NDUxLDU4NDUyLDU4NDUzLDU4NDU0LDU4NDU1''@;'; put 'put ''LDU4NDU2LDU4NDU3LDU4NDU4LDU4NDU5LDU4NDYwLDU4NDYxLDU4NDYyLDU4NDYzLDU4NDY0LDU4NDY1LDU4NDY2LDU4NDY3LDU4NDY4LDU4NDY5LDU4NDcwLDU4NDcxLDY0MDEyLDY0MDEzLDY0MDE0LDY0MDE1LDY0MDE3LDY0MDE5LDY0MDIwLDY0MDI0LDY0MDMxLDY0MDMyLDY0MDMzLDY0''@;'; put 'put ''MDM1LDY0MDM2LDY0MDM5LDY0MDQwLDY0MDQxLDExOTA1LDU5NDE0LDU5NDE1LDU5NDE2LDExOTA4LDEzNDI3LDEzMzgzLDExOTEyLDExOTE1LDU5NDIyLDEzNzI2LDEzODUwLDEzODM4LDExOTE2LDExOTI3LDE0NzAyLDE0NjE2LDU5NDMwLDE0Nzk5LDE0ODE1LDE0OTYzLDE0ODAwLDU5NDM1''@;'; put 'put ''LDU5NDM2LDE1MTgyLDE1NDcwLDE1NTg0LDExOTQzLDU5NDQxLDU5NDQyLDExOTQ2LDE2NDcwLDE2NzM1LDExOTUwLDE3MjA3LDExOTU1LDExOTU4LDExOTU5LDU5NDUxLDE3MzI5LDE3MzI0LDExOTYzLDE3MzczLDE3NjIyLDE4MDE3LDE3OTk2LDU5NDU5LDE4MjExLDE4MjE3LDE4MzAwLDE4''@;'; put 'put ''MzE3LDExOTc4LDE4NzU5LDE4ODEwLDE4ODEzLDE4ODE4LDE4ODE5LDE4ODIxLDE4ODIyLDE4ODQ3LDE4ODQzLDE4ODcxLDE4ODcwLDU5NDc2LDU5NDc3LDE5NjE5LDE5NjE1LDE5NjE2LDE5NjE3LDE5NTc1LDE5NjE4LDE5NzMxLDE5NzMyLDE5NzMzLDE5NzM0LDE5NzM1LDE5NzM2LDE5NzM3''@;'; put 'put ''LDE5ODg2LDU5NDkyLDU4NDcyLDU4NDczLDU4NDc0LDU4NDc1LDU4NDc2LDU4NDc3LDU4NDc4LDU4NDc5LDU4NDgwLDU4NDgxLDU4NDgyLDU4NDgzLDU4NDg0LDU4NDg1LDU4NDg2LDU4NDg3LDU4NDg4LDU4NDg5LDU4NDkwLDU4NDkxLDU4NDkyLDU4NDkzLDU4NDk0LDU4NDk1LDU4NDk2LDU4''@;'; put 'put ''NDk3LDU4NDk4LDU4NDk5LDU4NTAwLDU4NTAxLDU4NTAyLDU4NTAzLDU4NTA0LDU4NTA1LDU4NTA2LDU4NTA3LDU4NTA4LDU4NTA5LDU4NTEwLDU4NTExLDU4NTEyLDU4NTEzLDU4NTE0LDU4NTE1LDU4NTE2LDU4NTE3LDU4NTE4LDU4NTE5LDU4NTIwLDU4NTIxLDU4NTIyLDU4NTIzLDU4NTI0''@;'; put 'put ''LDU4NTI1LDU4NTI2LDU4NTI3LDU4NTI4LDU4NTI5LDU4NTMwLDU4NTMxLDU4NTMyLDU4NTMzLDU4NTM0LDU4NTM1LDU4NTM2LDU4NTM3LDU4NTM4LDU4NTM5LDU4NTQwLDU4NTQxLDU4NTQyLDU4NTQzLDU4NTQ0LDU4NTQ1LDU4NTQ2LDU4NTQ3LDU4NTQ4LDU4NTQ5LDU4NTUwLDU4NTUxLDU4''@;'; put 'put ''NTUyLDU4NTUzLDU4NTU0LDU4NTU1LDU4NTU2LDU4NTU3LDU4NTU4LDU4NTU5LDU4NTYwLDU4NTYxLDU4NTYyLDU4NTYzLDU4NTY0LDU4NTY1XSwiZ2IxODAzMC1yYW5nZXMiOltbMCwxMjhdLFszNiwxNjVdLFszOCwxNjldLFs0NSwxNzhdLFs1MCwxODRdLFs4MSwyMTZdLFs4OSwyMjZdLFs5''@;'; put 'put ''NSwyMzVdLFs5NiwyMzhdLFsxMDAsMjQ0XSxbMTAzLDI0OF0sWzEwNCwyNTFdLFsxMDUsMjUzXSxbMTA5LDI1OF0sWzEyNiwyNzZdLFsxMzMsMjg0XSxbMTQ4LDMwMF0sWzE3MiwzMjVdLFsxNzUsMzI5XSxbMTc5LDMzNF0sWzIwOCwzNjRdLFszMDYsNDYzXSxbMzA3LDQ2NV0sWzMwOCw0Njdd''@;'; put 'put ''LFszMDksNDY5XSxbMzEwLDQ3MV0sWzMxMSw0NzNdLFszMTIsNDc1XSxbMzEzLDQ3N10sWzM0MSw1MDZdLFs0MjgsNTk0XSxbNDQzLDYxMF0sWzU0NCw3MTJdLFs1NDUsNzE2XSxbNTU4LDczMF0sWzc0MSw5MzBdLFs3NDIsOTM4XSxbNzQ5LDk2Ml0sWzc1MCw5NzBdLFs4MDUsMTAyNl0sWzgx''@;'; put 'put ''OSwxMTA0XSxbODIwLDExMDZdLFs3OTIyLDgyMDldLFs3OTI0LDgyMTVdLFs3OTI1LDgyMThdLFs3OTI3LDgyMjJdLFs3OTM0LDgyMzFdLFs3OTQzLDgyNDFdLFs3OTQ0LDgyNDRdLFs3OTQ1LDgyNDZdLFs3OTUwLDgyNTJdLFs4MDYyLDgzNjVdLFs4MTQ4LDg0NTJdLFs4MTQ5LDg0NTRdLFs4''@;'; put 'put ''MTUyLDg0NThdLFs4MTY0LDg0NzFdLFs4MTc0LDg0ODJdLFs4MjM2LDg1NTZdLFs4MjQwLDg1NzBdLFs4MjYyLDg1OTZdLFs4MjY0LDg2MDJdLFs4Mzc0LDg3MTNdLFs4MzgwLDg3MjBdLFs4MzgxLDg3MjJdLFs4Mzg0LDg3MjZdLFs4Mzg4LDg3MzFdLFs4MzkwLDg3MzddLFs4MzkyLDg3NDBd''@;'; put 'put ''LFs4MzkzLDg3NDJdLFs4Mzk0LDg3NDhdLFs4Mzk2LDg3NTFdLFs4NDAxLDg3NjBdLFs4NDA2LDg3NjZdLFs4NDE2LDg3NzddLFs4NDE5LDg3ODFdLFs4NDI0LDg3ODddLFs4NDM3LDg4MDJdLFs4NDM5LDg4MDhdLFs4NDQ1LDg4MTZdLFs4NDgyLDg4NTRdLFs4NDg1LDg4NThdLFs4NDk2LDg4''@;'; put 'put ''NzBdLFs4NTIxLDg4OTZdLFs4NjAzLDg5NzldLFs4OTM2LDkzMjJdLFs4OTQ2LDkzNzJdLFs5MDQ2LDk1NDhdLFs5MDUwLDk1ODhdLFs5MDYzLDk2MTZdLFs5MDY2LDk2MjJdLFs5MDc2LDk2MzRdLFs5MDkyLDk2NTJdLFs5MTAwLDk2NjJdLFs5MTA4LDk2NzJdLFs5MTExLDk2NzZdLFs5MTEz''@;'; put 'put ''LDk2ODBdLFs5MTMxLDk3MDJdLFs5MTYyLDk3MzVdLFs5MTY0LDk3MzhdLFs5MjE4LDk3OTNdLFs5MjE5LDk3OTVdLFsxMTMyOSwxMTkwNl0sWzExMzMxLDExOTA5XSxbMTEzMzQsMTE5MTNdLFsxMTMzNiwxMTkxN10sWzExMzQ2LDExOTI4XSxbMTEzNjEsMTE5NDRdLFsxMTM2MywxMTk0N10s''@;'; put 'put ''WzExMzY2LDExOTUxXSxbMTEzNzAsMTE5NTZdLFsxMTM3MiwxMTk2MF0sWzExMzc1LDExOTY0XSxbMTEzODksMTE5NzldLFsxMTY4MiwxMjI4NF0sWzExNjg2LDEyMjkyXSxbMTE2ODcsMTIzMTJdLFsxMTY5MiwxMjMxOV0sWzExNjk0LDEyMzMwXSxbMTE3MTQsMTIzNTFdLFsxMTcxNiwxMjQz''@;'; put 'put ''Nl0sWzExNzIzLDEyNDQ3XSxbMTE3MjUsMTI1MzVdLFsxMTczMCwxMjU0M10sWzExNzM2LDEyNTg2XSxbMTE5ODIsMTI4NDJdLFsxMTk4OSwxMjg1MF0sWzEyMTAyLDEyOTY0XSxbMTIzMzYsMTMyMDBdLFsxMjM0OCwxMzIxNV0sWzEyMzUwLDEzMjE4XSxbMTIzODQsMTMyNTNdLFsxMjM5Mywx''@;'; put 'put ''MzI2M10sWzEyMzk1LDEzMjY3XSxbMTIzOTcsMTMyNzBdLFsxMjUxMCwxMzM4NF0sWzEyNTUzLDEzNDI4XSxbMTI4NTEsMTM3MjddLFsxMjk2MiwxMzgzOV0sWzEyOTczLDEzODUxXSxbMTM3MzgsMTQ2MTddLFsxMzgyMywxNDcwM10sWzEzOTE5LDE0ODAxXSxbMTM5MzMsMTQ4MTZdLFsxNDA4''@;'; put 'put ''MCwxNDk2NF0sWzE0Mjk4LDE1MTgzXSxbMTQ1ODUsMTU0NzFdLFsxNDY5OCwxNTU4NV0sWzE1NTgzLDE2NDcxXSxbMTU4NDcsMTY3MzZdLFsxNjMxOCwxNzIwOF0sWzE2NDM0LDE3MzI1XSxbMTY0MzgsMTczMzBdLFsxNjQ4MSwxNzM3NF0sWzE2NzI5LDE3NjIzXSxbMTcxMDIsMTc5OTddLFsx''@;'; put 'put ''NzEyMiwxODAxOF0sWzE3MzE1LDE4MjEyXSxbMTczMjAsMTgyMThdLFsxNzQwMiwxODMwMV0sWzE3NDE4LDE4MzE4XSxbMTc4NTksMTg3NjBdLFsxNzkwOSwxODgxMV0sWzE3OTExLDE4ODE0XSxbMTc5MTUsMTg4MjBdLFsxNzkxNiwxODgyM10sWzE3OTM2LDE4ODQ0XSxbMTc5MzksMTg4NDhd''@;'; put 'put ''LFsxNzk2MSwxODg3Ml0sWzE4NjY0LDE5NTc2XSxbMTg3MDMsMTk2MjBdLFsxODgxNCwxOTczOF0sWzE4OTYyLDE5ODg3XSxbMTkwNDMsNDA4NzBdLFszMzQ2OSw1OTI0NF0sWzMzNDcwLDU5MzM2XSxbMzM0NzEsNTkzNjddLFszMzQ4NCw1OTQxM10sWzMzNDg1LDU5NDE3XSxbMzM0OTAsNTk0''@;'; put 'put ''MjNdLFszMzQ5Nyw1OTQzMV0sWzMzNTAxLDU5NDM3XSxbMzM1MDUsNTk0NDNdLFszMzUxMyw1OTQ1Ml0sWzMzNTIwLDU5NDYwXSxbMzM1MzYsNTk0NzhdLFszMzU1MCw1OTQ5M10sWzM3ODQ1LDYzNzg5XSxbMzc5MjEsNjM4NjZdLFszNzk0OCw2Mzg5NF0sWzM4MDI5LDYzOTc2XSxbMzgwMzgs''@;'; put 'put ''NjM5ODZdLFszODA2NCw2NDAxNl0sWzM4MDY1LDY0MDE4XSxbMzgwNjYsNjQwMjFdLFszODA2OSw2NDAyNV0sWzM4MDc1LDY0MDM0XSxbMzgwNzYsNjQwMzddLFszODA3OCw2NDA0Ml0sWzM5MTA4LDY1MDc0XSxbMzkxMDksNjUwOTNdLFszOTExMyw2NTEwN10sWzM5MTE0LDY1MTEyXSxbMzkx''@;'; put 'put ''MTUsNjUxMjddLFszOTExNiw2NTEzMl0sWzM5MjY1LDY1Mzc1XSxbMzkzOTQsNjU1MTBdLFsxODllMyw2NTUzNl1dLGppczAyMDg6WzEyMjg4LDEyMjg5LDEyMjkwLDY1MjkyLDY1Mjk0LDEyNTM5LDY1MzA2LDY1MzA3LDY1MzExLDY1MjgxLDEyNDQzLDEyNDQ0LDE4MCw2NTM0NCwxNjgsNjUz''@;'; put 'put ''NDIsNjU1MDcsNjUzNDMsMTI1NDEsMTI1NDIsMTI0NDUsMTI0NDYsMTIyOTEsMjAxODksMTIyOTMsMTIyOTQsMTIyOTUsMTI1NDAsODIxMyw4MjA4LDY1Mjk1LDY1MzQwLDY1Mzc0LDg3NDEsNjUzNzIsODIzMCw4MjI5LDgyMTYsODIxNyw4MjIwLDgyMjEsNjUyODgsNjUyODksMTIzMDgsMTIz''@;'; put 'put ''MDksNjUzMzksNjUzNDEsNjUzNzEsNjUzNzMsMTIyOTYsMTIyOTcsMTIyOTgsMTIyOTksMTIzMDAsMTIzMDEsMTIzMDIsMTIzMDMsMTIzMDQsMTIzMDUsNjUyOTEsNjUyOTMsMTc3LDIxNSwyNDcsNjUzMDksODgwMCw2NTMwOCw2NTMxMCw4ODA2LDg4MDcsODczNCw4NzU2LDk3OTQsOTc5Miwx''@;'; put 'put ''NzYsODI0Miw4MjQzLDg0NTEsNjU1MDksNjUyODQsNjU1MDQsNjU1MDUsNjUyODUsNjUyODMsNjUyODYsNjUyOTAsNjUzMTIsMTY3LDk3MzQsOTczMyw5Njc1LDk2NzksOTY3OCw5NjcxLDk2NzAsOTYzMyw5NjMyLDk2NTEsOTY1MCw5NjYxLDk2NjAsODI1MSwxMjMwNiw4NTk0LDg1OTIsODU5''@;'; put 'put ''Myw4NTk1LDEyMzA3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4NzEyLDg3MTUsODgzOCw4ODM5LDg4MzQsODgzNSw4NzQ2LDg3NDUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDg3NDMsODc0NCw2NTUwNiw4''@;'; put 'put ''NjU4LDg2NjAsODcwNCw4NzA3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4NzM2LDg4NjksODk3OCw4NzA2LDg3MTEsODgwMSw4Nzg2LDg4MTAsODgxMSw4NzMwLDg3NjUsODczMyw4NzU3LDg3NDcsODc0OCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLDg0OTEsODI0MCw5ODM5LDk4MzcsOTgzNCw4MjI0LDgyMjUsMTgyLG51bGwsbnVsbCxudWxsLG51bGwsOTcxMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2NTI5Niw2''@;'; put 'put ''NTI5Nyw2NTI5OCw2NTI5OSw2NTMwMCw2NTMwMSw2NTMwMiw2NTMwMyw2NTMwNCw2NTMwNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDY1MzEzLDY1MzE0LDY1MzE1LDY1MzE2LDY1MzE3LDY1MzE4LDY1MzE5LDY1MzIwLDY1MzIxLDY1MzIyLDY1MzIzLDY1MzI0LDY1MzI1''@;'; put 'put ''LDY1MzI2LDY1MzI3LDY1MzI4LDY1MzI5LDY1MzMwLDY1MzMxLDY1MzMyLDY1MzMzLDY1MzM0LDY1MzM1LDY1MzM2LDY1MzM3LDY1MzM4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDY1MzQ1LDY1MzQ2LDY1MzQ3LDY1MzQ4LDY1MzQ5LDY1MzUwLDY1MzUxLDY1MzUyLDY1MzUzLDY1''@;'; put 'put ''MzU0LDY1MzU1LDY1MzU2LDY1MzU3LDY1MzU4LDY1MzU5LDY1MzYwLDY1MzYxLDY1MzYyLDY1MzYzLDY1MzY0LDY1MzY1LDY1MzY2LDY1MzY3LDY1MzY4LDY1MzY5LDY1MzcwLG51bGwsbnVsbCxudWxsLG51bGwsMTIzNTMsMTIzNTQsMTIzNTUsMTIzNTYsMTIzNTcsMTIzNTgsMTIzNTksMTIz''@;'; put 'put ''NjAsMTIzNjEsMTIzNjIsMTIzNjMsMTIzNjQsMTIzNjUsMTIzNjYsMTIzNjcsMTIzNjgsMTIzNjksMTIzNzAsMTIzNzEsMTIzNzIsMTIzNzMsMTIzNzQsMTIzNzUsMTIzNzYsMTIzNzcsMTIzNzgsMTIzNzksMTIzODAsMTIzODEsMTIzODIsMTIzODMsMTIzODQsMTIzODUsMTIzODYsMTIzODcs''@;'; put 'put ''MTIzODgsMTIzODksMTIzOTAsMTIzOTEsMTIzOTIsMTIzOTMsMTIzOTQsMTIzOTUsMTIzOTYsMTIzOTcsMTIzOTgsMTIzOTksMTI0MDAsMTI0MDEsMTI0MDIsMTI0MDMsMTI0MDQsMTI0MDUsMTI0MDYsMTI0MDcsMTI0MDgsMTI0MDksMTI0MTAsMTI0MTEsMTI0MTIsMTI0MTMsMTI0MTQsMTI0''@;'; put 'put ''MTUsMTI0MTYsMTI0MTcsMTI0MTgsMTI0MTksMTI0MjAsMTI0MjEsMTI0MjIsMTI0MjMsMTI0MjQsMTI0MjUsMTI0MjYsMTI0MjcsMTI0MjgsMTI0MjksMTI0MzAsMTI0MzEsMTI0MzIsMTI0MzMsMTI0MzQsMTI0MzUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLDEyNDQ5LDEyNDUwLDEyNDUxLDEyNDUyLDEyNDUzLDEyNDU0LDEyNDU1LDEyNDU2LDEyNDU3LDEyNDU4LDEyNDU5LDEyNDYwLDEyNDYxLDEyNDYyLDEyNDYzLDEyNDY0LDEyNDY1LDEyNDY2LDEyNDY3LDEyNDY4LDEyNDY5LDEyNDcwLDEyNDcxLDEyNDcyLDEyNDczLDEy''@;'; put 'put ''NDc0LDEyNDc1LDEyNDc2LDEyNDc3LDEyNDc4LDEyNDc5LDEyNDgwLDEyNDgxLDEyNDgyLDEyNDgzLDEyNDg0LDEyNDg1LDEyNDg2LDEyNDg3LDEyNDg4LDEyNDg5LDEyNDkwLDEyNDkxLDEyNDkyLDEyNDkzLDEyNDk0LDEyNDk1LDEyNDk2LDEyNDk3LDEyNDk4LDEyNDk5LDEyNTAwLDEyNTAx''@;'; put 'put ''LDEyNTAyLDEyNTAzLDEyNTA0LDEyNTA1LDEyNTA2LDEyNTA3LDEyNTA4LDEyNTA5LDEyNTEwLDEyNTExLDEyNTEyLDEyNTEzLDEyNTE0LDEyNTE1LDEyNTE2LDEyNTE3LDEyNTE4LDEyNTE5LDEyNTIwLDEyNTIxLDEyNTIyLDEyNTIzLDEyNTI0LDEyNTI1LDEyNTI2LDEyNTI3LDEyNTI4LDEy''@;'; put 'put ''NTI5LDEyNTMwLDEyNTMxLDEyNTMyLDEyNTMzLDEyNTM0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2''@;'; put 'put ''LDkzNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwMjUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcx''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDExMDUsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4''@;'; put 'put ''LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDk2''@;'; put 'put ''LDk0OTIsOTUwMCw5NTE2LDk1MDgsOTUyNCw5NTMyLDk0NzMsOTQ3NSw5NDg3LDk0OTEsOTQ5OSw5NDk1LDk1MDcsOTUyMyw5NTE1LDk1MzEsOTU0Nyw5NTA0LDk1MTksOTUxMiw5NTI3LDk1MzUsOTUwMSw5NTIwLDk1MDksOTUyOCw5NTM4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLDkzMTIsOTMxMyw5MzE0LDkzMTUsOTMxNiw5MzE3LDkzMTgsOTMxOSw5MzIwLDkzMjEsOTMyMiw5MzIzLDkzMjQsOTMyNSw5MzI2LDkzMjcsOTMyOCw5MzI5LDkzMzAsOTMzMSw4NTQ0LDg1NDUsODU0Niw4NTQ3LDg1NDgsODU0OSw4NTUwLDg1NTEsODU1Miw4NTUz''@;'; put 'put ''LG51bGwsMTMxMjksMTMwNzYsMTMwOTAsMTMxMzMsMTMwODAsMTMwOTUsMTMwNTksMTMxMTAsMTMxMzcsMTMxNDMsMTMwNjksMTMwOTQsMTMwOTEsMTMwOTksMTMxMzAsMTMxMTUsMTMyMTIsMTMyMTMsMTMyMTQsMTMxOTgsMTMxOTksMTMyNTIsMTMyMTcsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLDEzMTc5LDEyMzE3LDEyMzE5LDg0NzAsMTMyNjEsODQ4MSwxMjk2NCwxMjk2NSwxMjk2NiwxMjk2NywxMjk2OCwxMjg0OSwxMjg1MCwxMjg1NywxMzE4MiwxMzE4MSwxMzE4MCw4Nzg2LDg4MDEsODc0Nyw4NzUwLDg3MjEsODczMCw4ODY5LDg3MzYsODczNSw4''@;'; put 'put ''ODk1LDg3NTcsODc0NSw4NzQ2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjAxMjQsMjE3ODIsMjMwNDMsMzg0''@;'; put 'put ''NjMsMjE2OTYsMjQ4NTksMjUzODQsMjMwMzAsMzY4OTgsMzM5MDksMzM1NjQsMzEzMTIsMjQ3NDYsMjU1NjksMjgxOTcsMjYwOTMsMzM4OTQsMzM0NDYsMzk5MjUsMjY3NzEsMjIzMTEsMjYwMTcsMjUyMDEsMjM0NTEsMjI5OTIsMzQ0MjcsMzkxNTYsMzIwOTgsMzIxOTAsMzk4MjIsMjUxMTAs''@;'; put 'put ''MzE5MDMsMzQ5OTksMjM0MzMsMjQyNDUsMjUzNTMsMjYyNjMsMjY2OTYsMzgzNDMsMzg3OTcsMjY0NDcsMjAxOTcsMjAyMzQsMjAzMDEsMjAzODEsMjA1NTMsMjIyNTgsMjI4MzksMjI5OTYsMjMwNDEsMjM1NjEsMjQ3OTksMjQ4NDcsMjQ5NDQsMjYxMzEsMjY4ODUsMjg4NTgsMzAwMzEsMzAw''@;'; put 'put ''NjQsMzEyMjcsMzIxNzMsMzIyMzksMzI5NjMsMzM4MDYsMzQ5MTUsMzU1ODYsMzY5NDksMzY5ODYsMjEzMDcsMjAxMTcsMjAxMzMsMjI0OTUsMzI5NDYsMzcwNTcsMzA5NTksMTk5NjgsMjI3NjksMjgzMjIsMzY5MjAsMzEyODIsMzM1NzYsMzM0MTksMzk5ODMsMjA4MDEsMjEzNjAsMjE2OTMs''@;'; put 'put ''MjE3MjksMjIyNDAsMjMwMzUsMjQzNDEsMzkxNTQsMjgxMzksMzI5OTYsMzQwOTMsMzg0OTgsMzg1MTIsMzg1NjAsMzg5MDcsMjE1MTUsMjE0OTEsMjM0MzEsMjg4NzksMzI3MDEsMzY4MDIsMzg2MzIsMjEzNTksNDAyODQsMzE0MTgsMTk5ODUsMzA4NjcsMzMyNzYsMjgxOTgsMjIwNDAsMjE3''@;'; put 'put ''NjQsMjc0MjEsMzQwNzQsMzk5OTUsMjMwMTMsMjE0MTcsMjgwMDYsMjk5MTYsMzgyODcsMjIwODIsMjAxMTMsMzY5MzksMzg2NDIsMzM2MTUsMzkxODAsMjE0NzMsMjE5NDIsMjMzNDQsMjQ0MzMsMjYxNDQsMjYzNTUsMjY2MjgsMjc3MDQsMjc4OTEsMjc5NDUsMjk3ODcsMzA0MDgsMzEzMTAs''@;'; put 'put ''Mzg5NjQsMzM1MjEsMzQ5MDcsMzU0MjQsMzc2MTMsMjgwODIsMzAxMjMsMzA0MTAsMzkzNjUsMjQ3NDIsMzU1ODUsMzYyMzQsMzgzMjIsMjcwMjIsMjE0MjEsMjA4NzAsMjIyOTAsMjI1NzYsMjI4NTIsMjM0NzYsMjQzMTAsMjQ2MTYsMjU1MTMsMjU1ODgsMjc4MzksMjg0MzYsMjg4MTQsMjg5''@;'; put 'put ''NDgsMjkwMTcsMjkxNDEsMjk1MDMsMzIyNTcsMzMzOTgsMzM0ODksMzQxOTksMzY5NjAsMzc0NjcsNDAyMTksMjI2MzMsMjYwNDQsMjc3MzgsMjk5ODksMjA5ODUsMjI4MzAsMjI4ODUsMjQ0NDgsMjQ1NDAsMjUyNzYsMjYxMDYsMjcxNzgsMjc0MzEsMjc1NzIsMjk1NzksMzI3MDUsMzUxNTgs''@;'; put 'put ''NDAyMzYsNDAyMDYsNDA2NDQsMjM3MTMsMjc3OTgsMzM2NTksMjA3NDAsMjM2MjcsMjUwMTQsMzMyMjIsMjY3NDIsMjkyODEsMjAwNTcsMjA0NzQsMjEzNjgsMjQ2ODEsMjgyMDEsMzEzMTEsMzg4OTksMTk5NzksMjEyNzAsMjAyMDYsMjAzMDksMjAyODUsMjAzODUsMjAzMzksMjExNTIsMjE0''@;'; put 'put ''ODcsMjIwMjUsMjI3OTksMjMyMzMsMjM0NzgsMjM1MjEsMzExODUsMjYyNDcsMjY1MjQsMjY1NTAsMjc0NjgsMjc4MjcsMjg3NzksMjk2MzQsMzExMTcsMzExNjYsMzEyOTIsMzE2MjMsMzM0NTcsMzM0OTksMzM1NDAsMzM2NTUsMzM3NzUsMzM3NDcsMzQ2NjIsMzU1MDYsMjIwNTcsMzYwMDgs''@;'; put 'put ''MzY4MzgsMzY5NDIsMzg2ODYsMzQ0NDIsMjA0MjAsMjM3ODQsMjUxMDUsMjkyNzMsMzAwMTEsMzMyNTMsMzM0NjksMzQ1NTgsMzYwMzIsMzg1OTcsMzkxODcsMzkzODEsMjAxNzEsMjAyNTAsMzUyOTksMjIyMzgsMjI2MDIsMjI3MzAsMjQzMTUsMjQ1NTUsMjQ2MTgsMjQ3MjQsMjQ2NzQsMjUw''@;'; put 'put ''NDAsMjUxMDYsMjUyOTYsMjU5MTMsMzk3NDUsMjYyMTQsMjY4MDAsMjgwMjMsMjg3ODQsMzAwMjgsMzAzNDIsMzIxMTcsMzM0NDUsMzQ4MDksMzgyODMsMzg1NDIsMzU5OTcsMjA5NzcsMjExODIsMjI4MDYsMjE2ODMsMjM0NzUsMjM4MzAsMjQ5MzYsMjcwMTAsMjgwNzksMzA4NjEsMzM5OTUs''@;'; put 'put ''MzQ5MDMsMzU0NDIsMzc3OTksMzk2MDgsMjgwMTIsMzkzMzYsMzQ1MjEsMjI0MzUsMjY2MjMsMzQ1MTAsMzczOTAsMjExMjMsMjIxNTEsMjE1MDgsMjQyNzUsMjUzMTMsMjU3ODUsMjY2ODQsMjY2ODAsMjc1NzksMjk1NTQsMzA5MDYsMzEzMzksMzUyMjYsMzUyODIsMzYyMDMsMzY2MTEsMzcx''@;'; put 'put ''MDEsMzgzMDcsMzg1NDgsMzg3NjEsMjMzOTgsMjM3MzEsMjcwMDUsMzg5ODksMzg5OTAsMjU0OTksMzE1MjAsMjcxNzksMjcyNjMsMjY4MDYsMzk5NDksMjg1MTEsMjExMDYsMjE5MTcsMjQ2ODgsMjUzMjQsMjc5NjMsMjgxNjcsMjgzNjksMzM4ODMsMzUwODgsMzY2NzYsMTk5ODgsMzk5OTMs''@;'; put 'put ''MjE0OTQsMjY5MDcsMjcxOTQsMzg3ODgsMjY2NjYsMjA4MjgsMzE0MjcsMzM5NzAsMzczNDAsMzc3NzIsMjIxMDcsNDAyMzIsMjY2NTgsMzM1NDEsMzM4NDEsMzE5MDksMjFlMywzMzQ3NywyOTkyNiwyMDA5NCwyMDM1NSwyMDg5NiwyMzUwNiwyMTAwMiwyMTIwOCwyMTIyMywyNDA1OSwyMTkx''@;'; put 'put ''NCwyMjU3MCwyMzAxNCwyMzQzNiwyMzQ0OCwyMzUxNSwyNDE3OCwyNDE4NSwyNDczOSwyNDg2MywyNDkzMSwyNTAyMiwyNTU2MywyNTk1NCwyNjU3NywyNjcwNywyNjg3NCwyNzQ1NCwyNzQ3NSwyNzczNSwyODQ1MCwyODU2NywyODQ4NSwyOTg3MiwyOTk3NiwzMDQzNSwzMDQ3NSwzMTQ4Nywz''@;'; put 'put ''MTY0OSwzMTc3NywzMjIzMywzMjU2NiwzMjc1MiwzMjkyNSwzMzM4MiwzMzY5NCwzNTI1MSwzNTUzMiwzNjAxMSwzNjk5NiwzNzk2OSwzODI5MSwzODI4OSwzODMwNiwzODUwMSwzODg2NywzOTIwOCwzMzMwNCwyMDAyNCwyMTU0NywyMzczNiwyNDAxMiwyOTYwOSwzMDI4NCwzMDUyNCwyMzcy''@;'; put 'put ''MSwzMjc0NywzNjEwNywzODU5MywzODkyOSwzODk5NiwzOWUzLDIwMjI1LDIwMjM4LDIxMzYxLDIxOTE2LDIyMTIwLDIyNTIyLDIyODU1LDIzMzA1LDIzNDkyLDIzNjk2LDI0MDc2LDI0MTkwLDI0NTI0LDI1NTgyLDI2NDI2LDI2MDcxLDI2MDgyLDI2Mzk5LDI2ODI3LDI2ODIwLDI3MjMxLDI0''@;'; put 'put ''MTEyLDI3NTg5LDI3NjcxLDI3NzczLDMwMDc5LDMxMDQ4LDIzMzk1LDMxMjMyLDMyZTMsMjQ1MDksMzUyMTUsMzUzNTIsMzYwMjAsMzYyMTUsMzY1NTYsMzY2MzcsMzkxMzgsMzk0MzgsMzk3NDAsMjAwOTYsMjA2MDUsMjA3MzYsMjI5MzEsMjM0NTIsMjUxMzUsMjUyMTYsMjU4MzYsMjc0NTAs''@;'; put 'put ''MjkzNDQsMzAwOTcsMzEwNDcsMzI2ODEsMzQ4MTEsMzU1MTYsMzU2OTYsMjU1MTYsMzM3MzgsMzg4MTYsMjE1MTMsMjE1MDcsMjE5MzEsMjY3MDgsMjcyMjQsMzU0NDAsMzA3NTksMjY0ODUsNDA2NTMsMjEzNjQsMjM0NTgsMzMwNTAsMzQzODQsMzY4NzAsMTk5OTIsMjAwMzcsMjAxNjcsMjAy''@;'; put 'put ''NDEsMjE0NTAsMjE1NjAsMjM0NzAsMjQzMzksMjQ2MTMsMjU5MzcsMjY0MjksMjc3MTQsMjc3NjIsMjc4NzUsMjg3OTIsMjk2OTksMzEzNTAsMzE0MDYsMzE0OTYsMzIwMjYsMzE5OTgsMzIxMDIsMjYwODcsMjkyNzUsMjE0MzUsMjM2MjEsMjQwNDAsMjUyOTgsMjUzMTIsMjUzNjksMjgxOTIs''@;'; put 'put ''MzQzOTQsMzUzNzcsMzYzMTcsMzc2MjQsMjg0MTcsMzExNDIsMzk3NzAsMjAxMzYsMjAxMzksMjAxNDAsMjAzNzksMjAzODQsMjA2ODksMjA4MDcsMzE0NzgsMjA4NDksMjA5ODIsMjEzMzIsMjEyODEsMjEzNzUsMjE0ODMsMjE5MzIsMjI2NTksMjM3NzcsMjQzNzUsMjQzOTQsMjQ2MjMsMjQ2''@;'; put 'put ''NTYsMjQ2ODUsMjUzNzUsMjU5NDUsMjcyMTEsMjc4NDEsMjkzNzgsMjk0MjEsMzA3MDMsMzMwMTYsMzMwMjksMzMyODgsMzQxMjYsMzcxMTEsMzc4NTcsMzg5MTEsMzkyNTUsMzk1MTQsMjAyMDgsMjA5NTcsMjM1OTcsMjYyNDEsMjY5ODksMjM2MTYsMjYzNTQsMjY5OTcsMjk1NzcsMjY3MDQs''@;'; put 'put ''MzE4NzMsMjA2NzcsMjEyMjAsMjIzNDMsMjQwNjIsMzc2NzAsMjYwMjAsMjc0MjcsMjc0NTMsMjk3NDgsMzExMDUsMzExNjUsMzE1NjMsMzIyMDIsMzM0NjUsMzM3NDAsMzQ5NDMsMzUxNjcsMzU2NDEsMzY4MTcsMzczMjksMjE1MzUsMzc1MDQsMjAwNjEsMjA1MzQsMjE0NzcsMjEzMDYsMjkz''@;'; put 'put ''OTksMjk1OTAsMzA2OTcsMzM1MTAsMzY1MjcsMzkzNjYsMzkzNjgsMzkzNzgsMjA4NTUsMjQ4NTgsMzQzOTgsMjE5MzYsMzEzNTQsMjA1OTgsMjM1MDcsMzY5MzUsMzg1MzMsMjAwMTgsMjczNTUsMzczNTEsMjM2MzMsMjM2MjQsMjU0OTYsMzEzOTEsMjc3OTUsMzg3NzIsMzY3MDUsMzE0MDIs''@;'; put 'put ''MjkwNjYsMzg1MzYsMzE4NzQsMjY2NDcsMzIzNjgsMjY3MDUsMzc3NDAsMjEyMzQsMjE1MzEsMzQyMTksMzUzNDcsMzI2NzYsMzY1NTcsMzcwODksMjEzNTAsMzQ5NTIsMzEwNDEsMjA0MTgsMjA2NzAsMjEwMDksMjA4MDQsMjE4NDMsMjIzMTcsMjk2NzQsMjI0MTEsMjI4NjUsMjQ0MTgsMjQ0''@;'; put 'put ''NTIsMjQ2OTMsMjQ5NTAsMjQ5MzUsMjUwMDEsMjU1MjIsMjU2NTgsMjU5NjQsMjYyMjMsMjY2OTAsMjgxNzksMzAwNTQsMzEyOTMsMzE5OTUsMzIwNzYsMzIxNTMsMzIzMzEsMzI2MTksMzM1NTAsMzM2MTAsMzQ1MDksMzUzMzYsMzU0MjcsMzU2ODYsMzY2MDUsMzg5MzgsNDAzMzUsMzM0NjQs''@;'; put 'put ''MzY4MTQsMzk5MTIsMjExMjcsMjUxMTksMjU3MzEsMjg2MDgsMzg1NTMsMjY2ODksMjA2MjUsMjc0MjQsMjc3NzAsMjg1MDAsMzEzNDgsMzIwODAsMzQ4ODAsMzUzNjMsMjYzNzYsMjAyMTQsMjA1MzcsMjA1MTgsMjA1ODEsMjA4NjAsMjEwNDgsMjEwOTEsMjE5MjcsMjIyODcsMjI1MzMsMjMy''@;'; put 'put ''NDQsMjQzMTQsMjUwMTAsMjUwODAsMjUzMzEsMjU0NTgsMjY5MDgsMjcxNzcsMjkzMDksMjkzNTYsMjk0ODYsMzA3NDAsMzA4MzEsMzIxMjEsMzA0NzYsMzI5MzcsMzUyMTEsMzU2MDksMzYwNjYsMzY1NjIsMzY5NjMsMzc3NDksMzg1MjIsMzg5OTcsMzk0NDMsNDA1NjgsMjA4MDMsMjE0MDcs''@;'; put 'put ''MjE0MjcsMjQxODcsMjQzNTgsMjgxODcsMjgzMDQsMjk1NzIsMjk2OTQsMzIwNjcsMzMzMzUsMzUzMjgsMzU1NzgsMzg0ODAsMjAwNDYsMjA0OTEsMjE0NzYsMjE2MjgsMjIyNjYsMjI5OTMsMjMzOTYsMjQwNDksMjQyMzUsMjQzNTksMjUxNDQsMjU5MjUsMjY1NDMsMjgyNDYsMjkzOTIsMzE5''@;'; put 'put ''NDYsMzQ5OTYsMzI5MjksMzI5OTMsMzM3NzYsMzQzODIsMzU0NjMsMzYzMjgsMzc0MzEsMzg1OTksMzkwMTUsNDA3MjMsMjAxMTYsMjAxMTQsMjAyMzcsMjEzMjAsMjE1NzcsMjE1NjYsMjMwODcsMjQ0NjAsMjQ0ODEsMjQ3MzUsMjY3OTEsMjcyNzgsMjk3ODYsMzA4NDksMzU0ODYsMzU0OTIs''@;'; put 'put ''MzU3MDMsMzcyNjQsMjAwNjIsMzk4ODEsMjAxMzIsMjAzNDgsMjAzOTksMjA1MDUsMjA1MDIsMjA4MDksMjA4NDQsMjExNTEsMjExNzcsMjEyNDYsMjE0MDIsMjE0NzUsMjE1MjEsMjE1MTgsMjE4OTcsMjIzNTMsMjI0MzQsMjI5MDksMjMzODAsMjMzODksMjM0MzksMjQwMzcsMjQwMzksMjQw''@;'; put 'put ''NTUsMjQxODQsMjQxOTUsMjQyMTgsMjQyNDcsMjQzNDQsMjQ2NTgsMjQ5MDgsMjUyMzksMjUzMDQsMjU1MTEsMjU5MTUsMjYxMTQsMjYxNzksMjYzNTYsMjY0NzcsMjY2NTcsMjY3NzUsMjcwODMsMjc3NDMsMjc5NDYsMjgwMDksMjgyMDcsMjgzMTcsMzAwMDIsMzAzNDMsMzA4MjgsMzEyOTUs''@;'; put 'put ''MzE5NjgsMzIwMDUsMzIwMjQsMzIwOTQsMzIxNzcsMzI3ODksMzI3NzEsMzI5NDMsMzI5NDUsMzMxMDgsMzMxNjcsMzMzMjIsMzM2MTgsMzQ4OTIsMzQ5MTMsMzU2MTEsMzYwMDIsMzYwOTIsMzcwNjYsMzcyMzcsMzc0ODksMzA3ODMsMzc2MjgsMzgzMDgsMzg0NzcsMzg5MTcsMzkzMjEsMzk2''@;'; put 'put ''NDAsNDAyNTEsMjEwODMsMjExNjMsMjE0OTUsMjE1MTIsMjI3NDEsMjUzMzUsMjg2NDAsMzU5NDYsMzY3MDMsNDA2MzMsMjA4MTEsMjEwNTEsMjE1NzgsMjIyNjksMzEyOTYsMzcyMzksNDAyODgsNDA2NTgsMjk1MDgsMjg0MjUsMzMxMzYsMjk5NjksMjQ1NzMsMjQ3OTQsMzk1OTIsMjk0MDMs''@;'; put 'put ''MzY3OTYsMjc0OTIsMzg5MTUsMjAxNzAsMjIyNTYsMjIzNzIsMjI3MTgsMjMxMzAsMjQ2ODAsMjUwMzEsMjYxMjcsMjYxMTgsMjY2ODEsMjY4MDEsMjgxNTEsMzAxNjUsMzIwNTgsMzMzOTAsMzk3NDYsMjAxMjMsMjAzMDQsMjE0NDksMjE3NjYsMjM5MTksMjQwMzgsMjQwNDYsMjY2MTksMjc4''@;'; put 'put ''MDEsMjk4MTEsMzA3MjIsMzU0MDgsMzc3ODIsMzUwMzksMjIzNTIsMjQyMzEsMjUzODcsMjA2NjEsMjA2NTIsMjA4NzcsMjYzNjgsMjE3MDUsMjI2MjIsMjI5NzEsMjM0NzIsMjQ0MjUsMjUxNjUsMjU1MDUsMjY2ODUsMjc1MDcsMjgxNjgsMjg3OTcsMzczMTksMjkzMTIsMzA3NDEsMzA3NTgs''@;'; put 'put ''MzEwODUsMjU5OTgsMzIwNDgsMzM3NTYsMzUwMDksMzY2MTcsMzg1NTUsMjEwOTIsMjIzMTIsMjY0NDgsMzI2MTgsMzYwMDEsMjA5MTYsMjIzMzgsMzg0NDIsMjI1ODYsMjcwMTgsMzI5NDgsMjE2ODIsMjM4MjIsMjI1MjQsMzA4NjksNDA0NDIsMjAzMTYsMjEwNjYsMjE2NDMsMjU2NjIsMjYx''@;'; put 'put ''NTIsMjYzODgsMjY2MTMsMzEzNjQsMzE1NzQsMzIwMzQsMzc2NzksMjY3MTYsMzk4NTMsMzE1NDUsMjEyNzMsMjA4NzQsMjEwNDcsMjM1MTksMjUzMzQsMjU3NzQsMjU4MzAsMjY0MTMsMjc1NzgsMzQyMTcsMzg2MDksMzAzNTIsMzk4OTQsMjU0MjAsMzc2MzgsMzk4NTEsMzAzOTksMjYxOTQs''@;'; put 'put ''MTk5NzcsMjA2MzIsMjE0NDIsMjM2NjUsMjQ4MDgsMjU3NDYsMjU5NTUsMjY3MTksMjkxNTgsMjk2NDIsMjk5ODcsMzE2MzksMzIzODYsMzQ0NTMsMzU3MTUsMzYwNTksMzcyNDAsMzkxODQsMjYwMjgsMjYyODMsMjc1MzEsMjAxODEsMjAxODAsMjAyODIsMjAzNTEsMjEwNTAsMjE0OTYsMjE0''@;'; put 'put ''OTAsMjE5ODcsMjIyMzUsMjI3NjMsMjI5ODcsMjI5ODUsMjMwMzksMjMzNzYsMjM2MjksMjQwNjYsMjQxMDcsMjQ1MzUsMjQ2MDUsMjUzNTEsMjU5MDMsMjMzODgsMjYwMzEsMjYwNDUsMjYwODgsMjY1MjUsMjc0OTAsMjc1MTUsMjc2NjMsMjk1MDksMzEwNDksMzExNjksMzE5OTIsMzIwMjUs''@;'; put 'put ''MzIwNDMsMzI5MzAsMzMwMjYsMzMyNjcsMzUyMjIsMzU0MjIsMzU0MzMsMzU0MzAsMzU0NjgsMzU1NjYsMzYwMzksMzYwNjAsMzg2MDQsMzkxNjQsMjc1MDMsMjAxMDcsMjAyODQsMjAzNjUsMjA4MTYsMjMzODMsMjM1NDYsMjQ5MDQsMjUzNDUsMjYxNzgsMjc0MjUsMjgzNjMsMjc4MzUsMjky''@;'; put 'put ''NDYsMjk4ODUsMzAxNjQsMzA5MTMsMzEwMzQsMzI3ODAsMzI4MTksMzMyNTgsMzM5NDAsMzY3NjYsMjc3MjgsNDA1NzUsMjQzMzUsMzU2NzIsNDAyMzUsMzE0ODIsMzY2MDAsMjM0MzcsMzg2MzUsMTk5NzEsMjE0ODksMjI1MTksMjI4MzMsMjMyNDEsMjM0NjAsMjQ3MTMsMjgyODcsMjg0MjIs''@;'; put 'put ''MzAxNDIsMzYwNzQsMjM0NTUsMzQwNDgsMzE3MTIsMjA1OTQsMjY2MTIsMzM0MzcsMjM2NDksMzQxMjIsMzIyODYsMzMyOTQsMjA4ODksMjM1NTYsMjU0NDgsMzYxOTgsMjYwMTIsMjkwMzgsMzEwMzgsMzIwMjMsMzI3NzMsMzU2MTMsMzY1NTQsMzY5NzQsMzQ1MDMsMzcwMzQsMjA1MTEsMjEy''@;'; put 'put ''NDIsMjM2MTAsMjY0NTEsMjg3OTYsMjkyMzcsMzcxOTYsMzczMjAsMzc2NzUsMzM1MDksMjM0OTAsMjQzNjksMjQ4MjUsMjAwMjcsMjE0NjIsMjM0MzIsMjUxNjMsMjY0MTcsMjc1MzAsMjk0MTcsMjk2NjQsMzEyNzgsMzMxMzEsMzYyNTksMzcyMDIsMzkzMTgsMjA3NTQsMjE0NjMsMjE2MTAs''@;'; put 'put ''MjM1NTEsMjU0ODAsMjcxOTMsMzIxNzIsMzg2NTYsMjIyMzQsMjE0NTQsMjE2MDgsMjM0NDcsMjM2MDEsMjQwMzAsMjA0NjIsMjQ4MzMsMjUzNDIsMjc5NTQsMzExNjgsMzExNzksMzIwNjYsMzIzMzMsMzI3MjIsMzMyNjEsMzMzMTEsMzM5MzYsMzQ4ODYsMzUxODYsMzU3MjgsMzY0NjgsMzY2''@;'; put 'put ''NTUsMzY5MTMsMzcxOTUsMzcyMjgsMzg1OTgsMzcyNzYsMjAxNjAsMjAzMDMsMjA4MDUsMjEzMTMsMjQ0NjcsMjUxMDIsMjY1ODAsMjc3MTMsMjgxNzEsMjk1MzksMzIyOTQsMzczMjUsMzc1MDcsMjE0NjAsMjI4MDksMjM0ODcsMjgxMTMsMzEwNjksMzIzMDIsMzE4OTksMjI2NTQsMjkwODcs''@;'; put 'put ''MjA5ODYsMzQ4OTksMzY4NDgsMjA0MjYsMjM4MDMsMjYxNDksMzA2MzYsMzE0NTksMzMzMDgsMzk0MjMsMjA5MzQsMjQ0OTAsMjYwOTIsMjY5OTEsMjc1MjksMjgxNDcsMjgzMTAsMjg1MTYsMzA0NjIsMzIwMjAsMjQwMzMsMzY5ODEsMzcyNTUsMzg5MTgsMjA5NjYsMjEwMjEsMjUxNTIsMjYy''@;'; put 'put ''NTcsMjYzMjksMjgxODYsMjQyNDYsMzIyMTAsMzI2MjYsMjYzNjAsMzQyMjMsMzQyOTUsMzU1NzYsMjExNjEsMjE0NjUsMjI4OTksMjQyMDcsMjQ0NjQsMjQ2NjEsMzc2MDQsMzg1MDAsMjA2NjMsMjA3NjcsMjEyMTMsMjEyODAsMjEzMTksMjE0ODQsMjE3MzYsMjE4MzAsMjE4MDksMjIwMzks''@;'; put 'put ''MjI4ODgsMjI5NzQsMjMxMDAsMjM0NzcsMjM1NTgsMjM1NjcsMjM1NjksMjM1NzgsMjQxOTYsMjQyMDIsMjQyODgsMjQ0MzIsMjUyMTUsMjUyMjAsMjUzMDcsMjU0ODQsMjU0NjMsMjYxMTksMjYxMjQsMjYxNTcsMjYyMzAsMjY0OTQsMjY3ODYsMjcxNjcsMjcxODksMjc4MzYsMjgwNDAsMjgx''@;'; put 'put ''NjksMjgyNDgsMjg5ODgsMjg5NjYsMjkwMzEsMzAxNTEsMzA0NjUsMzA4MTMsMzA5NzcsMzEwNzcsMzEyMTYsMzE0NTYsMzE1MDUsMzE5MTEsMzIwNTcsMzI5MTgsMzM3NTAsMzM5MzEsMzQxMjEsMzQ5MDksMzUwNTksMzUzNTksMzUzODgsMzU0MTIsMzU0NDMsMzU5MzcsMzYwNjIsMzcyODQs''@;'; put 'put ''Mzc0NzgsMzc3NTgsMzc5MTIsMzg1NTYsMzg4MDgsMTk5NzgsMTk5NzYsMTk5OTgsMjAwNTUsMjA4ODcsMjExMDQsMjI0NzgsMjI1ODAsMjI3MzIsMjMzMzAsMjQxMjAsMjQ3NzMsMjU4NTQsMjY0NjUsMjY0NTQsMjc5NzIsMjkzNjYsMzAwNjcsMzEzMzEsMzM5NzYsMzU2OTgsMzczMDQsMzc2''@;'; put 'put ''NjQsMjIwNjUsMjI1MTYsMzkxNjYsMjUzMjUsMjY4OTMsMjc1NDIsMjkxNjUsMzIzNDAsMzI4ODcsMzMzOTQsMzUzMDIsMzkxMzUsMzQ2NDUsMzY3ODUsMjM2MTEsMjAyODAsMjA0NDksMjA0MDUsMjE3NjcsMjMwNzIsMjM1MTcsMjM1MjksMjQ1MTUsMjQ5MTAsMjUzOTEsMjYwMzIsMjYxODcs''@;'; put 'put ''MjY4NjIsMjcwMzUsMjgwMjQsMjgxNDUsMzAwMDMsMzAxMzcsMzA0OTUsMzEwNzAsMzEyMDYsMzIwNTEsMzMyNTEsMzM0NTUsMzQyMTgsMzUyNDIsMzUzODYsMzY1MjMsMzY3NjMsMzY5MTQsMzczNDEsMzg2NjMsMjAxNTQsMjAxNjEsMjA5OTUsMjI2NDUsMjI3NjQsMjM1NjMsMjk5NzgsMjM2''@;'; put 'put ''MTMsMzMxMDIsMzUzMzgsMzY4MDUsMzg0OTksMzg3NjUsMzE1MjUsMzU1MzUsMzg5MjAsMzcyMTgsMjIyNTksMjE0MTYsMzY4ODcsMjE1NjEsMjI0MDIsMjQxMDEsMjU1MTIsMjc3MDAsMjg4MTAsMzA1NjEsMzE4ODMsMzI3MzYsMzQ5MjgsMzY5MzAsMzcyMDQsMzc2NDgsMzc2NTYsMzg1NDMs''@;'; put 'put ''Mjk3OTAsMzk2MjAsMjM4MTUsMjM5MTMsMjU5NjgsMjY1MzAsMzYyNjQsMzg2MTksMjU0NTQsMjY0NDEsMjY5MDUsMzM3MzMsMzg5MzUsMzg1OTIsMzUwNzAsMjg1NDgsMjU3MjIsMjM1NDQsMTk5OTAsMjg3MTYsMzAwNDUsMjYxNTksMjA5MzIsMjEwNDYsMjEyMTgsMjI5OTUsMjQ0NDksMjQ2''@;'; put 'put ''MTUsMjUxMDQsMjU5MTksMjU5NzIsMjYxNDMsMjYyMjgsMjY4NjYsMjY2NDYsMjc0OTEsMjgxNjUsMjkyOTgsMjk5ODMsMzA0MjcsMzE5MzQsMzI4NTQsMjI3NjgsMzUwNjksMzUxOTksMzU0ODgsMzU0NzUsMzU1MzEsMzY4OTMsMzcyNjYsMzg3MzgsMzg3NDUsMjU5OTMsMzEyNDYsMzMwMzAs''@;'; put 'put ''Mzg1ODcsMjQxMDksMjQ3OTYsMjUxMTQsMjYwMjEsMjYxMzIsMjY1MTIsMzA3MDcsMzEzMDksMzE4MjEsMzIzMTgsMzMwMzQsMzYwMTIsMzYxOTYsMzYzMjEsMzY0NDcsMzA4ODksMjA5OTksMjUzMDUsMjU1MDksMjU2NjYsMjUyNDAsMzUzNzMsMzEzNjMsMzE2ODAsMzU1MDAsMzg2MzQsMzIx''@;'; put 'put ''MTgsMzMyOTIsMzQ2MzMsMjAxODUsMjA4MDgsMjEzMTUsMjEzNDQsMjM0NTksMjM1NTQsMjM1NzQsMjQwMjksMjUxMjYsMjUxNTksMjU3NzYsMjY2NDMsMjY2NzYsMjc4NDksMjc5NzMsMjc5MjcsMjY1NzksMjg1MDgsMjkwMDYsMjkwNTMsMjYwNTksMzEzNTksMzE2NjEsMzIyMTgsMzIzMzAs''@;'; put 'put ''MzI2ODAsMzMxNDYsMzMzMDcsMzMzMzcsMzQyMTQsMzU0MzgsMzYwNDYsMzYzNDEsMzY5ODQsMzY5ODMsMzc1NDksMzc1MjEsMzgyNzUsMzk4NTQsMjEwNjksMjE4OTIsMjg0NzIsMjg5ODIsMjA4NDAsMzExMDksMzIzNDEsMzMyMDMsMzE5NTAsMjIwOTIsMjI2MDksMjM3MjAsMjU1MTQsMjYz''@;'; put 'put ''NjYsMjYzNjUsMjY5NzAsMjk0MDEsMzAwOTUsMzAwOTQsMzA5OTAsMzEwNjIsMzExOTksMzE4OTUsMzIwMzIsMzIwNjgsMzQzMTEsMzUzODAsMzg0NTksMzY5NjEsNDA3MzYsMjA3MTEsMjExMDksMjE0NTIsMjE0NzQsMjA0ODksMjE5MzAsMjI3NjYsMjI4NjMsMjkyNDUsMjM0MzUsMjM2NTIs''@;'; put 'put ''MjEyNzcsMjQ4MDMsMjQ4MTksMjU0MzYsMjU0NzUsMjU0MDcsMjU1MzEsMjU4MDUsMjYwODksMjYzNjEsMjQwMzUsMjcwODUsMjcxMzMsMjg0MzcsMjkxNTcsMjAxMDUsMzAxODUsMzA0NTYsMzEzNzksMzE5NjcsMzIyMDcsMzIxNTYsMzI4NjUsMzM2MDksMzM2MjQsMzM5MDAsMzM5ODAsMzQy''@;'; put 'put ''OTksMzUwMTMsMzYyMDgsMzY4NjUsMzY5NzMsMzc3ODMsMzg2ODQsMzk0NDIsMjA2ODcsMjI2NzksMjQ5NzQsMzMyMzUsMzQxMDEsMzYxMDQsMzY4OTYsMjA0MTksMjA1OTYsMjEwNjMsMjEzNjMsMjQ2ODcsMjU0MTcsMjY0NjMsMjgyMDQsMzYyNzUsMzY4OTUsMjA0MzksMjM2NDYsMzYwNDIs''@;'; put 'put ''MjYwNjMsMzIxNTQsMjEzMzAsMzQ5NjYsMjA4NTQsMjU1MzksMjMzODQsMjM0MDMsMjM1NjIsMjU2MTMsMjY0NDksMzY5NTYsMjAxODIsMjI4MTAsMjI4MjYsMjc3NjAsMzU0MDksMjE4MjIsMjI1NDksMjI5NDksMjQ4MTYsMjUxNzEsMjY1NjEsMzMzMzMsMjY5NjUsMzg0NjQsMzkzNjQsMzk0''@;'; put 'put ''NjQsMjAzMDcsMjI1MzQsMjM1NTAsMzI3ODQsMjM3MjksMjQxMTEsMjQ0NTMsMjQ2MDgsMjQ5MDcsMjUxNDAsMjYzNjcsMjc4ODgsMjgzODIsMzI5NzQsMzMxNTEsMzM0OTIsMzQ5NTUsMzYwMjQsMzY4NjQsMzY5MTAsMzg1MzgsNDA2NjcsMzk4OTksMjAxOTUsMjE0ODgsMjI4MjMsMzE1MzIs''@;'; put 'put ''MzcyNjEsMzg5ODgsNDA0NDEsMjgzODEsMjg3MTEsMjEzMzEsMjE4MjgsMjM0MjksMjUxNzYsMjUyNDYsMjUyOTksMjc4MTAsMjg2NTUsMjk3MzAsMzUzNTEsMzc5NDQsMjg2MDksMzU1ODIsMzM1OTIsMjA5NjcsMzQ1NTIsMjE0ODIsMjE0ODEsMjAyOTQsMzY5NDgsMzY3ODQsMjI4OTAsMzMw''@;'; put 'put ''NzMsMjQwNjEsMzE0NjYsMzY3OTksMjY4NDIsMzU4OTUsMjk0MzIsNDAwMDgsMjcxOTcsMzU1MDQsMjAwMjUsMjEzMzYsMjIwMjIsMjIzNzQsMjUyODUsMjU1MDYsMjYwODYsMjc0NzAsMjgxMjksMjgyNTEsMjg4NDUsMzA3MDEsMzE0NzEsMzE2NTgsMzIxODcsMzI4MjksMzI5NjYsMzQ1MDcs''@;'; put 'put ''MzU0NzcsMzc3MjMsMjIyNDMsMjI3MjcsMjQzODIsMjYwMjksMjYyNjIsMjcyNjQsMjc1NzMsMzAwMDcsMzU1MjcsMjA1MTYsMzA2OTMsMjIzMjAsMjQzNDcsMjQ2NzcsMjYyMzQsMjc3NDQsMzAxOTYsMzEyNTgsMzI2MjIsMzMyNjgsMzQ1ODQsMzY5MzMsMzkzNDcsMzE2ODksMzAwNDQsMzE0''@;'; put 'put ''ODEsMzE1NjksMzM5ODgsMzY4ODAsMzEyMDksMzEzNzgsMzM1OTAsMjMyNjUsMzA1MjgsMjAwMTMsMjAyMTAsMjM0NDksMjQ1NDQsMjUyNzcsMjYxNzIsMjY2MDksMjc4ODAsMzQ0MTEsMzQ5MzUsMzUzODcsMzcxOTgsMzc2MTksMzkzNzYsMjcxNTksMjg3MTAsMjk0ODIsMzM1MTEsMzM4Nzks''@;'; put 'put ''MzYwMTUsMTk5NjksMjA4MDYsMjA5MzksMjE4OTksMjM1NDEsMjQwODYsMjQxMTUsMjQxOTMsMjQzNDAsMjQzNzMsMjQ0MjcsMjQ1MDAsMjUwNzQsMjUzNjEsMjYyNzQsMjYzOTcsMjg1MjYsMjkyNjYsMzAwMTAsMzA1MjIsMzI4ODQsMzMwODEsMzMxNDQsMzQ2NzgsMzU1MTksMzU1NDgsMzYy''@;'; put 'put ''MjksMzYzMzksMzc1MzAsMzgyNjMsMzg5MTQsNDAxNjUsMjExODksMjU0MzEsMzA0NTIsMjYzODksMjc3ODQsMjk2NDUsMzYwMzUsMzc4MDYsMzg1MTUsMjc5NDEsMjI2ODQsMjY4OTQsMjcwODQsMzY4NjEsMzc3ODYsMzAxNzEsMzY4OTAsMjI2MTgsMjY2MjYsMjU1MjQsMjcxMzEsMjAyOTEs''@;'; put 'put ''Mjg0NjAsMjY1ODQsMzY3OTUsMzQwODYsMzIxODAsMzc3MTYsMjY5NDMsMjg1MjgsMjIzNzgsMjI3NzUsMjMzNDAsMzIwNDQsMjkyMjYsMjE1MTQsMzczNDcsNDAzNzIsMjAxNDEsMjAzMDIsMjA1NzIsMjA1OTcsMjEwNTksMzU5OTgsMjE1NzYsMjI1NjQsMjM0NTAsMjQwOTMsMjQyMTMsMjQy''@;'; put 'put ''MzcsMjQzMTEsMjQzNTEsMjQ3MTYsMjUyNjksMjU0MDIsMjU1NTIsMjY3OTksMjc3MTIsMzA4NTUsMzExMTgsMzEyNDMsMzIyMjQsMzMzNTEsMzUzMzAsMzU1NTgsMzY0MjAsMzY4ODMsMzcwNDgsMzcxNjUsMzczMzYsNDA3MTgsMjc4NzcsMjU2ODgsMjU4MjYsMjU5NzMsMjg0MDQsMzAzNDAs''@;'; put 'put ''MzE1MTUsMzY5NjksMzc4NDEsMjgzNDYsMjE3NDYsMjQ1MDUsMjU3NjQsMzY2ODUsMzY4NDUsMzc0NDQsMjA4NTYsMjI2MzUsMjI4MjUsMjM2MzcsMjQyMTUsMjgxNTUsMzIzOTksMjk5ODAsMzYwMjgsMzY1NzgsMzkwMDMsMjg4NTcsMjAyNTMsMjc1ODMsMjg1OTMsM2U0LDM4NjUxLDIwODE0''@;'; put 'put ''LDIxNTIwLDIyNTgxLDIyNjE1LDIyOTU2LDIzNjQ4LDI0NDY2LDI2MDA3LDI2NDYwLDI4MTkzLDMwMzMxLDMzNzU5LDM2MDc3LDM2ODg0LDM3MTE3LDM3NzA5LDMwNzU3LDMwNzc4LDIxMTYyLDI0MjMwLDIyMzAzLDIyOTAwLDI0NTk0LDIwNDk4LDIwODI2LDIwOTA4LDIwOTQxLDIwOTkyLDIx''@;'; put 'put ''Nzc2LDIyNjEyLDIyNjE2LDIyODcxLDIzNDQ1LDIzNzk4LDIzOTQ3LDI0NzY0LDI1MjM3LDI1NjQ1LDI2NDgxLDI2NjkxLDI2ODEyLDI2ODQ3LDMwNDIzLDI4MTIwLDI4MjcxLDI4MDU5LDI4NzgzLDI5MTI4LDI0NDAzLDMwMTY4LDMxMDk1LDMxNTYxLDMxNTcyLDMxNTcwLDMxOTU4LDMyMTEz''@;'; put 'put ''LDIxMDQwLDMzODkxLDM0MTUzLDM0Mjc2LDM1MzQyLDM1NTg4LDM1OTEwLDM2MzY3LDM2ODY3LDM2ODc5LDM3OTEzLDM4NTE4LDM4OTU3LDM5NDcyLDM4MzYwLDIwNjg1LDIxMjA1LDIxNTE2LDIyNTMwLDIzNTY2LDI0OTk5LDI1NzU4LDI3OTM0LDMwNjQzLDMxNDYxLDMzMDEyLDMzNzk2LDM2''@;'; put 'put ''OTQ3LDM3NTA5LDIzNzc2LDQwMTk5LDIxMzExLDI0NDcxLDI0NDk5LDI4MDYwLDI5MzA1LDMwNTYzLDMxMTY3LDMxNzE2LDI3NjAyLDI5NDIwLDM1NTAxLDI2NjI3LDI3MjMzLDIwOTg0LDMxMzYxLDI2OTMyLDIzNjI2LDQwMTgyLDMzNTE1LDIzNDkzLDM3MTkzLDI4NzAyLDIyMTM2LDIzNjYz''@;'; put 'put ''LDI0Nzc1LDI1OTU4LDI3Nzg4LDM1OTMwLDM2OTI5LDM4OTMxLDIxNTg1LDI2MzExLDM3Mzg5LDIyODU2LDM3MDI3LDIwODY5LDIwMDQ1LDIwOTcwLDM0MjAxLDM1NTk4LDI4NzYwLDI1NDY2LDM3NzA3LDI2OTc4LDM5MzQ4LDMyMjYwLDMwMDcxLDIxMzM1LDI2OTc2LDM2NTc1LDM4NjI3LDI3''@;'; put 'put ''NzQxLDIwMTA4LDIzNjEyLDI0MzM2LDM2ODQxLDIxMjUwLDM2MDQ5LDMyOTA1LDM0NDI1LDI0MzE5LDI2MDg1LDIwMDgzLDIwODM3LDIyOTE0LDIzNjE1LDM4ODk0LDIwMjE5LDIyOTIyLDI0NTI1LDM1NDY5LDI4NjQxLDMxMTUyLDMxMDc0LDIzNTI3LDMzOTA1LDI5NDgzLDI5MTA1LDI0MTgw''@;'; put 'put ''LDI0NTY1LDI1NDY3LDI1NzU0LDI5MTIzLDMxODk2LDIwMDM1LDI0MzE2LDIwMDQzLDIyNDkyLDIyMTc4LDI0NzQ1LDI4NjExLDMyMDEzLDMzMDIxLDMzMDc1LDMzMjE1LDM2Nzg2LDM1MjIzLDM0NDY4LDI0MDUyLDI1MjI2LDI1NzczLDM1MjA3LDI2NDg3LDI3ODc0LDI3OTY2LDI5NzUwLDMw''@;'; put 'put ''NzcyLDIzMTEwLDMyNjI5LDMzNDUzLDM5MzQwLDIwNDY3LDI0MjU5LDI1MzA5LDI1NDkwLDI1OTQzLDI2NDc5LDMwNDAzLDI5MjYwLDMyOTcyLDMyOTU0LDM2NjQ5LDM3MTk3LDIwNDkzLDIyNTIxLDIzMTg2LDI2NzU3LDI2OTk1LDI5MDI4LDI5NDM3LDM2MDIzLDIyNzcwLDM2MDY0LDM4NTA2''@;'; put 'put ''LDM2ODg5LDM0Njg3LDMxMjA0LDMwNjk1LDMzODMzLDIwMjcxLDIxMDkzLDIxMzM4LDI1MjkzLDI2NTc1LDI3ODUwLDMwMzMzLDMxNjM2LDMxODkzLDMzMzM0LDM0MTgwLDM2ODQzLDI2MzMzLDI4NDQ4LDI5MTkwLDMyMjgzLDMzNzA3LDM5MzYxLDQwNjE0LDIwOTg5LDMxNjY1LDMwODM0LDMx''@;'; put 'put ''NjcyLDMyOTAzLDMxNTYwLDI3MzY4LDI0MTYxLDMyOTA4LDMwMDMzLDMwMDQ4LDIwODQzLDM3NDc0LDI4MzAwLDMwMzMwLDM3MjcxLDM5NjU4LDIwMjQwLDMyNjI0LDI1MjQ0LDMxNTY3LDM4MzA5LDQwMTY5LDIyMTM4LDIyNjE3LDM0NTMyLDM4NTg4LDIwMjc2LDIxMDI4LDIxMzIyLDIxNDUz''@;'; put 'put ''LDIxNDY3LDI0MDcwLDI1NjQ0LDI2MDAxLDI2NDk1LDI3NzEwLDI3NzI2LDI5MjU2LDI5MzU5LDI5Njc3LDMwMDM2LDMyMzIxLDMzMzI0LDM0MjgxLDM2MDA5LDMxNjg0LDM3MzE4LDI5MDMzLDM4OTMwLDM5MTUxLDI1NDA1LDI2MjE3LDMwMDU4LDMwNDM2LDMwOTI4LDM0MTE1LDM0NTQyLDIx''@;'; put 'put ''MjkwLDIxMzI5LDIxNTQyLDIyOTE1LDI0MTk5LDI0NDQ0LDI0NzU0LDI1MTYxLDI1MjA5LDI1MjU5LDI2ZTMsMjc2MDQsMjc4NTIsMzAxMzAsMzAzODIsMzA4NjUsMzExOTIsMzIyMDMsMzI2MzEsMzI5MzMsMzQ5ODcsMzU1MTMsMzYwMjcsMzY5OTEsMzg3NTAsMzkxMzEsMjcxNDcsMzE4MDAs''@;'; put 'put ''MjA2MzMsMjM2MTQsMjQ0OTQsMjY1MDMsMjc2MDgsMjk3NDksMzA0NzMsMzI2NTQsNDA3NjMsMjY1NzAsMzEyNTUsMjEzMDUsMzAwOTEsMzk2NjEsMjQ0MjIsMzMxODEsMzM3NzcsMzI5MjAsMjQzODAsMjQ1MTcsMzAwNTAsMzE1NTgsMzY5MjQsMjY3MjcsMjMwMTksMjMxOTUsMzIwMTYsMzAz''@;'; put 'put ''MzQsMzU2MjgsMjA0NjksMjQ0MjYsMjcxNjEsMjc3MDMsMjg0MTgsMjk5MjIsMzEwODAsMzQ5MjAsMzU0MTMsMzU5NjEsMjQyODcsMjU1NTEsMzAxNDksMzExODYsMzM0OTUsMzc2NzIsMzc2MTgsMzM5NDgsMzQ1NDEsMzk5ODEsMjE2OTcsMjQ0MjgsMjU5OTYsMjc5OTYsMjg2OTMsMzYwMDcs''@;'; put 'put ''MzYwNTEsMzg5NzEsMjU5MzUsMjk5NDIsMTk5ODEsMjAxODQsMjI0OTYsMjI4MjcsMjMxNDIsMjM1MDAsMjA5MDQsMjQwNjcsMjQyMjAsMjQ1OTgsMjUyMDYsMjU5NzUsMjYwMjMsMjYyMjIsMjgwMTQsMjkyMzgsMzE1MjYsMzMxMDQsMzMxNzgsMzM0MzMsMzU2NzYsMzZlMywzNjA3MCwzNjIx''@;'; put 'put ''MiwzODQyOCwzODQ2OCwyMDM5OCwyNTc3MSwyNzQ5NCwzMzMxMCwzMzg4OSwzNDE1NCwzNzA5NiwyMzU1MywyNjk2MywzOTA4MCwzMzkxNCwzNDEzNSwyMDIzOSwyMTEwMywyNDQ4OSwyNDEzMywyNjM4MSwzMTExOSwzMzE0NSwzNTA3OSwzNTIwNiwyODE0OSwyNDM0MywyNTE3MywyNzgzMiwy''@;'; put 'put ''MDE3NSwyOTI4OSwzOTgyNiwyMDk5OCwyMTU2MywyMjEzMiwyMjcwNywyNDk5NiwyNTE5OCwyODk1NCwyMjg5NCwzMTg4MSwzMTk2NiwzMjAyNywzODY0MCwyNTk5MSwzMjg2MiwxOTk5MywyMDM0MSwyMDg1MywyMjU5MiwyNDE2MywyNDE3OSwyNDMzMCwyNjU2NCwyMDAwNiwzNDEwOSwzODI4''@;'; put 'put ''MSwzODQ5MSwzMTg1OSwzODkxMywyMDczMSwyMjcyMSwzMDI5NCwzMDg4NywyMTAyOSwzMDYyOSwzNDA2NSwzMTYyMiwyMDU1OSwyMjc5MywyOTI1NSwzMTY4NywzMjIzMiwzNjc5NCwzNjgyMCwzNjk0MSwyMDQxNSwyMTE5MywyMzA4MSwyNDMyMSwzODgyOSwyMDQ0NSwzMzMwMywzNzYxMCwy''@;'; put 'put ''MjI3NSwyNTQyOSwyNzQ5NywyOTk5NSwzNTAzNiwzNjYyOCwzMTI5OCwyMTIxNSwyMjY3NSwyNDkxNywyNTA5OCwyNjI4NiwyNzU5NywzMTgwNywzMzc2OSwyMDUxNSwyMDQ3MiwyMTI1MywyMTU3NCwyMjU3NywyMjg1NywyMzQ1MywyMzc5MiwyMzc5MSwyMzg0OSwyNDIxNCwyNTI2NSwyNTQ0''@;'; put 'put ''NywyNTkxOCwyNjA0MSwyNjM3OSwyNzg2MSwyNzg3MywyODkyMSwzMDc3MCwzMjI5OSwzMjk5MCwzMzQ1OSwzMzgwNCwzNDAyOCwzNDU2MiwzNTA5MCwzNTM3MCwzNTkxNCwzNzAzMCwzNzU4NiwzOTE2NSw0MDE3OSw0MDMwMCwyMDA0NywyMDEyOSwyMDYyMSwyMTA3OCwyMjM0NiwyMjk1Miwy''@;'; put 'put ''NDEyNSwyNDUzNiwyNDUzNywyNTE1MSwyNjI5MiwyNjM5NSwyNjU3NiwyNjgzNCwyMDg4MiwzMjAzMywzMjkzOCwzMzE5MiwzNTU4NCwzNTk4MCwzNjAzMSwzNzUwMiwzODQ1MCwyMTUzNiwzODk1NiwyMTI3MSwyMDY5MywyMTM0MCwyMjY5NiwyNTc3OCwyNjQyMCwyOTI4NywzMDU2NiwzMTMw''@;'; put 'put ''MiwzNzM1MCwyMTE4NywyNzgwOSwyNzUyNiwyMjUyOCwyNDE0MCwyMjg2OCwyNjQxMiwzMjc2MywyMDk2MSwzMDQwNiwyNTcwNSwzMDk1MiwzOTc2NCw0MDYzNSwyMjQ3NSwyMjk2OSwyNjE1MSwyNjUyMiwyNzU5OCwyMTczNywyNzA5NywyNDE0OSwzMzE4MCwyNjUxNywzOTg1MCwyNjYyMiw0''@;'; put 'put ''MDAxOCwyNjcxNywyMDEzNCwyMDQ1MSwyMTQ0OCwyNTI3MywyNjQxMSwyNzgxOSwzNjgwNCwyMDM5NywzMjM2NSw0MDYzOSwxOTk3NSwyNDkzMCwyODI4OCwyODQ1OSwzNDA2NywyMTYxOSwyNjQxMCwzOTc0OSwyNDA1MSwzMTYzNywyMzcyNCwyMzQ5NCwzNDU4OCwyODIzNCwzNDAwMSwzMTI1''@;'; put 'put ''MiwzMzAzMiwyMjkzNywzMTg4NSwyNzY2NSwzMDQ5NiwyMTIwOSwyMjgxOCwyODk2MSwyOTI3OSwzMDY4MywzODY5NSw0MDI4OSwyNjg5MSwyMzE2NywyMzA2NCwyMDkwMSwyMTUxNywyMTYyOSwyNjEyNiwzMDQzMSwzNjg1NSwzNzUyOCw0MDE4MCwyMzAxOCwyOTI3NywyODM1NywyMDgxMywy''@;'; put 'put ''NjgyNSwzMjE5MSwzMjIzNiwzODc1NCw0MDYzNCwyNTcyMCwyNzE2OSwzMzUzOCwyMjkxNiwyMzM5MSwyNzYxMSwyOTQ2NywzMDQ1MCwzMjE3OCwzMjc5MSwzMzk0NSwyMDc4NiwyNjQwOCw0MDY2NSwzMDQ0NiwyNjQ2NiwyMTI0NywzOTE3MywyMzU4OCwyNTE0NywzMTg3MCwzNjAxNiwyMTgz''@;'; put 'put ''OSwyNDc1OCwzMjAxMSwzODI3MiwyMTI0OSwyMDA2MywyMDkxOCwyMjgxMiwyOTI0MiwzMjgyMiwzNzMyNiwyNDM1NywzMDY5MCwyMTM4MCwyNDQ0MSwzMjAwNCwzNDIyMCwzNTM3OSwzNjQ5MywzODc0MiwyNjYxMSwzNDIyMiwzNzk3MSwyNDg0MSwyNDg0MCwyNzgzMywzMDI5MCwzNTU2NSwz''@;'; put 'put ''NjY2NCwyMTgwNywyMDMwNSwyMDc3OCwyMTE5MSwyMTQ1MSwyMzQ2MSwyNDE4OSwyNDczNiwyNDk2MiwyNTU1OCwyNjM3NywyNjU4NiwyODI2MywyODA0NCwyOTQ5NCwyOTQ5NSwzMDAwMSwzMTA1NiwzNTAyOSwzNTQ4MCwzNjkzOCwzNzAwOSwzNzEwOSwzODU5NiwzNDcwMSwyMjgwNSwyMDEw''@;'; put 'put ''NCwyMDMxMywxOTk4MiwzNTQ2NSwzNjY3MSwzODkyOCwyMDY1MywyNDE4OCwyMjkzNCwyMzQ4MSwyNDI0OCwyNTU2MiwyNTU5NCwyNTc5MywyNjMzMiwyNjk1NCwyNzA5NiwyNzkxNSwyODM0MiwyOTA3NiwyOTk5MiwzMTQwNywzMjY1MCwzMjc2OCwzMzg2NSwzMzk5MywzNTIwMSwzNTYxNywz''@;'; put 'put ''NjM2MiwzNjk2NSwzODUyNSwzOTE3OCwyNDk1OCwyNTIzMywyNzQ0MiwyNzc3OSwyODAyMCwzMjcxNiwzMjc2NCwyODA5NiwzMjY0NSwzNDc0NiwzNTA2NCwyNjQ2OSwzMzcxMywzODk3MiwzODY0NywyNzkzMSwzMjA5NywzMzg1MywzNzIyNiwyMDA4MSwyMTM2NSwyMzg4OCwyNzM5NiwyODY1''@;'; put 'put ''MSwzNDI1MywzNDM0OSwzNTIzOSwyMTAzMywyMTUxOSwyMzY1MywyNjQ0NiwyNjc5MiwyOTcwMiwyOTgyNywzMDE3OCwzNTAyMywzNTA0MSwzNzMyNCwzODYyNiwzODUyMCwyNDQ1OSwyOTU3NSwzMTQzNSwzMzg3MCwyNTUwNCwzMDA1MywyMTEyOSwyNzk2OSwyODMxNiwyOTcwNSwzMDA0MSwz''@;'; put 'put ''MDgyNywzMTg5MCwzODUzNCwzMTQ1Miw0MDg0NSwyMDQwNiwyNDk0MiwyNjA1MywzNDM5NiwyMDEwMiwyMDE0MiwyMDY5OCwyMDAwMSwyMDk0MCwyMzUzNCwyNjAwOSwyNjc1MywyODA5MiwyOTQ3MSwzMDI3NCwzMDYzNywzMTI2MCwzMTk3NSwzMzM5MSwzNTUzOCwzNjk4OCwzNzMyNywzODUx''@;'; put 'put ''NywzODkzNiwyMTE0NywzMjIwOSwyMDUyMywyMTQwMCwyNjUxOSwyODEwNywyOTEzNiwyOTc0NywzMzI1NiwzNjY1MCwzODU2Myw0MDAyMyw0MDYwNywyOTc5MiwyMjU5MywyODA1NywzMjA0NywzOTAwNiwyMDE5NiwyMDI3OCwyMDM2MywyMDkxOSwyMTE2OSwyMzk5NCwyNDYwNCwyOTYxOCwz''@;'; put 'put ''MTAzNiwzMzQ5MSwzNzQyOCwzODU4MywzODY0NiwzODY2Niw0MDU5OSw0MDgwMiwyNjI3OCwyNzUwOCwyMTAxNSwyMTE1NSwyODg3MiwzNTAxMCwyNDI2NSwyNDY1MSwyNDk3NiwyODQ1MSwyOTAwMSwzMTgwNiwzMjI0NCwzMjg3OSwzNDAzMCwzNjg5OSwzNzY3NiwyMTU3MCwzOTc5MSwyNzM0''@;'; put 'put ''NywyODgwOSwzNjAzNCwzNjMzNSwzODcwNiwyMTE3MiwyMzEwNSwyNDI2NiwyNDMyNCwyNjM5MSwyNzAwNCwyNzAyOCwyODAxMCwyODQzMSwyOTI4MiwyOTQzNiwzMTcyNSwzMjc2OSwzMjg5NCwzNDYzNSwzNzA3MCwyMDg0NSw0MDU5NSwzMTEwOCwzMjkwNywzNzY4MiwzNTU0MiwyMDUyNSwy''@;'; put 'put ''MTY0NCwzNTQ0MSwyNzQ5OCwzNjAzNiwzMzAzMSwyNDc4NSwyNjUyOCw0MDQzNCwyMDEyMSwyMDEyMCwzOTk1MiwzNTQzNSwzNDI0MSwzNDE1MiwyNjg4MCwyODI4NiwzMDg3MSwzMzEwOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI0MzMyLDE5''@;'; put 'put ''OTg0LDE5OTg5LDIwMDEwLDIwMDE3LDIwMDIyLDIwMDI4LDIwMDMxLDIwMDM0LDIwMDU0LDIwMDU2LDIwMDk4LDIwMTAxLDM1OTQ3LDIwMTA2LDMzMjk4LDI0MzMzLDIwMTEwLDIwMTI2LDIwMTI3LDIwMTI4LDIwMTMwLDIwMTQ0LDIwMTQ3LDIwMTUwLDIwMTc0LDIwMTczLDIwMTY0LDIwMTY2''@;'; put 'put ''LDIwMTYyLDIwMTgzLDIwMTkwLDIwMjA1LDIwMTkxLDIwMjE1LDIwMjMzLDIwMzE0LDIwMjcyLDIwMzE1LDIwMzE3LDIwMzExLDIwMjk1LDIwMzQyLDIwMzYwLDIwMzY3LDIwMzc2LDIwMzQ3LDIwMzI5LDIwMzM2LDIwMzY5LDIwMzM1LDIwMzU4LDIwMzc0LDIwNzYwLDIwNDM2LDIwNDQ3LDIw''@;'; put 'put ''NDMwLDIwNDQwLDIwNDQzLDIwNDMzLDIwNDQyLDIwNDMyLDIwNDUyLDIwNDUzLDIwNTA2LDIwNTIwLDIwNTAwLDIwNTIyLDIwNTE3LDIwNDg1LDIwMjUyLDIwNDcwLDIwNTEzLDIwNTIxLDIwNTI0LDIwNDc4LDIwNDYzLDIwNDk3LDIwNDg2LDIwNTQ3LDIwNTUxLDI2MzcxLDIwNTY1LDIwNTYw''@;'; put 'put ''LDIwNTUyLDIwNTcwLDIwNTY2LDIwNTg4LDIwNjAwLDIwNjA4LDIwNjM0LDIwNjEzLDIwNjYwLDIwNjU4LDIwNjgxLDIwNjgyLDIwNjU5LDIwNjc0LDIwNjk0LDIwNzAyLDIwNzA5LDIwNzE3LDIwNzA3LDIwNzE4LDIwNzI5LDIwNzI1LDIwNzQ1LDIwNzM3LDIwNzM4LDIwNzU4LDIwNzU3LDIw''@;'; put 'put ''NzU2LDIwNzYyLDIwNzY5LDIwNzk0LDIwNzkxLDIwNzk2LDIwNzk1LDIwNzk5LDIwODAwLDIwODE4LDIwODEyLDIwODIwLDIwODM0LDMxNDgwLDIwODQxLDIwODQyLDIwODQ2LDIwODY0LDIwODY2LDIyMjMyLDIwODc2LDIwODczLDIwODc5LDIwODgxLDIwODgzLDIwODg1LDIwODg2LDIwOTAw''@;'; put 'put ''LDIwOTAyLDIwODk4LDIwOTA1LDIwOTA2LDIwOTA3LDIwOTE1LDIwOTEzLDIwOTE0LDIwOTEyLDIwOTE3LDIwOTI1LDIwOTMzLDIwOTM3LDIwOTU1LDIwOTYwLDM0Mzg5LDIwOTY5LDIwOTczLDIwOTc2LDIwOTgxLDIwOTkwLDIwOTk2LDIxMDAzLDIxMDEyLDIxMDA2LDIxMDMxLDIxMDM0LDIx''@;'; put 'put ''MDM4LDIxMDQzLDIxMDQ5LDIxMDcxLDIxMDYwLDIxMDY3LDIxMDY4LDIxMDg2LDIxMDc2LDIxMDk4LDIxMTA4LDIxMDk3LDIxMTA3LDIxMTE5LDIxMTE3LDIxMTMzLDIxMTQwLDIxMTM4LDIxMTA1LDIxMTI4LDIxMTM3LDM2Nzc2LDM2Nzc1LDIxMTY0LDIxMTY1LDIxMTgwLDIxMTczLDIxMTg1''@;'; put 'put ''LDIxMTk3LDIxMjA3LDIxMjE0LDIxMjE5LDIxMjIyLDM5MTQ5LDIxMjE2LDIxMjM1LDIxMjM3LDIxMjQwLDIxMjQxLDIxMjU0LDIxMjU2LDMwMDA4LDIxMjYxLDIxMjY0LDIxMjYzLDIxMjY5LDIxMjc0LDIxMjgzLDIxMjk1LDIxMjk3LDIxMjk5LDIxMzA0LDIxMzEyLDIxMzE4LDIxMzE3LDE5''@;'; put 'put ''OTkxLDIxMzIxLDIxMzI1LDIwOTUwLDIxMzQyLDIxMzUzLDIxMzU4LDIyODA4LDIxMzcxLDIxMzY3LDIxMzc4LDIxMzk4LDIxNDA4LDIxNDE0LDIxNDEzLDIxNDIyLDIxNDI0LDIxNDMwLDIxNDQzLDMxNzYyLDM4NjE3LDIxNDcxLDI2MzY0LDI5MTY2LDIxNDg2LDIxNDgwLDIxNDg1LDIxNDk4''@;'; put 'put ''LDIxNTA1LDIxNTY1LDIxNTY4LDIxNTQ4LDIxNTQ5LDIxNTY0LDIxNTUwLDIxNTU4LDIxNTQ1LDIxNTMzLDIxNTgyLDIxNjQ3LDIxNjIxLDIxNjQ2LDIxNTk5LDIxNjE3LDIxNjIzLDIxNjE2LDIxNjUwLDIxNjI3LDIxNjMyLDIxNjIyLDIxNjM2LDIxNjQ4LDIxNjM4LDIxNzAzLDIxNjY2LDIx''@;'; put 'put ''Njg4LDIxNjY5LDIxNjc2LDIxNzAwLDIxNzA0LDIxNjcyLDIxNjc1LDIxNjk4LDIxNjY4LDIxNjk0LDIxNjkyLDIxNzIwLDIxNzMzLDIxNzM0LDIxNzc1LDIxNzgwLDIxNzU3LDIxNzQyLDIxNzQxLDIxNzU0LDIxNzMwLDIxODE3LDIxODI0LDIxODU5LDIxODM2LDIxODA2LDIxODUyLDIxODI5''@;'; put 'put ''LDIxODQ2LDIxODQ3LDIxODE2LDIxODExLDIxODUzLDIxOTEzLDIxODg4LDIxNjc5LDIxODk4LDIxOTE5LDIxODgzLDIxODg2LDIxOTEyLDIxOTE4LDIxOTM0LDIxODg0LDIxODkxLDIxOTI5LDIxODk1LDIxOTI4LDIxOTc4LDIxOTU3LDIxOTgzLDIxOTU2LDIxOTgwLDIxOTg4LDIxOTcyLDIy''@;'; put 'put ''MDM2LDIyMDA3LDIyMDM4LDIyMDE0LDIyMDEzLDIyMDQzLDIyMDA5LDIyMDk0LDIyMDk2LDI5MTUxLDIyMDY4LDIyMDcwLDIyMDY2LDIyMDcyLDIyMTIzLDIyMTE2LDIyMDYzLDIyMTI0LDIyMTIyLDIyMTUwLDIyMTQ0LDIyMTU0LDIyMTc2LDIyMTY0LDIyMTU5LDIyMTgxLDIyMTkwLDIyMTk4''@;'; put 'put ''LDIyMTk2LDIyMjEwLDIyMjA0LDIyMjA5LDIyMjExLDIyMjA4LDIyMjE2LDIyMjIyLDIyMjI1LDIyMjI3LDIyMjMxLDIyMjU0LDIyMjY1LDIyMjcyLDIyMjcxLDIyMjc2LDIyMjgxLDIyMjgwLDIyMjgzLDIyMjg1LDIyMjkxLDIyMjk2LDIyMjk0LDIxOTU5LDIyMzAwLDIyMzEwLDIyMzI3LDIy''@;'; put 'put ''MzI4LDIyMzUwLDIyMzMxLDIyMzM2LDIyMzUxLDIyMzc3LDIyNDY0LDIyNDA4LDIyMzY5LDIyMzk5LDIyNDA5LDIyNDE5LDIyNDMyLDIyNDUxLDIyNDM2LDIyNDQyLDIyNDQ4LDIyNDY3LDIyNDcwLDIyNDg0LDIyNDgyLDIyNDgzLDIyNTM4LDIyNDg2LDIyNDk5LDIyNTM5LDIyNTUzLDIyNTU3''@;'; put 'put ''LDIyNjQyLDIyNTYxLDIyNjI2LDIyNjAzLDIyNjQwLDI3NTg0LDIyNjEwLDIyNTg5LDIyNjQ5LDIyNjYxLDIyNzEzLDIyNjg3LDIyNjk5LDIyNzE0LDIyNzUwLDIyNzE1LDIyNzEyLDIyNzAyLDIyNzI1LDIyNzM5LDIyNzM3LDIyNzQzLDIyNzQ1LDIyNzQ0LDIyNzU3LDIyNzQ4LDIyNzU2LDIy''@;'; put 'put ''NzUxLDIyNzY3LDIyNzc4LDIyNzc3LDIyNzc5LDIyNzgwLDIyNzgxLDIyNzg2LDIyNzk0LDIyODAwLDIyODExLDI2NzkwLDIyODIxLDIyODI4LDIyODI5LDIyODM0LDIyODQwLDIyODQ2LDMxNDQyLDIyODY5LDIyODY0LDIyODYyLDIyODc0LDIyODcyLDIyODgyLDIyODgwLDIyODg3LDIyODky''@;'; put 'put ''LDIyODg5LDIyOTA0LDIyOTEzLDIyOTQxLDIwMzE4LDIwMzk1LDIyOTQ3LDIyOTYyLDIyOTgyLDIzMDE2LDIzMDA0LDIyOTI1LDIzMDAxLDIzMDAyLDIzMDc3LDIzMDcxLDIzMDU3LDIzMDY4LDIzMDQ5LDIzMDY2LDIzMTA0LDIzMTQ4LDIzMTEzLDIzMDkzLDIzMDk0LDIzMTM4LDIzMTQ2LDIz''@;'; put 'put ''MTk0LDIzMjI4LDIzMjMwLDIzMjQzLDIzMjM0LDIzMjI5LDIzMjY3LDIzMjU1LDIzMjcwLDIzMjczLDIzMjU0LDIzMjkwLDIzMjkxLDIzMzA4LDIzMzA3LDIzMzE4LDIzMzQ2LDIzMjQ4LDIzMzM4LDIzMzUwLDIzMzU4LDIzMzYzLDIzMzY1LDIzMzYwLDIzMzc3LDIzMzgxLDIzMzg2LDIzMzg3''@;'; put 'put ''LDIzMzk3LDIzNDAxLDIzNDA4LDIzNDExLDIzNDEzLDIzNDE2LDI1OTkyLDIzNDE4LDIzNDI0LDIzNDI3LDIzNDYyLDIzNDgwLDIzNDkxLDIzNDk1LDIzNDk3LDIzNTA4LDIzNTA0LDIzNTI0LDIzNTI2LDIzNTIyLDIzNTE4LDIzNTI1LDIzNTMxLDIzNTM2LDIzNTQyLDIzNTM5LDIzNTU3LDIz''@;'; put 'put ''NTU5LDIzNTYwLDIzNTY1LDIzNTcxLDIzNTg0LDIzNTg2LDIzNTkyLDIzNjA4LDIzNjA5LDIzNjE3LDIzNjIyLDIzNjMwLDIzNjM1LDIzNjMyLDIzNjMxLDIzNDA5LDIzNjYwLDIzNjYyLDIwMDY2LDIzNjcwLDIzNjczLDIzNjkyLDIzNjk3LDIzNzAwLDIyOTM5LDIzNzIzLDIzNzM5LDIzNzM0''@;'; put 'put ''LDIzNzQwLDIzNzM1LDIzNzQ5LDIzNzQyLDIzNzUxLDIzNzY5LDIzNzg1LDIzODA1LDIzODAyLDIzNzg5LDIzOTQ4LDIzNzg2LDIzODE5LDIzODI5LDIzODMxLDIzOTAwLDIzODM5LDIzODM1LDIzODI1LDIzODI4LDIzODQyLDIzODM0LDIzODMzLDIzODMyLDIzODg0LDIzODkwLDIzODg2LDIz''@;'; put 'put ''ODgzLDIzOTE2LDIzOTIzLDIzOTI2LDIzOTQzLDIzOTQwLDIzOTM4LDIzOTcwLDIzOTY1LDIzOTgwLDIzOTgyLDIzOTk3LDIzOTUyLDIzOTkxLDIzOTk2LDI0MDA5LDI0MDEzLDI0MDE5LDI0MDE4LDI0MDIyLDI0MDI3LDI0MDQzLDI0MDUwLDI0MDUzLDI0MDc1LDI0MDkwLDI0MDg5LDI0MDgx''@;'; put 'put ''LDI0MDkxLDI0MTE4LDI0MTE5LDI0MTMyLDI0MTMxLDI0MTI4LDI0MTQyLDI0MTUxLDI0MTQ4LDI0MTU5LDI0MTYyLDI0MTY0LDI0MTM1LDI0MTgxLDI0MTgyLDI0MTg2LDQwNjM2LDI0MTkxLDI0MjI0LDI0MjU3LDI0MjU4LDI0MjY0LDI0MjcyLDI0MjcxLDI0Mjc4LDI0MjkxLDI0Mjg1LDI0''@;'; put 'put ''MjgyLDI0MjgzLDI0MjkwLDI0Mjg5LDI0Mjk2LDI0Mjk3LDI0MzAwLDI0MzA1LDI0MzA3LDI0MzA0LDI0MzA4LDI0MzEyLDI0MzE4LDI0MzIzLDI0MzI5LDI0NDEzLDI0NDEyLDI0MzMxLDI0MzM3LDI0MzQyLDI0MzYxLDI0MzY1LDI0Mzc2LDI0Mzg1LDI0MzkyLDI0Mzk2LDI0Mzk4LDI0MzY3''@;'; put 'put ''LDI0NDAxLDI0NDA2LDI0NDA3LDI0NDA5LDI0NDE3LDI0NDI5LDI0NDM1LDI0NDM5LDI0NDUxLDI0NDUwLDI0NDQ3LDI0NDU4LDI0NDU2LDI0NDY1LDI0NDU1LDI0NDc4LDI0NDczLDI0NDcyLDI0NDgwLDI0NDg4LDI0NDkzLDI0NTA4LDI0NTM0LDI0NTcxLDI0NTQ4LDI0NTY4LDI0NTYxLDI0''@;'; put 'put ''NTQxLDI0NzU1LDI0NTc1LDI0NjA5LDI0NjcyLDI0NjAxLDI0NTkyLDI0NjE3LDI0NTkwLDI0NjI1LDI0NjAzLDI0NTk3LDI0NjE5LDI0NjE0LDI0NTkxLDI0NjM0LDI0NjY2LDI0NjQxLDI0NjgyLDI0Njk1LDI0NjcxLDI0NjUwLDI0NjQ2LDI0NjUzLDI0Njc1LDI0NjQzLDI0Njc2LDI0NjQy''@;'; put 'put ''LDI0Njg0LDI0NjgzLDI0NjY1LDI0NzA1LDI0NzE3LDI0ODA3LDI0NzA3LDI0NzMwLDI0NzA4LDI0NzMxLDI0NzI2LDI0NzI3LDI0NzIyLDI0NzQzLDI0NzE1LDI0ODAxLDI0NzYwLDI0ODAwLDI0Nzg3LDI0NzU2LDI0NTYwLDI0NzY1LDI0Nzc0LDI0NzU3LDI0NzkyLDI0OTA5LDI0ODUzLDI0''@;'; put 'put ''ODM4LDI0ODIyLDI0ODIzLDI0ODMyLDI0ODIwLDI0ODI2LDI0ODM1LDI0ODY1LDI0ODI3LDI0ODE3LDI0ODQ1LDI0ODQ2LDI0OTAzLDI0ODk0LDI0ODcyLDI0ODcxLDI0OTA2LDI0ODk1LDI0ODkyLDI0ODc2LDI0ODg0LDI0ODkzLDI0ODk4LDI0OTAwLDI0OTQ3LDI0OTUxLDI0OTIwLDI0OTIx''@;'; put 'put ''LDI0OTIyLDI0OTM5LDI0OTQ4LDI0OTQzLDI0OTMzLDI0OTQ1LDI0OTI3LDI0OTI1LDI0OTE1LDI0OTQ5LDI0OTg1LDI0OTgyLDI0OTY3LDI1MDA0LDI0OTgwLDI0OTg2LDI0OTcwLDI0OTc3LDI1MDAzLDI1MDA2LDI1MDM2LDI1MDM0LDI1MDMzLDI1MDc5LDI1MDMyLDI1MDI3LDI1MDMwLDI1''@;'; put 'put ''MDE4LDI1MDM1LDMyNjMzLDI1MDM3LDI1MDYyLDI1MDU5LDI1MDc4LDI1MDgyLDI1MDc2LDI1MDg3LDI1MDg1LDI1MDg0LDI1MDg2LDI1MDg4LDI1MDk2LDI1MDk3LDI1MTAxLDI1MTAwLDI1MTA4LDI1MTE1LDI1MTE4LDI1MTIxLDI1MTMwLDI1MTM0LDI1MTM2LDI1MTM4LDI1MTM5LDI1MTUz''@;'; put 'put ''LDI1MTY2LDI1MTgyLDI1MTg3LDI1MTc5LDI1MTg0LDI1MTkyLDI1MjEyLDI1MjE4LDI1MjI1LDI1MjE0LDI1MjM0LDI1MjM1LDI1MjM4LDI1MzAwLDI1MjE5LDI1MjM2LDI1MzAzLDI1Mjk3LDI1Mjc1LDI1Mjk1LDI1MzQzLDI1Mjg2LDI1ODEyLDI1Mjg4LDI1MzA4LDI1MjkyLDI1MjkwLDI1''@;'; put 'put ''MjgyLDI1Mjg3LDI1MjQzLDI1Mjg5LDI1MzU2LDI1MzI2LDI1MzI5LDI1MzgzLDI1MzQ2LDI1MzUyLDI1MzI3LDI1MzMzLDI1NDI0LDI1NDA2LDI1NDIxLDI1NjI4LDI1NDIzLDI1NDk0LDI1NDg2LDI1NDcyLDI1NTE1LDI1NDYyLDI1NTA3LDI1NDg3LDI1NDgxLDI1NTAzLDI1NTI1LDI1NDUx''@;'; put 'put ''LDI1NDQ5LDI1NTM0LDI1NTc3LDI1NTM2LDI1NTQyLDI1NTcxLDI1NTQ1LDI1NTU0LDI1NTkwLDI1NTQwLDI1NjIyLDI1NjUyLDI1NjA2LDI1NjE5LDI1NjM4LDI1NjU0LDI1ODg1LDI1NjIzLDI1NjQwLDI1NjE1LDI1NzAzLDI1NzExLDI1NzE4LDI1Njc4LDI1ODk4LDI1NzQ5LDI1NzQ3LDI1''@;'; put 'put ''NzY1LDI1NzY5LDI1NzM2LDI1Nzg4LDI1ODE4LDI1ODEwLDI1Nzk3LDI1Nzk5LDI1Nzg3LDI1ODE2LDI1Nzk0LDI1ODQxLDI1ODMxLDMzMjg5LDI1ODI0LDI1ODI1LDI1MjYwLDI1ODI3LDI1ODM5LDI1OTAwLDI1ODQ2LDI1ODQ0LDI1ODQyLDI1ODUwLDI1ODU2LDI1ODUzLDI1ODgwLDI1ODg0''@;'; put 'put ''LDI1ODYxLDI1ODkyLDI1ODkxLDI1ODk5LDI1OTA4LDI1OTA5LDI1OTExLDI1OTEwLDI1OTEyLDMwMDI3LDI1OTI4LDI1OTQyLDI1OTQxLDI1OTMzLDI1OTQ0LDI1OTUwLDI1OTQ5LDI1OTcwLDI1OTc2LDI1OTg2LDI1OTg3LDM1NzIyLDI2MDExLDI2MDE1LDI2MDI3LDI2MDM5LDI2MDUxLDI2''@;'; put 'put ''MDU0LDI2MDQ5LDI2MDUyLDI2MDYwLDI2MDY2LDI2MDc1LDI2MDczLDI2MDgwLDI2MDgxLDI2MDk3LDI2NDgyLDI2MTIyLDI2MTE1LDI2MTA3LDI2NDgzLDI2MTY1LDI2MTY2LDI2MTY0LDI2MTQwLDI2MTkxLDI2MTgwLDI2MTg1LDI2MTc3LDI2MjA2LDI2MjA1LDI2MjEyLDI2MjE1LDI2MjE2''@;'; put 'put ''LDI2MjA3LDI2MjEwLDI2MjI0LDI2MjQzLDI2MjQ4LDI2MjU0LDI2MjQ5LDI2MjQ0LDI2MjY0LDI2MjY5LDI2MzA1LDI2Mjk3LDI2MzEzLDI2MzAyLDI2MzAwLDI2MzA4LDI2Mjk2LDI2MzI2LDI2MzMwLDI2MzM2LDI2MTc1LDI2MzQyLDI2MzQ1LDI2MzUyLDI2MzU3LDI2MzU5LDI2MzgzLDI2''@;'; put 'put ''MzkwLDI2Mzk4LDI2NDA2LDI2NDA3LDM4NzEyLDI2NDE0LDI2NDMxLDI2NDIyLDI2NDMzLDI2NDI0LDI2NDIzLDI2NDM4LDI2NDYyLDI2NDY0LDI2NDU3LDI2NDY3LDI2NDY4LDI2NTA1LDI2NDgwLDI2NTM3LDI2NDkyLDI2NDc0LDI2NTA4LDI2NTA3LDI2NTM0LDI2NTI5LDI2NTAxLDI2NTUx''@;'; put 'put ''LDI2NjA3LDI2NTQ4LDI2NjA0LDI2NTQ3LDI2NjAxLDI2NTUyLDI2NTk2LDI2NTkwLDI2NTg5LDI2NTk0LDI2NjA2LDI2NTUzLDI2NTc0LDI2NTY2LDI2NTk5LDI3MjkyLDI2NjU0LDI2Njk0LDI2NjY1LDI2Njg4LDI2NzAxLDI2Njc0LDI2NzAyLDI2ODAzLDI2NjY3LDI2NzEzLDI2NzIzLDI2''@;'; put 'put ''NzQzLDI2NzUxLDI2NzgzLDI2NzY3LDI2Nzk3LDI2NzcyLDI2NzgxLDI2Nzc5LDI2NzU1LDI3MzEwLDI2ODA5LDI2NzQwLDI2ODA1LDI2Nzg0LDI2ODEwLDI2ODk1LDI2NzY1LDI2NzUwLDI2ODgxLDI2ODI2LDI2ODg4LDI2ODQwLDI2OTE0LDI2OTE4LDI2ODQ5LDI2ODkyLDI2ODI5LDI2ODM2''@;'; put 'put ''LDI2ODU1LDI2ODM3LDI2OTM0LDI2ODk4LDI2ODg0LDI2ODM5LDI2ODUxLDI2OTE3LDI2ODczLDI2ODQ4LDI2ODYzLDI2OTIwLDI2OTIyLDI2OTA2LDI2OTE1LDI2OTEzLDI2ODIyLDI3MDAxLDI2OTk5LDI2OTcyLDI3ZTMsMjY5ODcsMjY5NjQsMjcwMDYsMjY5OTAsMjY5MzcsMjY5OTYsMjY5''@;'; put 'put ''NDEsMjY5NjksMjY5MjgsMjY5NzcsMjY5NzQsMjY5NzMsMjcwMDksMjY5ODYsMjcwNTgsMjcwNTQsMjcwODgsMjcwNzEsMjcwNzMsMjcwOTEsMjcwNzAsMjcwODYsMjM1MjgsMjcwODIsMjcxMDEsMjcwNjcsMjcwNzUsMjcwNDcsMjcxODIsMjcwMjUsMjcwNDAsMjcwMzYsMjcwMjksMjcwNjAs''@;'; put 'put ''MjcxMDIsMjcxMTIsMjcxMzgsMjcxNjMsMjcxMzUsMjc0MDIsMjcxMjksMjcxMjIsMjcxMTEsMjcxNDEsMjcwNTcsMjcxNjYsMjcxMTcsMjcxNTYsMjcxMTUsMjcxNDYsMjcxNTQsMjczMjksMjcxNzEsMjcxNTUsMjcyMDQsMjcxNDgsMjcyNTAsMjcxOTAsMjcyNTYsMjcyMDcsMjcyMzQsMjcy''@;'; put 'put ''MjUsMjcyMzgsMjcyMDgsMjcxOTIsMjcxNzAsMjcyODAsMjcyNzcsMjcyOTYsMjcyNjgsMjcyOTgsMjcyOTksMjcyODcsMzQzMjcsMjczMjMsMjczMzEsMjczMzAsMjczMjAsMjczMTUsMjczMDgsMjczNTgsMjczNDUsMjczNTksMjczMDYsMjczNTQsMjczNzAsMjczODcsMjczOTcsMzQzMjYs''@;'; put 'put ''MjczODYsMjc0MTAsMjc0MTQsMzk3MjksMjc0MjMsMjc0NDgsMjc0NDcsMzA0MjgsMjc0NDksMzkxNTAsMjc0NjMsMjc0NTksMjc0NjUsMjc0NzIsMjc0ODEsMjc0NzYsMjc0ODMsMjc0ODcsMjc0ODksMjc1MTIsMjc1MTMsMjc1MTksMjc1MjAsMjc1MjQsMjc1MjMsMjc1MzMsMjc1NDQsMjc1''@;'; put 'put ''NDEsMjc1NTAsMjc1NTYsMjc1NjIsMjc1NjMsMjc1NjcsMjc1NzAsMjc1NjksMjc1NzEsMjc1NzUsMjc1ODAsMjc1OTAsMjc1OTUsMjc2MDMsMjc2MTUsMjc2MjgsMjc2MjcsMjc2MzUsMjc2MzEsNDA2MzgsMjc2NTYsMjc2NjcsMjc2NjgsMjc2NzUsMjc2ODQsMjc2ODMsMjc3NDIsMjc3MzMs''@;'; put 'put ''Mjc3NDYsMjc3NTQsMjc3NzgsMjc3ODksMjc4MDIsMjc3NzcsMjc4MDMsMjc3NzQsMjc3NTIsMjc3NjMsMjc3OTQsMjc3OTIsMjc4NDQsMjc4ODksMjc4NTksMjc4MzcsMjc4NjMsMjc4NDUsMjc4NjksMjc4MjIsMjc4MjUsMjc4MzgsMjc4MzQsMjc4NjcsMjc4ODcsMjc4NjUsMjc4ODIsMjc5''@;'; put 'put ''MzUsMzQ4OTMsMjc5NTgsMjc5NDcsMjc5NjUsMjc5NjAsMjc5MjksMjc5NTcsMjc5NTUsMjc5MjIsMjc5MTYsMjgwMDMsMjgwNTEsMjgwMDQsMjc5OTQsMjgwMjUsMjc5OTMsMjgwNDYsMjgwNTMsMjg2NDQsMjgwMzcsMjgxNTMsMjgxODEsMjgxNzAsMjgwODUsMjgxMDMsMjgxMzQsMjgwODgs''@;'; put 'put ''MjgxMDIsMjgxNDAsMjgxMjYsMjgxMDgsMjgxMzYsMjgxMTQsMjgxMDEsMjgxNTQsMjgxMjEsMjgxMzIsMjgxMTcsMjgxMzgsMjgxNDIsMjgyMDUsMjgyNzAsMjgyMDYsMjgxODUsMjgyNzQsMjgyNTUsMjgyMjIsMjgxOTUsMjgyNjcsMjgyMDMsMjgyNzgsMjgyMzcsMjgxOTEsMjgyMjcsMjgy''@;'; put 'put ''MTgsMjgyMzgsMjgxOTYsMjg0MTUsMjgxODksMjgyMTYsMjgyOTAsMjgzMzAsMjgzMTIsMjgzNjEsMjgzNDMsMjgzNzEsMjgzNDksMjgzMzUsMjgzNTYsMjgzMzgsMjgzNzIsMjgzNzMsMjgzMDMsMjgzMjUsMjgzNTQsMjgzMTksMjg0ODEsMjg0MzMsMjg3NDgsMjgzOTYsMjg0MDgsMjg0MTQs''@;'; put 'put ''Mjg0NzksMjg0MDIsMjg0NjUsMjgzOTksMjg0NjYsMjgzNjQsMjg0NzgsMjg0MzUsMjg0MDcsMjg1NTAsMjg1MzgsMjg1MzYsMjg1NDUsMjg1NDQsMjg1MjcsMjg1MDcsMjg2NTksMjg1MjUsMjg1NDYsMjg1NDAsMjg1MDQsMjg1NTgsMjg1NjEsMjg2MTAsMjg1MTgsMjg1OTUsMjg1NzksMjg1''@;'; put 'put ''NzcsMjg1ODAsMjg2MDEsMjg2MTQsMjg1ODYsMjg2MzksMjg2MjksMjg2NTIsMjg2MjgsMjg2MzIsMjg2NTcsMjg2NTQsMjg2MzUsMjg2ODEsMjg2ODMsMjg2NjYsMjg2ODksMjg2NzMsMjg2ODcsMjg2NzAsMjg2OTksMjg2OTgsMjg1MzIsMjg3MDEsMjg2OTYsMjg3MDMsMjg3MjAsMjg3MzQs''@;'; put 'put ''Mjg3MjIsMjg3NTMsMjg3NzEsMjg4MjUsMjg4MTgsMjg4NDcsMjg5MTMsMjg4NDQsMjg4NTYsMjg4NTEsMjg4NDYsMjg4OTUsMjg4NzUsMjg4OTMsMjg4ODksMjg5MzcsMjg5MjUsMjg5NTYsMjg5NTMsMjkwMjksMjkwMTMsMjkwNjQsMjkwMzAsMjkwMjYsMjkwMDQsMjkwMTQsMjkwMzYsMjkw''@;'; put 'put ''NzEsMjkxNzksMjkwNjAsMjkwNzcsMjkwOTYsMjkxMDAsMjkxNDMsMjkxMTMsMjkxMTgsMjkxMzgsMjkxMjksMjkxNDAsMjkxMzQsMjkxNTIsMjkxNjQsMjkxNTksMjkxNzMsMjkxODAsMjkxNzcsMjkxODMsMjkxOTcsMjkyMDAsMjkyMTEsMjkyMjQsMjkyMjksMjkyMjgsMjkyMzIsMjkyMzQs''@;'; put 'put ''MjkyNDMsMjkyNDQsMjkyNDcsMjkyNDgsMjkyNTQsMjkyNTksMjkyNzIsMjkzMDAsMjkzMTAsMjkzMTQsMjkzMTMsMjkzMTksMjkzMzAsMjkzMzQsMjkzNDYsMjkzNTEsMjkzNjksMjkzNjIsMjkzNzksMjkzODIsMjkzODAsMjkzOTAsMjkzOTQsMjk0MTAsMjk0MDgsMjk0MDksMjk0MzMsMjk0''@;'; put 'put ''MzEsMjA0OTUsMjk0NjMsMjk0NTAsMjk0NjgsMjk0NjIsMjk0NjksMjk0OTIsMjk0ODcsMjk0ODEsMjk0NzcsMjk1MDIsMjk1MTgsMjk1MTksNDA2NjQsMjk1MjcsMjk1NDYsMjk1NDQsMjk1NTIsMjk1NjAsMjk1NTcsMjk1NjMsMjk1NjIsMjk2NDAsMjk2MTksMjk2NDYsMjk2MjcsMjk2MzIs''@;'; put 'put ''Mjk2NjksMjk2NzgsMjk2NjIsMjk4NTgsMjk3MDEsMjk4MDcsMjk3MzMsMjk2ODgsMjk3NDYsMjk3NTQsMjk3ODEsMjk3NTksMjk3OTEsMjk3ODUsMjk3NjEsMjk3ODgsMjk4MDEsMjk4MDgsMjk3OTUsMjk4MDIsMjk4MTQsMjk4MjIsMjk4MzUsMjk4NTQsMjk4NjMsMjk4OTgsMjk5MDMsMjk5''@;'; put 'put ''MDgsMjk2ODEsMjk5MjAsMjk5MjMsMjk5MjcsMjk5MjksMjk5MzQsMjk5MzgsMjk5MzYsMjk5MzcsMjk5NDQsMjk5NDMsMjk5NTYsMjk5NTUsMjk5NTcsMjk5NjQsMjk5NjYsMjk5NjUsMjk5NzMsMjk5NzEsMjk5ODIsMjk5OTAsMjk5OTYsMzAwMTIsMzAwMjAsMzAwMjksMzAwMjYsMzAwMjUs''@;'; put 'put ''MzAwNDMsMzAwMjIsMzAwNDIsMzAwNTcsMzAwNTIsMzAwNTUsMzAwNTksMzAwNjEsMzAwNzIsMzAwNzAsMzAwODYsMzAwODcsMzAwNjgsMzAwOTAsMzAwODksMzAwODIsMzAxMDAsMzAxMDYsMzAxMDksMzAxMTcsMzAxMTUsMzAxNDYsMzAxMzEsMzAxNDcsMzAxMzMsMzAxNDEsMzAxMzYsMzAx''@;'; put 'put ''NDAsMzAxMjksMzAxNTcsMzAxNTQsMzAxNjIsMzAxNjksMzAxNzksMzAxNzQsMzAyMDYsMzAyMDcsMzAyMDQsMzAyMDksMzAxOTIsMzAyMDIsMzAxOTQsMzAxOTUsMzAyMTksMzAyMjEsMzAyMTcsMzAyMzksMzAyNDcsMzAyNDAsMzAyNDEsMzAyNDIsMzAyNDQsMzAyNjAsMzAyNTYsMzAyNjcs''@;'; put 'put ''MzAyNzksMzAyODAsMzAyNzgsMzAzMDAsMzAyOTYsMzAzMDUsMzAzMDYsMzAzMTIsMzAzMTMsMzAzMTQsMzAzMTEsMzAzMTYsMzAzMjAsMzAzMjIsMzAzMjYsMzAzMjgsMzAzMzIsMzAzMzYsMzAzMzksMzAzNDQsMzAzNDcsMzAzNTAsMzAzNTgsMzAzNTUsMzAzNjEsMzAzNjIsMzAzODQsMzAz''@;'; put 'put ''ODgsMzAzOTIsMzAzOTMsMzAzOTQsMzA0MDIsMzA0MTMsMzA0MjIsMzA0MTgsMzA0MzAsMzA0MzMsMzA0MzcsMzA0MzksMzA0NDIsMzQzNTEsMzA0NTksMzA0NzIsMzA0NzEsMzA0NjgsMzA1MDUsMzA1MDAsMzA0OTQsMzA1MDEsMzA1MDIsMzA0OTEsMzA1MTksMzA1MjAsMzA1MzUsMzA1NTQs''@;'; put 'put ''MzA1NjgsMzA1NzEsMzA1NTUsMzA1NjUsMzA1OTEsMzA1OTAsMzA1ODUsMzA2MDYsMzA2MDMsMzA2MDksMzA2MjQsMzA2MjIsMzA2NDAsMzA2NDYsMzA2NDksMzA2NTUsMzA2NTIsMzA2NTMsMzA2NTEsMzA2NjMsMzA2NjksMzA2NzksMzA2ODIsMzA2ODQsMzA2OTEsMzA3MDIsMzA3MTYsMzA3''@;'; put 'put ''MzIsMzA3MzgsMzEwMTQsMzA3NTIsMzEwMTgsMzA3ODksMzA4NjIsMzA4MzYsMzA4NTQsMzA4NDQsMzA4NzQsMzA4NjAsMzA4ODMsMzA5MDEsMzA4OTAsMzA4OTUsMzA5MjksMzA5MTgsMzA5MjMsMzA5MzIsMzA5MTAsMzA5MDgsMzA5MTcsMzA5MjIsMzA5NTYsMzA5NTEsMzA5MzgsMzA5NzMs''@;'; put 'put ''MzA5NjQsMzA5ODMsMzA5OTQsMzA5OTMsMzEwMDEsMzEwMjAsMzEwMTksMzEwNDAsMzEwNzIsMzEwNjMsMzEwNzEsMzEwNjYsMzEwNjEsMzEwNTksMzEwOTgsMzExMDMsMzExMTQsMzExMzMsMzExNDMsNDA3NzksMzExNDYsMzExNTAsMzExNTUsMzExNjEsMzExNjIsMzExNzcsMzExODksMzEy''@;'; put 'put ''MDcsMzEyMTIsMzEyMDEsMzEyMDMsMzEyNDAsMzEyNDUsMzEyNTYsMzEyNTcsMzEyNjQsMzEyNjMsMzExMDQsMzEyODEsMzEyOTEsMzEyOTQsMzEyODcsMzEyOTksMzEzMTksMzEzMDUsMzEzMjksMzEzMzAsMzEzMzcsNDA4NjEsMzEzNDQsMzEzNTMsMzEzNTcsMzEzNjgsMzEzODMsMzEzODEs''@;'; put 'put ''MzEzODQsMzEzODIsMzE0MDEsMzE0MzIsMzE0MDgsMzE0MTQsMzE0MjksMzE0MjgsMzE0MjMsMzY5OTUsMzE0MzEsMzE0MzQsMzE0MzcsMzE0MzksMzE0NDUsMzE0NDMsMzE0NDksMzE0NTAsMzE0NTMsMzE0NTcsMzE0NTgsMzE0NjIsMzE0NjksMzE0NzIsMzE0OTAsMzE1MDMsMzE0OTgsMzE0''@;'; put 'put ''OTQsMzE1MzksMzE1MTIsMzE1MTMsMzE1MTgsMzE1NDEsMzE1MjgsMzE1NDIsMzE1NjgsMzE2MTAsMzE0OTIsMzE1NjUsMzE0OTksMzE1NjQsMzE1NTcsMzE2MDUsMzE1ODksMzE2MDQsMzE1OTEsMzE2MDAsMzE2MDEsMzE1OTYsMzE1OTgsMzE2NDUsMzE2NDAsMzE2NDcsMzE2MjksMzE2NDQs''@;'; put 'put ''MzE2NDIsMzE2MjcsMzE2MzQsMzE2MzEsMzE1ODEsMzE2NDEsMzE2OTEsMzE2ODEsMzE2OTIsMzE2OTUsMzE2NjgsMzE2ODYsMzE3MDksMzE3MjEsMzE3NjEsMzE3NjQsMzE3MTgsMzE3MTcsMzE4NDAsMzE3NDQsMzE3NTEsMzE3NjMsMzE3MzEsMzE3MzUsMzE3NjcsMzE3NTcsMzE3MzQsMzE3''@;'; put 'put ''NzksMzE3ODMsMzE3ODYsMzE3NzUsMzE3OTksMzE3ODcsMzE4MDUsMzE4MjAsMzE4MTEsMzE4MjgsMzE4MjMsMzE4MDgsMzE4MjQsMzE4MzIsMzE4MzksMzE4NDQsMzE4MzAsMzE4NDUsMzE4NTIsMzE4NjEsMzE4NzUsMzE4ODgsMzE5MDgsMzE5MTcsMzE5MDYsMzE5MTUsMzE5MDUsMzE5MTIs''@;'; put 'put ''MzE5MjMsMzE5MjIsMzE5MjEsMzE5MTgsMzE5MjksMzE5MzMsMzE5MzYsMzE5NDEsMzE5MzgsMzE5NjAsMzE5NTQsMzE5NjQsMzE5NzAsMzk3MzksMzE5ODMsMzE5ODYsMzE5ODgsMzE5OTAsMzE5OTQsMzIwMDYsMzIwMDIsMzIwMjgsMzIwMjEsMzIwMTAsMzIwNjksMzIwNzUsMzIwNDYsMzIw''@;'; put 'put ''NTAsMzIwNjMsMzIwNTMsMzIwNzAsMzIxMTUsMzIwODYsMzIwNzgsMzIxMTQsMzIxMDQsMzIxMTAsMzIwNzksMzIwOTksMzIxNDcsMzIxMzcsMzIwOTEsMzIxNDMsMzIxMjUsMzIxNTUsMzIxODYsMzIxNzQsMzIxNjMsMzIxODEsMzIxOTksMzIxODksMzIxNzEsMzIzMTcsMzIxNjIsMzIxNzUs''@;'; put 'put ''MzIyMjAsMzIxODQsMzIxNTksMzIxNzYsMzIyMTYsMzIyMjEsMzIyMjgsMzIyMjIsMzIyNTEsMzIyNDIsMzIyMjUsMzIyNjEsMzIyNjYsMzIyOTEsMzIyODksMzIyNzQsMzIzMDUsMzIyODcsMzIyNjUsMzIyNjcsMzIyOTAsMzIzMjYsMzIzNTgsMzIzMTUsMzIzMDksMzIzMTMsMzIzMjMsMzIz''@;'; put 'put ''MTEsMzIzMDYsMzIzMTQsMzIzNTksMzIzNDksMzIzNDIsMzIzNTAsMzIzNDUsMzIzNDYsMzIzNzcsMzIzNjIsMzIzNjEsMzIzODAsMzIzNzksMzIzODcsMzIyMTMsMzIzODEsMzY3ODIsMzIzODMsMzIzOTIsMzIzOTMsMzIzOTYsMzI0MDIsMzI0MDAsMzI0MDMsMzI0MDQsMzI0MDYsMzIzOTgs''@;'; put 'put ''MzI0MTEsMzI0MTIsMzI1NjgsMzI1NzAsMzI1ODEsMzI1ODgsMzI1ODksMzI1OTAsMzI1OTIsMzI1OTMsMzI1OTcsMzI1OTYsMzI2MDAsMzI2MDcsMzI2MDgsMzI2MTYsMzI2MTcsMzI2MTUsMzI2MzIsMzI2NDIsMzI2NDYsMzI2NDMsMzI2NDgsMzI2NDcsMzI2NTIsMzI2NjAsMzI2NzAsMzI2''@;'; put 'put ''NjksMzI2NjYsMzI2NzUsMzI2ODcsMzI2OTAsMzI2OTcsMzI2ODYsMzI2OTQsMzI2OTYsMzU2OTcsMzI3MDksMzI3MTAsMzI3MTQsMzI3MjUsMzI3MjQsMzI3MzcsMzI3NDIsMzI3NDUsMzI3NTUsMzI3NjEsMzkxMzIsMzI3NzQsMzI3NzIsMzI3NzksMzI3ODYsMzI3OTIsMzI3OTMsMzI3OTYs''@;'; put 'put ''MzI4MDEsMzI4MDgsMzI4MzEsMzI4MjcsMzI4NDIsMzI4MzgsMzI4NTAsMzI4NTYsMzI4NTgsMzI4NjMsMzI4NjYsMzI4NzIsMzI4ODMsMzI4ODIsMzI4ODAsMzI4ODYsMzI4ODksMzI4OTMsMzI4OTUsMzI5MDAsMzI5MDIsMzI5MDEsMzI5MjMsMzI5MTUsMzI5MjIsMzI5NDEsMjA4ODAsMzI5''@;'; put 'put ''NDAsMzI5ODcsMzI5OTcsMzI5ODUsMzI5ODksMzI5NjQsMzI5ODYsMzI5ODIsMzMwMzMsMzMwMDcsMzMwMDksMzMwNTEsMzMwNjUsMzMwNTksMzMwNzEsMzMwOTksMzg1MzksMzMwOTQsMzMwODYsMzMxMDcsMzMxMDUsMzMwMjAsMzMxMzcsMzMxMzQsMzMxMjUsMzMxMjYsMzMxNDAsMzMxNTUs''@;'; put 'put ''MzMxNjAsMzMxNjIsMzMxNTIsMzMxNTQsMzMxODQsMzMxNzMsMzMxODgsMzMxODcsMzMxMTksMzMxNzEsMzMxOTMsMzMyMDAsMzMyMDUsMzMyMTQsMzMyMDgsMzMyMTMsMzMyMTYsMzMyMTgsMzMyMTAsMzMyMjUsMzMyMjksMzMyMzMsMzMyNDEsMzMyNDAsMzMyMjQsMzMyNDIsMzMyNDcsMzMy''@;'; put 'put ''NDgsMzMyNTUsMzMyNzQsMzMyNzUsMzMyNzgsMzMyODEsMzMyODIsMzMyODUsMzMyODcsMzMyOTAsMzMyOTMsMzMyOTYsMzMzMDIsMzMzMjEsMzMzMjMsMzMzMzYsMzMzMzEsMzMzNDQsMzMzNjksMzMzNjgsMzMzNzMsMzMzNzAsMzMzNzUsMzMzODAsMzMzNzgsMzMzODQsMzMzODYsMzMzODcs''@;'; put 'put ''MzMzMjYsMzMzOTMsMzMzOTksMzM0MDAsMzM0MDYsMzM0MjEsMzM0MjYsMzM0NTEsMzM0MzksMzM0NjcsMzM0NTIsMzM1MDUsMzM1MDcsMzM1MDMsMzM0OTAsMzM1MjQsMzM1MjMsMzM1MzAsMzM2ODMsMzM1MzksMzM1MzEsMzM1MjksMzM1MDIsMzM1NDIsMzM1MDAsMzM1NDUsMzM0OTcsMzM1''@;'; put 'put ''ODksMzM1ODgsMzM1NTgsMzM1ODYsMzM1ODUsMzM2MDAsMzM1OTMsMzM2MTYsMzM2MDUsMzM1ODMsMzM1NzksMzM1NTksMzM1NjAsMzM2NjksMzM2OTAsMzM3MDYsMzM2OTUsMzM2OTgsMzM2ODYsMzM1NzEsMzM2NzgsMzM2NzEsMzM2NzQsMzM2NjAsMzM3MTcsMzM2NTEsMzM2NTMsMzM2OTYs''@;'; put 'put ''MzM2NzMsMzM3MDQsMzM3ODAsMzM4MTEsMzM3NzEsMzM3NDIsMzM3ODksMzM3OTUsMzM3NTIsMzM4MDMsMzM3MjksMzM3ODMsMzM3OTksMzM3NjAsMzM3NzgsMzM4MDUsMzM4MjYsMzM4MjQsMzM3MjUsMzM4NDgsMzQwNTQsMzM3ODcsMzM5MDEsMzM4MzQsMzM4NTIsMzQxMzgsMzM5MjQsMzM5''@;'; put 'put ''MTEsMzM4OTksMzM5NjUsMzM5MDIsMzM5MjIsMzM4OTcsMzM4NjIsMzM4MzYsMzM5MDMsMzM5MTMsMzM4NDUsMzM5OTQsMzM4OTAsMzM5NzcsMzM5ODMsMzM5NTEsMzQwMDksMzM5OTcsMzM5NzksMzQwMTAsMzRlMywzMzk4NSwzMzk5MCwzNDAwNiwzMzk1MywzNDA4MSwzNDA0NywzNDAzNiwz''@;'; put 'put ''NDA3MSwzNDA3MiwzNDA5MiwzNDA3OSwzNDA2OSwzNDA2OCwzNDA0NCwzNDExMiwzNDE0NywzNDEzNiwzNDEyMCwzNDExMywzNDMwNiwzNDEyMywzNDEzMywzNDE3NiwzNDIxMiwzNDE4NCwzNDE5MywzNDE4NiwzNDIxNiwzNDE1NywzNDE5NiwzNDIwMywzNDI4MiwzNDE4MywzNDIwNCwzNDE2''@;'; put 'put ''NywzNDE3NCwzNDE5MiwzNDI0OSwzNDIzNCwzNDI1NSwzNDIzMywzNDI1NiwzNDI2MSwzNDI2OSwzNDI3NywzNDI2OCwzNDI5NywzNDMxNCwzNDMyMywzNDMxNSwzNDMwMiwzNDI5OCwzNDMxMCwzNDMzOCwzNDMzMCwzNDM1MiwzNDM2NywzNDM4MSwyMDA1MywzNDM4OCwzNDM5OSwzNDQwNywz''@;'; put 'put ''NDQxNywzNDQ1MSwzNDQ2NywzNDQ3MywzNDQ3NCwzNDQ0MywzNDQ0NCwzNDQ4NiwzNDQ3OSwzNDUwMCwzNDUwMiwzNDQ4MCwzNDUwNSwzNDg1MSwzNDQ3NSwzNDUxNiwzNDUyNiwzNDUzNywzNDU0MCwzNDUyNywzNDUyMywzNDU0MywzNDU3OCwzNDU2NiwzNDU2OCwzNDU2MCwzNDU2MywzNDU1''@;'; put 'put ''NSwzNDU3NywzNDU2OSwzNDU3MywzNDU1MywzNDU3MCwzNDYxMiwzNDYyMywzNDYxNSwzNDYxOSwzNDU5NywzNDYwMSwzNDU4NiwzNDY1NiwzNDY1NSwzNDY4MCwzNDYzNiwzNDYzOCwzNDY3NiwzNDY0NywzNDY2NCwzNDY3MCwzNDY0OSwzNDY0MywzNDY1OSwzNDY2NiwzNDgyMSwzNDcyMiwz''@;'; put 'put ''NDcxOSwzNDY5MCwzNDczNSwzNDc2MywzNDc0OSwzNDc1MiwzNDc2OCwzODYxNCwzNDczMSwzNDc1NiwzNDczOSwzNDc1OSwzNDc1OCwzNDc0NywzNDc5OSwzNDgwMiwzNDc4NCwzNDgzMSwzNDgyOSwzNDgxNCwzNDgwNiwzNDgwNywzNDgzMCwzNDc3MCwzNDgzMywzNDgzOCwzNDgzNywzNDg1''@;'; put 'put ''MCwzNDg0OSwzNDg2NSwzNDg3MCwzNDg3MywzNDg1NSwzNDg3NSwzNDg4NCwzNDg4MiwzNDg5OCwzNDkwNSwzNDkxMCwzNDkxNCwzNDkyMywzNDk0NSwzNDk0MiwzNDk3NCwzNDkzMywzNDk0MSwzNDk5NywzNDkzMCwzNDk0NiwzNDk2NywzNDk2MiwzNDk5MCwzNDk2OSwzNDk3OCwzNDk1Nywz''@;'; put 'put ''NDk4MCwzNDk5MiwzNTAwNywzNDk5MywzNTAxMSwzNTAxMiwzNTAyOCwzNTAzMiwzNTAzMywzNTAzNywzNTA2NSwzNTA3NCwzNTA2OCwzNTA2MCwzNTA0OCwzNTA1OCwzNTA3NiwzNTA4NCwzNTA4MiwzNTA5MSwzNTEzOSwzNTEwMiwzNTEwOSwzNTExNCwzNTExNSwzNTEzNywzNTE0MCwzNTEz''@;'; put 'put ''MSwzNTEyNiwzNTEyOCwzNTE0OCwzNTEwMSwzNTE2OCwzNTE2NiwzNTE3NCwzNTE3MiwzNTE4MSwzNTE3OCwzNTE4MywzNTE4OCwzNTE5MSwzNTE5OCwzNTIwMywzNTIwOCwzNTIxMCwzNTIxOSwzNTIyNCwzNTIzMywzNTI0MSwzNTIzOCwzNTI0NCwzNTI0NywzNTI1MCwzNTI1OCwzNTI2MSwz''@;'; put 'put ''NTI2MywzNTI2NCwzNTI5MCwzNTI5MiwzNTI5MywzNTMwMywzNTMxNiwzNTMyMCwzNTMzMSwzNTM1MCwzNTM0NCwzNTM0MCwzNTM1NSwzNTM1NywzNTM2NSwzNTM4MiwzNTM5MywzNTQxOSwzNTQxMCwzNTM5OCwzNTQwMCwzNTQ1MiwzNTQzNywzNTQzNiwzNTQyNiwzNTQ2MSwzNTQ1OCwzNTQ2''@;'; put 'put ''MCwzNTQ5NiwzNTQ4OSwzNTQ3MywzNTQ5MywzNTQ5NCwzNTQ4MiwzNTQ5MSwzNTUyNCwzNTUzMywzNTUyMiwzNTU0NiwzNTU2MywzNTU3MSwzNTU1OSwzNTU1NiwzNTU2OSwzNTYwNCwzNTU1MiwzNTU1NCwzNTU3NSwzNTU1MCwzNTU0NywzNTU5NiwzNTU5MSwzNTYxMCwzNTU1MywzNTYwNiwz''@;'; put 'put ''NTYwMCwzNTYwNywzNTYxNiwzNTYzNSwzODgyNywzNTYyMiwzNTYyNywzNTY0NiwzNTYyNCwzNTY0OSwzNTY2MCwzNTY2MywzNTY2MiwzNTY1NywzNTY3MCwzNTY3NSwzNTY3NCwzNTY5MSwzNTY3OSwzNTY5MiwzNTY5NSwzNTcwMCwzNTcwOSwzNTcxMiwzNTcyNCwzNTcyNiwzNTczMCwzNTcz''@;'; put 'put ''MSwzNTczNCwzNTczNywzNTczOCwzNTg5OCwzNTkwNSwzNTkwMywzNTkxMiwzNTkxNiwzNTkxOCwzNTkyMCwzNTkyNSwzNTkzOCwzNTk0OCwzNTk2MCwzNTk2MiwzNTk3MCwzNTk3NywzNTk3MywzNTk3OCwzNTk4MSwzNTk4MiwzNTk4OCwzNTk2NCwzNTk5MiwyNTExNywzNjAxMywzNjAxMCwz''@;'; put 'put ''NjAyOSwzNjAxOCwzNjAxOSwzNjAxNCwzNjAyMiwzNjA0MCwzNjAzMywzNjA2OCwzNjA2NywzNjA1OCwzNjA5MywzNjA5MCwzNjA5MSwzNjEwMCwzNjEwMSwzNjEwNiwzNjEwMywzNjExMSwzNjEwOSwzNjExMiw0MDc4MiwzNjExNSwzNjA0NSwzNjExNiwzNjExOCwzNjE5OSwzNjIwNSwzNjIw''@;'; put 'put ''OSwzNjIxMSwzNjIyNSwzNjI0OSwzNjI5MCwzNjI4NiwzNjI4MiwzNjMwMywzNjMxNCwzNjMxMCwzNjMwMCwzNjMxNSwzNjI5OSwzNjMzMCwzNjMzMSwzNjMxOSwzNjMyMywzNjM0OCwzNjM2MCwzNjM2MSwzNjM1MSwzNjM4MSwzNjM4MiwzNjM2OCwzNjM4MywzNjQxOCwzNjQwNSwzNjQwMCwz''@;'; put 'put ''NjQwNCwzNjQyNiwzNjQyMywzNjQyNSwzNjQyOCwzNjQzMiwzNjQyNCwzNjQ0MSwzNjQ1MiwzNjQ0OCwzNjM5NCwzNjQ1MSwzNjQzNywzNjQ3MCwzNjQ2NiwzNjQ3NiwzNjQ4MSwzNjQ4NywzNjQ4NSwzNjQ4NCwzNjQ5MSwzNjQ5MCwzNjQ5OSwzNjQ5NywzNjUwMCwzNjUwNSwzNjUyMiwzNjUx''@;'; put 'put ''MywzNjUyNCwzNjUyOCwzNjU1MCwzNjUyOSwzNjU0MiwzNjU0OSwzNjU1MiwzNjU1NSwzNjU3MSwzNjU3OSwzNjYwNCwzNjYwMywzNjU4NywzNjYwNiwzNjYxOCwzNjYxMywzNjYyOSwzNjYyNiwzNjYzMywzNjYyNywzNjYzNiwzNjYzOSwzNjYzNSwzNjYyMCwzNjY0NiwzNjY1OSwzNjY2Nywz''@;'; put 'put ''NjY2NSwzNjY3NywzNjY3NCwzNjY3MCwzNjY4NCwzNjY4MSwzNjY3OCwzNjY4NiwzNjY5NSwzNjcwMCwzNjcwNiwzNjcwNywzNjcwOCwzNjc2NCwzNjc2NywzNjc3MSwzNjc4MSwzNjc4MywzNjc5MSwzNjgyNiwzNjgzNywzNjgzNCwzNjg0MiwzNjg0NywzNjk5OSwzNjg1MiwzNjg2OSwzNjg1''@;'; put 'put ''NywzNjg1OCwzNjg4MSwzNjg4NSwzNjg5NywzNjg3NywzNjg5NCwzNjg4NiwzNjg3NSwzNjkwMywzNjkxOCwzNjkxNywzNjkyMSwzNjg1NiwzNjk0MywzNjk0NCwzNjk0NSwzNjk0NiwzNjg3OCwzNjkzNywzNjkyNiwzNjk1MCwzNjk1MiwzNjk1OCwzNjk2OCwzNjk3NSwzNjk4MiwzODU2OCwz''@;'; put 'put ''Njk3OCwzNjk5NCwzNjk4OSwzNjk5MywzNjk5MiwzNzAwMiwzNzAwMSwzNzAwNywzNzAzMiwzNzAzOSwzNzA0MSwzNzA0NSwzNzA5MCwzNzA5MiwyNTE2MCwzNzA4MywzNzEyMiwzNzEzOCwzNzE0NSwzNzE3MCwzNzE2OCwzNzE5NCwzNzIwNiwzNzIwOCwzNzIxOSwzNzIyMSwzNzIyNSwzNzIz''@;'; put 'put ''NSwzNzIzNCwzNzI1OSwzNzI1NywzNzI1MCwzNzI4MiwzNzI5MSwzNzI5NSwzNzI5MCwzNzMwMSwzNzMwMCwzNzMwNiwzNzMxMiwzNzMxMywzNzMyMSwzNzMyMywzNzMyOCwzNzMzNCwzNzM0MywzNzM0NSwzNzMzOSwzNzM3MiwzNzM2NSwzNzM2NiwzNzQwNiwzNzM3NSwzNzM5NiwzNzQyMCwz''@;'; put 'put ''NzM5NywzNzM5MywzNzQ3MCwzNzQ2MywzNzQ0NSwzNzQ0OSwzNzQ3NiwzNzQ0OCwzNzUyNSwzNzQzOSwzNzQ1MSwzNzQ1NiwzNzUzMiwzNzUyNiwzNzUyMywzNzUzMSwzNzQ2NiwzNzU4MywzNzU2MSwzNzU1OSwzNzYwOSwzNzY0NywzNzYyNiwzNzcwMCwzNzY3OCwzNzY1NywzNzY2NiwzNzY1''@;'; put 'put ''OCwzNzY2NywzNzY5MCwzNzY4NSwzNzY5MSwzNzcyNCwzNzcyOCwzNzc1NiwzNzc0MiwzNzcxOCwzNzgwOCwzNzgwNCwzNzgwNSwzNzc4MCwzNzgxNywzNzg0NiwzNzg0NywzNzg2NCwzNzg2MSwzNzg0OCwzNzgyNywzNzg1MywzNzg0MCwzNzgzMiwzNzg2MCwzNzkxNCwzNzkwOCwzNzkwNywz''@;'; put 'put ''Nzg5MSwzNzg5NSwzNzkwNCwzNzk0MiwzNzkzMSwzNzk0MSwzNzkyMSwzNzk0NiwzNzk1MywzNzk3MCwzNzk1NiwzNzk3OSwzNzk4NCwzNzk4NiwzNzk4MiwzNzk5NCwzNzQxNywzOGUzLDM4MDA1LDM4MDA3LDM4MDEzLDM3OTc4LDM4MDEyLDM4MDE0LDM4MDE3LDM4MDE1LDM4Mjc0LDM4Mjc5''@;'; put 'put ''LDM4MjgyLDM4MjkyLDM4Mjk0LDM4Mjk2LDM4Mjk3LDM4MzA0LDM4MzEyLDM4MzExLDM4MzE3LDM4MzMyLDM4MzMxLDM4MzI5LDM4MzM0LDM4MzQ2LDI4NjYyLDM4MzM5LDM4MzQ5LDM4MzQ4LDM4MzU3LDM4MzU2LDM4MzU4LDM4MzY0LDM4MzY5LDM4MzczLDM4MzcwLDM4NDMzLDM4NDQwLDM4''@;'; put 'put ''NDQ2LDM4NDQ3LDM4NDY2LDM4NDc2LDM4NDc5LDM4NDc1LDM4NTE5LDM4NDkyLDM4NDk0LDM4NDkzLDM4NDk1LDM4NTAyLDM4NTE0LDM4NTA4LDM4NTQxLDM4NTUyLDM4NTQ5LDM4NTUxLDM4NTcwLDM4NTY3LDM4NTc3LDM4NTc4LDM4NTc2LDM4NTgwLDM4NTgyLDM4NTg0LDM4NTg1LDM4NjA2''@;'; put 'put ''LDM4NjAzLDM4NjAxLDM4NjA1LDM1MTQ5LDM4NjIwLDM4NjY5LDM4NjEzLDM4NjQ5LDM4NjYwLDM4NjYyLDM4NjY0LDM4Njc1LDM4NjcwLDM4NjczLDM4NjcxLDM4Njc4LDM4NjgxLDM4NjkyLDM4Njk4LDM4NzA0LDM4NzEzLDM4NzE3LDM4NzE4LDM4NzI0LDM4NzI2LDM4NzI4LDM4NzIyLDM4''@;'; put 'put ''NzI5LDM4NzQ4LDM4NzUyLDM4NzU2LDM4NzU4LDM4NzYwLDIxMjAyLDM4NzYzLDM4NzY5LDM4Nzc3LDM4Nzg5LDM4NzgwLDM4Nzg1LDM4Nzc4LDM4NzkwLDM4Nzk1LDM4Nzk5LDM4ODAwLDM4ODEyLDM4ODI0LDM4ODIyLDM4ODE5LDM4ODM1LDM4ODM2LDM4ODUxLDM4ODU0LDM4ODU2LDM4ODU5''@;'; put 'put ''LDM4ODc2LDM4ODkzLDQwNzgzLDM4ODk4LDMxNDU1LDM4OTAyLDM4OTAxLDM4OTI3LDM4OTI0LDM4OTY4LDM4OTQ4LDM4OTQ1LDM4OTY3LDM4OTczLDM4OTgyLDM4OTkxLDM4OTg3LDM5MDE5LDM5MDIzLDM5MDI0LDM5MDI1LDM5MDI4LDM5MDI3LDM5MDgyLDM5MDg3LDM5MDg5LDM5MDk0LDM5''@;'; put 'put ''MTA4LDM5MTA3LDM5MTEwLDM5MTQ1LDM5MTQ3LDM5MTcxLDM5MTc3LDM5MTg2LDM5MTg4LDM5MTkyLDM5MjAxLDM5MTk3LDM5MTk4LDM5MjA0LDM5MjAwLDM5MjEyLDM5MjE0LDM5MjI5LDM5MjMwLDM5MjM0LDM5MjQxLDM5MjM3LDM5MjQ4LDM5MjQzLDM5MjQ5LDM5MjUwLDM5MjQ0LDM5MjUz''@;'; put 'put ''LDM5MzE5LDM5MzIwLDM5MzMzLDM5MzQxLDM5MzQyLDM5MzU2LDM5MzkxLDM5Mzg3LDM5Mzg5LDM5Mzg0LDM5Mzc3LDM5NDA1LDM5NDA2LDM5NDA5LDM5NDEwLDM5NDE5LDM5NDE2LDM5NDI1LDM5NDM5LDM5NDI5LDM5Mzk0LDM5NDQ5LDM5NDY3LDM5NDc5LDM5NDkzLDM5NDkwLDM5NDg4LDM5''@;'; put 'put ''NDkxLDM5NDg2LDM5NTA5LDM5NTAxLDM5NTE1LDM5NTExLDM5NTE5LDM5NTIyLDM5NTI1LDM5NTI0LDM5NTI5LDM5NTMxLDM5NTMwLDM5NTk3LDM5NjAwLDM5NjEyLDM5NjE2LDM5NjMxLDM5NjMzLDM5NjM1LDM5NjM2LDM5NjQ2LDM5NjQ3LDM5NjUwLDM5NjUxLDM5NjU0LDM5NjYzLDM5NjU5''@;'; put 'put ''LDM5NjYyLDM5NjY4LDM5NjY1LDM5NjcxLDM5Njc1LDM5Njg2LDM5NzA0LDM5NzA2LDM5NzExLDM5NzE0LDM5NzE1LDM5NzE3LDM5NzE5LDM5NzIwLDM5NzIxLDM5NzIyLDM5NzI2LDM5NzI3LDM5NzMwLDM5NzQ4LDM5NzQ3LDM5NzU5LDM5NzU3LDM5NzU4LDM5NzYxLDM5NzY4LDM5Nzk2LDM5''@;'; put 'put ''ODI3LDM5ODExLDM5ODI1LDM5ODMwLDM5ODMxLDM5ODM5LDM5ODQwLDM5ODQ4LDM5ODYwLDM5ODcyLDM5ODgyLDM5ODY1LDM5ODc4LDM5ODg3LDM5ODg5LDM5ODkwLDM5OTA3LDM5OTA2LDM5OTA4LDM5ODkyLDM5OTA1LDM5OTk0LDM5OTIyLDM5OTIxLDM5OTIwLDM5OTU3LDM5OTU2LDM5OTQ1''@;'; put 'put ''LDM5OTU1LDM5OTQ4LDM5OTQyLDM5OTQ0LDM5OTU0LDM5OTQ2LDM5OTQwLDM5OTgyLDM5OTYzLDM5OTczLDM5OTcyLDM5OTY5LDM5OTg0LDQwMDA3LDM5OTg2LDQwMDA2LDM5OTk4LDQwMDI2LDQwMDMyLDQwMDM5LDQwMDU0LDQwMDU2LDQwMTY3LDQwMTcyLDQwMTc2LDQwMjAxLDQwMjAwLDQw''@;'; put 'put ''MTcxLDQwMTk1LDQwMTk4LDQwMjM0LDQwMjMwLDQwMzY3LDQwMjI3LDQwMjIzLDQwMjYwLDQwMjEzLDQwMjEwLDQwMjU3LDQwMjU1LDQwMjU0LDQwMjYyLDQwMjY0LDQwMjg1LDQwMjg2LDQwMjkyLDQwMjczLDQwMjcyLDQwMjgxLDQwMzA2LDQwMzI5LDQwMzI3LDQwMzYzLDQwMzAzLDQwMzE0''@;'; put 'put ''LDQwMzQ2LDQwMzU2LDQwMzYxLDQwMzcwLDQwMzg4LDQwMzg1LDQwMzc5LDQwMzc2LDQwMzc4LDQwMzkwLDQwMzk5LDQwMzg2LDQwNDA5LDQwNDAzLDQwNDQwLDQwNDIyLDQwNDI5LDQwNDMxLDQwNDQ1LDQwNDc0LDQwNDc1LDQwNDc4LDQwNTY1LDQwNTY5LDQwNTczLDQwNTc3LDQwNTg0LDQw''@;'; put 'put ''NTg3LDQwNTg4LDQwNTk0LDQwNTk3LDQwNTkzLDQwNjA1LDQwNjEzLDQwNjE3LDQwNjMyLDQwNjE4LDQwNjIxLDM4NzUzLDQwNjUyLDQwNjU0LDQwNjU1LDQwNjU2LDQwNjYwLDQwNjY4LDQwNjcwLDQwNjY5LDQwNjcyLDQwNjc3LDQwNjgwLDQwNjg3LDQwNjkyLDQwNjk0LDQwNjk1LDQwNjk3''@;'; put 'put ''LDQwNjk5LDQwNzAwLDQwNzAxLDQwNzExLDQwNzEyLDMwMzkxLDQwNzI1LDQwNzM3LDQwNzQ4LDQwNzY2LDQwNzc4LDQwNzg2LDQwNzg4LDQwODAzLDQwNzk5LDQwODAwLDQwODAxLDQwODA2LDQwODA3LDQwODEyLDQwODEwLDQwODIzLDQwODE4LDQwODIyLDQwODUzLDQwODYwLDQwODY0LDIy''@;'; put 'put ''NTc1LDI3MDc5LDM2OTUzLDI5Nzk2LDIwOTU2LDI5MDgxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMjM5NCwzNTEwMCwzNzcwNCwzNzUxMiwzNDAxMiwyMDQyNSwyODg1OSwyNjE2MSwyNjgyNCwzNzYyNSwyNjM2MywyNDM4OSwyMDAwOCwyMDE5MywyMDIyMCwyMDIyNCwyMDIyNywyMDI4MSwyMDMxMCwyMDM3MCwy''@;'; put 'put ''MDM2MiwyMDM3OCwyMDM3MiwyMDQyOSwyMDU0NCwyMDUxNCwyMDQ3OSwyMDUxMCwyMDU1MCwyMDU5MiwyMDU0NiwyMDYyOCwyMDcyNCwyMDY5NiwyMDgxMCwyMDgzNiwyMDg5MywyMDkyNiwyMDk3MiwyMTAxMywyMTE0OCwyMTE1OCwyMTE4NCwyMTIxMSwyMTI0OCwyMTI1NSwyMTI4NCwyMTM2''@;'; put 'put ''MiwyMTM5NSwyMTQyNiwyMTQ2OSw2NDAxNCwyMTY2MCwyMTY0MiwyMTY3MywyMTc1OSwyMTg5NCwyMjM2MSwyMjM3MywyMjQ0NCwyMjQ3MiwyMjQ3MSw2NDAxNSw2NDAxNiwyMjY4NiwyMjcwNiwyMjc5NSwyMjg2NywyMjg3NSwyMjg3NywyMjg4MywyMjk0OCwyMjk3MCwyMzM4MiwyMzQ4OCwy''@;'; put 'put ''OTk5OSwyMzUxMiwyMzUzMiwyMzU4MiwyMzcxOCwyMzczOCwyMzc5NywyMzg0NywyMzg5MSw2NDAxNywyMzg3NCwyMzkxNywyMzk5MiwyMzk5MywyNDAxNiwyNDM1MywyNDM3MiwyNDQyMywyNDUwMywyNDU0MiwyNDY2OSwyNDcwOSwyNDcxNCwyNDc5OCwyNDc4OSwyNDg2NCwyNDgxOCwyNDg0''@;'; put 'put ''OSwyNDg4NywyNDg4MCwyNDk4NCwyNTEwNywyNTI1NCwyNTU4OSwyNTY5NiwyNTc1NywyNTgwNiwyNTkzNCwyNjExMiwyNjEzMywyNjE3MSwyNjEyMSwyNjE1OCwyNjE0MiwyNjE0OCwyNjIxMywyNjE5OSwyNjIwMSw2NDAxOCwyNjIyNywyNjI2NSwyNjI3MiwyNjI5MCwyNjMwMywyNjM2Miwy''@;'; put 'put ''NjM4Miw2Mzc4NSwyNjQ3MCwyNjU1NSwyNjcwNiwyNjU2MCwyNjYyNSwyNjY5MiwyNjgzMSw2NDAxOSwyNjk4NCw2NDAyMCwyNzAzMiwyNzEwNiwyNzE4NCwyNzI0MywyNzIwNiwyNzI1MSwyNzI2MiwyNzM2MiwyNzM2NCwyNzYwNiwyNzcxMSwyNzc0MCwyNzc4MiwyNzc1OSwyNzg2NiwyNzkw''@;'; put 'put ''OCwyODAzOSwyODAxNSwyODA1NCwyODA3NiwyODExMSwyODE1MiwyODE0NiwyODE1NiwyODIxNywyODI1MiwyODE5OSwyODIyMCwyODM1MSwyODU1MiwyODU5NywyODY2MSwyODY3NywyODY3OSwyODcxMiwyODgwNSwyODg0MywyODk0MywyODkzMiwyOTAyMCwyODk5OCwyODk5OSw2NDAyMSwy''@;'; put 'put ''OTEyMSwyOTE4MiwyOTM2MSwyOTM3NCwyOTQ3Niw2NDAyMiwyOTU1OSwyOTYyOSwyOTY0MSwyOTY1NCwyOTY2NywyOTY1MCwyOTcwMywyOTY4NSwyOTczNCwyOTczOCwyOTczNywyOTc0MiwyOTc5NCwyOTgzMywyOTg1NSwyOTk1MywzMDA2MywzMDMzOCwzMDM2NCwzMDM2NiwzMDM2MywzMDM3''@;'; put 'put ''NCw2NDAyMywzMDUzNCwyMTE2NywzMDc1MywzMDc5OCwzMDgyMCwzMDg0MiwzMTAyNCw2NDAyNCw2NDAyNSw2NDAyNiwzMTEyNCw2NDAyNywzMTEzMSwzMTQ0MSwzMTQ2Myw2NDAyOCwzMTQ2NywzMTY0Niw2NDAyOSwzMjA3MiwzMjA5MiwzMjE4MywzMjE2MCwzMjIxNCwzMjMzOCwzMjU4Mywz''@;'; put 'put ''MjY3Myw2NDAzMCwzMzUzNywzMzYzNCwzMzY2MywzMzczNSwzMzc4MiwzMzg2NCwzMzk3MiwzNDEzMSwzNDEzNywzNDE1NSw2NDAzMSwzNDIyNCw2NDAzMiw2NDAzMywzNDgyMywzNTA2MSwzNTM0NiwzNTM4MywzNTQ0OSwzNTQ5NSwzNTUxOCwzNTU1MSw2NDAzNCwzNTU3NCwzNTY2NywzNTcx''@;'; put 'put ''MSwzNjA4MCwzNjA4NCwzNjExNCwzNjIxNCw2NDAzNSwzNjU1OSw2NDAzNiw2NDAzNywzNjk2NywzNzA4Niw2NDAzOCwzNzE0MSwzNzE1OSwzNzMzOCwzNzMzNSwzNzM0MiwzNzM1NywzNzM1OCwzNzM0OCwzNzM0OSwzNzM4MiwzNzM5MiwzNzM4NiwzNzQzNCwzNzQ0MCwzNzQzNiwzNzQ1NCwz''@;'; put 'put ''NzQ2NSwzNzQ1NywzNzQzMywzNzQ3OSwzNzU0MywzNzQ5NSwzNzQ5NiwzNzYwNywzNzU5MSwzNzU5MywzNzU4NCw2NDAzOSwzNzU4OSwzNzYwMCwzNzU4NywzNzY2OSwzNzY2NSwzNzYyNyw2NDA0MCwzNzY2MiwzNzYzMSwzNzY2MSwzNzYzNCwzNzc0NCwzNzcxOSwzNzc5NiwzNzgzMCwzNzg1''@;'; put 'put ''NCwzNzg4MCwzNzkzNywzNzk1NywzNzk2MCwzODI5MCw2Mzk2NCw2NDA0MSwzODU1NywzODU3NSwzODcwNywzODcxNSwzODcyMywzODczMywzODczNSwzODczNywzODc0MSwzODk5OSwzOTAxMyw2NDA0Miw2NDA0MywzOTIwNyw2NDA0NCwzOTMyNiwzOTUwMiwzOTY0MSwzOTY0NCwzOTc5Nywz''@;'; put 'put ''OTc5NCwzOTgyMywzOTg1NywzOTg2NywzOTkzNiw0MDMwNCw0MDI5OSw2NDA0NSw0MDQ3Myw0MDY1NyxudWxsLG51bGwsODU2MCw4NTYxLDg1NjIsODU2Myw4NTY0LDg1NjUsODU2Niw4NTY3LDg1NjgsODU2OSw2NTUwNiw2NTUwOCw2NTI4Nyw2NTI4MixudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDg1NjAsODU2MSw4NTYyLDg1NjMsODU2NCw4NTY1LDg1NjYsODU2Nyw4NTY4LDg1NjksODU0NCw4NTQ1LDg1NDYsODU0Nyw4NTQ4LDg1''@;'; put 'put ''NDksODU1MCw4NTUxLDg1NTIsODU1Myw2NTUwNiw2NTUwOCw2NTI4Nyw2NTI4MiwxMjg0OSw4NDcwLDg0ODEsODc1NywzMjM5NCwzNTEwMCwzNzcwNCwzNzUxMiwzNDAxMiwyMDQyNSwyODg1OSwyNjE2MSwyNjgyNCwzNzYyNSwyNjM2MywyNDM4OSwyMDAwOCwyMDE5MywyMDIyMCwyMDIyNCwy''@;'; put 'put ''MDIyNywyMDI4MSwyMDMxMCwyMDM3MCwyMDM2MiwyMDM3OCwyMDM3MiwyMDQyOSwyMDU0NCwyMDUxNCwyMDQ3OSwyMDUxMCwyMDU1MCwyMDU5MiwyMDU0NiwyMDYyOCwyMDcyNCwyMDY5NiwyMDgxMCwyMDgzNiwyMDg5MywyMDkyNiwyMDk3MiwyMTAxMywyMTE0OCwyMTE1OCwyMTE4NCwyMTIx''@;'; put 'put ''MSwyMTI0OCwyMTI1NSwyMTI4NCwyMTM2MiwyMTM5NSwyMTQyNiwyMTQ2OSw2NDAxNCwyMTY2MCwyMTY0MiwyMTY3MywyMTc1OSwyMTg5NCwyMjM2MSwyMjM3MywyMjQ0NCwyMjQ3MiwyMjQ3MSw2NDAxNSw2NDAxNiwyMjY4NiwyMjcwNiwyMjc5NSwyMjg2NywyMjg3NSwyMjg3NywyMjg4Mywy''@;'; put 'put ''Mjk0OCwyMjk3MCwyMzM4MiwyMzQ4OCwyOTk5OSwyMzUxMiwyMzUzMiwyMzU4MiwyMzcxOCwyMzczOCwyMzc5NywyMzg0NywyMzg5MSw2NDAxNywyMzg3NCwyMzkxNywyMzk5MiwyMzk5MywyNDAxNiwyNDM1MywyNDM3MiwyNDQyMywyNDUwMywyNDU0MiwyNDY2OSwyNDcwOSwyNDcxNCwyNDc5''@;'; put 'put ''OCwyNDc4OSwyNDg2NCwyNDgxOCwyNDg0OSwyNDg4NywyNDg4MCwyNDk4NCwyNTEwNywyNTI1NCwyNTU4OSwyNTY5NiwyNTc1NywyNTgwNiwyNTkzNCwyNjExMiwyNjEzMywyNjE3MSwyNjEyMSwyNjE1OCwyNjE0MiwyNjE0OCwyNjIxMywyNjE5OSwyNjIwMSw2NDAxOCwyNjIyNywyNjI2NSwy''@;'; put 'put ''NjI3MiwyNjI5MCwyNjMwMywyNjM2MiwyNjM4Miw2Mzc4NSwyNjQ3MCwyNjU1NSwyNjcwNiwyNjU2MCwyNjYyNSwyNjY5MiwyNjgzMSw2NDAxOSwyNjk4NCw2NDAyMCwyNzAzMiwyNzEwNiwyNzE4NCwyNzI0MywyNzIwNiwyNzI1MSwyNzI2MiwyNzM2MiwyNzM2NCwyNzYwNiwyNzcxMSwyNzc0''@;'; put 'put ''MCwyNzc4MiwyNzc1OSwyNzg2NiwyNzkwOCwyODAzOSwyODAxNSwyODA1NCwyODA3NiwyODExMSwyODE1MiwyODE0NiwyODE1NiwyODIxNywyODI1MiwyODE5OSwyODIyMCwyODM1MSwyODU1MiwyODU5NywyODY2MSwyODY3NywyODY3OSwyODcxMiwyODgwNSwyODg0MywyODk0MywyODkzMiwy''@;'; put 'put ''OTAyMCwyODk5OCwyODk5OSw2NDAyMSwyOTEyMSwyOTE4MiwyOTM2MSwyOTM3NCwyOTQ3Niw2NDAyMiwyOTU1OSwyOTYyOSwyOTY0MSwyOTY1NCwyOTY2NywyOTY1MCwyOTcwMywyOTY4NSwyOTczNCwyOTczOCwyOTczNywyOTc0MiwyOTc5NCwyOTgzMywyOTg1NSwyOTk1MywzMDA2MywzMDMz''@;'; put 'put ''OCwzMDM2NCwzMDM2NiwzMDM2MywzMDM3NCw2NDAyMywzMDUzNCwyMTE2NywzMDc1MywzMDc5OCwzMDgyMCwzMDg0MiwzMTAyNCw2NDAyNCw2NDAyNSw2NDAyNiwzMTEyNCw2NDAyNywzMTEzMSwzMTQ0MSwzMTQ2Myw2NDAyOCwzMTQ2NywzMTY0Niw2NDAyOSwzMjA3MiwzMjA5MiwzMjE4Mywz''@;'; put 'put ''MjE2MCwzMjIxNCwzMjMzOCwzMjU4MywzMjY3Myw2NDAzMCwzMzUzNywzMzYzNCwzMzY2MywzMzczNSwzMzc4MiwzMzg2NCwzMzk3MiwzNDEzMSwzNDEzNywzNDE1NSw2NDAzMSwzNDIyNCw2NDAzMiw2NDAzMywzNDgyMywzNTA2MSwzNTM0NiwzNTM4MywzNTQ0OSwzNTQ5NSwzNTUxOCwzNTU1''@;'; put 'put ''MSw2NDAzNCwzNTU3NCwzNTY2NywzNTcxMSwzNjA4MCwzNjA4NCwzNjExNCwzNjIxNCw2NDAzNSwzNjU1OSw2NDAzNiw2NDAzNywzNjk2NywzNzA4Niw2NDAzOCwzNzE0MSwzNzE1OSwzNzMzOCwzNzMzNSwzNzM0MiwzNzM1NywzNzM1OCwzNzM0OCwzNzM0OSwzNzM4MiwzNzM5MiwzNzM4Niwz''@;'; put 'put ''NzQzNCwzNzQ0MCwzNzQzNiwzNzQ1NCwzNzQ2NSwzNzQ1NywzNzQzMywzNzQ3OSwzNzU0MywzNzQ5NSwzNzQ5NiwzNzYwNywzNzU5MSwzNzU5MywzNzU4NCw2NDAzOSwzNzU4OSwzNzYwMCwzNzU4NywzNzY2OSwzNzY2NSwzNzYyNyw2NDA0MCwzNzY2MiwzNzYzMSwzNzY2MSwzNzYzNCwzNzc0''@;'; put 'put ''NCwzNzcxOSwzNzc5NiwzNzgzMCwzNzg1NCwzNzg4MCwzNzkzNywzNzk1NywzNzk2MCwzODI5MCw2Mzk2NCw2NDA0MSwzODU1NywzODU3NSwzODcwNywzODcxNSwzODcyMywzODczMywzODczNSwzODczNywzODc0MSwzODk5OSwzOTAxMyw2NDA0Miw2NDA0MywzOTIwNyw2NDA0NCwzOTMyNiwz''@;'; put 'put ''OTUwMiwzOTY0MSwzOTY0NCwzOTc5NywzOTc5NCwzOTgyMywzOTg1NywzOTg2NywzOTkzNiw0MDMwNCw0MDI5OSw2NDA0NSw0MDQ3Myw0MDY1NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLGppczAyMTI6W251bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDcyOCw3MTEsMTg0LDcyOSw3MzMsMTc1LDczMSw3MzAsNjUzNzQsOTAwLDkwMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTYxLDE2NiwxOTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE4NiwxNzAsMTY5LDE3''@;'; put 'put ''NCw4NDgyLDE2NCw4NDcwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5MDIs''@;'; put 'put ''OTA0LDkwNSw5MDYsOTM4LG51bGwsOTA4LG51bGwsOTEwLDkzOSxudWxsLDkxMSxudWxsLG51bGwsbnVsbCxudWxsLDk0MCw5NDEsOTQyLDk0Myw5NzAsOTEyLDk3Miw5NjIsOTczLDk3MSw5NDQsOTc0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMDI2LDEwMjcsMTAyOCwxMDI5LDEwMzAsMTAzMSwxMDMyLDEwMzMs''@;'; put 'put ''MTAzNCwxMDM1LDEwMzYsMTAzOCwxMDM5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMTA2LDExMDcsMTEwOCwxMTA5LDExMTAsMTExMSwxMTEyLDExMTMsMTExNCwxMTE1LDExMTYsMTExOCwxMTE5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTk4LDI3MixudWxsLDI5NCxudWxsLDMwNixudWxsLDMyMSwzMTksbnVsbCwzMzAsMjE2LDMzOCxudWxsLDM1OCwyMjIsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMzAsMjczLDI0MCwyOTUsMzA1LDMwNywzMTIsMzIyLDMyMCwzMjksMzMxLDI0OCwzMzksMjIzLDM1OSwyNTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxOTMsMTkyLDE5NiwxOTQsMjU4LDQ2MSwyNTYsMjYwLDE5NywxOTUsMjYyLDI2NCwyNjgsMTk5LDI2NiwyNzAsMjAxLDIwMCwyMDMsMjAyLDI4MiwyNzgsMjc0LDI4MCxudWxsLDI4NCwyODYsMjkwLDI4OCwyOTIsMjA1LDIwNCwyMDcsMjA2LDQ2Mywz''@;'; put 'put ''MDQsMjk4LDMwMiwyOTYsMzA4LDMxMCwzMTMsMzE3LDMxNSwzMjMsMzI3LDMyNSwyMDksMjExLDIxMCwyMTQsMjEyLDQ2NSwzMzYsMzMyLDIxMywzNDAsMzQ0LDM0MiwzNDYsMzQ4LDM1MiwzNTAsMzU2LDM1NCwyMTgsMjE3LDIyMCwyMTksMzY0LDQ2NywzNjgsMzYyLDM3MCwzNjYsMzYwLDQ3''@;'; put 'put ''MSw0NzUsNDczLDQ2OSwzNzIsMjIxLDM3NiwzNzQsMzc3LDM4MSwzNzksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMjUsMjI0LDIyOCwyMjYsMjU5LDQ2MiwyNTcsMjYxLDIyOSwyMjcsMjYzLDI2NSwyNjksMjMxLDI2NywyNzEsMjMzLDIzMiwyMzUsMjM0LDI4MywyNzks''@;'; put 'put ''Mjc1LDI4MSw1MDEsMjg1LDI4NyxudWxsLDI4OSwyOTMsMjM3LDIzNiwyMzksMjM4LDQ2NCxudWxsLDI5OSwzMDMsMjk3LDMwOSwzMTEsMzE0LDMxOCwzMTYsMzI0LDMyOCwzMjYsMjQxLDI0MywyNDIsMjQ2LDI0NCw0NjYsMzM3LDMzMywyNDUsMzQxLDM0NSwzNDMsMzQ3LDM0OSwzNTMsMzUx''@;'; put 'put ''LDM1NywzNTUsMjUwLDI0OSwyNTIsMjUxLDM2NSw0NjgsMzY5LDM2MywzNzEsMzY3LDM2MSw0NzIsNDc2LDQ3NCw0NzAsMzczLDI1MywyNTUsMzc1LDM3OCwzODIsMzgwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxOTk3MCwxOTk3MiwxOTk3MywxOTk4MCwxOTk4NiwxOTk5OSwyMDAwMywyMDAwNCwyMDAwOCwyMDAxMSwyMDAxNCwyMDAxNSwyMDAxNiwyMDAyMSwyMDAzMiwyMDAzMywyMDAzNiwyMDAzOSwyMDA0OSwyMDA1OCwyMDA2MCwyMDA2Nywy''@;'; put 'put ''MDA3MiwyMDA3MywyMDA4NCwyMDA4NSwyMDA4OSwyMDA5NSwyMDEwOSwyMDExOCwyMDExOSwyMDEyNSwyMDE0MywyMDE1MywyMDE2MywyMDE3NiwyMDE4NiwyMDE4NywyMDE5MiwyMDE5MywyMDE5NCwyMDIwMCwyMDIwNywyMDIwOSwyMDIxMSwyMDIxMywyMDIyMSwyMDIyMiwyMDIyMywyMDIy''@;'; put 'put ''NCwyMDIyNiwyMDIyNywyMDIzMiwyMDIzNSwyMDIzNiwyMDI0MiwyMDI0NSwyMDI0NiwyMDI0NywyMDI0OSwyMDI3MCwyMDI3MywyMDMyMCwyMDI3NSwyMDI3NywyMDI3OSwyMDI4MSwyMDI4MywyMDI4NiwyMDI4OCwyMDI5MCwyMDI5NiwyMDI5NywyMDI5OSwyMDMwMCwyMDMwNiwyMDMwOCwy''@;'; put 'put ''MDMxMCwyMDMxMiwyMDMxOSwyMDMyMywyMDMzMCwyMDMzMiwyMDMzNCwyMDMzNywyMDM0MywyMDM0NCwyMDM0NSwyMDM0NiwyMDM0OSwyMDM1MCwyMDM1MywyMDM1NCwyMDM1NiwyMDM1NywyMDM2MSwyMDM2MiwyMDM2NCwyMDM2NiwyMDM2OCwyMDM3MCwyMDM3MSwyMDM3MiwyMDM3NSwyMDM3''@;'; put 'put ''NywyMDM3OCwyMDM4MiwyMDM4MywyMDQwMiwyMDQwNywyMDQwOSwyMDQxMSwyMDQxMiwyMDQxMywyMDQxNCwyMDQxNiwyMDQxNywyMDQyMSwyMDQyMiwyMDQyNCwyMDQyNSwyMDQyNywyMDQyOCwyMDQyOSwyMDQzMSwyMDQzNCwyMDQ0NCwyMDQ0OCwyMDQ1MCwyMDQ2NCwyMDQ2NiwyMDQ3Niwy''@;'; put 'put ''MDQ3NywyMDQ3OSwyMDQ4MCwyMDQ4MSwyMDQ4NCwyMDQ4NywyMDQ5MCwyMDQ5MiwyMDQ5NCwyMDQ5NiwyMDQ5OSwyMDUwMywyMDUwNCwyMDUwNywyMDUwOCwyMDUwOSwyMDUxMCwyMDUxNCwyMDUxOSwyMDUyNiwyMDUyOCwyMDUzMCwyMDUzMSwyMDUzMywyMDU0NCwyMDU0NSwyMDU0NiwyMDU0''@;'; put 'put ''OSwyMDU1MCwyMDU1NCwyMDU1NiwyMDU1OCwyMDU2MSwyMDU2MiwyMDU2MywyMDU2NywyMDU2OSwyMDU3NSwyMDU3NiwyMDU3OCwyMDU3OSwyMDU4MiwyMDU4MywyMDU4NiwyMDU4OSwyMDU5MiwyMDU5MywyMDUzOSwyMDYwOSwyMDYxMSwyMDYxMiwyMDYxNCwyMDYxOCwyMDYyMiwyMDYyMywy''@;'; put 'put ''MDYyNCwyMDYyNiwyMDYyNywyMDYyOCwyMDYzMCwyMDYzNSwyMDYzNiwyMDYzOCwyMDYzOSwyMDY0MCwyMDY0MSwyMDY0MiwyMDY1MCwyMDY1NSwyMDY1NiwyMDY2NSwyMDY2NiwyMDY2OSwyMDY3MiwyMDY3NSwyMDY3NiwyMDY3OSwyMDY4NCwyMDY4NiwyMDY4OCwyMDY5MSwyMDY5MiwyMDY5''@;'; put 'put ''NiwyMDcwMCwyMDcwMSwyMDcwMywyMDcwNiwyMDcwOCwyMDcxMCwyMDcxMiwyMDcxMywyMDcxOSwyMDcyMSwyMDcyNiwyMDczMCwyMDczNCwyMDczOSwyMDc0MiwyMDc0MywyMDc0NCwyMDc0NywyMDc0OCwyMDc0OSwyMDc1MCwyMDcyMiwyMDc1MiwyMDc1OSwyMDc2MSwyMDc2MywyMDc2NCwy''@;'; put 'put ''MDc2NSwyMDc2NiwyMDc3MSwyMDc3NSwyMDc3NiwyMDc4MCwyMDc4MSwyMDc4MywyMDc4NSwyMDc4NywyMDc4OCwyMDc4OSwyMDc5MiwyMDc5MywyMDgwMiwyMDgxMCwyMDgxNSwyMDgxOSwyMDgyMSwyMDgyMywyMDgyNCwyMDgzMSwyMDgzNiwyMDgzOCwyMDg2MiwyMDg2NywyMDg2OCwyMDg3''@;'; put 'put ''NSwyMDg3OCwyMDg4OCwyMDg5MywyMDg5NywyMDg5OSwyMDkwOSwyMDkyMCwyMDkyMiwyMDkyNCwyMDkyNiwyMDkyNywyMDkzMCwyMDkzNiwyMDk0MywyMDk0NSwyMDk0NiwyMDk0NywyMDk0OSwyMDk1MiwyMDk1OCwyMDk2MiwyMDk2NSwyMDk3NCwyMDk3OCwyMDk3OSwyMDk4MCwyMDk4Mywy''@;'; put 'put ''MDk5MywyMDk5NCwyMDk5NywyMTAxMCwyMTAxMSwyMTAxMywyMTAxNCwyMTAxNiwyMTAyNiwyMTAzMiwyMTA0MSwyMTA0MiwyMTA0NSwyMTA1MiwyMTA2MSwyMTA2NSwyMTA3NywyMTA3OSwyMTA4MCwyMTA4MiwyMTA4NCwyMTA4NywyMTA4OCwyMTA4OSwyMTA5NCwyMTEwMiwyMTExMSwyMTEx''@;'; put 'put ''MiwyMTExMywyMTEyMCwyMTEyMiwyMTEyNSwyMTEzMCwyMTEzMiwyMTEzOSwyMTE0MSwyMTE0MiwyMTE0MywyMTE0NCwyMTE0NiwyMTE0OCwyMTE1NiwyMTE1NywyMTE1OCwyMTE1OSwyMTE2NywyMTE2OCwyMTE3NCwyMTE3NSwyMTE3NiwyMTE3OCwyMTE3OSwyMTE4MSwyMTE4NCwyMTE4OCwy''@;'; put 'put ''MTE5MCwyMTE5MiwyMTE5NiwyMTE5OSwyMTIwMSwyMTIwNCwyMTIwNiwyMTIxMSwyMTIxMiwyMTIxNywyMTIyMSwyMTIyNCwyMTIyNSwyMTIyNiwyMTIyOCwyMTIzMiwyMTIzMywyMTIzNiwyMTIzOCwyMTIzOSwyMTI0OCwyMTI1MSwyMTI1OCwyMTI1OSwyMTI2MCwyMTI2NSwyMTI2NywyMTI3''@;'; put 'put ''MiwyMTI3NSwyMTI3NiwyMTI3OCwyMTI3OSwyMTI4NSwyMTI4NywyMTI4OCwyMTI4OSwyMTI5MSwyMTI5MiwyMTI5MywyMTI5NiwyMTI5OCwyMTMwMSwyMTMwOCwyMTMwOSwyMTMxMCwyMTMxNCwyMTMyNCwyMTMyMywyMTMzNywyMTMzOSwyMTM0NSwyMTM0NywyMTM0OSwyMTM1NiwyMTM1Nywy''@;'; put 'put ''MTM2MiwyMTM2OSwyMTM3NCwyMTM3OSwyMTM4MywyMTM4NCwyMTM5MCwyMTM5NSwyMTM5NiwyMTQwMSwyMTQwNSwyMTQwOSwyMTQxMiwyMTQxOCwyMTQxOSwyMTQyMywyMTQyNiwyMTQyOCwyMTQyOSwyMTQzMSwyMTQzMiwyMTQzNCwyMTQzNywyMTQ0MCwyMTQ0NSwyMTQ1NSwyMTQ1OCwyMTQ1''@;'; put 'put ''OSwyMTQ2MSwyMTQ2NiwyMTQ2OSwyMTQ3MCwyMTQ3MiwyMTQ3OCwyMTQ3OSwyMTQ5MywyMTUwNiwyMTUyMywyMTUzMCwyMTUzNywyMTU0MywyMTU0NCwyMTU0NiwyMTU1MSwyMTU1MywyMTU1NiwyMTU1NywyMTU3MSwyMTU3MiwyMTU3NSwyMTU4MSwyMTU4MywyMTU5OCwyMTYwMiwyMTYwNCwy''@;'; put 'put ''MTYwNiwyMTYwNywyMTYwOSwyMTYxMSwyMTYxMywyMTYxNCwyMTYyMCwyMTYzMSwyMTYzMywyMTYzNSwyMTYzNywyMTY0MCwyMTY0MSwyMTY0NSwyMTY0OSwyMTY1MywyMTY1NCwyMTY2MCwyMTY2MywyMTY2NSwyMTY3MCwyMTY3MSwyMTY3MywyMTY3NCwyMTY3NywyMTY3OCwyMTY4MSwyMTY4''@;'; put 'put ''NywyMTY4OSwyMTY5MCwyMTY5MSwyMTY5NSwyMTcwMiwyMTcwNiwyMTcwOSwyMTcxMCwyMTcyOCwyMTczOCwyMTc0MCwyMTc0MywyMTc1MCwyMTc1NiwyMTc1OCwyMTc1OSwyMTc2MCwyMTc2MSwyMTc2NSwyMTc2OCwyMTc2OSwyMTc3MiwyMTc3MywyMTc3NCwyMTc4MSwyMTgwMiwyMTgwMywy''@;'; put 'put ''MTgxMCwyMTgxMywyMTgxNCwyMTgxOSwyMTgyMCwyMTgyMSwyMTgyNSwyMTgzMSwyMTgzMywyMTgzNCwyMTgzNywyMTg0MCwyMTg0MSwyMTg0OCwyMTg1MCwyMTg1MSwyMTg1NCwyMTg1NiwyMTg1NywyMTg2MCwyMTg2MiwyMTg4NywyMTg4OSwyMTg5MCwyMTg5NCwyMTg5NiwyMTkwMiwyMTkw''@;'; put 'put ''MywyMTkwNSwyMTkwNiwyMTkwNywyMTkwOCwyMTkxMSwyMTkyMywyMTkyNCwyMTkzMywyMTkzOCwyMTk1MSwyMTk1MywyMTk1NSwyMTk1OCwyMTk2MSwyMTk2MywyMTk2NCwyMTk2NiwyMTk2OSwyMTk3MCwyMTk3MSwyMTk3NSwyMTk3NiwyMTk3OSwyMTk4MiwyMTk4NiwyMTk5MywyMjAwNiwy''@;'; put 'put ''MjAxNSwyMjAyMSwyMjAyNCwyMjAyNiwyMjAyOSwyMjAzMCwyMjAzMSwyMjAzMiwyMjAzMywyMjAzNCwyMjA0MSwyMjA2MCwyMjA2NCwyMjA2NywyMjA2OSwyMjA3MSwyMjA3MywyMjA3NSwyMjA3NiwyMjA3NywyMjA3OSwyMjA4MCwyMjA4MSwyMjA4MywyMjA4NCwyMjA4NiwyMjA4OSwyMjA5''@;'; put 'put ''MSwyMjA5MywyMjA5NSwyMjEwMCwyMjExMCwyMjExMiwyMjExMywyMjExNCwyMjExNSwyMjExOCwyMjEyMSwyMjEyNSwyMjEyNywyMjEyOSwyMjEzMCwyMjEzMywyMjE0OCwyMjE0OSwyMjE1MiwyMjE1NSwyMjE1NiwyMjE2NSwyMjE2OSwyMjE3MCwyMjE3MywyMjE3NCwyMjE3NSwyMjE4Miwy''@;'; put 'put ''MjE4MywyMjE4NCwyMjE4NSwyMjE4NywyMjE4OCwyMjE4OSwyMjE5MywyMjE5NSwyMjE5OSwyMjIwNiwyMjIxMywyMjIxNywyMjIxOCwyMjIxOSwyMjIyMywyMjIyNCwyMjIyMCwyMjIyMSwyMjIzMywyMjIzNiwyMjIzNywyMjIzOSwyMjI0MSwyMjI0NCwyMjI0NSwyMjI0NiwyMjI0NywyMjI0''@;'; put 'put ''OCwyMjI1NywyMjI1MSwyMjI1MywyMjI2MiwyMjI2MywyMjI3MywyMjI3NCwyMjI3OSwyMjI4MiwyMjI4NCwyMjI4OSwyMjI5MywyMjI5OCwyMjI5OSwyMjMwMSwyMjMwNCwyMjMwNiwyMjMwNywyMjMwOCwyMjMwOSwyMjMxMywyMjMxNCwyMjMxNiwyMjMxOCwyMjMxOSwyMjMyMywyMjMyNCwy''@;'; put 'put ''MjMzMywyMjMzNCwyMjMzNSwyMjM0MSwyMjM0MiwyMjM0OCwyMjM0OSwyMjM1NCwyMjM3MCwyMjM3MywyMjM3NSwyMjM3NiwyMjM3OSwyMjM4MSwyMjM4MiwyMjM4MywyMjM4NCwyMjM4NSwyMjM4NywyMjM4OCwyMjM4OSwyMjM5MSwyMjM5MywyMjM5NCwyMjM5NSwyMjM5NiwyMjM5OCwyMjQw''@;'; put 'put ''MSwyMjQwMywyMjQxMiwyMjQyMCwyMjQyMywyMjQyNSwyMjQyNiwyMjQyOCwyMjQyOSwyMjQzMCwyMjQzMSwyMjQzMywyMjQyMSwyMjQzOSwyMjQ0MCwyMjQ0MSwyMjQ0NCwyMjQ1NiwyMjQ2MSwyMjQ3MSwyMjQ3MiwyMjQ3NiwyMjQ3OSwyMjQ4NSwyMjQ5MywyMjQ5NCwyMjUwMCwyMjUwMiwy''@;'; put 'put ''MjUwMywyMjUwNSwyMjUwOSwyMjUxMiwyMjUxNywyMjUxOCwyMjUyMCwyMjUyNSwyMjUyNiwyMjUyNywyMjUzMSwyMjUzMiwyMjUzNiwyMjUzNywyMjQ5NywyMjU0MCwyMjU0MSwyMjU1NSwyMjU1OCwyMjU1OSwyMjU2MCwyMjU2NiwyMjU2NywyMjU3MywyMjU3OCwyMjU4NSwyMjU5MSwyMjYw''@;'; put 'put ''MSwyMjYwNCwyMjYwNSwyMjYwNywyMjYwOCwyMjYxMywyMjYyMywyMjYyNSwyMjYyOCwyMjYzMSwyMjYzMiwyMjY0OCwyMjY1MiwyMjY1NSwyMjY1NiwyMjY1NywyMjY2MywyMjY2NCwyMjY2NSwyMjY2NiwyMjY2OCwyMjY2OSwyMjY3MSwyMjY3MiwyMjY3NiwyMjY3OCwyMjY4NSwyMjY4OCwy''@;'; put 'put ''MjY4OSwyMjY5MCwyMjY5NCwyMjY5NywyMjcwNSwyMjcwNiwyMjcyNCwyMjcxNiwyMjcyMiwyMjcyOCwyMjczMywyMjczNCwyMjczNiwyMjczOCwyMjc0MCwyMjc0MiwyMjc0NiwyMjc0OSwyMjc1MywyMjc1NCwyMjc2MSwyMjc3MSwyMjc4OSwyMjc5MCwyMjc5NSwyMjc5NiwyMjgwMiwyMjgw''@;'; put 'put ''MywyMjgwNCwzNDM2OSwyMjgxMywyMjgxNywyMjgxOSwyMjgyMCwyMjgyNCwyMjgzMSwyMjgzMiwyMjgzNSwyMjgzNywyMjgzOCwyMjg0NywyMjg1MSwyMjg1NCwyMjg2NiwyMjg2NywyMjg3MywyMjg3NSwyMjg3NywyMjg3OCwyMjg3OSwyMjg4MSwyMjg4MywyMjg5MSwyMjg5MywyMjg5NSwy''@;'; put 'put ''Mjg5OCwyMjkwMSwyMjkwMiwyMjkwNSwyMjkwNywyMjkwOCwyMjkyMywyMjkyNCwyMjkyNiwyMjkzMCwyMjkzMywyMjkzNSwyMjk0MywyMjk0OCwyMjk1MSwyMjk1NywyMjk1OCwyMjk1OSwyMjk2MCwyMjk2MywyMjk2NywyMjk3MCwyMjk3MiwyMjk3NywyMjk3OSwyMjk4MCwyMjk4NCwyMjk4''@;'; put 'put ''NiwyMjk4OSwyMjk5NCwyMzAwNSwyMzAwNiwyMzAwNywyMzAxMSwyMzAxMiwyMzAxNSwyMzAyMiwyMzAyMywyMzAyNSwyMzAyNiwyMzAyOCwyMzAzMSwyMzA0MCwyMzA0NCwyMzA1MiwyMzA1MywyMzA1NCwyMzA1OCwyMzA1OSwyMzA3MCwyMzA3NSwyMzA3NiwyMzA3OSwyMzA4MCwyMzA4Miwy''@;'; put 'put ''MzA4NSwyMzA4OCwyMzEwOCwyMzEwOSwyMzExMSwyMzExMiwyMzExNiwyMzEyMCwyMzEyNSwyMzEzNCwyMzEzOSwyMzE0MSwyMzE0MywyMzE0OSwyMzE1OSwyMzE2MiwyMzE2MywyMzE2NiwyMzE3OSwyMzE4NCwyMzE4NywyMzE5MCwyMzE5MywyMzE5NiwyMzE5OCwyMzE5OSwyMzIwMCwyMzIw''@;'; put 'put ''MiwyMzIwNywyMzIxMiwyMzIxNywyMzIxOCwyMzIxOSwyMzIyMSwyMzIyNCwyMzIyNiwyMzIyNywyMzIzMSwyMzIzNiwyMzIzOCwyMzI0MCwyMzI0NywyMzI1OCwyMzI2MCwyMzI2NCwyMzI2OSwyMzI3NCwyMzI3OCwyMzI4NSwyMzI4NiwyMzI5MywyMzI5NiwyMzI5NywyMzMwNCwyMzMxOSwy''@;'; put 'put ''MzM0OCwyMzMyMSwyMzMyMywyMzMyNSwyMzMyOSwyMzMzMywyMzM0MSwyMzM1MiwyMzM2MSwyMzM3MSwyMzM3MiwyMzM3OCwyMzM4MiwyMzM5MCwyMzQwMCwyMzQwNiwyMzQwNywyMzQyMCwyMzQyMSwyMzQyMiwyMzQyMywyMzQyNSwyMzQyOCwyMzQzMCwyMzQzNCwyMzQzOCwyMzQ0MCwyMzQ0''@;'; put 'put ''MSwyMzQ0MywyMzQ0NCwyMzQ0NiwyMzQ2NCwyMzQ2NSwyMzQ2OCwyMzQ2OSwyMzQ3MSwyMzQ3MywyMzQ3NCwyMzQ3OSwyMzQ4MiwyMzQ4NCwyMzQ4OCwyMzQ4OSwyMzUwMSwyMzUwMywyMzUxMCwyMzUxMSwyMzUxMiwyMzUxMywyMzUxNCwyMzUyMCwyMzUzNSwyMzUzNywyMzU0MCwyMzU0OSwy''@;'; put 'put ''MzU2NCwyMzU3NSwyMzU4MiwyMzU4MywyMzU4NywyMzU5MCwyMzU5MywyMzU5NSwyMzU5NiwyMzU5OCwyMzYwMCwyMzYwMiwyMzYwNSwyMzYwNiwyMzY0MSwyMzY0MiwyMzY0NCwyMzY1MCwyMzY1MSwyMzY1NSwyMzY1NiwyMzY1NywyMzY2MSwyMzY2NCwyMzY2OCwyMzY2OSwyMzY3NCwyMzY3''@;'; put 'put ''NSwyMzY3NiwyMzY3NywyMzY4NywyMzY4OCwyMzY5MCwyMzY5NSwyMzY5OCwyMzcwOSwyMzcxMSwyMzcxMiwyMzcxNCwyMzcxNSwyMzcxOCwyMzcyMiwyMzczMCwyMzczMiwyMzczMywyMzczOCwyMzc1MywyMzc1NSwyMzc2MiwyMzc3MywyMzc2NywyMzc5MCwyMzc5MywyMzc5NCwyMzc5Niwy''@;'; put 'put ''MzgwOSwyMzgxNCwyMzgyMSwyMzgyNiwyMzg1MSwyMzg0MywyMzg0NCwyMzg0NiwyMzg0NywyMzg1NywyMzg2MCwyMzg2NSwyMzg2OSwyMzg3MSwyMzg3NCwyMzg3NSwyMzg3OCwyMzg4MCwyMzg5MywyMzg4OSwyMzg5NywyMzg4MiwyMzkwMywyMzkwNCwyMzkwNSwyMzkwNiwyMzkwOCwyMzkx''@;'; put 'put ''NCwyMzkxNywyMzkyMCwyMzkyOSwyMzkzMCwyMzkzNCwyMzkzNSwyMzkzNywyMzkzOSwyMzk0NCwyMzk0NiwyMzk1NCwyMzk1NSwyMzk1NiwyMzk1NywyMzk2MSwyMzk2MywyMzk2NywyMzk2OCwyMzk3NSwyMzk3OSwyMzk4NCwyMzk4OCwyMzk5MiwyMzk5MywyNDAwMywyNDAwNywyNDAxMSwy''@;'; put 'put ''NDAxNiwyNDAxNCwyNDAyNCwyNDAyNSwyNDAzMiwyNDAzNiwyNDA0MSwyNDA1NiwyNDA1NywyNDA2NCwyNDA3MSwyNDA3NywyNDA4MiwyNDA4NCwyNDA4NSwyNDA4OCwyNDA5NSwyNDA5NiwyNDExMCwyNDEwNCwyNDExNCwyNDExNywyNDEyNiwyNDEzOSwyNDE0NCwyNDEzNywyNDE0NSwyNDE1''@;'; put 'put ''MCwyNDE1MiwyNDE1NSwyNDE1NiwyNDE1OCwyNDE2OCwyNDE3MCwyNDE3MSwyNDE3MiwyNDE3MywyNDE3NCwyNDE3NiwyNDE5MiwyNDIwMywyNDIwNiwyNDIyNiwyNDIyOCwyNDIyOSwyNDIzMiwyNDIzNCwyNDIzNiwyNDI0MSwyNDI0MywyNDI1MywyNDI1NCwyNDI1NSwyNDI2MiwyNDI2OCwy''@;'; put 'put ''NDI2NywyNDI3MCwyNDI3MywyNDI3NCwyNDI3NiwyNDI3NywyNDI4NCwyNDI4NiwyNDI5MywyNDI5OSwyNDMyMiwyNDMyNiwyNDMyNywyNDMyOCwyNDMzNCwyNDM0NSwyNDM0OCwyNDM0OSwyNDM1MywyNDM1NCwyNDM1NSwyNDM1NiwyNDM2MCwyNDM2MywyNDM2NCwyNDM2NiwyNDM2OCwyNDM3''@;'; put 'put ''MiwyNDM3NCwyNDM3OSwyNDM4MSwyNDM4MywyNDM4NCwyNDM4OCwyNDM4OSwyNDM5MSwyNDM5NywyNDQwMCwyNDQwNCwyNDQwOCwyNDQxMSwyNDQxNiwyNDQxOSwyNDQyMCwyNDQyMywyNDQzMSwyNDQzNCwyNDQzNiwyNDQzNywyNDQ0MCwyNDQ0MiwyNDQ0NSwyNDQ0NiwyNDQ1NywyNDQ2MSwy''@;'; put 'put ''NDQ2MywyNDQ3MCwyNDQ3NiwyNDQ3NywyNDQ4MiwyNDQ4NywyNDQ5MSwyNDQ4NCwyNDQ5MiwyNDQ5NSwyNDQ5NiwyNDQ5NywyNDUwNCwyNDUxNiwyNDUxOSwyNDUyMCwyNDUyMSwyNDUyMywyNDUyOCwyNDUyOSwyNDUzMCwyNDUzMSwyNDUzMiwyNDU0MiwyNDU0NSwyNDU0NiwyNDU1MiwyNDU1''@;'; put 'put ''MywyNDU1NCwyNDU1NiwyNDU1NywyNDU1OCwyNDU1OSwyNDU2MiwyNDU2MywyNDU2NiwyNDU3MCwyNDU3MiwyNDU4MywyNDU4NiwyNDU4OSwyNDU5NSwyNDU5NiwyNDU5OSwyNDYwMCwyNDYwMiwyNDYwNywyNDYxMiwyNDYyMSwyNDYyNywyNDYyOSwyNDY0MCwyNDY0NywyNDY0OCwyNDY0OSwy''@;'; put 'put ''NDY1MiwyNDY1NywyNDY2MCwyNDY2MiwyNDY2MywyNDY2OSwyNDY3MywyNDY3OSwyNDY4OSwyNDcwMiwyNDcwMywyNDcwNiwyNDcxMCwyNDcxMiwyNDcxNCwyNDcxOCwyNDcyMSwyNDcyMywyNDcyNSwyNDcyOCwyNDczMywyNDczNCwyNDczOCwyNDc0MCwyNDc0MSwyNDc0NCwyNDc1MiwyNDc1''@;'; put 'put ''MywyNDc1OSwyNDc2MywyNDc2NiwyNDc3MCwyNDc3MiwyNDc3NiwyNDc3NywyNDc3OCwyNDc3OSwyNDc4MiwyNDc4MywyNDc4OCwyNDc4OSwyNDc5MywyNDc5NSwyNDc5NywyNDc5OCwyNDgwMiwyNDgwNSwyNDgxOCwyNDgyMSwyNDgyNCwyNDgyOCwyNDgyOSwyNDgzNCwyNDgzOSwyNDg0Miwy''@;'; put 'put ''NDg0NCwyNDg0OCwyNDg0OSwyNDg1MCwyNDg1MSwyNDg1MiwyNDg1NCwyNDg1NSwyNDg1NywyNDg2MCwyNDg2MiwyNDg2NiwyNDg3NCwyNDg3NSwyNDg4MCwyNDg4MSwyNDg4NSwyNDg4NiwyNDg4NywyNDg4OSwyNDg5NywyNDkwMSwyNDkwMiwyNDkwNSwyNDkyNiwyNDkyOCwyNDk0MCwyNDk0''@;'; put 'put ''NiwyNDk1MiwyNDk1NSwyNDk1NiwyNDk1OSwyNDk2MCwyNDk2MSwyNDk2MywyNDk2NCwyNDk3MSwyNDk3MywyNDk3OCwyNDk3OSwyNDk4MywyNDk4NCwyNDk4OCwyNDk4OSwyNDk5MSwyNDk5MiwyNDk5NywyNWUzLDI1MDAyLDI1MDA1LDI1MDE2LDI1MDE3LDI1MDIwLDI1MDI0LDI1MDI1LDI1''@;'; put 'put ''MDI2LDI1MDM4LDI1MDM5LDI1MDQ1LDI1MDUyLDI1MDUzLDI1MDU0LDI1MDU1LDI1MDU3LDI1MDU4LDI1MDYzLDI1MDY1LDI1MDYxLDI1MDY4LDI1MDY5LDI1MDcxLDI1MDg5LDI1MDkxLDI1MDkyLDI1MDk1LDI1MTA3LDI1MTA5LDI1MTE2LDI1MTIwLDI1MTIyLDI1MTIzLDI1MTI3LDI1MTI5''@;'; put 'put ''LDI1MTMxLDI1MTQ1LDI1MTQ5LDI1MTU0LDI1MTU1LDI1MTU2LDI1MTU4LDI1MTY0LDI1MTY4LDI1MTY5LDI1MTcwLDI1MTcyLDI1MTc0LDI1MTc4LDI1MTgwLDI1MTg4LDI1MTk3LDI1MTk5LDI1MjAzLDI1MjEwLDI1MjEzLDI1MjI5LDI1MjMwLDI1MjMxLDI1MjMyLDI1MjU0LDI1MjU2LDI1''@;'; put 'put ''MjY3LDI1MjcwLDI1MjcxLDI1Mjc0LDI1Mjc4LDI1Mjc5LDI1Mjg0LDI1Mjk0LDI1MzAxLDI1MzAyLDI1MzA2LDI1MzIyLDI1MzMwLDI1MzMyLDI1MzQwLDI1MzQxLDI1MzQ3LDI1MzQ4LDI1MzU0LDI1MzU1LDI1MzU3LDI1MzYwLDI1MzYzLDI1MzY2LDI1MzY4LDI1Mzg1LDI1Mzg2LDI1Mzg5''@;'; put 'put ''LDI1Mzk3LDI1Mzk4LDI1NDAxLDI1NDA0LDI1NDA5LDI1NDEwLDI1NDExLDI1NDEyLDI1NDE0LDI1NDE4LDI1NDE5LDI1NDIyLDI1NDI2LDI1NDI3LDI1NDI4LDI1NDMyLDI1NDM1LDI1NDQ1LDI1NDQ2LDI1NDUyLDI1NDUzLDI1NDU3LDI1NDYwLDI1NDYxLDI1NDY0LDI1NDY4LDI1NDY5LDI1''@;'; put 'put ''NDcxLDI1NDc0LDI1NDc2LDI1NDc5LDI1NDgyLDI1NDg4LDI1NDkyLDI1NDkzLDI1NDk3LDI1NDk4LDI1NTAyLDI1NTA4LDI1NTEwLDI1NTE3LDI1NTE4LDI1NTE5LDI1NTMzLDI1NTM3LDI1NTQxLDI1NTQ0LDI1NTUwLDI1NTUzLDI1NTU1LDI1NTU2LDI1NTU3LDI1NTY0LDI1NTY4LDI1NTcz''@;'; put 'put ''LDI1NTc4LDI1NTgwLDI1NTg2LDI1NTg3LDI1NTg5LDI1NTkyLDI1NTkzLDI1NjA5LDI1NjEwLDI1NjE2LDI1NjE4LDI1NjIwLDI1NjI0LDI1NjMwLDI1NjMyLDI1NjM0LDI1NjM2LDI1NjM3LDI1NjQxLDI1NjQyLDI1NjQ3LDI1NjQ4LDI1NjUzLDI1NjYxLDI1NjYzLDI1Njc1LDI1Njc5LDI1''@;'; put 'put ''NjgxLDI1NjgyLDI1NjgzLDI1Njg0LDI1NjkwLDI1NjkxLDI1NjkyLDI1NjkzLDI1Njk1LDI1Njk2LDI1Njk3LDI1Njk5LDI1NzA5LDI1NzE1LDI1NzE2LDI1NzIzLDI1NzI1LDI1NzMzLDI1NzM1LDI1NzQzLDI1NzQ0LDI1NzQ1LDI1NzUyLDI1NzUzLDI1NzU1LDI1NzU3LDI1NzU5LDI1NzYx''@;'; put 'put ''LDI1NzYzLDI1NzY2LDI1NzY4LDI1NzcyLDI1Nzc5LDI1Nzg5LDI1NzkwLDI1NzkxLDI1Nzk2LDI1ODAxLDI1ODAyLDI1ODAzLDI1ODA0LDI1ODA2LDI1ODA4LDI1ODA5LDI1ODEzLDI1ODE1LDI1ODI4LDI1ODI5LDI1ODMzLDI1ODM0LDI1ODM3LDI1ODQwLDI1ODQ1LDI1ODQ3LDI1ODUxLDI1''@;'; put 'put ''ODU1LDI1ODU3LDI1ODYwLDI1ODY0LDI1ODY1LDI1ODY2LDI1ODcxLDI1ODc1LDI1ODc2LDI1ODc4LDI1ODgxLDI1ODgzLDI1ODg2LDI1ODg3LDI1ODkwLDI1ODk0LDI1ODk3LDI1OTAyLDI1OTA1LDI1OTE0LDI1OTE2LDI1OTE3LDI1OTIzLDI1OTI3LDI1OTI5LDI1OTM2LDI1OTM4LDI1OTQw''@;'; put 'put ''LDI1OTUxLDI1OTUyLDI1OTU5LDI1OTYzLDI1OTc4LDI1OTgxLDI1OTg1LDI1OTg5LDI1OTk0LDI2MDAyLDI2MDA1LDI2MDA4LDI2MDEzLDI2MDE2LDI2MDE5LDI2MDIyLDI2MDMwLDI2MDM0LDI2MDM1LDI2MDM2LDI2MDQ3LDI2MDUwLDI2MDU2LDI2MDU3LDI2MDYyLDI2MDY0LDI2MDY4LDI2''@;'; put 'put ''MDcwLDI2MDcyLDI2MDc5LDI2MDk2LDI2MDk4LDI2MTAwLDI2MTAxLDI2MTA1LDI2MTEwLDI2MTExLDI2MTEyLDI2MTE2LDI2MTIwLDI2MTIxLDI2MTI1LDI2MTI5LDI2MTMwLDI2MTMzLDI2MTM0LDI2MTQxLDI2MTQyLDI2MTQ1LDI2MTQ2LDI2MTQ3LDI2MTQ4LDI2MTUwLDI2MTUzLDI2MTU0''@;'; put 'put ''LDI2MTU1LDI2MTU2LDI2MTU4LDI2MTYwLDI2MTYxLDI2MTYzLDI2MTY5LDI2MTY3LDI2MTc2LDI2MTgxLDI2MTgyLDI2MTg2LDI2MTg4LDI2MTkzLDI2MTkwLDI2MTk5LDI2MjAwLDI2MjAxLDI2MjAzLDI2MjA0LDI2MjA4LDI2MjA5LDI2MzYzLDI2MjE4LDI2MjE5LDI2MjIwLDI2MjM4LDI2''@;'; put 'put ''MjI3LDI2MjI5LDI2MjM5LDI2MjMxLDI2MjMyLDI2MjMzLDI2MjM1LDI2MjQwLDI2MjM2LDI2MjUxLDI2MjUyLDI2MjUzLDI2MjU2LDI2MjU4LDI2MjY1LDI2MjY2LDI2MjY3LDI2MjY4LDI2MjcxLDI2MjcyLDI2Mjc2LDI2Mjg1LDI2Mjg5LDI2MjkwLDI2MjkzLDI2Mjk5LDI2MzAzLDI2MzA0''@;'; put 'put ''LDI2MzA2LDI2MzA3LDI2MzEyLDI2MzE2LDI2MzE4LDI2MzE5LDI2MzI0LDI2MzMxLDI2MzM1LDI2MzQ0LDI2MzQ3LDI2MzQ4LDI2MzUwLDI2MzYyLDI2MzczLDI2Mzc1LDI2MzgyLDI2Mzg3LDI2MzkzLDI2Mzk2LDI2NDAwLDI2NDAyLDI2NDE5LDI2NDMwLDI2NDM3LDI2NDM5LDI2NDQwLDI2''@;'; put 'put ''NDQ0LDI2NDUyLDI2NDUzLDI2NDYxLDI2NDcwLDI2NDc2LDI2NDc4LDI2NDg0LDI2NDg2LDI2NDkxLDI2NDk3LDI2NTAwLDI2NTEwLDI2NTExLDI2NTEzLDI2NTE1LDI2NTE4LDI2NTIwLDI2NTIxLDI2NTIzLDI2NTQ0LDI2NTQ1LDI2NTQ2LDI2NTQ5LDI2NTU1LDI2NTU2LDI2NTU3LDI2NjE3''@;'; put 'put ''LDI2NTYwLDI2NTYyLDI2NTYzLDI2NTY1LDI2NTY4LDI2NTY5LDI2NTc4LDI2NTgzLDI2NTg1LDI2NTg4LDI2NTkzLDI2NTk4LDI2NjA4LDI2NjEwLDI2NjE0LDI2NjE1LDI2NzA2LDI2NjQ0LDI2NjQ5LDI2NjUzLDI2NjU1LDI2NjY0LDI2NjYzLDI2NjY4LDI2NjY5LDI2NjcxLDI2NjcyLDI2''@;'; put 'put ''NjczLDI2Njc1LDI2NjgzLDI2Njg3LDI2NjkyLDI2NjkzLDI2Njk4LDI2NzAwLDI2NzA5LDI2NzExLDI2NzEyLDI2NzE1LDI2NzMxLDI2NzM0LDI2NzM1LDI2NzM2LDI2NzM3LDI2NzM4LDI2NzQxLDI2NzQ1LDI2NzQ2LDI2NzQ3LDI2NzQ4LDI2NzU0LDI2NzU2LDI2NzU4LDI2NzYwLDI2Nzc0''@;'; put 'put ''LDI2Nzc2LDI2Nzc4LDI2NzgwLDI2Nzg1LDI2Nzg3LDI2Nzg5LDI2NzkzLDI2Nzk0LDI2Nzk4LDI2ODAyLDI2ODExLDI2ODIxLDI2ODI0LDI2ODI4LDI2ODMxLDI2ODMyLDI2ODMzLDI2ODM1LDI2ODM4LDI2ODQxLDI2ODQ0LDI2ODQ1LDI2ODUzLDI2ODU2LDI2ODU4LDI2ODU5LDI2ODYwLDI2''@;'; put 'put ''ODYxLDI2ODY0LDI2ODY1LDI2ODY5LDI2ODcwLDI2ODc1LDI2ODc2LDI2ODc3LDI2ODg2LDI2ODg5LDI2ODkwLDI2ODk2LDI2ODk3LDI2ODk5LDI2OTAyLDI2OTAzLDI2OTI5LDI2OTMxLDI2OTMzLDI2OTM2LDI2OTM5LDI2OTQ2LDI2OTQ5LDI2OTUzLDI2OTU4LDI2OTY3LDI2OTcxLDI2OTc5''@;'; put 'put ''LDI2OTgwLDI2OTgxLDI2OTgyLDI2OTg0LDI2OTg1LDI2OTg4LDI2OTkyLDI2OTkzLDI2OTk0LDI3MDAyLDI3MDAzLDI3MDA3LDI3MDA4LDI3MDIxLDI3MDI2LDI3MDMwLDI3MDMyLDI3MDQxLDI3MDQ1LDI3MDQ2LDI3MDQ4LDI3MDUxLDI3MDUzLDI3MDU1LDI3MDYzLDI3MDY0LDI3MDY2LDI3''@;'; put 'put ''MDY4LDI3MDc3LDI3MDgwLDI3MDg5LDI3MDk0LDI3MDk1LDI3MTA2LDI3MTA5LDI3MTE4LDI3MTE5LDI3MTIxLDI3MTIzLDI3MTI1LDI3MTM0LDI3MTM2LDI3MTM3LDI3MTM5LDI3MTUxLDI3MTUzLDI3MTU3LDI3MTYyLDI3MTY1LDI3MTY4LDI3MTcyLDI3MTc2LDI3MTg0LDI3MTg2LDI3MTg4''@;'; put 'put ''LDI3MTkxLDI3MTk1LDI3MTk4LDI3MTk5LDI3MjA1LDI3MjA2LDI3MjA5LDI3MjEwLDI3MjE0LDI3MjE2LDI3MjE3LDI3MjE4LDI3MjIxLDI3MjIyLDI3MjI3LDI3MjM2LDI3MjM5LDI3MjQyLDI3MjQ5LDI3MjUxLDI3MjYyLDI3MjY1LDI3MjY3LDI3MjcwLDI3MjcxLDI3MjczLDI3Mjc1LDI3''@;'; put 'put ''MjgxLDI3MjkxLDI3MjkzLDI3Mjk0LDI3Mjk1LDI3MzAxLDI3MzA3LDI3MzExLDI3MzEyLDI3MzEzLDI3MzE2LDI3MzI1LDI3MzI2LDI3MzI3LDI3MzM0LDI3MzM3LDI3MzM2LDI3MzQwLDI3MzQ0LDI3MzQ4LDI3MzQ5LDI3MzUwLDI3MzU2LDI3MzU3LDI3MzY0LDI3MzY3LDI3MzcyLDI3Mzc2''@;'; put 'put ''LDI3Mzc3LDI3Mzc4LDI3Mzg4LDI3Mzg5LDI3Mzk0LDI3Mzk1LDI3Mzk4LDI3Mzk5LDI3NDAxLDI3NDA3LDI3NDA4LDI3NDA5LDI3NDE1LDI3NDE5LDI3NDIyLDI3NDI4LDI3NDMyLDI3NDM1LDI3NDM2LDI3NDM5LDI3NDQ1LDI3NDQ2LDI3NDUxLDI3NDU1LDI3NDYyLDI3NDY2LDI3NDY5LDI3''@;'; put 'put ''NDc0LDI3NDc4LDI3NDgwLDI3NDg1LDI3NDg4LDI3NDk1LDI3NDk5LDI3NTAyLDI3NTA0LDI3NTA5LDI3NTE3LDI3NTE4LDI3NTIyLDI3NTI1LDI3NTQzLDI3NTQ3LDI3NTUxLDI3NTUyLDI3NTU0LDI3NTU1LDI3NTYwLDI3NTYxLDI3NTY0LDI3NTY1LDI3NTY2LDI3NTY4LDI3NTc2LDI3NTc3''@;'; put 'put ''LDI3NTgxLDI3NTgyLDI3NTg3LDI3NTg4LDI3NTkzLDI3NTk2LDI3NjA2LDI3NjEwLDI3NjE3LDI3NjE5LDI3NjIyLDI3NjIzLDI3NjMwLDI3NjMzLDI3NjM5LDI3NjQxLDI3NjQ3LDI3NjUwLDI3NjUyLDI3NjUzLDI3NjU3LDI3NjYxLDI3NjYyLDI3NjY0LDI3NjY2LDI3NjczLDI3Njc5LDI3''@;'; put 'put ''Njg2LDI3Njg3LDI3Njg4LDI3NjkyLDI3Njk0LDI3Njk5LDI3NzAxLDI3NzAyLDI3NzA2LDI3NzA3LDI3NzExLDI3NzIyLDI3NzIzLDI3NzI1LDI3NzI3LDI3NzMwLDI3NzMyLDI3NzM3LDI3NzM5LDI3NzQwLDI3NzU1LDI3NzU3LDI3NzU5LDI3NzY0LDI3NzY2LDI3NzY4LDI3NzY5LDI3Nzcx''@;'; put 'put ''LDI3NzgxLDI3NzgyLDI3NzgzLDI3Nzg1LDI3Nzk2LDI3Nzk3LDI3Nzk5LDI3ODAwLDI3ODA0LDI3ODA3LDI3ODI0LDI3ODI2LDI3ODI4LDI3ODQyLDI3ODQ2LDI3ODUzLDI3ODU1LDI3ODU2LDI3ODU3LDI3ODU4LDI3ODYwLDI3ODYyLDI3ODY2LDI3ODY4LDI3ODcyLDI3ODc5LDI3ODgxLDI3''@;'; put 'put ''ODgzLDI3ODg0LDI3ODg2LDI3ODkwLDI3ODkyLDI3OTA4LDI3OTExLDI3OTE0LDI3OTE4LDI3OTE5LDI3OTIxLDI3OTIzLDI3OTMwLDI3OTQyLDI3OTQzLDI3OTQ0LDI3NzUxLDI3OTUwLDI3OTUxLDI3OTUzLDI3OTYxLDI3OTY0LDI3OTY3LDI3OTkxLDI3OTk4LDI3OTk5LDI4MDAxLDI4MDA1''@;'; put 'put ''LDI4MDA3LDI4MDE1LDI4MDE2LDI4MDI4LDI4MDM0LDI4MDM5LDI4MDQ5LDI4MDUwLDI4MDUyLDI4MDU0LDI4MDU1LDI4MDU2LDI4MDc0LDI4MDc2LDI4MDg0LDI4MDg3LDI4MDg5LDI4MDkzLDI4MDk1LDI4MTAwLDI4MTA0LDI4MTA2LDI4MTEwLDI4MTExLDI4MTE4LDI4MTIzLDI4MTI1LDI4''@;'; put 'put ''MTI3LDI4MTI4LDI4MTMwLDI4MTMzLDI4MTM3LDI4MTQzLDI4MTQ0LDI4MTQ4LDI4MTUwLDI4MTU2LDI4MTYwLDI4MTY0LDI4MTkwLDI4MTk0LDI4MTk5LDI4MjEwLDI4MjE0LDI4MjE3LDI4MjE5LDI4MjIwLDI4MjI4LDI4MjI5LDI4MjMyLDI4MjMzLDI4MjM1LDI4MjM5LDI4MjQxLDI4MjQy''@;'; put 'put ''LDI4MjQzLDI4MjQ0LDI4MjQ3LDI4MjUyLDI4MjUzLDI4MjU0LDI4MjU4LDI4MjU5LDI4MjY0LDI4Mjc1LDI4MjgzLDI4Mjg1LDI4MzAxLDI4MzA3LDI4MzEzLDI4MzIwLDI4MzI3LDI4MzMzLDI4MzM0LDI4MzM3LDI4MzM5LDI4MzQ3LDI4MzUxLDI4MzUyLDI4MzUzLDI4MzU1LDI4MzU5LDI4''@;'; put 'put ''MzYwLDI4MzYyLDI4MzY1LDI4MzY2LDI4MzY3LDI4Mzk1LDI4Mzk3LDI4Mzk4LDI4NDA5LDI4NDExLDI4NDEzLDI4NDIwLDI4NDI0LDI4NDI2LDI4NDI4LDI4NDI5LDI4NDM4LDI4NDQwLDI4NDQyLDI4NDQzLDI4NDU0LDI4NDU3LDI4NDU4LDI4NDYzLDI4NDY0LDI4NDY3LDI4NDcwLDI4NDc1''@;'; put 'put ''LDI4NDc2LDI4NDYxLDI4NDk1LDI4NDk3LDI4NDk4LDI4NDk5LDI4NTAzLDI4NTA1LDI4NTA2LDI4NTA5LDI4NTEwLDI4NTEzLDI4NTE0LDI4NTIwLDI4NTI0LDI4NTQxLDI4NTQyLDI4NTQ3LDI4NTUxLDI4NTUyLDI4NTU1LDI4NTU2LDI4NTU3LDI4NTYwLDI4NTYyLDI4NTYzLDI4NTY0LDI4''@;'; put 'put ''NTY2LDI4NTcwLDI4NTc1LDI4NTc2LDI4NTgxLDI4NTgyLDI4NTgzLDI4NTg0LDI4NTkwLDI4NTkxLDI4NTkyLDI4NTk3LDI4NTk4LDI4NjA0LDI4NjEzLDI4NjE1LDI4NjE2LDI4NjE4LDI4NjM0LDI4NjM4LDI4NjQ4LDI4NjQ5LDI4NjU2LDI4NjYxLDI4NjY1LDI4NjY4LDI4NjY5LDI4Njcy''@;'; put 'put ''LDI4Njc3LDI4Njc4LDI4Njc5LDI4Njg1LDI4Njk1LDI4NzA0LDI4NzA3LDI4NzE5LDI4NzI0LDI4NzI3LDI4NzI5LDI4NzMyLDI4NzM5LDI4NzQwLDI4NzQ0LDI4NzQ1LDI4NzQ2LDI4NzQ3LDI4NzU2LDI4NzU3LDI4NzY1LDI4NzY2LDI4NzUwLDI4NzcyLDI4NzczLDI4NzgwLDI4NzgyLDI4''@;'; put 'put ''Nzg5LDI4NzkwLDI4Nzk4LDI4ODAxLDI4ODA1LDI4ODA2LDI4ODIwLDI4ODIxLDI4ODIyLDI4ODIzLDI4ODI0LDI4ODI3LDI4ODM2LDI4ODQzLDI4ODQ4LDI4ODQ5LDI4ODUyLDI4ODU1LDI4ODc0LDI4ODgxLDI4ODgzLDI4ODg0LDI4ODg1LDI4ODg2LDI4ODg4LDI4ODkyLDI4OTAwLDI4OTIy''@;'; put 'put ''LDI4OTMxLDI4OTMyLDI4OTMzLDI4OTM0LDI4OTM1LDI4OTM5LDI4OTQwLDI4OTQzLDI4OTU4LDI4OTYwLDI4OTcxLDI4OTczLDI4OTc1LDI4OTc2LDI4OTc3LDI4OTg0LDI4OTkzLDI4OTk3LDI4OTk4LDI4OTk5LDI5MDAyLDI5MDAzLDI5MDA4LDI5MDEwLDI5MDE1LDI5MDE4LDI5MDIwLDI5''@;'; put 'put ''MDIyLDI5MDI0LDI5MDMyLDI5MDQ5LDI5MDU2LDI5MDYxLDI5MDYzLDI5MDY4LDI5MDc0LDI5MDgyLDI5MDgzLDI5MDg4LDI5MDkwLDI5MTAzLDI5MTA0LDI5MTA2LDI5MTA3LDI5MTE0LDI5MTE5LDI5MTIwLDI5MTIxLDI5MTI0LDI5MTMxLDI5MTMyLDI5MTM5LDI5MTQyLDI5MTQ1LDI5MTQ2''@;'; put 'put ''LDI5MTQ4LDI5MTc2LDI5MTgyLDI5MTg0LDI5MTkxLDI5MTkyLDI5MTkzLDI5MjAzLDI5MjA3LDI5MjEwLDI5MjEzLDI5MjE1LDI5MjIwLDI5MjI3LDI5MjMxLDI5MjM2LDI5MjQwLDI5MjQxLDI5MjQ5LDI5MjUwLDI5MjUxLDI5MjUzLDI5MjYyLDI5MjYzLDI5MjY0LDI5MjY3LDI5MjY5LDI5''@;'; put 'put ''MjcwLDI5Mjc0LDI5Mjc2LDI5Mjc4LDI5MjgwLDI5MjgzLDI5Mjg4LDI5MjkxLDI5Mjk0LDI5Mjk1LDI5Mjk3LDI5MzAzLDI5MzA0LDI5MzA3LDI5MzA4LDI5MzExLDI5MzE2LDI5MzIxLDI5MzI1LDI5MzI2LDI5MzMxLDI5MzM5LDI5MzUyLDI5MzU3LDI5MzU4LDI5MzYxLDI5MzY0LDI5Mzc0''@;'; put 'put ''LDI5Mzc3LDI5MzgzLDI5Mzg1LDI5Mzg4LDI5Mzk3LDI5Mzk4LDI5NDAwLDI5NDA3LDI5NDEzLDI5NDI3LDI5NDI4LDI5NDM0LDI5NDM1LDI5NDM4LDI5NDQyLDI5NDQ0LDI5NDQ1LDI5NDQ3LDI5NDUxLDI5NDUzLDI5NDU4LDI5NDU5LDI5NDY0LDI5NDY1LDI5NDcwLDI5NDc0LDI5NDc2LDI5''@;'; put 'put ''NDc5LDI5NDgwLDI5NDg0LDI5NDg5LDI5NDkwLDI5NDkzLDI5NDk4LDI5NDk5LDI5NTAxLDI5NTA3LDI5NTE3LDI5NTIwLDI5NTIyLDI5NTI2LDI5NTI4LDI5NTMzLDI5NTM0LDI5NTM1LDI5NTM2LDI5NTQyLDI5NTQzLDI5NTQ1LDI5NTQ3LDI5NTQ4LDI5NTUwLDI5NTUxLDI5NTUzLDI5NTU5''@;'; put 'put ''LDI5NTYxLDI5NTY0LDI5NTY4LDI5NTY5LDI5NTcxLDI5NTczLDI5NTc0LDI5NTgyLDI5NTg0LDI5NTg3LDI5NTg5LDI5NTkxLDI5NTkyLDI5NTk2LDI5NTk4LDI5NTk5LDI5NjAwLDI5NjAyLDI5NjA1LDI5NjA2LDI5NjEwLDI5NjExLDI5NjEzLDI5NjIxLDI5NjIzLDI5NjI1LDI5NjI4LDI5''@;'; put 'put ''NjI5LDI5NjMxLDI5NjM3LDI5NjM4LDI5NjQxLDI5NjQzLDI5NjQ0LDI5NjQ3LDI5NjUwLDI5NjUxLDI5NjU0LDI5NjU3LDI5NjYxLDI5NjY1LDI5NjY3LDI5NjcwLDI5NjcxLDI5NjczLDI5Njg0LDI5Njg1LDI5Njg3LDI5Njg5LDI5NjkwLDI5NjkxLDI5NjkzLDI5Njk1LDI5Njk2LDI5Njk3''@;'; put 'put ''LDI5NzAwLDI5NzAzLDI5NzA2LDI5NzEzLDI5NzIyLDI5NzIzLDI5NzMyLDI5NzM0LDI5NzM2LDI5NzM3LDI5NzM4LDI5NzM5LDI5NzQwLDI5NzQxLDI5NzQyLDI5NzQzLDI5NzQ0LDI5NzQ1LDI5NzUzLDI5NzYwLDI5NzYzLDI5NzY0LDI5NzY2LDI5NzY3LDI5NzcxLDI5NzczLDI5Nzc3LDI5''@;'; put 'put ''Nzc4LDI5NzgzLDI5Nzg5LDI5Nzk0LDI5Nzk4LDI5Nzk5LDI5ODAwLDI5ODAzLDI5ODA1LDI5ODA2LDI5ODA5LDI5ODEwLDI5ODI0LDI5ODI1LDI5ODI5LDI5ODMwLDI5ODMxLDI5ODMzLDI5ODM5LDI5ODQwLDI5ODQxLDI5ODQyLDI5ODQ4LDI5ODQ5LDI5ODUwLDI5ODUyLDI5ODU1LDI5ODU2''@;'; put 'put ''LDI5ODU3LDI5ODU5LDI5ODYyLDI5ODY0LDI5ODY1LDI5ODY2LDI5ODY3LDI5ODcwLDI5ODcxLDI5ODczLDI5ODc0LDI5ODc3LDI5ODgxLDI5ODgzLDI5ODg3LDI5ODk2LDI5ODk3LDI5OTAwLDI5OTA0LDI5OTA3LDI5OTEyLDI5OTE0LDI5OTE1LDI5OTE4LDI5OTE5LDI5OTI0LDI5OTI4LDI5''@;'; put 'put ''OTMwLDI5OTMxLDI5OTM1LDI5OTQwLDI5OTQ2LDI5OTQ3LDI5OTQ4LDI5OTUxLDI5OTU4LDI5OTcwLDI5OTc0LDI5OTc1LDI5OTg0LDI5OTg1LDI5OTg4LDI5OTkxLDI5OTkzLDI5OTk0LDI5OTk5LDMwMDA2LDMwMDA5LDMwMDEzLDMwMDE0LDMwMDE1LDMwMDE2LDMwMDE5LDMwMDIzLDMwMDI0''@;'; put 'put ''LDMwMDMwLDMwMDMyLDMwMDM0LDMwMDM5LDMwMDQ2LDMwMDQ3LDMwMDQ5LDMwMDYzLDMwMDY1LDMwMDczLDMwMDc0LDMwMDc1LDMwMDc2LDMwMDc3LDMwMDc4LDMwMDgxLDMwMDg1LDMwMDk2LDMwMDk4LDMwMDk5LDMwMTAxLDMwMTA1LDMwMTA4LDMwMTE0LDMwMTE2LDMwMTMyLDMwMTM4LDMw''@;'; put 'put ''MTQzLDMwMTQ0LDMwMTQ1LDMwMTQ4LDMwMTUwLDMwMTU2LDMwMTU4LDMwMTU5LDMwMTY3LDMwMTcyLDMwMTc1LDMwMTc2LDMwMTc3LDMwMTgwLDMwMTgzLDMwMTg4LDMwMTkwLDMwMTkxLDMwMTkzLDMwMjAxLDMwMjA4LDMwMjEwLDMwMjExLDMwMjEyLDMwMjE1LDMwMjE2LDMwMjE4LDMwMjIw''@;'; put 'put ''LDMwMjIzLDMwMjI2LDMwMjI3LDMwMjI5LDMwMjMwLDMwMjMzLDMwMjM1LDMwMjM2LDMwMjM3LDMwMjM4LDMwMjQzLDMwMjQ1LDMwMjQ2LDMwMjQ5LDMwMjUzLDMwMjU4LDMwMjU5LDMwMjYxLDMwMjY0LDMwMjY1LDMwMjY2LDMwMjY4LDMwMjgyLDMwMjcyLDMwMjczLDMwMjc1LDMwMjc2LDMw''@;'; put 'put ''Mjc3LDMwMjgxLDMwMjgzLDMwMjkzLDMwMjk3LDMwMzAzLDMwMzA4LDMwMzA5LDMwMzE3LDMwMzE4LDMwMzE5LDMwMzIxLDMwMzI0LDMwMzM3LDMwMzQxLDMwMzQ4LDMwMzQ5LDMwMzU3LDMwMzYzLDMwMzY0LDMwMzY1LDMwMzY3LDMwMzY4LDMwMzcwLDMwMzcxLDMwMzcyLDMwMzczLDMwMzc0''@;'; put 'put ''LDMwMzc1LDMwMzc2LDMwMzc4LDMwMzgxLDMwMzk3LDMwNDAxLDMwNDA1LDMwNDA5LDMwNDExLDMwNDEyLDMwNDE0LDMwNDIwLDMwNDI1LDMwNDMyLDMwNDM4LDMwNDQwLDMwNDQ0LDMwNDQ4LDMwNDQ5LDMwNDU0LDMwNDU3LDMwNDYwLDMwNDY0LDMwNDcwLDMwNDc0LDMwNDc4LDMwNDgyLDMw''@;'; put 'put ''NDg0LDMwNDg1LDMwNDg3LDMwNDg5LDMwNDkwLDMwNDkyLDMwNDk4LDMwNTA0LDMwNTA5LDMwNTEwLDMwNTExLDMwNTE2LDMwNTE3LDMwNTE4LDMwNTIxLDMwNTI1LDMwNTI2LDMwNTMwLDMwNTMzLDMwNTM0LDMwNTM4LDMwNTQxLDMwNTQyLDMwNTQzLDMwNTQ2LDMwNTUwLDMwNTUxLDMwNTU2''@;'; put 'put ''LDMwNTU4LDMwNTU5LDMwNTYwLDMwNTYyLDMwNTY0LDMwNTY3LDMwNTcwLDMwNTcyLDMwNTc2LDMwNTc4LDMwNTc5LDMwNTgwLDMwNTg2LDMwNTg5LDMwNTkyLDMwNTk2LDMwNjA0LDMwNjA1LDMwNjEyLDMwNjEzLDMwNjE0LDMwNjE4LDMwNjIzLDMwNjI2LDMwNjMxLDMwNjM0LDMwNjM4LDMw''@;'; put 'put ''NjM5LDMwNjQxLDMwNjQ1LDMwNjU0LDMwNjU5LDMwNjY1LDMwNjczLDMwNjc0LDMwNjc3LDMwNjgxLDMwNjg2LDMwNjg3LDMwNjg4LDMwNjkyLDMwNjk0LDMwNjk4LDMwNzAwLDMwNzA0LDMwNzA1LDMwNzA4LDMwNzEyLDMwNzE1LDMwNzI1LDMwNzI2LDMwNzI5LDMwNzMzLDMwNzM0LDMwNzM3''@;'; put 'put ''LDMwNzQ5LDMwNzUzLDMwNzU0LDMwNzU1LDMwNzY1LDMwNzY2LDMwNzY4LDMwNzczLDMwNzc1LDMwNzg3LDMwNzg4LDMwNzkxLDMwNzkyLDMwNzk2LDMwNzk4LDMwODAyLDMwODEyLDMwODE0LDMwODE2LDMwODE3LDMwODE5LDMwODIwLDMwODI0LDMwODI2LDMwODMwLDMwODQyLDMwODQ2LDMw''@;'; put 'put ''ODU4LDMwODYzLDMwODY4LDMwODcyLDMwODgxLDMwODc3LDMwODc4LDMwODc5LDMwODg0LDMwODg4LDMwODkyLDMwODkzLDMwODk2LDMwODk3LDMwODk4LDMwODk5LDMwOTA3LDMwOTA5LDMwOTExLDMwOTE5LDMwOTIwLDMwOTIxLDMwOTI0LDMwOTI2LDMwOTMwLDMwOTMxLDMwOTMzLDMwOTM0''@;'; put 'put ''LDMwOTQ4LDMwOTM5LDMwOTQzLDMwOTQ0LDMwOTQ1LDMwOTUwLDMwOTU0LDMwOTYyLDMwOTYzLDMwOTc2LDMwOTY2LDMwOTY3LDMwOTcwLDMwOTcxLDMwOTc1LDMwOTgyLDMwOTg4LDMwOTkyLDMxMDAyLDMxMDA0LDMxMDA2LDMxMDA3LDMxMDA4LDMxMDEzLDMxMDE1LDMxMDE3LDMxMDIxLDMx''@;'; put 'put ''MDI1LDMxMDI4LDMxMDI5LDMxMDM1LDMxMDM3LDMxMDM5LDMxMDQ0LDMxMDQ1LDMxMDQ2LDMxMDUwLDMxMDUxLDMxMDU1LDMxMDU3LDMxMDYwLDMxMDY0LDMxMDY3LDMxMDY4LDMxMDc5LDMxMDgxLDMxMDgzLDMxMDkwLDMxMDk3LDMxMDk5LDMxMTAwLDMxMTAyLDMxMTE1LDMxMTE2LDMxMTIx''@;'; put 'put ''LDMxMTIzLDMxMTI0LDMxMTI1LDMxMTI2LDMxMTI4LDMxMTMxLDMxMTMyLDMxMTM3LDMxMTQ0LDMxMTQ1LDMxMTQ3LDMxMTUxLDMxMTUzLDMxMTU2LDMxMTYwLDMxMTYzLDMxMTcwLDMxMTcyLDMxMTc1LDMxMTc2LDMxMTc4LDMxMTgzLDMxMTg4LDMxMTkwLDMxMTk0LDMxMTk3LDMxMTk4LDMx''@;'; put 'put ''MjAwLDMxMjAyLDMxMjA1LDMxMjEwLDMxMjExLDMxMjEzLDMxMjE3LDMxMjI0LDMxMjI4LDMxMjM0LDMxMjM1LDMxMjM5LDMxMjQxLDMxMjQyLDMxMjQ0LDMxMjQ5LDMxMjUzLDMxMjU5LDMxMjYyLDMxMjY1LDMxMjcxLDMxMjc1LDMxMjc3LDMxMjc5LDMxMjgwLDMxMjg0LDMxMjg1LDMxMjg4''@;'; put 'put ''LDMxMjg5LDMxMjkwLDMxMzAwLDMxMzAxLDMxMzAzLDMxMzA0LDMxMzA4LDMxMzE3LDMxMzE4LDMxMzIxLDMxMzI0LDMxMzI1LDMxMzI3LDMxMzI4LDMxMzMzLDMxMzM1LDMxMzM4LDMxMzQxLDMxMzQ5LDMxMzUyLDMxMzU4LDMxMzYwLDMxMzYyLDMxMzY1LDMxMzY2LDMxMzcwLDMxMzcxLDMx''@;'; put 'put ''Mzc2LDMxMzc3LDMxMzgwLDMxMzkwLDMxMzkyLDMxMzk1LDMxNDA0LDMxNDExLDMxNDEzLDMxNDE3LDMxNDE5LDMxNDIwLDMxNDMwLDMxNDMzLDMxNDM2LDMxNDM4LDMxNDQxLDMxNDUxLDMxNDY0LDMxNDY1LDMxNDY3LDMxNDY4LDMxNDczLDMxNDc2LDMxNDgzLDMxNDg1LDMxNDg2LDMxNDk1''@;'; put 'put ''LDMxNTA4LDMxNTE5LDMxNTIzLDMxNTI3LDMxNTI5LDMxNTMwLDMxNTMxLDMxNTMzLDMxNTM0LDMxNTM1LDMxNTM2LDMxNTM3LDMxNTQwLDMxNTQ5LDMxNTUxLDMxNTUyLDMxNTUzLDMxNTU5LDMxNTY2LDMxNTczLDMxNTg0LDMxNTg4LDMxNTkwLDMxNTkzLDMxNTk0LDMxNTk3LDMxNTk5LDMx''@;'; put 'put ''NjAyLDMxNjAzLDMxNjA3LDMxNjIwLDMxNjI1LDMxNjMwLDMxNjMyLDMxNjMzLDMxNjM4LDMxNjQzLDMxNjQ2LDMxNjQ4LDMxNjUzLDMxNjYwLDMxNjYzLDMxNjY0LDMxNjY2LDMxNjY5LDMxNjcwLDMxNjc0LDMxNjc1LDMxNjc2LDMxNjc3LDMxNjgyLDMxNjg1LDMxNjg4LDMxNjkwLDMxNzAw''@;'; put 'put ''LDMxNzAyLDMxNzAzLDMxNzA1LDMxNzA2LDMxNzA3LDMxNzIwLDMxNzIyLDMxNzMwLDMxNzMyLDMxNzMzLDMxNzM2LDMxNzM3LDMxNzM4LDMxNzQwLDMxNzQyLDMxNzQ1LDMxNzQ2LDMxNzQ3LDMxNzQ4LDMxNzUwLDMxNzUzLDMxNzU1LDMxNzU2LDMxNzU4LDMxNzU5LDMxNzY5LDMxNzcxLDMx''@;'; put 'put ''Nzc2LDMxNzgxLDMxNzgyLDMxNzg0LDMxNzg4LDMxNzkzLDMxNzk1LDMxNzk2LDMxNzk4LDMxODAxLDMxODAyLDMxODE0LDMxODE4LDMxODI5LDMxODI1LDMxODI2LDMxODI3LDMxODMzLDMxODM0LDMxODM1LDMxODM2LDMxODM3LDMxODM4LDMxODQxLDMxODQzLDMxODQ3LDMxODQ5LDMxODUz''@;'; put 'put ''LDMxODU0LDMxODU2LDMxODU4LDMxODY1LDMxODY4LDMxODY5LDMxODc4LDMxODc5LDMxODg3LDMxODkyLDMxOTAyLDMxOTA0LDMxOTEwLDMxOTIwLDMxOTI2LDMxOTI3LDMxOTMwLDMxOTMxLDMxOTMyLDMxOTM1LDMxOTQwLDMxOTQzLDMxOTQ0LDMxOTQ1LDMxOTQ5LDMxOTUxLDMxOTU1LDMx''@;'; put 'put ''OTU2LDMxOTU3LDMxOTU5LDMxOTYxLDMxOTYyLDMxOTY1LDMxOTc0LDMxOTc3LDMxOTc5LDMxOTg5LDMyMDAzLDMyMDA3LDMyMDA4LDMyMDA5LDMyMDE1LDMyMDE3LDMyMDE4LDMyMDE5LDMyMDIyLDMyMDI5LDMyMDMwLDMyMDM1LDMyMDM4LDMyMDQyLDMyMDQ1LDMyMDQ5LDMyMDYwLDMyMDYx''@;'; put 'put ''LDMyMDYyLDMyMDY0LDMyMDY1LDMyMDcxLDMyMDcyLDMyMDc3LDMyMDgxLDMyMDgzLDMyMDg3LDMyMDg5LDMyMDkwLDMyMDkyLDMyMDkzLDMyMTAxLDMyMTAzLDMyMTA2LDMyMTEyLDMyMTIwLDMyMTIyLDMyMTIzLDMyMTI3LDMyMTI5LDMyMTMwLDMyMTMxLDMyMTMzLDMyMTM0LDMyMTM2LDMy''@;'; put 'put ''MTM5LDMyMTQwLDMyMTQxLDMyMTQ1LDMyMTUwLDMyMTUxLDMyMTU3LDMyMTU4LDMyMTY2LDMyMTY3LDMyMTcwLDMyMTc5LDMyMTgyLDMyMTgzLDMyMTg1LDMyMTk0LDMyMTk1LDMyMTk2LDMyMTk3LDMyMTk4LDMyMjA0LDMyMjA1LDMyMjA2LDMyMjE1LDMyMjE3LDMyMjU2LDMyMjI2LDMyMjI5''@;'; put 'put ''LDMyMjMwLDMyMjM0LDMyMjM1LDMyMjM3LDMyMjQxLDMyMjQ1LDMyMjQ2LDMyMjQ5LDMyMjUwLDMyMjY0LDMyMjcyLDMyMjczLDMyMjc3LDMyMjc5LDMyMjg0LDMyMjg1LDMyMjg4LDMyMjk1LDMyMjk2LDMyMzAwLDMyMzAxLDMyMzAzLDMyMzA3LDMyMzEwLDMyMzE5LDMyMzI0LDMyMzI1LDMy''@;'; put 'put ''MzI3LDMyMzM0LDMyMzM2LDMyMzM4LDMyMzQ0LDMyMzUxLDMyMzUzLDMyMzU0LDMyMzU3LDMyMzYzLDMyMzY2LDMyMzY3LDMyMzcxLDMyMzc2LDMyMzgyLDMyMzg1LDMyMzkwLDMyMzkxLDMyMzk0LDMyMzk3LDMyNDAxLDMyNDA1LDMyNDA4LDMyNDEwLDMyNDEzLDMyNDE0LDMyNTcyLDMyNTcx''@;'; put 'put ''LDMyNTczLDMyNTc0LDMyNTc1LDMyNTc5LDMyNTgwLDMyNTgzLDMyNTkxLDMyNTk0LDMyNTk1LDMyNjAzLDMyNjA0LDMyNjA1LDMyNjA5LDMyNjExLDMyNjEyLDMyNjEzLDMyNjE0LDMyNjIxLDMyNjI1LDMyNjM3LDMyNjM4LDMyNjM5LDMyNjQwLDMyNjUxLDMyNjUzLDMyNjU1LDMyNjU2LDMy''@;'; put 'put ''NjU3LDMyNjYyLDMyNjYzLDMyNjY4LDMyNjczLDMyNjc0LDMyNjc4LDMyNjgyLDMyNjg1LDMyNjkyLDMyNzAwLDMyNzAzLDMyNzA0LDMyNzA3LDMyNzEyLDMyNzE4LDMyNzE5LDMyNzMxLDMyNzM1LDMyNzM5LDMyNzQxLDMyNzQ0LDMyNzQ4LDMyNzUwLDMyNzUxLDMyNzU0LDMyNzYyLDMyNzY1''@;'; put 'put ''LDMyNzY2LDMyNzY3LDMyNzc1LDMyNzc2LDMyNzc4LDMyNzgxLDMyNzgyLDMyNzgzLDMyNzg1LDMyNzg3LDMyNzg4LDMyNzkwLDMyNzk3LDMyNzk4LDMyNzk5LDMyODAwLDMyODA0LDMyODA2LDMyODEyLDMyODE0LDMyODE2LDMyODIwLDMyODIxLDMyODIzLDMyODI1LDMyODI2LDMyODI4LDMy''@;'; put 'put ''ODMwLDMyODMyLDMyODM2LDMyODY0LDMyODY4LDMyODcwLDMyODc3LDMyODgxLDMyODg1LDMyODk3LDMyOTA0LDMyOTEwLDMyOTI0LDMyOTI2LDMyOTM0LDMyOTM1LDMyOTM5LDMyOTUyLDMyOTUzLDMyOTY4LDMyOTczLDMyOTc1LDMyOTc4LDMyOTgwLDMyOTgxLDMyOTgzLDMyOTg0LDMyOTky''@;'; put 'put ''LDMzMDA1LDMzMDA2LDMzMDA4LDMzMDEwLDMzMDExLDMzMDE0LDMzMDE3LDMzMDE4LDMzMDIyLDMzMDI3LDMzMDM1LDMzMDQ2LDMzMDQ3LDMzMDQ4LDMzMDUyLDMzMDU0LDMzMDU2LDMzMDYwLDMzMDYzLDMzMDY4LDMzMDcyLDMzMDc3LDMzMDgyLDMzMDg0LDMzMDkzLDMzMDk1LDMzMDk4LDMz''@;'; put 'put ''MTAwLDMzMTA2LDMzMTExLDMzMTIwLDMzMTIxLDMzMTI3LDMzMTI4LDMzMTI5LDMzMTMzLDMzMTM1LDMzMTQzLDMzMTUzLDMzMTY4LDMzMTU2LDMzMTU3LDMzMTU4LDMzMTYzLDMzMTY2LDMzMTc0LDMzMTc2LDMzMTc5LDMzMTgyLDMzMTg2LDMzMTk4LDMzMjAyLDMzMjA0LDMzMjExLDMzMjI3''@;'; put 'put ''LDMzMjE5LDMzMjIxLDMzMjI2LDMzMjMwLDMzMjMxLDMzMjM3LDMzMjM5LDMzMjQzLDMzMjQ1LDMzMjQ2LDMzMjQ5LDMzMjUyLDMzMjU5LDMzMjYwLDMzMjY0LDMzMjY1LDMzMjY2LDMzMjY5LDMzMjcwLDMzMjcyLDMzMjczLDMzMjc3LDMzMjc5LDMzMjgwLDMzMjgzLDMzMjk1LDMzMjk5LDMz''@;'; put 'put ''MzAwLDMzMzA1LDMzMzA2LDMzMzA5LDMzMzEzLDMzMzE0LDMzMzIwLDMzMzMwLDMzMzMyLDMzMzM4LDMzMzQ3LDMzMzQ4LDMzMzQ5LDMzMzUwLDMzMzU1LDMzMzU4LDMzMzU5LDMzMzYxLDMzMzY2LDMzMzcyLDMzMzc2LDMzMzc5LDMzMzgzLDMzMzg5LDMzMzk2LDMzNDAzLDMzNDA1LDMzNDA3''@;'; put 'put ''LDMzNDA4LDMzNDA5LDMzNDExLDMzNDEyLDMzNDE1LDMzNDE3LDMzNDE4LDMzNDIyLDMzNDI1LDMzNDI4LDMzNDMwLDMzNDMyLDMzNDM0LDMzNDM1LDMzNDQwLDMzNDQxLDMzNDQzLDMzNDQ0LDMzNDQ3LDMzNDQ4LDMzNDQ5LDMzNDUwLDMzNDU0LDMzNDU2LDMzNDU4LDMzNDYwLDMzNDYzLDMz''@;'; put 'put ''NDY2LDMzNDY4LDMzNDcwLDMzNDcxLDMzNDc4LDMzNDg4LDMzNDkzLDMzNDk4LDMzNTA0LDMzNTA2LDMzNTA4LDMzNTEyLDMzNTE0LDMzNTE3LDMzNTE5LDMzNTI2LDMzNTI3LDMzNTMzLDMzNTM0LDMzNTM2LDMzNTM3LDMzNTQzLDMzNTQ0LDMzNTQ2LDMzNTQ3LDMzNjIwLDMzNTYzLDMzNTY1''@;'; put 'put ''LDMzNTY2LDMzNTY3LDMzNTY5LDMzNTcwLDMzNTgwLDMzNTgxLDMzNTgyLDMzNTg0LDMzNTg3LDMzNTkxLDMzNTk0LDMzNTk2LDMzNTk3LDMzNjAyLDMzNjAzLDMzNjA0LDMzNjA3LDMzNjEzLDMzNjE0LDMzNjE3LDMzNjIxLDMzNjIyLDMzNjIzLDMzNjQ4LDMzNjU2LDMzNjYxLDMzNjYzLDMz''@;'; put 'put ''NjY0LDMzNjY2LDMzNjY4LDMzNjcwLDMzNjc3LDMzNjgyLDMzNjg0LDMzNjg1LDMzNjg4LDMzNjg5LDMzNjkxLDMzNjkyLDMzNjkzLDMzNzAyLDMzNzAzLDMzNzA1LDMzNzA4LDMzNzI2LDMzNzI3LDMzNzI4LDMzNzM1LDMzNzM3LDMzNzQzLDMzNzQ0LDMzNzQ1LDMzNzQ4LDMzNzU3LDMzNjE5''@;'; put 'put ''LDMzNzY4LDMzNzcwLDMzNzgyLDMzNzg0LDMzNzg1LDMzNzg4LDMzNzkzLDMzNzk4LDMzODAyLDMzODA3LDMzODA5LDMzODEzLDMzODE3LDMzNzA5LDMzODM5LDMzODQ5LDMzODYxLDMzODYzLDMzODY0LDMzODY2LDMzODY5LDMzODcxLDMzODczLDMzODc0LDMzODc4LDMzODgwLDMzODgxLDMz''@;'; put 'put ''ODgyLDMzODg0LDMzODg4LDMzODkyLDMzODkzLDMzODk1LDMzODk4LDMzOTA0LDMzOTA3LDMzOTA4LDMzOTEwLDMzOTEyLDMzOTE2LDMzOTE3LDMzOTIxLDMzOTI1LDMzOTM4LDMzOTM5LDMzOTQxLDMzOTUwLDMzOTU4LDMzOTYwLDMzOTYxLDMzOTYyLDMzOTY3LDMzOTY5LDMzOTcyLDMzOTc4''@;'; put 'put ''LDMzOTgxLDMzOTgyLDMzOTg0LDMzOTg2LDMzOTkxLDMzOTkyLDMzOTk2LDMzOTk5LDM0MDAzLDM0MDEyLDM0MDIzLDM0MDI2LDM0MDMxLDM0MDMyLDM0MDMzLDM0MDM0LDM0MDM5LDM0MDk4LDM0MDQyLDM0MDQzLDM0MDQ1LDM0MDUwLDM0MDUxLDM0MDU1LDM0MDYwLDM0MDYyLDM0MDY0LDM0''@;'; put 'put ''MDc2LDM0MDc4LDM0MDgyLDM0MDgzLDM0MDg0LDM0MDg1LDM0MDg3LDM0MDkwLDM0MDkxLDM0MDk1LDM0MDk5LDM0MTAwLDM0MTAyLDM0MTExLDM0MTE4LDM0MTI3LDM0MTI4LDM0MTI5LDM0MTMwLDM0MTMxLDM0MTM0LDM0MTM3LDM0MTQwLDM0MTQxLDM0MTQyLDM0MTQzLDM0MTQ0LDM0MTQ1''@;'; put 'put ''LDM0MTQ2LDM0MTQ4LDM0MTU1LDM0MTU5LDM0MTY5LDM0MTcwLDM0MTcxLDM0MTczLDM0MTc1LDM0MTc3LDM0MTgxLDM0MTgyLDM0MTg1LDM0MTg3LDM0MTg4LDM0MTkxLDM0MTk1LDM0MjAwLDM0MjA1LDM0MjA3LDM0MjA4LDM0MjEwLDM0MjEzLDM0MjE1LDM0MjI4LDM0MjMwLDM0MjMxLDM0''@;'; put 'put ''MjMyLDM0MjM2LDM0MjM3LDM0MjM4LDM0MjM5LDM0MjQyLDM0MjQ3LDM0MjUwLDM0MjUxLDM0MjU0LDM0MjIxLDM0MjY0LDM0MjY2LDM0MjcxLDM0MjcyLDM0Mjc4LDM0MjgwLDM0Mjg1LDM0MjkxLDM0Mjk0LDM0MzAwLDM0MzAzLDM0MzA0LDM0MzA4LDM0MzA5LDM0MzE3LDM0MzE4LDM0MzIw''@;'; put 'put ''LDM0MzIxLDM0MzIyLDM0MzI4LDM0MzI5LDM0MzMxLDM0MzM0LDM0MzM3LDM0MzQzLDM0MzQ1LDM0MzU4LDM0MzYwLDM0MzYyLDM0MzY0LDM0MzY1LDM0MzY4LDM0MzcwLDM0Mzc0LDM0Mzg2LDM0Mzg3LDM0MzkwLDM0MzkxLDM0MzkyLDM0MzkzLDM0Mzk3LDM0NDAwLDM0NDAxLDM0NDAyLDM0''@;'; put 'put ''NDAzLDM0NDA0LDM0NDA5LDM0NDEyLDM0NDE1LDM0NDIxLDM0NDIyLDM0NDIzLDM0NDI2LDM0NDQ1LDM0NDQ5LDM0NDU0LDM0NDU2LDM0NDU4LDM0NDYwLDM0NDY1LDM0NDcwLDM0NDcxLDM0NDcyLDM0NDc3LDM0NDgxLDM0NDgzLDM0NDg0LDM0NDg1LDM0NDg3LDM0NDg4LDM0NDg5LDM0NDk1''@;'; put 'put ''LDM0NDk2LDM0NDk3LDM0NDk5LDM0NTAxLDM0NTEzLDM0NTE0LDM0NTE3LDM0NTE5LDM0NTIyLDM0NTI0LDM0NTI4LDM0NTMxLDM0NTMzLDM0NTM1LDM0NDQwLDM0NTU0LDM0NTU2LDM0NTU3LDM0NTY0LDM0NTY1LDM0NTY3LDM0NTcxLDM0NTc0LDM0NTc1LDM0NTc2LDM0NTc5LDM0NTgwLDM0''@;'; put 'put ''NTg1LDM0NTkwLDM0NTkxLDM0NTkzLDM0NTk1LDM0NjAwLDM0NjA2LDM0NjA3LDM0NjA5LDM0NjEwLDM0NjE3LDM0NjE4LDM0NjIwLDM0NjIxLDM0NjIyLDM0NjI0LDM0NjI3LDM0NjI5LDM0NjM3LDM0NjQ4LDM0NjUzLDM0NjU3LDM0NjYwLDM0NjYxLDM0NjcxLDM0NjczLDM0Njc0LDM0Njgz''@;'; put 'put ''LDM0NjkxLDM0NjkyLDM0NjkzLDM0Njk0LDM0Njk1LDM0Njk2LDM0Njk3LDM0Njk5LDM0NzAwLDM0NzA0LDM0NzA3LDM0NzA5LDM0NzExLDM0NzEyLDM0NzEzLDM0NzE4LDM0NzIwLDM0NzIzLDM0NzI3LDM0NzMyLDM0NzMzLDM0NzM0LDM0NzM3LDM0NzQxLDM0NzUwLDM0NzUxLDM0NzUzLDM0''@;'; put 'put ''NzYwLDM0NzYxLDM0NzYyLDM0NzY2LDM0NzczLDM0Nzc0LDM0Nzc3LDM0Nzc4LDM0NzgwLDM0NzgzLDM0Nzg2LDM0Nzg3LDM0Nzg4LDM0Nzk0LDM0Nzk1LDM0Nzk3LDM0ODAxLDM0ODAzLDM0ODA4LDM0ODEwLDM0ODE1LDM0ODE3LDM0ODE5LDM0ODIyLDM0ODI1LDM0ODI2LDM0ODI3LDM0ODMy''@;'; put 'put ''LDM0ODQxLDM0ODM0LDM0ODM1LDM0ODM2LDM0ODQwLDM0ODQyLDM0ODQzLDM0ODQ0LDM0ODQ2LDM0ODQ3LDM0ODU2LDM0ODYxLDM0ODYyLDM0ODY0LDM0ODY2LDM0ODY5LDM0ODc0LDM0ODc2LDM0ODgxLDM0ODgzLDM0ODg1LDM0ODg4LDM0ODg5LDM0ODkwLDM0ODkxLDM0ODk0LDM0ODk3LDM0''@;'; put 'put ''OTAxLDM0OTAyLDM0OTA0LDM0OTA2LDM0OTA4LDM0OTExLDM0OTEyLDM0OTE2LDM0OTIxLDM0OTI5LDM0OTM3LDM0OTM5LDM0OTQ0LDM0OTY4LDM0OTcwLDM0OTcxLDM0OTcyLDM0OTc1LDM0OTc2LDM0OTg0LDM0OTg2LDM1MDAyLDM1MDA1LDM1MDA2LDM1MDA4LDM1MDE4LDM1MDE5LDM1MDIw''@;'; put 'put ''LDM1MDIxLDM1MDIyLDM1MDI1LDM1MDI2LDM1MDI3LDM1MDM1LDM1MDM4LDM1MDQ3LDM1MDU1LDM1MDU2LDM1MDU3LDM1MDYxLDM1MDYzLDM1MDczLDM1MDc4LDM1MDg1LDM1MDg2LDM1MDg3LDM1MDkzLDM1MDk0LDM1MDk2LDM1MDk3LDM1MDk4LDM1MTAwLDM1MTA0LDM1MTEwLDM1MTExLDM1''@;'; put 'put ''MTEyLDM1MTIwLDM1MTIxLDM1MTIyLDM1MTI1LDM1MTI5LDM1MTMwLDM1MTM0LDM1MTM2LDM1MTM4LDM1MTQxLDM1MTQyLDM1MTQ1LDM1MTUxLDM1MTU0LDM1MTU5LDM1MTYyLDM1MTYzLDM1MTY0LDM1MTY5LDM1MTcwLDM1MTcxLDM1MTc5LDM1MTgyLDM1MTg0LDM1MTg3LDM1MTg5LDM1MTk0''@;'; put 'put ''LDM1MTk1LDM1MTk2LDM1MTk3LDM1MjA5LDM1MjEzLDM1MjE2LDM1MjIwLDM1MjIxLDM1MjI3LDM1MjI4LDM1MjMxLDM1MjMyLDM1MjM3LDM1MjQ4LDM1MjUyLDM1MjUzLDM1MjU0LDM1MjU1LDM1MjYwLDM1Mjg0LDM1Mjg1LDM1Mjg2LDM1Mjg3LDM1Mjg4LDM1MzAxLDM1MzA1LDM1MzA3LDM1''@;'; put 'put ''MzA5LDM1MzEzLDM1MzE1LDM1MzE4LDM1MzIxLDM1MzI1LDM1MzI3LDM1MzMyLDM1MzMzLDM1MzM1LDM1MzQzLDM1MzQ1LDM1MzQ2LDM1MzQ4LDM1MzQ5LDM1MzU4LDM1MzYwLDM1MzYyLDM1MzY0LDM1MzY2LDM1MzcxLDM1MzcyLDM1Mzc1LDM1MzgxLDM1MzgzLDM1Mzg5LDM1MzkwLDM1Mzky''@;'; put 'put ''LDM1Mzk1LDM1Mzk3LDM1Mzk5LDM1NDAxLDM1NDA1LDM1NDA2LDM1NDExLDM1NDE0LDM1NDE1LDM1NDE2LDM1NDIwLDM1NDIxLDM1NDI1LDM1NDI5LDM1NDMxLDM1NDQ1LDM1NDQ2LDM1NDQ3LDM1NDQ5LDM1NDUwLDM1NDUxLDM1NDU0LDM1NDU1LDM1NDU2LDM1NDU5LDM1NDYyLDM1NDY3LDM1''@;'; put 'put ''NDcxLDM1NDcyLDM1NDc0LDM1NDc4LDM1NDc5LDM1NDgxLDM1NDg3LDM1NDk1LDM1NDk3LDM1NTAyLDM1NTAzLDM1NTA3LDM1NTEwLDM1NTExLDM1NTE1LDM1NTE4LDM1NTIzLDM1NTI2LDM1NTI4LDM1NTI5LDM1NTMwLDM1NTM3LDM1NTM5LDM1NTQwLDM1NTQxLDM1NTQzLDM1NTQ5LDM1NTUx''@;'; put 'put ''LDM1NTY0LDM1NTY4LDM1NTcyLDM1NTczLDM1NTc0LDM1NTgwLDM1NTgzLDM1NTg5LDM1NTkwLDM1NTk1LDM1NjAxLDM1NjEyLDM1NjE0LDM1NjE1LDM1NTk0LDM1NjI5LDM1NjMyLDM1NjM5LDM1NjQ0LDM1NjUwLDM1NjUxLDM1NjUyLDM1NjUzLDM1NjU0LDM1NjU2LDM1NjY2LDM1NjY3LDM1''@;'; put 'put ''NjY4LDM1NjczLDM1NjYxLDM1Njc4LDM1NjgzLDM1NjkzLDM1NzAyLDM1NzA0LDM1NzA1LDM1NzA4LDM1NzEwLDM1NzEzLDM1NzE2LDM1NzE3LDM1NzIzLDM1NzI1LDM1NzI3LDM1NzMyLDM1NzMzLDM1NzQwLDM1NzQyLDM1NzQzLDM1ODk2LDM1ODk3LDM1OTAxLDM1OTAyLDM1OTA5LDM1OTEx''@;'; put 'put ''LDM1OTEzLDM1OTE1LDM1OTE5LDM1OTIxLDM1OTIzLDM1OTI0LDM1OTI3LDM1OTI4LDM1OTMxLDM1OTMzLDM1OTI5LDM1OTM5LDM1OTQwLDM1OTQyLDM1OTQ0LDM1OTQ1LDM1OTQ5LDM1OTU1LDM1OTU3LDM1OTU4LDM1OTYzLDM1OTY2LDM1OTc0LDM1OTc1LDM1OTc5LDM1OTg0LDM1OTg2LDM1''@;'; put 'put ''OTg3LDM1OTkzLDM1OTk1LDM1OTk2LDM2MDA0LDM2MDI1LDM2MDI2LDM2MDM3LDM2MDM4LDM2MDQxLDM2MDQzLDM2MDQ3LDM2MDU0LDM2MDUzLDM2MDU3LDM2MDYxLDM2MDY1LDM2MDcyLDM2MDc2LDM2MDc5LDM2MDgwLDM2MDgyLDM2MDg1LDM2MDg3LDM2MDg4LDM2MDk0LDM2MDk1LDM2MDk3''@;'; put 'put ''LDM2MDk5LDM2MTA1LDM2MTE0LDM2MTE5LDM2MTIzLDM2MTk3LDM2MjAxLDM2MjA0LDM2MjA2LDM2MjIzLDM2MjI2LDM2MjI4LDM2MjMyLDM2MjM3LDM2MjQwLDM2MjQxLDM2MjQ1LDM2MjU0LDM2MjU1LDM2MjU2LDM2MjYyLDM2MjY3LDM2MjY4LDM2MjcxLDM2Mjc0LDM2Mjc3LDM2Mjc5LDM2''@;'; put 'put ''MjgxLDM2MjgzLDM2Mjg4LDM2MjkzLDM2Mjk0LDM2Mjk1LDM2Mjk2LDM2Mjk4LDM2MzAyLDM2MzA1LDM2MzA4LDM2MzA5LDM2MzExLDM2MzEzLDM2MzI0LDM2MzI1LDM2MzI3LDM2MzMyLDM2MzM2LDM2Mjg0LDM2MzM3LDM2MzM4LDM2MzQwLDM2MzQ5LDM2MzUzLDM2MzU2LDM2MzU3LDM2MzU4''@;'; put 'put ''LDM2MzYzLDM2MzY5LDM2MzcyLDM2Mzc0LDM2Mzg0LDM2Mzg1LDM2Mzg2LDM2Mzg3LDM2MzkwLDM2MzkxLDM2NDAxLDM2NDAzLDM2NDA2LDM2NDA3LDM2NDA4LDM2NDA5LDM2NDEzLDM2NDE2LDM2NDE3LDM2NDI3LDM2NDI5LDM2NDMwLDM2NDMxLDM2NDM2LDM2NDQzLDM2NDQ0LDM2NDQ1LDM2''@;'; put 'put ''NDQ2LDM2NDQ5LDM2NDUwLDM2NDU3LDM2NDYwLDM2NDYxLDM2NDYzLDM2NDY0LDM2NDY1LDM2NDczLDM2NDc0LDM2NDc1LDM2NDgyLDM2NDgzLDM2NDg5LDM2NDk2LDM2NDk4LDM2NTAxLDM2NTA2LDM2NTA3LDM2NTA5LDM2NTEwLDM2NTE0LDM2NTE5LDM2NTIxLDM2NTI1LDM2NTI2LDM2NTMx''@;'; put 'put ''LDM2NTMzLDM2NTM4LDM2NTM5LDM2NTQ0LDM2NTQ1LDM2NTQ3LDM2NTQ4LDM2NTUxLDM2NTU5LDM2NTYxLDM2NTY0LDM2NTcyLDM2NTg0LDM2NTkwLDM2NTkyLDM2NTkzLDM2NTk5LDM2NjAxLDM2NjAyLDM2NTg5LDM2NjA4LDM2NjEwLDM2NjE1LDM2NjE2LDM2NjIzLDM2NjI0LDM2NjMwLDM2''@;'; put 'put ''NjMxLDM2NjMyLDM2NjM4LDM2NjQwLDM2NjQxLDM2NjQzLDM2NjQ1LDM2NjQ3LDM2NjQ4LDM2NjUyLDM2NjUzLDM2NjU0LDM2NjYwLDM2NjYxLDM2NjYyLDM2NjYzLDM2NjY2LDM2NjcyLDM2NjczLDM2Njc1LDM2Njc5LDM2Njg3LDM2Njg5LDM2NjkwLDM2NjkxLDM2NjkyLDM2NjkzLDM2Njk2''@;'; put 'put ''LDM2NzAxLDM2NzAyLDM2NzA5LDM2NzY1LDM2NzY4LDM2NzY5LDM2NzcyLDM2NzczLDM2Nzc0LDM2Nzg5LDM2NzkwLDM2NzkyLDM2Nzk4LDM2ODAwLDM2ODAxLDM2ODA2LDM2ODEwLDM2ODExLDM2ODEzLDM2ODE2LDM2ODE4LDM2ODE5LDM2ODIxLDM2ODMyLDM2ODM1LDM2ODM2LDM2ODQwLDM2''@;'; put 'put ''ODQ2LDM2ODQ5LDM2ODUzLDM2ODU0LDM2ODU5LDM2ODYyLDM2ODY2LDM2ODY4LDM2ODcyLDM2ODc2LDM2ODg4LDM2ODkxLDM2OTA0LDM2OTA1LDM2OTExLDM2OTA2LDM2OTA4LDM2OTA5LDM2OTE1LDM2OTE2LDM2OTE5LDM2OTI3LDM2OTMxLDM2OTMyLDM2OTQwLDM2OTU1LDM2OTU3LDM2OTYy''@;'; put 'put ''LDM2OTY2LDM2OTY3LDM2OTcyLDM2OTc2LDM2OTgwLDM2OTg1LDM2OTk3LDM3ZTMsMzcwMDMsMzcwMDQsMzcwMDYsMzcwMDgsMzcwMTMsMzcwMTUsMzcwMTYsMzcwMTcsMzcwMTksMzcwMjQsMzcwMjUsMzcwMjYsMzcwMjksMzcwNDAsMzcwNDIsMzcwNDMsMzcwNDQsMzcwNDYsMzcwNTMsMzcw''@;'; put 'put ''NjgsMzcwNTQsMzcwNTksMzcwNjAsMzcwNjEsMzcwNjMsMzcwNjQsMzcwNzcsMzcwNzksMzcwODAsMzcwODEsMzcwODQsMzcwODUsMzcwODcsMzcwOTMsMzcwNzQsMzcxMTAsMzcwOTksMzcxMDMsMzcxMDQsMzcxMDgsMzcxMTgsMzcxMTksMzcxMjAsMzcxMjQsMzcxMjUsMzcxMjYsMzcxMjgs''@;'; put 'put ''MzcxMzMsMzcxMzYsMzcxNDAsMzcxNDIsMzcxNDMsMzcxNDQsMzcxNDYsMzcxNDgsMzcxNTAsMzcxNTIsMzcxNTcsMzcxNTQsMzcxNTUsMzcxNTksMzcxNjEsMzcxNjYsMzcxNjcsMzcxNjksMzcxNzIsMzcxNzQsMzcxNzUsMzcxNzcsMzcxNzgsMzcxODAsMzcxODEsMzcxODcsMzcxOTEsMzcx''@;'; put 'put ''OTIsMzcxOTksMzcyMDMsMzcyMDcsMzcyMDksMzcyMTAsMzcyMTEsMzcyMTcsMzcyMjAsMzcyMjMsMzcyMjksMzcyMzYsMzcyNDEsMzcyNDIsMzcyNDMsMzcyNDksMzcyNTEsMzcyNTMsMzcyNTQsMzcyNTgsMzcyNjIsMzcyNjUsMzcyNjcsMzcyNjgsMzcyNjksMzcyNzIsMzcyNzgsMzcyODEs''@;'; put 'put ''MzcyODYsMzcyODgsMzcyOTIsMzcyOTMsMzcyOTQsMzcyOTYsMzcyOTcsMzcyOTgsMzcyOTksMzczMDIsMzczMDcsMzczMDgsMzczMDksMzczMTEsMzczMTQsMzczMTUsMzczMTcsMzczMzEsMzczMzIsMzczMzUsMzczMzcsMzczMzgsMzczNDIsMzczNDgsMzczNDksMzczNTMsMzczNTQsMzcz''@;'; put 'put ''NTYsMzczNTcsMzczNTgsMzczNTksMzczNjAsMzczNjEsMzczNjcsMzczNjksMzczNzEsMzczNzMsMzczNzYsMzczNzcsMzczODAsMzczODEsMzczODIsMzczODMsMzczODUsMzczODYsMzczODgsMzczOTIsMzczOTQsMzczOTUsMzczOTgsMzc0MDAsMzc0MDQsMzc0MDUsMzc0MTEsMzc0MTIs''@;'; put 'put ''Mzc0MTMsMzc0MTQsMzc0MTYsMzc0MjIsMzc0MjMsMzc0MjQsMzc0MjcsMzc0MjksMzc0MzAsMzc0MzIsMzc0MzMsMzc0MzQsMzc0MzYsMzc0MzgsMzc0NDAsMzc0NDIsMzc0NDMsMzc0NDYsMzc0NDcsMzc0NTAsMzc0NTMsMzc0NTQsMzc0NTUsMzc0NTcsMzc0NjQsMzc0NjUsMzc0NjgsMzc0''@;'; put 'put ''NjksMzc0NzIsMzc0NzMsMzc0NzcsMzc0NzksMzc0ODAsMzc0ODEsMzc0ODYsMzc0ODcsMzc0ODgsMzc0OTMsMzc0OTQsMzc0OTUsMzc0OTYsMzc0OTcsMzc0OTksMzc1MDAsMzc1MDEsMzc1MDMsMzc1MTIsMzc1MTMsMzc1MTQsMzc1MTcsMzc1MTgsMzc1MjIsMzc1MjcsMzc1MjksMzc1MzUs''@;'; put 'put ''Mzc1MzYsMzc1NDAsMzc1NDEsMzc1NDMsMzc1NDQsMzc1NDcsMzc1NTEsMzc1NTQsMzc1NTgsMzc1NjAsMzc1NjIsMzc1NjMsMzc1NjQsMzc1NjUsMzc1NjcsMzc1NjgsMzc1NjksMzc1NzAsMzc1NzEsMzc1NzMsMzc1NzQsMzc1NzUsMzc1NzYsMzc1NzksMzc1ODAsMzc1ODEsMzc1ODIsMzc1''@;'; put 'put ''ODQsMzc1ODcsMzc1ODksMzc1OTEsMzc1OTIsMzc1OTMsMzc1OTYsMzc1OTcsMzc1OTksMzc2MDAsMzc2MDEsMzc2MDMsMzc2MDUsMzc2MDcsMzc2MDgsMzc2MTIsMzc2MTQsMzc2MTYsMzc2MjUsMzc2MjcsMzc2MzEsMzc2MzIsMzc2MzQsMzc2NDAsMzc2NDUsMzc2NDksMzc2NTIsMzc2NTMs''@;'; put 'put ''Mzc2NjAsMzc2NjEsMzc2NjIsMzc2NjMsMzc2NjUsMzc2NjgsMzc2NjksMzc2NzEsMzc2NzMsMzc2NzQsMzc2ODMsMzc2ODQsMzc2ODYsMzc2ODcsMzc3MDMsMzc3MDQsMzc3MDUsMzc3MTIsMzc3MTMsMzc3MTQsMzc3MTcsMzc3MTksMzc3MjAsMzc3MjIsMzc3MjYsMzc3MzIsMzc3MzMsMzc3''@;'; put 'put ''MzUsMzc3MzcsMzc3MzgsMzc3NDEsMzc3NDMsMzc3NDQsMzc3NDUsMzc3NDcsMzc3NDgsMzc3NTAsMzc3NTQsMzc3NTcsMzc3NTksMzc3NjAsMzc3NjEsMzc3NjIsMzc3NjgsMzc3NzAsMzc3NzEsMzc3NzMsMzc3NzUsMzc3NzgsMzc3ODEsMzc3ODQsMzc3ODcsMzc3OTAsMzc3OTMsMzc3OTUs''@;'; put 'put ''Mzc3OTYsMzc3OTgsMzc4MDAsMzc4MDMsMzc4MTIsMzc4MTMsMzc4MTQsMzc4MTgsMzc4MDEsMzc4MjUsMzc4MjgsMzc4MjksMzc4MzAsMzc4MzEsMzc4MzMsMzc4MzQsMzc4MzUsMzc4MzYsMzc4MzcsMzc4NDMsMzc4NDksMzc4NTIsMzc4NTQsMzc4NTUsMzc4NTgsMzc4NjIsMzc4NjMsMzc4''@;'; put 'put ''ODEsMzc4NzksMzc4ODAsMzc4ODIsMzc4ODMsMzc4ODUsMzc4ODksMzc4OTAsMzc4OTIsMzc4OTYsMzc4OTcsMzc5MDEsMzc5MDIsMzc5MDMsMzc5MDksMzc5MTAsMzc5MTEsMzc5MTksMzc5MzQsMzc5MzUsMzc5MzcsMzc5MzgsMzc5MzksMzc5NDAsMzc5NDcsMzc5NTEsMzc5NDksMzc5NTUs''@;'; put 'put ''Mzc5NTcsMzc5NjAsMzc5NjIsMzc5NjQsMzc5NzMsMzc5NzcsMzc5ODAsMzc5ODMsMzc5ODUsMzc5ODcsMzc5OTIsMzc5OTUsMzc5OTcsMzc5OTgsMzc5OTksMzgwMDEsMzgwMDIsMzgwMjAsMzgwMTksMzgyNjQsMzgyNjUsMzgyNzAsMzgyNzYsMzgyODAsMzgyODQsMzgyODUsMzgyODYsMzgz''@;'; put 'put ''MDEsMzgzMDIsMzgzMDMsMzgzMDUsMzgzMTAsMzgzMTMsMzgzMTUsMzgzMTYsMzgzMjQsMzgzMjYsMzgzMzAsMzgzMzMsMzgzMzUsMzgzNDIsMzgzNDQsMzgzNDUsMzgzNDcsMzgzNTIsMzgzNTMsMzgzNTQsMzgzNTUsMzgzNjEsMzgzNjIsMzgzNjUsMzgzNjYsMzgzNjcsMzgzNjgsMzgzNzIs''@;'; put 'put ''MzgzNzQsMzg0MjksMzg0MzAsMzg0MzQsMzg0MzYsMzg0MzcsMzg0MzgsMzg0NDQsMzg0NDksMzg0NTEsMzg0NTUsMzg0NTYsMzg0NTcsMzg0NTgsMzg0NjAsMzg0NjEsMzg0NjUsMzg0ODIsMzg0ODQsMzg0ODYsMzg0ODcsMzg0ODgsMzg0OTcsMzg1MTAsMzg1MTYsMzg1MjMsMzg1MjQsMzg1''@;'; put 'put ''MjYsMzg1MjcsMzg1MjksMzg1MzAsMzg1MzEsMzg1MzIsMzg1MzcsMzg1NDUsMzg1NTAsMzg1NTQsMzg1NTcsMzg1NTksMzg1NjQsMzg1NjUsMzg1NjYsMzg1NjksMzg1NzQsMzg1NzUsMzg1NzksMzg1ODYsMzg2MDIsMzg2MTAsMjM5ODYsMzg2MTYsMzg2MTgsMzg2MjEsMzg2MjIsMzg2MjMs''@;'; put 'put ''Mzg2MzMsMzg2MzksMzg2NDEsMzg2NTAsMzg2NTgsMzg2NTksMzg2NjEsMzg2NjUsMzg2ODIsMzg2ODMsMzg2ODUsMzg2ODksMzg2OTAsMzg2OTEsMzg2OTYsMzg3MDUsMzg3MDcsMzg3MjEsMzg3MjMsMzg3MzAsMzg3MzQsMzg3MzUsMzg3NDEsMzg3NDMsMzg3NDQsMzg3NDYsMzg3NDcsMzg3''@;'; put 'put ''NTUsMzg3NTksMzg3NjIsMzg3NjYsMzg3NzEsMzg3NzQsMzg3NzUsMzg3NzYsMzg3NzksMzg3ODEsMzg3ODMsMzg3ODQsMzg3OTMsMzg4MDUsMzg4MDYsMzg4MDcsMzg4MDksMzg4MTAsMzg4MTQsMzg4MTUsMzg4MTgsMzg4MjgsMzg4MzAsMzg4MzMsMzg4MzQsMzg4MzcsMzg4MzgsMzg4NDAs''@;'; put 'put ''Mzg4NDEsMzg4NDIsMzg4NDQsMzg4NDYsMzg4NDcsMzg4NDksMzg4NTIsMzg4NTMsMzg4NTUsMzg4NTcsMzg4NTgsMzg4NjAsMzg4NjEsMzg4NjIsMzg4NjQsMzg4NjUsMzg4NjgsMzg4NzEsMzg4NzIsMzg4NzMsMzg4NzcsMzg4NzgsMzg4ODAsMzg4NzUsMzg4ODEsMzg4ODQsMzg4OTUsMzg4''@;'; put 'put ''OTcsMzg5MDAsMzg5MDMsMzg5MDQsMzg5MDYsMzg5MTksMzg5MjIsMzg5MzcsMzg5MjUsMzg5MjYsMzg5MzIsMzg5MzQsMzg5NDAsMzg5NDIsMzg5NDQsMzg5NDcsMzg5NTAsMzg5NTUsMzg5NTgsMzg5NTksMzg5NjAsMzg5NjIsMzg5NjMsMzg5NjUsMzg5NDksMzg5NzQsMzg5ODAsMzg5ODMs''@;'; put 'put ''Mzg5ODYsMzg5OTMsMzg5OTQsMzg5OTUsMzg5OTgsMzg5OTksMzkwMDEsMzkwMDIsMzkwMTAsMzkwMTEsMzkwMTMsMzkwMTQsMzkwMTgsMzkwMjAsMzkwODMsMzkwODUsMzkwODYsMzkwODgsMzkwOTIsMzkwOTUsMzkwOTYsMzkwOTgsMzkwOTksMzkxMDMsMzkxMDYsMzkxMDksMzkxMTIsMzkx''@;'; put 'put ''MTYsMzkxMzcsMzkxMzksMzkxNDEsMzkxNDIsMzkxNDMsMzkxNDYsMzkxNTUsMzkxNTgsMzkxNzAsMzkxNzUsMzkxNzYsMzkxODUsMzkxODksMzkxOTAsMzkxOTEsMzkxOTQsMzkxOTUsMzkxOTYsMzkxOTksMzkyMDIsMzkyMDYsMzkyMDcsMzkyMTEsMzkyMTcsMzkyMTgsMzkyMTksMzkyMjAs''@;'; put 'put ''MzkyMjEsMzkyMjUsMzkyMjYsMzkyMjcsMzkyMjgsMzkyMzIsMzkyMzMsMzkyMzgsMzkyMzksMzkyNDAsMzkyNDUsMzkyNDYsMzkyNTIsMzkyNTYsMzkyNTcsMzkyNTksMzkyNjAsMzkyNjIsMzkyNjMsMzkyNjQsMzkzMjMsMzkzMjUsMzkzMjcsMzkzMzQsMzkzNDQsMzkzNDUsMzkzNDYsMzkz''@;'; put 'put ''NDksMzkzNTMsMzkzNTQsMzkzNTcsMzkzNTksMzkzNjMsMzkzNjksMzkzNzksMzkzODAsMzkzODUsMzkzODYsMzkzODgsMzkzOTAsMzkzOTksMzk0MDIsMzk0MDMsMzk0MDQsMzk0MDgsMzk0MTIsMzk0MTMsMzk0MTcsMzk0MjEsMzk0MjIsMzk0MjYsMzk0MjcsMzk0MjgsMzk0MzUsMzk0MzYs''@;'; put 'put ''Mzk0NDAsMzk0NDEsMzk0NDYsMzk0NTQsMzk0NTYsMzk0NTgsMzk0NTksMzk0NjAsMzk0NjMsMzk0NjksMzk0NzAsMzk0NzUsMzk0NzcsMzk0NzgsMzk0ODAsMzk0OTUsMzk0ODksMzk0OTIsMzk0OTgsMzk0OTksMzk1MDAsMzk1MDIsMzk1MDUsMzk1MDgsMzk1MTAsMzk1MTcsMzk1OTQsMzk1''@;'; put 'put ''OTYsMzk1OTgsMzk1OTksMzk2MDIsMzk2MDQsMzk2MDUsMzk2MDYsMzk2MDksMzk2MTEsMzk2MTQsMzk2MTUsMzk2MTcsMzk2MTksMzk2MjIsMzk2MjQsMzk2MzAsMzk2MzIsMzk2MzQsMzk2MzcsMzk2MzgsMzk2MzksMzk2NDMsMzk2NDQsMzk2NDgsMzk2NTIsMzk2NTMsMzk2NTUsMzk2NTcs''@;'; put 'put ''Mzk2NjAsMzk2NjYsMzk2NjcsMzk2NjksMzk2NzMsMzk2NzQsMzk2NzcsMzk2NzksMzk2ODAsMzk2ODEsMzk2ODIsMzk2ODMsMzk2ODQsMzk2ODUsMzk2ODgsMzk2ODksMzk2OTEsMzk2OTIsMzk2OTMsMzk2OTQsMzk2OTYsMzk2OTgsMzk3MDIsMzk3MDUsMzk3MDcsMzk3MDgsMzk3MTIsMzk3''@;'; put 'put ''MTgsMzk3MjMsMzk3MjUsMzk3MzEsMzk3MzIsMzk3MzMsMzk3MzUsMzk3MzcsMzk3MzgsMzk3NDEsMzk3NTIsMzk3NTUsMzk3NTYsMzk3NjUsMzk3NjYsMzk3NjcsMzk3NzEsMzk3NzQsMzk3NzcsMzk3NzksMzk3ODEsMzk3ODIsMzk3ODQsMzk3ODYsMzk3ODcsMzk3ODgsMzk3ODksMzk3OTAs''@;'; put 'put ''Mzk3OTUsMzk3OTcsMzk3OTksMzk4MDAsMzk4MDEsMzk4MDcsMzk4MDgsMzk4MTIsMzk4MTMsMzk4MTQsMzk4MTUsMzk4MTcsMzk4MTgsMzk4MTksMzk4MjEsMzk4MjMsMzk4MjQsMzk4MjgsMzk4MzQsMzk4MzcsMzk4MzgsMzk4NDYsMzk4NDcsMzk4NDksMzk4NTIsMzk4NTYsMzk4NTcsMzk4''@;'; put 'put ''NTgsMzk4NjMsMzk4NjQsMzk4NjcsMzk4NjgsMzk4NzAsMzk4NzEsMzk4NzMsMzk4NzksMzk4ODAsMzk4ODYsMzk4ODgsMzk4OTUsMzk4OTYsMzk5MDEsMzk5MDMsMzk5MDksMzk5MTEsMzk5MTQsMzk5MTUsMzk5MTksMzk5MjMsMzk5MjcsMzk5MjgsMzk5MjksMzk5MzAsMzk5MzMsMzk5MzUs''@;'; put 'put ''Mzk5MzYsMzk5MzgsMzk5NDcsMzk5NTEsMzk5NTMsMzk5NTgsMzk5NjAsMzk5NjEsMzk5NjIsMzk5NjQsMzk5NjYsMzk5NzAsMzk5NzEsMzk5NzQsMzk5NzUsMzk5NzYsMzk5NzcsMzk5NzgsMzk5ODUsMzk5ODksMzk5OTAsMzk5OTEsMzk5OTcsNDAwMDEsNDAwMDMsNDAwMDQsNDAwMDUsNDAw''@;'; put 'put ''MDksNDAwMTAsNDAwMTQsNDAwMTUsNDAwMTYsNDAwMTksNDAwMjAsNDAwMjIsNDAwMjQsNDAwMjcsNDAwMjksNDAwMzAsNDAwMzEsNDAwMzUsNDAwNDEsNDAwNDIsNDAwMjgsNDAwNDMsNDAwNDAsNDAwNDYsNDAwNDgsNDAwNTAsNDAwNTMsNDAwNTUsNDAwNTksNDAxNjYsNDAxNzgsNDAxODMs''@;'; put 'put ''NDAxODUsNDAyMDMsNDAxOTQsNDAyMDksNDAyMTUsNDAyMTYsNDAyMjAsNDAyMjEsNDAyMjIsNDAyMzksNDAyNDAsNDAyNDIsNDAyNDMsNDAyNDQsNDAyNTAsNDAyNTIsNDAyNjEsNDAyNTMsNDAyNTgsNDAyNTksNDAyNjMsNDAyNjYsNDAyNzUsNDAyNzYsNDAyODcsNDAyOTEsNDAyOTAsNDAy''@;'; put 'put ''OTMsNDAyOTcsNDAyOTgsNDAyOTksNDAzMDQsNDAzMTAsNDAzMTEsNDAzMTUsNDAzMTYsNDAzMTgsNDAzMjMsNDAzMjQsNDAzMjYsNDAzMzAsNDAzMzMsNDAzMzQsNDAzMzgsNDAzMzksNDAzNDEsNDAzNDIsNDAzNDMsNDAzNDQsNDAzNTMsNDAzNjIsNDAzNjQsNDAzNjYsNDAzNjksNDAzNzMs''@;'; put 'put ''NDAzNzcsNDAzODAsNDAzODMsNDAzODcsNDAzOTEsNDAzOTMsNDAzOTQsNDA0MDQsNDA0MDUsNDA0MDYsNDA0MDcsNDA0MTAsNDA0MTQsNDA0MTUsNDA0MTYsNDA0MjEsNDA0MjMsNDA0MjUsNDA0MjcsNDA0MzAsNDA0MzIsNDA0MzUsNDA0MzYsNDA0NDYsNDA0NTgsNDA0NTAsNDA0NTUsNDA0''@;'; put 'put ''NjIsNDA0NjQsNDA0NjUsNDA0NjYsNDA0NjksNDA0NzAsNDA0NzMsNDA0NzYsNDA0NzcsNDA1NzAsNDA1NzEsNDA1NzIsNDA1NzYsNDA1NzgsNDA1NzksNDA1ODAsNDA1ODEsNDA1ODMsNDA1OTAsNDA1OTEsNDA1OTgsNDA2MDAsNDA2MDMsNDA2MDYsNDA2MTIsNDA2MTYsNDA2MjAsNDA2MjIs''@;'; put 'put ''NDA2MjMsNDA2MjQsNDA2MjcsNDA2MjgsNDA2MjksNDA2NDYsNDA2NDgsNDA2NTEsNDA2NjEsNDA2NzEsNDA2NzYsNDA2NzksNDA2ODQsNDA2ODUsNDA2ODYsNDA2ODgsNDA2ODksNDA2OTAsNDA2OTMsNDA2OTYsNDA3MDMsNDA3MDYsNDA3MDcsNDA3MTMsNDA3MTksNDA3MjAsNDA3MjEsNDA3''@;'; put 'put ''MjIsNDA3MjQsNDA3MjYsNDA3MjcsNDA3MjksNDA3MzAsNDA3MzEsNDA3MzUsNDA3MzgsNDA3NDIsNDA3NDYsNDA3NDcsNDA3NTEsNDA3NTMsNDA3NTQsNDA3NTYsNDA3NTksNDA3NjEsNDA3NjIsNDA3NjQsNDA3NjUsNDA3NjcsNDA3NjksNDA3NzEsNDA3NzIsNDA3NzMsNDA3NzQsNDA3NzUs''@;'; put 'put ''NDA3ODcsNDA3ODksNDA3OTAsNDA3OTEsNDA3OTIsNDA3OTQsNDA3OTcsNDA3OTgsNDA4MDgsNDA4MDksNDA4MTMsNDA4MTQsNDA4MTUsNDA4MTYsNDA4MTcsNDA4MTksNDA4MjEsNDA4MjYsNDA4MjksNDA4NDcsNDA4NDgsNDA4NDksNDA4NTAsNDA4NTIsNDA4NTQsNDA4NTUsNDA4NjIsNDA4''@;'; put 'put ''NjUsNDA4NjYsNDA4NjcsNDA4NjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSxpYm04NjY6WzEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgs''@;'; put 'put ''MTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDk2MTcsOTYxOCw5NjE5LDk0NzQs''@;'; put 'put ''OTUwOCw5NTY5LDk1NzAsOTU1OCw5NTU3LDk1NzEsOTU1Myw5NTU5LDk1NjUsOTU2NCw5NTYzLDk0ODgsOTQ5Miw5NTI0LDk1MTYsOTUwMCw5NDcyLDk1MzIsOTU2Niw5NTY3LDk1NjIsOTU1Niw5NTc3LDk1NzQsOTU2OCw5NTUyLDk1ODAsOTU3NSw5NTc2LDk1NzIsOTU3Myw5NTYxLDk1NjAs''@;'; put 'put ''OTU1NCw5NTU1LDk1NzksOTU3OCw5NDk2LDk0ODQsOTYwOCw5NjA0LDk2MTIsOTYxNiw5NjAwLDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsMTAyNSwxMTA1LDEwMjgsMTEwOCwxMDMxLDExMTEs''@;'; put 'put ''MTAzOCwxMTE4LDE3Niw4NzI5LDE4Myw4NzMwLDg0NzAsMTY0LDk2MzIsMTYwXSwiaXNvLTg4NTktMiI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMs''@;'; put 'put ''MTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDI2MCw3MjgsMzIxLDE2NCwzMTcsMzQ2LDE2NywxNjgsMzUyLDM1MCwzNTYsMzc3LDE3MywzODEsMzc5LDE3NiwyNjEsNzMxLDMyMiwxODAsMzE4LDM0Nyw3MTEsMTg0LDM1MywzNTEsMzU3LDM3OCw3MzMsMzgyLDM4MCwzNDAsMTkzLDE5NCwy''@;'; put 'put ''NTgsMTk2LDMxMywyNjIsMTk5LDI2OCwyMDEsMjgwLDIwMywyODIsMjA1LDIwNiwyNzAsMjcyLDMyMywzMjcsMjExLDIxMiwzMzYsMjE0LDIxNSwzNDQsMzY2LDIxOCwzNjgsMjIwLDIyMSwzNTQsMjIzLDM0MSwyMjUsMjI2LDI1OSwyMjgsMzE0LDI2MywyMzEsMjY5LDIzMywyODEsMjM1LDI4''@;'; put 'put ''MywyMzcsMjM4LDI3MSwyNzMsMzI0LDMyOCwyNDMsMjQ0LDMzNywyNDYsMjQ3LDM0NSwzNjcsMjUwLDM2OSwyNTIsMjUzLDM1NSw3MjldLCJpc28tODg1OS0zIjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUs''@;'; put 'put ''MTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMjk0LDcyOCwxNjMsMTY0LG51bGwsMjkyLDE2NywxNjgsMzA0LDM1MCwyODYsMzA4LDE3MyxudWxsLDM3OSwxNzYsMjk1LDE3OCwxNzksMTgwLDE4MSwyOTMsMTgzLDE4NCwzMDUsMzUx''@;'; put 'put ''LDI4NywzMDksMTg5LG51bGwsMzgwLDE5MiwxOTMsMTk0LG51bGwsMTk2LDI2NiwyNjQsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsbnVsbCwyMDksMjEwLDIxMSwyMTIsMjg4LDIxNCwyMTUsMjg0LDIxNywyMTgsMjE5LDIyMCwzNjQsMzQ4LDIyMywyMjQsMjI1LDIyNixu''@;'; put 'put ''dWxsLDIyOCwyNjcsMjY1LDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LG51bGwsMjQxLDI0MiwyNDMsMjQ0LDI4OSwyNDYsMjQ3LDI4NSwyNDksMjUwLDI1MSwyNTIsMzY1LDM0OSw3MjldLCJpc28tODg1OS00IjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwx''@;'; put 'put ''MzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMjYwLDMxMiwzNDIsMTY0LDI5NiwzMTUsMTY3LDE2OCwzNTIsMjc0LDI5MCwzNTgsMTczLDM4MSwxNzUsMTc2LDI2''@;'; put 'put ''MSw3MzEsMzQzLDE4MCwyOTcsMzE2LDcxMSwxODQsMzUzLDI3NSwyOTEsMzU5LDMzMCwzODIsMzMxLDI1NiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwzMDIsMjY4LDIwMSwyODAsMjAzLDI3OCwyMDUsMjA2LDI5OCwyNzIsMzI1LDMzMiwzMTAsMjEyLDIxMywyMTQsMjE1LDIxNiwzNzAsMjE4''@;'; put 'put ''LDIxOSwyMjAsMzYwLDM2MiwyMjMsMjU3LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDMwMywyNjksMjMzLDI4MSwyMzUsMjc5LDIzNywyMzgsMjk5LDI3MywzMjYsMzMzLDMxMSwyNDQsMjQ1LDI0NiwyNDcsMjQ4LDM3MSwyNTAsMjUxLDI1MiwzNjEsMzYzLDcyOV0sImlzby04ODU5LTUiOlsx''@;'; put 'put ''MjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwxMDI1LDEwMjYsMTAyNywxMDI4LDEwMjksMTAzMCwxMDMx''@;'; put 'put ''LDEwMzIsMTAzMywxMDM0LDEwMzUsMTAzNiwxNzMsMTAzOCwxMDM5LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQs''@;'; put 'put ''MTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcs''@;'; put 'put ''MTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsODQ3MCwxMTA1LDExMDYsMTEwNywxMTA4LDExMDksMTExMCwxMTExLDExMTIsMTExMywxMTE0LDExMTUsMTExNiwxNjcsMTExOCwxMTE5XSwiaXNvLTg4NTktNiI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywx''@;'; put 'put ''MzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLG51bGwsbnVsbCxudWxsLDE2NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE1NDgsMTczLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTU2MyxudWxsLG51bGwsbnVsbCwxNTY3LG51bGwsMTU2OSwxNTcwLDE1NzEsMTU3MiwxNTczLDE1NzQsMTU3NSwxNTc2LDE1NzcsMTU3OCwxNTc5LDE1ODAsMTU4MSwxNTgyLDE1ODMsMTU4NCwx''@;'; put 'put ''NTg1LDE1ODYsMTU4NywxNTg4LDE1ODksMTU5MCwxNTkxLDE1OTIsMTU5MywxNTk0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxNjAwLDE2MDEsMTYwMiwxNjAzLDE2MDQsMTYwNSwxNjA2LDE2MDcsMTYwOCwxNjA5LDE2MTAsMTYxMSwxNjEyLDE2MTMsMTYxNCwxNjE1LDE2MTYsMTYxNywx''@;'; put 'put ''NjE4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLCJpc28tODg1OS03IjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0Nywx''@;'; put 'put ''NDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsODIxNiw4MjE3LDE2Myw4MzY0LDgzNjcsMTY2LDE2NywxNjgsMTY5LDg5MCwxNzEsMTcyLDE3MyxudWxsLDgyMTMsMTc2LDE3NywxNzgsMTc5LDkwMCw5MDEsOTAyLDE4Myw5MDQsOTA1LDkwNiwxODcs''@;'; put 'put ''OTA4LDE4OSw5MTAsOTExLDkxMiw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LG51bGwsOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDkzOCw5MzksOTQwLDk0MSw5NDIsOTQzLDk0NCw5NDUsOTQ2LDk0Nyw5NDgs''@;'; put 'put ''OTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Miw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksOTcwLDk3MSw5NzIsOTczLDk3NCxudWxsXSwiaXNvLTg4NTktOCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywx''@;'; put 'put ''MzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLG51bGwsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwyMTUsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwx''@;'; put 'put ''NzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMjQ3LDE4NywxODgsMTg5LDE5MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODIxNSwxNDg4LDE0ODksMTQ5MCwxNDkxLDE0OTIsMTQ5MywxNDk0LDE0OTUsMTQ5NiwxNDk3LDE0OTgsMTQ5OSwxNTAwLDE1MDEsMTUwMiwxNTAzLDE1MDQsMTUwNSwxNTA2LDE1MDcsMTUwOCwxNTA5LDE1MTAsMTUx''@;'; put 'put ''MSwxNTEyLDE1MTMsMTUxNCxudWxsLG51bGwsODIwNiw4MjA3LG51bGxdLCJpc28tODg1OS0xMCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0''@;'; put 'put ''LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDI2MCwyNzQsMjkwLDI5OCwyOTYsMzEwLDE2NywzMTUsMjcyLDM1MiwzNTgsMzgxLDE3MywzNjIsMzMwLDE3NiwyNjEsMjc1LDI5MSwyOTksMjk3LDMxMSwxODMsMzE2LDI3MywzNTMsMzU5LDM4Miw4MjEzLDM2MywzMzEsMjU2LDE5MywxOTQsMTk1''@;'; put 'put ''LDE5NiwxOTcsMTk4LDMwMiwyNjgsMjAxLDI4MCwyMDMsMjc4LDIwNSwyMDYsMjA3LDIwOCwzMjUsMzMyLDIxMSwyMTIsMjEzLDIxNCwzNjAsMjE2LDM3MCwyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyNTcsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMzAzLDI2OSwyMzMsMjgxLDIzNSwyNzks''@;'; put 'put ''MjM3LDIzOCwyMzksMjQwLDMyNiwzMzMsMjQzLDI0NCwyNDUsMjQ2LDM2MSwyNDgsMzcxLDI1MCwyNTEsMjUyLDI1MywyNTQsMzEyXSwiaXNvLTg4NTktMTMiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwx''@;'; put 'put ''NDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCw4MjIxLDE2MiwxNjMsMTY0LDgyMjIsMTY2LDE2NywyMTYsMTY5LDM0MiwxNzEsMTcyLDE3MywxNzQsMTk4LDE3NiwxNzcsMTc4LDE3OSw4MjIwLDE4MSwxODIsMTgzLDI0OCwxODUsMzQz''@;'; put 'put ''LDE4NywxODgsMTg5LDE5MCwyMzAsMjYwLDMwMiwyNTYsMjYyLDE5NiwxOTcsMjgwLDI3NCwyNjgsMjAxLDM3NywyNzgsMjkwLDMxMCwyOTgsMzE1LDM1MiwzMjMsMzI1LDIxMSwzMzIsMjEzLDIxNCwyMTUsMzcwLDMyMSwzNDYsMzYyLDIyMCwzNzksMzgxLDIyMywyNjEsMzAzLDI1NywyNjMs''@;'; put 'put ''MjI4LDIyOSwyODEsMjc1LDI2OSwyMzMsMzc4LDI3OSwyOTEsMzExLDI5OSwzMTYsMzUzLDMyNCwzMjYsMjQzLDMzMywyNDUsMjQ2LDI0NywzNzEsMzIyLDM0NywzNjMsMjUyLDM4MCwzODIsODIxN10sImlzby04ODU5LTE0IjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYs''@;'; put 'put ''MTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsNzY4Miw3NjgzLDE2MywyNjYsMjY3LDc2OTAsMTY3LDc4MDgsMTY5LDc4MTAsNzY5MSw3OTIyLDE3MywxNzQsMzc2LDc3''@;'; put 'put ''MTAsNzcxMSwyODgsMjg5LDc3NDQsNzc0NSwxODIsNzc2Niw3ODA5LDc3NjcsNzgxMSw3Nzc2LDc5MjMsNzgxMiw3ODEzLDc3NzcsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDM3MiwyMDksMjEwLDIxMSwyMTIsMjEzLDIx''@;'; put 'put ''NCw3Nzg2LDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDM3NCwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDM3MywyNDEsMjQyLDI0MywyNDQsMjQ1LDI0Niw3Nzg3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDM3NSwy''@;'; put 'put ''NTVdLCJpc28tODg1OS0xNSI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDE2MSwxNjIsMTYzLDgz''@;'; put 'put ''NjQsMTY1LDM1MiwxNjcsMzUzLDE2OSwxNzAsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMzgxLDE4MSwxODIsMTgzLDM4MiwxODUsMTg2LDE4NywzMzgsMzM5LDM3NiwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIw''@;'; put 'put ''NSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2''@;'; put 'put ''LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1XSwiaXNvLTg4NTktMTYiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUs''@;'; put 'put ''MTU2LDE1NywxNTgsMTU5LDE2MCwyNjAsMjYxLDMyMSw4MzY0LDgyMjIsMzUyLDE2NywzNTMsMTY5LDUzNiwxNzEsMzc3LDE3MywzNzgsMzc5LDE3NiwxNzcsMjY4LDMyMiwzODEsODIyMSwxODIsMTgzLDM4MiwyNjksNTM3LDE4NywzMzgsMzM5LDM3NiwzODAsMTkyLDE5MywxOTQsMjU4LDE5''@;'; put 'put ''NiwyNjIsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDI3MiwzMjMsMjEwLDIxMSwyMTIsMzM2LDIxNCwzNDYsMzY4LDIxNywyMTgsMjE5LDIyMCwyODAsNTM4LDIyMywyMjQsMjI1LDIyNiwyNTksMjI4LDI2MywyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3''@;'; put 'put ''LDIzOCwyMzksMjczLDMyNCwyNDIsMjQzLDI0NCwzMzcsMjQ2LDM0NywzNjksMjQ5LDI1MCwyNTEsMjUyLDI4MSw1MzksMjU1XSwia29pOC1yIjpbOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDkyLDk0OTYsOTUwMCw5NTA4LDk1MTYsOTUyNCw5NTMyLDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5''@;'; put 'put ''NjE3LDk2MTgsOTYxOSw4OTkyLDk2MzIsODcyOSw4NzMwLDg3NzYsODgwNCw4ODA1LDE2MCw4OTkzLDE3NiwxNzgsMTgzLDI0Nyw5NTUyLDk1NTMsOTU1NCwxMTA1LDk1NTUsOTU1Niw5NTU3LDk1NTgsOTU1OSw5NTYwLDk1NjEsOTU2Miw5NTYzLDk1NjQsOTU2NSw5NTY2LDk1NjcsOTU2OCw5''@;'; put 'put ''NTY5LDEwMjUsOTU3MCw5NTcxLDk1NzIsOTU3Myw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsOTU3OSw5NTgwLDE2OSwxMTAyLDEwNzIsMTA3MywxMDk0LDEwNzYsMTA3NywxMDkyLDEwNzUsMTA5MywxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTEwMywxMDg4LDEw''@;'; put 'put ''ODksMTA5MCwxMDkxLDEwNzgsMTA3NCwxMTAwLDEwOTksMTA3OSwxMDk2LDExMDEsMTA5NywxMDk1LDEwOTgsMTA3MCwxMDQwLDEwNDEsMTA2MiwxMDQ0LDEwNDUsMTA2MCwxMDQzLDEwNjEsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNzEsMTA1NiwxMDU3LDEw''@;'; put 'put ''NTgsMTA1OSwxMDQ2LDEwNDIsMTA2OCwxMDY3LDEwNDcsMTA2NCwxMDY5LDEwNjUsMTA2MywxMDY2XSwia29pOC11IjpbOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDkyLDk0OTYsOTUwMCw5NTA4LDk1MTYsOTUyNCw5NTMyLDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5NjE3LDk2MTgsOTYxOSw4''@;'; put 'put ''OTkyLDk2MzIsODcyOSw4NzMwLDg3NzYsODgwNCw4ODA1LDE2MCw4OTkzLDE3NiwxNzgsMTgzLDI0Nyw5NTUyLDk1NTMsOTU1NCwxMTA1LDExMDgsOTU1NiwxMTEwLDExMTEsOTU1OSw5NTYwLDk1NjEsOTU2Miw5NTYzLDExNjksMTExOCw5NTY2LDk1NjcsOTU2OCw5NTY5LDEwMjUsMTAyOCw5''@;'; put 'put ''NTcxLDEwMzAsMTAzMSw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsMTE2OCwxMDM4LDE2OSwxMTAyLDEwNzIsMTA3MywxMDk0LDEwNzYsMTA3NywxMDkyLDEwNzUsMTA5MywxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTEwMywxMDg4LDEwODksMTA5MCwxMDkxLDEw''@;'; put 'put ''NzgsMTA3NCwxMTAwLDEwOTksMTA3OSwxMDk2LDExMDEsMTA5NywxMDk1LDEwOTgsMTA3MCwxMDQwLDEwNDEsMTA2MiwxMDQ0LDEwNDUsMTA2MCwxMDQzLDEwNjEsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNzEsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDQ2LDEw''@;'; put 'put ''NDIsMTA2OCwxMDY3LDEwNDcsMTA2NCwxMDY5LDEwNjUsMTA2MywxMDY2XSxtYWNpbnRvc2g6WzE5NiwxOTcsMTk5LDIwMSwyMDksMjE0LDIyMCwyMjUsMjI0LDIyNiwyMjgsMjI3LDIyOSwyMzEsMjMzLDIzMiwyMzQsMjM1LDIzNywyMzYsMjM4LDIzOSwyNDEsMjQzLDI0MiwyNDQsMjQ2LDI0''@;'; put 'put ''NSwyNTAsMjQ5LDI1MSwyNTIsODIyNCwxNzYsMTYyLDE2MywxNjcsODIyNiwxODIsMjIzLDE3NCwxNjksODQ4MiwxODAsMTY4LDg4MDAsMTk4LDIxNiw4NzM0LDE3Nyw4ODA0LDg4MDUsMTY1LDE4MSw4NzA2LDg3MjEsODcxOSw5NjAsODc0NywxNzAsMTg2LDkzNywyMzAsMjQ4LDE5MSwxNjEs''@;'; put 'put ''MTcyLDg3MzAsNDAyLDg3NzYsODcxMCwxNzEsMTg3LDgyMzAsMTYwLDE5MiwxOTUsMjEzLDMzOCwzMzksODIxMSw4MjEyLDgyMjAsODIyMSw4MjE2LDgyMTcsMjQ3LDk2NzQsMjU1LDM3Niw4MjYwLDgzNjQsODI0OSw4MjUwLDY0MjU3LDY0MjU4LDgyMjUsMTgzLDgyMTgsODIyMiw4MjQwLDE5''@;'; put 'put ''NCwyMDIsMTkzLDIwMywyMDAsMjA1LDIwNiwyMDcsMjA0LDIxMSwyMTIsNjM3NDMsMjEwLDIxOCwyMTksMjE3LDMwNSw3MTAsNzMyLDE3NSw3MjgsNzI5LDczMCwxODQsNzMzLDczMSw3MTFdLCJ3aW5kb3dzLTg3NCI6WzgzNjQsMTI5LDEzMCwxMzEsMTMyLDgyMzAsMTM0LDEzNSwxMzYsMTM3''@;'; put 'put ''LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDM1ODUsMzU4NiwzNTg3LDM1ODgsMzU4OSwzNTkwLDM1OTEsMzU5MiwzNTkzLDM1OTQsMzU5NSwzNTk2LDM1OTcs''@;'; put 'put ''MzU5OCwzNTk5LDM2MDAsMzYwMSwzNjAyLDM2MDMsMzYwNCwzNjA1LDM2MDYsMzYwNywzNjA4LDM2MDksMzYxMCwzNjExLDM2MTIsMzYxMywzNjE0LDM2MTUsMzYxNiwzNjE3LDM2MTgsMzYxOSwzNjIwLDM2MjEsMzYyMiwzNjIzLDM2MjQsMzYyNSwzNjI2LDM2MjcsMzYyOCwzNjI5LDM2MzAs''@;'; put 'put ''MzYzMSwzNjMyLDM2MzMsMzYzNCwzNjM1LDM2MzYsMzYzNywzNjM4LDM2MzksMzY0MCwzNjQxLDM2NDIsbnVsbCxudWxsLG51bGwsbnVsbCwzNjQ3LDM2NDgsMzY0OSwzNjUwLDM2NTEsMzY1MiwzNjUzLDM2NTQsMzY1NSwzNjU2LDM2NTcsMzY1OCwzNjU5LDM2NjAsMzY2MSwzNjYyLDM2NjMs''@;'; put 'put ''MzY2NCwzNjY1LDM2NjYsMzY2NywzNjY4LDM2NjksMzY3MCwzNjcxLDM2NzIsMzY3MywzNjc0LDM2NzUsbnVsbCxudWxsLG51bGwsbnVsbF0sIndpbmRvd3MtMTI1MCI6WzgzNjQsMTI5LDgyMTgsMTMxLDgyMjIsODIzMCw4MjI0LDgyMjUsMTM2LDgyNDAsMzUyLDgyNDksMzQ2LDM1NiwzODEs''@;'; put 'put ''Mzc3LDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDE1Miw4NDgyLDM1Myw4MjUwLDM0NywzNTcsMzgyLDM3OCwxNjAsNzExLDcyOCwzMjEsMTY0LDI2MCwxNjYsMTY3LDE2OCwxNjksMzUwLDE3MSwxNzIsMTczLDE3NCwzNzksMTc2LDE3Nyw3MzEsMzIyLDE4MCwxODEs''@;'; put 'put ''MTgyLDE4MywxODQsMjYxLDM1MSwxODcsMzE3LDczMywzMTgsMzgwLDM0MCwxOTMsMTk0LDI1OCwxOTYsMzEzLDI2MiwxOTksMjY4LDIwMSwyODAsMjAzLDI4MiwyMDUsMjA2LDI3MCwyNzIsMzIzLDMyNywyMTEsMjEyLDMzNiwyMTQsMjE1LDM0NCwzNjYsMjE4LDM2OCwyMjAsMjIxLDM1NCwy''@;'; put 'put ''MjMsMzQxLDIyNSwyMjYsMjU5LDIyOCwzMTQsMjYzLDIzMSwyNjksMjMzLDI4MSwyMzUsMjgzLDIzNywyMzgsMjcxLDI3MywzMjQsMzI4LDI0MywyNDQsMzM3LDI0NiwyNDcsMzQ1LDM2NywyNTAsMzY5LDI1MiwyNTMsMzU1LDcyOV0sIndpbmRvd3MtMTI1MSI6WzEwMjYsMTAyNyw4MjE4LDEx''@;'; put 'put ''MDcsODIyMiw4MjMwLDgyMjQsODIyNSw4MzY0LDgyNDAsMTAzMyw4MjQ5LDEwMzQsMTAzNiwxMDM1LDEwMzksMTEwNiw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDE1Miw4NDgyLDExMTMsODI1MCwxMTE0LDExMTYsMTExNSwxMTE5LDE2MCwxMDM4LDExMTgsMTAzMiwxNjQs''@;'; put 'put ''MTE2OCwxNjYsMTY3LDEwMjUsMTY5LDEwMjgsMTcxLDE3MiwxNzMsMTc0LDEwMzEsMTc2LDE3NywxMDMwLDExMTAsMTE2OSwxODEsMTgyLDE4MywxMTA1LDg0NzAsMTEwOCwxODcsMTExMiwxMDI5LDExMDksMTExMSwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0''@;'; put 'put ''OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4''@;'; put 'put ''MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzXSwid2luZG93cy0xMjUyIjpbODM2NCwxMjksODIxOCw0MDIsODIyMiw4MjMwLDgyMjQsODIy''@;'; put 'put ''NSw3MTAsODI0MCwzNTIsODI0OSwzMzgsMTQxLDM4MSwxNDMsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsNzMyLDg0ODIsMzUzLDgyNTAsMzM5LDE1NywzODIsMzc2LDE2MCwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzMs''@;'; put 'put ''MTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwy''@;'; put 'put ''MTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1XSwi''@;'; put 'put ''d2luZG93cy0xMjUzIjpbODM2NCwxMjksODIxOCw0MDIsODIyMiw4MjMwLDgyMjQsODIyNSwxMzYsODI0MCwxMzgsODI0OSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsMTUyLDg0ODIsMTU0LDgyNTAsMTU2LDE1NywxNTgsMTU5LDE2MCw5''@;'; put 'put ''MDEsOTAyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSxudWxsLDE3MSwxNzIsMTczLDE3NCw4MjEzLDE3NiwxNzcsMTc4LDE3OSw5MDAsMTgxLDE4MiwxODMsOTA0LDkwNSw5MDYsMTg3LDkwOCwxODksOTEwLDkxMSw5MTIsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEs''@;'; put 'put ''OTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSxudWxsLDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyw5MzgsOTM5LDk0MCw5NDEsOTQyLDk0Myw5NDQsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjIs''@;'; put 'put ''OTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDk3MCw5NzEsOTcyLDk3Myw5NzQsbnVsbF0sIndpbmRvd3MtMTI1NCI6WzgzNjQsMTI5LDgyMTgsNDAyLDgyMjIsODIzMCw4MjI0LDgyMjUsNzEwLDgyNDAsMzUyLDgyNDksMzM4LDE0MSwxNDIsMTQzLDE0NCw4MjE2LDgyMTcsODIyMCw4MjIx''@;'; put 'put ''LDgyMjYsODIxMSw4MjEyLDczMiw4NDgyLDM1Myw4MjUwLDMzOSwxNTcsMTU4LDM3NiwxNjAsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4''@;'; put 'put ''LDE4OSwxOTAsMTkxLDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyODYsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsMzA0LDM1MCwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjks''@;'; put 'put ''MjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI4NywyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwzMDUsMzUxLDI1NV0sIndpbmRvd3MtMTI1NSI6WzgzNjQsMTI5LDgyMTgsNDAyLDgyMjIsODIzMCw4MjI0LDgyMjUsNzEwLDgy''@;'; put 'put ''NDAsMTM4LDgyNDksMTQwLDE0MSwxNDIsMTQzLDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDczMiw4NDgyLDE1NCw4MjUwLDE1NiwxNTcsMTU4LDE1OSwxNjAsMTYxLDE2MiwxNjMsODM2MiwxNjUsMTY2LDE2NywxNjgsMTY5LDIxNSwxNzEsMTcyLDE3MywxNzQsMTc1''@;'; put 'put ''LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwyNDcsMTg3LDE4OCwxODksMTkwLDE5MSwxNDU2LDE0NTcsMTQ1OCwxNDU5LDE0NjAsMTQ2MSwxNDYyLDE0NjMsMTQ2NCwxNDY1LDE0NjYsMTQ2NywxNDY4LDE0NjksMTQ3MCwxNDcxLDE0NzIsMTQ3MywxNDc0LDE0NzUs''@;'; put 'put ''MTUyMCwxNTIxLDE1MjIsMTUyMywxNTI0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTQ4OCwxNDg5LDE0OTAsMTQ5MSwxNDkyLDE0OTMsMTQ5NCwxNDk1LDE0OTYsMTQ5NywxNDk4LDE0OTksMTUwMCwxNTAxLDE1MDIsMTUwMywxNTA0LDE1MDUsMTUwNiwxNTA3LDE1MDgs''@;'; put 'put ''MTUwOSwxNTEwLDE1MTEsMTUxMiwxNTEzLDE1MTQsbnVsbCxudWxsLDgyMDYsODIwNyxudWxsXSwid2luZG93cy0xMjU2IjpbODM2NCwxNjYyLDgyMTgsNDAyLDgyMjIsODIzMCw4MjI0LDgyMjUsNzEwLDgyNDAsMTY1Nyw4MjQ5LDMzOCwxNjcwLDE2ODgsMTY3MiwxNzExLDgyMTYsODIxNyw4''@;'; put 'put ''MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsMTcwNSw4NDgyLDE2ODEsODI1MCwzMzksODIwNCw4MjA1LDE3MjIsMTYwLDE1NDgsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzI2LDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQs''@;'; put 'put ''MTg1LDE1NjMsMTg3LDE4OCwxODksMTkwLDE1NjcsMTcyOSwxNTY5LDE1NzAsMTU3MSwxNTcyLDE1NzMsMTU3NCwxNTc1LDE1NzYsMTU3NywxNTc4LDE1NzksMTU4MCwxNTgxLDE1ODIsMTU4MywxNTg0LDE1ODUsMTU4NiwxNTg3LDE1ODgsMTU4OSwxNTkwLDIxNSwxNTkxLDE1OTIsMTU5Mywx''@;'; put 'put ''NTk0LDE2MDAsMTYwMSwxNjAyLDE2MDMsMjI0LDE2MDQsMjI2LDE2MDUsMTYwNiwxNjA3LDE2MDgsMjMxLDIzMiwyMzMsMjM0LDIzNSwxNjA5LDE2MTAsMjM4LDIzOSwxNjExLDE2MTIsMTYxMywxNjE0LDI0NCwxNjE1LDE2MTYsMjQ3LDE2MTcsMjQ5LDE2MTgsMjUxLDI1Miw4MjA2LDgyMDcs''@;'; put 'put ''MTc0Nl0sIndpbmRvd3MtMTI1NyI6WzgzNjQsMTI5LDgyMTgsMTMxLDgyMjIsODIzMCw4MjI0LDgyMjUsMTM2LDgyNDAsMTM4LDgyNDksMTQwLDE2OCw3MTEsMTg0LDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDE1Miw4NDgyLDE1NCw4MjUwLDE1NiwxNzUsNzMxLDE1''@;'; put 'put ''OSwxNjAsbnVsbCwxNjIsMTYzLDE2NCxudWxsLDE2NiwxNjcsMjE2LDE2OSwzNDIsMTcxLDE3MiwxNzMsMTc0LDE5OCwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDI0OCwxODUsMzQzLDE4NywxODgsMTg5LDE5MCwyMzAsMjYwLDMwMiwyNTYsMjYyLDE5NiwxOTcsMjgwLDI3NCwy''@;'; put 'put ''NjgsMjAxLDM3NywyNzgsMjkwLDMxMCwyOTgsMzE1LDM1MiwzMjMsMzI1LDIxMSwzMzIsMjEzLDIxNCwyMTUsMzcwLDMyMSwzNDYsMzYyLDIyMCwzNzksMzgxLDIyMywyNjEsMzAzLDI1NywyNjMsMjI4LDIyOSwyODEsMjc1LDI2OSwyMzMsMzc4LDI3OSwyOTEsMzExLDI5OSwzMTYsMzUzLDMy''@;'; put 'put ''NCwzMjYsMjQzLDMzMywyNDUsMjQ2LDI0NywzNzEsMzIyLDM0NywzNjMsMjUyLDM4MCwzODIsNzI5XSwid2luZG93cy0xMjU4IjpbODM2NCwxMjksODIxOCw0MDIsODIyMiw4MjMwLDgyMjQsODIyNSw3MTAsODI0MCwxMzgsODI0OSwzMzgsMTQxLDE0MiwxNDMsMTQ0LDgyMTYsODIxNyw4MjIw''@;'; put 'put ''LDgyMjEsODIyNiw4MjExLDgyMTIsNzMyLDg0ODIsMTU0LDgyNTAsMzM5LDE1NywxNTgsMzc2LDE2MCwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4''@;'; put 'put ''NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMjU4LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsNzY4LDIwNSwyMDYsMjA3LDI3MiwyMDksNzc3LDIxMSwyMTIsNDE2LDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCw0MzEsNzcxLDIyMywyMjQsMjI1LDIyNiwyNTksMjI4''@;'; put 'put ''LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSw3NjksMjM3LDIzOCwyMzksMjczLDI0MSw4MDMsMjQzLDI0NCw0MTcsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDQzMiw4MzYzLDI1NV0sIngtbWFjLWN5cmlsbGljIjpbMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0Niwx''@;'; put 'put ''MDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDgyMjQsMTc2LDExNjgsMTYzLDE2Nyw4MjI2LDE4MiwxMDMwLDE3NCwx''@;'; put 'put ''NjksODQ4MiwxMDI2LDExMDYsODgwMCwxMDI3LDExMDcsODczNCwxNzcsODgwNCw4ODA1LDExMTAsMTgxLDExNjksMTAzMiwxMDI4LDExMDgsMTAzMSwxMTExLDEwMzMsMTExMywxMDM0LDExMTQsMTExMiwxMDI5LDE3Miw4NzMwLDQwMiw4Nzc2LDg3MTAsMTcxLDE4Nyw4MjMwLDE2MCwxMDM1''@;'; put 'put ''LDExMTUsMTAzNiwxMTE2LDExMDksODIxMSw4MjEyLDgyMjAsODIyMSw4MjE2LDgyMTcsMjQ3LDgyMjIsMTAzOCwxMTE4LDEwMzksMTExOSw4NDcwLDEwMjUsMTEwNSwxMTAzLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQs''@;'; put 'put ''MTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsODM2NF19fSh0aGlzfHx7fSl9LDY4MDc1OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMzEzNiksXz1iKDg4NzIzKSxw''@;'; put 'put ''PWIoNzE5OTMpLFY9Yig5ODgyOCksdz1JLmFzc2VydDtmdW5jdGlvbiBQKHope1YuY2FsbCh0aGlzLCJzaG9ydCIseiksdGhpcy5hPW5ldyBfKHouYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgXyh6LmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLnRpbnY9dGhpcy50d28ucmVk''@;'; put 'put ''SW52bSgpLHRoaXMuemVyb0E9MD09PXRoaXMuYS5mcm9tUmVkKCkuY21wbigwKSx0aGlzLnRocmVlQT0wPT09dGhpcy5hLmZyb21SZWQoKS5zdWIodGhpcy5wKS5jbXBuKC0zKSx0aGlzLmVuZG89dGhpcy5fZ2V0RW5kb21vcnBoaXNtKHopLHRoaXMuX2VuZG9XbmFmVDE9bmV3IEFycmF5KDQp''@;'; put 'put ''LHRoaXMuX2VuZG9XbmFmVDI9bmV3IEFycmF5KDQpfWZ1bmN0aW9uIEYoeixOLE8sSyl7Vi5CYXNlUG9pbnQuY2FsbCh0aGlzLHosImFmZmluZSIpLG51bGw9PT1OJiZudWxsPT09Tz8odGhpcy54PW51bGwsdGhpcy55PW51bGwsdGhpcy5pbmY9ITApOih0aGlzLng9bmV3IF8oTiwxNiksdGhp''@;'; put 'put ''cy55PW5ldyBfKE8sMTYpLEsmJih0aGlzLnguZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpLHRoaXMueS5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9S''@;'; put 'put ''ZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLmluZj0hMSl9ZnVuY3Rpb24gUih6LE4sTyxLKXtWLkJhc2VQb2ludC5jYWxsKHRoaXMseiwiamFjb2JpYW4iKSxudWxsPT09TiYmbnVsbD09PU8mJm51bGw9PT1LPyh0aGlzLng9dGhpcy5jdXJ2ZS5vbmUsdGhpcy55PXRoaXMuY3VydmUub25lLHRo''@;'; put 'put ''aXMuej1uZXcgXygwKSk6KHRoaXMueD1uZXcgXyhOLDE2KSx0aGlzLnk9bmV3IF8oTywxNiksdGhpcy56PW5ldyBfKEssMTYpKSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3Vy''@;'; put 'put ''dmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmV9cChQLFYpLGNlLmV4cG9ydHM9UCxQLnByb3RvdHlwZS5fZ2V0RW5kb21vcnBoaXNtPWZ1bmN0aW9uKE4pe2lmKHRoaXMuemVy''@;'; put 'put ''b0EmJnRoaXMuZyYmdGhpcy5uJiYxPT09dGhpcy5wLm1vZG4oMykpe3ZhciBPLEs7aWYoTi5iZXRhKU89bmV3IF8oTi5iZXRhLDE2KS50b1JlZCh0aGlzLnJlZCk7ZWxzZXt2YXIgWj10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5wKTtPPShPPVpbMF0uY21wKFpbMV0pPDA/WlswXTpaWzFdKS50''@;'; put 'put ''b1JlZCh0aGlzLnJlZCl9aWYoTi5sYW1iZGEpSz1uZXcgXyhOLmxhbWJkYSwxNik7ZWxzZXt2YXIgWT10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5uKTswPT09dGhpcy5nLm11bChZWzBdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoTykpP0s9WVswXTp3KDA9PT10aGlzLmcubXVsKEs9WVsxXSku''@;'; put 'put ''eC5jbXAodGhpcy5nLngucmVkTXVsKE8pKSl9cmV0dXJue2JldGE6TyxsYW1iZGE6SyxiYXNpczpOLmJhc2lzP04uYmFzaXMubWFwKGZ1bmN0aW9uKHEpe3JldHVybnthOm5ldyBfKHEuYSwxNiksYjpuZXcgXyhxLmIsMTYpfX0pOnRoaXMuX2dldEVuZG9CYXNpcyhLKX19fSxQLnByb3RvdHlw''@;'; put 'put ''ZS5fZ2V0RW5kb1Jvb3RzPWZ1bmN0aW9uKE4pe3ZhciBPPU49PT10aGlzLnA/dGhpcy5yZWQ6Xy5tb250KE4pLEs9bmV3IF8oMikudG9SZWQoTykucmVkSW52bSgpLFo9Sy5yZWROZWcoKSxZPW5ldyBfKDMpLnRvUmVkKE8pLnJlZE5lZygpLnJlZFNxcnQoKS5yZWRNdWwoSyk7cmV0dXJuW1ou''@;'; put 'put ''cmVkQWRkKFkpLmZyb21SZWQoKSxaLnJlZFN1YihZKS5mcm9tUmVkKCldfSxQLnByb3RvdHlwZS5fZ2V0RW5kb0Jhc2lzPWZ1bmN0aW9uKE4pe2Zvcih2YXIgSixyZSxpZSx1ZSxnZSxfZSxUZSxaZSxCLE89dGhpcy5uLnVzaHJuKE1hdGguZmxvb3IodGhpcy5uLmJpdExlbmd0aCgpLzIpKSxL''@;'; put 'put ''PU4sWj10aGlzLm4uY2xvbmUoKSxZPW5ldyBfKDEpLFc9bmV3IF8oMCkscT1uZXcgXygwKSxlZT1uZXcgXygxKSxNZT0wOzAhPT1LLmNtcG4oMCk7KXt2YXIgZz1aLmRpdihLKTtaZT1aLnN1YihnLm11bChLKSksQj1xLnN1YihnLm11bChZKSk7dmFyIHk9ZWUuc3ViKGcubXVsKFcpKTtpZigh''@;'; put 'put ''aWUmJlplLmNtcChPKTwwKUo9VGUubmVnKCkscmU9WSxpZT1aZS5uZWcoKSx1ZT1CO2Vsc2UgaWYoaWUmJjI9PSsrTWUpYnJlYWs7VGU9WmUsWj1LLEs9WmUscT1ZLFk9QixlZT1XLFc9eX1nZT1aZS5uZWcoKSxfZT1CO3ZhciB4PWllLnNxcigpLmFkZCh1ZS5zcXIoKSk7cmV0dXJuIGdlLnNx''@;'; put 'put ''cigpLmFkZChfZS5zcXIoKSkuY21wKHgpPj0wJiYoZ2U9SixfZT1yZSksaWUubmVnYXRpdmUmJihpZT1pZS5uZWcoKSx1ZT11ZS5uZWcoKSksZ2UubmVnYXRpdmUmJihnZT1nZS5uZWcoKSxfZT1fZS5uZWcoKSksW3thOmllLGI6dWV9LHthOmdlLGI6X2V9XX0sUC5wcm90b3R5cGUuX2VuZG9T''@;'; put 'put ''cGxpdD1mdW5jdGlvbihOKXt2YXIgTz10aGlzLmVuZG8uYmFzaXMsSz1PWzBdLFo9T1sxXSxZPVouYi5tdWwoTikuZGl2Um91bmQodGhpcy5uKSxXPUsuYi5uZWcoKS5tdWwoTikuZGl2Um91bmQodGhpcy5uKSxxPVkubXVsKEsuYSksZWU9Vy5tdWwoWi5hKSxKPVkubXVsKEsuYikscmU9Vy5t''@;'; put 'put ''dWwoWi5iKTtyZXR1cm57azE6Ti5zdWIocSkuc3ViKGVlKSxrMjpKLmFkZChyZSkubmVnKCl9fSxQLnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKE4sTyl7KE49bmV3IF8oTiwxNikpLnJlZHx8KE49Ti50b1JlZCh0aGlzLnJlZCkpO3ZhciBLPU4ucmVkU3FyKCkucmVkTXVsKE4pLnJl''@;'; put 'put ''ZElBZGQoTi5yZWRNdWwodGhpcy5hKSkucmVkSUFkZCh0aGlzLmIpLFo9Sy5yZWRTcXJ0KCk7aWYoMCE9PVoucmVkU3FyKCkucmVkU3ViKEspLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3ZhciBZPVouZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKE8m''@;'; put 'put ''JiFZfHwhTyYmWSkmJihaPVoucmVkTmVnKCkpLHRoaXMucG9pbnQoTixaKX0sUC5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oTil7aWYoTi5pbmYpcmV0dXJuITA7dmFyIE89Ti54LEs9Ti55LFo9dGhpcy5hLnJlZE11bChPKSxZPU8ucmVkU3FyKCkucmVkTXVsKE8pLnJlZElBZGQoWiku''@;'; put 'put ''cmVkSUFkZCh0aGlzLmIpO3JldHVybiAwPT09Sy5yZWRTcXIoKS5yZWRJU3ViKFkpLmNtcG4oMCl9LFAucHJvdG90eXBlLl9lbmRvV25hZk11bEFkZD1mdW5jdGlvbihOLE8sSyl7Zm9yKHZhciBaPXRoaXMuX2VuZG9XbmFmVDEsWT10aGlzLl9lbmRvV25hZlQyLFc9MDtXPE4ubGVuZ3RoO1cr''@;'; put 'put ''Kyl7dmFyIHE9dGhpcy5fZW5kb1NwbGl0KE9bV10pLGVlPU5bV10sSj1lZS5fZ2V0QmV0YSgpO3EuazEubmVnYXRpdmUmJihxLmsxLmluZWcoKSxlZT1lZS5uZWcoITApKSxxLmsyLm5lZ2F0aXZlJiYocS5rMi5pbmVnKCksSj1KLm5lZyghMCkpLFpbMipXXT1lZSxaWzIqVysxXT1KLFlbMipX''@;'; put 'put ''XT1xLmsxLFlbMipXKzFdPXEuazJ9Zm9yKHZhciByZT10aGlzLl93bmFmTXVsQWRkKDEsWixZLDIqVyxLKSxpZT0wO2llPDIqVztpZSsrKVpbaWVdPW51bGwsWVtpZV09bnVsbDtyZXR1cm4gcmV9LHAoRixWLkJhc2VQb2ludCksUC5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oTixPLEspe3Jl''@;'; put 'put ''dHVybiBuZXcgRih0aGlzLE4sTyxLKX0sUC5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihOLE8pe3JldHVybiBGLmZyb21KU09OKHRoaXMsTixPKX0sRi5wcm90b3R5cGUuX2dldEJldGE9ZnVuY3Rpb24oKXtpZih0aGlzLmN1cnZlLmVuZG8pe3ZhciBOPXRoaXMucHJlY29tcHV0''@;'; put 'put ''ZWQ7aWYoTiYmTi5iZXRhKXJldHVybiBOLmJldGE7dmFyIE89dGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngucmVkTXVsKHRoaXMuY3VydmUuZW5kby5iZXRhKSx0aGlzLnkpO2lmKE4pe3ZhciBLPXRoaXMuY3VydmUsWj1mdW5jdGlvbihZKXtyZXR1cm4gSy5wb2ludChZLngucmVkTXVsKEsuZW5k''@;'; put 'put ''by5iZXRhKSxZLnkpfTtOLmJldGE9TyxPLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsbmFmOk4ubmFmJiZ7d25kOk4ubmFmLnduZCxwb2ludHM6Ti5uYWYucG9pbnRzLm1hcChaKX0sZG91YmxlczpOLmRvdWJsZXMmJntzdGVwOk4uZG91Ymxlcy5zdGVwLHBvaW50czpOLmRvdWJsZXMucG9pbnRz''@;'; put 'put ''Lm1hcChaKX19fXJldHVybiBPfX0sRi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJlY29tcHV0ZWQ/W3RoaXMueCx0aGlzLnksdGhpcy5wcmVjb21wdXRlZCYme2RvdWJsZXM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzJiZ7c3RlcDp0aGlzLnByZWNvbXB1dGVk''@;'; put 'put ''LmRvdWJsZXMuc3RlcCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnBvaW50cy5zbGljZSgxKX0sbmFmOnRoaXMucHJlY29tcHV0ZWQubmFmJiZ7d25kOnRoaXMucHJlY29tcHV0ZWQubmFmLnduZCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5uYWYucG9pbnRzLnNsaWNlKDEpfX1d''@;'; put 'put ''Olt0aGlzLngsdGhpcy55XX0sRi5mcm9tSlNPTj1mdW5jdGlvbihOLE8sSyl7InN0cmluZyI9PXR5cGVvZiBPJiYoTz1KU09OLnBhcnNlKE8pKTt2YXIgWj1OLnBvaW50KE9bMF0sT1sxXSxLKTtpZighT1syXSlyZXR1cm4gWjtmdW5jdGlvbiBZKHEpe3JldHVybiBOLnBvaW50KHFbMF0scVsx''@;'; put 'put ''XSxLKX12YXIgVz1PWzJdO3JldHVybiBaLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsZG91YmxlczpXLmRvdWJsZXMmJntzdGVwOlcuZG91Ymxlcy5zdGVwLHBvaW50czpbWl0uY29uY2F0KFcuZG91Ymxlcy5wb2ludHMubWFwKFkpKX0sbmFmOlcubmFmJiZ7d25kOlcubmFmLnduZCxwb2ludHM6''@;'; put 'put ''W1pdLmNvbmNhdChXLm5hZi5wb2ludHMubWFwKFkpKX19LFp9LEYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIg''@;'; put 'put ''eTogIit0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sRi5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmluZn0sRi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKE4pe2lmKHRoaXMuaW5mKXJldHVybiBOO2lmKE4uaW5mKXJldHVybiB0aGlzO2lm''@;'; put 'put ''KHRoaXMuZXEoTikpcmV0dXJuIHRoaXMuZGJsKCk7aWYodGhpcy5uZWcoKS5lcShOKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO2lmKDA9PT10aGlzLnguY21wKE4ueCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgTz10aGlzLnkucmVkU3ViKE4u''@;'; put 'put ''eSk7MCE9PU8uY21wbigwKSYmKE89Ty5yZWRNdWwodGhpcy54LnJlZFN1YihOLngpLnJlZEludm0oKSkpO3ZhciBLPU8ucmVkU3FyKCkucmVkSVN1Yih0aGlzLngpLnJlZElTdWIoTi54KSxaPU8ucmVkTXVsKHRoaXMueC5yZWRTdWIoSykpLnJlZElTdWIodGhpcy55KTtyZXR1cm4gdGhpcy5j''@;'; put 'put ''dXJ2ZS5wb2ludChLLFopfSxGLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgTj10aGlzLnkucmVkQWRkKHRoaXMueSk7aWYoMD09PU4uY21wbigwKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBPPXRoaXMuY3VydmUu''@;'; put 'put ''YSxLPXRoaXMueC5yZWRTcXIoKSxaPU4ucmVkSW52bSgpLFk9Sy5yZWRBZGQoSykucmVkSUFkZChLKS5yZWRJQWRkKE8pLnJlZE11bChaKSxXPVkucmVkU3FyKCkucmVkSVN1Yih0aGlzLngucmVkQWRkKHRoaXMueCkpLHE9WS5yZWRNdWwodGhpcy54LnJlZFN1YihXKSkucmVkSVN1Yih0aGlz''@;'; put 'put ''LnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFcscSl9LEYucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54LmZyb21SZWQoKX0sRi5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkuZnJvbVJlZCgpfSxGLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24o''@;'; put 'put ''Til7cmV0dXJuIE49bmV3IF8oTiwxNiksdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLl9oYXNEb3VibGVzKE4pP3RoaXMuY3VydmUuX2ZpeGVkTmFmTXVsKHRoaXMsTik6dGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKFt0aGlzXSxbTl0pOnRoaXMuY3VydmUu''@;'; put 'put ''X3duYWZNdWwodGhpcyxOKX0sRi5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKE4sTyxLKXt2YXIgWj1bdGhpcyxPXSxZPVtOLEtdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoWixZKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsWixZLDIpfSxG''@;'; put 'put ''LnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKE4sTyxLKXt2YXIgWj1bdGhpcyxPXSxZPVtOLEtdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoWixZLCEwKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsWixZLDIsITApfSxGLnByb3RvdHlwZS5l''@;'; put 'put ''cT1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcz09PU58fHRoaXMuaW5mPT09Ti5pbmYmJih0aGlzLmluZnx8MD09PXRoaXMueC5jbXAoTi54KSYmMD09PXRoaXMueS5jbXAoTi55KSl9LEYucHJvdG90eXBlLm5lZz1mdW5jdGlvbihOKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgTz10aGlz''@;'; put 'put ''LmN1cnZlLnBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCkpO2lmKE4mJnRoaXMucHJlY29tcHV0ZWQpe3ZhciBLPXRoaXMucHJlY29tcHV0ZWQsWj1mdW5jdGlvbihZKXtyZXR1cm4gWS5uZWcoKX07Ty5wcmVjb21wdXRlZD17bmFmOksubmFmJiZ7d25kOksubmFmLnduZCxwb2ludHM6Sy5u''@;'; put 'put ''YWYucG9pbnRzLm1hcChaKX0sZG91YmxlczpLLmRvdWJsZXMmJntzdGVwOksuZG91Ymxlcy5zdGVwLHBvaW50czpLLmRvdWJsZXMucG9pbnRzLm1hcChaKX19fXJldHVybiBPfSxGLnByb3RvdHlwZS50b0o9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmY/dGhpcy5jdXJ2ZS5qcG9pbnQobnVs''@;'; put 'put ''bCxudWxsLG51bGwpOnRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnksdGhpcy5jdXJ2ZS5vbmUpfSxwKFIsVi5CYXNlUG9pbnQpLFAucHJvdG90eXBlLmpwb2ludD1mdW5jdGlvbihOLE8sSyl7cmV0dXJuIG5ldyBSKHRoaXMsTixPLEspfSxSLnByb3RvdHlwZS50b1A9ZnVuY3Rpb24o''@;'; put 'put ''KXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBOPXRoaXMuei5yZWRJbnZtKCksTz1OLnJlZFNxcigpLEs9dGhpcy54LnJlZE11bChPKSxaPXRoaXMueS5yZWRNdWwoTykucmVkTXVsKE4pO3JldHVybiB0aGlzLmN1cnZlLnBvaW50''@;'; put 'put ''KEssWil9LFIucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpLHRoaXMueil9LFIucHJvdG90eXBlLmFkZD1mdW5jdGlvbihOKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gTjtpZihOLmlzSW5maW5pdHko''@;'; put 'put ''KSlyZXR1cm4gdGhpczt2YXIgTz1OLnoucmVkU3FyKCksSz10aGlzLnoucmVkU3FyKCksWj10aGlzLngucmVkTXVsKE8pLFk9Ti54LnJlZE11bChLKSxXPXRoaXMueS5yZWRNdWwoTy5yZWRNdWwoTi56KSkscT1OLnkucmVkTXVsKEsucmVkTXVsKHRoaXMueikpLGVlPVoucmVkU3ViKFkpLEo9''@;'; put 'put ''Vy5yZWRTdWIocSk7aWYoMD09PWVlLmNtcG4oMCkpcmV0dXJuIDAhPT1KLmNtcG4oMCk/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuZGJsKCk7dmFyIHJlPWVlLnJlZFNxcigpLGllPXJlLnJlZE11bChlZSksdWU9Wi5yZWRNdWwocmUpLGdlPUoucmVkU3FyKCkucmVk''@;'; put 'put ''SUFkZChpZSkucmVkSVN1Yih1ZSkucmVkSVN1Yih1ZSksX2U9Si5yZWRNdWwodWUucmVkSVN1YihnZSkpLnJlZElTdWIoVy5yZWRNdWwoaWUpKSxUZT10aGlzLnoucmVkTXVsKE4ueikucmVkTXVsKGVlKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoZ2UsX2UsVGUpfSxSLnByb3RvdHlwZS5t''@;'; put 'put ''aXhlZEFkZD1mdW5jdGlvbihOKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gTi50b0ooKTtpZihOLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2YXIgTz10aGlzLnoucmVkU3FyKCksSz10aGlzLngsWj1OLngucmVkTXVsKE8pLFk9dGhpcy55LFc9Ti55LnJlZE11bChPKS5yZWRNdWwo''@;'; put 'put ''dGhpcy56KSxxPUsucmVkU3ViKFopLGVlPVkucmVkU3ViKFcpO2lmKDA9PT1xLmNtcG4oMCkpcmV0dXJuIDAhPT1lZS5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciBKPXEucmVkU3FyKCkscmU9Si5yZWRNdWwocSksaWU9Sy5yZWRNdWwo''@;'; put 'put ''SiksdWU9ZWUucmVkU3FyKCkucmVkSUFkZChyZSkucmVkSVN1YihpZSkucmVkSVN1YihpZSksZ2U9ZWUucmVkTXVsKGllLnJlZElTdWIodWUpKS5yZWRJU3ViKFkucmVkTXVsKHJlKSksX2U9dGhpcy56LnJlZE11bChxKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodWUsZ2UsX2UpfSxSLnBy''@;'; put 'put ''b3RvdHlwZS5kYmxwPWZ1bmN0aW9uKE4pe2lmKDA9PT1OKXJldHVybiB0aGlzO2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO2lmKCFOKXJldHVybiB0aGlzLmRibCgpO3ZhciBPO2lmKHRoaXMuY3VydmUuemVyb0F8fHRoaXMuY3VydmUudGhyZWVBKXt2YXIgSz10aGlzO2ZvcihP''@;'; put 'put ''PTA7TzxOO08rKylLPUsuZGJsKCk7cmV0dXJuIEt9dmFyIFo9dGhpcy5jdXJ2ZS5hLFk9dGhpcy5jdXJ2ZS50aW52LFc9dGhpcy54LHE9dGhpcy55LGVlPXRoaXMueixKPWVlLnJlZFNxcigpLnJlZFNxcigpLHJlPXEucmVkQWRkKHEpO2ZvcihPPTA7TzxOO08rKyl7dmFyIGllPVcucmVkU3Fy''@;'; put 'put ''KCksdWU9cmUucmVkU3FyKCksZ2U9dWUucmVkU3FyKCksX2U9aWUucmVkQWRkKGllKS5yZWRJQWRkKGllKS5yZWRJQWRkKFoucmVkTXVsKEopKSxUZT1XLnJlZE11bCh1ZSksTWU9X2UucmVkU3FyKCkucmVkSVN1YihUZS5yZWRBZGQoVGUpKSxaZT1UZS5yZWRJU3ViKE1lKSxCPV9lLnJlZE11''@;'; put 'put ''bChaZSk7Qj1CLnJlZElBZGQoQikucmVkSVN1YihnZSk7dmFyIGc9cmUucmVkTXVsKGVlKTtPKzE8TiYmKEo9Si5yZWRNdWwoZ2UpKSxXPU1lLGVlPWcscmU9Qn1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoVyxyZS5yZWRNdWwoWSksZWUpfSxSLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLnplcm9BP3RoaXMuX3plcm9EYmwoKTp0aGlzLmN1cnZlLnRocmVlQT90aGlzLl90aHJlZURibCgpOnRoaXMuX2RibCgpfSxSLnByb3RvdHlwZS5femVyb0RibD1mdW5jdGlvbigpe3ZhciBOLE8sSztpZih0aGlzLnpPbmUp''@;'; put 'put ''e3ZhciBaPXRoaXMueC5yZWRTcXIoKSxZPXRoaXMueS5yZWRTcXIoKSxXPVkucmVkU3FyKCkscT10aGlzLngucmVkQWRkKFkpLnJlZFNxcigpLnJlZElTdWIoWikucmVkSVN1YihXKTtxPXEucmVkSUFkZChxKTt2YXIgZWU9Wi5yZWRBZGQoWikucmVkSUFkZChaKSxKPWVlLnJlZFNxcigpLnJl''@;'; put 'put ''ZElTdWIocSkucmVkSVN1YihxKSxyZT1XLnJlZElBZGQoVyk7cmU9KHJlPXJlLnJlZElBZGQocmUpKS5yZWRJQWRkKHJlKSxOPUosTz1lZS5yZWRNdWwocS5yZWRJU3ViKEopKS5yZWRJU3ViKHJlKSxLPXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBpZT10aGlzLngucmVkU3FyKCks''@;'; put 'put ''dWU9dGhpcy55LnJlZFNxcigpLGdlPXVlLnJlZFNxcigpLF9lPXRoaXMueC5yZWRBZGQodWUpLnJlZFNxcigpLnJlZElTdWIoaWUpLnJlZElTdWIoZ2UpO19lPV9lLnJlZElBZGQoX2UpO3ZhciBUZT1pZS5yZWRBZGQoaWUpLnJlZElBZGQoaWUpLE1lPVRlLnJlZFNxcigpLFplPWdlLnJlZElB''@;'; put 'put ''ZGQoZ2UpO1plPShaZT1aZS5yZWRJQWRkKFplKSkucmVkSUFkZChaZSksTj1NZS5yZWRJU3ViKF9lKS5yZWRJU3ViKF9lKSxPPVRlLnJlZE11bChfZS5yZWRJU3ViKE4pKS5yZWRJU3ViKFplKSxLPShLPXRoaXMueS5yZWRNdWwodGhpcy56KSkucmVkSUFkZChLKX1yZXR1cm4gdGhpcy5jdXJ2''@;'; put 'put ''ZS5qcG9pbnQoTixPLEspfSxSLnByb3RvdHlwZS5fdGhyZWVEYmw9ZnVuY3Rpb24oKXt2YXIgTixPLEs7aWYodGhpcy56T25lKXt2YXIgWj10aGlzLngucmVkU3FyKCksWT10aGlzLnkucmVkU3FyKCksVz1ZLnJlZFNxcigpLHE9dGhpcy54LnJlZEFkZChZKS5yZWRTcXIoKS5yZWRJU3ViKFop''@;'; put 'put ''LnJlZElTdWIoVyk7cT1xLnJlZElBZGQocSk7dmFyIGVlPVoucmVkQWRkKFopLnJlZElBZGQoWikucmVkSUFkZCh0aGlzLmN1cnZlLmEpLEo9ZWUucmVkU3FyKCkucmVkSVN1YihxKS5yZWRJU3ViKHEpO049Sjt2YXIgcmU9Vy5yZWRJQWRkKFcpO3JlPShyZT1yZS5yZWRJQWRkKHJlKSkucmVk''@;'; put 'put ''SUFkZChyZSksTz1lZS5yZWRNdWwocS5yZWRJU3ViKEopKS5yZWRJU3ViKHJlKSxLPXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBpZT10aGlzLnoucmVkU3FyKCksdWU9dGhpcy55LnJlZFNxcigpLGdlPXRoaXMueC5yZWRNdWwodWUpLF9lPXRoaXMueC5yZWRTdWIoaWUpLnJlZE11''@;'; put 'put ''bCh0aGlzLngucmVkQWRkKGllKSk7X2U9X2UucmVkQWRkKF9lKS5yZWRJQWRkKF9lKTt2YXIgVGU9Z2UucmVkSUFkZChnZSksTWU9KFRlPVRlLnJlZElBZGQoVGUpKS5yZWRBZGQoVGUpO049X2UucmVkU3FyKCkucmVkSVN1YihNZSksSz10aGlzLnkucmVkQWRkKHRoaXMueikucmVkU3FyKCku''@;'; put 'put ''cmVkSVN1Yih1ZSkucmVkSVN1YihpZSk7dmFyIFplPXVlLnJlZFNxcigpO1plPShaZT0oWmU9WmUucmVkSUFkZChaZSkpLnJlZElBZGQoWmUpKS5yZWRJQWRkKFplKSxPPV9lLnJlZE11bChUZS5yZWRJU3ViKE4pKS5yZWRJU3ViKFplKX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoTixPLEsp''@;'; put 'put ''fSxSLnByb3RvdHlwZS5fZGJsPWZ1bmN0aW9uKCl7dmFyIE49dGhpcy5jdXJ2ZS5hLE89dGhpcy54LEs9dGhpcy55LFo9dGhpcy56LFk9Wi5yZWRTcXIoKS5yZWRTcXIoKSxXPU8ucmVkU3FyKCkscT1LLnJlZFNxcigpLGVlPVcucmVkQWRkKFcpLnJlZElBZGQoVykucmVkSUFkZChOLnJlZE11''@;'; put 'put ''bChZKSksSj1PLnJlZEFkZChPKSxyZT0oSj1KLnJlZElBZGQoSikpLnJlZE11bChxKSxpZT1lZS5yZWRTcXIoKS5yZWRJU3ViKHJlLnJlZEFkZChyZSkpLHVlPXJlLnJlZElTdWIoaWUpLGdlPXEucmVkU3FyKCk7Z2U9KGdlPShnZT1nZS5yZWRJQWRkKGdlKSkucmVkSUFkZChnZSkpLnJlZElB''@;'; put 'put ''ZGQoZ2UpO3ZhciBfZT1lZS5yZWRNdWwodWUpLnJlZElTdWIoZ2UpLFRlPUsucmVkQWRkKEspLnJlZE11bChaKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoaWUsX2UsVGUpfSxSLnByb3RvdHlwZS50cnBsPWZ1bmN0aW9uKCl7aWYoIXRoaXMuY3VydmUuemVyb0EpcmV0dXJuIHRoaXMuZGJs''@;'; put 'put ''KCkuYWRkKHRoaXMpO3ZhciBOPXRoaXMueC5yZWRTcXIoKSxPPXRoaXMueS5yZWRTcXIoKSxLPXRoaXMuei5yZWRTcXIoKSxaPU8ucmVkU3FyKCksWT1OLnJlZEFkZChOKS5yZWRJQWRkKE4pLFc9WS5yZWRTcXIoKSxxPXRoaXMueC5yZWRBZGQoTykucmVkU3FyKCkucmVkSVN1YihOKS5yZWRJ''@;'; put 'put ''U3ViKFopLGVlPShxPShxPShxPXEucmVkSUFkZChxKSkucmVkQWRkKHEpLnJlZElBZGQocSkpLnJlZElTdWIoVykpLnJlZFNxcigpLEo9Wi5yZWRJQWRkKFopO0o9KEo9KEo9Si5yZWRJQWRkKEopKS5yZWRJQWRkKEopKS5yZWRJQWRkKEopO3ZhciByZT1ZLnJlZElBZGQocSkucmVkU3FyKCku''@;'; put 'put ''cmVkSVN1YihXKS5yZWRJU3ViKGVlKS5yZWRJU3ViKEopLGllPU8ucmVkTXVsKHJlKTtpZT0oaWU9aWUucmVkSUFkZChpZSkpLnJlZElBZGQoaWUpO3ZhciB1ZT10aGlzLngucmVkTXVsKGVlKS5yZWRJU3ViKGllKTt1ZT0odWU9dWUucmVkSUFkZCh1ZSkpLnJlZElBZGQodWUpO3ZhciBnZT10''@;'; put 'put ''aGlzLnkucmVkTXVsKHJlLnJlZE11bChKLnJlZElTdWIocmUpKS5yZWRJU3ViKHEucmVkTXVsKGVlKSkpO2dlPShnZT0oZ2U9Z2UucmVkSUFkZChnZSkpLnJlZElBZGQoZ2UpKS5yZWRJQWRkKGdlKTt2YXIgX2U9dGhpcy56LnJlZEFkZChxKS5yZWRTcXIoKS5yZWRJU3ViKEspLnJlZElTdWIo''@;'; put 'put ''ZWUpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludCh1ZSxnZSxfZSl9LFIucHJvdG90eXBlLm11bD1mdW5jdGlvbihOLE8pe3JldHVybiBOPW5ldyBfKE4sTyksdGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLE4pfSxSLnByb3RvdHlwZS5lcT1mdW5jdGlvbihOKXtpZigiYWZmaW5lIj09PU4udHlw''@;'; put 'put ''ZSlyZXR1cm4gdGhpcy5lcShOLnRvSigpKTtpZih0aGlzPT09TilyZXR1cm4hMDt2YXIgTz10aGlzLnoucmVkU3FyKCksSz1OLnoucmVkU3FyKCk7aWYoMCE9PXRoaXMueC5yZWRNdWwoSykucmVkSVN1YihOLngucmVkTXVsKE8pKS5jbXBuKDApKXJldHVybiExO3ZhciBaPU8ucmVkTXVsKHRo''@;'; put 'put ''aXMueiksWT1LLnJlZE11bChOLnopO3JldHVybiAwPT09dGhpcy55LnJlZE11bChZKS5yZWRJU3ViKE4ueS5yZWRNdWwoWikpLmNtcG4oMCl9LFIucHJvdG90eXBlLmVxWFRvUD1mdW5jdGlvbihOKXt2YXIgTz10aGlzLnoucmVkU3FyKCksSz1OLnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRN''@;'; put 'put ''dWwoTyk7aWYoMD09PXRoaXMueC5jbXAoSykpcmV0dXJuITA7Zm9yKHZhciBaPU4uY2xvbmUoKSxZPXRoaXMuY3VydmUucmVkTi5yZWRNdWwoTyk7Oyl7aWYoWi5pYWRkKHRoaXMuY3VydmUubiksWi5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihLLnJlZElBZGQoWSksMD09PXRo''@;'; put 'put ''aXMueC5jbXAoSykpcmV0dXJuITB9fSxSLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgSlBvaW50IEluZmluaXR5PiI6IjxFQyBKUG9pbnQgeDogIit0aGlzLngudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS50b1N0cmluZygx''@;'; put 'put ''NiwyKSsiIHo6ICIrdGhpcy56LnRvU3RyaW5nKDE2LDIpKyI+In0sUi5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy56LmNtcG4oMCl9fSw2ODE0NjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0IjtiKDcwODI0KSgiZmxhdE1hcCIpfSw2ODI4MzooY2UsWCxi''@;'; put 'put ''KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDM5MjEwKSxfPWIoNzE5OTMpO2Z1bmN0aW9uIHAoeSx4KXtyZXR1cm4hKDU1Mjk2IT0oNjQ1MTImeS5jaGFyQ29kZUF0KHgpKXx8eDwwfHx4KzE+PXkubGVuZ3RoKSYmNTYzMjA9PSg2NDUxMiZ5LmNoYXJDb2RlQXQoeCsxKSl9ZnVuY3Rpb24gUCh5''@;'; put 'put ''KXtyZXR1cm4oeT4+PjI0fHk+Pj44JjY1MjgwfHk8PDgmMTY3MTE2ODB8KDI1NSZ5KTw8MjQpPj4+MH1mdW5jdGlvbiBSKHkpe3JldHVybiAxPT09eS5sZW5ndGg/IjAiK3k6eX1mdW5jdGlvbiB6KHkpe3JldHVybiA3PT09eS5sZW5ndGg/IjAiK3k6Nj09PXkubGVuZ3RoPyIwMCIreTo1PT09''@;'; put 'put ''eS5sZW5ndGg/IjAwMCIreTo0PT09eS5sZW5ndGg/IjAwMDAiK3k6Mz09PXkubGVuZ3RoPyIwMDAwMCIreToyPT09eS5sZW5ndGg/IjAwMDAwMCIreToxPT09eS5sZW5ndGg/IjAwMDAwMDAiK3k6eX1YLmluaGVyaXRzPV8sWC50b0FycmF5PWZ1bmN0aW9uIFYoeSx4KXtpZihBcnJheS5pc0Fy''@;'; put 'put ''cmF5KHkpKXJldHVybiB5LnNsaWNlKCk7aWYoIXkpcmV0dXJuW107dmFyIEM9W107aWYoInN0cmluZyI9PXR5cGVvZiB5KWlmKHgpe2lmKCJoZXgiPT09eClmb3IoKHk9eS5yZXBsYWNlKC9bXmEtejAtOV0rL2dpLCIiKSkubGVuZ3RoJTIhPTAmJih5PSIwIit5KSxIPTA7SDx5Lmxlbmd0aDtI''@;'; put 'put ''Kz0yKUMucHVzaChwYXJzZUludCh5W0hdK3lbSCsxXSwxNikpfWVsc2UgZm9yKHZhciBUPTAsSD0wO0g8eS5sZW5ndGg7SCsrKXt2YXIgaj15LmNoYXJDb2RlQXQoSCk7ajwxMjg/Q1tUKytdPWo6ajwyMDQ4PyhDW1QrK109aj4+NnwxOTIsQ1tUKytdPTYzJmp8MTI4KTpwKHksSCk/KGo9NjU1''@;'; put 'put ''MzYrKCgxMDIzJmopPDwxMCkrKDEwMjMmeS5jaGFyQ29kZUF0KCsrSCkpLENbVCsrXT1qPj4xOHwyNDAsQ1tUKytdPWo+PjEyJjYzfDEyOCxDW1QrK109aj4+NiY2M3wxMjgsQ1tUKytdPTYzJmp8MTI4KTooQ1tUKytdPWo+PjEyfDIyNCxDW1QrK109aj4+NiY2M3wxMjgsQ1tUKytdPTYzJmp8''@;'; put 'put ''MTI4KX1lbHNlIGZvcihIPTA7SDx5Lmxlbmd0aDtIKyspQ1tIXT0wfHlbSF07cmV0dXJuIEN9LFgudG9IZXg9ZnVuY3Rpb24gdyh5KXtmb3IodmFyIHg9IiIsQz0wO0M8eS5sZW5ndGg7QysrKXgrPVIoeVtDXS50b1N0cmluZygxNikpO3JldHVybiB4fSxYLmh0b25sPVAsWC50b0hleDMyPWZ1''@;'; put 'put ''bmN0aW9uIEYoeSx4KXtmb3IodmFyIEM9IiIsVD0wO1Q8eS5sZW5ndGg7VCsrKXt2YXIgSD15W1RdOyJsaXR0bGUiPT09eCYmKEg9UChIKSksQys9eihILnRvU3RyaW5nKDE2KSl9cmV0dXJuIEN9LFguemVybzI9UixYLnplcm84PXosWC5qb2luMzI9ZnVuY3Rpb24gTih5LHgsQyxUKXt2YXIg''@;'; put 'put ''SD1DLXg7SShIJTQ9PTApO2Zvcih2YXIgaj1uZXcgQXJyYXkoSC80KSxFPTAsbT14O0U8ai5sZW5ndGg7RSsrLG0rPTQpaltFXT0oImJpZyI9PT1UP3lbbV08PDI0fHlbbSsxXTw8MTZ8eVttKzJdPDw4fHlbbSszXTp5W20rM108PDI0fHlbbSsyXTw8MTZ8eVttKzFdPDw4fHlbbV0pPj4+MDty''@;'; put 'put ''ZXR1cm4gan0sWC5zcGxpdDMyPWZ1bmN0aW9uIE8oeSx4KXtmb3IodmFyIEM9bmV3IEFycmF5KDQqeS5sZW5ndGgpLFQ9MCxIPTA7VDx5Lmxlbmd0aDtUKyssSCs9NCl7dmFyIGo9eVtUXTsiYmlnIj09PXg/KENbSF09aj4+PjI0LENbSCsxXT1qPj4+MTYmMjU1LENbSCsyXT1qPj4+OCYyNTUs''@;'; put 'put ''Q1tIKzNdPTI1NSZqKTooQ1tIKzNdPWo+Pj4yNCxDW0grMl09aj4+PjE2JjI1NSxDW0grMV09aj4+PjgmMjU1LENbSF09MjU1JmopfXJldHVybiBDfSxYLnJvdHIzMj1mdW5jdGlvbiBLKHkseCl7cmV0dXJuIHk+Pj54fHk8PDMyLXh9LFgucm90bDMyPWZ1bmN0aW9uIFooeSx4KXtyZXR1cm4g''@;'; put 'put ''eTw8eHx5Pj4+MzIteH0sWC5zdW0zMj1mdW5jdGlvbiBZKHkseCl7cmV0dXJuIHkreD4+PjB9LFguc3VtMzJfMz1mdW5jdGlvbiBXKHkseCxDKXtyZXR1cm4geSt4K0M+Pj4wfSxYLnN1bTMyXzQ9ZnVuY3Rpb24gcSh5LHgsQyxUKXtyZXR1cm4geSt4K0MrVD4+PjB9LFguc3VtMzJfNT1mdW5j''@;'; put 'put ''dGlvbiBlZSh5LHgsQyxULEgpe3JldHVybiB5K3grQytUK0g+Pj4wfSxYLnN1bTY0PWZ1bmN0aW9uIEooeSx4LEMsVCl7dmFyIEU9VCt5W3grMV0+Pj4wO3lbeF09KEU8VD8xOjApK0MreVt4XT4+PjAseVt4KzFdPUV9LFguc3VtNjRfaGk9ZnVuY3Rpb24gcmUoeSx4LEMsVCl7cmV0dXJuKHgr''@;'; put 'put ''VD4+PjA8eD8xOjApK3krQz4+PjB9LFguc3VtNjRfbG89ZnVuY3Rpb24gaWUoeSx4LEMsVCl7cmV0dXJuIHgrVD4+PjB9LFguc3VtNjRfNF9oaT1mdW5jdGlvbiB1ZSh5LHgsQyxULEgsaixFLG0pe3ZhciBBPTAsYWU9eDtyZXR1cm4gQSs9KGFlPWFlK1Q+Pj4wKTx4PzE6MCxBKz0oYWU9YWUr''@;'; put 'put ''aj4+PjApPGo/MTowLHkrQytIK0UrKEErPShhZT1hZSttPj4+MCk8bT8xOjApPj4+MH0sWC5zdW02NF80X2xvPWZ1bmN0aW9uIGdlKHkseCxDLFQsSCxqLEUsbSl7cmV0dXJuIHgrVCtqK20+Pj4wfSxYLnN1bTY0XzVfaGk9ZnVuY3Rpb24gX2UoeSx4LEMsVCxILGosRSxtLEEsYWUpe3ZhciBu''@;'; put 'put ''ZT0wLHNlPXg7cmV0dXJuIG5lKz0oc2U9c2UrVD4+PjApPHg/MTowLG5lKz0oc2U9c2Uraj4+PjApPGo/MTowLG5lKz0oc2U9c2UrbT4+PjApPG0/MTowLHkrQytIK0UrQSsobmUrPShzZT1zZSthZT4+PjApPGFlPzE6MCk+Pj4wfSxYLnN1bTY0XzVfbG89ZnVuY3Rpb24gVGUoeSx4LEMsVCxI''@;'; put 'put ''LGosRSxtLEEsYWUpe3JldHVybiB4K1QraittK2FlPj4+MH0sWC5yb3RyNjRfaGk9ZnVuY3Rpb24gTWUoeSx4LEMpe3JldHVybih4PDwzMi1DfHk+Pj5DKT4+PjB9LFgucm90cjY0X2xvPWZ1bmN0aW9uIFplKHkseCxDKXtyZXR1cm4oeTw8MzItQ3x4Pj4+Qyk+Pj4wfSxYLnNocjY0X2hpPWZ1''@;'; put 'put ''bmN0aW9uIEIoeSx4LEMpe3JldHVybiB5Pj4+Q30sWC5zaHI2NF9sbz1mdW5jdGlvbiBnKHkseCxDKXtyZXR1cm4oeTw8MzItQ3x4Pj4+Qyk+Pj4wfX0sNjgzMzI6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig3MTgyNCksXz1TdHJpbmc7Y2UuZXhwb3J0cz1mdW5jdGlvbihwKXtp''@;'; put 'put ''ZigiU3ltYm9sIj09PUkocCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmciKTtyZXR1cm4gXyhwKX19LDY4NDc5OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBwKEYsUix6KXty''@;'; put 'put ''ZXR1cm4ibSI9PT16P1I/Ilx1MDQ0NVx1MDQzMlx1MDQzOFx1MDQzYlx1MDQzOFx1MDQzZFx1MDQzMCI6Ilx1MDQ0NVx1MDQzMlx1MDQzOFx1MDQzYlx1MDQzOFx1MDQzZFx1MDQ0MyI6ImgiPT09ej9SPyJcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzAiOiJcdTA0MzNcdTA0''@;'; put 'put ''M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0NDMiOkYrIiAiK2Z1bmN0aW9uIF8oRixSKXt2YXIgej1GLnNwbGl0KCJfIik7cmV0dXJuIFIlMTA9PTEmJlIlMTAwIT0xMT96WzBdOlIlMTA+PTImJlIlMTA8PTQmJihSJTEwMDwxMHx8UiUxMDA+PTIwKT96WzFdOnpbMl19KHtzczpSPyJcdTA0NDFc''@;'; put 'put ''dTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzBfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM4X1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCI6Ilx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0M19cdTA0''@;'; put 'put ''NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzhfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixtbTpSPyJcdTA0NDVcdTA0MzJcdTA0MzhcdTA0M2JcdTA0MzhcdTA0M2RcdTA0MzBfXHUwNDQ1XHUwNDMyXHUwNDM4XHUwNDNiXHUwNDM4XHUwNDNkXHUw''@;'; put 'put ''NDM4X1x1MDQ0NVx1MDQzMlx1MDQzOFx1MDQzYlx1MDQzOFx1MDQzZCI6Ilx1MDQ0NVx1MDQzMlx1MDQzOFx1MDQzYlx1MDQzOFx1MDQzZFx1MDQ0M19cdTA0NDVcdTA0MzJcdTA0MzhcdTA0M2JcdTA0MzhcdTA0M2RcdTA0MzhfXHUwNDQ1XHUwNDMyXHUwNDM4XHUwNDNiXHUwNDM4XHUwNDNk''@;'; put 'put ''IixoaDpSPyJcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzBfXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDM4X1x1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZCI6Ilx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQ0M19cdTA0MzNcdTA0M2Vc''@;'; put 'put ''dTA0MzRcdTA0MzhcdTA0M2RcdTA0MzhfXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkIixkZDoiXHUwNDM0XHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzNFx1MDQzZFx1MDQ1Nl9cdTA0MzRcdTA0M2RcdTA0NTZcdTA0MzIiLE1NOiJcdTA0M2NcdTA0NTZcdTA0NDFcdTA0NGZcdTA0NDZc''@;'; put 'put ''dTA0NGNfXHUwNDNjXHUwNDU2XHUwNDQxXHUwNDRmXHUwNDQ2XHUwNDU2X1x1MDQzY1x1MDQ1Nlx1MDQ0MVx1MDQ0Zlx1MDQ0Nlx1MDQ1Nlx1MDQzMiIseXk6Ilx1MDQ0MFx1MDQ1Nlx1MDQzYV9cdTA0NDBcdTA0M2VcdTA0M2FcdTA0MzhfXHUwNDQwXHUwNDNlXHUwNDNhXHUwNDU2XHUwNDMy''@;'; put 'put ''In1bel0sK0YpfWZ1bmN0aW9uIHcoRil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEYrIlx1MDQzZSIrKDExPT09dGhpcy5ob3VycygpPyJcdTA0MzEiOiIiKSsiXSBMVCJ9fUkuZGVmaW5lTG9jYWxlKCJ1ayIse21vbnRoczp7Zm9ybWF0OiJcdTA0NDFcdTA0NTZcdTA0NDdcdTA0M2RcdTA0''@;'; put 'put ''NGZfXHUwNDNiXHUwNDRlXHUwNDQyXHUwNDNlXHUwNDMzXHUwNDNlX1x1MDQzMVx1MDQzNVx1MDQ0MFx1MDQzNVx1MDQzN1x1MDQzZFx1MDQ0Zl9cdTA0M2FcdTA0MzJcdTA0NTZcdTA0NDJcdTA0M2RcdTA0NGZfXHUwNDQyXHUwNDQwXHUwNDMwXHUwNDMyXHUwNDNkXHUwNDRmX1x1MDQ0N1x1''@;'; put 'put ''MDQzNVx1MDQ0MFx1MDQzMlx1MDQzZFx1MDQ0Zl9cdTA0M2JcdTA0MzhcdTA0M2ZcdTA0M2RcdTA0NGZfXHUwNDQxXHUwNDM1XHUwNDQwXHUwNDNmXHUwNDNkXHUwNDRmX1x1MDQzMlx1MDQzNVx1MDQ0MFx1MDQzNVx1MDQ0MVx1MDQzZFx1MDQ0Zl9cdTA0MzZcdTA0M2VcdTA0MzJcdTA0NDJc''@;'; put 'put ''dTA0M2RcdTA0NGZfXHUwNDNiXHUwNDM4XHUwNDQxXHUwNDQyXHUwNDNlXHUwNDNmXHUwNDMwXHUwNDM0XHUwNDMwX1x1MDQzM1x1MDQ0MFx1MDQ0M1x1MDQzNFx1MDQzZFx1MDQ0ZiIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJcdTA0NDFcdTA0NTZcdTA0NDdcdTA0MzVcdTA0M2RcdTA0NGNf''@;'; put 'put ''XHUwNDNiXHUwNDRlXHUwNDQyXHUwNDM4XHUwNDM5X1x1MDQzMVx1MDQzNVx1MDQ0MFx1MDQzNVx1MDQzN1x1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0M2FcdTA0MzJcdTA0NTZcdTA0NDJcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDQyXHUwNDQwXHUwNDMwXHUwNDMyXHUwNDM1XHUwNDNkXHUwNDRj''@;'; put 'put ''X1x1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0M2JcdTA0MzhcdTA0M2ZcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDQxXHUwNDM1XHUwNDQwXHUwNDNmXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzMlx1MDQzNVx1MDQ0MFx1MDQzNVx1MDQ0MVx1MDQzNVx1MDQz''@;'; put 'put ''ZFx1MDQ0Y19cdTA0MzZcdTA0M2VcdTA0MzJcdTA0NDJcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDNiXHUwNDM4XHUwNDQxXHUwNDQyXHUwNDNlXHUwNDNmXHUwNDMwXHUwNDM0X1x1MDQzM1x1MDQ0MFx1MDQ0M1x1MDQzNFx1MDQzNVx1MDQzZFx1MDQ0YyIuc3BsaXQoIl8iKX0sbW9udGhzU2hv''@;'; put 'put ''cnQ6Ilx1MDQ0MVx1MDQ1Nlx1MDQ0N19cdTA0M2JcdTA0NGVcdTA0NDJfXHUwNDMxXHUwNDM1XHUwNDQwX1x1MDQzYVx1MDQzMlx1MDQ1Nlx1MDQ0Ml9cdTA0NDJcdTA0NDBcdTA0MzBcdTA0MzJfXHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMyX1x1MDQzYlx1MDQzOFx1MDQzZl9cdTA0NDFcdTA0''@;'; put 'put ''MzVcdTA0NDBcdTA0M2ZfXHUwNDMyXHUwNDM1XHUwNDQwX1x1MDQzNlx1MDQzZVx1MDQzMlx1MDQ0Ml9cdTA0M2JcdTA0MzhcdTA0NDFcdTA0NDJfXHUwNDMzXHUwNDQwXHUwNDQzXHUwNDM0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOmZ1bmN0aW9uIFYoRixSKXt2YXIgej17bm9taW5hdGl2ZToi''@;'; put 'put ''XHUwNDNkXHUwNDM1XHUwNDM0XHUwNDU2XHUwNDNiXHUwNDRmX1x1MDQzZlx1MDQzZVx1MDQzZFx1MDQzNVx1MDQzNFx1MDQ1Nlx1MDQzYlx1MDQzZVx1MDQzYV9cdTA0MzJcdTA0NTZcdTA0MzJcdTA0NDJcdTA0M2VcdTA0NDBcdTA0M2VcdTA0M2FfXHUwNDQxXHUwNDM1XHUwNDQwXHUwNDM1''@;'; put 'put ''XHUwNDM0XHUwNDMwX1x1MDQ0N1x1MDQzNVx1MDQ0Mlx1MDQzMlx1MDQzNVx1MDQ0MF9cdTA0M2ZcdTIwMTlcdTA0NGZcdTA0NDJcdTA0M2RcdTA0MzhcdTA0NDZcdTA0NGZfXHUwNDQxXHUwNDQzXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDMwIi5zcGxpdCgiXyIpLGFjY3VzYXRpdmU6Ilx1MDQz''@;'; put 'put ''ZFx1MDQzNVx1MDQzNFx1MDQ1Nlx1MDQzYlx1MDQ0ZV9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0NTZcdTA0M2JcdTA0M2VcdTA0M2FfXHUwNDMyXHUwNDU2XHUwNDMyXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDNlXHUwNDNhX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzNVx1MDQz''@;'; put 'put ''NFx1MDQ0M19cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0MzVcdTA0NDBfXHUwNDNmXHUyMDE5XHUwNDRmXHUwNDQyXHUwNDNkXHUwNDM4XHUwNDQ2XHUwNDRlX1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQ0MyIuc3BsaXQoIl8iKSxnZW5pdGl2ZToiXHUwNDNkXHUwNDM1''@;'; put 'put ''XHUwNDM0XHUwNDU2XHUwNDNiXHUwNDU2X1x1MDQzZlx1MDQzZVx1MDQzZFx1MDQzNVx1MDQzNFx1MDQ1Nlx1MDQzYlx1MDQzYVx1MDQzMF9cdTA0MzJcdTA0NTZcdTA0MzJcdTA0NDJcdTA0M2VcdTA0NDBcdTA0M2FcdTA0MzBfXHUwNDQxXHUwNDM1XHUwNDQwXHUwNDM1XHUwNDM0XHUwNDM4''@;'; put 'put ''X1x1MDQ0N1x1MDQzNVx1MDQ0Mlx1MDQzMlx1MDQzNVx1MDQ0MFx1MDQzM1x1MDQzMF9cdTA0M2ZcdTIwMTlcdTA0NGZcdTA0NDJcdTA0M2RcdTA0MzhcdTA0NDZcdTA0NTZfXHUwNDQxXHUwNDQzXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDM4Ii5zcGxpdCgiXyIpfTtyZXR1cm4hMD09PUY/ei5u''@;'; put 'put ''b21pbmF0aXZlLnNsaWNlKDEsNykuY29uY2F0KHoubm9taW5hdGl2ZS5zbGljZSgwLDEpKTpGP3pbLyhcW1tcdTA0MTJcdTA0MzJcdTA0MjNcdTA0NDNdXF0pID9kZGRkLy50ZXN0KFIpPyJhY2N1c2F0aXZlIjovXFs/KD86XHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDNiXHUwNDNlXHUw''@;'; put 'put ''NDU3fFx1MDQzZFx1MDQzMFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzZlx1MDQzZFx1MDQzZVx1MDQ1Nyk/ID9cXSA/ZGRkZC8udGVzdChSKT8iZ2VuaXRpdmUiOiJub21pbmF0aXZlIl1bRi5kYXkoKV06ei5ub21pbmF0aXZlfSx3ZWVrZGF5c1Nob3J0OiJcdTA0M2RcdTA0MzRfXHUwNDNmXHUw''@;'; put 'put ''NDNkX1x1MDQzMlx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDQyX1x1MDQzZlx1MDQ0Ml9cdTA0NDFcdTA0MzEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQzZFx1MDQzNF9cdTA0M2ZcdTA0M2RfXHUwNDMyXHUwNDQyX1x1MDQ0MVx1MDQ0MF9cdTA0NDdcdTA0NDJfXHUwNDNm''@;'; put 'put ''XHUwNDQyX1x1MDQ0MVx1MDQzMSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkgXHUwNDQwLiIsTExMOiJEIE1NTU0gWVlZWSBcdTA0NDAuLCBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1N''@;'; put 'put ''IFlZWVkgXHUwNDQwLiwgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheTp3KCJbXHUwNDIxXHUwNDRjXHUwNDNlXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDNkXHUwNDU2ICIpLG5leHREYXk6dygiW1x1MDQxN1x1MDQzMFx1MDQzMlx1MDQ0Mlx1MDQ0MFx1MDQzMCAiKSxsYXN0RGF5OncoIltcdTA0''@;'; put 'put ''MTJcdTA0NDdcdTA0M2VcdTA0NDBcdTA0MzAgIiksbmV4dFdlZWs6dygiW1x1MDQyM10gZGRkZCBbIiksbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOmNhc2UgMzpjYXNlIDU6Y2FzZSA2OnJldHVybiB3KCJbXHUwNDFjXHUwNDM4XHUwNDNkXHUwNDQzXHUw''@;'; put 'put ''NDNiXHUwNDNlXHUwNDU3XSBkZGRkIFsiKS5jYWxsKHRoaXMpO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OnJldHVybiB3KCJbXHUwNDFjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDNiXHUwNDNlXHUwNDMzXHUwNDNlXSBkZGRkIFsiKS5jYWxsKHRoaXMpfX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRp''@;'; put 'put ''bWU6e2Z1dHVyZToiXHUwNDM3XHUwNDMwICVzIixwYXN0OiIlcyBcdTA0NDJcdTA0M2VcdTA0M2NcdTA0NDMiLHM6Ilx1MDQzNFx1MDQzNVx1MDQzYVx1MDQ1Nlx1MDQzYlx1MDQ0Y1x1MDQzYVx1MDQzMCBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLHNzOnAsbTpwLG1t''@;'; put 'put ''OnAsaDoiXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDQzIixoaDpwLGQ6Ilx1MDQzNFx1MDQzNVx1MDQzZFx1MDQ0YyIsZGQ6cCxNOiJcdTA0M2NcdTA0NTZcdTA0NDFcdTA0NGZcdTA0NDZcdTA0NGMiLE1NOnAseToiXHUwNDQwXHUwNDU2XHUwNDNhIix5eTpwfSxtZXJpZGll''@;'; put 'put ''bVBhcnNlOi9cdTA0M2RcdTA0M2VcdTA0NDdcdTA0NTZ8XHUwNDQwXHUwNDMwXHUwNDNkXHUwNDNhXHUwNDQzfFx1MDQzNFx1MDQzZFx1MDQ0ZnxcdTA0MzJcdTA0MzVcdTA0NDdcdTA0M2VcdTA0NDBcdTA0MzAvLGlzUE06ZnVuY3Rpb24oRil7cmV0dXJuL14oXHUwNDM0XHUwNDNkXHUwNDRm''@;'; put 'put ''fFx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzZVx1MDQ0MFx1MDQzMCkkLy50ZXN0KEYpfSxtZXJpZGllbTpmdW5jdGlvbihGLFIseil7cmV0dXJuIEY8ND8iXHUwNDNkXHUwNDNlXHUwNDQ3XHUwNDU2IjpGPDEyPyJcdTA0NDBcdTA0MzBcdTA0M2RcdTA0M2FcdTA0NDMiOkY8MTc/Ilx1MDQzNFx1''@;'; put 'put ''MDQzZFx1MDQ0ZiI6Ilx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzZVx1MDQ0MFx1MDQzMCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1MDQzOXxcdTA0MzNcdTA0M2UpLyxvcmRpbmFsOmZ1bmN0aW9uKEYsUil7c3dpdGNoKFIpe2Nhc2UiTSI6Y2FzZSJkIjpjYXNlIkRERCI6''@;'; put 'put ''Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBGKyItXHUwNDM5IjtjYXNlIkQiOnJldHVybiBGKyItXHUwNDMzXHUwNDNlIjtkZWZhdWx0OnJldHVybiBGfX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGIoOTc1ODYpKX0sNjg3Njg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigyODM2Nyks''@;'; put 'put ''Xz1iKDMzOTYzKSxwPWIoNzU5NikuY2xlYXI7SSh7Z2xvYmFsOiEwLGJpbmQ6ITAsZW51bWVyYWJsZTohMCxmb3JjZWQ6Xy5jbGVhckltbWVkaWF0ZSE9PXB9LHtjbGVhckltbWVkaWF0ZTpwfSl9LDY4ODA3OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''Xz17MToiXHUxN2UxIiwyOiJcdTE3ZTIiLDM6Ilx1MTdlMyIsNDoiXHUxN2U0Iiw1OiJcdTE3ZTUiLDY6Ilx1MTdlNiIsNzoiXHUxN2U3Iiw4OiJcdTE3ZTgiLDk6Ilx1MTdlOSIsMDoiXHUxN2UwIn0scD17Ilx1MTdlMSI6IjEiLCJcdTE3ZTIiOiIyIiwiXHUxN2UzIjoiMyIsIlx1MTdlNCI6''@;'; put 'put ''IjQiLCJcdTE3ZTUiOiI1IiwiXHUxN2U2IjoiNiIsIlx1MTdlNyI6IjciLCJcdTE3ZTgiOiI4IiwiXHUxN2U5IjoiOSIsIlx1MTdlMCI6IjAifTtJLmRlZmluZUxvY2FsZSgia20iLHttb250aHM6Ilx1MTc5OFx1MTc4MFx1MTc5YVx1MTdiNl9cdTE3ODBcdTE3YmJcdTE3OThcdTE3ZDJcdTE3''@;'; put 'put ''OTdcdTE3YzhfXHUxNzk4XHUxN2I4XHUxNzkzXHUxN2I2X1x1MTc5OFx1MTdjMVx1MTc5Zlx1MTdiNl9cdTE3YTdcdTE3OWZcdTE3OTdcdTE3YjZfXHUxNzk4XHUxN2I3XHUxNzkwXHUxN2JiXHUxNzkzXHUxN2I2X1x1MTc4MFx1MTc4MFx1MTdkMlx1MTc4MFx1MTc4YVx1MTdiNl9cdTE3OWZc''@;'; put 'put ''dTE3YjhcdTE3YTBcdTE3YjZfXHUxNzgwXHUxNzg5XHUxN2QyXHUxNzg5XHUxN2I2X1x1MTc4Zlx1MTdiYlx1MTc5Ylx1MTdiNl9cdTE3OWNcdTE3YjdcdTE3ODVcdTE3ZDJcdTE3ODZcdTE3YjdcdTE3ODBcdTE3YjZfXHUxNzkyXHUxN2QyXHUxNzkzXHUxN2JjIi5zcGxpdCgiXyIpLG1vbnRo''@;'; put 'put ''c1Nob3J0OiJcdTE3OThcdTE3ODBcdTE3OWFcdTE3YjZfXHUxNzgwXHUxN2JiXHUxNzk4XHUxN2QyXHUxNzk3XHUxN2M4X1x1MTc5OFx1MTdiOFx1MTc5M1x1MTdiNl9cdTE3OThcdTE3YzFcdTE3OWZcdTE3YjZfXHUxN2E3XHUxNzlmXHUxNzk3XHUxN2I2X1x1MTc5OFx1MTdiN1x1MTc5MFx1''@;'; put 'put ''MTdiYlx1MTc5M1x1MTdiNl9cdTE3ODBcdTE3ODBcdTE3ZDJcdTE3ODBcdTE3OGFcdTE3YjZfXHUxNzlmXHUxN2I4XHUxN2EwXHUxN2I2X1x1MTc4MFx1MTc4OVx1MTdkMlx1MTc4OVx1MTdiNl9cdTE3OGZcdTE3YmJcdTE3OWJcdTE3YjZfXHUxNzljXHUxN2I3XHUxNzg1XHUxN2QyXHUxNzg2''@;'; put 'put ''XHUxN2I3XHUxNzgwXHUxN2I2X1x1MTc5Mlx1MTdkMlx1MTc5M1x1MTdiYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUxN2EyXHUxN2I2XHUxNzkxXHUxN2I3XHUxNzhmXHUxN2QyXHUxNzk5X1x1MTc4NVx1MTdkMFx1MTc5M1x1MTdkMlx1MTc5MV9cdTE3YTJcdTE3ODRcdTE3ZDJcdTE3ODJc''@;'; put 'put ''dTE3YjZcdTE3OWFfXHUxNzk2XHUxN2JiXHUxNzkyX1x1MTc5Nlx1MTdkMlx1MTc5YVx1MTdhMFx1MTc5Zlx1MTdkMlx1MTc5NFx1MTc4Zlx1MTdiN1x1MTdjZF9cdTE3OWZcdTE3YmJcdTE3ODBcdTE3ZDJcdTE3OWFfXHUxNzlmXHUxN2M1XHUxNzlhXHUxN2NkIi5zcGxpdCgiXyIpLHdlZWtk''@;'; put 'put ''YXlzU2hvcnQ6Ilx1MTdhMlx1MTdiNl9cdTE3ODVfXHUxN2EyX1x1MTc5Nl9cdTE3OTZcdTE3ZDJcdTE3OWFfXHUxNzlmXHUxN2JiX1x1MTc5ZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUxN2EyXHUxN2I2X1x1MTc4NV9cdTE3YTJfXHUxNzk2X1x1MTc5Nlx1MTdkMlx1MTc5YV9cdTE3''@;'; put 'put ''OWZcdTE3YmJfXHUxNzlmIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1N''@;'; put 'put ''TSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUxNzk2XHUxN2QyXHUxNzlhXHUxN2I5XHUxNzgwfFx1MTc5Ylx1MTdkMlx1MTc4NFx1MTdiNlx1MTc4NS8saXNQTTpmdW5jdGlvbih3KXtyZXR1cm4iXHUxNzliXHUxN2QyXHUxNzg0XHUxN2I2XHUxNzg1Ij09PXd9LG1lcmlkaWVtOmZ1''@;'; put 'put ''bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzwxMj8iXHUxNzk2XHUxN2QyXHUxNzlhXHUxN2I5XHUxNzgwIjoiXHUxNzliXHUxN2QyXHUxNzg0XHUxN2I2XHUxNzg1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTE3OTBcdTE3ZDJcdTE3ODRcdTE3YzNcdTE3OTNcdTE3YzFcdTE3YzcgXHUxNzk4XHUx''@;'; put 'put ''N2M5XHUxN2M0XHUxNzg0XSBMVCIsbmV4dERheToiW1x1MTc5Zlx1MTdkMlx1MTdhMlx1MTdjMlx1MTc4MCBcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODRdIExUIixuZXh0V2VlazoiZGRkZCBbXHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0XSBMVCIsbGFzdERheToiW1x1MTc5OFx1MTdkMlx1MTc5''@;'; put 'put ''Zlx1MTdiN1x1MTc5Ylx1MTc5OFx1MTdiN1x1MTc4OSBcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODRdIExUIixsYXN0V2VlazoiZGRkZCBbXHUxNzlmXHUxNzk0XHUxN2QyXHUxNzhmXHUxN2I2XHUxN2EwXHUxN2NkXHUxNzk4XHUxN2JiXHUxNzkzXSBbXHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0''@;'; put 'put ''XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTE3OTFcdTE3YzBcdTE3OGYiLHBhc3Q6IiVzXHUxNzk4XHUxN2JiXHUxNzkzIixzOiJcdTE3OTRcdTE3YzlcdTE3YmJcdTE3OTNcdTE3ZDJcdTE3OThcdTE3YjZcdTE3OTNcdTE3OWNcdTE3YjdcdTE3OTNcdTE3''@;'; put 'put ''YjZcdTE3OTFcdTE3YjgiLHNzOiIlZCBcdTE3OWNcdTE3YjdcdTE3OTNcdTE3YjZcdTE3OTFcdTE3YjgiLG06Ilx1MTc5OFx1MTdiZFx1MTc5OVx1MTc5M1x1MTdiNlx1MTc5MVx1MTdiOCIsbW06IiVkIFx1MTc5M1x1MTdiNlx1MTc5MVx1MTdiOCIsaDoiXHUxNzk4XHUxN2JkXHUxNzk5XHUx''@;'; put 'put ''Nzk4XHUxN2M5XHUxN2M0XHUxNzg0IixoaDoiJWQgXHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0IixkOiJcdTE3OThcdTE3YmRcdTE3OTlcdTE3OTBcdTE3ZDJcdTE3ODRcdTE3YzMiLGRkOiIlZCBcdTE3OTBcdTE3ZDJcdTE3ODRcdTE3YzMiLE06Ilx1MTc5OFx1MTdiZFx1MTc5OVx1MTc4MVx1''@;'; put 'put ''MTdjMiIsTU06IiVkIFx1MTc4MVx1MTdjMiIseToiXHUxNzk4XHUxN2JkXHUxNzk5XHUxNzg2XHUxN2QyXHUxNzkzXHUxN2I2XHUxN2M2Iix5eToiJWQgXHUxNzg2XHUxN2QyXHUxNzkzXHUxN2I2XHUxN2M2In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXHUxNzkxXHUxN2I4XGR7MSwyfS8s''@;'; put 'put ''b3JkaW5hbDoiXHUxNzkxXHUxN2I4JWQiLHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTE3ZTFcdTE3ZTJcdTE3ZTNcdTE3ZTRcdTE3ZTVcdTE3ZTZcdTE3ZTdcdTE3ZThcdTE3ZTlcdTE3ZTBdL2csZnVuY3Rpb24oUCl7cmV0dXJuIHBbUF19KX0scG9zdGZvcm1h''@;'; put 'put ''dDpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKFApe3JldHVybiBfW1BdfSl9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDY5MjI3OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNTg2MDcpLF89YigzMTQ4Myk7Y2UuZXhwb3J0cz1m''@;'; put 'put ''dW5jdGlvbihwLFYsdyl7dHJ5e3JldHVybiBJKF8oT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwLFYpW3ddKSl9Y2F0Y2h7fX19LDY5NzAyOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgieC1wc2V1ZG8iLHttb250aHM6''@;'; put 'put ''Ikp+XHhlMVx4ZjFceGZhXHhlMX5yXHhmZF9Gflx4ZTliclx4ZmF+XHhlMXJceGZkX35NXHhlMXJjfmhfXHhjMXB+clx4ZWRsX35NXHhlMVx4ZmRffkpceGZhXHhmMVx4ZTl+X0pceGZhbH5ceGZkX1x4YzFceGZhfmdceGZhc3R+X1NceGU5cH50XHhlOW1iflx4ZTlyX1x4ZDN+Y3RceGYzYn5c''@;'; put 'put ''eGU5cl9ceGQxflx4ZjN2XHhlOW1+Ylx4ZTlyX35EXHhlOWNceGU5fm1iXHhlOXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikp+XHhlMVx4ZjFffkZceGU5Yl9+TVx4ZTFyX35ceGMxcHJffk1ceGUxXHhmZF9+Slx4ZmFceGYxX35KXHhmYWxfflx4YzFceGZhZ19+U1x4ZTlwX35ceGQzY3Rf''@;'; put 'put ''flx4ZDFceGYzdl9+RFx4ZTljIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6IlN+XHhmYVx4ZjFkXHhlMX5ceGZkX01ceGYzflx4ZjFkXHhlMVx4ZmR+X1RceGZhXHhlOX5zZFx4ZTFceGZkfl9XXHhlOWR+XHhmMVx4ZTlzZH5ceGUxXHhmZF9UfmhceGZhcnN+ZFx4''@;'; put 'put ''ZTFceGZkX35Gclx4ZWRkflx4ZTFceGZkX1N+XHhlMXRceGZhcn5kXHhlMVx4ZmQiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU35ceGZhXHhmMV9+TVx4ZjNceGYxX35UXHhmYVx4ZTlffldceGU5ZF9+VGhceGZhX35Gclx4ZWRfflNceGUxdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi''@;'; put 'put ''U35ceGZhX01ceGYzfl9UXHhmYV9+V1x4ZTlfVH5oX0Zyfl9TXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJk''@;'; put 'put ''ZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVH5ceGYzZFx4ZTF+XHhmZCBceGUxdF0gTFQiLG5leHREYXk6IltUflx4ZjNtXHhmM35yclx4ZjN+dyBceGUxdF0gTFQiLG5leHRXZWVrOiJkZGRkIFtceGUxdF0gTFQiLGxhc3REYXk6IltceGRkflx4ZTlzdH5c''@;'; put 'put ''eGU5cmRceGUxflx4ZmQgXHhlMXRdIExUIixsYXN0V2VlazoiW0x+XHhlMXN0XSBkZGRkIFtceGUxdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx4ZWR+XHhmMSAlcyIscGFzdDoiJXMgXHhlMX5nXHhmMyIsczoiXHhlMSB+Zlx4ZTl3IH5zXHhlOWNceGYzflx4''@;'; put 'put ''ZjFkcyIsc3M6IiVkIHN+XHhlOWNceGYzXHhmMX5kcyIsbToiXHhlMSB+bVx4ZWRceGYxflx4ZmF0XHhlOSIsbW06IiVkIG1+XHhlZFx4ZjFceGZhfnRceGU5cyIsaDoiXHhlMX5ceGYxIGhceGYzflx4ZmFyIixoaDoiJWQgaH5ceGYzXHhmYXJzIixkOiJceGUxIH5kXHhlMVx4ZmQiLGRkOiIl''@;'; put 'put ''ZCBkflx4ZTFceGZkcyIsTToiXHhlMSB+bVx4ZjNceGYxfnRoIixNTToiJWQgbX5ceGYzXHhmMXR+aHMiLHk6Ilx4ZTEgflx4ZmRceGU5XHhlMXIiLHl5OiIlZCBceGZkflx4ZTlceGUxcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHRofHN0fG5kfHJkKS8sb3JkaW5hbDpm''@;'; put 'put ''dW5jdGlvbihwKXt2YXIgVj1wJTEwO3JldHVybiBwKygxPT1+fihwJTEwMC8xMCk/InRoIjoxPT09Vj8ic3QiOjI9PT1WPyJuZCI6Mz09PVY/InJkIjoidGgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sNjk4NzU6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yigy''@;'; put 'put ''ODM2NyksXz1iKDgwMjEzKSxwPWIoNTU1OTIpO0koe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohYig1MzUwNSkoImRpZmZlcmVuY2UiLGZ1bmN0aW9uKEYpe3JldHVybiAwPT09Ri5zaXplfSl8fHAoZnVuY3Rpb24oKXt2YXIgRj17c2l6ZToxLGhhczpmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiEwfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIHo9MDtyZXR1cm57bmV4dDpmdW5jdGlvbigpe3ZhciBOPXorKz4xO3JldHVybiBSLmhhcygxKSYmUi5jbGVhcigpLHtkb25lOk4sdmFsdWU6Mn19fX19LFI9bmV3IFNldChbMSwyLDMsNF0pO3JldHVybiAzIT09Ui5kaWZmZXJlbmNlKEYp''@;'; put 'put ''LnNpemV9KX0se2RpZmZlcmVuY2U6X30pfSw2OTkxNzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQ2OTI2KSxfPWIoOTc5NTEpLHA9YigzNjY3OCksVj1iKDE0NzUwKSx3PWIoNTgwMTIpLFA9Yig0NzM2KSxGPWIoODYxMTUpLFI9Yig3ODk2OCkuSXRlcmF0b3JQcm90b3R5cGUs''@;'; put 'put ''ej1iKDU4OTc4KSxOPWIoNjY1NDIpLE89Yig2MDEyOCksSz13KCJ0b1N0cmluZ1RhZyIpLFo9Ikl0ZXJhdG9ySGVscGVyIixZPSJXcmFwRm9yVmFsaWRJdGVyYXRvciIsVz0ibm9ybWFsIixxPSJ0aHJvdyIsZWU9UC5zZXQsSj1mdW5jdGlvbih1ZSl7dmFyIGdlPVAuZ2V0dGVyRm9yKHVlP1k6''@;'; put 'put ''Wik7cmV0dXJuIFYoXyhSKSx7bmV4dDpmdW5jdGlvbigpe3ZhciBUZT1nZSh0aGlzKTtpZih1ZSlyZXR1cm4gVGUubmV4dEhhbmRsZXIoKTtpZihUZS5kb25lKXJldHVybiB6KHZvaWQgMCwhMCk7dHJ5e3ZhciBNZT1UZS5uZXh0SGFuZGxlcigpO3JldHVybiBUZS5yZXR1cm5IYW5kbGVyUmVz''@;'; put 'put ''dWx0P01lOnooTWUsVGUuZG9uZSl9Y2F0Y2goWmUpe3Rocm93IFRlLmRvbmU9ITAsWmV9fSxyZXR1cm46ZnVuY3Rpb24oKXt2YXIgX2U9Z2UodGhpcyksVGU9X2UuaXRlcmF0b3I7aWYoX2UuZG9uZT0hMCx1ZSl7dmFyIE1lPUYoVGUsInJldHVybiIpO3JldHVybiBNZT9JKE1lLFRlKTp6KHZv''@;'; put 'put ''aWQgMCwhMCl9aWYoX2UuaW5uZXIpdHJ5e04oX2UuaW5uZXIuaXRlcmF0b3IsVyl9Y2F0Y2goWmUpe3JldHVybiBOKFRlLHEsWmUpfWlmKF9lLm9wZW5JdGVycyl0cnl7TyhfZS5vcGVuSXRlcnMsVyl9Y2F0Y2goWmUpe3JldHVybiBOKFRlLHEsWmUpfXJldHVybiBUZSYmTihUZSxXKSx6KHZv''@;'; put 'put ''aWQgMCwhMCl9fSl9LHJlPUooITApLGllPUooITEpO3AoaWUsSywiSXRlcmF0b3IgSGVscGVyIiksY2UuZXhwb3J0cz1mdW5jdGlvbih1ZSxnZSxfZSl7dmFyIFRlPWZ1bmN0aW9uKFplLEIpe0I/KEIuaXRlcmF0b3I9WmUuaXRlcmF0b3IsQi5uZXh0PVplLm5leHQpOkI9WmUsQi50eXBlPWdl''@;'; put 'put ''P1k6WixCLnJldHVybkhhbmRsZXJSZXN1bHQ9ISFfZSxCLm5leHRIYW5kbGVyPXVlLEIuY291bnRlcj0wLEIuZG9uZT0hMSxlZSh0aGlzLEIpfTtyZXR1cm4gVGUucHJvdG90eXBlPWdlP3JlOmllLFRlfX0sNzAxMTE6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBfPXsxOiJcdTA2NjEiLDI6Ilx1MDY2MiIsMzoiXHUwNjYzIiw0OiJcdTA2NjQiLDU6Ilx1MDY2NSIsNjoiXHUwNjY2Iiw3OiJcdTA2NjciLDg6Ilx1MDY2OCIsOToiXHUwNjY5IiwwOiJcdTA2NjAifSxwPXsiXHUwNjYxIjoiMSIsIlx1MDY2MiI6IjIiLCJcdTA2NjMiOiIzIiwiXHUw''@;'; put 'put ''NjY0IjoiNCIsIlx1MDY2NSI6IjUiLCJcdTA2NjYiOiI2IiwiXHUwNjY3IjoiNyIsIlx1MDY2OCI6IjgiLCJcdTA2NjkiOiI5IiwiXHUwNjYwIjoiMCJ9LFY9WyJcdTA2YTlcdTA2MjdcdTA2NDZcdTA2NDhcdTA2NDZcdTA2Y2MgXHUwNjJmXHUwNjQ4XHUwNjQ4XHUwNmQ1XHUwNjQ1IiwiXHUw''@;'; put 'put ''NjM0XHUwNjQ4XHUwNjI4XHUwNjI3XHUwNjJhIiwiXHUwNjI2XHUwNjI3XHUwNjMyXHUwNjI3XHUwNjMxIiwiXHUwNjQ2XHUwNmNjXHUwNjMzXHUwNjI3XHUwNjQ2IiwiXHUwNjI2XHUwNjI3XHUwNmNjXHUwNjI3XHUwNjMxIiwiXHUwNjJkXHUwNjQ4XHUwNjMyXHUwNmQ1XHUwNmNjXHUwNjMx''@;'; put 'put ''XHUwNjI3XHUwNjQ2IiwiXHUwNjJhXHUwNmQ1XHUwNjQ1XHUwNjQ1XHUwNjQ4XHUwNjMyIiwiXHUwNjI2XHUwNjI3XHUwNjI4IiwiXHUwNjI2XHUwNmQ1XHUwNmNjXHUwNjQ0XHUwNjQ4XHUwNjQ4XHUwNjQ0IiwiXHUwNjJhXHUwNjM0XHUwNjMxXHUwNmNjXHUwNjQ2XHUwNmNjIFx1MDZjY1x1''@;'; put 'put ''MDZkNVx1MDY0M1x1MDZkNVx1MDY0NSIsIlx1MDYyYVx1MDYzNFx1MDYzMVx1MDZjY1x1MDY0Nlx1MDZjYyBcdTA2MmZcdTA2NDhcdTA2NDhcdTA2ZDVcdTA2NDUiLCJcdTA2NDNcdTA2MjdcdTA2NDZcdTA2NDhcdTA2NDZcdTA2Y2MgXHUwNmNjXHUwNmQ1XHUwNmE5XHUwNmQ1XHUwNjQ1Il07''@;'; put 'put ''SS5kZWZpbmVMb2NhbGUoImt1Iix7bW9udGhzOlYsbW9udGhzU2hvcnQ6Vix3ZWVrZGF5czoiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjX1x1MDYyZlx1MDY0OFx1MDY0OFx1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NVx1''@;'; put 'put ''MDY0NVx1MDY0N1x1MjAwY19cdTA2MzNcdTA2Y2VcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVcdTA2NDVcdTA2NDdcdTIwMGNfXHUwNjg2XHUwNjQ4XHUwNjI3XHUwNjMxXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjX1x1MDY3ZVx1MDZjZVx1MDY0Nlx1MDYyY1x1''@;'; put 'put ''MDYzNFx1MDY0N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1MjAwY19cdTA2NDdcdTA2NDdcdTIwMGNcdTA2Y2NcdTA2NDZcdTA2Y2NfXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDZjY1x1MDY0N1x1MjAw''@;'; put 'put ''Y1x1MDY0M1x1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NV9cdTA2MmZcdTA2NDhcdTA2NDhcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVfXHUwNjMzXHUwNmNlXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1X1x1MDY4Nlx1MDY0OFx1MDYyN1x1MDYzMVx1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NV9cdTA2''@;'; put 'put ''N2VcdTA2Y2VcdTA2NDZcdTA2MmNcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVfXHUwNjQ3XHUwNjQ3XHUyMDBjXHUwNmNjXHUwNjQ2XHUwNmNjX1x1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1MjAwYyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNmNjX1x1MDYyZl9c''@;'; put 'put ''dTA2MzNfXHUwNjg2X1x1MDY3ZV9cdTA2NDdfXHUwNjM0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0i''@;'; put 'put ''LExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjI2XHUwNmNlXHUwNjQ4XHUwNjI3XHUwNjMxXHUwNjQ3XHUyMDBjfFx1MDYyOFx1MDY0N1x1MjAwY1x1MDZjY1x1MDYyN1x1MDY0Nlx1MDZjYy8saXNQTTpmdW5jdGlvbihQKXtyZXR1cm4vXHUwNjI2''@;'; put 'put ''XHUwNmNlXHUwNjQ4XHUwNjI3XHUwNjMxXHUwNjQ3XHUyMDBjLy50ZXN0KFApfSxtZXJpZGllbTpmdW5jdGlvbihQLEYsUil7cmV0dXJuIFA8MTI/Ilx1MDYyOFx1MDY0N1x1MjAwY1x1MDZjY1x1MDYyN1x1MDY0Nlx1MDZjYyI6Ilx1MDYyNlx1MDZjZVx1MDY0OFx1MDYyN1x1MDYzMVx1MDY0''@;'; put 'put ''N1x1MjAwYyJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI2XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjMxXHUwNmM2IFx1MDY0M1x1MDYyN1x1MDYyYVx1MDY5OFx1MDY0NVx1MDZjZVx1MDYzMV0gTFQiLG5leHREYXk6IltcdTA2MjhcdTA2NDdcdTIwMGNcdTA2Y2NcdTA2MjdcdTA2NDZcdTA2''@;'; put 'put ''Y2MgXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDY0M1x1MDYyN1x1MDYyYVx1MDY5OFx1MDY0NVx1MDZjZVx1MDYzMV0gTFQiLGxhc3REYXk6IltcdTA2MmZcdTA2NDhcdTA2Y2VcdTA2NDZcdTA2Y2UgXHUwNjQzXHUw''@;'; put 'put ''NjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxXSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDY0M1x1MDYyN1x1MDYyYVx1MDY5OFx1MDY0NVx1MDZjZVx1MDYzMV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDY0NFx1MDY0N1x1MjAwYyAlcyIscGFz''@;'; put 'put ''dDoiJXMiLHM6Ilx1MDY4Nlx1MDY0N1x1MjAwY1x1MDY0Nlx1MDYyZiBcdTA2ODZcdTA2MzFcdTA2NDNcdTA2NDdcdTIwMGNcdTA2Y2NcdTA2NDdcdTIwMGNcdTA2NDMiLHNzOiJcdTA2ODZcdTA2MzFcdTA2NDNcdTA2NDdcdTIwMGMgJWQiLG06Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0MyBc''@;'; put 'put ''dTA2MmVcdTA2NDhcdTA2NDRcdTA2NDdcdTIwMGNcdTA2NDMiLG1tOiIlZCBcdTA2MmVcdTA2NDhcdTA2NDRcdTA2NDdcdTIwMGNcdTA2NDMiLGg6Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0MyBcdTA2NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzEiLGhoOiIlZCBcdTA2''@;'; put 'put ''NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzEiLGQ6Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0MyBcdTA2OTVcdTA2YzZcdTA2OTgiLGRkOiIlZCBcdTA2OTVcdTA2YzZcdTA2OTgiLE06Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0MyBcdTA2NDVcdTA2MjdcdTA2NDZcdTA2''@;'; put 'put ''YWYiLE1NOiIlZCBcdTA2NDVcdTA2MjdcdTA2NDZcdTA2YWYiLHk6Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0MyBcdTA2MzNcdTA2MjdcdTA2YjUiLHl5OiIlZCBcdTA2MzNcdTA2MjdcdTA2YjUifSxwcmVwYXJzZTpmdW5jdGlvbihQKXtyZXR1cm4gUC5yZXBsYWNlKC9bXHUwNjYxXHUwNjYy''@;'; put 'put ''XHUwNjYzXHUwNjY0XHUwNjY1XHUwNjY2XHUwNjY3XHUwNjY4XHUwNjY5XHUwNjYwXS9nLGZ1bmN0aW9uKEYpe3JldHVybiBwW0ZdfSkucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihQKXtyZXR1cm4gUC5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKEYpe3JldHVy''@;'; put 'put ''biBfW0ZdfSkucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjYsZG95OjEyfX0pfShiKDk3NTg2KSl9LDcwMTcwOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiaXQiLHttb250aHM6Imdlbm5haW9fZmViYnJhaW9fbWFy''@;'; put 'put ''em9fYXByaWxlX21hZ2dpb19naXVnbm9fbHVnbGlvX2Fnb3N0b19zZXR0ZW1icmVfb3R0b2JyZV9ub3ZlbWJyZV9kaWNlbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiZ2VuX2ZlYl9tYXJfYXByX21hZ19naXVfbHVnX2Fnb19zZXRfb3R0X25vdl9kaWMiLnNwbGl0KCJfIiksd2Vla2Rh''@;'; put 'put ''eXM6ImRvbWVuaWNhX2x1bmVkXHhlY19tYXJ0ZWRceGVjX21lcmNvbGVkXHhlY19naW92ZWRceGVjX3ZlbmVyZFx4ZWNfc2FiYXRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbV9sdW5fbWFyX21lcl9naW9fdmVuX3NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFf''@;'; put 'put ''bWVfZ2lfdmVfc2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3Nh''@;'; put 'put ''bWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW09nZ2kgYSIrKHRoaXMuaG91cnMoKT4xPyJsbGUgIjowPT09dGhpcy5ob3VycygpPyIgIjoibGwnIikrIl1MVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW0RvbWFuaSBhIisodGhpcy5ob3VycygpPjE/ImxsZSAiOjA9PT10aGlzLmhvdXJz''@;'; put 'put ''KCk/IiAiOiJsbCciKSsiXUxUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSIrKHRoaXMuaG91cnMoKT4xPyJsbGUgIjowPT09dGhpcy5ob3VycygpPyIgIjoibGwnIikrIl1MVCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW0llcmkgYSIrKHRoaXMuaG91cnMoKT4x''@;'; put 'put ''PyJsbGUgIjowPT09dGhpcy5ob3VycygpPyIgIjoibGwnIikrIl1MVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmRheSgpPyJbTGEgc2NvcnNhXSBkZGRkIFthIisodGhpcy5ob3VycygpPjE/ImxsZSAiOjA9PT10aGlzLmhvdXJzKCk/IiAiOiJsbCciKSsiXUxUIjoi''@;'; put 'put ''W0xvIHNjb3Jzb10gZGRkZCBbYSIrKHRoaXMuaG91cnMoKT4xPyJsbGUgIjowPT09dGhpcy5ob3VycygpPyIgIjoibGwnIikrIl1MVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InRyYSAlcyIscGFzdDoiJXMgZmEiLHM6ImFsY3VuaSBzZWNvbmRpIixzczoiJWQgc2Vj''@;'; put 'put ''b25kaSIsbToidW4gbWludXRvIixtbToiJWQgbWludXRpIixoOiJ1bidvcmEiLGhoOiIlZCBvcmUiLGQ6InVuIGdpb3JubyIsZGQ6IiVkIGdpb3JuaSIsdzoidW5hIHNldHRpbWFuYSIsd3c6IiVkIHNldHRpbWFuZSIsTToidW4gbWVzZSIsTU06IiVkIG1lc2kiLHk6InVuIGFubm8iLHl5OiIl''@;'; put 'put ''ZCBhbm5pIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sNzAzMzY6KGNlLFgsYik9Pnt2YXIgST1iKDEzNTQ2KSxfPWIoMjcwNTQpLkJ1ZmZlcixwPWIoOTU3MjUpO2Z1bmN0aW9u''@;'; put 'put ''IFYoUCl7dmFyIEY9UC5fY2lwaGVyLmVuY3J5cHRCbG9ja1JhdyhQLl9wcmV2KTtyZXR1cm4gcChQLl9wcmV2KSxGfVguZW5jcnlwdD1mdW5jdGlvbihQLEYpe3ZhciBSPU1hdGguY2VpbChGLmxlbmd0aC8xNiksej1QLl9jYWNoZS5sZW5ndGg7UC5fY2FjaGU9Xy5jb25jYXQoW1AuX2NhY2hl''@;'; put 'put ''LF8uYWxsb2NVbnNhZmUoMTYqUildKTtmb3IodmFyIE49MDtOPFI7TisrKXt2YXIgTz1WKFApLEs9eisxNipOO1AuX2NhY2hlLndyaXRlVUludDMyQkUoT1swXSxLKzApLFAuX2NhY2hlLndyaXRlVUludDMyQkUoT1sxXSxLKzQpLFAuX2NhY2hlLndyaXRlVUludDMyQkUoT1syXSxLKzgpLFAu''@;'; put 'put ''X2NhY2hlLndyaXRlVUludDMyQkUoT1szXSxLKzEyKX12YXIgWj1QLl9jYWNoZS5zbGljZSgwLEYubGVuZ3RoKTtyZXR1cm4gUC5fY2FjaGU9UC5fY2FjaGUuc2xpY2UoRi5sZW5ndGgpLEkoRixaKX19LDcwMzk5OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJ''@;'; put 'put ''LmRlZmluZUxvY2FsZSgibXMiLHttb250aHM6IkphbnVhcmlfRmVicnVhcmlfTWFjX0FwcmlsX01laV9KdW5fSnVsYWlfT2dvc19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EaXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYWNfQXByX01laV9KdW5fSnVsX09n''@;'; put 'put ''c19TZXBfT2t0X05vdl9EaXMiLnNwbGl0KCJfIiksd2Vla2RheXM6IkFoYWRfSXNuaW5fU2VsYXNhX1JhYnVfS2hhbWlzX0p1bWFhdF9TYWJ0dSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJBaGRfSXNuX1NlbF9SYWJfS2hhX0p1bV9TYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkFo''@;'; put 'put ''X0lzX1NsX1JiX0ttX0ptX1NiIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBbcHVr''@;'; put 'put ''dWxdIEhILm1tIn0sbWVyaWRpZW1QYXJzZTovcGFnaXx0ZW5nYWhhcml8cGV0YW5nfG1hbGFtLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24ocCxWKXtyZXR1cm4gMTI9PT1wJiYocD0wKSwicGFnaSI9PT1WP3A6InRlbmdhaGFyaSI9PT1WP3A+PTExP3A6cCsxMjoicGV0YW5nIj09PVZ8fCJtYWxh''@;'; put 'put ''bSI9PT1WP3ArMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihwLFYsdyl7cmV0dXJuIHA8MTE/InBhZ2kiOnA8MTU/InRlbmdhaGFyaSI6cDwxOT8icGV0YW5nIjoibWFsYW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hhcmkgaW5pIHB1a3VsXSBMVCIsbmV4dERheToiW0Vzb2sgcHVrdWxd''@;'; put 'put ''IExUIixuZXh0V2VlazoiZGRkZCBbcHVrdWxdIExUIixsYXN0RGF5OiJbS2VsbWFyaW4gcHVrdWxdIExUIixsYXN0V2VlazoiZGRkZCBbbGVwYXMgcHVrdWxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkYWxhbSAlcyIscGFzdDoiJXMgeWFuZyBsZXBhcyIsczoi''@;'; put 'put ''YmViZXJhcGEgc2FhdCIsc3M6IiVkIHNhYXQiLG06InNlbWluaXQiLG1tOiIlZCBtaW5pdCIsaDoic2VqYW0iLGhoOiIlZCBqYW0iLGQ6InNlaGFyaSIsZGQ6IiVkIGhhcmkiLE06InNlYnVsYW4iLE1NOiIlZCBidWxhbiIseToic2V0YWh1biIseXk6IiVkIHRhaHVuIn0sd2Vlazp7ZG93OjEs''@;'; put 'put ''ZG95Ojd9fSl9KGIoOTc1ODYpKX0sNzA0NjM6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigyNzA1NCkuQnVmZmVyLF89Yig0MTA5MCk7ZnVuY3Rpb24gcChWLHcpe3RoaXMuX2Jsb2NrPUkuYWxsb2MoViksdGhpcy5fZmluYWxTaXplPXcsdGhpcy5fYmxvY2tTaXplPVYsdGhpcy5f''@;'; put 'put ''bGVuPTB9cC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKFYsdyl7Vj1fKFYsd3x8InV0ZjgiKTtmb3IodmFyIFA9dGhpcy5fYmxvY2ssRj10aGlzLl9ibG9ja1NpemUsUj1WLmxlbmd0aCx6PXRoaXMuX2xlbixOPTA7TjxSOyl7Zm9yKHZhciBPPXolRixLPU1hdGgubWluKFItTixGLU8pLFo9''@;'; put 'put ''MDtaPEs7WisrKVBbTytaXT1WW04rWl07Tis9Sywoeis9SyklRj09MCYmdGhpcy5fdXBkYXRlKFApfXJldHVybiB0aGlzLl9sZW4rPVIsdGhpc30scC5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKFYpe3ZhciB3PXRoaXMuX2xlbiV0aGlzLl9ibG9ja1NpemU7dGhpcy5fYmxvY2tbd109MTI4''@;'; put 'put ''LHRoaXMuX2Jsb2NrLmZpbGwoMCx3KzEpLHc+PXRoaXMuX2ZpbmFsU2l6ZSYmKHRoaXMuX3VwZGF0ZSh0aGlzLl9ibG9jayksdGhpcy5fYmxvY2suZmlsbCgwKSk7dmFyIFA9OCp0aGlzLl9sZW47aWYoUDw9NDI5NDk2NzI5NSl0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKFAsdGhpcy5fYmxv''@;'; put 'put ''Y2tTaXplLTQpO2Vsc2V7dmFyIEY9KDQyOTQ5NjcyOTUmUCk+Pj4wO3RoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUoKFAtRikvNDI5NDk2NzI5Nix0aGlzLl9ibG9ja1NpemUtOCksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJCRShGLHRoaXMuX2Jsb2NrU2l6ZS00KX10aGlzLl91cGRhdGUodGhp''@;'; put 'put ''cy5fYmxvY2spO3ZhciB6PXRoaXMuX2hhc2goKTtyZXR1cm4gVj96LnRvU3RyaW5nKFYpOnp9LHAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIl91cGRhdGUgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzcyIpfSxjZS5leHBvcnRzPXB9LDcwODI0''@;'; put 'put ''OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNTgwMTIpLF89Yig5Nzk1MSkscD1iKDQ0NjQ4KS5mLFY9SSgidW5zY29wYWJsZXMiKSx3PUFycmF5LnByb3RvdHlwZTt2b2lkIDA9PT13W1ZdJiZwKHcsVix7Y29uZmlndXJhYmxlOiEwLHZhbHVlOl8obnVsbCl9KSxjZS5leHBvcnRz''@;'; put 'put ''PWZ1bmN0aW9uKFApe3dbVl1bUF09ITB9fSw3MDgzNzpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPU1hdGguYWJzfSw3MTAzOTooY2UsWCxiKT0+e3ZhciBJPWIoMjcwNTQpLkJ1ZmZlcjtmdW5jdGlvbiBfKFYsdyxQKXtmb3IodmFyIE8sSyxSPS0xLE49MDsrK1I8ODspTis9KDEyOCYo''@;'; put 'put ''Sz1WLl9jaXBoZXIuZW5jcnlwdEJsb2NrKFYuX3ByZXYpWzBdXihPPXcmMTw8Ny1SPzEyODowKSkpPj5SJTgsVi5fcHJldj1wKFYuX3ByZXYsUD9POkspO3JldHVybiBOfWZ1bmN0aW9uIHAoVix3KXt2YXIgUD1WLmxlbmd0aCxGPS0xLFI9SS5hbGxvY1Vuc2FmZShWLmxlbmd0aCk7Zm9yKFY9''@;'; put 'put ''SS5jb25jYXQoW1YsSS5mcm9tKFt3XSldKTsrK0Y8UDspUltGXT1WW0ZdPDwxfFZbRisxXT4+NztyZXR1cm4gUn1YLmVuY3J5cHQ9ZnVuY3Rpb24oVix3LFApe2Zvcih2YXIgRj13Lmxlbmd0aCxSPUkuYWxsb2NVbnNhZmUoRiksej0tMTsrK3o8RjspUlt6XT1fKFYsd1t6XSxQKTtyZXR1cm4g''@;'; put 'put ''Un19LDcxMTY4OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNDYzODcpLF89YigyNjkyOSkscD1iKDQ0NjQ4KSxWPWIoMTEwOCksdz1iKDkzMTYyKSxQPWIoMTAxNDMpO1guZj1JJiYhXz9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbihSLHope1YoUik7Zm9yKHZhciBZ''@;'; put 'put ''LE49dyh6KSxPPVAoeiksSz1PLmxlbmd0aCxaPTA7Sz5aOylwLmYoUixZPU9bWisrXSxOW1ldKTtyZXR1cm4gUn19LDcxMzU0OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMjgzNjcpLF89Yig0NjkyNikscD1iKDMxNDgzKSxWPWIoMTEwOCksdz1iKDc1NDI0KSxQPWIoNjk5MTcp''@;'; put 'put ''LEY9Yig0MjkyNiksUj1iKDY2NTQyKSx6PWIoNTY3NDUpLE49Yig0MTI1MiksTz1iKDg4Nzg4KSxLPSFPJiYheigibWFwIixmdW5jdGlvbigpe30pLFo9IU8mJiFLJiZOKCJtYXAiLFR5cGVFcnJvciksWT1PfHxLfHxaLFc9UChmdW5jdGlvbigpe3ZhciBxPXRoaXMuaXRlcmF0b3IsZWU9Vihf''@;'; put 'put ''KHRoaXMubmV4dCxxKSk7aWYoISh0aGlzLmRvbmU9ISFlZS5kb25lKSlyZXR1cm4gRihxLHRoaXMubWFwcGVyLFtlZS52YWx1ZSx0aGlzLmNvdW50ZXIrK10sITApfSk7SSh7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6WX0se21hcDpmdW5jdGlvbihlZSl7Vih0''@;'; put 'put ''aGlzKTt0cnl7cChlZSl9Y2F0Y2goSil7Uih0aGlzLCJ0aHJvdyIsSil9cmV0dXJuIFo/XyhaLHRoaXMsZWUpOm5ldyBXKHcodGhpcykse21hcHBlcjplZX0pfX0pfSw3MTU0OTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0IjtYLnV0aWxzPWIoODU2NzEpLFguQ2lwaGVyPWIoMTAyMTkpLFguREVT''@;'; put 'put ''PWIoNjQxNjYpLFguQ0JDPWIoODg4MDApLFguRURFPWIoNjIxMjIpfSw3MTgyNDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDM4NTk1KSxfPWIoMTkxNTApLHA9Yig4NjY3NSksdz1iKDU4MDEyKSgidG9TdHJpbmdUYWciKSxQPU9iamVjdCxGPSJBcmd1bWVudHMiPT09cChmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpO2NlLmV4cG9ydHM9ST9wOmZ1bmN0aW9uKHope3ZhciBOLE8sSztyZXR1cm4gdm9pZCAwPT09ej8iVW5kZWZpbmVkIjpudWxsPT09ej8iTnVsbCI6InN0cmluZyI9PXR5cGVvZihPPWZ1bmN0aW9uKHosTil7dHJ5e3JldHVybiB6W05dfWNhdGNo''@;'; put 'put ''e319KE49UCh6KSx3KSk/TzpGP3AoTik6Ik9iamVjdCI9PT0oSz1wKE4pKSYmXyhOLmNhbGxlZSk/IkFyZ3VtZW50cyI6S319LDcxOTkzOmNlPT57Y2UuZXhwb3J0cz0iZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihiLEkpe0kmJihiLnN1cGVyXz1JLGIucHJvdG90''@;'; put 'put ''eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpiLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pKX06ZnVuY3Rpb24oYixJKXtpZihJKXtiLnN1cGVyXz1JO3ZhciBfPWZ1bmN0aW9uKCl7fTtfLnByb3RvdHlwZT1JLnBy''@;'; put 'put ''b3RvdHlwZSxiLnByb3RvdHlwZT1uZXcgXyxiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1ifX19LDcyMTkzOihjZSxYLGIpPT57dmFyIEk9Yig3MTk5MyksXz1iKDgzODM4KS5CdWZmZXIscD1iKDQ5NjA5KSxWPXAuYmFzZSx3PXAuY29uc3RhbnRzLmRlcjtmdW5jdGlvbiBQKE4pe3RoaXMuZW5j''@;'; put 'put ''PSJkZXIiLHRoaXMubmFtZT1OLm5hbWUsdGhpcy5lbnRpdHk9Tix0aGlzLnRyZWU9bmV3IEYsdGhpcy50cmVlLl9pbml0KE4uYm9keSl9ZnVuY3Rpb24gRihOKXtWLk5vZGUuY2FsbCh0aGlzLCJkZXIiLE4pfWZ1bmN0aW9uIFIoTil7cmV0dXJuIE48MTA/IjAiK046Tn1jZS5leHBvcnRzPVAs''@;'; put 'put ''UC5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKE8sSyl7cmV0dXJuIHRoaXMudHJlZS5fZW5jb2RlKE8sSykuam9pbigpfSxJKEYsVi5Ob2RlKSxGLnByb3RvdHlwZS5fZW5jb2RlQ29tcG9zaXRlPWZ1bmN0aW9uKE8sSyxaLFkpe3ZhciBKLFc9ZnVuY3Rpb24geihOLE8sSyxaKXt2YXIgWTtp''@;'; put 'put ''Zigic2Vxb2YiPT09Tj9OPSJzZXEiOiJzZXRvZiI9PT1OJiYoTj0ic2V0Iiksdy50YWdCeU5hbWUuaGFzT3duUHJvcGVydHkoTikpWT13LnRhZ0J5TmFtZVtOXTtlbHNle2lmKCJudW1iZXIiIT10eXBlb2YgTnx8KDB8TikhPT1OKXJldHVybiBaLmVycm9yKCJVbmtub3duIHRhZzogIitOKTtZ''@;'; put 'put ''PU59cmV0dXJuIFk+PTMxP1ouZXJyb3IoIk11bHRpLW9jdGV0IHRhZyBlbmNvZGluZyB1bnN1cHBvcnRlZCIpOihPfHwoWXw9MzIpLFl8PXcudGFnQ2xhc3NCeU5hbWVbS3x8InVuaXZlcnNhbCJdPDw2KX0oTyxLLFosdGhpcy5yZXBvcnRlcik7aWYoWS5sZW5ndGg8MTI4KXJldHVybihKPW5l''@;'; put 'put ''dyBfKDIpKVswXT1XLEpbMV09WS5sZW5ndGgsdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbSixZXSk7Zm9yKHZhciBxPTEsZWU9WS5sZW5ndGg7ZWU+PTI1NjtlZT4+PTgpcSsrOyhKPW5ldyBfKDIrcSkpWzBdPVcsSlsxXT0xMjh8cSxlZT0xK3E7Zm9yKHZhciByZT1ZLmxlbmd0aDtyZT4w''@;'; put 'put ''O2VlLS0scmU+Pj04KUpbZWVdPTI1NSZyZTtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbSixZXSl9LEYucHJvdG90eXBlLl9lbmNvZGVTdHI9ZnVuY3Rpb24oTyxLKXtpZigiYml0c3RyIj09PUspcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzB8Ty51bnVzZWQs''@;'; put 'put ''Ty5kYXRhXSk7aWYoImJtcHN0ciI9PT1LKXtmb3IodmFyIFo9bmV3IF8oMipPLmxlbmd0aCksWT0wO1k8Ty5sZW5ndGg7WSsrKVoud3JpdGVVSW50MTZCRShPLmNoYXJDb2RlQXQoWSksMipZKTtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihaKX1yZXR1cm4ibnVtc3RyIj09PUs/''@;'; put 'put ''dGhpcy5faXNOdW1zdHIoTyk/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihPKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogbnVtc3RyIHN1cHBvcnRzIG9ubHkgZGlnaXRzIGFuZCBzcGFjZSIpOiJwcmludHN0ciI9PT1LP3RoaXMuX2lzUHJpbnRzdHIo''@;'; put 'put ''Tyk/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihPKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgc3VwcG9ydHMgb25seSBsYXRpbiB1cHBlciBhbmQgbG93ZXIgY2FzZSBsZXR0ZXJzLCBkaWdpdHMsIHNwYWNlLCBhcG9zdHJvcGhlLCBs''@;'; put 'put ''ZWZ0IGFuZCByaWd0aCBwYXJlbnRoZXNpcywgcGx1cyBzaWduLCBjb21tYSwgaHlwaGVuLCBkb3QsIHNsYXNoLCBjb2xvbiwgZXF1YWwgc2lnbiwgcXVlc3Rpb24gbWFyayIpOi9zdHIkLy50ZXN0KEspfHwib2JqRGVzYyI9PT1LP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTyk6dGhpcy5y''@;'; put 'put ''ZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6ICIrSysiIHVuc3VwcG9ydGVkIil9LEYucHJvdG90eXBlLl9lbmNvZGVPYmppZD1mdW5jdGlvbihPLEssWil7aWYoInN0cmluZyI9PXR5cGVvZiBPKXtpZighSylyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigic3RyaW5n''@;'; put 'put ''IG9iamlkIGdpdmVuLCBidXQgbm8gdmFsdWVzIG1hcCBmb3VuZCIpO2lmKCFLLmhhc093blByb3BlcnR5KE8pKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJvYmppZCBub3QgZm91bmQgaW4gdmFsdWVzIG1hcCIpO089S1tPXS5zcGxpdCgvW1xzXC5dKy9nKTtmb3IodmFyIFk9MDtZPE8u''@;'; put 'put ''bGVuZ3RoO1krKylPW1ldfD0wfWVsc2UgaWYoQXJyYXkuaXNBcnJheShPKSlmb3IoTz1PLnNsaWNlKCksWT0wO1k8Ty5sZW5ndGg7WSsrKU9bWV18PTA7aWYoIUFycmF5LmlzQXJyYXkoTykpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIm9iamlkKCkgc2hvdWxkIGJlIGVpdGhlciBhcnJh''@;'; put 'put ''eSBvciBzdHJpbmcsIGdvdDogIitKU09OLnN0cmluZ2lmeShPKSk7aWYoIVope2lmKE9bMV0+PTQwKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJTZWNvbmQgb2JqaWQgaWRlbnRpZmllciBPT0IiKTtPLnNwbGljZSgwLDIsNDAqT1swXStPWzFdKX12YXIgVz0wO2ZvcihZPTA7WTxPLmxl''@;'; put 'put ''bmd0aDtZKyspe3ZhciBxPU9bWV07Zm9yKFcrKztxPj0xMjg7cT4+PTcpVysrfXZhciBlZT1uZXcgXyhXKSxKPWVlLmxlbmd0aC0xO2ZvcihZPU8ubGVuZ3RoLTE7WT49MDtZLS0pZm9yKGVlW0otLV09MTI3JihxPU9bWV0pOyhxPj49Nyk+MDspZWVbSi0tXT0xMjh8MTI3JnE7cmV0dXJuIHRo''@;'; put 'put ''aXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoZWUpfSxGLnByb3RvdHlwZS5fZW5jb2RlVGltZT1mdW5jdGlvbihPLEspe3ZhciBaLFk9bmV3IERhdGUoTyk7cmV0dXJuImdlbnRpbWUiPT09Sz9aPVtSKFkuZ2V0RnVsbFllYXIoKSksUihZLmdldFVUQ01vbnRoKCkrMSksUihZLmdldFVUQ0RhdGUo''@;'; put 'put ''KSksUihZLmdldFVUQ0hvdXJzKCkpLFIoWS5nZXRVVENNaW51dGVzKCkpLFIoWS5nZXRVVENTZWNvbmRzKCkpLCJaIl0uam9pbigiIik6InV0Y3RpbWUiPT09Sz9aPVtSKFkuZ2V0RnVsbFllYXIoKSUxMDApLFIoWS5nZXRVVENNb250aCgpKzEpLFIoWS5nZXRVVENEYXRlKCkpLFIoWS5nZXRV''@;'; put 'put ''VENIb3VycygpKSxSKFkuZ2V0VVRDTWludXRlcygpKSxSKFkuZ2V0VVRDU2Vjb25kcygpKSwiWiJdLmpvaW4oIiIpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nICIrSysiIHRpbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXQiKSx0aGlzLl9lbmNvZGVTdHIoWiwib2N0c3RyIil9LEYucHJv''@;'; put 'put ''dG90eXBlLl9lbmNvZGVOdWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoIiIpfSxGLnByb3RvdHlwZS5fZW5jb2RlSW50PWZ1bmN0aW9uKE8sSyl7aWYoInN0cmluZyI9PXR5cGVvZiBPKXtpZighSylyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiU3Ry''@;'; put 'put ''aW5nIGludCBvciBlbnVtIGdpdmVuLCBidXQgbm8gdmFsdWVzIG1hcCIpO2lmKCFLLmhhc093blByb3BlcnR5KE8pKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJWYWx1ZXMgbWFwIGRvZXNuJ3QgY29udGFpbjogIitKU09OLnN0cmluZ2lmeShPKSk7Tz1LW09dfWlmKCJudW1iZXIiIT10''@;'; put 'put ''eXBlb2YgTyYmIV8uaXNCdWZmZXIoTykpe3ZhciBaPU8udG9BcnJheSgpOyFPLnNpZ24mJjEyOCZaWzBdJiZaLnVuc2hpZnQoMCksTz1uZXcgXyhaKX1pZihfLmlzQnVmZmVyKE8pKXt2YXIgWT1PLmxlbmd0aDswPT09Ty5sZW5ndGgmJlkrKzt2YXIgcT1uZXcgXyhZKTtyZXR1cm4gTy5jb3B5''@;'; put 'put ''KHEpLDA9PT1PLmxlbmd0aCYmKHFbMF09MCksdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihxKX1pZihPPDEyOClyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihPKTtpZihPPDI1NilyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbMCxPXSk7WT0xO2Zvcih2YXIgVz1P''@;'; put 'put ''O1c+PTI1NjtXPj49OClZKys7Zm9yKFc9KHE9bmV3IEFycmF5KFkpKS5sZW5ndGgtMTtXPj0wO1ctLSlxW1ddPTI1NSZPLE8+Pj04O3JldHVybiAxMjgmcVswXSYmcS51bnNoaWZ0KDApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIobmV3IF8ocSkpfSxGLnByb3RvdHlwZS5fZW5jb2RlQm9v''@;'; put 'put ''bD1mdW5jdGlvbihPKXtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihPPzI1NTowKX0sRi5wcm90b3R5cGUuX3VzZT1mdW5jdGlvbihPLEspe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBPJiYoTz1PKEspKSxPLl9nZXRFbmNvZGVyKCJkZXIiKS50cmVlfSxGLnByb3RvdHlwZS5f''@;'; put 'put ''c2tpcERlZmF1bHQ9ZnVuY3Rpb24oTyxLLFope3ZhciBXLFk9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1ZLmRlZmF1bHQpcmV0dXJuITE7dmFyIHE9Ty5qb2luKCk7aWYodm9pZCAwPT09WS5kZWZhdWx0QnVmZmVyJiYoWS5kZWZhdWx0QnVmZmVyPXRoaXMuX2VuY29kZVZhbHVlKFkuZGVm''@;'; put 'put ''YXVsdCxLLFopLmpvaW4oKSkscS5sZW5ndGghPT1ZLmRlZmF1bHRCdWZmZXIubGVuZ3RoKXJldHVybiExO2ZvcihXPTA7VzxxLmxlbmd0aDtXKyspaWYocVtXXSE9PVkuZGVmYXVsdEJ1ZmZlcltXXSlyZXR1cm4hMTtyZXR1cm4hMH19LDcyMzI0OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9y''@;'; put 'put ''dHM9SlNPTi5wYXJzZSgnW1siMCIsIlxcdTAwMDAiLDEyN10sWyJhMTQwIiwiXHUzMDAwXHVmZjBjXHUzMDAxXHUzMDAyXHVmZjBlXHUyMDI3XHVmZjFiXHVmZjFhXHVmZjFmXHVmZjAxXHVmZTMwXHUyMDI2XHUyMDI1XHVmZTUwXHVmZTUxXHVmZTUyXHhiN1x1ZmU1NFx1ZmU1NVx1ZmU1Nlx1''@;'; put 'put ''ZmU1N1x1ZmY1Y1x1MjAxM1x1ZmUzMVx1MjAxNFx1ZmUzM1x1MjU3NFx1ZmUzNFx1ZmU0Zlx1ZmYwOFx1ZmYwOVx1ZmUzNVx1ZmUzNlx1ZmY1Ylx1ZmY1ZFx1ZmUzN1x1ZmUzOFx1MzAxNFx1MzAxNVx1ZmUzOVx1ZmUzYVx1MzAxMFx1MzAxMVx1ZmUzYlx1ZmUzY1x1MzAwYVx1MzAwYlx1ZmUz''@;'; put 'put ''ZFx1ZmUzZVx1MzAwOFx1MzAwOVx1ZmUzZlx1ZmU0MFx1MzAwY1x1MzAwZFx1ZmU0MVx1ZmU0Mlx1MzAwZVx1MzAwZlx1ZmU0M1x1ZmU0NFx1ZmU1OVx1ZmU1YSJdLFsiYTFhMSIsIlx1ZmU1Ylx1ZmU1Y1x1ZmU1ZFx1ZmU1ZVx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MzAxZFx1MzAxZVx1''@;'; put 'put ''MjAzNVx1MjAzMlx1ZmYwM1x1ZmYwNlx1ZmYwYVx1MjAzYlx4YTdcdTMwMDNcdTI1Y2JcdTI1Y2ZcdTI1YjNcdTI1YjJcdTI1Y2VcdTI2MDZcdTI2MDVcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YmRcdTI1YmNcdTMyYTNcdTIxMDVceGFmXHVmZmUzXHVmZjNmXHUwMmNkXHVmZTQ5XHVm''@;'; put 'put ''ZTRhXHVmZTRkXHVmZTRlXHVmZTRiXHVmZTRjXHVmZTVmXHVmZTYwXHVmZTYxXHVmZjBiXHVmZjBkXHhkN1x4ZjdceGIxXHUyMjFhXHVmZjFjXHVmZjFlXHVmZjFkXHUyMjY2XHUyMjY3XHUyMjYwXHUyMjFlXHUyMjUyXHUyMjYxXHVmZTYyIiw0LCJcdWZmNWVcdTIyMjlcdTIyMmFcdTIyYTVc''@;'; put 'put ''dTIyMjBcdTIyMWZcdTIyYmZcdTMzZDJcdTMzZDFcdTIyMmJcdTIyMmVcdTIyMzVcdTIyMzRcdTI2NDBcdTI2NDJcdTIyOTVcdTIyOTlcdTIxOTFcdTIxOTNcdTIxOTBcdTIxOTJcdTIxOTZcdTIxOTdcdTIxOTlcdTIxOThcdTIyMjVcdTIyMjNcdWZmMGYiXSxbImEyNDAiLCJcdWZmM2NcdTIy''@;'; put 'put ''MTVcdWZlNjhcdWZmMDRcdWZmZTVcdTMwMTJcdWZmZTBcdWZmZTFcdWZmMDVcdWZmMjBcdTIxMDNcdTIxMDlcdWZlNjlcdWZlNmFcdWZlNmJcdTMzZDVcdTMzOWNcdTMzOWRcdTMzOWVcdTMzY2VcdTMzYTFcdTMzOGVcdTMzOGZcdTMzYzRceGIwXHU1MTU5XHU1MTViXHU1MTVlXHU1MTVkXHU1''@;'; put 'put ''MTYxXHU1MTYzXHU1NWU3XHU3NGU5XHU3Y2NlXHUyNTgxIiw3LCJcdTI1OGZcdTI1OGVcdTI1OGRcdTI1OGNcdTI1OGJcdTI1OGFcdTI1ODlcdTI1M2NcdTI1MzRcdTI1MmNcdTI1MjRcdTI1MWNcdTI1OTRcdTI1MDBcdTI1MDJcdTI1OTVcdTI1MGNcdTI1MTBcdTI1MTRcdTI1MThcdTI1NmQi''@;'; put 'put ''XSxbImEyYTEiLCJcdTI1NmVcdTI1NzBcdTI1NmZcdTI1NTBcdTI1NWVcdTI1NmFcdTI1NjFcdTI1ZTJcdTI1ZTNcdTI1ZTVcdTI1ZTRcdTI1NzFcdTI1NzJcdTI1NzNcdWZmMTAiLDksIlx1MjE2MCIsOSwiXHUzMDIxIiw4LCJcdTUzNDFcdTUzNDRcdTUzNDVcdWZmMjEiLDI1LCJcdWZmNDEi''@;'; put 'put ''LDIxXSxbImEzNDAiLCJcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdTAzOTEiLDE2LCJcdTAzYTMiLDYsIlx1MDNiMSIsMTYsIlx1MDNjMyIsNiwiXHUzMTA1IiwxMF0sWyJhM2ExIiwiXHUzMTEwIiwyNSwiXHUwMmQ5XHUwMmM5XHUwMmNhXHUwMmM3XHUwMmNiIl0sWyJhM2UxIiwiXHUyMGFj''@;'; put 'put ''Il0sWyJhNDQwIiwiXHU0ZTAwXHU0ZTU5XHU0ZTAxXHU0ZTAzXHU0ZTQzXHU0ZTVkXHU0ZTg2XHU0ZThjXHU0ZWJhXHU1MTNmXHU1MTY1XHU1MTZiXHU1MWUwXHU1MjAwXHU1MjAxXHU1MjliXHU1MzE1XHU1MzQxXHU1MzVjXHU1M2M4XHU0ZTA5XHU0ZTBiXHU0ZTA4XHU0ZTBhXHU0ZTJiXHU0''@;'; put 'put ''ZTM4XHU1MWUxXHU0ZTQ1XHU0ZTQ4XHU0ZTVmXHU0ZTVlXHU0ZThlXHU0ZWExXHU1MTQwXHU1MjAzXHU1MmZhXHU1MzQzXHU1M2M5XHU1M2UzXHU1NzFmXHU1OGViXHU1OTE1XHU1OTI3XHU1OTczXHU1YjUwXHU1YjUxXHU1YjUzXHU1YmY4XHU1YzBmXHU1YzIyXHU1YzM4XHU1YzcxXHU1ZGRk''@;'; put 'put ''XHU1ZGU1XHU1ZGYxXHU1ZGYyXHU1ZGYzXHU1ZGZlXHU1ZTcyXHU1ZWZlXHU1ZjBiXHU1ZjEzXHU2MjRkIl0sWyJhNGExIiwiXHU0ZTExXHU0ZTEwXHU0ZTBkXHU0ZTJkXHU0ZTMwXHU0ZTM5XHU0ZTRiXHU1YzM5XHU0ZTg4XHU0ZTkxXHU0ZTk1XHU0ZTkyXHU0ZTk0XHU0ZWEyXHU0ZWMxXHU0''@;'; put 'put ''ZWMwXHU0ZWMzXHU0ZWM2XHU0ZWM3XHU0ZWNkXHU0ZWNhXHU0ZWNiXHU0ZWM0XHU1MTQzXHU1MTQxXHU1MTY3XHU1MTZkXHU1MTZlXHU1MTZjXHU1MTk3XHU1MWY2XHU1MjA2XHU1MjA3XHU1MjA4XHU1MmZiXHU1MmZlXHU1MmZmXHU1MzE2XHU1MzM5XHU1MzQ4XHU1MzQ3XHU1MzQ1XHU1MzVl''@;'; put 'put ''XHU1Mzg0XHU1M2NiXHU1M2NhXHU1M2NkXHU1OGVjXHU1OTI5XHU1OTJiXHU1OTJhXHU1OTJkXHU1YjU0XHU1YzExXHU1YzI0XHU1YzNhXHU1YzZmXHU1ZGY0XHU1ZTdiXHU1ZWZmXHU1ZjE0XHU1ZjE1XHU1ZmMzXHU2MjA4XHU2MjM2XHU2MjRiXHU2MjRlXHU2NTJmXHU2NTg3XHU2NTk3XHU2''@;'; put 'put ''NWE0XHU2NWI5XHU2NWU1XHU2NmYwXHU2NzA4XHU2NzI4XHU2YjIwXHU2YjYyXHU2Yjc5XHU2YmNiXHU2YmQ0XHU2YmRiXHU2YzBmXHU2YzM0XHU3MDZiXHU3MjJhXHU3MjM2XHU3MjNiXHU3MjQ3XHU3MjU5XHU3MjViXHU3MmFjXHU3MzhiXHU0ZTE5Il0sWyJhNTQwIiwiXHU0ZTE2XHU0ZTE1''@;'; put 'put ''XHU0ZTE0XHU0ZTE4XHU0ZTNiXHU0ZTRkXHU0ZTRmXHU0ZTRlXHU0ZWU1XHU0ZWQ4XHU0ZWQ0XHU0ZWQ1XHU0ZWQ2XHU0ZWQ3XHU0ZWUzXHU0ZWU0XHU0ZWQ5XHU0ZWRlXHU1MTQ1XHU1MTQ0XHU1MTg5XHU1MThhXHU1MWFjXHU1MWY5XHU1MWZhXHU1MWY4XHU1MjBhXHU1MmEwXHU1MjlmXHU1''@;'; put 'put ''MzA1XHU1MzA2XHU1MzE3XHU1MzFkXHU0ZWRmXHU1MzRhXHU1MzQ5XHU1MzYxXHU1MzYwXHU1MzZmXHU1MzZlXHU1M2JiXHU1M2VmXHU1M2U0XHU1M2YzXHU1M2VjXHU1M2VlXHU1M2U5XHU1M2U4XHU1M2ZjXHU1M2Y4XHU1M2Y1XHU1M2ViXHU1M2U2XHU1M2VhXHU1M2YyXHU1M2YxXHU1M2Yw''@;'; put 'put ''XHU1M2U1XHU1M2VkXHU1M2ZiXHU1NmRiXHU1NmRhXHU1OTE2Il0sWyJhNWExIiwiXHU1OTJlXHU1OTMxXHU1OTc0XHU1OTc2XHU1YjU1XHU1YjgzXHU1YzNjXHU1ZGU4XHU1ZGU3XHU1ZGU2XHU1ZTAyXHU1ZTAzXHU1ZTczXHU1ZTdjXHU1ZjAxXHU1ZjE4XHU1ZjE3XHU1ZmM1XHU2MjBhXHU2''@;'; put 'put ''MjUzXHU2MjU0XHU2MjUyXHU2MjUxXHU2NWE1XHU2NWU2XHU2NzJlXHU2NzJjXHU2NzJhXHU2NzJiXHU2NzJkXHU2YjYzXHU2YmNkXHU2YzExXHU2YzEwXHU2YzM4XHU2YzQxXHU2YzQwXHU2YzNlXHU3MmFmXHU3Mzg0XHU3Mzg5XHU3NGRjXHU3NGU2XHU3NTE4XHU3NTFmXHU3NTI4XHU3NTI5''@;'; put 'put ''XHU3NTMwXHU3NTMxXHU3NTMyXHU3NTMzXHU3NThiXHU3NjdkXHU3NmFlXHU3NmJmXHU3NmVlXHU3N2RiXHU3N2UyXHU3N2YzXHU3OTNhXHU3OWJlXHU3YTc0XHU3YWNiXHU0ZTFlXHU0ZTFmXHU0ZTUyXHU0ZTUzXHU0ZTY5XHU0ZTk5XHU0ZWE0XHU0ZWE2XHU0ZWE1XHU0ZWZmXHU0ZjA5XHU0''@;'; put 'put ''ZjE5XHU0ZjBhXHU0ZjE1XHU0ZjBkXHU0ZjEwXHU0ZjExXHU0ZjBmXHU0ZWYyXHU0ZWY2XHU0ZWZiXHU0ZWYwXHU0ZWYzXHU0ZWZkXHU0ZjAxXHU0ZjBiXHU1MTQ5XHU1MTQ3XHU1MTQ2XHU1MTQ4XHU1MTY4Il0sWyJhNjQwIiwiXHU1MTcxXHU1MThkXHU1MWIwXHU1MjE3XHU1MjExXHU1MjEy''@;'; put 'put ''XHU1MjBlXHU1MjE2XHU1MmEzXHU1MzA4XHU1MzIxXHU1MzIwXHU1MzcwXHU1MzcxXHU1NDA5XHU1NDBmXHU1NDBjXHU1NDBhXHU1NDEwXHU1NDAxXHU1NDBiXHU1NDA0XHU1NDExXHU1NDBkXHU1NDA4XHU1NDAzXHU1NDBlXHU1NDA2XHU1NDEyXHU1NmUwXHU1NmRlXHU1NmRkXHU1NzMzXHU1''@;'; put 'put ''NzMwXHU1NzI4XHU1NzJkXHU1NzJjXHU1NzJmXHU1NzI5XHU1OTE5XHU1OTFhXHU1OTM3XHU1OTM4XHU1OTg0XHU1OTc4XHU1OTgzXHU1OTdkXHU1OTc5XHU1OTgyXHU1OTgxXHU1YjU3XHU1YjU4XHU1Yjg3XHU1Yjg4XHU1Yjg1XHU1Yjg5XHU1YmZhXHU1YzE2XHU1Yzc5XHU1ZGRlXHU1ZTA2''@;'; put 'put ''XHU1ZTc2XHU1ZTc0Il0sWyJhNmExIiwiXHU1ZjBmXHU1ZjFiXHU1ZmQ5XHU1ZmQ2XHU2MjBlXHU2MjBjXHU2MjBkXHU2MjEwXHU2MjYzXHU2MjViXHU2MjU4XHU2NTM2XHU2NWU5XHU2NWU4XHU2NWVjXHU2NWVkXHU2NmYyXHU2NmYzXHU2NzA5XHU2NzNkXHU2NzM0XHU2NzMxXHU2NzM1XHU2''@;'; put 'put ''YjIxXHU2YjY0XHU2YjdiXHU2YzE2XHU2YzVkXHU2YzU3XHU2YzU5XHU2YzVmXHU2YzYwXHU2YzUwXHU2YzU1XHU2YzYxXHU2YzViXHU2YzRkXHU2YzRlXHU3MDcwXHU3MjVmXHU3MjVkXHU3NjdlXHU3YWY5XHU3YzczXHU3Y2Y4XHU3ZjM2XHU3ZjhhXHU3ZmJkXHU4MDAxXHU4MDAzXHU4MDBj''@;'; put 'put ''XHU4MDEyXHU4MDMzXHU4MDdmXHU4MDg5XHU4MDhiXHU4MDhjXHU4MWUzXHU4MWVhXHU4MWYzXHU4MWZjXHU4MjBjXHU4MjFiXHU4MjFmXHU4MjZlXHU4MjcyXHU4MjdlXHU4NjZiXHU4ODQwXHU4ODRjXHU4ODYzXHU4OTdmXHU5NjIxXHU0ZTMyXHU0ZWE4XHU0ZjRkXHU0ZjRmXHU0ZjQ3XHU0''@;'; put 'put ''ZjU3XHU0ZjVlXHU0ZjM0XHU0ZjViXHU0ZjU1XHU0ZjMwXHU0ZjUwXHU0ZjUxXHU0ZjNkXHU0ZjNhXHU0ZjM4XHU0ZjQzXHU0ZjU0XHU0ZjNjXHU0ZjQ2XHU0ZjYzIl0sWyJhNzQwIiwiXHU0ZjVjXHU0ZjYwXHU0ZjJmXHU0ZjRlXHU0ZjM2XHU0ZjU5XHU0ZjVkXHU0ZjQ4XHU0ZjVhXHU1MTRj''@;'; put 'put ''XHU1MTRiXHU1MTRkXHU1MTc1XHU1MWI2XHU1MWI3XHU1MjI1XHU1MjI0XHU1MjI5XHU1MjJhXHU1MjI4XHU1MmFiXHU1MmE5XHU1MmFhXHU1MmFjXHU1MzIzXHU1MzczXHU1Mzc1XHU1NDFkXHU1NDJkXHU1NDFlXHU1NDNlXHU1NDI2XHU1NDRlXHU1NDI3XHU1NDQ2XHU1NDQzXHU1NDMzXHU1''@;'; put 'put ''NDQ4XHU1NDQyXHU1NDFiXHU1NDI5XHU1NDRhXHU1NDM5XHU1NDNiXHU1NDM4XHU1NDJlXHU1NDM1XHU1NDM2XHU1NDIwXHU1NDNjXHU1NDQwXHU1NDMxXHU1NDJiXHU1NDFmXHU1NDJjXHU1NmVhXHU1NmYwXHU1NmU0XHU1NmViXHU1NzRhXHU1NzUxXHU1NzQwXHU1NzRkIl0sWyJhN2ExIiwi''@;'; put 'put ''XHU1NzQ3XHU1NzRlXHU1NzNlXHU1NzUwXHU1NzRmXHU1NzNiXHU1OGVmXHU1OTNlXHU1OTlkXHU1OTkyXHU1OWE4XHU1OTllXHU1OWEzXHU1OTk5XHU1OTk2XHU1OThkXHU1OWE0XHU1OTkzXHU1OThhXHU1OWE1XHU1YjVkXHU1YjVjXHU1YjVhXHU1YjViXHU1YjhjXHU1YjhiXHU1YjhmXHU1''@;'; put 'put ''YzJjXHU1YzQwXHU1YzQxXHU1YzNmXHU1YzNlXHU1YzkwXHU1YzkxXHU1Yzk0XHU1YzhjXHU1ZGViXHU1ZTBjXHU1ZThmXHU1ZTg3XHU1ZThhXHU1ZWY3XHU1ZjA0XHU1ZjFmXHU1ZjY0XHU1ZjYyXHU1Zjc3XHU1Zjc5XHU1ZmQ4XHU1ZmNjXHU1ZmQ3XHU1ZmNkXHU1ZmYxXHU1ZmViXHU1ZmY4''@;'; put 'put ''XHU1ZmVhXHU2MjEyXHU2MjExXHU2Mjg0XHU2Mjk3XHU2Mjk2XHU2MjgwXHU2Mjc2XHU2Mjg5XHU2MjZkXHU2MjhhXHU2MjdjXHU2MjdlXHU2Mjc5XHU2MjczXHU2MjkyXHU2MjZmXHU2Mjk4XHU2MjZlXHU2Mjk1XHU2MjkzXHU2MjkxXHU2Mjg2XHU2NTM5XHU2NTNiXHU2NTM4XHU2NWYxXHU2''@;'; put 'put ''NmY0XHU2NzVmXHU2NzRlXHU2NzRmXHU2NzUwXHU2NzUxXHU2NzVjXHU2NzU2XHU2NzVlXHU2NzQ5XHU2NzQ2XHU2NzYwIl0sWyJhODQwIiwiXHU2NzUzXHU2NzU3XHU2YjY1XHU2YmNmXHU2YzQyXHU2YzVlXHU2Yzk5XHU2YzgxXHU2Yzg4XHU2Yzg5XHU2Yzg1XHU2YzliXHU2YzZhXHU2Yzdh''@;'; put 'put ''XHU2YzkwXHU2YzcwXHU2YzhjXHU2YzY4XHU2Yzk2XHU2YzkyXHU2YzdkXHU2YzgzXHU2YzcyXHU2YzdlXHU2Yzc0XHU2Yzg2XHU2Yzc2XHU2YzhkXHU2Yzk0XHU2Yzk4XHU2YzgyXHU3MDc2XHU3MDdjXHU3MDdkXHU3MDc4XHU3MjYyXHU3MjYxXHU3MjYwXHU3MmM0XHU3MmMyXHU3Mzk2XHU3''@;'; put 'put ''NTJjXHU3NTJiXHU3NTM3XHU3NTM4XHU3NjgyXHU3NmVmXHU3N2UzXHU3OWMxXHU3OWMwXHU3OWJmXHU3YTc2XHU3Y2ZiXHU3ZjU1XHU4MDk2XHU4MDkzXHU4MDlkXHU4MDk4XHU4MDliXHU4MDlhXHU4MGIyXHU4MjZmXHU4MjkyIl0sWyJhOGExIiwiXHU4MjhiXHU4MjhkXHU4OThiXHU4OWQy''@;'; put 'put ''XHU4YTAwXHU4YzM3XHU4YzQ2XHU4YzU1XHU4YzlkXHU4ZDY0XHU4ZDcwXHU4ZGIzXHU4ZWFiXHU4ZWNhXHU4ZjliXHU4ZmIwXHU4ZmMyXHU4ZmM2XHU4ZmM1XHU4ZmM0XHU1ZGUxXHU5MDkxXHU5MGEyXHU5MGFhXHU5MGE2XHU5MGEzXHU5MTQ5XHU5MWM2XHU5MWNjXHU5NjMyXHU5NjJlXHU5''@;'; put 'put ''NjMxXHU5NjJhXHU5NjJjXHU0ZTI2XHU0ZTU2XHU0ZTczXHU0ZThiXHU0ZTliXHU0ZTllXHU0ZWFiXHU0ZWFjXHU0ZjZmXHU0ZjlkXHU0ZjhkXHU0ZjczXHU0ZjdmXHU0ZjZjXHU0ZjliXHU0ZjhiXHU0Zjg2XHU0ZjgzXHU0ZjcwXHU0Zjc1XHU0Zjg4XHU0ZjY5XHU0ZjdiXHU0Zjk2XHU0Zjdl''@;'; put 'put ''XHU0ZjhmXHU0ZjkxXHU0ZjdhXHU1MTU0XHU1MTUyXHU1MTU1XHU1MTY5XHU1MTc3XHU1MTc2XHU1MTc4XHU1MWJkXHU1MWZkXHU1MjNiXHU1MjM4XHU1MjM3XHU1MjNhXHU1MjMwXHU1MjJlXHU1MjM2XHU1MjQxXHU1MmJlXHU1MmJiXHU1MzUyXHU1MzU0XHU1MzUzXHU1MzUxXHU1MzY2XHU1''@;'; put 'put ''Mzc3XHU1Mzc4XHU1Mzc5XHU1M2Q2XHU1M2Q0XHU1M2Q3XHU1NDczXHU1NDc1Il0sWyJhOTQwIiwiXHU1NDk2XHU1NDc4XHU1NDk1XHU1NDgwXHU1NDdiXHU1NDc3XHU1NDg0XHU1NDkyXHU1NDg2XHU1NDdjXHU1NDkwXHU1NDcxXHU1NDc2XHU1NDhjXHU1NDlhXHU1NDYyXHU1NDY4XHU1NDhi''@;'; put 'put ''XHU1NDdkXHU1NDhlXHU1NmZhXHU1NzgzXHU1Nzc3XHU1NzZhXHU1NzY5XHU1NzYxXHU1NzY2XHU1NzY0XHU1NzdjXHU1OTFjXHU1OTQ5XHU1OTQ3XHU1OTQ4XHU1OTQ0XHU1OTU0XHU1OWJlXHU1OWJiXHU1OWQ0XHU1OWI5XHU1OWFlXHU1OWQxXHU1OWM2XHU1OWQwXHU1OWNkXHU1OWNiXHU1''@;'; put 'put ''OWQzXHU1OWNhXHU1OWFmXHU1OWIzXHU1OWQyXHU1OWM1XHU1YjVmXHU1YjY0XHU1YjYzXHU1Yjk3XHU1YjlhXHU1Yjk4XHU1YjljXHU1Yjk5XHU1YjliXHU1YzFhXHU1YzQ4XHU1YzQ1Il0sWyJhOWExIiwiXHU1YzQ2XHU1Y2I3XHU1Y2ExXHU1Y2I4XHU1Y2E5XHU1Y2FiXHU1Y2IxXHU1Y2Iz''@;'; put 'put ''XHU1ZTE4XHU1ZTFhXHU1ZTE2XHU1ZTE1XHU1ZTFiXHU1ZTExXHU1ZTc4XHU1ZTlhXHU1ZTk3XHU1ZTljXHU1ZTk1XHU1ZTk2XHU1ZWY2XHU1ZjI2XHU1ZjI3XHU1ZjI5XHU1ZjgwXHU1ZjgxXHU1ZjdmXHU1ZjdjXHU1ZmRkXHU1ZmUwXHU1ZmZkXHU1ZmY1XHU1ZmZmXHU2MDBmXHU2MDE0XHU2''@;'; put 'put ''MDJmXHU2MDM1XHU2MDE2XHU2MDJhXHU2MDE1XHU2MDIxXHU2MDI3XHU2MDI5XHU2MDJiXHU2MDFiXHU2MjE2XHU2MjE1XHU2MjNmXHU2MjNlXHU2MjQwXHU2MjdmXHU2MmM5XHU2MmNjXHU2MmM0XHU2MmJmXHU2MmMyXHU2MmI5XHU2MmQyXHU2MmRiXHU2MmFiXHU2MmQzXHU2MmQ0XHU2MmNi''@;'; put 'put ''XHU2MmM4XHU2MmE4XHU2MmJkXHU2MmJjXHU2MmQwXHU2MmQ5XHU2MmM3XHU2MmNkXHU2MmI1XHU2MmRhXHU2MmIxXHU2MmQ4XHU2MmQ2XHU2MmQ3XHU2MmM2XHU2MmFjXHU2MmNlXHU2NTNlXHU2NWE3XHU2NWJjXHU2NWZhXHU2NjE0XHU2NjEzXHU2NjBjXHU2NjA2XHU2NjAyXHU2NjBlXHU2''@;'; put 'put ''NjAwXHU2NjBmXHU2NjE1XHU2NjBhIl0sWyJhYTQwIiwiXHU2NjA3XHU2NzBkXHU2NzBiXHU2NzZkXHU2NzhiXHU2Nzk1XHU2NzcxXHU2NzljXHU2NzczXHU2Nzc3XHU2Nzg3XHU2NzlkXHU2Nzk3XHU2NzZmXHU2NzcwXHU2NzdmXHU2Nzg5XHU2NzdlXHU2NzkwXHU2Nzc1XHU2NzlhXHU2Nzkz''@;'; put 'put ''XHU2NzdjXHU2NzZhXHU2NzcyXHU2YjIzXHU2YjY2XHU2YjY3XHU2YjdmXHU2YzEzXHU2YzFiXHU2Y2UzXHU2Y2U4XHU2Y2YzXHU2Y2IxXHU2Y2NjXHU2Y2U1XHU2Y2IzXHU2Y2JkXHU2Y2JlXHU2Y2JjXHU2Y2UyXHU2Y2FiXHU2Y2Q1XHU2Y2QzXHU2Y2I4XHU2Y2M0XHU2Y2I5XHU2Y2MxXHU2''@;'; put 'put ''Y2FlXHU2Y2Q3XHU2Y2M1XHU2Y2YxXHU2Y2JmXHU2Y2JiXHU2Y2UxXHU2Y2RiXHU2Y2NhXHU2Y2FjXHU2Y2VmXHU2Y2RjXHU2Y2Q2XHU2Y2UwIl0sWyJhYWExIiwiXHU3MDk1XHU3MDhlXHU3MDkyXHU3MDhhXHU3MDk5XHU3MjJjXHU3MjJkXHU3MjM4XHU3MjQ4XHU3MjY3XHU3MjY5XHU3MmMw''@;'; put 'put ''XHU3MmNlXHU3MmQ5XHU3MmQ3XHU3MmQwXHU3M2E5XHU3M2E4XHU3MzlmXHU3M2FiXHU3M2E1XHU3NTNkXHU3NTlkXHU3NTk5XHU3NTlhXHU3Njg0XHU3NmMyXHU3NmYyXHU3NmY0XHU3N2U1XHU3N2ZkXHU3OTNlXHU3OTQwXHU3OTQxXHU3OWM5XHU3OWM4XHU3YTdhXHU3YTc5XHU3YWZhXHU3''@;'; put 'put ''Y2ZlXHU3ZjU0XHU3ZjhjXHU3ZjhiXHU4MDA1XHU4MGJhXHU4MGE1XHU4MGEyXHU4MGIxXHU4MGExXHU4MGFiXHU4MGE5XHU4MGI0XHU4MGFhXHU4MGFmXHU4MWU1XHU4MWZlXHU4MjBkXHU4MmIzXHU4MjlkXHU4Mjk5XHU4MmFkXHU4MmJkXHU4MjlmXHU4MmI5XHU4MmIxXHU4MmFjXHU4MmE1''@;'; put 'put ''XHU4MmFmXHU4MmI4XHU4MmEzXHU4MmIwXHU4MmJlXHU4MmI3XHU4NjRlXHU4NjcxXHU1MjFkXHU4ODY4XHU4ZWNiXHU4ZmNlXHU4ZmQ0XHU4ZmQxXHU5MGI1XHU5MGI4XHU5MGIxXHU5MGI2XHU5MWM3XHU5MWQxXHU5NTc3XHU5NTgwXHU5NjFjXHU5NjQwXHU5NjNmXHU5NjNiXHU5NjQ0Il0s''@;'; put 'put ''WyJhYjQwIiwiXHU5NjQyXHU5NmI5XHU5NmU4XHU5NzUyXHU5NzVlXHU0ZTlmXHU0ZWFkXHU0ZWFlXHU0ZmUxXHU0ZmI1XHU0ZmFmXHU0ZmJmXHU0ZmUwXHU0ZmQxXHU0ZmNmXHU0ZmRkXHU0ZmMzXHU0ZmI2XHU0ZmQ4XHU0ZmRmXHU0ZmNhXHU0ZmQ3XHU0ZmFlXHU0ZmQwXHU0ZmM0XHU0ZmMy''@;'; put 'put ''XHU0ZmRhXHU0ZmNlXHU0ZmRlXHU0ZmI3XHU1MTU3XHU1MTkyXHU1MTkxXHU1MWEwXHU1MjRlXHU1MjQzXHU1MjRhXHU1MjRkXHU1MjRjXHU1MjRiXHU1MjQ3XHU1MmM3XHU1MmM5XHU1MmMzXHU1MmMxXHU1MzBkXHU1MzU3XHU1MzdiXHU1MzlhXHU1M2RiXHU1NGFjXHU1NGMwXHU1NGE4XHU1''@;'; put 'put ''NGNlXHU1NGM5XHU1NGI4XHU1NGE2XHU1NGIzXHU1NGM3XHU1NGMyXHU1NGJkXHU1NGFhXHU1NGMxIl0sWyJhYmExIiwiXHU1NGM0XHU1NGM4XHU1NGFmXHU1NGFiXHU1NGIxXHU1NGJiXHU1NGE5XHU1NGE3XHU1NGJmXHU1NmZmXHU1NzgyXHU1NzhiXHU1N2EwXHU1N2EzXHU1N2EyXHU1N2Nl''@;'; put 'put ''XHU1N2FlXHU1NzkzXHU1OTU1XHU1OTUxXHU1OTRmXHU1OTRlXHU1OTUwXHU1OWRjXHU1OWQ4XHU1OWZmXHU1OWUzXHU1OWU4XHU1YTAzXHU1OWU1XHU1OWVhXHU1OWRhXHU1OWU2XHU1YTAxXHU1OWZiXHU1YjY5XHU1YmEzXHU1YmE2XHU1YmE0XHU1YmEyXHU1YmE1XHU1YzAxXHU1YzRlXHU1''@;'; put 'put ''YzRmXHU1YzRkXHU1YzRiXHU1Y2Q5XHU1Y2QyXHU1ZGY3XHU1ZTFkXHU1ZTI1XHU1ZTFmXHU1ZTdkXHU1ZWEwXHU1ZWE2XHU1ZWZhXHU1ZjA4XHU1ZjJkXHU1ZjY1XHU1Zjg4XHU1Zjg1XHU1ZjhhXHU1ZjhiXHU1Zjg3XHU1ZjhjXHU1Zjg5XHU2MDEyXHU2MDFkXHU2MDIwXHU2MDI1XHU2MDBl''@;'; put 'put ''XHU2MDI4XHU2MDRkXHU2MDcwXHU2MDY4XHU2MDYyXHU2MDQ2XHU2MDQzXHU2MDZjXHU2MDZiXHU2MDZhXHU2MDY0XHU2MjQxXHU2MmRjXHU2MzE2XHU2MzA5XHU2MmZjXHU2MmVkXHU2MzAxXHU2MmVlXHU2MmZkXHU2MzA3XHU2MmYxXHU2MmY3Il0sWyJhYzQwIiwiXHU2MmVmXHU2MmVjXHU2''@;'; put 'put ''MmZlXHU2MmY0XHU2MzExXHU2MzAyXHU2NTNmXHU2NTQ1XHU2NWFiXHU2NWJkXHU2NWUyXHU2NjI1XHU2NjJkXHU2NjIwXHU2NjI3XHU2NjJmXHU2NjFmXHU2NjI4XHU2NjMxXHU2NjI0XHU2NmY3XHU2N2ZmXHU2N2QzXHU2N2YxXHU2N2Q0XHU2N2QwXHU2N2VjXHU2N2I2XHU2N2FmXHU2N2Y1''@;'; put 'put ''XHU2N2U5XHU2N2VmXHU2N2M0XHU2N2QxXHU2N2I0XHU2N2RhXHU2N2U1XHU2N2I4XHU2N2NmXHU2N2RlXHU2N2YzXHU2N2IwXHU2N2Q5XHU2N2UyXHU2N2RkXHU2N2QyXHU2YjZhXHU2YjgzXHU2Yjg2XHU2YmI1XHU2YmQyXHU2YmQ3XHU2YzFmXHU2Y2M5XHU2ZDBiXHU2ZDMyXHU2ZDJhXHU2''@;'; put 'put ''ZDQxXHU2ZDI1XHU2ZDBjXHU2ZDMxXHU2ZDFlXHU2ZDE3Il0sWyJhY2ExIiwiXHU2ZDNiXHU2ZDNkXHU2ZDNlXHU2ZDM2XHU2ZDFiXHU2Y2Y1XHU2ZDM5XHU2ZDI3XHU2ZDM4XHU2ZDI5XHU2ZDJlXHU2ZDM1XHU2ZDBlXHU2ZDJiXHU3MGFiXHU3MGJhXHU3MGIzXHU3MGFjXHU3MGFmXHU3MGFk''@;'; put 'put ''XHU3MGI4XHU3MGFlXHU3MGE0XHU3MjMwXHU3MjcyXHU3MjZmXHU3Mjc0XHU3MmU5XHU3MmUwXHU3MmUxXHU3M2I3XHU3M2NhXHU3M2JiXHU3M2IyXHU3M2NkXHU3M2MwXHU3M2IzXHU3NTFhXHU3NTJkXHU3NTRmXHU3NTRjXHU3NTRlXHU3NTRiXHU3NWFiXHU3NWE0XHU3NWE1XHU3NWEyXHU3''@;'; put 'put ''NWEzXHU3Njc4XHU3Njg2XHU3Njg3XHU3Njg4XHU3NmM4XHU3NmM2XHU3NmMzXHU3NmM1XHU3NzAxXHU3NmY5XHU3NmY4XHU3NzA5XHU3NzBiXHU3NmZlXHU3NmZjXHU3NzA3XHU3N2RjXHU3ODAyXHU3ODE0XHU3ODBjXHU3ODBkXHU3OTQ2XHU3OTQ5XHU3OTQ4XHU3OTQ3XHU3OWI5XHU3OWJh''@;'; put 'put ''XHU3OWQxXHU3OWQyXHU3OWNiXHU3YTdmXHU3YTgxXHU3YWZmXHU3YWZkXHU3YzdkXHU3ZDAyXHU3ZDA1XHU3ZDAwXHU3ZDA5XHU3ZDA3XHU3ZDA0XHU3ZDA2XHU3ZjM4XHU3ZjhlXHU3ZmJmXHU4MDA0Il0sWyJhZDQwIiwiXHU4MDEwXHU4MDBkXHU4MDExXHU4MDM2XHU4MGQ2XHU4MGU1XHU4''@;'; put 'put ''MGRhXHU4MGMzXHU4MGM0XHU4MGNjXHU4MGUxXHU4MGRiXHU4MGNlXHU4MGRlXHU4MGU0XHU4MGRkXHU4MWY0XHU4MjIyXHU4MmU3XHU4MzAzXHU4MzA1XHU4MmUzXHU4MmRiXHU4MmU2XHU4MzA0XHU4MmU1XHU4MzAyXHU4MzA5XHU4MmQyXHU4MmQ3XHU4MmYxXHU4MzAxXHU4MmRjXHU4MmQ0''@;'; put 'put ''XHU4MmQxXHU4MmRlXHU4MmQzXHU4MmRmXHU4MmVmXHU4MzA2XHU4NjUwXHU4Njc5XHU4NjdiXHU4NjdhXHU4ODRkXHU4ODZiXHU4OTgxXHU4OWQ0XHU4YTA4XHU4YTAyXHU4YTAzXHU4YzllXHU4Y2EwXHU4ZDc0XHU4ZDczXHU4ZGI0XHU4ZWNkXHU4ZWNjXHU4ZmYwXHU4ZmU2XHU4ZmUyXHU4''@;'; put 'put ''ZmVhXHU4ZmU1Il0sWyJhZGExIiwiXHU4ZmVkXHU4ZmViXHU4ZmU0XHU4ZmU4XHU5MGNhXHU5MGNlXHU5MGMxXHU5MGMzXHU5MTRiXHU5MTRhXHU5MWNkXHU5NTgyXHU5NjUwXHU5NjRiXHU5NjRjXHU5NjRkXHU5NzYyXHU5NzY5XHU5N2NiXHU5N2VkXHU5N2YzXHU5ODAxXHU5OGE4XHU5OGRi''@;'; put 'put ''XHU5OGRmXHU5OTk2XHU5OTk5XHU0ZTU4XHU0ZWIzXHU1MDBjXHU1MDBkXHU1MDIzXHU0ZmVmXHU1MDI2XHU1MDI1XHU0ZmY4XHU1MDI5XHU1MDE2XHU1MDA2XHU1MDNjXHU1MDFmXHU1MDFhXHU1MDEyXHU1MDExXHU0ZmZhXHU1MDAwXHU1MDE0XHU1MDI4XHU0ZmYxXHU1MDIxXHU1MDBiXHU1''@;'; put 'put ''MDE5XHU1MDE4XHU0ZmYzXHU0ZmVlXHU1MDJkXHU1MDJhXHU0ZmZlXHU1MDJiXHU1MDA5XHU1MTdjXHU1MWE0XHU1MWE1XHU1MWEyXHU1MWNkXHU1MWNjXHU1MWM2XHU1MWNiXHU1MjU2XHU1MjVjXHU1MjU0XHU1MjViXHU1MjVkXHU1MzJhXHU1MzdmXHU1MzlmXHU1MzlkXHU1M2RmXHU1NGU4''@;'; put 'put ''XHU1NTEwXHU1NTAxXHU1NTM3XHU1NGZjXHU1NGU1XHU1NGYyXHU1NTA2XHU1NGZhXHU1NTE0XHU1NGU5XHU1NGVkXHU1NGUxXHU1NTA5XHU1NGVlXHU1NGVhIl0sWyJhZTQwIiwiXHU1NGU2XHU1NTI3XHU1NTA3XHU1NGZkXHU1NTBmXHU1NzAzXHU1NzA0XHU1N2MyXHU1N2Q0XHU1N2NiXHU1''@;'; put 'put ''N2MzXHU1ODA5XHU1OTBmXHU1OTU3XHU1OTU4XHU1OTVhXHU1YTExXHU1YTE4XHU1YTFjXHU1YTFmXHU1YTFiXHU1YTEzXHU1OWVjXHU1YTIwXHU1YTIzXHU1YTI5XHU1YTI1XHU1YTBjXHU1YTA5XHU1YjZiXHU1YzU4XHU1YmIwXHU1YmIzXHU1YmI2XHU1YmI0XHU1YmFlXHU1YmI1XHU1YmI5''@;'; put 'put ''XHU1YmI4XHU1YzA0XHU1YzUxXHU1YzU1XHU1YzUwXHU1Y2VkXHU1Y2ZkXHU1Y2ZiXHU1Y2VhXHU1Y2U4XHU1Y2YwXHU1Y2Y2XHU1ZDAxXHU1Y2Y0XHU1ZGVlXHU1ZTJkXHU1ZTJiXHU1ZWFiXHU1ZWFkXHU1ZWE3XHU1ZjMxXHU1ZjkyXHU1ZjkxXHU1ZjkwXHU2MDU5Il0sWyJhZWExIiwiXHU2''@;'; put 'put ''MDYzXHU2MDY1XHU2MDUwXHU2MDU1XHU2MDZkXHU2MDY5XHU2MDZmXHU2MDg0XHU2MDlmXHU2MDlhXHU2MDhkXHU2MDk0XHU2MDhjXHU2MDg1XHU2MDk2XHU2MjQ3XHU2MmYzXHU2MzA4XHU2MmZmXHU2MzRlXHU2MzNlXHU2MzJmXHU2MzU1XHU2MzQyXHU2MzQ2XHU2MzRmXHU2MzQ5XHU2MzNh''@;'; put 'put ''XHU2MzUwXHU2MzNkXHU2MzJhXHU2MzJiXHU2MzI4XHU2MzRkXHU2MzRjXHU2NTQ4XHU2NTQ5XHU2NTk5XHU2NWMxXHU2NWM1XHU2NjQyXHU2NjQ5XHU2NjRmXHU2NjQzXHU2NjUyXHU2NjRjXHU2NjQ1XHU2NjQxXHU2NmY4XHU2NzE0XHU2NzE1XHU2NzE3XHU2ODIxXHU2ODM4XHU2ODQ4XHU2''@;'; put 'put ''ODQ2XHU2ODUzXHU2ODM5XHU2ODQyXHU2ODU0XHU2ODI5XHU2OGIzXHU2ODE3XHU2ODRjXHU2ODUxXHU2ODNkXHU2N2Y0XHU2ODUwXHU2ODQwXHU2ODNjXHU2ODQzXHU2ODJhXHU2ODQ1XHU2ODEzXHU2ODE4XHU2ODQxXHU2YjhhXHU2Yjg5XHU2YmI3XHU2YzIzXHU2YzI3XHU2YzI4XHU2YzI2''@;'; put 'put ''XHU2YzI0XHU2Y2YwXHU2ZDZhXHU2ZDk1XHU2ZDg4XHU2ZDg3XHU2ZDY2XHU2ZDc4XHU2ZDc3XHU2ZDU5XHU2ZDkzIl0sWyJhZjQwIiwiXHU2ZDZjXHU2ZDg5XHU2ZDZlXHU2ZDVhXHU2ZDc0XHU2ZDY5XHU2ZDhjXHU2ZDhhXHU2ZDc5XHU2ZDg1XHU2ZDY1XHU2ZDk0XHU3MGNhXHU3MGQ4XHU3''@;'; put 'put ''MGU0XHU3MGQ5XHU3MGM4XHU3MGNmXHU3MjM5XHU3Mjc5XHU3MmZjXHU3MmY5XHU3MmZkXHU3MmY4XHU3MmY3XHU3Mzg2XHU3M2VkXHU3NDA5XHU3M2VlXHU3M2UwXHU3M2VhXHU3M2RlXHU3NTU0XHU3NTVkXHU3NTVjXHU3NTVhXHU3NTU5XHU3NWJlXHU3NWM1XHU3NWM3XHU3NWIyXHU3NWIz''@;'; put 'put ''XHU3NWJkXHU3NWJjXHU3NWI5XHU3NWMyXHU3NWI4XHU3NjhiXHU3NmIwXHU3NmNhXHU3NmNkXHU3NmNlXHU3NzI5XHU3NzFmXHU3NzIwXHU3NzI4XHU3N2U5XHU3ODMwXHU3ODI3XHU3ODM4XHU3ODFkXHU3ODM0XHU3ODM3Il0sWyJhZmExIiwiXHU3ODI1XHU3ODJkXHU3ODIwXHU3ODFmXHU3''@;'; put 'put ''ODMyXHU3OTU1XHU3OTUwXHU3OTYwXHU3OTVmXHU3OTU2XHU3OTVlXHU3OTVkXHU3OTU3XHU3OTVhXHU3OWU0XHU3OWUzXHU3OWU3XHU3OWRmXHU3OWU2XHU3OWU5XHU3OWQ4XHU3YTg0XHU3YTg4XHU3YWQ5XHU3YjA2XHU3YjExXHU3Yzg5XHU3ZDIxXHU3ZDE3XHU3ZDBiXHU3ZDBhXHU3ZDIw''@;'; put 'put ''XHU3ZDIyXHU3ZDE0XHU3ZDEwXHU3ZDE1XHU3ZDFhXHU3ZDFjXHU3ZDBkXHU3ZDE5XHU3ZDFiXHU3ZjNhXHU3ZjVmXHU3Zjk0XHU3ZmM1XHU3ZmMxXHU4MDA2XHU4MDE4XHU4MDE1XHU4MDE5XHU4MDE3XHU4MDNkXHU4MDNmXHU4MGYxXHU4MTAyXHU4MGYwXHU4MTA1XHU4MGVkXHU4MGY0XHU4''@;'; put 'put ''MTA2XHU4MGY4XHU4MGYzXHU4MTA4XHU4MGZkXHU4MTBhXHU4MGZjXHU4MGVmXHU4MWVkXHU4MWVjXHU4MjAwXHU4MjEwXHU4MjJhXHU4MjJiXHU4MjI4XHU4MjJjXHU4MmJiXHU4MzJiXHU4MzUyXHU4MzU0XHU4MzRhXHU4MzM4XHU4MzUwXHU4MzQ5XHU4MzM1XHU4MzM0XHU4MzRmXHU4MzMy''@;'; put 'put ''XHU4MzM5XHU4MzM2XHU4MzE3XHU4MzQwXHU4MzMxXHU4MzI4XHU4MzQzIl0sWyJiMDQwIiwiXHU4NjU0XHU4NjhhXHU4NmFhXHU4NjkzXHU4NmE0XHU4NmE5XHU4NjhjXHU4NmEzXHU4NjljXHU4ODcwXHU4ODc3XHU4ODgxXHU4ODgyXHU4ODdkXHU4ODc5XHU4YTE4XHU4YTEwXHU4YTBlXHU4''@;'; put 'put ''YTBjXHU4YTE1XHU4YTBhXHU4YTE3XHU4YTEzXHU4YTE2XHU4YTBmXHU4YTExXHU4YzQ4XHU4YzdhXHU4Yzc5XHU4Y2ExXHU4Y2EyXHU4ZDc3XHU4ZWFjXHU4ZWQyXHU4ZWQ0XHU4ZWNmXHU4ZmIxXHU5MDAxXHU5MDA2XHU4ZmY3XHU5MDAwXHU4ZmZhXHU4ZmY0XHU5MDAzXHU4ZmZkXHU5MDA1''@;'; put 'put ''XHU4ZmY4XHU5MDk1XHU5MGUxXHU5MGRkXHU5MGUyXHU5MTUyXHU5MTRkXHU5MTRjXHU5MWQ4XHU5MWRkXHU5MWQ3XHU5MWRjXHU5MWQ5XHU5NTgzXHU5NjYyXHU5NjYzXHU5NjYxIl0sWyJiMGExIiwiXHU5NjViXHU5NjVkXHU5NjY0XHU5NjU4XHU5NjVlXHU5NmJiXHU5OGUyXHU5OWFjXHU5''@;'; put 'put ''YWE4XHU5YWQ4XHU5YjI1XHU5YjMyXHU5YjNjXHU0ZTdlXHU1MDdhXHU1MDdkXHU1MDVjXHU1MDQ3XHU1MDQzXHU1MDRjXHU1MDVhXHU1MDQ5XHU1MDY1XHU1MDc2XHU1MDRlXHU1MDU1XHU1MDc1XHU1MDc0XHU1MDc3XHU1MDRmXHU1MDBmXHU1MDZmXHU1MDZkXHU1MTVjXHU1MTk1XHU1MWYw''@;'; put 'put ''XHU1MjZhXHU1MjZmXHU1MmQyXHU1MmQ5XHU1MmQ4XHU1MmQ1XHU1MzEwXHU1MzBmXHU1MzE5XHU1MzNmXHU1MzQwXHU1MzNlXHU1M2MzXHU2NmZjXHU1NTQ2XHU1NTZhXHU1NTY2XHU1NTQ0XHU1NTVlXHU1NTYxXHU1NTQzXHU1NTRhXHU1NTMxXHU1NTU2XHU1NTRmXHU1NTU1XHU1NTJmXHU1''@;'; put 'put ''NTY0XHU1NTM4XHU1NTJlXHU1NTVjXHU1NTJjXHU1NTYzXHU1NTMzXHU1NTQxXHU1NTU3XHU1NzA4XHU1NzBiXHU1NzA5XHU1N2RmXHU1ODA1XHU1ODBhXHU1ODA2XHU1N2UwXHU1N2U0XHU1N2ZhXHU1ODAyXHU1ODM1XHU1N2Y3XHU1N2Y5XHU1OTIwXHU1OTYyXHU1YTM2XHU1YTQxXHU1YTQ5''@;'; put 'put ''XHU1YTY2XHU1YTZhXHU1YTQwIl0sWyJiMTQwIiwiXHU1YTNjXHU1YTYyXHU1YTVhXHU1YTQ2XHU1YTRhXHU1YjcwXHU1YmM3XHU1YmM1XHU1YmM0XHU1YmMyXHU1YmJmXHU1YmM2XHU1YzA5XHU1YzA4XHU1YzA3XHU1YzYwXHU1YzVjXHU1YzVkXHU1ZDA3XHU1ZDA2XHU1ZDBlXHU1ZDFiXHU1''@;'; put 'put ''ZDE2XHU1ZDIyXHU1ZDExXHU1ZDI5XHU1ZDE0XHU1ZDE5XHU1ZDI0XHU1ZDI3XHU1ZDE3XHU1ZGUyXHU1ZTM4XHU1ZTM2XHU1ZTMzXHU1ZTM3XHU1ZWI3XHU1ZWI4XHU1ZWI2XHU1ZWI1XHU1ZWJlXHU1ZjM1XHU1ZjM3XHU1ZjU3XHU1ZjZjXHU1ZjY5XHU1ZjZiXHU1Zjk3XHU1Zjk5XHU1Zjll''@;'; put 'put ''XHU1Zjk4XHU1ZmExXHU1ZmEwXHU1ZjljXHU2MDdmXHU2MGEzXHU2MDg5XHU2MGEwXHU2MGE4XHU2MGNiXHU2MGI0XHU2MGU2XHU2MGJkIl0sWyJiMWExIiwiXHU2MGM1XHU2MGJiXHU2MGI1XHU2MGRjXHU2MGJjXHU2MGQ4XHU2MGQ1XHU2MGM2XHU2MGRmXHU2MGI4XHU2MGRhXHU2MGM3XHU2''@;'; put 'put ''MjFhXHU2MjFiXHU2MjQ4XHU2M2EwXHU2M2E3XHU2MzcyXHU2Mzk2XHU2M2EyXHU2M2E1XHU2Mzc3XHU2MzY3XHU2Mzk4XHU2M2FhXHU2MzcxXHU2M2E5XHU2Mzg5XHU2MzgzXHU2MzliXHU2MzZiXHU2M2E4XHU2Mzg0XHU2Mzg4XHU2Mzk5XHU2M2ExXHU2M2FjXHU2MzkyXHU2MzhmXHU2Mzgw''@;'; put 'put ''XHU2MzdiXHU2MzY5XHU2MzY4XHU2MzdhXHU2NTVkXHU2NTU2XHU2NTUxXHU2NTU5XHU2NTU3XHU1NTVmXHU2NTRmXHU2NTU4XHU2NTU1XHU2NTU0XHU2NTljXHU2NTliXHU2NWFjXHU2NWNmXHU2NWNiXHU2NWNjXHU2NWNlXHU2NjVkXHU2NjVhXHU2NjY0XHU2NjY4XHU2NjY2XHU2NjVlXHU2''@;'; put 'put ''NmY5XHU1MmQ3XHU2NzFiXHU2ODgxXHU2OGFmXHU2OGEyXHU2ODkzXHU2OGI1XHU2ODdmXHU2ODc2XHU2OGIxXHU2OGE3XHU2ODk3XHU2OGIwXHU2ODgzXHU2OGM0XHU2OGFkXHU2ODg2XHU2ODg1XHU2ODk0XHU2ODlkXHU2OGE4XHU2ODlmXHU2OGExXHU2ODgyXHU2YjMyXHU2YmJhIl0sWyJi''@;'; put 'put ''MjQwIiwiXHU2YmViXHU2YmVjXHU2YzJiXHU2ZDhlXHU2ZGJjXHU2ZGYzXHU2ZGQ5XHU2ZGIyXHU2ZGUxXHU2ZGNjXHU2ZGU0XHU2ZGZiXHU2ZGZhXHU2ZTA1XHU2ZGM3XHU2ZGNiXHU2ZGFmXHU2ZGQxXHU2ZGFlXHU2ZGRlXHU2ZGY5XHU2ZGI4XHU2ZGY3XHU2ZGY1XHU2ZGM1XHU2ZGQyXHU2''@;'; put 'put ''ZTFhXHU2ZGI1XHU2ZGRhXHU2ZGViXHU2ZGQ4XHU2ZGVhXHU2ZGYxXHU2ZGVlXHU2ZGU4XHU2ZGM2XHU2ZGM0XHU2ZGFhXHU2ZGVjXHU2ZGJmXHU2ZGU2XHU3MGY5XHU3MTA5XHU3MTBhXHU3MGZkXHU3MGVmXHU3MjNkXHU3MjdkXHU3MjgxXHU3MzFjXHU3MzFiXHU3MzE2XHU3MzEzXHU3MzE5''@;'; put 'put ''XHU3Mzg3XHU3NDA1XHU3NDBhXHU3NDAzXHU3NDA2XHU3M2ZlXHU3NDBkXHU3NGUwXHU3NGY2Il0sWyJiMmExIiwiXHU3NGY3XHU3NTFjXHU3NTIyXHU3NTY1XHU3NTY2XHU3NTYyXHU3NTcwXHU3NThmXHU3NWQ0XHU3NWQ1XHU3NWI1XHU3NWNhXHU3NWNkXHU3NjhlXHU3NmQ0XHU3NmQyXHU3''@;'; put 'put ''NmRiXHU3NzM3XHU3NzNlXHU3NzNjXHU3NzM2XHU3NzM4XHU3NzNhXHU3ODZiXHU3ODQzXHU3ODRlXHU3OTY1XHU3OTY4XHU3OTZkXHU3OWZiXHU3YTkyXHU3YTk1XHU3YjIwXHU3YjI4XHU3YjFiXHU3YjJjXHU3YjI2XHU3YjE5XHU3YjFlXHU3YjJlXHU3YzkyXHU3Yzk3XHU3Yzk1XHU3ZDQ2''@;'; put 'put ''XHU3ZDQzXHU3ZDcxXHU3ZDJlXHU3ZDM5XHU3ZDNjXHU3ZDQwXHU3ZDMwXHU3ZDMzXHU3ZDQ0XHU3ZDJmXHU3ZDQyXHU3ZDMyXHU3ZDMxXHU3ZjNkXHU3ZjllXHU3ZjlhXHU3ZmNjXHU3ZmNlXHU3ZmQyXHU4MDFjXHU4MDRhXHU4MDQ2XHU4MTJmXHU4MTE2XHU4MTIzXHU4MTJiXHU4MTI5XHU4''@;'; put 'put ''MTMwXHU4MTI0XHU4MjAyXHU4MjM1XHU4MjM3XHU4MjM2XHU4MjM5XHU4MzhlXHU4MzllXHU4Mzk4XHU4Mzc4XHU4M2EyXHU4Mzk2XHU4M2JkXHU4M2FiXHU4MzkyXHU4MzhhXHU4MzkzXHU4Mzg5XHU4M2EwXHU4Mzc3XHU4MzdiXHU4MzdjIl0sWyJiMzQwIiwiXHU4Mzg2XHU4M2E3XHU4NjU1''@;'; put 'put ''XHU1ZjZhXHU4NmM3XHU4NmMwXHU4NmI2XHU4NmM0XHU4NmI1XHU4NmM2XHU4NmNiXHU4NmIxXHU4NmFmXHU4NmM5XHU4ODUzXHU4ODllXHU4ODg4XHU4OGFiXHU4ODkyXHU4ODk2XHU4ODhkXHU4ODhiXHU4OTkzXHU4OThmXHU4YTJhXHU4YTFkXHU4YTIzXHU4YTI1XHU4YTMxXHU4YTJkXHU4''@;'; put 'put ''YTFmXHU4YTFiXHU4YTIyXHU4YzQ5XHU4YzVhXHU4Y2E5XHU4Y2FjXHU4Y2FiXHU4Y2E4XHU4Y2FhXHU4Y2E3XHU4ZDY3XHU4ZDY2XHU4ZGJlXHU4ZGJhXHU4ZWRiXHU4ZWRmXHU5MDE5XHU5MDBkXHU5MDFhXHU5MDE3XHU5MDIzXHU5MDFmXHU5MDFkXHU5MDEwXHU5MDE1XHU5MDFlXHU5MDIw''@;'; put 'put ''XHU5MDBmXHU5MDIyXHU5MDE2XHU5MDFiXHU5MDE0Il0sWyJiM2ExIiwiXHU5MGU4XHU5MGVkXHU5MGZkXHU5MTU3XHU5MWNlXHU5MWY1XHU5MWU2XHU5MWUzXHU5MWU3XHU5MWVkXHU5MWU5XHU5NTg5XHU5NjZhXHU5Njc1XHU5NjczXHU5Njc4XHU5NjcwXHU5Njc0XHU5Njc2XHU5Njc3XHU5''@;'; put 'put ''NjZjXHU5NmMwXHU5NmVhXHU5NmU5XHU3YWUwXHU3YWRmXHU5ODAyXHU5ODAzXHU5YjVhXHU5Y2U1XHU5ZTc1XHU5ZTdmXHU5ZWE1XHU5ZWJiXHU1MGEyXHU1MDhkXHU1MDg1XHU1MDk5XHU1MDkxXHU1MDgwXHU1MDk2XHU1MDk4XHU1MDlhXHU2NzAwXHU1MWYxXHU1MjcyXHU1Mjc0XHU1Mjc1''@;'; put 'put ''XHU1MjY5XHU1MmRlXHU1MmRkXHU1MmRiXHU1MzVhXHU1M2E1XHU1NTdiXHU1NTgwXHU1NWE3XHU1NTdjXHU1NThhXHU1NTlkXHU1NTk4XHU1NTgyXHU1NTljXHU1NWFhXHU1NTk0XHU1NTg3XHU1NThiXHU1NTgzXHU1NWIzXHU1NWFlXHU1NTlmXHU1NTNlXHU1NWIyXHU1NTlhXHU1NWJiXHU1''@;'; put 'put ''NWFjXHU1NWIxXHU1NTdlXHU1NTg5XHU1NWFiXHU1NTk5XHU1NzBkXHU1ODJmXHU1ODJhXHU1ODM0XHU1ODI0XHU1ODMwXHU1ODMxXHU1ODIxXHU1ODFkXHU1ODIwXHU1OGY5XHU1OGZhXHU1OTYwIl0sWyJiNDQwIiwiXHU1YTc3XHU1YTlhXHU1YTdmXHU1YTkyXHU1YTliXHU1YWE3XHU1Yjcz''@;'; put 'put ''XHU1YjcxXHU1YmQyXHU1YmNjXHU1YmQzXHU1YmQwXHU1YzBhXHU1YzBiXHU1YzMxXHU1ZDRjXHU1ZDUwXHU1ZDM0XHU1ZDQ3XHU1ZGZkXHU1ZTQ1XHU1ZTNkXHU1ZTQwXHU1ZTQzXHU1ZTdlXHU1ZWNhXHU1ZWMxXHU1ZWMyXHU1ZWM0XHU1ZjNjXHU1ZjZkXHU1ZmE5XHU1ZmFhXHU1ZmE4XHU2''@;'; put 'put ''MGQxXHU2MGUxXHU2MGIyXHU2MGI2XHU2MGUwXHU2MTFjXHU2MTIzXHU2MGZhXHU2MTE1XHU2MGYwXHU2MGZiXHU2MGY0XHU2MTY4XHU2MGYxXHU2MTBlXHU2MGY2XHU2MTA5XHU2MTAwXHU2MTEyXHU2MjFmXHU2MjQ5XHU2M2EzXHU2MzhjXHU2M2NmXHU2M2MwXHU2M2U5XHU2M2M5XHU2M2M2''@;'; put 'put ''XHU2M2NkIl0sWyJiNGExIiwiXHU2M2QyXHU2M2UzXHU2M2QwXHU2M2UxXHU2M2Q2XHU2M2VkXHU2M2VlXHU2Mzc2XHU2M2Y0XHU2M2VhXHU2M2RiXHU2NDUyXHU2M2RhXHU2M2Y5XHU2NTVlXHU2NTY2XHU2NTYyXHU2NTYzXHU2NTkxXHU2NTkwXHU2NWFmXHU2NjZlXHU2NjcwXHU2Njc0XHU2''@;'; put 'put ''Njc2XHU2NjZmXHU2NjkxXHU2NjdhXHU2NjdlXHU2Njc3XHU2NmZlXHU2NmZmXHU2NzFmXHU2NzFkXHU2OGZhXHU2OGQ1XHU2OGUwXHU2OGQ4XHU2OGQ3XHU2OTA1XHU2OGRmXHU2OGY1XHU2OGVlXHU2OGU3XHU2OGY5XHU2OGQyXHU2OGYyXHU2OGUzXHU2OGNiXHU2OGNkXHU2OTBkXHU2OTEy''@;'; put 'put ''XHU2OTBlXHU2OGM5XHU2OGRhXHU2OTZlXHU2OGZiXHU2YjNlXHU2YjNhXHU2YjNkXHU2Yjk4XHU2Yjk2XHU2YmJjXHU2YmVmXHU2YzJlXHU2YzJmXHU2YzJjXHU2ZTJmXHU2ZTM4XHU2ZTU0XHU2ZTIxXHU2ZTMyXHU2ZTY3XHU2ZTRhXHU2ZTIwXHU2ZTI1XHU2ZTIzXHU2ZTFiXHU2ZTViXHU2''@;'; put 'put ''ZTU4XHU2ZTI0XHU2ZTU2XHU2ZTZlXHU2ZTJkXHU2ZTI2XHU2ZTZmXHU2ZTM0XHU2ZTRkXHU2ZTNhXHU2ZTJjXHU2ZTQzXHU2ZTFkXHU2ZTNlXHU2ZWNiIl0sWyJiNTQwIiwiXHU2ZTg5XHU2ZTE5XHU2ZTRlXHU2ZTYzXHU2ZTQ0XHU2ZTcyXHU2ZTY5XHU2ZTVmXHU3MTE5XHU3MTFhXHU3MTI2''@;'; put 'put ''XHU3MTMwXHU3MTIxXHU3MTM2XHU3MTZlXHU3MTFjXHU3MjRjXHU3Mjg0XHU3MjgwXHU3MzM2XHU3MzI1XHU3MzM0XHU3MzI5XHU3NDNhXHU3NDJhXHU3NDMzXHU3NDIyXHU3NDI1XHU3NDM1XHU3NDM2XHU3NDM0XHU3NDJmXHU3NDFiXHU3NDI2XHU3NDI4XHU3NTI1XHU3NTI2XHU3NTZiXHU3''@;'; put 'put ''NTZhXHU3NWUyXHU3NWRiXHU3NWUzXHU3NWQ5XHU3NWQ4XHU3NWRlXHU3NWUwXHU3NjdiXHU3NjdjXHU3Njk2XHU3NjkzXHU3NmI0XHU3NmRjXHU3NzRmXHU3N2VkXHU3ODVkXHU3ODZjXHU3ODZmXHU3YTBkXHU3YTA4XHU3YTBiXHU3YTA1XHU3YTAwXHU3YTk4Il0sWyJiNWExIiwiXHU3YTk3''@;'; put 'put ''XHU3YTk2XHU3YWU1XHU3YWUzXHU3YjQ5XHU3YjU2XHU3YjQ2XHU3YjUwXHU3YjUyXHU3YjU0XHU3YjRkXHU3YjRiXHU3YjRmXHU3YjUxXHU3YzlmXHU3Y2E1XHU3ZDVlXHU3ZDUwXHU3ZDY4XHU3ZDU1XHU3ZDJiXHU3ZDZlXHU3ZDcyXHU3ZDYxXHU3ZDY2XHU3ZDYyXHU3ZDcwXHU3ZDczXHU1''@;'; put 'put ''NTg0XHU3ZmQ0XHU3ZmQ1XHU4MDBiXHU4MDUyXHU4MDg1XHU4MTU1XHU4MTU0XHU4MTRiXHU4MTUxXHU4MTRlXHU4MTM5XHU4MTQ2XHU4MTNlXHU4MTRjXHU4MTUzXHU4MTc0XHU4MjEyXHU4MjFjXHU4M2U5XHU4NDAzXHU4M2Y4XHU4NDBkXHU4M2UwXHU4M2M1XHU4NDBiXHU4M2MxXHU4M2Vm''@;'; put 'put ''XHU4M2YxXHU4M2Y0XHU4NDU3XHU4NDBhXHU4M2YwXHU4NDBjXHU4M2NjXHU4M2ZkXHU4M2YyXHU4M2NhXHU4NDM4XHU4NDBlXHU4NDA0XHU4M2RjXHU4NDA3XHU4M2Q0XHU4M2RmXHU4NjViXHU4NmRmXHU4NmQ5XHU4NmVkXHU4NmQ0XHU4NmRiXHU4NmU0XHU4NmQwXHU4NmRlXHU4ODU3XHU4''@;'; put 'put ''OGMxXHU4OGMyXHU4OGIxXHU4OTgzXHU4OTk2XHU4YTNiXHU4YTYwXHU4YTU1XHU4YTVlXHU4YTNjXHU4YTQxIl0sWyJiNjQwIiwiXHU4YTU0XHU4YTViXHU4YTUwXHU4YTQ2XHU4YTM0XHU4YTNhXHU4YTM2XHU4YTU2XHU4YzYxXHU4YzgyXHU4Y2FmXHU4Y2JjXHU4Y2IzXHU4Y2JkXHU4Y2Mx''@;'; put 'put ''XHU4Y2JiXHU4Y2MwXHU4Y2I0XHU4Y2I3XHU4Y2I2XHU4Y2JmXHU4Y2I4XHU4ZDhhXHU4ZDg1XHU4ZDgxXHU4ZGNlXHU4ZGRkXHU4ZGNiXHU4ZGRhXHU4ZGQxXHU4ZGNjXHU4ZGRiXHU4ZGM2XHU4ZWZiXHU4ZWY4XHU4ZWZjXHU4ZjljXHU5MDJlXHU5MDM1XHU5MDMxXHU5MDM4XHU5MDMyXHU5''@;'; put 'put ''MDM2XHU5MTAyXHU5MGY1XHU5MTA5XHU5MGZlXHU5MTYzXHU5MTY1XHU5MWNmXHU5MjE0XHU5MjE1XHU5MjIzXHU5MjA5XHU5MjFlXHU5MjBkXHU5MjEwXHU5MjA3XHU5MjExXHU5NTk0XHU5NThmXHU5NThiXHU5NTkxIl0sWyJiNmExIiwiXHU5NTkzXHU5NTkyXHU5NThlXHU5NjhhXHU5Njhl''@;'; put 'put ''XHU5NjhiXHU5NjdkXHU5Njg1XHU5Njg2XHU5NjhkXHU5NjcyXHU5Njg0XHU5NmMxXHU5NmM1XHU5NmM0XHU5NmM2XHU5NmM3XHU5NmVmXHU5NmYyXHU5N2NjXHU5ODA1XHU5ODA2XHU5ODA4XHU5OGU3XHU5OGVhXHU5OGVmXHU5OGU5XHU5OGYyXHU5OGVkXHU5OWFlXHU5OWFkXHU5ZWMzXHU5''@;'; put 'put ''ZWNkXHU5ZWQxXHU0ZTgyXHU1MGFkXHU1MGI1XHU1MGIyXHU1MGIzXHU1MGM1XHU1MGJlXHU1MGFjXHU1MGI3XHU1MGJiXHU1MGFmXHU1MGM3XHU1MjdmXHU1Mjc3XHU1MjdkXHU1MmRmXHU1MmU2XHU1MmU0XHU1MmUyXHU1MmUzXHU1MzJmXHU1NWRmXHU1NWU4XHU1NWQzXHU1NWU2XHU1NWNl''@;'; put 'put ''XHU1NWRjXHU1NWM3XHU1NWQxXHU1NWUzXHU1NWU0XHU1NWVmXHU1NWRhXHU1NWUxXHU1NWM1XHU1NWM2XHU1NWU1XHU1NWM5XHU1NzEyXHU1NzEzXHU1ODVlXHU1ODUxXHU1ODU4XHU1ODU3XHU1ODVhXHU1ODU0XHU1ODZiXHU1ODRjXHU1ODZkXHU1ODRhXHU1ODYyXHU1ODUyXHU1ODRiXHU1''@;'; put 'put ''OTY3XHU1YWMxXHU1YWM5XHU1YWNjXHU1YWJlXHU1YWJkXHU1YWJjIl0sWyJiNzQwIiwiXHU1YWIzXHU1YWMyXHU1YWIyXHU1ZDY5XHU1ZDZmXHU1ZTRjXHU1ZTc5XHU1ZWM5XHU1ZWM4XHU1ZjEyXHU1ZjU5XHU1ZmFjXHU1ZmFlXHU2MTFhXHU2MTBmXHU2MTQ4XHU2MTFmXHU2MGYzXHU2MTFi''@;'; put 'put ''XHU2MGY5XHU2MTAxXHU2MTA4XHU2MTRlXHU2MTRjXHU2MTQ0XHU2MTRkXHU2MTNlXHU2MTM0XHU2MTI3XHU2MTBkXHU2MTA2XHU2MTM3XHU2MjIxXHU2MjIyXHU2NDEzXHU2NDNlXHU2NDFlXHU2NDJhXHU2NDJkXHU2NDNkXHU2NDJjXHU2NDBmXHU2NDFjXHU2NDE0XHU2NDBkXHU2NDM2XHU2''@;'; put 'put ''NDE2XHU2NDE3XHU2NDA2XHU2NTZjXHU2NTlmXHU2NWIwXHU2Njk3XHU2Njg5XHU2Njg3XHU2Njg4XHU2Njk2XHU2Njg0XHU2Njk4XHU2NjhkXHU2NzAzXHU2OTk0XHU2OTZkIl0sWyJiN2ExIiwiXHU2OTVhXHU2OTc3XHU2OTYwXHU2OTU0XHU2OTc1XHU2OTMwXHU2OTgyXHU2OTRhXHU2OTY4''@;'; put 'put ''XHU2OTZiXHU2OTVlXHU2OTUzXHU2OTc5XHU2OTg2XHU2OTVkXHU2OTYzXHU2OTViXHU2YjQ3XHU2YjcyXHU2YmMwXHU2YmJmXHU2YmQzXHU2YmZkXHU2ZWEyXHU2ZWFmXHU2ZWQzXHU2ZWI2XHU2ZWMyXHU2ZTkwXHU2ZTlkXHU2ZWM3XHU2ZWM1XHU2ZWE1XHU2ZTk4XHU2ZWJjXHU2ZWJhXHU2''@;'; put 'put ''ZWFiXHU2ZWQxXHU2ZTk2XHU2ZTljXHU2ZWM0XHU2ZWQ0XHU2ZWFhXHU2ZWE3XHU2ZWI0XHU3MTRlXHU3MTU5XHU3MTY5XHU3MTY0XHU3MTQ5XHU3MTY3XHU3MTVjXHU3MTZjXHU3MTY2XHU3MTRjXHU3MTY1XHU3MTVlXHU3MTQ2XHU3MTY4XHU3MTU2XHU3MjNhXHU3MjUyXHU3MzM3XHU3MzQ1''@;'; put 'put ''XHU3MzNmXHU3MzNlXHU3NDZmXHU3NDVhXHU3NDU1XHU3NDVmXHU3NDVlXHU3NDQxXHU3NDNmXHU3NDU5XHU3NDViXHU3NDVjXHU3NTc2XHU3NTc4XHU3NjAwXHU3NWYwXHU3NjAxXHU3NWYyXHU3NWYxXHU3NWZhXHU3NWZmXHU3NWY0XHU3NWYzXHU3NmRlXHU3NmRmXHU3NzViXHU3NzZiXHU3''@;'; put 'put ''NzY2XHU3NzVlXHU3NzYzIl0sWyJiODQwIiwiXHU3Nzc5XHU3NzZhXHU3NzZjXHU3NzVjXHU3NzY1XHU3NzY4XHU3NzYyXHU3N2VlXHU3ODhlXHU3OGIwXHU3ODk3XHU3ODk4XHU3ODhjXHU3ODg5XHU3ODdjXHU3ODkxXHU3ODkzXHU3ODdmXHU3OTdhXHU3OTdmXHU3OTgxXHU4NDJjXHU3OWJk''@;'; put 'put ''XHU3YTFjXHU3YTFhXHU3YTIwXHU3YTE0XHU3YTFmXHU3YTFlXHU3YTlmXHU3YWEwXHU3Yjc3XHU3YmMwXHU3YjYwXHU3YjZlXHU3YjY3XHU3Y2IxXHU3Y2IzXHU3Y2I1XHU3ZDkzXHU3ZDc5XHU3ZDkxXHU3ZDgxXHU3ZDhmXHU3ZDViXHU3ZjZlXHU3ZjY5XHU3ZjZhXHU3ZjcyXHU3ZmE5XHU3''@;'; put 'put ''ZmE4XHU3ZmE0XHU4MDU2XHU4MDU4XHU4MDg2XHU4MDg0XHU4MTcxXHU4MTcwXHU4MTc4XHU4MTY1XHU4MTZlXHU4MTczXHU4MTZiIl0sWyJiOGExIiwiXHU4MTc5XHU4MTdhXHU4MTY2XHU4MjA1XHU4MjQ3XHU4NDgyXHU4NDc3XHU4NDNkXHU4NDMxXHU4NDc1XHU4NDY2XHU4NDZiXHU4NDQ5''@;'; put 'put ''XHU4NDZjXHU4NDViXHU4NDNjXHU4NDM1XHU4NDYxXHU4NDYzXHU4NDY5XHU4NDZkXHU4NDQ2XHU4NjVlXHU4NjVjXHU4NjVmXHU4NmY5XHU4NzEzXHU4NzA4XHU4NzA3XHU4NzAwXHU4NmZlXHU4NmZiXHU4NzAyXHU4NzAzXHU4NzA2XHU4NzBhXHU4ODU5XHU4OGRmXHU4OGQ0XHU4OGQ5XHU4''@;'; put 'put ''OGRjXHU4OGQ4XHU4OGRkXHU4OGUxXHU4OGNhXHU4OGQ1XHU4OGQyXHU4OTljXHU4OWUzXHU4YTZiXHU4YTcyXHU4YTczXHU4YTY2XHU4YTY5XHU4YTcwXHU4YTg3XHU4YTdjXHU4YTYzXHU4YWEwXHU4YTcxXHU4YTg1XHU4YTZkXHU4YTYyXHU4YTZlXHU4YTZjXHU4YTc5XHU4YTdiXHU4YTNl''@;'; put 'put ''XHU4YTY4XHU4YzYyXHU4YzhhXHU4Yzg5XHU4Y2NhXHU4Y2M3XHU4Y2M4XHU4Y2M0XHU4Y2IyXHU4Y2MzXHU4Y2MyXHU4Y2M1XHU4ZGUxXHU4ZGRmXHU4ZGU4XHU4ZGVmXHU4ZGYzXHU4ZGZhXHU4ZGVhXHU4ZGU0XHU4ZGU2XHU4ZWIyXHU4ZjAzXHU4ZjA5XHU4ZWZlXHU4ZjBhIl0sWyJiOTQw''@;'; put 'put ''IiwiXHU4ZjlmXHU4ZmIyXHU5MDRiXHU5MDRhXHU5MDUzXHU5MDQyXHU5MDU0XHU5MDNjXHU5MDU1XHU5MDUwXHU5MDQ3XHU5MDRmXHU5MDRlXHU5MDRkXHU5MDUxXHU5MDNlXHU5MDQxXHU5MTEyXHU5MTE3XHU5MTZjXHU5MTZhXHU5MTY5XHU5MWM5XHU5MjM3XHU5MjU3XHU5MjM4XHU5MjNk''@;'; put 'put ''XHU5MjQwXHU5MjNlXHU5MjViXHU5MjRiXHU5MjY0XHU5MjUxXHU5MjM0XHU5MjQ5XHU5MjRkXHU5MjQ1XHU5MjM5XHU5MjNmXHU5MjVhXHU5NTk4XHU5Njk4XHU5Njk0XHU5Njk1XHU5NmNkXHU5NmNiXHU5NmM5XHU5NmNhXHU5NmY3XHU5NmZiXHU5NmY5XHU5NmY2XHU5NzU2XHU5Nzc0XHU5''@;'; put 'put ''Nzc2XHU5ODEwXHU5ODExXHU5ODEzXHU5ODBhXHU5ODEyXHU5ODBjXHU5OGZjXHU5OGY0Il0sWyJiOWExIiwiXHU5OGZkXHU5OGZlXHU5OWIzXHU5OWIxXHU5OWI0XHU5YWUxXHU5Y2U5XHU5ZTgyXHU5ZjBlXHU5ZjEzXHU5ZjIwXHU1MGU3XHU1MGVlXHU1MGU1XHU1MGQ2XHU1MGVkXHU1MGRh''@;'; put 'put ''XHU1MGQ1XHU1MGNmXHU1MGQxXHU1MGYxXHU1MGNlXHU1MGU5XHU1MTYyXHU1MWYzXHU1MjgzXHU1MjgyXHU1MzMxXHU1M2FkXHU1NWZlXHU1NjAwXHU1NjFiXHU1NjE3XHU1NWZkXHU1NjE0XHU1NjA2XHU1NjA5XHU1NjBkXHU1NjBlXHU1NWY3XHU1NjE2XHU1NjFmXHU1NjA4XHU1NjEwXHU1''@;'; put 'put ''NWY2XHU1NzE4XHU1NzE2XHU1ODc1XHU1ODdlXHU1ODgzXHU1ODkzXHU1ODhhXHU1ODc5XHU1ODg1XHU1ODdkXHU1OGZkXHU1OTI1XHU1OTIyXHU1OTI0XHU1OTZhXHU1OTY5XHU1YWUxXHU1YWU2XHU1YWU5XHU1YWQ3XHU1YWQ2XHU1YWQ4XHU1YWUzXHU1Yjc1XHU1YmRlXHU1YmU3XHU1YmUx''@;'; put 'put ''XHU1YmU1XHU1YmU2XHU1YmU4XHU1YmUyXHU1YmU0XHU1YmRmXHU1YzBkXHU1YzYyXHU1ZDg0XHU1ZDg3XHU1ZTViXHU1ZTYzXHU1ZTU1XHU1ZTU3XHU1ZTU0XHU1ZWQzXHU1ZWQ2XHU1ZjBhXHU1ZjQ2XHU1ZjcwXHU1ZmI5XHU2MTQ3Il0sWyJiYTQwIiwiXHU2MTNmXHU2MTRiXHU2MTc3XHU2''@;'; put 'put ''MTYyXHU2MTYzXHU2MTVmXHU2MTVhXHU2MTU4XHU2MTc1XHU2MjJhXHU2NDg3XHU2NDU4XHU2NDU0XHU2NGE0XHU2NDc4XHU2NDVmXHU2NDdhXHU2NDUxXHU2NDY3XHU2NDM0XHU2NDZkXHU2NDdiXHU2NTcyXHU2NWExXHU2NWQ3XHU2NWQ2XHU2NmEyXHU2NmE4XHU2NjlkXHU2OTljXHU2OWE4''@;'; put 'put ''XHU2OTk1XHU2OWMxXHU2OWFlXHU2OWQzXHU2OWNiXHU2OTliXHU2OWI3XHU2OWJiXHU2OWFiXHU2OWI0XHU2OWQwXHU2OWNkXHU2OWFkXHU2OWNjXHU2OWE2XHU2OWMzXHU2OWEzXHU2YjQ5XHU2YjRjXHU2YzMzXHU2ZjMzXHU2ZjE0XHU2ZWZlXHU2ZjEzXHU2ZWY0XHU2ZjI5XHU2ZjNlXHU2''@;'; put 'put ''ZjIwXHU2ZjJjXHU2ZjBmXHU2ZjAyXHU2ZjIyIl0sWyJiYWExIiwiXHU2ZWZmXHU2ZWVmXHU2ZjA2XHU2ZjMxXHU2ZjM4XHU2ZjMyXHU2ZjIzXHU2ZjE1XHU2ZjJiXHU2ZjJmXHU2Zjg4XHU2ZjJhXHU2ZWVjXHU2ZjAxXHU2ZWYyXHU2ZWNjXHU2ZWY3XHU3MTk0XHU3MTk5XHU3MTdkXHU3MThh''@;'; put 'put ''XHU3MTg0XHU3MTkyXHU3MjNlXHU3MjkyXHU3Mjk2XHU3MzQ0XHU3MzUwXHU3NDY0XHU3NDYzXHU3NDZhXHU3NDcwXHU3NDZkXHU3NTA0XHU3NTkxXHU3NjI3XHU3NjBkXHU3NjBiXHU3NjA5XHU3NjEzXHU3NmUxXHU3NmUzXHU3Nzg0XHU3NzdkXHU3NzdmXHU3NzYxXHU3OGMxXHU3ODlmXHU3''@;'; put 'put ''OGE3XHU3OGIzXHU3OGE5XHU3OGEzXHU3OThlXHU3OThmXHU3OThkXHU3YTJlXHU3YTMxXHU3YWFhXHU3YWE5XHU3YWVkXHU3YWVmXHU3YmExXHU3Yjk1XHU3YjhiXHU3Yjc1XHU3Yjk3XHU3YjlkXHU3Yjk0XHU3YjhmXHU3YmI4XHU3Yjg3XHU3Yjg0XHU3Y2I5XHU3Y2JkXHU3Y2JlXHU3ZGJi''@;'; put 'put ''XHU3ZGIwXHU3ZDljXHU3ZGJkXHU3ZGJlXHU3ZGEwXHU3ZGNhXHU3ZGI0XHU3ZGIyXHU3ZGIxXHU3ZGJhXHU3ZGEyXHU3ZGJmXHU3ZGI1XHU3ZGI4XHU3ZGFkXHU3ZGQyXHU3ZGM3XHU3ZGFjIl0sWyJiYjQwIiwiXHU3ZjcwXHU3ZmUwXHU3ZmUxXHU3ZmRmXHU4MDVlXHU4MDVhXHU4MDg3XHU4''@;'; put 'put ''MTUwXHU4MTgwXHU4MThmXHU4MTg4XHU4MThhXHU4MTdmXHU4MTgyXHU4MWU3XHU4MWZhXHU4MjA3XHU4MjE0XHU4MjFlXHU4MjRiXHU4NGM5XHU4NGJmXHU4NGM2XHU4NGM0XHU4NDk5XHU4NDllXHU4NGIyXHU4NDljXHU4NGNiXHU4NGI4XHU4NGMwXHU4NGQzXHU4NDkwXHU4NGJjXHU4NGQx''@;'; put 'put ''XHU4NGNhXHU4NzNmXHU4NzFjXHU4NzNiXHU4NzIyXHU4NzI1XHU4NzM0XHU4NzE4XHU4NzU1XHU4NzM3XHU4NzI5XHU4OGYzXHU4OTAyXHU4OGY0XHU4OGY5XHU4OGY4XHU4OGZkXHU4OGU4XHU4OTFhXHU4OGVmXHU4YWE2XHU4YThjXHU4YTllXHU4YWEzXHU4YThkXHU4YWExXHU4YTkzXHU4''@;'; put 'put ''YWE0Il0sWyJiYmExIiwiXHU4YWFhXHU4YWE1XHU4YWE4XHU4YTk4XHU4YTkxXHU4YTlhXHU4YWE3XHU4YzZhXHU4YzhkXHU4YzhjXHU4Y2QzXHU4Y2QxXHU4Y2QyXHU4ZDZiXHU4ZDk5XHU4ZDk1XHU4ZGZjXHU4ZjE0XHU4ZjEyXHU4ZjE1XHU4ZjEzXHU4ZmEzXHU5MDYwXHU5MDU4XHU5MDVj''@;'; put 'put ''XHU5MDYzXHU5MDU5XHU5MDVlXHU5MDYyXHU5MDVkXHU5MDViXHU5MTE5XHU5MTE4XHU5MTFlXHU5MTc1XHU5MTc4XHU5MTc3XHU5MTc0XHU5Mjc4XHU5MjgwXHU5Mjg1XHU5Mjk4XHU5Mjk2XHU5MjdiXHU5MjkzXHU5MjljXHU5MmE4XHU5MjdjXHU5MjkxXHU5NWExXHU5NWE4XHU5NWE5XHU5''@;'; put 'put ''NWEzXHU5NWE1XHU5NWE0XHU5Njk5XHU5NjljXHU5NjliXHU5NmNjXHU5NmQyXHU5NzAwXHU5NzdjXHU5Nzg1XHU5N2Y2XHU5ODE3XHU5ODE4XHU5OGFmXHU5OGIxXHU5OTAzXHU5OTA1XHU5OTBjXHU5OTA5XHU5OWMxXHU5YWFmXHU5YWIwXHU5YWU2XHU5YjQxXHU5YjQyXHU5Y2Y0XHU5Y2Y2''@;'; put 'put ''XHU5Y2YzXHU5ZWJjXHU5ZjNiXHU5ZjRhXHU1MTA0XHU1MTAwXHU1MGZiXHU1MGY1XHU1MGY5XHU1MTAyXHU1MTA4XHU1MTA5XHU1MTA1XHU1MWRjIl0sWyJiYzQwIiwiXHU1Mjg3XHU1Mjg4XHU1Mjg5XHU1MjhkXHU1MjhhXHU1MmYwXHU1M2IyXHU1NjJlXHU1NjNiXHU1NjM5XHU1NjMyXHU1''@;'; put 'put ''NjNmXHU1NjM0XHU1NjI5XHU1NjUzXHU1NjRlXHU1NjU3XHU1Njc0XHU1NjM2XHU1NjJmXHU1NjMwXHU1ODgwXHU1ODlmXHU1ODllXHU1OGIzXHU1ODljXHU1OGFlXHU1OGE5XHU1OGE2XHU1OTZkXHU1YjA5XHU1YWZiXHU1YjBiXHU1YWY1XHU1YjBjXHU1YjA4XHU1YmVlXHU1YmVjXHU1YmU5''@;'; put 'put ''XHU1YmViXHU1YzY0XHU1YzY1XHU1ZDlkXHU1ZDk0XHU1ZTYyXHU1ZTVmXHU1ZTYxXHU1ZWUyXHU1ZWRhXHU1ZWRmXHU1ZWRkXHU1ZWUzXHU1ZWUwXHU1ZjQ4XHU1ZjcxXHU1ZmI3XHU1ZmI1XHU2MTc2XHU2MTY3XHU2MTZlXHU2MTVkXHU2MTU1XHU2MTgyIl0sWyJiY2ExIiwiXHU2MTdjXHU2''@;'; put 'put ''MTcwXHU2MTZiXHU2MTdlXHU2MWE3XHU2MTkwXHU2MWFiXHU2MThlXHU2MWFjXHU2MTlhXHU2MWE0XHU2MTk0XHU2MWFlXHU2MjJlXHU2NDY5XHU2NDZmXHU2NDc5XHU2NDllXHU2NGIyXHU2NDg4XHU2NDkwXHU2NGIwXHU2NGE1XHU2NDkzXHU2NDk1XHU2NGE5XHU2NDkyXHU2NGFlXHU2NGFk''@;'; put 'put ''XHU2NGFiXHU2NDlhXHU2NGFjXHU2NDk5XHU2NGEyXHU2NGIzXHU2NTc1XHU2NTc3XHU2NTc4XHU2NmFlXHU2NmFiXHU2NmI0XHU2NmIxXHU2YTIzXHU2YTFmXHU2OWU4XHU2YTAxXHU2YTFlXHU2YTE5XHU2OWZkXHU2YTIxXHU2YTEzXHU2YTBhXHU2OWYzXHU2YTAyXHU2YTA1XHU2OWVkXHU2''@;'; put 'put ''YTExXHU2YjUwXHU2YjRlXHU2YmE0XHU2YmM1XHU2YmM2XHU2ZjNmXHU2ZjdjXHU2Zjg0XHU2ZjUxXHU2ZjY2XHU2ZjU0XHU2Zjg2XHU2ZjZkXHU2ZjViXHU2Zjc4XHU2ZjZlXHU2ZjhlXHU2ZjdhXHU2ZjcwXHU2ZjY0XHU2Zjk3XHU2ZjU4XHU2ZWQ1XHU2ZjZmXHU2ZjYwXHU2ZjVmXHU3MTlm''@;'; put 'put ''XHU3MWFjXHU3MWIxXHU3MWE4XHU3MjU2XHU3MjliXHU3MzRlXHU3MzU3XHU3NDY5XHU3NDhiXHU3NDgzIl0sWyJiZDQwIiwiXHU3NDdlXHU3NDgwXHU3NTdmXHU3NjIwXHU3NjI5XHU3NjFmXHU3NjI0XHU3NjI2XHU3NjIxXHU3NjIyXHU3NjlhXHU3NmJhXHU3NmU0XHU3NzhlXHU3Nzg3XHU3''@;'; put 'put ''NzhjXHU3NzkxXHU3NzhiXHU3OGNiXHU3OGM1XHU3OGJhXHU3OGNhXHU3OGJlXHU3OGQ1XHU3OGJjXHU3OGQwXHU3YTNmXHU3YTNjXHU3YTQwXHU3YTNkXHU3YTM3XHU3YTNiXHU3YWFmXHU3YWFlXHU3YmFkXHU3YmIxXHU3YmM0XHU3YmI0XHU3YmM2XHU3YmM3XHU3YmMxXHU3YmEwXHU3YmNj''@;'; put 'put ''XHU3Y2NhXHU3ZGUwXHU3ZGY0XHU3ZGVmXHU3ZGZiXHU3ZGQ4XHU3ZGVjXHU3ZGRkXHU3ZGU4XHU3ZGUzXHU3ZGRhXHU3ZGRlXHU3ZGU5XHU3ZDllXHU3ZGQ5XHU3ZGYyXHU3ZGY5XHU3Zjc1XHU3Zjc3XHU3ZmFmIl0sWyJiZGExIiwiXHU3ZmU5XHU4MDI2XHU4MTliXHU4MTljXHU4MTlkXHU4''@;'; put 'put ''MWEwXHU4MTlhXHU4MTk4XHU4NTE3XHU4NTNkXHU4NTFhXHU4NGVlXHU4NTJjXHU4NTJkXHU4NTEzXHU4NTExXHU4NTIzXHU4NTIxXHU4NTE0XHU4NGVjXHU4NTI1XHU4NGZmXHU4NTA2XHU4NzgyXHU4Nzc0XHU4Nzc2XHU4NzYwXHU4NzY2XHU4Nzc4XHU4NzY4XHU4NzU5XHU4NzU3XHU4NzRj''@;'; put 'put ''XHU4NzUzXHU4ODViXHU4ODVkXHU4OTEwXHU4OTA3XHU4OTEyXHU4OTEzXHU4OTE1XHU4OTBhXHU4YWJjXHU4YWQyXHU4YWM3XHU4YWM0XHU4YTk1XHU4YWNiXHU4YWY4XHU4YWIyXHU4YWM5XHU4YWMyXHU4YWJmXHU4YWIwXHU4YWQ2XHU4YWNkXHU4YWI2XHU4YWI5XHU4YWRiXHU4YzRjXHU4''@;'; put 'put ''YzRlXHU4YzZjXHU4Y2UwXHU4Y2RlXHU4Y2U2XHU4Y2U0XHU4Y2VjXHU4Y2VkXHU4Y2UyXHU4Y2UzXHU4Y2RjXHU4Y2VhXHU4Y2UxXHU4ZDZkXHU4ZDlmXHU4ZGEzXHU4ZTJiXHU4ZTEwXHU4ZTFkXHU4ZTIyXHU4ZTBmXHU4ZTI5XHU4ZTFmXHU4ZTIxXHU4ZTFlXHU4ZWJhXHU4ZjFkXHU4ZjFi''@;'; put 'put ''XHU4ZjFmXHU4ZjI5XHU4ZjI2XHU4ZjJhXHU4ZjFjXHU4ZjFlIl0sWyJiZTQwIiwiXHU4ZjI1XHU5MDY5XHU5MDZlXHU5MDY4XHU5MDZkXHU5MDc3XHU5MTMwXHU5MTJkXHU5MTI3XHU5MTMxXHU5MTg3XHU5MTg5XHU5MThiXHU5MTgzXHU5MmM1XHU5MmJiXHU5MmI3XHU5MmVhXHU5MmFjXHU5''@;'; put 'put ''MmU0XHU5MmMxXHU5MmIzXHU5MmJjXHU5MmQyXHU5MmM3XHU5MmYwXHU5MmIyXHU5NWFkXHU5NWIxXHU5NzA0XHU5NzA2XHU5NzA3XHU5NzA5XHU5NzYwXHU5NzhkXHU5NzhiXHU5NzhmXHU5ODIxXHU5ODJiXHU5ODFjXHU5OGIzXHU5OTBhXHU5OTEzXHU5OTEyXHU5OTE4XHU5OWRkXHU5OWQw''@;'; put 'put ''XHU5OWRmXHU5OWRiXHU5OWQxXHU5OWQ1XHU5OWQyXHU5OWQ5XHU5YWI3XHU5YWVlXHU5YWVmXHU5YjI3XHU5YjQ1XHU5YjQ0XHU5Yjc3XHU5YjZmXHU5ZDA2XHU5ZDA5Il0sWyJiZWExIiwiXHU5ZDAzXHU5ZWE5XHU5ZWJlXHU5ZWNlXHU1OGE4XHU5ZjUyXHU1MTEyXHU1MTE4XHU1MTE0XHU1''@;'; put 'put ''MTEwXHU1MTE1XHU1MTgwXHU1MWFhXHU1MWRkXHU1MjkxXHU1MjkzXHU1MmYzXHU1NjU5XHU1NjZiXHU1Njc5XHU1NjY5XHU1NjY0XHU1Njc4XHU1NjZhXHU1NjY4XHU1NjY1XHU1NjcxXHU1NjZmXHU1NjZjXHU1NjYyXHU1Njc2XHU1OGMxXHU1OGJlXHU1OGM3XHU1OGM1XHU1OTZlXHU1YjFk''@;'; put 'put ''XHU1YjM0XHU1Yjc4XHU1YmYwXHU1YzBlXHU1ZjRhXHU2MWIyXHU2MTkxXHU2MWE5XHU2MThhXHU2MWNkXHU2MWI2XHU2MWJlXHU2MWNhXHU2MWM4XHU2MjMwXHU2NGM1XHU2NGMxXHU2NGNiXHU2NGJiXHU2NGJjXHU2NGRhXHU2NGM0XHU2NGM3XHU2NGMyXHU2NGNkXHU2NGJmXHU2NGQyXHU2''@;'; put 'put ''NGQ0XHU2NGJlXHU2NTc0XHU2NmM2XHU2NmM5XHU2NmI5XHU2NmM0XHU2NmM3XHU2NmI4XHU2YTNkXHU2YTM4XHU2YTNhXHU2YTU5XHU2YTZiXHU2YTU4XHU2YTM5XHU2YTQ0XHU2YTYyXHU2YTYxXHU2YTRiXHU2YTQ3XHU2YTM1XHU2YTVmXHU2YTQ4XHU2YjU5XHU2Yjc3XHU2YzA1XHU2ZmMy''@;'; put 'put ''XHU2ZmIxXHU2ZmExIl0sWyJiZjQwIiwiXHU2ZmMzXHU2ZmE0XHU2ZmMxXHU2ZmE3XHU2ZmIzXHU2ZmMwXHU2ZmI5XHU2ZmI2XHU2ZmE2XHU2ZmEwXHU2ZmI0XHU3MWJlXHU3MWM5XHU3MWQwXHU3MWQyXHU3MWM4XHU3MWQ1XHU3MWI5XHU3MWNlXHU3MWQ5XHU3MWRjXHU3MWMzXHU3MWM0XHU3''@;'; put 'put ''MzY4XHU3NDljXHU3NGEzXHU3NDk4XHU3NDlmXHU3NDllXHU3NGUyXHU3NTBjXHU3NTBkXHU3NjM0XHU3NjM4XHU3NjNhXHU3NmU3XHU3NmU1XHU3N2EwXHU3NzllXHU3NzlmXHU3N2E1XHU3OGU4XHU3OGRhXHU3OGVjXHU3OGU3XHU3OWE2XHU3YTRkXHU3YTRlXHU3YTQ2XHU3YTRjXHU3YTRi''@;'; put 'put ''XHU3YWJhXHU3YmQ5XHU3YzExXHU3YmM5XHU3YmU0XHU3YmRiXHU3YmUxXHU3YmU5XHU3YmU2XHU3Y2Q1XHU3Y2Q2XHU3ZTBhIl0sWyJiZmExIiwiXHU3ZTExXHU3ZTA4XHU3ZTFiXHU3ZTIzXHU3ZTFlXHU3ZTFkXHU3ZTA5XHU3ZTEwXHU3Zjc5XHU3ZmIyXHU3ZmYwXHU3ZmYxXHU3ZmVlXHU4''@;'; put 'put ''MDI4XHU4MWIzXHU4MWE5XHU4MWE4XHU4MWZiXHU4MjA4XHU4MjU4XHU4MjU5XHU4NTRhXHU4NTU5XHU4NTQ4XHU4NTY4XHU4NTY5XHU4NTQzXHU4NTQ5XHU4NTZkXHU4NTZhXHU4NTVlXHU4NzgzXHU4NzlmXHU4NzllXHU4N2EyXHU4NzhkXHU4ODYxXHU4OTJhXHU4OTMyXHU4OTI1XHU4OTJi''@;'; put 'put ''XHU4OTIxXHU4OWFhXHU4OWE2XHU4YWU2XHU4YWZhXHU4YWViXHU4YWYxXHU4YjAwXHU4YWRjXHU4YWU3XHU4YWVlXHU4YWZlXHU4YjAxXHU4YjAyXHU4YWY3XHU4YWVkXHU4YWYzXHU4YWY2XHU4YWZjXHU4YzZiXHU4YzZkXHU4YzkzXHU4Y2Y0XHU4ZTQ0XHU4ZTMxXHU4ZTM0XHU4ZTQyXHU4''@;'; put 'put ''ZTM5XHU4ZTM1XHU4ZjNiXHU4ZjJmXHU4ZjM4XHU4ZjMzXHU4ZmE4XHU4ZmE2XHU5MDc1XHU5MDc0XHU5MDc4XHU5MDcyXHU5MDdjXHU5MDdhXHU5MTM0XHU5MTkyXHU5MzIwXHU5MzM2XHU5MmY4XHU5MzMzXHU5MzJmXHU5MzIyXHU5MmZjXHU5MzJiXHU5MzA0XHU5MzFhIl0sWyJjMDQwIiwi''@;'; put 'put ''XHU5MzEwXHU5MzI2XHU5MzIxXHU5MzE1XHU5MzJlXHU5MzE5XHU5NWJiXHU5NmE3XHU5NmE4XHU5NmFhXHU5NmQ1XHU5NzBlXHU5NzExXHU5NzE2XHU5NzBkXHU5NzEzXHU5NzBmXHU5NzViXHU5NzVjXHU5NzY2XHU5Nzk4XHU5ODMwXHU5ODM4XHU5ODNiXHU5ODM3XHU5ODJkXHU5ODM5XHU5''@;'; put 'put ''ODI0XHU5OTEwXHU5OTI4XHU5OTFlXHU5OTFiXHU5OTIxXHU5OTFhXHU5OWVkXHU5OWUyXHU5OWYxXHU5YWI4XHU5YWJjXHU5YWZiXHU5YWVkXHU5YjI4XHU5YjkxXHU5ZDE1XHU5ZDIzXHU5ZDI2XHU5ZDI4XHU5ZDEyXHU5ZDFiXHU5ZWQ4XHU5ZWQ0XHU5ZjhkXHU5ZjljXHU1MTJhXHU1MTFm''@;'; put 'put ''XHU1MTIxXHU1MTMyXHU1MmY1XHU1NjhlXHU1NjgwXHU1NjkwXHU1Njg1XHU1Njg3Il0sWyJjMGExIiwiXHU1NjhmXHU1OGQ1XHU1OGQzXHU1OGQxXHU1OGNlXHU1YjMwXHU1YjJhXHU1YjI0XHU1YjdhXHU1YzM3XHU1YzY4XHU1ZGJjXHU1ZGJhXHU1ZGJkXHU1ZGI4XHU1ZTZiXHU1ZjRjXHU1''@;'; put 'put ''ZmJkXHU2MWM5XHU2MWMyXHU2MWM3XHU2MWU2XHU2MWNiXHU2MjMyXHU2MjM0XHU2NGNlXHU2NGNhXHU2NGQ4XHU2NGUwXHU2NGYwXHU2NGU2XHU2NGVjXHU2NGYxXHU2NGUyXHU2NGVkXHU2NTgyXHU2NTgzXHU2NmQ5XHU2NmQ2XHU2YTgwXHU2YTk0XHU2YTg0XHU2YWEyXHU2YTljXHU2YWRi''@;'; put 'put ''XHU2YWEzXHU2YTdlXHU2YTk3XHU2YTkwXHU2YWEwXHU2YjVjXHU2YmFlXHU2YmRhXHU2YzA4XHU2ZmQ4XHU2ZmYxXHU2ZmRmXHU2ZmUwXHU2ZmRiXHU2ZmU0XHU2ZmViXHU2ZmVmXHU2ZjgwXHU2ZmVjXHU2ZmUxXHU2ZmU5XHU2ZmQ1XHU2ZmVlXHU2ZmYwXHU3MWU3XHU3MWRmXHU3MWVlXHU3''@;'; put 'put ''MWU2XHU3MWU1XHU3MWVkXHU3MWVjXHU3MWY0XHU3MWUwXHU3MjM1XHU3MjQ2XHU3MzcwXHU3MzcyXHU3NGE5XHU3NGIwXHU3NGE2XHU3NGE4XHU3NjQ2XHU3NjQyXHU3NjRjXHU3NmVhXHU3N2IzXHU3N2FhXHU3N2IwXHU3N2FjIl0sWyJjMTQwIiwiXHU3N2E3XHU3N2FkXHU3N2VmXHU3OGY3''@;'; put 'put ''XHU3OGZhXHU3OGY0XHU3OGVmXHU3OTAxXHU3OWE3XHU3OWFhXHU3YTU3XHU3YWJmXHU3YzA3XHU3YzBkXHU3YmZlXHU3YmY3XHU3YzBjXHU3YmUwXHU3Y2UwXHU3Y2RjXHU3Y2RlXHU3Y2UyXHU3Y2RmXHU3Y2Q5XHU3Y2RkXHU3ZTJlXHU3ZTNlXHU3ZTQ2XHU3ZTM3XHU3ZTMyXHU3ZTQzXHU3''@;'; put 'put ''ZTJiXHU3ZTNkXHU3ZTMxXHU3ZTQ1XHU3ZTQxXHU3ZTM0XHU3ZTM5XHU3ZTQ4XHU3ZTM1XHU3ZTNmXHU3ZTJmXHU3ZjQ0XHU3ZmYzXHU3ZmZjXHU4MDcxXHU4MDcyXHU4MDcwXHU4MDZmXHU4MDczXHU4MWM2XHU4MWMzXHU4MWJhXHU4MWMyXHU4MWMwXHU4MWJmXHU4MWJkXHU4MWM5XHU4MWJl''@;'; put 'put ''XHU4MWU4XHU4MjA5XHU4MjcxXHU4NWFhIl0sWyJjMWExIiwiXHU4NTg0XHU4NTdlXHU4NTljXHU4NTkxXHU4NTk0XHU4NWFmXHU4NTliXHU4NTg3XHU4NWE4XHU4NThhXHU4NjY3XHU4N2MwXHU4N2QxXHU4N2IzXHU4N2QyXHU4N2M2XHU4N2FiXHU4N2JiXHU4N2JhXHU4N2M4XHU4N2NiXHU4''@;'; put 'put ''OTNiXHU4OTM2XHU4OTQ0XHU4OTM4XHU4OTNkXHU4OWFjXHU4YjBlXHU4YjE3XHU4YjE5XHU4YjFiXHU4YjBhXHU4YjIwXHU4YjFkXHU4YjA0XHU4YjEwXHU4YzQxXHU4YzNmXHU4YzczXHU4Y2ZhXHU4Y2ZkXHU4Y2ZjXHU4Y2Y4XHU4Y2ZiXHU4ZGE4XHU4ZTQ5XHU4ZTRiXHU4ZTQ4XHU4ZTRh''@;'; put 'put ''XHU4ZjQ0XHU4ZjNlXHU4ZjQyXHU4ZjQ1XHU4ZjNmXHU5MDdmXHU5MDdkXHU5MDg0XHU5MDgxXHU5MDgyXHU5MDgwXHU5MTM5XHU5MWEzXHU5MTllXHU5MTljXHU5MzRkXHU5MzgyXHU5MzI4XHU5Mzc1XHU5MzRhXHU5MzY1XHU5MzRiXHU5MzE4XHU5MzdlXHU5MzZjXHU5MzViXHU5MzcwXHU5''@;'; put 'put ''MzVhXHU5MzU0XHU5NWNhXHU5NWNiXHU5NWNjXHU5NWM4XHU5NWM2XHU5NmIxXHU5NmI4XHU5NmQ2XHU5NzFjXHU5NzFlXHU5N2EwXHU5N2QzXHU5ODQ2XHU5OGI2XHU5OTM1XHU5YTAxIl0sWyJjMjQwIiwiXHU5OWZmXHU5YmFlXHU5YmFiXHU5YmFhXHU5YmFkXHU5ZDNiXHU5ZDNmXHU5ZThi''@;'; put 'put ''XHU5ZWNmXHU5ZWRlXHU5ZWRjXHU5ZWRkXHU5ZWRiXHU5ZjNlXHU5ZjRiXHU1M2UyXHU1Njk1XHU1NmFlXHU1OGQ5XHU1OGQ4XHU1YjM4XHU1ZjVkXHU2MWUzXHU2MjMzXHU2NGY0XHU2NGYyXHU2NGZlXHU2NTA2XHU2NGZhXHU2NGZiXHU2NGY3XHU2NWI3XHU2NmRjXHU2NzI2XHU2YWIzXHU2''@;'; put 'put ''YWFjXHU2YWMzXHU2YWJiXHU2YWI4XHU2YWMyXHU2YWFlXHU2YWFmXHU2YjVmXHU2Yjc4XHU2YmFmXHU3MDA5XHU3MDBiXHU2ZmZlXHU3MDA2XHU2ZmZhXHU3MDExXHU3MDBmXHU3MWZiXHU3MWZjXHU3MWZlXHU3MWY4XHU3Mzc3XHU3Mzc1XHU3NGE3XHU3NGJmXHU3NTE1XHU3NjU2XHU3NjU4''@;'; put 'put ''Il0sWyJjMmExIiwiXHU3NjUyXHU3N2JkXHU3N2JmXHU3N2JiXHU3N2JjXHU3OTBlXHU3OWFlXHU3YTYxXHU3YTYyXHU3YTYwXHU3YWM0XHU3YWM1XHU3YzJiXHU3YzI3XHU3YzJhXHU3YzFlXHU3YzIzXHU3YzIxXHU3Y2U3XHU3ZTU0XHU3ZTU1XHU3ZTVlXHU3ZTVhXHU3ZTYxXHU3ZTUyXHU3''@;'; put 'put ''ZTU5XHU3ZjQ4XHU3ZmY5XHU3ZmZiXHU4MDc3XHU4MDc2XHU4MWNkXHU4MWNmXHU4MjBhXHU4NWNmXHU4NWE5XHU4NWNkXHU4NWQwXHU4NWM5XHU4NWIwXHU4NWJhXHU4NWI5XHU4NWE2XHU4N2VmXHU4N2VjXHU4N2YyXHU4N2UwXHU4OTg2XHU4OWIyXHU4OWY0XHU4YjI4XHU4YjM5XHU4YjJj''@;'; put 'put ''XHU4YjJiXHU4YzUwXHU4ZDA1XHU4ZTU5XHU4ZTYzXHU4ZTY2XHU4ZTY0XHU4ZTVmXHU4ZTU1XHU4ZWMwXHU4ZjQ5XHU4ZjRkXHU5MDg3XHU5MDgzXHU5MDg4XHU5MWFiXHU5MWFjXHU5MWQwXHU5Mzk0XHU5MzhhXHU5Mzk2XHU5M2EyXHU5M2IzXHU5M2FlXHU5M2FjXHU5M2IwXHU5Mzk4XHU5''@;'; put 'put ''MzlhXHU5Mzk3XHU5NWQ0XHU5NWQ2XHU5NWQwXHU5NWQ1XHU5NmUyXHU5NmRjXHU5NmQ5XHU5NmRiXHU5NmRlXHU5NzI0XHU5N2EzXHU5N2E2Il0sWyJjMzQwIiwiXHU5N2FkXHU5N2Y5XHU5ODRkXHU5ODRmXHU5ODRjXHU5ODRlXHU5ODUzXHU5OGJhXHU5OTNlXHU5OTNmXHU5OTNkXHU5OTJl''@;'; put 'put ''XHU5OWE1XHU5YTBlXHU5YWMxXHU5YjAzXHU5YjA2XHU5YjRmXHU5YjRlXHU5YjRkXHU5YmNhXHU5YmM5XHU5YmZkXHU5YmM4XHU5YmMwXHU5ZDUxXHU5ZDVkXHU5ZDYwXHU5ZWUwXHU5ZjE1XHU5ZjJjXHU1MTMzXHU1NmE1XHU1OGRlXHU1OGRmXHU1OGUyXHU1YmY1XHU5ZjkwXHU1ZWVjXHU2''@;'; put 'put ''MWYyXHU2MWY3XHU2MWY2XHU2MWY1XHU2NTAwXHU2NTBmXHU2NmUwXHU2NmRkXHU2YWU1XHU2YWRkXHU2YWRhXHU2YWQzXHU3MDFiXHU3MDFmXHU3MDI4XHU3MDFhXHU3MDFkXHU3MDE1XHU3MDE4XHU3MjA2XHU3MjBkXHU3MjU4XHU3MmEyXHU3Mzc4Il0sWyJjM2ExIiwiXHU3MzdhXHU3NGJk''@;'; put 'put ''XHU3NGNhXHU3NGUzXHU3NTg3XHU3NTg2XHU3NjVmXHU3NjYxXHU3N2M3XHU3OTE5XHU3OWIxXHU3YTZiXHU3YTY5XHU3YzNlXHU3YzNmXHU3YzM4XHU3YzNkXHU3YzM3XHU3YzQwXHU3ZTZiXHU3ZTZkXHU3ZTc5XHU3ZTY5XHU3ZTZhXHU3Zjg1XHU3ZTczXHU3ZmI2XHU3ZmI5XHU3ZmI4XHU4''@;'; put 'put ''MWQ4XHU4NWU5XHU4NWRkXHU4NWVhXHU4NWQ1XHU4NWU0XHU4NWU1XHU4NWY3XHU4N2ZiXHU4ODA1XHU4ODBkXHU4N2Y5XHU4N2ZlXHU4OTYwXHU4OTVmXHU4OTU2XHU4OTVlXHU4YjQxXHU4YjVjXHU4YjU4XHU4YjQ5XHU4YjVhXHU4YjRlXHU4YjRmXHU4YjQ2XHU4YjU5XHU4ZDA4XHU4ZDBh''@;'; put 'put ''XHU4ZTdjXHU4ZTcyXHU4ZTg3XHU4ZTc2XHU4ZTZjXHU4ZTdhXHU4ZTc0XHU4ZjU0XHU4ZjRlXHU4ZmFkXHU5MDhhXHU5MDhiXHU5MWIxXHU5MWFlXHU5M2UxXHU5M2QxXHU5M2RmXHU5M2MzXHU5M2M4XHU5M2RjXHU5M2RkXHU5M2Q2XHU5M2UyXHU5M2NkXHU5M2Q4XHU5M2U0XHU5M2Q3XHU5''@;'; put 'put ''M2U4XHU5NWRjXHU5NmI0XHU5NmUzXHU5NzJhXHU5NzI3XHU5NzYxXHU5N2RjXHU5N2ZiXHU5ODVlIl0sWyJjNDQwIiwiXHU5ODU4XHU5ODViXHU5OGJjXHU5OTQ1XHU5OTQ5XHU5YTE2XHU5YTE5XHU5YjBkXHU5YmU4XHU5YmU3XHU5YmQ2XHU5YmRiXHU5ZDg5XHU5ZDYxXHU5ZDcyXHU5ZDZh''@;'; put 'put ''XHU5ZDZjXHU5ZTkyXHU5ZTk3XHU5ZTkzXHU5ZWI0XHU1MmY4XHU1NmE4XHU1NmI3XHU1NmI2XHU1NmI0XHU1NmJjXHU1OGU0XHU1YjQwXHU1YjQzXHU1YjdkXHU1YmY2XHU1ZGM5XHU2MWY4XHU2MWZhXHU2NTE4XHU2NTE0XHU2NTE5XHU2NmU2XHU2NzI3XHU2YWVjXHU3MDNlXHU3MDMwXHU3''@;'; put 'put ''MDMyXHU3MjEwXHU3MzdiXHU3NGNmXHU3NjYyXHU3NjY1XHU3OTI2XHU3OTJhXHU3OTJjXHU3OTJiXHU3YWM3XHU3YWY2XHU3YzRjXHU3YzQzXHU3YzRkXHU3Y2VmXHU3Y2YwXHU4ZmFlXHU3ZTdkXHU3ZTdjIl0sWyJjNGExIiwiXHU3ZTgyXHU3ZjRjXHU4MDAwXHU4MWRhXHU4MjY2XHU4NWZi''@;'; put 'put ''XHU4NWY5XHU4NjExXHU4NWZhXHU4NjA2XHU4NjBiXHU4NjA3XHU4NjBhXHU4ODE0XHU4ODE1XHU4OTY0XHU4OWJhXHU4OWY4XHU4YjcwXHU4YjZjXHU4YjY2XHU4YjZmXHU4YjVmXHU4YjZiXHU4ZDBmXHU4ZDBkXHU4ZTg5XHU4ZTgxXHU4ZTg1XHU4ZTgyXHU5MWI0XHU5MWNiXHU5NDE4XHU5''@;'; put 'put ''NDAzXHU5M2ZkXHU5NWUxXHU5NzMwXHU5OGM0XHU5OTUyXHU5OTUxXHU5OWE4XHU5YTJiXHU5YTMwXHU5YTM3XHU5YTM1XHU5YzEzXHU5YzBkXHU5ZTc5XHU5ZWI1XHU5ZWU4XHU5ZjJmXHU5ZjVmXHU5ZjYzXHU5ZjYxXHU1MTM3XHU1MTM4XHU1NmMxXHU1NmMwXHU1NmMyXHU1OTE0XHU1YzZj''@;'; put 'put ''XHU1ZGNkXHU2MWZjXHU2MWZlXHU2NTFkXHU2NTFjXHU2NTk1XHU2NmU5XHU2YWZiXHU2YjA0XHU2YWZhXHU2YmIyXHU3MDRjXHU3MjFiXHU3MmE3XHU3NGQ2XHU3NGQ0XHU3NjY5XHU3N2QzXHU3YzUwXHU3ZThmXHU3ZThjXHU3ZmJjXHU4NjE3XHU4NjJkXHU4NjFhXHU4ODIzXHU4ODIyXHU4''@;'; put 'put ''ODIxXHU4ODFmXHU4OTZhXHU4OTZjXHU4OWJkXHU4Yjc0Il0sWyJjNTQwIiwiXHU4Yjc3XHU4YjdkXHU4ZDEzXHU4ZThhXHU4ZThkXHU4ZThiXHU4ZjVmXHU4ZmFmXHU5MWJhXHU5NDJlXHU5NDMzXHU5NDM1XHU5NDNhXHU5NDM4XHU5NDMyXHU5NDJiXHU5NWUyXHU5NzM4XHU5NzM5XHU5NzMy''@;'; put 'put ''XHU5N2ZmXHU5ODY3XHU5ODY1XHU5OTU3XHU5YTQ1XHU5YTQzXHU5YTQwXHU5YTNlXHU5YWNmXHU5YjU0XHU5YjUxXHU5YzJkXHU5YzI1XHU5ZGFmXHU5ZGI0XHU5ZGMyXHU5ZGI4XHU5ZTlkXHU5ZWVmXHU5ZjE5XHU5ZjVjXHU5ZjY2XHU5ZjY3XHU1MTNjXHU1MTNiXHU1NmM4XHU1NmNhXHU1''@;'; put 'put ''NmM5XHU1YjdmXHU1ZGQ0XHU1ZGQyXHU1ZjRlXHU2MWZmXHU2NTI0XHU2YjBhXHU2YjYxXHU3MDUxXHU3MDU4XHU3MzgwXHU3NGU0XHU3NThhXHU3NjZlXHU3NjZjIl0sWyJjNWExIiwiXHU3OWIzXHU3YzYwXHU3YzVmXHU4MDdlXHU4MDdkXHU4MWRmXHU4OTcyXHU4OTZmXHU4OWZjXHU4Yjgw''@;'; put 'put ''XHU4ZDE2XHU4ZDE3XHU4ZTkxXHU4ZTkzXHU4ZjYxXHU5MTQ4XHU5NDQ0XHU5NDUxXHU5NDUyXHU5NzNkXHU5NzNlXHU5N2MzXHU5N2MxXHU5ODZiXHU5OTU1XHU5YTU1XHU5YTRkXHU5YWQyXHU5YjFhXHU5YzQ5XHU5YzMxXHU5YzNlXHU5YzNiXHU5ZGQzXHU5ZGQ3XHU5ZjM0XHU5ZjZjXHU5''@;'; put 'put ''ZjZhXHU5Zjk0XHU1NmNjXHU1ZGQ2XHU2MjAwXHU2NTIzXHU2NTJiXHU2NTJhXHU2NmVjXHU2YjEwXHU3NGRhXHU3YWNhXHU3YzY0XHU3YzYzXHU3YzY1XHU3ZTkzXHU3ZTk2XHU3ZTk0XHU4MWUyXHU4NjM4XHU4NjNmXHU4ODMxXHU4YjhhXHU5MDkwXHU5MDhmXHU5NDYzXHU5NDYwXHU5NDY0''@;'; put 'put ''XHU5NzY4XHU5ODZmXHU5OTVjXHU5YTVhXHU5YTViXHU5YTU3XHU5YWQzXHU5YWQ0XHU5YWQxXHU5YzU0XHU5YzU3XHU5YzU2XHU5ZGU1XHU5ZTlmXHU5ZWY0XHU1NmQxXHU1OGU5XHU2NTJjXHU3MDVlXHU3NjcxXHU3NjcyXHU3N2Q3XHU3ZjUwXHU3Zjg4XHU4ODM2XHU4ODM5XHU4ODYyXHU4''@;'; put 'put ''YjkzXHU4YjkyIl0sWyJjNjQwIiwiXHU4Yjk2XHU4Mjc3XHU4ZDFiXHU5MWMwXHU5NDZhXHU5NzQyXHU5NzQ4XHU5NzQ0XHU5N2M2XHU5ODcwXHU5YTVmXHU5YjIyXHU5YjU4XHU5YzVmXHU5ZGY5XHU5ZGZhXHU5ZTdjXHU5ZTdkXHU5ZjA3XHU5Zjc3XHU5ZjcyXHU1ZWYzXHU2YjE2XHU3MDYz''@;'; put 'put ''XHU3YzZjXHU3YzZlXHU4ODNiXHU4OWMwXHU4ZWExXHU5MWMxXHU5NDcyXHU5NDcwXHU5ODcxXHU5OTVlXHU5YWQ2XHU5YjIzXHU5ZWNjXHU3MDY0XHU3N2RhXHU4YjlhXHU5NDc3XHU5N2M5XHU5YTYyXHU5YTY1XHU3ZTljXHU4YjljXHU4ZWFhXHU5MWM1XHU5NDdkXHU5NDdlXHU5NDdjXHU5''@;'; put 'put ''Yzc3XHU5Yzc4XHU5ZWY3XHU4YzU0XHU5NDdmXHU5ZTFhXHU3MjI4XHU5YTZhXHU5YjMxXHU5ZTFiXHU5ZTFlXHU3YzcyIl0sWyJjOTQwIiwiXHU0ZTQyXHU0ZTVjXHU1MWY1XHU1MzFhXHU1MzgyXHU0ZTA3XHU0ZTBjXHU0ZTQ3XHU0ZThkXHU1NmQ3XHVmYTBjXHU1YzZlXHU1ZjczXHU0ZTBm''@;'; put 'put ''XHU1MTg3XHU0ZTBlXHU0ZTJlXHU0ZTkzXHU0ZWMyXHU0ZWM5XHU0ZWM4XHU1MTk4XHU1MmZjXHU1MzZjXHU1M2I5XHU1NzIwXHU1OTAzXHU1OTJjXHU1YzEwXHU1ZGZmXHU2NWUxXHU2YmIzXHU2YmNjXHU2YzE0XHU3MjNmXHU0ZTMxXHU0ZTNjXHU0ZWU4XHU0ZWRjXHU0ZWU5XHU0ZWUxXHU0''@;'; put 'put ''ZWRkXHU0ZWRhXHU1MjBjXHU1MzFjXHU1MzRjXHU1NzIyXHU1NzIzXHU1OTE3XHU1OTJmXHU1YjgxXHU1Yjg0XHU1YzEyXHU1YzNiXHU1Yzc0XHU1YzczXHU1ZTA0XHU1ZTgwXHU1ZTgyXHU1ZmM5XHU2MjA5XHU2MjUwXHU2YzE1Il0sWyJjOWExIiwiXHU2YzM2XHU2YzQzXHU2YzNmXHU2YzNi''@;'; put 'put ''XHU3MmFlXHU3MmIwXHU3MzhhXHU3OWI4XHU4MDhhXHU5NjFlXHU0ZjBlXHU0ZjE4XHU0ZjJjXHU0ZWY1XHU0ZjE0XHU0ZWYxXHU0ZjAwXHU0ZWY3XHU0ZjA4XHU0ZjFkXHU0ZjAyXHU0ZjA1XHU0ZjIyXHU0ZjEzXHU0ZjA0XHU0ZWY0XHU0ZjEyXHU1MWIxXHU1MjEzXHU1MjA5XHU1MjEwXHU1''@;'; put 'put ''MmE2XHU1MzIyXHU1MzFmXHU1MzRkXHU1MzhhXHU1NDA3XHU1NmUxXHU1NmRmXHU1NzJlXHU1NzJhXHU1NzM0XHU1OTNjXHU1OTgwXHU1OTdjXHU1OTg1XHU1OTdiXHU1OTdlXHU1OTc3XHU1OTdmXHU1YjU2XHU1YzE1XHU1YzI1XHU1YzdjXHU1YzdhXHU1YzdiXHU1YzdlXHU1ZGRmXHU1ZTc1''@;'; put 'put ''XHU1ZTg0XHU1ZjAyXHU1ZjFhXHU1Zjc0XHU1ZmQ1XHU1ZmQ0XHU1ZmNmXHU2MjVjXHU2MjVlXHU2MjY0XHU2MjYxXHU2MjY2XHU2MjYyXHU2MjU5XHU2MjYwXHU2MjVhXHU2MjY1XHU2NWVmXHU2NWVlXHU2NzNlXHU2NzM5XHU2NzM4XHU2NzNiXHU2NzNhXHU2NzNmXHU2NzNjXHU2NzMzXHU2''@;'; put 'put ''YzE4XHU2YzQ2XHU2YzUyXHU2YzVjXHU2YzRmXHU2YzRhXHU2YzU0XHU2YzRiIl0sWyJjYTQwIiwiXHU2YzRjXHU3MDcxXHU3MjVlXHU3MmI0XHU3MmI1XHU3MzhlXHU3NTJhXHU3NjdmXHU3YTc1XHU3ZjUxXHU4Mjc4XHU4MjdjXHU4MjgwXHU4MjdkXHU4MjdmXHU4NjRkXHU4OTdlXHU5MDk5''@;'; put 'put ''XHU5MDk3XHU5MDk4XHU5MDliXHU5MDk0XHU5NjIyXHU5NjI0XHU5NjIwXHU5NjIzXHU0ZjU2XHU0ZjNiXHU0ZjYyXHU0ZjQ5XHU0ZjUzXHU0ZjY0XHU0ZjNlXHU0ZjY3XHU0ZjUyXHU0ZjVmXHU0ZjQxXHU0ZjU4XHU0ZjJkXHU0ZjMzXHU0ZjNmXHU0ZjYxXHU1MThmXHU1MWI5XHU1MjFjXHU1''@;'; put 'put ''MjFlXHU1MjIxXHU1MmFkXHU1MmFlXHU1MzA5XHU1MzYzXHU1MzcyXHU1MzhlXHU1MzhmXHU1NDMwXHU1NDM3XHU1NDJhXHU1NDU0XHU1NDQ1XHU1NDE5XHU1NDFjXHU1NDI1XHU1NDE4Il0sWyJjYWExIiwiXHU1NDNkXHU1NDRmXHU1NDQxXHU1NDI4XHU1NDI0XHU1NDQ3XHU1NmVlXHU1NmU3''@;'; put 'put ''XHU1NmU1XHU1NzQxXHU1NzQ1XHU1NzRjXHU1NzQ5XHU1NzRiXHU1NzUyXHU1OTA2XHU1OTQwXHU1OWE2XHU1OTk4XHU1OWEwXHU1OTk3XHU1OThlXHU1OWEyXHU1OTkwXHU1OThmXHU1OWE3XHU1OWExXHU1YjhlXHU1YjkyXHU1YzI4XHU1YzJhXHU1YzhkXHU1YzhmXHU1Yzg4XHU1YzhiXHU1''@;'; put 'put ''Yzg5XHU1YzkyXHU1YzhhXHU1Yzg2XHU1YzkzXHU1Yzk1XHU1ZGUwXHU1ZTBhXHU1ZTBlXHU1ZThiXHU1ZTg5XHU1ZThjXHU1ZTg4XHU1ZThkXHU1ZjA1XHU1ZjFkXHU1Zjc4XHU1Zjc2XHU1ZmQyXHU1ZmQxXHU1ZmQwXHU1ZmVkXHU1ZmU4XHU1ZmVlXHU1ZmYzXHU1ZmUxXHU1ZmU0XHU1ZmUz''@;'; put 'put ''XHU1ZmZhXHU1ZmVmXHU1ZmY3XHU1ZmZiXHU2MDAwXHU1ZmY0XHU2MjNhXHU2MjgzXHU2MjhjXHU2MjhlXHU2MjhmXHU2Mjk0XHU2Mjg3XHU2MjcxXHU2MjdiXHU2MjdhXHU2MjcwXHU2MjgxXHU2Mjg4XHU2Mjc3XHU2MjdkXHU2MjcyXHU2Mjc0XHU2NTM3XHU2NWYwXHU2NWY0XHU2NWYzXHU2''@;'; put 'put ''NWYyXHU2NWY1XHU2NzQ1XHU2NzQ3Il0sWyJjYjQwIiwiXHU2NzU5XHU2NzU1XHU2NzRjXHU2NzQ4XHU2NzVkXHU2NzRkXHU2NzVhXHU2NzRiXHU2YmQwXHU2YzE5XHU2YzFhXHU2Yzc4XHU2YzY3XHU2YzZiXHU2Yzg0XHU2YzhiXHU2YzhmXHU2YzcxXHU2YzZmXHU2YzY5XHU2YzlhXHU2YzZk''@;'; put 'put ''XHU2Yzg3XHU2Yzk1XHU2YzljXHU2YzY2XHU2YzczXHU2YzY1XHU2YzdiXHU2YzhlXHU3MDc0XHU3MDdhXHU3MjYzXHU3MmJmXHU3MmJkXHU3MmMzXHU3MmM2XHU3MmMxXHU3MmJhXHU3MmM1XHU3Mzk1XHU3Mzk3XHU3MzkzXHU3Mzk0XHU3MzkyXHU3NTNhXHU3NTM5XHU3NTk0XHU3NTk1XHU3''@;'; put 'put ''NjgxXHU3OTNkXHU4MDM0XHU4MDk1XHU4MDk5XHU4MDkwXHU4MDkyXHU4MDljXHU4MjkwXHU4MjhmXHU4Mjg1XHU4MjhlXHU4MjkxXHU4MjkzIl0sWyJjYmExIiwiXHU4MjhhXHU4MjgzXHU4Mjg0XHU4Yzc4XHU4ZmM5XHU4ZmJmXHU5MDlmXHU5MGExXHU5MGE1XHU5MDllXHU5MGE3XHU5MGEw''@;'; put 'put ''XHU5NjMwXHU5NjI4XHU5NjJmXHU5NjJkXHU0ZTMzXHU0Zjk4XHU0ZjdjXHU0Zjg1XHU0ZjdkXHU0ZjgwXHU0Zjg3XHU0Zjc2XHU0Zjc0XHU0Zjg5XHU0Zjg0XHU0Zjc3XHU0ZjRjXHU0Zjk3XHU0ZjZhXHU0ZjlhXHU0Zjc5XHU0ZjgxXHU0Zjc4XHU0ZjkwXHU0ZjljXHU0Zjk0XHU0ZjllXHU0''@;'; put 'put ''ZjkyXHU0ZjgyXHU0Zjk1XHU0ZjZiXHU0ZjZlXHU1MTllXHU1MWJjXHU1MWJlXHU1MjM1XHU1MjMyXHU1MjMzXHU1MjQ2XHU1MjMxXHU1MmJjXHU1MzBhXHU1MzBiXHU1MzNjXHU1MzkyXHU1Mzk0XHU1NDg3XHU1NDdmXHU1NDgxXHU1NDkxXHU1NDgyXHU1NDg4XHU1NDZiXHU1NDdhXHU1NDdl''@;'; put 'put ''XHU1NDY1XHU1NDZjXHU1NDc0XHU1NDY2XHU1NDhkXHU1NDZmXHU1NDYxXHU1NDYwXHU1NDk4XHU1NDYzXHU1NDY3XHU1NDY0XHU1NmY3XHU1NmY5XHU1NzZmXHU1NzcyXHU1NzZkXHU1NzZiXHU1NzcxXHU1NzcwXHU1Nzc2XHU1NzgwXHU1Nzc1XHU1NzdiXHU1NzczXHU1Nzc0XHU1NzYyIl0s''@;'; put 'put ''WyJjYzQwIiwiXHU1NzY4XHU1NzdkXHU1OTBjXHU1OTQ1XHU1OWI1XHU1OWJhXHU1OWNmXHU1OWNlXHU1OWIyXHU1OWNjXHU1OWMxXHU1OWI2XHU1OWJjXHU1OWMzXHU1OWQ2XHU1OWIxXHU1OWJkXHU1OWMwXHU1OWM4XHU1OWI0XHU1OWM3XHU1YjYyXHU1YjY1XHU1YjkzXHU1Yjk1XHU1YzQ0''@;'; put 'put ''XHU1YzQ3XHU1Y2FlXHU1Y2E0XHU1Y2EwXHU1Y2I1XHU1Y2FmXHU1Y2E4XHU1Y2FjXHU1YzlmXHU1Y2EzXHU1Y2FkXHU1Y2EyXHU1Y2FhXHU1Y2E3XHU1YzlkXHU1Y2E1XHU1Y2I2XHU1Y2IwXHU1Y2E2XHU1ZTE3XHU1ZTE0XHU1ZTE5XHU1ZjI4XHU1ZjIyXHU1ZjIzXHU1ZjI0XHU1ZjU0XHU1''@;'; put 'put ''ZjgyXHU1ZjdlXHU1ZjdkXHU1ZmRlXHU1ZmU1XHU2MDJkXHU2MDI2XHU2MDE5XHU2MDMyXHU2MDBiIl0sWyJjY2ExIiwiXHU2MDM0XHU2MDBhXHU2MDE3XHU2MDMzXHU2MDFhXHU2MDFlXHU2MDJjXHU2MDIyXHU2MDBkXHU2MDEwXHU2MDJlXHU2MDEzXHU2MDExXHU2MDBjXHU2MDA5XHU2MDFj''@;'; put 'put ''XHU2MjE0XHU2MjNkXHU2MmFkXHU2MmI0XHU2MmQxXHU2MmJlXHU2MmFhXHU2MmI2XHU2MmNhXHU2MmFlXHU2MmIzXHU2MmFmXHU2MmJiXHU2MmE5XHU2MmIwXHU2MmI4XHU2NTNkXHU2NWE4XHU2NWJiXHU2NjA5XHU2NWZjXHU2NjA0XHU2NjEyXHU2NjA4XHU2NWZiXHU2NjAzXHU2NjBiXHU2''@;'; put 'put ''NjBkXHU2NjA1XHU2NWZkXHU2NjExXHU2NjEwXHU2NmY2XHU2NzBhXHU2Nzg1XHU2NzZjXHU2NzhlXHU2NzkyXHU2Nzc2XHU2NzdiXHU2Nzk4XHU2Nzg2XHU2Nzg0XHU2Nzc0XHU2NzhkXHU2NzhjXHU2NzdhXHU2NzlmXHU2NzkxXHU2Nzk5XHU2NzgzXHU2NzdkXHU2NzgxXHU2Nzc4XHU2Nzc5''@;'; put 'put ''XHU2Nzk0XHU2YjI1XHU2YjgwXHU2YjdlXHU2YmRlXHU2YzFkXHU2YzkzXHU2Y2VjXHU2Y2ViXHU2Y2VlXHU2Y2Q5XHU2Y2I2XHU2Y2Q0XHU2Y2FkXHU2Y2U3XHU2Y2I3XHU2Y2QwXHU2Y2MyXHU2Y2JhXHU2Y2MzXHU2Y2M2XHU2Y2VkXHU2Y2YyIl0sWyJjZDQwIiwiXHU2Y2QyXHU2Y2RkXHU2''@;'; put 'put ''Y2I0XHU2YzhhXHU2YzlkXHU2YzgwXHU2Y2RlXHU2Y2MwXHU2ZDMwXHU2Y2NkXHU2Y2M3XHU2Y2IwXHU2Y2Y5XHU2Y2NmXHU2Y2U5XHU2Y2QxXHU3MDk0XHU3MDk4XHU3MDg1XHU3MDkzXHU3MDg2XHU3MDg0XHU3MDkxXHU3MDk2XHU3MDgyXHU3MDlhXHU3MDgzXHU3MjZhXHU3MmQ2XHU3MmNi''@;'; put 'put ''XHU3MmQ4XHU3MmM5XHU3MmRjXHU3MmQyXHU3MmQ0XHU3MmRhXHU3MmNjXHU3MmQxXHU3M2E0XHU3M2ExXHU3M2FkXHU3M2E2XHU3M2EyXHU3M2EwXHU3M2FjXHU3MzlkXHU3NGRkXHU3NGU4XHU3NTNmXHU3NTQwXHU3NTNlXHU3NThjXHU3NTk4XHU3NmFmXHU3NmYzXHU3NmYxXHU3NmYwXHU3''@;'; put 'put ''NmY1XHU3N2Y4XHU3N2ZjXHU3N2Y5XHU3N2ZiXHU3N2ZhIl0sWyJjZGExIiwiXHU3N2Y3XHU3OTQyXHU3OTNmXHU3OWM1XHU3YTc4XHU3YTdiXHU3YWZiXHU3Yzc1XHU3Y2ZkXHU4MDM1XHU4MDhmXHU4MGFlXHU4MGEzXHU4MGI4XHU4MGI1XHU4MGFkXHU4MjIwXHU4MmEwXHU4MmMwXHU4MmFi''@;'; put 'put ''XHU4MjlhXHU4Mjk4XHU4MjliXHU4MmI1XHU4MmE3XHU4MmFlXHU4MmJjXHU4MjllXHU4MmJhXHU4MmI0XHU4MmE4XHU4MmExXHU4MmE5XHU4MmMyXHU4MmE0XHU4MmMzXHU4MmI2XHU4MmEyXHU4NjcwXHU4NjZmXHU4NjZkXHU4NjZlXHU4YzU2XHU4ZmQyXHU4ZmNiXHU4ZmQzXHU4ZmNkXHU4''@;'; put 'put ''ZmQ2XHU4ZmQ1XHU4ZmQ3XHU5MGIyXHU5MGI0XHU5MGFmXHU5MGIzXHU5MGIwXHU5NjM5XHU5NjNkXHU5NjNjXHU5NjNhXHU5NjQzXHU0ZmNkXHU0ZmM1XHU0ZmQzXHU0ZmIyXHU0ZmM5XHU0ZmNiXHU0ZmMxXHU0ZmQ0XHU0ZmRjXHU0ZmQ5XHU0ZmJiXHU0ZmIzXHU0ZmRiXHU0ZmM3XHU0ZmQ2''@;'; put 'put ''XHU0ZmJhXHU0ZmMwXHU0ZmI5XHU0ZmVjXHU1MjQ0XHU1MjQ5XHU1MmMwXHU1MmMyXHU1MzNkXHU1MzdjXHU1Mzk3XHU1Mzk2XHU1Mzk5XHU1Mzk4XHU1NGJhXHU1NGExXHU1NGFkXHU1NGE1XHU1NGNmIl0sWyJjZTQwIiwiXHU1NGMzXHU4MzBkXHU1NGI3XHU1NGFlXHU1NGQ2XHU1NGI2XHU1''@;'; put 'put ''NGM1XHU1NGM2XHU1NGEwXHU1NDcwXHU1NGJjXHU1NGEyXHU1NGJlXHU1NDcyXHU1NGRlXHU1NGIwXHU1N2I1XHU1NzllXHU1NzlmXHU1N2E0XHU1NzhjXHU1Nzk3XHU1NzlkXHU1NzliXHU1Nzk0XHU1Nzk4XHU1NzhmXHU1Nzk5XHU1N2E1XHU1NzlhXHU1Nzk1XHU1OGY0XHU1OTBkXHU1OTUz''@;'; put 'put ''XHU1OWUxXHU1OWRlXHU1OWVlXHU1YTAwXHU1OWYxXHU1OWRkXHU1OWZhXHU1OWZkXHU1OWZjXHU1OWY2XHU1OWU0XHU1OWYyXHU1OWY3XHU1OWRiXHU1OWU5XHU1OWYzXHU1OWY1XHU1OWUwXHU1OWZlXHU1OWY0XHU1OWVkXHU1YmE4XHU1YzRjXHU1Y2QwXHU1Y2Q4XHU1Y2NjXHU1Y2Q3XHU1''@;'; put 'put ''Y2NiXHU1Y2RiIl0sWyJjZWExIiwiXHU1Y2RlXHU1Y2RhXHU1Y2M5XHU1Y2M3XHU1Y2NhXHU1Y2Q2XHU1Y2QzXHU1Y2Q0XHU1Y2NmXHU1Y2M4XHU1Y2M2XHU1Y2NlXHU1Y2RmXHU1Y2Y4XHU1ZGY5XHU1ZTIxXHU1ZTIyXHU1ZTIzXHU1ZTIwXHU1ZTI0XHU1ZWIwXHU1ZWE0XHU1ZWEyXHU1ZTli''@;'; put 'put ''XHU1ZWEzXHU1ZWE1XHU1ZjA3XHU1ZjJlXHU1ZjU2XHU1Zjg2XHU2MDM3XHU2MDM5XHU2MDU0XHU2MDcyXHU2MDVlXHU2MDQ1XHU2MDUzXHU2MDQ3XHU2MDQ5XHU2MDViXHU2MDRjXHU2MDQwXHU2MDQyXHU2MDVmXHU2MDI0XHU2MDQ0XHU2MDU4XHU2MDY2XHU2MDZlXHU2MjQyXHU2MjQzXHU2''@;'; put 'put ''MmNmXHU2MzBkXHU2MzBiXHU2MmY1XHU2MzBlXHU2MzAzXHU2MmViXHU2MmY5XHU2MzBmXHU2MzBjXHU2MmY4XHU2MmY2XHU2MzAwXHU2MzEzXHU2MzE0XHU2MmZhXHU2MzE1XHU2MmZiXHU2MmYwXHU2NTQxXHU2NTQzXHU2NWFhXHU2NWJmXHU2NjM2XHU2NjIxXHU2NjMyXHU2NjM1XHU2NjFj''@;'; put 'put ''XHU2NjI2XHU2NjIyXHU2NjMzXHU2NjJiXHU2NjNhXHU2NjFkXHU2NjM0XHU2NjM5XHU2NjJlXHU2NzBmXHU2NzEwXHU2N2MxXHU2N2YyXHU2N2M4XHU2N2JhIl0sWyJjZjQwIiwiXHU2N2RjXHU2N2JiXHU2N2Y4XHU2N2Q4XHU2N2MwXHU2N2I3XHU2N2M1XHU2N2ViXHU2N2U0XHU2N2RmXHU2''@;'; put 'put ''N2I1XHU2N2NkXHU2N2IzXHU2N2Y3XHU2N2Y2XHU2N2VlXHU2N2UzXHU2N2MyXHU2N2I5XHU2N2NlXHU2N2U3XHU2N2YwXHU2N2IyXHU2N2ZjXHU2N2M2XHU2N2VkXHU2N2NjXHU2N2FlXHU2N2U2XHU2N2RiXHU2N2ZhXHU2N2M5XHU2N2NhXHU2N2MzXHU2N2VhXHU2N2NiXHU2YjI4XHU2Yjgy''@;'; put 'put ''XHU2Yjg0XHU2YmI2XHU2YmQ2XHU2YmQ4XHU2YmUwXHU2YzIwXHU2YzIxXHU2ZDI4XHU2ZDM0XHU2ZDJkXHU2ZDFmXHU2ZDNjXHU2ZDNmXHU2ZDEyXHU2ZDBhXHU2Y2RhXHU2ZDMzXHU2ZDA0XHU2ZDE5XHU2ZDNhXHU2ZDFhXHU2ZDExXHU2ZDAwXHU2ZDFkXHU2ZDQyIl0sWyJjZmExIiwiXHU2''@;'; put 'put ''ZDAxXHU2ZDE4XHU2ZDM3XHU2ZDAzXHU2ZDBmXHU2ZDQwXHU2ZDA3XHU2ZDIwXHU2ZDJjXHU2ZDA4XHU2ZDIyXHU2ZDA5XHU2ZDEwXHU3MGI3XHU3MDlmXHU3MGJlXHU3MGIxXHU3MGIwXHU3MGExXHU3MGI0XHU3MGI1XHU3MGE5XHU3MjQxXHU3MjQ5XHU3MjRhXHU3MjZjXHU3MjcwXHU3Mjcz''@;'; put 'put ''XHU3MjZlXHU3MmNhXHU3MmU0XHU3MmU4XHU3MmViXHU3MmRmXHU3MmVhXHU3MmU2XHU3MmUzXHU3Mzg1XHU3M2NjXHU3M2MyXHU3M2M4XHU3M2M1XHU3M2I5XHU3M2I2XHU3M2I1XHU3M2I0XHU3M2ViXHU3M2JmXHU3M2M3XHU3M2JlXHU3M2MzXHU3M2M2XHU3M2I4XHU3M2NiXHU3NGVjXHU3''@;'; put 'put ''NGVlXHU3NTJlXHU3NTQ3XHU3NTQ4XHU3NWE3XHU3NWFhXHU3Njc5XHU3NmM0XHU3NzA4XHU3NzAzXHU3NzA0XHU3NzA1XHU3NzBhXHU3NmY3XHU3NmZiXHU3NmZhXHU3N2U3XHU3N2U4XHU3ODA2XHU3ODExXHU3ODEyXHU3ODA1XHU3ODEwXHU3ODBmXHU3ODBlXHU3ODA5XHU3ODAzXHU3ODEz''@;'; put 'put ''XHU3OTRhXHU3OTRjXHU3OTRiXHU3OTQ1XHU3OTQ0XHU3OWQ1XHU3OWNkXHU3OWNmXHU3OWQ2XHU3OWNlXHU3YTgwIl0sWyJkMDQwIiwiXHU3YTdlXHU3YWQxXHU3YjAwXHU3YjAxXHU3YzdhXHU3Yzc4XHU3Yzc5XHU3YzdmXHU3YzgwXHU3YzgxXHU3ZDAzXHU3ZDA4XHU3ZDAxXHU3ZjU4XHU3''@;'; put 'put ''ZjkxXHU3ZjhkXHU3ZmJlXHU4MDA3XHU4MDBlXHU4MDBmXHU4MDE0XHU4MDM3XHU4MGQ4XHU4MGM3XHU4MGUwXHU4MGQxXHU4MGM4XHU4MGMyXHU4MGQwXHU4MGM1XHU4MGUzXHU4MGQ5XHU4MGRjXHU4MGNhXHU4MGQ1XHU4MGM5XHU4MGNmXHU4MGQ3XHU4MGU2XHU4MGNkXHU4MWZmXHU4MjIx''@;'; put 'put ''XHU4Mjk0XHU4MmQ5XHU4MmZlXHU4MmY5XHU4MzA3XHU4MmU4XHU4MzAwXHU4MmQ1XHU4MzNhXHU4MmViXHU4MmQ2XHU4MmY0XHU4MmVjXHU4MmUxXHU4MmYyXHU4MmY1XHU4MzBjXHU4MmZiXHU4MmY2XHU4MmYwXHU4MmVhIl0sWyJkMGExIiwiXHU4MmU0XHU4MmUwXHU4MmZhXHU4MmYzXHU4''@;'; put 'put ''MmVkXHU4Njc3XHU4Njc0XHU4NjdjXHU4NjczXHU4ODQxXHU4ODRlXHU4ODY3XHU4ODZhXHU4ODY5XHU4OWQzXHU4YTA0XHU4YTA3XHU4ZDcyXHU4ZmUzXHU4ZmUxXHU4ZmVlXHU4ZmUwXHU5MGYxXHU5MGJkXHU5MGJmXHU5MGQ1XHU5MGM1XHU5MGJlXHU5MGM3XHU5MGNiXHU5MGM4XHU5MWQ0''@;'; put 'put ''XHU5MWQzXHU5NjU0XHU5NjRmXHU5NjUxXHU5NjUzXHU5NjRhXHU5NjRlXHU1MDFlXHU1MDA1XHU1MDA3XHU1MDEzXHU1MDIyXHU1MDMwXHU1MDFiXHU0ZmY1XHU0ZmY0XHU1MDMzXHU1MDM3XHU1MDJjXHU0ZmY2XHU0ZmY3XHU1MDE3XHU1MDFjXHU1MDIwXHU1MDI3XHU1MDM1XHU1MDJmXHU1''@;'; put 'put ''MDMxXHU1MDBlXHU1MTVhXHU1MTk0XHU1MTkzXHU1MWNhXHU1MWM0XHU1MWM1XHU1MWM4XHU1MWNlXHU1MjYxXHU1MjVhXHU1MjUyXHU1MjVlXHU1MjVmXHU1MjU1XHU1MjYyXHU1MmNkXHU1MzBlXHU1MzllXHU1NTI2XHU1NGUyXHU1NTE3XHU1NTEyXHU1NGU3XHU1NGYzXHU1NGU0XHU1NTFh''@;'; put 'put ''XHU1NGZmXHU1NTA0XHU1NTA4XHU1NGViXHU1NTExXHU1NTA1XHU1NGYxIl0sWyJkMTQwIiwiXHU1NTBhXHU1NGZiXHU1NGY3XHU1NGY4XHU1NGUwXHU1NTBlXHU1NTAzXHU1NTBiXHU1NzAxXHU1NzAyXHU1N2NjXHU1ODMyXHU1N2Q1XHU1N2QyXHU1N2JhXHU1N2M2XHU1N2JkXHU1N2JjXHU1''@;'; put 'put ''N2I4XHU1N2I2XHU1N2JmXHU1N2M3XHU1N2QwXHU1N2I5XHU1N2MxXHU1OTBlXHU1OTRhXHU1YTE5XHU1YTE2XHU1YTJkXHU1YTJlXHU1YTE1XHU1YTBmXHU1YTE3XHU1YTBhXHU1YTFlXHU1YTMzXHU1YjZjXHU1YmE3XHU1YmFkXHU1YmFjXHU1YzAzXHU1YzU2XHU1YzU0XHU1Y2VjXHU1Y2Zm''@;'; put 'put ''XHU1Y2VlXHU1Y2YxXHU1Y2Y3XHU1ZDAwXHU1Y2Y5XHU1ZTI5XHU1ZTI4XHU1ZWE4XHU1ZWFlXHU1ZWFhXHU1ZWFjXHU1ZjMzXHU1ZjMwXHU1ZjY3XHU2MDVkXHU2MDVhXHU2MDY3Il0sWyJkMWExIiwiXHU2MDQxXHU2MGEyXHU2MDg4XHU2MDgwXHU2MDkyXHU2MDgxXHU2MDlkXHU2MDgzXHU2''@;'; put 'put ''MDk1XHU2MDliXHU2MDk3XHU2MDg3XHU2MDljXHU2MDhlXHU2MjE5XHU2MjQ2XHU2MmYyXHU2MzEwXHU2MzU2XHU2MzJjXHU2MzQ0XHU2MzQ1XHU2MzM2XHU2MzQzXHU2M2U0XHU2MzM5XHU2MzRiXHU2MzRhXHU2MzNjXHU2MzI5XHU2MzQxXHU2MzM0XHU2MzU4XHU2MzU0XHU2MzU5XHU2MzJk''@;'; put 'put ''XHU2MzQ3XHU2MzMzXHU2MzVhXHU2MzUxXHU2MzM4XHU2MzU3XHU2MzQwXHU2MzQ4XHU2NTRhXHU2NTQ2XHU2NWM2XHU2NWMzXHU2NWM0XHU2NWMyXHU2NjRhXHU2NjVmXHU2NjQ3XHU2NjUxXHU2NzEyXHU2NzEzXHU2ODFmXHU2ODFhXHU2ODQ5XHU2ODMyXHU2ODMzXHU2ODNiXHU2ODRiXHU2''@;'; put 'put ''ODRmXHU2ODE2XHU2ODMxXHU2ODFjXHU2ODM1XHU2ODJiXHU2ODJkXHU2ODJmXHU2ODRlXHU2ODQ0XHU2ODM0XHU2ODFkXHU2ODEyXHU2ODE0XHU2ODI2XHU2ODI4XHU2ODJlXHU2ODRkXHU2ODNhXHU2ODI1XHU2ODIwXHU2YjJjXHU2YjJmXHU2YjJkXHU2YjMxXHU2YjM0XHU2YjZkXHU4MDgy''@;'; put 'put ''XHU2Yjg4XHU2YmU2XHU2YmU0Il0sWyJkMjQwIiwiXHU2YmU4XHU2YmUzXHU2YmUyXHU2YmU3XHU2YzI1XHU2ZDdhXHU2ZDYzXHU2ZDY0XHU2ZDc2XHU2ZDBkXHU2ZDYxXHU2ZDkyXHU2ZDU4XHU2ZDYyXHU2ZDZkXHU2ZDZmXHU2ZDkxXHU2ZDhkXHU2ZGVmXHU2ZDdmXHU2ZDg2XHU2ZDVlXHU2''@;'; put 'put ''ZDY3XHU2ZDYwXHU2ZDk3XHU2ZDcwXHU2ZDdjXHU2ZDVmXHU2ZDgyXHU2ZDk4XHU2ZDJmXHU2ZDY4XHU2ZDhiXHU2ZDdlXHU2ZDgwXHU2ZDg0XHU2ZDE2XHU2ZDgzXHU2ZDdiXHU2ZDdkXHU2ZDc1XHU2ZDkwXHU3MGRjXHU3MGQzXHU3MGQxXHU3MGRkXHU3MGNiXHU3ZjM5XHU3MGUyXHU3MGQ3''@;'; put 'put ''XHU3MGQyXHU3MGRlXHU3MGUwXHU3MGQ0XHU3MGNkXHU3MGM1XHU3MGM2XHU3MGM3XHU3MGRhXHU3MGNlXHU3MGUxXHU3MjQyXHU3Mjc4Il0sWyJkMmExIiwiXHU3Mjc3XHU3Mjc2XHU3MzAwXHU3MmZhXHU3MmY0XHU3MmZlXHU3MmY2XHU3MmYzXHU3MmZiXHU3MzAxXHU3M2QzXHU3M2Q5XHU3''@;'; put 'put ''M2U1XHU3M2Q2XHU3M2JjXHU3M2U3XHU3M2UzXHU3M2U5XHU3M2RjXHU3M2QyXHU3M2RiXHU3M2Q0XHU3M2RkXHU3M2RhXHU3M2Q3XHU3M2Q4XHU3M2U4XHU3NGRlXHU3NGRmXHU3NGY0XHU3NGY1XHU3NTIxXHU3NTViXHU3NTVmXHU3NWIwXHU3NWMxXHU3NWJiXHU3NWM0XHU3NWMwXHU3NWJm''@;'; put 'put ''XHU3NWI2XHU3NWJhXHU3NjhhXHU3NmM5XHU3NzFkXHU3NzFiXHU3NzEwXHU3NzEzXHU3NzEyXHU3NzIzXHU3NzExXHU3NzE1XHU3NzE5XHU3NzFhXHU3NzIyXHU3NzI3XHU3ODIzXHU3ODJjXHU3ODIyXHU3ODM1XHU3ODJmXHU3ODI4XHU3ODJlXHU3ODJiXHU3ODIxXHU3ODI5XHU3ODMzXHU3''@;'; put 'put ''ODJhXHU3ODMxXHU3OTU0XHU3OTViXHU3OTRmXHU3OTVjXHU3OTUzXHU3OTUyXHU3OTUxXHU3OWViXHU3OWVjXHU3OWUwXHU3OWVlXHU3OWVkXHU3OWVhXHU3OWRjXHU3OWRlXHU3OWRkXHU3YTg2XHU3YTg5XHU3YTg1XHU3YThiXHU3YThjXHU3YThhXHU3YTg3XHU3YWQ4XHU3YjEwIl0sWyJk''@;'; put 'put ''MzQwIiwiXHU3YjA0XHU3YjEzXHU3YjA1XHU3YjBmXHU3YjA4XHU3YjBhXHU3YjBlXHU3YjA5XHU3YjEyXHU3Yzg0XHU3YzkxXHU3YzhhXHU3YzhjXHU3Yzg4XHU3YzhkXHU3Yzg1XHU3ZDFlXHU3ZDFkXHU3ZDExXHU3ZDBlXHU3ZDE4XHU3ZDE2XHU3ZDEzXHU3ZDFmXHU3ZDEyXHU3ZDBmXHU3''@;'; put 'put ''ZDBjXHU3ZjVjXHU3ZjYxXHU3ZjVlXHU3ZjYwXHU3ZjVkXHU3ZjViXHU3Zjk2XHU3ZjkyXHU3ZmMzXHU3ZmMyXHU3ZmMwXHU4MDE2XHU4MDNlXHU4MDM5XHU4MGZhXHU4MGYyXHU4MGY5XHU4MGY1XHU4MTAxXHU4MGZiXHU4MTAwXHU4MjAxXHU4MjJmXHU4MjI1XHU4MzMzXHU4MzJkXHU4MzQ0''@;'; put 'put ''XHU4MzE5XHU4MzUxXHU4MzI1XHU4MzU2XHU4MzNmXHU4MzQxXHU4MzI2XHU4MzFjXHU4MzIyIl0sWyJkM2ExIiwiXHU4MzQyXHU4MzRlXHU4MzFiXHU4MzJhXHU4MzA4XHU4MzNjXHU4MzRkXHU4MzE2XHU4MzI0XHU4MzIwXHU4MzM3XHU4MzJmXHU4MzI5XHU4MzQ3XHU4MzQ1XHU4MzRjXHU4''@;'; put 'put ''MzUzXHU4MzFlXHU4MzJjXHU4MzRiXHU4MzI3XHU4MzQ4XHU4NjUzXHU4NjUyXHU4NmEyXHU4NmE4XHU4Njk2XHU4NjhkXHU4NjkxXHU4NjllXHU4Njg3XHU4Njk3XHU4Njg2XHU4NjhiXHU4NjlhXHU4Njg1XHU4NmE1XHU4Njk5XHU4NmExXHU4NmE3XHU4Njk1XHU4Njk4XHU4NjhlXHU4Njlk''@;'; put 'put ''XHU4NjkwXHU4Njk0XHU4ODQzXHU4ODQ0XHU4ODZkXHU4ODc1XHU4ODc2XHU4ODcyXHU4ODgwXHU4ODcxXHU4ODdmXHU4ODZmXHU4ODgzXHU4ODdlXHU4ODc0XHU4ODdjXHU4YTEyXHU4YzQ3XHU4YzU3XHU4YzdiXHU4Y2E0XHU4Y2EzXHU4ZDc2XHU4ZDc4XHU4ZGI1XHU4ZGI3XHU4ZGI2XHU4''@;'; put 'put ''ZWQxXHU4ZWQzXHU4ZmZlXHU4ZmY1XHU5MDAyXHU4ZmZmXHU4ZmZiXHU5MDA0XHU4ZmZjXHU4ZmY2XHU5MGQ2XHU5MGUwXHU5MGQ5XHU5MGRhXHU5MGUzXHU5MGRmXHU5MGU1XHU5MGQ4XHU5MGRiXHU5MGQ3XHU5MGRjXHU5MGU0XHU5MTUwIl0sWyJkNDQwIiwiXHU5MTRlXHU5MTRmXHU5MWQ1''@;'; put 'put ''XHU5MWUyXHU5MWRhXHU5NjVjXHU5NjVmXHU5NmJjXHU5OGUzXHU5YWRmXHU5YjJmXHU0ZTdmXHU1MDcwXHU1MDZhXHU1MDYxXHU1MDVlXHU1MDYwXHU1MDUzXHU1MDRiXHU1MDVkXHU1MDcyXHU1MDQ4XHU1MDRkXHU1MDQxXHU1MDViXHU1MDRhXHU1MDYyXHU1MDE1XHU1MDQ1XHU1MDVmXHU1''@;'; put 'put ''MDY5XHU1MDZiXHU1MDYzXHU1MDY0XHU1MDQ2XHU1MDQwXHU1MDZlXHU1MDczXHU1MDU3XHU1MDUxXHU1MWQwXHU1MjZiXHU1MjZkXHU1MjZjXHU1MjZlXHU1MmQ2XHU1MmQzXHU1MzJkXHU1MzljXHU1NTc1XHU1NTc2XHU1NTNjXHU1NTRkXHU1NTUwXHU1NTM0XHU1NTJhXHU1NTUxXHU1NTYy''@;'; put 'put ''XHU1NTM2XHU1NTM1XHU1NTMwXHU1NTUyXHU1NTQ1Il0sWyJkNGExIiwiXHU1NTBjXHU1NTMyXHU1NTY1XHU1NTRlXHU1NTM5XHU1NTQ4XHU1NTJkXHU1NTNiXHU1NTQwXHU1NTRiXHU1NzBhXHU1NzA3XHU1N2ZiXHU1ODE0XHU1N2UyXHU1N2Y2XHU1N2RjXHU1N2Y0XHU1ODAwXHU1N2VkXHU1''@;'; put 'put ''N2ZkXHU1ODA4XHU1N2Y4XHU1ODBiXHU1N2YzXHU1N2NmXHU1ODA3XHU1N2VlXHU1N2UzXHU1N2YyXHU1N2U1XHU1N2VjXHU1N2UxXHU1ODBlXHU1N2ZjXHU1ODEwXHU1N2U3XHU1ODAxXHU1ODBjXHU1N2YxXHU1N2U5XHU1N2YwXHU1ODBkXHU1ODA0XHU1OTVjXHU1YTYwXHU1YTU4XHU1YTU1''@;'; put 'put ''XHU1YTY3XHU1YTVlXHU1YTM4XHU1YTM1XHU1YTZkXHU1YTUwXHU1YTVmXHU1YTY1XHU1YTZjXHU1YTUzXHU1YTY0XHU1YTU3XHU1YTQzXHU1YTVkXHU1YTUyXHU1YTQ0XHU1YTViXHU1YTQ4XHU1YThlXHU1YTNlXHU1YTRkXHU1YTM5XHU1YTRjXHU1YTcwXHU1YTY5XHU1YTQ3XHU1YTUxXHU1''@;'; put 'put ''YTU2XHU1YTQyXHU1YTVjXHU1YjcyXHU1YjZlXHU1YmMxXHU1YmMwXHU1YzU5XHU1ZDFlXHU1ZDBiXHU1ZDFkXHU1ZDFhXHU1ZDIwXHU1ZDBjXHU1ZDI4XHU1ZDBkXHU1ZDI2XHU1ZDI1XHU1ZDBmIl0sWyJkNTQwIiwiXHU1ZDMwXHU1ZDEyXHU1ZDIzXHU1ZDFmXHU1ZDJlXHU1ZTNlXHU1ZTM0''@;'; put 'put ''XHU1ZWIxXHU1ZWI0XHU1ZWI5XHU1ZWIyXHU1ZWIzXHU1ZjM2XHU1ZjM4XHU1ZjliXHU1Zjk2XHU1ZjlmXHU2MDhhXHU2MDkwXHU2MDg2XHU2MGJlXHU2MGIwXHU2MGJhXHU2MGQzXHU2MGQ0XHU2MGNmXHU2MGU0XHU2MGQ5XHU2MGRkXHU2MGM4XHU2MGIxXHU2MGRiXHU2MGI3XHU2MGNhXHU2''@;'; put 'put ''MGJmXHU2MGMzXHU2MGNkXHU2MGMwXHU2MzMyXHU2MzY1XHU2MzhhXHU2MzgyXHU2MzdkXHU2M2JkXHU2MzllXHU2M2FkXHU2MzlkXHU2Mzk3XHU2M2FiXHU2MzhlXHU2MzZmXHU2Mzg3XHU2MzkwXHU2MzZlXHU2M2FmXHU2Mzc1XHU2MzljXHU2MzZkXHU2M2FlXHU2MzdjXHU2M2E0XHU2MzNi''@;'; put 'put ''XHU2MzlmIl0sWyJkNWExIiwiXHU2Mzc4XHU2Mzg1XHU2MzgxXHU2MzkxXHU2MzhkXHU2MzcwXHU2NTUzXHU2NWNkXHU2NjY1XHU2NjYxXHU2NjViXHU2NjU5XHU2NjVjXHU2NjYyXHU2NzE4XHU2ODc5XHU2ODg3XHU2ODkwXHU2ODljXHU2ODZkXHU2ODZlXHU2OGFlXHU2OGFiXHU2OTU2XHU2''@;'; put 'put ''ODZmXHU2OGEzXHU2OGFjXHU2OGE5XHU2ODc1XHU2ODc0XHU2OGIyXHU2ODhmXHU2ODc3XHU2ODkyXHU2ODdjXHU2ODZiXHU2ODcyXHU2OGFhXHU2ODgwXHU2ODcxXHU2ODdlXHU2ODliXHU2ODk2XHU2ODhiXHU2OGEwXHU2ODg5XHU2OGE0XHU2ODc4XHU2ODdiXHU2ODkxXHU2ODhjXHU2ODhh''@;'; put 'put ''XHU2ODdkXHU2YjM2XHU2YjMzXHU2YjM3XHU2YjM4XHU2YjkxXHU2YjhmXHU2YjhkXHU2YjhlXHU2YjhjXHU2YzJhXHU2ZGMwXHU2ZGFiXHU2ZGI0XHU2ZGIzXHU2ZTc0XHU2ZGFjXHU2ZGU5XHU2ZGUyXHU2ZGI3XHU2ZGY2XHU2ZGQ0XHU2ZTAwXHU2ZGM4XHU2ZGUwXHU2ZGRmXHU2ZGQ2XHU2''@;'; put 'put ''ZGJlXHU2ZGU1XHU2ZGRjXHU2ZGRkXHU2ZGRiXHU2ZGY0XHU2ZGNhXHU2ZGJkXHU2ZGVkXHU2ZGYwXHU2ZGJhXHU2ZGQ1XHU2ZGMyXHU2ZGNmXHU2ZGM5Il0sWyJkNjQwIiwiXHU2ZGQwXHU2ZGYyXHU2ZGQzXHU2ZGZkXHU2ZGQ3XHU2ZGNkXHU2ZGUzXHU2ZGJiXHU3MGZhXHU3MTBkXHU3MGY3''@;'; put 'put ''XHU3MTE3XHU3MGY0XHU3MTBjXHU3MGYwXHU3MTA0XHU3MGYzXHU3MTEwXHU3MGZjXHU3MGZmXHU3MTA2XHU3MTEzXHU3MTAwXHU3MGY4XHU3MGY2XHU3MTBiXHU3MTAyXHU3MTBlXHU3MjdlXHU3MjdiXHU3MjdjXHU3MjdmXHU3MzFkXHU3MzE3XHU3MzA3XHU3MzExXHU3MzE4XHU3MzBhXHU3''@;'; put 'put ''MzA4XHU3MmZmXHU3MzBmXHU3MzFlXHU3Mzg4XHU3M2Y2XHU3M2Y4XHU3M2Y1XHU3NDA0XHU3NDAxXHU3M2ZkXHU3NDA3XHU3NDAwXHU3M2ZhXHU3M2ZjXHU3M2ZmXHU3NDBjXHU3NDBiXHU3M2Y0XHU3NDA4XHU3NTY0XHU3NTYzXHU3NWNlXHU3NWQyXHU3NWNmIl0sWyJkNmExIiwiXHU3NWNi''@;'; put 'put ''XHU3NWNjXHU3NWQxXHU3NWQwXHU3NjhmXHU3Njg5XHU3NmQzXHU3NzM5XHU3NzJmXHU3NzJkXHU3NzMxXHU3NzMyXHU3NzM0XHU3NzMzXHU3NzNkXHU3NzI1XHU3NzNiXHU3NzM1XHU3ODQ4XHU3ODUyXHU3ODQ5XHU3ODRkXHU3ODRhXHU3ODRjXHU3ODI2XHU3ODQ1XHU3ODUwXHU3OTY0XHU3''@;'; put 'put ''OTY3XHU3OTY5XHU3OTZhXHU3OTYzXHU3OTZiXHU3OTYxXHU3OWJiXHU3OWZhXHU3OWY4XHU3OWY2XHU3OWY3XHU3YThmXHU3YTk0XHU3YTkwXHU3YjM1XHU3YjQ3XHU3YjM0XHU3YjI1XHU3YjMwXHU3YjIyXHU3YjI0XHU3YjMzXHU3YjE4XHU3YjJhXHU3YjFkXHU3YjMxXHU3YjJiXHU3YjJk''@;'; put 'put ''XHU3YjJmXHU3YjMyXHU3YjM4XHU3YjFhXHU3YjIzXHU3Yzk0XHU3Yzk4XHU3Yzk2XHU3Y2EzXHU3ZDM1XHU3ZDNkXHU3ZDM4XHU3ZDM2XHU3ZDNhXHU3ZDQ1XHU3ZDJjXHU3ZDI5XHU3ZDQxXHU3ZDQ3XHU3ZDNlXHU3ZDNmXHU3ZDRhXHU3ZDNiXHU3ZDI4XHU3ZjYzXHU3Zjk1XHU3ZjljXHU3''@;'; put 'put ''ZjlkXHU3ZjliXHU3ZmNhXHU3ZmNiXHU3ZmNkXHU3ZmQwXHU3ZmQxXHU3ZmM3XHU3ZmNmXHU3ZmM5XHU4MDFmIl0sWyJkNzQwIiwiXHU4MDFlXHU4MDFiXHU4MDQ3XHU4MDQzXHU4MDQ4XHU4MTE4XHU4MTI1XHU4MTE5XHU4MTFiXHU4MTJkXHU4MTFmXHU4MTJjXHU4MTFlXHU4MTIxXHU4MTE1''@;'; put 'put ''XHU4MTI3XHU4MTFkXHU4MTIyXHU4MjExXHU4MjM4XHU4MjMzXHU4MjNhXHU4MjM0XHU4MjMyXHU4Mjc0XHU4MzkwXHU4M2EzXHU4M2E4XHU4MzhkXHU4MzdhXHU4MzczXHU4M2E0XHU4Mzc0XHU4MzhmXHU4MzgxXHU4Mzk1XHU4Mzk5XHU4Mzc1XHU4Mzk0XHU4M2E5XHU4MzdkXHU4MzgzXHU4''@;'; put 'put ''MzhjXHU4MzlkXHU4MzliXHU4M2FhXHU4MzhiXHU4MzdlXHU4M2E1XHU4M2FmXHU4Mzg4XHU4Mzk3XHU4M2IwXHU4MzdmXHU4M2E2XHU4Mzg3XHU4M2FlXHU4Mzc2XHU4MzlhXHU4NjU5XHU4NjU2XHU4NmJmXHU4NmI3Il0sWyJkN2ExIiwiXHU4NmMyXHU4NmMxXHU4NmM1XHU4NmJhXHU4NmIw''@;'; put 'put ''XHU4NmM4XHU4NmI5XHU4NmIzXHU4NmI4XHU4NmNjXHU4NmI0XHU4NmJiXHU4NmJjXHU4NmMzXHU4NmJkXHU4NmJlXHU4ODUyXHU4ODg5XHU4ODk1XHU4OGE4XHU4OGEyXHU4OGFhXHU4ODlhXHU4ODkxXHU4OGExXHU4ODlmXHU4ODk4XHU4OGE3XHU4ODk5XHU4ODliXHU4ODk3XHU4OGE0XHU4''@;'; put 'put ''OGFjXHU4ODhjXHU4ODkzXHU4ODhlXHU4OTgyXHU4OWQ2XHU4OWQ5XHU4OWQ1XHU4YTMwXHU4YTI3XHU4YTJjXHU4YTFlXHU4YzM5XHU4YzNiXHU4YzVjXHU4YzVkXHU4YzdkXHU4Y2E1XHU4ZDdkXHU4ZDdiXHU4ZDc5XHU4ZGJjXHU4ZGMyXHU4ZGI5XHU4ZGJmXHU4ZGMxXHU4ZWQ4XHU4ZWRl''@;'; put 'put ''XHU4ZWRkXHU4ZWRjXHU4ZWQ3XHU4ZWUwXHU4ZWUxXHU5MDI0XHU5MDBiXHU5MDExXHU5MDFjXHU5MDBjXHU5MDIxXHU5MGVmXHU5MGVhXHU5MGYwXHU5MGY0XHU5MGYyXHU5MGYzXHU5MGQ0XHU5MGViXHU5MGVjXHU5MGU5XHU5MTU2XHU5MTU4XHU5MTVhXHU5MTUzXHU5MTU1XHU5MWVjXHU5''@;'; put 'put ''MWY0XHU5MWYxXHU5MWYzXHU5MWY4XHU5MWU0XHU5MWY5XHU5MWVhIl0sWyJkODQwIiwiXHU5MWViXHU5MWY3XHU5MWU4XHU5MWVlXHU5NTdhXHU5NTg2XHU5NTg4XHU5NjdjXHU5NjZkXHU5NjZiXHU5NjcxXHU5NjZmXHU5NmJmXHU5NzZhXHU5ODA0XHU5OGU1XHU5OTk3XHU1MDliXHU1MDk1''@;'; put 'put ''XHU1MDk0XHU1MDllXHU1MDhiXHU1MGEzXHU1MDgzXHU1MDhjXHU1MDhlXHU1MDlkXHU1MDY4XHU1MDljXHU1MDkyXHU1MDgyXHU1MDg3XHU1MTVmXHU1MWQ0XHU1MzEyXHU1MzExXHU1M2E0XHU1M2E3XHU1NTkxXHU1NWE4XHU1NWE1XHU1NWFkXHU1NTc3XHU1NjQ1XHU1NWEyXHU1NTkzXHU1''@;'; put 'put ''NTg4XHU1NThmXHU1NWI1XHU1NTgxXHU1NWEzXHU1NTkyXHU1NWE0XHU1NTdkXHU1NThjXHU1NWE2XHU1NTdmXHU1NTk1XHU1NWExXHU1NThlXHU1NzBjXHU1ODI5XHU1ODM3Il0sWyJkOGExIiwiXHU1ODE5XHU1ODFlXHU1ODI3XHU1ODIzXHU1ODI4XHU1N2Y1XHU1ODQ4XHU1ODI1XHU1ODFj''@;'; put 'put ''XHU1ODFiXHU1ODMzXHU1ODNmXHU1ODM2XHU1ODJlXHU1ODM5XHU1ODM4XHU1ODJkXHU1ODJjXHU1ODNiXHU1OTYxXHU1YWFmXHU1YTk0XHU1YTlmXHU1YTdhXHU1YWEyXHU1YTllXHU1YTc4XHU1YWE2XHU1YTdjXHU1YWE1XHU1YWFjXHU1YTk1XHU1YWFlXHU1YTM3XHU1YTg0XHU1YThhXHU1''@;'; put 'put ''YTk3XHU1YTgzXHU1YThiXHU1YWE5XHU1YTdiXHU1YTdkXHU1YThjXHU1YTljXHU1YThmXHU1YTkzXHU1YTlkXHU1YmVhXHU1YmNkXHU1YmNiXHU1YmQ0XHU1YmQxXHU1YmNhXHU1YmNlXHU1YzBjXHU1YzMwXHU1ZDM3XHU1ZDQzXHU1ZDZiXHU1ZDQxXHU1ZDRiXHU1ZDNmXHU1ZDM1XHU1ZDUx''@;'; put 'put ''XHU1ZDRlXHU1ZDU1XHU1ZDMzXHU1ZDNhXHU1ZDUyXHU1ZDNkXHU1ZDMxXHU1ZDU5XHU1ZDQyXHU1ZDM5XHU1ZDQ5XHU1ZDM4XHU1ZDNjXHU1ZDMyXHU1ZDM2XHU1ZDQwXHU1ZDQ1XHU1ZTQ0XHU1ZTQxXHU1ZjU4XHU1ZmE2XHU1ZmE1XHU1ZmFiXHU2MGM5XHU2MGI5XHU2MGNjXHU2MGUyXHU2''@;'; put 'put ''MGNlXHU2MGM0XHU2MTE0Il0sWyJkOTQwIiwiXHU2MGYyXHU2MTBhXHU2MTE2XHU2MTA1XHU2MGY1XHU2MTEzXHU2MGY4XHU2MGZjXHU2MGZlXHU2MGMxXHU2MTAzXHU2MTE4XHU2MTFkXHU2MTEwXHU2MGZmXHU2MTA0XHU2MTBiXHU2MjRhXHU2Mzk0XHU2M2IxXHU2M2IwXHU2M2NlXHU2M2U1''@;'; put 'put ''XHU2M2U4XHU2M2VmXHU2M2MzXHU2NDlkXHU2M2YzXHU2M2NhXHU2M2UwXHU2M2Y2XHU2M2Q1XHU2M2YyXHU2M2Y1XHU2NDYxXHU2M2RmXHU2M2JlXHU2M2RkXHU2M2RjXHU2M2M0XHU2M2Q4XHU2M2QzXHU2M2MyXHU2M2M3XHU2M2NjXHU2M2NiXHU2M2M4XHU2M2YwXHU2M2Q3XHU2M2Q5XHU2''@;'; put 'put ''NTMyXHU2NTY3XHU2NTZhXHU2NTY0XHU2NTVjXHU2NTY4XHU2NTY1XHU2NThjXHU2NTlkXHU2NTllXHU2NWFlXHU2NWQwXHU2NWQyIl0sWyJkOWExIiwiXHU2NjdjXHU2NjZjXHU2NjdiXHU2NjgwXHU2NjcxXHU2Njc5XHU2NjZhXHU2NjcyXHU2NzAxXHU2OTBjXHU2OGQzXHU2OTA0XHU2OGRj''@;'; put 'put ''XHU2OTJhXHU2OGVjXHU2OGVhXHU2OGYxXHU2OTBmXHU2OGQ2XHU2OGY3XHU2OGViXHU2OGU0XHU2OGY2XHU2OTEzXHU2OTEwXHU2OGYzXHU2OGUxXHU2OTA3XHU2OGNjXHU2OTA4XHU2OTcwXHU2OGI0XHU2OTExXHU2OGVmXHU2OGM2XHU2OTE0XHU2OGY4XHU2OGQwXHU2OGZkXHU2OGZjXHU2''@;'; put 'put ''OGU4XHU2OTBiXHU2OTBhXHU2OTE3XHU2OGNlXHU2OGM4XHU2OGRkXHU2OGRlXHU2OGU2XHU2OGY0XHU2OGQxXHU2OTA2XHU2OGQ0XHU2OGU5XHU2OTE1XHU2OTI1XHU2OGM3XHU2YjM5XHU2YjNiXHU2YjNmXHU2YjNjXHU2Yjk0XHU2Yjk3XHU2Yjk5XHU2Yjk1XHU2YmJkXHU2YmYwXHU2YmYy''@;'; put 'put ''XHU2YmYzXHU2YzMwXHU2ZGZjXHU2ZTQ2XHU2ZTQ3XHU2ZTFmXHU2ZTQ5XHU2ZTg4XHU2ZTNjXHU2ZTNkXHU2ZTQ1XHU2ZTYyXHU2ZTJiXHU2ZTNmXHU2ZTQxXHU2ZTVkXHU2ZTczXHU2ZTFjXHU2ZTMzXHU2ZTRiXHU2ZTQwXHU2ZTUxXHU2ZTNiXHU2ZTAzXHU2ZTJlXHU2ZTVlIl0sWyJkYTQw''@;'; put 'put ''IiwiXHU2ZTY4XHU2ZTVjXHU2ZTYxXHU2ZTMxXHU2ZTI4XHU2ZTYwXHU2ZTcxXHU2ZTZiXHU2ZTM5XHU2ZTIyXHU2ZTMwXHU2ZTUzXHU2ZTY1XHU2ZTI3XHU2ZTc4XHU2ZTY0XHU2ZTc3XHU2ZTU1XHU2ZTc5XHU2ZTUyXHU2ZTY2XHU2ZTM1XHU2ZTM2XHU2ZTVhXHU3MTIwXHU3MTFlXHU3MTJm''@;'; put 'put ''XHU3MGZiXHU3MTJlXHU3MTMxXHU3MTIzXHU3MTI1XHU3MTIyXHU3MTMyXHU3MTFmXHU3MTI4XHU3MTNhXHU3MTFiXHU3MjRiXHU3MjVhXHU3Mjg4XHU3Mjg5XHU3Mjg2XHU3Mjg1XHU3MjhiXHU3MzEyXHU3MzBiXHU3MzMwXHU3MzIyXHU3MzMxXHU3MzMzXHU3MzI3XHU3MzMyXHU3MzJkXHU3''@;'; put 'put ''MzI2XHU3MzIzXHU3MzM1XHU3MzBjXHU3NDJlXHU3NDJjXHU3NDMwXHU3NDJiXHU3NDE2Il0sWyJkYWExIiwiXHU3NDFhXHU3NDIxXHU3NDJkXHU3NDMxXHU3NDI0XHU3NDIzXHU3NDFkXHU3NDI5XHU3NDIwXHU3NDMyXHU3NGZiXHU3NTJmXHU3NTZmXHU3NTZjXHU3NWU3XHU3NWRhXHU3NWUx''@;'; put 'put ''XHU3NWU2XHU3NWRkXHU3NWRmXHU3NWU0XHU3NWQ3XHU3Njk1XHU3NjkyXHU3NmRhXHU3NzQ2XHU3NzQ3XHU3NzQ0XHU3NzRkXHU3NzQ1XHU3NzRhXHU3NzRlXHU3NzRiXHU3NzRjXHU3N2RlXHU3N2VjXHU3ODYwXHU3ODY0XHU3ODY1XHU3ODVjXHU3ODZkXHU3ODcxXHU3ODZhXHU3ODZlXHU3''@;'; put 'put ''ODcwXHU3ODY5XHU3ODY4XHU3ODVlXHU3ODYyXHU3OTc0XHU3OTczXHU3OTcyXHU3OTcwXHU3YTAyXHU3YTBhXHU3YTAzXHU3YTBjXHU3YTA0XHU3YTk5XHU3YWU2XHU3YWU0XHU3YjRhXHU3YjNiXHU3YjQ0XHU3YjQ4XHU3YjRjXHU3YjRlXHU3YjQwXHU3YjU4XHU3YjQ1XHU3Y2EyXHU3Yzll''@;'; put 'put ''XHU3Y2E4XHU3Y2ExXHU3ZDU4XHU3ZDZmXHU3ZDYzXHU3ZDUzXHU3ZDU2XHU3ZDY3XHU3ZDZhXHU3ZDRmXHU3ZDZkXHU3ZDVjXHU3ZDZiXHU3ZDUyXHU3ZDU0XHU3ZDY5XHU3ZDUxXHU3ZDVmXHU3ZDRlXHU3ZjNlXHU3ZjNmXHU3ZjY1Il0sWyJkYjQwIiwiXHU3ZjY2XHU3ZmEyXHU3ZmEwXHU3''@;'; put 'put ''ZmExXHU3ZmQ3XHU4MDUxXHU4MDRmXHU4MDUwXHU4MGZlXHU4MGQ0XHU4MTQzXHU4MTRhXHU4MTUyXHU4MTRmXHU4MTQ3XHU4MTNkXHU4MTRkXHU4MTNhXHU4MWU2XHU4MWVlXHU4MWY3XHU4MWY4XHU4MWY5XHU4MjA0XHU4MjNjXHU4MjNkXHU4MjNmXHU4Mjc1XHU4MzNiXHU4M2NmXHU4M2Y5''@;'; put 'put ''XHU4NDIzXHU4M2MwXHU4M2U4XHU4NDEyXHU4M2U3XHU4M2U0XHU4M2ZjXHU4M2Y2XHU4NDEwXHU4M2M2XHU4M2M4XHU4M2ViXHU4M2UzXHU4M2JmXHU4NDAxXHU4M2RkXHU4M2U1XHU4M2Q4XHU4M2ZmXHU4M2UxXHU4M2NiXHU4M2NlXHU4M2Q2XHU4M2Y1XHU4M2M5XHU4NDA5XHU4NDBmXHU4''@;'; put 'put ''M2RlXHU4NDExXHU4NDA2XHU4M2MyXHU4M2YzIl0sWyJkYmExIiwiXHU4M2Q1XHU4M2ZhXHU4M2M3XHU4M2QxXHU4M2VhXHU4NDEzXHU4M2MzXHU4M2VjXHU4M2VlXHU4M2M0XHU4M2ZiXHU4M2Q3XHU4M2UyXHU4NDFiXHU4M2RiXHU4M2ZlXHU4NmQ4XHU4NmUyXHU4NmU2XHU4NmQzXHU4NmUz''@;'; put 'put ''XHU4NmRhXHU4NmVhXHU4NmRkXHU4NmViXHU4NmRjXHU4NmVjXHU4NmU5XHU4NmQ3XHU4NmU4XHU4NmQxXHU4ODQ4XHU4ODU2XHU4ODU1XHU4OGJhXHU4OGQ3XHU4OGI5XHU4OGI4XHU4OGMwXHU4OGJlXHU4OGI2XHU4OGJjXHU4OGI3XHU4OGJkXHU4OGIyXHU4OTAxXHU4OGM5XHU4OTk1XHU4''@;'; put 'put ''OTk4XHU4OTk3XHU4OWRkXHU4OWRhXHU4OWRiXHU4YTRlXHU4YTRkXHU4YTM5XHU4YTU5XHU4YTQwXHU4YTU3XHU4YTU4XHU4YTQ0XHU4YTQ1XHU4YTUyXHU4YTQ4XHU4YTUxXHU4YTRhXHU4YTRjXHU4YTRmXHU4YzVmXHU4YzgxXHU4YzgwXHU4Y2JhXHU4Y2JlXHU4Y2IwXHU4Y2I5XHU4Y2I1''@;'; put 'put ''XHU4ZDg0XHU4ZDgwXHU4ZDg5XHU4ZGQ4XHU4ZGQzXHU4ZGNkXHU4ZGM3XHU4ZGQ2XHU4ZGRjXHU4ZGNmXHU4ZGQ1XHU4ZGQ5XHU4ZGM4XHU4ZGQ3XHU4ZGM1XHU4ZWVmXHU4ZWY3XHU4ZWZhIl0sWyJkYzQwIiwiXHU4ZWY5XHU4ZWU2XHU4ZWVlXHU4ZWU1XHU4ZWY1XHU4ZWU3XHU4ZWU4XHU4''@;'; put 'put ''ZWY2XHU4ZWViXHU4ZWYxXHU4ZWVjXHU4ZWY0XHU4ZWU5XHU5MDJkXHU5MDM0XHU5MDJmXHU5MTA2XHU5MTJjXHU5MTA0XHU5MGZmXHU5MGZjXHU5MTA4XHU5MGY5XHU5MGZiXHU5MTAxXHU5MTAwXHU5MTA3XHU5MTA1XHU5MTAzXHU5MTYxXHU5MTY0XHU5MTVmXHU5MTYyXHU5MTYwXHU5MjAx''@;'; put 'put ''XHU5MjBhXHU5MjI1XHU5MjAzXHU5MjFhXHU5MjI2XHU5MjBmXHU5MjBjXHU5MjAwXHU5MjEyXHU5MWZmXHU5MWZkXHU5MjA2XHU5MjA0XHU5MjI3XHU5MjAyXHU5MjFjXHU5MjI0XHU5MjE5XHU5MjE3XHU5MjA1XHU5MjE2XHU5NTdiXHU5NThkXHU5NThjXHU5NTkwXHU5Njg3XHU5NjdlXHU5''@;'; put 'put ''Njg4Il0sWyJkY2ExIiwiXHU5Njg5XHU5NjgzXHU5NjgwXHU5NmMyXHU5NmM4XHU5NmMzXHU5NmYxXHU5NmYwXHU5NzZjXHU5NzcwXHU5NzZlXHU5ODA3XHU5OGE5XHU5OGViXHU5Y2U2XHU5ZWY5XHU0ZTgzXHU0ZTg0XHU0ZWI2XHU1MGJkXHU1MGJmXHU1MGM2XHU1MGFlXHU1MGM0XHU1MGNh''@;'; put 'put ''XHU1MGI0XHU1MGM4XHU1MGMyXHU1MGIwXHU1MGMxXHU1MGJhXHU1MGIxXHU1MGNiXHU1MGM5XHU1MGI2XHU1MGI4XHU1MWQ3XHU1MjdhXHU1Mjc4XHU1MjdiXHU1MjdjXHU1NWMzXHU1NWRiXHU1NWNjXHU1NWQwXHU1NWNiXHU1NWNhXHU1NWRkXHU1NWMwXHU1NWQ0XHU1NWM0XHU1NWU5XHU1''@;'; put 'put ''NWJmXHU1NWQyXHU1NThkXHU1NWNmXHU1NWQ1XHU1NWUyXHU1NWQ2XHU1NWM4XHU1NWYyXHU1NWNkXHU1NWQ5XHU1NWMyXHU1NzE0XHU1ODUzXHU1ODY4XHU1ODY0XHU1ODRmXHU1ODRkXHU1ODQ5XHU1ODZmXHU1ODU1XHU1ODRlXHU1ODVkXHU1ODU5XHU1ODY1XHU1ODViXHU1ODNkXHU1ODYz''@;'; put 'put ''XHU1ODcxXHU1OGZjXHU1YWM3XHU1YWM0XHU1YWNiXHU1YWJhXHU1YWI4XHU1YWIxXHU1YWI1XHU1YWIwXHU1YWJmXHU1YWM4XHU1YWJiXHU1YWM2Il0sWyJkZDQwIiwiXHU1YWI3XHU1YWMwXHU1YWNhXHU1YWI0XHU1YWI2XHU1YWNkXHU1YWI5XHU1YTkwXHU1YmQ2XHU1YmQ4XHU1YmQ5XHU1''@;'; put 'put ''YzFmXHU1YzMzXHU1ZDcxXHU1ZDYzXHU1ZDRhXHU1ZDY1XHU1ZDcyXHU1ZDZjXHU1ZDVlXHU1ZDY4XHU1ZDY3XHU1ZDYyXHU1ZGYwXHU1ZTRmXHU1ZTRlXHU1ZTRhXHU1ZTRkXHU1ZTRiXHU1ZWM1XHU1ZWNjXHU1ZWM2XHU1ZWNiXHU1ZWM3XHU1ZjQwXHU1ZmFmXHU1ZmFkXHU2MGY3XHU2MTQ5''@;'; put 'put ''XHU2MTRhXHU2MTJiXHU2MTQ1XHU2MTM2XHU2MTMyXHU2MTJlXHU2MTQ2XHU2MTJmXHU2MTRmXHU2MTI5XHU2MTQwXHU2MjIwXHU5MTY4XHU2MjIzXHU2MjI1XHU2MjI0XHU2M2M1XHU2M2YxXHU2M2ViXHU2NDEwXHU2NDEyXHU2NDA5XHU2NDIwXHU2NDI0Il0sWyJkZGExIiwiXHU2NDMzXHU2''@;'; put 'put ''NDQzXHU2NDFmXHU2NDE1XHU2NDE4XHU2NDM5XHU2NDM3XHU2NDIyXHU2NDIzXHU2NDBjXHU2NDI2XHU2NDMwXHU2NDI4XHU2NDQxXHU2NDM1XHU2NDJmXHU2NDBhXHU2NDFhXHU2NDQwXHU2NDI1XHU2NDI3XHU2NDBiXHU2M2U3XHU2NDFiXHU2NDJlXHU2NDIxXHU2NDBlXHU2NTZmXHU2NTky''@;'; put 'put ''XHU2NWQzXHU2Njg2XHU2NjhjXHU2Njk1XHU2NjkwXHU2NjhiXHU2NjhhXHU2Njk5XHU2Njk0XHU2Njc4XHU2NzIwXHU2OTY2XHU2OTVmXHU2OTM4XHU2OTRlXHU2OTYyXHU2OTcxXHU2OTNmXHU2OTQ1XHU2OTZhXHU2OTM5XHU2OTQyXHU2OTU3XHU2OTU5XHU2OTdhXHU2OTQ4XHU2OTQ5XHU2''@;'; put 'put ''OTM1XHU2OTZjXHU2OTMzXHU2OTNkXHU2OTY1XHU2OGYwXHU2OTc4XHU2OTM0XHU2OTY5XHU2OTQwXHU2OTZmXHU2OTQ0XHU2OTc2XHU2OTU4XHU2OTQxXHU2OTc0XHU2OTRjXHU2OTNiXHU2OTRiXHU2OTM3XHU2OTVjXHU2OTRmXHU2OTUxXHU2OTMyXHU2OTUyXHU2OTJmXHU2OTdiXHU2OTNj''@;'; put 'put ''XHU2YjQ2XHU2YjQ1XHU2YjQzXHU2YjQyXHU2YjQ4XHU2YjQxXHU2YjliXHVmYTBkXHU2YmZiXHU2YmZjIl0sWyJkZTQwIiwiXHU2YmY5XHU2YmY3XHU2YmY4XHU2ZTliXHU2ZWQ2XHU2ZWM4XHU2ZThmXHU2ZWMwXHU2ZTlmXHU2ZTkzXHU2ZTk0XHU2ZWEwXHU2ZWIxXHU2ZWI5XHU2ZWM2XHU2''@;'; put 'put ''ZWQyXHU2ZWJkXHU2ZWMxXHU2ZTllXHU2ZWM5XHU2ZWI3XHU2ZWIwXHU2ZWNkXHU2ZWE2XHU2ZWNmXHU2ZWIyXHU2ZWJlXHU2ZWMzXHU2ZWRjXHU2ZWQ4XHU2ZTk5XHU2ZTkyXHU2ZThlXHU2ZThkXHU2ZWE0XHU2ZWExXHU2ZWJmXHU2ZWIzXHU2ZWQwXHU2ZWNhXHU2ZTk3XHU2ZWFlXHU2ZWEz''@;'; put 'put ''XHU3MTQ3XHU3MTU0XHU3MTUyXHU3MTYzXHU3MTYwXHU3MTQxXHU3MTVkXHU3MTYyXHU3MTcyXHU3MTc4XHU3MTZhXHU3MTYxXHU3MTQyXHU3MTU4XHU3MTQzXHU3MTRiXHU3MTcwXHU3MTVmXHU3MTUwXHU3MTUzIl0sWyJkZWExIiwiXHU3MTQ0XHU3MTRkXHU3MTVhXHU3MjRmXHU3MjhkXHU3''@;'; put 'put ''MjhjXHU3MjkxXHU3MjkwXHU3MjhlXHU3MzNjXHU3MzQyXHU3MzNiXHU3MzNhXHU3MzQwXHU3MzRhXHU3MzQ5XHU3NDQ0XHU3NDRhXHU3NDRiXHU3NDUyXHU3NDUxXHU3NDU3XHU3NDQwXHU3NDRmXHU3NDUwXHU3NDRlXHU3NDQyXHU3NDQ2XHU3NDRkXHU3NDU0XHU3NGUxXHU3NGZmXHU3NGZl''@;'; put 'put ''XHU3NGZkXHU3NTFkXHU3NTc5XHU3NTc3XHU2OTgzXHU3NWVmXHU3NjBmXHU3NjAzXHU3NWY3XHU3NWZlXHU3NWZjXHU3NWY5XHU3NWY4XHU3NjEwXHU3NWZiXHU3NWY2XHU3NWVkXHU3NWY1XHU3NWZkXHU3Njk5XHU3NmI1XHU3NmRkXHU3NzU1XHU3NzVmXHU3NzYwXHU3NzUyXHU3NzU2XHU3''@;'; put 'put ''NzVhXHU3NzY5XHU3NzY3XHU3NzU0XHU3NzU5XHU3NzZkXHU3N2UwXHU3ODg3XHU3ODlhXHU3ODk0XHU3ODhmXHU3ODg0XHU3ODk1XHU3ODg1XHU3ODg2XHU3OGExXHU3ODgzXHU3ODc5XHU3ODk5XHU3ODgwXHU3ODk2XHU3ODdiXHU3OTdjXHU3OTgyXHU3OTdkXHU3OTc5XHU3YTExXHU3YTE4''@;'; put 'put ''XHU3YTE5XHU3YTEyXHU3YTE3XHU3YTE1XHU3YTIyXHU3YTEzIl0sWyJkZjQwIiwiXHU3YTFiXHU3YTEwXHU3YWEzXHU3YWEyXHU3YTllXHU3YWViXHU3YjY2XHU3YjY0XHU3YjZkXHU3Yjc0XHU3YjY5XHU3YjcyXHU3YjY1XHU3YjczXHU3YjcxXHU3YjcwXHU3YjYxXHU3Yjc4XHU3Yjc2XHU3''@;'; put 'put ''YjYzXHU3Y2IyXHU3Y2I0XHU3Y2FmXHU3ZDg4XHU3ZDg2XHU3ZDgwXHU3ZDhkXHU3ZDdmXHU3ZDg1XHU3ZDdhXHU3ZDhlXHU3ZDdiXHU3ZDgzXHU3ZDdjXHU3ZDhjXHU3ZDk0XHU3ZDg0XHU3ZDdkXHU3ZDkyXHU3ZjZkXHU3ZjZiXHU3ZjY3XHU3ZjY4XHU3ZjZjXHU3ZmE2XHU3ZmE1XHU3ZmE3''@;'; put 'put ''XHU3ZmRiXHU3ZmRjXHU4MDIxXHU4MTY0XHU4MTYwXHU4MTc3XHU4MTVjXHU4MTY5XHU4MTViXHU4MTYyXHU4MTcyXHU2NzIxXHU4MTVlXHU4MTc2XHU4MTY3XHU4MTZmIl0sWyJkZmExIiwiXHU4MTQ0XHU4MTYxXHU4MjFkXHU4MjQ5XHU4MjQ0XHU4MjQwXHU4MjQyXHU4MjQ1XHU4NGYxXHU4''@;'; put 'put ''NDNmXHU4NDU2XHU4NDc2XHU4NDc5XHU4NDhmXHU4NDhkXHU4NDY1XHU4NDUxXHU4NDQwXHU4NDg2XHU4NDY3XHU4NDMwXHU4NDRkXHU4NDdkXHU4NDVhXHU4NDU5XHU4NDc0XHU4NDczXHU4NDVkXHU4NTA3XHU4NDVlXHU4NDM3XHU4NDNhXHU4NDM0XHU4NDdhXHU4NDQzXHU4NDc4XHU4NDMy''@;'; put 'put ''XHU4NDQ1XHU4NDI5XHU4M2Q5XHU4NDRiXHU4NDJmXHU4NDQyXHU4NDJkXHU4NDVmXHU4NDcwXHU4NDM5XHU4NDRlXHU4NDRjXHU4NDUyXHU4NDZmXHU4NGM1XHU4NDhlXHU4NDNiXHU4NDQ3XHU4NDM2XHU4NDMzXHU4NDY4XHU4NDdlXHU4NDQ0XHU4NDJiXHU4NDYwXHU4NDU0XHU4NDZlXHU4''@;'; put 'put ''NDUwXHU4NzBiXHU4NzA0XHU4NmY3XHU4NzBjXHU4NmZhXHU4NmQ2XHU4NmY1XHU4NzRkXHU4NmY4XHU4NzBlXHU4NzA5XHU4NzAxXHU4NmY2XHU4NzBkXHU4NzA1XHU4OGQ2XHU4OGNiXHU4OGNkXHU4OGNlXHU4OGRlXHU4OGRiXHU4OGRhXHU4OGNjXHU4OGQwXHU4OTg1XHU4OTliXHU4OWRm''@;'; put 'put ''XHU4OWU1XHU4OWU0Il0sWyJlMDQwIiwiXHU4OWUxXHU4OWUwXHU4OWUyXHU4OWRjXHU4OWU2XHU4YTc2XHU4YTg2XHU4YTdmXHU4YTYxXHU4YTNmXHU4YTc3XHU4YTgyXHU4YTg0XHU4YTc1XHU4YTgzXHU4YTgxXHU4YTc0XHU4YTdhXHU4YzNjXHU4YzRiXHU4YzRhXHU4YzY1XHU4YzY0XHU4''@;'; put 'put ''YzY2XHU4Yzg2XHU4Yzg0XHU4Yzg1XHU4Y2NjXHU4ZDY4XHU4ZDY5XHU4ZDkxXHU4ZDhjXHU4ZDhlXHU4ZDhmXHU4ZDhkXHU4ZDkzXHU4ZDk0XHU4ZDkwXHU4ZDkyXHU4ZGYwXHU4ZGUwXHU4ZGVjXHU4ZGYxXHU4ZGVlXHU4ZGQwXHU4ZGU5XHU4ZGUzXHU4ZGUyXHU4ZGU3XHU4ZGYyXHU4ZGVi''@;'; put 'put ''XHU4ZGY0XHU4ZjA2XHU4ZWZmXHU4ZjAxXHU4ZjAwXHU4ZjA1XHU4ZjA3XHU4ZjA4XHU4ZjAyXHU4ZjBiXHU5MDUyXHU5MDNmIl0sWyJlMGExIiwiXHU5MDQ0XHU5MDQ5XHU5MDNkXHU5MTEwXHU5MTBkXHU5MTBmXHU5MTExXHU5MTE2XHU5MTE0XHU5MTBiXHU5MTBlXHU5MTZlXHU5MTZmXHU5''@;'; put 'put ''MjQ4XHU5MjUyXHU5MjMwXHU5MjNhXHU5MjY2XHU5MjMzXHU5MjY1XHU5MjVlXHU5MjgzXHU5MjJlXHU5MjRhXHU5MjQ2XHU5MjZkXHU5MjZjXHU5MjRmXHU5MjYwXHU5MjY3XHU5MjZmXHU5MjM2XHU5MjYxXHU5MjcwXHU5MjMxXHU5MjU0XHU5MjYzXHU5MjUwXHU5MjcyXHU5MjRlXHU5MjUz''@;'; put 'put ''XHU5MjRjXHU5MjU2XHU5MjMyXHU5NTlmXHU5NTljXHU5NTllXHU5NTliXHU5NjkyXHU5NjkzXHU5NjkxXHU5Njk3XHU5NmNlXHU5NmZhXHU5NmZkXHU5NmY4XHU5NmY1XHU5NzczXHU5Nzc3XHU5Nzc4XHU5NzcyXHU5ODBmXHU5ODBkXHU5ODBlXHU5OGFjXHU5OGY2XHU5OGY5XHU5OWFmXHU5''@;'; put 'put ''OWIyXHU5OWIwXHU5OWI1XHU5YWFkXHU5YWFiXHU5YjViXHU5Y2VhXHU5Y2VkXHU5Y2U3XHU5ZTgwXHU5ZWZkXHU1MGU2XHU1MGQ0XHU1MGQ3XHU1MGU4XHU1MGYzXHU1MGRiXHU1MGVhXHU1MGRkXHU1MGU0XHU1MGQzXHU1MGVjXHU1MGYwXHU1MGVmXHU1MGUzXHU1MGUwIl0sWyJlMTQwIiwi''@;'; put 'put ''XHU1MWQ4XHU1MjgwXHU1MjgxXHU1MmU5XHU1MmViXHU1MzMwXHU1M2FjXHU1NjI3XHU1NjE1XHU1NjBjXHU1NjEyXHU1NWZjXHU1NjBmXHU1NjFjXHU1NjAxXHU1NjEzXHU1NjAyXHU1NWZhXHU1NjFkXHU1NjA0XHU1NWZmXHU1NWY5XHU1ODg5XHU1ODdjXHU1ODkwXHU1ODk4XHU1ODg2XHU1''@;'; put 'put ''ODgxXHU1ODdmXHU1ODc0XHU1ODhiXHU1ODdhXHU1ODg3XHU1ODkxXHU1ODhlXHU1ODc2XHU1ODgyXHU1ODg4XHU1ODdiXHU1ODk0XHU1ODhmXHU1OGZlXHU1OTZiXHU1YWRjXHU1YWVlXHU1YWU1XHU1YWQ1XHU1YWVhXHU1YWRhXHU1YWVkXHU1YWViXHU1YWYzXHU1YWUyXHU1YWUwXHU1YWRi''@;'; put 'put ''XHU1YWVjXHU1YWRlXHU1YWRkXHU1YWQ5XHU1YWU4XHU1YWRmXHU1Yjc3XHU1YmUwIl0sWyJlMWExIiwiXHU1YmUzXHU1YzYzXHU1ZDgyXHU1ZDgwXHU1ZDdkXHU1ZDg2XHU1ZDdhXHU1ZDgxXHU1ZDc3XHU1ZDhhXHU1ZDg5XHU1ZDg4XHU1ZDdlXHU1ZDdjXHU1ZDhkXHU1ZDc5XHU1ZDdmXHU1''@;'; put 'put ''ZTU4XHU1ZTU5XHU1ZTUzXHU1ZWQ4XHU1ZWQxXHU1ZWQ3XHU1ZWNlXHU1ZWRjXHU1ZWQ1XHU1ZWQ5XHU1ZWQyXHU1ZWQ0XHU1ZjQ0XHU1ZjQzXHU1ZjZmXHU1ZmI2XHU2MTJjXHU2MTI4XHU2MTQxXHU2MTVlXHU2MTcxXHU2MTczXHU2MTUyXHU2MTUzXHU2MTcyXHU2MTZjXHU2MTgwXHU2MTc0''@;'; put 'put ''XHU2MTU0XHU2MTdhXHU2MTViXHU2MTY1XHU2MTNiXHU2MTZhXHU2MTYxXHU2MTU2XHU2MjI5XHU2MjI3XHU2MjJiXHU2NDJiXHU2NDRkXHU2NDViXHU2NDVkXHU2NDc0XHU2NDc2XHU2NDcyXHU2NDczXHU2NDdkXHU2NDc1XHU2NDY2XHU2NGE2XHU2NDRlXHU2NDgyXHU2NDVlXHU2NDVjXHU2''@;'; put 'put ''NDRiXHU2NDUzXHU2NDYwXHU2NDUwXHU2NDdmXHU2NDNmXHU2NDZjXHU2NDZiXHU2NDU5XHU2NDY1XHU2NDc3XHU2NTczXHU2NWEwXHU2NmExXHU2NmEwXHU2NjlmXHU2NzA1XHU2NzA0XHU2NzIyXHU2OWIxXHU2OWI2XHU2OWM5Il0sWyJlMjQwIiwiXHU2OWEwXHU2OWNlXHU2OTk2XHU2OWIw''@;'; put 'put ''XHU2OWFjXHU2OWJjXHU2OTkxXHU2OTk5XHU2OThlXHU2OWE3XHU2OThkXHU2OWE5XHU2OWJlXHU2OWFmXHU2OWJmXHU2OWM0XHU2OWJkXHU2OWE0XHU2OWQ0XHU2OWI5XHU2OWNhXHU2OTlhXHU2OWNmXHU2OWIzXHU2OTkzXHU2OWFhXHU2OWExXHU2OTllXHU2OWQ5XHU2OTk3XHU2OTkwXHU2''@;'; put 'put ''OWMyXHU2OWI1XHU2OWE1XHU2OWM2XHU2YjRhXHU2YjRkXHU2YjRiXHU2YjllXHU2YjlmXHU2YmEwXHU2YmMzXHU2YmM0XHU2YmZlXHU2ZWNlXHU2ZWY1XHU2ZWYxXHU2ZjAzXHU2ZjI1XHU2ZWY4XHU2ZjM3XHU2ZWZiXHU2ZjJlXHU2ZjA5XHU2ZjRlXHU2ZjE5XHU2ZjFhXHU2ZjI3XHU2ZjE4''@;'; put 'put ''XHU2ZjNiXHU2ZjEyXHU2ZWVkXHU2ZjBhIl0sWyJlMmExIiwiXHU2ZjM2XHU2ZjczXHU2ZWY5XHU2ZWVlXHU2ZjJkXHU2ZjQwXHU2ZjMwXHU2ZjNjXHU2ZjM1XHU2ZWViXHU2ZjA3XHU2ZjBlXHU2ZjQzXHU2ZjA1XHU2ZWZkXHU2ZWY2XHU2ZjM5XHU2ZjFjXHU2ZWZjXHU2ZjNhXHU2ZjFmXHU2''@;'; put 'put ''ZjBkXHU2ZjFlXHU2ZjA4XHU2ZjIxXHU3MTg3XHU3MTkwXHU3MTg5XHU3MTgwXHU3MTg1XHU3MTgyXHU3MThmXHU3MTdiXHU3MTg2XHU3MTgxXHU3MTk3XHU3MjQ0XHU3MjUzXHU3Mjk3XHU3Mjk1XHU3MjkzXHU3MzQzXHU3MzRkXHU3MzUxXHU3MzRjXHU3NDYyXHU3NDczXHU3NDcxXHU3NDc1''@;'; put 'put ''XHU3NDcyXHU3NDY3XHU3NDZlXHU3NTAwXHU3NTAyXHU3NTAzXHU3NTdkXHU3NTkwXHU3NjE2XHU3NjA4XHU3NjBjXHU3NjE1XHU3NjExXHU3NjBhXHU3NjE0XHU3NmI4XHU3NzgxXHU3NzdjXHU3Nzg1XHU3NzgyXHU3NzZlXHU3NzgwXHU3NzZmXHU3NzdlXHU3NzgzXHU3OGIyXHU3OGFhXHU3''@;'; put 'put ''OGI0XHU3OGFkXHU3OGE4XHU3ODdlXHU3OGFiXHU3ODllXHU3OGE1XHU3OGEwXHU3OGFjXHU3OGEyXHU3OGE0XHU3OTk4XHU3OThhXHU3OThiXHU3OTk2XHU3OTk1XHU3OTk0XHU3OTkzIl0sWyJlMzQwIiwiXHU3OTk3XHU3OTg4XHU3OTkyXHU3OTkwXHU3YTJiXHU3YTRhXHU3YTMwXHU3YTJm''@;'; put 'put ''XHU3YTI4XHU3YTI2XHU3YWE4XHU3YWFiXHU3YWFjXHU3YWVlXHU3Yjg4XHU3YjljXHU3YjhhXHU3YjkxXHU3YjkwXHU3Yjk2XHU3YjhkXHU3YjhjXHU3YjliXHU3YjhlXHU3Yjg1XHU3Yjk4XHU1Mjg0XHU3Yjk5XHU3YmE0XHU3YjgyXHU3Y2JiXHU3Y2JmXHU3Y2JjXHU3Y2JhXHU3ZGE3XHU3''@;'; put 'put ''ZGI3XHU3ZGMyXHU3ZGEzXHU3ZGFhXHU3ZGMxXHU3ZGMwXHU3ZGM1XHU3ZDlkXHU3ZGNlXHU3ZGM0XHU3ZGM2XHU3ZGNiXHU3ZGNjXHU3ZGFmXHU3ZGI5XHU3ZDk2XHU3ZGJjXHU3ZDlmXHU3ZGE2XHU3ZGFlXHU3ZGE5XHU3ZGExXHU3ZGM5XHU3ZjczXHU3ZmUyXHU3ZmUzXHU3ZmU1XHU3ZmRl''@;'; put 'put ''Il0sWyJlM2ExIiwiXHU4MDI0XHU4MDVkXHU4MDVjXHU4MTg5XHU4MTg2XHU4MTgzXHU4MTg3XHU4MThkXHU4MThjXHU4MThiXHU4MjE1XHU4NDk3XHU4NGE0XHU4NGExXHU4NDlmXHU4NGJhXHU4NGNlXHU4NGMyXHU4NGFjXHU4NGFlXHU4NGFiXHU4NGI5XHU4NGI0XHU4NGMxXHU4NGNkXHU4''@;'; put 'put ''NGFhXHU4NDlhXHU4NGIxXHU4NGQwXHU4NDlkXHU4NGE3XHU4NGJiXHU4NGEyXHU4NDk0XHU4NGM3XHU4NGNjXHU4NDliXHU4NGE5XHU4NGFmXHU4NGE4XHU4NGQ2XHU4NDk4XHU4NGI2XHU4NGNmXHU4NGEwXHU4NGQ3XHU4NGQ0XHU4NGQyXHU4NGRiXHU4NGIwXHU4NDkxXHU4NjYxXHU4NzMz''@;'; put 'put ''XHU4NzIzXHU4NzI4XHU4NzZiXHU4NzQwXHU4NzJlXHU4NzFlXHU4NzIxXHU4NzE5XHU4NzFiXHU4NzQzXHU4NzJjXHU4NzQxXHU4NzNlXHU4NzQ2XHU4NzIwXHU4NzMyXHU4NzJhXHU4NzJkXHU4NzNjXHU4NzEyXHU4NzNhXHU4NzMxXHU4NzM1XHU4NzQyXHU4NzI2XHU4NzI3XHU4NzM4XHU4''@;'; put 'put ''NzI0XHU4NzFhXHU4NzMwXHU4NzExXHU4OGY3XHU4OGU3XHU4OGYxXHU4OGYyXHU4OGZhXHU4OGZlXHU4OGVlXHU4OGZjXHU4OGY2XHU4OGZiIl0sWyJlNDQwIiwiXHU4OGYwXHU4OGVjXHU4OGViXHU4OTlkXHU4OWExXHU4OTlmXHU4OTllXHU4OWU5XHU4OWViXHU4OWU4XHU4YWFiXHU4YTk5''@;'; put 'put ''XHU4YThiXHU4YTkyXHU4YThmXHU4YTk2XHU4YzNkXHU4YzY4XHU4YzY5XHU4Y2Q1XHU4Y2NmXHU4Y2Q3XHU4ZDk2XHU4ZTA5XHU4ZTAyXHU4ZGZmXHU4ZTBkXHU4ZGZkXHU4ZTBhXHU4ZTAzXHU4ZTA3XHU4ZTA2XHU4ZTA1XHU4ZGZlXHU4ZTAwXHU4ZTA0XHU4ZjEwXHU4ZjExXHU4ZjBlXHU4''@;'; put 'put ''ZjBkXHU5MTIzXHU5MTFjXHU5MTIwXHU5MTIyXHU5MTFmXHU5MTFkXHU5MTFhXHU5MTI0XHU5MTIxXHU5MTFiXHU5MTdhXHU5MTcyXHU5MTc5XHU5MTczXHU5MmE1XHU5MmE0XHU5Mjc2XHU5MjliXHU5MjdhXHU5MmEwXHU5Mjk0XHU5MmFhXHU5MjhkIl0sWyJlNGExIiwiXHU5MmE2XHU5Mjlh''@;'; put 'put ''XHU5MmFiXHU5Mjc5XHU5Mjk3XHU5MjdmXHU5MmEzXHU5MmVlXHU5MjhlXHU5MjgyXHU5Mjk1XHU5MmEyXHU5MjdkXHU5Mjg4XHU5MmExXHU5MjhhXHU5Mjg2XHU5MjhjXHU5Mjk5XHU5MmE3XHU5MjdlXHU5Mjg3XHU5MmE5XHU5MjlkXHU5MjhiXHU5MjJkXHU5NjllXHU5NmExXHU5NmZmXHU5''@;'; put 'put ''NzU4XHU5NzdkXHU5NzdhXHU5NzdlXHU5NzgzXHU5NzgwXHU5NzgyXHU5NzdiXHU5Nzg0XHU5NzgxXHU5NzdmXHU5N2NlXHU5N2NkXHU5ODE2XHU5OGFkXHU5OGFlXHU5OTAyXHU5OTAwXHU5OTA3XHU5OTlkXHU5OTljXHU5OWMzXHU5OWI5XHU5OWJiXHU5OWJhXHU5OWMyXHU5OWJkXHU5OWM3''@;'; put 'put ''XHU5YWIxXHU5YWUzXHU5YWU3XHU5YjNlXHU5YjNmXHU5YjYwXHU5YjYxXHU5YjVmXHU5Y2YxXHU5Y2YyXHU5Y2Y1XHU5ZWE3XHU1MGZmXHU1MTAzXHU1MTMwXHU1MGY4XHU1MTA2XHU1MTA3XHU1MGY2XHU1MGZlXHU1MTBiXHU1MTBjXHU1MGZkXHU1MTBhXHU1MjhiXHU1MjhjXHU1MmYxXHU1''@;'; put 'put ''MmVmXHU1NjQ4XHU1NjQyXHU1NjRjXHU1NjM1XHU1NjQxXHU1NjRhXHU1NjQ5XHU1NjQ2XHU1NjU4Il0sWyJlNTQwIiwiXHU1NjVhXHU1NjQwXHU1NjMzXHU1NjNkXHU1NjJjXHU1NjNlXHU1NjM4XHU1NjJhXHU1NjNhXHU1NzFhXHU1OGFiXHU1ODlkXHU1OGIxXHU1OGEwXHU1OGEzXHU1OGFm''@;'; put 'put ''XHU1OGFjXHU1OGE1XHU1OGExXHU1OGZmXHU1YWZmXHU1YWY0XHU1YWZkXHU1YWY3XHU1YWY2XHU1YjAzXHU1YWY4XHU1YjAyXHU1YWY5XHU1YjAxXHU1YjA3XHU1YjA1XHU1YjBmXHU1YzY3XHU1ZDk5XHU1ZDk3XHU1ZDlmXHU1ZDkyXHU1ZGEyXHU1ZDkzXHU1ZDk1XHU1ZGEwXHU1ZDljXHU1''@;'; put 'put ''ZGExXHU1ZDlhXHU1ZDllXHU1ZTY5XHU1ZTVkXHU1ZTYwXHU1ZTVjXHU3ZGYzXHU1ZWRiXHU1ZWRlXHU1ZWUxXHU1ZjQ5XHU1ZmIyXHU2MThiXHU2MTgzXHU2MTc5XHU2MWIxXHU2MWIwXHU2MWEyXHU2MTg5Il0sWyJlNWExIiwiXHU2MTliXHU2MTkzXHU2MWFmXHU2MWFkXHU2MTlmXHU2MTky''@;'; put 'put ''XHU2MWFhXHU2MWExXHU2MThkXHU2MTY2XHU2MWIzXHU2MjJkXHU2NDZlXHU2NDcwXHU2NDk2XHU2NGEwXHU2NDg1XHU2NDk3XHU2NDljXHU2NDhmXHU2NDhiXHU2NDhhXHU2NDhjXHU2NGEzXHU2NDlmXHU2NDY4XHU2NGIxXHU2NDk4XHU2NTc2XHU2NTdhXHU2NTc5XHU2NTdiXHU2NWIyXHU2''@;'; put 'put ''NWIzXHU2NmI1XHU2NmIwXHU2NmE5XHU2NmIyXHU2NmI3XHU2NmFhXHU2NmFmXHU2YTAwXHU2YTA2XHU2YTE3XHU2OWU1XHU2OWY4XHU2YTE1XHU2OWYxXHU2OWU0XHU2YTIwXHU2OWZmXHU2OWVjXHU2OWUyXHU2YTFiXHU2YTFkXHU2OWZlXHU2YTI3XHU2OWYyXHU2OWVlXHU2YTE0XHU2OWY3''@;'; put 'put ''XHU2OWU3XHU2YTQwXHU2YTA4XHU2OWU2XHU2OWZiXHU2YTBkXHU2OWZjXHU2OWViXHU2YTA5XHU2YTA0XHU2YTE4XHU2YTI1XHU2YTBmXHU2OWY2XHU2YTI2XHU2YTA3XHU2OWY0XHU2YTE2XHU2YjUxXHU2YmE1XHU2YmEzXHU2YmEyXHU2YmE2XHU2YzAxXHU2YzAwXHU2YmZmXHU2YzAyXHU2''@;'; put 'put ''ZjQxXHU2ZjI2XHU2ZjdlXHU2Zjg3XHU2ZmM2XHU2ZjkyIl0sWyJlNjQwIiwiXHU2ZjhkXHU2Zjg5XHU2ZjhjXHU2ZjYyXHU2ZjRmXHU2Zjg1XHU2ZjVhXHU2Zjk2XHU2Zjc2XHU2ZjZjXHU2ZjgyXHU2ZjU1XHU2ZjcyXHU2ZjUyXHU2ZjUwXHU2ZjU3XHU2Zjk0XHU2ZjkzXHU2ZjVkXHU2ZjAw''@;'; put 'put ''XHU2ZjYxXHU2ZjZiXHU2ZjdkXHU2ZjY3XHU2ZjkwXHU2ZjUzXHU2ZjhiXHU2ZjY5XHU2ZjdmXHU2Zjk1XHU2ZjYzXHU2Zjc3XHU2ZjZhXHU2ZjdiXHU3MWIyXHU3MWFmXHU3MTliXHU3MWIwXHU3MWEwXHU3MTlhXHU3MWE5XHU3MWI1XHU3MTlkXHU3MWE1XHU3MTllXHU3MWE0XHU3MWExXHU3''@;'; put 'put ''MWFhXHU3MTljXHU3MWE3XHU3MWIzXHU3Mjk4XHU3MjlhXHU3MzU4XHU3MzUyXHU3MzVlXHU3MzVmXHU3MzYwXHU3MzVkXHU3MzViXHU3MzYxXHU3MzVhXHU3MzU5Il0sWyJlNmExIiwiXHU3MzYyXHU3NDg3XHU3NDg5XHU3NDhhXHU3NDg2XHU3NDgxXHU3NDdkXHU3NDg1XHU3NDg4XHU3NDdj''@;'; put 'put ''XHU3NDc5XHU3NTA4XHU3NTA3XHU3NTdlXHU3NjI1XHU3NjFlXHU3NjE5XHU3NjFkXHU3NjFjXHU3NjIzXHU3NjFhXHU3NjI4XHU3NjFiXHU3NjljXHU3NjlkXHU3NjllXHU3NjliXHU3NzhkXHU3NzhmXHU3Nzg5XHU3Nzg4XHU3OGNkXHU3OGJiXHU3OGNmXHU3OGNjXHU3OGQxXHU3OGNlXHU3''@;'; put 'put ''OGQ0XHU3OGM4XHU3OGMzXHU3OGM0XHU3OGM5XHU3OTlhXHU3OWExXHU3OWEwXHU3OTljXHU3OWEyXHU3OTliXHU2Yjc2XHU3YTM5XHU3YWIyXHU3YWI0XHU3YWIzXHU3YmI3XHU3YmNiXHU3YmJlXHU3YmFjXHU3YmNlXHU3YmFmXHU3YmI5XHU3YmNhXHU3YmI1XHU3Y2M1XHU3Y2M4XHU3Y2Nj''@;'; put 'put ''XHU3Y2NiXHU3ZGY3XHU3ZGRiXHU3ZGVhXHU3ZGU3XHU3ZGQ3XHU3ZGUxXHU3ZTAzXHU3ZGZhXHU3ZGU2XHU3ZGY2XHU3ZGYxXHU3ZGYwXHU3ZGVlXHU3ZGRmXHU3Zjc2XHU3ZmFjXHU3ZmIwXHU3ZmFkXHU3ZmVkXHU3ZmViXHU3ZmVhXHU3ZmVjXHU3ZmU2XHU3ZmU4XHU4MDY0XHU4MDY3XHU4''@;'; put 'put ''MWEzXHU4MTlmIl0sWyJlNzQwIiwiXHU4MTllXHU4MTk1XHU4MWEyXHU4MTk5XHU4MTk3XHU4MjE2XHU4MjRmXHU4MjUzXHU4MjUyXHU4MjUwXHU4MjRlXHU4MjUxXHU4NTI0XHU4NTNiXHU4NTBmXHU4NTAwXHU4NTI5XHU4NTBlXHU4NTA5XHU4NTBkXHU4NTFmXHU4NTBhXHU4NTI3XHU4NTFj''@;'; put 'put ''XHU4NGZiXHU4NTJiXHU4NGZhXHU4NTA4XHU4NTBjXHU4NGY0XHU4NTJhXHU4NGYyXHU4NTE1XHU4NGY3XHU4NGViXHU4NGYzXHU4NGZjXHU4NTEyXHU4NGVhXHU4NGU5XHU4NTE2XHU4NGZlXHU4NTI4XHU4NTFkXHU4NTJlXHU4NTAyXHU4NGZkXHU4NTFlXHU4NGY2XHU4NTMxXHU4NTI2XHU4''@;'; put 'put ''NGU3XHU4NGU4XHU4NGYwXHU4NGVmXHU4NGY5XHU4NTE4XHU4NTIwXHU4NTMwXHU4NTBiXHU4NTE5XHU4NTJmXHU4NjYyIl0sWyJlN2ExIiwiXHU4NzU2XHU4NzYzXHU4NzY0XHU4Nzc3XHU4N2UxXHU4NzczXHU4NzU4XHU4NzU0XHU4NzViXHU4NzUyXHU4NzYxXHU4NzVhXHU4NzUxXHU4NzVl''@;'; put 'put ''XHU4NzZkXHU4NzZhXHU4NzUwXHU4NzRlXHU4NzVmXHU4NzVkXHU4NzZmXHU4NzZjXHU4NzdhXHU4NzZlXHU4NzVjXHU4NzY1XHU4NzRmXHU4NzdiXHU4Nzc1XHU4NzYyXHU4NzY3XHU4NzY5XHU4ODVhXHU4OTA1XHU4OTBjXHU4OTE0XHU4OTBiXHU4OTE3XHU4OTE4XHU4OTE5XHU4OTA2XHU4''@;'; put 'put ''OTE2XHU4OTExXHU4OTBlXHU4OTA5XHU4OWEyXHU4OWE0XHU4OWEzXHU4OWVkXHU4OWYwXHU4OWVjXHU4YWNmXHU4YWM2XHU4YWI4XHU4YWQzXHU4YWQxXHU4YWQ0XHU4YWQ1XHU4YWJiXHU4YWQ3XHU4YWJlXHU4YWMwXHU4YWM1XHU4YWQ4XHU4YWMzXHU4YWJhXHU4YWJkXHU4YWQ5XHU4YzNl''@;'; put 'put ''XHU4YzRkXHU4YzhmXHU4Y2U1XHU4Y2RmXHU4Y2Q5XHU4Y2U4XHU4Y2RhXHU4Y2RkXHU4Y2U3XHU4ZGEwXHU4ZDljXHU4ZGExXHU4ZDliXHU4ZTIwXHU4ZTIzXHU4ZTI1XHU4ZTI0XHU4ZTJlXHU4ZTE1XHU4ZTFiXHU4ZTE2XHU4ZTExXHU4ZTE5XHU4ZTI2XHU4ZTI3Il0sWyJlODQwIiwiXHU4''@;'; put 'put ''ZTE0XHU4ZTEyXHU4ZTE4XHU4ZTEzXHU4ZTFjXHU4ZTE3XHU4ZTFhXHU4ZjJjXHU4ZjI0XHU4ZjE4XHU4ZjFhXHU4ZjIwXHU4ZjIzXHU4ZjE2XHU4ZjE3XHU5MDczXHU5MDcwXHU5MDZmXHU5MDY3XHU5MDZiXHU5MTJmXHU5MTJiXHU5MTI5XHU5MTJhXHU5MTMyXHU5MTI2XHU5MTJlXHU5MTg1''@;'; put 'put ''XHU5MTg2XHU5MThhXHU5MTgxXHU5MTgyXHU5MTg0XHU5MTgwXHU5MmQwXHU5MmMzXHU5MmM0XHU5MmMwXHU5MmQ5XHU5MmI2XHU5MmNmXHU5MmYxXHU5MmRmXHU5MmQ4XHU5MmU5XHU5MmQ3XHU5MmRkXHU5MmNjXHU5MmVmXHU5MmMyXHU5MmU4XHU5MmNhXHU5MmM4XHU5MmNlXHU5MmU2XHU5''@;'; put 'put ''MmNkXHU5MmQ1XHU5MmM5XHU5MmUwXHU5MmRlXHU5MmU3XHU5MmQxXHU5MmQzIl0sWyJlOGExIiwiXHU5MmI1XHU5MmUxXHU5MmM2XHU5MmI0XHU5NTdjXHU5NWFjXHU5NWFiXHU5NWFlXHU5NWIwXHU5NmE0XHU5NmEyXHU5NmQzXHU5NzA1XHU5NzA4XHU5NzAyXHU5NzVhXHU5NzhhXHU5Nzhl''@;'; put 'put ''XHU5Nzg4XHU5N2QwXHU5N2NmXHU5ODFlXHU5ODFkXHU5ODI2XHU5ODI5XHU5ODI4XHU5ODIwXHU5ODFiXHU5ODI3XHU5OGIyXHU5OTA4XHU5OGZhXHU5OTExXHU5OTE0XHU5OTE2XHU5OTE3XHU5OTE1XHU5OWRjXHU5OWNkXHU5OWNmXHU5OWQzXHU5OWQ0XHU5OWNlXHU5OWM5XHU5OWQ2XHU5''@;'; put 'put ''OWQ4XHU5OWNiXHU5OWQ3XHU5OWNjXHU5YWIzXHU5YWVjXHU5YWViXHU5YWYzXHU5YWYyXHU5YWYxXHU5YjQ2XHU5YjQzXHU5YjY3XHU5Yjc0XHU5YjcxXHU5YjY2XHU5Yjc2XHU5Yjc1XHU5YjcwXHU5YjY4XHU5YjY0XHU5YjZjXHU5Y2ZjXHU5Y2ZhXHU5Y2ZkXHU5Y2ZmXHU5Y2Y3XHU5ZDA3''@;'; put 'put ''XHU5ZDAwXHU5Y2Y5XHU5Y2ZiXHU5ZDA4XHU5ZDA1XHU5ZDA0XHU5ZTgzXHU5ZWQzXHU5ZjBmXHU5ZjEwXHU1MTFjXHU1MTEzXHU1MTE3XHU1MTFhXHU1MTExXHU1MWRlXHU1MzM0XHU1M2UxXHU1NjcwXHU1NjYwXHU1NjZlIl0sWyJlOTQwIiwiXHU1NjczXHU1NjY2XHU1NjYzXHU1NjZkXHU1''@;'; put 'put ''NjcyXHU1NjVlXHU1Njc3XHU1NzFjXHU1NzFiXHU1OGM4XHU1OGJkXHU1OGM5XHU1OGJmXHU1OGJhXHU1OGMyXHU1OGJjXHU1OGM2XHU1YjE3XHU1YjE5XHU1YjFiXHU1YjIxXHU1YjE0XHU1YjEzXHU1YjEwXHU1YjE2XHU1YjI4XHU1YjFhXHU1YjIwXHU1YjFlXHU1YmVmXHU1ZGFjXHU1ZGIx''@;'; put 'put ''XHU1ZGE5XHU1ZGE3XHU1ZGI1XHU1ZGIwXHU1ZGFlXHU1ZGFhXHU1ZGE4XHU1ZGIyXHU1ZGFkXHU1ZGFmXHU1ZGI0XHU1ZTY3XHU1ZTY4XHU1ZTY2XHU1ZTZmXHU1ZWU5XHU1ZWU3XHU1ZWU2XHU1ZWU4XHU1ZWU1XHU1ZjRiXHU1ZmJjXHU2MTlkXHU2MWE4XHU2MTk2XHU2MWM1XHU2MWI0XHU2''@;'; put 'put ''MWM2XHU2MWMxXHU2MWNjXHU2MWJhIl0sWyJlOWExIiwiXHU2MWJmXHU2MWI4XHU2MThjXHU2NGQ3XHU2NGQ2XHU2NGQwXHU2NGNmXHU2NGM5XHU2NGJkXHU2NDg5XHU2NGMzXHU2NGRiXHU2NGYzXHU2NGQ5XHU2NTMzXHU2NTdmXHU2NTdjXHU2NWEyXHU2NmM4XHU2NmJlXHU2NmMwXHU2NmNh''@;'; put 'put ''XHU2NmNiXHU2NmNmXHU2NmJkXHU2NmJiXHU2NmJhXHU2NmNjXHU2NzIzXHU2YTM0XHU2YTY2XHU2YTQ5XHU2YTY3XHU2YTMyXHU2YTY4XHU2YTNlXHU2YTVkXHU2YTZkXHU2YTc2XHU2YTViXHU2YTUxXHU2YTI4XHU2YTVhXHU2YTNiXHU2YTNmXHU2YTQxXHU2YTZhXHU2YTY0XHU2YTUwXHU2''@;'; put 'put ''YTRmXHU2YTU0XHU2YTZmXHU2YTY5XHU2YTYwXHU2YTNjXHU2YTVlXHU2YTU2XHU2YTU1XHU2YTRkXHU2YTRlXHU2YTQ2XHU2YjU1XHU2YjU0XHU2YjU2XHU2YmE3XHU2YmFhXHU2YmFiXHU2YmM4XHU2YmM3XHU2YzA0XHU2YzAzXHU2YzA2XHU2ZmFkXHU2ZmNiXHU2ZmEzXHU2ZmM3XHU2ZmJj''@;'; put 'put ''XHU2ZmNlXHU2ZmM4XHU2ZjVlXHU2ZmM0XHU2ZmJkXHU2ZjllXHU2ZmNhXHU2ZmE4XHU3MDA0XHU2ZmE1XHU2ZmFlXHU2ZmJhXHU2ZmFjXHU2ZmFhXHU2ZmNmXHU2ZmJmXHU2ZmI4Il0sWyJlYTQwIiwiXHU2ZmEyXHU2ZmM5XHU2ZmFiXHU2ZmNkXHU2ZmFmXHU2ZmIyXHU2ZmIwXHU3MWM1XHU3''@;'; put 'put ''MWMyXHU3MWJmXHU3MWI4XHU3MWQ2XHU3MWMwXHU3MWMxXHU3MWNiXHU3MWQ0XHU3MWNhXHU3MWM3XHU3MWNmXHU3MWJkXHU3MWQ4XHU3MWJjXHU3MWM2XHU3MWRhXHU3MWRiXHU3MjlkXHU3MjllXHU3MzY5XHU3MzY2XHU3MzY3XHU3MzZjXHU3MzY1XHU3MzZiXHU3MzZhXHU3NDdmXHU3NDlh''@;'; put 'put ''XHU3NGEwXHU3NDk0XHU3NDkyXHU3NDk1XHU3NGExXHU3NTBiXHU3NTgwXHU3NjJmXHU3NjJkXHU3NjMxXHU3NjNkXHU3NjMzXHU3NjNjXHU3NjM1XHU3NjMyXHU3NjMwXHU3NmJiXHU3NmU2XHU3NzlhXHU3NzlkXHU3N2ExXHU3NzljXHU3NzliXHU3N2EyXHU3N2EzXHU3Nzk1XHU3Nzk5Il0s''@;'; put 'put ''WyJlYWExIiwiXHU3Nzk3XHU3OGRkXHU3OGU5XHU3OGU1XHU3OGVhXHU3OGRlXHU3OGUzXHU3OGRiXHU3OGUxXHU3OGUyXHU3OGVkXHU3OGRmXHU3OGUwXHU3OWE0XHU3YTQ0XHU3YTQ4XHU3YTQ3XHU3YWI2XHU3YWI4XHU3YWI1XHU3YWIxXHU3YWI3XHU3YmRlXHU3YmUzXHU3YmU3XHU3YmRk''@;'; put 'put ''XHU3YmQ1XHU3YmU1XHU3YmRhXHU3YmU4XHU3YmY5XHU3YmQ0XHU3YmVhXHU3YmUyXHU3YmRjXHU3YmViXHU3YmQ4XHU3YmRmXHU3Y2QyXHU3Y2Q0XHU3Y2Q3XHU3Y2QwXHU3Y2QxXHU3ZTEyXHU3ZTIxXHU3ZTE3XHU3ZTBjXHU3ZTFmXHU3ZTIwXHU3ZTEzXHU3ZTBlXHU3ZTFjXHU3ZTE1XHU3''@;'; put 'put ''ZTFhXHU3ZTIyXHU3ZTBiXHU3ZTBmXHU3ZTE2XHU3ZTBkXHU3ZTE0XHU3ZTI1XHU3ZTI0XHU3ZjQzXHU3ZjdiXHU3ZjdjXHU3ZjdhXHU3ZmIxXHU3ZmVmXHU4MDJhXHU4MDI5XHU4MDZjXHU4MWIxXHU4MWE2XHU4MWFlXHU4MWI5XHU4MWI1XHU4MWFiXHU4MWIwXHU4MWFjXHU4MWI0XHU4MWIy''@;'; put 'put ''XHU4MWI3XHU4MWE3XHU4MWYyXHU4MjU1XHU4MjU2XHU4MjU3XHU4NTU2XHU4NTQ1XHU4NTZiXHU4NTRkXHU4NTUzXHU4NTYxXHU4NTU4Il0sWyJlYjQwIiwiXHU4NTQwXHU4NTQ2XHU4NTY0XHU4NTQxXHU4NTYyXHU4NTQ0XHU4NTUxXHU4NTQ3XHU4NTYzXHU4NTNlXHU4NTViXHU4NTcxXHU4''@;'; put 'put ''NTRlXHU4NTZlXHU4NTc1XHU4NTU1XHU4NTY3XHU4NTYwXHU4NThjXHU4NTY2XHU4NTVkXHU4NTU0XHU4NTY1XHU4NTZjXHU4NjYzXHU4NjY1XHU4NjY0XHU4NzliXHU4NzhmXHU4Nzk3XHU4NzkzXHU4NzkyXHU4Nzg4XHU4NzgxXHU4Nzk2XHU4Nzk4XHU4Nzc5XHU4Nzg3XHU4N2EzXHU4Nzg1''@;'; put 'put ''XHU4NzkwXHU4NzkxXHU4NzlkXHU4Nzg0XHU4Nzk0XHU4NzljXHU4NzlhXHU4Nzg5XHU4OTFlXHU4OTI2XHU4OTMwXHU4OTJkXHU4OTJlXHU4OTI3XHU4OTMxXHU4OTIyXHU4OTI5XHU4OTIzXHU4OTJmXHU4OTJjXHU4OTFmXHU4OWYxXHU4YWUwIl0sWyJlYmExIiwiXHU4YWUyXHU4YWYyXHU4''@;'; put 'put ''YWY0XHU4YWY1XHU4YWRkXHU4YjE0XHU4YWU0XHU4YWRmXHU4YWYwXHU4YWM4XHU4YWRlXHU4YWUxXHU4YWU4XHU4YWZmXHU4YWVmXHU4YWZiXHU4YzkxXHU4YzkyXHU4YzkwXHU4Y2Y1XHU4Y2VlXHU4Y2YxXHU4Y2YwXHU4Y2YzXHU4ZDZjXHU4ZDZlXHU4ZGE1XHU4ZGE3XHU4ZTMzXHU4ZTNl''@;'; put 'put ''XHU4ZTM4XHU4ZTQwXHU4ZTQ1XHU4ZTM2XHU4ZTNjXHU4ZTNkXHU4ZTQxXHU4ZTMwXHU4ZTNmXHU4ZWJkXHU4ZjM2XHU4ZjJlXHU4ZjM1XHU4ZjMyXHU4ZjM5XHU4ZjM3XHU4ZjM0XHU5MDc2XHU5MDc5XHU5MDdiXHU5MDg2XHU5MGZhXHU5MTMzXHU5MTM1XHU5MTM2XHU5MTkzXHU5MTkwXHU5''@;'; put 'put ''MTkxXHU5MThkXHU5MThmXHU5MzI3XHU5MzFlXHU5MzA4XHU5MzFmXHU5MzA2XHU5MzBmXHU5MzdhXHU5MzM4XHU5MzNjXHU5MzFiXHU5MzIzXHU5MzEyXHU5MzAxXHU5MzQ2XHU5MzJkXHU5MzBlXHU5MzBkXHU5MmNiXHU5MzFkXHU5MmZhXHU5MzI1XHU5MzEzXHU5MmY5XHU5MmY3XHU5MzM0''@;'; put 'put ''XHU5MzAyXHU5MzI0XHU5MmZmXHU5MzI5XHU5MzM5XHU5MzM1XHU5MzJhXHU5MzE0XHU5MzBjIl0sWyJlYzQwIiwiXHU5MzBiXHU5MmZlXHU5MzA5XHU5MzAwXHU5MmZiXHU5MzE2XHU5NWJjXHU5NWNkXHU5NWJlXHU5NWI5XHU5NWJhXHU5NWI2XHU5NWJmXHU5NWI1XHU5NWJkXHU5NmE5XHU5''@;'; put 'put ''NmQ0XHU5NzBiXHU5NzEyXHU5NzEwXHU5Nzk5XHU5Nzk3XHU5Nzk0XHU5N2YwXHU5N2Y4XHU5ODM1XHU5ODJmXHU5ODMyXHU5OTI0XHU5OTFmXHU5OTI3XHU5OTI5XHU5OTllXHU5OWVlXHU5OWVjXHU5OWU1XHU5OWU0XHU5OWYwXHU5OWUzXHU5OWVhXHU5OWU5XHU5OWU3XHU5YWI5XHU5YWJm''@;'; put 'put ''XHU5YWI0XHU5YWJiXHU5YWY2XHU5YWZhXHU5YWY5XHU5YWY3XHU5YjMzXHU5YjgwXHU5Yjg1XHU5Yjg3XHU5YjdjXHU5YjdlXHU5YjdiXHU5YjgyXHU5YjkzXHU5YjkyXHU5YjkwXHU5YjdhXHU5Yjk1Il0sWyJlY2ExIiwiXHU5YjdkXHU5Yjg4XHU5ZDI1XHU5ZDE3XHU5ZDIwXHU5ZDFlXHU5''@;'; put 'put ''ZDE0XHU5ZDI5XHU5ZDFkXHU5ZDE4XHU5ZDIyXHU5ZDEwXHU5ZDE5XHU5ZDFmXHU5ZTg4XHU5ZTg2XHU5ZTg3XHU5ZWFlXHU5ZWFkXHU5ZWQ1XHU5ZWQ2XHU5ZWZhXHU5ZjEyXHU5ZjNkXHU1MTI2XHU1MTI1XHU1MTIyXHU1MTI0XHU1MTIwXHU1MTI5XHU1MmY0XHU1NjkzXHU1NjhjXHU1Njhk''@;'; put 'put ''XHU1Njg2XHU1Njg0XHU1NjgzXHU1NjdlXHU1NjgyXHU1NjdmXHU1NjgxXHU1OGQ2XHU1OGQ0XHU1OGNmXHU1OGQyXHU1YjJkXHU1YjI1XHU1YjMyXHU1YjIzXHU1YjJjXHU1YjI3XHU1YjI2XHU1YjJmXHU1YjJlXHU1YjdiXHU1YmYxXHU1YmYyXHU1ZGI3XHU1ZTZjXHU1ZTZhXHU1ZmJlXHU1''@;'; put 'put ''ZmJiXHU2MWMzXHU2MWI1XHU2MWJjXHU2MWU3XHU2MWUwXHU2MWU1XHU2MWU0XHU2MWU4XHU2MWRlXHU2NGVmXHU2NGU5XHU2NGUzXHU2NGViXHU2NGU0XHU2NGU4XHU2NTgxXHU2NTgwXHU2NWI2XHU2NWRhXHU2NmQyXHU2YThkXHU2YTk2XHU2YTgxXHU2YWE1XHU2YTg5XHU2YTlmXHU2YTli''@;'; put 'put ''XHU2YWExXHU2YTllXHU2YTg3XHU2YTkzXHU2YThlIl0sWyJlZDQwIiwiXHU2YTk1XHU2YTgzXHU2YWE4XHU2YWE0XHU2YTkxXHU2YTdmXHU2YWE2XHU2YTlhXHU2YTg1XHU2YThjXHU2YTkyXHU2YjViXHU2YmFkXHU2YzA5XHU2ZmNjXHU2ZmE5XHU2ZmY0XHU2ZmQ0XHU2ZmUzXHU2ZmRjXHU2''@;'; put 'put ''ZmVkXHU2ZmU3XHU2ZmU2XHU2ZmRlXHU2ZmYyXHU2ZmRkXHU2ZmUyXHU2ZmU4XHU3MWUxXHU3MWYxXHU3MWU4XHU3MWYyXHU3MWU0XHU3MWYwXHU3MWUyXHU3MzczXHU3MzZlXHU3MzZmXHU3NDk3XHU3NGIyXHU3NGFiXHU3NDkwXHU3NGFhXHU3NGFkXHU3NGIxXHU3NGE1XHU3NGFmXHU3NTEw''@;'; put 'put ''XHU3NTExXHU3NTEyXHU3NTBmXHU3NTg0XHU3NjQzXHU3NjQ4XHU3NjQ5XHU3NjQ3XHU3NmE0XHU3NmU5XHU3N2I1XHU3N2FiXHU3N2IyXHU3N2I3XHU3N2I2Il0sWyJlZGExIiwiXHU3N2I0XHU3N2IxXHU3N2E4XHU3N2YwXHU3OGYzXHU3OGZkXHU3OTAyXHU3OGZiXHU3OGZjXHU3OGYyXHU3''@;'; put 'put ''OTA1XHU3OGY5XHU3OGZlXHU3OTA0XHU3OWFiXHU3OWE4XHU3YTVjXHU3YTViXHU3YTU2XHU3YTU4XHU3YTU0XHU3YTVhXHU3YWJlXHU3YWMwXHU3YWMxXHU3YzA1XHU3YzBmXHU3YmYyXHU3YzAwXHU3YmZmXHU3YmZiXHU3YzBlXHU3YmY0XHU3YzBiXHU3YmYzXHU3YzAyXHU3YzA5XHU3YzAz''@;'; put 'put ''XHU3YzAxXHU3YmY4XHU3YmZkXHU3YzA2XHU3YmYwXHU3YmYxXHU3YzEwXHU3YzBhXHU3Y2U4XHU3ZTJkXHU3ZTNjXHU3ZTQyXHU3ZTMzXHU5ODQ4XHU3ZTM4XHU3ZTJhXHU3ZTQ5XHU3ZTQwXHU3ZTQ3XHU3ZTI5XHU3ZTRjXHU3ZTMwXHU3ZTNiXHU3ZTM2XHU3ZTQ0XHU3ZTNhXHU3ZjQ1XHU3''@;'; put 'put ''ZjdmXHU3ZjdlXHU3ZjdkXHU3ZmY0XHU3ZmYyXHU4MDJjXHU4MWJiXHU4MWM0XHU4MWNjXHU4MWNhXHU4MWM1XHU4MWM3XHU4MWJjXHU4MWU5XHU4MjViXHU4MjVhXHU4MjVjXHU4NTgzXHU4NTgwXHU4NThmXHU4NWE3XHU4NTk1XHU4NWEwXHU4NThiXHU4NWEzXHU4NTdiXHU4NWE0XHU4NTlh''@;'; put 'put ''XHU4NTllIl0sWyJlZTQwIiwiXHU4NTc3XHU4NTdjXHU4NTg5XHU4NWExXHU4NTdhXHU4NTc4XHU4NTU3XHU4NThlXHU4NTk2XHU4NTg2XHU4NThkXHU4NTk5XHU4NTlkXHU4NTgxXHU4NWEyXHU4NTgyXHU4NTg4XHU4NTg1XHU4NTc5XHU4NTc2XHU4NTk4XHU4NTkwXHU4NTlmXHU4NjY4XHU4''@;'; put 'put ''N2JlXHU4N2FhXHU4N2FkXHU4N2M1XHU4N2IwXHU4N2FjXHU4N2I5XHU4N2I1XHU4N2JjXHU4N2FlXHU4N2M5XHU4N2MzXHU4N2MyXHU4N2NjXHU4N2I3XHU4N2FmXHU4N2M0XHU4N2NhXHU4N2I0XHU4N2I2XHU4N2JmXHU4N2I4XHU4N2JkXHU4N2RlXHU4N2IyXHU4OTM1XHU4OTMzXHU4OTNj''@;'; put 'put ''XHU4OTNlXHU4OTQxXHU4OTUyXHU4OTM3XHU4OTQyXHU4OWFkXHU4OWFmXHU4OWFlXHU4OWYyXHU4OWYzXHU4YjFlIl0sWyJlZWExIiwiXHU4YjE4XHU4YjE2XHU4YjExXHU4YjA1XHU4YjBiXHU4YjIyXHU4YjBmXHU4YjEyXHU4YjE1XHU4YjA3XHU4YjBkXHU4YjA4XHU4YjA2XHU4YjFjXHU4''@;'; put 'put ''YjEzXHU4YjFhXHU4YzRmXHU4YzcwXHU4YzcyXHU4YzcxXHU4YzZmXHU4Yzk1XHU4Yzk0XHU4Y2Y5XHU4ZDZmXHU4ZTRlXHU4ZTRkXHU4ZTUzXHU4ZTUwXHU4ZTRjXHU4ZTQ3XHU4ZjQzXHU4ZjQwXHU5MDg1XHU5MDdlXHU5MTM4XHU5MTlhXHU5MWEyXHU5MTliXHU5MTk5XHU5MTlmXHU5MWEx''@;'; put 'put ''XHU5MTlkXHU5MWEwXHU5M2ExXHU5MzgzXHU5M2FmXHU5MzY0XHU5MzU2XHU5MzQ3XHU5MzdjXHU5MzU4XHU5MzVjXHU5Mzc2XHU5MzQ5XHU5MzUwXHU5MzUxXHU5MzYwXHU5MzZkXHU5MzhmXHU5MzRjXHU5MzZhXHU5Mzc5XHU5MzU3XHU5MzU1XHU5MzUyXHU5MzRmXHU5MzcxXHU5Mzc3XHU5''@;'; put 'put ''MzdiXHU5MzYxXHU5MzVlXHU5MzYzXHU5MzY3XHU5MzgwXHU5MzRlXHU5MzU5XHU5NWM3XHU5NWMwXHU5NWM5XHU5NWMzXHU5NWM1XHU5NWI3XHU5NmFlXHU5NmIwXHU5NmFjXHU5NzIwXHU5NzFmXHU5NzE4XHU5NzFkXHU5NzE5XHU5NzlhXHU5N2ExXHU5NzljIl0sWyJlZjQwIiwiXHU5Nzll''@;'; put 'put ''XHU5NzlkXHU5N2Q1XHU5N2Q0XHU5N2YxXHU5ODQxXHU5ODQ0XHU5ODRhXHU5ODQ5XHU5ODQ1XHU5ODQzXHU5OTI1XHU5OTJiXHU5OTJjXHU5OTJhXHU5OTMzXHU5OTMyXHU5OTJmXHU5OTJkXHU5OTMxXHU5OTMwXHU5OTk4XHU5OWEzXHU5OWExXHU5YTAyXHU5OWZhXHU5OWY0XHU5OWY3XHU5''@;'; put 'put ''OWY5XHU5OWY4XHU5OWY2XHU5OWZiXHU5OWZkXHU5OWZlXHU5OWZjXHU5YTAzXHU5YWJlXHU5YWZlXHU5YWZkXHU5YjAxXHU5YWZjXHU5YjQ4XHU5YjlhXHU5YmE4XHU5YjllXHU5YjliXHU5YmE2XHU5YmExXHU5YmE1XHU5YmE0XHU5Yjg2XHU5YmEyXHU5YmEwXHU5YmFmXHU5ZDMzXHU5ZDQx''@;'; put 'put ''XHU5ZDY3XHU5ZDM2XHU5ZDJlXHU5ZDJmXHU5ZDMxXHU5ZDM4XHU5ZDMwIl0sWyJlZmExIiwiXHU5ZDQ1XHU5ZDQyXHU5ZDQzXHU5ZDNlXHU5ZDM3XHU5ZDQwXHU5ZDNkXHU3ZmY1XHU5ZDJkXHU5ZThhXHU5ZTg5XHU5ZThkXHU5ZWIwXHU5ZWM4XHU5ZWRhXHU5ZWZiXHU5ZWZmXHU5ZjI0XHU5''@;'; put 'put ''ZjIzXHU5ZjIyXHU5ZjU0XHU5ZmEwXHU1MTMxXHU1MTJkXHU1MTJlXHU1Njk4XHU1NjljXHU1Njk3XHU1NjlhXHU1NjlkXHU1Njk5XHU1OTcwXHU1YjNjXHU1YzY5XHU1YzZhXHU1ZGMwXHU1ZTZkXHU1ZTZlXHU2MWQ4XHU2MWRmXHU2MWVkXHU2MWVlXHU2MWYxXHU2MWVhXHU2MWYwXHU2MWVi''@;'; put 'put ''XHU2MWQ2XHU2MWU5XHU2NGZmXHU2NTA0XHU2NGZkXHU2NGY4XHU2NTAxXHU2NTAzXHU2NGZjXHU2NTk0XHU2NWRiXHU2NmRhXHU2NmRiXHU2NmQ4XHU2YWM1XHU2YWI5XHU2YWJkXHU2YWUxXHU2YWM2XHU2YWJhXHU2YWI2XHU2YWI3XHU2YWM3XHU2YWI0XHU2YWFkXHU2YjVlXHU2YmM5XHU2''@;'; put 'put ''YzBiXHU3MDA3XHU3MDBjXHU3MDBkXHU3MDAxXHU3MDA1XHU3MDE0XHU3MDBlXHU2ZmZmXHU3MDAwXHU2ZmZiXHU3MDI2XHU2ZmZjXHU2ZmY3XHU3MDBhXHU3MjAxXHU3MWZmXHU3MWY5XHU3MjAzXHU3MWZkXHU3Mzc2Il0sWyJmMDQwIiwiXHU3NGI4XHU3NGMwXHU3NGI1XHU3NGMxXHU3NGJl''@;'; put 'put ''XHU3NGI2XHU3NGJiXHU3NGMyXHU3NTE0XHU3NTEzXHU3NjVjXHU3NjY0XHU3NjU5XHU3NjUwXHU3NjUzXHU3NjU3XHU3NjVhXHU3NmE2XHU3NmJkXHU3NmVjXHU3N2MyXHU3N2JhXHU3OGZmXHU3OTBjXHU3OTEzXHU3OTE0XHU3OTA5XHU3OTEwXHU3OTEyXHU3OTExXHU3OWFkXHU3OWFjXHU3''@;'; put 'put ''YTVmXHU3YzFjXHU3YzI5XHU3YzE5XHU3YzIwXHU3YzFmXHU3YzJkXHU3YzFkXHU3YzI2XHU3YzI4XHU3YzIyXHU3YzI1XHU3YzMwXHU3ZTVjXHU3ZTUwXHU3ZTU2XHU3ZTYzXHU3ZTU4XHU3ZTYyXHU3ZTVmXHU3ZTUxXHU3ZTYwXHU3ZTU3XHU3ZTUzXHU3ZmI1XHU3ZmIzXHU3ZmY3XHU3ZmY4''@;'; put 'put ''XHU4MDc1XHU4MWQxXHU4MWQyIl0sWyJmMGExIiwiXHU4MWQwXHU4MjVmXHU4MjVlXHU4NWI0XHU4NWM2XHU4NWMwXHU4NWMzXHU4NWMyXHU4NWIzXHU4NWI1XHU4NWJkXHU4NWM3XHU4NWM0XHU4NWJmXHU4NWNiXHU4NWNlXHU4NWM4XHU4NWM1XHU4NWIxXHU4NWI2XHU4NWQyXHU4NjI0XHU4''@;'; put 'put ''NWI4XHU4NWI3XHU4NWJlXHU4NjY5XHU4N2U3XHU4N2U2XHU4N2UyXHU4N2RiXHU4N2ViXHU4N2VhXHU4N2U1XHU4N2RmXHU4N2YzXHU4N2U0XHU4N2Q0XHU4N2RjXHU4N2QzXHU4N2VkXHU4N2Q4XHU4N2UzXHU4N2E0XHU4N2Q3XHU4N2Q5XHU4ODAxXHU4N2Y0XHU4N2U4XHU4N2RkXHU4OTUz''@;'; put 'put ''XHU4OTRiXHU4OTRmXHU4OTRjXHU4OTQ2XHU4OTUwXHU4OTUxXHU4OTQ5XHU4YjJhXHU4YjI3XHU4YjIzXHU4YjMzXHU4YjMwXHU4YjM1XHU4YjQ3XHU4YjJmXHU4YjNjXHU4YjNlXHU4YjMxXHU4YjI1XHU4YjM3XHU4YjI2XHU4YjM2XHU4YjJlXHU4YjI0XHU4YjNiXHU4YjNkXHU4YjNhXHU4''@;'; put 'put ''YzQyXHU4Yzc1XHU4Yzk5XHU4Yzk4XHU4Yzk3XHU4Y2ZlXHU4ZDA0XHU4ZDAyXHU4ZDAwXHU4ZTVjXHU4ZTYyXHU4ZTYwXHU4ZTU3XHU4ZTU2XHU4ZTVlXHU4ZTY1XHU4ZTY3Il0sWyJmMTQwIiwiXHU4ZTViXHU4ZTVhXHU4ZTYxXHU4ZTVkXHU4ZTY5XHU4ZTU0XHU4ZjQ2XHU4ZjQ3XHU4ZjQ4''@;'; put 'put ''XHU4ZjRiXHU5MTI4XHU5MTNhXHU5MTNiXHU5MTNlXHU5MWE4XHU5MWE1XHU5MWE3XHU5MWFmXHU5MWFhXHU5M2I1XHU5MzhjXHU5MzkyXHU5M2I3XHU5MzliXHU5MzlkXHU5Mzg5XHU5M2E3XHU5MzhlXHU5M2FhXHU5MzllXHU5M2E2XHU5Mzk1XHU5Mzg4XHU5Mzk5XHU5MzlmXHU5MzhkXHU5''@;'; put 'put ''M2IxXHU5MzkxXHU5M2IyXHU5M2E0XHU5M2E4XHU5M2I0XHU5M2EzXHU5M2E1XHU5NWQyXHU5NWQzXHU5NWQxXHU5NmIzXHU5NmQ3XHU5NmRhXHU1ZGMyXHU5NmRmXHU5NmQ4XHU5NmRkXHU5NzIzXHU5NzIyXHU5NzI1XHU5N2FjXHU5N2FlXHU5N2E4XHU5N2FiXHU5N2E0XHU5N2FhIl0sWyJm''@;'; put 'put ''MWExIiwiXHU5N2EyXHU5N2E1XHU5N2Q3XHU5N2Q5XHU5N2Q2XHU5N2Q4XHU5N2ZhXHU5ODUwXHU5ODUxXHU5ODUyXHU5OGI4XHU5OTQxXHU5OTNjXHU5OTNhXHU5YTBmXHU5YTBiXHU5YTA5XHU5YTBkXHU5YTA0XHU5YTExXHU5YTBhXHU5YTA1XHU5YTA3XHU5YTA2XHU5YWMwXHU5YWRjXHU5''@;'; put 'put ''YjA4XHU5YjA0XHU5YjA1XHU5YjI5XHU5YjM1XHU5YjRhXHU5YjRjXHU5YjRiXHU5YmM3XHU5YmM2XHU5YmMzXHU5YmJmXHU5YmMxXHU5YmI1XHU5YmI4XHU5YmQzXHU5YmI2XHU5YmM0XHU5YmI5XHU5YmJkXHU5ZDVjXHU5ZDUzXHU5ZDRmXHU5ZDRhXHU5ZDViXHU5ZDRiXHU5ZDU5XHU5ZDU2''@;'; put 'put ''XHU5ZDRjXHU5ZDU3XHU5ZDUyXHU5ZDU0XHU5ZDVmXHU5ZDU4XHU5ZDVhXHU5ZThlXHU5ZThjXHU5ZWRmXHU5ZjAxXHU5ZjAwXHU5ZjE2XHU5ZjI1XHU5ZjJiXHU5ZjJhXHU5ZjI5XHU5ZjI4XHU5ZjRjXHU5ZjU1XHU1MTM0XHU1MTM1XHU1Mjk2XHU1MmY3XHU1M2I0XHU1NmFiXHU1NmFkXHU1''@;'; put 'put ''NmE2XHU1NmE3XHU1NmFhXHU1NmFjXHU1OGRhXHU1OGRkXHU1OGRiXHU1OTEyXHU1YjNkXHU1YjNlXHU1YjNmXHU1ZGMzXHU1ZTcwIl0sWyJmMjQwIiwiXHU1ZmJmXHU2MWZiXHU2NTA3XHU2NTEwXHU2NTBkXHU2NTA5XHU2NTBjXHU2NTBlXHU2NTg0XHU2NWRlXHU2NWRkXHU2NmRlXHU2YWU3''@;'; put 'put ''XHU2YWUwXHU2YWNjXHU2YWQxXHU2YWQ5XHU2YWNiXHU2YWRmXHU2YWRjXHU2YWQwXHU2YWViXHU2YWNmXHU2YWNkXHU2YWRlXHU2YjYwXHU2YmIwXHU2YzBjXHU3MDE5XHU3MDI3XHU3MDIwXHU3MDE2XHU3MDJiXHU3MDIxXHU3MDIyXHU3MDIzXHU3MDI5XHU3MDE3XHU3MDI0XHU3MDFjXHU3''@;'; put 'put ''MDJhXHU3MjBjXHU3MjBhXHU3MjA3XHU3MjAyXHU3MjA1XHU3MmE1XHU3MmE2XHU3MmE0XHU3MmEzXHU3MmExXHU3NGNiXHU3NGM1XHU3NGI3XHU3NGMzXHU3NTE2XHU3NjYwXHU3N2M5XHU3N2NhXHU3N2M0XHU3N2YxXHU3OTFkXHU3OTFiIl0sWyJmMmExIiwiXHU3OTIxXHU3OTFjXHU3OTE3''@;'; put 'put ''XHU3OTFlXHU3OWIwXHU3YTY3XHU3YTY4XHU3YzMzXHU3YzNjXHU3YzM5XHU3YzJjXHU3YzNiXHU3Y2VjXHU3Y2VhXHU3ZTc2XHU3ZTc1XHU3ZTc4XHU3ZTcwXHU3ZTc3XHU3ZTZmXHU3ZTdhXHU3ZTcyXHU3ZTc0XHU3ZTY4XHU3ZjRiXHU3ZjRhXHU3ZjgzXHU3Zjg2XHU3ZmI3XHU3ZmZkXHU3''@;'; put 'put ''ZmZlXHU4MDc4XHU4MWQ3XHU4MWQ1XHU4MjY0XHU4MjYxXHU4MjYzXHU4NWViXHU4NWYxXHU4NWVkXHU4NWQ5XHU4NWUxXHU4NWU4XHU4NWRhXHU4NWQ3XHU4NWVjXHU4NWYyXHU4NWY4XHU4NWQ4XHU4NWRmXHU4NWUzXHU4NWRjXHU4NWQxXHU4NWYwXHU4NWU2XHU4NWVmXHU4NWRlXHU4NWUy''@;'; put 'put ''XHU4ODAwXHU4N2ZhXHU4ODAzXHU4N2Y2XHU4N2Y3XHU4ODA5XHU4ODBjXHU4ODBiXHU4ODA2XHU4N2ZjXHU4ODA4XHU4N2ZmXHU4ODBhXHU4ODAyXHU4OTYyXHU4OTVhXHU4OTViXHU4OTU3XHU4OTYxXHU4OTVjXHU4OTU4XHU4OTVkXHU4OTU5XHU4OTg4XHU4OWI3XHU4OWI2XHU4OWY2XHU4''@;'; put 'put ''YjUwXHU4YjQ4XHU4YjRhXHU4YjQwXHU4YjUzXHU4YjU2XHU4YjU0XHU4YjRiXHU4YjU1Il0sWyJmMzQwIiwiXHU4YjUxXHU4YjQyXHU4YjUyXHU4YjU3XHU4YzQzXHU4Yzc3XHU4Yzc2XHU4YzlhXHU4ZDA2XHU4ZDA3XHU4ZDA5XHU4ZGFjXHU4ZGFhXHU4ZGFkXHU4ZGFiXHU4ZTZkXHU4ZTc4''@;'; put 'put ''XHU4ZTczXHU4ZTZhXHU4ZTZmXHU4ZTdiXHU4ZWMyXHU4ZjUyXHU4ZjUxXHU4ZjRmXHU4ZjUwXHU4ZjUzXHU4ZmI0XHU5MTQwXHU5MTNmXHU5MWIwXHU5MWFkXHU5M2RlXHU5M2M3XHU5M2NmXHU5M2MyXHU5M2RhXHU5M2QwXHU5M2Y5XHU5M2VjXHU5M2NjXHU5M2Q5XHU5M2E5XHU5M2U2XHU5''@;'; put 'put ''M2NhXHU5M2Q0XHU5M2VlXHU5M2UzXHU5M2Q1XHU5M2M0XHU5M2NlXHU5M2MwXHU5M2QyXHU5M2U3XHU5NTdkXHU5NWRhXHU5NWRiXHU5NmUxXHU5NzI5XHU5NzJiXHU5NzJjXHU5NzI4XHU5NzI2Il0sWyJmM2ExIiwiXHU5N2IzXHU5N2I3XHU5N2I2XHU5N2RkXHU5N2RlXHU5N2RmXHU5ODVj''@;'; put 'put ''XHU5ODU5XHU5ODVkXHU5ODU3XHU5OGJmXHU5OGJkXHU5OGJiXHU5OGJlXHU5OTQ4XHU5OTQ3XHU5OTQzXHU5OWE2XHU5OWE3XHU5YTFhXHU5YTE1XHU5YTI1XHU5YTFkXHU5YTI0XHU5YTFiXHU5YTIyXHU5YTIwXHU5YTI3XHU5YTIzXHU5YTFlXHU5YTFjXHU5YTE0XHU5YWMyXHU5YjBiXHU5''@;'; put 'put ''YjBhXHU5YjBlXHU5YjBjXHU5YjM3XHU5YmVhXHU5YmViXHU5YmUwXHU5YmRlXHU5YmU0XHU5YmU2XHU5YmUyXHU5YmYwXHU5YmQ0XHU5YmQ3XHU5YmVjXHU5YmRjXHU5YmQ5XHU5YmU1XHU5YmQ1XHU5YmUxXHU5YmRhXHU5ZDc3XHU5ZDgxXHU5ZDhhXHU5ZDg0XHU5ZDg4XHU5ZDcxXHU5ZDgw''@;'; put 'put ''XHU5ZDc4XHU5ZDg2XHU5ZDhiXHU5ZDhjXHU5ZDdkXHU5ZDZiXHU5ZDc0XHU5ZDc1XHU5ZDcwXHU5ZDY5XHU5ZDg1XHU5ZDczXHU5ZDdiXHU5ZDgyXHU5ZDZmXHU5ZDc5XHU5ZDdmXHU5ZDg3XHU5ZDY4XHU5ZTk0XHU5ZTkxXHU5ZWMwXHU5ZWZjXHU5ZjJkXHU5ZjQwXHU5ZjQxXHU5ZjRkXHU5''@;'; put 'put ''ZjU2XHU5ZjU3XHU5ZjU4XHU1MzM3XHU1NmIyIl0sWyJmNDQwIiwiXHU1NmI1XHU1NmIzXHU1OGUzXHU1YjQ1XHU1ZGM2XHU1ZGM3XHU1ZWVlXHU1ZWVmXHU1ZmMwXHU1ZmMxXHU2MWY5XHU2NTE3XHU2NTE2XHU2NTE1XHU2NTEzXHU2NWRmXHU2NmU4XHU2NmUzXHU2NmU0XHU2YWYzXHU2YWYw''@;'; put 'put ''XHU2YWVhXHU2YWU4XHU2YWY5XHU2YWYxXHU2YWVlXHU2YWVmXHU3MDNjXHU3MDM1XHU3MDJmXHU3MDM3XHU3MDM0XHU3MDMxXHU3MDQyXHU3MDM4XHU3MDNmXHU3MDNhXHU3MDM5XHU3MDQwXHU3MDNiXHU3MDMzXHU3MDQxXHU3MjEzXHU3MjE0XHU3MmE4XHU3MzdkXHU3MzdjXHU3NGJhXHU3''@;'; put 'put ''NmFiXHU3NmFhXHU3NmJlXHU3NmVkXHU3N2NjXHU3N2NlXHU3N2NmXHU3N2NkXHU3N2YyXHU3OTI1XHU3OTIzXHU3OTI3XHU3OTI4XHU3OTI0XHU3OTI5Il0sWyJmNGExIiwiXHU3OWIyXHU3YTZlXHU3YTZjXHU3YTZkXHU3YWY3XHU3YzQ5XHU3YzQ4XHU3YzRhXHU3YzQ3XHU3YzQ1XHU3Y2Vl''@;'; put 'put ''XHU3ZTdiXHU3ZTdlXHU3ZTgxXHU3ZTgwXHU3ZmJhXHU3ZmZmXHU4MDc5XHU4MWRiXHU4MWQ5XHU4MjBiXHU4MjY4XHU4MjY5XHU4NjIyXHU4NWZmXHU4NjAxXHU4NWZlXHU4NjFiXHU4NjAwXHU4NWY2XHU4NjA0XHU4NjA5XHU4NjA1XHU4NjBjXHU4NWZkXHU4ODE5XHU4ODEwXHU4ODExXHU4''@;'; put 'put ''ODE3XHU4ODEzXHU4ODE2XHU4OTYzXHU4OTY2XHU4OWI5XHU4OWY3XHU4YjYwXHU4YjZhXHU4YjVkXHU4YjY4XHU4YjYzXHU4YjY1XHU4YjY3XHU4YjZkXHU4ZGFlXHU4ZTg2XHU4ZTg4XHU4ZTg0XHU4ZjU5XHU4ZjU2XHU4ZjU3XHU4ZjU1XHU4ZjU4XHU4ZjVhXHU5MDhkXHU5MTQzXHU5MTQx''@;'; put 'put ''XHU5MWI3XHU5MWI1XHU5MWIyXHU5MWIzXHU5NDBiXHU5NDEzXHU5M2ZiXHU5NDIwXHU5NDBmXHU5NDE0XHU5M2ZlXHU5NDE1XHU5NDEwXHU5NDI4XHU5NDE5XHU5NDBkXHU5M2Y1XHU5NDAwXHU5M2Y3XHU5NDA3XHU5NDBlXHU5NDE2XHU5NDEyXHU5M2ZhXHU5NDA5XHU5M2Y4XHU5NDBhXHU5''@;'; put 'put ''M2ZmIl0sWyJmNTQwIiwiXHU5M2ZjXHU5NDBjXHU5M2Y2XHU5NDExXHU5NDA2XHU5NWRlXHU5NWUwXHU5NWRmXHU5NzJlXHU5NzJmXHU5N2I5XHU5N2JiXHU5N2ZkXHU5N2ZlXHU5ODYwXHU5ODYyXHU5ODYzXHU5ODVmXHU5OGMxXHU5OGMyXHU5OTUwXHU5OTRlXHU5OTU5XHU5OTRjXHU5OTRi''@;'; put 'put ''XHU5OTUzXHU5YTMyXHU5YTM0XHU5YTMxXHU5YTJjXHU5YTJhXHU5YTM2XHU5YTI5XHU5YTJlXHU5YTM4XHU5YTJkXHU5YWM3XHU5YWNhXHU5YWM2XHU5YjEwXHU5YjEyXHU5YjExXHU5YzBiXHU5YzA4XHU5YmY3XHU5YzA1XHU5YzEyXHU5YmY4XHU5YzQwXHU5YzA3XHU5YzBlXHU5YzA2XHU5''@;'; put 'put ''YzE3XHU5YzE0XHU5YzA5XHU5ZDlmXHU5ZDk5XHU5ZGE0XHU5ZDlkXHU5ZDkyXHU5ZDk4XHU5ZDkwXHU5ZDliIl0sWyJmNWExIiwiXHU5ZGEwXHU5ZDk0XHU5ZDljXHU5ZGFhXHU5ZDk3XHU5ZGExXHU5ZDlhXHU5ZGEyXHU5ZGE4XHU5ZDllXHU5ZGEzXHU5ZGJmXHU5ZGE5XHU5ZDk2XHU5ZGE2''@;'; put 'put ''XHU5ZGE3XHU5ZTk5XHU5ZTliXHU5ZTlhXHU5ZWU1XHU5ZWU0XHU5ZWU3XHU5ZWU2XHU5ZjMwXHU5ZjJlXHU5ZjViXHU5ZjYwXHU5ZjVlXHU5ZjVkXHU5ZjU5XHU5ZjkxXHU1MTNhXHU1MTM5XHU1Mjk4XHU1Mjk3XHU1NmMzXHU1NmJkXHU1NmJlXHU1YjQ4XHU1YjQ3XHU1ZGNiXHU1ZGNmXHU1''@;'; put 'put ''ZWYxXHU2MWZkXHU2NTFiXHU2YjAyXHU2YWZjXHU2YjAzXHU2YWY4XHU2YjAwXHU3MDQzXHU3MDQ0XHU3MDRhXHU3MDQ4XHU3MDQ5XHU3MDQ1XHU3MDQ2XHU3MjFkXHU3MjFhXHU3MjE5XHU3MzdlXHU3NTE3XHU3NjZhXHU3N2QwXHU3OTJkXHU3OTMxXHU3OTJmXHU3YzU0XHU3YzUzXHU3Y2Yy''@;'; put 'put ''XHU3ZThhXHU3ZTg3XHU3ZTg4XHU3ZThiXHU3ZTg2XHU3ZThkXHU3ZjRkXHU3ZmJiXHU4MDMwXHU4MWRkXHU4NjE4XHU4NjJhXHU4NjI2XHU4NjFmXHU4NjIzXHU4NjFjXHU4NjE5XHU4NjI3XHU4NjJlXHU4NjIxXHU4NjIwXHU4NjI5XHU4NjFlXHU4NjI1Il0sWyJmNjQwIiwiXHU4ODI5XHU4''@;'; put 'put ''ODFkXHU4ODFiXHU4ODIwXHU4ODI0XHU4ODFjXHU4ODJiXHU4ODRhXHU4OTZkXHU4OTY5XHU4OTZlXHU4OTZiXHU4OWZhXHU4Yjc5XHU4Yjc4XHU4YjQ1XHU4YjdhXHU4YjdiXHU4ZDEwXHU4ZDE0XHU4ZGFmXHU4ZThlXHU4ZThjXHU4ZjVlXHU4ZjViXHU4ZjVkXHU5MTQ2XHU5MTQ0XHU5MTQ1''@;'; put 'put ''XHU5MWI5XHU5NDNmXHU5NDNiXHU5NDM2XHU5NDI5XHU5NDNkXHU5NDNjXHU5NDMwXHU5NDM5XHU5NDJhXHU5NDM3XHU5NDJjXHU5NDQwXHU5NDMxXHU5NWU1XHU5NWU0XHU5NWUzXHU5NzM1XHU5NzNhXHU5N2JmXHU5N2UxXHU5ODY0XHU5OGM5XHU5OGM2XHU5OGMwXHU5OTU4XHU5OTU2XHU5''@;'; put 'put ''YTM5XHU5YTNkXHU5YTQ2XHU5YTQ0XHU5YTQyXHU5YTQxXHU5YTNhIl0sWyJmNmExIiwiXHU5YTNmXHU5YWNkXHU5YjE1XHU5YjE3XHU5YjE4XHU5YjE2XHU5YjNhXHU5YjUyXHU5YzJiXHU5YzFkXHU5YzFjXHU5YzJjXHU5YzIzXHU5YzI4XHU5YzI5XHU5YzI0XHU5YzIxXHU5ZGI3XHU5ZGI2''@;'; put 'put ''XHU5ZGJjXHU5ZGMxXHU5ZGM3XHU5ZGNhXHU5ZGNmXHU5ZGJlXHU5ZGM1XHU5ZGMzXHU5ZGJiXHU5ZGI1XHU5ZGNlXHU5ZGI5XHU5ZGJhXHU5ZGFjXHU5ZGM4XHU5ZGIxXHU5ZGFkXHU5ZGNjXHU5ZGIzXHU5ZGNkXHU5ZGIyXHU5ZTdhXHU5ZTljXHU5ZWViXHU5ZWVlXHU5ZWVkXHU5ZjFiXHU5''@;'; put 'put ''ZjE4XHU5ZjFhXHU5ZjMxXHU5ZjRlXHU5ZjY1XHU5ZjY0XHU5ZjkyXHU0ZWI5XHU1NmM2XHU1NmM1XHU1NmNiXHU1OTcxXHU1YjRiXHU1YjRjXHU1ZGQ1XHU1ZGQxXHU1ZWYyXHU2NTIxXHU2NTIwXHU2NTI2XHU2NTIyXHU2YjBiXHU2YjA4XHU2YjA5XHU2YzBkXHU3MDU1XHU3MDU2XHU3MDU3''@;'; put 'put ''XHU3MDUyXHU3MjFlXHU3MjFmXHU3MmE5XHU3MzdmXHU3NGQ4XHU3NGQ1XHU3NGQ5XHU3NGQ3XHU3NjZkXHU3NmFkXHU3OTM1XHU3OWI0XHU3YTcwXHU3YTcxXHU3YzU3XHU3YzVjXHU3YzU5XHU3YzViXHU3YzVhIl0sWyJmNzQwIiwiXHU3Y2Y0XHU3Y2YxXHU3ZTkxXHU3ZjRmXHU3Zjg3XHU4''@;'; put 'put ''MWRlXHU4MjZiXHU4NjM0XHU4NjM1XHU4NjMzXHU4NjJjXHU4NjMyXHU4NjM2XHU4ODJjXHU4ODI4XHU4ODI2XHU4ODJhXHU4ODI1XHU4OTcxXHU4OWJmXHU4OWJlXHU4OWZiXHU4YjdlXHU4Yjg0XHU4YjgyXHU4Yjg2XHU4Yjg1XHU4YjdmXHU4ZDE1XHU4ZTk1XHU4ZTk0XHU4ZTlhXHU4ZTky''@;'; put 'put ''XHU4ZTkwXHU4ZTk2XHU4ZTk3XHU4ZjYwXHU4ZjYyXHU5MTQ3XHU5NDRjXHU5NDUwXHU5NDRhXHU5NDRiXHU5NDRmXHU5NDQ3XHU5NDQ1XHU5NDQ4XHU5NDQ5XHU5NDQ2XHU5NzNmXHU5N2UzXHU5ODZhXHU5ODY5XHU5OGNiXHU5OTU0XHU5OTViXHU5YTRlXHU5YTUzXHU5YTU0XHU5YTRjXHU5''@;'; put 'put ''YTRmXHU5YTQ4XHU5YTRhIl0sWyJmN2ExIiwiXHU5YTQ5XHU5YTUyXHU5YTUwXHU5YWQwXHU5YjE5XHU5YjJiXHU5YjNiXHU5YjU2XHU5YjU1XHU5YzQ2XHU5YzQ4XHU5YzNmXHU5YzQ0XHU5YzM5XHU5YzMzXHU5YzQxXHU5YzNjXHU5YzM3XHU5YzM0XHU5YzMyXHU5YzNkXHU5YzM2XHU5ZGRi''@;'; put 'put ''XHU5ZGQyXHU5ZGRlXHU5ZGRhXHU5ZGNiXHU5ZGQwXHU5ZGRjXHU5ZGQxXHU5ZGRmXHU5ZGU5XHU5ZGQ5XHU5ZGQ4XHU5ZGQ2XHU5ZGY1XHU5ZGQ1XHU5ZGRkXHU5ZWI2XHU5ZWYwXHU5ZjM1XHU5ZjMzXHU5ZjMyXHU5ZjQyXHU5ZjZiXHU5Zjk1XHU5ZmEyXHU1MTNkXHU1Mjk5XHU1OGU4XHU1''@;'; put 'put ''OGU3XHU1OTcyXHU1YjRkXHU1ZGQ4XHU4ODJmXHU1ZjRmXHU2MjAxXHU2MjAzXHU2MjA0XHU2NTI5XHU2NTI1XHU2NTk2XHU2NmViXHU2YjExXHU2YjEyXHU2YjBmXHU2YmNhXHU3MDViXHU3MDVhXHU3MjIyXHU3MzgyXHU3MzgxXHU3MzgzXHU3NjcwXHU3N2Q0XHU3YzY3XHU3YzY2XHU3ZTk1''@;'; put 'put ''XHU4MjZjXHU4NjNhXHU4NjQwXHU4NjM5XHU4NjNjXHU4NjMxXHU4NjNiXHU4NjNlXHU4ODMwXHU4ODMyXHU4ODJlXHU4ODMzXHU4OTc2XHU4OTc0XHU4OTczXHU4OWZlIl0sWyJmODQwIiwiXHU4YjhjXHU4YjhlXHU4YjhiXHU4Yjg4XHU4YzQ1XHU4ZDE5XHU4ZTk4XHU4ZjY0XHU4ZjYzXHU5''@;'; put 'put ''MWJjXHU5NDYyXHU5NDU1XHU5NDVkXHU5NDU3XHU5NDVlXHU5N2M0XHU5N2M1XHU5ODAwXHU5YTU2XHU5YTU5XHU5YjFlXHU5YjFmXHU5YjIwXHU5YzUyXHU5YzU4XHU5YzUwXHU5YzRhXHU5YzRkXHU5YzRiXHU5YzU1XHU5YzU5XHU5YzRjXHU5YzRlXHU5ZGZiXHU5ZGY3XHU5ZGVmXHU5ZGUz''@;'; put 'put ''XHU5ZGViXHU5ZGY4XHU5ZGU0XHU5ZGY2XHU5ZGUxXHU5ZGVlXHU5ZGU2XHU5ZGYyXHU5ZGYwXHU5ZGUyXHU5ZGVjXHU5ZGY0XHU5ZGYzXHU5ZGU4XHU5ZGVkXHU5ZWMyXHU5ZWQwXHU5ZWYyXHU5ZWYzXHU5ZjA2XHU5ZjFjXHU5ZjM4XHU5ZjM3XHU5ZjM2XHU5ZjQzXHU5ZjRmIl0sWyJmOGEx''@;'; put 'put ''IiwiXHU5ZjcxXHU5ZjcwXHU5ZjZlXHU5ZjZmXHU1NmQzXHU1NmNkXHU1YjRlXHU1YzZkXHU2NTJkXHU2NmVkXHU2NmVlXHU2YjEzXHU3MDVmXHU3MDYxXHU3MDVkXHU3MDYwXHU3MjIzXHU3NGRiXHU3NGU1XHU3N2Q1XHU3OTM4XHU3OWI3XHU3OWI2XHU3YzZhXHU3ZTk3XHU3Zjg5XHU4MjZk''@;'; put 'put ''XHU4NjQzXHU4ODM4XHU4ODM3XHU4ODM1XHU4ODRiXHU4Yjk0XHU4Yjk1XHU4ZTllXHU4ZTlmXHU4ZWEwXHU4ZTlkXHU5MWJlXHU5MWJkXHU5MWMyXHU5NDZiXHU5NDY4XHU5NDY5XHU5NmU1XHU5NzQ2XHU5NzQzXHU5NzQ3XHU5N2M3XHU5N2U1XHU5YTVlXHU5YWQ1XHU5YjU5XHU5YzYzXHU5''@;'; put 'put ''YzY3XHU5YzY2XHU5YzYyXHU5YzVlXHU5YzYwXHU5ZTAyXHU5ZGZlXHU5ZTA3XHU5ZTAzXHU5ZTA2XHU5ZTA1XHU5ZTAwXHU5ZTAxXHU5ZTA5XHU5ZGZmXHU5ZGZkXHU5ZTA0XHU5ZWEwXHU5ZjFlXHU5ZjQ2XHU5Zjc0XHU5Zjc1XHU5Zjc2XHU1NmQ0XHU2NTJlXHU2NWI4XHU2YjE4XHU2YjE5''@;'; put 'put ''XHU2YjE3XHU2YjFhXHU3MDYyXHU3MjI2XHU3MmFhXHU3N2Q4XHU3N2Q5XHU3OTM5XHU3YzY5XHU3YzZiXHU3Y2Y2XHU3ZTlhIl0sWyJmOTQwIiwiXHU3ZTk4XHU3ZTliXHU3ZTk5XHU4MWUwXHU4MWUxXHU4NjQ2XHU4NjQ3XHU4NjQ4XHU4OTc5XHU4OTdhXHU4OTdjXHU4OTdiXHU4OWZmXHU4''@;'; put 'put ''Yjk4XHU4Yjk5XHU4ZWE1XHU4ZWE0XHU4ZWEzXHU5NDZlXHU5NDZkXHU5NDZmXHU5NDcxXHU5NDczXHU5NzQ5XHU5ODcyXHU5OTVmXHU5YzY4XHU5YzZlXHU5YzZkXHU5ZTBiXHU5ZTBkXHU5ZTEwXHU5ZTBmXHU5ZTEyXHU5ZTExXHU5ZWExXHU5ZWY1XHU5ZjA5XHU5ZjQ3XHU5Zjc4XHU5Zjdi''@;'; put 'put ''XHU5ZjdhXHU5Zjc5XHU1NzFlXHU3MDY2XHU3YzZmXHU4ODNjXHU4ZGIyXHU4ZWE2XHU5MWMzXHU5NDc0XHU5NDc4XHU5NDc2XHU5NDc1XHU5YTYwXHU5Yzc0XHU5YzczXHU5YzcxXHU5Yzc1XHU5ZTE0XHU5ZTEzXHU5ZWY2XHU5ZjBhIl0sWyJmOWExIiwiXHU5ZmE0XHU3MDY4XHU3MDY1XHU3''@;'; put 'put ''Y2Y3XHU4NjZhXHU4ODNlXHU4ODNkXHU4ODNmXHU4YjllXHU4YzljXHU4ZWE5XHU4ZWM5XHU5NzRiXHU5ODczXHU5ODc0XHU5OGNjXHU5OTYxXHU5OWFiXHU5YTY0XHU5YTY2XHU5YTY3XHU5YjI0XHU5ZTE1XHU5ZTE3XHU5ZjQ4XHU2MjA3XHU2YjFlXHU3MjI3XHU4NjRjXHU4ZWE4XHU5NDgy''@;'; put 'put ''XHU5NDgwXHU5NDgxXHU5YTY5XHU5YTY4XHU5YjJlXHU5ZTE5XHU3MjI5XHU4NjRiXHU4YjlmXHU5NDgzXHU5Yzc5XHU5ZWI3XHU3Njc1XHU5YTZiXHU5YzdhXHU5ZTFkXHU3MDY5XHU3MDZhXHU5ZWE0XHU5ZjdlXHU5ZjQ5XHU5Zjk4XHU3ODgxXHU5MmI5XHU4OGNmXHU1OGJiXHU2MDUyXHU3''@;'; put 'put ''Y2E3XHU1YWZhXHUyNTU0XHUyNTY2XHUyNTU3XHUyNTYwXHUyNTZjXHUyNTYzXHUyNTVhXHUyNTY5XHUyNTVkXHUyNTUyXHUyNTY0XHUyNTU1XHUyNTVlXHUyNTZhXHUyNTYxXHUyNTU4XHUyNTY3XHUyNTViXHUyNTUzXHUyNTY1XHUyNTU2XHUyNTVmXHUyNTZiXHUyNTYyXHUyNTU5XHUyNTY4''@;'; put 'put ''XHUyNTVjXHUyNTUxXHUyNTUwXHUyNTZkXHUyNTZlXHUyNTcwXHUyNTZmXHUyNTkzIl1dJyl9LDcyMzc2OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgidXotbGF0biIse21vbnRoczoiWWFudmFyX0ZldnJhbF9NYXJ0X0FwcmVsX01h''@;'; put 'put ''eV9JeXVuX0l5dWxfQXZndXN0X1NlbnRhYnJfT2t0YWJyX05veWFicl9EZWthYnIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Illhbl9GZXZfTWFyX0Fwcl9NYXlfSXl1bl9JeXVsX0F2Z19TZW5fT2t0X05veV9EZWsiLnNwbGl0KCJfIiksd2Vla2RheXM6Illha3NoYW5iYV9EdXNoYW5iYV9T''@;'; put 'put ''ZXNoYW5iYV9DaG9yc2hhbmJhX1BheXNoYW5iYV9KdW1hX1NoYW5iYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJZYWtfRHVzaF9TZXNoX0Nob3JfUGF5X0p1bV9TaGFuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJZYV9EdV9TZV9DaG9fUGFfSnVfU2hhIi5zcGxpdCgiXyIpLGxvbmdE''@;'; put 'put ''YXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiRCBNTU1NIFlZWVksIGRkZGQgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0J1Z3VuIHNvYXRdIExUIFtkYV0i''@;'; put 'put ''LG5leHREYXk6IltFcnRhZ2FdIExUIFtkYV0iLG5leHRXZWVrOiJkZGRkIFtrdW5pIHNvYXRdIExUIFtkYV0iLGxhc3REYXk6IltLZWNoYSBzb2F0XSBMVCBbZGFdIixsYXN0V2VlazoiW08ndGdhbl0gZGRkZCBba3VuaSBzb2F0XSBMVCBbZGFdIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGlt''@;'; put 'put ''ZTp7ZnV0dXJlOiJZYXFpbiAlcyBpY2hpZGEiLHBhc3Q6IkJpciBuZWNoYSAlcyBvbGRpbiIsczoic29uaXlhIixzczoiJWQgc29uaXlhIixtOiJiaXIgZGFxaXFhIixtbToiJWQgZGFxaXFhIixoOiJiaXIgc29hdCIsaGg6IiVkIHNvYXQiLGQ6ImJpciBrdW4iLGRkOiIlZCBrdW4iLE06ImJp''@;'; put 'put ''ciBveSIsTU06IiVkIG95Iix5OiJiaXIgeWlsIix5eToiJWQgeWlsIn0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGIoOTc1ODYpKX0sNzI1Njc6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJvYy1sbmMiLHttb250aHM6e3N0YW5kYWxv''@;'; put 'put ''bmU6ImdlbmlceGU4cl9mZWJyaVx4ZThyX21hclx4ZTdfYWJyaWxfbWFpX2p1bmhfanVsaGV0X2Fnb3N0X3NldGVtYnJlX29jdFx4ZjJicmVfbm92ZW1icmVfZGVjZW1icmUiLnNwbGl0KCJfIiksZm9ybWF0OiJkZSBnZW5pXHhlOHJfZGUgZmVicmlceGU4cl9kZSBtYXJceGU3X2QnYWJyaWxf''@;'; put 'put ''ZGUgbWFpX2RlIGp1bmhfZGUganVsaGV0X2QnYWdvc3RfZGUgc2V0ZW1icmVfZCdvY3RceGYyYnJlX2RlIG5vdmVtYnJlX2RlIGRlY2VtYnJlIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9EW29EXT8oXHMpK01NTU0vfSxtb250aHNTaG9ydDoiZ2VuLl9mZWJyLl9tYXJceGU3X2Fici5fbWFpX2p1''@;'; put 'put ''bmhfanVsaC5fYWdvLl9zZXQuX29jdC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6ImRpbWVuZ2VfZGlsdW5zX2RpbWFyc19kaW1ceGU4Y3Jlc19kaWpceGYydXNfZGl2ZW5kcmVzX2Rpc3NhYnRlIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6''@;'; put 'put ''ImRnLl9kbC5fZG0uX2RjLl9kai5fZHYuX2RzLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZGdfZGxfZG1fZGNfZGpfZHZfZHMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixM''@;'; put 'put ''TDoiRCBNTU1NIFtkZV0gWVlZWSIsbGw6IkQgTU1NIFlZWVkiLExMTDoiRCBNTU1NIFtkZV0gWVlZWSBbYV0gSDptbSIsbGxsOiJEIE1NTSBZWVlZLCBIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBbZGVdIFlZWVkgW2FdIEg6bW0iLGxsbGw6ImRkZCBEIE1NTSBZWVlZLCBIOm1tIn0sY2FsZW5k''@;'; put 'put ''YXI6e3NhbWVEYXk6Ilt1XHhlOGkgYV0gTFQiLG5leHREYXk6IltkZW1hbiBhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2FdIExUIixsYXN0RGF5OiJbaVx4ZThyIGFdIExUIixsYXN0V2VlazoiZGRkZCBbcGFzc2F0IGFdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJk''@;'; put 'put ''J2FxdVx4ZWQgJXMiLHBhc3Q6ImZhICVzIixzOiJ1bmFzIHNlZ29uZGFzIixzczoiJWQgc2Vnb25kYXMiLG06InVuYSBtaW51dGEiLG1tOiIlZCBtaW51dGFzIixoOiJ1bmEgb3JhIixoaDoiJWQgb3JhcyIsZDoidW4gam9ybiIsZGQ6IiVkIGpvcm5zIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNl''@;'; put 'put ''cyIseToidW4gYW4iLHl5OiIlZCBhbnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHJ8bnx0fFx4ZTh8YSkvLG9yZGluYWw6ZnVuY3Rpb24ocCxWKXt2YXIgdz0xPT09cD8iciI6Mj09PXA/Im4iOjM9PT1wPyJyIjo0PT09cD8idCI6Ilx4ZTgiO3JldHVybigidyI9PT1WfHwi''@;'; put 'put ''VyI9PT1WKSYmKHc9ImEiKSxwK3d9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDcyNTc2OihjZSxYLGIpPT57dmFyIEk9YigyNzA1NCkuQnVmZmVyO2Z1bmN0aW9uIF8ocCxWLHcpe3ZhciBGPXAuX2NpcGhlci5lbmNyeXB0QmxvY2socC5fcHJldilbMF1eVjtyZXR1cm4gcC5f''@;'; put 'put ''cHJldj1JLmNvbmNhdChbcC5fcHJldi5zbGljZSgxKSxJLmZyb20oW3c/VjpGXSldKSxGfVguZW5jcnlwdD1mdW5jdGlvbihwLFYsdyl7Zm9yKHZhciBQPVYubGVuZ3RoLEY9SS5hbGxvY1Vuc2FmZShQKSxSPS0xOysrUjxQOylGW1JdPV8ocCxWW1JdLHcpO3JldHVybiBGfX0sNzI2MDg6ZnVu''@;'; put 'put ''Y3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPVsiXHUwNjJjXHUwNjQ2XHUwNjQ4XHUwNjMxXHUwNjRhIiwiXHUwNjQxXHUwNjRhXHUwNjI4XHUwNjMxXHUwNjQ4XHUwNjMxXHUwNjRhIiwiXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjg2IiwiXHUwNjI3XHUwNjdl''@;'; put 'put ''XHUwNjMxXHUwNjRhXHUwNjQ0IiwiXHUwNjQ1XHUwNjI2XHUwNjRhIiwiXHUwNjJjXHUwNjQ4XHUwNjQ2IiwiXHUwNjJjXHUwNjQ4XHUwNjQ0XHUwNjI3XHUwNjIxXHUwNjUwIiwiXHUwNjIyXHUwNmFmXHUwNjMzXHUwNjdkIiwiXHUwNjMzXHUwNjRhXHUwNjdlXHUwNjdkXHUwNjQ1XHUwNjI4''@;'; put 'put ''XHUwNjMxIiwiXHUwNjIyXHUwNmFhXHUwNjdkXHUwNjQ4XHUwNjI4XHUwNjMxIiwiXHUwNjQ2XHUwNjQ4XHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUwNjhhXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIl0scD1bIlx1MDYyMlx1MDY4Nlx1MDYzMSIsIlx1MDYzM1x1MDY0OFx1MDY0NVx1MDYzMSIs''@;'; put 'put ''Ilx1MDYyN1x1MDZiMVx1MDYyN1x1MDYzMVx1MDY0OCIsIlx1MDYyN1x1MDYzMVx1MDYyOFx1MDYzOSIsIlx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzMyIsIlx1MDYyY1x1MDY0NVx1MDYzOSIsIlx1MDY4N1x1MDY0Nlx1MDY4N1x1MDYzMSJdO0kuZGVmaW5lTG9jYWxlKCJzZCIse21vbnRoczpf''@;'; put 'put ''LG1vbnRoc1Nob3J0Ol8sd2Vla2RheXM6cCx3ZWVrZGF5c1Nob3J0OnAsd2Vla2RheXNNaW46cCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGRc''@;'; put 'put ''dTA2MGMgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2MzVcdTA2MjhcdTA2MmR8XHUwNjM0XHUwNjI3XHUwNjQ1Lyxpc1BNOmZ1bmN0aW9uKHcpe3JldHVybiJcdTA2MzRcdTA2MjdcdTA2NDUiPT09d30sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDEy''@;'; put 'put ''PyJcdTA2MzVcdTA2MjhcdTA2MmQiOiJcdTA2MzRcdTA2MjdcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY4NF0gTFQiLG5leHREYXk6IltcdTA2MzNcdTA2ODBcdTA2MjdcdTA2YmJcdTA2NGFdIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjI3XHUwNmIzXHUwNjRhXHUw''@;'; put 'put ''NjQ2IFx1MDY0N1x1MDY0MVx1MDYyYVx1MDY0YSBcdTA2MmFcdTA2NGFdIExUIixsYXN0RGF5OiJbXHUwNmFhXHUwNjI3XHUwNjQ0XHUwNjQ3XHUwNjQ3XSBMVCIsbGFzdFdlZWs6IltcdTA2YWZcdTA2MzJcdTA2MzFcdTA2NGFcdTA2NDQgXHUwNjQ3XHUwNjQxXHUwNjJhXHUwNjRhXSBkZGRk''@;'; put 'put ''IFtcdTA2MmFcdTA2NGFdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA2N2VcdTA2NDhcdTA2MjEiLHBhc3Q6IiVzIFx1MDYyN1x1MDZiMyIsczoiXHUwNjg2XHUwNjQ2XHUwNjJmIFx1MDYzM1x1MDY0YVx1MDZhYVx1MDY0Nlx1MDY4YSIsc3M6IiVkIFx1''@;'; put 'put ''MDYzM1x1MDY0YVx1MDZhYVx1MDY0Nlx1MDY4YSIsbToiXHUwNjQ3XHUwNmFhIFx1MDY0NVx1MDY0Nlx1MDY3ZCIsbW06IiVkIFx1MDY0NVx1MDY0Nlx1MDY3ZCIsaDoiXHUwNjQ3XHUwNmFhIFx1MDZhYVx1MDY0NFx1MDYyN1x1MDZhYSIsaGg6IiVkIFx1MDZhYVx1MDY0NFx1MDYyN1x1MDZh''@;'; put 'put ''YSIsZDoiXHUwNjQ3XHUwNmFhIFx1MDY4Zlx1MDY0YVx1MDY0Nlx1MDY0N1x1MDY0NiIsZGQ6IiVkIFx1MDY4Zlx1MDY0YVx1MDY0Nlx1MDY0N1x1MDY0NiIsTToiXHUwNjQ3XHUwNmFhIFx1MDY0NVx1MDY0N1x1MDY0YVx1MDY0Nlx1MDY0OCIsTU06IiVkIFx1MDY0NVx1MDY0N1x1MDY0YVx1''@;'; put 'put ''MDY0Nlx1MDYyNyIseToiXHUwNjQ3XHUwNmFhIFx1MDYzM1x1MDYyN1x1MDY0NCIseXk6IiVkIFx1MDYzM1x1MDYyN1x1MDY0NCJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVw''@;'; put 'put ''bGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sNzI2NTU6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJ5byIse21vbnRoczoiU1x1MWViOVx1MDMwMXJcdTFlYjlcdTAzMDFfRVx1MDMw''@;'; put 'put ''MHJlXHUwMzAwbGVcdTAzMDBfXHUxZWI4clx1MWViOVx1MDMwMG5hXHUwMzAwX0lcdTAzMDBnYmVcdTAzMDFfRVx1MDMwMGJpYmlfT1x1MDMwMGt1XHUwMzAwZHVfQWdcdTFlYjltb19PXHUwMzAwZ3VcdTAzMDFuX093ZXdlX1x1MWVjY1x1MDMwMHdhXHUwMzAwcmFcdTAzMDBfQmVcdTAzMDFs''@;'; put 'put ''dVx1MDMwMV9cdTFlY2NcdTAzMDBwXHUxZWI5XHUwMzAwXHUwMzAwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJTXHUxZWI5XHUwMzAxcl9FXHUwMzAwcmxfXHUxZWI4cm5fSVx1MDMwMGdiX0VcdTAzMDBiaV9PXHUwMzAwa3VcdTAzMDBfQWdcdTFlYjlfT1x1MDMwMGd1XHUwMzAxX093ZV9c''@;'; put 'put ''dTFlY2NcdTAzMDB3YVx1MDMwMF9CZVx1MDMwMWxfXHUxZWNjXHUwMzAwcFx1MWViOVx1MDMwMFx1MDMwMCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiQVx1MDMwMGlcdTAzMDBrdVx1MDMwMV9BamVcdTAzMDFfSVx1MDMwMHNcdTFlYjlcdTAzMDFndW5fXHUxZWNjalx1MWVjZFx1MDMwMXJ1XHUw''@;'; put 'put ''MzAxX1x1MWVjY2pcdTFlY2RcdTAzMDFiXHUxZWNkX1x1MWViOHRpXHUwMzAwX0FcdTAzMDBiYVx1MDMwMW1cdTFlYjlcdTAzMDF0YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJBXHUwMzAwaVx1MDMwMGtfQWplXHUwMzAxX0lcdTAzMDBzXHUxZWI5XHUwMzAxX1x1MWVjY2pyX1x1MWVj''@;'; put 'put ''Y2piX1x1MWViOHRpXHUwMzAwX0FcdTAzMDBiYVx1MDMwMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiQVx1MDMwMGlcdTAzMDBfQWpfSVx1MDMwMHNfXHUxZWNjcl9cdTFlY2NiX1x1MWViOHRfQVx1MDMwMGIiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoi''@;'; put 'put ''aDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW09cdTAzMDBuaVx1MDMwMCBuaV0gTFQiLG5leHREYXk6IltcdTFlY2NcdTAz''@;'; put 'put ''MDBsYSBuaV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTFlY2NzXHUxZWI5XHUwMzAwIHRvXHUwMzAxbidiXHUxZWNkXSBbbmldIExUIixsYXN0RGF5OiJbQVx1MDMwMG5hIG5pXSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MWVjY3NcdTFlYjlcdTAzMDAgdG9cdTAzMDFsXHUxZWNkXHUwMzAxXSBb''@;'; put 'put ''bmldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJuaVx1MDMwMSAlcyIscGFzdDoiJXMga1x1MWVjZGphXHUwMzAxIixzOiJpXHUwMzAwc1x1MWViOWp1XHUwMzAxIGFheWFcdTAzMDEgZGllIixzczoiYWF5YVx1MDMwMSAlZCIsbToiaVx1MDMwMHNcdTFlYjlqdVx1''@;'; put 'put ''MDMwMSBrYW4iLG1tOiJpXHUwMzAwc1x1MWViOWp1XHUwMzAxICVkIixoOiJ3YVx1MDMwMWthdGkga2FuIixoaDoid2FcdTAzMDFrYXRpICVkIixkOiJcdTFlY2RqXHUxZWNkXHUwMzAxIGthbiIsZGQ6Ilx1MWVjZGpcdTFlY2RcdTAzMDEgJWQiLE06Im9zdVx1MDMwMCBrYW4iLE1NOiJvc3Vc''@;'; put 'put ''dTAzMDAgJWQiLHk6Ilx1MWVjZGR1XHUwMzAxbiBrYW4iLHl5OiJcdTFlY2RkdVx1MDMwMW4gJWQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cdTFlY2RqXHUxZWNkXHUwMzAxXHNcZHsxLDJ9LyxvcmRpbmFsOiJcdTFlY2RqXHUxZWNkXHUwMzAxICVkIix3ZWVrOntkb3c6MSxkb3k6NH19''@;'; put 'put ''KX0oYig5NzU4NikpfSw3MjY4ODpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6Ilx1MGJlNyIsMjoiXHUwYmU4IiwzOiJcdTBiZTkiLDQ6Ilx1MGJlYSIsNToiXHUwYmViIiw2OiJcdTBiZWMiLDc6Ilx1MGJlZCIsODoiXHUwYmVlIiw5OiJcdTBi''@;'; put 'put ''ZWYiLDA6Ilx1MGJlNiJ9LHA9eyJcdTBiZTciOiIxIiwiXHUwYmU4IjoiMiIsIlx1MGJlOSI6IjMiLCJcdTBiZWEiOiI0IiwiXHUwYmViIjoiNSIsIlx1MGJlYyI6IjYiLCJcdTBiZWQiOiI3IiwiXHUwYmVlIjoiOCIsIlx1MGJlZiI6IjkiLCJcdTBiZTYiOiIwIn07SS5kZWZpbmVMb2NhbGUo''@;'; put 'put ''InRhIix7bW9udGhzOiJcdTBiOWNcdTBiYTlcdTBiYjVcdTBiYjBcdTBiYmZfXHUwYmFhXHUwYmJmXHUwYmFhXHUwYmNkXHUwYmIwXHUwYmI1XHUwYmIwXHUwYmJmX1x1MGJhZVx1MGJiZVx1MGJiMFx1MGJjZFx1MGI5YVx1MGJjZF9cdTBiOGZcdTBiYWFcdTBiY2RcdTBiYjBcdTBiYjJcdTBi''@;'; put 'put ''Y2RfXHUwYmFlXHUwYmM3X1x1MGI5Y1x1MGJjMlx1MGJhOVx1MGJjZF9cdTBiOWNcdTBiYzJcdTBiYjJcdTBiYzhfXHUwYjg2XHUwYjk1XHUwYmI4XHUwYmNkXHUwYjlmXHUwYmNkX1x1MGI5YVx1MGJjNlx1MGJhYVx1MGJjZFx1MGI5Zlx1MGJjNlx1MGJhZVx1MGJjZFx1MGJhYVx1MGJiMFx1''@;'; put 'put ''MGJjZF9cdTBiODVcdTBiOTVcdTBiY2RcdTBiOWZcdTBiYzdcdTBiYmVcdTBiYWFcdTBiYjBcdTBiY2RfXHUwYmE4XHUwYmI1XHUwYmFlXHUwYmNkXHUwYmFhXHUwYmIwXHUwYmNkX1x1MGI5Zlx1MGJiZlx1MGI5YVx1MGJhZVx1MGJjZFx1MGJhYVx1MGJiMFx1MGJjZCIuc3BsaXQoIl8iKSxt''@;'; put 'put ''b250aHNTaG9ydDoiXHUwYjljXHUwYmE5XHUwYmI1XHUwYmIwXHUwYmJmX1x1MGJhYVx1MGJiZlx1MGJhYVx1MGJjZFx1MGJiMFx1MGJiNVx1MGJiMFx1MGJiZl9cdTBiYWVcdTBiYmVcdTBiYjBcdTBiY2RcdTBiOWFcdTBiY2RfXHUwYjhmXHUwYmFhXHUwYmNkXHUwYmIwXHUwYmIyXHUwYmNk''@;'; put 'put ''X1x1MGJhZVx1MGJjN19cdTBiOWNcdTBiYzJcdTBiYTlcdTBiY2RfXHUwYjljXHUwYmMyXHUwYmIyXHUwYmM4X1x1MGI4Nlx1MGI5NVx1MGJiOFx1MGJjZFx1MGI5Zlx1MGJjZF9cdTBiOWFcdTBiYzZcdTBiYWFcdTBiY2RcdTBiOWZcdTBiYzZcdTBiYWVcdTBiY2RcdTBiYWFcdTBiYjBcdTBi''@;'; put 'put ''Y2RfXHUwYjg1XHUwYjk1XHUwYmNkXHUwYjlmXHUwYmM3XHUwYmJlXHUwYmFhXHUwYmIwXHUwYmNkX1x1MGJhOFx1MGJiNVx1MGJhZVx1MGJjZFx1MGJhYVx1MGJiMFx1MGJjZF9cdTBiOWZcdTBiYmZcdTBiOWFcdTBiYWVcdTBiY2RcdTBiYWFcdTBiYjBcdTBiY2QiLnNwbGl0KCJfIiksd2Vl''@;'; put 'put ''a2RheXM6Ilx1MGI5ZVx1MGJiZVx1MGJhZlx1MGJiZlx1MGJiMVx1MGJjZFx1MGJiMVx1MGJjMVx1MGI5NVx1MGJjZFx1MGI5NVx1MGJiZlx1MGJiNFx1MGJhZVx1MGJjOF9cdTBiYTRcdTBiYmZcdTBiOTlcdTBiY2RcdTBiOTVcdTBiOWZcdTBiY2RcdTBiOTVcdTBiYmZcdTBiYjRcdTBiYWVc''@;'; put 'put ''dTBiYzhfXHUwYjlhXHUwYmM2XHUwYmI1XHUwYmNkXHUwYmI1XHUwYmJlXHUwYmFmXHUwYmNkXHUwYjk1XHUwYmJmXHUwYmI0XHUwYmFlXHUwYmM4X1x1MGJhYVx1MGJjMVx1MGJhNFx1MGJhOVx1MGJjZFx1MGI5NVx1MGJiZlx1MGJiNFx1MGJhZVx1MGJjOF9cdTBiYjVcdTBiYmZcdTBiYWZc''@;'; put 'put ''dTBiYmVcdTBiYjRcdTBiOTVcdTBiY2RcdTBiOTVcdTBiYmZcdTBiYjRcdTBiYWVcdTBiYzhfXHUwYmI1XHUwYmM2XHUwYmIzXHUwYmNkXHUwYmIzXHUwYmJmXHUwYjk1XHUwYmNkXHUwYjk1XHUwYmJmXHUwYmI0XHUwYmFlXHUwYmM4X1x1MGI5YVx1MGJhOVx1MGJiZlx1MGI5NVx1MGJjZFx1''@;'; put 'put ''MGI5NVx1MGJiZlx1MGJiNFx1MGJhZVx1MGJjOCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBiOWVcdTBiYmVcdTBiYWZcdTBiYmZcdTBiYjFcdTBiYzFfXHUwYmE0XHUwYmJmXHUwYjk5XHUwYmNkXHUwYjk1XHUwYmIzXHUwYmNkX1x1MGI5YVx1MGJjNlx1MGJiNVx1MGJjZFx1MGJi''@;'; put 'put ''NVx1MGJiZVx1MGJhZlx1MGJjZF9cdTBiYWFcdTBiYzFcdTBiYTRcdTBiYTlcdTBiY2RfXHUwYmI1XHUwYmJmXHUwYmFmXHUwYmJlXHUwYmI0XHUwYmE5XHUwYmNkX1x1MGJiNVx1MGJjNlx1MGJiM1x1MGJjZFx1MGJiM1x1MGJiZl9cdTBiOWFcdTBiYTlcdTBiYmYiLnNwbGl0KCJfIiksd2Vl''@;'; put 'put ''a2RheXNNaW46Ilx1MGI5ZVx1MGJiZV9cdTBiYTRcdTBiYmZfXHUwYjlhXHUwYmM2X1x1MGJhYVx1MGJjMV9cdTBiYjVcdTBiYmZfXHUwYmI1XHUwYmM2X1x1MGI5YSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixM''@;'; put 'put ''TDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGI4N1x1MGJhOVx1MGJjZFx1MGJiMVx1MGJjMV0gTFQiLG5leHREYXk6IltcdTBiYThcdTBiYmVcdTBiYjNcdTBiYzhd''@;'; put 'put ''IExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTBiYThcdTBiYzdcdTBiYjFcdTBiY2RcdTBiYjFcdTBiYzFdIExUIixsYXN0V2VlazoiW1x1MGI5NVx1MGI5Zlx1MGJhOFx1MGJjZFx1MGJhNCBcdTBiYjVcdTBiYmVcdTBiYjBcdTBiYWVcdTBiY2RdIGRkZGQsIExUIixzYW1l''@;'; put 'put ''RWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTBiODdcdTBiYjJcdTBiY2QiLHBhc3Q6IiVzIFx1MGJhZVx1MGJjMVx1MGJhOVx1MGJjZCIsczoiXHUwYjkyXHUwYmIwXHUwYmMxIFx1MGI5YVx1MGJiZlx1MGJiMiBcdTBiYjVcdTBiYmZcdTBiYThcdTBiYmVcdTBiOWZcdTBi''@;'; put 'put ''YmZcdTBiOTVcdTBiYjNcdTBiY2QiLHNzOiIlZCBcdTBiYjVcdTBiYmZcdTBiYThcdTBiYmVcdTBiOWZcdTBiYmZcdTBiOTVcdTBiYjNcdTBiY2QiLG06Ilx1MGI5Mlx1MGJiMFx1MGJjMSBcdTBiYThcdTBiYmZcdTBiYWVcdTBiYmZcdTBiOWZcdTBiYWVcdTBiY2QiLG1tOiIlZCBcdTBiYThc''@;'; put 'put ''dTBiYmZcdTBiYWVcdTBiYmZcdTBiOWZcdTBiOTlcdTBiY2RcdTBiOTVcdTBiYjNcdTBiY2QiLGg6Ilx1MGI5Mlx1MGJiMFx1MGJjMSBcdTBiYWVcdTBiYTNcdTBiYmYgXHUwYmE4XHUwYmM3XHUwYmIwXHUwYmFlXHUwYmNkIixoaDoiJWQgXHUwYmFlXHUwYmEzXHUwYmJmIFx1MGJhOFx1MGJj''@;'; put 'put ''N1x1MGJiMFx1MGJhZVx1MGJjZCIsZDoiXHUwYjkyXHUwYmIwXHUwYmMxIFx1MGJhOFx1MGJiZVx1MGJiM1x1MGJjZCIsZGQ6IiVkIFx1MGJhOFx1MGJiZVx1MGI5Zlx1MGJjZFx1MGI5NVx1MGJiM1x1MGJjZCIsTToiXHUwYjkyXHUwYmIwXHUwYmMxIFx1MGJhZVx1MGJiZVx1MGJhNFx1MGJh''@;'; put 'put ''ZVx1MGJjZCIsTU06IiVkIFx1MGJhZVx1MGJiZVx1MGJhNFx1MGI5OVx1MGJjZFx1MGI5NVx1MGJiM1x1MGJjZCIseToiXHUwYjkyXHUwYmIwXHUwYmMxIFx1MGJiNVx1MGJiMFx1MGJjMVx1MGI5Zlx1MGJhZVx1MGJjZCIseXk6IiVkIFx1MGI4Nlx1MGJhM1x1MGJjZFx1MGI5Zlx1MGJjMVx1''@;'; put 'put ''MGI5NVx1MGJiM1x1MGJjZCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cdTBiYjVcdTBiYTRcdTBiYzEvLG9yZGluYWw6ZnVuY3Rpb24odyl7cmV0dXJuIHcrIlx1MGJiNVx1MGJhNFx1MGJjMSJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTBi''@;'; put 'put ''ZTdcdTBiZThcdTBiZTlcdTBiZWFcdTBiZWJcdTBiZWNcdTBiZWRcdTBiZWVcdTBiZWZcdTBiZTZdL2csZnVuY3Rpb24oUCl7cmV0dXJuIHBbUF19KX0scG9zdGZvcm1hdDpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKFApe3JldHVybiBfW1BdfSl9LG1lcmlk''@;'; put 'put ''aWVtUGFyc2U6L1x1MGJhZlx1MGJiZVx1MGJhZVx1MGJhZVx1MGJjZHxcdTBiYjVcdTBiYzhcdTBiOTVcdTBiYjFcdTBiYzh8XHUwYjk1XHUwYmJlXHUwYmIyXHUwYmM4fFx1MGJhOFx1MGJhM1x1MGJjZFx1MGJhYVx1MGI5NVx1MGJiMlx1MGJjZHxcdTBiOGVcdTBiYjFcdTBiY2RcdTBiYWFc''@;'; put 'put ''dTBiYmVcdTBiOWZcdTBiYzF8XHUwYmFlXHUwYmJlXHUwYmIyXHUwYmM4LyxtZXJpZGllbTpmdW5jdGlvbih3LFAsRil7cmV0dXJuIHc8Mj8iIFx1MGJhZlx1MGJiZVx1MGJhZVx1MGJhZVx1MGJjZCI6dzw2PyIgXHUwYmI1XHUwYmM4XHUwYjk1XHUwYmIxXHUwYmM4Ijp3PDEwPyIgXHUwYjk1''@;'; put 'put ''XHUwYmJlXHUwYmIyXHUwYmM4Ijp3PDE0PyIgXHUwYmE4XHUwYmEzXHUwYmNkXHUwYmFhXHUwYjk1XHUwYmIyXHUwYmNkIjp3PDE4PyIgXHUwYjhlXHUwYmIxXHUwYmNkXHUwYmFhXHUwYmJlXHUwYjlmXHUwYmMxIjp3PDIyPyIgXHUwYmFlXHUwYmJlXHUwYmIyXHUwYmM4IjoiIFx1MGJhZlx1''@;'; put 'put ''MGJiZVx1MGJhZVx1MGJhZVx1MGJjZCJ9LG1lcmlkaWVtSG91cjpmdW5jdGlvbih3LFApe3JldHVybiAxMj09PXcmJih3PTApLCJcdTBiYWZcdTBiYmVcdTBiYWVcdTBiYWVcdTBiY2QiPT09UD93PDI/dzp3KzEyOiJcdTBiYjVcdTBiYzhcdTBiOTVcdTBiYjFcdTBiYzgiPT09UHx8Ilx1MGI5''@;'; put 'put ''NVx1MGJiZVx1MGJiMlx1MGJjOCI9PT1QfHwiXHUwYmE4XHUwYmEzXHUwYmNkXHUwYmFhXHUwYjk1XHUwYmIyXHUwYmNkIj09PVAmJnc+PTEwP3c6dysxMn0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KGIoOTc1ODYpKX0sNzI4OTM6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7Zm9yKHZhciBJPVti''@;'; put 'put ''KDE1MjU5KSxiKDM1MDg5KSxiKDcxNzUpLGIoOTc0NyksYig1ODY3NyksYig3NjIzKSxiKDMwMTg3KSxiKDkzNjk0KSxiKDQ1Mjc4KV0sXz0wO188SS5sZW5ndGg7XysrKXt2YXIgcD1JW19dO2Zvcih2YXIgViBpbiBwKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwLFYp''@;'; put 'put ''JiYoWFtWXT1wW1ZdKX19LDcyOTg1OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUxMDQxIiwyOiJcdTEwNDIiLDM6Ilx1MTA0MyIsNDoiXHUxMDQ0Iiw1OiJcdTEwNDUiLDY6Ilx1MTA0NiIsNzoiXHUxMDQ3Iiw4OiJcdTEwNDgiLDk6Ilx1''@;'; put 'put ''MTA0OSIsMDoiXHUxMDQwIn0scD17Ilx1MTA0MSI6IjEiLCJcdTEwNDIiOiIyIiwiXHUxMDQzIjoiMyIsIlx1MTA0NCI6IjQiLCJcdTEwNDUiOiI1IiwiXHUxMDQ2IjoiNiIsIlx1MTA0NyI6IjciLCJcdTEwNDgiOiI4IiwiXHUxMDQ5IjoiOSIsIlx1MTA0MCI6IjAifTtJLmRlZmluZUxvY2Fs''@;'; put 'put ''ZSgibXkiLHttb250aHM6Ilx1MTAwN1x1MTAxNFx1MTAzYVx1MTAxNFx1MTAxZFx1MTAyYlx1MTAxYlx1MTAyZV9cdTEwMTZcdTEwMzFcdTEwMTZcdTEwMzFcdTEwMmNcdTEwM2FcdTEwMWRcdTEwMmJcdTEwMWJcdTEwMmVfXHUxMDE5XHUxMDEwXHUxMDNhX1x1MTAyN1x1MTAxNVx1MTAzY1x1''@;'; put 'put ''MTAyZV9cdTEwMTlcdTEwMzFfXHUxMDA3XHUxMDNkXHUxMDE0XHUxMDNhX1x1MTAwN1x1MTAzMFx1MTAxY1x1MTAyZFx1MTAyZlx1MTAwNFx1MTAzYV9cdTEwMWVcdTEwM2NcdTEwMDJcdTEwMmZcdTEwMTBcdTEwM2FfXHUxMDA1XHUxMDAwXHUxMDNhXHUxMDEwXHUxMDA0XHUxMDNhXHUxMDE4''@;'; put 'put ''XHUxMDJjX1x1MTAyMVx1MTAzMVx1MTAyY1x1MTAwMFx1MTAzYVx1MTAxMFx1MTAyZFx1MTAyZlx1MTAxOFx1MTAyY19cdTEwMTRcdTEwMmRcdTEwMmZcdTEwMWRcdTEwMDRcdTEwM2FcdTEwMThcdTEwMmNfXHUxMDEyXHUxMDJlXHUxMDA3XHUxMDA0XHUxMDNhXHUxMDE4XHUxMDJjIi5zcGxp''@;'; put 'put ''dCgiXyIpLG1vbnRoc1Nob3J0OiJcdTEwMDdcdTEwMTRcdTEwM2FfXHUxMDE2XHUxMDMxX1x1MTAxOVx1MTAxMFx1MTAzYV9cdTEwMTVcdTEwM2NcdTEwMmVfXHUxMDE5XHUxMDMxX1x1MTAwN1x1MTAzZFx1MTAxNFx1MTAzYV9cdTEwMWNcdTEwMmRcdTEwMmZcdTEwMDRcdTEwM2FfXHUxMDFl''@;'; put 'put ''XHUxMDNjX1x1MTAwNVx1MTAwMFx1MTAzYV9cdTEwMjFcdTEwMzFcdTEwMmNcdTEwMDBcdTEwM2FfXHUxMDE0XHUxMDJkXHUxMDJmX1x1MTAxMlx1MTAyZSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUxMDEwXHUxMDE0XHUxMDA0XHUxMDNhXHUxMDM5XHUxMDAyXHUxMDE0XHUxMDNkXHUxMDMx''@;'; put 'put ''X1x1MTAxMFx1MTAxNFx1MTAwNFx1MTAzYVx1MTAzOVx1MTAxY1x1MTAyY19cdTEwMjFcdTEwMDRcdTEwM2FcdTEwMzlcdTEwMDJcdTEwMmJfXHUxMDE3XHUxMDJmXHUxMDEyXHUxMDM5XHUxMDEzXHUxMDFmXHUxMDMwXHUxMDM4X1x1MTAwMFx1MTAzY1x1MTAyY1x1MTAxZVx1MTAxNVx1MTAx''@;'; put 'put ''MFx1MTAzMVx1MTAzOF9cdTEwMWVcdTEwMzFcdTEwMmNcdTEwMDBcdTEwM2NcdTEwMmNfXHUxMDA1XHUxMDE0XHUxMDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MTAxNFx1MTAzZFx1MTAzMV9cdTEwMWNcdTEwMmNfXHUxMDAyXHUxMDJiX1x1MTAxZlx1MTAzMFx1MTAzOF9cdTEw''@;'; put 'put ''MDBcdTEwM2NcdTEwMmNfXHUxMDFlXHUxMDMxXHUxMDJjX1x1MTAxNFx1MTAzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUxMDE0XHUxMDNkXHUxMDMxX1x1MTAxY1x1MTAyY19cdTEwMDJcdTEwMmJfXHUxMDFmXHUxMDMwXHUxMDM4X1x1MTAwMFx1MTAzY1x1MTAyY19cdTEwMWVcdTEw''@;'; put 'put ''MzFcdTEwMmNfXHUxMDE0XHUxMDMxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNh''@;'; put 'put ''bGVuZGFyOntzYW1lRGF5OiJbXHUxMDFhXHUxMDE0XHUxMDMxLl0gTFQgW1x1MTAxOVx1MTAzZVx1MTAyY10iLG5leHREYXk6IltcdTEwMTlcdTEwMTRcdTEwMDBcdTEwM2FcdTEwMTZcdTEwM2NcdTEwMTRcdTEwM2FdIExUIFtcdTEwMTlcdTEwM2VcdTEwMmNdIixuZXh0V2VlazoiZGRkZCBM''@;'; put 'put ''VCBbXHUxMDE5XHUxMDNlXHUxMDJjXSIsbGFzdERheToiW1x1MTAxOVx1MTAxNFx1MTAzMS5cdTEwMDBdIExUIFtcdTEwMTlcdTEwM2VcdTEwMmNdIixsYXN0V2VlazoiW1x1MTAxNVx1MTAzY1x1MTAyZVx1MTAzOFx1MTAwMVx1MTAzMlx1MTAzN1x1MTAxZVx1MTAzMVx1MTAyY10gZGRkZCBM''@;'; put 'put ''VCBbXHUxMDE5XHUxMDNlXHUxMDJjXSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUxMDFjXHUxMDJjXHUxMDE5XHUxMDBhXHUxMDNhXHUxMDM3ICVzIFx1MTAxOVx1MTAzZVx1MTAyYyIscGFzdDoiXHUxMDFjXHUxMDNkXHUxMDE0XHUxMDNhXHUxMDAxXHUxMDMyXHUx''@;'; put 'put ''MDM3XHUxMDFlXHUxMDMxXHUxMDJjICVzIFx1MTAwMCIsczoiXHUxMDA1XHUxMDAwXHUxMDM5XHUxMDAwXHUxMDE0XHUxMDNhLlx1MTAyMVx1MTAxNFx1MTAwYVx1MTAzYVx1MTAzOFx1MTAwNFx1MTAxYVx1MTAzYSIsc3M6IiVkIFx1MTAwNVx1MTAwMFx1MTAzOVx1MTAwMFx1MTAxNFx1MTAz''@;'; put 'put ''N1x1MTAzYSIsbToiXHUxMDEwXHUxMDA1XHUxMDNhXHUxMDE5XHUxMDJkXHUxMDE0XHUxMDA1XHUxMDNhIixtbToiJWQgXHUxMDE5XHUxMDJkXHUxMDE0XHUxMDA1XHUxMDNhIixoOiJcdTEwMTBcdTEwMDVcdTEwM2FcdTEwMTRcdTEwMmNcdTEwMWJcdTEwMmUiLGhoOiIlZCBcdTEwMTRcdTEw''@;'; put 'put ''MmNcdTEwMWJcdTEwMmUiLGQ6Ilx1MTAxMFx1MTAwNVx1MTAzYVx1MTAxYlx1MTAwMFx1MTAzYSIsZGQ6IiVkIFx1MTAxYlx1MTAwMFx1MTAzYSIsTToiXHUxMDEwXHUxMDA1XHUxMDNhXHUxMDFjIixNTToiJWQgXHUxMDFjIix5OiJcdTEwMTBcdTEwMDVcdTEwM2FcdTEwMTRcdTEwM2VcdTEw''@;'; put 'put ''MDVcdTEwM2EiLHl5OiIlZCBcdTEwMTRcdTEwM2VcdTEwMDVcdTEwM2EifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUxMDQxXHUxMDQyXHUxMDQzXHUxMDQ0XHUxMDQ1XHUxMDQ2XHUxMDQ3XHUxMDQ4XHUxMDQ5XHUxMDQwXS9nLGZ1bmN0aW9uKFApe3JldHVy''@;'; put 'put ''biBwW1BdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihQKXtyZXR1cm4gX1tQXX0pfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw3MzYyNDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDM3NzMxKSxfPWIo''@;'; put 'put ''OTc1NDEpLmhhcyxwPWIoMzAzMzkpLFY9Yig0MzYzMiksdz1iKDIxOTEwKSxQPWIoMTEzOCksRj1iKDY2NTQyKTtjZS5leHBvcnRzPWZ1bmN0aW9uKHope3ZhciBOPUkodGhpcyksTz1WKHopO2lmKHAoTik8PU8uc2l6ZSlyZXR1cm4hMSE9PXcoTixmdW5jdGlvbihaKXtpZihPLmluY2x1ZGVz''@;'; put 'put ''KFopKXJldHVybiExfSwhMCk7dmFyIEs9Ty5nZXRJdGVyYXRvcigpO3JldHVybiExIT09UChLLGZ1bmN0aW9uKFope2lmKF8oTixaKSlyZXR1cm4gRihLLCJub3JtYWwiLCExKX0pfX0sNzM4NzU6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9j''@;'; put 'put ''YWxlKCJqdiIse21vbnRoczoiSmFudWFyaV9GZWJydWFyaV9NYXJldF9BcHJpbF9NZWlfSnVuaV9KdWxpX0FndXN0dXNfU2VwdGVtYmVyX09rdG9iZXJfTm9wZW1iZXJfRGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NZWlfSnVuX0p1bF9BZ3NfU2Vw''@;'; put 'put ''X09rdF9Ob3BfRGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJNaW5nZ3VfU2VuZW5fU2Vsb3NvX1JlYnVfS2VtaXNfSmVtdXdhaF9TZXB0dSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJNaW5fU2VuX1NlbF9SZWJfS2VtX0plbV9TZXAiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ik1nX1Nu''@;'; put 'put ''X1NsX1JiX0ttX0ptX1NwIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxd''@;'; put 'put ''IEhILm1tIn0sbWVyaWRpZW1QYXJzZTovZW5qaW5nfHNpeWFuZ3xzb250ZW58bmRhbHUvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihwLFYpe3JldHVybiAxMj09PXAmJihwPTApLCJlbmppbmciPT09Vj9wOiJzaXlhbmciPT09Vj9wPj0xMT9wOnArMTI6InNvbnRlbiI9PT1WfHwibmRhbHUiPT09''@;'; put 'put ''Vj9wKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24ocCxWLHcpe3JldHVybiBwPDExPyJlbmppbmciOnA8MTU/InNpeWFuZyI6cDwxOT8ic29udGVuIjoibmRhbHUifSxjYWxlbmRhcjp7c2FtZURheToiW0RpbnRlbiBwdW5pa28gcHVrdWxdIExUIixuZXh0RGF5OiJbTWJlbmphbmcgcHVr''@;'; put 'put ''dWxdIExUIixuZXh0V2VlazoiZGRkZCBbcHVrdWxdIExUIixsYXN0RGF5OiJbS2FsYSB3aW5naSBwdWt1bF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtrZXBlbmdrZXIgcHVrdWxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ3b250ZW4gaW5nICVzIixwYXN0OiIlcyBp''@;'; put 'put ''bmdrYW5nIGtlcGVuZ2tlciIsczoic2F3ZXRhd2lzIGRldGlrIixzczoiJWQgZGV0aWsiLG06InNldHVuZ2dhbCBtZW5pdCIsbW06IiVkIG1lbml0IixoOiJzZXR1bmdnYWwgamFtIixoaDoiJWQgamFtIixkOiJzZWRpbnRlbiIsZGQ6IiVkIGRpbnRlbiIsTToic2V3dWxhbiIsTU06IiVkIHd1''@;'; put 'put ''bGFuIix5OiJzZXRhdW4iLHl5OiIlZCB0YXVuIn0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGIoOTc1ODYpKX0sNzQwNzU6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig5NjU2KSxfPU9iamVjdC5rZXlzfHxmdW5jdGlvbihLKXt2YXIgWj1bXTtmb3IodmFyIFkgaW4gSylaLnB1c2go''@;'; put 'put ''WSk7cmV0dXJuIFp9O2NlLmV4cG9ydHM9ejt2YXIgcD1PYmplY3QuY3JlYXRlKGIoMjc2MzcpKTtwLmluaGVyaXRzPWIoNzE5OTMpO3ZhciBWPWIoMTk2MDkpLHc9Yig0Nzg0OSk7cC5pbmhlcml0cyh6LFYpO2Zvcih2YXIgUD1fKHcucHJvdG90eXBlKSxGPTA7RjxQLmxlbmd0aDtGKyspe3Zh''@;'; put 'put ''ciBSPVBbRl07ei5wcm90b3R5cGVbUl18fCh6LnByb3RvdHlwZVtSXT13LnByb3RvdHlwZVtSXSl9ZnVuY3Rpb24geihLKXtpZighKHRoaXMgaW5zdGFuY2VvZiB6KSlyZXR1cm4gbmV3IHooSyk7Vi5jYWxsKHRoaXMsSyksdy5jYWxsKHRoaXMsSyksSyYmITE9PT1LLnJlYWRhYmxlJiYodGhp''@;'; put 'put ''cy5yZWFkYWJsZT0hMSksSyYmITE9PT1LLndyaXRhYmxlJiYodGhpcy53cml0YWJsZT0hMSksdGhpcy5hbGxvd0hhbGZPcGVuPSEwLEsmJiExPT09Sy5hbGxvd0hhbGZPcGVuJiYodGhpcy5hbGxvd0hhbGZPcGVuPSExKSx0aGlzLm9uY2UoImVuZCIsTil9ZnVuY3Rpb24gTigpe3RoaXMuYWxs''@;'; put 'put ''b3dIYWxmT3Blbnx8dGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8SS5uZXh0VGljayhPLHRoaXMpfWZ1bmN0aW9uIE8oSyl7Sy5lbmQoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoei5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoei5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAhPT10aGlzLl93cml0''@;'; put 'put ''YWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihLKXt2b2lkIDA9PT10aGlzLl9yZWFkYWJsZVN0YXRlfHx2b2lkIDA9PT10aGlzLl93cml0YWJsZVN0YXRlfHwodGhpcy5fcmVhZGFibGVT''@;'; put 'put ''dGF0ZS5kZXN0cm95ZWQ9Syx0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1LKX19KSx6LnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihLLFope3RoaXMucHVzaChudWxsKSx0aGlzLmVuZCgpLEkubmV4dFRpY2soWixLKX19LDc0NDg4OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9y''@;'; put 'put ''dHM9SlNPTi5wYXJzZSgnW1siMCIsIlxcdTAwMDAiLDEyNywiXHUyMGFjIl0sWyI4MTQwIiwiXHU0ZTAyXHU0ZTA0XHU0ZTA1XHU0ZTA2XHU0ZTBmXHU0ZTEyXHU0ZTE3XHU0ZTFmXHU0ZTIwXHU0ZTIxXHU0ZTIzXHU0ZTI2XHU0ZTI5XHU0ZTJlXHU0ZTJmXHU0ZTMxXHU0ZTMzXHU0ZTM1XHU0''@;'; put 'put ''ZTM3XHU0ZTNjXHU0ZTQwXHU0ZTQxXHU0ZTQyXHU0ZTQ0XHU0ZTQ2XHU0ZTRhXHU0ZTUxXHU0ZTU1XHU0ZTU3XHU0ZTVhXHU0ZTViXHU0ZTYyXHU0ZTYzXHU0ZTY0XHU0ZTY1XHU0ZTY3XHU0ZTY4XHU0ZTZhIiw1LCJcdTRlNzJcdTRlNzQiLDksIlx1NGU3ZiIsNiwiXHU0ZTg3XHU0ZThhIl0s''@;'; put 'put ''WyI4MTgwIiwiXHU0ZTkwXHU0ZTk2XHU0ZTk3XHU0ZTk5XHU0ZTljXHU0ZTlkXHU0ZTllXHU0ZWEzXHU0ZWFhXHU0ZWFmXHU0ZWIwXHU0ZWIxXHU0ZWI0XHU0ZWI2XHU0ZWI3XHU0ZWI4XHU0ZWI5XHU0ZWJjXHU0ZWJkXHU0ZWJlXHU0ZWM4XHU0ZWNjXHU0ZWNmXHU0ZWQwXHU0ZWQyXHU0ZWRh''@;'; put 'put ''XHU0ZWRiXHU0ZWRjXHU0ZWUwXHU0ZWUyXHU0ZWU2XHU0ZWU3XHU0ZWU5XHU0ZWVkXHU0ZWVlXHU0ZWVmXHU0ZWYxXHU0ZWY0XHU0ZWY4XHU0ZWY5XHU0ZWZhXHU0ZWZjXHU0ZWZlXHU0ZjAwXHU0ZjAyIiw2LCJcdTRmMGJcdTRmMGNcdTRmMTIiLDQsIlx1NGYxY1x1NGYxZFx1NGYyMVx1NGYy''@;'; put 'put ''M1x1NGYyOFx1NGYyOVx1NGYyY1x1NGYyZFx1NGYyZVx1NGYzMVx1NGYzM1x1NGYzNVx1NGYzN1x1NGYzOVx1NGYzYlx1NGYzZSIsNCwiXHU0ZjQ0XHU0ZjQ1XHU0ZjQ3Iiw1LCJcdTRmNTJcdTRmNTRcdTRmNTZcdTRmNjFcdTRmNjJcdTRmNjZcdTRmNjhcdTRmNmFcdTRmNmJcdTRmNmRcdTRm''@;'; put 'put ''NmVcdTRmNzFcdTRmNzJcdTRmNzVcdTRmNzdcdTRmNzhcdTRmNzlcdTRmN2FcdTRmN2RcdTRmODBcdTRmODFcdTRmODJcdTRmODVcdTRmODZcdTRmODdcdTRmOGFcdTRmOGNcdTRmOGVcdTRmOTBcdTRmOTJcdTRmOTNcdTRmOTVcdTRmOTZcdTRmOThcdTRmOTlcdTRmOWFcdTRmOWNcdTRmOWVc''@;'; put 'put ''dTRmOWZcdTRmYTFcdTRmYTIiXSxbIjgyNDAiLCJcdTRmYTRcdTRmYWJcdTRmYWRcdTRmYjAiLDQsIlx1NGZiNiIsOCwiXHU0ZmMwXHU0ZmMxXHU0ZmMyXHU0ZmM2XHU0ZmM3XHU0ZmM4XHU0ZmM5XHU0ZmNiXHU0ZmNjXHU0ZmNkXHU0ZmQyIiw0LCJcdTRmZDlcdTRmZGJcdTRmZTBcdTRmZTJc''@;'; put 'put ''dTRmZTRcdTRmZTVcdTRmZTdcdTRmZWJcdTRmZWNcdTRmZjBcdTRmZjJcdTRmZjRcdTRmZjVcdTRmZjZcdTRmZjdcdTRmZjlcdTRmZmJcdTRmZmNcdTRmZmRcdTRmZmYiLDExXSxbIjgyODAiLCJcdTUwMGJcdTUwMGVcdTUwMTBcdTUwMTFcdTUwMTNcdTUwMTVcdTUwMTZcdTUwMTdcdTUwMWJc''@;'; put 'put ''dTUwMWRcdTUwMWVcdTUwMjBcdTUwMjJcdTUwMjNcdTUwMjRcdTUwMjdcdTUwMmJcdTUwMmYiLDEwLCJcdTUwM2JcdTUwM2RcdTUwM2ZcdTUwNDBcdTUwNDFcdTUwNDJcdTUwNDRcdTUwNDVcdTUwNDZcdTUwNDlcdTUwNGFcdTUwNGJcdTUwNGRcdTUwNTAiLDQsIlx1NTA1Nlx1NTA1N1x1NTA1''@;'; put 'put ''OFx1NTA1OVx1NTA1Ylx1NTA1ZCIsNywiXHU1MDY2Iiw1LCJcdTUwNmQiLDgsIlx1NTA3OFx1NTA3OVx1NTA3YVx1NTA3Y1x1NTA3ZFx1NTA4MVx1NTA4Mlx1NTA4M1x1NTA4NFx1NTA4Nlx1NTA4N1x1NTA4OVx1NTA4YVx1NTA4Ylx1NTA4Y1x1NTA4ZSIsMjAsIlx1NTBhNFx1NTBhNlx1NTBh''@;'; put 'put ''YVx1NTBhYlx1NTBhZCIsNCwiXHU1MGIzIiw2LCJcdTUwYmMiXSxbIjgzNDAiLCJcdTUwYmQiLDE3LCJcdTUwZDAiLDUsIlx1NTBkN1x1NTBkOFx1NTBkOVx1NTBkYiIsMTAsIlx1NTBlOFx1NTBlOVx1NTBlYVx1NTBlYlx1NTBlZlx1NTBmMFx1NTBmMVx1NTBmMlx1NTBmNFx1NTBmNiIsNCwi''@;'; put 'put ''XHU1MGZjIiw5LCJcdTUxMDgiXSxbIjgzODAiLCJcdTUxMDlcdTUxMGFcdTUxMGMiLDUsIlx1NTExMyIsMTMsIlx1NTEyMiIsMjgsIlx1NTE0Mlx1NTE0N1x1NTE0YVx1NTE0Y1x1NTE0ZVx1NTE0Zlx1NTE1MFx1NTE1Mlx1NTE1M1x1NTE1N1x1NTE1OFx1NTE1OVx1NTE1Ylx1NTE1ZCIsNCwi''@;'; put 'put ''XHU1MTYzXHU1MTY0XHU1MTY2XHU1MTY3XHU1MTY5XHU1MTZhXHU1MTZmXHU1MTcyXHU1MTdhXHU1MTdlXHU1MTdmXHU1MTgzXHU1MTg0XHU1MTg2XHU1MTg3XHU1MThhXHU1MThiXHU1MThlXHU1MThmXHU1MTkwXHU1MTkxXHU1MTkzXHU1MTk0XHU1MTk4XHU1MTlhXHU1MTlkXHU1MTllXHU1''@;'; put 'put ''MTlmXHU1MWExXHU1MWEzXHU1MWE2Iiw0LCJcdTUxYWRcdTUxYWVcdTUxYjRcdTUxYjhcdTUxYjlcdTUxYmFcdTUxYmVcdTUxYmZcdTUxYzFcdTUxYzJcdTUxYzNcdTUxYzVcdTUxYzhcdTUxY2FcdTUxY2RcdTUxY2VcdTUxZDBcdTUxZDIiLDVdLFsiODQ0MCIsIlx1NTFkOFx1NTFkOVx1NTFk''@;'; put 'put ''YVx1NTFkY1x1NTFkZVx1NTFkZlx1NTFlMlx1NTFlM1x1NTFlNSIsNSwiXHU1MWVjXHU1MWVlXHU1MWYxXHU1MWYyXHU1MWY0XHU1MWY3XHU1MWZlXHU1MjA0XHU1MjA1XHU1MjA5XHU1MjBiXHU1MjBjXHU1MjBmXHU1MjEwXHU1MjEzXHU1MjE0XHU1MjE1XHU1MjFjXHU1MjFlXHU1MjFmXHU1''@;'; put 'put ''MjIxXHU1MjIyXHU1MjIzXHU1MjI1XHU1MjI2XHU1MjI3XHU1MjJhXHU1MjJjXHU1MjJmXHU1MjMxXHU1MjMyXHU1MjM0XHU1MjM1XHU1MjNjXHU1MjNlXHU1MjQ0Iiw1LCJcdTUyNGJcdTUyNGVcdTUyNGZcdTUyNTJcdTUyNTNcdTUyNTVcdTUyNTdcdTUyNTgiXSxbIjg0ODAiLCJcdTUyNTlc''@;'; put 'put ''dTUyNWFcdTUyNWJcdTUyNWRcdTUyNWZcdTUyNjBcdTUyNjJcdTUyNjNcdTUyNjRcdTUyNjZcdTUyNjhcdTUyNmJcdTUyNmNcdTUyNmRcdTUyNmVcdTUyNzBcdTUyNzFcdTUyNzMiLDksIlx1NTI3ZVx1NTI4MFx1NTI4MyIsNCwiXHU1Mjg5Iiw2LCJcdTUyOTFcdTUyOTJcdTUyOTQiLDYsIlx1''@;'; put 'put ''NTI5Y1x1NTJhNFx1NTJhNVx1NTJhNlx1NTJhN1x1NTJhZVx1NTJhZlx1NTJiMFx1NTJiNCIsOSwiXHU1MmMwXHU1MmMxXHU1MmMyXHU1MmM0XHU1MmM1XHU1MmM2XHU1MmM4XHU1MmNhXHU1MmNjXHU1MmNkXHU1MmNlXHU1MmNmXHU1MmQxXHU1MmQzXHU1MmQ0XHU1MmQ1XHU1MmQ3XHU1MmQ5''@;'; put 'put ''Iiw1LCJcdTUyZTBcdTUyZTFcdTUyZTJcdTUyZTNcdTUyZTUiLDEwLCJcdTUyZjEiLDcsIlx1NTJmYlx1NTJmY1x1NTJmZFx1NTMwMVx1NTMwMlx1NTMwM1x1NTMwNFx1NTMwN1x1NTMwOVx1NTMwYVx1NTMwYlx1NTMwY1x1NTMwZSJdLFsiODU0MCIsIlx1NTMxMVx1NTMxMlx1NTMxM1x1NTMx''@;'; put 'put ''NFx1NTMxOFx1NTMxYlx1NTMxY1x1NTMxZVx1NTMxZlx1NTMyMlx1NTMyNFx1NTMyNVx1NTMyN1x1NTMyOFx1NTMyOVx1NTMyYlx1NTMyY1x1NTMyZFx1NTMyZiIsOSwiXHU1MzNjXHU1MzNkXHU1MzQwXHU1MzQyXHU1MzQ0XHU1MzQ2XHU1MzRiXHU1MzRjXHU1MzRkXHU1MzUwXHU1MzU0XHU1''@;'; put 'put ''MzU4XHU1MzU5XHU1MzViXHU1MzVkXHU1MzY1XHU1MzY4XHU1MzZhXHU1MzZjXHU1MzZkXHU1MzcyXHU1Mzc2XHU1Mzc5XHU1MzdiXHU1MzdjXHU1MzdkXHU1MzdlXHU1MzgwXHU1MzgxXHU1MzgzXHU1Mzg3XHU1Mzg4XHU1MzhhXHU1MzhlXHU1MzhmIl0sWyI4NTgwIiwiXHU1MzkwIiw0LCJc''@;'; put 'put ''dTUzOTZcdTUzOTdcdTUzOTlcdTUzOWJcdTUzOWNcdTUzOWVcdTUzYTBcdTUzYTFcdTUzYTRcdTUzYTdcdTUzYWFcdTUzYWJcdTUzYWNcdTUzYWRcdTUzYWYiLDYsIlx1NTNiN1x1NTNiOFx1NTNiOVx1NTNiYVx1NTNiY1x1NTNiZFx1NTNiZVx1NTNjMFx1NTNjMyIsNCwiXHU1M2NlXHU1M2Nm''@;'; put 'put ''XHU1M2QwXHU1M2QyXHU1M2QzXHU1M2Q1XHU1M2RhXHU1M2RjXHU1M2RkXHU1M2RlXHU1M2UxXHU1M2UyXHU1M2U3XHU1M2Y0XHU1M2ZhXHU1M2ZlXHU1M2ZmXHU1NDAwXHU1NDAyXHU1NDA1XHU1NDA3XHU1NDBiXHU1NDE0XHU1NDE4XHU1NDE5XHU1NDFhXHU1NDFjXHU1NDIyXHU1NDI0XHU1''@;'; put 'put ''NDI1XHU1NDJhXHU1NDMwXHU1NDMzXHU1NDM2XHU1NDM3XHU1NDNhXHU1NDNkXHU1NDNmXHU1NDQxXHU1NDQyXHU1NDQ0XHU1NDQ1XHU1NDQ3XHU1NDQ5XHU1NDRjXHU1NDRkXHU1NDRlXHU1NDRmXHU1NDUxXHU1NDVhXHU1NDVkIiw0LCJcdTU0NjNcdTU0NjVcdTU0NjdcdTU0NjkiLDcsIlx1''@;'; put 'put ''NTQ3NFx1NTQ3OVx1NTQ3YVx1NTQ3ZVx1NTQ3Zlx1NTQ4MVx1NTQ4M1x1NTQ4NVx1NTQ4N1x1NTQ4OFx1NTQ4OVx1NTQ4YVx1NTQ4ZFx1NTQ5MVx1NTQ5M1x1NTQ5N1x1NTQ5OFx1NTQ5Y1x1NTQ5ZVx1NTQ5Zlx1NTRhMFx1NTRhMSJdLFsiODY0MCIsIlx1NTRhMlx1NTRhNVx1NTRhZVx1NTRi''@;'; put 'put ''MFx1NTRiMlx1NTRiNVx1NTRiNlx1NTRiN1x1NTRiOVx1NTRiYVx1NTRiY1x1NTRiZVx1NTRjM1x1NTRjNVx1NTRjYVx1NTRjYlx1NTRkNlx1NTRkOFx1NTRkYlx1NTRlMCIsNCwiXHU1NGViXHU1NGVjXHU1NGVmXHU1NGYwXHU1NGYxXHU1NGY0Iiw1LCJcdTU0ZmJcdTU0ZmVcdTU1MDBcdTU1''@;'; put 'put ''MDJcdTU1MDNcdTU1MDRcdTU1MDVcdTU1MDhcdTU1MGEiLDQsIlx1NTUxMlx1NTUxM1x1NTUxNSIsNSwiXHU1NTFjXHU1NTFkXHU1NTFlXHU1NTFmXHU1NTIxXHU1NTI1XHU1NTI2Il0sWyI4NjgwIiwiXHU1NTI4XHU1NTI5XHU1NTJiXHU1NTJkXHU1NTMyXHU1NTM0XHU1NTM1XHU1NTM2XHU1''@;'; put 'put ''NTM4XHU1NTM5XHU1NTNhXHU1NTNiXHU1NTNkXHU1NTQwXHU1NTQyXHU1NTQ1XHU1NTQ3XHU1NTQ4XHU1NTRiIiw0LCJcdTU1NTFcdTU1NTJcdTU1NTNcdTU1NTRcdTU1NTciLDQsIlx1NTU1ZFx1NTU1ZVx1NTU1Zlx1NTU2MFx1NTU2Mlx1NTU2M1x1NTU2OFx1NTU2OVx1NTU2Ylx1NTU2ZiIs''@;'; put 'put ''NSwiXHU1NTc5XHU1NTdhXHU1NTdkXHU1NTdmXHU1NTg1XHU1NTg2XHU1NThjXHU1NThkXHU1NThlXHU1NTkwXHU1NTkyXHU1NTkzXHU1NTk1XHU1NTk2XHU1NTk3XHU1NTlhXHU1NTliXHU1NTllXHU1NWEwIiw2LCJcdTU1YTgiLDgsIlx1NTViMlx1NTViNFx1NTViNlx1NTViOFx1NTViYVx1''@;'; put 'put ''NTViY1x1NTViZiIsNCwiXHU1NWM2XHU1NWM3XHU1NWM4XHU1NWNhXHU1NWNiXHU1NWNlXHU1NWNmXHU1NWQwXHU1NWQ1XHU1NWQ3Iiw0LCJcdTU1ZGVcdTU1ZTBcdTU1ZTJcdTU1ZTdcdTU1ZTlcdTU1ZWRcdTU1ZWVcdTU1ZjBcdTU1ZjFcdTU1ZjRcdTU1ZjZcdTU1ZjgiLDQsIlx1NTVmZlx1''@;'; put 'put ''NTYwMlx1NTYwM1x1NTYwNFx1NTYwNSJdLFsiODc0MCIsIlx1NTYwNlx1NTYwN1x1NTYwYVx1NTYwYlx1NTYwZFx1NTYxMCIsNywiXHU1NjE5XHU1NjFhXHU1NjFjXHU1NjFkXHU1NjIwXHU1NjIxXHU1NjIyXHU1NjI1XHU1NjI2XHU1NjI4XHU1NjI5XHU1NjJhXHU1NjJiXHU1NjJlXHU1NjJm''@;'; put 'put ''XHU1NjMwXHU1NjMzXHU1NjM1XHU1NjM3XHU1NjM4XHU1NjNhXHU1NjNjXHU1NjNkXHU1NjNlXHU1NjQwIiwxMSwiXHU1NjRmIiw0LCJcdTU2NTVcdTU2NTZcdTU2NWFcdTU2NWJcdTU2NWQiLDRdLFsiODc4MCIsIlx1NTY2M1x1NTY2NVx1NTY2Nlx1NTY2N1x1NTY2ZFx1NTY2ZVx1NTY2Zlx1''@;'; put 'put ''NTY3MFx1NTY3Mlx1NTY3M1x1NTY3NFx1NTY3NVx1NTY3N1x1NTY3OFx1NTY3OVx1NTY3YVx1NTY3ZCIsNywiXHU1Njg3Iiw2LCJcdTU2OTBcdTU2OTFcdTU2OTJcdTU2OTQiLDE0LCJcdTU2YTQiLDEwLCJcdTU2YjAiLDYsIlx1NTZiOFx1NTZiOVx1NTZiYVx1NTZiYlx1NTZiZCIsMTIsIlx1''@;'; put 'put ''NTZjYiIsOCwiXHU1NmQ1XHU1NmQ2XHU1NmQ4XHU1NmQ5XHU1NmRjXHU1NmUzXHU1NmU1Iiw1LCJcdTU2ZWNcdTU2ZWVcdTU2ZWZcdTU2ZjJcdTU2ZjNcdTU2ZjZcdTU2ZjdcdTU2ZjhcdTU2ZmJcdTU2ZmNcdTU3MDBcdTU3MDFcdTU3MDJcdTU3MDVcdTU3MDdcdTU3MGIiLDZdLFsiODg0MCIs''@;'; put 'put ''Ilx1NTcxMiIsOSwiXHU1NzFkXHU1NzFlXHU1NzIwXHU1NzIxXHU1NzIyXHU1NzI0XHU1NzI1XHU1NzI2XHU1NzI3XHU1NzJiXHU1NzMxXHU1NzMyXHU1NzM0Iiw0LCJcdTU3M2NcdTU3M2RcdTU3M2ZcdTU3NDFcdTU3NDNcdTU3NDRcdTU3NDVcdTU3NDZcdTU3NDhcdTU3NDlcdTU3NGJcdTU3''@;'; put 'put ''NTIiLDQsIlx1NTc1OFx1NTc1OVx1NTc2Mlx1NTc2M1x1NTc2NVx1NTc2N1x1NTc2Y1x1NTc2ZVx1NTc3MFx1NTc3MVx1NTc3Mlx1NTc3NFx1NTc3NVx1NTc3OFx1NTc3OVx1NTc3YVx1NTc3ZFx1NTc3ZVx1NTc3Zlx1NTc4MCJdLFsiODg4MCIsIlx1NTc4MVx1NTc4N1x1NTc4OFx1NTc4OVx1''@;'; put 'put ''NTc4YVx1NTc4ZCIsNCwiXHU1Nzk0Iiw2LCJcdTU3OWNcdTU3OWRcdTU3OWVcdTU3OWZcdTU3YTVcdTU3YThcdTU3YWFcdTU3YWNcdTU3YWZcdTU3YjBcdTU3YjFcdTU3YjNcdTU3YjVcdTU3YjZcdTU3YjdcdTU3YjkiLDgsIlx1NTdjNCIsNiwiXHU1N2NjXHU1N2NkXHU1N2QwXHU1N2QxXHU1''@;'; put 'put ''N2QzXHU1N2Q2XHU1N2Q3XHU1N2RiXHU1N2RjXHU1N2RlXHU1N2UxXHU1N2UyXHU1N2UzXHU1N2U1Iiw3LCJcdTU3ZWVcdTU3ZjBcdTU3ZjFcdTU3ZjJcdTU3ZjNcdTU3ZjVcdTU3ZjZcdTU3ZjdcdTU3ZmJcdTU3ZmNcdTU3ZmVcdTU3ZmZcdTU4MDFcdTU4MDNcdTU4MDRcdTU4MDVcdTU4MDhc''@;'; put 'put ''dTU4MDlcdTU4MGFcdTU4MGNcdTU4MGVcdTU4MGZcdTU4MTBcdTU4MTJcdTU4MTNcdTU4MTRcdTU4MTZcdTU4MTdcdTU4MThcdTU4MWFcdTU4MWJcdTU4MWNcdTU4MWRcdTU4MWZcdTU4MjJcdTU4MjNcdTU4MjUiLDQsIlx1NTgyYiIsNCwiXHU1ODMxXHU1ODMyXHU1ODMzXHU1ODM0XHU1ODM2''@;'; put 'put ''Iiw3XSxbIjg5NDAiLCJcdTU4M2UiLDUsIlx1NTg0NSIsNiwiXHU1ODRlXHU1ODRmXHU1ODUwXHU1ODUyXHU1ODUzXHU1ODU1XHU1ODU2XHU1ODU3XHU1ODU5Iiw0LCJcdTU4NWYiLDUsIlx1NTg2NiIsNCwiXHU1ODZkIiwxNiwiXHU1ODdmXHU1ODgyXHU1ODg0XHU1ODg2XHU1ODg3XHU1ODg4''@;'; put 'put ''XHU1ODhhXHU1ODhiXHU1ODhjIl0sWyI4OTgwIiwiXHU1ODhkIiw0LCJcdTU4OTQiLDQsIlx1NTg5Ylx1NTg5Y1x1NTg5ZFx1NThhMCIsNywiXHU1OGFhIiwxNywiXHU1OGJkXHU1OGJlXHU1OGJmXHU1OGMwXHU1OGMyXHU1OGMzXHU1OGM0XHU1OGM2IiwxMCwiXHU1OGQyXHU1OGQzXHU1OGQ0''@;'; put 'put ''XHU1OGQ2IiwxMywiXHU1OGU1Iiw1LCJcdTU4ZWRcdTU4ZWZcdTU4ZjFcdTU4ZjJcdTU4ZjRcdTU4ZjVcdTU4ZjdcdTU4ZjhcdTU4ZmEiLDcsIlx1NTkwM1x1NTkwNVx1NTkwNlx1NTkwOCIsNCwiXHU1OTBlXHU1OTEwXHU1OTExXHU1OTEyXHU1OTEzXHU1OTE3XHU1OTE4XHU1OTFiXHU1OTFk''@;'; put 'put ''XHU1OTFlXHU1OTIwXHU1OTIxXHU1OTIyXHU1OTIzXHU1OTI2XHU1OTI4XHU1OTJjXHU1OTMwXHU1OTMyXHU1OTMzXHU1OTM1XHU1OTM2XHU1OTNiIl0sWyI4YTQwIiwiXHU1OTNkXHU1OTNlXHU1OTNmXHU1OTQwXHU1OTQzXHU1OTQ1XHU1OTQ2XHU1OTRhXHU1OTRjXHU1OTRkXHU1OTUwXHU1''@;'; put 'put ''OTUyXHU1OTUzXHU1OTU5XHU1OTViIiw0LCJcdTU5NjFcdTU5NjNcdTU5NjRcdTU5NjYiLDEyLCJcdTU5NzVcdTU5NzdcdTU5N2FcdTU5N2JcdTU5N2NcdTU5N2VcdTU5N2ZcdTU5ODBcdTU5ODVcdTU5ODlcdTU5OGJcdTU5OGNcdTU5OGVcdTU5OGZcdTU5OTBcdTU5OTFcdTU5OTRcdTU5OTVc''@;'; put 'put ''dTU5OThcdTU5OWFcdTU5OWJcdTU5OWNcdTU5OWRcdTU5OWZcdTU5YTBcdTU5YTFcdTU5YTJcdTU5YTYiXSxbIjhhODAiLCJcdTU5YTdcdTU5YWNcdTU5YWRcdTU5YjBcdTU5YjFcdTU5YjMiLDUsIlx1NTliYVx1NTliY1x1NTliZFx1NTliZiIsNiwiXHU1OWM3XHU1OWM4XHU1OWM5XHU1OWNj''@;'; put 'put ''XHU1OWNkXHU1OWNlXHU1OWNmXHU1OWQ1XHU1OWQ2XHU1OWQ5XHU1OWRiXHU1OWRlIiw0LCJcdTU5ZTRcdTU5ZTZcdTU5ZTdcdTU5ZTlcdTU5ZWFcdTU5ZWJcdTU5ZWQiLDExLCJcdTU5ZmFcdTU5ZmNcdTU5ZmRcdTU5ZmVcdTVhMDBcdTVhMDJcdTVhMGFcdTVhMGJcdTVhMGRcdTVhMGVcdTVh''@;'; put 'put ''MGZcdTVhMTBcdTVhMTJcdTVhMTRcdTVhMTVcdTVhMTZcdTVhMTdcdTVhMTlcdTVhMWFcdTVhMWJcdTVhMWRcdTVhMWVcdTVhMjFcdTVhMjJcdTVhMjRcdTVhMjZcdTVhMjdcdTVhMjhcdTVhMmEiLDYsIlx1NWEzM1x1NWEzNVx1NWEzNyIsNCwiXHU1YTNkXHU1YTNlXHU1YTNmXHU1YTQxIiw0''@;'; put 'put ''LCJcdTVhNDdcdTVhNDhcdTVhNGIiLDksIlx1NWE1Nlx1NWE1N1x1NWE1OFx1NWE1OVx1NWE1YiIsNV0sWyI4YjQwIiwiXHU1YTYxXHU1YTYzXHU1YTY0XHU1YTY1XHU1YTY2XHU1YTY4XHU1YTY5XHU1YTZiIiw4LCJcdTVhNzhcdTVhNzlcdTVhN2JcdTVhN2NcdTVhN2RcdTVhN2VcdTVhODAi''@;'; put 'put ''LDE3LCJcdTVhOTMiLDYsIlx1NWE5YyIsMTMsIlx1NWFhYlx1NWFhYyJdLFsiOGI4MCIsIlx1NWFhZCIsNCwiXHU1YWI0XHU1YWI2XHU1YWI3XHU1YWI5Iiw0LCJcdTVhYmZcdTVhYzBcdTVhYzMiLDUsIlx1NWFjYVx1NWFjYlx1NWFjZCIsNCwiXHU1YWQzXHU1YWQ1XHU1YWQ3XHU1YWQ5XHU1''@;'; put 'put ''YWRhXHU1YWRiXHU1YWRkXHU1YWRlXHU1YWRmXHU1YWUyXHU1YWU0XHU1YWU1XHU1YWU3XHU1YWU4XHU1YWVhXHU1YWVjIiw0LCJcdTVhZjIiLDIyLCJcdTViMGEiLDExLCJcdTViMTgiLDI1LCJcdTViMzNcdTViMzVcdTViMzZcdTViMzgiLDcsIlx1NWI0MSIsNl0sWyI4YzQwIiwiXHU1YjQ4''@;'; put 'put ''Iiw3LCJcdTViNTJcdTViNTZcdTViNWVcdTViNjBcdTViNjFcdTViNjdcdTViNjhcdTViNmJcdTViNmRcdTViNmVcdTViNmZcdTViNzJcdTViNzRcdTViNzZcdTViNzdcdTViNzhcdTViNzlcdTViN2JcdTViN2NcdTViN2VcdTViN2ZcdTViODJcdTViODZcdTViOGFcdTViOGRcdTViOGVcdTVi''@;'; put 'put ''OTBcdTViOTFcdTViOTJcdTViOTRcdTViOTZcdTViOWZcdTViYTdcdTViYThcdTViYTlcdTViYWNcdTViYWRcdTViYWVcdTViYWZcdTViYjFcdTViYjJcdTViYjdcdTViYmFcdTViYmJcdTViYmNcdTViYzBcdTViYzFcdTViYzNcdTViYzhcdTViYzlcdTViY2FcdTViY2JcdTViY2RcdTViY2Vc''@;'; put 'put ''dTViY2YiXSxbIjhjODAiLCJcdTViZDFcdTViZDQiLDgsIlx1NWJlMFx1NWJlMlx1NWJlM1x1NWJlNlx1NWJlN1x1NWJlOSIsNCwiXHU1YmVmXHU1YmYxIiw2LCJcdTViZmRcdTViZmVcdTVjMDBcdTVjMDJcdTVjMDNcdTVjMDVcdTVjMDdcdTVjMDhcdTVjMGJcdTVjMGNcdTVjMGRcdTVjMGVc''@;'; put 'put ''dTVjMTBcdTVjMTJcdTVjMTNcdTVjMTdcdTVjMTlcdTVjMWJcdTVjMWVcdTVjMWZcdTVjMjBcdTVjMjFcdTVjMjNcdTVjMjZcdTVjMjhcdTVjMjlcdTVjMmFcdTVjMmJcdTVjMmRcdTVjMmVcdTVjMmZcdTVjMzBcdTVjMzJcdTVjMzNcdTVjMzVcdTVjMzZcdTVjMzdcdTVjNDNcdTVjNDRcdTVj''@;'; put 'put ''NDZcdTVjNDdcdTVjNGNcdTVjNGRcdTVjNTJcdTVjNTNcdTVjNTRcdTVjNTZcdTVjNTdcdTVjNThcdTVjNWFcdTVjNWJcdTVjNWNcdTVjNWRcdTVjNWZcdTVjNjJcdTVjNjRcdTVjNjciLDYsIlx1NWM3MFx1NWM3MiIsNiwiXHU1YzdiXHU1YzdjXHU1YzdkXHU1YzdlXHU1YzgwXHU1YzgzIiw0''@;'; put 'put ''LCJcdTVjODlcdTVjOGFcdTVjOGJcdTVjOGVcdTVjOGZcdTVjOTJcdTVjOTNcdTVjOTVcdTVjOWQiLDQsIlx1NWNhNCIsNF0sWyI4ZDQwIiwiXHU1Y2FhXHU1Y2FlXHU1Y2FmXHU1Y2IwXHU1Y2IyXHU1Y2I0XHU1Y2I2XHU1Y2I5XHU1Y2JhXHU1Y2JiXHU1Y2JjXHU1Y2JlXHU1Y2MwXHU1Y2My''@;'; put 'put ''XHU1Y2MzXHU1Y2M1Iiw1LCJcdTVjY2MiLDUsIlx1NWNkMyIsNSwiXHU1Y2RhIiw2LCJcdTVjZTJcdTVjZTNcdTVjZTdcdTVjZTlcdTVjZWJcdTVjZWNcdTVjZWVcdTVjZWZcdTVjZjEiLDksIlx1NWNmYyIsNF0sWyI4ZDgwIiwiXHU1ZDAxXHU1ZDA0XHU1ZDA1XHU1ZDA4Iiw1LCJcdTVkMGYi''@;'; put 'put ''LDQsIlx1NWQxNVx1NWQxN1x1NWQxOFx1NWQxOVx1NWQxYVx1NWQxY1x1NWQxZFx1NWQxZiIsNCwiXHU1ZDI1XHU1ZDI4XHU1ZDJhXHU1ZDJiXHU1ZDJjXHU1ZDJmIiw0LCJcdTVkMzUiLDcsIlx1NWQzZiIsNywiXHU1ZDQ4XHU1ZDQ5XHU1ZDRkIiwxMCwiXHU1ZDU5XHU1ZDVhXHU1ZDVjXHU1''@;'; put 'put ''ZDVlIiwxMCwiXHU1ZDZhXHU1ZDZkXHU1ZDZlXHU1ZDcwXHU1ZDcxXHU1ZDcyXHU1ZDczXHU1ZDc1IiwxMiwiXHU1ZDgzIiwyMSwiXHU1ZDlhXHU1ZDliXHU1ZDljXHU1ZDllXHU1ZDlmXHU1ZGEwIl0sWyI4ZTQwIiwiXHU1ZGExIiwyMSwiXHU1ZGI4IiwxMiwiXHU1ZGM2Iiw2LCJcdTVkY2Ui''@;'; put 'put ''LDEyLCJcdTVkZGNcdTVkZGZcdTVkZTBcdTVkZTNcdTVkZTRcdTVkZWFcdTVkZWNcdTVkZWQiXSxbIjhlODAiLCJcdTVkZjBcdTVkZjVcdTVkZjZcdTVkZjgiLDQsIlx1NWRmZlx1NWUwMFx1NWUwNFx1NWUwN1x1NWUwOVx1NWUwYVx1NWUwYlx1NWUwZFx1NWUwZVx1NWUxMlx1NWUxM1x1NWUx''@;'; put 'put ''N1x1NWUxZSIsNywiXHU1ZTI4Iiw0LCJcdTVlMmZcdTVlMzBcdTVlMzIiLDQsIlx1NWUzOVx1NWUzYVx1NWUzZVx1NWUzZlx1NWU0MFx1NWU0MVx1NWU0M1x1NWU0NiIsNSwiXHU1ZTRkIiw2LCJcdTVlNTYiLDQsIlx1NWU1Y1x1NWU1ZFx1NWU1Zlx1NWU2MFx1NWU2MyIsMTQsIlx1NWU3NVx1''@;'; put 'put ''NWU3N1x1NWU3OVx1NWU3ZVx1NWU4MVx1NWU4Mlx1NWU4M1x1NWU4NVx1NWU4OFx1NWU4OVx1NWU4Y1x1NWU4ZFx1NWU4ZVx1NWU5Mlx1NWU5OFx1NWU5Ylx1NWU5ZFx1NWVhMVx1NWVhMlx1NWVhM1x1NWVhNFx1NWVhOCIsNCwiXHU1ZWFlIiw0LCJcdTVlYjRcdTVlYmFcdTVlYmJcdTVlYmNc''@;'; put 'put ''dTVlYmRcdTVlYmYiLDZdLFsiOGY0MCIsIlx1NWVjNlx1NWVjN1x1NWVjOFx1NWVjYiIsNSwiXHU1ZWQ0XHU1ZWQ1XHU1ZWQ3XHU1ZWQ4XHU1ZWQ5XHU1ZWRhXHU1ZWRjIiwxMSwiXHU1ZWU5XHU1ZWViIiw4LCJcdTVlZjVcdTVlZjhcdTVlZjlcdTVlZmJcdTVlZmNcdTVlZmRcdTVmMDVcdTVm''@;'; put 'put ''MDZcdTVmMDdcdTVmMDlcdTVmMGNcdTVmMGRcdTVmMGVcdTVmMTBcdTVmMTJcdTVmMTRcdTVmMTZcdTVmMTlcdTVmMWFcdTVmMWNcdTVmMWRcdTVmMWVcdTVmMjFcdTVmMjJcdTVmMjNcdTVmMjQiXSxbIjhmODAiLCJcdTVmMjhcdTVmMmJcdTVmMmNcdTVmMmVcdTVmMzBcdTVmMzIiLDYsIlx1''@;'; put 'put ''NWYzYlx1NWYzZFx1NWYzZVx1NWYzZlx1NWY0MSIsMTQsIlx1NWY1MVx1NWY1NFx1NWY1OVx1NWY1YVx1NWY1Ylx1NWY1Y1x1NWY1ZVx1NWY1Zlx1NWY2MFx1NWY2M1x1NWY2NVx1NWY2N1x1NWY2OFx1NWY2Ylx1NWY2ZVx1NWY2Zlx1NWY3Mlx1NWY3NFx1NWY3NVx1NWY3Nlx1NWY3OFx1NWY3''@;'; put 'put ''YVx1NWY3ZFx1NWY3ZVx1NWY3Zlx1NWY4M1x1NWY4Nlx1NWY4ZFx1NWY4ZVx1NWY4Zlx1NWY5MVx1NWY5M1x1NWY5NFx1NWY5Nlx1NWY5YVx1NWY5Ylx1NWY5ZFx1NWY5ZVx1NWY5Zlx1NWZhMFx1NWZhMiIsNSwiXHU1ZmE5XHU1ZmFiXHU1ZmFjXHU1ZmFmIiw1LCJcdTVmYjZcdTVmYjhcdTVm''@;'; put 'put ''YjlcdTVmYmFcdTVmYmJcdTVmYmUiLDQsIlx1NWZjN1x1NWZjOFx1NWZjYVx1NWZjYlx1NWZjZVx1NWZkM1x1NWZkNFx1NWZkNVx1NWZkYVx1NWZkYlx1NWZkY1x1NWZkZVx1NWZkZlx1NWZlMlx1NWZlM1x1NWZlNVx1NWZlNlx1NWZlOFx1NWZlOVx1NWZlY1x1NWZlZlx1NWZmMFx1NWZmMlx1''@;'; put 'put ''NWZmM1x1NWZmNFx1NWZmNlx1NWZmN1x1NWZmOVx1NWZmYVx1NWZmY1x1NjAwNyJdLFsiOTA0MCIsIlx1NjAwOFx1NjAwOVx1NjAwYlx1NjAwY1x1NjAxMFx1NjAxMVx1NjAxM1x1NjAxN1x1NjAxOFx1NjAxYVx1NjAxZVx1NjAxZlx1NjAyMlx1NjAyM1x1NjAyNFx1NjAyY1x1NjAyZFx1NjAy''@;'; put 'put ''ZVx1NjAzMCIsNCwiXHU2MDM2Iiw0LCJcdTYwM2RcdTYwM2VcdTYwNDBcdTYwNDQiLDYsIlx1NjA0Y1x1NjA0ZVx1NjA0Zlx1NjA1MVx1NjA1M1x1NjA1NFx1NjA1Nlx1NjA1N1x1NjA1OFx1NjA1Ylx1NjA1Y1x1NjA1ZVx1NjA1Zlx1NjA2MFx1NjA2MVx1NjA2NVx1NjA2Nlx1NjA2ZVx1NjA3''@;'; put 'put ''MVx1NjA3Mlx1NjA3NFx1NjA3NVx1NjA3N1x1NjA3ZVx1NjA4MCJdLFsiOTA4MCIsIlx1NjA4MVx1NjA4Mlx1NjA4NVx1NjA4Nlx1NjA4N1x1NjA4OFx1NjA4YVx1NjA4Ylx1NjA4ZVx1NjA4Zlx1NjA5MFx1NjA5MVx1NjA5M1x1NjA5NVx1NjA5N1x1NjA5OFx1NjA5OVx1NjA5Y1x1NjA5ZVx1''@;'; put 'put ''NjBhMVx1NjBhMlx1NjBhNFx1NjBhNVx1NjBhN1x1NjBhOVx1NjBhYVx1NjBhZVx1NjBiMFx1NjBiM1x1NjBiNVx1NjBiNlx1NjBiN1x1NjBiOVx1NjBiYVx1NjBiZCIsNywiXHU2MGM3XHU2MGM4XHU2MGM5XHU2MGNjIiw0LCJcdTYwZDJcdTYwZDNcdTYwZDRcdTYwZDZcdTYwZDdcdTYwZDlc''@;'; put 'put ''dTYwZGJcdTYwZGVcdTYwZTEiLDQsIlx1NjBlYVx1NjBmMVx1NjBmMlx1NjBmNVx1NjBmN1x1NjBmOFx1NjBmYiIsNCwiXHU2MTAyXHU2MTAzXHU2MTA0XHU2MTA1XHU2MTA3XHU2MTBhXHU2MTBiXHU2MTBjXHU2MTEwIiw0LCJcdTYxMTZcdTYxMTdcdTYxMThcdTYxMTlcdTYxMWJcdTYxMWNc''@;'; put 'put ''dTYxMWRcdTYxMWVcdTYxMjFcdTYxMjJcdTYxMjVcdTYxMjhcdTYxMjlcdTYxMmFcdTYxMmMiLDE4LCJcdTYxNDAiLDZdLFsiOTE0MCIsIlx1NjE0N1x1NjE0OVx1NjE0Ylx1NjE0ZFx1NjE0Zlx1NjE1MFx1NjE1Mlx1NjE1M1x1NjE1NFx1NjE1NiIsNiwiXHU2MTVlXHU2MTVmXHU2MTYwXHU2''@;'; put 'put ''MTYxXHU2MTYzXHU2MTY0XHU2MTY1XHU2MTY2XHU2MTY5Iiw2LCJcdTYxNzFcdTYxNzJcdTYxNzNcdTYxNzRcdTYxNzZcdTYxNzgiLDE4LCJcdTYxOGNcdTYxOGRcdTYxOGYiLDQsIlx1NjE5NSJdLFsiOTE4MCIsIlx1NjE5NiIsNiwiXHU2MTllIiw4LCJcdTYxYWFcdTYxYWJcdTYxYWQiLDks''@;'; put 'put ''Ilx1NjFiOCIsNSwiXHU2MWJmXHU2MWMwXHU2MWMxXHU2MWMzIiw0LCJcdTYxYzlcdTYxY2MiLDQsIlx1NjFkM1x1NjFkNSIsMTYsIlx1NjFlNyIsMTMsIlx1NjFmNiIsOCwiXHU2MjAwIiw1LCJcdTYyMDdcdTYyMDlcdTYyMTNcdTYyMTRcdTYyMTlcdTYyMWNcdTYyMWRcdTYyMWVcdTYyMjBc''@;'; put 'put ''dTYyMjNcdTYyMjZcdTYyMjdcdTYyMjhcdTYyMjlcdTYyMmJcdTYyMmRcdTYyMmZcdTYyMzBcdTYyMzFcdTYyMzJcdTYyMzVcdTYyMzZcdTYyMzgiLDQsIlx1NjI0Mlx1NjI0NFx1NjI0NVx1NjI0Nlx1NjI0YSJdLFsiOTI0MCIsIlx1NjI0Zlx1NjI1MFx1NjI1NVx1NjI1Nlx1NjI1N1x1NjI1''@;'; put 'put ''OVx1NjI1YVx1NjI1YyIsNiwiXHU2MjY0XHU2MjY1XHU2MjY4XHU2MjcxXHU2MjcyXHU2Mjc0XHU2Mjc1XHU2Mjc3XHU2Mjc4XHU2MjdhXHU2MjdiXHU2MjdkXHU2MjgxXHU2MjgyXHU2MjgzXHU2Mjg1XHU2Mjg2XHU2Mjg3XHU2Mjg4XHU2MjhiIiw1LCJcdTYyOTRcdTYyOTlcdTYyOWNcdTYy''@;'; put 'put ''OWRcdTYyOWVcdTYyYTNcdTYyYTZcdTYyYTdcdTYyYTlcdTYyYWFcdTYyYWRcdTYyYWVcdTYyYWZcdTYyYjBcdTYyYjJcdTYyYjNcdTYyYjRcdTYyYjZcdTYyYjdcdTYyYjhcdTYyYmFcdTYyYmVcdTYyYzBcdTYyYzEiXSxbIjkyODAiLCJcdTYyYzNcdTYyY2JcdTYyY2ZcdTYyZDFcdTYyZDVc''@;'; put 'put ''dTYyZGRcdTYyZGVcdTYyZTBcdTYyZTFcdTYyZTRcdTYyZWFcdTYyZWJcdTYyZjBcdTYyZjJcdTYyZjVcdTYyZjhcdTYyZjlcdTYyZmFcdTYyZmJcdTYzMDBcdTYzMDNcdTYzMDRcdTYzMDVcdTYzMDZcdTYzMGFcdTYzMGJcdTYzMGNcdTYzMGRcdTYzMGZcdTYzMTBcdTYzMTJcdTYzMTNcdTYz''@;'; put 'put ''MTRcdTYzMTVcdTYzMTdcdTYzMThcdTYzMTlcdTYzMWNcdTYzMjZcdTYzMjdcdTYzMjlcdTYzMmNcdTYzMmRcdTYzMmVcdTYzMzBcdTYzMzFcdTYzMzMiLDUsIlx1NjMzYlx1NjMzY1x1NjMzZVx1NjMzZlx1NjM0MFx1NjM0MVx1NjM0NFx1NjM0N1x1NjM0OFx1NjM0YVx1NjM1MVx1NjM1Mlx1''@;'; put 'put ''NjM1M1x1NjM1NFx1NjM1NiIsNywiXHU2MzYwXHU2MzY0XHU2MzY1XHU2MzY2XHU2MzY4XHU2MzZhXHU2MzZiXHU2MzZjXHU2MzZmXHU2MzcwXHU2MzcyXHU2MzczXHU2Mzc0XHU2Mzc1XHU2Mzc4XHU2Mzc5XHU2MzdjXHU2MzdkXHU2MzdlXHU2MzdmXHU2MzgxXHU2MzgzXHU2Mzg0XHU2Mzg1''@;'; put 'put ''XHU2Mzg2XHU2MzhiXHU2MzhkXHU2MzkxXHU2MzkzXHU2Mzk0XHU2Mzk1XHU2Mzk3XHU2Mzk5Iiw2LCJcdTYzYTFcdTYzYTRcdTYzYTZcdTYzYWJcdTYzYWZcdTYzYjFcdTYzYjJcdTYzYjVcdTYzYjZcdTYzYjlcdTYzYmJcdTYzYmRcdTYzYmZcdTYzYzAiXSxbIjkzNDAiLCJcdTYzYzFcdTYz''@;'; put 'put ''YzJcdTYzYzNcdTYzYzVcdTYzYzdcdTYzYzhcdTYzY2FcdTYzY2JcdTYzY2NcdTYzZDFcdTYzZDNcdTYzZDRcdTYzZDVcdTYzZDciLDYsIlx1NjNkZlx1NjNlMlx1NjNlNCIsNCwiXHU2M2ViXHU2M2VjXHU2M2VlXHU2M2VmXHU2M2YwXHU2M2YxXHU2M2YzXHU2M2Y1XHU2M2Y3XHU2M2Y5XHU2''@;'; put 'put ''M2ZhXHU2M2ZiXHU2M2ZjXHU2M2ZlXHU2NDAzXHU2NDA0XHU2NDA2Iiw0LCJcdTY0MGRcdTY0MGVcdTY0MTFcdTY0MTJcdTY0MTUiLDUsIlx1NjQxZFx1NjQxZlx1NjQyMlx1NjQyM1x1NjQyNCJdLFsiOTM4MCIsIlx1NjQyNVx1NjQyN1x1NjQyOFx1NjQyOVx1NjQyYlx1NjQyZSIsNSwiXHU2''@;'; put 'put ''NDM1Iiw0LCJcdTY0M2JcdTY0M2NcdTY0M2VcdTY0NDBcdTY0NDJcdTY0NDNcdTY0NDlcdTY0NGIiLDYsIlx1NjQ1M1x1NjQ1NVx1NjQ1Nlx1NjQ1N1x1NjQ1OSIsNCwiXHU2NDVmIiw3LCJcdTY0NjhcdTY0NmFcdTY0NmJcdTY0NmNcdTY0NmUiLDksIlx1NjQ3YiIsNiwiXHU2NDgzXHU2NDg2''@;'; put 'put ''XHU2NDg4Iiw4LCJcdTY0OTNcdTY0OTRcdTY0OTdcdTY0OThcdTY0OWFcdTY0OWJcdTY0OWNcdTY0OWRcdTY0OWYiLDQsIlx1NjRhNVx1NjRhNlx1NjRhN1x1NjRhOFx1NjRhYVx1NjRhYlx1NjRhZlx1NjRiMVx1NjRiMlx1NjRiM1x1NjRiNFx1NjRiNlx1NjRiOVx1NjRiYlx1NjRiZFx1NjRi''@;'; put 'put ''ZVx1NjRiZlx1NjRjMVx1NjRjM1x1NjRjNFx1NjRjNiIsNiwiXHU2NGNmXHU2NGQxXHU2NGQzXHU2NGQ0XHU2NGQ1XHU2NGQ2XHU2NGQ5XHU2NGRhIl0sWyI5NDQwIiwiXHU2NGRiXHU2NGRjXHU2NGRkXHU2NGRmXHU2NGUwXHU2NGUxXHU2NGUzXHU2NGU1XHU2NGU3IiwyNCwiXHU2NTAxIiw3''@;'; put 'put ''LCJcdTY1MGEiLDcsIlx1NjUxMyIsNCwiXHU2NTE5Iiw4XSxbIjk0ODAiLCJcdTY1MjJcdTY1MjNcdTY1MjRcdTY1MjYiLDQsIlx1NjUyY1x1NjUyZFx1NjUzMFx1NjUzMVx1NjUzMlx1NjUzM1x1NjUzN1x1NjUzYVx1NjUzY1x1NjUzZFx1NjU0MCIsNCwiXHU2NTQ2XHU2NTQ3XHU2NTRhXHU2''@;'; put 'put ''NTRiXHU2NTRkXHU2NTRlXHU2NTUwXHU2NTUyXHU2NTUzXHU2NTU0XHU2NTU3XHU2NTU4XHU2NTVhXHU2NTVjXHU2NTVmXHU2NTYwXHU2NTYxXHU2NTY0XHU2NTY1XHU2NTY3XHU2NTY4XHU2NTY5XHU2NTZhXHU2NTZkXHU2NTZlXHU2NTZmXHU2NTcxXHU2NTczXHU2NTc1XHU2NTc2XHU2NTc4''@;'; put 'put ''IiwxNCwiXHU2NTg4XHU2NTg5XHU2NThhXHU2NThkXHU2NThlXHU2NThmXHU2NTkyXHU2NTk0XHU2NTk1XHU2NTk2XHU2NTk4XHU2NTlhXHU2NTlkXHU2NTllXHU2NWEwXHU2NWEyXHU2NWEzXHU2NWE2XHU2NWE4XHU2NWFhXHU2NWFjXHU2NWFlXHU2NWIxIiw3LCJcdTY1YmFcdTY1YmJcdTY1''@;'; put 'put ''YmVcdTY1YmZcdTY1YzBcdTY1YzJcdTY1YzdcdTY1YzhcdTY1YzlcdTY1Y2FcdTY1Y2RcdTY1ZDBcdTY1ZDFcdTY1ZDNcdTY1ZDRcdTY1ZDVcdTY1ZDgiLDcsIlx1NjVlMVx1NjVlM1x1NjVlNFx1NjVlYVx1NjVlYiJdLFsiOTU0MCIsIlx1NjVmMlx1NjVmM1x1NjVmNFx1NjVmNVx1NjVmOFx1''@;'; put 'put ''NjVmOVx1NjVmYiIsNCwiXHU2NjAxXHU2NjA0XHU2NjA1XHU2NjA3XHU2NjA4XHU2NjA5XHU2NjBiXHU2NjBkXHU2NjEwXHU2NjExXHU2NjEyXHU2NjE2XHU2NjE3XHU2NjE4XHU2NjFhXHU2NjFiXHU2NjFjXHU2NjFlXHU2NjIxXHU2NjIyXHU2NjIzXHU2NjI0XHU2NjI2XHU2NjI5XHU2NjJh''@;'; put 'put ''XHU2NjJiXHU2NjJjXHU2NjJlXHU2NjMwXHU2NjMyXHU2NjMzXHU2NjM3Iiw0LCJcdTY2M2RcdTY2M2ZcdTY2NDBcdTY2NDJcdTY2NDQiLDYsIlx1NjY0ZFx1NjY0ZVx1NjY1MFx1NjY1MVx1NjY1OCJdLFsiOTU4MCIsIlx1NjY1OVx1NjY1Ylx1NjY1Y1x1NjY1ZFx1NjY1ZVx1NjY2MFx1NjY2''@;'; put 'put ''Mlx1NjY2M1x1NjY2NVx1NjY2N1x1NjY2OSIsNCwiXHU2NjcxXHU2NjcyXHU2NjczXHU2Njc1XHU2Njc4XHU2Njc5XHU2NjdiXHU2NjdjXHU2NjdkXHU2NjdmXHU2NjgwXHU2NjgxXHU2NjgzXHU2Njg1XHU2Njg2XHU2Njg4XHU2Njg5XHU2NjhhXHU2NjhiXHU2NjhkXHU2NjhlXHU2NjhmXHU2''@;'; put 'put ''NjkwXHU2NjkyXHU2NjkzXHU2Njk0XHU2Njk1XHU2Njk4Iiw0LCJcdTY2OWUiLDgsIlx1NjZhOSIsNCwiXHU2NmFmIiw0LCJcdTY2YjVcdTY2YjZcdTY2YjdcdTY2YjhcdTY2YmFcdTY2YmJcdTY2YmNcdTY2YmRcdTY2YmYiLDI1LCJcdTY2ZGFcdTY2ZGUiLDcsIlx1NjZlN1x1NjZlOFx1NjZl''@;'; put 'put ''YSIsNSwiXHU2NmYxXHU2NmY1XHU2NmY2XHU2NmY4XHU2NmZhXHU2NmZiXHU2NmZkXHU2NzAxXHU2NzAyXHU2NzAzIl0sWyI5NjQwIiwiXHU2NzA0XHU2NzA1XHU2NzA2XHU2NzA3XHU2NzBjXHU2NzBlXHU2NzBmXHU2NzExXHU2NzEyXHU2NzEzXHU2NzE2XHU2NzE4XHU2NzE5XHU2NzFhXHU2''@;'; put 'put ''NzFjXHU2NzFlXHU2NzIwIiw1LCJcdTY3MjdcdTY3MjlcdTY3MmVcdTY3MzBcdTY3MzJcdTY3MzNcdTY3MzZcdTY3MzdcdTY3MzhcdTY3MzlcdTY3M2JcdTY3M2NcdTY3M2VcdTY3M2ZcdTY3NDFcdTY3NDRcdTY3NDVcdTY3NDdcdTY3NGFcdTY3NGJcdTY3NGRcdTY3NTJcdTY3NTRcdTY3NTVc''@;'; put 'put ''dTY3NTciLDQsIlx1Njc1ZFx1Njc2Mlx1Njc2M1x1Njc2NFx1Njc2Nlx1Njc2N1x1Njc2Ylx1Njc2Y1x1Njc2ZVx1Njc3MVx1Njc3NFx1Njc3NiJdLFsiOTY4MCIsIlx1Njc3OFx1Njc3OVx1Njc3YVx1Njc3Ylx1Njc3ZFx1Njc4MFx1Njc4Mlx1Njc4M1x1Njc4NVx1Njc4Nlx1Njc4OFx1Njc4''@;'; put 'put ''YVx1Njc4Y1x1Njc4ZFx1Njc4ZVx1Njc4Zlx1Njc5MVx1Njc5Mlx1Njc5M1x1Njc5NFx1Njc5Nlx1Njc5OVx1Njc5Ylx1Njc5Zlx1NjdhMFx1NjdhMVx1NjdhNFx1NjdhNlx1NjdhOVx1NjdhY1x1NjdhZVx1NjdiMVx1NjdiMlx1NjdiNFx1NjdiOSIsNywiXHU2N2MyXHU2N2M1Iiw5LCJcdTY3''@;'; put 'put ''ZDVcdTY3ZDZcdTY3ZDdcdTY3ZGJcdTY3ZGZcdTY3ZTFcdTY3ZTNcdTY3ZTRcdTY3ZTZcdTY3ZTdcdTY3ZThcdTY3ZWFcdTY3ZWJcdTY3ZWRcdTY3ZWVcdTY3ZjJcdTY3ZjUiLDcsIlx1NjdmZVx1NjgwMVx1NjgwMlx1NjgwM1x1NjgwNFx1NjgwNlx1NjgwZFx1NjgxMFx1NjgxMlx1NjgxNFx1''@;'; put 'put ''NjgxNVx1NjgxOCIsNCwiXHU2ODFlXHU2ODFmXHU2ODIwXHU2ODIyIiw2LCJcdTY4MmIiLDYsIlx1NjgzNFx1NjgzNVx1NjgzNlx1NjgzYVx1NjgzYlx1NjgzZlx1Njg0N1x1Njg0Ylx1Njg0ZFx1Njg0Zlx1Njg1Mlx1Njg1NiIsNV0sWyI5NzQwIiwiXHU2ODVjXHU2ODVkXHU2ODVlXHU2ODVm''@;'; put 'put ''XHU2ODZhXHU2ODZjIiw3LCJcdTY4NzVcdTY4NzgiLDgsIlx1Njg4Mlx1Njg4NFx1Njg4NyIsNywiXHU2ODkwXHU2ODkxXHU2ODkyXHU2ODk0XHU2ODk1XHU2ODk2XHU2ODk4Iiw5LCJcdTY4YTNcdTY4YTRcdTY4YTVcdTY4YTlcdTY4YWFcdTY4YWJcdTY4YWNcdTY4YWVcdTY4YjFcdTY4YjJc''@;'; put 'put ''dTY4YjRcdTY4YjZcdTY4YjdcdTY4YjgiXSxbIjk3ODAiLCJcdTY4YjkiLDYsIlx1NjhjMVx1NjhjMyIsNSwiXHU2OGNhXHU2OGNjXHU2OGNlXHU2OGNmXHU2OGQwXHU2OGQxXHU2OGQzXHU2OGQ0XHU2OGQ2XHU2OGQ3XHU2OGQ5XHU2OGRiIiw0LCJcdTY4ZTFcdTY4ZTJcdTY4ZTQiLDksIlx1''@;'; put 'put ''NjhlZlx1NjhmMlx1NjhmM1x1NjhmNFx1NjhmNlx1NjhmN1x1NjhmOFx1NjhmYlx1NjhmZFx1NjhmZVx1NjhmZlx1NjkwMFx1NjkwMlx1NjkwM1x1NjkwNFx1NjkwNiIsNCwiXHU2OTBjXHU2OTBmXHU2OTExXHU2OTEzIiwxMSwiXHU2OTIxXHU2OTIyXHU2OTIzXHU2OTI1Iiw3LCJcdTY5MmVc''@;'; put 'put ''dTY5MmZcdTY5MzFcdTY5MzJcdTY5MzNcdTY5MzVcdTY5MzZcdTY5MzdcdTY5MzhcdTY5M2FcdTY5M2JcdTY5M2NcdTY5M2VcdTY5NDBcdTY5NDFcdTY5NDMiLDE2LCJcdTY5NTVcdTY5NTZcdTY5NThcdTY5NTlcdTY5NWJcdTY5NWNcdTY5NWYiXSxbIjk4NDAiLCJcdTY5NjFcdTY5NjJcdTY5''@;'; put 'put ''NjRcdTY5NjVcdTY5NjdcdTY5NjhcdTY5NjlcdTY5NmFcdTY5NmNcdTY5NmRcdTY5NmZcdTY5NzBcdTY5NzIiLDQsIlx1Njk3YVx1Njk3Ylx1Njk3ZFx1Njk3ZVx1Njk3Zlx1Njk4MVx1Njk4M1x1Njk4NVx1Njk4YVx1Njk4Ylx1Njk4Y1x1Njk4ZSIsNSwiXHU2OTk2XHU2OTk3XHU2OTk5XHU2''@;'; put 'put ''OTlhXHU2OTlkIiw5LCJcdTY5YTlcdTY5YWFcdTY5YWNcdTY5YWVcdTY5YWZcdTY5YjBcdTY5YjJcdTY5YjNcdTY5YjVcdTY5YjZcdTY5YjhcdTY5YjlcdTY5YmFcdTY5YmNcdTY5YmQiXSxbIjk4ODAiLCJcdTY5YmVcdTY5YmZcdTY5YzBcdTY5YzIiLDcsIlx1NjljYlx1NjljZFx1NjljZlx1''@;'; put 'put ''NjlkMVx1NjlkMlx1NjlkM1x1NjlkNSIsNSwiXHU2OWRjXHU2OWRkXHU2OWRlXHU2OWUxIiwxMSwiXHU2OWVlXHU2OWVmXHU2OWYwXHU2OWYxXHU2OWYzIiw5LCJcdTY5ZmVcdTZhMDAiLDksIlx1NmEwYiIsMTEsIlx1NmExOSIsNSwiXHU2YTIwXHU2YTIyIiw1LCJcdTZhMjlcdTZhMmJcdTZh''@;'; put 'put ''MmNcdTZhMmRcdTZhMmVcdTZhMzBcdTZhMzJcdTZhMzNcdTZhMzRcdTZhMzYiLDYsIlx1NmEzZiIsNCwiXHU2YTQ1XHU2YTQ2XHU2YTQ4Iiw3LCJcdTZhNTEiLDYsIlx1NmE1YSJdLFsiOTk0MCIsIlx1NmE1YyIsNCwiXHU2YTYyXHU2YTYzXHU2YTY0XHU2YTY2IiwxMCwiXHU2YTcyIiw2LCJc''@;'; put 'put ''dTZhN2FcdTZhN2JcdTZhN2RcdTZhN2VcdTZhN2ZcdTZhODFcdTZhODJcdTZhODNcdTZhODUiLDgsIlx1NmE4Zlx1NmE5MiIsNCwiXHU2YTk4Iiw3LCJcdTZhYTEiLDVdLFsiOTk4MCIsIlx1NmFhN1x1NmFhOFx1NmFhYVx1NmFhZCIsMTE0LCJcdTZiMjVcdTZiMjZcdTZiMjgiLDZdLFsiOWE0''@;'; put 'put ''MCIsIlx1NmIyZlx1NmIzMFx1NmIzMVx1NmIzM1x1NmIzNFx1NmIzNVx1NmIzNlx1NmIzOFx1NmIzYlx1NmIzY1x1NmIzZFx1NmIzZlx1NmI0MFx1NmI0MVx1NmI0Mlx1NmI0NFx1NmI0NVx1NmI0OFx1NmI0YVx1NmI0Ylx1NmI0ZCIsMTEsIlx1NmI1YSIsNywiXHU2YjY4XHU2YjY5XHU2YjZi''@;'; put 'put ''IiwxMywiXHU2YjdhXHU2YjdkXHU2YjdlXHU2YjdmXHU2YjgwXHU2Yjg1XHU2Yjg4Il0sWyI5YTgwIiwiXHU2YjhjXHU2YjhlXHU2YjhmXHU2YjkwXHU2YjkxXHU2Yjk0XHU2Yjk1XHU2Yjk3XHU2Yjk4XHU2Yjk5XHU2YjljIiw0LCJcdTZiYTIiLDcsIlx1NmJhYiIsNywiXHU2YmI2XHU2YmI4''@;'; put 'put ''Iiw2LCJcdTZiYzBcdTZiYzNcdTZiYzRcdTZiYzYiLDQsIlx1NmJjY1x1NmJjZVx1NmJkMFx1NmJkMVx1NmJkOFx1NmJkYVx1NmJkYyIsNCwiXHU2YmUyIiw3LCJcdTZiZWNcdTZiZWRcdTZiZWVcdTZiZjBcdTZiZjFcdTZiZjJcdTZiZjRcdTZiZjZcdTZiZjdcdTZiZjhcdTZiZmFcdTZiZmJc''@;'; put 'put ''dTZiZmNcdTZiZmUiLDYsIlx1NmMwOCIsNCwiXHU2YzBlXHU2YzEyXHU2YzE3XHU2YzFjXHU2YzFkXHU2YzFlXHU2YzIwXHU2YzIzXHU2YzI1XHU2YzJiXHU2YzJjXHU2YzJkXHU2YzMxXHU2YzMzXHU2YzM2XHU2YzM3XHU2YzM5XHU2YzNhXHU2YzNiXHU2YzNjXHU2YzNlXHU2YzNmXHU2YzQz''@;'; put 'put ''XHU2YzQ0XHU2YzQ1XHU2YzQ4XHU2YzRiIiw0LCJcdTZjNTFcdTZjNTJcdTZjNTNcdTZjNTZcdTZjNTgiXSxbIjliNDAiLCJcdTZjNTlcdTZjNWFcdTZjNjJcdTZjNjNcdTZjNjVcdTZjNjZcdTZjNjdcdTZjNmIiLDQsIlx1NmM3MVx1NmM3M1x1NmM3NVx1NmM3N1x1NmM3OFx1NmM3YVx1NmM3''@;'; put 'put ''Ylx1NmM3Y1x1NmM3Zlx1NmM4MFx1NmM4NFx1NmM4N1x1NmM4YVx1NmM4Ylx1NmM4ZFx1NmM4ZVx1NmM5MVx1NmM5Mlx1NmM5NVx1NmM5Nlx1NmM5N1x1NmM5OFx1NmM5YVx1NmM5Y1x1NmM5ZFx1NmM5ZVx1NmNhMFx1NmNhMlx1NmNhOFx1NmNhY1x1NmNhZlx1NmNiMFx1NmNiNFx1NmNiNVx1''@;'; put 'put ''NmNiNlx1NmNiN1x1NmNiYVx1NmNjMFx1NmNjMVx1NmNjMlx1NmNjM1x1NmNjNlx1NmNjN1x1NmNjOFx1NmNjYlx1NmNjZFx1NmNjZVx1NmNjZlx1NmNkMVx1NmNkMlx1NmNkOCJdLFsiOWI4MCIsIlx1NmNkOVx1NmNkYVx1NmNkY1x1NmNkZFx1NmNkZlx1NmNlNFx1NmNlNlx1NmNlN1x1NmNl''@;'; put 'put ''OVx1NmNlY1x1NmNlZFx1NmNmMlx1NmNmNFx1NmNmOVx1NmNmZlx1NmQwMFx1NmQwMlx1NmQwM1x1NmQwNVx1NmQwNlx1NmQwOFx1NmQwOVx1NmQwYVx1NmQwZFx1NmQwZlx1NmQxMFx1NmQxMVx1NmQxM1x1NmQxNFx1NmQxNVx1NmQxNlx1NmQxOFx1NmQxY1x1NmQxZFx1NmQxZiIsNSwiXHU2''@;'; put 'put ''ZDI2XHU2ZDI4XHU2ZDI5XHU2ZDJjXHU2ZDJkXHU2ZDJmXHU2ZDMwXHU2ZDM0XHU2ZDM2XHU2ZDM3XHU2ZDM4XHU2ZDNhXHU2ZDNmXHU2ZDQwXHU2ZDQyXHU2ZDQ0XHU2ZDQ5XHU2ZDRjXHU2ZDUwXHU2ZDU1XHU2ZDU2XHU2ZDU3XHU2ZDU4XHU2ZDViXHU2ZDVkXHU2ZDVmXHU2ZDYxXHU2ZDYy''@;'; put 'put ''XHU2ZDY0XHU2ZDY1XHU2ZDY3XHU2ZDY4XHU2ZDZiXHU2ZDZjXHU2ZDZkXHU2ZDcwXHU2ZDcxXHU2ZDcyXHU2ZDczXHU2ZDc1XHU2ZDc2XHU2ZDc5XHU2ZDdhXHU2ZDdiXHU2ZDdkIiw0LCJcdTZkODNcdTZkODRcdTZkODZcdTZkODdcdTZkOGFcdTZkOGJcdTZkOGRcdTZkOGZcdTZkOTBcdTZk''@;'; put 'put ''OTJcdTZkOTYiLDQsIlx1NmQ5Y1x1NmRhMlx1NmRhNVx1NmRhY1x1NmRhZFx1NmRiMFx1NmRiMVx1NmRiM1x1NmRiNFx1NmRiNlx1NmRiN1x1NmRiOSIsNSwiXHU2ZGMxXHU2ZGMyXHU2ZGMzXHU2ZGM4XHU2ZGM5XHU2ZGNhIl0sWyI5YzQwIiwiXHU2ZGNkXHU2ZGNlXHU2ZGNmXHU2ZGQwXHU2''@;'; put 'put ''ZGQyXHU2ZGQzXHU2ZGQ0XHU2ZGQ1XHU2ZGQ3XHU2ZGRhXHU2ZGRiXHU2ZGRjXHU2ZGRmXHU2ZGUyXHU2ZGUzXHU2ZGU1XHU2ZGU3XHU2ZGU4XHU2ZGU5XHU2ZGVhXHU2ZGVkXHU2ZGVmXHU2ZGYwXHU2ZGYyXHU2ZGY0XHU2ZGY1XHU2ZGY2XHU2ZGY4XHU2ZGZhXHU2ZGZkIiw3LCJcdTZlMDZc''@;'; put 'put ''dTZlMDdcdTZlMDhcdTZlMDlcdTZlMGJcdTZlMGZcdTZlMTJcdTZlMTNcdTZlMTVcdTZlMThcdTZlMTlcdTZlMWJcdTZlMWNcdTZlMWVcdTZlMWZcdTZlMjJcdTZlMjZcdTZlMjdcdTZlMjhcdTZlMmFcdTZlMmNcdTZlMmVcdTZlMzBcdTZlMzFcdTZlMzNcdTZlMzUiXSxbIjljODAiLCJcdTZl''@;'; put 'put ''MzZcdTZlMzdcdTZlMzlcdTZlM2IiLDcsIlx1NmU0NSIsNywiXHU2ZTRmXHU2ZTUwXHU2ZTUxXHU2ZTUyXHU2ZTU1XHU2ZTU3XHU2ZTU5XHU2ZTVhXHU2ZTVjXHU2ZTVkXHU2ZTVlXHU2ZTYwIiwxMCwiXHU2ZTZjXHU2ZTZkXHU2ZTZmIiwxNCwiXHU2ZTgwXHU2ZTgxXHU2ZTgyXHU2ZTg0XHU2''@;'; put 'put ''ZTg3XHU2ZTg4XHU2ZThhIiw0LCJcdTZlOTEiLDYsIlx1NmU5OVx1NmU5YVx1NmU5Ylx1NmU5ZFx1NmU5ZVx1NmVhMFx1NmVhMVx1NmVhM1x1NmVhNFx1NmVhNlx1NmVhOFx1NmVhOVx1NmVhYlx1NmVhY1x1NmVhZFx1NmVhZVx1NmViMFx1NmViM1x1NmViNVx1NmViOFx1NmViOVx1NmViY1x1''@;'; put 'put ''NmViZVx1NmViZlx1NmVjMFx1NmVjM1x1NmVjNFx1NmVjNVx1NmVjNlx1NmVjOFx1NmVjOVx1NmVjYVx1NmVjY1x1NmVjZFx1NmVjZVx1NmVkMFx1NmVkMlx1NmVkNlx1NmVkOFx1NmVkOVx1NmVkYlx1NmVkY1x1NmVkZFx1NmVlM1x1NmVlN1x1NmVlYSIsNV0sWyI5ZDQwIiwiXHU2ZWYwXHU2''@;'; put 'put ''ZWYxXHU2ZWYyXHU2ZWYzXHU2ZWY1XHU2ZWY2XHU2ZWY3XHU2ZWY4XHU2ZWZhIiw3LCJcdTZmMDNcdTZmMDRcdTZmMDVcdTZmMDdcdTZmMDhcdTZmMGEiLDQsIlx1NmYxMFx1NmYxMVx1NmYxMlx1NmYxNiIsOSwiXHU2ZjIxXHU2ZjIyXHU2ZjIzXHU2ZjI1XHU2ZjI2XHU2ZjI3XHU2ZjI4XHU2''@;'; put 'put ''ZjJjXHU2ZjJlXHU2ZjMwXHU2ZjMyXHU2ZjM0XHU2ZjM1XHU2ZjM3Iiw2LCJcdTZmM2ZcdTZmNDBcdTZmNDFcdTZmNDIiXSxbIjlkODAiLCJcdTZmNDNcdTZmNDRcdTZmNDVcdTZmNDhcdTZmNDlcdTZmNGFcdTZmNGNcdTZmNGUiLDksIlx1NmY1OVx1NmY1YVx1NmY1Ylx1NmY1ZFx1NmY1Zlx1''@;'; put 'put ''NmY2MFx1NmY2MVx1NmY2M1x1NmY2NFx1NmY2NVx1NmY2NyIsNSwiXHU2ZjZmXHU2ZjcwXHU2ZjcxXHU2ZjczXHU2Zjc1XHU2Zjc2XHU2Zjc3XHU2Zjc5XHU2ZjdiXHU2ZjdkIiw2LCJcdTZmODVcdTZmODZcdTZmODdcdTZmOGFcdTZmOGJcdTZmOGYiLDEyLCJcdTZmOWRcdTZmOWVcdTZmOWZc''@;'; put 'put ''dTZmYTBcdTZmYTIiLDQsIlx1NmZhOCIsMTAsIlx1NmZiNFx1NmZiNVx1NmZiN1x1NmZiOFx1NmZiYSIsNSwiXHU2ZmMxXHU2ZmMzIiw1LCJcdTZmY2EiLDYsIlx1NmZkMyIsMTAsIlx1NmZkZlx1NmZlMlx1NmZlM1x1NmZlNFx1NmZlNSJdLFsiOWU0MCIsIlx1NmZlNiIsNywiXHU2ZmYwIiwz''@;'; put 'put ''MiwiXHU3MDEyIiw3LCJcdTcwMWMiLDYsIlx1NzAyNCIsNl0sWyI5ZTgwIiwiXHU3MDJiIiw5LCJcdTcwMzZcdTcwMzdcdTcwMzhcdTcwM2EiLDE3LCJcdTcwNGRcdTcwNGVcdTcwNTAiLDEzLCJcdTcwNWYiLDExLCJcdTcwNmVcdTcwNzFcdTcwNzJcdTcwNzNcdTcwNzRcdTcwNzdcdTcwNzlc''@;'; put 'put ''dTcwN2FcdTcwN2JcdTcwN2RcdTcwODFcdTcwODJcdTcwODNcdTcwODRcdTcwODZcdTcwODdcdTcwODhcdTcwOGJcdTcwOGNcdTcwOGRcdTcwOGZcdTcwOTBcdTcwOTFcdTcwOTNcdTcwOTdcdTcwOThcdTcwOWFcdTcwOWJcdTcwOWUiLDEyLCJcdTcwYjBcdTcwYjJcdTcwYjRcdTcwYjVcdTcw''@;'; put 'put ''YjZcdTcwYmFcdTcwYmVcdTcwYmZcdTcwYzRcdTcwYzVcdTcwYzZcdTcwYzdcdTcwYzlcdTcwY2IiLDEyLCJcdTcwZGEiXSxbIjlmNDAiLCJcdTcwZGNcdTcwZGRcdTcwZGVcdTcwZTBcdTcwZTFcdTcwZTJcdTcwZTNcdTcwZTVcdTcwZWFcdTcwZWVcdTcwZjAiLDYsIlx1NzBmOFx1NzBmYVx1''@;'; put 'put ''NzBmYlx1NzBmY1x1NzBmZSIsMTAsIlx1NzEwYiIsNCwiXHU3MTExXHU3MTEyXHU3MTE0XHU3MTE3XHU3MTFiIiwxMCwiXHU3MTI3Iiw3LCJcdTcxMzJcdTcxMzNcdTcxMzQiXSxbIjlmODAiLCJcdTcxMzVcdTcxMzciLDEzLCJcdTcxNDZcdTcxNDdcdTcxNDhcdTcxNDlcdTcxNGJcdTcxNGRc''@;'; put 'put ''dTcxNGYiLDEyLCJcdTcxNWRcdTcxNWYiLDQsIlx1NzE2NVx1NzE2OSIsNCwiXHU3MTZmXHU3MTcwXHU3MTcxXHU3MTc0XHU3MTc1XHU3MTc2XHU3MTc3XHU3MTc5XHU3MTdiXHU3MTdjXHU3MTdlIiw1LCJcdTcxODUiLDQsIlx1NzE4Ylx1NzE4Y1x1NzE4ZFx1NzE4ZVx1NzE5MFx1NzE5MVx1''@;'; put 'put ''NzE5Mlx1NzE5M1x1NzE5NVx1NzE5Nlx1NzE5N1x1NzE5YSIsNCwiXHU3MWExIiw2LCJcdTcxYTlcdTcxYWFcdTcxYWJcdTcxYWQiLDUsIlx1NzFiNFx1NzFiNlx1NzFiN1x1NzFiOFx1NzFiYSIsOCwiXHU3MWM0Iiw5LCJcdTcxY2YiLDRdLFsiYTA0MCIsIlx1NzFkNiIsOSwiXHU3MWUxXHU3''@;'; put 'put ''MWUyXHU3MWUzXHU3MWU0XHU3MWU2XHU3MWU4Iiw1LCJcdTcxZWYiLDksIlx1NzFmYSIsMTEsIlx1NzIwNyIsMTldLFsiYTA4MCIsIlx1NzIxYlx1NzIxY1x1NzIxZSIsOSwiXHU3MjI5XHU3MjJiXHU3MjJkXHU3MjJlXHU3MjJmXHU3MjMyXHU3MjMzXHU3MjM0XHU3MjNhXHU3MjNjXHU3MjNl''@;'; put 'put ''XHU3MjQwIiw2LCJcdTcyNDlcdTcyNGFcdTcyNGJcdTcyNGVcdTcyNGZcdTcyNTBcdTcyNTFcdTcyNTNcdTcyNTRcdTcyNTVcdTcyNTdcdTcyNThcdTcyNWFcdTcyNWNcdTcyNWVcdTcyNjBcdTcyNjNcdTcyNjRcdTcyNjVcdTcyNjhcdTcyNmFcdTcyNmJcdTcyNmNcdTcyNmRcdTcyNzBcdTcy''@;'; put 'put ''NzFcdTcyNzNcdTcyNzRcdTcyNzZcdTcyNzdcdTcyNzhcdTcyN2JcdTcyN2NcdTcyN2RcdTcyODJcdTcyODNcdTcyODUiLDQsIlx1NzI4Y1x1NzI4ZVx1NzI5MFx1NzI5MVx1NzI5MyIsMTEsIlx1NzJhMCIsMTEsIlx1NzJhZVx1NzJiMVx1NzJiMlx1NzJiM1x1NzJiNVx1NzJiYSIsNiwiXHU3''@;'; put 'put ''MmM1XHU3MmM2XHU3MmM3XHU3MmM5XHU3MmNhXHU3MmNiXHU3MmNjXHU3MmNmXHU3MmQxXHU3MmQzXHU3MmQ0XHU3MmQ1XHU3MmQ2XHU3MmQ4XHU3MmRhXHU3MmRiIl0sWyJhMWExIiwiXHUzMDAwXHUzMDAxXHUzMDAyXHhiN1x1MDJjOVx1MDJjN1x4YThcdTMwMDNcdTMwMDVcdTIwMTRcdWZm''@;'; put 'put ''NWVcdTIwMTZcdTIwMjZcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTMwMTRcdTMwMTVcdTMwMDgiLDcsIlx1MzAxNlx1MzAxN1x1MzAxMFx1MzAxMVx4YjFceGQ3XHhmN1x1MjIzNlx1MjIyN1x1MjIyOFx1MjIxMVx1MjIwZlx1MjIyYVx1MjIyOVx1MjIwOFx1MjIzN1x1MjIxYVx1MjJhNVx1''@;'; put 'put ''MjIyNVx1MjIyMFx1MjMxMlx1MjI5OVx1MjIyYlx1MjIyZVx1MjI2MVx1MjI0Y1x1MjI0OFx1MjIzZFx1MjIxZFx1MjI2MFx1MjI2ZVx1MjI2Zlx1MjI2NFx1MjI2NVx1MjIxZVx1MjIzNVx1MjIzNFx1MjY0Mlx1MjY0MFx4YjBcdTIwMzJcdTIwMzNcdTIxMDNcdWZmMDRceGE0XHVmZmUwXHVm''@;'; put 'put ''ZmUxXHUyMDMwXHhhN1x1MjExNlx1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjAzYlx1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MzAxMyJdLFsiYTJhMSIsIlx1MjE3MCIsOV0sWyJhMmIxIiwiXHUyNDg4IiwxOSwi''@;'; put 'put ''XHUyNDc0IiwxOSwiXHUyNDYwIiw5XSxbImEyZTUiLCJcdTMyMjAiLDldLFsiYTJmMSIsIlx1MjE2MCIsMTFdLFsiYTNhMSIsIlx1ZmYwMVx1ZmYwMlx1ZmYwM1x1ZmZlNVx1ZmYwNSIsODgsIlx1ZmZlMyJdLFsiYTRhMSIsIlx1MzA0MSIsODJdLFsiYTVhMSIsIlx1MzBhMSIsODVdLFsiYTZh''@;'; put 'put ''MSIsIlx1MDM5MSIsMTYsIlx1MDNhMyIsNl0sWyJhNmMxIiwiXHUwM2IxIiwxNiwiXHUwM2MzIiw2XSxbImE2ZTAiLCJcdWZlMzVcdWZlMzZcdWZlMzlcdWZlM2FcdWZlM2ZcdWZlNDBcdWZlM2RcdWZlM2VcdWZlNDFcdWZlNDJcdWZlNDNcdWZlNDQiXSxbImE2ZWUiLCJcdWZlM2JcdWZlM2Nc''@;'; put 'put ''dWZlMzdcdWZlMzhcdWZlMzEiXSxbImE2ZjQiLCJcdWZlMzNcdWZlMzQiXSxbImE3YTEiLCJcdTA0MTAiLDUsIlx1MDQwMVx1MDQxNiIsMjVdLFsiYTdkMSIsIlx1MDQzMCIsNSwiXHUwNDUxXHUwNDM2IiwyNV0sWyJhODQwIiwiXHUwMmNhXHUwMmNiXHUwMmQ5XHUyMDEzXHUyMDE1XHUyMDI1''@;'; put 'put ''XHUyMDM1XHUyMTA1XHUyMTA5XHUyMTk2XHUyMTk3XHUyMTk4XHUyMTk5XHUyMjE1XHUyMjFmXHUyMjIzXHUyMjUyXHUyMjY2XHUyMjY3XHUyMmJmXHUyNTUwIiwzNSwiXHUyNTgxIiw2XSxbImE4ODAiLCJcdTI1ODgiLDcsIlx1MjU5M1x1MjU5NFx1MjU5NVx1MjViY1x1MjViZFx1MjVlMlx1''@;'; put 'put ''MjVlM1x1MjVlNFx1MjVlNVx1MjYwOVx1MjI5NVx1MzAxMlx1MzAxZFx1MzAxZSJdLFsiYThhMSIsIlx1MDEwMVx4ZTFcdTAxY2VceGUwXHUwMTEzXHhlOVx1MDExYlx4ZThcdTAxMmJceGVkXHUwMWQwXHhlY1x1MDE0ZFx4ZjNcdTAxZDJceGYyXHUwMTZiXHhmYVx1MDFkNFx4ZjlcdTAxZDZc''@;'; put 'put ''dTAxZDhcdTAxZGFcdTAxZGNceGZjXHhlYVx1MDI1MSJdLFsiYThiZCIsIlx1MDE0NFx1MDE0OCJdLFsiYThjMCIsIlx1MDI2MSJdLFsiYThjNSIsIlx1MzEwNSIsMzZdLFsiYTk0MCIsIlx1MzAyMSIsOCwiXHUzMmEzXHUzMzhlXHUzMzhmXHUzMzljXHUzMzlkXHUzMzllXHUzM2ExXHUzM2M0''@;'; put 'put ''XHUzM2NlXHUzM2QxXHUzM2QyXHUzM2Q1XHVmZTMwXHVmZmUyXHVmZmU0Il0sWyJhOTU5IiwiXHUyMTIxXHUzMjMxIl0sWyJhOTVjIiwiXHUyMDEwIl0sWyJhOTYwIiwiXHUzMGZjXHUzMDliXHUzMDljXHUzMGZkXHUzMGZlXHUzMDA2XHUzMDlkXHUzMDllXHVmZTQ5Iiw5LCJcdWZlNTRcdWZl''@;'; put 'put ''NTVcdWZlNTZcdWZlNTdcdWZlNTkiLDhdLFsiYTk4MCIsIlx1ZmU2MiIsNCwiXHVmZTY4XHVmZTY5XHVmZTZhXHVmZTZiIl0sWyJhOTk2IiwiXHUzMDA3Il0sWyJhOWE0IiwiXHUyNTAwIiw3NV0sWyJhYTQwIiwiXHU3MmRjXHU3MmRkXHU3MmRmXHU3MmUyIiw1LCJcdTcyZWFcdTcyZWJcdTcy''@;'; put 'put ''ZjVcdTcyZjZcdTcyZjlcdTcyZmRcdTcyZmVcdTcyZmZcdTczMDBcdTczMDJcdTczMDQiLDUsIlx1NzMwYlx1NzMwY1x1NzMwZFx1NzMwZlx1NzMxMFx1NzMxMVx1NzMxMlx1NzMxNFx1NzMxOFx1NzMxOVx1NzMxYVx1NzMxZlx1NzMyMFx1NzMyM1x1NzMyNFx1NzMyNlx1NzMyN1x1NzMyOFx1''@;'; put 'put ''NzMyZFx1NzMyZlx1NzMzMFx1NzMzMlx1NzMzM1x1NzMzNVx1NzMzNlx1NzMzYVx1NzMzYlx1NzMzY1x1NzMzZFx1NzM0MCIsOF0sWyJhYTgwIiwiXHU3MzQ5XHU3MzRhXHU3MzRiXHU3MzRjXHU3MzRlXHU3MzRmXHU3MzUxXHU3MzUzXHU3MzU0XHU3MzU1XHU3MzU2XHU3MzU4Iiw3LCJcdTcz''@;'; put 'put ''NjEiLDEwLCJcdTczNmVcdTczNzBcdTczNzEiXSxbImFiNDAiLCJcdTczNzIiLDExLCJcdTczN2YiLDQsIlx1NzM4NVx1NzM4Nlx1NzM4OFx1NzM4YVx1NzM4Y1x1NzM4ZFx1NzM4Zlx1NzM5MFx1NzM5Mlx1NzM5M1x1NzM5NFx1NzM5NVx1NzM5N1x1NzM5OFx1NzM5OVx1NzM5YVx1NzM5Y1x1''@;'; put 'put ''NzM5ZFx1NzM5ZVx1NzNhMFx1NzNhMVx1NzNhMyIsNSwiXHU3M2FhXHU3M2FjXHU3M2FkXHU3M2IxXHU3M2I0XHU3M2I1XHU3M2I2XHU3M2I4XHU3M2I5XHU3M2JjXHU3M2JkXHU3M2JlXHU3M2JmXHU3M2MxXHU3M2MzIiw0XSxbImFiODAiLCJcdTczY2JcdTczY2NcdTczY2VcdTczZDIiLDYs''@;'; put 'put ''Ilx1NzNkYVx1NzNkYlx1NzNkY1x1NzNkZFx1NzNkZlx1NzNlMVx1NzNlMlx1NzNlM1x1NzNlNFx1NzNlNlx1NzNlOFx1NzNlYVx1NzNlYlx1NzNlY1x1NzNlZVx1NzNlZlx1NzNmMFx1NzNmMVx1NzNmMyIsNF0sWyJhYzQwIiwiXHU3M2Y4IiwxMCwiXHU3NDA0XHU3NDA3XHU3NDA4XHU3NDBi''@;'; put 'put ''XHU3NDBjXHU3NDBkXHU3NDBlXHU3NDExIiw4LCJcdTc0MWMiLDUsIlx1NzQyM1x1NzQyNFx1NzQyN1x1NzQyOVx1NzQyYlx1NzQyZFx1NzQyZlx1NzQzMVx1NzQzMlx1NzQzNyIsNCwiXHU3NDNkXHU3NDNlXHU3NDNmXHU3NDQwXHU3NDQyIiwxMV0sWyJhYzgwIiwiXHU3NDRlIiw2LCJcdTc0''@;'; put 'put ''NTZcdTc0NThcdTc0NWRcdTc0NjAiLDEyLCJcdTc0NmVcdTc0NmZcdTc0NzEiLDQsIlx1NzQ3OFx1NzQ3OVx1NzQ3YSJdLFsiYWQ0MCIsIlx1NzQ3Ylx1NzQ3Y1x1NzQ3ZFx1NzQ3Zlx1NzQ4Mlx1NzQ4NFx1NzQ4NVx1NzQ4Nlx1NzQ4OFx1NzQ4OVx1NzQ4YVx1NzQ4Y1x1NzQ4ZFx1NzQ4Zlx1''@;'; put 'put ''NzQ5MSIsMTAsIlx1NzQ5ZFx1NzQ5ZiIsNywiXHU3NGFhIiwxNSwiXHU3NGJiIiwxMl0sWyJhZDgwIiwiXHU3NGM4Iiw5LCJcdTc0ZDMiLDgsIlx1NzRkZFx1NzRkZlx1NzRlMVx1NzRlNVx1NzRlNyIsNiwiXHU3NGYwXHU3NGYxXHU3NGYyIl0sWyJhZTQwIiwiXHU3NGYzXHU3NGY1XHU3NGY4''@;'; put 'put ''Iiw2LCJcdTc1MDBcdTc1MDFcdTc1MDJcdTc1MDNcdTc1MDUiLDcsIlx1NzUwZVx1NzUxMFx1NzUxMlx1NzUxNFx1NzUxNVx1NzUxNlx1NzUxN1x1NzUxYlx1NzUxZFx1NzUxZVx1NzUyMCIsNCwiXHU3NTI2XHU3NTI3XHU3NTJhXHU3NTJlXHU3NTM0XHU3NTM2XHU3NTM5XHU3NTNjXHU3NTNk''@;'; put 'put ''XHU3NTNmXHU3NTQxXHU3NTQyXHU3NTQzXHU3NTQ0XHU3NTQ2XHU3NTQ3XHU3NTQ5XHU3NTRhXHU3NTRkXHU3NTUwXHU3NTUxXHU3NTUyXHU3NTUzXHU3NTU1XHU3NTU2XHU3NTU3XHU3NTU4Il0sWyJhZTgwIiwiXHU3NTVkIiw3LCJcdTc1NjdcdTc1NjhcdTc1NjlcdTc1NmIiLDYsIlx1NzU3''@;'; put 'put ''M1x1NzU3NVx1NzU3Nlx1NzU3N1x1NzU3YSIsNCwiXHU3NTgwXHU3NTgxXHU3NTgyXHU3NTg0XHU3NTg1XHU3NTg3Il0sWyJhZjQwIiwiXHU3NTg4XHU3NTg5XHU3NThhXHU3NThjXHU3NThkXHU3NThlXHU3NTkwXHU3NTkzXHU3NTk1XHU3NTk4XHU3NTliXHU3NTljXHU3NTllXHU3NWEyXHU3''@;'; put 'put ''NWE2Iiw0LCJcdTc1YWRcdTc1YjZcdTc1YjdcdTc1YmFcdTc1YmJcdTc1YmZcdTc1YzBcdTc1YzFcdTc1YzZcdTc1Y2JcdTc1Y2NcdTc1Y2VcdTc1Y2ZcdTc1ZDBcdTc1ZDFcdTc1ZDNcdTc1ZDdcdTc1ZDlcdTc1ZGFcdTc1ZGNcdTc1ZGRcdTc1ZGZcdTc1ZTBcdTc1ZTFcdTc1ZTVcdTc1ZTlc''@;'; put 'put ''dTc1ZWNcdTc1ZWRcdTc1ZWVcdTc1ZWZcdTc1ZjJcdTc1ZjNcdTc1ZjVcdTc1ZjZcdTc1ZjdcdTc1ZjhcdTc1ZmFcdTc1ZmJcdTc1ZmRcdTc1ZmVcdTc2MDJcdTc2MDRcdTc2MDZcdTc2MDciXSxbImFmODAiLCJcdTc2MDhcdTc2MDlcdTc2MGJcdTc2MGRcdTc2MGVcdTc2MGZcdTc2MTFcdTc2''@;'; put 'put ''MTJcdTc2MTNcdTc2MTRcdTc2MTZcdTc2MWFcdTc2MWNcdTc2MWRcdTc2MWVcdTc2MjFcdTc2MjNcdTc2MjdcdTc2MjhcdTc2MmNcdTc2MmVcdTc2MmZcdTc2MzFcdTc2MzJcdTc2MzZcdTc2MzdcdTc2MzlcdTc2M2FcdTc2M2JcdTc2M2RcdTc2NDFcdTc2NDJcdTc2NDQiXSxbImIwNDAiLCJc''@;'; put 'put ''dTc2NDUiLDYsIlx1NzY0ZSIsNSwiXHU3NjU1XHU3NjU3Iiw0LCJcdTc2NWRcdTc2NWZcdTc2NjBcdTc2NjFcdTc2NjJcdTc2NjQiLDYsIlx1NzY2Y1x1NzY2ZFx1NzY2ZVx1NzY3MCIsNywiXHU3Njc5XHU3NjdhXHU3NjdjXHU3NjdmXHU3NjgwXHU3NjgxXHU3NjgzXHU3Njg1XHU3Njg5XHU3''@;'; put 'put ''NjhhXHU3NjhjXHU3NjhkXHU3NjhmXHU3NjkwXHU3NjkyXHU3Njk0XHU3Njk1XHU3Njk3XHU3Njk4XHU3NjlhXHU3NjliIl0sWyJiMDgwIiwiXHU3NjljIiw3LCJcdTc2YTUiLDgsIlx1NzZhZlx1NzZiMFx1NzZiM1x1NzZiNSIsOSwiXHU3NmMwXHU3NmMxXHU3NmMzXHU1NTRhXHU5NjNmXHU1''@;'; put 'put ''N2MzXHU2MzI4XHU1NGNlXHU1NTA5XHU1NGMwXHU3NjkxXHU3NjRjXHU4NTNjXHU3N2VlXHU4MjdlXHU3ODhkXHU3MjMxXHU5Njk4XHU5NzhkXHU2YzI4XHU1Yjg5XHU0ZmZhXHU2MzA5XHU2Njk3XHU1Y2I4XHU4MGZhXHU2ODQ4XHU4MGFlXHU2NjAyXHU3NmNlXHU1MWY5XHU2NTU2XHU3MWFj''@;'; put 'put ''XHU3ZmYxXHU4ODg0XHU1MGIyXHU1OTY1XHU2MWNhXHU2ZmIzXHU4MmFkXHU2MzRjXHU2MjUyXHU1M2VkXHU1NDI3XHU3YjA2XHU1MTZiXHU3NWE0XHU1ZGY0XHU2MmQ0XHU4ZGNiXHU5Nzc2XHU2MjhhXHU4MDE5XHU1NzVkXHU5NzM4XHU3ZjYyXHU3MjM4XHU3NjdkXHU2N2NmXHU3NjdlXHU2''@;'; put 'put ''NDQ2XHU0ZjcwXHU4ZDI1XHU2MmRjXHU3YTE3XHU2NTkxXHU3M2VkXHU2NDJjXHU2MjczXHU4MjJjXHU5ODgxXHU2NzdmXHU3MjQ4XHU2MjZlXHU2MmNjXHU0ZjM0XHU3NGUzXHU1MzRhXHU1MjllXHU3ZWNhXHU5MGE2XHU1ZTJlXHU2ODg2XHU2OTljXHU4MTgwXHU3ZWQxXHU2OGQyXHU3OGM1''@;'; put 'put ''XHU4NjhjXHU5NTUxXHU1MDhkXHU4YzI0XHU4MmRlXHU4MGRlXHU1MzA1XHU4OTEyXHU1MjY1Il0sWyJiMTQwIiwiXHU3NmM0XHU3NmM3XHU3NmM5XHU3NmNiXHU3NmNjXHU3NmQzXHU3NmQ1XHU3NmQ5XHU3NmRhXHU3NmRjXHU3NmRkXHU3NmRlXHU3NmUwIiw0LCJcdTc2ZTYiLDcsIlx1NzZm''@;'; put 'put ''MFx1NzZmM1x1NzZmNVx1NzZmNlx1NzZmN1x1NzZmYVx1NzZmYlx1NzZmZFx1NzZmZlx1NzcwMFx1NzcwMlx1NzcwM1x1NzcwNVx1NzcwNlx1NzcwYVx1NzcwY1x1NzcwZSIsMTAsIlx1NzcxYlx1NzcxY1x1NzcxZFx1NzcxZVx1NzcyMVx1NzcyM1x1NzcyNFx1NzcyNVx1NzcyN1x1NzcyYVx1''@;'; put 'put ''NzcyYiJdLFsiYjE4MCIsIlx1NzcyY1x1NzcyZVx1NzczMCIsNCwiXHU3NzM5XHU3NzNiXHU3NzNkXHU3NzNlXHU3NzNmXHU3NzQyXHU3NzQ0XHU3NzQ1XHU3NzQ2XHU3NzQ4Iiw3LCJcdTc3NTIiLDcsIlx1Nzc1Y1x1ODU4NFx1OTZmOVx1NGZkZFx1NTgyMVx1OTk3MVx1NWI5ZFx1NjJiMVx1''@;'; put 'put ''NjJhNVx1NjZiNFx1OGM3OVx1OWM4ZFx1NzIwNlx1Njc2Zlx1Nzg5MVx1NjBiMlx1NTM1MVx1NTMxN1x1OGY4OFx1ODBjY1x1OGQxZFx1OTRhMVx1NTAwZFx1NzJjOFx1NTkwN1x1NjBlYlx1NzExOVx1ODhhYlx1NTk1NFx1ODJlZlx1NjcyY1x1N2IyOFx1NWQyOVx1N2VmN1x1NzUyZFx1NmNm''@;'; put 'put ''NVx1OGU2Nlx1OGZmOFx1OTAzY1x1OWYzYlx1NmJkNFx1OTExOVx1N2IxNFx1NWY3Y1x1NzhhN1x1ODRkNlx1ODUzZFx1NmJkNVx1NmJkOVx1NmJkNlx1NWUwMVx1NWU4N1x1NzVmOVx1OTVlZFx1NjU1ZFx1NWYwYVx1NWZjNVx1OGY5Zlx1NThjMVx1ODFjMlx1OTA3Zlx1OTY1Ylx1OTdhZFx1''@;'; put 'put ''OGZiOVx1N2YxNlx1OGQyY1x1NjI0MVx1NGZiZlx1NTNkOFx1NTM1ZVx1OGZhOFx1OGZhOVx1OGZhYlx1OTA0ZFx1NjgwN1x1NWY2YVx1ODE5OFx1ODg2OFx1OWNkNlx1NjE4Ylx1NTIyYlx1NzYyYVx1NWY2Y1x1NjU4Y1x1NmZkMlx1NmVlOFx1NWJiZVx1NjQ0OFx1NTE3NVx1NTFiMFx1Njdj''@;'; put 'put ''NFx1NGUxOVx1NzljOVx1OTk3Y1x1NzBiMyJdLFsiYjI0MCIsIlx1Nzc1ZFx1Nzc1ZVx1Nzc1Zlx1Nzc2MFx1Nzc2NFx1Nzc2N1x1Nzc2OVx1Nzc2YVx1Nzc2ZCIsMTEsIlx1Nzc3YVx1Nzc3Ylx1Nzc3Y1x1Nzc4MVx1Nzc4Mlx1Nzc4M1x1Nzc4NiIsNSwiXHU3NzhmXHU3NzkwXHU3NzkzIiwx''@;'; put 'put ''MSwiXHU3N2ExXHU3N2EzXHU3N2E0XHU3N2E2XHU3N2E4XHU3N2FiXHU3N2FkXHU3N2FlXHU3N2FmXHU3N2IxXHU3N2IyXHU3N2I0XHU3N2I2Iiw0XSxbImIyODAiLCJcdTc3YmNcdTc3YmVcdTc3YzAiLDEyLCJcdTc3Y2UiLDgsIlx1NzdkOFx1NzdkOVx1NzdkYVx1NzdkZCIsNCwiXHU3N2U0''@;'; put 'put ''XHU3NWM1XHU1ZTc2XHU3M2JiXHU4M2UwXHU2NGFkXHU2MmU4XHU5NGI1XHU2Y2UyXHU1MzVhXHU1MmMzXHU2NDBmXHU5NGMyXHU3Yjk0XHU0ZjJmXHU1ZTFiXHU4MjM2XHU4MTE2XHU4MThhXHU2ZTI0XHU2Y2NhXHU5YTczXHU2MzU1XHU1MzVjXHU1NGZhXHU4ODY1XHU1N2UwXHU0ZTBkXHU1''@;'; put 'put ''ZTAzXHU2YjY1XHU3YzNmXHU5MGU4XHU2MDE2XHU2NGU2XHU3MzFjXHU4OGMxXHU2NzUwXHU2MjRkXHU4ZDIyXHU3NzZjXHU4ZTI5XHU5MWM3XHU1ZjY5XHU4M2RjXHU4NTIxXHU5OTEwXHU1M2MyXHU4Njk1XHU2YjhiXHU2MGVkXHU2MGU4XHU3MDdmXHU4MmNkXHU4MjMxXHU0ZWQzXHU2Y2E3''@;'; put 'put ''XHU4NWNmXHU2NGNkXHU3Y2Q5XHU2OWZkXHU2NmY5XHU4MzQ5XHU1Mzk1XHU3YjU2XHU0ZmE3XHU1MThjXHU2ZDRiXHU1YzQyXHU4ZTZkXHU2M2QyXHU1M2M5XHU4MzJjXHU4MzM2XHU2N2U1XHU3OGI0XHU2NDNkXHU1YmRmXHU1Yzk0XHU1ZGVlXHU4YmU3XHU2MmM2XHU2N2Y0XHU4YzdhXHU2''@;'; put 'put ''NDAwXHU2M2JhXHU4NzQ5XHU5OThiXHU4YzE3XHU3ZjIwXHU5NGYyXHU0ZWE3XHU5NjEwXHU5OGE0XHU2NjBjXHU3MzE2Il0sWyJiMzQwIiwiXHU3N2U2XHU3N2U4XHU3N2VhXHU3N2VmXHU3N2YwXHU3N2YxXHU3N2YyXHU3N2Y0XHU3N2Y1XHU3N2Y3XHU3N2Y5XHU3N2ZhXHU3N2ZiXHU3N2Zj''@;'; put 'put ''XHU3ODAzIiw1LCJcdTc4MGFcdTc4MGJcdTc4MGVcdTc4MGZcdTc4MTBcdTc4MTNcdTc4MTVcdTc4MTlcdTc4MWJcdTc4MWVcdTc4MjBcdTc4MjFcdTc4MjJcdTc4MjRcdTc4MjhcdTc4MmFcdTc4MmJcdTc4MmVcdTc4MmZcdTc4MzFcdTc4MzJcdTc4MzNcdTc4MzVcdTc4MzZcdTc4M2RcdTc4''@;'; put 'put ''M2ZcdTc4NDFcdTc4NDJcdTc4NDNcdTc4NDRcdTc4NDZcdTc4NDhcdTc4NDlcdTc4NGFcdTc4NGJcdTc4NGRcdTc4NGZcdTc4NTFcdTc4NTNcdTc4NTRcdTc4NThcdTc4NTlcdTc4NWEiXSxbImIzODAiLCJcdTc4NWJcdTc4NWNcdTc4NWUiLDExLCJcdTc4NmYiLDcsIlx1Nzg3OFx1Nzg3OVx1''@;'; put 'put ''Nzg3YVx1Nzg3Ylx1Nzg3ZCIsNiwiXHU1NzNhXHU1YzFkXHU1ZTM4XHU5NTdmXHU1MDdmXHU4MGEwXHU1MzgyXHU2NTVlXHU3NTQ1XHU1NTMxXHU1MDIxXHU4ZDg1XHU2Mjg0XHU5NDllXHU2NzFkXHU1NjMyXHU2ZjZlXHU1ZGUyXHU1NDM1XHU3MDkyXHU4ZjY2XHU2MjZmXHU2NGE0XHU2M2Ez''@;'; put 'put ''XHU1ZjdiXHU2Zjg4XHU5MGY0XHU4MWUzXHU4ZmIwXHU1YzE4XHU2NjY4XHU1ZmYxXHU2Yzg5XHU5NjQ4XHU4ZDgxXHU4ODZjXHU2NDkxXHU3OWYwXHU1N2NlXHU2YTU5XHU2MjEwXHU1NDQ4XHU0ZTU4XHU3YTBiXHU2MGU5XHU2Zjg0XHU4YmRhXHU2MjdmXHU5MDFlXHU5YThiXHU3OWU0XHU1''@;'; put 'put ''NDAzXHU3NWY0XHU2MzAxXHU1MzE5XHU2YzYwXHU4ZmRmXHU1ZjFiXHU5YTcwXHU4MDNiXHU5ZjdmXHU0Zjg4XHU1YzNhXHU4ZDY0XHU3ZmM1XHU2NWE1XHU3MGJkXHU1MTQ1XHU1MWIyXHU4NjZiXHU1ZDA3XHU1YmEwXHU2MmJkXHU5MTZjXHU3NTc0XHU4ZTBjXHU3YTIwXHU2MTAxXHU3Yjc5''@;'; put 'put ''XHU0ZWM3XHU3ZWY4XHU3Nzg1XHU0ZTExXHU4MWVkXHU1MjFkXHU1MWZhXHU2YTcxXHU1M2E4XHU4ZTg3XHU5NTA0XHU5NmNmXHU2ZWMxXHU5NjY0XHU2OTVhIl0sWyJiNDQwIiwiXHU3ODg0XHU3ODg1XHU3ODg2XHU3ODg4XHU3ODhhXHU3ODhiXHU3ODhmXHU3ODkwXHU3ODkyXHU3ODk0XHU3''@;'; put 'put ''ODk1XHU3ODk2XHU3ODk5XHU3ODlkXHU3ODllXHU3OGEwXHU3OGEyXHU3OGE0XHU3OGE2XHU3OGE4Iiw3LCJcdTc4YjVcdTc4YjZcdTc4YjdcdTc4YjhcdTc4YmFcdTc4YmJcdTc4YmNcdTc4YmRcdTc4YmZcdTc4YzBcdTc4YzJcdTc4YzNcdTc4YzRcdTc4YzZcdTc4YzdcdTc4YzhcdTc4Y2Nc''@;'; put 'put ''dTc4Y2RcdTc4Y2VcdTc4Y2ZcdTc4ZDFcdTc4ZDJcdTc4ZDNcdTc4ZDZcdTc4ZDdcdTc4ZDhcdTc4ZGEiLDldLFsiYjQ4MCIsIlx1NzhlNFx1NzhlNVx1NzhlNlx1NzhlN1x1NzhlOVx1NzhlYVx1NzhlYlx1NzhlZCIsNCwiXHU3OGYzXHU3OGY1XHU3OGY2XHU3OGY4XHU3OGY5XHU3OGZiIiw1''@;'; put 'put ''LCJcdTc5MDJcdTc5MDNcdTc5MDRcdTc5MDYiLDYsIlx1Nzg0MFx1NTBhOFx1NzdkN1x1NjQxMFx1ODllNlx1NTkwNFx1NjNlM1x1NWRkZFx1N2E3Zlx1NjkzZFx1NGYyMFx1ODIzOVx1NTU5OFx1NGUzMlx1NzVhZVx1N2E5N1x1NWU2Mlx1NWU4YVx1OTVlZlx1NTIxYlx1NTQzOVx1NzA4YVx1''@;'; put 'put ''NjM3Nlx1OTUyNFx1NTc4Mlx1NjYyNVx1NjkzZlx1OTE4N1x1NTUwN1x1NmRmM1x1N2VhZlx1ODgyMlx1NjIzM1x1N2VmMFx1NzViNVx1ODMyOFx1NzhjMVx1OTZjY1x1OGY5ZVx1NjE0OFx1NzRmN1x1OGJjZFx1NmI2NFx1NTIzYVx1OGQ1MFx1NmIyMVx1ODA2YVx1ODQ3MVx1NTZmMVx1NTMw''@;'; put 'put ''Nlx1NGVjZVx1NGUxYlx1NTFkMVx1N2M5N1x1OTE4Ylx1N2MwN1x1NGZjM1x1OGU3Zlx1N2JlMVx1N2E5Y1x1NjQ2N1x1NWQxNFx1NTBhY1x1ODEwNlx1NzYwMVx1N2NiOVx1NmRlY1x1N2ZlMFx1Njc1MVx1NWI1OFx1NWJmOFx1NzhjYlx1NjRhZVx1NjQxM1x1NjNhYVx1NjMyYlx1OTUxOVx1''@;'; put 'put ''NjQyZFx1OGZiZVx1N2I1NFx1NzYyOVx1NjI1M1x1NTkyN1x1NTQ0Nlx1NmI3OVx1NTBhM1x1NjIzNFx1NWUyNlx1NmI4Nlx1NGVlM1x1OGQzN1x1ODg4Ylx1NWY4NVx1OTAyZSJdLFsiYjU0MCIsIlx1NzkwZCIsNSwiXHU3OTE0Iiw5LCJcdTc5MWYiLDQsIlx1NzkyNSIsMTQsIlx1NzkzNSIs''@;'; put 'put ''NCwiXHU3OTNkXHU3OTNmXHU3OTQyXHU3OTQzXHU3OTQ0XHU3OTQ1XHU3OTQ3XHU3OTRhIiw4LCJcdTc5NTRcdTc5NTVcdTc5NThcdTc5NTlcdTc5NjFcdTc5NjMiXSxbImI1ODAiLCJcdTc5NjRcdTc5NjZcdTc5NjlcdTc5NmFcdTc5NmJcdTc5NmNcdTc5NmVcdTc5NzAiLDYsIlx1Nzk3OVx1''@;'; put 'put ''Nzk3YiIsNCwiXHU3OTgyXHU3OTgzXHU3OTg2XHU3OTg3XHU3OTg4XHU3OTg5XHU3OThiXHU3OThjXHU3OThkXHU3OThlXHU3OTkwXHU3OTkxXHU3OTkyXHU2MDIwXHU4MDNkXHU2MmM1XHU0ZTM5XHU1MzU1XHU5MGY4XHU2M2I4XHU4MGM2XHU2NWU2XHU2YzJlXHU0ZjQ2XHU2MGVlXHU2ZGUx''@;'; put 'put ''XHU4YmRlXHU1ZjM5XHU4NmNiXHU1ZjUzXHU2MzIxXHU1MTVhXHU4MzYxXHU2ODYzXHU1MjAwXHU2MzYzXHU4ZTQ4XHU1MDEyXHU1YzliXHU3OTc3XHU1YmZjXHU1MjMwXHU3YTNiXHU2MGJjXHU5MDUzXHU3NmQ3XHU1ZmI3XHU1Zjk3XHU3Njg0XHU4ZTZjXHU3MDZmXHU3NjdiXHU3YjQ5XHU3''@;'; put 'put ''N2FhXHU1MWYzXHU5MDkzXHU1ODI0XHU0ZjRlXHU2ZWY0XHU4ZmVhXHU2NTRjXHU3YjFiXHU3MmM0XHU2ZGE0XHU3ZmRmXHU1YWUxXHU2MmI1XHU1ZTk1XHU1NzMwXHU4NDgyXHU3YjJjXHU1ZTFkXHU1ZjFmXHU5MDEyXHU3ZjE0XHU5OGEwXHU2MzgyXHU2ZWM3XHU3ODk4XHU3MGI5XHU1MTc4''@;'; put 'put ''XHU5NzViXHU1N2FiXHU3NTM1XHU0ZjQzXHU3NTM4XHU1ZTk3XHU2MGU2XHU1OTYwXHU2ZGMwXHU2YmJmXHU3ODg5XHU1M2ZjXHU5NmQ1XHU1MWNiXHU1MjAxXHU2Mzg5XHU1NDBhXHU5NDkzXHU4YzAzXHU4ZGNjXHU3MjM5XHU3ODlmXHU4Nzc2XHU4ZmVkXHU4YzBkXHU1M2UwIl0sWyJiNjQw''@;'; put 'put ''IiwiXHU3OTkzIiw2LCJcdTc5OWIiLDExLCJcdTc5YTgiLDEwLCJcdTc5YjQiLDQsIlx1NzliY1x1NzliZlx1NzljMlx1NzljNFx1NzljNVx1NzljN1x1NzljOFx1NzljYVx1NzljY1x1NzljZVx1NzljZlx1NzlkMFx1NzlkM1x1NzlkNFx1NzlkNlx1NzlkN1x1NzlkOSIsNSwiXHU3OWUwXHU3''@;'; put 'put ''OWUxXHU3OWUyXHU3OWU1XHU3OWU4XHU3OWVhIl0sWyJiNjgwIiwiXHU3OWVjXHU3OWVlXHU3OWYxIiw2LCJcdTc5ZjlcdTc5ZmFcdTc5ZmNcdTc5ZmVcdTc5ZmZcdTdhMDFcdTdhMDRcdTdhMDVcdTdhMDdcdTdhMDhcdTdhMDlcdTdhMGFcdTdhMGNcdTdhMGYiLDQsIlx1N2ExNVx1N2ExNlx1''@;'; put 'put ''N2ExOFx1N2ExOVx1N2ExYlx1N2ExY1x1NGUwMVx1NzZlZlx1NTNlZVx1OTQ4OVx1OTg3Nlx1OWYwZVx1OTUyZFx1NWI5YVx1OGJhMlx1NGUyMlx1NGUxY1x1NTFhY1x1ODQ2M1x1NjFjMlx1NTJhOFx1NjgwYlx1NGY5N1x1NjA2Ylx1NTFiYlx1NmQxZVx1NTE1Y1x1NjI5Nlx1NjU5N1x1OTY2''@;'; put 'put ''MVx1OGM0Nlx1OTAxN1x1NzVkOFx1OTBmZFx1Nzc2M1x1NmJkMlx1NzI4YVx1NzJlY1x1OGJmYlx1NTgzNVx1Nzc3OVx1OGQ0Y1x1Njc1Y1x1OTU0MFx1ODA5YVx1NWVhNlx1NmUyMVx1NTk5Mlx1N2FlZlx1NzdlZFx1OTUzYlx1NmJiNVx1NjVhZFx1N2YwZVx1NTgwNlx1NTE1MVx1OTYxZlx1''@;'; put 'put ''NWJmOVx1NThhOVx1NTQyOFx1OGU3Mlx1NjU2Nlx1OTg3Zlx1NTZlNFx1OTQ5ZFx1NzZmZVx1OTA0MVx1NjM4N1x1NTRjNlx1NTkxYVx1NTkzYVx1NTc5Ylx1OGViMlx1NjczNVx1OGRmYVx1ODIzNVx1NTI0MVx1NjBmMFx1NTgxNVx1ODZmZVx1NWNlOFx1OWU0NVx1NGZjNFx1OTg5ZFx1OGJi''@;'; put 'put ''OVx1NWEyNVx1NjA3Nlx1NTM4NFx1NjI3Y1x1OTA0Zlx1OTEwMlx1OTk3Zlx1NjA2OVx1ODAwY1x1NTEzZlx1ODAzM1x1NWMxNFx1OTk3NVx1NmQzMVx1NGU4YyJdLFsiYjc0MCIsIlx1N2ExZFx1N2ExZlx1N2EyMVx1N2EyMlx1N2EyNCIsMTQsIlx1N2EzNFx1N2EzNVx1N2EzNlx1N2EzOFx1''@;'; put 'put ''N2EzYVx1N2EzZVx1N2E0MCIsNSwiXHU3YTQ3Iiw5LCJcdTdhNTIiLDQsIlx1N2E1OCIsMTZdLFsiYjc4MCIsIlx1N2E2OSIsNiwiXHU3YTcxXHU3YTcyXHU3YTczXHU3YTc1XHU3YTdiXHU3YTdjXHU3YTdkXHU3YTdlXHU3YTgyXHU3YTg1XHU3YTg3XHU3YTg5XHU3YThhXHU3YThiXHU3YThj''@;'; put 'put ''XHU3YThlXHU3YThmXHU3YTkwXHU3YTkzXHU3YTk0XHU3YTk5XHU3YTlhXHU3YTliXHU3YTllXHU3YWExXHU3YWEyXHU4ZDMwXHU1M2QxXHU3ZjVhXHU3YjRmXHU0ZjEwXHU0ZTRmXHU5NjAwXHU2Y2Q1XHU3M2QwXHU4NWU5XHU1ZTA2XHU3NTZhXHU3ZmZiXHU2YTBhXHU3N2ZlXHU5NDkyXHU3''@;'; put 'put ''ZTQxXHU1MWUxXHU3MGU2XHU1M2NkXHU4ZmQ0XHU4MzAzXHU4ZDI5XHU3MmFmXHU5OTZkXHU2Y2RiXHU1NzRhXHU4MmIzXHU2NWI5XHU4MGFhXHU2MjNmXHU5NjMyXHU1OWE4XHU0ZWZmXHU4YmJmXHU3ZWJhXHU2NTNlXHU4M2YyXHU5NzVlXHU1NTYxXHU5OGRlXHU4MGE1XHU1MzJhXHU4YmZk''@;'; put 'put ''XHU1NDIwXHU4MGJhXHU1ZTlmXHU2Y2I4XHU4ZDM5XHU4MmFjXHU5MTVhXHU1NDI5XHU2YzFiXHU1MjA2XHU3ZWI3XHU1NzVmXHU3MTFhXHU2YzdlXHU3Yzg5XHU1OTRiXHU0ZWZkXHU1ZmZmXHU2MTI0XHU3Y2FhXHU0ZTMwXHU1YzAxXHU2N2FiXHU4NzAyXHU1Y2YwXHU5NTBiXHU5OGNlXHU3''@;'; put 'put ''NWFmXHU3MGZkXHU5MDIyXHU1MWFmXHU3ZjFkXHU4YmJkXHU1OTQ5XHU1MWU0XHU0ZjViXHU1NDI2XHU1OTJiXHU2NTc3XHU4MGE0XHU1Yjc1XHU2Mjc2XHU2MmMyXHU4ZjkwXHU1ZTQ1XHU2YzFmXHU3YjI2XHU0ZjBmXHU0ZmQ4XHU2NzBkIl0sWyJiODQwIiwiXHU3YWEzXHU3YWE0XHU3YWE3''@;'; put 'put ''XHU3YWE5XHU3YWFhXHU3YWFiXHU3YWFlIiw0LCJcdTdhYjQiLDEwLCJcdTdhYzAiLDEwLCJcdTdhY2MiLDksIlx1N2FkN1x1N2FkOFx1N2FkYVx1N2FkYlx1N2FkY1x1N2FkZFx1N2FlMVx1N2FlMlx1N2FlNFx1N2FlNyIsNSwiXHU3YWVlXHU3YWYwXHU3YWYxXHU3YWYyXHU3YWYzIl0sWyJi''@;'; put 'put ''ODgwIiwiXHU3YWY0Iiw0LCJcdTdhZmJcdTdhZmNcdTdhZmVcdTdiMDBcdTdiMDFcdTdiMDJcdTdiMDVcdTdiMDdcdTdiMDlcdTdiMGNcdTdiMGRcdTdiMGVcdTdiMTBcdTdiMTJcdTdiMTNcdTdiMTZcdTdiMTdcdTdiMThcdTdiMWFcdTdiMWNcdTdiMWRcdTdiMWZcdTdiMjFcdTdiMjJcdTdi''@;'; put 'put ''MjNcdTdiMjdcdTdiMjlcdTdiMmRcdTZkNmVcdTZkYWFcdTc5OGZcdTg4YjFcdTVmMTdcdTc1MmJcdTYyOWFcdThmODVcdTRmZWZcdTkxZGNcdTY1YTdcdTgxMmZcdTgxNTFcdTVlOWNcdTgxNTBcdThkNzRcdTUyNmZcdTg5ODZcdThkNGJcdTU5MGRcdTUwODVcdTRlZDhcdTk2MWNcdTcyMzZc''@;'; put 'put ''dTgxNzlcdThkMWZcdTViY2NcdThiYTNcdTk2NDRcdTU5ODdcdTdmMWFcdTU0OTBcdTU2NzZcdTU2MGVcdThiZTVcdTY1MzlcdTY5ODJcdTk0OTlcdTc2ZDZcdTZlODlcdTVlNzJcdTc1MThcdTY3NDZcdTY3ZDFcdTdhZmZcdTgwOWRcdThkNzZcdTYxMWZcdTc5YzZcdTY1NjJcdThkNjNcdTUx''@;'; put 'put ''ODhcdTUyMWFcdTk0YTJcdTdmMzhcdTgwOWJcdTdlYjJcdTVjOTdcdTZlMmZcdTY3NjBcdTdiZDlcdTc2OGJcdTlhZDhcdTgxOGZcdTdmOTRcdTdjZDVcdTY0MWVcdTk1NTBcdTdhM2ZcdTU0NGFcdTU0ZTVcdTZiNGNcdTY0MDFcdTYyMDhcdTllM2RcdTgwZjNcdTc1OTlcdTUyNzJcdTk3Njlc''@;'; put 'put ''dTg0NWJcdTY4M2NcdTg2ZTRcdTk2MDFcdTk2OTRcdTk0ZWNcdTRlMmFcdTU0MDRcdTdlZDlcdTY4MzlcdThkZGZcdTgwMTVcdTY2ZjRcdTVlOWFcdTdmYjkiXSxbImI5NDAiLCJcdTdiMmZcdTdiMzBcdTdiMzJcdTdiMzRcdTdiMzVcdTdiMzZcdTdiMzdcdTdiMzlcdTdiM2JcdTdiM2RcdTdi''@;'; put 'put ''M2YiLDUsIlx1N2I0Nlx1N2I0OFx1N2I0YVx1N2I0ZFx1N2I0ZVx1N2I1M1x1N2I1NVx1N2I1N1x1N2I1OVx1N2I1Y1x1N2I1ZVx1N2I1Zlx1N2I2MVx1N2I2MyIsMTAsIlx1N2I2Zlx1N2I3MFx1N2I3M1x1N2I3NFx1N2I3Nlx1N2I3OFx1N2I3YVx1N2I3Y1x1N2I3ZFx1N2I3Zlx1N2I4MVx1''@;'; put 'put ''N2I4Mlx1N2I4M1x1N2I4NFx1N2I4NiIsNiwiXHU3YjhlXHU3YjhmIl0sWyJiOTgwIiwiXHU3YjkxXHU3YjkyXHU3YjkzXHU3Yjk2XHU3Yjk4XHU3Yjk5XHU3YjlhXHU3YjliXHU3YjllXHU3YjlmXHU3YmEwXHU3YmEzXHU3YmE0XHU3YmE1XHU3YmFlXHU3YmFmXHU3YmIwXHU3YmIyXHU3YmIz''@;'; put 'put ''XHU3YmI1XHU3YmI2XHU3YmI3XHU3YmI5Iiw3LCJcdTdiYzJcdTdiYzNcdTdiYzRcdTU3YzJcdTgwM2ZcdTY4OTdcdTVkZTVcdTY1M2JcdTUyOWZcdTYwNmRcdTlmOWFcdTRmOWJcdThlYWNcdTUxNmNcdTViYWJcdTVmMTNcdTVkZTlcdTZjNWVcdTYyZjFcdThkMjFcdTUxNzFcdTk0YTlcdTUy''@;'; put 'put ''ZmVcdTZjOWZcdTgyZGZcdTcyZDdcdTU3YTJcdTY3ODRcdThkMmRcdTU5MWZcdThmOWNcdTgzYzdcdTU0OTVcdTdiOGRcdTRmMzBcdTZjYmRcdTViNjRcdTU5ZDFcdTlmMTNcdTUzZTRcdTg2Y2FcdTlhYThcdThjMzdcdTgwYTFcdTY1NDVcdTk4N2VcdTU2ZmFcdTk2YzdcdTUyMmVcdTc0ZGNc''@;'; put 'put ''dTUyNTBcdTViZTFcdTYzMDJcdTg5MDJcdTRlNTZcdTYyZDBcdTYwMmFcdTY4ZmFcdTUxNzNcdTViOThcdTUxYTBcdTg5YzJcdTdiYTFcdTk5ODZcdTdmNTBcdTYwZWZcdTcwNGNcdThkMmZcdTUxNDlcdTVlN2ZcdTkwMWJcdTc0NzBcdTg5YzRcdTU3MmRcdTc4NDVcdTVmNTJcdTlmOWZcdTk1''@;'; put 'put ''ZmFcdThmNjhcdTliM2NcdThiZTFcdTc2NzhcdTY4NDJcdTY3ZGNcdThkZWFcdThkMzVcdTUyM2RcdThmOGFcdTZlZGFcdTY4Y2RcdTk1MDVcdTkwZWRcdTU2ZmRcdTY3OWNcdTg4ZjlcdThmYzdcdTU0YzgiXSxbImJhNDAiLCJcdTdiYzVcdTdiYzhcdTdiYzlcdTdiY2FcdTdiY2JcdTdiY2Rc''@;'; put 'put ''dTdiY2VcdTdiY2ZcdTdiZDBcdTdiZDJcdTdiZDQiLDQsIlx1N2JkYlx1N2JkY1x1N2JkZVx1N2JkZlx1N2JlMFx1N2JlMlx1N2JlM1x1N2JlNFx1N2JlN1x1N2JlOFx1N2JlOVx1N2JlYlx1N2JlY1x1N2JlZFx1N2JlZlx1N2JmMFx1N2JmMiIsNCwiXHU3YmY4XHU3YmY5XHU3YmZhXHU3YmZi''@;'; put 'put ''XHU3YmZkXHU3YmZmIiw3LCJcdTdjMDhcdTdjMDlcdTdjMGFcdTdjMGRcdTdjMGVcdTdjMTAiLDUsIlx1N2MxN1x1N2MxOFx1N2MxOSJdLFsiYmE4MCIsIlx1N2MxYSIsNCwiXHU3YzIwIiw1LCJcdTdjMjhcdTdjMjlcdTdjMmIiLDEyLCJcdTdjMzkiLDUsIlx1N2M0Mlx1OWFiOFx1NWI2OVx1''@;'; put 'put ''NmQ3N1x1NmMyNlx1NGVhNVx1NWJiM1x1OWE4N1x1OTE2M1x1NjFhOFx1OTBhZlx1OTdlOVx1NTQyYlx1NmRiNVx1NWJkMlx1NTFmZFx1NTU4YVx1N2Y1NVx1N2ZmMFx1NjRiY1x1NjM0ZFx1NjVmMVx1NjFiZVx1NjA4ZFx1NzEwYVx1NmM1N1x1NmM0OVx1NTkyZlx1Njc2ZFx1ODIyYVx1NThk''@;'; put 'put ''NVx1NTY4ZVx1OGM2YVx1NmJlYlx1OTBkZFx1NTk3ZFx1ODAxN1x1NTNmN1x1NmQ2OVx1NTQ3NVx1NTU5ZFx1ODM3N1x1ODNjZlx1NjgzOFx1NzliZVx1NTQ4Y1x1NGY1NVx1NTQwOFx1NzZkMlx1OGM4OVx1OTYwMlx1NmNiM1x1NmRiOFx1OGQ2Ylx1ODkxMFx1OWU2NFx1OGQzYVx1NTYzZlx1''@;'; put 'put ''OWVkMVx1NzVkNVx1NWY4OFx1NzJlMFx1NjA2OFx1NTRmY1x1NGVhOFx1NmEyYVx1ODg2MVx1NjA1Mlx1OGY3MFx1NTRjNFx1NzBkOFx1ODY3OVx1OWUzZlx1NmQyYVx1NWI4Zlx1NWYxOFx1N2VhMlx1NTU4OVx1NGZhZlx1NzMzNFx1NTQzY1x1NTM5YVx1NTAxOVx1NTQwZVx1NTQ3Y1x1NGU0''@;'; put 'put ''ZVx1NWZmZFx1NzQ1YVx1NThmNlx1ODQ2Ylx1ODBlMVx1ODc3NFx1NzJkMFx1N2NjYVx1NmU1NiJdLFsiYmI0MCIsIlx1N2M0MyIsOSwiXHU3YzRlIiwzNiwiXHU3Yzc1Iiw1LCJcdTdjN2UiLDldLFsiYmI4MCIsIlx1N2M4OFx1N2M4YSIsNiwiXHU3YzkzXHU3Yzk0XHU3Yzk2XHU3Yzk5XHU3''@;'; put 'put ''YzlhXHU3YzliXHU3Y2EwXHU3Y2ExXHU3Y2EzXHU3Y2E2XHU3Y2E3XHU3Y2E4XHU3Y2E5XHU3Y2FiXHU3Y2FjXHU3Y2FkXHU3Y2FmXHU3Y2IwXHU3Y2I0Iiw0LCJcdTdjYmFcdTdjYmJcdTVmMjdcdTg2NGVcdTU1MmNcdTYyYTRcdTRlOTJcdTZjYWFcdTYyMzdcdTgyYjFcdTU0ZDdcdTUzNGVc''@;'; put 'put ''dTczM2VcdTZlZDFcdTc1M2JcdTUyMTJcdTUzMTZcdThiZGRcdTY5ZDBcdTVmOGFcdTYwMDBcdTZkZWVcdTU3NGZcdTZiMjJcdTczYWZcdTY4NTNcdThmZDhcdTdmMTNcdTYzNjJcdTYwYTNcdTU1MjRcdTc1ZWFcdThjNjJcdTcxMTVcdTZkYTNcdTViYTZcdTVlN2JcdTgzNTJcdTYxNGNcdTll''@;'; put 'put ''YzRcdTc4ZmFcdTg3NTdcdTdjMjdcdTc2ODdcdTUxZjBcdTYwZjZcdTcxNGNcdTY2NDNcdTVlNGNcdTYwNGRcdThjMGVcdTcwNzBcdTYzMjVcdThmODlcdTVmYmRcdTYwNjJcdTg2ZDRcdTU2ZGVcdTZiYzFcdTYwOTRcdTYxNjdcdTUzNDlcdTYwZTBcdTY2NjZcdThkM2ZcdTc5ZmRcdTRmMWFc''@;'; put 'put ''dTcwZTlcdTZjNDdcdThiYjNcdThiZjJcdTdlZDhcdTgzNjRcdTY2MGZcdTVhNWFcdTliNDJcdTZkNTFcdTZkZjdcdThjNDFcdTZkM2JcdTRmMTlcdTcwNmJcdTgzYjdcdTYyMTZcdTYwZDFcdTk3MGRcdThkMjdcdTc5NzhcdTUxZmJcdTU3M2VcdTU3ZmFcdTY3M2FcdTc1NzhcdTdhM2RcdTc5''@;'; put 'put ''ZWZcdTdiOTUiXSxbImJjNDAiLCJcdTdjYmZcdTdjYzBcdTdjYzJcdTdjYzNcdTdjYzRcdTdjYzZcdTdjYzlcdTdjY2JcdTdjY2UiLDYsIlx1N2NkOFx1N2NkYVx1N2NkYlx1N2NkZFx1N2NkZVx1N2NlMSIsNiwiXHU3Y2U5Iiw1LCJcdTdjZjAiLDcsIlx1N2NmOVx1N2NmYVx1N2NmYyIsMTMs''@;'; put 'put ''Ilx1N2QwYiIsNV0sWyJiYzgwIiwiXHU3ZDExIiwxNCwiXHU3ZDIxXHU3ZDIzXHU3ZDI0XHU3ZDI1XHU3ZDI2XHU3ZDI4XHU3ZDI5XHU3ZDJhXHU3ZDJjXHU3ZDJkXHU3ZDJlXHU3ZDMwIiw2LCJcdTgwOGNcdTk5NjVcdThmZjlcdTZmYzBcdThiYTVcdTllMjFcdTU5ZWNcdTdlZTlcdTdmMDlc''@;'; put 'put ''dTU0MDlcdTY3ODFcdTY4ZDhcdThmOTFcdTdjNGRcdTk2YzZcdTUzY2FcdTYwMjVcdTc1YmVcdTZjNzJcdTUzNzNcdTVhYzlcdTdlYTdcdTYzMjRcdTUxZTBcdTgxMGFcdTVkZjFcdTg0ZGZcdTYyODBcdTUxODBcdTViNjNcdTRmMGVcdTc5NmRcdTUyNDJcdTYwYjhcdTZkNGVcdTViYzRcdTVi''@;'; put 'put ''YzJcdThiYTFcdThiYjBcdTY1ZTJcdTVmY2NcdTk2NDVcdTU5OTNcdTdlZTdcdTdlYWFcdTU2MDlcdTY3YjdcdTU5MzlcdTRmNzNcdTViYjZcdTUyYTBcdTgzNWFcdTk4OGFcdThkM2VcdTc1MzJcdTk0YmVcdTUwNDdcdTdhM2NcdTRlZjdcdTY3YjZcdTlhN2VcdTVhYzFcdTZiN2NcdTc2ZDFc''@;'; put 'put ''dTU3NWFcdTVjMTZcdTdiM2FcdTk1ZjRcdTcxNGVcdTUxN2NcdTgwYTlcdTgyNzBcdTU5NzhcdTdmMDRcdTgzMjdcdTY4YzBcdTY3ZWNcdTc4YjFcdTc4NzdcdTYyZTNcdTYzNjFcdTdiODBcdTRmZWRcdTUyNmFcdTUxY2ZcdTgzNTBcdTY5ZGJcdTkyNzRcdThkZjVcdThkMzFcdTg5YzFcdTk1''@;'; put 'put ''MmVcdTdiYWRcdTRlZjYiXSxbImJkNDAiLCJcdTdkMzciLDU0LCJcdTdkNmYiLDddLFsiYmQ4MCIsIlx1N2Q3OCIsMzIsIlx1NTA2NVx1ODIzMFx1NTI1MVx1OTk2Zlx1NmUxMFx1NmU4NVx1NmRhN1x1NWVmYVx1NTBmNVx1NTlkY1x1NWMwNlx1NmQ0Nlx1NmM1Zlx1NzU4Nlx1ODQ4Ylx1Njg2''@;'; put 'put ''OFx1NTk1Nlx1OGJiMlx1NTMyMFx1OTE3MVx1OTY0ZFx1ODU0OVx1NjkxMlx1NzkwMVx1NzEyNlx1ODBmNlx1NGVhNFx1OTBjYVx1NmQ0N1x1OWE4NFx1NWEwN1x1NTZiY1x1NjQwNVx1OTRmMFx1NzdlYlx1NGZhNVx1ODExYVx1NzJlMVx1ODlkMlx1OTk3YVx1N2YzNFx1N2VkZVx1NTI3Zlx1''@;'; put 'put ''NjU1OVx1OTE3NVx1OGY3Zlx1OGY4M1x1NTNlYlx1N2E5Nlx1NjNlZFx1NjNhNVx1NzY4Nlx1NzlmOFx1ODg1N1x1OTYzNlx1NjIyYVx1NTJhYlx1ODI4Mlx1Njg1NFx1Njc3MFx1NjM3N1x1Nzc2Ylx1N2FlZFx1NmQwMVx1N2VkM1x1ODllM1x1NTlkMFx1NjIxMlx1ODVjOVx1ODJhNVx1NzU0''@;'; put 'put ''Y1x1NTAxZlx1NGVjYlx1NzVhNVx1OGJlYlx1NWM0YVx1NWRmZVx1N2I0Ylx1NjVhNFx1OTFkMVx1NGVjYVx1NmQyNVx1ODk1Zlx1N2QyN1x1OTUyNlx1NGVjNVx1OGMyOFx1OGZkYlx1OTc3M1x1NjY0Ylx1Nzk4MVx1OGZkMVx1NzBlY1x1NmQ3OCJdLFsiYmU0MCIsIlx1N2Q5OSIsMTIsIlx1''@;'; put 'put ''N2RhNyIsNiwiXHU3ZGFmIiw0Ml0sWyJiZTgwIiwiXHU3ZGRhIiwzMiwiXHU1YzNkXHU1MmIyXHU4MzQ2XHU1MTYyXHU4MzBlXHU3NzViXHU2Njc2XHU5Y2I4XHU0ZWFjXHU2MGNhXHU3Y2JlXHU3Y2IzXHU3ZWNmXHU0ZTk1XHU4YjY2XHU2NjZmXHU5ODg4XHU5NzU5XHU1ODgzXHU2NTZjXHU5''@;'; put 'put ''NTVjXHU1Zjg0XHU3NWM5XHU5NzU2XHU3YWRmXHU3YWRlXHU1MWMwXHU3MGFmXHU3YTk4XHU2M2VhXHU3YTc2XHU3ZWEwXHU3Mzk2XHU5N2VkXHU0ZTQ1XHU3MDc4XHU0ZTVkXHU5MTUyXHU1M2E5XHU2NTUxXHU2NWU3XHU4MWZjXHU4MjA1XHU1NDhlXHU1YzMxXHU3NTlhXHU5N2EwXHU2MmQ4''@;'; put 'put ''XHU3MmQ5XHU3NWJkXHU1YzQ1XHU5YTc5XHU4M2NhXHU1YzQwXHU1NDgwXHU3N2U5XHU0ZTNlXHU2Y2FlXHU4MDVhXHU2MmQyXHU2MzZlXHU1ZGU4XHU1MTc3XHU4ZGRkXHU4ZTFlXHU5NTJmXHU0ZmYxXHU1M2U1XHU2MGU3XHU3MGFjXHU1MjY3XHU2MzUwXHU5ZTQzXHU1YTFmXHU1MDI2XHU3''@;'; put 'put ''NzM3XHU1Mzc3XHU3ZWUyXHU2NDg1XHU2NTJiXHU2Mjg5XHU2Mzk4XHU1MDE0XHU3MjM1XHU4OWM5XHU1MWIzXHU4YmMwXHU3ZWRkXHU1NzQ3XHU4M2NjXHU5NGE3XHU1MTliXHU1NDFiXHU1Y2ZiIl0sWyJiZjQwIiwiXHU3ZGZiIiw2Ml0sWyJiZjgwIiwiXHU3ZTNhXHU3ZTNjIiw0LCJcdTdl''@;'; put 'put ''NDIiLDQsIlx1N2U0OCIsMjEsIlx1NGZjYVx1N2FlM1x1NmQ1YVx1OTBlMVx1OWE4Zlx1NTU4MFx1NTQ5Nlx1NTM2MVx1NTRhZlx1NWYwMFx1NjNlOVx1Njk3N1x1NTFlZlx1NjE2OFx1NTIwYVx1NTgyYVx1NTJkOFx1NTc0ZVx1NzgwZFx1NzcwYlx1NWViN1x1NjE3N1x1N2NlMFx1NjI1Ylx1''@;'; put 'put ''NjI5N1x1NGVhMlx1NzA5NVx1ODAwM1x1NjJmN1x1NzBlNFx1OTc2MFx1NTc3N1x1ODJkYlx1NjdlZlx1NjhmNVx1NzhkNVx1OTg5N1x1NzlkMVx1NThmM1x1NTRiM1x1NTNlZlx1NmUzNFx1NTE0Ylx1NTIzYlx1NWJhMlx1OGJmZVx1ODBhZlx1NTU0M1x1NTdhNlx1NjA3M1x1NTc1MVx1NTQy''@;'; put 'put ''ZFx1N2E3YVx1NjA1MFx1NWI1NFx1NjNhN1x1NjJhMFx1NTNlM1x1NjI2M1x1NWJjN1x1NjdhZlx1NTRlZFx1N2E5Zlx1ODJlNlx1OTE3N1x1NWU5M1x1ODhlNFx1NTkzOFx1NTdhZVx1NjMwZVx1OGRlOFx1ODBlZlx1NTc1N1x1N2I3N1x1NGZhOVx1NWZlYlx1NWJiZFx1NmIzZVx1NTMyMVx1''@;'; put 'put ''N2I1MFx1NzJjMlx1Njg0Nlx1NzdmZlx1NzczNlx1NjVmN1x1NTFiNVx1NGU4Zlx1NzZkNFx1NWNiZlx1N2FhNVx1ODQ3NVx1NTk0ZVx1OWI0MVx1NTA4MCJdLFsiYzA0MCIsIlx1N2U1ZSIsMzUsIlx1N2U4MyIsMjMsIlx1N2U5Y1x1N2U5ZFx1N2U5ZSJdLFsiYzA4MCIsIlx1N2VhZVx1N2Vi''@;'; put 'put ''NFx1N2ViYlx1N2ViY1x1N2VkNlx1N2VlNFx1N2VlY1x1N2VmOVx1N2YwYVx1N2YxMFx1N2YxZVx1N2YzN1x1N2YzOVx1N2YzYiIsNiwiXHU3ZjQzXHU3ZjQ2Iiw5LCJcdTdmNTJcdTdmNTNcdTk5ODhcdTYxMjdcdTZlODNcdTU3NjRcdTY2MDZcdTYzNDZcdTU2ZjBcdTYyZWNcdTYyNjlcdTVl''@;'; put 'put ''ZDNcdTk2MTRcdTU3ODNcdTYyYzlcdTU1ODdcdTg3MjFcdTgxNGFcdThmYTNcdTU1NjZcdTgzYjFcdTY3NjVcdThkNTZcdTg0ZGRcdTVhNmFcdTY4MGZcdTYyZTZcdTdiZWVcdTk2MTFcdTUxNzBcdTZmOWNcdThjMzBcdTYzZmRcdTg5YzhcdTYxZDJcdTdmMDZcdTcwYzJcdTZlZTVcdTc0MDVc''@;'; put 'put ''dTY5OTRcdTcyZmNcdTVlY2FcdTkwY2VcdTY3MTdcdTZkNmFcdTYzNWVcdTUyYjNcdTcyNjJcdTgwMDFcdTRmNmNcdTU5ZTVcdTkxNmFcdTcwZDlcdTZkOWRcdTUyZDJcdTRlNTBcdTk2ZjdcdTk1NmRcdTg1N2VcdTc4Y2FcdTdkMmZcdTUxMjFcdTU3OTJcdTY0YzJcdTgwOGJcdTdjN2JcdTZj''@;'; put 'put ''ZWFcdTY4ZjFcdTY5NWVcdTUxYjdcdTUzOThcdTY4YThcdTcyODFcdTllY2VcdTdiZjFcdTcyZjhcdTc5YmJcdTZmMTNcdTc0MDZcdTY3NGVcdTkxY2NcdTljYTRcdTc5M2NcdTgzODlcdTgzNTRcdTU0MGZcdTY4MTdcdTRlM2RcdTUzODlcdTUyYjFcdTc4M2VcdTUzODZcdTUyMjlcdTUwODhc''@;'; put 'put ''dTRmOGJcdTRmZDAiXSxbImMxNDAiLCJcdTdmNTZcdTdmNTlcdTdmNWJcdTdmNWNcdTdmNWRcdTdmNWVcdTdmNjBcdTdmNjMiLDQsIlx1N2Y2Ylx1N2Y2Y1x1N2Y2ZFx1N2Y2Zlx1N2Y3MFx1N2Y3M1x1N2Y3NVx1N2Y3Nlx1N2Y3N1x1N2Y3OFx1N2Y3YVx1N2Y3Ylx1N2Y3Y1x1N2Y3ZFx1N2Y3''@;'; put 'put ''Zlx1N2Y4MFx1N2Y4MiIsNywiXHU3ZjhiXHU3ZjhkXHU3ZjhmIiw0LCJcdTdmOTUiLDQsIlx1N2Y5Ylx1N2Y5Y1x1N2ZhMFx1N2ZhMlx1N2ZhM1x1N2ZhNVx1N2ZhNlx1N2ZhOCIsNiwiXHU3ZmIxIl0sWyJjMTgwIiwiXHU3ZmIzIiw0LCJcdTdmYmFcdTdmYmJcdTdmYmVcdTdmYzBcdTdmYzJc''@;'; put 'put ''dTdmYzNcdTdmYzRcdTdmYzZcdTdmYzdcdTdmYzhcdTdmYzlcdTdmY2JcdTdmY2RcdTdmY2YiLDQsIlx1N2ZkNlx1N2ZkN1x1N2ZkOSIsNSwiXHU3ZmUyXHU3ZmUzXHU3NWUyXHU3YWNiXHU3YzkyXHU2Y2E1XHU5NmI2XHU1MjliXHU3NDgzXHU1NGU5XHU0ZmU5XHU4MDU0XHU4M2IyXHU4ZmRl''@;'; put 'put ''XHU5NTcwXHU1ZWM5XHU2MDFjXHU2ZDlmXHU1ZTE4XHU2NTViXHU4MTM4XHU5NGZlXHU2MDRiXHU3MGJjXHU3ZWMzXHU3Y2FlXHU1MWM5XHU2ODgxXHU3Y2IxXHU4MjZmXHU0ZTI0XHU4Zjg2XHU5MWNmXHU2NjdlXHU0ZWFlXHU4YzA1XHU2NGE5XHU4MDRhXHU1MGRhXHU3NTk3XHU3MWNlXHU1''@;'; put 'put ''YmU1XHU4ZmJkXHU2ZjY2XHU0ZTg2XHU2NDgyXHU5NTYzXHU1ZWQ2XHU2NTk5XHU1MjE3XHU4OGMyXHU3MGM4XHU1MmEzXHU3MzBlXHU3NDMzXHU2Nzk3XHU3OGY3XHU5NzE2XHU0ZTM0XHU5MGJiXHU5Y2RlXHU2ZGNiXHU1MWRiXHU4ZDQxXHU1NDFkXHU2MmNlXHU3M2IyXHU4M2YxXHU5NmY2''@;'; put 'put ''XHU5Zjg0XHU5NGMzXHU0ZjM2XHU3ZjlhXHU1MWNjXHU3MDc1XHU5Njc1XHU1Y2FkXHU5ODg2XHU1M2U2XHU0ZWU0XHU2ZTljXHU3NDA5XHU2OWI0XHU3ODZiXHU5OThmXHU3NTU5XHU1MjE4XHU3NjI0XHU2ZDQxXHU2N2YzXHU1MTZkXHU5Zjk5XHU4MDRiXHU1NDk5XHU3YjNjXHU3YWJmIl0s''@;'; put 'put ''WyJjMjQwIiwiXHU3ZmU0XHU3ZmU3XHU3ZmU4XHU3ZmVhXHU3ZmViXHU3ZmVjXHU3ZmVkXHU3ZmVmXHU3ZmYyXHU3ZmY0Iiw2LCJcdTdmZmRcdTdmZmVcdTdmZmZcdTgwMDJcdTgwMDdcdTgwMDhcdTgwMDlcdTgwMGFcdTgwMGVcdTgwMGZcdTgwMTFcdTgwMTNcdTgwMWFcdTgwMWJcdTgwMWRc''@;'; put 'put ''dTgwMWVcdTgwMWZcdTgwMjFcdTgwMjNcdTgwMjRcdTgwMmIiLDUsIlx1ODAzMlx1ODAzNFx1ODAzOVx1ODAzYVx1ODAzY1x1ODAzZVx1ODA0MFx1ODA0MVx1ODA0NFx1ODA0NVx1ODA0N1x1ODA0OFx1ODA0OVx1ODA0ZVx1ODA0Zlx1ODA1MFx1ODA1MVx1ODA1M1x1ODA1NVx1ODA1Nlx1ODA1''@;'; put 'put ''NyJdLFsiYzI4MCIsIlx1ODA1OVx1ODA1YiIsMTMsIlx1ODA2YiIsNSwiXHU4MDcyIiwxMSwiXHU5Njg2XHU1Nzg0XHU2MmUyXHU5NjQ3XHU2OTdjXHU1YTA0XHU2NDAyXHU3YmQzXHU2ZjBmXHU5NjRiXHU4MmE2XHU1MzYyXHU5ODg1XHU1ZTkwXHU3MDg5XHU2M2IzXHU1MzY0XHU4NjRmXHU5''@;'; put 'put ''YzgxXHU5ZTkzXHU3ODhjXHU5NzMyXHU4ZGVmXHU4ZDQyXHU5ZTdmXHU2ZjVlXHU3OTg0XHU1ZjU1XHU5NjQ2XHU2MjJlXHU5YTc0XHU1NDE1XHU5NGRkXHU0ZmEzXHU2NWM1XHU1YzY1XHU1YzYxXHU3ZjE1XHU4NjUxXHU2YzJmXHU1ZjhiXHU3Mzg3XHU2ZWU0XHU3ZWZmXHU1Y2U2XHU2MzFi''@;'; put 'put ''XHU1YjZhXHU2ZWU2XHU1Mzc1XHU0ZTcxXHU2M2EwXHU3NTY1XHU2MmExXHU4ZjZlXHU0ZjI2XHU0ZWQxXHU2Y2E2XHU3ZWI2XHU4YmJhXHU4NDFkXHU4N2JhXHU3ZjU3XHU5MDNiXHU5NTIzXHU3YmE5XHU5YWExXHU4OGY4XHU4NDNkXHU2ZDFiXHU5YTg2XHU3ZWRjXHU1OTg4XHU5ZWJiXHU3''@;'; put 'put ''MzliXHU3ODAxXHU4NjgyXHU5YTZjXHU5YTgyXHU1NjFiXHU1NDE3XHU1N2NiXHU0ZTcwXHU5ZWE2XHU1MzU2XHU4ZmM4XHU4MTA5XHU3NzkyXHU5OTkyXHU4NmVlXHU2ZWUxXHU4NTEzXHU2NmZjXHU2MTYyXHU2ZjJiIl0sWyJjMzQwIiwiXHU4MDdlXHU4MDgxXHU4MDgyXHU4MDg1XHU4MDg4''@;'; put 'put ''XHU4MDhhXHU4MDhkIiw1LCJcdTgwOTRcdTgwOTVcdTgwOTdcdTgwOTlcdTgwOWVcdTgwYTNcdTgwYTZcdTgwYTdcdTgwYThcdTgwYWNcdTgwYjBcdTgwYjNcdTgwYjVcdTgwYjZcdTgwYjhcdTgwYjlcdTgwYmJcdTgwYzVcdTgwYzciLDQsIlx1ODBjZiIsNiwiXHU4MGQ4XHU4MGRmXHU4MGUw''@;'; put 'put ''XHU4MGUyXHU4MGUzXHU4MGU2XHU4MGVlXHU4MGY1XHU4MGY3XHU4MGY5XHU4MGZiXHU4MGZlXHU4MGZmXHU4MTAwXHU4MTAxXHU4MTAzXHU4MTA0XHU4MTA1XHU4MTA3XHU4MTA4XHU4MTBiIl0sWyJjMzgwIiwiXHU4MTBjXHU4MTE1XHU4MTE3XHU4MTE5XHU4MTFiXHU4MTFjXHU4MTFkXHU4''@;'; put 'put ''MTFmIiwxMiwiXHU4MTJkXHU4MTJlXHU4MTMwXHU4MTMzXHU4MTM0XHU4MTM1XHU4MTM3XHU4MTM5Iiw0LCJcdTgxM2ZcdThjMjlcdTgyOTJcdTgzMmJcdTc2ZjJcdTZjMTNcdTVmZDlcdTgzYmRcdTczMmJcdTgzMDVcdTk1MWFcdTZiZGJcdTc3ZGJcdTk0YzZcdTUzNmZcdTgzMDJcdTUxOTJc''@;'; put 'put ''dTVlM2RcdThjOGNcdThkMzhcdTRlNDhcdTczYWJcdTY3OWFcdTY4ODVcdTkxNzZcdTk3MDlcdTcxNjRcdTZjYTFcdTc3MDlcdTVhOTJcdTk1NDFcdTZiY2ZcdTdmOGVcdTY2MjdcdTViZDBcdTU5YjlcdTVhOWFcdTk1ZThcdTk1ZjdcdTRlZWNcdTg0MGNcdTg0OTlcdTZhYWNcdTc2ZGZcdTk1''@;'; put 'put ''MzBcdTczMWJcdTY4YTZcdTViNWZcdTc3MmZcdTkxOWFcdTk3NjFcdTdjZGNcdThmZjdcdThjMWNcdTVmMjVcdTdjNzNcdTc5ZDhcdTg5YzVcdTZjY2NcdTg3MWNcdTViYzZcdTVlNDJcdTY4YzlcdTc3MjBcdTdlZjVcdTUxOTVcdTUxNGRcdTUyYzlcdTVhMjlcdTdmMDVcdTk3NjJcdTgyZDdc''@;'; put 'put ''dTYzY2ZcdTc3ODRcdTg1ZDBcdTc5ZDJcdTZlM2FcdTVlOTlcdTU5OTlcdTg1MTFcdTcwNmRcdTZjMTFcdTYyYmZcdTc2YmZcdTY1NGZcdTYwYWZcdTk1ZmRcdTY2MGVcdTg3OWZcdTllMjNcdTk0ZWRcdTU0MGRcdTU0N2RcdThjMmNcdTY0NzgiXSxbImM0NDAiLCJcdTgxNDAiLDUsIlx1ODE0''@;'; put 'put ''N1x1ODE0OVx1ODE0ZFx1ODE0ZVx1ODE0Zlx1ODE1Mlx1ODE1Nlx1ODE1N1x1ODE1OFx1ODE1YiIsNCwiXHU4MTYxXHU4MTYyXHU4MTYzXHU4MTY0XHU4MTY2XHU4MTY4XHU4MTZhXHU4MTZiXHU4MTZjXHU4MTZmXHU4MTcyXHU4MTczXHU4MTc1XHU4MTc2XHU4MTc3XHU4MTc4XHU4MTgxXHU4''@;'; put 'put ''MTgzIiw0LCJcdTgxODlcdTgxOGJcdTgxOGNcdTgxOGRcdTgxOGVcdTgxOTBcdTgxOTIiLDUsIlx1ODE5OVx1ODE5YVx1ODE5ZSIsNCwiXHU4MWE0XHU4MWE1Il0sWyJjNDgwIiwiXHU4MWE3XHU4MWE5XHU4MWFiIiw3LCJcdTgxYjQiLDUsIlx1ODFiY1x1ODFiZFx1ODFiZVx1ODFiZlx1ODFj''@;'; put 'put ''NFx1ODFjNVx1ODFjN1x1ODFjOFx1ODFjOVx1ODFjYlx1ODFjZCIsNiwiXHU2NDc5XHU4NjExXHU2YTIxXHU4MTljXHU3OGU4XHU2NDY5XHU5YjU0XHU2MmI5XHU2NzJiXHU4M2FiXHU1OGE4XHU5ZWQ4XHU2Y2FiXHU2ZjIwXHU1YmRlXHU5NjRjXHU4YzBiXHU3MjVmXHU2N2QwXHU2MmM3XHU3''@;'; put 'put ''MjYxXHU0ZWE5XHU1OWM2XHU2YmNkXHU1ODkzXHU2NmFlXHU1ZTU1XHU1MmRmXHU2MTU1XHU2NzI4XHU3NmVlXHU3NzY2XHU3MjY3XHU3YTQ2XHU2MmZmXHU1NGVhXHU1NDUwXHU5NGEwXHU5MGEzXHU1YTFjXHU3ZWIzXHU2YzE2XHU0ZTQzXHU1OTc2XHU4MDEwXHU1OTQ4XHU1MzU3XHU3NTM3''@;'; put 'put ''XHU5NmJlXHU1NmNhXHU2MzIwXHU4MTExXHU2MDdjXHU5NWY5XHU2ZGQ2XHU1NDYyXHU5OTgxXHU1MTg1XHU1YWU5XHU4MGZkXHU1OWFlXHU5NzEzXHU1MDJhXHU2Y2U1XHU1YzNjXHU2MmRmXHU0ZjYwXHU1MzNmXHU4MTdiXHU5MDA2XHU2ZWJhXHU4NTJiXHU2MmM4XHU1ZTc0XHU3OGJlXHU2''@;'; put 'put ''NGI1XHU2MzdiXHU1ZmY1XHU1YTE4XHU5MTdmXHU5ZTFmXHU1YzNmXHU2MzRmXHU4MDQyXHU1YjdkXHU1NTZlXHU5NTRhXHU5NTRkXHU2ZDg1XHU2MGE4XHU2N2UwXHU3MmRlXHU1MWRkXHU1YjgxIl0sWyJjNTQwIiwiXHU4MWQ0IiwxNCwiXHU4MWU0XHU4MWU1XHU4MWU2XHU4MWU4XHU4MWU5''@;'; put 'put ''XHU4MWViXHU4MWVlIiw0LCJcdTgxZjUiLDUsIlx1ODFmZFx1ODFmZlx1ODIwM1x1ODIwNyIsNCwiXHU4MjBlXHU4MjBmXHU4MjExXHU4MjEzXHU4MjE1Iiw1LCJcdTgyMWRcdTgyMjBcdTgyMjRcdTgyMjVcdTgyMjZcdTgyMjdcdTgyMjlcdTgyMmVcdTgyMzJcdTgyM2FcdTgyM2NcdTgyM2Rc''@;'; put 'put ''dTgyM2YiXSxbImM1ODAiLCJcdTgyNDBcdTgyNDFcdTgyNDJcdTgyNDNcdTgyNDVcdTgyNDZcdTgyNDhcdTgyNGFcdTgyNGNcdTgyNGRcdTgyNGVcdTgyNTAiLDcsIlx1ODI1OVx1ODI1Ylx1ODI1Y1x1ODI1ZFx1ODI1ZVx1ODI2MCIsNywiXHU4MjY5XHU2MmU3XHU2Y2RlXHU3MjViXHU2MjZk''@;'; put 'put ''XHU5NGFlXHU3ZWJkXHU4MTEzXHU2ZDUzXHU1MTljXHU1ZjA0XHU1OTc0XHU1MmFhXHU2MDEyXHU1OTczXHU2Njk2XHU4NjUwXHU3NTlmXHU2MzJhXHU2MWU2XHU3Y2VmXHU4YmZhXHU1NGU2XHU2YjI3XHU5ZTI1XHU2YmI0XHU4NWQ1XHU1NDU1XHU1MDc2XHU2Y2E0XHU1NTZhXHU4ZGI0XHU3''@;'; put 'put ''MjJjXHU1ZTE1XHU2MDE1XHU3NDM2XHU2MmNkXHU2MzkyXHU3MjRjXHU1Zjk4XHU2ZTQzXHU2ZDNlXHU2NTAwXHU2ZjU4XHU3NmQ4XHU3OGQwXHU3NmZjXHU3NTU0XHU1MjI0XHU1M2RiXHU0ZTUzXHU1ZTllXHU2NWMxXHU4MDJhXHU4MGQ2XHU2MjliXHU1NDg2XHU1MjI4XHU3MGFlXHU4ODhk''@;'; put 'put ''XHU4ZGQxXHU2Y2UxXHU1NDc4XHU4MGRhXHU1N2Y5XHU4OGY0XHU4ZDU0XHU5NjZhXHU5MTRkXHU0ZjY5XHU2YzliXHU1NWI3XHU3NmM2XHU3ODMwXHU2MmE4XHU3MGY5XHU2ZjhlXHU1ZjZkXHU4NGVjXHU2OGRhXHU3ODdjXHU3YmY3XHU4MWE4XHU2NzBiXHU5ZTRmXHU2MzY3XHU3OGIwXHU1''@;'; put 'put ''NzZmXHU3ODEyXHU5NzM5XHU2Mjc5XHU2MmFiXHU1Mjg4XHU3NDM1XHU2YmQ3Il0sWyJjNjQwIiwiXHU4MjZhXHU4MjZiXHU4MjZjXHU4MjZkXHU4MjcxXHU4Mjc1XHU4Mjc2XHU4Mjc3XHU4Mjc4XHU4MjdiXHU4MjdjXHU4MjgwXHU4MjgxXHU4MjgzXHU4Mjg1XHU4Mjg2XHU4Mjg3XHU4Mjg5''@;'; put 'put ''XHU4MjhjXHU4MjkwXHU4MjkzXHU4Mjk0XHU4Mjk1XHU4Mjk2XHU4MjlhXHU4MjliXHU4MjllXHU4MmEwXHU4MmEyXHU4MmEzXHU4MmE3XHU4MmIyXHU4MmI1XHU4MmI2XHU4MmJhXHU4MmJiXHU4MmJjXHU4MmJmXHU4MmMwXHU4MmMyXHU4MmMzXHU4MmM1XHU4MmM2XHU4MmM5XHU4MmQwXHU4''@;'; put 'put ''MmQ2XHU4MmQ5XHU4MmRhXHU4MmRkXHU4MmUyXHU4MmU3XHU4MmU4XHU4MmU5XHU4MmVhXHU4MmVjXHU4MmVkXHU4MmVlXHU4MmYwXHU4MmYyXHU4MmYzXHU4MmY1XHU4MmY2XHU4MmY4Il0sWyJjNjgwIiwiXHU4MmZhXHU4MmZjIiw0LCJcdTgzMGFcdTgzMGJcdTgzMGRcdTgzMTBcdTgzMTJc''@;'; put 'put ''dTgzMTNcdTgzMTZcdTgzMThcdTgzMTlcdTgzMWQiLDksIlx1ODMyOVx1ODMyYVx1ODMyZVx1ODMzMFx1ODMzMlx1ODMzN1x1ODMzYlx1ODMzZFx1NTU2NFx1ODEzZVx1NzViMlx1NzZhZVx1NTMzOVx1NzVkZVx1NTBmYlx1NWM0MVx1OGI2Y1x1N2JjN1x1NTA0Zlx1NzI0N1x1OWE5N1x1OThk''@;'; put 'put ''OFx1NmYwMlx1NzRlMlx1Nzk2OFx1NjQ4N1x1NzdhNVx1NjJmY1x1OTg5MVx1OGQyYlx1NTRjMVx1ODA1OFx1NGU1Mlx1NTc2YVx1ODJmOVx1ODQwZFx1NWU3M1x1NTFlZFx1NzRmNlx1OGJjNFx1NWM0Zlx1NTc2MVx1NmNmY1x1OTg4N1x1NWE0Nlx1NzgzNFx1OWI0NFx1OGZlYlx1N2M5NVx1''@;'; put 'put ''NTI1Nlx1NjI1MVx1OTRmYVx1NGVjNlx1ODM4Nlx1ODQ2MVx1ODNlOVx1ODRiMlx1NTdkNFx1NjczNFx1NTcwM1x1NjY2ZVx1NmQ2Nlx1OGMzMVx1NjZkZFx1NzAxMVx1NjcxZlx1NmIzYVx1NjgxNlx1NjIxYVx1NTliYlx1NGUwM1x1NTFjNFx1NmYwNlx1NjdkMlx1NmM4Zlx1NTE3Nlx1Njhj''@;'; put 'put ''Ylx1NTk0N1x1NmI2N1x1NzU2Nlx1NWQwZVx1ODExMFx1OWY1MFx1NjVkN1x1Nzk0OFx1Nzk0MVx1OWE5MVx1OGQ3N1x1NWM4Mlx1NGU1ZVx1NGYwMVx1NTQyZlx1NTk1MVx1NzgwY1x1NTY2OFx1NmMxNFx1OGZjNFx1NWYwM1x1NmM3ZFx1NmNlM1x1OGJhYlx1NjM5MCJdLFsiYzc0MCIsIlx1''@;'; put 'put ''ODMzZVx1ODMzZlx1ODM0MVx1ODM0Mlx1ODM0NFx1ODM0NVx1ODM0OFx1ODM0YSIsNCwiXHU4MzUzXHU4MzU1Iiw0LCJcdTgzNWRcdTgzNjJcdTgzNzAiLDYsIlx1ODM3OVx1ODM3YVx1ODM3ZSIsNiwiXHU4Mzg3XHU4Mzg4XHU4MzhhXHU4MzhiXHU4MzhjXHU4MzhkXHU4MzhmXHU4MzkwXHU4''@;'; put 'put ''MzkxXHU4Mzk0XHU4Mzk1XHU4Mzk2XHU4Mzk3XHU4Mzk5XHU4MzlhXHU4MzlkXHU4MzlmXHU4M2ExIiw2LCJcdTgzYWNcdTgzYWRcdTgzYWUiXSxbImM3ODAiLCJcdTgzYWZcdTgzYjVcdTgzYmJcdTgzYmVcdTgzYmZcdTgzYzJcdTgzYzNcdTgzYzRcdTgzYzZcdTgzYzhcdTgzYzlcdTgzY2Jc''@;'; put 'put ''dTgzY2RcdTgzY2VcdTgzZDBcdTgzZDFcdTgzZDJcdTgzZDNcdTgzZDVcdTgzZDdcdTgzZDlcdTgzZGFcdTgzZGJcdTgzZGVcdTgzZTJcdTgzZTNcdTgzZTRcdTgzZTZcdTgzZTdcdTgzZThcdTgzZWJcdTgzZWNcdTgzZWRcdTYwNzBcdTZkM2RcdTcyNzVcdTYyNjZcdTk0OGVcdTk0YzVcdTUz''@;'; put 'put ''NDNcdThmYzFcdTdiN2VcdTRlZGZcdThjMjZcdTRlN2VcdTllZDRcdTk0YjFcdTk0YjNcdTUyNGRcdTZmNWNcdTkwNjNcdTZkNDVcdThjMzRcdTU4MTFcdTVkNGNcdTZiMjBcdTZiNDlcdTY3YWFcdTU0NWJcdTgxNTRcdTdmOGNcdTU4OTlcdTg1MzdcdTVmM2FcdTYyYTJcdTZhNDdcdTk1Mzlc''@;'; put 'put ''dTY1NzJcdTYwODRcdTY4NjVcdTc3YTdcdTRlNTRcdTRmYThcdTVkZTdcdTk3OThcdTY0YWNcdTdmZDhcdTVjZWRcdTRmY2ZcdTdhOGRcdTUyMDdcdTgzMDRcdTRlMTRcdTYwMmZcdTdhODNcdTk0YTZcdTRmYjVcdTRlYjJcdTc5ZTZcdTc0MzRcdTUyZTRcdTgyYjlcdTY0ZDJcdTc5YmRcdTVi''@;'; put 'put ''ZGRcdTZjODFcdTk3NTJcdThmN2JcdTZjMjJcdTUwM2VcdTUzN2ZcdTZlMDVcdTY0Y2VcdTY2NzRcdTZjMzBcdTYwYzVcdTk4NzdcdThiZjdcdTVlODZcdTc0M2NcdTdhNzdcdTc5Y2JcdTRlMThcdTkwYjFcdTc0MDNcdTZjNDJcdTU2ZGFcdTkxNGJcdTZjYzVcdThkOGJcdTUzM2FcdTg2YzZc''@;'; put 'put ''dTY2ZjJcdThlYWZcdTVjNDhcdTlhNzFcdTZlMjAiXSxbImM4NDAiLCJcdTgzZWVcdTgzZWZcdTgzZjMiLDQsIlx1ODNmYVx1ODNmYlx1ODNmY1x1ODNmZVx1ODNmZlx1ODQwMFx1ODQwMlx1ODQwNVx1ODQwN1x1ODQwOFx1ODQwOVx1ODQwYVx1ODQxMFx1ODQxMiIsNSwiXHU4NDE5XHU4NDFh''@;'; put 'put ''XHU4NDFiXHU4NDFlIiw1LCJcdTg0MjkiLDcsIlx1ODQzMiIsNSwiXHU4NDM5XHU4NDNhXHU4NDNiXHU4NDNlIiw3LCJcdTg0NDdcdTg0NDhcdTg0NDkiXSxbImM4ODAiLCJcdTg0NGEiLDYsIlx1ODQ1MiIsNCwiXHU4NDU4XHU4NDVkXHU4NDVlXHU4NDVmXHU4NDYwXHU4NDYyXHU4NDY0Iiw0''@;'; put 'put ''LCJcdTg0NmFcdTg0NmVcdTg0NmZcdTg0NzBcdTg0NzJcdTg0NzRcdTg0NzdcdTg0NzlcdTg0N2JcdTg0N2NcdTUzZDZcdTVhMzZcdTlmOGJcdThkYTNcdTUzYmJcdTU3MDhcdTk4YTdcdTY3NDNcdTkxOWJcdTZjYzlcdTUxNjhcdTc1Y2FcdTYyZjNcdTcyYWNcdTUyMzhcdTUyOWRcdTdmM2Fc''@;'; put 'put ''dTcwOTRcdTc2MzhcdTUzNzRcdTllNGFcdTY5YjdcdTc4NmVcdTk2YzBcdTg4ZDlcdTdmYTRcdTcxMzZcdTcxYzNcdTUxODlcdTY3ZDNcdTc0ZTRcdTU4ZTRcdTY1MThcdTU2YjdcdThiYTlcdTk5NzZcdTYyNzBcdTdlZDVcdTYwZjlcdTcwZWRcdTU4ZWNcdTRlYzFcdTRlYmFcdTVmY2RcdTk3''@;'; put 'put ''ZTdcdTRlZmJcdThiYTRcdTUyMDNcdTU5OGFcdTdlYWJcdTYyNTRcdTRlY2RcdTY1ZTVcdTYyMGVcdTgzMzhcdTg0YzlcdTgzNjNcdTg3OGRcdTcxOTRcdTZlYjZcdTViYjlcdTdlZDJcdTUxOTdcdTYzYzlcdTY3ZDRcdTgwODlcdTgzMzlcdTg4MTVcdTUxMTJcdTViN2FcdTU5ODJcdThmYjFc''@;'; put 'put ''dTRlNzNcdTZjNWRcdTUxNjVcdTg5MjVcdThmNmZcdTk2MmVcdTg1NGFcdTc0NWVcdTk1MTBcdTk1ZjBcdTZkYTZcdTgyZTVcdTVmMzFcdTY0OTJcdTZkMTJcdTg0MjhcdTgxNmVcdTljYzNcdTU4NWVcdThkNWJcdTRlMDlcdTUzYzEiXSxbImM5NDAiLCJcdTg0N2QiLDQsIlx1ODQ4M1x1ODQ4''@;'; put 'put ''NFx1ODQ4NVx1ODQ4Nlx1ODQ4YVx1ODQ4ZFx1ODQ4ZiIsNywiXHU4NDk4XHU4NDlhXHU4NDliXHU4NDlkXHU4NDllXHU4NDlmXHU4NGEwXHU4NGEyIiwxMiwiXHU4NGIwXHU4NGIxXHU4NGIzXHU4NGI1XHU4NGI2XHU4NGI3XHU4NGJiXHU4NGJjXHU4NGJlXHU4NGMwXHU4NGMyXHU4NGMzXHU4''@;'; put 'put ''NGM1XHU4NGM2XHU4NGM3XHU4NGM4XHU4NGNiXHU4NGNjXHU4NGNlXHU4NGNmXHU4NGQyXHU4NGQ0XHU4NGQ1XHU4NGQ3Il0sWyJjOTgwIiwiXHU4NGQ4Iiw0LCJcdTg0ZGVcdTg0ZTFcdTg0ZTJcdTg0ZTRcdTg0ZTciLDQsIlx1ODRlZFx1ODRlZVx1ODRlZlx1ODRmMSIsMTAsIlx1ODRmZFx1''@;'; put 'put ''ODRmZVx1ODUwMFx1ODUwMVx1ODUwMlx1NGYxZVx1NjU2M1x1Njg1MVx1NTVkM1x1NGUyN1x1NjQxNFx1OWE5YVx1NjI2Ylx1NWFjMlx1NzQ1Zlx1ODI3Mlx1NmRhOVx1NjhlZVx1NTBlN1x1ODM4ZVx1NzgwMlx1Njc0MFx1NTIzOVx1NmM5OVx1N2ViMVx1NTBiYlx1NTU2NVx1NzE1ZVx1N2I1''@;'; put 'put ''Ylx1NjY1Mlx1NzNjYVx1ODJlYlx1Njc0OVx1NWM3MVx1NTIyMFx1NzE3ZFx1ODg2Ylx1OTVlYVx1OTY1NVx1NjRjNVx1OGQ2MVx1ODFiM1x1NTU4NFx1NmM1NVx1NjI0N1x1N2YyZVx1NTg5Mlx1NGYyNFx1NTU0Nlx1OGQ0Zlx1NjY0Y1x1NGUwYVx1NWMxYVx1ODhmM1x1NjhhMlx1NjM0ZVx1''@;'; put 'put ''N2EwZFx1NzBlN1x1ODI4ZFx1NTJmYVx1OTdmNlx1NWMxMVx1NTRlOFx1OTBiNVx1N2VjZFx1NTk2Mlx1OGQ0YVx1ODZjN1x1ODIwY1x1ODIwZFx1OGQ2Nlx1NjQ0NFx1NWMwNFx1NjE1MVx1NmQ4OVx1NzkzZVx1OGJiZVx1NzgzN1x1NzUzM1x1NTQ3Ylx1NGYzOFx1OGVhYlx1NmRmMVx1NWEy''@;'; put 'put ''MFx1N2VjNVx1Nzk1ZVx1NmM4OFx1NWJhMVx1NWE3Nlx1NzUxYVx1ODBiZVx1NjE0ZVx1NmUxN1x1NThmMFx1NzUxZlx1NzUyNVx1NzI3Mlx1NTM0N1x1N2VmMyJdLFsiY2E0MCIsIlx1ODUwMyIsOCwiXHU4NTBkXHU4NTBlXHU4NTBmXHU4NTEwXHU4NTEyXHU4NTE0XHU4NTE1XHU4NTE2XHU4''@;'; put 'put ''NTE4XHU4NTE5XHU4NTFiXHU4NTFjXHU4NTFkXHU4NTFlXHU4NTIwXHU4NTIyIiw4LCJcdTg1MmQiLDksIlx1ODUzZSIsNCwiXHU4NTQ0XHU4NTQ1XHU4NTQ2XHU4NTQ3XHU4NTRiIiwxMF0sWyJjYTgwIiwiXHU4NTU3XHU4NTU4XHU4NTVhXHU4NTViXHU4NTVjXHU4NTVkXHU4NTVmIiw0LCJc''@;'; put 'put ''dTg1NjVcdTg1NjZcdTg1NjdcdTg1NjkiLDgsIlx1ODU3M1x1ODU3NVx1ODU3Nlx1ODU3N1x1ODU3OFx1ODU3Y1x1ODU3ZFx1ODU3Zlx1ODU4MFx1ODU4MVx1NzcwMVx1NzZkYlx1NTI2OVx1ODBkY1x1NTcyM1x1NWUwOFx1NTkzMVx1NzJlZVx1NjViZFx1NmU3Zlx1OGJkN1x1NWMzOFx1ODY3''@;'; put 'put ''MVx1NTM0MVx1NzdmM1x1NjJmZVx1NjVmNlx1NGVjMFx1OThkZlx1ODY4MFx1NWI5ZVx1OGJjNlx1NTNmMlx1NzdlMlx1NGY3Zlx1NWM0ZVx1OWE3Nlx1NTljYlx1NWYwZlx1NzkzYVx1NThlYlx1NGUxNlx1NjdmZlx1NGU4Ylx1NjJlZFx1OGE5M1x1OTAxZFx1NTJiZlx1NjYyZlx1NTVkY1x1''@;'; put 'put ''NTY2Y1x1OTAwMlx1NGVkNVx1NGY4ZFx1OTFjYVx1OTk3MFx1NmMwZlx1NWUwMlx1NjA0M1x1NWJhNFx1ODljNlx1OGJkNVx1NjUzNlx1NjI0Ylx1OTk5Nlx1NWI4OFx1NWJmZlx1NjM4OFx1NTUyZVx1NTNkN1x1NzYyNlx1NTE3ZFx1ODUyY1x1NjdhMlx1NjhiM1x1NmI4YVx1NjI5Mlx1OGY5''@;'; put 'put ''M1x1NTNkNFx1ODIxMlx1NmRkMVx1NzU4Zlx1NGU2Nlx1OGQ0ZVx1NWI3MFx1NzE5Zlx1ODVhZlx1NjY5MVx1NjZkOVx1N2Y3Mlx1ODcwMFx1OWVjZFx1OWYyMFx1NWM1ZVx1NjcyZlx1OGZmMFx1NjgxMVx1Njc1Zlx1NjIwZFx1N2FkNlx1NTg4NVx1NWViNlx1NjU3MFx1NmYzMSJdLFsiY2I0''@;'; put 'put ''MCIsIlx1ODU4Mlx1ODU4M1x1ODU4Nlx1ODU4OCIsNiwiXHU4NTkwIiwxMCwiXHU4NTlkIiw2LCJcdTg1YTVcdTg1YTZcdTg1YTdcdTg1YTlcdTg1YWJcdTg1YWNcdTg1YWRcdTg1YjEiLDUsIlx1ODViOFx1ODViYSIsNiwiXHU4NWMyIiw2LCJcdTg1Y2EiLDQsIlx1ODVkMVx1ODVkMiJdLFsi''@;'; put 'put ''Y2I4MCIsIlx1ODVkNFx1ODVkNiIsNSwiXHU4NWRkIiw2LCJcdTg1ZTVcdTg1ZTZcdTg1ZTdcdTg1ZThcdTg1ZWEiLDE0LCJcdTYwNTVcdTUyMzdcdTgwMGRcdTY0NTRcdTg4NzBcdTc1MjlcdTVlMDVcdTY4MTNcdTYyZjRcdTk3MWNcdTUzY2NcdTcyM2RcdThjMDFcdTZjMzRcdTc3NjFcdTdh''@;'; put 'put ''MGVcdTU0MmVcdTc3YWNcdTk4N2FcdTgyMWNcdThiZjRcdTc4NTVcdTY3MTRcdTcwYzFcdTY1YWZcdTY0OTVcdTU2MzZcdTYwMWRcdTc5YzFcdTUzZjhcdTRlMWRcdTZiN2JcdTgwODZcdTViZmFcdTU1ZTNcdTU2ZGJcdTRmM2FcdTRmM2NcdTk5NzJcdTVkZjNcdTY3N2VcdTgwMzhcdTYwMDJc''@;'; put 'put ''dTk4ODJcdTkwMDFcdTViOGJcdThiYmNcdThiZjVcdTY0MWNcdTgyNThcdTY0ZGVcdTU1ZmRcdTgyY2ZcdTkxNjVcdTRmZDdcdTdkMjBcdTkwMWZcdTdjOWZcdTUwZjNcdTU4NTFcdTZlYWZcdTViYmZcdThiYzlcdTgwODNcdTkxNzhcdTg0OWNcdTdiOTdcdTg2N2RcdTk2OGJcdTk2OGZcdTdl''@;'; put 'put ''ZTVcdTlhZDNcdTc4OGVcdTVjODFcdTdhNTdcdTkwNDJcdTk2YTdcdTc5NWZcdTViNTlcdTYzNWZcdTdiMGJcdTg0ZDFcdTY4YWRcdTU1MDZcdTdmMjlcdTc0MTBcdTdkMjJcdTk1MDFcdTYyNDBcdTU4NGNcdTRlZDZcdTViODNcdTU5NzlcdTU4NTQiXSxbImNjNDAiLCJcdTg1ZjlcdTg1ZmFc''@;'; put 'put ''dTg1ZmNcdTg1ZmRcdTg1ZmVcdTg2MDAiLDQsIlx1ODYwNiIsMTAsIlx1ODYxMlx1ODYxM1x1ODYxNFx1ODYxNVx1ODYxNyIsMTUsIlx1ODYyOFx1ODYyYSIsMTMsIlx1ODYzOVx1ODYzYVx1ODYzYlx1ODYzZFx1ODYzZVx1ODYzZlx1ODY0MCJdLFsiY2M4MCIsIlx1ODY0MSIsMTEsIlx1ODY1''@;'; put 'put ''Mlx1ODY1M1x1ODY1NSIsNCwiXHU4NjViXHU4NjVjXHU4NjVkXHU4NjVmXHU4NjYwXHU4NjYxXHU4NjYzIiw3LCJcdTczNmRcdTYzMWVcdThlNGJcdThlMGZcdTgwY2VcdTgyZDRcdTYyYWNcdTUzZjBcdTZjZjBcdTkxNWVcdTU5MmFcdTYwMDFcdTZjNzBcdTU3NGRcdTY0NGFcdThkMmFcdTc2''@;'; put 'put ''MmJcdTZlZTlcdTU3NWJcdTZhODBcdTc1ZjBcdTZmNmRcdThjMmRcdThjMDhcdTU3NjZcdTZiZWZcdTg4OTJcdTc4YjNcdTYzYTJcdTUzZjlcdTcwYWRcdTZjNjRcdTU4NThcdTY0MmFcdTU4MDJcdTY4ZTBcdTgxOWJcdTU1MTBcdTdjZDZcdTUwMThcdThlYmFcdTZkY2NcdThkOWZcdTcwZWJc''@;'; put 'put ''dTYzOGZcdTZkOWJcdTZlZDRcdTdlZTZcdTg0MDRcdTY4NDNcdTkwMDNcdTZkZDhcdTk2NzZcdThiYThcdTU5NTdcdTcyNzlcdTg1ZTRcdTgxN2VcdTc1YmNcdThhOGFcdTY4YWZcdTUyNTRcdThlMjJcdTk1MTFcdTYzZDBcdTk4OThcdThlNDRcdTU1N2NcdTRmNTNcdTY2ZmZcdTU2OGZcdTYw''@;'; put 'put ''ZDVcdTZkOTVcdTUyNDNcdTVjNDlcdTU5MjlcdTZkZmJcdTU4NmJcdTc1MzBcdTc1MWNcdTYwNmNcdTgyMTRcdTgxNDZcdTYzMTFcdTY3NjFcdThmZTJcdTc3M2FcdThkZjNcdThkMzRcdTk0YzFcdTVlMTZcdTUzODVcdTU0MmNcdTcwYzMiXSxbImNkNDAiLCJcdTg2NmRcdTg2NmZcdTg2NzBc''@;'; put 'put ''dTg2NzIiLDYsIlx1ODY4MyIsNiwiXHU4NjhlIiw0LCJcdTg2OTRcdTg2OTYiLDUsIlx1ODY5ZSIsNCwiXHU4NmE1XHU4NmE2XHU4NmFiXHU4NmFkXHU4NmFlXHU4NmIyXHU4NmIzXHU4NmI3XHU4NmI4XHU4NmI5XHU4NmJiIiw0LCJcdTg2YzFcdTg2YzJcdTg2YzNcdTg2YzVcdTg2YzhcdTg2''@;'; put 'put ''Y2NcdTg2Y2RcdTg2ZDJcdTg2ZDNcdTg2ZDVcdTg2ZDZcdTg2ZDdcdTg2ZGFcdTg2ZGMiXSxbImNkODAiLCJcdTg2ZGRcdTg2ZTBcdTg2ZTFcdTg2ZTJcdTg2ZTNcdTg2ZTVcdTg2ZTZcdTg2ZTdcdTg2ZThcdTg2ZWFcdTg2ZWJcdTg2ZWNcdTg2ZWZcdTg2ZjVcdTg2ZjZcdTg2ZjdcdTg2ZmFc''@;'; put 'put ''dTg2ZmJcdTg2ZmNcdTg2ZmRcdTg2ZmZcdTg3MDFcdTg3MDRcdTg3MDVcdTg3MDZcdTg3MGJcdTg3MGNcdTg3MGVcdTg3MGZcdTg3MTBcdTg3MTFcdTg3MTRcdTg3MTZcdTZjNDBcdTVlZjdcdTUwNWNcdTRlYWRcdTVlYWRcdTYzM2FcdTgyNDdcdTkwMWFcdTY4NTBcdTkxNmVcdTc3YjNcdTU0''@;'; put 'put ''MGNcdTk0ZGNcdTVmNjRcdTdhZTVcdTY4NzZcdTYzNDVcdTdiNTJcdTdlZGZcdTc1ZGJcdTUwNzdcdTYyOTVcdTU5MzRcdTkwMGZcdTUxZjhcdTc5YzNcdTdhODFcdTU2ZmVcdTVmOTJcdTkwMTRcdTZkODJcdTVjNjBcdTU3MWZcdTU0MTBcdTUxNTRcdTZlNGRcdTU2ZTJcdTYzYThcdTk4OTNc''@;'; put 'put ''dTgxN2ZcdTg3MTVcdTg5MmFcdTkwMDBcdTU0MWVcdTVjNmZcdTgxYzBcdTYyZDZcdTYyNThcdTgxMzFcdTllMzVcdTk2NDBcdTlhNmVcdTlhN2NcdTY5MmRcdTU5YTVcdTYyZDNcdTU1M2VcdTYzMTZcdTU0YzdcdTg2ZDlcdTZkM2NcdTVhMDNcdTc0ZTZcdTg4OWNcdTZiNmFcdTU5MTZcdThj''@;'; put 'put ''NGNcdTVmMmZcdTZlN2VcdTczYTlcdTk4N2RcdTRlMzhcdTcwZjdcdTViOGNcdTc4OTdcdTYzM2RcdTY2NWFcdTc2OTZcdTYwY2JcdTViOWJcdTVhNDlcdTRlMDdcdTgxNTVcdTZjNmFcdTczOGJcdTRlYTFcdTY3ODlcdTdmNTFcdTVmODBcdTY1ZmFcdTY3MWJcdTVmZDhcdTU5ODRcdTVhMDEi''@;'; put 'put ''XSxbImNlNDAiLCJcdTg3MTlcdTg3MWJcdTg3MWRcdTg3MWZcdTg3MjBcdTg3MjRcdTg3MjZcdTg3MjdcdTg3MjhcdTg3MmFcdTg3MmJcdTg3MmNcdTg3MmRcdTg3MmZcdTg3MzBcdTg3MzJcdTg3MzNcdTg3MzVcdTg3MzZcdTg3MzhcdTg3MzlcdTg3M2FcdTg3M2NcdTg3M2RcdTg3NDAiLDYs''@;'; put 'put ''Ilx1ODc0YVx1ODc0Ylx1ODc0ZFx1ODc0Zlx1ODc1MFx1ODc1MVx1ODc1Mlx1ODc1NFx1ODc1NVx1ODc1Nlx1ODc1OFx1ODc1YSIsNSwiXHU4NzYxXHU4NzYyXHU4NzY2Iiw3LCJcdTg3NmZcdTg3NzFcdTg3NzJcdTg3NzNcdTg3NzUiXSxbImNlODAiLCJcdTg3NzdcdTg3NzhcdTg3NzlcdTg3''@;'; put 'put ''N2FcdTg3N2ZcdTg3ODBcdTg3ODFcdTg3ODRcdTg3ODZcdTg3ODdcdTg3ODlcdTg3OGFcdTg3OGNcdTg3OGUiLDQsIlx1ODc5NFx1ODc5NVx1ODc5Nlx1ODc5OCIsNiwiXHU4N2EwIiw0LCJcdTVkY2RcdTVmYWVcdTUzNzFcdTk3ZTZcdThmZGRcdTY4NDVcdTU2ZjRcdTU1MmZcdTYwZGZcdTRl''@;'; put 'put ''M2FcdTZmNGRcdTdlZjRcdTgyYzdcdTg0MGVcdTU5ZDRcdTRmMWZcdTRmMmFcdTVjM2VcdTdlYWNcdTY3MmFcdTg1MWFcdTU0NzNcdTc1NGZcdTgwYzNcdTU1ODJcdTliNGZcdTRmNGRcdTZlMmRcdThjMTNcdTVjMDlcdTYxNzBcdTUzNmJcdTc2MWZcdTZlMjlcdTg2OGFcdTY1ODdcdTk1ZmJc''@;'; put 'put ''dTdlYjlcdTU0M2JcdTdhMzNcdTdkMGFcdTk1ZWVcdTU1ZTFcdTdmYzFcdTc0ZWVcdTYzMWRcdTg3MTdcdTZkYTFcdTdhOWRcdTYyMTFcdTY1YTFcdTUzNjdcdTYzZTFcdTZjODNcdTVkZWJcdTU0NWNcdTk0YThcdTRlNGNcdTZjNjFcdThiZWNcdTVjNGJcdTY1ZTBcdTgyOWNcdTY4YTdcdTU0''@;'; put 'put ''M2VcdTU0MzRcdTZiY2JcdTZiNjZcdTRlOTRcdTYzNDJcdTUzNDhcdTgyMWVcdTRmMGRcdTRmYWVcdTU3NWVcdTYyMGFcdTk2ZmVcdTY2NjRcdTcyNjlcdTUyZmZcdTUyYTFcdTYwOWZcdThiZWZcdTY2MTRcdTcxOTlcdTY3OTBcdTg5N2ZcdTc4NTJcdTc3ZmRcdTY2NzBcdTU2M2JcdTU0Mzhc''@;'; put 'put ''dTk1MjFcdTcyN2EiXSxbImNmNDAiLCJcdTg3YTVcdTg3YTZcdTg3YTdcdTg3YTlcdTg3YWFcdTg3YWVcdTg3YjBcdTg3YjFcdTg3YjJcdTg3YjRcdTg3YjZcdTg3YjdcdTg3YjhcdTg3YjlcdTg3YmJcdTg3YmNcdTg3YmVcdTg3YmZcdTg3YzEiLDQsIlx1ODdjN1x1ODdjOFx1ODdjOVx1ODdj''@;'; put 'put ''YyIsNCwiXHU4N2Q0Iiw2LCJcdTg3ZGNcdTg3ZGRcdTg3ZGVcdTg3ZGZcdTg3ZTFcdTg3ZTJcdTg3ZTNcdTg3ZTRcdTg3ZTZcdTg3ZTdcdTg3ZThcdTg3ZTlcdTg3ZWJcdTg3ZWNcdTg3ZWRcdTg3ZWYiLDldLFsiY2Y4MCIsIlx1ODdmYVx1ODdmYlx1ODdmY1x1ODdmZFx1ODdmZlx1ODgwMFx1''@;'; put 'put ''ODgwMVx1ODgwMlx1ODgwNCIsNSwiXHU4ODBiIiw3LCJcdTg4MTRcdTg4MTdcdTg4MThcdTg4MTlcdTg4MWFcdTg4MWMiLDQsIlx1ODgyM1x1N2EwMFx1NjA2Zlx1NWUwY1x1NjA4OVx1ODE5ZFx1NTkxNVx1NjBkY1x1NzE4NFx1NzBlZlx1NmVhYVx1NmM1MFx1NzI4MFx1NmE4NFx1ODhhZFx1''@;'; put 'put ''NWUyZFx1NGU2MFx1NWFiM1x1NTU5Y1x1OTRlM1x1NmQxN1x1N2NmYlx1OTY5OVx1NjIwZlx1N2VjNlx1Nzc4ZVx1ODY3ZVx1NTMyM1x1OTcxZVx1OGY5Nlx1NjY4N1x1NWNlMVx1NGZhMFx1NzJlZFx1NGUwYlx1NTNhNlx1NTkwZlx1NTQxM1x1NjM4MFx1OTUyOFx1NTE0OFx1NGVkOVx1OWM5''@;'; put 'put ''Y1x1N2VhNFx1NTRiOFx1OGQyNFx1ODg1NFx1ODIzN1x1OTVmMlx1NmQ4ZVx1NWYyNlx1NWFjY1x1NjYzZVx1OTY2OVx1NzNiMFx1NzMyZVx1NTNiZlx1ODE3YVx1OTk4NVx1N2ZhMVx1NWJhYVx1OTY3N1x1OTY1MFx1N2ViZlx1NzZmOFx1NTNhMlx1OTU3Nlx1OTk5OVx1N2JiMVx1ODk0NFx1''@;'; put 'put ''NmU1OFx1NGU2MVx1N2ZkNFx1Nzk2NVx1OGJlNlx1NjBmM1x1NTRjZFx1NGVhYlx1OTg3OVx1NWRmN1x1NmE2MVx1NTBjZlx1NTQxMVx1OGM2MVx1ODQyN1x1Nzg1ZFx1OTcwNFx1NTI0YVx1NTRlZVx1NTZhM1x1OTUwMFx1NmQ4OFx1NWJiNVx1NmRjNlx1NjY1MyJdLFsiZDA0MCIsIlx1ODgy''@;'; put 'put ''NCIsMTMsIlx1ODgzMyIsNSwiXHU4ODNhXHU4ODNiXHU4ODNkXHU4ODNlXHU4ODNmXHU4ODQxXHU4ODQyXHU4ODQzXHU4ODQ2Iiw1LCJcdTg4NGUiLDUsIlx1ODg1NVx1ODg1Nlx1ODg1OFx1ODg1YSIsNiwiXHU4ODY2XHU4ODY3XHU4ODZhXHU4ODZkXHU4ODZmXHU4ODcxXHU4ODczXHU4ODc0''@;'; put 'put ''XHU4ODc1XHU4ODc2XHU4ODc4XHU4ODc5XHU4ODdhIl0sWyJkMDgwIiwiXHU4ODdiXHU4ODdjXHU4ODgwXHU4ODgzXHU4ODg2XHU4ODg3XHU4ODg5XHU4ODhhXHU4ODhjXHU4ODhlXHU4ODhmXHU4ODkwXHU4ODkxXHU4ODkzXHU4ODk0XHU4ODk1XHU4ODk3Iiw0LCJcdTg4OWQiLDQsIlx1ODhh''@;'; put 'put ''M1x1ODhhNSIsNSwiXHU1YzBmXHU1YjVkXHU2ODIxXHU4MDk2XHU1NTc4XHU3YjExXHU2NTQ4XHU2OTU0XHU0ZTliXHU2YjQ3XHU4NzRlXHU5NzhiXHU1MzRmXHU2MzFmXHU2NDNhXHU5MGFhXHU2NTljXHU4MGMxXHU4YzEwXHU1MTk5XHU2OGIwXHU1Mzc4XHU4N2Y5XHU2MWM4XHU2Y2M0XHU2''@;'; put 'put ''Y2ZiXHU4YzIyXHU1YzUxXHU4NWFhXHU4MmFmXHU5NTBjXHU2YjIzXHU4ZjliXHU2NWIwXHU1ZmZiXHU1ZmMzXHU0ZmUxXHU4ODQ1XHU2NjFmXHU4MTY1XHU3MzI5XHU2MGZhXHU1MTc0XHU1MjExXHU1NzhiXHU1ZjYyXHU5MGEyXHU4ODRjXHU5MTkyXHU1ZTc4XHU2NzRmXHU2MDI3XHU1OWQz''@;'; put 'put ''XHU1MTQ0XHU1MWY2XHU4MGY4XHU1MzA4XHU2Yzc5XHU5NmM0XHU3MThhXHU0ZjExXHU0ZmVlXHU3ZjllXHU2NzNkXHU1NWM1XHU5NTA4XHU3OWMwXHU4ODk2XHU3ZWUzXHU1ODlmXHU2MjBjXHU5NzAwXHU4NjVhXHU1NjE4XHU5ODdiXHU1ZjkwXHU4YmI4XHU4NGM0XHU5MTU3XHU1M2Q5XHU2''@;'; put 'put ''NWVkXHU1ZThmXHU3NTVjXHU2MDY0XHU3ZDZlXHU1YTdmXHU3ZWVhXHU3ZWVkXHU4ZjY5XHU1NWE3XHU1YmEzXHU2MGFjXHU2NWNiXHU3Mzg0Il0sWyJkMTQwIiwiXHU4OGFjXHU4OGFlXHU4OGFmXHU4OGIwXHU4OGIyIiw0LCJcdTg4YjhcdTg4YjlcdTg4YmFcdTg4YmJcdTg4YmRcdTg4YmVc''@;'; put 'put ''dTg4YmZcdTg4YzBcdTg4YzNcdTg4YzRcdTg4YzdcdTg4YzhcdTg4Y2FcdTg4Y2JcdTg4Y2NcdTg4Y2RcdTg4Y2ZcdTg4ZDBcdTg4ZDFcdTg4ZDNcdTg4ZDZcdTg4ZDdcdTg4ZGEiLDQsIlx1ODhlMFx1ODhlMVx1ODhlNlx1ODhlN1x1ODhlOSIsNiwiXHU4OGYyXHU4OGY1XHU4OGY2XHU4OGY3''@;'; put 'put ''XHU4OGZhXHU4OGZiXHU4OGZkXHU4OGZmXHU4OTAwXHU4OTAxXHU4OTAzIiw1XSxbImQxODAiLCJcdTg5MDlcdTg5MGIiLDQsIlx1ODkxMVx1ODkxNCIsNCwiXHU4OTFjIiw0LCJcdTg5MjJcdTg5MjNcdTg5MjRcdTg5MjZcdTg5MjdcdTg5MjhcdTg5MjlcdTg5MmNcdTg5MmRcdTg5MmVcdTg5''@;'; put 'put ''MmZcdTg5MzFcdTg5MzJcdTg5MzNcdTg5MzVcdTg5MzdcdTkwMDlcdTc2NjNcdTc3MjlcdTdlZGFcdTk3NzRcdTg1OWJcdTViNjZcdTdhNzRcdTk2ZWFcdTg4NDBcdTUyY2JcdTcxOGZcdTVmYWFcdTY1ZWNcdThiZTJcdTViZmJcdTlhNmZcdTVkZTFcdTZiODlcdTZjNWJcdThiYWRcdThiYWZc''@;'; put 'put ''dTkwMGFcdThmYzVcdTUzOGJcdTYyYmNcdTllMjZcdTllMmRcdTU0NDBcdTRlMmJcdTgyYmRcdTcyNTlcdTg2OWNcdTVkMTZcdTg4NTlcdTZkYWZcdTk2YzVcdTU0ZDFcdTRlOWFcdThiYjZcdTcxMDlcdTU0YmRcdTk2MDlcdTcwZGZcdTZkZjlcdTc2ZDBcdTRlMjVcdTc4MTRcdTg3MTJcdTVj''@;'; put 'put ''YTlcdTVlZjZcdThhMDBcdTk4OWNcdTk2MGVcdTcwOGVcdTZjYmZcdTU5NDRcdTYzYTlcdTc3M2NcdTg4NGRcdTZmMTRcdTgyNzNcdTU4MzBcdTcxZDVcdTUzOGNcdTc4MWFcdTk2YzFcdTU1MDFcdTVmNjZcdTcxMzBcdTViYjRcdThjMWFcdTlhOGNcdTZiODNcdTU5MmVcdTllMmZcdTc5ZTdc''@;'; put 'put ''dTY3NjhcdTYyNmNcdTRmNmZcdTc1YTFcdTdmOGFcdTZkMGJcdTk2MzNcdTZjMjdcdTRlZjBcdTc1ZDJcdTUxN2JcdTY4MzdcdTZmM2VcdTkwODBcdTgxNzBcdTU5OTZcdTc0NzYiXSxbImQyNDAiLCJcdTg5MzgiLDgsIlx1ODk0Mlx1ODk0M1x1ODk0NSIsMjQsIlx1ODk2MCIsNSwiXHU4OTY3''@;'; put 'put ''IiwxOSwiXHU4OTdjIl0sWyJkMjgwIiwiXHU4OTdkXHU4OTdlXHU4OTgwXHU4OTgyXHU4OTg0XHU4OTg1XHU4OTg3IiwyNiwiXHU2NDQ3XHU1YzI3XHU5MDY1XHU3YTkxXHU4YzIzXHU1OWRhXHU1NGFjXHU4MjAwXHU4MzZmXHU4OTgxXHU4MDAwXHU2OTMwXHU1NjRlXHU4MDM2XHU3MjM3XHU5''@;'; put 'put ''MWNlXHU1MWI2XHU0ZTVmXHU5ODc1XHU2Mzk2XHU0ZTFhXHU1M2Y2XHU2NmYzXHU4MTRiXHU1OTFjXHU2ZGIyXHU0ZTAwXHU1OGY5XHU1MzNiXHU2M2Q2XHU5NGYxXHU0ZjlkXHU0ZjBhXHU4ODYzXHU5ODkwXHU1OTM3XHU5MDU3XHU3OWZiXHU0ZWVhXHU4MGYwXHU3NTkxXHU2YzgyXHU1Yjlj''@;'; put 'put ''XHU1OWU4XHU1ZjVkXHU2OTA1XHU4NjgxXHU1MDFhXHU1ZGYyXHU0ZTU5XHU3N2UzXHU0ZWU1XHU4MjdhXHU2MjkxXHU2NjEzXHU5MDkxXHU1Yzc5XHU0ZWJmXHU1Zjc5XHU4MWM2XHU5MDM4XHU4MDg0XHU3NWFiXHU0ZWE2XHU4OGQ0XHU2MTBmXHU2YmM1XHU1ZmM2XHU0ZTQ5XHU3NmNhXHU2''@;'; put 'put ''ZWEyXHU4YmUzXHU4YmFlXHU4YzBhXHU4YmQxXHU1ZjAyXHU3ZmZjXHU3ZmNjXHU3ZWNlXHU4MzM1XHU4MzZiXHU1NmUwXHU2YmI3XHU5N2YzXHU5NjM0XHU1OWZiXHU1NDFmXHU5NGY2XHU2ZGViXHU1YmM1XHU5OTZlXHU1YzM5XHU1ZjE1XHU5NjkwIl0sWyJkMzQwIiwiXHU4OWEyIiwzMCwi''@;'; put 'put ''XHU4OWMzXHU4OWNkXHU4OWQzXHU4OWQ0XHU4OWQ1XHU4OWQ3XHU4OWQ4XHU4OWQ5XHU4OWRiXHU4OWRkXHU4OWRmXHU4OWUwXHU4OWUxXHU4OWUyXHU4OWU0XHU4OWU3XHU4OWU4XHU4OWU5XHU4OWVhXHU4OWVjXHU4OWVkXHU4OWVlXHU4OWYwXHU4OWYxXHU4OWYyXHU4OWY0Iiw2XSxbImQz''@;'; put 'put ''ODAiLCJcdTg5ZmIiLDQsIlx1OGEwMSIsNSwiXHU4YTA4IiwyMSwiXHU1MzcwXHU4MmYxXHU2YTMxXHU1YTc0XHU5ZTcwXHU1ZTk0XHU3ZjI4XHU4M2I5XHU4NDI0XHU4NDI1XHU4MzY3XHU4NzQ3XHU4ZmNlXHU4ZDYyXHU3NmM4XHU1ZjcxXHU5ODk2XHU3ODZjXHU2NjIwXHU1NGRmXHU2MmU1''@;'; put 'put ''XHU0ZjYzXHU4MWMzXHU3NWM4XHU1ZWI4XHU5NmNkXHU4ZTBhXHU4NmY5XHU1NDhmXHU2Y2YzXHU2ZDhjXHU2YzM4XHU2MDdmXHU1MmM3XHU3NTI4XHU1ZTdkXHU0ZjE4XHU2MGEwXHU1ZmU3XHU1YzI0XHU3NTMxXHU5MGFlXHU5NGMwXHU3MmI5XHU2Y2I5XHU2ZTM4XHU5MTQ5XHU2NzA5XHU1''@;'; put 'put ''M2NiXHU1M2YzXHU0ZjUxXHU5MWM5XHU4YmYxXHU1M2M4XHU1ZTdjXHU4ZmMyXHU2ZGU0XHU0ZThlXHU3NmMyXHU2OTg2XHU4NjVlXHU2MTFhXHU4MjA2XHU0ZjU5XHU0ZmRlXHU5MDNlXHU5YzdjXHU2MTA5XHU2ZTFkXHU2ZTE0XHU5Njg1XHU0ZTg4XHU1YTMxXHU5NmU4XHU0ZTBlXHU1Yzdm''@;'; put 'put ''XHU3OWI5XHU1Yjg3XHU4YmVkXHU3ZmJkXHU3Mzg5XHU1N2RmXHU4MjhiXHU5MGMxXHU1NDAxXHU5MDQ3XHU1NWJiXHU1Y2VhXHU1ZmExXHU2MTA4XHU2YjMyXHU3MmYxXHU4MGIyXHU4YTg5Il0sWyJkNDQwIiwiXHU4YTFlIiwzMSwiXHU4YTNmIiw4LCJcdThhNDkiLDIxXSxbImQ0ODAiLCJc''@;'; put 'put ''dThhNWYiLDI1LCJcdThhN2EiLDYsIlx1NmQ3NFx1NWJkM1x1ODhkNVx1OTg4NFx1OGM2Ylx1OWE2ZFx1OWUzM1x1NmUwYVx1NTFhNFx1NTE0M1x1NTdhM1x1ODg4MVx1NTM5Zlx1NjNmNFx1OGY5NVx1NTZlZFx1NTQ1OFx1NTcwNlx1NzMzZlx1NmU5MFx1N2YxOFx1OGZkY1x1ODJkMVx1NjEz''@;'; put 'put ''Zlx1NjAyOFx1OTY2Mlx1NjZmMFx1N2VhNlx1OGQ4YVx1OGRjM1x1OTRhNVx1NWNiM1x1N2NhNFx1NjcwOFx1NjBhNlx1OTYwNVx1ODAxOFx1NGU5MVx1OTBlN1x1NTMwMFx1OTY2OFx1NTE0MVx1OGZkMFx1ODU3NFx1OTE1ZFx1NjY1NVx1OTdmNVx1NWI1NVx1NTMxZFx1NzgzOFx1Njc0Mlx1''@;'; put 'put ''NjgzZFx1NTRjOVx1NzA3ZVx1NWJiMFx1OGY3ZFx1NTE4ZFx1NTcyOFx1NTRiMVx1NjUxMlx1NjY4Mlx1OGQ1ZVx1OGQ0M1x1ODEwZlx1ODQ2Y1x1OTA2ZFx1N2NkZlx1NTFmZlx1ODVmYlx1NjdhM1x1NjVlOVx1NmZhMVx1ODZhNFx1OGU4MVx1NTY2YVx1OTAyMFx1NzY4Mlx1NzA3Nlx1NzFl''@;'; put 'put ''NVx1OGQyM1x1NjJlOVx1NTIxOVx1NmNmZFx1OGQzY1x1NjAwZVx1NTg5ZVx1NjE4ZVx1NjZmZVx1OGQ2MFx1NjI0ZVx1NTViM1x1NmUyM1x1NjcyZFx1OGY2NyJdLFsiZDU0MCIsIlx1OGE4MSIsNywiXHU4YThiIiw3LCJcdThhOTQiLDQ2XSxbImQ1ODAiLCJcdThhYzMiLDMyLCJcdTk0ZTFc''@;'; put 'put ''dTk1ZjhcdTc3MjhcdTY4MDVcdTY5YThcdTU0OGJcdTRlNGRcdTcwYjhcdThiYzhcdTY0NThcdTY1OGJcdTViODVcdTdhODRcdTUwM2FcdTViZThcdTc3YmJcdTZiZTFcdThhNzlcdTdjOThcdTZjYmVcdTc2Y2ZcdTY1YTlcdThmOTdcdTVkMmRcdTVjNTVcdTg2MzhcdTY4MDhcdTUzNjBcdTYy''@;'; put 'put ''MThcdTdhZDlcdTZlNWJcdTdlZmRcdTZhMWZcdTdhZTBcdTVmNzBcdTZmMzNcdTVmMjBcdTYzOGNcdTZkYThcdTY3NTZcdTRlMDhcdTVlMTBcdThkMjZcdTRlZDdcdTgwYzBcdTc2MzRcdTk2OWNcdTYyZGJcdTY2MmRcdTYyN2VcdTZjYmNcdThkNzVcdTcxNjdcdTdmNjlcdTUxNDZcdTgwODdc''@;'; put 'put ''dTUzZWNcdTkwNmVcdTYyOThcdTU0ZjJcdTg2ZjBcdThmOTlcdTgwMDVcdTk1MTdcdTg1MTdcdThmZDlcdTZkNTlcdTczY2RcdTY1OWZcdTc3MWZcdTc1MDRcdTc4MjdcdTgxZmJcdThkMWVcdTk0ODhcdTRmYTZcdTY3OTVcdTc1YjlcdThiY2FcdTk3MDdcdTYzMmZcdTk1NDdcdTk2MzVcdTg0''@;'; put 'put ''YjhcdTYzMjNcdTc3NDFcdTVmODFcdTcyZjBcdTRlODlcdTYwMTRcdTY1NzRcdTYyZWZcdTZiNjNcdTY1M2YiXSxbImQ2NDAiLCJcdThhZTQiLDM0LCJcdThiMDgiLDI3XSxbImQ2ODAiLCJcdThiMjRcdThiMjVcdThiMjciLDMwLCJcdTVlMjdcdTc1YzdcdTkwZDFcdThiYzFcdTgyOWRcdTY3''@;'; put 'put ''OWRcdTY1MmZcdTU0MzFcdTg3MThcdTc3ZTVcdTgwYTJcdTgxMDJcdTZjNDFcdTRlNGJcdTdlYzdcdTgwNGNcdTc2ZjRcdTY5MGRcdTZiOTZcdTYyNjdcdTUwM2NcdTRmODRcdTU3NDBcdTYzMDdcdTZiNjJcdThkYmVcdTUzZWFcdTY1ZThcdTdlYjhcdTVmZDdcdTYzMWFcdTYzYjdcdTgxZjNc''@;'; put 'put ''dTgxZjRcdTdmNmVcdTVlMWNcdTVjZDlcdTUyMzZcdTY2N2FcdTc5ZTlcdTdhMWFcdThkMjhcdTcwOTlcdTc1ZDRcdTZlZGVcdTZjYmJcdTdhOTJcdTRlMmRcdTc2YzVcdTVmZTBcdTk0OWZcdTg4NzdcdTdlYzhcdTc5Y2RcdTgwYmZcdTkxY2RcdTRlZjJcdTRmMTdcdTgyMWZcdTU0NjhcdTVk''@;'; put 'put ''ZGVcdTZkMzJcdThiY2NcdTdjYTVcdThmNzRcdTgwOThcdTVlMWFcdTU0OTJcdTc2YjFcdTViOTlcdTY2M2NcdTlhYTRcdTczZTBcdTY4MmFcdTg2ZGJcdTY3MzFcdTczMmFcdThiZjhcdThiZGJcdTkwMTBcdTdhZjlcdTcwZGJcdTcxNmVcdTYyYzRcdTc3YTlcdTU2MzFcdTRlM2JcdTg0NTdc''@;'; put 'put ''dTY3ZjFcdTUyYTlcdTg2YzBcdThkMmVcdTk0ZjhcdTdiNTEiXSxbImQ3NDAiLCJcdThiNDYiLDMxLCJcdThiNjciLDQsIlx1OGI2ZCIsMjVdLFsiZDc4MCIsIlx1OGI4NyIsMjQsIlx1OGJhY1x1OGJiMVx1OGJiYlx1OGJjN1x1OGJkMFx1OGJlYVx1OGMwOVx1OGMxZVx1NGY0Zlx1NmNlOFx1''@;'; put 'put ''Nzk1ZFx1OWE3Ylx1NjI5M1x1NzIyYVx1NjJmZFx1NGUxM1x1NzgxNlx1OGY2Y1x1NjRiMFx1OGQ1YVx1N2JjNlx1Njg2OVx1NWU4NFx1ODhjNVx1NTk4Nlx1NjQ5ZVx1NThlZVx1NzJiNlx1NjkwZVx1OTUyNVx1OGZmZFx1OGQ1OFx1NTc2MFx1N2YwMFx1OGMwNlx1NTFjNlx1NjM0OVx1NjJk''@;'; put 'put ''OVx1NTM1M1x1Njg0Y1x1NzQyMlx1ODMwMVx1OTE0Y1x1NTU0NFx1Nzc0MFx1NzA3Y1x1NmQ0YVx1NTE3OVx1NTRhOFx1OGQ0NFx1NTlmZlx1NmVjYlx1NmRjNFx1NWI1Y1x1N2QyYlx1NGVkNFx1N2M3ZFx1NmVkM1x1NWI1MFx1ODFlYVx1NmUwZFx1NWI1N1x1OWIwM1x1NjhkNVx1OGUyYVx1''@;'; put 'put ''NWI5N1x1N2VmY1x1NjAzYlx1N2ViNVx1OTBiOVx1OGQ3MFx1NTk0Zlx1NjNjZFx1NzlkZlx1OGRiM1x1NTM1Mlx1NjVjZlx1Nzk1Nlx1OGJjNVx1OTYzYlx1N2VjNFx1OTRiYlx1N2U4Mlx1NTYzNFx1OTE4OVx1NjcwMFx1N2Y2YVx1NWMwYVx1OTA3NVx1NjYyOFx1NWRlNlx1NGY1MFx1Njdk''@;'; put 'put ''ZVx1NTA1YVx1NGY1Y1x1NTc1MFx1NWVhNyJdLFsiZDg0MCIsIlx1OGMzOCIsOCwiXHU4YzQyXHU4YzQzXHU4YzQ0XHU4YzQ1XHU4YzQ4XHU4YzRhXHU4YzRiXHU4YzRkIiw3LCJcdThjNTZcdThjNTdcdThjNThcdThjNTlcdThjNWIiLDUsIlx1OGM2MyIsNiwiXHU4YzZjIiw2LCJcdThjNzRc''@;'; put 'put ''dThjNzVcdThjNzZcdThjNzdcdThjN2IiLDYsIlx1OGM4M1x1OGM4NFx1OGM4Nlx1OGM4NyJdLFsiZDg4MCIsIlx1OGM4OFx1OGM4Ylx1OGM4ZCIsNiwiXHU4Yzk1XHU4Yzk2XHU4Yzk3XHU4Yzk5IiwyMCwiXHU0ZThkXHU0ZTBjXHU1MTQwXHU0ZTEwXHU1ZWZmXHU1MzQ1XHU0ZTE1XHU0ZTk4''@;'; put 'put ''XHU0ZTFlXHU5YjMyXHU1YjZjXHU1NjY5XHU0ZTI4XHU3OWJhXHU0ZTNmXHU1MzE1XHU0ZTQ3XHU1OTJkXHU3MjNiXHU1MzZlXHU2YzEwXHU1NmRmXHU4MGU0XHU5OTk3XHU2YmQzXHU3NzdlXHU5ZjE3XHU0ZTM2XHU0ZTlmXHU5ZjEwXHU0ZTVjXHU0ZTY5XHU0ZTkzXHU4Mjg4XHU1YjViXHU1''@;'; put 'put ''NTZjXHU1NjBmXHU0ZWM0XHU1MzhkXHU1MzlkXHU1M2EzXHU1M2E1XHU1M2FlXHU5NzY1XHU4ZDVkXHU1MzFhXHU1M2Y1XHU1MzI2XHU1MzJlXHU1MzNlXHU4ZDVjXHU1MzY2XHU1MzYzXHU1MjAyXHU1MjA4XHU1MjBlXHU1MjJkXHU1MjMzXHU1MjNmXHU1MjQwXHU1MjRjXHU1MjVlXHU1MjYx''@;'; put 'put ''XHU1MjVjXHU4NGFmXHU1MjdkXHU1MjgyXHU1MjgxXHU1MjkwXHU1MjkzXHU1MTgyXHU3ZjU0XHU0ZWJiXHU0ZWMzXHU0ZWM5XHU0ZWMyXHU0ZWU4XHU0ZWUxXHU0ZWViXHU0ZWRlXHU0ZjFiXHU0ZWYzXHU0ZjIyXHU0ZjY0XHU0ZWY1XHU0ZjI1XHU0ZjI3XHU0ZjA5XHU0ZjJiXHU0ZjVlXHU0''@;'; put 'put ''ZjY3XHU2NTM4XHU0ZjVhXHU0ZjVkIl0sWyJkOTQwIiwiXHU4Y2FlIiw2Ml0sWyJkOTgwIiwiXHU4Y2VkIiwzMiwiXHU0ZjVmXHU0ZjU3XHU0ZjMyXHU0ZjNkXHU0Zjc2XHU0Zjc0XHU0ZjkxXHU0Zjg5XHU0ZjgzXHU0ZjhmXHU0ZjdlXHU0ZjdiXHU0ZmFhXHU0ZjdjXHU0ZmFjXHU0Zjk0XHU0''@;'; put 'put ''ZmU2XHU0ZmU4XHU0ZmVhXHU0ZmM1XHU0ZmRhXHU0ZmUzXHU0ZmRjXHU0ZmQxXHU0ZmRmXHU0ZmY4XHU1MDI5XHU1MDRjXHU0ZmYzXHU1MDJjXHU1MDBmXHU1MDJlXHU1MDJkXHU0ZmZlXHU1MDFjXHU1MDBjXHU1MDI1XHU1MDI4XHU1MDdlXHU1MDQzXHU1MDU1XHU1MDQ4XHU1MDRlXHU1MDZj''@;'; put 'put ''XHU1MDdiXHU1MGE1XHU1MGE3XHU1MGE5XHU1MGJhXHU1MGQ2XHU1MTA2XHU1MGVkXHU1MGVjXHU1MGU2XHU1MGVlXHU1MTA3XHU1MTBiXHU0ZWRkXHU2YzNkXHU0ZjU4XHU0ZjY1XHU0ZmNlXHU5ZmEwXHU2YzQ2XHU3Yzc0XHU1MTZlXHU1ZGZkXHU5ZWM5XHU5OTk4XHU1MTgxXHU1OTE0XHU1''@;'; put 'put ''MmY5XHU1MzBkXHU4YTA3XHU1MzEwXHU1MWViXHU1OTE5XHU1MTU1XHU0ZWEwXHU1MTU2XHU0ZWIzXHU4ODZlXHU4OGE0XHU0ZWI1XHU4MTE0XHU4OGQyXHU3OTgwXHU1YjM0XHU4ODAzXHU3ZmI4XHU1MWFiXHU1MWIxXHU1MWJkXHU1MWJjIl0sWyJkYTQwIiwiXHU4ZDBlIiwxNCwiXHU4ZDIw''@;'; put 'put ''XHU4ZDUxXHU4ZDUyXHU4ZDU3XHU4ZDVmXHU4ZDY1XHU4ZDY4XHU4ZDY5XHU4ZDZhXHU4ZDZjXHU4ZDZlXHU4ZDZmXHU4ZDcxXHU4ZDcyXHU4ZDc4Iiw4LCJcdThkODJcdThkODNcdThkODZcdThkODdcdThkODhcdThkODlcdThkOGMiLDQsIlx1OGQ5Mlx1OGQ5M1x1OGQ5NSIsOSwiXHU4ZGEw''@;'; put 'put ''XHU4ZGExIl0sWyJkYTgwIiwiXHU4ZGEyXHU4ZGE0IiwxMiwiXHU4ZGIyXHU4ZGI2XHU4ZGI3XHU4ZGI5XHU4ZGJiXHU4ZGJkXHU4ZGMwXHU4ZGMxXHU4ZGMyXHU4ZGM1XHU4ZGM3XHU4ZGM4XHU4ZGM5XHU4ZGNhXHU4ZGNkXHU4ZGQwXHU4ZGQyXHU4ZGQzXHU4ZGQ0XHU1MWM3XHU1MTk2XHU1''@;'; put 'put ''MWEyXHU1MWE1XHU4YmEwXHU4YmE2XHU4YmE3XHU4YmFhXHU4YmI0XHU4YmI1XHU4YmI3XHU4YmMyXHU4YmMzXHU4YmNiXHU4YmNmXHU4YmNlXHU4YmQyXHU4YmQzXHU4YmQ0XHU4YmQ2XHU4YmQ4XHU4YmQ5XHU4YmRjXHU4YmRmXHU4YmUwXHU4YmU0XHU4YmU4XHU4YmU5XHU4YmVlXHU4YmYw''@;'; put 'put ''XHU4YmYzXHU4YmY2XHU4YmY5XHU4YmZjXHU4YmZmXHU4YzAwXHU4YzAyXHU4YzA0XHU4YzA3XHU4YzBjXHU4YzBmXHU4YzExXHU4YzEyXHU4YzE0XHU4YzE1XHU4YzE2XHU4YzE5XHU4YzFiXHU4YzE4XHU4YzFkXHU4YzFmXHU4YzIwXHU4YzIxXHU4YzI1XHU4YzI3XHU4YzJhXHU4YzJiXHU4''@;'; put 'put ''YzJlXHU4YzJmXHU4YzMyXHU4YzMzXHU4YzM1XHU4YzM2XHU1MzY5XHU1MzdhXHU5NjFkXHU5NjIyXHU5NjIxXHU5NjMxXHU5NjJhXHU5NjNkXHU5NjNjXHU5NjQyXHU5NjQ5XHU5NjU0XHU5NjVmXHU5NjY3XHU5NjZjXHU5NjcyXHU5Njc0XHU5Njg4XHU5NjhkXHU5Njk3XHU5NmIwXHU5MDk3''@;'; put 'put ''XHU5MDliXHU5MDlkXHU5MDk5XHU5MGFjXHU5MGExXHU5MGI0XHU5MGIzXHU5MGI2XHU5MGJhIl0sWyJkYjQwIiwiXHU4ZGQ1XHU4ZGQ4XHU4ZGQ5XHU4ZGRjXHU4ZGUwXHU4ZGUxXHU4ZGUyXHU4ZGU1XHU4ZGU2XHU4ZGU3XHU4ZGU5XHU4ZGVkXHU4ZGVlXHU4ZGYwXHU4ZGYxXHU4ZGYyXHU4''@;'; put 'put ''ZGY0XHU4ZGY2XHU4ZGZjXHU4ZGZlIiw2LCJcdThlMDZcdThlMDdcdThlMDhcdThlMGJcdThlMGRcdThlMGVcdThlMTBcdThlMTFcdThlMTJcdThlMTNcdThlMTUiLDcsIlx1OGUyMFx1OGUyMVx1OGUyNCIsNCwiXHU4ZTJiXHU4ZTJkXHU4ZTMwXHU4ZTMyXHU4ZTMzXHU4ZTM0XHU4ZTM2XHU4''@;'; put 'put ''ZTM3XHU4ZTM4XHU4ZTNiXHU4ZTNjXHU4ZTNlIl0sWyJkYjgwIiwiXHU4ZTNmXHU4ZTQzXHU4ZTQ1XHU4ZTQ2XHU4ZTRjIiw0LCJcdThlNTMiLDUsIlx1OGU1YSIsMTEsIlx1OGU2N1x1OGU2OFx1OGU2YVx1OGU2Ylx1OGU2ZVx1OGU3MVx1OTBiOFx1OTBiMFx1OTBjZlx1OTBjNVx1OTBiZVx1''@;'; put 'put ''OTBkMFx1OTBjNFx1OTBjN1x1OTBkM1x1OTBlNlx1OTBlMlx1OTBkY1x1OTBkN1x1OTBkYlx1OTBlYlx1OTBlZlx1OTBmZVx1OTEwNFx1OTEyMlx1OTExZVx1OTEyM1x1OTEzMVx1OTEyZlx1OTEzOVx1OTE0M1x1OTE0Nlx1NTIwZFx1NTk0Mlx1NTJhMlx1NTJhY1x1NTJhZFx1NTJiZVx1NTRm''@;'; put 'put ''Zlx1NTJkMFx1NTJkNlx1NTJmMFx1NTNkZlx1NzFlZVx1NzdjZFx1NWVmNFx1NTFmNVx1NTFmY1x1OWIyZlx1NTNiNlx1NWYwMVx1NzU1YVx1NWRlZlx1NTc0Y1x1NTdhOVx1NTdhMVx1NTg3ZVx1NThiY1x1NThjNVx1NThkMVx1NTcyOVx1NTcyY1x1NTcyYVx1NTczM1x1NTczOVx1NTcyZVx1''@;'; put 'put ''NTcyZlx1NTc1Y1x1NTczYlx1NTc0Mlx1NTc2OVx1NTc4NVx1NTc2Ylx1NTc4Nlx1NTc3Y1x1NTc3Ylx1NTc2OFx1NTc2ZFx1NTc3Nlx1NTc3M1x1NTdhZFx1NTdhNFx1NTc4Y1x1NTdiMlx1NTdjZlx1NTdhN1x1NTdiNFx1NTc5M1x1NTdhMFx1NTdkNVx1NTdkOFx1NTdkYVx1NTdkOVx1NTdk''@;'; put 'put ''Mlx1NTdiOFx1NTdmNFx1NTdlZlx1NTdmOFx1NTdlNFx1NTdkZCJdLFsiZGM0MCIsIlx1OGU3M1x1OGU3NVx1OGU3NyIsNCwiXHU4ZTdkXHU4ZTdlXHU4ZTgwXHU4ZTgyXHU4ZTgzXHU4ZTg0XHU4ZTg2XHU4ZTg4Iiw2LCJcdThlOTFcdThlOTJcdThlOTNcdThlOTUiLDYsIlx1OGU5ZFx1OGU5''@;'; put 'put ''ZiIsMTEsIlx1OGVhZFx1OGVhZVx1OGViMFx1OGViMVx1OGViMyIsNiwiXHU4ZWJiIiw3XSxbImRjODAiLCJcdThlYzMiLDEwLCJcdThlY2YiLDIxLCJcdTU4MGJcdTU4MGRcdTU3ZmRcdTU3ZWRcdTU4MDBcdTU4MWVcdTU4MTlcdTU4NDRcdTU4MjBcdTU4NjVcdTU4NmNcdTU4ODFcdTU4ODlc''@;'; put 'put ''dTU4OWFcdTU4ODBcdTk5YThcdTlmMTlcdTYxZmZcdTgyNzlcdTgyN2RcdTgyN2ZcdTgyOGZcdTgyOGFcdTgyYThcdTgyODRcdTgyOGVcdTgyOTFcdTgyOTdcdTgyOTlcdTgyYWJcdTgyYjhcdTgyYmVcdTgyYjBcdTgyYzhcdTgyY2FcdTgyZTNcdTgyOThcdTgyYjdcdTgyYWVcdTgyY2JcdTgy''@;'; put 'put ''Y2NcdTgyYzFcdTgyYTlcdTgyYjRcdTgyYTFcdTgyYWFcdTgyOWZcdTgyYzRcdTgyY2VcdTgyYTRcdTgyZTFcdTgzMDlcdTgyZjdcdTgyZTRcdTgzMGZcdTgzMDdcdTgyZGNcdTgyZjRcdTgyZDJcdTgyZDhcdTgzMGNcdTgyZmJcdTgyZDNcdTgzMTFcdTgzMWFcdTgzMDZcdTgzMTRcdTgzMTVc''@;'; put 'put ''dTgyZTBcdTgyZDVcdTgzMWNcdTgzNTFcdTgzNWJcdTgzNWNcdTgzMDhcdTgzOTJcdTgzM2NcdTgzMzRcdTgzMzFcdTgzOWJcdTgzNWVcdTgzMmZcdTgzNGZcdTgzNDdcdTgzNDNcdTgzNWZcdTgzNDBcdTgzMTdcdTgzNjBcdTgzMmRcdTgzM2FcdTgzMzNcdTgzNjZcdTgzNjUiXSxbImRkNDAi''@;'; put 'put ''LCJcdThlZTUiLDYyXSxbImRkODAiLCJcdThmMjQiLDMyLCJcdTgzNjhcdTgzMWJcdTgzNjlcdTgzNmNcdTgzNmFcdTgzNmRcdTgzNmVcdTgzYjBcdTgzNzhcdTgzYjNcdTgzYjRcdTgzYTBcdTgzYWFcdTgzOTNcdTgzOWNcdTgzODVcdTgzN2NcdTgzYjZcdTgzYTlcdTgzN2RcdTgzYjhcdTgz''@;'; put 'put ''N2JcdTgzOThcdTgzOWVcdTgzYThcdTgzYmFcdTgzYmNcdTgzYzFcdTg0MDFcdTgzZTVcdTgzZDhcdTU4MDdcdTg0MThcdTg0MGJcdTgzZGRcdTgzZmRcdTgzZDZcdTg0MWNcdTg0MzhcdTg0MTFcdTg0MDZcdTgzZDRcdTgzZGZcdTg0MGZcdTg0MDNcdTgzZjhcdTgzZjlcdTgzZWFcdTgzYzVc''@;'; put 'put ''dTgzYzBcdTg0MjZcdTgzZjBcdTgzZTFcdTg0NWNcdTg0NTFcdTg0NWFcdTg0NTlcdTg0NzNcdTg0ODdcdTg0ODhcdTg0N2FcdTg0ODlcdTg0NzhcdTg0M2NcdTg0NDZcdTg0NjlcdTg0NzZcdTg0OGNcdTg0OGVcdTg0MzFcdTg0NmRcdTg0YzFcdTg0Y2RcdTg0ZDBcdTg0ZTZcdTg0YmRcdTg0''@;'; put 'put ''ZDNcdTg0Y2FcdTg0YmZcdTg0YmFcdTg0ZTBcdTg0YTFcdTg0YjlcdTg0YjRcdTg0OTdcdTg0ZTVcdTg0ZTNcdTg1MGNcdTc1MGRcdTg1MzhcdTg0ZjBcdTg1MzlcdTg1MWZcdTg1M2EiXSxbImRlNDAiLCJcdThmNDUiLDMyLCJcdThmNmFcdThmODBcdThmOGNcdThmOTJcdThmOWRcdThmYTBc''@;'; put 'put ''dThmYTFcdThmYTJcdThmYTRcdThmYTVcdThmYTZcdThmYTdcdThmYWFcdThmYWNcdThmYWRcdThmYWVcdThmYWZcdThmYjJcdThmYjNcdThmYjRcdThmYjVcdThmYjdcdThmYjhcdThmYmFcdThmYmJcdThmYmNcdThmYmZcdThmYzBcdThmYzNcdThmYzYiXSxbImRlODAiLCJcdThmYzkiLDQs''@;'; put 'put ''Ilx1OGZjZlx1OGZkMlx1OGZkNlx1OGZkN1x1OGZkYVx1OGZlMFx1OGZlMVx1OGZlM1x1OGZlN1x1OGZlY1x1OGZlZlx1OGZmMVx1OGZmMlx1OGZmNFx1OGZmNVx1OGZmNlx1OGZmYVx1OGZmYlx1OGZmY1x1OGZmZVx1OGZmZlx1OTAwN1x1OTAwOFx1OTAwY1x1OTAwZVx1OTAxM1x1OTAxNVx1''@;'; put 'put ''OTAxOFx1ODU1Nlx1ODUzYlx1ODRmZlx1ODRmY1x1ODU1OVx1ODU0OFx1ODU2OFx1ODU2NFx1ODU1ZVx1ODU3YVx1NzdhMlx1ODU0M1x1ODU3Mlx1ODU3Ylx1ODVhNFx1ODVhOFx1ODU4N1x1ODU4Zlx1ODU3OVx1ODVhZVx1ODU5Y1x1ODU4NVx1ODViOVx1ODViN1x1ODViMFx1ODVkM1x1ODVj''@;'; put 'put ''MVx1ODVkY1x1ODVmZlx1ODYyN1x1ODYwNVx1ODYyOVx1ODYxNlx1ODYzY1x1NWVmZVx1NWYwOFx1NTkzY1x1NTk0MVx1ODAzN1x1NTk1NVx1NTk1YVx1NTk1OFx1NTMwZlx1NWMyMlx1NWMyNVx1NWMyY1x1NWMzNFx1NjI0Y1x1NjI2YVx1NjI5Zlx1NjJiYlx1NjJjYVx1NjJkYVx1NjJkN1x1''@;'; put 'put ''NjJlZVx1NjMyMlx1NjJmNlx1NjMzOVx1NjM0Ylx1NjM0M1x1NjNhZFx1NjNmNlx1NjM3MVx1NjM3YVx1NjM4ZVx1NjNiNFx1NjM2ZFx1NjNhY1x1NjM4YVx1NjM2OVx1NjNhZVx1NjNiY1x1NjNmMlx1NjNmOFx1NjNlMFx1NjNmZlx1NjNjNFx1NjNkZVx1NjNjZVx1NjQ1Mlx1NjNjNlx1NjNi''@;'; put 'put ''ZVx1NjQ0NVx1NjQ0MVx1NjQwYlx1NjQxYlx1NjQyMFx1NjQwY1x1NjQyNlx1NjQyMVx1NjQ1ZVx1NjQ4NFx1NjQ2ZFx1NjQ5NiJdLFsiZGY0MCIsIlx1OTAxOVx1OTAxY1x1OTAyM1x1OTAyNFx1OTAyNVx1OTAyNyIsNSwiXHU5MDMwIiw0LCJcdTkwMzdcdTkwMzlcdTkwM2FcdTkwM2RcdTkw''@;'; put 'put ''M2ZcdTkwNDBcdTkwNDNcdTkwNDVcdTkwNDZcdTkwNDgiLDQsIlx1OTA0ZVx1OTA1NFx1OTA1NVx1OTA1Nlx1OTA1OVx1OTA1YVx1OTA1YyIsNSwiXHU5MDY0XHU5MDY2XHU5MDY3XHU5MDY5XHU5MDZhXHU5MDZiXHU5MDZjXHU5MDZmIiw0LCJcdTkwNzYiLDYsIlx1OTA3ZVx1OTA4MSJdLFsi''@;'; put 'put ''ZGY4MCIsIlx1OTA4NFx1OTA4NVx1OTA4Nlx1OTA4N1x1OTA4OVx1OTA4YVx1OTA4YyIsNCwiXHU5MDkyXHU5MDk0XHU5MDk2XHU5MDk4XHU5MDlhXHU5MDljXHU5MDllXHU5MDlmXHU5MGEwXHU5MGE0XHU5MGE1XHU5MGE3XHU5MGE4XHU5MGE5XHU5MGFiXHU5MGFkXHU5MGIyXHU5MGI3XHU5''@;'; put 'put ''MGJjXHU5MGJkXHU5MGJmXHU5MGMwXHU2NDdhXHU2NGI3XHU2NGI4XHU2NDk5XHU2NGJhXHU2NGMwXHU2NGQwXHU2NGQ3XHU2NGU0XHU2NGUyXHU2NTA5XHU2NTI1XHU2NTJlXHU1ZjBiXHU1ZmQyXHU3NTE5XHU1ZjExXHU1MzVmXHU1M2YxXHU1M2ZkXHU1M2U5XHU1M2U4XHU1M2ZiXHU1NDEy''@;'; put 'put ''XHU1NDE2XHU1NDA2XHU1NDRiXHU1NDUyXHU1NDUzXHU1NDU0XHU1NDU2XHU1NDQzXHU1NDIxXHU1NDU3XHU1NDU5XHU1NDIzXHU1NDMyXHU1NDgyXHU1NDk0XHU1NDc3XHU1NDcxXHU1NDY0XHU1NDlhXHU1NDliXHU1NDg0XHU1NDc2XHU1NDY2XHU1NDlkXHU1NGQwXHU1NGFkXHU1NGMyXHU1''@;'; put 'put ''NGI0XHU1NGQyXHU1NGE3XHU1NGE2XHU1NGQzXHU1NGQ0XHU1NDcyXHU1NGEzXHU1NGQ1XHU1NGJiXHU1NGJmXHU1NGNjXHU1NGQ5XHU1NGRhXHU1NGRjXHU1NGE5XHU1NGFhXHU1NGE0XHU1NGRkXHU1NGNmXHU1NGRlXHU1NTFiXHU1NGU3XHU1NTIwXHU1NGZkXHU1NTE0XHU1NGYzXHU1NTIy''@;'; put 'put ''XHU1NTIzXHU1NTBmXHU1NTExXHU1NTI3XHU1NTJhXHU1NTY3XHU1NThmXHU1NWI1XHU1NTQ5XHU1NTZkXHU1NTQxXHU1NTU1XHU1NTNmXHU1NTUwXHU1NTNjIl0sWyJlMDQwIiwiXHU5MGMyXHU5MGMzXHU5MGM2XHU5MGM4XHU5MGM5XHU5MGNiXHU5MGNjXHU5MGNkXHU5MGQyXHU5MGQ0XHU5''@;'; put 'put ''MGQ1XHU5MGQ2XHU5MGQ4XHU5MGQ5XHU5MGRhXHU5MGRlXHU5MGRmXHU5MGUwXHU5MGUzXHU5MGU0XHU5MGU1XHU5MGU5XHU5MGVhXHU5MGVjXHU5MGVlXHU5MGYwXHU5MGYxXHU5MGYyXHU5MGYzXHU5MGY1XHU5MGY2XHU5MGY3XHU5MGY5XHU5MGZhXHU5MGZiXHU5MGZjXHU5MGZmXHU5MTAw''@;'; put 'put ''XHU5MTAxXHU5MTAzXHU5MTA1IiwxOSwiXHU5MTFhXHU5MTFiXHU5MTFjIl0sWyJlMDgwIiwiXHU5MTFkXHU5MTFmXHU5MTIwXHU5MTIxXHU5MTI0IiwxMCwiXHU5MTMwXHU5MTMyIiw2LCJcdTkxM2EiLDgsIlx1OTE0NFx1NTUzN1x1NTU1Nlx1NTU3NVx1NTU3Nlx1NTU3N1x1NTUzM1x1NTUz''@;'; put 'put ''MFx1NTU1Y1x1NTU4Ylx1NTVkMlx1NTU4M1x1NTViMVx1NTViOVx1NTU4OFx1NTU4MVx1NTU5Zlx1NTU3ZVx1NTVkNlx1NTU5MVx1NTU3Ylx1NTVkZlx1NTViZFx1NTViZVx1NTU5NFx1NTU5OVx1NTVlYVx1NTVmN1x1NTVjOVx1NTYxZlx1NTVkMVx1NTVlYlx1NTVlY1x1NTVkNFx1NTVlNlx1''@;'; put 'put ''NTVkZFx1NTVjNFx1NTVlZlx1NTVlNVx1NTVmMlx1NTVmM1x1NTVjY1x1NTVjZFx1NTVlOFx1NTVmNVx1NTVlNFx1OGY5NFx1NTYxZVx1NTYwOFx1NTYwY1x1NTYwMVx1NTYyNFx1NTYyM1x1NTVmZVx1NTYwMFx1NTYyN1x1NTYyZFx1NTY1OFx1NTYzOVx1NTY1N1x1NTYyY1x1NTY0ZFx1NTY2''@;'; put 'put ''Mlx1NTY1OVx1NTY1Y1x1NTY0Y1x1NTY1NFx1NTY4Nlx1NTY2NFx1NTY3MVx1NTY2Ylx1NTY3Ylx1NTY3Y1x1NTY4NVx1NTY5M1x1NTZhZlx1NTZkNFx1NTZkN1x1NTZkZFx1NTZlMVx1NTZmNVx1NTZlYlx1NTZmOVx1NTZmZlx1NTcwNFx1NTcwYVx1NTcwOVx1NTcxY1x1NWUwZlx1NWUxOVx1''@;'; put 'put ''NWUxNFx1NWUxMVx1NWUzMVx1NWUzYlx1NWUzYyJdLFsiZTE0MCIsIlx1OTE0NVx1OTE0N1x1OTE0OFx1OTE1MVx1OTE1M1x1OTE1NFx1OTE1NVx1OTE1Nlx1OTE1OFx1OTE1OVx1OTE1Ylx1OTE1Y1x1OTE1Zlx1OTE2MFx1OTE2Nlx1OTE2N1x1OTE2OFx1OTE2Ylx1OTE2ZFx1OTE3M1x1OTE3''@;'; put 'put ''YVx1OTE3Ylx1OTE3Y1x1OTE4MCIsNCwiXHU5MTg2XHU5MTg4XHU5MThhXHU5MThlXHU5MThmXHU5MTkzIiw2LCJcdTkxOWMiLDUsIlx1OTFhNCIsNSwiXHU5MWFiXHU5MWFjXHU5MWIwXHU5MWIxXHU5MWIyXHU5MWIzXHU5MWI2XHU5MWI3XHU5MWI4XHU5MWI5XHU5MWJiIl0sWyJlMTgwIiwi''@;'; put 'put ''XHU5MWJjIiwxMCwiXHU5MWM4XHU5MWNiXHU5MWQwXHU5MWQyIiw5LCJcdTkxZGQiLDgsIlx1NWUzN1x1NWU0NFx1NWU1NFx1NWU1Ylx1NWU1ZVx1NWU2MVx1NWM4Y1x1NWM3YVx1NWM4ZFx1NWM5MFx1NWM5Nlx1NWM4OFx1NWM5OFx1NWM5OVx1NWM5MVx1NWM5YVx1NWM5Y1x1NWNiNVx1NWNh''@;'; put 'put ''Mlx1NWNiZFx1NWNhY1x1NWNhYlx1NWNiMVx1NWNhM1x1NWNjMVx1NWNiN1x1NWNjNFx1NWNkMlx1NWNlNFx1NWNjYlx1NWNlNVx1NWQwMlx1NWQwM1x1NWQyN1x1NWQyNlx1NWQyZVx1NWQyNFx1NWQxZVx1NWQwNlx1NWQxYlx1NWQ1OFx1NWQzZVx1NWQzNFx1NWQzZFx1NWQ2Y1x1NWQ1Ylx1''@;'; put 'put ''NWQ2Zlx1NWQ1ZFx1NWQ2Ylx1NWQ0Ylx1NWQ0YVx1NWQ2OVx1NWQ3NFx1NWQ4Mlx1NWQ5OVx1NWQ5ZFx1OGM3M1x1NWRiN1x1NWRjNVx1NWY3M1x1NWY3N1x1NWY4Mlx1NWY4N1x1NWY4OVx1NWY4Y1x1NWY5NVx1NWY5OVx1NWY5Y1x1NWZhOFx1NWZhZFx1NWZiNVx1NWZiY1x1ODg2Mlx1NWY2''@;'; put 'put ''MVx1NzJhZFx1NzJiMFx1NzJiNFx1NzJiN1x1NzJiOFx1NzJjM1x1NzJjMVx1NzJjZVx1NzJjZFx1NzJkMlx1NzJlOFx1NzJlZlx1NzJlOVx1NzJmMlx1NzJmNFx1NzJmN1x1NzMwMVx1NzJmM1x1NzMwM1x1NzJmYSJdLFsiZTI0MCIsIlx1OTFlNiIsNjJdLFsiZTI4MCIsIlx1OTIyNSIsMzIs''@;'; put 'put ''Ilx1NzJmYlx1NzMxN1x1NzMxM1x1NzMyMVx1NzMwYVx1NzMxZVx1NzMxZFx1NzMxNVx1NzMyMlx1NzMzOVx1NzMyNVx1NzMyY1x1NzMzOFx1NzMzMVx1NzM1MFx1NzM0ZFx1NzM1N1x1NzM2MFx1NzM2Y1x1NzM2Zlx1NzM3ZVx1ODIxYlx1NTkyNVx1OThlN1x1NTkyNFx1NTkwMlx1OTk2M1x1''@;'; put 'put ''OTk2NyIsNSwiXHU5OTc0XHU5OTc3XHU5OTdkXHU5OTgwXHU5OTg0XHU5OTg3XHU5OThhXHU5OThkXHU5OTkwXHU5OTkxXHU5OTkzXHU5OTk0XHU5OTk1XHU1ZTgwXHU1ZTkxXHU1ZThiXHU1ZTk2XHU1ZWE1XHU1ZWEwXHU1ZWI5XHU1ZWI1XHU1ZWJlXHU1ZWIzXHU4ZDUzXHU1ZWQyXHU1ZWQx''@;'; put 'put ''XHU1ZWRiXHU1ZWU4XHU1ZWVhXHU4MWJhXHU1ZmM0XHU1ZmM5XHU1ZmQ2XHU1ZmNmXHU2MDAzXHU1ZmVlXHU2MDA0XHU1ZmUxXHU1ZmU0XHU1ZmZlXHU2MDA1XHU2MDA2XHU1ZmVhXHU1ZmVkXHU1ZmY4XHU2MDE5XHU2MDM1XHU2MDI2XHU2MDFiXHU2MDBmXHU2MDBkXHU2MDI5XHU2MDJiXHU2''@;'; put 'put ''MDBhXHU2MDNmXHU2MDIxXHU2MDc4XHU2MDc5XHU2MDdiXHU2MDdhXHU2MDQyIl0sWyJlMzQwIiwiXHU5MjQ2Iiw0NSwiXHU5Mjc1IiwxNl0sWyJlMzgwIiwiXHU5Mjg2Iiw3LCJcdTkyOGYiLDI0LCJcdTYwNmFcdTYwN2RcdTYwOTZcdTYwOWFcdTYwYWRcdTYwOWRcdTYwODNcdTYwOTJcdTYw''@;'; put 'put ''OGNcdTYwOWJcdTYwZWNcdTYwYmJcdTYwYjFcdTYwZGRcdTYwZDhcdTYwYzZcdTYwZGFcdTYwYjRcdTYxMjBcdTYxMjZcdTYxMTVcdTYxMjNcdTYwZjRcdTYxMDBcdTYxMGVcdTYxMmJcdTYxNGFcdTYxNzVcdTYxYWNcdTYxOTRcdTYxYTdcdTYxYjdcdTYxZDRcdTYxZjVcdTVmZGRcdTk2YjNc''@;'; put 'put ''dTk1ZTlcdTk1ZWJcdTk1ZjFcdTk1ZjNcdTk1ZjVcdTk1ZjZcdTk1ZmNcdTk1ZmVcdTk2MDNcdTk2MDRcdTk2MDZcdTk2MDhcdTk2MGFcdTk2MGJcdTk2MGNcdTk2MGRcdTk2MGZcdTk2MTJcdTk2MTVcdTk2MTZcdTk2MTdcdTk2MTlcdTk2MWFcdTRlMmNcdTcyM2ZcdTYyMTVcdTZjMzVcdTZj''@;'; put 'put ''NTRcdTZjNWNcdTZjNGFcdTZjYTNcdTZjODVcdTZjOTBcdTZjOTRcdTZjOGNcdTZjNjhcdTZjNjlcdTZjNzRcdTZjNzZcdTZjODZcdTZjYTlcdTZjZDBcdTZjZDRcdTZjYWRcdTZjZjdcdTZjZjhcdTZjZjFcdTZjZDdcdTZjYjJcdTZjZTBcdTZjZDZcdTZjZmFcdTZjZWJcdTZjZWVcdTZjYjFc''@;'; put 'put ''dTZjZDNcdTZjZWZcdTZjZmUiXSxbImU0NDAiLCJcdTkyYTgiLDUsIlx1OTJhZiIsMjQsIlx1OTJjOSIsMzFdLFsiZTQ4MCIsIlx1OTJlOSIsMzIsIlx1NmQzOVx1NmQyN1x1NmQwY1x1NmQ0M1x1NmQ0OFx1NmQwN1x1NmQwNFx1NmQxOVx1NmQwZVx1NmQyYlx1NmQ0ZFx1NmQyZVx1NmQzNVx1''@;'; put 'put ''NmQxYVx1NmQ0Zlx1NmQ1Mlx1NmQ1NFx1NmQzM1x1NmQ5MVx1NmQ2Zlx1NmQ5ZVx1NmRhMFx1NmQ1ZVx1NmQ5M1x1NmQ5NFx1NmQ1Y1x1NmQ2MFx1NmQ3Y1x1NmQ2M1x1NmUxYVx1NmRjN1x1NmRjNVx1NmRkZVx1NmUwZVx1NmRiZlx1NmRlMFx1NmUxMVx1NmRlNlx1NmRkZFx1NmRkOVx1NmUx''@;'; put 'put ''Nlx1NmRhYlx1NmUwY1x1NmRhZVx1NmUyYlx1NmU2ZVx1NmU0ZVx1NmU2Ylx1NmViMlx1NmU1Zlx1NmU4Nlx1NmU1M1x1NmU1NFx1NmUzMlx1NmUyNVx1NmU0NFx1NmVkZlx1NmViMVx1NmU5OFx1NmVlMFx1NmYyZFx1NmVlMlx1NmVhNVx1NmVhN1x1NmViZFx1NmViYlx1NmViN1x1NmVkN1x1''@;'; put 'put ''NmViNFx1NmVjZlx1NmU4Zlx1NmVjMlx1NmU5Zlx1NmY2Mlx1NmY0Nlx1NmY0N1x1NmYyNFx1NmYxNVx1NmVmOVx1NmYyZlx1NmYzNlx1NmY0Ylx1NmY3NFx1NmYyYVx1NmYwOVx1NmYyOVx1NmY4OVx1NmY4ZFx1NmY4Y1x1NmY3OFx1NmY3Mlx1NmY3Y1x1NmY3YVx1NmZkMSJdLFsiZTU0MCIs''@;'; put 'put ''Ilx1OTMwYSIsNTEsIlx1OTMzZiIsMTBdLFsiZTU4MCIsIlx1OTM0YSIsMzEsIlx1OTM2Ylx1NmZjOVx1NmZhN1x1NmZiOVx1NmZiNlx1NmZjMlx1NmZlMVx1NmZlZVx1NmZkZVx1NmZlMFx1NmZlZlx1NzAxYVx1NzAyM1x1NzAxYlx1NzAzOVx1NzAzNVx1NzA0Zlx1NzA1ZVx1NWI4MFx1NWI4''@;'; put 'put ''NFx1NWI5NVx1NWI5M1x1NWJhNVx1NWJiOFx1NzUyZlx1OWE5ZVx1NjQzNFx1NWJlNFx1NWJlZVx1ODkzMFx1NWJmMFx1OGU0N1x1OGIwN1x1OGZiNlx1OGZkM1x1OGZkNVx1OGZlNVx1OGZlZVx1OGZlNFx1OGZlOVx1OGZlNlx1OGZmM1x1OGZlOFx1OTAwNVx1OTAwNFx1OTAwYlx1OTAyNlx1''@;'; put 'put ''OTAxMVx1OTAwZFx1OTAxNlx1OTAyMVx1OTAzNVx1OTAzNlx1OTAyZFx1OTAyZlx1OTA0NFx1OTA1MVx1OTA1Mlx1OTA1MFx1OTA2OFx1OTA1OFx1OTA2Mlx1OTA1Ylx1NjZiOVx1OTA3NFx1OTA3ZFx1OTA4Mlx1OTA4OFx1OTA4M1x1OTA4Ylx1NWY1MFx1NWY1N1x1NWY1Nlx1NWY1OFx1NWMz''@;'; put 'put ''Ylx1NTRhYlx1NWM1MFx1NWM1OVx1NWI3MVx1NWM2M1x1NWM2Nlx1N2ZiY1x1NWYyYVx1NWYyOVx1NWYyZFx1ODI3NFx1NWYzY1x1OWIzYlx1NWM2ZVx1NTk4MVx1NTk4M1x1NTk4ZFx1NTlhOVx1NTlhYVx1NTlhMyJdLFsiZTY0MCIsIlx1OTM2YyIsMzQsIlx1OTM5MCIsMjddLFsiZTY4MCIs''@;'; put 'put ''Ilx1OTNhYyIsMjksIlx1OTNjYlx1OTNjY1x1OTNjZFx1NTk5N1x1NTljYVx1NTlhYlx1NTk5ZVx1NTlhNFx1NTlkMlx1NTliMlx1NTlhZlx1NTlkN1x1NTliZVx1NWEwNVx1NWEwNlx1NTlkZFx1NWEwOFx1NTllM1x1NTlkOFx1NTlmOVx1NWEwY1x1NWEwOVx1NWEzMlx1NWEzNFx1NWExMVx1''@;'; put 'put ''NWEyM1x1NWExM1x1NWE0MFx1NWE2N1x1NWE0YVx1NWE1NVx1NWEzY1x1NWE2Mlx1NWE3NVx1ODBlY1x1NWFhYVx1NWE5Ylx1NWE3N1x1NWE3YVx1NWFiZVx1NWFlYlx1NWFiMlx1NWFkMlx1NWFkNFx1NWFiOFx1NWFlMFx1NWFlM1x1NWFmMVx1NWFkNlx1NWFlNlx1NWFkOFx1NWFkY1x1NWIw''@;'; put 'put ''OVx1NWIxN1x1NWIxNlx1NWIzMlx1NWIzN1x1NWI0MFx1NWMxNVx1NWMxY1x1NWI1YVx1NWI2NVx1NWI3M1x1NWI1MVx1NWI1M1x1NWI2Mlx1OWE3NVx1OWE3N1x1OWE3OFx1OWE3YVx1OWE3Zlx1OWE3ZFx1OWE4MFx1OWE4MVx1OWE4NVx1OWE4OFx1OWE4YVx1OWE5MFx1OWE5Mlx1OWE5M1x1''@;'; put 'put ''OWE5Nlx1OWE5OFx1OWE5Ylx1OWE5Y1x1OWE5ZFx1OWE5Zlx1OWFhMFx1OWFhMlx1OWFhM1x1OWFhNVx1OWFhN1x1N2U5Zlx1N2VhMVx1N2VhM1x1N2VhNVx1N2VhOFx1N2VhOSJdLFsiZTc0MCIsIlx1OTNjZSIsNywiXHU5M2Q3Iiw1NF0sWyJlNzgwIiwiXHU5NDBlIiwzMiwiXHU3ZWFkXHU3''@;'; put 'put ''ZWIwXHU3ZWJlXHU3ZWMwXHU3ZWMxXHU3ZWMyXHU3ZWM5XHU3ZWNiXHU3ZWNjXHU3ZWQwXHU3ZWQ0XHU3ZWQ3XHU3ZWRiXHU3ZWUwXHU3ZWUxXHU3ZWU4XHU3ZWViXHU3ZWVlXHU3ZWVmXHU3ZWYxXHU3ZWYyXHU3ZjBkXHU3ZWY2XHU3ZWZhXHU3ZWZiXHU3ZWZlXHU3ZjAxXHU3ZjAyXHU3ZjAz''@;'; put 'put ''XHU3ZjA3XHU3ZjA4XHU3ZjBiXHU3ZjBjXHU3ZjBmXHU3ZjExXHU3ZjEyXHU3ZjE3XHU3ZjE5XHU3ZjFjXHU3ZjFiXHU3ZjFmXHU3ZjIxIiw2LCJcdTdmMmFcdTdmMmJcdTdmMmNcdTdmMmRcdTdmMmYiLDQsIlx1N2YzNVx1NWU3YVx1NzU3Zlx1NWRkYlx1NzUzZVx1OTA5NVx1NzM4ZVx1NzM5''@;'; put 'put ''MVx1NzNhZVx1NzNhMlx1NzM5Zlx1NzNjZlx1NzNjMlx1NzNkMVx1NzNiN1x1NzNiM1x1NzNjMFx1NzNjOVx1NzNjOFx1NzNlNVx1NzNkOVx1OTg3Y1x1NzQwYVx1NzNlOVx1NzNlN1x1NzNkZVx1NzNiYVx1NzNmMlx1NzQwZlx1NzQyYVx1NzQ1Ylx1NzQyNlx1NzQyNVx1NzQyOFx1NzQzMFx1''@;'; put 'put ''NzQyZVx1NzQyYyJdLFsiZTg0MCIsIlx1OTQyZiIsMTQsIlx1OTQzZiIsNDMsIlx1OTQ2Y1x1OTQ2ZFx1OTQ2ZVx1OTQ2ZiJdLFsiZTg4MCIsIlx1OTQ3MCIsMjAsIlx1OTQ5MVx1OTQ5Nlx1OTQ5OFx1OTRjN1x1OTRjZlx1OTRkM1x1OTRkNFx1OTRkYVx1OTRlNlx1OTRmYlx1OTUxY1x1OTUy''@;'; put 'put ''MFx1NzQxYlx1NzQxYVx1NzQ0MVx1NzQ1Y1x1NzQ1N1x1NzQ1NVx1NzQ1OVx1NzQ3N1x1NzQ2ZFx1NzQ3ZVx1NzQ5Y1x1NzQ4ZVx1NzQ4MFx1NzQ4MVx1NzQ4N1x1NzQ4Ylx1NzQ5ZVx1NzRhOFx1NzRhOVx1NzQ5MFx1NzRhN1x1NzRkMlx1NzRiYVx1OTdlYVx1OTdlYlx1OTdlY1x1Njc0Y1x1''@;'; put 'put ''Njc1M1x1Njc1ZVx1Njc0OFx1Njc2OVx1NjdhNVx1Njc4N1x1Njc2YVx1Njc3M1x1Njc5OFx1NjdhN1x1Njc3NVx1NjdhOFx1Njc5ZVx1NjdhZFx1Njc4Ylx1Njc3N1x1Njc3Y1x1NjdmMFx1NjgwOVx1NjdkOFx1NjgwYVx1NjdlOVx1NjdiMFx1NjgwY1x1NjdkOVx1NjdiNVx1NjdkYVx1Njdi''@;'; put 'put ''M1x1NjdkZFx1NjgwMFx1NjdjM1x1NjdiOFx1NjdlMlx1NjgwZVx1NjdjMVx1NjdmZFx1NjgzMlx1NjgzM1x1Njg2MFx1Njg2MVx1Njg0ZVx1Njg2Mlx1Njg0NFx1Njg2NFx1Njg4M1x1NjgxZFx1Njg1NVx1Njg2Nlx1Njg0MVx1Njg2N1x1Njg0MFx1NjgzZVx1Njg0YVx1Njg0OVx1NjgyOVx1''@;'; put 'put ''NjhiNVx1Njg4Zlx1Njg3NFx1Njg3N1x1Njg5M1x1Njg2Ylx1NjhjMlx1Njk2ZVx1NjhmY1x1NjkxZlx1NjkyMFx1NjhmOSJdLFsiZTk0MCIsIlx1OTUyN1x1OTUzM1x1OTUzZFx1OTU0M1x1OTU0OFx1OTU0Ylx1OTU1NVx1OTU1YVx1OTU2MFx1OTU2ZVx1OTU3NFx1OTU3NVx1OTU3NyIsNywi''@;'; put 'put ''XHU5NTgwIiw0Ml0sWyJlOTgwIiwiXHU5NWFiIiwzMiwiXHU2OTI0XHU2OGYwXHU2OTBiXHU2OTAxXHU2OTU3XHU2OGUzXHU2OTEwXHU2OTcxXHU2OTM5XHU2OTYwXHU2OTQyXHU2OTVkXHU2OTg0XHU2OTZiXHU2OTgwXHU2OTk4XHU2OTc4XHU2OTM0XHU2OWNjXHU2OTg3XHU2OTg4XHU2OWNl''@;'; put 'put ''XHU2OTg5XHU2OTY2XHU2OTYzXHU2OTc5XHU2OTliXHU2OWE3XHU2OWJiXHU2OWFiXHU2OWFkXHU2OWQ0XHU2OWIxXHU2OWMxXHU2OWNhXHU2OWRmXHU2OTk1XHU2OWUwXHU2OThkXHU2OWZmXHU2YTJmXHU2OWVkXHU2YTE3XHU2YTE4XHU2YTY1XHU2OWYyXHU2YTQ0XHU2YTNlXHU2YWEwXHU2''@;'; put 'put ''YTUwXHU2YTViXHU2YTM1XHU2YThlXHU2YTc5XHU2YTNkXHU2YTI4XHU2YTU4XHU2YTdjXHU2YTkxXHU2YTkwXHU2YWE5XHU2YTk3XHU2YWFiXHU3MzM3XHU3MzUyXHU2YjgxXHU2YjgyXHU2Yjg3XHU2Yjg0XHU2YjkyXHU2YjkzXHU2YjhkXHU2YjlhXHU2YjliXHU2YmExXHU2YmFhXHU4ZjZi''@;'; put 'put ''XHU4ZjZkXHU4ZjcxXHU4ZjcyXHU4ZjczXHU4Zjc1XHU4Zjc2XHU4Zjc4XHU4Zjc3XHU4Zjc5XHU4ZjdhXHU4ZjdjXHU4ZjdlXHU4ZjgxXHU4ZjgyXHU4Zjg0XHU4Zjg3XHU4ZjhiIl0sWyJlYTQwIiwiXHU5NWNjIiwyNywiXHU5NWVjXHU5NWZmXHU5NjA3XHU5NjEzXHU5NjE4XHU5NjFiXHU5''@;'; put 'put ''NjFlXHU5NjIwXHU5NjIzIiw2LCJcdTk2MmJcdTk2MmNcdTk2MmRcdTk2MmZcdTk2MzBcdTk2MzdcdTk2MzhcdTk2MzlcdTk2M2FcdTk2M2VcdTk2NDFcdTk2NDNcdTk2NGFcdTk2NGVcdTk2NGZcdTk2NTFcdTk2NTJcdTk2NTNcdTk2NTZcdTk2NTciXSxbImVhODAiLCJcdTk2NThcdTk2NTlc''@;'; put 'put ''dTk2NWFcdTk2NWNcdTk2NWRcdTk2NWVcdTk2NjBcdTk2NjNcdTk2NjVcdTk2NjZcdTk2NmJcdTk2NmQiLDQsIlx1OTY3M1x1OTY3OCIsMTIsIlx1OTY4N1x1OTY4OVx1OTY4YVx1OGY4ZFx1OGY4ZVx1OGY4Zlx1OGY5OFx1OGY5YVx1OGVjZVx1NjIwYlx1NjIxN1x1NjIxYlx1NjIxZlx1NjIy''@;'; put 'put ''Mlx1NjIyMVx1NjIyNVx1NjIyNFx1NjIyY1x1ODFlN1x1NzRlZlx1NzRmNFx1NzRmZlx1NzUwZlx1NzUxMVx1NzUxM1x1NjUzNFx1NjVlZVx1NjVlZlx1NjVmMFx1NjYwYVx1NjYxOVx1Njc3Mlx1NjYwM1x1NjYxNVx1NjYwMFx1NzA4NVx1NjZmN1x1NjYxZFx1NjYzNFx1NjYzMVx1NjYzNlx1''@;'; put 'put ''NjYzNVx1ODAwNlx1NjY1Zlx1NjY1NFx1NjY0MVx1NjY0Zlx1NjY1Nlx1NjY2MVx1NjY1N1x1NjY3N1x1NjY4NFx1NjY4Y1x1NjZhN1x1NjY5ZFx1NjZiZVx1NjZkYlx1NjZkY1x1NjZlNlx1NjZlOVx1OGQzMlx1OGQzM1x1OGQzNlx1OGQzYlx1OGQzZFx1OGQ0MFx1OGQ0NVx1OGQ0Nlx1OGQ0''@;'; put 'put ''OFx1OGQ0OVx1OGQ0N1x1OGQ0ZFx1OGQ1NVx1OGQ1OVx1ODljN1x1ODljYVx1ODljYlx1ODljY1x1ODljZVx1ODljZlx1ODlkMFx1ODlkMVx1NzI2ZVx1NzI5Zlx1NzI1ZFx1NzI2Nlx1NzI2Zlx1NzI3ZVx1NzI3Zlx1NzI4NFx1NzI4Ylx1NzI4ZFx1NzI4Zlx1NzI5Mlx1NjMwOFx1NjMzMlx1''@;'; put 'put ''NjNiMCJdLFsiZWI0MCIsIlx1OTY4Y1x1OTY4ZVx1OTY5MVx1OTY5Mlx1OTY5M1x1OTY5NVx1OTY5Nlx1OTY5YVx1OTY5Ylx1OTY5ZCIsOSwiXHU5NmE4Iiw3LCJcdTk2YjFcdTk2YjJcdTk2YjRcdTk2YjVcdTk2YjdcdTk2YjhcdTk2YmFcdTk2YmJcdTk2YmZcdTk2YzJcdTk2YzNcdTk2Yzhc''@;'; put 'put ''dTk2Y2FcdTk2Y2JcdTk2ZDBcdTk2ZDFcdTk2ZDNcdTk2ZDRcdTk2ZDYiLDksIlx1OTZlMSIsNiwiXHU5NmViIl0sWyJlYjgwIiwiXHU5NmVjXHU5NmVkXHU5NmVlXHU5NmYwXHU5NmYxXHU5NmYyXHU5NmY0XHU5NmY1XHU5NmY4XHU5NmZhXHU5NmZiXHU5NmZjXHU5NmZkXHU5NmZmXHU5NzAy''@;'; put 'put ''XHU5NzAzXHU5NzA1XHU5NzBhXHU5NzBiXHU5NzBjXHU5NzEwXHU5NzExXHU5NzEyXHU5NzE0XHU5NzE1XHU5NzE3Iiw0LCJcdTk3MWRcdTk3MWZcdTk3MjBcdTY0M2ZcdTY0ZDhcdTgwMDRcdTZiZWFcdTZiZjNcdTZiZmRcdTZiZjVcdTZiZjlcdTZjMDVcdTZjMDdcdTZjMDZcdTZjMGRcdTZj''@;'; put 'put ''MTVcdTZjMThcdTZjMTlcdTZjMWFcdTZjMjFcdTZjMjlcdTZjMjRcdTZjMmFcdTZjMzJcdTY1MzVcdTY1NTVcdTY1NmJcdTcyNGRcdTcyNTJcdTcyNTZcdTcyMzBcdTg2NjJcdTUyMTZcdTgwOWZcdTgwOWNcdTgwOTNcdTgwYmNcdTY3MGFcdTgwYmRcdTgwYjFcdTgwYWJcdTgwYWRcdTgwYjRc''@;'; put 'put ''dTgwYjdcdTgwZTdcdTgwZThcdTgwZTlcdTgwZWFcdTgwZGJcdTgwYzJcdTgwYzRcdTgwZDlcdTgwY2RcdTgwZDdcdTY3MTBcdTgwZGRcdTgwZWJcdTgwZjFcdTgwZjRcdTgwZWRcdTgxMGRcdTgxMGVcdTgwZjJcdTgwZmNcdTY3MTVcdTgxMTJcdThjNWFcdTgxMzZcdTgxMWVcdTgxMmNcdTgx''@;'; put 'put ''MThcdTgxMzJcdTgxNDhcdTgxNGNcdTgxNTNcdTgxNzRcdTgxNTlcdTgxNWFcdTgxNzFcdTgxNjBcdTgxNjlcdTgxN2NcdTgxN2RcdTgxNmRcdTgxNjdcdTU4NGRcdTVhYjVcdTgxODhcdTgxODJcdTgxOTFcdTZlZDVcdTgxYTNcdTgxYWFcdTgxY2NcdTY3MjZcdTgxY2FcdTgxYmIiXSxbImVj''@;'; put 'put ''NDAiLCJcdTk3MjEiLDgsIlx1OTcyYlx1OTcyY1x1OTcyZVx1OTcyZlx1OTczMVx1OTczMyIsNCwiXHU5NzNhXHU5NzNiXHU5NzNjXHU5NzNkXHU5NzNmIiwxOCwiXHU5NzU0XHU5NzU1XHU5NzU3XHU5NzU4XHU5NzVhXHU5NzVjXHU5NzVkXHU5NzVmXHU5NzYzXHU5NzY0XHU5NzY2XHU5NzY3''@;'; put 'put ''XHU5NzY4XHU5NzZhIiw3XSxbImVjODAiLCJcdTk3NzJcdTk3NzVcdTk3NzciLDQsIlx1OTc3ZCIsNywiXHU5Nzg2Iiw0LCJcdTk3OGNcdTk3OGVcdTk3OGZcdTk3OTBcdTk3OTNcdTk3OTVcdTk3OTZcdTk3OTdcdTk3OTkiLDQsIlx1ODFjMVx1ODFhNlx1NmIyNFx1NmIzN1x1NmIzOVx1NmI0''@;'; put 'put ''M1x1NmI0Nlx1NmI1OVx1OThkMVx1OThkMlx1OThkM1x1OThkNVx1OThkOVx1OThkYVx1NmJiM1x1NWY0MFx1NmJjMlx1ODlmM1x1NjU5MFx1OWY1MVx1NjU5M1x1NjViY1x1NjVjNlx1NjVjNFx1NjVjM1x1NjVjY1x1NjVjZVx1NjVkMlx1NjVkNlx1NzA4MFx1NzA5Y1x1NzA5Nlx1NzA5ZFx1''@;'; put 'put ''NzBiYlx1NzBjMFx1NzBiN1x1NzBhYlx1NzBiMVx1NzBlOFx1NzBjYVx1NzExMFx1NzExM1x1NzExNlx1NzEyZlx1NzEzMVx1NzE3M1x1NzE1Y1x1NzE2OFx1NzE0NVx1NzE3Mlx1NzE0YVx1NzE3OFx1NzE3YVx1NzE5OFx1NzFiM1x1NzFiNVx1NzFhOFx1NzFhMFx1NzFlMFx1NzFkNFx1NzFl''@;'; put 'put ''N1x1NzFmOVx1NzIxZFx1NzIyOFx1NzA2Y1x1NzExOFx1NzE2Nlx1NzFiOVx1NjIzZVx1NjIzZFx1NjI0M1x1NjI0OFx1NjI0OVx1NzkzYlx1Nzk0MFx1Nzk0Nlx1Nzk0OVx1Nzk1Ylx1Nzk1Y1x1Nzk1M1x1Nzk1YVx1Nzk2Mlx1Nzk1N1x1Nzk2MFx1Nzk2Zlx1Nzk2N1x1Nzk3YVx1Nzk4NVx1''@;'; put 'put ''Nzk4YVx1Nzk5YVx1NzlhN1x1NzliM1x1NWZkMVx1NWZkMCJdLFsiZWQ0MCIsIlx1OTc5ZVx1OTc5Zlx1OTdhMVx1OTdhMlx1OTdhNCIsNiwiXHU5N2FjXHU5N2FlXHU5N2IwXHU5N2IxXHU5N2IzXHU5N2I1Iiw0Nl0sWyJlZDgwIiwiXHU5N2U0XHU5N2U1XHU5N2U4XHU5N2VlIiw0LCJcdTk3''@;'; put 'put ''ZjRcdTk3ZjciLDIzLCJcdTYwM2NcdTYwNWRcdTYwNWFcdTYwNjdcdTYwNDFcdTYwNTlcdTYwNjNcdTYwYWJcdTYxMDZcdTYxMGRcdTYxNWRcdTYxYTlcdTYxOWRcdTYxY2JcdTYxZDFcdTYyMDZcdTgwODBcdTgwN2ZcdTZjOTNcdTZjZjZcdTZkZmNcdTc3ZjZcdTc3ZjhcdTc4MDBcdTc4MDlc''@;'; put 'put ''dTc4MTdcdTc4MThcdTc4MTFcdTY1YWJcdTc4MmRcdTc4MWNcdTc4MWRcdTc4MzlcdTc4M2FcdTc4M2JcdTc4MWZcdTc4M2NcdTc4MjVcdTc4MmNcdTc4MjNcdTc4MjlcdTc4NGVcdTc4NmRcdTc4NTZcdTc4NTdcdTc4MjZcdTc4NTBcdTc4NDdcdTc4NGNcdTc4NmFcdTc4OWJcdTc4OTNcdTc4''@;'; put 'put ''OWFcdTc4ODdcdTc4OWNcdTc4YTFcdTc4YTNcdTc4YjJcdTc4YjlcdTc4YTVcdTc4ZDRcdTc4ZDlcdTc4YzlcdTc4ZWNcdTc4ZjJcdTc5MDVcdTc4ZjRcdTc5MTNcdTc5MjRcdTc5MWVcdTc5MzRcdTlmOWJcdTllZjlcdTllZmJcdTllZmNcdTc2ZjFcdTc3MDRcdTc3MGRcdTc2ZjlcdTc3MDdc''@;'; put 'put ''dTc3MDhcdTc3MWFcdTc3MjJcdTc3MTlcdTc3MmRcdTc3MjZcdTc3MzVcdTc3MzhcdTc3NTBcdTc3NTFcdTc3NDdcdTc3NDNcdTc3NWFcdTc3NjgiXSxbImVlNDAiLCJcdTk4MGYiLDYyXSxbImVlODAiLCJcdTk4NGUiLDMyLCJcdTc3NjJcdTc3NjVcdTc3N2ZcdTc3OGRcdTc3N2RcdTc3ODBc''@;'; put 'put ''dTc3OGNcdTc3OTFcdTc3OWZcdTc3YTBcdTc3YjBcdTc3YjVcdTc3YmRcdTc1M2FcdTc1NDBcdTc1NGVcdTc1NGJcdTc1NDhcdTc1NWJcdTc1NzJcdTc1NzlcdTc1ODNcdTdmNThcdTdmNjFcdTdmNWZcdThhNDhcdTdmNjhcdTdmNzRcdTdmNzFcdTdmNzlcdTdmODFcdTdmN2VcdTc2Y2RcdTc2''@;'; put 'put ''ZTVcdTg4MzJcdTk0ODVcdTk0ODZcdTk0ODdcdTk0OGJcdTk0OGFcdTk0OGNcdTk0OGRcdTk0OGZcdTk0OTBcdTk0OTRcdTk0OTdcdTk0OTVcdTk0OWFcdTk0OWJcdTk0OWNcdTk0YTNcdTk0YTRcdTk0YWJcdTk0YWFcdTk0YWRcdTk0YWNcdTk0YWZcdTk0YjBcdTk0YjJcdTk0YjRcdTk0YjYi''@;'; put 'put ''LDQsIlx1OTRiY1x1OTRiZFx1OTRiZlx1OTRjNFx1OTRjOCIsNiwiXHU5NGQwXHU5NGQxXHU5NGQyXHU5NGQ1XHU5NGQ2XHU5NGQ3XHU5NGQ5XHU5NGQ4XHU5NGRiXHU5NGRlXHU5NGRmXHU5NGUwXHU5NGUyXHU5NGU0XHU5NGU1XHU5NGU3XHU5NGU4XHU5NGVhIl0sWyJlZjQwIiwiXHU5ODZm''@;'; put 'put ''Iiw1LCJcdTk4OGJcdTk4OGVcdTk4OTJcdTk4OTVcdTk4OTlcdTk4YTNcdTk4YTgiLDM3LCJcdTk4Y2ZcdTk4ZDBcdTk4ZDRcdTk4ZDZcdTk4ZDdcdTk4ZGJcdTk4ZGNcdTk4ZGRcdTk4ZTAiLDRdLFsiZWY4MCIsIlx1OThlNVx1OThlNlx1OThlOSIsMzAsIlx1OTRlOVx1OTRlYlx1OTRlZVx1''@;'; put 'put ''OTRlZlx1OTRmM1x1OTRmNFx1OTRmNVx1OTRmN1x1OTRmOVx1OTRmY1x1OTRmZFx1OTRmZlx1OTUwM1x1OTUwMlx1OTUwNlx1OTUwN1x1OTUwOVx1OTUwYVx1OTUwZFx1OTUwZVx1OTUwZlx1OTUxMiIsNCwiXHU5NTE4XHU5NTFiXHU5NTFkXHU5NTFlXHU5NTFmXHU5NTIyXHU5NTJhXHU5NTJi''@;'; put 'put ''XHU5NTI5XHU5NTJjXHU5NTMxXHU5NTMyXHU5NTM0XHU5NTM2XHU5NTM3XHU5NTM4XHU5NTNjXHU5NTNlXHU5NTNmXHU5NTQyXHU5NTM1XHU5NTQ0XHU5NTQ1XHU5NTQ2XHU5NTQ5XHU5NTRjXHU5NTRlXHU5NTRmXHU5NTUyXHU5NTUzXHU5NTU0XHU5NTU2XHU5NTU3XHU5NTU4XHU5NTU5XHU5''@;'; put 'put ''NTViXHU5NTVlXHU5NTVmXHU5NTVkXHU5NTYxXHU5NTYyXHU5NTY0Iiw4LCJcdTk1NmZcdTk1NzFcdTk1NzJcdTk1NzNcdTk1M2FcdTc3ZTdcdTc3ZWNcdTk2YzlcdTc5ZDVcdTc5ZWRcdTc5ZTNcdTc5ZWJcdTdhMDZcdTVkNDdcdTdhMDNcdTdhMDJcdTdhMWVcdTdhMTQiXSxbImYwNDAiLCJc''@;'; put 'put ''dTk5MDgiLDQsIlx1OTkwZVx1OTkwZlx1OTkxMSIsMjgsIlx1OTkyZiIsMjZdLFsiZjA4MCIsIlx1OTk0YSIsOSwiXHU5OTU2IiwxMiwiXHU5OTY0XHU5OTY2XHU5OTczXHU5OTc4XHU5OTc5XHU5OTdiXHU5OTdlXHU5OTgyXHU5OTgzXHU5OTg5XHU3YTM5XHU3YTM3XHU3YTUxXHU5ZWNmXHU5''@;'; put 'put ''OWE1XHU3YTcwXHU3Njg4XHU3NjhlXHU3NjkzXHU3Njk5XHU3NmE0XHU3NGRlXHU3NGUwXHU3NTJjXHU5ZTIwXHU5ZTIyXHU5ZTI4Iiw0LCJcdTllMzJcdTllMzFcdTllMzZcdTllMzhcdTllMzdcdTllMzlcdTllM2FcdTllM2VcdTllNDFcdTllNDJcdTllNDRcdTllNDZcdTllNDdcdTllNDhc''@;'; put 'put ''dTllNDlcdTllNGJcdTllNGNcdTllNGVcdTllNTFcdTllNTVcdTllNTdcdTllNWFcdTllNWJcdTllNWNcdTllNWVcdTllNjNcdTllNjYiLDYsIlx1OWU3MVx1OWU2ZFx1OWU3M1x1NzU5Mlx1NzU5NFx1NzU5Nlx1NzVhMFx1NzU5ZFx1NzVhY1x1NzVhM1x1NzViM1x1NzViNFx1NzViOFx1NzVj''@;'; put 'put ''NFx1NzViMVx1NzViMFx1NzVjM1x1NzVjMlx1NzVkNlx1NzVjZFx1NzVlM1x1NzVlOFx1NzVlNlx1NzVlNFx1NzVlYlx1NzVlN1x1NzYwM1x1NzVmMVx1NzVmY1x1NzVmZlx1NzYxMFx1NzYwMFx1NzYwNVx1NzYwY1x1NzYxN1x1NzYwYVx1NzYyNVx1NzYxOFx1NzYxNVx1NzYxOSJdLFsiZjE0''@;'; put 'put ''MCIsIlx1OTk4Y1x1OTk4ZVx1OTk5YSIsMTAsIlx1OTlhNlx1OTlhN1x1OTlhOSIsNDddLFsiZjE4MCIsIlx1OTlkOSIsMzIsIlx1NzYxYlx1NzYzY1x1NzYyMlx1NzYyMFx1NzY0MFx1NzYyZFx1NzYzMFx1NzYzZlx1NzYzNVx1NzY0M1x1NzYzZVx1NzYzM1x1NzY0ZFx1NzY1ZVx1NzY1NFx1''@;'; put 'put ''NzY1Y1x1NzY1Nlx1NzY2Ylx1NzY2Zlx1N2ZjYVx1N2FlNlx1N2E3OFx1N2E3OVx1N2E4MFx1N2E4Nlx1N2E4OFx1N2E5NVx1N2FhNlx1N2FhMFx1N2FhY1x1N2FhOFx1N2FhZFx1N2FiM1x1ODg2NFx1ODg2OVx1ODg3Mlx1ODg3ZFx1ODg3Zlx1ODg4Mlx1ODhhMlx1ODhjNlx1ODhiN1x1ODhi''@;'; put 'put ''Y1x1ODhjOVx1ODhlMlx1ODhjZVx1ODhlM1x1ODhlNVx1ODhmMVx1ODkxYVx1ODhmY1x1ODhlOFx1ODhmZVx1ODhmMFx1ODkyMVx1ODkxOVx1ODkxM1x1ODkxYlx1ODkwYVx1ODkzNFx1ODkyYlx1ODkzNlx1ODk0MVx1ODk2Nlx1ODk3Ylx1NzU4Ylx1ODBlNVx1NzZiMlx1NzZiNFx1NzdkY1x1''@;'; put 'put ''ODAxMlx1ODAxNFx1ODAxNlx1ODAxY1x1ODAyMFx1ODAyMlx1ODAyNVx1ODAyNlx1ODAyN1x1ODAyOVx1ODAyOFx1ODAzMVx1ODAwYlx1ODAzNVx1ODA0M1x1ODA0Nlx1ODA0ZFx1ODA1Mlx1ODA2OVx1ODA3MVx1ODk4M1x1OTg3OFx1OTg4MFx1OTg4MyJdLFsiZjI0MCIsIlx1OTlmYSIsNjJd''@;'; put 'put ''LFsiZjI4MCIsIlx1OWEzOSIsMzIsIlx1OTg4OVx1OTg4Y1x1OTg4ZFx1OTg4Zlx1OTg5NFx1OTg5YVx1OTg5Ylx1OTg5ZVx1OTg5Zlx1OThhMVx1OThhMlx1OThhNVx1OThhNlx1ODY0ZFx1ODY1NFx1ODY2Y1x1ODY2ZVx1ODY3Zlx1ODY3YVx1ODY3Y1x1ODY3Ylx1ODZhOFx1ODY4ZFx1ODY4''@;'; put 'put ''Ylx1ODZhY1x1ODY5ZFx1ODZhN1x1ODZhM1x1ODZhYVx1ODY5M1x1ODZhOVx1ODZiNlx1ODZjNFx1ODZiNVx1ODZjZVx1ODZiMFx1ODZiYVx1ODZiMVx1ODZhZlx1ODZjOVx1ODZjZlx1ODZiNFx1ODZlOVx1ODZmMVx1ODZmMlx1ODZlZFx1ODZmM1x1ODZkMFx1ODcxM1x1ODZkZVx1ODZmNFx1''@;'; put 'put ''ODZkZlx1ODZkOFx1ODZkMVx1ODcwM1x1ODcwN1x1ODZmOFx1ODcwOFx1ODcwYVx1ODcwZFx1ODcwOVx1ODcyM1x1ODczYlx1ODcxZVx1ODcyNVx1ODcyZVx1ODcxYVx1ODczZVx1ODc0OFx1ODczNFx1ODczMVx1ODcyOVx1ODczN1x1ODczZlx1ODc4Mlx1ODcyMlx1ODc3ZFx1ODc3ZVx1ODc3''@;'; put 'put ''Ylx1ODc2MFx1ODc3MFx1ODc0Y1x1ODc2ZVx1ODc4Ylx1ODc1M1x1ODc2M1x1ODc3Y1x1ODc2NFx1ODc1OVx1ODc2NVx1ODc5M1x1ODdhZlx1ODdhOFx1ODdkMiJdLFsiZjM0MCIsIlx1OWE1YSIsMTcsIlx1OWE3Mlx1OWE4M1x1OWE4OVx1OWE4ZFx1OWE4ZVx1OWE5NFx1OWE5NVx1OWE5OVx1''@;'; put 'put ''OWFhNlx1OWFhOSIsNiwiXHU5YWIyXHU5YWIzXHU5YWI0XHU5YWI1XHU5YWI5XHU5YWJiXHU5YWJkXHU5YWJlXHU5YWJmXHU5YWMzXHU5YWM0XHU5YWM2Iiw0LCJcdTlhY2RcdTlhY2VcdTlhY2ZcdTlhZDBcdTlhZDJcdTlhZDRcdTlhZDVcdTlhZDZcdTlhZDdcdTlhZDlcdTlhZGFcdTlhZGJc''@;'; put 'put ''dTlhZGMiXSxbImYzODAiLCJcdTlhZGRcdTlhZGVcdTlhZTBcdTlhZTJcdTlhZTNcdTlhZTRcdTlhZTVcdTlhZTdcdTlhZThcdTlhZTlcdTlhZWFcdTlhZWNcdTlhZWVcdTlhZjAiLDgsIlx1OWFmYVx1OWFmYyIsNiwiXHU5YjA0XHU5YjA1XHU5YjA2XHU4N2M2XHU4Nzg4XHU4Nzg1XHU4N2Fk''@;'; put 'put ''XHU4Nzk3XHU4NzgzXHU4N2FiXHU4N2U1XHU4N2FjXHU4N2I1XHU4N2IzXHU4N2NiXHU4N2QzXHU4N2JkXHU4N2QxXHU4N2MwXHU4N2NhXHU4N2RiXHU4N2VhXHU4N2UwXHU4N2VlXHU4ODE2XHU4ODEzXHU4N2ZlXHU4ODBhXHU4ODFiXHU4ODIxXHU4ODM5XHU4ODNjXHU3ZjM2XHU3ZjQyXHU3''@;'; put 'put ''ZjQ0XHU3ZjQ1XHU4MjEwXHU3YWZhXHU3YWZkXHU3YjA4XHU3YjAzXHU3YjA0XHU3YjE1XHU3YjBhXHU3YjJiXHU3YjBmXHU3YjQ3XHU3YjM4XHU3YjJhXHU3YjE5XHU3YjJlXHU3YjMxXHU3YjIwXHU3YjI1XHU3YjI0XHU3YjMzXHU3YjNlXHU3YjFlXHU3YjU4XHU3YjVhXHU3YjQ1XHU3Yjc1''@;'; put 'put ''XHU3YjRjXHU3YjVkXHU3YjYwXHU3YjZlXHU3YjdiXHU3YjYyXHU3YjcyXHU3YjcxXHU3YjkwXHU3YmE2XHU3YmE3XHU3YmI4XHU3YmFjXHU3YjlkXHU3YmE4XHU3Yjg1XHU3YmFhXHU3YjljXHU3YmEyXHU3YmFiXHU3YmI0XHU3YmQxXHU3YmMxXHU3YmNjXHU3YmRkXHU3YmRhXHU3YmU1XHU3''@;'; put 'put ''YmU2XHU3YmVhXHU3YzBjXHU3YmZlXHU3YmZjXHU3YzBmXHU3YzE2XHU3YzBiIl0sWyJmNDQwIiwiXHU5YjA3XHU5YjA5Iiw1LCJcdTliMTBcdTliMTFcdTliMTJcdTliMTQiLDEwLCJcdTliMjBcdTliMjFcdTliMjJcdTliMjQiLDEwLCJcdTliMzBcdTliMzFcdTliMzMiLDcsIlx1OWIzZFx1''@;'; put 'put ''OWIzZVx1OWIzZlx1OWI0MFx1OWI0Nlx1OWI0YVx1OWI0Ylx1OWI0Y1x1OWI0ZVx1OWI1MFx1OWI1Mlx1OWI1M1x1OWI1NSIsNV0sWyJmNDgwIiwiXHU5YjViIiwzMiwiXHU3YzFmXHU3YzJhXHU3YzI2XHU3YzM4XHU3YzQxXHU3YzQwXHU4MWZlXHU4MjAxXHU4MjAyXHU4MjA0XHU4MWVjXHU4''@;'; put 'put ''ODQ0XHU4MjIxXHU4MjIyXHU4MjIzXHU4MjJkXHU4MjJmXHU4MjI4XHU4MjJiXHU4MjM4XHU4MjNiXHU4MjMzXHU4MjM0XHU4MjNlXHU4MjQ0XHU4MjQ5XHU4MjRiXHU4MjRmXHU4MjVhXHU4MjVmXHU4MjY4XHU4ODdlXHU4ODg1XHU4ODg4XHU4OGQ4XHU4OGRmXHU4OTVlXHU3ZjlkXHU3Zjlm''@;'; put 'put ''XHU3ZmE3XHU3ZmFmXHU3ZmIwXHU3ZmIyXHU3YzdjXHU2NTQ5XHU3YzkxXHU3YzlkXHU3YzljXHU3YzllXHU3Y2EyXHU3Y2IyXHU3Y2JjXHU3Y2JkXHU3Y2MxXHU3Y2M3XHU3Y2NjXHU3Y2NkXHU3Y2M4XHU3Y2M1XHU3Y2Q3XHU3Y2U4XHU4MjZlXHU2NmE4XHU3ZmJmXHU3ZmNlXHU3ZmQ1XHU3''@;'; put 'put ''ZmU1XHU3ZmUxXHU3ZmU2XHU3ZmU5XHU3ZmVlXHU3ZmYzXHU3Y2Y4XHU3ZDc3XHU3ZGE2XHU3ZGFlXHU3ZTQ3XHU3ZTliXHU5ZWI4XHU5ZWI0XHU4ZDczXHU4ZDg0XHU4ZDk0XHU4ZDkxXHU4ZGIxXHU4ZDY3XHU4ZDZkXHU4YzQ3XHU4YzQ5XHU5MTRhXHU5MTUwXHU5MTRlXHU5MTRmXHU5MTY0''@;'; put 'put ''Il0sWyJmNTQwIiwiXHU5YjdjIiw2Ml0sWyJmNTgwIiwiXHU5YmJiIiwzMiwiXHU5MTYyXHU5MTYxXHU5MTcwXHU5MTY5XHU5MTZmXHU5MTdkXHU5MTdlXHU5MTcyXHU5MTc0XHU5MTc5XHU5MThjXHU5MTg1XHU5MTkwXHU5MThkXHU5MTkxXHU5MWEyXHU5MWEzXHU5MWFhXHU5MWFkXHU5MWFl''@;'; put 'put ''XHU5MWFmXHU5MWI1XHU5MWI0XHU5MWJhXHU4YzU1XHU5ZTdlXHU4ZGI4XHU4ZGViXHU4ZTA1XHU4ZTU5XHU4ZTY5XHU4ZGI1XHU4ZGJmXHU4ZGJjXHU4ZGJhXHU4ZGM0XHU4ZGQ2XHU4ZGQ3XHU4ZGRhXHU4ZGRlXHU4ZGNlXHU4ZGNmXHU4ZGRiXHU4ZGM2XHU4ZGVjXHU4ZGY3XHU4ZGY4XHU4''@;'; put 'put ''ZGUzXHU4ZGY5XHU4ZGZiXHU4ZGU0XHU4ZTA5XHU4ZGZkXHU4ZTE0XHU4ZTFkXHU4ZTFmXHU4ZTJjXHU4ZTJlXHU4ZTIzXHU4ZTJmXHU4ZTNhXHU4ZTQwXHU4ZTM5XHU4ZTM1XHU4ZTNkXHU4ZTMxXHU4ZTQ5XHU4ZTQxXHU4ZTQyXHU4ZTUxXHU4ZTUyXHU4ZTRhXHU4ZTcwXHU4ZTc2XHU4ZTdj''@;'; put 'put ''XHU4ZTZmXHU4ZTc0XHU4ZTg1XHU4ZThmXHU4ZTk0XHU4ZTkwXHU4ZTljXHU4ZTllXHU4Yzc4XHU4YzgyXHU4YzhhXHU4Yzg1XHU4Yzk4XHU4Yzk0XHU2NTliXHU4OWQ2XHU4OWRlXHU4OWRhXHU4OWRjIl0sWyJmNjQwIiwiXHU5YmRjIiw2Ml0sWyJmNjgwIiwiXHU5YzFiIiwzMiwiXHU4OWU1''@;'; put 'put ''XHU4OWViXHU4OWVmXHU4YTNlXHU4YjI2XHU5NzUzXHU5NmU5XHU5NmYzXHU5NmVmXHU5NzA2XHU5NzAxXHU5NzA4XHU5NzBmXHU5NzBlXHU5NzJhXHU5NzJkXHU5NzMwXHU5NzNlXHU5ZjgwXHU5ZjgzXHU5Zjg1Iiw1LCJcdTlmOGNcdTllZmVcdTlmMGJcdTlmMGRcdTk2YjlcdTk2YmNcdTk2''@;'; put 'put ''YmRcdTk2Y2VcdTk2ZDJcdTc3YmZcdTk2ZTBcdTkyOGVcdTkyYWVcdTkyYzhcdTkzM2VcdTkzNmFcdTkzY2FcdTkzOGZcdTk0M2VcdTk0NmJcdTljN2ZcdTljODJcdTljODVcdTljODZcdTljODdcdTljODhcdTdhMjNcdTljOGJcdTljOGVcdTljOTBcdTljOTFcdTljOTJcdTljOTRcdTljOTVc''@;'; put 'put ''dTljOWFcdTljOWJcdTljOWUiLDUsIlx1OWNhNSIsNCwiXHU5Y2FiXHU5Y2FkXHU5Y2FlXHU5Y2IwIiw3LCJcdTljYmFcdTljYmJcdTljYmNcdTljYmRcdTljYzRcdTljYzVcdTljYzZcdTljYzdcdTljY2FcdTljY2IiXSxbImY3NDAiLCJcdTljM2MiLDYyXSxbImY3ODAiLCJcdTljN2JcdTlj''@;'; put 'put ''N2RcdTljN2VcdTljODBcdTljODNcdTljODRcdTljODlcdTljOGFcdTljOGNcdTljOGZcdTljOTNcdTljOTZcdTljOTdcdTljOThcdTljOTlcdTljOWRcdTljYWFcdTljYWNcdTljYWZcdTljYjlcdTljYmUiLDQsIlx1OWNjOFx1OWNjOVx1OWNkMVx1OWNkMlx1OWNkYVx1OWNkYlx1OWNlMFx1''@;'; put 'put ''OWNlMVx1OWNjYyIsNCwiXHU5Y2QzXHU5Y2Q0XHU5Y2Q1XHU5Y2Q3XHU5Y2Q4XHU5Y2Q5XHU5Y2RjXHU5Y2RkXHU5Y2RmXHU5Y2UyXHU5NzdjXHU5Nzg1XHU5NzkxXHU5NzkyXHU5Nzk0XHU5N2FmXHU5N2FiXHU5N2EzXHU5N2IyXHU5N2I0XHU5YWIxXHU5YWIwXHU5YWI3XHU5ZTU4XHU5YWI2''@;'; put 'put ''XHU5YWJhXHU5YWJjXHU5YWMxXHU5YWMwXHU5YWM1XHU5YWMyXHU5YWNiXHU5YWNjXHU5YWQxXHU5YjQ1XHU5YjQzXHU5YjQ3XHU5YjQ5XHU5YjQ4XHU5YjRkXHU5YjUxXHU5OGU4XHU5OTBkXHU5OTJlXHU5OTU1XHU5OTU0XHU5YWRmXHU5YWUxXHU5YWU2XHU5YWVmXHU5YWViXHU5YWZiXHU5''@;'; put 'put ''YWVkXHU5YWY5XHU5YjA4XHU5YjBmXHU5YjEzXHU5YjFmXHU5YjIzXHU5ZWJkXHU5ZWJlXHU3ZTNiXHU5ZTgyXHU5ZTg3XHU5ZTg4XHU5ZThiXHU5ZTkyXHU5M2Q2XHU5ZTlkXHU5ZTlmXHU5ZWRiXHU5ZWRjXHU5ZWRkXHU5ZWUwXHU5ZWRmXHU5ZWUyXHU5ZWU5XHU5ZWU3XHU5ZWU1XHU5ZWVh''@;'; put 'put ''XHU5ZWVmXHU5ZjIyXHU5ZjJjXHU5ZjJmXHU5ZjM5XHU5ZjM3XHU5ZjNkXHU5ZjNlXHU5ZjQ0Il0sWyJmODQwIiwiXHU5Y2UzIiw2Ml0sWyJmODgwIiwiXHU5ZDIyIiwzMl0sWyJmOTQwIiwiXHU5ZDQzIiw2Ml0sWyJmOTgwIiwiXHU5ZDgyIiwzMl0sWyJmYTQwIiwiXHU5ZGEzIiw2Ml0sWyJm''@;'; put 'put ''YTgwIiwiXHU5ZGUyIiwzMl0sWyJmYjQwIiwiXHU5ZTAzIiwyNywiXHU5ZTI0XHU5ZTI3XHU5ZTJlXHU5ZTMwXHU5ZTM0XHU5ZTNiXHU5ZTNjXHU5ZTQwXHU5ZTRkXHU5ZTUwXHU5ZTUyXHU5ZTUzXHU5ZTU0XHU5ZTU2XHU5ZTU5XHU5ZTVkXHU5ZTVmXHU5ZTYwXHU5ZTYxXHU5ZTYyXHU5ZTY1''@;'; put 'put ''XHU5ZTZlXHU5ZTZmXHU5ZTcyXHU5ZTc0Iiw5LCJcdTllODAiXSxbImZiODAiLCJcdTllODFcdTllODNcdTllODRcdTllODVcdTllODZcdTllODlcdTllOGFcdTllOGMiLDUsIlx1OWU5NCIsOCwiXHU5ZTllXHU5ZWEwIiw1LCJcdTllYTdcdTllYThcdTllYTlcdTllYWEiXSxbImZjNDAiLCJc''@;'; put 'put ''dTllYWIiLDgsIlx1OWViNVx1OWViNlx1OWViN1x1OWViOVx1OWViYVx1OWViY1x1OWViZiIsNCwiXHU5ZWM1XHU5ZWM2XHU5ZWM3XHU5ZWM4XHU5ZWNhXHU5ZWNiXHU5ZWNjXHU5ZWQwXHU5ZWQyXHU5ZWQzXHU5ZWQ1XHU5ZWQ2XHU5ZWQ3XHU5ZWQ5XHU5ZWRhXHU5ZWRlXHU5ZWUxXHU5ZWUz''@;'; put 'put ''XHU5ZWU0XHU5ZWU2XHU5ZWU4XHU5ZWViXHU5ZWVjXHU5ZWVkXHU5ZWVlXHU5ZWYwIiw4LCJcdTllZmFcdTllZmRcdTllZmYiLDZdLFsiZmM4MCIsIlx1OWYwNiIsNCwiXHU5ZjBjXHU5ZjBmXHU5ZjExXHU5ZjEyXHU5ZjE0XHU5ZjE1XHU5ZjE2XHU5ZjE4XHU5ZjFhIiw1LCJcdTlmMjFcdTlm''@;'; put 'put ''MjMiLDgsIlx1OWYyZFx1OWYyZVx1OWYzMFx1OWYzMSJdLFsiZmQ0MCIsIlx1OWYzMiIsNCwiXHU5ZjM4XHU5ZjNhXHU5ZjNjXHU5ZjNmIiw0LCJcdTlmNDUiLDEwLCJcdTlmNTIiLDM4XSxbImZkODAiLCJcdTlmNzkiLDUsIlx1OWY4MVx1OWY4Mlx1OWY4ZCIsMTEsIlx1OWY5Y1x1OWY5ZFx1''@;'; put 'put ''OWY5ZVx1OWZhMSIsNCwiXHVmOTJjXHVmOTc5XHVmOTk1XHVmOWU3XHVmOWYxIl0sWyJmZTQwIiwiXHVmYTBjXHVmYTBkXHVmYTBlXHVmYTBmXHVmYTExXHVmYTEzXHVmYTE0XHVmYTE4XHVmYTFmXHVmYTIwXHVmYTIxXHVmYTIzXHVmYTI0XHVmYTI3XHVmYTI4XHVmYTI5Il1dJyl9LDc0NzU0''@;'; put 'put ''OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMjcwNTQpLkJ1ZmZlcixfPWIoOTE3KSxwPWIoOTA1MTgpLmVjLFY9Yig2NTY2Nyksdz1iKDY0NTg5KTtmdW5jdGlvbiB6KE4sTyl7aWYoTi5jbXBuKDApPD0wKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaWciKTtpZihOLmNtcChP''@;'; put 'put ''KT49MCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2lnIil9Y2UuZXhwb3J0cz1mdW5jdGlvbiBQKE4sTyxLLFosWSl7dmFyIFc9VihLKTtpZigiZWMiPT09Vy50eXBlKXtpZigiZWNkc2EiIT09WiYmImVjZHNhL3JzYSIhPT1aKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHVibGljIGtleSB0''@;'; put 'put ''eXBlIik7cmV0dXJuIGZ1bmN0aW9uIEYoTixPLEspe3ZhciBaPXdbSy5kYXRhLmFsZ29yaXRobS5jdXJ2ZS5qb2luKCIuIildO2lmKCFaKXRocm93IG5ldyBFcnJvcigidW5rbm93biBjdXJ2ZSAiK0suZGF0YS5hbGdvcml0aG0uY3VydmUuam9pbigiLiIpKTtyZXR1cm4gbmV3IHAoWikudmVy''@;'; put 'put ''aWZ5KE8sTixLLmRhdGEuc3ViamVjdFByaXZhdGVLZXkuZGF0YSl9KE4sTyxXKX1pZigiZHNhIj09PVcudHlwZSl7aWYoImRzYSIhPT1aKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHVibGljIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uIFIoTixPLEspe3ZhciBaPUsuZGF0YS5wLFk9Sy5k''@;'; put 'put ''YXRhLnEsVz1LLmRhdGEuZyxxPUsuZGF0YS5wdWJfa2V5LGVlPVYuc2lnbmF0dXJlLmRlY29kZShOLCJkZXIiKSxKPWVlLnMscmU9ZWUucjt6KEosWSkseihyZSxZKTt2YXIgaWU9Xy5tb250KFopLHVlPUouaW52bShZKTtyZXR1cm4gMD09PVcudG9SZWQoaWUpLnJlZFBvdyhuZXcgXyhPKS5t''@;'; put 'put ''dWwodWUpLm1vZChZKSkuZnJvbVJlZCgpLm11bChxLnRvUmVkKGllKS5yZWRQb3cocmUubXVsKHVlKS5tb2QoWSkpLmZyb21SZWQoKSkubW9kKFopLm1vZChZKS5jbXAocmUpfShOLE8sVyl9aWYoInJzYSIhPT1aJiYiZWNkc2EvcnNhIiE9PVopdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJs''@;'; put 'put ''aWMga2V5IHR5cGUiKTtPPUkuY29uY2F0KFtZLE9dKTtmb3IodmFyIHE9Vy5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxlZT1bMV0sSj0wO08ubGVuZ3RoK2VlLmxlbmd0aCsyPHE7KWVlLnB1c2goMjU1KSxKKz0xO2VlLnB1c2goMCk7Zm9yKHZhciByZT0tMTsrK3JlPE8ubGVuZ3RoOyllZS5wdXNo''@;'; put 'put ''KE9bcmVdKTtlZT1JLmZyb20oZWUpO3ZhciBpZT1fLm1vbnQoVy5tb2R1bHVzKTtOPShOPW5ldyBfKE4pLnRvUmVkKGllKSkucmVkUG93KG5ldyBfKFcucHVibGljRXhwb25lbnQpKSxOPUkuZnJvbShOLmZyb21SZWQoKS50b0FycmF5KCkpO3ZhciB1ZT1KPDg/MTowO2ZvcihxPU1hdGgubWlu''@;'; put 'put ''KE4ubGVuZ3RoLGVlLmxlbmd0aCksTi5sZW5ndGghPT1lZS5sZW5ndGgmJih1ZT0xKSxyZT0tMTsrK3JlPHE7KXVlfD1OW3JlXV5lZVtyZV07cmV0dXJuIDA9PT11ZX19LDc0ODI0OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoOTMxNjIpLF89Yig3NDg1KSxwPWIoNzE3MSksVj1m''@;'; put 'put ''dW5jdGlvbih3KXtyZXR1cm4gZnVuY3Rpb24oUCxGLFIpe3ZhciB6PUkoUCksTj1wKHopO2lmKDA9PT1OKXJldHVybiF3JiYtMTt2YXIgSyxPPV8oUixOKTtpZih3JiZGIT1GKXtmb3IoO04+TzspaWYoKEs9eltPKytdKSE9SylyZXR1cm4hMH1lbHNlIGZvcig7Tj5PO08rKylpZigod3x8TyBp''@;'; put 'put ''biB6KSYmeltPXT09PUYpcmV0dXJuIHd8fE98fDA7cmV0dXJuIXcmJi0xfX07Y2UuZXhwb3J0cz17aW5jbHVkZXM6VighMCksaW5kZXhPZjpWKCExKX19LDc0ODM5OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMzc3MzEpLF89YigzMDMzOSkscD1iKDIxOTEwKSxWPWIoNDM2MzIp''@;'; put 'put ''O2NlLmV4cG9ydHM9ZnVuY3Rpb24oUCl7dmFyIEY9SSh0aGlzKSxSPVYoUCk7cmV0dXJuIShfKEYpPlIuc2l6ZSkmJiExIT09cChGLGZ1bmN0aW9uKHope2lmKCFSLmluY2x1ZGVzKHopKXJldHVybiExfSwhMCl9fSw3NDk2NDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDU1NTky''@;'; put 'put ''KSxfPWIoNzc3NzMpO2NlLmV4cG9ydHM9IUkoZnVuY3Rpb24oKXt2YXIgcD1uZXcgRXJyb3IoImEiKTtyZXR1cm4hKCJzdGFjayJpbiBwKXx8KE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCJzdGFjayIsXygxLDcpKSw3IT09cC5zdGFjayl9KX0sNzUxNTc6KGNlLFgsYik9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIEk9Yig1NTU5Mik7Y2UuZXhwb3J0cz0hSShmdW5jdGlvbigpe3ZhciBfPWZ1bmN0aW9uKCl7fS5iaW5kKCk7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIF98fF8uaGFzT3duUHJvcGVydHkoInByb3RvdHlwZSIpfSl9LDc1MjEyOmNlPT57InVzZSBzdHJpY3QiO3ZhciBYPVN0cmlu''@;'; put 'put ''ZztjZS5leHBvcnRzPWZ1bmN0aW9uKGIpe3RyeXtyZXR1cm4gWChiKX1jYXRjaHtyZXR1cm4iT2JqZWN0In19fSw3NTIyNTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJKFcscSl7dmFyIGVlPU9iamVjdC5rZXlzKFcpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMp''@;'; put 'put ''e3ZhciBKPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoVyk7cSYmKEo9Si5maWx0ZXIoZnVuY3Rpb24ocmUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFcscmUpLmVudW1lcmFibGV9KSksZWUucHVzaC5hcHBseShlZSxKKX1yZXR1cm4gZWV9ZnVuY3Rpb24g''@;'; put 'put ''XyhXKXtmb3IodmFyIHE9MTtxPGFyZ3VtZW50cy5sZW5ndGg7cSsrKXt2YXIgZWU9bnVsbCE9YXJndW1lbnRzW3FdP2FyZ3VtZW50c1txXTp7fTtxJTI/SShPYmplY3QoZWUpLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKEope3AoVyxKLGVlW0pdKX0pOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny''@;'; put 'put ''aXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFcsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoZWUpKTpJKE9iamVjdChlZSkpLmZvckVhY2goZnVuY3Rpb24oSil7T2JqZWN0LmRlZmluZVByb3BlcnR5KFcsSixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGVl''@;'; put 'put ''LEopKX0pfXJldHVybiBXfWZ1bmN0aW9uIHAoVyxxLGVlKXtyZXR1cm4ocT1GKHEpKWluIFc/T2JqZWN0LmRlZmluZVByb3BlcnR5KFcscSx7dmFsdWU6ZWUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpXW3FdPWVlLFd9ZnVuY3Rpb24gdyhXLHEpe2Zvcih2''@;'; put 'put ''YXIgZWU9MDtlZTxxLmxlbmd0aDtlZSsrKXt2YXIgSj1xW2VlXTtKLmVudW1lcmFibGU9Si5lbnVtZXJhYmxlfHwhMSxKLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gSiYmKEoud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXLEYoSi5rZXkpLEopfX1mdW5jdGlvbiBGKFcp''@;'; put 'put ''e3ZhciBxPWZ1bmN0aW9uIFIoVyxxKXtpZigib2JqZWN0IiE9dHlwZW9mIFd8fG51bGw9PT1XKXJldHVybiBXO3ZhciBlZT1XW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZWUpe3ZhciBKPWVlLmNhbGwoVyxxfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgSilyZXR1''@;'; put 'put ''cm4gSjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXE/U3RyaW5nOk51bWJlcikoVyl9KFcsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgcT9xOlN0cmluZyhxKX12YXIg''@;'; put 'put ''Tj1iKDgzODM4KS5CdWZmZXIsSz1iKDYzNzc5KS5pbnNwZWN0LFo9SyYmSy5jdXN0b218fCJpbnNwZWN0IjtmdW5jdGlvbiBZKFcscSxlZSl7Ti5wcm90b3R5cGUuY29weS5jYWxsKFcscSxlZSl9Y2UuZXhwb3J0cz1mdW5jdGlvbigpe2Z1bmN0aW9uIFcoKXsoZnVuY3Rpb24gVihXLHEpe2lm''@;'; put 'put ''KCEoVyBpbnN0YW5jZW9mIHEpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxXKSx0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfXJldHVybiBmdW5jdGlvbiBQKFcscSxlZSl7cSYmdyhXLnBy''@;'; put 'put ''b3RvdHlwZSxxKSxlZSYmdyhXLGVlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVywicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0oVyxbe2tleToicHVzaCIsdmFsdWU6ZnVuY3Rpb24oZWUpe3ZhciBKPXtkYXRhOmVlLG5leHQ6bnVsbH07dGhpcy5sZW5ndGg+MD90aGlzLnRhaWwubmV4dD1K''@;'; put 'put ''OnRoaXMuaGVhZD1KLHRoaXMudGFpbD1KLCsrdGhpcy5sZW5ndGh9fSx7a2V5OiJ1bnNoaWZ0Iix2YWx1ZTpmdW5jdGlvbihlZSl7dmFyIEo9e2RhdGE6ZWUsbmV4dDp0aGlzLmhlYWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMudGFpbD1KKSx0aGlzLmhlYWQ9SiwrK3RoaXMubGVuZ3RofX0s''@;'; put 'put ''e2tleToic2hpZnQiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoMCE9PXRoaXMubGVuZ3RoKXt2YXIgZWU9dGhpcy5oZWFkLmRhdGE7cmV0dXJuIHRoaXMuaGVhZD0xPT09dGhpcy5sZW5ndGg/dGhpcy50YWlsPW51bGw6dGhpcy5oZWFkLm5leHQsLS10aGlzLmxlbmd0aCxlZX19fSx7a2V5OiJjbGVh''@;'; put 'put ''ciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH19LHtrZXk6ImpvaW4iLHZhbHVlOmZ1bmN0aW9uKGVlKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBKPXRoaXMuaGVhZCxyZT0iIitKLmRhdGE7Sj1KLm5leHQ7KXJl''@;'; put 'put ''Kz1lZStKLmRhdGE7cmV0dXJuIHJlfX0se2tleToiY29uY2F0Iix2YWx1ZTpmdW5jdGlvbihlZSl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiBOLmFsbG9jKDApO2Zvcih2YXIgSj1OLmFsbG9jVW5zYWZlKGVlPj4+MCkscmU9dGhpcy5oZWFkLGllPTA7cmU7KVkocmUuZGF0YSxKLGllKSxp''@;'; put 'put ''ZSs9cmUuZGF0YS5sZW5ndGgscmU9cmUubmV4dDtyZXR1cm4gSn19LHtrZXk6ImNvbnN1bWUiLHZhbHVlOmZ1bmN0aW9uKGVlLEope3ZhciByZTtyZXR1cm4gZWU8dGhpcy5oZWFkLmRhdGEubGVuZ3RoPyhyZT10aGlzLmhlYWQuZGF0YS5zbGljZSgwLGVlKSx0aGlzLmhlYWQuZGF0YT10aGlz''@;'; put 'put ''LmhlYWQuZGF0YS5zbGljZShlZSkpOnJlPWVlPT09dGhpcy5oZWFkLmRhdGEubGVuZ3RoP3RoaXMuc2hpZnQoKTpKP3RoaXMuX2dldFN0cmluZyhlZSk6dGhpcy5fZ2V0QnVmZmVyKGVlKSxyZX19LHtrZXk6ImZpcnN0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhlYWQuZGF0YX19''@;'; put 'put ''LHtrZXk6Il9nZXRTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGVlKXt2YXIgSj10aGlzLmhlYWQscmU9MSxpZT1KLmRhdGE7Zm9yKGVlLT1pZS5sZW5ndGg7Sj1KLm5leHQ7KXt2YXIgdWU9Si5kYXRhLGdlPWVlPnVlLmxlbmd0aD91ZS5sZW5ndGg6ZWU7aWYoaWUrPWdlPT09dWUubGVuZ3RoP3Vl''@;'; put 'put ''OnVlLnNsaWNlKDAsZWUpLDA9PShlZS09Z2UpKXtnZT09PXVlLmxlbmd0aD8oKytyZSx0aGlzLmhlYWQ9Si5uZXh0P0oubmV4dDp0aGlzLnRhaWw9bnVsbCk6KHRoaXMuaGVhZD1KLEouZGF0YT11ZS5zbGljZShnZSkpO2JyZWFrfSsrcmV9cmV0dXJuIHRoaXMubGVuZ3RoLT1yZSxpZX19LHtr''@;'; put 'put ''ZXk6Il9nZXRCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKGVlKXt2YXIgSj1OLmFsbG9jVW5zYWZlKGVlKSxyZT10aGlzLmhlYWQsaWU9MTtmb3IocmUuZGF0YS5jb3B5KEopLGVlLT1yZS5kYXRhLmxlbmd0aDtyZT1yZS5uZXh0Oyl7dmFyIHVlPXJlLmRhdGEsZ2U9ZWU+dWUubGVuZ3RoP3VlLmxl''@;'; put 'put ''bmd0aDplZTtpZih1ZS5jb3B5KEosSi5sZW5ndGgtZWUsMCxnZSksMD09KGVlLT1nZSkpe2dlPT09dWUubGVuZ3RoPygrK2llLHRoaXMuaGVhZD1yZS5uZXh0P3JlLm5leHQ6dGhpcy50YWlsPW51bGwpOih0aGlzLmhlYWQ9cmUscmUuZGF0YT11ZS5zbGljZShnZSkpO2JyZWFrfSsraWV9cmV0''@;'; put 'put ''dXJuIHRoaXMubGVuZ3RoLT1pZSxKfX0se2tleTpaLHZhbHVlOmZ1bmN0aW9uKGVlLEope3JldHVybiBLKHRoaXMsXyhfKHt9LEopLHt9LHtkZXB0aDowLGN1c3RvbUluc3BlY3Q6ITF9KSl9fV0pLFd9KCl9LDc1NDI0OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9ZnVuY3Rpb24oWCl7''@;'; put 'put ''cmV0dXJue2l0ZXJhdG9yOlgsbmV4dDpYLm5leHQsZG9uZTohMX19fSw3NjY0MzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDI3MDU0KS5CdWZmZXIsXz1iKDQxMDkwKSxwPXR5cGVvZiBVaW50OEFycmF5PCJ1Iix3PXAmJnR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVm''@;'; put 'put ''ZmVyLmlzVmlldztjZS5leHBvcnRzPWZ1bmN0aW9uKFAsRixSKXtpZigic3RyaW5nIj09dHlwZW9mIFB8fEkuaXNCdWZmZXIoUCl8fHAmJlAgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx3JiZ3KFApKXJldHVybiBfKFAsRik7dGhyb3cgbmV3IFR5cGVFcnJvcihSKyIgbXVzdCBiZSBhIHN0cmlu''@;'; put 'put ''ZywgYSBCdWZmZXIsIGEgVWludDhBcnJheSwgb3IgYSBEYXRhVmlldyIpfX0sNzY4NjE6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF8oVix3LFAsRil7dmFyIFI9e3M6WyJcdTA5MjVcdTA5NGJcdTA5MjFcdTA5MmZcdTA5M2UgXHUwOTM4XHUw''@;'; put 'put ''OTQ1XHUwOTE1XHUwOTAyXHUwOTIxXHUwOTNlXHUwOTAyXHUwOTI4XHUwOTQwIiwiXHUwOTI1XHUwOTRiXHUwOTIxXHUwOTQ3IFx1MDkzOFx1MDk0NVx1MDkxNVx1MDkwMlx1MDkyMSJdLHNzOltWKyIgXHUwOTM4XHUwOTQ1XHUwOTE1XHUwOTAyXHUwOTIxXHUwOTNlXHUwOTAyXHUwOTI4XHUw''@;'; put 'put ''OTQwIixWKyIgXHUwOTM4XHUwOTQ1XHUwOTE1XHUwOTAyXHUwOTIxIl0sbTpbIlx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MmVcdTA5M2ZcdTA5MjNcdTA5MWZcdTA5M2VcdTA5MjgiLCJcdTA5MGZcdTA5MTUgXHUwOTJlXHUwOTNmXHUwOTI4XHUwOTQyXHUwOTFmIl0sbW06W1YrIiBcdTA5MmVc''@;'; put 'put ''dTA5M2ZcdTA5MjNcdTA5MWZcdTA5M2VcdTA5MDJcdTA5MjhcdTA5NDAiLFYrIiBcdTA5MmVcdTA5M2ZcdTA5MjNcdTA5MWZcdTA5M2VcdTA5MDIiXSxoOlsiXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkzNVx1MDkzMFx1MDkzZVx1MDkyOCIsIlx1MDkwZlx1MDkxNSBcdTA5MzVcdTA5MzAiXSxo''@;'; put 'put ''aDpbVisiIFx1MDkzNVx1MDkzMFx1MDkzZVx1MDkwMlx1MDkyOFx1MDk0MCIsVisiIFx1MDkzNVx1MDkzMFx1MDkzZVx1MDkwMiJdLGQ6WyJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTI2XHUwOTNmXHUwOTM4XHUwOTNlXHUwOTI4IiwiXHUwOTBmXHUwOTE1IFx1MDkyNlx1MDk0MFx1MDkzOCJd''@;'; put 'put ''LGRkOltWKyIgXHUwOTI2XHUwOTNmXHUwOTM4XHUwOTNlXHUwOTAyXHUwOTI4XHUwOTQwIixWKyIgXHUwOTI2XHUwOTQwXHUwOTM4Il0sTTpbIlx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MmVcdTA5NGRcdTA5MzlcdTA5MmZcdTA5MjhcdTA5NGRcdTA5MmZcdTA5M2VcdTA5MjgiLCJcdTA5MGZc''@;'; put 'put ''dTA5MTUgXHUwOTJlXHUwOTRkXHUwOTM5XHUwOTJmXHUwOTI4XHUwOTRiIl0sTU06W1YrIiBcdTA5MmVcdTA5NGRcdTA5MzlcdTA5MmZcdTA5MjhcdTA5NGRcdTA5MmZcdTA5M2VcdTA5MjhcdTA5NDAiLFYrIiBcdTA5MmVcdTA5NGRcdTA5MzlcdTA5MmZcdTA5MjhcdTA5NDciXSx5OlsiXHUw''@;'; put 'put ''OTBmXHUwOTE1XHUwOTNlIFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzOFx1MDkzZVx1MDkyOCIsIlx1MDkwZlx1MDkxNSBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzgiXSx5eTpbVisiIFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzOFx1MDkzZVx1MDkwMlx1MDkyOFx1MDk0MCIsVisiIFx1MDkzNVx1''@;'; put 'put ''MDkzMFx1MDk0ZFx1MDkzOFx1MDkzZVx1MDkwMiJdfTtyZXR1cm4gRj9SW1BdWzBdOlJbUF1bMV19SS5kZWZpbmVMb2NhbGUoImdvbS1kZXZhIix7bW9udGhzOntzdGFuZGFsb25lOiJcdTA5MWNcdTA5M2VcdTA5MjhcdTA5NDdcdTA5MzVcdTA5M2VcdTA5MzBcdTA5NDBfXHUwOTJiXHUwOTQ3''@;'; put 'put ''XHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQxXHUwOTM1XHUwOTNlXHUwOTMwXHUwOTQwX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MGZcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDBcdTA5MzJfXHUwOTJlXHUwOTQ3X1x1MDkxY1x1MDk0Mlx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5''@;'; put 'put ''MzJcdTA5MmZfXHUwOTExXHUwOTE3XHUwOTM4XHUwOTRkXHUwOTFmX1x1MDkzOFx1MDkyYVx1MDk0ZFx1MDkxZlx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMF9cdTA5MTFcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NGJcdTA5MmNcdTA5MzBfXHUwOTI4XHUwOTRiXHUwOTM1XHUwOTRkXHUwOTM5XHUw''@;'; put 'put ''OTQ3XHUwOTAyXHUwOTJjXHUwOTMwX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMCIuc3BsaXQoIl8iKSxmb3JtYXQ6Ilx1MDkxY1x1MDkzZVx1MDkyOFx1MDk0N1x1MDkzNVx1MDkzZVx1MDkzMFx1MDk0MFx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MmJc''@;'; put 'put ''dTA5NDdcdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDFcdTA5MzVcdTA5M2VcdTA5MzBcdTA5NDBcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkwZlx1MDkyYVx1MDk0ZFx1MDkzMFx1''@;'; put 'put ''MDk0MFx1MDkzMlx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MmVcdTA5NDdcdTA5MmZcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTFjXHUwOTQyXHUwOTI4XHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkxY1x1MDk0MVx1MDkzMlx1MDkyZlx1''@;'; put 'put ''MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MTFcdTA5MTdcdTA5MzhcdTA5NGRcdTA5MWZcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTM4XHUwOTJhXHUwOTRkXHUwOTFmXHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUw''@;'; put 'put ''OTNlX1x1MDkxMVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Ylx1MDkyY1x1MDkzMFx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MjhcdTA5NGJcdTA5MzVcdTA5NGRcdTA5MzlcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzBcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUw''@;'; put 'put ''OTIxXHUwOTNmXHUwOTM4XHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9NTU1NKFxzKStEW29EXT8vfSxtb250aHNTaG9ydDoiXHUwOTFjXHUwOTNlXHUwOTI4XHUwOTQ3Ll9cdTA5MmJcdTA5NDdcdTA5''@;'; put 'put ''MmNcdTA5NGRcdTA5MzBcdTA5NDEuX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MGZcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDAuX1x1MDkyZVx1MDk0N19cdTA5MWNcdTA5NDJcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyLl9cdTA5MTFcdTA5MTcuX1x1MDkzOFx1MDkyYVx1''@;'; put 'put ''MDk0ZFx1MDkxZlx1MDk0N1x1MDkwMi5fXHUwOTExXHUwOTE1XHUwOTRkXHUwOTFmXHUwOTRiLl9cdTA5MjhcdTA5NGJcdTA5MzVcdTA5NGRcdTA5MzlcdTA5NDdcdTA5MDIuX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0N1x1MDkwMi4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3''@;'; put 'put ''ZWVrZGF5czoiXHUwOTA2XHUwOTJmXHUwOTI0XHUwOTNlXHUwOTMwX1x1MDkzOFx1MDk0Ylx1MDkyZVx1MDkzZVx1MDkzMF9cdTA5MmVcdTA5MDJcdTA5MTdcdTA5MzNcdTA5M2VcdTA5MzBfXHUwOTJjXHUwOTQxXHUwOTI3XHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkyY1x1MDkzZlx1MDkzMFx1''@;'; put 'put ''MDk0N1x1MDkzOFx1MDk0ZFx1MDkyNFx1MDkzZVx1MDkzMF9cdTA5MzhcdTA5NDFcdTA5MTVcdTA5NGRcdTA5MzBcdTA5M2VcdTA5MzBfXHUwOTM2XHUwOTQ3XHUwOTI4XHUwOTM1XHUwOTNlXHUwOTMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDkwNlx1MDkyZlx1MDkyNC5fXHUw''@;'; put 'put ''OTM4XHUwOTRiXHUwOTJlLl9cdTA5MmVcdTA5MDJcdTA5MTdcdTA5MzMuX1x1MDkyY1x1MDk0MVx1MDkyNy5fXHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQ3XHUwOTM4XHUwOTRkXHUwOTI0Ll9cdTA5MzhcdTA5NDFcdTA5MTVcdTA5NGRcdTA5MzAuX1x1MDkzNlx1MDk0N1x1MDkyOC4iLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXNNaW46Ilx1MDkwNl9cdTA5MzhcdTA5NGJfXHUwOTJlXHUwOTAyX1x1MDkyY1x1MDk0MV9cdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDdfXHUwOTM4XHUwOTQxX1x1MDkzNlx1MDk0NyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6''@;'; put 'put ''e0xUOiJBIGg6bW0gW1x1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZVx1MDkwMl0iLExUUzoiQSBoOm1tOnNzIFtcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2VcdTA5MDJdIixMOiJERC1NTS1ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgQSBoOm1tIFtc''@;'; put 'put ''dTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2VcdTA5MDJdIixMTExMOiJkZGRkLCBNTU1NIERvLCBZWVlZLCBBIGg6bW0gW1x1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZVx1MDkwMl0iLGxsbGw6ImRkZCwgRCBNTU0gWVlZWSwgQSBoOm1tIFtcdTA5MzVcdTA5M2VcdTA5MWNcdTA5''@;'; put 'put ''MjRcdTA5M2VcdTA5MDJdIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA5MDZcdTA5MmZcdTA5MWNdIExUIixuZXh0RGF5OiJbXHUwOTJiXHUwOTNlXHUwOTMyXHUwOTRkXHUwOTJmXHUwOTNlXHUwOTAyXSBMVCIsbmV4dFdlZWs6IltcdTA5MmJcdTA5NDFcdTA5MjFcdTA5MzJcdTA5NGJdIGRk''@;'; put 'put ''ZGRbLF0gTFQiLGxhc3REYXk6IltcdTA5MTVcdTA5M2VcdTA5MzJdIExUIixsYXN0V2VlazoiW1x1MDkyYlx1MDkzZVx1MDkxZlx1MDkzMlx1MDk0Yl0gZGRkZFssXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMiLHBhc3Q6IiVzIFx1MDkwNlx1MDkyNlx1MDk0''@;'; put 'put ''MFx1MDkwMiIsczpfLHNzOl8sbTpfLG1tOl8saDpfLGhoOl8sZDpfLGRkOl8sTTpfLE1NOl8seTpfLHl5Ol99LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oXHUwOTM1XHUwOTQ3XHUwOTMwKS8sb3JkaW5hbDpmdW5jdGlvbihWLHcpe3JldHVybiJEIj09PXc/VisiXHUwOTM1XHUw''@;'; put 'put ''OTQ3XHUwOTMwIjpWfSx3ZWVrOntkb3c6MCxkb3k6M30sbWVyaWRpZW1QYXJzZTovXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTQwfFx1MDkzOFx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MFx1MDkwMnxcdTA5MjZcdTA5MjhcdTA5MmFcdTA5M2VcdTA5MzBcdTA5M2VcdTA5MDJ8XHUwOTM4XHUwOTNl''@;'; put 'put ''XHUwOTAyXHUwOTFjXHUwOTQ3LyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oVix3KXtyZXR1cm4gMTI9PT1WJiYoVj0wKSwiXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTQwIj09PXc/Vjw0P1Y6VisxMjoiXHUwOTM4XHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwXHUwOTAyIj09PXc/VjoiXHUwOTI2XHUw''@;'; put 'put ''OTI4XHUwOTJhXHUwOTNlXHUwOTMwXHUwOTNlXHUwOTAyIj09PXc/Vj4xMj9WOlYrMTI6Ilx1MDkzOFx1MDkzZVx1MDkwMlx1MDkxY1x1MDk0NyI9PT13P1YrMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihWLHcsUCl7cmV0dXJuIFY8ND8iXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTQwIjpW''@;'; put 'put ''PDEyPyJcdTA5MzhcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDBcdTA5MDIiOlY8MTY/Ilx1MDkyNlx1MDkyOFx1MDkyYVx1MDkzZVx1MDkzMFx1MDkzZVx1MDkwMiI6VjwyMD8iXHUwOTM4XHUwOTNlXHUwOTAyXHUwOTFjXHUwOTQ3IjoiXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTQwIn19KX0oYig5''@;'; put 'put ''NzU4NikpfSw3NzE5OTooKT0+e30sNzc1MjU6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigyODM2NyksXz1iKDMxOTUwKSxwPWIoNzE3MSksVj1iKDM5MjA2KSx3PWIoMzMxNik7SSh7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsYXJpdHk6MSxmb3JjZWQ6Yig1NTU5MikoZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gNDI5NDk2NzI5NyE9PVtdLnB1c2guY2FsbCh7bGVuZ3RoOjQyOTQ5NjcyOTZ9LDEpfSl8fCFmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sImxlbmd0aCIse3dyaXRhYmxlOiExfSkucHVzaCgpfWNhdGNoKE4pe3JldHVybiBOIGluc3RhbmNlb2Yg''@;'; put 'put ''VHlwZUVycm9yfX0oKX0se3B1c2g6ZnVuY3Rpb24oTyl7dmFyIEs9Xyh0aGlzKSxaPXAoSyksWT1hcmd1bWVudHMubGVuZ3RoO3coWitZKTtmb3IodmFyIFc9MDtXPFk7VysrKUtbWl09YXJndW1lbnRzW1ddLForKztyZXR1cm4gVihLLFopLFp9fSl9LDc3NjM5OihjZSxYLGIpPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBJPWIoNTg2MDcpO2NlLmV4cG9ydHM9SShbXS5zbGljZSl9LDc3NzczOmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9ZnVuY3Rpb24oWCxiKXtyZXR1cm57ZW51bWVyYWJsZTohKDEmWCksY29uZmlndXJhYmxlOiEoMiZYKSx3cml0YWJsZTohKDQmWCksdmFsdWU6Yn19''@;'; put 'put ''fSw3NzkzMzpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPVJhbmdlRXJyb3J9LDc3OTY1OigpPT57fSw3ODI2MTpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6Ilx1MDY2MSIsMjoiXHUwNjYyIiwzOiJcdTA2NjMiLDQ6Ilx1MDY2NCIsNToi''@;'; put 'put ''XHUwNjY1Iiw2OiJcdTA2NjYiLDc6Ilx1MDY2NyIsODoiXHUwNjY4Iiw5OiJcdTA2NjkiLDA6Ilx1MDY2MCJ9LHA9eyJcdTA2NjEiOiIxIiwiXHUwNjYyIjoiMiIsIlx1MDY2MyI6IjMiLCJcdTA2NjQiOiI0IiwiXHUwNjY1IjoiNSIsIlx1MDY2NiI6IjYiLCJcdTA2NjciOiI3IiwiXHUwNjY4''@;'; put 'put ''IjoiOCIsIlx1MDY2OSI6IjkiLCJcdTA2NjAiOiIwIn07SS5kZWZpbmVMb2NhbGUoImFyLXNhIix7bW9udGhzOiJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNc''@;'; put 'put ''dTA2MjhcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDhfXHUwNjIzXHUwNjNhXHUwNjMzXHUwNjM3XHUwNjMzX1x1MDYzM1x1MDYyOFx1MDYyYVx1MDY0''@;'; put 'put ''NVx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQxXHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDY0YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNjRhXHUwNjQ2XHUw''@;'; put 'put ''NjI3XHUwNjRhXHUwNjMxX1x1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDhf''@;'; put 'put ''XHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4X1x1MDYyM1x1MDYzYVx1MDYzM1x1MDYzN1x1MDYzM19cdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYy''@;'; put 'put ''OFx1MDYzMV9cdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0''@;'; put 'put ''XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYz''@;'; put 'put ''M1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFf''@;'; put 'put ''XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Bh''@;'; put 'put ''cnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjM1fFx1''@;'; put 'put ''MDY0NS8saXNQTTpmdW5jdGlvbih3KXtyZXR1cm4iXHUwNjQ1Ij09PXd9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzwxMj8iXHUwNjM1IjoiXHUwNjQ1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ0XHUw''@;'; put 'put ''NjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2MjcgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRc''@;'; put 'put ''dTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1MDYzMyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0''@;'; put 'put ''NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2NDFcdTA2NGEgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczoiXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2Iixzczoi''@;'; put 'put ''JWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IixtOiJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLG1tOiIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLGg6Ilx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsaGg6IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1''@;'; put 'put ''MDYyN1x1MDYyYSIsZDoiXHUwNjRhXHUwNjQ4XHUwNjQ1IixkZDoiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IixNOiJcdTA2MzRcdTA2NDdcdTA2MzEiLE1NOiIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLHk6Ilx1MDYzM1x1MDY0Nlx1MDYyOSIseXk6IiVkIFx1MDYzM1x1MDY0''@;'; put 'put ''Nlx1MDY0OFx1MDYyN1x1MDYyYSJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTA2NjFcdTA2NjJcdTA2NjNcdTA2NjRcdTA2NjVcdTA2NjZcdTA2NjdcdTA2NjhcdTA2NjlcdTA2NjBdL2csZnVuY3Rpb24oUCl7cmV0dXJuIHBbUF19KS5yZXBsYWNlKC9cdTA2''@;'; put 'put ''MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oUCl7cmV0dXJuIF9bUF19KS5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oYig5NzU4NikpfSw3ODM2ODooY2UsWCxiKT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgST1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbCxfPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkscD1iKDY1OTkyKTtjZS5leHBvcnRzPXAuY2FsbChJLF8pfSw3ODM3NTpmdW5jdGlvbihjZSl7Y2UuZXhwb3J0cz1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt0eXBlb2Yg''@;'; put 'put ''Z2xvYmFsVGhpczwidSJ8fHR5cGVvZiB3aW5kb3c8InUifHx0eXBlb2YgZ2xvYmFsPCJ1IiYmZ2xvYmFsO3ZhciBiPXt9LEk9e2V4cG9ydHM6e319O0kuZXhwb3J0cz1mdW5jdGlvbiBhaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3Bl''@;'; put 'put ''cnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6ImJnIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHUwNDE4IixtaWxsaW9uOiJcdTA0MTAiLGJpbGxpb246Ik0iLHRyaWxsaW9u''@;'; put 'put ''OiJUIn0sb3JkaW5hbDooKT0+Ii4iLGN1cnJlbmN5OntzeW1ib2w6Ilx1MDQzYlx1MDQzMi4iLGNvZGU6IkJHTiJ9fSk7dmFyIF89SS5leHBvcnRzLHA9e2V4cG9ydHM6e319O3AuZXhwb3J0cz1mdW5jdGlvbiBhaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90''@;'; put 'put ''eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6ImNzLUNaIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ilx4YTAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoidGlzLiIsbWlsbGlvbjoibWlsLiIsYmls''@;'; put 'put ''bGlvbjoibWxkLiIsdHJpbGxpb246ImJpbC4ifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxzcGFjZVNlcGFyYXRlZDohMCxjdXJyZW5jeTp7c3ltYm9sOiJLXHUwMTBkIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiQ1pLIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJh''@;'; put 'put ''dGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxzcGFjZVNlcGFyYXRlZEFiYnJldmlhdGlvbjohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJh''@;'; put 'put ''Z2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxs''@;'; put 'put ''V2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pO3ZhciBWPXAuZXhwb3J0cyx3PXtleHBvcnRzOnt9fTshZnVuY3Rpb24obnIpe25yLmV4cG9ydHM9ZnVuY3Rpb24gYWkoVXQpe3JldHVy''@;'; put 'put ''biBVdCYmVXQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFV0LCJkZWZhdWx0Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdlVGFnOiJkYS1ESyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhv''@;'; put 'put ''dXNhbmQ6InQiLG1pbGxpb246Im1pbyIsYmlsbGlvbjoibWlhIix0cmlsbGlvbjoiYiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6ImtyIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiREtLIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJh''@;'; put 'put ''dGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291''@;'; put 'put ''dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVu''@;'; put 'put ''Y3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfSh3KTt2YXIgUD13LmV4cG9ydHMsRj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGFpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVj''@;'; put 'put ''dC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9KHtsYW5ndWFnZVRhZzoiZGUtQVQiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxs''@;'; put 'put ''aW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIsY29kZToiRVVSIn19KX0oRik7dmFyIFI9Ri5leHBvcnRzLHo9e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1mdW5jdGlvbiBhaShV''@;'; put 'put ''dCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6ImRlLUNIIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ilx1MjAxOSIsZGVjaW1hbDoiLiJ9LGFiYnJl''@;'; put 'put ''dmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6IkNIRiIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkNIRiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91''@;'; put 'put ''c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIs''@;'; put 'put ''bWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0''@;'; put 'put ''ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KHopO3ZhciBOPXouZXhwb3J0cyxPPXtleHBvcnRzOnt9fTshZnVuY3Rpb24obnIpe25yLmV4cG9ydHM9ZnVuY3Rpb24gYWkoVXQpe3JldHVybiBVdCYmVXQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNP''@;'; put 'put ''d25Qcm9wZXJ0eS5jYWxsKFV0LCJkZWZhdWx0Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdlVGFnOiJkZS1ERSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Ik1pIixiaWxsaW9uOiJNYSIsdHJpbGxp''@;'; put 'put ''b246IkJpIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sc3BhY2VTZXBhcmF0ZWQ6ITAsY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3RvdGFsTGVuZ3RoOjQsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9''@;'; put 'put ''LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhU''@;'; put 'put ''d29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KE8pO3ZhciBLPU8uZXhwb3J0''@;'; put 'put ''cyxaPXtleHBvcnRzOnt9fTshZnVuY3Rpb24obnIpe25yLmV4cG9ydHM9ZnVuY3Rpb24gYWkoVXQpe3JldHVybiBVdCYmVXQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFV0LCJkZWZhdWx0Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdlVGFnOiJk''@;'; put 'put ''ZS1MSSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiInIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiQ0hGIixw''@;'; put 'put ''b3NpdGlvbjoicG9zdGZpeCIsY29kZToiQ0hGIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExl''@;'; put 'put ''bmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNz''@;'; put 'put ''YToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShaKTt2YXIgWT1aLmV4cG9ydHMsVz17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG5y''@;'; put 'put ''KXtuci5leHBvcnRzPWZ1bmN0aW9uIGFpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9KHtsYW5ndWFnZVRhZzoiZWwiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIs''@;'; put 'put ''ZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTAzYzciLG1pbGxpb246Ilx1MDNiNSIsYmlsbGlvbjoiXHUwM2I0Iix0cmlsbGlvbjoiXHUwM2M0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixjb2RlOiJFVVIi''@;'; put 'put ''fX0pfShXKTt2YXIgcT1XLmV4cG9ydHMsZWU9e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1mdW5jdGlvbiBhaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZh''@;'; put 'put ''dWx0OlV0fSh7bGFuZ3VhZ2VUYWc6ImVuLUFVIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOlV0PT57bGV0IHRpPVV0JTEwO3JldHVy''@;'; put 'put ''biAxPT1+fihVdCUxMDAvMTApPyJ0aCI6MT09PXRpPyJzdCI6Mj09PXRpPyJuZCI6Mz09PXRpPyJyZCI6InRoIn0sY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InByZWZpeCIsY29kZToiQVVEIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3Ro''@;'; put 'put ''OjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e3Rob3VzYW5kU2VwYXJhdGVkOiEw''@;'; put 'put ''LG1hbnRpc3NhOjJ9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShlZSk7dmFyIEo9ZWUu''@;'; put 'put ''ZXhwb3J0cyxyZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGFpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9KHtsYW5ndWFn''@;'; put 'put ''ZVRhZzoiZW4tR0IiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6VXQ9PntsZXQgdGk9VXQlMTA7cmV0dXJuIDE9PX5+KFV0JTEwMC8x''@;'; put 'put ''MCk/InRoIjoxPT09dGk/InN0IjoyPT09dGk/Im5kIjozPT09dGk/InJkIjoidGgifSxjdXJyZW5jeTp7c3ltYm9sOiJceGEzIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJHQlAifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFy''@;'; put 'put ''YXRlZDohMSxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiExLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITEsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0''@;'; put 'put ''ZWQ6ITAsc3BhY2VTZXBhcmF0ZWQ6ITEsbWFudGlzc2E6Mn0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsc3BhY2VT''@;'; put 'put ''ZXBhcmF0ZWQ6ITEsbWFudGlzc2E6MH19fSl9KHJlKTt2YXIgaWU9cmUuZXhwb3J0cyx1ZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGFpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHku''@;'; put 'put ''Y2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9KHtsYW5ndWFnZVRhZzoiZW4tSUUiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGlu''@;'; put 'put ''YWw6VXQ9PntsZXQgdGk9VXQlMTA7cmV0dXJuIDE9PX5+KFV0JTEwMC8xMCk/InRoIjoxPT09dGk/InN0IjoyPT09dGk/Im5kIjozPT09dGk/InJkIjoidGgifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IkVVUiJ9fSl9KHVlKTt2YXIgZ2U9dWUu''@;'; put 'put ''ZXhwb3J0cyxfZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGFpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9KHtsYW5ndWFn''@;'; put 'put ''ZVRhZzoiZW4tTloiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6VXQ9PntsZXQgdGk9VXQlMTA7cmV0dXJuIDE9PX5+KFV0JTEwMC8x''@;'; put 'put ''MCk/InRoIjoxPT09dGk/InN0IjoyPT09dGk/Im5kIjozPT09dGk/InJkIjoidGgifSxjdXJyZW5jeTp7c3ltYm9sOiIkIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJOWkQifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRl''@;'; put 'put ''ZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6Mn0sZnVs''@;'; put 'put ''bFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KF9lKTt2YXIgVGU9X2UuZXhwb3J0cyxNZT17ZXhw''@;'; put 'put ''b3J0czp7fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGFpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9KHtsYW5ndWFnZVRhZzoiZW4tWkEiLGRl''@;'; put 'put ''bGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6VXQ9PntsZXQgdGk9VXQlMTA7cmV0dXJuIDE9PX5+KFV0JTEwMC8xMCk/InRoIjoxPT09dGk/''@;'; put 'put ''InN0IjoyPT09dGk/Im5kIjozPT09dGk/InJkIjoidGgifSxjdXJyZW5jeTp7c3ltYm9sOiJSIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJaQVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFy''@;'; put 'put ''YXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6Mn0sZnVsbFdpdGhUd29EZWNpbWFs''@;'; put 'put ''c05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KE1lKTt2YXIgWmU9TWUuZXhwb3J0cyxCPXtleHBvcnRzOnt9fTshZnVuY3Rp''@;'; put 'put ''b24obnIpe25yLmV4cG9ydHM9ZnVuY3Rpb24gYWkoVXQpe3JldHVybiBVdCYmVXQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFV0LCJkZWZhdWx0Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdlVGFnOiJlcy1BUiIsZGVsaW1pdGVyczp7dGhvdXNh''@;'; put 'put ''bmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im1tIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6VXQ9PntsZXQgdGk9VXQlMTA7cmV0dXJuIDE9PT10aXx8Mz09PXRpPyJlciI6Mj09PXRpPyJkbyI6Nz09PXRpfHwwPT09''@;'; put 'put ''dGk/Im1vIjo4PT09dGk/InZvIjo5PT09dGk/Im5vIjoidG8ifSxjdXJyZW5jeTp7c3ltYm9sOiIkIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiQVJTIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VT''@;'; put 'put ''ZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAs''@;'; put 'put ''dGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1h''@;'; put 'put ''bnRpc3NhOjB9fX0pfShCKTt2YXIgZz1CLmV4cG9ydHMseT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGFpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIp''@;'; put 'put ''P1V0LmRlZmF1bHQ6VXR9KHtsYW5ndWFnZVRhZzoiZXMtQ0wiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOlV0PT57bGV0IHRpPVV0''@;'; put 'put ''JTEwO3JldHVybiAxPT09dGl8fDM9PT10aT8iZXIiOjI9PT10aT8iZG8iOjc9PT10aXx8MD09PXRpPyJtbyI6OD09PXRpPyJ2byI6OT09PXRpPyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InByZWZpeCIsY29kZToiQ0xQIn0sY3VycmVuY3lGb3JtYXQ6e291dHB1''@;'; put 'put ''dDoiY3VycmVuY3kiLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6''@;'; put 'put ''ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEw''@;'; put 'put ''LG1hbnRpc3NhOjB9fX0pfSh5KTt2YXIgeD15LmV4cG9ydHMsQz17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGFpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVs''@;'; put 'put ''dCIpP1V0LmRlZmF1bHQ6VXR9KHtsYW5ndWFnZVRhZzoiZXMtQ08iLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOlV0PT57bGV0IHRp''@;'; put 'put ''PVV0JTEwO3JldHVybiAxPT09dGl8fDM9PT10aT8iZXIiOjI9PT10aT8iZG8iOjc9PT10aXx8MD09PXRpPyJtbyI6OD09PXRpPyJ2byI6OT09PXRpPyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3Jt''@;'; put 'put ''YXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1''@;'; put 'put ''cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFj''@;'; put 'put ''ZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oQyk7dmFyIFQ9Qy5leHBvcnRzLEg9e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1mdW5jdGlvbiBhaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90''@;'; put 'put ''eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6ImVzLUNSIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJpbGxpb246ImIi''@;'; put 'put ''LHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpVdD0+e2xldCB0aT1VdCUxMDtyZXR1cm4gMT09PXRpfHwzPT09dGk/ImVyIjoyPT09dGk/ImRvIjo3PT09dGl8fDA9PT10aT8ibW8iOjg9PT10aT8idm8iOjk9PT10aT8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhMSIscG9zaXRpb246''@;'; put 'put ''InBvc3RmaXgiLGNvZGU6IkNSQyJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxz''@;'; put 'put ''cGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91''@;'; put 'put ''c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oSCk7dmFyIGo9SC5leHBvcnRzLEU9e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhw''@;'; put 'put ''b3J0cz1mdW5jdGlvbiBhaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6ImVzLUVTIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2lt''@;'; put 'put ''YWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpVdD0+e2xldCB0aT1VdCUxMDtyZXR1cm4gMT09PXRpfHwzPT09dGk/ImVyIjoyPT09dGk/ImRvIjo3PT09dGl8fDA9PT10aT8ibW8iOjg9PT10''@;'; put 'put ''aT8idm8iOjk9PT10aT8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkVVUiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVk''@;'; put 'put ''Q3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5k''@;'; put 'put ''U2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTow''@;'; put 'put ''fX19KX0oRSk7dmFyIG09RS5leHBvcnRzLEE9e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1mdW5jdGlvbiBhaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZh''@;'; put 'put ''dWx0OlV0fSh7bGFuZ3VhZ2VUYWc6ImVzLU1YIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbihVdCl7bGV0IHRpPVV0''@;'; put 'put ''JTEwO3JldHVybiAxPT09dGl8fDM9PT10aT8iZXIiOjI9PT10aT8iZG8iOjc9PT10aXx8MD09PXRpPyJtbyI6OD09PXRpPyJ2byI6OT09PXRpPyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6Ik1YTiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91''@;'; put 'put ''c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIs''@;'; put 'put ''bWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0''@;'; put 'put ''ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KEEpO3ZhciBhZT1BLmV4cG9ydHMsbmU9e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1mdW5jdGlvbiBhaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhh''@;'; put 'put ''c093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6ImVzLU5JIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJpbGxpb246ImIiLHRyaWxs''@;'; put 'put ''aW9uOiJ0In0sb3JkaW5hbDpVdD0+e2xldCB0aT1VdCUxMDtyZXR1cm4gMT09PXRpfHwzPT09dGk/ImVyIjoyPT09dGk/ImRvIjo3PT09dGl8fDA9PT10aT8ibW8iOjg9PT10aT8idm8iOjk9PT10aT8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6IkMkIixwb3NpdGlvbjoicHJlZml4Iixj''@;'; put 'put ''b2RlOiJOSU8ifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0''@;'; put 'put ''ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0''@;'; put 'put ''ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KG5lKTt2YXIgc2U9bmUuZXhwb3J0cyxDZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1''@;'; put 'put ''bmN0aW9uIGFpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9KHtsYW5ndWFnZVRhZzoiZXMtUEUiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9''@;'; put 'put ''LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOlV0PT57bGV0IHRpPVV0JTEwO3JldHVybiAxPT09dGl8fDM9PT10aT8iZXIiOjI9PT10aT8iZG8iOjc9PT10aXx8MD09PXRpPyJtbyI6OD09PXRpPyJ2byI6''@;'; put 'put ''OT09PXRpPyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiUy8uIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJQRU4ifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEw''@;'; put 'put ''LGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDoh''@;'; put 'put ''MH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KENlKTt2''@;'; put 'put ''YXIgVWU9Q2UuZXhwb3J0cyxKZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGFpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9''@;'; put 'put ''KHtsYW5ndWFnZVRhZzoiZXMtUFIiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOlV0PT57bGV0IHRpPVV0JTEwO3JldHVybiAxPT09''@;'; put 'put ''dGl8fDM9PT10aT8iZXIiOjI9PT10aT8iZG8iOjc9PT10aXx8MD09PXRpPyJtbyI6OD09PXRpPyJ2byI6OT09PXRpPyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InByZWZpeCIsY29kZToiVVNEIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEw''@;'; put 'put ''LHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoi''@;'; put 'put ''Y3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNw''@;'; put 'put ''YWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShKZSk7dmFyIGl0PUplLmV4cG9ydHMseGU9e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1mdW5jdGlvbiBhaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3Qu''@;'; put 'put ''cHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6ImVzLVNWIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJpbGxp''@;'; put 'put ''b246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpVdD0+e2xldCB0aT1VdCUxMDtyZXR1cm4gMT09PXRpfHwzPT09dGk/ImVyIjoyPT09dGk/ImRvIjo3PT09dGl8fDA9PT10aT8ibW8iOjg9PT10aT8idm8iOjk9PT10aT8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6IiQiLHBvc2l0aW9u''@;'; put 'put ''OiJwcmVmaXgiLGNvZGU6IlNWQyJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxz''@;'; put 'put ''cGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91''@;'; put 'put ''c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oeGUpO3ZhciB5ZT14ZS5leHBvcnRzLEtlPXtleHBvcnRzOnt9fTshZnVuY3Rpb24obnIpe25y''@;'; put 'put ''LmV4cG9ydHM9ZnVuY3Rpb24gYWkoVXQpe3JldHVybiBVdCYmVXQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFV0LCJkZWZhdWx0Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdlVGFnOiJldC1FRSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixk''@;'; put 'put ''ZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InR1aCIsbWlsbGlvbjoibWxuIixiaWxsaW9uOiJtbGQiLHRyaWxsaW9uOiJ0cmwifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2Rl''@;'; put 'put ''OiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6''@;'; put 'put ''ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6''@;'; put 'put ''ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KEtlKTt2YXIgamU9S2UuZXhwb3J0cyxrZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0''@;'; put 'put ''aW9uIGFpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9KHtsYW5ndWFnZVRhZzoiZmEtSVIiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiXHUwNjBjIixkZWNpbWFsOiIu''@;'; put 'put ''In0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1MDY0N1x1MDYzMlx1MDYyN1x1MDYzMSIsbWlsbGlvbjoiXHUwNjQ1XHUwNmNjXHUwNjQ0XHUwNmNjXHUwNjQ4XHUwNjQ2IixiaWxsaW9uOiJcdTA2NDVcdTA2Y2NcdTA2NDRcdTA2Y2NcdTA2MjdcdTA2MzFcdTA2MmYiLHRyaWxsaW9uOiJc''@;'; put 'put ''dTA2MmFcdTA2MzFcdTA2Y2NcdTA2NDRcdTA2Y2NcdTA2NDhcdTA2NDYifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIlx1MDYyN1x1MDY0NSJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1ZmRmYyIsY29kZToiSVJSIn19KX0oa2UpO3ZhciBIZT1rZS5leHBvcnRzLExlPXtleHBvcnRzOnt9fTsh''@;'; put 'put ''ZnVuY3Rpb24obnIpe25yLmV4cG9ydHM9ZnVuY3Rpb24gYWkoVXQpe3JldHVybiBVdCYmVXQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFV0LCJkZWZhdWx0Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdlVGFnOiJmaS1GSSIsZGVsaW1pdGVyczp7''@;'; put 'put ''dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Ik0iLGJpbGxpb246IkciLHRyaWxsaW9uOiJUIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZp''@;'; put 'put ''eCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2Vw''@;'; put 'put ''YXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2Vw''@;'; put 'put ''YXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShMZSk7dmFyIFJlPUxlLmV4cG9ydHMsVmU9e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0''@;'; put 'put ''cz1mdW5jdGlvbiBhaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6ImZpbC1QSCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFs''@;'; put 'put ''OiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpVdD0+e2xldCB0aT1VdCUxMDtyZXR1cm4gMT09fn4oVXQlMTAwLzEwKT8idGgiOjE9PT10aT8ic3QiOjI9PT10aT8ibmQiOjM9PT10aT8icmQiOiJ0''@;'; put 'put ''aCJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBiMSIsY29kZToiUEhQIn19KX0oVmUpO3ZhciBBZT1WZS5leHBvcnRzLERlPXtleHBvcnRzOnt9fTshZnVuY3Rpb24obnIpe25yLmV4cG9ydHM9ZnVuY3Rpb24gYWkoVXQpe3JldHVybiBVdCYmVXQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlw''@;'; put 'put ''ZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFV0LCJkZWZhdWx0Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdlVGFnOiJmci1DQSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Ik0iLGJpbGxpb246IkciLHRy''@;'; put 'put ''aWxsaW9uOiJUIn0sb3JkaW5hbDpVdD0+MT09PVV0PyJlciI6Ilx4ZThtZSIsc3BhY2VTZXBhcmF0ZWQ6ITAsY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IlVTRCJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0''@;'; put 'put ''LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6Mn0sZnVsbFdpdGhUd29EZWNp''@;'; put 'put ''bWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KERlKTt2YXIgX3Q9RGUuZXhwb3J0cyxydD17ZXhwb3J0czp7fX07IWZ1''@;'; put 'put ''bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGFpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9KHtsYW5ndWFnZVRhZzoiZnItQ0giLGRlbGltaXRlcnM6e3Ro''@;'; put 'put ''b3VzYW5kczoiICIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6VXQ9PjE9PT1VdD8iZXIiOiJceGU4bWUiLGN1cnJlbmN5OntzeW1ib2w6IkNIRiIscG9zaXRpb246InBvc3RmaXgi''@;'; put 'put ''LGNvZGU6IkNIRiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFy''@;'; put 'put ''YXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFy''@;'; put 'put ''YXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0ocnQpO3ZhciBRZT1ydC5leHBvcnRzLHNuPXtleHBvcnRzOnt9fTshZnVuY3Rpb24obnIpe25yLmV4cG9ydHM9''@;'; put 'put ''ZnVuY3Rpb24gYWkoVXQpe3JldHVybiBVdCYmVXQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFV0LCJkZWZhdWx0Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdlVGFnOiJmci1GUiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIs''@;'; put 'put ''In0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Ik0iLGJpbGxpb246Ik1yZCIsdHJpbGxpb246ImJpbGxpb24ifSxvcmRpbmFsOlV0PT4xPT09VXQ/ImVyIjoiXHhlOG1lIixieXRlczp7YmluYXJ5U3VmZml4ZXM6WyJvIiwiS2lvIiwiTWlvIiwiR2lvIiwiVGlvIiwiUGlv''@;'; put 'put ''IiwiRWlvIiwiWmlvIiwiWWlvIl0sZGVjaW1hbFN1ZmZpeGVzOlsibyIsIktvIiwiTW8iLCJHbyIsIlRvIiwiUG8iLCJFbyIsIlpvIiwiWW8iXX0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5k''@;'; put 'put ''U2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1h''@;'; put 'put ''bHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoi''@;'; put 'put ''Y3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShzbik7dmFyIHZ0PXNuLmV4cG9ydHMsU3Q9e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1mdW5jdGlvbiBhaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9k''@;'; put 'put ''dWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6ImhlLUlMIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHUwNWQwXHUw''@;'; put 'put ''NWRjXHUwNWUzIixtaWxsaW9uOiJcdTA1ZGVcdTA1ZDlcdTA1ZGNcdTA1ZDlcdTA1ZDVcdTA1ZGYiLGJpbGxpb246Ilx1MDVkZVx1MDVkOVx1MDVkY1x1MDVkOVx1MDVkMFx1MDVlOFx1MDVkMyIsdHJpbGxpb246Ilx1MDVkOFx1MDVlOFx1MDVkOVx1MDVkY1x1MDVkOVx1MDVkNVx1MDVkZiJ9''@;'; put 'put ''LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYSIscG9zaXRpb246InByZWZpeCIsY29kZToiSUxTIn0sb3JkaW5hbDooKT0+IiIsY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeToh''@;'; put 'put ''MCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6''@;'; put 'put ''ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShTdCk7''@;'; put 'put ''dmFyIGVuPVN0LmV4cG9ydHMsdXQ9e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1mdW5jdGlvbiBhaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0''@;'; put 'put ''fSh7bGFuZ3VhZ2VUYWc6Imh1LUhVIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiRSIsbWlsbGlvbjoiTSIsYmlsbGlvbjoiTXJkIix0cmlsbGlvbjoiVCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJl''@;'; put 'put ''bmN5OntzeW1ib2w6IkZ0Iixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiSFVGIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntm''@;'; put 'put ''b3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNO''@;'; put 'put ''b0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfSh1dCk7dmFyIFhlPXV0LmV4cG9ydHMsdHQ9e2V4''@;'; put 'put ''cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1mdW5jdGlvbiBhaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6ImlkIixkZWxp''@;'; put 'put ''bWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiciIsbWlsbGlvbjoiaiIsYmlsbGlvbjoibSIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJScCIsY29kZToiSURSIn19''@;'; put 'put ''KX0odHQpO3ZhciBJZT10dC5leHBvcnRzLGF0PXtleHBvcnRzOnt9fTshZnVuY3Rpb24obnIpe25yLmV4cG9ydHM9ZnVuY3Rpb24gYWkoVXQpe3JldHVybiBVdCYmVXQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFV0LCJkZWZhdWx0Iik/VXQuZGVm''@;'; put 'put ''YXVsdDpVdH0oe2xhbmd1YWdlVGFnOiJpdC1DSCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiInIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Im1pbGEiLG1pbGxpb246Im1pbCIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''Ilx4YjAifSxjdXJyZW5jeTp7c3ltYm9sOiJDSEYiLGNvZGU6IkNIRiJ9fSl9KGF0KTt2YXIgdW49YXQuZXhwb3J0cyxJdD17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGFpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5''@;'; put 'put ''cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9KHtsYW5ndWFnZVRhZzoiaXQtSVQiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJtaWxhIixtaWxsaW9uOiJtaWwiLGJpbGxpb246''@;'; put 'put ''ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiJceGJhIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VT''@;'; put 'put ''ZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIs''@;'; put 'put ''c3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3Vz''@;'; put 'put ''YW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShJdCk7dmFyIFJ0PUl0LmV4cG9ydHMscmk9e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1mdW5jdGlvbiBhaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3Bl''@;'; put 'put ''cnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6ImphLUpQIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHU1MzQzIixtaWxsaW9uOiJcdTc2N2VcdTRlMDciLGJpbGxpb246Ilx1''@;'; put 'put ''NTM0MVx1NTEwNCIsdHJpbGxpb246Ilx1NTE0NiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx4YTUiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IkpQWSJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0''@;'; put 'put ''LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOnt0aG91c2FuZFNlcGFyYXRlZDohMCxt''@;'; put 'put ''YW50aXNzYToyfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0ocmkpO3ZhciBhbj1yaS5l''@;'; put 'put ''eHBvcnRzLGxuPXtleHBvcnRzOnt9fTshZnVuY3Rpb24obnIpe25yLmV4cG9ydHM9ZnVuY3Rpb24gYWkoVXQpe3JldHVybiBVdCYmVXQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFV0LCJkZWZhdWx0Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdl''@;'; put 'put ''VGFnOiJrby1LUiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1Y2M5YyIsbWlsbGlvbjoiXHViYzMxXHViOWNjIixiaWxsaW9uOiJcdWMyZWRcdWM1YjUiLHRyaWxsaW9uOiJcdWM3N2NcdWM4NzAifSxvcmRpbmFsOmZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYTkiLGNvZGU6IktQVyJ9fSl9KGxuKTt2YXIgbmk9bG4uZXhwb3J0cyxobj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGFpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUm''@;'; put 'put ''Jk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9KHtsYW5ndWFnZVRhZzoibHYtTFYiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJ0XHUwMTZia3N0LiIs''@;'; put 'put ''bWlsbGlvbjoibWlsai4iLGJpbGxpb246Im1sanJkLiIsdHJpbGxpb246InRyaWxqLiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkVVUiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNl''@;'; put 'put ''cGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxz''@;'; put 'put ''OntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1''@;'; put 'put ''cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oaG4pO3ZhciBodD1obi5leHBvcnRzLFJyPXtleHBvcnRzOnt9fTshZnVuY3Rpb24obnIpe25yLmV4cG9ydHM9ZnVuY3Rpb24gYWkoVXQpe3JldHVybiBVdCYmVXQuX19lc01vZHVs''@;'; put 'put ''ZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFV0LCJkZWZhdWx0Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdlVGFnOiJuYi1OTyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InQiLG1pbGxpb246''@;'; put 'put ''Ik0iLGJpbGxpb246Im1kIix0cmlsbGlvbjoiYiJ9LG9yZGluYWw6KCk9PiIiLGN1cnJlbmN5OntzeW1ib2w6ImtyIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiTk9LIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6''@;'; put 'put ''ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBh''@;'; put 'put ''cmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJh''@;'; put 'put ''dGVkOiEwLG1hbnRpc3NhOjB9fX0pfShScik7dmFyIEJ0PVJyLmV4cG9ydHMsQXQ9e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1mdW5jdGlvbiBhaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwo''@;'; put 'put ''VXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6Im5iIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoidCIsbWlsbGlvbjoibWlsIixiaWxsaW9uOiJtaWEiLHRyaWxsaW9uOiJiIn0sb3JkaW5hbDpm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoia3IiLGNvZGU6Ik5PSyJ9fSl9KEF0KTt2YXIgRm49QXQuZXhwb3J0cyxzdD17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGFpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9i''@;'; put 'put ''amVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9KHtsYW5ndWFnZVRhZzoibmwtQkUiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbG4i''@;'; put 'put ''LGJpbGxpb246Im1sZCIsdHJpbGxpb246ImJsbiJ9LG9yZGluYWw6VXQ9PntsZXQgdGk9VXQlMTAwO3JldHVybiAwIT09VXQmJnRpPD0xfHw4PT09dGl8fHRpPj0yMD8ic3RlIjoiZGUifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxj''@;'; put 'put ''dXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6''@;'; put 'put ''e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3Vy''@;'; put 'put ''cmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShzdCk7dmFyIFp0PXN0LmV4cG9ydHMsUXI9e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1mdW5jdGlvbiBhaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxl''@;'; put 'put ''JiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6Im5sLU5MIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoi''@;'; put 'put ''bWxuIixiaWxsaW9uOiJtcmQiLHRyaWxsaW9uOiJibG4ifSxvcmRpbmFsOlV0PT57bGV0IHRpPVV0JTEwMDtyZXR1cm4gMCE9PVV0JiZ0aTw9MXx8OD09PXRpfHx0aT49MjA/InN0ZSI6ImRlIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJFVVIi''@;'; put 'put ''fSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZl''@;'; put 'put ''cmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1''@;'; put 'put ''bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KFFyKTt2YXIgWWU9UXIuZXhwb3J0cyxUdD17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGFp''@;'; put 'put ''KFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9KHtsYW5ndWFnZVRhZzoibm4iLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlv''@;'; put 'put ''bnM6e3Rob3VzYW5kOiJ0IixtaWxsaW9uOiJtaWwiLGJpbGxpb246Im1pYSIsdHJpbGxpb246ImIifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJrciIsY29kZToiTk9LIn19KX0oVHQpO3ZhciBycj1UdC5leHBvcnRzLGZ0PXtleHBvcnRzOnt9fTsh''@;'; put 'put ''ZnVuY3Rpb24obnIpe25yLmV4cG9ydHM9ZnVuY3Rpb24gYWkoVXQpe3JldHVybiBVdCYmVXQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFV0LCJkZWZhdWx0Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdlVGFnOiJwbC1QTCIsZGVsaW1pdGVyczp7''@;'; put 'put ''dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InR5cy4iLG1pbGxpb246Im1sbiIsYmlsbGlvbjoibWxkIix0cmlsbGlvbjoiYmxuIn0sb3JkaW5hbDooKT0+Ii4iLGN1cnJlbmN5OntzeW1ib2w6IiB6XHUwMTQyIixwb3NpdGlvbjoicG9zdGZpeCIs''@;'; put 'put ''Y29kZToiUExOIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJh''@;'; put 'put ''dGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJh''@;'; put 'put ''dGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShmdCk7dmFyIE10PWZ0LmV4cG9ydHMsWm49e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1m''@;'; put 'put ''dW5jdGlvbiBhaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6InB0LUJSIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6Iiwi''@;'; put 'put ''fSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoibWlsIixtaWxsaW9uOiJtaWxoXHhmNWVzIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iXHhiYSJ9LGN1cnJlbmN5OntzeW1ib2w6IlIkIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJCUkwifSxj''@;'; put 'put ''dXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6''@;'; put 'put ''e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3Vy''@;'; put 'put ''cmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShabik7dmFyIG5uPVpuLmV4cG9ydHMsV3Q9e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1mdW5jdGlvbiBhaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxl''@;'; put 'put ''JiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6InB0LVBUIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoi''@;'; put 'put ''bSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIlx4YmEifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5n''@;'; put 'put ''dGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6''@;'; put 'put ''ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEw''@;'; put 'put ''LG1hbnRpc3NhOjB9fX0pfShXdCk7dmFyIGRpPVd0LmV4cG9ydHMsZG49e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1mdW5jdGlvbiBhaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRl''@;'; put 'put ''ZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6InJvLVJPIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoibWlpIixtaWxsaW9uOiJtaWwiLGJpbGxpb246Im1sZCIsdHJpbGxpb246ImJsbiJ9LG9yZGluYWw6''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6IiBsZWkiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJST04ifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJl''@;'; put 'put ''bmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFy''@;'; put 'put ''YXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9''@;'; put 'put ''KGRuKTt2YXIgbW49ZG4uZXhwb3J0cyxwaT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGFpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1''@;'; put 'put ''bHQ6VXR9KHtsYW5ndWFnZVRhZzoicm8tUk8iLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJtaWkiLG1pbGxpb246Im1pbCIsYmlsbGlvbjoibWxkIix0cmlsbGlvbjoiYmxuIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biIuIn0sY3VycmVuY3k6e3N5bWJvbDoiIGxlaSIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IlJPTiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZToh''@;'; put 'put ''MH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0''@;'; put 'put ''aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0ocGkpO3ZhciBmbj1waS5l''@;'; put 'put ''eHBvcnRzLHRuPXtleHBvcnRzOnt9fTshZnVuY3Rpb24obnIpe25yLmV4cG9ydHM9ZnVuY3Rpb24gYWkoVXQpe3JldHVybiBVdCYmVXQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFV0LCJkZWZhdWx0Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdl''@;'; put 'put ''VGFnOiJydS1SVSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1MDQ0Mlx1MDQ0Ylx1MDQ0MS4iLG1pbGxpb246Ilx1MDQzY1x1MDQzYlx1MDQzZCIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTA0NDBcdTA0NDNcdTA0MzEuIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiUlVCIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZToh''@;'; put 'put ''MH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0''@;'; put 'put ''aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0odG4pO3ZhciBjYT10bi5l''@;'; put 'put ''eHBvcnRzLF9pPXtleHBvcnRzOnt9fTshZnVuY3Rpb24obnIpe25yLmV4cG9ydHM9ZnVuY3Rpb24gYWkoVXQpe3JldHVybiBVdCYmVXQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFV0LCJkZWZhdWx0Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdl''@;'; put 'put ''VGFnOiJydS1VQSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1MDQ0Mlx1MDQ0Ylx1MDQ0MS4iLG1pbGxpb246Ilx1MDQzY1x1MDQzYlx1MDQzZCIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYjQiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJVQUgifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntm''@;'; put 'put ''b3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNO''@;'; put 'put ''b0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShfaSk7dmFyIHZyPV9pLmV4cG9ydHMsWGk9e2V4''@;'; put 'put ''cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1mdW5jdGlvbiBhaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6InNrLVNLIixk''@;'; put 'put ''ZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ilx4YTAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoidGlzLiIsbWlsbGlvbjoibWlsLiIsYmlsbGlvbjoibWxkLiIsdHJpbGxpb246ImJpbC4ifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxzcGFjZVNlcGFyYXRlZDoh''@;'; put 'put ''MCxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9''@;'; put 'put ''LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhU''@;'; put 'put ''d29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KFhpKTt2YXIgUWk9WGkuZXhw''@;'; put 'put ''b3J0cyxWaT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGFpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9KHtsYW5ndWFnZVRh''@;'; put 'put ''Zzoic2wiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJ0aXMuIixtaWxsaW9uOiJtaWwuIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6''@;'; put 'put ''Ilx1MjBhYyIsY29kZToiRVVSIn19KX0oVmkpO3ZhciBlaT1WaS5leHBvcnRzLHVhPXtleHBvcnRzOnt9fTshZnVuY3Rpb24obnIpe25yLmV4cG9ydHM9ZnVuY3Rpb24gYWkoVXQpe3JldHVybiBVdCYmVXQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxs''@;'; put 'put ''KFV0LCJkZWZhdWx0Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdlVGFnOiJzci1DeXJsLVJTIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHUwNDQyXHUwNDRiXHUwNDQxLiIsbWlsbGlvbjoiXHUwNDNjXHUwNDNiXHUw''@;'; put 'put ''NDNkIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6KCk9PiIuIixjdXJyZW5jeTp7c3ltYm9sOiJSU0QiLGNvZGU6IlJTRCJ9fSl9KHVhKTt2YXIgUmk9dWEuZXhwb3J0cyxEYT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGFpKFV0KXty''@;'; put 'put ''ZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9KHtsYW5ndWFnZVRhZzoic3YtU0UiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6''@;'; put 'put ''e3Rob3VzYW5kOiJ0IixtaWxsaW9uOiJNIixiaWxsaW9uOiJtZCIsdHJpbGxpb246InRtZCJ9LG9yZGluYWw6KCk9PiIiLGN1cnJlbmN5OntzeW1ib2w6ImtyIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiU0VLIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFs''@;'; put 'put ''TGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJh''@;'; put 'put ''dGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRl''@;'; put 'put ''ZDohMCxtYW50aXNzYTowfX19KX0oRGEpO3ZhciBoaT1EYS5leHBvcnRzLHFpPXtleHBvcnRzOnt9fTshZnVuY3Rpb24obnIpe25yLmV4cG9ydHM9ZnVuY3Rpb24gYWkoVXQpe3JldHVybiBVdCYmVXQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFV0''@;'; put 'put ''LCJkZWZhdWx0Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdlVGFnOiJ0aC1USCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1MGUxZVx1MGUzMVx1MGUxOSIsbWlsbGlvbjoiXHUwZTI1XHUwZTQ5XHUwZTMyXHUwZTE5''@;'; put 'put ''IixiaWxsaW9uOiJcdTBlMWVcdTBlMzFcdTBlMTlcdTBlMjVcdTBlNDlcdTBlMzJcdTBlMTkiLHRyaWxsaW9uOiJcdTBlMjVcdTBlNDlcdTBlMzJcdTBlMTlcdTBlMjVcdTBlNDlcdTBlMzJcdTBlMTkifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJc''@;'; put 'put ''dTBlM2YiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJUSEIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJh''@;'; put 'put ''dGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJh''@;'; put 'put ''dGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShxaSk7dmFyIFBhPXFpLmV4cG9ydHMsdXI9e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1m''@;'; put 'put ''dW5jdGlvbigpe2NvbnN0IFV0PXsxOiInaW5jaSIsNToiJ2luY2kiLDg6IidpbmNpIiw3MDoiJ2luY2kiLDgwOiInaW5jaSIsMjoiJ25jaSIsNzoiJ25jaSIsMjA6IiduY2kiLDUwOiInbmNpIiwzOiInXHhmY25jXHhmYyIsNDoiJ1x4ZmNuY1x4ZmMiLDEwMDoiJ1x4ZmNuY1x4ZmMiLDY6Iidu''@;'; put 'put ''Y1x1MDEzMSIsOToiJ3VuY3UiLDEwOiIndW5jdSIsMzA6Iid1bmN1Iiw0MDoiJ1x1MDEzMW5jXHUwMTMxIiw2MDoiJ1x1MDEzMW5jXHUwMTMxIiw5MDoiJ1x1MDEzMW5jXHUwMTMxIn07cmV0dXJuIGZ1bmN0aW9uIGFpKHRpKXtyZXR1cm4gdGkmJnRpLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90''@;'; put 'put ''b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aSwiZGVmYXVsdCIpP3RpLmRlZmF1bHQ6dGl9KHtsYW5ndWFnZVRhZzoidHItVFIiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJiaW4iLG1pbGxpb246Im1pbHlvbiIsYmls''@;'; put 'put ''bGlvbjoibWlseWFyIix0cmlsbGlvbjoidHJpbHlvbiJ9LG9yZGluYWw6dGk9PntpZigwPT09dGkpcmV0dXJuIidcdTAxMzFuY1x1MDEzMSI7bGV0IHVjPXRpJTEwO3JldHVybiBVdFt1Y118fFV0W3RpJTEwMC11Y118fFV0W3RpPj0xMDA/MTAwOm51bGxdfSxjdXJyZW5jeTp7c3ltYm9sOiJc''@;'; put 'put ''dTIwYmEiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJUUlkifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6''@;'; put 'put ''e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6''@;'; put 'put ''e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KCl9KHVyKTt2YXIgYmE9dXIuZXhwb3J0cyxNaT17ZXhwb3J0czp7''@;'; put 'put ''fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGFpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9KHtsYW5ndWFnZVRhZzoidWstVUEiLGRlbGltaXRl''@;'; put 'put ''cnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTA0NDJcdTA0MzhcdTA0NDEuIixtaWxsaW9uOiJcdTA0M2NcdTA0M2JcdTA0M2QiLGJpbGxpb246Ilx1MDQzY1x1MDQzYlx1MDQ0MFx1MDQzNCIsdHJpbGxpb246Ilx1MDQzMVx1MDQzYlx1''@;'; put 'put ''MDQzZCJ9LG9yZGluYWw6KCk9PiIiLGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBiNCIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IlVBSCJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1h''@;'; put 'put ''dHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNp''@;'; put 'put ''bWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KE1pKTt2YXIgd2E9TWkuZXhwb3J0cyxl''@;'; put 'put ''YT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGFpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9KHtsYW5ndWFnZVRhZzoiemgt''@;'; put 'put ''Q04iLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTUzNDMiLG1pbGxpb246Ilx1NzY3ZVx1NGUwNyIsYmlsbGlvbjoiXHU1MzQxXHU0ZWJmIix0cmlsbGlvbjoiXHU1MTQ2In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHhhNSIscG9zaXRpb246InByZWZpeCIsY29kZToiQ05ZIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90''@;'; put 'put ''YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOnt0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYToyfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdp''@;'; put 'put ''dGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oZWEpO3ZhciBGcj1lYS5leHBvcnRzLGNvPXtleHBvcnRzOnt9fTshZnVuY3Rpb24obnIpe25yLmV4cG9ydHM9ZnVuY3Rpb24gYWkoVXQpe3JldHVybiBVdCYmVXQuX19l''@;'; put 'put ''c01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFV0LCJkZWZhdWx0Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdlVGFnOiJ6aC1NTyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1NTM0''@;'; put 'put ''MyIsbWlsbGlvbjoiXHU3NjdlXHU4NDJjIixiaWxsaW9uOiJcdTUzNDFcdTUxMDQiLHRyaWxsaW9uOiJcdTUxNDYifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJNT1AiLGNvZGU6Ik1PUCJ9fSl9KGNvKTt2YXIgWWE9Y28uZXhwb3J0cywkYz17ZXhw''@;'; put 'put ''b3J0czp7fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGFpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9KHtsYW5ndWFnZVRhZzoiemgtU0ciLGRl''@;'; put 'put ''bGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTUzNDMiLG1pbGxpb246Ilx1NzY3ZVx1NGUwNyIsYmlsbGlvbjoiXHU1MzQxXHU0ZWJmIix0cmlsbGlvbjoiXHU1MTQ2In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0s''@;'; put 'put ''Y3VycmVuY3k6e3N5bWJvbDoiJCIsY29kZToiU0dEIn19KX0oJGMpO3ZhciB2MT0kYy5leHBvcnRzLFByPXtleHBvcnRzOnt9fTshZnVuY3Rpb24obnIpe25yLmV4cG9ydHM9ZnVuY3Rpb24gYWkoVXQpe3JldHVybiBVdCYmVXQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Q''@;'; put 'put ''cm9wZXJ0eS5jYWxsKFV0LCJkZWZhdWx0Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdlVGFnOiJ6aC1UVyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1NTM0MyIsbWlsbGlvbjoiXHU3NjdlXHU4NDJjIixiaWxsaW9u''@;'; put 'put ''OiJcdTUzNDFcdTUxMDQiLHRyaWxsaW9uOiJcdTUxNDYifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIlx1N2IyYyJ9LGN1cnJlbmN5OntzeW1ib2w6Ik5UJCIsY29kZToiVFdEIn19KX0oUHIpO3ZhciBkMD1Qci5leHBvcnRzO3JldHVybiBmdW5jdGlvbihucil7bnIuYmc9XyxuclsiY3Mt''@;'; put 'put ''Q1oiXT1WLG5yWyJkYS1ESyJdPVAsbnJbImRlLUFUIl09UixuclsiZGUtQ0giXT1OLG5yWyJkZS1ERSJdPUssbnJbImRlLUxJIl09WSxuci5lbD1xLG5yWyJlbi1BVSJdPUosbnJbImVuLUdCIl09aWUsbnJbImVuLUlFIl09Z2UsbnJbImVuLU5aIl09VGUsbnJbImVuLVpBIl09WmUsbnJbImVz''@;'; put 'put ''LUFSIl09ZyxuclsiZXMtQ0wiXT14LG5yWyJlcy1DTyJdPVQsbnJbImVzLUNSIl09aixuclsiZXMtRVMiXT1tLG5yWyJlcy1NWCJdPWFlLG5yWyJlcy1OSSJdPXNlLG5yWyJlcy1QRSJdPVVlLG5yWyJlcy1QUiJdPWl0LG5yWyJlcy1TViJdPXllLG5yWyJldC1FRSJdPWplLG5yWyJmYS1JUiJd''@;'; put 'put ''PUhlLG5yWyJmaS1GSSJdPVJlLG5yWyJmaWwtUEgiXT1BZSxuclsiZnItQ0EiXT1fdCxuclsiZnItQ0giXT1RZSxuclsiZnItRlIiXT12dCxuclsiaGUtSUwiXT1lbixuclsiaHUtSFUiXT1YZSxuci5pZD1JZSxuclsiaXQtQ0giXT11bixuclsiaXQtSVQiXT1SdCxuclsiamEtSlAiXT1hbixu''@;'; put 'put ''clsia28tS1IiXT1uaSxuclsibHYtTFYiXT1odCxuclsibmItTk8iXT1CdCxuci5uYj1GbixuclsibmwtQkUiXT1adCxuclsibmwtTkwiXT1ZZSxuci5ubj1ycixuclsicGwtUEwiXT1NdCxuclsicHQtQlIiXT1ubixuclsicHQtUFQiXT1kaSxuclsicm8tUk8iXT1tbixuci5ybz1mbixuclsi''@;'; put 'put ''cnUtUlUiXT1jYSxuclsicnUtVUEiXT12cixuclsic2stU0siXT1RaSxuci5zbD1laSxuclsic3ItQ3lybC1SUyJdPVJpLG5yWyJzdi1TRSJdPWhpLG5yWyJ0aC1USCJdPVBhLG5yWyJ0ci1UUiJdPWJhLG5yWyJ1ay1VQSJdPXdhLG5yWyJ6aC1DTiJdPUZyLG5yWyJ6aC1NTyJdPVlhLG5yWyJ6''@;'; put 'put ''aC1TRyJdPXYxLG5yWyJ6aC1UVyJdPWQwfShiKSxmdW5jdGlvbiBYKG5yKXtyZXR1cm4gbnImJm5yLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuciwiZGVmYXVsdCIpP25yLmRlZmF1bHQ6bnJ9KGIpfSgpfSw3ODQ1NDooY2UsWCxiKT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgST1iKDU0MjcyKS5CdWZmZXIsXz1JLmlzRW5jb2Rpbmd8fGZ1bmN0aW9uKEope3N3aXRjaCgoSj0iIitKKSYmSi50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNh''@;'; put 'put ''c2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpjYXNlInJhdyI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19O2Z1bmN0aW9uIHcoSil7dmFyIHJlO3N3aXRjaCh0aGlzLmVuY29kaW5nPWZ1bmN0aW9uIFYoSil7dmFyIHJlPWZ1bmN0aW9uIHAoSil7''@;'; put 'put ''aWYoIUopcmV0dXJuInV0ZjgiO2Zvcih2YXIgcmU7Oylzd2l0Y2goSil7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4idXRmOCI7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiJ1dGYxNmxlIjtjYXNlImxhdGluMSI6Y2FzZSJi''@;'; put 'put ''aW5hcnkiOnJldHVybiJsYXRpbjEiO2Nhc2UiYmFzZTY0IjpjYXNlImFzY2lpIjpjYXNlImhleCI6cmV0dXJuIEo7ZGVmYXVsdDppZihyZSlyZXR1cm47Sj0oIiIrSikudG9Mb3dlckNhc2UoKSxyZT0hMH19KEopO2lmKCJzdHJpbmciIT10eXBlb2YgcmUmJihJLmlzRW5jb2Rpbmc9PT1ffHwh''@;'; put 'put ''XyhKKSkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK0opO3JldHVybiByZXx8Sn0oSiksdGhpcy5lbmNvZGluZyl7Y2FzZSJ1dGYxNmxlIjp0aGlzLnRleHQ9Syx0aGlzLmVuZD1aLHJlPTQ7YnJlYWs7Y2FzZSJ1dGY4Ijp0aGlzLmZpbGxMYXN0PXoscmU9NDticmVhaztj''@;'; put 'put ''YXNlImJhc2U2NCI6dGhpcy50ZXh0PVksdGhpcy5lbmQ9VyxyZT0zO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHRoaXMud3JpdGU9cSx2b2lkKHRoaXMuZW5kPWVlKX10aGlzLmxhc3ROZWVkPTAsdGhpcy5sYXN0VG90YWw9MCx0aGlzLmxhc3RDaGFyPUkuYWxsb2NVbnNhZmUocmUpfWZ1bmN0aW9u''@;'; put 'put ''IFAoSil7cmV0dXJuIEo8PTEyNz8wOko+PjU9PTY/MjpKPj40PT0xND8zOko+PjM9PTMwPzQ6Sj4+Nj09Mj8tMTotMn1mdW5jdGlvbiB6KEope3ZhciByZT10aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLGllPWZ1bmN0aW9uIFIoSixyZSl7aWYoMTI4IT0oMTkyJnJlWzBdKSlyZXR1cm4g''@;'; put 'put ''Si5sYXN0TmVlZD0wLCJcdWZmZmQiO2lmKEoubGFzdE5lZWQ+MSYmcmUubGVuZ3RoPjEpe2lmKDEyOCE9KDE5MiZyZVsxXSkpcmV0dXJuIEoubGFzdE5lZWQ9MSwiXHVmZmZkIjtpZihKLmxhc3ROZWVkPjImJnJlLmxlbmd0aD4yJiYxMjghPSgxOTImcmVbMl0pKXJldHVybiBKLmxhc3ROZWVk''@;'; put 'put ''PTIsIlx1ZmZmZCJ9fSh0aGlzLEopO3JldHVybiB2b2lkIDAhPT1pZT9pZTp0aGlzLmxhc3ROZWVkPD1KLmxlbmd0aD8oSi5jb3B5KHRoaXMubGFzdENoYXIscmUsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCkp''@;'; put 'put ''OihKLmNvcHkodGhpcy5sYXN0Q2hhcixyZSwwLEoubGVuZ3RoKSx2b2lkKHRoaXMubGFzdE5lZWQtPUoubGVuZ3RoKSl9ZnVuY3Rpb24gSyhKLHJlKXtpZigoSi5sZW5ndGgtcmUpJTI9PTApe3ZhciBpZT1KLnRvU3RyaW5nKCJ1dGYxNmxlIixyZSk7aWYoaWUpe3ZhciB1ZT1pZS5jaGFyQ29k''@;'; put 'put ''ZUF0KGllLmxlbmd0aC0xKTtpZih1ZT49NTUyOTYmJnVlPD01NjMxOSlyZXR1cm4gdGhpcy5sYXN0TmVlZD0yLHRoaXMubGFzdFRvdGFsPTQsdGhpcy5sYXN0Q2hhclswXT1KW0oubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09SltKLmxlbmd0aC0xXSxpZS5zbGljZSgwLC0xKX1yZXR1cm4g''@;'; put 'put ''aWV9cmV0dXJuIHRoaXMubGFzdE5lZWQ9MSx0aGlzLmxhc3RUb3RhbD0yLHRoaXMubGFzdENoYXJbMF09SltKLmxlbmd0aC0xXSxKLnRvU3RyaW5nKCJ1dGYxNmxlIixyZSxKLmxlbmd0aC0xKX1mdW5jdGlvbiBaKEope3ZhciByZT1KJiZKLmxlbmd0aD90aGlzLndyaXRlKEopOiIiO3JldHVy''@;'; put 'put ''biB0aGlzLmxhc3ROZWVkP3JlK3RoaXMubGFzdENoYXIudG9TdHJpbmcoInV0ZjE2bGUiLDAsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCk6cmV9ZnVuY3Rpb24gWShKLHJlKXt2YXIgaWU9KEoubGVuZ3RoLXJlKSUzO3JldHVybiAwPT09aWU/Si50b1N0cmluZygiYmFzZTY0IixyZSk6''@;'; put 'put ''KHRoaXMubGFzdE5lZWQ9My1pZSx0aGlzLmxhc3RUb3RhbD0zLDE9PT1pZT90aGlzLmxhc3RDaGFyWzBdPUpbSi5sZW5ndGgtMV06KHRoaXMubGFzdENoYXJbMF09SltKLmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFyWzFdPUpbSi5sZW5ndGgtMV0pLEoudG9TdHJpbmcoImJhc2U2NCIscmUsSi5s''@;'; put 'put ''ZW5ndGgtaWUpKX1mdW5jdGlvbiBXKEope3ZhciByZT1KJiZKLmxlbmd0aD90aGlzLndyaXRlKEopOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP3JlK3RoaXMubGFzdENoYXIudG9TdHJpbmcoImJhc2U2NCIsMCwzLXRoaXMubGFzdE5lZWQpOnJlfWZ1bmN0aW9uIHEoSil7cmV0dXJuIEoudG9T''@;'; put 'put ''dHJpbmcodGhpcy5lbmNvZGluZyl9ZnVuY3Rpb24gZWUoSil7cmV0dXJuIEomJkoubGVuZ3RoP3RoaXMud3JpdGUoSik6IiJ9WC5JPXcsdy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oSil7aWYoMD09PUoubGVuZ3RoKXJldHVybiIiO3ZhciByZSxpZTtpZih0aGlzLmxhc3ROZWVkKXtpZih2''@;'; put 'put ''b2lkIDA9PT0ocmU9dGhpcy5maWxsTGFzdChKKSkpcmV0dXJuIiI7aWU9dGhpcy5sYXN0TmVlZCx0aGlzLmxhc3ROZWVkPTB9ZWxzZSBpZT0wO3JldHVybiBpZTxKLmxlbmd0aD9yZT9yZSt0aGlzLnRleHQoSixpZSk6dGhpcy50ZXh0KEosaWUpOnJlfHwiIn0sdy5wcm90b3R5cGUuZW5kPWZ1''@;'; put 'put ''bmN0aW9uIE8oSil7dmFyIHJlPUomJkoubGVuZ3RoP3RoaXMud3JpdGUoSik6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/cmUrIlx1ZmZmZCI6cmV9LHcucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24gTihKLHJlKXt2YXIgaWU9ZnVuY3Rpb24gRihKLHJlLGllKXt2YXIgdWU9cmUubGVuZ3RoLTE7''@;'; put 'put ''aWYodWU8aWUpcmV0dXJuIDA7dmFyIGdlPVAocmVbdWVdKTtyZXR1cm4gZ2U+PTA/KGdlPjAmJihKLmxhc3ROZWVkPWdlLTEpLGdlKTotLXVlPGllfHwtMj09PWdlPzA6KGdlPVAocmVbdWVdKSk+PTA/KGdlPjAmJihKLmxhc3ROZWVkPWdlLTIpLGdlKTotLXVlPGllfHwtMj09PWdlPzA6KGdl''@;'; put 'put ''PVAocmVbdWVdKSk+PTA/KGdlPjAmJigyPT09Z2U/Z2U9MDpKLmxhc3ROZWVkPWdlLTMpLGdlKTowfSh0aGlzLEoscmUpO2lmKCF0aGlzLmxhc3ROZWVkKXJldHVybiBKLnRvU3RyaW5nKCJ1dGY4IixyZSk7dGhpcy5sYXN0VG90YWw9aWU7dmFyIHVlPUoubGVuZ3RoLShpZS10aGlzLmxhc3RO''@;'; put 'put ''ZWVkKTtyZXR1cm4gSi5jb3B5KHRoaXMubGFzdENoYXIsMCx1ZSksSi50b1N0cmluZygidXRmOCIscmUsdWUpfSx3LnByb3RvdHlwZS5maWxsTGFzdD1mdW5jdGlvbihKKXtpZih0aGlzLmxhc3ROZWVkPD1KLmxlbmd0aClyZXR1cm4gSi5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90''@;'; put 'put ''YWwtdGhpcy5sYXN0TmVlZCwwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKTtKLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsSi5sZW5ndGgpLHRoaXMubGFzdE5lZWQt''@;'; put 'put ''PUoubGVuZ3RofX0sNzg1Mjg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7WC5zaGExPWIoMzM0NjgpLFguc2hhMjI0PWIoNTU2MyksWC5zaGEyNTY9YigyNzEzOCksWC5zaGEzODQ9Yig5Mzg5OCksWC5zaGE1MTI9YigxMDgyNyl9LDc4NzE5OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkp''@;'; put 'put ''eyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgicHQiLHttb250aHM6ImphbmVpcm9fZmV2ZXJlaXJvX21hclx4ZTdvX2FicmlsX21haW9fanVuaG9fanVsaG9fYWdvc3RvX3NldGVtYnJvX291dHVicm9fbm92ZW1icm9fZGV6ZW1icm8iLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9m''@;'; put 'put ''ZXZfbWFyX2Ficl9tYWlfanVuX2p1bF9hZ29fc2V0X291dF9ub3ZfZGV6Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJEb21pbmdvX1NlZ3VuZGEtZmVpcmFfVGVyXHhlN2EtZmVpcmFfUXVhcnRhLWZlaXJhX1F1aW50YS1mZWlyYV9TZXh0YS1mZWlyYV9TXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vl''@;'; put 'put ''a2RheXNTaG9ydDoiRG9tX1NlZ19UZXJfUXVhX1F1aV9TZXhfU1x4ZTFiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJEb18yXHhhYV8zXHhhYV80XHhhYV81XHhhYV82XHhhYV9TXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDpt''@;'; put 'put ''bSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSG9qZSBceGUw''@;'; put 'put ''c10gTFQiLG5leHREYXk6IltBbWFuaFx4ZTMgXHhlMHNdIExUIixuZXh0V2VlazoiZGRkZCBbXHhlMHNdIExUIixsYXN0RGF5OiJbT250ZW0gXHhlMHNdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5kYXkoKXx8Nj09PXRoaXMuZGF5KCk/IltceGRhbHRpbW9dIGRk''@;'; put 'put ''ZGQgW1x4ZTBzXSBMVCI6IltceGRhbHRpbWFdIGRkZGQgW1x4ZTBzXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVtICVzIixwYXN0OiJoXHhlMSAlcyIsczoic2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW0gbWludXRvIixtbToiJWQgbWludXRvcyIs''@;'; put 'put ''aDoidW1hIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW0gZGlhIixkZDoiJWQgZGlhcyIsdzoidW1hIHNlbWFuYSIsd3c6IiVkIHNlbWFuYXMiLE06InVtIG1ceGVhcyIsTU06IiVkIG1lc2VzIix5OiJ1bSBhbm8iLHl5OiIlZCBhbm9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwy''@;'; put 'put ''fVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sNzg3Mjc6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigzMzk2MyksXz1iKDU1NTkyKSxwPUkuUmVnRXhwLFY9IV8oZnVuY3Rpb24oKXt2YXIgdz0hMDt0cnl7cCgiLiIsImQiKX1j''@;'; put 'put ''YXRjaHt3PSExfXZhciBQPXt9LEY9IiIsUj13PyJkZ2ltc3kiOiJnaW1zeSIsej1mdW5jdGlvbihaLFkpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShQLFose2dldDpmdW5jdGlvbigpe3JldHVybiBGKz1ZLCEwfX0pfSxOPXtkb3RBbGw6InMiLGdsb2JhbDoiZyIsaWdub3JlQ2FzZToiaSIsbXVs''@;'; put 'put ''dGlsaW5lOiJtIixzdGlja3k6InkifTtmb3IodmFyIE8gaW4gdyYmKE4uaGFzSW5kaWNlcz0iZCIpLE4peihPLE5bT10pO3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHAucHJvdG90eXBlLCJmbGFncyIpLmdldC5jYWxsKFApIT09Unx8RiE9PVJ9KTtjZS5leHBvcnRz''@;'; put 'put ''PXtjb3JyZWN0OlZ9fSw3ODc1NTooY2UsWCxiKT0+e3ZhciBJPWIoNjQzMTgpO2NlLmV4cG9ydHM9e1RleHRFbmNvZGVyOkkuVGV4dEVuY29kZXIsVGV4dERlY29kZXI6SS5UZXh0RGVjb2Rlcn19LDc4ODExOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMzYyOSksXz1iKDMxNDgz''@;'; put 'put ''KSxwPWIoNzUxNTcpLFY9SShJLmJpbmQpO2NlLmV4cG9ydHM9ZnVuY3Rpb24odyxQKXtyZXR1cm4gXyh3KSx2b2lkIDA9PT1QP3c6cD9WKHcsUCk6ZnVuY3Rpb24oKXtyZXR1cm4gdy5hcHBseShQLGFyZ3VtZW50cyl9fX0sNzg4NTU6ZnVuY3Rpb24oY2UsWCxiKXt2YXIgSTtjZS5leHBvcnRz''@;'; put 'put ''PShJPWIoMTc2NTYpLGZ1bmN0aW9uKF8pe3ZhciBwPUksVj1wLmxpYix3PVYuV29yZEFycmF5LFA9Vi5IYXNoZXIsRj1wLmFsZ28sUj1bXTshZnVuY3Rpb24oKXtmb3IodmFyIFk9MDtZPDY0O1krKylSW1ldPTQyOTQ5NjcyOTYqXy5hYnMoXy5zaW4oWSsxKSl8MH0oKTt2YXIgej1GLk1ENT1Q''@;'; put 'put ''LmV4dGVuZCh7X2RvUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9oYXNoPW5ldyB3LmluaXQoWzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OF0pfSxfZG9Qcm9jZXNzQmxvY2s6ZnVuY3Rpb24oWSxXKXtmb3IodmFyIHE9MDtxPDE2O3ErKyl7dmFyIGVlPVcrcSxKPVlb''@;'; put 'put ''ZWVdO1lbZWVdPTE2NzExOTM1JihKPDw4fEo+Pj4yNCl8NDI3ODI1NTM2MCYoSjw8MjR8Sj4+PjgpfXZhciByZT10aGlzLl9oYXNoLndvcmRzLGllPVlbVyswXSx1ZT1ZW1crMV0sZ2U9WVtXKzJdLF9lPVlbVyszXSxUZT1ZW1crNF0sTWU9WVtXKzVdLFplPVlbVys2XSxCPVlbVys3XSxnPVlb''@;'; put 'put ''Vys4XSx5PVlbVys5XSx4PVlbVysxMF0sQz1ZW1crMTFdLFQ9WVtXKzEyXSxIPVlbVysxM10saj1ZW1crMTRdLEU9WVtXKzE1XSxtPXJlWzBdLEE9cmVbMV0sYWU9cmVbMl0sbmU9cmVbM107bT1OKG0sQSxhZSxuZSxpZSw3LFJbMF0pLG5lPU4obmUsbSxBLGFlLHVlLDEyLFJbMV0pLGFlPU4o''@;'; put 'put ''YWUsbmUsbSxBLGdlLDE3LFJbMl0pLEE9TihBLGFlLG5lLG0sX2UsMjIsUlszXSksbT1OKG0sQSxhZSxuZSxUZSw3LFJbNF0pLG5lPU4obmUsbSxBLGFlLE1lLDEyLFJbNV0pLGFlPU4oYWUsbmUsbSxBLFplLDE3LFJbNl0pLEE9TihBLGFlLG5lLG0sQiwyMixSWzddKSxtPU4obSxBLGFlLG5l''@;'; put 'put ''LGcsNyxSWzhdKSxuZT1OKG5lLG0sQSxhZSx5LDEyLFJbOV0pLGFlPU4oYWUsbmUsbSxBLHgsMTcsUlsxMF0pLEE9TihBLGFlLG5lLG0sQywyMixSWzExXSksbT1OKG0sQSxhZSxuZSxULDcsUlsxMl0pLG5lPU4obmUsbSxBLGFlLEgsMTIsUlsxM10pLGFlPU4oYWUsbmUsbSxBLGosMTcsUlsx''@;'; put 'put ''NF0pLG09TyhtLEE9TihBLGFlLG5lLG0sRSwyMixSWzE1XSksYWUsbmUsdWUsNSxSWzE2XSksbmU9TyhuZSxtLEEsYWUsWmUsOSxSWzE3XSksYWU9TyhhZSxuZSxtLEEsQywxNCxSWzE4XSksQT1PKEEsYWUsbmUsbSxpZSwyMCxSWzE5XSksbT1PKG0sQSxhZSxuZSxNZSw1LFJbMjBdKSxuZT1P''@;'; put 'put ''KG5lLG0sQSxhZSx4LDksUlsyMV0pLGFlPU8oYWUsbmUsbSxBLEUsMTQsUlsyMl0pLEE9TyhBLGFlLG5lLG0sVGUsMjAsUlsyM10pLG09TyhtLEEsYWUsbmUseSw1LFJbMjRdKSxuZT1PKG5lLG0sQSxhZSxqLDksUlsyNV0pLGFlPU8oYWUsbmUsbSxBLF9lLDE0LFJbMjZdKSxBPU8oQSxhZSxu''@;'; put 'put ''ZSxtLGcsMjAsUlsyN10pLG09TyhtLEEsYWUsbmUsSCw1LFJbMjhdKSxuZT1PKG5lLG0sQSxhZSxnZSw5LFJbMjldKSxhZT1PKGFlLG5lLG0sQSxCLDE0LFJbMzBdKSxtPUsobSxBPU8oQSxhZSxuZSxtLFQsMjAsUlszMV0pLGFlLG5lLE1lLDQsUlszMl0pLG5lPUsobmUsbSxBLGFlLGcsMTEs''@;'; put 'put ''UlszM10pLGFlPUsoYWUsbmUsbSxBLEMsMTYsUlszNF0pLEE9SyhBLGFlLG5lLG0saiwyMyxSWzM1XSksbT1LKG0sQSxhZSxuZSx1ZSw0LFJbMzZdKSxuZT1LKG5lLG0sQSxhZSxUZSwxMSxSWzM3XSksYWU9SyhhZSxuZSxtLEEsQiwxNixSWzM4XSksQT1LKEEsYWUsbmUsbSx4LDIzLFJbMzld''@;'; put 'put ''KSxtPUsobSxBLGFlLG5lLEgsNCxSWzQwXSksbmU9SyhuZSxtLEEsYWUsaWUsMTEsUls0MV0pLGFlPUsoYWUsbmUsbSxBLF9lLDE2LFJbNDJdKSxBPUsoQSxhZSxuZSxtLFplLDIzLFJbNDNdKSxtPUsobSxBLGFlLG5lLHksNCxSWzQ0XSksbmU9SyhuZSxtLEEsYWUsVCwxMSxSWzQ1XSksYWU9''@;'; put 'put ''SyhhZSxuZSxtLEEsRSwxNixSWzQ2XSksbT1aKG0sQT1LKEEsYWUsbmUsbSxnZSwyMyxSWzQ3XSksYWUsbmUsaWUsNixSWzQ4XSksbmU9WihuZSxtLEEsYWUsQiwxMCxSWzQ5XSksYWU9WihhZSxuZSxtLEEsaiwxNSxSWzUwXSksQT1aKEEsYWUsbmUsbSxNZSwyMSxSWzUxXSksbT1aKG0sQSxh''@;'; put 'put ''ZSxuZSxULDYsUls1Ml0pLG5lPVoobmUsbSxBLGFlLF9lLDEwLFJbNTNdKSxhZT1aKGFlLG5lLG0sQSx4LDE1LFJbNTRdKSxBPVooQSxhZSxuZSxtLHVlLDIxLFJbNTVdKSxtPVoobSxBLGFlLG5lLGcsNixSWzU2XSksbmU9WihuZSxtLEEsYWUsRSwxMCxSWzU3XSksYWU9WihhZSxuZSxtLEEs''@;'; put 'put ''WmUsMTUsUls1OF0pLEE9WihBLGFlLG5lLG0sSCwyMSxSWzU5XSksbT1aKG0sQSxhZSxuZSxUZSw2LFJbNjBdKSxuZT1aKG5lLG0sQSxhZSxDLDEwLFJbNjFdKSxhZT1aKGFlLG5lLG0sQSxnZSwxNSxSWzYyXSksQT1aKEEsYWUsbmUsbSx5LDIxLFJbNjNdKSxyZVswXT1yZVswXSttfDAscmVb''@;'; put 'put ''MV09cmVbMV0rQXwwLHJlWzJdPXJlWzJdK2FlfDAscmVbM109cmVbM10rbmV8MH0sX2RvRmluYWxpemU6ZnVuY3Rpb24oKXt2YXIgWT10aGlzLl9kYXRhLFc9WS53b3JkcyxxPTgqdGhpcy5fbkRhdGFCeXRlcyxlZT04Klkuc2lnQnl0ZXM7V1tlZT4+PjVdfD0xMjg8PDI0LWVlJTMyO3ZhciBK''@;'; put 'put ''PV8uZmxvb3IocS80Mjk0OTY3Mjk2KSxyZT1xO1dbMTUrKGVlKzY0Pj4+OTw8NCldPTE2NzExOTM1JihKPDw4fEo+Pj4yNCl8NDI3ODI1NTM2MCYoSjw8MjR8Sj4+PjgpLFdbMTQrKGVlKzY0Pj4+OTw8NCldPTE2NzExOTM1JihyZTw8OHxyZT4+PjI0KXw0Mjc4MjU1MzYwJihyZTw8MjR8cmU+''@;'; put 'put ''Pj44KSxZLnNpZ0J5dGVzPTQqKFcubGVuZ3RoKzEpLHRoaXMuX3Byb2Nlc3MoKTtmb3IodmFyIGllPXRoaXMuX2hhc2gsdWU9aWUud29yZHMsZ2U9MDtnZTw0O2dlKyspe3ZhciBfZT11ZVtnZV07dWVbZ2VdPTE2NzExOTM1JihfZTw8OHxfZT4+PjI0KXw0Mjc4MjU1MzYwJihfZTw8MjR8X2U+''@;'; put 'put ''Pj44KX1yZXR1cm4gaWV9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIFk9UC5jbG9uZS5jYWxsKHRoaXMpO3JldHVybiBZLl9oYXNoPXRoaXMuX2hhc2guY2xvbmUoKSxZfX0pO2Z1bmN0aW9uIE4oWSxXLHEsZWUsSixyZSxpZSl7dmFyIHVlPVkrKFcmcXx+VyZlZSkrSitpZTtyZXR1cm4odWU8PHJl''@;'; put 'put ''fHVlPj4+MzItcmUpK1d9ZnVuY3Rpb24gTyhZLFcscSxlZSxKLHJlLGllKXt2YXIgdWU9WSsoVyZlZXxxJn5lZSkrSitpZTtyZXR1cm4odWU8PHJlfHVlPj4+MzItcmUpK1d9ZnVuY3Rpb24gSyhZLFcscSxlZSxKLHJlLGllKXt2YXIgdWU9WSsoV15xXmVlKStKK2llO3JldHVybih1ZTw8cmV8''@;'; put 'put ''dWU+Pj4zMi1yZSkrV31mdW5jdGlvbiBaKFksVyxxLGVlLEoscmUsaWUpe3ZhciB1ZT1ZKyhxXihXfH5lZSkpK0oraWU7cmV0dXJuKHVlPDxyZXx1ZT4+PjMyLXJlKStXfXAuTUQ1PVAuX2NyZWF0ZUhlbHBlcih6KSxwLkhtYWNNRDU9UC5fY3JlYXRlSG1hY0hlbHBlcih6KX0oTWF0aCksSS5N''@;'; put 'put ''RDUpfSw3ODk2ODooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgTyxLLFosST1iKDU1NTkyKSxfPWIoMTkxNTApLHA9YigzMjYzMyksVj1iKDk3OTUxKSx3PWIoMjY0MDApLFA9YigzMTA4MyksRj1iKDU4MDEyKSxSPWIoODg3ODgpLHo9RigiaXRlcmF0b3IiKSxOPSExO1tdLmtleXMmJigi''@;'; put 'put ''bmV4dCJpbihaPVtdLmtleXMoKSk/KEs9dyh3KFopKSkhPT1PYmplY3QucHJvdG90eXBlJiYoTz1LKTpOPSEwKSwhcChPKXx8SShmdW5jdGlvbigpe3ZhciBXPXt9O3JldHVybiBPW3pdLmNhbGwoVykhPT1XfSk/Tz17fTpSJiYoTz1WKE8pKSxfKE9bel0pfHxQKE8seixmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiB0aGlzfSksY2UuZXhwb3J0cz17SXRlcmF0b3JQcm90b3R5cGU6TyxCVUdHWV9TQUZBUklfSVRFUkFUT1JTOk59fSw3ODk4MjooKT0+e30sNzkwMzk6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1NYXRoLm1heH0sNzkxNDM6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9''@;'; put 'put ''YigyNzA1NCkuQnVmZmVyLF89Yig2NzIxMSkscD1iKDU5NDIpLFY9Yig3MTk5Myksdz1iKDQzMTUwKSxQPWIoNzQ3NTQpLEY9Yig2Mjk1MSk7ZnVuY3Rpb24gUihLKXtwLldyaXRhYmxlLmNhbGwodGhpcyk7dmFyIFo9RltLXTtpZighWil0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbWVzc2Fn''@;'; put 'put ''ZSBkaWdlc3QiKTt0aGlzLl9oYXNoVHlwZT1aLmhhc2gsdGhpcy5faGFzaD1fKFouaGFzaCksdGhpcy5fdGFnPVouaWQsdGhpcy5fc2lnblR5cGU9Wi5zaWdufWZ1bmN0aW9uIHooSyl7cC5Xcml0YWJsZS5jYWxsKHRoaXMpO3ZhciBaPUZbS107aWYoIVopdGhyb3cgbmV3IEVycm9yKCJVbmtu''@;'; put 'put ''b3duIG1lc3NhZ2UgZGlnZXN0Iik7dGhpcy5faGFzaD1fKFouaGFzaCksdGhpcy5fdGFnPVouaWQsdGhpcy5fc2lnblR5cGU9Wi5zaWdufWZ1bmN0aW9uIE4oSyl7cmV0dXJuIG5ldyBSKEspfWZ1bmN0aW9uIE8oSyl7cmV0dXJuIG5ldyB6KEspfU9iamVjdC5rZXlzKEYpLmZvckVhY2goZnVu''@;'; put 'put ''Y3Rpb24oSyl7RltLXS5pZD1JLmZyb20oRltLXS5pZCwiaGV4IiksRltLLnRvTG93ZXJDYXNlKCldPUZbS119KSxWKFIscC5Xcml0YWJsZSksUi5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKFosWSxXKXt0aGlzLl9oYXNoLnVwZGF0ZShaKSxXKCl9LFIucHJvdG90eXBlLnVwZGF0ZT1mdW5j''@;'; put 'put ''dGlvbihaLFkpe3JldHVybiB0aGlzLl9oYXNoLnVwZGF0ZSgic3RyaW5nIj09dHlwZW9mIFo/SS5mcm9tKFosWSk6WiksdGhpc30sUi5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihaLFkpe3RoaXMuZW5kKCk7dmFyIFc9dGhpcy5faGFzaC5kaWdlc3QoKSxxPXcoVyxaLHRoaXMuX2hhc2hUeXBl''@;'; put 'put ''LHRoaXMuX3NpZ25UeXBlLHRoaXMuX3RhZyk7cmV0dXJuIFk/cS50b1N0cmluZyhZKTpxfSxWKHoscC5Xcml0YWJsZSksei5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKFosWSxXKXt0aGlzLl9oYXNoLnVwZGF0ZShaKSxXKCl9LHoucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihaLFkpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9oYXNoLnVwZGF0ZSgic3RyaW5nIj09dHlwZW9mIFo/SS5mcm9tKFosWSk6WiksdGhpc30sei5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKFosWSxXKXt2YXIgcT0ic3RyaW5nIj09dHlwZW9mIFk/SS5mcm9tKFksVyk6WTt0aGlzLmVuZCgpO3ZhciBlZT10aGlzLl9oYXNo''@;'; put 'put ''LmRpZ2VzdCgpO3JldHVybiBQKHEsZWUsWix0aGlzLl9zaWduVHlwZSx0aGlzLl90YWcpfSxjZS5leHBvcnRzPXtTaWduOk4sVmVyaWZ5Ok8sY3JlYXRlU2lnbjpOLGNyZWF0ZVZlcmlmeTpPfX0sNzkzNjg6KCk9Pnt9LDc5NDc3OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9RnVuY3Rp''@;'; put 'put ''b24ucHJvdG90eXBlLmFwcGx5fSw3OTQ5OTpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImthIix7bW9udGhzOiJcdTEwZDhcdTEwZDBcdTEwZGNcdTEwZDVcdTEwZDBcdTEwZTBcdTEwZDhfXHUxMGQ3XHUxMGQ0XHUxMGQxXHUxMGQ0''@;'; put 'put ''XHUxMGUwXHUxMGQ1XHUxMGQwXHUxMGRhXHUxMGQ4X1x1MTBkYlx1MTBkMFx1MTBlMFx1MTBlMlx1MTBkOF9cdTEwZDBcdTEwZGVcdTEwZTBcdTEwZDhcdTEwZGFcdTEwZDhfXHUxMGRiXHUxMGQwXHUxMGQ4XHUxMGUxXHUxMGQ4X1x1MTBkOFx1MTBkNVx1MTBkY1x1MTBkOFx1MTBlMVx1MTBk''@;'; put 'put ''OF9cdTEwZDhcdTEwZDVcdTEwZGFcdTEwZDhcdTEwZTFcdTEwZDhfXHUxMGQwXHUxMGQyXHUxMGQ1XHUxMGQ4XHUxMGUxXHUxMGUyXHUxMGRkX1x1MTBlMVx1MTBkNFx1MTBlNVx1MTBlMlx1MTBkNFx1MTBkYlx1MTBkMVx1MTBkNFx1MTBlMFx1MTBkOF9cdTEwZGRcdTEwZTVcdTEwZTJcdTEw''@;'; put 'put ''ZGRcdTEwZGJcdTEwZDFcdTEwZDRcdTEwZTBcdTEwZDhfXHUxMGRjXHUxMGRkXHUxMGQ0XHUxMGRiXHUxMGQxXHUxMGQ0XHUxMGUwXHUxMGQ4X1x1MTBkM1x1MTBkNFx1MTBkOVx1MTBkNFx1MTBkYlx1MTBkMVx1MTBkNFx1MTBlMFx1MTBkOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUx''@;'; put 'put ''MGQ4XHUxMGQwXHUxMGRjX1x1MTBkN1x1MTBkNFx1MTBkMV9cdTEwZGJcdTEwZDBcdTEwZTBfXHUxMGQwXHUxMGRlXHUxMGUwX1x1MTBkYlx1MTBkMFx1MTBkOF9cdTEwZDhcdTEwZDVcdTEwZGNfXHUxMGQ4XHUxMGQ1XHUxMGRhX1x1MTBkMFx1MTBkMlx1MTBkNV9cdTEwZTFcdTEwZDRcdTEw''@;'; put 'put ''ZTVfXHUxMGRkXHUxMGU1XHUxMGUyX1x1MTBkY1x1MTBkZFx1MTBkNF9cdTEwZDNcdTEwZDRcdTEwZDkiLnNwbGl0KCJfIiksd2Vla2RheXM6e3N0YW5kYWxvbmU6Ilx1MTBkOVx1MTBkNVx1MTBkOFx1MTBlMFx1MTBkMF9cdTEwZGRcdTEwZTBcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEw''@;'; put 'put ''ZDdcdTEwZDhfXHUxMGUxXHUxMGQwXHUxMGRiXHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGQ4X1x1MTBkZFx1MTBkN1x1MTBlZVx1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBkOF9cdTEwZWVcdTEwZTNcdTEwZDdcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEw''@;'; put 'put ''ZDdcdTEwZDhfXHUxMGRlXHUxMGQwXHUxMGUwXHUxMGQwXHUxMGUxXHUxMGQ5XHUxMGQ0XHUxMGQ1XHUxMGQ4X1x1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBkOCIuc3BsaXQoIl8iKSxmb3JtYXQ6Ilx1MTBkOVx1MTBkNVx1MTBkOFx1MTBlMFx1MTBkMFx1MTBlMV9cdTEwZGRc''@;'; put 'put ''dTEwZTBcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZTFfXHUxMGUxXHUxMGQwXHUxMGRiXHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGUxX1x1MTBkZFx1MTBkN1x1MTBlZVx1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBlMV9cdTEwZWVcdTEwZTNc''@;'; put 'put ''dTEwZDdcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZTFfXHUxMGRlXHUxMGQwXHUxMGUwXHUxMGQwXHUxMGUxXHUxMGQ5XHUxMGQ0XHUxMGQ1XHUxMGUxX1x1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBlMSIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovKFx1MTBlY1x1''@;'; put 'put ''MTBkOFx1MTBkY1x1MTBkMHxcdTEwZThcdTEwZDRcdTEwZGJcdTEwZDNcdTEwZDRcdTEwZDIpL30sd2Vla2RheXNTaG9ydDoiXHUxMGQ5XHUxMGQ1XHUxMGQ4X1x1MTBkZFx1MTBlMFx1MTBlOF9cdTEwZTFcdTEwZDBcdTEwZGJfXHUxMGRkXHUxMGQ3XHUxMGVlX1x1MTBlZVx1MTBlM1x1MTBk''@;'; put 'put ''N19cdTEwZGVcdTEwZDBcdTEwZTBfXHUxMGU4XHUxMGQwXHUxMGQxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTEwZDlcdTEwZDVfXHUxMGRkXHUxMGUwX1x1MTBlMVx1MTBkMF9cdTEwZGRcdTEwZDdfXHUxMGVlXHUxMGUzX1x1MTBkZVx1MTBkMF9cdTEwZThcdTEwZDAiLnNwbGl0KCJf''@;'; put 'put ''IiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUxMGQzXHUxMGU2''@;'; put 'put ''XHUxMGQ0XHUxMGUxXSBMVFstXHUxMGQ2XHUxMGQ0XSIsbmV4dERheToiW1x1MTBlZVx1MTBkNVx1MTBkMFx1MTBkYV0gTFRbLVx1MTBkNlx1MTBkNF0iLGxhc3REYXk6IltcdTEwZDJcdTEwZTNcdTEwZThcdTEwZDhcdTEwZGNdIExUWy1cdTEwZDZcdTEwZDRdIixuZXh0V2VlazoiW1x1MTBl''@;'; put 'put ''OFx1MTBkNFx1MTBkYlx1MTBkM1x1MTBkNFx1MTBkMl0gZGRkZCBMVFstXHUxMGQ2XHUxMGQ0XSIsbGFzdFdlZWs6IltcdTEwZWNcdTEwZDhcdTEwZGNcdTEwZDBdIGRkZGQgTFQtXHUxMGQ2XHUxMGQ0IixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOmZ1bmN0aW9uKHApe3Jl''@;'; put 'put ''dHVybiBwLnJlcGxhY2UoLyhcdTEwZWNcdTEwZDBcdTEwZGJ8XHUxMGVjXHUxMGUzXHUxMGQ3fFx1MTBlMVx1MTBkMFx1MTBkMFx1MTBkN3xcdTEwZWNcdTEwZDRcdTEwZGF8XHUxMGQzXHUxMGU2fFx1MTBkN1x1MTBkNSkoXHUxMGQ4fFx1MTBkNCkvLGZ1bmN0aW9uKFYsdyxQKXtyZXR1cm4i''@;'; put 'put ''XHUxMGQ4Ij09PVA/dysiXHUxMGU4XHUxMGQ4Ijp3K1ArIlx1MTBlOFx1MTBkOCJ9KX0scGFzdDpmdW5jdGlvbihwKXtyZXR1cm4vKFx1MTBlY1x1MTBkMFx1MTBkYlx1MTBkOHxcdTEwZWNcdTEwZTNcdTEwZDdcdTEwZDh8XHUxMGUxXHUxMGQwXHUxMGQwXHUxMGQ3XHUxMGQ4fFx1MTBkM1x1''@;'; put 'put ''MTBlNlx1MTBkNHxcdTEwZDdcdTEwZDVcdTEwZDQpLy50ZXN0KHApP3AucmVwbGFjZSgvKFx1MTBkOHxcdTEwZDQpJC8sIlx1MTBkOFx1MTBlMSBcdTEwZWNcdTEwZDhcdTEwZGMiKTovXHUxMGVjXHUxMGQ0XHUxMGRhXHUxMGQ4Ly50ZXN0KHApP3AucmVwbGFjZSgvXHUxMGVjXHUxMGQ0XHUx''@;'; put 'put ''MGRhXHUxMGQ4JC8sIlx1MTBlY1x1MTBkYVx1MTBkOFx1MTBlMSBcdTEwZWNcdTEwZDhcdTEwZGMiKTpwfSxzOiJcdTEwZTBcdTEwZDBcdTEwZGJcdTEwZDNcdTEwZDRcdTEwZGNcdTEwZDhcdTEwZGJcdTEwZDQgXHUxMGVjXHUxMGQwXHUxMGRiXHUxMGQ4IixzczoiJWQgXHUxMGVjXHUxMGQw''@;'; put 'put ''XHUxMGRiXHUxMGQ4IixtOiJcdTEwZWNcdTEwZTNcdTEwZDdcdTEwZDgiLG1tOiIlZCBcdTEwZWNcdTEwZTNcdTEwZDdcdTEwZDgiLGg6Ilx1MTBlMVx1MTBkMFx1MTBkMFx1MTBkN1x1MTBkOCIsaGg6IiVkIFx1MTBlMVx1MTBkMFx1MTBkMFx1MTBkN1x1MTBkOCIsZDoiXHUxMGQzXHUxMGU2''@;'; put 'put ''XHUxMGQ0IixkZDoiJWQgXHUxMGQzXHUxMGU2XHUxMGQ0IixNOiJcdTEwZDdcdTEwZDVcdTEwZDQiLE1NOiIlZCBcdTEwZDdcdTEwZDVcdTEwZDQiLHk6Ilx1MTBlY1x1MTBkNFx1MTBkYVx1MTBkOCIseXk6IiVkIFx1MTBlY1x1MTBkNFx1MTBkYVx1MTBkOCJ9LGRheU9mTW9udGhPcmRpbmFs''@;'; put 'put ''UGFyc2U6LzB8MS1cdTEwZGFcdTEwZDh8XHUxMGRiXHUxMGQ0LVxkezEsMn18XGR7MSwyfS1cdTEwZDQvLG9yZGluYWw6ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT1wP3A6MT09PXA/cCsiLVx1MTBkYVx1MTBkOCI6cDwyMHx8cDw9MTAwJiZwJTIwPT0wfHxwJTEwMD09MD8iXHUxMGRiXHUxMGQ0''@;'; put 'put ''LSIrcDpwKyItXHUxMGQ0In0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGIoOTc1ODYpKX0sNzk2NjI6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig4NzQ4NCksXz1iKDYzOTUxKSxwPUkoImtleXMiKTtjZS5leHBvcnRzPWZ1bmN0aW9uKFYpe3JldHVybiBwW1ZdfHwocFtWXT1fKFYp''@;'; put 'put ''KX19LDc5ODM4OigpPT57fSw3OTkwMjpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoIm10Iix7bW9udGhzOiJKYW5uYXJfRnJhcl9NYXJ6dV9BcHJpbF9NZWpqdV9cdTAxMjB1bmp1X0x1bGp1X0F3d2lzc3VfU2V0dGVtYnJ1X090dHVi''@;'; put 'put ''cnVfTm92ZW1icnVfRGlcdTAxMGJlbWJydSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZyYV9NYXJfQXByX01lal9cdTAxMjB1bl9MdWxfQXd3X1NldF9PdHRfTm92X0RpXHUwMTBiIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJJbC1cdTAxMjZhZGRfSXQtVG5lam5fSXQtVGxpZXRhX0wt''@;'; put 'put ''RXJiZ1x1MDEyN2FfSWwtXHUwMTI2YW1pc19JbC1cdTAxMjBpbWdcdTAxMjdhX0lzLVNpYnQiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwMTI2YWRfVG5lX1RsaV9FcmJfXHUwMTI2YW1fXHUwMTIwaW1fU2liIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTAxMjZhX1RuX1RsX0Vy''@;'; put 'put ''X1x1MDEyNmFfXHUwMTIwaV9TaSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2Fs''@;'; put 'put ''ZW5kYXI6e3NhbWVEYXk6IltJbGx1bSBmaWwtXUxUIixuZXh0RGF5OiJbR1x1MDEyN2FkYSBmaWwtXUxUIixuZXh0V2VlazoiZGRkZCBbZmlsLV1MVCIsbGFzdERheToiW0lsLWJpZXJhXHUwMTI3IGZpbC1dTFQiLGxhc3RXZWVrOiJkZGRkIFtsaSBnXHUwMTI3YWRkYV0gW2ZpbC1dTFQiLHNh''@;'; put 'put ''bWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImZcdTIwMTkgJXMiLHBhc3Q6IiVzIGlsdSIsczoiZnRpdCBzZWtvbmRpIixzczoiJWQgc2Vrb25kaSIsbToibWludXRhIixtbToiJWQgbWludXRpIixoOiJzaWVnXHUwMTI3YSIsaGg6IiVkIHNpZWdcdTAxMjdhdCIsZDoiXHUwMTIx''@;'; put 'put ''dXJuYXRhIixkZDoiJWQgXHUwMTIxcmFuZXQiLE06InhhaGFyIixNTToiJWQgeGh1ciIseToic2VuYSIseXk6IiVkIHNuaSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDgwMjEz''@;'; put 'put ''OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMzc3MzEpLF89Yig5NzU0MSkscD1iKDE0NDUpLFY9YigzMDMzOSksdz1iKDQzNjMyKSxQPWIoMjE5MTApLEY9YigxMTM4KSxSPV8uaGFzLHo9Xy5yZW1vdmU7Y2UuZXhwb3J0cz1mdW5jdGlvbihPKXt2YXIgSz1JKHRoaXMpLFo9dyhP''@;'; put 'put ''KSxZPXAoSyk7cmV0dXJuIFYoSyk8PVouc2l6ZT9QKEssZnVuY3Rpb24oVyl7Wi5pbmNsdWRlcyhXKSYmeihZLFcpfSk6RihaLmdldEl0ZXJhdG9yKCksZnVuY3Rpb24oVyl7UihZLFcpJiZ6KFksVyl9KSxZfX0sODA0Mjg6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO0kuZGVmaW5lTG9jYWxlKCJnbCIse21vbnRoczoieGFuZWlyb19mZWJyZWlyb19tYXJ6b19hYnJpbF9tYWlvX3h1XHhmMW9feHVsbG9fYWdvc3RvX3NldGVtYnJvX291dHVicm9fbm92ZW1icm9fZGVjZW1icm8iLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Inhhbi5fZmViLl9tYXIuX2Fi''@;'; put 'put ''ci5fbWFpLl94dVx4ZjEuX3h1bC5fYWdvLl9zZXQuX291dC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6ImRvbWluZ29fbHVuc19tYXJ0ZXNfbVx4ZTlyY29yZXNfeG92ZXNfdmVucmVzX3NceGUxYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1No''@;'; put 'put ''b3J0OiJkb20uX2x1bi5fbWFyLl9tXHhlOXIuX3hvdi5fdmVuLl9zXHhlMWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9tXHhlOV94b192ZV9zXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6''@;'; put 'put ''bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2hveGUg''@;'; put 'put ''IisoMSE9PXRoaXMuaG91cnMoKT8iXHhlMXMiOiJceGUxIikrIl0gTFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIlttYVx4ZjFceGUxICIrKDEhPT10aGlzLmhvdXJzKCk/Ilx4ZTFzIjoiXHhlMSIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbIisoMSE9''@;'; put 'put ''PXRoaXMuaG91cnMoKT8iXHhlMXMiOiJhIikrIl0gTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltvbnRlICIrKDEhPT10aGlzLmhvdXJzKCk/Ilx4ZTEiOiJhIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbb10gZGRkZCBbcGFzYWRvICIrKDEhPT10aGlzLmhv''@;'; put 'put ''dXJzKCk/Ilx4ZTFzIjoiYSIpKyJdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpmdW5jdGlvbihwKXtyZXR1cm4gMD09PXAuaW5kZXhPZigidW4iKT8ibiIrcDoiZW4gIitwfSxwYXN0OiJoYWkgJXMiLHM6InVucyBzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixt''@;'; put 'put ''OiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bmhhIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW4gZFx4ZWRhIixkZDoiJWQgZFx4ZWRhcyIsTToidW4gbWVzIixNTToiJWQgbWVzZXMiLHk6InVuIGFubyIseXk6IiVkIGFub3MifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsx''@;'; put 'put ''LDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw4MDU5NzpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImVuLWNhIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0Fw''@;'; put 'put ''cmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01v''@;'; put 'put ''bmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25n''@;'; put 'put ''RGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IllZWVktTU0tREQiLExMOiJNTU1NIEQsIFlZWVkiLExMTDoiTU1NTSBELCBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExU''@;'; put 'put ''IixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBh''@;'; put 'put ''Z28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFy''@;'; put 'put ''cyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKHApe3ZhciBWPXAlMTA7cmV0dXJuIHArKDE9PX5+KHAlMTAwLzEwKT8idGgiOjE9PT1WPyJzdCI6Mj09PVY/Im5kIjozPT09Vj8icmQiOiJ0aCIpfX0pfShiKDk3NTg2KSl9''@;'; put 'put ''LDgwNjg1OmZ1bmN0aW9uKGNlKXtjZS5leHBvcnRzPWZ1bmN0aW9uKFgpe3ZhciBiPXt9O2Z1bmN0aW9uIEkoXyl7aWYoYltfXSlyZXR1cm4gYltfXS5leHBvcnRzO3ZhciBwPWJbX109e2k6XyxsOiExLGV4cG9ydHM6e319O3JldHVybiBYW19dLmNhbGwocC5leHBvcnRzLHAscC5leHBvcnRz''@;'; put 'put ''LEkpLHAubD0hMCxwLmV4cG9ydHN9cmV0dXJuIEkubT1YLEkuYz1iLEkuZD1mdW5jdGlvbihfLHAsVil7SS5vKF8scCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLHAse2VudW1lcmFibGU6ITAsZ2V0OlZ9KX0sSS5yPWZ1bmN0aW9uKF8pe3R5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wudG9T''@;'; put 'put ''dHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LEkudD1mdW5jdGlvbihfLHApe2lmKDEmcCYmKF89SShfKSksOCZwfHw0JnAm''@;'; put 'put ''JiJvYmplY3QiPT10eXBlb2YgXyYmXyYmXy5fX2VzTW9kdWxlKXJldHVybiBfO3ZhciBWPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoSS5yKFYpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTpffSksMiZwJiYic3RyaW5nIiE9dHlwZW9mIF8p''@;'; put 'put ''Zm9yKHZhciB3IGluIF8pSS5kKFYsdyxmdW5jdGlvbihQKXtyZXR1cm4gX1tQXX0uYmluZChudWxsLHcpKTtyZXR1cm4gVn0sSS5uPWZ1bmN0aW9uKF8pe3ZhciBwPV8mJl8uX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBfLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIF99O3JldHVy''@;'; put 'put ''biBJLmQocCwiYSIscCkscH0sSS5vPWZ1bmN0aW9uKF8scCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfLHApfSxJLnA9IiIsSShJLnM9Ii4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9hbGwtc2hhcGVzLnRzIil9KHsiLi9wcm9qZWN0cy9pY29ucy9z''@;'; put 'put ''cmMvc2hhcGVzL2FsbC1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2FsbC1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAg''@;'; put 'put ''ICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oWCxiLEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSks''@;'; put 'put ''Yi5BbGxTaGFwZXM9dm9pZCAwO3ZhciBfPUkoCi8qISAuL2NoYXJ0LXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NoYXJ0LXNoYXBlcy50cyIpLHA9SSgKLyohIC4vY29tbWVyY2Utc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29tbWVyY2Ut''@;'; put 'put ''c2hhcGVzLnRzIiksVj1JKAovKiEgLi9jb3JlLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzIiksdz1JKAovKiEgLi9lc3NlbnRpYWwtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvZXNzZW50aWFsLXNoYXBlcy50cyIp''@;'; put 'put ''LFA9SSgKLyohIC4vbWVkaWEtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvbWVkaWEtc2hhcGVzLnRzIiksRj1JKAovKiEgLi9zb2NpYWwtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvc29jaWFsLXNoYXBlcy50cyIpLFI9SSgKLyohIC4vdGVj''@;'; put 'put ''aG5vbG9neS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZWNobm9sb2d5LXNoYXBlcy50cyIpLHo9SSgKLyohIC4vdGV4dC1lZGl0LXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3RleHQtZWRpdC1zaGFwZXMudHMiKSxOPUkoCi8qISAuL3Ry''@;'; put 'put ''YXZlbC1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90cmF2ZWwtc2hhcGVzLnRzIiksTz1bVi5Db3JlU2hhcGVzLHAuQ29tbWVyY2VTaGFwZXMsdy5Fc3NlbnRpYWxTaGFwZXMsUC5NZWRpYVNoYXBlcyxGLlNvY2lhbFNoYXBlcyxSLlRlY2hub2xvZ3lTaGFwZXMsTi5U''@;'; put 'put ''cmF2ZWxTaGFwZXMsXy5DaGFydFNoYXBlcyx6LlRleHRFZGl0U2hhcGVzXSxLPXt9O2IuQWxsU2hhcGVzPUs7Zm9yKHZhciBaPTAsWT1PO1o8WS5sZW5ndGg7WisrKXt2YXIgVz1ZW1pdO2Zvcih2YXIgcSBpbiBXKVcuaGFzT3duUHJvcGVydHkocSkmJihLW3FdPVdbcV0pfXR5cGVvZiB3aW5k''@;'; put 'put ''b3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChLKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jaGFydC1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY2hhcnQtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5v''@;'; put 'put ''IHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oWCxiLEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksYi5DaGFydFNoYXBlcz1iLkNsclNoYXBlQmVsbEN1cnZlPWIuQ2xyU2hhcGVUaWNrQ2hhcnQ9Yi5DbHJTaGFw''@;'; put 'put ''ZVNjYXR0ZXJQbG90PWIuQ2xyU2hhcGVQaWVDaGFydD1iLkNsclNoYXBlTGluZUNoYXJ0PWIuQ2xyU2hhcGVIZWF0TWFwPWIuQ2xyU2hhcGVHcmlkQ2hhcnQ9Yi5DbHJTaGFwZUN1cnZlQ2hhcnQ9Yi5DbHJTaGFwZUNsb3VkQ2hhcnQ9Yi5DbHJTaGFwZUJ1YmJsZUNoYXJ0PWIuQ2xyU2hhcGVC''@;'; put 'put ''b3hQbG90PWIuQ2xyU2hhcGVCYXJDaGFydD1iLkNsclNoYXBlQXhpc0NoYXJ0PXZvaWQgMDt2YXIgXz1JKAovKiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIikscD1JKAovKiEgLi4vdXRpbHMv''@;'; put 'put ''c3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7Yi5DbHJTaGFwZUF4aXNDaGFydD0oMCxwLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9''@;'; put 'put ''Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUgNSAzMiA1IFogTSA0IDI5IEwgNCA3IEwgMzIgNyBMIDMyIDI5''@;'; put 'put ''IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0gNi4wMDcgMjYuNzMxIEwgMjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjguMyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBM''@;'; put 'put ''IDguMDAxIDI0LjczNiBMIDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUgNiAxMS4wMSBMIDYuMDA3IDI2LjczMSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQg''@;'; put 'put ''NyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSA2LjAwNyAyNi43MzEgTCAyNy43MyAyNi43MyBDIDI4''@;'; put 'put ''LjQ5IDI2LjY3IDI4LjkxIDI1LjggMjguNDcgMjUuMTcgQyAyOC4zIDI0LjkyIDI4LjAzIDI0Ljc2IDI3LjczIDI0Ljc0IEwgOC4wMDEgMjQuNzM2IEwgOC4wMSAxMS4wMSBDIDguMDEgMTAuMjMgNy4xNyA5Ljc1IDYuNSAxMC4xNCBDIDYuMTkgMTAuMzEgNiAxMC42NSA2IDExLjAxIFoiLz5c''@;'; put 'put ''biAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIy''@;'; put 'put ''LjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoi''@;'; put 'put ''Lz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNIDYuMDA3IDI2LjczMSBMIDI3LjczIDI2LjczIEMgMjguNDkgMjYuNjcgMjguOTEgMjUuOCAyOC40NyAyNS4xNyBDIDI4LjMgMjQuOTIgMjguMDMgMjQuNzYg''@;'; put 'put ''MjcuNzMgMjQuNzQgTCA4LjAwMSAyNC43MzYgTCA4LjAxIDExLjAxIEMgOC4wMSAxMC4yMyA3LjE3IDkuNzUgNi41IDEwLjE0IEMgNi4xOSAxMC4zMSA2IDEwLjY1IDYgMTEuMDEgTCA2LjAwNyAyNi43MzEgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEw''@;'; put 'put ''NSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0''@;'; put 'put ''IDEyLjM0IFogTSA2LjAwNyAyNi43MzEgTCAyNy43MyAyNi43MyBDIDI4LjQ5IDI2LjY3IDI4LjkxIDI1LjggMjguNDcgMjUuMTcgQyAyOC4zIDI0LjkyIDI4LjAzIDI0Ljc2IDI3LjczIDI0Ljc0IEwgOC4wMDEgMjQuNzM2IEwgOC4wMSAxMS4wMSBDIDguMDEgMTAuMjMgNy4xNyA5Ljc1IDYu''@;'; put 'put ''NSAxMC4xNCBDIDYuMTkgMTAuMzEgNiAxMC42NSA2IDExLjAxIFoiLz5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4''@;'; put 'put ''NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0gNi4wMDcgMjYuNzMxIEwgMjcuNzMgMjYuNzMgQyAyOC40OSAy''@;'; put 'put ''Ni42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjguMyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0LjczNiBMIDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUgNiAxMS4wMSBMIDYuMDA3IDI2''@;'; put 'put ''LjczMSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEz''@;'; put 'put ''LjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0''@;'; put 'put ''NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5''@;'; put 'put ''NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIxLjk1OCA1IEwgMTcuNjI1IDEyLjM5NSBDIDE2Ljc5NSAxMy42MDEgMTcuNTk0IDE1LjI0NSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDM0''@;'; put 'put ''IDE1LjM1NyBaIE0gNi4wMDcgMjYuNzMxIEwgMjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjguMyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0LjczNiBMIDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2''@;'; put 'put ''LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUgNiAxMS4wMSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAx''@;'; put 'put ''MS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0''@;'; put 'put ''MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+JyksYi5DbHJTaGFwZUJhckNoYXJ0PSgwLHAuY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MSIgZD0iTTMyLDVINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMiw1Wk00LDI5VjdIMzJWMjlaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMCBMIDEzIDEwIEwgMTMgMjYgTCAxMS40IDI2IEwgMTEuNCAxMS42IEwgOC42''@;'; put 'put ''IDExLjYgTCA4LjYgMjYgTCA3IDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTkgTCAyMSAxOSBMIDIxIDI2IEwgMTkuNCAyNiBMIDE5LjQgMjAuNiBMIDE2LjYgMjAuNiBMIDE2LjYgMjYgTCAxNSAyNiBa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIzIDE2IEwgMjkgMTYgTCAyOSAyNiBMIDI3LjQgMjYgTCAyNy40IDE3LjYgTCAyNC42IDE3LjYgTCAyNC42IDI2IEwgMjMgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAy''@;'; put 'put ''IDUuODk1IDIuODk1IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk1IDM0IDcgWiBNIDcgMjYgTCAxMyAyNiBMIDEzIDEwIEwgNyAxMCBaIE0gMTUgMjYgTCAyMSAyNiBMIDIxIDE5IEwgMTUgMTkgWiBNIDIzIDI2IEwgMjkgMjYgTCAyOSAxNiBMIDIzIDE2IFoiPjwvcGF0aD5cbiAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUy''@;'; put 'put ''NCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwv''@;'; put 'put ''cGF0aD5cbiAgPHBhdGggZD0iTSA3IDEwIEwgMTMgMTAgTCAxMyAyNiBMIDExLjQgMjYgTCAxMS40IDExLjYgTCA4LjYgMTEuNiBMIDguNiAyNiBMIDcgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BhdGg+XG4gIDxw''@;'; put 'put ''YXRoIGQ9Ik0gMTUgMTkgTCAyMSAxOSBMIDIxIDI2IEwgMTkuNCAyNiBMIDE5LjQgMjAuNiBMIDE2LjYgMjAuNiBMIDE2LjYgMjYgTCAxNSAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0i''@;'; put 'put ''TSAyMyAxNiBMIDI5IDE2IEwgMjkgMjYgTCAyNy40IDI2IEwgMjcuNCAxNy42IEwgMjQuNiAxNy42IEwgMjQuNiAyNiBMIDIzIDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0''@;'; put 'put ''IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDgg''@;'; put 'put ''QyAzMS42MjUgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDcgMjYgTCAxMyAyNiBMIDEzIDEwIEwgNyAxMCBaIE0gMTUgMjYgTCAyMSAyNiBMIDIxIDE5IEwgMTUgMTkgWiBNIDIzIDI2IEwgMjkgMjYgTCAyOSAxNiBMIDIzIDE2IFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBk''@;'; put 'put ''PSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcg''@;'; put 'put ''WiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTAgTCAxMyAxMCBMIDEzIDI2IEwgMTEuNCAyNiBMIDExLjQgMTEuNiBMIDguNiAxMS42IEwgOC42IDI2IEwgNyAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRo''@;'; put 'put ''PlxuICA8cGF0aCBkPSJNIDE1IDE5IEwgMjEgMTkgTCAyMSAyNiBMIDE5LjQgMjYgTCAxOS40IDIwLjYgTCAxNi42IDIwLjYgTCAxNi42IDI2IEwgMTUgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiPjwvcGF0aD5cbiAg''@;'; put 'put ''PHBhdGggZD0iTSAyMyAxNiBMIDI5IDE2IEwgMjkgMjYgTCAyNy40IDI2IEwgMjcuNCAxNy42IEwgMjQuNiAxNy42IEwgMjQuNiAyNiBMIDIzIDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4w''@;'; put 'put ''MDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3''@;'; put 'put ''LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEw''@;'; put 'put ''NSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMTcuNjI1IDEyLjM5NSBDIDE2Ljc5NSAxMy42MDEgMTcuNTk0IDE1LjI0NSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDM0IDE1LjM1NyBaIE0g''@;'; put 'put ''NyAyNiBMIDEzIDI2IEwgMTMgMTAgTCA3IDEwIFogTSAxNSAyNiBMIDIxIDI2IEwgMjEgMTkgTCAxNSAxOSBaIE0gMjMgMjYgTCAyOSAyNiBMIDI5IDE2IEwgMjMgMTYgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2''@;'; put 'put ''OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLGIuQ2xyU2hhcGVCb3hQbG90''@;'; put 'put ''PSgwLHAuY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDVINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMiw1Wk00LDI5VjdIMzJWMjlaIj48''@;'; put 'put ''L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMiBMIDE3IDEyIEwgMTcgMjYgTCA3IDI2IEwgNyAxMiBaIE0gOC42IDI0LjQgTCAxNS40IDI0LjQgTCAxNS40IDE4LjggTCA4LjYgMTguOCBMIDguNiAyNC40IFogTSAxNS40IDEzLjYgTCA4LjYgMTMuNiBMIDguNiAxNy4yIEwgMTUuNCAxNy4yIEwg''@;'; put 'put ''MTUuNCAxMy42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTkgMjQgTCAyOSAyNCBMIDI5IDEwIEwgMTkgMTAgTCAxOSAyNCBaIE0gMjAuNiAxMS42IEwgMjcuNCAxMS42IEwgMjcuNCAxNy4yIEwgMjAuNiAxNy4y''@;'; put 'put ''IEwgMjAuNiAxMS42IFogTSAyNy40IDIyLjQgTCAyMC42IDIyLjQgTCAyMC42IDE4LjggTCAyNy40IDE4LjggTCAyNy40IDIyLjQgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk1IDM0IDcgWiBNIDcgMjYgTCAxNyAy''@;'; put 'put ''NiBMIDE3IDEyIEwgNyAxMiBaIE0gOSAxOSBMIDE1IDE5IEwgMTUgMjQgTCA5IDI0IFogTSAxNSAxNyBMIDkgMTcgTCA5IDE0IEwgMTUgMTQgWiBNIDE5IDI0IEwgMjkgMjQgTCAyOSAxMCBMIDE5IDEwIFogTSAyMSAxMiBMIDI3IDEyIEwgMjcgMTcgTCAyMSAxNyBaIE0gMjcgMjIgTCAyMSAy''@;'; put 'put ''MiBMIDIxIDE5IEwgMjcgMTkgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYuNjY4IDIyLjUwMSA2''@;'; put 'put ''LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUgMjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4zNCBDIDMzLjM4IDEy''@;'; put 'put ''LjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTIgTCAxNyAxMiBMIDE3IDI2IEwgNyAyNiBMIDcgMTIgWiBNIDguNiAyNC40IEwgMTUuNCAyNC40IEwgMTUuNCAxOC44IEwgOC42IDE4LjggTCA4LjYgMjQuNCBaIE0gMTUuNCAxMy42IEwgOC42''@;'; put 'put ''IDEzLjYgTCA4LjYgMTcuMiBMIDE1LjQgMTcuMiBMIDE1LjQgMTMuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxOSAxMCBMIDIzLjcyOCAxMCBDIDI0LjEwNSAxMC41OTYgMjQuNTY0''@;'; put 'put ''IDExLjEzNSAyNS4wOSAxMS42IEwgMjAuNiAxMS42IEwgMjAuNiAxNy4yIEwgMjcuNCAxNy4yIEwgMjcuNCAxMi45ODcgQyAyNy45MDkgMTMuMTc3IDI4LjQ0NSAxMy4zMTMgMjkgMTMuMzg3IEwgMjkgMjQgTCAxOSAyNCBaIE0gMjcuNCAxOC44IEwgMjAuNiAxOC44IEwgMjAuNiAyMi40IEwg''@;'; put 'put ''MjcuNCAyMi40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9''@;'; put 'put ''IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAu''@;'; put 'put ''MTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjIuNTcgNSBDIDIyLjMxMiA2LjgxNyAyMi43MzIgOC41NjYgMjMuNjMzIDEwIEwgMTkgMTAgTCAxOSAyNCBMIDI5IDI0IEwgMjkgMTMuNDI3IEMgMjkuMTAzIDEzLjQ0IDI5LjIwNiAxMy40NTEgMjkuMzEgMTMuNDYgTCAz''@;'; put 'put ''MC4zMiAxMy40OCBDIDMxLjYyNSAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gNyAyNiBMIDE3IDI2IEwgMTcgMTIgTCA3IDEyIFogTSA5IDE5IEwgMTUgMTkgTCAxNSAyNCBMIDkgMjQgWiBNIDE1IDE3IEwgOSAxNyBMIDkgMTQgTCAxNSAxNCBaIE0gMjEgMTIgTCAyNS40NzIg''@;'; put 'put ''MTIgQyAyNS45NCAxMi4zNTIgMjYuNDUyIDEyLjY1IDI3IDEyLjg4NSBMIDI3IDE3IEwgMjEgMTcgWiBNIDI3IDIyIEwgMjEgMjIgTCAyMSAxOSBMIDI3IDE5IFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAy''@;'; put 'put ''Ljg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTIgTCAxNyAxMiBMIDE3IDI2IEwg''@;'; put 'put ''NyAyNiBMIDcgMTIgWiBNIDguNiAyNC40IEwgMTUuNCAyNC40IEwgMTUuNCAxOC44IEwgOC42IDE4LjggTCA4LjYgMjQuNCBaIE0gMTUuNCAxMy42IEwgOC42IDEzLjYgTCA4LjYgMTcuMiBMIDE1LjQgMTcuMiBMIDE1LjQgMTMuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI5IDI0IEwgMTkgMjQgTCAxOSAxNS4zNDUgQyAxOS4wMjEgMTUuMzQ4IDIwLjYgMTUuMzYgMjAuNiAxNS4zNiBMIDIwLjYgMTcuMiBMIDI3LjQgMTcuMiBMIDI3LjQgMTUuMzYgTCAyOSAxNS4zNTcg''@;'; put 'put ''TCAyOSAyNCBaIE0gMjcuNCAxOC44IEwgMjAuNiAxOC44IEwgMjAuNiAyMi40IEwgMjcuNCAyMi40IEwgMjcuNCAxOC44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAw''@;'; put 'put ''NiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44''@;'; put 'put ''NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMg''@;'; put 'put ''MiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMTkuMDI4IDEwIEwgMTkgMTAgTCAxOSAxMC4wNDggTCAxNy42MjUgMTIuMzk1IEMgMTYuODA3IDEzLjU4MyAxNy41NzEgMTUuMTk3IDE5IDE1LjM0NSBMIDE5IDI0IEwgMjkgMjQgTCAyOSAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDcg''@;'; put 'put ''MjYgTCAxNyAyNiBMIDE3IDEyIEwgNyAxMiBaIE0gOSAxOSBMIDE1IDE5IEwgMTUgMjQgTCA5IDI0IFogTSAxNSAxNyBMIDkgMTcgTCA5IDE0IEwgMTUgMTQgWiBNIDI3IDE3IEwgMjEgMTcgTCAyMSAxNS4zNTcgTCAyNyAxNS4zNTcgWiBNIDI3IDIyIEwgMjEgMjIgTCAyMSAxOSBMIDI3IDE5''@;'; put 'put ''IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4w''@;'; put 'put ''MDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQg''@;'; put 'put ''QyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSxiLkNsclNoYXBlQnViYmxlQ2hhcnQ9KDAscC5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAy''@;'; put 'put ''Ljg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxw''@;'; put 'put ''YXRoIGQ9Ik0gMjkgMTggQyAyOSAxOS42NTcgMjcuNjU3IDIxIDI2IDIxIEMgMjQuMzQzIDIxIDIzIDE5LjY1NyAyMyAxOCBDIDIzIDE2LjM0MyAyNC4zNDMgMTUgMjYgMTUgQyAyNy42NTcgMTUgMjkgMTYuMzQzIDI5IDE4IFogTSAyNiAxNi42IEMgMjUuMjI3IDE2LjYgMjQuNiAxNy4yMjcg''@;'; put 'put ''MjQuNiAxOCBDIDI0LjYgMTguNzczIDI1LjIyNyAxOS40IDI2IDE5LjQgQyAyNi43NzMgMTkuNCAyNy40IDE4Ljc3MyAyNy40IDE4IEMgMjcuNCAxNy4yMjcgMjYuNzczIDE2LjYgMjYgMTYuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgcng9IjMiPjwv''@;'; put 'put ''cGF0aD5cbiAgPHBhdGggZD0iTSAxNSAxNCBDIDE1IDE2LjIwOSAxMy4yMDkgMTggMTEgMTggQyA4Ljc5MSAxOCA3IDE2LjIwOSA3IDE0IEMgNyAxMS43OTEgOC43OTEgMTAgMTEgMTAgQyAxMy4yMDkgMTAgMTUgMTEuNzkxIDE1IDE0IFogTSAxMSAxMS42IEMgOS42NzUgMTEuNiA4LjYgMTIu''@;'; put 'put ''Njc1IDguNiAxNCBDIDguNiAxNS4zMjUgOS42NzUgMTYuNCAxMSAxNi40IEMgMTIuMzI1IDE2LjQgMTMuNCAxNS4zMjUgMTMuNCAxNCBDIDEzLjQgMTIuNjc1IDEyLjMyNSAxMS42IDExIDExLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHJ4PSIzIj48''@;'; put 'put ''L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjEgMjMgQyAyMSAyNC42NTcgMTkuNjU3IDI2IDE4IDI2IEMgMTYuMzQzIDI2IDE1IDI0LjY1NyAxNSAyMyBDIDE1IDIxLjM0MyAxNi4zNDMgMjAgMTggMjAgQyAxOS42NTcgMjAgMjEgMjEuMzQzIDIxIDIzIFogTSAxOCAyMS42IEMgMTcuMjI3IDIxLjYg''@;'; put 'put ''MTYuNiAyMi4yMjcgMTYuNiAyMyBDIDE2LjYgMjMuNzczIDE3LjIyNyAyNC40IDE4IDI0LjQgQyAxOC43NzMgMjQuNCAxOS40IDIzLjc3MyAxOS40IDIzIEMgMTkuNCAyMi4yMjcgMTguNzczIDIxLjYgMTggMjEuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NCIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2''@;'; put 'put ''IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk2IDM0IDcgWiBNIDExIDEwIEMgOC43OTEgMTAgNyAxMS43OTEgNyAxNCBDIDcgMTYuMjA5IDguNzkxIDE4IDExIDE4IEMgMTMuMjA5IDE4IDE1IDE2LjIwOSAxNSAxNCBDIDE1IDExLjc5MSAxMy4yMDkgMTAgMTEgMTAgWiBNIDI2IDE1''@;'; put 'put ''IEMgMjQuMzQzIDE1IDIzIDE2LjM0MyAyMyAxOCBDIDIzIDE5LjY1NyAyNC4zNDMgMjEgMjYgMjEgQyAyNy42NTcgMjEgMjkgMTkuNjU3IDI5IDE4IEMgMjkgMTYuMzQzIDI3LjY1NyAxNSAyNiAxNSBaIE0gMTggMjAgQyAxNi4zNDMgMjAgMTUgMjEuMzQzIDE1IDIzIEMgMTUgMjQuNjU3IDE2''@;'; put 'put ''LjM0MyAyNiAxOCAyNiBDIDE5LjY1NyAyNiAyMSAyNC42NTcgMjEgMjMgQyAyMSAyMS4zNDMgMTkuNjU3IDIwIDE4IDIwIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwg''@;'; put 'put ''MzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIg''@;'; put 'put ''MzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOSAxOCBDIDI5IDE5LjY1NyAyNy42NTcgMjEgMjYgMjEgQyAyNC4zNDMgMjEgMjMgMTkuNjU3IDIzIDE4''@;'; put 'put ''IEMgMjMgMTYuMzQzIDI0LjM0MyAxNSAyNiAxNSBDIDI3LjY1NyAxNSAyOSAxNi4zNDMgMjkgMTggWiBNIDI2IDE2LjYgQyAyNS4yMjcgMTYuNiAyNC42IDE3LjIyNyAyNC42IDE4IEMgMjQuNiAxOC43NzMgMjUuMjI3IDE5LjQgMjYgMTkuNCBDIDI2Ljc3MyAxOS40IDI3LjQgMTguNzczIDI3''@;'; put 'put ''LjQgMTggQyAyNy40IDE3LjIyNyAyNi43NzMgMTYuNiAyNiAxNi42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNSAxNCBDIDE1IDE2LjIwOSAxMy4yMDkgMTggMTEgMTgg''@;'; put 'put ''QyA4Ljc5MSAxOCA3IDE2LjIwOSA3IDE0IEMgNyAxMS43OTEgOC43OTEgMTAgMTEgMTAgQyAxMy4yMDkgMTAgMTUgMTEuNzkxIDE1IDE0IFogTSAxMSAxMS42IEMgOS42NzUgMTEuNiA4LjYgMTIuNjc1IDguNiAxNCBDIDguNiAxNS4zMjUgOS42NzUgMTYuNCAxMSAxNi40IEMgMTIuMzI1IDE2''@;'; put 'put ''LjQgMTMuNCAxNS4zMjUgMTMuNCAxNCBDIDEzLjQgMTIuNjc1IDEyLjMyNSAxMS42IDExIDExLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIxIDIzIEMgMjEgMjQuNjU3''@;'; put 'put ''IDE5LjY1NyAyNiAxOCAyNiBDIDE2LjM0MyAyNiAxNSAyNC42NTcgMTUgMjMgQyAxNSAyMS4zNDMgMTYuMzQzIDIwIDE4IDIwIEMgMTkuNjU3IDIwIDIxIDIxLjM0MyAyMSAyMyBaIE0gMTggMjEuNiBDIDE3LjIyNyAyMS42IDE2LjYgMjIuMjI3IDE2LjYgMjMgQyAxNi42IDIzLjc3MyAxNy4y''@;'; put 'put ''MjcgMjQuNCAxOCAyNC40IEMgMTguNzczIDI0LjQgMTkuNCAyMy43NzMgMTkuNCAyMyBDIDE5LjQgMjIuMjI3IDE4Ljc3MyAyMS42IDE4IDIxLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiByeD0iMyI+PC9wYXRoPlxuICA8''@;'; put 'put ''Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0t''@;'; put 'put ''YmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2''@;'; put 'put ''IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDExIDEwIEMgOC43OTEgMTAgNyAxMS43OTEgNyAxNCBDIDcgMTYuMjA5IDguNzkxIDE4IDExIDE4IEMgMTMuMjA5IDE4IDE1IDE2LjIwOSAxNSAxNCBDIDE1IDExLjc5MSAxMy4yMDkgMTAg''@;'; put 'put ''MTEgMTAgWiBNIDI2IDE1IEMgMjQuMzQzIDE1IDIzIDE2LjM0MyAyMyAxOCBDIDIzIDE5LjY1NyAyNC4zNDMgMjEgMjYgMjEgQyAyNy42NTcgMjEgMjkgMTkuNjU3IDI5IDE4IEMgMjkgMTYuMzQzIDI3LjY1NyAxNSAyNiAxNSBaIE0gMTggMjAgQyAxNi4zNDMgMjAgMTUgMjEuMzQzIDE1IDIz''@;'; put 'put ''IEMgMTUgMjQuNjU3IDE2LjM0MyAyNiAxOCAyNiBDIDE5LjY1NyAyNiAyMSAyNC42NTcgMjEgMjMgQyAyMSAyMS4zNDMgMTkuNjU3IDIwIDE4IDIwIFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAz''@;'; put 'put ''MSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI5IDE4IEMgMjkgMTkuNjU3IDI3LjY1NyAyMSAy''@;'; put 'put ''NiAyMSBDIDI0LjM0MyAyMSAyMyAxOS42NTcgMjMgMTggQyAyMyAxNi4zNDMgMjQuMzQzIDE1IDI2IDE1IEMgMjcuNjU3IDE1IDI5IDE2LjM0MyAyOSAxOCBaIE0gMjYgMTYuNiBDIDI1LjIyNyAxNi42IDI0LjYgMTcuMjI3IDI0LjYgMTggQyAyNC42IDE4Ljc3MyAyNS4yMjcgMTkuNCAyNiAx''@;'; put 'put ''OS40IEMgMjYuNzczIDE5LjQgMjcuNCAxOC43NzMgMjcuNCAxOCBDIDI3LjQgMTcuMjI3IDI2Ljc3MyAxNi42IDI2IDE2LjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0g''@;'; put 'put ''MTUgMTQgQyAxNSAxNi4yMDkgMTMuMjA5IDE4IDExIDE4IEMgOC43OTEgMTggNyAxNi4yMDkgNyAxNCBDIDcgMTEuNzkxIDguNzkxIDEwIDExIDEwIEMgMTMuMjA5IDEwIDE1IDExLjc5MSAxNSAxNCBaIE0gMTEgMTEuNiBDIDkuNjc1IDExLjYgOC42IDEyLjY3NSA4LjYgMTQgQyA4LjYgMTUu''@;'; put 'put ''MzI1IDkuNjc1IDE2LjQgMTEgMTYuNCBDIDEyLjMyNSAxNi40IDEzLjQgMTUuMzI1IDEzLjQgMTQgQyAxMy40IDEyLjY3NSAxMi4zMjUgMTEuNiAxMSAxMS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiByeD0iMyI+PC9w''@;'; put 'put ''YXRoPlxuICA8cGF0aCBkPSJNIDIxIDIzIEMgMjEgMjQuNjU3IDE5LjY1NyAyNiAxOCAyNiBDIDE2LjM0MyAyNiAxNSAyNC42NTcgMTUgMjMgQyAxNSAyMS4zNDMgMTYuMzQzIDIwIDE4IDIwIEMgMTkuNjU3IDIwIDIxIDIxLjM0MyAyMSAyMyBaIE0gMTggMjEuNiBDIDE3LjIyNyAyMS42IDE2''@;'; put 'put ''LjYgMjIuMjI3IDE2LjYgMjMgQyAxNi42IDIzLjc3MyAxNy4yMjcgMjQuNCAxOCAyNC40IEMgMTguNzczIDI0LjQgMTkuNCAyMy43NzMgMTkuNCAyMyBDIDE5LjQgMjIuMjI3IDE4Ljc3MyAyMS42IDE4IDIxLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTQtLWFsZXJ0ZWQiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4''@;'; put 'put ''IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQu''@;'; put 'put ''Nzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1''@;'; put 'put ''IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIxLjk1OCA1IEwgMTcuNjI1IDEyLjM5NSBDIDE2Ljc5NSAxMy42MDEgMTcuNTk0IDE1LjI0NSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAx''@;'; put 'put ''OS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDI0LjU3OSAxNS4zNTcgQyAyMy42MzkgMTUuODYzIDIzIDE2Ljg1NyAyMyAxOCBDIDIzIDE5LjY1NyAyNC4zNDMgMjEgMjYgMjEgQyAyNy42NTcgMjEgMjkgMTkuNjU3IDI5IDE4IEMgMjkgMTYuODU3IDI4LjM2MSAxNS44NjMgMjcuNDIxIDE1''@;'; put 'put ''LjM1NyBMIDM0IDE1LjM1NyBaIE0gMTEgMTAgQyA4Ljc5MSAxMCA3IDExLjc5MSA3IDE0IEMgNyAxNi4yMDkgOC43OTEgMTggMTEgMTggQyAxMy4yMDkgMTggMTUgMTYuMjA5IDE1IDE0IEMgMTUgMTEuNzkxIDEzLjIwOSAxMCAxMSAxMCBaIE0gMTggMjAgQyAxNi4zNDMgMjAgMTUgMjEuMzQz''@;'; put 'put ''IDE1IDIzIEMgMTUgMjQuNjU3IDE2LjM0MyAyNiAxOCAyNiBDIDE5LjY1NyAyNiAyMSAyNC42NTcgMjEgMjMgQyAyMSAyMS4zNDMgMTkuNjU3IDIwIDE4IDIwIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMu''@;'; put 'put ''MDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSxiLkNsclNoYXBlQ2xvdWRDaGFydD0o''@;'; put 'put ''MCxwLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiw1SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNCwyOVY3SDMyVjI5WiI+PC9w''@;'; put 'put ''YXRoPlxuICA8cGF0aCBkPSJNIDIwLjk3MSAxMS4yNDMgQyAyMy4zMTQgMTMuNTg2IDIyLjM2NCAxOC4zMzUgMTguODQ5IDIxLjg0OSBDIDE1LjMzNCAyNS4zNjQgMTAuNTg2IDI2LjMxNCA4LjI0MyAyMy45NyBDIDUuODk5IDIxLjYyNyA2Ljg0OSAxNi44NzggMTAuMzY0IDEzLjM2NCBDIDEz''@;'; put 'put ''Ljg3OSA5Ljg0OSAxOC42MjggOC45IDIwLjk3MSAxMS4yNDMgWiBNIDExLjYzNiAxNC42MzcgQyA4LjgyNCAxNy40NDkgNy44NzUgMjEuMDU4IDkuNTE1IDIyLjY5OCBDIDExLjE1NSAyNC4zMzggMTQuNzY0IDIzLjM4OSAxNy41NzYgMjAuNTc3IEMgMjAuMzg4IDE3Ljc2NSAyMS4zMzggMTQu''@;'; put 'put ''MTU2IDE5LjY5NyAxMi41MTYgQyAxOC4wNTcgMTAuODc2IDE0LjQ0OCAxMS44MjUgMTEuNjM2IDE0LjYzNyBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI4IDIyIEMgMjggMjMuNjU3IDI2LjY1NyAyNSAyNSAyNSBD''@;'; put 'put ''IDIzLjM0MyAyNSAyMiAyMy42NTcgMjIgMjIgQyAyMiAyMC4zNDMgMjMuMzQzIDE5IDI1IDE5IEMgMjYuNjU3IDE5IDI4IDIwLjM0MyAyOCAyMiBaIE0gMjUgMjAuNiBDIDI0LjIyNyAyMC42IDIzLjYgMjEuMjI3IDIzLjYgMjIgQyAyMy42IDIyLjc3MyAyNC4yMjcgMjMuNCAyNSAyMy40IEMg''@;'; put 'put ''MjUuNzczIDIzLjQgMjYuNCAyMi43NzMgMjYuNCAyMiBDIDI2LjQgMjEuMjI3IDI1Ljc3MyAyMC42IDI1IDIwLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjciPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk1IDM0IDcgWiBNIDEwLjM2NCAxMy4zNjQg''@;'; put 'put ''QyA2Ljg0OSAxNi44NzggNS44OTkgMjEuNjI3IDguMjQzIDIzLjk3IEMgMTAuNTg2IDI2LjMxNCAxNS4zMzQgMjUuMzY0IDE4Ljg0OSAyMS44NDkgQyAyMi4zNjQgMTguMzM1IDIzLjMxNCAxMy41ODYgMjAuOTcxIDExLjI0MyBDIDE4LjYyOCA4LjkgMTMuODc5IDkuODQ5IDEwLjM2NCAxMy4z''@;'; put 'put ''NjQgWiBNIDI1IDE5IEMgMjMuMzQzIDE5IDIyIDIwLjM0MyAyMiAyMiBDIDIyIDIzLjY1NyAyMy4zNDMgMjUgMjUgMjUgQyAyNi42NTcgMjUgMjggMjMuNjU3IDI4IDIyIEMgMjggMjAuMzQzIDI2LjY1NyAxOSAyNSAxOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIu''@;'; put 'put ''ODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjAuOTcx''@;'; put 'put ''IDExLjI0MyBDIDIzLjMxNCAxMy41ODYgMjIuMzY0IDE4LjMzNSAxOC44NDkgMjEuODQ5IEMgMTUuMzM0IDI1LjM2NCAxMC41ODYgMjYuMzE0IDguMjQzIDIzLjk3IEMgNS44OTkgMjEuNjI3IDYuODQ5IDE2Ljg3OCAxMC4zNjQgMTMuMzY0IEMgMTMuODc5IDkuODQ5IDE4LjYyOCA4LjkgMjAu''@;'; put 'put ''OTcxIDExLjI0MyBaIE0gMTEuNjM2IDE0LjYzNyBDIDguODI0IDE3LjQ0OSA3Ljg3NSAyMS4wNTggOS41MTUgMjIuNjk4IEMgMTEuMTU1IDI0LjMzOCAxNC43NjQgMjMuMzg5IDE3LjU3NiAyMC41NzcgQyAyMC4zODggMTcuNzY1IDIxLjMzOCAxNC4xNTYgMTkuNjk3IDEyLjUxNiBDIDE4LjA1''@;'; put 'put ''NyAxMC44NzYgMTQuNDQ4IDExLjgyNSAxMS42MzYgMTQuNjM3IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI4IDIyIEMgMjggMjMuNjU3IDI2LjY1NyAyNSAyNSAyNSBDIDIzLjM0MyAy''@;'; put 'put ''NSAyMiAyMy42NTcgMjIgMjIgQyAyMiAyMC4zNDMgMjMuMzQzIDE5IDI1IDE5IEMgMjYuNjU3IDE5IDI4IDIwLjM0MyAyOCAyMiBaIE0gMjUgMjAuNiBDIDI0LjIyNiAyMC42IDIzLjYgMjEuMjI2IDIzLjYgMjIgQyAyMy42IDIyLjc3MyAyNC4yMjYgMjMuNCAyNSAyMy40IEMgMjUuNzczIDIz''@;'; put 'put ''LjQgMjYuNCAyMi43NzMgMjYuNCAyMiBDIDI2LjQgMjEuMjI2IDI1Ljc3MyAyMC42IDI1IDIwLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiB4PSI3Ij48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQgMTIuMzQgTCAzNCAy''@;'; put 'put ''OSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMi41NyA1IEMgMjEuOTY5IDkuMjMzIDI1LjA1IDEzLjEgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNSAxMy40''@;'; put 'put ''MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gMTAuMzY0IDEzLjM2NCBDIDYuODQ5IDE2Ljg3OCA1Ljg5OSAyMS42MjcgOC4yNDMgMjMuOTcgQyAxMC41ODYgMjYuMzE0IDE1LjMzNCAyNS4zNjQgMTguODQ5IDIxLjg0OSBDIDIyLjM2NCAxOC4zMzUgMjMuMzE0IDEzLjU4NiAyMC45NzEg''@;'; put 'put ''MTEuMjQzIEMgMTguNjI4IDguOSAxMy44NzkgOS44NDkgMTAuMzY0IDEzLjM2NCBaIE0gMjUgMTkgQyAyMy4zNDMgMTkgMjIgMjAuMzQzIDIyIDIyIEMgMjIgMjMuNjU3IDIzLjM0MyAyNSAyNSAyNSBDIDI2LjY1NyAyNSAyOCAyMy42NTcgMjggMjIgQyAyOCAyMC4zNDMgMjYuNjU3IDE5IDI1''@;'; put 'put ''IDE5IFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwg''@;'; put 'put ''MzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE4Ljg0OSAyMS44NDkgQyAxNS4zMzQgMjUuMzY0IDEwLjU4NiAyNi4zMTQgOC4yNDMgMjMuOTcgQyA1Ljg5OSAyMS42MjcgNi44NDkgMTYuODc4IDEwLjM2NCAxMy4zNjQgQyAxMy4wNDkgMTAu''@;'; put 'put ''Njc5IDE2LjQ1MyA5LjQ5MiAxOC45NTYgMTAuMTI0IEwgMTguMDA4IDExLjc0MSBDIDE2LjE4IDExLjUxOCAxMy42OTUgMTIuNTc4IDExLjYzNiAxNC42MzcgQyA4LjgyNCAxNy40NDkgNy44NzUgMjEuMDU4IDkuNTE1IDIyLjY5OCBDIDExLjE1NSAyNC4zMzggMTQuNzY0IDIzLjM4OSAxNy41''@;'; put 'put ''NzYgMjAuNTc3IEMgMTkuMjI4IDE4LjkyNSAyMC4yMzcgMTYuOTk4IDIwLjQ1NiAxNS4zNTcgTCAyMi4yMiAxNS4zNTcgQyAyMi4wMDYgMTcuNDc3IDIwLjgzOCAxOS44NjEgMTguODQ5IDIxLjg0OSBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''Mi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI4IDIyIEMgMjggMjMuNjU3IDI2LjY1NyAyNSAyNSAyNSBDIDIzLjM0MyAyNSAyMiAyMy42NTcgMjIgMjIgQyAyMiAyMC4zNDMgMjMuMzQzIDE5IDI1IDE5IEMgMjYuNjU3IDE5IDI4IDIwLjM0MyAyOCAyMiBaIE0gMjUgMjAuNiBD''@;'; put 'put ''IDI0LjIyNiAyMC42IDIzLjYgMjEuMjI2IDIzLjYgMjIgQyAyMy42IDIyLjc3MyAyNC4yMjYgMjMuNCAyNSAyMy40IEMgMjUuNzczIDIzLjQgMjYuNCAyMi43NzMgMjYuNCAyMiBDIDI2LjQgMjEuMjI2IDI1Ljc3MyAyMC42IDI1IDIwLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHg9IjciPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBD''@;'; put 'put ''IDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0''@;'; put 'put ''LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQg''@;'; put 'put ''MjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAxOC45NTYgMTAuMTI0IEMgMTYuNDUzIDkuNDkyIDEzLjA0OSAxMC42NzkgMTAuMzY0IDEzLjM2NCBDIDYu''@;'; put 'put ''ODQ5IDE2Ljg3OCA1Ljg5OSAyMS42MjcgOC4yNDMgMjMuOTcgQyAxMC41ODYgMjYuMzE0IDE1LjMzNCAyNS4zNjQgMTguODQ5IDIxLjg0OSBDIDIwLjgzOCAxOS44NjEgMjIuMDA2IDE3LjQ3NyAyMi4yMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDI1IDE5IEMgMjMuMzQzIDE5IDIyIDIwLjM0''@;'; put 'put ''MyAyMiAyMiBDIDIyIDIzLjY1NyAyMy4zNDMgMjUgMjUgMjUgQyAyNi42NTcgMjUgMjggMjMuNjU3IDI4IDIyIEMgMjggMjAuMzQzIDI2LjY1NyAxOSAyNSAxOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEz''@;'; put 'put ''LjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksYi5DbHJTaGFwZUN1cnZlQ2hhcnQ9''@;'; put 'put ''KDAscC5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAz''@;'; put 'put ''MC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMS44IEMgNi41NTggMTEuOCA2LjIgMTEuNDQyIDYuMiAxMSBDIDYuMiAxMC41NTggNi41NTggMTAuMiA3IDEw''@;'; put 'put ''LjIgTCAxMyAxMC4yIEMgMTUuNDA0IDEwLjIgMTYuMzY4IDExLjkwNyAxNy42NTMgMTYuNDc4IEMgMTcuNjk1IDE2LjYyOCAxNy43NDQgMTYuODAzIDE3LjgzNSAxNy4xMjkgQyAxNy45MDkgMTcuMzkyIDE3Ljk2NCAxNy41ODggMTguMDE5IDE3Ljc4IEMgMTkuMzMyIDIyLjM3NSAyMC41NDkg''@;'; put 'put ''MjQuMiAyMyAyNC4yIEwgMjkgMjQuMiBDIDI5LjQ0MiAyNC4yIDI5LjggMjQuNTU4IDI5LjggMjUgQyAyOS44IDI1LjQ0MiAyOS40NDIgMjUuOCAyOSAyNS44IEwgMjMgMjUuOCBDIDE5LjUzNSAyNS44IDE3Ljk4MSAyMy40NjkgMTYuNDgxIDE4LjIyIEMgMTYuNDI1IDE4LjAyNSAxNi4zNjkg''@;'; put 'put ''MTcuODI2IDE2LjI5NSAxNy41NiBDIDE2LjIwMyAxNy4yMzQgMTYuMTU0IDE3LjA2IDE2LjExMyAxNi45MTEgQyAxNS4wNDMgMTMuMTA1IDE0LjMwNSAxMS44IDEzIDExLjggTCA3IDExLjggWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcGF0aD5cbiAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEw''@;'; put 'put ''NSA1IDM0IDUuODk2IDM0IDcgWiBNIDEzIDEyIEMgMTQuODE3IDEyIDE1LjY3NCAxMy40OTkgMTcuMDM5IDE4LjI3NSBDIDE3LjgxMyAyMC45ODQgMTguMjAxIDIyLjExOCAxOC44ODIgMjMuMzA5IEMgMTkuODcgMjUuMDM4IDIxLjIwNSAyNiAyMyAyNiBMIDI5IDI2IEMgMjkuNTUyIDI2IDMw''@;'; put 'put ''IDI1LjU1MiAzMCAyNSBDIDMwIDI0LjQ0OCAyOS41NTIgMjQgMjkgMjQgTCAyMyAyNCBDIDIxLjE4MyAyNCAyMC4zMjYgMjIuNTAxIDE4Ljk2MiAxNy43MjUgQyAxOC4xODggMTUuMDE2IDE3Ljc5OSAxMy44ODIgMTcuMTE4IDEyLjY5MSBDIDE2LjEzIDEwLjk2MiAxNC43OTUgMTAgMTMgMTAg''@;'; put 'put ''TCA3IDEwIEMgNi40NDggMTAgNiAxMC40NDggNiAxMSBDIDYgMTEuNTUyIDYuNDQ4IDEyIDcgMTIgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkg''@;'; put 'put ''TCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUgMjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNCAz''@;'; put 'put ''MSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTEuOCBDIDYuNTU4IDExLjggNi4yIDExLjQ0MiA2LjIgMTEgQyA2LjIgMTAuNTU4IDYuNTU4IDEwLjIgNyAxMC4yIEwgMTMg''@;'; put 'put ''MTAuMiBDIDE1LjQwNCAxMC4yIDE2LjM2OCAxMS45MDcgMTcuNjUzIDE2LjQ3OCBDIDE3LjY5NSAxNi42MjggMTcuNzQ0IDE2LjgwMyAxNy44MzUgMTcuMTI5IEMgMTcuOTA5IDE3LjM5MiAxNy45NjQgMTcuNTg4IDE4LjAxOSAxNy43OCBDIDE5LjMzMiAyMi4zNzUgMjAuNTQ5IDI0LjIgMjMg''@;'; put 'put ''MjQuMiBMIDI5IDI0LjIgQyAyOS40NDIgMjQuMiAyOS44IDI0LjU1OCAyOS44IDI1IEMgMjkuOCAyNS40NDIgMjkuNDQyIDI1LjggMjkgMjUuOCBMIDIzIDI1LjggQyAxOS41MzUgMjUuOCAxNy45ODEgMjMuNDY5IDE2LjQ4MSAxOC4yMiBDIDE2LjQyNSAxOC4wMjUgMTYuMzY5IDE3LjgyNiAx''@;'; put 'put ''Ni4yOTUgMTcuNTYgQyAxNi4yMDMgMTcuMjM0IDE2LjE1NCAxNy4wNiAxNi4xMTMgMTYuOTExIEMgMTUuMDQzIDEzLjEwNSAxNC4zMDUgMTEuOCAxMyAxMS44IEwgNyAxMS44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCI+PC9w''@;'; put 'put ''YXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5''@;'; put 'put ''LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDEzIDEyIEMgMTQuODE3IDEyIDE1LjY3NCAxMy40OTkgMTcuMDM5IDE4LjI3NSBDIDE3LjgxMyAyMC45ODQgMTguMjAxIDIyLjExOCAxOC44ODIgMjMuMzA5IEMgMTkuODcg''@;'; put 'put ''MjUuMDM4IDIxLjIwNSAyNiAyMyAyNiBMIDI5IDI2IEMgMjkuNTUyIDI2IDMwIDI1LjU1MiAzMCAyNSBDIDMwIDI0LjQ0OCAyOS41NTIgMjQgMjkgMjQgTCAyMyAyNCBDIDIxLjE4MyAyNCAyMC4zMjYgMjIuNTAxIDE4Ljk2MiAxNy43MjUgQyAxOC4xODggMTUuMDE2IDE3Ljc5OSAxMy44ODIg''@;'; put 'put ''MTcuMTE4IDEyLjY5MSBDIDE2LjEzIDEwLjk2MiAxNC43OTUgMTAgMTMgMTAgTCA3IDEwIEMgNi40NDggMTAgNiAxMC40NDggNiAxMSBDIDYgMTEuNTUyIDYuNDQ4IDEyIDcgMTIgWiI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMx''@;'; put 'put ''IEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMS44IEMgNi41''@;'; put 'put ''NTggMTEuOCA2LjIgMTEuNDQyIDYuMiAxMSBDIDYuMiAxMC41NTggNi41NTggMTAuMiA3IDEwLjIgTCAxMyAxMC4yIEMgMTUuNDA0IDEwLjIgMTYuMzY4IDExLjkwNyAxNy42NTMgMTYuNDc4IEMgMTcuNjk1IDE2LjYyOCAxNy43NDQgMTYuODAzIDE3LjgzNSAxNy4xMjkgQyAxNy45MDkgMTcu''@;'; put 'put ''MzkyIDE3Ljk2NCAxNy41ODggMTguMDE5IDE3Ljc4IEMgMTkuMzMyIDIyLjM3NSAyMC41NDkgMjQuMiAyMyAyNC4yIEwgMjkgMjQuMiBDIDI5LjQ0MiAyNC4yIDI5LjggMjQuNTU4IDI5LjggMjUgQyAyOS44IDI1LjQ0MiAyOS40NDIgMjUuOCAyOSAyNS44IEwgMjMgMjUuOCBDIDE5LjUzNSAy''@;'; put 'put ''NS44IDE3Ljk4MSAyMy40NjkgMTYuNDgxIDE4LjIyIEMgMTYuNDI1IDE4LjAyNSAxNi4zNjkgMTcuODI2IDE2LjI5NSAxNy41NiBDIDE2LjIwMyAxNy4yMzQgMTYuMTU0IDE3LjA2IDE2LjExMyAxNi45MTEgQyAxNS4wNDMgMTMuMTA1IDE0LjMwNSAxMS44IDEzIDExLjggTCA3IDExLjggWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEu''@;'; put 'put ''MTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4x''@;'; put 'put ''MjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxNy42MjUgMTIuMzk1IEMgMTcuNDc2IDEyLjYxMiAxNy4zNzkgMTIu''@;'; put 'put ''ODQzIDE3LjMzIDEzLjA3NyBDIDE3LjI2MiAxMi45NDggMTcuMTkyIDEyLjgyIDE3LjExOCAxMi42OTEgQyAxNi4xMyAxMC45NjIgMTQuNzk1IDEwIDEzIDEwIEwgNyAxMCBDIDYuNDQ4IDEwIDYgMTAuNDQ4IDYgMTEgQyA2IDExLjU1MiA2LjQ0OCAxMiA3IDEyIEwgMTMgMTIgQyAxNC44MTcg''@;'; put 'put ''MTIgMTUuNjc0IDEzLjQ5OSAxNy4wMzkgMTguMjc1IEMgMTcuODEzIDIwLjk4NCAxOC4yMDEgMjIuMTE4IDE4Ljg4MiAyMy4zMDkgQyAxOS44NyAyNS4wMzggMjEuMjA1IDI2IDIzIDI2IEwgMjkgMjYgQyAyOS41NTIgMjYgMzAgMjUuNTUyIDMwIDI1IEMgMzAgMjQuNDQ4IDI5LjU1MiAyNCAy''@;'; put 'put ''OSAyNCBMIDIzIDI0IEMgMjEuMTgzIDI0IDIwLjMyNiAyMi41MDEgMTguOTYyIDE3LjcyNSBDIDE4LjY0IDE2LjU5OCAxOC4zODUgMTUuNzQ0IDE4LjE0NyAxNS4wNDQgQyAxOC40MDcgMTUuMjE1IDE4LjcxNyAxNS4zMjYgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1''@;'; put 'put ''LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEu''@;'; put 'put ''ODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIg''@;'; put 'put ''MzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLGIuQ2xyU2hhcGVHcmlkQ2hhcnQ9KDAscC5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xIiBkPSJNMTUsMTdINGEyLDIsMCwwLDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDE3Wk00LDh2N0gxNVY4WiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLDE3SDIx''@;'; put 'put ''YTIsMiwwLDAsMS0yLTJWOGEyLDIsMCwwLDEsMi0ySDMyYTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMzIsMTdaTTIxLDh2N0gzMlY4WiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE1LDMwSDRhMiwyLDAsMCwxLTItMlYyMWEy''@;'; put 'put ''LDIsMCwwLDEsMi0ySDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0zMiwzMEgyMWEyLDIsMCwwLDEtMi0yVjIxYTIsMiwwLDAsMSwyLTJIMzJh''@;'; put 'put ''MiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwzMiwzMFpNMjEsMjF2N0gzMlYyMVoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAxNSAxNyBMIDQgMTcgQyAyLjg5NSAxNyAyIDE2LjEwNSAyIDE1IEwgMiA4IEMgMiA2Ljg5NSAyLjg5NSA2''@;'; put 'put ''IDQgNiBMIDE1IDYgQyAxNi4xMDUgNiAxNyA2Ljg5NSAxNyA4IEwgMTcgMTUgQyAxNyAxNi4xMDUgMTYuMTA1IDE3IDE1IDE3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTSAzMiAxNyBMIDIxIDE3IEMgMTkuODk1IDE3IDE5IDE2LjEw''@;'; put 'put ''NSAxOSAxNSBMIDE5IDggQyAxOSA2Ljg5NSAxOS44OTUgNiAyMSA2IEwgMzIgNiBDIDMzLjEwNSA2IDM0IDYuODk1IDM0IDggTCAzNCAxNSBDIDM0IDE2LjEwNSAzMy4xMDUgMTcgMzIgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJN''@;'; put 'put ''IDE1IDMwIEwgNCAzMCBDIDIuODk1IDMwIDIgMjkuMTA1IDIgMjggTCAyIDIxIEMgMiAxOS44OTUgMi44OTUgMTkgNCAxOSBMIDE1IDE5IEMgMTYuMTA1IDE5IDE3IDE5Ljg5NSAxNyAyMSBMIDE3IDI4IEMgMTcgMjkuMTA1IDE2LjEwNSAzMCAxNSAzMCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0gMzIgMzAgTCAyMSAzMCBDIDE5Ljg5NSAzMCAxOSAyOS4xMDUgMTkgMjggTCAxOSAyMSBDIDE5IDE5Ljg5NSAxOS44OTUgMTkgMjEgMTkgTCAzMiAxOSBDIDMzLjEwNSAxOSAzNCAxOS44OTUgMzQgMjEgTCAzNCAyOCBDIDM0IDI5''@;'; put 'put ''LjEwNSAzMy4xMDUgMzAgMzIgMzAgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLWFsZXJ0ZWQiIGQ9Ik0xNSwxN0g0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEs''@;'; put 'put ''MTUsMTdaTTQsOHY3SDE1VjhaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItYWxlcnRlZCIgZD0iTSAzMiAxNyBMIDIxIDE3IEMgMjAuMDE0IDE3IDE5LjE5NSAxNi4yODcgMTkuMDMgMTUuMzQ4IEMgMTkuMDQxIDE1LjM0OSAx''@;'; put 'put ''OS4wNTMgMTUuMzUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzMy45NjggMTUuMzU3IEMgMzMuOCAxNi4yOTIgMzIuOTgzIDE3IDMyIDE3IFogTSAxOSA4IEMgMTkgNi44OTUgMTkuODk1IDYgMjEgNiBMIDIxLjM3MiA2IEwgMTkg''@;'; put 'put ''MTAuMDQ4IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy1hbGVydGVkIiBkPSJNMTUsMzBINGEyLDIsMCwwLDEtMi0yVjIxYTIsMiwwLDAsMSwyLTJIMTVhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwxNSwzMFpNNCwyMXY3''@;'; put 'put ''SDE1VjIxWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LWFsZXJ0ZWQiIGQ9Ik0zMiwzMEgyMWEyLDIsMCwwLDEtMi0yVjIxYTIsMiwwLDAsMSwyLTJIMzJhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwzMiwzMFpNMjEsMjF2''@;'; put 'put ''N0gzMlYyMVoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcg''@;'; put 'put ''MTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEu''@;'; put 'put ''MTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMTUgMTcgTCA0IDE3IEMgMi44OTUgMTcgMiAxNi4xMDUgMiAxNSBMIDIgOCBD''@;'; put 'put ''IDIgNi44OTUgMi44OTUgNiA0IDYgTCAxNSA2IEMgMTYuMTA1IDYgMTcgNi44OTUgMTcgOCBMIDE3IDE1IEMgMTcgMTYuMTA1IDE2LjEwNSAxNyAxNSAxNyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0g''@;'; put 'put ''MzIgMTcgTCAyMSAxNyBDIDIwLjAxNCAxNyAxOS4xOTUgMTYuMjg3IDE5LjAzIDE1LjM0OCBDIDE5LjA0MSAxNS4zNDkgMTkuMDUzIDE1LjM1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzMuOTY4IDE1LjM1NyBDIDMzLjggMTYu''@;'; put 'put ''MjkyIDMyLjk4MyAxNyAzMiAxNyBaIE0gMTkgOCBDIDE5IDYuODk1IDE5Ljg5NSA2IDIxIDYgTCAyMS4zNzIgNiBMIDE5IDEwLjA0OCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0gMTUgMzAgTCA0IDMw''@;'; put 'put ''IEMgMi44OTUgMzAgMiAyOS4xMDUgMiAyOCBMIDIgMjEgQyAyIDE5Ljg5NSAyLjg5NSAxOSA0IDE5IEwgMTUgMTkgQyAxNi4xMDUgMTkgMTcgMTkuODk1IDE3IDIxIEwgMTcgMjggQyAxNyAyOS4xMDUgMTYuMTA1IDMwIDE1IDMwIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCIgZD0iTSAzMiAzMCBMIDIxIDMwIEMgMTkuODk1IDMwIDE5IDI5LjEwNSAxOSAyOCBMIDE5IDIxIEMgMTkgMTkuODk1IDE5Ljg5NSAxOSAyMSAxOSBMIDMyIDE5IEMgMzMuMTA1IDE5IDM0IDE5Ljg5NSAzNCAyMSBMIDM0IDI4IEMg''@;'; put 'put ''MzQgMjkuMTA1IDMzLjEwNSAzMCAzMiAzMCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0''@;'; put 'put ''IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEu''@;'; put 'put ''MDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTE1LDE3SDRhMiwyLDAsMCwxLTItMlY4QTIsMiww''@;'; put 'put ''LDAsMSw0LDZIMTVhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwxNSwxN1pNNCw4djdIMTVWOFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNIDMyIDE3IEwgMjEgMTcgQyAxOS44OTUgMTcgMTkgMTYu''@;'; put 'put ''MTA1IDE5IDE1IEwgMTkgOCBDIDE5IDYuODk1IDE5Ljg5NSA2IDIxIDYgTCAyMi41OSA2IEMgMjIuNTkgNi4wMTkgMjIuNTkgNi4wMzcgMjIuNTkgNi4wNTYgQyAyMi41OSA2LjcyOSAyMi42OCA3LjM4MSAyMi44NDggOCBMIDIxIDggTCAyMSAxNSBMIDMyIDE1IEwgMzIgMTMuMTc1IEMgMzIu''@;'; put 'put ''NzE3IDEyLjk3MiAzMy4zODkgMTIuNjY0IDM0IDEyLjI2OSBMIDM0IDE1IEMgMzQgMTYuMTA1IDMzLjEwNSAxNyAzMiAxNyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTE1LDMwSDRhMiwyLDAsMCwx''@;'; put 'put ''LTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMzIsMzBIMjFhMiwyLDAsMCwx''@;'; put 'put ''LTItMlYyMWEyLDIsMCwwLDEsMi0ySDMyYTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMzIsMzBaTTIxLDIxdjdIMzJWMjFaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAi''@;'; put 'put ''IGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDE1IDE3IEwgNCAxNyBDIDIuODk1IDE3IDIgMTYuMTA1IDIgMTUgTCAyIDggQyAyIDYuODk1IDIuODk1IDYgNCA2IEwgMTUgNiBDIDE2LjEw''@;'; put 'put ''NSA2IDE3IDYuODk1IDE3IDggTCAxNyAxNSBDIDE3IDE2LjEwNSAxNi4xMDUgMTcgMTUgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTSAzMiAxNyBMIDIxIDE3IEMgMTkuODk1IDE3IDE5IDE2LjEwNSAx''@;'; put 'put ''OSAxNSBMIDE5IDggQyAxOSA2Ljg5NSAxOS44OTUgNiAyMSA2IEwgMjIuNTkgNiBDIDIyLjU5IDYuMDE5IDIyLjU5IDYuMDM3IDIyLjU5IDYuMDU2IEMgMjIuNTkgMTAuMTQxIDI1LjkwMSAxMy40NTIgMjkuOTg2IDEzLjQ1MiBDIDMxLjQ2NiAxMy40NTIgMzIuODQ0IDEzLjAxOCAzNCAxMi4y''@;'; put 'put ''NjkgTCAzNCAxNSBDIDM0IDE2LjEwNSAzMy4xMDUgMTcgMzIgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgZD0iTSAxNSAzMCBMIDQgMzAgQyAyLjg5NSAzMCAyIDI5LjEwNSAyIDI4IEwgMiAyMSBDIDIgMTku''@;'; put 'put ''ODk1IDIuODk1IDE5IDQgMTkgTCAxNSAxOSBDIDE2LjEwNSAxOSAxNyAxOS44OTUgMTcgMjEgTCAxNyAyOCBDIDE3IDI5LjEwNSAxNi4xMDUgMzAgMTUgMzAgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCIgZD0iTSAz''@;'; put 'put ''MiAzMCBMIDIxIDMwIEMgMTkuODk1IDMwIDE5IDI5LjEwNSAxOSAyOCBMIDE5IDIxIEMgMTkgMTkuODk1IDE5Ljg5NSAxOSAyMSAxOSBMIDMyIDE5IEMgMzMuMTA1IDE5IDM0IDE5Ljg5NSAzNCAyMSBMIDM0IDI4IEMgMzQgMjkuMTA1IDMzLjEwNSAzMCAzMiAzMCBaIi8+XG4gIDxjaXJjbGUg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxiLkNsclNoYXBlSGVhdE1hcD0oMCxwLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUgNSAzMiA1IFogTSA0IDI5IEwg''@;'; put 'put ''NCA3IEwgMzIgNyBMIDMyIDI5IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA4IDEwIEwgMjggMTAgTCAyOCAyNiBMIDggMjYgWiBNIDkuNiAyNCBMIDE0LjEgMjQgTCAxNC4xIDE4LjggTCA5LjYgMTguOCBaIE0gMTQuMSAxMS42IEwgOS42IDExLjYgTCA5LjYgMTcuMiBMIDE0LjEgMTcuMiBa''@;'; put 'put ''IE0gMjYgMjQgTCAyNiAxOC44IEwgMjEuOSAxOC44IEwgMjEuOSAyNCBaIE0gMjYgMTEuNiBMIDIxLjkgMTEuNiBMIDIxLjkgMTcuMiBMIDI2IDE3LjIgWiBNIDE1LjcgMTEuNiBMIDE1LjcgMTcuMiBMIDIwLjMgMTcuMiBMIDIwLjMgMTEuNiBaIE0gMTUuNyAyNCBMIDIwLjMgMjQgTCAyMC4z''@;'; put 'put ''IDE4LjggTCAxNS43IDE4LjggWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0''@;'; put 'put ''IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4x''@;'; put 'put ''MDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA4IDEwIEwgMjMuNzI4IDEwIEMgMjQuMTA1IDEwLjU5NiAyNC41NjQgMTEuMTM1IDI1LjA5IDExLjYgTCAyMS45IDExLjYg''@;'; put 'put ''TCAyMS45IDE3LjIgTCAyNiAxNy4yIEwgMjYgMTIuMjg3IEMgMjYuNjExIDEyLjY3OSAyNy4yODQgMTIuOTgzIDI4IDEzLjE4MiBMIDI4IDI2IEwgOCAyNiBaIE0gOS42IDI0IEwgMTQuMSAyNCBMIDE0LjEgMTguOCBMIDkuNiAxOC44IFogTSAxNC4xIDExLjYgTCA5LjYgMTEuNiBMIDkuNiAx''@;'; put 'put ''Ny4yIEwgMTQuMSAxNy4yIFogTSAyNiAyNCBMIDI2IDE4LjggTCAyMS45IDE4LjggTCAyMS45IDI0IFogTSAxNS43IDExLjYgTCAxNS43IDE3LjIgTCAyMC4zIDE3LjIgTCAyMC4zIDExLjYgWiBNIDE1LjcgMjQgTCAyMC4zIDI0IEwgMjAuMyAxOC44IEwgMTUuNyAxOC44IFoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTIyLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwv''@;'; put 'put ''Y2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUg''@;'; put 'put ''Mi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA4IDEwIEwgMTkuMDI4IDEwIEwgMTguMDkxIDExLjYgTCAxNS43IDExLjYgTCAxNS43IDE3LjIgTCAyMC4z''@;'; put 'put ''IDE3LjIgTCAyMC4zIDE1LjM1NyBMIDIxLjkgMTUuMzU3IEwgMjEuOSAxNy4yIEwgMjYgMTcuMiBMIDI2IDE1LjM1NyBMIDI4IDE1LjM1NyBMIDI4IDI2IEwgOCAyNiBaIE0gOS42IDI0IEwgMTQuMSAyNCBMIDE0LjEgMTguOCBMIDkuNiAxOC44IFogTSAxNC4xIDExLjYgTCA5LjYgMTEuNiBM''@;'; put 'put ''IDkuNiAxNy4yIEwgMTQuMSAxNy4yIFogTSAyNiAyNCBMIDI2IDE4LjggTCAyMS45IDE4LjggTCAyMS45IDI0IFogTSAxNS43IDI0IEwgMjAuMyAyNCBMIDIwLjMgMTguOCBMIDE1LjcgMTguOCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0t''@;'; put 'put ''YWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMjItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAy''@;'; put 'put ''Mi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjku''@;'; put 'put ''MDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAy''@;'; put 'put ''Ljg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSA4IDI2IEwgMjggMjYgTCAyOCAxMCBMIDggMTAgWiBNIDEwIDE5IEwgMTQgMTkgTCAxNCAyNCBMIDEwIDI0IFogTSAyMiAyNCBMIDIyIDE5''@;'; put 'put ''IEwgMjYgMTkgTCAyNiAyNCBaIE0gMjAgMTkgTCAyMCAyNCBMIDE2IDI0IEwgMTYgMTkgWiBNIDI2IDE3IEwgMjIgMTcgTCAyMiAxMiBMIDI2IDEyIFogTSAyMCAxMiBMIDIwIDE3IEwgMTYgMTcgTCAxNiAxMiBaIE0gMTQgMTIgTCAxNCAxNyBMIDEwIDE3IEwgMTAgMTIgWiI+PC9wYXRoPlxu''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5''@;'; put 'put ''NiA1IDQgNSBMIDIyLjU3IDUgQyAyMi4zMTIgNi44MTcgMjIuNzMyIDguNTY2IDIzLjYzMyAxMCBMIDggMTAgTCA4IDI2IEwgMjggMjYgTCAyOCAxMy4yMzIgQyAyOC40MjEgMTMuMzQ1IDI4Ljg1OSAxMy40MjIgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNiAxMy40MjkgMzIu''@;'; put 'put ''ODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gMTAgMTkgTCAxNCAxOSBMIDE0IDI0IEwgMTAgMjQgWiBNIDIyIDI0IEwgMjIgMTkgTCAyNiAxOSBMIDI2IDI0IFogTSAyMCAxOSBMIDIwIDI0IEwgMTYgMjQgTCAxNiAxOSBaIE0gMjYgMTcgTCAyMiAxNyBMIDIyIDEyIEwgMjUuNTg0IDEyIEMgMjUu''@;'; put 'put ''NzE5IDEyLjEgMjUuODU4IDEyLjE5NiAyNiAxMi4yODcgWiBNIDIwIDEyIEwgMjAgMTcgTCAxNiAxNyBMIDE2IDEyIFogTSAxNCAxMiBMIDE0IDE3IEwgMTAgMTcgTCAxMCAxMiBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0yMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0''@;'; put 'put ''IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE5LjAyOCAxMCBMIDggMTAgTCA4IDI2IEwgMjggMjYgTCAyOCAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDEwIDE5IEwgMTQgMTkgTCAxNCAyNCBMIDEwIDI0IFogTSAy''@;'; put 'put ''MiAyNCBMIDIyIDE5IEwgMjYgMTkgTCAyNiAyNCBaIE0gMjAgMTkgTCAyMCAyNCBMIDE2IDI0IEwgMTYgMTkgWiBNIDI2IDE3IEwgMjIgMTcgTCAyMiAxNS4zNTcgTCAyNiAxNS4zNTcgWiBNIDIwIDE3IEwgMTYgMTcgTCAxNiAxMiBMIDE3Ljg1NiAxMiBMIDE3LjYyNSAxMi4zOTUgQyAxNi43''@;'; put 'put ''OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAyMCAxNS4zNTcgWiBNIDE0IDEyIEwgMTQgMTcgTCAxMCAxNyBMIDEwIDEyIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''LS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMjItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIz''@;'; put 'put ''NCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0''@;'; put 'put ''NCBaIj48L3BhdGg+JyksYi5DbHJTaGFwZUxpbmVDaGFydD0oMCxwLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44''@;'; put 'put ''OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUgNSAzMiA1IFogTSA0IDI5IEwgNCA3IEwgMzIgNyBMIDMyIDI5IFoiPjwvcGF0aD5cbiAgPHBvbHlnb24gcG9pbnRzPSIxNS42MiAxNS4yMjIgOS42MDIgMjMuOTY4''@;'; put 'put ''IDUuNTUgMjAuMzg0IDYuNjEgMTkuMTg2IDkuMzA4IDIxLjU3MiAxNS42MzQgMTIuMzggMjIuMzg0IDIyLjM5NSAyOS4xMzggMTMuNDcgMzAuNDE0IDE0LjQzNiAyMi4zMDggMjUuMTQ1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wb2x5Z29uPlxuICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NiA1IDIgNS44OTYgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk2IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44''@;'; put 'put ''OTYgMzMuMTA1IDUgMzIgNSBaIE0gMjIuNTYgMjUuOTQgTCAxNS40NiAxNS4zNiBMIDkuMTIgMjQuNjQgTCA0LjYyIDIwLjY0IEwgNiAxOS4wNSBMIDguNyAyMS40NCBMIDE1LjQ2IDExLjU2IEwgMjIuNjUgMjIuMjcgTCAyOS42NSAxMyBMIDMxLjM1IDE0LjI4IFoiPjwvcGF0aD5cbiAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1''@;'; put 'put ''LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0''@;'; put 'put ''aD5cbiAgPHBvbHlnb24gcG9pbnRzPSIxNS42MiAxNS4yMjIgOS42MDIgMjMuOTY4IDUuNTUgMjAuMzg0IDYuNjEgMTkuMTg2IDkuMzA4IDIxLjU3MiAxNS42MzQgMTIuMzggMjIuMzg0IDIyLjM5NSAyOS4xMzggMTMuNDcgMzAuNDE0IDE0LjQzNiAyMi4zMDggMjUuMTQ1IiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcG9seWdvbj5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwv''@;'; put 'put ''Y2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMC4zMiAxMy40OCBMIDMxLjM4IDE0LjI4IEwgMjIuNTYgMjUuOTQgTCAxNS40NiAxNS4zNiBMIDkuMTIgMjQuNjQgTCA0LjYyIDIwLjY0IEwgNiAxOS4w''@;'; put 'put ''NSBMIDguNyAyMS40NCBMIDE1LjQ2IDExLjU2IEwgMjIuNjUgMjIuMjcgTCAyOS4zMSAxMy40NiBDIDI1LjA1IDEzLjEgMjEuOTY5IDkuMjMzIDIyLjU3IDUgTCA0IDUgQyAyLjg5NiA1IDIgNS44OTYgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk2IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEw''@;'; put 'put ''NSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCAxMi4zNCBDIDMyLjg5NSAxMy4wMzYgMzEuNjI2IDEzLjQyOSAzMC4zMiAxMy40OCBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4''@;'; put 'put ''PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUg''@;'; put 'put ''MiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNS42MiAxNS4yMjIgTCA5LjYwMiAyMy45NjggTCA1LjU1IDIwLjM4''@;'; put 'put ''NCBMIDYuNjEgMTkuMTg2IEwgOS4zMDggMjEuNTcyIEwgMTUuNjM0IDEyLjM4IEwgMjIuMzg0IDIyLjM5NSBMIDI3LjcxNyAxNS4zNDggTCAyOS43MjQgMTUuMzQ4IEwgMjIuMzA4IDI1LjE0NSBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0t''@;'; put 'put ''YWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIy''@;'; put 'put ''LjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4w''@;'; put 'put ''NjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEg''@;'; put 'put ''TCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4y''@;'; put 'put ''NyAxNS4zNTcgTCAyNy40NTIgMTUuMzU3IEwgMjIuMzggMjIuMDYgTCAxNS42MyAxMiBMIDkuMjggMjEuMjggTCA2Ljc1IDE5LjA0IEwgNS40MiAyMC41MyBMIDkuNjUgMjQuMjggTCAxNS42MSAxNS41NiBMIDIyLjI4IDI1LjUgTCAyOS45NTkgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0''@;'; put 'put ''aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4x''@;'; put 'put ''NDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAw''@;'; put 'put ''LjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSxiLkNsclNoYXBlUGllQ2hhcnQ9KDAscC5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44''@;'; put 'put ''OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTcg''@;'; put 'put ''MjcgQyAxMi41ODIgMjcgOSAyMy40MTggOSAxOSBDIDkgMTQuNTgyIDEyLjU4MiAxMSAxNyAxMSBMIDE3IDE5IEwgMjUgMTkgQyAyNSAyMy40MTggMjEuNDE4IDI3IDE3IDI3IFogTSAyMy4yNDcgMjAuNCBMIDE1LjQgMjAuNCBMIDE1LjQgMTIuODAyIEMgMTIuNjQgMTMuNTEzIDEwLjYwMSAx''@;'; put 'put ''Ni4wMTggMTAuNiAxOSBDIDEwLjYgMjIuNTM1IDEzLjQ2NSAyNS40IDE3IDI1LjQgQyAyMC4wNTQgMjUuNDAxIDIyLjYwOCAyMy4yNjEgMjMuMjQ3IDIwLjQgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxOSA5IEMg''@;'; put 'put ''MjMuNDE4IDkgMjcgMTIuNTgyIDI3IDE3IEwgMTkgMTcgWiBNIDI1LjE5OCAxNS40IEMgMjQuNjIgMTMuMTUgMjIuODQ5IDExLjM4IDIwLjYgMTAuODAxIEwgMjAuNiAxNS40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIj48L3BhdGg+XG4gIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBDIDMyIDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk2IDM0IDcg''@;'; put 'put ''WiBNIDI1IDE5IEwgMTcgMTkgTCAxNyAxMSBDIDEyLjU4MiAxMSA5IDE0LjU4MiA5IDE5IEMgOSAyMy40MTggMTIuNTgyIDI3IDE3IDI3IEMgMjEuNDE4IDI3IDI1IDIzLjQxOCAyNSAxOSBaIE0gMTkgMTcgTCAyNyAxNyBDIDI3IDEyLjU4MiAyMy40MTggOSAxOSA5IFoiPjwvcGF0aD5cbiAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUy''@;'; put 'put ''NCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwv''@;'; put 'put ''cGF0aD5cbiAgPHBhdGggZD0iTSAxNyAyNyBDIDEyLjU4MiAyNyA5IDIzLjQxOCA5IDE5IEMgOSAxNC41ODIgMTIuNTgyIDExIDE3IDExIEwgMTcgMTkgTCAyNSAxOSBDIDI1IDIzLjQxOCAyMS40MTggMjcgMTcgMjcgWiBNIDIzLjI0NyAyMC40IEwgMTUuNCAyMC40IEwgMTUuNCAxMi44MDIg''@;'; put 'put ''QyAxMi42NCAxMy41MTMgMTAuNjAxIDE2LjAxOCAxMC42IDE5IEMgMTAuNiAyMi41MzUgMTMuNDY1IDI1LjQgMTcgMjUuNCBDIDIwLjA1NCAyNS40MDEgMjIuNjA4IDIzLjI2MSAyMy4yNDcgMjAuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0y''@;'; put 'put ''LS1iYWRnZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxOSA5IEMgMjMuNDE4IDkgMjcgMTIuNTgyIDI3IDE3IEwgMTkgMTcgWiBNIDI1LjE5OCAxNS40IEMgMjQuNjIgMTMuMTUgMjIuODQ5IDExLjM4IDIwLjYgMTAuODAxIEwgMjAuNiAxNS40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1''@;'; put 'put ''IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDI1IDE5IEwgMTcgMTkgTCAxNyAxMSBDIDEyLjU4MiAxMSA5IDE0LjU4MiA5IDE5IEMgOSAyMy40MTgg''@;'; put 'put ''MTIuNTgyIDI3IDE3IDI3IEMgMjEuNDE4IDI3IDI1IDIzLjQxOCAyNSAxOSBaIE0gMTkgMTcgTCAyNyAxNyBDIDI3IDEyLjU4MiAyMy40MTggOSAxOSA5IFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBj''@;'; put 'put ''bHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5''@;'; put 'put ''NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE3IDI3IEMgMTIuNTgyIDI3IDkgMjMuNDE4''@;'; put 'put ''IDkgMTkgQyA5IDE0LjU4MiAxMi41ODIgMTEgMTcgMTEgTCAxNyAxOSBMIDI1IDE5IEMgMjUgMjMuNDE4IDIxLjQxOCAyNyAxNyAyNyBaIE0gMjMuMjQ3IDIwLjQgTCAxNS40IDIwLjQgTCAxNS40IDEyLjgwMiBDIDEyLjY0IDEzLjUxMyAxMC42MDEgMTYuMDE4IDEwLjYgMTkgQyAxMC42IDIy''@;'; put 'put ''LjUzNSAxMy40NjUgMjUuNCAxNyAyNS40IEMgMjAuMDU0IDI1LjQwMSAyMi42MDggMjMuMjYxIDIzLjI0NyAyMC40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjcgMTcgTCAxOSAx''@;'; put 'put ''NyBMIDE5IDE1LjM0NSBDIDE5LjAyMSAxNS4zNDggMTkuMDQzIDE1LjM0OSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDI2LjgzMSAxNS4zNTcgQyAyNi45NDIgMTUuODg3IDI3IDE2LjQzNyAyNyAxNyBaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQg''@;'; put 'put ''MTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAx''@;'; put 'put ''MS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIg''@;'; put 'put ''ZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi44MDcgMTMuNTgzIDE3LjU3MSAxNS4xOTcgMTkgMTUuMzQ1''@;'; put 'put ''IEwgMTkgMTcgTCAyNyAxNyBDIDI3IDE2LjQzNyAyNi45NDIgMTUuODg3IDI2LjgzMSAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDI1IDE5IEwgMTcgMTkgTCAxNyAxMSBDIDEyLjU4MiAxMSA5IDE0LjU4MiA5IDE5IEMgOSAyMy40MTggMTIuNTgyIDI3IDE3IDI3IEMgMjEuNDE4IDI3IDI1IDIz''@;'; put 'put ''LjQxOCAyNSAxOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAy''@;'; put 'put ''Mi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjku''@;'; put 'put ''MDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksYi5DbHJTaGFwZVNjYXR0ZXJQbG90PSgwLHAuY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1''@;'; put 'put ''IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiIvPlxu''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUuOCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0''@;'; put 'put ''IDEzLjkwNSAxNS41MDcgQyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAxMy45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2''@;'; put 'put ''MSAxMS4yNSBMIDExLjQwMSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43''@;'; put 'put ''ODkgMTUuNDg3IDkuMTAxIDE1LjggWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTSAxNS4xNzYgMjUuNTM2IEMgMTUuNDg4IDI1Ljg0NyAxNS45OTQgMjUuODQ3IDE2LjMwNiAyNS41MzYgTCAxNy40NjYgMjQuMzc2IEwgMTguNjI2''@;'; put 'put ''IDI1LjUzNiBDIDE5LjAzOSAyNS45OTIgMTkuNzkyIDI1LjgzIDE5Ljk4IDI1LjI0MyBDIDIwLjA3NyAyNC45NDQgMTkuOTg5IDI0LjYxNyAxOS43NTYgMjQuNDA2IEwgMTguNjA2IDIzLjI3NiBMIDE5Ljc2NiAyMi4xMTYgQyAyMC4yMjIgMjEuNzAyIDIwLjA2IDIwLjk1IDE5LjQ3NCAyMC43''@;'; put 'put ''NjEgQyAxOS4xNzUgMjAuNjY1IDE4Ljg0NyAyMC43NTMgMTguNjM2IDIwLjk4NiBMIDE3LjQ3NiAyMi4xNDYgTCAxNi4zMDYgMjAuOTU2IEMgMTUuODkyIDIwLjQ5OSAxNS4xNCAyMC42NjIgMTQuOTUyIDIxLjI0OCBDIDE0Ljg1NSAyMS41NDcgMTQuOTQzIDIxLjg3NSAxNS4xNzYgMjIuMDg2''@;'; put 'put ''IEwgMTYuMzM2IDIzLjI3NiBMIDE1LjE3NiAyNC40MDYgQyAxNC44NjQgMjQuNzE4IDE0Ljg2NCAyNS4yMjMgMTUuMTc2IDI1LjUzNiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAu''@;'; put 'put ''NjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgz''@;'; put 'put ''IEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40Njkg''@;'; put 'put ''MjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTYgMzQgNyBaIE0gOS4xMDEg''@;'; put 'put ''MTUuOCBDIDkuNDEzIDE2LjExMSA5LjkxOSAxNi4xMTEgMTAuMjMxIDE1LjggTCAxMS4zOTEgMTQuNjQgTCAxMi41NTEgMTUuOCBDIDEyLjk2NCAxNi4yNTYgMTMuNzE3IDE2LjA5NCAxMy45MDUgMTUuNTA3IEMgMTQuMDAyIDE1LjIwOCAxMy45MTQgMTQuODgxIDEzLjY4MSAxNC42NyBMIDEy''@;'; put 'put ''LjUzMSAxMy41NCBMIDEzLjY5MSAxMi4zOCBDIDE0LjE0NyAxMS45NjYgMTMuOTg1IDExLjIxNCAxMy4zOTkgMTEuMDI1IEMgMTMuMSAxMC45MjkgMTIuNzcyIDExLjAxNyAxMi41NjEgMTEuMjUgTCAxMS40MDEgMTIuNDEgTCAxMC4yMzEgMTEuMjIgQyA5LjgxNyAxMC43NjMgOS4wNjUgMTAu''@;'; put 'put ''OTI2IDguODc3IDExLjUxMiBDIDguNzggMTEuODExIDguODY4IDEyLjEzOSA5LjEwMSAxMi4zNSBMIDEwLjI2MSAxMy41NCBMIDkuMTAxIDE0LjY3IEMgOC43ODkgMTQuOTgyIDguNzg5IDE1LjQ4NyA5LjEwMSAxNS44IFogTSAxNS4xNzYgMjUuNTM2IEMgMTUuNDg4IDI1Ljg0NyAxNS45OTQg''@;'; put 'put ''MjUuODQ3IDE2LjMwNiAyNS41MzYgTCAxNy40NjYgMjQuMzc2IEwgMTguNjI2IDI1LjUzNiBDIDE5LjAzOSAyNS45OTIgMTkuNzkyIDI1LjgzIDE5Ljk4IDI1LjI0MyBDIDIwLjA3NyAyNC45NDQgMTkuOTg5IDI0LjYxNyAxOS43NTYgMjQuNDA2IEwgMTguNjA2IDIzLjI3NiBMIDE5Ljc2NiAy''@;'; put 'put ''Mi4xMTYgQyAyMC4yMjIgMjEuNzAyIDIwLjA2IDIwLjk1IDE5LjQ3NCAyMC43NjEgQyAxOS4xNzUgMjAuNjY1IDE4Ljg0NyAyMC43NTMgMTguNjM2IDIwLjk4NiBMIDE3LjQ3NiAyMi4xNDYgTCAxNi4zMDYgMjAuOTU2IEMgMTUuODkyIDIwLjQ5OSAxNS4xNCAyMC42NjIgMTQuOTUyIDIxLjI0''@;'; put 'put ''OCBDIDE0Ljg1NSAyMS41NDcgMTQuOTQzIDIxLjg3NSAxNS4xNzYgMjIuMDg2IEwgMTYuMzM2IDIzLjI3NiBMIDE1LjE3NiAyNC40MDYgQyAxNC44NjQgMjQuNzE4IDE0Ljg2NCAyNS4yMjMgMTUuMTc2IDI1LjUzNiBaIE0gMjIuOTEyIDIwLjM0MyBDIDIzLjIyNCAyMC42NTQgMjMuNzMgMjAu''@;'; put 'put ''NjU0IDI0LjA0MiAyMC4zNDMgTCAyNS4yMDIgMTkuMTgzIEwgMjYuMzYyIDIwLjM0MyBDIDI2Ljc3NSAyMC43OTkgMjcuNTI4IDIwLjYzNyAyNy43MTYgMjAuMDUgQyAyNy44MTMgMTkuNzUxIDI3LjcyNSAxOS40MjQgMjcuNDkyIDE5LjIxMyBMIDI2LjM0MiAxOC4wODMgTCAyNy41MDIgMTYu''@;'; put 'put ''OTIzIEMgMjcuOTU4IDE2LjUwOSAyNy43OTYgMTUuNzU3IDI3LjIxIDE1LjU2OCBDIDI2LjkxMSAxNS40NzIgMjYuNTgzIDE1LjU2IDI2LjM3MiAxNS43OTMgTCAyNS4yMTIgMTYuOTUzIEwgMjQuMDQyIDE1Ljc2MyBDIDIzLjYyOCAxNS4zMDYgMjIuODc2IDE1LjQ2OSAyMi42ODggMTYuMDU1''@;'; put 'put ''IEMgMjIuNTkxIDE2LjM1NCAyMi42NzkgMTYuNjgyIDIyLjkxMiAxNi44OTMgTCAyNC4wNzIgMTguMDgzIEwgMjIuOTEyIDE5LjIxMyBDIDIyLjYgMTkuNTI1IDIyLjYgMjAuMDMgMjIuOTEyIDIwLjM0MyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAy''@;'; put 'put ''IDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUuOCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41MDcgQyAxNC4wMDIg''@;'; put 'put ''MTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAxMy45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDExLjQwMSAxMi40MSBM''@;'; put 'put ''IDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDkuMTAxIDE1LjggWiIv''@;'; put 'put ''PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYg''@;'; put 'put ''QyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTku''@;'; put 'put ''MTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMz''@;'; put 'put ''NiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0gMjIuOTEyIDIwLjM0MyBDIDIz''@;'; put 'put ''LjIyNCAyMC42NTQgMjMuNzMgMjAuNjU0IDI0LjA0MiAyMC4zNDMgTCAyNS4yMDIgMTkuMTgzIEwgMjYuMzYyIDIwLjM0MyBDIDI2Ljc3NSAyMC43OTkgMjcuNTI4IDIwLjYzNyAyNy43MTYgMjAuMDUgQyAyNy44MTMgMTkuNzUxIDI3LjcyNSAxOS40MjQgMjcuNDkyIDE5LjIxMyBMIDI2LjM0''@;'; put 'put ''MiAxOC4wODMgTCAyNy41MDIgMTYuOTIzIEMgMjcuOTU4IDE2LjUwOSAyNy43OTYgMTUuNzU3IDI3LjIxIDE1LjU2OCBDIDI2LjkxMSAxNS40NzIgMjYuNTgzIDE1LjU2IDI2LjM3MiAxNS43OTMgTCAyNS4yMTIgMTYuOTUzIEwgMjQuMDQyIDE1Ljc2MyBDIDIzLjYyOCAxNS4zMDYgMjIuODc2''@;'; put 'put ''IDE1LjQ2OSAyMi42ODggMTYuMDU1IEMgMjIuNTkxIDE2LjM1NCAyMi42NzkgMTYuNjgyIDIyLjkxMiAxNi44OTMgTCAyNC4wNzIgMTguMDgzIEwgMjIuOTEyIDE5LjIxMyBDIDIyLjYgMTkuNTI1IDIyLjYgMjAuMDMgMjIuOTEyIDIwLjM0MyBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQg''@;'; put 'put ''MjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMu''@;'; put 'put ''NDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDkuMTAxIDE1LjggQyA5LjQxMyAxNi4xMTEgOS45MTkgMTYuMTExIDEwLjIzMSAxNS44IEwgMTEuMzkxIDE0LjY0IEwgMTIuNTUxIDE1LjggQyAxMi45NjQgMTYuMjU2IDEzLjcxNyAxNi4wOTQgMTMuOTA1IDE1LjUwNyBDIDE0LjAwMiAx''@;'; put 'put ''NS4yMDggMTMuOTE0IDE0Ljg4MSAxMy42ODEgMTQuNjcgTCAxMi41MzEgMTMuNTQgTCAxMy42OTEgMTIuMzggQyAxNC4xNDcgMTEuOTY2IDEzLjk4NSAxMS4yMTQgMTMuMzk5IDExLjAyNSBDIDEzLjEgMTAuOTI5IDEyLjc3MiAxMS4wMTcgMTIuNTYxIDExLjI1IEwgMTEuNDAxIDEyLjQxIEwg''@;'; put 'put ''MTAuMjMxIDExLjIyIEMgOS44MTcgMTAuNzYzIDkuMDY1IDEwLjkyNiA4Ljg3NyAxMS41MTIgQyA4Ljc4IDExLjgxMSA4Ljg2OCAxMi4xMzkgOS4xMDEgMTIuMzUgTCAxMC4yNjEgMTMuNTQgTCA5LjEwMSAxNC42NyBDIDguNzg5IDE0Ljk4MiA4Ljc4OSAxNS40ODcgOS4xMDEgMTUuOCBaIE0g''@;'; put 'put ''MTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTku''@;'; put 'put ''NzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1''@;'; put 'put ''Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiBNIDIy''@;'; put 'put ''LjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5''@;'; put 'put ''MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42''@;'; put 'put ''MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8Y2ly''@;'; put 'put ''Y2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBk''@;'; put 'put ''PSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcg''@;'; put 'put ''WiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUuOCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIu''@;'; put 'put ''OTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41MDcgQyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAxMy45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEw''@;'; put 'put ''LjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDExLjQwMSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEg''@;'; put 'put ''MTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDkuMTAxIDE1LjggWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTSAxNS4xNzYgMjUuNTM2IEMgMTUuNDg4IDI1Ljg0NyAxNS45OTQgMjUu''@;'; put 'put ''ODQ3IDE2LjMwNiAyNS41MzYgTCAxNy40NjYgMjQuMzc2IEwgMTguNjI2IDI1LjUzNiBDIDE5LjAzOSAyNS45OTIgMTkuNzkyIDI1LjgzIDE5Ljk4IDI1LjI0MyBDIDIwLjA3NyAyNC45NDQgMTkuOTg5IDI0LjYxNyAxOS43NTYgMjQuNDA2IEwgMTguNjA2IDIzLjI3NiBMIDE5Ljc2NiAyMi4x''@;'; put 'put ''MTYgQyAyMC4yMjIgMjEuNzAyIDIwLjA2IDIwLjk1IDE5LjQ3NCAyMC43NjEgQyAxOS4xNzUgMjAuNjY1IDE4Ljg0NyAyMC43NTMgMTguNjM2IDIwLjk4NiBMIDE3LjQ3NiAyMi4xNDYgTCAxNi4zMDYgMjAuOTU2IEMgMTUuODkyIDIwLjQ5OSAxNS4xNCAyMC42NjIgMTQuOTUyIDIxLjI0OCBD''@;'; put 'put ''IDE0Ljg1NSAyMS41NDcgMTQuOTQzIDIxLjg3NSAxNS4xNzYgMjIuMDg2IEwgMTYuMzM2IDIzLjI3NiBMIDE1LjE3NiAyNC40MDYgQyAxNC44NjQgMjQuNzE4IDE0Ljg2NCAyNS4yMjMgMTUuMTc2IDI1LjUzNiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1''@;'; put 'put ''IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwg''@;'; put 'put ''MjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAy''@;'; put 'put ''Mi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4x''@;'; put 'put ''MTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAx''@;'; put 'put ''MS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEg''@;'; put 'put ''MzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1''@;'; put 'put ''OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDkuMTAxIDE1LjggQyA5LjQxMyAxNi4xMTEgOS45MTkgMTYuMTExIDEwLjIzMSAxNS44IEwgMTEuMzkxIDE0LjY0IEwgMTIuNTUxIDE1LjggQyAxMi45NjQgMTYuMjU2IDEzLjcxNyAxNi4wOTQgMTMuOTA1IDE1LjUwNyBDIDE0LjAwMiAx''@;'; put 'put ''NS4yMDggMTMuOTE0IDE0Ljg4MSAxMy42ODEgMTQuNjcgTCAxMi41MzEgMTMuNTQgTCAxMy42OTEgMTIuMzggQyAxNC4xNDcgMTEuOTY2IDEzLjk4NSAxMS4yMTQgMTMuMzk5IDExLjAyNSBDIDEzLjEgMTAuOTI5IDEyLjc3MiAxMS4wMTcgMTIuNTYxIDExLjI1IEwgMTEuNDAxIDEyLjQxIEwg''@;'; put 'put ''MTAuMjMxIDExLjIyIEMgOS44MTcgMTAuNzYzIDkuMDY1IDEwLjkyNiA4Ljg3NyAxMS41MTIgQyA4Ljc4IDExLjgxMSA4Ljg2OCAxMi4xMzkgOS4xMDEgMTIuMzUgTCAxMC4yNjEgMTMuNTQgTCA5LjEwMSAxNC42NyBDIDguNzg5IDE0Ljk4MiA4Ljc4OSAxNS40ODcgOS4xMDEgMTUuOCBaIE0g''@;'; put 'put ''MTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTku''@;'; put 'put ''NzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1''@;'; put 'put ''Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiBNIDIy''@;'; put 'put ''LjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5''@;'; put 'put ''MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42''@;'; put 'put ''MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUg''@;'; put 'put ''MjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0''@;'; put 'put ''OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPlxuICA8cmVjdCB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIGZpbGwtb3BhY2l0eT0iMCIvPicpLGIuQ2xyU2hhcGVUaWNrQ2hhcnQ9KDAscC5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcg''@;'; put 'put ''TCAzMiAyOSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNIDYgMjUgTCA4IDI1IEwgOCAyMiBMIDEwIDIyIEwgMTAgMjUgTCAxMyAyNSBMIDEzIDIyIEwgMTUgMjIgTCAxNSAyNSBMIDE4IDI1IEwgMTggMjIgTCAyMCAyMiBMIDIw''@;'; put 'put ''IDI1IEwgMjMgMjUgTCAyMyAyMiBMIDI1IDIyIEwgMjUgMjUgTCAyNy43MjMgMjUgQyAyOC4wMjMgMjUuMDIgMjguMjkzIDI1LjE4IDI4LjQ2MyAyNS40MyBDIDI4LjkwMyAyNi4wNiAyOC40ODMgMjYuOTMgMjcuNzIzIDI2Ljk5IEwgNiAyNi45OTEgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTYgMzQg''@;'; put 'put ''NyBaIE0gNiAyNi45OTEgTCAyNy43MjMgMjYuOTkgQyAyOC40ODMgMjYuOTMgMjguOTAzIDI2LjA2IDI4LjQ2MyAyNS40MyBDIDI4LjI5MyAyNS4xOCAyOC4wMjMgMjUuMDIgMjcuNzIzIDI1IEwgMjUgMjUgTCAyNSAyMiBMIDIzIDIyIEwgMjMgMjUgTCAyMCAyNSBMIDIwIDIyIEwgMTggMjIg''@;'; put 'put ''TCAxOCAyNSBMIDE1IDI1IEwgMTUgMjIgTCAxMyAyMiBMIDEzIDI1IEwgMTAgMjUgTCAxMCAyMiBMIDggMjIgTCA4IDI1IEwgNiAyNSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBM''@;'; put 'put ''IDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMy''@;'; put 'put ''IDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTSA2IDI1IEwg''@;'; put 'put ''OCAyNSBMIDggMjIgTCAxMCAyMiBMIDEwIDI1IEwgMTMgMjUgTCAxMyAyMiBMIDE1IDIyIEwgMTUgMjUgTCAxOCAyNSBMIDE4IDIyIEwgMjAgMjIgTCAyMCAyNSBMIDIzIDI1IEwgMjMgMjIgTCAyNSAyMiBMIDI1IDI1IEwgMjcuNzIzIDI1IEMgMjguMDIzIDI1LjAyIDI4LjI5MyAyNS4xOCAy''@;'; put 'put ''OC40NjMgMjUuNDMgQyAyOC45MDMgMjYuMDYgMjguNDgzIDI2LjkzIDI3LjcyMyAyNi45OSBMIDYgMjYuOTkxIFoiLz5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYi''@;'; put 'put ''IHI9IjUiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQgMTIuMzQgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIg''@;'; put 'put ''NS44OTYgMi44OTYgNSA0IDUgTCAyMi41NyA1IEMgMjEuOTY5IDkuMjMzIDI1LjA1IDEzLjEgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNiAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gNiAyNi45OTEgTCAyNy43MjMgMjYuOTkgQyAyOC40ODMgMjYuOTMgMjgu''@;'; put 'put ''OTAzIDI2LjA2IDI4LjQ2MyAyNS40MyBDIDI4LjI5MyAyNS4xOCAyOC4wMjMgMjUuMDIgMjcuNzIzIDI1IEwgMjUgMjUgTCAyNSAyMiBMIDIzIDIyIEwgMjMgMjUgTCAyMCAyNSBMIDIwIDIyIEwgMTggMjIgTCAxOCAyNSBMIDE1IDI1IEwgMTUgMjIgTCAxMyAyMiBMIDEzIDI1IEwgMTAgMjUg''@;'; put 'put ''TCAxMCAyMiBMIDggMjIgTCA4IDI1IEwgNiAyNSBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQg''@;'; put 'put ''NyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNIDYgMjUgTCA4IDI1IEwgOCAyMiBMIDEwIDIyIEwgMTAgMjUgTCAxMyAyNSBM''@;'; put 'put ''IDEzIDIyIEwgMTUgMjIgTCAxNSAyNSBMIDE4IDI1IEwgMTggMjIgTCAyMCAyMiBMIDIwIDI1IEwgMjMgMjUgTCAyMyAyMiBMIDI1IDIyIEwgMjUgMjUgTCAyNy43MjMgMjUgQyAyOC4wMjMgMjUuMDIgMjguMjkzIDI1LjE4IDI4LjQ2MyAyNS40MyBDIDI4LjkwMyAyNi4wNiAyOC40ODMgMjYu''@;'; put 'put ''OTMgMjcuNzIzIDI2Ljk5IEwgNiAyNi45OTEgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAy''@;'; put 'put ''MS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4''@;'; put 'put ''NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUg''@;'; put 'put ''MzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1''@;'; put 'put ''LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDYgMjYuOTkxIEwgMjcuNzIzIDI2Ljk5IEMgMjguNDgzIDI2LjkzIDI4LjkwMyAyNi4wNiAyOC40NjMgMjUuNDMgQyAyOC4yOTMgMjUuMTggMjguMDIzIDI1LjAyIDI3LjcyMyAyNSBMIDI1IDI1IEwgMjUgMjIgTCAyMyAyMiBMIDIz''@;'; put 'put ''IDI1IEwgMjAgMjUgTCAyMCAyMiBMIDE4IDIyIEwgMTggMjUgTCAxNSAyNSBMIDE1IDIyIEwgMTMgMjIgTCAxMyAyNSBMIDEwIDI1IEwgMTAgMjIgTCA4IDIyIEwgOCAyNSBMIDYgMjUgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0y''@;'; put 'put ''LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0''@;'; put 'put ''LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPicpLGIuQ2xyU2hhcGVCZWxsQ3VydmU9''@;'; put 'put ''KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLDI5SDNBMSwxLDAsMSwxLDMsMjdIMzNBMSwxLDAsMSwxLDMzLDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDI1aC0uNjJhOC4xMSw4LjExLDAsMCwxLTgtNi42N0MyMy42''@;'; put 'put ''MiwxNC40NCwyMS44OSw3Ljk0LDE4LDcuOTRzLTUuNjksNi41MS02LjM4LDEwLjM5YTguMTEsOC4xMSwwLDAsMS04LDYuNjVIM2ExLDEsMCwxLDEsMC0yaC42QTYuMTEsNi4xMSwwLDAsMCw5LjYsMThjMS40MS03Ljg4LDQuMy0xMiw4LjM1LTEyczYuOTMsNC4xNiw4LjMzLDEyYTYuMTEsNi4x''@;'; put 'put ''MSwwLDAsMCw2LDVIMzNhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLGIuQ2hhcnRTaGFwZXM9eyJheGlzLWNoYXJ0IjpiLkNsclNoYXBlQXhpc0NoYXJ0LCJiYXItY2hhcnQiOmIuQ2xyU2hhcGVCYXJDaGFydCwiYnViYmxl''@;'; put 'put ''LWNoYXJ0IjpiLkNsclNoYXBlQnViYmxlQ2hhcnQsImNsb3VkLWNoYXJ0IjpiLkNsclNoYXBlQ2xvdWRDaGFydCwiY3VydmUtY2hhcnQiOmIuQ2xyU2hhcGVDdXJ2ZUNoYXJ0LCJncmlkLWNoYXJ0IjpiLkNsclNoYXBlR3JpZENoYXJ0LCJsaW5lLWNoYXJ0IjpiLkNsclNoYXBlTGluZUNoYXJ0''@;'; put 'put ''LCJwaWUtY2hhcnQiOmIuQ2xyU2hhcGVQaWVDaGFydCwidGljay1jaGFydCI6Yi5DbHJTaGFwZVRpY2tDaGFydCwic2NhdHRlci1wbG90IjpiLkNsclNoYXBlU2NhdHRlclBsb3QsImJveC1wbG90IjpiLkNsclNoYXBlQm94UGxvdCwiaGVhdC1tYXAiOmIuQ2xyU2hhcGVIZWF0TWFwLCJiZWxs''@;'; put 'put ''LWN1cnZlIjpiLkNsclNoYXBlQmVsbEN1cnZlfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5DaGFydFNoYXBlcywiYW5hbHl0aWNzIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuQ2hhcnRTaGFwZXNbImxpbmUtY2hhcnQiXSkpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJv''@;'; put 'put ''cGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChiLkNoYXJ0U2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb21tZXJjZS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29tbWVyY2Utc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5v''@;'; put 'put ''IHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oWCxiLEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksYi5Db21tZXJjZVNoYXBlcz1iLkNsclNoYXBlRmFjdG9yeT1iLkNsclNoYXBlRW1wbG95ZWU9Yi5DbHJTaGFw''@;'; put 'put ''ZUVtcGxveWVlR3JvdXA9Yi5DbHJTaGFwZVJ1YmxlPWIuQ2xyU2hhcGVQZXNvPWIuQ2xyU2hhcGVDb2luQmFnPWIuQ2xyU2hhcGVCaXRjb2luPWIuQ2xyU2hhcGVZZW49Yi5DbHJTaGFwZVdvbj1iLkNsclNoYXBlUnVwZWU9Yi5DbHJTaGFwZVBvdW5kPWIuQ2xyU2hhcGVFQ2hlY2s9Yi5DbHJT''@;'; put 'put ''aGFwZURvbGxhckJpbGw9Yi5DbHJTaGFwZUJhbms9Yi5DbHJTaGFwZUNyZWRpdENhcmQ9Yi5DbHJTaGFwZURvbGxhcj1iLkNsclNoYXBlRXVybz1iLkNsclNoYXBlU3RvcmU9Yi5DbHJTaGFwZVdhbGxldD1iLkNsclNoYXBlU2hvcHBpbmdDYXJ0PWIuQ2xyU2hhcGVQaWdneUJhbms9Yi5DbHJT''@;'; put 'put ''aGFwZVNob3BwaW5nQmFnPWIuQ2xyU2hhcGVDYWxjdWxhdG9yPXZvaWQgMDt2YXIgXz1JKAovKiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIikscD1JKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1n''@;'; put 'put ''ZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7Yi5DbHJTaGFwZUNhbGN1bGF0b3I9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOCwySDhBMiwy''@;'; put 'put ''LDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlpNOCwzMlY0SDI4VjMyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xMiw4SDI1LjY3VjZIMTFhMSwx''@;'; put 'put ''LDAsMCwwLTEsMXY0LjY3aDJaIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgcG9pbnRzPSIxMiAxNiAxMCAxNiAxMCAxOCAxNCAxOCAxNCAxNCAxMiAxNCAxMiAxNiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHBvaW50cz0iMjQgMTYgMjIgMTYgMjIgMTggMjYgMTggMjYgMTQgMjQgMTQgMjQgMTYiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBwb2ludHM9''@;'; put 'put ''IjE4IDE2IDE2IDE2IDE2IDE4IDIwIDE4IDIwIDE0IDE4IDE0IDE4IDE2Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgcG9pbnRzPSIxMiAyMiAxMCAyMiAxMCAyNCAxNCAyNCAxNCAyMCAxMiAyMCAxMiAyMiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHBvaW50cz0iMjQgMjIgMjIgMjIgMjIgMjQgMjYgMjQgMjYgMjAgMjQgMjAgMjQgMjIiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC04IiBwb2ludHM9IjE4IDIyIDE2IDIyIDE2IDI0IDIwIDI0IDIwIDIwIDE4IDIwIDE4IDIyIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgcG9pbnRzPSIxMiAyOCAxMCAyOCAxMCAzMCAxNCAz''@;'; put 'put ''MCAxNCAyNiAxMiAyNiAxMiAyOCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiBwb2ludHM9IjI0IDI4IDIyIDI4IDIyIDMwIDI2IDMwIDI2IDI2IDI0IDI2IDI0IDI4Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTEiIHBvaW50cz0iMTggMjggMTYgMjggMTYgMzAgMjAgMzAgMjAgMjYgMTggMjYgMTggMjgiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOCwySDhB''@;'; put 'put ''MiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlpNMTIsMjhIMTBWMjZoMlptMC02SDEwVjIwaDJabTAtNkgxMFYxNGgyWm03LDEySDE3VjI2aDJabTAtNkgxN1YyMGgyWm0wLTZIMTdWMTRoMlptNywxMkgyNFYyNmgyWm0wLTZI''@;'; put 'put ''MjRWMjBoMlptMC02SDI0VjE0aDJabTAtN0gxMFY1SDI2WiIvPicpLGIuQ2xyU2hhcGVTaG9wcGluZ0JhZz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI1LDEyVjkuMDVhNyw3LDAsMSwwLTE0LDB2N2ExLDEs''@;'; put 'put ''MCwwLDAsMiwwVjE0aDhWMTJIMTNWOS4wNWE1LDUsMCwxLDEsMTAsMFYxNmExLDEsMCwxLDAsMiwwVjE0aDVWMzJINlYxNEg5VjEySDRWMzIuMDlBMS45MSwxLjkxLDAsMCwwLDUuOTEsMzRIMzAuMDlBMS45MSwxLjkxLDAsMCwwLDMyLDMyLjA5VjEyWiIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTEzLDkuMjJhNSw1LDAsMSwxLDEwLDBWMTJoMlY5LjIyYTcsNywwLDEsMC0xNCwwVjEyaDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjUs''@;'; put 'put ''MTJ2My4xYTEsMSwwLDEsMS0yLDBWMTJIMTN2My4xYTEsMSwwLDAsMS0yLDBWMTJINFYzMmEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTJaIi8+JyksYi5DbHJTaGFwZVBpZ2d5QmFuaz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIgZD0iTTE5LjcyLDEwLjQ3YTExLjY1LDExLjY1LDAsMCwwLTYuMzEuNTJBLjguOCwwLDEsMCwxNCwxMi40OCwxMC4xMSwxMC4xMSwwLDAsMSwxOS40NCwxMmEuOC44LDAsMSwwLC4yOC0xLjU3WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjI1LjM4IiBjeT0iMTYuNzEiIHI9IjEuMzYiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzUuNTEsMTguNjNhMSwxLDAsMCwwLS44NC0uNDQsMy40MiwzLjQy''@;'; put 'put ''LDAsMCwxLTIuMDktMS4xMiwxNy4zNSwxNy4zNSwwLDAsMS0yLjYzLTMuNzhsMi44OC00LjVBMS44OSwxLjg5LDAsMCwwLDMzLDdhMS43NywxLjc3LDAsMCwwLTEuMzMtMSwxMC4xMiwxMC4xMiwwLDAsMC01LjM5Ljc1LDEyLjcyLDEyLjcyLDAsMCwwLTIuNzIsMS42MywxNi45NCwxNi45NCww''@;'; put 'put ''LDAsMC01LjE2LTEuMzlDMTEuMzEsNi4zLDQuODMsMTAuOSw0LDE3SDRhMi41NiwyLjU2LDAsMCwxLTEuMzgtMS41MywxLjgxLDEuODEsMCwwLDEsLjE0LTEuNCwxLjE5LDEuMTksMCwwLDEsLjQzLS40MywxLjA4LDEuMDgsMCwwLDAtMS4xMi0xLjg1QTMuMzEsMy4zMSwwLDAsMCwuOTEsMTNh''@;'; put 'put ''NCw0LDAsMCwwLS4zMywzLjA4QTQuNzYsNC43NiwwLDAsMCwzLDE4Ljk1bC45Mi40NmExNy41OCwxNy41OCwwLDAsMCwxLjgyLDdsLjE3LjM4QTIzLDIzLDAsMCwwLDkuMiwzMS44OGExLDEsMCwwLDAsLjc1LjM0aDQuNTJhMSwxLDAsMCwwLC45Mi0xLjM4TDE1LDI5Ljk0bDEuMTguMTNhMjAu''@;'; put 'put ''MzMsMjAuMzMsMCwwLDAsNCwwYy4zNy42Ljc3LDEuMiwxLjIxLDEuNzlhMSwxLDAsMCwwLC44LjQxaDQuMzRhMSwxLDAsMCwwLC45Mi0xLjM5Yy0uMTctLjQtLjM0LS44My0uNDctMS4yLS4xOC0uNTMtLjMyLTEtLjQzLTEuNDVBMTMuMTgsMTMuMTgsMCwwLDAsMjkuNTYsMjZhMTIuNSwxMi41''@;'; put 'put ''LDAsMCwwLDMsMCwxLDEsMCwwLDAsLjc4LS42MmwyLjI2LTUuODFBMSwxLDAsMCwwLDM1LjUxLDE4LjYzWm0tMy43OCw1LjQ0YTExLjM3LDExLjM3LDAsMCwxLTIuMzUtLjExaDBhOC4yLDguMiwwLDAsMS0yLjUzLS44NywxLDEsMCwwLDAtLjkzLDEuNzcsMTEuNzIsMTEuNzIsMCwwLDAsMS4y''@;'; put 'put ''OS41OCw4LDgsMCwwLDEtMS44LDEuMTZsLTEuMDYuNDhzLjQ5LDIuMTkuODIsMy4xNkgyMi43OWMtLjI0LS4zNC0xLjQ1LTIuMzYtMS40NS0yLjM2bC0uNjcuMDlhMTguNTMsMTguNTMsMCwwLDEtNC4yNS4xMmMtLjY2LS4wNi0xLjc2LS4yLTIuNjItLjM1bC0xLjU1LS4yN3MuNjMsMi40My43''@;'; put 'put ''NSwyLjc0djBIMTAuNDJBMjAuNTcsMjAuNTcsMCwwLDEsNy43NiwyNmwtLjE4LS4zOUExNC42MiwxNC42MiwwLDAsMSw2LDE3LjQ4Yy41NC01LjE5LDYuMTItOS4xMSwxMi4xOS04LjU0YTE1LjQ3LDE1LjQ3LDAsMCwxLDUuMDgsMS40OGwuNjIuMjkuNS0uNDdBMTAuMjksMTAuMjksMCwwLDEs''@;'; put 'put ''MjcsOC41NGE4LjI1LDguMjUsMCwwLDEsNC0uNjVsLTMuMzgsNS4yOS4yNS41aDBhMjEuMTYsMjEuMTYsMCwwLDAsMy4zMSw0Ljg0LDYuNDksNi40OSwwLDAsMCwyLjE0LDEuMzlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBk''@;'; put 'put ''PSJNMzUsMTguODdBNS44Myw1LjgzLDAsMCwxLDMzLDE3LjYxYTIxLjYzLDIxLjYzLDAsMCwxLTMuMjktNC44NGwzLjM5LTUuMjlhLjkuOSwwLDAsMC0uNTQtMS4zOCw5LjY3LDkuNjcsMCwwLDAtNS4xMy43MiwxMiwxMiwwLDAsMC0zLjEzLDJBMTcuMzcsMTcuMzcsMCwwLDAsMTguNiw3LjE1''@;'; put 'put ''QzExLjgsNi41Miw1LjI3LDEwLjksNC41NCwxN2wtLjE0LS4wN0EyLjc2LDIuNzYsMCwwLDEsMi45LDE1LjI5YTIsMiwwLDAsMSwuMTUtMS41NSwxLjMyLDEuMzIsMCwwLDEsLjQ3LS40OCwxLjA4LDEuMDgsMCwxLDAtMS4xMi0xLjg1LDMuNDUsMy40NSwwLDAsMC0xLjIzLDEuMjVBNC4xNiw0''@;'; put 'put ''LjE2LDAsMCwwLC44NCwxNS45YTUsNSwwLDAsMCwyLjU3LDNsMSwuNTRhMTguNjIsMTguNjIsMCwwLDAsMiw3LjMsMjMsMjMsMCwwLDAsMyw0Ljc5LDEsMSwwLDAsMCwuOC4zOGgzLjYxYS41Mi41MiwwLDAsMCwuNC0uNzVMMTQsMzAuMzhhMTEsMTEsMCwwLDEtLjMzLTEuMThjLjkxLjE2LDIu''@;'; put 'put ''MDguMzEsMi44Ny4zOGEyMC4wNywyMC4wNywwLDAsMCwzLjEyLDBjLjM5LjcuNzksMS4zMywxLjE1LDEuODVhLjkzLjkzLDAsMCwwLC43Ny40MWgzLjExYS42NS42NSwwLDAsMCwuNjEtLjg1Yy0uMjMtLjc0LS41My0xLjc1LS43MS0yLjM3YTE1LjksMTUuOSwwLDAsMCwzLjc1LTEuNzZjLjE2''@;'; put 'put ''LS4xMS4zMi0uMjYuNDgtLjM5YTEzLjc3LDEzLjc3LDAsMCwxLTIuNDItMSwuOC44LDAsMCwxLC43NC0xLjQyLDExLjY0LDExLjY0LDAsMCwwLDMuMTgsMS4xLDEzLjMxLDEzLjMxLDAsMCwwLDIuNjguMTIsMSwxLDAsMCwwLC45LS42NmwxLjczLTQuNDRBMSwxLDAsMCwwLDM1LDE4Ljg3Wk0x''@;'; put 'put ''My43OSwxMS41OWEuODYuODYsMCwwLDEtLjMuMDUuODUuODUsMCwwLDEtLjMtMS42NCwxMi40MSwxMi40MSwwLDAsMSw2LjY5LS41NS44NS44NSwwLDEsMS0uMywxLjY3QTEwLjc1LDEwLjc1LDAsMCwwLDEzLjc5LDExLjU5Wm0xMi41Miw2LjEyYTEuNDQsMS40NCwwLDEsMSwxLjQ0LTEuNDRB''@;'; put 'put ''MS40NCwxLjQ0LDAsMCwxLDI2LjMyLDE3LjcyWiIvPicpLGIuQ2xyU2hhcGVTaG9wcGluZ0NhcnQ9KDAscC5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iMTMuMzMiIGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8Y2lyY2xlIGN4PSIyNyIgY3k9IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4wOCw1LjM3QTEsMSwwLDAsMCwzMi4zMSw1SDExLjQ5bC42NSwySDMxTDI4LjMzLDE5''@;'; put 'put ''aC0xNUw4Ljc2LDQuNTNhMSwxLDAsMCwwLS42Ni0uNjVMNCwyLjYyYTEsMSwwLDEsMC0uNTksMS45Mkw3LDUuNjRsNC41OSwxNC41TDkuOTUsMjEuNDhsLS4xMy4xM0EyLjY2LDIuNjYsMCwwLDAsOS43NCwyNSwyLjc1LDIuNzUsMCwwLDAsMTIsMjZIMjguNjlhMSwxLDAsMCwwLDAtMkgxMS44''@;'; put 'put ''NGEuNjcuNjcsMCwwLDEtLjU2LTFsMi40MS0ySDI5LjEzYTEsMSwwLDAsMCwxLS43OGwzLjE3LTE0QTEsMSwwLDAsMCwzMy4wOCw1LjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMy4zMyIgY3k9IjI5''@;'; put 'put ''Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI3IiBjeT0iMjkuNzUiIHI9IjIuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyMC43MSA3IDIxLjg3IDUgMTEuNDkgNSAxMi4xNCA3IDIwLjcxIDciIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTI5LjE1LDE1LjQsMjguMzMsMTloLTE1TDguNzYsNC41M2ExLDEsMCwwLDAtLjY2LS42NUw0LDIuNjJhMSwxLDAsMSwwLS41OSwxLjkyTDcsNS42NGw0LjU5LDE0LjVMOS45NSwyMS40OGwtLjEzLjEzQTIuNjYsMi42NiwwLDAsMCw5Ljc0LDI1LDIuNzUsMi43''@;'; put 'put ''NSwwLDAsMCwxMiwyNkgyOC42OWExLDEsMCwwLDAsMC0ySDExLjg0YS42Ny42NywwLDAsMS0uNTYtMWwyLjQxLTJIMjkuMTNhMSwxLDAsMCwwLDEtLjc4bDEuMDktNC44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTMuMzMiIGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjciIGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjU3LDdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcu''@;'; put 'put ''NTIsNy41MiwwLDAsMSwuMDctMUgxMS40OWwuNjUsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41bC0uNDIsMEwyOC4zMywxOWgtMTVMOC43Niw0LjUzYTEsMSwwLDAs''@;'; put 'put ''MC0uNjYtLjY1TDQsMi42MmExLDEsMCwxLDAtLjU5LDEuOTJMNyw1LjY0bDQuNTksMTQuNUw5Ljk1LDIxLjQ4bC0uMTMuMTNBMi42NiwyLjY2LDAsMCwwLDkuNzQsMjUsMi43NSwyLjc1LDAsMCwwLDEyLDI2SDI4LjY5YTEsMSwwLDAsMCwwLTJIMTEuODRhLjY3LjY3LDAsMCwxLS41Ni0xbDIu''@;'; put 'put ''NDEtMkgyOS4xM2ExLDEsMCwwLDAsMS0uNzhsMS41Ny02LjkxQTcuNTEsNy41MSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1''@;'; put 'put ''IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTMuNSIgY3k9IjI5LjUiIHI9IjIuNSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI2LjUiIGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMSw2LjM5QTEsMSwwLDAsMCwzMi4zMSw2SDkuMjFMOC43Niw0LjU3YTEsMSww''@;'; put 'put ''LDAsMC0uNjYtLjY1TDQsMi42NmExLDEsMCwxLDAtLjU5LDEuOTJMNyw1LjY4bDQuNTgsMTQuNDdMOS45NSwyMS40OWwtLjEzLjEzQTIuNjYsMi42NiwwLDAsMCw5Ljc0LDI1LDIuNzUsMi43NSwwLDAsMCwxMiwyNkgyOC42OWExLDEsMCwwLDAsMC0ySDExLjg0YS42Ny42NywwLDAsMS0uNTYt''@;'; put 'put ''MWwyLjQxLTJIMjkuMTJhMSwxLDAsMCwwLDEtLjc2bDMuMi0xM0ExLDEsMCwwLDAsMzMuMSw2LjM5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEzLjUiIGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNi41IiBjeT0iMjkuNSIgcj0iMi41IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTIyLjIzLDE1LjRBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkg5LjIxTDguNzYsNC41N2ExLDEsMCwwLDAtLjY2LS42NUw0LDIuNjZhMSwxLDAsMSwwLS41OSwxLjkyTDcsNS42OGw0LjU4LDE0LjQ3TDkuOTUsMjEuNDlsLS4xMy4xM0EyLjY2LDIuNjYsMCww''@;'; put 'put ''LDAsOS43NCwyNSwyLjc1LDIuNzUsMCwwLDAsMTIsMjZIMjguNjlhMSwxLDAsMCwwLDAtMkgxMS44NGEuNjcuNjcsMCwwLDEtLjU2LTFsMi40MS0ySDI5LjEyYTEsMSwwLDAsMCwxLS43NmwxLjE5LTQuODRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0z''@;'; put 'put ''LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMy41IiBjeT0iMjkuNSIgcj0iMi41IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI2LjUiIGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy41LDcuNSwwLDAsMSwyMi41LDZIOS4y''@;'; put 'put ''MUw4Ljc2LDQuNTdhMSwxLDAsMCwwLS42Ni0uNjVMNCwyLjY2YTEsMSwwLDEsMC0uNTksMS45Mkw3LDUuNjhsNC41OCwxNC40N0w5Ljk1LDIxLjQ5bC0uMTMuMTNBMi42NiwyLjY2LDAsMCwwLDkuNzQsMjUsMi43NSwyLjc1LDAsMCwwLDEyLDI2SDI4LjY5YTEsMSwwLDAsMCwwLTJIMTEuODRh''@;'; put 'put ''LjY3LjY3LDAsMCwxLS41Ni0xbDIuNDEtMkgyOS4xMmExLDEsMCwwLDAsMS0uNzZsMS43MS03QTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIz''@;'; put 'put ''MCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxiLkNsclNoYXBlV2FsbGV0PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xIiBkPSJNMzIsMTVIMzFWOWExLDEsMCwwLDAtMS0xSDZhMSwxLDAsMCwxLTEtLjgyVjYuODJBMSwxLDAsMCwxLDYsNkgyOS41OGExLDEsMCwwLDAsMC0ySDZBMywzLDAsMCwwLDMsN2EzLjA4LDMuMDgsMCwwLDAsMCwuMzZWMjcuOTNBNC4xLDQuMSwwLDAsMCw3LjEzLDMySDMwYTEs''@;'; put 'put ''MSwwLDAsMCwxLTFWMjVoMWExLDEsMCwwLDAsMS0xVjE2QTEsMSwwLDAsMCwzMiwxNVpNMjksMzBINy4xM0EyLjExLDIuMTEsMCwwLDEsNSwyNy45M1Y5Ljg4QTMuMTEsMy4xMSwwLDAsMCw2LDEwSDI5djVIMjJhNSw1LDAsMCwwLDAsMTBoN1ptMi03SDIyYTMsMywwLDAsMSwwLTZIMzFaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBjeD0iMjMuMDEiIGN5PSIyMCIgcj0iMS41Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuOTQsMTRI''@;'; put 'put ''MzFWOWExLDEsMCwwLDAtMS0xSDZBMSwxLDAsMCwxLDUsN0g1VjdBMSwxLDAsMCwxLDYsNkgyOS42YTEsMSwwLDEsMCwwLTJINkEyLjk0LDIuOTQsMCwwLDAsMyw2Ljg4djIxQTQuMTMsNC4xMywwLDAsMCw3LjE1LDMySDMwYTEsMSwwLDAsMCwxLTFWMjZoMS45NGEuOTMuOTMsMCwwLDAsMS0u''@;'; put 'put ''OTF2LTEwQTEuMDgsMS4wOCwwLDAsMCwzMi45NCwxNFpNMzIsMjRsLTguNTgsMGEzLjg3LDMuODcsMCwwLDEtMy43My00LDMuODcsMy44NywwLDAsMSwzLjczLTRMMzIsMTZaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGN4''@;'; put 'put ''PSIyNC4wNCIgY3k9IjE5LjkyIiByPSIxLjUiLz4nKSxiLkNsclNoYXBlU3RvcmU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOCwzMEgxNlYyMkgxNHY4SDhWMjJINnY4YTIsMiwwLDAsMCwyLDJIMjhhMiwy''@;'; put 'put ''LDAsMCwwLDItMlYyMkgyOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzMuNzksMTMuMjcsMjkuNzEsNS4xMUEyLDIsMCwwLDAsMjcuOTIsNEg4LjA4QTIsMiwwLDAsMCw2LjI5LDUuMTFMMi4yMSwxMy4yN2Ey''@;'; put 'put ''LDIsMCwwLDAtLjIxLjl2My4wOGEyLDIsMCwwLDAsLjQ2LDEuMjhBNC42Nyw0LjY3LDAsMCwwLDYsMjAuMTNhNC43Miw0LjcyLDAsMCwwLDMtMS4wNyw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzMsNC43MywwLDAsMCw2LDAsNC43Myw0LjczLDAsMCwwLDYsMCw0LjcyLDQuNzIsMCwwLDAsNi41''@;'; put 'put ''My0uNTJBMiwyLDAsMCwwLDM0LDE3LjI2VjE0LjE3QTIsMiwwLDAsMCwzMy43OSwxMy4yN1pNMzAsMTguMTNBMi42OCwyLjY4LDAsMCwxLDI3LjgyLDE3TDI3LDE1Ljg4LDI2LjE5LDE3YTIuNzEsMi43MSwwLDAsMS00LjM3LDBMMjEsMTUuODgsMjAuMTksMTdhMi43MSwyLjcxLDAsMCwxLTQu''@;'; put 'put ''MzcsMEwxNSwxNS44OCwxNC4xOSwxN2EyLjcxLDIuNzEsMCwwLDEtNC4zNywwTDksMTUuODgsOC4xOCwxN0EyLjY4LDIuNjgsMCwwLDEsNiwxOC4xM2EyLjY0LDIuNjQsMCwwLDEtMi0uODhWMTQuMTdMOC4wOCw2SDI3LjkyTDMyLDE0LjE2di42N2wwLDIuMzlBMi42NywyLjY3LDAsMCwxLDMw''@;'; put 'put ''LDE4LjEzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI4LDMwSDE2VjIySDE0djhIOFYyMkg2djhhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjIySDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMzLjc5LDEzLjI3LDI5LjcxLDUuMTFBMiwyLDAsMCwwLDI3LjkyLDRIOC4wOEEyLDIsMCwwLDAsNi4yOSw1LjExTDIuMjEsMTMuMjdhMiwyLDAsMCwwLS4yMS45djMuMDhhMiwyLDAsMCwwLC40NiwxLjI4QTQuNjcsNC42Nyww''@;'; put 'put ''LDAsMCw2LDIwLjEzYTQuNzIsNC43MiwwLDAsMCwzLTEuMDcsNC43Myw0LjczLDAsMCwwLDYsMCw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzMsNC43MywwLDAsMCw2LDAsNC43Miw0LjcyLDAsMCwwLDYuNTMtLjUyQTIsMiwwLDAsMCwzNCwxNy4yNlYxNC4xN0EyLDIsMCwwLDAsMzMuNzksMTMu''@;'; put 'put ''MjdaTTE1LDE0LjR2MS41MkwxNC4xOCwxN2EyLjcxLDIuNzEsMCwwLDEtNC4zNywwTDksMTUuODhWMTQuNEwxMS41OSw2SDE2Wm0xMiwxLjQ4TDI2LjE5LDE3YTIuNzEsMi43MSwwLDAsMS00LjM3LDBMMjEsMTUuODhsMCwwVjE0LjRMMjAsNmg0LjQ1TDI3LDE0LjRaIi8+JyksYi5DbHJTaGFw''@;'; put 'put ''ZUV1cm89KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMS40OCwyOC40OWExLDEsMCwwLDAtMS4zOC0uMzJBMTIsMTIsMCwwLDEsMTIuNDUsMjJIMjQuMTZhMSwxLDAsMCwwLDAtMkgxMS45M2ExMS4xNiwxMS4x''@;'; put 'put ''NiwwLDAsMSwwLTRIMjQuMTZhMSwxLDAsMCwwLDAtMkgxMi40NUExMiwxMiwwLDAsMSwzMC4wNiw3LjhhMSwxLDAsMCwwLDEuMDYtMS43QTE0LDE0LDAsMCwwLDEwLjM0LDE0SDMuNTRhMSwxLDAsMSwwLDAsMkg5LjkxYTE0LDE0LDAsMCwwLS4xNiwyLDE0LDE0LDAsMCwwLC4xNiwySDMuNTRh''@;'; put 'put ''MSwxLDAsMSwwLDAsMmg2LjhhMTQsMTQsMCwwLDAsMjAuODMsNy44N0ExLDEsMCwwLDAsMzEuNDgsMjguNDlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwx''@;'; put 'put ''OCwyWm03LjQyLDI1LjE2QTEwLjg4LDEwLjg4LDAsMCwxLDkuMjMsMjFINS44NGExLDEsMCwwLDEsMC0yaDNjMC0uMzUtLjA1LS43MS0uMDUtMS4wN3MwLS42MywwLS45M2gtM2ExLDEsMCwwLDEsMC0ySDkuMTlBMTAuODYsMTAuODYsMCwwLDEsMjUuMzgsOC42OWExLjI1LDEuMjUsMCwwLDEt''@;'; put 'put ''MS4zMiwyLjEyQTguMzYsOC4zNiwwLDAsMCwxMS44MiwxNWg5LjM2YTEsMSwwLDAsMSwwLDJIMTEuMzNhNy43Miw3LjcyLDAsMCwwLDAsMmg5LjgyYTEsMSwwLDAsMSwwLDJIMTEuODdhOC4zNiw4LjM2LDAsMCwwLDEyLjIyLDQsMS4yNSwxLjI1LDAsMSwxLDEuMzMsMi4xMloiLz4nKSxiLkNs''@;'; put 'put ''clNoYXBlRG9sbGFyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjYsMjEuMTVhNi45MSw2LjkxLDAsMCwwLTQuMzgtMy4zMkEyNiwyNiwwLDAsMCwxOSwxNy4xOVY4LjEyQTEwLjA1LDEwLjA1LDAsMCwxLDIz''@;'; put 'put ''Ljg2LDEwYTEsMSwwLDAsMCwxLjMzLTEuNUExMS43NSwxMS43NSwwLDAsMCwxOSw2LjFWM2ExLDEsMCwwLDAtMiwwVjZjLTQuNC4xLTYuODMsMi4yOS03LjU3LDQuMThBNS41Niw1LjU2LDAsMCwwLDExLjY2LDE3LDEzLjIsMTMuMiwwLDAsMCwxNywxOC44NFYyOGExMi4zLDEyLjMsMCwwLDEt''@;'; put 'put ''Ny4xNC0yLjc0QTEsMSwwLDEsMCw4LjQ5LDI2LjcsMTQuMDksMTQuMDksMCwwLDAsMTcsMzB2M2ExLDEsMCwwLDAsMiwwVjMwYzIuODItLjE5LDYuMDctMS4wOSw3LjMtNC43NkE1LjMzLDUuMzMsMCwwLDAsMjYsMjEuMTVaTTEyLjc5LDE1LjMyYTMuNTcsMy41NywwLDAsMS0xLjQ5LTQuMzlD''@;'; put 'put ''MTEuNDEsMTAuNjMsMTIuNTMsOC4xMiwxNyw4djguOEExMC43LDEwLjcsMCwwLDEsMTIuNzksMTUuMzJaTTI0LjQsMjQuNTZjLS43MiwyLjE0LTIuMzIsMy4xNy01LjQsMy40VjE5LjIzYy42NC4xNCwxLjMuMywyLC41MWE1LDUsMCwwLDEsMy4xOSwyLjMyQTMuMzQsMy4zNCwwLDAsMSwyNC40''@;'; put 'put ''LDI0LjU2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSJcbiAgICAgICAgICAgICAgICBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm03LjY1LDIxLjU5Yy0xLDMtMy42MSwzLjg0LTUuOSw0djJh''@;'; put 'put ''MS4yNSwxLjI1LDAsMCwxLTIuNSwwVjI3LjU5QTExLjQ3LDExLjQ3LDAsMCwxLDExLDI1YTEuMjUsMS4yNSwwLDEsMSwxLjcxLTEuODMsOS4xMSw5LjExLDAsMCwwLDQuNTUsMS45NFYxOC44M2E5LjYzLDkuNjMsMCwwLDEtMy43My0xLjQxLDQuOCw0LjgsMCwwLDEtMS45MS01Ljg0Yy41OS0x''@;'; put 'put ''LjUxLDIuNDItMy4yMyw1LjY0LTMuNTFWNi4yNWExLjI1LDEuMjUsMCwwLDEsMi41LDBWOC4xMWE5LjY3LDkuNjcsMCwwLDEsNC45LDJBMS4yNSwxLjI1LDAsMCwxLDIzLDExLjk1YTcuMTQsNy4xNCwwLDAsMC0zLjI0LTEuMzF2Ni4xM2MuNi4xMywxLjI0LjI3LDEuOTEuNDhhNS44NSw1Ljg1''@;'; put 'put ''LDAsMCwxLDMuNjksMi44MkE0LjY0LDQuNjQsMCwwLDEsMjUuNjUsMjMuNTlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjAuOTIsMTkuNjRjLS40LS4xMi0uNzktLjIyLTEuMTctLjN2NS43NmMyLS4yLDMuMDctLjks''@;'; put 'put ''My41My0yLjNhMi4xNSwyLjE1LDAsMCwwLS4xNS0xLjU4QTMuNDksMy40OSwwLDAsMCwyMC45MiwxOS42NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMy45NCwxMi40OGEyLjMxLDIuMzEsMCwwLDAsMSwyLjg3LDYu''@;'; put 'put ''NTMsNi41MywwLDAsMCwyLjMyLjkyVjEwLjU1QzE1LjE2LDEwLjgsMTQuMTksMTEuODQsMTMuOTQsMTIuNDhaIi8+JyksYi5DbHJTaGFwZUNyZWRpdENhcmQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAs''@;'; put 'put ''MCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wm0wLDIsMCwxMkg0TDQsOFpNNCwyOFYyNEgzMnY0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI3IiB5PSIzIiB3aWR0aD0iMjIiIGhlaWdodD0iMzAiIHJ4PSIwLjk2''@;'; put 'put ''IiByeT0iMC45NiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzYpIHJvdGF0ZSg5MCkiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wm0wLDE4SDRWMjBIMzJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGIuQ2xyU2hhcGVCYW5rPSgw''@;'; put 'put ''LHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zLjUsMTMuNTYsMTgsNS4yM2wxNC41LDguMzNhMSwxLDAsMCwwLDEtMS43M0wxOCwyLjkyLDIuNSwxMS44M2ExLDEsMCwxLDAsMSwxLjczWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik00LDI2YTEsMSwwLDAsMCwxLDFIMzFhMSwxLDAsMCwwLDAtMkgyOFYxNy42M0gyNlYyNUgxOVYxNy42M0gxN1YyNUgxMFYxNy42M0g4VjI1SDVBMSwxLDAsMCwwLDQsMjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgeD0iNS4wMiIgeT0iMTQiIHdpZHRoPSIyNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDI5SDNhMSwxLDAsMCwwLDAsMkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4xNSwxMS41OGgzLjIxTDE4LjY1LDcuNzJhLjguOCwwLDAsMC0uOCwwbC02LjcyLDMuODZoMy4yMWwzLjktMi4yNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC01Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwyNmExLDEsMCwwLDAsMSwxSDMxYTEsMSwwLDAsMCwwLTJIMjhWMTcuNjNIMjZWMjVIMTlWMTcuNjNIMTdWMjVIMTBWMTcuNjNIOFYyNUg1QTEsMSwwLDAsMCw0LDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI1LjAyIiB5PSIxNCIgd2lkdGg9IjI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTMzLDI5SDNhMSwxLDAsMCwwLDAsMkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMTUsMTEuNThoMy4yMUwxOC42NSw3LjcyYS44LjgsMCww''@;'; put 'put ''LDAtLjgsMGwtNi43MiwzLjg2aDMuMjFsMy45LTIuMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDZjMC0uMTYsMC0uMzIsMC0uNDhMMTgsMi45MiwyLjUsMTEuODNhMSwx''@;'; put 'put ''LDAsMSwwLDEsMS43M0wxOCw1LjIzLDIyLjc3LDhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjk0LDEzLjI0bC41Ni4zMmExLDEsMCww''@;'; put 'put ''LDAsMS40NC0xLjE5QTcuNDUsNy40NSwwLDAsMSwzMS45NCwxMy4yNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDI2YTEsMSwwLDAsMCwxLDFIMzFhMSwxLDAsMCwwLDAtMkgyOFYxNy42M0gyNlYyNUgxOVYxNy42M0gxN1YyNUgxMFYxNy42M0g4VjI1SDVBMSwxLDAs''@;'; put 'put ''MCwwLDQsMjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDI5SDNhMSwxLDAsMCwwLDAsMkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDE1QTMuNTEsMy41MSwwLDAsMSwyMCwxNEg1djJIMzFWMTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTE5LjQ2LDkuNzRsLjY4LTEuMTctMS40OS0uODVhLjguOCwwLDAsMC0uOCwwbC02LjcyLDMuODZoMy4yMWwzLjktMi4yNCwxLjEuNjNDMTkuMzksOS44OSwxOS40Miw5LjgxLDE5LjQ2LDkuNzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjA1LDUuMjUsMTgsMi45MiwyLjUsMTEuODNhMSwxLDAsMSwwLDEsMS43M0wxOCw1LjIzLDIxLjA1LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLjUsMTMuNTYsNSwxMi42OFYxNkgzMVYxMi43MWwxLjQ4Ljg1YTEsMSwwLDAsMCwxLTEuNzNMMTgsMi45MiwyLjUsMTEuODNhMSwx''@;'; put 'put ''LDAsMSwwLDEsMS43M1pNMTcuODUsNy4xMWEuOC44LDAsMCwxLC44LDBMMjUuMzcsMTFIMjIuMTVsLTMuOS0yLjI0TDE0LjM1LDExSDExLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjg1LDI3SDMydi0uODVB''@;'; put 'put ''MS4xNSwxLjE1LDAsMCwwLDMwLjg1LDI1SDI4VjE3LjYzSDI0VjI1SDIwVjE3LjYzSDE2VjI1SDEyVjE3LjYzSDhWMjVINS4xNUExLjE1LDEuMTUsMCwwLDAsNCwyNi4xNVYyN0gzLjE1QTEuMTUsMS4xNSwwLDAsMCwyLDI4LjE1VjMxSDM0VjI4LjE1QTEuMTUsMS4xNSwwLDAsMCwzMi44NSwy''@;'; put 'put ''N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi44NSwyN0gzMnYtLjg1QTEuMTUsMS4xNSwwLDAsMCwzMC44NSwyNUgyOFYxNy42M0gyNFYyNUgyMFYxNy42M0gxNlYyNUgxMlYxNy42M0g4VjI1SDUuMTVBMS4xNSwx''@;'; put 'put ''LjE1LDAsMCwwLDQsMjYuMTVWMjdIMy4xNUExLjE1LDEuMTUsMCwwLDAsMiwyOC4xNVYzMUgzNFYyOC4xNUExLjE1LDEuMTUsMCwwLDAsMzIuODUsMjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTMwLDEzLjVBNy40Nyw3LjQ3LDAsMCwxLDI0LjM5LDExSDIyLjE1bC0zLjktMi4yNEwxNC4zNSwxMUgxMS4xNGw2LjcyLTMuODZhLjguOCwwLDAsMSwuOCwwbDUsMi44N0E3LjQ1LDcuNDUsMCwwLDEsMjIuNSw2YzAtLjE2LDAtLjMyLDAtLjQ4TDE4LDIuOTIsMi41LDExLjgzYTEsMSww''@;'; put 'put ''LDEsMCwxLDEuNzNMNSwxMi42OFYxNkgzMVYxMy40MkE3LjUzLDcuNTMsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTQsMTMuMjRsLjU2LjMyYTEsMSwwLDAs''@;'; put 'put ''MCwxLjQ0LTEuMTlBNy40NSw3LjQ1LDAsMCwxLDMxLjk0LDEzLjI0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuODUsMjdIMzJ2LS44NUExLjE1LDEuMTUsMCwwLDAsMzAuODUsMjVIMjhWMTcuNjNIMjRWMjVIMjBWMTcuNjNIMTZWMjVIMTJWMTcuNjNIOFYyNUg1LjE1QTEuMTUs''@;'; put 'put ''MS4xNSwwLDAsMCw0LDI2LjE1VjI3SDMuMTVBMS4xNSwxLjE1LDAsMCwwLDIsMjguMTVWMzFIMzRWMjguMTVBMS4xNSwxLjE1LDAsMCwwLDMyLjg1LDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTIyLjUsMTVhMy41MSwzLjUxLDAsMCwxLTMtNS4yNmwuMTQtLjI0LTEuMzUtLjc4TDE0LjM1LDExSDExLjE0bDYuNzItMy44NmEuOC44LDAsMCwxLC44LDBsMS43NSwxLDEuNjUtMi44NkwxOCwyLjkyLDIuNSwxMS44M2ExLDEsMCwxLDAsMSwxLjczTDUsMTIuNjhWMTZIMzFWMTVa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2''@;'; put 'put ''LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+JyksYi5DbHJTaGFwZURvbGxhckJpbGw9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiw4SDRhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTBBMiwyLDAsMCwwLDMyLDhabTAsNmE0LjI1LDQuMjUsMCwwLDEtMy45LTRIMzJabTAsMS42MnY0LjgzQTUuODcsNS44NywwLDAs''@;'; put 'put ''MCwyNi40OSwyNmgtMTdBNS44Nyw1Ljg3LDAsMCwwLDQsMjAuNDRWMTUuNkE1Ljg3LDUuODcsMCwwLDAsOS41MSwxMGgxN0E1Ljg3LDUuODcsMCwwLDAsMzIsMTUuNlpNNy45LDEwQTQuMjUsNC4yNSwwLDAsMSw0LDE0VjEwWk00LDIyLjA2QTQuMjUsNC4yNSwwLDAsMSw3LjksMjZINFpNMjgu''@;'; put 'put ''MSwyNkE0LjI1LDQuMjUsMCwwLDEsMzIsMjIuMDZWMjZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDEwLjg1Yy0zLjQ3LDAtNi4zLDMuMjEtNi4zLDcuMTVzMi44Myw3LjE1LDYuMyw3LjE1LDYuMy0zLjIx''@;'; put 'put ''LDYuMy03LjE1UzIxLjQ3LDEwLjg1LDE4LDEwLjg1Wm0wLDEyLjY5Yy0yLjU5LDAtNC43LTIuNDktNC43LTUuNTVzMi4xMS01LjU1LDQuNy01LjU1LDQuNywyLjQ5LDQuNyw1LjU1UzIwLjU5LDIzLjU1LDE4LDIzLjU1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLDhINGEyLDIsMCwwLDAtMiwyVjI2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFpNNCwyNlYyMS4xNUE1LjE4LDUuMTgsMCwwLDEsOC43OSwyNlpNNCwxNC44NVYxMEg4Ljc5QTUuMTgsNS4xOCwwLDAs''@;'; put 'put ''MSw0LDE0Ljg1Wk0xOCwyNS4xNWMtMy40NywwLTYuMy0zLjIxLTYuMy03LjE1czIuODMtNy4xNSw2LjMtNy4xNSw2LjMsMy4yMSw2LjMsNy4xNVMyMS40NywyNS4xNSwxOCwyNS4xNVpNMzIsMjZIMjcuMjVBNS4xOCw1LjE4LDAsMCwxLDMyLDIxLjE1Wm0wLTExLjE1QTUuMTgsNS4xOCwwLDAs''@;'; put 'put ''MSwyNy4yNSwxMEgzMloiLz5cbiAgICAgICAgICAgIDxlbGxpcHNlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGN4PSIxOCIgY3k9IjE4IiByeD0iNCIgcnk9IjQuNzIiLz4nKSxiLkNsclNoYXBlRUNoZWNrPSgwLHAuY2xySWNvblNWRykoJzxyZWN0IGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSIxNiIgeT0iMTYiIHdpZHRoPSIxNSIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iMjAiIHk9IjIxIiB3aWR0aD0iMTEiIGhlaWdo''@;'; put 'put ''dD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0zNCw4SDEyLjkzYTguMzUsOC4zNSwwLDAsMSwuNzksMkgzM1YyNkgzVjE5LjlhNy44Myw3LjgzLDAsMCwxLTItMS4zNFYyN2ExLDEsMCwwLDAsMSwxSDM0YTEs''@;'; put 'put ''MSwwLDAsMCwxLTFWOUExLDEsMCwwLDAsMzQsOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNNi41NywxOC42OGE2LjE3LDYuMTcsMCwwLDAsNC4zMi0xLjU5LDEuMiwxLjIsMCwwLDAsLjM2LS44NCwxLjA4LDEu''@;'; put 'put ''MDgsMCwwLDAtMS4wOS0xLjExLDEsMSwwLDAsMC0uNzEuMjUsNC4zMiw0LjMyLDAsMCwxLTIuODQsMSwzLjM1LDMuMzUsMCwwLDEtMy40Ni0zaDcuNTNBMS4yOSwxLjI5LDAsMCwwLDEyLDEyLjA2LDUuNjgsNS42OCwwLDAsMCw2LjI3LDYuMTQsNiw2LDAsMCwwLC40LDEyLjR2MEE2LDYsMCww''@;'; put 'put ''LDAsNi41NywxOC42OFpNNi4yNSw4LjM5YzEuODIsMCwyLjg3LDEuMzksMywzLjE2SDMuMTNDMy4zOCw5LjY5LDQuNTYsOC4zOSw2LjI1LDguMzlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzQsOEgxMi45MWE4LjYx''@;'; put 'put ''LDguNjEsMCwwLDEsMS4yLDQuMzksOCw4LDAsMCwxLTcuNzgsOC4yN0E3LjUxLDcuNTEsMCwwLDEsMSwxOC40MVYyN2ExLDEsMCwwLDAsMSwxSDM0YTEsMSwwLDAsMCwxLTFWOUExLDEsMCwwLDAsMzQsOFpNMzEsMjNIMjBWMjFIMzFabTAtNUgxNlYxNkgzMVoiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik02LjU3LDE4LjY4QTYsNiwwLDAsMSwuNCwxMi40NHYwQTYsNiwwLDAsMSw2LjI3LDYuMTQsNS42OCw1LjY4LDAsMCwxLDEyLDEyLjA2YTEuMjksMS4yOSwwLDAsMS0xLjMsMS4zMkgzLjE1YTMuMzUsMy4zNSww''@;'; put 'put ''LDAsMCwzLjQ2LDMsNC4zMiw0LjMyLDAsMCwwLDIuODQtMSwxLDEsMCwwLDEsLjcxLS4yNSwxLjA4LDEuMDgsMCwwLDEsMS4wOSwxLjExLDEuMiwxLjIsMCwwLDEtLjM2Ljg0QTYuMTcsNi4xNywwLDAsMSw2LjU3LDE4LjY4Wk05LjMsMTEuNTVjLS4xOC0xLjc3LTEuMjMtMy4xNi0zLTMuMTZz''@;'; put 'put ''LTIuODcsMS4zLTMuMTIsMy4xNloiLz4nKSxiLkNsclNoYXBlUG91bmQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy45LDMwSDEzLjRBOC40NSw4LjQ1LDAsMCwwLDE1LDI0LjY1VjIxaDQuMzFhMSwxLDAs''@;'; put 'put ''MCwwLDAtMkgxNVYxMS4zMUE1LjI0LDUuMjQsMCwwLDEsMjAuMjEsNiw1LjE5LDUuMTksMCwwLDEsMjQsNy43M2ExLDEsMCwwLDAsMS40OC0xLjM1QTcuMTksNy4xOSwwLDAsMCwxMywxMS4zMVYxOUg4LjcyYTEsMSwwLDEsMCwwLDJIMTN2My42NUMxMywyOS4zOCwxMC4xMiwzMCwxMCwzMGEx''@;'; put 'put ''LDEsMCwwLDAsLjE3LDJIMjcuOWExLDEsMCwxLDAsMC0yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptNi41LDI1LjkySDExLjc0YTEuMjUsMS4y''@;'; put 'put ''NSwwLDAsMS0uMjItMi40OGMuMTUsMCwxLjcyLS40OSwxLjcyLTMuNTRWMTloLTIuNWExLDEsMCwwLDEsMC0yaDIuNVYxMS44OGE1Ljg1LDUuODUsMCwwLDEsNS43Mi02LDUuNjMsNS42MywwLDAsMSw0LjIxLDEuOTRBMS4yNSwxLjI1LDAsMSwxLDIxLjMsOS41MSwzLjA4LDMuMDgsMCwwLDAs''@;'; put 'put ''MTksOC40MmEzLjM1LDMuMzUsMCwwLDAtMy4yMiwzLjQ2VjE3aDNhMSwxLDAsMCwxLDAsMmgtM3YyLjlBNy42NSw3LjY1LDAsMCwxLDE1LDI1LjQySDI0LjVhMS4yNSwxLjI1LDAsMCwxLDAsMi41WiIvPicpLGIuQ2xyU2hhcGVSdXBlZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI4LDhIMjQuMTRBNy41Miw3LjUyLDAsMCwwLDIyLjYsNkgyOGExLDEsMCwwLDAsMC0ySDEwYTEsMSwwLDAsMCwwLDJoNy41NWE1LjQyLDUuNDIsMCwwLDEsNC4yLDJIMTBhMSwxLDAsMCwwLDAsMkgyMi43OUE1LjU0LDUu''@;'; put 'put ''NTQsMCwwLDEsMjMsMTEuNTEsNS40OCw1LjQ4LDAsMCwxLDE3LjU1LDE3SDExLjE0YTEsMSwwLDAsMC0uNzUsMS42NkwyMi4wNiwzMmExLDEsMCwxLDAsMS41LTEuMzJMMTMuMzUsMTloNC4yMWE3LjUxLDcuNTEsMCwwLDAsNy4zLTlIMjhhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTUuODgsOUgyNmExLDEsMCwwLDEsMCwySDI0LjI2YzAsLjA2LDAsLjEyLDAsLjE5YTYuMDksNi4wOSwwLDAsMS02LDYuMmgtMmw2''@;'; put 'put ''LjgyLDguMDZhMS4yNSwxLjI1LDAsMCwxLTEuOTEsMS42MkwxMi42MywxOC45NGExLjI1LDEuMjUsMCwwLDEsMS0yLjA2aDQuNzFhMy41OSwzLjU5LDAsMCwwLDMuNDgtMy42OWMwLS4wNywwLS4xMywwLS4yaC05YTEsMSwwLDAsMSwwLTJoOC4zMmEzLjQxLDMuNDEsMCwwLDAtMi43OC0xLjVI''@;'; put 'put ''MTIuNzVhMS4yNSwxLjI1LDAsMCwxLDAtMi41SDI2YTEsMSwwLDAsMSwwLDJIMjIuNjhBNi4yMyw2LjIzLDAsMCwxLDIzLjg4LDExWiIvPicpLGIuQ2xyU2hhcGVXb249KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9''@;'; put 'put ''Ik0zMywxOEgyOC43NWwuNS0ySDMzYTEsMSwwLDAsMCwwLTJIMjkuNzRsMi4xNy04Ljc2QTEsMSwwLDAsMCwzMCw0Ljc2TDI3LjY4LDE0SDIxLjMxTDE5LDQuNzZhMSwxLDAsMCwwLTEuOTQsMEwxNC43OSwxNEg4LjQyTDYuMTMsNC43NmExLDEsMCwwLDAtMS45NC40OEw2LjM2LDE0SDNhMSwx''@;'; put 'put ''LDAsMCwwLDAsMkg2Ljg1bC41LDJIM2ExLDEsMCwwLDAsMCwySDcuODRsMi43OSwxMS4yNGExLDEsMCwwLDAsMS45NCwwTDE1LjM2LDIwaDUuMzhsMi43OSwxMS4yNGExLDEsMCwwLDAsMS45NCwwTDI4LjI1LDIwSDMzYTEsMSwwLDAsMCwwLTJabS01LjgyLTItLjUsMkgyMi4zbC0uNS0yWk0x''@;'; put 'put ''OCw5LjE2LDE5LjI1LDE0aC0yLjRaTTguOTEsMTZoNS4zOGwtLjUsMkg5LjQxWk0xMS42LDI2Ljg0LDkuOTEsMjBIMTMuM1pNMTUuODUsMThsLjUtMmgzLjM5bC41LDJabTguNjQsOC44NEwyMi44LDIwaDMuMzlaIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0xIiBwb2ludHM9IjE3Ljc0IDE2IDE3LjIyIDE4IDE4Ljg1IDE4IDE4LjMyIDE2IDE3Ljc0IDE2Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBwb2ludHM9IjExLjk0IDE4IDE0LjYzIDE4IDE1''@;'; put 'put ''LjE2IDE2IDExLjQxIDE2IDExLjk0IDE4Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBwb2ludHM9IjEzLjI5IDIzLjEgMTQuMSAyMCAxMi40NyAyMCAxMy4yOSAyMy4xIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiBwb2ludHM9IjIxLjQ0IDE4IDI0LjEzIDE4IDI0LjY2IDE2IDIwLjkxIDE2IDIxLjQ0IDE4Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiBwb2ludHM9IjIyLjc4''@;'; put 'put ''IDIzLjEgMjMuNiAyMCAyMS45NyAyMCAyMi43OCAyMy4xIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk0yOSwyMEgyNi4xOUwyNCwyOC4zMmExLjI1''@;'; put 'put ''LDEuMjUsMCwwLDEtMi40MiwwTDE5LjM4LDIwSDE2LjY5bC0yLjE5LDguMzJhMS4yNSwxLjI1LDAsMCwxLTIuNDIsMEw5Ljg4LDIwSDdhMSwxLDAsMCwxLDAtMkg5LjM1bC0uNTMtMkg3YTEsMSwwLDAsMSwwLTJIOC4zbC0xLTMuNjhhMS4yNSwxLjI1LDAsMCwxLDIuNDItLjY0TDEwLjg4LDE0''@;'; put 'put ''aDQuOGwxLjE0LTQuMzJhMS4yNSwxLjI1LDAsMCwxLDIuNDIsMEwyMC4zOCwxNGg0LjhsMS4xNC00LjMyYTEuMjUsMS4yNSwwLDAsMSwyLjQyLjY0bC0xLDMuNjhIMjlhMSwxLDAsMCwxLDAsMkgyNy4yNGwtLjUzLDJIMjlhMSwxLDAsMCwxLDAsMloiLz4nKSxiLkNsclNoYXBlWWVuPSgwLHAu''@;'; put 'put ''Y2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuMzQsNC41NWExLDEsMCwxLDAtMS42Ny0xLjFMMTgsMTguMjMsOC4zMywzLjQ1YTEsMSwwLDAsMC0xLjY3LDEuMUwxNywyMC4zNVYyMi4ySDEyYS44LjgsMCwwLDAsMCwx''@;'; put 'put ''LjZoNXYyLjRIMTJhLjguOCwwLDAsMCwwLDEuNmg1VjMyYTEsMSwwLDAsMCwyLDBWMjcuOGg1YS44LjgsMCwwLDAsMC0xLjZIMTlWMjMuOGg1YS44LjgsMCwwLDAsMC0xLjZIMTlWMjAuMzVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm04LjA3LDcuOTFMMTkuNzQsMjBIMjJhMSwxLDAsMCwxLDAsMkgxOS4yNXYySDIyYTEsMSwwLDAsMSwwLDJIMTkuMjV2Mi43NWExLjI1LDEuMjUsMCwwLDEtMi41LDBWMjZIMTRhMSwxLDAsMSwxLDAtMmgy''@;'; put 'put ''Ljc1VjIySDE0YTEsMSwwLDEsMSwwLTJoMi4yNkw5LjkzLDkuOTFhMS4yNSwxLjI1LDAsMSwxLDIuMTItMS4zM0wxOCwxOC4wOGw1Ljk1LTkuNDlhMS4yNSwxLjI1LDAsMSwxLDIuMTIsMS4zM1oiLz4nKSxiLkNsclNoYXBlQml0Y29pbj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQu''@;'; put 'put ''MTEsMTYuODhBNS40OSw1LjQ5LDAsMCwwLDIxLDdWNGExLDEsMCwwLDAtMiwwVjdIMTZWNGExLDEsMCwwLDAtMiwwVjdIMTFhMSwxLDAsMCwwLTEsMVYyOGExLDEsMCwwLDAsMSwxaDN2M2ExLDEsMCwwLDAsMiwwVjI5aDN2M2ExLDEsMCwwLDAsMiwwVjI5aC4wOEE2LjA3LDYuMDcsMCwwLDAs''@;'; put 'put ''MjcsMjIuODF2LS42MkE2LjI1LDYuMjUsMCwwLDAsMjQuMTEsMTYuODhaTTEyLDloOC42OWEzLjU5LDMuNTksMCwwLDEsMy40MywyLjM2QTMuNTEsMy41MSwwLDAsMSwyMC43OSwxNkgxMlpNMjUsMjIuODFBNC4wOCw0LjA4LDAsMCwxLDIxLjA2LDI3SDEyVjE4aDkuMDZBNC4wOCw0LjA4LDAs''@;'; put 'put ''MCwxLDI1LDIyLjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEuMTgsMTguNDdIMTQuNXY2aDYuNjhhMi43LDIuNywwLDAsMCwyLjYzLTIuNzd2LS40OEEyLjcxLDIuNzEsMCwwLDAsMjEuMTgsMTguNDda''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLDEzLjc1YTIuMjQsMi4yNCwwLDAsMC0yLjIzLTIuMjVIMTQuNVYxNmg2LjNBMi4yMiwyLjIyLDAsMCwwLDIzLDEzLjc1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTguMzEsMTkuNzNBNS4yMiw1LjIyLDAsMCwxLDIxLjE4LDI3SDIxdjEuOWExLDEsMCwwLDEtMiwwVjI3SDE3djEuOWExLDEsMCwwLDEtMiwwVjI3''@;'; put 'put ''SDEzLjI1QTEuMjUsMS4yNSwwLDAsMSwxMiwyNS43NVYxNy4yM2gwdi03QTEuMjUsMS4yNSwwLDAsMSwxMy4yNSw5SDE1VjcuMDdhMSwxLDAsMCwxLDIsMFY5aDJWNy4wN2ExLDEsMCwwLDEsMiwwVjlhNC43Miw0LjcyLDAsMCwxLDMuMiw4LDUuMzEsNS4zMSwwLDAsMSwyLjExLDQuMjRaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPicpLGIuQ2xyU2hhcGVDb2luQmFnPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMS42LDI5YTEsMSwwLDAsMC0xLTFoLTZhMSwxLDAsMCwwLDAsMmg2QTEsMSwwLDAsMCwyMS42LDI5WiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIyLjU0LDI0aC02YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIyLDMySDE2YTEsMSwwLDAsMCwwLDJoNmEx''@;'; put 'put ''LDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMyLjcsMzJoLTdhMSwxLDAsMCwwLDAsMmg3YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBk''@;'; put 'put ''PSJNMzMuNywyOGgtN2ExLDEsMCwwLDAsMCwyaDdhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMy43NCwyNmEyOCwyOCwwLDAsMC0yLjgyLTEwLjEyQTIwLjI0LDIwLjI0LDAsMCwwLDI0LjYsOC43MUwyNywz''@;'; put 'put ''LjQyYTEsMSwwLDAsMC0uMDctMUExLDEsMCwwLDAsMjYuMTMsMkg5LjhhMSwxLDAsMCwwLS45MSwxLjQybDIuNDUsNS4zMWEyMC4zMywyMC4zMywwLDAsMC02LjI4LDcuMTVjLTIuMTUsNC0yLjgyLDguODktMywxMi4yOGEzLjYsMy42LDAsMCwwLDEsMi43MUEzLjc5LDMuNzksMCwwLDAsNS44''@;'; put 'put ''LDMxLjk0SDEyVjMwSDUuNzJhMS42OCwxLjY4LDAsMCwxLTEuMjEtLjUyLDEuNjIsMS42MiwwLDAsMS0uNDUtMS4yM2MuMTQtMi42MS42OS03LjU4LDIuNzYtMTEuNDVBMTgsMTgsMCwwLDEsMTMuMDgsMTBoMWEzMC44MSwzMC44MSwwLDAsMC0xLjg3LDIuOTIsMjIuNzgsMjIuNzgsMCwwLDAt''@;'; put 'put ''MS40NywzLjM0bDEuMzcuOTJhMjQsMjQsMCwwLDEsMS40OS0zLjQ3QTI5LjEsMjkuMSwwLDAsMSwxNi4wNSwxMGgxYTIxLjQ1LDIxLjQ1LDAsMCwxLDEuNDEsNSwyMi41NCwyMi41NCwwLDAsMSwuMzIsMy44NmwxLjU4LTEuMTFhMjQuMTUsMjQuMTUsMCwwLDAtLjMyLTNBMjQuODIsMjQuODIs''@;'; put 'put ''MCwwLDAsMTguNzYsMTBoLjc4bC45MS0ySDEzLjIxTDExLjM2LDRIMjQuNTdsLTIuNSw1LjQ3YTkuOTMsOS45MywwLDAsMSwxLjIzLjc4LDE4LjYzLDE4LjYzLDAsMCwxLDUuODYsNi41N0EyNi41OSwyNi41OSwwLDAsMSwzMS43MywyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC02IiAvPlxuICAgIDxwYXRoIGQ9Ik0yNC44OSwyNmg3Ljg2Yy0uNjYtOC43MS00LjQxLTE0LjEyLTkuMjItMTcuMzJMMjUuNzIsMy45YTEsMSwwLDAsMC0uOTEtMS40SDExLjFhMSwxLDAsMCwwLS45MSwxLjRsMS4yLDIuNkgyMS41MWwtLjksMkgxOC43NkEyNC45LDI0Ljks''@;'; put 'put ''MCwwLDEsMjAsMTMuMTlhMjQuNDksMjQuNDksMCwwLDEsLjMyLDNsLTEuNTgsMS4xMWEyMi41NCwyMi41NCwwLDAsMC0uMzItMy44NkEyMS43NCwyMS43NCwwLDAsMCwxNyw4LjVoLTFhMjguMjIsMjguMjIsMCwwLDAtMi40OCwzLjcsMjMuOTEsMjMuOTEsMCwwLDAtMS40OSwzLjQ2bC0xLjM3''@;'; put 'put ''LS45MWEyMi43OCwyMi43OCwwLDAsMSwxLjQ3LTMuMzRBMzAuODEsMzAuODEsMCwwLDEsMTQuMDUsOC41SDEyLjNsLjA4LjE3QzcuMDgsMTIuMiwzLjA1LDE4LjQsMy4wNSwyOC43NUExLjY1LDEuNjUsMCwwLDAsNC42MSwzMC41aDhBMi42NywyLjY3LDAsMCwxLDE0LjIxLDI2YTIuNjcsMi42''@;'; put 'put ''NywwLDAsMS0uMzctMS4zNCwyLjcsMi43LDAsMCwxLDIuNy0yLjdoNmEyLjcsMi43LDAsMCwxLDIuNywyLjdBMi42MywyLjYzLDAsMCwxLDI0Ljg5LDI2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMjEuNiwyOC41YTEsMSwwLDAsMC0xLTFo''@;'; put 'put ''LTZhMSwxLDAsMCwwLDAsMmg2QTEsMSwwLDAsMCwyMS42LDI4LjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMi41NCwyMy41aC02YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMyIgLz48cGF0aCBkPSJNMjIsMzEuNUgxNmExLDEsMCwwLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBhdGggZD0iTTMyLjcsMzEuNWgtN2ExLDEsMCwwLDAsMCwyaDdhMSwxLDAsMCwwLDAtMloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLjcsMjcuNWgtN2ExLDEsMCwwLDAsMCwyaDdhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiIC8+JyksYi5DbHJTaGFwZVBlc289KDAscC5jbHJJY29u''@;'; put 'put ''U1ZHKSgnPHBhdGggZD0iTTMxLDEzLjJIMjcuODlBNi44MSw2LjgxLDAsMCwwLDI4LDEyYTcuODUsNy44NSwwLDAsMC0uMS0xLjE5aDIuOTNhLjguOCwwLDAsMCwwLTEuNkgyNy40NkE4LjQ0LDguNDQsMCwwLDAsMTkuNTcsNEgxMWExLDEsMCwwLDAtMSwxVjkuMkg3YS44LjgsMCwwLDAsMCwx''@;'; put 'put ''LjZoM3YyLjRIN2EuOC44LDAsMCwwLDAsMS42aDNWMzFhMSwxLDAsMCwwLDIsMFYyMGg3LjU3YTguNDUsOC40NSwwLDAsMCw3Ljg5LTUuMkgzMWEuOC44LDAsMCwwLDAtMS42Wk0xMiw2aDcuNTdhNi41MSw2LjUxLDAsMCwxLDUuNjgsMy4ySDEyWm0wLDQuOEgyNS44N2E1LjYsNS42LDAsMCwx''@;'; put 'put ''LDAsMi40SDEyWk0xOS41NywxOEgxMlYxNC44SDI1LjI1QTYuNTEsNi41MSwwLDAsMSwxOS41NywxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xNC4xOCwxMy44VjE2aDkuNDVhNS4yNiw1LjI2LDAsMCwwLC4wOC0uODksNC43Miw0''@;'; put 'put ''LjcyLDAsMCwwLS4yLTEuMzFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xNC4xOCwxOS43aDUuMTlhNC4yOCw0LjI4LDAsMCwwLDMuNS0xLjlIMTQuMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRo''@;'; put 'put ''IGQ9Ik0xOS4zNywxMC41MUgxNC4xOFYxMmg4LjM3QTQuMjEsNC4yMSwwLDAsMCwxOS4zNywxMC41MVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTE3LjY3LDJhMTYsMTYsMCwxLDAsMTYsMTZBMTYsMTYsMCwwLDAsMTcuNjcsMlptMTAuNSwx''@;'; put 'put ''NS44SDI1LjdhNi44Nyw2Ljg3LDAsMCwxLTYuMzMsNC40SDE0LjE4djYuNTRhMS4yNSwxLjI1LDAsMSwxLTIuNSwwVjE3LjhIOC43NmEuOS45LDAsMSwxLDAtMS44aDIuOTJWMTMuOEg4Ljc2YS45LjksMCwxLDEsMC0xLjhoMi45MlY5LjI2QTEuMjUsMS4yNSwwLDAsMSwxMi45Myw4aDYuNDRh''@;'; put 'put ''Ni44NCw2Ljg0LDAsMCwxLDYuMTUsNGgyLjY1YS45LjksMCwwLDEsMCwxLjhIMjYuMDlhNi45MSw2LjkxLDAsMCwxLC4xMiwxLjMsNi44LDYuOCwwLDAsMS0uMDYuOWgyYS45LjksMCwwLDEsMCwxLjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPicpLGIuQ2xy''@;'; put 'put ''U2hhcGVSdWJsZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuNTcsMjBBOC4yMyw4LjIzLDAsMCwwLDI5LDEyYTguMjMsOC4yMywwLDAsMC04LjQzLThIMTJhMSwxLDAsMCwwLTEsMVYxOEg5YTEsMSwwLDAsMCwwLDJoMnYySDlhMSwxLDAsMCwwLDAsMmgydjdhMSwxLDAsMCwwLDIs''@;'; put 'put ''MFYyNGg5YTEsMSwwLDAsMCwwLTJIMTNWMjBaTTEzLDZoNy41N0E2LjI0LDYuMjQsMCwwLDEsMjcsMTJhNi4yMyw2LjIzLDAsMCwxLTYuNDMsNkgxM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMC43NSw5LjI1SDE1djguODFoNS43''@;'; put 'put ''OWE0LjY2LDQuNjYsMCwwLDAsNC44Ni00LjRBNC42NSw0LjY1LDAsMCwwLDIwLjc1LDkuMjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTIuNzUsMTguNTZIMTVWMjJo''@;'; put 'put ''OC4yOWExLDEsMCwwLDEsMCwySDE1djVhMS4yNSwxLjI1LDAsMCwxLTIuNSwwVjI0SDExLjI1YTEsMSwwLDAsMSwwLTJoMS4yMVYyMC41NkgxMS4yNWExLjI1LDEuMjUsMCwwLDEsMC0yLjVoMS4yMVY4YTEuMjUsMS4yNSwwLDAsMSwxLjI1LTEuMjVoN2E3LjE0LDcuMTQsMCwwLDEsNy4zNiw2''@;'; put 'put ''LjlBNy4xNSw3LjE1LDAsMCwxLDIwLjc1LDIwLjU2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlRW1wbG95ZWVHcm91cD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTguNDIsMTYuMzFhNS43LDUuNywwLDEsMSw1Ljc2LTUuN0E1''@;'; put 'put ''Ljc0LDUuNzQsMCwwLDEsMTguNDIsMTYuMzFabTAtOS40YTMuNywzLjcsMCwxLDAsMy43NiwzLjdBMy43NCwzLjc0LDAsMCwwLDE4LjQyLDYuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTguNDIsMTYuMzFhNS43LDUuNyww''@;'; put 'put ''LDEsMSw1Ljc2LTUuN0E1Ljc0LDUuNzQsMCwwLDEsMTguNDIsMTYuMzFabTAtOS40YTMuNywzLjcsMCwxLDAsMy43NiwzLjdBMy43NCwzLjc0LDAsMCwwLDE4LjQyLDYuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjEuOTEs''@;'; put 'put ''MTcuNjVhMjAuNiwyMC42LDAsMCwwLTEzLDJBMS43NywxLjc3LDAsMCwwLDgsMjEuMjV2My41NmExLDEsMCwwLDAsMiwwVjIxLjM4YTE4LjkyLDE4LjkyLDAsMCwxLDEyLTEuNjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMzMs''@;'; put 'put ''MjJIMjYuM1YyMC41MmExLDEsMCwwLDAtMiwwVjIySDE3YTEsMSwwLDAsMC0xLDFWMzNhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjIzQTEsMSwwLDAsMCwzMywyMlpNMzIsMzJIMThWMjRoNi4zdi40MWExLDEsMCwwLDAsMiwwVjI0SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHJlY3QgeD0iMjEuODEiIHk9IjI3LjQyIiB3aWR0aD0iNS45NiIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik0xMC44NCwxMi4yNGExOCwxOCwwLDAsMC03Ljk1''@;'; put 'put ''LDJBMS42NywxLjY3LDAsMCwwLDIsMTUuNzF2My4xYTEsMSwwLDAsMCwyLDB2LTIuOWExNiwxNiwwLDAsMSw3LjU4LTEuNjdBNy4yOCw3LjI4LDAsMCwxLDEwLjg0LDEyLjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz5cbiAgPHBhdGggZD0iTTMzLjEx''@;'; put 'put ''LDE0LjIzYTE3LjgsMTcuOCwwLDAsMC03LjEyLTIsNy40Niw3LjQ2LDAsMCwxLS43MywyQTE1Ljg5LDE1Ljg5LDAsMCwxLDMyLDE1LjkxdjIuOWExLDEsMCwxLDAsMiwwdi0zLjFBMS42NywxLjY3LDAsMCwwLDMzLjExLDE0LjIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTciLz5cbiAgPHBhdGggZD0iTTEwLjY2LDEwLjYxYzAtLjIzLDAtLjQ1LDAtLjY3YTMuMDcsMy4wNywwLDAsMSwuNTQtNi4xMSwzLjE1LDMuMTUsMCwwLDEsMi4yLjg5LDguMTYsOC4xNiwwLDAsMSwxLjctMS4wOCw1LjEzLDUuMTMsMCwwLDAtOSwzLjI3LDUuMSw1LjEsMCwwLDAs''@;'; put 'put ''NC43LDVBNy40Miw3LjQyLDAsMCwxLDEwLjY2LDEwLjYxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgPHBhdGggZD0iTTI0Ljc3LDEuODNhNS4xNyw1LjE3LDAsMCwwLTMuNjksMS41NSw3Ljg3LDcuODcsMCwwLDEsMS45LDEsMy4xNCwzLjE0LDAs''@;'; put 'put ''MCwxLDQuOTMsMi41MiwzLjA5LDMuMDksMCwwLDEtMS43OSwyLjc3LDcuMTQsNy4xNCwwLDAsMSwuMDYuOTMsNy44OCw3Ljg4LDAsMCwxLS4xLDEuMiw1LjEsNS4xLDAsMCwwLDMuODMtNC45QTUuMTIsNS4xMiwwLDAsMCwyNC43NywxLjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTkiLz5cbiAgXG4gIDxlbGxpcHNlIGN4PSIxOCIgY3k9IjExLjI4IiByeD0iNC43NiIgcnk9IjQuNyIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTAuNzgsMTEuNzVjLjE2LDAsLjMyLDAsLjQ4LDAsMC0uMTUsMC0u''@;'; put 'put ''MjgsMC0uNDNhNi43LDYuNywwLDAsMSwzLjc1LTYsNC42Miw0LjYyLDAsMSwwLTQuMjEsNi40NloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTI0Ljc2LDExLjI4YzAsLjE1LDAsLjI4LDAsLjQzLjE2LDAsLjMyLDAsLjQ4LDBBNC41OCw0''@;'; put 'put ''LjU4LDAsMSwwLDIxLDUuMjksNi43LDYuNywwLDAsMSwyNC43NiwxMS4yOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTIyLjI5LDE2LjQ1YTIxLjQ1LDIxLjQ1LDAsMCwxLDUuNzEsMiwyLjcxLDIuNzEsMCwwLDEsLjY4LjUzSDM0VjE1''@;'; put 'put ''LjU2YS43Mi43MiwwLDAsMC0uMzgtLjY0LDE4LDE4LDAsMCwwLTguNC0yLjA1bC0uNjYsMEE2LjY2LDYuNjYsMCwwLDEsMjIuMjksMTYuNDVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik02LjUzLDIwLjkyQTIuNzYsMi43NiwwLDAsMSw4''@;'; put 'put ''LDE4LjQ3YTIxLjQ1LDIxLjQ1LDAsMCwxLDUuNzEtMiw2LjY2LDYuNjYsMCwwLDEtMi4yNy0zLjU1bC0uNjYsMGExOCwxOCwwLDAsMC04LjQsMi4wNS43Mi43MiwwLDAsMC0uMzguNjRWMjJINi41M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiLz5cbiAgPHJlY3Qg''@;'; put 'put ''eD0iMjEuNDYiIHk9IjI2LjY5IiB3aWR0aD0iNS45NiIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiLz5cbiAgPHBhdGggZD0iTTMyLjgxLDIxLjI2SDI1Ljk0di0xYTEsMSwwLDAsMC0yLDB2MUgyMlYxOC40M0EyMC4xNywyMC4xNywwLDAsMCwx''@;'; put 'put ''OCwxOGExOS4yNywxOS4yNywwLDAsMC05LjA2LDIuMjIuNzYuNzYsMCwwLDAtLjQxLjY4djUuNjFoNy4xMXY2LjA5YTEsMSwwLDAsMCwxLDFIMzIuODFhMSwxLDAsMCwwLDEtMVYyMi4yNkExLDEsMCwwLDAsMzIuODEsMjEuMjZabS0xLDEwLjM2SDE3LjY0VjIzLjI2aDYuM3YuOTFhMSwxLDAs''@;'; put 'put ''MCwwLDIsMHYtLjkxaDUuODdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC03Ii8+JyksYi5DbHJTaGFwZUVtcGxveWVlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNi40MywxNi42OWE3LDcsMCwxLDEsNy03QTcsNywwLDAsMSwxNi40MywxNi42OVptMC0xMS45''@;'; put 'put ''MmE1LDUsMCwxLDAsNSw1QTUsNSwwLDAsMCwxNi40Myw0Ljc3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIyLDE3LjlBMjUuNDEsMjUuNDEsMCwwLDAsNS44OCwxOS41N2E0LjA2LDQuMDYsMCwwLDAtMi4zMSwzLjY4VjI5LjJh''@;'; put 'put ''MSwxLDAsMSwwLDIsMFYyMy4yNWEyLDIsMCwwLDEsMS4xNi0xLjg2LDIyLjkxLDIyLjkxLDAsMCwxLDkuNy0yLjExLDIzLjU4LDIzLjU4LDAsMCwxLDUuNTcuNjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cmVjdCB4PSIyMi4xNCIgeT0iMjcu''@;'; put 'put ''NDEiIHdpZHRoPSI2LjE0IiBoZWlnaHQ9IjEuNCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTMzLjE3LDIxLjQ3SDI4djJoNC4xN3Y4LjM3SDE4VjIzLjQ3aDYuM3YuNDJhMSwxLDAsMCwwLDIsMFYyMGExLDEsMCwwLDAtMiwwdjEu''@;'; put 'put ''NDdIMTdhMSwxLDAsMCwwLTEsMVYzMi44NGExLDEsMCwwLDAsMSwxSDMzLjE3YTEsMSwwLDAsMCwxLTFWMjIuNDdBMSwxLDAsMCwwLDMzLjE3LDIxLjQ3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgXG4gIDxjaXJjbGUgY3g9IjE2Ljg2IiBjeT0i''@;'; put 'put ''OS43MyIgcj0iNi40NiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8cmVjdCB4PSIyMSIgeT0iMjgiIHdpZHRoPSI3IiBoZWlnaHQ9IjEuNCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMTUsMzB2M2Ex''@;'; put 'put ''LDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAsMCwxLTFWMjNhMSwxLDAsMCwwLTEtMUgyNlYyMC41M2ExLDEsMCwwLDAtMiwwVjIySDIyVjE4LjQyQTMyLjEyLDMyLjEyLDAsMCwwLDE2Ljg2LDE4YTI2LDI2LDAsMCwwLTExLDIuMzksMy4yOCwzLjI4LDAsMCwwLTEuODgsM1YzMFptMTcsMkgxN1Yy''@;'; put 'put ''NGg3di40MmExLDEsMCwwLDAsMiwwVjI0aDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+JyksYi5DbHJTaGFwZUZhY3Rvcnk9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjQ3LDcuMzdhMSwxLDAsMCwwLTEsLjA2TDIzLDEzLjc3VjguMjZhMSwxLDAs''@;'; put 'put ''MCwwLTEuNjQtLjc3TDEzLjQ4LDE0SDEwVjQuNjJhMSwxLDAsMCwwLS43OC0xbC00LS45YTEsMSwwLDAsMC0uODUuMkExLDEsMCwwLDAsNCwzLjczVjE0SDNhMSwxLDAsMCwwLTEsMVYzMWExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAsMCwxLTFWOC4yNkExLDEsMCwwLDAsMzMuNDcsNy4zN1pN''@;'; put 'put ''Niw1bDIsLjQ0VjE0SDZaTTMyLDMwSDRWMTZoOS44M2ExLDEsMCwwLDAsLjY0LS4yM0wyMSwxMC4zN3Y1LjI4YTEsMSwwLDAsMCwxLjU2LjgzTDMyLDEwLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHJlY3QgeD0iNiIgeT0iMTcuOTkiIHdp''@;'; put 'put ''ZHRoPSI4IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxyZWN0IHg9IjYiIHk9IjIxLjk5IiB3aWR0aD0iOCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cmVjdCB4''@;'; put 'put ''PSI2IiB5PSIyNS45OSIgd2lkdGg9IjgiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHJlY3QgeD0iMTkiIHk9IjE4Ljk5IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtNSIvPlxuICA8cmVjdCB4PSIxOSIgeT0iMjQuOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gIDxyZWN0IHg9IjIzIiB5PSIxOC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cbiAgPHJlY3QgeD0iMjMiIHk9IjI0Ljk5IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIvPlxuICA8cmVjdCB4PSIyNyIgeT0iMTguOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05Ii8+XG4gIDxyZWN0IHg9IjI3IiB5PSIyNC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIi8+XG4gIFxuICA8cGF0aCBkPSJNMzIuNDUsOC40''@;'; put 'put ''NCwyMiwxNS4zVjkuNTFhMSwxLDAsMCwwLTEuNjMtLjc4TDE0LjA3LDE0SDEwVjQuMDZMNCwyLjcxVjE0SDJWMzFhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjkuMjdBMSwxLDAsMCwwLDMyLjQ1LDguNDRaTTE0LDI5SDZWMjdoOFptMC00SDZWMjNoOFptMC00SDZWMTloOFptOCw4''@;'; put 'put ''SDIwVjI2aDJabTAtNkgyMFYyMGgyWm00LDZIMjRWMjZoMlptMC02SDI0VjIwaDJabTQsNkgyOFYyNmgyWm0wLTZIMjhWMjBoMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxiLkNvbW1lcmNlU2hhcGVzPXtjYWxjdWxhdG9yOmIuQ2xyU2hhcGVDYWxjdWxh''@;'; put 'put ''dG9yLCJwaWdneS1iYW5rIjpiLkNsclNoYXBlUGlnZ3lCYW5rLCJzaG9wcGluZy1iYWciOmIuQ2xyU2hhcGVTaG9wcGluZ0JhZywic2hvcHBpbmctY2FydCI6Yi5DbHJTaGFwZVNob3BwaW5nQ2FydCx3YWxsZXQ6Yi5DbHJTaGFwZVdhbGxldCxzdG9yZTpiLkNsclNoYXBlU3RvcmUsZXVybzpi''@;'; put 'put ''LkNsclNoYXBlRXVybyxkb2xsYXI6Yi5DbHJTaGFwZURvbGxhcixwZXNvOmIuQ2xyU2hhcGVQZXNvLCJjcmVkaXQtY2FyZCI6Yi5DbHJTaGFwZUNyZWRpdENhcmQsYmFuazpiLkNsclNoYXBlQmFuaywiZG9sbGFyLWJpbGwiOmIuQ2xyU2hhcGVEb2xsYXJCaWxsLCJlLWNoZWNrIjpiLkNsclNo''@;'; put 'put ''YXBlRUNoZWNrLHBvdW5kOmIuQ2xyU2hhcGVQb3VuZCxydXBlZTpiLkNsclNoYXBlUnVwZWUsd29uOmIuQ2xyU2hhcGVXb24seWVuOmIuQ2xyU2hhcGVZZW4sYml0Y29pbjpiLkNsclNoYXBlQml0Y29pbixydWJsZTpiLkNsclNoYXBlUnVibGUsImNvaW4tYmFnIjpiLkNsclNoYXBlQ29pbkJh''@;'; put 'put ''ZywiZW1wbG95ZWUtZ3JvdXAiOmIuQ2xyU2hhcGVFbXBsb3llZUdyb3VwLGVtcGxveWVlOmIuQ2xyU2hhcGVFbXBsb3llZSxmYWN0b3J5OmIuQ2xyU2hhcGVGYWN0b3J5fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db21tZXJjZVNoYXBlcywic2F2aW5ncyIsKDAsXy5kZXNjcmlwdG9yQ29u''@;'; put 'put ''ZmlnKShiLkNvbW1lcmNlU2hhcGVzWyJwaWdneS1iYW5rIl0pKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoYi5Db21tZXJjZVNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFw''@;'; put 'put ''ZXMvY29yZS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAg''@;'; put 'put ''IFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oWCxiLEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksYi5D''@;'; put 'put ''b3JlU2hhcGVzPWIuQ2xyU2hhcGVBcnJvdz1iLkNsclNoYXBlU3RlcEZvcndhcmQyPWIuQ2xyU2hhcGVFeWVIaWRlPWIuQ2xyU2hhcGVFeWU9Yi5DbHJTaGFwZUV2ZW50PWIuQ2xyU2hhcGVDYWxlbmRhcj1iLkNsclNoYXBlQW5nbGVEb3VibGU9Yi5DbHJTaGFwZVZpZXdDb2x1bW5zPWIuQ2xy''@;'; put 'put ''U2hhcGVTZWFyY2g9Yi5DbHJTaGFwZVZtQnVnPWIuQ2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlPWIuQ2xyU2hhcGVGaWx0ZXJHcmlkPWIuQ2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsPWIuQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWw9Yi5DbHJTaGFwZUNsb3VkPWIuQ2xyU2hhcGVJbWFnZT1i''@;'; put 'put ''LkNsclNoYXBlQmVsbD1iLkNsclNoYXBlRm9sZGVyT3Blbj1iLkNsclNoYXBlRm9sZGVyPWIuQ2xyU2hhcGVBbmdsZT1iLkNsclNoYXBlVXNlcj1iLkNsclNoYXBlQmFycz1iLkNsclNoYXBlSGVscEluZm89Yi5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD1iLkNsclNoYXBlRXJyb3JTdGFuZGFy''@;'; put 'put ''ZD1iLkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPWIuQ2xyU2hhcGVJbmZvU3RhbmRhcmQ9Yi5DbHJTaGFwZUluZm9DaXJjbGU9Yi5DbHJTaGFwZUNoZWNrQ2lyY2xlPWIuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZT1iLkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZT1iLkNsclNoYXBlVGlt''@;'; put 'put ''ZXM9Yi5DbHJTaGFwZUNoZWNrPWIuQ2xyU2hhcGVDb2c9Yi5DbHJTaGFwZUhvbWU9Yi5DbHJTaGFwZVVua25vd25TdGF0dXM9dm9pZCAwO3ZhciBfPUkoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25m''@;'; put 'put ''aWcudHMiKSxwPUkoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtiLkNsclNoYXBlVW5rbm93blN0YXR1cz0oMCxwLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTcuNTgiIGN5PSIyNi4yMyIgcj0iMS40Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNC43LDEzYTUuMTgsNS4xOCwwLDAsMC0yLjE2LTMuNTYsNy4y''@;'; put 'put ''Niw3LjI2LDAsMCwwLTUuNzEtMS4wOUExMS4zNCwxMS4zNCwwLDAsMCwxMiwxMC40NCwxLDEsMCwxLDAsMTMuMjYsMTJhOS4zMiw5LjMyLDAsMCwxLDMuOTQtMS43Miw1LjI5LDUuMjksMCwwLDEsNC4xNi43NCwzLjIxLDMuMjEsMCwwLDEsMS4zNSwyLjE5Yy4zMywyLjY5LTMuMTksMy43NS01''@;'; put 'put ''LjMyLDQuMTRsLS44Mi4xNXY0LjM2YTEsMSwwLDAsMCwyLDBWMTkuMTdDMjQuNjEsMTcuNzksMjQuODgsMTQuNDEsMjQuNywxM1oiLz4nKSxiLkNsclNoYXBlSG9tZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0i''@;'; put 'put ''TTMzLjcxLDE3LjI5bC0xNS0xNWExLDEsMCwwLDAtMS40MSwwbC0xNSwxNWExLDEsMCwwLDAsMS40MSwxLjQxTDE4LDQuNDEsMzIuMjksMTguNzFhMSwxLDAsMCwwLDEuNDEtMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMiIgZD0iTTI4LDMyaC01VjIySDEzVjMySDhWMThMNiwyMFYzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAsMCwyLTJWMTkuNzZsLTItMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJN''@;'; put 'put ''MzMsMTlhMSwxLDAsMCwxLS43MS0uMjlMMTgsNC40MSwzLjcxLDE4LjcxYTEsMSwwLDAsMS0xLjQxLTEuNDFsMTUtMTVhMSwxLDAsMCwxLDEuNDEsMGwxNSwxNUExLDEsMCwwLDEsMzMsMTlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMiIgZD0iTTE4LDcuNzksNiwxOS44M1YzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAsMCwyLTJWMTkuNzZaIi8+JyksYi5DbHJTaGFwZUNvZz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg''@;'; put 'put ''ZD0iTTE4LjEsMTFjLTMuOSwwLTcsMy4xLTcsN3MzLjEsNyw3LDdjMy45LDAsNy0zLjEsNy03UzIyLDExLDE4LjEsMTF6IE0xOC4xLDIzYy0yLjgsMC01LTIuMi01LTVzMi4yLTUsNS01YzIuOCwwLDUsMi4yLDUsNVMyMC45LDIzLDE4LjEsMjN6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi44LDE0LjdMMzAsMTMuOGwtMC42LTEuNWwxLjQtMi42YzAuMy0wLjYsMC4yLTEuNC0wLjMtMS45bC0yLjQtMi40Yy0wLjUtMC41LTEuMy0wLjYtMS45LTAuM2wtMi42LDEuNGwtMS41LTAuNmwtMC45LTIu''@;'; put 'put ''OEMyMSwyLjUsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4zLTEuNiwwLjZMOS44LDUuMkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4x''@;'; put 'put ''LTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFsMC42LDEuNWwtMS40LDIuNmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45''@;'; put 'put ''LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwyLjYsMS40YzAuNiwwLjMsMS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0w''@;'; put 'put ''LjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTUuNiwzMy41LDE0LjksMzIuOCwxNC43eiBNMzIsMTkuNGwtMy42LDEuMUwyOC4zLDIxYy0wLjMsMC43LTAuNiwxLjQtMC45LDIuMWwtMC4zLDAuNWwxLjgsMy4zbC0yLDJsLTMuMy0xLjhsLTAuNSwwLjNjLTAuNywwLjQtMS40LDAuNy0yLjEs''@;'; put 'put ''MC45bC0wLjUsMC4xTDE5LjQsMzJoLTIuOGwtMS4xLTMuNkwxNSwyOC4zYy0wLjctMC4zLTEuNC0wLjYtMi4xLTAuOWwtMC41LTAuM2wtMy4zLDEuOGwtMi0ybDEuOC0zLjNsLTAuMy0wLjVjLTAuNC0wLjctMC43LTEuNC0wLjktMi4xbC0wLjEtMC41TDQsMTkuNHYtMi44bDMuNC0xbDAuMi0w''@;'; put 'put ''LjVjMC4yLTAuOCwwLjUtMS41LDAuOS0yLjJsMC4zLTAuNUw3LjEsOS4xbDItMmwzLjIsMS44bDAuNS0wLjNjMC43LTAuNCwxLjQtMC43LDIuMi0wLjlsMC41LTAuMkwxNi42LDRoMi44bDEuMSwzLjVMMjEsNy43YzAuNywwLjIsMS40LDAuNSwyLjEsMC45bDAuNSwwLjNsMy4zLTEuOGwyLDJs''@;'; put 'put ''LTEuOCwzLjNsMC4zLDAuNWMwLjQsMC43LDAuNywxLjQsMC45LDIuMWwwLjEsMC41bDMuNiwxLjFWMTkuNHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMS4xLDE4YzAsMy45''@;'; put 'put ''LDMuMSw3LDcsN2MzLjksMCw3LTMuMSw3LTdzLTMuMS03LTctN0MxNC4yLDExLDExLjEsMTQuMSwxMS4xLDE4eiBNMjMuMSwxOGMwLDIuOC0yLjIsNS01LDVjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVDMjAuOSwxMywyMy4xLDE1LjIsMjMuMSwxOHoiLz5cbiAgICAgICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMi44LDE0LjdMMzAsMTMuOGwtMC4xLTAuM2MtMC44LDAtMS42LTAuMi0yLjQtMC40YzAuMywwLjYsMC42LDEuMywwLjgsMS45bDAuMSwwLjVsMy42LDEuMXYyLjhsLTMu''@;'; put 'put ''NiwxLjFMMjguMywyMWMtMC4zLDAuNy0wLjYsMS40LTAuOSwyLjFsLTAuMywwLjVsMS44LDMuM2wtMiwybC0zLjMtMS44bC0wLjUsMC4zYy0wLjcsMC40LTEuNCwwLjctMi4xLDAuOWwtMC41LDAuMUwxOS40LDMyaC0yLjhsLTEuMS0zLjZMMTUsMjguM2MtMC43LTAuMy0xLjQtMC42LTIuMS0w''@;'; put 'put ''LjlsLTAuNS0wLjNsLTMuMywxLjhsLTItMmwxLjgtMy4zbC0wLjMtMC41Yy0wLjQtMC43LTAuNy0xLjQtMC45LTIuMWwtMC4xLTAuNUw0LDE5LjR2LTIuOGwzLjQtMWwwLjItMC41YzAuMi0wLjgsMC41LTEuNSwwLjktMi4ybDAuMy0wLjVMNy4xLDkuMWwyLTJsMy4yLDEuOGwwLjUtMC4zYzAu''@;'; put 'put ''Ny0wLjQsMS40LTAuNywyLjItMC45bDAuNS0wLjJMMTYuNiw0aDIuOGwxLjEsMy41TDIxLDcuN2MwLjcsMC4yLDEuMywwLjUsMS45LDAuOGMtMC4zLTAuOC0wLjQtMS42LTAuNC0yLjVsLTAuNC0wLjJsLTAuOS0yLjhDMjEsMi41LDIwLjQsMiwxOS43LDJoLTMuNGMtMC43LDAtMS4zLDAuNS0x''@;'; put 'put ''LjQsMS4yTDE0LDZjLTAuNiwwLjEtMS4xLDAuMy0xLjYsMC42TDkuOCw1LjJDOS4yLDQuOSw4LjQsNSw3LjksNS41TDUuNSw3LjlDNSw4LjQsNC45LDkuMiw1LjIsOS44bDEuMywyLjVjLTAuMiwwLjUtMC40LDEuMS0wLjYsMS42bC0yLjgsMC45QzIuNSwxNSwyLDE1LjYsMiwxNi4zdjMuNGMw''@;'; put 'put ''LDAuNywwLjUsMS4zLDEuMiwxLjVMNiwyMi4xbDAuNiwxLjVsLTEuNCwyLjZjLTAuMywwLjYtMC4yLDEuNCwwLjMsMS45bDIuNCwyLjRjMC41LDAuNSwxLjMsMC42LDEuOSwwLjNsMi42LTEuNGwxLjUsMC42bDAuOSwyLjljMC4yLDAuNiwwLjgsMS4xLDEuNSwxLjFoMy40YzAuNywwLDEuMy0w''@;'; put 'put ''LjUsMS41LTEuMWwwLjktMi45bDEuNS0wLjZsMi42LDEuNGMwLjYsMC4zLDEuNCwwLjIsMS45LTAuM2wyLjQtMi40YzAuNS0wLjUsMC42LTEuMywwLjMtMS45bC0xLjQtMi42bDAuNi0xLjVsMi45LTAuOWMwLjYtMC4yLDEuMS0wLjgsMS4xLTEuNXYtMy40QzM0LDE1LjYsMzMuNSwxNC45LDMy''@;'; put 'put ''LjgsMTQuN3oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNywxNS40aC01LjN2MC4xbDMuNiwxLjF2Mi44bC0zLjYsMS4xTDI4LjMsMjFjLTAuMywwLjctMC42LDEuNC0wLjksMi4xbC0wLjMsMC41bDEuOCwzLjNsLTIsMmwtMy4zLTEuOGwtMC41LDAu''@;'; put 'put ''M2MtMC43LDAuNC0xLjQsMC43LTIuMSwwLjlsLTAuNSwwLjFMMTkuNCwzMmgtMi44bC0xLjEtMy42TDE1LDI4LjNjLTAuNy0wLjMtMS40LTAuNi0yLjEtMC45bC0wLjUtMC4zbC0zLjMsMS44bC0yLTJsMS44LTMuM2wtMC4zLTAuNWMtMC40LTAuNy0wLjctMS40LTAuOS0yLjFsLTAuMS0wLjVM''@;'; put 'put ''NCwxOS40di0yLjhsMy40LTFsMC4yLTAuNWMwLjItMC44LDAuNS0xLjUsMC45LTIuMmwwLjMtMC41TDcuMSw5LjFsMi0ybDMuMiwxLjhsMC41LTAuM2MwLjctMC40LDEuNC0wLjcsMi4yLTAuOWwwLjUtMC4yTDE2LjYsNGgyLjhsMS4xLDMuNGwxLjQtMi4zbC0wLjYtMkMyMSwyLjQsMjAuNCwy''@;'; put 'put ''LDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4zLTEuNiwwLjZMOS44LDUuMkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCww''@;'; put 'put ''LjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFsMC42LDEuNWwtMS40LDIuNmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAu''@;'; put 'put ''OCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwyLjYsMS40YzAuNiwwLjMsMS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEt''@;'; put 'put ''MS41di0zLjRDMzQsMTYsMzMuOSwxNS43LDMzLjcsMTUuNHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTE4LjEsMjNjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVjMC4y''@;'; put 'put ''LDAsMC41LDAsMC43LDAuMWMtMC4yLTAuNi0wLjMtMS4zLTAuMi0yaC0wLjVjLTMuOSwwLTcsMy4xLTcsN2MwLDMuOSwzLjEsNyw3LDdjMy45LDAsNy0zLjEsNy03YzAtMC45LTAuMi0xLjgtMC41LTIuNmgtMi4yYzAuNSwwLjgsMC43LDEuNiwwLjcsMi41QzIzLjEsMjAuOCwyMC45LDIzLDE4''@;'; put 'put ''LjEsMjN6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi45LDEuMUwyMS4xLDExYy0wLjQsMC42LTAuMiwxLjQsMC4zLDEuOGMwLjIsMC4yLDAuNSww''@;'; put 'put ''LjIsMC44LDAuMmgxMS41YzAuNywwLDEuMy0wLjUsMS4zLTEuMmMwLTAuMy0wLjEtMC41LTAuMi0wLjhsLTUuNy05LjljLTAuNC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC44LDI3LDEsMjYuOSwxLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjU3LDE1LjcybC0zLjM1LTFhMTEuNjUsMTEuNjUsMCwwLDAtLjk1LTIuMzNsMS42NC0zLjA3YS42MS42MSwwLDAsMC0uMTEtLjcyTDI3LjQxLDYuMmEuNjEuNjEsMCwwLDAtLjcyLS4xMUwyMy42NCw3LjcyYTExLjYyLDExLjYyLDAsMCwwLTIuMzYt''@;'; put 'put ''MWwtMS0zLjMxQS42MS42MSwwLDAsMCwxOS42OSwzSDE2LjMxYS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAsMCwwLTIuMzgsMWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMs''@;'; put 'put ''MCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYyLDExLjYyLDAsMCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0x''@;'; put 'put ''LjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgtLjQzbDEtMy4zOGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSww''@;'; put 'put ''LDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42MywxMS42MywwLDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThWMTYuMzFBLjYxLjYxLDAsMCwwLDMyLjU3LDE1LjcyWk0xOCwyMy41QTUuNSw1LjUsMCwxLDEsMjMuNSwxOCw1LjUsNS41LDAsMCwxLDE4LDIzLjVaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMi41NywxNS43MmwtMy4zNS0xYTEyLjEyLDEyLjEyLDAsMCwwLS40Ny0xLjMyLDcuNDksNy40OSwwLDAsMS02LjE0LTYuMTYsMTEuODIsMTEu''@;'; put 'put ''ODIsMCwwLDAtMS4zMy0uNDhsLTEtMy4zMUEuNjEuNjEsMCwwLDAsMTkuNjksM0gxNi4zMWEuNjEuNjEsMCwwLDAtLjU4LjQzbC0xLDMuM2ExMS42MywxMS42MywwLDAsMC0yLjM4LDFsLTMtMS42MmEuNjEuNjEsMCwwLDAtLjcyLjExTDYuMiw4LjU5YS42MS42MSwwLDAsMC0uMTEuNzJsMS42''@;'; put 'put ''MiwzYTExLjYzLDExLjYzLDAsMCwwLTEsMi4zN2wtMy4zMSwxYS42MS42MSwwLDAsMC0uNDMuNTh2My4zOGEuNjEuNjEsMCwwLDAsLjQzLjU4bDMuMzMsMWExMS42MiwxMS42MiwwLDAsMCwxLDIuMzNMNi4wOSwyNi42OWEuNjEuNjEsMCwwLDAsLjExLjcyTDguNTksMjkuOGEuNjEuNjEsMCww''@;'; put 'put ''LDAsLjcyLjExbDMuMDktMS42NWExMS42NSwxMS42NSwwLDAsMCwyLjMuOTRsMSwzLjM3YS42MS42MSwwLDAsMCwuNTguNDNoMy4zOGEuNjEuNjEsMCwwLDAsLjU4LS40M2wxLTMuMzhhMTEuNjMsMTEuNjMsMCwwLDAsMi4yOC0uOTRsMy4xMSwxLjY2YS42MS42MSwwLDAsMCwuNzItLjExbDIu''@;'; put 'put ''MzktMi4zOWEuNjEuNjEsMCwwLDAsLjExLS43MmwtMS42Ni0zLjFhMTEuNjMsMTEuNjMsMCwwLDAsLjk1LTIuMjlsMy4zNy0xYS42MS42MSwwLDAsMCwuNDMtLjU4VjE2LjMxQS42MS42MSwwLDAsMCwzMi41NywxNS43MlpNMTgsMjMuNUE1LjUsNS41LDAsMSwxLDIzLjUsMTgsNS41LDUuNSww''@;'; put 'put ''LDAsMSwxOCwyMy41WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzIuNTcsMTUuNzIsMzEuNSwxNS40SDIyLjg1QTUuNSw1LjUsMCwxLDEsMTgsMTIuNWE1LjUzLDUuNTMsMCwwLDEsLjY1LDBBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMi4wOS0zLjYyLS44Ni0yLjgz''@;'; put 'put ''QS42MS42MSwwLDAsMCwxOS42OSwzSDE2LjMxYS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAsMCwwLTIuMzgsMWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwy''@;'; put 'put ''LjM3bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYyLDExLjYyLDAsMCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1''@;'; put 'put ''LDExLjY1LDAsMCwwLDIuMy45NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgtLjQzbDEtMy4zOGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEt''@;'; put 'put ''LjcybC0xLjY2LTMuMWExMS42MywxMS42MywwLDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThWMTYuMzFBLjYxLjYxLDAsMCwwLDMyLjU3LDE1LjcyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxiLkNsclNoYXBl''@;'; put 'put ''Q2hlY2s9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xMy43MiwyNy42OSwzLjI5LDE3LjI3YTEsMSwwLDAsMSwxLjQxLTEuNDFsOSw5TDMxLjI5LDcuMjlhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz4nKSxiLkNs''@;'; put 'put ''clNoYXBlVGltZXM9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOS40MSwxOGw4LjI5LTguMjlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOCwxNi41OSw5LjcxLDguMjlBMSwxLDAsMCwwLDguMjksOS43MUwxNi41''@;'; put 'put ''OSwxOCw4LjI5LDI2LjI5YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTkuNDFsOC4yOSw4LjI5YTEsMSwwLDAsMCwxLjQxLTEuNDFaIi8+JyksYi5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiIGQ9Ik0xOCwyMS4zMmExLjMsMS4zLDAsMCwwLDEuMy0xLjNWMTRhMS4zLDEuMywwLDEsMC0yLjYsMHY2QTEuMywxLjMsMCwwLDAsMTgsMjEuMzJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MiIgY3g9IjE3Ljk1IiBjeT0iMjQuMjciIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3LDBMNS41NywyNS41NEEzLDMsMCwwLDAs''@;'; put 'put ''OC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42NC00LjQzWm0tMS43OCwxLjk0YTEsMSwwLDAsMS0uODYuNDlIOC4yMWExLDEsMCwwLDEtLjg4LTEuNDhMMTcuMDcsOC41NWExLDEsMCwwLDEsMS43NiwwbDkuNzQsMTcuOTRBMSwxLDAsMCwxLDI4LjU1LDI3LjQ4WiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMC4zMywyNS41NCwyMC41OSw3LjZhMywzLDAsMCwwLTUuMjcsMEw1LjU3LDI1LjU0QTMsMywwLDAsMCw4LjIxLDMwSDI3LjY5YTMsMywwLDAsMCwyLjY0LTQuNDNaTTE2LjQ2LDEyLjc0YTEuNDks''@;'; put 'put ''MS40OSwwLDAsMSwzLDB2Ni44OWExLjQ5LDEuNDksMCwxLDEtMywwWk0xOCwyNi4yNWExLjcyLDEuNzIsMCwxLDEsMS43Mi0xLjcyQTEuNzIsMS43MiwwLDAsMSwxOCwyNi4yNVoiLz4nKSxiLkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMC4wN2ExLjMsMS4zLDAsMCwxLTEuMy0xLjN2LTZhMS4zLDEuMywwLDEsMSwyLjYsMHY2QTEuMywxLjMsMCwwLDEsMTgsMjAuMDdaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMyIgY3g9IjE3Ljk1IiBjeT0iMjMuMDIiIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0xLjQ5LDZh''@;'; put 'put ''MS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEuNDksMS40OSwwLDEsMS0zLDBaTTE4LDI1LjVhMS43MiwxLjcyLDAsMSwxLDEuNzItMS43MkExLjcyLDEuNzIsMCwwLDEsMTgsMjUuNVoiLz4nKSxiLkNsclNoYXBlQ2hlY2tDaXJjbGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xNi4zNCwyMy43NGwtNS01YTEsMSwwLDAsMSwxLjQxLTEuNDFsMy41OSwzLjU5LDYuNzgtNi43OGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTEiIGQ9Ik0zMCwxOEExMiwxMiwwLDEsMSwxOCw2LDEyLDEyLDAsMCwxLDMwLDE4Wm0tNC43Ny0yLjE2YTEuNCwxLjQsMCwwLDAtMi0ybC02Ljc3LDYuNzdMMTMsMTcuMTZhMS40LDEuNCwwLDAsMC0yLDJsNS40NSw1LjQ1WiIvPicpLGIuQ2xyU2hhcGVJbmZvQ2lyY2xlPSgwLHAuY2xy''@;'; put 'put ''SWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiICBjeD0iMTcuOTMiIGN5PSIxMS45IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgIGQ9Ik0y''@;'; put 'put ''MSwyM0gxOVYxNUgxNmExLDEsMCwwLDAsMCwyaDF2NkgxNWExLDEsMCwxLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEy''@;'; put 'put ''LDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgs''@;'; put 'put ''NlptLTIsNS4xNWEyLDIsMCwxLDEsMiwyQTIsMiwwLDAsMSwxNS45LDExLjE1Wk0yMywyNGExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDEsMSwwLTJoMlYxN0gxNmExLDEsMCwwLDEsMC0yaDR2OGgyQTEsMSwwLDAsMSwyMywyNFoiLz4nKSxiLkNsclNoYXBlSW5mb1N0YW5kYXJkPSgwLHAuY2xy''@;'; put 'put ''SWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxNy45NyIgY3k9IjEwLjQ1IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTIx''@;'; put 'put ''LDI1SDE5VjE0LjFIMTZhMSwxLDAsMCwwLDAsMmgxVjI1SDE1YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgs''@;'; put 'put ''MTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCww''@;'; put 'put ''LDE4LDIuMVptLS4xLDUuMjhhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTcuOSw3LjM4Wm0zLjYsMjEuMjVoLTdhMS40LDEuNCwwLDEsMSwwLTIuOGgyLjF2LTkuMkgxNWExLjQsMS40LDAsMSwxLDAtMi44aDQuNHYxMmgyLjFhMS40LDEuNCwwLDEsMSwwLDIuOFoiLz4nKSxiLkNsclNoYXBl''@;'; put 'put ''U3VjY2Vzc1N0YW5kYXJkPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4''@;'; put 'put ''LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjgsMTIuMWExLDEsMCwwLDAtMS40MSwwTDE1LjQ5LDIzLjE1bC02LTZBMSwxLDAsMCwwLDgsMTguNTNMMTUuNDksMjYsMjgsMTMuNTJBMSwxLDAsMCww''@;'; put 'put ''LDI4LDEyLjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNMjguNDUsMTIuNjMsMTUuMzEsMjUuNzYsNy41NSwxOGExLjQsMS40LDAsMCwx''@;'; put 'put ''LDItMmw1Ljc4LDUuNzhMMjYuNDcsMTAuNjVhMS40LDEuNCwwLDEsMSwyLDJaIi8+JyksYi5DbHJTaGFwZUVycm9yU3RhbmRhcmQ9KDAscC5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjYuMDYiIHI9''@;'; put 'put ''IjEuMzMiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDIyLjYxYTEsMSwwLDAsMS0xLTF2LTEyYTEsMSwwLDEsMSwyLDB2MTJBMSwxLDAsMCwxLDE4LDIyLjYxWiIvPlxuICAgICAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDIuMVpNMTYuNiw4LjhhMS40LDEuNCwwLDAsMSwyLjgsMHYxMmExLjQsMS40LDAsMCwxLTIuOCwwWk0xOCwyOC42YTEuOCwxLjgsMCwxLDEsMS44LTEu''@;'; put 'put ''OEExLjgsMS44LDAsMCwxLDE4LDI4LjZaIi8+JyksYi5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD0oMCxwLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTgiIGN5PSIyNi4wNiIgcj0iMS4zMyIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjIuNjFhMSwxLDAsMCwxLTEtMXYtMTJhMSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xNS4wNjIwNzgyLDEuNjgxMTk2IEMxNS42Mjk4ODE5LDAuNjQ5MjY2MzU1IDE2LjcxMDkwOTEsMC4wMTAyMjE5Mzk2IDE3Ljg4NSwwLjAxMDIyMTkzOTYgQzE5LjA1OTA5MDksMC4wMTAyMjE5Mzk2IDIwLjE0MDExODEsMC42NDkyNjYz''@;'; put 'put ''NTUgMjAuNzA4NjQzMywxLjY4MjUyMTI5IEwzNC41OTg2NDQsMjcuMjQyNTIyNSBDMzUuMTQwNzc0NiwyOC4yNDAxMzk3IDM1LjExNzQzNDUsMjkuNDQ5NTM3MyAzNC41MzcyMTYxLDMwLjQyNTQ5NDMgQzMzLjk1Njk5NzcsMzEuNDAxNDUxNCAzMi45MDU2NzEsMzEuOTk5Njk4NCAzMS43Nywz''@;'; put 'put ''MiBMNC4wMjIzOTMyMywzMS45OTk3NDkyIEMyLjg3NDA5MDA5LDMyLjAyNTQ2OTkgMS43OTkwMjg0MywzMS40Mzc1NzUzIDEuMjAxMDYzMzUsMzAuNDU2OTEyNiBDMC42MDMwOTgyNjUsMjkuNDc2MjQ5OSAwLjU3Mjc3Nzg5OSwyOC4yNTEzMTc5IDEuMTIyMDc4MTgsMjcuMjQxMTk2IEwxNS4w''@;'; put 'put ''NjIwNzgyLDEuNjgxMTk2IFogTTIuODc4NTA3NjcsMjguMTk3NzI4MiBDMi42NzA2MDk2NiwyOC41ODAwMzc2IDIuNjgyMDk3NSwyOS4wNDQxNDIzIDIuOTA4NjU1NywyOS40MTU2OTc3IEMzLjEzNTIxMzksMjkuNzg3MjUzMiAzLjU0MjUzNTQsMzAuMDA5OTk1OSA0LDMwIEwzMS43Njk3MzQ0''@;'; put 'put ''LDMwIEMzMi4xOTk5MTkxLDI5Ljk5OTg4NTggMzIuNTk4MjQ3OCwyOS43NzMyMjA4IDMyLjgxODA4MjEsMjkuNDAzNDQ4MiBDMzMuMDM3OTE2NCwyOS4wMzM2NzU3IDMzLjA0Njc1OTUsMjguNTc1NDU2NyAzMi44NDEzNTY3LDI4LjE5NzQ3ODcgTDE4Ljk1Mzg3MzksMi42NDIwODE5NSBDMTgu''@;'; put 'put ''NzM5NDIzNiwyLjI1MjM0NDM2IDE4LjMyOTg0MTksMi4wMTAyMjE5NCAxNy44ODUsMi4wMTAyMjE5NCBDMTcuNDQwNjg4OSwyLjAxMDIyMTk0IDE3LjAzMTU1MzgsMi4yNTE3NjY5MiAxNi44MTY4OTQ2LDIuNjQwNjg3NTMgTDIuODc4NTA3NjcsMjguMTk3NzI4MiBaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LjYsMjkuMjEsMjAuNzEsMy42NWEzLjIyLDMuMjIsMCwwLDAtNS42NiwwTDEuMTcsMjkuMjFBMy4yMiwzLjIyLDAsMCwwLDQsMzRIMzEuNzdhMy4yMiwzLjIyLDAsMCwwLDIuODMtNC43NVpN''@;'; put 'put ''MTYuNiwxMGExLjQsMS40LDAsMCwxLDIuOCwwdjEyYTEuNCwxLjQsMCwwLDEtMi44LDBaTTE4LDI5Ljg1YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI5Ljg1WiIvPicpLGIuQ2xyU2hhcGVIZWxwSW5mbz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMzks''@;'; put 'put ''MjUuNDVhMSwxLDAsMCwwLTEuMzguMjljLTEuNDEsMi4xNi00LDQuODEtNi4zMSw1LjdzLTQuMTIuNTctNC44NCwwYy0uMzEtLjI3LTEuMTItMS0uNDMtMy40OS40Ni0xLjY2LDMuMzItOS40OCw0LTExLjM4bC0yLjE4LjI4Yy0uNjksMS44Ni0zLjI5LDguODQtMy43NiwxMC41OC0uNjgsMi40''@;'; put 'put ''OS0uMzQsNC4zLDEuMDksNS41NkE1LjU5LDUuNTksMCwwLDAsMTUsMzRhOS41Myw5LjUzLDAsMCwwLDMuNDUtLjdjMi43OS0xLjA5LDUuNzItNC4xMiw3LjI2LTYuNDdBMSwxLDAsMCwwLDI1LjM5LDI1LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuMywxMWE0LjUsNC41LDAsMSwwLTQuNS00LjVBNC41LDQuNSwwLDAsMCwxOS4zLDExWm0wLTdhMi41LDIuNSwwLDEsMS0yLjUsMi41QTIuNSwyLjUsMCwwLDEsMTkuMyw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuODEsMTVjLjA2LDAsNi4yNy0uODIsNy43My0xLC42NS0uMSwxLjE0LDAsMS4zLjE1cy4yMS44LS4wNywxLjY4Yy0uNjEsMS44Ni0zLjY5LDExLTQuNTksMTMuNzFhOCw4LDAsMCwwLDEuMjktLjM4LDcuMzIsNy4zMiwwLDAsMCwxLjE1''@;'; put 'put ''LS42QzE5Ljg1LDI1LDIyLjE1LDE4LjEsMjIuNjcsMTYuNTJzLjM5LTIuNzgtLjMtMy42YTMuMTYsMy4xNiwwLDAsMC0zLjA4LS44M2MtMS40My4xNS03LjQ3Ljk0LTcuNzMsMWExLDEsMCwwLDAsLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxjaXJjbGUgY3g9IjIwLjc1IiBjeT0iNiIgcj0iNCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC44NCwyNi4yM2ExLDEsMCwwLDAtMS40LjI5LDE2LjYsMTYuNiwwLDAsMS0zLjUxLDMuNzdj''@;'; put 'put ''LS4zMy4yNS0xLjU2LDEuMi0yLjA4LDEtLjM2LS4xMS0uMTUtLjgyLS4wOC0xLjEybC41My0xLjU3Yy4yMi0uNjQsNC4wNS0xMiw0LjQ3LTEzLjMuNjItMS45LjM1LTMuNzctMi40OC0zLjMyLS43Ny4wOC04LjU4LDEuMDktOC43MiwxLjFhMSwxLDAsMCwwLC4xMywyczMtLjM5LDMuMzMtLjQy''@;'; put 'put ''YS44OC44OCwwLDAsMSwuODUuNDQsMi40NywyLjQ3LDAsMCwxLS4wNywxLjcxYy0uMjYsMS00LjM3LDEyLjU4LTQuNSwxMy4yNWEyLjc4LDIuNzgsMCwwLDAsMS4xOCwzLDUsNSwwLDAsMCwzLjA4LjgzaDBhOC41Myw4LjUzLDAsMCwwLDMuMDktLjYyYzIuNDktMSw1LjA5LTMuNjYsNi40Ni01''@;'; put 'put ''Ljc1QTEsMSwwLDAsMCwyNC44NCwyNi4yM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksYi5DbHJTaGFwZUJhcnM9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwyOUg0''@;'; put 'put ''YTEsMSwwLDAsMSwwLTJIMzJhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLDE5SDRhMSwxLDAsMCwxLDAtMkgzMmExLDEsMCwwLDEsMCwyWiIvPlxuICAgICAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzIsOUg0QTEsMSwwLDAsMSw0LDdIMzJhMSwxLDAsMCwxLDAsMloiLz4nKSxiLkNsclNoYXBlVXNlcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMSwwLTctN0E3LDcs''@;'; put 'put ''MCwwLDAsMTgsMTdaTTE4LDVhNSw1LDAsMSwxLTUsNUE1LDUsMCwwLDEsMTgsNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjQ3LDI0LjM3YTE3LjE2LDE3LjE2LDAsMCwwLTI0LjkzLDBBMiwyLDAsMCww''@;'; put 'put ''LDUsMjUuNzRWMzFhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAsMi0yVjI1Ljc0QTIsMiwwLDAsMCwzMC40NywyNC4zN1pNMjksMzFIN1YyNS43M2ExNS4xNywxNS4xNywwLDAsMSwyMiwwaDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0zMC40NywyNC4zN2ExNy4xNiwxNy4xNiwwLDAsMC0yNC45MywwQTIsMiwwLDAsMCw1LDI1Ljc0VjMxYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyNS43NEEyLDIsMCwwLDAsMzAuNDcsMjQuMzdaTTI5LDMxSDdWMjUuNzNhMTUuMTcsMTUuMTcsMCww''@;'; put 'put ''LDEsMjIsMGgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDQuNDUtMS42aC0uMjJBMy42OCwzLjY4LDAsMCwxLDIwLDE0LjZhNSw1LDAsMSwxLDEu''@;'; put 'put ''MjQtOC40MmwxLTEuNzZBNyw3LDAsMSwwLDE4LDE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNI''@;'; put 'put ''MzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMzAuNDcsMjQuMzdhMTcuMTYsMTcuMTYsMCwwLDAtMjQuOTMsMEEyLDIsMCwwLDAsNSwyNS43NFYzMWEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjUuNzRBMiwyLDAsMCwwLDMwLjQ3LDI0LjM3Wk0yOSwzMUg3VjI1LjczYTE1LjE3LDE1LjE3LDAsMCwxLDIyLDBoMFoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNi44NS01LjU2LDcuNCw3LjQsMCwwLDEtMi4yNC02LjY5QTcsNywwLDEsMCwxOCwxN1pNMTgsNWE1LDUsMCwx''@;'; put 'put ''LDEtNSw1QTUsNSwwLDAsMSwxOCw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUyYTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4zOSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwz''@;'; put 'put ''MS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjEwIiByPSI3IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUyYTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4zOSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41MloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDQuNDUtMS42aC0uMjJBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMy4xNi01LjQ3QTcsNywwLDEsMCwxOCwxN1oiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEu''@;'; put 'put ''MTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC42MSwyNC41MmExNy4xNiwxNy4xNiwwLDAsMC0yNS4yMiww''@;'; put 'put ''LDEuNTEsMS41MSwwLDAsMC0uMzksMXY2QTEuNSwxLjUsMCwwLDAsNi41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNXYtNkExLjUxLDEuNTEsMCwwLDAsMzAuNjEsMjQuNTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNi44NS01LjU2LDcuNCw3LjQsMCwwLDEtMi4yNC02LjY5QTcsNywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNs''@;'; put 'put ''ZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksYi5DbHJTaGFwZUFuZ2xlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIiBkPSJNMjkuNTIsMjIuNTIsMTgsMTAuNiw2LjQ4LDIyLjUyYTEuNywxLjcsMCwwLDAsMi40NSwyLjM2TDE4LDE1LjQ5bDkuMDgsOS4zOWExLjcsMS43LDAsMCwwLDIuNDUtMi4zNloiLz4nKSxiLkNsclNoYXBlRm9sZGVyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlabTAsMjBINlYxM2g3''@;'; put 'put ''LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAsMTMuNVYyOUg2VjEzaDcu''@;'; put 'put ''MzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUxYTcuNSw3LjUsMCwwLDEtMS4yOS0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYx''@;'; put 'put ''My4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzAsMTUuNFYyOUg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAs''@;'; put 'put ''MSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAs''@;'; put 'put ''MCwwLDMwLDlaTTYsMTFWN2g2LjQ5bDIuNzIsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQy''@;'; put 'put ''TDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNS40Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIzLjEzLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAs''@;'; put 'put ''MCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1i''@;'; put 'put ''YWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLGIuQ2xyU2hhcGVGb2xkZXJPcGVuPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3''@;'; put 'put ''YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxSDMyYTIsMiwwLDAsMC0yLTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3''@;'; put 'put ''LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaTTI5LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0SDMzLjQ5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAsMCwzMy44NywxM0gxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAs''@;'; put 'put ''MCwwLC44MS40MWg4LjUyYTcuNDksNy40OSwwLDAsMS0xLjI5LTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCww''@;'; put 'put ''LDAsMzUuMzIsMTMuNzRaTTI5LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0SDMzLjQ5WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdl''@;'; put 'put ''IiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40aC0uM0wyOS41NSwyOUg2LjlsMy44OC0xMy44MWEuNjYuNjYsMCwwLDEs''@;'; put 'put ''LjM4LS4yNGg5LjQyQTMuNjcsMy42NywwLDAsMSwxOSwxMy41NmEzLjYzLDMuNjMsMCwwLDEtLjI2LS41NkgxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42Niww''@;'; put 'put ''LDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMWExLjY4LDEuNjgsMCwwLDAsLjA3LS4zMkEzLjY3LDMu''@;'; put 'put ''NjcsMCwwLDEsMzMuNjgsMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIz''@;'; put 'put ''LDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEs''@;'; put 'put ''MCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzJhMiwyLDAsMCwwLTItMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCww''@;'; put 'put ''LDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZhMy42MywzLjYzLDAsMCwxLS4yNi0uNTZIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwu''@;'; put 'put ''ODEuNDFoMi43M0EzLjY2LDMuNjYsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFhMS42OCwxLjY4''@;'; put 'put ''LDAsMCwwLC4wNy0uMzJBMy42NywzLjY3LDAsMCwxLDMzLjY4LDE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0t''@;'; put 'put ''YmFkZ2VkIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDguNTJhNy40OSw3LjQ5LDAsMCwxLTEuMzEtMkgx''@;'; put 'put ''Ni40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFoiLz5cbiAgICAgICAgICAgICAgICA8Y2ly''@;'; put 'put ''Y2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+JyksYi5DbHJTaGFwZUJlbGw9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiIGQ9Ik0zMi41MSwyNy44M0ExNC40LDE0LjQsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0xLjM1LTQuODFWMTUuMTVBMTAuODEsMTAuODEsMCwwLDAsMTkuMjEsNC40VjMuMTFhMS4zMywxLjMzLDAsMSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCww''@;'; put 'put ''LDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40LDAsMCwxLTIuNDcsMi45MywxLDEsMCwwLDAtLjM0Ljc1djEuMzZhMSwxLDAsMCwwLDEsMWgyNy44YTEsMSwwLDAsMCwxLTFWMjguNThBMSwxLDAsMCwwLDMyLjUxLDI3LjgzWk01LjEzLDI4Ljk0''@;'; put 'put ''YTE2LjE3LDE2LjE3LDAsMCwwLDIuNDQtMywxNC4yNCwxNC4yNCwwLDAsMCwxLjY1LTUuODVWMTUuMTVhOC43NCw4Ljc0LDAsMSwxLDE3LjQ3LDB2NC45NGExNC4yNCwxNC4yNCwwLDAsMCwxLjY1LDUuODUsMTYuMTcsMTYuMTcsMCwwLDAsMi40NCwzWiIvPlxuICAgICAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzQuMjhBMi42NywyLjY3LDAsMCwwLDIwLjU4LDMySDE1LjMyQTIuNjcsMi42NywwLDAsMCwxOCwzNC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUuMzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTMyLjUxLDI3LjgzQTE0LjQsMTQuNCwwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNWExMC45MiwxMC45MiwwLDAsMC0uMTYtMS43OSw3LjQ0LDcuNDQsMCwwLDEtMi4yNC0uODQsOC44OSw4Ljg5LDAs''@;'; put 'put ''MCwxLC40LDIuNjR2NC45NGExNC4yNCwxNC4yNCwwLDAsMCwxLjY1LDUuODUsMTYuMTcsMTYuMTcsMCwwLDAsMi40NCwzSDUuMTNhMTYuMTcsMTYuMTcsMCwwLDAsMi40NC0zLDE0LjI0LDE0LjI0LDAsMCwwLDEuNjUtNS44NVYxNS4xNUE4LjgsOC44LDAsMCwxLDE4LDYuMzFhOC42MSw4LjYx''@;'; put 'put ''LDAsMCwxLDQuNzYsMS40NEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2YzAtLjIxLDAtLjQyLDAtLjYzYTEwLjU4LDEwLjU4LDAsMCwwLTMuMzItMVYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCww''@;'; put 'put ''LDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3LDIuOTMsMSwxLDAsMCwwLS4zNC43NXYxLjM2YTEsMSwwLDAsMCwxLDFoMjcuOGExLDEsMCwwLDAsMS0xVjI4LjU4QTEsMSwwLDAsMCwzMi41MSwyNy44M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi44NSwyOC4xM2wtLjM0LS4z''@;'; put 'put ''QTE0LjM3LDE0LjM3LDAsMCwxLDMwLDI0LjlhMTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1QTEwLjgxLDEwLjgxLDAsMCwwLDE5LjIxLDQuNFYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIu''@;'; put 'put ''NjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3LDIuOTNsLS4zNC4zdjIuODJIMzIuODVaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE1LjMyLDMyYTIuNjUsMi42NSwwLDAsMCw1LjI1LDBa''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUuMzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzIuODUsMjguMTNsLS4zNC0uM0ExNC4zNywxNC4zNywwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNWExMC45MiwxMC45Miww''@;'; put 'put ''LDAsMC0uMTYtMS43OUE3LjUsNy41LDAsMCwxLDIyLjUsNmMwLS4yMSwwLS40MiwwLS42M2ExMC41NywxMC41NywwLDAsMC0zLjMyLTFWMy4xMWExLjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYzLDAsMCwxLDUu''@;'; put 'put ''ODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzbC0uMzQuM3YyLjgySDMyLjg1WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9''@;'; put 'put ''IjUiLz4nKSxiLkNsclNoYXBlSW1hZ2U9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk00LDMwVjZIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguOTIsMTRhMywzLDAsMSwwLTMtM0EzLDMsMCwwLDAsOC45MiwxNFptMC00LjZBMS42LDEuNiwwLDEsMSw3LjMzLDExLDEuNiwxLjYsMCwwLDEsOC45Miw5LjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi43OCwxNS4zN2wtNS40LDUuNC00LTRhMSwxLDAsMCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MUEx''@;'; put 'put ''LDEsMCwwLDAsMjIuNzgsMTUuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjkzLDExYTMsMywwLDEsMC0zLDNBMywzLDAsMCwwLDExLjkzLDExWm0tNC42LDBhMS42LDEuNiwwLDEsMSwxLjYsMS42QTEu''@;'; put 'put ''NiwxLjYsMCwwLDEsNy4zMywxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjM4LDIwLjc3bC00LTRhMSwxLDAsMCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlM''@;'; put 'put ''MTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MWExLDEsMCwwLDAtMS40MSwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMu''@;'; put 'put ''MjJWMzBINFY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDRINEEyLDIs''@;'; put 'put ''MCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk04LjkyLDhhMywzLDAsMSwxLTMsM0EzLDMsMCwwLDEsOC45Miw4Wk02LDI3VjIyLjlsNi02LjA4YTEsMSwwLDAsMSwxLjQxLDBMMTYsMTkuMzUsOC4zMiwyN1ptMjQsMEgxMS4xNWw2''@;'; put 'put ''LjIzLTYuMjMsNS40LTUuNGExLDEsMCwwLDEsMS40MSwwTDMwLDIxLjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40OCw3LjQ4LDAsMCwxLDIyLjc4LDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiww''@;'; put 'put ''LDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNOC45Miw4YTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDguOTIsOFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02''@;'; put 'put ''LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+JyksYi5DbHJTaGFwZUNsb3VkPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuMTQsMzNIMTAuNjJDNS42NywzMywxLDI4LjE5LDEs''@;'; put 'put ''MjMuMWExMCwxMCwwLDAsMSw4LTkuNzUsMTAuMTksMTAuMTksMCwwLDEsMjAuMzMsMS4wNkExMC4wNywxMC4wNywwLDAsMSwyOSwxNi42NmE4LjI5LDguMjksMCwwLDEsNiw4QzM1LDI5LjEsMzEuMzMsMzMsMjcuMTQsMzNaTTE5LjA5LDYuMjNhOC4yNCw4LjI0LDAsMCwwLTguMTksOGwwLC44''@;'; put 'put ''Ny0uODYuMUE3Ljk0LDcuOTQsMCwwLDAsMywyMy4xYzAsNCwzLjc3LDcuOSw3LjYyLDcuOUgyNy4xNEMzMC4yMSwzMSwzMywyOCwzMywyNC42NWE2LjMxLDYuMzEsMCwwLDAtNS4zNy02LjI2bC0xLjE4LS4xOC4zOS0xLjEzQTguMTgsOC4xOCwwLDAsMCwxOS4wOSw2LjIzWiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTI5LDE2LjY2YTEwLjA3LDEwLjA3LDAsMCwwLC4yNS0yLjI0YzAtLjMzLDAtLjY1LDAtMWE3LjQ1LDcuNDUsMCwwLDEtMi4xLS41NCw4LDgsMCwwLDEt''@;'; put 'put ''LjMsNC4xNmwtLjM5LDEuMTMsMS4xOC4xOGE2LjMxLDYuMzEsMCwwLDEsNS4zNyw2LjI2QzMyLjk1LDI4LDMwLjE2LDMxLDI3LjA5LDMxSDEwLjU3Yy0zLjg0LDAtNy42Mi0zLjkxLTcuNjItNy45YTcuOTQsNy45NCwwLDAsMSw3LTcuODlsLjg2LS4xLDAtLjg3YTguMjQsOC4yNCwwLDAsMSw4''@;'; put 'put ''LjE5LThBOC4xMyw4LjEzLDAsMCwxLDIyLjU4LDdhNy41Myw3LjUzLDAsMCwxLS4wOC0xLDcuNTEsNy41MSwwLDAsMSwuMDktMS4xMkExMC4xMywxMC4xMywwLDAsMCwxOSw0LjIzLDEwLjI2LDEwLjI2LDAsMCwwLDguOTEsMTMuMzZhMTAsMTAsMCwwLDAtOCw5Ljc1YzAsNS4wOSw0LjY3LDku''@;'; put 'put ''OSw5LjYyLDkuOUgyNy4wOWM0LjE5LDAsNy44Ni0zLjksNy44Ni04LjM1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRn''@;'; put 'put ''ZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjksMTYuNjZhMTAuMTQsMTAuMTQsMCwwLDAsLjItMS4zaC0yYTguMjgsOC4yOCwwLDAs''@;'; put 'put ''MS0uMzcsMS43MmwtLjM5LDEuMTMsMS4xOC4xOGE2LjMxLDYuMzEsMCwwLDEsNS4zNyw2LjI2QzMyLjk1LDI4LDMwLjE2LDMxLDI3LjA5LDMxSDEwLjU3Yy0zLjg0LDAtNy42Mi0zLjkxLTcuNjItNy45YTcuOTQsNy45NCwwLDAsMSw3LTcuODlsLjg2LS4xLDAtLjg3QTguMTYsOC4xNiwwLDAs''@;'; put 'put ''MSwyMSw2LjQ3bDEtMS44QTEwLjE5LDEwLjE5LDAsMCwwLDguOTEsMTMuMzZhMTAsMTAsMCwwLDAtOCw5Ljc1YzAsNS4wOSw0LjY3LDkuOSw5LjYyLDkuOUgyNy4wOWM0LjE5LDAsNy44Ni0zLjksNy44Ni04LjM1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4w''@;'; put 'put ''NiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNEExMC4xOSwxMC4xOSwwLDAsMCw4LjkxLDEz''@;'; put 'put ''LjM2LDEwLDEwLDAsMCwwLDEsMjMuMUMxLDI4LjE5LDUuNjIsMzMsMTAuNTcsMzNIMjcuMDlDMzEuMjgsMzMsMzUsMjkuMSwzNSwyNC42NUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yOSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNGMwLS4zMywwLS42NSwwLTFhNy40NCw3LjQ0LDAsMCwxLTYuNi04LjU4QTEwLjEzLDEwLjEzLDAsMCwwLDE5LDQuMjMsMTAuMjYsMTAuMjYsMCwwLDAsOC45MSwxMy4zNiwxMCwxMCww''@;'; put 'put ''LDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjksMTYuNjZhMTAuMTUsMTAuMTUsMCwwLDAsLjItMS4y''@;'; put 'put ''NmgtN0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwzLTUuMjFBMTAuMTksMTAuMTksMCwwLDAsOC45MSwxMy4zNiwxMCwxMCwwLDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2''@;'; put 'put ''WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCww''@;'; put 'put ''LDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxiLkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsPSgwLHAuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI0LjkiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xl''@;'; put 'put ''IGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxiLkNsclNoYXBlRWxsaXBz''@;'; put 'put ''aXNWZXJ0aWNhbD0oMCxwLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIg''@;'; put 'put ''cj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTIt''@;'; put 'put ''LWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMzEuMSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksYi5DbHJTaGFwZUZpbHRlckdyaWQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9''@;'; put 'put ''Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAsMCwwLS4yOS0uN0wxMC4yMywxM0gyNS43OWwtNi40Nyw2LjU3YTEsMSwwLDAsMC0uMjkuN0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFhMS40''@;'; put 'put ''NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik04LDExdjEuMTJhLjUuNSwwLDAsMCwuMTUuMzVsNy4yOCw3LjM2YS41LjUsMCwwLDEsLjE1LjM1djYuODlhLjUuNSww''@;'; put 'put ''LDAsMCwuMjguNDVsMy45NSwxLjQxYS41LjUsMCwwLDAsLjcyLS40NWwwLTguMzlhLjU0LjU0LDAsMCwxLC4xOC0uMzVsNy4xMi03LjI1YS41LjUsMCwwLDAsLjE1LS4zNVYxMVoiLz4nKSxiLkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE1LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCwwLDAtLjI5LS43TDEwLjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwxNEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNW''@;'; put 'put ''MTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAsMC0xLDF2MWExLjQ2LDEuNDYsMCwwLDAsLjQyLDFMMTUsMjAuNjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2''@;'; put 'put ''LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgs''@;'; put 'put ''MlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNOCwxMXYxLjEyYS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4x''@;'; put 'put ''NS4zNXY2Ljg5YS41LjUsMCwwLDAsLjI4LjQ1bDMuOTUsMS40MWEuNS41LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCwwLDAsMSwuMTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCwwLC4xNS0uMzVWMTFaIi8+JyksYi5DbHJTaGFwZVZtQnVnPSgwLHAuY2xySWNvblNWRykoJzxyZWN0IHdp''@;'; put 'put ''ZHRoPSIzNiIgaGVpZ2h0PSIzNiIgcng9IjMiIGZpbGw9IiNmZmZmZmYiIG9wYWNpdHk9IjAuMTUiIHN0eWxlPSJpc29sYXRpb246aXNvbGF0ZSIvPjxwYXRoIGQ9Ik0zLjc5LDE0LjgzYTEuMDksMS4wOSwwLDAsMC0xLjQ3LS41NiwxLjA5LDEuMDksMCwwLDAtLjU0LDEuNDlsMi40Nyw1LjRj''@;'; put 'put ''LjM5Ljg1LjgsMS4yOSwxLjU3LDEuMjlTNywyMiw3LjM5LDIxLjE2bDIuMTctNC43N2EuMzMuMzMsMCwwLDEsLjMxLS4yLjM1LjM1LDAsMCwxLC4zNS4zNXY0LjYxYTEuMTUsMS4xNSwwLDAsMCwxLjE0LDEuMywxLjE3LDEuMTcsMCwwLDAsMS4xNy0xLjNWMTcuMzhhMS4xNSwxLjE1LDAsMCwx''@;'; put 'put ''LDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTcsMS4xNywwLDEsMCwyLjMyLDBWMTcuMzhhMS4xNSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTYsMS4xNiwwLDEsMCwyLjMxLDBWMTYuODZhMi42OSwyLjY5LDAs''@;'; put 'put ''MCwwLTIuNzgtMi42OSwzLjU3LDMuNTcsMCwwLDAtMi40NywxLjA1LDIuNzUsMi43NSwwLDAsMC0yLjM4LTEuMDVBMy45MywzLjkzLDAsMCwwLDEyLDE1LjIyYTIuODIsMi44MiwwLDAsMC0yLjA4LTEuMDVBMi41NSwyLjU1LDAsMCwwLDcuNCwxNS44OUw1LjgyLDE5LjYzbC0yLTQuOCIgZmls''@;'; put 'put ''bD0iI2ZmZmZmZiIvPjxwYXRoIGQ9Ik0zMywxNC4xOEExLjE0LDEuMTQsMCwwLDAsMzEuOSwxNWwtMS4xOSwzLjczTDI5LjUsMTUuMDVhMS4xOCwxLjE4LDAsMCwwLTEuMTUtLjg3aC0uMWExLjIsMS4yLDAsMCwwLTEuMTUuODdsLTEuMTksMy43MS0xLjE4LTMuNzFhMS4xNSwxLjE1LDAsMCww''@;'; put 'put ''LTEuMTEtLjg3LDEuMDgsMS4wOCwwLDAsMC0xLjEyLDEuMDcsMS42OCwxLjY4LDAsMCwwLC4xLjU0bDIsNS43YTEuMjcsMS4yNywwLDAsMCwxLjI3LDEsMS4yNCwxLjI0LDAsMCwwLDEuMi0uOTNsMS4yLTMuNjQsMS4yLDMuNjRhMS4yNSwxLjI1LDAsMCwwLDEuMjYuOTNBMS4yNywxLjI3LDAs''@;'; put 'put ''MCwwLDMyLDIxLjVMMzQsMTUuNzNhMS43NywxLjc3LDAsMCwwLC4wOC0uNDhBMS4wNywxLjA3LDAsMCwwLDMzLDE0LjE4WiIgZmlsbD0iI2ZmZmZmZiIvPicpLGIuQ2xyU2hhcGVTZWFyY2g9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEiIGQ9Ik0xNi4zMyw1LjA1QTEwLjk1LDEwLjk1LDAsMSwxLDUuMzksMTYsMTEsMTEsMCwwLDEsMTYuMzMsNS4wNW0wLTIuMDVhMTMsMTMsMCwxLDAsMTMsMTMsMTMsMTMsMCwwLDAtMTMtMTNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zNSwzMy4yOWwtNy4zNy03LjQyLTEuNDIsMS40MSw3LjM3LDcuNDJBMSwxLDAsMSwwLDM1LDMzLjI5WiIvPicpLGIuQ2xyU2hhcGVWaWV3Q29sdW1ucz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIgZD0iTTMxLDVINUEyLDIsMCwwLDAsMyw3VjI5YTIsMiwwLDAsMCwyLDJIMzFhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMSw1Wk0xMywyOUg1VjdoOFptMTAsMEgxNVY3aDhaIi8+JyksYi5DbHJTaGFwZUFuZ2xlRG91YmxlPSgwLHAuY2xySWNvblNWRykoJzxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjksMTkuNDFhMSwxLDAsMCwxLS43MS0uMjlMMTgsOC44Myw3LjcxLDE5LjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsNiwyOS43MSwxNy43MUExLDEsMCwwLDEsMjksMTkuNDFaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOSwzMC40MWExLDEsMCwwLDEtLjcxLS4yOUwxOCwxOS44Myw3LjcxLDMwLjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsMTcsMjkuNzEsMjguNzFBMSwxLDAsMCwxLDI5LDMwLjQx''@;'; put 'put ''WiIvPicpLGIuQ2xyU2hhcGVDYWxlbmRhcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLjI1LDZIMjlWOGgzVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43''@;'; put 'put ''OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjgiIHk9IjE0IiB3aWR0aD0i''@;'; put 'put ''MiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC00IiB4PSIyMCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMjYiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9''@;'; put 'put ''IjE0IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIi''@;'; put 'put ''IGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMSIgeD0iMTQiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTEyIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNSIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIgeD0iMTMiIHk9''@;'; put 'put ''IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMjJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAu''@;'; put 'put ''MTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTIt''@;'; put 'put ''LWJhZGdlZCIgeD0iOCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgeD0iMjAiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiB4PSIyNiIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIHg9IjgiIHk9IjE5''@;'; put 'put ''IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVj''@;'; put 'put ''dCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQiIHg9IjIwIiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTktLWJhZGdlZCIgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWJhZGdlZCIgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9''@;'; put 'put ''IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMS0tYmFkZ2VkIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYmFkZ2VkIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYmFkZ2VkIiB4''@;'; put 'put ''PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNC0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEs''@;'; put 'put ''MCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTUtLWJhZGdlZCIgZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz5cbiAgICAgICAgICAgICAgICA8''@;'; put 'put ''Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE2LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAg''@;'; put 'put ''PHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiB4PSI4IiB5PSIxOSIgd2lkdGg9IjIi''@;'; put 'put ''IGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIgeD0iMjAiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTct''@;'; put 'put ''LWFsZXJ0ZWQiIHg9IjI2IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC05LS1hbGVydGVkIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWFsZXJ0ZWQiIHg9IjIwIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMS0tYWxlcnRlZCIg''@;'; put 'put ''eD0iMjYiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUEx''@;'; put 'put ''LDEsMCwwLDAsMTAsMTBaIi8+PHBvbHlnb24gcG9pbnRzPSIyMS4yOSA2IDEzIDYgMTMgOCAyMC4xNCA4IDIxLjI5IDYiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWFsZXJ0ZWQgY2xyLWktYWxl''@;'; put 'put ''cnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuMjUsNmgtNFY5YTIuMiwyLjIsMCwxLDEtNC40LDBWNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCww''@;'; put 'put ''LDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIuMjUsNlpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVIOFYxNGgyWm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptMC01SDIwVjE0aDJabTYsMTBI''@;'; put 'put ''MjZWMjRoMlptMC01SDI2VjE5aDJabTAtNUgyNlYxNGgyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTIt''@;'; put 'put ''LWJhZGdlZCIgZD0iTTMwLDEzLjVBNy41LDcuNSwwLDAsMSwyMi41LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcu''@;'; put 'put ''NDUsNy40NSwwLDAsMSwzMCwxMy41Wk0xMCwyNkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm0wLTVIMjBWMTRoMlptNiwxMEgyNlYyNGgyWm0wLTVIMjZWMTlo''@;'; put 'put ''MlptMC01SDI2VjE0aDJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEu''@;'; put 'put ''NzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4Wk0xMCwyNkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm02''@;'; put 'put ''LDVIMjZWMjRoMlptMC01SDI2VjE5aDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEw''@;'; put 'put ''WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCww''@;'; put 'put ''LDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxiLkNsclNoYXBlRXZlbnQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4xNywyNS44NiwxMC44MSwyMC41''@;'; put 'put ''YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTYuMTcsMjNsOC42NC04LjY0YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi4yNSw2SDI5VjhoM1YzMEg0VjhIN1Y2SDMuNzVB''@;'; put 'put ''MS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0zIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0yNiwxMGExLDEsMCwwLDAs''@;'; put 'put ''MS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTAuODEsMjAuNWw1LjM2LDUuMzZMMjYuMjIsMTUuODFhMSwxLDAsMCwwLTEuNDEtMS40MUwxNi4xNywyM2wtMy45NC0zLjk0YTEsMSwwLDAsMC0xLjQxLDEuNDFaIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzIsMTMuMjJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQs''@;'; put 'put ''MzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUs''@;'; put 'put ''NloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xMC44MSwyMC41bDUuMzYsNS4zNkwyNi4yMiwxNS44MWExLDEsMCwwLDAsLjIzLS40MUgyMy44TDE2LjE3LDIzbC0zLjk0LTMuOTRhMSwxLDAsMCwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgcG9pbnRzPSIyMS4yOSA2IDEzIDYgMTMgOCAyMC4xNCA4IDIxLjI5IDYiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtNC0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEEx''@;'; put 'put ''LjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTMiIGQ9Ik0zMi4yNSw2aC00VjlhMi4yLDIuMiwwLDAsMS00LjQsMFY2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3''@;'; put 'put ''LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2Wk0yNS45NCwxNi41OGwtOS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEuMzYsMCwxLDEsMS45MywxLjkzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyNi4zYTEuMzQsMS4zNCwwLDAsMS0uMzYsMS4xOGwtOS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOCw3LTdoLTFBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgx''@;'; put 'put ''Mi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''LS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwx''@;'; put 'put ''LjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMCwxMy41QTcuNSw3LjUsMCwwLDEsMjIuNSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgs''@;'; put 'put ''MCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzAsMTMuNVptLTQuMDYsMy4wOC05LjY3LDkuNjdMMTEsMjAuOTRBMS4zNiwxLjM2LDAsMCwxLDEyLjksMTlsMy4zOCwzLjM4TDI0LDE0LjY2YTEuMzYsMS4zNiwwLDEsMSwx''@;'; put 'put ''LjkzLDEuOTNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLGIuQ2xyU2hhcGVFeWU9KDAscC5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggZD0iTTMzLjYyLDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMFM1LjM0LDExLjMsMiwxNy41M0wxLjcyLDE4bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMHMxMi40Ni0zLjcyLDE1LjgyLTEwbC4yNi0uNDhaTTE3LjgsMjYuNDNDMTIuMTcsMjYuNDMsNywyMy4y''@;'; put 'put ''OSw0LDE4YzMtNS4yOSw4LjE3LTguNDMsMTMuOC04LjQzUzI4LjU0LDEyLjcyLDMxLjU5LDE4QzI4LjU0LDIzLjI5LDIzLjQyLDI2LjQzLDE3LjgsMjYuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjA5''@;'; put 'put ''LDExLjE3QTYuODYsNi44NiwwLDEsMCwyNSwxOCw2Ljg2LDYuODYsMCwwLDAsMTguMDksMTEuMTdabTAsMTEuNzJBNC44Niw0Ljg2LDAsMSwxLDIzLDE4LDQuODcsNC44NywwLDAsMSwxOC4wOSwyMi44OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjIsMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwUzUuMzQsMTEuMywyLDE3LjUzTDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4x''@;'; put 'put ''NywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5LDguMTctOC40MywxMy44LTguNDNTMjguNTQsMTIuNzIsMzEuNTksMThDMjguNTQsMjMuMjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJj''@;'; put 'put ''bGUgY3g9IjE4LjA5IiBjeT0iMTguMDMiIHI9IjYuODYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxiLkNsclNoYXBlRXllSGlkZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMTksMjAuNEE2Ljc4LDYuNzgsMCwwLDAsMjUuNjIsMThhNi44Niw2''@;'; put 'put ''Ljg2LDAsMCwwLTYuODYtNi44Niw2Ljc5LDYuNzksMCwwLDAtMi4zNy40M0wxOCwxMy4yM2E0Ljc4LDQuNzgsMCwwLDEsLjc0LS4wNkE0Ljg3LDQuODcsMCwwLDEsMjMuNjIsMThhNC43OSw0Ljc5LDAsMCwxLS4wNi43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQuMjksMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwYTE2LjgyLDE2LjgyLDAsMCwwLTUuMjQuODVMMTQuODQsMTBhMTQuNzgsMTQuNzgsMCwwLDEsMy42My0uNDdjNS42MywwLDEwLjc1LDMuMTQsMTMuOCw4LjQzYTE3Ljc1''@;'; put 'put ''LDE3Ljc1LDAsMCwxLTQuMzcsNS4xbDEuNDIsMS40MmExOS45MywxOS45MywwLDAsMCw1LTZsLjI2LS40OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41Miww''@;'; put 'put ''LDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOS43NSw5Ljc1LDYuNjUsNi42NWE0LjgxLDQuODEsMCwwLDEtMi41LjcyQTQuODcsNC44NywwLDAsMSwx''@;'; put 'put ''My45LDE4LDQuODEsNC44MSwwLDAsMSwxNC42MiwxNS41M1ptLTEuNDUtMS40NWE2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwxLjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMzcsMTEuMTdBNi43OSw2Ljc5LDAsMCwwLDE2LDExLjZsOC44LDguOEE2Ljc4LDYuNzgsMCwwLDAsMjUuMjMsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjM3LDExLjE3''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LjI5LDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMGExNi44MiwxNi44MiwwLDAsMC01LjI0Ljg1TDE0Ljg0LDEwYTE0Ljc4LDE0Ljc4LDAsMCwxLDMuNjMt''@;'; put 'put ''LjQ3YzUuNjMsMCwxMC43NSwzLjE0LDEzLjgsOC40M2ExNy43NSwxNy43NSwwLDAsMS00LjM3LDUuMWwxLjQyLDEuNDJhMTkuOTMsMTkuOTMsMCwwLDAsNS02bC4yNi0uNDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''NC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOC4zLDguM2E2Ljg1LDYuODUsMCwwLDAsOS41''@;'; put 'put ''NSw5LjU1bDEuNiwxLjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSxiLkNsclNoYXBlU3RlcEZvcndhcmQy''@;'; put 'put ''PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik03LjA4LDYuNTJhMS42OCwxLjY4LDAsMCwwLDAsMi40TDE2LjUxLDE4LDcuMTIsMjcuMDhhMS43LDEuNywwLDAsMCwyLjM2LDIuNDRoMEwyMS40LDE4LDkuNDgsNi40N0ExLjY5LDEuNjksMCwwLDAsNy4wOCw2LjUyWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI2LjQ5LDVhMS43LDEuNywwLDAsMC0xLjcsMS43VjI5LjNhMS43LDEuNywwLDAsMCwzLjQsMFY2LjdBMS43LDEuNywwLDAsMCwyNi40OSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTIiIC8+JyksYi5DbHJTaGFwZUFycm93PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy42NiwxNS42MSwxOCw2LDguMzQsMTUuNjFBMSwxLDAsMSwwLDkuNzUsMTdMMTcsOS44MVYyOC45NGExLDEsMCwxLDAsMiwwVjkuODFMMjYuMjUsMTdhMSwxLDAsMCwwLDEuNDEtMS40MloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+JyksYi5Db3JlU2hhcGVzPXsidW5rbm93bi1zdGF0dXMiOmIuQ2xyU2hhcGVVbmtub3duU3RhdHVzLGhvbWU6Yi5DbHJTaGFwZUhvbWUsY29nOmIuQ2xyU2hhcGVDb2csY2hlY2s6Yi5DbHJTaGFwZUNoZWNrLHRpbWVz''@;'; put 'put ''OmIuQ2xyU2hhcGVUaW1lcywiZXhjbGFtYXRpb24tdHJpYW5nbGUiOmIuQ2xyU2hhcGVFeGNsYW1hdGlvblRyaWFuZ2xlLCJleGNsYW1hdGlvbi1jaXJjbGUiOmIuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZSwiY2hlY2stY2lyY2xlIjpiLkNsclNoYXBlQ2hlY2tDaXJjbGUsImluZm8tY2ly''@;'; put 'put ''Y2xlIjpiLkNsclNoYXBlSW5mb0NpcmNsZSwiaW5mby1zdGFuZGFyZCI6Yi5DbHJTaGFwZUluZm9TdGFuZGFyZCwic3VjY2Vzcy1zdGFuZGFyZCI6Yi5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZCwiZXJyb3Itc3RhbmRhcmQiOmIuQ2xyU2hhcGVFcnJvclN0YW5kYXJkLCJ3YXJuaW5nLXN0YW5k''@;'; put 'put ''YXJkIjpiLkNsclNoYXBlV2FybmluZ1N0YW5kYXJkLCJoZWxwLWluZm8iOmIuQ2xyU2hhcGVIZWxwSW5mbyxiYXJzOmIuQ2xyU2hhcGVCYXJzLHVzZXI6Yi5DbHJTaGFwZVVzZXIsYW5nbGU6Yi5DbHJTaGFwZUFuZ2xlLGZvbGRlcjpiLkNsclNoYXBlRm9sZGVyLCJmb2xkZXItb3BlbiI6Yi5D''@;'; put 'put ''bHJTaGFwZUZvbGRlck9wZW4sYmVsbDpiLkNsclNoYXBlQmVsbCxpbWFnZTpiLkNsclNoYXBlSW1hZ2UsY2xvdWQ6Yi5DbHJTaGFwZUNsb3VkLCJlbGxpcHNpcy1ob3Jpem9udGFsIjpiLkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsLCJlbGxpcHNpcy12ZXJ0aWNhbCI6Yi5DbHJTaGFwZUVs''@;'; put 'put ''bGlwc2lzVmVydGljYWwsImZpbHRlci1ncmlkIjpiLkNsclNoYXBlRmlsdGVyR3JpZCwiZmlsdGVyLWdyaWQtY2lyY2xlIjpiLkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZSwidm0tYnVnIjpiLkNsclNoYXBlVm1CdWcsc2VhcmNoOmIuQ2xyU2hhcGVTZWFyY2gsInZpZXctY29sdW1ucyI6Yi5D''@;'; put 'put ''bHJTaGFwZVZpZXdDb2x1bW5zLCJhbmdsZS1kb3VibGUiOmIuQ2xyU2hhcGVBbmdsZURvdWJsZSxjYWxlbmRhcjpiLkNsclNoYXBlQ2FsZW5kYXIsZXZlbnQ6Yi5DbHJTaGFwZUV2ZW50LGV5ZTpiLkNsclNoYXBlRXllLCJleWUtaGlkZSI6Yi5DbHJTaGFwZUV5ZUhpZGUsInN0ZXAtZm9yd2Fy''@;'; put 'put ''ZC0yIjpiLkNsclNoYXBlU3RlcEZvcndhcmQyLGFycm93OmIuQ2xyU2hhcGVBcnJvd30sT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuQ29yZVNoYXBlcywiaG91c2UiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Db3JlU2hhcGVzLmhvbWUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3Jl''@;'; put 'put ''U2hhcGVzLCJzZXR0aW5ncyIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXMuY29nKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuQ29yZVNoYXBlcywic3VjY2VzcyIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXMuY2hlY2spKSxPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkoYi5Db3JlU2hhcGVzLCJjbG9zZSIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXMudGltZXMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJ3YXJuaW5nIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24t''@;'; put 'put ''dHJpYW5nbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkNvcmVTaGFwZXMsImVycm9yIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJpbmZvIiwoMCxfLmRl''@;'; put 'put ''c2NyaXB0b3JDb25maWcpKGIuQ29yZVNoYXBlc1siaW5mby1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkNvcmVTaGFwZXMsIm1lbnUiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Db3JlU2hhcGVzLmJhcnMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVz''@;'; put 'put ''LCJhdmF0YXIiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Db3JlU2hhcGVzLnVzZXIpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJjYXJldCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXMuYW5nbGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5D''@;'; put 'put ''b3JlU2hhcGVzLCJkaXJlY3RvcnkiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Db3JlU2hhcGVzLmZvbGRlcikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkNvcmVTaGFwZXMsIm5vdGlmaWNhdGlvbiIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXMuYmVsbCkpLE9iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShiLkNvcmVTaGFwZXMsImNvbGxhcHNlIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuQ29yZVNoYXBlc1siYW5nbGUtZG91YmxlIl0pKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9lc3NlbnRpYWwtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9lc3NlbnRpYWwtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgsYixJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGIuQ2xyU2hhcGVMb2dvdXQ9Yi5DbHJTaGFw''@;'; put 'put ''ZUxvZ2luPWIuQ2xyU2hhcGVIZWxwPWIuQ2xyU2hhcGVDb3B5PWIuQ2xyU2hhcGVDaGlsZEFycm93PWIuQ2xyU2hhcGVDaXJjbGVBcnJvdz1iLkNsclNoYXBlQWxhcm1DbG9jaz1iLkNsclNoYXBlQ2xvY2s9Yi5DbHJTaGFwZUhpc3Rvcnk9Yi5DbHJTaGFwZVRhZ3M9Yi5DbHJTaGFwZVRhZz1i''@;'; put 'put ''LkNsclNoYXBlVHJhc2g9Yi5DbHJTaGFwZVRpbWVzQ2lyY2xlPWIuQ2xyU2hhcGVCYW49Yi5DbHJTaGFwZVBsdXNDaXJjbGU9Yi5DbHJTaGFwZU1pbnVzQ2lyY2xlPWIuQ2xyU2hhcGVNaW51cz1iLkNsclNoYXBlUGx1cz1iLkNsclNoYXBlRmlsZT1iLkNsclNoYXBlUGluPWIuQ2xyU2hhcGVG''@;'; put 'put ''aWx0ZXI9Yi5DbHJTaGFwZVBvcE91dD1iLkNsclNoYXBlVXNlcnM9Yi5DbHJTaGFwZVVubG9jaz1iLkNsclNoYXBlTG9jaz1iLkNsclNoYXBlVXBsb2FkPWIuQ2xyU2hhcGVEb3dubG9hZD1iLkNsclNoYXBlTGlnaHRidWxiPWIuQ2xyU2hhcGVWaWV3Q2FyZHM9Yi5DbHJTaGFwZVZpZXdMaXN0''@;'; put 'put ''PWIuQ2xyU2hhcGVTeW5jPWIuQ2xyU2hhcGVSZWZyZXNoPWIuQ2xyU2hhcGVOb3RlPWIuQ2xyU2hhcGVQZW5jaWw9Yi5DbHJTaGFwZVRoZXJtb21ldGVyPWIuQ2xyU2hhcGVCdWc9Yi5DbHJTaGFwZVNjaXNzb3JzPWIuQ2xyU2hhcGVBc3Rlcmlzaz1iLkNsclNoYXBlQm9vaz1iLkNsclNoYXBl''@;'; put 'put ''T2JqZWN0cz1iLkNsclNoYXBlUmVzaXplPWIuQ2xyU2hhcGVDdXJzb3JIYW5kQ2xpY2s9Yi5DbHJTaGFwZUN1cnNvckhhbmQ9Yi5DbHJTaGFwZUN1cnNvckFycm93PWIuQ2xyU2hhcGVHcmlkVmlldz1iLkNsclNoYXBlQnViYmxlRXhjbGFtYXRpb249Yi5DbHJTaGFwZU5ldz1iLkNsclNoYXBl''@;'; put 'put ''QWxhcm1PZmY9Yi5DbHJTaGFwZVBpbmJvYXJkPWIuQ2xyU2hhcGVBZGRUZXh0PXZvaWQgMCxiLkNsclNoYXBlQ2xvbmU9Yi5DbHJTaGFwZUN1cnNvck1vdmU9Yi5DbHJTaGFwZVdhbmQ9Yi5DbHJTaGFwZVN1bj1iLkNsclNoYXBlTW9vbj1iLkNsclNoYXBlRmlsdGVyMj1iLkNsclNoYXBlRHJh''@;'; put 'put ''Z0hhbmRsZT1iLkNsclNoYXBlQ29weVRvQ2xpcGJvYXJkPWIuQ2xyU2hhcGVDb2xvclBpY2tlcj1iLkNsclNoYXBlQnJpZWZjYXNlPWIuQ2xyU2hhcGVFeHBhbmRDYXJkPWIuQ2xyU2hhcGVDb2xsYXBzZUNhcmQ9Yi5DbHJTaGFwZVNvcnRCeT1iLkNsclNoYXBlQWNjZXNzaWJpbGl0eTI9Yi5D''@;'; put 'put ''bHJTaGFwZUFjY2Vzc2liaWxpdHkxPWIuQ2xyU2hhcGVTaHJpbms9Yi5DbHJTaGFwZVBhcGVyY2xpcD1iLkNsclNoYXBlRmlsZUdyb3VwPWIuQ2xyU2hhcGVSZXBlYXQ9Yi5DbHJTaGFwZUlkQmFkZ2U9Yi5DbHJTaGFwZUJhbGFuY2U9Yi5DbHJTaGFwZU9yZ2FuaXphdGlvbj1iLkNsclNoYXBl''@;'; put 'put ''Tm9BY2Nlc3M9Yi5DbHJTaGFwZUhvdXJnbGFzcz1iLkNsclNoYXBlRmxhbWU9Yi5DbHJTaGFwZVRhcmdldD1iLkNsclNoYXBlQnVsbHNleWU9Yi5DbHJTaGFwZVdyZW5jaD1iLkNsclNoYXBlQm9sdD1iLkNsclNoYXBlTGlicmFyeT1iLkNsclNoYXBlS2V5PWIuQ2xyU2hhcGVab29tT3V0PWIu''@;'; put 'put ''Q2xyU2hhcGVab29tSW49Yi5DbHJTaGFwZVdpbmRvd1Jlc3RvcmU9Yi5DbHJTaGFwZVdpbmRvd01pbj1iLkNsclNoYXBlV2luZG93TWF4PWIuQ2xyU2hhcGVXaW5kb3dDbG9zZT1iLkNsclNoYXBlVG9vbHM9Yi5DbHJTaGFwZVN3aXRjaD1iLkNsclNoYXBlVHdvV2F5QXJyb3dzPWIuQ2xyU2hh''@;'; put 'put ''cGVGaWxlU2V0dGluZ3M9Yi5DbHJTaGFwZVNjcm9sbD1iLkNsclNoYXBlVW5kbz1iLkNsclNoYXBlUmVkbz1iLkNsclNoYXBlTGlzdD1iLkNsclNoYXBlRmlyZXdhbGw9Yi5DbHJTaGFwZUNsaXBib2FyZD1iLkNsclNoYXBlU2xpZGVyPWIuQ2xyU2hhcGVXb3JsZD1iLkNsclNoYXBlUHJpbnRl''@;'; put 'put ''cj12b2lkIDAsYi5Fc3NlbnRpYWxTaGFwZXM9Yi5DbHJTaGFwZUNvbG9yUGFsZXR0ZT1iLkNsclNoYXBlRmlyc3RBaWQ9Yi5DbHJTaGFwZUJldGE9Yi5DbHJTaGFwZURvdENpcmNsZT1iLkNsclNoYXBlQ2lyY2xlPWIuQ2xyU2hhcGVDcm9zc2hhaXJzPWIuQ2xyU2hhcGVWb2x1bWU9Yi5DbHJT''@;'; put 'put ''aGFwZVRhYmxlPWIuQ2xyU2hhcGVTbm93Zmxha2U9Yi5DbHJTaGFwZUZ1ZWw9Yi5DbHJTaGFwZUZvcm09Yi5DbHJTaGFwZUZpc2g9Yi5DbHJTaGFwZVRyZWU9Yi5DbHJTaGFwZVJlY3ljbGU9Yi5DbHJTaGFwZUZpbHRlck9mZj1iLkNsclNoYXBlRmlsZVppcD1iLkNsclNoYXBlQ3Vyc29ySGFu''@;'; put 'put ''ZE9wZW49Yi5DbHJTaGFwZUN1cnNvckhhbmRHcmFiPWIuQ2xyU2hhcGVUcmVlVmlldz1iLkNsclNoYXBlUG9ydHJhaXQ9Yi5DbHJTaGFwZVBhc3RlPWIuQ2xyU2hhcGVMYW5kc2NhcGU9Yi5DbHJTaGFwZUVyYXNlcj1iLkNsclNoYXBlRHJhZ0hhbmRsZUNvcm5lcj1iLkNsclNoYXBlRGV0YWls''@;'; put 'put ''cz12b2lkIDA7dmFyIF89SSgKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLHA9SSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91''@;'; put 'put ''dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpLFY9SSgKLyohIC4vY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyIpO2IuQ2xyU2hhcGVBZGRUZXh0PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsMjFIMTNhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xMiwxNmExLDEsMCwwLDAsMSwxSDMxYTEsMSwwLDAs''@;'; put 'put ''MCwwLTJIMTNBMSwxLDAsMCwwLDEyLDE2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yNywyN0gxM2ExLDEsMCwwLDAsMCwySDI3YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTE1Ljg5LDlhMSwxLDAsMCwwLTEtMUgxMFYzLjIxYTEsMSwwLDAsMC0yLDBWOEgyLjg5YTEsMSwwLDAsMCwwLDJIOHY1LjIxYTEsMSwwLDAsMCwyLDBWMTBoNC44OUExLDEsMCwwLDAsMTUuODksOVoiLz4nKSxiLkNsclNo''@;'; put 'put ''YXBlUGluYm9hcmQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMCwzMCw2LDMwLDYsNkgyMlY0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTRIMzBaIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMzLjU3LDkuMzNsLTctN2ExLDEsMCwwLDAtMS40MSwxLjQxbDcsN2ExLDEsMCwxLDAsMS40MS0xLjQxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMi4xLDExLjE5bC43LjVMMjYuNDYsOCwyNSw2LjU2LDIyLjUxLDkuMTNjLTItLjg3LTQuMzUuMTQtNS45MiwxLjY4bC0uNzIuNzEsMy41NCwzLjU0LTMuNjcsMy42NywxLjQxLDEuNDEsMy42Ny0zLjY3TDI0LjM3LDIwbC43MS0uNzJjMS41''@;'; put 'put ''NC0xLjU3LDIuNTUtMy45MiwxLjY4LTUuOTNsMi41NC0yLjU3TDI3Ljg4LDkuMzgsMjQuMjEsMTMuMWwuNDkuNjljLjc2LDEsLjI1LDIuMzctLjQxLDMuMzNMMTguNzcsMTEuNkMxOS44NCwxMC44NiwyMS4xNSwxMC41LDIyLjEsMTEuMTlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsMzAsNiwzMCw2LDZIMjJWNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE0SDMwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMiIgZD0iTTMzLjU3LDkuMzNsLTctN2ExLDEsMCwwLDAtMS40MSwxLjQxbDEuMzgsMS4zOC00LDRjLTItLjg3LTQuMzUuMTQtNS45MiwxLjY4bC0uNzIuNzEsMy41NCwzLjU0LTMuNjcsMy42NywxLjQxLDEuNDEsMy42Ny0zLjY3TDI0LjM3LDIwbC43MS0uNzJjMS41NC0xLjU3LDIu''@;'; put 'put ''NTUtMy45MSwxLjY4LTUuOTJsNC00LDEuMzgsMS4zOGExLDEsMCwxLDAsMS40MS0xLjQxWiIvPicpLGIuQ2xyU2hhcGVBbGFybU9mZj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLjQ3LDMuODRhNS43OCw1''@;'; put 'put ''Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2LjA4LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43MywwLDAsMCwzMS40NywzLjg0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNS4zMywyMS41NGEuOS45LDAsMCww''@;'; put 'put ''LS40MS0xLjJsLTMuMi0xLjU2TDI0Ljg5LDIyQS44OS44OSwwLDAsMCwyNS4zMywyMS41NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsOC42YS45LjksMCwwLDAtLjkuOXY0LjZsMS44LDEuODFWOS41QS45''@;'; put 'put ''LjksMCwwLDAsMTgsOC42WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0xMS40MiwzLjQzYTUuOCw1LjgsMCwwLDAtNS44MS0uODFMOC4zLDUuMzJBMTYsMTYsMCwwLDEsMTEuNDIsMy40M1oiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNMTgsNGExMy45MSwxMy45MSwwLDAsMC04LjMsMi43NWwxLjQyLDEuNDNBMTIsMTIsMCwwLDEsMjcuODIsMjQuOWwxLjQyLDEuNDNBMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiBkPSJNMS41Niw0LjIxLDIuNzMsNS4zOGE1LjcsNS43LDAsMCwwLC42Nyw2LjFBMTUuNzgsMTUuNzgsMCwwLDEsNS40Niw4LjEyTDYuODgsOS41NUExMy45NCwxMy45NCwwLDAsMCw4LjExLDI3Ljg4TDUu''@;'; put 'put ''NTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjg5LDEzLjg5LDAsMCwwLDE2LjgsMGw0LjE0LDQuMTVMMzIsMzEuOSwzLDIuOFpNMjUsMjcuNzJBMTEuODksMTEuODksMCwwLDEsMTgsMzAsMTIsMTIsMCwwLDEsNiwxOGExMS44OSwxMS44OSwwLDAsMSwyLjI5LTdaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzEuNDcsMy44NGE1Ljc4LDUuNzgsMCwwLDAtNy4zNy0uNjMsMTYuMDgsMTYuMDgsMCwwLDEsOC4yLDcuNjVBNS43Myw1LjczLDAsMCwwLDMxLjQ3LDMuODRaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTEuNDIsMy40M2E1LjgsNS44LDAsMCwwLTUuNzctLjgyTDguMzMsNS4zQTE2LDE2LDAsMCwxLDExLjQyLDMuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0zIiBkPSJNMjQuOTIsMjEuOTRsNC4zNCw0LjM2QTE0LDE0LDAsMCwwLDkuNzUsNi43M0wxNywxNFY5LjY5YTEsMSwwLDAsMSwyLDBWMTZsMi4zMywyLjM0TDI1LDIwLjFhMSwxLDAsMCwxLC40NywxLjMzQTEsMSwwLDAsMSwyNC45MiwyMS45NFoiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0xLjYxLDQuMjEsMi43Myw1LjM0YTUuNzMsNS43MywwLDAsMCwuNjcsNi4xNUExNS44OCwxNS44OCwwLDAsMSw1LjQ4LDguMUw2LjkxLDkuNTJBMTMuOTQsMTMuOTQsMCwwLDAsOC4xMSwyNy44OEw1''@;'; put 'put ''LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy44OSwxMy44OSwwLDAsMCwxNi44MywwbDQuMTYsNC4xN0wzMiwzMS45LDMsMi44WiIvPicpLGIuQ2xyU2hhcGVOZXc9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEiIGQ9Ik0zNC41OSwyM2wtNC4wOC01LDQtNC45YTEuODIsMS44MiwwLDAsMCwuMjMtMS45NEExLjkzLDEuOTMsMCwwLDAsMzIuOTQsMTBoLTMxQTEuOTEsMS45MSwwLDAsMCwwLDExLjg4VjI0LjEzQTEuOTEsMS45MSwwLDAsMCwxLjk0LDI2SDMzLjA1YTEuOTMsMS45MywwLDAs''@;'; put 'put ''MCwxLjc3LTEuMDlBMS44MiwxLjgyLDAsMCwwLDM0LjU5LDIzWk0yLDI0VjEySDMyLjc4bC00Ljg0LDUuOTNMMzIuODUsMjRaIi8+XG4gICAgICAgICAgICA8cG9seWdvbiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHBvaW50cz0iOS4zOSAxOS4zNSA2LjEz''@;'; put 'put ''IDE1IDUgMTUgNSAyMS4xOCA2LjEzIDIxLjE4IDYuMTMgMTYuODQgOS4zOSAyMS4xOCAxMC41MSAyMS4xOCAxMC41MSAxNSA5LjM5IDE1IDkuMzkgMTkuMzUiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgcG9pbnRz''@;'; put 'put ''PSIxMi4xOCAyMS4xOCAxNi44NCAyMS4xOCAxNi44NCAyMC4xNiAxMy4zMSAyMC4xNiAxMy4zMSAxOC41NSAxNi41IDE4LjU1IDE2LjUgMTcuNTIgMTMuMzEgMTcuNTIgMTMuMzEgMTYuMDMgMTYuODQgMTYuMDMgMTYuODQgMTUgMTIuMTggMTUgMTIuMTggMjEuMTgiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwb2x5Z29uICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgcG9pbnRzPSIyNC41MiAxOS40MyAyMy4wNiAxNSAyMS44NCAxNSAyMC4zNyAxOS40MyAxOS4wNSAxNSAxNy44MiAxNSAxOS43OCAyMS4xOCAyMC44OSAyMS4xOCAyMi40NSAxNi41OSAyNCAyMS4x''@;'; put 'put ''OCAyNS4xMyAyMS4xOCAyNy4wOCAxNSAyNS44NSAxNSAyNC41MiAxOS40MyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LjExLDI0LjQ5bC0zLjkyLTYuNjIsMy44OC02LjM1QTEsMSwwLDAsMCwzMy4yMiwxMEgyYTIs''@;'; put 'put ''MiwwLDAsMC0yLDJWMjRhMiwyLDAsMCwwLDIsMkgzMy4yNUExLDEsMCwwLDAsMzQuMTEsMjQuNDlabS0yMy42LTMuMzFIOS4zOUw2LjEzLDE2Ljg0djQuMzVINVYxNUg2LjEzbDMuMjcsNC4zNVYxNWgxLjEyWk0xNi44NCwxNkgxMy4zMXYxLjQ5aDMuMnYxaC0zLjJ2MS42MWgzLjUzdjFIMTIu''@;'; put 'put ''MThWMTVoNC42NVptOC4yOSw1LjE2SDI0bC0xLjU1LTQuNTlMMjAuOSwyMS4xOEgxOS43OGwtMi02LjE4SDE5bDEuMzIsNC40M0wyMS44NCwxNWgxLjIybDEuNDYsNC40M0wyNS44NSwxNWgxLjIzWiIvPicpLGIuQ2xyU2hhcGVCdWJibGVFeGNsYW1hdGlvbj0oMCxwLmNsckljb25TVkcpKCc8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0''@;'; put 'put ''LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wk0yOC4yOSwyNC42MWExLDEsMCwwLDAtLjMyLjczbDAsNS4zNC00LjM4LTIuNzlhMSwxLDAsMCwwLS44My0uMTFBMTYsMTYsMCwwLDEsMTgsMjguNWMtNy43MiwwLTE0LTUuMzgtMTQtMTJzNi4yOC0xMiwxNC0xMiwxNCw1LjM4LDE0LDEy''@;'; put 'put ''QTExLjA4LDExLjA4LDAsMCwxLDI4LjI5LDI0LjYxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMC42M2ExLDEsMCwwLDAsMS0xVjguNDhhMSwxLDAsMSwwLTIsMFYxOS42MUExLDEsMCwwLDAsMTgsMjAu''@;'; put 'put ''NjNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBjeD0iMTgiIGN5PSIyNC4wNCIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4''@;'; put 'put ''LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wk0xNi45Myw5LjEzYTEuNDEsMS40MSww''@;'; put 'put ''LDEsMSwyLjgxLDBWMTguOWExLjQxLDEuNDEsMCwxLDEtMi44MSwwWm0xLjQxLDE3LjM1YTEuODcsMS44NywwLDEsMSwxLjg3LTEuODdBMS44NywxLjg3LDAsMCwxLDE4LjM0LDI2LjQ3WiIvPicpLGIuQ2xyU2hhcGVHcmlkVmlldz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE0LDRINkEyLDIsMCwwLDAsNCw2djhhMiwyLDAsMCwwLDIsMmg4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMTQsNFpNNiwxNFY2aDh2OFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAsNEgyMmEyLDIsMCwwLDAtMiwydjhhMiwyLDAsMCwwLDIsMmg4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMjIsMTRWNmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMyIgZD0iTTE0LDIwSDZhMiwyLDAsMCwwLTIsMnY4YTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0yVjIyQTIsMiwwLDAsMCwxNCwyMFpNNiwzMFYyMmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIg''@;'; put 'put ''ZD0iTTMwLDIwSDIyYTIsMiwwLDAsMC0yLDJ2OGEyLDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYyMkEyLDIsMCwwLDAsMzAsMjBaTTIyLDMwVjIyaDh2OFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHg9IjQiIHk9IjQi''@;'; put 'put ''IHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjIiIHJ5PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiB4PSIyMCIgeT0iNCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiByeD0iMiIgcnk9IjIiLz5cbiAgICAgICAgICAgIDxy''@;'; put 'put ''ZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIHg9IjQiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHJ4PSIyIiByeT0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgeD0iMjAiIHk9IjIw''@;'; put 'put ''IiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHJ4PSIyIiByeT0iMiIvPicpLGIuQ2xyU2hhcGVDdXJzb3JBcnJvdz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE0LjU4LDMyLjMxYTEsMSwwLDAsMS0uOTQtLjY1''@;'; put 'put ''TDQsNS42NUExLDEsMCwwLDEsNS4yNSw0LjM3bDI2LDkuNjhhMSwxLDAsMCwxLS4wNSwxLjg5bC04LjM2LDIuNTcsOC4zLDguM2ExLDEsMCwwLDEsMCwxLjQxbC0zLjI2LDMuMjZhMSwxLDAsMCwxLS43MS4yOWgwYTEsMSwwLDAsMS0uNzEtLjI5bC04LjMzLTguMzMtMi42LDguNDVhMSwxLDAs''@;'; put 'put ''MCwxLS45My43MVptMy4wOS0xMmExLDEsMCwwLDEsLjcxLjI5bDguNzksOC43OUwyOSwyNy41MWwtOC43Ni04Ljc2YTEsMSwwLDAsMSwuNDEtMS42Nmw3LjEzLTIuMkw2LjYsN2w3Ljg5LDIxLjJMMTYuNzEsMjFhMSwxLDAsMCwxLC43MS0uNjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjksMTIuMzYsMy44OCwzQTEsMSwwLDAsMCwyLjU5LDQuMjhMMTIsMjkuNDRhMSwxLDAsMCwwLDEuODktLjA1bDIuNjktOC43NSw5LjEyLDguOWExLDEsMCwwLDAsMS40MSwwbDIuMzUtMi4zNWExLDEsMCwwLDAsMC0xLjQx''@;'; put 'put ''bC05LjA5LTguODZMMjksMTQuMjVBMSwxLDAsMCwwLDI5LDEyLjM2WiIvPicpLGIuQ2xyU2hhcGVDdXJzb3JIYW5kPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAuNzQsMTUuMTlhMTMuNjYsMTMuNjYsMCww''@;'; put 'put ''LDAtNi44Ny0zLjgzQTI2LDI2LDAsMCwwLDE4LDEwLjU4VjUuMjhBMy40LDMuNCwwLDAsMCwxNC41LDIsMy40LDMuNCwwLDAsMCwxMSw1LjI4djEwTDkuNCwxMy43YTMuNzcsMy43NywwLDAsMC01LjI4LDBBMy42NywzLjY3LDAsMCwwLDMsMTYuMzNhMy42LDMuNiwwLDAsMCwxLDIuNTZsNC42''@;'; put 'put ''Niw1LjUyYTExLjUzLDExLjUzLDAsMCwwLDEuNDMsNCwxMC4xMiwxMC4xMiwwLDAsMCwyLDIuNTR2MS45MmExLjA3LDEuMDcsMCwwLDAsMSwxLjA4SDI3YTEuMDcsMS4wNywwLDAsMCwxLTEuMDh2LTIuN2ExMi44MSwxMi44MSwwLDAsMCwzLTguMzZ2LTZBMSwxLDAsMCwwLDMwLjc0LDE1LjE5''@;'; put 'put ''Wk0yOSwyMS44NmExMC43MiwxMC43MiwwLDAsMS0yLjYsNy4yNiwxLjExLDEuMTEsMCwwLDAtLjQuNzJWMzJIMTQuMTRWMzAuNTJhMSwxLDAsMCwwLS40NC0uODMsNy4yNiw3LjI2LDAsMCwxLTEuODItMi4yMyw5LjE0LDkuMTQsMCwwLDEtMS4yLTMuNTIsMSwxLDAsMCwwLS4yMy0uNTlMNS41''@;'; put 'put ''MywxNy41M2ExLjcsMS43LDAsMCwxLDAtMi40MiwxLjc2LDEuNzYsMCwwLDEsMi40NywwbDMsM3YzLjE0bDItMVY1LjI4QTEuNDIsMS40MiwwLDAsMSwxNC41LDQsMS40MiwxLjQyLDAsMCwxLDE2LDUuMjh2MTEuOGwyLC40M1YxMi41OWEyNC4yNywyNC4yNywwLDAsMSwyLjUxLjE4VjE4bDEu''@;'; put 'put ''Ni4zNVYxM2MuNDEuMDguODMuMTcsMS4yNi4yOGExNC44OCwxNC44OCwwLDAsMSwxLjUzLjQ5djUuMTVsMS42LjM1VjE0LjVBMTEuMDYsMTEuMDYsMCwwLDEsMjksMTYuMjNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJN''@;'; put 'put ''MjguNjksMTQuMzN2NC44M2wtMi0uNDNWMTMuMjRhMTYuMTksMTYuMTksMCwwLDAtMi4zMy0uODR2NS44MmwtMi0uNDNWMTJjLTEuMS0uMTgtMi4xOC0uMy0zLjA4LS4zNnY1LjUxbC0yLS40M1YxMS40OGgwVjQuMzRhMi41MywyLjUzLDAsMCwwLTIuNi0yLjQzLDIuNTMsMi41MywwLDAsMC0y''@;'; put 'put ''LjYsMi40M1YxNy4yN2gwdjIuNTlsLTIsMVYxNS42TDcuNzUsMTMuMjFhMi44MywyLjgzLDAsMCwwLTQsMCwyLjkzLDIuOTMsMCwwLDAsMCw0LjA5bDYsNy4xYTEwLjgyLDEwLjgyLDAsMCwwLDEuMzksNC4yMiw4LjQyLDguNDIsMCwwLDAsMi4yMSwyLjczdjIuNTZIMjcuNzlWMzAuNjJhMTIu''@;'; put 'put ''NTQsMTIuNTQsMCwwLDAsMy04LjV2LTZBMTAsMTAsMCwwLDAsMjguNjksMTQuMzNaIi8+JyksYi5DbHJTaGFwZUN1cnNvckhhbmRDbGljaz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLjQsMTcuNmMtMS44''@;'; put 'put ''LTEuOS00LjItMy4yLTYuNy0zLjdjLTEuMS0wLjMtMi4yLTAuNS0zLjMtMC42YzIuOC0zLjMsMi4zLTguMy0xLTExLjFzLTguMy0yLjMtMTEuMSwxcy0yLjMsOC4zLDEsMTEuMVxuICAgICAgICAgICAgICAgICAgICBjMC42LDAuNSwxLjIsMC45LDEuOCwxLjF2Mi4ybC0xLjYtMS41Yy0xLjQt''@;'; put 'put ''MS40LTMuNy0xLjQtNS4yLDBjLTEuNCwxLjQtMS41LDMuNi0wLjEsNWw0LjYsNS40YzAuMiwxLjQsMC43LDIuNywxLjQsMy45XG4gICAgICAgICAgICAgICAgICAgIGMwLjUsMC45LDEuMiwxLjgsMS45LDIuNXYxLjljMCwwLjYsMC40LDEsMSwxaDEzLjZjMC41LDAsMS0wLjUsMS0xdi0yLjZj''@;'; put 'put ''MS45LTIuMywyLjktNS4yLDIuOS04LjF2LTUuOFxuICAgICAgICAgICAgICAgICAgICBDMzAuNywxNy45LDMwLjYsMTcuNywzMC40LDE3LjZ6IE04LjQsOC4yYzAtMy4zLDIuNy01LjksNi01LjhjMy4zLDAsNS45LDIuNyw1LjgsNmMwLDEuOC0wLjgsMy40LTIuMiw0LjVWNy45XG4gICAgICAg''@;'; put 'put ''ICAgICAgICAgICAgIGMtMC4xLTEuOC0xLjYtMy4yLTMuNC0zLjJjLTEuOC0wLjEtMy40LDEuNC0zLjQsMy4ydjUuMkM5LjUsMTIuMSw4LjUsMTAuMiw4LjQsOC4yTDguNCw4LjJ6IE0yOC43LDI0YzAuMSwyLjYtMC44LDUuMS0yLjUsNy4xXG4gICAgICAgICAgICAgICAgICAgIGMtMC4yLDAu''@;'; put 'put ''Mi0wLjQsMC40LTAuNCwwLjd2Mi4xSDE0LjJ2LTEuNGMwLTAuMy0wLjItMC42LTAuNC0wLjhjLTAuNy0wLjYtMS4zLTEuMy0xLjgtMi4yYy0wLjYtMS0xLTIuMi0xLjItMy40XG4gICAgICAgICAgICAgICAgICAgIGMwLTAuMi0wLjEtMC40LTAuMi0wLjZsLTQuOC01LjdjLTAuMy0wLjMtMC41''@;'; put 'put ''LTAuNy0wLjUtMS4yYzAtMC40LDAuMi0wLjksMC41LTEuMmMwLjctMC42LDEuNy0wLjYsMi40LDBsMi45LDIuOXYzbDEuOS0xVjcuOVxuICAgICAgICAgICAgICAgICAgICBjMC4xLTAuNywwLjctMS4zLDEuNS0xLjJjMC43LDAsMS40LDAuNSwxLjQsMS4ydjExLjVsMiwwLjR2LTQuNmMwLjEt''@;'; put 'put ''MC4xLDAuMi0wLjEsMC4zLTAuMmMwLjcsMCwxLjQsMC4xLDIuMSwwLjJ2NS4xbDEuNiwwLjN2LTUuMlxuICAgICAgICAgICAgICAgICAgICBsMS4yLDAuM2MwLjUsMC4xLDEsMC4zLDEuNSwwLjV2NWwxLjYsMC4zdi00LjZjMC45LDAuNCwxLjcsMSwyLjQsMS43TDI4LjcsMjR6Ii8+JyksYi5D''@;'; put 'put ''bHJTaGFwZVJlc2l6ZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LDRhMSwxLDAsMCwwLDAsMmg5LjU5bC05LjI1LDkuMjVhMSwxLDAsMSwwLDEuNDEsMS40MUwzMCw3LjQxVjE3YTEsMSwwLDAsMCwyLDBW''@;'; put 'put ''NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNNCwxOWExLDEsMCwwLDEsMiwwdjkuNTlsOS4yNS05LjI1YTEsMSwwLDEsMSwxLjQxLDEuNDFMNy40MSwzMEgxN2ExLDEsMCwwLDEsMCwySDRaIi8+JyksYi5DbHJT''@;'; put 'put ''aGFwZU9iamVjdHM9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4wOCwxNC45YTEwLjQxLDEwLjQxLDAsMCwxLDEuODctLjcxbC00LTEwLjc3YTIsMiwwLDAsMC0zLjc1LDBMMiwyNS4yNkEyLDIsMCwwLDAs''@;'; put 'put ''My45MiwyOGg2Ljk0YTEwLDEwLDAsMCwxLS41Mi0ySDMuOTJMMTIuMDYsNC4xMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIsOUgyMmEyLDIsMCwwLDAtMiwydjIuODVjLjIzLDAsLjQ2LDAsLjY5LDBBMTAu''@;'; put 'put ''NTEsMTAuNTEsMCwwLDEsMjIsMTMuOVYxMUgzMlYyMUgzMC42NWExMC40MiwxMC40MiwwLDAsMSwuNDUsMkgzMmEyLDIsMCwwLDAsMi0yVjExQTIsMiwwLDAsMCwzMiw5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9''@;'; put 'put ''Ik0yMC42OSwxNS44MWE4LjUsOC41LDAsMSwwLDguNSw4LjVBOC41MSw4LjUxLDAsMCwwLDIwLjY5LDE1LjgxWm0wLDE1YTYuNSw2LjUsMCwxLDEsNi41LTYuNUE2LjUxLDYuNTEsMCwwLDEsMjAuNjksMzAuODFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0xIiBkPSJNMTAuNjUsMjQuNDRhOS41MSw5LjUxLDAsMCwxLDcuMDYtOS4xN0wxMywzYTEsMSwwLDAsMC0xLjg3LDBMMi4wNywyNi41NkExLDEsMCwwLDAsMywyNy45Mmg4LjMyQTkuNDQsOS40NCwwLDAsMSwxMC42NSwyNC40NFoiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zMiwxMEgyMGExLDEsMCwwLDAtMSwxdjRhOS40Myw5LjQzLDAsMCwxLDEwLjYzLDlIMzJhMSwxLDAsMCwwLDEtMVYxMUExLDEsMCwwLDAsMzIsMTBaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGN4PSIyMC4xNSIgY3k9IjI0LjQ0IiByPSI3LjUiLz4nKSxiLkNsclNoYXBlQm9vaz0oMCxwLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgeD0iMTAiIHk9IjUuMiIgd2lkdGg9''@;'; put 'put ''IjE4IiBoZWlnaHQ9IjEuNTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjksOEg5Ljg2QTEuODksMS44OSwwLDAsMSw4LDYsMiwyLDAsMCwxLDkuODYsNEgyOWExLDEsMCwwLDAsMC0ySDkuODZBNCw0LDAsMCww''@;'; put 'put ''LDYsNmE0LjE0LDQuMTQsMCwwLDAsMCwuNDksMSwxLDAsMCwwLDAsLjI0VjMwYTQsNCwwLDAsMCwzLjg2LDRIMjlhMSwxLDAsMCwwLDEtMVY5LjI1czAtLjA2LDAtLjA5LDAtLjA2LDAtLjA5QTEuMDcsMS4wNywwLDAsMCwyOSw4Wk0yOCwzMkg5Ljg2QTIsMiwwLDAsMSw4LDMwVjkuNTVBMy42''@;'; put 'put ''MywzLjYzLDAsMCwwLDkuODYsMTBIMjhaIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiB4PSIxMCIgeT0iNS4yIiB3aWR0aD0iMTgiIGhlaWdodD0iMS41NSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI5LDhIOS44NkExLjg5LDEuODksMCwwLDEsOCw2LDIsMiwwLDAsMSw5Ljg2LDRIMjlhMSwxLDAsMSwwLDAtMkg5Ljg2QTQsNCwwLDAsMCw2LDZhNC4xNCw0LjE0LDAsMCwwLDAsLjQ5LDEsMSwwLDAsMCwwLC4yNFYzMGE0LDQsMCwwLDAsMy44Niw0''@;'; put 'put ''SDI5YTEsMSwwLDAsMCwxLTFWOS4yNXMwLS4wNiwwLS4wOSwwLS4wNiwwLS4wOUExLjA3LDEuMDcsMCwwLDAsMjksOFoiLz4nKSxiLkNsclNoYXBlQXN0ZXJpc2s9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0y''@;'; put 'put ''OC44OSwyMC45MWwtNS0yLjkxLDQuODctMi44NmEzLjExLDMuMTEsMCwwLDAsMS4xNC0xLjA4LDMsMywwLDAsMC00LjA5LTQuMTVMMjEsMTIuNzZWN2EzLDMsMCwwLDAtNiwwdjUuNzZMMTAuMTUsOS45MWEzLDMsMCwxLDAtMyw1LjE4bDUsMi45MUw3LjIsMjAuODZhMy4xMSwzLjExLDAsMCww''@;'; put 'put ''LTEuMTQsMS4wOCwzLDMsMCwwLDAsNC4wOSw0LjE0TDE1LDIzLjI0VjI4LjlhMywzLDAsMCwwLDIsMi45NEEzLDMsMCwwLDAsMjEsMjlWMjMuMjRsNC44NSwyLjg1YTMsMywwLDEsMCwzLTUuMThaTTI4LjI0LDI0YTEsMSwwLDAsMS0xLjM3LjM2TDE5LDE5Ljc1VjI5YTEsMSwwLDAsMS0yLDBW''@;'; put 'put ''MTkuNzVMOS4xMywyNC4zNmExLDEsMCwwLDEtMS0xLjcyTDE2LDE4bC03LjktNC42NGExLDEsMCwxLDEsMS0xLjcyTDE3LDE2LjI1VjdhMSwxLDAsMCwxLDIsMHY5LjI1bDcuODctNC42MmExLDEsMCwwLDEsMSwxLjcyTDIwLDE4bDcuOSw0LjY0QTEsMSwwLDAsMSwyOC4yNCwyNFoiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOC44OSwyMC45MWwtNS0yLjkxLDQuODctMi44NmEzLjExLDMuMTEsMCwwLDAsMS4xNC0xLjA4LDMsMywwLDAsMC00LjA5LTQuMTVMMjEsMTIuNzZWN2EzLDMsMCwwLDAtNiwwdjUuNzZM''@;'; put 'put ''MTAuMTUsOS45MWEzLDMsMCwxLDAtMyw1LjE4bDUsMi45MUw3LjIsMjAuODZhMy4xMSwzLjExLDAsMCwwLTEuMTQsMS4wOCwzLDMsMCwwLDAsNC4wOSw0LjE0TDE1LDIzLjI0VjI4LjlhMywzLDAsMCwwLDIsMi45NEEzLDMsMCwwLDAsMjEsMjlWMjMuMjRsNC44NSwyLjg1YTMsMywwLDEsMCwz''@;'; put 'put ''LTUuMThaIi8+JyksYi5DbHJTaGFwZVNjaXNzb3JzPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIlxuICAgICAgICAgICAgZD0iTTI0LjA2LDE4LjE4bDkuNjEtOC43N2ExLDEsMCwwLDAtLjA5LTEuNTVsLTIuMjQtMS42''@;'; put 'put ''YTMuNTcsMy41NywwLDAsMC00LjI4LjEyTDE1Ljg4LDE1LjNsLTMuMjYtMi41MmE1LjQ1LDUuNDUsMCwxLDAtMSwxLjc3bDIuNjIsMkwxMCwyMGE1LjQ4LDUuNDgsMCwxLDAsMS41OSwxLjI5TDI4LjMsNy45NGExLjU3LDEuNTcsMCwwLDEsMS44OC0uMDVsMS4yMy44OEwyMS4xLDE4LjE5bDEw''@;'; put 'put ''LjMxLDkuNC0xLjIzLjg4YTEuNTcsMS41NywwLDAsMS0xLjg4LS4wNWwtOS44MS03Ljg1TDE3LDIxLjkzbDEwLjA2LDhhMy41NywzLjU3LDAsMCwwLDQuMjkuMTJsMi4yNC0xLjZhMSwxLDAsMCwwLC4wOS0xLjU1Wk03LjQ1LDE0LjU0YTMuNDYsMy40NiwwLDEsMSwzLjQ1LTMuNDZBMy40Niwz''@;'; put 'put ''LjQ2LDAsMCwxLDcuNDUsMTQuNTRabTAsMTMuNzJBMy40NiwzLjQ2LDAsMSwxLDEwLjksMjQuOCwzLjQ2LDMuNDYsMCwwLDEsNy40NSwyOC4yNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMy44MSw4LjEzLDMxLjYz''@;'; put 'put ''LDYuNDhhMS45MiwxLjkyLDAsMCwwLTIuMzYsMEwxMCwyMi4wNmE1LjQ2LDUuNDYsMCwxLDAsMiwxLjgxbDMuOS0zLjEyTDI5LjI3LDMxLjUyYTEuOTIsMS45MiwwLDAsMCwyLjM2LDBsMi4xOC0xLjY0TDIwLjk0LDE5Wk03LjQ1LDI5Ljc1YTIuODYsMi44NiwwLDEsMSwyLjg2LTIuODZBMi44''@;'; put 'put ''NywyLjg3LDAsMCwxLDcuNDUsMjkuNzVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTQuMywxNS4yNCwxMiwxMy4zOGE1LjQ2LDUuNDYsMCwxLDAtMiwxLjgxTDEyLjE2LDE3Wm0tNi44NS0yYTIuODYsMi44NiwwLDEs''@;'; put 'put ''MSwyLjg2LTIuODZBMi44NiwyLjg2LDAsMCwxLDcuNDUsMTMuMjNaIi8+JyksYi5DbHJTaGFwZUJ1Zz0oMCxwLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMjMuNTYiIGN5PSIxNy43NCIgcj0iMS45NSIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjIyLjQyIiBjeT0iMjUuODgiIHI9IjEuNTgiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGN4PSIxMi44''@;'; put 'put ''NiIgY3k9IjE3Ljc0IiByPSIxLjk1Ii8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBjeD0iMTMuOTkiIGN5PSIyNS44OCIgcj0iMS41OCIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0zMC44MywyMEgyOWExOS4yOSwxOS4yOSwwLDAsMC0xLjE4LTUuNzNsMS40Ni0uNzlhMSwxLDAsMCwwLS45NS0xLjc2bC0zLDEuNjRBMTcuNjUsMTcuNjUsMCwwLDEsMjcsMjAuNzJDMjcsMjcsMjMuOCwzMS4yMywxOC44LDMxLjYyVjE1SDE3LjJWMzEu''@;'; put 'put ''NjJDMTIuMjIsMzEuMjEsOSwyNyw5LDIwLjcyYTE3Ljc0LDE3Ljc0LDAsMCwxLDEuNzMtNy4zNEw3LjcsMTEuNzJhMSwxLDAsMCwwLS45NSwxLjc2bDEuNS44QTE5LjM4LDE5LjM4LDAsMCwwLDcuMDcsMjBINS4xN2ExLDEsMCwwLDAsMCwySDcuMWExNC42MiwxNC42MiwwLDAsMCwxLjY2LDYu''@;'; put 'put ''MTdMNi44NywyOS40OUExLDEsMCwxLDAsOCwzMS4xMmwxLjg0LTEuMjlBMTAuMzgsMTAuMzgsMCwwLDAsMTgsMzMuNjZhMTAuMzgsMTAuMzgsMCwwLDAsOC4xNC0zLjgxTDI4LDMxLjEyYTEsMSwwLDEsMCwxLjE1LTEuNjRsLTEuODYtMS4zQTE0LjYxLDE0LjYxLDAsMCwwLDI4Ljk0LDIyaDEu''@;'; put 'put ''ODlhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiBkPSJNMTEuNTEsNS4zNmExLjY3LDEuNjcsMCwwLDAsMS4wNy0uNTFBMy4yMSwzLjIxLDAsMCwxLDEzLjc2LDZhMTYuMzgsMTYuMzgsMCwwLDAt''@;'; put 'put ''Mi42NSwyLjg5LDIsMiwwLDAsMCwxLjYxLDMuMTlIMjMuMzJBMiwyLDAsMCwwLDI1LjEsMTFhMiwyLDAsMCwwLS4xNy0yLjFBMTYuMzQsMTYuMzQsMCwwLDAsMjIuMjUsNmEzLjIxLDMuMjEsMCwwLDEsMS4xNy0xLjExQTEuNjgsMS42OCwwLDEsMCwyMywzLjI3LDQuNzcsNC43NywwLDAsMCwy''@;'; put 'put ''MSw1YTUuODEsNS44MSwwLDAsMC0yLjkzLTEsNS44Myw1LjgzLDAsMCwwLTMsMUE0Ljc3LDQuNzcsMCwwLDAsMTMsMy4yN2ExLjY4LDEuNjgsMCwxLDAtMS40OSwyLjA5Wk0xOCw2LjA3YzEuNDUsMCwzLjUzLDEuNTcsNS4zMSw0aDBsLTEwLjYsMEMxNC40OSw3LjYzLDE2LjU2LDYuMDcsMTgs''@;'; put 'put ''Ni4wN1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMC44MywyMEgyOWExOS4yOSwxOS4yOSwwLDAsMC0xLjE4LTUuNzNsMS40Ni0uNzlhMSwxLDAsMCwwLS45NS0xLjc2bC0zLDEuMjhIMTAuNzhMNy43LDExLjcyYTEs''@;'; put 'put ''MSwwLDAsMC0uOTUsMS43NmwxLjUuOEExOS4zOCwxOS4zOCwwLDAsMCw3LjA3LDIwSDUuMTdhMSwxLDAsMCwwLDAsMkg3LjFhMTQuNjIsMTQuNjIsMCwwLDAsMS42Niw2LjE3TDYuODcsMjkuNDlBMSwxLDAsMSwwLDgsMzEuMTJsMS44NC0xLjI5QTEwLjI5LDEwLjI5LDAsMCwwLDE3LDMzLjZW''@;'; put 'put ''MTVoMlYzMy42YTEwLjI5LDEwLjI5LDAsMCwwLDcuMTYtMy43NUwyOCwzMS4xMmExLDEsMCwxLDAsMS4xNS0xLjY0bC0xLjg2LTEuM0ExNC42MSwxNC42MSwwLDAsMCwyOC45NCwyMmgxLjg5YTEsMSwwLDAsMCwwLTJaTTEwLjkxLDE3Ljc0YTEuOTUsMS45NSwwLDEsMSwxLjk1LDEuOTVBMS45''@;'; put 'put ''NSwxLjk1LDAsMCwxLDEwLjkxLDE3Ljc0Wk0xNCwyNy40NmExLjU4LDEuNTgsMCwxLDEsMS41OC0xLjU4QTEuNTgsMS41OCwwLDAsMSwxNCwyNy40NlptOC40MywwQTEuNTgsMS41OCwwLDEsMSwyNCwyNS44OCwxLjU4LDEuNTgsMCwwLDEsMjIuNDIsMjcuNDZabTEuMTMtNy43N2ExLjk1LDEu''@;'; put 'put ''OTUsMCwxLDEsMS45NS0xLjk1QTEuOTUsMS45NSwwLDAsMSwyMy41NiwxOS42OVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMS4yMyw1LjI2YTEuNjcsMS42NywwLDAsMCwuNTQtLjMyLDUuOSw1LjksMCwwLDEsLjg5''@;'; put 'put ''LjU4LDcuNDQsNy40NCwwLDAsMSwuOTUuOTRBMTguNDgsMTguNDgsMCwwLDAsMTAuNzksOS43Yy0uNC41Ny4wOSwxLjI4Ljg2LDEuMjhIMjQuNDRjLjc3LDAsMS4yNi0uNzEuODYtMS4yOGExOC4zOCwxOC4zOCwwLDAsMC0yLjg4LTMuMjgsNy4yOCw3LjI4LDAsMCwxLC45MS0uOSw1LjksNS45''@;'; put 'put ''LDAsMCwxLC44OS0uNTgsMS42OSwxLjY5LDAsMSwwLS41Ni0xLjUxLDcuNDksNy40OSwwLDAsMC0xLjMyLjgzLDkuMDYsOS4wNiwwLDAsMC0xLjE5LDEuMThBNS44NSw1Ljg1LDAsMCwwLDE4LDQuM2E1LjkxLDUuOTEsMCwwLDAtMy4xNywxLjE5LDkuMiw5LjIsMCwwLDAtMS4yMi0xLjIxLDcu''@;'; put 'put ''NDksNy40OSwwLDAsMC0xLjMyLS44MywxLjY4LDEuNjgsMCwxLDAtMS4xMSwxLjgzWiIvPicpLGIuQ2xyU2hhcGVUaGVybW9tZXRlcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LDIzLjE3VjExLjQ2SDE3''@;'; put 'put ''VjIzLjJhMywzLDAsMSwwLDIsMFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMTVhMSwxLDAsMCwwLDAtMkgyMy45MlYxMUgyNmExLDEsMCwwLDAsMC0ySDIzLjkyVjhhNiw2LDAsMCwwLTEyLDBWMjAuODFh''@;'; put 'put ''OCw4LDAsMSwwLDEyLS4yVjE5SDI2YTEsMSwwLDAsMCwwLTJIMjMuOTJWMTVaTTI0LDI2YTYsNiwwLDEsMS0xMC4zNi00LjEybC4yNy0uMjlWOGE0LDQsMCwwLDEsOCwwVjIxLjQ0bC4zLjI5QTYsNiwwLDAsMSwyNCwyNloiLz4nKSxiLkNsclNoYXBlUGVuY2lsPSgwLHAuY2xySWNvblNWRyko''@;'; put 'put ''JzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMuODcsOC4zMiwyOCwyLjQyYTIuMDcsMi4wNywwLDAsMC0yLjkyLDBMNC4yNywyMy4ybC0xLjksOC4yYTIuMDYsMi4wNiwwLDAsMCwyLDIuNSwyLjE0LDIuMTQsMCwwLDAsLjQzLDBMMTMuMDks''@;'; put 'put ''MzIsMzMuODcsMTEuMjRBMi4wNywyLjA3LDAsMCwwLDMzLjg3LDguMzJaTTEyLjA5LDMwLjIsNC4zMiwzMS44M2wxLjc3LTcuNjJMMjEuNjYsOC43bDYsNlpNMjksMTMuMjVsLTYtNiwzLjQ4LTMuNDYsNS45LDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTQuMjIsMjMuMmwtMS45LDguMmEyLjA2LDIuMDYsMCwwLDAsMiwyLjUsMi4xNCwyLjE0LDAsMCwwLC40MywwTDEzLDMyLDI4Ljg0LDE2LjIyLDIwLDcuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0yIiBkPSJNMzMuODIsOC4zMmwtNS45LTUuOWEyLjA3LDIuMDcsMCwwLDAtMi45MiwwTDIxLjcyLDUuN2w4LjgzLDguODMsMy4yOC0zLjI4QTIuMDcsMi4wNywwLDAsMCwzMy44Miw4LjMyWiIvPicpLGIuQ2xyU2hhcGVOb3RlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9''@;'; put 'put ''Ik0yOCwzMEg2VjhIMTkuMjJsMi0ySDZBMiwyLDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTVsLTIsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjUzLDUuODQsMzAu''@;'; put 'put ''MTYsMi40N2ExLjYxLDEuNjEsMCwwLDAtMi4yOCwwTDE0LjE3LDE2LjI2bC0xLjExLDQuODFBMS42MSwxLjYxLDAsMCwwLDE0LjYzLDIzLDEuNjksMS42OSwwLDAsMCwxNSwyM2w0Ljg1LTEuMDdMMzMuNTMsOC4xMkExLjYxLDEuNjEsMCwwLDAsMzMuNTMsNS44NFpNMTguODEsMjAuMDhsLTMu''@;'; put 'put ''NjYuODFMMTYsMTcuMjYsMjYuMzIsNi44N2wyLjgyLDIuODJaTTMwLjI3LDguNTYsMjcuNDUsNS43NCwyOSw0LjE2LDMxLjg0LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMyw2LjQsMjkuMywyLjdhMS43''@;'; put 'put ''MSwxLjcxLDAsMCwwLTIuMzYsMEwyMy42NSw2SDZBMiwyLDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTEuNzZsMy0zQTEuNjcsMS42NywwLDAsMCwzMyw2LjRaTTE4LjgzLDIwLjEzbC00LjE5LjkzLDEtNC4xNSw5LjU1LTkuNTcsMy4yMywzLjIzWk0yOS41''@;'; put 'put ''LDkuNDMsMjYuMjcsNi4ybDEuODUtMS44NSwzLjIzLDMuMjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVSZWZyZXNoPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''IiBkPSJNMjIuNCwxMS42NWExLjA5LDEuMDksMCwwLDAsMS4wOSwxLjA5SDM0LjQzVjEuODFhMS4wOSwxLjA5LDAsMSwwLTIuMTksMFY4Ljk1YTE2LjQxLDE2LjQxLDAsMSwwLDEuNDcsMTUuODYsMS4xMiwxLjEyLDAsMCwwLTIuMDUtLjksMTQuMTgsMTQuMTgsMCwxLDEtMS4wNS0xMy4zNkgy''@;'; put 'put ''My41QTEuMDksMS4wOSwwLDAsMCwyMi40LDExLjY1WiIvPicpLGIuQ2xyU2hhcGVTeW5jPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuODQsMTUuNzJhMSwxLDAsMSwwLTIsLjI5QTEzLjE1LDEzLjE1LDAs''@;'; put 'put ''MCwxLDMxLDE3Ljk0LDEzLDEzLDAsMCwxLDguNywyN2g1LjM2YTEsMSwwLDAsMCwwLTJoLTl2OWExLDEsMCwxLDAsMiwwVjI4LjJBMTUsMTUsMCwwLDAsMzIuODQsMTUuNzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTIiIGQ9Ik0zMC4wNiwxQTEuMDUsMS4wNSwwLDAsMCwyOSwyVjcuODNBMTQuOTQsMTQuOTQsMCwwLDAsMywxNy45NGExNS4xNiwxNS4xNiwwLDAsMCwuMiwyLjQ4LDEsMSwwLDAsMCwxLC44NGguMTZhMSwxLDAsMCwwLC44Mi0xLjE1QTEzLjIzLDEzLjIzLDAsMCwxLDUsMTcuOTRhMTMsMTMs''@;'; put 'put ''MCwwLDEsMTMtMTNBMTIuODcsMTIuODcsMCwwLDEsMjcuNDQsOUgyMi4wNmExLDEsMCwwLDAsMCwySDMxVjJBMSwxLDAsMCwwLDMwLjA2LDFaIi8+JyksYi5DbHJTaGFwZVZpZXdMaXN0PSgwLHAuY2xySWNvblNWRykoJzxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xIiB4PSIyIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik03LDEwSDMxYTEsMSwwLDAsMCwwLTJIN2ExLDEsMCwwLDAsMCwyWiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIyIiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzEs''@;'; put 'put ''MTRIN2ExLDEsMCwwLDAsMCwySDMxYTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjIiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9Ik0zMSwyMEg3YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iMiIgeT0i''@;'; put 'put ''MjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgZD0iTTMxLDI2SDdhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPicpLGIuQ2xyU2hhcGVWaWV3Q2FyZHM9KDAs''@;'; put 'put ''cC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwxN0g0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMTdaTTQsOHY3SDE1VjhaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMiwxN0gyMWEyLDIsMCwwLDEtMi0yVjhhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDE3Wk0yMSw4djdIMzJWOFoiLz5cbiAgICAgICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE1LDMwSDRhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMyLDMwSDIxYTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDMwWk0yMSwyMXY3SDMyVjIxWiIvPicpLGIuQ2xyU2hhcGVMaWdo''@;'; put 'put ''dGJ1bGI9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDIuMjVhMTEsMTEsMCwwLDAtMTEsMTEsMTAuNjgsMTAuNjgsMCwwLDAsMSw0LjYzLDE2LjM2LDE2LjM2LDAsMCwwLDEuMTIsMS43OCwxNywxNywwLDAsMSwyLDMuNDcsMTYuMTksMTYuMTksMCwwLDEsLjU5LDRoMkExOC4xNywx''@;'; put 'put ''OC4xNywwLDAsMCwxMywyMi40NGExOC40NiwxOC40NiwwLDAsMC0yLjIyLTMuOTIsMTUuNzksMTUuNzksMCwwLDEtMS0xLjU0QTguNjQsOC42NCwwLDAsMSw5LDEzLjIzYTksOSwwLDAsMSwxOC4wNywwQTguNjQsOC42NCwwLDAsMSwyNi4yMSwxN2ExNS43OSwxNS43OSwwLDAsMS0xLDEuNTRB''@;'; put 'put ''MTguNDYsMTguNDYsMCwwLDAsMjMsMjIuNDRhMTguMTcsMTguMTcsMCwwLDAtLjcxLDQuNzFoMmExNi4xOSwxNi4xOSwwLDAsMSwuNTktNCwxNywxNywwLDAsMSwyLTMuNDdBMTYuMzEsMTYuMzEsMCwwLDAsMjgsMTcuODZhMTAuNjgsMTAuNjgsMCwwLDAsMS00LjYzQTExLDExLDAsMCwwLDE4''@;'; put 'put ''LDIuMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjYzLDE1LjUxYS44LjgsMCwwLDAtMS4xMywwbC0zLDMsMi44NiwzLjEzdjUuNTRIMTlWMjFsLTIuMjQtMi40NSwxLjg5LTEuODlBLjguOCwwLDAsMCwx''@;'; put 'put ''OC42MywxNS41MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODYsMjkuMTVIMTIuMTFhLjguOCwwLDEsMCwwLDEuNkgyMy44NmEuOC44LDAsMCwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3''@;'; put 'put ''LjMyLDEwLjg5bC0yLjczLDIuNzNhLjguOCwwLDAsMCwxLjEzLDEuMTNMMTguNDUsMTJhLjguOCwwLDEsMC0xLjEzLTEuMTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDI3LjE1VjIxbC0yLjI0LTIuNDUs''@;'; put 'put ''MS44OS0xLjg5YS44LjgsMCwwLDAtMS4xMy0xLjEzbC0zLDMsMi44NiwzLjEzdjUuNTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwyOS4xNUgxMi4xMWEuOC44LDAsMSww''@;'; put 'put ''LDAsMS42SDIzLjg2YS44LjgsMCwwLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNS43MiwxNC43NSwxOC40NSwxMmEuOC44LDAsMSwwLTEuMTMtMS4xM2wtMi43MywyLjczYS44LjgsMCwwLDAsMS4xMywxLjEzWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcsMTIuODhjMCwuMTIsMCwuMjMsMCwuMzVBOC42NCw4LjY0LDAsMCwxLDI2LjIxLDE3YTE1Ljc5LDE1Ljc5LDAsMCwxLTEsMS41NEExOC40Niwx''@;'; put 'put ''OC40NiwwLDAsMCwyMywyMi40NGExOC4xNywxOC4xNywwLDAsMC0uNzEsNC43MWgyYTE2LjE5LDE2LjE5LDAsMCwxLC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42MywxMC42MywwLDAsMCwxLTQuNDNBNy40NSw3LjQ1LDAsMCwxLDI3LDEy''@;'; put 'put ''Ljg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuNzEsMjcuMTVBMTguMTcsMTguMTcsMCwwLDAsMTMsMjIuNDRhMTguNDYsMTguNDYsMCwwLDAtMi4yMi0zLjkyLDE1Ljc5LDE1''@;'; put 'put ''Ljc5LDAsMCwxLTEtMS41NEE4LjY0LDguNjQsMCwwLDEsOSwxMy4yMyw5LDksMCwwLDEsMjIuNTMsNS40N2E3LjQ1LDcuNDUsMCwwLDEsLjQzLTIsMTEsMTEsMCwwLDAtMTYsOS44LDEwLjY4LDEwLjY4LDAsMCwwLDEsNC42MywxNi4zNiwxNi4zNiwwLDAsMCwxLjEyLDEuNzgsMTcsMTcsMCww''@;'; put 'put ''LDEsMiwzLjQ3LDE2LjE5LDE2LjE5LDAsMCwxLC41OSw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjg2LDI5LjE1SDEyLjExYS44LjgsMCwxLDAsMCwxLjZIMjMuODZhLjguOCwwLDAsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMi4yNWExMSwxMSwwLDAsMC0x''@;'; put 'put ''MSwxMSwxMC42OCwxMC42OCwwLDAsMCwxLDQuNjMsMTYuMzYsMTYuMzYsMCwwLDAsMS4xMiwxLjc4LDE3LDE3LDAsMCwxLDIsMy40NywxNi4xOSwxNi4xOSwwLDAsMSwuNTksNGg1LjY5VjIxLjYxbC0yLjg2LTMuMTMsMy0zYS44LjgsMCwwLDEsMS4xMywxLjEzbC0xLjg5LDEuODlMMTksMjF2''@;'; put 'put ''Ni4xN0gyNC4zYTE2LjE5LDE2LjE5LDAsMCwxLC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42OCwxMC42OCwwLDAsMCwxLTQuNjNBMTEsMTEsMCwwLDAsMTgsMi4yNVpNMTguNDUsMTJsLTIuNzMsMi43M2EuOC44LDAsMSwxLTEuMTMtMS4x''@;'; put 'put ''M2wyLjczLTIuNzNBLjguOCwwLDEsMSwxOC40NSwxMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwyOS4xNUgxMi4xMWEuOC44LDAsMSwwLDAsMS42SDIzLjg2YS44LjgsMCwwLDAsMC0xLjZaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDMyLjE1SDE0YS44LjgsMCwxLDAsMCwxLjZIMjJhLjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2QTcuNDcsNy40NywwLDAsMSwyMywzLjQ0YTExLDExLDAsMCwwLTE2LDkuOCwxMC42OCwxMC42OCwwLDAsMCwxLDQuNjMsMTYuMzYsMTYuMzYsMCwwLDAsMS4xMiwxLjc4LDE3LDE3LDAsMCwxLDIsMy40NywxNi4x''@;'; put 'put ''OSwxNi4xOSwwLDAsMSwuNTksNGg1LjY5VjIxLjYxbC0yLjg2LTMuMTMsMy0zYS44LjgsMCwwLDEsMS4xMywxLjEzbC0xLjg5LDEuODlMMTksMjF2Ni4xN0gyNC4zYTE2LjE5LDE2LjE5LDAsMCwxLC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmEx''@;'; put 'put ''MC42MywxMC42MywwLDAsMCwxLTQuNDNBNy41LDcuNSwwLDAsMSwyMi41LDZabS00LDYtMi43MywyLjczYS44LjgsMCwxLDEtMS4xMy0xLjEzbDIuNzMtMi43M0EuOC44LDAsMSwxLDE4LjQ1LDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRn''@;'; put 'put ''ZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSxiLkNsclNoYXBlRG93bmxvYWQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMSwzMUg1YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDI5LjQ4''@;'; put 'put ''LDI4LjYxLDE4Ljg3YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTksMjUuNjVWNWExLDEsMCwwLDAtMiwwVjI1LjY1TDguODEsMTcuNDZhMSwxLDAsMSwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMSwzMUg1YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xOCwyOS40OCwyOC42MSwx''@;'; put 'put ''OC44N2ExLDEsMCwwLDAtMS40MS0xLjQxTDE5LDI1LjY1VjVhMSwxLDAsMCwwLTIsMFYyNS42NUw4LjgxLDE3LjQ2YTEsMSwwLDEsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0z''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMxLDMxSDVhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCww''@;'; put 'put ''LDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTgsMjkuNDgsMjguNjEsMTguODdhMSwxLDAsMCwwLTEuNDEtMS40MUwxOSwyNS42NVY1YTEsMSwwLDAsMC0yLDBW''@;'; put 'put ''MjUuNjVMOC44MSwxNy40NmExLDEsMCwxLDAtMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4''@;'; put 'put ''LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksYi5DbHJTaGFwZVVwbG9hZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIgZD0iTTMxLDMxSDVhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC44MSwxNSwxNyw2LjgzVjI3LjQ4YTEsMSwwLDAsMCwy''@;'; put 'put ''LDBWNi44M0wyNy4xOSwxNWExLDEsMCwwLDAsMS40MS0xLjQxTDE4LDMsNy4zOSwxMy42MUExLDEsMCwxLDAsOC44MSwxNVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMx''@;'; put 'put ''LDMxSDVjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoMjZjMC42LDAsMS0wLjQsMS0xUzMxLjYsMzEsMzEsMzF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik04LjgsMTVM''@;'; put 'put ''MTcsNi44djIwLjZjMCwwLjYsMC40LDEsMSwxczEtMC40LDEtMVY2LjhMMjAuMSw4bDEtMS44TDE4LDNMNy40LDEzLjZDNywxNCw2LjksMTQuNiw3LjIsMTVzMSwwLjUsMS40LDAuMUM4LjcsMTUuMSw4LjgsMTUuMSw4LjgsMTV6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi45LDEuMUwyMS4xLDExYy0wLjQsMC42LTAuMiwxLjQsMC4zLDEuOGMwLjIsMC4yLDAuNSwwLjIsMC44LDAuMmgxMS41YzAuNywwLDEuMy0wLjUsMS4zLTEuMmMwLTAu''@;'; put 'put ''My0wLjEtMC41LTAuMi0wLjhsLTUuNy05LjljLTAuNC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC44LDI3LDEsMjYuOSwxLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJN''@;'; put 'put ''MzEsMzFINWExLDEsMCwwLDAsMCwySDMxYTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNOC44MSwxNSwxNyw2LjgzVjI3LjQ4YTEsMSwwLDAsMCwyLDBW''@;'; put 'put ''Ni44M0wyNy4xOSwxNWExLDEsMCwwLDAsMS40MS0xLjQxTDE4LDMsNy4zOSwxMy42MUExLDEsMCwxLDAsOC44MSwxNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRn''@;'; put 'put ''ZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLGIuQ2xyU2hhcGVMb2NrPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTguMDksMjAuNTlBMi40MSwyLjQxLDAsMCwwLDE3LDI1LjE0VjI4aDJWMjUuMjNhMi40''@;'; put 'put ''MSwyLjQxLDAsMCwwLS45MS00LjY0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMTVWMTAuNzJhOC4yLDguMiwwLDAsMC04LTguMzYsOC4yLDguMiwwLDAsMC04LDguMzZWMTVIN1YzMmEyLDIsMCww''@;'; put 'put ''LDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMTVaTTEyLDEwLjcyYTYuMiw2LjIsMCwwLDEsNi02LjM2LDYuMiw2LjIsMCwwLDEsNiw2LjM2VjE1SDEyWk05LDMyVjE3SDI3VjMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEi''@;'; put 'put ''IGQ9Ik0yNiwxNVYxMC43MmE4LjIsOC4yLDAsMCwwLTgtOC4zNiw4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUg3VjMyYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYxNVpNMTksMjUuMjNWMjhIMTdWMjUuMTRhMi40LDIuNCwwLDEsMSwyLC4wOVpNMjQsMTVIMTJWMTAuNzJhNi4yLDYu''@;'; put 'put ''MiwwLDAsMSw2LTYuMzYsNi4yLDYuMiwwLDAsMSw2LDYuMzZaIi8+JyksYi5DbHJTaGFwZVVubG9jaz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTEyLDI1LjE0VjI4aDJWMjUuMjNhMi40MiwyLjQyLDAsMSww''@;'; put 'put ''LTItLjA5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMmE4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUgyVjMyYTIsMiwwLDAsMCwyLDJIMjJhMiwyLDAsMCwwLDItMlYxNUgyMFYxMC4zNkE2LjIsNi4y''@;'; put 'put ''LDAsMCwxLDI2LDRhNi4yLDYuMiwwLDAsMSw2LDYuMzZ2Ni44M2ExLDEsMCwwLDAsMiwwVjEwLjM2QTguMiw4LjIsMCwwLDAsMjYsMlpNMjIsMTdWMzJINFYxN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYs''@;'; put 'put ''MmE4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUgyVjMyYTIsMiwwLDAsMCwyLDJIMjJhMiwyLDAsMCwwLDItMlYxNUgyMFYxMC4zNkE2LjIsNi4yLDAsMCwxLDI2LDRhNi4yLDYuMiwwLDAsMSw2LDYuMzZ2Ni44M2ExLDEsMCwwLDAsMiwwVjEwLjM2QTguMiw4LjIsMCwwLDAsMjYsMlpNMTQsMjUu''@;'; put 'put ''MjNWMjhIMTJWMjUuMTRhMi40LDIuNCwwLDEsMSwyLC4wOVoiLz4nKSxiLkNsclNoYXBlVXNlcnM9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNy45LDE3LjNjMi43LDAsNC44LTIuMiw0LjgtNC45YzAtMi43''@;'; put 'put ''LTIuMi00LjgtNC45LTQuOGMtMi43LDAtNC44LDIuMi00LjgsNC44QzEzLDE1LjEsMTUuMiwxNy4zLDE3LjksMTcuM3ogTTE3LjgsOS42QzE3LjksOS42LDE3LjksOS42LDE3LjgsOS42YzEuNiwwLDIuOSwxLjMsMi45LDIuOXMtMS4zLDIuOC0yLjksMi44Yy0xLjYsMC0yLjgtMS4zLTIuOC0y''@;'; put 'put ''LjhDMTUsMTAuOSwxNi4zLDkuNiwxNy44LDkuNnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLjcsMTYuN2MtMS45LTEuNy00LjQtMi42LTctMi41Yy0wLjMsMC0wLjUsMC0wLjgsMGMtMC4yLDAuOC0w''@;'; put 'put ''LjUsMS41LTAuOSwyLjFjMC42LTAuMSwxLjEtMC4xLDEuNy0wLjFjMS45LTAuMSwzLjgsMC41LDUuMywxLjZWMjVoMnYtOEwzMi43LDE2Ljd6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMy40LDcuOGMw''@;'; put 'put ''LjUtMS4yLDEuOS0xLjgsMy4yLTEuM2MxLjIsMC41LDEuOCwxLjksMS4zLDMuMmMtMC40LDAuOS0xLjMsMS41LTIuMiwxLjVjLTAuMiwwLTAuNSwwLTAuNy0wLjFjMC4xLDAuNSwwLjEsMSwwLjEsMS40YzAsMC4yLDAsMC40LDAsMC42YzAuMiwwLDAuNCwwLjEsMC42LDAuMWMyLjUsMCw0LjUt''@;'; put 'put ''Miw0LjUtNC40YzAtMi41LTItNC41LTQuNC00LjVjLTEuNiwwLTMsMC44LTMuOCwyLjJDMjIuNSw2LjgsMjMsNy4yLDIzLjQsNy44eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMTIsMTYuNGMtMC40LTAu''@;'; put 'put ''Ni0wLjctMS4zLTAuOS0yLjFjLTAuMywwLTAuNSwwLTAuOCwwYy0yLjYtMC4xLTUuMSwwLjgtNywyLjRMMywxN3Y4aDJ2LTcuMmMxLjYtMS4xLDMuNC0xLjcsNS4zLTEuNkMxMC45LDE2LjIsMTEuNSwxNi4zLDEyLDE2LjR6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0xMC4zLDEzLjFjMC4yLDAsMC40LDAsMC42LTAuMWMwLTAuMiwwLTAuNCwwLTAuNmMwLTAuNSwwLTEsMC4xLTEuNGMtMC4yLDAuMS0wLjUsMC4xLTAuNywwLjFjLTEuMywwLTIuNC0xLjEtMi40LTIuNGMwLTEuMywxLjEtMi40LDIu''@;'; put 'put ''NC0yLjRjMSwwLDEuOSwwLjYsMi4zLDEuNWMwLjQtMC41LDEtMSwxLjUtMS40Yy0xLjMtMi4xLTQtMi44LTYuMS0xLjVjLTIuMSwxLjMtMi44LDQtMS41LDYuMUM3LjMsMTIuMyw4LjcsMTMuMSwxMC4zLDEzLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9Ik0yNi4xLDIyLjdsLTAuMi0wLjNjLTItMi4yLTQuOC0zLjUtNy44LTMuNGMtMy0wLjEtNS45LDEuMi03LjksMy40TDEwLDIyLjd2Ny42YzAsMC45LDAuNywxLjcsMS43LDEuN2MwLDAsMCwwLDAsMGgxMi44YzAuOSwwLDEuNy0wLjgsMS43LTEu''@;'; put 'put ''N2MwLDAsMCwwLDAsMFYyMi43eiBNMjQuMSwzMEgxMnYtNi42YzEuNi0xLjYsMy44LTIuNCw2LjEtMi40YzIuMi0wLjEsNC40LDAuOCw2LDIuNFYzMHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0t''@;'; put 'put ''YWxlcnRlZCIgZD0iTTExLjA5LDE0LjU3Yy4xLDAsLjIsMCwuMzEsMGE2LjQzLDYuNDMsMCwwLDEsLjA5LTIsMi4wOSwyLjA5LDAsMSwxLDEuNDctMyw2LjU4LDYuNTgsMCwwLDEsMS41NS0xLjMxLDQuMDksNC4wOSwwLDEsMC0zLjQyLDYuMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xMywxOC4xNGE2LjUzLDYuNTMsMCwwLDEtMS4yOC0yLjJsLS42MywwYTguNjcsOC42NywwLDAsMC02LjQzLDIuNTJsLS4yNC4yOHY3aDJWMTkuNTFhNyw3LDAsMCwxLDQuNjct''@;'; put 'put ''MS42QTguMDksOC4wOSwwLDAsMSwxMywxOC4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTMxLjM1LDE4LjQyQTguNTksOC41OSwwLDAsMCwyNSwxNS45MWMtLjMyLDAt''@;'; put 'put ''LjYsMC0uOS4wNmE2LjUzLDYuNTMsMCwwLDEtMS4zNSwyLjI1QTcuOSw3LjksMCwwLDEsMjUsMTcuOTFhNi45NCw2Ljk0LDAsMCwxLDQuNjQsMS41OHY2LjI3aDJWMTguN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTE4LjEsMTkuNzNBOS42OSw5LjY5LDAsMCwwLDExLDIyLjQ3bC0uMjUuMjh2Ny4zM2ExLjU3LDEuNTcsMCwwLDAsMS42MSwxLjU0SDIzLjgzYTEuNTcsMS41NywwLDAsMCwxLjYxLTEuNTRWMjIuNzNsLS4yNS0uMjhBOS41OCw5LjU4LDAsMCwwLDE4''@;'; put 'put ''LjEsMTkuNzNabTUuMzMsOS44OEgxMi43M1YyMy41NWE4LjA4LDguMDgsMCwwLDEsNS4zNy0xLjgyLDgsOCwwLDAsMSw1LjMzLDEuOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIg''@;'; put 'put ''ZD0iTTIwLjI4LDE0LjI3YTIuNDYsMi40NiwwLDEsMS0yLjQyLTIuODksMi40NCwyLjQ0LDAsMCwxLDEsLjI0LDMuNjcsMy42NywwLDAsMSwuNDMtMiw0LjQxLDQuNDEsMCwwLDAtMS40OC0uMjdBNC40Nyw0LjQ3LDAsMSwwLDIyLjE0LDE1LDMuNjksMy42OSwwLDAsMSwyMC4yOCwxNC4yN1oi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI3LjE4LjhsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzRhMS4yOCwxLjI4LDAsMCww''@;'; put 'put ''LDEuMS0xLjkxTDI5LjM5LjhBMS4yOCwxLjI4LDAsMCwwLDI3LjE4LjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTEuMDksMTQuNTdjLjEsMCwuMiwwLC4zMSwwYTYuNDMs''@;'; put 'put ''Ni40MywwLDAsMSwuMDktMiwyLjA5LDIuMDksMCwxLDEsMS40Ny0zLDYuNTgsNi41OCwwLDAsMSwxLjU1LTEuMzEsNC4wOSw0LjA5LDAsMSwwLTMuNDIsNi4zM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0yLS1iYWRnZWQiIGQ9Ik0xMywxOC4xNGE2LjUzLDYuNTMsMCwwLDEtMS4yOC0yLjJsLS42MywwYTguNjcsOC42NywwLDAsMC02LjQzLDIuNTJsLS4yNC4yOHY3aDJWMTkuNTFhNyw3LDAsMCwxLDQuNjctMS42QTguMDksOC4wOSwwLDAsMSwxMywxOC4xNFoiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zMS4zNSwxOC40MkE4LjU5LDguNTksMCwwLDAsMjUsMTUuOTFjLS4zMiwwLS42LDAtLjkuMDZhNi41Myw2LjUzLDAsMCwxLTEuMzUsMi4yNUE3LjksNy45LDAsMCwx''@;'; put 'put ''LDI1LDE3LjkxYTYuOTQsNi45NCwwLDAsMSw0LjY0LDEuNTh2Ni4yN2gyVjE4LjdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMTcuODYsMTguM2E0LjQ3LDQuNDcsMCwxLDAt''@;'; put 'put ''NC40Ny00LjQ3QTQuNDcsNC40NywwLDAsMCwxNy44NiwxOC4zWm0wLTYuOTNhMi40NywyLjQ3LDAsMSwxLTIuNDcsMi40N0EyLjQ3LDIuNDcsMCwwLDEsMTcuODYsMTEuMzdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNS0tYmFkZ2VkIiBkPSJNMTguMSwxOS43M0E5LjY5LDkuNjksMCwwLDAsMTEsMjIuNDdsLS4yNS4yOHY3LjMzYTEuNTcsMS41NywwLDAsMCwxLjYxLDEuNTRIMjMuODNhMS41NywxLjU3LDAsMCwwLDEuNjEtMS41NFYyMi43M2wtLjI1LS4yOEE5LjU4LDkuNTgsMCwwLDAsMTgu''@;'; put 'put ''MSwxOS43M1ptNS4zMyw5Ljg4SDEyLjczVjIzLjU1YTguMDgsOC4wOCwwLDAsMSw1LjM3LTEuODIsOCw4LDAsMCwxLDUuMzMsMS44WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgZD0i''@;'; put 'put ''TTI2LjM3LDEyYTIsMiwwLDAsMS0yLjA5LjQyLDYuNTMsNi41MywwLDAsMSwuMTUsMS4zOCw2LjU5LDYuNTksMCwwLDEsMCwuNjgsNCw0LDAsMCwwLC41Ny4wNiw0LjA4LDQuMDgsMCwwLDAsMy4zLTEuN0E3LjQ1LDcuNDUsMCwwLDEsMjYuMzcsMTJaIi8+XG4gICAgICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiBkPSJNMjIuOTUsNi45M2E0LjE2LDQuMTYsMCwwLDAtMS40NywxLjQ0QTYuNTksNi41OSwwLDAsMSwyMyw5Ljc3YTIuMSwyLjEsMCwwLDEsLjU5LS44M0E3LjQ0LDcuNDQsMCwwLDEs''@;'; put 'put ''MjIuOTUsNi45M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwLjMzIiBjeT0iNS42NyIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xMiwxNi4xNHEtLjQzLDAtLjg3LDBhOC42Nyw4LjY3LDAsMCwwLTYuNDMsMi41MmwtLjI0LjI4djguMjhIOC41NHYtNC43bC41NS0uNjIuMjUtLjI5YTExLDExLDAsMCwxLDQuNzEtMi44NkE2LjU5LDYuNTksMCwwLDEs''@;'; put 'put ''MTIsMTYuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1''@;'; put 'put ''LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMS4xLDE0LjE5Yy4xMSwwLC4yLDAsLjMxLDBhNi40NSw2LjQ1LDAsMCwx''@;'; put 'put ''LDMuMTEtNi4yOSw0LjA5LDQuMDksMCwxLDAtMy40Miw2LjMzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0yNC40MywxMy40NGE2LjU0LDYuNTQsMCwwLDEsMCwuNjksNC4wOSw0LjA5LDAsMCwwLC41OC4wNWgu''@;'; put 'put ''MTlBNC4wOSw0LjA5LDAsMSwwLDIxLjQ3LDgsNi41Myw2LjUzLDAsMCwxLDI0LjQzLDEzLjQ0WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgY3g9IjE3Ljg3IiBjeT0iMTMuNDUiIHI9IjQuNDciLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiBkPSJNMTguMTEsMjAuM0E5LjY5LDkuNjksMCwwLDAsMTEsMjNsLS4yNS4yOHY2LjMzYTEuNTcsMS41NywwLDAsMCwxLjYsMS41NEgyMy44NGExLjU3LDEuNTcsMCwwLDAsMS42LTEuNTRWMjMuM0wy''@;'; put 'put ''NS4yLDIzQTkuNTgsOS41OCwwLDAsMCwxOC4xMSwyMC4zWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMiwxNi4xNHEtLjQzLDAtLjg3LDBhOC42Nyw4LjY3LDAsMCwwLTYuNDMs''@;'; put 'put ''Mi41MmwtLjI0LjI4djguMjhIOC41NHYtNC43bC41NS0uNjIuMjUtLjI5YTExLDExLDAsMCwxLDQuNzEtMi44NkE2LjU5LDYuNTksMCwwLDEsMTIsMTYuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0t''@;'; put 'put ''YWxlcnRlZCIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0xMS4xLDE0LjE5Yy4xMSwwLC4yLDAsLjMxLDBhNi40NSw2LjQ1LDAsMCwxLDMuMTEtNi4yOSw0LjA5LDQuMDksMCwxLDAtMy40Miw2LjMzWiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0xOC4xMSwyMC4zQTkuNjksOS42OSwwLDAsMCwxMSwyM2wtLjI1LjI4djYuMzNhMS41NywxLjU3LDAsMCwwLDEuNiwxLjU0SDIzLjg0YTEuNTcsMS41Nyww''@;'; put 'put ''LDAsMCwxLjYtMS41NFYyMy4zTDI1LjIsMjNBOS41OCw5LjU4LDAsMCwwLDE4LjExLDIwLjNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTE3Ljg3LDE3LjkyYTQuNDYsNC40Niww''@;'; put 'put ''LDAsMCw0LTIuNTRBMy42NywzLjY3LDAsMCwxLDE5LDkuODlsLjM1LS42MUE0LjQyLDQuNDIsMCwwLDAsMTcuODcsOWE0LjQ3LDQuNDcsMCwxLDAsMCw4LjkzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTYt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTEyLDE2LjE0cS0uNDMsMC0uODcsMGE4LjY3LDguNjcsMCwwLDAtNi40MywyLjUybC0uMjQuMjh2OC4yOEg4LjU0di00LjdsLjU1LS42Mi4yNS0uMjlhMTEsMTEsMCwwLDEsNC43MS0y''@;'; put 'put ''Ljg2QTYuNTgsNi41OCwwLDAsMSwxMiwxNi4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcs''@;'; put 'put ''MCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFk''@;'; put 'put ''Z2VkIiBkPSJNMTEuMSwxNC4xOWMuMTEsMCwuMiwwLC4zMSwwYTYuNDUsNi40NSwwLDAsMSwzLjExLTYuMjksNC4wOSw0LjA5LDAsMSwwLTMuNDIsNi4zM1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0t''@;'; put 'put ''YmFkZ2VkIiBjeD0iMTcuODciIGN5PSIxMy40NSIgcj0iNC40NyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNS0tYmFkZ2VkIiBkPSJNMTguMTEsMjAuM0E5LjY5LDkuNjksMCwwLDAsMTEsMjNsLS4yNS4yOHY2''@;'; put 'put ''LjMzYTEuNTcsMS41NywwLDAsMCwxLjYsMS41NEgyMy44NGExLjU3LDEuNTcsMCwwLDAsMS42LTEuNTRWMjMuM0wyNS4yLDIzQTkuNTgsOS41OCwwLDAsMCwxOC4xMSwyMC4zWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtNi0tYmFkZ2VkIiBkPSJNMjQuNDMsMTMuNDRhNi41NCw2LjU0LDAsMCwxLDAsLjY5LDQuMDksNC4wOSwwLDAsMCwuNTguMDVoLjE5YTQuMDUsNC4wNSwwLDAsMCwyLjUyLTEsNy41LDcuNSwwLDAsMS01LjE0LTYuMzJBNC4xMyw0LjEzLDAsMCwwLDIxLjQ3LDgsNi41Myw2LjUzLDAs''@;'; put 'put ''MCwxLDI0LjQzLDEzLjQ0WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC03LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxiLkNsclNoYXBlUG9wT3V0PSgwLHAuY2xySWNv''@;'; put 'put ''blNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcsMzNINWEyLDIsMCwwLDEtMi0yVjlBMiwyLDAsMCwxLDUsN0gxNVY5SDVWMzFIMjdWMjFoMlYzMUEyLDIsMCwwLDEsMjcsMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwzYTEsMSwwLDAsMCwwLDJIMjkuNTlMMTUuNzQsMTguODVhMSwxLDAsMSwwLDEuNDEsMS40MUwzMSw2LjQxVjE4YTEsMSwwLDAsMCwyLDBWM1oiLz4nKSxiLkNsclNoYXBlRmlsdGVyPSgwLHAuY2xySWNvblNW''@;'; put 'put ''RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMsNEgzQTEsMSwwLDAsMCwyLDVWNi42N2ExLjc5LDEuNzksMCwwLDAsLjUzLDEuMjdMMTQsMTkuNTh2MTAuMmwyLC43NlYxOWExLDEsMCwwLDAtLjI5LS43MUw0LDYuNTlWNkgzMnYuNjFM''@;'; put 'put ''MjAuMzMsMTguMjlBMSwxLDAsMCwwLDIwLDE5bDAsMTMuMjFMMjIsMzNWMTkuNUwzMy40Nyw4QTEuODEsMS44MSwwLDAsMCwzNCw2LjdWNUExLDEsMCwwLDAsMzMsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJN''@;'; put 'put ''MjIsMzNWMTkuNUwzMy40Nyw4QTEuODEsMS44MSwwLDAsMCwzNCw2LjdWNWExLDEsMCwwLDAtMS0xSDNBMSwxLDAsMCwwLDIsNVY2LjY3YTEuNzksMS43OSwwLDAsMCwuNTMsMS4yN0wxNCwxOS41OHYxMC4yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy40OCw0aC0zMUEuNTIu''@;'; put 'put ''NTIsMCwwLDAsMiw0LjUyVjYuMjRhMS4zMywxLjMzLDAsMCwwLC4zOS45NWwxMiwxMnYxMGw3LjI1LDMuNjFWMTkuMTdsMTItMTJBMS4zNSwxLjM1LDAsMCwwLDM0LDYuMjZWNC41MkEuNTIuNTIsMCwwLDAsMzMuNDgsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEi''@;'; put 'put ''IC8+JyksYi5DbHJTaGFwZVBpbj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDE2LjU5YTEsMSwwLDAsMS0uNzEtLjI5TDE5LjcsMy43MWExLDEsMCwwLDEsMS40MS0xLjQxTDMzLjcxLDE0Ljg5QTEsMSww''@;'; put 'put ''LDAsMSwzMywxNi41OVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LjUyLDE1LjU2bC0xLjQxLTEuNDEtNy4yLDcuMmExLDEsMCwwLDAtLjI1LDEsOSw5LDAsMCwxLTEuNTMsOC4wOUw1LjU4LDE3Ljg3''@;'; put 'put ''YTksOSwwLDAsMSw4LjA5LTEuNTMsMSwxLDAsMCwwLDEtLjI1bDcuMi03LjJMMjAuNDQsNy40OGwtNi43OSw2Ljc5QTEwLjk0LDEwLjk0LDAsMCwwLDMuNDEsMTcuMTFhMSwxLDAsMCwwLDAsMS40Mmw2LjMzLDYuMzNMMi4yOSwzMi4yOWExLDEsMCwxLDAsMS40MSwxLjQxbDcuNDQtNy40NCw2''@;'; put 'put ''LjMzLDYuMzNhMSwxLDAsMCwwLC43MS4yOWgwYTEsMSwwLDAsMCwuNzEtLjMsMTEsMTEsMCwwLDAsMi44NC0xMC4yNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTYuNzFhMSwxLDAsMCwxLS43MS0uMjlM''@;'; put 'put ''MTkuNywzLjgyYTEsMSwwLDAsMSwxLjQxLTEuNDFMMzMuNzEsMTVBMSwxLDAsMCwxLDMzLDE2LjcxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yMC40NCw3LjU5bC02Ljc5LDYuNzlBMTAuOTQsMTAuOTQsMCww''@;'; put 'put ''LDAsMy40MSwxNy4yMmExLDEsMCwwLDAsMCwxLjQyTDkuNzMsMjUsMi4yOSwzMi40MWExLDEsMCwxLDAsMS40MSwxLjQxbDcuNDQtNy40NCw2LjMzLDYuMzNhMSwxLDAsMCwwLC43MS4yOWgwYTEsMSwwLDAsMCwuNzEtLjMsMTEsMTEsMCwwLDAsMi44NC0xMC4yNGw2Ljc5LTYuNzlaIi8+Jyks''@;'; put 'put ''Yi5DbHJTaGFwZUZpbGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEu''@;'; put 'put ''ODgsMCwwLDAsMzAsMzAuMDlWMTEuOTJabS0uMywyLjQ5LDYsNS45aC02Wk04LDMwVjZIMjB2OGg4VjMwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTIxLjU5LDEyLjM5VjYu''@;'; put 'put ''NDlsMS4wNywxYTcuMzEsNy4zMSwwLDAsMSwwLTIuODJMMjEuODksNEg3LjgzQTEuODgsMS44OCwwLDAsMCw2LDUuOTFWMzAuMDlBMS44OCwxLjg4LDAsMCwwLDcuODMsMzJIMjguMTdBMS44OCwxLjg4LDAsMCwwLDMwLDMwLjA5VjEzLjVhNy40NSw3LjQ1LDAsMCwxLTMuOTEtMS4xMVpNMjgs''@;'; put 'put ''MzBIOFY2SDIwdjhoOFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjgsMTUuNFYzMEg4VjZIMjBWOC4yNWwyLjI1LTMuOUwyMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0Ex''@;'; put 'put ''Ljg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAs''@;'; put 'put ''MCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yMS44OSw0SDcuODNB''@;'; put 'put ''MS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTEuOTJaTTIxLDEzVjUuODRMMjguMywxM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTI3LjI1LDEzSDIxVjUuODRsMS42NCwxLjZhNy4yNSw3LjI1LDAsMCwxLDAtMi43NEwyMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCww''@;'; put 'put ''LDAsMzAsMzAuMDlWMTMuNUE3LjQ3LDcuNDcsMCwwLDEsMjcuMjUsMTNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yMi4yLDE1LjRjLTIsMC0zLjctMS42LTMuNy0zLjZjMC0wLjcsMC4yLTEuMywwLjUtMS45bDMuMi01LjVMMjEuOSw0SDcuOEM2LjgsNCw2LDQuOSw2''@;'; put 'put ''LDUuOXYyNC4yYzAsMSwwLjgsMS45LDEuOCwxLjloMjAuM2MxLDAsMS44LTAuOSwxLjgtMS45VjE1LjRIMjIuMnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJN''@;'; put 'put ''MjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0wLjIsMS40LDAuMywxLjhjMC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJoMTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01LjctOS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywxLDI2''@;'; put 'put ''LjksMS4xeiIvPicpLGIuQ2xyU2hhcGVQbHVzPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsMTdIMTlWNmExLDEsMCwxLDAtMiwwVjE3SDZhMSwxLDAsMCwwLTEsMSwuOTEuOTEsMCwwLDAsMSwuOTRIMTdW''@;'; put 'put ''MzBhMSwxLDAsMSwwLDIsMFYxOUgzMGExLDEsMCwwLDAsMS0xQTEsMSwwLDAsMCwzMCwxN1oiLz4nKSxiLkNsclNoYXBlTWludXM9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LDE3SDEwYTEsMSwwLDAsMCwwLDJIMjZhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVNaW51c0NpcmNsZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQsMTdIMTJhMSwxLDAsMCwwLDAsMkgyNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm02LDE3LjVIMTJhMS41LDEuNSwwLDAsMSwwLTNIMjRhMS41LDEuNSwwLDAsMSwwLDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVQbHVzQ2ly''@;'; put 'put ''Y2xlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi4xNywxN0gxOVY5LjgzYTEsMSwwLDAsMC0yLDBWMTdIOS44M2ExLDEsMCwwLDAsMCwySDE3djcuMTdhMSwxLDAsMCwwLDIsMFYxOWg3LjE3YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMzQsMThBMTYsMTYsMCwxLDEsMTgsMiwxNiwxNiwwLDAsMSwzNCwxOFptLTguNDEtMS41SDE5LjVWMTAuNDFhMS41LDEuNSwwLDAsMC0zLDBWMTYuNUgxMC40MWExLjUsMS41LDAsMCwwLDAsM0gxNi41djYuMDlhMS41LDEuNSwwLDAsMCwzLDBWMTkuNWg2''@;'; put 'put ''LjA5YTEuNSwxLjUsMCwwLDAsMC0zWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGIuQ2xyU2hhcGVCYW49KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAs''@;'; put 'put ''MSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTQsMThBMTMuOTMsMTMuOTMsMCwwLDEsNy40Myw4Ljg1TDI3LjE1LDI4LjU3QTE0LDE0LDAsMCwxLDQsMThabTI0LjU3LDkuMTVMOC44NSw3LjQzQTE0LDE0LDAsMCwxLDI4LjU3LDI3LjE1WiIvPicpLGIuQ2xyU2hhcGVUaW1lc0NpcmNsZT0o''@;'; put 'put ''MCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LjYxLDE4bDQuODYtNC44NmExLDEsMCwwLDAtMS40MS0xLjQxTDE4LjIsMTYuNTRsLTQuODktNC44OWExLDEsMCwwLDAtMS40MSwxLjQxTDE2Ljc4LDE4LDEyLDIy''@;'; put 'put ''LjcyYTEsMSwwLDEsMCwxLjQxLDEuNDFsNC43Ny00Ljc3LDQuNzQsNC43NGExLDEsMCwwLDAsMS40MS0xLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYs''@;'; put 'put ''MTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwy''@;'; put 'put ''Wm04LDIyLjFhMS40LDEuNCwwLDAsMS0yLDJsLTYtNkwxMiwyNi4xMmExLjQsMS40LDAsMSwxLTItMkwxNiwxOC4wOCw5LjgzLDExLjg2YTEuNCwxLjQsMCwxLDEsMi0yTDE4LDE2LjFsNi4xNy02LjE3YTEuNCwxLjQsMCwxLDEsMiwyTDIwLDE4LjA4WiIvPicpLGIuQ2xyU2hhcGVUcmFzaD0o''@;'; put 'put ''MCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjE0LDM0SDguODZBMi45MywyLjkzLDAsMCwxLDYsMzFWMTEuMjNIOFYzMWEuOTMuOTMsMCwwLDAsLjg2LDFIMjcuMTRBLjkzLjkzLDAsMCwwLDI4LDMxVjExLjIz''@;'; put 'put ''aDJWMzFBMi45MywyLjkzLDAsMCwxLDI3LjE0LDM0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAuNzgsOUg1QTEsMSwwLDAsMSw1LDdIMzAuNzhhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAg''@;'; put 'put ''ICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMjEiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIxNSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMyIg''@;'; put 'put ''eT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjE1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0yMyw1Ljg2SDIxLjFWNEgxNC45VjUuODZIMTNWNGEyLDIsMCwwLDEsMS45LTJoNi4yQTIsMiwwLDAsMSwyMyw0''@;'; put 'put ''WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik02LDlWMzFhMi45MywyLjkzLDAsMCwwLDIuODYsM0gyNy4wOUEyLjkzLDIuOTMsMCwwLDAsMzAsMzFWOVptOSwyMEgxM1YxNGgyWm04LDBIMjFWMTRoMloiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzAuNzMsNUgyM1Y0QTIsMiwwLDAsMCwyMSwyaC02LjJBMiwyLDAsMCwwLDEzLDRWNUg1QTEsMSwwLDEsMCw1LDdIMzAuNzNhMSwxLDAsMCwwLDAtMloiLz4nKSxiLkNsclNoYXBl''@;'; put 'put ''VGFnPSgwLHAuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEuNDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMiwxNy4zMyw0LjZBMiwyLDAsMCwwLDE1Ljky''@;'; put 'put ''LDRMNiw0QTIsMiwwLDAsMCw0LDZsMCw5LjkyYTIsMiwwLDAsMCwuNTksMS40MWwxNC42LDE0LjZhMiwyLDAsMCwwLDIuODMsMGw5LjktOS45QTIsMiwwLDAsMCwzMS45MywxOS4yWk0yMC42MiwzMC41Miw2LDE1LjkxVjZoOS45MmwxNC42LDE0LjYyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEuNDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEu''@;'; put 'put ''OTMsMTkuMmwtMy44LTMuOEgyNS4zMWw1LjIyLDUuMjItOS45LDkuOUw2LDE1LjkxVjZoOS45MmwzLjQxLDMuNDEsMS0xLjc4LTMtM0EyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44Myww''@;'; put 'put ''bDkuOS05LjlBMiwyLDAsMCwwLDMxLjkzLDE5LjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMz''@;'; put 'put ''LjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUg''@;'; put 'put ''Y3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEuNDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjkzLDE5LjIsMTcuMzMsNC42QTIsMiwwLDAsMCwxNS45Miw0TDYsNEEyLDIsMCww''@;'; put 'put ''LDAsNCw2bDAsOS45MmEyLDIsMCwwLDAsLjU5LDEuNDFsMTQuNiwxNC42YTIsMiwwLDAsMCwyLjgzLDBsOS45LTkuOUEyLDIsMCwwLDAsMzEuOTMsMTkuMlpNMjAuNjIsMzAuNTIsNiwxNS45MVY2aDkuOTJsMTQuNiwxNC42MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0z''@;'; put 'put ''MS45MywxOS4yLDE3LjMzLDQuNkEyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlBMiwyLDAsMCwwLDMxLjkzLDE5LjJaTTkuNjUsMTEuMzFhMS42NiwxLjY2LDAsMSwx''@;'; put 'put ''LDEuNjYtMS42NkExLjY2LDEuNjYsMCwwLDEsOS42NSwxMS4zMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC40NiwxNS43M0gyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksMTAuMjJsMS40My0yLjQ3TDE3LjMzLDQu''@;'; put 'put ''NkEyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlhMiwyLDAsMCwwLDAtMi44M1pNOS42NSwxMS4zMWExLjY2LDEuNjYsMCwxLDEsMS42Ni0xLjY2QTEuNjYsMS42Niww''@;'; put 'put ''LDAsMSw5LjY1LDExLjMxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuNDdsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAs''@;'; put 'put ''MCwwLDEuMS0xLjkxTDI5LjA2LDEuNDdBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuNDdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMiwxNy4zMyw0''@;'; put 'put ''LjZBMiwyLDAsMCwwLDE1LjkyLDRMNiw0QTIsMiwwLDAsMCw0LDZsMCw5LjkyYTIsMiwwLDAsMCwuNTksMS40MWwxNC42LDE0LjZhMiwyLDAsMCwwLDIuODMsMGw5LjktOS45QTIsMiwwLDAsMCwzMS45MywxOS4yWk05LjY1LDExLjMxYTEuNjYsMS42NiwwLDEsMSwxLjY2LTEuNjZBMS42Niwx''@;'; put 'put ''LjY2LDAsMCwxLDkuNjUsMTEuMzFaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2LjMzIiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLGIuQ2xyU2hhcGVUYWdzPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy4xNiwxOS4xMywxOS41OCw1LjU1QTEuOTIsMS45MiwwLDAsMCwxOC4yMSw1SDE2LjEyTDMxLjc1LDIwLjQ1LDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAs''@;'; put 'put ''MCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDE0LjIsNS41OEExLjkyLDEuOTIsMCwwLDAsMTIuODMsNUgzLjYxQTEuOTMsMS45MywwLDAsMCwxLjY4LDYuOTN2OS4yMmExLjkyLDEuOTIsMCwwLDAsLjU3LDEuMzZMMTUuODQsMzEuMWExLjkz''@;'; put 'put ''LDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMUExLjkzLDEuOTMsMCwwLDAsMjcuNzgsMTkuMTdaTTE3LjI2LDI5LjY5LDMuNjksMTYuMTVWN2g5LjFMMjYuMzcsMjAuNDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPGNpcmNs''@;'; put 'put ''ZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy43OCwxOS4xNywxNC4yLDUuNThBMS45MiwxLjkyLDAsMCwwLDEyLjgzLDVIMy42''@;'; put 'put ''MUExLjkzLDEuOTMsMCwwLDAsMS42OCw2LjkzdjkuMjJhMS45MiwxLjkyLDAsMCwwLC41NywxLjM2TDE1Ljg0LDMxLjFhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFBMS45MywxLjkzLDAsMCwwLDI3Ljc4LDE5LjE3Wk0xNy4yNiwyOS42OSwzLjY5LDE2LjE1VjdoOS4xTDI2LjM3''@;'; put 'put ''LDIwLjQ4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwzMS43NSwyMC40NSwyMS4yMiwz''@;'; put 'put ''MS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDI0LDE1LjRIMjIuMjNBMy42NSwzLjY1LDAsMCwxLDIxLDE1LjE5bDUuMzMsNS4yOS05LjExLDkuMjFMMy42OSwxNi4xNVY3aDkuMWw2LDUuOTRhMy42OCwzLjY4LDAsMCwxLC4xLTIuNjlM''@;'; put 'put ''MTQuMiw1LjU4QTEuOTIsMS45MiwwLDAsMCwxMi44Myw1SDMuNjFBMS45MywxLjkzLDAsMCwwLDEuNjgsNi45M3Y5LjIyYTEuOTIsMS45MiwwLDAsMCwuNTcsMS4zNkwxNS44NCwzMS4xYTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxQTEuOTMsMS45MywwLDAsMCwyNy43OCwxOS4x''@;'; put 'put ''N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAuODMsNi44LDE5LjU4LDUuNTVBMS45MiwxLjkyLDAsMCwwLDE4LjIxLDVIMTYuMTJMMTkuNzksOC42WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xNiwxOS4xMywyOS40MywxNS40SDI2LjY1bDUuMSw1TDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45Myww''@;'; put 'put ''LDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAs''@;'; put 'put ''MCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xNiwxOS4xMywxOS41''@;'; put 'put ''OCw1LjU1QTEuOTIsMS45MiwwLDAsMCwxOC4yMSw1SDE2LjEyTDMxLjc1LDIwLjQ1LDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMjcuNzgsMTkuMTcsMTQuMiw1LjU4QTEuOTIsMS45MiwwLDAsMCwxMi44Myw1SDMuNjFBMS45MywxLjkzLDAsMCwwLDEuNjgsNi45M3Y5LjIyYTEuOTIsMS45MiwwLDAsMCwuNTcsMS4zNkwxNS44NCwzMS4xYTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05''@;'; put 'put ''LjIxQTEuOTMsMS45MywwLDAsMCwyNy43OCwxOS4xN1pNNi42NywxMS43MkExLjczLDEuNzMsMCwxLDEsOC40LDEwLDEuNzMsMS43MywwLDAsMSw2LjY3LDExLjcyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4''@;'; put 'put ''LDE5LjE3LDE0LjIsNS41OEExLjkyLDEuOTIsMCwwLDAsMTIuODMsNUgzLjYxQTEuOTMsMS45MywwLDAsMCwxLjY4LDYuOTN2OS4yMmExLjkyLDEuOTIsMCwwLDAsLjU3LDEuMzZMMTUuODQsMzEuMWExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMUExLjkzLDEuOTMsMCwwLDAsMjcu''@;'; put 'put ''NzgsMTkuMTdaTTYuNjcsMTEuNzJBMS43MywxLjczLDAsMSwxLDguNCwxMCwxLjczLDEuNzMsMCwwLDEsNi42NywxMS43MloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMs''@;'; put 'put ''MTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwzMS43NSwyMC40NSwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMC44Myw2LjgsMTkuNTgs''@;'; put 'put ''NS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwxOS43OSw4LjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMjkuNDMsMTUuNEgyNi42NWw1LjEsNUwy''@;'; put 'put ''MS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDI0''@;'; put 'put ''LDE1LjRIMjIuMjNhMy42NywzLjY3LDAsMCwxLTMuMzYtNS4xNUwxNC4yLDUuNThBMS45MiwxLjkyLDAsMCwwLDEyLjgzLDVIMy42MUExLjkzLDEuOTMsMCwwLDAsMS42OCw2LjkzdjkuMjJhMS45MiwxLjkyLDAsMCwwLC41NywxLjM2TDE1Ljg0LDMxLjFhMS45MywxLjkzLDAsMCwwLDIuNzMs''@;'; put 'put ''MGw5LjIxLTkuMjFBMS45MywxLjkzLDAsMCwwLDI3Ljc4LDE5LjE3Wk02LjY3LDExLjcyQTEuNzMsMS43MywwLDEsMSw4LjQsMTAsMS43MywxLjczLDAsMCwxLDYuNjcsMTEuNzJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+JyksYi5DbHJTaGFwZUhpc3Rvcnk9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDkuODNhMSwxLDAsMCwwLTEsMXY4LjcybDUuOSw0QTEsMSwwLDAsMCwyNCwyMS44OGwtNS0zLjM5VjEwLjgzQTEsMSwwLDAs''@;'; put 'put ''MCwxOCw5LjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LjA5LDE2LjA5LDAsMCwwLDQsMTAuMjZWNS4yYTEsMSwwLDAsMC0yLDBWMTRoOC44YTEsMSwwLDAsMCwwLTJINS4zNUExNCwxNCwwLDEs''@;'; put 'put ''MSw4LjU4LDI4LjM1YTEsMSwwLDAsMC0xLjM1LDEuNDhBMTYsMTYsMCwxLDAsMTgsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JyksYi5DbHJTaGFwZUNsb2NrPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4''@;'; put 'put ''LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjkyLDE4LjRWMTAuNzVhMSwxLDAsMCwwLTIsMHY4Ljcy''@;'; put 'put ''bDUuOSw0YTEsMSwwLDEsMCwxLjExLTEuNjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTgsMTcuOTRBOS45NCw5Ljk0LDAsMCwxLDIzLjQxLDkuNTlsLjg1LTEuMzZhMTEuNTUsMTEuNTUsMCwxLDAtOC41Mywy''@;'; put 'put ''MUwxNiwyNy43QTEwLDEwLDAsMCwxLDgsMTcuOTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjkyLDEwLjc1YTEsMSwwLDAsMC0yLDB2OC43Mmw1LjksNGExLDEsMCwxLDAsMS4xMS0xLjY2bC01LTMuMzla''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MWE3LjQ0LDcuNDQsMCwwLDEtMS45MS41OCwxNC4wNSwxNC4wNSwwLDEsMS04LjYtOC42LDcuNDQsNy40NCwwLDAsMSwu''@;'; put 'put ''NTgtMS45MSwxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCw2LjM4YTExLjU2LDExLjU2LDAsMCwwLTIuMjcsMjIuODlMMTYsMjcu''@;'; put 'put ''N2ExMCwxMCwwLDEsMSw3LjM5LTE4LjFoMGE3LjQ1LDcuNDUsMCwwLDEtLjc4LTIuMjNBMTEuNDUsMTEuNDUsMCwwLDAsMTgsNi4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0i''@;'; put 'put ''MzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC45MiwxMC43NWExLDEsMCwwLDAtMiwwdjguNzJsNS45LDRhMSwxLDAsMSwwLDEuMTEt''@;'; put 'put ''MS42NmwtNS0zLjM5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43NywxNS4zOWgtMkExNCwxNCwwLDEsMSwyMi4wOSw0LjYxbDEtMS43NkExNiwxNiwwLDEsMCwzNCwxOCwx''@;'; put 'put ''NiwxNiwwLDAsMCwzMy43NywxNS4zOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsOGE5LjgxLDkuODEsMCwwLDEsMiwuMjNsLjg1LTEuNDZhMTEuNTUsMTEuNTUsMCwxLDAt''@;'; put 'put ''NS4xMywyMi41MkwxNiwyNy43QTEwLDEwLDAsMCwxLDE4LDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIz''@;'; put 'put ''LDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTYuMiwyMS4xOGExLDEsMCwwLDEtMS4zOS4yOGwtNS45LTRWMTAuNzVhMSwxLDAsMCwxLDIsMFYxOC40bDUsMy4zOUExLDEsMCwwLDEsMjQuMiwyMy4xOFpNMjMuODUsOC4yM2ExMS4zOSwxMS4zOSwwLDEs''@;'; put 'put ''MC04LjU0LDIwLjgzTDE1LDMwLjYzYTEzLDEzLDAsMSwxLDkuNy0yMy43N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MUE3LjQ4LDcuNDgsMCwwLDEsMjIuNjgsNy42MywxMS4yNCwxMS4yNCwwLDAs''@;'; put 'put ''MCwxOCw2LjZhMTEuMzksMTEuMzksMCwwLDAtMi42OSwyMi40N0wxNSwzMC42M0ExMywxMywwLDAsMSwxOCw1YTEyLjgxLDEyLjgxLDAsMCwxLDQuNTEuODIsNy40Niw3LjQ2LDAsMCwxLC42OC0yLjk0LDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1pNMjQuMiwyMy4xOGExLDEsMCwwLDEt''@;'; put 'put ''MS4zOS4yOGwtNS45LTRWMTAuNzVhMSwxLDAsMCwxLDIsMFYxOC40bDUsMy4zOUExLDEsMCwwLDEsMjQuMiwyMy4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9''@;'; put 'put ''IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzcsMTUuMzlIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2YzAtLjA5LS4wOS0uMTgtLjEzLS4yN1YxOC40''@;'; put 'put ''bDUsMy4zOWExLDEsMCwwLDEtMS4xMSwxLjY2bC01LjktNFYxMC43NWExLDEsMCwwLDEsMS45MS0uNDFBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlMMjAuNzQsN0ExMS4xOSwxMS4xOSwwLDAsMCwxOCw2LjZhMTEuMzksMTEuMzksMCwwLDAtMi42OSwyMi40N0wxNSwzMC42M0ExMywxMywwLDAs''@;'; put 'put ''MSwxOCw1YTEyLjgsMTIuOCwwLDAsMSwzLjU3LjUxbDEuNTMtMi42NkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwzMy43NywxNS4zOVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz4nKSxiLkNsclNoYXBlQWxhcm1DbG9jaz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDcsMy44NGE1Ljc4LDUuNzgsMCwwLDAtNy4zNy0uNjMsMTYuMDgsMTYuMDgsMCwwLDEsOC4yLDcuNjVBNS43Myw1LjczLDAsMCwwLDMxLjQ3LDMuODRa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE2LjQsNC4wOUExNCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43''@;'; put 'put ''NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFMMjgsMjcuNzhBMTQsMTQsMCwwLDAsMTYuNCw0LjA5Wk0xOS41OCwyOS45QTEyLDEyLDAsMSwxLDI5LjkyLDE5LjU2LDEyLDEyLDAsMCwxLDE5LjU4LDI5LjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTI0LjkyLDIwLjM0bC02LjA2LTNWOS41YS45LjksMCwwLDAtMS44LDB2OUwyNC4xMiwyMmEuOS45LDAsMSwwLC43OS0xLjYyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0x''@;'; put 'put ''MS40MiwzLjQzYTUuNzcsNS43NywwLDAsMC03LjY0LjQxLDUuNzIsNS43MiwwLDAsMC0uMzgsNy42NEExNi4wOCwxNi4wOCwwLDAsMSwxMS40MiwzLjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0xOC44Niw5LjVhLjkuOSwwLDAsMC0xLjgsMHY5TDI0LjEyLDIyYS45LjksMCwxLDAsLjc5LTEuNjJsLTYuMDYtM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MjgsMjcuNzhBMTMuODgsMTMuODgsMCwwLDAsMzEuNzcsMTUuNGgtMmExMi4wNywxMi4wNywwLDEsMS04LjY3LTlsMS0xLjhhMTQsMTQsMCwwLDAtMTQsMjMuMjdMNS41NiwzMC40M0ExLDEsMCwxLDAsNywzMS44NGwyLjY2LTIuNjZhMTMuOSwxMy45LDAsMCwwLDE2Ljg4LS4wOGwyLjc0LDIu''@;'; put 'put ''NzRhMSwxLDAsMCwwLDEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQy''@;'; put 'put ''LDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMjgsMjcuNzhBMTMuODgsMTMuODgsMCwwLDAsMzEuNzcsMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZMMTksMTMuNHYzLjc4TDI1LDIwLjFhMSwxLDAsMSwxLS44NywxLjhMMTcsMTguNDRWOS42OWExLDEsMCwwLDEsMiwwVjEwTDE5LDkuODlsMy01LjI4YTE0LDE0LDAs''@;'; put 'put ''MCwwLTE0LDIzLjI3TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVk''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuNDIsMy40M2E1Ljc3LDUuNzcsMCwwLDAtNy42NC40MSw1LjcyLDUuNzIsMCwwLDAtLjM4LDcuNjRBMTYuMDgsMTYuMDgsMCwwLDEsMTEuNDIsMy40M1oiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhhMTMuODksMTMuODksMCwwLDAsMy4yMS0xNC4zOUE3LjQ2LDcuNDYsMCwwLDEsMjIuNSw2YTcuNTIsNy41MiwwLDAsMSwuMTEtMS4yMUEx''@;'; put 'put ''NCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFabS0yLjUyLTYuMzVhMSwxLDAsMCwxLTEuMzMuNDdMMTcsMTguNDRWOS42OWExLDEs''@;'; put 'put ''MCwwLDEsMiwwdjcuNUwyNSwyMC4xQTEsMSwwLDAsMSwyNS40OSwyMS40M1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuNDIsMy40M2E1Ljc3LDUuNzcsMCwwLDAtNy42NC40MSw1LjcyLDUuNzIsMCwwLDAtLjM4LDcuNjRBMTYuMDgsMTYuMDgsMCwwLDEsMTEuNDIsMy40M1oiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4Ljg2LDkuNWEuOS45LDAsMCwwLTEuOCwwdjlMMjQuMTIsMjJhLjkuOSwwLDEsMCwuNzktMS42MmwtNi4wNi0zWiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhhMTMuODksMTMuODksMCwwLDAsMy4yMS0xNC4zOSw3LDcsMCwwLDEtMi4xMS4wNUExMiwxMiwwLDEsMSwyMi41Niw2LjksNy41NCw3LjU0LDAsMCwxLDIy''@;'; put 'put ''LjUsNmE3LjUyLDcuNTIsMCwwLDEsLjExLTEuMjFBMTQsMTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy45LDEzLjksMCwwLDAsMTYuODgtLjA4bDIuNzQsMi43NGExLDEsMCwwLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTMxLjQ3LDMuODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2LjA4LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43MywwLDAsMCwzMS40NywzLjg0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MTgsNEExNCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFMMjgsMjcuNzhBMTQsMTQsMCwwLDAsMTgsNFptNy40NywxNy40M2ExLDEs''@;'; put 'put ''MCwwLDEtMS4zMy40N0wxNywxOC40NFY5LjY5YTEsMSwwLDAsMSwyLDB2Ny41TDI1LDIwLjFBMSwxLDAsMCwxLDI1LjQ5LDIxLjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLGIuQ2xyU2hhcGVDaXJjbGVBcnJvdz0oMCxwLmNsckljb25TVkcpKCc8cGF0''@;'; put 'put ''aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4wOCw4''@;'; put 'put ''LjI2bC03LjYxLDcuNjFhMSwxLDAsMSwwLDEuNDEsMS40MUwxNywxMi4xOHYxNWExLDEsMCwwLDAsMiwwVjEybDUuMjgsNS4yOGExLDEsMCwxLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0x''@;'; put 'put ''OCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTgsMTUuNTdhMS40MywxLjQzLDAsMCwxLTIsMEwxOS40LDEzVjI3LjE0YTEuNCwxLjQsMCwwLDEtMi44LDB2LTE0bC00LjQzLDQuNDNhMS40LDEuNCwwLDAsMS0yLTJMMTguMDgsNy43LDI2LDE1LjU5QTEuNCwxLjQsMCww''@;'; put 'put ''LDEsMjYsMTcuNTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksYi5DbHJTaGFwZUNoaWxkQXJyb3c9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjgyLDE1LjhhMSwxLDAsMCwwLTEuNDEsMCwxLDEsMCwwLDAsMCwxLjQxTDI3LjIsMjFIOVYzLjc4''@;'; put 'put ''YTEsMSwwLDEsMC0yLDBWMjFhMiwyLDAsMCwwLDIsMkgyNy4xNWwtMy43NCwzLjc1YTEsMSwwLDAsMCwwLDEuNDEsMSwxLDAsMCwwLC43LjI5LDEsMSwwLDAsMCwuNzEtLjI5TDMxLDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksYi5DbHJTaGFw''@;'; put 'put ''ZUNvcHk9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjUsN2gtMTlBMS41LDEuNSwwLDAsMCw5LDguNXYyNEExLjUsMS41LDAsMCwwLDEwLjUsMzRoMTlBMS41LDEuNSwwLDAsMCwzMSwzMi41VjguNUExLjUsMS41LDAsMCwwLDI5LjUsN1pNMjksMzJIMTFWOUgyOVoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMy41QTEuNSwxLjUsMCwwLDAsMjQuNSwySDUuNUExLjUsMS41LDAsMCwwLDQsMy41djI0QTEuNSwxLjUsMCwwLDAsNS41LDI5SDZWNEgyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcsMy41NkExLjU2LDEuNTYsMCwwLDAsMjUuNDMsMkg1LjU3QTEuNTYsMS41NiwwLDAsMCw0LDMuNTZWMjguNDRBMS41NiwxLjU2LDAsMCwwLDUuNTcsMzBoLjUyVjQuMDdIMjdaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSI2IiB3aWR0aD0iMjMiIGhlaWdodD0iMjgiIHJ4PSIxLjUiIHJ5PSIxLjUiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxiLkNsclNoYXBlSGVscD0oMCxwLmNs''@;'; put 'put ''ckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0xOC4yOSw4LjkyYTcuMzgsNy4zOCwwLDAsMC01LjcyLDIuNTcsMSwxLDAsMCwwLS4zMi43MS45Mi45MiwwLDAsMCwuOTUuOTIsMS4wOCwxLjA4LDAsMCwwLC43MS0uMjksNS43LDUuNywwLDAsMSw0LjMzLTJjMi4zNiwwLDMuODMsMS41MiwzLjgzLDMuNDF2LjA1YzAsMi4yMS0x''@;'; put 'put ''Ljc2LDMuNDQtNC41NCwzLjY1YS44LjgsMCwwLDAtLjc2LjkyczAsMi4zMiwwLDIuNzVhMSwxLDAsMCwwLDEsLjloLjExYTEsMSwwLDAsMCwuOS0xVjE5LjQ1YzMtLjQyLDUuNDMtMiw1LjQzLTUuMjh2LS4wNUMyNC4xOCwxMS4xMiwyMS44NCw4LjkyLDE4LjI5LDguOTJaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTcuNzgiIGN5PSIyNi4yIiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjE4LDE0LjE3''@;'; put 'put ''di0uMDVjMC0zLTIuMzQtNS4yLTUuODgtNS4yYTcuMzgsNy4zOCwwLDAsMC01LjcyLDIuNTcsMSwxLDAsMCwwLS4zMi43MS45Mi45MiwwLDAsMCwuOTUuOTIsMS4wOCwxLjA4LDAsMCwwLC43MS0uMjksNS43LDUuNywwLDAsMSw0LjMzLTJjMi4zNiwwLDMuODMsMS41MiwzLjgzLDMuNDF2LjA1''@;'; put 'put ''YzAsMi4yMS0xLjc2LDMuNDQtNC41NCwzLjY1YS44LjgsMCwwLDAtLjc2LjkyczAsMi4zMiwwLDIuNzVhMSwxLDAsMCwwLDEsLjloLjExYTEsMSwwLDAsMCwuOS0xVjE5LjQ1QzIxLjc1LDE5LDI0LjE4LDE3LjQ1LDI0LjE4LDE0LjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxNy43OCIgY3k9IjI2LjIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTMzLjEyLDEyLjgxYTcuNDMsNy40MywwLDAsMS0xLjkxLjU4LDE0LjA1LDE0LjA1LDAsMSwxLTguNi04LjYsNy40NCw3LjQ0LDAsMCwxLC41OC0xLjkxLDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MWE3''@;'; put 'put ''LjQ5LDcuNDksMCwwLDEtOS45My05LjkzLDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1ptLTE1LjM0LDE1YTEuNjUsMS42NSwwLDEsMSwxLjY1LTEuNjVBMS42NSwxLjY1LDAsMCwxLDE3Ljc4LDI3Ljg1Wm0xLjM3LTguMDZ2MS43MmExLjM3LDEuMzcsMCwwLDEtMS4zLDEuMzZoLS4xMWEx''@;'; put 'put ''LjM0LDEuMzQsMCwwLDEtMS4zOS0xLjNjMC0uNDQsMC0yLjc2LDAtMi43NmExLjE5LDEuMTksMCwwLDEsMS4xMi0xLjMxYzEuNTctLjEyLDQuMTgtLjcsNC4xOC0zLjI1LDAtMS44My0xLjQxLTMuMDctMy40My0zLjA3YTUuMzEsNS4zMSwwLDAsMC00LDEuOTIsMS4zNiwxLjM2LDAsMCwxLTIu''@;'; put 'put ''MzUtLjksMS40MywxLjQzLDAsMCwxLC40My0xLDcuNzcsNy43NywwLDAsMSw2LTIuNjljMy43LDAsNi4yOCwyLjMsNi4yOCw1LjZDMjQuNTgsMTcuMTYsMjIuNjEsMTkuMiwxOS4xNSwxOS43OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2Vk''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwx''@;'; put 'put ''NiwwLDAsMCwxOCwyWm0tLjIyLDI1Ljg1YTEuNjUsMS42NSwwLDEsMSwxLjY1LTEuNjVBMS42NSwxLjY1LDAsMCwxLDE3Ljc4LDI3Ljg1Wm0xLjM3LTguMDZ2MS43MmExLjM3LDEuMzcsMCwwLDEtMS4zLDEuMzZoLS4xMWExLjM0LDEuMzQsMCwwLDEtMS4zOS0xLjNjMC0uNDQsMC0yLjc2LDAt''@;'; put 'put ''Mi43NmExLjE5LDEuMTksMCwwLDEsMS4xMi0xLjMxYzEuNTctLjEyLDQuMTgtLjcsNC4xOC0zLjI1LDAtMS44My0xLjQxLTMuMDctMy40My0zLjA3YTUuMzEsNS4zMSwwLDAsMC00LDEuOTIsMS4zNiwxLjM2LDAsMCwxLTIuMzUtLjksMS40MywxLjQzLDAsMCwxLC40My0xLDcuNzcsNy43Nyww''@;'; put 'put ''LDAsMSw2LTIuNjljMy43LDAsNi4yOCwyLjMsNi4yOCw1LjZDMjQuNTgsMTcuMTYsMjIuNjEsMTkuMiwxOS4xNSwxOS43OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxiLkNsclNoYXBlTG9naW49KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI4LDRI''@;'; put 'put ''MTJhMiwyLDAsMCwwLTIsMkgyOFYzMEgxMlYyMC4ySDEwVjMwYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyOCw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuMTIsMTgu''@;'; put 'put ''NDZhMSwxLDAsMSwwLDEuNDEsMS40MWw1Ljc5LTUuNzlMMTYuNTQsOC4yOWExLDEsMCwwLDAtMS40MSwxLjQxTDE4LjUsMTNINGExLDEsMCwwLDAtMSwxLDEsMSwwLDAsMCwxLDFIMTguNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTI4LDRIMTJhMiwyLDAsMCwwLTIsMnY3aDguNUwxNS4xMiw5LjcxYTEsMSwwLDAsMSwxLjQxLTEuNDFsNS43OSw1Ljc5LTUuNzksNS43OWExLDEsMCwwLDEtMS40MS0xLjQxTDE4LjUsMTVIMTBWMzBhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAs''@;'; put 'put ''MCwwLDI4LDRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLDEzSDRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGIuQ2xy''@;'; put 'put ''U2hhcGVMb2dvdXQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTcsNkgyM3Y5LjhoMlY2YTIsMiwwLDAsMC0yLTJIN0EyLDIsMCwwLDAsNSw2VjMwYTIsMiwwLDAsMCwyLDJIMjNhMiwyLDAsMCwwLDItMkg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4xNiwxNy4yOGExLDEsMCwwLDAtMS40MSwxLjQxTDMwLjEzLDIySDE1LjYzYTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWgxNC41bC0zLjM4LDMuNDZhMSwxLDAsMSwwLDEuNDEsMS40MUwzNCwyMy4wN1oiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMsNEg3QTIsMiwwLDAsMCw1LDZWMzBhMiwyLDAsMCwwLDIsMkgyM2EyLDIsMCwwLDAsMi0yVjI0SDE1LjYzYTEsMSwwLDAsMS0xLTEsMSwxLDAsMCwxLDEtMUgyNVY2QTIsMiwwLDAsMCwyMyw0WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjE2LDE3LjI4YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTMsMjJIMjV2Mmg1LjEzbC0zLjM4LDMuNDZhMSwxLDAsMSwwLDEuNDEsMS40MUwzNCwyMy4wN1oiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxiLkNsclNoYXBlUHJpbnRlcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjksOUgyN1Y1SDlWOUg3YTQsNCwwLDAsMC00LDRWMjRINi45MlYyMi4wOUg1VjEzYTIsMiwwLDAsMSwyLTJIMjlhMiwyLDAsMCwxLDIsMnY5SDI5''@;'; put 'put ''LjA4VjI0SDMzVjEzQTQsNCwwLDAsMCwyOSw5Wk0yNSw5SDExVjdIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE4SDhhMSwxLDAsMCwwLDAsMkg5VjMySDI3VjIwaDFhMSwxLDAsMCwwLDAtMlpNMjUs''@;'; put 'put ''MzBIMTFWMjBIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjEzLjA0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTI4LDE4SDhhMSwxLDAsMCwwLDAsMkg5VjMySDI3VjIwaDFhMSwxLDAsMCwwLDAtMlpNMjUsMzBIMTFWMjBIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBv''@;'; put 'put ''bHlnb24gcG9pbnRzPSIzMSAxNS40IDMxIDIyLjA5IDI5LjA4IDIyLjA5IDI5LjA4IDI0IDMzIDI0IDMzIDE1LjQgMzEgMTUuNCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEz''@;'; put 'put ''YTIsMiwwLDAsMSwyLTJIMTguNjRBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlMMTkuNTQsOUgxMVY3aDkuNzFsMS4xMy0ySDlWOUg3YTQsNCwwLDAsMC00LDRWMjRINi45MlYyMi4wOUg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0''@;'; put 'put ''ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMThIOGExLDEsMCwwLDAsMCwySDlWMzJIMjdWMjBoMWExLDEsMCwwLDAsMC0yWk0yNSwzMEgxMVYyMEgyNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjEzLjA0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0zMywxMi44OGE3LjQ1LDcuNDUsMCwwLDEtMiwuNTV2OC42NkgyOS4wOFYyNEgzM1YxM0MzMywxMywzMywxMi45MywzMywxMi44OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTUsMTNhMiwyLDAsMCwxLDItMkgyNC40MmE3LjUsNy41LDAsMCwxLTEuMjctMkgxMVY3SDIyLjU3YTcuNTIsNy41MiwwLDAsMS0uMDctMSw3LjU0LDcuNTQsMCwwLDEsLjA3LTFIOVY5SDdhNCw0LDAsMCwwLTQsNFYyNEg2LjkyVjIyLjA5SDVaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMjksOUgyN1Y1SDlWOUg3YTQsNCwwLDAsMC00LDRWMjRIOXY4SDI3VjI0aDZWMTNBNCw0LDAsMCwwLDI5LDlaTTI1LDI0djZIMTFWMTlIMjVaTTI1LDlIMTFWN0gyNVptNCw2SDI3VjEzaDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwxOS41NCw5SDExVjdoOS43MWwxLjEzLTJIOVY5SDdhNCw0LDAsMCwwLTQsNFYyNEg5djhIMjdWMjRoNlYxNS40Wk0yNSwyNHY2SDExVjE5SDI1WiIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCww''@;'; put 'put ''LDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDEyLjg4YTcuMyw3LjMsMCwwLDEtNCwuNTVWMTVIMjdWMTNoLjMyYTcuNTIsNy41Miww''@;'; put 'put ''LDAsMS00LjE4LTRIMTFWN0gyMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41NCw3LjU0LDAsMCwxLC4wNy0xSDlWOUg3YTQsNCwwLDAsMC00LDRWMjRIOXY4SDI3VjI0aDZWMTNDMzMsMTMsMzMsMTIuOTMsMzMsMTIuODhaTTI1LDI0djZIMTFWMTlIMjVaIiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLGIuQ2xyU2hhcGVX''@;'; put 'put ''b3JsZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYuNTQsMThhMTkuMzgsMTkuMzgsMCwwLDAtLjQzLTRoMy42YTEyLjMsMTIuMywwLDAsMC0uNjctMS42SDI1LjY5QTE5LjcyLDE5LjcyLDAsMCwwLDIyLjgsNi41M2ExMi4zLDEyLjMsMCwwLDAtMi41NS0uNzYsMTcuODMsMTcuODMs''@;'; put 'put ''MCwwLDEsMy44OSw2LjU5SDE4Ljc1VjUuNmMtLjI1LDAtLjUxLDAtLjc3LDBzLS40OSwwLS43MywwdjYuNzdIMTEuODZhMTcuODMsMTcuODMsMCwwLDEsMy45LTYuNiwxMi4yOCwxMi4yOCwwLDAsMC0yLjU0Ljc1LDE5LjcyLDE5LjcyLDAsMCwwLTIuOTEsNS44NUg2Ljk0QTEyLjMsMTIuMyww''@;'; put 'put ''LDAsMCw2LjI2LDE0SDkuODlhMTkuMzgsMTkuMzgsMCwwLDAtLjQzLDQsMTkuNjcsMTkuNjcsMCwwLDAsLjUsNC4zN0g2LjQyQTEyLjM0LDEyLjM0LDAsMCwwLDcuMTYsMjRoMy4yM2ExOS4zMiwxOS4zMiwwLDAsMCwyLjY5LDUuMzYsMTIuMjgsMTIuMjgsMCwwLDAsMi42MS43OUExNy45MSwx''@;'; put 'put ''Ny45MSwwLDAsMSwxMiwyNGg1LjI2djYuMzRjLjI0LDAsLjQ5LDAsLjczLDBzLjUxLDAsLjc3LDBWMjRIMjRhMTcuOSwxNy45LDAsMCwxLTMuNyw2LjE1LDEyLjI4LDEyLjI4LDAsMCwwLDIuNjItLjgxQTE5LjMyLDE5LjMyLDAsMCwwLDI1LjYxLDI0aDMuMmExMi4zNCwxMi4zNCwwLDAsMCwu''@;'; put 'put ''NzQtMS42SDI2QTE5LjY3LDE5LjY3LDAsMCwwLDI2LjU0LDE4Wm0tOS4yOSw0LjM3SDExLjUxYTE3LjY5LDE3LjY5LDAsMCwxLS4wOS04LjRoNS44M1ptNy4yNCwwSDE4Ljc1VjE0aDUuODNBMTguMjEsMTguMjEsMCwwLDEsMjUsMTgsMTguMTIsMTguMTIsMCwwLDEsMjQuNDksMjIuMzdaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTIsMTIuODFhNy40NCw3LjQ0LDAsMCwxLTEuOTEuNTgsMTQuMDUsMTQuMDUsMCwxLDEtOC42LTguNiw3LjQzLDcuNDMsMCwwLDEsLjU4LTEuOTEsMTYuMDYsMTYuMDYsMCwxLDAsOS45Myw5''@;'; put 'put ''LjkzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAuMjUsNS43N2ExNy44MywxNy44MywwLDAsMSwzLjg5LDYuNTlIMTguNzVWNS42Yy0uMjUsMC0uNTEsMC0uNzcsMHMtLjQ5LDAt''@;'; put 'put ''LjczLDB2Ni43N0gxMS44NmExNy44MywxNy44MywwLDAsMSwzLjktNi42LDEyLjI4LDEyLjI4LDAsMCwwLTIuNTQuNzUsMTkuNzIsMTkuNzIsMCwwLDAtMi45MSw1Ljg1SDYuOTRBMTIuMywxMi4zLDAsMCwwLDYuMjYsMTRIOS44OWExOS4zOCwxOS4zOCwwLDAsMC0uNDMsNCwxOS42NywxOS42''@;'; put 'put ''NywwLDAsMCwuNSw0LjM3SDYuNDJBMTIuMzQsMTIuMzQsMCwwLDAsNy4xNiwyNGgzLjIzYTE5LjMyLDE5LjMyLDAsMCwwLDIuNjksNS4zNiwxMi4yOCwxMi4yOCwwLDAsMCwyLjYxLjc5QTE3LjkxLDE3LjkxLDAsMCwxLDEyLDI0aDUuMjZ2Ni4zNGMuMjQsMCwuNDksMCwuNzMsMHMuNTEsMCwu''@;'; put 'put ''NzcsMFYyNEgyNGExNy45LDE3LjksMCwwLDEtMy43LDYuMTUsMTIuMjgsMTIuMjgsMCwwLDAsMi42Mi0uODFBMTkuMzIsMTkuMzIsMCwwLDAsMjUuNjEsMjRoMy4yYTEyLjM0LDEyLjM0LDAsMCwwLC43NC0xLjZIMjZhMTkuNjcsMTkuNjcsMCwwLDAsLjUtNC4zNywxOS4zOCwxOS4zOCwwLDAs''@;'; put 'put ''MC0uNDMtNGgzLjZjLS4wNi0uMTctLjEyLS4zMy0uMTktLjQ5YTcuNDUsNy40NSwwLDAsMS0zLjQ3LTEuMTFoLS4zNmMwLS4xMS0uMDgtLjIxLS4xMS0uMzJhNy40OCw3LjQ4LDAsMCwxLTMuMDYtNS42MkExMi40MSwxMi40MSwwLDAsMCwyMC4yNSw1Ljc3Wm0tMywxNi41OUgxMS41MWExNy42''@;'; put 'put ''OSwxNy42OSwwLDAsMS0uMDktOC40aDUuODNaTTI1LDE4YTE4LjEyLDE4LjEyLDAsMCwxLS41NSw0LjM3SDE4Ljc1VjE0aDUuODNBMTguMjEsMTguMjEsMCwwLDEsMjUsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMDUsMThhMjAuNDYsMjAuNDYsMCwwLDAsLjYy''@;'; put 'put ''LDQuOTNoNi40OFYxMy40NUgxMC41OEEyMC41NSwyMC41NSwwLDAsMCwxMC4wNSwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC44NSwxMy40NXY5LjQ4aDYuNDhBMjAuNDYsMjAuNDYsMCwwLDAsMjYsMThhMjAu''@;'; put 'put ''NTUsMjAuNTUsMCwwLDAtLjUyLTQuNTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk0zMC4yMiwyNC43MUgyNi42YTIxLjgsMjEuOCwwLDAsMS0z''@;'; put 'put ''LDYsMTMuODYsMTMuODYsMCwwLDEtMywuOTIsMjAuMjEsMjAuMjEsMCwwLDAsNC4xOC02Ljk0SDE4Ljg2djcuMTVjLS4yOSwwLS41NywwLS44Niwwcy0uNTUsMC0uODMsMFYyNC43MUgxMS4yMmEyMC4yMSwyMC4yMSwwLDAsMCw0LjE4LDYuOTUsMTMuODYsMTMuODYsMCwwLDEtMi45NC0uOSwy''@;'; put 'put ''MS44LDIxLjgsMCwwLDEtMy02LjA1SDUuNzhhMTMuOTQsMTMuOTQsMCwwLDEtLjgzLTEuODFoNEEyMi4yLDIyLjIsMCwwLDEsOC4zNywxOGEyMS44OCwyMS44OCwwLDAsMSwuNDgtNC41NUg0Ljc2YTEzLjg4LDEzLjg4LDAsMCwxLC43Ni0xLjgxSDkuMzNBMjIuMjYsMjIuMjYsMCwwLDEsMTIu''@;'; put 'put ''NjEsNWExMy44NiwxMy44NiwwLDAsMSwyLjg3LS44NCwyMC4xMywyMC4xMywwLDAsMC00LjQsNy40NWg2LjA5VjRjLjI4LDAsLjU1LDAsLjgzLDBzLjU4LDAsLjg2LDB2Ny42NGg2LjA5YTIwLjEzLDIwLjEzLDAsMCwwLTQuMzktNy40NEExMy44OSwxMy44OSwwLDAsMSwyMy40Myw1YTIyLjI2''@;'; put 'put ''LDIyLjI2LDAsMCwxLDMuMjcsNi41OWgzLjc3YTEzLjg5LDEzLjg5LDAsMCwxLC43NiwxLjgxSDI3LjE3QTIxLjg4LDIxLjg4LDAsMCwxLDI3LjY2LDE4YTIyLjIsMjIuMiwwLDAsMS0uNTcsNC45M2g0QTEzLjk0LDEzLjk0LDAsMCwxLDMwLjIyLDI0LjcxWiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjA1LDE4YTIwLjQ2LDIwLjQ2LDAsMCwwLC42Miw0LjkzaDYuNDhWMTMuNDVIMTAuNThBMjAuNTUsMjAuNTUsMCwwLDAsMTAuMDUsMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4Ljg1LDIyLjk0aDYuNDhBMjAuNDYsMjAuNDYsMCwwLDAsMjYsMThhMjAuNTUsMjAuNTUsMCwwLDAtLjUyLTQuNTVIMTguODVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTIt''@;'; put 'put ''LWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjEyLDEyLjgxYTcuNDQsNy40NCwwLDAsMS0xLjkuNTh2MEgzMWE2Ljc3LDYuNzcsMCwwLDEtMi4wNywwaC0xLjhBMjEuODgsMjEuODgsMCwwLDEsMjcuNjYsMThhMjIuMiwyMi4yLDAsMCwxLS41Nyw0LjkzaDRhMTMuOTQsMTMu''@;'; put 'put ''OTQsMCwwLDEtLjgzLDEuODFIMjYuNmEyMS44LDIxLjgsMCwwLDEtMyw2LDEzLjg2LDEzLjg2LDAsMCwxLTMsLjkyLDIwLjIxLDIwLjIxLDAsMCwwLDQuMTgtNi45NEgxOC44NnY3LjE1Yy0uMjksMC0uNTcsMC0uODYsMHMtLjU1LDAtLjgzLDBWMjQuNzFIMTEuMjJhMjAuMjEsMjAuMjEsMCww''@;'; put 'put ''LDAsNC4xOCw2Ljk1LDEzLjg2LDEzLjg2LDAsMCwxLTIuOTQtLjksMjEuOCwyMS44LDAsMCwxLTMtNi4wNUg1Ljc4YTEzLjk0LDEzLjk0LDAsMCwxLS44My0xLjgxaDRBMjIuMiwyMi4yLDAsMCwxLDguMzcsMThhMjEuODgsMjEuODgsMCwwLDEsLjQ4LTQuNTVINC43NmExMy44OCwxMy44OCww''@;'; put 'put ''LDAsMSwuNzYtMS44MUg5LjMzQTIyLjI2LDIyLjI2LDAsMCwxLDEyLjYxLDVhMTMuODYsMTMuODYsMCwwLDEsMi44Ny0uODQsMjAuMTMsMjAuMTMsMCwwLDAtNC40LDcuNDVoNi4wOVY0Yy4yOCwwLC41NSwwLC44Mywwcy41OCwwLC44NiwwdjcuNjRoNi4wOWwwLS4xM2E3LjQ3LDcuNDcsMCww''@;'; put 'put ''LDEtMi4zNi00Ljc2LDIwLjM3LDIwLjM3LDAsMCwwLTItMi41NSwxNC4yMywxNC4yMywwLDAsMSwyLjA2LjU2LDcuNDQsNy40NCwwLDAsMSwuNTctMS44NiwxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMt''@;'; put 'put ''LWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLGIuQ2xyU2hhcGVTbGlkZXI9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGgg''@;'; put 'put ''ZD0iTTEyLDEyLjM3QTQsNCwwLDAsMCw5LDguNDhWNUExLDEsMCwxLDAsNyw1VjguNDhhNCw0LDAsMCwwLDAsNy43OFYzMWExLDEsMCwxLDAsMiwwVjE2LjI2QTQsNCwwLDAsMCwxMiwxMi4zN1ptLTQsMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSw4LDE0LjRaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDE1LjgzYTQsNCwwLDAsMC0zLTMuODlWNWExLDEsMCwxLDAtMiwwdjYuOTRhNCw0LDAsMCwwLDAsNy43OFYzMWExLDEsMCwxLDAsMiwwVjE5LjcyQTQsNCwwLDAsMCwzMiwxNS44M1ptLTQsMmEy''@;'; put 'put ''LDIsMCwxLDEsMi0yQTIsMiwwLDAsMSwyOCwxNy44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsMjQuNWE0LDQsMCwwLDAtMy0zLjg5VjVhMSwxLDAsMSwwLTIsMFYyMC42MWE0LDQsMCwwLDAsMCw3Ljc4''@;'; put 'put ''VjMxYTEsMSwwLDEsMCwyLDBWMjguMzlBNCw0LDAsMCwwLDIyLDI0LjVabS00LDJhMiwyLDAsMSwxLDItMkEyLDIsMCwwLDEsMTgsMjYuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTksOS4yOVY1QTEsMSww''@;'; put 'put ''LDEsMCw3LDVWOS4zYTMuMjIsMy4yMiwwLDAsMCwwLDYuMTFWMzFhMSwxLDAsMSwwLDIsMFYxNS40M0EzLjIyLDMuMjIsMCwwLDAsOSw5LjI5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDIxLjQ1VjVhMSwxLDAs''@;'; put 'put ''MSwwLTIsMFYyMS40N2EzLjIyLDMuMjIsMCwwLDAsMCw2LjExVjMxYTEsMSwwLDEsMCwyLDBWMjcuNmEzLjIyLDMuMjIsMCwwLDAsMC02LjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LDEyLjc1VjVhMSwxLDAs''@;'; put 'put ''MSwwLTIsMHY3Ljc2YTMuMjIsMy4yMiwwLDAsMCwwLDYuMTFWMzFhMSwxLDAsMSwwLDIsMFYxOC44OWEzLjIyLDMuMjIsMCwwLDAsMC02LjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLGIuQ2xyU2hhcGVDbGlwYm9hcmQ9KDAscC5jbHJJY29uU1ZHKSgn''@;'; put 'put ''PHBhdGggZD0iTTI5LjI5LDVIMjdWN2gyVjMySDdWN0g5VjVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjYuNjlBMS43LDEuNywwLDAsMCwyOS4yOSw1WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsNy4zM0EyLjM0LDIuMzQsMCwwLDAsMjMuNjcsNUgyMS44N2E0LDQsMCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI2Wk0yNCw5SDEyVjcuMzNBLjMzLjMzLDAs''@;'; put 'put ''MCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCwwVjdoMy42N2EuMzMuMzMsMCwwLDEsLjMzLjMzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTQiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0i''@;'; put 'put ''MTEiIHk9IjIyIiB3aWR0aD0iMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjYiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxNCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOCIg''@;'; put 'put ''d2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyMiIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyNiIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0yMy4xMyw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCwwVjdoMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xaC0uN2E0LDQsMCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3''@;'; put 'put ''LjMzVjExSDI0LjQyQTcuNSw3LjUsMCwwLDEsMjMuMTMsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNTIsNy41MiwwLDAsMS0xLS4wN1YzMkg3VjdIOVY1SDdB''@;'; put 'put ''MS43NSwxLjc1LDAsMCwwLDUsNi42OVYzMi4zMUExLjcsMS43LDAsMCwwLDYuNzEsMzRIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4zMVYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJh''@;'; put 'put ''ZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4yOSw1SDIyLjE3YTQu''@;'; put 'put ''NDUsNC40NSwwLDAsMC00LjExLTNBNC40Niw0LjQ2LDAsMCwwLDE0LDVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjYuNjlBMS43LDEuNywwLDAsMCwyOS4yOSw1Wm0tMTgsM2ExLDEsMCww''@;'; put 'put ''LDEsMS0xaDMuNDRWNi4zMWEyLjMxLDIuMzEsMCwxLDEsNC42MywwVjdoMy40NGExLDEsMCwwLDEsMSwxdjJIMTEuMzFaTTI1LDI4SDExVjI2SDI1Wm0wLTRIMTFWMjJIMjVabTAtNEgxMVYxOEgyNVptMC00SDExVjE0SDI1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNDksNy40OSwwLDAsMSwyMy42NiwxMEgxMS4zMVY4YTEsMSwwLDAsMSwxLTFoMy40NFY2LjMxYTIuMzEsMi4zMSwwLDEsMSw0LjYzLDBWN2gyLjE5YTcuNTQsNy41NCwwLDAsMS0uMDctMSw3LjUyLDcuNTIsMCwwLDEsLjA3''@;'; put 'put ''LTFoLS40YTQuNDUsNC40NSwwLDAsMC00LjExLTNBNC40Niw0LjQ2LDAsMCwwLDE0LDVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjEzLjQzQTcuNTIsNy41MiwwLDAsMSwzMCwxMy41Wk0y''@;'; put 'put ''NSwyOEgxMVYyNkgyNVptMC00SDExVjIySDI1Wm0wLTRIMTFWMThIMjVabTAtNEgxMVYxNEgyNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksYi5DbHJTaGFwZUZpcmV3YWxsPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwy''@;'; put 'put ''LTJWOEEyLDIsMCwwLDAsMzIsNlpNNCw4SDMydjUuMDhIMjMuOHYtNEgyMnY0SDE0di00SDEydjRINFptMCw3SDMydjYuMDhIMjguOTJWMTYuMjdIMjd2NC44MUgxOC45MlYxNi4yN0gxN3Y0LjgxSDguOVYxNi4yN0g3djQuODFINFpNMjMuOCwyOFYyNC4yN0gyMi4yVjI4SDE0VjI0LjI3aC0x''@;'; put 'put ''LjZWMjhINFYyM0gzMnY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMnY1LjY4SDI4LjkyVjE2LjI3SDI3djQuODFIMTguOTJWMTYuMjdIMTd2NC44MUg4LjlWMTYuMjdIN3Y0LjgxSDRW''@;'; put 'put ''MTVIMjAuNThhMy41OCwzLjU4LDAsMCwxLTEuNzYtMS45MkgxNHYtNEgxMnY0SDRWOEgyMC4xNGwxLjE1LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNMjMuOCwyOFYyNC4yN0gyMi4yVjI4SDE0VjI0LjI3aC0xLjZWMjhINFYyM0gz''@;'; put 'put ''MnY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4''@;'; put 'put ''LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ3LDcuNDcsMCww''@;'; put 'put ''LDEtMi40NS0uNDJIMjMuOFYxMC4yMmE3LjUsNy41LDAsMCwxLS42My0xLjE0SDIydjRIMTR2LTRIMTJ2NEg0VjhIMjIuNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwx''@;'; put 'put ''LDMwLDEzLjVaTTQsMTVIMzJ2Ni4wOEgyOC45MlYxNi4yN0gyN3Y0LjgxSDE4LjkyVjE2LjI3SDE3djQuODFIOC45VjE2LjI3SDd2NC44MUg0Wk0yMy44LDI4VjI0LjI3SDIyLjJWMjhIMTRWMjQuMjdoLTEuNlYyOEg0VjIzSDMydjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTE0LDI4SDEyVjI0aDJabTEwLDBIMjJWMjRoMlptOC02SDRWMjBIN1YxNkg5djRoOFYxNmgydjRoOFYxNmgydjRoM1ptMC04SDRWMTJoOFY4aDJ2NGg4''@;'; put 'put ''VjhoMnY0aDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LjM1LDE0SDRWMTJoOFY4aDJ2NGg0LjU3QTMuNjcsMy42NywwLDAsMSwxOSw5Ljg5TDIxLjI5''@;'; put 'put ''LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNMTQsMjhIMTJWMjRoMlptMTAsMEgyMlYyNGgyWm04LTZINFYyMEg3VjE2SDl2NGg4VjE2aDJ2NGg4VjE2aDJ2NGgzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LDEwLjQ5VjEyaDEuNTFBNy41Myw3LjUzLDAsMCwxLDI0LDEwLjQ5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMTRINFYxMmg4VjhoMnY0aDhWOGguNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRB''@;'; put 'put ''Ny40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWk0xNCwyOEgxMlYyNGgyWm0xMCwwSDIyVjI0aDJabTgtNkg0VjIwSDdWMTZIOXY0aDhWMTZoMnY0aDhWMTZoMnY0aDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGIuQ2xyU2hhcGVMaXN0PSgwLHAuY2xySWNvblNWRykoJzxyZWN0IHg9IjE1IiB5PSI4IiB3aWR0aD0iOSIg''@;'; put 'put ''aGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIxMiIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cmVjdCB4PSIxNSIgeT0iMTYiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjIwIiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIyNCIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iOCIgd2lkdGg9''@;'; put 'put ''IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjE2IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyMCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwySDhBMiwy''@;'; put 'put ''LDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlptMCwzMEg4VjRIMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTIiIHdpZHRoPSI5''@;'; put 'put ''IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIxNiIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjIwIiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIx''@;'; put 'put ''NSIgeT0iMjQiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxyZWN0IHg9IjExIiB5PSIxNiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTkt''@;'; put 'put ''LWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSw4djJoOC42NmE3LjQ1LDcuNDUsMCwwLDEtLjg5LTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIy''@;'; put 'put ''VjMySDhWNEgyMi43OGE3LjQ1LDcuNDUsMCwwLDEsLjg4LTJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyOCwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTExLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDJIOEEy''@;'; put 'put ''LDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwyOCwyWk0xMywyNkgxMVYyNGgyWm0wLTRIMTFWMjBoMlptMC00SDExVjE2aDJabTAtNEgxMVYxMmgyWm0wLTRIMTFWOGgyWk0yNSwyNkgxNVYyNEgyNVptMC00SDE1VjIwSDI1Wm0wLTRI''@;'; put 'put ''MTVWMTZIMjVabTAtNEgxNVYxMkgyNVptMC00SDE1VjhIMjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjY2LDEwSDE1VjhoNy43OGE3LjQyLDcuNDIsMCwwLDEsLjg5LTZIOEEyLDIsMCwwLDAsNiw0VjMyYTIs''@;'; put 'put ''MiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyMy42NiwxMFpNMTMsMjZIMTFWMjRoMlptMC00SDExVjIwaDJabTAtNEgxMVYxNmgyWm0wLTRIMTFWMTJoMlptMC00SDExVjhoMlpNMjUsMjZIMTVWMjRIMjVabTAtNEgxNVYyMEgyNVptMC00SDE1VjE2''@;'; put 'put ''SDI1Wm0wLTRIMTVWMTJIMjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''Mi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGIuQ2xyU2hhcGVSZWRvPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNCw0LjIyYTEsMSwwLDAsMC0xLjQxLDEuNDJsNS41Niw1LjQ5aC0xM0ExMSwxMSwwLDAsMCwxMC4wNywzMiwxLDEsMCwwLDAsMTEsMzAuMThhOSw5LDAsMCwxLTUt''@;'; put 'put ''OCw5LjA4LDkuMDgsMCwwLDEsOS4xMy05aDEzbC01LjU0LDUuNDhBMSwxLDAsMCwwLDI0LDIwbDgtNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVVbmRvPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMC44NywxMS4x''@;'; put 'put ''NGgtMTNsNS41Ni01LjQ5QTEsMSwwLDAsMCwxMiw0LjIyTDQsMTIuMTMsMTIsMjBhMSwxLDAsMCwwLDEuNDEtMS40Mkw3Ljg2LDEzLjE0aDEzYTkuMDgsOS4wOCwwLDAsMSw5LjEzLDksOSw5LDAsMCwxLTUsOEExLDEsMCwwLDAsMjUuOTMsMzJhMTEsMTEsMCwwLDAtNS4wNi0yMC44MloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVTY3JvbGw9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDExLjEyVjYuNThhNC41LDQuNSwwLDAsMC00LjUtNC41aC0xNkE0LjUsNC41LDAsMCwwLDksNi41OHYyM2EyLjUsMi41LDAs''@;'; put 'put ''MSwxLTUsMFYyNkg3LjE5VjI0SDJ2NS41QTQuNSw0LjUsMCwwLDAsNi41LDM0SDI1LjU4YTQuNSw0LjUsMCwwLDAsNC41LTQuNVYxMy4xM2gtMlYyOS41NGEyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQu''@;'; put 'put ''NTRabS00LjUtN0EyLjUsMi41LDAsMCwxLDMyLDYuNThWOS4xMkgxOFY2LjU4YTQuNDgsNC40OCwwLDAsMC0uNzYtMi41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMDgsMTUuNFYyOS41NGEyLjUsMi41''@;'; put 'put ''LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRoMi42MUEzLjY2LDMuNjYsMCwwLDEsMTksOS44OWwuNDQtLjc2SDE4VjYuNThhNC40OCw0LjQ4LDAsMCwwLS43Ni0yLjVIMjIuNGwxLjE1LTJIMTMuNUE0LjUsNC41''@;'; put 'put ''LDAsMCwwLDksNi41OHYyM2EyLjUsMi41LDAsMSwxLTUsMFYyNkg3LjE5VjI0SDJ2NS41QTQuNSw0LjUsMCwwLDAsNi41LDM0SDI1LjU4YTQuNSw0LjUsMCwwLDAsNC41LTQuNVYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0''@;'; put 'put ''ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtMS45Mi0uMjZ2MTYuM2EyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43''@;'; put 'put ''Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRoOC41NGE3LjUsNy41LDAsMCwxLTEuMzUtMkgxOFY2LjU4YTQuNDgsNC40OCwwLDAsMC0uNzYtMi41aDUuNTJhNy40NCw3LjQ0LDAsMCwxLC44Ni0ySDEzLjVBNC41LDQuNSwwLDAsMCw5LDYuNTh2MjNhMi41LDIuNSwwLDEsMS01LDBW''@;'; put 'put ''MjZINy4xOVYyNEgydjUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjV2LTE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5''@;'; put 'put ''PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LDExLjEyVjYuNThhNC41LDQuNSwwLDAsMC00LjUtNC41aC0xNkE0LjUsNC41LDAsMCwwLDks''@;'; put 'put ''Ni41OFYyNEgydjUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjVWMTMuMTNoLTJWMjkuNTRhMi41LDIuNSwwLDAsMS0yLjUsMi41SDEwLjI0YTQuNDcsNC40NywwLDAsMCwuNzYtMi41di0yM2EyLjUsMi41LDAsMCwxLDUsMHY0LjU0WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4wOCwxNS40VjI5LjU0YTIuNSwyLjUsMCwwLDEtMi41LDIuNUgxMC4yNGE0LjQ3LDQuNDcsMCwwLDAsLjc2LTIuNXYtMjNhMi41LDIuNSwwLDAsMSw1LDB2NC41NGgyLjYxQTMuNjYs''@;'; put 'put ''My42NiwwLDAsMSwxOSw5Ljg5bDQuNTEtNy44SDEzLjVBNC41LDQuNSwwLDAsMCw5LDYuNThWMjRIMnY1LjVBNC41LDQuNSwwLDAsMCw2LjUsMzRIMjUuNThhNC41LDQuNSwwLDAsMCw0LjUtNC41VjE1LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtMS45Mi0uMjZ2MTYuM2EyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCww''@;'; put 'put ''LC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRoOC41NGE3LjQ2LDcuNDYsMCwwLDEtLjkyLTlIMTMuNUE0LjUsNC41LDAsMCwwLDksNi41OFYyNEgydjUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjV2LTE2WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxiLkNs''@;'; put 'put ''clNoYXBlRmlsZVNldHRpbmdzPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy44MywyMy40M2ExLjE2LDEuMTYsMCwwLDAtLjcxLTEuMTJsLTEuNjgtLjVjLS4wOS0uMjQtLjE4LS40OC0uMjktLjcxbC43OC0xLjQ0YTEuMTYsMS4xNiwwLDAsMC0uMjEtMS4zN2wtMS40Mi0xLjQxYTEu''@;'; put 'put ''MTYsMS4xNiwwLDAsMC0xLjM3LS4ybC0xLjQ1Ljc2YTcuODQsNy44NCwwLDAsMC0uNzYtLjMybC0uNDgtMS41OGExLjE1LDEuMTUsMCwwLDAtMS4xMS0uNzdoLTJhMS4xNiwxLjE2LDAsMCwwLTEuMTEuODJsLS40NywxLjU0YTcuNzYsNy43NiwwLDAsMC0uNzcuMzJsLTEuNDItLjc2YTEuMTYs''@;'; put 'put ''MS4xNiwwLDAsMC0xLjM2LjJsLTEuNDUsMS40YTEuMTYsMS4xNiwwLDAsMC0uMjEsMS4zOEwxNy4wOCwyMWE3LjY0LDcuNjQsMCwwLDAtLjMxLjc0bC0xLjU4LjQ3YTEuMTUsMS4xNSwwLDAsMC0uODMsMS4xMXYyYTEuMTUsMS4xNSwwLDAsMCwuODMsMS4xbDEuNTkuNDdhNy41Myw3LjUzLDAs''@;'; put 'put ''MCwwLC4zMS43MmwtLjc4LDEuNDZhMS4xNiwxLjE2LDAsMCwwLC4yMSwxLjM3bDEuNDIsMS40YTEuMTYsMS4xNiwwLDAsMCwxLjM3LjIxbDEuNDgtLjc4Yy4yMy4xMS40Ny4yLjcyLjI5TDIyLDMzLjE4YTEuMTYsMS4xNiwwLDAsMCwxLjExLjgxaDJhMS4xNiwxLjE2LDAsMCwwLDEuMTEtLjgy''@;'; put 'put ''bC40Ny0xLjU4Yy4yNC0uMDguNDctLjE4LjctLjI5bDEuNS43OWExLjE2LDEuMTYsMCwwLDAsMS4zNi0uMmwxLjQyLTEuNGExLjE2LDEuMTYsMCwwLDAsLjIxLTEuMzhsLS43OS0xLjQ1cS4xNi0uMzQuMjktLjY5TDMzLDI2LjVhMS4xNSwxLjE1LDAsMCwwLC44My0xLjExWm0tMS42LDEuNjMt''@;'; put 'put ''Mi4xMS42Mi0uMTIuNDJhNiw2LDAsMCwxLS41LDEuMTlsLS4yMS4zOCwxLDEuOTEtMSwxLTItMS0uMzcuMmE2LjIxLDYuMjEsMCwwLDEtMS4yLjQ5bC0uNDIuMTItLjYzLDIuMDlIMjMuNDJsLS42My0yLjA4LS40Mi0uMTJhNi4yMyw2LjIzLDAsMCwxLTEuMjEtLjQ5bC0uMzctLjItMS45NCwx''@;'; put 'put ''LTEtMSwxLTEuOTQtLjIyLS4zOEE2LDYsMCwwLDEsMTguMTcsMjZMMTgsMjUuNjMsMTYsMjVWMjMuNjlMMTgsMjMuMDhsLjEzLS40MWE1Ljk0LDUuOTQsMCwwLDEsLjUzLTEuMjNMMTguOSwyMWwtMS0xLjg1LDEtLjk0LDEuODksMSwuMzgtLjIxYTYuMjMsNi4yMywwLDAsMSwxLjI2LS41Mmwu''@;'; put 'put ''NDEtLjEyLjYzLTJoMS4zOGwuNjIsMiwuNDEuMTJBNi4yMSw2LjIxLDAsMCwxLDI3LjEsMTlsLjM4LjIxLDEuOTItMSwxLDEtMSwxLjg5LjIxLjM4YTYuMDgsNi4wOCwwLDAsMSwuNSwxLjIxbC4xMi40MiwyLjA2LjYxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMTIsMjAuMzVhNCw0LDAsMSwwLDQuMDgsNEE0LjA2LDQuMDYsMCwwLDAsMjQuMTIsMjAuMzVabTAsNi40NmEyLjQzLDIuNDMsMCwxLDEsMi40OC0yLjQzQTIuNDYsMi40NiwwLDAsMSwyNC4xMiwyNi44MloiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjQ5LDMxSDZWNUgyNnY3Ljg5YTMuMiwzLjIsMCwwLDEsMiwxLjcyVjVhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4x''@;'; put 'put ''MSwzLjExLDAsMCwxLDE0LjQ5LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMTIsMjAuMzVhNCw0LDAsMSwwLDQuMDgsNEE0LjA2LDQuMDYsMCwwLDAsMjQuMTIsMjAuMzVabTAsNi40NmEyLjQzLDIu''@;'; put 'put ''NDMsMCwxLDEsMi40OC0yLjQzQTIuNDYsMi40NiwwLDAsMSwyNC4xMiwyNi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjgzLDIzLjQzYTEuMTYsMS4xNiwwLDAsMC0u''@;'; put 'put ''NzEtMS4xMmwtMS42OC0uNWMtLjA5LS4yNC0uMTgtLjQ4LS4yOS0uNzFsLjc4LTEuNDRhMS4xNiwxLjE2LDAsMCwwLS4yMS0xLjM3bC0xLjQyLTEuNDFhMS4xNiwxLjE2LDAsMCwwLTEuMzctLjJsLTEuNDUuNzZhNy44NCw3Ljg0LDAsMCwwLS43Ni0uMzJsLS40OC0xLjU4YTEuMTUsMS4xNSww''@;'; put 'put ''LDAsMC0xLjExLS43N2gtMmExLjE2LDEuMTYsMCwwLDAtMS4xMS44MmwtLjQ3LDEuNTRhNy43Niw3Ljc2LDAsMCwwLS43Ny4zMmwtMS40Mi0uNzZhMS4xNiwxLjE2LDAsMCwwLTEuMzYuMmwtMS40NSwxLjRhMS4xNiwxLjE2LDAsMCwwLS4yMSwxLjM4TDE3LjA4LDIxYTcuNjQsNy42NCwwLDAs''@;'; put 'put ''MC0uMzEuNzRsLTEuNTguNDdhMS4xNSwxLjE1LDAsMCwwLS44MywxLjExdjJhMS4xNSwxLjE1LDAsMCwwLC44MywxLjFsMS41OS40N2E3LjUzLDcuNTMsMCwwLDAsLjMxLjcybC0uNzgsMS40NmExLjE2LDEuMTYsMCwwLDAsLjIxLDEuMzdsMS40MiwxLjRhMS4xNiwxLjE2LDAsMCwwLDEuMzcu''@;'; put 'put ''MjFsMS40OC0uNzhjLjIzLjExLjQ3LjIuNzIuMjlMMjIsMzMuMThhMS4xNiwxLjE2LDAsMCwwLDEuMTEuODFoMmExLjE2LDEuMTYsMCwwLDAsMS4xMS0uODJsLjQ3LTEuNThjLjI0LS4wOC40Ny0uMTguNy0uMjlsMS41Ljc5YTEuMTYsMS4xNiwwLDAsMCwxLjM2LS4ybDEuNDItMS40YTEuMTYs''@;'; put 'put ''MS4xNiwwLDAsMCwuMjEtMS4zOGwtLjc5LTEuNDVxLjE2LS4zNC4yOS0uNjlMMzMsMjYuNWExLjE1LDEuMTUsMCwwLDAsLjgzLTEuMTFabS0xLjYsMS42My0yLjExLjYyLS4xMi40MmE2LDYsMCwwLDEtLjUsMS4xOWwtLjIxLjM4LDEsMS45MS0xLDEtMi0xLS4zNy4yYTYuMjEsNi4yMSwwLDAs''@;'; put 'put ''MS0xLjIuNDlsLS40Mi4xMi0uNjMsMi4wOUgyMy40MmwtLjYzLTIuMDgtLjQyLS4xMmE2LjIzLDYuMjMsMCwwLDEtMS4yMS0uNDlsLS4zNy0uMi0xLjk0LDEtMS0xLDEtMS45NC0uMjItLjM4QTYsNiwwLDAsMSwxOC4xNywyNkwxOCwyNS42MywxNiwyNVYyMy42OUwxOCwyMy4wOGwuMTMtLjQx''@;'; put 'put ''YTUuOTQsNS45NCwwLDAsMSwuNTMtMS4yM0wxOC45LDIxbC0xLTEuODUsMS0uOTQsMS44OSwxLC4zOC0uMjFhNi4yMyw2LjIzLDAsMCwxLDEuMjYtLjUybC40MS0uMTIuNjMtMmgxLjM4bC42MiwyLC40MS4xMkE2LjIxLDYuMjEsMCwwLDEsMjcuMSwxOWwuMzguMjEsMS45Mi0xLDEsMS0xLDEu''@;'; put 'put ''ODkuMjEuMzhhNi4wOCw2LjA4LDAsMCwxLC41LDEuMjFsLjEyLjQyLDIuMDYuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC40OSwzMUg2VjVIMjEuODdMMjMsM0g2QTIs''@;'; put 'put ''MiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUs''@;'; put 'put ''MS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuODMsMjMuNDNhMS4xNiwxLjE2LDAsMCwwLS43MS0xLjEybC0xLjY4LS41Yy0uMDktLjI0LS4xOC0uNDgtLjI5LS43MWwuNzgtMS40NGExLjE2LDEuMTYsMCwwLDAtLjIxLTEuMzdsLTEuNDItMS40MWExLjE2''@;'; put 'put ''LDEuMTYsMCwwLDAtMS4zNy0uMmwtMS40NS43NmE3Ljg0LDcuODQsMCwwLDAtLjc2LS4zMmwtLjQ4LTEuNThhMS4xNSwxLjE1LDAsMCwwLTEuMTEtLjc3aC0yYTEuMTYsMS4xNiwwLDAsMC0xLjExLjgybC0uNDcsMS41NGE3Ljc2LDcuNzYsMCwwLDAtLjc3LjMybC0xLjQyLS43NmExLjE2LDEu''@;'; put 'put ''MTYsMCwwLDAtMS4zNi4ybC0xLjQ1LDEuNGExLjE2LDEuMTYsMCwwLDAtLjIxLDEuMzhMMTcuMDgsMjFhNy42NCw3LjY0LDAsMCwwLS4zMS43NGwtMS41OC40N2ExLjE1LDEuMTUsMCwwLDAtLjgzLDEuMTF2MmExLjE1LDEuMTUsMCwwLDAsLjgzLDEuMWwxLjU5LjQ3YTcuNTMsNy41MywwLDAs''@;'; put 'put ''MCwuMzEuNzJsLS43OCwxLjQ2YTEuMTYsMS4xNiwwLDAsMCwuMjEsMS4zN2wxLjQyLDEuNGExLjE2LDEuMTYsMCwwLDAsMS4zNy4yMWwxLjQ4LS43OGMuMjMuMTEuNDcuMi43Mi4yOUwyMiwzMy4xOGExLjE2LDEuMTYsMCwwLDAsMS4xMS44MWgyYTEuMTYsMS4xNiwwLDAsMCwxLjExLS44Mmwu''@;'; put 'put ''NDctMS41OGMuMjQtLjA4LjQ3LS4xOC43LS4yOWwxLjUuNzlhMS4xNiwxLjE2LDAsMCwwLDEuMzYtLjJsMS40Mi0xLjRhMS4xNiwxLjE2LDAsMCwwLC4yMS0xLjM4bC0uNzktMS40NXEuMTYtLjM0LjI5LS42OUwzMywyNi41YTEuMTUsMS4xNSwwLDAsMCwuODMtMS4xMVptLTEuNiwxLjYzLTIu''@;'; put 'put ''MTEuNjItLjEyLjQyYTYsNiwwLDAsMS0uNSwxLjE5bC0uMjEuMzgsMSwxLjkxLTEsMS0yLTEtLjM3LjJhNi4yMSw2LjIxLDAsMCwxLTEuMi40OWwtLjQyLjEyLS42MywyLjA5SDIzLjQybC0uNjMtMi4wOC0uNDItLjEyYTYuMjMsNi4yMywwLDAsMS0xLjIxLS40OWwtLjM3LS4yLTEuOTQsMS0x''@;'; put 'put ''LTEsMS0xLjk0LS4yMi0uMzhBNiw2LDAsMCwxLDE4LjE3LDI2TDE4LDI1LjYzLDE2LDI1VjIzLjY5TDE4LDIzLjA4bC4xMy0uNDFhNS45NCw1Ljk0LDAsMCwxLC41My0xLjIzTDE4LjksMjFsLTEtMS44NSwxLS45NCwxLjg5LDEsLjM4LS4yMWE2LjIzLDYuMjMsMCwwLDEsMS4yNi0uNTJsLjQx''@;'; put 'put ''LS4xMi42My0yaDEuMzhsLjYyLDIsLjQxLjEyQTYuMjEsNi4yMSwwLDAsMSwyNy4xLDE5bC4zOC4yMSwxLjkyLTEsMSwxLTEsMS44OS4yMS4zOGE2LjA4LDYuMDgsMCwwLDEsLjUsMS4yMWwuMTIuNDIsMi4wNi42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC4xMiwyMC4zNWE0LDQsMCwxLDAsNC4wOCw0QTQuMDYsNC4wNiwwLDAsMCwyNC4xMiwyMC4zNVptMCw2LjQ2YTIuNDMsMi40MywwLDEsMSwyLjQ4LTIuNDNBMi40NiwyLjQ2LDAsMCwxLDI0LjEyLDI2LjgyWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjQ5LDMxSDZWNUgyMy4wOGE2Ljk0LDYuOTQsMCwwLDEsLjYtMkg2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wt''@;'; put 'put ''MS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE1LjMzVjEyLjcxYTcsNywwLDAsMS0yLTF2MS44OEEzLjIsMy4yLDAs''@;'; put 'put ''MCwxLDI4LDE1LjMzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LjU1LDMxSDZWNUgyNnY4Ljc4YTIuMzcsMi4zNywwLDAsMSwyLDEuNTdWNWEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNVYzMWEyLDIsMCwwLDAsMiwySDE3LjE2bC0xLTFBMi4zOCwyLjM4''@;'; put 'put ''LDAsMCwxLDE1LjU1LDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy41NCwyMy40N2wtMi0uNjFhNy4wNiw3LjA2LDAsMCwwLS41OC0xLjQxbDEtMS44NmEuMzcuMzcsMCwwLDAtLjA3LS40NEwzMC40MSwxNy43''@;'; put 'put ''YS4zNy4zNywwLDAsMC0uNDQtLjA3bC0xLjg1LDFBNyw3LDAsMCwwLDI2LjY5LDE4bC0uNjEtMmEuMzcuMzcsMCwwLDAtLjM2LS4yNWgtMmEuMzcuMzcsMCwwLDAtLjM1LjI2bC0uNjEsMmE3LDcsMCwwLDAtMS40NC42MWwtMS44Mi0xYS4zNy4zNywwLDAsMC0uNDQuMDdsLTEuNDcsMS40NGEu''@;'; put 'put ''MzcuMzcsMCwwLDAtLjA3LjQ0bDEsMS44MmE3LDcsMCwwLDAtLjYxLDEuNDRsLTIsLjYxYS4zNy4zNywwLDAsMC0uMjYuMzV2MmEuMzcuMzcsMCwwLDAsLjI2LjM1bDIsLjYxYTcsNywwLDAsMCwuNjEsMS40MWwtMSwxLjlhLjM3LjM3LDAsMCwwLC4wNy40NEwxOSwzMmEuMzcuMzcsMCwwLDAs''@;'; put 'put ''LjQ0LjA3bDEuODctMWE3LjA2LDcuMDYsMCwwLDAsMS4zOS41N2wuNjEsMmEuMzcuMzcsMCwwLDAsLjM1LjI2aDJhLjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTJhNyw3LDAsMCwwLDEuMzgtLjU3bDEuODksMWEuMzcuMzcsMCwwLDAsLjQ0LS4wN2wxLjQ1LTEuNDVhLjM3LjM3LDAsMCwwLC4w''@;'; put 'put ''Ny0uNDRsLTEtMS44OGE3LjA2LDcuMDYsMCwwLDAsLjU4LTEuMzlsMi0uNjFhLjM3LjM3LDAsMCwwLC4yNi0uMzVWMjMuODNBLjM3LjM3LDAsMCwwLDMzLjU0LDIzLjQ3Wk0yNC43LDI4LjE5QTMuMzMsMy4zMywwLDEsMSwyOCwyNC44NiwzLjMzLDMuMzMsMCwwLDEsMjQuNywyOC4xOVoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNTQsMjMuNDdsLTItLjYxYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuNDEsMTcuN2EuMzcuMzcsMCwwLDAtLjQ0LS4w''@;'; put 'put ''N2wtMS44NSwxQTcsNywwLDAsMCwyNi42OSwxOGwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFsLTEuODItMWEuMzcuMzcsMCwwLDAtLjQ0LjA3bC0xLjQ3LDEuNDRhLjM3LjM3LDAsMCwwLS4wNy40NGwx''@;'; put 'put ''LDEuODJhNyw3LDAsMCwwLS42MSwxLjQ0bC0yLC42MWEuMzcuMzcsMCwwLDAtLjI2LjM1djJhLjM3LjM3LDAsMCwwLC4yNi4zNWwyLC42MWE3LDcsMCwwLDAsLjYxLDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTksMzJhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3''@;'; put 'put ''LjA2LDAsMCwwLDEuMzkuNTdsLjYxLDJhLjM3LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwuMzUtLjI2bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhhNy4wNiw3''@;'; put 'put ''LjA2LDAsMCwwLC41OC0xLjM5bDItLjYxYS4zNy4zNywwLDAsMCwuMjYtLjM1VjIzLjgzQS4zNy4zNywwLDAsMCwzMy41NCwyMy40N1pNMjQuNywyOC4xOUEzLjMzLDMuMzMsMCwxLDEsMjgsMjQuODYsMy4zMywzLjMzLDAsMCwxLDI0LjcsMjguMTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LjU1LDMxSDZWNUgyMS44N0wyMywzSDZBMiwyLDAsMCwwLDQsNVYzMWEyLDIsMCwwLDAsMiwySDE3LjE2bC0xLTFBMi4zOCwyLjM4LDAsMCwxLDE1LjU1LDMxWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4''@;'; put 'put ''LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNTQsMjMuNDdsLTItLjYxYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuNDEsMTcuN2EuMzcuMzcsMCwwLDAt''@;'; put 'put ''LjQ0LS4wN2wtMS44NSwxQTcsNywwLDAsMCwyNi42OSwxOGwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFsLTEuODItMWEuMzcuMzcsMCwwLDAtLjQ0LjA3bC0xLjQ3LDEuNDRhLjM3LjM3LDAsMCwwLS4w''@;'; put 'put ''Ny40NGwxLDEuODJhNyw3LDAsMCwwLS42MSwxLjQ0bC0yLC42MWEuMzcuMzcsMCwwLDAtLjI2LjM1djJhLjM3LjM3LDAsMCwwLC4yNi4zNWwyLC42MWE3LDcsMCwwLDAsLjYxLDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTksMzJhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFh''@;'; put 'put ''Ny4wNiw3LjA2LDAsMCwwLDEuMzkuNTdsLjYxLDJhLjM3LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwuMzUtLjI2bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhh''@;'; put 'put ''Ny4wNiw3LjA2LDAsMCwwLC41OC0xLjM5bDItLjYxYS4zNy4zNywwLDAsMCwuMjYtLjM1VjIzLjgzQS4zNy4zNywwLDAsMCwzMy41NCwyMy40N1pNMjQuNywyOC4xOUEzLjMzLDMuMzMsMCwxLDEsMjgsMjQuODYsMy4zMywzLjMzLDAsMCwxLDI0LjcsMjguMTlaIiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNS41NSwzMUg2VjVIMjMuMDhhNi45NCw2Ljk0LDAsMCwxLC42LTJINkEyLDIsMCwwLDAsNCw1VjMxYTIsMiwwLDAsMCwyLDJIMTcuMTZsLTEtMUEyLjM4LDIuMzgsMCwwLDEs''@;'; put 'put ''MTUuNTUsMzFaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS4zNlYxMi43MWE3LDcsMCwwLDEtMi0xdjJBMi4zNywyLjM3LDAsMCwxLDI4LDE1LjM2WiIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQiIC8+JyksYi5DbHJTaGFwZVR3b1dheUFycm93cz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuNDMsMTYuODNBMSwxLDAsMCwwLDIyLDE4LjI0TDI1LjcyLDIySDcuODNhMSwxLDAsMCwwLDAsMkgyNS43MkwyMiwy''@;'; put 'put ''Ny43YTEsMSwwLDEsMCwxLjQyLDEuNDFMMjkuNTMsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy4yNCwxOC40NWExLDEsMCwwLDAsLjcxLTEuNzFMMTAuMjQsMTNIMjguMTJhMSwxLDAsMCwwLDAtMkgx''@;'; put 'put ''MC4yNGwzLjcxLTMuNzNhMSwxLDAsMCwwLTEuNDItMS40MUw2LjQyLDEybDYuMTEsNi4xNEExLDEsMCwwLDAsMTMuMjQsMTguNDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlU3dpdGNoPSgwLHAuY2xySWNvblNWRykoJzxwYXRo''@;'; put 'put ''IGQ9Ik01LjcxLDE0SDIwLjkyVjEySDUuNzFMOS40Miw4LjI3QTEsMSwwLDEsMCw4LDYuODZMMS44OSwxMyw4LDE5LjE0YTEsMSwwLDEsMCwxLjQyLTEuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9''@;'; put 'put ''IjEyIiB3aWR0aD0iMyIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI4IiB5PSIxMiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcuOTIsMTcuODZhMSwxLDAsMCwwLTEuNDIsMS40MUwzMC4yMSwyM0gxNXYySDMwLjIxTDI2LjUsMjguNzRhMSwxLDAsMSwwLDEuNDIsMS40TDM0LDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cmVjdCB4PSIxMCIgeT0iMjMiIHdpZHRoPSIzIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLGIuQ2xyU2hhcGVUb29scz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAsMTRIMTZhMSwxLDAsMCwwLTEsMXY2YTEsMSwwLDAsMCwxLDFoNGExLDEsMCwwLDAsMS0xVjE1QTEsMSwwLDAsMCwyMCwxNFptLS40LDYuNkgx''@;'; put 'put ''Ni40VjE1LjRoMy4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzEsMTIuMzgsMjkuNjIsOC4yOUExLDEsMCwwLDAsMjguOTIsOGgtNVY2LjA1QTIsMiwwLDAsMCwyMiw0SDEzLjg0QTEuOTIsMS45Miww''@;'; put 'put ''LDAsMCwxMiw2LjA1VjhINy4wOGExLDEsMCwwLDAtLjcxLjI5TDIuMjksMTIuMzhhMSwxLDAsMCwwLS4yOS43MVYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTMuMDhBMSwxLDAsMCwwLDMzLjcxLDEyLjM4Wk0xNCw2aDhWOEgxNFpNMzIsMTdIMjJ2MS45M0gzMlYyOEg0VjE4''@;'; put 'put ''LjkzSDE0VjE3SDRWMTMuNUw3LjUsMTBoMjFMMzIsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYuNCIgeT0iMTUuNCIgd2lkdGg9IjMuMiIgaGVpZ2h0PSI1LjIiIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEsMjFhMSwxLDAsMCwxLTEsMUgxNmExLDEsMCwwLDEtMS0xVjE5SDJ2OWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTlIMjFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0y''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjcxLDEyLjM4LDI5LjYyLDguMjlBMSwxLDAsMCwwLDI4LjkyLDhoLTVWNi4wNUEyLDIsMCwwLDAsMjIsNEgxMy44NEExLjkyLDEuOTIsMCwwLDAsMTIsNi4wNVY4SDcuMDhhMSwxLDAsMCwwLS43MS4yOUwyLjI5LDEyLjM4YTEsMSwwLDAs''@;'; put 'put ''MC0uMjkuNzFWMTdIMTVWMTVhMSwxLDAsMCwxLDEtMWg0YTEsMSwwLDAsMSwxLDF2MkgzNFYxMy4wOEExLDEsMCwwLDAsMzMuNzEsMTIuMzhaTTIyLDhIMTRWNmg4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxiLkNsclNoYXBlV2luZG93Q2xvc2U9KDAs''@;'; put 'put ''cC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5LjQxLDE4bDcuMjktNy4yOWExLDEsMCwwLDAtMS40MS0xLjQxTDE4LDE2LjU5LDEwLjcxLDkuMjlhMSwxLDAsMCwwLTEuNDEsMS40MUwxNi41OSwxOCw5LjI5LDI1LjI5YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTkuNDFsNy4yOSw3LjI5YTEs''@;'; put 'put ''MSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlV2luZG93TWF4PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy44OSw5aC0yMGEyLDIsMCwwLDAtMiwyVjI1YTIsMiwwLDAsMCwyLDJoMjBhMiwy''@;'; put 'put ''LDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMjcuODksOVptLTIwLDE2VjExaDIwVjI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZVdpbmRvd01pbj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsMjdIOWExLDEsMCwwLDEs''@;'; put 'put ''MC0ySDI3YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlV2luZG93UmVzdG9yZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjgsOEgxNGEyLDIsMCwwLDAtMiwydjJoMlYxMEgyOFYyMEgyNnYyaDJh''@;'; put 'put ''MiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMjgsOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDE0SDhhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDIyYTIsMiwwLDAsMCwyLTJWMTZBMiwy''@;'; put 'put ''LDAsMCwwLDIyLDE0Wk04LDI2VjE2SDIyVjI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksYi5DbHJTaGFwZVpvb21Jbj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTYsNEExMiwxMiwwLDEsMCwyOCwxNiwxMiwxMiwwLDAsMCwxNiw0Wm0w''@;'; put 'put ''LDIxLjkxQTEwLDEwLDAsMSwxLDI2LDE2LDEwLDEwLDAsMCwxLDE2LDI1LjkxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzEsMjkuNjlsLTUuMTctNS4xN0ExMy42OCwxMy42OCwwLDAsMSwyNS4xNSwy''@;'; put 'put ''Nmw1LjE1LDUuMTVhMSwxLDAsMCwwLDEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIxLDE1SDE3VjExYTEsMSwwLDAsMC0yLDB2NEgxMWExLDEsMCwwLDAsMCwyaDR2NGExLDEsMCwwLDAsMiww''@;'; put 'put ''VjE3aDRhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLGIuQ2xyU2hhcGVab29tT3V0PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNiw0QTEyLDEyLDAsMSwwLDI4LDE2LDEyLDEyLDAsMCwwLDE2LDRabTAsMjEuOTFB''@;'; put 'put ''MTAsMTAsMCwxLDEsMjYsMTYsMTAsMTAsMCwwLDEsMTYsMjUuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS43MSwyOS42OWwtNS4xNy01LjE3QTEzLjY4LDEzLjY4LDAsMCwxLDI1LjE1LDI2bDUuMTUs''@;'; put 'put ''NS4xNWExLDEsMCwwLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAsMTVIMTJhMSwxLDAsMCwwLDAsMmg4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMyIgLz4nKSxiLkNsclNoYXBlS2V5PSgwLHAuY2xySWNvblNWRykoJzxyZWN0IHg9IjYuMzMiIHk9IjEwLjcxIiB3aWR0aD0iOS43MSIgaGVpZ2h0PSIyLjU3IiByeD0iMSIgcnk9IjEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01LjIxIDExLjQzKSByb3RhdGUoLTQ1KSIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMzUsMTYuOGwuNjMtLjYzQTUsNSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2''@;'; put 'put ''LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNC0uNEwxOCwyNi40OGgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgyMy40MXYtM0gxOC44bC0zLTNMMTQsMjMuMzFhMywzLDAsMCwxLTQuMjQsMEw0LjUsMThhMywzLDAsMCwxLDAtNC4y''@;'; put 'put ''NGw4LjU2LTguNTZhMywzLDAsMCwxLDQuMjQsMGw1LjI2LDUuMjZhMywzLDAsMCwxLDAsNC4yNGwtMiwyTDMyLDI4LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI2LjMzIiB5PSIxMC43MSIgd2lkdGg9Ijku''@;'; put 'put ''NzEiIGhlaWdodD0iMi41NyIgcng9IjEiIHJ5PSIxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNS4yMSAxMS40Mykgcm90YXRlKC00NSkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTIzLjM1LDE2LjhsLjYzLS42M2E1LDUsMCwwLDAsLjYzLS43N0gyMi4yM2wtLjI5LDBMMjAuNTIsMTYuOCwzMiwyOC4yOFYzMkgyOC44NmwtMS43Ny0xLjc2di0yLjhIMjMuNDF2LTNIMTguOGwtMy0zTDE0LDIzLjMxYTMsMywwLDAsMS00LjI0LDBMNC41LDE4YTMsMywwLDAsMSwwLTQuMjRs''@;'; put 'put ''OC41Ni04LjU2YTMsMywwLDAsMSw0LjI0LDBMMjAuMSw4LjA2bDEtMS43OUwxOC43MSwzLjg0YTUsNSwwLDAsMC03LjA3LDBMMy4wOSwxMi4zOWE1LDUsMCwwLDAsMCw3LjA3bDUuMjYsNS4yNmE1LDUsMCwwLDAsNy4wNywwbC40LS40TDE4LDI2LjQ4aDMuNDR2M2gzLjY5djEuNjNMMjgsMzRo''@;'; put 'put ''NlYyNy40NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwz''@;'; put 'put ''NC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4zMyIgeT0iMTAuNzEiIHdp''@;'; put 'put ''ZHRoPSI5LjcxIiBoZWlnaHQ9IjIuNTciIHJ4PSIxIiByeT0iMSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTUuMjEgMTEuNDMpIHJvdGF0ZSgtNDUpIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMjMuMzUsMTYuOGwuNjMtLjYzQTUsNSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNC0uNEwxOCwyNi40OGgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZW''@;'; put 'put ''MjcuNDVaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgyMy40MXYtM0gxOC44bC0zLTNMMTQsMjMuMzFhMywzLDAsMCwxLTQuMjQsMEw0LjUsMThhMywzLDAsMCwxLDAtNC4yNGw4LjU2LTguNTZhMywzLDAsMCwxLDQuMjQsMGw1LjI2LDUuMjZhMywzLDAsMCwxLDAsNC4yNGwtMiwyTDMy''@;'; put 'put ''LDI4LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM4LDE2Ljc3bC42LS42QTUsNSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwu''@;'; put 'put ''NDUtLjQ1LDIuMSwyLjJoMy40NHYzaDMuNjl2MS42M0wyOCwzNGg2VjI3LjQ1Wm0tOC41Ni02LjU5TDkuMzcsMTUuNjRhMSwxLDAsMCwxLTEuNDEsMGwtLjQtLjRhMSwxLDAsMCwxLDAtMS40MUwxMyw4LjM2YTEsMSwwLDAsMSwxLjQxLDBsLjQuNEExLDEsMCwwLDEsMTQuODIsMTAuMThaTTMy''@;'; put 'put ''LDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgyMy40MXYtM0gxOC44bC0xLjUyLTEuNjFMMjIsMTguMTgsMzIsMjguMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM4LDE2Ljc3bC42LS42YTUsNSwwLDAsMCwu''@;'; put 'put ''NjMtLjc3SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDIuMDktMy42MkwxOC43MSwzLjg0YTUsNSwwLDAsMC03LjA3LDBMMy4wOSwxMi4zOWE1LDUsMCwwLDAsMCw3LjA3bDUuMjYsNS4yNmE1LDUsMCwwLDAsNy4wNywwbC40NS0uNDUsMi4xLDIuMmgzLjQ0djNoMy42OXYxLjYzTDI4''@;'; put 'put ''LDM0aDZWMjcuNDVabS04LjU2LTYuNTlMOS4zNywxNS42NGExLDEsMCwwLDEtMS40MSwwbC0uNC0uNGExLDEsMCwwLDEsMC0xLjQxTDEzLDguMzZhMSwxLDAsMCwxLDEuNDEsMGwuNC40QTEsMSwwLDAsMSwxNC44MiwxMC4xOFpNMzIsMzJIMjguODZsLTEuNzctMS43NnYtMi44SDIzLjQxdi0z''@;'; put 'put ''SDE4LjhsLTEuNTItMS42MUwyMiwxOC4xOCwzMiwyOC4yOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNI''@;'; put 'put ''MzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0yMy4zOCwxNi43N2wuNi0uNkE1LDUsMCwwLDAsMjQsOS4xTDE4LjcxLDMuODRhNSw1LDAsMCwwLTcuMDcsMEwzLjA5LDEyLjM5YTUsNSwwLDAsMCwwLDcuMDdsNS4yNiw1LjI2YTUsNSwwLDAsMCw3LjA3LDBsLjQ1LS40NSwyLjEsMi4yaDMuNDR2M2gzLjY5djEuNjNMMjgsMzRoNlYyNy40''@;'; put 'put ''NVptLTguNTYtNi41OUw5LjM3LDE1LjY0YTEsMSwwLDAsMS0xLjQxLDBsLS40LS40YTEsMSwwLDAsMSwwLTEuNDFMMTMsOC4zNmExLDEsMCwwLDEsMS40MSwwbC40LjRBMSwxLDAsMCwxLDE0LjgyLDEwLjE4Wk0zMiwzMkgyOC44NmwtMS43Ny0xLjc2di0yLjhIMjMuNDF2LTNIMTguOGwtMS41''@;'; put 'put ''Mi0xLjYxTDIyLDE4LjE4LDMyLDI4LjI4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxiLkNsclNoYXBlTGlicmFyeT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNDgsMjkuNjMsMjYuNzQsMTEuODJhMiwyLDAsMCwwLTIuNTgtMS4xNkwyMSwxMS44NVY4LjkyQTEuOTIsMS45MiwwLDAsMCwxOS4wOCw3SDE0''@;'; put 'put ''VjQuOTJBMS45MiwxLjkyLDAsMCwwLDEyLjA4LDNINUEyLDIsMCwwLDAsMyw1VjMyYTEsMSwwLDAsMCwxLDFIMjBhMSwxLDAsMCwwLDEtMVYxOS4yN2w1LDEzLjIxYTEsMSwwLDAsMCwxLjI5LjU4bDUuNjEtMi4xNGExLDEsMCwwLDAsLjU4LTEuMjlaTTEyLDguODNWMzFINVY1aDdaTTE5LDMx''@;'; put 'put ''SDE0VjloNVptOC41MS0uMjVMMjEuMTMsMTMuOTJsMy43NC0xLjQyLDYuMzksMTYuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi43NSwzSDUuMjVBMS4xNSwxLjE1LDAsMCwwLDQsNFYzM0gxNFY0QTEu''@;'; put 'put ''MTUsMS4xNSwwLDAsMCwxMi43NSwzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43NywzMS4wOWwtNi45NC0xOC4zYTEsMSwwLDAsMC0xLjI5LS41OEwyMiwxMy41OVY5YTEsMSwwLDAsMC0xLTFIMTZWMzNoNlYx''@;'; put 'put ''NC42OUwyOC45MywzM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksYi5DbHJTaGFwZUJvbHQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEwLjUyLDM0aC0zYTEsMSwwLDAsMS0uODgtMS40NEwxMi41NSwyMUg2YTEsMSwwLDAsMS0uODUtMS41NGwx''@;'; put 'put ''MC42OC0xN0ExLDEsMCwwLDEsMTYuNjQsMkgzMC4wN2ExLDEsMCwwLDEsLjc3LDEuNjlMMjEuNzgsMTRoNS4zOGExLDEsMCwwLDEsLjczLDEuNjZsLTE2LjYzLDE4QTEsMSwwLDAsMSwxMC41MiwzNFpNOS4xOCwzMmguOTFMMjQuODYsMTZIMTkuNTlhMSwxLDAsMCwxLS43Ny0xLjY5TDI3Ljg4''@;'; put 'put ''LDRIMTcuMTlMNy43NywxOUgxNC4yYTEsMSwwLDAsMSwuODgsMS40NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjgsMi4yOUEuNDkuNDksMCwwLDAsMzAuMzUsMkgxNi40MmEuNS41LDAsMCwwLS40Mi4y''@;'; put 'put ''M2wtMTAuNzEsMTdBLjQ5LjQ5LDAsMCwwLDUuNywyMGg3LjY3TDYuNiwzMy4yNWEuNTIuNTIsMCwwLDAsLjQ2Ljc1aDNhLjUuNSwwLDAsMCwuMzctLjE2TDI4LDE0Ljg1YS41LjUsMCwwLDAtLjM3LS44NUgyMC44OUwzMC43MiwyLjgyQS40OS40OSwwLDAsMCwzMC44LDIuMjlaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVXcmVuY2g9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjE4LDI2LjExLDIwLjM1LDEzLjI4QTkuMjgsOS4yOCwwLDAsMCw3LjU0LDIuNzlsLTEuMzQuNTksNS4zOCw1LjM4TDguNzYsMTEuNTksMy4z''@;'; put 'put ''OCw2LjIxLDIuNzksNy41NEE5LjI3LDkuMjcsMCwwLDAsMTMuMjgsMjAuMzVMMjYuMTEsMzMuMThhMiwyLDAsMCwwLDIuODMsMGw0LjI0LTQuMjRBMiwyLDAsMCwwLDMzLjE4LDI2LjExWm0tNS42Niw1LjY2TDEzLjg4LDE4LjEybC0uNTcuMTZhNy4yNyw3LjI3LDAsMCwxLTkuMzEtNyw3LjIs''@;'; put 'put ''Ny4yLDAsMCwxLC4xNS0xLjQ4bDQuNjEsNC42MSw1LjY2LTUuNjZMOS44MSw0LjE1YTcuMjcsNy4yNywwLDAsMSw4LjQ3LDkuMTZsLS4xNi41N0wzMS43NywyNy41M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBj''@;'; put 'put ''eD0iMjcuMTMiIGN5PSIyNy4wOSIgcj0iMS4zIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTEuMjEgMjcuMTIpIHJvdGF0ZSgtNDUpIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43MywyNy43MiwxOS42Nywx''@;'; put 'put ''My42NmE4Ljc5LDguNzksMCwwLDAtMTItMTAuNUwxMyw4LjUzLDguNTMsMTMsMy4xNiw3LjY3YTguNzksOC43OSwwLDAsMCwxMC41LDEyTDI3LjcyLDMzLjczYTEuMDcsMS4wNywwLDAsMCwxLjUsMGw0LjUxLTQuNTFBMS4wNywxLjA3LDAsMCwwLDMzLjczLDI3LjcyWk0yOSwyOWExLjM4LDEu''@;'; put 'put ''MzgsMCwxLDEsMC0yQTEuMzgsMS4zOCwwLDAsMSwyOSwyOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZUJ1bGxzZXllPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyYTE1LjkyLDE1LjkyLDAsMCwwLTQuMjUuNTlsLjc3LDEu''@;'; put 'put ''ODZhMTQuMDcsMTQuMDcsMCwxLDEtMTAsMTBsLTEuODYtLjc4QTE2LDE2LDAsMSwwLDE4LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik03LjQ1LDE1LjdhMTAuODEsMTAuODEsMCwxLDAsOC4zLTguMjZMMTYu''@;'; put 'put ''MzcsOUE5LjI0LDkuMjQsMCwxLDEsOSwxNi4zMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIyLjA5YTQuMDgsNC4wOCwwLDAsMS00LTMuNjhsLTEuNjMtLjY4YzAsLjA5LDAsLjE4LDAsLjI3QTUuNjks''@;'; put 'put ''NS42OSwwLDEsMCwxOCwxMi4zMWgtLjI0TDE4LjQzLDE0QTQuMDcsNC4wNywwLDAsMSwxOCwyMi4wOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguMiwxMy4zNGEuNS41LDAsMCwwLC4zNS4xNUgxMi4ybDUu''@;'; put 'put ''MzcsNS4zN0ExLDEsMCwwLDAsMTksMTcuNDRMMTMuNTMsMTJWOC41MWEuNS41LDAsMCwwLS4xNS0uMzVMNy43OSwyLjU3YS41LjUsMCwwLDAtLjg1LjM1djRIM2EuNS41LDAsMCwwLS4zNS44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTE5LDE4Ljg1YTEsMSwwLDAsMS0xLjQxLDBsLTMtM0E0LDQsMCwwLDAsMTMuOTEsMTgsNC4wOSw0LjA5LDAsMSwwLDE4LDEzLjkxYTQsNCwwLDAsMC0yLC41NWwzLDNBMSwxLDAsMCwxLDE5LDE4Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyYTE1LjkyLDE1LjkyLDAsMCwwLTQuMjUuNTlsMS42LDMuODlBMTEuODksMTEuODksMCwxLDEsNi40OSwxNS4zTDIuNjEsMTMuNjhBMTYsMTYsMCwxLDAsMTgsMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOCwxNS45NEExMC4xNywxMC4xNywwLDEsMCwxNiw4bDEuNjksNC4xMS4zMSwwQTUuODgsNS44OCwwLDEsMSwxMi4xMiwxOGMwLS4xMiwwLS4yMywwLS4zNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNOC4yLDEzLjM0YS41LjUsMCwwLDAsLjM1LjE1SDEyLjJsMi4zNSwyLjM1QTQuMDksNC4wOSwwLDAsMSwxNiwxNC40NkwxMy41MywxMlY4LjUxYS41LjUsMCwwLDAtLjE1LS4zNUw3Ljc5LDIuNTdhLjUuNSwwLDAsMC0uODUuMzV2NEgzYS41LjUsMCwwLDAt''@;'; put 'put ''LjM1Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz4nKSxiLkNsclNoYXBlVGFyZ2V0PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQs''@;'; put 'put ''MTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCw3LjJBMTAuOCwxMC44LDAsMSwwLDI4LjgsMTgsMTAuODEsMTAuODEsMCwwLDAsMTgsNy4yWm0wLDIwQTkuMiw5LjIsMCwxLDEsMjcu''@;'; put 'put ''MiwxOCw5LjIxLDkuMjEsMCwwLDEsMTgsMjcuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEyLjMxQTUuNjksNS42OSwwLDEsMCwyMy42OSwxOCw1LjY5LDUuNjksMCwwLDAsMTgsMTIuMzFabTAsOS43''@;'; put 'put ''N0E0LjA5LDQuMDksMCwxLDEsMjIuMDksMTgsNC4wOSw0LjA5LDAsMCwxLDE4LDIyLjA5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSI0LjA5IiBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDcuODNBMTAuMTcsMTAuMTcsMCwxLDAsMjguMTcsMTgsMTAuMTgsMTAuMTgsMCwwLDAsMTgsNy44M1ptMCwxNkE1Ljg4LDUuODgsMCwxLDEsMjMuODgsMTgsNS44OCw1Ljg4LDAsMCwxLDE4LDIzLjg4WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMjcuODNBMTEuODMsMTEuODMsMCwxLDEsMjkuODMsMTgsMTEuODUsMTEuODUsMCwwLDEsMTgsMjku''@;'; put 'put ''ODNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPicpLGIuQ2xyU2hhcGVGbGFtZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMywxNi42NmMtMS4xOS0yLjA5LTcuOTQtMTQuMTUtNy45NC0xNC4xNWExLDEsMCwwLDAtMS43NSwwbC02LDEwLjY0LTMt''@;'; put 'put ''NS4yOGExLDEsMCwwLDAtMS43NSwwUzUuNCwxNy43OCw0LjQyLDE5LjVBOS4zLDkuMywwLDAsMCwzLDI0LjYxQzMsMjkuNzIsNS44NiwzNCwxMS42NywzNEgyMi40OEMyOC4yOCwzNCwzMywyOSwzMywyMi43OEExMS4xMywxMS4xMywwLDAsMCwzMS4zLDE2LjY2Wk0yMi40OCwzMkgxMS43N0M4''@;'; put 'put ''LjEzLDMyLDUsMjguNjYsNSwyNC42MWE3LjQzLDcuNDMsMCwwLDEsMS4xNi00LjEzYy43My0xLjI5LDQuMDUtNy4yMSw1LjY1LTEwLjA3bDMsNS4yOGExLDEsMCwwLDAsLjg3LjUxaDBhMSwxLDAsMCwwLC44Ny0uNTFMMjIuNDksNWMxLjg2LDMuMzMsNi4xNSwxMSw3LjA3LDEyLjZBOS4yNCw5''@;'; put 'put ''LjI0LDAsMCwxLDMxLDIyLjc4QzMxLDI3Ljg3LDI3LjE4LDMyLDIyLjQ4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUuNzUsMjEuNzNjLS42NS0xLjE2LTQuMzgtNy44MS00LjM4LTcuODFhLjguOCww''@;'; put 'put ''LDAsMC0xLjQsMGwtNC4yLDcuNDgtMS41OS0yLjQ5YS44LjgsMCwwLDAtMS4zNSwwTDkuMzcsMjQuMzVhNC4zNSw0LjM1LDAsMCwwLS44MiwyLjYsNC40OSw0LjQ5LDAsMCwwLC41LDJIMTFhMywzLDAsMCwxLS44My0yLDIuNzgsMi43OCwwLDAsMSwuNTYtMS43M2wyLjgtNC4zOCwxLjY2LDIu''@;'; put 'put ''NmEuOC44LDAsMCwwLDEuNDEtLjEyLDcuODIsNy44MiwwLDAsMSwuNC0uOEwyMC42NywxNmwzLjY5LDYuNTdhNC44Myw0LjgzLDAsMCwxLC43NywyLjcxQTUsNSwwLDAsMSwyMy40NiwyOWgyLjEzYTYuNjgsNi42OCwwLDAsMCwxLjE0LTMuNzQsNi40NSw2LjQ1LDAsMCwwLTEtMy41WiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuMywxNi4zMmMtMS4xOS0yLjA5LTcuOTQtMTQuMTUtNy45NC0xNC4xNWExLDEsMCwwLDAtMS43NSwwbC02LDEwLjY0LTMtNS4yOGExLDEsMCwwLDAtMS43NSwwUzUuNCwx''@;'; put 'put ''Ny40Myw0LjQyLDE5LjE1QTkuMyw5LjMsMCwwLDAsMywyNC4yNmMwLDUuMTEsMy44OCw5LjY1LDguNjcsOS43NEgyMi40OEMyOC4yOCwzNCwzMywyOC42MiwzMywyMi40NEExMS4xMywxMS4xMywwLDAsMCwzMS4zLDE2LjMyWk0yMS40OCwzMkgxNC41NEE0LjY4LDQuNjgsMCwwLDEsMTAsMjcu''@;'; put 'put ''NDFhMy45MSwzLjkxLDAsMCwxLC43NS0yLjM0bDMuMzUtNS4yMWEuNS41LDAsMCwxLC44NCwwbDEuNzgsMi43NywwLS4wOGMuNjMtMS4xMSw0LjIzLTcuNDgsNC4yMy03LjQ4YS41LjUsMCwwLDEsLjg3LDBzMy42LDYuMzgsNC4yMyw3LjQ4QTUuODMsNS44MywwLDAsMSwyNywyNS43NkMyNywz''@;'; put 'put ''MiwyMi4xLDMyLDIxLjQ4LDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlSG91cmdsYXNzPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4z''@;'; put 'put ''Niw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEuMjgtMUE2LjY3LDYuNjcsMCwwLDAsMjYsMTEuMDlWNGgzYTEsMSwwLDAsMCwwLTJIN0ExLDEsMCwwLDAsNyw0aDN2Ny4wOWE2LjY3LDYuNjcsMCwwLDAsMi42OSw1LjMzbDEuMjgsMUE2LjM2LDYuMzYsMCwwLDAs''@;'; put 'put ''MTUsMThoMGE2LjI3LDYuMjcsMCwwLDAtMSwuNjJsLTEuMjgsMUE2LjY3LDYuNjcsMCwwLDAsMTAsMjQuOTFWMzJIN2ExLDEsMCwwLDAsMCwySDI5YTEsMSwwLDAsMCwwLTJaTTEyLDI0LjkxYTQuNjYsNC42NiwwLDAsMSwxLjg4LTMuNzJsMS4yOC0xYTQuNjYsNC42NiwwLDAsMSwxLjE4LS42''@;'; put 'put ''MywxLDEsMCwwLDAsLjY1LS45NFYxNy4zM2ExLDEsMCwwLDAtLjY1LS45NCw0LjY3LDQuNjcsMCwwLDEtMS4xOS0uNjNsLTEuMjgtMUE0LjY2LDQuNjYsMCwwLDEsMTIsMTEuMDlWNEgyNHY3LjA5YTQuNjYsNC42NiwwLDAsMS0xLjg4LDMuNzJsLTEuMjgsMWgwYTQuNjYsNC42NiwwLDAsMS0x''@;'; put 'put ''LjE4LjYzLDEsMSwwLDAsMC0uNjUuOTR2MS4zNGExLDEsMCwwLDAsLjY1Ljk0LDQuNjcsNC42NywwLDAsMSwxLjE5LjYzbDEuMjgsMUE0LjY2LDQuNjYsMCwwLDEsMjQsMjQuOTFWMzJIMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEuMjgtMWE2LjY0LDYuNjQsMCwwLDAsMS4wOS0xSDIyLjIzYTMuNjQsMy42NCwwLDAsMS0uNzgt''@;'; put 'put ''LjA5bC0uNjIuNDZoMGE0LjY2LDQuNjYsMCwwLDEtMS4xOC42MywxLDEsMCwwLDAtLjY1Ljk0djEuMzRhMSwxLDAsMCwwLC42NS45NCw0LjY3LDQuNjcsMCwwLDEsMS4xOS42M2wxLjI4LDFBNC42Niw0LjY2LDAsMCwxLDI0LDI0LjkxVjMySDEyVjI0LjkxYTQuNjYsNC42NiwwLDAsMSwxLjg4''@;'; put 'put ''LTMuNzJsMS4yOC0xYTQuNjYsNC42NiwwLDAsMSwxLjE4LS42MywxLDEsMCwwLDAsLjY1LS45NFYxNy4zM2ExLDEsMCwwLDAtLjY1LS45NCw0LjY3LDQuNjcsMCwwLDEtMS4xOS0uNjNsLTEuMjgtMUE0LjY2LDQuNjYsMCwwLDEsMTIsMTEuMDlWNEgyMi40NUwyMy42LDJIN0ExLDEsMCwwLDAs''@;'; put 'put ''Nyw0aDN2Ny4wOWE2LjY3LDYuNjcsMCwwLDAsMi42OSw1LjMzbDEuMjgsMUE2LjM2LDYuMzYsMCwwLDAsMTUsMThoMGE2LjI3LDYuMjcsMCwwLDAtMSwuNjJsLTEuMjgsMUE2LjY3LDYuNjcsMCwwLDAsMTAsMjQuOTFWMzJIN2ExLDEsMCwwLDAsMCwySDI5YTEsMSwwLDAsMCwwLTJaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYs''@;'; put 'put ''MS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAt''@;'; put 'put ''Mi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEuMjgtMWE2LjY4LDYuNjgsMCwwLDAsMi41Ny00LjE2QTcuNTMsNy41MywwLDAsMSwyNCwxMC40OXYuNjFhNC42Niw0LjY2LDAsMCwxLTEuODgsMy43MmwtMS4yOCwxaDBhNC42''@;'; put 'put ''Niw0LjY2LDAsMCwxLTEuMTguNjMsMSwxLDAsMCwwLS42NS45NHYxLjM0YTEsMSwwLDAsMCwuNjUuOTQsNC42Nyw0LjY3LDAsMCwxLDEuMTkuNjNsMS4yOCwxQTQuNjYsNC42NiwwLDAsMSwyNCwyNC45MVYzMkgxMlYyNC45MWE0LjY2LDQuNjYsMCwwLDEsMS44OC0zLjcybDEuMjgtMWE0LjY2''@;'; put 'put ''LDQuNjYsMCwwLDEsMS4xOC0uNjMsMSwxLDAsMCwwLC42NS0uOTRWMTcuMzNhMSwxLDAsMCwwLS42NS0uOTQsNC42Nyw0LjY3LDAsMCwxLTEuMTktLjYzbC0xLjI4LTFBNC42Niw0LjY2LDAsMCwxLDEyLDExLjA5VjRIMjIuNzhhNy40NSw3LjQ1LDAsMCwxLC44OS0ySDdBMSwxLDAsMCwwLDcs''@;'; put 'put ''NGgzdjcuMDlhNi42Nyw2LjY3LDAsMCwwLDIuNjksNS4zM2wxLjI4LDFBNi4zNiw2LjM2LDAsMCwwLDE1LDE4aDBhNi4yNyw2LjI3LDAsMCwwLTEsLjYybC0xLjI4LDFBNi42Nyw2LjY3LDAsMCwwLDEwLDI0LjkxVjMySDdhMSwxLDAsMCwwLDAsMkgyOWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJh''@;'; put 'put ''ZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYuNjcsNGgyMmExLDEsMCwwLDAsMC0yaC0yMmExLDEsMCwxLDAsMCwyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC42NywzMmgtMjJhMSwxLDAsMCwwLDAs''@;'; put 'put ''MmgyMmExLDEsMCwxLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41NSwxNS42N0E2LjA3LDYuMDcsMCwwLDAsMjUsMTEuMTJWNkgxMC4wNnY1LjEyYTYuMDcsNi4wNywwLDAsMCwyLjQ1LDQuNTUsMTEu''@;'; put 'put ''NDgsMTEuNDgsMCwwLDAsMi45MSwxLjcydjEuMTZhMTEuNDgsMTEuNDgsMCwwLDAtMi45MSwxLjcyLDYuMDcsNi4wNywwLDAsMC0yLjQ1LDQuNTV2NS4xMkgyNVYyNC44MmE2LjA3LDYuMDcsMCwwLDAtMi40NS00LjU1LDExLjQ4LDExLjQ4LDAsMCwwLTIuOTEtMS43MlYxNy4zOUExMS40OCwx''@;'; put 'put ''MS40OCwwLDAsMCwyMi41NSwxNS42N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguNjcsMzJoLTIyYTEsMSwwLDAsMCwwLDJoMjJhMSwxLDAsMSwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNi42Nyw0SDIyLjQ1TDIzLjYsMkg2LjY3YTEsMSwwLDEsMCwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTEyLjUxLDIwLjI3YTYuMDcsNi4wNywwLDAsMC0yLjQ1LDQuNTV2NS4xMkgyNVYyNC44MmE2LjA3LDYuMDcsMCwwLDAtMi40NS00LjU1LDExLjQ4LDExLjQ4LDAsMCwwLTIuOTEtMS43MlYxNy4zOWExMS40OCwxMS40OCwwLDAsMCwyLjkxLTEuNzJsLjMtLjI3aC0uNjJB''@;'; put 'put ''My42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgxMC4wNnY1LjEyYTYuMDcsNi4wNywwLDAsMCwyLjQ1LDQuNTUsMTEuNDgsMTEuNDgsMCwwLDAsMi45MSwxLjcydjEuMTZBMTEuNDgsMTEuNDgsMCwwLDAsMTIuNTEsMjAuMjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0''@;'; put 'put ''WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguNjcsMzJoLTIyYTEsMSwwLDAsMCwwLDJoMjJhMSwxLDAsMSwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYuNjcsNEgyMi43OGE3LjQ1LDcuNDUsMCwwLDEsLjg5LTJoLTE3YTEsMSwwLDEsMCwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJh''@;'; put 'put ''ZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41NSwyMC4yN2ExMS40OCwxMS40OCwwLDAsMC0yLjkxLTEuNzJWMTcuMzlhMTEuNDgsMTEuNDgsMCwwLDAsMi45MS0xLjcyQTYuMjUsNi4yNSwwLDAsMCwyNSwxMS41NSw3LjQ3LDcuNDcsMCwwLDEsMjIuNSw2SDEwLjA2djUuMTJh''@;'; put 'put ''Ni4wNyw2LjA3LDAsMCwwLDIuNDUsNC41NSwxMS40OCwxMS40OCwwLDAsMCwyLjkxLDEuNzJ2MS4xNmExMS40OCwxMS40OCwwLDAsMC0yLjkxLDEuNzIsNi4wNyw2LjA3LDAsMCwwLTIuNDUsNC41NXY1LjEySDI1VjI0LjgyQTYuMDcsNi4wNywwLDAsMCwyMi41NSwyMC4yN1oiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+Jyks''@;'; put 'put ''Yi5DbHJTaGFwZU5vQWNjZXNzPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy4xNSwxNUg4Ljg1QTEuODUsMS44NSwwLDAsMCw3LDE2Ljg1djIuMjlBMS44NSwxLjg1LDAsMCwwLDguODUsMjFIMjcuMTVBMS44NSwxLjg1LDAsMCwwLDI5LDE5LjE1VjE2Ljg1QTEuODUsMS44NSwwLDAsMCwyNy4xNSwxNVpt''@;'; put 'put ''LjI1LDQuMTVhLjI1LjI1LDAsMCwxLS4yNS4yNUg4Ljg1YS4yNS4yNSwwLDAsMS0uMjUtLjI1VjE2Ljg1YS4yNS4yNSwwLDAsMSwuMjUtLjI1SDI3LjE1YS4yNS4yNSwwLDAsMSwuMjUuMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTI5LjE1LDIwSDYuODVBLjg1Ljg1LDAsMCwxLDYsMTkuMTVWMTYuODVBLjg1Ljg1LDAsMCwxLDYuODUsMTZIMjkuMTVhLjg1Ljg1LDAsMCwxLC44NS44NXYyLjI5QS44NS44NSwwLDAsMSwyOS4x''@;'; put 'put ''NSwyMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZU9yZ2FuaXphdGlvbj0oMCxwLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjkuOCAxOC44IDI2LjIgMTguOCAyNi4yIDIxLjg4IDI3LjggMjEuODggMjcuOCAxNy4yIDE4Ljgg''@;'; put 'put ''MTcuMiAxOC44IDE0IDE3LjIgMTQgMTcuMiAxNy4yIDguMiAxNy4yIDguMiAyMS44OCA5LjggMjEuODggOS44IDE4LjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LDIzSDRhMiwyLDAsMCwwLTIsMnY2YTIs''@;'; put 'put ''MiwwLDAsMCwyLDJIMTRhMiwyLDAsMCwwLDItMlYyNUEyLDIsMCwwLDAsMTQsMjNaTTQsMzFWMjVIMTR2NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDIzSDIyYTIsMiwwLDAsMC0yLDJ2NmEyLDIsMCww''@;'; put 'put ''LDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjVBMiwyLDAsMCwwLDMyLDIzWk0yMiwzMVYyNUgzMnY2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMsMTNIMjNhMiwyLDAsMCwwLDItMlY1YTIsMiwwLDAsMC0y''@;'; put 'put ''LTJIMTNhMiwyLDAsMCwwLTIsMnY2QTIsMiwwLDAsMCwxMywxM1ptMC04SDIzdjZIMTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOS44IDE4LjggMjYuMiAxOC44IDI2LjIgMjEuODggMjcuOCAy''@;'; put 'put ''MS44OCAyNy44IDE3LjIgMTguOCAxNy4yIDE4LjggMTQgMTcuMiAxNCAxNy4yIDE3LjIgOC4yIDE3LjIgOC4yIDIxLjg4IDkuOCAyMS44OCA5LjggMTguOCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIiIHk9IjIzIiB3''@;'; put 'put ''aWR0aD0iMTQiIGhlaWdodD0iMTAiIHJ4PSIyIiByeT0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIwIiB5PSIyMyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+JyksYi5DbHJTaGFwZUJhbGFuY2U9KDAscC5jbHJJ''@;'; put 'put ''Y29uU1ZHKSgnPHBhdGggZD0iTTI0LDMzSDEyYTEsMSwwLDAsMSwwLTJIMjRhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTciIHk9IjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIyLjUiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDdIOEExLDEsMCwwLDEsOCw1SDI4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0yNi45MywyNC43OWE3LjIzLDcuMjMsMCwwLDEtNS44MS0yLjg5bC0uNi0uOCwxLjU5LTEuMjEuNi44YTUuMjgsNS4yOCwwLDAsMCw4LjQyLDBsLjYtLjgsMS41OSwxLjIxLS42LjhBNy4yMyw3LjIzLDAsMCwxLDI2LjkzLDI0Ljc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNTEsMTkuMjVhLjguOCwwLDAsMS0uNzMtLjQ4TDI2LjkzLDEyLjJsLTIuODUsNi41N2EuOC44LDAsMCwxLTEuNDctLjY0TDI2LjIsOS44N2EuODMuODMsMCwwLDEsMS40NywwbDMuNTgsOC4yNmEuOC44''@;'; put 'put ''LDAsMCwxLS43MywxLjEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOS42OCwyNC43OUE3LjIzLDcuMjMsMCwwLDEsMy44OCwyMS45bC0uNi0uOEw0Ljg2LDE5LjlsLjYuOGE1LjI4LDUuMjgsMCwwLDAsOC40''@;'; put 'put ''MiwwbC42LS44LDEuNTksMS4yMS0uNi44QTcuMjMsNy4yMywwLDAsMSw5LjY4LDI0Ljc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuMjYsMTkuMjVhLjguOCwwLDAsMS0uNzMtLjQ4TDkuNjgsMTIuMiw2''@;'; put 'put ''Ljg0LDE4Ljc3YS44LjgsMCwwLDEtMS40Ny0uNjRMOC45NSw5Ljg3YS44My44MywwLDAsMSwxLjQ3LDBMMTQsMTguMTNhLjguOCwwLDAsMS0uNzMsMS4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPicpLGIuQ2xyU2hhcGVJZEJhZGdlPSgwLHAuY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyMmE0LjIzLDQuMjMsMCwxLDAtNC4yMy00LjIzQTQuMjMsNC4yMywwLDAsMCwxOCwyMlptMC02Ljg2YTIuNjMsMi42MywwLDEsMS0yLjYzLDIuNjNBMi42MywyLjYzLDAsMCwxLDE4LDE1LjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNGEyLDIsMCwwLDAtMi0ySDE2YTIsMiwwLDAsMC0yLDJ2N2g4Wk0yMCw5SDE2VjRoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2''@;'; put 'put ''LDMwVjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBoMS42VjI3Ljg3QTguMzMsOC4zMywwLDAsMSwxOCwyNS4yOWE4LjMzLDguMzMsMCwwLDEsNi40LDIuNTlW''@;'; put 'put ''MzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCw2SDI0VjhoNFYzMkg4VjhoNFY2SDhBMiwyLDAsMCwwLDYsOFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMjgsNloi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIyYTQuMjMsNC4yMywwLDEsMC00LjIzLTQuMjNBNC4yMyw0LjIzLDAsMCwwLDE4LDIyWm0wLTYuODZhMi42MywyLjYzLDAsMSwxLTIuNjMsMi42M0EyLjYzLDIu''@;'; put 'put ''NjMsMCwwLDEsMTgsMTUuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwaDEuNlYyNy44N0E4LjMzLDguMzMsMCww''@;'; put 'put ''LDEsMTgsMjUuMjlhOC4zMyw4LjMzLDAsMCwxLDYuNCwyLjU5VjMwSDI2VjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksOS44OSwxOS41Niw5SDE2VjRoNFY4LjI0bDItMy40NlY0YTIsMiwwLDAsMC0yLTJIMTZhMiwyLDAsMCwwLTIsMnY3aDQuNjRBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS40VjMySDhWOGg0VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCww''@;'; put 'put ''LDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjJhNC4yMyw0LjIzLDAsMSwwLTQuMjMtNC4yM0E0LjIzLDQuMjMsMCwwLDAsMTgs''@;'; put 'put ''MjJabTAtNi44NmEyLjYzLDIuNjMsMCwxLDEtMi42MywyLjYzQTIuNjMsMi42MywwLDAsMSwxOCwxNS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiw0YTIsMiwwLDAsMC0y''@;'; put 'put ''LTJIMTZhMiwyLDAsMCwwLTIsMnY3aDhaTTIwLDlIMTZWNGg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBoMS42VjI3''@;'; put 'put ''Ljg3QTguMzMsOC4zMywwLDAsMSwxOCwyNS4yOWE4LjMzLDguMzMsMCwwLDEsNi40LDIuNTlWMzBIMjZWMjcuN2ExLjEyLDEuMTIsMCwwLDAtLjI2LS43M0E5LjksOS45LDAsMCwwLDE4LDIzLjY5LDkuOSw5LjksMCwwLDAsMTAuMjYsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTMuMjJWMzJIOFY4aDRWNkg4QTIsMiwwLDAsMCw2LDhWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjEzLjVBNy40OSw3LjQ5LDAsMCwxLDI4LDEzLjIyWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJh''@;'; put 'put ''ZGdlIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMSw0YTIsMiwwLDAsMC0yLTJIMTdhMiwyLDAsMCwwLTIsMnY2aDZaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBIMjZWMjcuN2ExLjEyLDEuMTIsMCwwLDAtLjI2LS43M0E5LjksOS45LDAsMCwwLDE4LDIzLjY5LDkuOSw5LjksMCww''@;'; put 'put ''LDAsMTAuMjYsMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDZIMjNWOGg1VjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwy''@;'; put 'put ''OCw2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSw5Ljg5LDIxLDYuNVY0YTIsMiwwLDAsMC0yLTJIMTdhMiwyLDAsMCwwLTIsMnY2aDRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yNiwyN2ExLjEz''@;'; put 'put ''LDEuMTMsMCwwLDAtLjI2LjczVjMwSDI2VjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS40VjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMjEsNGEyLDIsMCwwLDAtMi0ySDE3YTIsMiwwLDAsMC0yLDJ2Nmg2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMjYsMjdhMS4xMywxLjEzLDAsMCwwLS4yNi43M1YzMEgyNlYy''@;'; put 'put ''Ny43YTEuMTIsMS4xMiwwLDAsMC0uMjYtLjczQTkuOSw5LjksMCwwLDAsMTgsMjMuNjksOS45LDkuOSwwLDAsMCwxMC4yNiwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIy''@;'; put 'put ''VjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyOCwxMy4yMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksYi5DbHJTaGFwZVJlcGVhdD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTYsMTQuMTVBMy4xNywzLjE3LDAsMCwxLDkuMTcsMTFIMjguNGwtNC4yOCw0LjU0YTEsMSwwLDEsMCwxLjQ2LDEuMzdMMzIuMDksMTAsMjUuNTgsMy4wOWExLDEsMCwxLDAtMS40NiwxLjM3TDI4LjQsOUg5LjE3QTUuMTcsNS4xNywwLDAsMCw0LDE0''@;'; put 'put ''LjE1djYuMWwyLTIuMTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMwLDIxLjg1QTMuMTcsMy4xNywwLDAsMSwyNi44MywyNUg3LjZsNC4yOC00LjU0YTEsMSwwLDEsMC0xLjQ2LTEuMzdMMy45MSwyNmw2LjUx''@;'; put 'put ''LDYuOTFhMSwxLDAsMSwwLDEuNDYtMS4zN0w3LjYsMjdIMjYuODNBNS4xNyw1LjE3LDAsMCwwLDMyLDIxLjg1di02LjFsLTIsMi4xMloiLz4nKSxiLkNsclNoYXBlRmlsZUdyb3VwPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIiBkPSJNMzEsMzRIMTNhMSwxLDAsMCwxLTEtMVYxMWExLDEsMCwwLDEsMS0xSDMxYTEsMSwwLDAsMSwxLDFWMzNBMSwxLDAsMCwxLDMxLDM0Wk0xNCwzMkgzMFYxMkgxNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y''@;'; put 'put ''IiB4PSIxNiIgeT0iMTYiIHdpZHRoPSIxMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTYiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjE2IiB5PSIyNCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNNiwyNFY0SDI0VjNhMSwxLDAsMCwwLTEt''@;'; put 'put ''MUg1QTEsMSwwLDAsMCw0LDNWMjVhMSwxLDAsMCwwLDEsMUg2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9Ik0xMCwyOFY4SDI4VjdhMSwxLDAsMCwwLTEtMUg5QTEsMSwwLDAsMCw4LDdWMjlhMSwxLDAsMCwwLDEs''@;'; put 'put ''MWgxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMxLDEwSDEzYTEsMSwwLDAsMC0xLDFWMzNhMSwxLDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMS0xVjExQTEsMSwwLDAsMCwzMSwxMFpNMjgsMjZIMTZWMjRIMjhabTAt''@;'; put 'put ''NEgxNlYyMEgyOFptMC00SDE2VjE2SDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTYsMjRWNEgyNFYzYTEsMSwwLDAsMC0xLTFINUExLDEsMCwwLDAsNCwzVjI1YTEsMSwwLDAsMCwxLDFINloiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMCwyOFY4SDI4VjdhMSwxLDAsMCwwLTEtMUg5QTEsMSwwLDAsMCw4LDdWMjlhMSwxLDAsMCwwLDEsMWgxWiIvPicpLGIuQ2xyU2hhcGVQYXBlcmNsaXA9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik04LjQyLDMyLjZBNi4zLDYuMywwLDAsMSw0LDMwLjc5bC0uMTMtLjEzQTYuMiw2LjIsMCwwLDEsMiwyNi4yMiw2Ljc3LDYuNzcsMCwwLDEsNCwyMS40TDE5LjUsNi4wN2E4LjY3LDguNjcsMCwwLDEsMTIuMTUt''@;'; put 'put ''LjM1QTgsOCwwLDAsMSwzNCwxMS40NGE5LDksMCwwLDEtMi43LDYuMzZMMTcuMzcsMzEuNkExLDEsMCwxLDEsMTYsMzAuMThMMjkuODksMTYuMzhBNyw3LDAsMCwwLDMyLDExLjQ0YTYsNiwwLDAsMC0xLjc2LTQuMyw2LjY3LDYuNjcsMCwwLDAtOS4zNC4zNUw1LjQ1LDIyLjgyQTQuNzgsNC43''@;'; put 'put ''OCwwLDAsMCw0LDI2LjIyYTQuMjEsNC4yMSwwLDAsMCwxLjI0LDNsLjEzLjEzYTQuNjQsNC42NCwwLDAsMCw2LjUtLjIxTDI1LjIyLDE1Ljk0QTIuNywyLjcsMCwwLDAsMjYsMTRhMi4zNSwyLjM1LDAsMCwwLS42OS0xLjY4LDIuNjEsMi42MSwwLDAsMC0zLjY2LjEzbC05LjIsOS4xMmExLDEs''@;'; put 'put ''MCwxLDEtMS40MS0xLjQyTDIwLjI4LDExYTQuNjIsNC42MiwwLDAsMSw2LjQ4LS4xM0E0LjMzLDQuMzMsMCwwLDEsMjgsMTRhNC42OCw0LjY4LDAsMCwxLTEuNDEsMy4zNEwxMy4yOCwzMC41OEE2LjkxLDYuOTEsMCwwLDEsOC40MiwzMi42WiIvPicpLGIuQ2xyU2hhcGVTaHJpbms9KDAscC5j''@;'; put 'put ''bHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwxNUgyMi40MWw5LjI1LTkuMjVhMSwxLDAsMCwwLTEuNDEtMS40MUwyMSwxMy41OVY0YTEsMSwwLDAsMC0yLDBWMTdIMzJhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNNCwxOWExLDEsMCwwLDAsMCwyaDkuNTlMNC4zMywzMC4yNWExLDEsMCwxLDAsMS40MSwxLjQxTDE1LDIyLjQxVjMyYTEsMSwwLDAsMCwyLDBWMTlaIi8+JyksYi5DbHJTaGFwZUFjY2Vzc2li''@;'; put 'put ''aWxpdHkxPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC40NCwzMS45NGE3LjMxLDcuMzEsMCwwLDEtNS43LTExLjg4TDcuMzIsMTguNjRhOS4zLDkuMywwLDAsMCwxMy4xLDEzLjExTDE5LDMwLjMzQTcuMjksNy4yOSwwLDAsMSwxNC40NCwzMS45NFoiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LjM2LDEuNjdhNC4xMiw0LjEyLDAsMSwwLDQuMTEsNC4xMUE0LjEyLDQuMTIsMCwwLDAsMjUuMzYsMS42N1ptMCw2LjIzYTIuMTIsMi4xMiwwLDEsMSwyLjExLTIuMTJBMi4xMiwyLjEyLDAsMCwx''@;'; put 'put ''LDI1LjM2LDcuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LjU2LDE4LjE4aC01YTEsMSwwLDAsMC0uMjQuMDVsMy4wOS0zLjU1YTIuODMsMi44MywwLDAsMC0uNjktNC4zM2wtOC00LjZhMSwxLDAsMCww''@;'; put 'put ''LTEuMTIuMDhMOS44Myw5LjU4QTEsMSwwLDAsMCw5LjY2LDExYTEsMSwwLDAsMCwuNzkuMzgsMSwxLDAsMCwwLC42MS0uMjFsNC4yNy0zLjM0LDMuMTEsMS43Ny01LjA4LDUuNzhoMGE5LjI4LDkuMjgsMCwwLDAtNC41MywxLjgzbDEuNDMsMS40M0E3LjMsNy4zLDAsMCwxLDIwLjQyLDI4Ljgx''@;'; put 'put ''bDEuNDIsMS40M2E5LjI3LDkuMjcsMCwwLDAsLjc3LTEwLjA2aDIuODJsLS43Nyw2LjUxYTEsMSwwLDAsMCwuODgsMS4xMWguMTJhMSwxLDAsMCwwLDEtLjg4bC45LTcuNjJhMSwxLDAsMCwwLS4yNS0uNzhBMSwxLDAsMCwwLDI2LjU2LDE4LjE4Wm0tNi4zNy03LjU2LDIuNTIsMS40NmEuNzku''@;'; put 'put ''NzksMCwwLDEsLjQuNTkuODEuODEsMCwwLDEtLjIuNjlMMTkuNzUsMTdBOS4xNyw5LjE3LDAsMCwwLDE2LDE1LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuNzcsMzEuOTRhNy4zMSw3LjMxLDAsMCwx''@;'; put 'put ''LTUuNy0xMS44OEw3LjY1LDE4LjY0YTkuMyw5LjMsMCwwLDAsMTMuMSwxMy4xMWwtMS40Mi0xLjQyQTcuMjksNy4yOSwwLDAsMSwxNC43NywzMS45NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNjUsMi4xYTMu''@;'; put 'put ''MTIsMy4xMiwwLDEsMCwzLjExLDMuMTJBMy4xMiwzLjEyLDAsMCwwLDI2LjY1LDIuMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODEsMTguMThIMjEuNDdxLS4zMS0uMzMtLjY2LS42M2w0LjM4LTQuODZhMi4x''@;'; put 'put ''NCwyLjE0LDAsMCwwLS41My0zLjI3TDIwLjksNy4yM2wwLDBMMTcuMDUsNS4wN2ExLDEsMCwwLDAtMS4xMS4wOEwxMS4xNSw4LjlhMSwxLDAsMCwwLDEuMjMsMS41OGw0LjI3LTMuMzQsMi44NywxLjYzTDEzLjYsMTUuMzlhOS4zMyw5LjMzLDAsMCwwLTQuNDQsMS44MmwxLjQyLDEuNDNBNy4z''@;'; put 'put ''LDcuMywwLDAsMSwyMC43NSwyOC44MWwxLjQzLDEuNDNBOS4yNyw5LjI3LDAsMCwwLDIzLDIwLjE4aDIuNzRsLS43Nyw2LjUxYTEsMSwwLDAsMCwuODcsMS4xMWguMTJhMSwxLDAsMCwwLDEtLjg4bC45LTcuNjJhMSwxLDAsMCwwLS4yNS0uNzhBMSwxLDAsMCwwLDI2LjgxLDE4LjE4WiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxiLkNsclNoYXBlQWNjZXNzaWJpbGl0eTI9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjA2LDExaC0yNGExLDEsMCwxLDAsMCwySDE0djkuNjVzMCwwLDAsMGwtMy43NSwxMGExLDEsMCwwLDAsLjU4LDEuMjks''@;'; put 'put ''MS4xMywxLjEzLDAsMCwwLC4zNi4wNiwxLDEsMCwwLDAsLjkzLS42NUwxNS42MiwyNGg0Ljc2bDMuNTIsOS4zNWExLDEsMCwwLDAsLjkzLjY1LDEuMTMsMS4xMywwLDAsMCwuMzYtLjA2LDEsMSwwLDAsMCwuNTgtMS4yOUwyMiwyMi42OHMwLDAsMCwwVjEzaDguMDZhMSwxLDAsMSwwLDAtMlpN''@;'; put 'put ''MjAsMjJIMTZWMTNoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEwYTQsNCwwLDEsMC00LTRBNCw0LDAsMCwwLDE4LDEwWm0wLTZhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTgsNFoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTcuOTYiIGN5PSI1IiByPSIzIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEwSDZhMSwxLDAsMCww''@;'; put 'put ''LDAsMmg4djguMzZzMCwwLDAsMEwxMC4xMSwzMy4xN2ExLDEsMCwwLDAsLjY2LDEuMjUsMS41NSwxLjU1LDAsMCwwLC4yOSwwLDEsMSwwLDAsMCwxLS43MWwzLjI5LTEwLjg0aDUuMzhMMjQsMzMuNzVhMSwxLDAsMCwwLDEsLjcxLDEuNTUsMS41NSwwLDAsMCwuMjksMCwxLDEsMCwwLDAsLjY2''@;'; put 'put ''LTEuMjVMMjIsMjAuNHMwLDAsMCwwVjEyaDhhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksYi5DbHJTaGFwZVNvcnRCeT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjguNTQsMTNINy40NmExLDEsMCwwLDEsMC0ySDI4LjU0''@;'; put 'put ''YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS4xNywxOUg3LjQ2YTEsMSwwLDAsMSwwLTJIMjEuMTdhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjc0LDI1SDcuNDZhMSwxLDAsMCwxLDAtMmg2LjI4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxiLkNsclNoYXBlQ29sbGFwc2VDYXJkPSgwLHAu''@;'; put 'put ''Y2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywyMUgzYTEsMSwwLDAsMC0xLDF2NmExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAsMCwxLTFWMjJBMSwxLDAsMCwwLDMzLDIxWm0tMSw2SDRWMjNIMzJaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0xOCwyMC4yMmw1LjY1LTUuNjVhLjgxLjgxLDAsMCwwLDAtMS4xNC44LjgsMCwwLDAtMS4xMywwTDE4LDE4bC00LjUyLTQuNTJhLjguOCwwLDAsMC0xLjEzLDAsLjgxLjgxLDAsMCwwLDAsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE0LjIybDUuNjUtNS42NWEuODEuODEsMCwwLDAsMC0xLjE0LjguOCwwLDAsMC0xLjEzLDBMMTgsMTIsMTMuNDgsNy40M2EuOC44LDAsMCwwLTEuMTMsMCwuODEuODEsMCwwLDAsMCwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyIiB5PSIyMiIgd2lkdGg9IjMyIiBoZWlnaHQ9IjgiIHJ4PSIxIiByeT0iMSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwy''@;'; put 'put ''MC43bC01Ljc5LTUuNzlhMSwxLDAsMCwxLDAtMS40MSwxLDEsMCwwLDEsMS40MSwwTDE4LDE3Ljg3bDQuMzgtNC4zN2ExLDEsMCwwLDEsMS40MSwwLDEsMSwwLDAsMSwwLDEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTE4LDE0LjUsMTIuMjEsOC43MWExLDEsMCwwLDEsMC0xLjQyLDEsMSwwLDAsMSwxLjQxLDBMMTgsMTEuNjdsNC4zOC00LjM4YTEsMSwwLDAsMSwxLjQxLDAsMSwxLDAsMCwxLDAsMS40MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksYi5DbHJTaGFw''@;'; put 'put ''ZUV4cGFuZENhcmQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLDZIM0ExLDEsMCwwLDAsMiw3VjI5YTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVY3QTEsMSwwLDAsMCwzMyw2Wk0zMiwyOEg0VjhIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjQ4LDE1Ljg2LDE4LDExLjM0bDQuNTIsNC41MmEuNzcuNzcsMCwwLDAsLjU2LjI0LjgxLjgxLDAsMCwwLC41Ny0xLjM3TDE4LDkuMDhsLTUuNjUsNS42NWEuOC44LDAsMSwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuNDgsMjEuODYsMTgsMTcuMzRsNC41Miw0LjUyYS43Ny43NywwLDAsMCwuNTYuMjQuODEuODEsMCwwLDAsLjU3LTEuMzdMMTgsMTUuMDhsLTUuNjUsNS42NWEuOC44LDAsMSwwLDEuMTMsMS4xM1oiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsNkgzQTEsMSwwLDAsMCwyLDdWMjlhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDMzLDZaTTIzLjc5LDIxLjQxYTEsMSwwLDAsMS0xLjQx''@;'; put 'put ''LDBMMTgsMTdsLTQuMzgsNC4zOGExLDEsMCwwLDEtMS40MSwwLDEsMSwwLDAsMSwwLTEuNDJMMTgsMTQuMiwyMy43OSwyMEExLDEsMCwwLDEsMjMuNzksMjEuNDFabTAtNi4yYTEsMSwwLDAsMS0xLjQxLDBMMTgsMTAuODNsLTQuMzgsNC4zOGExLDEsMCwwLDEtMS40MSwwLDEsMSwwLDAsMSww''@;'; put 'put ''LTEuNDJMMTgsOGw1Ljc5LDUuNzlBMSwxLDAsMCwxLDIzLjc5LDE1LjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlQnJpZWZjYXNlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiwyOGEwLDAsMCwwLDEsMCwwSDRWMjEuMzJh''@;'; put 'put ''Ny4xLDcuMSwwLDAsMS0yLTEuNDNWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5Ljg5YTYuNzQsNi43NCwwLDAsMS0yLDEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yNSwyMi40YTEsMSwwLDAsMCwxLTFW''@;'; put 'put ''MTUuOTRIMjRWMThIMTR2MkgyNHYxLjRBMSwxLDAsMCwwLDI1LDIyLjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbjxwYXRoIGQ9Ik0zMyw2SDI0VjQuMzhBMi40MiwyLjQyLDAsMCwwLDIxLjU1LDJoLTcuMUEyLjQyLDIuNDIsMCwwLDAsMTIsNC4z''@;'; put 'put ''OFY2SDNBMSwxLDAsMCwwLDIsN3Y4YTUsNSwwLDAsMCw1LDVoM3YxLjRhMSwxLDAsMCwwLDIsMFYxNS45NEgxMFYxOEg3YTMsMywwLDAsMS0zLTNWOEgzMnY3YTMsMywwLDAsMS0zLDNIMjh2MmgxYTUsNSwwLDAsMCw1LTVWN0ExLDEsMCwwLDAsMzMsNlpNMjIsNkgxNFY0LjQzQS40NS40NSww''@;'; put 'put ''LDAsMSwxNC40NSw0aDcuMTFhLjQzLjQzLDAsMCwxLC40NC40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTMwLDE4QTQuMDYsNC4wNiwwLDAsMCwzNCwxNFY2SDI0VjQuNDNBMi40NCwyLjQ0LDAsMCwwLDIxLjU1LDJoLTcuMUEy''@;'; put 'put ''LjQ0LDIuNDQsMCwwLDAsMTIsNC40M1Y2SDJ2OEE0LjA2LDQuMDYsMCwwLDAsNi4wNSwxOGg0VjE1LjkyaDJ2NS43YTEsMSwwLDEsMS0yLDBWMjAuMDZINi4wNkE2LjA2LDYuMDYsMCwwLDEsMiwxOC40OXY5LjQ1YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOC40OWE2LDYsMCww''@;'; put 'put ''LDEtNC4wNiwxLjU3SDI4VjE4Wk0xNCw0LjQzQS40NS40NSwwLDAsMSwxNC40NSw0aDcuMWEuNDUuNDUsMCwwLDEsLjQ1LjQzVjZIMTRaTTI2LDIxLjYyYTEsMSwwLDEsMS0yLDBWMjAuMDZIMTRWMThIMjRWMTUuOTJoMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEi''@;'; put 'put ''IC8+JyksYi5DbHJTaGFwZUNvbG9yUGlja2VyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywxMC4wNWE1LjA3LDUuMDcsMCwwLDAsLjEtNy4xN0E1LjA2LDUuMDYsMCwwLDAsMjYsM0wyMC43OCw4LjE1YTIuMTMsMi4xMywwLDAsMS0zLDBsLS42Ny0uNjdMMTUuNzIsOC45MiwyNy4w''@;'; put 'put ''OCwyMC4yOGwxLjQyLTEuNDItLjY3LS42N2EyLjEzLDIuMTMsMCwwLDEsMC0zWk0yNi40NCwxMy44YTQuMDcsNC4wNywwLDAsMC0xLjA4LDEuOTJsLTUuMDgtNS4wOEE0LjA3LDQuMDcsMCwwLDAsMjIuMiw5LjU2bDUuMTYtNS4xN2EzLjA5LDMuMDksMCwwLDEsNC4zNS0uMSwzLjA5LDMuMDks''@;'; put 'put ''MCwwLDEtLjEsNC4zNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTcuMywzMS41MWEyLDIsMCwxLDEtMi44My0yLjgzTDE4LjU4LDE0LjU3bC0xLjQyLTEuNDFMMy4wNSwyNy4yN2E0LDQsMCwwLDAtLjY4LDQuOEwuODksMzMuNTVB''@;'; put 'put ''MSwxLDAsMCwwLC44OSwzNWExLDEsMCwwLDAsMS40MiwwbDEuNDMtMS40NGEzLjkzLDMuOTMsMCwwLDAsMi4wOS42LDQuMDYsNC4wNiwwLDAsMCwyLjg4LTEuMkwyMi44MiwxOC44MSwyMS40MSwxNy40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48''@;'; put 'put ''cGF0aCBkPSJNMzMuNzMsMi4xMWE0LjA5LDQuMDksMCwwLDAtNS43Ni4xTDIyLjgxLDcuMzhhMy4xMywzLjEzLDAsMCwxLTQuMy4xMUwxNy4wOSw4LjkxLDI3LDE4Ljc5bDEuNDItMS40MkEzLjE4LDMuMTgsMCwwLDEsMjguNDYsMTNsNS4xNy01LjE3QTQuMDgsNC4wOCwwLDAsMCwzMy43Mywy''@;'; put 'put ''LjExWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yMi4xOCwxNi43OSw3LjQ2LDMxLjUxYTIsMiwwLDEsMS0yLjgyLTIuODNMMTkuMzUsMTRsLTEuNDEtMS40MUwzLjIyLDI3LjI3YTQsNCwwLDAsMC0uNjgsNC44TDEuMDYsMzMuNTVhMSwx''@;'; put 'put ''LDAsMCwwLDAsMS40MSwxLDEsMCwwLDAsMS40MSwwbDEuNDQtMS40NGEzLjkzLDMuOTMsMCwwLDAsMi4wOS42LDQuMDYsNC4wNiwwLDAsMCwyLjg4LTEuMkwyMy42LDE4LjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlQ29weVRvQ2xp''@;'; put 'put ''cGJvYXJkPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMi42LDRIMjEuNTVhMy44OSwzLjg5LDAsMCwwLTcuMzEsMEgxMy40QTIuNDEsMi40MSwwLDAsMCwxMSw2LjRWMTBIMjVWNi40QTIuNDEsMi40MSwwLDAsMCwyMi42LDRaTTIzLDhIMTNWNi4yNUEuMjUuMjUsMCwwLDEsMTMuMjUs''@;'; put 'put ''NmgyLjY5bC4xMi0xLjExQTEuMjQsMS4yNCwwLDAsMSwxNi42MSw0YTIsMiwwLDAsMSwzLjE1LDEuMThsLjA5Ljg0aDIuOWEuMjUuMjUsMCwwLDEsLjI1LjI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG48cGF0aCBkPSJNMzMuMjUsMTguMDZIMjEu''@;'; put 'put ''MzNsMi44NC0yLjgzYTEsMSwwLDEsMC0xLjQyLTEuNDJMMTcuNSwxOS4wNmw1LjI1LDUuMjVhMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjcxLTEuN2wtMi44NC0yLjg0SDMzLjI1YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIg''@;'; put 'put ''Lz5cbjxwYXRoIGQ9Ik0yOSwxNmgyVjYuNjhBMS42NiwxLjY2LDAsMCwwLDI5LjM1LDVIMjcuMDhWN0gyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTI5LDMxSDdWN0g5VjVINi42NEExLjY2LDEuNjYsMCwwLDAsNSw2LjY3VjMx''@;'; put 'put ''LjMyQTEuNjYsMS42NiwwLDAsMCw2LjY1LDMzSDI5LjM2QTEuNjYsMS42NiwwLDAsMCwzMSwzMS4zM1YyMi4wNkgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLGIuQ2xyU2hhcGVEcmFnSGFuZGxlPSgwLHAuY2xySWNvblNWRykoJzxjaXJjbGUg''@;'; put 'put ''Y3g9IjE1IiBjeT0iMTIiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTUiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48Y2lyY2xlIGN4PSIyMSIgY3k9''@;'; put 'put ''IjEyIiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxjaXJjbGUgY3g9IjIxIiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBjeD0iMjEiIGN5PSIxOCIgcj0iMS41''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48Y2lyY2xlIGN4PSIxNSIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLGIuQ2xyU2hhcGVGaWx0ZXIyPSgwLHAuY2xySWNvblNWRykoJzxw''@;'; put 'put ''YXRoIGQ9Ik0zMywxMUgzYTEsMSwwLDAsMCwwLDJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTI4LDE3SDhhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNMjMsMjNIMTNhMSwxLDAsMCwwLDAsMkgyM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksYi5DbHJTaGFwZU1vb249KDAscC5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggZD0iTTMxLDI3LjE5YTEsMSwwLDAsMC0xLS41NmMtLjI4LDAtLjU2LDAtLjg1LDBBMTEsMTEsMCwwLDEsMjQuOTIsNS42MWExLDEsMCwwLDAsLjYxLTEsMSwxLDAsMCwwLS42Ny0uOTEsMTQuNywxNC43LDAsMCwwLTUtLjg3LDE1LjEyLDE1LjEyLDAsMCwwLDAsMzAuMjQsMTQuNzgsMTQu''@;'; put 'put ''NzgsMCwwLDAsMTEtNC44MUExLDEsMCwwLDAsMzEsMjcuMTlaTTE5Ljg5LDMxLjEyYTEzLjEyLDEzLjEyLDAsMCwxLDAtMjYuMjQsMTEuODEsMTEuODEsMCwwLDEsMiwuMTYsMTMsMTMsMCwwLDAsNS43MiwyMy41M0ExMi43NSwxMi43NSwwLDAsMSwxOS44OSwzMS4xMloiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTI5LjIsMjYuNzJBMTIuMDcsMTIuMDcsMCwwLDEsMjIuOSw0LjQ0LDEzLjY4LDEzLjY4LDAsMCwwLDE5LjQ5LDRhMTQsMTQsMCwwLDAsMCwyOCwxMy44MiwxMy44MiwwLDAsMCwxMC45LTUuMzRBMTEuNzEsMTEu''@;'; put 'put ''NzEsMCwwLDEsMjkuMiwyNi43MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZVN1bj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsNi4zMWExLDEsMCwwLDAsMS0xVjEuOTFhMSwxLDAsMCwwLTIsMHYzLjRBMSwxLDAsMCwwLDE4''@;'; put 'put ''LDYuMzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0xOCwyOS42OWExLDEsMCwwLDAtMSwxdjMuNGExLDEsMCwwLDAsMiwwdi0zLjRBMSwxLDAsMCwwLDE4LDI5LjY5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNOC4zMiw5Ljc0QTEsMSwwLDAsMCw5LDEwYTEsMSwwLDAsMCwuNzEtLjI5LDEsMSwwLDAsMCwwLTEuNDJMNy4zMyw1LjkyQTEsMSwwLDAsMCw1LjkyLDcuMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0''@;'; put 'put ''aCBkPSJNMjcuNjgsMjYuMjZhMSwxLDAsMSwwLTEuNDIsMS40MmwyLjQxLDIuNGExLDEsMCwwLDAsLjcxLjMsMSwxLDAsMCwwLC43LS4zLDEsMSwwLDAsMCwwLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNNi4zMSwxOGExLDEs''@;'; put 'put ''MCwwLDAtMS0xSDEuOTFhMSwxLDAsMCwwLDAsMmgzLjRBMSwxLDAsMCwwLDYuMzEsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzQuMDksMTdoLTMuNGExLDEsMCwxLDAsMCwyaDMuNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTguMzIsMjYuMjZsLTIuNCwyLjQxYTEsMSwwLDAsMCwuNywxLjcxLDEsMSwwLDAsMCwuNzEtLjNsMi40MS0yLjRhMSwxLDAsMSwwLTEuNDItMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC03IiAvPjxwYXRoIGQ9Ik0yNywxMGExLDEsMCwwLDAsLjcxLS4yOWwyLjQtMi40MWExLDEsMCwwLDAsMC0xLjQxLDEsMSwwLDAsMC0xLjQxLDBsLTIuNDEsMi40YTEsMSwwLDAsMCwwLDEuNDJBMSwxLDAsMCwwLDI3LDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTgiIC8+PHBhdGggZD0iTTE4LjEzLDcuNzVhMTAuMTMsMTAuMTMsMCwxLDAsMTAsMTAuMTNBMTAuMDgsMTAuMDgsMCwwLDAsMTguMTMsNy43NVptMCwxOC4yNWE4LjEzLDguMTMsMCwxLDEsOC04LjEyQTguMDgsOC4wOCwwLDAsMSwxOC4xMywyNloiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiAvPjxwYXRoIGQ9Ik0xOCw2LjQyYTEsMSwwLDAsMCwxLTFWMS45MWExLDEsMCwwLDAtMiwwVjUuNDJBMSwxLDAsMCwwLDE4LDYuNDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyOS41''@;'; put 'put ''OGExLDEsMCwwLDAtMSwxdjMuNTFhMSwxLDAsMCwwLDIsMFYzMC41OEExLDEsMCwwLDAsMTgsMjkuNThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik04LjQsOS44MUExLDEsMCwwLDAsOS44MSw4LjRMNy4zMyw1LjkyQTEsMSwwLDAsMCw1Ljky''@;'; put 'put ''LDcuMzNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNy42LDI2LjE5YTEsMSwwLDAsMC0xLjQxLDEuNDFsMi40OCwyLjQ4YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxw''@;'; put 'put ''YXRoIGQ9Ik02LjQyLDE4YTEsMSwwLDAsMC0xLTFIMS45MWExLDEsMCwwLDAsMCwySDUuNDJBMSwxLDAsMCwwLDYuNDIsMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zNC4wOSwxN0gzMC41OGExLDEsMCwwLDAsMCwyaDMuNTFhMSwxLDAs''@;'; put 'put ''MCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiIC8+PHBhdGggZD0iTTguNCwyNi4xOSw1LjkyLDI4LjY3YTEsMSwwLDAsMCwxLjQxLDEuNDFMOS44MSwyNy42QTEsMSwwLDAsMCw4LjQsMjYuMTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC03IiAvPjxwYXRoIGQ9Ik0yNy42LDkuODFsMi40OC0yLjQ4YTEsMSwwLDAsMC0xLjQxLTEuNDFMMjYuMTksOC40QTEsMSwwLDAsMCwyNy42LDkuODFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC04IiAvPjxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjEwIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC05IiAvPicpLGIuQ2xyU2hhcGVXYW5kPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzQuMSw0LDMxLjcxLDEuNmExLjgzLDEuODMsMCwwLDAtMS4z''@;'; put 'put ''MS0uNTRoMGEyLjA1LDIuMDUsMCwwLDAtMS40NS42MkwxLjc2LDI5LjIzQTIsMiwwLDAsMCwxLjY4LDMybDIuNCwyLjQzQTEuODMsMS44MywwLDAsMCw1LjM5LDM1aDBhMi4wNSwyLjA1LDAsMCwwLDEuNDUtLjYyTDM0LDYuNzlBMiwyLDAsMCwwLDM0LjEsNFpNNS40MiwzMi45MywzLjE2LDMw''@;'; put 'put ''LjY1aDBMMjQuMTEsOS40M2wyLjI1LDIuMjhaTTMyLjYxLDUuMzlsLTUuMTIsNS4xOEwyNS4yNCw4LjI5bDUuMTMtNS4yLDIuMjUsMi4yOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIuNTMsMjAuNDdsMi4w''@;'; put 'put ''OS0yLjA5YS44LjgsMCwwLDAtMS4xMy0xLjEzbC0yLjA5LDIuMDktMi4wOS0yLjA5YS44LjgsMCwwLDAtMS4xMywxLjEzbDIuMDksMi4wOS0yLjA5LDIuMDlhLjguOCwwLDAsMCwxLjEzLDEuMTNsMi4wOS0yLjA5LDIuMDksMi4wOWEuOC44LDAsMCwwLDEuMTMtMS4xM1oiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTQuNzgsNi41MWEuOC44LDAsMCwwLDEuMTMsMEwxNy40LDVsMS40OSwxLjQ5QS44LjgsMCwwLDAsMjAsNS4zOEwxOC41NCwzLjg5LDIwLDIuNGEuOC44LDAsMCwwLTEuMTMtMS4xM0wxNy40''@;'; put 'put ''LDIuNzYsMTUuOTEsMS4yN0EuOC44LDAsMSwwLDE0Ljc4LDIuNGwxLjQ5LDEuNDlMMTQuNzgsNS4zOEEuOC44LDAsMCwwLDE0Ljc4LDYuNTFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTguMzMsMTUuMjZhLjgu''@;'; put 'put ''OCwwLDAsMCwxLjEzLDBsMS4xNi0xLjE2LDEuMTYsMS4xNmEuOC44LDAsMSwwLDEuMTMtMS4xM0wxMS43NiwxM2wxLjE2LTEuMTZhLjguOCwwLDEsMC0xLjEzLTEuMTNsLTEuMTYsMS4xNkw5LjQ2LDEwLjY4YS44LjgsMCwxLDAtMS4xMywxLjEzTDkuNDksMTMsOC4zMywxNC4xM0EuOC44LDAs''@;'; put 'put ''MCwwLDguMzMsMTUuMjZaIi8+JyksYi5DbHJTaGFwZUN1cnNvck1vdmU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI4Ljg1LDEyLjg5YTEsMSwwLDAsMC0xLjQyLDAsMSwxLDAsMCwwLDAsMS40MUwzMC4xNCwxN0gxOVY1Ljg2bDIuNjksMi43YTEsMSwwLDAsMCwxLjQxLDAsMSwxLDAs''@;'; put 'put ''MCwwLDAtMS40MkwxOCwyLDEyLjg5LDcuMTVhMSwxLDAsMCwwLS4yOS43MSwxLDEsMCwwLDAsMS43MS43TDE3LDUuODZWMTdINS44NmwyLjctMi42OWExLDEsMCwwLDAsMC0xLjQxLDEsMSwwLDAsMC0xLjQyLDBMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjct''@;'; put 'put ''MS43MUw1Ljg2LDE5SDE3VjMwLjE0bC0yLjY5LTIuN2ExLDEsMCwwLDAtMS43MS43LDEsMSwwLDAsMCwuMjkuNzFMMTgsMzRsNS4xMS01LjE0YTEsMSwwLDAsMCwwLTEuNDIsMSwxLDAsMCwwLTEuNDEsMEwxOSwzMC4xNFYxOUgzMC4xNGwtMi43LDIuNjlhMSwxLDAsMCwwLC43LDEuNzEsMSwx''@;'; put 'put ''LDAsMCwwLC43MS0uMjlMMzQsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlQ2xvbmU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYsNkgyMnY0aDJWNmEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNlYyMmEyLDIs''@;'; put 'put ''MCwwLDAsMiwyaDRWMjJINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMCwxMkgxNGEyLDIsMCwwLDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNEEyLDIsMCwwLDAsMzAsMTJabTAsMThIMTRWMTRIMzBa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cG9seWdvbiBwb2ludHM9IjIxIDI4IDIzIDI4IDIzIDIzIDI4IDIzIDI4IDIxIDIzIDIxIDIzIDE2IDIxIDE2IDIxIDIxIDE2IDIxIDE2IDIzIDIxIDIzIDIxIDI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjQsMTBWNmEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNlYyMmEyLDIsMCwwLDAsMiwyaDRWMTJhMiwyLDAsMCwxLDItMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLDEy''@;'; put 'put ''SDE0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE0QTIsMiwwLDAsMCwzMCwxMlpNMjgsMjNIMjN2NUgyMVYyM0gxNlYyMWg1VjE2aDJ2NWg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlRGV0''@;'; put 'put ''YWlscz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMjJINFY4SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+''@;'; put 'put ''PHBhdGggZD0iTTksMTRIMjdhMSwxLDAsMCwwLDAtMkg5YTEsMSwwLDAsMCwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNOSwxOEgyN2ExLDEsMCwwLDAsMC0ySDlhMSwxLDAsMCwwLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik05LDIySDE5YTEsMSwwLDAsMCwwLTJIOWExLDEsMCwwLDAsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwy''@;'; put 'put ''LDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0xOSwyMkg5YTEsMSwwLDAsMSwwLTJIMTlhMSwxLDAsMCwxLDAsMlptOC00SDlhMSwxLDAsMCwxLDAtMkgyN2ExLDEsMCwwLDEsMCwyWm0wLTRIOWExLDEsMCwwLDEsMC0ySDI3YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVEcmFnSGFuZGxlQ29ybmVyPSgwLHAuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjEyIiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PGNpcmNsZSBj''@;'; put 'put ''eD0iMTgiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxjaXJjbGUgY3g9IjI0IiBjeT0i''@;'; put 'put ''MTIiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBjeD0iMjQiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48Y2lyY2xlIGN4PSIyNCIgY3k9IjE4IiByPSIxLjUi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLGIuQ2xyU2hhcGVFcmFzZXI9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM1LjYyLDEyYTIuODIsMi44MiwwLDAsMC0uODQtMkwyNy40OSwyLjY1YTIuOSwyLjksMCwwLDAtNCwwTDIuODMsMjMuMjhh''@;'; put 'put ''Mi44NCwyLjg0LDAsMCwwLDAsNEw3LjUzLDMySDNhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0ySDE2Ljc0bDE4LTE4QTIuODIsMi44MiwwLDAsMCwzNS42MiwxMlpNMTMuOTEsMzJIMTAuMzZMNC4yNSwyNS44OWEuODQuODQsMCwwLDEsMC0xLjE5bDUuNTEtNS41Miw4LjQ5LDguNDha''@;'; put 'put ''TTMzLjM3LDEyLjU0LDE5LjY2LDI2LjI1bC04LjQ4LTguNDksMTMuNy0xMy43YS44Ni44NiwwLDAsMSwxLjE5LDBsNy4zLDcuMjlhLjg2Ljg2LDAsMCwxLC4yNS42QS44Mi44MiwwLDAsMSwzMy4zNywxMi41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAv''@;'; put 'put ''PjxwYXRoIGQ9Ik0yOCwzMkgxNS4zM0wxOSwyOC4zN2wtOS45LTkuOUwzLjU0LDI0YTEuODMsMS44MywwLDAsMCwwLDIuNkw5LDMySDNhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzQu''@;'; put 'put ''MDgsMTAuNjVsLTcuMy03LjNhMS44MywxLjgzLDAsMCwwLTIuNiwwTDEwLjQ3LDE3LjA2bDkuOSw5LjlMMzQuMDgsMTMuMjVBMS44NSwxLjg1LDAsMCwwLDM0LjA4LDEwLjY1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlTGFuZHNjYXBl''@;'; put 'put ''PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlptMCwyMkg0VjhIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0''@;'; put 'put ''aCBkPSJNOSwyMmEuODIuODIsMCwwLDAsLjU1LS4yMS44LjgsMCwwLDAsMC0xLjEzTDcuODMsMTguOEgyOC4xN2wtMS43MiwxLjg2YS44LjgsMCwwLDAsMCwxLjEzQS44Mi44MiwwLDAsMCwyNywyMmEuNzguNzgsMCwwLDAsLjU4LS4yNkwzMS4wOSwxOGwtMy40Ny0zLjc0YS43OS43OSwwLDAs''@;'; put 'put ''MC0xLjEzLDAsLjguOCwwLDAsMCwwLDEuMTNsMS43MiwxLjg2SDcuODNsMS43Mi0xLjg2YS44LjgsMCwwLDAsMC0xLjEzLjc5Ljc5LDAsMCwwLTEuMTMsMEw0LjkxLDE4bDMuNDcsMy43NEEuNzguNzgsMCwwLDAsOSwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0yIiAvPjxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNMjcuNzcsMjEuODhhMSwxLDAsMCwxLS43My4zMiwxLDEsMCwwLDEtLjY4LS4yNywxLDEsMCwwLDEtLjA2LTEuNDFMMjcuNzEsMTlI''@;'; put 'put ''OC4yOUw5LjcsMjAuNTJhMSwxLDAsMCwxLS4wNiwxLjQxQTEsMSwwLDAsMSw5LDIyLjJhMSwxLDAsMCwxLS43My0uMzJMNC42NCwxOGwzLjU5LTMuODhBMSwxLDAsMCwxLDkuNywxNS40OEw4LjI5LDE3SDI3LjcxTDI2LjMsMTUuNDhhMSwxLDAsMCwxLDEuNDctMS4zNkwzMS4zNiwxOFoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZVBhc3RlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwxMkgyNnYyaDR2MmgyVjE0QTIsMiwwLDAsMCwzMCwxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''IiAvPjxyZWN0IHg9IjMwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDMwSDI4djJoMmEyLDIsMCwwLDAsMi0yVjI2SDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0LDIyVjZhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDZWMjJhMiwyLDAsMCwwLDIsMkgyMkEyLDIsMCwwLDAsMjQsMjJaTTYsNkgyMlYyMkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHJlY3Qg''@;'; put 'put ''eD0iMjAiIHk9IjMwIiB3aWR0aD0iNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTQsMjZIMTJ2NGEyLDIsMCwwLDAsMiwyaDRWMzBIMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NiIgLz48cGF0aCBkPSJNMzAsMTJIMjZ2Mmg0djJoMlYxNEEyLDIsMCwwLDAsMzAsMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxyZWN0IHg9IjMwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMiIgLz48cGF0aCBkPSJNMzAsMzBIMjh2MmgyYTIsMiwwLDAsMCwyLTJWMjZIMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxyZWN0IHg9IjQiIHk9IjQiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgcng9IjIiIHJ5PSIyIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxyZWN0IHg9IjIwIiB5PSIzMCIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz48cGF0aCBkPSJNMTQsMjZIMTJ2NGEyLDIsMCwwLDAsMiwyaDRWMzBIMTRaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiAvPicpLGIuQ2xyU2hhcGVQb3J0cmFpdD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUuMzQsMjYuNDVhLjguOCwwLDAsMC0xLjEzLDAsLjc5Ljc5LDAsMCwwLDAsMS4xM0wxOCwzMS4wOWwzLjc0LTMuNDdhLjc5Ljc5LDAsMCwwLC4w''@;'; put 'put ''NS0xLjEzLjguOCwwLDAsMC0xLjEzLDBMMTguOCwyOC4xN1Y3LjgzbDEuODYsMS43MmEuOC44LDAsMSwwLDEuMDgtMS4xN0wxOCw0LjkxLDE0LjI2LDguMzhhLjc5Ljc5LDAsMCwwLDAsMS4xMy44LjgsMCwwLDAsMS4xMywwTDE3LjIsNy44M1YyOC4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlptMCwzMEg4VjRIMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIg''@;'; put 'put ''Lz48cGF0aCBkPSJNMjgsMkg4QTIsMiwwLDAsMCw2LDRWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAsMCwwLDI4LDJaTTIwLjUyLDI2LjNhMSwxLDAsMCwxLDEuMzYsMS40N0wxOCwzMS4zNmwtMy44OC0zLjU5YTEsMSwwLDAsMSwxLjM2LTEuNDdMMTcsMjcuNzFW''@;'; put 'put ''OC4yOUwxNS40OCw5LjdhMSwxLDAsMCwxLTEuMzYtMS40N0wxOCw0LjY0bDMuODgsMy41OWExLDEsMCwwLDEsLjA1LDEuNDEsMSwxLDAsMCwxLS43My4zMiwxLDEsMCwwLDEtLjY4LS4yNkwxOSw4LjI5VjI3LjcxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4n''@;'; put 'put ''KSxiLkNsclNoYXBlVHJlZVZpZXc9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE1LDMySDExYTEsMSwwLDAsMS0xLTFWMjdhMSwxLDAsMCwxLDEtMWg0YTEsMSwwLDAsMSwxLDF2NEExLDEsMCwwLDEsMTUsMzJabS0zLTJoMlYyOEgxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xNSwxNkgxMWExLDEsMCwwLDAtMSwxdjEuMkg1LjhWMTJIN2ExLDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDcsNkgzQTEsMSwwLDAsMCwyLDd2NGExLDEsMCwwLDAsMSwxSDQuMlYyOS44aDYuMzZhLjguOCwwLDAsMCwwLTEuNkg1LjhWMTku''@;'; put 'put ''OEgxMFYyMWExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxN0ExLDEsMCwwLDAsMTUsMTZaTTQsOEg2djJINFpNMTQsMjBIMTJWMThoMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zNCw5YTEsMSwwLDAsMC0xLTFIMTB2Mkgz''@;'; put 'put ''M0ExLDEsMCwwLDAsMzQsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMywxOEgxOHYySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMsMjhI''@;'; put 'put ''MTh2MkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHJlY3QgeD0iMTAiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiByeD0iMSIgcnk9IjEiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+''@;'; put 'put ''PHBhdGggZD0iTTE1LDE2SDExYTEsMSwwLDAsMC0xLDF2MS4ySDUuOFYxMkg3YTEsMSwwLDAsMCwxLTFWN0ExLDEsMCwwLDAsNyw2SDNBMSwxLDAsMCwwLDIsN3Y0YTEsMSwwLDAsMCwxLDFINC4yVjI5LjhIMTFhLjguOCwwLDEsMCwwLTEuNkg1LjhWMTkuOEgxMFYyMWExLDEsMCwwLDAsMSwx''@;'; put 'put ''aDRhMSwxLDAsMCwwLDEtMVYxN0ExLDEsMCwwLDAsMTUsMTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMyw4SDEwdjJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGgg''@;'; put 'put ''ZD0iTTMzLDE4SDE4djJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBhdGggZD0iTTMzLDI4SDE4djJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIC8+JyksYi5DbHJT''@;'; put 'put ''aGFwZUN1cnNvckhhbmRHcmFiPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOC4wOSw5Ljc0YTQsNCwwLDAsMC0xLjE2LjE5Yy0uMTktMS4yNC0xLjU1LTIuMTgtMy4yNy0yLjE4QTQsNCwwLDAsMCwyMi4xMyw4LDMuMzcsMy4zNywwLDAsMCwxOSw2LjNhMy40NSwzLjQ1LDAsMCwwLTIu''@;'; put 'put ''ODcsMS4zMiwzLjY1LDMuNjUsMCwwLDAtMS44OS0uNTFBMy4wNSwzLjA1LDAsMCwwLDExLDkuODl2LjkxYy0xLjA2LjQtNC4xMSwxLjgtNC45MSw0Ljg0cy4zNCw4LDIuNjksMTEuNzhhMjUuMjEsMjUuMjEsMCwwLDAsNS45LDYuNDEuOS45LDAsMCwwLC41My4xN0gyNS41NWEuOTIuOTIsMCww''@;'; put 'put ''LDAsLjU1LS4xOSwxMy4xMywxMy4xMywwLDAsMCwzLjc1LTYuMTNBMjUuOCwyNS44LDAsMCwwLDMxLjQxLDE4di01LjVBMy4wOCwzLjA4LDAsMCwwLDI4LjA5LDkuNzRaTTI5LjYxLDE4YTI0LDI0LDAsMCwxLTEuNDcsOS4xNUExMi40NiwxMi40NiwwLDAsMSwyNS4yLDMyLjJIMTUuNDdhMjMu''@;'; put 'put ''NzUsMjMuNzUsMCwwLDEtNS4yLTUuNzJjLTIuMzctMy44Ni0zLTguMjMtMi40OC0xMC4zOUE1LjcsNS43LDAsMCwxLDExLDEyLjc2djcuNjVhLjkuOSwwLDAsMCwxLjgsMFY5Ljg5YzAtLjQ3LjU5LTEsMS40Ni0xczEuNDkuNTIsMS40OSwxdjUuNzJoMS44VjguODFjMC0uMjguNTgtLjcxLDEu''@;'; put 'put ''NDYtLjcxczEuNTMuNDgsMS41My43NXY2Ljg5aDEuOFYxMGwuMTctLjEyYTIuMSwyLjEsMCwwLDEsMS4xOC0uMzJjLjkzLDAsMS41LjQ0LDEuNS42OGwwLDYuNUgyN1YxMS44N2ExLjkxLDEuOTEsMCwwLDEsMS4xMi0uMzNjLjg2LDAsMS41Mi41MSwxLjUyLjk0WiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZUN1cnNvckhhbmRPcGVuPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMS40Niw4LjU3QTMuMTEsMy4xMSwwLDAsMCwyNyw1Ljc1YTMuMTksMy4xOSwwLDAsMC00LjY2LTIuNjQsMy4yOSwzLjI5LDAsMCwwLTYu''@;'; put 'put ''NDItLjc2LDMuMjMsMy4yMywwLDAsMC0xLjY2LS40NkEzLjI3LDMuMjcsMCwwLDAsMTEsNS4xOFYxNy44NGMtMS4yOC0xLjYtMi41My0zLjE4LTIuNzItMy40NUEzLjE5LDMuMTksMCwwLDAsNS41NiwxMi45YTMuMzcsMy4zNywwLDAsMC0zLjQ3LDMuNDhDMi4xOCwxOC4xOCw1LjY2LDI0LjU0''@;'; put 'put ''LDgsMjhjMy41NCw1LjI0LDYuOTIsNiw3LjA3LDZsLjE4LDBIMjUuNTlhLjkyLjkyLDAsMCwwLC41NS0uMTksMTMuMTMsMTMuMTMsMCwwLDAsMy43NS02LjEzYzEtMy4wOSwxLjUzLTcuNTMsMS41OC0xMy41NlpNMjguMTgsMjcuMTJhMTIuNDYsMTIuNDYsMCwwLDEtMi45NCw1LjA4SDE1LjMz''@;'; put 'put ''Yy0uNDctLjE0LTMuMDctMS4xLTUuODctNS4yNVMzLjk0LDE3LjI3LDMuODksMTYuMjlhMS41LDEuNSwwLDAsMSwuNDUtMS4xMywxLjUyLDEuNTIsMCwwLDEsMS4xNC0uNDYsMS40MywxLjQzLDAsMCwxLDEuMzIuNzFjLjI5LjQzLDIuMzYsMywzLjU3LDQuNTNMMTIuOCwxOC4zVjUuMThhMS40''@;'; put 'put ''OCwxLjQ4LDAsMSwxLDIuOTUsMFYxNi4zMmgxLjh2LTEzYTEuNTEsMS41MSwwLDAsMSwzLDBWMTYuNDVoMS44VjZhMS40MywxLjQzLDAsMSwxLDIuODUsMFYxNy40NEgyN1Y4LjU0YTEuMzMsMS4zMywwLDAsMSwyLjY1LDB2NS41NUMyOS42MiwyMCwyOS4xNCwyNC4yMSwyOC4xOCwyNy4xMloi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVGaWxlWmlwPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwzMC4yVjEybC04LjEtNy45SDcuOEM2LjgsNC4xLDYsNC45LDYsNmMwLDAsMCwwLDAsMHYyNC4yYzAsMSwwLjcsMS44''@;'; put 'put ''LDEuNywxLjhjMCwwLDAuMSwwLDAuMSwwaDIwLjNcblx0XHRjMSwwLDEuOC0wLjcsMS44LTEuN0MzMCwzMC4zLDMwLDMwLjIsMzAsMzAuMnogTTIyLDYuNmw1LjYsNS40SDIyVjYuNnogTTI4LDMwSDcuOUw4LDZoMTJ2OGg4VjMweiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEiIC8+PHBhdGggZD0iTTEyLDI0YzAsMS43LDEuMywzLDMsM3MzLTEuMywzLTN2LTRoLTZWMjR6IE0xMy40LDI0di0yLjZoMy4yVjI0YzAuMSwwLjktMC42LDEuNy0xLjUsMS43Yy0wLjksMC4xLTEuNy0wLjYtMS43LTEuNVxuXHRcdEMxMy40LDI0LjIsMTMuNCwyNC4xLDEzLjQs''@;'; put 'put ''MjR6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTguMiw5YzAtMC42LTAuNC0xLTEtMUgxNXYyaDIuMkMxNy44LDEwLDE4LjIsOS42LDE4LjIsOXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxw''@;'; put 'put ''YXRoIGQ9Ik0xMi43LDEwYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxSDE1di0ySDEyLjd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMTcuMiwxNGMwLjYsMCwxLTAuNCwxLTFzLTAuNC0xLTEtMUgxNXYySDE3LjJ6IiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTEuNywxNWMwLDAuNiwwLjQsMSwxLDFIMTV2LTJoLTIuM0MxMi4yLDE0LDExLjcsMTQuNCwxMS43LDE1eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0i''@;'; put 'put ''TTE3LjIsMThjMC42LDAsMS0wLjQsMS0xcy0wLjQtMS0xLTFIMTV2MkgxNy4yeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+PHBhdGggZD0iTTE1LDI1LjZjMC45LDAsMS42LTAuNywxLjYtMS42di0yLjZoLTMuMlYyNEMxMy40LDI0LjksMTQuMSwyNS42''@;'; put 'put ''LDE1LDI1LjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMS45LDRINy44QzYuOCw0LDYsNC45LDYsNS45djI0LjJjMCwxLDAuOCwxLjksMS44LDEuOWgyMC4zYzEsMCwxLjgtMC45LDEuOC0xLjlWMTEuOUwyMS45LDR6IE0xOCwyNGMwLDEu''@;'; put 'put ''Ny0xLjMsMy0zLDNcblx0XHRzLTMtMS4zLTMtM3YtNGg2VjI0eiBNMTcuMiwxMmMwLjYsMCwxLDAuNCwxLDFzLTAuNCwxLTEsMUgxNXYyaDIuMmMwLjYsMCwxLDAuNCwxLDFzLTAuNCwxLTEsMUgxNXYtMmgtMi4yYy0wLjYsMC0xLTAuNC0xLTFcblx0XHRzMC40LTEsMS0xSDE1di0yaC0yLjJj''@;'; put 'put ''LTAuNiwwLTEtMC40LTEtMXMwLjQtMSwxLTFIMTVWOGgyLjJjMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFIMTV2MkgxNy4yeiBNMjEuOSwxMlY2LjVsNS43LDUuNUgyMS45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlRmlsdGVyT2Zm''@;'; put 'put ''PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNCw2LjRDMzQsNS42LDMzLjMsNSwzMi41LDVIMTAuM2wyLDJIMzJ2MC42bC05LjYsOS42bDEuNCwxLjRMMzMuNCw5QzMzLjgsOC42LDM0LDguMSwzNCw3LjZWNi41QzM0LDYuNSwzNCw2LjQsMzQsNi40eiJcblx0XHQgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIuNywzbDIsMmgtMUMyLjksNC45LDIuMSw1LjUsMiw2LjN2MS4xYzAsMC41LDAuMiwxLDAuNiwxLjRMMTQsMjAuMnYxMC4zbDEuOSwwLjhWMTkuNEw0LDcuNVY3aDIuN0wyMCwyMC4zdjEyLjlsMiwwLjhcblx0XHRj''@;'; put 'put ''MCwwLDAsMCwwLTAuMVYyMi4zbDEwLjEsMTAuMWwxLjQtMS40TDQuMSwxLjZMMi43LDN6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjMuOSwxOC42TDEwLjMsNS4xaDIyLjJDMzMuMyw1LDM0LDUuNiwzNCw2LjRjMCwwLDAsMCwwLDAu''@;'; put 'put ''MXYxLjFjMCwwLjUtMC4yLDEtMC42LDEuNEwyMy45LDE4LjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMy41LDMxTDQuMSwxLjZMMi42LDNsMi4xLDIuMUgzLjVDMi43LDUsMiw1LjYsMiw2LjRjMCwwLDAsMCwwLDAuMXYxLjFjMCwwLjUs''@;'; put 'put ''MC4yLDEsMC42LDEuNEwxNCwyMC41djEwLjFsOCwzLjRWMjIuNFxuXHRsMTAuMSwxMC4xTDMzLjUsMzF6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGIuQ2xyU2hhcGVSZWN5Y2xlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjQsMTcuNGMwLjIs''@;'; put 'put ''MC4xLDAuMywwLjEsMC41LDAuMWMwLjIsMCwwLjQtMC4xLDAuNS0wLjFsNy00LjFjMC4zLTAuMiwwLjUtMC41LDAuNS0wLjljMC0wLjQtMC4yLTAuNy0wLjUtMC45TDExLjksMTBcblx0XHRMMTQsNi4yYzAuNC0wLjcsMS0xLjMsMS43LTEuN2MyLTEuMSw0LjUtMC4zLDUuNiwxLjdjMC4zLDAu''@;'; put 'put ''NSwwLjksMC42LDEuNCwwLjNjMCwwLDAsMCwwLjEsMGMwLjQtMC4zLDAuNS0wLjksMC4zLTEuM1xuXHRcdGMtMC42LTEtMS40LTEuOS0yLjQtMi40Yy0zLTEuNi02LjctMC42LTguMywyLjRMOS42LDkuOWMtMC4zLDAuNS0wLjEsMS4xLDAuMywxLjRsMiwxLjJsLTQsMi40VjguMmMwLTAuNi0w''@;'; put 'put ''LjQtMS0xLTFcblx0XHRDNi40LDcuMyw2LDcuNyw2LDguM3Y4LjNDNiwxNi45LDYuMiwxNy4yLDYuNCwxNy40eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMyLjEsMjFsLTMuNS02LjJjLTAuMS0wLjItMC40LTAuNC0wLjYtMC41Yy0w''@;'; put 'put ''LjMtMC4xLTAuNSwwLTAuOCwwLjFsLTIuMiwxLjNWMTFsNS41LDMuM2MwLjEsMCwwLjEsMC4xLDAuMiwwLjFcblx0XHRjMC41LDAuMiwxLjEsMCwxLjMtMC41YzAuMi0wLjUsMC0xLjEtMC41LTEuM2wtNy00LjJjLTAuMy0wLjItMC43LTAuMi0xLDBDMjMuMSw4LjUsMjMsOC44LDIzLDkuMnY4''@;'; put 'put ''LjNjMCwwLjQsMC4xLDAuOCwwLjQsMVxuXHRcdGMwLjMsMC4yLDAuNywwLjIsMSwwbDIuOS0xLjdsMyw1LjNjMC43LDEuMywwLjcsMi44LDAsNC4xYy0wLjYsMS4yLTEuOSwxLjktMy4yLDEuOWgtMC45Yy0wLjUsMC0xLjIsMC40LTEuMiwxXG5cdFx0YzAuMSwwLjYsMC42LDEsMS4yLDFoMC45''@;'; put 'put ''YzIuMSwwLDQtMS4xLDUtMi45QzMzLjIsMjUuMiwzMy4yLDIyLjksMzIuMSwyMXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMi40LDI4LjJsLTctNC4yYy0wLjMtMC4yLTAuNy0wLjItMSwwYy0wLjMsMC4yLTAuNCwwLjUtMC40LDAu''@;'; put 'put ''OXYzLjNIOS4xYy0xLjUtMC4xLTIuOS0wLjktMy42LTIuM1xuXHRcdGMtMC44LTEuNC0wLjgtMy4yLDAtNC42YzAuMy0wLjUsMC4xLTEuMS0wLjQtMS40Yy0wLjUtMC4zLTEuMS0wLjEtMS40LDAuNGMtMS4yLDIuMS0xLjEsNC42LDAuMSw2LjZDNC45LDI4LjgsNywzMCw5LjIsMzBIMTVcblx0''@;'; put 'put ''XHRjMC42LDAsMS0wLjQsMS0xdi0yLjRsNCwyLjRsLTUuNiwzLjNjLTAuMywwLjItMC41LDAuNS0wLjUsMC45YzAsMC42LDAuNSwxLDEsMWMwLjIsMCwwLjMtMC4xLDAuNS0wLjJsNy00LjJcblx0XHRjMC4yLTAuMSwwLjMtMC4yLDAuNC0wLjRDMjMuMSwyOSwyMi45LDI4LjQsMjIuNCwyOC4y''@;'; put 'put ''eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIwLjgsMy4xYy0zLTEuNi02LjctMC42LTguNCwyLjRsLTIuMiwzLjhsLTItMS4xQzguMiw4LDgsOCw3LjksOEM3LjQsOCw3LDguNCw3LDguOXY3LjJjMCwwLjMsMC4xLDAuNiwwLjQsMC44''@;'; put 'put ''XG5cdFx0YzAuMSwwLjEsMC4zLDAuMSwwLjQsMC4xYzAuMiwwLDAuMywwLDAuNC0wLjFsNi4zLTMuNmMwLjMtMC4yLDAuNC0wLjQsMC40LTAuOGMwLTAuMy0wLjItMC42LTAuNC0wLjhMMTIsMTAuM2wyLjItMy44XG5cdFx0YzAuNC0wLjcsMS0xLjMsMS43LTEuN2MyLTEuMSw0LjUtMC4zLDUu''@;'; put 'put ''NiwxLjdjMC4zLDAuNSwwLjksMC42LDEuNCwwLjRjMC41LTAuMywwLjYtMC45LDAuNC0xLjRDMjIuNiw0LjUsMjEuOCwzLjYsMjAuOCwzLjF6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMi4yLDIxLjFsLTMtNS4zbDIuMy0xLjNjMC4zLTAu''@;'; put 'put ''MiwwLjQtMC40LDAuNC0wLjhjMC0wLjMtMC4yLTAuNi0wLjQtMC44bC02LjItMy42Yy0wLjEtMC4xLTAuMy0wLjEtMC40LTAuMVxuXHRcdGMtMC41LDAtMC45LDAuNC0wLjksMC45djcuMmMwLDAuMywwLjIsMC42LDAuNCwwLjhjMC4xLDAuMSwwLjMsMC4xLDAuNCwwLjFjMC4yLDAsMC4zLTAu''@;'; put 'put ''MSwwLjQtMC4xbDIuMi0xLjNsMyw1LjNcblx0XHRjMC43LDEuMiwwLjcsMi44LDAsNGMtMC43LDEuMi0xLjksMS45LTMuMiwxLjloLTAuOWMtMC42LDAtMSwwLjQtMSwxYzAsMC42LDAuNCwxLDEsMWgwLjljMi4xLDAsNC0xLjEsNS0zXG5cdFx0QzMzLjIsMjUuMywzMy4yLDIzLDMyLjIsMjEu''@;'; put 'put ''MXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTIxLjcsMjguNGwtNi4yLTMuNmMtMC4xLTAuMS0wLjMtMC4xLTAuNC0wLjFjLTAuNSwwLTAuOSwwLjQtMC45LDAuOXYyLjZIOS4zYy0xLjUsMC0yLjktMC44LTMuNi0yLjFcblx0XHRjLTAuOC0x''@;'; put 'put ''LjQtMC44LTMuMSwwLTQuNWMwLjMtMC41LDAuMS0xLjEtMC40LTEuNGMtMC41LTAuMy0xLjEtMC4xLTEuNCwwLjRjLTEuMiwyLTEuMiw0LjUsMCw2LjVjMS4xLDEuOSwzLjEsMy4xLDUuNCwzLjFoNC44djIuNlxuXHRcdGMwLDAuMywwLjIsMC42LDAuNCwwLjhjMC4xLDAuMSwwLjMsMC4xLDAu''@;'; put 'put ''NCwwLjFjMC4xLDAsMC4zLDAsMC40LTAuMWw2LjMtMy42YzAuMy0wLjIsMC40LTAuNCwwLjQtMC44XG5cdFx0QzIyLjEsMjguOCwyMS45LDI4LjUsMjEuNywyOC40eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxiLkNsclNoYXBlVHJlZT0oMCxwLmNscklj''@;'; put 'put ''b25TVkcpKCc8cGF0aCBkPSJNMzAuNiwxMS43QzI5LjIsNS44LDI0LDEuNywxOCwxLjdjLTcuMiwwLTEzLDUuOC0xMywxM2MwLDYuOCw1LjMsMTIuNCwxMiwxMi45djVjMCwwLjYsMC40LDEsMSwxczEtMC40LDEtMXYtNXYtMlYyMlxuXHRjMCwwLDAsMCwwLTAuMXYtMy42bDQuNy00LjdjMC40''@;'; put 'put ''LTAuNCwwLjQtMSwwLTEuNGMtMC40LTAuNC0xLTAuNC0xLjQsMEwxOSwxNS42di0zbC0zLjMtMy4zYy0wLjQtMC40LTEtMC40LTEuNCwwXG5cdGMtMC40LDAuNC0wLjQsMSwwLDEuNGwyLjcsMi43djYuMmwtMy44LTMuOGMtMC40LTAuNC0xLTAuNC0xLjQsMGMtMC40LDAuNC0wLjQsMSwwLDEu''@;'; put 'put ''NGw1LjIsNS4ydjMuMmMtNS42LTAuNS0xMC01LjItMTAtMTAuOVxuXHRjMC02LjEsNC45LTExLDExLTExczExLDQuOSwxMSwxMWMwLDQuOS0zLjMsOS4yLTgsMTAuNnYyLjFDMjgsMjUuNywzMi4zLDE4LjcsMzAuNiwxMS43eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEiIC8+PHBhdGggZD0iTTE4LDJDMTAuOCwxLjcsNC44LDcuMyw0LjUsMTQuNUM0LjIsMjEuNyw5LjgsMjcuNywxNywyOHYtNS4ybC01LjItNS4yYy0wLjQtMC40LTAuNC0xLDAtMS40YzAuNC0wLjQsMS0wLjQsMS40LDBcblx0YzAsMCwwLDAsMCwwbDMuOCwzLjh2LTYuMmwtMi43LTIu''@;'; put 'put ''N2MtMC40LTAuNC0wLjQtMSwwLTEuNGMwLjQtMC40LDEtMC40LDEuNCwwYzAsMCwwLDAsMCwwbDMuMywzLjN2M2wzLjMtMy4zYzAuNC0wLjQsMS0wLjQsMS40LDBcblx0YzAsMCwwLDAsMCwwYzAuNCwwLjQsMC40LDEsMCwxLjRMMTksMTguOFYyOGM3LjItMC4zLDEyLjgtNi4zLDEyLjUtMTMu''@;'; put 'put ''NVMyNS4yLDEuNywxOCwyeiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMjhjLTAuMywwLTAuNiwwLTEsMHY1YzAsMC42LDAuNCwxLDEsMXMxLTAuNCwxLTF2LTVDMTguNywyOCwxOC4zLDI4LDE4LDI4eiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlRmlzaD0oMCxwLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIxMS40OSIgY3k9IjE3LjUiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLjQ4LDkuMjlhMSwx''@;'; put 'put ''LDAsMCwwLTEsMGMtMy4zNywyLTUuOTEsNS44MS02LjksNy40NUwyNC44NSwxOHMtMSwxLjYyLTEsMS42MmMtMS43NiwyLjQ5LTUuMSw2LjM2LTguNzksNi4zNi00LjY1LDAtOC43NS02LjE1LTkuODQtNy45NCwxLjA5LTEuNzksNS4xOC03Ljk0LDkuODQtNy45NCwzLjU0LDAsNi43NywzLjU4''@;'; put 'put ''LDguNTgsNi4wN2wuMjgtLjQ4cy4zNi0uNTEuOTMtMS4yNUMyMi43MiwxMS42NCwxOS4xOCw4LjA2LDE1LDguMDZjLTYuNTksMC0xMS42Nyw5LjA3LTExLjg4LDkuNDZMMi44OSwxOGwuMjcuNDhjLjIxLjM5LDUuMjksOS40NiwxMS44OCw5LjQ2LDUuMDYsMCw5LjIyLTUuMzQsMTEtOEMyNiwy''@;'; put 'put ''MCwyNy4xOCwxOCwyNy4xOCwxOGgwbC4wNy0uMTFhMTguMDYsMTguMDYsMCwwLDEsMS44OC0yLjc1czAsMCwwLDBhMjAuMzEsMjAuMzEsMCwwLDEsMi44Ni0zVjIzLjg4YTIwLjkzLDIwLjkzLDAsMCwxLTMuNjEtNGwtLjE2LjI2aDBsLTEsMS41OWExOC43NCwxOC43NCwwLDAsMCw1LjIxLDQu''@;'; put 'put ''OTUsMSwxLDAsMCwwLC41LjE0LDEuMTMsMS4xMywwLDAsMCwuNS0uMTMsMSwxLDAsMCwwLC41LS44N1YxMC4xNkExLDEsMCwwLDAsMzMuNDgsOS4yOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLGIuQ2xyU2hhcGVGb3JtPSgwLHAuY2xySWNvblNW''@;'; put 'put ''RykoJzxwYXRoIGQ9Ik0yMSwxMkg3YTEsMSwwLDAsMS0xLTFWN0ExLDEsMCwwLDEsNyw2SDIxYTEsMSwwLDAsMSwxLDF2NEExLDEsMCwwLDEsMjEsMTJaTTgsMTBIMjBWNy45NEg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIxLDE0''@;'; put 'put ''LjA4SDdhMSwxLDAsMCwwLTEsMVYxOWExLDEsMCwwLDAsMSwxSDE4LjM2TDIyLDE2LjNWMTUuMDhBMSwxLDAsMCwwLDIxLDE0LjA4Wk0yMCwxOEg4VjE2SDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTExLjA2LDMxLjUxdi0uMDZs''@;'; put 'put ''LjMyLTEuMzlINFY0aDIwVjE0LjI1TDI2LDEyLjM2VjNhMSwxLDAsMCwwLTEtMUgzQTEsMSwwLDAsMCwyLDNWMzFhMSwxLDAsMCwwLDEsMWg4QTMuNDQsMy40NCwwLDAsMSwxMS4wNiwzMS41MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9''@;'; put 'put ''Ik0yMiwxOS4xN2wtLjc4Ljc5QTEsMSwwLDAsMCwyMiwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LDI2Ljk0YTEsMSwwLDAsMCwxLDFoNC44NGwuMy0xLjMuMTMtLjU1LDAtLjA1SDhWMjRoNi4zNGwyLTJIN2ExLDEsMCww''@;'; put 'put ''LDAtMSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLjQ5LDE2LjY3LDMwLjEyLDEzLjNhMS42MSwxLjYxLDAsMCwwLTIuMjgsMGgwTDE0LjEzLDI3LjA5LDEzLDMxLjlhMS42MSwxLjYxLDAsMCwwLDEuMjYsMS45LDEuNTUsMS41''@;'; put 'put ''NSwwLDAsMCwuMzEsMCwxLjE1LDEuMTUsMCwwLDAsLjM3LDBsNC44NS0xLjA3TDMzLjQ5LDE5YTEuNiwxLjYsMCwwLDAsMC0yLjI3Wk0xOC43NywzMC45MWwtMy42Ni44MUwxNiwyOC4wOSwyNi4yOCwxNy43bDIuODIsMi44MlpNMzAuMjMsMTkuMzlsLTIuODItMi44MkwyOSwxNWwyLjg0LDIu''@;'; put 'put ''ODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxiLkNsclNoYXBlRnVlbD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuMTIsMzRINS45QTIuODEsMi44MSwwLDAsMSwzLDMxLjE5VjQuODZBMi45LDIuOSwwLDAsMSw2LDIuMDdIMjAuMjJB''@;'; put 'put ''Mi43MiwyLjcyLDAsMCwxLDIzLDQuODZWMzEuMTlBMi44MiwyLjgyLDAsMCwxLDIwLjEyLDM0Wk01LjksNEEuODcuODcsMCwwLDAsNSw0Ljg2VjMxLjE5YS44Ny44NywwLDAsMCwuODcuODdIMjAuMTJhLjk0Ljk0LDAsMCwwLC45NS0uODdWNC44NkEuOTQuOTQsMCwwLDAsMjAuMTIsNFoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOS41MywzNEEzLjUsMy41LDAsMCwxLDI2LDMwLjVWMjNhMiwyLDAsMCwwLTItMkgyMi41N2ExLDEsMCwwLDEsMC0ySDI0YTQsNCwwLDAsMSw0LDRWMzAuNWExLjUsMS41LDAsMCwwLDMsMFYxNy4z''@;'; put 'put ''bC0zLjEzLTdBMi4yOSwyLjI5LDAsMCwwLDI1LjgsOWgtLjczYTEsMSwwLDEsMSwwLTJoLjczYTQuMyw0LjMsMCwwLDEsMy45MywyLjU1bDMuMjEsNy4xNmExLDEsMCwwLDEsLjA5LjQxVjMwLjVBMy41LDMuNSwwLDAsMSwyOS41MywzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOCw5SDhBMSwxLDAsMSwxLDgsN0gxOGExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE4LDEzSDhBMSwxLDAsMSwxLDgsMTFIMThBMSwxLDAsMSwxLDE4LDEzWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTI1LDEyLjA4YTEsMSwwLDAsMS0xLTF2LTZhMSwxLDAsMCwxLDIsMHY2QTEsMSwwLDAsMSwyNSwxMi4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPicp''@;'; put 'put ''LGIuQ2xyU2hhcGVTbm93Zmxha2U9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LjA1LDMzLjYxYTEsMSwwLDAsMS0xLTFWMy4zN2ExLDEsMCwxLDEsMS45NSwwVjMyLjYzQTEsMSwwLDAsMSwxOC4wNSwzMy42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIiAvPjxwYXRoIGQ9Ik0xOC4wNiwxMC4wNywxNC41Miw2LjU0YTEsMSwwLDAsMSwwLTEuNDEsMSwxLDAsMCwxLDEuNDEsMGwyLjEzLDIuMTIsMi4xMi0yLjEyYTEsMSwwLDAsMSwxLjQxLDAsMSwxLDAsMCwxLDAsMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMC44NSwzMS4xN2ExLDEsMCwwLDEtLjctLjI5TDE4LDI4Ljc2LDE1LjksMzAuODhhMSwxLDAsMCwxLTEuNDEsMCwxLDEsMCwwLDEsMC0xLjQyTDE4LDI1LjkzbDMuNTQsMy41M2ExLDEsMCwwLDEsMCwxLjQyQTEsMSwwLDAsMSwyMC44NSwzMS4xN1oiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC45MiwyNi41YTEsMSwwLDAsMS0uNS0uMTNsLTI2LTE1QTEsMSwwLDAsMSw0LjA3LDEwYTEsMSwwLDAsMSwxLjM3LS4zNmwyNiwxNWExLDEsMCwwLDEtLjUsMS44N1oiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LDE1LjM3YTEsMSwwLDAsMS0uMjYtMmwyLjktLjc4TDcuODQsOS43M2ExLDEsMCwxLDEsMS45My0uNTJMMTEuMDcsMTQsNi4yNCwxNS4zM0EuODIuODIsMCwwLDEsNiwxNS4zN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0yNy4wNSwyNy41NGExLDEsMCwwLDEtMS0uNzVMMjQuOCwyMmw0LjgyLTEuM2ExLDEsMCwxLDEsLjUyLDEuOTNsLTIuOS43OC43OCwyLjlhMSwxLDAsMCwxLS43MSwxLjIyQS43NS43NSwwLDAsMSwyNy4wNSwyNy41NFoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik00Ljk0LDI2LjVhMSwxLDAsMCwxLS41LTEuODdsMjYtMTVhMSwxLDAsMCwxLDEuMzYuMzYsMSwxLDAsMCwxLS4zNiwxLjM3bC0yNiwxNUExLDEsMCwwLDEsNC45NCwyNi41WiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+PHBhdGggZD0iTTguODEsMjcuNTRhLjc1Ljc1LDAsMCwxLS4yNiwwLDEsMSwwLDAsMS0uNzEtMS4yMmwuNzgtMi45LTIuOS0uNzhBMSwxLDAsMCwxLDUsMjEuMzhhMSwxLDAsMCwxLDEuMjMtLjcxTDExLjA3LDIybC0xLjMsNC44MkExLDEs''@;'; put 'put ''MCwwLDEsOC44MSwyNy41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPjxwYXRoIGQ9Ik0yOS44OCwxNS4zN2EuODIuODIsMCwwLDEtLjI2LDBMMjQuOCwxNGwxLjI5LTQuODNBMSwxLDAsMSwxLDI4LDkuNzNsLS43OCwyLjg5LDIuOS43OGExLDEsMCww''@;'; put 'put ''LDEtLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgLz4nKSxiLkNsclNoYXBlVGFibGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTgsMzRhMSwxLDAsMCwxLTEtMVYyLjkyYTEsMSwwLDAsMSwyLDBWMzNBMSwxLDAsMCwxLDgsMzRaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTcsMzMuOTJhMSwxLDAsMCwxLTEtMVY5LjFhMSwxLDAsMSwxLDIsMFYzMi45MkExLDEsMCwwLDEsMTcsMzMuOTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48''@;'; put 'put ''cGF0aCBkPSJNMjYsMzRhMSwxLDAsMCwxLTEtMVY5YTEsMSwwLDAsMSwyLDBWMzNBMSwxLDAsMCwxLDI2LDM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLjExLDE4aC0yNWExLDEsMCwxLDEsMC0yaDI1YTEsMSwwLDEsMSwwLDJa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMuMSwyNi45NEg4LjFBMSwxLDAsMSwxLDguMSwyNWgyNWExLDEsMCwxLDEsMCwxLjkyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0i''@;'; put 'put ''TTMzLDguOTJIM0ExLDEsMCwxLDEsMyw3SDMzYTEsMSwwLDEsMSwwLDEuOTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxiLkNsclNoYXBlVm9sdW1lPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNS44OCwzMkgxMmE0LDQsMCwwLDEtNC00''@;'; put 'put ''VjExLjQ2TDIuMzEsNS43N2ExLDEsMCwwLDEtLjIyLTEuMDlBMSwxLDAsMCwxLDMsNC4wNkgyOC44NmExLDEsMCwwLDEsMSwxVjI4QTQsNCwwLDAsMSwyNS44OCwzMlpNNS40Myw2bDQuMjgsNC4zNGEuNzUuNzUsMCwwLDEsLjIxLjYzdjE3QTIuMTMsMi4xMywwLDAsMCwxMiwzMEgyNS44OEEy''@;'; put 'put ''LjEsMi4xLDAsMCwwLDI4LDI4VjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsMTZhMSwxLDAsMCwxLTEtMVY2SDI4Ljg2YS45Mi45MiwwLDAsMS0xLS45LDEsMSwwLDAsMSwxLTFIMzNhMSwxLDAsMCwxLDEsMVYxNUExLDEsMCww''@;'; put 'put ''LDEsMzMsMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjQsMTFIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0''@;'; put 'put ''LDE1SDIxYTEsMSwwLDEsMSwwLTJIMjRhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0yNCwxOUgxOGExLDEsMCwxLDEsMC0ySDI0YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMjQsMjdIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI0LDIzSDIxQTEsMSwwLDEsMSwyMSwyMUgyNEExLDEsMCwxLDEsMjQs''@;'; put 'put ''MjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz4nKSxiLkNsclNoYXBlQ3Jvc3NoYWlycz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMjlBMTEsMTEsMCwxLDEsMjksMTgsMTEsMTEsMCwwLDEsMTgsMjlaTTE4LDlhOSw5LDAsMSwwLDksOUE5''@;'; put 'put ''LDksMCwwLDAsMTgsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyM2E1LDUsMCwxLDEsNS01QTUsNSwwLDAsMSwxOCwyM1ptMC04YTMsMywwLDEsMCwzLDNBMywzLDAsMCwwLDE4LDE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTE4LDlhMSwxLDAsMCwxLTEtMVYyLjhhMSwxLDAsMCwxLDIsMFY4QTEsMSwwLDAsMSwxOCw5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE4LDM0YTEsMSwwLDAsMS0xLTFW''@;'; put 'put ''MjhhMSwxLDAsMCwxLDIsMHY1QTEsMSwwLDAsMSwxOCwzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik04LDE5SDMuMTdhMSwxLDAsMCwxLDAtMkg4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzMuMSwxOUgyOGExLDEsMCwwLDEsMC0yaDUuMWExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JyksYi5DbHJTaGFwZUNpcmNsZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgs''@;'; put 'put ''MzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwx''@;'; put 'put ''NiwwLDAsMSwxOCwzNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZURvdENpcmNsZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTFhNyw3LDAsMSwxLTcsNyw3LDcsMCwwLDEsNy03IiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicp''@;'; put 'put ''LGIuQ2xyU2hhcGVCZXRhPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik03LjIxLDE0LjA3aDNhMS42MSwxLjYxLDAsMCwxLDEuODEsMS41LDEuNDQsMS40NCwwLDAsMS0uODQsMS4zNCwxLjY3LDEuNjcsMCwwLDEsMS4xLDEuNTMsMS43NSwxLjc1LDAsMCwxLTIsMS42M0g3LjIxWm0yLjcx''@;'; put 'put ''LDIuNDJjLjQ4LDAsLjgyLS4yOC44Mi0uNjdzLS4zNC0uNjUtLjgyLS42NUg4LjQ5djEuMzJabS4yLDIuNDhhLjc1Ljc1LDAsMSwwLDAtMS40N0g4LjQ5VjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE0LjU1LDE1LjIzdjEu''@;'; put 'put ''MmgzdjEuMTZoLTN2MS4zMmgzLjMzdjEuMTZIMTMuMjZ2LTZoNC42MnYxLjE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTIwLjQxLDE1LjIzSDE4LjU0VjE0LjA3aDV2MS4xNkgyMS43djQuODRIMjAuNDFaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMjgsMTkuMTJIMjUuMzJsLS4zOC45NUgyMy41bDIuNDQtNmgxLjQ0bDIuNDUsNkgyOC4zOFpNMjcuNTUsMThsLS44OS0yLjE5TDI1Ljc3LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTguMDYsMzBhLjg0Ljg0LDAsMCwxLS4zOC0uMDhBMSwxLDAsMCwxLDcuMDYsMjlWMjVoLTRhMSwxLDAsMCwxLTEtMVYxMGExLDEsMCwwLDEsMS0xaDMwYTEsMSwwLDAsMSwxLDFWMjRhMSwxLDAsMCwxLTEsMUgxMy40OEw4Ljc3LDI5LjcxQTEsMSww''@;'; put 'put ''LDAsMSw4LjA2LDMwWm0tNC03aDRhMSwxLDAsMCwxLDEsMXYyLjU5bDMuMy0zLjNhMSwxLDAsMCwxLC43LS4yOWgxOVYxMWgtMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuXG4gIDxwb2x5Z29uIHBvaW50cz0iMjUuOCwxOCAyNy41LDE4IDI2Ljcs''@;'; put 'put ''MTUuOCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuXHQ8cGF0aCBkPSJNMTAuNCwxNy41Yy0wLjEsMC0wLjIsMC0wLjMsMEg4LjVWMTlsMS42LDBjMC40LDAuMSwwLjgtMC4yLDAuOS0wLjZDMTEuMSwxOCwxMC44LDE3LjYsMTAuNCwxNy41eiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuXHQ8cGF0aCBkPSJNMTAuNywxNS44YzAtMC40LTAuMy0wLjctMC44LTAuN0g4LjV2MS4zaDEuNEMxMC40LDE2LjUsMTAuNywxNi4yLDEwLjcsMTUuOHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cblx0''@;'; put 'put ''PHBhdGggZD0iTTMzLjEsOWgtMzBjLTAuNiwwLTEsMC40LTEsMXYxNGMwLDAuNiwwLjQsMSwxLDFoNHY0YzAsMC40LDAuMiwwLjgsMC42LDAuOUM3LjgsMzAsNy45LDMwLDguMSwzMGMwLjMsMCwwLjUtMC4xLDAuNy0wLjNcblx0XHRsNC43LTQuN2gxOS42YzAuNiwwLDEtMC40LDEtMVYxMEMz''@;'; put 'put ''NC4xLDkuNCwzMy42LDksMzMuMSw5eiBNMTAuNCwyMC4xYy0wLjEsMC0wLjEsMC0wLjIsMEg3LjJ2LTZoM2MwLjktMC4xLDEuNywwLjUsMS44LDEuNFxuXHRcdGMwLDAsMCwwLjEsMCwwLjFjMCwwLjYtMC4zLDEuMS0wLjgsMS4zYzAuNiwwLjIsMS4xLDAuOCwxLjEsMS41QzEyLjIsMTkuNCwx''@;'; put 'put ''MS40LDIwLjEsMTAuNCwyMC4xeiBNMTcuOSwxNS4yaC0zLjN2MS4yaDN2MS4yaC0zdjEuM1xuXHRcdGgzLjN2MS4yaC00LjZ2LTZoNC42VjE1LjJ6IE0yMS43LDIwLjFoLTEuM3YtNC44aC0xLjl2LTEuMmg1djEuMmgtMS44VjIwLjF6IE0yOC40LDIwLjFsLTAuNC0xaC0yLjdsLTAuNCwxaC0x''@;'; put 'put ''LjRsMi40LTZoMS40bDIuNSw2XG5cdFx0SDI4LjR6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00Ii8+XG4nKSxiLkNsclNoYXBlRmlyc3RBaWQ9KDAscC5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMiw2SDIzLjkxVjQuNUEyLjUsMi41LDAsMCwwLDIxLjQxLDJo''@;'; put 'put ''LTdhMi41LDIuNSwwLDAsMC0yLjUsMi41VjZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0xMy45MSw0LjVhLjUuNSwwLDAsMSwuNS0uNWg3YS41LjUsMCwwLDEsLjUuNVY2aC04Wk00LDI4VjhIMzJWMjhaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjAuMTUsMjUuMkgxNi43NGExLjMsMS4zLDAsMCwxLTEuMy0xLjNWMjEuMmgtMi43YTEuMywxLjMsMCwwLDEtMS4zLTEuM1YxNi41YTEuMywxLjMsMCwwLDEsMS4zLTEuM2gyLjdWMTIuNWExLjMs''@;'; put 'put ''MS4zLDAsMCwxLDEuMy0xLjNoMy40MWExLjMsMS4zLDAsMCwxLDEuMjksMS4zdjIuN2gyLjcxYTEuMywxLjMsMCwwLDEsMS4yOSwxLjN2My40YTEuMywxLjMsMCwwLDEtMS4yOSwxLjNIMjEuNDR2Mi43QTEuMywxLjMsMCwwLDEsMjAuMTUsMjUuMlpNMTcsMjMuNmgyLjgxdi00aDRWMTYuOGgt''@;'; put 'put ''NHYtNEgxN3Y0SDEzdjIuOGg0Wm03LjExLTYuOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG5cbiAgPHBhdGggZD0iTTMyLDZIMjMuOTFWNC41QTIuNSwyLjUsMCwwLDAsMjEuNDEsMmgtN2EyLjUsMi41LDAsMCwwLTIuNSwyLjVWNkg0QTIsMiwwLDAs''@;'; put 'put ''MCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTEzLjkxLDQuNWEuNS41LDAsMCwxLC41LS41aDdhLjUuNSwwLDAsMSwuNS41VjZoLThaTTI0LjY0LDE5LjlhLjUuNSwwLDAsMS0uNS41aC0zLjV2My41YS41LjUsMCwwLDEtLjUuNWgtMy40''@;'; put 'put ''YS41LjUsMCwwLDEtLjUtLjVWMjAuNGgtMy41YS41LjUsMCwwLDEtLjUtLjVWMTYuNWEuNS41LDAsMCwxLC41LS41aDMuNVYxMi41YS41LjUsMCwwLDEsLjUtLjVoMy40YS41LjUsMCwwLDEsLjUuNVYxNmgzLjVhLjUuNSwwLDAsMSwuNS41WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMSIvPlxuICAnKSxiLkNsclNoYXBlQ29sb3JQYWxldHRlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMS41NCwyMy4wNWEzLjIyLDMuMjIsMCwwLDEtMy0xLjc3QTMuMDUsMy4wNSwwLDAsMSwxOC41LDE5YTMuNzQsMy43NCwwLDAsMSwxLjk1LTIuMDZBMy40LDMuNCww''@;'; put 'put ''LDAsMSwyNSwxOC4zYTMsMywwLDAsMSwuMDgsMi4zMiwzLjY5LDMuNjksMCwwLDEtMiwyLjA3QTMuODUsMy44NSwwLDAsMSwyMS41NCwyMy4wNVptLjU0LTQuOTFhMi40MSwyLjQxLDAsMCwwLTEsLjIxaDBBMi4xMywyLjEzLDAsMCwwLDIwLDE5LjUxYTEuMzcsMS4zNywwLDAsMCwwLDEuMDks''@;'; put 'put ''MS44MSwxLjgxLDAsMCwwLDIuNDUuNjMsMi4xLDIuMSwwLDAsMCwxLjEyLTEuMTUsMS40LDEuNCwwLDAsMCwwLTEuMUExLjU5LDEuNTksMCwwLDAsMjIuMDgsMTguMTRabS0xLjI5LS41MmgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGgg''@;'; put 'put ''ZD0iTTE2LjE5LDMzLjg3QTEzLjcyLDEzLjcyLDAsMCwxLDYuNCwzMCwxMy44NiwxMy44NiwwLDAsMSwyLDIwYzAtNC40LDItOC44NCw1LjY4LTEyLjVhMTguMiwxOC4yLDAsMCwxLDEzLjEtNS4zN2guMTJjMy4zMywwLDYuODUsMS40OSw3LjI0LDQuNzMuMjEsMS43Ny0uNTksMy40Ny0xLjI5''@;'; put 'put ''LDUtLjU1LDEuMTctMS4xMSwyLjM5LS43MiwyLjgxczEsLjEyLDIuMDktLjJhNi4yNyw2LjI3LDAsMCwxLDMuMzgtLjM2LDMsMywwLDAsMSwxLjg3LDEuNTZjLjk0LDEuODMuNDcsNC42Ny0uMjMsNi41NGgwQTE3LjM4LDE3LjM4LDAsMCwxLDI5LDI4Ljc0LDE5LjQzLDE5LjQzLDAsMCwxLDE2''@;'; put 'put ''LjE5LDMzLjg3Wk0yMC43OCw0LjE2QTE2LjIyLDE2LjIyLDAsMCwwLDkuMDksOUM1Ljc5LDEyLjIzLDQsMTYuMTYsNCwyMEExMS45MiwxMS45MiwwLDAsMCw3LjgsMjguNmM1LjM4LDUuMjUsMTQuNjIsMy41NSwxOS44Ny0xLjMzYTE1LjUyLDE1LjUyLDAsMCwwLDMuNy01Ljc1aDBjLjctMS45''@;'; put 'put ''Ljg0LTMuOTIuMzItNC45MmExLDEsMCwwLDAtLjYxLS41NSw0Ljg2LDQuODYsMCwwLDAtMi4yOS4zNWMtMS4zMS4zOS0zLC44OS00LjEyLS4zNS0xLjMyLTEuNC0uNDYtMy4yNS4zNy01YTcuOTMsNy45MywwLDAsMCwxLjExLTMuOWMtLjI0LTItMi44MS0yLjk1LTUuMjYtM1oiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMy44NywyNi42NUEyLjU5LDIuNTksMCwwLDAsMjIuMzUsMjVMMjIsMjQuOWwtLjQ2LDEuNTMuMTYsMGExLDEsMCwwLDEsLjYuNjFjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1cy0xLjcxLS4wNy0xLjg4''@;'; put 'put ''LS42NmwtMS41NC40M2gwYTIuODMsMi44MywwLDAsMCwyLjg0LDEuOTEsNCw0LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwyMy44NywyNi42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0xNS4wNywyNS41OWgwYTIuNzMsMi43Myww''@;'; put 'put ''LDAsMC0yLjI0LTEuODRsLS4yNywxLjU4YTEuMTIsMS4xMiwwLDAsMSwxLC43Yy4xNy41OS0uNDEsMS4zLTEuMjYsMS41NEExLjkyLDEuOTIsMCwwLDEsMTEsMjcuNTJhMSwxLDAsMCwxLS42LS42MXMwLS4wOSwwLS4xM2wtMS41OC4xNmEyLDIsMCwwLDAsLjA2LjQxQTIuNTksMi41OSwwLDAs''@;'; put 'put ''MCwxMC4zNywyOWEzLjM2LDMuMzYsMCwwLDAsMS4zMS4yNSwzLjcsMy43LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwxNS4wNywyNS41OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xMC43OCwxOS4xN2EyLjU5LDIuNTksMCwwLDAt''@;'; put 'put ''MS41Mi0xLjY1LDIuOTEsMi45MSwwLDAsMC0uNS0uMTZsLS4zNywxLjU2YTEuMjEsMS4yMSwwLDAsMSwuMjUuMDgsMSwxLDAsMCwxLC42LjZjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1cy0xLjcxLS4wNi0xLjg4LS42NmEuODYuODYsMCwwLDEsMC0uMzlsLTEuNTYtLjM0YTIuNCwyLjQsMCww''@;'; put 'put ''LDAsMCwxLjE2QTIuODMsMi44MywwLDAsMCw3LjQsMjIuODNhNCw0LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwxMC43OCwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik0xMy40NSwxMS40YTIuNTksMi41OSwwLDAsMC0xLjUy''@;'; put 'put ''LTEuNjUsMS4xNywxLjE3LDAsMCwwLS4yLS4wNmwtLjUyLDEuNTFhLjM4LjM4LDAsMCwxLC4xLDAsMSwxLDAsMCwxLC42LjZjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1YTIuMDYsMi4wNiwwLDAsMS0xLjI4LS4wNSwxLDEsMCwwLDEtLjYtLjYxLjg1Ljg1LDAsMCwxLDAtLjMybC0xLjU4LS4x''@;'; put 'put ''OWEyLjMsMi4zLDAsMCwwLC4wNi45NEEyLjU2LDIuNTYsMCwwLDAsOC43NSwxNC44YTMuMzcsMy4zNywwLDAsMCwxLjMxLjI2LDQsNCwwLDAsMCwxLS4xNEEzLDMsMCwwLDAsMTMuNDUsMTEuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gIDxwYXRo''@;'; put 'put ''IGQ9Ik0yMSw2Ljc4YTIuNTYsMi41NiwwLDAsMC0xLjUyLTEuNjVsLS4zLS4xTDE4LjcsNi41NmwuMTUsMGExLDEsMCwwLDEsLjYuNjFjLjE3LjYtLjQxLDEuMy0xLjI2LDEuNTRzLTEuNzEtLjA2LTEuODgtLjY1YS45LjksMCwwLDEsLjA2LS41OEwxNC44OSw2LjlhMi40NywyLjQ3LDAsMCww''@;'; put 'put ''LS4xMiwxLjYzLDIuODQsMi44NCwwLDAsMCwyLjg0LDEuOTEsMy41OCwzLjU4LDAsMCwwLDEtLjE1QTMsMywwLDAsMCwyMSw2Ljc4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cblxuICA8cGF0aCBkPSJNMzIuMjMsMTQuODljLTIuMS0uNTYtNC45Mywx''@;'; put 'put ''LjgtNi4zNC4zLTEuNzEtMS44MiwyLjI3LTUuNTMsMS44Ni04LjkyLS4zMy0yLjc4LTMuNTEtNC4wOC02LjY2LTQuMUExOC41LDE4LjUsMCwwLDAsNy43NCw3LjU5Yy02LjY0LDYuNTktOC4wNywxNi0xLjM3LDIyLjQ4LDYuMjEsNiwxNi42MSw0LjIzLDIyLjY3LTEuNGExNy43MywxNy43Myww''@;'; put 'put ''LDAsMCw0LjIyLTYuNTRDMzQuMzQsMTkuMjMsMzQuNDQsMTUuNDksMzIuMjMsMTQuODlaTTkuNCwxMC41N2EyLjIzLDIuMjMsMCwwLDEsMi44NywxLjIxLDIuMjIsMi4yMiwwLDAsMS0xLjgxLDIuNTNBMi4yMiwyLjIyLDAsMCwxLDcuNTksMTMuMSwyLjIzLDIuMjMsMCwwLDEsOS40LDEwLjU3''@;'; put 'put ''Wk01LjA3LDIwLjgyYTIuMjIsMi4yMiwwLDAsMSwxLjgyLTIuNTNBMi4yMiwyLjIyLDAsMCwxLDkuNzUsMTkuNSwyLjIzLDIuMjMsMCwwLDEsNy45NCwyMiwyLjI0LDIuMjQsMCwwLDEsNS4wNywyMC44MlptNyw4LjMzYTIuMjIsMi4yMiwwLDAsMS0yLjg3LTEuMjFBMi4yMywyLjIzLDAsMCwx''@;'; put 'put ''LDExLDI1LjQxYTIuMjMsMi4yMywwLDAsMSwyLjg3LDEuMjFBMi4yMiwyLjIyLDAsMCwxLDEyLDI5LjE1Wk0xNSw4LjI2YTIuMjMsMi4yMywwLDAsMSwxLjgxLTIuNTMsMi4yNCwyLjI0LDAsMCwxLDIuODcsMS4yMSwyLjIyLDIuMjIsMCwwLDEtMS44MiwyLjUzQTIuMjEsMi4yMSwwLDAsMSwx''@;'; put 'put ''NSw4LjI2Wm01LjgyLDIyLjE5YTIuMjIsMi4yMiwwLDAsMS0yLjg3LTEuMjEsMi4yMywyLjIzLDAsMCwxLDEuODEtMi41MywyLjI0LDIuMjQsMCwwLDEsMi44NywxLjIxQTIuMjIsMi4yMiwwLDAsMSwyMC43OCwzMC40NVptNS0xMC40NmEzLjIsMy4yLDAsMCwxLTEuNjksMS43NiwzLjUzLDMu''@;'; put 'put ''NTMsMCwwLDEtMS40LjMsMi43OCwyLjc4LDAsMCwxLTIuNTYtMS41LDIuNDksMi40OSwwLDAsMS0uMDctMiwzLjIsMy4yLDAsMCwxLDEuNjktMS43NiwzLDMsMCwwLDEsNCwxLjJBMi41NCwyLjU0LDAsMCwxLDI1Ljc5LDIwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MSIvPicpLGIuRXNzZW50aWFsU2hhcGVzPXsiYWRkLXRleHQiOmIuQ2xyU2hhcGVBZGRUZXh0LCJhbGFybS1vZmYiOmIuQ2xyU2hhcGVBbGFybU9mZixwaW5ib2FyZDpiLkNsclNoYXBlUGluYm9hcmQsbmV3OmIuQ2xyU2hhcGVOZXcsImJ1YmJsZS1leGNsYW1hdGlvbiI6Yi5DbHJTaGFwZUJ1''@;'; put 'put ''YmJsZUV4Y2xhbWF0aW9uLCJncmlkLXZpZXciOmIuQ2xyU2hhcGVHcmlkVmlldywiY3Vyc29yLWFycm93IjpiLkNsclNoYXBlQ3Vyc29yQXJyb3csImN1cnNvci1oYW5kIjpiLkNsclNoYXBlQ3Vyc29ySGFuZCwiY3Vyc29yLWhhbmQtY2xpY2siOmIuQ2xyU2hhcGVDdXJzb3JIYW5kQ2xpY2ss''@;'; put 'put ''ImN1cnNvci1oYW5kLWdyYWIiOmIuQ2xyU2hhcGVDdXJzb3JIYW5kR3JhYiwiY3Vyc29yLWhhbmQtb3BlbiI6Yi5DbHJTaGFwZUN1cnNvckhhbmRPcGVuLCJjdXJzb3ItbW92ZSI6Yi5DbHJTaGFwZUN1cnNvck1vdmUsImZpcnN0LWFpZCI6Yi5DbHJTaGFwZUZpcnN0QWlkLHJlc2l6ZTpiLkNs''@;'; put 'put ''clNoYXBlUmVzaXplLG9iamVjdHM6Yi5DbHJTaGFwZU9iamVjdHMsYm9vazpiLkNsclNoYXBlQm9vayxhc3RlcmlzazpiLkNsclNoYXBlQXN0ZXJpc2ssYnVnOmIuQ2xyU2hhcGVCdWcsc2Npc3NvcnM6Yi5DbHJTaGFwZVNjaXNzb3JzLHRoZXJtb21ldGVyOmIuQ2xyU2hhcGVUaGVybW9tZXRl''@;'; put 'put ''cixwZW5jaWw6Yi5DbHJTaGFwZVBlbmNpbCxub3RlOmIuQ2xyU2hhcGVOb3RlLHJlZnJlc2g6Yi5DbHJTaGFwZVJlZnJlc2gsc3luYzpiLkNsclNoYXBlU3luYywidmlldy1saXN0IjpiLkNsclNoYXBlVmlld0xpc3QsInZpZXctY2FyZHMiOmIuQ2xyU2hhcGVWaWV3Q2FyZHMsInRyZWUtdmll''@;'; put 'put ''dyI6Yi5DbHJTaGFwZVRyZWVWaWV3LGxpZ2h0YnVsYjpiLkNsclNoYXBlTGlnaHRidWxiLGRvd25sb2FkOmIuQ2xyU2hhcGVEb3dubG9hZCx1cGxvYWQ6Yi5DbHJTaGFwZVVwbG9hZCxsb2NrOmIuQ2xyU2hhcGVMb2NrLHVubG9jazpiLkNsclNoYXBlVW5sb2NrLHVzZXJzOmIuQ2xyU2hhcGVV''@;'; put 'put ''c2VycywicG9wLW91dCI6Yi5DbHJTaGFwZVBvcE91dCxmaWx0ZXI6Yi5DbHJTaGFwZUZpbHRlcixwaW46Yi5DbHJTaGFwZVBpbixmaWxlOmIuQ2xyU2hhcGVGaWxlLHBsdXM6Yi5DbHJTaGFwZVBsdXMsbWludXM6Yi5DbHJTaGFwZU1pbnVzLCJtaW51cy1jaXJjbGUiOmIuQ2xyU2hhcGVNaW51''@;'; put 'put ''c0NpcmNsZSwicGx1cy1jaXJjbGUiOmIuQ2xyU2hhcGVQbHVzQ2lyY2xlLGJhbjpiLkNsclNoYXBlQmFuLCJ0aW1lcy1jaXJjbGUiOmIuQ2xyU2hhcGVUaW1lc0NpcmNsZSx0cmFzaDpiLkNsclNoYXBlVHJhc2gsY2lyY2xlOmIuQ2xyU2hhcGVDaXJjbGUsdGFnOmIuQ2xyU2hhcGVUYWcsdGFn''@;'; put 'put ''czpiLkNsclNoYXBlVGFncyxoaXN0b3J5OmIuQ2xyU2hhcGVIaXN0b3J5LGNsb2NrOmIuQ2xyU2hhcGVDbG9jaywiYWxhcm0tY2xvY2siOmIuQ2xyU2hhcGVBbGFybUNsb2NrLGFycm93OlYuQ2xyU2hhcGVBcnJvdywiY2lyY2xlLWFycm93IjpiLkNsclNoYXBlQ2lyY2xlQXJyb3csImNoaWxk''@;'; put 'put ''LWFycm93IjpiLkNsclNoYXBlQ2hpbGRBcnJvdyxjb3B5OmIuQ2xyU2hhcGVDb3B5LGhlbHA6Yi5DbHJTaGFwZUhlbHAsbG9naW46Yi5DbHJTaGFwZUxvZ2luLGxvZ291dDpiLkNsclNoYXBlTG9nb3V0LHByaW50ZXI6Yi5DbHJTaGFwZVByaW50ZXIsd29ybGQ6Yi5DbHJTaGFwZVdvcmxkLHNs''@;'; put 'put ''aWRlcjpiLkNsclNoYXBlU2xpZGVyLGNsaXBib2FyZDpiLkNsclNoYXBlQ2xpcGJvYXJkLGZpcmV3YWxsOmIuQ2xyU2hhcGVGaXJld2FsbCxsaXN0OmIuQ2xyU2hhcGVMaXN0LHJlZG86Yi5DbHJTaGFwZVJlZG8sdW5kbzpiLkNsclNoYXBlVW5kbyxzY3JvbGw6Yi5DbHJTaGFwZVNjcm9sbCwi''@;'; put 'put ''ZmlsZS1zZXR0aW5ncyI6Yi5DbHJTaGFwZUZpbGVTZXR0aW5ncywidHdvLXdheS1hcnJvd3MiOmIuQ2xyU2hhcGVUd29XYXlBcnJvd3Msc3dpdGNoOmIuQ2xyU2hhcGVTd2l0Y2gsdG9vbHM6Yi5DbHJTaGFwZVRvb2xzLCJ3aW5kb3ctY2xvc2UiOmIuQ2xyU2hhcGVXaW5kb3dDbG9zZSwid2lu''@;'; put 'put ''ZG93LW1heCI6Yi5DbHJTaGFwZVdpbmRvd01heCwid2luZG93LW1pbiI6Yi5DbHJTaGFwZVdpbmRvd01pbiwid2luZG93LXJlc3RvcmUiOmIuQ2xyU2hhcGVXaW5kb3dSZXN0b3JlLCJ6b29tLWluIjpiLkNsclNoYXBlWm9vbUluLCJ6b29tLW91dCI6Yi5DbHJTaGFwZVpvb21PdXQsa2V5OmIu''@;'; put 'put ''Q2xyU2hhcGVLZXksbGlicmFyeTpiLkNsclNoYXBlTGlicmFyeSxib2x0OmIuQ2xyU2hhcGVCb2x0LHdyZW5jaDpiLkNsclNoYXBlV3JlbmNoLGJ1bGxzZXllOmIuQ2xyU2hhcGVCdWxsc2V5ZSx0YXJnZXQ6Yi5DbHJTaGFwZVRhcmdldCxmbGFtZTpiLkNsclNoYXBlRmxhbWUsaG91cmdsYXNz''@;'; put 'put ''OmIuQ2xyU2hhcGVIb3VyZ2xhc3MsIm5vLWFjY2VzcyI6Yi5DbHJTaGFwZU5vQWNjZXNzLG9yZ2FuaXphdGlvbjpiLkNsclNoYXBlT3JnYW5pemF0aW9uLGJhbGFuY2U6Yi5DbHJTaGFwZUJhbGFuY2UsImlkLWJhZGdlIjpiLkNsclNoYXBlSWRCYWRnZSxyZXBlYXQ6Yi5DbHJTaGFwZVJlcGVh''@;'; put 'put ''dCwiZmlsZS1ncm91cCI6Yi5DbHJTaGFwZUZpbGVHcm91cCxwYXBlcmNsaXA6Yi5DbHJTaGFwZVBhcGVyY2xpcCxzaHJpbms6Yi5DbHJTaGFwZVNocmluaywiYWNjZXNzaWJpbGl0eS0xIjpiLkNsclNoYXBlQWNjZXNzaWJpbGl0eTEsImFjY2Vzc2liaWxpdHktMiI6Yi5DbHJTaGFwZUFjY2Vz''@;'; put 'put ''c2liaWxpdHkyLCJzb3J0LWJ5IjpiLkNsclNoYXBlU29ydEJ5LCJjb2xsYXBzZS1jYXJkIjpiLkNsclNoYXBlQ29sbGFwc2VDYXJkLCJleHBhbmQtY2FyZCI6Yi5DbHJTaGFwZUV4cGFuZENhcmQsYnJpZWZjYXNlOmIuQ2xyU2hhcGVCcmllZmNhc2UsImNvbG9yLXBpY2tlciI6Yi5DbHJTaGFw''@;'; put 'put ''ZUNvbG9yUGlja2VyLCJjb3B5LXRvLWNsaXBib2FyZCI6Yi5DbHJTaGFwZUNvcHlUb0NsaXBib2FyZCwiZmlsdGVyLTIiOmIuQ2xyU2hhcGVGaWx0ZXIyLCJkcmFnLWhhbmRsZSI6Yi5DbHJTaGFwZURyYWdIYW5kbGUsbW9vbjpiLkNsclNoYXBlTW9vbixzdW46Yi5DbHJTaGFwZVN1bix3YW5k''@;'; put 'put ''OmIuQ2xyU2hhcGVXYW5kLGNsb25lOmIuQ2xyU2hhcGVDbG9uZSxkZXRhaWxzOmIuQ2xyU2hhcGVEZXRhaWxzLCJkcmFnLWhhbmRsZS1jb3JuZXIiOmIuQ2xyU2hhcGVEcmFnSGFuZGxlQ29ybmVyLGVyYXNlcjpiLkNsclNoYXBlRXJhc2VyLGxhbmRzY2FwZTpiLkNsclNoYXBlTGFuZHNjYXBl''@;'; put 'put ''LHBhc3RlOmIuQ2xyU2hhcGVQYXN0ZSxwb3J0cmFpdDpiLkNsclNoYXBlUG9ydHJhaXQsImZpbGUtemlwIjpiLkNsclNoYXBlRmlsZVppcCwiZmlsdGVyLW9mZiI6Yi5DbHJTaGFwZUZpbHRlck9mZixyZWN5Y2xlOmIuQ2xyU2hhcGVSZWN5Y2xlLHRyZWU6Yi5DbHJTaGFwZVRyZWUsZmlzaDpi''@;'; put 'put ''LkNsclNoYXBlRmlzaCxmb3JtOmIuQ2xyU2hhcGVGb3JtLGZ1ZWw6Yi5DbHJTaGFwZUZ1ZWwsc25vd2ZsYWtlOmIuQ2xyU2hhcGVTbm93Zmxha2UsdGFibGU6Yi5DbHJTaGFwZVRhYmxlLCJkb3QtY2lyY2xlIjpiLkNsclNoYXBlRG90Q2lyY2xlLHZvbHVtZTpiLkNsclNoYXBlVm9sdW1lLGNy''@;'; put 'put ''b3NzaGFpcnM6Yi5DbHJTaGFwZUNyb3NzaGFpcnMsYmV0YTpiLkNsclNoYXBlQmV0YSwiY29sb3ItcGFsZXR0ZSI6Yi5DbHJTaGFwZUNvbG9yUGFsZXR0ZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuRXNzZW50aWFsU2hhcGVzLCJlZGl0IiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuRXNz''@;'; put 'put ''ZW50aWFsU2hhcGVzLnBlbmNpbCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkVzc2VudGlhbFNoYXBlcywibm90ZS1lZGl0IiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuRXNzZW50aWFsU2hhcGVzLm5vdGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Fc3NlbnRpYWxTaGFwZXMsImdy''@;'; put 'put ''b3VwIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuRXNzZW50aWFsU2hhcGVzLnVzZXJzKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuRXNzZW50aWFsU2hhcGVzLCJkb2N1bWVudCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkVzc2VudGlhbFNoYXBlcy5maWxlKSksT2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KGIuRXNzZW50aWFsU2hhcGVzLCJhZGQiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Fc3NlbnRpYWxTaGFwZXMucGx1cykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkVzc2VudGlhbFNoYXBlcywiY2FuY2VsIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuRXNzZW50aWFs''@;'; put 'put ''U2hhcGVzLmJhbikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkVzc2VudGlhbFNoYXBlcywicmVtb3ZlIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuRXNzZW50aWFsU2hhcGVzWyJ0aW1lcy1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkVzc2VudGlhbFNoYXBlcywic2ln''@;'; put 'put ''bi1pbiIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkVzc2VudGlhbFNoYXBlcy5sb2dpbikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkVzc2VudGlhbFNoYXBlcywic2lnbi1vdXQiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Fc3NlbnRpYWxTaGFwZXMubG9nb3V0KSksT2JqZWN0LmRl''@;'; put 'put ''ZmluZVByb3BlcnR5KGIuRXNzZW50aWFsU2hhcGVzLCJsaWdodG5pbmciLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Fc3NlbnRpYWxTaGFwZXMuYm9sdCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkVzc2VudGlhbFNoYXBlcywiZmxvdy1jaGFydCIsKDAsXy5kZXNjcmlwdG9yQ29uZmln''@;'; put 'put ''KShiLkVzc2VudGlhbFNoYXBlcy5vcmdhbml6YXRpb24pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Fc3NlbnRpYWxTaGFwZXMsImFsZXJ0IiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuRXNzZW50aWFsU2hhcGVzWyJidWJibGUtZXhjbGFtYXRpb24iXSkpLE9iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShiLkVzc2VudGlhbFNoYXBlcywicGlubmVkIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuRXNzZW50aWFsU2hhcGVzLnBpbmJvYXJkKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuRXNzZW50aWFsU2hhcGVzLCJhdHRhY2htZW50IiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuRXNz''@;'; put 'put ''ZW50aWFsU2hhcGVzLnBhcGVyY2xpcCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkVzc2VudGlhbFNoYXBlcywiYXR0YWNobWVudCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkVzc2VudGlhbFNoYXBlcy5wYXBlcmNsaXApKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Fc3NlbnRpYWxT''@;'; put 'put ''aGFwZXMsInJlc2l6ZS1kb3duIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuRXNzZW50aWFsU2hhcGVzLnNocmluaykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkVzc2VudGlhbFNoYXBlcywicmVzaXplLXVwIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuRXNzZW50aWFsU2hhcGVzLnJl''@;'; put 'put ''c2l6ZSkpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChiLkVzc2VudGlhbFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvbWVkaWEtc2hhcGVzLnRzIjoKLyohKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL21lZGlhLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgsYixJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGIuTWVkaWFTaGFwZXM9Yi5DbHJTaGFwZU1pY3Jv''@;'; put 'put ''cGhvbmVNdXRlPWIuQ2xyU2hhcGVNaWNyb3Bob25lPWIuQ2xyU2hhcGVWaWRlb0dhbGxlcnk9Yi5DbHJTaGFwZVJlcGxheU9uZT1iLkNsclNoYXBlUmVwbGF5QWxsPWIuQ2xyU2hhcGVJbWFnZUdhbGxlcnk9Yi5DbHJTaGFwZU11c2ljTm90ZT1iLkNsclNoYXBlRmlsbVN0cmlwPWIuQ2xyU2hh''@;'; put 'put ''cGVIZWFkcGhvbmVzPWIuQ2xyU2hhcGVWb2x1bWVNdXRlPWIuQ2xyU2hhcGVWb2x1bWVVcD1iLkNsclNoYXBlVm9sdW1lRG93bj1iLkNsclNoYXBlU2h1ZmZsZT1iLkNsclNoYXBlVmlkZW9DYW1lcmE9Yi5DbHJTaGFwZUNhbWVyYT1iLkNsclNoYXBlRmFzdEZvcndhcmQ9Yi5DbHJTaGFwZVJl''@;'; put 'put ''d2luZD1iLkNsclNoYXBlUG93ZXI9Yi5DbHJTaGFwZVN0b3A9Yi5DbHJTaGFwZVN0ZXBGb3J3YXJkPWIuQ2xyU2hhcGVQYXVzZT1iLkNsclNoYXBlUGxheT12b2lkIDA7dmFyIF89SSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGls''@;'; put 'put ''cy9zdmctdGFnLWdlbmVyYXRvci50cyIpO2IuQ2xyU2hhcGVQbGF5PSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC4wNywzMS42QTIuMDcsMi4wNywwLDAsMSw2LDI5LjUzVjYuMzJBMi4wNywyLjA3LDAsMCwx''@;'; put 'put ''LDksNC40N0wzMi4yMSwxNi4wOGEyLjA3LDIuMDcsMCwwLDEsMCwzLjdMOSwzMS4zOEEyLjA2LDIuMDYsMCwwLDEsOC4wNywzMS42Wm0wLTI1LjM0TDgsNi4zMlYyOS41M2wuMS4wNkwzMS4zMSwxOGEuMDYuMDYsMCwwLDAsMC0uMDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjE2LDE2LjA4LDguOTQsNC40N0EyLjA3LDIuMDcsMCwwLDAsNiw2LjMyVjI5LjUzYTIuMDYsMi4wNiwwLDAsMCwzLDEuODVMMzIuMTYsMTkuNzdhMi4wNywyLjA3LDAsMCwwLDAtMy43WiIvPicpLGIuQ2xyU2hhcGVQYXVz''@;'; put 'put ''ZT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTEyLjkzLDMySDYuMDdBMi4wNywyLjA3LDAsMCwxLDQsMjkuOTNWNi4wN0EyLjA3LDIuMDcsMCwwLDEsNi4wNyw0aDYuODdBMi4wNywyLjA3LDAsMCwxLDE1LDYu''@;'; put 'put ''MDdWMjkuOTNBMi4wNywyLjA3LDAsMCwxLDEyLjkzLDMyWk0xMyw2SDZWMzBoN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI5LjkzLDMySDIzLjA3QTIuMDcsMi4wNywwLDAsMSwyMSwyOS45M1Y2LjA3''@;'; put 'put ''QTIuMDcsMi4wNywwLDAsMSwyMy4wNyw0aDYuODdBMi4wNywyLjA3LDAsMCwxLDMyLDYuMDdWMjkuOTNBMi4wNywyLjA3LDAsMCwxLDI5LjkzLDMyWk0zMCw2SDIzVjMwaDdaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIg''@;'; put 'put ''eD0iMy45NSIgeT0iNCIgd2lkdGg9IjExIiBoZWlnaHQ9IjI4IiByeD0iMi4wNyIgcnk9IjIuMDciLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiB4PSIyMC45NSIgeT0iNCIgd2lkdGg9IjExIiBoZWlnaHQ9IjI4IiByeD0i''@;'; put 'put ''Mi4wNyIgcnk9IjIuMDciLz4nKSxiLkNsclNoYXBlU3RlcEZvcndhcmQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik01LDMyLjIzYTIsMiwwLDAsMS0yLTJWNS43N0EyLDIsMCwwLDEsNi4xNyw0LjE0TDIzLjIz''@;'; put 'put ''LDE2LjM4YTIsMiwwLDAsMSwwLDMuMjVoMEw2LjE3LDMxLjg2QTIsMiwwLDAsMSw1LDMyLjIzWk01LDUuNzdWMzAuMjNMMjIuMDcsMThaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMSwzMkgyOGEyLDIs''@;'; put 'put ''MCwwLDEtMi0yVjZhMiwyLDAsMCwxLDItMmgzYTIsMiwwLDAsMSwyLDJWMzBBMiwyLDAsMCwxLDMxLDMyWk0yOCw2VjMwaDNWNloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNNSwzMS45YTIsMiwwLDAsMS0yLTJW''@;'; put 'put ''NS40NEEyLDIsMCwwLDEsNi4xMiwzLjgxTDIzLjE4LDE2YTIsMiwwLDAsMSwwLDMuMjVoMEw2LjEyLDMxLjUyQTIsMiwwLDAsMSw1LDMxLjlaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgeD0iMjUuOTUiIHk9IjMuNjci''@;'; put 'put ''IHdpZHRoPSI3IiBoZWlnaHQ9IjI4IiByeD0iMiIgcnk9IjIiLz4nKSxiLkNsclNoYXBlU3RvcD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDMySDZhMiwyLDAsMCwxLTItMlY2QTIsMiwwLDAsMSw2LDRI''@;'; put 'put ''MzBhMiwyLDAsMCwxLDIsMlYzMEEyLDIsMCwwLDEsMzAsMzJaTTYsNlYzMEgzMFY2WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHg9IjMuOTYiIHk9IjQiIHdpZHRoPSIyNy45OSIgaGVpZ2h0PSIyOCIgcng9IjIiIHJ5''@;'; put 'put ''PSIyIi8+JyksYi5DbHJTaGFwZVBvd2VyPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMjFhMSwxLDAsMCwxLTEtMVY0YTEsMSwwLDAsMSwyLDBWMjBBMSwxLDAsMCwxLDE4LDIxWiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzQuMTVhMTUsMTUsMCwwLDEtNy41Mi0yOCwxLDEsMCwwLDEsMSwxLjczLDEzLDEzLDAsMSwwLDEzLDAsMSwxLDAsMSwxLDEtMS43MywxNSwxNSwwLDAsMS03LjUyLDI4WiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTgsMjFhMSwxLDAsMCwwLDEtMVY0YTEsMSwwLDAsMC0yLDBWMjBBMSwxLDAsMCwwLDE4LDIxWiIvPlxuICAgICAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzIuNTEsMTUuNEgzMC40NGExMywxMywwLDEsMS0xOS03LjUsMSwxLDAsMCwwLTEtMS43M0ExNSwxNSwwLDEsMCwzMywxOS4xNSwxNC45LDE0LjksMCwwLDAsMzIuNTEs''@;'; put 'put ''MTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgs''@;'; put 'put ''MS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTE4LDIxYTEsMSwwLDAsMS0x''@;'; put 'put ''LTFWNGExLDEsMCwwLDEsMiwwVjIwQTEsMSwwLDAsMSwxOCwyMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMCwxMy41bC0uMzEsMEExMywxMywwLDEsMSwxMS40OCw3Ljlh''@;'; put 'put ''MSwxLDAsMCwwLTEtMS43MywxNSwxNSwwLDEsMCwyMS4zMSw3LjFBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4''@;'; put 'put ''PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0uMDYsMTcuNjhhMS4yOCwxLjI4LDAsMCwxLTEuMjktMS4yOFY4''@;'; put 'put ''LjY1YTEuMjksMS4yOSwwLDAsMSwyLjU4LDBWMTguNEExLjI4LDEuMjgsMCwwLDEsMTguMDYsMTkuNjhaTTE4LDI3Ljc5QTkuODgsOS44OCwwLDAsMSwxMi4xNyw5Ljg1YTEuNCwxLjQsMCwwLDEsMS45NC4zMSwxLjM3LDEuMzcsMCwwLDEtLjMxLDEuOTIsNy4xOCw3LjE4LDAsMSwwLDExLjQz''@;'; put 'put ''LDUuOCw3LjA3LDcuMDcsMCwwLDAtMy01Ljc2QTEuMzcsMS4zNywwLDAsMSwyMiwxMC4yYTEuNCwxLjQsMCwwLDEsMS45NC0uMjlBOS44OCw5Ljg4LDAsMCwxLDE4LDI3Ljc5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40aC02QTkuNyw5LjcsMCwwLDEsMjgsMTcuODlhMTAsMTAsMCwxLDEtMTUuODMtOCwxLjQsMS40LDAsMCwxLDEuOTQuMzEsMS4zNywxLjM3LDAsMCwxLS4zMSwxLjkyLDcuMTgsNy4xOCwwLDEsMCwxMS40Myw1LjgsNy4wOCw3LjA4LDAs''@;'; put 'put ''MCwwLS40NS0yLjQ5SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOS4zNSwxNHY0LjRhMS4yOSwxLjI5LDAsMCwxLTIuNTgsMFY4LjY1YTEuMjksMS4yOSwwLDAsMSwyLjU4LDB2LjcxbDMuNzYtNi41MUExNiwxNiwwLDEsMCwzNCwxOGExNiwxNiwwLDAsMC0uMjMtMi42MVoiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5''@;'; put 'put ''LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMCwxMy41YTcuNDcsNy40NywwLDAsMS0zLjU3LS45QTkuODMsOS44Myww''@;'; put 'put ''LDAsMSwyOCwxNy44OWExMCwxMCwwLDEsMS0xNS44My04LDEuNCwxLjQsMCwwLDEsMS45NC4zMSwxLjM3LDEuMzcsMCwwLDEtLjMxLDEuOTIsNy4xOCw3LjE4LDAsMSwwLDExLjQzLDUuOCw3LjA3LDcuMDcsMCwwLDAtMy01Ljc2QTEuMzcsMS4zNywwLDAsMSwyMiwxMC4yYTEuMzgsMS4zOCww''@;'; put 'put ''LDAsMSwxLjUyLS40OSw3LjQ1LDcuNDUsMCwwLDEtLjMtNi44MywxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTE2Ljc3LDguNjVhMS4yOSwxLjI5LDAsMCwxLDIuNTgsMFYxOC40YTEuMjksMS4yOSwwLDAsMS0yLjU4LDBaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLGIuQ2xyU2hhcGVSZXdpbmQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNy4wOSwzMS41OGwtMTUuMzItMTJhMiwyLDAsMCwxLDAtMy4xNWwxNS4zMi0xMmExLjkzLDEuOTMsMCwwLDEsMi4wNi0uMjJBMS43NywxLjc3LDAsMCwxLDIwLDZ2Ni43TDMwLjgzLDQuNDJhMS45MywxLjkzLDAsMCwxLDIuMDYtLjIy''@;'; put 'put ''QTIsMiwwLDAsMSwzNCw2VjMwYTIsMiwwLDAsMS0xLjExLDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyTDIwLDIzLjMxVjMwYTEuNzcsMS43NywwLDAsMS0uODUsMS43OSwxLjk0LDEuOTQsMCwwLDEtMi4wNi0uMjJaTTMyLDMwbC4wNi0yNEwxOCwxNi44VjZMMywxOCwxOCwzMFYxOS4y''@;'; put 'put ''WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE2LjkyLDMxLjU4LDEuNiwxOS41N2EyLDIsMCwwLDEsMC0zLjE1bDE1LjMyLTEyQTEuOTMsMS45MywwLDAsMSwxOSw0LjIsMS44OSwxLjg5LDAsMCwxLDIwLDZ2Ni43TDMw''@;'; put 'put ''LjY2LDQuNDJhMS45MywxLjkzLDAsMCwxLDIuMDYtLjIyQTIsMiwwLDAsMSwzMy44Myw2VjMwYTIsMiwwLDAsMS0xLjExLDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyTDIwLDIzLjMxVjMwYTEuODksMS44OSwwLDAsMS0xLDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyWiIvPicp''@;'; put 'put ''LGIuQ2xyU2hhcGVGYXN0Rm9yd2FyZD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE3Ljc3LDMxLjkyYTIsMiwwLDAsMS0uODYtLjJBMS44MSwxLjgxLDAsMCwxLDE2LDI5Ljkzdi02LjdMNS4yNCwzMS41YTEu''@;'; put 'put ''OTQsMS45NCwwLDAsMS0yLjA2LjIyLDIsMiwwLDAsMS0xLjExLTEuNzl2LTI0QTIsMiwwLDAsMSwzLjE4LDQuMTJhMS45MywxLjkzLDAsMCwxLDIuMDYuMjJMMTYsMTIuNjFWNS45MWExLjgxLDEuODEsMCwwLDEsLjkxLTEuNzlBMS45MywxLjkzLDAsMCwxLDE5LDQuMzRsMTUuMzIsMTJhMiwy''@;'; put 'put ''LDAsMCwxLDAsMy4xNUwxOSwzMS41QTIsMiwwLDAsMSwxNy43NywzMS45MlptMC0xMi44VjI5LjkzbDE1LjI2LTEyLTE1LjMyLTEyLC4wNiwxMC44MUw0LDUuOTF2MjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTcu''@;'; put 'put ''NzEsMzJhMiwyLDAsMCwxLS44Ni0uMkExLjc3LDEuNzcsMCwwLDEsMTYsMzB2LTYuN0w1LjE3LDMxLjU4YTEuOTQsMS45NCwwLDAsMS0yLjA2LjIyQTIsMiwwLDAsMSwyLDMwVjZBMiwyLDAsMCwxLDMuMTEsNC4yYTEuOTMsMS45MywwLDAsMSwyLjA2LjIyTDE2LDEyLjY5VjZhMS43NywxLjc3''@;'; put 'put ''LDAsMCwxLC44NS0xLjc5LDEuOTMsMS45MywwLDAsMSwyLjA2LjIybDE1LjMyLDEyYTIsMiwwLDAsMSwwLDMuMTVsLTE1LjMyLDEyQTIsMiwwLDAsMSwxNy43MSwzMloiLz4nKSxiLkNsclNoYXBlQ2FtZXJhPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw4SDI0LjdMMjMuNjQsNS4y''@;'; put 'put ''OEEyLDIsMCwwLDAsMjEuNzgsNEgxNC4yMmEyLDIsMCwwLDAtMS44NywxLjI4TDExLjMsOEg0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEwQTIsMiwwLDAsMCwzMiw4Wm0wLDIySDRWMTBoOC42N2wxLjU1LTRoNy41NmwxLjU1LDRIMzJaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTksMTlhOSw5LDAsMSwwLDktOUE5LDksMCwwLDAsOSwxOVptMTYuNCwwQTcuNCw3LjQsMCwxLDEsMTgsMTEuNiw3LjQxLDcuNDEsMCwwLDEsMjUuNCwxOVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOS4zNywxMi44M2EuOC44LDAsMCwwLS44LS44SDYuMTdhLjguOCwwLDAsMCwwLDEuNmgyLjRBLjguOCwwLDAsMCw5LjM3LDEyLjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi4zNCwxOWE1LjU3LDUuNTcsMCwwLDAsMy4yNCw1bC44NS0xLjM3YTQsNCwwLDEsMSw0LjExLTYuNjFsLjg2LTEuMzhBNS41Niw1LjU2LDAsMCwwLDEyLjM0LDE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw4SDI0LjdMMjMuNjQsNS4yOEEyLDIsMCwwLDAsMjEuNzgsNEgxNC4yMmEyLDIsMCwwLDAtMS44NywxLjI4TDExLjMsOEg0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEwQTIs''@;'; put 'put ''MiwwLDAsMCwzMiw4Wk02LjE3LDEzLjYzYS44LjgsMCwwLDEsMC0xLjZoMi40YS44LjgsMCwwLDEsMCwxLjZaTTE4LDI4YTksOSwwLDEsMSw5LTlBOSw5LDAsMCwxLDE4LDI4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTExLjExLDE5LjA2YTcuMDcsNy4wNywwLDAsMCw0LjExLDYuNDFsMS4wOS0xLjc0YTUsNSwwLDEsMSw1LjIyLTguMzlsMS4wOS0xLjc2YTcuMDYsNy4wNiwwLDAsMC0xMS41MSw1LjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPicpLGIuQ2xyU2hhcGVWaWRl''@;'; put 'put ''b0NhbWVyYT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM0LDEwLjM0YTIuMTEsMi4xMSwwLDAsMC0xLjE2LTEuOSwyLDIsMCwwLDAtMi4xMy4xNUwyNiwxMS42VjhhMiwyLDAsMCwwLTItMkg2YTQsNCwwLDAs''@;'; put 'put ''MC00LDRWMjZhNCw0LDAsMCwwLDQsNEgyNGEyLDIsMCwwLDAsMi0yVjI0LjRsNC42NCwzYTIuMDcsMi4wNywwLDAsMCwyLjIuMkEyLjExLDIuMTEsMCwwLDAsMzQsMjUuNjZaTTMxLjkzLDI1Ljc3Yy0uMDYsMC0uMTEsMC0uMTktLjA2TDI0LDIwLjc3VjI4SDZhMiwyLDAsMCwxLTItMlYxMEEy''@;'; put 'put ''LDIsMCwwLDEsNiw4SDI0djcuMjNsNy44LTVhLjExLjExLDAsMCwxLC4xMywwLC4xMS4xMSwwLDAsMSwuMDcuMTFWMjUuNjZBLjExLjExLDAsMCwxLDMxLjkzLDI1Ljc3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMy''@;'; put 'put ''LjMsOS4zNSwyNiwxMi45VjhhMiwyLDAsMCwwLTItMkg2YTQsNCwwLDAsMC00LDRWMjZhNCw0LDAsMCwwLDQsNEgyNGEyLDIsMCwwLDAsMi0yVjIzLjA4bDYuMywzLjU1QTEuMSwxLjEsMCwwLDAsMzQsMjUuNzdWMTAuMkExLjEsMS4xLDAsMCwwLDMyLjMsOS4zNVoiLz4nKSxiLkNsclNoYXBl''@;'; put 'put ''U2h1ZmZsZT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTIxLjYxLDExaDguNjJsLTMuMywzLjNhMSwxLDAsMSwwLDEuNDEsMS40MkwzNCwxMC4wOGwtLjcxLS43MWgwTDI4LjM0LDQuNDNhMSwxLDAsMCwwLTEu''@;'; put 'put ''NDEsMS40MkwzMC4xMSw5SDIxYTEsMSwwLDAsMC0uODYuNUwxNy41LDE0LjA5bDEuMTYsMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTEuMDcsMjUuMDdIM2ExLDEsMCwwLDAsMCwyaDguNjVhMSwxLDAsMCww''@;'; put 'put ''LC44Ni0uNUwxNS4xOCwyMiwxNCwyMFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjguMzQsMjAuMTdhMSwxLDAsMCwwLTEuNDEsMS40MmwzLjUsMy41SDIxLjYxTDEyLjUxLDkuNTNhMSwxLDAsMCwwLS44Ni0u''@;'; put 'put ''NUgzYTEsMSwwLDEsMCwwLDJoOC4wN2w5LjEsMTUuNTVhMSwxLDAsMCwwLC44Ni41SDI5LjlsLTMsM2ExLDEsMCwwLDAsMS40MSwxLjQybDQuOTUtNC45NGgwbC43MS0uNzFaIi8+JyksYi5DbHJTaGFwZVZvbHVtZURvd249KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yMy40MSwyNS4xMWExLDEsMCwwLDEtLjU0LTEuODUsNi4yMSw2LjIxLDAsMCwwLS4xOS0xMC42NSwxLDEsMCwxLDEsMS0xLjczQTguMjEsOC4yMSwwLDAsMSwyMy45NCwyNSwxLDEsMCwwLDEsMjMuNDEsMjUuMTFaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDMyYTIsMiwwLDAsMS0xLjQyLS41OUw5LjE0LDI0SDRhMiwyLDAsMCwxLTItMlYxNGEyLDIsMCwwLDEsMi0ySDkuMjJsNy4zMy03LjQxQTIsMiwwLDAsMSwyMCw2VjMwYTIsMiwwLDAs''@;'; put 'put ''MS0xLjI0LDEuODVBMiwyLDAsMCwxLDE4LDMyWk00LDE0djhIOS41NmExLDEsMCwwLDEsLjcxLjI4TDE4LDMwVjZsLTcuNjUsNy42OGExLDEsMCwwLDEtLjcxLjNaTTE4LDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJN''@;'; put 'put ''MjMuNDEsMjUuMTFhMSwxLDAsMCwxLS41NC0xLjg1LDYuMjEsNi4yMSwwLDAsMC0uMTktMTAuNjUsMSwxLDAsMSwxLDEtMS43M0E4LjIxLDguMjEsMCwwLDEsMjMuOTQsMjUsMSwxLDAsMCwxLDIzLjQxLDI1LjExWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LjM0LDMuODcsOSwxMkgzYTEsMSwwLDAsMC0xLDFWMjNhMSwxLDAsMCwwLDEsMUg4LjgzbDkuNTEsOC4zQTEsMSwwLDAsMCwyMCwzMS41NVY0LjYyQTEsMSwwLDAsMCwxOC4zNCwzLjg3WiIvPicpLGIuQ2xyU2hhcGVWb2x1bWVVcD0oMCxfLmNscklj''@;'; put 'put ''b25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTIzLjQxLDI1LjI1YTEsMSwwLDAsMS0uNTQtMS44NSw2LjIxLDYuMjEsMCwwLDAtLjE5LTEwLjY1LDEsMSwwLDEsMSwxLTEuNzMsOC4yMSw4LjIxLDAsMCwxLC4yNCwxNC4wNkExLDEs''@;'; put 'put ''MCwwLDEsMjMuNDEsMjUuMjVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI1LjYyLDMxLjE4YTEsMSwwLDAsMS0uNDUtMS44OUExMi40NCwxMi40NCwwLDAsMCwyNSw2Ljg5YTEsMSwwLDEsMSwuODctMS44LDE0''@;'; put 'put ''LjQ0LDE0LjQ0LDAsMCwxLC4yNCwyNkExLDEsMCwwLDEsMjUuNjIsMzEuMThaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDMyLjA2YTIsMiwwLDAsMS0xLjQyLS41OUw5LjE0LDI0SDRhMiwyLDAsMCwxLTIt''@;'; put 'put ''MlYxNGEyLDIsMCwwLDEsMi0ySDkuMjJsNy4zMy03LjM5QTIsMiwwLDAsMSwyMCw2djI0YTIsMiwwLDAsMS0xLjI0LDEuODVBMiwyLDAsMCwxLDE4LDMyLjA2Wk00LDE0djhIOS41NmExLDEsMCwwLDEsLjcxLjNMMTgsMzAuMDZWNkwxMC4zNSwxMy43YTEsMSwwLDAsMS0uNzEuM1pNMTgsNloi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yMy40MSwyNS4yNWExLDEsMCwwLDEtLjU0LTEuODUsNi4yMSw2LjIxLDAsMCwwLS4xOS0xMC42NSwxLDEsMCwxLDEsMS0xLjczLDguMjEsOC4yMSwwLDAsMSwuMjQsMTQuMDZB''@;'; put 'put ''MSwxLDAsMCwxLDIzLjQxLDI1LjI1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI1LjYyLDMxLjE4YTEsMSwwLDAsMS0uNDUtMS44OUExMi40NCwxMi40NCwwLDAsMCwyNSw2Ljg5YTEsMSwwLDEsMSwuODctMS44LDE0''@;'; put 'put ''LjQ0LDE0LjQ0LDAsMCwxLC4yNCwyNkExLDEsMCwwLDEsMjUuNjIsMzEuMThaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMTguMzMsNCw5LjA3LDEyaC02YTEsMSwwLDAsMC0xLDF2OS45MmExLDEsMCwwLDAsMSwxSDgu''@;'; put 'put ''ODhsOS40Niw4LjI0QTEsMSwwLDAsMCwyMCwzMS40M1Y0LjcyQTEsMSwwLDAsMCwxOC4zMyw0WiIvPicpLGIuQ2xyU2hhcGVWb2x1bWVNdXRlPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMy42MSw2LjQxLDku''@;'; put 'put ''MTksMTJINGEyLDIsMCwwLDAtMiwydjhhMiwyLDAsMCwwLDIsMkg5LjE0bDcuNDEsNy40N0EyLDIsMCwwLDAsMTgsMzJhMiwyLDAsMCwwLC43Ni0uMTVBMiwyLDAsMCwwLDIwLDMwVjIyLjc3bDUuODksNS44OWMtLjI1LjE1LS40OS4yOS0uNzUuNDJhMSwxLDAsMCwwLC45LDEuNzksMTQuNCwx''@;'; put 'put ''NC40LDAsMCwwLDEuMzEtLjc1bDIuMjgsMi4yOEwzMSwzMSw1LDVaTTE4LDMwbC03LjczLTcuNzdBMSwxLDAsMCwwLDkuNTYsMjJINFYxNEg5LjY0YTEsMSwwLDAsMCwuNzEtLjNsLjI2LS4yNkwxOCwyMC44MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjQuODksNi42OUExMi40MiwxMi40MiwwLDAsMSwyOSwyNi4xbDEuNDIsMS40MkExNC40MiwxNC40MiwwLDAsMCwyNS43Niw0Ljg4YTEsMSwwLDEsMC0uODcsMS44WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMi42OSwxMi42MkE2LjI3LDYuMjcsMCwwLDEsMjUuOCwxOGE2LjE3LDYuMTcsMCwwLDEtMS4yNCwzLjcxTDI2LDIzLjEzQTguMTUsOC4xNSwwLDAsMCwyNy44LDE4YTguMjgsOC4yOCwwLDAsMC00LjEtNy4xMSwxLDEsMCwxLDAtMSwxLjczWiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0xOCw2djkuMTVsMiwyVjZhMiwyLDAsMCwwLTMuNDItMS40MUwxMiw5LjE3bDEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNC44Nyw2LjY5QTEyLjQyLDEyLjQyLDAsMCwxLDI4Ljc1LDI2LjNsMS40MiwxLjQyQTE0LjQzLDE0LjQzLDAsMCwwLDI1Ljc0LDQuODhhMSwxLDAsMCwwLS44NywxLjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0yIiBkPSJNMjcuMywyNy42N2gwbC0zLjg0LTMuODQtLjU3LS41N2gwTDQuNjMsNSwzLjIxLDYuNDEsOC44LDEySDNhMSwxLDAsMCwwLTEsMVYyM2ExLDEsMCwwLDAsMSwxSDguODNsOS41MSw4LjNBMSwxLDAsMCwwLDIwLDMxLjU1VjIzLjJsNS41OSw1LjU5Yy0uMTcuMS0u''@;'; put 'put ''MzQuMi0uNTEuMjlhMSwxLDAsMCwwLC45LDEuNzljLjM3LS4xOS43Mi0uNCwxLjA4LS42MmwyLjE0LDIuMTRMMzAuNjEsMzFsLTMuMjUtMy4yNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yMi42OSwxMi42MkE2LjI3''@;'; put 'put ''LDYuMjcsMCwwLDEsMjUuOCwxOGE2LjE3LDYuMTcsMCwwLDEtMS40MiwzLjkybDEuNDIsMS40MmE4LjE2LDguMTYsMCwwLDAsMi01LjM0LDguMjgsOC4yOCwwLDAsMC00LjEtNy4xMSwxLDEsMCwxLDAtMSwxLjczWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtNCIgZD0iTTIwLDQuNjJhMSwxLDAsMCwwLTEuNjYtLjc1bC02LjQyLDUuNkwyMCwxNy41NFoiLz4nKSxiLkNsclNoYXBlSGVhZHBob25lcz0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0i''@;'; put 'put ''TTE4LDNBMTQuMjcsMTQuMjcsMCwwLDAsNCwxNy41VjMxSDkuMkEyLjc0LDIuNzQsMCwwLDAsMTIsMjguMzNWMjEuNjdBMi43NCwyLjc0LDAsMCwwLDkuMiwxOUg2VjE3LjVBMTIuMjcsMTIuMjcsMCwwLDEsMTgsNSwxMi4yNywxMi4yNywwLDAsMSwzMCwxNy41VjE5SDI2LjhBMi43NCwyLjc0''@;'; put 'put ''LDAsMCwwLDI0LDIxLjY3djYuNjdBMi43NCwyLjc0LDAsMCwwLDI2LjgsMzFIMzJWMTcuNUExNC4yNywxNC4yNywwLDAsMCwxOCwzWk05LjIsMjFhLjc1Ljc1LDAsMCwxLC44LjY3djYuNjdhLjc1Ljc1LDAsMCwxLS44LjY3SDZWMjFaTTI2LDI4LjMzVjIxLjY3YS43NS43NSwwLDAsMSwuOC0u''@;'; put 'put ''NjdIMzB2OEgyNi44QS43NS43NSwwLDAsMSwyNiwyOC4zM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwzQTE0LjI3LDE0LjI3LDAsMCwwLDQsMTcuNVYzMUg4LjJBMS43NCwxLjc0LDAsMCwwLDEwLDI5LjMzVjIy''@;'; put 'put ''LjY3QTEuNzQsMS43NCwwLDAsMCw4LjIsMjFINlYxNy41QTEyLjI3LDEyLjI3LDAsMCwxLDE4LDUsMTIuMjcsMTIuMjcsMCwwLDEsMzAsMTcuNVYyMUgyNy44QTEuNzQsMS43NCwwLDAsMCwyNiwyMi42N3Y2LjY3QTEuNzQsMS43NCwwLDAsMCwyNy44LDMxSDMyVjE3LjVBMTQuMjcsMTQuMjcs''@;'; put 'put ''MCwwLDAsMTgsM1oiLz4nKSxiLkNsclNoYXBlRmlsbVN0cmlwPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjZB''@;'; put 'put ''MiwyLDAsMCwwLDMwLDRabTAsMjZINlY2SDMwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xNC42LDIzLjA3YTEuMjksMS4yOSwwLDAsMCwxLjI0LjA5bDguNzMtNGExLjMsMS4zLDAsMCwwLDAtMi4zN2gwbC04''@;'; put 'put ''LjczLTRBMS4zLDEuMywwLDAsMCwxNCwxNHY4QTEuMjksMS4yOSwwLDAsMCwxNC42LDIzLjA3Wm0xLTguNkwyMy4zMSwxOCwxNS42LDIxLjUxWiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjgiIHk9IjciIHdpZHRo''@;'; put 'put ''PSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxNCIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTUiIHg9IjIwIiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgeD0iMjYiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiB4PSI4IiB5PSIyNiIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIHg9IjE0IiB5PSIyNiIgd2lkdGg9IjIi''@;'; put 'put ''IGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiIHg9IjIwIiB5PSIyNiIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEwIiB4PSIyNiIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJW''@;'; put 'put ''NkEyLDIsMCwwLDAsMzAsNFpNMjAsN2gydjNIMjBaTTE0LDdoMnYzSDE0Wk0xMCwyOUg4VjI2aDJabTAtMTlIOFY3aDJabTYsMTlIMTRWMjZoMlptNiwwSDIwVjI2aDJabTMuMTYtMTAuMTZMMTUuMzksMjMuMkExLDEsMCwwLDEsMTQsMjIuMjhWMTMuNTdhMSwxLDAsMCwxLDEuNDEtLjkxTDI1''@;'; put 'put ''LjE2LDE3QTEsMSwwLDAsMSwyNS4xNiwxOC44NFpNMjgsMjlIMjZWMjZoMlptMC0xOUgyNlY3aDJaIi8+JyksYi5DbHJTaGFwZU11c2ljTm90ZT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSJcbiAgICAgICAgICAgICAg''@;'; put 'put ''ICBkPSJNMzEuNjgsNi4xNmMtMS45Mi0zLjMtMTAuNi00LTExLjU4LTQuMDlMMTksMlYyMi4zNGE1Ljg5LDUuODksMCwwLDAtLjgyLS41Niw4LjMzLDguMzMsMCwwLDAtNi41My0uNDFDNy41NywyMi43LDQuOTIsMjYuNSw1Ljc4LDI5Ljg0YTUuMzMsNS4zMywwLDAsMCwyLjY2LDMuMzIsNy40''@;'; put 'put ''OCw3LjQ4LDAsMCwwLDMuNjEuODhBOS41NCw5LjU0LDAsMCwwLDE1LDMzLjU3YzMuNjctMS4xOCw2LjE3LTQuMzMsNi4wNi03LjM2VjkuMzRhMjkuMTQsMjkuMTQsMCwwLDEsNi41NSwxLjQzLDEsMSwwLDEsMCwuNzItMS44N0EzMS4zNywzMS4zNywwLDAsMCwyMSw3LjMzVjQuMTdjMy4zMy4z''@;'; put 'put ''Niw4LDEuMzgsOC45MiwzLDIsMy40MS0yLjMzLDcuMzYtMi4zNyw3LjRhMSwxLDAsMCwwLDEuMzMsMS40OUMyOS4xNSwxNS44NSwzNC41LDExLDMxLjY4LDYuMTZaTTE0LjM1LDMxLjY3YTYuNDMsNi40MywwLDAsMS01LS4yNiwzLjMxLDMuMzEsMCwwLDEtMS42OS0yLjA3Yy0uNi0yLjMzLDEu''@;'; put 'put ''NDUtNS4wNSw0LjU4LTYuMDZhNy41Miw3LjUyLDAsMCwxLDIuMy0uMzcsNS41Miw1LjUyLDAsMCwxLDIuNjUuNjIsMy4zMSwzLjMxLDAsMCwxLDEuNjksMi4wN0MxOS41NCwyNy45NCwxNy40OSwzMC42NiwxNC4zNSwzMS42N1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiXG4gICAgICAgICAgICAgICAgZD0iTTMxLjY4LDYuMTZjLTEuOTItMy4zLTEwLjYtNC0xMS41OC00LjA5TDE5LDJWMjIuMjlhNS44OCw1Ljg4LDAsMCwwLS44MS0uNTUsOC4zMyw4LjMzLDAsMCwwLTYuNTMtLjQxYy00LjEyLDEuMzMtNi43Nyw1LjEz''@;'; put 'put ''LTUuOTEsOC40N2E1LjMzLDUuMzMsMCwwLDAsMi42NiwzLjMyLDcuNDgsNy40OCwwLDAsMCwzLjYxLjg4QTkuNTQsOS41NCwwLDAsMCwxNSwzMy41MmMzLjctMS4xOSw2LjItNC4zNyw2LjA2LTcuNDIsMCwwLDAsMCwwLDBWOC40OWMxLC4xMiwyLjM3LjMzLDMuODIuNjRhMTEuMTcsMTEuMTcs''@;'; put 'put ''MCwwLDEsNC4wNiwxLjQ2YzEsLjY2LjM4LDEuOS4zMywyYTExLjgsMTEuOCwwLDAsMS0xLjY2LDIsMSwxLDAsMCwwLDEuMzMsMS40OUMyOS4xNSwxNS44NSwzNC41LDExLDMxLjY4LDYuMTZaIi8+JyksYi5DbHJTaGFwZUltYWdlR2FsbGVyeT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJN''@;'; put 'put ''MzIuMTIsMTBIMy44OEExLjg4LDEuODgsMCwwLDAsMiwxMS44OFYzMC4xMkExLjg4LDEuODgsMCwwLDAsMy44OCwzMkgzMi4xMkExLjg4LDEuODgsMCwwLDAsMzQsMzAuMTJWMTEuODhBMS44OCwxLjg4LDAsMCwwLDMyLjEyLDEwWk0zMiwzMEg0VjEySDMyWiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTguNTYsMTkuNDVhMywzLDAsMSwwLTMtM0EzLDMsMCwwLDAsOC41NiwxOS40NVptMC00LjZBMS42LDEuNiwwLDEsMSw3LDE2LjQ1LDEuNiwxLjYsMCwwLDEsOC41NiwxNC44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik03LjksMjhsNi02LDMuMTgsMy4xOEwxNC4yNiwyOGgybDcuNDYtNy40NkwzMCwyNi43N3YtMkwyNC4yLDE5YS43MS43MSwwLDAsMC0xLDBsLTUuMTYsNS4xNkwxNC4zNywyMC41YS43MS43MSwwLDAsMC0xLDBMNS45MiwyOFoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC4xNCwzaDBhMSwxLDAsMCwwLTEtMWgtMjJhMSwxLDAsMCwwLTEsMWgwVjRoMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzIuMTIsN1Y3YTEs''@;'; put 'put ''MSwwLDAsMC0xLTFoLTI2YTEsMSwwLDAsMC0xLDFoMFY4aDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMwLjE0LDNoMGExLDEsMCwwLDAtMS0xaC0yMmExLDEsMCwwLDAtMSwxaDBWNGgyNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMyLjEyLDdWN2ExLDEsMCwwLDAtMS0xaC0yNmExLDEsMCwwLDAtMSwxaDBWOGgyOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTMyLjEyLDEwSDMuODhBMS44OCwxLjg4LDAsMCwwLDIs''@;'; put 'put ''MTEuODhWMzAuMTJBMS44OCwxLjg4LDAsMCwwLDMuODgsMzJIMzIuMTJBMS44OCwxLjg4LDAsMCwwLDM0LDMwLjEyVjExLjg4QTEuODgsMS44OCwwLDAsMCwzMi4xMiwxMFpNOC41NiwxMy40NWEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4LjU2LDEzLjQ1Wk0zMCwyOGgtMjRsNy40Ni03LjQ3''@;'; put 'put ''YS43MS43MSwwLDAsMSwxLDBsMy42OCwzLjY4TDIzLjIxLDE5YS43MS43MSwwLDAsMSwxLDBMMzAsMjQuNzlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPicpLGIuQ2xyU2hhcGVSZXBsYXlBbGw9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE3LjQ2LDI2''@;'; put 'put ''LjIyYTEuNCwxLjQsMCwwLDAsMS0uNDJsNS41OS01LjU2YTEuNDMsMS40MywwLDAsMCwuNDItMSwxLjQ2LDEuNDYsMCwwLDAtLjQyLTFsLTUuNTktNS41NmExLjQzLDEuNDMsMCwwLDAtMi40NCwxVjI0Ljc5YTEuNDEsMS40MSwwLDAsMCwuODgsMS4zMkExLjU0LDEuNTQsMCwwLDAsMTcuNDYs''@;'; put 'put ''MjYuMjJabS4xNi0xMi4xNiw1LjE5LDUuMTYtNS4xOSw1LjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LjA2LDVoLTYuN2wyLjkyLTIuNjRBMSwxLDAsMCwwLDEyLjk0Ljg4TDcuMzIsNiwxMi45NCwxMWExLDEsMCwwLDAsLjY3''@;'; put 'put ''LjI2LDEsMSwwLDAsMCwuNzQtLjMzLDEsMSwwLDAsMC0uMDctMS40MkwxMS40Niw3aDYuNkExMS43OCwxMS43OCwwLDEsMSw3LjcxLDI0LjQxLDEsMSwwLDAsMCw2LDI1LjM2LDEzLjc4LDEzLjc4LDAsMSwwLDE4LjA2LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMiIgLz4nKSxiLkNsclNoYXBlUmVwbGF5T25lPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOSwyNy4yN2ExLDEsMCwwLDAsMS0xVjE0YTEsMSwwLDAsMC0xLTFIMTlhMy44LDMuOCwwLDAsMC0xLjEuMjNsLTIsLjYyYS45Mi45MiwwLDAsMC0uNzIuODYuODguODgsMCwwLDAsLjg4''@;'; put 'put ''Ljg2LDEuNDYsMS40NiwwLDAsMCwuNDMtLjA4TDE4LDE1LjA3djExLjJBMSwxLDAsMCwwLDE5LDI3LjI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LjA2LDVoLTYuN2wyLjkyLTIuNjRBMSwxLDAsMCwwLDEyLjk0Ljg4TDcuMzIs''@;'; put 'put ''NiwxMi45NCwxMWExLDEsMCwwLDAsLjY3LjI2LDEsMSwwLDAsMCwuNzQtLjMzLDEsMSwwLDAsMC0uMDctMS40MkwxMS40Niw3aDYuNkExMS43OCwxMS43OCwwLDEsMSw3LjcxLDI0LjQxLDEsMSwwLDAsMCw2LDI1LjM2LDEzLjc4LDEzLjc4LDAsMSwwLDE4LjA2LDVaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlVmlkZW9HYWxsZXJ5PSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMi4xMiwxMEgzLjg4QTEuODgsMS44OCwwLDAsMCwyLDExLjg4VjMwLjEyQTEuODgsMS44OCwwLDAsMCwzLjg4LDMySDMyLjEyQTEuODgs''@;'; put 'put ''MS44OCwwLDAsMCwzNCwzMC4xMlYxMS44OEExLjg4LDEuODgsMCwwLDAsMzIuMTIsMTBaTTMyLDMwSDRWMTJIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAuMTQsM2gwYTEsMSwwLDAsMC0xLTFoLTIyYTEsMSwwLDAsMC0xLDFo''@;'; put 'put ''MFY0aDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMyLjEyLDdWN2ExLDEsMCwwLDAtMS0xaC0yNmExLDEsMCwwLDAtMSwxaDBWOGgyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRo''@;'; put 'put ''IGQ9Ik0xMi44MiwyNi43OWExLjc0LDEuNzQsMCwwLDAsLjkzLjI4LDEuNjgsMS42OCwwLDAsMCwuNjktLjE1bDkuNzctNC4zNmExLjY5LDEuNjksMCwwLDAsMC0zLjFMMTQuNDQsMTUuMWExLjcsMS43LDAsMCwwLTIuMzksMS41NXY4LjcyQTEuNywxLjcsMCwwLDAsMTIuODIsMjYuNzlabS42''@;'; put 'put ''My0xMC4xNGEuMjkuMjksMCwwLDEsLjE0LS4yNS4zLjMsMCwwLDEsLjE2LDAsLjI3LjI3LDAsMCwxLC4xMiwwbDkuNzcsNC4zNWEuMjkuMjksMCwwLDEsLjE4LjI4LjI4LjI4LDAsMCwxLS4xOC4yN2wtOS43Nyw0LjM2YS4yOC4yOCwwLDAsMS0uMjgsMCwuMzEuMzEsMCwwLDEtLjE0LS4yNVoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMi4xMiwxMEgzLjg4QTEuODgsMS44OCwwLDAsMCwyLDExLjg4VjMwLjEyQTEuODgsMS44OCwwLDAsMCwzLjg4LDMySDMyLjEyQTEuODgsMS44OCwwLDAsMCwzNCwzMC4xMlYxMS44OEExLjg4''@;'; put 'put ''LDEuODgsMCwwLDAsMzIuMTIsMTBaTTI0LjE4LDIxLjgzbC05Ljc3LDQuMzZBMSwxLDAsMCwxLDEzLDI1LjI4VjE2LjU2YTEsMSwwLDAsMSwxLjQxLS45MUwyNC4xOCwyMEExLDEsMCwwLDEsMjQuMTgsMjEuODNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxw''@;'; put 'put ''YXRoIGQ9Ik0zMC4xNCwzaDBhMSwxLDAsMCwwLTEtMWgtMjJhMSwxLDAsMCwwLTEsMWgwVjRoMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMi4xMiw3VjdhMSwxLDAsMCwwLTEtMWgtMjZhMSwxLDAsMCwwLTEsMWgwVjhoMjhaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPicpLGIuQ2xyU2hhcGVNaWNyb3Bob25lPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyNGMzLjksMCw3LTMuMSw3LTdWOWMwLTMuOS0zLjEtNy03LTdzLTcsMy4xLTcsN3Y4QzExLDIwLjksMTQuMSwyNCwxOCwyNHog''@;'; put 'put ''TTEzLDljMC0yLjgsMi4yLTUsNS01czUsMi4yLDUsNXY4XG5cdFx0YzAsMi44LTIuMiw1LTUsNXMtNS0yLjItNS01Vjl6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAsMTdoLTJjMCw1LjUtNC41LDEwLTEwLDEwUzgsMjIuNSw4LDE3''@;'; put 'put ''SDZjMCw2LjMsNC44LDExLjQsMTEsMTEuOVYzMmgtM2MtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEsMWg4YzAuNiwwLDEtMC40LDEtMVxuXHRcdHMtMC40LTEtMS0xaC0zdi0zLjFDMjUuMiwyOC40LDMwLDIzLjMsMzAsMTd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMiIgLz48cGF0aCBkPSJNMTgsMjRjMy45LDAsNy0zLjEsNy03VjljMC0zLjktMy4xLTctNy03cy03LDMuMS03LDd2OEMxMSwyMC45LDE0LjEsMjQsMTgsMjR6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMCwxN2gtMmMwLDUuNS00LjUs''@;'; put 'put ''MTAtMTAsMTBTOCwyMi41LDgsMTdINmMwLDYuMyw0LjgsMTEuNCwxMSwxMS45VjMyaC0zYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDhjMC42LDAsMS0wLjQsMS0xXG5cdFx0cy0wLjQtMS0xLTFoLTN2LTMuMUMyNS4yLDI4LjQsMzAsMjMuMywzMCwxN3oiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksYi5DbHJTaGFwZU1pY3JvcGhvbmVNdXRlPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwxN2gtMmMwLDEuOC0wLjUsMy41LTEuNCw1bDEuNSwxLjVDMjkuMywyMS41LDI5LjksMTkuMywzMCwxN3oiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCw0YzIuOCwwLDUsMi4yLDUsNXY4YzAsMC40LTAuMSwwLjgtMC4yLDEuMmwxLjYsMS42YzAuNC0wLjksMC42LTEuOCwwLjYtMi44VjljMC0zLjktMy4yLTctNy4xLTYuOVxuXHRcdGMtMi45LDAtNS42LDEuOS02LjUsNC43TDEz''@;'; put 'put ''LDguM0MxMy41LDUuOSwxNS42LDQuMiwxOCw0eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI1LjIsMjYuNmw2LjksNi45bDEuNC0xLjRMNCwyLjZMMi42LDRsOC40LDguNFYxN2MwLDMuOSwzLjEsNyw3LDdjMS4zLDAsMi41LTAuMywz''@;'; put 'put ''LjYtMWwyLjIsMi4yQzIyLjEsMjYuNCwyMC4xLDI3LDE4LDI3XG5cdFx0Yy01LjQsMC4yLTkuOC00LjEtMTAtOS40YzAtMC4yLDAtMC40LDAtMC42SDZjMC4xLDYuMiw0LjgsMTEuNCwxMSwxMnYzaC0zYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDhjMC42LDAsMS0wLjQsMS0xXG5cdFx0''@;'; put 'put ''cy0wLjQtMS0xLTFoLTN2LTNDMjEuMiwyOC44LDIzLjQsMjgsMjUuMiwyNi42eiBNMTMuOCwxOS43QzEzLjMsMTguOSwxMywxOCwxMywxN3YtMi42bDcuMSw3LjFDMTcuOSwyMi41LDE1LjIsMjEuOCwxMy44LDE5Ljd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MyIgLz48cGF0aCBkPSJNMzAsMTdoLTJjMCwxLjgtMC41LDMuNS0xLjQsNWwxLjUsMS41QzI5LjMsMjEuNSwyOS45LDE5LjMsMzAsMTd6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNSwxN1Y5YzAtMy45LTMuMi03LTcuMS02LjljLTIuOSww''@;'; put 'put ''LTUuNiwxLjktNi41LDQuN2wxMywxM0MyNC44LDE4LjksMjUsMTcuOSwyNSwxN3oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTI1LjIsMjYuNmw2LjksNi45bDEuNC0xLjRMNCwyLjZMMi42LDRsOC40LDguNFYxN2MwLDMuOSwzLjEsNyw3LDdj''@;'; put 'put ''MS4zLDAsMi41LTAuMywzLjYtMWwyLjIsMi4yQzIyLjEsMjYuNCwyMC4xLDI3LDE4LDI3XG5cdFx0Yy01LjQsMC4yLTkuOC00LjEtMTAtOS40YzAtMC4yLDAtMC40LDAtMC42SDZjMC4xLDYuMiw0LjgsMTEuNCwxMSwxMnYzaC0zYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDhjMC42LDAs''@;'; put 'put ''MS0wLjQsMS0xXG5cdFx0cy0wLjQtMS0xLTFoLTN2LTNDMjEuMiwyOC44LDIzLjQsMjgsMjUuMiwyNi42eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxiLk1lZGlhU2hhcGVzPXtwbGF5OmIuQ2xyU2hhcGVQbGF5LHBhdXNlOmIuQ2xyU2hhcGVQYXVzZSwi''@;'; put 'put ''c3RlcC1mb3J3YXJkIjpiLkNsclNoYXBlU3RlcEZvcndhcmQsc3RvcDpiLkNsclNoYXBlU3RvcCxwb3dlcjpiLkNsclNoYXBlUG93ZXIscmV3aW5kOmIuQ2xyU2hhcGVSZXdpbmQsImZhc3QtZm9yd2FyZCI6Yi5DbHJTaGFwZUZhc3RGb3J3YXJkLGNhbWVyYTpiLkNsclNoYXBlQ2FtZXJhLCJ2''@;'; put 'put ''aWRlby1jYW1lcmEiOmIuQ2xyU2hhcGVWaWRlb0NhbWVyYSxzaHVmZmxlOmIuQ2xyU2hhcGVTaHVmZmxlLCJ2b2x1bWUtdXAiOmIuQ2xyU2hhcGVWb2x1bWVVcCwidm9sdW1lLWRvd24iOmIuQ2xyU2hhcGVWb2x1bWVEb3duLCJ2b2x1bWUtbXV0ZSI6Yi5DbHJTaGFwZVZvbHVtZU11dGUsaGVh''@;'; put 'put ''ZHBob25lczpiLkNsclNoYXBlSGVhZHBob25lcywiZmlsbS1zdHJpcCI6Yi5DbHJTaGFwZUZpbG1TdHJpcCwibXVzaWMtbm90ZSI6Yi5DbHJTaGFwZU11c2ljTm90ZSwiaW1hZ2UtZ2FsbGVyeSI6Yi5DbHJTaGFwZUltYWdlR2FsbGVyeSwicmVwbGF5LWFsbCI6Yi5DbHJTaGFwZVJlcGxheUFs''@;'; put 'put ''bCwicmVwbGF5LW9uZSI6Yi5DbHJTaGFwZVJlcGxheU9uZSwidmlkZW8tZ2FsbGVyeSI6Yi5DbHJTaGFwZVZpZGVvR2FsbGVyeSxtaWNyb3Bob25lOmIuQ2xyU2hhcGVNaWNyb3Bob25lLCJtaWNyb3Bob25lLW11dGUiOmIuQ2xyU2hhcGVNaWNyb3Bob25lTXV0ZX0sdHlwZW9mIHdpbmRvdzwi''@;'; put 'put ''dSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgiQ2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5SWNvbnMuYWRkKGIuTWVkaWFTaGFwZXMpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3NvY2lhbC1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3NvY2lhbC1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oWCxiLEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksYi5Tb2NpYWxTaGFwZXM9Yi5DbHJTaGFwZUhhc2h0YWc9Yi5DbHJTaGFwZUNyb3duPWIu''@;'; put 'put ''Q2xyU2hhcGVUaHVtYnNEb3duPWIuQ2xyU2hhcGVUaHVtYnNVcD1iLkNsclNoYXBlU2FkRmFjZT1iLkNsclNoYXBlTmV1dHJhbEZhY2U9Yi5DbHJTaGFwZUhhcHB5RmFjZT1iLkNsclNoYXBlUGljdHVyZT1iLkNsclNoYXBlQ2hhdEJ1YmJsZT1iLkNsclNoYXBlVGFsa0J1YmJsZXM9Yi5DbHJT''@;'; put 'put ''aGFwZUhlYXJ0QnJva2VuPWIuQ2xyU2hhcGVIZWFydD1iLkNsclNoYXBlSW5ib3g9Yi5DbHJTaGFwZUZsYWc9Yi5DbHJTaGFwZVRhc2tzPWIuQ2xyU2hhcGVFbnZlbG9wZT1iLkNsclNoYXBlQm9va21hcms9Yi5DbHJTaGFwZUhhbGZTdGFyPWIuQ2xyU2hhcGVTdGFyPWIuQ2xyU2hhcGVTaGFy''@;'; put 'put ''ZT12b2lkIDA7dmFyIF89SSgKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLHA9SSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91''@;'; put 'put ''dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpLFY9SSgKLyohIC4vY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyIpO2IuQ2xyU2hhcGVTaGFyZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjUzLDI0YTUsNSwwLDAsMC0zLjYsMS41NUwxMS43NCwxOS40NWE0LjQ3LDQuNDcsMCwwLDAsMC0yLjhsMTIuMjEtNi4yMWE1LjEyLDUuMTIsMCwxLDAtMS4wNy0xLjdMMTAuNzksMTQuODlhNSw1LDAsMSwwLDAsNi4zM2wxMi4wNiw2LjA3QTQuOTMs''@;'; put 'put ''NC45MywwLDAsMCwyMi41NCwyOWE1LDUsMCwxLDAsNS01Wm0wLTIwYTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDI3LjUzLDRaTTcsMjFhMywzLDAsMSwxLDMtM0EzLDMsMCwwLDEsNywyMVpNMjcuNTMsMzJhMywzLDAsMSwxLDMtM0EzLDMsMCwwLDEsMjcuNTMsMzJaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI3LjUzLDI0YTUsNSwwLDAsMC0zLjYsMS41NUwxMS43NCwxOS40NWE0LjQ3LDQuNDcsMCwwLDAsMC0yLjhsMTIuMjEtNi4yMWE1LjEyLDUuMTIsMCwxLDAtMS4wNy0xLjdMMTAuNzksMTQuODlh''@;'; put 'put ''NSw1LDAsMSwwLDAsNi4zM2wxMi4wNiw2LjA3QTQuOTMsNC45MywwLDAsMCwyMi41NCwyOWE1LDUsMCwxLDAsNS01WiIvPicpLGIuQ2xyU2hhcGVTdGFyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuMTks''@;'; put 'put ''MzRhMi4yMiwyLjIyLDAsMCwxLTEuMjQtLjM4bC03LjQ2LTVhLjIyLjIyLDAsMCwwLS4yNSwwbC03LjQ2LDVBMi4yMiwyLjIyLDAsMCwxLDcuNCwzMS4yMWwyLjQ1LTguNjRhLjIzLjIzLDAsMCwwLS4wOC0uMjRMMi43MSwxNi43OGEyLjIyLDIuMjIsMCwwLDEsMS4yOS00bDktLjM0YS4yMy4y''@;'; put 'put ''MywwLDAsMCwuMi0uMTVsMy4xLTguNDNhMi4yMiwyLjIyLDAsMCwxLDQuMTcsMGwzLjEsOC40M2EuMjMuMjMsMCwwLDAsLjIuMTVsOSwuMzRhMi4yMiwyLjIyLDAsMCwxLDEuMjksNEwyNywyMi4zM2EuMjIuMjIsMCwwLDAtLjA4LjI0bDIuNDUsOC42NEEyLjIzLDIuMjMsMCwwLDEsMjcuMTks''@;'; put 'put ''MzRabS04LjgyLTcuNDJBMi4yMSwyLjIxLDAsMCwxLDE5LjYsMjdsNy40Niw1YS4yMi4yMiwwLDAsMCwuMzQtLjI1bC0yLjQ1LTguNjRhMi4yMSwyLjIxLDAsMCwxLC43Ny0yLjM1bDcuMDYtNS41NWEuMjIuMjIsMCwwLDAtLjEzLS40bC05LS4zNGEyLjIyLDIuMjIsMCwwLDEtMi0xLjQ2bC0z''@;'; put 'put ''LjEtOC40M2EuMjIuMjIsMCwwLDAtLjQyLDBMMTUuMDYsMTNhMi4yMiwyLjIyLDAsMCwxLTIsMS40NmwtOSwuMzRhLjIyLjIyLDAsMCwwLS4xMy40TDExLDIwLjc2YTIuMjIsMi4yMiwwLDAsMSwuNzcsMi4zNUw5LjMzLDMxLjc1YS4yMS4yMSwwLDAsMCwuMDguMjQuMi4yLDAsMCwwLC4yNiww''@;'; put 'put ''bDcuNDYtNUEyLjIyLDIuMjIsMCwwLDEsMTguMzYsMjYuNjJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LDE2Ljc4YTIuMjIsMi4yMiwwLDAsMC0xLjI5LTRsLTktLjM0YS4yMy4yMywwLDAsMS0uMi0uMTVM''@;'; put 'put ''MjAuNCwzLjg5YTIuMjIsMi4yMiwwLDAsMC00LjE3LDBsLTMuMSw4LjQzYS4yMy4yMywwLDAsMS0uMi4xNWwtOSwuMzRhMi4yMiwyLjIyLDAsMCwwLTEuMjksNGw3LjA2LDUuNTVhLjIzLjIzLDAsMCwxLC4wOC4yNEw3LjM1LDMxLjIxYTIuMjIsMi4yMiwwLDAsMCwzLjM4LDIuNDVsNy40Ni01''@;'; put 'put ''YS4yMi4yMiwwLDAsMSwuMjUsMGw3LjQ2LDVhMi4yLDIuMiwwLDAsMCwyLjU1LDAsMi4yLDIuMiwwLDAsMCwuODMtMi40bC0yLjQ1LTguNjRhLjIyLjIyLDAsMCwxLC4wOC0uMjRaIi8+JyksYi5DbHJTaGFwZUhhbGZTdGFyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzQsMTYuNzhhMi4yMiwyLjIyLDAsMCwwLTEuMjktNGwtOS0uMzRhLjIzLjIzLDAsMCwxLS4yLS4xNUwyMC40LDMuODlhMi4yMiwyLjIyLDAsMCwwLTQuMTcsMGwtMy4xLDguNDNhLjIzLjIzLDAsMCwxLS4yLjE1bC05LC4zNGEyLjIy''@;'; put 'put ''LDIuMjIsMCwwLDAtMS4yOSw0bDcuMDYsNS41NWEuMjIuMjIsMCwwLDEsLjA4LjI0TDcuMzUsMzEuMjFBMi4yMywyLjIzLDAsMCwwLDkuNDksMzRhMi4yMiwyLjIyLDAsMCwwLDEuMjQtLjM4bDcuNDYtNWEuMjIuMjIsMCwwLDEsLjI1LDBsNy40Niw1YTIuMjIsMi4yMiwwLDAsMCwzLjM4LTIu''@;'; put 'put ''NDVsLTIuNDUtOC42NGEuMjMuMjMsMCwwLDEsLjA4LS4yNFpNMTguMzMsMjYuNjJoMGEyLjIxLDIuMjEsMCwwLDAtMS4yNC4zOEw5LjYyLDMyYS4yMi4yMiwwLDAsMS0uMzQtLjI1bDIuNDUtOC42NEEyLjIxLDIuMjEsMCwwLDAsMTEsMjAuNzZMMy45LDE1LjIxYS4yMi4yMiwwLDAsMSwuMTMt''@;'; put 'put ''LjRsOS0uMzRBMi4yMiwyLjIyLDAsMCwwLDE1LDEzbDMuMS04LjQzYS4yLjIsMCwwLDEsLjIxLS4xNWgwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNCwxNi43OGEyLjIyLDIuMjIsMCwwLDAtMS4yOS00bC05''@;'; put 'put ''LS4zNGEuMjMuMjMsMCwwLDEtLjItLjE1TDIwLjQsMy44OWEyLjIyLDIuMjIsMCwwLDAtNC4xNywwbC0zLjEsOC40M2EuMjMuMjMsMCwwLDEtLjIuMTVsLTksLjM0YTIuMjIsMi4yMiwwLDAsMC0xLjI5LDRsNy4wNiw1LjU1YS4yMy4yMywwLDAsMSwuMDguMjRMNy4zNSwzMS4yMWEyLjIyLDIu''@;'; put 'put ''MjIsMCwwLDAsMy4zOCwyLjQ1bDcuNDYtNWEuMjIuMjIsMCwwLDEsLjI1LDBsNy40Niw1YTIuMiwyLjIsMCwwLDAsMi41NSwwLDIuMiwyLjIsMCwwLDAsLjgzLTIuNGwtMi40NS04LjY0YS4yMi4yMiwwLDAsMSwuMDgtLjI0Wk0yNC45LDIzLjExbDIuNDUsOC42NEEuMjIuMjIsMCwwLDEsMjcs''@;'; put 'put ''MzJsLTcuNDYtNWEyLjIxLDIuMjEsMCwwLDAtMS4yNC0uMzhoMFY0LjQ0aDBhLjIuMiwwLDAsMSwuMjEuMTVMMjEuNjIsMTNhMi4yMiwyLjIyLDAsMCwwLDIsMS40Nmw5LC4zNGEuMjIuMjIsMCwwLDEsLjEzLjRsLTcuMDYsNS41NUEyLjIxLDIuMjEsMCwwLDAsMjQuOSwyMy4xMVoiLz4nKSxi''@;'; put 'put ''LkNsclNoYXBlQm9va21hcms9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNiwzNGEyLDIsMCwwLDEtMS40MS0uNThMMTgsMjYuODJsLTYuNTQsNi41MkEyLDIsMCwwLDEsOCwzMS45M1Y0YTIsMiwwLDAsMSwy''@;'; put 'put ''LTJIMjZhMiwyLDAsMCwxLDIsMlYzMmEyLDIsMCwwLDEtMiwyWm0wLTJoMFY0SDEwVjMxLjkzTDE4LDI0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNiwySDEwQTIsMiwwLDAsMCw4LDRWMzEuOTNhMiwyLDAs''@;'; put 'put ''MCwwLDMuNDIsMS40MWw2LjU0LTYuNTIsNi42Myw2LjZBMiwyLDAsMCwwLDI4LDMyVjRBMiwyLDAsMCwwLDI2LDJaIi8+JyksYi5DbHJTaGFwZUVudmVsb3BlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIs''@;'; put 'put ''Nkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTMwLjQ2LDI4SDUuNjZsNy03LjI0LTEuNDQtMS4zOUw0LDI2Ljg0VjkuNTJMMTYuNDMsMjEuODlhMiwyLDAsMCwwLDIuODIsMEwzMiw5LjIxdjE3LjVsLTcuMzYtNy4z''@;'; put 'put ''Ni0xLjQxLDEuNDFaTTUuMzEsOEgzMC4zOEwxNy44NCwyMC40N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMiwxMy4wOFYyNi43MWwtNy4zNi03LjM2LTEuNDEsMS40MUwz''@;'; put 'put ''MC40NiwyOEg1LjY2bDctNy4yNC0xLjQ0LTEuMzlMNCwyNi44NFY5LjUyTDE2LjQzLDIxLjg5YTIsMiwwLDAsMCwyLjgyLDBsOC44My04Ljc4YTcuNDQsNy40NCwwLDAsMS0yLS44NWwtOC4yNiw4LjIxTDUuMzEsOEgyMi44MWE3LjQ5LDcuNDksMCwwLDEtLjMxLTJINEEyLDIsMCwwLDAsMiw4''@;'; put 'put ''VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4yQTcuNDUsNy40NSwwLDAsMSwzMiwxMy4wOFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIg''@;'; put 'put ''Y3g9IjMwIiBjeT0iNS44NiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuMjZIMzJWMjYuNzFsLTcuMzYtNy4zNi0xLjQxLDEuNDFMMzAuNDYsMjhI''@;'; put 'put ''NS42Nmw3LTcuMjQtMS40NC0xLjM5TDQsMjYuODRWOS41MkwxNi40MywyMS44OWEyLDIsMCwwLDAsMi44MiwwbDYuNjYtNi42M0gyMy4wOGwtNS4yNCw1LjIxTDUuMzEsOEgyMC4wNmwxLjE1LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4y''@;'; put 'put ''NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDFsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4''@;'; put 'put ''LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDFBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjMzLDZhMiwyLDAsMCwwLS40MSwwaC0yOGEyLDIsMCwwLDAtLjUzLjA4TDE3''@;'; put 'put ''Ljg0LDIwLjQ3WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zMy44MSw3LjM5LDE5LjI1LDIxLjg5YTIsMiwwLDAsMS0yLjgyLDBMMiw3LjVhMiwyLDAsMCwwLS4wNy41VjI4YTIsMiwwLDAsMCwyLDJoMjhhMiwy''@;'; put 'put ''LDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMy44MSw3LjM5Wk01LjMsMjhIMy45MVYyNi41N2w3LjI3LTcuMjEsMS40MSwxLjQxWm0yNi42MSwwSDMwLjUxbC03LjI5LTcuMjMsMS40MS0xLjQxLDcuMjcsNy4yMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTI2LDEyLjM0QTcuNDksNy40OSwwLDAsMSwyMi41LDZIMy45MmEyLDIsMCwwLDAtLjUzLjA4TDE3Ljg0LDIwLjQ3WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtMi0uMjlsLTguNzEsOC42OGEyLDIsMCwwLDEtMi44MiwwTDIsNy41YTIsMiwwLDAsMC0uMDcuNVYyOGEyLDIsMCwwLDAsMiwyaDI4YTIsMiwwLDAsMCwyLTJWMTIuMzlBNy40NSw3LjQ1LDAsMCwxLDMw''@;'; put 'put ''LDEzLjVaTTUuMywyOEgzLjkxVjI2LjU3bDcuMjctNy4yMSwxLjQxLDEuNDFabTI2LjYxLDBIMzAuNTFsLTcuMjktNy4yMywxLjQxLTEuNDEsNy4yNyw3LjIxWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0z''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyNS43N2wtNi41Miw2LjQ5YTIsMiwwLDAs''@;'; put 'put ''MS0yLjgyLDBMMiw3LjVhMiwyLDAsMCwwLS4wNy41VjI4YTIsMiwwLDAsMCwyLDJoMjhhMiwyLDAsMCwwLDItMlYxNS4zOFpNNS4zLDI4SDMuOTFWMjYuNTdsNy4yNy03LjIxLDEuNDEsMS40MVptMjYuNjEsMEgzMC41MWwtNy4yOS03LjIzLDEuNDEtMS40MSw3LjI3LDcuMjFaIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTIyLjk0LDE1LjRoLS43QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMy45MmEyLDIsMCwwLDAtLjUzLjA4TDE3Ljg0LDIwLjQ3WiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQu''@;'; put 'put ''NzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxiLkNsclNoYXBlVGFza3M9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOS4yOSwzNEg2LjcxQTEuNywxLjcsMCwwLDEs''@;'; put 'put ''NSwzMi4zMVY2LjY5QTEuNzUsMS43NSwwLDAsMSw3LDVIOVY3SDdWMzJIMjlWN0gyN1Y1aDIuMjVBMS43LDEuNywwLDAsMSwzMSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDEsMjkuMjksMzRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTIiIGQ9Ik0xNi42NiwyNS43NiwxMS4zLDIwLjRBMSwxLDAsMCwxLDEyLjcyLDE5bDMuOTQsMy45NCw4LjY0LTguNjRhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MyIgZD0iTTI2LDExSDEwVjcuMzNBMi4zNCwyLjM0LDAsMCwxLDEyLjMzLDVoMS43OWE0LDQsMCwwLDEsNy43NSwwaDEuNzlBMi4zNCwyLjM0LDAsMCwxLDI2LDcuMzNaTTEyLDlIMjRWNy4zM0EuMzMuMzMsMCwwLDAsMjMuNjcsN0gyMFY2YTIsMiwwLDAsMC00LDBWN0gxMi4zM2EuMzMuMzMs''@;'; put 'put ''MCwwLDAtLjMzLjMzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTksOS44OSwxOS41Niw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEs''@;'; put 'put ''NCwwVjdoLjcxbDEuMTYtMmE0LDQsMCwwLDAtNy43NCwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExaDguNjRBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0yNC4xOSwxNS40bC03LjUzLDcuNTNMMTIuNzIsMTlBMSwxLDAsMCwwLDExLjMsMjAuNGw1LjM2LDUuMzZMMjYuNzEsMTUuNzFhMSwxLDAsMCwwLC4yLS4zMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTI5LDE1LjRWMzJIN1Y3SDlWNUg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjlWMzIuMzFBMS43LDEuNywwLDAsMCw2LjcxLDM0SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMzFWMTUuNFoiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4w''@;'; put 'put ''NiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTEyLjcyLDE5QTEsMSwwLDAsMCwxMS4zLDIwLjRsNS4zNiw1LjM2TDI2''@;'; put 'put ''LjcxLDE1LjcxYTEsMSwwLDAsMC0xLjQxLTEuNDFsLTguNjQsOC42NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0yMy4xMyw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMz''@;'; put 'put ''LDdIMTZWNmEyLDIsMCwwLDEsNCwwVjdoMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xaC0uN2E0LDQsMCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI0LjQyQTcuNSw3LjUsMCwwLDEsMjMuMTMsOVoiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zMCwxMy41YTcuNTIsNy41MiwwLDAsMS0xLS4wN1YzMkg3VjdIOVY1SDdBMS43NSwxLjc1LDAsMCwwLDUsNi42OVYzMi4zMUExLjcsMS43LDAsMCww''@;'; put 'put ''LDYuNzEsMzRIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4zMVYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRn''@;'; put 'put ''ZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOS4yOSw0Ljk1aC03LjJhNC4zMSw0LjMxLDAsMCwwLTguMTcsMEg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjRWMzIuMjZhMS43''@;'; put 'put ''LDEuNywwLDAsMCwxLjcxLDEuNjlIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4yNlY2LjY0QTEuNywxLjcsMCwwLDAsMjkuMjksNC45NVptLTE4LDNhMSwxLDAsMCwxLDEtMWgzLjQ0VjYuMzJhMi4zMSwyLjMxLDAsMCwxLDQuNjMsMFY3aDMuNDRhMSwxLDAsMCwxLDEsMVY5LjhIMTEuMjVa''@;'; put 'put ''bTE0LjUyLDkuMjMtOS4xMiw5LjEyLTUuMjQtNS4yNGExLjQsMS40LDAsMCwxLDItMmwzLjI2LDMuMjYsNy4xNC03LjE0YTEuNCwxLjQsMCwxLDEsMiwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFs''@;'; put 'put ''ZXJ0ZWQiIGQ9Ik0yNS44OCwxNS40YTEuMzgsMS4zOCwwLDAsMS0uMTEsMS44MWwtOS4xMiw5LjEyLTUuMjQtNS4yNGExLjQsMS40LDAsMCwxLDItMmwzLjI2LDMuMjYsNy03SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDAtLjA5SDExLjI1VjhhMSwxLDAsMCwxLDEtMWgzLjQ0VjYu''@;'; put 'put ''MzJhMi4zMSwyLjMxLDAsMCwxLDQuNjMsMFY3aC40MkwyMiw0Ljc2YTQuMyw0LjMsMCwwLDAtOC4wOS4xOUg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjRWMzIuMjZhMS43LDEuNywwLDAsMCwxLjcxLDEuNjlIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4yNlYxNS40WiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjku''@;'; put 'put ''MDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTMwLDEzLjVhNy40OSw3LjQ5LDAsMCwxLTYuNDYtMy43SDExLjI1VjhhMSwx''@;'; put 'put ''LDAsMCwxLDEtMWgzLjQ0VjYuMzJhMi4zMSwyLjMxLDAsMCwxLDQuNjMsMFY3aDIuMjZhNy41Myw3LjUzLDAsMCwxLS4wNy0xLDcuNTMsNy41MywwLDAsMSwuMDgtMS4wNWgtLjVhNC4zMSw0LjMxLDAsMCwwLTguMTcsMEg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjRWMzIuMjZhMS43LDEuNyww''@;'; put 'put ''LDAsMCwxLjcxLDEuNjlIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4yNlYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVptLTQuMjMsMy43MS05LjEyLDkuMTItNS4yNC01LjI0YTEuNCwxLjQsMCwwLDEsMi0ybDMuMjYsMy4yNiw3LjE0LTcuMTRhMS40LDEuNCwwLDEsMSwyLDJaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLGIuQ2xyU2hhcGVGbGFnPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNNiwzNGExLDEsMCwwLDEtMS0xVjNBMSwxLDAsMCwxLDcsM1YzM0ExLDEsMCwwLDEsNiwzNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0i''@;'; put 'put ''TTMwLjU1LDMuODJhMSwxLDAsMCwwLTEsMCwxNC45LDE0LjksMCwwLDEtNi4xMywxLjE2LDEzLjExLDEzLjExLDAsMCwxLTUuMTgtMS40OSwxMi43OCwxMi43OCwwLDAsMC01LTEuNDVBMTAuODYsMTAuODYsMCwwLDAsOSwyLjg1VjUuMDhBOC44LDguOCwwLDAsMSwxMy4yNSw0YTExLjIyLDEx''@;'; put 'put ''LjIyLDAsMCwxLDQuMiwxLjI4LDE0Ljg0LDE0Ljg0LDAsMCwwLDYsMS42NkExOC43NSwxOC43NSwwLDAsMCwyOSw2LjEyVjE4Ljk1YTE2LjE2LDE2LjE2LDAsMCwxLTUuNTguOTMsMTMuMTEsMTMuMTEsMCwwLDEtNS4xOC0xLjQ5LDEyLjc4LDEyLjc4LDAsMCwwLTUtMS40NUExMC44NiwxMC44''@;'; put 'put ''NiwwLDAsMCw5LDE3Ljc5VjIwYTguOCw4LjgsMCwwLDEsNC4yNS0xLjA4LDExLjIyLDExLjIyLDAsMCwxLDQuMiwxLjI4LDE0Ljg0LDE0Ljg0LDAsMCwwLDYsMS42NiwxNi43OSwxNi43OSwwLDAsMCw3LTEuMzcsMSwxLDAsMCwwLC41NS0uODlWNC42N0ExLDEsMCwwLDAsMzAuNTUsMy44Mloi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNNS45MiwyYTEsMSwwLDAsMC0xLDFWMzNhMSwxLDAsMCwwLDIsMFYzQTEsMSwwLDAsMCw1LjkyLDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMwLjUsMy44MmExLDEsMCwwLDAtMSwwLDE0LjksMTQuOSwwLDAsMS02LjEzLDEuMTYsMTMuMTEsMTMuMTEsMCwwLDEtNS4xOC0xLjQ5QTEyLjc4LDEyLjc4LDAsMCwwLDEzLjIsMiwxMC44NiwxMC44NiwwLDAsMCw5LDIuODVWMjBhOC44''@;'; put 'put ''LDguOCwwLDAsMSw0LjI1LTEuMDgsMTEuMjIsMTEuMjIsMCwwLDEsNC4yLDEuMjgsMTQuODQsMTQuODQsMCwwLDAsNiwxLjY2LDE2Ljc5LDE2Ljc5LDAsMCwwLDctMS4zNywxLDEsMCwwLDAsLjU1LS44OVY0LjY3QTEsMSwwLDAsMCwzMC41LDMuODJaIi8+JyksYi5DbHJTaGFwZUluYm94PSgw''@;'; put 'put ''LHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMi4yMywxMy4wOWExLDEsMCwwLDAsMCwxLjQxTDE4LDIwLjNsNS43OS01Ljc5YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTksMTYuNDdWMkExLDEsMCwwLDAsMTgsMWExLDEsMCwwLDAtMSwxdjE0LjVsLTMuMzgtMy4zOEExLDEsMCwwLDAsMTIuMjMs''@;'; put 'put ''MTMuMDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjUsNUgyMlY3aDdWMjFIMjMuNjFsLS4xLjg5YTUuNDIsNS40MiwwLDAsMS0xMC43NywwbC0uMS0uODlIN1Y3aDdWNUg2LjVBMS41LDEuNSwwLDAsMCw1''@;'; put 'put ''LDYuNXYyNUExLjUsMS41LDAsMCwwLDYuNSwzM2gyM0ExLjUsMS41LDAsMCwwLDMxLDMxLjVWNi41QTEuNSwxLjUsMCwwLDAsMjkuNSw1Wk0yOSwzMUg3VjIzaDMuOTFhNy40Miw3LjQyLDAsMCwwLDE0LjQ0LDBIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEyLjIzLDEzLjA5YTEsMSwwLDAsMCwwLDEuNDFMMTgsMjAuM2w1Ljc5LTUuNzlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOSwxNi40N1YyQTEsMSwwLDAsMCwxOCwxYTEsMSwwLDAsMC0xLDF2MTQuNWwtMy4zOC0zLjM4QTEsMSwwLDAsMCwxMi4y''@;'; put 'put ''MywxMy4wOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVhNy41Miw3LjUyLDAsMCwxLTEtLjA3VjIxSDIzLjYxbC0uMS44OWE1LjQyLDUuNDIsMCwwLDEtMTAuNzcsMGwt''@;'; put 'put ''LjEtLjg5SDdWN2g3VjVINi41QTEuNSwxLjUsMCwwLDAsNSw2LjV2MjVBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41VjEzLjQzQTcuNTIsNy41MiwwLDAsMSwzMCwxMy41Wk0yOSwzMUg3VjIzaDMuOTFhNy40Miw3LjQyLDAsMCwwLDE0LjQ0LDBIMjlaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LWJhZGdlIi8+JyksYi5DbHJTaGFwZUhlYXJ0PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwzMi40M2ExLDEsMCwwLDEtLjYxLS4yMUMxMS44MywyNy45LDgsMjQuMTgsNS4zMiwyMC41MSwxLjksMTUuODIsMS4xMiwxMS40OSwzLDcuNjRjMS4zNC0yLjc1LDUuMTktNSw5LjY5LTMu''@;'; put 'put ''NjlBOS44Nyw5Ljg3LDAsMCwxLDE4LDcuNzJhOS44Nyw5Ljg3LDAsMCwxLDUuMzEtMy43N2M0LjQ5LTEuMjksOC4zNS45NCw5LjY5LDMuNjksMS44OCwzLjg1LDEuMSw4LjE4LTIuMzIsMTIuODdDMjgsMjQuMTgsMjQuMTcsMjcuOSwxOC42MSwzMi4yMkExLDEsMCwwLDEsMTgsMzIuNDNaTTEw''@;'; put 'put ''LjEzLDUuNThBNS45LDUuOSwwLDAsMCw0LjgsOC41MWMtMS41NSwzLjE4LS44NSw2LjcyLDIuMTQsMTAuODFBNTcuMTMsNTcuMTMsMCwwLDAsMTgsMzAuMTYsNTcuMTMsNTcuMTMsMCwwLDAsMjkuMDYsMTkuMzNjMy00LjEsMy42OS03LjY0LDIuMTQtMTAuODEtMS0yLTQtMy41OS03LjM0LTIu''@;'; put 'put ''NjVhOCw4LDAsMCwwLTQuOTQsNC4yLDEsMSwwLDAsMS0xLjg1LDAsNy45Myw3LjkzLDAsMCwwLTQuOTQtNC4yQTcuMzEsNy4zMSwwLDAsMCwxMC4xMyw1LjU4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMyw3''@;'; put 'put ''LjY0Yy0xLjM0LTIuNzUtNS4yLTUtOS42OS0zLjY5QTkuODcsOS44NywwLDAsMCwxOCw3LjcyYTkuODcsOS44NywwLDAsMC01LjMxLTMuNzdDOC4xOSwyLjY2LDQuMzQsNC44OSwzLDcuNjRjLTEuODgsMy44NS0xLjEsOC4xOCwyLjMyLDEyLjg3QzgsMjQuMTgsMTEuODMsMjcuOSwxNy4zOSwz''@;'; put 'put ''Mi4yMmExLDEsMCwwLDAsMS4yMywwYzUuNTUtNC4zMSw5LjM5LTgsMTIuMDctMTEuNzFDMzQuMSwxNS44MiwzNC44OCwxMS40OSwzMyw3LjY0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGIuQ2xyU2hhcGVIZWFydEJyb2tlbj0oMCxwLmNsckljb25TVkcp''@;'; put 'put ''KCc8cGF0aCBkPSJNMzMsNy42NGMtMS4zNC0yLjc1LTUuMDktNS05LjY5LTMuNjlhOS44Nyw5Ljg3LDAsMCwwLTYsNC44NCwxOC45LDE4LjksMCwwLDAtMi4yMyw1LjMzbDUuMjgsMi4zNC00LjYsNC4zNywzLjQ5LDQuMSwxLjUyLTEuM0wxOC41NCwyMWw1LjQtNS4xM0wxNy41OCwxM0ExNi4y''@;'; put 'put ''MywxNi4yMywwLDAsMSwxOS43NSw4LjlhNy42OCw3LjY4LDAsMCwxLDQuMTEtM2MzLjM0LS44OSw2LjM0LjYsNy4zNCwyLjY1LDEuNTUsMy4xOC44NSw2LjcyLTIuMTQsMTAuODFBNTcuMTYsNTcuMTYsMCwwLDEsMTgsMzAuMTYsNTcuMTYsNTcuMTYsMCwwLDEsNi45NCwxOS4zM2MtMy00LjEt''@;'; put 'put ''My42OS03LjY0LTIuMTQtMTAuODFhNS45LDUuOSwwLDAsMSw1LjMzLTIuOTMsNy4zMSw3LjMxLDAsMCwxLDIsLjI5LDcuNyw3LjcsMCwwLDEsMy4zOCwybC4xNS0uM2ExMC42NiwxMC42NiwwLDAsMSwxLTEuNDEsOS42NCw5LjY0LDAsMCwwLTMuOTQtMi4yMkM4LjIsMi42Niw0LjM0LDQuODks''@;'; put 'put ''Myw3LjY0Yy0xLjg4LDMuODUtMS4xLDguMTgsMi4zMiwxMi44N0M4LDI0LjE4LDExLjgzLDI3LjksMTcuMzksMzIuMjJhMSwxLDAsMCwwLDEuMjMsMGM1LjU1LTQuMzEsOS4zOS04LDEyLjA3LTExLjcxQzM0LjEsMTUuODIsMzQuODgsMTEuNDksMzMsNy42NFoiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsNy42NGMtMS4zNC0yLjc1LTUuMi01LTkuNjktMy42OUExMS41NSwxMS41NSwwLDAsMCwxOC4xOSw3LjVhMTYuODksMTYuODksMCwwLDAtMi40OCw0LjU2TDIyLjI3LDE1LDE2LjcsMjAuMjYsMTks''@;'; put 'put ''MjNsLTEuNTcsMS4zNC0zLjYtNC4yMiw0Ljc0LTQuNTEtNS40NC0yLjQxYTE5LjQ5LDE5LjQ5LDAsMCwxLDIuMy01LjUsMTQuNzcsMTQuNzcsMCwwLDEsMS4wNi0xLjU0bC4wNiwwYTkuNjYsOS42NiwwLDAsMC0zLjg5LTIuMThDOC4xOSwyLjY2LDQuMzQsNC44OSwzLDcuNjRjLTEuODgsMy44''@;'; put 'put ''NS0xLjEsOC4xOCwyLjMyLDEyLjg3QzgsMjQuMTgsMTEuODMsMjcuOSwxNy4zOSwzMi4yMmExLDEsMCwwLDAsMS4yMywwYzUuNTUtNC4zMSw5LjM5LTgsMTIuMDctMTEuNzFDMzQuMSwxNS44MiwzNC44OCwxMS40OSwzMyw3LjY0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMSIvPicpLGIuQ2xyU2hhcGVUYWxrQnViYmxlcz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMsMjZhMSwxLDAsMCwxLTEsMUg4Yy0uMjIsMC0uNDMuMi0uNjEuMzNMNCwzMFYxNGExLDEsMCwwLDEsMS0xSDguODZWMTFINWEzLDMsMCwwLDAtMywzVjMyYTEsMSwwLDAsMCwuNTYu''@;'; put 'put ''ODksMSwxLDAsMCwwLDEtLjFMOC43MSwyOUgyMi4xNUEyLjc3LDIuNzcsMCwwLDAsMjUsMjYuMTNWMjVIMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDRIMTRhMywzLDAsMCwwLTMsM1YxOWEzLDMsMCww''@;'; put 'put ''LDAsMywzSDI3LjU1bDQuNzgsMy43MWExLDEsMCwwLDAsMSwuMTEsMSwxLDAsMCwwLC41Ny0uOVY3QTMsMywwLDAsMCwzMSw0Wk0zMiwyMi45NCwyOC41LDIwLjIxYTEsMSwwLDAsMC0uNjEtLjIxSDE0YTEsMSwwLDAsMS0xLTFWN2ExLDEsMCwwLDEsMS0xSDMxQTEuMSwxLjEsMCwwLDEsMzIs''@;'; put 'put ''Ny4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMsMjZhMSwxLDAsMCwxLTEsMUg4Yy0uMjIsMC0uNDMuMi0uNjEuMzNMNCwzMFYxNGExLDEsMCwwLDEsMS0xSDguODZWMTFINWEzLDMsMCwwLDAtMywzVjMy''@;'; put 'put ''YTEsMSwwLDAsMCwuNTYuODksMSwxLDAsMCwwLDEtLjFMOC43MSwyOUgyMi4xNUEyLjc3LDIuNzcsMCwwLDAsMjUsMjYuMTNWMjVIMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0z''@;'; put 'put ''MiwxMy4yMnY5LjcyTDI4LjUsMjAuMjFhMSwxLDAsMCwwLS42MS0uMjFIMTRhMSwxLDAsMCwxLTEtMVY3YTEsMSwwLDAsMSwxLTFIMjIuNWE3LjQ5LDcuNDksMCwwLDEsLjI4LTJIMTRhMywzLDAsMCwwLTMsM1YxOWEzLDMsMCwwLDAsMywzSDI3LjU1bDQuNzgsMy43MWExLDEsMCwwLDAsMSwu''@;'; put 'put ''MTEsMSwxLDAsMCwwLC41Ny0uOVYxMi4zN0E3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOCwxOVYxMUg1YTMsMywwLDAsMC0zLDNWMzJhMSwxLDAsMCwwLC41Ni44OSwxLDEsMCwwLDAsMS0uMUw4LjcxLDI5SDIyLjE1QTIuNzcs''@;'; put 'put ''Mi43NywwLDAsMCwyNSwyNi4xM1YyNUgxNEE2LDYsMCwwLDEsOCwxOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSw0SDE0YTMsMywwLDAsMC0zLDNWMTlhMywzLDAsMCwwLDMsM0gyNy41NWw0Ljc4LDMuNzFhMSwx''@;'; put 'put ''LDAsMCwwLDEsLjExLDEsMSwwLDAsMCwuNTctLjlWN0EzLDMsMCwwLDAsMzEsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LDE5VjExSDVhMywzLDAsMCwwLTMsM1YzMmExLDEsMCwwLDAsLjU2Ljg5LDEsMSwwLDAs''@;'; put 'put ''MCwxLS4xTDguNzEsMjlIMjIuMTVBMi43NywyLjc3LDAsMCwwLDI1LDI2LjEzVjI1SDE0QTYsNiwwLDAsMSw4LDE5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNDgsNy40''@;'; put 'put ''OCwwLDAsMSwyMi43OCw0SDE0YTMsMywwLDAsMC0zLDNWMTlhMywzLDAsMCwwLDMsM0gyNy41NWw0Ljc4LDMuNzFhMSwxLDAsMCwwLDEsLjExLDEsMSwwLDAsMCwuNTctLjlWMTIuMzdBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLGIuQ2xyU2hhcGVDaGF0QnViYmxlPSgwLHAuY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyLjVjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTgsMTgsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjU0LS44NGwwLTYuNzNhMTMsMTMsMCwwLDAsNC05LjI3QzM0LDguNzgsMjYuODIsMi41LDE4LDIuNVpN''@;'; put 'put ''MjguMjksMjQuNjFhMSwxLDAsMCwwLS4zMi43M2wwLDUuMzQtNC4zOC0yLjc5YTEsMSwwLDAsMC0uODMtLjExQTE2LDE2LDAsMCwxLDE4LDI4LjVjLTcuNzIsMC0xNC01LjM4LTE0LTEyczYuMjgtMTIsMTQtMTIsMTQsNS4zOCwxNCwxMkExMS4wOCwxMS4wOCwwLDAsMSwyOC4yOSwyNC42MVoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDE1LjVIMTFhMSwxLDAsMCwwLDAsMkgyNWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMjEuNzUsMjAuNWgtNy41YTEsMSwwLDAsMCwwLDJoNy41YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS4yOCwxMi41SDI0LjcyYTEsMSwwLDAsMCww''@;'; put 'put ''LTJIMTEuMjhhMSwxLDAsMCwwLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjM4LDEyLjY5YTcuNDMsNy40MywwLDAsMS0xLjg5LjY2QTEwLjM1LDEwLjM1LDAsMCwxLDMyLDE2LjVhMTEuMDgsMTEu''@;'; put 'put ''MDgsMCwwLDEtMy43MSw4LjExLDEsMSwwLDAsMC0uMzIuNzNsMCw1LjM0LTQuMzgtMi43OWExLDEsMCwwLDAtLjgzLS4xMUExNiwxNiwwLDAsMSwxOCwyOC41Yy03LjcyLDAtMTQtNS4zOC0xNC0xMnM2LjI4LTEyLDE0LTEyYTE2LDE2LDAsMCwxLDQuNTUuNjZBNy40NCw3LjQ0LDAsMCwxLDIz''@;'; put 'put ''LDMuMjJhMTgsMTgsMCwwLDAtNS0uNzJjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTgsMTgsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjU0LS44NGwwLTYuNzNhMTMsMTMsMCwwLDAsNC05LjI3QTEyLjMyLDEyLjMyLDAsMCwwLDMzLjM4LDEyLjY5''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLDE1LjVhMSwxLDAsMCwwLDAsMkgyNWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjI1LDIwLjVhMSwxLDAsMCwwLDAsMmg3LjVhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0xMC4yOCwxMS41YTEsMSwwLDAsMCwxLDFIMjQuNzJhMSwxLDAsMCwwLC44My0uNDdBNy41Myw3LjUzLDAsMCwxLDI0LDEwLjVIMTEuMjhBMSwxLDAsMCwwLDEwLjI4LDExLjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00''@;'; put 'put ''LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMi41Yy04Ljgy''@;'; put 'put ''LDAtMTYsNi4yOC0xNiwxNHM3LjE4LDE0LDE2LDE0YTE4LDE4LDAsMCwwLDQuODgtLjY4bDUuNTMsMy41MmExLDEsMCwwLDAsMS41NC0uODRsMC02LjczYTEzLDEzLDAsMCwwLDQtOS4yN0MzNCw4Ljc4LDI2LjgyLDIuNSwxOCwyLjVabTgsMTRhMSwxLDAsMCwxLTEsMUgxMWExLDEsMCwwLDEs''@;'; put 'put ''MC0ySDI1QTEsMSwwLDAsMSwyNiwxNi41Wm0tMy4yNSw1YTEsMSwwLDAsMS0xLDFoLTcuNWExLDEsMCwwLDEsMC0yaDcuNUExLDEsMCwwLDEsMjIuNzUsMjEuNVptLTEyLjQ3LTEwYTEsMSwwLDAsMSwxLTFIMjQuNzJhMSwxLDAsMCwxLDAsMkgxMS4yOEExLDEsMCwwLDEsMTAuMjgsMTEuNVoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuMjVhNy40Niw3LjQ2LDAsMCwxLTQuMzUtMS40LDEsMSwwLDAsMS0uOTMuNjVIMTEuMjhhMSwxLDAsMCwxLDAtMkgyNC4yQTcuNDYsNy40NiwwLDAsMSwyMywzLjJh''@;'; put 'put ''MTgsMTgsMCwwLDAtNS0uN2MtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjcsMTIuMzQsMTIuMzQsMCwwLDAtLjY4LTRBNy40Niw3LjQ2LDAs''@;'; put 'put ''MCwxLDMwLDEzLjI1Wk0yMS43NSwyMi41aC03LjVhMSwxLDAsMCwxLDAtMmg3LjVhMSwxLDAsMCwxLDAsMlptMy4yNS01SDExYTEsMSwwLDAsMSwwLTJIMjVhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI1Ljc1IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksYi5DbHJTaGFwZVBpY3R1cmU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMy''@;'; put 'put ''LDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk00LDMwVjZIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguOTIsMTRhMywz''@;'; put 'put ''LDAsMSwwLTMtM0EzLDMsMCwwLDAsOC45MiwxNFptMC00LjZBMS42LDEuNiwwLDEsMSw3LjMzLDExLDEuNiwxLjYsMCwwLDEsOC45Miw5LjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi43OCwxNS4zN2wt''@;'; put 'put ''NS40LDUuNC00LTRhMSwxLDAsMCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MUExLDEsMCwwLDAsMjIuNzgsMTUuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjkzLDExYTMsMywwLDEsMC0zLDNBMywzLDAsMCwwLDExLjkzLDExWm0tNC42LDBhMS42LDEuNiwwLDEsMSwxLjYsMS42QTEuNiwxLjYsMCwwLDEsNy4zMywxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjM4LDIwLjc3bC00LTRhMSwxLDAsMCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44''@;'; put 'put ''MWExLDEsMCwwLDAtMS40MSwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMzBINFY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDRBMiwyLDAsMCwwLDIsNlYz''@;'; put 'put ''MGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9''@;'; put 'put ''IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAs''@;'; put 'put ''MCwzMiw0Wk04LjkyLDhhMywzLDAsMSwxLTMsM0EzLDMsMCwwLDEsOC45Miw4Wk02LDI3VjIyLjlsNi02LjA4YTEsMSwwLDAsMSwxLjQxLDBMMTYsMTkuMzUsOC4zMiwyN1ptMjQsMEgxMS4xNWw2LjIzLTYuMjMsNS40LTUuNGExLDEsMCwwLDEsMS40MSwwTDMwLDIxLjE4WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40OCw3LjQ4LDAsMCwxLDIyLjc4LDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMu''@;'; put 'put ''NVpNOC45Miw4YTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDguOTIsOFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+JyksYi5DbHJTaGFw''@;'; put 'put ''ZUhhcHB5RmFjZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEwLjg5IiBjeT0iMTMuODkiIHI9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNS4wNSIgY3k9IjEzLjg5IiByPSIyIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjEzLDI4LjIxYTguNjcsOC42NywwLDAsMCw4LjI2LTZIOS44N0E4LjY3LDguNjcsMCwwLDAsMTguMTMsMjguMjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNOC44OSwxMy44OWEyLDIsMCwxLDEsMiwyQTIsMiwwLDAsMSw4Ljg5LDEzLjg5Wm05LjI0LDE0LjMyYTguNjcsOC42NywwLDAsMS04LjI2LTZIMjYuMzhBOC42Nyw4LjY3LDAsMCwx''@;'; put 'put ''LDE4LjEzLDI4LjIxWm02LjkzLTEyLjMyYTIsMiwwLDEsMSwyLTJBMiwyLDAsMCwxLDI1LjA1LDE1Ljg5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGIuQ2xyU2hhcGVOZXV0cmFsRmFjZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuMDUsMjIu''@;'; put 'put ''MDZoLTEyYTEsMSwwLDAsMCwwLDJoMTJhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwx''@;'; put 'put ''LDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI1LjE2IiBjeT0iMTQuMjgiIHI9IjEuOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjExLjE2IiBjeT0iMTQuMjgiIHI9IjEuOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTcu''@;'; put 'put ''MDUsMjEuMDZhMSwxLDAsMCwxLTEsMWgtMTJhMSwxLDAsMCwxLDAtMmgxMkExLDEsMCwwLDEsMjUuMDUsMjMuMDZaTTI3LDE0LjI4YTEuOCwxLjgsMCwxLDEtMS44LTEuOEExLjgsMS44LDAsMCwxLDI3LDE0LjI4Wm0tMTUuOCwxLjhhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCww''@;'; put 'put ''LDEsMTEuMTYsMTYuMDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksYi5DbHJTaGFwZVNhZEZhY2U9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwz''@;'; put 'put ''MiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNS4xNiIgY3k9IjE0LjI4IiByPSIxLjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMS40MSIgY3k9IjE0LjI4IiByPSIxLjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMTYsMjBhOSw5LDAsMCwwLTcuMzMsMy43OCwxLDEsMCwxLDAsMS42Mywx''@;'; put 'put ''LjE2LDcsNywwLDAsMSwxMS4zMS0uMTMsMSwxLDAsMCwwLDEuNi0xLjJBOSw5LDAsMCwwLDE4LjE2LDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCww''@;'; put 'put ''LDE4LDJabTksMTIuMjhhMS44LDEuOCwwLDEsMS0xLjgtMS44QTEuOCwxLjgsMCwwLDEsMjcsMTQuMjhabS0xNS41NSwxLjhhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTEuNDEsMTYuMDhabTE0LDcuNTNhMSwxLDAsMCwxLTEuNiwxLjIsNyw3LDAsMCwwLTExLjMxLjEz''@;'; put 'put ''LDEsMSwwLDEsMS0xLjYzLTEuMTYsOSw5LDAsMCwxLDE0LjU0LS4xN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxiLkNsclNoYXBlVGh1bWJzVXA9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LDI2Yy0yLjkyLDEuODItNy4zLDQtOS4zNyw0aC02''@;'; put 'put ''YTE2LjY4LDE2LjY4LDAsMCwxLTMuMzEtNi4wOEEyNi43MSwyNi43MSwwLDAsMSw0LDE2aDlWNmEyLjA1LDIuMDUsMCwwLDEsMS4yNi0xLjY5Yy43NywyLDIuNjIsNi41Nyw0LjIzLDguNzJBMTEuMzksMTEuMzksMCwwLDAsMjQsMTYuOTFWMTQuNzhhOS4xMyw5LjEzLDAsMCwxLTMuOTEtM2Mt''@;'; put 'put ''MS44OC0yLjUxLTQuMjktOS4xMS00LjMxLTkuMTdBMSwxLDAsMCwwLDE0LjU5LDJDMTMuMjUsMi4zOCwxMSwzLjYsMTEsNnY4SDNhMSwxLDAsMCwwLTEsMSwyOSwyOSwwLDAsMCwxLjQsOS42MmMxLjg5LDUuNCw0LjEsNy4xNCw0LjIsNy4yMmExLDEsMCwwLDAsLjYxLjIxaDYuNDJjMi40Myww''@;'; put 'put ''LDYuNTUtMiw5LjM3LTMuNjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNCwzMUgyN2ExLDEsMCwwLDEtMS0xVjE0YTEsMSwwLDAsMSwxLTFoN1ptLTYtMmg0VjE1SDI4WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuNjMsMTIuMTJDMTcuNTEsOS4yOCwxNC44OCwyLDE0Ljg4LDJTMTIsMi44MywxMiw1LjI1VjE1SDIuMjNhMjkuNDYsMjkuNDYsMCwwLDAsMS40NCw5Ljc0QzUuNjEsMzAuMjcsNy44LDMyLDcuOCwz''@;'; put 'put ''Mmg2Ljg2QzE2LjksMzIsMjEsMzAuMDYsMjQsMjguMzFWMTUuNTFBMTAuODQsMTAuODQsMCwwLDEsMTkuNjMsMTIuMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LDEzYTEsMSwwLDAsMC0xLDFWMzBhMSwxLDAs''@;'; put 'put ''MCwwLDEsMWg3VjEzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlVGh1bWJzRG93bj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTIsMTBjMi45Mi0xLjgyLDcuMy00LDkuMzctNGg2YTE2LjY4LDE2LjY4LDAsMCwxLDMuMzEsNi4w''@;'; put 'put ''OEEyNi43MSwyNi43MSwwLDAsMSwzMiwyMEgyM1YzMGEyLjA1LDIuMDUsMCwwLDEtMS4yNiwxLjY5Yy0uNzctMi0yLjYyLTYuNTctNC4yMy04LjcyQTExLjM5LDExLjM5LDAsMCwwLDEyLDE5LjA5djIuMTNhOS4xMyw5LjEzLDAsMCwxLDMuOTEsM2MxLjg4LDIuNTEsNC4yOSw5LjExLDQuMzEs''@;'; put 'put ''OS4xN2ExLDEsMCwwLDAsMS4xOS42M0MyMi43NSwzMy42MiwyNSwzMi40LDI1LDMwVjIyaDhhMSwxLDAsMCwwLDEtMSwyOSwyOSwwLDAsMC0xLjQtOS42MmMtMS44OS01LjQtNC4xLTcuMTQtNC4yLTcuMjJBMSwxLDAsMCwwLDI3Ljc5LDRIMjEuMzdDMTguOTQsNCwxNC44Myw2LDEyLDcuNjNa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yLDVIOWExLDEsMCwwLDEsMSwxVjIyYTEsMSwwLDAsMS0xLDFIMlpNOCw3SDRWMjFIOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE2LjM3LDIzLjg0YzIuMTIsMi44NCw0Ljc2LDEwLjA3LDQuNzYsMTAuMDdTMjQsMzMuMTMsMjQsMzAuNzFWMjFoOS43N2EyOS40NiwyOS40NiwwLDAsMC0xLjQ0LTkuNzRDMzAuMzksNS42OCwyOC4yLDQsMjguMiw0SDIxLjM1QzE5LjEsNCwx''@;'; put 'put ''NSw1LjksMTIsNy42NXYxMi44QTEwLjg0LDEwLjg0LDAsMCwxLDE2LjM3LDIzLjg0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik05LDIzYTEsMSwwLDAsMCwxLTFWNkExLDEsMCwwLDAsOSw1SDJWMjNaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGIuQ2xyU2hhcGVDcm93bj0oMCxwLmNsckljb25TVkcpKCdcbiAgPHBhdGggZD0iTTQsMTMuMzNBMS4zOSwxLjM5LDAsMSwwLDIuNiwxNC43MiwxLjM5LDEuMzksMCwwLDAsNCwxMy4zM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0zMS44MSwxNS44NGEyMC4zNSwyMC4zNSwwLDAsMC00LjU4LDEuNDMsMjIuNywyMi43LDAsMCwwLTMuNDgsMi4xQTE3LjY5LDE3LjY5LDAsMCwxLDIyLDE2LjU3YTQ3LjY1LDQ3LjY1LDAsMCwxLTIuOC03LjY5LDEsMSwwLDAs''@;'; put 'put ''MC0xLS43NCwxLDEsMCwwLDAtMSwuNzQsNDYuNzEsNDYuNzEsMCwwLDEtMi44LDcuNjksMTcsMTcsMCwwLDEtMS43NiwyLjgsMjIuNywyMi43LDAsMCwwLTMuNDgtMi4xLDIwLjY2LDIwLjY2LDAsMCwwLTQuNTgtMS40MywxLDEsMCwwLDAtMSwuMzksMSwxLDAsMCwwLS4wOSwxLjA1QTUwLjEz''@;'; put 'put ''LDUwLjEzLDAsMCwxLDcuODIsMzEuMTdhMSwxLDAsMCwwLDEsLjgzSDI3LjYyYTEsMSwwLDAsMCwxLS44Myw1MC4xNSw1MC4xNSwwLDAsMSw0LjI2LTEzLjg5LDEsMSwwLDAsMC0uMDktMS4wNUExLDEsMCwwLDAsMzEuODEsMTUuODRaTTI2Ljc5LDMwSDkuNjRhNTUuNjYsNTUuNjYsMCwwLDAt''@;'; put 'put ''My40LTExLjcxLDE1Ljc1LDE1Ljc1LDAsMCwxLDIuMDkuNzgsMjAsMjAsMCwwLDEsMy44NSwyLjQ1LDEsMSwwLDAsMCwxLjM5LS4wOSwxOS4yOCwxOS4yOCwwLDAsMCwyLjY3LTQsNDMuNDYsNDMuNDYsMCwwLDAsMi00Ljg5LDQxLjc0LDQxLjc0LDAsMCwwLDIsNC44OSwxOS45MiwxOS45Miww''@;'; put 'put ''LDAsMCwyLjY2LDQsMSwxLDAsMCwwLDEuNC4wOSwxOS4yMSwxOS4yMSwwLDAsMSwzLjg1LTIuNDUsMTQuNzcsMTQuNzcsMCwwLDEsMi4wOS0uNzhBNTUuMDcsNTUuMDcsMCwwLDAsMjYuNzksMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8ZWxs''@;'; put 'put ''aXBzZSBjeD0iMzMuODMiIGN5PSIxMy4zMyIgcng9IjEuMzkiIHJ5PSIxLjM5IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMTguMjIsNi4zOUExLjM5LDEuMzksMCwxLDAsMTYuODQsNSwxLjM5LDEuMzksMCwwLDAsMTguMjIsNi4z''@;'; put 'put ''OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xOC4yMywyNi4zNGExLjExLDEuMTEsMCwxLDAsMS4xLDEuMUExLjEsMS4xLDAsMCwwLDE4LjIzLDI2LjM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTUiLz5cbiAgPHBhdGggZD0iTTEyLjU4LDI2LjM0YTEuMTEsMS4xMSwwLDEsMCwxLjEsMS4xQTEuMSwxLjEsMCwwLDAsMTIuNTgsMjYuMzRaIi8+PHBhdGggZD0iTTIzLjg5LDI2LjM0YTEuMTEsMS4xMSwwLDEsMCwxLjEsMS4xQTEuMSwxLjEsMCwwLDAsMjMuODksMjYuMzRaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPlxuXG4gIDxwYXRoIGQ9Ik0yLjYsMTEuOTNBMS40LDEuNCwwLDEsMCw0LDEzLjMzLDEuNCwxLjQsMCwwLDAsMi42LDExLjkzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8ZWxsaXBzZSBj''@;'; put 'put ''eD0iMzMuODMiIGN5PSIxMy4zMyIgcng9IjEuMzkiIHJ5PSIxLjM5IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xOC4yMiw2LjM5QTEuMzksMS4zOSwwLDEsMCwxNi44NCw1LDEuMzksMS4zOSwwLDAsMCwxOC4yMiw2LjM5WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMzEuNjMsMTYuMUExOC42MSwxOC42MSwwLDAsMCwyOCwxNy4zNGEyMS41NywyMS41NywwLDAsMC00LDIuNDksMTkuMiwxOS4yLDAsMCwxLTIuMjYtMy40OSw0OC45Miw0OC45MiwwLDAsMS0yLjUyLTYuNTgs''@;'; put 'put ''MSwxLDAsMCwwLTEtLjcxaDBhMSwxLDAsMCwwLTEsLjcxLDQ4LjQyLDQ4LjQyLDAsMCwxLTIuNTIsNi41OCwxOC42OSwxOC42OSwwLDAsMS0yLjI2LDMuNDgsMjIuODEsMjIuODEsMCwwLDAtNC0yLjQ4QTE4LjgzLDE4LjgzLDAsMCwwLDQuOSwxNi4xYTEsMSwwLDAsMC0xLC4zMywxLDEsMCww''@;'; put 'put ''LDAtLjEzLDEuMDcsNTUuOSw1NS45LDAsMCwxLDQsMTMuNSwxLDEsMCwwLDAsMSwuODNoMTlhMSwxLDAsMCwwLDEtLjgzLDU1LjksNTUuOSwwLDAsMSw0LTEzLjUsMSwxLDAsMCwwLS4xMy0xLjA3QTEsMSwwLDAsMCwzMS42MywxNi4xWk0xMS4wOCwyOC41NWExLjExLDEuMTEsMCwxLDEsMS4x''@;'; put 'put ''LTEuMTFBMS4xMSwxLjExLDAsMCwxLDExLjA4LDI4LjU1Wm03LjE1LDBhMS4xMSwxLjExLDAsMCwxLDAtMi4yMSwxLjExLDEuMTEsMCwwLDEsMCwyLjIxWm03LjE2LDBhMS4xMSwxLjExLDAsMSwxLDEuMS0xLjExQTEuMTEsMS4xMSwwLDAsMSwyNS4zOSwyOC41NVoiIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiLz5cbiAgJyksYi5DbHJTaGFwZUhhc2h0YWc9KDAscC5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMiwxMkgyNS4zNGwxLjU1LTcuNzRhMSwxLDAsMCwwLTItLjM5TDIzLjMsMTJIMTUuMTFsMS41NS03Ljc0YTEsMSwwLDAsMC0yLS4zOUwxMy4w''@;'; put 'put ''NywxMkg2YTEsMSwwLDAsMCwwLDJoNi42N2wtMS42LDhINGExLDEsMCwwLDAsMCwyaDYuNjZMOS4xMSwzMS43NGExLDEsMCwwLDAsLjc5LDEuMTcuNjguNjgsMCwwLDAsLjIsMCwxLDEsMCwwLDAsMS0uOEwxMi43LDI0aDguMTlsLTEuNTUsNy43NGExLDEsMCwwLDAsLjc5LDEuMTcuNjIuNjIs''@;'; put 'put ''MCwwLDAsLjE5LDAsMSwxLDAsMCwwLDEtLjhMMjIuOTMsMjRIMzBhMSwxLDAsMCwwLDAtMkgyMy4zM2wxLjYxLThIMzJhMSwxLDAsMCwwLDAtMlpNMjEuMjksMjJIMTMuMWwxLjYxLThIMjIuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG5cbiAgPHBh''@;'; put 'put ''dGggZD0iTTMxLjg3LDEwSDI2LjMybDEtNC44M0ExLDEsMCwwLDAsMjYuMzUsNGgtMmExLDEsMCwwLDAtMSwuNzhMMjIuMzMsMTBoLTUuNGwxLTQuODNBMSwxLDAsMCwwLDE3LDRIMTVhMSwxLDAsMCwwLTEsLjc4TDEzLDEwSDdhMSwxLDAsMCwwLTEsLjhsLS40MSwyYTEsMSwwLDAsMCwxLDEu''@;'; put 'put ''Mmg1LjU1TDEwLjUsMjJoLTZhMSwxLDAsMCwwLTEsLjhsLS40MSwyYTEsMSwwLDAsMCwxLDEuMkg5LjY4bC0xLDQuODNhMSwxLDAsMCwwLDEsMS4xN2gyYTEsMSwwLDAsMCwuOTUtLjc4TDEzLjY3LDI2aDUuNGwtMSw0LjgzQTEsMSwwLDAsMCwxOSwzMmgyYTEsMSwwLDAsMCwxLS43OEwyMy4w''@;'; put 'put ''NSwyNmg2YTEsMSwwLDAsMCwxLS44bC40LTJhMSwxLDAsMCwwLTEtMS4ySDIzLjg3bDEuNjMtOGg2YTEsMSwwLDAsMCwxLS44bC40MS0yQTEsMSwwLDAsMCwzMS44NywxMFptLTEyLDEyaC01LjRsMS42NC04aDUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5c''@;'; put 'put ''biAgJyksYi5Tb2NpYWxTaGFwZXM9e2Nyb3duOmIuQ2xyU2hhcGVDcm93bixzaGFyZTpiLkNsclNoYXBlU2hhcmUsc3RhcjpiLkNsclNoYXBlU3RhciwiaGFsZi1zdGFyIjpiLkNsclNoYXBlSGFsZlN0YXIsYm9va21hcms6Yi5DbHJTaGFwZUJvb2ttYXJrLGVudmVsb3BlOmIuQ2xyU2hhcGVF''@;'; put 'put ''bnZlbG9wZSxjYWxlbmRhcjpWLkNsclNoYXBlQ2FsZW5kYXIsZXZlbnQ6Vi5DbHJTaGFwZUV2ZW50LHRhc2tzOmIuQ2xyU2hhcGVUYXNrcyxmbGFnOmIuQ2xyU2hhcGVGbGFnLGluYm94OmIuQ2xyU2hhcGVJbmJveCxoYXNodGFnOmIuQ2xyU2hhcGVIYXNodGFnLGhlYXJ0OmIuQ2xyU2hhcGVI''@;'; put 'put ''ZWFydCwiaGVhcnQtYnJva2VuIjpiLkNsclNoYXBlSGVhcnRCcm9rZW4sInRhbGstYnViYmxlcyI6Yi5DbHJTaGFwZVRhbGtCdWJibGVzLCJjaGF0LWJ1YmJsZSI6Yi5DbHJTaGFwZUNoYXRCdWJibGUscGljdHVyZTpiLkNsclNoYXBlUGljdHVyZSwiaGFwcHktZmFjZSI6Yi5DbHJTaGFwZUhh''@;'; put 'put ''cHB5RmFjZSwibmV1dHJhbC1mYWNlIjpiLkNsclNoYXBlTmV1dHJhbEZhY2UsInNhZC1mYWNlIjpiLkNsclNoYXBlU2FkRmFjZSwidGh1bWJzLXVwIjpiLkNsclNoYXBlVGh1bWJzVXAsInRodW1icy1kb3duIjpiLkNsclNoYXBlVGh1bWJzRG93bn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGIu''@;'; put 'put ''U29jaWFsU2hhcGVzLCJmYXZvcml0ZSIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLlNvY2lhbFNoYXBlcy5zdGFyKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuU29jaWFsU2hhcGVzLCJlbWFpbCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLlNvY2lhbFNoYXBlcy5lbnZlbG9wZSkpLE9i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShiLlNvY2lhbFNoYXBlcywiZGF0ZSIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLlNvY2lhbFNoYXBlcy5jYWxlbmRhcikpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUlj''@;'; put 'put ''b25zLmFkZChiLlNvY2lhbFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdGVjaG5vbG9neS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4v''@;'; put 'put ''cHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZWNobm9sb2d5LXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rp''@;'; put 'put ''b24oWCxiLEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksYi5DbHJTaGFwZVZNV0FwcD1iLkNsclNoYXBlVk09Yi5DbHJTaGFwZVJvdXRlcj1iLkNsclNoYXBlTmV0d29ya1N3aXRjaD1iLkNsclNoYXBlTmV0d29ya1NldHRp''@;'; put 'put ''bmdzPWIuQ2xyU2hhcGVOZXR3b3JrR2xvYmU9Yi5DbHJTaGFwZVRhYmxldD1iLkNsclNoYXBlTW9iaWxlPWIuQ2xyU2hhcGVCYXR0ZXJ5PWIuQ2xyU2hhcGVBcHBsaWNhdGlvbj1iLkNsclNoYXBlQ29kZT1iLkNsclNoYXBlVGVybWluYWw9Yi5DbHJTaGFwZURpc3BsYXk9Yi5DbHJTaGFwZUNv''@;'; put 'put ''bXB1dGVyPWIuQ2xyU2hhcGVGbG9wcHk9Yi5DbHJTaGFwZVBsdWdpbj1iLkNsclNoYXBlRG93bmxvYWRDbG91ZD1iLkNsclNoYXBlVXBsb2FkQ2xvdWQ9Yi5DbHJTaGFwZUV4cG9ydD1iLkNsclNoYXBlSW1wb3J0PWIuQ2xyU2hhcGVTaGllbGRYPWIuQ2xyU2hhcGVTaGllbGQ9Yi5DbHJTaGFw''@;'; put 'put ''ZVNoaWVsZENoZWNrPWIuQ2xyU2hhcGVSZXNvdXJjZVBvb2w9Yi5DbHJTaGFwZURhdGFDbHVzdGVyPWIuQ2xyU2hhcGVNZW1vcnk9Yi5DbHJTaGFwZUNQVT1iLkNsclNoYXBlQnVpbGRpbmc9Yi5DbHJTaGFwZUFwcGxpY2F0aW9ucz1iLkNsclNoYXBlQ2x1c3Rlcj1iLkNsclNoYXBlU3RvcmFn''@;'; put 'put ''ZT1iLkNsclNoYXBlSG9zdD1iLkNsclNoYXBlRGFzaGJvYXJkPWIuQ2xyU2hhcGVNb3VzZT1iLkNsclNoYXBlS2V5Ym9hcmQ9Yi5DbHJTaGFwZURldmljZXM9Yi5DbHJTaGFwZUJhY2t1cD1iLkNsclNoYXBlQmFja3VwUmVzdG9yZT1iLkNsclNoYXBlSGFyZERpc2s9Yi5DbHJTaGFwZVJhY2tT''@;'; put 'put ''ZXJ2ZXI9Yi5DbHJTaGFwZVdpZmk9Yi5DbHJTaGFwZUJ1bmRsZT1iLkNsclNoYXBlQmxvY2tzR3JvdXA9Yi5DbHJTaGFwZUJsb2NrPWIuQ2xyU2hhcGVMYXllcnM9Yi5DbHJTaGFwZVVuaW5zdGFsbD1iLkNsclNoYXBlSW5zdGFsbD1iLkNsclNoYXBlTm9XaWZpPWIuQ2xyU2hhcGVQaG9uZUhh''@;'; put 'put ''bmRzZXQ9Yi5DbHJTaGFwZVJ1bGVyUGVuY2lsPXZvaWQgMCxiLlRlY2hub2xvZ3lTaGFwZXM9Yi5DbHJTaGFwZUZpbGVTaGFyZTI9Yi5DbHJTaGFwZUNpQ2Q9Yi5DbHJTaGFwZUFuaW1hdGlvbj1iLkNsclNoYXBlVGFwZURyaXZlPWIuQ2xyU2hhcGVNZWRpYUNoYW5nZXI9Yi5DbHJDb250cm9s''@;'; put 'put ''THVuPWIuQ2xyU2hhcGVQb2Q9Yi5DbHJTaGFwZU5vZGU9Yi5DbHJTaGFwZU5hbWVzcGFjZT1iLkNsclNoYXBlTm9kZXM9Yi5DbHJTaGFwZU5vZGVHcm91cD1iLkNsclNoYXBlU3RvcmFnZUFkYXB0ZXI9Yi5DbHJTaGFwZUhvc3RHcm91cD1iLkNsclNoYXBlU3F1aWQ9Yi5DbHJTaGFwZUNhcGFj''@;'; put 'put ''aXRvcj1iLkNsclNoYXBlUmVzaXN0b3I9Yi5DbHJTaGFwZUluZHVjdG9yPWIuQ2xyU2hhcGVSYWRhcj1iLkNsclNoYXBlVXNiPWIuQ2xyU2hhcGVRckNvZGU9Yi5DbHJTaGFwZUZpbGVTaGFyZT1iLkNsclNoYXBlQ29udGFpbmVyVm9sdW1lPWIuQ2xyU2hhcGVDb250YWluZXI9Yi5DbHJTaGFw''@;'; put 'put ''ZUNkRHZkPWIuQ2xyU2hhcGVCYXJDb2RlPWIuQ2xyU2hhcGVBdG9tPWIuQ2xyU2hhcGVBc3NpZ25Vc2VyPWIuQ2xyU2hhcGVQcm9jZXNzT25WTT1iLkNsclNoYXBlQmx1ZXRvb3RoT2ZmPWIuQ2xyU2hhcGVCbHVldG9vdGg9Yi5DbHJTaGFwZVNTRD1iLkNsclNoYXBlTlZNZT1iLkNsclNoYXBl''@;'; put 'put ''SGFyZERyaXZlRGlza3M9Yi5DbHJTaGFwZUhhcmREcml2ZT1iLkNsclNoYXBlQWRtaW5pc3RyYXRvcj1iLkNsclNoYXBlRmxhc2s9Yi5DbHJTaGFwZUhlbGl4PWIuQ2xyU2hhcGVEZXBsb3k9Yi5DbHJTaGFwZUNsb3VkVHJhZmZpYz1iLkNsclNoYXBlQ2xvdWRTY2FsZT1iLkNsclNoYXBlQ2xv''@;'; put 'put ''dWROZXR3b3JrPWIuQ2xyU2hhcGVVbmxpbms9Yi5DbHJTaGFwZUxpbms9Yi5DbHJTaGFwZURpc2Nvbm5lY3Q9Yi5DbHJTaGFwZUNvbm5lY3Q9Yi5DbHJTaGFwZVVuYXJjaGl2ZT1iLkNsclNoYXBlQXJjaGl2ZT1iLkNsclNoYXBlQ2VydGlmaWNhdGU9dm9pZCAwO3ZhciBfPUkoCi8qISAuLi91''@;'; put 'put ''dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxwPUkoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMi''@;'; put 'put ''KTtiLkNsclNoYXBlUnVsZXJQZW5jaWw9KDAscC5jbHJJY29uU1ZHKSgnPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHBvaW50cz0iOSAxNy40MSA5IDI3IDE4LjU5IDI3IDE2LjU5IDI1IDExIDI1IDExIDE5LjQxIDkgMTcuNDEiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzQuODcsMzIuMjksMzIsMjkuMzhWMzJINFYyNy44NUg2di0xLjZINFYxOS42SDZWMThINFYxMS42SDZWMTBINFY0LjQxTDE5Ljk0LDIwLjI2VjE3LjQ0TDMuNzEsMS4yOUExLDEsMCww''@;'; put 'put ''LDAsMiwyVjMzYTEsMSwwLDAsMCwxLDFIMzQuMTZhMSwxLDAsMCwwLC43MS0xLjcxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yNCwzMGg0YTIsMiwwLDAsMCwyLTJWOC43TDI3LjcsNC40N2EyLDIsMCwwLDAt''@;'; put 'put ''MS43Ni0xaDBhMiwyLDAsMCwwLTEuNzYsMS4wOEwyMiw4LjcyVjI4QTIsMiwwLDAsMCwyNCwzMFpNMjQsOS4ybDEuOTQtMy43N0wyOCw5LjIxVjI0SDI0Wm0wLDE2LjQzaDR2Mi40NEgyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTEiIGQ9Ik0zNC44NywzMi4yMSwzMCwyNy4zN1Y4Ljc1TDI3LjcsNC41MmEyLDIsMCwwLDAtMy41NCwwTDIyLDguNzZWMTkuNDFMMy43MSwxLjIxQTEsMSwwLDAsMCwyLDEuOTJWMTBINC4xN3YxLjZIMlYxOEg0LjE3djEuNkgydjYuNjVINC4xN3YxLjZIMnY1LjA3YTEsMSwwLDAsMCwxLDFI''@;'; put 'put ''MzQuMTZhMSwxLDAsMCwwLC43MS0xLjcxWk0xMCwyNlYxNi45NEwxOS4wNywyNlptMTgsMi4xMUgyNFYyNS42OGg0Wm0wLTRIMjRWOS4yNWwxLjk0LTMuNzdMMjgsOS4yNloiLz5cbicpLGIuQ2xyU2hhcGVQaG9uZUhhbmRzZXQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy43MywzNS40NGE0LjcyLDQuNzIsMCwwLDEtMS0uMTEsMzMuOTEsMzMuOTEsMCwwLDEtMTYuNjItOC43NSwzMi43MSwzMi43MSwwLDAsMS05LTE2LjI1QTQuNTgsNC41OCwwLDAsMSwyLjQ2LDYuMDVsNC0zLjg1QTIsMiwwLDAs''@;'; put 'put ''MSw4LDEuNjZhMiwyLDAsMCwxLDEuNDUuODdsNSw3LjM5YTEuNiwxLjYsMCwwLDEtLjExLDEuOWwtMi41MSwzYTE4Ljk0LDE4Ljk0LDAsMCwwLDQuMTcsNS44OWgwYTE5LjI2LDE5LjI2LDAsMCwwLDYuMDcsNC4wOWwzLjExLTIuNDdhMS42NCwxLjY0LDAsMCwxLDEuODYtLjEybDcuNTUsNC44''@;'; put 'put ''OEEyLDIsMCwwLDEsMzUsMzAuMmwtMy45LDMuODZBNC43NCw0Ljc0LDAsMCwxLDI3LjczLDM1LjQ0Wk03Ljg0LDMuNjRsLTQsMy44NWEyLjU0LDIuNTQsMCwwLDAtLjc1LDIuNCwzMC43LDMwLjcsMCwwLDAsOC40MSwxNS4yNiwzMS45LDMxLjksMCwwLDAsMTUuNjQsOC4yMywyLjc1LDIuNzUs''@;'; put 'put ''MCwwLDAsMi41LS43NGwzLjktMy44Ni03LjI5LTQuNzEtMy4zNCwyLjY2YTEsMSwwLDAsMS0uOTIuMTcsMjAuMDYsMjAuMDYsMCwwLDEtNy4zNi00Ljc1aDBhMTkuNDksMTkuNDksMCwwLDEtNC44Ny03LjJBMSwxLDAsMCwxLDEwLDE0bDIuNy0zLjIzWiIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE1LjIyLDIwLjY0YTIwLjM3LDIwLjM3LDAsMCwwLDcuNCw0Ljc5bDMuNzctM2EuNjcuNjcsMCwwLDEsLjc2LDBsNyw0LjUxYTIsMiwwLDAsMSwuMzMsMy4xOGwtMy4yOCwzLjI0YTQsNCwwLDAsMS0zLjYzLDEuMDcs''@;'; put 'put ''MzUuMDksMzUuMDksMCwwLDEtMTcuMTUtOUEzMy43OSwzMy43OSwwLDAsMSwxLjE1LDguNmEzLjc4LDMuNzgsMCwwLDEsMS4xLTMuNTVsMy40LTMuMjhhMiwyLDAsMCwxLDMuMTIuMzJMMTMuNDMsOWEuNjMuNjMsMCwwLDEsMCwuNzVsLTMuMDcsMy42OUExOS43NSwxOS43NSwwLDAsMCwxNS4y''@;'; put 'put ''MiwyMC42NFoiLz5cbicpLGIuQ2xyU2hhcGVOb1dpZmk9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyNC40MmE0LDQsMCwxLDAsNCw0QTQsNCwwLDAsMCwxOCwyNC40MlptMCw2YTIsMiwwLDEsMSwyLTJB''@;'; put 'put ''MiwyLDAsMCwxLDE4LDMwLjQyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNi4yMSwyMS44NWExLDEsMCwwLDAtLjIzLTEuNCwxMy41NiwxMy41NiwwLDAsMC01LTIuMjNsMy44NywzLjg3QTEsMSwwLDAsMCwy''@;'; put 'put ''Ni4yMSwyMS44NVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTguMDUsMTAuNzJhMjAuODgsMjAuODgsMCwwLDAtNC4xNi40M2wxLjc0LDEuNzRhMTksMTksMCwwLDEsMi40Mi0uMTdBMTguNzYsMTguNzYsMCww''@;'; put 'put ''LDEsMjguNjQsMTZhMSwxLDAsMCwwLDEuMTItMS42NUEyMC43NSwyMC43NSwwLDAsMCwxOC4wNSwxMC43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzMuNTUsOC4yQTI4LjExLDI4LjExLDAsMCwwLDguMTEs''@;'; put 'put ''NS4zNkw5LjY5LDYuOTNBMjYsMjYsMCwwLDEsMzIuNDUsOS44N2ExLDEsMCwwLDAsMS4xLTEuNjdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgZD0iTTEuODQsNC43NSw0LjI3LDcuMThjLS42Mi4zNC0xLjIzLjctMS44''@;'; put 'put ''MywxLjFBMSwxLDAsMSwwLDMuNTYsOS45NEM0LjI2LDkuNDcsNSw5LDUuNzQsOC42NWwzLjg3LDMuODdBMjAuNTksMjAuNTksMCwwLDAsNi4yMywxNC40LDEsMSwwLDAsMCw3LjM2LDE2YTE4LjgyLDE4LjgyLDAsMCwxLDMuNzctMmw0LjE2LDQuMTZBMTMuNTEsMTMuNTEsMCwwLDAsMTAsMjAu''@;'; put 'put ''NTVhMSwxLDAsMCwwLDEuMTgsMS42MUExMS41MiwxMS41MiwwLDAsMSwxNywyMGwxMC44LDEwLjgsMS40MS0xLjQxLTI2LTI2WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBjeD0iMTgiIGN5PSIyOS41NCIgcj0iMyIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI5LjE4LDE3LjcxbC4xMS0uMTdhMS41MSwxLjUxLDAsMCwwLS40Ny0yLjFBMjAuNTcsMjAuNTcsMCwwLDAsMTgsMTIuMzdjLS41NiwwLTEuMTEsMC0xLjY1LjA3bDMuMjEsMy4yMWEx''@;'; put 'put ''Ny40MSwxNy40MSwwLDAsMSw3LjYsMi41MkExLjQ5LDEuNDksMCwwLDAsMjkuMTgsMTcuNzFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMzIuNzYsOS4zOEEyNy45LDI3LjksMCwwLDAsMTAuMTgsNi4yN0wxMi44MSw4''@;'; put 'put ''LjlBMjQuNjgsMjQuNjgsMCwwLDEsMzEuMSwxMi4xMmExLjQ5LDEuNDksMCwwLDAsMi0uNDZsLjExLS4xN0ExLjUxLDEuNTEsMCwwLDAsMzIuNzYsOS4zOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0zLDQuNzVsMy4x''@;'; put 'put ''LDMuMUEyNy4yOCwyNy4yOCwwLDAsMCwzLjE4LDkuNDJhMS41MSwxLjUxLDAsMCwwLS40OCwyLjExbC4xMS4xN2ExLjQ5LDEuNDksMCwwLDAsMiwuNDYsMjQuNjksMjQuNjksMCwwLDEsMy42Ny0xLjlsMy4xNCwzLjE0YTIwLjYzLDIwLjYzLDAsMCwwLTQuNTMsMi4wOSwxLjUxLDEuNTEsMCww''@;'; put 'put ''LDAtLjQ2LDIuMWwuMTEuMTdhMS40OSwxLjQ5LDAsMCwwLDIsLjQ2QTE3LjQ2LDE3LjQ2LDAsMCwxLDE0LjI1LDE2bDMuNiwzLjZhMTMuMzksMTMuMzksMCwwLDAtNi43OSwxLjkzLDEuNSwxLjUsMCwwLDAtLjQ2LDIuMDlsLjEuMTZhMS41MiwxLjUyLDAsMCwwLDIuMDYuNDQsMTAuMiwxMC4y''@;'; put 'put ''LDAsMCwxLDktLjdMMjksMzAuNzVsMS40MS0xLjQxLTI2LTI2WiIvPlxuJyksYi5DbHJTaGFwZUluc3RhbGw9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMC45Miw4SDI2LjU1YTEsMSwwLDAsMCwwLDJIMzFW''@;'; put 'put ''MzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMEEyLDIsMCwwLDAsMzAuOTIsOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yIiBkPSJNMTAuMywxOC44N2w3LDYuODlhMSwxLDAsMCwwLDEuNCwwbDctNi44OWExLDEsMCwwLDAtMS40LTEuNDNMMTksMjIuNjVWNGExLDEsMCwwLDAtMiwwVjIyLjY1bC01LjMtNS4yMWExLDEsMCwwLDAtMS40LDEuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMC4zLDE4Ljg3bDcsNi44OWExLDEsMCwwLDAsMS40LDBsNy02Ljg5YTEsMSwwLDAsMC0xLjQtMS40M0wxOSwyMi42NVY0YTEsMSwwLDAsMC0yLDBWMjIuNjVsLTUuMy01LjIxYTEsMSwwLDAs''@;'; put 'put ''MC0xLjQsMS40M1oiLz48cGF0aCBkPSJNMzEsMTMuNDNWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMC4zLDE4Ljg3bDcsNi44OWExLDEsMCwwLDAsMS40LDBsNy02Ljg5YTEsMSwwLDAsMC0xLjQtMS40M0wxOSwyMi42NVY0YTEsMSwwLDAsMC0yLDBWMjIuNjVsLTUuMy01LjIxYTEsMSwwLDAsMC0xLjQsMS40M1oiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzEsMTUuNFYzMEg1VjEwSDkuMzhhMSwxLDAsMCwwLDAtMkg1LjA4QTIsMiwwLDAsMCwzLDEwVjMwYTIsMiwwLDAsMCwyLjA4LDJIMzAuOTJBMiwyLDAsMCwwLDMzLDMw''@;'; put 'put ''VjE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4y''@;'; put 'put ''OCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuJyksYi5DbHJTaGFwZVVuaW5zdGFsbD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTExLjI5LDI2Ljcy''@;'; put 'put ''YTEsMSwwLDAsMCwxLjQxLDBMMTgsMjEuNDlsNS4zLDUuMjNBMSwxLDAsMCwwLDI0LjcsMjUuM2wtNS4yOC01LjIxLDUuMjgtNS4yMWExLDEsMCwwLDAtMS40MS0xLjQyTDE4LDE4LjY4bC01LjMtNS4yM2ExLDEsMCwwLDAtMS40MSwxLjQybDUuMjgsNS4yMUwxMS4zLDI1LjNBMSwxLDAsMCww''@;'; put 'put ''LDExLjI5LDI2LjcyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC45Miw4SDI2LjU1YTEsMSwwLDAsMCwwLDJIMzFWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEy''@;'; put 'put ''LDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMEEyLDIsMCwwLDAsMzAuOTIsOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTExLjI5LDI2LjcyYTEsMSwwLDAs''@;'; put 'put ''MCwxLjQxLDBMMTgsMjEuNDlsNS4zLDUuMjNBMSwxLDAsMCwwLDI0LjcsMjUuM2wtNS4yOC01LjIxLDUuMjgtNS4yMWExLDEsMCwwLDAtMS40MS0xLjQyTDE4LDE4LjY4bC01LjMtNS4yM2ExLDEsMCwwLDAtMS40MSwxLjQybDUuMjgsNS4yMUwxMS4zLDI1LjNBMSwxLDAsMCwwLDExLjI5LDI2''@;'; put 'put ''LjcyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzEsMTMuNDNWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwy''@;'; put 'put ''SDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIg''@;'; put 'put ''cj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMS4yOSwyNi43MmExLDEsMCwwLDAsMS40MSwwTDE4LDIxLjQ5bDUuMyw1LjIzQTEsMSwwLDAsMCwyNC43LDI1LjNsLTUuMjgt''@;'; put 'put ''NS4yMSw0Ljc1LTQuNjlIMjIuMjNhMy42NSwzLjY1LDAsMCwxLS44MS0uMUwxOCwxOC42OGwtNS4zLTUuMjNhMSwxLDAsMCwwLTEuNDEsMS40Mmw1LjI4LDUuMjFMMTEuMywyNS4zQTEsMSwwLDAsMCwxMS4yOSwyNi43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzEsMTUuNFYzMEg1VjEwSDkuMzhhMSwxLDAsMCwwLDAtMkg1LjA4QTIsMiwwLDAsMCwzLDEwVjMwYTIsMiwwLDAsMCwyLjA4LDJIMzAuOTJBMiwyLDAsMCwwLDMzLDMwVjE1LjRaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4w''@;'; put 'put ''NiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuJyksYi5DbHJTaGFwZUxheWVycz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIwLjI1YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlh''@;'; put 'put ''MSwxLDAsMCwxLDAtMS44MWwxNS03LjA5YTEsMSwwLDAsMSwuODUsMGwxNSw3LjA5YTEsMSwwLDAsMSwwLDEuODFsLTE1LDcuMDlBMSwxLDAsMCwxLDE4LDIwLjI1Wk01LjM0LDEyLjE2bDEyLjY2LDYsMTIuNjYtNkwxOCw2LjE4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyNi4xNmExLDEsMCwwLDEtLjQzLS4xTDIuNTcsMTlhMSwxLDAsMSwxLC44NS0xLjgxTDE4LDI0LjA2bDE0LjU3LTYuODlBMSwxLDAsMSwxLDMzLjQzLDE5bC0xNSw3LjA5QTEsMSwwLDAsMSwxOCwyNi4xNloiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzIuMDdhMSwxLDAsMCwxLS40My0uMWwtMTUtNy4wOWExLDEsMCwwLDEsLjg1LTEuODFMMTgsMzBsMTQuNTctNi44OWExLDEsMCwxLDEsLjg1LDEuODFMMTguNDMsMzJBMSwxLDAs''@;'; put 'put ''MCwxLDE4LDMyLjA3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIwLjI1YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLDAtMS44MWwxNS03LjA5YTEsMSwwLDAsMSwuODUsMGwxNSw3LjA5YTEs''@;'; put 'put ''MSwwLDAsMSwwLDEuODFsLTE1LDcuMDlBMSwxLDAsMCwxLDE4LDIwLjI1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LDI2LjE2YTEsMSwwLDAsMS0uNDMtLjFMMi41NywxOWExLDEsMCwxLDEsLjg1LTEuODFMMTgs''@;'; put 'put ''MjQuMDZsMTQuNTctNi44OUExLDEsMCwxLDEsMzMuNDMsMTlsLTE1LDcuMDlBMSwxLDAsMCwxLDE4LDI2LjE2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTE4LDMyLjA3YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlh''@;'; put 'put ''MSwxLDAsMCwxLC44NS0xLjgxTDE4LDMwbDE0LjU3LTYuODlhMSwxLDAsMSwxLC44NSwxLjgxTDE4LjQzLDMyQTEsMSwwLDAsMSwxOCwzMi4wN1oiLz5cbicpLGIuQ2xyU2hhcGVCbG9jaz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDIsOS4wOWwtMTMtNmExLDEsMCwwLDAtLjg0''@;'; put 'put ''LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMEExLDEsMCwwLDAsMzEuNDIsOS4wOVpNMTgsNS4xLDI4LjYxLDEwLDE4LDE0LjksNy4zOSwxMFpNNiwxMS41NmwxMSw1LjA4djE0LjhM''@;'; put 'put ''NiwyNi4zNlpNMTksMzEuNDRWMTYuNjRsMTEtNS4wOHYxNC44WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTUuNTNWMjYuMzZMMTksMzEuNDRWMTYuNjRsMi41Ny0xLjE5YTMuNjcsMy42NywwLDAsMS0y''@;'; put 'put ''LjExLTEuMjJMMTgsMTQuOSw3LjM5LDEwLDE4LDUuMWwzLjA4LDEuNDIsMS0xLjc0TDE4LjQyLDMuMDlhMSwxLDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSwwLDAsMCwuNTguOTFsMTMsNmExLDEsMCwwLDAsLjg0LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTUuNTNa''@;'; put 'put ''TTE3LDMxLjQ0LDYsMjYuMzZWMTEuNTZsMTEsNS4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg3LDEuMjZsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEu''@;'; put 'put ''OTJIMzMuN2ExLjI4LDEuMjgsMCwwLDAsMS4xLTEuOTJMMjkuMDgsMS4yNkExLjI4LDEuMjgsMCwwLDAsMjYuODcsMS4yNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTMwLDEzLjVWMjYuMzZMMTksMzEuNDRWMTYuNjRsOC4wOC0zLjczYTcuNTcsNy41NywwLDAsMS0yLTEuMjdMMTgsMTQuOSw3LjM5LDEwLDE4LDUuMWw0LjYxLDIuMTNBNy4xMiw3LjEyLDAsMCwxLDIyLjUsNmE4LDgsMCwwLDEsLjA3LTFMMTguNDIsMy4wOWExLDEsMCwwLDAtLjg0''@;'; put 'put ''LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMy4yMkE3LjM3LDcuMzcsMCwwLDEsMzAsMTMuNVpNMTcsMzEuNDQsNiwyNi4zNlYxMS41NmwxMSw1LjA4WiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICBcbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS40Miw5LjA5bC0xMy02YTEsMSwwLDAsMC0uODQsMGwtMTMsNkExLDEsMCwwLDAsNCwxMFYyN2ExLDEsMCwwLDAsLjU4LjkxbDEzLDZhMSwxLDAsMCwwLC44NCwwbDEzLTZBMSwxLDAsMCwwLDMyLDI3VjEwQTEsMSwwLDAsMCwz''@;'; put 'put ''MS40Miw5LjA5Wk0xOCwxNC45LDcuMzksMTAsMTgsNS4xLDI4LjYxLDEwWk0zMCwyNi4zNiwxOSwzMS40NFYxNi42NGwxMS01LjA4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxNS4zOHYxMUwxOSwzMS40NFYx''@;'; put 'put ''Ni42NGwyLjc5LTEuMjlhMy42OCwzLjY4LDAsMCwxLTIuMjUtMS4xNkwxOCwxNC45LDcuMzksMTAsMTgsNS4xbDMsMS4zOSwxLTEuNzVMMTguNDIsMy4wOWExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQs''@;'; put 'put ''MGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxNS4zOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xMiwyMS4xMywxMWExLjI3LDEuMjcsMCwwLDAsMS4xLDEuOTFIMzMuNjhB''@;'; put 'put ''MS4yNywxLjI3LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTJBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEz''@;'; put 'put ''LjVWMjYuMzZMMTksMzEuNDRWMTYuNjRsOC4wOC0zLjczYTcuNTcsNy41NywwLDAsMS0yLTEuMjdMMTgsMTQuOSw3LjM5LDEwLDE4LDUuMWw0LjYxLDIuMTNBNy4xMiw3LjEyLDAsMCwxLDIyLjUsNmE4LDgsMCwwLDEsLjA3LTFMMTguNDIsMy4wOWExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwx''@;'; put 'put ''LDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMy4yMkE3LjM3LDcuMzcsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxiLkNsclNoYXBlQmxvY2tzR3JvdXA9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMz''@;'; put 'put ''LjUzLDE4Ljc2LDI2LjYsMTUuNTdWNi40M0ExLDEsMCwwLDAsMjYsNS41M2wtNy41LTMuNDVhMSwxLDAsMCwwLS44NCwwbC03LjUsMy40NWExLDEsMCwwLDAtLjU4LjkxdjkuMTRMMi42OCwxOC43NmExLDEsMCwwLDAtLjU4LjkxdjkuNzhoMGExLDEsMCwwLDAsLjU4LjkxbDcuNSwzLjQ1YTEs''@;'; put 'put ''MSwwLDAsMCwuODQsMGw3LjA4LTMuMjYsNy4wOCwzLjI2YTEsMSwwLDAsMCwuODQsMGw3LjUtMy40NWExLDEsMCwwLDAsLjU4LS45MWgwVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlptLTIuODEuOTFMMjUuNjEsMjIsMjAuNSwxOS42N2w1LjExLTIuMzVaTTE4LjEsNC4wOGw1LjExLDIu''@;'; put 'put ''MzVMMTguMSw4Ljc4LDEzLDYuNDNaTTEwLjYsMTcuMzFsNS4xMSwyLjM1TDEwLjYsMjIsNS40OSwxOS42N1ptNi41LDExLjQ5LTYuNSwzLTYuNS0zVjIxLjIzTDEwLjE4LDI0QTEsMSwwLDAsMCwxMSwyNGw2LjA4LTIuOFpNMTEuNiwxNS41N2gwVjhsNi4wOCwyLjhhMSwxLDAsMCwwLC44NCww''@;'; put 'put ''TDI0LjYsOHY3LjU4aDBsLTYuNSwzWk0zMi4xMSwyOC44MWwtNi41LDMtNi41MS0zVjIxLjIyTDI1LjE5LDI0QTEsMSwwLDAsMCwyNiwyNGw2LjA4LTIuOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYs''@;'; put 'put ''MTUuNTdoLTJ2MGwtNi41LDMtNi41LTNWOGw2LjA4LDIuOGExLDEsMCwwLDAsLjg0LDBsLjI0LS4xMWE0LjE3LDQuMTcsMCwwLDEsLjI5LS42NWwxLjMzLTIuMzEtMi4yOCwxTDEzLDYuNDNsNS4xLTIuMzUsMy40NywxLjYsMS0xLjczTDE4LjUsMi4wOGExLDEsMCwwLDAtLjg0LDBsLTcuNSwz''@;'; put 'put ''LjQ1YTEsMSwwLDAsMC0uNTguOTF2OS4xNGwtNi45LDMuMThhMSwxLDAsMCwwLS41OC45MXY5Ljc4YTEsMSwwLDAsMCwuNTguOTFsNy41LDMuNDVhMSwxLDAsMCwwLC44NCwwbDcuMDgtMy4yNiw3LjA4LDMuMjZhMSwxLDAsMCwwLC44NCwwbDcuNS0zLjQ1YTEsMSwwLDAsMCwuNTgtLjkxVjE5''@;'; put 'put ''LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlpNMTAuNiwxNy4zMWw1LjExLDIuMzVMMTAuNiwyMiw1LjQ5LDE5LjY3Wm0wLDE0LjQ5LTYuNS0zVjIxLjIzTDEwLjE4LDI0QTEsMSwwLDAsMCwxMSwyNGw2LjA4LTIuOCwwLDcuNlptMTUtMTQuNDgsNS4xMSwyLjM1TDI1LjYxLDIyLDIwLjUsMTku''@;'; put 'put ''NjdabTAsMTQuNDktNi41MS0zVjIxLjIyTDI1LjE5LDI0QTEsMSwwLDAsMCwyNiwyNGw2LjA4LTIuOCwwLDcuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbjxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFB''@;'; put 'put ''MS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxl''@;'; put 'put ''cnQiIC8+XG48cGF0aCBkPSJNMzMuNTMsMTguNzYsMjYuNiwxNS41N1YxMi43YTcuNTgsNy41OCwwLDAsMS0yLTEuNTF2NC4zOWwtNi41LDMtNi41LTNWOGw2LjA4LDIuOGExLDEsMCwwLDAsLjg0LDBMMjMsOC43MmE3LjA1LDcuMDUsMCwwLDEtLjQ3LTJsLTQuNDcsMkwxMyw2LjQzbDUuMS0y''@;'; put 'put ''LjM1LDQuNDQsMnMwLS4wNiwwLS4wOWE3LjU1LDcuNTUsMCwwLDEsLjI3LTJsLTQuMy0yYTEsMSwwLDAsMC0uODQsMGwtNy41LDMuNDVhMSwxLDAsMCwwLS41OC45MXY5LjE0bC02LjksMy4xOGExLDEsMCwwLDAtLjU4LjkxdjkuNzhhMSwxLDAsMCwwLC41OC45MWw3LjUsMy40NWExLDEsMCww''@;'; put 'put ''LDAsLjg0LDBsNy4wOC0zLjI2LDcuMDgsMy4yNmExLDEsMCwwLDAsLjg0LDBsNy41LTMuNDVhMSwxLDAsMCwwLC41OC0uOTFWMTkuNjdBMSwxLDAsMCwwLDMzLjUzLDE4Ljc2Wk0xMC42LDE3LjMxbDUuMTEsMi4zNUwxMC42LDIyLDUuNDksMTkuNjdabTAsMTQuNDktNi41LTNWMjEuMjNMMTAu''@;'; put 'put ''MTgsMjRBMSwxLDAsMCwwLDExLDI0bDYuMDgtMi44LDAsNy42Wm0xNS0xNC40OCw1LjExLDIuMzVMMjUuNjEsMjIsMjAuNSwxOS42N1ptMCwxNC40OS02LjUxLTNWMjEuMjJMMjUuMTksMjRBMSwxLDAsMCwwLDI2LDI0bDYuMDgtMi44LDAsNy42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbjxjaXJjbGUgY3g9IjMwLjAzIiBjeT0iNi4wMyIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuPHBhdGggZD0iTTMzLjUz''@;'; put 'put ''LDE4Ljc2LDI2LjYsMTUuNTdWNi40M0ExLDEsMCwwLDAsMjYsNS41M2wtNy41LTMuNDVhMSwxLDAsMCwwLS44NCwwbC03LjUsMy40NWExLDEsMCwwLDAtLjU4LjkxdjkuMTRMMi42OCwxOC43NmExLDEsMCwwLDAtLjU4LjkxdjkuNzhoMGExLDEsMCwwLDAsLjU4LjkxbDcuNSwzLjQ1YTEsMSww''@;'; put 'put ''LDAsMCwuODQsMGw3LjA4LTMuMjYsNy4wOCwzLjI2YTEsMSwwLDAsMCwuODQsMGw3LjUtMy40NWExLDEsMCwwLDAsLjU4LS45MWgwVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlpNMjUuNjEsMjIsMjAuNSwxOS42N2w1LjExLTIuMzUsNS4xMSwyLjM1Wm0tMS02LjQ0LTYuNDQsM1YxMC44''@;'; put 'put ''N2ExLDEsMCwwLDAsLjM1LS4wOEwyNC42LDh2Ny41OFpNMTguMSw0LjA4bDUuMTEsMi4zNUwxOC4xLDguNzgsMTMsNi40M1pNMTAuNiwxNy4zMWw1LjExLDIuMzVMMTAuNiwyMiw1LjQ5LDE5LjY3Wm02LjUsMTEuNDktNi41LDNoMFYyNC4xMWgwQTEsMSwwLDAsMCwxMSwyNGw2LjA4LTIuOFpt''@;'; put 'put ''MTUsMC02LjQ2LDNWMjQuMTFBMSwxLDAsMCwwLDI2LDI0bDYuMDgtMi44WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0zMy41MywxOC43NiwyNi42LDE1LjU3djBoLTJ2MGwtNi40MywzVjEwLjg3YTEuMDUsMS4wNSwwLDAsMCwuMzUtLjA4''@;'; put 'put ''bC4xNC0uMDZBMy4yMywzLjIzLDAsMCwxLDE5LDEwbDEuMjgtMi4yMi0yLjE0LDFMMTMsNi40M2w1LjEtMi4zNSwzLjM5LDEuNTYsMS0xLjczLTQtMS44M2ExLDEsMCwwLDAtLjg0LDBsLTcuNSwzLjQ1YTEsMSwwLDAsMC0uNTguOTF2OS4xNGwtNi45LDMuMThhMSwxLDAsMCwwLS41OC45MXY5''@;'; put 'put ''Ljc4YTEsMSwwLDAsMCwuNTguOTFsNy41LDMuNDVhMSwxLDAsMCwwLC44NCwwbDcuMDgtMy4yNiw3LjA4LDMuMjZhMSwxLDAsMCwwLC44NCwwbDcuNS0zLjQ1YTEsMSwwLDAsMCwuNTgtLjkxVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlptLTI4LC45MSw1LjExLTIuMzYsNS4xMSwyLjM1''@;'; put 'put ''TDEwLjYsMjJaTTEwLjYsMzEuOFYyNC4xMUExLjA4LDEuMDgsMCwwLDAsMTEsMjRsNi4wOC0yLjgsMCw3LjZabTkuOS0xMi4xMyw1LjExLTIuMzUsNS4xMSwyLjM1TDI1LjYxLDIyWk0yNS42NCwzMS44VjI0LjExQS44OS44OSwwLDAsMCwyNiwyNGw2LjA4LTIuOCwwLDcuNloiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG48cGF0aCBkPSJNMjYuODksMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yNywxM0gzMy43MmExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMSwxLjE0QTEuMjgsMS4yOCwwLDAs''@;'; put 'put ''MCwyNi44OSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbjxwYXRoIGQ9Ik0zMy41MywxOC43NiwyNi42LDE1LjU3VjEyLjY5YTcuNjYsNy42NiwwLDAsMS0yLTEuNDd2NC4zNGwtNi40MywzVjEw''@;'; put 'put ''Ljg3YTEuMDUsMS4wNSwwLDAsMCwuMzUtLjA4TDIzLDguNzNhNy42NSw3LjY1LDAsMCwxLS40OC0ybC00LjQyLDJMMTMsNi40M2w1LjEtMi4zNSw0LjM4LDJWNmE3LjU1LDcuNTUsMCwwLDEsLjI3LTJMMTguNSwyLjA4YTEsMSwwLDAsMC0uODQsMGwtNy41LDMuNDVhMSwxLDAsMCwwLS41OC45''@;'; put 'put ''MXY5LjE0bC02LjksMy4xOGExLDEsMCwwLDAtLjU4LjkxdjkuNzhhMSwxLDAsMCwwLC41OC45MWw3LjUsMy40NWExLDEsMCwwLDAsLjg0LDBsNy4wOC0zLjI2LDcuMDgsMy4yNmExLDEsMCwwLDAsLjg0LDBsNy41LTMuNDVhMSwxLDAsMCwwLC41OC0uOTFWMTkuNjdBMSwxLDAsMCwwLDMzLjUz''@;'; put 'put ''LDE4Ljc2Wm0tMjgsLjkxLDUuMTEtMi4zNiw1LjExLDIuMzVMMTAuNiwyMlpNMTAuNiwzMS44VjI0LjExQTEuMDgsMS4wOCwwLDAsMCwxMSwyNGw2LjA4LTIuOCwwLDcuNlptOS45LTEyLjEzLDUuMTEtMi4zNSw1LjExLDIuMzVMMjUuNjEsMjJaTTI1LjY0LDMxLjhWMjQuMTFBLjg5Ljg5LDAs''@;'; put 'put ''MCwwLDI2LDI0bDYuMDgtMi44LDAsNy42WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG48Y2lyY2xlIGN4PSIyOS45OCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGIuQ2xyU2hhcGVCdW5kbGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi40Myw4LjM1bC0xMy02LjIxYTEsMSwwLDAsMC0uODcsMGwtMTUsNy4yNGExLDEsMCww''@;'; put 'put ''LDAtLjU3LjlWMjYuODNhMSwxLDAsMCwwLC42LjkybDEzLDYuMTlhMSwxLDAsMCwwLC44NywwbDE1LTcuMjRhMSwxLDAsMCwwLC41Ny0uOVY5LjI1QTEsMSwwLDAsMCwzMi40Myw4LjM1Wk0xOSw0LjE1LDI5LjkzLDkuMzdsLTUuMDUsMi40NEwxNC4yMSw2LjQ2Wk0xNywxNS42NCw2LDEwLjQx''@;'; put 'put ''bDUuOS0yLjg1TDIyLjYsMTIuOTFaTTUsMTIuMTMsMTYsMTcuNFYzMS40Nkw1LDI2LjJaTTE4LDMxLjQ1VjE3LjM2bDEzLTYuMjl2MTQuMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi40Myw4LjM1bC0xMy02LjIx''@;'; put 'put ''YTEsMSwwLDAsMC0uODcsMGwtMTUsNy4yNGExLDEsMCwwLDAtLjU3LjlWMjYuODNhMSwxLDAsMCwwLC42LjkybDEzLDYuMTlhMSwxLDAsMCwwLC44NywwbDE1LTcuMjRhMSwxLDAsMCwwLC41Ny0uOVY5LjI1QTEsMSwwLDAsMCwzMi40Myw4LjM1Wk0xOSw0LjE1LDI5LjkzLDkuMzdsLTUuMDUs''@;'; put 'put ''Mi40NEwxNC4yMSw2LjQ2Wk0xNywxNS42NCw2LDEwLjQxbDUuOS0yLjg1TDIyLjYsMTIuOTFabTEsMTUuOFYxNy4zNmwxMy02LjI5djE0LjFaIi8+XG4nKSxiLkNsclNoYXBlV2lmaT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMSIgZD0iTTMzLjU1LDguMmEyOC4xLDI4LjEsMCwwLDAtMzEuMTEuMDhBMSwxLDAsMSwwLDMuNTYsOS45NGEyNi4xMSwyNi4xMSwwLDAsMSwyOC44OS0uMDcsMSwxLDAsMCwwLDEuMS0xLjY3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTIiIGQ9Ik0xOC4wNSwxMC43MkEyMC43NCwyMC43NCwwLDAsMCw2LjIzLDE0LjQsMSwxLDAsMCwwLDcuMzYsMTYsMTguODUsMTguODUsMCwwLDEsMjguNjQsMTZhMSwxLDAsMCwwLDEuMTItMS42NUEyMC43NSwyMC43NSwwLDAsMCwxOC4wNSwxMC43MloiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTguMDUsMTcuOWExMy41MSwxMy41MSwwLDAsMC04LDIuNjQsMSwxLDAsMCwwLDEuMTgsMS42MSwxMS41NiwxMS41NiwwLDAsMSwxMy42Mi0uMDhBMSwxLDAsMSwwLDI2LDIwLjQ2LDEzLjUy''@;'; put 'put ''LDEzLjUyLDAsMCwwLDE4LjA1LDE3LjlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTE4LDI0LjQyYTQsNCwwLDEsMCw0LDRBNCw0LDAsMCwwLDE4LDI0LjQyWm0wLDZhMiwyLDAsMSwxLDItMkEyLDIsMCwwLDEs''@;'; put 'put ''MTgsMzAuNDJaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGN4PSIxOCIgY3k9IjI5LjU0IiByPSIzIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzIu''@;'; put 'put ''NzYsOS4zOGEyNy44NywyNy44NywwLDAsMC0yOS41NywwLDEuNTEsMS41MSwwLDAsMC0uNDgsMi4xMWwuMTEuMTdhMS40OSwxLjQ5LDAsMCwwLDIsLjQ2LDI0LjY4LDI0LjY4LDAsMCwxLDI2LjI2LDAsMS40OSwxLjQ5LDAsMCwwLDItLjQ2bC4xMS0uMTdBMS41MSwxLjUxLDAsMCwwLDMyLjc2''@;'; put 'put ''LDkuMzhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjguODIsMTUuNDRhMjAuNTksMjAuNTksMCwwLDAtMjEuNywwLDEuNTEsMS41MSwwLDAsMC0uNDYsMi4xbC4xMS4xN2ExLjQ5LDEuNDksMCwwLDAsMiwuNDYsMTcu''@;'; put 'put ''NCwxNy40LDAsMCwxLDE4LjM2LDAsMS40OSwxLjQ5LDAsMCwwLDItLjQ2bC4xMS0uMTdBMS41MSwxLjUxLDAsMCwwLDI4LjgyLDE1LjQ0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTI0Ljg4LDIxLjQ5YTEzLjQxLDEz''@;'; put 'put ''LjQxLDAsMCwwLTEzLjgyLDAsMS41LDEuNSwwLDAsMC0uNDYsMi4wOWwuMS4xNmExLjUyLDEuNTIsMCwwLDAsMi4wNi40NCwxMC4yNywxMC4yNywwLDAsMSwxMC40MiwwLDEuNTIsMS41MiwwLDAsMCwyLjA2LS40NWwuMS0uMTZBMS40OSwxLjQ5LDAsMCwwLDI0Ljg4LDIxLjQ5WiIvPlxuJyks''@;'; put 'put ''Yi5DbHJTaGFwZVJhY2tTZXJ2ZXI9KDAscC5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIHg9IjEwIiB5PSIxNyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiB4PSI2IiB5PSIyNSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMt''@;'; put 'put ''LWFsZXJ0ZWQiIHg9IjEwIiB5PSIyNSIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMTguNjQsMTFBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlM''@;'; put 'put ''MTkuNTYsOUgxMHYyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDMyVjIxSDRWMTVIMjAuNThBMy42NywzLjY3LDAsMCwxLDE5LDEzLjU2YTMuNjMsMy42Myww''@;'; put 'put ''LDAsMS0uMjYtLjU2SDRWN0gyMC43MWwxLjE1LTJINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNNCwyOVYyM0gzMnY2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgeD0iNiIgeT0iOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMi0tYmFkZ2VkIiB4PSI2IiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiB4PSIxMCIgeT0iMTciIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIHg9IjYiIHk9IjI1IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiIHg9IjEwIiB5PSIyNSIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgZD0iTTEwLDExSDI0di0uNTFBNy40''@;'; put 'put ''OCw3LjQ4LDAsMCwxLDIzLjEzLDlIMTBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiIGQ9Ik0zMCwxMy41YTcuNDcsNy40NywwLDAsMS0yLjY4LS41SDRWN0gyMi41N2E3LjUyLDcuNTIsMCww''@;'; put 'put ''LDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xSDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTQsMTVIMzJ2Nkg0Wk00LDI5VjIzSDMydjZaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjYiIHk9Ijki''@;'; put 'put ''IHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIxMCIgeT0iOSIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0zIiB4PSI2IiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjEwIiB5PSIxNyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNMzIsNUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjdBMiwyLDAsMCwwLDMyLDVaTTQsN0gzMnY2SDRabTAsOEgzMnY2SDRaTTQsMjlWMjNIMzJ2''@;'; put 'put ''NloiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiB4PSI2IiB5PSIyNSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTci''@;'; put 'put ''IHg9IjEwIiB5PSIyNSIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yLDMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNEgyWm04LTNI''@;'; put 'put ''MjR2MkgxMFpNNiwyN0g4djJINloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xOSw5Ljg5LDE5LjU2LDlIMTBWN0gyMC43MWwxLjczLTNINEEyLDIsMCwwLDAsMiw2djZIMTguNTdBMy42''@;'; put 'put ''NywzLjY3LDAsMCwxLDE5LDkuODlaTTgsOUg2VjdIOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOS4zNSwxNEgydjhIMzRW''@;'; put 'put ''MTUuMzhaTTgsMTlINlYxN0g4Wm0xNiwwSDEwVjE3SDI0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCww''@;'; put 'put ''LDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yLDE0''@;'; put 'put ''djhIMzRWMTRabTYsNUg2VjE3SDhabTE2LDBIMTBWMTdIMjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTIsMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI0SDJabTgtM0gy''@;'; put 'put ''NHYySDEwWk02LDI3SDh2Mkg2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0yMy4xMyw5SDEwVjdIMjIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNDksNy40OSwwLDAsMSwuMjgtMkg0''@;'; put 'put ''QTIsMiwwLDAsMCwyLDZ2NkgyNS41MUE3LjUyLDcuNTIsMCwwLDEsMjMuMTMsOVpNOCw5SDZWN0g4WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIg''@;'; put 'put ''cj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTIsMjJIMzRWMTRIMlptOC01SDI0djJIMTBaTTYsMTdIOHYySDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0yIiBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZ2NkgzNFY2QTIsMiwwLDAsMCwzMiw0Wk04LDlINlY3SDhaTTI0LDlIMTBWN0gyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yLDMwYTIsMiwwLDAsMCwyLDJIMzJh''@;'; put 'put ''MiwyLDAsMCwwLDItMlYyNEgyWm04LTNIMjR2MkgxMFpNNiwyN0g4djJINloiLz5cbicpLGIuQ2xyU2hhcGVIYXJkRGlzaz0oMCxwLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIgeT0i''@;'; put 'put ''MjAiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTM0LDIxLjA4bC0xLjQtNS42OEgzMC41MWwxLjQ5LDZWMjlINFYyMS40NEw3LjA2LDloMTIuNWwxLjE1LTJINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIsMjEuMDhhMSwxLDAs''@;'; put 'put ''MCwwLDAsLjI0VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMS4zMUExLDEsMCwwLDAsMzQsMjEuMDhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIg''@;'; put 'put ''ZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiB4PSI2IiB5PSIyMCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iMjYiIHk9IjI0IiB3''@;'; put 'put ''aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zNCwyMS4wOCwzMiwxMy4yMWE3LjQ5LDcuNDksMCwwLDEtMiwuMjlsMiw3Ljk0VjI5SDRWMjEuNDRMNy4w''@;'; put 'put ''Niw5SDIzLjEzYTcuNDUsNy40NSwwLDAsMS0uNTUtMkg3LjA2QTIsMiwwLDAsMCw1LjEzLDguNDdMMiwyMS4wOGExLDEsMCwwLDAsMCwuMjRWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIxLjMxQTEsMSwwLDAsMCwzNCwyMS4wOFoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM0LDIx''@;'; put 'put ''LjA4LDMwLjg2LDguNDNBMiwyLDAsMCwwLDI4Ljk0LDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIsMjEuMDhhMSwxLDAsMCwwLDAsLjI0VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMS4zMUExLDEsMCwwLDAsMzQsMjEuMDhaTTQsMjlWMjEuNDRMNy4wNiw5SDI4Ljkz''@;'; put 'put ''TDMyLDIxLjQ0VjI5WiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjYiIHk9IjIwIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTMiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTIsMjJ2N2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwy''@;'; put 'put ''LTJWMjJabTI4LDVIMjZWMjVoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0zMi41OCwxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIwLjcxLDdINy4wNkEyLDIsMCww''@;'; put 'put ''LDAsNS4xMyw4LjQ3TDIuMjksMjBIMzMuNzFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMs''@;'; put 'put ''MTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTIsMjJ2N2EyLDIs''@;'; put 'put ''MCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjJabTI4LDVIMjZWMjVoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMjFBNy40Nyw3LjQ3LDAsMCwxLDIyLjU3LDdINy4wNkEy''@;'; put 'put ''LDIsMCwwLDAsNS4xMyw4LjQ3TDIuMjksMjBIMzMuNzFaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAuODYsOC40M0EyLDIsMCwwLDAsMjguOTQsN0g3LjA2QTIsMiwwLDAsMCw1LjEzLDguNDdMMi4yOSwyMEgzMy43MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTIiIGQ9Ik0yLDIydjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyWm0yOCw1SDI2VjI1aDRaIi8+XG4nKSxiLkNsclNoYXBlQmFja3VwUmVzdG9yZT0oMCxwLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIgeT0iMjIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVp''@;'; put 'put ''Z2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTEzLDkuOTIsMTcsNlYxOWExLDEsMCwxLDAsMiwwVjZsMS40NywxLjQ2LDEtMS43OUwxOCwyLjE2LDExLjYxLDguNUExLDEs''@;'; put 'put ''MCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMzEuNTgsMTUuNEgyOS40NmMxLDIuODUsMi4zMSw2LjM3LDIuNTQsNy4wOFYzMEg0VjIyLjQ4QzQuMjgsMjEu''@;'; put 'put ''NjUsNy4wNSwxNCw3LjA1LDE0SDE1VjEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEyLDM0LDIyLDMxLjU4LDE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEu''@;'; put 'put ''MjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiB4PSI2IiB5PSIyMiIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1i''@;'; put 'put ''YWRnZWQiIGQ9Ik0xMyw5LjkyLDE3LDZWMTlhMSwxLDAsMSwwLDIsMFY2bDQsMy45NWExLDEsMCwwLDAsLjcxLjI5bC4xMSwwYTcuNDYsNy40NiwwLDAsMS0xLjI1LTMuNTJMMTgsMi4xNiwxMS42MSw4LjVBMSwxLDAsMCwwLDEzLDkuOTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0zMC44NywxMy40NWE3LjU1LDcuNTUsMCwwLDEtLjg3LjA1QTcuNDYsNy40NiwwLDAsMSwyNS41MSwxMkgyMXYyaDcuOTVDMzAsMTYuOTQsMzEuNzIsMjEuNjUsMzIsMjIuNDhWMzBINFYyMi40''@;'; put 'put ''OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwxNEgxNVYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMzVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4xLDM0LDIyLDMwLjg3LDEzLjQ1WiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''IiB4PSI2IiB5PSIyMiIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIyNiIgeT0iMjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTMsOS45MiwxNyw2VjE5YTEsMSwwLDEsMCwyLDBWNmw0LDMuOTVBMSwxLDAsMSwwLDI0LjM4LDguNUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzAuODQsMTMuMzdBMS45NCwxLjk0LDAsMCwwLDI4LjkzLDEySDIxdjJoNy45NUMzMCwxNi45NCwzMS43MiwyMS42NSwzMiwyMi40OFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDE1VjEySDcuMDdh''@;'; put 'put ''MS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEsMzQsMjIsMzAuODQsMTMuMzdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNFptMjgsNUgyNlYyN2g0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIg''@;'; put 'put ''ZD0iTTEzLDkuOTIsMTcsNlYxOGExLDEsMCwxLDAsMiwwVjZsMS40NywxLjQ2LDEtMS43OUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0''@;'; put 'put ''ZWQiIGQ9Ik0zMS41OCwxNS40SDIyLjIzQTMuNjIsMy42MiwwLDAsMSwyMSwxNS4xNlYxOGEzLDMsMCwxLDEtNiwwVjEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIuODYsMTkuNjgsMi4yNCwyMS40MywyLjA3LDIySDMzLjkzQzMzLjc5LDIxLjQ5LDMzLjI4LDIwLjA3LDMxLjU4''@;'; put 'put ''LDE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAs''@;'; put 'put ''MCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAs''@;'; put 'put ''MCwyLTJWMjRabTI4LDVIMjZWMjdoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMTMsOS45MiwxNyw2VjE4YTEsMSwwLDEsMCwyLDBWNmw0LDMuOTVhMSwxLDAsMCwwLC43MS4yOWwuMTEs''@;'; put 'put ''MGE3LjQ2LDcuNDYsMCwwLDEtMS4yNS0zLjUyTDE4LDIuMTYsMTEuNjEsOC41QTEsMSwwLDAsMCwxMyw5LjkyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zMC44NywxMy40NWE3LjU1LDcu''@;'; put 'put ''NTUsMCwwLDEtLjg3LjA1QTcuNDYsNy40NiwwLDAsMSwyNS41MSwxMkgyMXY2YTMsMywwLDEsMS02LDBWMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMi44NiwxOS42OCwyLjI0LDIxLjQzLDIuMDcsMjJIMzMuOTNDMzMuNzcsMjEuNDMsMzMuMTUsMTkuNywzMC44NywxMy40NVoi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTEiIGQ9Ik0yLDI0djZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI0Wm0yOCw1SDI2VjI3aDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzAuODQsMTMuMzdBMS45NCwxLjk0LDAsMCwwLDI4Ljkz''@;'; put 'put ''LDEySDIxdjZhMywzLDAsMSwxLTYsMFYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLjg2LDE5LjY4LDIuMjQsMjEuNDMsMi4wNywyMkgzMy45M0MzMy43NywyMS40MywzMy4xNCwxOS42OSwzMC44NCwxMy4zN1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMyw5LjkyLDE3LDZWMThhMSwxLDAsMSwwLDIsMFY2bDQsMy45NUExLDEsMCwxLDAsMjQuMzgsOC41TDE4LDIuMTYsMTEuNjEsOC41QTEsMSwwLDAsMCwxMyw5LjkyWiIvPlxuJyksYi5DbHJTaGFwZUJhY2t1cD0oMCxwLmNsckljb25TVkcp''@;'; put 'put ''KCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIgeT0iMjIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTE4LDE5Ljg0bDQuNDctNC40NGgtLjIz''@;'; put 'put ''YTMuNjcsMy42NywwLDAsMS0yLS42MUwxOSwxNlY0YTEsMSwwLDEsMC0yLDBWMTZsLTQtMy45NWExLDEsMCwwLDAtMS40MSwxLjQyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0z''@;'; put 'put ''MS41OCwxNS40SDI5LjQ2YzEsMi44NSwyLjMxLDYuMzcsMi41NCw3LjA4VjMwSDRWMjIuNDhDNC4yOCwyMS42NSw3LjA1LDE0LDcuMDUsMTRIOS41OGEzLDMsMCwwLDEtLjE0LTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMiwyMiwyLDIyLjEsMiwyMi4zM1YzMGEyLDIsMCwwLDAs''@;'; put 'put ''MiwySDMyYTIsMiwwLDAsMCwyLTJWMjIuMzNDMzQsMjIuMTIsMzQsMjIsMzEuNTgsMTUuNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwy''@;'; put 'put ''MS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xLS1iYWRnZWQiIHg9IjYiIHk9IjIyIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiB4PSIyNiIgeT0iMjYiIHdpZHRoPSI0IiBoZWlnaHQ9''@;'; put 'put ''IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAs''@;'; put 'put ''MCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTMwLjg3LDEzLjQ1YTcuNTUsNy41NSwwLDAsMS0uODcuMDUsNy40Niw3LjQ2LDAsMCwxLTMuMzUtLjgsMywzLDAs''@;'; put 'put ''MCwxLS4yNCwxLjNoMi41NEMzMCwxNi45NCwzMS43MiwyMS42NSwzMiwyMi40OFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDkuNThhMywzLDAsMCwxLS4xNC0ySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAs''@;'; put 'put ''MCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEsMzQsMjIsMzAuODcsMTMuNDVaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0i''@;'; put 'put ''NiIgcj0iNSIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjYiIHk9IjIyIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjI2IiB5PSIyNiIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiXG4gICAgICAgICAgICAgICAgZD0iTTMwLjg0LDEzLjM3QTEuOTQsMS45NCwwLDAsMCwyOC45MywxMkgyNi41NWEzLDMsMCwwLDEtLjE0LDJoMi41NEMzMCwxNi45NCwzMS43MiwyMS42NSwzMiwyMi40OFYz''@;'; put 'put ''MEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDkuNThhMywzLDAsMCwxLS4xNC0ySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEsMzQsMjIsMzAu''@;'; put 'put ''ODQsMTMuMzdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEs''@;'; put 'put ''MS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xNi41OCwyMS4yNiwxMC4yLDE0LjkxQTMsMywwLDAsMSw5LjQ0LDEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIuODYs''@;'; put 'put ''MTkuNjgsMi4yNCwyMS40MywyLjA3LDIySDE3LjMzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDRIMjZW''@;'; put 'put ''MjZoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0xOC42NiwyMkgzMy45M2MtLjE1LS41MS0uNjUtMS45My0yLjM1LTYuNkgyNS4zbC01Ljg5LDUuODZaIi8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIiBkPSJNMTgsMTkuODRsNC40Ny00LjQ0aC0uMjNhMy42NCwzLjY0LDAsMCwxLTItLjYxTDE5LDE2VjRhMSwxLDAsMSwwLTIsMFYxNmwtNC0zLjk1YTEsMSwwLDAsMC0xLjQxLDEuNDJa''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0''@;'; put 'put ''Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhM''@;'; put 'put ''MTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMTYuNTgsMjEuMjYsMTAuMiwxNC45MUEzLDMsMCww''@;'; put 'put ''LDEsOS40NCwxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLjg2LDE5LjY4LDIuMjQsMjEuNDMsMi4wNywyMkgxNy4zM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMiwyNHY2''@;'; put 'put ''YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNFptMjgsNEgyNlYyNmg0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQiIGQ9Ik0xOC42NiwyMkgzMy45M2MtLjE3LS41Ny0uNzktMi4zLTMu''@;'; put 'put ''MDYtOC41NWE3LjU1LDcuNTUsMCwwLDEtLjg3LjA1LDcuNDYsNy40NiwwLDAsMS0zLjM1LS44LDMsMywwLDAsMS0uODYsMi4yMWwtNi4zOCw2LjM1WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMu''@;'; put 'put ''OTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xOS40MSwyMS4yNmwtLjc0Ljc0SDMzLjkzYy0uMTctLjU3LS43OS0yLjMxLTMuMDktOC42M0ExLjk0LDEuOTQsMCwwLDAsMjguOTMs''@;'; put 'put ''MTJIMjYuNTVhMywzLDAsMCwxLS43NiwyLjkyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTE2LjU4LDIxLjI2LDEwLjIsMTQuOTFBMywzLDAsMCwxLDkuNDQsMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJD''@;'; put 'put ''Mi44NiwxOS42OCwyLjI0LDIxLjQzLDIuMDcsMjJIMTcuMzNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiBkPSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNFptMjgsNEgyNlYyNmg0WiIvPlxuJyks''@;'; put 'put ''Yi5DbHJTaGFwZURldmljZXM9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwxM0gyNGEyLDIsMCwwLDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0yVjE1QTIsMiwwLDAsMCwzMiwxM1pt''@;'; put 'put ''MCwyVjI2SDI0VjE1Wk0yNCwzMFYyNy42aDhWMzBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTIwLDIySDRWNkgyOHY1aDJWNmEyLDIsMCwwLDAtMi0ySDRBMiwyLDAsMCwwLDIsNlYyMmEyLDIsMCwwLDAsMiwy''@;'; put 'put ''SDIwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMCwyNkg5YTEsMSwwLDAsMCwwLDJIMjBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJN''@;'; put 'put ''MzIsMTNIMjRhMiwyLDAsMCwwLTIsMlYzMGEyLDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYxNUEyLDIsMCwwLDAsMzIsMTNabTAsMlYyOEgyNFYxNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yOCw0SDRBMiwy''@;'; put 'put ''LDAsMCwwLDIsNlYyMmEyLDIsMCwwLDAsMiwyaDh2Mkg5LjMyQTEuMiwxLjIsMCwwLDAsOCwyN2ExLjIsMS4yLDAsMCwwLDEuMzIsMUgxOS45MnYtLjM3SDIwVjIySDRWNkgyOHY1aDJWNkEyLDIsMCwwLDAsMjgsNFoiLz5cbicpLGIuQ2xyU2hhcGVLZXlib2FyZD0oMCxwLmNsckljb25TVkcp''@;'; put 'put ''KCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDhINGEyLDIsMCwwLDAtMiwyVjI2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFptMCwxOEg0VjEwSDMyWiIvPlxuICAgICAgICAgICAgPHJlY3Qg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjciIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTEiIHk9IjEzIiB3aWR0aD0iMiIg''@;'; put 'put ''aGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgeD0iMTUiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtNSIgeD0iMTkiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgeD0iMjMiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iMjciIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgeD0iNyIgeT0iMTciIHdpZHRoPSIyIiBo''@;'; put 'put ''ZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiB4PSIxMSIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xMCIgeD0iMTUiIHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTEiIHg9IjE5IiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3Qg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEyIiB4PSIyMyIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMyIgeD0iMjciIHk9IjE3IiB3aWR0aD0i''@;'; put 'put ''MiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiIHg9IjI3IiB5PSIyMiIgd2lkdGg9IjEuOTQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTE1IiB4PSI3IiB5PSIyMiIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE2IiB4PSIxMS4xMyIgeT0iMjIiIHdpZHRoPSIxMy43NSIgaGVpZ2h0PSIyIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIsOEg0YTIsMiwwLDAsMC0yLDJWMjZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEwQTIsMiwwLDAsMCwzMiw4Wk0xOSwxM2gydjJIMTlabTAsNGgydjJIMTlabS00LTRoMnYy''@;'; put 'put ''SDE1Wm0wLDRoMnYySDE1Wm0tNC00aDJ2MkgxMVpNOSwyNEg3VjIySDlabTAtNUg3VjE3SDlabTAtNEg3VjEzSDlabTIsMmgydjJIMTFabTEzLjg4LDdIMTEuMTNWMjJIMjQuODhaTTI1LDE5SDIzVjE3aDJabTAtNEgyM1YxM2gyWm0zLjk0LDlIMjdWMjJoMS45NFpNMjksMTlIMjdWMTdoMlpt''@;'; put 'put ''MC00SDI3VjEzaDJaIi8+XG4nKSxiLkNsclNoYXBlTW91c2U9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwzNEExMCwxMCwwLDAsMSw4LDI0VjEyYTEwLDEwLDAsMCwxLDIwLDBWMjRBMTAsMTAsMCwwLDEs''@;'; put 'put ''MTgsMzRaTTE4LDRhOCw4LDAsMCwwLTgsOFYyNGE4LDgsMCwwLDAsMTYsMFYxMkE4LDgsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMTVhMSwxLDAsMCwxLTEtMVYxMGExLDEsMCwwLDEs''@;'; put 'put ''MiwwdjRBMSwxLDAsMCwxLDE4LDE1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTAsMTAsMCwwLDAsOCwxMlYyNGExMCwxMCwwLDAsMCwyMCwwVjEyQTEwLDEwLDAsMCwwLDE4LDJabTEuMywxMS40NGExLjMs''@;'; put 'put ''MS4zLDAsMCwxLTIuNiwwVjEwYTEuMywxLjMsMCwwLDEsMi42LDBaIi8+XG4nKSxiLkNsclNoYXBlRGFzaGJvYXJkPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjUuMTgsMTIuMzJsLTUuOTEsNS44MWEzLDMs''@;'; put 'put ''MCwxLDAsMS40MSwxLjQybDUuOTItNS44MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDQuMjVBMTYuNDksMTYuNDksMCwwLDAsNS40LDMxLjRsLjMuMzVIMzAuM2wuMy0uMzVBMTYuNDksMTYuNDks''@;'; put 'put ''MCwwLDAsMTgsNC4yNVptMTEuMzQsMjUuNUg2LjY2YTE0LjQzLDE0LjQzLDAsMCwxLTMuMTEtNy44NEg3di0ySDMuNTVBMTQuNDEsMTQuNDEsMCwwLDEsNywxMS4yOWwyLjQ1LDIuNDUsMS40MS0xLjQxTDguNDMsOS44N0ExNC40MSwxNC40MSwwLDAsMSwxNyw2LjI5djMuNWgyVjYuM2ExNC40''@;'; put 'put ''NywxNC40NywwLDAsMSwxMy40LDEzLjYxSDI4LjkydjJoMy41M0ExNC40MywxNC40MywwLDAsMSwyOS4zNCwyOS43NVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xNS44NSwx''@;'; put 'put ''OC42OWEzLDMsMCwxLDAsNC44My44NWw1LjkyLTUuODEtMS40MS0xLjQxLTUuOTEsNS44MUEzLDMsMCwwLDAsMTUuODUsMTguNjlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJN''@;'; put 'put ''MzIuNTgsMTNhNy40NSw3LjQ1LDAsMCwxLTIuMDYuNDQsMTQuNCwxNC40LDAsMCwxLDEuOTMsNi40M0gyOC45MnYyaDMuNTNhMTQuNDMsMTQuNDMsMCwwLDEtMy4xMSw3Ljg0SDYuNjZhMTQuNDMsMTQuNDMsMCwwLDEtMy4xMS03Ljg0SDd2LTJIMy41NUExNC40MSwxNC40MSwwLDAsMSw3LDEx''@;'; put 'put ''LjI5bDIuNDUsMi40NSwxLjQxLTEuNDFMOC40Myw5Ljg3QTE0LjQxLDE0LjQxLDAsMCwxLDE3LDYuMjl2My41aDJWNi4zQTE0LjQxLDE0LjQxLDAsMCwxLDIyLjU4LDdhNy41Miw3LjUyLDAsMCwxLS4wOC0xLDcuNTIsNy41MiwwLDAsMSwuMDktMS4wOUExNi40OSwxNi40OSwwLDAsMCw1LjQs''@;'; put 'put ''MzEuNGwuMy4zNUgzMC4zbC4zLS4zNWExNi40NSwxNi40NSwwLDAsMCwyLTE4LjM2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiBy''@;'; put 'put ''PSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDQuMjVBMTYuNDksMTYuNDksMCwwLDAsNS40LDMxLjRsLjMuMzVIMzAuM2wuMy0uMzVBMTYuNDksMTYuNDksMCwwLDAsMTgsNC4yNVptOC42LDkuNDgtNS45''@;'; put 'put ''Miw1LjgxYTMsMywwLDEsMS0xLjQxLTEuNDJsNS45MS01LjgxWm0tMjMsNi4xN0g3djJIMy41NmMwLS4zOS0uMDUtLjc3LS4wNS0xLjE3UzMuNTMsMjAuMTgsMy41NSwxOS45Wm00Ljg4LTEwLDIuNDYsMi40Nkw5LjQ3LDEzLjc0LDcsMTEuMjlBMTQuNTcsMTQuNTcsMCwwLDEsOC40Myw5Ljg3''@;'; put 'put ''Wk0xOSw5Ljc5SDE3VjYuMjljLjMyLDAsLjYzLDAsMSwwcy43LDAsMSwuMDVaTTMyLjQ5LDIwLjc0YzAsLjM5LDAsLjc5LS4wNSwxLjE3SDI4Ljkydi0yaDMuNTNDMzIuNDcsMjAuMTgsMzIuNDksMjAuNDYsMzIuNDksMjAuNzRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMi41OCwxM2E3LjQ2LDcuNDYsMCwwLDEtMTAtOC4xMkExNi40OSwxNi40OSwwLDAsMCw1LjQsMzEuNGwuMy4zNUgzMC4zbC4zLS4zNWExNi40NSwxNi40NSwwLDAsMCwyLTE4LjM2Wk0xNyw2LjI5Yy4z''@;'; put 'put ''MiwwLC42MywwLDEsMHMuNywwLDEsLjA1djMuNUgxN1pNNywyMS45MUgzLjU2YzAtLjM5LS4wNS0uNzctLjA1LTEuMTdzMC0uNTYsMC0uODNIN1ptMi41MS04LjE2TDcsMTEuMjlBMTQuNTcsMTQuNTcsMCwwLDEsOC40Myw5Ljg3bDIuNDYsMi40NlptMTAuNjIsOS4xOWEzLDMsMCwxLDEtLjgy''@;'; put 'put ''LTQuODFsNS45MS01LjgxLDEuNDEsMS40MS01LjkyLDUuODFBMywzLDAsMCwxLDIwLjA5LDIyLjkzWm0xMi4zNS0xSDI4Ljkydi0yaDMuNTNjMCwuMjgsMCwuNTUsMCwuODNTMzIuNDcsMjEuNTIsMzIuNDQsMjEuOTFaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuJyksYi5DbHJTaGFwZUhvc3Q9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9''@;'; put 'put ''Ik0xOCwyNC4zYTIuNDgsMi40OCwwLDEsMCwyLjQ4LDIuNDdBMi40OCwyLjQ4LDAsMCwwLDE4LDI0LjNabTAsMy42YTEuMTMsMS4xMywwLDEsMSwxLjEzLTEuMTJBMS4xMywxLjEzLDAsMCwxLDE4LDI3LjlaIi8+PHJlY3QgeD0iMTMuNSIgeT0iMjAuNyIgd2lkdGg9IjkiIGhlaWdodD0iMS40''@;'; put 'put ''NCIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjUuNjUsMy42SDEwLjM1QTEuMzUsMS4zNSwwLDAsMCw5LDQuOTVWMzIuNEgyN1Y0Ljk1QTEuMzUsMS4zNSwwLDAsMCwyNS42NSwzLjZabS0uNDUsMjdIMTAu''@;'; put 'put ''OFY1LjRIMjUuMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTIuNiIgeT0iNy4yIiB3aWR0aD0iMTAuOCIgaGVpZ2h0PSIxLjQ0Ii8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjEyLjYiIHk9IjEwLjgiIHdpZHRoPSIxMC44IiBoZWlnaHQ9IjEuNDQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE1''@;'; put 'put ''LjIsMjcuOGMwLDEuNSwxLjIsMi44LDIuOCwyLjhzMi44LTEuMiwyLjgtMi44UzE5LjUsMjUsMTgsMjVTMTUuMiwyNi4yLDE1LjIsMjcuOHogTTE5LjIsMjcuOGMwLDAuNy0wLjYsMS4yLTEuMiwxLjJzLTEuMi0wLjYtMS4yLTEuMnMwLjYtMS4yLDEuMi0xLjJTMTkuMiwyNy4xLDE5LjIsMjcu''@;'; put 'put ''OHoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMTMiIHk9IjIxIiB3aWR0aD0iMTAiIGhlaWdodD0iMS42Ii8+XG4gICAgICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHBvaW50cz0iMjEuMyw2IDEyLDYgMTIsNy42IDIwLjQsNy42Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQt''@;'; put 'put ''LWFsZXJ0ZWQiIGQ9Ik0xMiwxMS42aDYuNmMwLTAuNiwwLjItMS4xLDAuNC0xLjZoLTdWMTEuNnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTI2LDE1LjRWMzJIMTBWNGgx''@;'; put 'put ''Mi41bDEuMS0ySDkuNUM4LjcsMiw4LDIuNyw4LDMuNVYzNGgyMFYxNS40SDI2eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxLjFMMjEuMSwx''@;'; put 'put ''MWMtMC40LDAuNi0wLjIsMS40LDAuMywxLjhjMC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJoMTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01LjctOS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTE1LjIsMjcuOGMwLDEuNSwxLjIsMi44LDIuOCwyLjhzMi44LTEuMiwyLjgtMi44UzE5LjUsMjUsMTgsMjVTMTUuMiwyNi4yLDE1LjIsMjcuOHog''@;'; put 'put ''TTE5LjIsMjcuOGMwLDAuNy0wLjYsMS4yLTEuMiwxLjJzLTEuMi0wLjYtMS4yLTEuMnMwLjYtMS4yLDEuMi0xLjJTMTkuMiwyNy4xLDE5LjIsMjcuOHoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1i''@;'; put 'put ''YWRnZWQiIHg9IjEzIiB5PSIyMSIgd2lkdGg9IjEwIiBoZWlnaHQ9IjEuNiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTI0LDEwLjVjLTAuMS0wLjItMC4yLTAuMy0wLjMtMC41''@;'; put 'put ''SDEydjEuNmgxMlYxMC41eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTEyLDZ2MS42aDEwLjdjLTAuMS0wLjUtMC4yLTEuMS0wLjItMS42SDEyeiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgZD0iTTI2LDEyLjNWMzJIMTBWNGgxMi44YzAuMi0wLjcsMC41LTEuNCwwLjktMkg5LjVDOC43LDIsOCwyLjcsOCwzLjVWMzRoMjBWMTMuMkMyNy4zLDEzLDI2LjYsMTIu''@;'; put 'put ''NywyNiwxMi4zeiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI2LjUsMmgtMTdDOC43LDIsOCwyLjcsOCwzLjVWMzRoMjBWMy41QzI4LDIuNywyNy4zLDIsMjYuNSwyeiBNMTgsMzAuNWMtMS41LDAtMi44LTEuMi0yLjgtMi44UzE2LjUsMjUsMTgsMjVzMi44LDEuMiwyLjgsMi44UzE5LjUsMzAu''@;'; put 'put ''NSwxOCwzMC41eiBNMjMsMjIuNkgxM1YyMWgxMFYyMi42eiBNMjQsMTEuNkgxMlYxMGgxMlYxMS42eiBNMjQsNy42SDEyVjZoMTJWNy42eiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgY3g9IjE4IiBjeT0iMjcuOCIg''@;'; put 'put ''cj0iMS4yIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTIyLjIsMTUuM2MtMiwwLTMuNy0xLjYtMy43LTMuN0gxMlYxMGg2LjljMC0wLjEsMC4xLTAuMiwwLjEtMC4ybDEuMi0yLjJI''@;'; put 'put ''MTJWNmg5LjJsMi4zLTRoLTE0QzguNywyLDgsMi43LDgsMy41VjM0aDIwVjE1LjNIMjIuMnogTTE4LDMwLjVjLTEuNSwwLTIuOC0xLjItMi44LTIuOFMxNi41LDI1LDE4LDI1czIuOCwxLjIsMi44LDIuOFMxOS41LDMwLjUsMTgsMzAuNXogTTIzLDIyLjZIMTNWMjFoMTBWMjIuNnoiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGN4PSIxOCIgY3k9IjI3LjgiIHI9IjEuMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi45LDFsLTUuNyw5LjljLTAuMywwLjYtMC4xLDEuNCwwLjUsMS43YzAuMiwwLjEsMC40LDAuMiwwLjYsMC4yaDExLjRjMC43LDAsMS4zLTAuNiwxLjMtMS4zYzAtMC4yLTAuMS0wLjQtMC4yLTAuNkwyOS4xLDFjLTAuNC0w''@;'; put 'put ''LjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC43LDI3LDAuOCwyNi45LDF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yNCwxMC4zdjEuMkgxMlYxMGgxMS44Yy0wLjUtMC43LTAuOC0x''@;'; put 'put ''LjUtMS0yLjRIMTJWNmgxMC41YzAsMCwwLTAuMSwwLTAuMWMwLTEuNCwwLjQtMi43LDEuMS0zLjlIOS41QzguNywyLDgsMi43LDgsMy41VjM0aDIwVjEzLjFDMjYuNCwxMi42LDI1LDExLjcsMjQsMTAuM3ogTTE4LDMwLjVjLTEuNSwwLTIuOC0xLjItMi44LTIuOFMxNi41LDI1LDE4LDI1czIu''@;'; put 'put ''OCwxLjIsMi44LDIuOFMxOS41LDMwLjUsMTgsMzAuNXpNMjMsMjIuNkgxM1YyMWgxMFYyMi42eiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGN4PSIxOCIgY3k9IjI3LjgiIHI9IjEuMiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjUuOSIgcj0iNSIvPlxuJyksYi5DbHJTaGFwZVN0b3JhZ2U9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMyw2LjY5aDBjLS4xOC0zLjQxLTkuNDctNC4zMy0xNS00LjMzUzMsMy4yOSwzLDYuNzhWMjkuMzdjMCwzLjQ5LDkuNDMsNC40MywxNSw0LjQzczE1LS45MywxNS00LjQzVjYuNzhzMCwwLDAsMFMzMyw2Ljcs''@;'; put 'put ''MzMsNi42OVptLTIsNy41NmMtLjMzLjg2LTUuMDYsMi40NS0xMywyLjQ1QTM3LjQ1LDM3LjQ1LDAsMCwxLDcsMTUuMzR2Mi4wOEE0My4zMiw0My4zMiwwLDAsMCwxOCwxOC43YzQsMCw5LjkzLS40OCwxMy0ydjUuMTdjLS4zMy44Ni01LjA2LDIuNDUtMTMsMi40NUEzNy40NSwzNy40NSwwLDAs''@;'; put 'put ''MSw3LDIyLjkyVjI1YTQzLjMyLDQzLjMyLDAsMCwwLDExLDEuMjhjNCwwLDkuOTMtLjQ4LDEzLTJ2NS4xYy0uMzUuODYtNS4wOCwyLjQ1LTEzLDIuNDVTNS4zLDMwLjIsNSwyOS4zN1Y2LjgyQzUuMyw2LDEwLDQuMzYsMTgsNC4zNmM3Ljc3LDAsMTIuNDYsMS41MywxMywyLjM3LS41Mi44Ny01''@;'; put 'put ''LjIxLDIuMzktMTMsMi4zOUEzNy42LDM3LjYsMCwwLDEsNyw3Ljc2VjkuODVhNDMuNTMsNDMuNTMsMCwwLDAsMTEsMS4yN2M0LDAsOS45My0uNDgsMTMtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MS0tYWxlcnRlZCIgZD0iTTE5LjUxLDkuMDksMTgsOS4xMUEzNy42LDM3LjYsMCwwLDEsNyw3Ljc2VjkuODVhNDMuNTMsNDMuNTMsMCwwLDAsMTEsMS4yN2guNjFBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0yOC44MywxNS40QTM4LjM3LDM4LjM3LDAsMCwxLDE4LDE2LjcsMzcuNDUsMzcuNDUsMCwwLDEsNywxNS4zNHYyLjA4QTQzLjMzLDQzLjMzLDAsMCwwLDE4LDE4LjdjNCwwLDkuOTMtLjQ4LDEzLTJ2NS4xN2MtLjMz''@;'; put 'put ''Ljg2LTUuMDYsMi40NS0xMywyLjQ1QTM3LjQ1LDM3LjQ1LDAsMCwxLDcsMjIuOTJWMjVhNDMuMzMsNDMuMzMsMCwwLDAsMTEsMS4yOGM0LDAsOS45My0uNDgsMTMtMnY1LjFjLS4zNS44Ni01LjA4LDIuNDUtMTMsMi40NVM1LjMsMzAuMiw1LDI5LjM3VjYuODJDNS4zLDYsMTAsNC4zNiwxOCw0''@;'; put 'put ''LjM2YzEuNSwwLDIuODkuMDYsNC4xNS4xNmwxLjEtMS45Yy0xLjg2LS4xOC0zLjctLjI2LTUuMjUtLjI2LTUuNTcsMC0xNSwuOTMtMTUsNC40M1YyOS4zN2MwLDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUtLjkzLDE1LTQuNDN2LTE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwx''@;'; put 'put ''LjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNNyw3Ljc2VjkuODVhNDMuNTMsNDMuNTMsMCwwLDAsMTEsMS4yNyw1NC44Miw1NC44MiwwLDAs''@;'; put 'put ''MCw2LjItLjM2LDcuNSw3LjUsMCwwLDEtMS4xMy0xLjg4Yy0xLjUuMTUtMy4yLjI0LTUuMDcuMjRBMzcuNiwzNy42LDAsMCwxLDcsNy43NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQi''@;'; put 'put ''IGQ9Ik0zMSwxMy40M3YuODJjLS4zMy44Ni01LjA2LDIuNDUtMTMsMi40NUEzNy40NSwzNy40NSwwLDAsMSw3LDE1LjM0djIuMDhBNDMuMzMsNDMuMzMsMCwwLDAsMTgsMTguN2M0LDAsOS45My0uNDgsMTMtMnY1LjE3Yy0uMzMuODYtNS4wNiwyLjQ1LTEzLDIuNDVBMzcuNDUsMzcuNDUsMCww''@;'; put 'put ''LDEsNywyMi45MlYyNWE0My4zMyw0My4zMywwLDAsMCwxMSwxLjI4YzQsMCw5LjkzLS40OCwxMy0ydjUuMWMtLjM1Ljg2LTUuMDgsMi40NS0xMywyLjQ1UzUuMywzMC4yLDUsMjkuMzdWNi44MkM1LjMsNiwxMCw0LjM2LDE4LDQuMzZjMS43LDAsMy4yNS4wOCw0LjY0LjJhNy40NCw3LjQ0LDAs''@;'; put 'put ''MCwxLC42Ny0xLjk0Yy0xLjg4LS4xOC0zLjc1LS4yNi01LjMxLS4yNi01LjU3LDAtMTUsLjkzLTE1LDQuNDNWMjkuMzdjMCwzLjQ5LDkuNDMsNC40MywxNSw0LjQzczE1LS45MywxNS00LjQzVjEyLjg3QTcuNDUsNy40NSwwLDAsMSwzMSwxMy40M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2ly''@;'; put 'put ''Y2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0x''@;'; put 'put ''Ny45MSwxOC4yOGM4LjA4LDAsMTQuNjYtMS43NCwxNS4wOS0zLjk0VjguNTljLS40MywyLjItNywzLjk0LTE1LjA5LDMuOTRBMzkuNCwzOS40LDAsMCwxLDYuMjUsMTFWOWEzOS40LDM5LjQsMCwwLDAsMTEuNjYsMS41MUMyNiwxMC41MywzMi41Miw4Ljc5LDMzLDYuNjFoMEMzMi44LDMuMiwy''@;'; put 'put ''My41MiwyLjI4LDE4LDIuMjhTMywzLjIxLDMsNi43MVYyOS4yOWMwLDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUtLjkzLDE1LTQuNDNWMjQuMDlDMzIuNTcsMjYuMjgsMjYsMjgsMTcuOTEsMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMjYuNTJ2LTJBMzkuNCwzOS40LDAsMCwwLDE3LjkxLDI2''@;'; put 'put ''QzI2LDI2LDMyLjU3LDI0LjI4LDMzLDIyLjA5VjE2LjM0Yy0uNDMsMi4yLTcsMy45NC0xNS4wOSwzLjk0QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDE4Ljc3di0yQTM5LjQsMzkuNCwwLDAsMCwxNy45MSwxOC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTcuOTEsMjAuMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMTguNzd2LTJhMzkuNCwzOS40LDAsMCwwLDExLjY2LDEuNTFjNi45LDAsMTIuNy0xLjI3LDE0LjUxLTNIMjIuMjNhMy42NywzLjY3LDAsMCwxLTMuNTUtMi43''@;'; put 'put ''NWgtLjc3QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDExVjlhMzkuNCwzOS40LDAsMCwwLDExLjY2LDEuNTFoLjgyQTMuNjQsMy42NCwwLDAsMSwxOSw5Ljc1bDQuMTctNy4yMmMtMS44NS0uMTgtMy42OC0uMjUtNS4yMS0uMjUtNS41NywwLTE1LC45My0xNSw0LjQzVjI5LjI5YzAsMy40OSw5LjQz''@;'; put 'put ''LDQuNDMsMTUsNC40M3MxNS0uOTMsMTUtNC40M1YyNC4wOUMzMi41NywyNi4yOCwyNiwyOCwxNy45MSwyOEEzOS40LDM5LjQsMCwwLDEsNi4yNSwyNi41MnYtMkEzOS40LDM5LjQsMCwwLDAsMTcuOTEsMjZDMjYsMjYsMzIuNTcsMjQuMjgsMzMsMjIuMDlWMTYuMzRDMzIuNTcsMTguNTMsMjYs''@;'; put 'put ''MjAuMjgsMTcuOTEsMjAuMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDFsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMu''@;'; put 'put ''NjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDFBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xNy45MSwxOC4yOGM4LjA4LDAs''@;'; put 'put ''MTQuNjYtMS43NCwxNS4wOS0zLjk0di0xLjZhNy40Nyw3LjQ3LDAsMCwxLTcuMzgtLjgsNDguMyw0OC4zLDAsMCwxLTcuNzEuNTlBMzkuNCwzOS40LDAsMCwxLDYuMjUsMTFWOWEzOS40LDM5LjQsMCwwLDAsMTEuNjYsMS41MSw1MSw1MSwwLDAsMCw2LS4zNCw3LjQ2LDcuNDYsMCwwLDEtLjU5''@;'; put 'put ''LTcuNjVjLTEuODctLjE4LTMuNzMtLjI2LTUuMjgtLjI2LTUuNTcsMC0xNSwuOTMtMTUsNC40M1YyOS4yOWMwLDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUtLjkzLDE1LTQuNDNWMjQuMDlDMzIuNTcsMjYuMjgsMjYsMjgsMTcuOTEsMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMjYuNTJ2LTJB''@;'; put 'put ''MzkuNCwzOS40LDAsMCwwLDE3LjkxLDI2QzI2LDI2LDMyLjU3LDI0LjI4LDMzLDIyLjA5VjE2LjM0Yy0uNDMsMi4yLTcsMy45NC0xNS4wOSwzLjk0QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDE4Ljc3di0yQTM5LjQsMzkuNCwwLDAsMCwxNy45MSwxOC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8''@;'; put 'put ''Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI1Ljg2IiByPSI1Ii8+XG4nKSxiLkNsclNoYXBlQ2x1c3Rlcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMzYsOEgyNy41djJI''@;'; put 'put ''MzFWMzBIMjcuNXYySDMzVjkuNjdBMS42NSwxLjY1LDAsMCwwLDMxLjM2LDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUsMTBIOC41VjhINC42NEExLjY1LDEuNjUsMCwwLDAsMyw5LjY3VjMySDguNVYzMEg1''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz48ZWxsaXBzZSBjeD0iMTguMDEiIGN5PSIyNS45OSIgcng9IjEuOCIgcnk9IjEuNzkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MjQuMzIsNEgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlY1LjY4QTEuNjgsMS42OCwwLDAsMCwyNC4zMiw0Wk0yNCwzMEgxMlY2SDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzLjUiIHk9''@;'; put 'put ''IjkuMjEiIHdpZHRoPSI5IiBoZWlnaHQ9IjEuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEwSDguNVY4SDQuNjRBMS42NSwxLjY1LDAsMCwwLDMsOS42N1YzMkg4LjVWMzBINVoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+PGVsbGlwc2UgY3g9IjE4LjAxIiBjeT0iMjUuOTkiIHJ4PSIxLjgiIHJ5PSIxLjc5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTE5LDkuODlsLjM5LS42OEgxMy41djEuNmg1LjE3QTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNCwz''@;'; put 'put ''MEgxMlY2aDkuMjlsMS4xNS0ySDExLjY4QTEuNjgsMS42OCwwLDAsMCwxMCw1LjY4VjMySDI2VjE1LjRIMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMSAxNS40''@;'; put 'put ''IDMxIDMwIDI3LjUgMzAgMjcuNSAzMiAzMyAzMiAzMyAxNS40IDMxIDE1LjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCww''@;'; put 'put ''LDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTUsMTBIOC41VjhINC42NEExLjY1LDEuNjUsMCwwLDAsMyw5LjY3VjMySDguNVYzMEg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+PGVsbGlwc2UgY3g9IjE4LjAxIiBjeT0iMjUuOTkiIHJ4PSIx''@;'; put 'put ''LjgiIHJ5PSIxLjc5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzLjUiIHk9IjkuMjEiIHdpZHRoPSI5IiBoZWlnaHQ9IjEuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQsMTAuNDlWMzBIMTJWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlYxMi4zNEE3LjUzLDcuNTMsMCwwLDEsMjQsMTAuNDla''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSwxMy40M1YzMEgyNy41djJIMzNWMTIuODdBNy40NSw3LjQ1LDAsMCwxLDMxLDEzLjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTMxLjM2LDhIMjcuNVYzMkgzM1Y5LjY3QTEuNjUsMS42NSwwLDAsMCwzMS4zNiw4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsOS42N1YzMkg4LjVWOEg0LjY0QTEuNjUsMS42NSwwLDAsMCwzLDku''@;'; put 'put ''NjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMzIsNEgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlY1LjY4QTEuNjgsMS42OCwwLDAsMCwyNC4zMiw0Wk0xOCwyNy43OUExLjc5LDEuNzksMCwx''@;'; put 'put ''LDEsMTkuODEsMjYsMS44LDEuOCwwLDAsMSwxOCwyNy43OVpNMjMsMTAuNkgxM1Y5SDIzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsOS42N1YzMkg4LjVWOEg0LjY0QTEuNjUsMS42NSwwLDAsMCwzLDkuNjdaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNy41IiB5PSIxNS40IiB3aWR0aD0iNS41IiBoZWlnaHQ9IjE2LjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSwxMy41NmEzLjY4LDMuNjgsMCwwLDEtLjMxLTNIMTNWOWg2LjU2bDIuODktNUgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlYxNS40SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOSwxMy41NlpNMTgsMjcu''@;'; put 'put ''NzlBMS43OSwxLjc5LDAsMSwxLDE5LjgxLDI2LDEuOCwxLjgsMCwwLDEsMTgsMjcuNzlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgs''@;'; put 'put ''MCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMyw5LjY3VjMySDguNVY4SDQuNjRBMS42NSwxLjY1LDAsMCwwLDMsOS42N1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YTcuNDksNy40OSwwLDAsMSwu''@;'; put 'put ''MjgtMkgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlYxMi4zNEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2Wk0xOCwyNy43OUExLjc5LDEuNzksMCwxLDEsMTkuODEsMjYsMS44LDEuOCwwLDAsMSwxOCwyNy43OVpNMjMsMTAuNkgxM1Y5SDIzWiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDcsNy40NywwLDAsMS0yLjUtLjQ0VjMySDMzVjEyLjg3QTcuNDcsNy40NywwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZUFwcGxpY2F0''@;'; put 'put ''aW9ucz0oMCxwLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjggOCA0IDggNCAxMCAxMCAxMCAxMCA0IDggNCA4IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDggMTUgOCAxNSAxMCAy''@;'; put 'put ''MSAxMCAyMSA0IDE5IDQgMTkgOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgNCAzMCA4IDI2IDggMjYgMTAgMzIgMTAgMzIgNCAzMCA0IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE5IDQgMTkgNCAyMSAxMCAyMSAxMCAxNSA4IDE1IDggMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDE5IDE1''@;'; put 'put ''IDE5IDE1IDIxIDIxIDIxIDIxIDE1IDE5IDE1IDE5IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMCAxOSAyNiAxOSAyNiAyMSAzMiAyMSAzMiAxNSAzMCAxNSAzMCAxOSIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAzMCA0IDMwIDQgMzIgMTAgMzIgMTAgMjYgOCAyNiA4IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICAgICAgICAgICAgPHBvbHln''@;'; put 'put ''b24gcG9pbnRzPSIxOSAzMCAxNSAzMCAxNSAzMiAyMSAzMiAyMSAyNiAxOSAyNiAxOSAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMzAgMjYgMzAgMjYgMzIgMzIgMzIgMzIgMjYgMzAgMjYg''@;'; put 'put ''MzAgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjggOCA0IDggNCAxMCAxMCAxMCAxMCA0IDggNCA4IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEt''@;'; put 'put ''LWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSA4IDE1IDggMTUgMTAgMjEgMTAgMjEgNCAxOSA0IDE5IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9p''@;'; put 'put ''bnRzPSI4IDE5IDQgMTkgNCAyMSAxMCAyMSAxMCAxNSA4IDE1IDggMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAxOSAxNSAxOSAxNSAyMSAyMSAyMSAyMSAxNSAx''@;'; put 'put ''OSAxNSAxOSAxOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjMwIDE5IDI2IDE5IDI2IDIxIDMyIDIxIDMyIDE1IDMwIDE1IDMwIDE5IiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAzMCA0IDMwIDQgMzIgMTAgMzIgMTAgMjYgOCAyNiA4IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRn''@;'; put 'put ''ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTkgMzAgMTUgMzAgMTUgMzIgMjEgMzIgMjEgMjYgMTkgMjYgMTkgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9p''@;'; put 'put ''bnRzPSIzMCAzMCAyNiAzMCAyNiAzMiAzMiAzMiAzMiAyNiAzMCAyNiAzMCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDggNCA4IDQgMTAgMTAgMTAgMTAgNCA4IDQgOCA4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE5IDQgMTkgNCAyMSAxMCAyMSAxMCAxNSA4IDE1IDggMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cG9seWdvbiBwb2ludHM9IjE5IDE5IDE1IDE5IDE1IDIxIDIxIDIxIDIxIDE1IDE5IDE1IDE5IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMCAxNSAzMCAxOSAy''@;'; put 'put ''NiAxOSAyNiAyMSAzMiAyMSAzMiAxNSAzMCAxNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAzMCA0IDMwIDQgMzIgMTAgMzIgMTAgMjYgOCAyNiA4IDMwIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAzMCAxNSAzMCAxNSAzMiAyMSAzMiAyMSAyNiAxOSAyNiAxOSAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMzAgMjYgMzAgMjYgMzIgMzIgMzIgMzIgMjYgMzAgMjYgMzAgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksOEgxNXYyaDRMMTksOS44OSwyMSw2LjVWNEgxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUEx''@;'; put 'put ''LjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOS0tYWxlcnRlZCBjbHItaS1hbGVy''@;'; put 'put ''dCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iNCIgd2lkdGg9IjYiIGhl''@;'; put 'put ''aWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01Ii8+XG4gICAgICAgICAgICA8cmVjdCB4''@;'; put 'put ''PSIxNSIgeT0iMjYiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI2IiB5PSI0IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC03''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNiIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTgiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI2IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtOSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIg''@;'; put 'put ''eT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0''@;'; put 'put ''IHg9IjE1IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjYiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNiIgeT0iMjYiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTctLWFsZXJ0ZWQiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0xNSwxMGg0TDE5LDkuODksMjEsNi41VjRIMTVaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC04LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIu''@;'; put 'put ''MjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC05LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cmVj''@;'; put 'put ''dCB4PSI0IiB5PSI0IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI0IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0''@;'; put 'put ''IHg9IjE1IiB5PSI0IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTYtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJl''@;'; put 'put ''Y3QgeD0iMjYiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTctLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTktLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxi''@;'; put 'put ''LkNsclNoYXBlQnVpbGRpbmc9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5Ljg4LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAsNCw1LjEyVjMzSDIyVjUuMTJBMi4xMiwyLjEyLDAsMCwwLDE5Ljg4LDNaTTIwLDMxSDE3VjI4SDl2M0g2VjUuMTJBLjEyLjEyLDAsMCwxLDYuMTIsNUgxOS44''@;'; put 'put ''OGEuMTIuMTIsMCwwLDEsLjEyLjEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0''@;'; put 'put ''IHg9IjE2IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1i''@;'; put 'put ''YWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMjMiIHdpZHRoPSIy''@;'; put 'put ''IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIy''@;'; put 'put ''MyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE0LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNi0tYmFkZ2VkIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE3LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIzIiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''OS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEsMTMuNDNWMzFIMjN2MkgzM1YxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yMC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8''@;'; put 'put ''Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTIxLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTMiIHdpZHRoPSIyIiBoZWln''@;'; put 'put ''aHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC01LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5''@;'; put 'put ''PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxyZWN0IHg9IjgiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIx''@;'; put 'put ''OCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTE0LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTYtLWFsZXJ0ZWQiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0yMCwzMUgxN1YyOEg5djNINlY1LjEyQS4xMi4xMiwwLDAsMSw2LjEyLDVIMTkuODhhLjEyLjEyLDAsMCwxLC4xMi4xMlY4LjI0bDItMy40MUEyLjEyLDIuMTIsMCwwLDAsMTkuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIMjJWMTUuMzhhMy42''@;'; put 'put ''OCwzLjY4LDAsMCwxLTItLjc0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTE3LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjMxIDE1LjQgMzEgMzEgMjMgMzEgMjMgMzMgMzMgMzMgMzMgMTUuNCAzMSAxNS40IiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTgtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjku''@;'; put 'put ''MDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xOS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDhIMjJWMzNIMzNWMTBBMiwyLDAsMCwwLDMx''@;'; put 'put ''LDhaTTI2LDI1SDI0VjIzaDJabTAtNUgyNFYxOGgyWm0wLTVIMjRWMTNoMlptNCwxMEgyOFYyM2gyWm0wLTVIMjhWMThoMlptMC01SDI4VjEzaDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuODgsM0g2LjEyQTIu''@;'; put 'put ''MTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIOVYzMGg2djNoNVY1LjEyQTIuMTIsMi4xMiwwLDAsMCwxNy44OCwzWk05LDI1SDdWMjNIOVptMC01SDdWMThIOVptMC01SDdWMTNIOVptMC01SDdWOEg5Wm00LDE1SDExVjIzaDJabTAtNUgxMVYxOGgyWm0wLTVIMTFWMTNoMlptMC01SDExVjhoMlpt''@;'; put 'put ''NCwxNUgxNVYyM2gyWm0wLTVIMTVWMThoMlptMC01SDE1VjEzaDJabTAtNUgxNVY4aDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIOVYzMGg2djNo''@;'; put 'put ''NVYxNC42NGEzLjY3LDMuNjcsMCwwLDEtMS00Ljc2bDEtMS42NVY1LjEyQTIuMTIsMi4xMiwwLDAsMCwxNy44OCwzWk05LDI1SDdWMjNIOVptMC01SDdWMThIOVptMC01SDdWMTNIOVptMC01SDdWOEg5Wm00LDE1SDExVjIzaDJabTAtNUgxMVYxOGgyWm0wLTVIMTFWMTNoMlptMC01SDExVjho''@;'; put 'put ''MlptNCwxNUgxNVYyM2gyWm0wLTVIMTVWMThoMlptMC01SDE1VjEzaDJabTAtNUgxNVY4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNGwtLjIzLDBWMzNIMzNWMTUu''@;'; put 'put ''NFpNMjYsMjVIMjRWMjNoMlptMC01SDI0VjE4aDJabTQsNUgyOFYyM2gyWm0wLTVIMjhWMThoMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgs''@;'; put 'put ''MS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0xNy44OCwzSDYuMTJBMi4xMiwyLjEyLDAsMCwwLDQsNS4xMlYzM0g5VjMwaDZ2M2g1VjUuMTJBMi4xMiwyLjEyLDAsMCwwLDE3Ljg4LDNaTTksMjVIN1YyM0g5Wm0wLTVIN1YxOEg5Wm0wLTVIN1YxM0g5Wm0wLTVIN1Y4SDlabTQsMTVIMTFWMjNoMlptMC01''@;'; put 'put ''SDExVjE4aDJabTAtNUgxMVYxM2gyWm0wLTVIMTFWOGgyWm00LDE1SDE1VjIzaDJabTAtNUgxNVYxOGgyWm0wLTVIMTVWMTNoMlptMC01SDE1VjhoMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMzAsMTMuNVYxNUgyOFYxMy4yMkE3LjUsNy41LDAsMCwxLDIyLjc4LDhIMjJWMzNIMzNWMTIuODdBNy40Nyw3LjQ3LDAsMCwxLDMwLDEzLjVaTTI2LDI1SDI0VjIzaDJabTAtNUgyNFYxOGgyWm0wLTVIMjRWMTNoMlptNCwxMEgyOFYyM2gyWm0wLTVIMjhWMThoMloiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMzEsOEgyM3YyaDhWMzFIMjN2MkgzM1YxMEEyLDIsMCwwLDAsMzEsOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNI''@;'; put 'put ''MjJWNS4xMkEyLjEyLDIuMTIsMCwwLDAsMTkuODgsM1pNMjAsMzFIMTdWMjhIOXYzSDZWNS4xMkEuMTIuMTIsMCwwLDEsNi4xMiw1SDE5Ljg4YS4xMi4xMiwwLDAsMSwuMTIuMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJl''@;'; put 'put ''Y3QgeD0iOCIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cbiAgICAgICAgICAgIDxyZWN0IHg9''@;'; put 'put ''IjE2IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtOSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEyIi8+XG4gICAgICAgICAgICA8cmVjdCB4''@;'; put 'put ''PSIxMiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMyIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMTQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIzIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE1Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9''@;'; put 'put ''IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTciLz5cbiAgICAgICAgICAgIDxy''@;'; put 'put ''ZWN0IHg9IjI3IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE4Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xOSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMjAiLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZUNQVT0oMCxwLmNsckljb25TVkcpKCc8''@;'; put 'put ''cGF0aCBkPSJNMjMuMDgsMjMuMDdoLTExdjEuNUgyMy44M2EuNzUuNzUsMCwwLDAsLjc1LS43NVYxMS4zM2gtMS41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDE4LjE1YS44LjgsMCwxLDAsMC0xLjZI''@;'; put 'put ''MzB2LTUuNGgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMFY4LjFBMi4xLDIuMSwwLDAsMCwyNy45LDZIMjYuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4x''@;'; put 'put ''VjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIuMSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMw''@;'; put 'put ''aDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMEgyNy45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMHYtNS40Wk0yOCwyNy45YS4xLjEsMCwwLDEtLjEuMUg4LjFhLjEuMSwwLDAsMS0uMS0uMVY4LjFBLjEuMSwwLDAsMSw4LjEsOEgyNy45YS4x''@;'; put 'put ''LjEsMCwwLDEsLjEuMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTIuMDYsMjQuNTdIMjMuODNhLjc1Ljc1LDAsMCwwLC43NS0uNzVWMTEuMzNoLTEuNVYyMy4wN2gtMTFaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDIzLjU1SDMwdi01LjRoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzBWMTMuNWE3LjQ5LDcuNDksMCwwLDEtMi0uMjhWMjcuOWEuMS4xLDAsMCwxLS4xLjFIOC4xYS4xLjEs''@;'; put 'put ''MCwwLDEtLjEtLjFWOC4xQS4xLjEsMCwwLDEsOC4xLDhIMjIuNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDE5LjM1VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4xVjkuNTVIMy44YS44LjgsMCwxLDAsMCwx''@;'; put 'put ''LjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIuMSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYs''@;'; put 'put ''MFYzMEgyNy45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDIzLjU1SDMwdi01LjRoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzBWMTUuNEgyOFYyNy45YS4xLjEsMCwwLDEtLjEu''@;'; put 'put ''MUg4LjFhLjEuMSwwLDAsMS0uMS0uMVY4LjFBLjEuMSwwLDAsMSw4LjEsOGgxMmwxLjE1LTJIMTkuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZIOC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUu''@;'; put 'put ''NEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3''@;'; put 'put ''LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45VjI1LjE1aDIuMmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi4wNiwyNC41N0gyMy44M2EuNzUuNzUs''@;'; put 'put ''MCwwLDAsLjc1LS43NVYxNS40aC0xLjV2Ny42N2gtMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywx''@;'; put 'put ''M0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMzIuMiwyMy41NUgzMHYtNS40aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwVjE1LjRIMjV2OC40MUExLjE4LDEuMTgsMCwwLDEsMjQsMjVIMTNWMjNIMjNWMTUuNGgtLjc3QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTkuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgt''@;'; put 'put ''NS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZIOC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYy''@;'; put 'put ''LjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45VjI1LjE1aDIuMmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjIsMjMuNTVIMzB2LTUuNGgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMFYxMy41YTcuNDYsNy40NiwwLDAsMS01LTEu''@;'; put 'put ''OTJWMjMuODFBMS4xOCwxLjE4LDAsMCwxLDI0LDI1SDEzVjIzSDIzVjExaDEuNDJBNy40Niw3LjQ2LDAsMCwxLDIyLjUsNkgxOS4zNVYzLjhhLjguOCwwLDEsMC0xLjYsMFY2aC01LjRWMy44YS44LjgsMCwxLDAtMS42LDBWNkg4LjFBMi4xLDIuMSwwLDAsMCw2LDguMVY5LjU1SDMuOGEuOC44''@;'; put 'put ''LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAsMS42SDZWMjcuOUEyLjEsMi4xLDAsMCwwLDguMSwzMGgyLjY1djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44Ljgs''@;'; put 'put ''MCwxLDAsMS42LDBWMzBIMjcuOUEyLjEsMi4xLDAsMCwwLDMwLDI3LjlWMjUuMTVoMi4yYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiBy''@;'; put 'put ''PSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjIsMTguMTVhLjguOCwwLDEsMCwwLTEuNkgzMHYtNS40aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwVjguMUEyLjEs''@;'; put 'put ''Mi4xLDAsMCwwLDI3LjksNkgyNi4zNVYzLjhhLjguOCwwLDEsMC0xLjYsMFY2aC01LjRWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZIOC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjgu''@;'; put 'put ''OCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIu''@;'; put 'put ''MSwwLDAsMCwzMCwyNy45VjI1LjE1aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwdi01LjRaTTI1LDIzLjgxQTEuMTgsMS4xOCwwLDAsMSwyNCwyNUgxM1YyM0gyM1YxMWgyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAnKSxiLkNsclNoYXBlTWVt''@;'; put 'put ''b3J5PSgwLHAuY2xySWNvblNWRykoJzxyZWN0IHg9IjgiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjQiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1''@;'; put 'put ''LDI3SDRWMTdIMlYyN2EyLDIsMCwwLDAsMiwySDE2LjYxVjI1LjU1aDIuMjZWMjRIMTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDdINEEyLDIsMCwwLDAsMiw5djRINFY5SDMydjRoMlY5QTIsMiwwLDAs''@;'; put 'put ''MCwzMiw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwyN0gxOXYySDMyYTIsMiwwLDAsMCwyLTJWMTdIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHJlY3QgeD0iOCIgeT0iMTIiIHdpZHRoPSI0IiBoZWlnaHQ9IjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUsMjdINFYxN0gyVjI3YTIsMiwwLDAsMCwyLDJIMTYu''@;'; put 'put ''NjFWMjUuNTVoMi4yNlYyNEgxNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTdWMjdIMTl2MkgzMmEyLDIsMCwwLDAsMi0yVjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSwxMy41NkEzLjY2LDMuNjYsMCwwLDEsMTguNTcsMTJIMTZ2OGg0VjE0LjY0QTMuNjcsMy42NywwLDAsMSwxOSwxMy41NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNCIgeT0iMTUuNCIgd2lkdGg9IjQiIGhlaWdodD0iNC42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTQsOUgxOS41NmwxLjE1LTJINEEyLDIsMCwwLDAsMiw5djRINFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4''@;'; put 'put ''LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCBjbHItaS1hbGVydCIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTIiIHdpZHRoPSI0IiBoZWlnaHQ9IjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0''@;'; put 'put ''PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwyN0g0VjE3SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NWgyLjI2VjI0SDE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTdWMjdIMTl2MkgzMmEyLDIsMCwwLDAsMi0yVjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMjgsMTMuMjJBNy40Niw3LjQ2LDAsMCwxLDI1LjUxLDEySDI0djhoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsOUgyMy4xM2E3LjQ1LDcuNDUs''@;'; put 'put ''MCwwLDEtLjU1LTJINEEyLDIsMCwwLDAsMiw5djRINFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNCwxM1Y5YTIsMiwwLDAsMC0yLTJINEEyLDIsMCwwLDAsMiw5djRINHY0SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NUgxOVYyOUgzMmEyLDIsMCwwLDAsMi0y''@;'; put 'put ''VjE3SDMyVjEzWk0xMiwyMEg4VjEyaDRabTgsMEgxNlYxMmg0Wm04LDBIMjRWMTJoNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxN1YxNS4wN0gyOFYyMEgyNFYxNS4wN0gyMi4yM0EzLjY4LDMuNjgsMCwwLDEs''@;'; put 'put ''MjAsMTQuMzFWMjBIMTZWMTJoMi42MUEzLjY4LDMuNjgsMCwwLDEsMTksOS41NUwyMC41Miw3SDRBMiwyLDAsMCwwLDIsOXY0SDR2NEgyVjI3YTIsMiwwLDAsMCwyLDJIMTYuNjFWMjUuNTVIMTlWMjlIMzJhMiwyLDAsMCwwLDItMlYxN1pNMTIsMjBIOFYxMmg0WiIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LjhsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LjhBMS4yOCwxLjI4LDAsMCww''@;'; put 'put ''LDI2Ljg1LjhaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTdWMTMuMjJhNy4zMyw3LjMzLDAsMCwxLTQsMFYyMEgyNFYxMmgxLjUxYTcuNDgsNy40OCwwLDAs''@;'; put 'put ''MS0yLjk0LTVINEEyLDIsMCwwLDAsMiw5djRINHY0SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NUgxOVYyOUgzMmEyLDIsMCwwLDAsMi0yVjE3Wk0xMiwyMEg4VjEyaDRabTgsMEgxNlYxMmg0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1i''@;'; put 'put ''YWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZURhdGFDbHVzdGVyPSgwLHAuY2xySWNv''@;'; put 'put ''blNWRykoJzxwYXRoIGQ9Ik0yNi41LDQuMDhDMjIuNzcsNC4wOCwxOSw1LjQsMTksNy45MVY5LjVhMTguNzUsMTguNzUsMCwwLDEsMiwuMlY3LjkxYzAtLjY1LDIuMDktMS44NCw1LjUtMS44NFMzMiw3LjI3LDMyLDcuOTFWMTguMjRjMCwuNTQtMS40NiwxLjQ0LTMuOSwxLjczdjJjMy4xMy0u''@;'; put 'put ''MzIsNS45LTEuNiw1LjktMy43NVY3LjkxQzM0LDUuNCwzMC4yMyw0LjA4LDI2LjUsNC4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwxOC4yNFY3LjkxYzAtLjY1LDIuMDktMS44NCw1LjUtMS44NFMxNSw3''@;'; put 'put ''LjI3LDE1LDcuOTFWOS43YTE4Ljc1LDE4Ljc1LDAsMCwxLDItLjJWNy45MWMwLTIuNTItMy43Ny0zLjg0LTcuNS0zLjg0UzIsNS40LDIsNy45MVYxOC4yNEMyLDIwLjQsNC43NywyMS42Nyw3LjksMjJWMjBDNS40NiwxOS42OCw0LDE4Ljc4LDQsMTguMjRaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEwLjg1Yy00LjkzLDAtOC42NSwxLjg4LTguNjUsNC4zOFYyNy41NGMwLDIuNSwzLjcyLDQuMzgsOC42NSw0LjM4czguNjUtMS44OCw4LjY1LTQuMzhWMTUuMjNDMjYuNjUsMTIuNzMsMjIuOTMsMTAu''@;'; put 'put ''ODUsMTgsMTAuODVabTYuNjUsNy42N2MtLjg1LDEtMy40MiwyLTYuNjUsMkExNC40OSwxNC40OSwwLDAsMSwxNCwyMHYxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYzLjEyYy0uODUsMS0zLjQyLDItNi42NSwyYTE0LjQ5LDE0LjQ5LDAs''@;'; put 'put ''MCwxLTQtLjUzdjEuNDZhMTYuMzMsMTYuMzMsMCwwLDAsNCwuNDcsMTIuNzYsMTIuNzYsMCwwLDAsNi42NS0xLjU2djIuMjljMCwuOTUtMi42NSwyLjM4LTYuNjUsMi4zOHMtNi42NS0xLjQzLTYuNjUtMi4zOFYxNS4yM2MwLS45NSwyLjY1LTIuMzgsNi42NS0yLjM4czYuNjUsMS40Myw2LjY1''@;'; put 'put ''LDIuMzhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMTguMjRWNy45MWMwLS42NSwyLjA5LTEuODQsNS41LTEuODRTMTUsNy4yNywxNSw3LjkxVjkuN2ExOC43NSwxOC43NSwwLDAsMSwyLS4yVjcuOTFjMC0y''@;'; put 'put ''LjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyVjIwQzUuNDYsMTkuNjgsNCwxOC43OCw0LDE4LjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0yNC42NSwxOC41MmMtLjg1LDEtMy40MiwyLTYuNjUsMkExNC40OSwxNC40OSwwLDAsMSwxNCwyMHYxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYzLjEyYy0uODUsMS0zLjQyLDItNi42NSwyYTE0LjQ5''@;'; put 'put ''LDE0LjQ5LDAsMCwxLTQtLjUzdjEuNDZhMTYuMzMsMTYuMzMsMCwwLDAsNCwuNDcsMTIuNzYsMTIuNzYsMCwwLDAsNi42NS0xLjU2djIuMjljMCwuOTUtMi42NSwyLjM4LTYuNjUsMi4zOHMtNi42NS0xLjQzLTYuNjUtMi4zOFYxNS4yM2MwLS45NSwyLjY1LTIuMzgsNi42NS0yLjM4bC43NSww''@;'; put 'put ''YTMuNjksMy42OSwwLDAsMS0uMDgtMmwtLjY2LDBjLTQuOTMsMC04LjY1LDEuODgtOC42NSw0LjM4VjI3LjU0YzAsMi41LDMuNzIsNC4zOCw4LjY1LDQuMzhzOC42NS0xLjg4LDguNjUtNC4zOFYxNS40aC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiw0LjhjLTEuNzUuNjMtMywxLjY4LTMsMy4xMlY5LjVsLjI1LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTMzLjY4LDE1LjRIMzJ2Mi44NGMwLC41NC0xLjQ2LDEuNDQtMy45LDEuNzN2MmMzLjEzLS4zMiw1LjktMS42LDUuOS0zLjc1VjE1LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwxOC4yNFY3LjkxYzAtLjY1LDIuMDktMS44NCw1LjUtMS44NFMxNSw3LjI3LDE1LDcuOTFWOS43YTE4Ljc1LDE4Ljc1LDAsMCwxLDItLjJWNy45MWMwLTIuNTItMy43Ny0zLjg0LTcuNS0zLjg0''@;'; put 'put ''UzIsNS40LDIsNy45MVYxOC4yNEMyLDIwLjQsNC43NywyMS42Nyw3LjksMjJWMjBDNS40NiwxOS42OCw0LDE4Ljc4LDQsMTguMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwx''@;'; put 'put ''MC44NWMtNC45MywwLTguNjUsMS44OC04LjY1LDQuMzhWMjcuNTRjMCwyLjUsMy43Miw0LjM4LDguNjUsNC4zOHM4LjY1LTEuODgsOC42NS00LjM4VjE1LjIzQzI2LjY1LDEyLjczLDIyLjkzLDEwLjg1LDE4LDEwLjg1Wm02LjY1LDcuNjdjLS44NSwxLTMuNDIsMi02LjY1LDJBMTQuNDksMTQu''@;'; put 'put ''NDksMCwwLDEsMTQsMjB2MS40NmExNi4zMywxNi4zMywwLDAsMCw0LC40NywxMi43NiwxMi43NiwwLDAsMCw2LjY1LTEuNTZ2My4xMmMtLjg1LDEtMy40MiwyLTYuNjUsMmExNC40OSwxNC40OSwwLDAsMS00LS41M3YxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEyLjc2LDAs''@;'; put 'put ''MCwwLDYuNjUtMS41NnYyLjI5YzAsLjk1LTIuNjUsMi4zOC02LjY1LDIuMzhzLTYuNjUtMS40My02LjY1LTIuMzhWMTUuMjNjMC0uOTUsMi42NS0yLjM4LDYuNjUtMi4zOHM2LjY1LDEuNDMsNi42NSwyLjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEsNy45MWMwLS4zMy41NS0uOCwxLjU0LTEuMTgsMC0uMjQsMC0uNDgsMC0uNzNhNy41Miw3LjUyLDAsMCwxLC4xNC0xLjQxQzIwLjU1LDUuMTksMTksNi4zLDE5LDcuOTFWOS41YTE4Ljc1LDE4Ljc1LDAsMCwxLDIsLjJa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMnY1YzAsLjU0LTEuNDYsMS40NC0zLjksMS43M3YyYzMuMTMtLjMyLDUuOS0xLjYsNS45LTMuNzV2LTUuOUE3LjQ1LDcuNDUs''@;'; put 'put ''MCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNSw0LjA4QzIyLjc3LDQuMDgsMTksNS40LDE5LDcuOTFWOS40OGM1LjMuMjYsOSwyLjYsOSw1Ljc2djYuN2wuMDUuMDZjMy4xMy0uMzIsNS45LTEuNiw1LjktMy43NVY3LjkxQzM0LDUuNCwzMC4y''@;'; put 'put ''Myw0LjA4LDI2LjUsNC4wOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNyw5LjQ4VjcuOTFjMC0yLjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIy''@;'; put 'put ''TDgsMjEuOTN2LTYuN0M4LDEyLjA4LDExLjcsOS43NCwxNyw5LjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEwLjg1Yy00LjkzLDAtOC42NSwxLjg4LTguNjUsNC4zOFYyNy41NGMwLDIuNSwzLjcyLDQuMzgs''@;'; put 'put ''OC42NSw0LjM4czguNjUtMS44OCw4LjY1LTQuMzhWMjUuMzhBMTMuNTgsMTMuNTgsMCwwLDEsMTgsMjhhMTYuNzcsMTYuNzcsMCwwLDEtNi0xVjI1LjI3YTE0LjUsMTQuNSwwLDAsMCw2LDEuMTdjNC4yMSwwLDcuNjUtMS4yMyw4LjYzLTMuMjNWMjAuNDdDMjQuOCwyMiwyMS43MiwyMywxOCwy''@;'; put 'put ''M2ExNi43NywxNi43NywwLDAsMS02LTFWMjAuMjNhMTQuNSwxNC41LDAsMCwwLDYsMS4xN2M0LjIxLDAsNy42NS0xLjExLDguNjMtMy4xMVYxNS4yM0MyNi42NSwxMi43MywyMi45MywxMC44NSwxOCwxMC44NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0xNyw5LjQ4VjcuOTFjMC0yLjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyTDgsMjEuOTN2LTYuN0M4LDEyLjA4LDExLjcsOS43NCwxNyw5LjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDEzLjU2YTMuNjgsMy42OCwwLDAsMS0uMzktMi43bC0uNjYsMGMtNC45MywwLTguNjUsMS44OC04LjY1LDQuMzhWMjcuNTRjMCwyLjUsMy43Miw0LjM4LDguNjUsNC4zOHM4LjY1''@;'; put 'put ''LTEuODgsOC42NS00LjM4VjI1LjM4QTEzLjU4LDEzLjU4LDAsMCwxLDE4LDI4YTE2Ljc3LDE2Ljc3LDAsMCwxLTYtMVYyNS4yN2ExNC41LDE0LjUsMCwwLDAsNiwxLjE3YzQuMjEsMCw3LjY1LTEuMjMsOC42My0zLjIzVjIwLjQ3QzI0LjgsMjIsMjEuNzIsMjMsMTgsMjNhMTYuNzcsMTYuNzcs''@;'; put 'put ''MCwwLDEtNi0xVjIwLjIzYTE0LjUsMTQuNSwwLDAsMCw2LDEuMTdjNC4yMSwwLDcuNjUtMS4xMSw4LjYzLTMuMTFWMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMjIsNC44Yy0xLjc1LjYzLTMsMS42OC0zLDMuMTJWOS40OGwuMjcsMFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDI4djYuNTNs''@;'; put 'put ''LjA1LjA2YzMuMTMtLjMyLDUuOS0xLjYsNS45LTMuNzVWMTUuMzhaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMs''@;'; put 'put ''MTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMTcsOS40OFY3LjkxYzAtMi41Mi0zLjc3LTMuODQtNy41LTMuODRTMiw1LjQsMiw3LjkxVjE4LjI0QzIsMjAuNCw0Ljc3LDIxLjY3LDcuOSwyMkw4LDIxLjkzdi02LjdDOCwxMi4wOCwxMS43LDkuNzQsMTcsOS40OFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTAuODVjLTQuOTMsMC04LjY1LDEuODgtOC42NSw0LjM4VjI3LjU0YzAsMi41LDMuNzIsNC4zOCw4LjY1LDQuMzhzOC42NS0xLjg4LDguNjUtNC4zOFYyNS4zOEExMy41OCwxMy41OCwwLDAsMSwxOCwyOGExNi43''@;'; put 'put ''NywxNi43NywwLDAsMS02LTFWMjUuMjdhMTQuNSwxNC41LDAsMCwwLDYsMS4xN2M0LjIxLDAsNy42NS0xLjIzLDguNjMtMy4yM1YyMC40N0MyNC44LDIyLDIxLjcyLDIzLDE4LDIzYTE2Ljc3LDE2Ljc3LDAsMCwxLTYtMVYyMC4yM2ExNC41LDE0LjUsMCwwLDAsNiwxLjE3YzQuMjEsMCw3LjY1''@;'; put 'put ''LTEuMTEsOC42My0zLjExVjE1LjIzQzI2LjY1LDEyLjczLDIyLjkzLDEwLjg1LDE4LDEwLjg1WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDZhNy41Miw3LjUyLDAsMCwxLC4xNC0x''@;'; put 'put ''LjRDMjAuNTUsNS4xOSwxOSw2LjMsMTksNy45MVY5LjQ4YTE1LjMzLDE1LjMzLDAsMCwxLDUsMUE3LjQ2LDcuNDYsMCwwLDEsMjIuNSw2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwx''@;'; put 'put ''My40OUE3LjQ3LDcuNDcsMCwwLDEsMjcuMzUsMTNhNCw0LDAsMCwxLC43LDIuMjN2Ni43bC4wNS4wNmMzLjEzLS4zMiw1LjktMS42LDUuOS0zLjc1VjEyLjMzQTcuNDYsNy40NiwwLDAsMSwzMCwxMy40OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0t''@;'; put 'put ''YmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjUuOTkiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVSZXNvdXJjZVBvb2w9KDAscC5j''@;'; put 'put ''bHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjY4LDE1LjRIMzEuNzNhMTQsMTQsMCwwLDEsLjIyLDEuNkgxNy40OUw4LjMsMjguMDdBMTQsMTQsMCwwLDEsMjIuMDksNC42MmwxLTEuNzZBMTYsMTYsMCwxLDAsMzQsMThhMTYsMTYsMCwwLDAtLjIzLTIuNjFaTTE4LDMyYTEzLjkxLDEzLjkxLDAs''@;'; put 'put ''MCwxLTguMTYtMi42NUwxOC40MywxOUgzMS45NUExNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgs''@;'; put 'put ''MCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNNCwxOGExNCwxNCwwLDAsMSwyNy45NS0xSDE3LjQ5TDguMywyOC4wN0ExNCwxNCwwLDAsMSw0LDE4Wk0xOCwzMmExMy45MSwxMy45MSwwLDAsMS04LjE2LTIuNjVMMTguNDMsMTlIMzEu''@;'; put 'put ''OTVBMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjIsMTMuNGExMy45MSwxMy45MSwwLDAsMSwuNzUsMy42SDE3LjQ5TDguMywyOC4wN0ExNCwxNCwwLDAsMSwyMi42MSw0Ljhh''@;'; put 'put ''Ny40Myw3LjQzLDAsMCwxLC41OC0xLjkyLDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M0E3LjQzLDcuNDMsMCwwLDEsMzEuMiwxMy40Wk0xOCwzMmExMy45MSwxMy45MSwwLDAsMS04LjE2LTIuNjVMMTguNDMsMTlIMzEuOTVBMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNOC41NywzMC45QTE2LDE2LDAsMCwwLDMzLjk1LDE5SDE4LjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjk1LDE3QTE2LDE2LDAsMSwwLDcsMjkuNkwxNy40OSwxN1oiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjU3LDMwLjlBMTYsMTYsMCwwLDAsMzMuOTUsMTlIMTguNDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTMzLjk1LDE3YTE1LjkxLDE1LjkxLDAsMCwwLS44NC00LjE4LDcuNDksNy40OSwwLDAsMS05LjkyLTkuOTRBMTYsMTYsMCwwLDAsNywyOS42TDE3LjQ5LDE3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjU3LDMwLjlBMTYsMTYsMCwwLDAsMzMuOTUsMTlIMTgu''@;'; put 'put ''NDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuOTUsMTdhMTYsMTYsMCwwLDAtLjE4LTEuNjFIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsNC4wNi03QTE2LDE2LDAsMCww''@;'; put 'put ''LDcsMjkuNkwxNy40OSwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCww''@;'; put 'put ''LDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZVNoaWVsZENoZWNrPSgwLHAuY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGQ9Ik0zMS4yNSw3LjRhNDMuNzksNDMuNzksMCwwLDEtNi42Mi0yLjM1LDQ1LDQ1LDAsMCwxLTYuMDgtMy4yMUwxOCwxLjVsLS41NC4zNWE0NSw0NSwwLDAsMS02LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwx''@;'; put 'put ''My41MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4xMi4zNC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVY3LjU5Wk0zMCwxNS45M2MwLDExLTEwLDE1LjYxLTEyLDE2LjQzLTItLjgyLTEyLTUuNDQtMTItMTYuNDNWOS4xNGE0Ny41NCw0Ny41NCwwLDAsMCw2LjE4LTIuMjUsNDguMjMs''@;'; put 'put ''NDguMjMsMCwwLDAsNS44Mi0zLDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODIsM0E0Ny41NCw0Ny41NCwwLDAsMCwzMCw5LjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC44OCwxNi44N2ExLDEsMCwwLDAtMS40''@;'; put 'put ''MSwxLjQxbDYsNkwyNi40LDEzLjc3QTEsMSwwLDAsMCwyNSwxMi4zM2wtOS40Nyw5LjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS4yNSw3LjRhNDMuNzksNDMuNzksMCwwLDEtNi42Mi0yLjM1LDQ1LDQ1''@;'; put 'put ''LDAsMCwxLTYuMDgtMy4yMUwxOCwxLjVsLS41NC4zNWE0NSw0NSwwLDAsMS02LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4xMi4zNC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40''@;'; put 'put ''NVY3LjU5Wm0tNC41Nyw2LjY1TDE1LjUxLDI0LjksOS4xOSwxOC41N2ExLjQsMS40LDAsMCwxLDItMkwxNS41NCwyMSwyNC43MywxMmExLjQsMS40LDAsMSwxLDIsMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZVNoaWVs''@;'; put 'put ''ZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0''@;'; put 'put ''YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMzAsMTUuOTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0y''@;'; put 'put ''LjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItMyw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLDNBNDcuNTQsNDcuNTQsMCwwLDAsMzAsOS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTUuNHYuNTNjMCwx''@;'; put 'put ''MS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItM2MxLC42NCwyLjIsMS4yNywzLjQzLDEuODlsMS0xLjc0YTQxLjEsNDEuMSwwLDAsMS0zLjg5LTIuMThMMTgsMS41''@;'; put 'put ''bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWMTUuNFoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwx''@;'; put 'put ''LjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjV2Mi40M2MwLDExLTEwLDE1LjYxLTEyLDE2LjQzLTItLjgyLTEy''@;'; put 'put ''LTUuNDQtMTItMTYuNDNWOS4xNGE0Ny41NCw0Ny41NCwwLDAsMCw2LjE4LTIuMjUsNDguMjMsNDguMjMsMCwwLDAsNS44Mi0zLDQ2LjE5LDQ2LjE5LDAsMCwwLDQuNTEsMi40MmMwLS4xLDAtLjE5LDAtLjI5YTcuNDksNy40OSwwLDAsMSwuMjMtMS44Myw0MS42MSw0MS42MSwwLDAsMS00LjE5''@;'; put 'put ''LTIuMzNMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWMTMuMjJBNy40''@;'; put 'put ''OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5''@;'; put 'put ''LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0yMi4yMywxNS40QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIyLjQzLDRhNDEuMSw0MS4xLDAsMCwxLTMuODktMi4xOEwxOCwxLjVsLS41NC4zNWE0NSw0NSwwLDAsMS02LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41''@;'; put 'put ''MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4xMi4zNC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVYxNS40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEu''@;'; put 'put ''MTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1h''@;'; put 'put ''bGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVhNy40Nyw3LjQ3LDAsMCwxLTcuMjctOS4zMyw0MS42MSw0MS42MSwwLDAsMS00LjE5LTIuMzNMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4''@;'; put 'put ''LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxiLkNsclNoYXBlU2hpZWxkWD0oMCxwLmNsckljb25TVkcpKCc8cGF0''@;'; put 'put ''aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42''@;'; put 'put ''NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMzAsMTUuOTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUu''@;'; put 'put ''ODItMyw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLDNBNDcuNTQsNDcuNTQsMCwwLDAsMzAsOS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuODEsMTAuNzksMTgsMTUuNjFsLTQuODEtNC44MWExLDEsMCww''@;'; put 'put ''LDAtMS40MSwxLjQxTDE2LjU5LDE3bC00LjgxLDQuODFhMSwxLDAsMSwwLDEuNDEsMS40MUwxOCwxOC40M2w0LjgxLDQuODFhMSwxLDAsMCwwLDEuNDEtMS40MUwxOS40MSwxN2w0LjgxLTQuODFhMSwxLDAsMCwwLTEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41''@;'; put 'put ''OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMjQuNTEsMjEuNTVhMS40LDEuNCwwLDAsMS0yLDJMMTgsMTlsLTQuNTMsNC41M2ExLjQzLDEuNDMsMCwwLDEtMiwwLDEuNCwxLjQsMCww''@;'; put 'put ''LDEsMC0yTDE2LDE3bC00LjUzLTQuNTNhMS40LDEuNCwwLDEsMSwyLTJMMTgsMTVsNC41My00LjUzYTEuNCwxLjQsMCwwLDEsMiwyTDIwLDE3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAnKSxiLkNsclNoYXBlSW1wb3J0PSgwLHAuY2xySWNv''@;'; put 'put ''blNWRykoJzxwYXRoIGQ9Ik0yOCw0SDE0Ljg3TDgsMTAuODZWMTVoMlYxMy42MWg3LjYxVjZIMjhWMzBIOGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMjgsNFpNMTYsMTJIMTB2LS4zMkwxNS43LDZIMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjk0LDI2LjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTksMjJsLTUuNjgtNS42OGExLDEsMCwwLDAtMS40MSwxLjQxTDE1LjIsMjFIM2ExLDEsMCwxLDAsMCwySDE1LjIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45NCwyNi4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDE5LDIybC01LjY4LTUuNjhhMSwxLDAsMCwwLTEuNDEsMS40MUwxNS4yLDIxSDNhMSwxLDAsMSwwLDAsMkgxNS4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTUuNFYzMEg4YTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMCwxMy42MWg3LjYxVjZoMy42OGwxLjE1LTJIMTQuODdMOCwxMC44NlYxNWgyWm0wLTEuOTJMMTUuNyw2SDE2djZIMTBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxl''@;'; put 'put ''cnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45NCwyNi4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDE5LDIybC01LjY4LTUuNjhhMSwxLDAsMCwwLTEuNDEsMS40MUwxNS4yLDIxSDNhMSwxLDAs''@;'; put 'put ''MSwwLDAsMkgxNS4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMwSDhhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjEzLjVBNy40OSw3LjQ5LDAsMCwx''@;'; put 'put ''LDI4LDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAsMTMuNjFoNy42MVY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDE0Ljg3TDgsMTAuODZWMTVoMlptMC0xLjky''@;'; put 'put ''TDE1LjcsNkgxNnY2SDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsMjFhMSwxLDAsMSwwLDAsMkg4VjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDRIMTQuODdMOCwxMC44NlYyMUgx''@;'; put 'put ''NS4ybC0zLjI1LTMuMjVhMSwxLDAsMCwxLDEuNDEtMS40MUwxOSwyMmwtNS42OCw1LjY4YTEsMSwwLDAsMS0xLjQxLTEuNDFMMTUuMjMsMjNIOHY3YTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyOCw0Wk0xNiwxMkgxMHYtLjMyTDE1LjY5LDZIMTZaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMywyMWExLDEsMCwxLDAsMCwySDhWMjFaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMi40NSw0SDE0Ljg3TDgsMTAuODZWMjFIMTUuMmwtMy4yNS0zLjI1YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTksMjJsLTUuNjgsNS42OGExLDEsMCwwLDEtMS40MS0xLjQxTDE1LjIzLDIzSDh2N2EyLDIsMCwwLDAsMiwySDI4''@;'; put 'put ''YTIsMiwwLDAsMCwyLTJWMTUuNFpNMTYsMTJIMTB2LS4zMkwxNS42OSw2SDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCww''@;'; put 'put ''LDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTMsMjFhMSwxLDAsMSwwLDAsMkg4VjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDZhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDE0Ljg3TDgsMTAuODZWMjFIMTUu''@;'; put 'put ''MmwtMy4yNS0zLjI1YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTksMjJsLTUuNjgsNS42OGExLDEsMCwwLDEtMS40MS0xLjQxTDE1LjIzLDIzSDh2N2EyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNlpNMTYsMTJIMTB2LS4zMkwxNS42OSw2SDE2''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFk''@;'; put 'put ''Z2UiLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZUV4cG9ydD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNiwxMy42MWg3LjYxVjZIMjR2OC4zOGgyVjZhMiwyLDAsMCwwLTItMkgxMC44N0w0LDEwLjg3VjMwYTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkg2Wm0wLTEuOTJMMTEu''@;'; put 'put ''NjksNkgxMnY2SDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTYsMjFIMThhMSwxLDAsMCwwLDAsMkgzMC4xOWwtMy4yOCwzLjI4YTEsMSwwLDEs''@;'; put 'put ''MCwxLjQxLDEuNDFMMzQsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTYsMjFIMThhMSwxLDAsMCwwLDAsMkgzMC4xOWwtMy4yOCwzLjI4YTEs''@;'; put 'put ''MSwwLDEsMCwxLjQxLDEuNDFMMzQsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYsMTMuNjFoNy42MVY2aDcuNjhsMS4xNS0ySDEwLjg3TDQsMTAuODdWMzBhMiwyLDAsMCww''@;'; put 'put ''LDIsMkgyNGEyLDIsMCwwLDAsMi0ySDZabTAtMS45MkwxMS42OSw2SDEydjZINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgs''@;'; put 'put ''MCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTI4LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTYsMjFIMThhMSwxLDAsMCwwLDAsMkgzMC4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzQsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwxMi4zNGE3LjUzLDcuNTMsMCwwLDEtMi0xLjg1djMuODloMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTYsMTMuNjFoNy42MVY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDEwLjg3TDQsMTAuODdWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0ySDZabTAtMS45MkwxMS42OSw2SDEydjZINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywyMmExLDEsMCww''@;'; put 'put ''LDEsMS0xaDhWNmEyLDIsMCwwLDAtMi0ySDEwLjg3TDQsMTAuODZWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjIzSDE4QTEsMSwwLDAsMSwxNywyMlpNMTIsMTJINnYtLjMyTDExLjY5LDZIMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMjkuMzIsMTYuMzVhMSwxLDAsMCwwLTEuNDEsMS40MUwzMS4xNiwyMUgyNnYyaDUuMTlsLTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM1LDIyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTI5LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzEuMTYsMjFIMjZ2Mmg1LjE5bC0zLjI4LDMuMjhhMSwxLDAsMSwwLDEuNDEsMS40MUwzNSwyMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0xNywyMmExLDEsMCwwLDEsMS0xaDhWMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMi40NSw0SDEwLjg3TDQsMTAuODZWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjIzSDE4QTEsMSwwLDAsMSwxNywyMlpNMTIsMTJINnYtLjMy''@;'; put 'put ''TDExLjY5LDZIMTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0''@;'; put 'put ''Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMzIsMTYuMzVhMSwxLDAsMCwwLTEu''@;'; put 'put ''NDEsMS40MUwzMS4xNiwyMUgyNnYyaDUuMTlsLTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM1LDIyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywyMmExLDEsMCwwLDEsMS0x''@;'; put 'put ''aDhWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDIyLjc4LDRIMTAuODdMNCwxMC44NlYzMGEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTJWMjNIMThBMSwxLDAsMCwxLDE3LDIyWk0xMiwxMkg2di0uMzJMMTEuNjksNkgxMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVVcGxvYWRDbG91''@;'; put 'put ''ZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuMzEsMTNjMC0uMSwwLS4yMSwwLS4zMmExMC4yNiwxMC4yNiwwLDAsMC0xMC40NS0xMCwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNzQsOS43NCwwLDAsMCwxLjYsMTguNCw5LjYyLDkuNjIsMCwwLDAsMTEuMjUsMjhIMTVWMjZI''@;'; put 'put ''MTEuMjVBNy42NSw3LjY1LDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNhOC40Myw4LjQzLDAsMCwxLDgtNS40LDguMjYsOC4yNiwwLDAsMSw4LjQ1LDgsNy43NSw3Ljc1LDAsMCwxLDAsLjhsLS4wOC43Mi42NS4zQTYsNiwwLDAsMSwyNi4zOCwyNkgyMXYyaDUuMzhhOCw4LDAsMCwwLDMu''@;'; put 'put ''OTMtMTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjI4LDIxLjg1QTEsMSwwLDAsMCwyMywyMC4xNGwtNS01LTUsNWExLDEsMCwwLDAsMS40MSwxLjQxTDE3LDE5VjMxLjI1YTEsMSwwLDEsMCwyLDBWMTls''@;'; put 'put ''Mi41NywyLjU3QTEsMSwwLDAsMCwyMi4yOCwyMS44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjgsMjEuODVBMSwxLDAsMCwwLDIzLDIwLjE0bC01LTUtNSw1YTEsMSwwLDAsMCwxLjQxLDEuNDFMMTcs''@;'; put 'put ''MTlWMzEuMjVhMSwxLDAsMSwwLDIsMFYxOWwyLjU3LDIuNTdBMSwxLDAsMCwwLDIyLjI4LDIxLjg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLjYsMTguMzhBNy43MSw3Ljcx''@;'; put 'put ''LDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNhOC40Myw4LjQzLDAsMCwxLDgtNS40LDguODEsOC44MSwwLDAsMSwyLC4yNWwxLTEuOGExMC44LDEwLjgsMCwwLDAtMy4wNy0uNDUsMTAuNDcsMTAuNDcsMCwwLDAtOS42LDYuMUE5Ljc0LDkuNzQsMCwwLDAsMS42LDE4LjQsOS42Miw5LjYy''@;'; put 'put ''LDAsMCwwLDExLjI1LDI4SDE1VjI2SDExLjI1QTcuNjYsNy42NiwwLDAsMSwzLjYsMTguMzhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjksMTUuNEgzMC4yMUE2LDYsMCww''@;'; put 'put ''LDEsMjYuMzgsMjZIMjF2Mmg1LjM4QTgsOCwwLDAsMCwzMi45LDE1LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCww''@;'; put 'put ''LDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0yMi4yOCwyMS44NUExLDEsMCwwLDAsMjMsMjAuMTRsLTUtNS01LDVhMSwxLDAsMCwwLDEuNDEsMS40MUwxNywxOVYzMS4yNWExLDEsMCwxLDAsMiwwVjE5bDIuNTcsMi41N0ExLDEsMCwwLDAsMjIuMjgsMjEuODVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC45MiwxMy40NGE3LjEzLDcuMTMsMCwwLDEtMi42My0uMTRjMCwuMDgsMCwuMTUsMCwuMjNsLS4wOC43Mi42NS4zQTYsNiwwLDAsMSwyNi4zOCwyNkgyMXYyaDUuMzhhOCw4LDAsMCwwLDQu''@;'; put 'put ''NTQtMTQuNTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLjYsMTguMzhBNy43MSw3LjcxLDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNhOC40Myw4LjQzLDAsMCwxLDgtNS40''@;'; put 'put ''LDguNzksOC43OSwwLDAsMSwyLjY4LjQyLDcuNDUsNy40NSwwLDAsMSwuNS0xLjk0LDEwLjc5LDEwLjc5LDAsMCwwLTMuMTgtLjQ4LDEwLjQ3LDEwLjQ3LDAsMCwwLTkuNiw2LjFBOS43NCw5Ljc0LDAsMCwwLDEuNiwxOC40LDkuNjIsOS42MiwwLDAsMCwxMS4yNSwyOEgxNVYyNkgxMS4yNUE3''@;'; put 'put ''LjY2LDcuNjYsMCwwLDEsMy42LDE4LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxiLkNsclNoYXBlRG93bmxvYWRDbG91ZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuMzEsMTNjMC0uMSwwLS4yMSwwLS4zMmExMC4yNiwxMC4yNiwwLDAsMC0xMC40NS0xMCwxMC40NywxMC40''@;'; put 'put ''NywwLDAsMC05LjYsNi4xQTkuNjUsOS42NSwwLDAsMCwxMC44OSwyOGEzLDMsMCwwLDEsMC0yQTcuNjUsNy42NSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzYTguNDMsOC40MywwLDAsMSw4LTUuNCw4LjI2LDguMjYsMCwwLDEsOC40NSw4LDcuNzUsNy43NSwwLDAsMSwwLC44bC0uMDgu''@;'; put 'put ''NzIuNjUuM0E2LDYsMCwwLDEsMjYuMzgsMjZIMjUuMDlhMywzLDAsMCwxLDAsMmgxLjI4YTgsOCwwLDAsMCwzLjkzLTE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyNi4wN2ExLDEsMCwwLDAtLjcx''@;'; put 'put ''LjI5TDE5LDI4Ljk0VjE2LjY4YTEsMSwwLDEsMC0yLDBWMjguOTRsLTIuNTctMi41N0ExLDEsMCwwLDAsMTMsMjcuNzhsNSw1LDUtNWExLDEsMCwwLDAtLjcxLTEuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTIyLjI4LDI2LjA3YTEsMSwwLDAsMC0uNzEuMjlMMTksMjguOTRWMTYuNjhhMSwxLDAsMSwwLTIsMFYyOC45NGwtMi41Ny0yLjU3QTEsMSwwLDAsMCwxMywyNy43OGw1LDUsNS01YTEsMSwwLDAsMC0uNzEtMS43MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuODcsNC42OWE4LjgxLDguODEsMCwwLDEsMiwuMjVsMS0xLjhhMTAuOCwxMC44LDAsMCwwLTMuMDctLjQ1LDEwLjQ3LDEwLjQ3LDAsMCwwLTkuNiw2LjFBOS42NSw5LjY1LDAsMCwwLDEwLjg5LDI4YTMsMyww''@;'; put 'put ''LDAsMSwwLTJBNy42NSw3LjY1LDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNBOC40Myw4LjQzLDAsMCwxLDE5Ljg3LDQuNjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMy''@;'; put 'put ''LjksMTUuNEgzMC4yMUE2LDYsMCwwLDEsMjYuMzgsMjZIMjUuMDlhMywzLDAsMCwxLDAsMmgxLjI4QTgsOCwwLDAsMCwzMi45LDE1LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyNi4wN2ExLDEsMCwwLDAtLjcxLjI5TDE5LDI4Ljk0VjE2LjY4YTEsMSwwLDEsMC0yLDBWMjguOTRsLTIuNTctMi41N0ExLDEsMCwwLDAsMTMsMjcuNzhsNSw1LDUtNWExLDEsMCwwLDAtLjcx''@;'; put 'put ''LTEuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS44Nyw0LjY5YTguNzksOC43OSwwLDAsMSwyLjY4LjQyLDcuNDUsNy40NSwwLDAsMSwuNS0xLjk0LDEwLjc5LDEwLjc5LDAs''@;'; put 'put ''MCwwLTMuMTgtLjQ4LDEwLjQ3LDEwLjQ3LDAsMCwwLTkuNiw2LjFBOS42NSw5LjY1LDAsMCwwLDEwLjg5LDI4YTMsMywwLDAsMSwwLTJBNy42NSw3LjY1LDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNBOC40Myw4LjQzLDAsMCwxLDE5Ljg3LDQuNjlaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC45MiwxMy40NGE3LjEzLDcuMTMsMCwwLDEtMi42My0uMTRjMCwuMDgsMCwuMTUsMCwuMjNsLS4wOC43Mi42NS4zQTYsNiwwLDAsMSwyNi4zOCwyNkgyNS4wOWEzLDMsMCww''@;'; put 'put ''LDEsMCwyaDEuMjhhOCw4LDAsMCwwLDQuNTQtMTQuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVQbHVnaW49KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjgxLDE2SDI5VjguODNhMiwyLDAsMCwwLTItMkgyMUE1LjE0LDUuMTQsMCwwLDAsMTYuNTEsMiw1LDUs''@;'; put 'put ''MCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdINC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUs''@;'; put 'put ''MCwwLDAsMjkuODEsMTZabTIuNDEsN0EzLDMsMCwwLDEsMzAsMjRIMjd2Ny44M0g0VjI1SDVhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsNC44MSwxNUg0VjguODNoOVY3YTMsMywwLDAsMSwxLTIuMjJBMywzLDAsMCwxLDE2LjMxLDQsMy4xMywzLjEzLDAsMCwxLDE5LDcuMTlW''@;'; put 'put ''OC44M2g4VjE4aDIuODFBMy4xMywzLjEzLDAsMCwxLDMzLDIwLjY5LDMsMywwLDAsMSwzMi4yMiwyM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuODEsMTZIMjl2LS42SDI3VjE4aDIuODFBMy4xMywzLjEz''@;'; put 'put ''LDAsMCwxLDMzLDIwLjY5LDMsMywwLDAsMSwzMi4yMiwyMywzLDMsMCwwLDEsMzAsMjRIMjd2Ny44M0g0VjI1SDVhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsNC44MSwxNUg0VjguODNoOVY3YTMsMywwLDAsMSwxLTIuMjJBMywzLDAsMCwxLDE2LjMxLDQsMy4xMywzLjEzLDAs''@;'; put 'put ''MCwxLDE5LDcuMTlWOC44M2guNjZMMjEsNi41OUE1LjEyLDUuMTIsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdINC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gydjguODNhMiwyLDAs''@;'; put 'put ''MCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1''@;'; put 'put ''LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS44MSwxNkgyOVYxMy40M2E3LjQ1LDcuNDUsMCwwLDEtMi0uNTVWMThoMi44MUEzLjEzLDMuMTMsMCwwLDEsMzMsMjAuNjksMywzLDAsMCwxLDMyLjIyLDIzLDMsMywwLDAsMSwzMCwyNEgyN3Y3LjgzSDRWMjVI''@;'; put 'put ''NWE1LDUsMCwwLDAsNS01LjUxQTUuMTUsNS4xNSwwLDAsMCw0LjgxLDE1SDRWOC44M2g5VjdhMywzLDAsMCwxLDEtMi4yMkEzLDMsMCwwLDEsMTYuMzEsNCwzLjEzLDMuMTMsMCwwLDEsMTksNy4xOVY4LjgzaDQuMDZhNy40NCw3LjQ0LDAsMCwxLS41MS0ySDIxQTUuMTQsNS4xNCwwLDAsMCwx''@;'; put 'put ''Ni41MSwyLDUsNSwwLDAsMCwxMSw2LjgzSDRhMiwyLDAsMCwwLTIsMlYxN0g0LjgxQTMuMTMsMy4xMywwLDAsMSw4LDE5LjY5LDMsMywwLDAsMSw3LjIyLDIyLDMsMywwLDAsMSw1LDIzSDJ2OC44M2EyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMjZoMWE1LDUsMCwwLDAsNS01LjUx''@;'; put 'put ''QTUuMTUsNS4xNSwwLDAsMCwyOS44MSwxNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS44MSwxNkgyOVY4LjgzYTIsMiwwLDAsMC0yLTJIMjFBNS4xNCw1LjE0LDAsMCwwLDE2LjUxLDIsNSw1LDAsMCwwLDExLDYuODNINGEyLDIsMCwwLDAtMiwyVjE3SDQuODFBMy4x''@;'; put 'put ''MywzLjEzLDAsMCwxLDgsMTkuNjksMywzLDAsMCwxLDcuMjIsMjIsMywzLDAsMCwxLDUsMjNIMnY4LjgzYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYyNmgxYTUsNSwwLDAsMCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDI5LjgxLDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjgxLDE2SDI5di0uNkgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMSw2LjU5QTUuMTIsNS4xMiwwLDAsMCwxNi41MSwyLDUsNSwwLDAsMCwxMSw2LjgzSDRhMiwyLDAsMCwwLTIsMlYxN0g0LjgxQTMuMTMs''@;'; put 'put ''My4xMywwLDAsMSw4LDE5LjY5LDMsMywwLDAsMSw3LjIyLDIyLDMsMywwLDAsMSw1LDIzSDJ2OC44M2EyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMjZoMWE1LDUsMCwwLDAsNS01LjUxQTUuMTUsNS4xNSwwLDAsMCwyOS44MSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUs''@;'; put 'put ''MS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS44MSwxNkgyOVYxMy40M2E3LjUsNy41LDAsMCwxLTYuNDUtNi41OUgyMUE1LjE0LDUuMTQsMCwwLDAsMTYu''@;'; put 'put ''NTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdINC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1''@;'; put 'put ''LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxiLkNsclNoYXBlRmxvcHB5PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy4zNiw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWOC43OFpNMjUsMzBIMTFWMjJIMjVa''@;'; put 'put ''bTUsMEgyN1YyMmEyLDIsMCwwLDAtMi0ySDExYTIsMiwwLDAsMC0yLDJ2OEg2VjZoNHY2YTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkgxMlY2SDI2LjUxTDMwLDkuNTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0zMCwxMy41aDBWMzBIMjdWMjJhMiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhINlY2aDR2NmEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTEuNjhsLS40My0uM0gxMlY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIs''@;'; put 'put ''MCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTI1LDMwSDExVjIySDI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIg''@;'; put 'put ''Y3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDE1LjRWMzBIMjdWMjJhMiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhINlY2aDR2''@;'; put 'put ''NmEyLDIsMCwwLDAsMiwyaDcuMzVhMy41NCwzLjU0LDAsMCwxLS43Ny0ySDEyVjZoOS4yOWwxLjE1LTJINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNS40Wk0yNSwzMEgxMVYyMkgyNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEu''@;'; put 'put ''MTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjM2LDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY4Ljc4''@;'; put 'put ''Wk0yNiwzMEgxMFYyMS41QTEuNSwxLjUsMCwwLDEsMTEuNSwyMGgxM0ExLjUsMS41LDAsMCwxLDI2LDIxLjVaTTI0LDE0SDEyYTIsMiwwLDAsMS0yLTJWNmgydjZIMjZBMiwyLDAsMCwxLDI0LDE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTMwLDEzLjVhNy40Niw3LjQ2LDAsMCwxLTQtMS4xOEEyLDIsMCwwLDEsMjQsMTRIMTJhMiwyLDAsMCwxLTItMlY2aDJ2NkgyNS41NGE3LjQ1LDcuNDUsMCwwLDEtMi43Ni04SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTMu''@;'; put 'put ''MjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTI2LDMwSDEwVjIxLjVBMS41LDEuNSwwLDAsMSwxMS41LDIwaDEzQTEuNSwxLjUsMCwwLDEsMjYsMjEuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2ly''@;'; put 'put ''Y2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY5LDMuNjksMCwwLDEsMTkuMzUsMTRIMTJhMiwyLDAsMCwx''@;'; put 'put ''LTItMlY2aDJ2Nmg2LjU4QTMuNjcsMy42NywwLDAsMSwxOSw5Ljg5TDIyLjQ1LDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNS40Wk0yNiwzMEgxMFYyMS41QTEuNSwxLjUsMCwwLDEsMTEuNSwyMGgxM0ExLjUsMS41LDAsMCwxLDI2LDIxLjVa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2''@;'; put 'put ''LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVDb21wdXRlcj0oMCxwLmNsckljb25TVkcpKCc8cG9seWdvbiBw''@;'; put 'put ''b2ludHM9IjkuNiAyMi44OCA5LjYgMTAuNiAyNC40IDEwLjYgMjUuOTggOSA4IDkgOCAyMi44OCA5LjYgMjIuODgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNiw3SDMwVjIzaDJWNi41QTEuNSwxLjUsMCwwLDAs''@;'; put 'put ''MzAuNSw1SDUuNUExLjUsMS41LDAsMCwwLDQsNi41VjIzSDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEsMjV2My40QTIuNiwyLjYsMCwwLDAsMy42LDMxSDMyLjM0YTIuNiwyLjYsMCwwLDAsMi42LTIuNlYy''@;'; put 'put ''NVptMzIsMy40YS42LjYsMCwwLDEtLjYuNkgzLjU2YS42LjYsMCwwLDEtLjYtLjZWMjYuNTNoOS45NWExLjY0LDEuNjQsMCwwLDAsMS41LDFoNy4xM2ExLjY0LDEuNjQsMCwwLDAsMS41LTFIMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTEsMjV2My40QTIuNiwyLjYsMCwwLDAsMy42LDMxSDMyLjM0YTIuNiwyLjYsMCwwLDAsMi42LTIuNlYyNVptMzIsMy40YS42LjYsMCwwLDEtLjYuNkgzLjU2YS42LjYsMCwwLDEtLjYtLjZWMjYuNTNoOS45NWExLjY0LDEuNjQsMCwwLDAsMS41LDFoNy4xM2ExLjY0''@;'; put 'put ''LDEuNjQsMCwwLDAsMS41LTFIMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTkuNiwyMi44OFYxMC42aDkuMTRBMy42NCwzLjY0LDAsMCwxLDE5LDkuODlMMTkuNTYsOUg4VjIy''@;'; put 'put ''Ljg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik02LDdIMjAuNzFsMS4xNS0ySDUuNUExLjUsMS41LDAsMCwwLDQsNi41VjIzSDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMzAiIHk9IjE1LjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjcuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMSwyNXYzLjRBMi42LDIuNiwwLDAsMCwzLjYsMzFIMzIuMzRhMi42LDIuNiwwLDAsMCwyLjYtMi42VjI1Wm0zMiwzLjRhLjYuNiwwLDAsMS0uNi42SDMuNTZhLjYuNiwwLDAs''@;'; put 'put ''MS0uNi0uNlYyNi41M2g5Ljk1YTEuNjQsMS42NCwwLDAsMCwxLjUsMWg3LjEzYTEuNjQsMS42NCwwLDAsMCwxLjUtMUgzM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsNmE3''@;'; put 'put ''LjUyLDcuNTIsMCwwLDEsLjA3LTFINS41QTEuNSwxLjUsMCwwLDAsNCw2LjVWMjNINlY3SDIyLjU3QTcuNTIsNy41MiwwLDAsMSwyMi41LDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0zMCwxMy41VjIzaDJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4xMyw5SDhWMjIuODhIOS42VjEwLjZIMjQuMDhBNy40''@;'; put 'put ''OSw3LjQ5LDAsMCwxLDIzLjEzLDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODEsMjZjLS4zNS45LS45NCwxLjUtMS42MSwxLjVIMTMuNzRjLS42OCwwLTEuMjYtLjYtMS42MS0xLjVIMXYxLjc1QTIuNDUsMi40NSwwLDAsMCwzLjYsMzBIMzIuNEEyLjQ1LDIuNDUs''@;'; put 'put ''MCwwLDAsMzUsMjcuNzVWMjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNywxMEgyOVYyNGgzVjcuNTdBMS41NCwxLjU0LDAsMCwwLDMwLjUsNkg1LjVBMS41NCwxLjU0LDAsMCwwLDQsNy41N1YyNEg3WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjgxLDI2Yy0uMzUuOS0uOTQsMS41LTEuNjEsMS41SDEzLjc0Yy0uNjgsMC0xLjI2LS42LTEuNjEtMS41SDF2MS43NUEyLjQ1LDIuNDUsMCwwLDAsMy42LDMwSDMyLjRBMi40NSwyLjQ1''@;'; put 'put ''LDAsMCwwLDM1LDI3Ljc1VjI2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjkiIHk9IjE1LjQiIHdpZHRoPSIzIiBoZWlnaHQ9IjguNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTcsMTBIMTlMMTksOS44OSwyMS4yOSw2SDUuNUExLjU0LDEuNTQsMCwwLDAsNCw3LjU3VjI0SDdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVy''@;'; put 'put ''dGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODEsMjZjLS4zNS45LS45NCwxLjUtMS42MSwxLjVIMTMuNzRjLS42OCwwLTEuMjYtLjYtMS42MS0xLjVIMXYxLjc1QTIuNDUsMi40NSwwLDAsMCwzLjYs''@;'; put 'put ''MzBIMzIuNEEyLjQ1LDIuNDUsMCwwLDAsMzUsMjcuNzVWMjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTcsMTBIMjMuNjZBNy40Niw3LjQ2LDAsMCwxLDIyLjUsNkg1LjVBMS41NCwxLjU0''@;'; put 'put ''LDAsMCwwLDQsNy41N1YyNEg3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMmE3LjE0LDcuMTQsMCwwLDEtMywuMlYyNGgzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZURp''@;'; put 'put ''c3BsYXk9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLjUsM0gzLjVBMS41LDEuNSwwLDAsMCwyLDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCwwLDM0LDI1LjVWNC41QTEuNSwxLjUsMCwwLDAsMzIuNSwzWk0zMiwyNUg0VjVIMzJaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI3LjcgOC43NiAyOC4xMyA4Ljc2IDI5Ljk0IDcuMTYgNi4xIDcuMTYgNi4xIDIzIDcuNyAyMyA3LjcgOC43NiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMjEuMjRWMjkuNUE0LjIsNC4yLDAsMCwwLDIyLjE3LDMySDEzLjgzYTQuMiw0LjIsMCwwLDAsLjkzLTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEs''@;'; put 'put ''MCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEs''@;'; put 'put ''MCwwLDEtMS41LTIuNTJWMjguMTNIMjEuMjRWMjkuNUE0LjIsNC4yLDAsMCwwLDIyLjE3LDMySDEzLjgzYTQuMiw0LjIsMCwwLDAsLjkzLTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwx''@;'; put 'put ''LTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMyVjI1SDRWNUgyMS44N0wyMywzSDMuNUExLjUsMS41LDAsMCwwLDIsNC41djIx''@;'; put 'put ''QTEuNSwxLjUsMCwwLDAsMy41LDI3aDI5QTEuNSwxLjUsMCwwLDAsMzQsMjUuNVYxNS4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjcuNyAyMyA3LjcgOC43NiAx''@;'; put 'put ''OS43IDguNzYgMjAuNjIgNy4xNiA2LjEgNy4xNiA2LjEgMjMgNy43IDIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCww''@;'; put 'put ''LDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMjEuMjRWMjkuNUE0LjIsNC4yLDAsMCwwLDIyLjE3LDMySDEzLjgzYTQuMiw0LjIsMCwwLDAsLjkzLTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45''@;'; put 'put ''NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNi4xLDIzSDcuN1Y4Ljc2SDIzYTcuNDQs''@;'; put 'put ''Ny40NCwwLDAsMS0uNDMtMS42SDYuMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDEzLjIyVjI1SDRWNUgyMi41N2E3LjQ1LDcuNDUsMCwwLDEsLjU1LTJIMy41QTEuNSwxLjUs''@;'; put 'put ''MCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwzLjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJW''@;'; put 'put ''MjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTMyLjUsM0gzLjVBMS41LDEuNSwwLDAsMCwyLDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCwwLDM0LDI1LjVWNC41QTEuNSwxLjUsMCwwLDAsMzIuNSwzWk0zMSwyMS44M0g1VjdIMzFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMzJIMjQuMjZhMy42MSwzLjYxLDAsMCwxLTEuNS0yLjUyVjI4LjEzSDEzLjI0VjI5LjVBMy42MSwzLjYxLDAsMCwxLDExLjc0LDMySDkuOTRhMSwxLDAsMSwwLDAsMkgyNi4wNmEuOTIuOTIsMCwwLDAsMS0xQTEsMSwwLDAsMCwyNiwzMloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMxdjYuNDNINVY3SDIwLjcxTDIzLDNIMy41QTEuNSwxLjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwzLjUsMjdoMjlB''@;'; put 'put ''MS41LDEuNSwwLDAsMCwzNCwyNS41VjE1LjM4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEu''@;'; put 'put ''MjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LDMySDI0''@;'; put 'put ''LjI2YTMuNjEsMy42MSwwLDAsMS0xLjUtMi41MlYyOC4xM0gxMy4yNFYyOS41QTMuNjEsMy42MSwwLDAsMSwxMS43NCwzMkg5Ljk0YTEsMSwwLDEsMCwwLDJIMjYuMDZhLjkyLjkyLDAsMCwwLDEtMUExLDEsMCwwLDAsMjYsMzJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDEzLjQzdjguNDFINVY3SDIyLjU3YTcuMjksNy4yOSwwLDAsMSwuNTUtNEgzLjVBMS41LDEuNSwwLDAsMCwyLDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCwwLDM0LDI1LjVW''@;'; put 'put ''MTIuMzRBNy40NCw3LjQ0LDAsMCwxLDMxLDEzLjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZVRlcm1pbmFsPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw1SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIs''@;'; put 'put ''NVpNNCw3SDMyVjkuMkg0Wk00LDI5VjEwLjhIMzJWMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3IiB5PSIyMyIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjcgMTUuNjggMTMuNzkgMTguOCA3IDIxLjkxIDcgMjQuMTEgMTYuNiAxOS43IDE2LjYgMTcuODkgNyAxMy40OCA3IDE1LjY4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxyZWN0IHg9IjE3IiB5PSIyMyIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjcgMjQuMTEgMTYuNiAxOS43''@;'; put 'put ''IDE2LjYgMTcuODkgNyAxMy40OCA3IDE1LjY4IDEzLjc5IDE4LjggNyAyMS45MSA3IDI0LjExIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMyVjI5SDRWMTAu''@;'; put 'put ''OEgxOC42OEEzLjY2LDMuNjYsMCwwLDEsMTksOS44OWwuNC0uNjlINFY3SDIwLjcxbDEuMTUtMkg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE1LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMt''@;'; put 'put ''LWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNyIgeT0iMjMiIHdpZHRoPSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iNyAyNC4xMSAxNi42IDE5LjcgMTYuNiAxNy44OSA3IDEzLjQ4IDcgMTUuNjggMTMuNzkgMTguOCA3IDIxLjkxIDcgMjQuMTEiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMlYyOUg0VjEwLjhIMjQuMjRhNy41MSw3LjUxLDAsMCwxLTEtMS42SDRWN0gyMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xSDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCww''@;'; put 'put ''LDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDVINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMiw1''@;'; put 'put ''Wk02LjgsMTUuODFWMTMuMTdsMTAsNC41OXYyLjA4bC0xMCw0LjU5VjIxLjc4bDYuNTEtM1pNMjMuNCwyNS40SDE3VjIzaDYuNFpNNCw5LjJWN0gzMlY5LjJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1''@;'; put 'put ''LjRIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsLjQtLjY5SDRWN0gyMC43MWwxLjE1LTJINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNMTYuOCwxOS44M2wtMTAsNC41OVYyMS43OGw2LjUxLTMtNi41MS0zVjEzLjE3bDEwLDQu''@;'; put 'put ''NTlabTYuNiw1LjU3SDE3VjIzaDYuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwx''@;'; put 'put ''LjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcu''@;'; put 'put ''NDksNy40OSwwLDAsMS02Ljc4LTQuM0g0VjdIMjIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDYsNy40NiwwLDAsMSwzMCwxMy41Wk0xNi44LDE5''@;'; put 'put ''LjgzbC0xMCw0LjU5VjIxLjc4bDYuNTEtMy02LjUxLTNWMTMuMTdsMTAsNC41OVptNi42LDUuNTdIMTdWMjNoNi40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9''@;'; put 'put ''IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZUNvZGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5''@;'; put 'put ''LDE2Ljc4YTEsMSwwLDAsMCwwLDEuNjVsNi41Myw0LjQ1YTEsMSwwLDEsMCwxLjEzLTEuNjVMOC4xMywxNy42MSwxMy40NSwxNEExLDEsMCwwLDAsMTMuNzEsMTIuNTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0zMC4yMSwxNi43OGwtNi41My00LjQ1QTEsMSwwLDEsMCwyMi41NSwxNGw1LjMyLDMuNjMtNS4zMiwzLjYzYTEsMSwwLDAsMCwxLjEzLDEuNjVsNi41My00LjQ1YTEsMSwwLDAsMCwwLTEuNjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0xOS45NCw5LjgzYS45LjksMCwwLDAtMS4wOS42NkwxNS40MSwyNC4yOWEuOS45LDAsMCwwLC42NiwxLjA5bC4yMiwwYS45LjksMCwwLDAsLjg3LS42OGwzLjQ0LTEzLjgxQS45LjksMCwwLDAsMTkuOTQsOS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5LDE2Ljc4YTEsMSwwLDAsMCwwLDEuNjVsNi41Myw0LjQ1YTEsMSwwLDEsMCwxLjEzLTEuNjVMOC4xMywxNy42MSwxMy40NSwxNEExLDEsMCwwLDAsMTMu''@;'; put 'put ''NzEsMTIuNTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC41NiwxMS42MiwxNS40MSwyNC4yOWEuOS45LDAsMCwwLC42NiwxLjA5bC4yMiwwYS45LjksMCwwLDAsLjg3LS42''@;'; put 'put ''OEwxOS43MywxNC40YTMuNTksMy41OSwwLDAsMS0xLjE2LTIuNzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC4yMSwxNi43OGwtMi0xLjM4SDI0LjY0bDMuMjQsMi4yMS01''@;'; put 'put ''LjMyLDMuNjNhMSwxLDAsMCwwLDEuMTMsMS42NWw2LjUzLTQuNDVhMSwxLDAsMCwwLDAtMS42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFB''@;'; put 'put ''MS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFs''@;'; put 'put ''ZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5LDE2Ljc4YTEsMSwwLDAsMCwwLDEuNjVsNi41Myw0LjQ1YTEsMSwwLDEsMCwxLjEzLTEuNjVMOC4xMywxNy42MSwxMy40NSwxNEExLDEsMCwwLDAsMTMuNzEsMTIuNTlaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuMjEsMTYuNzhsLTYuNTMtNC40NUExLDEsMCwxLDAsMjIuNTUsMTRsNS4zMiwzLjYzLTUuMzIsMy42M2ExLDEsMCwwLDAsMS4xMywxLjY1''@;'; put 'put ''bDYuNTMtNC40NWExLDEsMCwwLDAsMC0xLjY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5Ljk0LDkuODNhLjkuOSwwLDAsMC0xLjA5LjY2TDE1LjQxLDI0LjI5YS45LjksMCww''@;'; put 'put ''LDAsLjY2LDEuMDlsLjIyLDBhLjkuOSwwLDAsMCwuODctLjY4bDMuNDQtMTMuODFBLjkuOSwwLDAsMCwxOS45NCw5LjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5''@;'; put 'put ''PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxiLkNsclNoYXBlQXBwbGljYXRpb249KDAscC5jbHJJY29uU1ZHKSgnPHJlY3QgeD0iNSIgeT0iNyIgd2lkdGg9IjIi''@;'; put 'put ''IGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI5IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxyZWN0IHg9IjEzIiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwy''@;'; put 'put ''LTJWNkEyLDIsMCwwLDAsMzIsNFpNNCw2SDMydjQuMkg0Wk00LDMwVjExLjhIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIs''@;'; put 'put ''MiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFptMCw2LjJINFY2SDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjUiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI5IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTMiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVCYXR0ZXJ5PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOC41OSwxMS43N2ExLDEsMCwwLDAtMS43MywxbDIuNSw0LjM0LTYuMDctMSw1LjI5LDEwLjU5YTEsMSwwLDAsMCwx''@;'; put 'put ''Ljc5LS44OWwtMy41My03LjA4LDYuMzgsMS4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LjEyLDRIMjNWMy41OEExLjU4LDEuNTgsMCwwLDAsMjEuNDIsMkgxNC41OEExLjU4LDEuNTgsMCwwLDAsMTMs''@;'; put 'put ''My41OFY0SDEwLjg4QTEuODgsMS44OCwwLDAsMCw5LDUuODhWMzIuMTJBMS44OCwxLjg4LDAsMCwwLDEwLjg4LDM0SDI1LjEyQTEuODgsMS44OCwwLDAsMCwyNywzMi4xMlY1Ljg4QTEuODgsMS44OCwwLDAsMCwyNS4xMiw0Wk0yNSwzMkgxMVY2aDRWNGg2VjZoNFoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjU5LDExLjc3YTEsMSwwLDAsMC0xLjczLDFsMi41LDQuMzQtNi4wNy0xLDUuMjksMTAuNTlhMSwxLDAsMCwwLDEuNzktLjg5bC0zLjUzLTcuMDgsNi4zOCwxLjA2WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsMTUuNFYzMkgxMVY2aDRWNGg2VjZoLjI4bDEuNjQtMi44NUEx''@;'; put 'put ''LjU3LDEuNTcsMCwwLDAsMjEuNDIsMkgxNC41OEExLjU4LDEuNTgsMCwwLDAsMTMsMy41OFY0SDEwLjg4QTEuODgsMS44OCwwLDAsMCw5LDUuODhWMzIuMTJBMS44OCwxLjg4LDAsMCwwLDEwLjg4LDM0SDI1LjEyQTEuODgsMS44OCwwLDAsMCwyNywzMi4xMlYxNS40WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2Ui''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguNTksMTEuNzdhMSwxLDAsMCwwLTEuNzMsMWwyLjUsNC4zNC02LjA3LTEsNS4yOSwxMC41OWExLDEsMCwwLDAsMS43OS0uODlsLTMuNTMtNy4wOCw2LjM4LDEuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsMTEuNThWMzJIMTFWNmg0VjRoNlY2SDIyLjVBNy40Nyw3LjQ3LDAsMCwxLDIzLDMuMzgsMS41NywxLjU3LDAsMCwwLDIxLjQyLDJIMTQuNThBMS41OCwxLjU4LDAsMCwwLDEzLDMuNThWNEgxMC44OEExLjg4''@;'; put 'put ''LDEuODgsMCwwLDAsOSw1Ljg4VjMyLjEyQTEuODgsMS44OCwwLDAsMCwxMC44OCwzNEgyNS4xMkExLjg4LDEuODgsMCwwLDAsMjcsMzIuMTJWMTIuODdBNy41LDcuNSwwLDAsMSwyNSwxMS41OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJh''@;'; put 'put ''ZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiw0VjIuNjJBLjYuNiwwLDAsMCwyMS40MiwySDE0LjU4YS42LjYsMCwwLDAtLjU4LjYyVjRIMTBBMS4wOSwxLjA5LDAsMCwwLDksNS4wN3YyOEExLDEsMCwwLDAsMTAsMzRIMjZhMSwxLDAsMCwwLDEtLjk0di0yOEExLjA5LDEuMDks''@;'; put 'put ''MCwwLDAsMjYsNFpNMjAuMjYsMjUuNDRhMS4yLDEuMiwwLDAsMS0yLjE1LDEuMDdMMTIuNjUsMTUuNTZsNiwxLTIuMjktNGExLjIsMS4yLDAsMSwxLDIuMDgtMS4ybDQuODMsOC4zN0wxNi45LDE4LjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY2LDMuNjYsMCwwLDEsMjAuNTUsMTVsMi43Niw0Ljc5TDE2LjksMTguN2wzLjM2LDYuNzNhMS4yLDEuMiwwLDAsMS0yLjE1LDEuMDdMMTIuNjUsMTUuNTZs''@;'; put 'put ''NiwxLTIuMjktNGExLjIsMS4yLDAsMSwxLDIuMDgtMS4ybC4wOS4xNUEzLjY2LDMuNjYsMCwwLDEsMTksOS44OUwyMi40NSw0SDIyVjIuNjJBLjYuNiwwLDAsMCwyMS40MiwySDE0LjU4YS42LjYsMCwwLDAtLjU4LjYyVjRIMTBBMS4wOSwxLjA5LDAsMCwwLDksNS4wN3YyOEExLDEsMCwwLDAs''@;'; put 'put ''MTAsMzRIMjZhMSwxLDAsMCwwLDEtLjk0VjE1LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YTcuNDksNy40OSwwLDAsMSwuMjgtMkgyMlYyLjYyQS42LjYsMCwwLDAsMjEuNDIsMkgxNC41OGEuNi42LDAsMCwwLS41OC42MlY0SDEwQTEuMDksMS4wOSwwLDAsMCw5''@;'; put 'put ''LDUuMDd2MjhBMSwxLDAsMCwwLDEwLDM0SDI2YTEsMSwwLDAsMCwxLS45NFYxMi44N0E3LjUsNy41LDAsMCwxLDIyLjUsNlpNMjAuMjYsMjUuNDRhMS4yLDEuMiwwLDAsMS0yLjE1LDEuMDdMMTIuNjUsMTUuNTZsNiwxLTIuMjktNGExLjIsMS4yLDAsMSwxLDIuMDgtMS4ybDQuODMsOC4zN0wx''@;'; put 'put ''Ni45LDE4LjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZU1vYmlsZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUsNEgxMUEyLDIsMCwwLDAsOSw2VjMwYTIsMiwwLDAsMCwyLDJI''@;'; put 'put ''MjVhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyNSw0Wk0xMSw2SDI1VjI0SDExWm0wLDI0VjI2SDI1djRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3IiB5PSIyNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsNEgxMUEyLDIsMCwwLDAsOSw2VjMwYTIsMiwwLDAsMCwyLDJIMjVhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyNSw0Wk0xOSwzMEgxN1YyOGgyWm0tOC00VjZI''@;'; put 'put ''MjVWMjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAnKSxiLkNsclNoYXBlVGFibGV0PSgwLHAuY2xySWNvblNWRykoJzxyZWN0IHg9IjE3IiB5PSIyOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMkg2QTIsMiwwLDAsMCw0LDRWMzJhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAsMCwwLDMwLDJabTAsMlYyNi4zOEg2VjRaTTYsMzJWMjhIMzB2NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDJINkEyLDIsMCwwLDAsNCw0VjMyYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwzMCwyWk0xOSwzMkgxN1YzMGgyWk02LDI4VjRIMzBWMjhaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAnKSxiLkNsclNoYXBlTmV0d29ya0dsb2JlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuNzUsMmExNCwxNCwwLDAsMC0xNCwxNGMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwQTE0LDE0LDAsMSwwLDE3Ljc1LDJabTAsMmExMiwxMiwwLDAsMSw4LjQ0LDMuNDhjMCwuMzMsMCwuNjYsMCwxQTE4LjUxLDE4''@;'; put 'put ''LjUxLDAsMCwwLDE0LDguNTNhMi4zMywyLjMzLDAsMCwwLTEuMTQtLjYxbC0uMjUsMGMtLjEyLS40Mi0uMjMtLjg0LS4zMi0xLjI3cy0uMTQtLjgxLS4xOS0xLjIyQTExLjkyLDExLjkyLDAsMCwxLDE3Ljc1LDRabS0zLDUuODdBMTcsMTcsMCwwLDEsMjUuOTIsMTBhMTYuOSwxNi45LDAsMCwx''@;'; put 'put ''LTMuMTEsNywyLjI4LDIuMjgsMCwwLDAtMi41OC41N2MtLjM1LS4yLS43LS40LTEtLjYzYTE2LDE2LDAsMCwxLTQuOTMtNS4yMywyLjI1LDIuMjUsMCwwLDAsLjQ3LTEuNzdabS00LTMuNmMwLC4yMS4wNi40My4xLjY0LjA5LjQ0LjIxLjg3LjMzLDEuM2EyLjI4LDIuMjgsMCwwLDAtMS4xLDIu''@;'; put 'put ''MjVBMTguMzIsMTguMzIsMCwwLDAsNS45LDE0LjIyLDEyLDEyLDAsMCwxLDEwLjc2LDYuMjdabTAsMTUuNzFBMi4zNCwyLjM0LDAsMCwwLDkuMiwyMy43NGwtLjY0LDBBMTEuOTQsMTEuOTQsMCwwLDEsNS44LDE2LjkybC4xMS0uMTlhMTYuOSwxNi45LDAsMCwxLDQuODEtNC44OSwyLjMxLDIu''@;'; put 'put ''MzEsMCwwLDAsMi4yOC42MywxNy41MywxNy41MywwLDAsMCw1LjM1LDUuNjVjLjQxLjI3LjgzLjUyLDEuMjUuNzZBMi4zMiwyLjMyLDAsMCwwLDE5Ljc4LDIwYTE2Ljk0LDE2Ljk0LDAsMCwxLTYuMiwzLjExQTIuMzQsMi4zNCwwLDAsMCwxMC43NiwyMlptNyw2YTExLjkyLDExLjkyLDAsMCwx''@;'; put 'put ''LTUuODEtMS41MWwuMjgtLjA2YTIuMzQsMi4zNCwwLDAsMCwxLjU3LTEuNzksMTguNDMsMTguNDMsMCwwLDAsNy0zLjUsMi4yOSwyLjI5LDAsMCwwLDMtLjYyLDE3LjQxLDE3LjQxLDAsMCwwLDQuMzIuNTZsLjUzLDBBMTIsMTIsMCwwLDEsMTcuNzUsMjhabTYuNTEtOC45YTIuMzMsMi4zMyww''@;'; put 'put ''LDAsMC0uMzMtMS4xOSwxOC40LDE4LjQsMCwwLDAsMy4zOS03LjM3cS43NS4zNSwxLjQ4Ljc4YTEyLDEyLDAsMCwxLC40Miw4LjJBMTYsMTYsMCwwLDEsMjQuMjcsMTkuMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzMsMTUuNGgtMmMwLC4yLDAsLjQsMCwu''@;'; put 'put ''NjFhMTIsMTIsMCwwLDEtLjUzLDMuNTIsMTYsMTYsMCwwLDEtNS0uNDEsMi4zMywyLjMzLDAsMCwwLS4zMy0xLjE5LDE4Ljg3LDE4Ljg3LDAsMCwwLDEuNjItMi41MkgyMy44M2ExNy4yOSwxNy4yOSwwLDAsMS0xLDEuNTQsMi4yOCwyLjI4LDAsMCwwLTIuNTguNTdjLS4zNS0uMi0uNy0uNC0x''@;'; put 'put ''LS42M2ExNiwxNiwwLDAsMS00LjkzLTUuMjMsMi4yNSwyLjI1LDAsMCwwLC40Ny0xLjc3QTE3LjA4LDE3LjA4LDAsMCwxLDE5LjU2LDlsLjg3LTEuNTFhMTguNTksMTguNTksMCwwLDAtNi4zOSwxLDIuMzMsMi4zMywwLDAsMC0xLjE0LS42MWwtLjI1LDBjLS4xMi0uNDItLjIzLS44NC0uMzIt''@;'; put 'put ''MS4yN3MtLjE0LS44MS0uMTktMS4yMkExMS44OCwxMS44OCwwLDAsMSwyMiw0Ljc5TDIzLDNBMTQsMTQsMCwwLDAsMy43NSwxNmMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwQTE0LDE0LDAsMCwwLDMxLjc2LDE2QzMxLjc2LDE1LjgsMzEuNzQsMTUuNiwzMS43MywxNS40Wm0tMjEtOS4xM2Mw''@;'; put 'put ''LC4yMS4wNi40My4xLjY0LjA5LjQ0LjIxLjg3LjMzLDEuM2EyLjI4LDIuMjgsMCwwLDAtMS4xLDIuMjVBMTguMzIsMTguMzIsMCwwLDAsNS45LDE0LjIyLDEyLDEyLDAsMCwxLDEwLjc2LDYuMjdabTAsMTUuNzFBMi4zNCwyLjM0LDAsMCwwLDkuMiwyMy43NGwtLjY0LDBBMTEuOTQsMTEuOTQs''@;'; put 'put ''MCwwLDEsNS44LDE2LjkybC4xMS0uMTlhMTYuOSwxNi45LDAsMCwxLDQuODEtNC44OSwyLjMxLDIuMzEsMCwwLDAsMi4yOC42MywxNy41MywxNy41MywwLDAsMCw1LjM1LDUuNjVjLjQxLjI3LjgzLjUyLDEuMjUuNzZBMi4zMiwyLjMyLDAsMCwwLDE5Ljc4LDIwYTE2Ljk0LDE2Ljk0LDAsMCwx''@;'; put 'put ''LTYuMiwzLjExQTIuMzQsMi4zNCwwLDAsMCwxMC43NiwyMlptNyw2YTExLjkyLDExLjkyLDAsMCwxLTUuODEtMS41MWwuMjgtLjA2YTIuMzQsMi4zNCwwLDAsMCwxLjU3LTEuNzksMTguNDMsMTguNDMsMCwwLDAsNy0zLjUsMi4yOSwyLjI5LDAsMCwwLDMtLjYyLDE3LjQxLDE3LjQxLDAsMCww''@;'; put 'put ''LDQuMzIuNTZsLjUzLDBBMTIsMTIsMCwwLDEsMTcuNzUsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4y''@;'; put 'put ''MywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjUsMTMuMzVhNy41NCw3LjU0LDAs''@;'; put 'put ''MCwxLTEuNS4xNWwtLjUxLDBhMTEuOTEsMTEuOTEsMCwwLDEtLjI1LDYsMTYsMTYsMCwwLDEtNS0uNDEsMi4zMywyLjMzLDAsMCwwLS4zMy0xLjE5LDE4LjU5LDE4LjU5LDAsMCwwLDIuNzgtNS4xOCw3LjQ5LDcuNDksMCwwLDEtMS4zMS0uODIsMTcsMTcsMCwwLDEtMi42MSw1LDIuMjgsMi4y''@;'; put 'put ''OCwwLDAsMC0yLjU4LjU3Yy0uMzUtLjItLjctLjQtMS0uNjNhMTYsMTYsMCwwLDEtNC45My01LjIzLDIuMjUsMi4yNSwwLDAsMCwuNDctMS43NywxNywxNywwLDAsMSw4LjUzLS42Miw3LjQzLDcuNDMsMCwwLDEtLjU2LTEuNTlBMTguNTYsMTguNTYsMCwwLDAsMTQsOC41M2EyLjMzLDIuMzMs''@;'; put 'put ''MCwwLDAtMS4xNC0uNjFsLS4yNSwwYy0uMTItLjQyLS4yMy0uODQtLjMyLTEuMjdzLS4xNC0uODEtLjE5LTEuMjJBMTEuOTIsMTEuOTIsMCwwLDEsMjIuNTcsNWE3LjQ1LDcuNDUsMCwwLDEsLjUzLTJBMTQsMTQsMCwwLDAsMy43NSwxNmMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwYTE0LDE0''@;'; put 'put ''LDAsMSwwLDI3LjY4LTRaTTEwLjc2LDYuMjdjMCwuMjEuMDYuNDMuMS42NC4wOS40NC4yMS44Ny4zMywxLjNhMi4yOCwyLjI4LDAsMCwwLTEuMSwyLjI1QTE4LjMyLDE4LjMyLDAsMCwwLDUuOSwxNC4yMiwxMiwxMiwwLDAsMSwxMC43Niw2LjI3Wm0wLDE1LjcxQTIuMzQsMi4zNCwwLDAsMCw5''@;'; put 'put ''LjIsMjMuNzRsLS42NCwwQTExLjk0LDExLjk0LDAsMCwxLDUuOCwxNi45MmwuMTEtLjE5YTE2LjksMTYuOSwwLDAsMSw0LjgxLTQuODksMi4zMSwyLjMxLDAsMCwwLDIuMjguNjMsMTcuNTMsMTcuNTMsMCwwLDAsNS4zNSw1LjY1Yy40MS4yNy44My41MiwxLjI1Ljc2QTIuMzIsMi4zMiwwLDAs''@;'; put 'put ''MCwxOS43OCwyMGExNi45NCwxNi45NCwwLDAsMS02LjIsMy4xMUEyLjM0LDIuMzQsMCwwLDAsMTAuNzYsMjJabTcsNmExMS45MiwxMS45MiwwLDAsMS01LjgxLTEuNTFsLjI4LS4wNmEyLjM0LDIuMzQsMCwwLDAsMS41Ny0xLjc5LDE4LjQzLDE4LjQzLDAsMCwwLDctMy41LDIuMjksMi4yOSww''@;'; put 'put ''LDAsMCwzLS42MiwxNy40MSwxNy40MSwwLDAsMCw0LjMyLjU2bC41MywwQTEyLDEyLDAsMCwxLDE3Ljc1LDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiBy''@;'; put 'put ''PSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LjU4LDMyaC0xOGExLDEsMCwxLDAsMCwyaDE4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjcyLDkuODdhMi4yNSwyLjI1LDAsMCwxLS40NywxLjc3LDE2LDE2LDAsMCwwLDQuOTMsNS4yM2MuMzQuMjMuNjkuNDMsMSwuNjNhMi4yOCwyLjI4LDAsMCwxLDIuNTgtLjU3LDE2LjksMTYuOSwwLDAs''@;'; put 'put ''MCwzLjExLTdBMTcsMTcsMCwwLDAsMTQuNzIsOS44N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuNzUsMmExNCwxNCwwLDAsMC0xNCwxNGMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwQTE0LDE0LDAsMSwwLDE3''@;'; put 'put ''Ljc1LDJaTTI4LjEsMjEuMDlhMTcuNDEsMTcuNDEsMCwwLDEtNC4zMi0uNTYsMi4yOSwyLjI5LDAsMCwxLTMsLjYyLDE4LjQzLDE4LjQzLDAsMCwxLTcsMy41LDIuMzQsMi4zNCwwLDAsMS0xLjU3LDEuNzlsLS4yOS4wNmExMS45MywxMS45MywwLDAsMS0zLjM5LTIuOGwuNjYsMGEyLjMzLDIu''@;'; put 'put ''MzMsMCwwLDEsNC4zNy0uNThBMTYuOTQsMTYuOTQsMCwwLDAsMTkuNzgsMjBhMi4zMiwyLjMyLDAsMCwxLS4xOC0xLjE3Yy0uNDItLjI0LS44NC0uNDktMS4yNS0uNzZBMTcuNTMsMTcuNTMsMCwwLDEsMTMsMTIuNDdhMi4zMSwyLjMxLDAsMCwxLTIuMjgtLjYzLDI3LjMxLDI3LjMxLDAsMCww''@;'; put 'put ''LTUsNC43NGMwLS4yLDAtLjM5LDAtLjU3YTEyLDEyLDAsMCwxLC4xNC0xLjczLDE4Ljc1LDE4Ljc1LDAsMCwxLDQuMi0zLjgsMi4yOCwyLjI4LDAsMCwxLDEuMS0yLjI1Yy0uMTItLjQzLS4yNC0uODYtLjMzLTEuMywwLS4xNCwwLS4yOS0uMTEtLjY0YTEyLDEyLDAsMCwxLDEuMzctLjg3Yy4x''@;'; put 'put ''LjU5LjE0LjkuMjEsMS4yMXMuMi44NS4zMiwxLjI3bC4yNSwwQTIuMzMsMi4zMywwLDAsMSwxNCw4LjUzYTE4LjUxLDE4LjUxLDAsMCwxLDEyLjExLS4wN2MwLS4zMiwwLS42NSwwLTFoMGExMiwxMiwwLDAsMSwyLjYyLDMuODVoMHEtLjczLS40My0xLjQ4LS43OGExOC40LDE4LjQsMCwwLDEt''@;'; put 'put ''My4zOSw3LjM3LDIuMzMsMi4zMywwLDAsMSwuMzMsMS4xOSwyMiwyMiwwLDAsMCw1LC40NSwxMS44OCwxMS44OCwwLDAsMS0uNjEsMS41M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSww''@;'; put 'put ''LDEsMCwwLDJoMThhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzMsMTUuNEgyNS41NmExOC44NywxOC44NywwLDAsMS0xLjYyLDIuNTIsMi4zMywyLjMz''@;'; put 'put ''LDAsMCwxLC4zMywxLjE5LDIyLDIyLDAsMCwwLDUsLjQ1LDExLjg4LDExLjg4LDAsMCwxLS42MSwxLjUzSDI4LjFhMTcuNDEsMTcuNDEsMCwwLDEtNC4zMi0uNTYsMi4yOSwyLjI5LDAsMCwxLTMsLjYyLDE4LjQzLDE4LjQzLDAsMCwxLTcsMy41LDIuMzQsMi4zNCwwLDAsMS0xLjU3LDEuNzls''@;'; put 'put ''LS4yOS4wNmExMS45MywxMS45MywwLDAsMS0zLjM5LTIuOGwuNjYsMGEyLjMzLDIuMzMsMCwwLDEsNC4zNy0uNThBMTYuOTQsMTYuOTQsMCwwLDAsMTkuNzgsMjBhMi4zMiwyLjMyLDAsMCwxLS4xOC0xLjE3Yy0uNDItLjI0LS44NC0uNDktMS4yNS0uNzZBMTcuNTMsMTcuNTMsMCwwLDEsMTMs''@;'; put 'put ''MTIuNDdhMi4zMSwyLjMxLDAsMCwxLTIuMjgtLjYzLDI3LjMxLDI3LjMxLDAsMCwwLTUsNC43NGMwLS4yLDAtLjM5LDAtLjU3YTEyLDEyLDAsMCwxLC4xNC0xLjczLDE4Ljc1LDE4Ljc1LDAsMCwxLDQuMi0zLjgsMi4yOCwyLjI4LDAsMCwxLDEuMS0yLjI1Yy0uMTItLjQzLS4yNC0uODYtLjMz''@;'; put 'put ''LTEuMywwLS4xNCwwLS4yOS0uMTEtLjY0YTEyLDEyLDAsMCwxLDEuMzctLjg3Yy4xLjU5LjE0LjkuMjEsMS4yMXMuMi44NS4zMiwxLjI3bC4yNSwwQTIuMzMsMi4zMywwLDAsMSwxNCw4LjUzYTE4LjU5LDE4LjU5LDAsMCwxLDYuMzktMUwyMywzQTE0LDE0LDAsMCwwLDMuNzUsMTZjMCwuNDUs''@;'; put 'put ''MCwuODkuMDcsMS4zM2wwLDBoMEExNCwxNCwwLDAsMCwzMS43NiwxNkMzMS43NiwxNS44LDMxLjc0LDE1LjYsMzEuNzMsMTUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuMjYs''@;'; put 'put ''MTEuNjRhMTYsMTYsMCwwLDAsNC45Myw1LjIzYy4zNC4yMy42OS40MywxLC42M2EyLjI4LDIuMjgsMCwwLDEsMi41OC0uNTcsMTcuMjksMTcuMjksMCwwLDAsMS0xLjU0aC0xLjZBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMTkuNTYsOWExNy4wOCwxNy4wOCwwLDAsMC00Ljg0Ljg4LDIuMjUs''@;'; put 'put ''Mi4yNSwwLDAsMS0uNDcsMS43N1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4''@;'; put 'put ''LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThh''@;'; put 'put ''MSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS41LDEzLjM1YTcuNTQsNy41NCwwLDAsMS0xLjUuMTUsNy40Niw3LjQ2LDAsMCwxLTMu''@;'; put 'put ''MjgtLjc2LDE4LjU5LDE4LjU5LDAsMCwxLTIuNzgsNS4xOCwyLjMzLDIuMzMsMCwwLDEsLjMzLDEuMTksMjIsMjIsMCwwLDAsNSwuNDUsMTEuODgsMTEuODgsMCwwLDEtLjYxLDEuNTNIMjguMWExNy40MSwxNy40MSwwLDAsMS00LjMyLS41NiwyLjI5LDIuMjksMCwwLDEtMywuNjIsMTguNDMs''@;'; put 'put ''MTguNDMsMCwwLDEtNywzLjUsMi4zNCwyLjM0LDAsMCwxLTEuNTcsMS43OWwtLjI5LjA2YTExLjkzLDExLjkzLDAsMCwxLTMuMzktMi44bC42NiwwYTIuMzMsMi4zMywwLDAsMSw0LjM3LS41OEExNi45NCwxNi45NCwwLDAsMCwxOS43OCwyMGEyLjMyLDIuMzIsMCwwLDEtLjE4LTEuMTdjLS40''@;'; put 'put ''Mi0uMjQtLjg0LS40OS0xLjI1LS43NkExNy41MywxNy41MywwLDAsMSwxMywxMi40N2EyLjMxLDIuMzEsMCwwLDEtMi4yOC0uNjMsMjcuMzEsMjcuMzEsMCwwLDAtNSw0Ljc0YzAtLjIsMC0uMzksMC0uNTdhMTIsMTIsMCwwLDEsLjE0LTEuNzMsMTguNzUsMTguNzUsMCwwLDEsNC4yLTMuOCwy''@;'; put 'put ''LjI4LDIuMjgsMCwwLDEsMS4xLTIuMjVjLS4xMi0uNDMtLjI0LS44Ni0uMzMtMS4zLDAtLjE0LDAtLjI5LS4xMS0uNjRhMTIsMTIsMCwwLDEsMS4zNy0uODdjLjEuNTkuMTQuOS4yMSwxLjIxcy4yLjg1LjMyLDEuMjdsLjI1LDBBMi4zMywyLjMzLDAsMCwxLDE0LDguNTNhMTguNTYsMTguNTYs''@;'; put 'put ''MCwwLDEsOC42NS0uODcsNy40NSw3LjQ1LDAsMCwxLC40MS00LjU5QTE0LDE0LDAsMCwwLDMuNzUsMTZjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMGExNCwxNCwwLDEsMCwyNy42OC00WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC43Miw5Ljg3YTIuMjUsMi4yNSwwLDAsMS0uNDcsMS43NywxNiwxNiwwLDAsMCw0LjkzLDUuMjNjLjM0LjIzLjY5LjQzLDEsLjYzYTIuMjgsMi4yOCwwLDAsMSwyLjU4LS41NywxNywxNywwLDAsMCwyLjYxLTUsNy41Miw3LjUyLDAsMCwxLTIuMTYt''@;'; put 'put ''Mi42N0ExNywxNywwLDAsMCwxNC43Miw5Ljg3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZU5ldHdvcmtTZXR0aW5ncz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTAuODUsMjcuNDRhMi4yOSwyLjI5LDAsMCwwLDEuNzQtMS42OGMuNTQtLjE0LDEuMDYtLjMyLDEuNTktLjUxdi0x''@;'; put 'put ''LjJhMi43NywyLjc3LDAsMCwxLC4wNi0uNTEsMTcuNDQsMTcuNDQsMCwwLDEtMS44Mi42MiwyLjI4LDIuMjgsMCwwLDAtNC4yOC42M2wtLjQ1LDBoMGExMS45MywxMS45MywwLDAsMS0yLjg4LTcuMjcsMTcuNzksMTcuNzksMCwwLDEsNS00LjcyLDIuMjMsMi4yMywwLDAsMCwyLjI5LjU2LDE4''@;'; put 'put ''LjUyLDE4LjUyLDAsMCwwLDQuNDcsNSwyLjc0LDIuNzQsMCwwLDEsLjIxLS4yNGwuOTUtLjkxYTE2LjksMTYuOSwwLDAsMS00LjM1LTQuNzksMi4yNywyLjI3LDAsMCwwLC4zNS0xLjJjMC0uMDcsMC0uMTQsMC0uMjJBMTcuNjksMTcuNjksMCwwLDEsMjUsMTFhMTcuNDksMTcuNDksMCwwLDEt''@;'; put 'put ''MS4xNSwzLjM0bC4xOSwwaDEuNTZhMTksMTksMCwwLDAsLjkxLTIuNzJjLjQzLjE5Ljg0LjQxLDEuMjYuNjRhMTEuOTQsMTEuOTQsMCwwLDEsMSw0LjA5bDAsMEEyLjc3LDIuNzcsMCwwLDEsMzAsMTZhMi43MywyLjczLDAsMCwxLC42OC4xQTE0LDE0LDAsMSwwLDE2LjA4LDMxYTIuNzIsMi43''@;'; put 'put ''MiwwLDAsMSwwLTJBMTEuOTMsMTEuOTMsMCwwLDEsMTAuODUsMjcuNDRaTTE2Ljc2LDVhMTIsMTIsMCwwLDEsOC42MSwzLjY2YzAsLjI1LDAsLjUxLS4wOC43NmExOS4yMSwxOS4yMSwwLDAsMC0xMi4zNS4xMUEyLjI4LDIuMjgsMCwwLDAsMTEuNzQsOWExNywxNywwLDAsMS0uNjEtMi41M0Ex''@;'; put 'put ''MS45MiwxMS45MiwwLDAsMSwxNi43Niw1Wk05LjY2LDcuMzZhMTguNzIsMTguNzIsMCwwLDAsLjQ5LDEuOTIsMi4yOCwyLjI4LDAsMCwwLTEuMDcsMS45M3MwLC4xLDAsLjE1QTE5LjQ1LDE5LjQ1LDAsMCwwLDUsMTQuNzksMTIsMTIsMCwwLDEsOS42Niw3LjM2WiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsMjEuMTlBMy44NCwzLjg0LDAsMSwwLDI4Ljg4LDI1LDMuODcsMy44NywwLDAsMCwyNSwyMS4xOVptMCw2LjA4QTIuMjQsMi4yNCwwLDEsMSwyNy4yOCwyNSwyLjI2LDIuMjYsMCwwLDEsMjUs''@;'; put 'put ''MjcuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNC4xNywyNC4xNGExLjE0LDEuMTQsMCwwLDAtLjctMS4xbC0xLjU2LS40NnEtLjExLS4zMi0uMjYtLjYzbC43Mi0xLjMzYTEuMTQsMS4xNCwwLDAsMC0u''@;'; put 'put ''MjEtMS4zNGwtMS4zNC0xLjMyYTEuMTQsMS4xNCwwLDAsMC0xLjM0LS4ybC0xLjM0LjcxYTcuMjgsNy4yOCwwLDAsMC0uNjctLjI4TDI3LDE2LjcxYTEuMTQsMS4xNCwwLDAsMC0xLjA4LS43NkgyNGExLjE0LDEuMTQsMCwwLDAtMS4wOC44bC0uNDQsMS40M2E3LjMyLDcuMzIsMCwwLDAtLjY4''@;'; put 'put ''LjI4bC0xLjMyLS43YTEuMTQsMS4xNCwwLDAsMC0xLjMzLjE5bC0xLjM3LDEuMzFhMS4xNCwxLjE0LDAsMCwwLS4yMSwxLjM1bC43LDEuMjhxLS4xNi4zMi0uMjguNjVMMTYuNTgsMjNhMS4xMywxLjEzLDAsMCwwLS44MSwxLjA5djEuODdBMS4xNCwxLjE0LDAsMCwwLDE2LjU5LDI3bDEuNDcu''@;'; put 'put ''NDRxLjEyLjMyLjI4LjY0bC0uNzIsMS4zNWExLjE0LDEuMTQsMCwwLDAsLjIsMS4zNWwxLjM0LDEuMzJhMS4xNCwxLjE0LDAsMCwwLDEuMzQuMmwxLjM3LS43MnEuMzEuMTQuNjMuMjZsLjQ0LDEuNDdhMS4xNCwxLjE0LDAsMCwwLDEuMDkuOGgxLjlBMS4xNCwxLjE0LDAsMCwwLDI3LDMzLjMx''@;'; put 'put ''bC40NC0xLjQ3Yy4yMS0uMDcuNDItLjE2LjYyLS4yNWwxLjM4LjczYTEuMTQsMS4xNCwwLDAsMCwxLjMzLS4ybDEuMzQtMS4zMmExLjE0LDEuMTQsMCwwLDAsLjIxLTEuMzVsLS43My0xLjM0cS4xNC0uMy4yNS0uNmwxLjUtLjQ0QTEuMTMsMS4xMywwLDAsMCwzNC4xNywyNlptLTEuNiwxLjUt''@;'; put 'put ''MiwuNTgtLjEyLjQyQTUuNTUsNS41NSwwLDAsMSwzMCwyNy43M2wtLjIxLjM4LDEsMS43OS0uODYuODQtMS44Mi0xLS4zNy4yYTUuNzgsNS43OCwwLDAsMS0xLjEyLjQ2bC0uNDIuMTItLjU5LDJIMjQuMzhsLS41OS0xLjk1LS40Mi0uMTJBNS44Niw1Ljg2LDAsMCwxLDIyLjI0LDMwbC0uMzct''@;'; put 'put ''LjItMS44MSwxLS44Ni0uODUsMS0xLjgyLS4yMi0uMzhhNS42LDUuNiwwLDAsMS0uNDktMS4xM2wtLjEzLS40MS0xLjk1LS41OFYyNC40MmwxLjk0LS41OC4xMi0uNDFhNS41Myw1LjUzLDAsMCwxLC40OS0xLjE0bC4yMi0uMzktMS0xLjczLjg3LS44NCwxLjc3Ljk0LjM4LS4yMWE1LjgsNS44''@;'; put 'put ''LDAsMCwxLDEuMTctLjQ5bC40MS0uMTIuNTktMS45MWgxLjIzbC41OCwxLjkuNDEuMTJhNS43OSw1Ljc5LDAsMCwxLDEuMTYuNDhsLjM4LjIxLDEuOC0uOTUuODYuODUtMSwxLjc3LjIxLjM4YTUuNTMsNS41MywwLDAsMSwuNDcsMS4xM2wuMTIuNDIsMS45My41N1oiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LDIzLjYzLDMyLDIzYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuOSwxNy44NmEuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxYTcs''@;'; put 'put ''NywwLDAsMC0xLjQzLS42MWwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFMMjAsMTcuOGEuMzcuMzcsMCwwLDAtLjQ0LjA3TDE4LDE5LjMxYS4zNy4zNywwLDAsMC0uMDcuNDRsMSwxLjgyQTcsNywwLDAs''@;'; put 'put ''MCwxOC4zNSwyM2wtMiwuNjFhLjM3LjM3LDAsMCwwLS4yNi4zNXYyYS4zNy4zNywwLDAsMCwuMjYuMzVsMiwuNjFBNyw3LDAsMCwwLDE5LDI4LjM3bC0xLDEuOWEuMzcuMzcsMCwwLDAsLjA3LjQ0bDEuNDUsMS40NWEuMzcuMzcsMCwwLDAsLjQ0LjA3bDEuODctMWE3LjA2LDcuMDYsMCwwLDAs''@;'; put 'put ''MS4zOS41N2wuNjEsMmEuMzcuMzcsMCwwLDAsLjM1LjI2aDJhLjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTJhNyw3LDAsMCwwLDEuMzgtLjU3bDEuODksMWEuMzcuMzcsMCwwLDAsLjQ0LS4wN2wxLjQ1LTEuNDVhLjM3LjM3LDAsMCwwLC4wNy0uNDRsLTEtMS44OEE3LDcsMCwwLDAsMzEuOTUs''@;'; put 'put ''MjdsMi0uNjFhLjM3LjM3LDAsMCwwLC4yNi0uMzVWMjRBLjM3LjM3LDAsMCwwLDM0LDIzLjYzWm0tOC44Myw0LjcyQTMuMzMsMy4zMywwLDEsMSwyOC41MywyNSwzLjMzLDMuMzMsMCwwLDEsMjUuMTksMjguMzRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTEwLjg1LDI3LjQ0YTIuMjksMi4yOSwwLDAsMCwxLjc0LTEuNjgsMTkuNzEsMTkuNzEsMCwwLDAsMS44OS0uNlYyMy45NWEyLDIsMCwwLDEsLjA5LS41NSwxNy40MiwxNy40MiwwLDAsMS0yLjE3Ljc4LDIuMjgsMi4yOCwwLDAsMC00LjI4LjYzbC0uNDUs''@;'; put 'put ''MGgwYTExLjkzLDExLjkzLDAsMCwxLTIuODgtNy4yNywxNy43OSwxNy43OSwwLDAsMSw1LTQuNzIsMi4yMywyLjIzLDAsMCwwLDIuMjkuNTYsMTguNTIsMTguNTIsMCwwLDAsNC42NSw1LjA5LDEuOTMsMS45MywwLDAsMSwuMjMtLjMybC44OS0uODdhMTYuODksMTYuODksMCwwLDEtNC40OS00''@;'; put 'put ''Ljg5LDIuMjcsMi4yNywwLDAsMCwuMzUtMS4yYzAtLjA3LDAtLjE0LDAtLjIyQTE3LjY5LDE3LjY5LDAsMCwxLDI1LDExYTE3LjQ5LDE3LjQ5LDAsMCwxLTEuMTUsMy4zNSwxLjk0LDEuOTQsMCwwLDEsLjMxLS4wNWgxLjQ1YTE5LjA2LDE5LjA2LDAsMCwwLC45LTIuN2MuNDMuMTkuODQuNDEs''@;'; put 'put ''MS4yNi42NGExMS45MywxMS45MywwLDAsMSwxLDQuNjNsMS0uNTFhMiwyLDAsMCwxLC45Mi0uMjNoLjA4QTE0LDE0LDAsMSwwLDE2LjQ0LDMxYTEuOTQsMS45NCwwLDAsMSwuMTItMS40NmwuMjgtLjUzaC0uMDdBMTEuOTEsMTEuOTEsMCwwLDEsMTAuODUsMjcuNDRaTTE2Ljc2LDVhMTIsMTIs''@;'; put 'put ''MCwwLDEsOC42MSwzLjY2YzAsLjI1LDAsLjUxLS4wOC43NmExOS4yMSwxOS4yMSwwLDAsMC0xMi4zNS4xMUEyLjI4LDIuMjgsMCwwLDAsMTEuNzQsOWExNywxNywwLDAsMS0uNjEtMi41M0ExMS45MiwxMS45MiwwLDAsMSwxNi43Niw1Wk05LjY2LDcuMzZhMTguNzIsMTguNzIsMCwwLDAsLjQ5''@;'; put 'put ''LDEuOTIsMi4yOCwyLjI4LDAsMCwwLTEuMDcsMS45M3MwLC4xLDAsLjE1QTE5LjQ1LDE5LjQ1LDAsMCwwLDUsMTQuNzksMTIsMTIsMCwwLDEsOS42Niw3LjM2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZU5ldHdvcmtT''@;'; put 'put ''d2l0Y2g9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjkxLDE4LjQ3LDMwLjc4LDguNDFBMiwyLDAsMCwwLDI4Ljg3LDdINy4xM0EyLDIsMCwwLDAsNS4yMiw4LjQxTDIuMDksMTguNDhhMiwyLDAsMCwwLS4wOS41OVYyN2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTku''@;'; put 'put ''MDZBMiwyLDAsMCwwLDMzLjkxLDE4LjQ3Wk0zMiwyN0g0VjE5LjA2TDcuMTMsOUgyOC44N0wzMiwxOS4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNy4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0i''@;'; put 'put ''MyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMi4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cmVjdCB4PSIxNy4xMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMi4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3LjEiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4yMyIg''@;'; put 'put ''eT0iMTgiIHdpZHRoPSIyMy42OSIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNy4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMi4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cmVjdCB4PSIxNy4xMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMi4xIiB5PSIyMiIgd2lkdGg9IjEuOCIg''@;'; put 'put ''aGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3LjEiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4yMyIgeT0iMTgiIHdpZHRoPSIyMy42OSIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTMzLjkxLDE4LjQ3LDMzLDE1LjRIMzAuODZMMzIsMTkuMDZWMjdINFYxOS4wNkw3LjEzLDlIMTkuNTZsMS4xNS0ySDcuMTNBMiwyLDAsMCwwLDUuMjIsOC40MUwyLjA5LDE4LjQ4YTIsMiwwLDAsMC0uMDkuNTlWMjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAs''@;'; put 'put ''Mi0yVjE5LjA2QTIsMiwwLDAsMCwzMy45MSwxOC40N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEz''@;'; put 'put ''SDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJl''@;'; put 'put ''Y3QgeD0iNy4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3LjExIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMi4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNy4xIiB5''@;'; put 'put ''PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI2LjIzIiB5PSIxOCIgd2lkdGg9IjIzLjY5IiBoZWlnaHQ9IjEuNCIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjkxLDE4LjQ3bC0xLjY1LTUuMzJhNy40OSw3LjQ5LDAsMCwxLTIsLjMzTDMyLDE5LjA2VjI3SDRWMTkuMDZMNy4xMyw5aDE2YTcuNDUsNy40NSwwLDAsMS0u''@;'; put 'put ''NTUtMkg3LjEzQTIsMiwwLDAsMCw1LjIyLDguNDFMMi4wOSwxOC40OGEyLDIsMCwwLDAtLjA5LjU5VjI3YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOS4wNkEyLDIsMCwwLDAsMzMuOTEsMTguNDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC03LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuOTEs''@;'; put 'put ''MTguNDcsMzAuNzgsOC40MUEyLDIsMCwwLDAsMjguODcsN0g3LjEzQTIsMiwwLDAsMCw1LjIyLDguNDFMMi4wOSwxOC40OGEyLDIsMCwwLDAtLjA5LjU5VjI3YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOS4wNkEyLDIsMCwwLDAsMzMuOTEsMTguNDdaTTguOTIsMjVINy4xMlYy''@;'; put 'put ''MmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSwwaC0xLjhWMjJoMS44Wm01LDBIMjIuMVYyMmgxLjhabTUsMEgyNy4xVjIyaDEuOFpNMzEsMTkuNEg1VjE4SDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywxNS40''@;'; put 'put ''SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIwLjcxLDdINy4xM0EyLDIsMCwwLDAsNS4yMiw4LjQxTDIuMDksMTguNDhhMiwyLDAsMCwwLS4wOS41OVYyN2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTkuMDZhMiwyLDAsMCwwLS4wOS0uNTlaTTguOTIsMjVINy4xMlYy''@;'; put 'put ''MmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSwwaC0xLjhWMjJoMS44Wm01LDBIMjIuMVYyMmgxLjhabTUsMEgyNy4xVjIyaDEuOFpNMzEsMTkuNEg1VjE4SDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjI2LDEzLjE1QTcuNDksNy40OSwwLDAsMSwyMi41Nyw3SDcuMTNBMiwyLDAsMCwwLDUuMjIsOC40MUwyLjA5LDE4LjQ4YTIsMiwwLDAsMC0uMDkuNTlWMjdhMiwyLDAsMCwwLDIsMkgz''@;'; put 'put ''MmEyLDIsMCwwLDAsMi0yVjE5LjA2YTIsMiwwLDAsMC0uMDktLjU5Wk04LjkyLDI1SDcuMTJWMjJoMS44Wm01LDBoLTEuOFYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSwwSDIyLjFWMjJoMS44Wm01LDBIMjcuMVYyMmgxLjhaTTMxLDE5LjRINVYxOEgzMVoiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcp''@;'; put 'put ''LGIuQ2xyU2hhcGVSb3V0ZXI9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDE0Ljg3bDUuMTEtNS4xNGExLDEsMCwxLDAtMS40Mi0xLjQxTDE5LDExVjMuMzNhMSwxLDAsMCwwLTIsMFYxMUwxNC4zMSw4LjMyYTEsMSwwLDEsMC0xLjQyLDEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMS4xM2wtNS4xMSw1LjE0YTEsMSwwLDAsMCwxLjQyLDEuNDFMMTcsMjV2Ny42OWExLDEsMCwwLDAsMiwwVjI1bDIuNjksMi43MWExLDEsMCwwLDAsMS40Mi0xLjQxWiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguODUsMTIuODlhMSwxLDAsMCwwLTEuNDEsMS40MkwzMC4xNSwxN0gyMi40NmExLDEsMCwxLDAsMCwyaDcuNjlsLTIuNzEsMi42OWExLDEsMCwwLDAsMS40MSwxLjQyTDM0LDE4WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNS44NSwxOWg3LjY5YTEsMSwwLDAsMCwwLTJINS44NWwyLjcxLTIuNjlhMSwxLDAsMSwwLTEuNDEtMS40MkwyLDE4bDUuMTQsNS4xMWExLDEsMCwxLDAsMS40MS0xLjQyWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjEuMTNsLTUuMTEsNS4xNGExLDEsMCwwLDAsMS40MiwxLjQxTDE3LDI1djcuNjlhMSwxLDAsMCwwLDIsMFYyNWwyLjY5LDIuNzFhMSwxLDAsMCwwLDEuNDItMS40MVoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUuODUsMTloNy42OWExLDEsMCwwLDAsMC0ySDUuODVsMi43MS0yLjY5YTEsMSwwLDEsMC0xLjQxLTEuNDJMMiwxOGw1LjE0LDUuMTFh''@;'; put 'put ''MSwxLDAsMSwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjM4LDE1LjRIMjguNTRMMzAuMTUsMTdIMjIuNDZhMSwxLDAsMSwwLDAsMmg3LjY5bC0yLjcx''@;'; put 'put ''LDIuNjlhMSwxLDAsMCwwLDEuNDEsMS40MkwzNCwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE0Ljg3bDEuMTUtMS4xNi0uMS0uMTVBMy42OCwzLjY4LDAsMCwxLDE5''@;'; put 'put ''LDEwVjMuMzNhMSwxLDAsMCwwLTIsMFYxMUwxNC4zMSw4LjMyYTEsMSwwLDEsMC0xLjQyLDEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDEx''@;'; put 'put ''QTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1h''@;'; put 'put ''bGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxNC44N2w1LjExLTUuMTRhMSwxLDAsMSwwLTEuNDItMS40MUwxOSwxMVYzLjMzYTEsMSwwLDAsMC0yLDBWMTFMMTQuMzEsOC4zMmExLDEsMCwxLDAtMS40MiwxLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIxLjEzbC01LjExLDUuMTRhMSwxLDAsMCwwLDEuNDIsMS40MUwxNywyNXY3LjY5YTEsMSwwLDAsMCwyLDBWMjVsMi42OSwyLjcxYTEsMSwwLDAsMCwxLjQyLTEuNDFaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguODUsMTIuODlhMSwxLDAsMCwwLTEuNDEsMS40MkwzMC4xNSwxN0gyMi40NmExLDEsMCwxLDAsMCwyaDcuNjlsLTIuNzEsMi42OWExLDEsMCwwLDAsMS40MSwx''@;'; put 'put ''LjQyTDM0LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUuODUsMTloNy42OWExLDEsMCwwLDAsMC0ySDUuODVsMi43MS0yLjY5YTEsMSwwLDEsMC0xLjQxLTEuNDJMMiwxOGw1''@;'; put 'put ''LjE0LDUuMTFhMSwxLDAsMSwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxLjY3YTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDEuNjdaTTEzLjg2LDkuOTJhLjguOCwwLDAsMSwxLjEzLDBsMi4yMSwyLjE5VjUuOTNhLjguOCww''@;'; put 'put ''LDAsMSwxLjYsMHY2LjE4TDIxLDkuOTJhLjguOCwwLDEsMSwxLjEzLDEuMTRMMTgsMTUuMTVsLTQuMTQtNC4xQS44LjgsMCwwLDEsMTMuODYsOS45MlpNMTAuMzIsMjEuNzRhLjguOCwwLDAsMS0xLjEzLDBMNSwxNy42N2w0LjE5LTQuMDlhLjguOCwwLDEsMSwxLjEyLDEuMTRsLTIuMiwyLjE0''@;'; put 'put ''aDYuMjdhLjguOCwwLDAsMSwwLDEuNkg4LjExbDIuMiwyLjE1QS44LjgsMCwwLDEsMTAuMzIsMjEuNzRabTExLjgyLDMuNjdhLjguOCwwLDAsMS0xLjEzLDBMMTguOCwyMy4yM1YyOS40YS44LjgsMCwwLDEtMS42LDBWMjMuMjNMMTUsMjUuNDJhLjguOCwwLDEsMS0xLjEzLTEuMTRMMTgsMjAu''@;'; put 'put ''MThsNC4xNCw0LjFBLjguOCwwLDAsMSwyMi4xNCwyNS40MVptNC42Ny0zLjY2YS44LjgsMCwxLDEtMS4xMi0xLjE0bDIuMi0yLjE1SDIxLjYzYS44LjgsMCwwLDEsMC0xLjZoNi4yN2wtMi4yLTIuMTRhLjguOCwwLDEsMSwxLjEyLTEuMTRMMzEsMTcuNjdaIiBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjgyLDE1LjM5SDI4LjY4TDMxLDE3LjY3bC00LjE5LDQuMDlhLjguOCwwLDEsMS0xLjEyLTEuMTRsMi4yLTIuMTVIMjEuNjNhLjguOCwwLDAsMSwwLTEuNmg2LjI3bC0xLjUtMS40N0gyMi4yM2EzLjY4LDMu''@;'; put 'put ''NjgsMCwwLDEtMy0xLjUxTDE4LDE1LjE1bC00LjE0LTQuMUEuOC44LDAsMSwxLDE1LDkuOTJsMi4yMSwyLjE5VjUuOTNhLjguOCwwLDAsMSwxLjYsMHY0LjQ5QTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5bDQuMjItNy4zMUExNiwxNiwwLDEsMCwzNCwxNy42NywxNiwxNiwwLDAsMCwzMy44Miwx''@;'; put 'put ''NS4zOVptLTIzLjUsNi4zNWEuOC44LDAsMCwxLTEuMTMsMEw1LDE3LjY3bDQuMTktNC4wOWEuOC44LDAsMSwxLDEuMTIsMS4xNGwtMi4yLDIuMTRoNi4yN2EuOC44LDAsMCwxLDAsMS42SDguMTFsMi4yLDIuMTVBLjguOCwwLDAsMSwxMC4zMiwyMS43NFptMTEuODIsMy42N2EuOC44LDAsMCwx''@;'; put 'put ''LTEuMTMsMEwxOC44LDIzLjIzVjI5LjRhLjguOCwwLDAsMS0xLjYsMFYyMy4yM0wxNSwyNS40MmEuOC44LDAsMSwxLTEuMTMtMS4xNEwxOCwyMC4xOGw0LjE0LDQuMUEuOC44LDAsMCwxLDIyLjE0LDI1LjQxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjIyLDEyLjc2QTcuNDksNy40OSwwLDAsMSwyMy4zMiwyLjZhMTYsMTYsMCwxLDAsOS45LDEwLjE3Wk0xMy44Niw5LjkyYS44LjgsMCww''@;'; put 'put ''LDEsMS4xMywwbDIuMjEsMi4xOVY1LjkzYS44LjgsMCwwLDEsMS42LDB2Ni4xOEwyMSw5LjkyYS44LjgsMCwxLDEsMS4xMywxLjE0TDE4LDE1LjE1bC00LjE0LTQuMUEuOC44LDAsMCwxLDEzLjg2LDkuOTJaTTEwLjMyLDIxLjc0YS44LjgsMCwwLDEtMS4xMywwTDUsMTcuNjdsNC4xOS00LjA5''@;'; put 'put ''YS44LjgsMCwxLDEsMS4xMiwxLjE0bC0yLjIsMi4xNGg2LjI3YS44LjgsMCwwLDEsMCwxLjZIOC4xMWwyLjIsMi4xNUEuOC44LDAsMCwxLDEwLjMyLDIxLjc0Wm0xMS44MiwzLjY3YS44LjgsMCwwLDEtMS4xMywwTDE4LjgsMjMuMjNWMjkuNGEuOC44LDAsMCwxLTEuNiwwVjIzLjIzTDE1LDI1''@;'; put 'put ''LjQyYS44LjgsMCwxLDEtMS4xMy0xLjE0TDE4LDIwLjE4bDQuMTQsNC4xQS44LjgsMCwwLDEsMjIuMTQsMjUuNDFabTQuNjctMy42NmEuOC44LDAsMSwxLTEuMTItMS4xNGwyLjItMi4xNUgyMS42M2EuOC44LDAsMCwxLDAtMS42aDYuMjdsLTIuMi0yLjE0YS44LjgsMCwxLDEsMS4xMi0xLjE0''@;'; put 'put ''TDMxLDE3LjY3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZVZNPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMSw1SDI1VjhoMlY1YTIsMiwwLDAsMC0yLTJIMTFBMiwyLDAsMCwwLDksNXY2Ljg1aDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMEgxN3YyaDh2NmgyVjEyaDNWMjZIMjJWMTdhMiwyLDAsMCwwLTItMkg2YTIsMiwwLDAsMC0yLDJWMzFhMiwyLDAsMCwwLDIsMkgyMGEyLDIsMCwwLDAsMi0yVjI4aDhhMiwyLDAsMCwwLDItMlYxMkEyLDIsMCwwLDAsMzAsMTBaTTYs''@;'; put 'put ''MzFWMTdIMjB2OUgxNlYyMEgxNHY2YTIsMiwwLDAsMCwyLDJoNHYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEsNUgyMS44N0wyMywzSDExQTIsMiwwLDAsMCw5LDV2Ni44NWgyWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNS4wMSIgeT0iMTUuNCIgd2lkdGg9IjEuOTkiIGhlaWdodD0iMi42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''Mi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxNS40VjI2SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOGg4YTIsMiwwLDAsMCwyLTJWMTUuNFpNNiwzMVYxN0gyMHY5SDE2VjIwSDE0''@;'; put 'put ''djZhMiwyLDAsMCwwLDIsMmg0djNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywxMHYyaDEuNTdBMy42NywzLjY3LDAsMCwxLDE5LDEwWiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4''@;'; put 'put ''LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEsNUgyMi41N2E3LjQ1LDcuNDUsMCwwLDEsLjU1LTJIMTFBMiwyLDAsMCww''@;'; put 'put ''LDksNXY2Ljg1aDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWgwVjI2SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJI''@;'; put 'put ''MjBhMiwyLDAsMCwwLDItMlYyOGg4YTIsMiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTYsMzFWMTdIMjB2OUgxNlYyMEgxNHY2YTIsMiwwLDAsMCwyLDJoNHYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFk''@;'; put 'put ''Z2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LDEyaDh2NmgyVjEyLjg3QTcuNTIsNy41MiwwLDAsMSwyMy42NiwxMEgxN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9''@;'; put 'put ''IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy41OSwxMmEzLjYsMy42LDAsMCwxLDMuNi0zLjZIMjdWNWEyLDIsMCwwLDAtMi0y''@;'; put 'put ''SDExQTIsMiwwLDAsMCw5LDV2OC40aDQuNTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEwSDE3LjE5YTIsMiwwLDAsMC0yLDJ2MS40SDIwQTMuNiwzLjYsMCwwLDEsMjMuNiwxN3Y4SDIyVjE3YTIsMiwwLDAs''@;'; put 'put ''MC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOS42SDE3LjE5YTMuNiwzLjYsMCwwLDEtMy42LTMuNlYyMGgxLjZ2NmEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTJBMiwyLDAsMCwwLDMwLDEwWiIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy41OSwxMmEzLjYsMy42LDAsMCwxLDMuNi0zLjZoMi43MkwyMywzSDExQTIsMiwwLDAsMCw5LDV2OC40aDQuNTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjE5LDEwYTIsMiwwLDAsMC0yLDJ2MS40SDE5QTMuNjgsMy42OCwwLDAsMSwxOSwxMFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBkPSJNMjMuMjEsMTUuNEEzLjU1LDMuNTUsMCwwLDEsMjMuNiwxN3Y4SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOS42SDE3LjE5YTMuNiwzLjYsMCwwLDEtMy42LTMuNlYyMGgxLjZ2NmEyLDIsMCww''@;'; put 'put ''LDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhB''@;'; put 'put ''MS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy41''@;'; put 'put ''OSwxMmEzLjYsMy42LDAsMCwxLDMuNi0zLjZIMjIuOUE3LjQ1LDcuNDUsMCwwLDEsMjMuMTMsM0gxMUEyLDIsMCwwLDAsOSw1djguNGg0LjU5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MzAsMTMuNUE3LjQ5LDcuNDksMCwwLDEsMjMuNjYsMTBIMTcuMTlhMiwyLDAsMCwwLTIsMnYxLjRIMjBBMy42LDMuNiwwLDAsMSwyMy42LDE3djhIMjJWMTdhMiwyLDAsMCwwLTItMkg2YTIsMiwwLDAsMC0yLDJWMzFhMiwyLDAsMCwwLDIsMkgyMGEyLDIsMCwwLDAsMi0yVjI5LjZIMTcuMTlh''@;'; put 'put ''My42LDMuNiwwLDAsMS0zLjYtMy42VjIwaDEuNnY2YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVWTVdBcHA9KDAscC5jbHJJY29uU1ZHKSgnPHBvbHlnb24gcG9pbnRzPSIy''@;'; put 'put ''OCAyMiAzMCAyMiAzMCAzMCAyMiAzMCAyMiAyOCAyMCAyOCAyMCAzMiAzMiAzMiAzMiAyMCAyOCAyMCAyOCAyMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE0IDMwIDYgMzAgNiAyMiA4IDIyIDgg''@;'; put 'put ''MjAgNCAyMCA0IDMyIDE2IDMyIDE2IDI4IDE0IDI4IDE0IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAxNCA2IDE0IDYgNiAxNCA2IDE0IDggMTYgOCAxNiA0IDQgNCA0IDE2IDggMTYgOCAx''@;'; put 'put ''NCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjIwIDQgMjAgOCAyMiA4IDIyIDYgMzAgNiAzMCAxNCAyOCAxNCAyOCAxNiAzMiAxNiAzMiA0IDIwIDQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjExIiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE5IiB5PSIxMSIgd2lkdGg9IjYiIGhl''@;'; put 'put ''aWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTkiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgeD0iMTkiIHk9IjE5IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMjggMjIgMzAgMjIgMzAgMzAgMjIgMzAgMjIgMjggMjAgMjggMjAgMzIgMzIg''@;'; put 'put ''MzIgMzIgMjAgMjggMjAgMjggMjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxNCAzMCA2IDMwIDYgMjIgOCAyMiA4IDIwIDQgMjAgNCAzMiAxNiAzMiAxNiAyOCAx''@;'; put 'put ''NCAyOCAxNCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjggMTQgNiAxNCA2IDYgMTQgNiAxNCA4IDE2IDggMTYgNCA0IDQgNCAxNiA4IDE2IDggMTQiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjExIiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0t''@;'; put 'put ''YWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxOSIgeT0iMTkiIHdp''@;'; put 'put ''ZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2bDAtLjFWMTdoNloiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyMi40NSA0IDIwIDQgMjAgOCAyMC4xNCA4IDIyLjQ1IDQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC04LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjgiIHk9IjE1LjQiIHdpZHRoPSI0IiBoZWlnaHQ9IjAuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEwLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyOCAyMiAzMCAyMiAzMCAzMCAyMiAzMCAyMiAyOCAyMCAyOCAyMCAzMiAzMiAzMiAzMiAyMCAyOCAyMCAyOCAyMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxNCAzMCA2IDMwIDYgMjIgOCAyMiA4IDIwIDQgMjAgNCAzMiAxNiAzMiAxNiAyOCAxNCAyOCAxNCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0t''@;'; put 'put ''YmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE0IDYgMTQgNiA2IDE0IDYgMTQgOCAxNiA4IDE2IDQgNCA0IDQgMTYgOCAxNiA4IDE0IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cmVjdCB4PSIxMSIgeT0iMTEiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTkiIHk9IjE5IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1i''@;'; put 'put ''YWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNmguNWE3LjQ5LDcuNDksMCwwLDEsLjI4LTJIMjBWOGgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVW''@;'; put 'put ''MTRIMjh2Mmg0VjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDExLjU4YTcuNTMsNy41MywwLDAsMS0uNTgtLjU4SDE5djZo''@;'; put 'put ''NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVDZXJ0aWZpY2F0ZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEwyMC40MSwyOEg0VjhIMzJsMCw4LjU2YTguNDEs''@;'; put 'put ''OC40MSwwLDAsMSwyLDEuODFWOEEyLDIsMCwwLDAsMzIsNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMTIiIHdpZHRoPSIxNyIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMTYiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMjMiIHdpZHRoPSIxMCIg''@;'; put 'put ''aGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjQ2LDE3LjIzYTYuMzYsNi4zNiwwLDAsMC00LjQsMTFsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1''@;'; put 'put ''LDBsMy42Niw0LjQ2LjktMy42MS0xLjk0LTIuMzdhNi4zNiw2LjM2LDAsMCwwLTQuNC0xMVptMCwxMC42OGE0LjMxLDQuMzEsMCwxLDEsNC4zNy00LjMxQTQuMzUsNC4zNSwwLDAsMSwyNy40NiwyNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMTYiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMjMiIHdpZHRoPSIxMCIgaGVp''@;'; put 'put ''Z2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjQ2LDE3LjIzYTYuMzYsNi4zNiwwLDAsMC00LjQsMTFsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYs''@;'; put 'put ''Ni4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2LjktMy42MS0xLjk0LTIuMzdhNi4zNiw2LjM2LDAsMCwwLTQuNC0xMVptMCwxMC42OGE0LjMxLDQuMzEsMCwxLDEsNC4zNy00LjMxQTQuMzUsNC4zNSwwLDAsMSwyNy40NiwyNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDEzLjU2QTMuNjYsMy42NiwwLDAsMSwxOC41NywxMkg3djEuNkgxOS4wN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMzJ2MS4xNmE4LjQxLDguNDEsMCwwLDEsMiwxLjgxdi0zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwyOFY4''@;'; put 'put ''SDIwLjE0bDEuMTUtMkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEwyMC40MSwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2''@;'; put 'put ''Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03''@;'; put 'put ''LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMTIiIHdpZHRoPSIxNyIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9''@;'; put 'put ''IjciIHk9IjE2IiB3aWR0aD0iMTEiIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI3IiB5PSIyMyIgd2lkdGg9IjEwIiBoZWlnaHQ9IjEuNiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjQ2LDE3LjIzYTYuMzYsNi4zNiwwLDAsMC00LjQsMTFsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0''@;'; put 'put ''LjQ2LjktMy42MS0xLjk0LTIuMzdhNi4zNiw2LjM2LDAsMCwwLTQuNC0xMVptMCwxMC42OGE0LjMxLDQuMzEsMCwxLDEsNC4zNy00LjMxQTQuMzUsNC4zNSwwLDAsMSwyNy40NiwyNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdl''@;'; put 'put ''ZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMnYzLjM0YTguNDEsOC40MSwwLDAsMSwyLDEuODF2LTZBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTQsMjhWOEgyMi43OGE3LjQ5LDcuNDksMCwwLDEtLjI4LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMTlsLjU3LS43LjkzLTEuMTRMMjAuNDEsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1i''@;'; put 'put ''YWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksMzBINGEyLDIsMCww''@;'; put 'put ''LDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgzMmEyLDIsMCwwLDEsMiwyVjE4LjM3YTguMzQsOC4zNCwwLDAsMC0xMy40OSw5Ljc5bC0uOTMsMS4xNFpNNywxMnYxLjZIMjRWMTJabTAsNS42SDE4VjE2SDdabTAsN0gxN1YyM0g3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy44MywyMy41OWE2LjM3LDYuMzcsMCwxLDAtMTAuNzcsNC41OWwtMS45NCwyLjM3LjksMy42MSwzLjY2LTQuNDZhNi4yNiw2LjI2LDAsMCwwLDMuNTUsMGwzLjY2LDQuNDYuOS0zLjYxLTEuOTQtMi4zN0E2LjM0LDYuMzQsMCwwLDAsMzMu''@;'; put 'put ''ODMsMjMuNTlabS0xMC43NCwwYTQuMzcsNC4zNywwLDEsMSw0LjM3LDQuMzFBNC4zNSw0LjM1LDAsMCwxLDIzLjEsMjMuNTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjgzLDIzLjU5YTYuMzcsNi4zNywwLDEs''@;'; put 'put ''MC0xMC43Nyw0LjU5bC0xLjk0LDIuMzcuOSwzLjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3QTYuMzQsNi4zNCwwLDAsMCwzMy44MywyMy41OVptLTEwLjc0LDBhNC4zNyw0LjM3LDAsMSwxLDQuMzcsNC4zMUE0LjM1LDQuMzUs''@;'; put 'put ''MCwwLDEsMjMuMSwyMy41OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgyOS4yNWE4LjM2LDguMzYsMCwwLDEsNC43NSwzdi0zWiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''LS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS4wNywxMy42SDdWMTJIMTguNTdBMy42NywzLjY3LDAsMCwxLDE5LDkuODlMMjEuMjksNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMt''@;'; put 'put ''MS4xNEE4LjM0LDguMzQsMCwwLDEsMjUuNjYsMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTkuMDcsMTMuNlpNMTcsMjQuNkg3VjIzSDE3Wm0xLTdIN1YxNkgxOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy40NiwxNy4yM2E2LjM2LDYuMzYsMCwwLDAtNC40LDExbC0xLjk0LDIuMzcuOSwzLjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEt''@;'; put 'put ''MS45NC0yLjM3YTYuMzYsNi4zNiwwLDAsMC00LjQtMTFabTAsMTAuNjhhNC4zMSw0LjMxLDAsMSwxLDQuMzctNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjcuNDYsMjcuOTFaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNSw3LjUsMCwwLDEsMjIuNSw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDE5bC41Ny0uNy45My0xLjE0QTguMzQsOC4zNCwwLDAsMSwzNCwxOC4zN3YtNkE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNMTcsMjQuNkg3VjIzSDE3Wm0x''@;'; put 'put ''LTdIN1YxNkgxOFptNi00SDdWMTJIMjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxiLkNsclNoYXBlQXJjaGl2ZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjksMzJIN1YyMkg1VjMyYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyMkgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LDI0YTEsMSwwLDAsMCwxLDFoNmExLDEsMCwwLDAsMC0ySDE1QTEsMSwwLDAsMCwxNCwyNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTE0LDE4SDZWMTRoNGEzLDMsMCwwLDEtLjY4LTEuODdzMC0uMDksMC0uMTNINS41QTEuNSwxLjUsMCwwLDAsNCwxMy41VjIwSDE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwxMkgy''@;'; put 'put ''Ni42NnMwLC4wOSwwLC4xM0EzLDMsMCwwLDEsMjYsMTRoNHY0SDIybC0yLDJIMzJWMTMuNUExLjUsMS41LDAsMCwwLDMwLjUsMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxOS4xOGw2LjM4LTYuMzVB''@;'; put 'put ''MSwxLDAsMSwwLDIzLDExLjQxbC00LDMuOTVWM2ExLDEsMCwxLDAtMiwwdjEyLjRsLTQtMy45NWExLDEsMCwwLDAtMS40MSwxLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuNDEsMjAuNiwxOCwyMmwt''@;'; put 'put ''MS40MS0xLjRMMTYsMjBINVYzMmEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjBIMjBaTTIyLDI0YTEsMSwwLDAsMS0xLDFIMTVhMSwxLDAsMCwxLDAtMmg2QTEsMSwwLDAsMSwyMiwyNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMzAuNSwxMkgyNi42NnMwLC4wOSwwLC4xM2EzLDMsMCwwLDEtLjg4LDIuMTJMMjIsMThIMzJWMTMuNUExLjUsMS41LDAsMCwwLDMwLjUsMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEw''@;'; put 'put ''LjIsMTQuMjVhMywzLDAsMCwxLS44OC0yLjEyczAtLjA5LDAtLjEzSDUuNUExLjUsMS41LDAsMCwwLDQsMTMuNVYxOEgxNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTkuMThsNi4zOC02LjM1QTEsMSwwLDEs''@;'; put 'put ''MCwyMywxMS40MWwtNCwzLjk1VjNhMSwxLDAsMSwwLTIsMHYxMi40bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVVbmFyY2hpdmU9KDAscC5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggZD0iTTI5LDMySDdWMjJINVYzMmEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjJIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNCwyNGExLDEsMCwwLDAsMSwxaDZhMSwxLDAsMCwwLDAt''@;'; put 'put ''MkgxNUExLDEsMCwwLDAsMTQsMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwxOEg2VjE0aDlWMTJINS41QTEuNSwxLjUsMCwwLDAsNCwxMy41VjIwSDE1Ljc4QTMsMywwLDAsMSwxNSwxOFoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjUsMTJIMjF2Mmg5djRIMjFhMywzLDAsMCwxLS43OCwySDMyVjEzLjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMsOS41NSwxNyw1LjZWMThhMSwxLDAsMSwwLDIsMFY1LjZsNCwzLjk1YTEsMSwwLDEsMCwxLjQxLTEuNDJMMTgsMS43OCwxMS42MSw4LjEzQTEsMSwwLDAsMCwxMyw5LjU1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjFhMywzLDAsMCwxLTIuMjItMUg1VjMyYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyMEgyMC4yMUEzLDMsMCwwLDEsMTgsMjFabTQsM2ExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDAsMSwwLTJoNkEx''@;'; put 'put ''LDEsMCwwLDEsMjIsMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LDEySDUuNUExLjUsMS41LDAsMCwwLDQsMTMuNVYxOEgxNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwxMkgyMXY2SDMyVjEzLjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMyw5LjU1LDE3LDUuNlYxOGExLDEsMCwxLDAsMiwwVjUu''@;'; put 'put ''Nmw0LDMuOTVhMSwxLDAsMSwwLDEuNDEtMS40MkwxOCwxLjc4LDExLjYxLDguMTNBMSwxLDAsMCwwLDEzLDkuNTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPlxuICAgICAgICAnKSxiLkNsclNoYXBlQ29ubmVjdD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBk''@;'; put 'put ''PSJNMzQsMTdIMjguMjNBNi4yNSw2LjI1LDAsMCwwLDIyLDEySDE0LjE1YTYuMjUsNi4yNSwwLDAsMC02LjIxLDVIMnYySDcuOTNhNi4yMiw2LjIyLDAsMCwwLDYuMjIsNUgyMmE2LjIyLDYuMjIsMCwwLDAsNi4yMi01SDM0Wk0xNy4wOCwyMkgxNC4xNWE0LjE3LDQuMTcsMCwwLDEtNC4zMS00''@;'; put 'put ''LDQuMTcsNC4xNywwLDAsMSw0LjMxLTRoMi45NFpNMjIsMjJIMTlWMTRoM2E0LjE3LDQuMTcsMCwwLDEsNC4zMSw0QTQuMTcsNC4xNywwLDAsMSwyMiwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LDEy''@;'; put 'put ''SDE0LjE1YTYuMjUsNi4yNSwwLDAsMC02LjIxLDVIMnYySDcuOTNhNi4yMiw2LjIyLDAsMCwwLDYuMjIsNUgxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMjMsMTdBNi4yNSw2LjI1LDAsMCwwLDIyLDEySDE5''@;'; put 'put ''VjI0aDNhNi4yMiw2LjIyLDAsMCwwLDYuMjItNUgzNFYxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVEaXNjb25uZWN0PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMi4xNyw2QTYuMjEsNi4yMSwwLDAsMCw2''@;'; put 'put ''LDExSDIuMTN2Mkg2YTYuMjMsNi4yMywwLDAsMCw2LjIxLDVIMTdWNlpNMTUuMSwxNkgxMi4xN2E0LjIsNC4yLDAsMCwxLTQuMzEtNCw0LjE3LDQuMTcsMCwwLDEsNC4zMS00SDE1LjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0zMy45MiwyM0gzMC4xNGE2LjI1LDYuMjUsMCwwLDAtNi4yMS01SDE5djJIMTRhMSwxLDAsMSwwLDAsMmg1djRIMTRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDV2Mmg0Ljk0YTYuMjMsNi4yMywwLDAsMCw2LjIyLTVoMy43NlptLTEwLDVIMjFWMjBoMi45NGE0LjE3''@;'; put 'put ''LDQuMTcsMCwwLDEsNC4zMSw0QTQuMTcsNC4xNywwLDAsMSwyMy45NCwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEyLDZhNi4yMSw2LjIxLDAsMCwwLTYuMjEsNUgydjJINS44M0E2LjIzLDYuMjMsMCww''@;'; put 'put ''LDAsMTIsMThIMTdWNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzksMjNIMzAuMTRhNi4yNSw2LjI1LDAsMCwwLTYuMjEtNUgxOXYySDE0YTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWg1djRIMTRhMSwx''@;'; put 'put ''LDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDV2Mmg0Ljk0YTYuMjMsNi4yMywwLDAsMCw2LjIyLTVoMy42NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVMaW5rPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNy42''@;'; put 'put ''LDI0LjMybC0yLjQ2LDIuNDRhNCw0LDAsMCwxLTUuNjIsMCwzLjkyLDMuOTIsMCwwLDEsMC01LjU1bDQuNjktNC42NWE0LDQsMCwwLDEsNS42MiwwLDMuODYsMy44NiwwLDAsMSwxLDEuNzFBMiwyLDAsMCwwLDIxLjEsMThsMS4yOS0xLjI4YTUuODksNS44OSwwLDAsMC0xLjE1LTEuNjIsNiw2''@;'; put 'put ''LDAsMCwwLTguNDQsMEw4LjEsMTkuNzlhNS45MSw1LjkxLDAsMCwwLDAsOC4zOSw2LDYsMCwwLDAsOC40NCwwbDMuNjUtMy42MmMtLjE3LDAtLjMzLDAtLjUsMEE4LDgsMCwwLDEsMTcuNiwyNC4zMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTI4LjYxLDcuODJhNiw2LDAsMCwwLTguNDQsMGwtMy42NSwzLjYyYy4xNywwLC4zMywwLC40OSwwaDBhOCw4LDAsMCwxLDIuMS4yOGwyLjQ2LTIuNDRhNCw0LDAsMCwxLDUuNjIsMCwzLjkyLDMuOTIsMCwwLDEsMCw1LjU1bC00LjY5LDQuNjVhNCw0LDAsMCwx''@;'; put 'put ''LTUuNjIsMCwzLjg2LDMuODYsMCwwLDEtMS0xLjcxLDIsMiwwLDAsMC0uMjguMjNsLTEuMjksMS4yOGE1Ljg5LDUuODksMCwwLDAsMS4xNSwxLjYyLDYsNiwwLDAsMCw4LjQ0LDBsNC42OS00LjY1YTUuOTIsNS45MiwwLDAsMCwwLTguMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZVVubGluaz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNSw1LDMuNTksNi40MWw5LDlMOC4xLDE5Ljc5YTUuOTEsNS45MSwwLDAsMCwwLDguMzksNiw2LDAsMCwwLDguNDQsMEwyMSwyMy43OGw4LjYzLDguNjNMMzEs''@;'; put 'put ''MzFaTTE1LjEzLDI2Ljc2YTQsNCwwLDAsMS01LjYyLDAsMy45MiwzLjkyLDAsMCwxLDAtNS41NUwxNCwxNi43OWw1LjU4LDUuNThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS41Myw5LjIyYTQsNCwwLDAs''@;'; put 'put ''MSw1LjYyLDAsMy45MiwzLjkyLDAsMCwxLDAsNS41NWwtNC43OSw0Ljc2TDIzLjc4LDIxbDQuNzktNC43NmE1LjkyLDUuOTIsMCwwLDAsMC04LjM5LDYsNiwwLDAsMC04LjQ0LDBsLTQuNzYsNC43NEwxNi43OCwxNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y''@;'; put 'put ''IiAvPlxuICAgICAgICAnKSxiLkNsclNoYXBlQ2xvdWROZXR3b3JrPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMC43MSwxNS4xOHYtMUExMS4yOCwxMS4yOCwwLDAsMCwxOS41NiwyLjgzaC0uMTFhMTEuMjgsMTEuMjgsMCwwLDAtMTEsOC45Myw3LjQ3LDcuNDcsMCwwLDAsMCwxNC45''@;'; put 'put ''NEgyOS4xM2E1Ljg2LDUuODYsMCwwLDAsMS41OC0xMS41MlpNMjkuMTMsMjQuN0g4LjQ2YTUuNDcsNS40NywwLDEsMSwwLTEwLjk0aDEuNjlsLjExLS44N2E5LjI3LDkuMjcsMCwwLDEsMTguNDUsMS4zdjEuMjhjMCwuMDksMCwuMTgsMCwuMjdsLS4wNywxLjE1Ljk0LjExYTMuODYsMy44Niww''@;'; put 'put ''LDAsMS0uNDMsNy43MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjU4LDMxLjE4SDE4Ljg1di0yLjRoLTJ2Mi40SDYuMDhhMSwxLDAsMCwwLDAsMmgyMy41YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZUNsb3VkU2NhbGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYuMzIsMTEuMTFINy44NEw4LDEwLjI0QTcuMTksNy4xOSwwLDAsMSwxNS4wNyw0aC4wN2E3LjE1LDcuMTUsMCwwLDEs''@;'; put 'put ''NC43MSwxLjgzLDExLjEsMTEuMSwwLDAsMSwzLjA5LjY0QTkuMTgsOS4xOCwwLDAsMCwxNS4xNiwyaC0uMDlBOS4yLDkuMiwwLDAsMCw2LjEzLDkuMTEsNi4xNSw2LjE1LDAsMCwwLDIuMzMsMTkuOTUsOC4wOSw4LjA5LDAsMCwxLDMsMTcuNzFhNC4xMiw0LjEyLDAsMCwxLS44MS0yLjQ0QTQu''@;'; put 'put ''MTYsNC4xNiwwLDAsMSw2LjMyLDExLjExWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuNCwxNi45MWgxLjUyTDEyLDE2YTcuMTksNy4xOSwwLDAsMSw3LjEyLTYuMjVoLjA3YTcuMTcsNy4xNywwLDAsMSw1''@;'; put 'put ''LjcsMi45MiwxMS4wNSwxMS4wNSwwLDAsMSwyLjcyLjc3LDkuMiw5LjIsMCwwLDAtOC40LTUuNjloLS4wOWE5LjIsOS4yLDAsMCwwLTguOTQsNy4xMiw2LjE1LDYuMTUsMCwwLDAtMy42NCwxMSw4LjExLDguMTEsMCwwLDEsLjc5LTIsNC4xNCw0LjE0LDAsMCwxLDMtN1oiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjQyLDI0LjQ3di0uNjJhOS4xOCw5LjE4LDAsMCwwLTE4LjEzLTIuMTZBNi4xNiw2LjE2LDAsMCwwLDE0LjQ4LDM0SDMxYTQuODgsNC44OCwwLDAsMCwxLjQ2LTkuNTNaTTMxLDMySDE0''@;'; put 'put ''LjQ4YTQuMTYsNC4xNiwwLDEsMSwwLTguMzJIMTZsLjExLS44N2E3LjE5LDcuMTksMCwwLDEsNy4xMi02LjI1aC4wN2E3LjIxLDcuMjEsMCwwLDEsNy4xMiw3LjI1djFjMCwuMDcsMCwuMTMsMCwuMmwtLjA3LDEuMTEuOTQuMTFBMi44OCwyLjg4LDAsMCwxLDMxLDMyWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVDbG91ZFRyYWZmaWM9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LjU0LDIwLjgyYS44OC44OCwwLDAsMC0uODgtLjg4SDIwLjc1bDEuMS0xLjFBLjg4Ljg4LDAsMCwwLDIwLjYsMTcu''@;'; put 'put ''NmwtMy4yMSwzLjIyTDIwLjYsMjRhLjg4Ljg4LDAsMSwwLDEuMjUtMS4yNEwyMC43NiwyMS43aDQuOUEuODguODgsMCwwLDAsMjYuNTQsMjAuODJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4yNywyMS43''@;'; put 'put ''YS44OC44OCwwLDEsMCwwLTEuNzZoLS41OGEuODguODgsMCwxLDAsMCwxLjc2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMjEsMjBoLS4wNmEuODUuODUsMCwwLDAtLjg1Ljg4LjkxLjkxLDAsMCwwLC45''@;'; put 'put ''MS44OC44OC44OCwwLDEsMCwwLTEuNzZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi41OSwxMWEuODguODgsMCwwLDAtMS4yNSwxLjI0bDEuMSwxLjFIMjcuNTNhLjg4Ljg4LDAsMSwwLDAsMS43Nmg0Ljls''@;'; put 'put ''LTEuMDksMS4wOWEuODguODgsMCwwLDAsMS4yNSwxLjI0bDMuMjEtMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjUsMTUuMDdhLjg4Ljg4LDAsMSwwLDAtMS43NmgtLjU4YS44OC44OCwwLDEsMCww''@;'; put 'put ''LDEuNzZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS45LDE0LjI3YS44NS44NSwwLDAsMC0uODUtLjg4SDIxYS44OC44OCwwLDEsMCwwLDEuNzZBLjkxLjkxLDAsMCwwLDIxLjksMTQuMjdaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC4zNiwyMy42NWMwLC4xMywwLC4yNiwwLC4zOWEzLjc3LDMuNzcsMCwwLDEtMy42MiwzLjg5SDcuMjhhNS4zMiw1LjMyLDAsMCwxLTUuMTMtNS40OEE1LjMyLDUuMzIsMCwwLDEs''@;'; put 'put ''Ny4yOCwxN0g4LjkxTDksMTYuMTJhOC45Miw4LjkyLDAsMCwxLDguNjItOGguMDhhOC40OSw4LjQ5LDAsMCwxLDYuNTYsMy4yOWgyLjM3YTEwLjU1LDEwLjU1LDAsMCwwLTguOTEtNS4yNWgtLjExQTEwLjgyLDEwLjgyLDAsMCwwLDcuMjIsMTVhNy4yOCw3LjI4LDAsMCwwLTcsNy40Myw3LjI3''@;'; put 'put ''LDcuMjcsMCwwLDAsNy4wOCw3LjQzSDI2Ljc3QTUuNzIsNS43MiwwLDAsMCwzMi4zNSwyNGEzLjc3LDMuNzcsMCwwLDAsMC0uMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZURlcGxveT0oMCxwLmNsckljb25T''@;'; put 'put ''VkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDJIMjIuMWExLDEsMCwwLDAsMCwyaDguNTNsLTguODIsOWExLDEsMCwxLDAsMS40MywxLjRMMzIsNS40NlYxMy45YTEsMSwwLDAsMCwyLDBWM0ExLDEsMCwwLDAsMzMsMloiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTEuNTQsMTAuNzNsLTksNS4xN2ExLDEsMCwwLDAtLjUuODd2MTFhMSwxLDAsMCwwLC41Ljg3bDksNS4xNWExLDEsMCwwLDAsMSwwbDktNS4xNWExLDEsMCwwLDAsLjUtLjg3di0x''@;'; put 'put ''MWExLDEsMCwwLDAtLjUtLjg3bC05LTUuMTdBMSwxLDAsMCwwLDExLjU0LDEwLjczWk0xMSwzMS4wOGwtNy00VjE4LjQ0bDcsNFpNMTIsMjEsNC44MSwxNi44NywxMiwxMi43OGw3LjIxLDQuMTJabTgsNi4wOS03LDRWMjIuNDRsNy00WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMzLDJIMjIuMWExLDEsMCwwLDAsMCwyaDguNTNsLTguODIsOWExLDEsMCwxLDAsMS40MywxLjRMMzIsNS40NlYxMy45YTEsMSwwLDAsMCwyLDBWM0ExLDEsMCwwLDAsMzMsMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMi40NiwxMC43M2ExLDEsMCwwLDAtMSwwbC04LjY4LDVMMTIsMjFsOS4xOS01LjI2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTIsMjcuNzNhMSwxLDAs''@;'; put 'put ''MCwwLC41Ljg3TDExLDMzLjQ2di0xMUwyLDE3LjI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTEzLDMzLjQ2bDguNS00Ljg2YTEsMSwwLDAsMCwuNS0uODdWMTcuMjlsLTksNS4xNVoiLz5cbiAgICAgICAgJyksYi5D''@;'; put 'put ''bHJTaGFwZUhlbGl4PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC44OCwxMy4wN2EuOS45LDAsMCwxLS40OS0xLjY2bDguOTMtNS43M2EuOS45LDAsMSwxLDEsMS41Mkw5LjM3LDEyLjkyQS45LjksMCwwLDEs''@;'; put 'put ''OC44OCwxMy4wN1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTMuMjUsMTUuMTFhLjkuOSwwLDAsMS0uNDktMS42NkwxOCwxMC4wOGEuOS45LDAsMSwxLDEsMS41MkwxMy43NCwxNUEuOS45LDAsMCwxLDEzLjI1''@;'; put 'put ''LDE1LjExWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOS43MiwzMC4yM2EuOS45LDAsMCwxLS40OS0xLjY2bDguOTMtNS43M2EuOS45LDAsMCwxLDEsMS41MkwyMC4yLDMwLjA5QS45LjksMCwwLDEsMTkuNzIs''@;'; put 'put ''MzAuMjNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTE4LjkyLDI1Ljk0YS45LjksMCwwLDEtLjQ5LTEuNjZsNS4yNS0zLjM3YS45LjksMCwxLDEsMSwxLjUxTDE5LjQsMjUuOEEuODkuODksMCwwLDEsMTguOTIs''@;'; put 'put ''MjUuOTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgZD0iTTIxLjU2LDUuNjlhMy41OSwzLjU5LDAsMCwxLC4xNSwzLjUzTDE4LjgzLDE1aDIuMjVsMi40My00Ljg3YTUuNjEsNS42MSwwLDAsMC01LTguMTRIMTMuMjZs''@;'; put 'put ''LTEsMmg2LjIyQTMuNjEsMy42MSwwLDAsMSwyMS41Niw1LjY5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi45MSwyMC43OEE1LjUzLDUuNTMsMCwwLDAsMjcuNjYsMTdIOS4zMWEzLjU0LDMuNTQsMCwwLDEt''@;'; put 'put ''My41Ni0zLjY3LDMuNjEsMy42MSwwLDAsMSwuNDItMS41NGw0LjI2LTguNDlhMSwxLDAsMSwwLTEuNzktLjlMNC40LDEwLjg0QTUuNjcsNS42NywwLDAsMCw0LDE1LjIyLDUuNTMsNS41MywwLDAsMCw5LjI4LDE5aDcuNmwtMy40NCw2Ljg3YTUuNjQsNS42NCwwLDAsMCwxLjUsNi45MkE1LjM4''@;'; put 'put ''LDUuMzgsMCwwLDAsMTguNDEsMzRoNS4yNWwxLTJIMTguNDNhMy41OCwzLjU4LDAsMCwxLTMuMjItNS4yMUwxOS4xMSwxOWg4LjU0YTMuNDIsMy40MiwwLDAsMSwyLjE1LjcxLDMuNTcsMy41NywwLDAsMSwxLDQuNDNsLTQuMTIsOC4yMmExLDEsMCwxLDAsMS43OS45bDQuMDYtOC4xQTUuNjcs''@;'; put 'put ''NS42NywwLDAsMCwzMi45MSwyMC43OFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi4xNiwxOS42M0E1LjU1LDUuNTUsMCwwLDAsMjcuNDIsMTdIMTAuMDZhNC4zNiw0LjM2LDAsMCwxLTMuNjctMiw0LjA3LDQuMDcs''@;'; put 'put ''MCwwLDEtLjE5LTQuMTNsMy42Mi03LDEuNDIsMS42My0yLjc0LDUuMyw4Ljg0LTUuNjZhLjkxLjkxLDAsMCwxLDEsMS41M0w3Ljg0LDEzLjM4YTIuMTMsMi4xMywwLDAsMCwuMjQuNTIsMi4yOCwyLjI4LDAsMCwwLDEuNjUsMUwxOC4xMSw5LjVhLjkxLjkxLDAsMCwxLDEsMS41MkwxMywxNC45''@;'; put 'put ''NEgyMC44bDIuNDEtNC44MmE1LjYsNS42LDAsMCwwLTUtOC4xMkg5YTEsMSwwLDAsMC0uOS41NkwzLjg4LDEwLjg5YTUuNiw1LjYsMCwwLDAsNSw4LjEyaDcuNjVsLTMuNDMsNi44N2E1LjYsNS42LDAsMCwwLDUsOC4xMmg5LjI4YTEsMSwwLDAsMCwuOTMtLjY1bDQuMTQtOC4yNEE1LjU4LDUu''@;'; put 'put ''NTgsMCwwLDAsMzIuMTYsMTkuNjNaTTE3Ljc1LDI1LjU3QS45MS45MSwwLDAsMSwxOCwyNC4zMWw2LTMuODhBLjkxLjkxLDAsMSwxLDI1LDIybC02LDMuODhhLjkxLjkxLDAsMCwxLTEuMjYtLjI3Wk0yOSwyNC4zNGwtOSw1Ljc4YS45MS45MSwwLDEsMS0xLTEuNTNsOS01Ljc4YS45MS45MSww''@;'; put 'put ''LDEsMSwxLDEuNTNaIi8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVGbGFzaz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDMsMjcuMjgsMjMsMTQuODRWNGgxYTEsMSwwLDAsMCwwLTJIMTJhMSwxLDAsMCwwLDAsMmgxVjE0Ljg0TDQuNTEsMjcuMzZBNC4yOSw0LjI5LDAsMCwwLDUs''@;'; put 'put ''MzIuOCw0LjM4LDQuMzgsMCwwLDAsOC4xNSwzNEgyOGE0LjI0LDQuMjQsMCwwLDAsMy40Mi02LjcyWk0yOS44NSwzMWEyLjYyLDIuNjIsMCwwLDEtMiwxSDhhMi4yLDIuMiwwLDAsMS0yLjA2LTEuNDEsMi42OCwyLjY4LDAsMCwxLC4yOS0yLjE3bDMtNC40NCwxNCwwLTEuMzEtMkgxMC41N0wx''@;'; put 'put ''NSwxNS40NlY0aDZWMTUuNDZsOC44NCwxMy4wNUEyLjIzLDIuMjMsMCwwLDEsMjkuODUsMzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS40OSwyNy40LDIzLDE0Ljk0VjRoMWExLDEsMCwwLDAsMC0ySDEy''@;'; put 'put ''LjA4YTEsMSwwLDAsMCwwLDJIMTNWMTQuOTRMNC41OCwyNy4zMWE0LjMxLDQuMzEsMCwwLDAtLjc4LDNBNC4yMyw0LjIzLDAsMCwwLDgsMzRIMjcuODZBNC4zNiw0LjM2LDAsMCwwLDMxLDMyLjgsNC4yMyw0LjIzLDAsMCwwLDMxLjQ5LDI3LjRaTTE1LDE1LjQ5VjRoNlYxNS40OUwyNi4xNSwy''@;'; put 'put ''M0g5Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZUFkbWluaXN0cmF0b3I9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE0LjY4LDE0LjgxYTYuNzYsNi43NiwwLDEsMSw2Ljc2LTYuNzVBNi43Nyw2Ljc3LDAs''@;'; put 'put ''MCwxLDE0LjY4LDE0LjgxWm0wLTExLjUxYTQuNzYsNC43NiwwLDEsMCw0Ljc2LDQuNzZBNC43Niw0Ljc2LDAsMCwwLDE0LjY4LDMuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE2LjQyLDMxLjY4QTIuMTQs''@;'; put 'put ''Mi4xNCwwLDAsMSwxNS44LDMwSDRWMjQuMjJhMTQuODEsMTQuODEsMCwwLDEsMTEuMDktNC42OGwuNzIsMGEyLjIsMi4yLDAsMCwxLC42Mi0xLjg1bC4xMi0uMTFjLS40NywwLTEtLjA2LTEuNDYtLjA2QTE2LjQ3LDE2LjQ3LDAsMCwwLDIuMiwyMy4yNmExLDEsMCwwLDAtLjIuNlYzMGEyLDIs''@;'; put 'put ''MCwwLDAsMiwySDE2LjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NywxNi4yOWEuMzcuMzcsMCwwLDEsLjE1LDAsLjQyLjQyLDAsMCwwLS4xNSwwWiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDIzLjMybC0yLS42MWE3LjIxLDcuMjEsMCwwLDAtLjU4LTEuNDFsMS0xLjg2QS4zOC4zOCwwLDAsMCwzMiwxOWwtMS40NS0xLjQ1YS4zNi4zNiwwLDAsMC0uNDQtLjA3bC0xLjg0LDFhNy4xNSw3LjE1LDAs''@;'; put 'put ''MCwwLTEuNDMtLjYxbC0uNjEtMmEuMzYuMzYsMCwwLDAtLjM2LS4yNEgyMy44MmEuMzYuMzYsMCwwLDAtLjM1LjI2bC0uNjEsMmE3LDcsMCwwLDAtMS40NC42bC0xLjgyLTFhLjM1LjM1LDAsMCwwLS40My4wN0wxNy42OSwxOWEuMzguMzgsMCwwLDAtLjA2LjQ0bDEsMS44MkE2Ljc3LDYuNzcs''@;'; put 'put ''MCwwLDAsMTgsMjIuNjlsLTIsLjZhLjM2LjM2LDAsMCwwLS4yNi4zNXYyLjA1QS4zNS4zNSwwLDAsMCwxNiwyNmwyLC42MWE3LDcsMCwwLDAsLjYsMS40MWwtMSwxLjkxYS4zNi4zNiwwLDAsMCwuMDYuNDNsMS40NSwxLjQ1YS4zOC4zOCwwLDAsMCwuNDQuMDdsMS44Ny0xYTcuMDksNy4wOSww''@;'; put 'put ''LDAsMCwxLjQuNTdsLjYsMmEuMzguMzgsMCwwLDAsLjM1LjI2aDIuMDVhLjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTIuMDVhNi45Miw2LjkyLDAsMCwwLDEuMzgtLjU3bDEuODksMWEuMzYuMzYsMCwwLDAsLjQzLS4wN0wzMiwzMC40QS4zNS4zNSwwLDAsMCwzMiwzMGwtMS0xLjg4YTcsNyww''@;'; put 'put ''LDAsMCwuNTgtMS4zOWwyLS42MWEuMzYuMzYsMCwwLDAsLjI2LS4zNVYyMy42N0EuMzYuMzYsMCwwLDAsMzMuNjgsMjMuMzJaTTI0Ljg1LDI4YTMuMzQsMy4zNCwwLDEsMSwzLjMzLTMuMzNBMy4zNCwzLjM0LDAsMCwxLDI0Ljg1LDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxNC42NyIgY3k9IjguMyIgcj0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNi40NCwzMS44MmEyLjE1LDIuMTUsMCwwLDEtLjM4LTIuNTVs''@;'; put 'put ''LjUzLTEtMS4wOS0uMzNBMi4xNCwyLjE0LDAsMCwxLDE0LDI1Ljg0VjIzLjc5YTIuMTYsMi4xNiwwLDAsMSwxLjUzLTIuMDdsMS4wOS0uMzMtLjUyLTFhMi4xNywyLjE3LDAsMCwxLC4zNS0yLjUyLDE4LjkyLDE4LjkyLDAsMCwwLTIuMzItLjE2QTE1LjU4LDE1LjU4LDAsMCwwLDIsMjMuMDd2''@;'; put 'put ''Ny43NWExLDEsMCwwLDAsMSwxSDE2LjQ0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43LDIzLjQ2bC0yLS42YTYuNzMsNi43MywwLDAsMC0uNTgtMS40MmwxLTEuODZhLjM1LjM1LDAsMCwwLS4wNy0uNDNsLTEu''@;'; put 'put ''NDUtMS40NmEuMzguMzgsMCwwLDAtLjQzLS4wN2wtMS44NSwxYTcuNzQsNy43NCwwLDAsMC0xLjQzLS42bC0uNjEtMmEuMzguMzgsMCwwLDAtLjM2LS4yNUgyMy44NGEuMzguMzgsMCwwLDAtLjM1LjI2bC0uNiwyYTYuODUsNi44NSwwLDAsMC0xLjQ1LjYxbC0xLjgxLTFhLjM4LjM4LDAsMCww''@;'; put 'put ''LS40NC4wNmwtMS40NywxLjQ0YS4zNy4zNywwLDAsMC0uMDcuNDRsMSwxLjgyQTcuMjQsNy4yNCwwLDAsMCwxOCwyMi44M2wtMiwuNjFhLjM2LjM2LDAsMCwwLS4yNi4zNXYyLjA1YS4zNi4zNiwwLDAsMCwuMjYuMzVsMiwuNjFhNy4yOSw3LjI5LDAsMCwwLC42LDEuNDFsLTEsMS45YS4zNy4z''@;'; put 'put ''NywwLDAsMCwuMDcuNDRMMTkuMTYsMzJhLjM4LjM4LDAsMCwwLC40NC4wNmwxLjg3LTFhNy4wOSw3LjA5LDAsMCwwLDEuNC41N2wuNiwyLjA1YS4zOC4zOCwwLDAsMCwuMzYuMjZoMi4wNWEuMzguMzgsMCwwLDAsLjM1LS4yNmwuNi0yLjA1YTYuNjgsNi42OCwwLDAsMCwxLjM4LS41N2wxLjg5''@;'; put 'put ''LDFhLjM4LjM4LDAsMCwwLC40NC0uMDZMMzIsMzAuNTVhLjM4LjM4LDAsMCwwLC4wNi0uNDRsLTEtMS44OGE2LjkyLDYuOTIsMCwwLDAsLjU3LTEuMzhsMi0uNjFhLjM5LjM5LDAsMCwwLC4yNy0uMzVWMjMuODJBLjQuNCwwLDAsMCwzMy43LDIzLjQ2Wm0tOC44Myw0LjcyYTMuMzQsMy4zNCww''@;'; put 'put ''LDEsMSwzLjMzLTMuMzRBMy4zNCwzLjM0LDAsMCwxLDI0Ljg3LDI4LjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZUhhcmREcml2ZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsOGEyLDIsMCwwLDAtMi0y''@;'; put 'put ''SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJaTTMyLDI4SDRWOEgzMlYyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNi4yMSIgY3k9IjEwLjI1IiByPSIxLjI1''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI5LjgxIiBjeT0iMTAuMjUiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNs''@;'; put 'put ''ZSBjeD0iNi4yMSIgY3k9IjI1LjQyIiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI5LjgxIiBjeT0iMjUuNDIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjg4LDE4LjA4YTMuNTksMy41OSwwLDEsMCwzLjU5LTMuNTksMy44NCwzLjg0LDAsMCwwLS45MS4xM0wxNSwxNi4xNmEyLjA4LDIuMDgsMCwwLDEsLjUtLjA3LDIsMiwwLDEsMS0yLDIsMS42NCwxLjY0LDAsMCwxLC4wOC0uNUwx''@;'; put 'put ''MiwxNy4xNkEzLjUzLDMuNTMsMCwwLDAsMTEuODgsMTguMDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNS40NywyNS43M2E3LjY2LDcuNjYsMCwwLDEtNy42NS03LjY1LDcuNTUsNy41NSwwLDAsMSwuMjct''@;'; put 'put ''Mkw2LjU0LDE1LjdhOS4yNCw5LjI0LDAsMCwwLDE3LjgsNC45NUgyMi42NkE3LjY0LDcuNjQsMCwwLDEsMTUuNDcsMjUuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4yMiwxNy44M2EuOC44LDAsMCww''@;'; put 'put ''LS44LS44SDI0LjY2YTkuMjYsOS4yNiwwLDAsMC05LjE5LTguMiw5LjM2LDkuMzYsMCwwLDAtMi4zOC4zMmwuNDIsMS41NGE3Ljg2LDcuODYsMCwwLDEsMi0uMjZBNy42Niw3LjY2LDAsMCwxLDIzLDE3SDIwLjkyYS44LjgsMCwwLDAsMCwxLjZoNi41QS44LjgsMCwwLDAsMjguMjIsMTcuODNa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNMTIsMTcuMTZsMS41NC40MmExLjY0''@;'; put 'put ''LDEuNjQsMCwwLDAtLjA4LjUsMiwyLDAsMSwwLDItMiwyLjA4LDIuMDgsMCwwLDAtLjUuMDdsLS40MS0xLjU0YTMuODQsMy44NCwwLDAsMSwuOTEtLjEzLDMuNTksMy41OSwwLDEsMS0zLjU5LDMuNTlBMy41MywzLjUzLDAsMCwxLDEyLDE3LjE2Wk01LjMxLDhBMS4yNSwxLjI1LDAsMSwxLDQu''@;'; put 'put ''MDYsOS4yNSwxLjI1LDEuMjUsMCwwLDEsNS4zMSw4Wm0wLDIwLjA2YTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4yNSwxLjI1LDAsMCwxLDUuMzEsMjguMDZabTEwLjE2LS43M0E5LjIyLDkuMjIsMCwwLDEsNi41NCwxNS43bDEuNTUuNDFhNy41NSw3LjU1LDAsMCwwLS4yNywyLDcuNjQs''@;'; put 'put ''Ny42NCwwLDAsMCwxNC44NCwyLjU3aDEuNjhBOS4yNSw5LjI1LDAsMCwxLDE1LjQ3LDI3LjMzWm0xMi04LjdoLTYuNWEuOC44LDAsMCwxLDAtMS42SDIzYTcuNjYsNy42NiwwLDAsMC03LjU3LTYuNiw3Ljg2LDcuODYsMCwwLDAtMiwuMjZsLS40Mi0xLjU0YTkuMzYsOS4zNiwwLDAsMSwyLjM4''@;'; put 'put ''LS4zMkE5LjI2LDkuMjYsMCwwLDEsMjQuNjYsMTdoMi43NmEuOC44LDAsMCwxLDAsMS42Wm0zLjM5LDkuNDNhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsMzAuODEsMjguMDZabTAtMTcuNTZhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCww''@;'; put 'put ''LDEsMzAuODEsMTAuNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVIYXJkRHJpdmVEaXNrcz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYsNS43NEExLjc0LDEuNzQsMCwwLDAsMjQuMjYsNEgzLjc0QTEuNzQs''@;'; put 'put ''MS43NCwwLDAsMCwyLDUuNzRWMjAuMjZBMS43NCwxLjc0LDAsMCwwLDMuNzQsMjJINFY2SDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsOS43NEExLjc0LDEuNzQsMCwwLDAsMjguMjYsOEg3Ljc0QTEu''@;'; put 'put ''NzQsMS43NCwwLDAsMCw2LDkuNzRWMjQuMjZBMS43NCwxLjc0LDAsMCwwLDcuNzQsMjZIOFYxMEgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjI2LDEySDExLjc0QTEuNzQsMS43NCwwLDAsMCwxMCwx''@;'; put 'put ''My43NFYyOC4yNkExLjc0LDEuNzQsMCwwLDAsMTEuNzQsMzBIMzIuMjZBMS43NCwxLjc0LDAsMCwwLDM0LDI4LjI2VjEzLjc0QTEuNzQsMS43NCwwLDAsMCwzMi4yNiwxMlpNMzIsMjhIMTJWMTRIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCwyMy42OGEyLjY0LDIuNjQsMCwxLDAtMi43LTIuNjNBMi42NywyLjY3LDAsMCwwLDE5Ljk0LDIzLjY4Wm0wLTMuODdhMS4yNCwxLjI0LDAsMSwxLTEuMjksMS4yNEExLjI3LDEuMjcsMCwwLDEsMTkuOTQsMTkuODFaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCwxNi4yMmE0LjkzLDQuOTMsMCwwLDEsNC45NSw0LjM1SDIzLjcxVjIyaDQuNDFhLjcuNywwLDAsMCwwLTEuNEgyNi4zMWE2LjMzLDYuMzMsMCwwLDAtNi4zNy01Ljc1LDYuNTgsNi41OCww''@;'; put 'put ''LDAsMC0xLjQ4LjE3bC4zNSwxLjM3QTQuNzMsNC43MywwLDAsMSwxOS45NCwxNi4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5Ljk0LDI3LjI3YTYuNDIsNi40MiwwLDAsMCw1LjY3LTMuMzVIMjMuOTNh''@;'; put 'put ''NSw1LDAsMCwxLTQsMS45NSw0LjkxLDQuOTEsMCwwLDEtNS00LjgyLDUuMTYsNS4xNiwwLDAsMSwuMDgtLjc5TDEzLjYzLDIwYTcsNywwLDAsMC0uMDksMUE2LjMyLDYuMzIsMCwwLDAsMTkuOTQsMjcuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiw1Ljc0QTEuNzQsMS43NCwwLDAsMCwyNC4yNiw0SDMuNzRBMS43NCwxLjc0LDAsMCwwLDIsNS43NFYyMC4yNkExLjc0LDEuNzQsMCwwLDAsMy43NCwyMkg0VjZIMjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTMwLDkuNzRBMS43NCwxLjc0LDAsMCwwLDI4LjI2LDhINy43NEExLjc0LDEuNzQsMCwwLDAsNiw5Ljc0VjI0LjI2QTEuNzQsMS43NCwwLDAsMCw3Ljc0LDI2SDhWMTBIMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTE5LjYyLDIyLjZBMS41NSwxLjU1LDAsMSwwLDE4LDIxLjA1LDEuNiwxLjYsMCwwLDAsMTkuNjIsMjIuNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMjYsMTJIMTEuNzRB''@;'; put 'put ''MS43NCwxLjc0LDAsMCwwLDEwLDEzLjc0VjI4LjI2QTEuNzQsMS43NCwwLDAsMCwxMS43NCwzMEgzMi4yNkExLjc0LDEuNzQsMCwwLDAsMzQsMjguMjZWMTMuNzRBMS43NCwxLjc0LDAsMCwwLDMyLjI2LDEyWk0xOS42MiwxNy43NGEzLjMxLDMuMzEsMCwxLDEtMy4zOCwzLjMxQTMuMzUsMy4z''@;'; put 'put ''NSwwLDAsMSwxOS42MiwxNy43NFptMCwxMS4xM2E3Ljk0LDcuOTQsMCwwLDEtOC03LjgyLDcuODMsNy44MywwLDAsMSwuMTEtMS4yOWwxLjc1LjNhNS4zNiw1LjM2LDAsMCwwLS4xMSwxLDYuMTgsNi4xOCwwLDAsMCw2LjI4LDYuMDYsNi4zNSw2LjM1LDAsMCwwLDUtMi40NmgyLjFBOC4wNiw4''@;'; put 'put ''LjA2LDAsMCwxLDE5LjYyLDI4Ljg3Wk0yOS44OSwyMi4ySDI0LjM2VjIwLjQ0aDEuNDhBNi4xOSw2LjE5LDAsMCwwLDE5LjYyLDE1YTYuNDgsNi40OCwwLDAsMC0xLjQxLjE2bC0uNDUtMS43YTguMTYsOC4xNiwwLDAsMSwxLjg2LS4yMiw4LDgsMCwwLDEsOCw3LjIxaDIuMjZhLjg4Ljg4LDAs''@;'; put 'put ''MCwxLDAsMS43NloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVOVk1lPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNywyMlYxNGEyLDIsMCwwLDAtMi0ySDExYTIsMiwwLDAsMC0yLDJ2OGEyLDIsMCwwLDAsMiwy''@;'; put 'put ''SDI1QTIsMiwwLDAsMCwyNywyMlpNMTEsMTRIMjV2OEgxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTkiIHk9IjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjUuMDEiIHk9IjYiIHdpZHRoPSIxLjk3IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUuOCw4SDE2Ljg3VjZoLTExTDcu''@;'; put 'put ''NzgsNC4wOGExLDEsMCwwLDAsMC0xLjQyLDEsMSwwLDAsMC0xLjQxLDBMMiw3LDYuMzcsMTEuNGExLDEsMCwwLDAsMS40MSwwLDEsMSwwLDAsMCwwLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS42''@;'; put 'put ''MSwyNC42OGExLDEsMCwwLDAtMS40MSwwLDEsMSwwLDAsMCwwLDEuNDJMMzAuMSwyOEgxOXYySDMwLjJsLTIsMmExLDEsMCwwLDAsMCwxLjQxLDEsMSwwLDAsMCwuNy4yOSwxLDEsMCwwLDAsLjcxLS4yOUwzNCwyOS4wNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTMiIHk9IjI4IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjkiIHk9IjI4IiB3aWR0aD0iMS45NyIgaGVpZ2h0PSIyIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZVNTRD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCww''@;'; put 'put ''LDMyLDZabTAsMjJINFY4SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI2LjIxIiBjeT0iMTAuMjUiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjkuODEiIGN5PSIxMC4yNSIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI2LjIxIiBjeT0iMjUuNDIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjkuODEiIGN5PSIyNS40MiIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAsMTguNjJjMS4zMi4z''@;'; put 'put ''MSwxLjkxLjU0LDEuOTEsMS4yMnMtLjUzLDEuMDktMS41NSwxLjA5YTQsNCwwLDAsMS0yLjcxLTEuMTFsLS44NiwxLjA2YTUsNSwwLDAsMCwzLjUyLDEuMzRjMiwwLDMuMS0xLDMuMS0yLjUycy0xLjE1LTIuMDUtMi44Ny0yLjQ0Yy0xLjMxLS4zLTEuOTItLjU0LTEuOTItMS4yMUExLjI1LDEu''@;'; put 'put ''MjUsMCwwLDEsMTAsMTVhMy42OCwzLjY4LDAsMCwxLDIuMzcsMWwuODEtMS4xQTQuNTgsNC41OCwwLDAsMCwxMCwxMy42OWMtMS43NCwwLTMsMS4wNS0zLDIuNDlTOC4yNiwxOC4yMiwxMCwxOC42MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTE3LjgzLDIwLjkzYTQsNCwwLDAsMS0yLjcxLTEuMTFsLS44NiwxLjA2YTUsNSwwLDAsMCwzLjUyLDEuMzRjMiwwLDMuMS0xLDMuMS0yLjUyUzE5LjczLDE3LjY1LDE4LDE3LjI2Yy0xLjMxLS4zLTEuOTItLjU0LTEuOTItMS4yMUExLjI1LDEuMjUsMCwwLDEs''@;'; put 'put ''MTcuNDgsMTVhMy42OCwzLjY4LDAsMCwxLDIuMzcsMWwuODEtMS4xYTQuNTYsNC41NiwwLDAsMC0zLjEyLTEuMTVjLTEuNzMsMC0zLDEuMDUtMywyLjQ5czEuMTksMiwyLjg5LDIuNDRjMS4zMi4zMSwxLjkxLjU0LDEuOTEsMS4yMlMxOC44NSwyMC45MywxNy44MywyMC45M1oiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjksMThjMC0yLjQxLTEuOTItNC4xMi00LjY0LTQuMTJoLTIuOXY4LjI0aDIuOUMyOCwyMi4wOCwyOS45LDIwLjM3LDI5LjksMThabS02LTIuNzZoMS41NmEyLjc3LDIuNzcsMCwx''@;'; put 'put ''LDEsMCw1LjUzSDIzLjg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTUuMjEs''@;'; put 'put ''OEExLjI1LDEuMjUsMCwxLDEsNCw5LjI1LDEuMjUsMS4yNSwwLDAsMSw1LjIxLDhabTAsMjBhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsNS4yMSwyOFptNS4wNi01Ljc4YTUsNSwwLDAsMS0zLjUyLTEuMzRsLjg2LTEuMDZhNCw0LDAsMCwwLDIuNzEsMS4xMWMx''@;'; put 'put ''LDAsMS41NS0uNSwxLjU1LTEuMDlzLS41OS0uOTEtMS45MS0xLjIyYy0xLjctLjQtMi44OS0uODktMi44OS0yLjQ0czEuMjItMi40OSwzLTIuNDlhNC41OCw0LjU4LDAsMCwxLDMuMTIsMS4xNWwtLjgxLDEuMUEzLjY4LDMuNjgsMCwwLDAsMTAsMTVhMS4yNSwxLjI1LDAsMCwwLTEuMzksMS4w''@;'; put 'put ''OGMwLC42Ny42MS45MSwxLjkyLDEuMjEsMS43Mi4zOSwyLjg3Ljk0LDIuODcsMi40NFMxMi4yNCwyMi4yMiwxMC4yNywyMi4yMlptNy41MSwwYTUsNSwwLDAsMS0zLjUyLTEuMzRsLjg2LTEuMDZhNCw0LDAsMCwwLDIuNzEsMS4xMWMxLDAsMS41NS0uNSwxLjU1LTEuMDlzLS41OS0uOTEtMS45''@;'; put 'put ''MS0xLjIyYy0xLjctLjQtMi44OS0uODktMi44OS0yLjQ0czEuMjMtMi40OSwzLTIuNDlhNC41Niw0LjU2LDAsMCwxLDMuMTIsMS4xNWwtLjgxLDEuMWEzLjY4LDMuNjgsMCwwLDAtMi4zNy0xLDEuMjUsMS4yNSwwLDAsMC0xLjM5LDEuMDhjMCwuNjcuNjEuOTEsMS45MiwxLjIxLDEuNzIuMzks''@;'; put 'put ''Mi44Ny45NCwyLjg3LDIuNDRTMTkuNzUsMjIuMjIsMTcuNzgsMjIuMjJabTQuNTgtLjE0VjEzLjg0aDIuOWMyLjcyLDAsNC42NCwxLjcxLDQuNjQsNC4xMlMyOCwyMi4wOCwyNS4yNiwyMi4wOFpNMzAuNjksMjhhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsMzAu''@;'; put 'put ''NjksMjhabTAtMTcuNWExLjI1LDEuMjUsMCwxLDEsMS4yNS0xLjI1QTEuMjUsMS4yNSwwLDAsMSwzMC42OSwxMC41WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwxNS4yaDEuNTZhMi43NywyLjc3LDAsMSwx''@;'; put 'put ''LDAsNS41M0gyMy44NloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVCbHVldG9vdGg9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LjY0LDI1LjI3LDE5LDE3LjUzLDE5LDMsMjUuMjEsOS40bC01LjY1LDUuNzlM''@;'; put 'put ''MjEsMTYuNjJsNS42OC01LjgyYTIsMiwwLDAsMCwwLTIuNzhMMjAuNDgsMS43QTIuMDgsMi4wOCwwLDAsMCwxOC44NSwxLDIsMiwwLDAsMCwxNywzVjE1LjM4TDEwLjA1LDguMjdBMSwxLDAsMCwwLDguNjIsOS42NkwxNi43OSwxOCw5LjA2LDI2YTEsMSwwLDAsMCwwLDEuNDEsMSwxLDAsMCww''@;'; put 'put ''LC43LjI5LDEsMSwwLDAsMCwuNzItLjMxTDE3LDIwLjY4VjMzYTIuMDcsMi4wNywwLDAsMCwuNzEsMS42MkEyLDIsMCwwLDAsMTksMzVhMS45NCwxLjk0LDAsMCwwLDEuNDItLjZsNi4yMy02LjM4QTIsMiwwLDAsMCwyNi42NCwyNS4yN1pNMTksMzMuMDVWMjAuMjlsNi4yMSw2LjM2WiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gIDxwYXRoIGQ9Ik0yNi41MiwyNC41MmwtNS42NS01LjgzLTEuNDYtMS41di0xMkwyMy43OSw5LjdsLTMuNiwzLjcxLDIuMjQsMi4yOSw0LjA5LTQuMjJhMi41NCwyLjU0LDAsMCwwLDAtMy41NkwyMC41NywxLjc4''@;'; put 'put ''QTIuNTQsMi41NCwwLDAsMCwxNi4yLDMuNTVWMTMuODZsLTUuNTMtNS43YTEuNiwxLjYsMCwxLDAtMi4zLDIuMjNMMTUuNzUsMThsLTcsNy4xOWExLjYsMS42LDAsMCwwLDAsMi4yNiwxLjYzLDEuNjMsMCwwLDAsMS4xMi40NSwxLjU4LDEuNTgsMCwwLDAsMS4xNS0uNDlsNS4xMS01LjI3VjMy''@;'; put 'put ''LjQ1YTIuNTMsMi41MywwLDAsMCwxLjU5LDIuMzYsMi40NCwyLjQ0LDAsMCwwLC45NS4xOSwyLjU2LDIuNTYsMCwwLDAsMS44My0uNzdsNS45NS02LjE1QTIuNTQsMi41NCwwLDAsMCwyNi41MiwyNC41MlpNMTkuNCwzMC44M1YyMS43N2w0LjM5LDQuNTNaIiBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVCbHVldG9vdGhPZmY9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5LDMsMjUuMjIsOS40bC01LjY2LDUuOEwyMSwxNi42M2w1LjY4LTUuODNhMiwyLDAsMCwwLDAtMi43OEwyMC40OCwxLjdBMiwyLDAsMCwwLDE4Ljg1LDEs''@;'; put 'put ''MiwyLDAsMCwwLDE3LDN2MTEuNGwyLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNC43Nyw1LDMuMzYsNi40MiwxNS44OSwxOSw5LjA2LDI2YTEsMSwwLDAsMCwuNzEsMS43LDEsMSwwLDAsMCwuNzItLjMxTDE3LDIwLjY4VjMyLjk0''@;'; put 'put ''YTIuMDgsMi4wOCwwLDAsMCwuNzEsMS42M0EyLDIsMCwwLDAsMTksMzVhMiwyLDAsMCwwLDEuNDItLjZsNS40MS01LjU0LDMuNTQsMy41M0wzMC43NywzMVpNMTksMzMuMDV2LTExbDUuNDEsNS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRo''@;'; put 'put ''IGQ9Ik0xOS4zMSw1LjE3LDIzLjcsOS43bC0zLjU5LDMuNzEsMi4yNCwyLjI5LDQuMDktNC4yMmEyLjU2LDIuNTYsMCwwLDAsMC0zLjU2bC02LTYuMTRhMi41MSwyLjUxLDAsMCwwLTIuNzctLjU5LDIuNTQsMi41NCwwLDAsMC0xLjYsMi4zNnYxMGwzLjIxLDMuMjFaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik00LjUsNSwzLjA5LDYuNDIsMTUuMTcsMTguNTEsOC43LDI1LjE5QTEuNiwxLjYsMCwwLDAsOS44NSwyNy45LDEuNTcsMS41NywwLDAsMCwxMSwyNy40MWw1LjExLTUuMjdWMzIuNDVhMi41NCwyLjU0LDAsMCwwLDEuNiwyLjM2''@;'; put 'put ''LDIuNDQsMi40NCwwLDAsMCwuOTUuMTksMi41NSwyLjU1LDAsMCwwLDEuODItLjc3bDUuMTItNS4yOSwzLjQ5LDMuNDhMMzAuNSwzMVpNMTkuODEsMzAuODNWMjIuNjVsNCw0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlUHJvY2Vzc09u''@;'; put 'put ''Vk09KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjQ5LDI2LjI4YTEsMSwwLDAsMC0xLjItLjdsLTIuNDkuNjdhMTQuMjMsMTQuMjMsMCwwLDAsMi40LTYuNzVBMTQuNDgsMTQuNDgsMCwwLDAsMjcuMzcsNy4zNSwxLDEsMCwwLDAsMjYsNy40NGExLDEsMCwwLDAsLjA5LDEuNDEsMTIu''@;'; put 'put ''NDUsMTIuNDUsMCwwLDEsNC4xNiwxMC40NiwxMi4xOSwxMi4xOSwwLDAsMS0yLDUuNzRMMjgsMjIuNTRhMSwxLDAsMSwwLTEuOTUuMTZsLjUsNi40NCw2LjI1LTEuNjZBMSwxLDAsMCwwLDMzLjQ5LDI2LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+''@;'; put 'put ''PHBhdGggZD0iTTQuMzEsMTcuMDhhMS4wNiwxLjA2LDAsMCwwLC40NC4xNiwxLDEsMCwwLDAsMS4xMi0uODVBMTIuMjEsMTIuMjEsMCwwLDEsMTguNjksNS44NEwxNi40NSw3LjM3YTEsMSwwLDAsMCwuNDcsMS43OUExLDEsMCwwLDAsMTcuNTYsOWw1LjMzLTMuNjZMMTguMzMuNzZhMSwxLDAs''@;'; put 'put ''MSwwLTEuMzksMS4zOGwxLjcsMS43QTE0LjIsMTQuMiwwLDAsMCwzLjg5LDE2LjEyLDEsMSwwLDAsMCw0LjMxLDE3LjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIxLjczLDI5LjkzYTEyLDEyLDAsMCwxLTQuODQuNTEsMTIuMywx''@;'; put 'put ''Mi4zLDAsMCwxLTkuNTctNi4zbDIuNDkuOTNhMSwxLDAsMCwwLC42OS0xLjg0bC00LjU5LTEuN2gwTDQuNDQsMjEsMy4zMywyNy4zNWExLDEsMCwwLDAsLjc5LDEuMTNsLjE3LDBhMSwxLDAsMCwwLDEtLjgxbC40Mi0yLjRhMTQuMywxNC4zLDAsMCwwLDExLDcuMTQsMTMuOTEsMTMuOTEsMCww''@;'; put 'put ''LDAsNS42My0uNiwxLDEsMCwwLDAtLjYtMS45WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIyLDEzSDE0YTEsMSwwLDAsMC0xLDF2OGExLDEsMCwwLDAsMSwxaDhhMSwxLDAsMCwwLDEtMVYxNEExLDEsMCwwLDAsMjIsMTNabS0xLDhI''@;'; put 'put ''MTVWMTVoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLGIuQ2xyU2hhcGVBc3NpZ25Vc2VyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwxN2E3LjQ2LDcuNDYsMCwxLDAtNy40NS03LjQ2QTcuNDYsNy40NiwwLDAsMCwxOCwxN1pNMTgs''@;'; put 'put ''NC4wN2E1LjQ2LDUuNDYsMCwxLDEtNS40NSw1LjQ1QTUuNDYsNS40NiwwLDAsMSwxOCw0LjA3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYsMzEuODlWMjUuNzdhMTYuMTMsMTYuMTMsMCwwLDEsMTItNSwxNi42MSwxNi42MSwwLDAs''@;'; put 'put ''MSw4LjcxLDIuMzNsMS4zNS0xLjUxQTE4LjUzLDE4LjUzLDAsMCwwLDE4LDE4Ljc0LDE3LjcsMTcuNywwLDAsMCw0LjIxLDI0LjhhMSwxLDAsMCwwLS4yMS42djYuNDlBMi4wNiwyLjA2LDAsMCwwLDYsMzRIMTguMzlsLTEuOS0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDMxLjg5LDMwLDMySDI2Ljg1bC0xLjgsMkgzMGEyLjA2LDIuMDYsMCwwLDAsMi0yLjA3VjI2LjJsLTIsMi4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zNC43NiwxOC42MmExLDEsMCww''@;'; put 'put ''LDAtMS40MS4wOGwtMTEuNjIsMTMtNS4yLTUuNTlBMSwxLDAsMCwwLDE1LjEyLDI2YTEsMSwwLDAsMC0uMDYsMS40Mmw2LjY5LDcuMkwzNC44NCwyMEExLDEsMCwwLDAsMzQuNzYsMTguNjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48Y2lyY2xlIGN4''@;'; put 'put ''PSIxNy45OSIgY3k9IjEwLjM2IiByPSI2LjgxIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xMiwyNi42NWEyLjgsMi44LDAsMCwxLDQuODUtMS44TDIwLjcxLDI5bDYuODQtNy42M0ExNi44MSwxNi44MSwwLDAsMCwxOCwxOC41NSwxNi4xMywx''@;'; put 'put ''Ni4xMywwLDAsMCw1LjUsMjRhMSwxLDAsMCwwLS4yLjYxVjMwYTIsMiwwLDAsMCwxLjk0LDJoOC41N2wtMy4wNy0zLjNBMi44MSwyLjgxLDAsMCwxLDEyLDI2LjY1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMjguNzYsMzJhMiwyLDAsMCww''@;'; put 'put ''LDEuOTQtMlYyNi4yNEwyNS41NywzMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLjc3LDE4LjYyYTEsMSwwLDAsMC0xLjQyLjA4bC0xMS42MiwxMy01LjItNS41OUExLDEsMCwwLDAsMTQuMTIsMjZhMSwxLDAsMCwwLDAsMS40Mmw2LjY4''@;'; put 'put ''LDcuMkwzMy44NCwyMEExLDEsMCwwLDAsMzMuNzcsMTguNjJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPicpLGIuQ2xyU2hhcGVBdG9tPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwxNC4wNWE0LDQsMCwxLDAsNCw0QTQsNCwwLDAsMCwxOCwxNC4w''@;'; put 'put ''NVptMCw2LjQ0YTIuNDIsMi40MiwwLDEsMSwyLjQyLTIuNDJBMi40MiwyLjQyLDAsMCwxLDE4LDIwLjQ5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI0LjIzLDExLjcxYTM5LjE0LDM5LjE0LDAsMCwwLTQuNTctMy45MiwyMi44Niwy''@;'; put 'put ''Mi44NiwwLDAsMSwzLjQ4LTEuNzJjLjMyLS4xMi42Mi0uMjEuOTItLjNhMi4yOCwyLjI4LDAsMCwwLDMuODEtLjQ2LDMuMzEsMy4zMSwwLDAsMSwxLjkyLjg0YzEuMTksMS4xOSwxLjIyLDMuNTkuMSw2LjU4LjQ5LjY1Ljk0LDEuMzEsMS4zNSwyLC4xNy0uNC4zNS0uNzkuNDktMS4xOCwxLjQ3''@;'; put 'put ''LTMuODUsMS4yOC03LS41My04Ljc4YTUuMjksNS4yOSwwLDAsMC0zLjMzLTEuNDQsMi4yOSwyLjI5LDAsMCwwLTQuMzEuNTRjLS4zNy4xMS0uNzQuMjItMS4xMy4zN2EyNS43OSwyNS43OSwwLDAsMC00LjU3LDIuMzVBMjYuMjEsMjYuMjEsMCwwLDAsMTMuMjgsNC4yYy0zLjg1LTEuNDYtNy0x''@;'; put 'put ''LjI4LTguNzcuNTNDMi44NSw2LjQsMi41OCw5LjE3LDMuNjgsMTIuNTlhMi4yOCwyLjI4LDAsMCwwLDEuNTksMy42N2MuMzIuNjEuNjcsMS4yMiwxLjA2LDEuODJBMjUuNTQsMjUuNTQsMCwwLDAsNCwyMi42NmMtMS40NywzLjg0LTEuMjgsNywuNTMsOC43N2E1LjYzLDUuNjMsMCwwLDAsNC4x''@;'; put 'put ''MiwxLjUxLDEzLjM0LDEzLjM0LDAsMCwwLDQuNjUtMSwyNi4yMSwyNi4yMSwwLDAsMCw0LjU4LTIuMzVBMjUuNzksMjUuNzksMCwwLDAsMjIuNDMsMzJhMTQuMTYsMTQuMTYsMCwwLDAsMy42NS45QTIuMywyLjMsMCwwLDAsMzAuNDYsMzJhNC41NSw0LjU1LDAsMCwwLC43NC0uNTdjMS44MS0x''@;'; put 'put ''LjgxLDItNC45My41My04Ljc3QTMyLjY4LDMyLjY4LDAsMCwwLDI0LjIzLDExLjcxWk0xMi41NywzMC4wOWMtMywxLjE1LTUuNDUsMS4xMy02LjY1LS4wOHMtMS4yMy0zLjYyLS4wNy02LjY0YTIyLjc3LDIyLjc3LDAsMCwxLDEuNzEtMy40OCw0MC4xOSw0MC4xOSwwLDAsMCwzLjkyLDQuNTZj''@;'; put 'put ''LjQzLjQzLjg3Ljg1LDEuMzEsMS4yNXEuOS0uNDYsMS44My0xLjA1Yy0uNTgtLjUyLTEuMTYtMS0xLjcyLTEuNjFhMzQsMzQsMCwwLDEtNS43NC03LjQ3QTIuMjksMi4yOSwwLDAsMCw1LjUsMTEuNjloMGMtLjc1LTIuNS0uNjItNC40OS40My01LjU0YTMuNzIsMy43MiwwLDAsMSwyLjcyLS45''@;'; put 'put ''MiwxMS40LDExLjQsMCwwLDEsMy45My44NCwyMi44NiwyMi44NiwwLDAsMSwzLjQ4LDEuNzIsMzkuMTQsMzkuMTQsMCwwLDAtNC41NywzLjkyYy0uNDQuNDQtLjg3LjktMS4yOSwxLjM2YTIwLjI3LDIwLjI3LDAsMCwwLDEsMS44NWMuNTQtLjYxLDEuMDktMS4yMSwxLjY4LTEuOGEzNi4zMywz''@;'; put 'put ''Ni4zMywwLDAsMSw1LTQuMTcsMzYuODgsMzYuODgsMCwwLDEsNC45NSw0LjE3LDM2LjI2LDM2LjI2LDAsMCwxLDQuMTcsNSwzNywzNywwLDAsMS00LjE3LDVBMzAuNjgsMzAuNjgsMCwwLDEsMTIuNTcsMzAuMDlaTTI5Ljc5LDMwbC0uMTYuMTNhMi4yNywyLjI3LDAsMCwwLTMuNS43MiwxMi41''@;'; put 'put ''NywxMi41NywwLDAsMS0zLS43NywyMiwyMiwwLDAsMS0zLjQ4LTEuNzIsMzkuMTQsMzkuMTQsMCwwLDAsNC41Ny0zLjkyLDM4LjI2LDM4LjI2LDAsMCwwLDMuOTItNC41NiwyMi44OCwyMi44OCwwLDAsMSwxLjcyLDMuNDhDMzEsMjYuMzksMzEsMjguODEsMjkuNzksMzBaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjQuMjMsMTEuNzFhMzkuMTQsMzkuMTQsMCwwLDAtNC41Ny0zLjkyLDIyLjg2LDIyLjg2LDAsMCwxLDMuNDgtMS43MmMuMzItLjEyLjYyLS4yMS45Mi0uM2EyLjI4LDIuMjgsMCwwLDAsMy44MS0uNDYsMy4zMSwz''@;'; put 'put ''LjMxLDAsMCwxLDEuOTIuODRjMS4xOSwxLjE5LDEuMjIsMy41OS4xLDYuNTguNDkuNjUuOTQsMS4zMSwxLjM1LDIsLjE3LS40LjM1LS43OS40OS0xLjE4LDEuNDctMy44NSwxLjI4LTctLjUzLTguNzhhNS4yOSw1LjI5LDAsMCwwLTMuMzMtMS40NCwyLjI5LDIuMjksMCwwLDAtNC4zMS41NGMt''@;'; put 'put ''LjM3LjExLS43NC4yMi0xLjEzLjM3YTI1Ljc5LDI1Ljc5LDAsMCwwLTQuNTcsMi4zNUEyNi4yMSwyNi4yMSwwLDAsMCwxMy4yOCw0LjJjLTMuODUtMS40Ni03LTEuMjgtOC43Ny41M0MyLjg1LDYuNCwyLjU4LDkuMTcsMy42OCwxMi41OWEyLjI4LDIuMjgsMCwwLDAsMS41OSwzLjY3Yy4zMi42''@;'; put 'put ''MS42NywxLjIyLDEuMDYsMS44MkEyNS41NCwyNS41NCwwLDAsMCw0LDIyLjY2Yy0xLjQ3LDMuODQtMS4yOCw3LC41Myw4Ljc3YTUuNjMsNS42MywwLDAsMCw0LjEyLDEuNTEsMTMuMzQsMTMuMzQsMCwwLDAsNC42NS0xLDI2LjIxLDI2LjIxLDAsMCwwLDQuNTgtMi4zNUEyNS43OSwyNS43OSww''@;'; put 'put ''LDAsMCwyMi40MywzMmExNC4xNiwxNC4xNiwwLDAsMCwzLjY1LjlBMi4zLDIuMywwLDAsMCwzMC40NiwzMmE0LjU1LDQuNTUsMCwwLDAsLjc0LS41N2MxLjgxLTEuODEsMi00LjkzLjUzLTguNzdBMzIuNjgsMzIuNjgsMCwwLDAsMjQuMjMsMTEuNzFaTTEyLjU3LDMwLjA5Yy0zLDEuMTUtNS40''@;'; put 'put ''NSwxLjEzLTYuNjUtLjA4cy0xLjIzLTMuNjItLjA3LTYuNjRhMjIuNzcsMjIuNzcsMCwwLDEsMS43MS0zLjQ4LDQwLjE5LDQwLjE5LDAsMCwwLDMuOTIsNC41NmMuNDMuNDMuODcuODUsMS4zMSwxLjI1cS45LS40NiwxLjgzLTEuMDVjLS41OC0uNTItMS4xNi0xLTEuNzItMS42MWEzNCwzNCww''@;'; put 'put ''LDAsMS01Ljc0LTcuNDdBMi4yOSwyLjI5LDAsMCwwLDUuNSwxMS42OWgwYy0uNzUtMi41LS42Mi00LjQ5LjQzLTUuNTRhMy43MiwzLjcyLDAsMCwxLDIuNzItLjkyLDExLjQsMTEuNCwwLDAsMSwzLjkzLjg0LDIyLjg2LDIyLjg2LDAsMCwxLDMuNDgsMS43MiwzOS4xNCwzOS4xNCwwLDAsMC00''@;'; put 'put ''LjU3LDMuOTJjLS40NC40NC0uODcuOS0xLjI5LDEuMzZhMjAuMjcsMjAuMjcsMCwwLDAsMSwxLjg1Yy41NC0uNjEsMS4wOS0xLjIxLDEuNjgtMS44YTM2LjMzLDM2LjMzLDAsMCwxLDUtNC4xNywzNi44OCwzNi44OCwwLDAsMSw0Ljk1LDQuMTcsMzYuMjYsMzYuMjYsMCwwLDEsNC4xNyw1LDM3''@;'; put 'put ''LDM3LDAsMCwxLTQuMTcsNUEzMC42OCwzMC42OCwwLDAsMSwxMi41NywzMC4wOVpNMjkuNzksMzBsLS4xNi4xM2EyLjI3LDIuMjcsMCwwLDAtMy41LjcyLDEyLjU3LDEyLjU3LDAsMCwxLTMtLjc3LDIyLDIyLDAsMCwxLTMuNDgtMS43MiwzOS4xNCwzOS4xNCwwLDAsMCw0LjU3LTMuOTIsMzgu''@;'; put 'put ''MjYsMzguMjYsMCwwLDAsMy45Mi00LjU2LDIyLjg4LDIyLjg4LDAsMCwxLDEuNzIsMy40OEMzMSwyNi4zOSwzMSwyOC44MSwyOS43OSwzMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTcuOTkiIGN5PSIxOC4wNyIgcj0iMy4zIiB0cmFu''@;'; put 'put ''c2Zvcm09InRyYW5zbGF0ZSgtMi42NiAzLjExKSByb3RhdGUoLTkuMjIpIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGIuQ2xyU2hhcGVCYXJDb2RlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LDdBMSwxLDAsMCwwLDQsOFYzMGExLDEsMCwwLDAs''@;'; put 'put ''MiwwVjhBMSwxLDAsMCwwLDUsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik05LDdBMSwxLDAsMCwwLDgsOFYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDksN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0yIiAvPjxwYXRoIGQ9Ik0xMyw3YTEsMSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwxMyw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE3LDdhMSwxLDAsMCwwLTEsMVYyNmExLDEsMCwwLDAsMiww''@;'; put 'put ''VjhBMSwxLDAsMCwwLDE3LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjEsN2ExLDEsMCwwLDAtMSwxVjI2YTEsMSwwLDAsMCwyLDBWOEExLDEsMCwwLDAsMjEsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC01IiAvPjxwYXRoIGQ9Ik0yNSw3YTEsMSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwyNSw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI5LDdhMSwxLDAsMCwwLTEsMVYyNmExLDEsMCwwLDAsMiww''@;'; put 'put ''VjhBMSwxLDAsMCwwLDI5LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz48cGF0aCBkPSJNMzMsN2ExLDEsMCwwLDAtMSwxVjMwYTEsMSwwLDAsMCwyLDBWOEExLDEsMCwwLDAsMzMsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC04IiAvPicpLGIuQ2xyU2hhcGVDZER2ZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIyLjMzLDE4YTQuNDYsNC40NiwwLDEsMC00LjQ1LDQuNDZBNC40Niw0LjQ2LDAsMCwwLDIyLjMzLDE4Wk0xNy44OCwyMC45QTIuODYsMi44NiwwLDEsMSwyMC43MywxOCwyLjg2LDIuODYsMCwwLDEsMTcuODgsMjAuOVoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNy44OCw3LjQzSDE4VjUuODRoLS4xMkExMi4yMSwxMi4yMSwwLDAsMCw1LjY4LDE3Ljc1aDEuNkExMC42MSwxMC42MSwwLDAsMSwxNy44OCw3LjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMwLjA4LDE4SDI4LjQ5djBBMTAuNjEsMTAuNjEsMCwwLDEsMTguMjUsMjguNjN2MS42QTEyLjIyLDEyLjIyLDAsMCwwLDMwLjA5LDE4UzMwLjA4LDE4LDMwLjA4LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQi''@;'; put 'put ''IC8+PHBhdGggZD0iTTE4LDExVjkuNDRoLS4xMmE4LjYyLDguNjIsMCwwLDAtOC42LDguMzJoMS42YTcsNywwLDAsMSw3LTYuNzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTguMjUsMjV2MS42QTguNjEsOC42MSwwLDAsMCwyNi40''@;'; put 'put ''OCwxOHYwaC0xLjZ2MEE3LDcsMCwwLDEsMTguMjUsMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNMTguMTcsMS45MmExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOC4xNywxLjkyWk0yNi4yMywxOGgxLjU0YTkuNjEsOS42''@;'; put 'put ''MSwwLDAsMS05LjYsOS41M0gxOFYyNmguMTdBOC4wNyw4LjA3LDAsMCwwLDI2LjIzLDE4Wk02LjA1LDE4SDQuNDV2LS4wOEExMy43MiwxMy43MiwwLDAsMSwxOCw0LjIxdjEuNkExMi4xMywxMi4xMywwLDAsMCw2LjA1LDE3LjkyWm00LjA1LDBIOC41NnYtLjA4QTkuNjEsOS42MSwwLDAsMSwx''@;'; put 'put ''OCw4LjMyVjkuODZhOC4wNyw4LjA3LDAsMCwwLTcuOSw4LjA2Wm00LjMyLS4wOGEzLjc1LDMuNzUsMCwxLDEsMy43NSwzLjc1QTMuNzUsMy43NSwwLDAsMSwxNC40MiwxNy45MlptMy43NSwxMy43MUgxOFYzMGguMTdBMTIuMTMsMTIuMTMsMCwwLDAsMzAuMjgsMThoMS42QTEzLjczLDEzLjcz''@;'; put 'put ''LDAsMCwxLDE4LjE3LDMxLjYzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlQ29udGFpbmVyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiwzMEg0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDMyYTIsMiwwLDAsMSwy''@;'; put 'put ''LDJWMjhBMiwyLDAsMCwxLDMyLDMwWk00LDhWMjhIMzJWOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik05LDI1LjNhLjguOCwwLDAsMS0uOC0uOHYtMTNhLjguOCwwLDAsMSwxLjYsMHYxM0EuOC44LDAsMCwxLDksMjUuM1oiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNC45MiwyNS4zYS44LjgsMCwwLDEtLjgtLjh2LTEzYS44LjgsMCwwLDEsMS42LDB2MTNBLjguOCwwLDAsMSwxNC45MiwyNS4zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTMiIC8+PHBhdGggZD0iTTIxLDI1LjNhLjguOCwwLDAsMS0uOC0uOHYtMTNhLjguOCwwLDAsMSwxLjYsMHYxM0EuOC44LDAsMCwxLDIxLDI1LjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjcsMjUuM2EuOC44LDAsMCwxLS44LS44''@;'; put 'put ''di0xM2EuOC44LDAsMCwxLDEuNiwwdjEzQS44LjgsMCwwLDEsMjcsMjUuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCww''@;'; put 'put ''LDAsMzIsNlpNOS42MywyNC4yM2EuNzkuNzksMCwwLDEtLjgxLjc3QS43OS43OSwwLDAsMSw4LDI0LjIzVjExLjc3QS43OS43OSwwLDAsMSw4LjgyLDExYS43OS43OSwwLDAsMSwuODEuNzdabTYsMGEuNzkuNzksMCwwLDEtLjgyLjc3Ljc5Ljc5LDAsMCwxLS44MS0uNzdWMTEuNzdhLjc5Ljc5''@;'; put 'put ''LDAsMCwxLC44MS0uNzcuNzkuNzksMCwwLDEsLjgyLjc3Wm02LjIxLDBhLjc5Ljc5LDAsMCwxLS44Mi43Ny43OS43OSwwLDAsMS0uODEtLjc3VjExLjc3YS43OS43OSwwLDAsMSwuODEtLjc3Ljc5Ljc5LDAsMCwxLC44Mi43N1ptNi4xMiwwYS43OS43OSwwLDAsMS0uODIuNzcuNzkuNzksMCww''@;'; put 'put ''LDEtLjgxLS43N1YxMS43N2EuNzkuNzksMCwwLDEsLjgxLS43Ny43OS43OSwwLDAsMSwuODIuNzdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVDb250YWluZXJWb2x1bWU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTgsMTcuNThh''@;'; put 'put ''MzIuMzUsMzIuMzUsMCwwLDAsNi4zLjkyLDQuMTMsNC4xMywwLDAsMSwuOTItMS4zNywzMC45NCwzMC45NCwwLDAsMS03LjIyLTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNiwyOFY4LjE5Yy4zNC0uNzYsNC4zMS0yLjExLDExLTIu''@;'; put 'put ''MTFzMTAuNjcsMS4zNSwxMSwydi4zYy0uODIuNzktNC41OCwyLjA1LTExLjExLDIuMDVBMzMuNDgsMzMuNDgsMCwwLDEsOCw5LjQ0djEuNDRhMzUuNiwzNS42LDAsMCwwLDguODksMWM0LjI5LDAsOC44LS41OCwxMS4xMS0xLjgydjUuMDdhNS4zLDUuMywwLDAsMS0xLjgxLjg4SDMwVjguMTJj''@;'; put 'put ''MC0zLjE5LTguMTctNC0xMy00cy0xMywuODUtMTMsNFYyOEM0LDMwLjYzLDkuMzksMzEuNjgsMTQsMzJWMzBDOS4xMywyOS42Niw2LjI4LDI4LjYyLDYsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNOCwyNC4yOGEzMS4zLDMxLjMs''@;'; put 'put ''MCwwLDAsNiwuODl2LTEuNGEyOC45MywyOC45MywwLDAsMS02LS45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMiwxOEgxOGEyLDIsMCwwLDAtMiwyVjMyYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMEEyLDIsMCww''@;'; put 'put ''LDAsMzIsMThaTTE4LDMyVjIwSDMyVjMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTIxLDIxLjdhLjcuNywwLDAsMC0uNy43djcuNDlhLjcuNywwLDAsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjEsMjEuN1oiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0yNSwyMS44MmEuNy43LDAsMCwwLS43LjdWMzBhLjcuNywwLDEsMCwxLjQsMFYyMi41MkEuNy43LDAsMCwwLDI1LDIxLjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBh''@;'; put 'put ''dGggZD0iTTI5LDIxLjdhLjcuNywwLDAsMC0uNy43djcuNDlhLjcuNywwLDEsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjksMjEuN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPjxwYXRoIGQ9Ik0zMiwxOEgxOGEyLDIsMCwwLDAtMiwyVjMyYTIsMiww''@;'; put 'put ''LDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMEEyLDIsMCwwLDAsMzIsMThaTTE4LDMyVjIwSDMyVjMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMjEsMjEuN2EuNy43LDAsMCwwLS43Ljd2Ny40OWEuNy43LDAsMCwwLDEuNCwwVjIyLjRB''@;'; put 'put ''LjcuNywwLDAsMCwyMSwyMS43WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMjUsMjEuODJhLjcuNywwLDAsMC0uNy43VjMwYS43LjcsMCwxLDAsMS40LDBWMjIuNTJBLjcuNywwLDAsMCwyNSwyMS44MloiIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTI5LDIxLjdhLjcuNywwLDAsMC0uNy43djcuNDlhLjcuNywwLDEsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjksMjEuN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBhdGggZD0iTTE4LDE2SDI4Vjgu''@;'; put 'put ''MTJjMC0xLjY4LTUuMzgtMy0xMi0zUzQsNi40NCw0LDguMTJWMjhjMCwxLjUsNC4zMywyLjc1LDEwLDNWMjUuMjJhMjkuMTcsMjkuMTcsMCwwLDEtOC0xLjI5VjIyLjQ0bC4yNC4xQTI2LjYzLDI2LjYzLDAsMCwwLDE0LDIzLjgyVjIwYTQsNCwwLDAsMSwuMjktMS40N0EyOS4xOSwyOS4xOSww''@;'; put 'put ''LDAsMSw2LDE3LjIzVjE1Ljc1bC4yNC4wOWEyOSwyOSwwLDAsMCw5LDEuMzJoMEE0LDQsMCwwLDEsMTgsMTZaTTYsMTAuNTRWOS4wNWwuMjQuMDlBMzAuMTIsMzAuMTIsMCwwLDAsMTYsMTAuNDcsMjguMzMsMjguMzMsMCwwLDAsMjYsOS4wNXYxLjVhMzIuNTMsMzIuNTMsMCwwLDEtMTAsMS4z''@;'; put 'put ''MkEzMi40NCwzMi40NCwwLDAsMSw2LDEwLjU0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz4nKSxiLkNsclNoYXBlRmlsZVNoYXJlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEy''@;'; put 'put ''LDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMzAsOVptMCwyMEg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMS45MSwyMi40OGEyLjA2LDIuMDYsMCwwLDAtMS40NC42MmwtNS43Mi0yLjY2VjIwbDUuNjYtMi42NWEyLjA4LDIuMDgsMCwxLDAsLjA2LTIuOTQsMi4xMiwyLjEyLDAsMCwwLS42NCwxLjQ4di4yM2wtNS42NCwyLjY2YTIuMDgsMi4wOCwwLDEs''@;'; put 'put ''MC0uMDgsMi45NWwuMDgtLjA4LDUuNjcsMi42NnYuM2EyLjA5LDIuMDksMCwxLDAsMi4wOC0yLjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCww''@;'; put 'put ''LDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlaTTYsN2g2LjQ5bDIuNzIsNEg2Wk0yMS45NCwyNi42NGEyLjA5LDIuMDksMCwwLDEtMi4xMS0yLjA2bDAtLjMtNS42Ny0yLjY2LS4wOC4wOGEyLjA4LDIuMDgsMCwxLDEsLjA4LTIuOTVsNS42''@;'; put 'put ''NC0yLjY2di0uMjNhMi4wOCwyLjA4LDAsMSwxLC41OCwxLjQ2TDE0Ljc1LDIwdi40N2w1LjcyLDIuNjZhMi4wNywyLjA3LDAsMSwxLDEuNDcsMy41NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZVFyQ29kZT0oMCxwLmNsckljb25TVkcp''@;'; put 'put ''KCc8cGF0aCBkPSJNNS42LDRBMS42LDEuNiwwLDAsMCw0LDUuNlYxMmg4VjRaTTEwLDEwSDZWNmg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTQsMzAuNEExLjYsMS42LDAsMCwwLDUuNiwzMkgxMlYyNEg0Wk02LDI2aDR2NEg2WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI0LDMyaDYuNEExLjYsMS42LDAsMCwwLDMyLDMwLjRWMjRIMjRabTItNmg0djRIMjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzAu''@;'; put 'put ''NCw0SDI0djhoOFY1LjZBMS42LDEuNiwwLDAsMCwzMC40LDRaTTMwLDEwSDI2VjZoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwb2x5Z29uIHBvaW50cz0iMjAgMTAgMjAgOCAxNiA4IDE2IDEyIDE4IDEyIDE4IDEwIDIwIDEwIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cmVjdCB4PSIxMiIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxyZWN0IHg9IjE0IiB5PSIxNCIgd2lkdGg9IjQiIGhlaWdodD0iMiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+PHBvbHlnb24gcG9pbnRzPSIyMCA2IDIwIDggMjIgOCAyMiA0IDE0IDQgMTQgOCAxNiA4IDE2IDYgMjAgNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+PHJlY3QgeD0iNCIgeT0i''@;'; put 'put ''MTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiAvPjxwb2x5Z29uIHBvaW50cz0iMTIgMTYgMTIgMTggMTAgMTggMTAgMTQgOCAxNCA4IDE4IDYgMTggNiAyMCA0IDIwIDQgMjIgOCAyMiA4IDIwIDEwIDIwIDEwIDIyIDEy''@;'; put 'put ''IDIyIDEyIDIwIDE0IDIwIDE0IDE2IDEyIDE2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiIC8+PHBvbHlnb24gcG9pbnRzPSIyMCAxNiAyMiAxNiAyMiAxOCAyNCAxOCAyNCAxNiAyNiAxNiAyNiAxNCAyMiAxNCAyMiAxMCAyMCAxMCAyMCAxMiAxOCAxMiAx''@;'; put 'put ''OCAxNCAyMCAxNCAyMCAxNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIiAvPjxwb2x5Z29uIHBvaW50cz0iMTggMzAgMTQgMzAgMTQgMzIgMjIgMzIgMjIgMzAgMjAgMzAgMjAgMjggMTggMjggMTggMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xMiIgLz48cG9seWdvbiBwb2ludHM9IjIyIDIwIDIyIDE4IDIwIDE4IDIwIDE2IDE4IDE2IDE4IDE4IDE2IDE4IDE2IDIwIDE4IDIwIDE4IDIyIDIwIDIyIDIwIDIwIDIyIDIwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiIC8+PHJlY3Qg''@;'; put 'put ''eD0iMzAiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiIC8+PHJlY3QgeD0iMjIiIHk9IjIwIiB3aWR0aD0iNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTUi''@;'; put 'put ''IC8+PHBvbHlnb24gcG9pbnRzPSIzMCAxNCAyOCAxNCAyOCAxNiAyNiAxNiAyNiAxOCAyOCAxOCAyOCAyMCAzMCAyMCAzMCAxOCAzMiAxOCAzMiAxNiAzMCAxNiAzMCAxNCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE2IiAvPjxyZWN0IHg9IjIwIiB5PSIyMiIg''@;'; put 'put ''d2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE3IiAvPjxwb2x5Z29uIHBvaW50cz0iMTQgMjggMTYgMjggMTYgMjYgMTggMjYgMTggMjQgMTYgMjQgMTYgMjAgMTQgMjAgMTQgMjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xOCIgLz4nKSxiLkNsclNoYXBlVXNiPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC4yOSwxMS40YTEuNDksMS40OSwwLDAsMSwxLjI4LS43MmgxYTIuODksMi44OSwwLDAsMCwyLjc1LDIuMDksMywzLDAsMCwwLDAtNS45MSwyLjksMi45LDAsMCwwLTIuNjcs''@;'; put 'put ''MS44MkgxNS41N2EzLjQ5LDMuNDksMCwwLDAtMywxLjY2bC0zLDQuODNoMi4zNlptNS0yLjk0QTEuMzYsMS4zNiwwLDEsMSwxOCw5LjgxLDEuMzIsMS4zMiwwLDAsMSwxOS4zMyw4LjQ2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTM0''@;'; put 'put ''LjMsMTcuMzdsLTYuMTEtMy42NmEuNy43LDAsMCwwLS43LDAsLjcxLjcxLDAsMCwwLS4zNi42MVYxN0g2LjkyYTIuMzMsMi4zMywwLDAsMSwuMzIsMS4xNywyLjQ3LDIuNDcsMCwxLDEtMi40Ny0yLjQ2LDIuMzcsMi4zNywwLDAsMSwxLjE1LjNsLjkzLTEuNzZBNC40NCw0LjQ0LDAsMSwwLDku''@;'; put 'put ''MTUsMTloMy41OGw0LjE3LDYuNjVhMy40OSwzLjQ5LDAsMCwwLDMsMS42NmgxLjY2djEuMjhhLjc5Ljc5LDAsMCwwLC44Ljc5aDQuNDlhLjc5Ljc5LDAsMCwwLC44LS43OXYtNC40YS43OS43OSwwLDAsMC0uOC0uOEgyMi4zNGEuOC44LDAsMCwwLS44Ljh2MS4xMkgxOS44OGExLjUxLDEuNTEs''@;'; put 'put ''MCwwLDEtMS4yOC0uNzJMMTUuMDksMTloMTJ2Mi42NmEuNjkuNjksMCwwLDAsLjM2LjYxLjY3LjY3LDAsMCwwLC4zNC4wOS42NS42NSwwLDAsMCwuMzYtLjFsNi4xMS0zLjY2YS42OS42OSwwLDAsMCwuMzQtLjZBLjcxLjcxLDAsMCwwLDM0LjMsMTcuMzdaTTIzLjE0LDI1SDI2djIuOEgyMy4x''@;'; put 'put ''NFptNS4zOS00LjU2VjE1LjU1bDQsMi40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zNC43MiwxNy4zN2wtNS41MS0zLjMxYS43MS43MSwwLDAsMC0xLjA3LjZWMTdIMTEuNzdsMy41Mi01LjZhMS40OSwxLjQ5LDAsMCwxLDEuMjgt''@;'; put 'put ''LjcyaDEuNjRhMi40MSwyLjQxLDAsMCwwLDIuMjUsMS42MSwyLjQ4LDIuNDgsMCwwLDAsMC00Ljk1LDIuMzgsMi4zOCwwLDAsMC0yLjEzLDEuMzRIMTYuNTdhMy40OSwzLjQ5LDAsMCwwLTMsMS42Nkw5LjQxLDE3SDhhMy40NiwzLjQ2LDAsMSwwLC4wOCwyaDUuNjRsNC4xNSw2LjYyYTMuNDks''@;'; put 'put ''My40OSwwLDAsMCwzLDEuNjZoMi41OXYuOTJoNC40VjIzLjhoLTQuNHYxLjQ4SDIwLjg4YTEuNTEsMS41MSwwLDAsMS0xLjI4LS43MkwxNi4xMSwxOWgxMnYyLjI4YS43LjcsMCwwLDAsLjM2LjYxLjcyLjcyLDAsMCwwLC4zNC4wOS42NS42NSwwLDAsMCwuMzYtLjFsNS41Mi0zLjMxYS43Ljcs''@;'; put 'put ''MCwwLDAsMC0xLjJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVSYWRhcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsMThjMCw3LjctNi4zLDE0LTE0LDE0Yy03LjcsMC0xNC02LjMtMTQtMTRDNCwxMC42LDkuNyw0LjUsMTcu''@;'; put 'put ''MSw0djMuN2MtNS43LDAuNS05LjksNS41LTkuNCwxMS4yczUuNSw5LjksMTEuMiw5LjRcblx0YzUuMy0wLjUsOS40LTQuOSw5LjQtMTAuM2gtMmMwLDQuNi0zLjcsOC4zLTguMyw4LjNzLTguMy0zLjctOC4zLTguM2MwLTQuMiwzLjEtNy44LDcuMy04LjN2NC40Yy0xLjgsMC40LTMuMSwyLTMu''@;'; put 'put ''MSwzLjlcblx0YzAsMi4yLDEuOCw0LDQsNHM0LTEuOCw0LTRjMC0xLjgtMS4zLTMuNC0zLTMuOFYyLjFDMTguNiwyLDE4LjMsMiwxOCwyQzkuMiwyLDIsOS4yLDIsMThzNy4yLDE2LDE2LDE2czE2LTcuMiwxNi0xNkgzMnogTTIwLDE4XG5cdGMwLDEuMS0wLjksMi0yLDJzLTItMC45LTItMnMw''@;'; put 'put ''LjktMiwyLTJTMjAsMTYuOSwyMCwxOHoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMiwxOGMwLDcuNy02LjIsMTQtMTQsMTRTNCwyNS44LDQsMThjMC03LjQsNS43LTEzLjUsMTMuMS0xNHYzLjdjLTUuNywwLjUtOS44LDUuNS05LjMs''@;'; put 'put ''MTEuMnM1LjUsOS44LDExLjIsOS4zXG5cdFx0YzUuMy0wLjUsOS4zLTQuOSw5LjMtMTAuMmgtMmMwLDQuNi0zLjcsOC4zLTguMyw4LjNTOS43LDIyLjYsOS43LDE4YzAtNC4yLDMuMi03LjgsNy4zLTguMnY0LjRjLTIuMSwwLjYtMy40LDIuNy0yLjksNC45XG5cdFx0YzAuNiwyLjEsMi43LDMu''@;'; put 'put ''NCw0LjksMi45YzIuMS0wLjYsMy40LTIuNywyLjktNC45Yy0wLjQtMS40LTEuNS0yLjUtMi45LTIuOVYyYy0wLjQsMC0wLjcsMC0xLjEsMGMtOC44LDAtMTYsNy4yLTE2LDE2XG5cdFx0YzAsOC44LDcuMiwxNiwxNiwxNnMxNi03LjIsMTYtMTZjMCwwLDAsMCwwLDBIMzJ6IiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVJbmR1Y3Rvcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuMzEsMjUuODFjLTEuNzUsMC0zLTIuNDktMy02YTEyLjc5LDEyLjc5LDAsMCwxLDEuNzItNi43LDIuNTcsMi41NywwLDAsMC0zLjc5LDBBMTIu''@;'; put 'put ''NzksMTIuNzksMCwwLDEsMjEsMTkuNzZjMCwzLjU2LTEuMjMsNi0zLDZzLTMtMi40OS0zLTZhMTIuNzksMTIuNzksMCwwLDEsMS43Mi02LjcsMi41NywyLjU3LDAsMCwwLTMuNzksMCwxMi43OSwxMi43OSwwLDAsMSwxLjcyLDYuN2MwLDMuNTYtMS4yMyw2LTMsNnMtMy0yLjQ5LTMtNmExMi44''@;'; put 'put ''OCwxMi44OCwwLDAsMSwxLjcxLTYuNywyLjcsMi43LDAsMCwwLTEuODktLjg3QzcuMSwxMi4xOSw1LjY5LDEzLjcsNSwxNmwtLjIzLjdIMmExLDEsMCwwLDEsMC0ySDMuMjljMS4xLTIuODMsMy4wNi00LjU1LDUuMjQtNC41NWE0LjY3LDQuNjcsMCwwLDEsMy4xNiwxLjMyLDQuNjIsNC42Miww''@;'; put 'put ''LDAsMSwzLjE1LTEuMzJBNC42NSw0LjY1LDAsMCwxLDE4LDExLjUxYTQuNDMsNC40MywwLDAsMSw2LjMxLDAsNC42Nyw0LjY3LDAsMCwxLDMuMTYtMS4zMmMyLjE4LDAsNC4xNCwxLjcyLDUuMjQsNC41NUgzNGExLDEsMCwwLDEsMCwySDMxLjI4bC0uMjMtLjdjLS43NC0yLjM0LTIuMTUtMy44''@;'; put 'put ''NS0zLjU4LTMuODVhMi43LDIuNywwLDAsMC0xLjg5Ljg3LDEyLjg4LDEyLjg4LDAsMCwxLDEuNzEsNi43QzI3LjI5LDIzLjMyLDI2LjA3LDI1LjgxLDI0LjMxLDI1LjgxWk0xOCwxNC45M2ExMS43MSwxMS43MSwwLDAsMC0xLDQuODNjMCwyLjU0LjY2LDMuNzUsMSw0LC4zMi0uMjcsMS0xLjQ4''@;'; put 'put ''LDEtNEExMS43MSwxMS43MSwwLDAsMCwxOCwxNC45M1ptNi4zMSwwYTExLjcxLDExLjcxLDAsMCwwLTEsNC44M2MwLDIuNTQuNjYsMy43NSwxLDQsLjMyLS4yNywxLTEuNDgsMS00QTExLjcxLDExLjcxLDAsMCwwLDI0LjMxLDE0LjkzWm0tMTIuNjIsMGExMS43MSwxMS43MSwwLDAsMC0xLDQu''@;'; put 'put ''ODNjMCwyLjU0LjY2LDMuNzUsMSw0LC4zMi0uMjcsMS0xLjQ4LDEtNEExMS43MSwxMS43MSwwLDAsMCwxMS42OSwxNC45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVSZXNpc3Rvcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBk''@;'; put 'put ''PSJNMjkuNDMsMjYuMzRoMEExLjQ3LDEuNDcsMCwwLDEsMjgsMjUuMjJMMjQuODYsMTMuMTUsMjEuNzQsMjUuMjJhMS40OSwxLjQ5LDAsMCwxLTEuNDUsMS4xMmgwYTEuNDksMS40OSwwLDAsMS0xLjQ2LTEuMTJMMTUuNzEsMTMuMTUsMTIuNiwyNS4yMmExLjUxLDEuNTEsMCwwLDEtMi45MSww''@;'; put 'put ''TDYuNTcsMTMuMTUsNS4yMiwxOC4zN0gyYTEsMSwwLDAsMSwwLTJIMy42N2wxLjQ1LTUuNTlBMS40OCwxLjQ4LDAsMCwxLDYuNTcsOS42NmgwQTEuNDcsMS40NywwLDAsMSw4LDEwLjc4bDMuMTIsMTIuMDcsMy4xMi0xMi4wN2ExLjQ5LDEuNDksMCwwLDEsMS40NS0xLjEyaDBhMS40OSwxLjQ5''@;'; put 'put ''LDAsMCwxLDEuNDYsMS4xMmwzLjEyLDEyLjA3LDMuMTItMTIuMDdhMS41LDEuNSwwLDAsMSwyLjksMGwzLjEyLDEyLjA3LDEuMzUtNS4yMkgzNGExLDEsMCwwLDEsMCwySDMyLjMzbC0xLjQ1LDUuNTlBMS40OCwxLjQ4LDAsMCwxLDI5LjQzLDI2LjM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZUNhcGFjaXRvcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUsMzQuMDZhMSwxLDAsMCwxLTEtMVYzLjE1YTEsMSwwLDEsMSwyLDBWMzMuMDZBMSwxLDAsMCwxLDE1LDM0LjA2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIxLDM0LjA2YTEsMSwwLDAsMS0xLTFWMy4xNWExLDEsMCwxLDEsMiwwVjMzLjA2QTEsMSwwLDAsMSwyMSwzNC4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNC40Niwx''@;'; put 'put ''OUgzYTEsMSwwLDAsMSwwLTJIMTQuNDZhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMywxOUgyMS41NGExLDEsMCwwLDEsMC0ySDMzYTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxiLkNsclNoYXBlU3F1aWQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDdhMSwxLDAsMCwxLTEtMVYzLjE5YTEsMSwwLDAsMSwyLDBWNkExLDEsMCwwLDEsMTgsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''IiAvPjxwYXRoIGQ9Ik0xOCwzNGExLDEsMCwwLDEtMS0xVjMwYTEsMSwwLDAsMSwyLDB2M0ExLDEsMCwwLDEsMTgsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNNy40MSwxOGwxLjc4LTEuNzdhMSwxLDAsMSwwLTEuNDItMS40Mkw2''@;'; put 'put ''LDE2LjU5LDQuMjMsMTQuODFhMSwxLDAsMSwwLTEuNDIsMS40Mkw0LjU5LDE4LDIuODEsMTkuNzdhMSwxLDAsMCwwLDAsMS40MiwxLDEsMCwwLDAsLjcxLjI5LDEsMSwwLDAsMCwuNzEtLjI5TDYsMTkuNDFsMS43NywxLjc4YTEsMSwwLDAsMCwxLjQyLDAsMSwxLDAsMCwwLDAtMS40MloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik02LDEzLjc2bC4zNi0uMzZhMywzLDAsMCwxLDIuMTEtLjg4LDExLDExLDAsMCwxLDE5LDAsMywzLDAsMCwxLDIuMTIuODhsLjM2LjM2LjItLjJhMTMsMTMsMCwwLDAtMjQuNCwwWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMwLDIyLjI0bC0uMzYuMzZhMywzLDAsMCwxLTIuMTIuODgsMTEsMTEsMCwwLDEtMTksMCwzLDMsMCwwLDEtMi4xMi0uODhMNiwyMi4yNGwtLjIuMmExMywxMywwLDAsMCwyNC40LDBaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzEuNDEsMThsMS43OC0xLjc3YTEsMSwwLDAsMC0xLjQyLTEuNDJMMzAsMTYuNTlsLTEuNzctMS43OGExLDEsMCwxLDAtMS40MiwxLjQyTDI4LjU5LDE4bC0xLjc4LDEuNzdhMSwxLDAsMCwwLDAsMS40MiwxLDEsMCww''@;'; put 'put ''LDAsLjcxLjI5LDEsMSwwLDAsMCwuNzEtLjI5TDMwLDE5LjQxbDEuNzcsMS43OGExLDEsMCwwLDAsMS40MiwwLDEsMSwwLDAsMCwwLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxiLkNsclNoYXBlSG9zdEdyb3VwPSgwLHAuY2xySWNvblNW''@;'; put 'put ''RykoJzxwYXRoIGQ9Ik0yMS4wOCwzNGgtMTRBMS4wOCwxLjA4LDAsMCwxLDYsMzNWMTJhMS4wOCwxLjA4LDAsMCwxLDEuMDgtMS4wOGgxNEExLjA4LDEuMDgsMCwwLDEsMjIuMTYsMTJWMzNBMS4wOCwxLjA4LDAsMCwxLDIxLjA4LDM0Wk04LjE2LDMxLjg4SDIwVjEzSDguMTZaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxyZWN0IHg9IjEwLjA4IiB5PSIxNC45NiIgd2lkdGg9IjgiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI2LjEsMjcuODFoLTJWOWgtMTJWN2gx''@;'; put 'put ''M2ExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG48cGF0aCBkPSJNMzAuMDgsMjNoLTJWNWgtMTFWM2gxMmExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHJlY3Qg''@;'; put 'put ''eD0iMTMuMDgiIHk9IjI3Ljg4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyLjE2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cblxuPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE1LjA4LDMxIEwxLjA4LDMxIEMwLjUx''@;'; put 'put ''MzQyNzE5NywzMS4wMDE1NTY0IDAuMDQxOTY2Mzc2NSwzMC41NjUwMTg2IDAsMzAgTDAsOSBDMCw4LjQwMzUzMjQ3IDAuNDgzNTMyNDcsNy45MiAxLjA4LDcuOTIgTDE1LjA4LDcuOTIgQzE1LjY3NjQ2NzUsNy45MiAxNi4xNiw4LjQwMzUzMjQ3IDE2LjE2LDkgTDE2LjE2LDMwIEMxNi4xMTgw''@;'; put 'put ''MzM2LDMwLjU2NTAxODYgMTUuNjQ2NTcyOCwzMS4wMDE1NTY0IDE1LjA4LDMxIFogTTQuMDgsMTEuOTYgTDQuMDgsMTMuOTYgTDEyLjA4LDEzLjk2IEwxMi4wOCwxMS45NiBMNC4wOCwxMS45NiBaIE03LjA4LDI0Ljg4IEw3LjA4LDI3LjA0IEw5LjA4LDI3LjA0IEw5LjA4LDI0Ljg4IEw3LjA4''@;'; put 'put ''LDI0Ljg4IFoiIC8+XG48cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjAuMSwyNC44MSBMMTguMSwyNC44MSBMMTguMSw2IEw2LjEsNiBMNi4xLDQgTDE5LjEsNCBDMTkuNjUyMjg0Nyw0IDIwLjEsNC40NDc3MTUyNSAyMC4xLDUgTDIwLjEsMjQuODEg''@;'; put 'put ''WiIgLz5cbjxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yNC4wOCwyMCBMMjIuMDgsMjAgTDIyLjA4LDIgTDExLjA4LDIgTDExLjA4LDAgTDIzLjA4LDAgQzIzLjYzMjI4NDcsMCAyNC4wOCwwLjQ0NzcxNTI1IDI0LjA4LDEgTDI0LjA4LDIwIFoiIC8+''@;'; put 'put ''JyksYi5DbHJTaGFwZVN0b3JhZ2VBZGFwdGVyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjA2LDMwYTEsMSwwLDAsMS0xLTFWOGgtMmExLDEsMCwwLDEsMC0yaDRWMjlBMSwxLDAsMCwxLDYuMDYsMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIv''@;'; put 'put ''PlxuICA8cGF0aCBkPSJNMzAuMDYsMjdoLTI1VjloMjVhMywzLDAsMCwxLDMsM1YyNEEzLDMsMCwwLDEsMzAuMDYsMjdabS0yMy0yaDIzYTEsMSwwLDAsMCwxLTFWMTJhMSwxLDAsMCwwLTEtMWgtMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8''@;'; put 'put ''cmVjdCB4PSIyMi4wNiIgeT0iMjAiIHdpZHRoPSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxyZWN0IHg9IjIyLjA2IiB5PSIxNCIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTE5LjA2LDIyaC04VjIwaDdWMTRoMnY3QTEsMSwwLDAsMSwxOS4wNiwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+JyksYi5DbHJTaGFwZU5vZGVHcm91cD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBk''@;'; put 'put ''PSJNMzMuNTMsMjEuNThsLTQuOTQtMi44M1YxMy4wOWExLDEsMCwwLDAtLjUxLS44N0wyMi42NCw5LjFhMSwxLDAsMCwwLTEsMEwxNi4yLDEyLjIyYTEsMSwwLDAsMC0uNTEuODd2NS42NmwtNC45NCwyLjgzYTEsMSwwLDAsMC0uNS44N3Y2LjI0YTEsMSwwLDAsMCwuNS44Nmw1LjQ1LDMuMTJh''@;'; put 'put ''MSwxLDAsMCwwLDEsMGw0Ljk1LTIuODMsNC45NSwyLjgzYTEsMSwwLDAsMCwuNS4xNCwxLDEsMCwwLDAsLjQ5LS4xNGw1LjQ1LTMuMTJhMSwxLDAsMCwwLC41LS44NlYyMi40NUExLDEsMCwwLDAsMzMuNTMsMjEuNThaTTIyLjE0LDExLjEybDQuNDUsMi41NVYxOWwtNC40NiwyLjU2LTQuNDQt''@;'; put 'put ''Mi42VjEzLjY3Wk0xNi42OSwzMC42NWwtNC40NC0yLjU0VjIzbDQuNjgtMi42OCw0LjQsMi41N1YyOFpNMzIsMjguMTFsLTQuNDQsMi41NEwyMi45MywyOFYyMi45M2w0LjQ2LTIuNTdMMzIsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0''@;'; put 'put ''aCBkPSJNNywyNy40M2ExLDEsMCwwLDEtMS0xVjE5LjlBMSwxLDAsMCwxLDYuNSwxOWw0Ljk1LTIuODNWMTAuNTRhMSwxLDAsMCwxLC41LS44N2w1LjIxLTNhMSwxLDAsMCwxLDEuMzcuMzcsMSwxLDAsMCwxLS4zOCwxLjM3bC00LjcsMi42OHY1LjY2YTEsMSwwLDAsMS0uNTEuODdMOCwyMC40''@;'; put 'put ''OHY1Ljk1QTEsMSwwLDAsMSw3LDI3LjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMsMjUuMDVhMSwxLDAsMCwxLTEtMVYxNy41M2ExLDEsMCwwLDEsLjUtLjg2bDUtMi44NFY4LjE3QTEsMSwwLDAsMSw4LDcuMzFsNS4yNS0z''@;'; put 'put ''YTEsMSwwLDAsMSwxLDEuNzRMOS40NSw4Ljc1djUuNjZhMSwxLDAsMCwxLS41MS44N0w0LDE4LjExdjUuOTRBMSwxLDAsMCwxLDMsMjUuMDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPicpLGIuQ2xyU2hhcGVOb2Rlcz0oMCxwLmNsckljb25TVkcpKCc8''@;'; put 'put ''cGF0aCBkPSJNMTAuNSwzNC4yOSwyLDI5LjM5VjE5LjU4bDguNS00LjksOC41LDQuOXY5LjgxWk00LDI4LjIzLDEwLjUsMzIsMTcsMjguMjNWMjAuNzRMMTAuNSwxNyw0LDIwLjc0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTI1''@;'; put 'put ''LjUsMzQuMjksMTcsMjkuMzlWMTkuNThsOC41LTQuOSw4LjUsNC45djkuODFaTTE5LDI4LjIzLDI1LjUsMzIsMzIsMjguMjNWMjAuNzRMMjUuNSwxNywxOSwyMC43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xOCwyMS4zMmwt''@;'; put 'put ''OC41LTQuOVY2LjYxTDE4LDEuNzFsOC41LDQuOXY5LjgxWm0tNi41LTYuMDZMMTgsMTlsNi41LTMuNzVWNy43N0wxOCw0LDExLjUsNy43N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+JyksYi5DbHJTaGFwZU5hbWVzcGFjZT0oMCxwLmNsckljb25TVkcp''@;'; put 'put ''KCc8cGF0aCBkPSJNMjcsNC4xOGExLDEsMCwxLDAtMSwxLjczbDYsMy40N1YyNi42MmwtNiwzLjQ3YTEsMSwwLDAsMC0uMzcsMS4zNiwxLDEsMCwwLDAsMS4zNy4zN2w3LTQuMDVWOC4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9''@;'; put 'put ''Ik05LjY4LDI5LjksNCwyNi42MlY5LjM4TDkuNjgsNi4xYTEsMSwwLDEsMC0xLTEuNzNMMiw4LjIzVjI3Ljc3bDYuNjgsMy44NmExLDEsMCwwLDAsMS4zNy0uMzdBMSwxLDAsMCwwLDkuNjgsMjkuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxw''@;'; put 'put ''YXRoIGQ9Ik0xMCwxMlYyNGEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTJWMTJhMiwyLDAsMCwwLTItMkgxMkEyLDIsMCwwLDAsMTAsMTJabTcsMHY1SDEyVjEyWm0tNSw3aDV2NUgxMlptNyw1VjE5aDV2NVptNS03SDE5VjEyaDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMyIvPicpLGIuQ2xyU2hhcGVOb2RlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwzMC42Niw3LDI0LjMzVjExLjY3TDE4LDUuMzRsMTEsNi4zM1YyNC4zM1pNOSwyMy4xOGw5LDUuMTcsOS01LjE3VjEyLjgyTDE4LDcuNjUsOSwxMi44MloiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+JyksYi5DbHJTaGFwZVBvZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYsMzJIMTBhNiw2LDAsMCwxLTYtNlYxMGE2LDYsMCwwLDEsNi02SDI2YTYsNiwwLDAsMSw2LDZWMjZBNiw2LDAsMCwxLDI2LDMyWk0xMCw2YTQsNCww''@;'; put 'put ''LDAsMC00LDRWMjZhNCw0LDAsMCwwLDQsNEgyNmE0LDQsMCwwLDAsNC00VjEwYTQsNCwwLDAsMC00LTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjYuNTYsMTVIMTUuNDRBMS40MywxLjQzLDAsMCwwLDE0LDE2LjQ0djguMTJB''@;'; put 'put ''MS40MywxLjQzLDAsMCwwLDE1LjQ0LDI2SDI2LjU2QTEuNDMsMS40MywwLDAsMCwyOCwyNC41NlYxNi40NEExLjQzLDEuNDMsMCwwLDAsMjYuNTYsMTVaTTI2LDI0SDE2VjE3SDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTEy''@;'; put 'put ''LjQsMTlIMTBWMTJIMjB2MS40aDJ2LTJBMS40MywxLjQzLDAsMCwwLDIwLjU2LDEwSDkuNDRBMS40MywxLjQzLDAsMCwwLDgsMTEuNDR2OC4xMkExLjQzLDEuNDMsMCwwLDAsOS40NCwyMWgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz4nKSxiLkNsckNv''@;'; put 'put ''bnRyb2xMdW49KDAscC5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik04LDI0LjU5YTI1LjUsMjUuNSwwLDAsMCwyLjc1LjU5bDEuMjEtMS40MWEyNC4xMywyNC4xMywwLDAsMS00LS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9''@;'; put 'put ''Ik02LDI3LjUzVjEwLjNjMi45LDEuNDMsOC4zNCwxLjg4LDEyLDEuODhzOS4xLS40NSwxMi0xLjg4djUuMTFjLS45MS44Mi01LDIuMTMtMTIsMi4xM0EzNC44MSwzNC44MSwwLDAsMSw4LDE2LjMzVjE4YTQwLjg2LDQwLjg2LDAsMCwwLDEwLDEuMTZjMy40NiwwLDkuMTMtLjQ1LDEyLTEuOTF2''@;'; put 'put ''My4yM2gyVjhoMHMwLDAsMC0uMDdjMC0zLjM1LTguOC00LjI1LTE0LTQuMjVTNCw0LjU4LDQsNy45M3YxOS42YzAsMiwzLjE3LDMuMTQsNi44MywzLjcyTDguMzgsMjguNjhDNywyOC4yOCw2LjEzLDI3Ljg0LDYsMjcuNTNaTTE4LDUuNjhjNy4xNSwwLDExLjUzLDEuNDQsMTIsMi4yNS0uNDYu''@;'; put 'put ''ODEtNC44NCwyLjI1LTEyLDIuMjVTNi4zMSw4LjY5LDYsOEM2LjMxLDcuMTgsMTAuNzEsNS42OCwxOCw1LjY4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMyLjA5LDIySDE1LjQ2bC01LjQxLDYuMzFMMTUuNDksMzRoMTYuNmEy''@;'; put 'put ''LDIsMCwwLDAsMi0yVjIzLjkzQTIsMiwwLDAsMCwzMi4wOSwyMlptMCwxMEgxNi4zNGwtMy41OS0zLjc3TDE2LjM4LDI0SDMyLjA5djhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEs''@;'; put 'put ''MCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuXG4gIDxwYXRoIGQ9Ik04LDI0LjU5YTI1LjUsMjUuNSwwLDAsMCwyLjc1LjU5bDEuMjEtMS40MWEyNC4xMywyNC4xMywwLDAsMS00LS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMzIuMDksMjJIMTUuNDZsLTUuNDEsNi4zMUwxNS40OSwzNGgxNi42YTIsMiwwLDAsMCwyLTJWMjMuOTNBMiwyLDAsMCwwLDMyLjA5LDIyWm0wLDEwSDE2LjM0bC0zLjU5LTMuNzdMMTYuMzgsMjRI''@;'; put 'put ''MzIuMDl2OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTE4LDE3LjU0QTM0LjgxLDM0LjgxLDAsMCwxLDgsMTYuMzNWMThhNDAuODYsNDAuODYsMCwwLDAsMTAsMS4xNmMzLjQ2LDAsOS4xMy0uNDUsMTItMS45MXYzLjIzaDJWMTMuMjJhNy4zMiw3LjMyLDAsMCwxLTIsLjI4djEuOTFD''@;'; put 'put ''MjkuMDksMTYuMjMsMjUsMTcuNTQsMTgsMTcuNTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTYsMjcuNTNWMTAuM2MyLjksMS40Myw4LjM0LDEuODgsMTIsMS44OGE0Ny42Niw0Ny42NiwwLDAsMCw3''@;'; put 'put ''LjA5LS41Miw3LjQ1LDcuNDUsMCwwLDEtMS41MS0xLjgsNDcuNCw0Ny40LDAsMCwxLTUuNTguMzJDMTAuNzEsMTAuMTgsNi4zMSw4LjY5LDYsOGMuMzItLjgsNC43Mi0yLjMsMTItMi4zLDEuNjYsMCwzLjE2LjA4LDQuNTEuMjFhNy41Niw3LjU2LDAsMCwxLC4yOS0yYy0xLjctLjE3LTMuMzgt''@;'; put 'put ''LjI0LTQuOC0uMjQtNS4yLDAtMTQsLjktMTQsNC4yNXYxOS42YzAsMiwzLjE3LDMuMTQsNi44MywzLjcyTDguMzgsMjguNjhDNywyOC4yOCw2LjEzLDI3Ljg0LDYsMjcuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiLz5cbiAg''@;'; put 'put ''PGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cblxuICA8cGF0aCBkPSJNOCwyNC41OWEyNS41LDI1LjUsMCwwLDAsMi43NS41OWwxLjIxLTEuNDFhMjQuMTMs''@;'; put 'put ''MjQuMTMsMCwwLDEtNC0uODNaIi8+PHBhdGggZD0iTTMyLjA5LDIySDE1LjQ2bC01LjQxLDYuMzFMMTUuNDksMzRoMTYuNmEyLDIsMCwwLDAsMi0yVjIzLjkzQTIsMiwwLDAsMCwzMi4wOSwyMlptMCwxMEgxNi4zNGwtMy41OS0zLjc3TDE2LjM4LDI0SDMyLjA5djhaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRl''@;'; put 'put ''ZCIvPlxuICA8cGF0aCBkPSJNNiwyNy41M1YxMC4zYzIuOSwxLjQzLDguMzQsMS44OCwxMiwxLjg4aC41OWEzLjU5LDMuNTksMCwwLDEsLjMyLTJIMThDMTAuNzEsMTAuMTgsNi4zMSw4LjY5LDYsOGMuMzItLjgsNC43Mi0yLjMsMTItMi4zLDEuMjIsMCwyLjM1LjA1LDMuNDEuMTJsMS4xLTEu''@;'; put 'put ''OTFjLTEuNi0uMTUtMy4xNy0uMjEtNC41MS0uMjEtNS4yLDAtMTQsLjktMTQsNC4yNXYxOS42YzAsMiwzLjE3LDMuMTQsNi44MywzLjcyTDguMzgsMjguNjhDNywyOC4yOCw2LjEzLDI3Ljg0LDYsMjcuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMy0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNOCwxNi4zM1YxOGE0MC44Niw0MC44NiwwLDAsMCwxMCwxLjE2YzMuNDYsMCw5LjEzLS40NSwxMi0xLjkxdjMuMjNoMlYxNS40SDMwYy0uOTEuODItNSwyLjEzLTEyLDIuMTNBMzQuODEsMzQuODEsMCwwLDEsOCwxNi4zM1oiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4y''@;'; put 'put ''OCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cblxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0zMi4wOSwyMUgzMlYxNy4zMmMtMS45LDIuOTMtMTAuNDYsMy4zLTE0LDMuM0E0Mi40Myw0Mi40MywwLDAsMSw4LDE5LjU2VjE3Ljg4QTQwLjU5LDQwLjU5LDAsMCwwLDE4LDE5YzUsMCwxMy4yLS44MiwxNC0zLjgy''@;'; put 'put ''VjEwLjcyYy0yLjIxLDMuMzYtMTAuNDksMy40Ni0xNCwzLjQ2QTQyLjEyLDQyLjEyLDAsMCwxLDgsMTMuMTFWMTFhNDAuNTksNDAuNTksMCwwLDAsMTAsMS4xNGM1LDAsMTMuMjgtLjgzLDE0LTMuODhWNy44M2gwYy0uMTktMy4yNy04Ljg0LTQuMTUtMTQtNC4xNVM0LjIxLDQuNTYsNCw3Ljgz''@;'; put 'put ''SDR2MTkuN2MwLDIuMTYsMy42NCwzLjMsNy42MywzLjg0bDIuODQsMywuNTkuNjJoMTdhMywzLDAsMCwwLDMtM1YyMy45M0EzLDMsMCwwLDAsMzIuMDksMjFaTTgsMjYuMDhWMjQuNGEyNS43OSwyNS43OSwwLDAsMCwzLjQ2LjdsLTEuMjQsMS40NEM5LjQ2LDI2LjQyLDguNzEsMjYuMjcsOCwy''@;'; put 'put ''Ni4wOFpNMzMuMDksMzJhMSwxLDAsMCwxLTEsMUgxNS45MkwxMS40LDI4LjIzLDE1LjkyLDIzSDMyLjA5YTEsMSwwLDAsMSwxLDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG5cbiAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEsMCwxLDFBMSwxLDAsMCww''@;'; put 'put ''LDE2LjExLDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTMyLjA5LDIxSDMyVjE3LjMyYy0xLjksMi45My0xMC40NiwzLjMtMTQsMy4zQTQyLjQzLDQyLjQzLDAsMCwxLDgsMTkuNTZWMTcuODhBNDAuNTks''@;'; put 'put ''NDAuNTksMCwwLDAsMTgsMTljNSwwLDEzLjItLjgyLDE0LTMuODJ2LTJhNy4zNCw3LjM0LDAsMCwxLTQuMTIsMCwzOS40NywzOS40NywwLDAsMS05Ljg4LDFBNDIuMTIsNDIuMTIsMCwwLDEsOCwxMy4xMVYxMWE0MC41OSw0MC41OSwwLDAsMCwxMCwxLjE0LDQ3Ljc2LDQ3Ljc2LDAsMCwwLDcu''@;'; put 'put ''MDktLjUyQTcuNDUsNy40NSwwLDAsMSwyMi44LDMuOTJjLTEuNy0uMTctMy4zOC0uMjQtNC44LS4yNC01LjE0LDAtMTMuNzkuODgtMTQsNC4xNUg0djE5LjdjMCwyLjE2LDMuNjQsMy4zLDcuNjMsMy44NGwyLjg0LDMsLjU5LjYyaDE3YTMsMywwLDAsMCwzLTNWMjMuOTNBMywzLDAsMCwwLDMy''@;'; put 'put ''LjA5LDIxWk04LDI2LjA4VjI0LjRhMjUuNzksMjUuNzksMCwwLDAsMy40Ni43bC0xLjI0LDEuNDRDOS40NiwyNi40Miw4LjcxLDI2LjI3LDgsMjYuMDhaTTMzLjA5LDMyYTEsMSwwLDAsMS0xLDFIMTUuOTJMMTEuNCwyOC4yMywxNS45MiwyM0gzMi4wOWExLDEsMCwwLDEsMSwxWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuXG4gIDxwYXRoIGQ9''@;'; put 'put ''Ik0xNi4xMSwyN2ExLDEsMCwxLDAsMSwxQTEsMSwwLDAsMCwxNi4xMSwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTMyLjA5LDIxSDMyVjE3LjMyYy0xLjksMi45My0xMC40NiwzLjMtMTQsMy4zQTQy''@;'; put 'put ''LjQzLDQyLjQzLDAsMCwxLDgsMTkuNTZWMTcuODhBNDAuNTksNDAuNTksMCwwLDAsMTgsMTljNC44NSwwLDEyLjgtLjc5LDEzLjkxLTMuNjJIMjIuMjNhMy42OCwzLjY4LDAsMCwxLTIuNzMtMS4yM0gxOEE0Mi4xMiw0Mi4xMiwwLDAsMSw4LDEzLjExVjExYTQwLjU5LDQwLjU5LDAsMCwwLDEw''@;'; put 'put ''LDEuMTRoLjU5YTMuNjEsMy42MSwwLDAsMSwuNDYtMi4yOWwzLjQ2LTZjLTEuNi0uMTUtMy4xNy0uMjEtNC41MS0uMjEtNS4xNCwwLTEzLjc5Ljg4LTE0LDQuMTVINHYxOS43YzAsMi4xNiwzLjY0LDMuMyw3LjYzLDMuODRsMi44NCwzLC41OS42MmgxN2EzLDMsMCwwLDAsMy0zVjIzLjkzQTMs''@;'; put 'put ''MywwLDAsMCwzMi4wOSwyMVpNOCwyNi4wOFYyNC40YTI1Ljc5LDI1Ljc5LDAsMCwwLDMuNDYuN2wtMS4yNCwxLjQ0QzkuNDYsMjYuNDIsOC43MSwyNi4yNyw4LDI2LjA4Wk0zMy4wOSwzMmExLDEsMCwwLDEtMSwxSDE1LjkyTDExLjQsMjguMjMsMTUuOTIsMjNIMzIuMDlhMSwxLDAsMCwxLDEs''@;'; put 'put ''MVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTI2Ljg1LDEuMTRsLTUuNzIsOS45MUExLjI3LDEuMjcsMCwwLDAsMjIuMjMsMTNIMzMuNjhhMS4yNywxLjI3LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuMTRB''@;'; put 'put ''MS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICcpLGIuQ2xyU2hhcGVNZWRpYUNoYW5nZXI9KDAscC5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMCw0''@;'; put 'put ''SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMwLDRaTTYsMzBWNkgzMFYzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIi8+XG4gIDxyZWN0IHg9IjIwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjI0IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHJlY3QgeD0iMjAiIHk9''@;'; put 'put ''IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxw''@;'; put 'put ''YXRoIGQ9Ik0yNy4yMiwxMEgyMHY0YS44LjgsMCwxLDAsMS41OSwwVjExLjZoNS42M2EuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTAiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjE0IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxOCIgd2lk''@;'; put 'put ''dGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMjIiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05Ii8+XG4gIDxy''@;'; put 'put ''ZWN0IHg9IjguODEiIHk9IjI2IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiLz5cblxuICA8cmVjdCB4PSIyMCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICA8cmVjdCB4PSIyMCIgeT0iMjIiIHdpZHRo''@;'; put 'put ''PSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTQtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxMCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjE0IiB3aWR0aD0iOC4xNCIg''@;'; put 'put ''aGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTgiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTctLWJhZGdlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyMiIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjI2IiB3aWR0aD0iOC4xNCIg''@;'; put 'put ''aGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTIwLDE0YS44LjgsMCwxLDAsMS41OSwwVjExLjZIMjVBNy43NCw3Ljc0LDAsMCwxLDIzLjY2LDEwSDIwWiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMzAsMTMuNWgwVjMwSDZWNkgyMi41VjZhNy4zNyw3LjM3LDAsMCwxLC4yOC0ySDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2''@;'; put 'put ''djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuMzcsNy4zNywwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTEtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cblxuICA8cmVjdCB4PSIyMCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xLS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9IjI0IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iMjAiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0''@;'; put 'put ''PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1h''@;'; put 'put ''bGVydGVkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjEwIiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxNCIgd2lkdGg9IjguMTQiIGhlaWdo''@;'; put 'put ''dD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTgiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC03LS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjIyIiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyNiIgd2lkdGg9IjguMTQi''@;'; put 'put ''IGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTMwLDE1LjRWMzBINlY2SDIxLjI3bDEuMTgtMkg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAs''@;'; put 'put ''MCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywx''@;'; put 'put ''LjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+''@;'; put 'put ''XG5cbiAgPHBhdGggZD0iTTMwLDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJINy44OHYxLjU3YTEsMSwwLDAsMCwyLDBWMzJoMTZ2MS41N2ExLDEsMCwwLDAsMiwwVjMySDMwYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMTcsMjhIOC44MVYyNkgxN1ptMC00SDgu''@;'; put 'put ''ODFWMjJIMTdabTAtNEg4LjgxVjE4SDE3Wm0wLTRIOC44MVYxNEgxN1ptMC00SDguODFWMTBIMTdaTTIyLDI0SDIwVjIyaDJabTAtNEgyMFYxOGgyWm00LDRIMjRWMjJoMlptMC00SDI0VjE4aDJabTAtNkgyMFYxMGg2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIv''@;'; put 'put ''PlxuXG4gIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDksNy40OSwwLDAsMS00LTEuMTZWMTRIMjBWMTBoMy42NkE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2YTcuMzcsNy4zNywwLDAsMSwuMjgtMkg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAsMCwwLDIsMFYz''@;'; put 'put ''MmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjM3LDcuMzcsMCwwLDEsMzAsMTMuNVpNMTcsMjhIOC44MVYyNkgxN1ptMC00SDguODFWMjJIMTdabTAtNEg4LjgxVjE4SDE3Wm0wLTRIOC44MVYxNEgxN1ptMC00SDguODFWMTBIMTdaTTIyLDI0SDIw''@;'; put 'put ''VjIyaDJabTAtNEgyMFYxOGgyWm00LDRIMjRWMjJoMlptMC00SDI0VjE4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG5cbiAgPHBhdGggZD0iTTIyLjIzLDE1LjRhMy42OCwzLjY4LDAsMCwxLTMuMTgtNS41MUwyMi40NSw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEu''@;'; put 'put ''NTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaTTE3LDI4SDguODFWMjZIMTdabTAtNEg4LjgxVjIySDE3Wm0wLTRIOC44MVYxOEgxN1ptMC00SDguODFWMTRIMTdabTAtNEg4LjgxVjEwSDE3Wk0yMiwyNEgyMFYyMmgyWm0wLTRIMjBWMThoMlptNCw0SDI0VjIyaDJa''@;'; put 'put ''bTAtNEgyNFYxOGgyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMjYuODUsMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywxM0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFM''@;'; put 'put ''MjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgJyksYi5DbHJTaGFwZVRhcGVEcml2ZT0oMCxwLmNsckljb25TVkcpKCdcbiAgPHBhdGgg''@;'; put 'put ''ZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk00LDI4VjhIMzJWMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTMuMzMsMTMuMzVhNC41''@;'; put 'put ''Miw0LjUyLDAsMSwwLDQuNTMsNC41MkE0LjUzLDQuNTMsMCwwLDAsMTMuMzMsMTMuMzVabTAsNy40NGEyLjkyLDIuOTIsMCwxLDEsMi45My0yLjkyQTIuOTIsMi45MiwwLDAsMSwxMy4zMywyMC43OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxw''@;'; put 'put ''YXRoIGQ9Ik0yMy42MiwxMy4zNWE0LjUyLDQuNTIsMCwxLDAsNC41Miw0LjUyQTQuNTMsNC41MywwLDAsMCwyMy42MiwxMy4zNVptMCw3LjQ0YTIuOTIsMi45MiwwLDEsMSwyLjkyLTIuOTJBMi45MiwyLjkyLDAsMCwxLDIzLjYyLDIwLjc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTYsMTFWMjMuNTVIOFYxMkgyOS4zNFYxMEg3QTEsMSwwLDAsMCw2LDExWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cblxuICA8cGF0aCBkPSJNOC44MSwxNy44N2E0LjUzLDQuNTMsMCwxLDAsNC41''@;'; put 'put ''Mi00LjUyQTQuNTMsNC41MywwLDAsMCw4LjgxLDE3Ljg3Wm03LjQ1LDBBMi45MywyLjkzLDAsMSwxLDEzLjMzLDE1LDIuOTMsMi45MywwLDAsMSwxNi4yNiwxNy44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICA8cGF0''@;'; put 'put ''aCBkPSJNMTkuMSwxNy44N2E0LjUyLDQuNTIsMCwxLDAsNC41Mi00LjUyQTQuNTMsNC41MywwLDAsMCwxOS4xLDE3Ljg3Wm03LjQ0LDBBMi45MiwyLjkyLDAsMSwxLDIzLjYyLDE1LDIuOTIsMi45MiwwLDAsMSwyNi41NCwxNy44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMzIsMTMuMjJWMjhINFY4SDIyLjc4YTcuMzcsNy4zNywwLDAsMS0uMjgtMkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNjUsNy42NSwwLDAsMSwzMiwxMy4y''@;'; put 'put ''MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNNiwxMVYyMy41NUg4VjEySDI1LjUxYTcuNjYsNy42NiwwLDAsMS0xLjg1LTJIN0ExLDEsMCwwLDAsNiwxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuXG4gIDxwYXRoIGQ9Ik04LjgxLDE3''@;'; put 'put ''Ljg3YTQuNTMsNC41MywwLDEsMCw0LjUyLTQuNTJBNC41Myw0LjUzLDAsMCwwLDguODEsMTcuODdabTcuNDUsMEEyLjkzLDIuOTMsMCwxLDEsMTMuMzMsMTUsMi45MywyLjkzLDAsMCwxLDE2LjI2LDE3Ljg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTcsMTBhMSwxLDAsMCwwLTEsMVYyMy41NUg4VjEySDE4LjU3QTMuNywzLjcsMCwwLDEsMTksMTBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJN''@;'; put 'put ''MzMuNjgsMTUuNEgzMlYyOEg0VjhIMjAuMTRsMS4xNS0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICA8cGF0aCBk''@;'; put 'put ''PSJNMjIuMDksMTUuMzlhMy42NSwzLjY1LDAsMCwxLTEuOC0uNTUsNC41MSw0LjUxLDAsMSwwLDcuMTEuNTZIMjUuMTdhMi45MiwyLjkyLDAsMSwxLTMuMDgsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gIDxwYXRo''@;'; put 'put ''IGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cblxuICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTMwLDI0SDZWMTJIMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xMi4yMSwyM2E1LDUsMCwxLDAtNS01QTUsNSwwLDAsMCwxMi4yMSwyM1ptMC03YTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwxLDEyLjIxLDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjMu''@;'; put 'put ''NzksMjNhNSw1LDAsMSwwLTUtNUE1LDUsMCwwLDAsMjMuNzksMjNabTAtN2EyLDIsMCwxLDEtMiwyQTIsMiwwLDAsMSwyMy43OSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cblxuICA8cGF0aCBkPSJNMTIuMjEsMjNhNSw1LDAsMSwwLTUtNUE1LDUsMCww''@;'; put 'put ''LDAsMTIuMjEsMjNabTAtN2EyLDIsMCwxLDEtMiwyQTIsMiwwLDAsMSwxMi4yMSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik0yMy43OSwyM2E1LDUsMCwxLDAtNS01QTUsNSwwLDAsMCwyMy43OSwyM1pt''@;'; put 'put ''MC03YTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwxLDIzLjc5LDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTMwLDEzLjVWMjRINlYxMkgyNS41MWE3LjQ5LDcuNDksMCwwLDEtMy02SDRBMiwyLDAsMCwwLDIs''@;'; put 'put ''OFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG5cbiAgPHBhdGggZD0iTTcuMiwxOGE1LDUsMCwxLDAsNS01QTUsNSwwLDAsMCw3LjIsMThabTcsMGEyLDIsMCwxLDEtMi0yQTIsMiwwLDAsMSwxNC4yMiwxOFoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTE4Ljc4LDE4YTUsNSwwLDEsMCw5LjI3LTIuNkgyMi4yM2EzLjcxLDMuNzEsMCwwLDEtMi4xNy0uNzFBNSw1LDAsMCwwLDE4Ljc4LDE4Wm01LTJhMiwyLDAsMSwxLTIsMkEyLDIsMCww''@;'; put 'put ''LDEsMjMuNzksMTZaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMwVjI0SDZWMTJIMTguNTdhMy42NSwzLjY1LDAsMCwxLC40OC0yLjExTDIxLjI5LDZINEEyLDIsMCwwLDAsMiw4VjI4''@;'; put 'put ''YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTI2Ljg1LDEuMTRsLTUuNzIsOS45MUExLjI3LDEuMjcsMCwwLDAsMjIuMjMsMTNIMzMuNjhh''@;'; put 'put ''MS4yNywxLjI3LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICcpLGIuQ2xyU2hhcGVBbmltYXRpb249KDAs''@;'; put 'put ''cC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEwLjE2LDMxLjcxYTQuNCw0LjQsMCwwLDEtNC42NC0xQTQuMzQsNC4zNCwwLDAsMSw0LjIzLDI3LjZhNC40MSw0LjQxLDAsMCwxLC4xOC0xLjIsMTEuNjEsMTEuNjEsMCwwLDEtMS0yLjU2LDYuNCw2LjQsMCwwLDAsOS4zMyw4LjYzQTExLjU1LDEx''@;'; put 'put ''LjU1LDAsMCwxLDEwLjE2LDMxLjcxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE4LjQxLDI3LjY4YTcuNjEsNy42MSwwLDAsMS05LjA4LTEuMjYsNy41OCw3LjU4LDAsMCwxLTEuMjctOS4wNiwxNC4yNiwxNC4yNiwwLDAsMS0u''@;'; put 'put ''MzctMi44NSw5LjU4LDkuNTgsMCwwLDAsLjIyLDEzLjMzLDkuNjMsOS42MywwLDAsMCwxMy4zNS4yMkExNC40NiwxNC40NiwwLDAsMSwxOC40MSwyNy42OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMS42NiwyNi4yMWExMi4x''@;'; put 'put ''LDEyLjEsMCwxLDEsOC41Ny0zLjU0aDBBMTIuMTEsMTIuMTEsMCwwLDEsMjEuNjYsMjYuMjFaTTIxLjY2LDRBMTAuMTEsMTAuMTEsMCwwLDAsMTEuNTQsMTQuMTFhMTAsMTAsMCwwLDAsMyw3LjE0LDEwLjEyLDEwLjEyLDAsMCwwLDE0LjMxLDBBMTAuMTEsMTAuMTEsMCwwLDAsMjEuNjYsNFpt''@;'; put 'put ''Ny44NiwxOGgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgXG4gIDxwYXRoIGQ9Ik0zLjUsMjMuNzdhNi40MSw2LjQxLDAsMCwwLDkuMzMsOC42N0ExMS42NSwxMS42NSwwLDAsMSwzLjUsMjMuNzdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik03LjY4LDE0LjUzYTkuNiw5LjYsMCwwLDAsMTMuNCwxMy43QTE0LjExLDE0LjExLDAsMCwxLDcuNjgsMTQuNTNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMS43OCwyQTEyLjEyLDEy''@;'; put 'put ''LjEyLDAsMSwxLDkuNjYsMTQuMTUsMTIuMTIsMTIuMTIsMCwwLDEsMjEuNzgsMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAnKSxiLkNsclNoYXBlQ2lDZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuNTMsMTkuODFhNy40NSw3LjQ1LDAsMCwx''@;'; put 'put ''LTEuNjUtLjE4LDEwLjQ4LDEwLjQ4LDAsMCwxLC43MiwyLjEzYy4zLDAsLjYxLDAsLjkzLDBhOS41Miw5LjUyLDAsMCwwLDMtLjQ5bC0uOTMtMS44MUE3LjY3LDcuNjcsMCwwLDEsMjMuNTMsMTkuODFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8''@;'; put 'put ''cGF0aCBkPSJNMTguMzYsMTcuODcsMTgsMTcuNDlhNy40LDcuNCwwLDAsMS0yLjItNS45Miw3LjMxLDcuMzEsMCwwLDEsMS41NC00TDE3LjI2LDlBMSwxLDAsMCwwLDE4LjE3LDEwaC4wOWExLDEsMCwwLDAsMS0uOTFMMTkuNiw1YTEsMSwwLDAsMC0uMjktLjc5QTEsMSwwLDAsMCwxOC41Miw0''@;'; put 'put ''bC00LjA5LjM1YTEsMSwwLDAsMCwuMTcsMmwxLjI5LS4xMWE5LjQ1LDkuNDUsMCwwLDAtMi4wNSw1LjMyLDkuMjgsOS4yOCwwLDAsMCwyLjY3LDcuMjZsLjMxLjM3YTcuMzMsNy4zMywwLDAsMSwyLjA2LDQuOTEsNy4zOSw3LjM5LDAsMCwxLS4yNiwyLjQ3bDEuOC45MWE4Ljc2LDguNzYsMCww''@;'; put 'put ''LDAsLjQ1LTMuNTFBOS4yOCw5LjI4LDAsMCwwLDE4LjM2LDE3Ljg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMyLjQsMTcuOTEsMzEuMTksMThBOS42NSw5LjY1LDAsMCwwLDIzLjUzLDIuNDVhOS4zMyw5LjMzLDAsMCwwLTMs''@;'; put 'put ''LjQ5bC45MSwxLjhhNy42Nyw3LjY3LDAsMCwxLDkuNzYsNy4zOSw3LjU4LDcuNTgsMCwwLDEtMS42NSw0LjcybC4xLTEuNTRhMSwxLDAsMSwwLTItLjEzbC0uMjgsNC4wOGExLDEsMCwwLDAsLjMxLjc4Ljk0Ljk0LDAsMCwwLC42OS4yOGguMWw0LjA4LS40MmExLDEsMCwwLDAsLjktMS4xQTEs''@;'; put 'put ''MSwwLDAsMCwzMi40LDE3LjkxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTQuMDcsMjAuNDRoLjA4bDQuMDktLjM1YTEsMSwwLDEsMC0uMTctMmwtMS4zOS4xMmE3LjYzLDcuNjMsMCwwLDEsNC41Mi0xLjQ5LDcuOSw3LjksMCww''@;'; put 'put ''LDEsMS42My4xOCwxMC4yMywxMC4yMywwLDAsMS0uNzEtMi4xM2MtLjMsMC0uNjEsMC0uOTIsMGE5LjY2LDkuNjYsMCwwLDAtNS45LDJsLjEyLTEuMzFhMSwxLDAsMCwwLS45Mi0xLjA4LDEsMSwwLDAsMC0xLjA4LjkxbC0uMzUsNC4wOGExLDEsMCwwLDAsMSwxLjA4WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTE4LjQyLDI4LjIzbC00LjA5LjI3YTEsMSwwLDAsMCwuMTMsMkwxNiwzMC4zOWE3LjcxLDcuNzEsMCwwLDEtMTIuNTQtNiw3LjYsNy42LDAsMCwxLC4yOS0yTDIsMjEuNDZhOS41OSw5LjU5LDAsMCwwLS40Nywy''@;'; put 'put ''Ljk1QTkuNyw5LjcsMCwwLDAsMTcuMTksMzJsLS4xMiwxLjE4YTEsMSwwLDAsMCwuODksMS4xaC4xMWExLDEsMCwwLDAsMS0uOWwuNDItNC4wNmExLDEsMCwwLDAtMS4wNi0xLjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPicpLGIuQ2xyU2hhcGVGaWxl''@;'; put 'put ''U2hhcmUyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNSw0SDcuODNBMS44OSwxLjg5LDAsMCwwLDYsNS45MVYzMC4wOUExLjg5LDEuODksMCwwLDAsNy44MywzMkgyOC4xN0ExLjg3LDEuODcsMCwwLDAsMzAsMzAuMDlWOVpNMjQsNS43OCwyOC4yLDEwSDI0Wk04LDMwVjZIMjJ2Nmg2''@;'; put 'put ''VjMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIyLDIxLjgxYTIuMTEsMi4xMSwwLDAsMC0xLjQ0LjYybC01LjcyLTIuNjZ2LS40NGw1LjY2LTIuNjVhMi4wOCwyLjA4LDAsMSwwLC4wNi0yLjk0aDBhMi4xNCwyLjE0LDAsMCww''@;'; put 'put ''LS42NCwxLjQ4di4yM2wtNS42NCwyLjY2YTIuMDgsMi4wOCwwLDEsMC0uMDgsMi45NWwuMDgtLjA4LDUuNjcsMi42NnYuM0EyLjA5LDIuMDksMCwxLDAsMjIsMjEuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICBcbiAgPHBhdGggZD0iTTI1LDQu''@;'; put 'put ''MDZINy44M0ExLjg5LDEuODksMCwwLDAsNiw2VjMwLjE1YTEuODksMS44OSwwLDAsMCwxLjgzLDEuOTFIMjguMTdBMS44NywxLjg3LDAsMCwwLDMwLDMwLjE1VjlaTTIyLDI2YTIuMDksMi4wOSwwLDAsMS0yLjEtMi4wOHYtLjNMMTQuMjcsMjFsLS4wOC4wOGEyLjA4LDIuMDgsMCwxLDEsLjA4''@;'; put 'put ''LTIuOTVsNS42NC0yLjY2di0uMjNhMi4xNCwyLjE0LDAsMCwxLC42NC0xLjQ4aDBhMi4wOCwyLjA4LDAsMSwxLS4wNiwyLjk0bC01LjY2LDIuNjV2LjQ0bDUuNzIsMi42NkEyLjExLDIuMTEsMCwwLDEsMjIsMjEuODFsMCwwQTIuMDksMi4wOSwwLDAsMSwyMiwyNlptMi0xNlY1Ljg0bDQuMiw0''@;'; put 'put ''LjIyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGIuVGVjaG5vbG9neVNoYXBlcz17InJ1bGVyLXBlbmNpbCI6Yi5DbHJTaGFwZVJ1bGVyUGVuY2lsLCJwaG9uZS1oYW5kc2V0IjpiLkNsclNoYXBlUGhvbmVIYW5kc2V0LCJuby13aWZpIjpiLkNsclNoYXBl''@;'; put 'put ''Tm9XaWZpLGluc3RhbGw6Yi5DbHJTaGFwZUluc3RhbGwsdW5pbnN0YWxsOmIuQ2xyU2hhcGVVbmluc3RhbGwsbGF5ZXJzOmIuQ2xyU2hhcGVMYXllcnMsYmxvY2s6Yi5DbHJTaGFwZUJsb2NrLCJibG9ja3MtZ3JvdXAiOmIuQ2xyU2hhcGVCbG9ja3NHcm91cCxidW5kbGU6Yi5DbHJTaGFwZUJ1''@;'; put 'put ''bmRsZSx3aWZpOmIuQ2xyU2hhcGVXaWZpLCJyYWNrLXNlcnZlciI6Yi5DbHJTaGFwZVJhY2tTZXJ2ZXIsImhhcmQtZGlzayI6Yi5DbHJTaGFwZUhhcmREaXNrLCJiYWNrdXAtcmVzdG9yZSI6Yi5DbHJTaGFwZUJhY2t1cFJlc3RvcmUsYmFja3VwOmIuQ2xyU2hhcGVCYWNrdXAsZGV2aWNlczpi''@;'; put 'put ''LkNsclNoYXBlRGV2aWNlcyxrZXlib2FyZDpiLkNsclNoYXBlS2V5Ym9hcmQsbW91c2U6Yi5DbHJTaGFwZU1vdXNlLGRhc2hib2FyZDpiLkNsclNoYXBlRGFzaGJvYXJkLGhvc3Q6Yi5DbHJTaGFwZUhvc3Qsc3RvcmFnZTpiLkNsclNoYXBlU3RvcmFnZSxjbHVzdGVyOmIuQ2xyU2hhcGVDbHVz''@;'; put 'put ''dGVyLGFwcGxpY2F0aW9uczpiLkNsclNoYXBlQXBwbGljYXRpb25zLGJ1aWxkaW5nOmIuQ2xyU2hhcGVCdWlsZGluZyxjcHU6Yi5DbHJTaGFwZUNQVSxtZW1vcnk6Yi5DbHJTaGFwZU1lbW9yeSwiZGF0YS1jbHVzdGVyIjpiLkNsclNoYXBlRGF0YUNsdXN0ZXIsInJlc291cmNlLXBvb2wiOmIu''@;'; put 'put ''Q2xyU2hhcGVSZXNvdXJjZVBvb2wsc2hpZWxkOmIuQ2xyU2hhcGVTaGllbGQsInNoaWVsZC1jaGVjayI6Yi5DbHJTaGFwZVNoaWVsZENoZWNrLCJzaGllbGQteCI6Yi5DbHJTaGFwZVNoaWVsZFgsaW1wb3J0OmIuQ2xyU2hhcGVJbXBvcnQsZXhwb3J0OmIuQ2xyU2hhcGVFeHBvcnQsInVwbG9h''@;'; put 'put ''ZC1jbG91ZCI6Yi5DbHJTaGFwZVVwbG9hZENsb3VkLCJkb3dubG9hZC1jbG91ZCI6Yi5DbHJTaGFwZURvd25sb2FkQ2xvdWQscGx1Z2luOmIuQ2xyU2hhcGVQbHVnaW4sZmxvcHB5OmIuQ2xyU2hhcGVGbG9wcHksY29tcHV0ZXI6Yi5DbHJTaGFwZUNvbXB1dGVyLGRpc3BsYXk6Yi5DbHJTaGFw''@;'; put 'put ''ZURpc3BsYXksdGVybWluYWw6Yi5DbHJTaGFwZVRlcm1pbmFsLGNvZGU6Yi5DbHJTaGFwZUNvZGUsYXBwbGljYXRpb246Yi5DbHJTaGFwZUFwcGxpY2F0aW9uLGJhdHRlcnk6Yi5DbHJTaGFwZUJhdHRlcnksbW9iaWxlOmIuQ2xyU2hhcGVNb2JpbGUsdGFibGV0OmIuQ2xyU2hhcGVUYWJsZXQs''@;'; put 'put ''Im5ldHdvcmstZ2xvYmUiOmIuQ2xyU2hhcGVOZXR3b3JrR2xvYmUsIm5ldHdvcmstc2V0dGluZ3MiOmIuQ2xyU2hhcGVOZXR3b3JrU2V0dGluZ3MsIm5ldHdvcmstc3dpdGNoIjpiLkNsclNoYXBlTmV0d29ya1N3aXRjaCxyb3V0ZXI6Yi5DbHJTaGFwZVJvdXRlcix2bTpiLkNsclNoYXBlVk0s''@;'; put 'put ''InZtdy1hcHAiOmIuQ2xyU2hhcGVWTVdBcHAsY2VydGlmaWNhdGU6Yi5DbHJTaGFwZUNlcnRpZmljYXRlLGFyY2hpdmU6Yi5DbHJTaGFwZUFyY2hpdmUsdW5hcmNoaXZlOmIuQ2xyU2hhcGVVbmFyY2hpdmUsY29ubmVjdDpiLkNsclNoYXBlQ29ubmVjdCxkaXNjb25uZWN0OmIuQ2xyU2hhcGVE''@;'; put 'put ''aXNjb25uZWN0LGxpbms6Yi5DbHJTaGFwZUxpbmssdW5saW5rOmIuQ2xyU2hhcGVVbmxpbmssImNsb3VkLW5ldHdvcmsiOmIuQ2xyU2hhcGVDbG91ZE5ldHdvcmssImNsb3VkLXNjYWxlIjpiLkNsclNoYXBlQ2xvdWRTY2FsZSwiY2xvdWQtdHJhZmZpYyI6Yi5DbHJTaGFwZUNsb3VkVHJhZmZp''@;'; put 'put ''YywiY29udHJvbC1sdW4iOmIuQ2xyQ29udHJvbEx1bixkZXBsb3k6Yi5DbHJTaGFwZURlcGxveSxoZWxpeDpiLkNsclNoYXBlSGVsaXgsZmxhc2s6Yi5DbHJTaGFwZUZsYXNrLGFkbWluaXN0cmF0b3I6Yi5DbHJTaGFwZUFkbWluaXN0cmF0b3IsImhhcmQtZHJpdmUiOmIuQ2xyU2hhcGVIYXJk''@;'; put 'put ''RHJpdmUsImhhcmQtZHJpdmUtZGlza3MiOmIuQ2xyU2hhcGVIYXJkRHJpdmVEaXNrcyxudm1lOmIuQ2xyU2hhcGVOVk1lLHNzZDpiLkNsclNoYXBlU1NELGJsdWV0b290aDpiLkNsclNoYXBlQmx1ZXRvb3RoLCJibHVldG9vdGgtb2ZmIjpiLkNsclNoYXBlQmx1ZXRvb3RoT2ZmLCJwcm9jZXNz''@;'; put 'put ''LW9uLXZtIjpiLkNsclNoYXBlUHJvY2Vzc09uVk0sImFzc2lnbi11c2VyIjpiLkNsclNoYXBlQXNzaWduVXNlcixhdG9tOmIuQ2xyU2hhcGVBdG9tLCJiYXItY29kZSI6Yi5DbHJTaGFwZUJhckNvZGUsImNkLWR2ZCI6Yi5DbHJTaGFwZUNkRHZkLGNvbnRhaW5lcjpiLkNsclNoYXBlQ29udGFp''@;'; put 'put ''bmVyLCJjb250YWluZXItdm9sdW1lIjpiLkNsclNoYXBlQ29udGFpbmVyVm9sdW1lLCJmaWxlLXNoYXJlIjpiLkNsclNoYXBlRmlsZVNoYXJlLCJxci1jb2RlIjpiLkNsclNoYXBlUXJDb2RlLHVzYjpiLkNsclNoYXBlVXNiLHJhZGFyOmIuQ2xyU2hhcGVSYWRhcixjYXBhY2l0b3I6Yi5DbHJT''@;'; put 'put ''aGFwZUNhcGFjaXRvcixzcXVpZDpiLkNsclNoYXBlU3F1aWQsaW5kdWN0b3I6Yi5DbHJTaGFwZUluZHVjdG9yLHJlc2lzdG9yOmIuQ2xyU2hhcGVSZXNpc3RvciwiaG9zdC1ncm91cCI6Yi5DbHJTaGFwZUhvc3RHcm91cCwic3RvcmFnZS1hZGFwdGVyIjpiLkNsclNoYXBlU3RvcmFnZUFkYXB0''@;'; put 'put ''ZXIsIm5vZGUtZ3JvdXAiOmIuQ2xyU2hhcGVOb2RlR3JvdXAsbm9kZXM6Yi5DbHJTaGFwZU5vZGVzLG5hbWVzcGFjZTpiLkNsclNoYXBlTmFtZXNwYWNlLG5vZGU6Yi5DbHJTaGFwZU5vZGUscG9kOmIuQ2xyU2hhcGVQb2QsIm1lZGlhLWNoYW5nZXIiOmIuQ2xyU2hhcGVNZWRpYUNoYW5nZXIs''@;'; put 'put ''InRhcGUtZHJpdmUiOmIuQ2xyU2hhcGVUYXBlRHJpdmUsYW5pbWF0aW9uOmIuQ2xyU2hhcGVBbmltYXRpb24sImNpLWNkIjpiLkNsclNoYXBlQ2lDZCwiZmlsZS1zaGFyZS0yIjpiLkNsclNoYXBlRmlsZVNoYXJlMn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuVGVjaG5vbG9neVNoYXBlcywi''@;'; put 'put ''c2VydmVyIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuVGVjaG5vbG9neVNoYXBlcy5ob3N0KSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuVGVjaG5vbG9neVNoYXBlcywiY29tbWFuZCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLlRlY2hub2xvZ3lTaGFwZXMudGVybWluYWwpKSxPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoYi5UZWNobm9sb2d5U2hhcGVzLCJtb2JpbGUtcGhvbmUiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5UZWNobm9sb2d5U2hhcGVzLm1vYmlsZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLlRlY2hub2xvZ3lTaGFwZXMsImxpY2Vuc2UiLCgwLF8uZGVzY3Jp''@;'; put 'put ''cHRvckNvbmZpZykoYi5UZWNobm9sb2d5U2hhcGVzLmNlcnRpZmljYXRlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuVGVjaG5vbG9neVNoYXBlcywiZGlzY29ubmVjdGVkIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuVGVjaG5vbG9neVNoYXBlc1sibm8td2lmaSJdKSksT2JqZWN0LmRl''@;'; put 'put ''ZmluZVByb3BlcnR5KGIuVGVjaG5vbG9neVNoYXBlcywicmVjZWl2ZXIiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5UZWNobm9sb2d5U2hhcGVzWyJwaG9uZS1oYW5kc2V0Il0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5UZWNobm9sb2d5U2hhcGVzLCJkZXNpZ24iLCgwLF8uZGVzY3Jp''@;'; put 'put ''cHRvckNvbmZpZykoYi5UZWNobm9sb2d5U2hhcGVzWyJydWxlci1wZW5jaWwiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLlRlY2hub2xvZ3lTaGFwZXMsImRuYSIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLlRlY2hub2xvZ3lTaGFwZXMuaGVsaXgpKSxPYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoYi5UZWNobm9sb2d5U2hhcGVzLCJmb2xkZXItc2hhcmUiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5UZWNobm9sb2d5U2hhcGVzWyJmaWxlLXNoYXJlIl0pKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJp''@;'; put 'put ''dHlJY29ucy5hZGQoYi5UZWNobm9sb2d5U2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAh''@;'; put 'put ''KioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1''@;'; put 'put ''bmN0aW9uKFgsYixJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGIuVGV4dEVkaXRTaGFwZXM9Yi5DbHJTaGFwZVN1cGVyc2NyaXB0PWIuQ2xyU2hhcGVTdWJzY3JpcHQ9Yi5DbHJTaGFwZVN0cmlrZXRocm91Z2g9Yi5DbHJT''@;'; put 'put ''aGFwZUluZGVudD1iLkNsclNoYXBlT3V0ZGVudD1iLkNsclNoYXBlSGlnaGxpZ2h0ZXI9Yi5DbHJTaGFwZVRleHRDb2xvcj1iLkNsclNoYXBlTGFuZ3VhZ2U9Yi5DbHJTaGFwZUFsaWduVG9wPWIuQ2xyU2hhcGVBbGlnbk1pZGRsZT1iLkNsclNoYXBlQWxpZ25Cb3R0b209Yi5DbHJTaGFwZVVu''@;'; put 'put ''ZGVybGluZT1iLkNsclNoYXBlVGV4dD1iLkNsclNoYXBlQWxpZ25SaWdodFRleHQ9Yi5DbHJTaGFwZUJsb2NrUXVvdGU9Yi5DbHJTaGFwZVBhaW50Um9sbGVyPWIuQ2xyU2hhcGVOdW1iZXJMaXN0PWIuQ2xyU2hhcGVBbGlnbkxlZnRUZXh0PWIuQ2xyU2hhcGVKdXN0aWZ5VGV4dD1iLkNsclNo''@;'; put 'put ''YXBlSXRhbGljPWIuQ2xyU2hhcGVBbGlnblJpZ2h0PWIuQ2xyU2hhcGVBbGlnbkxlZnQ9Yi5DbHJTaGFwZUFsaWduQ2VudGVyPWIuQ2xyU2hhcGVGb250U2l6ZT1iLkNsclNoYXBlQ2hlY2tib3hMaXN0PWIuQ2xyU2hhcGVDZW50ZXJUZXh0PWIuQ2xyU2hhcGVCdWxsZXRMaXN0PWIuQ2xyU2hh''@;'; put 'put ''cGVCb2xkPXZvaWQgMDt2YXIgXz1JKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7Yi5DbHJTaGFwZUJvbGQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIyLjQzLDE3LjU0YTQu''@;'; put 'put ''NjcsNC42NywwLDAsMCwyLjgtNC4zN3YtLjA2YTQuNDMsNC40MywwLDAsMC0xLjMxLTMuMjUsNy4wOSw3LjA5LDAsMCwwLTUuMTMtMS43M2gtN0ExLjcxLDEuNzEsMCwwLDAsMTAsOS44NlYyNmExLjcyLDEuNzIsMCwwLDAsMS43NCwxLjc0aDcuMzNjNC4zNywwLDcuMjUtMS44OCw3LjI1LTUu''@;'; put 'put ''MzhWMjIuM0MyNi4zMiwxOS42NCwyNC43MywxOC4zMiwyMi40MywxNy41NFpNMTMuNjgsMTEuNGg0LjU0YzIsMCwzLjE1Ljg5LDMuMTUsMi4zM3YuMDZjMCwxLjY4LTEuMzYsMi40OS0zLjM4LDIuNDlIMTMuNjhaTTIyLjM3LDIyYzAsMS41OS0xLjMxLDIuNDMtMy40NiwyLjQzSDEzLjY4VjE5''@;'; put 'put ''LjYyaDVjMi40OSwwLDMuNjkuODgsMy42OSwyLjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZUJ1bGxldExpc3Q9KDAsXy5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iNS4yMSIgY3k9IjkuMTciIHI9IjIiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxjaXJjbGUgY3g9IjUuMjEiIGN5PSIxNy4xNyIgcj0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PGNpcmNsZSBjeD0iNS4yMSIgY3k9IjI1LjE3IiByPSIyIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzIuNDIsOWExLDEsMCwwLDAtMS0xSDEwdjJIMzEuNDJBMSwxLDAsMCwwLDMyLjQyLDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzEuNDIsMTZIMTB2MkgzMS40''@;'; put 'put ''MmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMxLjQyLDI0SDEwdjJIMzEuNDJhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLGIuQ2xyU2hh''@;'; put 'put ''cGVDZW50ZXJUZXh0PSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMC44OCw4SDUuMTJhMS4xLDEuMSwwLDAsMCwwLDIuMkgzMC44OGExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI1LjUsMTYu''@;'; put 'put ''MmExLjEsMS4xLDAsMSwwLDAtMi4yaC0xNWExLjEsMS4xLDAsMSwwLDAsMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLjI1LDIwSDUuNzVhMS4xLDEuMSwwLDAsMCwwLDIuMmgyNC41YTEuMSwxLjEsMCwwLDAsMC0yLjJaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjQuODgsMjZIMTEuMTJhMS4xLDEuMSwwLDEsMCwwLDIuMkgyNC44OGExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+Jyks''@;'; put 'put ''Yi5DbHJTaGFwZUNoZWNrYm94TGlzdD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDMsMTZIMTB2MkgzMS40M2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMxLjQzLDI0SDEwdjJIMzEuNDNhMSwx''@;'; put 'put ''LDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNS40NSwxMGgxNmExLDEsMCwwLDAsMC0yaC0xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xNy41LDMuNDJh''@;'; put 'put ''MS4wOSwxLjA5LDAsMCwwLTEuNTUsMEw3Ljg5LDExLjQ4LDQuNTEsNy44NEExLjEsMS4xLDAsMSwwLDIuOSw5LjM0bDQuOTQsNS4zTDE3LjUsNUExLjEsMS4xLDAsMCwwLDE3LjUsMy40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLGIuQ2xyU2hh''@;'; put 'put ''cGVGb250U2l6ZT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjEsOS4wOEExLjEzLDEuMTMsMCwwLDAsMTkuODYsOEg0LjYyYTEuMSwxLjEsMCwxLDAsMCwyLjE5SDExVjI3YTEuMDksMS4wOSwwLDAsMCwyLjE3LDBWMTAuMTloNi42OUExLjE0LDEuMTQsMCwwLDAsMjEsOS4wOFoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMC42NywxNUgyMS4xNWExLjEsMS4xLDAsMSwwLDAsMi4xOUgyNVYyNi41YTEuMDksMS4wOSwwLDAsMCwyLjE3LDBWMTcuMjNoMy41NGExLjEsMS4xLDAsMSwwLDAtMi4xOVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLGIuQ2xyU2hhcGVBbGlnbkNlbnRlcj0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEsMjBIMTlWMTZoNmExLDEsMCwwLDAsMS0xVjdhMSwxLDAsMCwwLTEtMUgxOVYyYTEsMSwwLDAsMC0yLDBWNkgxMWExLDEsMCwwLDAt''@;'; put 'put ''MSwxdjhhMSwxLDAsMCwwLDEsMWg2djRINWExLDEsMCwwLDAtMSwxdjhhMSwxLDAsMCwwLDEsMUgxN3Y0YTEsMSwwLDAsMCwyLDBWMzBIMzFhMSwxLDAsMCwwLDEtMVYyMUExLDEsMCwwLDAsMzEsMjBaTTEyLDE0VjhIMjR2NlpNMzAsMjhINlYyMkgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVBbGlnbkxlZnQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTUsMUExLDEsMCwwLDAsNCwyVjM0YTEsMSwwLDAsMCwyLDBWMkExLDEsMCwwLDAsNSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEiIC8+PHBhdGggZD0iTTMxLDIwSDhWMzBIMzFhMSwxLDAsMCwwLDEtMVYyMUExLDEsMCwwLDAsMzEsMjBabS0xLDhIMTBWMjJIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjQsMTVWN2ExLDEsMCwwLDAtMS0xSDhWMTZI''@;'; put 'put ''MjNBMSwxLDAsMCwwLDI0LDE1Wm0tMi0xSDEwVjhIMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxiLkNsclNoYXBlQWxpZ25SaWdodD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEsMWExLDEsMCwwLDAtMSwxVjM0YTEsMSwwLDAsMCwy''@;'; put 'put ''LDBWMkExLDEsMCwwLDAsMzEsMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik00LDIxdjhhMSwxLDAsMCwwLDEsMUgyOFYyMEg1QTEsMSwwLDAsMCw0LDIxWm0yLDFIMjZ2Nkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTEyLDd2OGExLDEsMCwwLDAsMSwxSDI4VjZIMTNBMSwxLDAsMCwwLDEyLDdabTIsMUgyNnY2SDE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksYi5DbHJTaGFwZUl0YWxpYz0oMCxfLmNsckljb25TVkcp''@;'; put 'put ''KCc8cGF0aCBkPSJNMjQuNDIsOEgxNy4xYTEuMSwxLjEsMCwxLDAsMCwyLjE5aDIuMTNMMTMuMTEsMjUuNTVIMTAuNDdhMS4xLDEuMSwwLDEsMCwwLDIuMTlIMTcuOGExLjEsMS4xLDAsMSwwLDAtMi4xOUgxNS41MWw2LjEzLTE1LjM2aDIuNzhhMS4xLDEuMSwwLDEsMCwwLTIuMTlaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlSnVzdGlmeVRleHQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYsMTAuMkgzMS43NWExLjEsMS4xLDAsMSwwLDAtMi4ySDZhMS4xLDEuMSwwLDEsMCwwLDIuMloiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMS43NSwxNEg2YTEuMSwxLjEsMCwxLDAsMCwyLjJIMzEuNzVhMS4xLDEuMSwwLDEsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMS4xMiwyMEg2''@;'; put 'put ''LjYyYTEuMSwxLjEsMCwxLDAsMCwyLjJoMjQuNWExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMwLjQ1LDI1LjgzSDYuNmExLjEsMS4xLDAsMCwwLDAsMi4ySDMwLjQ1YTEuMSwxLjEsMCwwLDAsMC0y''@;'; put 'put ''LjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxiLkNsclNoYXBlQWxpZ25MZWZ0VGV4dD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuMjUsMjZINnYyLjJIMjAuMjVhMS4xLDEuMSwwLDAsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOCwyMEg2djIuMkgyOEExLjEsMS4xLDAsMCwwLDI4LDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIyLjYsMTUuMUExLjEsMS4xLDAsMCwwLDIxLjUsMTRINnYy''@;'; put 'put ''LjJIMjEuNUExLjEsMS4xLDAsMCwwLDIyLjYsMTUuMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yOS4yNSw4SDZ2Mi4ySDI5LjI1YTEuMSwxLjEsMCwxLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtNCIgLz4nKSxiLkNsclNoYXBlTnVtYmVyTGlzdD0oMCxfLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjUuNDYgNy40MSA1LjQ2IDExLjU2IDYuNjUgMTEuNTYgNi42NSA2LjA1IDUuNyA2LjA1IDQuMDUgNy4xNiA0LjUyIDggNS40NiA3LjQxIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNS41NywxNC44MmEuNzYuNzYsMCwwLDEsLjgzLjczYzAsLjM4LS4yMS43NC0uODcsMS4yN2wtMiwxLjU3djFINy42N1YxOC4yOEg1LjMzbDEtLjc3YzEtLjcsMS4yOC0xLjI3LDEuMjgtMmExLjgzLDEuODMsMCwwLDAtMi0x''@;'; put 'put ''Ljc2LDIuNjMsMi42MywwLDAsMC0yLjE0LDEuMDhsLjc2LjczQTEuNzUsMS43NSwwLDAsMSw1LjU3LDE0LjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTYuNTYsMjQuNjRhMS4zMiwxLjMyLDAsMCwwLDEtMS4yN2MwLS44Ny0uNzgt''@;'; put 'put ''MS41MS0yLTEuNTFhMi42MSwyLjYxLDAsMCwwLTIuMSwxbC42OS43MmExLjc4LDEuNzgsMCwwLDEsMS4zLS42NGMuNTQsMCwuOTIuMjYuOTIuNjZzLS4zNi42Mi0xLC42Mkg0Ljc5djFoLjY0Yy43NCwwLDEuMDcuMjEsMS4wNy42M3MtLjM1LjY4LTEsLjY4YTIsMiwwLDAsMS0xLjQ2LS42NWwt''@;'; put 'put ''LjcuNzhhMi44NSwyLjg1LDAsMCwwLDIuMjEuOTNjMS4yOSwwLDIuMTMtLjY5LDIuMTMtMS42NEExLjMzLDEuMzMsMCwwLDAsNi41NiwyNC42NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMi40Miw5YTEsMSwwLDAsMC0xLTFIMTB2''@;'; put 'put ''MkgzMS40MkExLDEsMCwwLDAsMzIuNDIsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMS40MiwxNkgxMHYySDMxLjQyYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48''@;'; put 'put ''cGF0aCBkPSJNMzEuNDIsMjRIMTB2MkgzMS40MmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JyksYi5DbHJTaGFwZVBhaW50Um9sbGVyPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMSwxMFY0YTIsMiwwLDAsMC0yLTJI''@;'; put 'put ''NkEyLDIsMCwwLDAsNCw0djZhMiwyLDAsMCwwLDIsMkgyOUEyLDIsMCwwLDAsMzEsMTBaTTYsNEgyOXY2SDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsNkgzMnY2LjI5TDE4LjcsMTYuNTRhMSwxLDAsMCwwLS43LDFWMTlIMTZW''@;'; put 'put ''MzNhMiwyLDAsMCwwLDIsMmgyYTIsMiwwLDAsMCwyLTJWMTlIMjB2LS43M0wzMy4zLDE0YTEsMSwwLDAsMCwuNy0xVjdBMSwxLDAsMCwwLDMzLDZaTTIwLDMzSDE4VjIxaDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cmVjdCB4PSI0IiB5PSIyIiB3''@;'; put 'put ''aWR0aD0iMjciIGhlaWdodD0iMTAiIHJ4PSIxIiByeT0iMSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsNkgzMnY2LjI0TDE4LjcxLDE2LjQ1YTEsMSwwLDAsMC0uNzEsMVYxOUgxNlYzNGExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEt''@;'; put 'put ''MVYxOUgyMHYtLjgyTDMzLjI5LDE0QTEsMSwwLDAsMCwzNCwxM1Y3QTEsMSwwLDAsMCwzMyw2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlQmxvY2tRdW90ZT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTEuODYsMTYuNTVhNC4z''@;'; put 'put ''MSw0LjMxLDAsMCwwLTIuMTEuNTYsMTQuNDQsMTQuNDQsMCwwLDEsNC4zNi02LDEuMSwxLjEsMCwwLDAtMS40LTEuN2MtNCwzLjI1LTUuNzgsNy43NS01Ljc4LDEwLjU0QTUuMDgsNS4wOCwwLDAsMCwxMCwyNC41OGE0LjQsNC40LDAsMCwwLDEuODguNDQsNC4yNCw0LjI0LDAsMSwwLDAtOC40''@;'; put 'put ''N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMywxNi41NWE0LjI5LDQuMjksMCwwLDAtMi4xMS41NiwxNC41LDE0LjUsMCwwLDEsNC4zNS02LDEuMSwxLjEsMCwxLDAtMS4zOS0xLjdjLTQsMy4yNS01Ljc4LDcuNzUtNS43OCwxMC41''@;'; put 'put ''NGE1LjA4LDUuMDgsMCwwLDAsMyw0LjYxQTQuMzcsNC4zNywwLDAsMCwyMywyNWE0LjI0LDQuMjQsMCwxLDAsMC04LjQ3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksYi5DbHJTaGFwZUFsaWduUmlnaHRUZXh0PSgwLF8uY2xySWNvblNWRykoJzxw''@;'; put 'put ''YXRoIGQ9Ik0xNC42NSwyNy4xYTEuMSwxLjEsMCwwLDAsMS4xLDEuMUgzMFYyNkgxNS43NUExLjEsMS4xLDAsMCwwLDE0LjY1LDI3LjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNi45LDIxLjFBMS4xLDEuMSwwLDAsMCw4LDIyLjJI''@;'; put 'put ''MzBWMjBIOEExLjEsMS4xLDAsMCwwLDYuOSwyMS4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTEzLjQsMTUuMWExLjEsMS4xLDAsMCwwLDEuMSwxLjFIMzBWMTRIMTQuNUExLjEsMS4xLDAsMCwwLDEzLjQsMTUuMVoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik02Ljc1LDhhMS4xLDEuMSwwLDEsMCwwLDIuMkgzMFY4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+JyksYi5DbHJTaGFwZVRleHQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggZD0iTTEyLjE5LDguODRhMS40NSwxLjQ1LDAsMCwwLTEuNC0xaC0uMTJhMS40NiwxLjQ2LDAsMCwwLTEuNDIsMUwxLjE0LDI2LjU2YTEuMjksMS4yOSwwLDAsMC0uMTQuNTksMSwxLDAsMCwwLDEsMSwxLjEyLDEuMTIsMCwwLDAsMS4wOC0uNzdsMi4wOC00LjY1aDExbDIuMDgsNC41OWEx''@;'; put 'put ''LjI0LDEuMjQsMCwwLDAsMS4xMi44MywxLjA4LDEuMDgsMCwwLDAsMS4wOC0xLjA4LDEuNjQsMS42NCwwLDAsMC0uMTQtLjU3Wk02LjA4LDIwLjcxbDQuNTktMTAuMjIsNC42LDEwLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMy''@;'; put 'put ''LjI0LDE0Ljc4QTYuMzUsNi4zNSwwLDAsMCwyNy42LDEzLjJhMTEuMzYsMTEuMzYsMCwwLDAtNC43LDEsMSwxLDAsMCwwLS41OC44OSwxLDEsMCwwLDAsLjk0LjkyLDEuMjMsMS4yMywwLDAsMCwuMzktLjA4LDguODcsOC44NywwLDAsMSwzLjcyLS44MWMyLjcsMCw0LjI4LDEuMzMsNC4yOCwz''@;'; put 'put ''Ljkydi41YTE1LjI5LDE1LjI5LDAsMCwwLTQuNDItLjYxYy0zLjY0LDAtNi4xNCwxLjYxLTYuMTQsNC42NHYuMDVjMCwyLjk1LDIuNyw0LjQ4LDUuMzcsNC40OGE2LjI5LDYuMjksMCwwLDAsNS4xOS0yLjQ4VjI2LjlhMSwxLDAsMCwwLDEsMSwxLDEsMCwwLDAsMS0xLjA2VjE5QTUuNzEsNS43''@;'; put 'put ''MSwwLDAsMCwzMi4yNCwxNC43OFptLS41Niw3LjdjMCwyLjI4LTIuMTcsMy44OS00LjgxLDMuODktMS45NCwwLTMuNjEtMS4wNi0zLjYxLTIuODZ2LS4wNmMwLTEuOCwxLjUtMyw0LjItM2ExNS4yLDE1LjIsMCwwLDEsNC4yMi42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yIiAvPicpLGIuQ2xyU2hhcGVVbmRlcmxpbmU9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDI4LjE3YzUuMDgsMCw4LjQ4LTMuMDgsOC40OC05VjguNTRhMS4xNSwxLjE1LDAsMSwwLTIuMywwdjEwLjhjMCw0LjQ0LTIuMzgsNi43MS02LjEzLDYuNzFzLTYuMjEtMi40''@;'; put 'put ''Ny02LjIxLTYuODVWOC41NGExLjE1LDEuMTUsMCwxLDAtMi4zLDB2MTAuOEM5LjUzLDI1LjA5LDEzLDI4LjE3LDE4LDI4LjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMxLDMwSDVhMS4xMSwxLjExLDAsMCwwLDAsMi4yMUgzMUEx''@;'; put 'put ''LjExLDEuMTEsMCwwLDAsMzEsMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlQWxpZ25Cb3R0b209KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDMwSDJhMSwxLDAsMCwwLDAsMkgzNGExLDEsMCwwLDAsMC0yWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE2LDVhMSwxLDAsMCwwLTEtMUg3QTEsMSwwLDAsMCw2LDVWMjhIMTZaTTE0LDI2SDhWNmg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMw''@;'; put 'put ''LDEzYTEsMSwwLDAsMC0xLTFIMjFhMSwxLDAsMCwwLTEsMVYyOEgzMFpNMjgsMjZIMjJWMTRoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLGIuQ2xyU2hhcGVBbGlnbk1pZGRsZT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsMTdIMzBW''@;'; put 'put ''MTFhMSwxLDAsMCwwLTEtMUgyMWExLDEsMCwwLDAtMSwxdjZIMTZWNWExLDEsMCwwLDAtMS0xSDdBMSwxLDAsMCwwLDYsNVYxN0gyYTEsMSwwLDAsMCwwLDJINlYzMWExLDEsMCwwLDAsMSwxaDhhMSwxLDAsMCwwLDEtMVYxOWg0djZhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwxLTFWMTlo''@;'; put 'put ''NGExLDEsMCwwLDAsMC0yWk0xNCwzMEg4VjZoNlptMTQtNkgyMlYxMmg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZUFsaWduVG9wPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNCw0SDJBMSwxLDAsMCwwLDIsNkgzNGEx''@;'; put 'put ''LDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYsMzFhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwxLTFWOEg2Wk04LDEwaDZWMzBIOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y''@;'; put 'put ''IiAvPjxwYXRoIGQ9Ik0yMCwyM2ExLDEsMCwwLDAsMSwxaDhhMSwxLDAsMCwwLDEtMVY4SDIwWm0yLTEzaDZWMjJIMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxiLkNsclNoYXBlTGFuZ3VhZ2U9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0i''@;'; put 'put ''TTMwLDNIMTR2NWgyVjVoMTRjMC42LDAsMSwwLjQsMSwxdjExYzAsMC42LTAuNCwxLTEsMUgxN3Y3aC01LjNMOCwyNy45VjI1SDVjLTAuNiwwLTEtMC40LTEtMVYxM2MwLTAuNiwwLjQtMSwxLTFoMTN2LTJINVxuXHRcdGMtMS43LDAtMywxLjMtMywzdjExYzAsMS43LDEuMywzLDMsM2gxdjUu''@;'; put 'put ''MWw2LjMtNS4xSDE5di03aDExYzEuNywwLDMtMS4zLDMtM1Y2QzMzLDQuMywzMS43LDMsMzAsM3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik02LjIsMjIuOWgyLjRsMC42LTEuNmgzLjFsMC42LDEuNmgyLjRMMTEuOSwxNEg5LjVMNi4y''@;'; put 'put ''LDIyLjl6IE0xMC43LDE2LjVsMSwzLjFoLTJMMTAuNywxNi41eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIwLDE3YzEuMSwwLDIuNi0wLjMsNC0xYzEuNCwwLjcsMywxLDQsMXYtMmMwLDAtMSwwLTIuMS0wLjRjMS4yLTEuMiwyLjEt''@;'; put 'put ''MywyLjEtNS42VjhoLTNWNmgtMnYyaC0zdjJoNS45XG5cdFx0Yy0wLjIsMS44LTEsMi45LTEuOSwzLjZjLTAuNi0wLjUtMS4yLTEuMi0xLjYtMi4xaC0yLjFjMC40LDEuMywxLDIuMywxLjgsMy4xQzIxLjEsMTUsMjAuMiwxNSwyMCwxNVYxN3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0zIiAvPjxwb2x5Z29uIHBvaW50cz0iMTEsMTYuNSAxMCwxOS42IDEyLDE5LjYgMTEsMTYuNSBcdCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAuMywzaC0xNnY1aDR2MmgtMTNjLTEuNywwLTMsMS4zLTMsM3YxMWMw''@;'; put 'put ''LDEuNywxLjMsMywzLDNoMXY1LjFsNi4zLTUuMWg2Ljd2LTdoMTFjMS43LDAsMy0xLjMsMy0zVjZcblx0XHRDMzMuMyw0LjMsMzIsMywzMC4zLDN6IE0xMy4xLDIyLjlsLTAuNS0xLjZIOS41bC0wLjYsMS42SDYuNUw5LjgsMTRoMi40bDMuMyw4LjlMMTMuMSwyMi45eiBNMjguMywxNXYyYy0x''@;'; put 'put ''LjMsMC0yLjctMC40LTMuOS0xXG5cdFx0Yy0xLjIsMC42LTIuNiwwLjktNCwxbC0wLjEtMmMwLjcsMCwxLjQtMC4xLDIuMS0wLjNjLTAuOS0wLjktMS41LTItMS44LTMuMmgyLjFjMC4zLDAuOSwwLjksMS42LDEuNiwyLjJjMS4xLTAuOSwxLjgtMi4yLDEuOS0zLjdcblx0XHRoLTZWOGgzVjZo''@;'; put 'put ''MnYyaDMuM2wwLjEsMWMwLjEsMi4xLTAuNyw0LjItMi4yLDUuN0MyNy4xLDE0LjksMjcuNywxNSwyOC4zLDE1eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlVGV4dENvbG9yPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOS40Nywz''@;'; put 'put ''Ljg0YTEuNDUsMS40NSwwLDAsMC0xLjQtMUgxOGExLjQ1LDEuNDUsMCwwLDAtMS40MiwxTDguNDIsMjEuNTZhMS4zNSwxLjM1LDAsMCwwLS4xNC41OSwxLDEsMCwwLDAsMSwxLDEuMTEsMS4xMSwwLDAsMCwxLjA4LS43N2wyLjA4LTQuNjVoMTFsMi4wOCw0LjU5YTEuMjQsMS4yNCwwLDAsMCwx''@;'; put 'put ''LjEyLjgzLDEuMDgsMS4wOCwwLDAsMCwxLjA4LTEuMDgsMS41OSwxLjU5LDAsMCwwLS4xNC0uNTdaTTEzLjM2LDE1LjcxLDE4LDUuNDlsNC42LDEwLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHJlY3QgeD0iNC4wNiIgeT0iMjUiIHdpZHRo''@;'; put 'put ''PSIyOCIgaGVpZ2h0PSI4IiByeD0iMiIgcnk9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JyksYi5DbHJTaGFwZUhpZ2hsaWdodGVyPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNS44MiwyNi4wNmExLDEsMCwwLDEtLjcxLS4yOUw4LjY3LDE5''@;'; put 'put ''LjMzYTEsMSwwLDAsMS0uMjktLjcxLDEsMSwwLDAsMSwuMjktLjcxTDIzLDMuNTRhNS41NSw1LjU1LDAsMSwxLDcuODUsNy44NkwxNi41MywyNS43N0ExLDEsMCwwLDEsMTUuODIsMjYuMDZabS01LTcuNDQsNSw1TDI5LjQ4LDEwYTMuNTQsMy41NCwwLDAsMCwwLTUsMy42MywzLjYzLDAsMCww''@;'; put 'put ''LTUsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xMC4zOCwyOC4yOEExLDEsMCwwLDEsOS42NywyOEw2LjQ1LDI0Ljc3YTEsMSwwLDAsMS0uMjItMS4wOWwyLjIyLTUuNDRhMSwxLDAsMCwxLDEuNjMtLjMzbDYuNDUsNi40NEEx''@;'; put 'put ''LDEsMCwwLDEsMTYuMiwyNmwtNS40NCwyLjIyQTEuMzMsMS4zMywwLDAsMSwxMC4zOCwyOC4yOFpNOC4zMywyMy44MmwyLjI5LDIuMjgsMy40My0xLjRMOS43NCwyMC4zOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik04Ljk0LDMw''@;'; put 'put ''aC01YTEsMSwwLDAsMS0uODQtMS41NWwzLjIyLTQuOTRhMSwxLDAsMCwxLDEuNTUtLjE2bDMuMjEsMy4yMmExLDEsMCwwLDEsLjA2LDEuMzVMOS43LDI5LjY0QTEsMSwwLDAsMSw4Ljk0LDMwWk01Ljc4LDI4SDguNDdMOSwyNy4zNGwtMS43LTEuN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxyZWN0IHg9IjMuMDYiIHk9IjMxIiB3aWR0aD0iMzAiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz4nKSxiLkNsclNoYXBlT3V0ZGVudD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEu''@;'; put 'put ''MDYsOWgtMjZhMSwxLDAsMSwxLDAtMmgyNmExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDE0aC0xN2ExLDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMTloLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwyNGgtMTdhMSwxLDAsMCwx''@;'; put 'put ''LDAtMmgxN2ExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDI5aC0yNmExLDEsMCwwLDEsMC0yaDI2YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtNSIvPlxuICA8cGF0aCBkPSJNOS41NiwyMi41NGExLDEsMCwwLDEtLjctLjNMNC42MSwxOGw0LjI1LTQuMjRhMSwxLDAsMCwxLDEuNDEsMS40MUw3LjQ0LDE4bDIuODMsMi44M2ExLDEsMCwwLDEtLjcxLDEuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NiIvPicpLGIuQ2xyU2hhcGVJbmRlbnQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjA2LDloLTI2YTEsMSwwLDEsMSwwLTJoMjZhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwxNGgt''@;'; put 'put ''MTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDE5aC0xN2ExLDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMjRoLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwyOWgtMjZhMSwxLDAsMCwxLDAtMmgy''@;'; put 'put ''NmExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHBhdGggZD0iTTUuNTYsMjIuNTRhMSwxLDAsMCwxLS43LTEuNzFMNy42OCwxOCw0Ljg2LDE1LjE3YTEsMSwwLDAsMSwwLTEuNDEsMSwxLDAsMCwxLDEuNDEsMEwxMC41MSwx''@;'; put 'put ''OCw2LjI3LDIyLjI0QTEsMSwwLDAsMSw1LjU2LDIyLjU0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz4nKSxiLkNsclNoYXBlU3RyaWtldGhyb3VnaD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIuODgsMTkuOTJoLTMwYTEsMSwwLDEsMSwwLTJo''@;'; put 'put ''MzBhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik03LjI3LDE1Ljg2YTEyLjksMTIuOSwwLDAsMSwxLjI5LS41MkE1LjY5LDUuNjksMCwwLDEsMTAuMzksMTVhMy4xOCwzLjE4LDAsMCwxLDIuNzUsMS4xMUE0''@;'; put 'put ''LjQ0LDQuNDQsMCwwLDEsMTQsMTguODV2LjQ5YTEzLjgzLDEzLjgzLDAsMCwwLTQuMjktLjc0LDYuMTksNi4xOSwwLDAsMC0yLjU5LjU0QTUsNSwwLDAsMCw1LjgxLDIwSDE1Ljg4VjE4Ljg1YTUuNjcsNS42NywwLDAsMC0xLjM3LTQsNS4xNiw1LjE2LDAsMCwwLTQtMS40OSwxMCwxMCwwLDAs''@;'; put 'put ''MC0zLjkxLjg4Ljg3Ljg3LDAsMCwwLS40NCwxLjE4QS44NC44NCwwLDAsMCw3LjI3LDE1Ljg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTIxLDIwYTUuOTQsNS45NCwwLDAsMSwuNTQtMi4zMSw0LjM1LDQuMzUsMCwwLDEsMS41''@;'; put 'put ''OC0xLjgzLDQuMjcsNC4yNywwLDAsMSw0LjU5LDAsNC40Nyw0LjQ3LDAsMCwxLDEuNTcsMS44M0E2LjEyLDYuMTIsMCwwLDEsMjkuODUsMjBoMmE3LjczLDcuNzMsMCwwLDAtLjc4LTMuMTksNiw2LDAsMCwwLTIuMTgtMi40NSw1Ljc0LDUuNzQsMCwwLDAtMy4xLS44OCw1LjM5LDUuMzksMCww''@;'; put 'put ''LDAtMi44LjczLDUuNTUsNS41NSwwLDAsMC0yLDIuMDVWMTBhLjg3Ljg3LDAsMCwwLS44Ni0uODZIMjBhLjg3Ljg3LDAsMCwwLS44Ni44NlYyMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0yOS42NywyMmE1LjYxLDUuNjEsMCww''@;'; put 'put ''LDEtLjM2LDEuMDcsNC40Nyw0LjQ3LDAsMCwxLTEuNTcsMS44NSw0LjMyLDQuMzIsMCwwLDEtNC41OSwwLDQuMzUsNC4zNSwwLDAsMS0xLjU4LTEuODVBNS42NCw1LjY0LDAsMCwxLDIxLjIsMjJIMTkuMDl2NC4xM0EuODcuODcsMCwwLDAsMjAsMjdoLjJhLjg3Ljg3LDAsMCwwLC44Ni0uODZW''@;'; put 'put ''MjQuNTFhNS41OCw1LjU4LDAsMCwwLDIsMi4wNiw1LjQ4LDUuNDgsMCwwLDAsMi44LjcyLDUuNjYsNS42NiwwLDAsMCwzLjEtLjg4QTUuODgsNS44OCwwLDAsMCwzMS4wOSwyNCw3LjA5LDcuMDksMCwwLDAsMzEuNzMsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtNCIvPlxuICA8cGF0aCBkPSJNMTQsMjJ2Ljc2YTMuMzQsMy4zNCwwLDAsMS0xLjYyLDIsNS4zNCw1LjM0LDAsMCwxLTIuNjkuNzIsMy43OCwzLjc4LDAsMCwxLTIuMzYtLjcsMi4yNCwyLjI0LDAsMCwxLS45NC0xLjksMi4yOSwyLjI5LDAsMCwxLC4yLS45MUg0LjYyYTQsNCwwLDAsMC0u''@;'; put 'put ''MTMsMSwzLjgzLDMuODMsMCwwLDAsMS4zNSwzLjA2QTUuMTUsNS4xNSwwLDAsMCw5LjMxLDI3LjIsNiw2LDAsMCwwLDEyLDI2LjU3YTQuNjIsNC42MiwwLDAsMCwyLTEuNzRWMjZhLjg2Ljg2LDAsMCwwLC44Ni44NkgxNWEuODYuODYsMCwwLDAsLjg2LS44NlYyMloiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+JyksYi5DbHJTaGFwZVN1YnNjcmlwdD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTQuNTUsMThsNi44LDguNmExLjE3LDEuMTcsMCwwLDEtLjkyLDEuOWgwYTEuMTcsMS4xNywwLDAsMS0uOTItLjQ0TDEzLDE5LjkxLDYuNiwyOGEx''@;'; put 'put ''LjE3LDEuMTcsMCwwLDEtLjkyLjQ0aDBhMS4xNywxLjE3LDAsMCwxLS45Mi0xLjlMMTEuNTUsMThsLTYuOC04LjZhMS4xNywxLjE3LDAsMCwxLC45Mi0xLjloMEExLjE3LDEuMTcsMCwwLDEsNi42Myw4bDYuNDQsOC4xM0wxOS41LDhhMS4xNywxLjE3LDAsMCwxLC45Mi0uNDRoMGExLjE3LDEu''@;'; put 'put ''MTcsMCwwLDEsLjkyLDEuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0yMywzMS44LDI3LjQ5LDI4YTkuOSw5LjksMCwwLDAsMS44OC0yLjA1QTMuNDQsMy40NCwwLDAsMCwzMCwyNGEyLjM1LDIuMzUsMCwwLDAtLjM1LTEuMjcs''@;'; put 'put ''Mi40NCwyLjQ0LDAsMCwwLTEtLjg0LDIuOSwyLjksMCwwLDAtMS4yNi0uMjgsMy4zNiwzLjM2LDAsMCwwLTEuODMuNSw1LjY0LDUuNjQsMCwwLDAtMS40OCwxLjQybC0xLS44MWE1LjExLDUuMTEsMCwwLDEsNC4zNi0yLjM3LDQuMzUsNC4zNSwwLDAsMSwyLC40NSwzLjQzLDMuNDMsMCwwLDEs''@;'; put 'put ''MiwzLjE4LDQuNDUsNC40NSwwLDAsMS0uNjgsMi4zNSwxMC45LDEwLjksMCwwLDEtMi4yNCwyLjQ2bC0zLjI0LDIuODFIMzEuNVYzM0gyM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JyksYi5DbHJTaGFwZVN1cGVyc2NyaXB0PSgwLF8uY2xySWNvblNW''@;'; put 'put ''RykoJzxwYXRoIGQ9Ik0xNC40MywxOGw2Ljc5LDguNmExLjE3LDEuMTcsMCwwLDEtLjkyLDEuOWgwYTEuMTcsMS4xNywwLDAsMS0uOTItLjQ0bC02LjQ0LTguMTNMNi40NywyOGExLjE3LDEuMTcsMCwwLDEtLjkyLjQ0aDBhMS4xNywxLjE3LDAsMCwxLS45Mi0xLjlMMTEuNDMsMThsLTYuOC04''@;'; put 'put ''LjZhMS4xNywxLjE3LDAsMCwxLC45Mi0xLjloMEExLjIsMS4yLDAsMCwxLDYuNTEsOGw2LjQzLDguMTNMMTkuMzgsOGExLjE3LDEuMTcsMCwwLDEsLjkyLS40NGgwYTEuMTcsMS4xNywwLDAsMSwuOTIsMS45WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5c''@;'; put 'put ''biAgPHBhdGggZD0iTTIyLjg1LDE0LjQ3bDQuNTEtMy44NWE5LjM3LDkuMzcsMCwwLDAsMS44OC0yLDMuNDMsMy40MywwLDAsMCwuNTktMS44NiwyLjI3LDIuMjcsMCwwLDAtLjM2LTEuMjcsMi4zOCwyLjM4LDAsMCwwLS45NS0uODMsMi43NywyLjc3LDAsMCwwLTEuMjYtLjI5LDMuMzksMy4z''@;'; put 'put ''OSwwLDAsMC0xLjgzLjUsNS44Myw1LjgzLDAsMCwwLTEuNDksMS40MmwtMS0uODFhNS4xMiw1LjEyLDAsMCwxLDQuMzYtMi4zNyw0LjM2LDQuMzYsMCwwLDEsMiwuNDUsMy40NywzLjQ3LDAsMCwxLDIsMy4xOEE0LjQ0LDQuNDQsMCwwLDEsMzAuNTgsOWExMS4xNCwxMS4xNCwwLDAsMS0yLjI0''@;'; put 'put ''LDIuNDZMMjUuMSwxNC4zMWg2LjI4djEuMzNIMjIuODVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPicpLGIuVGV4dEVkaXRTaGFwZXM9e2JvbGQ6Yi5DbHJTaGFwZUJvbGQsImJ1bGxldC1saXN0IjpiLkNsclNoYXBlQnVsbGV0TGlzdCwiY2hlY2tib3gt''@;'; put 'put ''bGlzdCI6Yi5DbHJTaGFwZUNoZWNrYm94TGlzdCwibnVtYmVyLWxpc3QiOmIuQ2xyU2hhcGVOdW1iZXJMaXN0LCJmb250LXNpemUiOmIuQ2xyU2hhcGVGb250U2l6ZSxpdGFsaWM6Yi5DbHJTaGFwZUl0YWxpYywianVzdGlmeS10ZXh0IjpiLkNsclNoYXBlSnVzdGlmeVRleHQsImNlbnRlci10''@;'; put 'put ''ZXh0IjpiLkNsclNoYXBlQ2VudGVyVGV4dCwiYWxpZ24tbGVmdC10ZXh0IjpiLkNsclNoYXBlQWxpZ25MZWZ0VGV4dCwiYWxpZ24tcmlnaHQtdGV4dCI6Yi5DbHJTaGFwZUFsaWduUmlnaHRUZXh0LCJwYWludC1yb2xsZXIiOmIuQ2xyU2hhcGVQYWludFJvbGxlciwiYmxvY2stcXVvdGUiOmIu''@;'; put 'put ''Q2xyU2hhcGVCbG9ja1F1b3RlLHRleHQ6Yi5DbHJTaGFwZVRleHQsdW5kZXJsaW5lOmIuQ2xyU2hhcGVVbmRlcmxpbmUsImFsaWduLWNlbnRlciI6Yi5DbHJTaGFwZUFsaWduQ2VudGVyLCJhbGlnbi1sZWZ0IjpiLkNsclNoYXBlQWxpZ25MZWZ0LCJhbGlnbi1yaWdodCI6Yi5DbHJTaGFwZUFs''@;'; put 'put ''aWduUmlnaHQsImFsaWduLWJvdHRvbSI6Yi5DbHJTaGFwZUFsaWduQm90dG9tLCJhbGlnbi1taWRkbGUiOmIuQ2xyU2hhcGVBbGlnbk1pZGRsZSwiYWxpZ24tdG9wIjpiLkNsclNoYXBlQWxpZ25Ub3AsbGFuZ3VhZ2U6Yi5DbHJTaGFwZUxhbmd1YWdlLCJ0ZXh0LWNvbG9yIjpiLkNsclNoYXBl''@;'; put 'put ''VGV4dENvbG9yLGhpZ2hsaWdodGVyOmIuQ2xyU2hhcGVIaWdobGlnaHRlcixpbmRlbnQ6Yi5DbHJTaGFwZUluZGVudCxvdXRkZW50OmIuQ2xyU2hhcGVPdXRkZW50LHN0cmlrZXRocm91Z2g6Yi5DbHJTaGFwZVN0cmlrZXRocm91Z2gsc3Vic2NyaXB0OmIuQ2xyU2hhcGVTdWJzY3JpcHQsc3Vw''@;'; put 'put ''ZXJzY3JpcHQ6Yi5DbHJTaGFwZVN1cGVyc2NyaXB0fSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoYi5UZXh0RWRpdFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdHJh''@;'; put 'put ''dmVsLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdHJhdmVsLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAg''@;'; put 'put ''IFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihYLGIsSSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxi''@;'; put 'put ''LlRyYXZlbFNoYXBlcz1iLkNsclNoYXBlT25Ib2xpZGF5PWIuQ2xyU2hhcGVUcmFpbGVyPWIuQ2xyU2hhcGVGZXJyeT1iLkNsclNoYXBlQ2FyYXZhbj1iLkNsclNoYXBlQ2FtcGVydmFuPWIuQ2xyU2hhcGVCb2F0PWIuQ2xyU2hhcGVCaWN5Y2xlPWIuQ2xyU2hhcGVNYXBNYXJrZXI9Yi5DbHJT''@;'; put 'put ''aGFwZUNvbXBhc3M9Yi5DbHJTaGFwZU1hcD1iLkNsclNoYXBlQ2FyPWIuQ2xyU2hhcGVBaXJwbGFuZT1iLkNsclNoYXBlVHJ1Y2s9dm9pZCAwO3ZhciBfPUkoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1j''@;'; put 'put ''b25maWcudHMiKSxwPUkoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtiLkNsclNoYXBlVHJ1Y2s9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMCwxMkgyNlY3YTEsMSwwLDAsMC0xLTFIM0ExLDEsMCwwLDAsMiw3VjI1YTEsMSwwLDAsMCwxLDFINFY4SDI0VjE5LjdhNi40NSw2LjQ1LDAsMCwxLDEuNTYtLjJjLjE1LDAsLjI5LDAsLjQ0LDBWMTRoNGEyLDIsMCwwLDEsMiwydjFIMjh2Mmg0djVI''@;'; put 'put ''MjkuNmE0LjU0LDQuNTQsMCwwLDAtOC4zNCwwSDE0LjQzYTQuNSw0LjUsMCwwLDAtNC4xNy0yLjc2QTQuMzgsNC4zOCwwLDEsMCwxNC43MiwyNkgyMWE0LjQ5LDQuNDksMCwwLDAsOC45MiwwSDMzYTEsMSwwLDAsMCwxLTFWMTZBNCw0LDAsMCwwLDMwLDEyWk0xMC4yNiwyOGEyLjM4LDIuMzgs''@;'; put 'put ''MCwxLDEsMC00Ljc1LDIuMzgsMi4zOCwwLDEsMSwwLDQuNzVabTE1LjE3LDBhMi4zOCwyLjM4LDAsMSwxLDIuNS0yLjM3QTIuNDQsMi40NCwwLDAsMSwyNS40MywyOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCwx''@;'; put 'put ''MkgyNlY3YTEsMSwwLDAsMC0xLTFIM0ExLDEsMCwwLDAsMiw3VjI1YTEsMSwwLDAsMCwxLDFINFY4SDI0VjIxLjQ5QTQuNDUsNC40NSwwLDAsMCwyMS4yNSwyNEgxNC40M2E0LjUsNC41LDAsMCwwLTQuMTctMi43NkE0LjM4LDQuMzgsMCwxLDAsMTQuNzIsMjZIMjFhNC40OCw0LjQ4LDAsMCww''@;'; put 'put ''LDguOTEsMEgzNFYxNkE0LDQsMCwwLDAsMzAsMTJaTTEwLjI2LDI4YTIuMzgsMi4zOCwwLDEsMSwwLTQuNzUsMi4zOCwyLjM4LDAsMSwxLDAsNC43NVptMTUuMTcsMGEyLjM4LDIuMzgsMCwxLDEsMi41LTIuMzdBMi40NCwyLjQ0LDAsMCwxLDI1LjQyLDI4Wk0zMiwxN0gyNlYxNGg0YTIsMiww''@;'; put 'put ''LDAsMSwyLDJaIi8+JyksYi5DbHJTaGFwZUFpcnBsYW5lPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzUuNzcsOC4xNmEyLjQzLDIuNDMsMCwwLDAtMS45LTJMMjgsNC44N2E0LjUsNC41LDAsMCwwLTMuNjUu''@;'; put 'put ''NzlMNywxOC4zLDIuMTQsMTguMUExLjg2LDEuODYsMCwwLDAsLjkxLDIxLjQxbDUsMy45M2MuNi43MywxLC41OSwxMC45My00LjgybC45Myw5LjQyYTEuMzYsMS4zNiwwLDAsMCwuODUsMS4xOCwxLjQzLDEuNDMsMCwwLDAsLjU0LjEsMS41NCwxLjU0LDAsMCwwLDEtLjQxbDIuMzktMi4xOGEx''@;'; put 'put ''LjUyLDEuNTIsMCwwLDAsLjQ2LS44M0wyNS4yLDE1LjljMy41Ny0yLDYuOTUtMy44OCw5LjM2LTUuMjVBMi40MywyLjQzLDAsMCwwLDM1Ljc3LDguMTZabS0yLjIuNzVjLTIuNSwxLjQyLTYsMy40MS05Ljc2LDUuNDdsLS40MS4yM0wyMS4wNywyNy4yOGwtMS40NywxLjM0TDE4LjUsMTcuMzIs''@;'; put 'put ''MTcuMTcsMThDMTAsMjIsNy42MSwyMy4xNiw2Ljc5LDIzLjUybC00LjMtMy40MSw1LjA4LjIyLDE4LTEzLjA2YTIuNTEsMi41MSwwLDAsMSwyLS40NWw1Ljg1LDEuMjZhLjQzLjQzLDAsMCwxLC4zNS4zN0EuNDIuNDIsMCwwLDEsMzMuNTcsOC45MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNNywxMi41NGwzLjU2LDEsMS42NC0xLjE5LTQtMS4xNkwxMCwxMC4wOWw1LjQ3LS4xNiwyLjMtMS42N0wxMCw4LjVhMS4yNSwxLjI1LDAsMCwwLS43LjE3TDYuNjcsMTAuMkExLjI4LDEuMjgsMCwwLDAsNywxMi41''@;'; put 'put ''NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik02LjI1LDExLjUsMTIsMTMuMTZsNi4zMi00LjU5LTkuMDcuMjZBLjUyLjUyLDAsMCwwLDksOC45MUw2LjEzLDEwLjU2QS41MS41MSwwLDAsMCw2LjI1LDExLjVaIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzQuNTIsNi4zNiwyOC4yMiw1YTMuNzgsMy43OCwwLDAsMC0zLjA3LjY3TDYuMTIsMTkuNWwtNC41Ny0uMmExLjI1LDEuMjUsMCwwLDAtLjgzLDIuMjJsNC40NSwzLjUzYS41NS41NSww''@;'; put 'put ''LDAsMCwuNTMuMDljMS4yNy0uNDksNi0zLDExLjU5LTYuMDdsMS4xMiwxMS41MWEuNTUuNTUsMCwwLDAsLjkuMzdsMi41LTIuMDhhLjc2Ljc2LDAsMCwwLC4yNi0uNDVsMi4zNy0xMy4yOWM0LTIuMjIsNy44Mi00LjM3LDEwLjUxLTUuODlBMS41NSwxLjU1LDAsMCwwLDM0LjUyLDYuMzZaIi8+''@;'; put 'put ''JyksYi5DbHJTaGFwZUNhcj0oMCxwLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgeD0iMTUiIHk9IjE3IiB3aWR0aD0iMyIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNi40NSwxNC4xN0EyMi4xLDIyLjEsMCwwLDAsMTkuMzgsN2E5LjY0LDkuNjQsMCwwLDAtOS0uNyw4LjYsOC42LDAsMCwwLTQuODIsNi40Yy0uMDguNDctLjE0LjkyLS4yLDEuMzZBNCw0LDAsMCwwLDIsMTh2Ni4xM2EyLDIsMCwwLDAsMiwyVjIw''@;'; put 'put ''SDRWMThhMiwyLDAsMCwxLDItMkgyNC43M0E3LjI4LDcuMjgsMCwwLDEsMzIsMjMuMjdWMjRoLTJhNC41Myw0LjUzLDAsMSwwLC4zMywySDMyYTIsMiwwLDAsMCwyLTJ2LS43M0E5LjI4LDkuMjgsMCwwLDAsMjYuNDUsMTQuMTdaTTExLDE0SDYuOTNjMC0uMzEuMDktLjYzLjE1LTFBNi41Miw2''@;'; put 'put ''LjUyLDAsMCwxLDExLDhoMFptMiwwVjcuNThhOC4xNyw4LjE3LDAsMCwxLDUuMzYsMS4xNkExOSwxOSwwLDAsMSwyMy45LDE0Wk0yNS44LDI4LjM4YTIuNSwyLjUsMCwxLDEsMi41LTIuNUEyLjUsMi41LDAsMCwxLDI1LjgsMjguMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xNC4xNywyNGE0LjUzLDQuNTMsMCwxLDAsLjMzLDJoNS4zYzAtLjA4LDAtLjE3LDAtLjI1QTYsNiwwLDAsMSwyMCwyNFpNMTAsMjguMzhhMi41LDIuNSwwLDEsMSwyLjUtMi41QTIuNSwyLjUsMCwwLDEsMTAsMjguMzha''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI2Ljg3LDE0LjI4QTIyLjM2LDIyLjM2LDAsMCwwLDE5LjY1LDYuOWE5LjY0LDkuNjQsMCwwLDAtOS0uNyw4LjYsOC42LDAsMCwwLTQuODIsNi40Yy0uMDguNDktLjE1''@;'; put 'put ''LDEtLjIxLDEuNGgtMUEyLjU5LDIuNTksMCwwLDAsMiwxNi41OXY4LjU1YS44Ni44NiwwLDAsMCwuODYuODZINC41OWMwLS4xMywwLS4yNiwwLS4zOWE1Ljc3LDUuNzcsMCwwLDEsNy43MS01LjQ1bC0xLDFhNC41Niw0LjU2LDAsMCwwLTQuMzQsMS41OCwzLDMsMCwwLDAtLjYzLjkzQTQuNSw0''@;'; put 'put ''LjUsMCwxLDAsMTQuODIsMjZoNS40OGMwLS4xMywwLS4yNiwwLS4zOUE1Ljc3LDUuNzcsMCwwLDEsMjgsMjAuMTZsLTEsMWE0LjU2LDQuNTYsMCwwLDAtNC4zNCwxLjU4LDMsMywwLDAsMC0uNjMuOTNBNC41LDQuNSwwLDEsMCwzMC41MywyNmgyLjYxYS44Ni44NiwwLDAsMCwuODYtLjg2VjIz''@;'; put 'put ''LjM2QTkuMzksOS4zOSwwLDAsMCwyNi44NywxNC4yOFpNMTIsMTRIOGMwLS4zNS4xLS43MS4xNi0xLjA3YTYuNTIsNi41MiwwLDAsMSwzLjg3LTVoMFpNMTAuMzYsMjguMzZhMi41LDIuNSwwLDEsMSwyLjUtMi41QTIuNSwyLjUsMCwwLDEsMTAuMzYsMjguMzZaTTE5LDE5SDE2VjE3aDNabS02''@;'; put 'put ''LTVWNy40N2E4LjE2LDguMTYsMCwwLDEsNS40LDEuMTVBMTkuMTUsMTkuMTUsMCwwLDEsMjQsMTRaTTI2LjA2LDI4LjM2YTIuNSwyLjUsMCwxLDEsMi41LTIuNUEyLjUsMi41LDAsMCwxLDI2LjA2LDI4LjM2WiIvPicpLGIuQ2xyU2hhcGVNYXA9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMy41OSw2LjE5QTEsMSwwLDAsMCwzMi43LDZMMjMuMDksOSwxMy40Niw0LjExYTEsMSwwLDAsMC0uODQsMEwyLjYyLDguMkExLDEsMCwwLDAsMiw5LjEzVjI5LjYxYTEsMSwwLDAsMCwxLjM4LjkyTDEzLDI2LjU4''@;'; put 'put ''bDkuNTksNC45MmExLDEsMCwwLDAsLjQ2LjExLDEsMSwwLDAsMCwuMywwbDEwLTMuMTJhMSwxLDAsMCwwLC43LTFWN0ExLDEsMCwwLDAsMzMuNTksNi4xOVpNMzIsMjYuNzVsLTguMzIsMi42VjI3LjA2aC0xLjZ2MmwtOC40LTQuMzFWMjMuMDZoLTEuNnYxLjcyTDQsMjguMTFWOS43OWw4LjA4''@;'; put 'put ''LTMuMzNWOC44MWgxLjZWNi40N2w4LjQsNC4zdjIuMWgxLjZWMTFMMzIsOC4zNloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iMjIuMDgiIHk9IjE1LjA2IiB3aWR0aD0iMS42IiBoZWlnaHQ9IjMuODEiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMjIuMDgiIHk9IjIxLjA2IiB3aWR0aD0iMS42IiBoZWlnaHQ9IjMuODEiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtNCIgeD0iMTIuMDgiIHk9IjExLjA2IiB3aWR0aD0iMS42IiBoZWlnaHQ9IjMuODEiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTIuMDgiIHk9IjE3LjEzIiB3aWR0aD0iMS42IiBoZWln''@;'; put 'put ''aHQ9IjMuNzUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMuMzEsNy4zNSwyNSw5Ljk0VjE0SDIzVjEwLjI5TDE0LDUuNjhWOUgxMlY1LjI3bC05LjY3LDRBLjUzLjUzLDAsMCwwLDIsOS43NVYzMC40NWEuNTMu''@;'; put 'put ''NTMsMCwwLDAsLjc0LjQ5TDEyLDI3LjEyVjIzaDJ2NC41M2w5LDQuNjFWMjhoMnYzLjc5bDguNjMtMi43YS41My41MywwLDAsMCwuMzctLjUxVjcuODZBLjUzLjUzLDAsMCwwLDMzLjMxLDcuMzVaTTE0LDIxSDEyVjE3aDJabTAtNkgxMlYxMWgyWk0yNSwyNkgyM1YyMmgyWm0wLTZIMjNWMTZo''@;'; put 'put ''MloiLz4nKSxiLkNsclNoYXBlQ29tcGFzcz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuODIsMTUuMzFoMEwxMC40Niw5Yy0uNDYtLjI2LTEuMTEuMzctLjg2Ljg0bDYuMTUsMTAuNTYsMTAuNTYsNi4xNWEuNjYuNjYsMCwwLDAsLjg0LS44NlptLTQsNCwzLTMsNC41NSw3LjQ0WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0xLDI5Ljk1VjI5LjUzSDE3djIuNDJBMTQsMTQsMCwwLDEsNC4wNSwxOUg2LjQ3VjE3SDQuMDVB''@;'; put 'put ''MTQsMTQsMCwwLDEsMTcsNC4wNVY2LjQ3aDJWNC4wNUExNCwxNCwwLDAsMSwzMS45NSwxN0gyOS41M3YyaDIuNDJBMTQsMTQsMCwwLDEsMTksMzEuOTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2''@;'; put 'put ''LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTYuNDcsMTlINC4wNWMwLS4zMy0uMDUtLjY2LS4wNS0xczAtLjY3LjA1LTFINi40N1pNMTcsNC4wNWMuMzMsMCwuNjYtLjA1LDEtLjA1cy42NywwLDEsLjA1VjYuNDdIMTdabTIsMjcuOWMtLjMzLDAtLjY2LjA1LTEsLjA1cy0uNjcs''@;'; put 'put ''MC0xLS4wNVYyOS41M2gyWm04LTUuNThhLjU5LjU5LDAsMCwxLS42OS4xNkwxNS43NSwyMC4zOCw5LjYsOS44MmMtLjI1LS40Ny4zOS0xLjEuODYtLjg0bDEwLjM3LDYuMzNoMGw2LjMzLDEwLjM3QS41OS41OSwwLDAsMSwyNywyNi4zN1pNMjkuNTMsMTlWMTdoMi40MmMwLC4zMy4wNS42Ni4w''@;'; put 'put ''NSwxczAsLjY3LS4wNSwxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTYuNzcgMTkuMzUgMjQuMzUgMjMuNzcgMTkuOCAxNi4zMyAxNi43NyAxOS4zNSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlTWFwTWFya2VyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsNi43MmE1LjczLDUuNzMsMCwxLDAsNS43Myw1LjczQTUuNzMsNS43MywwLDAsMCwxOCw2Ljcy''@;'; put 'put ''Wm0wLDkuNDZhMy43MywzLjczLDAsMSwxLDMuNzMtMy43M0EzLjczLDMuNzMsMCwwLDEsMTgsMTYuMTdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyQTExLjc5LDExLjc5LDAsMCwwLDYuMjIsMTMu''@;'; put 'put ''NzNjMCw0LjY3LDIuNjIsOC41OCw0LjU0LDExLjQzbC4zNS41MmE5OS42MSw5OS42MSwwLDAsMCw2LjE0LDhsLjc2Ljg5Ljc2LS44OWE5OS44Miw5OS44MiwwLDAsMCw2LjE0LThsLjM1LS41M2MxLjkxLTIuODUsNC41My02Ljc1LDQuNTMtMTEuNDJBMTEuNzksMTEuNzksMCwwLDAsMTgsMlpN''@;'; put 'put ''MjMuNTksMjRsLS4zNi41M2MtMS43MiwyLjU4LTQsNS40Ny01LjIzLDYuOS0xLjE4LTEuNDMtMy41MS00LjMyLTUuMjMtNi45TDEyLjQyLDI0Yy0xLjc3LTIuNjQtNC4yLTYuMjUtNC4yLTEwLjMxYTkuNzgsOS43OCwwLDEsMSwxOS41NiwwQzI3Ljc4LDE3Ljc5LDI1LjM2LDIxLjQsMjMuNTks''@;'; put 'put ''MjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTgsNi43MmE1LjczLDUuNzMsMCwxLDAsNS43Myw1LjczQTUuNzMsNS43MywwLDAsMCwxOCw2LjcyWm0wLDkuNDZhMy43Mywz''@;'; put 'put ''LjczLDAsMSwxLDMuNzMtMy43M0EzLjczLDMuNzMsMCwwLDEsMTgsMTYuMTdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMjkuNzcsMTMuNDlhNy40OSw3LjQ5LDAsMCwxLTIt''@;'; put 'put ''LjMzYzAsLjE5LDAsLjM4LDAsLjU3LDAsNC4wNi0yLjQyLDcuNjctNC4xOSwxMC4zMWwtLjM2LjUzYy0xLjcyLDIuNTgtNCw1LjQ3LTUuMjMsNi45LTEuMTgtMS40My0zLjUxLTQuMzItNS4yMy02LjlMMTIuNDIsMjRjLTEuNzctMi42NC00LjItNi4yNS00LjItMTAuMzFBOS43Nyw5Ljc3LDAs''@;'; put 'put ''MCwxLDIyLjU2LDUuMDlhNy40NSw3LjQ1LDAsMCwxLC41Mi0yQTExLjc1LDExLjc1LDAsMCwwLDYuMjIsMTMuNzNjMCw0LjY3LDIuNjIsOC41OCw0LjU0LDExLjQzbC4zNS41MmE5OS42MSw5OS42MSwwLDAsMCw2LjE0LDhsLjc2Ljg5Ljc2LS44OWE5OS44Miw5OS44MiwwLDAsMCw2LjE0LThs''@;'; put 'put ''LjM1LS41M2MxLjkxLTIuODUsNC41My02Ljc1LDQuNTMtMTEuNDJDMjkuNzgsMTMuNjUsMjkuNzcsMTMuNTcsMjkuNzcsMTMuNDlaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExMS43OSwxMS43OSwwLDAsMCw2LjIyLDEzLjczYzAsNC42NywyLjYyLDguNTgsNC41NCwxMS40M2wuMzUu''@;'; put 'put ''NTJhOTkuNjEsOTkuNjEsMCwwLDAsNi4xNCw4bC43Ni44OS43Ni0uODlhOTkuODIsOTkuODIsMCwwLDAsNi4xNC04bC4zNS0uNTNjMS45MS0yLjg1LDQuNTMtNi43NSw0LjUzLTExLjQyQTExLjc5LDExLjc5LDAsMCwwLDE4LDJabTAsMTdhNi41Niw2LjU2LDAsMSwxLDYuNTYtNi41NkE2LjU2''@;'; put 'put ''LDYuNTYsMCwwLDEsMTgsMTlaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBjeD0iMTgiIGN5PSIxMi40NCIgcj0iMy43MyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMjkuNzcsMTMuNDlBNy40Nyw3LjQ3LDAsMCwxLDI0LjM4LDExYTYuNTgsNi41OCwwLDEsMS0xLjYxLTMsNy40Miw3LjQyLDAsMCwxLC4zMS00Ljg0QTExLjc1LDExLjc1LDAsMCwwLDYuMjIsMTMuNzNjMCw0LjY3LDIuNjIsOC41OCw0''@;'; put 'put ''LjU0LDExLjQzbC4zNS41MmE5OS42MSw5OS42MSwwLDAsMCw2LjE0LDhsLjc2Ljg5Ljc2LS44OWE5OS44Miw5OS44MiwwLDAsMCw2LjE0LThsLjM1LS41M2MxLjkxLTIuODUsNC41My02Ljc1LDQuNTMtMTEuNDJDMjkuNzgsMTMuNjUsMjkuNzcsMTMuNTcsMjkuNzcsMTMuNDlaIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgY3g9IjE4IiBjeT0iMTIuNDQiIHI9IjMuNzMiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+JyksYi5DbHJTaGFwZUJpY3ljbGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTguNSwyOS42NUE2LjUxLDYuNTEsMCwwLDEsMiwyMy4xNWE2LjM5LDYuMzksMCwwLDEsNi41LTYuMzZBNi4z''@;'; put 'put ''OSw2LjM5LDAsMCwxLDE1LDIzLjE1LDYuNTEsNi41MSwwLDAsMSw4LjUsMjkuNjVabTAtMTFhNC41LDQuNSwwLDEsMCw0LjUsNC41QTQuNTEsNC41MSwwLDAsMCw4LjUsMTguNjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjcuNSwy''@;'; put 'put ''OS42NWE2LjUxLDYuNTEsMCwwLDEtNi41LTYuNSw2LjUsNi41LDAsMCwxLDEzLDBBNi41MSw2LjUxLDAsMCwxLDI3LjUsMjkuNjVabTAtMTFhNC41LDQuNSwwLDEsMCw0LjUsNC41QTQuNTEsNC41MSwwLDAsMCwyNy41LDE4LjY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTIiIC8+PHBhdGggZD0iTTE5LDI0LjY2SDhhMSwxLDAsMCwxLS44OS0xLjQ1bDUtMTAsMS43OC45TDkuNjIsMjIuNzNIMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cmVjdCB4PSIxMyIgeT0iMTIuNjgiIHdpZHRoPSIxMSIgaGVpZ2h0''@;'; put 'put ''PSIxLjkxIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjgsMjQuNjZhMSwxLDAsMCwxLS45NC0uNjZMMjIuMjksMTAuNjZIMjBhMSwxLDAsMCwxLTEtMSwxLDEsMCwwLDEsMS0uOTNoM2EuOTQuOTQsMCwwLDEsLjk0LjZsNSwxNGExLDEs''@;'; put 'put ''MCwwLDEtLjYsMS4yN0ExLDEsMCwwLDEsMjgsMjQuNjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTMsMTQuNjZhMSwxLDAsMCwxLS43MS0uMjlsLTEuNy0xLjcxSDhhMSwxLDAsMCwxLTEtMSwuOTQuOTQsMCwwLDEsMS0xaDNhMS4w''@;'; put 'put ''OCwxLjA4LDAsMCwxLC43NS4yN2wyLDJhMSwxLDAsMCwxLDAsMS40MUExLDEsMCwwLDEsMTMsMTQuNjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNMTUsMjEuOWMtMC4yLTItMS4yLTMuOC0yLjktNC45bC0yLjUsNC45SDE1eiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNNy4yLDIzLjRjLTAuMi0wLjMtMC4yLTAuNywwLTFsMy4yLTYuM2MtMC42LTAuMi0xLjItMC4yLTEuOC0wLjJDNSwxNS45LDIsMTguOCwyLDIyLjRjMCwzLjYsMi45LDYuNSw2LjUsNi41XG5cdGMzLDAsNS42''@;'; put 'put ''LTIuMSw2LjMtNUg4QzcuNywyMy45LDcuMywyMy43LDcuMiwyMy40eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMTksMjEuOWgtNGMwLDAuMiwwLDAuMywwLDAuNWMwLDAuNS0wLjEsMS0wLjIsMS41SDE5VjIxLjl6IiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNy41LDE1LjljLTAuMywwLTAuNiwwLTAuOSwwLjFsMi40LDYuNmMwLjIsMC41LTAuMSwxLjEtMC42LDEuM2MtMC4xLDAtMC4yLDAuMS0wLjMsMC4xYy0wLjQsMC0wLjgtMC4zLTAuOS0wLjdsLTIuNC02Ljdcblx0Yy0zLjIs''@;'; put 'put ''MS42LTQuNSw1LjUtMyw4LjdjMS42LDMuMiw1LjUsNC41LDguNywzYzMuMi0xLjYsNC41LTUuNSwzLTguN0MzMi4yLDE3LjMsMzAsMTUuOSwyNy41LDE1Ljl6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwYXRoIGQ9Ik0yNC43LDE2LjdjMC42LTAuMywxLjMt''@;'; put 'put ''MC41LDEuOS0wLjZsLTIuNy03LjRDMjMuOCw4LjIsMjMuNCw4LDIzLDcuOWgtM2MtMC42LDAtMSwwLjUtMSwxLjFjMCwwLjUsMC40LDAuOSwxLDAuOVxuXHRjMCwwLDAsMCwwLDBoMi4zbDAuNywyaC05LjZsLTEuNy0xLjdDMTEuNSwxMC4xLDExLjMsMTAsMTEsMTBIOGMtMC42LDAtMSwwLjQt''@;'; put 'put ''MSwxczAuNCwxLDEsMWgyLjZsMS4yLDEuMmwtMS41LDNcblx0YzAuNiwwLjIsMS4zLDAuNSwxLjgsMC44bDEuNi0zLjJoMTBMMjQuNywxNi43eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz4nKSxiLkNsclNoYXBlQm9hdD0oMCxwLmNsckljb25TVkcpKCc8cGF0''@;'; put 'put ''aCBkPSJNMjkuMSwyNy4xQzI4LDI3LDI2LjksMjcuNCwyNiwyOC4yYy0xLjEsMS4xLTIuOSwxLjEtNC4xLDBjLTEtMC43LTIuMS0xLjEtMy4zLTEuMWMtMS4yLTAuMS0yLjQsMC4zLTMuMywxLjFcblx0XHRDMTQuNywyOC43LDE0LDI5LDEzLjIsMjlzLTEuNS0wLjMtMi4xLTAuOGMtMS0wLjgt''@;'; put 'put ''Mi4yLTEuMi0zLjQtMS4ycy0yLjQsMC40LTMuNCwxLjJDMy43LDI4LjcsMi44LDI5LDIsMjl2MlxuXHRcdGMxLjMsMC4xLDIuNi0wLjMsMy42LTEuMkM2LjIsMjkuMyw3LjEsMjksNy45LDI5YzAuNywwLDEuNSwwLjMsMi4xLDAuOGMxLjgsMS42LDQuNiwxLjYsNi41LDBjMC42LTAuNSwxLjMt''@;'; put 'put ''MC44LDIuMS0wLjhcblx0XHRjMC43LDAsMS40LDAuMywyLDAuOGMxLjksMS42LDQuNiwxLjYsNi41LDBjMC41LTAuNSwxLjMtMC44LDItMC44YzAuNywwLDEuNCwwLjMsMS45LDAuOGMwLjksMC43LDEuOSwxLjEsMywxLjJ2LTJcblx0XHRjLTEsMC0xLjItMC40LTEuNy0wLjhDMzEuNCwyNy41''@;'; put 'put ''LDMwLjMsMjcuMSwyOS4xLDI3LjF6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNiwyM2MwLTAuNiwwLjUtMSwxLjEtMUgzMmwtMy41LDMuMWgwLjJjMC44LDAsMS42LDAuMiwyLjIsMC41bDIuNS0yLjJsMC4yLTAuMmMwLjctMC44LDAu''@;'; put 'put ''Ni0yLjEtMC4yLTIuOFxuXHRcdEMzMywyMC4yLDMyLjYsMjAsMzIuMSwyMGgtMjVjLTEuNywwLTMsMS4zLTMsM3YzLjJjMC41LTAuNSwxLjItMC44LDEuOS0xLjFWMjN6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNOC45LDE5SDE1di03''@;'; put 'put ''LjhjMC0wLjYtMC4zLTEuMi0wLjgtMS42QzEzLjMsOC45LDEyLDkuMSwxMS40LDEwbC00LjEsNS45Yy0wLjQsMC42LTAuNCwxLjQtMC4xLDIuMUM3LjUsMTguNiw4LjIsMTksOC45LDE5XG5cdFx0eiBNMTMuMSwxMS4yTDEzLDE3SDguOUwxMy4xLDExLjJ6IiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjYsMThjMC40LTAuNiwwLjQtMS40LDAtMkwxOS43LDUuNmMtMC40LTAuNi0xLTEtMS43LTFjLTEuMSwwLTIsMC45LTIsMlYxOWg4LjNDMjUsMTksMjUuNywxOC42LDI2LDE4eiBNMTcuOSw2LjZcblx0XHRsNi40LDEwLjVoLTYu''@;'; put 'put ''NFY2LjZ6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzQsMzFjLTEuMS0wLjEtMi4xLTAuNS0zLTEuMmMtMC41LTAuNS0xLjItMC44LTItMC44Yy0wLjcsMC0xLjUsMC4zLTIsMC44Yy0wLjksMC44LTIsMS4xLTMuMSwxLjFjLTEuMiww''@;'; put 'put ''LTIuNC0wLjQtMy4zLTEuMVxuXHRjLTEuMi0xLjEtMy0xLjEtNC4xLDBjLTAuOSwwLjgtMi4xLDEuMi0zLjQsMS4yYy0xLjIsMC0yLjMtMC40LTMuMi0xLjJjLTAuNi0wLjUtMS4zLTAuOC0yLTAuOGMtMC44LDAtMS43LDAuMy0yLjMsMC44XG5cdGMtMSwwLjgtMi4zLDEuMi0zLjUsMS4xVjI5''@;'; put 'put ''YzAuOCwwLDEuNy0wLjMsMi4zLTAuOWMxLTAuOCwyLjItMS4yLDMuNC0xLjFjMS4yLDAsMi40LDAuNCwzLjMsMS4yYzEuMiwxLjEsMywxLjEsNC4yLDBcblx0YzEuOS0xLjYsNC43LTEuNiw2LjUsMGMxLjIsMS4xLDMsMS4xLDQuMSwwYzAuOS0wLjgsMi4xLTEuMiwzLjMtMS4yYzEuMSwwLDIu''@;'; put 'put ''MiwwLjQsMywxLjJDMzIuOCwyOC43LDMzLDI5LDM0LDI5TDM0LDMxeiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNNC4xLDI2LjJjMC42LTAuNSwxLjItMC44LDEuOS0xVjIzYzAtMC42LDAuNC0xLjEsMS0xLjFoMjVMMjguNCwyNWgwLjJjMC44''@;'; put 'put ''LDAsMS42LDAuMiwyLjIsMC41bDIuNS0yLjJsMC4yLTAuMlxuXHRjMC43LTAuOSwwLjUtMi4xLTAuNC0yLjhDMzIuOSwyMC4xLDMyLjQsMjAsMzIsMjBIN2MtMS43LDAtMywxLjMtMywzTDQuMSwyNi4yTDQuMSwyNi4yeiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIg''@;'; put 'put ''Lz48cGF0aCBkPSJNMTQuOSwxOC45SDguOWMtMS4xLDAtMi0wLjktMi0yYzAtMC40LDAuMS0wLjgsMC40LTEuMmw0LjEtNS44YzAuNi0wLjksMS45LTEuMSwyLjgtMC41YzAuNSwwLjQsMC44LDEsMC44LDEuNlYxOC45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIg''@;'; put 'put ''Lz48cGF0aCBkPSJNMjQuMywxOC45SDE2VjYuNGMwLTEuMSwwLjktMiwyLTJjMC43LDAsMS4zLDAuNCwxLjcsMUwyNiwxNS44YzAuNiwxLDAuMiwyLjItMC43LDIuN0MyNSwxOC43LDI0LjYsMTguOCwyNC4zLDE4Ljlcblx0TDI0LjMsMTguOXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTQiIC8+JyksYi5DbHJTaGFwZUNhbXBlcnZhbj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNOS41LDI0QzkuNSwyNCw5LjUsMjQsOS41LDI0QzcuNiwyNCw2LDI1LjYsNiwyNy41YzAsMCwwLDAsMCwwQzYsMjkuNCw3LjYsMzEsOS41LDMxYzEuOSwwLDMuNS0xLjYsMy41''@;'; put 'put ''LTMuNVxuXHRcdFMxMS40LDI0LDkuNSwyNHogTTkuNSwyOUM4LjcsMjksOCwyOC4zLDgsMjcuNVM4LjcsMjYsOS41LDI2czEuNSwwLjcsMS41LDEuNVMxMC4zLDI5LDkuNSwyOXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMy41LDI0''@;'; put 'put ''QzIzLjUsMjQsMjMuNSwyNCwyMy41LDI0Yy0xLjksMC0zLjUsMS42LTMuNSwzLjVjMCwwLDAsMCwwLDBjMCwxLjksMS41LDMuNSwzLjUsMy41YzEuOSwwLDMuNS0xLjYsMy41LTMuNVxuXHRcdFMyNS40LDI0LDIzLjUsMjR6IE0yMy41LDI5Yy0wLjgsMC0xLjUtMC43LTEuNS0xLjVzMC43LTEu''@;'; put 'put ''NSwxLjUtMS41czEuNSwwLjcsMS41LDEuNVMyNC4zLDI5LDIzLjUsMjl6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzMsMjAuMVYyMGgtMC4xbC0zLjUtNS41QzMxLDEzLjYsMzIsMTIsMzIsMTAuM1Y5LjdDMzIsNy4xLDI5LjksNSwy''@;'; put 'put ''Ny4zLDVoLTguNWMtMS45LDAtMy43LDEuMi00LjQsM0g1Yy0xLjcsMC0zLDEuMy0zLDNcblx0XHR2MTdoMlYxMWMwLTAuNiwwLjQtMSwxLTFoMTAuOUwxNiw5LjJDMTYuMyw3LjksMTcuNCw3LDE4LjcsN2g4LjVDMjguOCw3LDMwLDguMiwzMCw5Ljd2MC41YzAsMS41LTEuMiwyLjctMi43LDIu''@;'; put 'put ''N0gyNHY5aDcuOFxuXHRcdGwwLjIsMC4zVjI1YzAsMC42LTAuNCwxLTEsMWgtMnYyaDJjMS43LDAsMy0xLjMsMy0zdi0zLjNMMzMsMjAuMXogTTI2LDIwdi01aDEuNWwzLjEsNUgyNnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxyZWN0IHg9IjE5IiB5''@;'; put 'put ''PSI5IiB3aWR0aD0iOCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cG9seWdvbiBwb2ludHM9IjIwLDIyIDIyLDIyIDIyLDEzIDE1LDEzIDE1LDI4IDE3LDI4IDE3LDE1IDIwLDE1IFx0IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNNiwyMGg3di03SDZWMjB6IE04LDE1aDN2M0g4VjE1eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTkuNSwyNEM3LjYsMjQsNiwyNS42LDYsMjcuNVM3LjYsMzEsOS41LDMxYzAsMCww''@;'; put 'put ''LDAsMCwwYzEuOSwwLDMuNS0xLjYsMy41LTMuNWMwLDAsMC0wLjEsMC0wLjFDMTMsMjUuNSwxMS40LDI0LDkuNSwyNHoiXG5cdFx0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMjMuNSIgY3k9IjI3LjUiIHI9IjMuNSIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMjkuNSwxNC41QzMxLDEzLjYsMzIsMTIsMzIsMTAuMlY5LjdjMCwwLDAsMCwwLTAuMUMzMiw3LDI5LjksNSwyNy4zLDVoLTguNWMtMS45LDAtMy43LDEuMi00LjQsM0g1Yy0xLjcsMC0zLDEuMy0zLDN2MTdcblx0XHRoMlYx''@;'; put 'put ''MWMwLTAuNiwwLjQtMSwxLTFoMTAuOUwxNiw5LjJDMTYuMyw3LjksMTcuNCw3LDE4LjcsN2g4LjVDMjguOCw3LDMwLDguMiwzMCw5Ljd2MC41YzAsMS41LTEuMiwyLjctMi43LDIuN0gyN2gtM3Y5aDcuOFxuXHRcdGwwLjIsMC4zVjI1YzAsMC42LTAuNCwxLTEsMWgtMnYyaDJjMS43LDAsMy0x''@;'; put 'put ''LjMsMy0zdi0zLjNMMjkuNSwxNC41eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz48cmVjdCB4PSIxOSIgeT0iOSIgd2lkdGg9IjcuOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwb2x5Z29uIHBvaW50cz0i''@;'; put 'put ''MjAsMjIgMjEuOSwyMiAyMS45LDEzIDE1LDEzIDE1LDI4IDE2LjksMjggMTYuOSwxNSAyMCwxNSBcdCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz48cmVjdCB4PSI2IiB5PSIxMyIgd2lkdGg9IjYuOSIgaGVpZ2h0PSI3IiBjbGFzcz0iY2xyLWktc29saWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC02IiAvPicpLGIuQ2xyU2hhcGVDYXJhdmFuPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMy41LDIxQzExLDIxLDksMjMsOSwyNS41czIsNC41LDQuNSw0LjVjMi41LDAsNC41LTIsNC41LTQuNUMxOCwyMywxNiwyMSwxMy41LDIxeiBNMTMuNSwyOGMtMS40LDAt''@;'; put 'put ''Mi41LTEuMS0yLjUtMi41XG5cdFx0czEuMS0yLjUsMi41LTIuNXMyLjUsMS4xLDIuNSwyLjVTMTQuOSwyOCwxMy41LDI4eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDI0aC0ydi03LjVjMC0wLjUtMC4xLTEtMC40LTEuNWwtNC4y''@;'; put 'put ''LTcuNWMtMC41LTEtMS41LTEuNS0yLjYtMS41SDVDMy4zLDYsMiw3LjMsMiw5djE0YzAsMS43LDEuMywzLDMsM2gydi0ySDVcblx0XHRjLTAuNiwwLTEtMC40LTEtMVY5YzAtMC42LDAuNC0xLDEtMWgxOC44YzAuNCwwLDAuNywwLjIsMC45LDAuNWw0LjIsNy41YzAuMSwwLjEsMC4xLDAuMyww''@;'; put 'put ''LjEsMC41VjI0aC00VjEyaC03djhoMnYtNmgzdjEwaC0zdjJoMTNcblx0XHRjMC42LDAsMS0wLjQsMS0xUzMzLjYsMjQsMzMsMjR6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTYsMTJIN3Y2aDlWMTJ6IE0xNCwxNkg5di0yaDVWMTZ6''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMTMuNSwzMEMxMSwzMCw5LDI4LDksMjUuNXMyLTQuNSw0LjUtNC41czQuNSwyLDQuNSw0LjVDMTgsMjgsMTYsMzAsMTMuNSwzMHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTEiIC8+PHBhdGggZD0iTTMzLDI0aC0ydi03LjVjMC0wLjUtMC4xLTEtMC40LTEuNWwtNC4yLTcuNWMtMC41LTEtMS41LTEuNS0yLjYtMS41SDVDMy4zLDYsMiw3LjMsMiw5djE0YzAsMS43LDEuMywzLDMsM2gydi0ySDVcblx0Yy0wLjYsMC0xLTAuNC0xLTFWOWMwLTAuNiwwLjQtMSwx''@;'; put 'put ''LTFoMTguOGMwLjQsMCwwLjcsMC4yLDAuOSwwLjVsNC4yLDcuNWMwLjEsMC4xLDAuMSwwLjMsMC4xLDAuNVYyNGgtNFYxMmgtN3Y4aDJ2LTZoM3YxMGgtM3YyaDEzXG5cdGMwLjYsMCwxLTAuNCwxLTFTMzMuNiwyNCwzMywyNHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTIiIC8+PHBhdGggZD0iTTE2LDE4SDd2LTZoOVYxOHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksYi5DbHJTaGFwZUZlcnJ5PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOSwyNS4xYy0xLjIsMC0yLjMsMC40LTMuMywxLjFjMCwwLDAsMCwwLDBj''@;'; put 'put ''LTEuMSwxLjEtMywxLjEtNC4xLDBjLTAuOS0wLjgtMi4xLTEuMi0zLjMtMS4yYy0xLjIsMC0yLjMsMC40LTMuMiwxLjJcblx0XHRjLTEuMiwxLjEtMywxLjEtNC4yLDBDMTAsMjUuNCw4LjgsMjUsNy42LDI1Yy0xLjIsMC0yLjQsMC40LTMuNCwxLjFDMy42LDI2LjcsMi44LDI3LDIsMjd2MmMx''@;'; put 'put ''LjMsMC4xLDIuNS0wLjQsMy40LTEuMlxuXHRcdEM2LjEsMjcuMyw2LjksMjcsNy43LDI3YzAuOCwwLDEuNSwwLjMsMi4xLDAuOGMxLjksMS42LDQuNywxLjYsNi41LDBjMC42LTAuNSwxLjMtMC44LDIuMS0wLjhjMC44LDAsMS41LDAuMywyLjEsMC44XG5cdFx0YzEuOSwxLjYsNC42LDEuNiw2''@;'; put 'put ''LjUsMGMwLjUtMC41LDEuMy0wLjgsMi0wLjhjMC43LDAsMS41LDAuMywyLDAuOGMwLjksMC43LDIsMS4xLDMuMSwxLjJ2LTEuOWMtMC43LDAtMS40LTAuMy0xLjktMC45XG5cdFx0QzMxLjMsMjUuNCwzMC4xLDI1LDI5LDI1LjF6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMSIgLz48cGF0aCBkPSJNNS45LDIzLjJWMjBIMzJsLTMuNSwzaDAuMmMwLjgsMCwxLjYsMC4yLDIuMiwwLjVsMi41LTIuMmwwLjItMC4yYzAuNS0wLjYsMC41LTEuNCwwLjItMi4xYy0wLjQtMC43LTEtMS0xLjgtMWgtNC40XG5cdFx0TDIyLjUsMTFIMTdjLTEuNywwLTMsMS4zLTMs''@;'; put 'put ''M2gtMlY4LjFINnY2LjFjLTEuMiwwLjQtMiwxLjUtMiwyLjh2MS4xVjIwdjQuM2wwLjEtMC4xQzQuNiwyMy43LDUuMiwyMy40LDUuOSwyMy4yeiBNOCwxMGgydjRIOFYxMHpcblx0XHQgTTYsMTdjMC0wLjYsMC40LTEsMS0xaDl2LTJjMC0wLjYsMC40LTEsMS0xaDVsMC42LDFIMTh2Mmg1Ljhs''@;'; put 'put ''MS4yLDIuMUg2VjE3eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI4LjIsMjVjLTEuMiwwLTIuNCwwLjQtMy4zLDEuMmMtMS4yLDEuMS0zLDEuMS00LjEsMGMtMS45LTEuNi00LjYtMS42LTYuNSwwYy0xLjIsMS4xLTIuOSwxLjEtNC4x''@;'; put 'put ''LDBcblx0XHRjLTAuOS0wLjgtMi0xLjItMy4yLTEuMmMtMS4yLDAtMi4zLDAuNC0zLjIsMS4yQzMuNCwyNi43LDIuNywyNywyLDI3djJjMS4xLTAuMSwyLjItMC41LDMuMS0xLjJDNS42LDI3LjMsNi4zLDI3LDcsMjdcblx0XHRjMC43LDAsMS41LDAuMywyLDAuOGMxLjksMS42LDQuNywxLjYs''@;'; put 'put ''Ni42LDBjMC42LTAuNSwxLjMtMC44LDIuMS0wLjhjMC44LDAsMS41LDAuMywyLjEsMC44YzEuOSwxLjYsNC43LDEuNiw2LjUsMFxuXHRcdGMwLjYtMC41LDEuMy0wLjgsMi4xLTAuOGMwLjgsMCwxLjYsMC4zLDIuMSwwLjhjMC45LDAuOCwyLjIsMS4zLDMuNCwxLjJ2LTJjLTAuOCwwLTEuNi0w''@;'; put 'put ''LjMtMi4yLTAuOEMzMC43LDI1LjQsMjkuNSwyNSwyOC4yLDI1eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNNS44LDIzLjJ2LTMuM2gyNi4xTDI4LjQsMjNoMC4yYzAuOCwwLDEuNiwwLjIsMi4yLDAuNWwyLjUtMi4ybDAuMS0wLjJjMC43LTAu''@;'; put 'put ''OSwwLjUtMi4xLTAuNC0yLjhjLTAuMy0wLjMtMC44LTAuNC0xLjItMC40XG5cdFx0aC00LjFsLTUuNC03aC01LjVjLTEuNywwLTMsMS4zLTMsM2gtMlY4SDZ2Ni4yYy0xLjIsMC40LTIuMSwxLjUtMi4xLDIuOGwwLDcuMmwwLjEsMEM0LjUsMjMuNyw1LjEsMjMuNCw1LjgsMjMuMnogTTE3Ljks''@;'; put 'put ''MTRoNC4yXG5cdFx0bDEuNCwyaC01LjdWMTR6IE03LjksMTBoMnY0aC0yVjEweiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlVHJhaWxlcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUsMTkuMmMtMy4yLDAtNS44LDIuNi01Ljgs''@;'; put 'put ''NS44czIuNiw1LjgsNS44LDUuOHM1LjgtMi42LDUuOC01LjhTMTguMiwxOS4yLDE1LDE5LjJ6IE0xNSwyOS4yYy0yLjMsMC00LjItMS45LTQuMi00LjJcblx0XHRzMS45LTQuMiw0LjItNC4yczQuMiwxLjksNC4yLDQuMlMxNy4zLDI5LjIsMTUsMjkuMnoiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxyZWN0IHg9IjE0IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMzLDlIMnYxMy4xYzAsMCwwLDAsMCwwQzIsMjQuMywzLjcsMjYsNS45LDI2''@;'; put 'put ''SDd2LTJINS45Yy0xLDAtMS44LTAuOC0xLjktMS45VjE1aDIydjcuMWMwLDEtMC44LDEuOC0xLjksMS45SDIzdjJoMS4xXG5cdFx0YzAsMCwwLDAsMCwwYzIuMSwwLDMuOC0xLjcsMy44LTMuOVYxMWg1YzAuNiwwLDEtMC40LDEtMVMzMy42LDksMzMsOXogTTI2LDEzSDR2LTJoMjJWMTN6IiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzMsOUgydjEzLjFjMCwwLDAsMCwwLDBDMiwyNC4zLDMuNywyNiw1LjksMjZIN3YtMkg1LjljLTEsMC0xLjgtMC44LTEuOS0xLjlWMTVoMjJ2Ny4xYzAsMS0wLjgsMS44LTEuOSwxLjlIMjN2Mmgx''@;'; put 'put ''LjFcblx0YzAsMCwwLDAsMCwwYzIuMSwwLDMuOC0xLjcsMy44LTMuOVYxMWg1YzAuNiwwLDEtMC40LDEtMVMzMy42LDksMzMsOXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE1LDE5LjJjLTMuMiwwLTUuOCwyLjYtNS44LDUuOHMyLjYsNS44''@;'; put 'put ''LDUuOCw1LjhzNS44LTIuNiw1LjgtNS44bDAsMEMyMC44LDIxLjgsMTguMiwxOS4yLDE1LDE5LjJ6IE0xNiwyNmgtMnYtMmgyVjI2eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlT25Ib2xpZGF5PSgwLHAuY2xySWNvblNWRykoJzxwYXRo''@;'; put 'put ''IGQ9Ik0xOC4wOCwyLjM0Yy04LjgyLDAtMTYsNi4yOC0xNiwxNHM3LjE4LDE0LDE2LDE0QTE3LjkxLDE3LjkxLDAsMCwwLDIzLDI5LjY2bDUuNTMsMy41MmExLDEsMCwwLDAsMS4zOC0uMywxLDEsMCwwLDAsLjE2LS41NFYyNS42MWExMywxMywwLDAsMCw0LTkuMjdDMzQuMDgsOC42MiwyNi45''@;'; put 'put ''LDIuMzQsMTguMDgsMi4zNFpNMjguMzcsMjQuNDVhMSwxLDAsMCwwLS4zMi43M3Y1LjM0bC00LjM4LTIuNzlhMSwxLDAsMCwwLS44My0uMTEsMTYsMTYsMCwwLDEtNC43Ni43MmMtNy43MiwwLTE0LTUuMzgtMTQtMTJzNi4yOC0xMiwxNC0xMiwxNCw1LjM4LDE0LDEyQTExLjEsMTEuMSwwLDAs''@;'; put 'put ''MSwyOC4zNywyNC40NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0zMS4xLDE1LjgyLDMxLDE1LjY3LDI4LjUsMTMuNDRhMy4yNSwzLjI1LDAsMCwwLTIuMzktLjg0bC01LjM4LjM0LTMuNTktM2EuODEuODEsMCwwLDAtLjUyLS4x''@;'; put 'put ''OUgxMy41NmEuNzguNzgsMCwwLDAtLjY5LjQuNzcuNzcsMCwwLDAsMCwuNzlsMS4zNiwyLjQ0LTQuNzEuMjksMS4zMSwxLjUyLDE1LjM5LTFhMS42NSwxLjY1LDAsMCwxLDEuMjIuNDNsMi4zNiwyLjEzYS4xMS4xMSwwLDAsMSwwLC4wN2MwLC4wNi0uMDkuMDUtLjEuMDZIMjEuODJsLS4zNS4z''@;'; put 'put ''Ny01LjE5LDUuNTNIMTQuNjRsMi43My01LjlIOC41NEw3LjEzLDE0LjE2LDYuNTEsMTNhLjguOCwwLDAsMC0xLS4yQS44MS44MSwwLDAsMCw1LjIsMTMuOWwyLDMuOTRhMS4yMSwxLjIxLDAsMCwwLDEuMDguNjVoNi41N2wtMS45NCw0LjE4QTEuMiwxLjIsMCwwLDAsMTMsMjMuODNhMS4yMiwx''@;'; put 'put ''LjIyLDAsMCwwLDEsLjU2aDIuNDNhMS4xNywxLjE3LDAsMCwwLC44OC0uMzlsNS4xOC01LjUxaDcuMTZhMS42NSwxLjY1LDAsMCwwLDEuNTItLjkxQTEuNzQsMS43NCwwLDAsMCwzMS4xLDE1LjgyWk0xNC45MiwxMS4zMWgxLjQxbDIuMDksMS43N0wxNiwxMy4yM1oiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIFxuICA8cGF0aCBkPSJNMTgsMi41Yy04LjgyLDAtMTYsNi4yOC0xNiwxNHM3LjE4LDE0LDE2LDE0YTE3LjkxLDE3LjkxLDAsMCwwLDQuODgtLjY4bDUuNTMsMy41MmExLDEsMCwwLDAsMS4zOC0uM0ExLDEsMCwwLDAsMzAsMzIuNVYy''@;'; put 'put ''NS43N2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wk0yOS44NCwxOEgyMS41MWEuNDIuNDIsMCwwLDAtLjMuMTNsLTUuMyw1LjY0YS4zOS4zOSwwLDAsMS0uMjkuMTNIMTMuMTlhLjQxLjQxLDAsMCwxLS4zNy0uNThsMi40Ny01LjMySDcuNDZhLjQyLjQyLDAs''@;'; put 'put ''MCwxLS4zNi0uMjJsLTIuNy01SDYuMjRhLjUzLjUzLDAsMCwxLC4zOS4xOGwxLjU2LDEuNjlhLjM4LjM4LDAsMCwwLC4zMy4xNGw2LjE4LS4zOC0yLTMuNTVoMi44OWEuNDcuNDcsMCwwLDEsLjMxLjExTDE5LjYzLDE0bDYuNjktLjM1YTIuNDQsMi40NCwwLDAsMSwxLjgxLjYzbDIuNDcsMi4y''@;'; put 'put ''M0EuOTIuOTIsMCwwLDEsMjkuODQsMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICcpLGIuVHJhdmVsU2hhcGVzPXt0cnVjazpiLkNsclNoYXBlVHJ1Y2ssYWlycGxhbmU6Yi5DbHJTaGFwZUFpcnBsYW5lLGNhcjpiLkNsclNoYXBlQ2FyLG1hcDpiLkNs''@;'; put 'put ''clNoYXBlTWFwLGNvbXBhc3M6Yi5DbHJTaGFwZUNvbXBhc3MsIm1hcC1tYXJrZXIiOmIuQ2xyU2hhcGVNYXBNYXJrZXIsYmljeWNsZTpiLkNsclNoYXBlQmljeWNsZSxib2F0OmIuQ2xyU2hhcGVCb2F0LGNhbXBlcnZhbjpiLkNsclNoYXBlQ2FtcGVydmFuLGNhcmF2YW46Yi5DbHJTaGFwZUNh''@;'; put 'put ''cmF2YW4sZmVycnk6Yi5DbHJTaGFwZUZlcnJ5LHRyYWlsZXI6Yi5DbHJTaGFwZVRyYWlsZXIsIm9uLWhvbGlkYXkiOmIuQ2xyU2hhcGVPbkhvbGlkYXl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLlRyYXZlbFNoYXBlcywicGxhbmUiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5UcmF2ZWxT''@;'; put 'put ''aGFwZXMuYWlycGxhbmUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5UcmF2ZWxTaGFwZXMsImF1dG8iLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5UcmF2ZWxTaGFwZXMuY2FyKSksdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgiQ2xhcml0eUljb25zIikmJndp''@;'; put 'put ''bmRvdy5DbGFyaXR5SWNvbnMuYWRkKGIuVHJhdmVsU2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAg''@;'; put 'put ''ICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3Vu''@;'; put 'put ''ZCAqL2Z1bmN0aW9uKFgsYixJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGIuZGVzY3JpcHRvckNvbmZpZz12b2lkIDAsYi5kZXNjcmlwdG9yQ29uZmlnPWZ1bmN0aW9uIF8ocCl7cmV0dXJue2VudW1lcmFibGU6ITAsd3Jp''@;'; put 'put ''dGFibGU6ITAsY29uZmlndXJhYmxlOiEwLHZhbHVlOnB9fX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAg''@;'; put 'put ''ICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAq''@;'; put 'put ''L2Z1bmN0aW9uKFgsYixJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGIuY2xySWNvblNWRz12b2lkIDA7Yi5jbHJJY29uU1ZHPWZ1bmN0aW9uIHcoUCl7dmFyIEY9IiI7cmV0dXJuIFAuaW5kZXhPZigiLS1iYWRnZWQiKT4t''@;'; put 'put ''MSYmKEYrPSJjYW4tYmFkZ2UgIiksUC5pbmRleE9mKCItLWFsZXJ0ZWQiKT4tMSYmKEYrPSJjYW4tYWxlcnQgIiksUC5pbmRleE9mKCJjbHItaS1zb2xpZCIpPi0xJiYoRis9Imhhcy1zb2xpZCAiKSwoRj8nPHN2ZyB2ZXJzaW9uPSIxLjEiIGNsYXNzPSInK0YrJyIgdmlld0JveD0iMCAwIDM2''@;'; put 'put ''IDM2IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCBtZWV0IlxuICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9ImltZyI+JzonPHN2ZyB2ZXJz''@;'; put 'put ''aW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAzNiAzNiIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCJcbiAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmb2N1c2FibGU9ImZhbHNl''@;'; put 'put ''IiByb2xlPSJpbWciPicpK1ArIjwvc3ZnPiJ9fX0pfSw4MDc1NzpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImV1Iix7bW9udGhzOiJ1cnRhcnJpbGFfb3RzYWlsYV9tYXJ0eG9hX2FwaXJpbGFfbWFpYXR6YV9la2FpbmFfdXp0YWls''@;'; put 'put ''YV9hYnV6dHVhX2lyYWlsYV91cnJpYV9hemFyb2FfYWJlbmR1YSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoidXJ0Ll9vdHMuX21hci5fYXBpLl9tYWkuX2VrYS5fdXp0Ll9hYnUuX2lyYS5fdXJyLl9hemEuX2FiZS4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoi''@;'; put 'put ''aWdhbmRlYV9hc3RlbGVoZW5hX2FzdGVhcnRlYV9hc3RlYXprZW5hX29zdGVndW5hX29zdGlyYWxhX2xhcnVuYmF0YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJpZy5fYWwuX2FyLl9hei5fb2cuX29sLl9sci4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImlnX2FsX2FyX2F6X29nX29s''@;'; put 'put ''X2xyIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiWVlZWVtrb10gTU1NTVtyZW5dIERbYV0iLExMTDoiWVlZWVtrb10gTU1NTVtyZW5dIERbYV0gSEg6bW0iLExMTEw6''@;'; put 'put ''ImRkZGQsIFlZWVlba29dIE1NTU1bcmVuXSBEW2FdIEhIOm1tIixsOiJZWVlZLU0tRCIsbGw6IllZWVlba29dIE1NTSBEW2FdIixsbGw6IllZWVlba29dIE1NTSBEW2FdIEhIOm1tIixsbGxsOiJkZGQsIFlZWVlba29dIE1NTSBEW2FdIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltnYXVy''@;'; put 'put ''XSBMVFtldGFuXSIsbmV4dERheToiW2JpaGFyXSBMVFtldGFuXSIsbmV4dFdlZWs6ImRkZGQgTFRbZXRhbl0iLGxhc3REYXk6IlthdHpvXSBMVFtldGFuXSIsbGFzdFdlZWs6IlthdXJyZWtvXSBkZGRkIExUW2V0YW5dIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBi''@;'; put 'put ''YXJydSIscGFzdDoiZHVlbGEgJXMiLHM6InNlZ3VuZG8gYmF0enVrIixzczoiJWQgc2VndW5kbyIsbToibWludXR1IGJhdCIsbW06IiVkIG1pbnV0dSIsaDoib3JkdSBiYXQiLGhoOiIlZCBvcmR1IixkOiJlZ3VuIGJhdCIsZGQ6IiVkIGVndW4iLE06ImhpbGFiZXRlIGJhdCIsTU06IiVkIGhp''@;'; put 'put ''bGFiZXRlIix5OiJ1cnRlIGJhdCIseXk6IiVkIHVydGUifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGIoOTc1ODYpKX0sODA5NzU6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1NYXRoLnBvd30sODEy''@;'; put 'put ''NjA6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7YigyNjM1Nyl9LDgxMzExOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgibm4iLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcnNfYXByaWxfbWFpX2p1bmlfanVsaV9hdWd1c3Rfc2Vw''@;'; put 'put ''dGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbi5fZmViLl9tYXJzX2Fwci5fbWFpX2p1bmlfanVsaV9hdWcuX3NlcC5fb2t0Ll9ub3YuX2Rlcy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoic3VuZGFn''@;'; put 'put ''X21ceGU1bmRhZ190eXNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2xhdXJkYWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic3UuX21ceGU1Ll90eS5fb24uX3RvLl9mci5fbGF1LiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoic3VfbVx4ZTVfdHlfb25fdG9fZnJfbGEiLnNwbGl0KCJf''@;'; put 'put ''Iiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIFtrbC5dIEg6bW0iLExMTEw6ImRkZGQgRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1t''@;'; put 'put ''In0sY2FsZW5kYXI6e3NhbWVEYXk6IltJIGRhZyBrbG9ra2FdIExUIixuZXh0RGF5OiJbSSBtb3Jnb24ga2xva2thXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2tsb2trYV0gTFQiLGxhc3REYXk6IltJIGdceGU1ciBrbG9ra2FdIExUIixsYXN0V2VlazoiW0ZceGY4cmVnXHhlNWFuZGVdIGRkZGQg''@;'; put 'put ''W2tsb2trYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im9tICVzIixwYXN0OiIlcyBzaWRhbiIsczoibm9rcmUgc2VrdW5kIixzczoiJWQgc2VrdW5kIixtOiJlaXQgbWludXR0IixtbToiJWQgbWludXR0IixoOiJlaW4gdGltZSIsaGg6IiVkIHRpbWFyIixkOiJl''@;'; put 'put ''aW4gZGFnIixkZDoiJWQgZGFnYXIiLHc6ImVpIHZla2UiLHd3OiIlZCB2ZWtlciIsTToiZWluIG1ceGU1bmFkIixNTToiJWQgbVx4ZTVuYWRlciIseToiZWl0IFx4ZTVyIix5eToiJWQgXHhlNXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vl''@;'; put 'put ''azp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sODE1MTY6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPSJlbmUuX2ZlYi5fbWFyLl9hYnIuX21heS5fanVuLl9qdWwuX2Fnby5fc2VwLl9vY3QuX25vdi5fZGljLiIuc3BsaXQoIl8iKSxwPSJlbmVf''@;'; put 'put ''ZmViX21hcl9hYnJfbWF5X2p1bl9qdWxfYWdvX3NlcF9vY3Rfbm92X2RpYyIuc3BsaXQoIl8iKSxWPVsvXmVuZS9pLC9eZmViL2ksL15tYXIvaSwvXmFici9pLC9ebWF5L2ksL15qdW4vaSwvXmp1bC9pLC9eYWdvL2ksL15zZXAvaSwvXm9jdC9pLC9ebm92L2ksL15kaWMvaV0sdz0vXihlbmVy''@;'; put 'put ''b3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlfGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGlj''@;'; put 'put ''XC4/KS9pO0kuZGVmaW5lTG9jYWxlKCJlcy11cyIse21vbnRoczoiZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDpmdW5jdGlvbihGLFIp''@;'; put 'put ''e3JldHVybiBGPy8tTU1NLS8udGVzdChSKT9wW0YubW9udGgoKV06X1tGLm1vbnRoKCldOl99LG1vbnRoc1JlZ2V4OncsbW9udGhzU2hvcnRSZWdleDp3LG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGll''@;'; put 'put ''bWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaSxtb250aHNQYXJzZTpWLGxv''@;'; put 'put ''bmdNb250aHNQYXJzZTpWLHNob3J0TW9udGhzUGFyc2U6Vix3ZWVrZGF5czoiZG9taW5nb19sdW5lc19tYXJ0ZXNfbWlceGU5cmNvbGVzX2p1ZXZlc192aWVybmVzX3NceGUxYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb20uX2x1bi5fbWFyLl9taVx4ZTkuX2p1ZS5fdmllLl9z''@;'; put 'put ''XHhlMWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9taV9qdV92aV9zXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJNTS9ERC9ZWVlZIixMTDoiRCBbZGVdIE1NTU0g''@;'; put 'put ''W2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVybiJbaG95IGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0g''@;'; put 'put ''TFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIlttYVx4ZjFhbmEgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0RGF5OmZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIltheWVyIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxh''@;'; put 'put ''dGl2ZVRpbWU6e2Z1dHVyZToiZW4gJXMiLHBhc3Q6ImhhY2UgJXMiLHM6InVub3Mgc2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW4gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW5hIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW4gZFx4ZWRhIixkZDoiJWQgZFx4ZWRhcyIsdzoi''@;'; put 'put ''dW5hIHNlbWFuYSIsd3c6IiVkIHNlbWFuYXMiLE06InVuIG1lcyIsTU06IiVkIG1lc2VzIix5OiJ1biBhXHhmMW8iLHl5OiIlZCBhXHhmMW9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjAsZG95OjZ9fSl9KGIoOTc1''@;'; put 'put ''ODYpKX0sODIzMDY6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigyODM2NyksXz1iKDMzOTYzKSxwPWIoNzU5Nikuc2V0LFY9Yig0MzI0OSksdz1fLnNldEltbWVkaWF0ZT9WKHAsITEpOnA7SSh7Z2xvYmFsOiEwLGJpbmQ6ITAsZW51bWVyYWJsZTohMCxmb3JjZWQ6Xy5zZXRJbW1l''@;'; put 'put ''ZGlhdGUhPT13fSx7c2V0SW1tZWRpYXRlOnd9KX0sODI2ODU6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIFAsTixJPWIoMjcwNTQpLkJ1ZmZlcixfPWIoODYxMTEpLHA9Yig0NTM5MiksVj1iKDU5MTExKSx3PWIoNzY2NDMpLEY9Z2xvYmFsLmNyeXB0byYmZ2xvYmFsLmNyeXB0by5zdWJ0''@;'; put 'put ''bGUsUj17c2hhOiJTSEEtMSIsInNoYS0xIjoiU0hBLTEiLHNoYTE6IlNIQS0xIixzaGEyNTY6IlNIQS0yNTYiLCJzaGEtMjU2IjoiU0hBLTI1NiIsc2hhMzg0OiJTSEEtMzg0Iiwic2hhLTM4NCI6IlNIQS0zODQiLCJzaGEtNTEyIjoiU0hBLTUxMiIsc2hhNTEyOiJTSEEtNTEyIn0sej1bXTtm''@;'; put 'put ''dW5jdGlvbiBPKCl7cmV0dXJuIE58fChOPWdsb2JhbC5wcm9jZXNzJiZnbG9iYWwucHJvY2Vzcy5uZXh0VGljaz9nbG9iYWwucHJvY2Vzcy5uZXh0VGljazpnbG9iYWwucXVldWVNaWNyb3Rhc2s/Z2xvYmFsLnF1ZXVlTWljcm90YXNrOmdsb2JhbC5zZXRJbW1lZGlhdGU/Z2xvYmFsLnNldElt''@;'; put 'put ''bWVkaWF0ZTpnbG9iYWwuc2V0VGltZW91dCl9ZnVuY3Rpb24gSyhXLHEsZWUsSixyZSl7cmV0dXJuIEYuaW1wb3J0S2V5KCJyYXciLFcse25hbWU6IlBCS0RGMiJ9LCExLFsiZGVyaXZlQml0cyJdKS50aGVuKGZ1bmN0aW9uKGllKXtyZXR1cm4gRi5kZXJpdmVCaXRzKHtuYW1lOiJQQktERjIi''@;'; put 'put ''LHNhbHQ6cSxpdGVyYXRpb25zOmVlLGhhc2g6e25hbWU6cmV9fSxpZSxKPDwzKX0pLnRoZW4oZnVuY3Rpb24oaWUpe3JldHVybiBJLmZyb20oaWUpfSl9Y2UuZXhwb3J0cz1mdW5jdGlvbihXLHEsZWUsSixyZSxpZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHJlJiYoaWU9cmUscmU9dm9pZCAw''@;'; put 'put ''KSxfKGVlLEopLFc9dyhXLHAsIlBhc3N3b3JkIikscT13KHEscCwiU2FsdCIpLCJmdW5jdGlvbiIhPXR5cGVvZiBpZSl0aHJvdyBuZXcgRXJyb3IoIk5vIGNhbGxiYWNrIHByb3ZpZGVkIHRvIHBia2RmMiIpO3ZhciB1ZT1SWyhyZT1yZXx8InNoYTEiKS50b0xvd2VyQ2FzZSgpXTt1ZSYmImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIGdsb2JhbC5Qcm9taXNlP2Z1bmN0aW9uIFkoVyxxKXtXLnRoZW4oZnVuY3Rpb24oZWUpe08oKShmdW5jdGlvbigpe3EobnVsbCxlZSl9KX0sZnVuY3Rpb24oZWUpe08oKShmdW5jdGlvbigpe3EoZWUpfSl9KX0oZnVuY3Rpb24gWihXKXtpZihnbG9iYWwucHJvY2Vz''@;'; put 'put ''cyYmIWdsb2JhbC5wcm9jZXNzLmJyb3dzZXJ8fCFGfHwhRi5pbXBvcnRLZXl8fCFGLmRlcml2ZUJpdHMpcmV0dXJuIFByb21pc2UucmVzb2x2ZSghMSk7aWYodm9pZCAwIT09eltXXSlyZXR1cm4geltXXTt2YXIgcT1LKFA9UHx8SS5hbGxvYyg4KSxQLDEwLDEyOCxXKS50aGVuKGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuITB9LGZ1bmN0aW9uKCl7cmV0dXJuITF9KTtyZXR1cm4geltXXT1xLHF9KHVlKS50aGVuKGZ1bmN0aW9uKGdlKXtyZXR1cm4gZ2U/SyhXLHEsZWUsSix1ZSk6VihXLHEsZWUsSixyZSl9KSxpZSk6TygpKGZ1bmN0aW9uKCl7dmFyIGdlO3RyeXtnZT1WKFcscSxlZSxKLHJlKX1j''@;'; put 'put ''YXRjaChfZSl7cmV0dXJuIHZvaWQgaWUoX2UpfWllKG51bGwsZ2UpfSl9fSw4MjgzNDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDU1NTkyKTtjZS5leHBvcnRzPSFJKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gXygpe31yZXR1cm4gXy5wcm90b3R5cGUuY29uc3RydWN0b3I9bnVsbCxP''@;'; put 'put ''YmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IF8pIT09Xy5wcm90b3R5cGV9KX0sODI4ODE6Y2U9PntmdW5jdGlvbiBiKEkpe2Z1bmN0aW9uIF8ocCl7aWYoT2JqZWN0KHApIT09cClyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcihwKyIgaXMgbm90IGFuIG9iamVjdC4iKSk7dmFy''@;'; put 'put ''IFY9cC5kb25lO3JldHVybiBQcm9taXNlLnJlc29sdmUocC52YWx1ZSkudGhlbihmdW5jdGlvbih3KXtyZXR1cm57dmFsdWU6dyxkb25lOlZ9fSl9cmV0dXJuKGI9ZnVuY3Rpb24oVil7dGhpcy5zPVYsdGhpcy5uPVYubmV4dH0pLnByb3RvdHlwZT17czpudWxsLG46bnVsbCxuZXh0OmZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIF8odGhpcy5uLmFwcGx5KHRoaXMucyxhcmd1bWVudHMpKX0scmV0dXJuOmZ1bmN0aW9uKFYpe3ZhciB3PXRoaXMucy5yZXR1cm47cmV0dXJuIHZvaWQgMD09PXc/UHJvbWlzZS5yZXNvbHZlKHt2YWx1ZTpWLGRvbmU6ITB9KTpfKHcuYXBwbHkodGhpcy5zLGFyZ3VtZW50''@;'; put 'put ''cykpfSx0aHJvdzpmdW5jdGlvbihWKXt2YXIgdz10aGlzLnMucmV0dXJuO3JldHVybiB2b2lkIDA9PT13P1Byb21pc2UucmVqZWN0KFYpOl8ody5hcHBseSh0aGlzLnMsYXJndW1lbnRzKSl9fSxuZXcgYihJKX1jZS5leHBvcnRzPWZ1bmN0aW9uIFgoSSl7dmFyIF8scCxWLHc9Mjtmb3IodHlw''@;'; put 'put ''ZW9mIFN5bWJvbDwidSImJihwPVN5bWJvbC5hc3luY0l0ZXJhdG9yLFY9U3ltYm9sLml0ZXJhdG9yKTt3LS07KXtpZihwJiZudWxsIT0oXz1JW3BdKSlyZXR1cm4gXy5jYWxsKEkpO2lmKFYmJm51bGwhPShfPUlbVl0pKXJldHVybiBuZXcgYihfLmNhbGwoSSkpO3A9IkBAYXN5bmNJdGVyYXRv''@;'; put 'put ''ciIsVj0iQEBpdGVyYXRvciJ9dGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGlzIG5vdCBhc3luYyBpdGVyYWJsZSIpfSxjZS5leHBvcnRzLl9fZXNNb2R1bGU9ITAsY2UuZXhwb3J0cy5kZWZhdWx0PWNlLmV4cG9ydHN9LDgzMDQ1OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIo''@;'; put 'put ''NTI1MjkpLF89YigyMzQwMSkscD1iKDMxMzYpLFY9cC5hc3NlcnQsdz1wLnBhcnNlQnl0ZXMsUD1iKDg3MjIyKSxGPWIoNTQ1MSk7ZnVuY3Rpb24gUih6KXtpZihWKCJlZDI1NTE5Ij09PXosIm9ubHkgdGVzdGVkIHdpdGggZWQyNTUxOSBzbyBmYXIiKSwhKHRoaXMgaW5zdGFuY2VvZiBSKSly''@;'; put 'put ''ZXR1cm4gbmV3IFIoeik7dGhpcy5jdXJ2ZT16PV9bel0uY3VydmUsdGhpcy5nPXouZyx0aGlzLmcucHJlY29tcHV0ZSh6Lm4uYml0TGVuZ3RoKCkrMSksdGhpcy5wb2ludENsYXNzPXoucG9pbnQoKS5jb25zdHJ1Y3Rvcix0aGlzLmVuY29kaW5nTGVuZ3RoPU1hdGguY2VpbCh6Lm4uYml0TGVu''@;'; put 'put ''Z3RoKCkvOCksdGhpcy5oYXNoPUkuc2hhNTEyfWNlLmV4cG9ydHM9UixSLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKE4sTyl7Tj13KE4pO3ZhciBLPXRoaXMua2V5RnJvbVNlY3JldChPKSxaPXRoaXMuaGFzaEludChLLm1lc3NhZ2VQcmVmaXgoKSxOKSxZPXRoaXMuZy5tdWwoWiksVz10aGlz''@;'; put 'put ''LmVuY29kZVBvaW50KFkpLHE9dGhpcy5oYXNoSW50KFcsSy5wdWJCeXRlcygpLE4pLm11bChLLnByaXYoKSksZWU9Wi5hZGQocSkudW1vZCh0aGlzLmN1cnZlLm4pO3JldHVybiB0aGlzLm1ha2VTaWduYXR1cmUoe1I6WSxTOmVlLFJlbmNvZGVkOld9KX0sUi5wcm90b3R5cGUudmVyaWZ5PWZ1''@;'; put 'put ''bmN0aW9uKE4sTyxLKXtpZihOPXcoTiksKE89dGhpcy5tYWtlU2lnbmF0dXJlKE8pKS5TKCkuZ3RlKE8uZWRkc2EuY3VydmUubil8fE8uUygpLmlzTmVnKCkpcmV0dXJuITE7dmFyIFo9dGhpcy5rZXlGcm9tUHVibGljKEspLFk9dGhpcy5oYXNoSW50KE8uUmVuY29kZWQoKSxaLnB1YkJ5dGVz''@;'; put 'put ''KCksTiksVz10aGlzLmcubXVsKE8uUygpKTtyZXR1cm4gTy5SKCkuYWRkKFoucHViKCkubXVsKFkpKS5lcShXKX0sUi5wcm90b3R5cGUuaGFzaEludD1mdW5jdGlvbigpe2Zvcih2YXIgTj10aGlzLmhhc2goKSxPPTA7Tzxhcmd1bWVudHMubGVuZ3RoO08rKylOLnVwZGF0ZShhcmd1bWVudHNb''@;'; put 'put ''T10pO3JldHVybiBwLmludEZyb21MRShOLmRpZ2VzdCgpKS51bW9kKHRoaXMuY3VydmUubil9LFIucHJvdG90eXBlLmtleUZyb21QdWJsaWM9ZnVuY3Rpb24oTil7cmV0dXJuIFAuZnJvbVB1YmxpYyh0aGlzLE4pfSxSLnByb3RvdHlwZS5rZXlGcm9tU2VjcmV0PWZ1bmN0aW9uKE4pe3JldHVy''@;'; put 'put ''biBQLmZyb21TZWNyZXQodGhpcyxOKX0sUi5wcm90b3R5cGUubWFrZVNpZ25hdHVyZT1mdW5jdGlvbihOKXtyZXR1cm4gTiBpbnN0YW5jZW9mIEY/TjpuZXcgRih0aGlzLE4pfSxSLnByb3RvdHlwZS5lbmNvZGVQb2ludD1mdW5jdGlvbihOKXt2YXIgTz1OLmdldFkoKS50b0FycmF5KCJsZSIs''@;'; put 'put ''dGhpcy5lbmNvZGluZ0xlbmd0aCk7cmV0dXJuIE9bdGhpcy5lbmNvZGluZ0xlbmd0aC0xXXw9Ti5nZXRYKCkuaXNPZGQoKT8xMjg6MCxPfSxSLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbihOKXt2YXIgTz0oTj1wLnBhcnNlQnl0ZXMoTikpLmxlbmd0aC0xLEs9Ti5zbGljZSgwLE8p''@;'; put 'put ''LmNvbmNhdCgtMTI5Jk5bT10pLFo9ISEoMTI4Jk5bT10pLFk9cC5pbnRGcm9tTEUoSyk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnRGcm9tWShZLFopfSxSLnByb3RvdHlwZS5lbmNvZGVJbnQ9ZnVuY3Rpb24oTil7cmV0dXJuIE4udG9BcnJheSgibGUiLHRoaXMuZW5jb2RpbmdMZW5ndGgpfSxS''@;'; put 'put ''LnByb3RvdHlwZS5kZWNvZGVJbnQ9ZnVuY3Rpb24oTil7cmV0dXJuIHAuaW50RnJvbUxFKE4pfSxSLnByb3RvdHlwZS5pc1BvaW50PWZ1bmN0aW9uKE4pe3JldHVybiBOIGluc3RhbmNlb2YgdGhpcy5wb2ludENsYXNzfX0sODMxMzg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0''@;'; put 'put ''OTYwOSk7WC5jZXJ0aWZpY2F0ZT1iKDk0NzcyKTt2YXIgXz1JLmRlZmluZSgiUlNBUHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJtb2R1bHVzIikuaW50KCksdGhpcy5rZXkoInB1YmxpY0V4cG9uZW50Iiku''@;'; put 'put ''aW50KCksdGhpcy5rZXkoInByaXZhdGVFeHBvbmVudCIpLmludCgpLHRoaXMua2V5KCJwcmltZTEiKS5pbnQoKSx0aGlzLmtleSgicHJpbWUyIikuaW50KCksdGhpcy5rZXkoImV4cG9uZW50MSIpLmludCgpLHRoaXMua2V5KCJleHBvbmVudDIiKS5pbnQoKSx0aGlzLmtleSgiY29lZmZpY2ll''@;'; put 'put ''bnQiKS5pbnQoKSl9KTtYLlJTQVByaXZhdGVLZXk9Xzt2YXIgcD1JLmRlZmluZSgiUlNBUHVibGljS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJtb2R1bHVzIikuaW50KCksdGhpcy5rZXkoInB1YmxpY0V4cG9uZW50IikuaW50KCkpfSk7WC5SU0FQdWJsaWNLZXk9''@;'; put 'put ''cDt2YXIgVj1JLmRlZmluZSgiQWxnb3JpdGhtSWRlbnRpZmllciIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikub2JqaWQoKSx0aGlzLmtleSgibm9uZSIpLm51bGxfKCkub3B0aW9uYWwoKSx0aGlzLmtleSgiY3VydmUiKS5vYmppZCgpLm9wdGlvbmFs''@;'; put 'put ''KCksdGhpcy5rZXkoInBhcmFtcyIpLnNlcSgpLm9iaih0aGlzLmtleSgicCIpLmludCgpLHRoaXMua2V5KCJxIikuaW50KCksdGhpcy5rZXkoImciKS5pbnQoKSkub3B0aW9uYWwoKSl9KSx3PUkuZGVmaW5lKCJTdWJqZWN0UHVibGljS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9i''@;'; put 'put ''aih0aGlzLmtleSgiYWxnb3JpdGhtIikudXNlKFYpLHRoaXMua2V5KCJzdWJqZWN0UHVibGljS2V5IikuYml0c3RyKCkpfSk7WC5QdWJsaWNLZXk9dzt2YXIgUD1JLmRlZmluZSgiUHJpdmF0ZUtleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5p''@;'; put 'put ''bnQoKSx0aGlzLmtleSgiYWxnb3JpdGhtIikudXNlKFYpLHRoaXMua2V5KCJzdWJqZWN0UHJpdmF0ZUtleSIpLm9jdHN0cigpKX0pO1guUHJpdmF0ZUtleT1QO3ZhciBGPUkuZGVmaW5lKCJFbmNyeXB0ZWRQcml2YXRlS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtl''@;'; put 'put ''eSgiYWxnb3JpdGhtIikuc2VxKCkub2JqKHRoaXMua2V5KCJpZCIpLm9iamlkKCksdGhpcy5rZXkoImRlY3J5cHQiKS5zZXEoKS5vYmoodGhpcy5rZXkoImtkZSIpLnNlcSgpLm9iaih0aGlzLmtleSgiaWQiKS5vYmppZCgpLHRoaXMua2V5KCJrZGVwYXJhbXMiKS5zZXEoKS5vYmoodGhpcy5r''@;'; put 'put ''ZXkoInNhbHQiKS5vY3RzdHIoKSx0aGlzLmtleSgiaXRlcnMiKS5pbnQoKSkpLHRoaXMua2V5KCJjaXBoZXIiKS5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ28iKS5vYmppZCgpLHRoaXMua2V5KCJpdiIpLm9jdHN0cigpKSkpLHRoaXMua2V5KCJzdWJqZWN0UHJpdmF0ZUtleSIpLm9jdHN0cigp''@;'; put 'put ''KX0pO1guRW5jcnlwdGVkUHJpdmF0ZUtleT1GO3ZhciBSPUkuZGVmaW5lKCJEU0FQcml2YXRlS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoInAiKS5pbnQoKSx0aGlzLmtleSgicSIpLmludCgpLHRoaXMua2V5KCJnIiku''@;'; put 'put ''aW50KCksdGhpcy5rZXkoInB1Yl9rZXkiKS5pbnQoKSx0aGlzLmtleSgicHJpdl9rZXkiKS5pbnQoKSl9KTtYLkRTQVByaXZhdGVLZXk9UixYLkRTQXBhcmFtPUkuZGVmaW5lKCJEU0FwYXJhbSIsZnVuY3Rpb24oKXt0aGlzLmludCgpfSk7dmFyIHo9SS5kZWZpbmUoIkVDUGFyYW1ldGVycyIs''@;'; put 'put ''ZnVuY3Rpb24oKXt0aGlzLmNob2ljZSh7bmFtZWRDdXJ2ZTp0aGlzLm9iamlkKCl9KX0pLE49SS5kZWZpbmUoIkVDUHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJwcml2YXRlS2V5Iikub2N0c3RyKCksdGhp''@;'; put 'put ''cy5rZXkoInBhcmFtZXRlcnMiKS5vcHRpb25hbCgpLmV4cGxpY2l0KDApLnVzZSh6KSx0aGlzLmtleSgicHVibGljS2V5Iikub3B0aW9uYWwoKS5leHBsaWNpdCgxKS5iaXRzdHIoKSl9KTtYLkVDUHJpdmF0ZUtleT1OLFguc2lnbmF0dXJlPUkuZGVmaW5lKCJzaWduYXR1cmUiLGZ1bmN0aW9u''@;'; put 'put ''KCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInIiKS5pbnQoKSx0aGlzLmtleSgicyIpLmludCgpKX0pfSw4MzIyMjpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gXyhWLHcsUCxGKXt2YXIgUj17bTpbImVpbmUgTWludXRlIiwiZWluZXIgTWlu''@;'; put 'put ''dXRlIl0saDpbImVpbmUgU3R1bmRlIiwiZWluZXIgU3R1bmRlIl0sZDpbImVpbiBUYWciLCJlaW5lbSBUYWciXSxkZDpbVisiIFRhZ2UiLFYrIiBUYWdlbiJdLHc6WyJlaW5lIFdvY2hlIiwiZWluZXIgV29jaGUiXSxNOlsiZWluIE1vbmF0IiwiZWluZW0gTW9uYXQiXSxNTTpbVisiIE1vbmF0''@;'; put 'put ''ZSIsVisiIE1vbmF0ZW4iXSx5OlsiZWluIEphaHIiLCJlaW5lbSBKYWhyIl0seXk6W1YrIiBKYWhyZSIsVisiIEphaHJlbiJdfTtyZXR1cm4gdz9SW1BdWzBdOlJbUF1bMV19SS5kZWZpbmVMb2NhbGUoImRlLWNoIix7bW9udGhzOiJKYW51YXJfRmVicnVhcl9NXHhlNHJ6X0FwcmlsX01haV9K''@;'; put 'put ''dW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW4uX0ZlYi5fTVx4ZTRyel9BcHIuX01haV9KdW5pX0p1bGlfQXVnLl9TZXAuX09rdC5fTm92Ll9EZXouIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhh''@;'; put 'put ''Y3Q6ITAsd2Vla2RheXM6IlNvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1zdGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlNvX01vX0RpX01pX0RvX0ZyX1NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTb19Nb19EaV9NaV9Eb19G''@;'; put 'put ''cl9TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBI''@;'; put 'put ''SDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaGV1dGUgdW1dIExUIFtVaHJdIixzYW1lRWxzZToiTCIsbmV4dERheToiW21vcmdlbiB1bV0gTFQgW1Vocl0iLG5leHRXZWVrOiJkZGRkIFt1bV0gTFQgW1Vocl0iLGxhc3REYXk6IltnZXN0ZXJuIHVtXSBMVCBbVWhyXSIsbGFzdFdlZWs6Ilts''@;'; put 'put ''ZXR6dGVuXSBkZGRkIFt1bV0gTFQgW1Vocl0ifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6InZvciAlcyIsczoiZWluIHBhYXIgU2VrdW5kZW4iLHNzOiIlZCBTZWt1bmRlbiIsbTpfLG1tOiIlZCBNaW51dGVuIixoOl8saGg6IiVkIFN0dW5kZW4iLGQ6XyxkZDpfLHc6Xyx3''@;'; put 'put ''dzoiJWQgV29jaGVuIixNOl8sTU06Xyx5Ol8seXk6X30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDgzMzM3OigpPT57fSw4MzQwNzooY2UsWCxiKT0+e3ZhciBJPWIoMzQ3MjUpO2NlLmV4''@;'; put 'put ''cG9ydHM9ZnVuY3Rpb24oXyl7cmV0dXJuKG5ldyBJKS51cGRhdGUoXykuZGlnZXN0KCl9fSw4MzQ0NTpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ImVuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5fYWdvLl9zZXAuX29jdC5fbm92Ll9k''@;'; put 'put ''aWMuIi5zcGxpdCgiXyIpLHA9ImVuZV9mZWJfbWFyX2Ficl9tYXlfanVuX2p1bF9hZ29fc2VwX29jdF9ub3ZfZGljIi5zcGxpdCgiXyIpLFY9Wy9eZW5lL2ksL15mZWIvaSwvXm1hci9pLC9eYWJyL2ksL15tYXkvaSwvXmp1bi9pLC9eanVsL2ksL15hZ28vaSwvXnNlcC9pLC9eb2N0L2ksL15u''@;'; put 'put ''b3YvaSwvXmRpYy9pXSx3PS9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmV8ZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xz''@;'; put 'put ''ZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2k7SS5kZWZpbmVMb2NhbGUoImVzLW14Iix7bW9udGhzOiJlbmVyb19mZWJyZXJvX21hcnpvX2FicmlsX21heW9fanVuaW9fanVsaW9fYWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1icmVfZGljaWVtYnJlIi5zcGxpdCgiXyIpLG1v''@;'; put 'put ''bnRoc1Nob3J0OmZ1bmN0aW9uKEYsUil7cmV0dXJuIEY/Ly1NTU0tLy50ZXN0KFIpP3BbRi5tb250aCgpXTpfW0YubW9udGgoKV06X30sbW9udGhzUmVnZXg6dyxtb250aHNTaG9ydFJlZ2V4OncsbW9udGhzU3RyaWN0UmVnZXg6L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1''@;'; put 'put ''bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGlj''@;'; put 'put ''XC4/KS9pLG1vbnRoc1BhcnNlOlYsbG9uZ01vbnRoc1BhcnNlOlYsc2hvcnRNb250aHNQYXJzZTpWLHdlZWtkYXlzOiJkb21pbmdvX2x1bmVzX21hcnRlc19taVx4ZTlyY29sZXNfanVldmVzX3ZpZXJuZXNfc1x4ZTFiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbS5fbHVuLl9t''@;'; put 'put ''YXIuX21pXHhlOS5fanVlLl92aWUuX3NceGUxYi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvX2x1X21hX21pX2p1X3ZpX3NceGUxIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQvTU0vWVlZ''@;'; put 'put ''WSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVybiJbaG95IGEgbGEiKygxIT09dGhpcy5ob3Vy''@;'; put 'put ''cygpPyJzIjoiIikrIl0gTFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIlttYVx4ZjFhbmEgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0g''@;'; put 'put ''TFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltheWVyIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sc2Ft''@;'; put 'put ''ZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZW4gJXMiLHBhc3Q6ImhhY2UgJXMiLHM6InVub3Mgc2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW4gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW5hIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW4gZFx4ZWRhIixkZDoi''@;'; put 'put ''JWQgZFx4ZWRhcyIsdzoidW5hIHNlbWFuYSIsd3c6IiVkIHNlbWFuYXMiLE06InVuIG1lcyIsTU06IiVkIG1lc2VzIix5OiJ1biBhXHhmMW8iLHl5OiIlZCBhXHhmMW9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjAs''@;'; put 'put ''ZG95OjR9LGludmFsaWREYXRlOiJGZWNoYSBpbnZceGUxbGlkYSJ9KX0oYig5NzU4NikpfSw4Mzc5ODooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDUyNzg2KTtpZihJKXRyeXtJKFtdLCJsZW5ndGgiKX1jYXRjaHtJPW51bGx9Y2UuZXhwb3J0cz1JfSw4MzgyNDooY2UsWCxiKT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPV87dmFyIEk9Yig0MzQxMCk7ZnVuY3Rpb24gXyhwKXtpZighKHRoaXMgaW5zdGFuY2VvZiBfKSlyZXR1cm4gbmV3IF8ocCk7SS5jYWxsKHRoaXMscCl9Yig3MTk5MykoXyxJKSxfLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKHAsVix3KXt3''@;'; put 'put ''KG51bGwscCl9fSw4MzgzODooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDEzOTgxKSxfPWIoMjIwMjApLHA9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3I/U3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20i''@;'; put 'put ''KTpudWxsO1guQnVmZmVyPUYsWC5TbG93QnVmZmVyPWZ1bmN0aW9uIEooUmUpe3JldHVybitSZSE9UmUmJihSZT0wKSxGLmFsbG9jKCtSZSl9LFguSU5TUEVDVF9NQVhfQllURVM9NTA7dmFyIFY9MjE0NzQ4MzY0NztmdW5jdGlvbiBQKFJlKXtpZihSZT5WKXRocm93IG5ldyBSYW5nZUVycm9y''@;'; put 'put ''KCdUaGUgdmFsdWUgIicrUmUrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpO3ZhciBWZT1uZXcgVWludDhBcnJheShSZSk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihWZSxGLnByb3RvdHlwZSksVmV9ZnVuY3Rpb24gRihSZSxWZSxBZSl7aWYoIm51bWJlciI9PXR5cGVv''@;'; put 'put ''ZiBSZSl7aWYoInN0cmluZyI9PXR5cGVvZiBWZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4gTyhSZSl9cmV0dXJuIFIoUmUsVmUsQWUpfWZ1bmN0aW9uIFIoUmUs''@;'; put 'put ''VmUsQWUpe2lmKCJzdHJpbmciPT10eXBlb2YgUmUpcmV0dXJuIGZ1bmN0aW9uIEsoUmUsVmUpe2lmKCgic3RyaW5nIiE9dHlwZW9mIFZlfHwiIj09PVZlKSYmKFZlPSJ1dGY4IiksIUYuaXNFbmNvZGluZyhWZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitWZSk7''@;'; put 'put ''dmFyIEFlPTB8cmUoUmUsVmUpLERlPVAoQWUpLF90PURlLndyaXRlKFJlLFZlKTtyZXR1cm4gX3QhPT1BZSYmKERlPURlLnNsaWNlKDAsX3QpKSxEZX0oUmUsVmUpO2lmKEFycmF5QnVmZmVyLmlzVmlldyhSZSkpcmV0dXJuIGZ1bmN0aW9uIFkoUmUpe2lmKGtlKFJlLFVpbnQ4QXJyYXkpKXt2''@;'; put 'put ''YXIgVmU9bmV3IFVpbnQ4QXJyYXkoUmUpO3JldHVybiBXKFZlLmJ1ZmZlcixWZS5ieXRlT2Zmc2V0LFZlLmJ5dGVMZW5ndGgpfXJldHVybiBaKFJlKX0oUmUpO2lmKG51bGw9PVJlKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0''@;'; put 'put ''cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mIFJlKTtpZihrZShSZSxBcnJheUJ1ZmZlcil8fFJlJiZrZShSZS5idWZmZXIsQXJyYXlCdWZmZXIpfHx0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI8InUi''@;'; put 'put ''JiYoa2UoUmUsU2hhcmVkQXJyYXlCdWZmZXIpfHxSZSYma2UoUmUuYnVmZmVyLFNoYXJlZEFycmF5QnVmZmVyKSkpcmV0dXJuIFcoUmUsVmUsQWUpO2lmKCJudW1iZXIiPT10eXBlb2YgUmUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2Yg''@;'; put 'put ''dHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7dmFyIERlPVJlLnZhbHVlT2YmJlJlLnZhbHVlT2YoKTtpZihudWxsIT1EZSYmRGUhPT1SZSlyZXR1cm4gRi5mcm9tKERlLFZlLEFlKTt2YXIgX3Q9ZnVuY3Rpb24gcShSZSl7aWYoRi5pc0J1ZmZlcihSZSkpe3ZhciBWZT0wfGVl''@;'; put 'put ''KFJlLmxlbmd0aCksQWU9UChWZSk7cmV0dXJuIDA9PT1BZS5sZW5ndGh8fFJlLmNvcHkoQWUsMCwwLFZlKSxBZX1yZXR1cm4gdm9pZCAwIT09UmUubGVuZ3RoPyJudW1iZXIiIT10eXBlb2YgUmUubGVuZ3RofHxIZShSZS5sZW5ndGgpP1AoMCk6WihSZSk6IkJ1ZmZlciI9PT1SZS50eXBlJiZB''@;'; put 'put ''cnJheS5pc0FycmF5KFJlLmRhdGEpP1ooUmUuZGF0YSk6dm9pZCAwfShSZSk7aWYoX3QpcmV0dXJuIF90O2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1TeW1ib2wudG9QcmltaXRpdmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZVtTeW1ib2wudG9QcmltaXRpdmVdKXJldHVybiBGLmZyb20o''@;'; put 'put ''UmVbU3ltYm9sLnRvUHJpbWl0aXZlXSgic3RyaW5nIiksVmUsQWUpO3Rocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZl''@;'; put 'put ''ZCB0eXBlICIrdHlwZW9mIFJlKX1mdW5jdGlvbiB6KFJlKXtpZigibnVtYmVyIiE9dHlwZW9mIFJlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyJyk7aWYoUmU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK1Jl''@;'; put 'put ''KyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKX1mdW5jdGlvbiBPKFJlKXtyZXR1cm4geihSZSksUChSZTwwPzA6MHxlZShSZSkpfWZ1bmN0aW9uIFooUmUpe2Zvcih2YXIgVmU9UmUubGVuZ3RoPDA/MDowfGVlKFJlLmxlbmd0aCksQWU9UChWZSksRGU9MDtEZTxWZTtEZSs9MSlB''@;'; put 'put ''ZVtEZV09MjU1JlJlW0RlXTtyZXR1cm4gQWV9ZnVuY3Rpb24gVyhSZSxWZSxBZSl7aWYoVmU8MHx8UmUuYnl0ZUxlbmd0aDxWZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignIm9mZnNldCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7aWYoUmUuYnl0ZUxlbmd0aDxWZSsoQWV8fDApKXRo''@;'; put 'put ''cm93IG5ldyBSYW5nZUVycm9yKCcibGVuZ3RoIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTt2YXIgRGU7cmV0dXJuIERlPXZvaWQgMD09PVZlJiZ2b2lkIDA9PT1BZT9uZXcgVWludDhBcnJheShSZSk6dm9pZCAwPT09QWU/bmV3IFVpbnQ4QXJyYXkoUmUsVmUpOm5ldyBVaW50OEFy''@;'; put 'put ''cmF5KFJlLFZlLEFlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoRGUsRi5wcm90b3R5cGUpLERlfWZ1bmN0aW9uIGVlKFJlKXtpZihSZT49Vil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrVi50b1N0''@;'; put 'put ''cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfFJlfWZ1bmN0aW9uIHJlKFJlLFZlKXtpZihGLmlzQnVmZmVyKFJlKSlyZXR1cm4gUmUubGVuZ3RoO2lmKEFycmF5QnVmZmVyLmlzVmlldyhSZSl8fGtlKFJlLEFycmF5QnVmZmVyKSlyZXR1cm4gUmUuYnl0ZUxlbmd0aDtpZigic3RyaW5nIiE9''@;'; put 'put ''dHlwZW9mIFJlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBSZSk7dmFyIEFlPVJlLmxlbmd0aCxEZT1hcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCFEZSYmMD09PUFlKXJldHVybiAwO2Zvcih2YXIgX3Q9ITE7Oylzd2l0Y2goVmUpe2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIEFlO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIGl0KFJlKS5sZW5n''@;'; put 'put ''dGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKkFlO2Nhc2UiaGV4IjpyZXR1cm4gQWU+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gS2UoUmUpLmxlbmd0aDtkZWZhdWx0OmlmKF90KXJldHVybiBEZT8tMTppdChSZSkubGVuZ3Ro''@;'; put 'put ''O1ZlPSgiIitWZSkudG9Mb3dlckNhc2UoKSxfdD0hMH19ZnVuY3Rpb24gaWUoUmUsVmUsQWUpe3ZhciBEZT0hMTtpZigodm9pZCAwPT09VmV8fFZlPDApJiYoVmU9MCksVmU+dGhpcy5sZW5ndGh8fCgodm9pZCAwPT09QWV8fEFlPnRoaXMubGVuZ3RoKSYmKEFlPXRoaXMubGVuZ3RoKSxBZTw9''@;'; put 'put ''MCl8fChBZT4+Pj0wKTw9KFZlPj4+PTApKXJldHVybiIiO2ZvcihSZXx8KFJlPSJ1dGY4Iik7Oylzd2l0Y2goUmUpe2Nhc2UiaGV4IjpyZXR1cm4gRSh0aGlzLFZlLEFlKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiB4KHRoaXMsVmUsQWUpO2Nhc2UiYXNjaWkiOnJldHVybiBIKHRo''@;'; put 'put ''aXMsVmUsQWUpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIGoodGhpcyxWZSxBZSk7Y2FzZSJiYXNlNjQiOnJldHVybiB5KHRoaXMsVmUsQWUpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gbSh0aGlzLFZlLEFlKTtk''@;'; put 'put ''ZWZhdWx0OmlmKERlKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrUmUpO1JlPShSZSsiIikudG9Mb3dlckNhc2UoKSxEZT0hMH19ZnVuY3Rpb24gdWUoUmUsVmUsQWUpe3ZhciBEZT1SZVtWZV07UmVbVmVdPVJlW0FlXSxSZVtBZV09RGV9ZnVuY3Rpb24gZ2UoUmUs''@;'; put 'put ''VmUsQWUsRGUsX3Qpe2lmKDA9PT1SZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiBBZT8oRGU9QWUsQWU9MCk6QWU+MjE0NzQ4MzY0Nz9BZT0yMTQ3NDgzNjQ3OkFlPC0yMTQ3NDgzNjQ4JiYoQWU9LTIxNDc0ODM2NDgpLEhlKEFlPStBZSkmJihBZT1fdD8wOlJlLmxlbmd0''@;'; put 'put ''aC0xKSxBZTwwJiYoQWU9UmUubGVuZ3RoK0FlKSxBZT49UmUubGVuZ3RoKXtpZihfdClyZXR1cm4tMTtBZT1SZS5sZW5ndGgtMX1lbHNlIGlmKEFlPDApe2lmKCFfdClyZXR1cm4tMTtBZT0wfWlmKCJzdHJpbmciPT10eXBlb2YgVmUmJihWZT1GLmZyb20oVmUsRGUpKSxGLmlzQnVmZmVyKFZl''@;'; put 'put ''KSlyZXR1cm4gMD09PVZlLmxlbmd0aD8tMTpfZShSZSxWZSxBZSxEZSxfdCk7aWYoIm51bWJlciI9PXR5cGVvZiBWZSlyZXR1cm4gVmUmPTI1NSwiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9fdD9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNh''@;'; put 'put ''bGwoUmUsVmUsQWUpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoUmUsVmUsQWUpOl9lKFJlLFtWZV0sQWUsRGUsX3QpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIF9lKFJlLFZlLEFlLERl''@;'; put 'put ''LF90KXt2YXIgU3QscnQ9MSxRZT1SZS5sZW5ndGgsc249VmUubGVuZ3RoO2lmKHZvaWQgMCE9PURlJiYoInVjczIiPT09KERlPVN0cmluZyhEZSkudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1EZXx8InV0ZjE2bGUiPT09RGV8fCJ1dGYtMTZsZSI9PT1EZSkpe2lmKFJlLmxlbmd0aDwyfHxW''@;'; put 'put ''ZS5sZW5ndGg8MilyZXR1cm4tMTtydD0yLFFlLz0yLHNuLz0yLEFlLz0yfWZ1bmN0aW9uIHZ0KHR0LEllKXtyZXR1cm4gMT09PXJ0P3R0W0llXTp0dC5yZWFkVUludDE2QkUoSWUqcnQpfWlmKF90KXt2YXIgZW49LTE7Zm9yKFN0PUFlO1N0PFFlO1N0KyspaWYodnQoUmUsU3QpPT09dnQoVmUs''@;'; put 'put ''LTE9PT1lbj8wOlN0LWVuKSl7aWYoLTE9PT1lbiYmKGVuPVN0KSxTdC1lbisxPT09c24pcmV0dXJuIGVuKnJ0fWVsc2UtMSE9PWVuJiYoU3QtPVN0LWVuKSxlbj0tMX1lbHNlIGZvcihBZStzbj5RZSYmKEFlPVFlLXNuKSxTdD1BZTtTdD49MDtTdC0tKXtmb3IodmFyIHV0PSEwLFhlPTA7WGU8''@;'; put 'put ''c247WGUrKylpZih2dChSZSxTdCtYZSkhPT12dChWZSxYZSkpe3V0PSExO2JyZWFrfWlmKHV0KXJldHVybiBTdH1yZXR1cm4tMX1mdW5jdGlvbiBUZShSZSxWZSxBZSxEZSl7QWU9TnVtYmVyKEFlKXx8MDt2YXIgX3Q9UmUubGVuZ3RoLUFlO0RlPyhEZT1OdW1iZXIoRGUpKT5fdCYmKERlPV90''@;'; put 'put ''KTpEZT1fdDt2YXIgcnQ9VmUubGVuZ3RoO0RlPnJ0LzImJihEZT1ydC8yKTtmb3IodmFyIFFlPTA7UWU8RGU7KytRZSl7dmFyIHNuPXBhcnNlSW50KFZlLnN1YnN0cigyKlFlLDIpLDE2KTtpZihIZShzbikpcmV0dXJuIFFlO1JlW0FlK1FlXT1zbn1yZXR1cm4gUWV9ZnVuY3Rpb24gTWUoUmUs''@;'; put 'put ''VmUsQWUsRGUpe3JldHVybiBqZShpdChWZSxSZS5sZW5ndGgtQWUpLFJlLEFlLERlKX1mdW5jdGlvbiBaZShSZSxWZSxBZSxEZSl7cmV0dXJuIGplKGZ1bmN0aW9uIHhlKFJlKXtmb3IodmFyIFZlPVtdLEFlPTA7QWU8UmUubGVuZ3RoOysrQWUpVmUucHVzaCgyNTUmUmUuY2hhckNvZGVBdChB''@;'; put 'put ''ZSkpO3JldHVybiBWZX0oVmUpLFJlLEFlLERlKX1mdW5jdGlvbiBCKFJlLFZlLEFlLERlKXtyZXR1cm4gamUoS2UoVmUpLFJlLEFlLERlKX1mdW5jdGlvbiBnKFJlLFZlLEFlLERlKXtyZXR1cm4gamUoZnVuY3Rpb24geWUoUmUsVmUpe2Zvcih2YXIgQWUsRGUscnQ9W10sUWU9MDtRZTxSZS5s''@;'; put 'put ''ZW5ndGgmJiEoKFZlLT0yKTwwKTsrK1FlKURlPShBZT1SZS5jaGFyQ29kZUF0KFFlKSk+PjgscnQucHVzaChBZSUyNTYpLHJ0LnB1c2goRGUpO3JldHVybiBydH0oVmUsUmUubGVuZ3RoLUFlKSxSZSxBZSxEZSl9ZnVuY3Rpb24geShSZSxWZSxBZSl7cmV0dXJuIEkuZnJvbUJ5dGVBcnJheSgw''@;'; put 'put ''PT09VmUmJkFlPT09UmUubGVuZ3RoP1JlOlJlLnNsaWNlKFZlLEFlKSl9ZnVuY3Rpb24geChSZSxWZSxBZSl7QWU9TWF0aC5taW4oUmUubGVuZ3RoLEFlKTtmb3IodmFyIERlPVtdLF90PVZlO190PEFlOyl7dmFyIHZ0LFN0LGVuLHV0LHJ0PVJlW190XSxRZT1udWxsLHNuPXJ0PjIzOT80OnJ0''@;'; put 'put ''PjIyMz8zOnJ0PjE5MT8yOjE7aWYoX3Qrc248PUFlKXN3aXRjaChzbil7Y2FzZSAxOnJ0PDEyOCYmKFFlPXJ0KTticmVhaztjYXNlIDI6MTI4PT0oMTkyJih2dD1SZVtfdCsxXSkpJiYodXQ9KDMxJnJ0KTw8Nnw2MyZ2dCk+MTI3JiYoUWU9dXQpO2JyZWFrO2Nhc2UgMzpTdD1SZVtfdCsyXSwx''@;'; put 'put ''Mjg9PSgxOTImKHZ0PVJlW190KzFdKSkmJjEyOD09KDE5MiZTdCkmJih1dD0oMTUmcnQpPDwxMnwoNjMmdnQpPDw2fDYzJlN0KT4yMDQ3JiYodXQ8NTUyOTZ8fHV0PjU3MzQzKSYmKFFlPXV0KTticmVhaztjYXNlIDQ6U3Q9UmVbX3QrMl0sZW49UmVbX3QrM10sMTI4PT0oMTkyJih2dD1SZVtf''@;'; put 'put ''dCsxXSkpJiYxMjg9PSgxOTImU3QpJiYxMjg9PSgxOTImZW4pJiYodXQ9KDE1JnJ0KTw8MTh8KDYzJnZ0KTw8MTJ8KDYzJlN0KTw8Nnw2MyZlbik+NjU1MzUmJnV0PDExMTQxMTImJihRZT11dCl9bnVsbD09PVFlPyhRZT02NTUzMyxzbj0xKTpRZT42NTUzNSYmKERlLnB1c2goKFFlLT02NTUz''@;'; put 'put ''Nik+Pj4xMCYxMDIzfDU1Mjk2KSxRZT01NjMyMHwxMDIzJlFlKSxEZS5wdXNoKFFlKSxfdCs9c259cmV0dXJuIGZ1bmN0aW9uIFQoUmUpe3ZhciBWZT1SZS5sZW5ndGg7aWYoVmU8PUMpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLFJlKTtmb3IodmFyIEFlPSIiLERl''@;'; put 'put ''PTA7RGU8VmU7KUFlKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxSZS5zbGljZShEZSxEZSs9QykpO3JldHVybiBBZX0oRGUpfVgua01heExlbmd0aD1WLCEoRi5UWVBFRF9BUlJBWV9TVVBQT1JUPWZ1bmN0aW9uIHcoKXt0cnl7dmFyIFJlPW5ldyBVaW50OEFycmF5KDEpLFZl''@;'; put 'put ''PXtmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKFZlLFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoUmUsVmUpLDQyPT09UmUuZm9vKCl9Y2F0Y2h7cmV0dXJuITF9fSgpKSYmdHlwZW9mIGNvbnNvbGU8InUi''@;'; put 'put ''JiYiZnVuY3Rpb24iPT10eXBlb2YgY29uc29sZS5lcnJvciYmY29uc29sZS5lcnJvcigiVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGBidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSBy''@;'; put 'put ''ZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYucHJvdG90eXBlLCJwYXJlbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKEYuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShGLnByb3RvdHlwZSwib2Zmc2V0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihGLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ5dGVPZmZzZXR9fSksRi5wb29sU2l6ZT04MTkyLEYuZnJvbT1mdW5jdGlvbihSZSxWZSxBZSl7cmV0dXJuIFIoUmUsVmUsQWUpfSxPYmpl''@;'; put 'put ''Y3Quc2V0UHJvdG90eXBlT2YoRi5wcm90b3R5cGUsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihGLFVpbnQ4QXJyYXkpLEYuYWxsb2M9ZnVuY3Rpb24oUmUsVmUsQWUpe3JldHVybiBmdW5jdGlvbiBOKFJlLFZlLEFlKXtyZXR1cm4geihSZSksUmU8PTA/UChS''@;'; put 'put ''ZSk6dm9pZCAwIT09VmU/InN0cmluZyI9PXR5cGVvZiBBZT9QKFJlKS5maWxsKFZlLEFlKTpQKFJlKS5maWxsKFZlKTpQKFJlKX0oUmUsVmUsQWUpfSxGLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKFJlKXtyZXR1cm4gTyhSZSl9LEYuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKFJlKXtyZXR1cm4g''@;'; put 'put ''TyhSZSl9LEYuaXNCdWZmZXI9ZnVuY3Rpb24oVmUpe3JldHVybiBudWxsIT1WZSYmITA9PT1WZS5faXNCdWZmZXImJlZlIT09Ri5wcm90b3R5cGV9LEYuY29tcGFyZT1mdW5jdGlvbihWZSxBZSl7aWYoa2UoVmUsVWludDhBcnJheSkmJihWZT1GLmZyb20oVmUsVmUub2Zmc2V0LFZlLmJ5dGVM''@;'; put 'put ''ZW5ndGgpKSxrZShBZSxVaW50OEFycmF5KSYmKEFlPUYuZnJvbShBZSxBZS5vZmZzZXQsQWUuYnl0ZUxlbmd0aCkpLCFGLmlzQnVmZmVyKFZlKXx8IUYuaXNCdWZmZXIoQWUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiYnVmMSIsICJidWYyIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2Yg''@;'; put 'put ''dHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKFZlPT09QWUpcmV0dXJuIDA7Zm9yKHZhciBEZT1WZS5sZW5ndGgsX3Q9QWUubGVuZ3RoLHJ0PTAsUWU9TWF0aC5taW4oRGUsX3QpO3J0PFFlOysrcnQpaWYoVmVbcnRdIT09QWVbcnRdKXtEZT1WZVtydF0sX3Q9QWVbcnRdO2JyZWFrfXJl''@;'; put 'put ''dHVybiBEZTxfdD8tMTpfdDxEZT8xOjB9LEYuaXNFbmNvZGluZz1mdW5jdGlvbihWZSl7c3dpdGNoKFN0cmluZyhWZSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2''@;'; put 'put ''NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxGLmNvbmNhdD1mdW5jdGlvbihWZSxBZSl7aWYoIUFycmF5LmlzQXJyYXkoVmUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVu''@;'; put 'put ''dCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09VmUubGVuZ3RoKXJldHVybiBGLmFsbG9jKDApO3ZhciBEZTtpZih2b2lkIDA9PT1BZSlmb3IoQWU9MCxEZT0wO0RlPFZlLmxlbmd0aDsrK0RlKUFlKz1WZVtEZV0ubGVuZ3RoO3ZhciBfdD1GLmFsbG9jVW5zYWZlKEFlKSxy''@;'; put 'put ''dD0wO2ZvcihEZT0wO0RlPFZlLmxlbmd0aDsrK0RlKXt2YXIgUWU9VmVbRGVdO2lmKGtlKFFlLFVpbnQ4QXJyYXkpKXJ0K1FlLmxlbmd0aD5fdC5sZW5ndGg/Ri5mcm9tKFFlKS5jb3B5KF90LHJ0KTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChfdCxRZSxydCk7ZWxzZXtpZighRi5p''@;'; put 'put ''c0J1ZmZlcihRZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO1FlLmNvcHkoX3QscnQpfXJ0Kz1RZS5sZW5ndGh9cmV0dXJuIF90fSxGLmJ5dGVMZW5ndGg9cmUsRi5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLEYucHJv''@;'; put 'put ''dG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciBWZT10aGlzLmxlbmd0aDtpZihWZSUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgQWU9MDtBZTxWZTtBZSs9Mil1ZSh0aGlzLEFlLEFlKzEpO3Jl''@;'; put 'put ''dHVybiB0aGlzfSxGLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgVmU9dGhpcy5sZW5ndGg7aWYoVmUlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMiKTtmb3IodmFyIEFlPTA7QWU8VmU7QWUrPTQpdWUo''@;'; put 'put ''dGhpcyxBZSxBZSszKSx1ZSh0aGlzLEFlKzEsQWUrMik7cmV0dXJuIHRoaXN9LEYucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciBWZT10aGlzLmxlbmd0aDtpZihWZSU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQt''@;'; put 'put ''Yml0cyIpO2Zvcih2YXIgQWU9MDtBZTxWZTtBZSs9OCl1ZSh0aGlzLEFlLEFlKzcpLHVlKHRoaXMsQWUrMSxBZSs2KSx1ZSh0aGlzLEFlKzIsQWUrNSksdWUodGhpcyxBZSszLEFlKzQpO3JldHVybiB0aGlzfSxGLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZz1GLnByb3RvdHlwZS50b1N0cmlu''@;'; put 'put ''Zz1mdW5jdGlvbigpe3ZhciBWZT10aGlzLmxlbmd0aDtyZXR1cm4gMD09PVZlPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP3godGhpcywwLFZlKTppZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LEYucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihWZSl7aWYoIUYuaXNCdWZmZXIoVmUpKXRocm93''@;'; put 'put ''IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PVZlfHwwPT09Ri5jb21wYXJlKHRoaXMsVmUpfSxGLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIFZlPSIiLEFlPVguSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIFZlPXRoaXMu''@;'; put 'put ''dG9TdHJpbmcoImhleCIsMCxBZSkucmVwbGFjZSgvKC57Mn0pL2csIiQxICIpLnRyaW0oKSx0aGlzLmxlbmd0aD5BZSYmKFZlKz0iIC4uLiAiKSwiPEJ1ZmZlciAiK1ZlKyI+In0scCYmKEYucHJvdG90eXBlW3BdPUYucHJvdG90eXBlLmluc3BlY3QpLEYucHJvdG90eXBlLmNvbXBhcmU9ZnVu''@;'; put 'put ''Y3Rpb24oVmUsQWUsRGUsX3QscnQpe2lmKGtlKFZlLFVpbnQ4QXJyYXkpJiYoVmU9Ri5mcm9tKFZlLFZlLm9mZnNldCxWZS5ieXRlTGVuZ3RoKSksIUYuaXNCdWZmZXIoVmUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidGFyZ2V0IiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1''@;'; put 'put ''ZmZlciBvciBVaW50OEFycmF5LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIFZlKTtpZih2b2lkIDA9PT1BZSYmKEFlPTApLHZvaWQgMD09PURlJiYoRGU9VmU/VmUubGVuZ3RoOjApLHZvaWQgMD09PV90JiYoX3Q9MCksdm9pZCAwPT09cnQmJihydD10aGlzLmxlbmd0aCksQWU8MHx8RGU+VmUu''@;'; put 'put ''bGVuZ3RofHxfdDwwfHxydD50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYoX3Q+PXJ0JiZBZT49RGUpcmV0dXJuIDA7aWYoX3Q+PXJ0KXJldHVybi0xO2lmKEFlPj1EZSlyZXR1cm4gMTtpZih0aGlzPT09VmUpcmV0dXJuIDA7Zm9yKHZh''@;'; put 'put ''ciBRZT0ocnQ+Pj49MCktKF90Pj4+PTApLHNuPShEZT4+Pj0wKS0oQWU+Pj49MCksdnQ9TWF0aC5taW4oUWUsc24pLFN0PXRoaXMuc2xpY2UoX3QscnQpLGVuPVZlLnNsaWNlKEFlLERlKSx1dD0wO3V0PHZ0OysrdXQpaWYoU3RbdXRdIT09ZW5bdXRdKXtRZT1TdFt1dF0sc249ZW5bdXRdO2Jy''@;'; put 'put ''ZWFrfXJldHVybiBRZTxzbj8tMTpzbjxRZT8xOjB9LEYucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKFZlLEFlLERlKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihWZSxBZSxEZSl9LEYucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oVmUsQWUsRGUpe3JldHVybiBnZSh0aGlzLFZlLEFl''@;'; put 'put ''LERlLCEwKX0sRi5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24oVmUsQWUsRGUpe3JldHVybiBnZSh0aGlzLFZlLEFlLERlLCExKX0sRi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oVmUsQWUsRGUsX3Qpe2lmKHZvaWQgMD09PUFlKV90PSJ1dGY4IixEZT10aGlzLmxlbmd0aCxBZT0w''@;'; put 'put ''O2Vsc2UgaWYodm9pZCAwPT09RGUmJiJzdHJpbmciPT10eXBlb2YgQWUpX3Q9QWUsRGU9dGhpcy5sZW5ndGgsQWU9MDtlbHNle2lmKCFpc0Zpbml0ZShBZSkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9u''@;'; put 'put ''Z2VyIHN1cHBvcnRlZCIpO0FlPj4+PTAsaXNGaW5pdGUoRGUpPyhEZT4+Pj0wLHZvaWQgMD09PV90JiYoX3Q9InV0ZjgiKSk6KF90PURlLERlPXZvaWQgMCl9dmFyIHJ0PXRoaXMubGVuZ3RoLUFlO2lmKCh2b2lkIDA9PT1EZXx8RGU+cnQpJiYoRGU9cnQpLFZlLmxlbmd0aD4wJiYoRGU8MHx8''@;'; put 'put ''QWU8MCl8fEFlPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO190fHwoX3Q9InV0ZjgiKTtmb3IodmFyIFFlPSExOzspc3dpdGNoKF90KXtjYXNlImhleCI6cmV0dXJuIFRlKHRoaXMsVmUsQWUsRGUpO2Nh''@;'; put 'put ''c2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIE1lKHRoaXMsVmUsQWUsRGUpO2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIFplKHRoaXMsVmUsQWUsRGUpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gQih0aGlzLFZlLEFlLERlKTtjYXNlInVjczIiOmNhc2UidWNz''@;'; put 'put ''LTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIGcodGhpcyxWZSxBZSxEZSk7ZGVmYXVsdDppZihRZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK190KTtfdD0oIiIrX3QpLnRvTG93ZXJDYXNlKCksUWU9ITB9fSxGLnByb3RvdHlwZS50b0pT''@;'; put 'put ''T049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciBDPTQwOTY7ZnVuY3Rpb24gSChSZSxWZSxBZSl7dmFyIERlPSIiO0FlPU1hdGgubWluKFJlLmxlbmd0aCxBZSk7Zm9yKHZhciBf''@;'; put 'put ''dD1WZTtfdDxBZTsrK190KURlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZSZVtfdF0pO3JldHVybiBEZX1mdW5jdGlvbiBqKFJlLFZlLEFlKXt2YXIgRGU9IiI7QWU9TWF0aC5taW4oUmUubGVuZ3RoLEFlKTtmb3IodmFyIF90PVZlO190PEFlOysrX3QpRGUrPVN0cmluZy5mcm9tQ2hhckNv''@;'; put 'put ''ZGUoUmVbX3RdKTtyZXR1cm4gRGV9ZnVuY3Rpb24gRShSZSxWZSxBZSl7dmFyIERlPVJlLmxlbmd0aDsoIVZlfHxWZTwwKSYmKFZlPTApLCghQWV8fEFlPDB8fEFlPkRlKSYmKEFlPURlKTtmb3IodmFyIF90PSIiLHJ0PVZlO3J0PEFlOysrcnQpX3QrPUxlW1JlW3J0XV07cmV0dXJuIF90fWZ1''@;'; put 'put ''bmN0aW9uIG0oUmUsVmUsQWUpe2Zvcih2YXIgRGU9UmUuc2xpY2UoVmUsQWUpLF90PSIiLHJ0PTA7cnQ8RGUubGVuZ3RoLTE7cnQrPTIpX3QrPVN0cmluZy5mcm9tQ2hhckNvZGUoRGVbcnRdKzI1NipEZVtydCsxXSk7cmV0dXJuIF90fWZ1bmN0aW9uIEEoUmUsVmUsQWUpe2lmKFJlJTEhPTB8''@;'; put 'put ''fFJlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKFJlK1ZlPkFlKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gYWUoUmUsVmUsQWUsRGUsX3QscnQpe2lmKCFGLmlzQnVm''@;'; put 'put ''ZmVyKFJlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYoVmU+X3R8fFZlPHJ0KXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihBZStEZT5SZS5sZW5n''@;'; put 'put ''dGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIG5lKFJlLFZlLEFlLERlLF90LHJ0KXtpZihBZStEZT5SZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKEFlPDApdGhyb3cgbmV3IFJhbmdlRXJy''@;'; put 'put ''b3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIHNlKFJlLFZlLEFlLERlLF90KXtyZXR1cm4gVmU9K1ZlLEFlPj4+PTAsX3R8fG5lKFJlLDAsQWUsNCksXy53cml0ZShSZSxWZSxBZSxEZSwyMyw0KSxBZSs0fWZ1bmN0aW9uIENlKFJlLFZlLEFlLERlLF90KXtyZXR1cm4gVmU9K1Zl''@;'; put 'put ''LEFlPj4+PTAsX3R8fG5lKFJlLDAsQWUsOCksXy53cml0ZShSZSxWZSxBZSxEZSw1Miw4KSxBZSs4fUYucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKFZlLEFlKXt2YXIgRGU9dGhpcy5sZW5ndGg7KFZlPX5+VmUpPDA/KFZlKz1EZSk8MCYmKFZlPTApOlZlPkRlJiYoVmU9RGUpLChBZT12b2lk''@;'; put 'put ''IDA9PT1BZT9EZTp+fkFlKTwwPyhBZSs9RGUpPDAmJihBZT0wKTpBZT5EZSYmKEFlPURlKSxBZTxWZSYmKEFlPVZlKTt2YXIgX3Q9dGhpcy5zdWJhcnJheShWZSxBZSk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihfdCxGLnByb3RvdHlwZSksX3R9LEYucHJvdG90eXBlLnJlYWRVaW50''@;'; put 'put ''TEU9Ri5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihWZSxBZSxEZSl7VmU+Pj49MCxBZT4+Pj0wLERlfHxBKFZlLEFlLHRoaXMubGVuZ3RoKTtmb3IodmFyIF90PXRoaXNbVmVdLHJ0PTEsUWU9MDsrK1FlPEFlJiYocnQqPTI1Nik7KV90Kz10aGlzW1ZlK1FlXSpydDtyZXR1cm4gX3R9''@;'; put 'put ''LEYucHJvdG90eXBlLnJlYWRVaW50QkU9Ri5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihWZSxBZSxEZSl7VmU+Pj49MCxBZT4+Pj0wLERlfHxBKFZlLEFlLHRoaXMubGVuZ3RoKTtmb3IodmFyIF90PXRoaXNbVmUrLS1BZV0scnQ9MTtBZT4wJiYocnQqPTI1Nik7KV90Kz10aGlzW1Zl''@;'; put 'put ''Ky0tQWVdKnJ0O3JldHVybiBfdH0sRi5wcm90b3R5cGUucmVhZFVpbnQ4PUYucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihWZSxBZSl7cmV0dXJuIFZlPj4+PTAsQWV8fEEoVmUsMSx0aGlzLmxlbmd0aCksdGhpc1tWZV19LEYucHJvdG90eXBlLnJlYWRVaW50MTZMRT1GLnByb3RvdHlw''@;'; put 'put ''ZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24oVmUsQWUpe3JldHVybiBWZT4+Pj0wLEFlfHxBKFZlLDIsdGhpcy5sZW5ndGgpLHRoaXNbVmVdfHRoaXNbVmUrMV08PDh9LEYucHJvdG90eXBlLnJlYWRVaW50MTZCRT1GLnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24oVmUsQWUpe3JldHVy''@;'; put 'put ''biBWZT4+Pj0wLEFlfHxBKFZlLDIsdGhpcy5sZW5ndGgpLHRoaXNbVmVdPDw4fHRoaXNbVmUrMV19LEYucHJvdG90eXBlLnJlYWRVaW50MzJMRT1GLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oVmUsQWUpe3JldHVybiBWZT4+Pj0wLEFlfHxBKFZlLDQsdGhpcy5sZW5ndGgpLCh0''@;'; put 'put ''aGlzW1ZlXXx0aGlzW1ZlKzFdPDw4fHRoaXNbVmUrMl08PDE2KSsxNjc3NzIxNip0aGlzW1ZlKzNdfSxGLnByb3RvdHlwZS5yZWFkVWludDMyQkU9Ri5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKFZlLEFlKXtyZXR1cm4gVmU+Pj49MCxBZXx8QShWZSw0LHRoaXMubGVuZ3RoKSwx''@;'; put 'put ''Njc3NzIxNip0aGlzW1ZlXSsodGhpc1tWZSsxXTw8MTZ8dGhpc1tWZSsyXTw8OHx0aGlzW1ZlKzNdKX0sRi5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKFZlLEFlLERlKXtWZT4+Pj0wLEFlPj4+PTAsRGV8fEEoVmUsQWUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgX3Q9dGhpc1tWZV0scnQ9''@;'; put 'put ''MSxRZT0wOysrUWU8QWUmJihydCo9MjU2KTspX3QrPXRoaXNbVmUrUWVdKnJ0O3JldHVybiBfdD49KHJ0Kj0xMjgpJiYoX3QtPU1hdGgucG93KDIsOCpBZSkpLF90fSxGLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24oVmUsQWUsRGUpe1ZlPj4+PTAsQWU+Pj49MCxEZXx8QShWZSxBZSx0''@;'; put 'put ''aGlzLmxlbmd0aCk7Zm9yKHZhciBfdD1BZSxydD0xLFFlPXRoaXNbVmUrLS1fdF07X3Q+MCYmKHJ0Kj0yNTYpOylRZSs9dGhpc1tWZSstLV90XSpydDtyZXR1cm4gUWU+PShydCo9MTI4KSYmKFFlLT1NYXRoLnBvdygyLDgqQWUpKSxRZX0sRi5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24o''@;'; put 'put ''VmUsQWUpe3JldHVybiBWZT4+Pj0wLEFlfHxBKFZlLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW1ZlXT8tMSooMjU1LXRoaXNbVmVdKzEpOnRoaXNbVmVdfSxGLnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbihWZSxBZSl7VmU+Pj49MCxBZXx8QShWZSwyLHRoaXMubGVuZ3RoKTt2YXIg''@;'; put 'put ''RGU9dGhpc1tWZV18dGhpc1tWZSsxXTw8ODtyZXR1cm4gMzI3NjgmRGU/NDI5NDkwMTc2MHxEZTpEZX0sRi5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oVmUsQWUpe1ZlPj4+PTAsQWV8fEEoVmUsMix0aGlzLmxlbmd0aCk7dmFyIERlPXRoaXNbVmUrMV18dGhpc1tWZV08PDg7cmV0''@;'; put 'put ''dXJuIDMyNzY4JkRlPzQyOTQ5MDE3NjB8RGU6RGV9LEYucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKFZlLEFlKXtyZXR1cm4gVmU+Pj49MCxBZXx8QShWZSw0LHRoaXMubGVuZ3RoKSx0aGlzW1ZlXXx0aGlzW1ZlKzFdPDw4fHRoaXNbVmUrMl08PDE2fHRoaXNbVmUrM108PDI0fSxG''@;'; put 'put ''LnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihWZSxBZSl7cmV0dXJuIFZlPj4+PTAsQWV8fEEoVmUsNCx0aGlzLmxlbmd0aCksdGhpc1tWZV08PDI0fHRoaXNbVmUrMV08PDE2fHRoaXNbVmUrMl08PDh8dGhpc1tWZSszXX0sRi5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24o''@;'; put 'put ''VmUsQWUpe3JldHVybiBWZT4+Pj0wLEFlfHxBKFZlLDQsdGhpcy5sZW5ndGgpLF8ucmVhZCh0aGlzLFZlLCEwLDIzLDQpfSxGLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihWZSxBZSl7cmV0dXJuIFZlPj4+PTAsQWV8fEEoVmUsNCx0aGlzLmxlbmd0aCksXy5yZWFkKHRoaXMsVmUs''@;'; put 'put ''ITEsMjMsNCl9LEYucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihWZSxBZSl7cmV0dXJuIFZlPj4+PTAsQWV8fEEoVmUsOCx0aGlzLmxlbmd0aCksXy5yZWFkKHRoaXMsVmUsITAsNTIsOCl9LEYucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihWZSxBZSl7cmV0dXJuIFZl''@;'; put 'put ''Pj4+PTAsQWV8fEEoVmUsOCx0aGlzLmxlbmd0aCksXy5yZWFkKHRoaXMsVmUsITEsNTIsOCl9LEYucHJvdG90eXBlLndyaXRlVWludExFPUYucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKFZlLEFlLERlLF90KXtWZT0rVmUsQWU+Pj49MCxEZT4+Pj0wLF90fHxhZSh0aGlzLFZlLEFl''@;'; put 'put ''LERlLE1hdGgucG93KDIsOCpEZSktMSwwKTt2YXIgUWU9MSxzbj0wO2Zvcih0aGlzW0FlXT0yNTUmVmU7KytzbjxEZSYmKFFlKj0yNTYpOyl0aGlzW0FlK3NuXT1WZS9RZSYyNTU7cmV0dXJuIEFlK0RlfSxGLnByb3RvdHlwZS53cml0ZVVpbnRCRT1GLnByb3RvdHlwZS53cml0ZVVJbnRCRT1m''@;'; put 'put ''dW5jdGlvbihWZSxBZSxEZSxfdCl7VmU9K1ZlLEFlPj4+PTAsRGU+Pj49MCxfdHx8YWUodGhpcyxWZSxBZSxEZSxNYXRoLnBvdygyLDgqRGUpLTEsMCk7dmFyIFFlPURlLTEsc249MTtmb3IodGhpc1tBZStRZV09MjU1JlZlOy0tUWU+PTAmJihzbio9MjU2KTspdGhpc1tBZStRZV09VmUvc24m''@;'; put 'put ''MjU1O3JldHVybiBBZStEZX0sRi5wcm90b3R5cGUud3JpdGVVaW50OD1GLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKFZlLEFlLERlKXtyZXR1cm4gVmU9K1ZlLEFlPj4+PTAsRGV8fGFlKHRoaXMsVmUsQWUsMSwyNTUsMCksdGhpc1tBZV09MjU1JlZlLEFlKzF9LEYucHJvdG90eXBl''@;'; put 'put ''LndyaXRlVWludDE2TEU9Ri5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihWZSxBZSxEZSl7cmV0dXJuIFZlPStWZSxBZT4+Pj0wLERlfHxhZSh0aGlzLFZlLEFlLDIsNjU1MzUsMCksdGhpc1tBZV09MjU1JlZlLHRoaXNbQWUrMV09VmU+Pj44LEFlKzJ9LEYucHJvdG90eXBlLndy''@;'; put 'put ''aXRlVWludDE2QkU9Ri5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihWZSxBZSxEZSl7cmV0dXJuIFZlPStWZSxBZT4+Pj0wLERlfHxhZSh0aGlzLFZlLEFlLDIsNjU1MzUsMCksdGhpc1tBZV09VmU+Pj44LHRoaXNbQWUrMV09MjU1JlZlLEFlKzJ9LEYucHJvdG90eXBlLndyaXRl''@;'; put 'put ''VWludDMyTEU9Ri5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihWZSxBZSxEZSl7cmV0dXJuIFZlPStWZSxBZT4+Pj0wLERlfHxhZSh0aGlzLFZlLEFlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW0FlKzNdPVZlPj4+MjQsdGhpc1tBZSsyXT1WZT4+PjE2LHRoaXNbQWUrMV09VmU+Pj44''@;'; put 'put ''LHRoaXNbQWVdPTI1NSZWZSxBZSs0fSxGLnByb3RvdHlwZS53cml0ZVVpbnQzMkJFPUYucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oVmUsQWUsRGUpe3JldHVybiBWZT0rVmUsQWU+Pj49MCxEZXx8YWUodGhpcyxWZSxBZSw0LDQyOTQ5NjcyOTUsMCksdGhpc1tBZV09VmU+Pj4y''@;'; put 'put ''NCx0aGlzW0FlKzFdPVZlPj4+MTYsdGhpc1tBZSsyXT1WZT4+PjgsdGhpc1tBZSszXT0yNTUmVmUsQWUrNH0sRi5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihWZSxBZSxEZSxfdCl7aWYoVmU9K1ZlLEFlPj4+PTAsIV90KXt2YXIgcnQ9TWF0aC5wb3coMiw4KkRlLTEpO2FlKHRoaXMs''@;'; put 'put ''VmUsQWUsRGUscnQtMSwtcnQpfXZhciBRZT0wLHNuPTEsdnQ9MDtmb3IodGhpc1tBZV09MjU1JlZlOysrUWU8RGUmJihzbio9MjU2KTspVmU8MCYmMD09PXZ0JiYwIT09dGhpc1tBZStRZS0xXSYmKHZ0PTEpLHRoaXNbQWUrUWVdPShWZS9zbnwwKS12dCYyNTU7cmV0dXJuIEFlK0RlfSxGLnBy''@;'; put 'put ''b3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKFZlLEFlLERlLF90KXtpZihWZT0rVmUsQWU+Pj49MCwhX3Qpe3ZhciBydD1NYXRoLnBvdygyLDgqRGUtMSk7YWUodGhpcyxWZSxBZSxEZSxydC0xLC1ydCl9dmFyIFFlPURlLTEsc249MSx2dD0wO2Zvcih0aGlzW0FlK1FlXT0yNTUmVmU7LS1R''@;'; put 'put ''ZT49MCYmKHNuKj0yNTYpOylWZTwwJiYwPT09dnQmJjAhPT10aGlzW0FlK1FlKzFdJiYodnQ9MSksdGhpc1tBZStRZV09KFZlL3NufDApLXZ0JjI1NTtyZXR1cm4gQWUrRGV9LEYucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbihWZSxBZSxEZSl7cmV0dXJuIFZlPStWZSxBZT4+Pj0wLERl''@;'; put 'put ''fHxhZSh0aGlzLFZlLEFlLDEsMTI3LC0xMjgpLFZlPDAmJihWZT0yNTUrVmUrMSksdGhpc1tBZV09MjU1JlZlLEFlKzF9LEYucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihWZSxBZSxEZSl7cmV0dXJuIFZlPStWZSxBZT4+Pj0wLERlfHxhZSh0aGlzLFZlLEFlLDIsMzI3NjcsLTMy''@;'; put 'put ''NzY4KSx0aGlzW0FlXT0yNTUmVmUsdGhpc1tBZSsxXT1WZT4+PjgsQWUrMn0sRi5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKFZlLEFlLERlKXtyZXR1cm4gVmU9K1ZlLEFlPj4+PTAsRGV8fGFlKHRoaXMsVmUsQWUsMiwzMjc2NywtMzI3NjgpLHRoaXNbQWVdPVZlPj4+OCx0aGlz''@;'; put 'put ''W0FlKzFdPTI1NSZWZSxBZSsyfSxGLnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24oVmUsQWUsRGUpe3JldHVybiBWZT0rVmUsQWU+Pj49MCxEZXx8YWUodGhpcyxWZSxBZSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHRoaXNbQWVdPTI1NSZWZSx0aGlzW0FlKzFdPVZlPj4+OCx0''@;'; put 'put ''aGlzW0FlKzJdPVZlPj4+MTYsdGhpc1tBZSszXT1WZT4+PjI0LEFlKzR9LEYucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihWZSxBZSxEZSl7cmV0dXJuIFZlPStWZSxBZT4+Pj0wLERlfHxhZSh0aGlzLFZlLEFlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksVmU8MCYmKFZlPTQy''@;'; put 'put ''OTQ5NjcyOTUrVmUrMSksdGhpc1tBZV09VmU+Pj4yNCx0aGlzW0FlKzFdPVZlPj4+MTYsdGhpc1tBZSsyXT1WZT4+PjgsdGhpc1tBZSszXT0yNTUmVmUsQWUrNH0sRi5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKFZlLEFlLERlKXtyZXR1cm4gc2UodGhpcyxWZSxBZSwhMCxEZSl9''@;'; put 'put ''LEYucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbihWZSxBZSxEZSl7cmV0dXJuIHNlKHRoaXMsVmUsQWUsITEsRGUpfSxGLnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKFZlLEFlLERlKXtyZXR1cm4gQ2UodGhpcyxWZSxBZSwhMCxEZSl9LEYucHJvdG90eXBlLndyaXRl''@;'; put 'put ''RG91YmxlQkU9ZnVuY3Rpb24oVmUsQWUsRGUpe3JldHVybiBDZSh0aGlzLFZlLEFlLCExLERlKX0sRi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihWZSxBZSxEZSxfdCl7aWYoIUYuaXNCdWZmZXIoVmUpKXRocm93IG5ldyBUeXBlRXJyb3IoImFyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlciIp''@;'; put 'put ''O2lmKERlfHwoRGU9MCksIV90JiYwIT09X3QmJihfdD10aGlzLmxlbmd0aCksQWU+PVZlLmxlbmd0aCYmKEFlPVZlLmxlbmd0aCksQWV8fChBZT0wKSxfdD4wJiZfdDxEZSYmKF90PURlKSxfdD09PURlfHwwPT09VmUubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoQWU8MCl0''@;'; put 'put ''aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKERlPDB8fERlPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYoX3Q8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBi''@;'; put 'put ''b3VuZHMiKTtfdD50aGlzLmxlbmd0aCYmKF90PXRoaXMubGVuZ3RoKSxWZS5sZW5ndGgtQWU8X3QtRGUmJihfdD1WZS5sZW5ndGgtQWUrRGUpO3ZhciBydD1fdC1EZTtyZXR1cm4gdGhpcz09PVZlJiYiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbj90''@;'; put 'put ''aGlzLmNvcHlXaXRoaW4oQWUsRGUsX3QpOlVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFZlLHRoaXMuc3ViYXJyYXkoRGUsX3QpLEFlKSxydH0sRi5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihWZSxBZSxEZSxfdCl7aWYoInN0cmluZyI9PXR5cGVvZiBWZSl7aWYoInN0cmluZyI9PXR5''@;'; put 'put ''cGVvZiBBZT8oX3Q9QWUsQWU9MCxEZT10aGlzLmxlbmd0aCk6InN0cmluZyI9PXR5cGVvZiBEZSYmKF90PURlLERlPXRoaXMubGVuZ3RoKSx2b2lkIDAhPT1fdCYmInN0cmluZyIhPXR5cGVvZiBfdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYo''@;'; put 'put ''InN0cmluZyI9PXR5cGVvZiBfdCYmIUYuaXNFbmNvZGluZyhfdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitfdCk7aWYoMT09PVZlLmxlbmd0aCl7dmFyIHJ0PVZlLmNoYXJDb2RlQXQoMCk7KCJ1dGY4Ij09PV90JiZydDwxMjh8fCJsYXRpbjEiPT09X3QpJiYo''@;'; put 'put ''VmU9cnQpfX1lbHNlIm51bWJlciI9PXR5cGVvZiBWZT9WZSY9MjU1OiJib29sZWFuIj09dHlwZW9mIFZlJiYoVmU9TnVtYmVyKFZlKSk7aWYoQWU8MHx8dGhpcy5sZW5ndGg8QWV8fHRoaXMubGVuZ3RoPERlKXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihE''@;'; put 'put ''ZTw9QWUpcmV0dXJuIHRoaXM7dmFyIFFlO2lmKEFlPj4+PTAsRGU9dm9pZCAwPT09RGU/dGhpcy5sZW5ndGg6RGU+Pj4wLFZlfHwoVmU9MCksIm51bWJlciI9PXR5cGVvZiBWZSlmb3IoUWU9QWU7UWU8RGU7KytRZSl0aGlzW1FlXT1WZTtlbHNle3ZhciBzbj1GLmlzQnVmZmVyKFZlKT9WZTpG''@;'; put 'put ''LmZyb20oVmUsX3QpLHZ0PXNuLmxlbmd0aDtpZigwPT09dnQpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlICInK1ZlKyciIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50ICJ2YWx1ZSInKTtmb3IoUWU9MDtRZTxEZS1BZTsrK1FlKXRoaXNbUWUrQWVdPXNuW1FlJXZ0XX1yZXR1cm4gdGhp''@;'; put 'put ''c307dmFyIFVlPS9bXisvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24gaXQoUmUsVmUpe1ZlPVZlfHwxLzA7Zm9yKHZhciBBZSxEZT1SZS5sZW5ndGgsX3Q9bnVsbCxydD1bXSxRZT0wO1FlPERlOysrUWUpe2lmKChBZT1SZS5jaGFyQ29kZUF0KFFlKSk+NTUyOTUmJkFlPDU3MzQ0KXtpZighX3Qp''@;'; put 'put ''e2lmKEFlPjU2MzE5KXsoVmUtPTMpPi0xJiZydC5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihRZSsxPT09RGUpeyhWZS09Myk+LTEmJnJ0LnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfV90PUFlO2NvbnRpbnVlfWlmKEFlPDU2MzIwKXsoVmUtPTMpPi0xJiZydC5wdXNoKDIzOSwx''@;'; put 'put ''OTEsMTg5KSxfdD1BZTtjb250aW51ZX1BZT02NTUzNisoX3QtNTUyOTY8PDEwfEFlLTU2MzIwKX1lbHNlIF90JiYoVmUtPTMpPi0xJiZydC5wdXNoKDIzOSwxOTEsMTg5KTtpZihfdD1udWxsLEFlPDEyOCl7aWYoKFZlLT0xKTwwKWJyZWFrO3J0LnB1c2goQWUpfWVsc2UgaWYoQWU8MjA0OCl7''@;'; put 'put ''aWYoKFZlLT0yKTwwKWJyZWFrO3J0LnB1c2goQWU+PjZ8MTkyLDYzJkFlfDEyOCl9ZWxzZSBpZihBZTw2NTUzNil7aWYoKFZlLT0zKTwwKWJyZWFrO3J0LnB1c2goQWU+PjEyfDIyNCxBZT4+NiY2M3wxMjgsNjMmQWV8MTI4KX1lbHNle2lmKCEoQWU8MTExNDExMikpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigoVmUtPTQpPDApYnJlYWs7cnQucHVzaChBZT4+MTh8MjQwLEFlPj4xMiY2M3wxMjgsQWU+PjYmNjN8MTI4LDYzJkFlfDEyOCl9fXJldHVybiBydH1mdW5jdGlvbiBLZShSZSl7cmV0dXJuIEkudG9CeXRlQXJyYXkoZnVuY3Rpb24gSmUoUmUpe2lm''@;'; put 'put ''KChSZT0oUmU9UmUuc3BsaXQoIj0iKVswXSkudHJpbSgpLnJlcGxhY2UoVWUsIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO1JlLmxlbmd0aCU0IT0wOylSZSs9Ij0iO3JldHVybiBSZX0oUmUpKX1mdW5jdGlvbiBqZShSZSxWZSxBZSxEZSl7Zm9yKHZhciBfdD0wO190PERlJiYhKF90K0Fl''@;'; put 'put ''Pj1WZS5sZW5ndGh8fF90Pj1SZS5sZW5ndGgpOysrX3QpVmVbX3QrQWVdPVJlW190XTtyZXR1cm4gX3R9ZnVuY3Rpb24ga2UoUmUsVmUpe3JldHVybiBSZSBpbnN0YW5jZW9mIFZlfHxudWxsIT1SZSYmbnVsbCE9UmUuY29uc3RydWN0b3ImJm51bGwhPVJlLmNvbnN0cnVjdG9yLm5hbWUmJlJl''@;'; put 'put ''LmNvbnN0cnVjdG9yLm5hbWU9PT1WZS5uYW1lfWZ1bmN0aW9uIEhlKFJlKXtyZXR1cm4gUmUhPVJlfXZhciBMZT1mdW5jdGlvbigpe2Zvcih2YXIgUmU9IjAxMjM0NTY3ODlhYmNkZWYiLFZlPW5ldyBBcnJheSgyNTYpLEFlPTA7QWU8MTY7KytBZSlmb3IodmFyIERlPTE2KkFlLF90PTA7X3Q8''@;'; put 'put ''MTY7KytfdClWZVtEZStfdF09UmVbQWVdK1JlW190XTtyZXR1cm4gVmV9KCl9LDg0NDE4OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiZW4taW4iLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVf''@;'; put 'put ''SnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlf''@;'; put 'put ''V2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntM''@;'; put 'put ''VDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21v''@;'; put 'put ''cnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vj''@;'; put 'put ''b25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9y''@;'; put 'put ''ZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24ocCl7dmFyIFY9cCUxMDtyZXR1cm4gcCsoMT09fn4ocCUxMDAvMTApPyJ0aCI6MT09PVY/InN0IjoyPT09Vj8ibmQiOjM9PT1WPyJyZCI6InRoIil9LHdlZWs6e2RvdzowLGRveTo2fX0pfShiKDk3NTg2''@;'; put 'put ''KSl9LDg1MDM5OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMzc3MzEpLF89Yig5NzU0MSkscD1iKDE0NDUpLFY9Yig0MzYzMiksdz1iKDExMzgpLFA9Xy5hZGQsRj1fLmhhcyxSPV8ucmVtb3ZlO2NlLmV4cG9ydHM9ZnVuY3Rpb24oTil7dmFyIE89SSh0aGlzKSxLPVYoTikuZ2V0''@;'; put 'put ''SXRlcmF0b3IoKSxaPXAoTyk7cmV0dXJuIHcoSyxmdW5jdGlvbihZKXtGKE8sWSk/UihaLFkpOlAoWixZKX0pLFp9fSw4NTMwMTpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89e3N0YW5kYWxvbmU6ImxlZGVuX1x4ZmFub3JfYlx1MDE1OWV6ZW5fZHVi''@;'; put 'put ''ZW5fa3ZcdTAxMWJ0ZW5fXHUwMTBkZXJ2ZW5fXHUwMTBkZXJ2ZW5lY19zcnBlbl96XHhlMVx1MDE1OVx4ZWRfXHUwMTU5XHhlZGplbl9saXN0b3BhZF9wcm9zaW5lYyIuc3BsaXQoIl8iKSxmb3JtYXQ6ImxlZG5hX1x4ZmFub3JhX2JcdTAxNTllem5hX2R1Ym5hX2t2XHUwMTFidG5hX1x1MDEw''@;'; put 'put ''ZGVydm5hX1x1MDEwZGVydmVuY2Vfc3JwbmFfelx4ZTFcdTAxNTlceGVkX1x1MDE1OVx4ZWRqbmFfbGlzdG9wYWR1X3Byb3NpbmNlIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9ERD9bby5dPyhcW1teXFtcXV0qXF18XHMpK01NTU0vfSxwPSJsZWRfXHhmYW5vX2JcdTAxNTllX2R1Yl9rdlx1MDEx''@;'; put 'put ''Yl9cdTAxMGR2bl9cdTAxMGR2Y19zcnBfelx4ZTFcdTAxNTlfXHUwMTU5XHhlZGpfbGlzX3BybyIuc3BsaXQoIl8iKSxWPVsvXmxlZC9pLC9eXHhmYW5vL2ksL15iXHUwMTU5ZS9pLC9eZHViL2ksL15rdlx1MDExYi9pLC9eKFx1MDEwZHZufFx1MDEwZGVydmVuJHxcdTAxMGRlcnZuYSkvaSwv''@;'; put 'put ''XihcdTAxMGR2Y3xcdTAxMGRlcnZlbmVjfFx1MDEwZGVydmVuY2UpL2ksL15zcnAvaSwvXnpceGUxXHUwMTU5L2ksL15cdTAxNTlceGVkai9pLC9ebGlzL2ksL15wcm8vaV0sdz0vXihsZWRlbnxceGZhbm9yfGJcdTAxNTllemVufGR1YmVufGt2XHUwMTFidGVufFx1MDEwZGVydmVuZWN8XHUw''@;'; put 'put ''MTBkZXJ2ZW5jZXxcdTAxMGRlcnZlbnxcdTAxMGRlcnZuYXxzcnBlbnx6XHhlMVx1MDE1OVx4ZWR8XHUwMTU5XHhlZGplbnxsaXN0b3BhZHxwcm9zaW5lY3xsZWR8XHhmYW5vfGJcdTAxNTllfGR1Ynxrdlx1MDExYnxcdTAxMGR2bnxcdTAxMGR2Y3xzcnB8elx4ZTFcdTAxNTl8XHUwMTU5XHhl''@;'; put 'put ''ZGp8bGlzfHBybykvaTtmdW5jdGlvbiBQKHope3JldHVybiB6PjEmJno8NSYmMSE9fn4oei8xMCl9ZnVuY3Rpb24gRih6LE4sTyxLKXt2YXIgWj16KyIgIjtzd2l0Y2goTyl7Y2FzZSJzIjpyZXR1cm4gTnx8Sz8icFx4ZTFyIHNla3VuZCI6InBceGUxciBzZWt1bmRhbWkiO2Nhc2Uic3MiOnJl''@;'; put 'put ''dHVybiBOfHxLP1orKFAoeik/InNla3VuZHkiOiJzZWt1bmQiKTpaKyJzZWt1bmRhbWkiO2Nhc2UibSI6cmV0dXJuIE4/Im1pbnV0YSI6Sz8ibWludXR1IjoibWludXRvdSI7Y2FzZSJtbSI6cmV0dXJuIE58fEs/WisoUCh6KT8ibWludXR5IjoibWludXQiKTpaKyJtaW51dGFtaSI7Y2FzZSJo''@;'; put 'put ''IjpyZXR1cm4gTj8iaG9kaW5hIjpLPyJob2RpbnUiOiJob2Rpbm91IjtjYXNlImhoIjpyZXR1cm4gTnx8Sz9aKyhQKHopPyJob2RpbnkiOiJob2RpbiIpOlorImhvZGluYW1pIjtjYXNlImQiOnJldHVybiBOfHxLPyJkZW4iOiJkbmVtIjtjYXNlImRkIjpyZXR1cm4gTnx8Sz9aKyhQKHopPyJk''@;'; put 'put ''bnkiOiJkblx4ZWQiKTpaKyJkbnkiO2Nhc2UiTSI6cmV0dXJuIE58fEs/Im1cdTAxMWJzXHhlZGMiOiJtXHUwMTFic1x4ZWRjZW0iO2Nhc2UiTU0iOnJldHVybiBOfHxLP1orKFAoeik/Im1cdTAxMWJzXHhlZGNlIjoibVx1MDExYnNceGVkY1x1MDE2ZiIpOlorIm1cdTAxMWJzXHhlZGNpIjtj''@;'; put 'put ''YXNlInkiOnJldHVybiBOfHxLPyJyb2siOiJyb2tlbSI7Y2FzZSJ5eSI6cmV0dXJuIE58fEs/WisoUCh6KT8icm9reSI6ImxldCIpOlorImxldHkifX1JLmRlZmluZUxvY2FsZSgiY3MiLHttb250aHM6Xyxtb250aHNTaG9ydDpwLG1vbnRoc1JlZ2V4OncsbW9udGhzU2hvcnRSZWdleDp3LG1v''@;'; put 'put ''bnRoc1N0cmljdFJlZ2V4Oi9eKGxlZGVufGxlZG5hfFx4ZmFub3JhfFx4ZmFub3J8Ylx1MDE1OWV6ZW58Ylx1MDE1OWV6bmF8ZHViZW58ZHVibmF8a3ZcdTAxMWJ0ZW58a3ZcdTAxMWJ0bmF8XHUwMTBkZXJ2ZW5lY3xcdTAxMGRlcnZlbmNlfFx1MDEwZGVydmVufFx1MDEwZGVydm5hfHNycGVu''@;'; put 'put ''fHNycG5hfHpceGUxXHUwMTU5XHhlZHxcdTAxNTlceGVkamVufFx1MDE1OVx4ZWRqbmF8bGlzdG9wYWR1fGxpc3RvcGFkfHByb3NpbmVjfHByb3NpbmNlKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14obGVkfFx4ZmFub3xiXHUwMTU5ZXxkdWJ8a3ZcdTAxMWJ8XHUwMTBkdm58XHUwMTBk''@;'; put 'put ''dmN8c3JwfHpceGUxXHUwMTU5fFx1MDE1OVx4ZWRqfGxpc3xwcm8pL2ksbW9udGhzUGFyc2U6Vixsb25nTW9udGhzUGFyc2U6VixzaG9ydE1vbnRoc1BhcnNlOlYsd2Vla2RheXM6Im5lZFx1MDExYmxlX3BvbmRcdTAxMWJsXHhlZF9ceGZhdGVyXHhmZF9zdFx1MDE1OWVkYV9cdTAxMGR0dnJ0''@;'; put 'put ''ZWtfcFx4ZTF0ZWtfc29ib3RhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Im5lX3BvX1x4ZmF0X3N0X1x1MDEwZHRfcFx4ZTFfc28iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Im5lX3BvX1x4ZmF0X3N0X1x1MDEwZHRfcFx4ZTFfc28iLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xU''@;'; put 'put ''OiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQgRC4gTU1NTSBZWVlZIEg6bW0iLGw6IkQuIE0uIFlZWVkifSxjYWxlbmRhcjp7c2FtZURheToiW2RuZXMgdl0gTFQiLG5leHREYXk6''@;'; put 'put ''Ilt6XHhlZHRyYSB2XSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbdiBuZWRcdTAxMWJsaSB2XSBMVCI7Y2FzZSAxOmNhc2UgMjpyZXR1cm4iW3ZdIGRkZGQgW3ZdIExUIjtjYXNlIDM6cmV0dXJuIlt2ZSBzdFx1MDE1OWVkdSB2XSBM''@;'; put 'put ''VCI7Y2FzZSA0OnJldHVybiJbdmUgXHUwMTBkdHZydGVrIHZdIExUIjtjYXNlIDU6cmV0dXJuIlt2IHBceGUxdGVrIHZdIExUIjtjYXNlIDY6cmV0dXJuIlt2IHNvYm90dSB2XSBMVCJ9fSxsYXN0RGF5OiJbdlx1MDEwZGVyYSB2XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhp''@;'; put 'put ''cy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbbWludWxvdSBuZWRcdTAxMWJsaSB2XSBMVCI7Y2FzZSAxOmNhc2UgMjpyZXR1cm4iW21pbnVsXHhlOV0gZGRkZCBbdl0gTFQiO2Nhc2UgMzpyZXR1cm4iW21pbnVsb3Ugc3RcdTAxNTllZHUgdl0gTFQiO2Nhc2UgNDpjYXNlIDU6cmV0dXJuIlttaW51''@;'; put 'put ''bFx4ZmRdIGRkZGQgW3ZdIExUIjtjYXNlIDY6cmV0dXJuIlttaW51bG91IHNvYm90dSB2XSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ6YSAlcyIscGFzdDoicFx1MDE1OWVkICVzIixzOkYsc3M6RixtOkYsbW06RixoOkYsaGg6RixkOkYsZGQ6RixNOkYsTU06''@;'; put 'put ''Rix5OkYseXk6Rn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDg1NDg4OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9TnVtYmVyLmlzTmFOfHxmdW5jdGlvbihiKXtyZXR1cm4gYiE9''@;'; put 'put ''Yn19LDg1NjU2OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNDY5MjYpLF89YigzMjYzMykscD1iKDkyOTk4KSxWPWIoODYxMTUpLHc9Yig5Mzg2NSksUD1iKDU4MDEyKSxGPVR5cGVFcnJvcixSPVAoInRvUHJpbWl0aXZlIik7Y2UuZXhwb3J0cz1mdW5jdGlvbih6LE4pe2lmKCFf''@;'; put 'put ''KHopfHxwKHopKXJldHVybiB6O3ZhciBLLE89Vih6LFIpO2lmKE8pe2lmKHZvaWQgMD09PU4mJihOPSJkZWZhdWx0IiksSz1JKE8seixOKSwhXyhLKXx8cChLKSlyZXR1cm4gSzt0aHJvdyBuZXcgRigiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlIil9cmV0dXJuIHZv''@;'; put 'put ''aWQgMD09PU4mJihOPSJudW1iZXIiKSx3KHosTil9fSw4NTY3MTooY2UsWCk9PnsidXNlIHN0cmljdCI7WC5yZWFkVUludDMyQkU9ZnVuY3Rpb24oVix3KXtyZXR1cm4oVlswK3ddPDwyNHxWWzErd108PDE2fFZbMit3XTw8OHxWWzMrd10pPj4+MH0sWC53cml0ZVVJbnQzMkJFPWZ1bmN0aW9u''@;'; put 'put ''KFYsdyxQKXtWWzArUF09dz4+PjI0LFZbMStQXT13Pj4+MTYmMjU1LFZbMitQXT13Pj4+OCYyNTUsVlszK1BdPTI1NSZ3fSxYLmlwPWZ1bmN0aW9uKFYsdyxQLEYpe2Zvcih2YXIgUj0wLHo9MCxOPTY7Tj49MDtOLT0yKXtmb3IodmFyIE89MDtPPD0yNDtPKz04KVI8PD0xLFJ8PXc+Pj5PK04m''@;'; put 'put ''MTtmb3IoTz0wO088PTI0O08rPTgpUjw8PTEsUnw9Vj4+Pk8rTiYxfWZvcihOPTY7Tj49MDtOLT0yKXtmb3IoTz0xO088PTI1O08rPTgpejw8PTEsenw9dz4+Pk8rTiYxO2ZvcihPPTE7Tzw9MjU7Tys9OCl6PDw9MSx6fD1WPj4+TytOJjF9UFtGKzBdPVI+Pj4wLFBbRisxXT16Pj4+MH0sWC5y''@;'; put 'put ''aXA9ZnVuY3Rpb24oVix3LFAsRil7Zm9yKHZhciBSPTAsej0wLE49MDtOPDQ7TisrKWZvcih2YXIgTz0yNDtPPj0wO08tPTgpUjw8PTEsUnw9dz4+Pk8rTiYxLFI8PD0xLFJ8PVY+Pj5PK04mMTtmb3IoTj00O048ODtOKyspZm9yKE89MjQ7Tz49MDtPLT04KXo8PD0xLHp8PXc+Pj5PK04mMSx6''@;'; put 'put ''PDw9MSx6fD1WPj4+TytOJjE7UFtGKzBdPVI+Pj4wLFBbRisxXT16Pj4+MH0sWC5wYzE9ZnVuY3Rpb24oVix3LFAsRil7Zm9yKHZhciBSPTAsej0wLE49NztOPj01O04tLSl7Zm9yKHZhciBPPTA7Tzw9MjQ7Tys9OClSPDw9MSxSfD13Pj5PK04mMTtmb3IoTz0wO088PTI0O08rPTgpUjw8PTEs''@;'; put 'put ''Unw9Vj4+TytOJjF9Zm9yKE89MDtPPD0yNDtPKz04KVI8PD0xLFJ8PXc+Pk8rTiYxO2ZvcihOPTE7Tjw9MztOKyspe2ZvcihPPTA7Tzw9MjQ7Tys9OCl6PDw9MSx6fD13Pj5PK04mMTtmb3IoTz0wO088PTI0O08rPTgpejw8PTEsenw9Vj4+TytOJjF9Zm9yKE89MDtPPD0yNDtPKz04KXo8PD0x''@;'; put 'put ''LHp8PVY+Pk8rTiYxO1BbRiswXT1SPj4+MCxQW0YrMV09ej4+PjB9LFgucjI4c2hsPWZ1bmN0aW9uKFYsdyl7cmV0dXJuIFY8PHcmMjY4NDM1NDU1fFY+Pj4yOC13fTt2YXIgYj1bMTQsMTEsMTcsNCwyNywyMywyNSwwLDEzLDIyLDcsMTgsNSw5LDE2LDI0LDIsMjAsMTIsMjEsMSw4LDE1LDI2''@;'; put 'put ''LDE1LDQsMjUsMTksOSwxLDI2LDE2LDUsMTEsMjMsOCwxMiw3LDE3LDAsMjIsMywxMCwxNCw2LDIwLDI3LDI0XTtYLnBjMj1mdW5jdGlvbihWLHcsUCxGKXtmb3IodmFyIFI9MCx6PTAsTj1iLmxlbmd0aD4+PjEsTz0wO088TjtPKyspUjw8PTEsUnw9Vj4+PmJbT10mMTtmb3IoTz1OO088Yi5s''@;'; put 'put ''ZW5ndGg7TysrKXo8PD0xLHp8PXc+Pj5iW09dJjE7UFtGKzBdPVI+Pj4wLFBbRisxXT16Pj4+MH0sWC5leHBhbmQ9ZnVuY3Rpb24oVix3LFApe3ZhciBGPTAsUj0wO0Y9KDEmVik8PDV8Vj4+PjI3O2Zvcih2YXIgej0yMzt6Pj0xNTt6LT00KUY8PD02LEZ8PVY+Pj56JjYzO2Zvcih6PTExO3o+''@;'; put 'put ''PTM7ei09NClSfD1WPj4+eiY2MyxSPDw9NjtSfD0oMzEmVik8PDF8Vj4+PjMxLHdbUCswXT1GPj4+MCx3W1ArMV09Uj4+PjB9O3ZhciBJPVsxNCwwLDQsMTUsMTMsNywxLDQsMiwxNCwxNSwyLDExLDEzLDgsMSwzLDEwLDEwLDYsNiwxMiwxMiwxMSw1LDksOSw1LDAsMyw3LDgsNCwxNSwxLDEy''@;'; put 'put ''LDE0LDgsOCwyLDEzLDQsNiw5LDIsMSwxMSw3LDE1LDUsMTIsMTEsOSwzLDcsMTQsMywxMCwxMCwwLDUsNiwwLDEzLDE1LDMsMSwxMyw4LDQsMTQsNyw2LDE1LDExLDIsMyw4LDQsMTQsOSwxMiw3LDAsMiwxLDEzLDEwLDEyLDYsMCw5LDUsMTEsMTAsNSwwLDEzLDE0LDgsNywxMCwxMSwxLDEw''@;'; put 'put ''LDMsNCwxNSwxMyw0LDEsMiw1LDExLDgsNiwxMiw3LDYsMTIsOSwwLDMsNSwyLDE0LDE1LDksMTAsMTMsMCw3LDksMCwxNCw5LDYsMywzLDQsMTUsNiw1LDEwLDEsMiwxMyw4LDEyLDUsNywxNCwxMSwxMiw0LDExLDIsMTUsOCwxLDEzLDEsNiwxMCw0LDEzLDksMCw4LDYsMTUsOSwzLDgsMCw3''@;'; put 'put ''LDExLDQsMSwxNSwyLDE0LDEyLDMsNSwxMSwxMCw1LDE0LDIsNywxMiw3LDEzLDEzLDgsMTQsMTEsMyw1LDAsNiw2LDE1LDksMCwxMCwzLDEsNCwyLDcsOCwyLDUsMTIsMTEsMSwxMiwxMCw0LDE0LDE1LDksMTAsMyw2LDE1LDksMCwwLDYsMTIsMTAsMTEsMSw3LDEzLDEzLDgsMTUsOSwxLDQs''@;'; put 'put ''Myw1LDE0LDExLDUsMTIsMiw3LDgsMiw0LDE0LDIsMTQsMTIsMTEsNCwyLDEsMTIsNyw0LDEwLDcsMTEsMTMsNiwxLDgsNSw1LDAsMywxNSwxNSwxMCwxMywzLDAsOSwxNCw4LDksNiw0LDExLDIsOCwxLDEyLDExLDcsMTAsMSwxMywxNCw3LDIsOCwxMywxNSw2LDksMTUsMTIsMCw1LDksNiwx''@;'; put 'put ''MCwzLDQsMCw1LDE0LDMsMTIsMTAsMSwxNSwxMCw0LDE1LDIsOSw3LDIsMTIsNiw5LDgsNSwwLDYsMTMsMSwzLDEzLDQsMTQsMTQsMCw3LDExLDUsMywxMSw4LDksNCwxNCwzLDE1LDIsNSwxMiwyLDksOCw1LDEyLDE1LDMsMTAsNywxMSwwLDE0LDQsMSwxMCw3LDEsNiwxMywwLDExLDgsNiwx''@;'; put 'put ''Myw0LDEzLDExLDAsMiwxMSwxNCw3LDE1LDQsMCw5LDgsMSwxMywxMCwzLDE0LDEyLDMsOSw1LDcsMTIsNSwyLDEwLDE1LDYsOCwxLDYsMSw2LDQsMTEsMTEsMTMsMTMsOCwxMiwxLDMsNCw3LDEwLDE0LDcsMTAsOSwxNSw1LDYsMCw4LDE1LDAsMTQsNSwyLDksMywyLDEyLDEzLDEsMiwxNSw4''@;'; put 'put ''LDEzLDQsOCw2LDEwLDE1LDMsMTEsNywxLDQsMTAsMTIsOSw1LDMsNiwxNCwxMSw1LDAsMCwxNCwxMiw5LDcsMiw3LDIsMTEsMSw0LDE0LDEsNyw5LDQsMTIsMTAsMTQsOCwyLDEzLDAsMTUsNiwxMiwxMCw5LDEzLDAsMTUsMywzLDUsNSw2LDgsMTFdO1guc3Vic3RpdHV0ZT1mdW5jdGlvbihW''@;'; put 'put ''LHcpe2Zvcih2YXIgUD0wLEY9MDtGPDQ7RisrKVA8PD00LFB8PUlbNjQqRisoVj4+PjE4LTYqRiY2MyldO2ZvcihGPTA7Rjw0O0YrKylQPDw9NCxQfD1JWzI1Nis2NCpGKyh3Pj4+MTgtNipGJjYzKV07cmV0dXJuIFA+Pj4wfTt2YXIgXz1bMTYsMjUsMTIsMTEsMywyMCw0LDE1LDMxLDE3LDks''@;'; put 'put ''NiwyNywxNCwxLDIyLDMwLDI0LDgsMTgsMCw1LDI5LDIzLDEzLDE5LDIsMjYsMTAsMjEsMjgsN107WC5wZXJtdXRlPWZ1bmN0aW9uKFYpe2Zvcih2YXIgdz0wLFA9MDtQPF8ubGVuZ3RoO1ArKyl3PDw9MSx3fD1WPj4+X1tQXSYxO3JldHVybiB3Pj4+MH0sWC5wYWRTcGxpdD1mdW5jdGlvbihW''@;'; put 'put ''LHcsUCl7Zm9yKHZhciBGPVYudG9TdHJpbmcoMik7Ri5sZW5ndGg8dzspRj0iMCIrRjtmb3IodmFyIFI9W10sej0wO3o8dzt6Kz1QKVIucHVzaChGLnNsaWNlKHoseitQKSk7cmV0dXJuIFIuam9pbigiICIpfX0sODU2OTc6KGNlLFgsYik9Pnt2YXIgST1iKDcxOTkzKTtmdW5jdGlvbiBfKFYp''@;'; put 'put ''e3RoaXMuX3JlcG9ydGVyU3RhdGU9e29iajpudWxsLHBhdGg6W10sb3B0aW9uczpWfHx7fSxlcnJvcnM6W119fWZ1bmN0aW9uIHAoVix3KXt0aGlzLnBhdGg9Vix0aGlzLnJldGhyb3codyl9WC5hPV8sXy5wcm90b3R5cGUuaXNFcnJvcj1mdW5jdGlvbih3KXtyZXR1cm4gdyBpbnN0YW5jZW9m''@;'; put 'put ''IHB9LF8ucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oKXt2YXIgdz10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybntvYmo6dy5vYmoscGF0aExlbjp3LnBhdGgubGVuZ3RofX0sXy5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbih3KXt2YXIgUD10aGlzLl9yZXBvcnRlclN0YXRlO1Aub2JqPXcu''@;'; put 'put ''b2JqLFAucGF0aD1QLnBhdGguc2xpY2UoMCx3LnBhdGhMZW4pfSxfLnByb3RvdHlwZS5lbnRlcktleT1mdW5jdGlvbih3KXtyZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLnB1c2godyl9LF8ucHJvdG90eXBlLmV4aXRLZXk9ZnVuY3Rpb24odyl7dmFyIFA9dGhpcy5fcmVwb3J0ZXJT''@;'; put 'put ''dGF0ZTtQLnBhdGg9UC5wYXRoLnNsaWNlKDAsdy0xKX0sXy5wcm90b3R5cGUubGVhdmVLZXk9ZnVuY3Rpb24odyxQLEYpe3ZhciBSPXRoaXMuX3JlcG9ydGVyU3RhdGU7dGhpcy5leGl0S2V5KHcpLG51bGwhPT1SLm9iaiYmKFIub2JqW1BdPUYpfSxfLnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5qb2luKCIvIil9LF8ucHJvdG90eXBlLmVudGVyT2JqZWN0PWZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxQPXcub2JqO3JldHVybiB3Lm9iaj17fSxQfSxfLnByb3RvdHlwZS5sZWF2ZU9iamVjdD1mdW5jdGlv''@;'; put 'put ''bih3KXt2YXIgUD10aGlzLl9yZXBvcnRlclN0YXRlLEY9UC5vYmo7cmV0dXJuIFAub2JqPXcsRn0sXy5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24odyl7dmFyIFAsRj10aGlzLl9yZXBvcnRlclN0YXRlLFI9dyBpbnN0YW5jZW9mIHA7aWYoUD1SP3c6bmV3IHAoRi5wYXRoLm1hcChmdW5jdGlv''@;'; put 'put ''bih6KXtyZXR1cm4iWyIrSlNPTi5zdHJpbmdpZnkoeikrIl0ifSkuam9pbigiIiksdy5tZXNzYWdlfHx3LHcuc3RhY2spLCFGLm9wdGlvbnMucGFydGlhbCl0aHJvdyBQO3JldHVybiBSfHxGLmVycm9ycy5wdXNoKFApLFB9LF8ucHJvdG90eXBlLndyYXBSZXN1bHQ9ZnVuY3Rpb24odyl7dmFy''@;'; put 'put ''IFA9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtyZXR1cm4gUC5vcHRpb25zLnBhcnRpYWw/e3Jlc3VsdDp0aGlzLmlzRXJyb3Iodyk/bnVsbDp3LGVycm9yczpQLmVycm9yc306d30sSShwLEVycm9yKSxwLnByb3RvdHlwZS5yZXRocm93PWZ1bmN0aW9uKHcpe2lmKHRoaXMubWVzc2FnZT13KyIgYXQ6''@;'; put 'put ''ICIrKHRoaXMucGF0aHx8IihzaGFsbG93KSIpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHApLCF0aGlzLnN0YWNrKXRyeXt0aHJvdyBuZXcgRXJyb3IodGhpcy5tZXNzYWdlKX1jYXRjaChQKXt0aGlzLnN0YWNrPVAuc3RhY2t9cmV0dXJu''@;'; put 'put ''IHRoaXN9fSw4NTc2NTpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInNzIix7bW9udGhzOiJCaGltYmlkdndhbmVfSW5kbG92YW5hX0luZGxvdidsZW5raHVsdV9NYWJhc2FfSW5raHdla2h3ZXRpX0luaGxhYmFfS2hvbHdhbmVfSW5n''@;'; put 'put ''Y2lfSW55b25pX0ltcGhhbGFfTHdldGlfSW5nb25nb25pIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJCaGlfSW5hX0ludV9NYWJfSW5rX0luaF9LaG9fSWdjX0lueV9JbXBfTHdlX0lnbyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiTGlzb250Zm9fVW1zb21idWx1a29fTGVzaWJpbGlfTGVzaXRz''@;'; put 'put ''YXRmdV9MZXNpbmVfTGVzaWhsYW51X1VtZ2NpYmVsbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJMaXNfVW1iX0xzYl9MZXNfTHNpX0xzaF9VbWciLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkxpX1VzX0xiX0x0X0xzX0xoX1VnIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDoh''@;'; put 'put ''MCxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbTmFtdWhsYSBu''@;'; put 'put ''Z2FdIExUIixuZXh0RGF5OiJbS3VzYXNhIG5nYV0gTFQiLG5leHRXZWVrOiJkZGRkIFtuZ2FdIExUIixsYXN0RGF5OiJbSXRvbG8gbmdhXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2xlbGlwaGVsaWxlXSBbbmdhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToibmdhICVz''@;'; put 'put ''IixwYXN0OiJ3ZW50ZWthIG5nYSAlcyIsczoiZW1penV6d2FuYSBsb21jYW5lIixzczoiJWQgbXp1endhbmEiLG06InVtenV6dSIsbW06IiVkIGVtaXp1enUiLGg6ImxpaG9yYSIsaGg6IiVkIGVtYWhvcmEiLGQ6ImxpbGFuZ2EiLGRkOiIlZCBlbWFsYW5nYSIsTToiaW55YW5nYSIsTU06IiVk''@;'; put 'put ''IHRpbnlhbmdhIix5OiJ1bW55YWthIix5eToiJWQgaW1pbnlha2EifSxtZXJpZGllbVBhcnNlOi9la3VzZW5pfGVtaW5pfGVudHNhbWJhbWF8ZWJ1c3VrdS8sbWVyaWRpZW06ZnVuY3Rpb24ocCxWLHcpe3JldHVybiBwPDExPyJla3VzZW5pIjpwPDE1PyJlbWluaSI6cDwxOT8iZW50c2FtYmFt''@;'; put 'put ''YSI6ImVidXN1a3UifSxtZXJpZGllbUhvdXI6ZnVuY3Rpb24ocCxWKXtyZXR1cm4gMTI9PT1wJiYocD0wKSwiZWt1c2VuaSI9PT1WP3A6ImVtaW5pIj09PVY/cD49MTE/cDpwKzEyOiJlbnRzYW1iYW1hIj09PVZ8fCJlYnVzdWt1Ij09PVY/MD09PXA/MDpwKzEyOnZvaWQgMH0sZGF5T2ZNb250''@;'; put 'put ''aE9yZGluYWxQYXJzZTovXGR7MSwyfS8sb3JkaW5hbDoiJWQiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDg1ODY5OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17d29yZHM6e3NzOlsic2VrdW5kIiwic2VrdW5kYSIsInNla3VuZGki''@;'; put 'put ''XSxtOlsiamVkYW4gbWludXQiLCJqZWRub2cgbWludXRhIl0sbW06WyJtaW51dCIsIm1pbnV0YSIsIm1pbnV0YSJdLGg6WyJqZWRhbiBzYXQiLCJqZWRub2cgc2F0YSJdLGhoOlsic2F0Iiwic2F0YSIsInNhdGkiXSxkZDpbImRhbiIsImRhbmEiLCJkYW5hIl0sTU06WyJtamVzZWMiLCJtamVz''@;'; put 'put ''ZWNhIiwibWplc2VjaSJdLHl5OlsiZ29kaW5hIiwiZ29kaW5lIiwiZ29kaW5hIl19LGNvcnJlY3RHcmFtbWF0aWNhbENhc2U6ZnVuY3Rpb24oVix3KXtyZXR1cm4gMT09PVY/d1swXTpWPj0yJiZWPD00P3dbMV06d1syXX0sdHJhbnNsYXRlOmZ1bmN0aW9uKFYsdyxQKXt2YXIgRj1fLndvcmRz''@;'; put 'put ''W1BdO3JldHVybiAxPT09UC5sZW5ndGg/dz9GWzBdOkZbMV06VisiICIrXy5jb3JyZWN0R3JhbW1hdGljYWxDYXNlKFYsRil9fTtJLmRlZmluZUxvY2FsZSgibWUiLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcnRfYXByaWxfbWFqX2p1bl9qdWxfYXZndXN0X3NlcHRlbWJhcl9va3RvYmFy''@;'; put 'put ''X25vdmVtYmFyX2RlY2VtYmFyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW4uX2ZlYi5fbWFyLl9hcHIuX21hal9qdW5fanVsX2F2Zy5fc2VwLl9va3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJuZWRqZWxqYV9wb25lZGplbGpha191''@;'; put 'put ''dG9yYWtfc3JpamVkYV9cdTAxMGRldHZydGFrX3BldGFrX3N1Ym90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZWQuX3Bvbi5fdXRvLl9zcmkuX1x1MDEwZGV0Ll9wZXQuX3N1Yi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Im5lX3BvX3V0X3NyX1x1MDEwZGVfcGVfc3UiLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFy''@;'; put 'put ''OntzYW1lRGF5OiJbZGFuYXMgdV0gTFQiLG5leHREYXk6IltzanV0cmEgdV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3VdIFtuZWRqZWxqdV0gW3VdIExUIjtjYXNlIDM6cmV0dXJuIlt1XSBbc3JpamVkdV0gW3VdIExUIjtjYXNl''@;'; put 'put ''IDY6cmV0dXJuIlt1XSBbc3Vib3R1XSBbdV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3VdIGRkZGQgW3VdIExUIn19LGxhc3REYXk6IltqdVx1MDEwZGUgdV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuWyJbcHJvXHUwMTYxbGVdIFtuZWRqZWxqZV0g''@;'; put 'put ''W3VdIExUIiwiW3Byb1x1MDE2MWxvZ10gW3BvbmVkamVsamthXSBbdV0gTFQiLCJbcHJvXHUwMTYxbG9nXSBbdXRvcmthXSBbdV0gTFQiLCJbcHJvXHUwMTYxbGVdIFtzcmlqZWRlXSBbdV0gTFQiLCJbcHJvXHUwMTYxbG9nXSBbXHUwMTBkZXR2cnRrYV0gW3VdIExUIiwiW3Byb1x1MDE2MWxv''@;'; put 'put ''Z10gW3BldGthXSBbdV0gTFQiLCJbcHJvXHUwMTYxbGVdIFtzdWJvdGVdIFt1XSBMVCJdW3RoaXMuZGF5KCldfSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ6YSAlcyIscGFzdDoicHJpamUgJXMiLHM6Im5la29saWtvIHNla3VuZGkiLHNzOl8udHJhbnNsYXRlLG06Xy50''@;'; put 'put ''cmFuc2xhdGUsbW06Xy50cmFuc2xhdGUsaDpfLnRyYW5zbGF0ZSxoaDpfLnRyYW5zbGF0ZSxkOiJkYW4iLGRkOl8udHJhbnNsYXRlLE06Im1qZXNlYyIsTU06Xy50cmFuc2xhdGUseToiZ29kaW51Iix5eTpfLnRyYW5zbGF0ZX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxv''@;'; put 'put ''cmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfShiKDk3NTg2KSl9LDg1OTE3OihjZSxYLGIpPT57dmFyIEk9YigyNzA1NCkuQnVmZmVyLF89SS5hbGxvYygxNiwwKTtmdW5jdGlvbiBWKFApe3ZhciBGPUkuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBGLndyaXRlVUludDMyQkUoUFsw''@;'; put 'put ''XT4+PjAsMCksRi53cml0ZVVJbnQzMkJFKFBbMV0+Pj4wLDQpLEYud3JpdGVVSW50MzJCRShQWzJdPj4+MCw4KSxGLndyaXRlVUludDMyQkUoUFszXT4+PjAsMTIpLEZ9ZnVuY3Rpb24gdyhQKXt0aGlzLmg9UCx0aGlzLnN0YXRlPUkuYWxsb2MoMTYsMCksdGhpcy5jYWNoZT1JLmFsbG9jVW5z''@;'; put 'put ''YWZlKDApfXcucHJvdG90eXBlLmdoYXNoPWZ1bmN0aW9uKFApe2Zvcih2YXIgRj0tMTsrK0Y8UC5sZW5ndGg7KXRoaXMuc3RhdGVbRl1ePVBbRl07dGhpcy5fbXVsdGlwbHkoKX0sdy5wcm90b3R5cGUuX211bHRpcGx5PWZ1bmN0aW9uKCl7Zm9yKHZhciBSLE4sUD1mdW5jdGlvbiBwKFApe3Jl''@;'; put 'put ''dHVybltQLnJlYWRVSW50MzJCRSgwKSxQLnJlYWRVSW50MzJCRSg0KSxQLnJlYWRVSW50MzJCRSg4KSxQLnJlYWRVSW50MzJCRSgxMildfSh0aGlzLmgpLEY9WzAsMCwwLDBdLE89LTE7KytPPDEyODspe2ZvcighISh0aGlzLnN0YXRlW35+KE8vOCldJjE8PDctTyU4KSYmKEZbMF1ePVBbMF0s''@;'; put 'put ''RlsxXV49UFsxXSxGWzJdXj1QWzJdLEZbM11ePVBbM10pLE49ISEoMSZQWzNdKSxSPTM7Uj4wO1ItLSlQW1JdPVBbUl0+Pj4xfCgxJlBbUi0xXSk8PDMxO1BbMF09UFswXT4+PjEsTiYmKFBbMF09UFswXV4yMjU8PDI0KX10aGlzLnN0YXRlPVYoRil9LHcucHJvdG90eXBlLnVwZGF0ZT1mdW5j''@;'; put 'put ''dGlvbihQKXt0aGlzLmNhY2hlPUkuY29uY2F0KFt0aGlzLmNhY2hlLFBdKTtmb3IodmFyIEY7dGhpcy5jYWNoZS5sZW5ndGg+PTE2OylGPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSx0aGlzLmdoYXNoKEYpfSx3LnByb3RvdHlwZS5maW5h''@;'; put 'put ''bD1mdW5jdGlvbihQLEYpe3JldHVybiB0aGlzLmNhY2hlLmxlbmd0aCYmdGhpcy5naGFzaChJLmNvbmNhdChbdGhpcy5jYWNoZSxfXSwxNikpLHRoaXMuZ2hhc2goVihbMCxQLDAsRl0pKSx0aGlzLnN0YXRlfSxjZS5leHBvcnRzPXd9LDg2MTExOmNlPT57InVzZSBzdHJpY3QiO3ZhciBYPWlz''@;'; put 'put ''RmluaXRlLGI9TWF0aC5wb3coMiwzMCktMTtjZS5leHBvcnRzPWZ1bmN0aW9uKEksXyl7aWYoIm51bWJlciIhPXR5cGVvZiBJKXRocm93IG5ldyBUeXBlRXJyb3IoIkl0ZXJhdGlvbnMgbm90IGEgbnVtYmVyIik7aWYoSTwwfHwhWChJKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJCYWQgaXRlcmF0''@;'; put 'put ''aW9ucyIpO2lmKCJudW1iZXIiIT10eXBlb2YgXyl0aHJvdyBuZXcgVHlwZUVycm9yKCJLZXkgbGVuZ3RoIG5vdCBhIG51bWJlciIpO2lmKF88MHx8Xz5ifHxfIT1fKXRocm93IG5ldyBUeXBlRXJyb3IoIkJhZCBrZXkgbGVuZ3RoIil9fSw4NjExNTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgST1iKDMxNDgzKSxfPWIoOTQ0NjgpO2NlLmV4cG9ydHM9ZnVuY3Rpb24ocCxWKXt2YXIgdz1wW1ZdO3JldHVybiBfKHcpP3ZvaWQgMDpJKHcpfX0sODY2NzU6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig1ODYwNyksXz1JKHt9LnRvU3RyaW5nKSxwPUkoIiIuc2xpY2UpO2Nl''@;'; put 'put ''LmV4cG9ydHM9ZnVuY3Rpb24oVil7cmV0dXJuIHAoXyhWKSw4LC0xKX19LDg3MjIyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMzEzNiksXz1JLmFzc2VydCxwPUkucGFyc2VCeXRlcyxWPUkuY2FjaGVkUHJvcGVydHk7ZnVuY3Rpb24gdyhQLEYpe3RoaXMuZWRkc2E9UCx0aGlz''@;'; put 'put ''Ll9zZWNyZXQ9cChGLnNlY3JldCksUC5pc1BvaW50KEYucHViKT90aGlzLl9wdWI9Ri5wdWI6dGhpcy5fcHViQnl0ZXM9cChGLnB1Yil9dy5mcm9tUHVibGljPWZ1bmN0aW9uKEYsUil7cmV0dXJuIFIgaW5zdGFuY2VvZiB3P1I6bmV3IHcoRix7cHViOlJ9KX0sdy5mcm9tU2VjcmV0PWZ1bmN0''@;'; put 'put ''aW9uKEYsUil7cmV0dXJuIFIgaW5zdGFuY2VvZiB3P1I6bmV3IHcoRix7c2VjcmV0OlJ9KX0sdy5wcm90b3R5cGUuc2VjcmV0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlY3JldH0sVih3LCJwdWJCeXRlcyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlz''@;'; put 'put ''LnB1YigpKX0pLFYodywicHViIixmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wdWJCeXRlcz90aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuX3B1YkJ5dGVzKTp0aGlzLmVkZHNhLmcubXVsKHRoaXMucHJpdigpKX0pLFYodywicHJpdkJ5dGVzIixmdW5jdGlvbigpe3ZhciBGPXRoaXMuZWRk''@;'; put 'put ''c2EsUj10aGlzLmhhc2goKSx6PUYuZW5jb2RpbmdMZW5ndGgtMSxOPVIuc2xpY2UoMCxGLmVuY29kaW5nTGVuZ3RoKTtyZXR1cm4gTlswXSY9MjQ4LE5bel0mPTEyNyxOW3pdfD02NCxOfSksVih3LCJwcml2IixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLnBy''@;'; put 'put ''aXZCeXRlcygpKX0pLFYodywiaGFzaCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5oYXNoKCkudXBkYXRlKHRoaXMuc2VjcmV0KCkpLmRpZ2VzdCgpfSksVih3LCJtZXNzYWdlUHJlZml4IixmdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc2goKS5zbGljZSh0aGlzLmVkZHNhLmVuY29k''@;'; put 'put ''aW5nTGVuZ3RoKX0pLHcucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oRil7cmV0dXJuIF8odGhpcy5fc2VjcmV0LCJLZXlQYWlyIGNhbiBvbmx5IHZlcmlmeSIpLHRoaXMuZWRkc2Euc2lnbihGLHRoaXMpfSx3LnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oRixSKXtyZXR1cm4gdGhpcy5lZGRz''@;'; put 'put ''YS52ZXJpZnkoRixSLHRoaXMpfSx3LnByb3RvdHlwZS5nZXRTZWNyZXQ9ZnVuY3Rpb24oRil7cmV0dXJuIF8odGhpcy5fc2VjcmV0LCJLZXlQYWlyIGlzIHB1YmxpYyBvbmx5IiksSS5lbmNvZGUodGhpcy5zZWNyZXQoKSxGKX0sdy5wcm90b3R5cGUuZ2V0UHVibGljPWZ1bmN0aW9uKEYpe3Jl''@;'; put 'put ''dHVybiBJLmVuY29kZSh0aGlzLnB1YkJ5dGVzKCksRil9LGNlLmV4cG9ydHM9d30sODcyNjc6KGNlLFgsYik9Pnt2YXIgST1iKDY1NjY3KSxfPWIoMzM0MikscD1iKDY3MjExKSxWPWIoMzA3MTUpLHc9YigzNzE5NiksUD1iKDE2NTA4KSxGPWIoMTA1NjgpLFI9YigxNDEwNSksej1iKDI3MDU0''@;'; put 'put ''KS5CdWZmZXI7Y2UuZXhwb3J0cz1mdW5jdGlvbihZLFcscSl7dmFyIGVlO2VlPVkucGFkZGluZz9ZLnBhZGRpbmc6cT8xOjQ7dmFyIHJlLEo9SShZKTtpZig0PT09ZWUpcmU9ZnVuY3Rpb24gTihaLFkpe3ZhciBXPVoubW9kdWx1cy5ieXRlTGVuZ3RoKCkscT1ZLmxlbmd0aCxlZT1wKCJzaGEx''@;'; put 'put ''IikudXBkYXRlKHouYWxsb2MoMCkpLmRpZ2VzdCgpLEo9ZWUubGVuZ3RoLHJlPTIqSjtpZihxPlctcmUtMil0aHJvdyBuZXcgRXJyb3IoIm1lc3NhZ2UgdG9vIGxvbmciKTt2YXIgaWU9ei5hbGxvYyhXLXEtcmUtMiksdWU9Vy1KLTEsZ2U9XyhKKSxfZT13KHouY29uY2F0KFtlZSxpZSx6LmFs''@;'; put 'put ''bG9jKDEsMSksWV0sdWUpLFYoZ2UsdWUpKSxUZT13KGdlLFYoX2UsSikpO3JldHVybiBuZXcgUCh6LmNvbmNhdChbei5hbGxvYygxKSxUZSxfZV0sVykpfShKLFcpO2Vsc2UgaWYoMT09PWVlKXJlPWZ1bmN0aW9uIE8oWixZLFcpe3ZhciBKLHE9WS5sZW5ndGgsZWU9Wi5tb2R1bHVzLmJ5dGVM''@;'; put 'put ''ZW5ndGgoKTtpZihxPmVlLTExKXRocm93IG5ldyBFcnJvcigibWVzc2FnZSB0b28gbG9uZyIpO3JldHVybiBKPVc/ei5hbGxvYyhlZS1xLTMsMjU1KTpmdW5jdGlvbiBLKFope2Zvcih2YXIgSixZPXouYWxsb2NVbnNhZmUoWiksVz0wLHE9XygyKlopLGVlPTA7VzxaOyllZT09PXEubGVuZ3Ro''@;'; put 'put ''JiYocT1fKDIqWiksZWU9MCksKEo9cVtlZSsrXSkmJihZW1crK109Sik7cmV0dXJuIFl9KGVlLXEtMyksbmV3IFAoei5jb25jYXQoW3ouZnJvbShbMCxXPzE6Ml0pLEosei5hbGxvYygxKSxZXSxlZSkpfShKLFcscSk7ZWxzZXtpZigzIT09ZWUpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHBh''@;'; put 'put ''ZGRpbmciKTtpZigocmU9bmV3IFAoVykpLmNtcChKLm1vZHVsdXMpPj0wKXRocm93IG5ldyBFcnJvcigiZGF0YSB0b28gbG9uZyBmb3IgbW9kdWx1cyIpfXJldHVybiBxP1IocmUsSik6RihyZSxKKX19LDg3MzAzOihjZSxYLGIpPT57dmFyIEk9Yig5MDUxOCksXz1iKDg5NjA2KTtjZS5leHBv''@;'; put 'put ''cnRzPWZ1bmN0aW9uKEYpe3JldHVybiBuZXcgVihGKX07dmFyIHA9e3NlY3AyNTZrMTp7bmFtZToic2VjcDI1NmsxIixieXRlTGVuZ3RoOjMyfSxzZWNwMjI0cjE6e25hbWU6InAyMjQiLGJ5dGVMZW5ndGg6Mjh9LHByaW1lMjU2djE6e25hbWU6InAyNTYiLGJ5dGVMZW5ndGg6MzJ9LHByaW1l''@;'; put 'put ''MTkydjE6e25hbWU6InAxOTIiLGJ5dGVMZW5ndGg6MjR9LGVkMjU1MTk6e25hbWU6ImVkMjU1MTkiLGJ5dGVMZW5ndGg6MzJ9LHNlY3AzODRyMTp7bmFtZToicDM4NCIsYnl0ZUxlbmd0aDo0OH0sc2VjcDUyMXIxOntuYW1lOiJwNTIxIixieXRlTGVuZ3RoOjY2fX07ZnVuY3Rpb24gVihQKXt0''@;'; put 'put ''aGlzLmN1cnZlVHlwZT1wW1BdLHRoaXMuY3VydmVUeXBlfHwodGhpcy5jdXJ2ZVR5cGU9e25hbWU6UH0pLHRoaXMuY3VydmU9bmV3IEkuZWModGhpcy5jdXJ2ZVR5cGUubmFtZSksdGhpcy5rZXlzPXZvaWQgMH1mdW5jdGlvbiB3KFAsRixSKXtBcnJheS5pc0FycmF5KFApfHwoUD1QLnRvQXJy''@;'; put 'put ''YXkoKSk7dmFyIHo9bmV3IEJ1ZmZlcihQKTtpZihSJiZ6Lmxlbmd0aDxSKXt2YXIgTj1uZXcgQnVmZmVyKFItei5sZW5ndGgpO04uZmlsbCgwKSx6PUJ1ZmZlci5jb25jYXQoW04sel0pfXJldHVybiBGP3oudG9TdHJpbmcoRik6en1wLnAyMjQ9cC5zZWNwMjI0cjEscC5wMjU2PXAuc2VjcDI1''@;'; put 'put ''NnIxPXAucHJpbWUyNTZ2MSxwLnAxOTI9cC5zZWNwMTkycjE9cC5wcmltZTE5MnYxLHAucDM4ND1wLnNlY3AzODRyMSxwLnA1MjE9cC5zZWNwNTIxcjEsVi5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzPWZ1bmN0aW9uKFAsRil7cmV0dXJuIHRoaXMua2V5cz10aGlzLmN1cnZlLmdlbktleVBhaXIo''@;'; put 'put ''KSx0aGlzLmdldFB1YmxpY0tleShQLEYpfSxWLnByb3RvdHlwZS5jb21wdXRlU2VjcmV0PWZ1bmN0aW9uKFAsRixSKXtyZXR1cm4gRj1GfHwidXRmOCIsQnVmZmVyLmlzQnVmZmVyKFApfHwoUD1uZXcgQnVmZmVyKFAsRikpLHcodGhpcy5jdXJ2ZS5rZXlGcm9tUHVibGljKFApLmdldFB1Ymxp''@;'; put 'put ''YygpLm11bCh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpKS5nZXRYKCksUix0aGlzLmN1cnZlVHlwZS5ieXRlTGVuZ3RoKX0sVi5wcm90b3R5cGUuZ2V0UHVibGljS2V5PWZ1bmN0aW9uKFAsRil7dmFyIFI9dGhpcy5rZXlzLmdldFB1YmxpYygiY29tcHJlc3NlZCI9PT1GLCEwKTtyZXR1cm4iaHli''@;'; put 'put ''cmlkIj09PUYmJihSWzBdPVJbUi5sZW5ndGgtMV0lMj83OjYpLHcoUixQKX0sVi5wcm90b3R5cGUuZ2V0UHJpdmF0ZUtleT1mdW5jdGlvbihQKXtyZXR1cm4gdyh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpLFApfSxWLnByb3RvdHlwZS5zZXRQdWJsaWNLZXk9ZnVuY3Rpb24oUCxGKXtyZXR1cm4g''@;'; put 'put ''Rj1GfHwidXRmOCIsQnVmZmVyLmlzQnVmZmVyKFApfHwoUD1uZXcgQnVmZmVyKFAsRikpLHRoaXMua2V5cy5faW1wb3J0UHVibGljKFApLHRoaXN9LFYucHJvdG90eXBlLnNldFByaXZhdGVLZXk9ZnVuY3Rpb24oUCxGKXtGPUZ8fCJ1dGY4IixCdWZmZXIuaXNCdWZmZXIoUCl8fChQPW5ldyBC''@;'; put 'put ''dWZmZXIoUCxGKSk7dmFyIFI9bmV3IF8oUCk7cmV0dXJuIFI9Ui50b1N0cmluZygxNiksdGhpcy5rZXlzPXRoaXMuY3VydmUuZ2VuS2V5UGFpcigpLHRoaXMua2V5cy5faW1wb3J0UHJpdmF0ZShSKSx0aGlzfX0sODczNjA6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO0kuZGVmaW5lTG9jYWxlKCJkYSIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFydHNfYXByaWxfbWFqX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZWJfbWFyX2Fwcl9tYWpfanVu''@;'; put 'put ''X2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzXHhmOG5kYWdfbWFuZGFnX3RpcnNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2xceGY4cmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzXHhmOG5fbWFuX3Rpcl9vbnNfdG9yX2ZyZV9sXHhmOHIi''@;'; put 'put ''LnNwbGl0KCJfIiksd2Vla2RheXNNaW46InNceGY4X21hX3RpX29uX3RvX2ZyX2xceGY4Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEhIOm1tIixM''@;'; put 'put ''TExMOiJkZGRkIFtkLl0gRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltpIGRhZyBrbC5dIExUIixuZXh0RGF5OiJbaSBtb3JnZW4ga2wuXSBMVCIsbmV4dFdlZWs6InBceGU1IGRkZGQgW2tsLl0gTFQiLGxhc3REYXk6IltpIGdceGU1ciBrbC5dIExUIixs''@;'; put 'put ''YXN0V2VlazoiW2ldIGRkZGRbcyBrbC5dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvbSAlcyIscGFzdDoiJXMgc2lkZW4iLHM6ImZceGU1IHNla3VuZGVyIixzczoiJWQgc2VrdW5kZXIiLG06ImV0IG1pbnV0IixtbToiJWQgbWludXR0ZXIiLGg6ImVuIHRpbWUi''@;'; put 'put ''LGhoOiIlZCB0aW1lciIsZDoiZW4gZGFnIixkZDoiJWQgZGFnZSIsTToiZW4gbVx4ZTVuZWQiLE1NOiIlZCBtXHhlNW5lZGVyIix5OiJldCBceGU1ciIseXk6IiVkIFx4ZTVyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRv''@;'; put 'put ''eTo0fX0pfShiKDk3NTg2KSl9LDg3MzcyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMTIyMDIpO2NlLmV4cG9ydHM9SSgiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiKX0sODc0ODQ6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0ODM1Nik7Y2UuZXhwb3J0cz1m''@;'; put 'put ''dW5jdGlvbihfLHApe3JldHVybiBJW19dfHwoSVtfXT1wfHx7fSl9fSw4Nzc2ODpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcCh3LFAsRil7dmFyIFI9dysiICI7c3dpdGNoKEYpe2Nhc2Uic3MiOnJldHVybiBSKygxPT09dz8ic2VrdW5kYSI6''@;'; put 'put ''Mj09PXd8fDM9PT13fHw0PT09dz8ic2VrdW5kZSI6InNla3VuZGkiKTtjYXNlIm1tIjpyZXR1cm4gUisoMT09PXc/Im1pbnV0YSI6Mj09PXd8fDM9PT13fHw0PT09dz8ibWludXRlIjoibWludXRhIik7Y2FzZSJoIjpyZXR1cm4iamVkYW4gc2F0IjtjYXNlImhoIjpyZXR1cm4gUisoMT09PXc/''@;'; put 'put ''InNhdCI6Mj09PXd8fDM9PT13fHw0PT09dz8ic2F0YSI6InNhdGkiKTtjYXNlImRkIjpyZXR1cm4gUisoMT09PXc/ImRhbiI6ImRhbmEiKTtjYXNlIk1NIjpyZXR1cm4gUisoMT09PXc/Im1qZXNlYyI6Mj09PXd8fDM9PT13fHw0PT09dz8ibWplc2VjYSI6Im1qZXNlY2kiKTtjYXNlInl5Ijpy''@;'; put 'put ''ZXR1cm4gUisoMT09PXc/ImdvZGluYSI6Mj09PXd8fDM9PT13fHw0PT09dz8iZ29kaW5lIjoiZ29kaW5hIil9fUkuZGVmaW5lTG9jYWxlKCJicyIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFydF9hcHJpbF9tYWpfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iYXJfb2t0b2Jhcl9ub3ZlbWJh''@;'; put 'put ''cl9kZWNlbWJhciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21hci5fYXByLl9tYWouX2p1bi5fanVsLl9hdWcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoibmVkamVsamFfcG9uZWRqZWxqYWtfdXRvcmFr''@;'; put 'put ''X3NyaWplZGFfXHUwMTBkZXR2cnRha19wZXRha19zdWJvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibmVkLl9wb24uX3V0by5fc3JpLl9cdTAxMGRldC5fcGV0Ll9zdWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb191dF9zcl9cdTAxMGRlX3BlX3N1Ii5zcGxpdCgiXyIp''@;'; put 'put ''LHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2Ft''@;'; put 'put ''ZURheToiW2RhbmFzIHVdIExUIixuZXh0RGF5OiJbc3V0cmEgdV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3VdIFtuZWRqZWxqdV0gW3VdIExUIjtjYXNlIDM6cmV0dXJuIlt1XSBbc3JpamVkdV0gW3VdIExUIjtjYXNlIDY6cmV0''@;'; put 'put ''dXJuIlt1XSBbc3Vib3R1XSBbdV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3VdIGRkZGQgW3VdIExUIn19LGxhc3REYXk6IltqdVx1MDEwZGVyIHVdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6Y2FzZSAzOnJldHVy''@;'; put 'put ''biJbcHJvXHUwMTYxbHVdIGRkZGQgW3VdIExUIjtjYXNlIDY6cmV0dXJuIltwcm9cdTAxNjFsZV0gW3N1Ym90ZV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIltwcm9cdTAxNjFsaV0gZGRkZCBbdV0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6''@;'; put 'put ''e2Z1dHVyZToiemEgJXMiLHBhc3Q6InByaWplICVzIixzOiJwYXIgc2VrdW5kaSIsc3M6cCxtOmZ1bmN0aW9uIF8odyxQLEYsUil7aWYoIm0iPT09RilyZXR1cm4gUD8iamVkbmEgbWludXRhIjpSPyJqZWRudSBtaW51dHUiOiJqZWRuZSBtaW51dGUifSxtbTpwLGg6cCxoaDpwLGQ6ImRhbiIs''@;'; put 'put ''ZGQ6cCxNOiJtamVzZWMiLE1NOnAseToiZ29kaW51Iix5eTpwfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGIoOTc1ODYpKX0sODc4MjM6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO0kuZGVmaW5lTG9jYWxlKCJhci1tYSIse21vbnRoczoiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0''@;'; put 'put ''NVx1MDYyN1x1MDY0YV9cdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjMyX1x1MDYzYVx1MDYzNFx1MDYyYV9cdTA2MzRcdTA2MmFcdTA2NDZcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUw''@;'; put 'put ''NjMxX1x1MDY0Nlx1MDY0OFx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2MmNcdTA2NDZcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQ1''@;'; put 'put ''XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUwNjRhXHUwNjQ4XHUwNjQ2XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OFx1MDYzMl9cdTA2M2FcdTA2MzRcdTA2MmFfXHUwNjM0XHUw''@;'; put 'put ''NjJhXHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDZcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjJjXHUwNjQ2XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2''@;'; put 'put ''MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUw''@;'; put 'put ''NjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjI3XHUwNjJkXHUwNjJmX1x1MDYyN1x1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0''@;'; put 'put ''Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlz''@;'; put 'put ''TWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExM''@;'; put 'put ''OiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixu''@;'; put 'put ''ZXh0RGF5OiJbXHUwNjNhXHUwNjJmXHUwNjI3IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQi''@;'; put 'put ''LGxhc3REYXk6IltcdTA2MjNcdTA2NDVcdTA2MzMgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBM''@;'; put 'put ''VCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjQxXHUwNjRhICVzIixwYXN0OiJcdTA2NDVcdTA2NDZcdTA2MzAgJXMiLHM6Ilx1MDYyYlx1MDY0OFx1MDYyN1x1MDY0NiIsc3M6IiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsbToiXHUwNjJmXHUw''@;'; put 'put ''NjQyXHUwNjRhXHUwNjQyXHUwNjI5IixtbToiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIixoOiJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLGhoOiIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLGQ6Ilx1MDY0YVx1MDY0OFx1MDY0NSIsZGQ6IiVkIFx1MDYy''@;'; put 'put ''M1x1MDY0YVx1MDYyN1x1MDY0NSIsTToiXHUwNjM0XHUwNjQ3XHUwNjMxIixNTToiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIix5OiJcdTA2MzNcdTA2NDZcdTA2MjkiLHl5OiIlZCBcdTA2MzNcdTA2NDZcdTA2NDhcdTA2MjdcdTA2MmEifSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5''@;'; put 'put ''NzU4NikpfSw4ODA3ODooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDEyMjAyKSxfPWIoNTg2MDcpLHA9YigzNjE0MyksVj1iKDI4MDcwKSx3PWIoMTEwOCksUD1fKFtdLmNvbmNhdCk7Y2UuZXhwb3J0cz1JKCJSZWZsZWN0Iiwib3duS2V5cyIpfHxmdW5jdGlvbihSKXt2YXIgej1w''@;'; put 'put ''LmYodyhSKSksTj1WLmY7cmV0dXJuIE4/UCh6LE4oUikpOnp9fSw4ODE1MDpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gXyhWLHcsUCxGKXt2YXIgUj17czpbIm1ceGY1bmUgc2VrdW5kaSIsIm1ceGY1bmkgc2VrdW5kIiwicGFhciBzZWt1bmRp''@;'; put 'put ''dCJdLHNzOltWKyJzZWt1bmRpIixWKyJzZWt1bmRpdCJdLG06WyJceGZjaGUgbWludXRpIiwiXHhmY2tzIG1pbnV0Il0sbW06W1YrIiBtaW51dGkiLFYrIiBtaW51dGl0Il0saDpbIlx4ZmNoZSB0dW5uaSIsInR1bmQgYWVnYSIsIlx4ZmNrcyB0dW5kIl0saGg6W1YrIiB0dW5uaSIsVisiIHR1''@;'; put 'put ''bmRpIl0sZDpbIlx4ZmNoZSBwXHhlNGV2YSIsIlx4ZmNrcyBwXHhlNGV2Il0sTTpbImt1dSBhamEiLCJrdXUgYWVnYSIsIlx4ZmNrcyBrdXUiXSxNTTpbVisiIGt1dSIsVisiIGt1dWQiXSx5OlsiXHhmY2hlIGFhc3RhIiwiYWFzdGEiLCJceGZja3MgYWFzdGEiXSx5eTpbVisiIGFhc3RhIixW''@;'; put 'put ''KyIgYWFzdGF0Il19O3JldHVybiB3P1JbUF1bMl0/UltQXVsyXTpSW1BdWzFdOkY/UltQXVswXTpSW1BdWzFdfUkuZGVmaW5lTG9jYWxlKCJldCIse21vbnRoczoiamFhbnVhcl92ZWVicnVhcl9tXHhlNHJ0c19hcHJpbGxfbWFpX2p1dW5pX2p1dWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b29i''@;'; put 'put ''ZXJfbm92ZW1iZXJfZGV0c2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYWFuX3ZlZWJyX21ceGU0cnRzX2Fwcl9tYWlfanV1bmlfanV1bGlfYXVnX3NlcHRfb2t0X25vdl9kZXRzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJwXHhmY2hhcFx4ZTRldl9lc21hc3BceGU0ZXZfdGVpc2lw''@;'; put 'put ''XHhlNGV2X2tvbG1hcFx4ZTRldl9uZWxqYXBceGU0ZXZfcmVlZGVfbGF1cFx4ZTRldiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJQX0VfVF9LX05fUl9MIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJQX0VfVF9LX05fUl9MIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDpt''@;'; put 'put ''bSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVFx4ZTRuYSxdIExUIixuZXh0RGF5OiJbSG9tbWUsXSBMVCIsbmV4''@;'; put 'put ''dFdlZWs6IltKXHhlNHJnbWluZV0gZGRkZCBMVCIsbGFzdERheToiW0VpbGUsXSBMVCIsbGFzdFdlZWs6IltFZWxtaW5lXSBkZGRkIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBwXHhlNHJhc3QiLHBhc3Q6IiVzIHRhZ2FzaSIsczpfLHNzOl8sbTpfLG1tOl8s''@;'; put 'put ''aDpfLGhoOl8sZDpfLGRkOiIlZCBwXHhlNGV2YSIsTTpfLE1NOl8seTpfLHl5Ol99LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw4ODE1MjpjZT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBi''@;'; put 'put ''KHcsUCl7cCh3LFApLEkodyl9ZnVuY3Rpb24gSSh3KXt3Ll93cml0YWJsZVN0YXRlJiYhdy5fd3JpdGFibGVTdGF0ZS5lbWl0Q2xvc2V8fHcuX3JlYWRhYmxlU3RhdGUmJiF3Ll9yZWFkYWJsZVN0YXRlLmVtaXRDbG9zZXx8dy5lbWl0KCJjbG9zZSIpfWZ1bmN0aW9uIHAodyxQKXt3LmVtaXQo''@;'; put 'put ''ImVycm9yIixQKX1jZS5leHBvcnRzPXtkZXN0cm95OmZ1bmN0aW9uIFgodyxQKXt2YXIgRj10aGlzO3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZHx8dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95''@;'; put 'put ''ZWQ/KFA/UCh3KTp3JiYodGhpcy5fd3JpdGFibGVTdGF0ZT90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZHx8KHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLHByb2Nlc3MubmV4dFRpY2socCx0aGlzLHcpKTpwcm9jZXNzLm5leHRUaWNrKHAsdGhpcyx3KSksdGhp''@;'; put 'put ''cyk6KHRoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl9kZXN0cm95KHd8fG51bGwsZnVuY3Rpb24oTil7IVAmJk4/Ri5fd3JpdGFi''@;'; put 'put ''bGVTdGF0ZT9GLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD9wcm9jZXNzLm5leHRUaWNrKEksRik6KEYuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLHByb2Nlc3MubmV4dFRpY2soYixGLE4pKTpwcm9jZXNzLm5leHRUaWNrKGIsRixOKTpQPyhwcm9jZXNzLm5leHRUaWNrKEks''@;'; put 'put ''RiksUChOKSk6cHJvY2Vzcy5uZXh0VGljayhJLEYpfSksdGhpcyl9LHVuZGVzdHJveTpmdW5jdGlvbiBfKCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZz0hMSx0aGlzLl9yZWFkYWJsZVN0''@;'; put 'put ''YXRlLmVuZGVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZD0hMSksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITEsdGhp''@;'; put 'put ''cy5fd3JpdGFibGVTdGF0ZS5maW5hbENhbGxlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITEpfSxlcnJvck9yRGVzdHJveTpmdW5jdGlvbiBWKHcs''@;'; put 'put ''UCl7dmFyIEY9dy5fcmVhZGFibGVTdGF0ZSxSPXcuX3dyaXRhYmxlU3RhdGU7RiYmRi5hdXRvRGVzdHJveXx8UiYmUi5hdXRvRGVzdHJveT93LmRlc3Ryb3koUCk6dy5lbWl0KCJlcnJvciIsUCl9fX0sODgyNDQ6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig1NTU5Mik7Y2UuZXhw''@;'; put 'put ''b3J0cz0hSShmdW5jdGlvbigpe3ZhciBfPSI5MDA3MTk5MjU0NzQwOTkzIixwPUpTT04ucmF3SlNPTihfKTtyZXR1cm4hSlNPTi5pc1Jhd0pTT04ocCl8fEpTT04uc3RyaW5naWZ5KHApIT09X30pfSw4ODI3NTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDk0NDY4KSxfPVR5cGVF''@;'; put 'put ''cnJvcjtjZS5leHBvcnRzPWZ1bmN0aW9uKHApe2lmKEkocCkpdGhyb3cgbmV3IF8oIkNhbid0IGNhbGwgbWV0aG9kIG9uICIrcCk7cmV0dXJuIHB9fSw4ODUyMTpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcChWLHcsUCxGKXt2YXIgUj17czpb''@;'; put 'put ''InZpZW5zYXMgc2VjdW5kcyIsIidpZW5zYXMgc2VjdW5kcyJdLHNzOltWKyIgc2VjdW5kcyIsVisiIHNlY3VuZHMiXSxtOlsiJ24gbVx4ZWR1dCIsIidpZW5zIG1ceGVkdXQiXSxtbTpbVisiIG1ceGVkdXRzIixWKyIgbVx4ZWR1dHMiXSxoOlsiJ24gXHhmZW9yYSIsIidpZW5zYSBceGZlb3Jh''@;'; put 'put ''Il0saGg6W1YrIiBceGZlb3JhcyIsVisiIFx4ZmVvcmFzIl0sZDpbIiduIHppdWEiLCInaWVuc2Egeml1YSJdLGRkOltWKyIgeml1YXMiLFYrIiB6aXVhcyJdLE06WyInbiBtZXMiLCInaWVucyBtZXMiXSxNTTpbVisiIG1lc2VuIixWKyIgbWVzZW4iXSx5OlsiJ24gYXIiLCInaWVucyBhciJd''@;'; put 'put ''LHl5OltWKyIgYXJzIixWKyIgYXJzIl19O3JldHVybiBGfHx3P1JbUF1bMF06UltQXVsxXX1JLmRlZmluZUxvY2FsZSgidHpsIix7bW9udGhzOiJKYW51YXJfRmV2cmFnbGhfTWFyXHhlN19BdnJceGVmdV9NYWlfR1x4ZmNuX0p1bGlhX0d1c2NodF9TZXRlbXZhcl9MaXN0b3BceGU0dHNfTm9l''@;'; put 'put ''bXZhcl9aZWNlbXZhciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0Zldl9NYXJfQXZyX01haV9HXHhmY25fSnVsX0d1c19TZXRfTGlzX05vZV9aZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlNceGZhbGFkaV9MXHhmYW5lXHhlN2lfTWFpdHppX01ceGUxcmN1cmlfWGhceGZhYWRpX1Zp''@;'; put 'put ''XHhlOW5lclx4ZTdpX1NceGUxdHVyaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTXHhmYWxfTFx4ZmFuX01haV9NXHhlMXJfWGhceGZhX1ZpXHhlOV9TXHhlMXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNceGZhX0xceGZhX01hX01ceGUxX1hoX1ZpX1NceGUxIi5zcGxpdCgiXyIp''@;'; put 'put ''LGxvbmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFtkYWxsYXNdIFlZWVkiLExMTDoiRC4gTU1NTSBbZGFsbGFzXSBZWVlZIEhILm1tIixMTExMOiJkZGRkLCBbbGldIEQuIE1NTU0gW2RhbGxhc10gWVlZWSBISC5tbSJ9''@;'; put 'put ''LG1lcmlkaWVtUGFyc2U6L2RcJ298ZFwnYS9pLGlzUE06ZnVuY3Rpb24oVil7cmV0dXJuImQnbyI9PT1WLnRvTG93ZXJDYXNlKCl9LG1lcmlkaWVtOmZ1bmN0aW9uKFYsdyxQKXtyZXR1cm4gVj4xMT9QPyJkJ28iOiJEJ08iOlA/ImQnYSI6IkQnQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbb3ho''@;'; put 'put ''aSBceGUwXSBMVCIsbmV4dERheToiW2RlbVx4ZTAgXHhlMF0gTFQiLG5leHRXZWVrOiJkZGRkIFtceGUwXSBMVCIsbGFzdERheToiW2llaXJpIFx4ZTBdIExUIixsYXN0V2VlazoiW3NceGZjciBlbF0gZGRkZCBbbGFzdGV1IFx4ZTBdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7''@;'; put 'put ''ZnV0dXJlOiJvc3ByZWkgJXMiLHBhc3Q6ImphJXMiLHM6cCxzczpwLG06cCxtbTpwLGg6cCxoaDpwLGQ6cCxkZDpwLE06cCxNTTpwLHk6cCx5eTpwfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYp''@;'; put 'put ''KX0sODg3MjM6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSxfKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcChCLGcpe2lmKCFCKXRocm93IG5ldyBFcnJvcihnfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIFYoQixnKXtCLnN1cGVyXz1nO3ZhciB5PWZ1bmN0aW9uKCl7fTt5LnBy''@;'; put 'put ''b3RvdHlwZT1nLnByb3RvdHlwZSxCLnByb3RvdHlwZT1uZXcgeSxCLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1CfWZ1bmN0aW9uIHcoQixnLHkpe2lmKHcuaXNCTihCKSlyZXR1cm4gQjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxu''@;'; put 'put ''dWxsIT09QiYmKCgibGUiPT09Z3x8ImJlIj09PWcpJiYoeT1nLGc9MTApLHRoaXMuX2luaXQoQnx8MCxnfHwxMCx5fHwiYmUiKSl9dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0kuZXhwb3J0cz13Ol8uQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7UD10eXBlb2Ygd2luZG93PCJ1IiYm''@;'; put 'put ''dHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Yig3OTM2OCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKEIsZyl7dmFyIHk9Qi5jaGFyQ29kZUF0KGcpO3JldHVybiB5Pj02NSYmeTw9NzA/eS01NTp5Pj05NyYmeTw9MTAyP3ktODc6eS00OCYxNX1mdW5jdGlvbiBSKEIs''@;'; put 'put ''Zyx5KXt2YXIgeD1GKEIseSk7cmV0dXJuIHktMT49ZyYmKHh8PUYoQix5LTEpPDw0KSx4fWZ1bmN0aW9uIHooQixnLHkseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbihCLmxlbmd0aCx5KSxIPWc7SDxUO0grKyl7dmFyIGo9Qi5jaGFyQ29kZUF0KEgpLTQ4O0MqPXgsQys9aj49NDk/ai00OSsx''@;'; put 'put ''MDpqPj0xNz9qLTE3KzEwOmp9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKGcpe3JldHVybiBnIGluc3RhbmNlb2Ygd3x8bnVsbCE9PWcmJiJvYmplY3QiPT10eXBlb2YgZyYmZy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkoZy53b3Jkcyl9LHcubWF4''@;'; put 'put ''PWZ1bmN0aW9uKGcseSl7cmV0dXJuIGcuY21wKHkpPjA/Zzp5fSx3Lm1pbj1mdW5jdGlvbihnLHkpe3JldHVybiBnLmNtcCh5KTwwP2c6eX0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oZyx5LHgpe2lmKCJudW1iZXIiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihnLHks''@;'; put 'put ''eCk7aWYoIm9iamVjdCI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0QXJyYXkoZyx5LHgpOyJoZXgiPT09eSYmKHk9MTYpLHAoeT09PSgwfHkpJiZ5Pj0yJiZ5PD0zNik7dmFyIEM9MDsiLSI9PT0oZz1nLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5l''@;'; put 'put ''Z2F0aXZlPTEpLEM8Zy5sZW5ndGgmJigxNj09PXk/dGhpcy5fcGFyc2VIZXgoZyxDLHgpOih0aGlzLl9wYXJzZUJhc2UoZyx5LEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCkseSx4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihnLHkseCl7''@;'; put 'put ''ZzwwJiYodGhpcy5uZWdhdGl2ZT0xLGc9LWcpLGc8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmddLHRoaXMubGVuZ3RoPTEpOmc8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToocChnPDkw''@;'; put 'put ''MDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLHkseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oZyx5LHgpe2lm''@;'; put 'put ''KHAoIm51bWJlciI9PXR5cGVvZiBnLmxlbmd0aCksZy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoZy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8''@;'; put 'put ''dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxILGo9MDtpZigiYmUiPT09eClmb3IoQz1nLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KEg9Z1tDXXxnW0MtMV08PDh8Z1tDLTJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4y''@;'; put 'put ''Ni1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8Zy5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oSD1nW0NdfGdbQysxXTw8OHxnW0MrMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWom''@;'; put 'put ''NjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihnLHkseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChnLmxlbmd0aC15KS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7''@;'; put 'put ''Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9Zy5sZW5ndGgtMTtDPj15O0MtPTIpaj1SKGcseSxDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0gr''@;'; put 'put ''PTFdfD1qPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0oZy5sZW5ndGgteSklMj09MD95KzE6eTtDPGcubGVuZ3RoO0MrPTIpaj1SKGcseSxDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGcseSx4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj15KUMrKztDLS0sVD1UL3l8MDtmb3IodmFyIEg9Zy5sZW5ndGgteCxqPUglQyxFPU1hdGgubWluKEgsSC1qKSt4''@;'; put 'put ''LG09MCxBPXg7QTxFO0ErPUMpbT16KGcsQSxBK0MseSksdGhpcy5pbXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09ail7dmFyIGFlPTE7Zm9yKG09eihnLEEsZy5sZW5ndGgseSksQT0wO0E8ajtBKyspYWUqPXk7''@;'; put 'put ''dGhpcy5pbXVsbihhZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGcpe2cud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHk9MDt5PHRoaXMu''@;'; put 'put ''bGVuZ3RoO3krKylnLndvcmRzW3ldPXRoaXMud29yZHNbeV07Zy5sZW5ndGg9dGhpcy5sZW5ndGgsZy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGcucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBnPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkoZyks''@;'; put 'put ''Z30sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGc7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMu''@;'; put 'put ''bGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5z''@;'; put 'put ''cGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAw''@;'; put 'put ''MDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAi''@;'; put 'put ''LCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxPPVswLDAsMjUs''@;'; put 'put ''MTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEs''@;'; put 'put ''MzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1''@;'; put 'put ''MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gWShCLGcseSl7eS5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkIubmVnYXRpdmU7dmFyIHg9Qi5sZW5ndGgrZy5sZW5ndGh8MDt5Lmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHxCLndvcmRzWzBdLFQ9''@;'; put 'put ''MHxnLndvcmRzWzBdLEg9QypULEU9SC82NzEwODg2NHwwO3kud29yZHNbMF09NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LGFlPTY3MTA4ODYzJkUsbmU9TWF0aC5taW4obSxnLmxlbmd0aC0xKSxzZT1NYXRoLm1heCgwLG0tQi5sZW5ndGgrMSk7c2U8''@;'; put 'put ''PW5lO3NlKyspQSs9KEg9KEM9MHxCLndvcmRzW20tc2V8MF0pKihUPTB8Zy53b3Jkc1tzZV0pK2FlKS82NzEwODg2NHwwLGFlPTY3MTA4ODYzJkg7eS53b3Jkc1ttXT0wfGFlLEU9MHxBfXJldHVybiAwIT09RT95LndvcmRzW21dPTB8RTp5Lmxlbmd0aC0tLHkuc3RyaXAoKX13LnByb3RvdHlw''@;'; put 'put ''ZS50b1N0cmluZz1mdW5jdGlvbihnLHkpe3ZhciB4O2lmKHk9MHx5fHwxLDE2PT09KGc9Z3x8MTApfHwiaGV4Ij09PWcpe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9dGhpcy53b3Jkc1tIXSxFPSgxNjc3NzIxNSYoajw8Q3xUKSkudG9TdHJpbmco''@;'; put 'put ''MTYpO1Q9aj4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LEgtLSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGgleSE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRo''@;'; put 'put ''aXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKGc9PT0oMHxnKSYmZz49MiYmZzw9MzYpe3ZhciBtPU9bZ10sQT1LW2ddO3g9IiI7dmFyIGFlPXRoaXMuY2xvbmUoKTtmb3IoYWUubmVnYXRpdmU9MDshYWUuaXNaZXJvKCk7KXt2YXIgbmU9YWUubW9kbihBKS50b1N0cmluZyhnKTt4PShhZT1h''@;'; put 'put ''ZS5pZGl2bihBKSkuaXNaZXJvKCk/bmUreDpOW20tbmUubGVuZ3RoXStuZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGgleSE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fXAoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4g''@;'; put 'put ''MiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgZz10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Zys9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2crPTQ1MDM1OTk2MjczNzA0''@;'; put 'put ''OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZwKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tZzpnfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmlu''@;'; put 'put ''ZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHAodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAsZyx5KX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGcseSl9LHcucHJv''@;'; put 'put ''dG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGcseSx4KXt2YXIgQz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7cChDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIikscChUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRo''@;'; put 'put ''aXMuc3RyaXAoKTt2YXIgRSxtLEg9ImxlIj09PXksaj1uZXcgZyhUKSxBPXRoaXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW21dPUU7Zm9yKDttPFQ7bSsrKWpbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKWpb''@;'; put 'put ''bV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oZyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoZyl9OmZ1bmN0aW9uKGcpe3ZhciB5''@;'; put 'put ''PWcseD0wO3JldHVybiB5Pj00MDk2JiYoeCs9MTMseT4+Pj0xMykseT49NjQmJih4Kz03LHk+Pj49NykseT49OCYmKHgrPTQseT4+Pj00KSx5Pj0yJiYoeCs9Mix5Pj4+PTIpLHgreX0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGcpe2lmKDA9PT1nKXJldHVybiAyNjt2YXIgeT1n''@;'; put 'put ''LHg9MDtyZXR1cm4hKDgxOTEmeSkmJih4Kz0xMyx5Pj4+PTEzKSwhKDEyNyZ5KSYmKHgrPTcseT4+Pj03KSwhKDE1JnkpJiYoeCs9NCx5Pj4+PTQpLCEoMyZ5KSYmKHgrPTIseT4+Pj0yKSwhKDEmeSkmJngrKyx4fSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgeT10aGlz''@;'; put 'put ''Ll9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKSt5fSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBnPTAseT0wO3k8dGhpcy5sZW5ndGg7eSsrKXt2YXIg''@;'; put 'put ''eD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW3ldKTtpZihnKz14LDI2IT09eClicmVha31yZXR1cm4gZ30sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGcp''@;'; put 'put ''e3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGcpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMudGVzdG4oZy0xKT90aGlzLm5vdG4oZykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUo''@;'; put 'put ''KX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0''@;'; put 'put ''aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8Zy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIHk9MDt5PGcubGVuZ3RoO3krKyl0aGlzLndvcmRzW3ldPXRoaXMud29yZHNbeV18Zy53''@;'; put 'put ''b3Jkc1t5XTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1b3IoZyl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90''@;'; put 'put ''aGlzLmNsb25lKCkuaW9yKGcpOmcuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoZyk6Zy5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9u''@;'; put 'put ''KGcpe3ZhciB5O3k9dGhpcy5sZW5ndGg+Zy5sZW5ndGg/Zzp0aGlzO2Zvcih2YXIgeD0wO3g8eS5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZnLndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0aD15Lmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9''@;'; put 'put ''ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1YW5kKGcpfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGcpOmcuY2xvbmUoKS5pYW5kKHRoaXMpfSx3''@;'; put 'put ''LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoZyk6Zy5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihnKXt2YXIgeSx4O3RoaXMubGVuZ3RoPmcubGVuZ3RoPyh5PXRo''@;'; put 'put ''aXMseD1nKTooeT1nLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT15LndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9PXkpZm9yKDtDPHkubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXkud29yZHNbQ107cmV0dXJuIHRoaXMubGVuZ3RoPXkubGVu''@;'; put 'put ''Z3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoZyl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9u''@;'; put 'put ''ZSgpLml4b3IoZyk6Zy5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihnKTpnLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGcp''@;'; put 'put ''e3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT0wfE1hdGguY2VpbChnLzI2KSx4PWclMjY7dGhpcy5fZXhwYW5kKHkpLHg+MCYmeS0tO2Zvcih2YXIgQz0wO0M8eTtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tDXTtyZXR1cm4geD4wJiYodGhpcy53b3Jk''@;'; put 'put ''c1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oZyl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZyx5KXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49''@;'; put 'put ''MCk7dmFyIHg9Zy8yNnwwLEM9ZyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT15P3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRzW3hdJn4oMTw8QyksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcpe3ZhciB5LHgsQztpZigwIT09''@;'; put 'put ''dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx5PXRoaXMuaXN1YihnKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiBnLm5lZ2F0aXZlPTAseT10aGlz''@;'; put 'put ''LmlzdWIoZyksZy5uZWdhdGl2ZT0xLHkuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KHg9dGhpcyxDPWcpOih4PWcsQz10aGlzKTtmb3IodmFyIFQ9MCxIPTA7SDxDLmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoeT0oMHx4LndvcmRzW0hdKSsoMHxDLndvcmRz''@;'; put 'put ''W0hdKStUKSxUPXk+Pj4yNjtmb3IoOzAhPT1UJiZIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJih5PSgwfHgud29yZHNbSF0pK1QpLFQ9eT4+PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1UKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPVQsdGhpcy5sZW5ndGgr''@;'; put 'put ''KztlbHNlIGlmKHghPT10aGlzKWZvcig7SDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT14LndvcmRzW0hdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyl7dmFyIHk7cmV0dXJuIDAhPT1nLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZy5uZWdhdGl2ZT0w''@;'; put 'put ''LHk9dGhpcy5zdWIoZyksZy5uZWdhdGl2ZV49MSx5KTowPT09Zy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCx5PWcuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSx5KTp0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChnKTpnLmNsb25l''@;'; put 'put ''KCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnKXtpZigwIT09Zy5uZWdhdGl2ZSl7Zy5uZWdhdGl2ZT0wO3ZhciB5PXRoaXMuaWFkZChnKTtyZXR1cm4gZy5uZWdhdGl2ZT0xLHkuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVn''@;'; put 'put ''YXRpdmU9MCx0aGlzLmlhZGQoZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIEMsVCx4PXRoaXMuY21wKGcpO2lmKDA9PT14KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt4PjA/KEM9dGhpcyxUPWcpOihDPWcs''@;'; put 'put ''VD10aGlzKTtmb3IodmFyIEg9MCxqPTA7ajxULmxlbmd0aDtqKyspSD0oeT0oMHxDLndvcmRzW2pdKS0oMHxULndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZ5O2Zvcig7MCE9PUgmJmo8Qy5sZW5ndGg7aisrKUg9KHk9KDB8Qy53b3Jkc1tqXSkrSCk+PjI2LHRoaXMu''@;'; put 'put ''d29yZHNbal09NjcxMDg4NjMmeTtpZigwPT09SCYmajxDLmxlbmd0aCYmQyE9PXRoaXMpZm9yKDtqPEMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPUMud29yZHNbal07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGopLEMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0x''@;'; put 'put ''KSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoZyl9O3ZhciBXPWZ1bmN0aW9uKGcseSx4KXt2YXIgRSxtLEEsQz1nLndvcmRzLFQ9eS53b3JkcyxIPXgud29yZHMsaj0wLGFlPTB8Q1swXSxuZT04MTkxJmFlLHNlPWFl''@;'; put 'put ''Pj4+MTMsQ2U9MHxDWzFdLFVlPTgxOTEmQ2UsSmU9Q2U+Pj4xMyxpdD0wfENbMl0seGU9ODE5MSZpdCx5ZT1pdD4+PjEzLEtlPTB8Q1szXSxqZT04MTkxJktlLGtlPUtlPj4+MTMsSGU9MHxDWzRdLExlPTgxOTEmSGUsUmU9SGU+Pj4xMyxWZT0wfENbNV0sQWU9ODE5MSZWZSxEZT1WZT4+PjEz''@;'; put 'put ''LF90PTB8Q1s2XSxydD04MTkxJl90LFFlPV90Pj4+MTMsc249MHxDWzddLHZ0PTgxOTEmc24sU3Q9c24+Pj4xMyxlbj0wfENbOF0sdXQ9ODE5MSZlbixYZT1lbj4+PjEzLHR0PTB8Q1s5XSxJZT04MTkxJnR0LGF0PXR0Pj4+MTMsdW49MHxUWzBdLEl0PTgxOTEmdW4sUnQ9dW4+Pj4xMyxyaT0w''@;'; put 'put ''fFRbMV0sYW49ODE5MSZyaSxsbj1yaT4+PjEzLG5pPTB8VFsyXSxobj04MTkxJm5pLGh0PW5pPj4+MTMsUnI9MHxUWzNdLEJ0PTgxOTEmUnIsQXQ9UnI+Pj4xMyxGbj0wfFRbNF0sc3Q9ODE5MSZGbixadD1Gbj4+PjEzLFFyPTB8VFs1XSxZZT04MTkxJlFyLFR0PVFyPj4+MTMscnI9MHxUWzZd''@;'; put 'put ''LGZ0PTgxOTEmcnIsTXQ9cnI+Pj4xMyxabj0wfFRbN10sbm49ODE5MSZabixXdD1abj4+PjEzLGRpPTB8VFs4XSxkbj04MTkxJmRpLG1uPWRpPj4+MTMscGk9MHxUWzldLGZuPTgxOTEmcGksdG49cGk+Pj4xMzt4Lm5lZ2F0aXZlPWcubmVnYXRpdmVeeS5uZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2''@;'; put 'put ''YXIgY2E9KGorKEU9TWF0aC5pbXVsKG5lLEl0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChuZSxSdCkpK01hdGguaW11bChzZSxJdCl8MCkpPDwxMyl8MDtqPSgoQT1NYXRoLmltdWwoc2UsUnQpKSsobT4+PjEzKXwwKSsoY2E+Pj4yNil8MCxjYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwo''@;'; put 'put ''VWUsSXQpLG09KG09TWF0aC5pbXVsKFVlLFJ0KSkrTWF0aC5pbXVsKEplLEl0KXwwLEE9TWF0aC5pbXVsKEplLFJ0KTt2YXIgX2k9KGorKEU9RStNYXRoLmltdWwobmUsYW4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxsbil8MCkrTWF0aC5pbXVsKHNlLGFuKXwwKSk8PDEz''@;'; put 'put ''KXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGxuKXwwKSsobT4+PjEzKXwwKSsoX2k+Pj4yNil8MCxfaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeGUsSXQpLG09KG09TWF0aC5pbXVsKHhlLFJ0KSkrTWF0aC5pbXVsKHllLEl0KXwwLEE9TWF0aC5pbXVsKHllLFJ0KSxFPUUrTWF0aC5pbXVsKFVl''@;'; put 'put ''LGFuKXwwLG09KG09bStNYXRoLmltdWwoVWUsbG4pfDApK01hdGguaW11bChKZSxhbil8MCxBPUErTWF0aC5pbXVsKEplLGxuKXwwO3ZhciB2cj0oaisoRT1FK01hdGguaW11bChuZSxobil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGh0KXwwKStNYXRoLmltdWwoc2UsaG4p''@;'; put 'put ''fDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsaHQpfDApKyhtPj4+MTMpfDApKyh2cj4+PjI2KXwwLHZyJj02NzEwODg2MyxFPU1hdGguaW11bChqZSxJdCksbT0obT1NYXRoLmltdWwoamUsUnQpKStNYXRoLmltdWwoa2UsSXQpfDAsQT1NYXRoLmltdWwoa2UsUnQpLEU9RStNYXRo''@;'; put 'put ''LmltdWwoeGUsYW4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxsbil8MCkrTWF0aC5pbXVsKHllLGFuKXwwLEE9QStNYXRoLmltdWwoeWUsbG4pfDAsRT1FK01hdGguaW11bChVZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGh0KXwwKStNYXRoLmltdWwoSmUsaG4pfDAsQT1BK01hdGguaW11''@;'; put 'put ''bChKZSxodCl8MDt2YXIgWGk9KGorKEU9RStNYXRoLmltdWwobmUsQnQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxBdCl8MCkrTWF0aC5pbXVsKHNlLEJ0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLEF0KXwwKSsobT4+PjEzKXwwKSsoWGk+Pj4yNil8MCxY''@;'; put 'put ''aSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTGUsSXQpLG09KG09TWF0aC5pbXVsKExlLFJ0KSkrTWF0aC5pbXVsKFJlLEl0KXwwLEE9TWF0aC5pbXVsKFJlLFJ0KSxFPUUrTWF0aC5pbXVsKGplLGFuKXwwLG09KG09bStNYXRoLmltdWwoamUsbG4pfDApK01hdGguaW11bChrZSxhbil8MCxBPUEr''@;'; put 'put ''TWF0aC5pbXVsKGtlLGxuKXwwLEU9RStNYXRoLmltdWwoeGUsaG4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxodCl8MCkrTWF0aC5pbXVsKHllLGhuKXwwLEE9QStNYXRoLmltdWwoeWUsaHQpfDAsRT1FK01hdGguaW11bChVZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoSmUsQnQpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MDt2YXIgUWk9KGorKEU9RStNYXRoLmltdWwobmUsc3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxadCl8MCkrTWF0aC5pbXVsKHNlLHN0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFp0KXww''@;'; put 'put ''KSsobT4+PjEzKXwwKSsoUWk+Pj4yNil8MCxRaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoQWUsSXQpLG09KG09TWF0aC5pbXVsKEFlLFJ0KSkrTWF0aC5pbXVsKERlLEl0KXwwLEE9TWF0aC5pbXVsKERlLFJ0KSxFPUUrTWF0aC5pbXVsKExlLGFuKXwwLG09KG09bStNYXRoLmltdWwoTGUsbG4p''@;'; put 'put ''fDApK01hdGguaW11bChSZSxhbil8MCxBPUErTWF0aC5pbXVsKFJlLGxuKXwwLEU9RStNYXRoLmltdWwoamUsaG4pfDAsbT0obT1tK01hdGguaW11bChqZSxodCl8MCkrTWF0aC5pbXVsKGtlLGhuKXwwLEE9QStNYXRoLmltdWwoa2UsaHQpfDAsRT1FK01hdGguaW11bCh4ZSxCdCl8MCxtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKHhlLEF0KXwwKStNYXRoLmltdWwoeWUsQnQpfDAsQT1BK01hdGguaW11bCh5ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHN0KXwwLG09KG09bStNYXRoLmltdWwoVWUsWnQpfDApK01hdGguaW11bChKZSxzdCl8MCxBPUErTWF0aC5pbXVsKEplLFp0KXwwO3ZhciBWaT0o''@;'; put 'put ''aisoRT1FK01hdGguaW11bChuZSxZZSl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLFR0KXwwKStNYXRoLmltdWwoc2UsWWUpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVHQpfDApKyhtPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2MyxFPU1hdGgu''@;'; put 'put ''aW11bChydCxJdCksbT0obT1NYXRoLmltdWwocnQsUnQpKStNYXRoLmltdWwoUWUsSXQpfDAsQT1NYXRoLmltdWwoUWUsUnQpLEU9RStNYXRoLmltdWwoQWUsYW4pfDAsbT0obT1tK01hdGguaW11bChBZSxsbil8MCkrTWF0aC5pbXVsKERlLGFuKXwwLEE9QStNYXRoLmltdWwoRGUsbG4pfDAs''@;'; put 'put ''RT1FK01hdGguaW11bChMZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKExlLGh0KXwwKStNYXRoLmltdWwoUmUsaG4pfDAsQT1BK01hdGguaW11bChSZSxodCl8MCxFPUUrTWF0aC5pbXVsKGplLEJ0KXwwLG09KG09bStNYXRoLmltdWwoamUsQXQpfDApK01hdGguaW11bChrZSxCdCl8MCxBPUEr''@;'; put 'put ''TWF0aC5pbXVsKGtlLEF0KXwwLEU9RStNYXRoLmltdWwoeGUsc3QpfDAsbT0obT1tK01hdGguaW11bCh4ZSxadCl8MCkrTWF0aC5pbXVsKHllLHN0KXwwLEE9QStNYXRoLmltdWwoeWUsWnQpfDAsRT1FK01hdGguaW11bChVZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoSmUsWWUpfDAsQT1BK01hdGguaW11bChKZSxUdCl8MDt2YXIgZWk9KGorKEU9RStNYXRoLmltdWwobmUsZnQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxNdCl8MCkrTWF0aC5pbXVsKHNlLGZ0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLE10KXww''@;'; put 'put ''KSsobT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwodnQsSXQpLG09KG09TWF0aC5pbXVsKHZ0LFJ0KSkrTWF0aC5pbXVsKFN0LEl0KXwwLEE9TWF0aC5pbXVsKFN0LFJ0KSxFPUUrTWF0aC5pbXVsKHJ0LGFuKXwwLG09KG09bStNYXRoLmltdWwocnQsbG4p''@;'; put 'put ''fDApK01hdGguaW11bChRZSxhbil8MCxBPUErTWF0aC5pbXVsKFFlLGxuKXwwLEU9RStNYXRoLmltdWwoQWUsaG4pfDAsbT0obT1tK01hdGguaW11bChBZSxodCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLEE9QStNYXRoLmltdWwoRGUsaHQpfDAsRT1FK01hdGguaW11bChMZSxCdCl8MCxtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKExlLEF0KXwwKStNYXRoLmltdWwoUmUsQnQpfDAsQT1BK01hdGguaW11bChSZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGplLHN0KXwwLG09KG09bStNYXRoLmltdWwoamUsWnQpfDApK01hdGguaW11bChrZSxzdCl8MCxBPUErTWF0aC5pbXVsKGtlLFp0KXwwLEU9RStNYXRo''@;'; put 'put ''LmltdWwoeGUsWWUpfDAsbT0obT1tK01hdGguaW11bCh4ZSxUdCl8MCkrTWF0aC5pbXVsKHllLFllKXwwLEE9QStNYXRoLmltdWwoeWUsVHQpfDAsRT1FK01hdGguaW11bChVZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLE10KXwwKStNYXRoLmltdWwoSmUsZnQpfDAsQT1BK01hdGguaW11''@;'; put 'put ''bChKZSxNdCl8MDt2YXIgdWE9KGorKEU9RStNYXRoLmltdWwobmUsbm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxXdCl8MCkrTWF0aC5pbXVsKHNlLG5uKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFd0KXwwKSsobT4+PjEzKXwwKSsodWE+Pj4yNil8MCx1''@;'; put 'put ''YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwodXQsSXQpLG09KG09TWF0aC5pbXVsKHV0LFJ0KSkrTWF0aC5pbXVsKFhlLEl0KXwwLEE9TWF0aC5pbXVsKFhlLFJ0KSxFPUUrTWF0aC5pbXVsKHZ0LGFuKXwwLG09KG09bStNYXRoLmltdWwodnQsbG4pfDApK01hdGguaW11bChTdCxhbil8MCxBPUEr''@;'; put 'put ''TWF0aC5pbXVsKFN0LGxuKXwwLEU9RStNYXRoLmltdWwocnQsaG4pfDAsbT0obT1tK01hdGguaW11bChydCxodCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLEE9QStNYXRoLmltdWwoUWUsaHQpfDAsRT1FK01hdGguaW11bChBZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKEFlLEF0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoRGUsQnQpfDAsQT1BK01hdGguaW11bChEZSxBdCl8MCxFPUUrTWF0aC5pbXVsKExlLHN0KXwwLG09KG09bStNYXRoLmltdWwoTGUsWnQpfDApK01hdGguaW11bChSZSxzdCl8MCxBPUErTWF0aC5pbXVsKFJlLFp0KXwwLEU9RStNYXRoLmltdWwoamUsWWUpfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bChqZSxUdCl8MCkrTWF0aC5pbXVsKGtlLFllKXwwLEE9QStNYXRoLmltdWwoa2UsVHQpfDAsRT1FK01hdGguaW11bCh4ZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLE10KXwwKStNYXRoLmltdWwoeWUsZnQpfDAsQT1BK01hdGguaW11bCh5ZSxNdCl8MCxFPUUrTWF0aC5pbXVsKFVl''@;'; put 'put ''LG5uKXwwLG09KG09bStNYXRoLmltdWwoVWUsV3QpfDApK01hdGguaW11bChKZSxubil8MCxBPUErTWF0aC5pbXVsKEplLFd0KXwwO3ZhciBSaT0oaisoRT1FK01hdGguaW11bChuZSxkbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLG1uKXwwKStNYXRoLmltdWwoc2UsZG4p''@;'; put 'put ''fDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsbW4pfDApKyhtPj4+MTMpfDApKyhSaT4+PjI2KXwwLFJpJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxJdCksbT0obT1NYXRoLmltdWwoSWUsUnQpKStNYXRoLmltdWwoYXQsSXQpfDAsQT1NYXRoLmltdWwoYXQsUnQpLEU9RStNYXRo''@;'; put 'put ''LmltdWwodXQsYW4pfDAsbT0obT1tK01hdGguaW11bCh1dCxsbil8MCkrTWF0aC5pbXVsKFhlLGFuKXwwLEE9QStNYXRoLmltdWwoWGUsbG4pfDAsRT1FK01hdGguaW11bCh2dCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LGh0KXwwKStNYXRoLmltdWwoU3QsaG4pfDAsQT1BK01hdGguaW11''@;'; put 'put ''bChTdCxodCl8MCxFPUUrTWF0aC5pbXVsKHJ0LEJ0KXwwLG09KG09bStNYXRoLmltdWwocnQsQXQpfDApK01hdGguaW11bChRZSxCdCl8MCxBPUErTWF0aC5pbXVsKFFlLEF0KXwwLEU9RStNYXRoLmltdWwoQWUsc3QpfDAsbT0obT1tK01hdGguaW11bChBZSxadCl8MCkrTWF0aC5pbXVsKERl''@;'; put 'put ''LHN0KXwwLEE9QStNYXRoLmltdWwoRGUsWnQpfDAsRT1FK01hdGguaW11bChMZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKExlLFR0KXwwKStNYXRoLmltdWwoUmUsWWUpfDAsQT1BK01hdGguaW11bChSZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGplLGZ0KXwwLG09KG09bStNYXRoLmltdWwoamUs''@;'; put 'put ''TXQpfDApK01hdGguaW11bChrZSxmdCl8MCxBPUErTWF0aC5pbXVsKGtlLE10KXwwLEU9RStNYXRoLmltdWwoeGUsbm4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxXdCl8MCkrTWF0aC5pbXVsKHllLG5uKXwwLEE9QStNYXRoLmltdWwoeWUsV3QpfDAsRT1FK01hdGguaW11bChVZSxkbil8MCxt''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKFVlLG1uKXwwKStNYXRoLmltdWwoSmUsZG4pfDAsQT1BK01hdGguaW11bChKZSxtbil8MDt2YXIgRGE9KGorKEU9RStNYXRoLmltdWwobmUsZm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSx0bil8MCkrTWF0aC5pbXVsKHNlLGZuKXwwKSk8PDEz''@;'; put 'put ''KXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHRuKXwwKSsobT4+PjEzKXwwKSsoRGE+Pj4yNil8MCxEYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsYW4pLG09KG09TWF0aC5pbXVsKEllLGxuKSkrTWF0aC5pbXVsKGF0LGFuKXwwLEE9TWF0aC5pbXVsKGF0LGxuKSxFPUUrTWF0aC5pbXVsKHV0''@;'; put 'put ''LGhuKXwwLG09KG09bStNYXRoLmltdWwodXQsaHQpfDApK01hdGguaW11bChYZSxobil8MCxBPUErTWF0aC5pbXVsKFhlLGh0KXwwLEU9RStNYXRoLmltdWwodnQsQnQpfDAsbT0obT1tK01hdGguaW11bCh2dCxBdCl8MCkrTWF0aC5pbXVsKFN0LEJ0KXwwLEE9QStNYXRoLmltdWwoU3QsQXQp''@;'; put 'put ''fDAsRT1FK01hdGguaW11bChydCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LFp0KXwwKStNYXRoLmltdWwoUWUsc3QpfDAsQT1BK01hdGguaW11bChRZSxadCl8MCxFPUUrTWF0aC5pbXVsKEFlLFllKXwwLG09KG09bStNYXRoLmltdWwoQWUsVHQpfDApK01hdGguaW11bChEZSxZZSl8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKERlLFR0KXwwLEU9RStNYXRoLmltdWwoTGUsZnQpfDAsbT0obT1tK01hdGguaW11bChMZSxNdCl8MCkrTWF0aC5pbXVsKFJlLGZ0KXwwLEE9QStNYXRoLmltdWwoUmUsTXQpfDAsRT1FK01hdGguaW11bChqZSxubil8MCxtPShtPW0rTWF0aC5pbXVsKGplLFd0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoa2Usbm4pfDAsQT1BK01hdGguaW11bChrZSxXdCl8MCxFPUUrTWF0aC5pbXVsKHhlLGRuKXwwLG09KG09bStNYXRoLmltdWwoeGUsbW4pfDApK01hdGguaW11bCh5ZSxkbil8MCxBPUErTWF0aC5pbXVsKHllLG1uKXwwO3ZhciBoaT0oaisoRT1FK01hdGguaW11bChVZSxmbil8''@;'; put 'put ''MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLHRuKXwwKStNYXRoLmltdWwoSmUsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSmUsdG4pfDApKyhtPj4+MTMpfDApKyhoaT4+PjI2KXwwLGhpJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxobiksbT0obT1NYXRoLmlt''@;'; put 'put ''dWwoSWUsaHQpKStNYXRoLmltdWwoYXQsaG4pfDAsQT1NYXRoLmltdWwoYXQsaHQpLEU9RStNYXRoLmltdWwodXQsQnQpfDAsbT0obT1tK01hdGguaW11bCh1dCxBdCl8MCkrTWF0aC5pbXVsKFhlLEJ0KXwwLEE9QStNYXRoLmltdWwoWGUsQXQpfDAsRT1FK01hdGguaW11bCh2dCxzdCl8MCxt''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKHZ0LFp0KXwwKStNYXRoLmltdWwoU3Qsc3QpfDAsQT1BK01hdGguaW11bChTdCxadCl8MCxFPUUrTWF0aC5pbXVsKHJ0LFllKXwwLG09KG09bStNYXRoLmltdWwocnQsVHQpfDApK01hdGguaW11bChRZSxZZSl8MCxBPUErTWF0aC5pbXVsKFFlLFR0KXwwLEU9RStN''@;'; put 'put ''YXRoLmltdWwoQWUsZnQpfDAsbT0obT1tK01hdGguaW11bChBZSxNdCl8MCkrTWF0aC5pbXVsKERlLGZ0KXwwLEE9QStNYXRoLmltdWwoRGUsTXQpfDAsRT1FK01hdGguaW11bChMZSxubil8MCxtPShtPW0rTWF0aC5pbXVsKExlLFd0KXwwKStNYXRoLmltdWwoUmUsbm4pfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bChSZSxXdCl8MCxFPUUrTWF0aC5pbXVsKGplLGRuKXwwLG09KG09bStNYXRoLmltdWwoamUsbW4pfDApK01hdGguaW11bChrZSxkbil8MCxBPUErTWF0aC5pbXVsKGtlLG1uKXwwO3ZhciBxaT0oaisoRT1FK01hdGguaW11bCh4ZSxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKHhlLHRuKXwwKStNYXRoLmltdWwoeWUsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoeWUsdG4pfDApKyhtPj4+MTMpfDApKyhxaT4+PjI2KXwwLHFpJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxCdCksbT0obT1NYXRoLmltdWwoSWUsQXQpKStNYXRoLmltdWwoYXQsQnQp''@;'; put 'put ''fDAsQT1NYXRoLmltdWwoYXQsQXQpLEU9RStNYXRoLmltdWwodXQsc3QpfDAsbT0obT1tK01hdGguaW11bCh1dCxadCl8MCkrTWF0aC5pbXVsKFhlLHN0KXwwLEE9QStNYXRoLmltdWwoWGUsWnQpfDAsRT1FK01hdGguaW11bCh2dCxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LFR0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoU3QsWWUpfDAsQT1BK01hdGguaW11bChTdCxUdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LGZ0KXwwLG09KG09bStNYXRoLmltdWwocnQsTXQpfDApK01hdGguaW11bChRZSxmdCl8MCxBPUErTWF0aC5pbXVsKFFlLE10KXwwLEU9RStNYXRoLmltdWwoQWUsbm4pfDAsbT0obT1tK01h''@;'; put 'put ''dGguaW11bChBZSxXdCl8MCkrTWF0aC5pbXVsKERlLG5uKXwwLEE9QStNYXRoLmltdWwoRGUsV3QpfDAsRT1FK01hdGguaW11bChMZSxkbil8MCxtPShtPW0rTWF0aC5pbXVsKExlLG1uKXwwKStNYXRoLmltdWwoUmUsZG4pfDAsQT1BK01hdGguaW11bChSZSxtbil8MDt2YXIgUGE9KGorKEU9''@;'; put 'put ''RStNYXRoLmltdWwoamUsZm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChqZSx0bil8MCkrTWF0aC5pbXVsKGtlLGZuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKGtlLHRuKXwwKSsobT4+PjEzKXwwKSsoUGE+Pj4yNil8MCxQYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwo''@;'; put 'put ''SWUsc3QpLG09KG09TWF0aC5pbXVsKEllLFp0KSkrTWF0aC5pbXVsKGF0LHN0KXwwLEE9TWF0aC5pbXVsKGF0LFp0KSxFPUUrTWF0aC5pbXVsKHV0LFllKXwwLG09KG09bStNYXRoLmltdWwodXQsVHQpfDApK01hdGguaW11bChYZSxZZSl8MCxBPUErTWF0aC5pbXVsKFhlLFR0KXwwLEU9RStN''@;'; put 'put ''YXRoLmltdWwodnQsZnQpfDAsbT0obT1tK01hdGguaW11bCh2dCxNdCl8MCkrTWF0aC5pbXVsKFN0LGZ0KXwwLEE9QStNYXRoLmltdWwoU3QsTXQpfDAsRT1FK01hdGguaW11bChydCxubil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LFd0KXwwKStNYXRoLmltdWwoUWUsbm4pfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bChRZSxXdCl8MCxFPUUrTWF0aC5pbXVsKEFlLGRuKXwwLG09KG09bStNYXRoLmltdWwoQWUsbW4pfDApK01hdGguaW11bChEZSxkbil8MCxBPUErTWF0aC5pbXVsKERlLG1uKXwwO3ZhciB1cj0oaisoRT1FK01hdGguaW11bChMZSxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKExlLHRuKXwwKStNYXRoLmltdWwoUmUsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoUmUsdG4pfDApKyhtPj4+MTMpfDApKyh1cj4+PjI2KXwwLHVyJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxZZSksbT0obT1NYXRoLmltdWwoSWUsVHQpKStNYXRoLmltdWwoYXQsWWUp''@;'; put 'put ''fDAsQT1NYXRoLmltdWwoYXQsVHQpLEU9RStNYXRoLmltdWwodXQsZnQpfDAsbT0obT1tK01hdGguaW11bCh1dCxNdCl8MCkrTWF0aC5pbXVsKFhlLGZ0KXwwLEE9QStNYXRoLmltdWwoWGUsTXQpfDAsRT1FK01hdGguaW11bCh2dCxubil8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LFd0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoU3Qsbm4pfDAsQT1BK01hdGguaW11bChTdCxXdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LGRuKXwwLG09KG09bStNYXRoLmltdWwocnQsbW4pfDApK01hdGguaW11bChRZSxkbil8MCxBPUErTWF0aC5pbXVsKFFlLG1uKXwwO3ZhciBiYT0oaisoRT1FK01hdGguaW11bChBZSxmbil8''@;'; put 'put ''MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKEFlLHRuKXwwKStNYXRoLmltdWwoRGUsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoRGUsdG4pfDApKyhtPj4+MTMpfDApKyhiYT4+PjI2KXwwLGJhJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxmdCksbT0obT1NYXRoLmlt''@;'; put 'put ''dWwoSWUsTXQpKStNYXRoLmltdWwoYXQsZnQpfDAsQT1NYXRoLmltdWwoYXQsTXQpLEU9RStNYXRoLmltdWwodXQsbm4pfDAsbT0obT1tK01hdGguaW11bCh1dCxXdCl8MCkrTWF0aC5pbXVsKFhlLG5uKXwwLEE9QStNYXRoLmltdWwoWGUsV3QpfDAsRT1FK01hdGguaW11bCh2dCxkbil8MCxt''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKHZ0LG1uKXwwKStNYXRoLmltdWwoU3QsZG4pfDAsQT1BK01hdGguaW11bChTdCxtbil8MDt2YXIgTWk9KGorKEU9RStNYXRoLmltdWwocnQsZm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChydCx0bil8MCkrTWF0aC5pbXVsKFFlLGZuKXwwKSk8PDEz''@;'; put 'put ''KXwwO2o9KChBPUErTWF0aC5pbXVsKFFlLHRuKXwwKSsobT4+PjEzKXwwKSsoTWk+Pj4yNil8MCxNaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsbm4pLG09KG09TWF0aC5pbXVsKEllLFd0KSkrTWF0aC5pbXVsKGF0LG5uKXwwLEE9TWF0aC5pbXVsKGF0LFd0KSxFPUUrTWF0aC5pbXVsKHV0''@;'; put 'put ''LGRuKXwwLG09KG09bStNYXRoLmltdWwodXQsbW4pfDApK01hdGguaW11bChYZSxkbil8MCxBPUErTWF0aC5pbXVsKFhlLG1uKXwwO3ZhciB3YT0oaisoRT1FK01hdGguaW11bCh2dCxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHZ0LHRuKXwwKStNYXRoLmltdWwoU3QsZm4p''@;'; put 'put ''fDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoU3QsdG4pfDApKyhtPj4+MTMpfDApKyh3YT4+PjI2KXwwLHdhJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxkbiksbT0obT1NYXRoLmltdWwoSWUsbW4pKStNYXRoLmltdWwoYXQsZG4pfDAsQT1NYXRoLmltdWwoYXQsbW4pO3ZhciBlYT0o''@;'; put 'put ''aisoRT1FK01hdGguaW11bCh1dCxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHV0LHRuKXwwKStNYXRoLmltdWwoWGUsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoWGUsdG4pfDApKyhtPj4+MTMpfDApKyhlYT4+PjI2KXwwLGVhJj02NzEwODg2Mzt2YXIgRnI9''@;'; put 'put ''KGorKEU9TWF0aC5pbXVsKEllLGZuKSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChJZSx0bikpK01hdGguaW11bChhdCxmbil8MCkpPDwxMyl8MDtyZXR1cm4gaj0oKEE9TWF0aC5pbXVsKGF0LHRuKSkrKG0+Pj4xMyl8MCkrKEZyPj4+MjYpfDAsRnImPTY3MTA4ODYzLEhbMF09Y2EsSFsx''@;'; put 'put ''XT1faSxIWzJdPXZyLEhbM109WGksSFs0XT1RaSxIWzVdPVZpLEhbNl09ZWksSFs3XT11YSxIWzhdPVJpLEhbOV09RGEsSFsxMF09aGksSFsxMV09cWksSFsxMl09UGEsSFsxM109dXIsSFsxNF09YmEsSFsxNV09TWksSFsxNl09d2EsSFsxN109ZWEsSFsxOF09RnIsMCE9PWomJihIWzE5XT1q''@;'; put 'put ''LHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIGVlKEIsZyx5KXtyZXR1cm4obmV3IEopLm11bHAoQixnLHkpfWZ1bmN0aW9uIEooQixnKXt0aGlzLng9Qix0aGlzLnk9Z31NYXRoLmltdWx8fChXPVkpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGcseSl7dmFyIHgsQz10aGlzLmxlbmd0aCtn''@;'; put 'put ''Lmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PWcubGVuZ3RoP1codGhpcyxnLHkpOkM8NjM/WSh0aGlzLGcseSk6QzwxMDI0P2Z1bmN0aW9uIHEoQixnLHkpe3kubmVnYXRpdmU9Zy5uZWdhdGl2ZV5CLm5lZ2F0aXZlLHkubGVuZ3RoPUIubGVuZ3RoK2cubGVuZ3RoO2Zv''@;'; put 'put ''cih2YXIgeD0wLEM9MCxUPTA7VDx5Lmxlbmd0aC0xO1QrKyl7dmFyIEg9QztDPTA7Zm9yKHZhciBqPTY3MTA4ODYzJngsRT1NYXRoLm1pbihULGcubGVuZ3RoLTEpLG09TWF0aC5tYXgoMCxULUIubGVuZ3RoKzEpO208PUU7bSsrKXt2YXIgc2U9KDB8Qi53b3Jkc1tULW1dKSooMHxnLndvcmRz''@;'; put 'put ''W21dKSxDZT02NzEwODg2MyZzZTtqPTY3MTA4ODYzJihDZT1DZStqfDApLEMrPShIPShIPUgrKHNlLzY3MTA4ODY0fDApfDApKyhDZT4+PjI2KXwwKT4+PjI2LEgmPTY3MTA4ODYzfXkud29yZHNbVF09aix4PUgsSD1DfXJldHVybiAwIT09eD95LndvcmRzW1RdPXg6eS5sZW5ndGgtLSx5LnN0''@;'; put 'put ''cmlwKCl9KHRoaXMsZyx5KTplZSh0aGlzLGcseSkseH0sSi5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihnKXtmb3IodmFyIHk9bmV3IEFycmF5KGcpLHg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhnKS0xLEM9MDtDPGc7QysrKXlbQ109dGhpcy5yZXZCaW4oQyx4LGcpO3JldHVybiB5fSxK''@;'; put 'put ''LnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oZyx5LHgpe2lmKDA9PT1nfHxnPT09eC0xKXJldHVybiBnO2Zvcih2YXIgQz0wLFQ9MDtUPHk7VCsrKUN8PSgxJmcpPDx5LVQtMSxnPj49MTtyZXR1cm4gQ30sSi5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihnLHkseCxDLFQsSCl7Zm9yKHZh''@;'; put 'put ''ciBqPTA7ajxIO2orKylDW2pdPXlbZ1tqXV0sVFtqXT14W2dbal1dfSxKLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZyx5LHgsQyxULEgpe3RoaXMucGVybXV0ZShILGcseSx4LEMsVCk7Zm9yKHZhciBqPTE7ajxUO2o8PD0xKWZvcih2YXIgRT1qPDwxLG09TWF0aC5jb3MoMipNYXRo''@;'; put 'put ''LlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLGFlPTA7YWU8VDthZSs9RSlmb3IodmFyIG5lPW0sc2U9QSxDZT0wO0NlPGo7Q2UrKyl7dmFyIFVlPXhbYWUrQ2VdLEplPUNbYWUrQ2VdLGl0PXhbYWUrQ2Ural0seGU9Q1thZStDZStqXSx5ZT1uZSppdC1zZSp4ZTt4ZT1uZSp4ZStzZSpp''@;'; put 'put ''dCx4W2FlK0NlXT1VZSsoaXQ9eWUpLENbYWUrQ2VdPUplK3hlLHhbYWUrQ2Ural09VWUtaXQsQ1thZStDZStqXT1KZS14ZSxDZSE9PUUmJih5ZT1tKm5lLUEqc2Usc2U9bSpzZStBKm5lLG5lPXllKX19LEoucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGcseSl7dmFyIHg9MXxNYXRo''@;'; put 'put ''Lm1heCh5LGcpLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8PFQrMStDfSxKLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oZyx5LHgpe2lmKCEoeDw9MSkpZm9yKHZhciBDPTA7Qzx4LzI7QysrKXt2YXIgVD1nW0NdO2dbQ109Z1t4LUMtMV0sZ1t4LUMt''@;'; put 'put ''MV09VCxUPXlbQ10seVtDXT0teVt4LUMtMV0seVt4LUMtMV09LVR9fSxKLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oZyx5KXtmb3IodmFyIHg9MCxDPTA7Qzx5LzI7QysrKXt2YXIgVD04MTkyKk1hdGgucm91bmQoZ1syKkMrMV0veSkrTWF0aC5yb3VuZChnWzIqQ10veSkreDtn''@;'; put 'put ''W0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJldHVybiBnfSxKLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGcseSx4LEMpe2Zvcih2YXIgVD0wLEg9MDtIPHk7SCsrKXhbMipIXT04MTkxJihUKz0wfGdbSF0pLHhbMipIKzFdPTgxOTEmKFQ+Pj49MTMp''@;'; put 'put ''LFQ+Pj49MTM7Zm9yKEg9Mip5O0g8QzsrK0gpeFtIXT0wO3AoMD09PVQpLHAoISgtODE5MiZUKSl9LEoucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PW5ldyBBcnJheShnKSx4PTA7eDxnO3grKyl5W3hdPTA7cmV0dXJuIHl9LEoucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24o''@;'; put 'put ''Zyx5LHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihnLmxlbmd0aCx5Lmxlbmd0aCksVD10aGlzLm1ha2VSQlQoQyksSD10aGlzLnN0dWIoQyksaj1uZXcgQXJyYXkoQyksRT1uZXcgQXJyYXkoQyksbT1uZXcgQXJyYXkoQyksQT1uZXcgQXJyYXkoQyksYWU9bmV3IEFycmF5KEMpLG5lPW5l''@;'; put 'put ''dyBBcnJheShDKSxzZT14LndvcmRzO3NlLmxlbmd0aD1DLHRoaXMuY29udmVydDEzYihnLndvcmRzLGcubGVuZ3RoLGosQyksdGhpcy5jb252ZXJ0MTNiKHkud29yZHMseS5sZW5ndGgsQSxDKSx0aGlzLnRyYW5zZm9ybShqLEgsRSxtLEMsVCksdGhpcy50cmFuc2Zvcm0oQSxILGFlLG5lLEMs''@;'; put 'put ''VCk7Zm9yKHZhciBDZT0wO0NlPEM7Q2UrKyl7dmFyIFVlPUVbQ2VdKmFlW0NlXS1tW0NlXSpuZVtDZV07bVtDZV09RVtDZV0qbmVbQ2VdK21bQ2VdKmFlW0NlXSxFW0NlXT1VZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoRSxtLEMpLHRoaXMudHJhbnNmb3JtKEUsbSxzZSxILEMsVCksdGhpcy5j''@;'; put 'put ''b25qdWdhdGUoc2UsSCxDKSx0aGlzLm5vcm1hbGl6ZTEzYihzZSxDKSx4Lm5lZ2F0aXZlPWcubmVnYXRpdmVeeS5uZWdhdGl2ZSx4Lmxlbmd0aD1nLmxlbmd0aCt5Lmxlbmd0aCx4LnN0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihnKXt2YXIgeT1uZXcgdyhudWxsKTtyZXR1cm4g''@;'; put 'put ''eS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRoaXMubXVsVG8oZyx5KX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihnKXt2YXIgeT1uZXcgdyhudWxsKTtyZXR1cm4geS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLGVlKHRoaXMsZyx5KX0s''@;'; put 'put ''dy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGcsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpO2Zvcih2YXIgeT0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7''@;'; put 'put ''dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqZyxUPSg2NzEwODg2MyZDKSsoNjcxMDg4NjMmeSk7eT4+PTI2LHkrPUMvNjcxMDg4NjR8MCx5Kz1UPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZUfXJldHVybiAwIT09eSYmKHRoaXMud29yZHNbeF09eSx0aGlzLmxlbmd0aCsrKSx0aGlzLmxl''@;'; put 'put ''bmd0aD0wPT09Zz8xOnRoaXMubGVuZ3RoLHRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihnKX0sdy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSx3LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyl7dmFyIHk9ZnVuY3Rpb24gWihCKXtmb3IodmFyIGc9bmV3IEFycmF5KEIuYml0TGVuZ3RoKCkpLHk9MDt5PGcubGVuZ3RoO3krKyl7dmFyIEM9eSUyNjtnW3ldPShCLndvcmRzW3kv''@;'; put 'put ''MjZ8MF0mMTw8Qyk+Pj5DfXJldHVybiBnfShnKTtpZigwPT09eS5sZW5ndGgpcmV0dXJuIG5ldyB3KDEpO2Zvcih2YXIgeD10aGlzLEM9MDtDPHkubGVuZ3RoJiYwPT09eVtDXTtDKysseD14LnNxcigpKTtpZigrK0M8eS5sZW5ndGgpZm9yKHZhciBUPXguc3FyKCk7Qzx5Lmxlbmd0aDtDKyss''@;'; put 'put ''VD1ULnNxcigpKTAhPT15W0NdJiYoeD14Lm11bChUKSk7cmV0dXJuIHh9LHcucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIFQseT1nJTI2LHg9KGcteSkvMjYsQz02NzEwODg2Mz4+PjI2LXk8PDI2LXk7aWYoMCE9PXkpe3ZhciBI''@;'; put 'put ''PTA7Zm9yKFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIGo9dGhpcy53b3Jkc1tUXSZDO3RoaXMud29yZHNbVF09KDB8dGhpcy53b3Jkc1tUXSktajw8eXxILEg9aj4+PjI2LXl9SCYmKHRoaXMud29yZHNbVF09SCx0aGlzLmxlbmd0aCsrKX1pZigwIT09eCl7Zm9yKFQ9dGhpcy5sZW5ndGgt''@;'; put 'put ''MTtUPj0wO1QtLSl0aGlzLndvcmRzW1QreF09dGhpcy53b3Jkc1tUXTtmb3IoVD0wO1Q8eDtUKyspdGhpcy53b3Jkc1tUXT0wO3RoaXMubGVuZ3RoKz14fXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZl''@;'; put 'put ''KSx0aGlzLml1c2hsbihnKX0sdy5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKGcseSx4KXt2YXIgQztwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCksQz15Pyh5LXklMjYpLzI2OjA7dmFyIFQ9ZyUyNixIPU1hdGgubWluKChnLVQpLzI2LHRoaXMubGVuZ3RoKSxqPTY3MTA4ODYzXjY3MTA4''@;'; put 'put ''ODYzPj4+VDw8VCxFPXg7aWYoQy09SCxDPU1hdGgubWF4KDAsQyksRSl7Zm9yKHZhciBtPTA7bTxIO20rKylFLndvcmRzW21dPXRoaXMud29yZHNbbV07RS5sZW5ndGg9SH1pZigwIT09SClpZih0aGlzLmxlbmd0aD5IKWZvcih0aGlzLmxlbmd0aC09SCxtPTA7bTx0aGlzLmxlbmd0aDttKysp''@;'; put 'put ''dGhpcy53b3Jkc1ttXT10aGlzLndvcmRzW20rSF07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgQT0wO2ZvcihtPXRoaXMubGVuZ3RoLTE7bT49MCYmKDAhPT1BfHxtPj1DKTttLS0pe3ZhciBhZT0wfHRoaXMud29yZHNbbV07dGhpcy53b3Jkc1ttXT1BPDwyNi1UfGFl''@;'; put 'put ''Pj4+VCxBPWFlJmp9cmV0dXJuIEUmJjAhPT1BJiYoRS53b3Jkc1tFLmxlbmd0aCsrXT1BKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihnLHkseCl7cmV0dXJuIHAoMD09PXRo''@;'; put 'put ''aXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGcseSx4KX0sdy5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGcpfSx3LnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihnKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''c2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGcpfSx3LnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihnKX0sdy5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTAp''@;'; put 'put ''O3ZhciB5PWclMjYseD0oZy15KS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD14fHwhKHRoaXMud29yZHNbeF0mMTw8eSkpfSx3LnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PWclMjYseD0oZy15KS8yNjtyZXR1cm4gcCgwPT09''@;'; put 'put ''dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXg/dGhpczooMCE9PXkmJngrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbih4LHRoaXMubGVuZ3RoKSwwIT09eSYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4''@;'; put 'put ''ODYzXjY3MTA4ODYzPj4+eTw8eSksdGhpcy5zdHJpcCgpKX0sdy5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oZyl9LHcucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGcpe3JldHVybiBwKCJudW1iZXIiPT10eXBlb2YgZykscChnPDY3MTA4''@;'; put 'put ''ODY0KSxnPDA/dGhpcy5pc3VibigtZyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxnPyh0aGlzLndvcmRzWzBdPWctKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3Vibihn''@;'; put 'put ''KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oZyl9LHcucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihnKXt0aGlzLndvcmRzWzBdKz1nO2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbeV0+PTY3MTA4ODY0O3krKyl0aGlzLndvcmRzW3ldLT02NzEwODg2''@;'; put 'put ''NCx5PT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW3krMV09MTp0aGlzLndvcmRzW3krMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgseSsxKSx0aGlzfSx3LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihnKXtpZihwKCJudW1iZXIiPT10eXBlb2YgZykscChn''@;'; put 'put ''PDY3MTA4ODY0KSxnPDApcmV0dXJuIHRoaXMuaWFkZG4oLWcpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1nLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1sw''@;'; put 'put ''XTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t5XTwwO3krKyl0aGlzLndvcmRzW3ldKz02NzEwODg2NCx0aGlzLndvcmRzW3krMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0s''@;'; put 'put ''dy5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGcpfSx3LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oZyl9LHcucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2''@;'; put 'put ''ZT0wLHRoaXN9LHcucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx3LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oZyx5LHgpe3ZhciBUO3RoaXMuX2V4cGFuZChnLmxlbmd0aCt4KTt2YXIgSCxqPTA7Zm9yKFQ9MDtUPGcubGVuZ3Ro''@;'; put 'put ''O1QrKyl7SD0oMHx0aGlzLndvcmRzW1QreF0pK2o7dmFyIEU9KDB8Zy53b3Jkc1tUXSkqeTtqPSgoSC09NjcxMDg4NjMmRSk+PjI2KS0oRS82NzEwODg2NHwwKSx0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmSH1mb3IoO1Q8dGhpcy5sZW5ndGgteDtUKyspaj0oSD0oMHx0aGlzLndvcmRzW1Qr''@;'; put 'put ''eF0pK2opPj4yNix0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmSDtpZigwPT09ailyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihwKC0xPT09aiksaj0wLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKylqPShIPS0oMHx0aGlzLndvcmRzW1RdKStqKT4+MjYsdGhpcy53b3Jkc1tUXT02NzEwODg2MyZIO3Jl''@;'; put 'put ''dHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihnLHkpe3ZhciB4LEM9dGhpcy5jbG9uZSgpLFQ9ZyxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXTswIT0oeD0yNi10aGlzLl9jb3VudEJpdHMoSCkpJiYoVD1ULnVzaGxuKHgpLEMu''@;'; put 'put ''aXVzaGxuKHgpLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdKTt2YXIgbSxFPUMubGVuZ3RoLVQubGVuZ3RoO2lmKCJtb2QiIT09eSl7KG09bmV3IHcobnVsbCkpLmxlbmd0aD1FKzEsbS53b3Jkcz1uZXcgQXJyYXkobS5sZW5ndGgpO2Zvcih2YXIgQT0wO0E8bS5sZW5ndGg7QSsrKW0ud29yZHNb''@;'; put 'put ''QV09MH12YXIgYWU9Qy5jbG9uZSgpLl9pc2hsbnN1Ym11bChULDEsRSk7MD09PWFlLm5lZ2F0aXZlJiYoQz1hZSxtJiYobS53b3Jkc1tFXT0xKSk7Zm9yKHZhciBuZT1FLTE7bmU+PTA7bmUtLSl7dmFyIHNlPTY3MTA4ODY0KigwfEMud29yZHNbVC5sZW5ndGgrbmVdKSsoMHxDLndvcmRzW1Qu''@;'; put 'put ''bGVuZ3RoK25lLTFdKTtmb3Ioc2U9TWF0aC5taW4oc2UvSHwwLDY3MTA4ODYzKSxDLl9pc2hsbnN1Ym11bChULHNlLG5lKTswIT09Qy5uZWdhdGl2ZTspc2UtLSxDLm5lZ2F0aXZlPTAsQy5faXNobG5zdWJtdWwoVCwxLG5lKSxDLmlzWmVybygpfHwoQy5uZWdhdGl2ZV49MSk7bSYmKG0ud29y''@;'; put 'put ''ZHNbbmVdPXNlKX1yZXR1cm4gbSYmbS5zdHJpcCgpLEMuc3RyaXAoKSwiZGl2IiE9PXkmJjAhPT14JiZDLml1c2hybih4KSx7ZGl2Om18fG51bGwsbW9kOkN9fSx3LnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oZyx5LHgpe3JldHVybiBwKCFnLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tk''@;'; put 'put ''aXY6bmV3IHcoMCksbW9kOm5ldyB3KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QoZyx5KSwibW9kIiE9PXkmJihDPUguZGl2Lm5lZygpKSwiZGl2IiE9PXkmJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlhZGQo''@;'; put 'put ''ZykpLHtkaXY6Qyxtb2Q6VH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZT8oSD10aGlzLmRpdm1vZChnLm5lZygpLHkpLCJtb2QiIT09eSYmKEM9SC5kaXYubmVnKCkpLHtkaXY6Qyxtb2Q6SC5tb2R9KTp0aGlzLm5lZ2F0aXZlJmcubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5k''@;'; put 'put ''aXZtb2QoZy5uZWcoKSx5KSwiZGl2IiE9PXkmJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlzdWIoZykpLHtkaXY6SC5kaXYsbW9kOlR9KTpnLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoZyk8MD97ZGl2Om5ldyB3KDApLG1vZDp0aGlzfToxPT09Zy5sZW5ndGg/''@;'; put 'put ''ImRpdiI9PT15P3tkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PXk/e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bmV3IHcodGhpcy5tb2RuKGcud29yZHNbMF0pKX06dGhp''@;'; put 'put ''cy5fd29yZERpdihnLHkpO3ZhciBDLFQsSH0sdy5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJkaXYiLCExKS5kaXZ9LHcucHJvdG90eXBlLm1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMSkubW9kfSx3LnByb3RvdHlw''@;'; put 'put ''ZS51bW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCEwKS5tb2R9LHcucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGcpe3ZhciB5PXRoaXMuZGl2bW9kKGcpO2lmKHkubW9kLmlzWmVybygpKXJldHVybiB5LmRpdjt2YXIgeD0wIT09eS5kaXYubmVnYXRpdmU/''@;'; put 'put ''eS5tb2QuaXN1YihnKTp5Lm1vZCxDPWcudXNocm4oMSksVD1nLmFuZGxuKDEpLEg9eC5jbXAoQyk7cmV0dXJuIEg8MHx8MT09PVQmJjA9PT1IP3kuZGl2OjAhPT15LmRpdi5uZWdhdGl2ZT95LmRpdi5pc3VibigxKTp5LmRpdi5pYWRkbigxKX0sdy5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihn''@;'; put 'put ''KXtwKGc8PTY3MTA4ODYzKTtmb3IodmFyIHk9KDE8PDI2KSVnLHg9MCxDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0peD0oeSp4KygwfHRoaXMud29yZHNbQ10pKSVnO3JldHVybiB4fSx3LnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihnKXtwKGc8PTY3MTA4ODYzKTtmb3IodmFyIHk9MCx4PXRo''@;'; put 'put ''aXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKzY3MTA4ODY0Knk7dGhpcy53b3Jkc1t4XT1DL2d8MCx5PUMlZ31yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oZyl9LHcu''@;'; put 'put ''cHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSkscCghZy5pc1plcm8oKSk7dmFyIHk9dGhpcyx4PWcuY2xvbmUoKTt5PTAhPT15Lm5lZ2F0aXZlP3kudW1vZChnKTp5LmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD1uZXcgdygwKSxqPW5l''@;'; put 'put ''dyB3KDEpLEU9MDt5LmlzRXZlbigpJiZ4LmlzRXZlbigpOyl5Lml1c2hybigxKSx4Lml1c2hybigxKSwrK0U7Zm9yKHZhciBtPXguY2xvbmUoKSxBPXkuY2xvbmUoKTsheS5pc1plcm8oKTspe2Zvcih2YXIgYWU9MCxuZT0xOyEoeS53b3Jkc1swXSZuZSkmJmFlPDI2OysrYWUsbmU8PD0xKTtp''@;'; put 'put ''ZihhZT4wKWZvcih5Lml1c2hybihhZSk7YWUtLSA+MDspKEMuaXNPZGQoKXx8VC5pc09kZCgpKSYmKEMuaWFkZChtKSxULmlzdWIoQSkpLEMuaXVzaHJuKDEpLFQuaXVzaHJuKDEpO2Zvcih2YXIgc2U9MCxDZT0xOyEoeC53b3Jkc1swXSZDZSkmJnNlPDI2Oysrc2UsQ2U8PD0xKTtpZihzZT4w''@;'; put 'put ''KWZvcih4Lml1c2hybihzZSk7c2UtLSA+MDspKEguaXNPZGQoKXx8ai5pc09kZCgpKSYmKEguaWFkZChtKSxqLmlzdWIoQSkpLEguaXVzaHJuKDEpLGouaXVzaHJuKDEpO3kuY21wKHgpPj0wPyh5LmlzdWIoeCksQy5pc3ViKEgpLFQuaXN1YihqKSk6KHguaXN1Yih5KSxILmlzdWIoQyksai5p''@;'; put 'put ''c3ViKFQpKX1yZXR1cm57YTpILGI6aixnY2Q6eC5pdXNobG4oRSl9fSx3LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSkscCghZy5pc1plcm8oKSk7dmFyIGFlLHk9dGhpcyx4PWcuY2xvbmUoKTt5PTAhPT15Lm5lZ2F0aXZlP3kudW1vZChnKTp5LmNsb25l''@;'; put 'put ''KCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD14LmNsb25lKCk7eS5jbXBuKDEpPjAmJnguY21wbigxKT4wOyl7Zm9yKHZhciBqPTAsRT0xOyEoeS53b3Jkc1swXSZFKSYmajwyNjsrK2osRTw8PTEpO2lmKGo+MClmb3IoeS5pdXNocm4oaik7ai0tID4wOylDLmlzT2RkKCkmJkMu''@;'; put 'put ''aWFkZChIKSxDLml1c2hybigxKTtmb3IodmFyIG09MCxBPTE7ISh4LndvcmRzWzBdJkEpJiZtPDI2OysrbSxBPDw9MSk7aWYobT4wKWZvcih4Lml1c2hybihtKTttLS0gPjA7KVQuaXNPZGQoKSYmVC5pYWRkKEgpLFQuaXVzaHJuKDEpO3kuY21wKHgpPj0wPyh5LmlzdWIoeCksQy5pc3ViKFQp''@;'; put 'put ''KTooeC5pc3ViKHkpLFQuaXN1YihDKSl9cmV0dXJuKGFlPTA9PT15LmNtcG4oMSk/QzpUKS5jbXBuKDApPDAmJmFlLmlhZGQoZyksYWV9LHcucHJvdG90eXBlLmdjZD1mdW5jdGlvbihnKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBnLmFicygpO2lmKGcuaXNaZXJvKCkpcmV0dXJuIHRoaXMu''@;'; put 'put ''YWJzKCk7dmFyIHk9dGhpcy5jbG9uZSgpLHg9Zy5jbG9uZSgpO3kubmVnYXRpdmU9MCx4Lm5lZ2F0aXZlPTA7Zm9yKHZhciBDPTA7eS5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTtDKyspeS5pdXNocm4oMSkseC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO3kuaXNFdmVuKCk7KXkuaXVzaHJuKDEpO2Zv''@;'; put 'put ''cig7eC5pc0V2ZW4oKTspeC5pdXNocm4oMSk7dmFyIFQ9eS5jbXAoeCk7aWYoVDwwKXt2YXIgSD15O3k9eCx4PUh9ZWxzZSBpZigwPT09VHx8MD09PXguY21wbigxKSlicmVhazt5LmlzdWIoeCl9cmV0dXJuIHguaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVy''@;'; put 'put ''biB0aGlzLmVnY2QoZykuYS51bW9kKGcpfSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24o''@;'; put 'put ''Zyl7cmV0dXJuIHRoaXMud29yZHNbMF0mZ30sdy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcpO3ZhciB5PWclMjYseD0oZy15KS8yNixDPTE8PHk7aWYodGhpcy5sZW5ndGg8PXgpcmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF18''@;'; put 'put ''PUMsdGhpcztmb3IodmFyIFQ9QyxIPXg7MCE9PVQmJkg8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj0wfHRoaXMud29yZHNbSF07VD0oais9VCk+Pj4yNix0aGlzLndvcmRzW0hdPWomPTY3MTA4ODYzfXJldHVybiAwIT09VCYmKHRoaXMud29yZHNbSF09VCx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3''@;'; put 'put ''LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdy5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihnKXt2YXIgeCx5PWc8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIXkpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRp''@;'; put 'put ''dmUmJnkpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpeD0xO2Vsc2V7eSYmKGc9LWcpLHAoZzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIEM9MHx0aGlzLndvcmRzWzBdO3g9Qz09PWc/MDpDPGc/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/''@;'; put 'put ''MHwteDp4fSx3LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oZyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgeT10aGlzLnVjbXAoZyk7cmV0dXJuIDAhPT10aGlzLm5l''@;'; put 'put ''Z2F0aXZlPzB8LXk6eX0sdy5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihnKXtpZih0aGlzLmxlbmd0aD5nLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxnLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIHk9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPTB8dGhpcy53b3Jk''@;'; put 'put ''c1t4XSxUPTB8Zy53b3Jkc1t4XTtpZihDIT09VCl7QzxUP3k9LTE6Qz5UJiYoeT0xKTticmVha319cmV0dXJuIHl9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNt''@;'; put 'put ''cChnKX0sdy5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPj0wfSx3LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcG4oZyl9LHcu''@;'; put 'put ''cHJvdG90eXBlLmx0PWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXAoZyl9LHcucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKTw9MH0sdy5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKTw9MH0sdy5wcm90b3R5cGUu''@;'; put 'put ''ZXFuPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5lcT1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wKGcpfSx3LnJlZD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IE1lKGcpfSx3LnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihnKXtyZXR1cm4g''@;'; put 'put ''cCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxwKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChnKX0sdy5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBwKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LHcucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5yZWQ9Zyx0aGlzfSx3''@;'; put 'put ''LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChnKX0sdy5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRB''@;'; put 'put ''ZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLGcp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVk''@;'; put 'put ''SVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLGcp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLm11bCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9u''@;'; put 'put ''KGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5pbXVsKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTcXIg''@;'; put 'put ''d29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhp''@;'; put 'put ''cy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNx''@;'; put 'put ''cnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3LnByb3RvdHlwZS5yZWROZWc9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sdy5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkJiYhZy5yZWQs''@;'; put 'put ''InJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsZyl9O3ZhciByZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIGllKEIsZyl7dGhpcy5uYW1lPUIsdGhpcy5wPW5ldyB3KGcsMTYp''@;'; put 'put ''LHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB3KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiB1ZSgpe2llLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZm''@;'; put 'put ''ZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gZ2UoKXtpZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIF9lKCl7aWUuY2FsbCh0aGlzLCJw''@;'; put 'put ''MTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBUZSgpe2llLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVk''@;'; put 'put ''Iil9ZnVuY3Rpb24gTWUoQil7aWYoInN0cmluZyI9PXR5cGVvZiBCKXt2YXIgZz13Ll9wcmltZShCKTt0aGlzLm09Zy5wLHRoaXMucHJpbWU9Z31lbHNlIHAoQi5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1CLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlv''@;'; put 'put ''biBaZShCKXtNZS5jYWxsKHRoaXMsQiksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgdygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNx''@;'; put 'put ''cigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1pZS5wcm90b3R5''@;'; put 'put ''cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBnPW5ldyB3KG51bGwpO3JldHVybiBnLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksZ30saWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oZyl7dmFyIHgseT1nO2Rve3RoaXMuc3BsaXQoeSx0aGlzLnRtcCkseD0oeT0oeT10''@;'; put 'put ''aGlzLmltdWxLKHkpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoeD50aGlzLm4pO3ZhciBDPXg8dGhpcy5uPy0xOnkudWNtcCh0aGlzLnApO3JldHVybiAwPT09Qz8oeS53b3Jkc1swXT0wLHkubGVuZ3RoPTEpOkM+MD95LmlzdWIodGhpcy5wKTp2b2lkIDAhPT15LnN0cmlw''@;'; put 'put ''P3kuc3RyaXAoKTp5Ll9zdHJpcCgpLHl9LGllLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLHkpe2cuaXVzaHJuKHRoaXMubiwwLHkpfSxpZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaW11bCh0aGlzLmspfSxWKHVlLGllKSx1ZS5wcm90b3R5cGUuc3BsaXQ9ZnVu''@;'; put 'put ''Y3Rpb24oZyx5KXtmb3IodmFyIHg9NDE5NDMwMyxDPU1hdGgubWluKGcubGVuZ3RoLDkpLFQ9MDtUPEM7VCsrKXkud29yZHNbVF09Zy53b3Jkc1tUXTtpZih5Lmxlbmd0aD1DLGcubGVuZ3RoPD05KXJldHVybiBnLndvcmRzWzBdPTAsdm9pZChnLmxlbmd0aD0xKTt2YXIgSD1nLndvcmRzWzld''@;'; put 'put ''O2Zvcih5LndvcmRzW3kubGVuZ3RoKytdPUgmeCxUPTEwO1Q8Zy5sZW5ndGg7VCsrKXt2YXIgaj0wfGcud29yZHNbVF07Zy53b3Jkc1tULTEwXT0oaiZ4KTw8NHxIPj4+MjIsSD1qfWcud29yZHNbVC0xMF09SD4+Pj0yMixnLmxlbmd0aC09MD09PUgmJmcubGVuZ3RoPjEwPzEwOjl9LHVlLnBy''@;'; put 'put ''b3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtnLndvcmRzW2cubGVuZ3RoXT0wLGcud29yZHNbZy5sZW5ndGgrMV09MCxnLmxlbmd0aCs9Mjtmb3IodmFyIHk9MCx4PTA7eDxnLmxlbmd0aDt4Kyspe3ZhciBDPTB8Zy53b3Jkc1t4XTtnLndvcmRzW3hdPTY3MTA4ODYzJih5Kz05NzcqQykseT02''@;'; put 'put ''NCpDKyh5LzY3MTA4ODY0fDApfXJldHVybiAwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmKGcubGVuZ3RoLS0sMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJmcubGVuZ3RoLS0pLGd9LFYoZ2UsaWUpLFYoX2UsaWUpLFYoVGUsaWUpLFRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtmb3Io''@;'; put 'put ''dmFyIHk9MCx4PTA7eDxnLmxlbmd0aDt4Kyspe3ZhciBDPTE5KigwfGcud29yZHNbeF0pK3ksVD02NzEwODg2MyZDO0M+Pj49MjYsZy53b3Jkc1t4XT1ULHk9Q31yZXR1cm4gMCE9PXkmJihnLndvcmRzW2cubGVuZ3RoKytdPXkpLGd9LHcuX3ByaW1lPWZ1bmN0aW9uKGcpe2lmKHJlW2ddKXJl''@;'; put 'put ''dHVybiByZVtnXTt2YXIgeTtpZigiazI1NiI9PT1nKXk9bmV3IHVlO2Vsc2UgaWYoInAyMjQiPT09Zyl5PW5ldyBnZTtlbHNlIGlmKCJwMTkyIj09PWcpeT1uZXcgX2U7ZWxzZXtpZigicDI1NTE5IiE9PWcpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrZyk7eT1uZXcgVGV9cmV0''@;'; put 'put ''dXJuIHJlW2ddPXkseX0sTWUucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscChnLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxNZS5wcm90b3R5cGUuX3ZlcmlmeTI9''@;'; put 'put ''ZnVuY3Rpb24oZyx5KXtwKCEoZy5uZWdhdGl2ZXx5Lm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwKGcucmVkJiZnLnJlZD09PXkucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LE1lLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGcpe3Jl''@;'; put 'put ''dHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShnKS5fZm9yY2VSZWQodGhpcyk6Zy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxNZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKGcpe3JldHVybiBnLmlzWmVybygpP2cuY2xvbmUoKTp0aGlzLm0uc3ViKGcpLl9mb3JjZVJl''@;'; put 'put ''ZCh0aGlzKX0sTWUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmFkZCh5KTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LE1lLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcseSl7''@;'; put 'put ''dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuaWFkZCh5KTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseH0sTWUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLnN1Yih5KTtyZXR1cm4geC5jbXBuKDApPDAmJngu''@;'; put 'put ''aWFkZCh0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxNZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmlzdWIoeSk7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4fSxNZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGcs''@;'; put 'put ''eSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoZyksdGhpcy5pbW9kKGcudXNobG4oeSkpfSxNZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcseSksdGhpcy5pbW9kKGcuaW11bCh5KSl9LE1lLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyx5KXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fdmVyaWZ5MihnLHkpLHRoaXMuaW1vZChnLm11bCh5KSl9LE1lLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltdWwoZyxnLmNsb25lKCkpfSxNZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm11bChnLGcpfSxNZS5wcm90b3R5''@;'; put 'put ''cGUuc3FydD1mdW5jdGlvbihnKXtpZihnLmlzWmVybygpKXJldHVybiBnLmNsb25lKCk7dmFyIHk9dGhpcy5tLmFuZGxuKDMpO2lmKHAoeSUyPT0xKSwzPT09eSl7dmFyIHg9dGhpcy5tLmFkZChuZXcgdygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhnLHgpfWZvcih2YXIgQz10aGlz''@;'; put 'put ''Lm0uc3VibigxKSxUPTA7IUMuaXNaZXJvKCkmJjA9PT1DLmFuZGxuKDEpOylUKyssQy5pdXNocm4oMSk7cCghQy5pc1plcm8oKSk7dmFyIEg9bmV3IHcoMSkudG9SZWQodGhpcyksaj1ILnJlZE5lZygpLEU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLG09dGhpcy5tLmJpdExlbmd0aCgpO2Zv''@;'; put 'put ''cihtPW5ldyB3KDIqbSptKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobSxFKS5jbXAoaik7KW0ucmVkSUFkZChqKTtmb3IodmFyIEE9dGhpcy5wb3cobSxDKSxhZT10aGlzLnBvdyhnLEMuYWRkbigxKS5pdXNocm4oMSkpLG5lPXRoaXMucG93KGcsQyksc2U9VDswIT09bmUuY21wKEgpOyl7''@;'; put 'put ''Zm9yKHZhciBDZT1uZSxVZT0wOzAhPT1DZS5jbXAoSCk7VWUrKylDZT1DZS5yZWRTcXIoKTtwKFVlPHNlKTt2YXIgSmU9dGhpcy5wb3coQSxuZXcgdygxKS5pdXNobG4oc2UtVWUtMSkpO2FlPWFlLnJlZE11bChKZSksQT1KZS5yZWRTcXIoKSxuZT1uZS5yZWRNdWwoQSksc2U9VWV9cmV0dXJu''@;'; put 'put ''IGFlfSxNZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXt2YXIgeT1nLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09eS5uZWdhdGl2ZT8oeS5uZWdhdGl2ZT0wLHRoaXMuaW1vZCh5KS5yZWROZWcoKSk6dGhpcy5pbW9kKHkpfSxNZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcseSl7aWYo''@;'; put 'put ''eS5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PXkuY21wbigxKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBDPW5ldyBBcnJheSgxNik7Q1swXT1uZXcgdygxKS50b1JlZCh0aGlzKSxDWzFdPWc7Zm9yKHZhciBUPTI7VDxDLmxlbmd0aDtUKyspQ1tUXT10aGlzLm11''@;'; put 'put ''bChDW1QtMV0sZyk7dmFyIEg9Q1swXSxqPTAsRT0wLG09eS5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW0mJihtPTI2KSxUPXkubGVuZ3RoLTE7VD49MDtULS0pe2Zvcih2YXIgQT15LndvcmRzW1RdLGFlPW0tMTthZT49MDthZS0tKXt2YXIgbmU9QT4+YWUmMTtIIT09Q1swXSYmKEg9dGhpcy5z''@;'; put 'put ''cXIoSCkpLDAhPT1uZXx8MCE9PWo/KGo8PD0xLGp8PW5lLCg0PT0rK0V8fDA9PT1UJiYwPT09YWUpJiYoSD10aGlzLm11bChILENbal0pLEU9MCxqPTApKTpFPTB9bT0yNn1yZXR1cm4gSH0sTWUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXt2YXIgeT1nLnVtb2QodGhpcy5tKTty''@;'; put 'put ''ZXR1cm4geT09PWc/eS5jbG9uZSgpOnl9LE1lLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgeT1nLmNsb25lKCk7cmV0dXJuIHkucmVkPW51bGwseX0sdy5tb250PWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgWmUoZyl9LFYoWmUsTWUpLFplLnByb3RvdHlwZS5jb252ZXJ0''@;'; put 'put ''VG89ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLnVzaGxuKHRoaXMuc2hpZnQpKX0sWmUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciB5PXRoaXMuaW1vZChnLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4geS5yZWQ9bnVsbCx5fSxaZS5wcm90b3R5cGUuaW11bD1m''@;'; put 'put ''dW5jdGlvbihnLHkpe2lmKGcuaXNaZXJvKCl8fHkuaXNaZXJvKCkpcmV0dXJuIGcud29yZHNbMF09MCxnLmxlbmd0aD0xLGc7dmFyIHg9Zy5pbXVsKHkpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIo''@;'; put 'put ''QykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LFplLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyx5KXtpZihnLmlzWmVybygpfHx5''@;'; put 'put ''LmlzWmVybygpKXJldHVybiBuZXcgdygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHg9Zy5tdWwoeSksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVy''@;'; put 'put ''biBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0sWmUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSku''@;'; put 'put ''X2ZvcmNlUmVkKHRoaXMpfX0oY2U9Yi5ubWQoY2UpLHRoaXMpfSw4ODc3OTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQ1MzEwKTtjZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIEkoKSYmISFTeW1ib2wudG9TdHJpbmdUYWd9fSw4ODc4ODpjZT0+eyJ1c2Ugc3RyaWN0Ijtj''@;'; put 'put ''ZS5leHBvcnRzPSExfSw4ODgwMDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDM5MjEwKSxfPWIoNzE5OTMpLHA9e307ZnVuY3Rpb24gVihQKXtJLmVxdWFsKFAubGVuZ3RoLDgsIkludmFsaWQgSVYgbGVuZ3RoIiksdGhpcy5pdj1uZXcgQXJyYXkoOCk7Zm9yKHZhciBGPTA7Rjx0''@;'; put 'put ''aGlzLml2Lmxlbmd0aDtGKyspdGhpcy5pdltGXT1QW0ZdfVguaW5zdGFudGlhdGU9ZnVuY3Rpb24gdyhQKXtmdW5jdGlvbiBGKE8pe1AuY2FsbCh0aGlzLE8pLHRoaXMuX2NiY0luaXQoKX1fKEYsUCk7Zm9yKHZhciBSPU9iamVjdC5rZXlzKHApLHo9MDt6PFIubGVuZ3RoO3orKyl7dmFyIE49''@;'; put 'put ''Ult6XTtGLnByb3RvdHlwZVtOXT1wW05dfXJldHVybiBGLmNyZWF0ZT1mdW5jdGlvbihLKXtyZXR1cm4gbmV3IEYoSyl9LEZ9LHAuX2NiY0luaXQ9ZnVuY3Rpb24oKXt2YXIgRj1uZXcgVih0aGlzLm9wdGlvbnMuaXYpO3RoaXMuX2NiY1N0YXRlPUZ9LHAuX3VwZGF0ZT1mdW5jdGlvbihGLFIs''@;'; put 'put ''eixOKXt2YXIgSz10aGlzLmNvbnN0cnVjdG9yLnN1cGVyXy5wcm90b3R5cGUsWj10aGlzLl9jYmNTdGF0ZS5pdjtpZigiZW5jcnlwdCI9PT10aGlzLnR5cGUpe2Zvcih2YXIgWT0wO1k8dGhpcy5ibG9ja1NpemU7WSsrKVpbWV1ePUZbUitZXTtmb3IoSy5fdXBkYXRlLmNhbGwodGhpcyxaLDAs''@;'; put 'put ''eixOKSxZPTA7WTx0aGlzLmJsb2NrU2l6ZTtZKyspWltZXT16W04rWV19ZWxzZXtmb3IoSy5fdXBkYXRlLmNhbGwodGhpcyxGLFIseixOKSxZPTA7WTx0aGlzLmJsb2NrU2l6ZTtZKyspeltOK1ldXj1aW1ldO2ZvcihZPTA7WTx0aGlzLmJsb2NrU2l6ZTtZKyspWltZXT1GW1IrWV19fX0sODg4''@;'; put 'put ''NjI6KGNlLFgsYik9Pnt2YXIgST1iKDM5Nzk5KSxfPWIoNDMzODgpLHA9Yig2MDUwMyksVj1iKDU5NTcxKSx3PWIoMTgyMTEpO2Z1bmN0aW9uIFIoTyxLLFope2lmKE89Ty50b0xvd2VyQ2FzZSgpLHBbT10pcmV0dXJuIF8uY3JlYXRlQ2lwaGVyaXYoTyxLLFopO2lmKFZbT10pcmV0dXJuIG5l''@;'; put 'put ''dyBJKHtrZXk6SyxpdjpaLG1vZGU6T30pO3Rocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpfWZ1bmN0aW9uIHooTyxLLFope2lmKE89Ty50b0xvd2VyQ2FzZSgpLHBbT10pcmV0dXJuIF8uY3JlYXRlRGVjaXBoZXJpdihPLEssWik7aWYoVltPXSlyZXR1cm4gbmV3IEko''@;'; put 'put ''e2tleTpLLGl2OlosbW9kZTpPLGRlY3J5cHQ6ITB9KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKX1YLmNyZWF0ZUNpcGhlcj1YLkNpcGhlcj1mdW5jdGlvbiBQKE8sSyl7dmFyIFosWTtpZihPPU8udG9Mb3dlckNhc2UoKSxwW09dKVo9cFtPXS5rZXksWT1wW09d''@;'; put 'put ''Lml2O2Vsc2V7aWYoIVZbT10pdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7Wj04KlZbT10ua2V5LFk9VltPXS5pdn12YXIgVz13KEssITEsWixZKTtyZXR1cm4gUihPLFcua2V5LFcuaXYpfSxYLmNyZWF0ZUNpcGhlcml2PVguQ2lwaGVyaXY9UixYLmNyZWF0ZURl''@;'; put 'put ''Y2lwaGVyPVguRGVjaXBoZXI9ZnVuY3Rpb24gRihPLEspe3ZhciBaLFk7aWYoTz1PLnRvTG93ZXJDYXNlKCkscFtPXSlaPXBbT10ua2V5LFk9cFtPXS5pdjtlbHNle2lmKCFWW09dKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO1o9OCpWW09dLmtleSxZPVZbT10u''@;'; put 'put ''aXZ9dmFyIFc9dyhLLCExLFosWSk7cmV0dXJuIHooTyxXLmtleSxXLml2KX0sWC5jcmVhdGVEZWNpcGhlcml2PVguRGVjaXBoZXJpdj16LFgubGlzdENpcGhlcnM9WC5nZXRDaXBoZXJzPWZ1bmN0aW9uIE4oKXtyZXR1cm4gT2JqZWN0LmtleXMoVikuY29uY2F0KF8uZ2V0Q2lwaGVycygpKX19''@;'; put 'put ''LDg4ODY3OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMzI2MzMpLF89Yig4NjY3NSksVj1iKDU4MDEyKSgibWF0Y2giKTtjZS5leHBvcnRzPWZ1bmN0aW9uKHcpe3ZhciBQO3JldHVybiBJKHcpJiYodm9pZCAwIT09KFA9d1tWXSk/ISFQOiJSZWdFeHAiPT09Xyh3KSl9fSw4OTM2''@;'; put 'put ''NjpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInZpIix7bW9udGhzOiJ0aFx4ZTFuZyAxX3RoXHhlMW5nIDJfdGhceGUxbmcgM190aFx4ZTFuZyA0X3RoXHhlMW5nIDVfdGhceGUxbmcgNl90aFx4ZTFuZyA3X3RoXHhlMW5nIDhfdGhc''@;'; put 'put ''eGUxbmcgOV90aFx4ZTFuZyAxMF90aFx4ZTFuZyAxMV90aFx4ZTFuZyAxMiIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiVGhnIDAxX1RoZyAwMl9UaGcgMDNfVGhnIDA0X1RoZyAwNV9UaGcgMDZfVGhnIDA3X1RoZyAwOF9UaGcgMDlfVGhnIDEwX1RoZyAxMV9UaGcgMTIiLnNwbGl0KCJfIiks''@;'; put 'put ''bW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiY2hcdTFlZTcgbmhcdTFlYWR0X3RoXHUxZWU5IGhhaV90aFx1MWVlOSBiYV90aFx1MWVlOSB0XHUwMWIwX3RoXHUxZWU5IG5cdTAxMDNtX3RoXHUxZWU5IHNceGUxdV90aFx1MWVlOSBiXHUxZWEzeSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1No''@;'; put 'put ''b3J0OiJDTl9UMl9UM19UNF9UNV9UNl9UNyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiQ05fVDJfVDNfVDRfVDVfVDZfVDciLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLG1lcmlkaWVtUGFyc2U6L3NhfGNoL2ksaXNQTTpmdW5jdGlvbihwKXtyZXR1cm4vXmNoJC9pLnRlc3Qo''@;'; put 'put ''cCl9LG1lcmlkaWVtOmZ1bmN0aW9uKHAsVix3KXtyZXR1cm4gcDwxMj93PyJzYSI6IlNBIjp3PyJjaCI6IkNIIn0sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBbblx1MDEwM21dIFlZWVkiLExMTDoiRCBNTU1NIFtu''@;'; put 'put ''XHUwMTAzbV0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFtuXHUwMTAzbV0gWVlZWSBISDptbSIsbDoiREQvTS9ZWVlZIixsbDoiRCBNTU0gWVlZWSIsbGxsOiJEIE1NTSBZWVlZIEhIOm1tIixsbGxsOiJkZGQsIEQgTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToi''@;'; put 'put ''W0hceGY0bSBuYXkgbFx4ZmFjXSBMVCIsbmV4dERheToiW05nXHhlMHkgbWFpIGxceGZhY10gTFQiLG5leHRXZWVrOiJkZGRkIFt0dVx1MWVhN24gdFx1MWVkYmkgbFx4ZmFjXSBMVCIsbGFzdERheToiW0hceGY0bSBxdWEgbFx4ZmFjXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3R1XHUxZWE3biB0''@;'; put 'put ''clx1MDFiMFx1MWVkYmMgbFx4ZmFjXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgdFx1MWVkYmkiLHBhc3Q6IiVzIHRyXHUwMWIwXHUxZWRiYyIsczoidlx4ZTBpIGdpXHhlMnkiLHNzOiIlZCBnaVx4ZTJ5IixtOiJtXHUxZWQ5dCBwaFx4ZmF0IixtbToiJWQg''@;'; put 'put ''cGhceGZhdCIsaDoibVx1MWVkOXQgZ2lcdTFlZGQiLGhoOiIlZCBnaVx1MWVkZCIsZDoibVx1MWVkOXQgbmdceGUweSIsZGQ6IiVkIG5nXHhlMHkiLHc6Im1cdTFlZDl0IHR1XHUxZWE3biIsd3c6IiVkIHR1XHUxZWE3biIsTToibVx1MWVkOXQgdGhceGUxbmciLE1NOiIlZCB0aFx4ZTFuZyIs''@;'; put 'put ''eToibVx1MWVkOXQgblx1MDEwM20iLHl5OiIlZCBuXHUwMTAzbSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0vLG9yZGluYWw6ZnVuY3Rpb24ocCl7cmV0dXJuIHB9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDg5NDcyOihjZSxYLGIpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBJPS9Qcm9jLVR5cGU6IDQsRU5DUllQVEVEW1xuXHJdK0RFSy1JbmZvOiBBRVMtKCg/OjEyOCl8KD86MTkyKXwoPzoyNTYpKS1DQkMsKFswLTlBLUhdKylbXG5ccl0rKFswLTlBLXpcblxyKy89XSspW1xuXHJdKy9tLF89L14tLS0tLUJFR0lOICgoPzouKj8gS0VZKXxDRVJUSUZJQ0FU''@;'; put 'put ''RSktLS0tLS9tLHA9L14tLS0tLUJFR0lOICgoPzouKj8gS0VZKXxDRVJUSUZJQ0FURSktLS0tLShbMC05QS16XG5ccisvPV0rKS0tLS0tRU5EIFwxLS0tLS0kL20sVj1iKDE4MjExKSx3PWIoNDMzODgpLFA9YigyNzA1NCkuQnVmZmVyO2NlLmV4cG9ydHM9ZnVuY3Rpb24oRixSKXt2YXIgTyx6''@;'; put 'put ''PUYudG9TdHJpbmcoKSxOPXoubWF0Y2goSSk7aWYoTil7dmFyIFo9ImFlcyIrTlsxXSxZPVAuZnJvbShOWzJdLCJoZXgiKSxXPVAuZnJvbShOWzNdLnJlcGxhY2UoL1tcclxuXS9nLCIiKSwiYmFzZTY0IikscT1WKFIsWS5zbGljZSgwLDgpLHBhcnNlSW50KE5bMV0sMTApKS5rZXksZWU9W10s''@;'; put 'put ''Sj13LmNyZWF0ZURlY2lwaGVyaXYoWixxLFkpO2VlLnB1c2goSi51cGRhdGUoVykpLGVlLnB1c2goSi5maW5hbCgpKSxPPVAuY29uY2F0KGVlKX1lbHNle3ZhciBLPXoubWF0Y2gocCk7Tz1QLmZyb20oS1syXS5yZXBsYWNlKC9bXHJcbl0vZywiIiksImJhc2U2NCIpfXJldHVybnt0YWc6ei5t''@;'; put 'put ''YXRjaChfKVsxXSxkYXRhOk99fX0sODk2MDY6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSxfKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcChCLGcpe2lmKCFCKXRocm93IG5ldyBFcnJvcihnfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIFYoQixnKXtCLnN1cGVyXz1nO3ZhciB5''@;'; put 'put ''PWZ1bmN0aW9uKCl7fTt5LnByb3RvdHlwZT1nLnByb3RvdHlwZSxCLnByb3RvdHlwZT1uZXcgeSxCLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1CfWZ1bmN0aW9uIHcoQixnLHkpe2lmKHcuaXNCTihCKSlyZXR1cm4gQjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3Ro''@;'; put 'put ''PTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09QiYmKCgibGUiPT09Z3x8ImJlIj09PWcpJiYoeT1nLGc9MTApLHRoaXMuX2luaXQoQnx8MCxnfHwxMCx5fHwiYmUiKSl9dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0kuZXhwb3J0cz13Ol8uQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7UD10''@;'; put 'put ''eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Yig3Nzk2NSkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKEIsZyl7dmFyIHk9Qi5jaGFyQ29kZUF0KGcpO3JldHVybiB5Pj02NSYmeTw9NzA/eS01NTp5Pj05NyYmeTw9MTAyP3ktODc6eS00''@;'; put 'put ''OCYxNX1mdW5jdGlvbiBSKEIsZyx5KXt2YXIgeD1GKEIseSk7cmV0dXJuIHktMT49ZyYmKHh8PUYoQix5LTEpPDw0KSx4fWZ1bmN0aW9uIHooQixnLHkseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbihCLmxlbmd0aCx5KSxIPWc7SDxUO0grKyl7dmFyIGo9Qi5jaGFyQ29kZUF0KEgpLTQ4O0Mq''@;'; put 'put ''PXgsQys9aj49NDk/ai00OSsxMDpqPj0xNz9qLTE3KzEwOmp9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKGcpe3JldHVybiBnIGluc3RhbmNlb2Ygd3x8bnVsbCE9PWcmJiJvYmplY3QiPT10eXBlb2YgZyYmZy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJy''@;'; put 'put ''YXkoZy53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKGcseSl7cmV0dXJuIGcuY21wKHkpPjA/Zzp5fSx3Lm1pbj1mdW5jdGlvbihnLHkpe3JldHVybiBnLmNtcCh5KTwwP2c6eX0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oZyx5LHgpe2lmKCJudW1iZXIiPT10eXBlb2YgZylyZXR1cm4gdGhp''@;'; put 'put ''cy5faW5pdE51bWJlcihnLHkseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0QXJyYXkoZyx5LHgpOyJoZXgiPT09eSYmKHk9MTYpLHAoeT09PSgwfHkpJiZ5Pj0yJiZ5PD0zNik7dmFyIEM9MDsiLSI9PT0oZz1nLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIp''@;'; put 'put ''KVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8Zy5sZW5ndGgmJigxNj09PXk/dGhpcy5fcGFyc2VIZXgoZyxDLHgpOih0aGlzLl9wYXJzZUJhc2UoZyx5LEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCkseSx4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJl''@;'; put 'put ''cj1mdW5jdGlvbihnLHkseCl7ZzwwJiYodGhpcy5uZWdhdGl2ZT0xLGc9LWcpLGc8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmddLHRoaXMubGVuZ3RoPTEpOmc8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlz''@;'; put 'put ''Lmxlbmd0aD0yKToocChnPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLHkseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9''@;'; put 'put ''ZnVuY3Rpb24oZyx5LHgpe2lmKHAoIm51bWJlciI9PXR5cGVvZiBnLmxlbmd0aCksZy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoZy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5n''@;'; put 'put ''dGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxILGo9MDtpZigiYmUiPT09eClmb3IoQz1nLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KEg9Z1tDXXxnW0MtMV08PDh8Z1tDLTJdPDwxNik8PGomNjcxMDg4NjMsdGhp''@;'; put 'put ''cy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8Zy5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oSD1nW0NdfGdbQysxXTw8OHxnW0MrMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndv''@;'; put 'put ''cmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihnLHkseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChnLmxlbmd0aC15KS82KSx0aGlzLndvcmRzPW5ldyBB''@;'; put 'put ''cnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9Zy5sZW5ndGgtMTtDPj15O0MtPTIpaj1SKGcseSxDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhU''@;'; put 'put ''LT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0oZy5sZW5ndGgteSklMj09MD95KzE6eTtDPGcubGVuZ3RoO0MrPTIpaj1SKGcseSxDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYp''@;'; put 'put ''OlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGcseSx4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj15KUMrKztDLS0sVD1UL3l8MDtmb3IodmFyIEg9Zy5sZW5ndGgteCxqPUglQyxF''@;'; put 'put ''PU1hdGgubWluKEgsSC1qKSt4LG09MCxBPXg7QTxFO0ErPUMpbT16KGcsQSxBK0MseSksdGhpcy5pbXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09ail7dmFyIGFlPTE7Zm9yKG09eihnLEEsZy5sZW5ndGgseSks''@;'; put 'put ''QT0wO0E8ajtBKyspYWUqPXk7dGhpcy5pbXVsbihhZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGcpe2cud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtm''@;'; put 'put ''b3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoO3krKylnLndvcmRzW3ldPXRoaXMud29yZHNbeV07Zy5sZW5ndGg9dGhpcy5sZW5ndGgsZy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGcucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBnPW5ldyB3KG51bGwpO3Jl''@;'; put 'put ''dHVybiB0aGlzLmNvcHkoZyksZ30sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGc7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9''@;'; put 'put ''PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhp''@;'; put 'put ''c30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAw''@;'; put 'put ''MDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAiXSxPPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0''@;'; put 'put ''NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUx''@;'; put 'put ''MTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gWShCLGcseSl7eS5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkIubmVnYXRpdmU7dmFyIHg9Qi5sZW5ndGgrZy5sZW5ndGh8MDt5Lmxlbmd0aD14LHg9eC0xfDA7dmFy''@;'; put 'put ''IEM9MHxCLndvcmRzWzBdLFQ9MHxnLndvcmRzWzBdLEg9QypULEU9SC82NzEwODg2NHwwO3kud29yZHNbMF09NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LGFlPTY3MTA4ODYzJkUsbmU9TWF0aC5taW4obSxnLmxlbmd0aC0xKSxzZT1NYXRoLm1heCgw''@;'; put 'put ''LG0tQi5sZW5ndGgrMSk7c2U8PW5lO3NlKyspQSs9KEg9KEM9MHxCLndvcmRzW20tc2V8MF0pKihUPTB8Zy53b3Jkc1tzZV0pK2FlKS82NzEwODg2NHwwLGFlPTY3MTA4ODYzJkg7eS53b3Jkc1ttXT0wfGFlLEU9MHxBfXJldHVybiAwIT09RT95LndvcmRzW21dPTB8RTp5Lmxlbmd0aC0tLHku''@;'; put 'put ''c3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihnLHkpe3ZhciB4O2lmKHk9MHx5fHwxLDE2PT09KGc9Z3x8MTApfHwiaGV4Ij09PWcpe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9dGhpcy53b3Jkc1tIXSxFPSgxNjc3NzIxNSYo''@;'; put 'put ''ajw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9aj4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LEgtLSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGgleSE9MDspeD0i''@;'; put 'put ''MCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKGc9PT0oMHxnKSYmZz49MiYmZzw9MzYpe3ZhciBtPU9bZ10sQT1LW2ddO3g9IiI7dmFyIGFlPXRoaXMuY2xvbmUoKTtmb3IoYWUubmVnYXRpdmU9MDshYWUuaXNaZXJvKCk7KXt2YXIgbmU9YWUubW9kbihBKS50''@;'; put 'put ''b1N0cmluZyhnKTt4PShhZT1hZS5pZGl2bihBKSkuaXNaZXJvKCk/bmUreDpOW20tbmUubGVuZ3RoXStuZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGgleSE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fXAoITEsIkJhc2Ug''@;'; put 'put ''c2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgZz10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Zys9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJd''@;'; put 'put ''P2crPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZwKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tZzpnfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHAodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAsZyx5KX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtl''@;'; put 'put ''KEFycmF5LGcseSl9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGcseSx4KXt2YXIgQz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7cChDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIikscChUPjAsIlJlcXVlc3RlZCBhcnJh''@;'; put 'put ''eSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxtLEg9ImxlIj09PXksaj1uZXcgZyhUKSxBPXRoaXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW21dPUU7Zm9yKDttPFQ7bSsrKWpbbV09MH1lbHNle2Zv''@;'; put 'put ''cihtPTA7bTxULUM7bSsrKWpbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oZyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoZyl9''@;'; put 'put ''OmZ1bmN0aW9uKGcpe3ZhciB5PWcseD0wO3JldHVybiB5Pj00MDk2JiYoeCs9MTMseT4+Pj0xMykseT49NjQmJih4Kz03LHk+Pj49NykseT49OCYmKHgrPTQseT4+Pj00KSx5Pj0yJiYoeCs9Mix5Pj4+PTIpLHgreX0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGcpe2lmKDA9PT1n''@;'; put 'put ''KXJldHVybiAyNjt2YXIgeT1nLHg9MDtyZXR1cm4hKDgxOTEmeSkmJih4Kz0xMyx5Pj4+PTEzKSwhKDEyNyZ5KSYmKHgrPTcseT4+Pj03KSwhKDE1JnkpJiYoeCs9NCx5Pj4+PTQpLCEoMyZ5KSYmKHgrPTIseT4+Pj0yKSwhKDEmeSkmJngrKyx4fSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVu''@;'; put 'put ''Y3Rpb24oKXt2YXIgeT10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKSt5fSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBnPTAseT0wO3k8dGhp''@;'; put 'put ''cy5sZW5ndGg7eSsrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW3ldKTtpZihnKz14LDI2IT09eClicmVha31yZXR1cm4gZ30sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUu''@;'; put 'put ''dG9Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGcpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMudGVzdG4oZy0xKT90aGlzLm5vdG4oZykuaWFkZG4oMSku''@;'; put 'put ''aW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8Zy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIHk9MDt5PGcubGVuZ3RoO3krKyl0aGlzLndvcmRzW3ld''@;'; put 'put ''PXRoaXMud29yZHNbeV18Zy53b3Jkc1t5XTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1b3IoZyl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlz''@;'; put 'put ''Lmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGcpOmcuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoZyk6Zy5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90''@;'; put 'put ''eXBlLml1YW5kPWZ1bmN0aW9uKGcpe3ZhciB5O3k9dGhpcy5sZW5ndGg+Zy5sZW5ndGg/Zzp0aGlzO2Zvcih2YXIgeD0wO3g8eS5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZnLndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0aD15Lmxlbmd0aCx0aGlzLnN0cmlwKCl9''@;'; put 'put ''LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1YW5kKGcpfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGcpOmcuY2xv''@;'; put 'put ''bmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoZyk6Zy5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihnKXt2YXIgeSx4O3RoaXMubGVu''@;'; put 'put ''Z3RoPmcubGVuZ3RoPyh5PXRoaXMseD1nKTooeT1nLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT15LndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9PXkpZm9yKDtDPHkubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXkud29yZHNbQ107cmV0dXJu''@;'; put 'put ''IHRoaXMubGVuZ3RoPXkubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoZyl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+''@;'; put 'put ''Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZyk6Zy5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihnKTpnLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBl''@;'; put 'put ''Lmlub3RuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT0wfE1hdGguY2VpbChnLzI2KSx4PWclMjY7dGhpcy5fZXhwYW5kKHkpLHg+MCYmeS0tO2Zvcih2YXIgQz0wO0M8eTtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tDXTtyZXR1''@;'; put 'put ''cm4geD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oZyl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZyx5KXtwKCJudW1i''@;'; put 'put ''ZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHg9Zy8yNnwwLEM9ZyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT15P3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRzW3hdJn4oMTw8QyksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcp''@;'; put 'put ''e3ZhciB5LHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx5PXRoaXMuaXN1YihnKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiBn''@;'; put 'put ''Lm5lZ2F0aXZlPTAseT10aGlzLmlzdWIoZyksZy5uZWdhdGl2ZT0xLHkuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KHg9dGhpcyxDPWcpOih4PWcsQz10aGlzKTtmb3IodmFyIFQ9MCxIPTA7SDxDLmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoeT0oMHx4Lndv''@;'; put 'put ''cmRzW0hdKSsoMHxDLndvcmRzW0hdKStUKSxUPXk+Pj4yNjtmb3IoOzAhPT1UJiZIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJih5PSgwfHgud29yZHNbSF0pK1QpLFQ9eT4+PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1UKXRoaXMud29yZHNbdGhpcy5sZW5n''@;'; put 'put ''dGhdPVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7SDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT14LndvcmRzW0hdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyl7dmFyIHk7cmV0dXJuIDAhPT1nLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdh''@;'; put 'put ''dGl2ZT8oZy5uZWdhdGl2ZT0wLHk9dGhpcy5zdWIoZyksZy5uZWdhdGl2ZV49MSx5KTowPT09Zy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCx5PWcuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSx5KTp0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25l''@;'; put 'put ''KCkuaWFkZChnKTpnLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnKXtpZigwIT09Zy5uZWdhdGl2ZSl7Zy5uZWdhdGl2ZT0wO3ZhciB5PXRoaXMuaWFkZChnKTtyZXR1cm4gZy5uZWdhdGl2ZT0xLHkuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRp''@;'; put 'put ''dmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIEMsVCx4PXRoaXMuY21wKGcpO2lmKDA9PT14KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt4PjA/''@;'; put 'put ''KEM9dGhpcyxUPWcpOihDPWcsVD10aGlzKTtmb3IodmFyIEg9MCxqPTA7ajxULmxlbmd0aDtqKyspSD0oeT0oMHxDLndvcmRzW2pdKS0oMHxULndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZ5O2Zvcig7MCE9PUgmJmo8Qy5sZW5ndGg7aisrKUg9KHk9KDB8Qy53b3Jk''@;'; put 'put ''c1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmeTtpZigwPT09SCYmajxDLmxlbmd0aCYmQyE9PXRoaXMpZm9yKDtqPEMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPUMud29yZHNbal07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGopLEMhPT10aGlz''@;'; put 'put ''JiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoZyl9O3ZhciBXPWZ1bmN0aW9uKGcseSx4KXt2YXIgRSxtLEEsQz1nLndvcmRzLFQ9eS53b3JkcyxIPXgud29yZHMsaj0wLGFlPTB8Q1sw''@;'; put 'put ''XSxuZT04MTkxJmFlLHNlPWFlPj4+MTMsQ2U9MHxDWzFdLFVlPTgxOTEmQ2UsSmU9Q2U+Pj4xMyxpdD0wfENbMl0seGU9ODE5MSZpdCx5ZT1pdD4+PjEzLEtlPTB8Q1szXSxqZT04MTkxJktlLGtlPUtlPj4+MTMsSGU9MHxDWzRdLExlPTgxOTEmSGUsUmU9SGU+Pj4xMyxWZT0wfENbNV0sQWU9''@;'; put 'put ''ODE5MSZWZSxEZT1WZT4+PjEzLF90PTB8Q1s2XSxydD04MTkxJl90LFFlPV90Pj4+MTMsc249MHxDWzddLHZ0PTgxOTEmc24sU3Q9c24+Pj4xMyxlbj0wfENbOF0sdXQ9ODE5MSZlbixYZT1lbj4+PjEzLHR0PTB8Q1s5XSxJZT04MTkxJnR0LGF0PXR0Pj4+MTMsdW49MHxUWzBdLEl0PTgxOTEm''@;'; put 'put ''dW4sUnQ9dW4+Pj4xMyxyaT0wfFRbMV0sYW49ODE5MSZyaSxsbj1yaT4+PjEzLG5pPTB8VFsyXSxobj04MTkxJm5pLGh0PW5pPj4+MTMsUnI9MHxUWzNdLEJ0PTgxOTEmUnIsQXQ9UnI+Pj4xMyxGbj0wfFRbNF0sc3Q9ODE5MSZGbixadD1Gbj4+PjEzLFFyPTB8VFs1XSxZZT04MTkxJlFyLFR0''@;'; put 'put ''PVFyPj4+MTMscnI9MHxUWzZdLGZ0PTgxOTEmcnIsTXQ9cnI+Pj4xMyxabj0wfFRbN10sbm49ODE5MSZabixXdD1abj4+PjEzLGRpPTB8VFs4XSxkbj04MTkxJmRpLG1uPWRpPj4+MTMscGk9MHxUWzldLGZuPTgxOTEmcGksdG49cGk+Pj4xMzt4Lm5lZ2F0aXZlPWcubmVnYXRpdmVeeS5uZWdh''@;'; put 'put ''dGl2ZSx4Lmxlbmd0aD0xOTt2YXIgY2E9KGorKEU9TWF0aC5pbXVsKG5lLEl0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChuZSxSdCkpK01hdGguaW11bChzZSxJdCl8MCkpPDwxMyl8MDtqPSgoQT1NYXRoLmltdWwoc2UsUnQpKSsobT4+PjEzKXwwKSsoY2E+Pj4yNil8MCxjYSY9Njcx''@;'; put 'put ''MDg4NjMsRT1NYXRoLmltdWwoVWUsSXQpLG09KG09TWF0aC5pbXVsKFVlLFJ0KSkrTWF0aC5pbXVsKEplLEl0KXwwLEE9TWF0aC5pbXVsKEplLFJ0KTt2YXIgX2k9KGorKEU9RStNYXRoLmltdWwobmUsYW4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxsbil8MCkrTWF0aC5p''@;'; put 'put ''bXVsKHNlLGFuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGxuKXwwKSsobT4+PjEzKXwwKSsoX2k+Pj4yNil8MCxfaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeGUsSXQpLG09KG09TWF0aC5pbXVsKHhlLFJ0KSkrTWF0aC5pbXVsKHllLEl0KXwwLEE9TWF0aC5pbXVsKHllLFJ0''@;'; put 'put ''KSxFPUUrTWF0aC5pbXVsKFVlLGFuKXwwLG09KG09bStNYXRoLmltdWwoVWUsbG4pfDApK01hdGguaW11bChKZSxhbil8MCxBPUErTWF0aC5pbXVsKEplLGxuKXwwO3ZhciB2cj0oaisoRT1FK01hdGguaW11bChuZSxobil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGh0KXww''@;'; put 'put ''KStNYXRoLmltdWwoc2UsaG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsaHQpfDApKyhtPj4+MTMpfDApKyh2cj4+PjI2KXwwLHZyJj02NzEwODg2MyxFPU1hdGguaW11bChqZSxJdCksbT0obT1NYXRoLmltdWwoamUsUnQpKStNYXRoLmltdWwoa2UsSXQpfDAsQT1NYXRoLmlt''@;'; put 'put ''dWwoa2UsUnQpLEU9RStNYXRoLmltdWwoeGUsYW4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxsbil8MCkrTWF0aC5pbXVsKHllLGFuKXwwLEE9QStNYXRoLmltdWwoeWUsbG4pfDAsRT1FK01hdGguaW11bChVZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGh0KXwwKStNYXRoLmltdWwoSmUs''@;'; put 'put ''aG4pfDAsQT1BK01hdGguaW11bChKZSxodCl8MDt2YXIgWGk9KGorKEU9RStNYXRoLmltdWwobmUsQnQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxBdCl8MCkrTWF0aC5pbXVsKHNlLEJ0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLEF0KXwwKSsobT4+PjEz''@;'; put 'put ''KXwwKSsoWGk+Pj4yNil8MCxYaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTGUsSXQpLG09KG09TWF0aC5pbXVsKExlLFJ0KSkrTWF0aC5pbXVsKFJlLEl0KXwwLEE9TWF0aC5pbXVsKFJlLFJ0KSxFPUUrTWF0aC5pbXVsKGplLGFuKXwwLG09KG09bStNYXRoLmltdWwoamUsbG4pfDApK01hdGgu''@;'; put 'put ''aW11bChrZSxhbil8MCxBPUErTWF0aC5pbXVsKGtlLGxuKXwwLEU9RStNYXRoLmltdWwoeGUsaG4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxodCl8MCkrTWF0aC5pbXVsKHllLGhuKXwwLEE9QStNYXRoLmltdWwoeWUsaHQpfDAsRT1FK01hdGguaW11bChVZSxCdCl8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUsQnQpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MDt2YXIgUWk9KGorKEU9RStNYXRoLmltdWwobmUsc3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxadCl8MCkrTWF0aC5pbXVsKHNlLHN0KXwwKSk8PDEzKXwwO2o9KChBPUEr''@;'; put 'put ''TWF0aC5pbXVsKHNlLFp0KXwwKSsobT4+PjEzKXwwKSsoUWk+Pj4yNil8MCxRaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoQWUsSXQpLG09KG09TWF0aC5pbXVsKEFlLFJ0KSkrTWF0aC5pbXVsKERlLEl0KXwwLEE9TWF0aC5pbXVsKERlLFJ0KSxFPUUrTWF0aC5pbXVsKExlLGFuKXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwoTGUsbG4pfDApK01hdGguaW11bChSZSxhbil8MCxBPUErTWF0aC5pbXVsKFJlLGxuKXwwLEU9RStNYXRoLmltdWwoamUsaG4pfDAsbT0obT1tK01hdGguaW11bChqZSxodCl8MCkrTWF0aC5pbXVsKGtlLGhuKXwwLEE9QStNYXRoLmltdWwoa2UsaHQpfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bCh4ZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLEF0KXwwKStNYXRoLmltdWwoeWUsQnQpfDAsQT1BK01hdGguaW11bCh5ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHN0KXwwLG09KG09bStNYXRoLmltdWwoVWUsWnQpfDApK01hdGguaW11bChKZSxzdCl8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KEplLFp0KXwwO3ZhciBWaT0oaisoRT1FK01hdGguaW11bChuZSxZZSl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLFR0KXwwKStNYXRoLmltdWwoc2UsWWUpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVHQpfDApKyhtPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZp''@;'; put 'put ''Jj02NzEwODg2MyxFPU1hdGguaW11bChydCxJdCksbT0obT1NYXRoLmltdWwocnQsUnQpKStNYXRoLmltdWwoUWUsSXQpfDAsQT1NYXRoLmltdWwoUWUsUnQpLEU9RStNYXRoLmltdWwoQWUsYW4pfDAsbT0obT1tK01hdGguaW11bChBZSxsbil8MCkrTWF0aC5pbXVsKERlLGFuKXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoRGUsbG4pfDAsRT1FK01hdGguaW11bChMZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKExlLGh0KXwwKStNYXRoLmltdWwoUmUsaG4pfDAsQT1BK01hdGguaW11bChSZSxodCl8MCxFPUUrTWF0aC5pbXVsKGplLEJ0KXwwLG09KG09bStNYXRoLmltdWwoamUsQXQpfDApK01hdGgu''@;'; put 'put ''aW11bChrZSxCdCl8MCxBPUErTWF0aC5pbXVsKGtlLEF0KXwwLEU9RStNYXRoLmltdWwoeGUsc3QpfDAsbT0obT1tK01hdGguaW11bCh4ZSxadCl8MCkrTWF0aC5pbXVsKHllLHN0KXwwLEE9QStNYXRoLmltdWwoeWUsWnQpfDAsRT1FK01hdGguaW11bChVZSxZZSl8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKFVlLFR0KXwwKStNYXRoLmltdWwoSmUsWWUpfDAsQT1BK01hdGguaW11bChKZSxUdCl8MDt2YXIgZWk9KGorKEU9RStNYXRoLmltdWwobmUsZnQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxNdCl8MCkrTWF0aC5pbXVsKHNlLGZ0KXwwKSk8PDEzKXwwO2o9KChBPUEr''@;'; put 'put ''TWF0aC5pbXVsKHNlLE10KXwwKSsobT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwodnQsSXQpLG09KG09TWF0aC5pbXVsKHZ0LFJ0KSkrTWF0aC5pbXVsKFN0LEl0KXwwLEE9TWF0aC5pbXVsKFN0LFJ0KSxFPUUrTWF0aC5pbXVsKHJ0LGFuKXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwocnQsbG4pfDApK01hdGguaW11bChRZSxhbil8MCxBPUErTWF0aC5pbXVsKFFlLGxuKXwwLEU9RStNYXRoLmltdWwoQWUsaG4pfDAsbT0obT1tK01hdGguaW11bChBZSxodCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLEE9QStNYXRoLmltdWwoRGUsaHQpfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bChMZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKExlLEF0KXwwKStNYXRoLmltdWwoUmUsQnQpfDAsQT1BK01hdGguaW11bChSZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGplLHN0KXwwLG09KG09bStNYXRoLmltdWwoamUsWnQpfDApK01hdGguaW11bChrZSxzdCl8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KGtlLFp0KXwwLEU9RStNYXRoLmltdWwoeGUsWWUpfDAsbT0obT1tK01hdGguaW11bCh4ZSxUdCl8MCkrTWF0aC5pbXVsKHllLFllKXwwLEE9QStNYXRoLmltdWwoeWUsVHQpfDAsRT1FK01hdGguaW11bChVZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLE10KXwwKStNYXRoLmltdWwoSmUs''@;'; put 'put ''ZnQpfDAsQT1BK01hdGguaW11bChKZSxNdCl8MDt2YXIgdWE9KGorKEU9RStNYXRoLmltdWwobmUsbm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxXdCl8MCkrTWF0aC5pbXVsKHNlLG5uKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFd0KXwwKSsobT4+PjEz''@;'; put 'put ''KXwwKSsodWE+Pj4yNil8MCx1YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwodXQsSXQpLG09KG09TWF0aC5pbXVsKHV0LFJ0KSkrTWF0aC5pbXVsKFhlLEl0KXwwLEE9TWF0aC5pbXVsKFhlLFJ0KSxFPUUrTWF0aC5pbXVsKHZ0LGFuKXwwLG09KG09bStNYXRoLmltdWwodnQsbG4pfDApK01hdGgu''@;'; put 'put ''aW11bChTdCxhbil8MCxBPUErTWF0aC5pbXVsKFN0LGxuKXwwLEU9RStNYXRoLmltdWwocnQsaG4pfDAsbT0obT1tK01hdGguaW11bChydCxodCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLEE9QStNYXRoLmltdWwoUWUsaHQpfDAsRT1FK01hdGguaW11bChBZSxCdCl8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKEFlLEF0KXwwKStNYXRoLmltdWwoRGUsQnQpfDAsQT1BK01hdGguaW11bChEZSxBdCl8MCxFPUUrTWF0aC5pbXVsKExlLHN0KXwwLG09KG09bStNYXRoLmltdWwoTGUsWnQpfDApK01hdGguaW11bChSZSxzdCl8MCxBPUErTWF0aC5pbXVsKFJlLFp0KXwwLEU9RStNYXRoLmltdWwoamUs''@;'; put 'put ''WWUpfDAsbT0obT1tK01hdGguaW11bChqZSxUdCl8MCkrTWF0aC5pbXVsKGtlLFllKXwwLEE9QStNYXRoLmltdWwoa2UsVHQpfDAsRT1FK01hdGguaW11bCh4ZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLE10KXwwKStNYXRoLmltdWwoeWUsZnQpfDAsQT1BK01hdGguaW11bCh5ZSxNdCl8''@;'; put 'put ''MCxFPUUrTWF0aC5pbXVsKFVlLG5uKXwwLG09KG09bStNYXRoLmltdWwoVWUsV3QpfDApK01hdGguaW11bChKZSxubil8MCxBPUErTWF0aC5pbXVsKEplLFd0KXwwO3ZhciBSaT0oaisoRT1FK01hdGguaW11bChuZSxkbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLG1uKXww''@;'; put 'put ''KStNYXRoLmltdWwoc2UsZG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsbW4pfDApKyhtPj4+MTMpfDApKyhSaT4+PjI2KXwwLFJpJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxJdCksbT0obT1NYXRoLmltdWwoSWUsUnQpKStNYXRoLmltdWwoYXQsSXQpfDAsQT1NYXRoLmlt''@;'; put 'put ''dWwoYXQsUnQpLEU9RStNYXRoLmltdWwodXQsYW4pfDAsbT0obT1tK01hdGguaW11bCh1dCxsbil8MCkrTWF0aC5pbXVsKFhlLGFuKXwwLEE9QStNYXRoLmltdWwoWGUsbG4pfDAsRT1FK01hdGguaW11bCh2dCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LGh0KXwwKStNYXRoLmltdWwoU3Qs''@;'; put 'put ''aG4pfDAsQT1BK01hdGguaW11bChTdCxodCl8MCxFPUUrTWF0aC5pbXVsKHJ0LEJ0KXwwLG09KG09bStNYXRoLmltdWwocnQsQXQpfDApK01hdGguaW11bChRZSxCdCl8MCxBPUErTWF0aC5pbXVsKFFlLEF0KXwwLEU9RStNYXRoLmltdWwoQWUsc3QpfDAsbT0obT1tK01hdGguaW11bChBZSxa''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKERlLHN0KXwwLEE9QStNYXRoLmltdWwoRGUsWnQpfDAsRT1FK01hdGguaW11bChMZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKExlLFR0KXwwKStNYXRoLmltdWwoUmUsWWUpfDAsQT1BK01hdGguaW11bChSZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGplLGZ0KXwwLG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoamUsTXQpfDApK01hdGguaW11bChrZSxmdCl8MCxBPUErTWF0aC5pbXVsKGtlLE10KXwwLEU9RStNYXRoLmltdWwoeGUsbm4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxXdCl8MCkrTWF0aC5pbXVsKHllLG5uKXwwLEE9QStNYXRoLmltdWwoeWUsV3QpfDAsRT1FK01h''@;'; put 'put ''dGguaW11bChVZSxkbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLG1uKXwwKStNYXRoLmltdWwoSmUsZG4pfDAsQT1BK01hdGguaW11bChKZSxtbil8MDt2YXIgRGE9KGorKEU9RStNYXRoLmltdWwobmUsZm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSx0bil8MCkrTWF0aC5p''@;'; put 'put ''bXVsKHNlLGZuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHRuKXwwKSsobT4+PjEzKXwwKSsoRGE+Pj4yNil8MCxEYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsYW4pLG09KG09TWF0aC5pbXVsKEllLGxuKSkrTWF0aC5pbXVsKGF0LGFuKXwwLEE9TWF0aC5pbXVsKGF0LGxu''@;'; put 'put ''KSxFPUUrTWF0aC5pbXVsKHV0LGhuKXwwLG09KG09bStNYXRoLmltdWwodXQsaHQpfDApK01hdGguaW11bChYZSxobil8MCxBPUErTWF0aC5pbXVsKFhlLGh0KXwwLEU9RStNYXRoLmltdWwodnQsQnQpfDAsbT0obT1tK01hdGguaW11bCh2dCxBdCl8MCkrTWF0aC5pbXVsKFN0LEJ0KXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoU3QsQXQpfDAsRT1FK01hdGguaW11bChydCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LFp0KXwwKStNYXRoLmltdWwoUWUsc3QpfDAsQT1BK01hdGguaW11bChRZSxadCl8MCxFPUUrTWF0aC5pbXVsKEFlLFllKXwwLG09KG09bStNYXRoLmltdWwoQWUsVHQpfDApK01h''@;'; put 'put ''dGguaW11bChEZSxZZSl8MCxBPUErTWF0aC5pbXVsKERlLFR0KXwwLEU9RStNYXRoLmltdWwoTGUsZnQpfDAsbT0obT1tK01hdGguaW11bChMZSxNdCl8MCkrTWF0aC5pbXVsKFJlLGZ0KXwwLEE9QStNYXRoLmltdWwoUmUsTXQpfDAsRT1FK01hdGguaW11bChqZSxubil8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKGplLFd0KXwwKStNYXRoLmltdWwoa2Usbm4pfDAsQT1BK01hdGguaW11bChrZSxXdCl8MCxFPUUrTWF0aC5pbXVsKHhlLGRuKXwwLG09KG09bStNYXRoLmltdWwoeGUsbW4pfDApK01hdGguaW11bCh5ZSxkbil8MCxBPUErTWF0aC5pbXVsKHllLG1uKXwwO3ZhciBoaT0oaisoRT1F''@;'; put 'put ''K01hdGguaW11bChVZSxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLHRuKXwwKStNYXRoLmltdWwoSmUsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSmUsdG4pfDApKyhtPj4+MTMpfDApKyhoaT4+PjI2KXwwLGhpJj02NzEwODg2MyxFPU1hdGguaW11bChJ''@;'; put 'put ''ZSxobiksbT0obT1NYXRoLmltdWwoSWUsaHQpKStNYXRoLmltdWwoYXQsaG4pfDAsQT1NYXRoLmltdWwoYXQsaHQpLEU9RStNYXRoLmltdWwodXQsQnQpfDAsbT0obT1tK01hdGguaW11bCh1dCxBdCl8MCkrTWF0aC5pbXVsKFhlLEJ0KXwwLEE9QStNYXRoLmltdWwoWGUsQXQpfDAsRT1FK01h''@;'; put 'put ''dGguaW11bCh2dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LFp0KXwwKStNYXRoLmltdWwoU3Qsc3QpfDAsQT1BK01hdGguaW11bChTdCxadCl8MCxFPUUrTWF0aC5pbXVsKHJ0LFllKXwwLG09KG09bStNYXRoLmltdWwocnQsVHQpfDApK01hdGguaW11bChRZSxZZSl8MCxBPUErTWF0aC5p''@;'; put 'put ''bXVsKFFlLFR0KXwwLEU9RStNYXRoLmltdWwoQWUsZnQpfDAsbT0obT1tK01hdGguaW11bChBZSxNdCl8MCkrTWF0aC5pbXVsKERlLGZ0KXwwLEE9QStNYXRoLmltdWwoRGUsTXQpfDAsRT1FK01hdGguaW11bChMZSxubil8MCxtPShtPW0rTWF0aC5pbXVsKExlLFd0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''UmUsbm4pfDAsQT1BK01hdGguaW11bChSZSxXdCl8MCxFPUUrTWF0aC5pbXVsKGplLGRuKXwwLG09KG09bStNYXRoLmltdWwoamUsbW4pfDApK01hdGguaW11bChrZSxkbil8MCxBPUErTWF0aC5pbXVsKGtlLG1uKXwwO3ZhciBxaT0oaisoRT1FK01hdGguaW11bCh4ZSxmbil8MCl8MCkrKCg4''@;'; put 'put ''MTkxJihtPShtPW0rTWF0aC5pbXVsKHhlLHRuKXwwKStNYXRoLmltdWwoeWUsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoeWUsdG4pfDApKyhtPj4+MTMpfDApKyhxaT4+PjI2KXwwLHFpJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxCdCksbT0obT1NYXRoLmltdWwoSWUsQXQp''@;'; put 'put ''KStNYXRoLmltdWwoYXQsQnQpfDAsQT1NYXRoLmltdWwoYXQsQXQpLEU9RStNYXRoLmltdWwodXQsc3QpfDAsbT0obT1tK01hdGguaW11bCh1dCxadCl8MCkrTWF0aC5pbXVsKFhlLHN0KXwwLEE9QStNYXRoLmltdWwoWGUsWnQpfDAsRT1FK01hdGguaW11bCh2dCxZZSl8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKHZ0LFR0KXwwKStNYXRoLmltdWwoU3QsWWUpfDAsQT1BK01hdGguaW11bChTdCxUdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LGZ0KXwwLG09KG09bStNYXRoLmltdWwocnQsTXQpfDApK01hdGguaW11bChRZSxmdCl8MCxBPUErTWF0aC5pbXVsKFFlLE10KXwwLEU9RStNYXRoLmltdWwo''@;'; put 'put ''QWUsbm4pfDAsbT0obT1tK01hdGguaW11bChBZSxXdCl8MCkrTWF0aC5pbXVsKERlLG5uKXwwLEE9QStNYXRoLmltdWwoRGUsV3QpfDAsRT1FK01hdGguaW11bChMZSxkbil8MCxtPShtPW0rTWF0aC5pbXVsKExlLG1uKXwwKStNYXRoLmltdWwoUmUsZG4pfDAsQT1BK01hdGguaW11bChSZSxt''@;'; put 'put ''bil8MDt2YXIgUGE9KGorKEU9RStNYXRoLmltdWwoamUsZm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChqZSx0bil8MCkrTWF0aC5pbXVsKGtlLGZuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKGtlLHRuKXwwKSsobT4+PjEzKXwwKSsoUGE+Pj4yNil8MCxQYSY9Njcx''@;'; put 'put ''MDg4NjMsRT1NYXRoLmltdWwoSWUsc3QpLG09KG09TWF0aC5pbXVsKEllLFp0KSkrTWF0aC5pbXVsKGF0LHN0KXwwLEE9TWF0aC5pbXVsKGF0LFp0KSxFPUUrTWF0aC5pbXVsKHV0LFllKXwwLG09KG09bStNYXRoLmltdWwodXQsVHQpfDApK01hdGguaW11bChYZSxZZSl8MCxBPUErTWF0aC5p''@;'; put 'put ''bXVsKFhlLFR0KXwwLEU9RStNYXRoLmltdWwodnQsZnQpfDAsbT0obT1tK01hdGguaW11bCh2dCxNdCl8MCkrTWF0aC5pbXVsKFN0LGZ0KXwwLEE9QStNYXRoLmltdWwoU3QsTXQpfDAsRT1FK01hdGguaW11bChydCxubil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LFd0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''UWUsbm4pfDAsQT1BK01hdGguaW11bChRZSxXdCl8MCxFPUUrTWF0aC5pbXVsKEFlLGRuKXwwLG09KG09bStNYXRoLmltdWwoQWUsbW4pfDApK01hdGguaW11bChEZSxkbil8MCxBPUErTWF0aC5pbXVsKERlLG1uKXwwO3ZhciB1cj0oaisoRT1FK01hdGguaW11bChMZSxmbil8MCl8MCkrKCg4''@;'; put 'put ''MTkxJihtPShtPW0rTWF0aC5pbXVsKExlLHRuKXwwKStNYXRoLmltdWwoUmUsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoUmUsdG4pfDApKyhtPj4+MTMpfDApKyh1cj4+PjI2KXwwLHVyJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxZZSksbT0obT1NYXRoLmltdWwoSWUsVHQp''@;'; put 'put ''KStNYXRoLmltdWwoYXQsWWUpfDAsQT1NYXRoLmltdWwoYXQsVHQpLEU9RStNYXRoLmltdWwodXQsZnQpfDAsbT0obT1tK01hdGguaW11bCh1dCxNdCl8MCkrTWF0aC5pbXVsKFhlLGZ0KXwwLEE9QStNYXRoLmltdWwoWGUsTXQpfDAsRT1FK01hdGguaW11bCh2dCxubil8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKHZ0LFd0KXwwKStNYXRoLmltdWwoU3Qsbm4pfDAsQT1BK01hdGguaW11bChTdCxXdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LGRuKXwwLG09KG09bStNYXRoLmltdWwocnQsbW4pfDApK01hdGguaW11bChRZSxkbil8MCxBPUErTWF0aC5pbXVsKFFlLG1uKXwwO3ZhciBiYT0oaisoRT1F''@;'; put 'put ''K01hdGguaW11bChBZSxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKEFlLHRuKXwwKStNYXRoLmltdWwoRGUsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoRGUsdG4pfDApKyhtPj4+MTMpfDApKyhiYT4+PjI2KXwwLGJhJj02NzEwODg2MyxFPU1hdGguaW11bChJ''@;'; put 'put ''ZSxmdCksbT0obT1NYXRoLmltdWwoSWUsTXQpKStNYXRoLmltdWwoYXQsZnQpfDAsQT1NYXRoLmltdWwoYXQsTXQpLEU9RStNYXRoLmltdWwodXQsbm4pfDAsbT0obT1tK01hdGguaW11bCh1dCxXdCl8MCkrTWF0aC5pbXVsKFhlLG5uKXwwLEE9QStNYXRoLmltdWwoWGUsV3QpfDAsRT1FK01h''@;'; put 'put ''dGguaW11bCh2dCxkbil8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LG1uKXwwKStNYXRoLmltdWwoU3QsZG4pfDAsQT1BK01hdGguaW11bChTdCxtbil8MDt2YXIgTWk9KGorKEU9RStNYXRoLmltdWwocnQsZm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChydCx0bil8MCkrTWF0aC5p''@;'; put 'put ''bXVsKFFlLGZuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFFlLHRuKXwwKSsobT4+PjEzKXwwKSsoTWk+Pj4yNil8MCxNaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsbm4pLG09KG09TWF0aC5pbXVsKEllLFd0KSkrTWF0aC5pbXVsKGF0LG5uKXwwLEE9TWF0aC5pbXVsKGF0LFd0''@;'; put 'put ''KSxFPUUrTWF0aC5pbXVsKHV0LGRuKXwwLG09KG09bStNYXRoLmltdWwodXQsbW4pfDApK01hdGguaW11bChYZSxkbil8MCxBPUErTWF0aC5pbXVsKFhlLG1uKXwwO3ZhciB3YT0oaisoRT1FK01hdGguaW11bCh2dCxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHZ0LHRuKXww''@;'; put 'put ''KStNYXRoLmltdWwoU3QsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoU3QsdG4pfDApKyhtPj4+MTMpfDApKyh3YT4+PjI2KXwwLHdhJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxkbiksbT0obT1NYXRoLmltdWwoSWUsbW4pKStNYXRoLmltdWwoYXQsZG4pfDAsQT1NYXRoLmlt''@;'; put 'put ''dWwoYXQsbW4pO3ZhciBlYT0oaisoRT1FK01hdGguaW11bCh1dCxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHV0LHRuKXwwKStNYXRoLmltdWwoWGUsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoWGUsdG4pfDApKyhtPj4+MTMpfDApKyhlYT4+PjI2KXwwLGVh''@;'; put 'put ''Jj02NzEwODg2Mzt2YXIgRnI9KGorKEU9TWF0aC5pbXVsKEllLGZuKSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChJZSx0bikpK01hdGguaW11bChhdCxmbil8MCkpPDwxMyl8MDtyZXR1cm4gaj0oKEE9TWF0aC5pbXVsKGF0LHRuKSkrKG0+Pj4xMyl8MCkrKEZyPj4+MjYpfDAsRnImPTY3''@;'; put 'put ''MTA4ODYzLEhbMF09Y2EsSFsxXT1faSxIWzJdPXZyLEhbM109WGksSFs0XT1RaSxIWzVdPVZpLEhbNl09ZWksSFs3XT11YSxIWzhdPVJpLEhbOV09RGEsSFsxMF09aGksSFsxMV09cWksSFsxMl09UGEsSFsxM109dXIsSFsxNF09YmEsSFsxNV09TWksSFsxNl09d2EsSFsxN109ZWEsSFsxOF09''@;'; put 'put ''RnIsMCE9PWomJihIWzE5XT1qLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIGVlKEIsZyx5KXtyZXR1cm4obmV3IEopLm11bHAoQixnLHkpfWZ1bmN0aW9uIEooQixnKXt0aGlzLng9Qix0aGlzLnk9Z31NYXRoLmltdWx8fChXPVkpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGcseSl7dmFy''@;'; put 'put ''IHgsQz10aGlzLmxlbmd0aCtnLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PWcubGVuZ3RoP1codGhpcyxnLHkpOkM8NjM/WSh0aGlzLGcseSk6QzwxMDI0P2Z1bmN0aW9uIHEoQixnLHkpe3kubmVnYXRpdmU9Zy5uZWdhdGl2ZV5CLm5lZ2F0aXZlLHkubGVuZ3RoPUIu''@;'; put 'put ''bGVuZ3RoK2cubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDx5Lmxlbmd0aC0xO1QrKyl7dmFyIEg9QztDPTA7Zm9yKHZhciBqPTY3MTA4ODYzJngsRT1NYXRoLm1pbihULGcubGVuZ3RoLTEpLG09TWF0aC5tYXgoMCxULUIubGVuZ3RoKzEpO208PUU7bSsrKXt2YXIgc2U9KDB8Qi53b3Jk''@;'; put 'put ''c1tULW1dKSooMHxnLndvcmRzW21dKSxDZT02NzEwODg2MyZzZTtqPTY3MTA4ODYzJihDZT1DZStqfDApLEMrPShIPShIPUgrKHNlLzY3MTA4ODY0fDApfDApKyhDZT4+PjI2KXwwKT4+PjI2LEgmPTY3MTA4ODYzfXkud29yZHNbVF09aix4PUgsSD1DfXJldHVybiAwIT09eD95LndvcmRzW1Rd''@;'; put 'put ''PXg6eS5sZW5ndGgtLSx5LnN0cmlwKCl9KHRoaXMsZyx5KTplZSh0aGlzLGcseSkseH0sSi5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihnKXtmb3IodmFyIHk9bmV3IEFycmF5KGcpLHg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhnKS0xLEM9MDtDPGc7QysrKXlbQ109dGhpcy5yZXZCaW4o''@;'; put 'put ''Qyx4LGcpO3JldHVybiB5fSxKLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oZyx5LHgpe2lmKDA9PT1nfHxnPT09eC0xKXJldHVybiBnO2Zvcih2YXIgQz0wLFQ9MDtUPHk7VCsrKUN8PSgxJmcpPDx5LVQtMSxnPj49MTtyZXR1cm4gQ30sSi5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihn''@;'; put 'put ''LHkseCxDLFQsSCl7Zm9yKHZhciBqPTA7ajxIO2orKylDW2pdPXlbZ1tqXV0sVFtqXT14W2dbal1dfSxKLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZyx5LHgsQyxULEgpe3RoaXMucGVybXV0ZShILGcseSx4LEMsVCk7Zm9yKHZhciBqPTE7ajxUO2o8PD0xKWZvcih2YXIgRT1qPDwx''@;'; put 'put ''LG09TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLGFlPTA7YWU8VDthZSs9RSlmb3IodmFyIG5lPW0sc2U9QSxDZT0wO0NlPGo7Q2UrKyl7dmFyIFVlPXhbYWUrQ2VdLEplPUNbYWUrQ2VdLGl0PXhbYWUrQ2Ural0seGU9Q1thZStDZStqXSx5ZT1uZSppdC1z''@;'; put 'put ''ZSp4ZTt4ZT1uZSp4ZStzZSppdCx4W2FlK0NlXT1VZSsoaXQ9eWUpLENbYWUrQ2VdPUplK3hlLHhbYWUrQ2Ural09VWUtaXQsQ1thZStDZStqXT1KZS14ZSxDZSE9PUUmJih5ZT1tKm5lLUEqc2Usc2U9bSpzZStBKm5lLG5lPXllKX19LEoucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9u''@;'; put 'put ''KGcseSl7dmFyIHg9MXxNYXRoLm1heCh5LGcpLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8PFQrMStDfSxKLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oZyx5LHgpe2lmKCEoeDw9MSkpZm9yKHZhciBDPTA7Qzx4LzI7QysrKXt2YXIgVD1nW0NdO2db''@;'; put 'put ''Q109Z1t4LUMtMV0sZ1t4LUMtMV09VCxUPXlbQ10seVtDXT0teVt4LUMtMV0seVt4LUMtMV09LVR9fSxKLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oZyx5KXtmb3IodmFyIHg9MCxDPTA7Qzx5LzI7QysrKXt2YXIgVD04MTkyKk1hdGgucm91bmQoZ1syKkMrMV0veSkrTWF0aC5y''@;'; put 'put ''b3VuZChnWzIqQ10veSkreDtnW0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJldHVybiBnfSxKLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGcseSx4LEMpe2Zvcih2YXIgVD0wLEg9MDtIPHk7SCsrKXhbMipIXT04MTkxJihUKz0wfGdbSF0pLHhbMipI''@;'; put 'put ''KzFdPTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9yKEg9Mip5O0g8QzsrK0gpeFtIXT0wO3AoMD09PVQpLHAoISgtODE5MiZUKSl9LEoucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PW5ldyBBcnJheShnKSx4PTA7eDxnO3grKyl5W3hdPTA7cmV0dXJuIHl9LEoucHJvdG90''@;'; put 'put ''eXBlLm11bHA9ZnVuY3Rpb24oZyx5LHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihnLmxlbmd0aCx5Lmxlbmd0aCksVD10aGlzLm1ha2VSQlQoQyksSD10aGlzLnN0dWIoQyksaj1uZXcgQXJyYXkoQyksRT1uZXcgQXJyYXkoQyksbT1uZXcgQXJyYXkoQyksQT1uZXcgQXJyYXkoQyksYWU9''@;'; put 'put ''bmV3IEFycmF5KEMpLG5lPW5ldyBBcnJheShDKSxzZT14LndvcmRzO3NlLmxlbmd0aD1DLHRoaXMuY29udmVydDEzYihnLndvcmRzLGcubGVuZ3RoLGosQyksdGhpcy5jb252ZXJ0MTNiKHkud29yZHMseS5sZW5ndGgsQSxDKSx0aGlzLnRyYW5zZm9ybShqLEgsRSxtLEMsVCksdGhpcy50cmFu''@;'; put 'put ''c2Zvcm0oQSxILGFlLG5lLEMsVCk7Zm9yKHZhciBDZT0wO0NlPEM7Q2UrKyl7dmFyIFVlPUVbQ2VdKmFlW0NlXS1tW0NlXSpuZVtDZV07bVtDZV09RVtDZV0qbmVbQ2VdK21bQ2VdKmFlW0NlXSxFW0NlXT1VZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoRSxtLEMpLHRoaXMudHJhbnNmb3JtKEUs''@;'; put 'put ''bSxzZSxILEMsVCksdGhpcy5jb25qdWdhdGUoc2UsSCxDKSx0aGlzLm5vcm1hbGl6ZTEzYihzZSxDKSx4Lm5lZ2F0aXZlPWcubmVnYXRpdmVeeS5uZWdhdGl2ZSx4Lmxlbmd0aD1nLmxlbmd0aCt5Lmxlbmd0aCx4LnN0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihnKXt2YXIgeT1u''@;'; put 'put ''ZXcgdyhudWxsKTtyZXR1cm4geS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRoaXMubXVsVG8oZyx5KX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihnKXt2YXIgeT1uZXcgdyhudWxsKTtyZXR1cm4geS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5n''@;'; put 'put ''dGgpLGVlKHRoaXMsZyx5KX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGcsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpO2Zvcih2YXIgeT0wLHg9MDt4''@;'; put 'put ''PHRoaXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqZyxUPSg2NzEwODg2MyZDKSsoNjcxMDg4NjMmeSk7eT4+PTI2LHkrPUMvNjcxMDg4NjR8MCx5Kz1UPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZUfXJldHVybiAwIT09eSYmKHRoaXMud29yZHNbeF09eSx0aGlz''@;'; put 'put ''Lmxlbmd0aCsrKSx0aGlzLmxlbmd0aD0wPT09Zz8xOnRoaXMubGVuZ3RoLHRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihnKX0sdy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyl7dmFyIHk9ZnVuY3Rpb24gWihCKXtmb3IodmFyIGc9bmV3IEFycmF5KEIuYml0TGVuZ3RoKCkpLHk9MDt5PGcubGVuZ3RoO3krKyl7dmFyIEM9eSUy''@;'; put 'put ''NjtnW3ldPShCLndvcmRzW3kvMjZ8MF0mMTw8Qyk+Pj5DfXJldHVybiBnfShnKTtpZigwPT09eS5sZW5ndGgpcmV0dXJuIG5ldyB3KDEpO2Zvcih2YXIgeD10aGlzLEM9MDtDPHkubGVuZ3RoJiYwPT09eVtDXTtDKysseD14LnNxcigpKTtpZigrK0M8eS5sZW5ndGgpZm9yKHZhciBUPXguc3Fy''@;'; put 'put ''KCk7Qzx5Lmxlbmd0aDtDKyssVD1ULnNxcigpKTAhPT15W0NdJiYoeD14Lm11bChUKSk7cmV0dXJuIHh9LHcucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIFQseT1nJTI2LHg9KGcteSkvMjYsQz02NzEwODg2Mz4+PjI2LXk8PDI2''@;'; put 'put ''LXk7aWYoMCE9PXkpe3ZhciBIPTA7Zm9yKFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIGo9dGhpcy53b3Jkc1tUXSZDO3RoaXMud29yZHNbVF09KDB8dGhpcy53b3Jkc1tUXSktajw8eXxILEg9aj4+PjI2LXl9SCYmKHRoaXMud29yZHNbVF09SCx0aGlzLmxlbmd0aCsrKX1pZigwIT09eCl7''@;'; put 'put ''Zm9yKFQ9dGhpcy5sZW5ndGgtMTtUPj0wO1QtLSl0aGlzLndvcmRzW1QreF09dGhpcy53b3Jkc1tUXTtmb3IoVD0wO1Q8eDtUKyspdGhpcy53b3Jkc1tUXT0wO3RoaXMubGVuZ3RoKz14fXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiBw''@;'; put 'put ''KDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihnKX0sdy5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKGcseSx4KXt2YXIgQztwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCksQz15Pyh5LXklMjYpLzI2OjA7dmFyIFQ9ZyUyNixIPU1hdGgubWluKChnLVQpLzI2LHRoaXMubGVuZ3Ro''@;'; put 'put ''KSxqPTY3MTA4ODYzXjY3MTA4ODYzPj4+VDw8VCxFPXg7aWYoQy09SCxDPU1hdGgubWF4KDAsQyksRSl7Zm9yKHZhciBtPTA7bTxIO20rKylFLndvcmRzW21dPXRoaXMud29yZHNbbV07RS5sZW5ndGg9SH1pZigwIT09SClpZih0aGlzLmxlbmd0aD5IKWZvcih0aGlzLmxlbmd0aC09SCxtPTA7''@;'; put 'put ''bTx0aGlzLmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT10aGlzLndvcmRzW20rSF07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgQT0wO2ZvcihtPXRoaXMubGVuZ3RoLTE7bT49MCYmKDAhPT1BfHxtPj1DKTttLS0pe3ZhciBhZT0wfHRoaXMud29yZHNbbV07dGhpcy53''@;'; put 'put ''b3Jkc1ttXT1BPDwyNi1UfGFlPj4+VCxBPWFlJmp9cmV0dXJuIEUmJjAhPT1BJiYoRS53b3Jkc1tFLmxlbmd0aCsrXT1BKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihnLHks''@;'; put 'put ''eCl7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGcseSx4KX0sdy5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGcpfSx3LnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hs''@;'; put 'put ''bihnKX0sdy5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGcpfSx3LnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihnKX0sdy5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oZyl7cCgibnVtYmVy''@;'; put 'put ''Ij09dHlwZW9mIGcmJmc+PTApO3ZhciB5PWclMjYseD0oZy15KS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD14fHwhKHRoaXMud29yZHNbeF0mMTw8eSkpfSx3LnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PWclMjYseD0oZy15''@;'; put 'put ''KS8yNjtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXg/dGhpczooMCE9PXkmJngrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbih4LHRoaXMubGVuZ3RoKSwwIT09eSYmKHRoaXMud29yZHNbdGhp''@;'; put 'put ''cy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+eTw8eSksdGhpcy5zdHJpcCgpKX0sdy5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oZyl9LHcucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGcpe3JldHVybiBwKCJudW1iZXIiPT10''@;'; put 'put ''eXBlb2YgZykscChnPDY3MTA4ODY0KSxnPDA/dGhpcy5pc3VibigtZyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxnPyh0aGlzLndvcmRzWzBdPWctKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0''@;'; put 'put ''aXZlPTAsdGhpcy5pc3VibihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oZyl9LHcucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihnKXt0aGlzLndvcmRzWzBdKz1nO2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbeV0+PTY3MTA4ODY0O3krKyl0aGlz''@;'; put 'put ''LndvcmRzW3ldLT02NzEwODg2NCx5PT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW3krMV09MTp0aGlzLndvcmRzW3krMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgseSsxKSx0aGlzfSx3LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihnKXtpZihwKCJudW1i''@;'; put 'put ''ZXIiPT10eXBlb2YgZykscChnPDY3MTA4ODY0KSxnPDApcmV0dXJuIHRoaXMuaWFkZG4oLWcpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1nLDE9PT10aGlzLmxl''@;'; put 'put ''bmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t5XTwwO3krKyl0aGlzLndvcmRzW3ldKz02NzEwODg2NCx0aGlzLndvcmRzW3krMV0tPTE7cmV0''@;'; put 'put ''dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGcpfSx3LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oZyl9LHcucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHcucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx3LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oZyx5LHgpe3ZhciBUO3RoaXMuX2V4cGFuZChnLmxlbmd0aCt4KTt2YXIgSCxqPTA7''@;'; put 'put ''Zm9yKFQ9MDtUPGcubGVuZ3RoO1QrKyl7SD0oMHx0aGlzLndvcmRzW1QreF0pK2o7dmFyIEU9KDB8Zy53b3Jkc1tUXSkqeTtqPSgoSC09NjcxMDg4NjMmRSk+PjI2KS0oRS82NzEwODg2NHwwKSx0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmSH1mb3IoO1Q8dGhpcy5sZW5ndGgteDtUKyspaj0o''@;'; put 'put ''SD0oMHx0aGlzLndvcmRzW1QreF0pK2opPj4yNix0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmSDtpZigwPT09ailyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihwKC0xPT09aiksaj0wLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKylqPShIPS0oMHx0aGlzLndvcmRzW1RdKStqKT4+MjYsdGhpcy53b3Jk''@;'; put 'put ''c1tUXT02NzEwODg2MyZIO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihnLHkpe3ZhciB4LEM9dGhpcy5jbG9uZSgpLFQ9ZyxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXTswIT0oeD0yNi10aGlzLl9jb3VudEJpdHMoSCkp''@;'; put 'put ''JiYoVD1ULnVzaGxuKHgpLEMuaXVzaGxuKHgpLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdKTt2YXIgbSxFPUMubGVuZ3RoLVQubGVuZ3RoO2lmKCJtb2QiIT09eSl7KG09bmV3IHcobnVsbCkpLmxlbmd0aD1FKzEsbS53b3Jkcz1uZXcgQXJyYXkobS5sZW5ndGgpO2Zvcih2YXIgQT0wO0E8bS5s''@;'; put 'put ''ZW5ndGg7QSsrKW0ud29yZHNbQV09MH12YXIgYWU9Qy5jbG9uZSgpLl9pc2hsbnN1Ym11bChULDEsRSk7MD09PWFlLm5lZ2F0aXZlJiYoQz1hZSxtJiYobS53b3Jkc1tFXT0xKSk7Zm9yKHZhciBuZT1FLTE7bmU+PTA7bmUtLSl7dmFyIHNlPTY3MTA4ODY0KigwfEMud29yZHNbVC5sZW5ndGgr''@;'; put 'put ''bmVdKSsoMHxDLndvcmRzW1QubGVuZ3RoK25lLTFdKTtmb3Ioc2U9TWF0aC5taW4oc2UvSHwwLDY3MTA4ODYzKSxDLl9pc2hsbnN1Ym11bChULHNlLG5lKTswIT09Qy5uZWdhdGl2ZTspc2UtLSxDLm5lZ2F0aXZlPTAsQy5faXNobG5zdWJtdWwoVCwxLG5lKSxDLmlzWmVybygpfHwoQy5uZWdh''@;'; put 'put ''dGl2ZV49MSk7bSYmKG0ud29yZHNbbmVdPXNlKX1yZXR1cm4gbSYmbS5zdHJpcCgpLEMuc3RyaXAoKSwiZGl2IiE9PXkmJjAhPT14JiZDLml1c2hybih4KSx7ZGl2Om18fG51bGwsbW9kOkN9fSx3LnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oZyx5LHgpe3JldHVybiBwKCFnLmlzWmVybygp''@;'; put 'put ''KSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QoZyx5KSwibW9kIiE9PXkmJihDPUguZGl2Lm5lZygpKSwiZGl2IiE9PXkmJihUPUgubW9kLm5lZygpLHgmJjAhPT1U''@;'; put 'put ''Lm5lZ2F0aXZlJiZULmlhZGQoZykpLHtkaXY6Qyxtb2Q6VH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZT8oSD10aGlzLmRpdm1vZChnLm5lZygpLHkpLCJtb2QiIT09eSYmKEM9SC5kaXYubmVnKCkpLHtkaXY6Qyxtb2Q6SC5tb2R9KTp0aGlzLm5lZ2F0aXZlJmcubmVnYXRp''@;'; put 'put ''dmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QoZy5uZWcoKSx5KSwiZGl2IiE9PXkmJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlzdWIoZykpLHtkaXY6SC5kaXYsbW9kOlR9KTpnLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoZyk8MD97ZGl2Om5ldyB3KDApLG1vZDp0''@;'; put 'put ''aGlzfToxPT09Zy5sZW5ndGg/ImRpdiI9PT15P3tkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PXk/e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bmV3IHcodGhpcy5tb2Ru''@;'; put 'put ''KGcud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihnLHkpO3ZhciBDLFQsSH0sdy5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJkaXYiLCExKS5kaXZ9LHcucHJvdG90eXBlLm1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwh''@;'; put 'put ''MSkubW9kfSx3LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCEwKS5tb2R9LHcucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGcpe3ZhciB5PXRoaXMuZGl2bW9kKGcpO2lmKHkubW9kLmlzWmVybygpKXJldHVybiB5LmRpdjt2YXIgeD0w''@;'; put 'put ''IT09eS5kaXYubmVnYXRpdmU/eS5tb2QuaXN1YihnKTp5Lm1vZCxDPWcudXNocm4oMSksVD1nLmFuZGxuKDEpLEg9eC5jbXAoQyk7cmV0dXJuIEg8MHx8MT09PVQmJjA9PT1IP3kuZGl2OjAhPT15LmRpdi5uZWdhdGl2ZT95LmRpdi5pc3VibigxKTp5LmRpdi5pYWRkbigxKX0sdy5wcm90b3R5''@;'; put 'put ''cGUubW9kbj1mdW5jdGlvbihnKXtwKGc8PTY3MTA4ODYzKTtmb3IodmFyIHk9KDE8PDI2KSVnLHg9MCxDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0peD0oeSp4KygwfHRoaXMud29yZHNbQ10pKSVnO3JldHVybiB4fSx3LnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihnKXtwKGc8PTY3MTA4ODYz''@;'; put 'put ''KTtmb3IodmFyIHk9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKzY3MTA4ODY0Knk7dGhpcy53b3Jkc1t4XT1DL2d8MCx5PUMlZ31yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNs''@;'; put 'put ''b25lKCkuaWRpdm4oZyl9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSkscCghZy5pc1plcm8oKSk7dmFyIHk9dGhpcyx4PWcuY2xvbmUoKTt5PTAhPT15Lm5lZ2F0aXZlP3kudW1vZChnKTp5LmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHco''@;'; put 'put ''MCksSD1uZXcgdygwKSxqPW5ldyB3KDEpLEU9MDt5LmlzRXZlbigpJiZ4LmlzRXZlbigpOyl5Lml1c2hybigxKSx4Lml1c2hybigxKSwrK0U7Zm9yKHZhciBtPXguY2xvbmUoKSxBPXkuY2xvbmUoKTsheS5pc1plcm8oKTspe2Zvcih2YXIgYWU9MCxuZT0xOyEoeS53b3Jkc1swXSZuZSkmJmFl''@;'; put 'put ''PDI2OysrYWUsbmU8PD0xKTtpZihhZT4wKWZvcih5Lml1c2hybihhZSk7YWUtLSA+MDspKEMuaXNPZGQoKXx8VC5pc09kZCgpKSYmKEMuaWFkZChtKSxULmlzdWIoQSkpLEMuaXVzaHJuKDEpLFQuaXVzaHJuKDEpO2Zvcih2YXIgc2U9MCxDZT0xOyEoeC53b3Jkc1swXSZDZSkmJnNlPDI2Oysr''@;'; put 'put ''c2UsQ2U8PD0xKTtpZihzZT4wKWZvcih4Lml1c2hybihzZSk7c2UtLSA+MDspKEguaXNPZGQoKXx8ai5pc09kZCgpKSYmKEguaWFkZChtKSxqLmlzdWIoQSkpLEguaXVzaHJuKDEpLGouaXVzaHJuKDEpO3kuY21wKHgpPj0wPyh5LmlzdWIoeCksQy5pc3ViKEgpLFQuaXN1YihqKSk6KHguaXN1''@;'; put 'put ''Yih5KSxILmlzdWIoQyksai5pc3ViKFQpKX1yZXR1cm57YTpILGI6aixnY2Q6eC5pdXNobG4oRSl9fSx3LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSkscCghZy5pc1plcm8oKSk7dmFyIGFlLHk9dGhpcyx4PWcuY2xvbmUoKTt5PTAhPT15Lm5lZ2F0aXZl''@;'; put 'put ''P3kudW1vZChnKTp5LmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD14LmNsb25lKCk7eS5jbXBuKDEpPjAmJnguY21wbigxKT4wOyl7Zm9yKHZhciBqPTAsRT0xOyEoeS53b3Jkc1swXSZFKSYmajwyNjsrK2osRTw8PTEpO2lmKGo+MClmb3IoeS5pdXNocm4oaik7ai0t''@;'; put 'put ''ID4wOylDLmlzT2RkKCkmJkMuaWFkZChIKSxDLml1c2hybigxKTtmb3IodmFyIG09MCxBPTE7ISh4LndvcmRzWzBdJkEpJiZtPDI2OysrbSxBPDw9MSk7aWYobT4wKWZvcih4Lml1c2hybihtKTttLS0gPjA7KVQuaXNPZGQoKSYmVC5pYWRkKEgpLFQuaXVzaHJuKDEpO3kuY21wKHgpPj0wPyh5''@;'; put 'put ''LmlzdWIoeCksQy5pc3ViKFQpKTooeC5pc3ViKHkpLFQuaXN1YihDKSl9cmV0dXJuKGFlPTA9PT15LmNtcG4oMSk/QzpUKS5jbXBuKDApPDAmJmFlLmlhZGQoZyksYWV9LHcucHJvdG90eXBlLmdjZD1mdW5jdGlvbihnKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBnLmFicygpO2lmKGcuaXNa''@;'; put 'put ''ZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIHk9dGhpcy5jbG9uZSgpLHg9Zy5jbG9uZSgpO3kubmVnYXRpdmU9MCx4Lm5lZ2F0aXZlPTA7Zm9yKHZhciBDPTA7eS5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTtDKyspeS5pdXNocm4oMSkseC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO3kuaXNFdmVu''@;'; put 'put ''KCk7KXkuaXVzaHJuKDEpO2Zvcig7eC5pc0V2ZW4oKTspeC5pdXNocm4oMSk7dmFyIFQ9eS5jbXAoeCk7aWYoVDwwKXt2YXIgSD15O3k9eCx4PUh9ZWxzZSBpZigwPT09VHx8MD09PXguY21wbigxKSlicmVhazt5LmlzdWIoeCl9cmV0dXJuIHguaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5pbnZt''@;'; put 'put ''PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmVnY2QoZykuYS51bW9kKGcpfSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5''@;'; put 'put ''cGUuYW5kbG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMud29yZHNbMF0mZ30sdy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcpO3ZhciB5PWclMjYseD0oZy15KS8yNixDPTE8PHk7aWYodGhpcy5sZW5ndGg8PXgpcmV0dXJuIHRoaXMuX2V4cGFuZCh4''@;'; put 'put ''KzEpLHRoaXMud29yZHNbeF18PUMsdGhpcztmb3IodmFyIFQ9QyxIPXg7MCE9PVQmJkg8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj0wfHRoaXMud29yZHNbSF07VD0oais9VCk+Pj4yNix0aGlzLndvcmRzW0hdPWomPTY3MTA4ODYzfXJldHVybiAwIT09VCYmKHRoaXMud29yZHNbSF09VCx0aGlz''@;'; put 'put ''Lmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdy5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihnKXt2YXIgeCx5PWc8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIXkpcmV0dXJuLTE7''@;'; put 'put ''aWYoMD09PXRoaXMubmVnYXRpdmUmJnkpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpeD0xO2Vsc2V7eSYmKGc9LWcpLHAoZzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIEM9MHx0aGlzLndvcmRzWzBdO3g9Qz09PWc/MDpDPGc/LTE6MX1yZXR1cm4g''@;'; put 'put ''MCE9PXRoaXMubmVnYXRpdmU/MHwteDp4fSx3LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oZyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgeT10aGlzLnVjbXAoZyk7''@;'; put 'put ''cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXk6eX0sdy5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihnKXtpZih0aGlzLmxlbmd0aD5nLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxnLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIHk9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0p''@;'; put 'put ''e3ZhciBDPTB8dGhpcy53b3Jkc1t4XSxUPTB8Zy53b3Jkc1t4XTtpZihDIT09VCl7QzxUP3k9LTE6Qz5UJiYoeT0xKTticmVha319cmV0dXJuIHl9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oZyl7''@;'; put 'put ''cmV0dXJuIDE9PT10aGlzLmNtcChnKX0sdy5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPj0wfSx3LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oZyl7cmV0dXJuLTE9''@;'; put 'put ''PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXAoZyl9LHcucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKTw9MH0sdy5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChn''@;'; put 'put ''KTw9MH0sdy5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5lcT1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wKGcpfSx3LnJlZD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IE1lKGcpfSx3LnByb3RvdHlwZS50b1JlZD1m''@;'; put 'put ''dW5jdGlvbihnKXtyZXR1cm4gcCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxwKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChnKX0sdy5wcm90b3R5''@;'; put 'put ''cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LHcucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5yZWQ9Zyx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChnKX0sdy5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGcpe3JldHVy''@;'; put 'put ''biBwKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhp''@;'; put 'put ''cy5yZWQuaWFkZCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihnKXtyZXR1''@;'; put 'put ''cm4gcCh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRo''@;'; put 'put ''aXMucmVkLnNobCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLm11bCh0aGlzLGcpfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5yZWRJTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5pbXVsKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBw''@;'; put 'put ''KHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRo''@;'; put 'put ''IHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkx''@;'; put 'put ''KHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sdy5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGcpe3JldHVybiBw''@;'; put 'put ''KHRoaXMucmVkJiYhZy5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsZyl9O3ZhciByZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIGllKEIsZyl7dGhpcy5uYW1lPUIs''@;'; put 'put ''dGhpcy5wPW5ldyB3KGcsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB3KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiB1ZSgpe2llLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZm''@;'; put 'put ''ZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gZ2UoKXtpZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIF9l''@;'; put 'put ''KCl7aWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBUZSgpe2llLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZm''@;'; put 'put ''ZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gTWUoQil7aWYoInN0cmluZyI9PXR5cGVvZiBCKXt2YXIgZz13Ll9wcmltZShCKTt0aGlzLm09Zy5wLHRoaXMucHJpbWU9Z31lbHNlIHAoQi5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1CLHRoaXMu''@;'; put 'put ''cHJpbWU9bnVsbH1mdW5jdGlvbiBaZShCKXtNZS5jYWxsKHRoaXMsQiksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgdygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10''@;'; put 'put ''aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhp''@;'; put 'put ''cy5taW52KX1pZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBnPW5ldyB3KG51bGwpO3JldHVybiBnLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksZ30saWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oZyl7dmFyIHgseT1nO2Rve3RoaXMuc3BsaXQoeSx0''@;'; put 'put ''aGlzLnRtcCkseD0oeT0oeT10aGlzLmltdWxLKHkpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoeD50aGlzLm4pO3ZhciBDPXg8dGhpcy5uPy0xOnkudWNtcCh0aGlzLnApO3JldHVybiAwPT09Qz8oeS53b3Jkc1swXT0wLHkubGVuZ3RoPTEpOkM+MD95LmlzdWIodGhpcy5w''@;'; put 'put ''KTp2b2lkIDAhPT15LnN0cmlwP3kuc3RyaXAoKTp5Ll9zdHJpcCgpLHl9LGllLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLHkpe2cuaXVzaHJuKHRoaXMubiwwLHkpfSxpZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaW11bCh0aGlzLmspfSxWKHVlLGllKSx1ZS5w''@;'; put 'put ''cm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyx5KXtmb3IodmFyIHg9NDE5NDMwMyxDPU1hdGgubWluKGcubGVuZ3RoLDkpLFQ9MDtUPEM7VCsrKXkud29yZHNbVF09Zy53b3Jkc1tUXTtpZih5Lmxlbmd0aD1DLGcubGVuZ3RoPD05KXJldHVybiBnLndvcmRzWzBdPTAsdm9pZChnLmxlbmd0aD0x''@;'; put 'put ''KTt2YXIgSD1nLndvcmRzWzldO2Zvcih5LndvcmRzW3kubGVuZ3RoKytdPUgmeCxUPTEwO1Q8Zy5sZW5ndGg7VCsrKXt2YXIgaj0wfGcud29yZHNbVF07Zy53b3Jkc1tULTEwXT0oaiZ4KTw8NHxIPj4+MjIsSD1qfWcud29yZHNbVC0xMF09SD4+Pj0yMixnLmxlbmd0aC09MD09PUgmJmcubGVu''@;'; put 'put ''Z3RoPjEwPzEwOjl9LHVlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtnLndvcmRzW2cubGVuZ3RoXT0wLGcud29yZHNbZy5sZW5ndGgrMV09MCxnLmxlbmd0aCs9Mjtmb3IodmFyIHk9MCx4PTA7eDxnLmxlbmd0aDt4Kyspe3ZhciBDPTB8Zy53b3Jkc1t4XTtnLndvcmRzW3hdPTY3MTA4''@;'; put 'put ''ODYzJih5Kz05NzcqQykseT02NCpDKyh5LzY3MTA4ODY0fDApfXJldHVybiAwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmKGcubGVuZ3RoLS0sMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJmcubGVuZ3RoLS0pLGd9LFYoZ2UsaWUpLFYoX2UsaWUpLFYoVGUsaWUpLFRlLnByb3RvdHlwZS5pbXVs''@;'; put 'put ''Sz1mdW5jdGlvbihnKXtmb3IodmFyIHk9MCx4PTA7eDxnLmxlbmd0aDt4Kyspe3ZhciBDPTE5KigwfGcud29yZHNbeF0pK3ksVD02NzEwODg2MyZDO0M+Pj49MjYsZy53b3Jkc1t4XT1ULHk9Q31yZXR1cm4gMCE9PXkmJihnLndvcmRzW2cubGVuZ3RoKytdPXkpLGd9LHcuX3ByaW1lPWZ1bmN0''@;'; put 'put ''aW9uKGcpe2lmKHJlW2ddKXJldHVybiByZVtnXTt2YXIgeTtpZigiazI1NiI9PT1nKXk9bmV3IHVlO2Vsc2UgaWYoInAyMjQiPT09Zyl5PW5ldyBnZTtlbHNlIGlmKCJwMTkyIj09PWcpeT1uZXcgX2U7ZWxzZXtpZigicDI1NTE5IiE9PWcpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1l''@;'; put 'put ''ICIrZyk7eT1uZXcgVGV9cmV0dXJuIHJlW2ddPXkseX0sTWUucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscChnLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxNZS5w''@;'; put 'put ''cm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oZyx5KXtwKCEoZy5uZWdhdGl2ZXx5Lm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwKGcucmVkJiZnLnJlZD09PXkucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LE1lLnByb3RvdHlwZS5p''@;'; put 'put ''bW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShnKS5fZm9yY2VSZWQodGhpcyk6Zy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxNZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKGcpe3JldHVybiBnLmlzWmVybygpP2cuY2xvbmUoKTp0aGlz''@;'; put 'put ''Lm0uc3ViKGcpLl9mb3JjZVJlZCh0aGlzKX0sTWUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmFkZCh5KTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LE1lLnByb3RvdHlwZS5p''@;'; put 'put ''YWRkPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuaWFkZCh5KTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseH0sTWUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLnN1Yih5KTtyZXR1''@;'; put 'put ''cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxNZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmlzdWIoeSk7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4fSxNZS5wcm90b3R5''@;'; put 'put ''cGUuc2hsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoZyksdGhpcy5pbW9kKGcudXNobG4oeSkpfSxNZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcseSksdGhpcy5pbW9kKGcuaW11bCh5KSl9LE1lLnByb3RvdHlwZS5tdWw9''@;'; put 'put ''ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLHkpLHRoaXMuaW1vZChnLm11bCh5KSl9LE1lLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltdWwoZyxnLmNsb25lKCkpfSxNZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm11''@;'; put 'put ''bChnLGcpfSxNZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihnKXtpZihnLmlzWmVybygpKXJldHVybiBnLmNsb25lKCk7dmFyIHk9dGhpcy5tLmFuZGxuKDMpO2lmKHAoeSUyPT0xKSwzPT09eSl7dmFyIHg9dGhpcy5tLmFkZChuZXcgdygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhn''@;'; put 'put ''LHgpfWZvcih2YXIgQz10aGlzLm0uc3VibigxKSxUPTA7IUMuaXNaZXJvKCkmJjA9PT1DLmFuZGxuKDEpOylUKyssQy5pdXNocm4oMSk7cCghQy5pc1plcm8oKSk7dmFyIEg9bmV3IHcoMSkudG9SZWQodGhpcyksaj1ILnJlZE5lZygpLEU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLG09dGhp''@;'; put 'put ''cy5tLmJpdExlbmd0aCgpO2ZvcihtPW5ldyB3KDIqbSptKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobSxFKS5jbXAoaik7KW0ucmVkSUFkZChqKTtmb3IodmFyIEE9dGhpcy5wb3cobSxDKSxhZT10aGlzLnBvdyhnLEMuYWRkbigxKS5pdXNocm4oMSkpLG5lPXRoaXMucG93KGcsQyksc2U9''@;'; put 'put ''VDswIT09bmUuY21wKEgpOyl7Zm9yKHZhciBDZT1uZSxVZT0wOzAhPT1DZS5jbXAoSCk7VWUrKylDZT1DZS5yZWRTcXIoKTtwKFVlPHNlKTt2YXIgSmU9dGhpcy5wb3coQSxuZXcgdygxKS5pdXNobG4oc2UtVWUtMSkpO2FlPWFlLnJlZE11bChKZSksQT1KZS5yZWRTcXIoKSxuZT1uZS5yZWRN''@;'; put 'put ''dWwoQSksc2U9VWV9cmV0dXJuIGFlfSxNZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXt2YXIgeT1nLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09eS5uZWdhdGl2ZT8oeS5uZWdhdGl2ZT0wLHRoaXMuaW1vZCh5KS5yZWROZWcoKSk6dGhpcy5pbW9kKHkpfSxNZS5wcm90b3R5cGUucG93''@;'; put 'put ''PWZ1bmN0aW9uKGcseSl7aWYoeS5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PXkuY21wbigxKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBDPW5ldyBBcnJheSgxNik7Q1swXT1uZXcgdygxKS50b1JlZCh0aGlzKSxDWzFdPWc7Zm9yKHZhciBUPTI7VDxDLmxlbmd0''@;'; put 'put ''aDtUKyspQ1tUXT10aGlzLm11bChDW1QtMV0sZyk7dmFyIEg9Q1swXSxqPTAsRT0wLG09eS5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW0mJihtPTI2KSxUPXkubGVuZ3RoLTE7VD49MDtULS0pe2Zvcih2YXIgQT15LndvcmRzW1RdLGFlPW0tMTthZT49MDthZS0tKXt2YXIgbmU9QT4+YWUmMTtI''@;'; put 'put ''IT09Q1swXSYmKEg9dGhpcy5zcXIoSCkpLDAhPT1uZXx8MCE9PWo/KGo8PD0xLGp8PW5lLCg0PT0rK0V8fDA9PT1UJiYwPT09YWUpJiYoSD10aGlzLm11bChILENbal0pLEU9MCxqPTApKTpFPTB9bT0yNn1yZXR1cm4gSH0sTWUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXt2YXIg''@;'; put 'put ''eT1nLnVtb2QodGhpcy5tKTtyZXR1cm4geT09PWc/eS5jbG9uZSgpOnl9LE1lLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgeT1nLmNsb25lKCk7cmV0dXJuIHkucmVkPW51bGwseX0sdy5tb250PWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgWmUoZyl9LFYoWmUsTWUpLFpl''@;'; put 'put ''LnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLnVzaGxuKHRoaXMuc2hpZnQpKX0sWmUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciB5PXRoaXMuaW1vZChnLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4geS5yZWQ9bnVsbCx5fSxa''@;'; put 'put ''ZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLHkpe2lmKGcuaXNaZXJvKCl8fHkuaXNaZXJvKCkpcmV0dXJuIGcud29yZHNbMF09MCxnLmxlbmd0aD0xLGc7dmFyIHg9Zy5pbXVsKHkpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVs''@;'; put 'put ''KHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LFplLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyx5''@;'; put 'put ''KXtpZihnLmlzWmVybygpfHx5LmlzWmVybygpKXJldHVybiBuZXcgdygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHg9Zy5tdWwoeSksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhp''@;'; put 'put ''cy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0sWmUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLl9pbnZtcCh0aGlz''@;'; put 'put ''Lm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oY2U9Yi5ubWQoY2UpLHRoaXMpfSw4OTk4MTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQ2Mzg3KSxfPWIoMzhlMykscD1GdW5jdGlvbi5wcm90b3R5cGUsVj1JJiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw''@;'; put 'put ''dG9yLHc9XyhwLCJuYW1lIiksUD13JiYic29tZXRoaW5nIj09PWZ1bmN0aW9uKCl7fS5uYW1lLEY9dyYmKCFJfHxJJiZWKHAsIm5hbWUiKS5jb25maWd1cmFibGUpO2NlLmV4cG9ydHM9e0VYSVNUUzp3LFBST1BFUjpQLENPTkZJR1VSQUJMRTpGfX0sODk5OTk6KGNlLFgsYik9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIEk9Yig1ODIzOSksXz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLHA9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtjZS5leHBvcnRzPWZ1bmN0aW9uKHosTixPKXtpZighSShOKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpdGVyYXRvciBtdXN0IGJlIGEgZnVuY3Rp''@;'; put 'put ''b24iKTt2YXIgSzthcmd1bWVudHMubGVuZ3RoPj0zJiYoSz1PKSxmdW5jdGlvbiBGKFIpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1fLmNhbGwoUil9KHopP2Z1bmN0aW9uKHosTixPKXtmb3IodmFyIEs9MCxaPXoubGVuZ3RoO0s8WjtLKyspcC5jYWxsKHosSykmJihudWxsPT1PP04oeltL''@;'; put 'put ''XSxLLHopOk4uY2FsbChPLHpbS10sSyx6KSl9KHosTixLKToic3RyaW5nIj09dHlwZW9mIHo/ZnVuY3Rpb24oeixOLE8pe2Zvcih2YXIgSz0wLFo9ei5sZW5ndGg7SzxaO0srKyludWxsPT1PP04oei5jaGFyQXQoSyksSyx6KTpOLmNhbGwoTyx6LmNoYXJBdChLKSxLLHopfSh6LE4sSyk6ZnVu''@;'; put 'put ''Y3Rpb24oeixOLE8pe2Zvcih2YXIgSyBpbiB6KXAuY2FsbCh6LEspJiYobnVsbD09Tz9OKHpbS10sSyx6KTpOLmNhbGwoTyx6W0tdLEsseikpfSh6LE4sSyl9fSw5MDIxMTpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gXyh3KXtyZXR1cm4gdyUx''@;'; put 'put ''MDA9PTExfHx3JTEwIT0xfWZ1bmN0aW9uIHAodyxQLEYsUil7dmFyIHo9dysiICI7c3dpdGNoKEYpe2Nhc2UicyI6cmV0dXJuIFB8fFI/Im5va2tyYXIgc2VrXHhmYW5kdXIiOiJub2trcnVtIHNla1x4ZmFuZHVtIjtjYXNlInNzIjpyZXR1cm4gXyh3KT96KyhQfHxSPyJzZWtceGZhbmR1ciI6''@;'; put 'put ''InNla1x4ZmFuZHVtIik6eisic2VrXHhmYW5kYSI7Y2FzZSJtIjpyZXR1cm4gUD8ibVx4ZWRuXHhmYXRhIjoibVx4ZWRuXHhmYXR1IjtjYXNlIm1tIjpyZXR1cm4gXyh3KT96KyhQfHxSPyJtXHhlZG5ceGZhdHVyIjoibVx4ZWRuXHhmYXR1bSIpOlA/eisibVx4ZWRuXHhmYXRhIjp6KyJtXHhl''@;'; put 'put ''ZG5ceGZhdHUiO2Nhc2UiaGgiOnJldHVybiBfKHcpP3orKFB8fFI/ImtsdWtrdXN0dW5kaXIiOiJrbHVra3VzdHVuZHVtIik6eisia2x1a2t1c3R1bmQiO2Nhc2UiZCI6cmV0dXJuIFA/ImRhZ3VyIjpSPyJkYWciOiJkZWdpIjtjYXNlImRkIjpyZXR1cm4gXyh3KT9QP3orImRhZ2FyIjp6KyhS''@;'; put 'put ''PyJkYWdhIjoiZFx4ZjZndW0iKTpQP3orImRhZ3VyIjp6KyhSPyJkYWciOiJkZWdpIik7Y2FzZSJNIjpyZXR1cm4gUD8ibVx4ZTFudVx4ZjB1ciI6Uj8ibVx4ZTFudVx4ZjAiOiJtXHhlMW51XHhmMGkiO2Nhc2UiTU0iOnJldHVybiBfKHcpP1A/eisibVx4ZTFudVx4ZjBpciI6eisoUj8ibVx4''@;'; put 'put ''ZTFudVx4ZjBpIjoibVx4ZTFudVx4ZjB1bSIpOlA/eisibVx4ZTFudVx4ZjB1ciI6eisoUj8ibVx4ZTFudVx4ZjAiOiJtXHhlMW51XHhmMGkiKTtjYXNlInkiOnJldHVybiBQfHxSPyJceGUxciI6Ilx4ZTFyaSI7Y2FzZSJ5eSI6cmV0dXJuIF8odyk/eisoUHx8Uj8iXHhlMXIiOiJceGUxcnVt''@;'; put 'put ''Iik6eisoUHx8Uj8iXHhlMXIiOiJceGUxcmkiKX19SS5kZWZpbmVMb2NhbGUoImlzIix7bW9udGhzOiJqYW5ceGZhYXJfZmViclx4ZmFhcl9tYXJzX2Fwclx4ZWRsX21hXHhlZF9qXHhmYW5ceGVkX2pceGZhbFx4ZWRfXHhlMWdceGZhc3Rfc2VwdGVtYmVyX29rdFx4ZjNiZXJfblx4ZjN2ZW1i''@;'; put 'put ''ZXJfZGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZWJfbWFyX2Fwcl9tYVx4ZWRfalx4ZmFuX2pceGZhbF9ceGUxZ1x4ZmFfc2VwX29rdF9uXHhmM3ZfZGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzdW5udWRhZ3VyX21ceGUxbnVkYWd1cl9ceGZlcmlceGYwanVkYWd1''@;'; put 'put ''cl9taVx4ZjB2aWt1ZGFndXJfZmltbXR1ZGFndXJfZlx4ZjZzdHVkYWd1cl9sYXVnYXJkYWd1ciIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzdW5fbVx4ZTFuX1x4ZmVyaV9taVx4ZjBfZmltX2ZceGY2c19sYXUiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01ceGUxX1x4ZGVyX01p''@;'; put 'put ''X0ZpX0ZceGY2X0xhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBba2wuXSBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgW2tsLl0gSDptbSJ9''@;'; put 'put ''LGNhbGVuZGFyOntzYW1lRGF5OiJbXHhlZCBkYWcga2wuXSBMVCIsbmV4dERheToiW1x4ZTEgbW9yZ3VuIGtsLl0gTFQiLG5leHRXZWVrOiJkZGRkIFtrbC5dIExUIixsYXN0RGF5OiJbXHhlZCBnXHhlNnIga2wuXSBMVCIsbGFzdFdlZWs6IltzXHhlZFx4ZjBhc3RhXSBkZGRkIFtrbC5dIExU''@;'; put 'put ''IixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlZnRpciAlcyIscGFzdDoiZnlyaXIgJXMgc1x4ZWRceGYwYW4iLHM6cCxzczpwLG06cCxtbTpwLGg6ImtsdWtrdXN0dW5kIixoaDpwLGQ6cCxkZDpwLE06cCxNTTpwLHk6cCx5eTpwfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNl''@;'; put 'put ''Oi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sOTAyNTg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEksXz1iKDY1ODkxKSxwPWIoMzc2NDApLFY9YigxNzU2KSx3PWIoNzc5MzMpLFA9Yig2NjEzKSxGPWIoNTg0MTMpLFI9Yig0''@;'; put 'put ''Njc1OCksej1iKDUyODYpLE49Yig3MDgzNyksTz1iKDMzODMpLEs9Yig3OTAzOSksWj1iKDE0OTgxKSxZPWIoODA5NzUpLFc9Yig1MzM3KSxxPWIoNDkxMiksZWU9RnVuY3Rpb24sSj1mdW5jdGlvbih5ZSl7dHJ5e3JldHVybiBlZSgnInVzZSBzdHJpY3QiOyByZXR1cm4gKCcreWUrIikuY29u''@;'; put 'put ''c3RydWN0b3I7IikoKX1jYXRjaHt9fSxyZT1iKDgzNzk4KSxpZT1iKDQ1NzApLHVlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IFJ9LGdlPXJlP2Z1bmN0aW9uKCl7dHJ5e3JldHVybiB1ZX1jYXRjaHt0cnl7cmV0dXJuIHJlKGFyZ3VtZW50cywiY2FsbGVlIikuZ2V0fWNhdGNoe3JldHVybiB1ZX19''@;'; put 'put ''fSgpOnVlLF9lPWIoMTk5MDApKCksVGU9Yig5MTYyNyksTWU9YigyNzIwMyksWmU9Yig5NzY2OSksQj1iKDc5NDc3KSxnPWIoNTk3MDUpLHk9e30seD10eXBlb2YgVWludDhBcnJheT4idSJ8fCFUZT9JOlRlKFVpbnQ4QXJyYXkpLEM9e19fcHJvdG9fXzpudWxsLCIlQWdncmVnYXRlRXJyb3Il''@;'; put 'put ''Ijp0eXBlb2YgQWdncmVnYXRlRXJyb3I+InUiP0k6QWdncmVnYXRlRXJyb3IsIiVBcnJheSUiOkFycmF5LCIlQXJyYXlCdWZmZXIlIjp0eXBlb2YgQXJyYXlCdWZmZXI+InUiP0k6QXJyYXlCdWZmZXIsIiVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJSI6X2UmJlRlP1RlKFtdW1N5bWJvbC5pdGVy''@;'; put 'put ''YXRvcl0oKSk6SSwiJUFzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlwZSUiOkksIiVBc3luY0Z1bmN0aW9uJSI6eSwiJUFzeW5jR2VuZXJhdG9yJSI6eSwiJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lIjp5LCIlQXN5bmNJdGVyYXRvclByb3RvdHlwZSUiOnksIiVBdG9taWNzJSI6dHlwZW9m''@;'; put 'put ''IEF0b21pY3M+InUiP0k6QXRvbWljcywiJUJpZ0ludCUiOnR5cGVvZiBCaWdJbnQ+InUiP0k6QmlnSW50LCIlQmlnSW50NjRBcnJheSUiOnR5cGVvZiBCaWdJbnQ2NEFycmF5PiJ1Ij9JOkJpZ0ludDY0QXJyYXksIiVCaWdVaW50NjRBcnJheSUiOnR5cGVvZiBCaWdVaW50NjRBcnJheT4idSI/''@;'; put 'put ''STpCaWdVaW50NjRBcnJheSwiJUJvb2xlYW4lIjpCb29sZWFuLCIlRGF0YVZpZXclIjp0eXBlb2YgRGF0YVZpZXc+InUiP0k6RGF0YVZpZXcsIiVEYXRlJSI6RGF0ZSwiJWRlY29kZVVSSSUiOmRlY29kZVVSSSwiJWRlY29kZVVSSUNvbXBvbmVudCUiOmRlY29kZVVSSUNvbXBvbmVudCwiJWVu''@;'; put 'put ''Y29kZVVSSSUiOmVuY29kZVVSSSwiJWVuY29kZVVSSUNvbXBvbmVudCUiOmVuY29kZVVSSUNvbXBvbmVudCwiJUVycm9yJSI6cCwiJWV2YWwlIjpldmFsLCIlRXZhbEVycm9yJSI6ViwiJUZsb2F0MTZBcnJheSUiOnR5cGVvZiBGbG9hdDE2QXJyYXk+InUiP0k6RmxvYXQxNkFycmF5LCIlRmxv''@;'; put 'put ''YXQzMkFycmF5JSI6dHlwZW9mIEZsb2F0MzJBcnJheT4idSI/STpGbG9hdDMyQXJyYXksIiVGbG9hdDY0QXJyYXklIjp0eXBlb2YgRmxvYXQ2NEFycmF5PiJ1Ij9JOkZsb2F0NjRBcnJheSwiJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSI6dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5PiJ1Ij9J''@;'; put 'put ''OkZpbmFsaXphdGlvblJlZ2lzdHJ5LCIlRnVuY3Rpb24lIjplZSwiJUdlbmVyYXRvckZ1bmN0aW9uJSI6eSwiJUludDhBcnJheSUiOnR5cGVvZiBJbnQ4QXJyYXk+InUiP0k6SW50OEFycmF5LCIlSW50MTZBcnJheSUiOnR5cGVvZiBJbnQxNkFycmF5PiJ1Ij9JOkludDE2QXJyYXksIiVJbnQz''@;'; put 'put ''MkFycmF5JSI6dHlwZW9mIEludDMyQXJyYXk+InUiP0k6SW50MzJBcnJheSwiJWlzRmluaXRlJSI6aXNGaW5pdGUsIiVpc05hTiUiOmlzTmFOLCIlSXRlcmF0b3JQcm90b3R5cGUlIjpfZSYmVGU/VGUoVGUoW11bU3ltYm9sLml0ZXJhdG9yXSgpKSk6SSwiJUpTT04lIjoib2JqZWN0Ij09dHlw''@;'; put 'put ''ZW9mIEpTT04/SlNPTjpJLCIlTWFwJSI6dHlwZW9mIE1hcD4idSI/STpNYXAsIiVNYXBJdGVyYXRvclByb3RvdHlwZSUiOnR5cGVvZiBNYXA+InUifHwhX2V8fCFUZT9JOlRlKChuZXcgTWFwKVtTeW1ib2wuaXRlcmF0b3JdKCkpLCIlTWF0aCUiOk1hdGgsIiVOdW1iZXIlIjpOdW1iZXIsIiVP''@;'; put 'put ''YmplY3QlIjpfLCIlT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciUiOnJlLCIlcGFyc2VGbG9hdCUiOnBhcnNlRmxvYXQsIiVwYXJzZUludCUiOnBhcnNlSW50LCIlUHJvbWlzZSUiOnR5cGVvZiBQcm9taXNlPiJ1Ij9JOlByb21pc2UsIiVQcm94eSUiOnR5cGVvZiBQcm94eT4idSI/''@;'; put 'put ''STpQcm94eSwiJVJhbmdlRXJyb3IlIjp3LCIlUmVmZXJlbmNlRXJyb3IlIjpQLCIlUmVmbGVjdCUiOnR5cGVvZiBSZWZsZWN0PiJ1Ij9JOlJlZmxlY3QsIiVSZWdFeHAlIjpSZWdFeHAsIiVTZXQlIjp0eXBlb2YgU2V0PiJ1Ij9JOlNldCwiJVNldEl0ZXJhdG9yUHJvdG90eXBlJSI6dHlwZW9m''@;'; put 'put ''IFNldD4idSJ8fCFfZXx8IVRlP0k6VGUoKG5ldyBTZXQpW1N5bWJvbC5pdGVyYXRvcl0oKSksIiVTaGFyZWRBcnJheUJ1ZmZlciUiOnR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcj4idSI/STpTaGFyZWRBcnJheUJ1ZmZlciwiJVN0cmluZyUiOlN0cmluZywiJVN0cmluZ0l0ZXJhdG9yUHJvdG90''@;'; put 'put ''eXBlJSI6X2UmJlRlP1RlKCIiW1N5bWJvbC5pdGVyYXRvcl0oKSk6SSwiJVN5bWJvbCUiOl9lP1N5bWJvbDpJLCIlU3ludGF4RXJyb3IlIjpGLCIlVGhyb3dUeXBlRXJyb3IlIjpnZSwiJVR5cGVkQXJyYXklIjp4LCIlVHlwZUVycm9yJSI6UiwiJVVpbnQ4QXJyYXklIjp0eXBlb2YgVWludDhB''@;'; put 'put ''cnJheT4idSI/STpVaW50OEFycmF5LCIlVWludDhDbGFtcGVkQXJyYXklIjp0eXBlb2YgVWludDhDbGFtcGVkQXJyYXk+InUiP0k6VWludDhDbGFtcGVkQXJyYXksIiVVaW50MTZBcnJheSUiOnR5cGVvZiBVaW50MTZBcnJheT4idSI/STpVaW50MTZBcnJheSwiJVVpbnQzMkFycmF5JSI6dHlw''@;'; put 'put ''ZW9mIFVpbnQzMkFycmF5PiJ1Ij9JOlVpbnQzMkFycmF5LCIlVVJJRXJyb3IlIjp6LCIlV2Vha01hcCUiOnR5cGVvZiBXZWFrTWFwPiJ1Ij9JOldlYWtNYXAsIiVXZWFrUmVmJSI6dHlwZW9mIFdlYWtSZWY+InUiP0k6V2Vha1JlZiwiJVdlYWtTZXQlIjp0eXBlb2YgV2Vha1NldD4idSI/STpX''@;'; put 'put ''ZWFrU2V0LCIlRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwlIjpnLCIlRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5JSI6QiwiJU9iamVjdC5kZWZpbmVQcm9wZXJ0eSUiOmllLCIlT2JqZWN0LmdldFByb3RvdHlwZU9mJSI6TWUsIiVNYXRoLmFicyUiOk4sIiVNYXRoLmZsb29yJSI6TywiJU1hdGgu''@;'; put 'put ''bWF4JSI6SywiJU1hdGgubWluJSI6WiwiJU1hdGgucG93JSI6WSwiJU1hdGgucm91bmQlIjpXLCIlTWF0aC5zaWduJSI6cSwiJVJlZmxlY3QuZ2V0UHJvdG90eXBlT2YlIjpaZX07aWYoVGUpdHJ5e251bGwuZXJyb3J9Y2F0Y2goeWUpe3ZhciBUPVRlKFRlKHllKSk7Q1siJUVycm9yLnByb3Rv''@;'; put 'put ''dHlwZSUiXT1UfXZhciBIPWZ1bmN0aW9uIHllKEtlKXt2YXIgamU7aWYoIiVBc3luY0Z1bmN0aW9uJSI9PT1LZSlqZT1KKCJhc3luYyBmdW5jdGlvbiAoKSB7fSIpO2Vsc2UgaWYoIiVHZW5lcmF0b3JGdW5jdGlvbiUiPT09S2UpamU9SigiZnVuY3Rpb24qICgpIHt9Iik7ZWxzZSBpZigiJUFz''@;'; put 'put ''eW5jR2VuZXJhdG9yRnVuY3Rpb24lIj09PUtlKWplPUooImFzeW5jIGZ1bmN0aW9uKiAoKSB7fSIpO2Vsc2UgaWYoIiVBc3luY0dlbmVyYXRvciUiPT09S2Upe3ZhciBrZT15ZSgiJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lIik7a2UmJihqZT1rZS5wcm90b3R5cGUpfWVsc2UgaWYoIiVBc3lu''@;'; put 'put ''Y0l0ZXJhdG9yUHJvdG90eXBlJSI9PT1LZSl7dmFyIEhlPXllKCIlQXN5bmNHZW5lcmF0b3IlIik7SGUmJlRlJiYoamU9VGUoSGUucHJvdG90eXBlKSl9cmV0dXJuIENbS2VdPWplLGplfSxqPXtfX3Byb3RvX186bnVsbCwiJUFycmF5QnVmZmVyUHJvdG90eXBlJSI6WyJBcnJheUJ1ZmZlciIs''@;'; put 'put ''InByb3RvdHlwZSJdLCIlQXJyYXlQcm90b3R5cGUlIjpbIkFycmF5IiwicHJvdG90eXBlIl0sIiVBcnJheVByb3RvX2VudHJpZXMlIjpbIkFycmF5IiwicHJvdG90eXBlIiwiZW50cmllcyJdLCIlQXJyYXlQcm90b19mb3JFYWNoJSI6WyJBcnJheSIsInByb3RvdHlwZSIsImZvckVhY2giXSwi''@;'; put 'put ''JUFycmF5UHJvdG9fa2V5cyUiOlsiQXJyYXkiLCJwcm90b3R5cGUiLCJrZXlzIl0sIiVBcnJheVByb3RvX3ZhbHVlcyUiOlsiQXJyYXkiLCJwcm90b3R5cGUiLCJ2YWx1ZXMiXSwiJUFzeW5jRnVuY3Rpb25Qcm90b3R5cGUlIjpbIkFzeW5jRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUFzeW5j''@;'; put 'put ''R2VuZXJhdG9yJSI6WyJBc3luY0dlbmVyYXRvckZ1bmN0aW9uIiwicHJvdG90eXBlIl0sIiVBc3luY0dlbmVyYXRvclByb3RvdHlwZSUiOlsiQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiIsInByb3RvdHlwZSIsInByb3RvdHlwZSJdLCIlQm9vbGVhblByb3RvdHlwZSUiOlsiQm9vbGVhbiIsInBy''@;'; put 'put ''b3RvdHlwZSJdLCIlRGF0YVZpZXdQcm90b3R5cGUlIjpbIkRhdGFWaWV3IiwicHJvdG90eXBlIl0sIiVEYXRlUHJvdG90eXBlJSI6WyJEYXRlIiwicHJvdG90eXBlIl0sIiVFcnJvclByb3RvdHlwZSUiOlsiRXJyb3IiLCJwcm90b3R5cGUiXSwiJUV2YWxFcnJvclByb3RvdHlwZSUiOlsiRXZh''@;'; put 'put ''bEVycm9yIiwicHJvdG90eXBlIl0sIiVGbG9hdDMyQXJyYXlQcm90b3R5cGUlIjpbIkZsb2F0MzJBcnJheSIsInByb3RvdHlwZSJdLCIlRmxvYXQ2NEFycmF5UHJvdG90eXBlJSI6WyJGbG9hdDY0QXJyYXkiLCJwcm90b3R5cGUiXSwiJUZ1bmN0aW9uUHJvdG90eXBlJSI6WyJGdW5jdGlvbiIs''@;'; put 'put ''InByb3RvdHlwZSJdLCIlR2VuZXJhdG9yJSI6WyJHZW5lcmF0b3JGdW5jdGlvbiIsInByb3RvdHlwZSJdLCIlR2VuZXJhdG9yUHJvdG90eXBlJSI6WyJHZW5lcmF0b3JGdW5jdGlvbiIsInByb3RvdHlwZSIsInByb3RvdHlwZSJdLCIlSW50OEFycmF5UHJvdG90eXBlJSI6WyJJbnQ4QXJyYXki''@;'; put 'put ''LCJwcm90b3R5cGUiXSwiJUludDE2QXJyYXlQcm90b3R5cGUlIjpbIkludDE2QXJyYXkiLCJwcm90b3R5cGUiXSwiJUludDMyQXJyYXlQcm90b3R5cGUlIjpbIkludDMyQXJyYXkiLCJwcm90b3R5cGUiXSwiJUpTT05QYXJzZSUiOlsiSlNPTiIsInBhcnNlIl0sIiVKU09OU3RyaW5naWZ5JSI6''@;'; put 'put ''WyJKU09OIiwic3RyaW5naWZ5Il0sIiVNYXBQcm90b3R5cGUlIjpbIk1hcCIsInByb3RvdHlwZSJdLCIlTnVtYmVyUHJvdG90eXBlJSI6WyJOdW1iZXIiLCJwcm90b3R5cGUiXSwiJU9iamVjdFByb3RvdHlwZSUiOlsiT2JqZWN0IiwicHJvdG90eXBlIl0sIiVPYmpQcm90b190b1N0cmluZyUi''@;'; put 'put ''OlsiT2JqZWN0IiwicHJvdG90eXBlIiwidG9TdHJpbmciXSwiJU9ialByb3RvX3ZhbHVlT2YlIjpbIk9iamVjdCIsInByb3RvdHlwZSIsInZhbHVlT2YiXSwiJVByb21pc2VQcm90b3R5cGUlIjpbIlByb21pc2UiLCJwcm90b3R5cGUiXSwiJVByb21pc2VQcm90b190aGVuJSI6WyJQcm9taXNl''@;'; put 'put ''IiwicHJvdG90eXBlIiwidGhlbiJdLCIlUHJvbWlzZV9hbGwlIjpbIlByb21pc2UiLCJhbGwiXSwiJVByb21pc2VfcmVqZWN0JSI6WyJQcm9taXNlIiwicmVqZWN0Il0sIiVQcm9taXNlX3Jlc29sdmUlIjpbIlByb21pc2UiLCJyZXNvbHZlIl0sIiVSYW5nZUVycm9yUHJvdG90eXBlJSI6WyJS''@;'; put 'put ''YW5nZUVycm9yIiwicHJvdG90eXBlIl0sIiVSZWZlcmVuY2VFcnJvclByb3RvdHlwZSUiOlsiUmVmZXJlbmNlRXJyb3IiLCJwcm90b3R5cGUiXSwiJVJlZ0V4cFByb3RvdHlwZSUiOlsiUmVnRXhwIiwicHJvdG90eXBlIl0sIiVTZXRQcm90b3R5cGUlIjpbIlNldCIsInByb3RvdHlwZSJdLCIl''@;'; put 'put ''U2hhcmVkQXJyYXlCdWZmZXJQcm90b3R5cGUlIjpbIlNoYXJlZEFycmF5QnVmZmVyIiwicHJvdG90eXBlIl0sIiVTdHJpbmdQcm90b3R5cGUlIjpbIlN0cmluZyIsInByb3RvdHlwZSJdLCIlU3ltYm9sUHJvdG90eXBlJSI6WyJTeW1ib2wiLCJwcm90b3R5cGUiXSwiJVN5bnRheEVycm9yUHJv''@;'; put 'put ''dG90eXBlJSI6WyJTeW50YXhFcnJvciIsInByb3RvdHlwZSJdLCIlVHlwZWRBcnJheVByb3RvdHlwZSUiOlsiVHlwZWRBcnJheSIsInByb3RvdHlwZSJdLCIlVHlwZUVycm9yUHJvdG90eXBlJSI6WyJUeXBlRXJyb3IiLCJwcm90b3R5cGUiXSwiJVVpbnQ4QXJyYXlQcm90b3R5cGUlIjpbIlVp''@;'; put 'put ''bnQ4QXJyYXkiLCJwcm90b3R5cGUiXSwiJVVpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlJSI6WyJVaW50OENsYW1wZWRBcnJheSIsInByb3RvdHlwZSJdLCIlVWludDE2QXJyYXlQcm90b3R5cGUlIjpbIlVpbnQxNkFycmF5IiwicHJvdG90eXBlIl0sIiVVaW50MzJBcnJheVByb3RvdHlwZSUi''@;'; put 'put ''OlsiVWludDMyQXJyYXkiLCJwcm90b3R5cGUiXSwiJVVSSUVycm9yUHJvdG90eXBlJSI6WyJVUklFcnJvciIsInByb3RvdHlwZSJdLCIlV2Vha01hcFByb3RvdHlwZSUiOlsiV2Vha01hcCIsInByb3RvdHlwZSJdLCIlV2Vha1NldFByb3RvdHlwZSUiOlsiV2Vha1NldCIsInByb3RvdHlwZSJd''@;'; put 'put ''fSxFPWIoNjU5OTIpLG09Yig3ODM2OCksQT1FLmNhbGwoZyxBcnJheS5wcm90b3R5cGUuY29uY2F0KSxhZT1FLmNhbGwoQixBcnJheS5wcm90b3R5cGUuc3BsaWNlKSxuZT1FLmNhbGwoZyxTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpLHNlPUUuY2FsbChnLFN0cmluZy5wcm90b3R5cGUuc2xp''@;'; put 'put ''Y2UpLENlPUUuY2FsbChnLFJlZ0V4cC5wcm90b3R5cGUuZXhlYyksVWU9L1teJS5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCUkKSkvZyxKZT0vXFwoXFwpPy9nLHhlPWZ1bmN0''@;'; put 'put ''aW9uKEtlLGplKXt2YXIgSGUsa2U9S2U7aWYobShqLGtlKSYmKGtlPSIlIisoSGU9altrZV0pWzBdKyIlIiksbShDLGtlKSl7dmFyIExlPUNba2VdO2lmKExlPT09eSYmKExlPUgoa2UpKSx0eXBlb2YgTGU+InUiJiYhamUpdGhyb3cgbmV3IFIoImludHJpbnNpYyAiK0tlKyIgZXhpc3RzLCBi''@;'; put 'put ''dXQgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGZpbGUgYW4gaXNzdWUhIik7cmV0dXJue2FsaWFzOkhlLG5hbWU6a2UsdmFsdWU6TGV9fXRocm93IG5ldyBGKCJpbnRyaW5zaWMgIitLZSsiIGRvZXMgbm90IGV4aXN0ISIpfTtjZS5leHBvcnRzPWZ1bmN0aW9uKEtlLGplKXtpZigic3RyaW5n''@;'; put 'put ''IiE9dHlwZW9mIEtlfHwwPT09S2UubGVuZ3RoKXRocm93IG5ldyBSKCJpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSYmImJvb2xlYW4iIT10eXBlb2YgamUpdGhyb3cgbmV3IFIoJyJhbGxvd01pc3NpbmciIGFyZ3VtZW50''@;'; put 'put ''IG11c3QgYmUgYSBib29sZWFuJyk7aWYobnVsbD09PUNlKC9eJT9bXiVdKiU/JC8sS2UpKXRocm93IG5ldyBGKCJgJWAgbWF5IG5vdCBiZSBwcmVzZW50IGFueXdoZXJlIGJ1dCBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIGludHJpbnNpYyBuYW1lIik7dmFyIGtlPWZ1bmN0aW9u''@;'; put 'put ''KEtlKXt2YXIgamU9c2UoS2UsMCwxKSxrZT1zZShLZSwtMSk7aWYoIiUiPT09amUmJiIlIiE9PWtlKXRocm93IG5ldyBGKCJpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgIik7aWYoIiUiPT09a2UmJiIlIiE9PWplKXRocm93IG5ldyBGKCJpbnZhbGlkIGlu''@;'; put 'put ''dHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgIik7dmFyIEhlPVtdO3JldHVybiBuZShLZSxVZSxmdW5jdGlvbihMZSxSZSxWZSxBZSl7SGVbSGUubGVuZ3RoXT1WZT9uZShBZSxKZSwiJDEiKTpSZXx8TGV9KSxIZX0oS2UpLEhlPWtlLmxlbmd0aD4wP2tlWzBdOiIiLExlPXhl''@;'; put 'put ''KCIlIitIZSsiJSIsamUpLFJlPUxlLm5hbWUsVmU9TGUudmFsdWUsQWU9ITEsRGU9TGUuYWxpYXM7RGUmJihIZT1EZVswXSxhZShrZSxBKFswLDFdLERlKSkpO2Zvcih2YXIgX3Q9MSxydD0hMDtfdDxrZS5sZW5ndGg7X3QrPTEpe3ZhciBRZT1rZVtfdF0sc249c2UoUWUsMCwxKSx2dD1zZShR''@;'; put 'put ''ZSwtMSk7aWYoKCciJz09PXNufHwiJyI9PT1zbnx8ImAiPT09c258fCciJz09PXZ0fHwiJyI9PT12dHx8ImAiPT09dnQpJiZzbiE9PXZ0KXRocm93IG5ldyBGKCJwcm9wZXJ0eSBuYW1lcyB3aXRoIHF1b3RlcyBtdXN0IGhhdmUgbWF0Y2hpbmcgcXVvdGVzIik7aWYoKCJjb25zdHJ1Y3RvciI9''@;'; put 'put ''PT1RZXx8IXJ0KSYmKEFlPSEwKSxtKEMsUmU9IiUiKyhIZSs9Ii4iK1FlKSsiJSIpKVZlPUNbUmVdO2Vsc2UgaWYobnVsbCE9VmUpe2lmKCEoUWUgaW4gVmUpKXtpZighamUpdGhyb3cgbmV3IFIoImJhc2UgaW50cmluc2ljIGZvciAiK0tlKyIgZXhpc3RzLCBidXQgdGhlIHByb3BlcnR5IGlz''@;'; put 'put ''IG5vdCBhdmFpbGFibGUuIik7cmV0dXJufWlmKHJlJiZfdCsxPj1rZS5sZW5ndGgpe3ZhciBTdD1yZShWZSxRZSk7VmU9KHJ0PSEhU3QpJiYiZ2V0ImluIFN0JiYhKCJvcmlnaW5hbFZhbHVlImluIFN0LmdldCk/U3QuZ2V0OlZlW1FlXX1lbHNlIHJ0PW0oVmUsUWUpLFZlPVZlW1FlXTtydCYm''@;'; put 'put ''IUFlJiYoQ1tSZV09VmUpfX1yZXR1cm4gVmV9fSw5MDQxMTpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89e3NzOiJzZWt1bmRcdTAxMTdfc2VrdW5kXHUwMTdlaVx1MDE3M19zZWt1bmRlcyIsbToibWludXRcdTAxMTdfbWludXRcdTAxMTdzX21pbnV0''@;'; put 'put ''XHUwMTE5IixtbToibWludXRcdTAxMTdzX21pbnVcdTAxMGRpXHUwMTczX21pbnV0ZXMiLGg6InZhbGFuZGFfdmFsYW5kb3NfdmFsYW5kXHUwMTA1IixoaDoidmFsYW5kb3NfdmFsYW5kXHUwMTczX3ZhbGFuZGFzIixkOiJkaWVuYV9kaWVub3NfZGllblx1MDEwNSIsZGQ6ImRpZW5vc19kaWVu''@;'; put 'put ''XHUwMTczX2RpZW5hcyIsTToibVx1MDExN251b19tXHUwMTE3bmVzaW9fbVx1MDExN25lc1x1MDEyZiIsTU06Im1cdTAxMTduZXNpYWlfbVx1MDExN25lc2lcdTAxNzNfbVx1MDExN25lc2l1cyIseToibWV0YWlfbWV0XHUwMTczX21ldHVzIix5eToibWV0YWlfbWV0XHUwMTczX21ldHVzIn07''@;'; put 'put ''ZnVuY3Rpb24gVih6LE4sTyxLKXtyZXR1cm4gTj9QKE8pWzBdOks/UChPKVsxXTpQKE8pWzJdfWZ1bmN0aW9uIHcoeil7cmV0dXJuIHolMTA9PTB8fHo+MTAmJno8MjB9ZnVuY3Rpb24gUCh6KXtyZXR1cm4gX1t6XS5zcGxpdCgiXyIpfWZ1bmN0aW9uIEYoeixOLE8sSyl7dmFyIFo9eisiICI7''@;'; put 'put ''cmV0dXJuIDE9PT16P1orVigwLE4sT1swXSxLKTpOP1orKHcoeik/UChPKVsxXTpQKE8pWzBdKTpLP1orUChPKVsxXTpaKyh3KHopP1AoTylbMV06UChPKVsyXSl9SS5kZWZpbmVMb2NhbGUoImx0Iix7bW9udGhzOntmb3JtYXQ6InNhdXNpb192YXNhcmlvX2tvdm9fYmFsYW5kXHUwMTdlaW9f''@;'; put 'put ''Z2VndVx1MDE3ZVx1MDExN3NfYmlyXHUwMTdlZWxpb19saWVwb3NfcnVncGpcdTAxNmJcdTAxMGRpb19ydWdzXHUwMTE3am9fc3BhbGlvX2xhcGtyaVx1MDEwZGlvX2dydW9kXHUwMTdlaW8iLnNwbGl0KCJfIiksc3RhbmRhbG9uZToic2F1c2lzX3Zhc2FyaXNfa292YXNfYmFsYW5kaXNfZ2Vn''@;'; put 'put ''dVx1MDE3ZVx1MDExN19iaXJcdTAxN2VlbGlzX2xpZXBhX3J1Z3BqXHUwMTZidGlzX3J1Z3NcdTAxMTdqaXNfc3BhbGlzX2xhcGtyaXRpc19ncnVvZGlzIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9EW29EXT8oXFtbXlxbXF1dKlxdfFxzKStNTU1NP3xNTU1NPyhcW1teXFtcXV0qXF18XHMpK0Rb''@;'; put 'put ''b0RdPy99LG1vbnRoc1Nob3J0OiJzYXVfdmFzX2tvdl9iYWxfZ2VnX2Jpcl9saWVfcmdwX3Jnc19zcGFfbGFwX2dyZCIuc3BsaXQoIl8iKSx3ZWVrZGF5czp7Zm9ybWF0OiJzZWttYWRpZW5cdTAxMmZfcGlybWFkaWVuXHUwMTJmX2FudHJhZGllblx1MDEyZl90cmVcdTAxMGRpYWRpZW5cdTAx''@;'; put 'put ''MmZfa2V0dmlydGFkaWVuXHUwMTJmX3Blbmt0YWRpZW5cdTAxMmZfXHUwMTYxZVx1MDE2MXRhZGllblx1MDEyZiIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJzZWttYWRpZW5pc19waXJtYWRpZW5pc19hbnRyYWRpZW5pc190cmVcdTAxMGRpYWRpZW5pc19rZXR2aXJ0YWRpZW5pc19wZW5rdGFk''@;'; put 'put ''aWVuaXNfXHUwMTYxZVx1MDE2MXRhZGllbmlzIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9kZGRkIEhIOm1tL30sd2Vla2RheXNTaG9ydDoiU2VrX1Bpcl9BbnRfVHJlX0tldF9QZW5fXHUwMTYwZVx1MDE2MSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU19QX0FfVF9LX1BuX1x1MDE2MCIuc3Bs''@;'; put 'put ''aXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS1NTS1ERCIsTEw6IllZWVkgW20uXSBNTU1NIEQgW2QuXSIsTExMOiJZWVlZIFttLl0gTU1NTSBEIFtkLl0sIEhIOm1tIFt2YWwuXSIsTExMTDoiWVlZ''@;'; put 'put ''WSBbbS5dIE1NTU0gRCBbZC5dLCBkZGRkLCBISDptbSBbdmFsLl0iLGw6IllZWVktTU0tREQiLGxsOiJZWVlZIFttLl0gTU1NTSBEIFtkLl0iLGxsbDoiWVlZWSBbbS5dIE1NTU0gRCBbZC5dLCBISDptbSBbdmFsLl0iLGxsbGw6IllZWVkgW20uXSBNTU1NIEQgW2QuXSwgZGRkLCBISDptbSBb''@;'; put 'put ''dmFsLl0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDE2MGlhbmRpZW5dIExUIixuZXh0RGF5OiJbUnl0b2pdIExUIixuZXh0V2VlazoiZGRkZCBMVCIsbGFzdERheToiW1Zha2FyXSBMVCIsbGFzdFdlZWs6IltQcmFcdTAxMTdqdXNcdTAxMmZdIGRkZGQgTFQiLHNhbWVFbHNlOiJMIn0scmVs''@;'; put 'put ''YXRpdmVUaW1lOntmdXR1cmU6InBvICVzIixwYXN0OiJwcmllXHUwMTYxICVzIixzOmZ1bmN0aW9uIHAoeixOLE8sSyl7cmV0dXJuIE4/ImtlbGlvcyBzZWt1bmRcdTAxMTdzIjpLPyJrZWxpXHUwMTczIHNla3VuZFx1MDE3ZWlcdTAxNzMiOiJrZWxpYXMgc2VrdW5kZXMifSxzczpGLG06Vixt''@;'; put 'put ''bTpGLGg6VixoaDpGLGQ6VixkZDpGLE06VixNTTpGLHk6Vix5eTpGfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LW9qaS8sb3JkaW5hbDpmdW5jdGlvbih6KXtyZXR1cm4geisiLW9qaSJ9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDkwNTA5OihjZSxYLGIpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBJPWIoNzE5OTMpLF89YigyNzA1NCkuQnVmZmVyLHA9YigzMjQ3KSxWPV8uYWxsb2MoMTI4KSx3PTY0O2Z1bmN0aW9uIFAoRixSKXtwLmNhbGwodGhpcywiZGlnZXN0IiksInN0cmluZyI9PXR5cGVvZiBSJiYoUj1fLmZyb20oUikpLHRoaXMuX2FsZz1GLHRoaXMu''@;'; put 'put ''X2tleT1SLFIubGVuZ3RoPnc/Uj1GKFIpOlIubGVuZ3RoPHcmJihSPV8uY29uY2F0KFtSLFZdLHcpKTtmb3IodmFyIHo9dGhpcy5faXBhZD1fLmFsbG9jVW5zYWZlKHcpLE49dGhpcy5fb3BhZD1fLmFsbG9jVW5zYWZlKHcpLE89MDtPPHc7TysrKXpbT109NTReUltPXSxOW09dPTkyXlJbT107''@;'; put 'put ''dGhpcy5faGFzaD1bel19SShQLHApLFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oRil7dGhpcy5faGFzaC5wdXNoKEYpfSxQLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgRj10aGlzLl9hbGcoXy5jb25jYXQodGhpcy5faGFzaCkpO3JldHVybiB0aGlzLl9hbGcoXy5jb25j''@;'; put 'put ''YXQoW3RoaXMuX29wYWQsRl0pKX0sY2UuZXhwb3J0cz1QfSw5MDUxODooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1YO0kudmVyc2lvbj1iKDE2MzYpLnJFLEkudXRpbHM9YigzMTM2KSxJLnJhbmQ9YigzNTI5NCksSS5jdXJ2ZT1iKDg3MjkpLEkuY3VydmVzPWIoMjM0MDEpLEkuZWM9''@;'; put 'put ''YigyOTA0MiksSS5lZGRzYT1iKDgzMDQ1KX0sOTE0MjY6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7WC5yYW5kb21CeXRlcz1YLnJuZz1YLnBzZXVkb1JhbmRvbUJ5dGVzPVgucHJuZz1iKDMzNDIpLFguY3JlYXRlSGFzaD1YLkhhc2g9Yig2NzIxMSksWC5jcmVhdGVIbWFjPVguSG1hYz1iKDU2''@;'; put 'put ''NDMyKTt2YXIgST1iKDk5NTYwKSxfPU9iamVjdC5rZXlzKEkpLHA9WyJzaGExIiwic2hhMjI0Iiwic2hhMjU2Iiwic2hhMzg0Iiwic2hhNTEyIiwibWQ1Iiwicm1kMTYwIl0uY29uY2F0KF8pO1guZ2V0SGFzaGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHB9O3ZhciBWPWIoOTMzOTcpO1gucGJrZGYy''@;'; put 'put ''PVYucGJrZGYyLFgucGJrZGYyU3luYz1WLnBia2RmMlN5bmM7dmFyIHc9Yig4ODg2Mik7WC5DaXBoZXI9dy5DaXBoZXIsWC5jcmVhdGVDaXBoZXI9dy5jcmVhdGVDaXBoZXIsWC5DaXBoZXJpdj13LkNpcGhlcml2LFguY3JlYXRlQ2lwaGVyaXY9dy5jcmVhdGVDaXBoZXJpdixYLkRlY2lwaGVy''@;'; put 'put ''PXcuRGVjaXBoZXIsWC5jcmVhdGVEZWNpcGhlcj13LmNyZWF0ZURlY2lwaGVyLFguRGVjaXBoZXJpdj13LkRlY2lwaGVyaXYsWC5jcmVhdGVEZWNpcGhlcml2PXcuY3JlYXRlRGVjaXBoZXJpdixYLmdldENpcGhlcnM9dy5nZXRDaXBoZXJzLFgubGlzdENpcGhlcnM9dy5saXN0Q2lwaGVyczt2''@;'; put 'put ''YXIgUD1iKDQzNzcpO1guRGlmZmllSGVsbG1hbkdyb3VwPVAuRGlmZmllSGVsbG1hbkdyb3VwLFguY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwPVAuY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwLFguZ2V0RGlmZmllSGVsbG1hbj1QLmdldERpZmZpZUhlbGxtYW4sWC5jcmVhdGVEaWZmaWVIZWxs''@;'; put 'put ''bWFuPVAuY3JlYXRlRGlmZmllSGVsbG1hbixYLkRpZmZpZUhlbGxtYW49UC5EaWZmaWVIZWxsbWFuO3ZhciBGPWIoNzkxNDMpO1guY3JlYXRlU2lnbj1GLmNyZWF0ZVNpZ24sWC5TaWduPUYuU2lnbixYLmNyZWF0ZVZlcmlmeT1GLmNyZWF0ZVZlcmlmeSxYLlZlcmlmeT1GLlZlcmlmeSxYLmNy''@;'; put 'put ''ZWF0ZUVDREg9Yig4NzMwMyk7dmFyIFI9Yig1Mjk2NSk7WC5wdWJsaWNFbmNyeXB0PVIucHVibGljRW5jcnlwdCxYLnByaXZhdGVFbmNyeXB0PVIucHJpdmF0ZUVuY3J5cHQsWC5wdWJsaWNEZWNyeXB0PVIucHVibGljRGVjcnlwdCxYLnByaXZhdGVEZWNyeXB0PVIucHJpdmF0ZURlY3J5cHQ7''@;'; put 'put ''dmFyIHo9Yig5NjgyKTtYLnJhbmRvbUZpbGw9ei5yYW5kb21GaWxsLFgucmFuZG9tRmlsbFN5bmM9ei5yYW5kb21GaWxsU3luYyxYLmNyZWF0ZUNyZWRlbnRpYWxzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJzb3JyeSwgY3JlYXRlQ3JlZGVudGlhbHMgaXMgbm90IGltcGxlbWVudGVk''@;'; put 'put ''IHlldFxud2UgYWNjZXB0IHB1bGwgcmVxdWVzdHNcbmh0dHBzOi8vZ2l0aHViLmNvbS9icm93c2VyaWZ5L2NyeXB0by1icm93c2VyaWZ5Iil9LFguY29uc3RhbnRzPXtESF9DSEVDS19QX05PVF9TQUZFX1BSSU1FOjIsREhfQ0hFQ0tfUF9OT1RfUFJJTUU6MSxESF9VTkFCTEVfVE9fQ0hFQ0tf''@;'; put 'put ''R0VORVJBVE9SOjQsREhfTk9UX1NVSVRBQkxFX0dFTkVSQVRPUjo4LE5QTl9FTkFCTEVEOjEsQUxQTl9FTkFCTEVEOjEsUlNBX1BLQ1MxX1BBRERJTkc6MSxSU0FfU1NMVjIzX1BBRERJTkc6MixSU0FfTk9fUEFERElORzozLFJTQV9QS0NTMV9PQUVQX1BBRERJTkc6NCxSU0FfWDkzMV9QQURE''@;'; put 'put ''SU5HOjUsUlNBX1BLQ1MxX1BTU19QQURESU5HOjYsUE9JTlRfQ09OVkVSU0lPTl9DT01QUkVTU0VEOjIsUE9JTlRfQ09OVkVSU0lPTl9VTkNPTVBSRVNTRUQ6NCxQT0lOVF9DT05WRVJTSU9OX0hZQlJJRDo2fX0sOTE1NTg6KGNlLFgsYik9Pnt2YXIgST1YO0kuZGVyPWIoNTU5NDEpLEkucGVt''@;'; put 'put ''PWIoNTkzMTYpfSw5MTYyNzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDk3NjY5KSxfPWIoMjcyMDMpLHA9Yig2MzM2MSk7Y2UuZXhwb3J0cz1JP2Z1bmN0aW9uKHcpe3JldHVybiBJKHcpfTpfP2Z1bmN0aW9uKHcpe2lmKCF3fHwib2JqZWN0IiE9dHlwZW9mIHcmJiJmdW5jdGlv''@;'; put 'put ''biIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoImdldFByb3RvOiBub3QgYW4gb2JqZWN0Iik7cmV0dXJuIF8odyl9OnA/ZnVuY3Rpb24odyl7cmV0dXJuIHAodyl9Om51bGx9LDkxODIxOihjZSxYLGIpPT57dmFyIEk9YigxMjM3NSksXz1iKDI3MDU0KS5CdWZmZXIscD1iKDMyNDcp''@;'; put 'put ''O2Z1bmN0aW9uIHcoUCxGLFIseil7cC5jYWxsKHRoaXMpLHRoaXMuX2NpcGhlcj1uZXcgSS5BRVMoRiksdGhpcy5fcHJldj1fLmZyb20oUiksdGhpcy5fY2FjaGU9Xy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9zZWNDYWNoZT1fLmFsbG9jVW5zYWZlKDApLHRoaXMuX2RlY3J5cHQ9eix0aGlzLl9t''@;'; put 'put ''b2RlPVB9Yig3MTk5MykodyxwKSx3LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFApe3JldHVybiB0aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxQLHRoaXMuX2RlY3J5cHQpfSx3LnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt0aGlzLl9jaXBoZXIuc2NydWIoKX0sY2UuZXhwb3J0cz13''@;'; put 'put ''fSw5MTk1NzpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gXyhWLHcsUCl7dmFyIEY9VisiICI7c3dpdGNoKFApe2Nhc2Uic3MiOnJldHVybiBGKygxPT09Vj8ic2VrdW5kYSI6Mj09PVZ8fDM9PT1WfHw0PT09Vj8ic2VrdW5kZSI6InNla3VuZGki''@;'; put 'put ''KTtjYXNlIm0iOnJldHVybiB3PyJqZWRuYSBtaW51dGEiOiJqZWRuZSBtaW51dGUiO2Nhc2UibW0iOnJldHVybiBGKygxPT09Vj8ibWludXRhIjoyPT09Vnx8Mz09PVZ8fDQ9PT1WPyJtaW51dGUiOiJtaW51dGEiKTtjYXNlImgiOnJldHVybiB3PyJqZWRhbiBzYXQiOiJqZWRub2cgc2F0YSI7''@;'; put 'put ''Y2FzZSJoaCI6cmV0dXJuIEYrKDE9PT1WPyJzYXQiOjI9PT1WfHwzPT09Vnx8ND09PVY/InNhdGEiOiJzYXRpIik7Y2FzZSJkZCI6cmV0dXJuIEYrKDE9PT1WPyJkYW4iOiJkYW5hIik7Y2FzZSJNTSI6cmV0dXJuIEYrKDE9PT1WPyJtamVzZWMiOjI9PT1WfHwzPT09Vnx8ND09PVY/Im1qZXNl''@;'; put 'put ''Y2EiOiJtamVzZWNpIik7Y2FzZSJ5eSI6cmV0dXJuIEYrKDE9PT1WPyJnb2RpbmEiOjI9PT1WfHwzPT09Vnx8ND09PVY/ImdvZGluZSI6ImdvZGluYSIpfX1JLmRlZmluZUxvY2FsZSgiaHIiLHttb250aHM6e2Zvcm1hdDoic2lqZVx1MDEwZG5qYV92ZWxqYVx1MDEwZGVfb1x1MDE3ZXVqa2Ff''@;'; put 'put ''dHJhdm5qYV9zdmlibmphX2xpcG5qYV9zcnBuamFfa29sb3ZvemFfcnVqbmFfbGlzdG9wYWRhX3N0dWRlbm9nYV9wcm9zaW5jYSIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJzaWplXHUwMTBkYW5qX3ZlbGphXHUwMTBkYV9vXHUwMTdldWpha190cmF2YW5qX3N2aWJhbmpfbGlwYW5qX3NycGFu''@;'; put 'put ''al9rb2xvdm96X3J1amFuX2xpc3RvcGFkX3N0dWRlbmlfcHJvc2luYWMiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0OiJzaWouX3ZlbGouX29cdTAxN2V1Ll90cmEuX3N2aS5fbGlwLl9zcnAuX2tvbC5fcnVqLl9saXMuX3N0dS5fcHJvLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEw''@;'; put 'put ''LHdlZWtkYXlzOiJuZWRqZWxqYV9wb25lZGplbGpha191dG9yYWtfc3JpamVkYV9cdTAxMGRldHZydGFrX3BldGFrX3N1Ym90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZWQuX3Bvbi5fdXRvLl9zcmkuX1x1MDEwZGV0Ll9wZXQuX3N1Yi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46''@;'; put 'put ''Im5lX3BvX3V0X3NyX1x1MDEwZGVfcGVfc3UiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRG8gTU1NTSBZWVlZIixMTEw6IkRvIE1NTU0gWVlZWSBIOm1tIixMTExMOiJk''@;'; put 'put ''ZGRkLCBEbyBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbZGFuYXMgdV0gTFQiLG5leHREYXk6IltzdXRyYSB1XSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbdV0gW25lZGplbGp1XSBbdV0gTFQiO2Nhc2UgMzpy''@;'; put 'put ''ZXR1cm4iW3VdIFtzcmlqZWR1XSBbdV0gTFQiO2Nhc2UgNjpyZXR1cm4iW3VdIFtzdWJvdHVdIFt1XSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbdV0gZGRkZCBbdV0gTFQifX0sbGFzdERheToiW2p1XHUwMTBkZXIgdV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7''@;'; put 'put ''c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3Byb1x1MDE2MWx1XSBbbmVkamVsanVdIFt1XSBMVCI7Y2FzZSAzOnJldHVybiJbcHJvXHUwMTYxbHVdIFtzcmlqZWR1XSBbdV0gTFQiO2Nhc2UgNjpyZXR1cm4iW3Byb1x1MDE2MWxlXSBbc3Vib3RlXSBbdV0gTFQiO2Nhc2UgMTpj''@;'; put 'put ''YXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3Byb1x1MDE2MWxpXSBkZGRkIFt1XSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ6YSAlcyIscGFzdDoicHJpamUgJXMiLHM6InBhciBzZWt1bmRpIixzczpfLG06XyxtbTpfLGg6XyxoaDpfLGQ6ImRhbiIsZGQ6''@;'; put 'put ''XyxNOiJtamVzZWMiLE1NOl8seToiZ29kaW51Iix5eTpffSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGIoOTc1ODYpKX0sOTIzOTE6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3Qi''@;'; put 'put ''O0kuZGVmaW5lTG9jYWxlKCJtayIse21vbnRoczoiXHUwNDU4XHUwNDMwXHUwNDNkXHUwNDQzXHUwNDMwXHUwNDQwXHUwNDM4X1x1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQ0M1x1MDQzMFx1MDQ0MFx1MDQzOF9cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMwXHUwNDNmXHUwNDQw''@;'; put 'put ''XHUwNDM4XHUwNDNiX1x1MDQzY1x1MDQzMFx1MDQ1OF9cdTA0NThcdTA0NDNcdTA0M2RcdTA0MzhfXHUwNDU4XHUwNDQzXHUwNDNiXHUwNDM4X1x1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Ml9cdTA0NDFcdTA0MzVcdTA0M2ZcdTA0NDJcdTA0MzVcdTA0M2NcdTA0MzJcdTA0''@;'; put 'put ''NDBcdTA0MzhfXHUwNDNlXHUwNDNhXHUwNDQyXHUwNDNlXHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4X1x1MDQzZFx1MDQzZVx1MDQzNVx1MDQzY1x1MDQzMlx1MDQ0MFx1MDQzOF9cdTA0MzRcdTA0MzVcdTA0M2FcdTA0MzVcdTA0M2NcdTA0MzJcdTA0NDBcdTA0MzgiLnNwbGl0KCJfIiksbW9u''@;'; put 'put ''dGhzU2hvcnQ6Ilx1MDQ1OFx1MDQzMFx1MDQzZF9cdTA0NDRcdTA0MzVcdTA0MzJfXHUwNDNjXHUwNDMwXHUwNDQwX1x1MDQzMFx1MDQzZlx1MDQ0MF9cdTA0M2NcdTA0MzBcdTA0NThfXHUwNDU4XHUwNDQzXHUwNDNkX1x1MDQ1OFx1MDQ0M1x1MDQzYl9cdTA0MzBcdTA0MzJcdTA0MzNfXHUw''@;'; put 'put ''NDQxXHUwNDM1XHUwNDNmX1x1MDQzZVx1MDQzYVx1MDQ0Ml9cdTA0M2RcdTA0M2VcdTA0MzVfXHUwNDM0XHUwNDM1XHUwNDNhIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0MzBfXHUwNDNmXHUwNDNlXHUwNDNkXHUwNDM1XHUwNDM0XHUw''@;'; put 'put ''NDM1XHUwNDNiXHUwNDNkXHUwNDM4XHUwNDNhX1x1MDQzMlx1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzZFx1MDQzOFx1MDQzYV9cdTA0NDFcdTA0NDBcdTA0MzVcdTA0MzRcdTA0MzBfXHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDQwXHUwNDQyXHUwNDNlXHUwNDNhX1x1MDQzZlx1MDQzNVx1''@;'; put 'put ''MDQ0Mlx1MDQzZVx1MDQzYV9cdTA0NDFcdTA0MzBcdTA0MzFcdTA0M2VcdTA0NDJcdTA0MzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNDNkXHUwNDM1XHUwNDM0X1x1MDQzZlx1MDQzZVx1MDQzZF9cdTA0MzJcdTA0NDJcdTA0M2VfXHUwNDQxXHUwNDQwXHUwNDM1X1x1MDQ0N1x1''@;'; put 'put ''MDQzNVx1MDQ0Ml9cdTA0M2ZcdTA0MzVcdTA0NDJfXHUwNDQxXHUwNDMwXHUwNDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0M2RlX1x1MDQzZm9fXHUwNDMyXHUwNDQyX1x1MDQ0MVx1MDQ0MF9cdTA0NDdcdTA0MzVfXHUwNDNmXHUwNDM1X1x1MDQ0MWEiLnNwbGl0KCJfIiksbG9u''@;'; put 'put ''Z0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQxNFx1MDQzNVx1MDQzZFx1MDQz''@;'; put 'put ''NVx1MDQ0MSBcdTA0MzJcdTA0M2VdIExUIixuZXh0RGF5OiJbXHUwNDIzXHUwNDQyXHUwNDQwXHUwNDM1IFx1MDQzMlx1MDQzZV0gTFQiLG5leHRXZWVrOiJbXHUwNDEyXHUwNDNlXSBkZGRkIFtcdTA0MzJcdTA0M2VdIExUIixsYXN0RGF5OiJbXHUwNDEyXHUwNDQ3XHUwNDM1XHUwNDQwXHUw''@;'; put 'put ''NDMwIFx1MDQzMlx1MDQzZV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpjYXNlIDM6Y2FzZSA2OnJldHVybiJbXHUwNDE4XHUwNDM3XHUwNDNjXHUwNDM4XHUwNDNkXHUwNDMwXHUwNDQyXHUwNDMwXHUwNDQyXHUwNDMwXSBkZGRkIFtcdTA0MzJc''@;'; put 'put ''dTA0M2VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIltcdTA0MThcdTA0MzdcdTA0M2NcdTA0MzhcdTA0M2RcdTA0MzBcdTA0NDJcdTA0MzhcdTA0M2VcdTA0NDJdIGRkZGQgW1x1MDQzMlx1MDQzZV0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1''@;'; put 'put ''dHVyZToiXHUwNDM3XHUwNDMwICVzIixwYXN0OiJcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0MzQgJXMiLHM6Ilx1MDQzZFx1MDQzNVx1MDQzYVx1MDQzZVx1MDQzYlx1MDQzYVx1MDQ0MyBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzgiLHNzOiIlZCBcdTA0NDFcdTA0''@;'; put 'put ''MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzgiLG06Ilx1MDQzNVx1MDQzNFx1MDQzZFx1MDQzMCBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzAiLG1tOiIlZCBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzgiLGg6Ilx1MDQzNVx1MDQzNFx1MDQz''@;'; put 'put ''NVx1MDQzZCBcdTA0NDdcdTA0MzBcdTA0NDEiLGhoOiIlZCBcdTA0NDdcdTA0MzBcdTA0NDFcdTA0MzAiLGQ6Ilx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzZCBcdTA0MzRcdTA0MzVcdTA0M2QiLGRkOiIlZCBcdTA0MzRcdTA0MzVcdTA0M2RcdTA0MzAiLE06Ilx1MDQzNVx1MDQzNFx1MDQzNVx1''@;'; put 'put ''MDQzZCBcdTA0M2NcdTA0MzVcdTA0NDFcdTA0MzVcdTA0NDYiLE1NOiIlZCBcdTA0M2NcdTA0MzVcdTA0NDFcdTA0MzVcdTA0NDZcdTA0MzgiLHk6Ilx1MDQzNVx1MDQzNFx1MDQzZFx1MDQzMCBcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzAiLHl5OiIlZCBcdTA0MzNcdTA0''@;'; put 'put ''M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzgifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0MzVcdTA0MzJ8XHUwNDM1XHUwNDNkfFx1MDQ0Mlx1MDQzOHxcdTA0MzJcdTA0Mzh8XHUwNDQwXHUwNDM4fFx1MDQzY1x1MDQzOCkvLG9yZGluYWw6ZnVuY3Rpb24ocCl7dmFy''@;'; put 'put ''IFY9cCUxMCx3PXAlMTAwO3JldHVybiAwPT09cD9wKyItXHUwNDM1XHUwNDMyIjowPT09dz9wKyItXHUwNDM1XHUwNDNkIjp3PjEwJiZ3PDIwP3ArIi1cdTA0NDJcdTA0MzgiOjE9PT1WP3ArIi1cdTA0MzJcdTA0MzgiOjI9PT1WP3ArIi1cdTA0NDBcdTA0MzgiOjc9PT1WfHw4PT09Vj9wKyIt''@;'; put 'put ''XHUwNDNjXHUwNDM4IjpwKyItXHUwNDQyXHUwNDM4In0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGIoOTc1ODYpKX0sOTI1ODA6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigyODM2NyksXz1iKDQ2OTI2KSxwPWIoMzE0ODMpLFY9YigxMTA4KSx3PWIoNzU0MjQpLFA9Yig2OTkxNyks''@;'; put 'put ''Rj1iKDQyOTI2KSxSPWIoODg3ODgpLHo9Yig2NjU0MiksTj1iKDU2NzQ1KSxPPWIoNDEyNTIpLEs9IVImJiFOKCJmaWx0ZXIiLGZ1bmN0aW9uKCl7fSksWj0hUiYmIUsmJk8oImZpbHRlciIsVHlwZUVycm9yKSxZPVJ8fEt8fFosVz1QKGZ1bmN0aW9uKCl7Zm9yKHZhciByZSx1ZSxxPXRoaXMu''@;'; put 'put ''aXRlcmF0b3IsZWU9dGhpcy5wcmVkaWNhdGUsSj10aGlzLm5leHQ7Oyl7aWYocmU9VihfKEoscSkpLHRoaXMuZG9uZT0hIXJlLmRvbmUpcmV0dXJuO2lmKEYocSxlZSxbdWU9cmUudmFsdWUsdGhpcy5jb3VudGVyKytdLCEwKSlyZXR1cm4gdWV9fSk7SSh7dGFyZ2V0OiJJdGVyYXRvciIscHJv''@;'; put 'put ''dG86ITAscmVhbDohMCxmb3JjZWQ6WX0se2ZpbHRlcjpmdW5jdGlvbihlZSl7Vih0aGlzKTt0cnl7cChlZSl9Y2F0Y2goSil7eih0aGlzLCJ0aHJvdyIsSil9cmV0dXJuIFo/XyhaLHRoaXMsZWUpOm5ldyBXKHcodGhpcykse3ByZWRpY2F0ZTplZX0pfX0pfSw5MjczNjooY2UsWCxiKT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgST1iKDQ1NzApLF89Yig1ODQxMykscD1iKDQ2NzU4KSxWPWIoODM3OTgpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oUCxGLFIpe2lmKCFQfHwib2JqZWN0IiE9dHlwZW9mIFAmJiJmdW5jdGlvbiIhPXR5cGVvZiBQKXRocm93IG5ldyBwKCJgb2JqYCBtdXN0IGJlIGFuIG9i''@;'; put 'put ''amVjdCBvciBhIGZ1bmN0aW9uYCIpO2lmKCJzdHJpbmciIT10eXBlb2YgRiYmInN5bWJvbCIhPXR5cGVvZiBGKXRocm93IG5ldyBwKCJgcHJvcGVydHlgIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBzeW1ib2xgIik7aWYoYXJndW1lbnRzLmxlbmd0aD4zJiYiYm9vbGVhbiIhPXR5cGVvZiBhcmd1''@;'; put 'put ''bWVudHNbM10mJm51bGwhPT1hcmd1bWVudHNbM10pdGhyb3cgbmV3IHAoImBub25FbnVtZXJhYmxlYCwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYSBib29sZWFuIG9yIG51bGwiKTtpZihhcmd1bWVudHMubGVuZ3RoPjQmJiJib29sZWFuIiE9dHlwZW9mIGFyZ3VtZW50c1s0XSYmbnVsbCE9PWFy''@;'; put 'put ''Z3VtZW50c1s0XSl0aHJvdyBuZXcgcCgiYG5vbldyaXRhYmxlYCwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYSBib29sZWFuIG9yIG51bGwiKTtpZihhcmd1bWVudHMubGVuZ3RoPjUmJiJib29sZWFuIiE9dHlwZW9mIGFyZ3VtZW50c1s1XSYmbnVsbCE9PWFyZ3VtZW50c1s1XSl0aHJvdyBuZXcg''@;'; put 'put ''cCgiYG5vbkNvbmZpZ3VyYWJsZWAsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgYm9vbGVhbiBvciBudWxsIik7aWYoYXJndW1lbnRzLmxlbmd0aD42JiYiYm9vbGVhbiIhPXR5cGVvZiBhcmd1bWVudHNbNl0pdGhyb3cgbmV3IHAoImBsb29zZWAsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgYm9v''@;'; put 'put ''bGVhbiIpO3ZhciB6PWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106bnVsbCxOPWFyZ3VtZW50cy5sZW5ndGg+ND9hcmd1bWVudHNbNF06bnVsbCxPPWFyZ3VtZW50cy5sZW5ndGg+NT9hcmd1bWVudHNbNV06bnVsbCxLPWFyZ3VtZW50cy5sZW5ndGg+NiYmYXJndW1lbnRzWzZdLFo9''@;'; put 'put ''ISFWJiZWKFAsRik7aWYoSSlJKFAsRix7Y29uZmlndXJhYmxlOm51bGw9PT1PJiZaP1ouY29uZmlndXJhYmxlOiFPLGVudW1lcmFibGU6bnVsbD09PXomJlo/Wi5lbnVtZXJhYmxlOiF6LHZhbHVlOlIsd3JpdGFibGU6bnVsbD09PU4mJlo/Wi53cml0YWJsZTohTn0pO2Vsc2V7aWYoIUsmJih6''@;'; put 'put ''fHxOfHxPKSl0aHJvdyBuZXcgXygiVGhpcyBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IGRlZmluaW5nIGEgcHJvcGVydHkgYXMgbm9uLWNvbmZpZ3VyYWJsZSwgbm9uLXdyaXRhYmxlLCBvciBub24tZW51bWVyYWJsZS4iKTtQW0ZdPVJ9fX0sOTI5OTg6KGNlLFgsYik9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIEk9YigxMjIwMiksXz1iKDE5MTUwKSxwPWIoNDY4KSxWPWIoNjY5OTUpLHc9T2JqZWN0O2NlLmV4cG9ydHM9Vj9mdW5jdGlvbihQKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIFB9OmZ1bmN0aW9uKFApe3ZhciBGPUkoIlN5bWJvbCIpO3JldHVybiBfKEYpJiZwKEYucHJvdG90''@;'; put 'put ''eXBlLHcoUCkpfX0sOTNlMzpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gXyhWLHcsUCxGKXt2YXIgUj1WKyIgIjtzd2l0Y2goUCl7Y2FzZSJzIjpyZXR1cm4gd3x8Rj8ibmVrYWogc2VrdW5kIjoibmVrYWogc2VrdW5kYW1pIjtjYXNlInNzIjpy''@;'; put 'put ''ZXR1cm4gUisoMT09PVY/dz8ic2VrdW5kbyI6InNla3VuZGkiOjI9PT1WP3d8fEY/InNla3VuZGkiOiJzZWt1bmRhaCI6Vjw1P3d8fEY/InNla3VuZGUiOiJzZWt1bmRhaCI6InNla3VuZCIpO2Nhc2UibSI6cmV0dXJuIHc/ImVuYSBtaW51dGEiOiJlbm8gbWludXRvIjtjYXNlIm1tIjpyZXR1''@;'; put 'put ''cm4gUisoMT09PVY/dz8ibWludXRhIjoibWludXRvIjoyPT09Vj93fHxGPyJtaW51dGkiOiJtaW51dGFtYSI6Vjw1P3d8fEY/Im1pbnV0ZSI6Im1pbnV0YW1pIjp3fHxGPyJtaW51dCI6Im1pbnV0YW1pIik7Y2FzZSJoIjpyZXR1cm4gdz8iZW5hIHVyYSI6ImVubyB1cm8iO2Nhc2UiaGgiOnJl''@;'; put 'put ''dHVybiBSKygxPT09Vj93PyJ1cmEiOiJ1cm8iOjI9PT1WP3d8fEY/InVyaSI6InVyYW1hIjpWPDU/d3x8Rj8idXJlIjoidXJhbWkiOnd8fEY/InVyIjoidXJhbWkiKTtjYXNlImQiOnJldHVybiB3fHxGPyJlbiBkYW4iOiJlbmltIGRuZW0iO2Nhc2UiZGQiOnJldHVybiBSKygxPT09Vj93fHxG''@;'; put 'put ''PyJkYW4iOiJkbmVtIjoyPT09Vj93fHxGPyJkbmkiOiJkbmV2b21hIjp3fHxGPyJkbmkiOiJkbmV2aSIpO2Nhc2UiTSI6cmV0dXJuIHd8fEY/ImVuIG1lc2VjIjoiZW5pbSBtZXNlY2VtIjtjYXNlIk1NIjpyZXR1cm4gUisoMT09PVY/d3x8Rj8ibWVzZWMiOiJtZXNlY2VtIjoyPT09Vj93fHxG''@;'; put 'put ''PyJtZXNlY2EiOiJtZXNlY2VtYSI6Vjw1P3d8fEY/Im1lc2VjZSI6Im1lc2VjaSI6d3x8Rj8ibWVzZWNldiI6Im1lc2VjaSIpO2Nhc2UieSI6cmV0dXJuIHd8fEY/ImVubyBsZXRvIjoiZW5pbSBsZXRvbSI7Y2FzZSJ5eSI6cmV0dXJuIFIrKDE9PT1WP3d8fEY/ImxldG8iOiJsZXRvbSI6Mj09''@;'; put 'put ''PVY/d3x8Rj8ibGV0aSI6ImxldG9tYSI6Vjw1P3d8fEY/ImxldGEiOiJsZXRpIjp3fHxGPyJsZXQiOiJsZXRpIil9fUkuZGVmaW5lTG9jYWxlKCJzbCIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFyZWNfYXByaWxfbWFqX2p1bmlqX2p1bGlqX2F2Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9u''@;'; put 'put ''b3ZlbWJlcl9kZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21hci5fYXByLl9tYWouX2p1bi5fanVsLl9hdmcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoibmVkZWxqYV9wb25lZGVsamVrX3Rv''@;'; put 'put ''cmVrX3NyZWRhX1x1MDEwZGV0cnRla19wZXRla19zb2JvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibmVkLl9wb24uX3Rvci5fc3JlLl9cdTAxMGRldC5fcGV0Ll9zb2IuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb190b19zcl9cdTAxMGRlX3BlX3NvIi5zcGxpdCgiXyIp''@;'; put 'put ''LHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuIE1NLiBZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntz''@;'; put 'put ''YW1lRGF5OiJbZGFuZXMgb2JdIExUIixuZXh0RGF5OiJbanV0cmkgb2JdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt2XSBbbmVkZWxqb10gW29iXSBMVCI7Y2FzZSAzOnJldHVybiJbdl0gW3NyZWRvXSBbb2JdIExUIjtjYXNlIDY6''@;'; put 'put ''cmV0dXJuIlt2XSBbc29ib3RvXSBbb2JdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIlt2XSBkZGRkIFtvYl0gTFQifX0sbGFzdERheToiW3ZcdTAxMGRlcmFqIG9iXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVy''@;'; put 'put ''biJbcHJlalx1MDE2MW5qb10gW25lZGVsam9dIFtvYl0gTFQiO2Nhc2UgMzpyZXR1cm4iW3ByZWpcdTAxNjFuam9dIFtzcmVkb10gW29iXSBMVCI7Y2FzZSA2OnJldHVybiJbcHJlalx1MDE2MW5qb10gW3NvYm90b10gW29iXSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVy''@;'; put 'put ''biJbcHJlalx1MDE2MW5qaV0gZGRkZCBbb2JdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDEwZGV6ICVzIixwYXN0OiJwcmVkICVzIixzOl8sc3M6XyxtOl8sbW06XyxoOl8saGg6XyxkOl8sZGQ6XyxNOl8sTU06Xyx5Ol8seXk6X30sZGF5T2ZNb250aE9y''@;'; put 'put ''ZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfShiKDk3NTg2KSl9LDkzMTYyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNTU4KSxfPWIoODgyNzUpO2NlLmV4cG9ydHM9ZnVuY3Rpb24ocCl7cmV0dXJuIEkoXyhwKSl9fSw5''@;'; put 'put ''MzI5MDpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInRldCIse21vbnRoczoiSmFuZWlydV9GZXZlcmVpcnVfTWFyc3VfQWJyaWxfTWFpdV9KdVx4ZjF1X0p1bGx1X0FndXN0dV9TZXRlbWJydV9PdXR1YnJ1X05vdmVtYnJ1X0RlemVt''@;'; put 'put ''YnJ1Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmV2X01hcl9BYnJfTWFpX0p1bl9KdWxfQWdvX1NldF9PdXRfTm92X0RleiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiRG9taW5ndV9TZWd1bmRhX1RlcnNhX0t1YXJ0YV9LaW50YV9TZXN0YV9TYWJhZHUiLnNwbGl0KCJfIiksd2Vla2Rh''@;'; put 'put ''eXNTaG9ydDoiRG9tX1NlZ19UZXJzX0t1YV9LaW50X1Nlc3RfU2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJEb19TZWdfVGVfS3VfS2lfU2VzX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1N''@;'; put 'put ''TU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW09oaW4gaWhhXSBMVCIsbmV4dERheToiW0FiYW4gaWhhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2loYV0gTFQiLGxhc3REYXk6IltIb3Jpc2Vp''@;'; put 'put ''ayBpaGFdIExUIixsYXN0V2VlazoiZGRkZCBbc2VtYW5hIGtvdHVrXSBbaWhhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaWhhICVzIixwYXN0OiIlcyBsaXViYSIsczoic2VndW5kdSBiYWx1biIsc3M6InNlZ3VuZHUgJWQiLG06Im1pbnV0dSBpZGEiLG1tOiJt''@;'; put 'put ''aW51dHUgJWQiLGg6Im9yYXMgaWRhIixoaDoib3JhcyAlZCIsZDoibG9yb24gaWRhIixkZDoibG9yb24gJWQiLE06ImZ1bGFuIGlkYSIsTU06ImZ1bGFuICVkIix5OiJ0aW5hbiBpZGEiLHl5OiJ0aW5hbiAlZCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgp''@;'; put 'put ''LyxvcmRpbmFsOmZ1bmN0aW9uKHApe3ZhciBWPXAlMTA7cmV0dXJuIHArKDE9PX5+KHAlMTAwLzEwKT8idGgiOjE9PT1WPyJzdCI6Mj09PVY/Im5kIjozPT09Vj8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw5MzM5NzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''IjtYLnBia2RmMj1iKDgyNjg1KSxYLnBia2RmMlN5bmM9Yig1OTExMSl9LDkzNTEzOihjZSxYLGIpPT57dmFyIEk9YigyNTE3Mik7Y2UuZXhwb3J0cz1mdW5jdGlvbiBfKHApe3ZhciBWPXt9LHc9ITE7ZnVuY3Rpb24gUChGLFIpe3JldHVybiB3PSEwLFI9bmV3IFByb21pc2UoZnVuY3Rpb24o''@;'; put 'put ''eil7eihwW0ZdKFIpKX0pLHtkb25lOiExLHZhbHVlOm5ldyBJKFIsMSl9fXJldHVybiBWW3R5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sVi5uZXh0PWZ1bmN0aW9uKEYpe3JldHVybiB3Pyh3PSExLEYpOlAo''@;'; put 'put ''Im5leHQiLEYpfSwiZnVuY3Rpb24iPT10eXBlb2YgcC50aHJvdyYmKFYudGhyb3c9ZnVuY3Rpb24oRil7aWYodyl0aHJvdyB3PSExLEY7cmV0dXJuIFAoInRocm93IixGKX0pLCJmdW5jdGlvbiI9PXR5cGVvZiBwLnJldHVybiYmKFYucmV0dXJuPWZ1bmN0aW9uKEYpe3JldHVybiB3Pyh3PSEx''@;'; put 'put ''LEYpOlAoInJldHVybiIsRil9KSxWfSxjZS5leHBvcnRzLl9fZXNNb2R1bGU9ITAsY2UuZXhwb3J0cy5kZWZhdWx0PWNlLmV4cG9ydHN9LDkzNTczOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MDoiLVx1MDQ0OFx1MDQ1NiIsMToiLVx1MDQ0OFx1''@;'; put 'put ''MDQ1NiIsMjoiLVx1MDQ0OFx1MDQ1NiIsMzoiLVx1MDQ0OFx1MDQ1NiIsNDoiLVx1MDQ0OFx1MDQ1NiIsNToiLVx1MDQ0OFx1MDQ1NiIsNjoiLVx1MDQ0OFx1MDQ0YiIsNzoiLVx1MDQ0OFx1MDQ1NiIsODoiLVx1MDQ0OFx1MDQ1NiIsOToiLVx1MDQ0OFx1MDQ0YiIsMTA6Ii1cdTA0NDhcdTA0''@;'; put 'put ''NGIiLDIwOiItXHUwNDQ4XHUwNDRiIiwzMDoiLVx1MDQ0OFx1MDQ0YiIsNDA6Ii1cdTA0NDhcdTA0NGIiLDUwOiItXHUwNDQ4XHUwNDU2Iiw2MDoiLVx1MDQ0OFx1MDQ0YiIsNzA6Ii1cdTA0NDhcdTA0NTYiLDgwOiItXHUwNDQ4XHUwNDU2Iiw5MDoiLVx1MDQ0OFx1MDQ0YiIsMTAwOiItXHUw''@;'; put 'put ''NDQ4XHUwNDU2In07SS5kZWZpbmVMb2NhbGUoImtrIix7bW9udGhzOiJcdTA0OWJcdTA0MzBcdTA0YTNcdTA0NDJcdTA0MzBcdTA0NDBfXHUwNDMwXHUwNDliXHUwNDNmXHUwNDMwXHUwNDNkX1x1MDQzZFx1MDQzMFx1MDQ0M1x1MDQ0MFx1MDQ0Ylx1MDQzN19cdTA0NDFcdTA0ZDlcdTA0NDNc''@;'; put 'put ''dTA0NTZcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDNjXHUwNDRiXHUwNDQwX1x1MDQzY1x1MDQzMFx1MDQ0M1x1MDQ0MVx1MDQ0Ylx1MDQzY19cdTA0NDhcdTA0NTZcdTA0M2JcdTA0MzRcdTA0MzVfXHUwNDQyXHUwNDMwXHUwNDNjXHUwNDRiXHUwNDM3X1x1MDQ5Ylx1MDQ0Ylx1MDQ0MFx1MDQz''@;'; put 'put ''YVx1MDRhZlx1MDQzOVx1MDQzNVx1MDQzYV9cdTA0OWJcdTA0MzBcdTA0MzdcdTA0MzBcdTA0M2RfXHUwNDliXHUwNDMwXHUwNDQwXHUwNDMwXHUwNDQ4XHUwNDMwX1x1MDQzNlx1MDQzNVx1MDQzYlx1MDQ0Mlx1MDQzZVx1MDQ5Ylx1MDQ0MVx1MDQzMFx1MDQzZCIuc3BsaXQoIl8iKSxtb250''@;'; put 'put ''aHNTaG9ydDoiXHUwNDliXHUwNDMwXHUwNGEzX1x1MDQzMFx1MDQ5Ylx1MDQzZl9cdTA0M2RcdTA0MzBcdTA0NDNfXHUwNDQxXHUwNGQ5XHUwNDQzX1x1MDQzY1x1MDQzMFx1MDQzY19cdTA0M2NcdTA0MzBcdTA0NDNfXHUwNDQ4XHUwNDU2XHUwNDNiX1x1MDQ0Mlx1MDQzMFx1MDQzY19cdTA0''@;'; put 'put ''OWJcdTA0NGJcdTA0NDBfXHUwNDliXHUwNDMwXHUwNDM3X1x1MDQ5Ylx1MDQzMFx1MDQ0MF9cdTA0MzZcdTA0MzVcdTA0M2IiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDQzNlx1MDQzNVx1MDQzYVx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQzMVx1MDQ1Nl9cdTA0MzRcdTA0YWZcdTA0MzlcdTA0''@;'; put 'put ''NDFcdTA0MzVcdTA0M2RcdTA0MzFcdTA0NTZfXHUwNDQxXHUwNDM1XHUwNDM5XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDMxXHUwNDU2X1x1MDQ0MVx1MDRkOVx1MDQ0MFx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQzMVx1MDQ1Nl9cdTA0MzFcdTA0MzVcdTA0MzlcdTA0NDFcdTA0MzVcdTA0M2RcdTA0''@;'; put 'put ''MzFcdTA0NTZfXHUwNDM2XHUwNGIxXHUwNDNjXHUwNDMwX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQzMVx1MDQ1NiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0MzZcdTA0MzVcdTA0M2FfXHUwNDM0XHUwNGFmXHUwNDM5X1x1MDQ0MVx1MDQzNVx1MDQzOV9cdTA0NDFcdTA0ZDlcdTA0''@;'; put 'put ''NDBfXHUwNDMxXHUwNDM1XHUwNDM5X1x1MDQzNlx1MDRiMVx1MDQzY19cdTA0NDFcdTA0MzVcdTA0M2QiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQzNlx1MDQzYV9cdTA0MzRcdTA0MzlfXHUwNDQxXHUwNDM5X1x1MDQ0MVx1MDQ0MF9cdTA0MzFcdTA0MzlfXHUwNDM2XHUwNDNjX1x1''@;'; put 'put ''MDQ0MVx1MDQzZCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3Nh''@;'; put 'put ''bWVEYXk6IltcdTA0MTFcdTA0YWZcdTA0MzNcdTA0NTZcdTA0M2QgXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyXSBMVCIsbmV4dERheToiW1x1MDQxNVx1MDQ0MFx1MDQ0Mlx1MDQzNVx1MDRhMyBcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDJdIExUIixuZXh0V2VlazoiZGRk''@;'; put 'put ''ZCBbXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyXSBMVCIsbGFzdERheToiW1x1MDQxYVx1MDQzNVx1MDQ0OFx1MDQzNSBcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDJdIExUIixsYXN0V2VlazoiW1x1MDRlOFx1MDQ0Mlx1MDQzYVx1MDQzNVx1MDQzZCBcdTA0MzBcdTA0M2Zc''@;'; put 'put ''dTA0NDJcdTA0MzBcdTA0M2RcdTA0NGJcdTA0YTNdIGRkZGQgW1x1MDQ0MVx1MDQzMFx1MDQ5M1x1MDQzMFx1MDQ0Ml0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDQ1Nlx1MDQ0OFx1MDQ1Nlx1MDQzZFx1MDQzNFx1MDQzNSIscGFzdDoiJXMgXHUwNDMx''@;'; put 'put ''XHUwNGIxXHUwNDQwXHUwNDRiXHUwNDNkIixzOiJcdTA0MzFcdTA0NTZcdTA0NDBcdTA0M2RcdTA0MzVcdTA0NDhcdTA0MzUgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixzczoiJWQgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixtOiJcdTA0MzFc''@;'; put 'put ''dTA0NTZcdTA0NDAgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIixtbToiJWQgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIixoOiJcdTA0MzFcdTA0NTZcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyIixoaDoiJWQgXHUwNDQxXHUwNDMwXHUwNDkzXHUw''@;'; put 'put ''NDMwXHUwNDQyIixkOiJcdTA0MzFcdTA0NTZcdTA0NDAgXHUwNDNhXHUwNGFmXHUwNDNkIixkZDoiJWQgXHUwNDNhXHUwNGFmXHUwNDNkIixNOiJcdTA0MzFcdTA0NTZcdTA0NDAgXHUwNDMwXHUwNDM5IixNTToiJWQgXHUwNDMwXHUwNDM5Iix5OiJcdTA0MzFcdTA0NTZcdTA0NDAgXHUwNDM2''@;'; put 'put ''XHUwNDRiXHUwNDNiIix5eToiJWQgXHUwNDM2XHUwNDRiXHUwNDNiIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDQ4XHUwNDU2fFx1MDQ0OFx1MDQ0YikvLG9yZGluYWw6ZnVuY3Rpb24oVil7cmV0dXJuIFYrKF9bVl18fF9bViUxMF18fF9bVj49MTAwPzEwMDpudWxs''@;'; put 'put ''XSl9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShiKDk3NTg2KSl9LDkzNjk0OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoOTM4MDcpLkJ1ZmZlcjtYLl9kYmNzPXo7Zm9yKHZhciBfPS0xLHA9LTIsVj0tMTAsdz0tMWUzLFA9bmV3IEFycmF5KDI1NiksUj0wO1I8MjU2O1IrKylQW1Jd''@;'; put 'put ''PV87ZnVuY3Rpb24geihaLFkpe2lmKHRoaXMuZW5jb2RpbmdOYW1lPVouZW5jb2RpbmdOYW1lLCFaKXRocm93IG5ldyBFcnJvcigiREJDUyBjb2RlYyBpcyBjYWxsZWQgd2l0aG91dCB0aGUgZGF0YS4iKTtpZighWi50YWJsZSl0aHJvdyBuZXcgRXJyb3IoIkVuY29kaW5nICciK3RoaXMuZW5j''@;'; put 'put ''b2RpbmdOYW1lKyInIGhhcyBubyBkYXRhLiIpO3ZhciBXPVoudGFibGUoKTt0aGlzLmRlY29kZVRhYmxlcz1bXSx0aGlzLmRlY29kZVRhYmxlc1swXT1QLnNsaWNlKDApLHRoaXMuZGVjb2RlVGFibGVTZXE9W107Zm9yKHZhciBxPTA7cTxXLmxlbmd0aDtxKyspdGhpcy5fYWRkRGVjb2RlQ2h1''@;'; put 'put ''bmsoV1txXSk7dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU9WS5kZWZhdWx0Q2hhclVuaWNvZGUsdGhpcy5lbmNvZGVUYWJsZT1bXSx0aGlzLmVuY29kZVRhYmxlU2VxPVtdO3ZhciBlZT17fTtpZihaLmVuY29kZVNraXBWYWxzKWZvcihxPTA7cTxaLmVuY29kZVNraXBWYWxzLmxlbmd0aDtxKysp''@;'; put 'put ''e3ZhciBKPVouZW5jb2RlU2tpcFZhbHNbcV07aWYoIm51bWJlciI9PXR5cGVvZiBKKWVlW0pdPSEwO2Vsc2UgZm9yKHZhciByZT1KLmZyb207cmU8PUoudG87cmUrKyllZVtyZV09ITB9aWYodGhpcy5fZmlsbEVuY29kZVRhYmxlKDAsMCxlZSksWi5lbmNvZGVBZGQpZm9yKHZhciBpZSBpbiBa''@;'; put 'put ''LmVuY29kZUFkZClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoWi5lbmNvZGVBZGQsaWUpJiZ0aGlzLl9zZXRFbmNvZGVDaGFyKGllLmNoYXJDb2RlQXQoMCksWi5lbmNvZGVBZGRbaWVdKTtpZih0aGlzLmRlZkNoYXJTQj10aGlzLmVuY29kZVRhYmxlWzBdW1kuZGVmYXVs''@;'; put 'put ''dENoYXJTaW5nbGVCeXRlLmNoYXJDb2RlQXQoMCldLHRoaXMuZGVmQ2hhclNCPT09XyYmKHRoaXMuZGVmQ2hhclNCPXRoaXMuZW5jb2RlVGFibGVbMF1bIj8iXSksdGhpcy5kZWZDaGFyU0I9PT1fJiYodGhpcy5kZWZDaGFyU0I9NjMpLCJmdW5jdGlvbiI9PXR5cGVvZiBaLmdiMTgwMzApe3Ro''@;'; put 'put ''aXMuZ2IxODAzMD1aLmdiMTgwMzAoKTt2YXIgdWU9dGhpcy5kZWNvZGVUYWJsZXMubGVuZ3RoLGdlPXRoaXMuZGVjb2RlVGFibGVzW3VlXT1QLnNsaWNlKDApLF9lPXRoaXMuZGVjb2RlVGFibGVzLmxlbmd0aCxUZT10aGlzLmRlY29kZVRhYmxlc1tfZV09UC5zbGljZSgwKTtmb3IocT0xMjk7''@;'; put 'put ''cTw9MjU0O3ErKyl7dmFyIFplPXRoaXMuZGVjb2RlVGFibGVzW3ctdGhpcy5kZWNvZGVUYWJsZXNbMF1bcV1dO2ZvcihyZT00ODtyZTw9NTc7cmUrKylaZVtyZV09dy11ZX1mb3IocT0xMjk7cTw9MjU0O3ErKylnZVtxXT13LV9lO2ZvcihxPTQ4O3E8PTU3O3ErKylUZVtxXT1wfX1mdW5jdGlv''@;'; put 'put ''biBOKFosWSl7dGhpcy5sZWFkU3Vycm9nYXRlPS0xLHRoaXMuc2VxT2JqPXZvaWQgMCx0aGlzLmVuY29kZVRhYmxlPVkuZW5jb2RlVGFibGUsdGhpcy5lbmNvZGVUYWJsZVNlcT1ZLmVuY29kZVRhYmxlU2VxLHRoaXMuZGVmYXVsdENoYXJTaW5nbGVCeXRlPVkuZGVmQ2hhclNCLHRoaXMuZ2Ix''@;'; put 'put ''ODAzMD1ZLmdiMTgwMzB9ZnVuY3Rpb24gTyhaLFkpe3RoaXMubm9kZUlkeD0wLHRoaXMucHJldkJ1Zj1JLmFsbG9jKDApLHRoaXMuZGVjb2RlVGFibGVzPVkuZGVjb2RlVGFibGVzLHRoaXMuZGVjb2RlVGFibGVTZXE9WS5kZWNvZGVUYWJsZVNlcSx0aGlzLmRlZmF1bHRDaGFyVW5pY29kZT1Z''@;'; put 'put ''LmRlZmF1bHRDaGFyVW5pY29kZSx0aGlzLmdiMTgwMzA9WS5nYjE4MDMwfWZ1bmN0aW9uIEsoWixZKXtpZihaWzBdPlkpcmV0dXJuLTE7Zm9yKHZhciBXPTAscT1aLmxlbmd0aDtXPHEtMTspe3ZhciBlZT1XK01hdGguZmxvb3IoKHEtVysxKS8yKTtaW2VlXTw9WT9XPWVlOnE9ZWV9cmV0dXJu''@;'; put 'put ''IFd9ei5wcm90b3R5cGUuZW5jb2Rlcj1OLHoucHJvdG90eXBlLmRlY29kZXI9Tyx6LnByb3RvdHlwZS5fZ2V0RGVjb2RlVHJpZU5vZGU9ZnVuY3Rpb24oWil7Zm9yKHZhciBZPVtdO1o+MDtaPj49OClZLnB1c2goMjU1JlopOzA9PVkubGVuZ3RoJiZZLnB1c2goMCk7Zm9yKHZhciBXPXRoaXMu''@;'; put 'put ''ZGVjb2RlVGFibGVzWzBdLHE9WS5sZW5ndGgtMTtxPjA7cS0tKXt2YXIgZWU9V1tZW3FdXTtpZihlZT09XylXW1lbcV1dPXctdGhpcy5kZWNvZGVUYWJsZXMubGVuZ3RoLHRoaXMuZGVjb2RlVGFibGVzLnB1c2goVz1QLnNsaWNlKDApKTtlbHNle2lmKCEoZWU8PXcpKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigiT3ZlcndyaXRlIGJ5dGUgaW4gIit0aGlzLmVuY29kaW5nTmFtZSsiLCBhZGRyOiAiK1oudG9TdHJpbmcoMTYpKTtXPXRoaXMuZGVjb2RlVGFibGVzW3ctZWVdfX1yZXR1cm4gV30sei5wcm90b3R5cGUuX2FkZERlY29kZUNodW5rPWZ1bmN0aW9uKFope3ZhciBZPXBhcnNlSW50KFpbMF0s''@;'; put 'put ''MTYpLFc9dGhpcy5fZ2V0RGVjb2RlVHJpZU5vZGUoWSk7WSY9MjU1O2Zvcih2YXIgcT0xO3E8Wi5sZW5ndGg7cSsrKXt2YXIgZWU9WltxXTtpZigic3RyaW5nIj09dHlwZW9mIGVlKWZvcih2YXIgSj0wO0o8ZWUubGVuZ3RoOyl7dmFyIHJlPWVlLmNoYXJDb2RlQXQoSisrKTtpZig1NTI5Njw9''@;'; put 'put ''cmUmJnJlPDU2MzIwKXt2YXIgaWU9ZWUuY2hhckNvZGVBdChKKyspO2lmKCEoNTYzMjA8PWllJiZpZTw1NzM0NCkpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3Qgc3Vycm9nYXRlIHBhaXIgaW4gIit0aGlzLmVuY29kaW5nTmFtZSsiIGF0IGNodW5rICIrWlswXSk7V1tZKytdPTY1NTM2KzEw''@;'; put 'put ''MjQqKHJlLTU1Mjk2KSsoaWUtNTYzMjApfWVsc2UgaWYoNDA4MDxyZSYmcmU8PTQwOTUpe2Zvcih2YXIgdWU9NDA5NS1yZSsyLGdlPVtdLF9lPTA7X2U8dWU7X2UrKylnZS5wdXNoKGVlLmNoYXJDb2RlQXQoSisrKSk7V1tZKytdPVYtdGhpcy5kZWNvZGVUYWJsZVNlcS5sZW5ndGgsdGhpcy5k''@;'; put 'put ''ZWNvZGVUYWJsZVNlcS5wdXNoKGdlKX1lbHNlIFdbWSsrXT1yZX1lbHNle2lmKCJudW1iZXIiIT10eXBlb2YgZWUpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgdHlwZSAnIit0eXBlb2YgZWUrIicgZ2l2ZW4gaW4gIit0aGlzLmVuY29kaW5nTmFtZSsiIGF0IGNodW5rICIrWlswXSk7dmFy''@;'; put 'put ''IFRlPVdbWS0xXSsxO2ZvcihKPTA7SjxlZTtKKyspV1tZKytdPVRlKyt9fWlmKFk+MjU1KXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IGNodW5rIGluICIrdGhpcy5lbmNvZGluZ05hbWUrIiBhdCBhZGRyICIrWlswXSsiOiB0b28gbG9uZyIrWSl9LHoucHJvdG90eXBlLl9nZXRFbmNvZGVC''@;'; put 'put ''dWNrZXQ9ZnVuY3Rpb24oWil7dmFyIFk9Wj4+ODtyZXR1cm4gdm9pZCAwPT09dGhpcy5lbmNvZGVUYWJsZVtZXSYmKHRoaXMuZW5jb2RlVGFibGVbWV09UC5zbGljZSgwKSksdGhpcy5lbmNvZGVUYWJsZVtZXX0sei5wcm90b3R5cGUuX3NldEVuY29kZUNoYXI9ZnVuY3Rpb24oWixZKXt2YXIg''@;'; put 'put ''Vz10aGlzLl9nZXRFbmNvZGVCdWNrZXQoWikscT0yNTUmWjtXW3FdPD1WP3RoaXMuZW5jb2RlVGFibGVTZXFbVi1XW3FdXVstMV09WTpXW3FdPT1fJiYoV1txXT1ZKX0sei5wcm90b3R5cGUuX3NldEVuY29kZVNlcXVlbmNlPWZ1bmN0aW9uKFosWSl7dmFyIEosVz1aWzBdLHE9dGhpcy5fZ2V0''@;'; put 'put ''RW5jb2RlQnVja2V0KFcpLGVlPTI1NSZXO3FbZWVdPD1WP0o9dGhpcy5lbmNvZGVUYWJsZVNlcVtWLXFbZWVdXTooSj17fSxxW2VlXSE9PV8mJihKWy0xXT1xW2VlXSkscVtlZV09Vi10aGlzLmVuY29kZVRhYmxlU2VxLmxlbmd0aCx0aGlzLmVuY29kZVRhYmxlU2VxLnB1c2goSikpO2Zvcih2''@;'; put 'put ''YXIgcmU9MTtyZTxaLmxlbmd0aC0xO3JlKyspe3ZhciBpZT1KW1ddOyJvYmplY3QiPT10eXBlb2YgaWU/Sj1pZTooSj1KW1ddPXt9LHZvaWQgMCE9PWllJiYoSlstMV09aWUpKX1KW1c9WltaLmxlbmd0aC0xXV09WX0sei5wcm90b3R5cGUuX2ZpbGxFbmNvZGVUYWJsZT1mdW5jdGlvbihaLFks''@;'; put 'put ''Vyl7Zm9yKHZhciBxPXRoaXMuZGVjb2RlVGFibGVzW1pdLGVlPTA7ZWU8MjU2O2VlKyspe3ZhciBKPXFbZWVdLHJlPVkrZWU7V1tyZV18fChKPj0wP3RoaXMuX3NldEVuY29kZUNoYXIoSixyZSk6Sjw9dz90aGlzLl9maWxsRW5jb2RlVGFibGUody1KLHJlPDw4LFcpOko8PVYmJnRoaXMuX3Nl''@;'; put 'put ''dEVuY29kZVNlcXVlbmNlKHRoaXMuZGVjb2RlVGFibGVTZXFbVi1KXSxyZSkpfX0sTi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oWil7Zm9yKHZhciBZPUkuYWxsb2MoWi5sZW5ndGgqKHRoaXMuZ2IxODAzMD80OjMpKSxXPXRoaXMubGVhZFN1cnJvZ2F0ZSxxPXRoaXMuc2VxT2JqLGVlPS0x''@;'; put 'put ''LEo9MCxyZT0wOzspe2lmKC0xPT09ZWUpe2lmKEo9PVoubGVuZ3RoKWJyZWFrO3ZhciBpZT1aLmNoYXJDb2RlQXQoSisrKX1lbHNlIGllPWVlLGVlPS0xO2lmKDU1Mjk2PD1pZSYmaWU8NTczNDQpaWYoaWU8NTYzMjApe2lmKC0xPT09Vyl7Vz1pZTtjb250aW51ZX1XPWllLGllPV99ZWxzZS0x''@;'; put 'put ''IT09Vz8oaWU9NjU1MzYrMTAyNCooVy01NTI5NikrKGllLTU2MzIwKSxXPS0xKTppZT1fO2Vsc2UtMSE9PVcmJihlZT1pZSxpZT1fLFc9LTEpO3ZhciB1ZT1fO2lmKHZvaWQgMCE9PXEmJmllIT1fKXt2YXIgZ2U9cVtpZV07aWYoIm9iamVjdCI9PXR5cGVvZiBnZSl7cT1nZTtjb250aW51ZX0i''@;'; put 'put ''bnVtYmVyIj09dHlwZW9mIGdlP3VlPWdlOm51bGw9PWdlJiZ2b2lkIDAhPT0oZ2U9cVstMV0pJiYodWU9Z2UsZWU9aWUpLHE9dm9pZCAwfWVsc2UgaWYoaWU+PTApe3ZhciBfZT10aGlzLmVuY29kZVRhYmxlW2llPj44XTtpZih2b2lkIDAhPT1fZSYmKHVlPV9lWzI1NSZpZV0pLHVlPD1WKXtx''@;'; put 'put ''PXRoaXMuZW5jb2RlVGFibGVTZXFbVi11ZV07Y29udGludWV9aWYodWU9PV8mJnRoaXMuZ2IxODAzMCl7dmFyIFRlPUsodGhpcy5nYjE4MDMwLnVDaGFycyxpZSk7aWYoLTEhPVRlKXt1ZT10aGlzLmdiMTgwMzAuZ2JDaGFyc1tUZV0rKGllLXRoaXMuZ2IxODAzMC51Q2hhcnNbVGVdKSxZW3Jl''@;'; put 'put ''KytdPTEyOStNYXRoLmZsb29yKHVlLzEyNjAwKSx1ZSU9MTI2MDAsWVtyZSsrXT00OCtNYXRoLmZsb29yKHVlLzEyNjApLHVlJT0xMjYwLFlbcmUrK109MTI5K01hdGguZmxvb3IodWUvMTApLFlbcmUrK109NDgrKHVlJT0xMCk7Y29udGludWV9fX11ZT09PV8mJih1ZT10aGlzLmRlZmF1bHRD''@;'; put 'put ''aGFyU2luZ2xlQnl0ZSksdWU8MjU2P1lbcmUrK109dWU6dWU8NjU1MzY/KFlbcmUrK109dWU+PjgsWVtyZSsrXT0yNTUmdWUpOihZW3JlKytdPXVlPj4xNixZW3JlKytdPXVlPj44JjI1NSxZW3JlKytdPTI1NSZ1ZSl9cmV0dXJuIHRoaXMuc2VxT2JqPXEsdGhpcy5sZWFkU3Vycm9nYXRlPVcs''@;'; put 'put ''WS5zbGljZSgwLHJlKX0sTi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7aWYoLTEhPT10aGlzLmxlYWRTdXJyb2dhdGV8fHZvaWQgMCE9PXRoaXMuc2VxT2JqKXt2YXIgWj1JLmFsbG9jKDEwKSxZPTA7aWYodGhpcy5zZXFPYmope3ZhciBXPXRoaXMuc2VxT2JqWy0xXTt2b2lkIDAhPT1XJiYo''@;'; put 'put ''VzwyNTY/WltZKytdPVc6KFpbWSsrXT1XPj44LFpbWSsrXT0yNTUmVykpLHRoaXMuc2VxT2JqPXZvaWQgMH1yZXR1cm4tMSE9PXRoaXMubGVhZFN1cnJvZ2F0ZSYmKFpbWSsrXT10aGlzLmRlZmF1bHRDaGFyU2luZ2xlQnl0ZSx0aGlzLmxlYWRTdXJyb2dhdGU9LTEpLFouc2xpY2UoMCxZKX19''@;'; put 'put ''LE4ucHJvdG90eXBlLmZpbmRJZHg9SyxPLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihaKXt2YXIgWT1JLmFsbG9jKDIqWi5sZW5ndGgpLFc9dGhpcy5ub2RlSWR4LHE9dGhpcy5wcmV2QnVmLGVlPXRoaXMucHJldkJ1Zi5sZW5ndGgsSj0tdGhpcy5wcmV2QnVmLmxlbmd0aDtlZT4wJiYocT1J''@;'; put 'put ''LmNvbmNhdChbcSxaLnNsaWNlKDAsMTApXSkpO2Zvcih2YXIgaWU9MCx1ZT0wO2llPFoubGVuZ3RoO2llKyspe3ZhciByZSxnZT1pZT49MD9aW2llXTpxW2llK2VlXTtpZighKChyZT10aGlzLmRlY29kZVRhYmxlc1tXXVtnZV0pPj0wKSlpZihyZT09PV8paWU9SixyZT10aGlzLmRlZmF1bHRD''@;'; put 'put ''aGFyVW5pY29kZS5jaGFyQ29kZUF0KDApO2Vsc2UgaWYocmU9PT1wKXt2YXIgX2U9Sj49MD9aLnNsaWNlKEosaWUrMSk6cS5zbGljZShKK2VlLGllKzErZWUpLFRlPTEyNjAwKihfZVswXS0xMjkpKzEyNjAqKF9lWzFdLTQ4KSsxMCooX2VbMl0tMTI5KSsoX2VbM10tNDgpLE1lPUsodGhpcy5n''@;'; put 'put ''YjE4MDMwLmdiQ2hhcnMsVGUpO3JlPXRoaXMuZ2IxODAzMC51Q2hhcnNbTWVdK1RlLXRoaXMuZ2IxODAzMC5nYkNoYXJzW01lXX1lbHNle2lmKHJlPD13KXtXPXctcmU7Y29udGludWV9aWYoIShyZTw9VikpdGhyb3cgbmV3IEVycm9yKCJpY29udi1saXRlIGludGVybmFsIGVycm9yOiBpbnZh''@;'; put 'put ''bGlkIGRlY29kaW5nIHRhYmxlIHZhbHVlICIrcmUrIiBhdCAiK1crIi8iK2dlKTtmb3IodmFyIFplPXRoaXMuZGVjb2RlVGFibGVTZXFbVi1yZV0sQj0wO0I8WmUubGVuZ3RoLTE7QisrKVlbdWUrK109MjU1JihyZT1aZVtCXSksWVt1ZSsrXT1yZT4+ODtyZT1aZVtaZS5sZW5ndGgtMV19aWYo''@;'; put 'put ''cmU+NjU1MzUpe3JlLT02NTUzNjt2YXIgZz01NTI5NitNYXRoLmZsb29yKHJlLzEwMjQpO1lbdWUrK109MjU1JmcsWVt1ZSsrXT1nPj44LHJlPTU2MzIwK3JlJTEwMjR9WVt1ZSsrXT0yNTUmcmUsWVt1ZSsrXT1yZT4+OCxXPTAsSj1pZSsxfXJldHVybiB0aGlzLm5vZGVJZHg9Vyx0aGlzLnBy''@;'; put 'put ''ZXZCdWY9Sj49MD9aLnNsaWNlKEopOnEuc2xpY2UoSitlZSksWS5zbGljZSgwLHVlKS50b1N0cmluZygidWNzMiIpfSxPLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtmb3IodmFyIFo9IiI7dGhpcy5wcmV2QnVmLmxlbmd0aD4wOyl7Wis9dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU7dmFyIFk9''@;'; put 'put ''dGhpcy5wcmV2QnVmLnNsaWNlKDEpO3RoaXMucHJldkJ1Zj1JLmFsbG9jKDApLHRoaXMubm9kZUlkeD0wLFkubGVuZ3RoPjAmJihaKz10aGlzLndyaXRlKFkpKX1yZXR1cm4gdGhpcy5ub2RlSWR4PTAsWn19LDkzODA3OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBWLEk9Yig4MzgzOCks''@;'; put 'put ''Xz1JLkJ1ZmZlcixwPXt9O2ZvcihWIGluIEkpSS5oYXNPd25Qcm9wZXJ0eShWKSYmKCJTbG93QnVmZmVyIj09PVZ8fCJCdWZmZXIiPT09Vnx8KHBbVl09SVtWXSkpO3ZhciB3PXAuQnVmZmVyPXt9O2ZvcihWIGluIF8pXy5oYXNPd25Qcm9wZXJ0eShWKSYmKCJhbGxvY1Vuc2FmZSI9PT1WfHwi''@;'; put 'put ''YWxsb2NVbnNhZmVTbG93Ij09PVZ8fCh3W1ZdPV9bVl0pKTtpZihwLkJ1ZmZlci5wcm90b3R5cGU9Xy5wcm90b3R5cGUsKCF3LmZyb218fHcuZnJvbT09PVVpbnQ4QXJyYXkuZnJvbSkmJih3LmZyb209ZnVuY3Rpb24oUCxGLFIpe2lmKCJudW1iZXIiPT10eXBlb2YgUCl0aHJvdyBuZXcgVHlw''@;'; put 'put ''ZUVycm9yKCdUaGUgInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBQKTtpZihQJiZ0eXBlb2YgUC5sZW5ndGg+InUiKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0''@;'; put 'put ''eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mIFApO3JldHVybiBfKFAsRixSKX0pLHcuYWxsb2N8fCh3LmFsbG9jPWZ1bmN0aW9uKFAsRixSKXtpZigibnVtYmVyIiE9dHlwZW9mIFApdGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcignVGhlICJzaXplIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIFApO2lmKFA8MHx8UD49MiooMTw8MzApKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrUCsnIiBpcyBpbnZhbGlkIGZvciBv''@;'; put 'put ''cHRpb24gInNpemUiJyk7dmFyIHo9XyhQKTtyZXR1cm4gRiYmMCE9PUYubGVuZ3RoPyJzdHJpbmciPT10eXBlb2YgUj96LmZpbGwoRixSKTp6LmZpbGwoRik6ei5maWxsKDApLHp9KSwhcC5rU3RyaW5nTWF4TGVuZ3RoKXRyeXtwLmtTdHJpbmdNYXhMZW5ndGg9cHJvY2Vzcy5iaW5kaW5nKCJi''@;'; put 'put ''dWZmZXIiKS5rU3RyaW5nTWF4TGVuZ3RofWNhdGNoe31wLmNvbnN0YW50c3x8KHAuY29uc3RhbnRzPXtNQVhfTEVOR1RIOnAua01heExlbmd0aH0scC5rU3RyaW5nTWF4TGVuZ3RoJiYocC5jb25zdGFudHMuTUFYX1NUUklOR19MRU5HVEg9cC5rU3RyaW5nTWF4TGVuZ3RoKSksY2UuZXhwb3J0''@;'; put 'put ''cz1wfSw5Mzg2NTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQ2OTI2KSxfPWIoMTkxNTApLHA9YigzMjYzMyksVj1UeXBlRXJyb3I7Y2UuZXhwb3J0cz1mdW5jdGlvbih3LFApe3ZhciBGLFI7aWYoInN0cmluZyI9PT1QJiZfKEY9dy50b1N0cmluZykmJiFwKFI9SShGLHcpKXx8''@;'; put 'put ''XyhGPXcudmFsdWVPZikmJiFwKFI9SShGLHcpKXx8InN0cmluZyIhPT1QJiZfKEY9dy50b1N0cmluZykmJiFwKFI9SShGLHcpKSlyZXR1cm4gUjt0aHJvdyBuZXcgVigiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlIil9fSw5Mzg5ODooY2UsWCxiKT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgST1iKDY4MjgzKSxfPWIoMTA4MjcpO2Z1bmN0aW9uIHAoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBwKSlyZXR1cm4gbmV3IHA7Xy5jYWxsKHRoaXMpLHRoaXMuaD1bMzQxODA3MDM2NSwzMjM4MzcxMDMyLDE2NTQyNzAyNTAsOTE0MTUwNjYzLDI0Mzg1MjkzNzAsODEyNzAyOTk5''@;'; put 'put ''LDM1NTQ2MjM2MCw0MTQ0OTEyNjk3LDE3MzE0MDU0MTUsNDI5MDc3NTg1NywyMzk0MTgwMjMxLDE3NTA2MDMwMjUsMzY3NTAwODUyNSwxNjk0MDc2ODM5LDEyMDMwNjI4MTMsMzIwNDA3NTQyOF19SS5pbmhlcml0cyhwLF8pLGNlLmV4cG9ydHM9cCxwLmJsb2NrU2l6ZT0xMDI0LHAub3V0U2l6''@;'; put 'put ''ZT0zODQscC5obWFjU3RyZW5ndGg9MTkyLHAucGFkTGVuZ3RoPTEyOCxwLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHcpe3JldHVybiJoZXgiPT09dz9JLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsMTIpLCJiaWciKTpJLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsMTIpLCJiaWciKX19LDkz''@;'; put 'put ''OTA5OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2IoNzA4MjQpKCJmbGF0Iil9LDk0MTQzOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiZ2EiLHttb250aHM6WyJFYW5ceGUxaXIiLCJGZWFiaHJhIiwiTVx4ZTFydGEiLCJBaWJyZVx4''@;'; put 'put ''ZTFuIiwiQmVhbHRhaW5lIiwiTWVpdGhlYW1oIiwiSVx4ZmFpbCIsIkxceGZhbmFzYSIsIk1lXHhlMW4gRlx4ZjNtaGFpciIsIkRlaXJlYWRoIEZceGYzbWhhaXIiLCJTYW1oYWluIiwiTm9sbGFpZyJdLG1vbnRoc1Nob3J0OlsiRWFuIiwiRmVhYmgiLCJNXHhlMXJ0IiwiQWliIiwiQmVhbCIs''@;'; put 'put ''Ik1laXRoIiwiSVx4ZmFpbCIsIkxceGZhbiIsIk0uRi4iLCJELkYuIiwiU2FtaCIsIk5vbGwiXSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOlsiRFx4ZTkgRG9taG5haWdoIiwiRFx4ZTkgTHVhaW4iLCJEXHhlOSBNXHhlMWlydCIsIkRceGU5IENceGU5YWRhb2luIiwiRFx4ZTlhcmRh''@;'; put 'put ''b2luIiwiRFx4ZTkgaEFvaW5lIiwiRFx4ZTkgU2F0aGFpcm4iXSx3ZWVrZGF5c1Nob3J0OlsiRG9taCIsIkx1YW4iLCJNXHhlMWlydCIsIkNceGU5YWQiLCJEXHhlOWFyIiwiQW9pbmUiLCJTYXRoIl0sd2Vla2RheXNNaW46WyJEbyIsIkx1IiwiTVx4ZTEiLCJDXHhlOSIsIkRceGU5IiwiQSIs''@;'; put 'put ''IlNhIl0sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSW5uaXUgYWdd''@;'; put 'put ''IExUIixuZXh0RGF5OiJbQW1ceGUxcmFjaCBhZ10gTFQiLG5leHRXZWVrOiJkZGRkIFthZ10gTFQiLGxhc3REYXk6IltJbm5ceGU5IGFnXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3NlbyBjYWl0ZV0gW2FnXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaSAlcyIscGFz''@;'; put 'put ''dDoiJXMgXHhmMyBzaGluIixzOiJjXHhmYXBsYSBzb2ljaW5kIixzczoiJWQgc29pY2luZCIsbToiblx4ZjNpbVx4ZTlhZCIsbW06IiVkIG5ceGYzaW1ceGU5YWQiLGg6InVhaXIgYW4gY2hsb2lnIixoaDoiJWQgdWFpciBhbiBjaGxvaWciLGQ6ImxceGUxIixkZDoiJWQgbFx4ZTEiLE06Im1c''@;'; put 'put ''eGVkIixNTToiJWQgbVx4ZWRvbm5hIix5OiJibGlhaW4iLHl5OiIlZCBibGlhaW4ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGR8bmF8bWgpLyxvcmRpbmFsOmZ1bmN0aW9uKFIpe3JldHVybiBSKygxPT09Uj8iZCI6UiUxMD09Mj8ibmEiOiJtaCIpfSx3ZWVrOntkb3c6MSxk''@;'; put 'put ''b3k6NH19KX0oYig5NzU4NikpfSw5NDIzNzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDY0NTUwKSxfPU1hdGgubWluO2NlLmV4cG9ydHM9ZnVuY3Rpb24ocCl7dmFyIFY9SShwKTtyZXR1cm4gVj4wP18oViw5MDA3MTk5MjU0NzQwOTkxKTowfX0sOTQyNDg6KGNlLFgsYik9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIEk9Yig5MzgwNykuQnVmZmVyLF89YigyOTQyMikscD1jZS5leHBvcnRzO3AuZW5jb2RpbmdzPW51bGwscC5kZWZhdWx0Q2hhclVuaWNvZGU9Ilx1ZmZmZCIscC5kZWZhdWx0Q2hhclNpbmdsZUJ5dGU9Ij8iLHAuZW5jb2RlPWZ1bmN0aW9uKEYsUix6KXtGPSIiKyhG''@;'; put 'put ''fHwiIik7dmFyIE49cC5nZXRFbmNvZGVyKFIseiksTz1OLndyaXRlKEYpLEs9Ti5lbmQoKTtyZXR1cm4gSyYmSy5sZW5ndGg+MD9JLmNvbmNhdChbTyxLXSk6T30scC5kZWNvZGU9ZnVuY3Rpb24oRixSLHopeyJzdHJpbmciPT10eXBlb2YgRiYmKHAuc2tpcERlY29kZVdhcm5pbmd8fChjb25z''@;'; put 'put ''b2xlLmVycm9yKCJJY29udi1saXRlIHdhcm5pbmc6IGRlY29kZSgpLWluZyBzdHJpbmdzIGlzIGRlcHJlY2F0ZWQuIFJlZmVyIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2h0dWNoa2luL2ljb252LWxpdGUvd2lraS9Vc2UtQnVmZmVycy13aGVuLWRlY29kaW5nIikscC5za2lwRGVjb2RlV2Fy''@;'; put 'put ''bmluZz0hMCksRj1JLmZyb20oIiIrKEZ8fCIiKSwiYmluYXJ5IikpO3ZhciBOPXAuZ2V0RGVjb2RlcihSLHopLE89Ti53cml0ZShGKSxLPU4uZW5kKCk7cmV0dXJuIEs/TytLOk99LHAuZW5jb2RpbmdFeGlzdHM9ZnVuY3Rpb24oRil7dHJ5e3JldHVybiBwLmdldENvZGVjKEYpLCEwfWNhdGNo''@;'; put 'put ''e3JldHVybiExfX0scC50b0VuY29kaW5nPXAuZW5jb2RlLHAuZnJvbUVuY29kaW5nPXAuZGVjb2RlLHAuX2NvZGVjRGF0YUNhY2hlPXt9LHAuZ2V0Q29kZWM9ZnVuY3Rpb24oRil7cC5lbmNvZGluZ3N8fChwLmVuY29kaW5ncz1iKDcyODkzKSk7Zm9yKHZhciBSPXAuX2Nhbm9uaWNhbGl6ZUVu''@;'; put 'put ''Y29kaW5nKEYpLHo9e307Oyl7dmFyIE49cC5fY29kZWNEYXRhQ2FjaGVbUl07aWYoTilyZXR1cm4gTjt2YXIgTz1wLmVuY29kaW5nc1tSXTtzd2l0Y2godHlwZW9mIE8pe2Nhc2Uic3RyaW5nIjpSPU87YnJlYWs7Y2FzZSJvYmplY3QiOmZvcih2YXIgSyBpbiBPKXpbS109T1tLXTt6LmVuY29k''@;'; put 'put ''aW5nTmFtZXx8KHouZW5jb2RpbmdOYW1lPVIpLFI9Ty50eXBlO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOnJldHVybiB6LmVuY29kaW5nTmFtZXx8KHouZW5jb2RpbmdOYW1lPVIpLE49bmV3IE8oeixwKSxwLl9jb2RlY0RhdGFDYWNoZVt6LmVuY29kaW5nTmFtZV09TixOO2RlZmF1bHQ6dGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJFbmNvZGluZyBub3QgcmVjb2duaXplZDogJyIrRisiJyAoc2VhcmNoZWQgYXM6ICciK1IrIicpIil9fX0scC5fY2Fub25pY2FsaXplRW5jb2Rpbmc9ZnVuY3Rpb24oUCl7cmV0dXJuKCIiK1ApLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvOlxkezR9JHxbXjAtOWEtel0vZywi''@;'; put 'put ''Iil9LHAuZ2V0RW5jb2Rlcj1mdW5jdGlvbihGLFIpe3ZhciB6PXAuZ2V0Q29kZWMoRiksTj1uZXcgei5lbmNvZGVyKFIseik7cmV0dXJuIHouYm9tQXdhcmUmJlImJlIuYWRkQk9NJiYoTj1uZXcgXy5QcmVwZW5kQk9NKE4sUikpLE59LHAuZ2V0RGVjb2Rlcj1mdW5jdGlvbihGLFIpe3ZhciB6''@;'; put 'put ''PXAuZ2V0Q29kZWMoRiksTj1uZXcgei5kZWNvZGVyKFIseik7cmV0dXJuIHouYm9tQXdhcmUmJiEoUiYmITE9PT1SLnN0cmlwQk9NKSYmKE49bmV3IF8uU3RyaXBCT00oTixSKSksTn07dmFyIFY9dHlwZW9mIHByb2Nlc3M8InUiJiZwcm9jZXNzLnZlcnNpb25zJiZwcm9jZXNzLnZlcnNpb25z''@;'; put 'put ''Lm5vZGU7aWYoVil7dmFyIHc9Vi5zcGxpdCgiLiIpLm1hcChOdW1iZXIpOyh3WzBdPjB8fHdbMV0+PTEwKSYmYig2MTA5MykocCksYigxNTc5MSkocCl9fSw5NDQ2ODpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPWZ1bmN0aW9uKFgpe3JldHVybiBudWxsPT1YfX0sOTQ1OTM6KGNlLFgs''@;'; put 'put ''Yik9Pnt2YXIgST1iKDM4MjgwKSxwPW5ldyhiKDUzNDU5KSksVj1uZXcgSSgyNCksdz1uZXcgSSgxMSksUD1uZXcgSSgxMCksRj1uZXcgSSgzKSxSPW5ldyBJKDcpLHo9YigxMjcyNyksTj1iKDMzNDIpO2Z1bmN0aW9uIE8oZWUsSil7cmV0dXJuIEo9Snx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZl''@;'; put 'put ''cihlZSl8fChlZT1uZXcgQnVmZmVyKGVlLEopKSx0aGlzLl9wdWI9bmV3IEkoZWUpLHRoaXN9ZnVuY3Rpb24gSyhlZSxKKXtyZXR1cm4gSj1KfHwidXRmOCIsQnVmZmVyLmlzQnVmZmVyKGVlKXx8KGVlPW5ldyBCdWZmZXIoZWUsSikpLHRoaXMuX3ByaXY9bmV3IEkoZWUpLHRoaXN9Y2UuZXhw''@;'; put 'put ''b3J0cz1XO3ZhciBaPXt9O2Z1bmN0aW9uIFcoZWUsSixyZSl7dGhpcy5zZXRHZW5lcmF0b3IoSiksdGhpcy5fX3ByaW1lPW5ldyBJKGVlKSx0aGlzLl9wcmltZT1JLm1vbnQodGhpcy5fX3ByaW1lKSx0aGlzLl9wcmltZUxlbj1lZS5sZW5ndGgsdGhpcy5fcHViPXZvaWQgMCx0aGlzLl9wcml2''@;'; put 'put ''PXZvaWQgMCx0aGlzLl9wcmltZUNvZGU9dm9pZCAwLHJlPyh0aGlzLnNldFB1YmxpY0tleT1PLHRoaXMuc2V0UHJpdmF0ZUtleT1LKTp0aGlzLl9wcmltZUNvZGU9OH1mdW5jdGlvbiBxKGVlLEope3ZhciByZT1uZXcgQnVmZmVyKGVlLnRvQXJyYXkoKSk7cmV0dXJuIEo/cmUudG9TdHJpbmco''@;'; put 'put ''Sik6cmV9T2JqZWN0LmRlZmluZVByb3BlcnR5KFcucHJvdG90eXBlLCJ2ZXJpZnlFcnJvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiB0aGlzLl9wcmltZUNvZGUmJih0aGlzLl9wcmltZUNvZGU9ZnVuY3Rpb24gWShlZSxKKXt2YXIgcmU9''@;'; put 'put ''Si50b1N0cmluZygiaGV4IiksaWU9W3JlLGVlLnRvU3RyaW5nKDE2KV0uam9pbigiXyIpO2lmKGllIGluIFopcmV0dXJuIFpbaWVdO3ZhciBnZSx1ZT0wO2lmKGVlLmlzRXZlbigpfHwhei5zaW1wbGVTaWV2ZXx8IXouZmVybWF0VGVzdChlZSl8fCFwLnRlc3QoZWUpKXJldHVybiB1ZSs9MSxa''@;'; put 'put ''W2llXT11ZSs9IjAyIj09PXJlfHwiMDUiPT09cmU/ODo0LHVlO3N3aXRjaChwLnRlc3QoZWUuc2hybigxKSl8fCh1ZSs9MikscmUpe2Nhc2UiMDIiOmVlLm1vZChWKS5jbXAodykmJih1ZSs9OCk7YnJlYWs7Y2FzZSIwNSI6KGdlPWVlLm1vZChQKSkuY21wKEYpJiZnZS5jbXAoUikmJih1ZSs9''@;'; put 'put ''OCk7YnJlYWs7ZGVmYXVsdDp1ZSs9NH1yZXR1cm4gWltpZV09dWUsdWV9KHRoaXMuX19wcmltZSx0aGlzLl9fZ2VuKSksdGhpcy5fcHJpbWVDb2RlfX0pLFcucHJvdG90eXBlLmdlbmVyYXRlS2V5cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2fHwodGhpcy5fcHJpdj1uZXcgSShOKHRo''@;'; put 'put ''aXMuX3ByaW1lTGVuKSkpLHRoaXMuX3B1Yj10aGlzLl9nZW4udG9SZWQodGhpcy5fcHJpbWUpLnJlZFBvdyh0aGlzLl9wcml2KS5mcm9tUmVkKCksdGhpcy5nZXRQdWJsaWNLZXkoKX0sVy5wcm90b3R5cGUuY29tcHV0ZVNlY3JldD1mdW5jdGlvbihlZSl7dmFyIEo9KGVlPShlZT1uZXcgSShl''@;'; put 'put ''ZSkpLnRvUmVkKHRoaXMuX3ByaW1lKSkucmVkUG93KHRoaXMuX3ByaXYpLmZyb21SZWQoKSxyZT1uZXcgQnVmZmVyKEoudG9BcnJheSgpKSxpZT10aGlzLmdldFByaW1lKCk7aWYocmUubGVuZ3RoPGllLmxlbmd0aCl7dmFyIHVlPW5ldyBCdWZmZXIoaWUubGVuZ3RoLXJlLmxlbmd0aCk7dWUu''@;'; put 'put ''ZmlsbCgwKSxyZT1CdWZmZXIuY29uY2F0KFt1ZSxyZV0pfXJldHVybiByZX0sVy5wcm90b3R5cGUuZ2V0UHVibGljS2V5PWZ1bmN0aW9uKEope3JldHVybiBxKHRoaXMuX3B1YixKKX0sVy5wcm90b3R5cGUuZ2V0UHJpdmF0ZUtleT1mdW5jdGlvbihKKXtyZXR1cm4gcSh0aGlzLl9wcml2LEop''@;'; put 'put ''fSxXLnByb3RvdHlwZS5nZXRQcmltZT1mdW5jdGlvbihlZSl7cmV0dXJuIHEodGhpcy5fX3ByaW1lLGVlKX0sVy5wcm90b3R5cGUuZ2V0R2VuZXJhdG9yPWZ1bmN0aW9uKGVlKXtyZXR1cm4gcSh0aGlzLl9nZW4sZWUpfSxXLnByb3RvdHlwZS5zZXRHZW5lcmF0b3I9ZnVuY3Rpb24oZWUsSil7''@;'; put 'put ''cmV0dXJuIEo9Snx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihlZSl8fChlZT1uZXcgQnVmZmVyKGVlLEopKSx0aGlzLl9fZ2VuPWVlLHRoaXMuX2dlbj1uZXcgSShlZSksdGhpc319LDk0NzcyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNDk2MDkpLF89SS5kZWZpbmUoIlRpbWUi''@;'; put 'put ''LGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uoe3V0Y1RpbWU6dGhpcy51dGN0aW1lKCksZ2VuZXJhbFRpbWU6dGhpcy5nZW50aW1lKCl9KX0pLHA9SS5kZWZpbmUoIkF0dHJpYnV0ZVR5cGVWYWx1ZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidHlwZSIpLm9iamlkKCksdGhp''@;'; put 'put ''cy5rZXkoInZhbHVlIikuYW55KCkpfSksVj1JLmRlZmluZSgiQWxnb3JpdGhtSWRlbnRpZmllciIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikub2JqaWQoKSx0aGlzLmtleSgicGFyYW1ldGVycyIpLm9wdGlvbmFsKCksdGhpcy5rZXkoImN1cnZlIiku''@;'; put 'put ''b2JqaWQoKS5vcHRpb25hbCgpKX0pLHc9SS5kZWZpbmUoIlN1YmplY3RQdWJsaWNLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS51c2UoViksdGhpcy5rZXkoInN1YmplY3RQdWJsaWNLZXkiKS5iaXRzdHIoKSl9KSxQPUkuZGVmaW5lKCJS''@;'; put 'put ''ZWxhdGl2ZURpc3Rpbmd1aXNoZWROYW1lIixmdW5jdGlvbigpe3RoaXMuc2V0b2YocCl9KSxGPUkuZGVmaW5lKCJSRE5TZXF1ZW5jZSIsZnVuY3Rpb24oKXt0aGlzLnNlcW9mKFApfSksUj1JLmRlZmluZSgiTmFtZSIsZnVuY3Rpb24oKXt0aGlzLmNob2ljZSh7cmRuU2VxdWVuY2U6dGhpcy51''@;'; put 'put ''c2UoRil9KX0pLHo9SS5kZWZpbmUoIlZhbGlkaXR5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJub3RCZWZvcmUiKS51c2UoXyksdGhpcy5rZXkoIm5vdEFmdGVyIikudXNlKF8pKX0pLE49SS5kZWZpbmUoIkV4dGVuc2lvbiIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9i''@;'; put 'put ''aih0aGlzLmtleSgiZXh0bklEIikub2JqaWQoKSx0aGlzLmtleSgiY3JpdGljYWwiKS5ib29sKCkuZGVmKCExKSx0aGlzLmtleSgiZXh0blZhbHVlIikub2N0c3RyKCkpfSksTz1JLmRlZmluZSgiVEJTQ2VydGlmaWNhdGUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZl''@;'; put 'put ''cnNpb24iKS5leHBsaWNpdCgwKS5pbnQoKS5vcHRpb25hbCgpLHRoaXMua2V5KCJzZXJpYWxOdW1iZXIiKS5pbnQoKSx0aGlzLmtleSgic2lnbmF0dXJlIikudXNlKFYpLHRoaXMua2V5KCJpc3N1ZXIiKS51c2UoUiksdGhpcy5rZXkoInZhbGlkaXR5IikudXNlKHopLHRoaXMua2V5KCJzdWJq''@;'; put 'put ''ZWN0IikudXNlKFIpLHRoaXMua2V5KCJzdWJqZWN0UHVibGljS2V5SW5mbyIpLnVzZSh3KSx0aGlzLmtleSgiaXNzdWVyVW5pcXVlSUQiKS5pbXBsaWNpdCgxKS5iaXRzdHIoKS5vcHRpb25hbCgpLHRoaXMua2V5KCJzdWJqZWN0VW5pcXVlSUQiKS5pbXBsaWNpdCgyKS5iaXRzdHIoKS5vcHRp''@;'; put 'put ''b25hbCgpLHRoaXMua2V5KCJleHRlbnNpb25zIikuZXhwbGljaXQoMykuc2Vxb2YoTikub3B0aW9uYWwoKSl9KSxLPUkuZGVmaW5lKCJYNTA5Q2VydGlmaWNhdGUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInRic0NlcnRpZmljYXRlIikudXNlKE8pLHRoaXMua2V5KCJz''@;'; put 'put ''aWduYXR1cmVBbGdvcml0aG0iKS51c2UoViksdGhpcy5rZXkoInNpZ25hdHVyZVZhbHVlIikuYml0c3RyKCkpfSk7Y2UuZXhwb3J0cz1LfSw5NTQ5MzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDI4MzY3KSxfPWIoMTIyMDIpLHA9Yig0MDIyMCksVj1iKDQ2OTI2KSx3PWIoNTg2''@;'; put 'put ''MDcpLFA9Yig1NTU5MiksRj1iKDY3Mjc3KSxSPWIoMTkxNTApLHo9Yig2MDM5NyksTj1iKDkyOTk4KSxPPWIoODY2NzUpLEs9Yig2ODMzMiksWj1iKDc3NjM5KSxZPWIoOTY2NDcpLFc9Yig2Mzk1MSkscT1iKDM2NTA2KSxlZT1iKDg4MjQ0KSxKPVN0cmluZyxyZT1fKCJKU09OIiwic3RyaW5n''@;'; put 'put ''aWZ5IiksaWU9dygvLi8uZXhlYyksdWU9dygiIi5jaGFyQXQpLGdlPXcoIiIuY2hhckNvZGVBdCksX2U9dygiIi5yZXBsYWNlKSxUZT13KCIiLnNsaWNlKSxNZT13KFtdLnB1c2gpLFplPXcoMS4xLnRvU3RyaW5nKSxCPS9bXHVEODAwLVx1REZGRl0vZyxnPS9eW1x1RDgwMC1cdURCRkZdJC8s''@;'; put 'put ''eT0vXltcdURDMDAtXHVERkZGXSQvLHg9VygpLEM9eC5sZW5ndGgsVD0hcXx8UChmdW5jdGlvbigpe3ZhciBBPV8oIlN5bWJvbCIpKCJzdHJpbmdpZnkgZGV0ZWN0aW9uIik7cmV0dXJuIltudWxsXSIhPT1yZShbQV0pfHwie30iIT09cmUoe2E6QX0pfHwie30iIT09cmUoT2JqZWN0KEEpKX0p''@;'; put 'put ''LEg9UChmdW5jdGlvbigpe3JldHVybiciXFx1ZGYwNlxcdWQ4MzQiJyE9PXJlKCJcdWRmMDZcdWQ4MzQiKXx8JyJcXHVkZWFkIichPT1yZSgiXHVkZWFkIil9KSxqPVQ/ZnVuY3Rpb24oQSxhZSl7dmFyIG5lPVooYXJndW1lbnRzKSxzZT1tKGFlKTtpZihSKHNlKXx8dm9pZCAwIT09QSYmIU4o''@;'; put 'put ''QSkpcmV0dXJuIG5lWzFdPWZ1bmN0aW9uKENlLFVlKXtpZihSKHNlKSYmKFVlPVYoc2UsdGhpcyxKKENlKSxVZSkpLCFOKFVlKSlyZXR1cm4gVWV9LHAocmUsbnVsbCxuZSl9OnJlLEU9ZnVuY3Rpb24oQSxhZSxuZSl7dmFyIHNlPXVlKG5lLGFlLTEpLENlPXVlKG5lLGFlKzEpO3JldHVybiBp''@;'; put 'put ''ZShnLEEpJiYhaWUoeSxDZSl8fGllKHksQSkmJiFpZShnLHNlKT8iXFx1IitaZShnZShBLDApLDE2KTpBfSxtPWZ1bmN0aW9uKEEpe2lmKFIoQSkpcmV0dXJuIEE7aWYoRihBKSl7Zm9yKHZhciBhZT1BLmxlbmd0aCxuZT1bXSxzZT0wO3NlPGFlO3NlKyspe3ZhciBDZT1BW3NlXTsic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mIENlP01lKG5lLENlKTooIm51bWJlciI9PXR5cGVvZiBDZXx8Ik51bWJlciI9PT1PKENlKXx8IlN0cmluZyI9PT1PKENlKSkmJk1lKG5lLEsoQ2UpKX12YXIgVWU9bmUubGVuZ3RoLEplPSEwO3JldHVybiBmdW5jdGlvbihpdCx4ZSl7aWYoSmUpcmV0dXJuIEplPSExLHhlO2lm''@;'; put 'put ''KEYodGhpcykpcmV0dXJuIHhlO2Zvcih2YXIgeWU9MDt5ZTxVZTt5ZSsrKWlmKG5lW3llXT09PWl0KXJldHVybiB4ZX19fTtyZSYmSSh7dGFyZ2V0OiJKU09OIixzdGF0OiEwLGFyaXR5OjMsZm9yY2VkOlR8fEh8fCFlZX0se3N0cmluZ2lmeTpmdW5jdGlvbihhZSxuZSxzZSl7dmFyIENlPW0o''@;'; put 'put ''bmUpLFVlPVtdLEplPWooYWUsZnVuY3Rpb24oSGUsTGUpe3ZhciBSZT1SKENlKT9WKENlLHRoaXMsSihIZSksTGUpOkxlO3JldHVybiFlZSYmeihSZSk/eCsoTWUoVWUsUmUucmF3SlNPTiktMSk6UmV9LHNlKTtpZigic3RyaW5nIiE9dHlwZW9mIEplfHwoSCYmKEplPV9lKEplLEIsRSkpLGVl''@;'; put 'put ''KSlyZXR1cm4gSmU7Zm9yKHZhciBpdD0iIix4ZT1KZS5sZW5ndGgseWU9MDt5ZTx4ZTt5ZSsrKXt2YXIgS2U9dWUoSmUseWUpO2lmKCciJz09PUtlKXt2YXIgamU9WShKZSwrK3llKS5lbmQtMSxrZT1UZShKZSx5ZSxqZSk7aXQrPVRlKGtlLDAsQyk9PT14P1VlW1RlKGtlLEMpXTonIicra2Ur''@;'; put 'put ''JyInLHllPWplfWVsc2UgaXQrPUtlfXJldHVybiBpdH19KX0sOTU1NDI6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIF89Yig2ODI4Mykucm90cjMyO2Z1bmN0aW9uIFYoTyxLLFope3JldHVybiBPJktefk8mWn1mdW5jdGlvbiB3KE8sSyxaKXtyZXR1cm4gTyZLXk8mWl5LJlp9ZnVuY3Rp''@;'; put 'put ''b24gUChPLEssWil7cmV0dXJuIE9eS15afVguZnRfMT1mdW5jdGlvbiBwKE8sSyxaLFkpe3JldHVybiAwPT09Tz9WKEssWixZKToxPT09T3x8Mz09PU8/UChLLFosWSk6Mj09PU8/dyhLLFosWSk6dm9pZCAwfSxYLmNoMzI9VixYLm1hajMyPXcsWC5wMzI9UCxYLnMwXzI1Nj1mdW5jdGlvbiBG''@;'; put 'put ''KE8pe3JldHVybiBfKE8sMileXyhPLDEzKV5fKE8sMjIpfSxYLnMxXzI1Nj1mdW5jdGlvbiBSKE8pe3JldHVybiBfKE8sNileXyhPLDExKV5fKE8sMjUpfSxYLmcwXzI1Nj1mdW5jdGlvbiB6KE8pe3JldHVybiBfKE8sNyleXyhPLDE4KV5PPj4+M30sWC5nMV8yNTY9ZnVuY3Rpb24gTihPKXty''@;'; put 'put ''ZXR1cm4gXyhPLDE3KV5fKE8sMTkpXk8+Pj4xMH19LDk1NjA4OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMjgzNjcpLF89Yig3MzYyNCk7SSh7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiFiKDUzNTA1KSgiaXNEaXNqb2ludEZyb20iLGZ1bmN0aW9uKHcp''@;'; put 'put ''e3JldHVybiF3fSl9LHtpc0Rpc2pvaW50RnJvbTpffSl9LDk1NzI1OmNlPT57Y2UuZXhwb3J0cz1mdW5jdGlvbiBYKGIpe2Zvcih2YXIgXyxJPWIubGVuZ3RoO0ktLTspe2lmKDI1NSE9PShfPWIucmVhZFVJbnQ4KEkpKSl7XysrLGIud3JpdGVVSW50OChfLEkpO2JyZWFrfWIud3JpdGVVSW50''@;'; put 'put ''OCgwLEkpfX19LDk1NzMxOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNjU5OTIpLF89Yig3OTQ3NykscD1iKDU5NzA1KSxWPWIoNTI5MTApO2NlLmV4cG9ydHM9Vnx8SS5jYWxsKHAsXyl9LDk1NzU5OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJ''@;'; put 'put ''LmRlZmluZUxvY2FsZSgiZnItY2giLHttb250aHM6ImphbnZpZXJfZlx4ZTl2cmllcl9tYXJzX2F2cmlsX21haV9qdWluX2p1aWxsZXRfYW9ceGZidF9zZXB0ZW1icmVfb2N0b2JyZV9ub3ZlbWJyZV9kXHhlOWNlbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFudi5fZlx4ZTl2ci5f''@;'; put 'put ''bWFyc19hdnIuX21haV9qdWluX2p1aWwuX2FvXHhmYnRfc2VwdC5fb2N0Ll9ub3YuX2RceGU5Yy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiZGltYW5jaGVfbHVuZGlfbWFyZGlfbWVyY3JlZGlfamV1ZGlfdmVuZHJlZGlfc2FtZWRpIi5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzU2hvcnQ6ImRpbS5fbHVuLl9tYXIuX21lci5famV1Ll92ZW4uX3NhbS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRpX2x1X21hX21lX2plX3ZlX3NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1t''@;'; put 'put ''OnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0F1am91cmRcdTIwMTlodWkgXHhlMF0gTFQiLG5leHREYXk6IltEZW1haW4gXHhlMF0gTFQi''@;'; put 'put ''LG5leHRXZWVrOiJkZGRkIFtceGUwXSBMVCIsbGFzdERheToiW0hpZXIgXHhlMF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtkZXJuaWVyIFx4ZTBdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkYW5zICVzIixwYXN0OiJpbCB5IGEgJXMiLHM6InF1ZWxxdWVzIHNlY29u''@;'; put 'put ''ZGVzIixzczoiJWQgc2Vjb25kZXMiLG06InVuZSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJ1bmUgaGV1cmUiLGhoOiIlZCBoZXVyZXMiLGQ6InVuIGpvdXIiLGRkOiIlZCBqb3VycyIsTToidW4gbW9pcyIsTU06IiVkIG1vaXMiLHk6InVuIGFuIix5eToiJWQgYW5zIn0sZGF5T2ZNb250''@;'; put 'put ''aE9yZGluYWxQYXJzZTovXGR7MSwyfShlcnxlKS8sb3JkaW5hbDpmdW5jdGlvbihwLFYpe3N3aXRjaChWKXtkZWZhdWx0OmNhc2UiTSI6Y2FzZSJRIjpjYXNlIkQiOmNhc2UiREREIjpjYXNlImQiOnJldHVybiBwKygxPT09cD8iZXIiOiJlIik7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBwKygx''@;'; put 'put ''PT09cD8icmUiOiJlIil9fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw5NTk2MDpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImVuLWlsIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9K''@;'; put 'put ''dW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVz''@;'; put 'put ''ZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1h''@;'; put 'put ''dDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21v''@;'; put 'put ''cnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vj''@;'; put 'put ''b25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9y''@;'; put 'put ''ZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24ocCl7dmFyIFY9cCUxMDtyZXR1cm4gcCsoMT09fn4ocCUxMDAvMTApPyJ0aCI6MT09PVY/InN0IjoyPT09Vj8ibmQiOjM9PT1WPyJyZCI6InRoIil9fSl9KGIoOTc1ODYpKX0sOTYwNjI6KGNlLFgsYik9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7dmFyIEk9YigzNzczMSksXz1iKDk3NTQxKS5oYXMscD1iKDMwMzM5KSxWPWIoNDM2MzIpLHc9YigxMTM4KSxQPWIoNjY1NDIpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oUil7dmFyIHo9SSh0aGlzKSxOPVYoUik7aWYocCh6KTxOLnNpemUpcmV0dXJuITE7dmFyIE89Ti5n''@;'; put 'put ''ZXRJdGVyYXRvcigpO3JldHVybiExIT09dyhPLGZ1bmN0aW9uKEspe2lmKCFfKHosSykpcmV0dXJuIFAoTywibm9ybWFsIiwhMSl9KX19LDk2MTgwOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMjgzNjcpLF89YigzMzk2MykscD1iKDYzMzM2KSxWPWIoMTEwOCksdz1iKDE5MTUw''@;'; put 'put ''KSxQPWIoMjY0MDApLEY9Yig0NDAzOSksUj1iKDU4Nzk1KSx6PWIoNTU1OTIpLE49YigzOGUzKSxPPWIoNTgwMTIpLEs9Yig3ODk2OCkuSXRlcmF0b3JQcm90b3R5cGUsWj1iKDQ2Mzg3KSxZPWIoODg3ODgpLFc9ImNvbnN0cnVjdG9yIixxPSJJdGVyYXRvciIsZWU9TygidG9TdHJpbmdUYWci''@;'; put 'put ''KSxKPVR5cGVFcnJvcixyZT1fW3FdLGllPVl8fCF3KHJlKXx8cmUucHJvdG90eXBlIT09S3x8IXooZnVuY3Rpb24oKXtyZSh7fSl9KSx1ZT1mdW5jdGlvbigpe2lmKHAodGhpcyxLKSxQKHRoaXMpPT09Syl0aHJvdyBuZXcgSigiQWJzdHJhY3QgY2xhc3MgSXRlcmF0b3Igbm90IGRpcmVjdGx5''@;'; put 'put ''IGNvbnN0cnVjdGFibGUiKX0sZ2U9ZnVuY3Rpb24oX2UsVGUpe1o/RihLLF9lLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFRlfSxzZXQ6ZnVuY3Rpb24oTWUpe2lmKFYodGhpcyksdGhpcz09PUspdGhyb3cgbmV3IEooIllvdSBjYW4ndCByZWRlZmluZSB0aGlzIHBy''@;'; put 'put ''b3BlcnR5Iik7Tih0aGlzLF9lKT90aGlzW19lXT1NZTpSKHRoaXMsX2UsTWUpfX0pOktbX2VdPVRlfTtOKEssZWUpfHxnZShlZSxxKSwoaWV8fCFOKEssVyl8fEtbV109PT1PYmplY3QpJiZnZShXLHVlKSx1ZS5wcm90b3R5cGU9SyxJKHtnbG9iYWw6ITAsY29uc3RydWN0b3I6ITAsZm9yY2Vk''@;'; put 'put ''OmllfSx7SXRlcmF0b3I6dWV9KX0sOTYzMzk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig1ODYwNyksXz1iKDMxOTUwKSxwPU1hdGguZmxvb3IsVj1JKCIiLmNoYXJBdCksdz1JKCIiLnJlcGxhY2UpLFA9SSgiIi5zbGljZSksRj0vXCQoWyQmJ2BdfFxkezEsMn18PFtePl0qPikv''@;'; put 'put ''ZyxSPS9cJChbJCYnYF18XGR7MSwyfSkvZztjZS5leHBvcnRzPWZ1bmN0aW9uKHosTixPLEssWixZKXt2YXIgVz1PK3oubGVuZ3RoLHE9Sy5sZW5ndGgsZWU9UjtyZXR1cm4gdm9pZCAwIT09WiYmKFo9XyhaKSxlZT1GKSx3KFksZWUsZnVuY3Rpb24oSixyZSl7dmFyIGllO3N3aXRjaChWKHJl''@;'; put 'put ''LDApKXtjYXNlIiQiOnJldHVybiIkIjtjYXNlIiYiOnJldHVybiB6O2Nhc2UiYCI6cmV0dXJuIFAoTiwwLE8pO2Nhc2UiJyI6cmV0dXJuIFAoTixXKTtjYXNlIjwiOmllPVpbUChyZSwxLC0xKV07YnJlYWs7ZGVmYXVsdDp2YXIgdWU9K3JlO2lmKDA9PT11ZSlyZXR1cm4gSjtpZih1ZT5xKXt2''@;'; put 'put ''YXIgZ2U9cCh1ZS8xMCk7cmV0dXJuIDA9PT1nZT9KOmdlPD1xP3ZvaWQgMD09PUtbZ2UtMV0/VihyZSwxKTpLW2dlLTFdK1YocmUsMSk6Sn1pZT1LW3VlLTFdfXJldHVybiB2b2lkIDA9PT1pZT8iIjppZX0pfX0sOTY2NDc6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig1ODYwNyks''@;'; put 'put ''Xz1iKDM4ZTMpLHA9U3ludGF4RXJyb3IsVj1wYXJzZUludCx3PVN0cmluZy5mcm9tQ2hhckNvZGUsUD1JKCIiLmNoYXJBdCksRj1JKCIiLnNsaWNlKSxSPUkoLy4vLmV4ZWMpLHo9eydcXCInOiciJywiXFxcXCI6IlxcIiwiXFwvIjoiLyIsIlxcYiI6IlxiIiwiXFxmIjoiXGYiLCJcXG4iOiJc''@;'; put 'put ''biIsIlxcciI6IlxyIiwiXFx0IjoiXHQifSxOPS9eW1xkYS1mXXs0fSQvaSxPPS9eW1x1MDAwMC1cdTAwMUZdJC87Y2UuZXhwb3J0cz1mdW5jdGlvbihLLFope2Zvcih2YXIgWT0hMCxXPSIiO1o8Sy5sZW5ndGg7KXt2YXIgcT1QKEssWik7aWYoIlxcIj09PXEpe3ZhciBlZT1GKEssWixaKzIp''@;'; put 'put ''O2lmKF8oeixlZSkpVys9eltlZV0sWis9MjtlbHNle2lmKCJcXHUiIT09ZWUpdGhyb3cgbmV3IHAoJ1Vua25vd24gZXNjYXBlIHNlcXVlbmNlOiAiJytlZSsnIicpO3ZhciBKPUYoSyxaKz0yLForNCk7aWYoIVIoTixKKSl0aHJvdyBuZXcgcCgiQmFkIFVuaWNvZGUgZXNjYXBlIGF0OiAiK1op''@;'; put 'put ''O1crPXcoVihKLDE2KSksWis9NH19ZWxzZXtpZignIic9PT1xKXtZPSExLForKzticmVha31pZihSKE8scSkpdGhyb3cgbmV3IHAoIkJhZCBjb250cm9sIGNoYXJhY3RlciBpbiBzdHJpbmcgbGl0ZXJhbCBhdDogIitaKTtXKz1xLForK319aWYoWSl0aHJvdyBuZXcgcCgiVW50ZXJtaW5hdGVk''@;'; put 'put ''IHN0cmluZyBhdDogIitaKTtyZXR1cm57dmFsdWU6VyxlbmQ6Wn19fSw5Njg2NzpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJLF8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBwKEIsZyl7aWYoIUIpdGhyb3cgbmV3IEVycm9yKGd8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gVihC''@;'; put 'put ''LGcpe0Iuc3VwZXJfPWc7dmFyIHk9ZnVuY3Rpb24oKXt9O3kucHJvdG90eXBlPWcucHJvdG90eXBlLEIucHJvdG90eXBlPW5ldyB5LEIucHJvdG90eXBlLmNvbnN0cnVjdG9yPUJ9ZnVuY3Rpb24gdyhCLGcseSl7aWYody5pc0JOKEIpKXJldHVybiBCO3RoaXMubmVnYXRpdmU9MCx0aGlzLndv''@;'; put 'put ''cmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1CJiYoKCJsZSI9PT1nfHwiYmUiPT09ZykmJih5PWcsZz0xMCksdGhpcy5faW5pdChCfHwwLGd8fDEwLHl8fCJiZSIpKX12YXIgUDsib2JqZWN0Ij09dHlwZW9mIEk/SS5leHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3''@;'; put 'put ''LndvcmRTaXplPTI2O3RyeXtQPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpiKDc4OTgyKS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEYoQixnKXt2YXIgeT1CLmNoYXJDb2RlQXQoZyk7cmV0dXJuIHk+PTY1JiZ5PD03MD95LTU1Onk+''@;'; put 'put ''PTk3JiZ5PD0xMDI/eS04Nzp5LTQ4JjE1fWZ1bmN0aW9uIFIoQixnLHkpe3ZhciB4PUYoQix5KTtyZXR1cm4geS0xPj1nJiYoeHw9RihCLHktMSk8PDQpLHh9ZnVuY3Rpb24geihCLGcseSx4KXtmb3IodmFyIEM9MCxUPU1hdGgubWluKEIubGVuZ3RoLHkpLEg9ZztIPFQ7SCsrKXt2YXIgaj1C''@;'; put 'put ''LmNoYXJDb2RlQXQoSCktNDg7Qyo9eCxDKz1qPj00OT9qLTQ5KzEwOmo+PTE3P2otMTcrMTA6an1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24oZyl7cmV0dXJuIGcgaW5zdGFuY2VvZiB3fHxudWxsIT09ZyYmIm9iamVjdCI9PXR5cGVvZiBnJiZnLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53''@;'; put 'put ''b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShnLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gZy5jbXAoeSk+MD9nOnl9LHcubWluPWZ1bmN0aW9uKGcseSl7cmV0dXJuIGcuY21wKHkpPDA/Zzp5fSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihnLHkseCl7aWYoIm51bWJlciI9''@;'; put 'put ''PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGcseSx4KTtpZigib2JqZWN0Ij09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXRBcnJheShnLHkseCk7ImhleCI9PT15JiYoeT0xNikscCh5PT09KDB8eSkmJnk+PTImJnk8PTM2KTt2YXIgQz0wOyItIj09PShnPWcudG9TdHJpbmco''@;'; put 'put ''KS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxnLmxlbmd0aCYmKDE2PT09eT90aGlzLl9wYXJzZUhleChnLEMseCk6KHRoaXMuX3BhcnNlQmFzZShnLHksQyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx5LHgpKSl9LHcu''@;'; put 'put ''cHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGcseSx4KXtnPDAmJih0aGlzLm5lZ2F0aXZlPTEsZz0tZyksZzw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZ10sdGhpcy5sZW5ndGg9MSk6Zzw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcx''@;'; put 'put ''MDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihwKGc8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCkseSx4KX0sdy5w''@;'; put 'put ''cm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihnLHkseCl7aWYocCgibnVtYmVyIj09dHlwZW9mIGcubGVuZ3RoKSxnLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChnLmxlbmd0aC8zKSx0aGlzLndvcmRz''@;'; put 'put ''PW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULEgsaj0wO2lmKCJiZSI9PT14KWZvcihDPWcubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oSD1nW0NdfGdbQy0xXTw8OHxnW0MtMl08''@;'; put 'put ''PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxnLmxlbmd0aDtDKz0zKXRoaXMud29yZHNbVF18PShIPWdbQ118Z1tDKzFdPDw4fGdbQysyXTw8MTYp''@;'; put 'put ''PDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGcseSx4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGcubGVuZ3RoLXkp''@;'; put 'put ''LzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIGosVD0wLEg9MDtpZigiYmUiPT09eClmb3IoQz1nLmxlbmd0aC0xO0M+PXk7Qy09MilqPVIoZyx5LEMpPDxULHRoaXMud29yZHNbSF18''@;'; put 'put ''PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShnLmxlbmd0aC15KSUyPT0wP3krMTp5O0M8Zy5sZW5ndGg7Qys9MilqPVIoZyx5LEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMu''@;'; put 'put ''d29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oZyx5LHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPXkpQysrO0MtLSxUPVQveXwwO2Zvcih2YXIg''@;'; put 'put ''SD1nLmxlbmd0aC14LGo9SCVDLEU9TWF0aC5taW4oSCxILWopK3gsbT0wLEE9eDtBPEU7QSs9QyltPXooZyxBLEErQyx5KSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lmKDAhPT1qKXt2YXIgYWU9MTtmb3Io''@;'; put 'put ''bT16KGcsQSxnLmxlbmd0aCx5KSxBPTA7QTxqO0ErKylhZSo9eTt0aGlzLmltdWxuKGFlKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZyl7Zy53b3Jkcz1uZXcg''@;'; put 'put ''QXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGg7eSsrKWcud29yZHNbeV09dGhpcy53b3Jkc1t5XTtnLmxlbmd0aD10aGlzLmxlbmd0aCxnLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsZy5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7''@;'; put 'put ''dmFyIGc9bmV3IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShnKSxnfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8ZzspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zv''@;'; put 'put ''cig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYo''@;'; put 'put ''dGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBOPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAw''@;'; put 'put ''MDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwi''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLE89WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sSz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQw''@;'; put 'put ''MzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0''@;'; put 'put ''MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBZKEIsZyx5KXt5Lm5lZ2F0aXZlPWcubmVnYXRpdmVeQi5uZWdhdGl2ZTt2YXIgeD1CLmxlbmd0aCtnLmxlbmd0aHwwO3ku''@;'; put 'put ''bGVuZ3RoPXgseD14LTF8MDt2YXIgQz0wfEIud29yZHNbMF0sVD0wfGcud29yZHNbMF0sSD1DKlQsRT1ILzY3MTA4ODY0fDA7eS53b3Jkc1swXT02NzEwODg2MyZIO2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYsYWU9NjcxMDg4NjMmRSxuZT1NYXRoLm1pbihtLGcubGVu''@;'; put 'put ''Z3RoLTEpLHNlPU1hdGgubWF4KDAsbS1CLmxlbmd0aCsxKTtzZTw9bmU7c2UrKylBKz0oSD0oQz0wfEIud29yZHNbbS1zZXwwXSkqKFQ9MHxnLndvcmRzW3NlXSkrYWUpLzY3MTA4ODY0fDAsYWU9NjcxMDg4NjMmSDt5LndvcmRzW21dPTB8YWUsRT0wfEF9cmV0dXJuIDAhPT1FP3kud29yZHNb''@;'; put 'put ''bV09MHxFOnkubGVuZ3RoLS0seS5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGcseSl7dmFyIHg7aWYoeT0wfHl8fDEsMTY9PT0oZz1nfHwxMCl8fCJoZXgiPT09Zyl7eD0iIjtmb3IodmFyIEM9MCxUPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj10aGlzLndv''@;'; put 'put ''cmRzW0hdLEU9KDE2Nzc3MjE1JihqPDxDfFQpKS50b1N0cmluZygxNik7VD1qPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsSC0tKSx4PTAhPT1UfHxIIT09dGhpcy5sZW5ndGgtMT9OWzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4''@;'; put 'put ''KTt4Lmxlbmd0aCV5IT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYoZz09PSgwfGcpJiZnPj0yJiZnPD0zNil7dmFyIG09T1tnXSxBPUtbZ107eD0iIjt2YXIgYWU9dGhpcy5jbG9uZSgpO2ZvcihhZS5uZWdhdGl2ZT0wOyFhZS5pc1plcm8oKTsp''@;'; put 'put ''e3ZhciBuZT1hZS5tb2RuKEEpLnRvU3RyaW5nKGcpO3g9KGFlPWFlLmlkaXZuKEEpKS5pc1plcm8oKT9uZSt4Ok5bbS1uZS5sZW5ndGhdK25lK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCV5IT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9''@;'; put 'put ''Ii0iK3gpLHh9cCghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBnPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9nKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0''@;'; put 'put ''aCYmMT09PXRoaXMud29yZHNbMl0/Zys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJnAoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1nOmd9LHcucHJvdG90eXBl''@;'; put 'put ''LnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gcCh0eXBlb2YgUDwidSIpLHRoaXMudG9BcnJheUxpa2UoUCxnLHkpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGcseSl7cmV0''@;'; put 'put ''dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksZyx5KX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oZyx5LHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtwKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxw''@;'; put 'put ''KFQ+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sSD0ibGUiPT09eSxqPW5ldyBnKFQpLEE9dGhpcy5jbG9uZSgpO2lmKEgpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbbV09RTtmb3IoO208''@;'; put 'put ''VDttKyspalttXT0wfWVsc2V7Zm9yKG09MDttPFQtQzttKyspalttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbVC1tLTFdPUV9cmV0dXJuIGp9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihnKXtyZXR1''@;'; put 'put ''cm4gMzItTWF0aC5jbHozMihnKX06ZnVuY3Rpb24oZyl7dmFyIHk9Zyx4PTA7cmV0dXJuIHk+PTQwOTYmJih4Kz0xMyx5Pj4+PTEzKSx5Pj02NCYmKHgrPTcseT4+Pj03KSx5Pj04JiYoeCs9NCx5Pj4+PTQpLHk+PTImJih4Kz0yLHk+Pj49MikseCt5fSx3LnByb3RvdHlwZS5femVyb0JpdHM9''@;'; put 'put ''ZnVuY3Rpb24oZyl7aWYoMD09PWcpcmV0dXJuIDI2O3ZhciB5PWcseD0wO3JldHVybiEoODE5MSZ5KSYmKHgrPTEzLHk+Pj49MTMpLCEoMTI3JnkpJiYoeCs9Nyx5Pj4+PTcpLCEoMTUmeSkmJih4Kz00LHk+Pj49NCksISgzJnkpJiYoeCs9Mix5Pj4+PTIpLCEoMSZ5KSYmeCsrLHh9LHcucHJv''@;'; put 'put ''dG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciB5PXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK3l9LHcucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtm''@;'; put 'put ''b3IodmFyIGc9MCx5PTA7eTx0aGlzLmxlbmd0aDt5Kyspe3ZhciB4PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbeV0pO2lmKGcrPXgsMjYhPT14KWJyZWFrfXJldHVybiBnfSx3LnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0''@;'; put 'put ''aCgpLzgpfSx3LnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oZykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy50ZXN0bihnLTEpP3Ro''@;'; put 'put ''aXMubm90bihnKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHcucHJvdG90eXBlLmlu''@;'; put 'put ''ZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgeT0wO3k8Zy5sZW5n''@;'; put 'put ''dGg7eSsrKXRoaXMud29yZHNbeV09dGhpcy53b3Jkc1t5XXxnLndvcmRzW3ldO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihnKX0sdy5wcm90b3R5cGUub3I9ZnVu''@;'; put 'put ''Y3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoZyk6Zy5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihnKTpnLmNsb25lKCku''@;'; put 'put ''aXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oZyl7dmFyIHk7eT10aGlzLmxlbmd0aD5nLmxlbmd0aD9nOnRoaXM7Zm9yKHZhciB4PTA7eDx5Lmxlbmd0aDt4KyspdGhpcy53b3Jkc1t4XT10aGlzLndvcmRzW3hdJmcud29yZHNbeF07cmV0dXJuIHRoaXMubGVuZ3RoPXku''@;'; put 'put ''bGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoZyl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5j''@;'; put 'put ''bG9uZSgpLmlhbmQoZyk6Zy5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChnKTpnLmNsb25lKCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9u''@;'; put 'put ''KGcpe3ZhciB5LHg7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KHk9dGhpcyx4PWcpOih5PWcseD10aGlzKTtmb3IodmFyIEM9MDtDPHgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXkud29yZHNbQ11eeC53b3Jkc1tDXTtpZih0aGlzIT09eSlmb3IoO0M8eS5sZW5ndGg7QysrKXRoaXMud29yZHNb''@;'; put 'put ''Q109eS53b3Jkc1tDXTtyZXR1cm4gdGhpcy5sZW5ndGg9eS5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKGcpe3JldHVybiBwKCEodGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihnKX0sdy5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGcp''@;'; put 'put ''e3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihnKTpnLmNsb25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGcpOmcuY2xvbmUoKS5pdXhv''@;'; put 'put ''cih0aGlzKX0sdy5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PTB8TWF0aC5jZWlsKGcvMjYpLHg9ZyUyNjt0aGlzLl9leHBhbmQoeSkseD4wJiZ5LS07Zm9yKHZhciBDPTA7Qzx5O0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYz''@;'; put 'put ''Jn50aGlzLndvcmRzW0NdO3JldHVybiB4PjAmJih0aGlzLndvcmRzW0NdPX50aGlzLndvcmRzW0NdJjY3MTA4ODYzPj4yNi14KSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihnKX0sdy5wcm90b3R5cGUuc2V0bj1m''@;'; put 'put ''dW5jdGlvbihnLHkpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeD1nLzI2fDAsQz1nJTI2O3JldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdPXk/dGhpcy53b3Jkc1t4XXwxPDxDOnRoaXMud29yZHNbeF0mfigxPDxDKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90''@;'; put 'put ''eXBlLmlhZGQ9ZnVuY3Rpb24oZyl7dmFyIHkseCxDO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHk9dGhpcy5pc3ViKGcpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9''@;'; put 'put ''PWcubmVnYXRpdmUpcmV0dXJuIGcubmVnYXRpdmU9MCx5PXRoaXMuaXN1YihnKSxnLm5lZ2F0aXZlPTEseS5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oeD10aGlzLEM9Zyk6KHg9ZyxDPXRoaXMpO2Zvcih2YXIgVD0wLEg9MDtIPEMubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hd''@;'; put 'put ''PTY3MTA4ODYzJih5PSgwfHgud29yZHNbSF0pKygwfEMud29yZHNbSF0pK1QpLFQ9eT4+PjI2O2Zvcig7MCE9PVQmJkg8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKHk9KDB8eC53b3Jkc1tIXSkrVCksVD15Pj4+MjY7aWYodGhpcy5sZW5ndGg9eC5sZW5ndGgsMCE9PVQp''@;'; put 'put ''dGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09VCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoeCE9PXRoaXMpZm9yKDtIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXgud29yZHNbSF07cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnKXt2YXIgeTtyZXR1cm4gMCE9PWcubmVn''@;'; put 'put ''YXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhnLm5lZ2F0aXZlPTAseT10aGlzLnN1YihnKSxnLm5lZ2F0aXZlXj0xLHkpOjA9PT1nLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLHk9Zy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLHkpOnRoaXMubGVuZ3Ro''@;'; put 'put ''PmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKGcpOmcuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcpe2lmKDAhPT1nLm5lZ2F0aXZlKXtnLm5lZ2F0aXZlPTA7dmFyIHk9dGhpcy5pYWRkKGcpO3JldHVybiBnLm5lZ2F0aXZlPTEseS5fbm9ybVNpZ24o''@;'; put 'put ''KX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgQyxULHg9dGhpcy5jbXAoZyk7aWYoMD09PXgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMu''@;'; put 'put ''d29yZHNbMF09MCx0aGlzO3g+MD8oQz10aGlzLFQ9Zyk6KEM9ZyxUPXRoaXMpO2Zvcih2YXIgSD0wLGo9MDtqPFQubGVuZ3RoO2orKylIPSh5PSgwfEMud29yZHNbal0pLSgwfFQud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJnk7Zm9yKDswIT09SCYmajxDLmxlbmd0''@;'; put 'put ''aDtqKyspSD0oeT0oMHxDLndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZ5O2lmKDA9PT1IJiZqPEMubGVuZ3RoJiZDIT09dGhpcylmb3IoO2o8Qy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09Qy53b3Jkc1tqXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhp''@;'; put 'put ''cy5sZW5ndGgsaiksQyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihnKX07dmFyIFc9ZnVuY3Rpb24oZyx5LHgpe3ZhciBFLG0sQSxDPWcud29yZHMsVD15LndvcmRzLEg9''@;'; put 'put ''eC53b3JkcyxqPTAsYWU9MHxDWzBdLG5lPTgxOTEmYWUsc2U9YWU+Pj4xMyxDZT0wfENbMV0sVWU9ODE5MSZDZSxKZT1DZT4+PjEzLGl0PTB8Q1syXSx4ZT04MTkxJml0LHllPWl0Pj4+MTMsS2U9MHxDWzNdLGplPTgxOTEmS2Usa2U9S2U+Pj4xMyxIZT0wfENbNF0sTGU9ODE5MSZIZSxSZT1I''@;'; put 'put ''ZT4+PjEzLFZlPTB8Q1s1XSxBZT04MTkxJlZlLERlPVZlPj4+MTMsX3Q9MHxDWzZdLHJ0PTgxOTEmX3QsUWU9X3Q+Pj4xMyxzbj0wfENbN10sdnQ9ODE5MSZzbixTdD1zbj4+PjEzLGVuPTB8Q1s4XSx1dD04MTkxJmVuLFhlPWVuPj4+MTMsdHQ9MHxDWzldLEllPTgxOTEmdHQsYXQ9dHQ+Pj4x''@;'; put 'put ''Myx1bj0wfFRbMF0sSXQ9ODE5MSZ1bixSdD11bj4+PjEzLHJpPTB8VFsxXSxhbj04MTkxJnJpLGxuPXJpPj4+MTMsbmk9MHxUWzJdLGhuPTgxOTEmbmksaHQ9bmk+Pj4xMyxScj0wfFRbM10sQnQ9ODE5MSZScixBdD1Scj4+PjEzLEZuPTB8VFs0XSxzdD04MTkxJkZuLFp0PUZuPj4+MTMsUXI9''@;'; put 'put ''MHxUWzVdLFllPTgxOTEmUXIsVHQ9UXI+Pj4xMyxycj0wfFRbNl0sZnQ9ODE5MSZycixNdD1ycj4+PjEzLFpuPTB8VFs3XSxubj04MTkxJlpuLFd0PVpuPj4+MTMsZGk9MHxUWzhdLGRuPTgxOTEmZGksbW49ZGk+Pj4xMyxwaT0wfFRbOV0sZm49ODE5MSZwaSx0bj1waT4+PjEzO3gubmVnYXRp''@;'; put 'put ''dmU9Zy5uZWdhdGl2ZV55Lm5lZ2F0aXZlLHgubGVuZ3RoPTE5O3ZhciBjYT0oaisoRT1NYXRoLmltdWwobmUsSXQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKG5lLFJ0KSkrTWF0aC5pbXVsKHNlLEl0KXwwKSk8PDEzKXwwO2o9KChBPU1hdGguaW11bChzZSxSdCkpKyhtPj4+MTMpfDAp''@;'; put 'put ''KyhjYT4+PjI2KXwwLGNhJj02NzEwODg2MyxFPU1hdGguaW11bChVZSxJdCksbT0obT1NYXRoLmltdWwoVWUsUnQpKStNYXRoLmltdWwoSmUsSXQpfDAsQT1NYXRoLmltdWwoSmUsUnQpO3ZhciBfaT0oaisoRT1FK01hdGguaW11bChuZSxhbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKG5lLGxuKXwwKStNYXRoLmltdWwoc2UsYW4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsbG4pfDApKyhtPj4+MTMpfDApKyhfaT4+PjI2KXwwLF9pJj02NzEwODg2MyxFPU1hdGguaW11bCh4ZSxJdCksbT0obT1NYXRoLmltdWwoeGUsUnQpKStNYXRoLmltdWwoeWUsSXQp''@;'; put 'put ''fDAsQT1NYXRoLmltdWwoeWUsUnQpLEU9RStNYXRoLmltdWwoVWUsYW4pfDAsbT0obT1tK01hdGguaW11bChVZSxsbil8MCkrTWF0aC5pbXVsKEplLGFuKXwwLEE9QStNYXRoLmltdWwoSmUsbG4pfDA7dmFyIHZyPShqKyhFPUUrTWF0aC5pbXVsKG5lLGhuKXwwKXwwKSsoKDgxOTEmKG09KG09''@;'; put 'put ''bStNYXRoLmltdWwobmUsaHQpfDApK01hdGguaW11bChzZSxobil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxodCl8MCkrKG0+Pj4xMyl8MCkrKHZyPj4+MjYpfDAsdnImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGplLEl0KSxtPShtPU1hdGguaW11bChqZSxSdCkpK01hdGguaW11''@;'; put 'put ''bChrZSxJdCl8MCxBPU1hdGguaW11bChrZSxSdCksRT1FK01hdGguaW11bCh4ZSxhbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGxuKXwwKStNYXRoLmltdWwoeWUsYW4pfDAsQT1BK01hdGguaW11bCh5ZSxsbil8MCxFPUUrTWF0aC5pbXVsKFVlLGhuKXwwLG09KG09bStNYXRoLmltdWwoVWUs''@;'; put 'put ''aHQpfDApK01hdGguaW11bChKZSxobil8MCxBPUErTWF0aC5pbXVsKEplLGh0KXwwO3ZhciBYaT0oaisoRT1FK01hdGguaW11bChuZSxCdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLEF0KXwwKStNYXRoLmltdWwoc2UsQnQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmlt''@;'; put 'put ''dWwoc2UsQXQpfDApKyhtPj4+MTMpfDApKyhYaT4+PjI2KXwwLFhpJj02NzEwODg2MyxFPU1hdGguaW11bChMZSxJdCksbT0obT1NYXRoLmltdWwoTGUsUnQpKStNYXRoLmltdWwoUmUsSXQpfDAsQT1NYXRoLmltdWwoUmUsUnQpLEU9RStNYXRoLmltdWwoamUsYW4pfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bChqZSxsbil8MCkrTWF0aC5pbXVsKGtlLGFuKXwwLEE9QStNYXRoLmltdWwoa2UsbG4pfDAsRT1FK01hdGguaW11bCh4ZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGh0KXwwKStNYXRoLmltdWwoeWUsaG4pfDAsQT1BK01hdGguaW11bCh5ZSxodCl8MCxFPUUrTWF0aC5pbXVsKFVl''@;'; put 'put ''LEJ0KXwwLG09KG09bStNYXRoLmltdWwoVWUsQXQpfDApK01hdGguaW11bChKZSxCdCl8MCxBPUErTWF0aC5pbXVsKEplLEF0KXwwO3ZhciBRaT0oaisoRT1FK01hdGguaW11bChuZSxzdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLFp0KXwwKStNYXRoLmltdWwoc2Usc3Qp''@;'; put 'put ''fDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsWnQpfDApKyhtPj4+MTMpfDApKyhRaT4+PjI2KXwwLFFpJj02NzEwODg2MyxFPU1hdGguaW11bChBZSxJdCksbT0obT1NYXRoLmltdWwoQWUsUnQpKStNYXRoLmltdWwoRGUsSXQpfDAsQT1NYXRoLmltdWwoRGUsUnQpLEU9RStNYXRo''@;'; put 'put ''LmltdWwoTGUsYW4pfDAsbT0obT1tK01hdGguaW11bChMZSxsbil8MCkrTWF0aC5pbXVsKFJlLGFuKXwwLEE9QStNYXRoLmltdWwoUmUsbG4pfDAsRT1FK01hdGguaW11bChqZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKGplLGh0KXwwKStNYXRoLmltdWwoa2UsaG4pfDAsQT1BK01hdGguaW11''@;'; put 'put ''bChrZSxodCl8MCxFPUUrTWF0aC5pbXVsKHhlLEJ0KXwwLG09KG09bStNYXRoLmltdWwoeGUsQXQpfDApK01hdGguaW11bCh5ZSxCdCl8MCxBPUErTWF0aC5pbXVsKHllLEF0KXwwLEU9RStNYXRoLmltdWwoVWUsc3QpfDAsbT0obT1tK01hdGguaW11bChVZSxadCl8MCkrTWF0aC5pbXVsKEpl''@;'; put 'put ''LHN0KXwwLEE9QStNYXRoLmltdWwoSmUsWnQpfDA7dmFyIFZpPShqKyhFPUUrTWF0aC5pbXVsKG5lLFllKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsVHQpfDApK01hdGguaW11bChzZSxZZSl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxUdCl8MCkrKG0+Pj4x''@;'; put 'put ''Myl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHJ0LEl0KSxtPShtPU1hdGguaW11bChydCxSdCkpK01hdGguaW11bChRZSxJdCl8MCxBPU1hdGguaW11bChRZSxSdCksRT1FK01hdGguaW11bChBZSxhbil8MCxtPShtPW0rTWF0aC5pbXVsKEFlLGxuKXwwKStNYXRo''@;'; put 'put ''LmltdWwoRGUsYW4pfDAsQT1BK01hdGguaW11bChEZSxsbil8MCxFPUUrTWF0aC5pbXVsKExlLGhuKXwwLG09KG09bStNYXRoLmltdWwoTGUsaHQpfDApK01hdGguaW11bChSZSxobil8MCxBPUErTWF0aC5pbXVsKFJlLGh0KXwwLEU9RStNYXRoLmltdWwoamUsQnQpfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bChqZSxBdCl8MCkrTWF0aC5pbXVsKGtlLEJ0KXwwLEE9QStNYXRoLmltdWwoa2UsQXQpfDAsRT1FK01hdGguaW11bCh4ZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFp0KXwwKStNYXRoLmltdWwoeWUsc3QpfDAsQT1BK01hdGguaW11bCh5ZSxadCl8MCxFPUUrTWF0aC5pbXVsKFVl''@;'; put 'put ''LFllKXwwLG09KG09bStNYXRoLmltdWwoVWUsVHQpfDApK01hdGguaW11bChKZSxZZSl8MCxBPUErTWF0aC5pbXVsKEplLFR0KXwwO3ZhciBlaT0oaisoRT1FK01hdGguaW11bChuZSxmdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLE10KXwwKStNYXRoLmltdWwoc2UsZnQp''@;'; put 'put ''fDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsTXQpfDApKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxFPU1hdGguaW11bCh2dCxJdCksbT0obT1NYXRoLmltdWwodnQsUnQpKStNYXRoLmltdWwoU3QsSXQpfDAsQT1NYXRoLmltdWwoU3QsUnQpLEU9RStNYXRo''@;'; put 'put ''LmltdWwocnQsYW4pfDAsbT0obT1tK01hdGguaW11bChydCxsbil8MCkrTWF0aC5pbXVsKFFlLGFuKXwwLEE9QStNYXRoLmltdWwoUWUsbG4pfDAsRT1FK01hdGguaW11bChBZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKEFlLGh0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsQT1BK01hdGguaW11''@;'; put 'put ''bChEZSxodCl8MCxFPUUrTWF0aC5pbXVsKExlLEJ0KXwwLG09KG09bStNYXRoLmltdWwoTGUsQXQpfDApK01hdGguaW11bChSZSxCdCl8MCxBPUErTWF0aC5pbXVsKFJlLEF0KXwwLEU9RStNYXRoLmltdWwoamUsc3QpfDAsbT0obT1tK01hdGguaW11bChqZSxadCl8MCkrTWF0aC5pbXVsKGtl''@;'; put 'put ''LHN0KXwwLEE9QStNYXRoLmltdWwoa2UsWnQpfDAsRT1FK01hdGguaW11bCh4ZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFR0KXwwKStNYXRoLmltdWwoeWUsWWUpfDAsQT1BK01hdGguaW11bCh5ZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFVlLGZ0KXwwLG09KG09bStNYXRoLmltdWwoVWUs''@;'; put 'put ''TXQpfDApK01hdGguaW11bChKZSxmdCl8MCxBPUErTWF0aC5pbXVsKEplLE10KXwwO3ZhciB1YT0oaisoRT1FK01hdGguaW11bChuZSxubil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLFd0KXwwKStNYXRoLmltdWwoc2Usbm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmlt''@;'; put 'put ''dWwoc2UsV3QpfDApKyhtPj4+MTMpfDApKyh1YT4+PjI2KXwwLHVhJj02NzEwODg2MyxFPU1hdGguaW11bCh1dCxJdCksbT0obT1NYXRoLmltdWwodXQsUnQpKStNYXRoLmltdWwoWGUsSXQpfDAsQT1NYXRoLmltdWwoWGUsUnQpLEU9RStNYXRoLmltdWwodnQsYW4pfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bCh2dCxsbil8MCkrTWF0aC5pbXVsKFN0LGFuKXwwLEE9QStNYXRoLmltdWwoU3QsbG4pfDAsRT1FK01hdGguaW11bChydCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LGh0KXwwKStNYXRoLmltdWwoUWUsaG4pfDAsQT1BK01hdGguaW11bChRZSxodCl8MCxFPUUrTWF0aC5pbXVsKEFl''@;'; put 'put ''LEJ0KXwwLG09KG09bStNYXRoLmltdWwoQWUsQXQpfDApK01hdGguaW11bChEZSxCdCl8MCxBPUErTWF0aC5pbXVsKERlLEF0KXwwLEU9RStNYXRoLmltdWwoTGUsc3QpfDAsbT0obT1tK01hdGguaW11bChMZSxadCl8MCkrTWF0aC5pbXVsKFJlLHN0KXwwLEE9QStNYXRoLmltdWwoUmUsWnQp''@;'; put 'put ''fDAsRT1FK01hdGguaW11bChqZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKGplLFR0KXwwKStNYXRoLmltdWwoa2UsWWUpfDAsQT1BK01hdGguaW11bChrZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHhlLGZ0KXwwLG09KG09bStNYXRoLmltdWwoeGUsTXQpfDApK01hdGguaW11bCh5ZSxmdCl8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKHllLE10KXwwLEU9RStNYXRoLmltdWwoVWUsbm4pfDAsbT0obT1tK01hdGguaW11bChVZSxXdCl8MCkrTWF0aC5pbXVsKEplLG5uKXwwLEE9QStNYXRoLmltdWwoSmUsV3QpfDA7dmFyIFJpPShqKyhFPUUrTWF0aC5pbXVsKG5lLGRuKXwwKXwwKSsoKDgxOTEmKG09KG09''@;'; put 'put ''bStNYXRoLmltdWwobmUsbW4pfDApK01hdGguaW11bChzZSxkbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxtbil8MCkrKG0+Pj4xMyl8MCkrKFJpPj4+MjYpfDAsUmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLEl0KSxtPShtPU1hdGguaW11bChJZSxSdCkpK01hdGguaW11''@;'; put 'put ''bChhdCxJdCl8MCxBPU1hdGguaW11bChhdCxSdCksRT1FK01hdGguaW11bCh1dCxhbil8MCxtPShtPW0rTWF0aC5pbXVsKHV0LGxuKXwwKStNYXRoLmltdWwoWGUsYW4pfDAsQT1BK01hdGguaW11bChYZSxsbil8MCxFPUUrTWF0aC5pbXVsKHZ0LGhuKXwwLG09KG09bStNYXRoLmltdWwodnQs''@;'; put 'put ''aHQpfDApK01hdGguaW11bChTdCxobil8MCxBPUErTWF0aC5pbXVsKFN0LGh0KXwwLEU9RStNYXRoLmltdWwocnQsQnQpfDAsbT0obT1tK01hdGguaW11bChydCxBdCl8MCkrTWF0aC5pbXVsKFFlLEJ0KXwwLEE9QStNYXRoLmltdWwoUWUsQXQpfDAsRT1FK01hdGguaW11bChBZSxzdCl8MCxt''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKEFlLFp0KXwwKStNYXRoLmltdWwoRGUsc3QpfDAsQT1BK01hdGguaW11bChEZSxadCl8MCxFPUUrTWF0aC5pbXVsKExlLFllKXwwLG09KG09bStNYXRoLmltdWwoTGUsVHQpfDApK01hdGguaW11bChSZSxZZSl8MCxBPUErTWF0aC5pbXVsKFJlLFR0KXwwLEU9RStN''@;'; put 'put ''YXRoLmltdWwoamUsZnQpfDAsbT0obT1tK01hdGguaW11bChqZSxNdCl8MCkrTWF0aC5pbXVsKGtlLGZ0KXwwLEE9QStNYXRoLmltdWwoa2UsTXQpfDAsRT1FK01hdGguaW11bCh4ZSxubil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFd0KXwwKStNYXRoLmltdWwoeWUsbm4pfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bCh5ZSxXdCl8MCxFPUUrTWF0aC5pbXVsKFVlLGRuKXwwLG09KG09bStNYXRoLmltdWwoVWUsbW4pfDApK01hdGguaW11bChKZSxkbil8MCxBPUErTWF0aC5pbXVsKEplLG1uKXwwO3ZhciBEYT0oaisoRT1FK01hdGguaW11bChuZSxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKG5lLHRuKXwwKStNYXRoLmltdWwoc2UsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsdG4pfDApKyhtPj4+MTMpfDApKyhEYT4+PjI2KXwwLERhJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxhbiksbT0obT1NYXRoLmltdWwoSWUsbG4pKStNYXRoLmltdWwoYXQsYW4p''@;'; put 'put ''fDAsQT1NYXRoLmltdWwoYXQsbG4pLEU9RStNYXRoLmltdWwodXQsaG4pfDAsbT0obT1tK01hdGguaW11bCh1dCxodCl8MCkrTWF0aC5pbXVsKFhlLGhuKXwwLEE9QStNYXRoLmltdWwoWGUsaHQpfDAsRT1FK01hdGguaW11bCh2dCxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LEF0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoU3QsQnQpfDAsQT1BK01hdGguaW11bChTdCxBdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LHN0KXwwLG09KG09bStNYXRoLmltdWwocnQsWnQpfDApK01hdGguaW11bChRZSxzdCl8MCxBPUErTWF0aC5pbXVsKFFlLFp0KXwwLEU9RStNYXRoLmltdWwoQWUsWWUpfDAsbT0obT1tK01h''@;'; put 'put ''dGguaW11bChBZSxUdCl8MCkrTWF0aC5pbXVsKERlLFllKXwwLEE9QStNYXRoLmltdWwoRGUsVHQpfDAsRT1FK01hdGguaW11bChMZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKExlLE10KXwwKStNYXRoLmltdWwoUmUsZnQpfDAsQT1BK01hdGguaW11bChSZSxNdCl8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KGplLG5uKXwwLG09KG09bStNYXRoLmltdWwoamUsV3QpfDApK01hdGguaW11bChrZSxubil8MCxBPUErTWF0aC5pbXVsKGtlLFd0KXwwLEU9RStNYXRoLmltdWwoeGUsZG4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxtbil8MCkrTWF0aC5pbXVsKHllLGRuKXwwLEE9QStNYXRoLmltdWwoeWUs''@;'; put 'put ''bW4pfDA7dmFyIGhpPShqKyhFPUUrTWF0aC5pbXVsKFVlLGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoVWUsdG4pfDApK01hdGguaW11bChKZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChKZSx0bil8MCkrKG0+Pj4xMyl8MCkrKGhpPj4+MjYpfDAsaGkmPTY3''@;'; put 'put ''MTA4ODYzLEU9TWF0aC5pbXVsKEllLGhuKSxtPShtPU1hdGguaW11bChJZSxodCkpK01hdGguaW11bChhdCxobil8MCxBPU1hdGguaW11bChhdCxodCksRT1FK01hdGguaW11bCh1dCxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKHV0LEF0KXwwKStNYXRoLmltdWwoWGUsQnQpfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bChYZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHZ0LHN0KXwwLG09KG09bStNYXRoLmltdWwodnQsWnQpfDApK01hdGguaW11bChTdCxzdCl8MCxBPUErTWF0aC5pbXVsKFN0LFp0KXwwLEU9RStNYXRoLmltdWwocnQsWWUpfDAsbT0obT1tK01hdGguaW11bChydCxUdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KFFlLFllKXwwLEE9QStNYXRoLmltdWwoUWUsVHQpfDAsRT1FK01hdGguaW11bChBZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKEFlLE10KXwwKStNYXRoLmltdWwoRGUsZnQpfDAsQT1BK01hdGguaW11bChEZSxNdCl8MCxFPUUrTWF0aC5pbXVsKExlLG5uKXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''TGUsV3QpfDApK01hdGguaW11bChSZSxubil8MCxBPUErTWF0aC5pbXVsKFJlLFd0KXwwLEU9RStNYXRoLmltdWwoamUsZG4pfDAsbT0obT1tK01hdGguaW11bChqZSxtbil8MCkrTWF0aC5pbXVsKGtlLGRuKXwwLEE9QStNYXRoLmltdWwoa2UsbW4pfDA7dmFyIHFpPShqKyhFPUUrTWF0aC5p''@;'; put 'put ''bXVsKHhlLGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoeGUsdG4pfDApK01hdGguaW11bCh5ZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCh5ZSx0bil8MCkrKG0+Pj4xMyl8MCkrKHFpPj4+MjYpfDAscWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLEJ0KSxt''@;'; put 'put ''PShtPU1hdGguaW11bChJZSxBdCkpK01hdGguaW11bChhdCxCdCl8MCxBPU1hdGguaW11bChhdCxBdCksRT1FK01hdGguaW11bCh1dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHV0LFp0KXwwKStNYXRoLmltdWwoWGUsc3QpfDAsQT1BK01hdGguaW11bChYZSxadCl8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KHZ0LFllKXwwLG09KG09bStNYXRoLmltdWwodnQsVHQpfDApK01hdGguaW11bChTdCxZZSl8MCxBPUErTWF0aC5pbXVsKFN0LFR0KXwwLEU9RStNYXRoLmltdWwocnQsZnQpfDAsbT0obT1tK01hdGguaW11bChydCxNdCl8MCkrTWF0aC5pbXVsKFFlLGZ0KXwwLEE9QStNYXRoLmltdWwoUWUs''@;'; put 'put ''TXQpfDAsRT1FK01hdGguaW11bChBZSxubil8MCxtPShtPW0rTWF0aC5pbXVsKEFlLFd0KXwwKStNYXRoLmltdWwoRGUsbm4pfDAsQT1BK01hdGguaW11bChEZSxXdCl8MCxFPUUrTWF0aC5pbXVsKExlLGRuKXwwLG09KG09bStNYXRoLmltdWwoTGUsbW4pfDApK01hdGguaW11bChSZSxkbil8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKFJlLG1uKXwwO3ZhciBQYT0oaisoRT1FK01hdGguaW11bChqZSxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGplLHRuKXwwKStNYXRoLmltdWwoa2UsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoa2UsdG4pfDApKyhtPj4+MTMpfDAp''@;'; put 'put ''KyhQYT4+PjI2KXwwLFBhJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxzdCksbT0obT1NYXRoLmltdWwoSWUsWnQpKStNYXRoLmltdWwoYXQsc3QpfDAsQT1NYXRoLmltdWwoYXQsWnQpLEU9RStNYXRoLmltdWwodXQsWWUpfDAsbT0obT1tK01hdGguaW11bCh1dCxUdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KFhlLFllKXwwLEE9QStNYXRoLmltdWwoWGUsVHQpfDAsRT1FK01hdGguaW11bCh2dCxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LE10KXwwKStNYXRoLmltdWwoU3QsZnQpfDAsQT1BK01hdGguaW11bChTdCxNdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LG5uKXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''cnQsV3QpfDApK01hdGguaW11bChRZSxubil8MCxBPUErTWF0aC5pbXVsKFFlLFd0KXwwLEU9RStNYXRoLmltdWwoQWUsZG4pfDAsbT0obT1tK01hdGguaW11bChBZSxtbil8MCkrTWF0aC5pbXVsKERlLGRuKXwwLEE9QStNYXRoLmltdWwoRGUsbW4pfDA7dmFyIHVyPShqKyhFPUUrTWF0aC5p''@;'; put 'put ''bXVsKExlLGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoTGUsdG4pfDApK01hdGguaW11bChSZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChSZSx0bil8MCkrKG0+Pj4xMyl8MCkrKHVyPj4+MjYpfDAsdXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLFllKSxt''@;'; put 'put ''PShtPU1hdGguaW11bChJZSxUdCkpK01hdGguaW11bChhdCxZZSl8MCxBPU1hdGguaW11bChhdCxUdCksRT1FK01hdGguaW11bCh1dCxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKHV0LE10KXwwKStNYXRoLmltdWwoWGUsZnQpfDAsQT1BK01hdGguaW11bChYZSxNdCl8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KHZ0LG5uKXwwLG09KG09bStNYXRoLmltdWwodnQsV3QpfDApK01hdGguaW11bChTdCxubil8MCxBPUErTWF0aC5pbXVsKFN0LFd0KXwwLEU9RStNYXRoLmltdWwocnQsZG4pfDAsbT0obT1tK01hdGguaW11bChydCxtbil8MCkrTWF0aC5pbXVsKFFlLGRuKXwwLEE9QStNYXRoLmltdWwoUWUs''@;'; put 'put ''bW4pfDA7dmFyIGJhPShqKyhFPUUrTWF0aC5pbXVsKEFlLGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoQWUsdG4pfDApK01hdGguaW11bChEZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChEZSx0bil8MCkrKG0+Pj4xMyl8MCkrKGJhPj4+MjYpfDAsYmEmPTY3''@;'; put 'put ''MTA4ODYzLEU9TWF0aC5pbXVsKEllLGZ0KSxtPShtPU1hdGguaW11bChJZSxNdCkpK01hdGguaW11bChhdCxmdCl8MCxBPU1hdGguaW11bChhdCxNdCksRT1FK01hdGguaW11bCh1dCxubil8MCxtPShtPW0rTWF0aC5pbXVsKHV0LFd0KXwwKStNYXRoLmltdWwoWGUsbm4pfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bChYZSxXdCl8MCxFPUUrTWF0aC5pbXVsKHZ0LGRuKXwwLG09KG09bStNYXRoLmltdWwodnQsbW4pfDApK01hdGguaW11bChTdCxkbil8MCxBPUErTWF0aC5pbXVsKFN0LG1uKXwwO3ZhciBNaT0oaisoRT1FK01hdGguaW11bChydCxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKHJ0LHRuKXwwKStNYXRoLmltdWwoUWUsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoUWUsdG4pfDApKyhtPj4+MTMpfDApKyhNaT4+PjI2KXwwLE1pJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxubiksbT0obT1NYXRoLmltdWwoSWUsV3QpKStNYXRoLmltdWwoYXQsbm4p''@;'; put 'put ''fDAsQT1NYXRoLmltdWwoYXQsV3QpLEU9RStNYXRoLmltdWwodXQsZG4pfDAsbT0obT1tK01hdGguaW11bCh1dCxtbil8MCkrTWF0aC5pbXVsKFhlLGRuKXwwLEE9QStNYXRoLmltdWwoWGUsbW4pfDA7dmFyIHdhPShqKyhFPUUrTWF0aC5pbXVsKHZ0LGZuKXwwKXwwKSsoKDgxOTEmKG09KG09''@;'; put 'put ''bStNYXRoLmltdWwodnQsdG4pfDApK01hdGguaW11bChTdCxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChTdCx0bil8MCkrKG0+Pj4xMyl8MCkrKHdhPj4+MjYpfDAsd2EmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLGRuKSxtPShtPU1hdGguaW11bChJZSxtbikpK01hdGguaW11''@;'; put 'put ''bChhdCxkbil8MCxBPU1hdGguaW11bChhdCxtbik7dmFyIGVhPShqKyhFPUUrTWF0aC5pbXVsKHV0LGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodXQsdG4pfDApK01hdGguaW11bChYZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChYZSx0bil8MCkrKG0+Pj4x''@;'; put 'put ''Myl8MCkrKGVhPj4+MjYpfDAsZWEmPTY3MTA4ODYzO3ZhciBGcj0oaisoRT1NYXRoLmltdWwoSWUsZm4pKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKEllLHRuKSkrTWF0aC5pbXVsKGF0LGZuKXwwKSk8PDEzKXwwO3JldHVybiBqPSgoQT1NYXRoLmltdWwoYXQsdG4pKSsobT4+PjEzKXww''@;'; put 'put ''KSsoRnI+Pj4yNil8MCxGciY9NjcxMDg4NjMsSFswXT1jYSxIWzFdPV9pLEhbMl09dnIsSFszXT1YaSxIWzRdPVFpLEhbNV09VmksSFs2XT1laSxIWzddPXVhLEhbOF09UmksSFs5XT1EYSxIWzEwXT1oaSxIWzExXT1xaSxIWzEyXT1QYSxIWzEzXT11cixIWzE0XT1iYSxIWzE1XT1NaSxIWzE2''@;'; put 'put ''XT13YSxIWzE3XT1lYSxIWzE4XT1GciwwIT09aiYmKEhbMTldPWoseC5sZW5ndGgrKykseH07ZnVuY3Rpb24gZWUoQixnLHkpe3JldHVybihuZXcgSikubXVscChCLGcseSl9ZnVuY3Rpb24gSihCLGcpe3RoaXMueD1CLHRoaXMueT1nfU1hdGguaW11bHx8KFc9WSksdy5wcm90b3R5cGUubXVs''@;'; put 'put ''VG89ZnVuY3Rpb24oZyx5KXt2YXIgeCxDPXRoaXMubGVuZ3RoK2cubGVuZ3RoO3JldHVybiB4PTEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/Vyh0aGlzLGcseSk6Qzw2Mz9ZKHRoaXMsZyx5KTpDPDEwMjQ/ZnVuY3Rpb24gcShCLGcseSl7eS5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkIu''@;'; put 'put ''bmVnYXRpdmUseS5sZW5ndGg9Qi5sZW5ndGgrZy5sZW5ndGg7Zm9yKHZhciB4PTAsQz0wLFQ9MDtUPHkubGVuZ3RoLTE7VCsrKXt2YXIgSD1DO0M9MDtmb3IodmFyIGo9NjcxMDg4NjMmeCxFPU1hdGgubWluKFQsZy5sZW5ndGgtMSksbT1NYXRoLm1heCgwLFQtQi5sZW5ndGgrMSk7bTw9RTtt''@;'; put 'put ''Kyspe3ZhciBzZT0oMHxCLndvcmRzW1QtbV0pKigwfGcud29yZHNbbV0pLENlPTY3MTA4ODYzJnNlO2o9NjcxMDg4NjMmKENlPUNlK2p8MCksQys9KEg9KEg9SCsoc2UvNjcxMDg4NjR8MCl8MCkrKENlPj4+MjYpfDApPj4+MjYsSCY9NjcxMDg4NjN9eS53b3Jkc1tUXT1qLHg9SCxIPUN9cmV0''@;'; put 'put ''dXJuIDAhPT14P3kud29yZHNbVF09eDp5Lmxlbmd0aC0tLHkuc3RyaXAoKX0odGhpcyxnLHkpOmVlKHRoaXMsZyx5KSx4fSxKLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT1uZXcgQXJyYXkoZykseD13LnByb3RvdHlwZS5fY291bnRCaXRzKGcpLTEsQz0wO0M8ZztD''@;'; put 'put ''KyspeVtDXT10aGlzLnJldkJpbihDLHgsZyk7cmV0dXJuIHl9LEoucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihnLHkseCl7aWYoMD09PWd8fGc9PT14LTEpcmV0dXJuIGc7Zm9yKHZhciBDPTAsVD0wO1Q8eTtUKyspQ3w9KDEmZyk8PHktVC0xLGc+Pj0xO3JldHVybiBDfSxKLnByb3RvdHlw''@;'; put 'put ''ZS5wZXJtdXRlPWZ1bmN0aW9uKGcseSx4LEMsVCxIKXtmb3IodmFyIGo9MDtqPEg7aisrKUNbal09eVtnW2pdXSxUW2pdPXhbZ1tqXV19LEoucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihnLHkseCxDLFQsSCl7dGhpcy5wZXJtdXRlKEgsZyx5LHgsQyxUKTtmb3IodmFyIGo9MTtqPFQ7''@;'; put 'put ''ajw8PTEpZm9yKHZhciBFPWo8PDEsbT1NYXRoLmNvcygyKk1hdGguUEkvRSksQT1NYXRoLnNpbigyKk1hdGguUEkvRSksYWU9MDthZTxUO2FlKz1FKWZvcih2YXIgbmU9bSxzZT1BLENlPTA7Q2U8ajtDZSsrKXt2YXIgVWU9eFthZStDZV0sSmU9Q1thZStDZV0saXQ9eFthZStDZStqXSx4ZT1D''@;'; put 'put ''W2FlK0NlK2pdLHllPW5lKml0LXNlKnhlO3hlPW5lKnhlK3NlKml0LHhbYWUrQ2VdPVVlKyhpdD15ZSksQ1thZStDZV09SmUreGUseFthZStDZStqXT1VZS1pdCxDW2FlK0NlK2pdPUplLXhlLENlIT09RSYmKHllPW0qbmUtQSpzZSxzZT1tKnNlK0EqbmUsbmU9eWUpfX0sSi5wcm90b3R5cGUu''@;'; put 'put ''Z3Vlc3NMZW4xM2I9ZnVuY3Rpb24oZyx5KXt2YXIgeD0xfE1hdGgubWF4KHksZyksQz0xJngsVD0wO2Zvcih4PXgvMnwwO3g7eD4+Pj0xKVQrKztyZXR1cm4gMTw8VCsxK0N9LEoucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihnLHkseCl7aWYoISh4PD0xKSlmb3IodmFyIEM9MDtDPHgv''@;'; put 'put ''MjtDKyspe3ZhciBUPWdbQ107Z1tDXT1nW3gtQy0xXSxnW3gtQy0xXT1ULFQ9eVtDXSx5W0NdPS15W3gtQy0xXSx5W3gtQy0xXT0tVH19LEoucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihnLHkpe2Zvcih2YXIgeD0wLEM9MDtDPHkvMjtDKyspe3ZhciBUPTgxOTIqTWF0aC5yb3Vu''@;'; put 'put ''ZChnWzIqQysxXS95KStNYXRoLnJvdW5kKGdbMipDXS95KSt4O2dbQ109NjcxMDg4NjMmVCx4PVQ8NjcxMDg4NjQ/MDpULzY3MTA4ODY0fDB9cmV0dXJuIGd9LEoucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oZyx5LHgsQyl7Zm9yKHZhciBUPTAsSD0wO0g8eTtIKyspeFsyKkhdPTgx''@;'; put 'put ''OTEmKFQrPTB8Z1tIXSkseFsyKkgrMV09ODE5MSYoVD4+Pj0xMyksVD4+Pj0xMztmb3IoSD0yKnk7SDxDOysrSCl4W0hdPTA7cCgwPT09VCkscCghKC04MTkyJlQpKX0sSi5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihnKXtmb3IodmFyIHk9bmV3IEFycmF5KGcpLHg9MDt4PGc7eCsrKXlbeF09''@;'; put 'put ''MDtyZXR1cm4geX0sSi5wcm90b3R5cGUubXVscD1mdW5jdGlvbihnLHkseCl7dmFyIEM9Mip0aGlzLmd1ZXNzTGVuMTNiKGcubGVuZ3RoLHkubGVuZ3RoKSxUPXRoaXMubWFrZVJCVChDKSxIPXRoaXMuc3R1YihDKSxqPW5ldyBBcnJheShDKSxFPW5ldyBBcnJheShDKSxtPW5ldyBBcnJheShD''@;'; put 'put ''KSxBPW5ldyBBcnJheShDKSxhZT1uZXcgQXJyYXkoQyksbmU9bmV3IEFycmF5KEMpLHNlPXgud29yZHM7c2UubGVuZ3RoPUMsdGhpcy5jb252ZXJ0MTNiKGcud29yZHMsZy5sZW5ndGgsaixDKSx0aGlzLmNvbnZlcnQxM2IoeS53b3Jkcyx5Lmxlbmd0aCxBLEMpLHRoaXMudHJhbnNmb3JtKGos''@;'; put 'put ''SCxFLG0sQyxUKSx0aGlzLnRyYW5zZm9ybShBLEgsYWUsbmUsQyxUKTtmb3IodmFyIENlPTA7Q2U8QztDZSsrKXt2YXIgVWU9RVtDZV0qYWVbQ2VdLW1bQ2VdKm5lW0NlXTttW0NlXT1FW0NlXSpuZVtDZV0rbVtDZV0qYWVbQ2VdLEVbQ2VdPVVlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShFLG0s''@;'; put 'put ''QyksdGhpcy50cmFuc2Zvcm0oRSxtLHNlLEgsQyxUKSx0aGlzLmNvbmp1Z2F0ZShzZSxILEMpLHRoaXMubm9ybWFsaXplMTNiKHNlLEMpLHgubmVnYXRpdmU9Zy5uZWdhdGl2ZV55Lm5lZ2F0aXZlLHgubGVuZ3RoPWcubGVuZ3RoK3kubGVuZ3RoLHguc3RyaXAoKX0sdy5wcm90b3R5cGUubXVs''@;'; put 'put ''PWZ1bmN0aW9uKGcpe3ZhciB5PW5ldyB3KG51bGwpO3JldHVybiB5LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksdGhpcy5tdWxUbyhnLHkpfSx3LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGcpe3ZhciB5PW5ldyB3KG51bGwpO3JldHVybiB5LndvcmRzPW5ldyBBcnJh''@;'; put 'put ''eSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksZWUodGhpcyxnLHkpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oZyx0aGlzKX0sdy5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2''@;'; put 'put ''NCk7Zm9yKHZhciB5PTAseD0wO3g8dGhpcy5sZW5ndGg7eCsrKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSpnLFQ9KDY3MTA4ODYzJkMpKyg2NzEwODg2MyZ5KTt5Pj49MjYseSs9Qy82NzEwODg2NHwwLHkrPVQ+Pj4yNix0aGlzLndvcmRzW3hdPTY3MTA4ODYzJlR9cmV0dXJuIDAhPT15JiYo''@;'; put 'put ''dGhpcy53b3Jkc1t4XT15LHRoaXMubGVuZ3RoKyspLHRoaXMubGVuZ3RoPTA9PT1nPzE6dGhpcy5sZW5ndGgsdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGcpfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnKXt2YXIgeT1mdW5jdGlvbiBaKEIpe2Zvcih2YXIgZz1uZXcgQXJyYXkoQi5iaXRMZW5ndGgoKSkseT0wO3k8Zy5s''@;'; put 'put ''ZW5ndGg7eSsrKXt2YXIgQz15JTI2O2dbeV09KEIud29yZHNbeS8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIGd9KGcpO2lmKDA9PT15Lmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8eS5sZW5ndGgmJjA9PT15W0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzx5Lmxl''@;'; put 'put ''bmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPHkubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PXlbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgVCx5PWclMjYseD0oZy15KS8yNixD''@;'; put 'put ''PTY3MTA4ODYzPj4+MjYteTw8MjYteTtpZigwIT09eSl7dmFyIEg9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgaj10aGlzLndvcmRzW1RdJkM7dGhpcy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1qPDx5fEgsSD1qPj4+MjYteX1IJiYodGhpcy53b3Jkc1tUXT1ILHRoaXMu''@;'; put 'put ''bGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1QrKyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49''@;'; put 'put ''ZnVuY3Rpb24oZyl7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGcpfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZyx5LHgpe3ZhciBDO3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKSxDPXk/KHkteSUyNikvMjY6MDt2YXIgVD1nJTI2LEg9TWF0aC5taW4o''@;'; put 'put ''KGctVCkvMjYsdGhpcy5sZW5ndGgpLGo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1ILEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDttPEg7bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0aD1IfWlmKDAhPT1IKWlmKHRoaXMubGVuZ3RoPkgpZm9y''@;'; put 'put ''KHRoaXMubGVuZ3RoLT1ILG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStIXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIGFlPTB8''@;'; put 'put ''dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8YWU+Pj5ULEE9YWUman1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBl''@;'; put 'put ''LmlzaHJuPWZ1bmN0aW9uKGcseSx4KXtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oZyx5LHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oZyl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGcpe3JldHVy''@;'; put 'put ''biB0aGlzLmNsb25lKCkuaXVzaGxuKGcpfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oZyl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGcpfSx3LnByb3RvdHlwZS50ZXN0bj1m''@;'; put 'put ''dW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHk9ZyUyNix4PShnLXkpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jkc1t4XSYxPDx5KSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49''@;'; put 'put ''MCk7dmFyIHk9ZyUyNix4PShnLXkpLzI2O3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09eSYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAh''@;'; put 'put ''PT15JiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj55PDx5KSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihnKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oZyl7''@;'; put 'put ''cmV0dXJuIHAoIm51bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpLGc8MD90aGlzLmlzdWJuKC1nKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPGc/KHRoaXMud29yZHNbMF09Zy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZl''@;'; put 'put ''PTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihnKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKGcpe3RoaXMud29yZHNbMF0rPWc7Zm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t5''@;'; put 'put ''XT49NjcxMDg4NjQ7eSsrKXRoaXMud29yZHNbeV0tPTY3MTA4ODY0LHk9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbeSsxXT0xOnRoaXMud29yZHNbeSsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCx5KzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1''@;'; put 'put ''bmN0aW9uKGcpe2lmKHAoIm51bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpLGc8MClyZXR1cm4gdGhpcy5pYWRkbigtZyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29y''@;'; put 'put ''ZHNbMF0tPWcsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3ldPDA7eSsrKXRoaXMud29yZHNbeV0rPTY3MTA4ODY0LHRo''@;'; put 'put ''aXMud29yZHNbeSsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oZyl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihnKX0sdy5wcm90b3R5''@;'; put 'put ''cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihnLHkseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKGcu''@;'; put 'put ''bGVuZ3RoK3gpO3ZhciBILGo9MDtmb3IoVD0wO1Q8Zy5sZW5ndGg7VCsrKXtIPSgwfHRoaXMud29yZHNbVCt4XSkrajt2YXIgRT0oMHxnLndvcmRzW1RdKSp5O2o9KChILT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIfWZvcig7VDx0''@;'; put 'put ''aGlzLmxlbmd0aC14O1QrKylqPShIPSgwfHRoaXMud29yZHNbVCt4XSkraik+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIO2lmKDA9PT1qKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKHAoLTE9PT1qKSxqPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKWo9KEg9LSgwfHRoaXMud29yZHNb''@;'; put 'put ''VF0pK2opPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJkg7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKGcseSl7dmFyIHgsQz10aGlzLmNsb25lKCksVD1nLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2''@;'; put 'put ''LXRoaXMuX2NvdW50Qml0cyhIKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksSD0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5sZW5ndGg7aWYoIm1vZCIhPT15KXsobT1uZXcgdyhudWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0''@;'; put 'put ''aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBhZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09YWUubmVnYXRpdmUmJihDPWFlLG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFyIG5lPUUtMTtuZT49MDtuZS0tKXt2YXIgc2U9NjcxMDg4NjQq''@;'; put 'put ''KDB8Qy53b3Jkc1tULmxlbmd0aCtuZV0pKygwfEMud29yZHNbVC5sZW5ndGgrbmUtMV0pO2ZvcihzZT1NYXRoLm1pbihzZS9IfDAsNjcxMDg4NjMpLEMuX2lzaGxuc3VibXVsKFQsc2UsbmUpOzAhPT1DLm5lZ2F0aXZlOylzZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsbmUp''@;'; put 'put ''LEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1tuZV09c2UpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09eSYmMCE9PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihnLHkseCl7''@;'; put 'put ''cmV0dXJuIHAoIWcuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChnLHkpLCJtb2QiIT09eSYmKEM9SC5kaXYubmVnKCkpLCJkaXYiIT09eSYmKFQ9''@;'; put 'put ''SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChnKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlPyhIPXRoaXMuZGl2bW9kKGcubmVnKCkseSksIm1vZCIhPT15JiYoQz1ILmRpdi5uZWcoKSkse2RpdjpDLG1vZDpILm1vZH0pOnRo''@;'; put 'put ''aXMubmVnYXRpdmUmZy5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChnLm5lZygpLHkpLCJkaXYiIT09eSYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaXN1YihnKSkse2RpdjpILmRpdixtb2Q6VH0pOmcubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChnKTww''@;'; put 'put ''P3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1nLmxlbmd0aD8iZGl2Ij09PXk/e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09eT97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kbihnLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0p''@;'; put 'put ''LG1vZDpuZXcgdyh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGcseSk7dmFyIEMsVCxIfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0''@;'; put 'put ''aGlzLmRpdm1vZChnLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oZyl7dmFyIHk9dGhpcy5kaXZtb2QoZyk7aWYoeS5tb2QuaXNaZXJvKCkp''@;'; put 'put ''cmV0dXJuIHkuZGl2O3ZhciB4PTAhPT15LmRpdi5uZWdhdGl2ZT95Lm1vZC5pc3ViKGcpOnkubW9kLEM9Zy51c2hybigxKSxUPWcuYW5kbG4oMSksSD14LmNtcChDKTtyZXR1cm4gSDwwfHwxPT09VCYmMD09PUg/eS5kaXY6MCE9PXkuZGl2Lm5lZ2F0aXZlP3kuZGl2LmlzdWJuKDEpOnkuZGl2''@;'; put 'put ''LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGcpe3AoZzw9NjcxMDg4NjMpO2Zvcih2YXIgeT0oMTw8MjYpJWcseD0wLEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl4PSh5KngrKDB8dGhpcy53b3Jkc1tDXSkpJWc7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0''@;'; put 'put ''aW9uKGcpe3AoZzw9NjcxMDg4NjMpO2Zvcih2YXIgeT0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqeTt0aGlzLndvcmRzW3hdPUMvZ3wwLHk9QyVnfXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rp''@;'; put 'put ''b24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihnKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlKSxwKCFnLmlzWmVybygpKTt2YXIgeT10aGlzLHg9Zy5jbG9uZSgpO3k9MCE9PXkubmVnYXRpdmU/eS51bW9kKGcpOnkuY2xvbmUoKTtmb3IodmFy''@;'; put 'put ''IEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPW5ldyB3KDApLGo9bmV3IHcoMSksRT0wO3kuaXNFdmVuKCkmJnguaXNFdmVuKCk7KXkuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9eS5jbG9uZSgpOyF5LmlzWmVybygpOyl7Zm9yKHZhciBhZT0wLG5lPTE7''@;'; put 'put ''ISh5LndvcmRzWzBdJm5lKSYmYWU8MjY7KythZSxuZTw8PTEpO2lmKGFlPjApZm9yKHkuaXVzaHJuKGFlKTthZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkpJiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBzZT0wLENlPTE7ISh4Lndv''@;'; put 'put ''cmRzWzBdJkNlKSYmc2U8MjY7KytzZSxDZTw8PTEpO2lmKHNlPjApZm9yKHguaXVzaHJuKHNlKTtzZS0tID4wOykoSC5pc09kZCgpfHxqLmlzT2RkKCkpJiYoSC5pYWRkKG0pLGouaXN1YihBKSksSC5pdXNocm4oMSksai5pdXNocm4oMSk7eS5jbXAoeCk+PTA/KHkuaXN1Yih4KSxDLmlzdWIo''@;'; put 'put ''SCksVC5pc3ViKGopKTooeC5pc3ViKHkpLEguaXN1YihDKSxqLmlzdWIoVCkpfXJldHVybnthOkgsYjpqLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlKSxwKCFnLmlzWmVybygpKTt2YXIgYWUseT10aGlzLHg9Zy5jbG9u''@;'; put 'put ''ZSgpO3k9MCE9PXkubmVnYXRpdmU/eS51bW9kKGcpOnkuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPXguY2xvbmUoKTt5LmNtcG4oMSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIGo9MCxFPTE7ISh5LndvcmRzWzBdJkUpJiZqPDI2OysraixFPDw9MSk7aWYoaj4w''@;'; put 'put ''KWZvcih5Lml1c2hybihqKTtqLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKEgpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoSCksVC5pdXNo''@;'; put 'put ''cm4oMSk7eS5jbXAoeCk+PTA/KHkuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoeSksVC5pc3ViKEMpKX1yZXR1cm4oYWU9MD09PXkuY21wbigxKT9DOlQpLmNtcG4oMCk8MCYmYWUuaWFkZChnKSxhZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGcpe2lmKHRoaXMuaXNaZXJvKCkpcmV0''@;'; put 'put ''dXJuIGcuYWJzKCk7aWYoZy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgeT10aGlzLmNsb25lKCkseD1nLmNsb25lKCk7eS5uZWdhdGl2ZT0wLHgubmVnYXRpdmU9MDtmb3IodmFyIEM9MDt5LmlzRXZlbigpJiZ4LmlzRXZlbigpO0MrKyl5Lml1c2hybigxKSx4Lml1c2hybigxKTtm''@;'; put 'put ''b3IoOzspe2Zvcig7eS5pc0V2ZW4oKTspeS5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD15LmNtcCh4KTtpZihUPDApe3ZhciBIPXk7eT14LHg9SH1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBuKDEpKWJyZWFrO3kuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4o''@;'; put 'put ''Qyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZWdjZChnKS5hLnVtb2QoZyl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMu''@;'; put 'put ''d29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZnfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyk7dmFyIHk9ZyUyNix4PShnLXkpLzI2LEM9MTw8eTtpZih0aGlzLmxlbmd0aDw9eCly''@;'; put 'put ''ZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLEg9eDswIT09VCYmSDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPTB8dGhpcy53b3Jkc1tIXTtUPShqKz1UKT4+PjI2LHRoaXMud29yZHNbSF09aiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYo''@;'; put 'put ''dGhpcy53b3Jkc1tIXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGcpe3ZhciB4LHk9ZzwwO2lmKDAhPT10aGlzLm5l''@;'; put 'put ''Z2F0aXZlJiYheSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmeSlyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXt5JiYoZz0tZykscChnPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09''@;'; put 'put ''Zz8wOkM8Zz8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihnKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiAx''@;'; put 'put ''O3ZhciB5PXRoaXMudWNtcChnKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteTp5fSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGcpe2lmKHRoaXMubGVuZ3RoPmcubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGcubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgeT0wLHg9dGhp''@;'; put 'put ''cy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxnLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/eT0tMTpDPlQmJih5PTEpO2JyZWFrfX1yZXR1cm4geX0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXBuKGcpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5ndD1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wKGcpfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk+PTB9LHcucHJvdG90eXBlLmx0bj1m''@;'; put 'put ''dW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcChnKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24o''@;'; put 'put ''Zyl7cmV0dXJuIHRoaXMuY21wKGcpPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXAoZyl9LHcucmVkPWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgTWUoZyl9''@;'; put 'put ''LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBwKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHAoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZy5jb252ZXJ0VG8odGhpcykuX2Zv''@;'; put 'put ''cmNlUmVkKGcpfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVk''@;'; put 'put ''PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnJlZD1nLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBwKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGcpfSx3LnByb3RvdHlwZS5yZWRB''@;'; put 'put ''ZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdp''@;'; put 'put ''dGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJ''@;'; put 'put ''U3ViPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3''@;'; put 'put ''aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQubXVs''@;'; put 'put ''KHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLmltdWwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU3Fy''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVk''@;'; put 'put ''SVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJz''@;'; put 'put ''IiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMu''@;'; put 'put ''cmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9''@;'; put 'put ''ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQmJiFnLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxnKX07dmFyIHJlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24g''@;'; put 'put ''aWUoQixnKXt0aGlzLm5hbWU9Qix0aGlzLnA9bmV3IHcoZywxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHVlKCl7aWUuY2FsbCh0aGlzLCJrMjU2Iiwi''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBnZSgpe2llLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAw''@;'; put 'put ''MDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFRlKCl7aWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZm''@;'; put 'put ''ZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBNZShCKXtpZigic3RyaW5nIj09dHlwZW9mIEIpe3ZhciBnPXcuX3ByaW1lKEIpO3RoaXMubT1nLnAsdGhpcy5wcmltZT1nfWVsc2UgcChCLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhh''@;'; put 'put ''biAxIiksdGhpcy5tPUIsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIFplKEIpe01lLmNhbGwodGhpcyxCKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0''@;'; put 'put ''aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlz''@;'; put 'put ''Lm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IHcobnVsbCk7cmV0dXJuIGcud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxnfSxpZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihnKXt2YXIgeCx5''@;'; put 'put ''PWc7ZG97dGhpcy5zcGxpdCh5LHRoaXMudG1wKSx4PSh5PSh5PXRoaXMuaW11bEsoeSkpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMubik7dmFyIEM9eDx0aGlzLm4/LTE6eS51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1DPyh5LndvcmRzWzBdPTAseS5sZW5ndGg9''@;'; put 'put ''MSk6Qz4wP3kuaXN1Yih0aGlzLnApOnZvaWQgMCE9PXkuc3RyaXA/eS5zdHJpcCgpOnkuX3N0cmlwKCkseX0saWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcseSl7Zy5pdXNocm4odGhpcy5uLDAseSl9LGllLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pbXVsKHRo''@;'; put 'put ''aXMuayl9LFYodWUsaWUpLHVlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLHkpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4oZy5sZW5ndGgsOSksVD0wO1Q8QztUKyspeS53b3Jkc1tUXT1nLndvcmRzW1RdO2lmKHkubGVuZ3RoPUMsZy5sZW5ndGg8PTkpcmV0dXJuIGcud29yZHNb''@;'; put 'put ''MF09MCx2b2lkKGcubGVuZ3RoPTEpO3ZhciBIPWcud29yZHNbOV07Zm9yKHkud29yZHNbeS5sZW5ndGgrK109SCZ4LFQ9MTA7VDxnLmxlbmd0aDtUKyspe3ZhciBqPTB8Zy53b3Jkc1tUXTtnLndvcmRzW1QtMTBdPShqJngpPDw0fEg+Pj4yMixIPWp9Zy53b3Jkc1tULTEwXT1IPj4+PTIyLGcu''@;'; put 'put ''bGVuZ3RoLT0wPT09SCYmZy5sZW5ndGg+MTA/MTA6OX0sdWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2cud29yZHNbZy5sZW5ndGhdPTAsZy53b3Jkc1tnLmxlbmd0aCsxXT0wLGcubGVuZ3RoKz0yO2Zvcih2YXIgeT0wLHg9MDt4PGcubGVuZ3RoO3grKyl7dmFyIEM9MHxnLndvcmRz''@;'; put 'put ''W3hdO2cud29yZHNbeF09NjcxMDg4NjMmKHkrPTk3NypDKSx5PTY0KkMrKHkvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiYoZy5sZW5ndGgtLSwwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmZy5sZW5ndGgtLSksZ30sVihnZSxpZSksVihfZSxpZSksVihUZSxp''@;'; put 'put ''ZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT0wLHg9MDt4PGcubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8Zy53b3Jkc1t4XSkreSxUPTY3MTA4ODYzJkM7Qz4+Pj0yNixnLndvcmRzW3hdPVQseT1DfXJldHVybiAwIT09eSYmKGcud29yZHNbZy5sZW5ndGgrK109''@;'; put 'put ''eSksZ30sdy5fcHJpbWU9ZnVuY3Rpb24oZyl7aWYocmVbZ10pcmV0dXJuIHJlW2ddO3ZhciB5O2lmKCJrMjU2Ij09PWcpeT1uZXcgdWU7ZWxzZSBpZigicDIyNCI9PT1nKXk9bmV3IGdlO2Vsc2UgaWYoInAxOTIiPT09Zyl5PW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09Zyl0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIlVua25vd24gcHJpbWUgIitnKTt5PW5ldyBUZX1yZXR1cm4gcmVbZ109eSx5fSxNZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwKGcucmVkLCJyZWQgd29ya3Mgb25seSB3aXRo''@;'; put 'put ''IHJlZCBudW1iZXJzIil9LE1lLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihnLHkpe3AoIShnLm5lZ2F0aXZlfHkubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAoZy5yZWQmJmcucmVkPT09eS5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJl''@;'; put 'put ''cnMiKX0sTWUucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGcpLl9mb3JjZVJlZCh0aGlzKTpnLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LE1lLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNa''@;'; put 'put ''ZXJvKCk/Zy5jbG9uZSgpOnRoaXMubS5zdWIoZykuX2ZvcmNlUmVkKHRoaXMpfSxNZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuYWRkKHkpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0''@;'; put 'put ''aGlzKX0sTWUucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5pYWRkKHkpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxNZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkp''@;'; put 'put ''O3ZhciB4PWcuc3ViKHkpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LE1lLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuaXN1Yih5KTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0''@;'; put 'put ''aGlzLm0pLHh9LE1lLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShnKSx0aGlzLmltb2QoZy51c2hsbih5KSl9LE1lLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyx5KSx0aGlzLmltb2QoZy5pbXVsKHkp''@;'; put 'put ''KX0sTWUucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcseSksdGhpcy5pbW9kKGcubXVsKHkpKX0sTWUucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW11bChnLGcuY2xvbmUoKSl9LE1lLnByb3RvdHlwZS5zcXI9ZnVuY3Rp''@;'; put 'put ''b24oZyl7cmV0dXJuIHRoaXMubXVsKGcsZyl9LE1lLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGcpe2lmKGcuaXNaZXJvKCkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgeT10aGlzLm0uYW5kbG4oMyk7aWYocCh5JTI9PTEpLDM9PT15KXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4o''@;'; put 'put ''Mik7cmV0dXJuIHRoaXMucG93KGcseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hybigxKTtwKCFDLmlzWmVybygpKTt2YXIgSD1uZXcgdygxKS50b1JlZCh0aGlzKSxqPUgucmVkTmVnKCksRT10aGlzLm0uc3Vi''@;'; put 'put ''bigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChqKTspbS5yZWRJQWRkKGopO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMpLGFlPXRoaXMucG93KGcsQy5hZGRuKDEpLml1c2hybigxKSks''@;'; put 'put ''bmU9dGhpcy5wb3coZyxDKSxzZT1UOzAhPT1uZS5jbXAoSCk7KXtmb3IodmFyIENlPW5lLFVlPTA7MCE9PUNlLmNtcChIKTtVZSsrKUNlPUNlLnJlZFNxcigpO3AoVWU8c2UpO3ZhciBKZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hsbihzZS1VZS0xKSk7YWU9YWUucmVkTXVsKEplKSxBPUpl''@;'; put 'put ''LnJlZFNxcigpLG5lPW5lLnJlZE11bChBKSxzZT1VZX1yZXR1cm4gYWV9LE1lLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3ZhciB5PWcuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT15Lm5lZ2F0aXZlPyh5Lm5lZ2F0aXZlPTAsdGhpcy5pbW9kKHkpLnJlZE5lZygpKTp0aGlzLmltb2Qo''@;'; put 'put ''eSl9LE1lLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyx5KXtpZih5LmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09eS5jbXBuKDEpKXJldHVybiBnLmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09Zztm''@;'; put 'put ''b3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxnKTt2YXIgSD1DWzBdLGo9MCxFPTAsbT15LmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bSYmKG09MjYpLFQ9eS5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9yKHZhciBBPXkud29yZHNbVF0sYWU9bS0xO2FlPj0wO2Fl''@;'; put 'put ''LS0pe3ZhciBuZT1BPj5hZSYxO0ghPT1DWzBdJiYoSD10aGlzLnNxcihIKSksMCE9PW5lfHwwIT09aj8oajw8PTEsanw9bmUsKDQ9PSsrRXx8MD09PVQmJjA9PT1hZSkmJihIPXRoaXMubXVsKEgsQ1tqXSksRT0wLGo9MCkpOkU9MH1tPTI2fXJldHVybiBIfSxNZS5wcm90b3R5cGUuY29udmVy''@;'; put 'put ''dFRvPWZ1bmN0aW9uKGcpe3ZhciB5PWcudW1vZCh0aGlzLm0pO3JldHVybiB5PT09Zz95LmNsb25lKCk6eX0sTWUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciB5PWcuY2xvbmUoKTtyZXR1cm4geS5yZWQ9bnVsbCx5fSx3Lm1vbnQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5l''@;'; put 'put ''dyBaZShnKX0sVihaZSxNZSksWmUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcudXNobG4odGhpcy5zaGlmdCkpfSxaZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIHk9dGhpcy5pbW9kKGcubXVsKHRoaXMucmludikpO3Jl''@;'; put 'put ''dHVybiB5LnJlZD1udWxsLHl9LFplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcseSl7aWYoZy5pc1plcm8oKXx8eS5pc1plcm8oKSlyZXR1cm4gZy53b3Jkc1swXT0wLGcubGVuZ3RoPTEsZzt2YXIgeD1nLmltdWwoeSksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmlt''@;'; put 'put ''YXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0sWmUucHJvdG90''@;'; put 'put ''eXBlLm11bD1mdW5jdGlvbihnLHkpe2lmKGcuaXNaZXJvKCl8fHkuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1nLm11bCh5KSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9''@;'; put 'put ''eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxaZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5pbW9kKGcuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShjZT1iLm5tZChjZSksdGhpcyl9LDk3MjkwOihjZSxYLGIpPT57dmFyIEk9Yig3MTk5MyksXz1iKDE1MDY2KS5SZXBvcnRlcixwPWIoODM4MzgpLkJ1ZmZlcjtmdW5jdGlvbiBWKFAsRil7Xy5j''@;'; put 'put ''YWxsKHRoaXMsRikscC5pc0J1ZmZlcihQKT8odGhpcy5iYXNlPVAsdGhpcy5vZmZzZXQ9MCx0aGlzLmxlbmd0aD1QLmxlbmd0aCk6dGhpcy5lcnJvcigiSW5wdXQgbm90IEJ1ZmZlciIpfWZ1bmN0aW9uIHcoUCxGKXtpZihBcnJheS5pc0FycmF5KFApKXRoaXMubGVuZ3RoPTAsdGhpcy52YWx1''@;'; put 'put ''ZT1QLm1hcChmdW5jdGlvbihSKXtyZXR1cm4gUiBpbnN0YW5jZW9mIHd8fChSPW5ldyB3KFIsRikpLHRoaXMubGVuZ3RoKz1SLmxlbmd0aCxSfSx0aGlzKTtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgUCl7aWYoISgwPD1QJiZQPD0yNTUpKXJldHVybiBGLmVycm9yKCJub24tYnl0ZSBFbmNv''@;'; put 'put ''ZGVyQnVmZmVyIHZhbHVlIik7dGhpcy52YWx1ZT1QLHRoaXMubGVuZ3RoPTF9ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIFApdGhpcy52YWx1ZT1QLHRoaXMubGVuZ3RoPXAuYnl0ZUxlbmd0aChQKTtlbHNle2lmKCFwLmlzQnVmZmVyKFApKXJldHVybiBGLmVycm9yKCJVbnN1cHBvcnRlZCB0''@;'; put 'put ''eXBlOiAiK3R5cGVvZiBQKTt0aGlzLnZhbHVlPVAsdGhpcy5sZW5ndGg9UC5sZW5ndGh9fUkoVixfKSxYLnQ9VixWLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKCl7cmV0dXJue29mZnNldDp0aGlzLm9mZnNldCxyZXBvcnRlcjpfLnByb3RvdHlwZS5zYXZlLmNhbGwodGhpcyl9fSxWLnByb3Rv''@;'; put 'put ''dHlwZS5yZXN0b3JlPWZ1bmN0aW9uKEYpe3ZhciBSPW5ldyBWKHRoaXMuYmFzZSk7cmV0dXJuIFIub2Zmc2V0PUYub2Zmc2V0LFIubGVuZ3RoPXRoaXMub2Zmc2V0LHRoaXMub2Zmc2V0PUYub2Zmc2V0LF8ucHJvdG90eXBlLnJlc3RvcmUuY2FsbCh0aGlzLEYucmVwb3J0ZXIpLFJ9LFYucHJv''@;'; put 'put ''dG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vZmZzZXQ9PT10aGlzLmxlbmd0aH0sVi5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKEYpe3JldHVybiB0aGlzLm9mZnNldCsxPD10aGlzLmxlbmd0aD90aGlzLmJhc2UucmVhZFVJbnQ4KHRoaXMub2Zmc2V0KyssITAp''@;'; put 'put ''OnRoaXMuZXJyb3IoRnx8IkRlY29kZXJCdWZmZXIgb3ZlcnJ1biIpfSxWLnByb3RvdHlwZS5za2lwPWZ1bmN0aW9uKEYsUil7aWYoISh0aGlzLm9mZnNldCtGPD10aGlzLmxlbmd0aCkpcmV0dXJuIHRoaXMuZXJyb3IoUnx8IkRlY29kZXJCdWZmZXIgb3ZlcnJ1biIpO3ZhciB6PW5ldyBWKHRo''@;'; put 'put ''aXMuYmFzZSk7cmV0dXJuIHouX3JlcG9ydGVyU3RhdGU9dGhpcy5fcmVwb3J0ZXJTdGF0ZSx6Lm9mZnNldD10aGlzLm9mZnNldCx6Lmxlbmd0aD10aGlzLm9mZnNldCtGLHRoaXMub2Zmc2V0Kz1GLHp9LFYucHJvdG90eXBlLnJhdz1mdW5jdGlvbihGKXtyZXR1cm4gdGhpcy5iYXNlLnNsaWNl''@;'; put 'put ''KEY/Ri5vZmZzZXQ6dGhpcy5vZmZzZXQsdGhpcy5sZW5ndGgpfSxYLmQ9dyx3LnByb3RvdHlwZS5qb2luPWZ1bmN0aW9uKEYsUil7cmV0dXJuIEZ8fChGPW5ldyBwKHRoaXMubGVuZ3RoKSksUnx8KFI9MCksMD09PXRoaXMubGVuZ3RofHwoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKT90aGlz''@;'; put 'put ''LnZhbHVlLmZvckVhY2goZnVuY3Rpb24oeil7ei5qb2luKEYsUiksUis9ei5sZW5ndGh9KTooIm51bWJlciI9PXR5cGVvZiB0aGlzLnZhbHVlP0ZbUl09dGhpcy52YWx1ZToic3RyaW5nIj09dHlwZW9mIHRoaXMudmFsdWU/Ri53cml0ZSh0aGlzLnZhbHVlLFIpOnAuaXNCdWZmZXIodGhpcy52''@;'; put 'put ''YWx1ZSkmJnRoaXMudmFsdWUuY29weShGLFIpLFIrPXRoaXMubGVuZ3RoKSksRn19LDk3NDYyOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiYm0iLHttb250aHM6Ilphbnd1eWVrYWxvX0Zld3VydXlla2Fsb19NYXJpc2lrYWxvX0F3''@;'; put 'put ''aXJpbGlrYWxvX01cdTAyNWJrYWxvX1p1d1x1MDI1Ym5rYWxvX1p1bHV5ZWthbG9fVXRpa2Fsb19TXHUwMjVidGFuYnVydWthbG9fXHUwMjU0a3V0XHUwMjU0YnVydWthbG9fTm93YW5idXJ1a2Fsb19EZXNhbmJ1cnVrYWxvIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJaYW5fRmV3X01hcl9B''@;'; put 'put ''d2lfTVx1MDI1Yl9adXdfWnVsX1V0aV9TXHUwMjVidF9cdTAyNTRrdV9Ob3dfRGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJLYXJpX050XHUwMjViblx1MDI1Ym5fVGFyYXRhX0FyYWJhX0FsYW1pc2FfSnVtYV9TaWJpcmkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiS2FyX050XHUwMjVi''@;'; put 'put ''X1Rhcl9BcmFfQWxhX0p1bV9TaWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkthX050X1RhX0FyX0FsX0p1X1NpIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJNTU1NIFt0aWxlXSBEIFtzYW5dIFlZWVki''@;'; put 'put ''LExMTDoiTU1NTSBbdGlsZV0gRCBbc2FuXSBZWVlZIFtsXHUwMjViclx1MDI1Yl0gSEg6bW0iLExMTEw6ImRkZGQgTU1NTSBbdGlsZV0gRCBbc2FuXSBZWVlZIFtsXHUwMjViclx1MDI1Yl0gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0JpIGxcdTAyNWJyXHUwMjViXSBMVCIsbmV4dERh''@;'; put 'put ''eToiW1NpbmkgbFx1MDI1YnJcdTAyNWJdIExUIixuZXh0V2VlazoiZGRkZCBbZG9uIGxcdTAyNWJyXHUwMjViXSBMVCIsbGFzdERheToiW0t1bnUgbFx1MDI1YnJcdTAyNWJdIExUIixsYXN0V2VlazoiZGRkZCBbdFx1MDI1Ym1cdTAyNWJuZW4gbFx1MDI1YnJcdTAyNWJdIExUIixzYW1lRWxz''@;'; put 'put ''ZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBrXHUwMjU0blx1MDI1NCIscGFzdDoiYSBiXHUwMjViICVzIGJcdTAyNTQiLHM6InNhbmdhIGRhbWEgZGFtYSIsc3M6InNla29uZGkgJWQiLG06Im1pbml0aSBrZWxlbiIsbW06Im1pbml0aSAlZCIsaDoibFx1MDI1YnJcdTAyNWIga2Vs''@;'; put 'put ''ZW4iLGhoOiJsXHUwMjViclx1MDI1YiAlZCIsZDoidGlsZSBrZWxlbiIsZGQ6InRpbGUgJWQiLE06ImthbG8ga2VsZW4iLE1NOiJrYWxvICVkIix5OiJzYW4ga2VsZW4iLHl5OiJzYW4gJWQifSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw5NzQ3NjpmdW5jdGlvbihjZSxYLGIp''@;'; put 'put ''eyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInB0LWJyIix7bW9udGhzOiJqYW5laXJvX2ZldmVyZWlyb19tYXJceGU3b19hYnJpbF9tYWlvX2p1bmhvX2p1bGhvX2Fnb3N0b19zZXRlbWJyb19vdXR1YnJvX25vdmVtYnJvX2RlemVtYnJvIi5zcGxpdCgiXyIpLG1v''@;'; put 'put ''bnRoc1Nob3J0OiJqYW5fZmV2X21hcl9hYnJfbWFpX2p1bl9qdWxfYWdvX3NldF9vdXRfbm92X2RleiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiZG9taW5nb19zZWd1bmRhLWZlaXJhX3Rlclx4ZTdhLWZlaXJhX3F1YXJ0YS1mZWlyYV9xdWludGEtZmVpcmFfc2V4dGEtZmVpcmFfc1x4ZTFiYWRv''@;'; put 'put ''Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbV9zZWdfdGVyX3F1YV9xdWlfc2V4X3NceGUxYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fMlx4YWFfM1x4YWFfNFx4YWFfNVx4YWFfNlx4YWFfc1x4ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRl''@;'; put 'put ''Rm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIFtceGUwc10gSEg6bW0iLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBbXHhlMHNdIEhIOm1t''@;'; put 'put ''In0sY2FsZW5kYXI6e3NhbWVEYXk6IltIb2plIFx4ZTBzXSBMVCIsbmV4dERheToiW0FtYW5oXHhlMyBceGUwc10gTFQiLG5leHRXZWVrOiJkZGRkIFtceGUwc10gTFQiLGxhc3REYXk6IltPbnRlbSBceGUwc10gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmRheSgp''@;'; put 'put ''fHw2PT09dGhpcy5kYXkoKT8iW1x4ZGFsdGltb10gZGRkZCBbXHhlMHNdIExUIjoiW1x4ZGFsdGltYV0gZGRkZCBbXHhlMHNdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZW0gJXMiLHBhc3Q6ImhceGUxICVzIixzOiJwb3Vjb3Mgc2VndW5kb3MiLHNzOiIlZCBz''@;'; put 'put ''ZWd1bmRvcyIsbToidW0gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW1hIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW0gZGlhIixkZDoiJWQgZGlhcyIsTToidW0gbVx4ZWFzIixNTToiJWQgbWVzZXMiLHk6InVtIGFubyIseXk6IiVkIGFub3MifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNl''@;'; put 'put ''Oi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIixpbnZhbGlkRGF0ZToiRGF0YSBpbnZceGUxbGlkYSJ9KX0oYig5NzU4NikpfSw5NzU0MTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDU4NjA3KSxfPVNldC5wcm90b3R5cGU7Y2UuZXhwb3J0cz17U2V0LGFkZDpJKF8uYWRk''@;'; put 'put ''KSxoYXM6SShfLmhhcykscmVtb3ZlOkkoXy5kZWxldGUpLHByb3RvOl99fSw5NzU4NjpmdW5jdGlvbihjZSxYLGIpeyhjZT1iLm5tZChjZSkpLmV4cG9ydHM9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIEkscTtmdW5jdGlvbiBfKCl7cmV0dXJuIEkuYXBwbHkobnVsbCxhcmd1bWVudHMp''@;'; put 'put ''fWZ1bmN0aW9uIFYoU2Upe3JldHVybiBTZSBpbnN0YW5jZW9mIEFycmF5fHwiW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFNlKX1mdW5jdGlvbiB3KFNlKXtyZXR1cm4gbnVsbCE9U2UmJiJbb2JqZWN0IE9iamVjdF0iPT09T2JqZWN0LnByb3RvdHlw''@;'; put 'put ''ZS50b1N0cmluZy5jYWxsKFNlKX1mdW5jdGlvbiBQKFNlLCRlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFNlLCRlKX1mdW5jdGlvbiBGKFNlKXtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcylyZXR1cm4gMD09PU9iamVjdC5nZXRPd25Qcm9wZXJ0''@;'; put 'put ''eU5hbWVzKFNlKS5sZW5ndGg7dmFyICRlO2ZvcigkZSBpbiBTZSlpZihQKFNlLCRlKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBSKFNlKXtyZXR1cm4gdm9pZCAwPT09U2V9ZnVuY3Rpb24geihTZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBTZXx8IltvYmplY3QgTnVtYmVyXSI9PT1P''@;'; put 'put ''YmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoU2UpfWZ1bmN0aW9uIE4oU2Upe3JldHVybiBTZSBpbnN0YW5jZW9mIERhdGV8fCJbb2JqZWN0IERhdGVdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChTZSl9ZnVuY3Rpb24gTyhTZSwkZSl7dmFyIER0LHB0PVtdLG9uPVNl''@;'; put 'put ''Lmxlbmd0aDtmb3IoRHQ9MDtEdDxvbjsrK0R0KXB0LnB1c2goJGUoU2VbRHRdLER0KSk7cmV0dXJuIHB0fWZ1bmN0aW9uIEsoU2UsJGUpe2Zvcih2YXIgcHQgaW4gJGUpUCgkZSxwdCkmJihTZVtwdF09JGVbcHRdKTtyZXR1cm4gUCgkZSwidG9TdHJpbmciKSYmKFNlLnRvU3RyaW5nPSRlLnRv''@;'; put 'put ''U3RyaW5nKSxQKCRlLCJ2YWx1ZU9mIikmJihTZS52YWx1ZU9mPSRlLnZhbHVlT2YpLFNlfWZ1bmN0aW9uIFooU2UsJGUscHQsRHQpe3JldHVybiB5ZyhTZSwkZSxwdCxEdCwhMCkudXRjKCl9ZnVuY3Rpb24gVyhTZSl7cmV0dXJuIG51bGw9PVNlLl9wZiYmKFNlLl9wZj17ZW1wdHk6ITEsdW51''@;'; put 'put ''c2VkVG9rZW5zOltdLHVudXNlZElucHV0OltdLG92ZXJmbG93Oi0yLGNoYXJzTGVmdE92ZXI6MCxudWxsSW5wdXQ6ITEsaW52YWxpZEVyYTpudWxsLGludmFsaWRNb250aDpudWxsLGludmFsaWRGb3JtYXQ6ITEsdXNlckludmFsaWRhdGVkOiExLGlzbzohMSxwYXJzZWREYXRlUGFydHM6W10s''@;'; put 'put ''ZXJhOm51bGwsbWVyaWRpZW06bnVsbCxyZmMyODIyOiExLHdlZWtkYXlNaXNtYXRjaDohMX0pLFNlLl9wZn1mdW5jdGlvbiBlZShTZSl7dmFyICRlPW51bGwscHQ9ITEsRHQ9U2UuX2QmJiFpc05hTihTZS5fZC5nZXRUaW1lKCkpO3JldHVybiBEdCYmKCRlPVcoU2UpLHB0PXEuY2FsbCgkZS5w''@;'; put 'put ''YXJzZWREYXRlUGFydHMsZnVuY3Rpb24ob24pe3JldHVybiBudWxsIT1vbn0pLER0PSRlLm92ZXJmbG93PDAmJiEkZS5lbXB0eSYmISRlLmludmFsaWRFcmEmJiEkZS5pbnZhbGlkTW9udGgmJiEkZS5pbnZhbGlkV2Vla2RheSYmISRlLndlZWtkYXlNaXNtYXRjaCYmISRlLm51bGxJbnB1dCYm''@;'; put 'put ''ISRlLmludmFsaWRGb3JtYXQmJiEkZS51c2VySW52YWxpZGF0ZWQmJighJGUubWVyaWRpZW18fCRlLm1lcmlkaWVtJiZwdCksU2UuX3N0cmljdCYmKER0PUR0JiYwPT09JGUuY2hhcnNMZWZ0T3ZlciYmMD09PSRlLnVudXNlZFRva2Vucy5sZW5ndGgmJnZvaWQgMD09PSRlLmJpZ0hvdXIpKSxu''@;'; put 'put ''dWxsIT1PYmplY3QuaXNGcm96ZW4mJk9iamVjdC5pc0Zyb3plbihTZSk/RHQ6KFNlLl9pc1ZhbGlkPUR0LFNlLl9pc1ZhbGlkKX1mdW5jdGlvbiBKKFNlKXt2YXIgJGU9WihOYU4pO3JldHVybiBudWxsIT1TZT9LKFcoJGUpLFNlKTpXKCRlKS51c2VySW52YWxpZGF0ZWQ9ITAsJGV9cT1BcnJh''@;'; put 'put ''eS5wcm90b3R5cGUuc29tZT9BcnJheS5wcm90b3R5cGUuc29tZTpmdW5jdGlvbihTZSl7dmFyIER0LCRlPU9iamVjdCh0aGlzKSxwdD0kZS5sZW5ndGg+Pj4wO2ZvcihEdD0wO0R0PHB0O0R0KyspaWYoRHQgaW4gJGUmJlNlLmNhbGwodGhpcywkZVtEdF0sRHQsJGUpKXJldHVybiEwO3JldHVy''@;'; put 'put ''biExfTt2YXIgcmU9Xy5tb21lbnRQcm9wZXJ0aWVzPVtdLGllPSExO2Z1bmN0aW9uIHVlKFNlLCRlKXt2YXIgcHQsRHQsb24sJG49cmUubGVuZ3RoO2lmKFIoJGUuX2lzQU1vbWVudE9iamVjdCl8fChTZS5faXNBTW9tZW50T2JqZWN0PSRlLl9pc0FNb21lbnRPYmplY3QpLFIoJGUuX2kpfHwo''@;'; put 'put ''U2UuX2k9JGUuX2kpLFIoJGUuX2YpfHwoU2UuX2Y9JGUuX2YpLFIoJGUuX2wpfHwoU2UuX2w9JGUuX2wpLFIoJGUuX3N0cmljdCl8fChTZS5fc3RyaWN0PSRlLl9zdHJpY3QpLFIoJGUuX3R6bSl8fChTZS5fdHptPSRlLl90em0pLFIoJGUuX2lzVVRDKXx8KFNlLl9pc1VUQz0kZS5faXNVVEMp''@;'; put 'put ''LFIoJGUuX29mZnNldCl8fChTZS5fb2Zmc2V0PSRlLl9vZmZzZXQpLFIoJGUuX3BmKXx8KFNlLl9wZj1XKCRlKSksUigkZS5fbG9jYWxlKXx8KFNlLl9sb2NhbGU9JGUuX2xvY2FsZSksJG4+MClmb3IocHQ9MDtwdDwkbjtwdCsrKVIob249JGVbRHQ9cmVbcHRdXSl8fChTZVtEdF09b24pO3Jl''@;'; put 'put ''dHVybiBTZX1mdW5jdGlvbiBnZShTZSl7dWUodGhpcyxTZSksdGhpcy5fZD1uZXcgRGF0ZShudWxsIT1TZS5fZD9TZS5fZC5nZXRUaW1lKCk6TmFOKSx0aGlzLmlzVmFsaWQoKXx8KHRoaXMuX2Q9bmV3IERhdGUoTmFOKSksITE9PT1pZSYmKGllPSEwLF8udXBkYXRlT2Zmc2V0KHRoaXMpLGll''@;'; put 'put ''PSExKX1mdW5jdGlvbiBfZShTZSl7cmV0dXJuIFNlIGluc3RhbmNlb2YgZ2V8fG51bGwhPVNlJiZudWxsIT1TZS5faXNBTW9tZW50T2JqZWN0fWZ1bmN0aW9uIFRlKFNlKXshMT09PV8uc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzJiZ0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2Fy''@;'; put 'put ''biYmY29uc29sZS53YXJuKCJEZXByZWNhdGlvbiB3YXJuaW5nOiAiK1NlKX1mdW5jdGlvbiBNZShTZSwkZSl7dmFyIHB0PSEwO3JldHVybiBLKGZ1bmN0aW9uKCl7aWYobnVsbCE9Xy5kZXByZWNhdGlvbkhhbmRsZXImJl8uZGVwcmVjYXRpb25IYW5kbGVyKG51bGwsU2UpLHB0KXt2YXIgb24s''@;'; put 'put ''JG4scXIsRHQ9W10sbGE9YXJndW1lbnRzLmxlbmd0aDtmb3IoJG49MDskbjxsYTskbisrKXtpZihvbj0iIiwib2JqZWN0Ij09dHlwZW9mIGFyZ3VtZW50c1skbl0pe2ZvcihxciBpbiBvbis9IlxuWyIrJG4rIl0gIixhcmd1bWVudHNbMF0pUChhcmd1bWVudHNbMF0scXIpJiYob24rPXFyKyI6''@;'; put 'put ''ICIrYXJndW1lbnRzWzBdW3FyXSsiLCAiKTtvbj1vbi5zbGljZSgwLC0yKX1lbHNlIG9uPWFyZ3VtZW50c1skbl07RHQucHVzaChvbil9VGUoU2UrIlxuQXJndW1lbnRzOiAiK0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKER0KS5qb2luKCIiKSsiXG4iKyhuZXcgRXJyb3IpLnN0YWNrKSxw''@;'; put 'put ''dD0hMX1yZXR1cm4gJGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSwkZSl9dmFyIFQsWmU9e307ZnVuY3Rpb24gQihTZSwkZSl7bnVsbCE9Xy5kZXByZWNhdGlvbkhhbmRsZXImJl8uZGVwcmVjYXRpb25IYW5kbGVyKFNlLCRlKSxaZVtTZV18fChUZSgkZSksWmVbU2VdPSEwKX1mdW5jdGlvbiBn''@;'; put 'put ''KFNlKXtyZXR1cm4gdHlwZW9mIEZ1bmN0aW9uPCJ1IiYmU2UgaW5zdGFuY2VvZiBGdW5jdGlvbnx8IltvYmplY3QgRnVuY3Rpb25dIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChTZSl9ZnVuY3Rpb24geChTZSwkZSl7dmFyIER0LHB0PUsoe30sU2UpO2ZvcihEdCBpbiAkZSlQ''@;'; put 'put ''KCRlLER0KSYmKHcoU2VbRHRdKSYmdygkZVtEdF0pPyhwdFtEdF09e30sSyhwdFtEdF0sU2VbRHRdKSxLKHB0W0R0XSwkZVtEdF0pKTpudWxsIT0kZVtEdF0/cHRbRHRdPSRlW0R0XTpkZWxldGUgcHRbRHRdKTtmb3IoRHQgaW4gU2UpUChTZSxEdCkmJiFQKCRlLER0KSYmdyhTZVtEdF0pJiYo''@;'; put 'put ''cHRbRHRdPUsoe30scHRbRHRdKSk7cmV0dXJuIHB0fWZ1bmN0aW9uIEMoU2Upe251bGwhPVNlJiZ0aGlzLnNldChTZSl9Xy5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3M9ITEsXy5kZXByZWNhdGlvbkhhbmRsZXI9bnVsbCxUPU9iamVjdC5rZXlzP09iamVjdC5rZXlzOmZ1bmN0aW9uKFNl''@;'; put 'put ''KXt2YXIgJGUscHQ9W107Zm9yKCRlIGluIFNlKVAoU2UsJGUpJiZwdC5wdXNoKCRlKTtyZXR1cm4gcHR9O2Z1bmN0aW9uIEUoU2UsJGUscHQpe3ZhciBEdD0iIitNYXRoLmFicyhTZSk7cmV0dXJuKFNlPj0wP3B0PyIrIjoiIjoiLSIpK01hdGgucG93KDEwLE1hdGgubWF4KDAsJGUtRHQubGVu''@;'; put 'put ''Z3RoKSkudG9TdHJpbmcoKS5zdWJzdHIoMSkrRHR9dmFyIG09LyhcW1teXFtdKlxdKXwoXFwpPyhbSGhdbW0oc3MpP3xNb3xNTT9NP00/fERvfERERG98REQ/RD9EP3xkZGQ/ZD98ZG8/fHdbb3x3XT98V1tvfFddP3xRbz98TnsxLDV9fFlZWVlZWXxZWVlZWXxZWVlZfFlZfHl7Miw0fXx5bz98''@;'; put 'put ''Z2coZ2dnPyk/fEdHKEdHRz8pP3xlfEV8YXxBfGhoP3xISD98a2s/fG1tP3xzcz98U3sxLDl9fHh8WHx6ej98Wlo/fC4pL2csQT0vKFxbW15cW10qXF0pfChcXCk/KExUU3xMVHxMTD9MP0w/fGx7MSw0fSkvZyxhZT17fSxuZT17fTtmdW5jdGlvbiBzZShTZSwkZSxwdCxEdCl7dmFyIG9uPUR0''@;'; put 'put ''OyJzdHJpbmciPT10eXBlb2YgRHQmJihvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzW0R0XSgpfSksU2UmJihuZVtTZV09b24pLCRlJiYobmVbJGVbMF1dPWZ1bmN0aW9uKCl7cmV0dXJuIEUob24uYXBwbHkodGhpcyxhcmd1bWVudHMpLCRlWzFdLCRlWzJdKX0pLHB0JiYobmVbcHRdPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm9yZGluYWwob24uYXBwbHkodGhpcyxhcmd1bWVudHMpLFNlKX0pfWZ1bmN0aW9uIENlKFNlKXtyZXR1cm4gU2UubWF0Y2goL1xbW1xzXFNdLyk/U2UucmVwbGFjZSgvXlxbfFxdJC9nLCIiKTpTZS5yZXBsYWNlKC9cXC9nLCIiKX1mdW5j''@;'; put 'put ''dGlvbiBKZShTZSwkZSl7cmV0dXJuIFNlLmlzVmFsaWQoKT8oJGU9aXQoJGUsU2UubG9jYWxlRGF0YSgpKSxhZVskZV09YWVbJGVdfHxmdW5jdGlvbiBVZShTZSl7dmFyIHB0LER0LCRlPVNlLm1hdGNoKG0pO2ZvcihwdD0wLER0PSRlLmxlbmd0aDtwdDxEdDtwdCsrKSRlW3B0XT1uZVskZVtw''@;'; put 'put ''dF1dP25lWyRlW3B0XV06Q2UoJGVbcHRdKTtyZXR1cm4gZnVuY3Rpb24ob24pe3ZhciBxciwkbj0iIjtmb3IocXI9MDtxcjxEdDtxcisrKSRuKz1nKCRlW3FyXSk/JGVbcXJdLmNhbGwob24sU2UpOiRlW3FyXTtyZXR1cm4gJG59fSgkZSksYWVbJGVdKFNlKSk6U2UubG9jYWxlRGF0YSgpLmlu''@;'; put 'put ''dmFsaWREYXRlKCl9ZnVuY3Rpb24gaXQoU2UsJGUpe3ZhciBwdD01O2Z1bmN0aW9uIER0KG9uKXtyZXR1cm4gJGUubG9uZ0RhdGVGb3JtYXQob24pfHxvbn1mb3IoQS5sYXN0SW5kZXg9MDtwdD49MCYmQS50ZXN0KFNlKTspU2U9U2UucmVwbGFjZShBLER0KSxBLmxhc3RJbmRleD0wLHB0LT0x''@;'; put 'put ''O3JldHVybiBTZX12YXIgRGU9e0Q6ImRhdGUiLGRhdGVzOiJkYXRlIixkYXRlOiJkYXRlIixkOiJkYXkiLGRheXM6ImRheSIsZGF5OiJkYXkiLGU6IndlZWtkYXkiLHdlZWtkYXlzOiJ3ZWVrZGF5Iix3ZWVrZGF5OiJ3ZWVrZGF5IixFOiJpc29XZWVrZGF5Iixpc293ZWVrZGF5czoiaXNvV2Vl''@;'; put 'put ''a2RheSIsaXNvd2Vla2RheToiaXNvV2Vla2RheSIsREREOiJkYXlPZlllYXIiLGRheW9meWVhcnM6ImRheU9mWWVhciIsZGF5b2Z5ZWFyOiJkYXlPZlllYXIiLGg6ImhvdXIiLGhvdXJzOiJob3VyIixob3VyOiJob3VyIixtczoibWlsbGlzZWNvbmQiLG1pbGxpc2Vjb25kczoibWlsbGlzZWNv''@;'; put 'put ''bmQiLG1pbGxpc2Vjb25kOiJtaWxsaXNlY29uZCIsbToibWludXRlIixtaW51dGVzOiJtaW51dGUiLG1pbnV0ZToibWludXRlIixNOiJtb250aCIsbW9udGhzOiJtb250aCIsbW9udGg6Im1vbnRoIixROiJxdWFydGVyIixxdWFydGVyczoicXVhcnRlciIscXVhcnRlcjoicXVhcnRlciIsczoi''@;'; put 'put ''c2Vjb25kIixzZWNvbmRzOiJzZWNvbmQiLHNlY29uZDoic2Vjb25kIixnZzoid2Vla1llYXIiLHdlZWt5ZWFyczoid2Vla1llYXIiLHdlZWt5ZWFyOiJ3ZWVrWWVhciIsR0c6Imlzb1dlZWtZZWFyIixpc293ZWVreWVhcnM6Imlzb1dlZWtZZWFyIixpc293ZWVreWVhcjoiaXNvV2Vla1llYXIi''@;'; put 'put ''LHc6IndlZWsiLHdlZWtzOiJ3ZWVrIix3ZWVrOiJ3ZWVrIixXOiJpc29XZWVrIixpc293ZWVrczoiaXNvV2VlayIsaXNvd2VlazoiaXNvV2VlayIseToieWVhciIseWVhcnM6InllYXIiLHllYXI6InllYXIifTtmdW5jdGlvbiBfdChTZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBTZT9EZVtT''@;'; put 'put ''ZV18fERlW1NlLnRvTG93ZXJDYXNlKCldOnZvaWQgMH1mdW5jdGlvbiBydChTZSl7dmFyIHB0LER0LCRlPXt9O2ZvcihEdCBpbiBTZSlQKFNlLER0KSYmKHB0PV90KER0KSkmJigkZVtwdF09U2VbRHRdKTtyZXR1cm4gJGV9dmFyIFFlPXtkYXRlOjksZGF5OjExLHdlZWtkYXk6MTEsaXNvV2Vl''@;'; put 'put ''a2RheToxMSxkYXlPZlllYXI6NCxob3VyOjEzLG1pbGxpc2Vjb25kOjE2LG1pbnV0ZToxNCxtb250aDo4LHF1YXJ0ZXI6NyxzZWNvbmQ6MTUsd2Vla1llYXI6MSxpc29XZWVrWWVhcjoxLHdlZWs6NSxpc29XZWVrOjUseWVhcjoxfTt2YXIgQXQsdnQ9L1xkLyxTdD0vXGRcZC8sZW49L1xkezN9''@;'; put 'put ''Lyx1dD0vXGR7NH0vLFhlPS9bKy1dP1xkezZ9Lyx0dD0vXGRcZD8vLEllPS9cZFxkXGRcZD8vLGF0PS9cZFxkXGRcZFxkXGQ/Lyx1bj0vXGR7MSwzfS8sSXQ9L1xkezEsNH0vLFJ0PS9bKy1dP1xkezEsNn0vLHJpPS9cZCsvLGFuPS9bKy1dP1xkKy8sbG49L1p8WystXVxkXGQ6P1xkXGQvZ2ks''@;'; put 'put ''bmk9L1p8WystXVxkXGQoPzo6P1xkXGQpPy9naSxodD0vWzAtOV17MCwyNTZ9WydhLXpcdTAwQTAtXHUwNUZGXHUwNzAwLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRjA3XHVGRjEwLVx1RkZFRl17MSwyNTZ9fFtcdTA2MDAtXHUwNkZGXC9dezEsMjU2fShccyo/W1x1MDYwMC1cdTA2''@;'; put 'put ''RkZdezEsMjU2fSl7MSwyfS9pLFJyPS9eWzEtOV1cZD8vLEJ0PS9eKFsxLTldXGR8XGQpLztmdW5jdGlvbiBGbihTZSwkZSxwdCl7QXRbU2VdPWcoJGUpPyRlOmZ1bmN0aW9uKER0LG9uKXtyZXR1cm4gRHQmJnB0P3B0OiRlfX1mdW5jdGlvbiBzdChTZSwkZSl7cmV0dXJuIFAoQXQsU2UpP0F0''@;'; put 'put ''W1NlXSgkZS5fc3RyaWN0LCRlLl9sb2NhbGUpOm5ldyBSZWdFeHAoZnVuY3Rpb24gWnQoU2Upe3JldHVybiBRcihTZS5yZXBsYWNlKCJcXCIsIiIpLnJlcGxhY2UoL1xcKFxbKXxcXChcXSl8XFsoW15cXVxbXSopXF18XFwoLikvZyxmdW5jdGlvbigkZSxwdCxEdCxvbiwkbil7cmV0dXJuIHB0''@;'; put 'put ''fHxEdHx8b258fCRufSkpfShTZSkpfWZ1bmN0aW9uIFFyKFNlKXtyZXR1cm4gU2UucmVwbGFjZSgvWy1cL1xcXiQqKz8uKCl8W1xde31dL2csIlxcJCYiKX1mdW5jdGlvbiBZZShTZSl7cmV0dXJuIFNlPDA/TWF0aC5jZWlsKFNlKXx8MDpNYXRoLmZsb29yKFNlKX1mdW5jdGlvbiBUdChTZSl7''@;'; put 'put ''dmFyICRlPStTZSxwdD0wO3JldHVybiAwIT09JGUmJmlzRmluaXRlKCRlKSYmKHB0PVllKCRlKSkscHR9QXQ9e307dmFyIHJyPXt9O2Z1bmN0aW9uIGZ0KFNlLCRlKXt2YXIgcHQsb24sRHQ9JGU7Zm9yKCJzdHJpbmciPT10eXBlb2YgU2UmJihTZT1bU2VdKSx6KCRlKSYmKER0PWZ1bmN0aW9u''@;'; put 'put ''KCRuLHFyKXtxclskZV09VHQoJG4pfSksb249U2UubGVuZ3RoLHB0PTA7cHQ8b247cHQrKylycltTZVtwdF1dPUR0fWZ1bmN0aW9uIE10KFNlLCRlKXtmdChTZSxmdW5jdGlvbihwdCxEdCxvbiwkbil7b24uX3c9b24uX3d8fHt9LCRlKHB0LG9uLl93LG9uLCRuKX0pfWZ1bmN0aW9uIFpuKFNl''@;'; put 'put ''LCRlLHB0KXtudWxsIT0kZSYmUChycixTZSkmJnJyW1NlXSgkZSxwdC5fYSxwdCxTZSl9ZnVuY3Rpb24gbm4oU2Upe3JldHVybiBTZSU0PT0wJiZTZSUxMDAhPTB8fFNlJTQwMD09MH12YXIgV3Q9MCxkaT0xLGRuPTIsbW49MyxwaT00LGZuPTUsdG49NixjYT03LF9pPTg7ZnVuY3Rpb24gdnIo''@;'; put 'put ''U2Upe3JldHVybiBubihTZSk/MzY2OjM2NX1zZSgiWSIsMCwwLGZ1bmN0aW9uKCl7dmFyIFNlPXRoaXMueWVhcigpO3JldHVybiBTZTw9OTk5OT9FKFNlLDQpOiIrIitTZX0pLHNlKDAsWyJZWSIsMl0sMCxmdW5jdGlvbigpe3JldHVybiB0aGlzLnllYXIoKSUxMDB9KSxzZSgwLFsiWVlZWSIs''@;'; put 'put ''NF0sMCwieWVhciIpLHNlKDAsWyJZWVlZWSIsNV0sMCwieWVhciIpLHNlKDAsWyJZWVlZWVkiLDYsITBdLDAsInllYXIiKSxGbigiWSIsYW4pLEZuKCJZWSIsdHQsU3QpLEZuKCJZWVlZIixJdCx1dCksRm4oIllZWVlZIixSdCxYZSksRm4oIllZWVlZWSIsUnQsWGUpLGZ0KFsiWVlZWVkiLCJZ''@;'; put 'put ''WVlZWVkiXSxXdCksZnQoIllZWVkiLGZ1bmN0aW9uKFNlLCRlKXskZVtXdF09Mj09PVNlLmxlbmd0aD9fLnBhcnNlVHdvRGlnaXRZZWFyKFNlKTpUdChTZSl9KSxmdCgiWVkiLGZ1bmN0aW9uKFNlLCRlKXskZVtXdF09Xy5wYXJzZVR3b0RpZ2l0WWVhcihTZSl9KSxmdCgiWSIsZnVuY3Rpb24o''@;'; put 'put ''U2UsJGUpeyRlW1d0XT1wYXJzZUludChTZSwxMCl9KSxfLnBhcnNlVHdvRGlnaXRZZWFyPWZ1bmN0aW9uKFNlKXtyZXR1cm4gVHQoU2UpKyhUdChTZSk+Njg/MTkwMDoyZTMpfTt2YXIgcWksWGk9VmkoIkZ1bGxZZWFyIiwhMCk7ZnVuY3Rpb24gVmkoU2UsJGUpe3JldHVybiBmdW5jdGlvbihw''@;'; put 'put ''dCl7cmV0dXJuIG51bGwhPXB0Pyh1YSh0aGlzLFNlLHB0KSxfLnVwZGF0ZU9mZnNldCh0aGlzLCRlKSx0aGlzKTplaSh0aGlzLFNlKX19ZnVuY3Rpb24gZWkoU2UsJGUpe2lmKCFTZS5pc1ZhbGlkKCkpcmV0dXJuIE5hTjt2YXIgcHQ9U2UuX2QsRHQ9U2UuX2lzVVRDO3N3aXRjaCgkZSl7Y2Fz''@;'; put 'put ''ZSJNaWxsaXNlY29uZHMiOnJldHVybiBEdD9wdC5nZXRVVENNaWxsaXNlY29uZHMoKTpwdC5nZXRNaWxsaXNlY29uZHMoKTtjYXNlIlNlY29uZHMiOnJldHVybiBEdD9wdC5nZXRVVENTZWNvbmRzKCk6cHQuZ2V0U2Vjb25kcygpO2Nhc2UiTWludXRlcyI6cmV0dXJuIER0P3B0LmdldFVUQ01p''@;'; put 'put ''bnV0ZXMoKTpwdC5nZXRNaW51dGVzKCk7Y2FzZSJIb3VycyI6cmV0dXJuIER0P3B0LmdldFVUQ0hvdXJzKCk6cHQuZ2V0SG91cnMoKTtjYXNlIkRhdGUiOnJldHVybiBEdD9wdC5nZXRVVENEYXRlKCk6cHQuZ2V0RGF0ZSgpO2Nhc2UiRGF5IjpyZXR1cm4gRHQ/cHQuZ2V0VVRDRGF5KCk6cHQu''@;'; put 'put ''Z2V0RGF5KCk7Y2FzZSJNb250aCI6cmV0dXJuIER0P3B0LmdldFVUQ01vbnRoKCk6cHQuZ2V0TW9udGgoKTtjYXNlIkZ1bGxZZWFyIjpyZXR1cm4gRHQ/cHQuZ2V0VVRDRnVsbFllYXIoKTpwdC5nZXRGdWxsWWVhcigpO2RlZmF1bHQ6cmV0dXJuIE5hTn19ZnVuY3Rpb24gdWEoU2UsJGUscHQp''@;'; put 'put ''e3ZhciBEdCxvbiwkbixxcixsYTtpZihTZS5pc1ZhbGlkKCkmJiFpc05hTihwdCkpe3N3aXRjaChEdD1TZS5fZCxvbj1TZS5faXNVVEMsJGUpe2Nhc2UiTWlsbGlzZWNvbmRzIjpyZXR1cm4gdm9pZChvbj9EdC5zZXRVVENNaWxsaXNlY29uZHMocHQpOkR0LnNldE1pbGxpc2Vjb25kcyhwdCkp''@;'; put 'put ''O2Nhc2UiU2Vjb25kcyI6cmV0dXJuIHZvaWQob24/RHQuc2V0VVRDU2Vjb25kcyhwdCk6RHQuc2V0U2Vjb25kcyhwdCkpO2Nhc2UiTWludXRlcyI6cmV0dXJuIHZvaWQob24/RHQuc2V0VVRDTWludXRlcyhwdCk6RHQuc2V0TWludXRlcyhwdCkpO2Nhc2UiSG91cnMiOnJldHVybiB2b2lkKG9u''@;'; put 'put ''P0R0LnNldFVUQ0hvdXJzKHB0KTpEdC5zZXRIb3VycyhwdCkpO2Nhc2UiRGF0ZSI6cmV0dXJuIHZvaWQob24/RHQuc2V0VVRDRGF0ZShwdCk6RHQuc2V0RGF0ZShwdCkpO2Nhc2UiRnVsbFllYXIiOmJyZWFrO2RlZmF1bHQ6cmV0dXJufSRuPXB0LHFyPVNlLm1vbnRoKCksbGE9MjkhPT0obGE9''@;'; put 'put ''U2UuZGF0ZSgpKXx8MSE9PXFyfHxubigkbik/bGE6Mjgsb24/RHQuc2V0VVRDRnVsbFllYXIoJG4scXIsbGEpOkR0LnNldEZ1bGxZZWFyKCRuLHFyLGxhKX19ZnVuY3Rpb24gUGEoU2UsJGUpe2lmKGlzTmFOKFNlKXx8aXNOYU4oJGUpKXJldHVybiBOYU47dmFyIHB0PWZ1bmN0aW9uIGhpKFNl''@;'; put 'put ''LCRlKXtyZXR1cm4oU2UlJGUrJGUpJSRlfSgkZSwxMik7cmV0dXJuIFNlKz0oJGUtcHQpLzEyLDE9PT1wdD9ubihTZSk/Mjk6Mjg6MzEtcHQlNyUyfXFpPUFycmF5LnByb3RvdHlwZS5pbmRleE9mP0FycmF5LnByb3RvdHlwZS5pbmRleE9mOmZ1bmN0aW9uKFNlKXt2YXIgJGU7Zm9yKCRlPTA7''@;'; put 'put ''JGU8dGhpcy5sZW5ndGg7KyskZSlpZih0aGlzWyRlXT09PVNlKXJldHVybiAkZTtyZXR1cm4tMX0sc2UoIk0iLFsiTU0iLDJdLCJNbyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb250aCgpKzF9KSxzZSgiTU1NIiwwLDAsZnVuY3Rpb24oU2Upe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5t''@;'; put 'put ''b250aHNTaG9ydCh0aGlzLFNlKX0pLHNlKCJNTU1NIiwwLDAsZnVuY3Rpb24oU2Upe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHModGhpcyxTZSl9KSxGbigiTSIsdHQsUnIpLEZuKCJNTSIsdHQsU3QpLEZuKCJNTU0iLGZ1bmN0aW9uKFNlLCRlKXtyZXR1cm4gJGUubW9udGhzU2hv''@;'; put 'put ''cnRSZWdleChTZSl9KSxGbigiTU1NTSIsZnVuY3Rpb24oU2UsJGUpe3JldHVybiAkZS5tb250aHNSZWdleChTZSl9KSxmdChbIk0iLCJNTSJdLGZ1bmN0aW9uKFNlLCRlKXskZVtkaV09VHQoU2UpLTF9KSxmdChbIk1NTSIsIk1NTU0iXSxmdW5jdGlvbihTZSwkZSxwdCxEdCl7dmFyIG9uPXB0''@;'; put 'put ''Ll9sb2NhbGUubW9udGhzUGFyc2UoU2UsRHQscHQuX3N0cmljdCk7bnVsbCE9b24/JGVbZGldPW9uOlcocHQpLmludmFsaWRNb250aD1TZX0pO3ZhciB1cj0iSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJl''@;'; put 'put ''cl9EZWNlbWJlciIuc3BsaXQoIl8iKSxiYT0iSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksTWk9L0Rbb0RdPyhcW1teXFtcXV0qXF18XHMpK01NTU0/Lyx3YT1odCxlYT1odDtmdW5jdGlvbiBZYShTZSwkZSxwdCl7dmFyIER0LG9u''@;'; put 'put ''LCRuLHFyPVNlLnRvTG9jYWxlTG93ZXJDYXNlKCk7aWYoIXRoaXMuX21vbnRoc1BhcnNlKWZvcih0aGlzLl9tb250aHNQYXJzZT1bXSx0aGlzLl9sb25nTW9udGhzUGFyc2U9W10sdGhpcy5fc2hvcnRNb250aHNQYXJzZT1bXSxEdD0wO0R0PDEyOysrRHQpJG49WihbMmUzLER0XSksdGhpcy5f''@;'; put 'put ''c2hvcnRNb250aHNQYXJzZVtEdF09dGhpcy5tb250aHNTaG9ydCgkbiwiIikudG9Mb2NhbGVMb3dlckNhc2UoKSx0aGlzLl9sb25nTW9udGhzUGFyc2VbRHRdPXRoaXMubW9udGhzKCRuLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpO3JldHVybiBwdD8iTU1NIj09PSRlPy0xIT09KG9uPXFpLmNh''@;'; put 'put ''bGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSxxcikpP29uOm51bGw6LTEhPT0ob249cWkuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UscXIpKT9vbjpudWxsOiJNTU0iPT09JGU/LTEhPT0ob249cWkuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLHFyKSl8fC0xIT09KG9uPXFpLmNhbGwo''@;'; put 'put ''dGhpcy5fbG9uZ01vbnRoc1BhcnNlLHFyKSk/b246bnVsbDotMSE9PShvbj1xaS5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSxxcikpfHwtMSE9PShvbj1xaS5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UscXIpKT9vbjpudWxsfWZ1bmN0aW9uIHYxKFNlLCRlKXtpZighU2UuaXNWYWxp''@;'; put 'put ''ZCgpKXJldHVybiBTZTtpZigic3RyaW5nIj09dHlwZW9mICRlKWlmKC9eXGQrJC8udGVzdCgkZSkpJGU9VHQoJGUpO2Vsc2UgaWYoIXooJGU9U2UubG9jYWxlRGF0YSgpLm1vbnRoc1BhcnNlKCRlKSkpcmV0dXJuIFNlO3ZhciBwdD0kZSxEdD1TZS5kYXRlKCk7cmV0dXJuIER0PUR0PDI5P0R0''@;'; put 'put ''Ok1hdGgubWluKER0LFBhKFNlLnllYXIoKSxwdCkpLFNlLl9pc1VUQz9TZS5fZC5zZXRVVENNb250aChwdCxEdCk6U2UuX2Quc2V0TW9udGgocHQsRHQpLFNlfWZ1bmN0aW9uIFByKFNlKXtyZXR1cm4gbnVsbCE9U2U/KHYxKHRoaXMsU2UpLF8udXBkYXRlT2Zmc2V0KHRoaXMsITApLHRoaXMp''@;'; put 'put ''OmVpKHRoaXMsIk1vbnRoIil9ZnVuY3Rpb24gYWkoKXtmdW5jdGlvbiBTZShPbyxucyl7cmV0dXJuIG5zLmxlbmd0aC1Pby5sZW5ndGh9dmFyIG9uLCRuLHFyLGxhLCRlPVtdLHB0PVtdLER0PVtdO2Zvcihvbj0wO29uPDEyO29uKyspJG49WihbMmUzLG9uXSkscXI9UXIodGhpcy5tb250aHNT''@;'; put 'put ''aG9ydCgkbiwiIikpLGxhPVFyKHRoaXMubW9udGhzKCRuLCIiKSksJGUucHVzaChxcikscHQucHVzaChsYSksRHQucHVzaChsYSksRHQucHVzaChxcik7JGUuc29ydChTZSkscHQuc29ydChTZSksRHQuc29ydChTZSksdGhpcy5fbW9udGhzUmVnZXg9bmV3IFJlZ0V4cCgiXigiK0R0LmpvaW4o''@;'; put 'put ''InwiKSsiKSIsImkiKSx0aGlzLl9tb250aHNTaG9ydFJlZ2V4PXRoaXMuX21vbnRoc1JlZ2V4LHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIitwdC5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrJGUu''@;'; put 'put ''am9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIFV0KFNlLCRlLHB0LER0LG9uLCRuLHFyKXt2YXIgbGE7cmV0dXJuIFNlPDEwMCYmU2U+PTA/KGxhPW5ldyBEYXRlKFNlKzQwMCwkZSxwdCxEdCxvbiwkbixxciksaXNGaW5pdGUobGEuZ2V0RnVsbFllYXIoKSkmJmxhLnNldEZ1bGxZZWFyKFNl''@;'; put 'put ''KSk6bGE9bmV3IERhdGUoU2UsJGUscHQsRHQsb24sJG4scXIpLGxhfWZ1bmN0aW9uIHRpKFNlKXt2YXIgJGUscHQ7cmV0dXJuIFNlPDEwMCYmU2U+PTA/KChwdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKVswXT1TZSs0MDAsJGU9bmV3IERhdGUoRGF0ZS5VVEMuYXBw''@;'; put 'put ''bHkobnVsbCxwdCkpLGlzRmluaXRlKCRlLmdldFVUQ0Z1bGxZZWFyKCkpJiYkZS5zZXRVVENGdWxsWWVhcihTZSkpOiRlPW5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsYXJndW1lbnRzKSksJGV9ZnVuY3Rpb24gdWMoU2UsJGUscHQpe3ZhciBEdD03KyRlLXB0O3JldHVybi0oNyt0aShT''@;'; put 'put ''ZSwwLER0KS5nZXRVVENEYXkoKS0kZSklNytEdC0xfWZ1bmN0aW9uIFpvKFNlLCRlLHB0LER0LG9uKXt2YXIgT28sbnMsbGE9MSs3KigkZS0xKSsoNytwdC1EdCklNyt1YyhTZSxEdCxvbik7cmV0dXJuIGxhPD0wP25zPXZyKE9vPVNlLTEpK2xhOmxhPnZyKFNlKT8oT289U2UrMSxucz1sYS12''@;'; put 'put ''cihTZSkpOihPbz1TZSxucz1sYSkse3llYXI6T28sZGF5T2ZZZWFyOm5zfX1mdW5jdGlvbiBkYyhTZSwkZSxwdCl7dmFyICRuLHFyLER0PXVjKFNlLnllYXIoKSwkZSxwdCksb249TWF0aC5mbG9vcigoU2UuZGF5T2ZZZWFyKCktRHQtMSkvNykrMTtyZXR1cm4gb248MT8kbj1vbitqcihxcj1T''@;'; put 'put ''ZS55ZWFyKCktMSwkZSxwdCk6b24+anIoU2UueWVhcigpLCRlLHB0KT8oJG49b24tanIoU2UueWVhcigpLCRlLHB0KSxxcj1TZS55ZWFyKCkrMSk6KHFyPVNlLnllYXIoKSwkbj1vbikse3dlZWs6JG4seWVhcjpxcn19ZnVuY3Rpb24ganIoU2UsJGUscHQpe3ZhciBEdD11YyhTZSwkZSxwdCks''@;'; put 'put ''b249dWMoU2UrMSwkZSxwdCk7cmV0dXJuKHZyKFNlKS1EdCtvbikvN31zZSgidyIsWyJ3dyIsMl0sIndvIiwid2VlayIpLHNlKCJXIixbIldXIiwyXSwiV28iLCJpc29XZWVrIiksRm4oInciLHR0LFJyKSxGbigid3ciLHR0LFN0KSxGbigiVyIsdHQsUnIpLEZuKCJXVyIsdHQsU3QpLE10KFsi''@;'; put 'put ''dyIsInd3IiwiVyIsIldXIl0sZnVuY3Rpb24oU2UsJGUscHQsRHQpeyRlW0R0LnN1YnN0cigwLDEpXT1UdChTZSl9KTtmdW5jdGlvbiBPMChTZSwkZSl7cmV0dXJuIFNlLnNsaWNlKCRlLDcpLmNvbmNhdChTZS5zbGljZSgwLCRlKSl9c2UoImQiLDAsImRvIiwiZGF5Iiksc2UoImRkIiwwLDAs''@;'; put 'put ''ZnVuY3Rpb24oU2Upe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c01pbih0aGlzLFNlKX0pLHNlKCJkZGQiLDAsMCxmdW5jdGlvbihTZSl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzU2hvcnQodGhpcyxTZSl9KSxzZSgiZGRkZCIsMCwwLGZ1bmN0aW9uKFNlKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXModGhpcyxTZSl9KSxzZSgiZSIsMCwwLCJ3ZWVrZGF5Iiksc2UoIkUiLDAsMCwiaXNvV2Vla2RheSIpLEZuKCJkIix0dCksRm4oImUiLHR0KSxGbigiRSIsdHQpLEZuKCJkZCIsZnVuY3Rpb24oU2UsJGUpe3JldHVybiAkZS53ZWVrZGF5''@;'; put 'put ''c01pblJlZ2V4KFNlKX0pLEZuKCJkZGQiLGZ1bmN0aW9uKFNlLCRlKXtyZXR1cm4gJGUud2Vla2RheXNTaG9ydFJlZ2V4KFNlKX0pLEZuKCJkZGRkIixmdW5jdGlvbihTZSwkZSl7cmV0dXJuICRlLndlZWtkYXlzUmVnZXgoU2UpfSksTXQoWyJkZCIsImRkZCIsImRkZGQiXSxmdW5jdGlvbihT''@;'; put 'put ''ZSwkZSxwdCxEdCl7dmFyIG9uPXB0Ll9sb2NhbGUud2Vla2RheXNQYXJzZShTZSxEdCxwdC5fc3RyaWN0KTtudWxsIT1vbj8kZS5kPW9uOlcocHQpLmludmFsaWRXZWVrZGF5PVNlfSksTXQoWyJkIiwiZSIsIkUiXSxmdW5jdGlvbihTZSwkZSxwdCxEdCl7JGVbRHRdPVR0KFNlKX0pO3ZhciAk''@;'; put 'put ''bD0iU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksaGM9IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx2Zz0iU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksSGg9aHQsdXM9aHQs''@;'; put 'put ''cWE9aHQ7ZnVuY3Rpb24gdGQoU2UsJGUscHQpe3ZhciBEdCxvbiwkbixxcj1TZS50b0xvY2FsZUxvd2VyQ2FzZSgpO2lmKCF0aGlzLl93ZWVrZGF5c1BhcnNlKWZvcih0aGlzLl93ZWVrZGF5c1BhcnNlPVtdLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZT1bXSx0aGlzLl9taW5XZWVrZGF5c1Bh''@;'; put 'put ''cnNlPVtdLER0PTA7RHQ8NzsrK0R0KSRuPVooWzJlMywxXSkuZGF5KER0KSx0aGlzLl9taW5XZWVrZGF5c1BhcnNlW0R0XT10aGlzLndlZWtkYXlzTWluKCRuLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtEdF09dGhpcy53ZWVrZGF5c1Nob3J0KCRu''@;'; put 'put ''LCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpLHRoaXMuX3dlZWtkYXlzUGFyc2VbRHRdPXRoaXMud2Vla2RheXMoJG4sIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCk7cmV0dXJuIHB0PyJkZGRkIj09PSRlPy0xIT09KG9uPXFpLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSxxcikpP29uOm51bGw6ImRk''@;'; put 'put ''ZCI9PT0kZT8tMSE9PShvbj1xaS5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxxcikpP29uOm51bGw6LTEhPT0ob249cWkuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLHFyKSk/b246bnVsbDoiZGRkZCI9PT0kZT8tMSE9PShvbj1xaS5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2Us''@;'; put 'put ''cXIpKXx8LTEhPT0ob249cWkuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UscXIpKXx8LTEhPT0ob249cWkuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLHFyKSk/b246bnVsbDoiZGRkIj09PSRlPy0xIT09KG9uPXFpLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLHFyKSl8''@;'; put 'put ''fC0xIT09KG9uPXFpLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSxxcikpfHwtMSE9PShvbj1xaS5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UscXIpKT9vbjpudWxsOi0xIT09KG9uPXFpLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxxcikpfHwtMSE9PShvbj1xaS5jYWxsKHRoaXMu''@;'; put 'put ''X3dlZWtkYXlzUGFyc2UscXIpKXx8LTEhPT0ob249cWkuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UscXIpKT9vbjpudWxsfWZ1bmN0aW9uIGdyKCl7ZnVuY3Rpb24gU2UoeTAsRmMpe3JldHVybiBGYy5sZW5ndGgteTAubGVuZ3RofXZhciAkbixxcixsYSxPbyxucywkZT1bXSxwdD1b''@;'; put 'put ''XSxEdD1bXSxvbj1bXTtmb3IoJG49MDskbjw3OyRuKyspcXI9WihbMmUzLDFdKS5kYXkoJG4pLGxhPVFyKHRoaXMud2Vla2RheXNNaW4ocXIsIiIpKSxPbz1Rcih0aGlzLndlZWtkYXlzU2hvcnQocXIsIiIpKSxucz1Rcih0aGlzLndlZWtkYXlzKHFyLCIiKSksJGUucHVzaChsYSkscHQucHVz''@;'; put 'put ''aChPbyksRHQucHVzaChucyksb24ucHVzaChsYSksb24ucHVzaChPbyksb24ucHVzaChucyk7JGUuc29ydChTZSkscHQuc29ydChTZSksRHQuc29ydChTZSksb24uc29ydChTZSksdGhpcy5fd2Vla2RheXNSZWdleD1uZXcgUmVnRXhwKCJeKCIrb24uam9pbigifCIpKyIpIiwiaSIpLHRoaXMu''@;'; put 'put ''X3dlZWtkYXlzU2hvcnRSZWdleD10aGlzLl93ZWVrZGF5c1JlZ2V4LHRoaXMuX3dlZWtkYXlzTWluUmVnZXg9dGhpcy5fd2Vla2RheXNSZWdleCx0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIitEdC5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fd2Vla2RheXNTaG9y''@;'; put 'put ''dFN0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIitwdC5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrJGUuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIFNpKCl7cmV0dXJuIHRoaXMuaG91cnMoKSUxMnx8MTJ9ZnVuY3Rp''@;'; put 'put ''b24gemkoU2UsJGUpe3NlKFNlLDAsMCxmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tZXJpZGllbSh0aGlzLmhvdXJzKCksdGhpcy5taW51dGVzKCksJGUpfSl9ZnVuY3Rpb24gYW8oU2UsJGUpe3JldHVybiAkZS5fbWVyaWRpZW1QYXJzZX1zZSgiSCIsWyJISCIsMl0sMCwi''@;'; put 'put ''aG91ciIpLHNlKCJoIixbImhoIiwyXSwwLFNpKSxzZSgiayIsWyJrayIsMl0sMCxmdW5jdGlvbiB0YSgpe3JldHVybiB0aGlzLmhvdXJzKCl8fDI0fSksc2UoImhtbSIsMCwwLGZ1bmN0aW9uKCl7cmV0dXJuIiIrU2kuYXBwbHkodGhpcykrRSh0aGlzLm1pbnV0ZXMoKSwyKX0pLHNlKCJobW1z''@;'; put 'put ''cyIsMCwwLGZ1bmN0aW9uKCl7cmV0dXJuIiIrU2kuYXBwbHkodGhpcykrRSh0aGlzLm1pbnV0ZXMoKSwyKStFKHRoaXMuc2Vjb25kcygpLDIpfSksc2UoIkhtbSIsMCwwLGZ1bmN0aW9uKCl7cmV0dXJuIiIrdGhpcy5ob3VycygpK0UodGhpcy5taW51dGVzKCksMil9KSxzZSgiSG1tc3MiLDAs''@;'; put 'put ''MCxmdW5jdGlvbigpe3JldHVybiIiK3RoaXMuaG91cnMoKStFKHRoaXMubWludXRlcygpLDIpK0UodGhpcy5zZWNvbmRzKCksMil9KSx6aSgiYSIsITApLHppKCJBIiwhMSksRm4oImEiLGFvKSxGbigiQSIsYW8pLEZuKCJIIix0dCxCdCksRm4oImgiLHR0LFJyKSxGbigiayIsdHQsUnIpLEZu''@;'; put 'put ''KCJISCIsdHQsU3QpLEZuKCJoaCIsdHQsU3QpLEZuKCJrayIsdHQsU3QpLEZuKCJobW0iLEllKSxGbigiaG1tc3MiLGF0KSxGbigiSG1tIixJZSksRm4oIkhtbXNzIixhdCksZnQoWyJIIiwiSEgiXSxtbiksZnQoWyJrIiwia2siXSxmdW5jdGlvbihTZSwkZSxwdCl7dmFyIER0PVR0KFNlKTsk''@;'; put 'put ''ZVttbl09MjQ9PT1EdD8wOkR0fSksZnQoWyJhIiwiQSJdLGZ1bmN0aW9uKFNlLCRlLHB0KXtwdC5faXNQbT1wdC5fbG9jYWxlLmlzUE0oU2UpLHB0Ll9tZXJpZGllbT1TZX0pLGZ0KFsiaCIsImhoIl0sZnVuY3Rpb24oU2UsJGUscHQpeyRlW21uXT1UdChTZSksVyhwdCkuYmlnSG91cj0hMH0p''@;'; put 'put ''LGZ0KCJobW0iLGZ1bmN0aW9uKFNlLCRlLHB0KXt2YXIgRHQ9U2UubGVuZ3RoLTI7JGVbbW5dPVR0KFNlLnN1YnN0cigwLER0KSksJGVbcGldPVR0KFNlLnN1YnN0cihEdCkpLFcocHQpLmJpZ0hvdXI9ITB9KSxmdCgiaG1tc3MiLGZ1bmN0aW9uKFNlLCRlLHB0KXt2YXIgRHQ9U2UubGVuZ3Ro''@;'; put 'put ''LTQsb249U2UubGVuZ3RoLTI7JGVbbW5dPVR0KFNlLnN1YnN0cigwLER0KSksJGVbcGldPVR0KFNlLnN1YnN0cihEdCwyKSksJGVbZm5dPVR0KFNlLnN1YnN0cihvbikpLFcocHQpLmJpZ0hvdXI9ITB9KSxmdCgiSG1tIixmdW5jdGlvbihTZSwkZSxwdCl7dmFyIER0PVNlLmxlbmd0aC0yOyRl''@;'; put 'put ''W21uXT1UdChTZS5zdWJzdHIoMCxEdCkpLCRlW3BpXT1UdChTZS5zdWJzdHIoRHQpKX0pLGZ0KCJIbW1zcyIsZnVuY3Rpb24oU2UsJGUscHQpe3ZhciBEdD1TZS5sZW5ndGgtNCxvbj1TZS5sZW5ndGgtMjskZVttbl09VHQoU2Uuc3Vic3RyKDAsRHQpKSwkZVtwaV09VHQoU2Uuc3Vic3RyKER0''@;'; put 'put ''LDIpKSwkZVtmbl09VHQoU2Uuc3Vic3RyKG9uKSl9KTt2YXIgVGw9VmkoIkhvdXJzIiwhMCk7dmFyIEtsLGZyPXtjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3Rl''@;'; put 'put ''cmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LGxvbmdEYXRlRm9ybWF0OntMVFM6Img6bW06c3MgQSIsTFQ6Img6bW0gQSIsTDoiTU0vREQvWVlZWSIsTEw6Ik1NTU0gRCwgWVlZWSIsTExMOiJNTU1NIEQsIFlZWVkgaDptbSBBIixMTExM''@;'; put 'put ''OiJkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBIn0saW52YWxpZERhdGU6IkludmFsaWQgZGF0ZSIsb3JkaW5hbDoiJWQiLGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0vLHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixz''@;'; put 'put ''czoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsdzoiYSB3ZWVrIix3dzoiJWQgd2Vla3MiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHll''@;'; put 'put ''YXJzIn0sbW9udGhzOnVyLG1vbnRoc1Nob3J0OmJhLHdlZWs6e2RvdzowLGRveTo2fSx3ZWVrZGF5czokbCx3ZWVrZGF5c01pbjp2Zyx3ZWVrZGF5c1Nob3J0OmhjLG1lcmlkaWVtUGFyc2U6L1thcF1cLj9tP1wuPy9pfSxKbz17fSx5aT17fTtmdW5jdGlvbiBfcyhTZSwkZSl7dmFyIHB0LER0''@;'; put 'put ''PU1hdGgubWluKFNlLmxlbmd0aCwkZS5sZW5ndGgpO2ZvcihwdD0wO3B0PER0O3B0Kz0xKWlmKFNlW3B0XSE9PSRlW3B0XSlyZXR1cm4gcHQ7cmV0dXJuIER0fWZ1bmN0aW9uIEh0KFNlKXtyZXR1cm4gU2UmJlNlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgiXyIsIi0iKX1mdW5jdGlvbiBWdChT''@;'; put 'put ''ZSl7dmFyICRlPW51bGw7aWYodm9pZCAwPT09Sm9bU2VdJiZjZSYmY2UuZXhwb3J0cyYmZnVuY3Rpb24gcG4oU2Upe3JldHVybiEoIVNlfHwhU2UubWF0Y2goIl5bXi9cXFxcXSokIikpfShTZSkpdHJ5eyRlPUtsLl9hYmJyLGIoMzUzNTgpKCIuLyIrU2UpLERuKCRlKX1jYXRjaHtKb1tTZV09''@;'; put 'put ''bnVsbH1yZXR1cm4gSm9bU2VdfWZ1bmN0aW9uIERuKFNlLCRlKXt2YXIgcHQ7cmV0dXJuIFNlJiYoKHB0PVIoJGUpP2puKFNlKTptcihTZSwkZSkpP0tsPXB0OnR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oIkxvY2FsZSAiK1NlKyIgbm90IGZvdW5kLiBE''@;'; put 'put ''aWQgeW91IGZvcmdldCB0byBsb2FkIGl0PyIpKSxLbC5fYWJicn1mdW5jdGlvbiBtcihTZSwkZSl7aWYobnVsbCE9PSRlKXt2YXIgcHQsRHQ9ZnI7aWYoJGUuYWJicj1TZSxudWxsIT1Kb1tTZV0pQigiZGVmaW5lTG9jYWxlT3ZlcnJpZGUiLCJ1c2UgbW9tZW50LnVwZGF0ZUxvY2FsZShsb2Nh''@;'; put 'put ''bGVOYW1lLCBjb25maWcpIHRvIGNoYW5nZSBhbiBleGlzdGluZyBsb2NhbGUuIG1vbWVudC5kZWZpbmVMb2NhbGUobG9jYWxlTmFtZSwgY29uZmlnKSBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGUgU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMv''@;'; put 'put ''d2FybmluZ3MvZGVmaW5lLWxvY2FsZS8gZm9yIG1vcmUgaW5mby4iKSxEdD1Kb1tTZV0uX2NvbmZpZztlbHNlIGlmKG51bGwhPSRlLnBhcmVudExvY2FsZSlpZihudWxsIT1Kb1skZS5wYXJlbnRMb2NhbGVdKUR0PUpvWyRlLnBhcmVudExvY2FsZV0uX2NvbmZpZztlbHNle2lmKG51bGw9PShw''@;'; put 'put ''dD1WdCgkZS5wYXJlbnRMb2NhbGUpKSlyZXR1cm4geWlbJGUucGFyZW50TG9jYWxlXXx8KHlpWyRlLnBhcmVudExvY2FsZV09W10pLHlpWyRlLnBhcmVudExvY2FsZV0ucHVzaCh7bmFtZTpTZSxjb25maWc6JGV9KSxudWxsO0R0PXB0Ll9jb25maWd9cmV0dXJuIEpvW1NlXT1uZXcgQyh4KER0''@;'; put 'put ''LCRlKSkseWlbU2VdJiZ5aVtTZV0uZm9yRWFjaChmdW5jdGlvbihvbil7bXIob24ubmFtZSxvbi5jb25maWcpfSksRG4oU2UpLEpvW1NlXX1yZXR1cm4gZGVsZXRlIEpvW1NlXSxudWxsfWZ1bmN0aW9uIGpuKFNlKXt2YXIgJGU7aWYoU2UmJlNlLl9sb2NhbGUmJlNlLl9sb2NhbGUuX2FiYnIm''@;'; put 'put ''JihTZT1TZS5fbG9jYWxlLl9hYmJyKSwhU2UpcmV0dXJuIEtsO2lmKCFWKFNlKSl7aWYoJGU9VnQoU2UpKXJldHVybiAkZTtTZT1bU2VdfXJldHVybiBmdW5jdGlvbiBqdChTZSl7Zm9yKHZhciBwdCxEdCxvbiwkbiwkZT0wOyRlPFNlLmxlbmd0aDspe2ZvcihwdD0oJG49SHQoU2VbJGVdKS5z''@;'; put 'put ''cGxpdCgiLSIpKS5sZW5ndGgsRHQ9KER0PUh0KFNlWyRlKzFdKSk/RHQuc3BsaXQoIi0iKTpudWxsO3B0PjA7KXtpZihvbj1WdCgkbi5zbGljZSgwLHB0KS5qb2luKCItIikpKXJldHVybiBvbjtpZihEdCYmRHQubGVuZ3RoPj1wdCYmX3MoJG4sRHQpPj1wdC0xKWJyZWFrO3B0LS19JGUrK31y''@;'; put 'put ''ZXR1cm4gS2x9KFNlKX1mdW5jdGlvbiBXaShTZSl7dmFyICRlLHB0PVNlLl9hO3JldHVybiBwdCYmLTI9PT1XKFNlKS5vdmVyZmxvdyYmKCRlPXB0W2RpXTwwfHxwdFtkaV0+MTE/ZGk6cHRbZG5dPDF8fHB0W2RuXT5QYShwdFtXdF0scHRbZGldKT9kbjpwdFttbl08MHx8cHRbbW5dPjI0fHwy''@;'; put 'put ''ND09PXB0W21uXSYmKDAhPT1wdFtwaV18fDAhPT1wdFtmbl18fDAhPT1wdFt0bl0pP21uOnB0W3BpXTwwfHxwdFtwaV0+NTk/cGk6cHRbZm5dPDB8fHB0W2ZuXT41OT9mbjpwdFt0bl08MHx8cHRbdG5dPjk5OT90bjotMSxXKFNlKS5fb3ZlcmZsb3dEYXlPZlllYXImJigkZTxXdHx8JGU+ZG4p''@;'; put 'put ''JiYoJGU9ZG4pLFcoU2UpLl9vdmVyZmxvd1dlZWtzJiYtMT09PSRlJiYoJGU9Y2EpLFcoU2UpLl9vdmVyZmxvd1dlZWtkYXkmJi0xPT09JGUmJigkZT1faSksVyhTZSkub3ZlcmZsb3c9JGUpLFNlfXZhciBZaT0vXlxzKigoPzpbKy1dXGR7Nn18XGR7NH0pLSg/OlxkXGQtXGRcZHxXXGRcZC1c''@;'; put 'put ''ZHxXXGRcZHxcZFxkXGR8XGRcZCkpKD86KFR8ICkoXGRcZCg/OjpcZFxkKD86OlxkXGQoPzpbLixdXGQrKT8pPyk/KShbKy1dXGRcZCg/Ojo/XGRcZCk/fFxzKlopPyk/JC8sJGE9L15ccyooKD86WystXVxkezZ9fFxkezR9KSg/OlxkXGRcZFxkfFdcZFxkXGR8V1xkXGR8XGRcZFxkfFxkXGR8''@;'; put 'put ''KSkoPzooVHwgKShcZFxkKD86XGRcZCg/OlxkXGQoPzpbLixdXGQrKT8pPyk/KShbKy1dXGRcZCg/Ojo/XGRcZCk/fFxzKlopPyk/JC8sc2w9L1p8WystXVxkXGQoPzo6P1xkXGQpPy8sbGw9W1siWVlZWVlZLU1NLUREIiwvWystXVxkezZ9LVxkXGQtXGRcZC9dLFsiWVlZWS1NTS1ERCIsL1xk''@;'; put 'put ''ezR9LVxkXGQtXGRcZC9dLFsiR0dHRy1bV11XVy1FIiwvXGR7NH0tV1xkXGQtXGQvXSxbIkdHR0ctW1ddV1ciLC9cZHs0fS1XXGRcZC8sITFdLFsiWVlZWS1EREQiLC9cZHs0fS1cZHszfS9dLFsiWVlZWS1NTSIsL1xkezR9LVxkXGQvLCExXSxbIllZWVlZWU1NREQiLC9bKy1dXGR7MTB9L10s''@;'; put 'put ''WyJZWVlZTU1ERCIsL1xkezh9L10sWyJHR0dHW1ddV1dFIiwvXGR7NH1XXGR7M30vXSxbIkdHR0dbV11XVyIsL1xkezR9V1xkezJ9LywhMV0sWyJZWVlZREREIiwvXGR7N30vXSxbIllZWVlNTSIsL1xkezZ9LywhMV0sWyJZWVlZIiwvXGR7NH0vLCExXV0sQmk9W1siSEg6bW06c3MuU1NTUyIs''@;'; put 'put ''L1xkXGQ6XGRcZDpcZFxkXC5cZCsvXSxbIkhIOm1tOnNzLFNTU1MiLC9cZFxkOlxkXGQ6XGRcZCxcZCsvXSxbIkhIOm1tOnNzIiwvXGRcZDpcZFxkOlxkXGQvXSxbIkhIOm1tIiwvXGRcZDpcZFxkL10sWyJISG1tc3MuU1NTUyIsL1xkXGRcZFxkXGRcZFwuXGQrL10sWyJISG1tc3MsU1NTUyIs''@;'; put 'put ''L1xkXGRcZFxkXGRcZCxcZCsvXSxbIkhIbW1zcyIsL1xkXGRcZFxkXGRcZC9dLFsiSEhtbSIsL1xkXGRcZFxkL10sWyJISCIsL1xkXGQvXV0sT2E9L15cLz9EYXRlXCgoLT9cZCspL2ksV2E9L14oPzooTW9ufFR1ZXxXZWR8VGh1fEZyaXxTYXR8U3VuKSw/XHMpPyhcZHsxLDJ9KVxzKEphbnxG''@;'; put 'put ''ZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKVxzKFxkezIsNH0pXHMoXGRcZCk6KFxkXGQpKD86OihcZFxkKSk/XHMoPzooVVR8R01UfFtFQ01QXVtTRF1UKXwoW1p6XSl8KFsrLV1cZHs0fSkpJC8sWGw9e1VUOjAsR01UOjAsRURUOi0yNDAsRVNUOi0zMDAsQ0RU''@;'; put 'put ''Oi0zMDAsQ1NUOi0zNjAsTURUOi0zNjAsTVNUOi00MjAsUERUOi00MjAsUFNUOi00ODB9O2Z1bmN0aW9uIEZvKFNlKXt2YXIgJGUscHQsJG4scXIsbGEsT28sRHQ9U2UuX2ksb249WWkuZXhlYyhEdCl8fCRhLmV4ZWMoRHQpLG5zPWxsLmxlbmd0aCx5MD1CaS5sZW5ndGg7aWYob24pe2ZvcihX''@;'; put 'put ''KFNlKS5pc289ITAsJGU9MCxwdD1uczskZTxwdDskZSsrKWlmKGxsWyRlXVsxXS5leGVjKG9uWzFdKSl7cXI9bGxbJGVdWzBdLCRuPSExIT09bGxbJGVdWzJdO2JyZWFrfWlmKG51bGw9PXFyKXJldHVybiB2b2lkKFNlLl9pc1ZhbGlkPSExKTtpZihvblszXSl7Zm9yKCRlPTAscHQ9eTA7JGU8''@;'; put 'put ''cHQ7JGUrKylpZihCaVskZV1bMV0uZXhlYyhvblszXSkpe2xhPShvblsyXXx8IiAiKStCaVskZV1bMF07YnJlYWt9aWYobnVsbD09bGEpcmV0dXJuIHZvaWQoU2UuX2lzVmFsaWQ9ITEpfWlmKCEkbiYmbnVsbCE9bGEpcmV0dXJuIHZvaWQoU2UuX2lzVmFsaWQ9ITEpO2lmKG9uWzRdKXtpZigh''@;'; put 'put ''c2wuZXhlYyhvbls0XSkpcmV0dXJuIHZvaWQoU2UuX2lzVmFsaWQ9ITEpO09vPSJaIn1TZS5fZj1xcisobGF8fCIiKSsoT298fCIiKSxfMShTZSl9ZWxzZSBTZS5faXNWYWxpZD0hMX1mdW5jdGlvbiBmYyhTZSl7dmFyICRlPXBhcnNlSW50KFNlLDEwKTtyZXR1cm4gJGU8PTQ5PzJlMyskZTok''@;'; put 'put ''ZTw9OTk5PzE5MDArJGU6JGV9ZnVuY3Rpb24gVm8oU2Upe3ZhciBwdCwkZT1XYS5leGVjKGZ1bmN0aW9uIGUxKFNlKXtyZXR1cm4gU2UucmVwbGFjZSgvXChbXigpXSpcKXxbXG5cdF0vZywiICIpLnJlcGxhY2UoLyhcc1xzKykvZywiICIpLnJlcGxhY2UoL15cc1xzKi8sIiIpLnJlcGxhY2Uo''@;'; put 'put ''L1xzXHMqJC8sIiIpfShTZS5faSkpO2lmKCRlKXtpZihwdD1mdW5jdGlvbiBDYyhTZSwkZSxwdCxEdCxvbiwkbil7dmFyIHFyPVtmYyhTZSksYmEuaW5kZXhPZigkZSkscGFyc2VJbnQocHQsMTApLHBhcnNlSW50KER0LDEwKSxwYXJzZUludChvbiwxMCldO3JldHVybiAkbiYmcXIucHVzaChw''@;'; put 'put ''YXJzZUludCgkbiwxMCkpLHFyfSgkZVs0XSwkZVszXSwkZVsyXSwkZVs1XSwkZVs2XSwkZVs3XSksIWZ1bmN0aW9uIEFvKFNlLCRlLHB0KXtyZXR1cm4hU2V8fGhjLmluZGV4T2YoU2UpPT09bmV3IERhdGUoJGVbMF0sJGVbMV0sJGVbMl0pLmdldERheSgpfHwoVyhwdCkud2Vla2RheU1pc21h''@;'; put 'put ''dGNoPSEwLHB0Ll9pc1ZhbGlkPSExLCExKX0oJGVbMV0scHQsU2UpKXJldHVybjtTZS5fYT1wdCxTZS5fdHptPWZ1bmN0aW9uIEdpKFNlLCRlLHB0KXtpZihTZSlyZXR1cm4gWGxbU2VdO2lmKCRlKXJldHVybiAwO3ZhciBEdD1wYXJzZUludChwdCwxMCksb249RHQlMTAwO3JldHVybihEdC1v''@;'; put 'put ''bikvMTAwKjYwK29ufSgkZVs4XSwkZVs5XSwkZVsxMF0pLFNlLl9kPXRpLmFwcGx5KG51bGwsU2UuX2EpLFNlLl9kLnNldFVUQ01pbnV0ZXMoU2UuX2QuZ2V0VVRDTWludXRlcygpLVNlLl90em0pLFcoU2UpLnJmYzI4MjI9ITB9ZWxzZSBTZS5faXNWYWxpZD0hMX1mdW5jdGlvbiB0byhTZSwk''@;'; put 'put ''ZSxwdCl7cmV0dXJuIFNlPz8kZT8/cHR9ZnVuY3Rpb24gTG8oU2Upe3ZhciAkZSxwdCxvbiwkbixxcixEdD1bXTtpZighU2UuX2Qpe2Zvcihvbj1mdW5jdGlvbiBNbyhTZSl7dmFyICRlPW5ldyBEYXRlKF8ubm93KCkpO3JldHVybiBTZS5fdXNlVVRDP1skZS5nZXRVVENGdWxsWWVhcigpLCRl''@;'; put 'put ''LmdldFVUQ01vbnRoKCksJGUuZ2V0VVRDRGF0ZSgpXTpbJGUuZ2V0RnVsbFllYXIoKSwkZS5nZXRNb250aCgpLCRlLmdldERhdGUoKV19KFNlKSxTZS5fdyYmbnVsbD09U2UuX2FbZG5dJiZudWxsPT1TZS5fYVtkaV0mJmZ1bmN0aW9uIGIxKFNlKXt2YXIgJGUscHQsRHQsb24sJG4scXIsbGEs''@;'; put 'put ''T28sbnM7bnVsbCE9KCRlPVNlLl93KS5HR3x8bnVsbCE9JGUuV3x8bnVsbCE9JGUuRT8oJG49MSxxcj00LHB0PXRvKCRlLkdHLFNlLl9hW1d0XSxkYyhrbygpLDEsNCkueWVhciksRHQ9dG8oJGUuVywxKSwoKG9uPXRvKCRlLkUsMSkpPDF8fG9uPjcpJiYoT289ITApKTooJG49U2UuX2xvY2Fs''@;'; put 'put ''ZS5fd2Vlay5kb3cscXI9U2UuX2xvY2FsZS5fd2Vlay5kb3ksbnM9ZGMoa28oKSwkbixxcikscHQ9dG8oJGUuZ2csU2UuX2FbV3RdLG5zLnllYXIpLER0PXRvKCRlLncsbnMud2VlayksbnVsbCE9JGUuZD8oKG9uPSRlLmQpPDB8fG9uPjYpJiYoT289ITApOm51bGwhPSRlLmU/KG9uPSRlLmUr''@;'; put 'put ''JG4sKCRlLmU8MHx8JGUuZT42KSYmKE9vPSEwKSk6b249JG4pLER0PDF8fER0PmpyKHB0LCRuLHFyKT9XKFNlKS5fb3ZlcmZsb3dXZWVrcz0hMDpudWxsIT1Pbz9XKFNlKS5fb3ZlcmZsb3dXZWVrZGF5PSEwOihsYT1abyhwdCxEdCxvbiwkbixxciksU2UuX2FbV3RdPWxhLnllYXIsU2UuX2Rh''@;'; put 'put ''eU9mWWVhcj1sYS5kYXlPZlllYXIpfShTZSksbnVsbCE9U2UuX2RheU9mWWVhciYmKHFyPXRvKFNlLl9hW1d0XSxvbltXdF0pLChTZS5fZGF5T2ZZZWFyPnZyKHFyKXx8MD09PVNlLl9kYXlPZlllYXIpJiYoVyhTZSkuX292ZXJmbG93RGF5T2ZZZWFyPSEwKSxwdD10aShxciwwLFNlLl9kYXlP''@;'; put 'put ''ZlllYXIpLFNlLl9hW2RpXT1wdC5nZXRVVENNb250aCgpLFNlLl9hW2RuXT1wdC5nZXRVVENEYXRlKCkpLCRlPTA7JGU8MyYmbnVsbD09U2UuX2FbJGVdOysrJGUpU2UuX2FbJGVdPUR0WyRlXT1vblskZV07Zm9yKDskZTw3OyRlKyspU2UuX2FbJGVdPUR0WyRlXT1udWxsPT1TZS5fYVskZV0/''@;'; put 'put ''Mj09PSRlPzE6MDpTZS5fYVskZV07MjQ9PT1TZS5fYVttbl0mJjA9PT1TZS5fYVtwaV0mJjA9PT1TZS5fYVtmbl0mJjA9PT1TZS5fYVt0bl0mJihTZS5fbmV4dERheT0hMCxTZS5fYVttbl09MCksU2UuX2Q9KFNlLl91c2VVVEM/dGk6VXQpLmFwcGx5KG51bGwsRHQpLCRuPVNlLl91c2VVVEM/''@;'; put 'put ''U2UuX2QuZ2V0VVRDRGF5KCk6U2UuX2QuZ2V0RGF5KCksbnVsbCE9U2UuX3R6bSYmU2UuX2Quc2V0VVRDTWludXRlcyhTZS5fZC5nZXRVVENNaW51dGVzKCktU2UuX3R6bSksU2UuX25leHREYXkmJihTZS5fYVttbl09MjQpLFNlLl93JiZ0eXBlb2YgU2UuX3cuZDwidSImJlNlLl93LmQhPT0k''@;'; put 'put ''biYmKFcoU2UpLndlZWtkYXlNaXNtYXRjaD0hMCl9fWZ1bmN0aW9uIF8xKFNlKXtpZihTZS5fZiE9PV8uSVNPXzg2MDEpaWYoU2UuX2YhPT1fLlJGQ18yODIyKXtTZS5fYT1bXSxXKFNlKS5lbXB0eT0hMDt2YXIgcHQsRHQsb24sJG4scXIsbnMseTAsJGU9IiIrU2UuX2ksbGE9JGUubGVuZ3Ro''@;'; put 'put ''LE9vPTA7Zm9yKHkwPShvbj1pdChTZS5fZixTZS5fbG9jYWxlKS5tYXRjaChtKXx8W10pLmxlbmd0aCxwdD0wO3B0PHkwO3B0KyspKER0PSgkZS5tYXRjaChzdCgkbj1vbltwdF0sU2UpKXx8W10pWzBdKSYmKChxcj0kZS5zdWJzdHIoMCwkZS5pbmRleE9mKER0KSkpLmxlbmd0aD4wJiZXKFNl''@;'; put 'put ''KS51bnVzZWRJbnB1dC5wdXNoKHFyKSwkZT0kZS5zbGljZSgkZS5pbmRleE9mKER0KStEdC5sZW5ndGgpLE9vKz1EdC5sZW5ndGgpLG5lWyRuXT8oRHQ/VyhTZSkuZW1wdHk9ITE6VyhTZSkudW51c2VkVG9rZW5zLnB1c2goJG4pLFpuKCRuLER0LFNlKSk6U2UuX3N0cmljdCYmIUR0JiZXKFNl''@;'; put 'put ''KS51bnVzZWRUb2tlbnMucHVzaCgkbik7VyhTZSkuY2hhcnNMZWZ0T3Zlcj1sYS1PbywkZS5sZW5ndGg+MCYmVyhTZSkudW51c2VkSW5wdXQucHVzaCgkZSksU2UuX2FbbW5dPD0xMiYmITA9PT1XKFNlKS5iaWdIb3VyJiZTZS5fYVttbl0+MCYmKFcoU2UpLmJpZ0hvdXI9dm9pZCAwKSxXKFNl''@;'; put 'put ''KS5wYXJzZWREYXRlUGFydHM9U2UuX2Euc2xpY2UoMCksVyhTZSkubWVyaWRpZW09U2UuX21lcmlkaWVtLFNlLl9hW21uXT1mdW5jdGlvbiBoMChTZSwkZSxwdCl7dmFyIER0O3JldHVybiBudWxsPT1wdD8kZTpudWxsIT1TZS5tZXJpZGllbUhvdXI/U2UubWVyaWRpZW1Ib3VyKCRlLHB0KToo''@;'; put 'put ''bnVsbCE9U2UuaXNQTSYmKChEdD1TZS5pc1BNKHB0KSkmJiRlPDEyJiYoJGUrPTEyKSwhRHQmJjEyPT09JGUmJigkZT0wKSksJGUpfShTZS5fbG9jYWxlLFNlLl9hW21uXSxTZS5fbWVyaWRpZW0pLG51bGwhPT0obnM9VyhTZSkuZXJhKSYmKFNlLl9hW1d0XT1TZS5fbG9jYWxlLmVyYXNDb252''@;'; put 'put ''ZXJ0WWVhcihucyxTZS5fYVtXdF0pKSxMbyhTZSksV2koU2UpfWVsc2UgVm8oU2UpO2Vsc2UgRm8oU2UpfWZ1bmN0aW9uIHhvKFNlKXt2YXIgJGU9U2UuX2kscHQ9U2UuX2Y7cmV0dXJuIFNlLl9sb2NhbGU9U2UuX2xvY2FsZXx8am4oU2UuX2wpLG51bGw9PT0kZXx8dm9pZCAwPT09cHQmJiIi''@;'; put 'put ''PT09JGU/Sih7bnVsbElucHV0OiEwfSk6KCJzdHJpbmciPT10eXBlb2YgJGUmJihTZS5faT0kZT1TZS5fbG9jYWxlLnByZXBhcnNlKCRlKSksX2UoJGUpP25ldyBnZShXaSgkZSkpOihOKCRlKT9TZS5fZD0kZTpWKHB0KT9mdW5jdGlvbiBZZChTZSl7dmFyICRlLHB0LER0LG9uLCRuLHFyLGxh''@;'; put 'put ''PSExLE9vPVNlLl9mLmxlbmd0aDtpZigwPT09T28pcmV0dXJuIFcoU2UpLmludmFsaWRGb3JtYXQ9ITAsdm9pZChTZS5fZD1uZXcgRGF0ZShOYU4pKTtmb3Iob249MDtvbjxPbztvbisrKSRuPTAscXI9ITEsJGU9dWUoe30sU2UpLG51bGwhPVNlLl91c2VVVEMmJigkZS5fdXNlVVRDPVNlLl91''@;'; put 'put ''c2VVVEMpLCRlLl9mPVNlLl9mW29uXSxfMSgkZSksZWUoJGUpJiYocXI9ITApLCRuKz1XKCRlKS5jaGFyc0xlZnRPdmVyLCRuKz0xMCpXKCRlKS51bnVzZWRUb2tlbnMubGVuZ3RoLFcoJGUpLnNjb3JlPSRuLGxhPyRuPER0JiYoRHQ9JG4scHQ9JGUpOihudWxsPT1EdHx8JG48RHR8fHFyKSYm''@;'; put 'put ''KER0PSRuLHB0PSRlLHFyJiYobGE9ITApKTtLKFNlLHB0fHwkZSl9KFNlKTpwdD9fMShTZSk6ZnVuY3Rpb24geHAoU2Upe3ZhciAkZT1TZS5faTtSKCRlKT9TZS5fZD1uZXcgRGF0ZShfLm5vdygpKTpOKCRlKT9TZS5fZD1uZXcgRGF0ZSgkZS52YWx1ZU9mKCkpOiJzdHJpbmciPT10eXBlb2Yg''@;'; put 'put ''JGU/ZnVuY3Rpb24gb28oU2Upe3ZhciAkZT1PYS5leGVjKFNlLl9pKTtudWxsPT09JGU/KEZvKFNlKSwhMT09PVNlLl9pc1ZhbGlkJiYoZGVsZXRlIFNlLl9pc1ZhbGlkLFZvKFNlKSwhMT09PVNlLl9pc1ZhbGlkJiYoZGVsZXRlIFNlLl9pc1ZhbGlkLFNlLl9zdHJpY3Q/U2UuX2lzVmFsaWQ9''@;'; put 'put ''ITE6Xy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhTZSkpKSk6U2UuX2Q9bmV3IERhdGUoKyRlWzFdKX0oU2UpOlYoJGUpPyhTZS5fYT1PKCRlLnNsaWNlKDApLGZ1bmN0aW9uKHB0KXtyZXR1cm4gcGFyc2VJbnQocHQsMTApfSksTG8oU2UpKTp3KCRlKT9mdW5jdGlvbiBrbChTZSl7aWYoIVNl''@;'; put 'put ''Ll9kKXt2YXIgJGU9cnQoU2UuX2kpO1NlLl9hPU8oWyRlLnllYXIsJGUubW9udGgsdm9pZCAwPT09JGUuZGF5PyRlLmRhdGU6JGUuZGF5LCRlLmhvdXIsJGUubWludXRlLCRlLnNlY29uZCwkZS5taWxsaXNlY29uZF0sZnVuY3Rpb24oRHQpe3JldHVybiBEdCYmcGFyc2VJbnQoRHQsMTApfSks''@;'; put 'put ''TG8oU2UpfX0oU2UpOnooJGUpP1NlLl9kPW5ldyBEYXRlKCRlKTpfLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKFNlKX0oU2UpLGVlKFNlKXx8KFNlLl9kPW51bGwpLFNlKSl9ZnVuY3Rpb24geWcoU2UsJGUscHQsRHQsb24pe3ZhciAkbj17fTtyZXR1cm4oITA9PT0kZXx8ITE9PT0kZSkmJihE''@;'; put 'put ''dD0kZSwkZT12b2lkIDApLCghMD09PXB0fHwhMT09PXB0KSYmKER0PXB0LHB0PXZvaWQgMCksKHcoU2UpJiZGKFNlKXx8VihTZSkmJjA9PT1TZS5sZW5ndGgpJiYoU2U9dm9pZCAwKSwkbi5faXNBTW9tZW50T2JqZWN0PSEwLCRuLl91c2VVVEM9JG4uX2lzVVRDPW9uLCRuLl9sPXB0LCRuLl9p''@;'; put 'put ''PVNlLCRuLl9mPSRlLCRuLl9zdHJpY3Q9RHQsZnVuY3Rpb24gU2MoU2Upe3ZhciAkZT1uZXcgZ2UoV2koeG8oU2UpKSk7cmV0dXJuICRlLl9uZXh0RGF5JiYoJGUuYWRkKDEsImQiKSwkZS5fbmV4dERheT12b2lkIDApLCRlfSgkbil9ZnVuY3Rpb24ga28oU2UsJGUscHQsRHQpe3JldHVybiB5''@;'; put 'put ''ZyhTZSwkZSxwdCxEdCwhMSl9Xy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjaz1NZSgidmFsdWUgcHJvdmlkZWQgaXMgbm90IGluIGEgcmVjb2duaXplZCBSRkMyODIyIG9yIElTTyBmb3JtYXQuIG1vbWVudCBjb25zdHJ1Y3Rpb24gZmFsbHMgYmFjayB0byBqcyBEYXRlKCksIHdoaWNoIGlzIG5v''@;'; put 'put ''dCByZWxpYWJsZSBhY3Jvc3MgYWxsIGJyb3dzZXJzIGFuZCB2ZXJzaW9ucy4gTm9uIFJGQzI4MjIvSVNPIGRhdGUgZm9ybWF0cyBhcmUgZGlzY291cmFnZWQuIFBsZWFzZSByZWZlciB0byBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2pzLWRhdGUvIGZvciBtb3JlIGlu''@;'; put 'put ''Zm8uIixmdW5jdGlvbihTZSl7U2UuX2Q9bmV3IERhdGUoU2UuX2krKFNlLl91c2VVVEM/IiBVVEMiOiIiKSl9KSxfLklTT184NjAxPWZ1bmN0aW9uKCl7fSxfLlJGQ18yODIyPWZ1bmN0aW9uKCl7fTt2YXIgVmg9TWUoIm1vbWVudCgpLm1pbiBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1h''@;'; put 'put ''eCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1tYXgvIixmdW5jdGlvbigpe3ZhciBTZT1rby5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiZTZS5pc1ZhbGlkKCk/U2U8dGhpcz90aGlzOlNlOkooKX0pLGVtPU1l''@;'; put 'put ''KCJtb21lbnQoKS5tYXggaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5taW4gaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LyIsZnVuY3Rpb24oKXt2YXIgU2U9a28uYXBwbHkobnVsbCxhcmd1bWVudHMpO3JldHVybiB0aGlzLmlzVmFsaWQo''@;'; put 'put ''KSYmU2UuaXNWYWxpZCgpP1NlPnRoaXM/dGhpczpTZTpKKCl9KTtmdW5jdGlvbiBFcChTZSwkZSl7dmFyIHB0LER0O2lmKDE9PT0kZS5sZW5ndGgmJlYoJGVbMF0pJiYoJGU9JGVbMF0pLCEkZS5sZW5ndGgpcmV0dXJuIGtvKCk7Zm9yKHB0PSRlWzBdLER0PTE7RHQ8JGUubGVuZ3RoOysrRHQp''@;'; put 'put ''KCEkZVtEdF0uaXNWYWxpZCgpfHwkZVtEdF1bU2VdKHB0KSkmJihwdD0kZVtEdF0pO3JldHVybiBwdH12YXIgUDA9WyJ5ZWFyIiwicXVhcnRlciIsIm1vbnRoIiwid2VlayIsImRheSIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJtaWxsaXNlY29uZCJdO2Z1bmN0aW9uIFgyKFNlKXt2YXIg''@;'; put 'put ''JGU9cnQoU2UpLHB0PSRlLnllYXJ8fDAsRHQ9JGUucXVhcnRlcnx8MCxvbj0kZS5tb250aHx8MCwkbj0kZS53ZWVrfHwkZS5pc29XZWVrfHwwLHFyPSRlLmRheXx8MCxsYT0kZS5ob3VyfHwwLE9vPSRlLm1pbnV0ZXx8MCxucz0kZS5zZWNvbmR8fDAseTA9JGUubWlsbGlzZWNvbmR8fDA7dGhp''@;'; put 'put ''cy5faXNWYWxpZD1mdW5jdGlvbiBFUyhTZSl7dmFyICRlLER0LHB0PSExLG9uPVAwLmxlbmd0aDtmb3IoJGUgaW4gU2UpaWYoUChTZSwkZSkmJigtMT09PXFpLmNhbGwoUDAsJGUpfHxudWxsIT1TZVskZV0mJmlzTmFOKFNlWyRlXSkpKXJldHVybiExO2ZvcihEdD0wO0R0PG9uOysrRHQpaWYo''@;'; put 'put ''U2VbUDBbRHRdXSl7aWYocHQpcmV0dXJuITE7cGFyc2VGbG9hdChTZVtQMFtEdF1dKSE9PVR0KFNlW1AwW0R0XV0pJiYocHQ9ITApfXJldHVybiEwfSgkZSksdGhpcy5fbWlsbGlzZWNvbmRzPSt5MCsxZTMqbnMrNmU0Kk9vKzFlMypsYSo2MCo2MCx0aGlzLl9kYXlzPStxcis3KiRuLHRoaXMu''@;'; put 'put ''X21vbnRocz0rb24rMypEdCsxMipwdCx0aGlzLl9kYXRhPXt9LHRoaXMuX2xvY2FsZT1qbigpLHRoaXMuX2J1YmJsZSgpfWZ1bmN0aW9uIHRtKFNlKXtyZXR1cm4gU2UgaW5zdGFuY2VvZiBYMn1mdW5jdGlvbiBIcihTZSl7cmV0dXJuIFNlPDA/LTEqTWF0aC5yb3VuZCgtMSpTZSk6TWF0aC5y''@;'; put 'put ''b3VuZChTZSl9ZnVuY3Rpb24gSm4oU2UsJGUpe3NlKFNlLDAsMCxmdW5jdGlvbigpe3ZhciBwdD10aGlzLnV0Y09mZnNldCgpLER0PSIrIjtyZXR1cm4gcHQ8MCYmKHB0PS1wdCxEdD0iLSIpLER0K0Uofn4ocHQvNjApLDIpKyRlK0Uofn5wdCU2MCwyKX0pfUpuKCJaIiwiOiIpLEpuKCJaWiIs''@;'; put 'put ''IiIpLEZuKCJaIixuaSksRm4oIlpaIixuaSksZnQoWyJaIiwiWloiXSxmdW5jdGlvbihTZSwkZSxwdCl7cHQuX3VzZVVUQz0hMCxwdC5fdHptPVRwKG5pLFNlKX0pO3ZhciBiZz0vKFtcK1wtXXxcZFxkKS9naTtmdW5jdGlvbiBUcChTZSwkZSl7dmFyIG9uLCRuLHB0PSgkZXx8IiIpLm1hdGNo''@;'; put 'put ''KFNlKTtyZXR1cm4gbnVsbD09PXB0P251bGw6MD09PSgkbj02MCoob249KChwdFtwdC5sZW5ndGgtMV18fFtdKSsiIikubWF0Y2goYmcpfHxbIi0iLDAsMF0pWzFdK1R0KG9uWzJdKSk/MDoiKyI9PT1vblswXT8kbjotJG59ZnVuY3Rpb24gdTMoU2UsJGUpe3ZhciBwdCxEdDtyZXR1cm4gJGUu''@;'; put 'put ''X2lzVVRDPyhwdD0kZS5jbG9uZSgpLER0PShfZShTZSl8fE4oU2UpP1NlLnZhbHVlT2YoKTprbyhTZSkudmFsdWVPZigpKS1wdC52YWx1ZU9mKCkscHQuX2Quc2V0VGltZShwdC5fZC52YWx1ZU9mKCkrRHQpLF8udXBkYXRlT2Zmc2V0KHB0LCExKSxwdCk6a28oU2UpLmxvY2FsKCl9ZnVuY3Rp''@;'; put 'put ''b24gcmQoU2Upe3JldHVybi1NYXRoLnJvdW5kKFNlLl9kLmdldFRpbWV6b25lT2Zmc2V0KCkpfWZ1bmN0aW9uIGgzKCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmdGhpcy5faXNVVEMmJjA9PT10aGlzLl9vZmZzZXR9Xy51cGRhdGVPZmZzZXQ9ZnVuY3Rpb24oKXt9O3ZhciBEeT0vXigtfFwr''@;'; put 'put ''KT8oPzooXGQqKVsuIF0pPyhcZCspOihcZCspKD86OihcZCspKFwuXGQqKT8pPyQvLEFwPS9eKC18XCspP1AoPzooWy0rXT9bMC05LC5dKilZKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilXKT8oPzooWy0rXT9bMC05LC5dKilEKT8oPzpUKD86KFstK10/WzAtOSwu''@;'; put 'put ''XSopSCk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopUyk/KT8kLztmdW5jdGlvbiBtbChTZSwkZSl7dmFyIG9uLCRuLHFyLHB0PVNlLER0PW51bGw7cmV0dXJuIHRtKFNlKT9wdD17bXM6U2UuX21pbGxpc2Vjb25kcyxkOlNlLl9kYXlzLE06U2UuX21vbnRoc306eihT''@;'; put 'put ''ZSl8fCFpc05hTigrU2UpPyhwdD17fSwkZT9wdFskZV09K1NlOnB0Lm1pbGxpc2Vjb25kcz0rU2UpOihEdD1EeS5leGVjKFNlKSk/KG9uPSItIj09PUR0WzFdPy0xOjEscHQ9e3k6MCxkOlR0KER0W2RuXSkqb24saDpUdChEdFttbl0pKm9uLG06VHQoRHRbcGldKSpvbixzOlR0KER0W2ZuXSkq''@;'; put 'put ''b24sbXM6VHQoSHIoMWUzKkR0W3RuXSkpKm9ufSk6KER0PUFwLmV4ZWMoU2UpKT9wdD17eTppZChEdFsyXSxvbj0iLSI9PT1EdFsxXT8tMToxKSxNOmlkKER0WzNdLG9uKSx3OmlkKER0WzRdLG9uKSxkOmlkKER0WzVdLG9uKSxoOmlkKER0WzZdLG9uKSxtOmlkKER0WzddLG9uKSxzOmlkKER0''@;'; put 'put ''WzhdLG9uKX06bnVsbD09cHQ/cHQ9e306Im9iamVjdCI9PXR5cGVvZiBwdCYmKCJmcm9tImluIHB0fHwidG8iaW4gcHQpJiYocXI9ZnVuY3Rpb24gVXUoU2UsJGUpe3ZhciBwdDtyZXR1cm4gU2UuaXNWYWxpZCgpJiYkZS5pc1ZhbGlkKCk/KCRlPXUzKCRlLFNlKSxTZS5pc0JlZm9yZSgkZSk/''@;'; put 'put ''cHQ9d2coU2UsJGUpOigocHQ9d2coJGUsU2UpKS5taWxsaXNlY29uZHM9LXB0Lm1pbGxpc2Vjb25kcyxwdC5tb250aHM9LXB0Lm1vbnRocykscHQpOnttaWxsaXNlY29uZHM6MCxtb250aHM6MH19KGtvKHB0LmZyb20pLGtvKHB0LnRvKSksKHB0PXt9KS5tcz1xci5taWxsaXNlY29uZHMscHQu''@;'; put 'put ''TT1xci5tb250aHMpLCRuPW5ldyBYMihwdCksdG0oU2UpJiZQKFNlLCJfbG9jYWxlIikmJigkbi5fbG9jYWxlPVNlLl9sb2NhbGUpLHRtKFNlKSYmUChTZSwiX2lzVmFsaWQiKSYmKCRuLl9pc1ZhbGlkPVNlLl9pc1ZhbGlkKSwkbn1mdW5jdGlvbiBpZChTZSwkZSl7dmFyIHB0PVNlJiZwYXJz''@;'; put 'put ''ZUZsb2F0KFNlLnJlcGxhY2UoIiwiLCIuIikpO3JldHVybihpc05hTihwdCk/MDpwdCkqJGV9ZnVuY3Rpb24gd2coU2UsJGUpe3ZhciBwdD17fTtyZXR1cm4gcHQubW9udGhzPSRlLm1vbnRoKCktU2UubW9udGgoKSsxMiooJGUueWVhcigpLVNlLnllYXIoKSksU2UuY2xvbmUoKS5hZGQocHQu''@;'; put 'put ''bW9udGhzLCJNIikuaXNBZnRlcigkZSkmJi0tcHQubW9udGhzLHB0Lm1pbGxpc2Vjb25kcz0rJGUtK1NlLmNsb25lKCkuYWRkKHB0Lm1vbnRocywiTSIpLHB0fWZ1bmN0aW9uIHJtKFNlLCRlKXtyZXR1cm4gZnVuY3Rpb24ocHQsRHQpe3ZhciAkbjtyZXR1cm4gbnVsbCE9PUR0JiYhaXNOYU4o''@;'; put 'put ''K0R0KSYmKEIoJGUsIm1vbWVudCgpLiIrJGUrIihwZXJpb2QsIG51bWJlcikgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBtb21lbnQoKS4iKyRlKyIobnVtYmVyLCBwZXJpb2QpLiBTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9hZGQtaW52ZXJ0ZWQtcGFyYW0v''@;'; put 'put ''IGZvciBtb3JlIGluZm8uIiksJG49cHQscHQ9RHQsRHQ9JG4pLGpoKHRoaXMsbWwocHQsRHQpLFNlKSx0aGlzfX1mdW5jdGlvbiBqaChTZSwkZSxwdCxEdCl7dmFyIG9uPSRlLl9taWxsaXNlY29uZHMsJG49SHIoJGUuX2RheXMpLHFyPUhyKCRlLl9tb250aHMpO1NlLmlzVmFsaWQoKSYmKER0''@;'; put 'put ''PUR0Pz8hMCxxciYmdjEoU2UsZWkoU2UsIk1vbnRoIikrcXIqcHQpLCRuJiZ1YShTZSwiRGF0ZSIsZWkoU2UsIkRhdGUiKSskbipwdCksb24mJlNlLl9kLnNldFRpbWUoU2UuX2QudmFsdWVPZigpK29uKnB0KSxEdCYmXy51cGRhdGVPZmZzZXQoU2UsJG58fHFyKSl9bWwuZm49WDIucHJvdG90''@;'; put 'put ''eXBlLG1sLmludmFsaWQ9ZnVuY3Rpb24gbmQoKXtyZXR1cm4gbWwoTmFOKX07dmFyIEFTPXJtKDEsImFkZCIpLGFkPXJtKC0xLCJzdWJ0cmFjdCIpO2Z1bmN0aW9uIEVzKFNlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIFNlfHxTZSBpbnN0YW5jZW9mIFN0cmluZ31mdW5jdGlvbiBRcyhTZSl7''@;'; put 'put ''cmV0dXJuIF9lKFNlKXx8TihTZSl8fEVzKFNlKXx8eihTZSl8fGZ1bmN0aW9uIEQ4KFNlKXt2YXIgJGU9VihTZSkscHQ9ITE7cmV0dXJuICRlJiYocHQ9MD09PVNlLmZpbHRlcihmdW5jdGlvbihEdCl7cmV0dXJuIXooRHQpJiZFcyhTZSl9KS5sZW5ndGgpLCRlJiZwdH0oU2UpfHxmdW5jdGlv''@;'; put 'put ''biBrOChTZSl7dmFyIG9uLCRlPXcoU2UpJiYhRihTZSkscHQ9ITEsRHQ9WyJ5ZWFycyIsInllYXIiLCJ5IiwibW9udGhzIiwibW9udGgiLCJNIiwiZGF5cyIsImRheSIsImQiLCJkYXRlcyIsImRhdGUiLCJEIiwiaG91cnMiLCJob3VyIiwiaCIsIm1pbnV0ZXMiLCJtaW51dGUiLCJtIiwic2Vj''@;'; put 'put ''b25kcyIsInNlY29uZCIsInMiLCJtaWxsaXNlY29uZHMiLCJtaWxsaXNlY29uZCIsIm1zIl0scXI9RHQubGVuZ3RoO2Zvcihvbj0wO29uPHFyO29uKz0xKXB0PXB0fHxQKFNlLER0W29uXSk7cmV0dXJuICRlJiZwdH0oU2UpfHxudWxsPT1TZX1mdW5jdGlvbiB6aChTZSwkZSl7aWYoU2UuZGF0''@;'; put 'put ''ZSgpPCRlLmRhdGUoKSlyZXR1cm4temgoJGUsU2UpO3ZhciBwdD0xMiooJGUueWVhcigpLVNlLnllYXIoKSkrKCRlLm1vbnRoKCktU2UubW9udGgoKSksRHQ9U2UuY2xvbmUoKS5hZGQocHQsIm1vbnRocyIpO3JldHVybi0ocHQrKCRlLUR0PDA/KCRlLUR0KS8oRHQtU2UuY2xvbmUoKS5hZGQo''@;'; put 'put ''cHQtMSwibW9udGhzIikpOigkZS1EdCkvKFNlLmNsb25lKCkuYWRkKHB0KzEsIm1vbnRocyIpLUR0KSkpfHwwfWZ1bmN0aW9uIEthKFNlKXt2YXIgJGU7cmV0dXJuIHZvaWQgMD09PVNlP3RoaXMuX2xvY2FsZS5fYWJicjoobnVsbCE9KCRlPWpuKFNlKSkmJih0aGlzLl9sb2NhbGU9JGUpLHRo''@;'; put 'put ''aXMpfV8uZGVmYXVsdEZvcm1hdD0iWVlZWS1NTS1ERFRISDptbTpzc1oiLF8uZGVmYXVsdEZvcm1hdFV0Yz0iWVlZWS1NTS1ERFRISDptbTpzc1taXSI7dmFyIFVoPU1lKCJtb21lbnQoKS5sYW5nKCkgaXMgZGVwcmVjYXRlZC4gSW5zdGVhZCwgdXNlIG1vbWVudCgpLmxvY2FsZURhdGEoKSB0''@;'; put 'put ''byBnZXQgdGhlIGxhbmd1YWdlIGNvbmZpZ3VyYXRpb24uIFVzZSBtb21lbnQoKS5sb2NhbGUoKSB0byBjaGFuZ2UgbGFuZ3VhZ2VzLiIsZnVuY3Rpb24oU2Upe3JldHVybiB2b2lkIDA9PT1TZT90aGlzLmxvY2FsZURhdGEoKTp0aGlzLmxvY2FsZShTZSl9KTtmdW5jdGlvbiBKMigpe3JldHVy''@;'; put 'put ''biB0aGlzLl9sb2NhbGV9dmFyIEgwPTZlNCxxbD02MCpIMCxUcz0zNTA2MzI4KnFsO2Z1bmN0aW9uIFEyKFNlLCRlKXtyZXR1cm4oU2UlJGUrJGUpJSRlfWZ1bmN0aW9uIFB5KFNlLCRlLHB0KXtyZXR1cm4gU2U8MTAwJiZTZT49MD9uZXcgRGF0ZShTZSs0MDAsJGUscHQpLVRzOm5ldyBEYXRl''@;'; put 'put ''KFNlLCRlLHB0KS52YWx1ZU9mKCl9ZnVuY3Rpb24gRnkoU2UsJGUscHQpe3JldHVybiBTZTwxMDAmJlNlPj0wP0RhdGUuVVRDKFNlKzQwMCwkZSxwdCktVHM6RGF0ZS5VVEMoU2UsJGUscHQpfWZ1bmN0aW9uIFA4KFNlLCRlKXtyZXR1cm4gJGUuZXJhc0FiYnJSZWdleChTZSl9ZnVuY3Rpb24g''@;'; put 'put ''TGkoKXt2YXIgb24sJG4scXIsbGEsT28sU2U9W10sJGU9W10scHQ9W10sRHQ9W10sbnM9dGhpcy5lcmFzKCk7Zm9yKG9uPTAsJG49bnMubGVuZ3RoO29uPCRuOysrb24pcXI9UXIobnNbb25dLm5hbWUpLGxhPVFyKG5zW29uXS5hYmJyKSxPbz1Rcihuc1tvbl0ubmFycm93KSwkZS5wdXNoKHFy''@;'; put 'put ''KSxTZS5wdXNoKGxhKSxwdC5wdXNoKE9vKSxEdC5wdXNoKHFyKSxEdC5wdXNoKGxhKSxEdC5wdXNoKE9vKTt0aGlzLl9lcmFzUmVnZXg9bmV3IFJlZ0V4cCgiXigiK0R0LmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl9lcmFzTmFtZVJlZ2V4PW5ldyBSZWdFeHAoIl4oIiskZS5qb2luKCJ8Iikr''@;'; put 'put ''IikiLCJpIiksdGhpcy5fZXJhc0FiYnJSZWdleD1uZXcgUmVnRXhwKCJeKCIrU2Uuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX2VyYXNOYXJyb3dSZWdleD1uZXcgUmVnRXhwKCJeKCIrcHQuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIHNvKFNlLCRlKXtzZSgwLFtTZSxTZS5sZW5ndGhd''@;'; put 'put ''LDAsJGUpfWZ1bmN0aW9uIFFsKFNlLCRlLHB0LER0LG9uKXt2YXIgJG47cmV0dXJuIG51bGw9PVNlP2RjKHRoaXMsRHQsb24pLnllYXI6KCRlPigkbj1qcihTZSxEdCxvbikpJiYoJGU9JG4pLEtkLmNhbGwodGhpcyxTZSwkZSxwdCxEdCxvbikpfWZ1bmN0aW9uIEtkKFNlLCRlLHB0LER0LG9u''@;'; put 'put ''KXt2YXIgJG49Wm8oU2UsJGUscHQsRHQsb24pLHFyPXRpKCRuLnllYXIsMCwkbi5kYXlPZlllYXIpO3JldHVybiB0aGlzLnllYXIocXIuZ2V0VVRDRnVsbFllYXIoKSksdGhpcy5tb250aChxci5nZXRVVENNb250aCgpKSx0aGlzLmRhdGUocXIuZ2V0VVRDRGF0ZSgpKSx0aGlzfXNlKCJOIiww''@;'; put 'put ''LDAsImVyYUFiYnIiKSxzZSgiTk4iLDAsMCwiZXJhQWJiciIpLHNlKCJOTk4iLDAsMCwiZXJhQWJiciIpLHNlKCJOTk5OIiwwLDAsImVyYU5hbWUiKSxzZSgiTk5OTk4iLDAsMCwiZXJhTmFycm93Iiksc2UoInkiLFsieSIsMV0sInlvIiwiZXJhWWVhciIpLHNlKCJ5IixbInl5IiwyXSwwLCJl''@;'; put 'put ''cmFZZWFyIiksc2UoInkiLFsieXl5IiwzXSwwLCJlcmFZZWFyIiksc2UoInkiLFsieXl5eSIsNF0sMCwiZXJhWWVhciIpLEZuKCJOIixQOCksRm4oIk5OIixQOCksRm4oIk5OTiIsUDgpLEZuKCJOTk5OIixmdW5jdGlvbiBGOChTZSwkZSl7cmV0dXJuICRlLmVyYXNOYW1lUmVnZXgoU2UpfSks''@;'; put 'put ''Rm4oIk5OTk5OIixmdW5jdGlvbiBzbShTZSwkZSl7cmV0dXJuICRlLmVyYXNOYXJyb3dSZWdleChTZSl9KSxmdChbIk4iLCJOTiIsIk5OTiIsIk5OTk4iLCJOTk5OTiJdLGZ1bmN0aW9uKFNlLCRlLHB0LER0KXt2YXIgb249cHQuX2xvY2FsZS5lcmFzUGFyc2UoU2UsRHQscHQuX3N0cmljdCk7''@;'; put 'put ''b24/VyhwdCkuZXJhPW9uOlcocHQpLmludmFsaWRFcmE9U2V9KSxGbigieSIscmkpLEZuKCJ5eSIscmkpLEZuKCJ5eXkiLHJpKSxGbigieXl5eSIscmkpLEZuKCJ5byIsZnVuY3Rpb24gQnMoU2UsJGUpe3JldHVybiAkZS5fZXJhWWVhck9yZGluYWxSZWdleHx8cml9KSxmdChbInkiLCJ5eSIs''@;'; put 'put ''Inl5eSIsInl5eXkiXSxXdCksZnQoWyJ5byJdLGZ1bmN0aW9uKFNlLCRlLHB0LER0KXt2YXIgb247cHQuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCYmKG9uPVNlLm1hdGNoKHB0Ll9sb2NhbGUuX2VyYVllYXJPcmRpbmFsUmVnZXgpKSwkZVtXdF09cHQuX2xvY2FsZS5lcmFZZWFyT3Jk''@;'; put 'put ''aW5hbFBhcnNlP3B0Ll9sb2NhbGUuZXJhWWVhck9yZGluYWxQYXJzZShTZSxvbik6cGFyc2VJbnQoU2UsMTApfSksc2UoMCxbImdnIiwyXSwwLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2Vla1llYXIoKSUxMDB9KSxzZSgwLFsiR0ciLDJdLDAsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc29X''@;'; put 'put ''ZWVrWWVhcigpJTEwMH0pLHNvKCJnZ2dnIiwid2Vla1llYXIiKSxzbygiZ2dnZ2ciLCJ3ZWVrWWVhciIpLHNvKCJHR0dHIiwiaXNvV2Vla1llYXIiKSxzbygiR0dHR0ciLCJpc29XZWVrWWVhciIpLEZuKCJHIixhbiksRm4oImciLGFuKSxGbigiR0ciLHR0LFN0KSxGbigiZ2ciLHR0LFN0KSxG''@;'; put 'put ''bigiR0dHRyIsSXQsdXQpLEZuKCJnZ2dnIixJdCx1dCksRm4oIkdHR0dHIixSdCxYZSksRm4oImdnZ2dnIixSdCxYZSksTXQoWyJnZ2dnIiwiZ2dnZ2ciLCJHR0dHIiwiR0dHR0ciXSxmdW5jdGlvbihTZSwkZSxwdCxEdCl7JGVbRHQuc3Vic3RyKDAsMildPVR0KFNlKX0pLE10KFsiZ2ciLCJH''@;'; put 'put ''RyJdLGZ1bmN0aW9uKFNlLCRlLHB0LER0KXskZVtEdF09Xy5wYXJzZVR3b0RpZ2l0WWVhcihTZSl9KSxzZSgiUSIsMCwiUW8iLCJxdWFydGVyIiksRm4oIlEiLHZ0KSxmdCgiUSIsZnVuY3Rpb24oU2UsJGUpeyRlW2RpXT0zKihUdChTZSktMSl9KSxzZSgiRCIsWyJERCIsMl0sIkRvIiwiZGF0''@;'; put 'put ''ZSIpLEZuKCJEIix0dCxSciksRm4oIkREIix0dCxTdCksRm4oIkRvIixmdW5jdGlvbihTZSwkZSl7cmV0dXJuIFNlPyRlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlfHwkZS5fb3JkaW5hbFBhcnNlOiRlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVudH0pLGZ0KFsiRCIsIkREIl0sZG4p''@;'; put 'put ''LGZ0KCJEbyIsZnVuY3Rpb24oU2UsJGUpeyRlW2RuXT1UdChTZS5tYXRjaCh0dClbMF0pfSk7dmFyIFpoPVZpKCJEYXRlIiwhMCk7c2UoIkRERCIsWyJEREREIiwzXSwiREREbyIsImRheU9mWWVhciIpLEZuKCJEREQiLHVuKSxGbigiRERERCIsZW4pLGZ0KFsiREREIiwiRERERCJdLGZ1bmN0''@;'; put 'put ''aW9uKFNlLCRlLHB0KXtwdC5fZGF5T2ZZZWFyPVR0KFNlKX0pLHNlKCJtIixbIm1tIiwyXSwwLCJtaW51dGUiKSxGbigibSIsdHQsQnQpLEZuKCJtbSIsdHQsU3QpLGZ0KFsibSIsIm1tIl0scGkpO3ZhciBXaD1WaSgiTWludXRlcyIsITEpO3NlKCJzIixbInNzIiwyXSwwLCJzZWNvbmQiKSxG''@;'; put 'put ''bigicyIsdHQsQnQpLEZuKCJzcyIsdHQsU3QpLGZ0KFsicyIsInNzIl0sZm4pO3ZhciB2MCxlZixCbD1WaSgiU2Vjb25kcyIsITEpO2ZvcihzZSgiUyIsMCwwLGZ1bmN0aW9uKCl7cmV0dXJufn4odGhpcy5taWxsaXNlY29uZCgpLzEwMCl9KSxzZSgwLFsiU1MiLDJdLDAsZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm5+fih0aGlzLm1pbGxpc2Vjb25kKCkvMTApfSksc2UoMCxbIlNTUyIsM10sMCwibWlsbGlzZWNvbmQiKSxzZSgwLFsiU1NTUyIsNF0sMCxmdW5jdGlvbigpe3JldHVybiAxMCp0aGlzLm1pbGxpc2Vjb25kKCl9KSxzZSgwLFsiU1NTU1MiLDVdLDAsZnVuY3Rpb24oKXtyZXR1cm4gMTAw''@;'; put 'put ''KnRoaXMubWlsbGlzZWNvbmQoKX0pLHNlKDAsWyJTU1NTU1MiLDZdLDAsZnVuY3Rpb24oKXtyZXR1cm4gMWUzKnRoaXMubWlsbGlzZWNvbmQoKX0pLHNlKDAsWyJTU1NTU1NTIiw3XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDFlNCp0aGlzLm1pbGxpc2Vjb25kKCl9KSxzZSgwLFsiU1NTU1NTU1Mi''@;'; put 'put ''LDhdLDAsZnVuY3Rpb24oKXtyZXR1cm4gMWU1KnRoaXMubWlsbGlzZWNvbmQoKX0pLHNlKDAsWyJTU1NTU1NTU1MiLDldLDAsZnVuY3Rpb24oKXtyZXR1cm4gMWU2KnRoaXMubWlsbGlzZWNvbmQoKX0pLEZuKCJTIix1bix2dCksRm4oIlNTIix1bixTdCksRm4oIlNTUyIsdW4sZW4pLHYwPSJT''@;'; put 'put ''U1NTIjt2MC5sZW5ndGg8PTk7djArPSJTIilGbih2MCxyaSk7ZnVuY3Rpb24gWWgoU2UsJGUpeyRlW3RuXT1UdCgxZTMqKCIwLiIrU2UpKX1mb3IodjA9IlMiO3YwLmxlbmd0aDw9OTt2MCs9IlMiKWZ0KHYwLFloKTtlZj1WaSgiTWlsbGlzZWNvbmRzIiwhMSksc2UoInoiLDAsMCwiem9uZUFi''@;'; put 'put ''YnIiKSxzZSgienoiLDAsMCwiem9uZU5hbWUiKTt2YXIgSGk9Z2UucHJvdG90eXBlO2Z1bmN0aW9uIE4wKFNlKXtyZXR1cm4gU2V9SGkuYWRkPUFTLEhpLmNhbGVuZGFyPWZ1bmN0aW9uIEtvKFNlLCRlKXsxPT09YXJndW1lbnRzLmxlbmd0aCYmKGFyZ3VtZW50c1swXT9Rcyhhcmd1bWVudHNb''@;'; put 'put ''MF0pPyhTZT1hcmd1bWVudHNbMF0sJGU9dm9pZCAwKTpmdW5jdGlvbiBrcChTZSl7dmFyIG9uLCRlPXcoU2UpJiYhRihTZSkscHQ9ITEsRHQ9WyJzYW1lRGF5IiwibmV4dERheSIsImxhc3REYXkiLCJuZXh0V2VlayIsImxhc3RXZWVrIiwic2FtZUVsc2UiXTtmb3Iob249MDtvbjxEdC5sZW5n''@;'; put 'put ''dGg7b24rPTEpcHQ9cHR8fFAoU2UsRHRbb25dKTtyZXR1cm4gJGUmJnB0fShhcmd1bWVudHNbMF0pJiYoJGU9YXJndW1lbnRzWzBdLFNlPXZvaWQgMCk6KFNlPXZvaWQgMCwkZT12b2lkIDApKTt2YXIgcHQ9U2V8fGtvKCksRHQ9dTMocHQsdGhpcykuc3RhcnRPZigiZGF5Iiksb249Xy5jYWxl''@;'; put 'put ''bmRhckZvcm1hdCh0aGlzLER0KXx8InNhbWVFbHNlIiwkbj0kZSYmKGcoJGVbb25dKT8kZVtvbl0uY2FsbCh0aGlzLHB0KTokZVtvbl0pO3JldHVybiB0aGlzLmZvcm1hdCgkbnx8dGhpcy5sb2NhbGVEYXRhKCkuY2FsZW5kYXIob24sdGhpcyxrbyhwdCkpKX0sSGkuY2xvbmU9ZnVuY3Rpb24g''@;'; put 'put ''WGMoKXtyZXR1cm4gbmV3IGdlKHRoaXMpfSxIaS5kaWZmPWZ1bmN0aW9uIG9kKFNlLCRlLHB0KXt2YXIgRHQsb24sJG47aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBOYU47aWYoIShEdD11MyhTZSx0aGlzKSkuaXNWYWxpZCgpKXJldHVybiBOYU47c3dpdGNoKG9uPTZlNCooRHQudXRjT2Zm''@;'; put 'put ''c2V0KCktdGhpcy51dGNPZmZzZXQoKSksJGU9X3QoJGUpKXtjYXNlInllYXIiOiRuPXpoKHRoaXMsRHQpLzEyO2JyZWFrO2Nhc2UibW9udGgiOiRuPXpoKHRoaXMsRHQpO2JyZWFrO2Nhc2UicXVhcnRlciI6JG49emgodGhpcyxEdCkvMzticmVhaztjYXNlInNlY29uZCI6JG49KHRoaXMtRHQp''@;'; put 'put ''LzFlMzticmVhaztjYXNlIm1pbnV0ZSI6JG49KHRoaXMtRHQpLzZlNDticmVhaztjYXNlImhvdXIiOiRuPSh0aGlzLUR0KS8zNmU1O2JyZWFrO2Nhc2UiZGF5Ijokbj0odGhpcy1EdC1vbikvODY0ZTU7YnJlYWs7Y2FzZSJ3ZWVrIjokbj0odGhpcy1EdC1vbikvNjA0OGU1O2JyZWFrO2RlZmF1''@;'; put 'put ''bHQ6JG49dGhpcy1EdH1yZXR1cm4gcHQ/JG46WWUoJG4pfSxIaS5lbmRPZj1mdW5jdGlvbiBDZyhTZSl7dmFyICRlLHB0O2lmKHZvaWQgMD09PShTZT1fdChTZSkpfHwibWlsbGlzZWNvbmQiPT09U2V8fCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpcztzd2l0Y2gocHQ9dGhpcy5faXNVVEM/''@;'; put 'put ''Rnk6UHksU2Upe2Nhc2UieWVhciI6JGU9cHQodGhpcy55ZWFyKCkrMSwwLDEpLTE7YnJlYWs7Y2FzZSJxdWFydGVyIjokZT1wdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCktdGhpcy5tb250aCgpJTMrMywxKS0xO2JyZWFrO2Nhc2UibW9udGgiOiRlPXB0KHRoaXMueWVhcigpLHRoaXMubW9u''@;'; put 'put ''dGgoKSsxLDEpLTE7YnJlYWs7Y2FzZSJ3ZWVrIjokZT1wdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCktdGhpcy53ZWVrZGF5KCkrNyktMTticmVhaztjYXNlImlzb1dlZWsiOiRlPXB0KHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKS0odGhpcy5pc29X''@;'; put 'put ''ZWVrZGF5KCktMSkrNyktMTticmVhaztjYXNlImRheSI6Y2FzZSJkYXRlIjokZT1wdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCkrMSktMTticmVhaztjYXNlImhvdXIiOiRlPXRoaXMuX2QudmFsdWVPZigpLCRlKz1xbC1RMigkZSsodGhpcy5faXNVVEM/MDp0aGlzLnV0''@;'; put 'put ''Y09mZnNldCgpKkgwKSxxbCktMTticmVhaztjYXNlIm1pbnV0ZSI6JGU9dGhpcy5fZC52YWx1ZU9mKCksJGUrPUgwLVEyKCRlLEgwKS0xO2JyZWFrO2Nhc2Uic2Vjb25kIjokZT10aGlzLl9kLnZhbHVlT2YoKSwkZSs9MWUzLVEyKCRlLDFlMyktMX1yZXR1cm4gdGhpcy5fZC5zZXRUaW1lKCRl''@;'; put 'put ''KSxfLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzfSxIaS5mb3JtYXQ9ZnVuY3Rpb24gYW0oU2Upe1NlfHwoU2U9dGhpcy5pc1V0YygpP18uZGVmYXVsdEZvcm1hdFV0YzpfLmRlZmF1bHRGb3JtYXQpO3ZhciAkZT1KZSh0aGlzLFNlKTtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZv''@;'; put 'put ''cm1hdCgkZSl9LEhpLmZyb209ZnVuY3Rpb24gTHkoU2UsJGUpe3JldHVybiB0aGlzLmlzVmFsaWQoKSYmKF9lKFNlKSYmU2UuaXNWYWxpZCgpfHxrbyhTZSkuaXNWYWxpZCgpKT9tbCh7dG86dGhpcyxmcm9tOlNlfSkubG9jYWxlKHRoaXMubG9jYWxlKCkpLmh1bWFuaXplKCEkZSk6dGhpcy5s''@;'; put 'put ''b2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKX0sSGkuZnJvbU5vdz1mdW5jdGlvbiBPeShTZSl7cmV0dXJuIHRoaXMuZnJvbShrbygpLFNlKX0sSGkudG89ZnVuY3Rpb24gcDMoU2UsJGUpe3JldHVybiB0aGlzLmlzVmFsaWQoKSYmKF9lKFNlKSYmU2UuaXNWYWxpZCgpfHxrbyhTZSkuaXNWYWxp''@;'; put 'put ''ZCgpKT9tbCh7ZnJvbTp0aGlzLHRvOlNlfSkubG9jYWxlKHRoaXMubG9jYWxlKCkpLmh1bWFuaXplKCEkZSk6dGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKX0sSGkudG9Ob3c9ZnVuY3Rpb24ga1MoU2Upe3JldHVybiB0aGlzLnRvKGtvKCksU2UpfSxIaS5nZXQ9ZnVuY3Rpb24gUmko''@;'; put 'put ''U2Upe3JldHVybiBnKHRoaXNbU2U9X3QoU2UpXSk/dGhpc1tTZV0oKTp0aGlzfSxIaS5pbnZhbGlkQXQ9ZnVuY3Rpb24gUzEoKXtyZXR1cm4gVyh0aGlzKS5vdmVyZmxvd30sSGkuaXNBZnRlcj1mdW5jdGlvbiBGMChTZSwkZSl7dmFyIHB0PV9lKFNlKT9TZTprbyhTZSk7cmV0dXJuISghdGhp''@;'; put 'put ''cy5pc1ZhbGlkKCl8fCFwdC5pc1ZhbGlkKCkpJiYoIm1pbGxpc2Vjb25kIj09PSgkZT1fdCgkZSl8fCJtaWxsaXNlY29uZCIpP3RoaXMudmFsdWVPZigpPnB0LnZhbHVlT2YoKTpwdC52YWx1ZU9mKCk8dGhpcy5jbG9uZSgpLnN0YXJ0T2YoJGUpLnZhbHVlT2YoKSl9LEhpLmlzQmVmb3JlPWZ1''@;'; put 'put ''bmN0aW9uIGYzKFNlLCRlKXt2YXIgcHQ9X2UoU2UpP1NlOmtvKFNlKTtyZXR1cm4hKCF0aGlzLmlzVmFsaWQoKXx8IXB0LmlzVmFsaWQoKSkmJigibWlsbGlzZWNvbmQiPT09KCRlPV90KCRlKXx8Im1pbGxpc2Vjb25kIik/dGhpcy52YWx1ZU9mKCk8cHQudmFsdWVPZigpOnRoaXMuY2xvbmUo''@;'; put 'put ''KS5lbmRPZigkZSkudmFsdWVPZigpPHB0LnZhbHVlT2YoKSl9LEhpLmlzQmV0d2Vlbj1mdW5jdGlvbiAkZChTZSwkZSxwdCxEdCl7dmFyIG9uPV9lKFNlKT9TZTprbyhTZSksJG49X2UoJGUpPyRlOmtvKCRlKTtyZXR1cm4hISh0aGlzLmlzVmFsaWQoKSYmb24uaXNWYWxpZCgpJiYkbi5pc1Zh''@;'; put 'put ''bGlkKCkpJiYoIigiPT09KER0PUR0fHwiKCkiKVswXT90aGlzLmlzQWZ0ZXIob24scHQpOiF0aGlzLmlzQmVmb3JlKG9uLHB0KSkmJigiKSI9PT1EdFsxXT90aGlzLmlzQmVmb3JlKCRuLHB0KTohdGhpcy5pc0FmdGVyKCRuLHB0KSl9LEhpLmlzU2FtZT1mdW5jdGlvbiBJeShTZSwkZSl7dmFy''@;'; put 'put ''IER0LHB0PV9lKFNlKT9TZTprbyhTZSk7cmV0dXJuISghdGhpcy5pc1ZhbGlkKCl8fCFwdC5pc1ZhbGlkKCkpJiYoIm1pbGxpc2Vjb25kIj09PSgkZT1fdCgkZSl8fCJtaWxsaXNlY29uZCIpP3RoaXMudmFsdWVPZigpPT09cHQudmFsdWVPZigpOihEdD1wdC52YWx1ZU9mKCksdGhpcy5jbG9u''@;'; put 'put ''ZSgpLnN0YXJ0T2YoJGUpLnZhbHVlT2YoKTw9RHQmJkR0PD10aGlzLmNsb25lKCkuZW5kT2YoJGUpLnZhbHVlT2YoKSkpfSxIaS5pc1NhbWVPckFmdGVyPWZ1bmN0aW9uIGcwKFNlLCRlKXtyZXR1cm4gdGhpcy5pc1NhbWUoU2UsJGUpfHx0aGlzLmlzQWZ0ZXIoU2UsJGUpfSxIaS5pc1NhbWVP''@;'; put 'put ''ckJlZm9yZT1mdW5jdGlvbiBJOChTZSwkZSl7cmV0dXJuIHRoaXMuaXNTYW1lKFNlLCRlKXx8dGhpcy5pc0JlZm9yZShTZSwkZSl9LEhpLmlzVmFsaWQ9ZnVuY3Rpb24gU2coKXtyZXR1cm4gZWUodGhpcyl9LEhpLmxhbmc9VWgsSGkubG9jYWxlPUthLEhpLmxvY2FsZURhdGE9SjIsSGkubWF4''@;'; put 'put ''PWVtLEhpLm1pbj1WaCxIaS5wYXJzaW5nRmxhZ3M9ZnVuY3Rpb24gUnAoKXtyZXR1cm4gSyh7fSxXKHRoaXMpKX0sSGkuc2V0PWZ1bmN0aW9uIERhKFNlLCRlKXtpZigib2JqZWN0Ij09dHlwZW9mIFNlKXt2YXIgRHQscHQ9ZnVuY3Rpb24gc24oU2Upe3ZhciBwdCwkZT1bXTtmb3IocHQgaW4g''@;'; put 'put ''U2UpUChTZSxwdCkmJiRlLnB1c2goe3VuaXQ6cHQscHJpb3JpdHk6UWVbcHRdfSk7cmV0dXJuICRlLnNvcnQoZnVuY3Rpb24oRHQsb24pe3JldHVybiBEdC5wcmlvcml0eS1vbi5wcmlvcml0eX0pLCRlfShTZT1ydChTZSkpLG9uPXB0Lmxlbmd0aDtmb3IoRHQ9MDtEdDxvbjtEdCsrKXRoaXNb''@;'; put 'put ''cHRbRHRdLnVuaXRdKFNlW3B0W0R0XS51bml0XSl9ZWxzZSBpZihnKHRoaXNbU2U9X3QoU2UpXSkpcmV0dXJuIHRoaXNbU2VdKCRlKTtyZXR1cm4gdGhpc30sSGkuc3RhcnRPZj1mdW5jdGlvbiBMOChTZSl7dmFyICRlLHB0O2lmKHZvaWQgMD09PShTZT1fdChTZSkpfHwibWlsbGlzZWNvbmQi''@;'; put 'put ''PT09U2V8fCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpcztzd2l0Y2gocHQ9dGhpcy5faXNVVEM/Rnk6UHksU2Upe2Nhc2UieWVhciI6JGU9cHQodGhpcy55ZWFyKCksMCwxKTticmVhaztjYXNlInF1YXJ0ZXIiOiRlPXB0KHRoaXMueWVhcigpLHRoaXMubW9udGgoKS10aGlzLm1vbnRoKCkl''@;'; put 'put ''MywxKTticmVhaztjYXNlIm1vbnRoIjokZT1wdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksMSk7YnJlYWs7Y2FzZSJ3ZWVrIjokZT1wdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCktdGhpcy53ZWVrZGF5KCkpO2JyZWFrO2Nhc2UiaXNvV2VlayI6JGU9cHQodGhpcy55''@;'; put 'put ''ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLSh0aGlzLmlzb1dlZWtkYXkoKS0xKSk7YnJlYWs7Y2FzZSJkYXkiOmNhc2UiZGF0ZSI6JGU9cHQodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpKTticmVhaztjYXNlImhvdXIiOiRlPXRoaXMuX2QudmFsdWVPZigpLCRl''@;'; put 'put ''LT1RMigkZSsodGhpcy5faXNVVEM/MDp0aGlzLnV0Y09mZnNldCgpKkgwKSxxbCk7YnJlYWs7Y2FzZSJtaW51dGUiOiRlPXRoaXMuX2QudmFsdWVPZigpLCRlLT1RMigkZSxIMCk7YnJlYWs7Y2FzZSJzZWNvbmQiOiRlPXRoaXMuX2QudmFsdWVPZigpLCRlLT1RMigkZSwxZTMpfXJldHVybiB0''@;'; put 'put ''aGlzLl9kLnNldFRpbWUoJGUpLF8udXBkYXRlT2Zmc2V0KHRoaXMsITApLHRoaXN9LEhpLnN1YnRyYWN0PWFkLEhpLnRvQXJyYXk9ZnVuY3Rpb24gRFMoKXt2YXIgU2U9dGhpcztyZXR1cm5bU2UueWVhcigpLFNlLm1vbnRoKCksU2UuZGF0ZSgpLFNlLmhvdXIoKSxTZS5taW51dGUoKSxTZS5z''@;'; put 'put ''ZWNvbmQoKSxTZS5taWxsaXNlY29uZCgpXX0sSGkudG9PYmplY3Q9ZnVuY3Rpb24gb20oKXt2YXIgU2U9dGhpcztyZXR1cm57eWVhcnM6U2UueWVhcigpLG1vbnRoczpTZS5tb250aCgpLGRhdGU6U2UuZGF0ZSgpLGhvdXJzOlNlLmhvdXJzKCksbWludXRlczpTZS5taW51dGVzKCksc2Vjb25k''@;'; put 'put ''czpTZS5zZWNvbmRzKCksbWlsbGlzZWNvbmRzOlNlLm1pbGxpc2Vjb25kcygpfX0sSGkudG9EYXRlPWZ1bmN0aW9uIHcxKCl7cmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpKX0sSGkudG9JU09TdHJpbmc9ZnVuY3Rpb24gaW0oU2Upe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVs''@;'; put 'put ''bDt2YXIgJGU9ITAhPT1TZSxwdD0kZT90aGlzLmNsb25lKCkudXRjKCk6dGhpcztyZXR1cm4gcHQueWVhcigpPDB8fHB0LnllYXIoKT45OTk5P0plKHB0LCRlPyJZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0iOiJZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaIik6ZyhEYXRlLnBy''@;'; put 'put ''b3RvdHlwZS50b0lTT1N0cmluZyk/JGU/dGhpcy50b0RhdGUoKS50b0lTT1N0cmluZygpOm5ldyBEYXRlKHRoaXMudmFsdWVPZigpKzYwKnRoaXMudXRjT2Zmc2V0KCkqMWUzKS50b0lTT1N0cmluZygpLnJlcGxhY2UoIloiLEplKHB0LCJaIikpOkplKHB0LCRlPyJZWVlZLU1NLUREW1RdSEg6''@;'; put 'put ''bW06c3MuU1NTW1pdIjoiWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1oiKX0sSGkuaW5zcGVjdD1mdW5jdGlvbiBSeSgpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4ibW9tZW50LmludmFsaWQoLyogIit0aGlzLl9pKyIgKi8pIjt2YXIgcHQsRHQsU2U9Im1vbWVudCIsJGU9IiI7cmV0dXJu''@;'; put 'put ''IHRoaXMuaXNMb2NhbCgpfHwoU2U9MD09PXRoaXMudXRjT2Zmc2V0KCk/Im1vbWVudC51dGMiOiJtb21lbnQucGFyc2Vab25lIiwkZT0iWiIpLHB0PSJbIitTZSsnKCJdJyxEdD0wPD10aGlzLnllYXIoKSYmdGhpcy55ZWFyKCk8PTk5OTk/IllZWVkiOiJZWVlZWVkiLHRoaXMuZm9ybWF0KHB0''@;'; put 'put ''K0R0KyItTU0tRERbVF1ISDptbTpzcy5TU1MiKyRlKydbIildJyl9LHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1TeW1ib2wuZm9yJiYoSGlbU3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKV09ZnVuY3Rpb24oKXtyZXR1cm4iTW9tZW50PCIrdGhpcy5mb3JtYXQoKSsi''@;'; put 'put ''PiJ9KSxIaS50b0pTT049ZnVuY3Rpb24gQzEoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy50b0lTT1N0cmluZygpOm51bGx9LEhpLnRvU3RyaW5nPWZ1bmN0aW9uIFI4KCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoImVuIikuZm9ybWF0KCJkZGQgTU1NIEREIFlZWVkgSEg6bW06''@;'; put 'put ''c3MgW0dNVF1aWiIpfSxIaS51bml4PWZ1bmN0aW9uIEh5KCl7cmV0dXJuIE1hdGguZmxvb3IodGhpcy52YWx1ZU9mKCkvMWUzKX0sSGkudmFsdWVPZj1mdW5jdGlvbiBJcCgpe3JldHVybiB0aGlzLl9kLnZhbHVlT2YoKS02ZTQqKHRoaXMuX29mZnNldHx8MCl9LEhpLmNyZWF0aW9uRGF0YT1m''@;'; put 'put ''dW5jdGlvbiBJUygpe3JldHVybntpbnB1dDp0aGlzLl9pLGZvcm1hdDp0aGlzLl9mLGxvY2FsZTp0aGlzLl9sb2NhbGUsaXNVVEM6dGhpcy5faXNVVEMsc3RyaWN0OnRoaXMuX3N0cmljdH19LEhpLmVyYU5hbWU9ZnVuY3Rpb24gQnkoKXt2YXIgU2UsJGUscHQsRHQ9dGhpcy5sb2NhbGVEYXRh''@;'; put 'put ''KCkuZXJhcygpO2ZvcihTZT0wLCRlPUR0Lmxlbmd0aDtTZTwkZTsrK1NlKWlmKHB0PXRoaXMuY2xvbmUoKS5zdGFydE9mKCJkYXkiKS52YWx1ZU9mKCksRHRbU2VdLnNpbmNlPD1wdCYmcHQ8PUR0W1NlXS51bnRpbHx8RHRbU2VdLnVudGlsPD1wdCYmcHQ8PUR0W1NlXS5zaW5jZSlyZXR1cm4g''@;'; put 'put ''RHRbU2VdLm5hbWU7cmV0dXJuIiJ9LEhpLmVyYU5hcnJvdz1mdW5jdGlvbiBNZygpe3ZhciBTZSwkZSxwdCxEdD10aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7Zm9yKFNlPTAsJGU9RHQubGVuZ3RoO1NlPCRlOysrU2UpaWYocHQ9dGhpcy5jbG9uZSgpLnN0YXJ0T2YoImRheSIpLnZhbHVlT2Yo''@;'; put 'put ''KSxEdFtTZV0uc2luY2U8PXB0JiZwdDw9RHRbU2VdLnVudGlsfHxEdFtTZV0udW50aWw8PXB0JiZwdDw9RHRbU2VdLnNpbmNlKXJldHVybiBEdFtTZV0ubmFycm93O3JldHVybiIifSxIaS5lcmFBYmJyPWZ1bmN0aW9uIFJTKCl7dmFyIFNlLCRlLHB0LER0PXRoaXMubG9jYWxlRGF0YSgpLmVy''@;'; put 'put ''YXMoKTtmb3IoU2U9MCwkZT1EdC5sZW5ndGg7U2U8JGU7KytTZSlpZihwdD10aGlzLmNsb25lKCkuc3RhcnRPZigiZGF5IikudmFsdWVPZigpLER0W1NlXS5zaW5jZTw9cHQmJnB0PD1EdFtTZV0udW50aWx8fER0W1NlXS51bnRpbDw9cHQmJnB0PD1EdFtTZV0uc2luY2UpcmV0dXJuIER0W1Nl''@;'; put 'put ''XS5hYmJyO3JldHVybiIifSxIaS5lcmFZZWFyPWZ1bmN0aW9uIExTKCl7dmFyIFNlLCRlLHB0LER0LG9uPXRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtmb3IoU2U9MCwkZT1vbi5sZW5ndGg7U2U8JGU7KytTZSlpZihwdD1vbltTZV0uc2luY2U8PW9uW1NlXS51bnRpbD8xOi0xLER0PXRoaXMu''@;'; put 'put ''Y2xvbmUoKS5zdGFydE9mKCJkYXkiKS52YWx1ZU9mKCksb25bU2VdLnNpbmNlPD1EdCYmRHQ8PW9uW1NlXS51bnRpbHx8b25bU2VdLnVudGlsPD1EdCYmRHQ8PW9uW1NlXS5zaW5jZSlyZXR1cm4odGhpcy55ZWFyKCktXyhvbltTZV0uc2luY2UpLnllYXIoKSkqcHQrb25bU2VdLm9mZnNldDty''@;'; put 'put ''ZXR1cm4gdGhpcy55ZWFyKCl9LEhpLnllYXI9WGksSGkuaXNMZWFwWWVhcj1mdW5jdGlvbiBRaSgpe3JldHVybiBubih0aGlzLnllYXIoKSl9LEhpLndlZWtZZWFyPWZ1bmN0aW9uIEpsKFNlKXtyZXR1cm4gUWwuY2FsbCh0aGlzLFNlLHRoaXMud2VlaygpLHRoaXMud2Vla2RheSgpK3RoaXMu''@;'; put 'put ''bG9jYWxlRGF0YSgpLl93ZWVrLmRvdyx0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3csdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95KX0sSGkuaXNvV2Vla1llYXI9ZnVuY3Rpb24gRHUoU2Upe3JldHVybiBRbC5jYWxsKHRoaXMsU2UsdGhpcy5pc29XZWVrKCksdGhpcy5pc29XZWVrZGF5''@;'; put 'put ''KCksMSw0KX0sSGkucXVhcnRlcj1IaS5xdWFydGVycz1mdW5jdGlvbiB5byhTZSl7cmV0dXJuIG51bGw9PVNlP01hdGguY2VpbCgodGhpcy5tb250aCgpKzEpLzMpOnRoaXMubW9udGgoMyooU2UtMSkrdGhpcy5tb250aCgpJTMpfSxIaS5tb250aD1QcixIaS5kYXlzSW5Nb250aD1mdW5jdGlv''@;'; put 'put ''biBkMCgpe3JldHVybiBQYSh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCkpfSxIaS53ZWVrPUhpLndlZWtzPWZ1bmN0aW9uIEJhKFNlKXt2YXIgJGU9dGhpcy5sb2NhbGVEYXRhKCkud2Vlayh0aGlzKTtyZXR1cm4gbnVsbD09U2U/JGU6dGhpcy5hZGQoNyooU2UtJGUpLCJkIil9LEhpLmlzb1dl''@;'; put 'put ''ZWs9SGkuaXNvV2Vla3M9ZnVuY3Rpb24gS2MoU2Upe3ZhciAkZT1kYyh0aGlzLDEsNCkud2VlaztyZXR1cm4gbnVsbD09U2U/JGU6dGhpcy5hZGQoNyooU2UtJGUpLCJkIil9LEhpLndlZWtzSW5ZZWFyPWZ1bmN0aW9uIExwKCl7dmFyIFNlPXRoaXMubG9jYWxlRGF0YSgpLl93ZWVrO3JldHVy''@;'; put 'put ''biBqcih0aGlzLnllYXIoKSxTZS5kb3csU2UuZG95KX0sSGkud2Vla3NJbldlZWtZZWFyPWZ1bmN0aW9uIFlzKCl7dmFyIFNlPXRoaXMubG9jYWxlRGF0YSgpLl93ZWVrO3JldHVybiBqcih0aGlzLndlZWtZZWFyKCksU2UuZG93LFNlLmRveSl9LEhpLmlzb1dlZWtzSW5ZZWFyPWZ1bmN0aW9u''@;'; put 'put ''IFBjKCl7cmV0dXJuIGpyKHRoaXMueWVhcigpLDEsNCl9LEhpLmlzb1dlZWtzSW5JU09XZWVrWWVhcj1mdW5jdGlvbiBtMCgpe3JldHVybiBqcih0aGlzLmlzb1dlZWtZZWFyKCksMSw0KX0sSGkuZGF0ZT1aaCxIaS5kYXk9SGkuZGF5cz1mdW5jdGlvbiBodShTZSl7aWYoIXRoaXMuaXNWYWxp''@;'; put 'put ''ZCgpKXJldHVybiBudWxsIT1TZT90aGlzOk5hTjt2YXIgJGU9ZWkodGhpcywiRGF5Iik7cmV0dXJuIG51bGwhPVNlPyhTZT1mdW5jdGlvbiBRNShTZSwkZSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBTZT9TZTppc05hTihTZSk/Im51bWJlciI9PXR5cGVvZihTZT0kZS53ZWVrZGF5c1BhcnNl''@;'; put 'put ''KFNlKSk/U2U6bnVsbDpwYXJzZUludChTZSwxMCl9KFNlLHRoaXMubG9jYWxlRGF0YSgpKSx0aGlzLmFkZChTZS0kZSwiZCIpKTokZX0sSGkud2Vla2RheT1mdW5jdGlvbiBTcChTZSl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsIT1TZT90aGlzOk5hTjt2YXIgJGU9KHRoaXMuZGF5''@;'; put 'put ''KCkrNy10aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3cpJTc7cmV0dXJuIG51bGw9PVNlPyRlOnRoaXMuYWRkKFNlLSRlLCJkIil9LEhpLmlzb1dlZWtkYXk9ZnVuY3Rpb24gTmgoU2Upe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9U2U/dGhpczpOYU47aWYobnVsbCE9U2Upe3Zh''@;'; put 'put ''ciAkZT1mdW5jdGlvbiBJcyhTZSwkZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBTZT8kZS53ZWVrZGF5c1BhcnNlKFNlKSU3fHw3OmlzTmFOKFNlKT9udWxsOlNlfShTZSx0aGlzLmxvY2FsZURhdGEoKSk7cmV0dXJuIHRoaXMuZGF5KHRoaXMuZGF5KCklNz8kZTokZS03KX1yZXR1cm4gdGhp''@;'; put 'put ''cy5kYXkoKXx8N30sSGkuZGF5T2ZZZWFyPWZ1bmN0aW9uIGxtKFNlKXt2YXIgJGU9TWF0aC5yb3VuZCgodGhpcy5jbG9uZSgpLnN0YXJ0T2YoImRheSIpLXRoaXMuY2xvbmUoKS5zdGFydE9mKCJ5ZWFyIikpLzg2NGU1KSsxO3JldHVybiBudWxsPT1TZT8kZTp0aGlzLmFkZChTZS0kZSwiZCIp''@;'; put 'put ''fSxIaS5ob3VyPUhpLmhvdXJzPVRsLEhpLm1pbnV0ZT1IaS5taW51dGVzPVdoLEhpLnNlY29uZD1IaS5zZWNvbmRzPUJsLEhpLm1pbGxpc2Vjb25kPUhpLm1pbGxpc2Vjb25kcz1lZixIaS51dGNPZmZzZXQ9ZnVuY3Rpb24gZDMoU2UsJGUscHQpe3ZhciBvbixEdD10aGlzLl9vZmZzZXR8fDA7''@;'; put 'put ''aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsIT1TZT90aGlzOk5hTjtpZihudWxsIT1TZSl7aWYoInN0cmluZyI9PXR5cGVvZiBTZSl7aWYobnVsbD09PShTZT1UcChuaSxTZSkpKXJldHVybiB0aGlzfWVsc2UgTWF0aC5hYnMoU2UpPDE2JiYhcHQmJihTZSo9NjApO3JldHVybiF0aGlz''@;'; put 'put ''Ll9pc1VUQyYmJGUmJihvbj1yZCh0aGlzKSksdGhpcy5fb2Zmc2V0PVNlLHRoaXMuX2lzVVRDPSEwLG51bGwhPW9uJiZ0aGlzLmFkZChvbiwibSIpLER0IT09U2UmJighJGV8fHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3M/amgodGhpcyxtbChTZS1EdCwibSIpLDEsITEpOnRoaXMuX2NoYW5nZUlu''@;'; put 'put ''UHJvZ3Jlc3N8fCh0aGlzLl9jaGFuZ2VJblByb2dyZXNzPSEwLF8udXBkYXRlT2Zmc2V0KHRoaXMsITApLHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3M9bnVsbCkpLHRoaXN9cmV0dXJuIHRoaXMuX2lzVVRDP0R0OnJkKHRoaXMpfSxIaS51dGM9ZnVuY3Rpb24ga3koU2Upe3JldHVybiB0aGlzLnV0''@;'; put 'put ''Y09mZnNldCgwLFNlKX0sSGkubG9jYWw9ZnVuY3Rpb24gV3MoU2Upe3JldHVybiB0aGlzLl9pc1VUQyYmKHRoaXMudXRjT2Zmc2V0KDAsU2UpLHRoaXMuX2lzVVRDPSExLFNlJiZ0aGlzLnN1YnRyYWN0KHJkKHRoaXMpLCJtIikpLHRoaXN9LEhpLnBhcnNlWm9uZT1mdW5jdGlvbiB0MSgpe2lm''@;'; put 'put ''KG51bGwhPXRoaXMuX3R6bSl0aGlzLnV0Y09mZnNldCh0aGlzLl90em0sITEsITApO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiB0aGlzLl9pKXt2YXIgU2U9VHAobG4sdGhpcy5faSk7bnVsbCE9U2U/dGhpcy51dGNPZmZzZXQoU2UpOnRoaXMudXRjT2Zmc2V0KDAsITApfXJldHVybiB0aGlz''@;'; put 'put ''fSxIaS5oYXNBbGlnbmVkSG91ck9mZnNldD1mdW5jdGlvbiBHZChTZSl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmKFNlPVNlP2tvKFNlKS51dGNPZmZzZXQoKTowLCh0aGlzLnV0Y09mZnNldCgpLVNlKSU2MD09MCl9LEhpLmlzRFNUPWZ1bmN0aW9uIF9nKCl7cmV0dXJuIHRoaXMudXRjT2Zm''@;'; put 'put ''c2V0KCk+dGhpcy5jbG9uZSgpLm1vbnRoKDApLnV0Y09mZnNldCgpfHx0aGlzLnV0Y09mZnNldCgpPnRoaXMuY2xvbmUoKS5tb250aCg1KS51dGNPZmZzZXQoKX0sSGkuaXNMb2NhbD1mdW5jdGlvbiBUUygpe3JldHVybiEhdGhpcy5pc1ZhbGlkKCkmJiF0aGlzLl9pc1VUQ30sSGkuaXNVdGNP''@;'; put 'put ''ZmZzZXQ9ZnVuY3Rpb24gZjAoKXtyZXR1cm4hIXRoaXMuaXNWYWxpZCgpJiZ0aGlzLl9pc1VUQ30sSGkuaXNVdGM9aDMsSGkuaXNVVEM9aDMsSGkuem9uZUFiYnI9ZnVuY3Rpb24gT3AoKXtyZXR1cm4gdGhpcy5faXNVVEM/IlVUQyI6IiJ9LEhpLnpvbmVOYW1lPWZ1bmN0aW9uIEg4KCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuX2lzVVRDPyJDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZSI6IiJ9LEhpLmRhdGVzPU1lKCJkYXRlcyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgZGF0ZSBpbnN0ZWFkLiIsWmgpLEhpLm1vbnRocz1NZSgibW9udGhzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBt''@;'; put 'put ''b250aCBpbnN0ZWFkIixQciksSGkueWVhcnM9TWUoInllYXJzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSB5ZWFyIGluc3RlYWQiLFhpKSxIaS56b25lPU1lKCJtb21lbnQoKS56b25lIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQoKS51dGNPZmZzZXQgaW5zdGVhZC4gaHR0cDovL21v''@;'; put 'put ''bWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy96b25lLyIsZnVuY3Rpb24gQXkoU2UsJGUpe3JldHVybiBudWxsIT1TZT8oInN0cmluZyIhPXR5cGVvZiBTZSYmKFNlPS1TZSksdGhpcy51dGNPZmZzZXQoU2UsJGUpLHRoaXMpOi10aGlzLnV0Y09mZnNldCgpfSksSGkuaXNEU1RTaGlmdGVk''@;'; put 'put ''PU1lKCJpc0RTVFNoaWZ0ZWQgaXMgZGVwcmVjYXRlZC4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZHN0LXNoaWZ0ZWQvIGZvciBtb3JlIGluZm9ybWF0aW9uIixmdW5jdGlvbiBxMigpe2lmKCFSKHRoaXMuX2lzRFNUU2hpZnRlZCkpcmV0dXJuIHRoaXMuX2lz''@;'; put 'put ''RFNUU2hpZnRlZDt2YXIgJGUsU2U9e307cmV0dXJuIHVlKFNlLHRoaXMpLChTZT14byhTZSkpLl9hPygkZT1TZS5faXNVVEM/WihTZS5fYSk6a28oU2UuX2EpLHRoaXMuX2lzRFNUU2hpZnRlZD10aGlzLmlzVmFsaWQoKSYmZnVuY3Rpb24gbm0oU2UsJGUscHQpe3ZhciBxcixEdD1NYXRoLm1p''@;'; put 'put ''bihTZS5sZW5ndGgsJGUubGVuZ3RoKSxvbj1NYXRoLmFicyhTZS5sZW5ndGgtJGUubGVuZ3RoKSwkbj0wO2Zvcihxcj0wO3FyPER0O3FyKyspKHB0JiZTZVtxcl0hPT0kZVtxcl18fCFwdCYmVHQoU2VbcXJdKSE9PVR0KCRlW3FyXSkpJiYkbisrO3JldHVybiAkbitvbn0oU2UuX2EsJGUudG9B''@;'; put 'put ''cnJheSgpKT4wKTp0aGlzLl9pc0RTVFNoaWZ0ZWQ9ITEsdGhpcy5faXNEU1RTaGlmdGVkfSk7dmFyIG5vPUMucHJvdG90eXBlO2Z1bmN0aW9uIGlhKFNlLCRlLHB0LER0KXt2YXIgb249am4oKSwkbj1aKCkuc2V0KER0LCRlKTtyZXR1cm4gb25bcHRdKCRuLFNlKX1mdW5jdGlvbiBwYyhTZSwk''@;'; put 'put ''ZSxwdCl7aWYoeihTZSkmJigkZT1TZSxTZT12b2lkIDApLFNlPVNlfHwiIixudWxsIT0kZSlyZXR1cm4gaWEoU2UsJGUscHQsIm1vbnRoIik7dmFyIER0LG9uPVtdO2ZvcihEdD0wO0R0PDEyO0R0Kyspb25bRHRdPWlhKFNlLER0LHB0LCJtb250aCIpO3JldHVybiBvbn1mdW5jdGlvbiBpYyhT''@;'; put 'put ''ZSwkZSxwdCxEdCl7ImJvb2xlYW4iPT10eXBlb2YgU2U/KHooJGUpJiYocHQ9JGUsJGU9dm9pZCAwKSwkZT0kZXx8IiIpOihwdD0kZT1TZSxTZT0hMSx6KCRlKSYmKHB0PSRlLCRlPXZvaWQgMCksJGU9JGV8fCIiKTt2YXIgcXIsb249am4oKSwkbj1TZT9vbi5fd2Vlay5kb3c6MCxsYT1bXTtp''@;'; put 'put ''ZihudWxsIT1wdClyZXR1cm4gaWEoJGUsKHB0KyRuKSU3LER0LCJkYXkiKTtmb3IocXI9MDtxcjw3O3FyKyspbGFbcXJdPWlhKCRlLChxciskbiklNyxEdCwiZGF5Iik7cmV0dXJuIGxhfW5vLmNhbGVuZGFyPWZ1bmN0aW9uIGooU2UsJGUscHQpe3ZhciBEdD10aGlzLl9jYWxlbmRhcltTZV18''@;'; put 'put ''fHRoaXMuX2NhbGVuZGFyLnNhbWVFbHNlO3JldHVybiBnKER0KT9EdC5jYWxsKCRlLHB0KTpEdH0sbm8ubG9uZ0RhdGVGb3JtYXQ9ZnVuY3Rpb24geWUoU2Upe3ZhciAkZT10aGlzLl9sb25nRGF0ZUZvcm1hdFtTZV0scHQ9dGhpcy5fbG9uZ0RhdGVGb3JtYXRbU2UudG9VcHBlckNhc2UoKV07''@;'; put 'put ''cmV0dXJuICRlfHwhcHQ/JGU6KHRoaXMuX2xvbmdEYXRlRm9ybWF0W1NlXT1wdC5tYXRjaChtKS5tYXAoZnVuY3Rpb24oRHQpe3JldHVybiJNTU1NIj09PUR0fHwiTU0iPT09RHR8fCJERCI9PT1EdHx8ImRkZGQiPT09RHQ/RHQuc2xpY2UoMSk6RHR9KS5qb2luKCIiKSx0aGlzLl9sb25nRGF0''@;'; put 'put ''ZUZvcm1hdFtTZV0pfSxuby5pbnZhbGlkRGF0ZT1mdW5jdGlvbiBqZSgpe3JldHVybiB0aGlzLl9pbnZhbGlkRGF0ZX0sbm8ub3JkaW5hbD1mdW5jdGlvbiBMZShTZSl7cmV0dXJuIHRoaXMuX29yZGluYWwucmVwbGFjZSgiJWQiLFNlKX0sbm8ucHJlcGFyc2U9TjAsbm8ucG9zdGZvcm1hdD1O''@;'; put 'put ''MCxuby5yZWxhdGl2ZVRpbWU9ZnVuY3Rpb24gVmUoU2UsJGUscHQsRHQpe3ZhciBvbj10aGlzLl9yZWxhdGl2ZVRpbWVbcHRdO3JldHVybiBnKG9uKT9vbihTZSwkZSxwdCxEdCk6b24ucmVwbGFjZSgvJWQvaSxTZSl9LG5vLnBhc3RGdXR1cmU9ZnVuY3Rpb24gQWUoU2UsJGUpe3ZhciBwdD10''@;'; put 'put ''aGlzLl9yZWxhdGl2ZVRpbWVbU2U+MD8iZnV0dXJlIjoicGFzdCJdO3JldHVybiBnKHB0KT9wdCgkZSk6cHQucmVwbGFjZSgvJXMvaSwkZSl9LG5vLnNldD1mdW5jdGlvbiB5KFNlKXt2YXIgJGUscHQ7Zm9yKHB0IGluIFNlKVAoU2UscHQpJiYoZygkZT1TZVtwdF0pP3RoaXNbcHRdPSRlOnRo''@;'; put 'put ''aXNbIl8iK3B0XT0kZSk7dGhpcy5fY29uZmlnPVNlLHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50PW5ldyBSZWdFeHAoKHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2Uuc291cmNlfHx0aGlzLl9vcmRpbmFsUGFyc2Uuc291cmNlKSsifCIrL1xkezEsMn0vLnNvdXJjZSl9''@;'; put 'put ''LG5vLmVyYXM9ZnVuY3Rpb24gTnkoU2UsJGUpe3ZhciBwdCxEdCxvbiwkbj10aGlzLl9lcmFzfHxqbigiZW4iKS5fZXJhcztmb3IocHQ9MCxEdD0kbi5sZW5ndGg7cHQ8RHQ7KytwdClzd2l0Y2goInN0cmluZyI9PXR5cGVvZiAkbltwdF0uc2luY2UmJihvbj1fKCRuW3B0XS5zaW5jZSkuc3Rh''@;'; put 'put ''cnRPZigiZGF5IiksJG5bcHRdLnNpbmNlPW9uLnZhbHVlT2YoKSksdHlwZW9mICRuW3B0XS51bnRpbCl7Y2FzZSJ1bmRlZmluZWQiOiRuW3B0XS51bnRpbD0xLzA7YnJlYWs7Y2FzZSJzdHJpbmciOm9uPV8oJG5bcHRdLnVudGlsKS5zdGFydE9mKCJkYXkiKS52YWx1ZU9mKCksJG5bcHRdLnVu''@;'; put 'put ''dGlsPW9uLnZhbHVlT2YoKX1yZXR1cm4gJG59LG5vLmVyYXNQYXJzZT1mdW5jdGlvbiBxYyhTZSwkZSxwdCl7dmFyIER0LG9uLHFyLGxhLE9vLCRuPXRoaXMuZXJhcygpO2ZvcihTZT1TZS50b1VwcGVyQ2FzZSgpLER0PTAsb249JG4ubGVuZ3RoO0R0PG9uOysrRHQpaWYocXI9JG5bRHRdLm5h''@;'; put 'put ''bWUudG9VcHBlckNhc2UoKSxsYT0kbltEdF0uYWJici50b1VwcGVyQ2FzZSgpLE9vPSRuW0R0XS5uYXJyb3cudG9VcHBlckNhc2UoKSxwdClzd2l0Y2goJGUpe2Nhc2UiTiI6Y2FzZSJOTiI6Y2FzZSJOTk4iOmlmKGxhPT09U2UpcmV0dXJuICRuW0R0XTticmVhaztjYXNlIk5OTk4iOmlmKHFy''@;'; put 'put ''PT09U2UpcmV0dXJuICRuW0R0XTticmVhaztjYXNlIk5OTk5OIjppZihPbz09PVNlKXJldHVybiAkbltEdF19ZWxzZSBpZihbcXIsbGEsT29dLmluZGV4T2YoU2UpPj0wKXJldHVybiAkbltEdF19LG5vLmVyYXNDb252ZXJ0WWVhcj1mdW5jdGlvbiBWeShTZSwkZSl7dmFyIHB0PVNlLnNpbmNl''@;'; put 'put ''PD1TZS51bnRpbD8xOi0xO3JldHVybiB2b2lkIDA9PT0kZT9fKFNlLnNpbmNlKS55ZWFyKCk6XyhTZS5zaW5jZSkueWVhcigpKygkZS1TZS5vZmZzZXQpKnB0fSxuby5lcmFzQWJiclJlZ2V4PWZ1bmN0aW9uIE84KFNlKXtyZXR1cm4gUCh0aGlzLCJfZXJhc0FiYnJSZWdleCIpfHxMaS5jYWxs''@;'; put 'put ''KHRoaXMpLFNlP3RoaXMuX2VyYXNBYmJyUmVnZXg6dGhpcy5fZXJhc1JlZ2V4fSxuby5lcmFzTmFtZVJlZ2V4PWZ1bmN0aW9uIE9TKFNlKXtyZXR1cm4gUCh0aGlzLCJfZXJhc05hbWVSZWdleCIpfHxMaS5jYWxsKHRoaXMpLFNlP3RoaXMuX2VyYXNOYW1lUmVnZXg6dGhpcy5fZXJhc1JlZ2V4''@;'; put 'put ''fSxuby5lcmFzTmFycm93UmVnZXg9ZnVuY3Rpb24gUFMoU2Upe3JldHVybiBQKHRoaXMsIl9lcmFzTmFycm93UmVnZXgiKXx8TGkuY2FsbCh0aGlzKSxTZT90aGlzLl9lcmFzTmFycm93UmVnZXg6dGhpcy5fZXJhc1JlZ2V4fSxuby5tb250aHM9ZnVuY3Rpb24gRnIoU2UsJGUpe3JldHVybiBT''@;'; put 'put ''ZT9WKHRoaXMuX21vbnRocyk/dGhpcy5fbW9udGhzW1NlLm1vbnRoKCldOnRoaXMuX21vbnRoc1sodGhpcy5fbW9udGhzLmlzRm9ybWF0fHxNaSkudGVzdCgkZSk/ImZvcm1hdCI6InN0YW5kYWxvbmUiXVtTZS5tb250aCgpXTpWKHRoaXMuX21vbnRocyk/dGhpcy5fbW9udGhzOnRoaXMuX21v''@;'; put 'put ''bnRocy5zdGFuZGFsb25lfSxuby5tb250aHNTaG9ydD1mdW5jdGlvbiBjbyhTZSwkZSl7cmV0dXJuIFNlP1YodGhpcy5fbW9udGhzU2hvcnQpP3RoaXMuX21vbnRoc1Nob3J0W1NlLm1vbnRoKCldOnRoaXMuX21vbnRoc1Nob3J0W01pLnRlc3QoJGUpPyJmb3JtYXQiOiJzdGFuZGFsb25lIl1b''@;'; put 'put ''U2UubW9udGgoKV06Vih0aGlzLl9tb250aHNTaG9ydCk/dGhpcy5fbW9udGhzU2hvcnQ6dGhpcy5fbW9udGhzU2hvcnQuc3RhbmRhbG9uZX0sbm8ubW9udGhzUGFyc2U9ZnVuY3Rpb24gJGMoU2UsJGUscHQpe3ZhciBEdCxvbiwkbjtpZih0aGlzLl9tb250aHNQYXJzZUV4YWN0KXJldHVybiBZ''@;'; put 'put ''YS5jYWxsKHRoaXMsU2UsJGUscHQpO2Zvcih0aGlzLl9tb250aHNQYXJzZXx8KHRoaXMuX21vbnRoc1BhcnNlPVtdLHRoaXMuX2xvbmdNb250aHNQYXJzZT1bXSx0aGlzLl9zaG9ydE1vbnRoc1BhcnNlPVtdKSxEdD0wO0R0PDEyO0R0Kyspe2lmKG9uPVooWzJlMyxEdF0pLHB0JiYhdGhpcy5f''@;'; put 'put ''bG9uZ01vbnRoc1BhcnNlW0R0XSYmKHRoaXMuX2xvbmdNb250aHNQYXJzZVtEdF09bmV3IFJlZ0V4cCgiXiIrdGhpcy5tb250aHMob24sIiIpLnJlcGxhY2UoIi4iLCIiKSsiJCIsImkiKSx0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW0R0XT1uZXcgUmVnRXhwKCJeIit0aGlzLm1vbnRoc1Nob3J0''@;'; put 'put ''KG9uLCIiKS5yZXBsYWNlKCIuIiwiIikrIiQiLCJpIikpLCFwdCYmIXRoaXMuX21vbnRoc1BhcnNlW0R0XSYmKCRuPSJeIit0aGlzLm1vbnRocyhvbiwiIikrInxeIit0aGlzLm1vbnRoc1Nob3J0KG9uLCIiKSx0aGlzLl9tb250aHNQYXJzZVtEdF09bmV3IFJlZ0V4cCgkbi5yZXBsYWNlKCIu''@;'; put 'put ''IiwiIiksImkiKSkscHQmJiJNTU1NIj09PSRlJiZ0aGlzLl9sb25nTW9udGhzUGFyc2VbRHRdLnRlc3QoU2UpKXJldHVybiBEdDtpZihwdCYmIk1NTSI9PT0kZSYmdGhpcy5fc2hvcnRNb250aHNQYXJzZVtEdF0udGVzdChTZSkpcmV0dXJuIER0O2lmKCFwdCYmdGhpcy5fbW9udGhzUGFyc2Vb''@;'; put 'put ''RHRdLnRlc3QoU2UpKXJldHVybiBEdH19LG5vLm1vbnRoc1JlZ2V4PWZ1bmN0aW9uIFJhKFNlKXtyZXR1cm4gdGhpcy5fbW9udGhzUGFyc2VFeGFjdD8oUCh0aGlzLCJfbW9udGhzUmVnZXgiKXx8YWkuY2FsbCh0aGlzKSxTZT90aGlzLl9tb250aHNTdHJpY3RSZWdleDp0aGlzLl9tb250aHNS''@;'; put 'put ''ZWdleCk6KFAodGhpcywiX21vbnRoc1JlZ2V4Iil8fCh0aGlzLl9tb250aHNSZWdleD1lYSksdGhpcy5fbW9udGhzU3RyaWN0UmVnZXgmJlNlP3RoaXMuX21vbnRoc1N0cmljdFJlZ2V4OnRoaXMuX21vbnRoc1JlZ2V4KX0sbm8ubW9udGhzU2hvcnRSZWdleD1mdW5jdGlvbiBucihTZSl7cmV0''@;'; put 'put ''dXJuIHRoaXMuX21vbnRoc1BhcnNlRXhhY3Q/KFAodGhpcywiX21vbnRoc1JlZ2V4Iil8fGFpLmNhbGwodGhpcyksU2U/dGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDp0aGlzLl9tb250aHNTaG9ydFJlZ2V4KTooUCh0aGlzLCJfbW9udGhzU2hvcnRSZWdleCIpfHwodGhpcy5fbW9udGhz''@;'; put 'put ''U2hvcnRSZWdleD13YSksdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCYmU2U/dGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDp0aGlzLl9tb250aHNTaG9ydFJlZ2V4KX0sbm8ud2Vlaz1mdW5jdGlvbiBVZChTZSl7cmV0dXJuIGRjKFNlLHRoaXMuX3dlZWsuZG93LHRoaXMuX3dlZWsu''@;'; put 'put ''ZG95KS53ZWVrfSxuby5maXJzdERheU9mWWVhcj1mdW5jdGlvbiBBOCgpe3JldHVybiB0aGlzLl93ZWVrLmRveX0sbm8uZmlyc3REYXlPZldlZWs9ZnVuY3Rpb24geTEoKXtyZXR1cm4gdGhpcy5fd2Vlay5kb3d9LG5vLndlZWtkYXlzPWZ1bmN0aW9uIFdkKFNlLCRlKXt2YXIgcHQ9Vih0aGlz''@;'; put 'put ''Ll93ZWVrZGF5cyk/dGhpcy5fd2Vla2RheXM6dGhpcy5fd2Vla2RheXNbU2UmJiEwIT09U2UmJnRoaXMuX3dlZWtkYXlzLmlzRm9ybWF0LnRlc3QoJGUpPyJmb3JtYXQiOiJzdGFuZGFsb25lIl07cmV0dXJuITA9PT1TZT9PMChwdCx0aGlzLl93ZWVrLmRvdyk6U2U/cHRbU2UuZGF5KCldOnB0''@;'; put 'put ''fSxuby53ZWVrZGF5c01pbj1mdW5jdGlvbiB3cChTZSl7cmV0dXJuITA9PT1TZT9PMCh0aGlzLl93ZWVrZGF5c01pbix0aGlzLl93ZWVrLmRvdyk6U2U/dGhpcy5fd2Vla2RheXNNaW5bU2UuZGF5KCldOnRoaXMuX3dlZWtkYXlzTWlufSxuby53ZWVrZGF5c1Nob3J0PWZ1bmN0aW9uIExjKFNl''@;'; put 'put ''KXtyZXR1cm4hMD09PVNlP08wKHRoaXMuX3dlZWtkYXlzU2hvcnQsdGhpcy5fd2Vlay5kb3cpOlNlP3RoaXMuX3dlZWtkYXlzU2hvcnRbU2UuZGF5KCldOnRoaXMuX3dlZWtkYXlzU2hvcnR9LG5vLndlZWtkYXlzUGFyc2U9ZnVuY3Rpb24gQ3AoU2UsJGUscHQpe3ZhciBEdCxvbiwkbjtpZih0''@;'; put 'put ''aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpcmV0dXJuIHRkLmNhbGwodGhpcyxTZSwkZSxwdCk7Zm9yKHRoaXMuX3dlZWtkYXlzUGFyc2V8fCh0aGlzLl93ZWVrZGF5c1BhcnNlPVtdLHRoaXMuX21pbldlZWtkYXlzUGFyc2U9W10sdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlPVtdLHRoaXMuX2Z1''@;'; put 'put ''bGxXZWVrZGF5c1BhcnNlPVtdKSxEdD0wO0R0PDc7RHQrKyl7aWYob249WihbMmUzLDFdKS5kYXkoRHQpLHB0JiYhdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbRHRdJiYodGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbRHRdPW5ldyBSZWdFeHAoIl4iK3RoaXMud2Vla2RheXMob24sIiIpLnJlcGxh''@;'; put 'put ''Y2UoIi4iLCJcXC4/IikrIiQiLCJpIiksdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW0R0XT1uZXcgUmVnRXhwKCJeIit0aGlzLndlZWtkYXlzU2hvcnQob24sIiIpLnJlcGxhY2UoIi4iLCJcXC4/IikrIiQiLCJpIiksdGhpcy5fbWluV2Vla2RheXNQYXJzZVtEdF09bmV3IFJlZ0V4cCgiXiIr''@;'; put 'put ''dGhpcy53ZWVrZGF5c01pbihvbiwiIikucmVwbGFjZSgiLiIsIlxcLj8iKSsiJCIsImkiKSksdGhpcy5fd2Vla2RheXNQYXJzZVtEdF18fCgkbj0iXiIrdGhpcy53ZWVrZGF5cyhvbiwiIikrInxeIit0aGlzLndlZWtkYXlzU2hvcnQob24sIiIpKyJ8XiIrdGhpcy53ZWVrZGF5c01pbihvbiwi''@;'; put 'put ''IiksdGhpcy5fd2Vla2RheXNQYXJzZVtEdF09bmV3IFJlZ0V4cCgkbi5yZXBsYWNlKCIuIiwiIiksImkiKSkscHQmJiJkZGRkIj09PSRlJiZ0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtEdF0udGVzdChTZSkpcmV0dXJuIER0O2lmKHB0JiYiZGRkIj09PSRlJiZ0aGlzLl9zaG9ydFdlZWtkYXlz''@;'; put 'put ''UGFyc2VbRHRdLnRlc3QoU2UpKXJldHVybiBEdDtpZihwdCYmImRkIj09PSRlJiZ0aGlzLl9taW5XZWVrZGF5c1BhcnNlW0R0XS50ZXN0KFNlKSlyZXR1cm4gRHQ7aWYoIXB0JiZ0aGlzLl93ZWVrZGF5c1BhcnNlW0R0XS50ZXN0KFNlKSlyZXR1cm4gRHR9fSxuby53ZWVrZGF5c1JlZ2V4PWZ1''@;'; put 'put ''bmN0aW9uIE1wKFNlKXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhQKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fGdyLmNhbGwodGhpcyksU2U/dGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c1JlZ2V4KTooUCh0aGlzLCJfd2Vla2RheXNSZWdleCIpfHwo''@;'; put 'put ''dGhpcy5fd2Vla2RheXNSZWdleD1IaCksdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCYmU2U/dGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c1JlZ2V4KX0sbm8ud2Vla2RheXNTaG9ydFJlZ2V4PWZ1bmN0aW9uICQyKFNlKXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJz''@;'; put 'put ''ZUV4YWN0PyhQKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fGdyLmNhbGwodGhpcyksU2U/dGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleCk6KFAodGhpcywiX3dlZWtkYXlzU2hvcnRSZWdleCIpfHwodGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4''@;'; put 'put ''PXVzKSx0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXgmJlNlP3RoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXgpfSxuby53ZWVrZGF5c01pblJlZ2V4PWZ1bmN0aW9uIHhuKFNlKXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0''@;'; put 'put ''PyhQKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fGdyLmNhbGwodGhpcyksU2U/dGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c01pblJlZ2V4KTooUCh0aGlzLCJfd2Vla2RheXNNaW5SZWdleCIpfHwodGhpcy5fd2Vla2RheXNNaW5SZWdleD1xYSksdGhpcy5fd2Vl''@;'; put 'put ''a2RheXNNaW5TdHJpY3RSZWdleCYmU2U/dGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c01pblJlZ2V4KX0sbm8uaXNQTT1mdW5jdGlvbiBvbChTZSl7cmV0dXJuInAiPT09KFNlKyIiKS50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKX0sbm8ubWVyaWRpZW09ZnVuY3Rp''@;'; put 'put ''b24gQWwoU2UsJGUscHQpe3JldHVybiBTZT4xMT9wdD8icG0iOiJQTSI6cHQ/ImFtIjoiQU0ifSxEbigiZW4iLHtlcmFzOlt7c2luY2U6IjAwMDEtMDEtMDEiLHVudGlsOjEvMCxvZmZzZXQ6MSxuYW1lOiJBbm5vIERvbWluaSIsbmFycm93OiJBRCIsYWJicjoiQUQifSx7c2luY2U6IjAwMDAt''@;'; put 'put ''MTItMzEiLHVudGlsOi0xLzAsb2Zmc2V0OjEsbmFtZToiQmVmb3JlIENocmlzdCIsbmFycm93OiJCQyIsYWJicjoiQkMifV0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfSh0aHxzdHxuZHxyZCkvLG9yZGluYWw6ZnVuY3Rpb24oU2Upe3ZhciAkZT1TZSUxMDtyZXR1cm4gU2UrKDE9''@;'; put 'put ''PT1UdChTZSUxMDAvMTApPyJ0aCI6MT09PSRlPyJzdCI6Mj09PSRlPyJuZCI6Mz09PSRlPyJyZCI6InRoIil9fSksXy5sYW5nPU1lKCJtb21lbnQubGFuZyBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZSBpbnN0ZWFkLiIsRG4pLF8ubGFuZ0RhdGE9TWUoIm1vbWVudC5sYW5nRGF0''@;'; put 'put ''YSBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZURhdGEgaW5zdGVhZC4iLGpuKTt2YXIgdmw9TWF0aC5hYnM7ZnVuY3Rpb24gWnUoU2UsJGUscHQsRHQpe3ZhciBvbj1tbCgkZSxwdCk7cmV0dXJuIFNlLl9taWxsaXNlY29uZHMrPUR0Km9uLl9taWxsaXNlY29uZHMsU2UuX2RheXMr''@;'; put 'put ''PUR0Km9uLl9kYXlzLFNlLl9tb250aHMrPUR0Km9uLl9tb250aHMsU2UuX2J1YmJsZSgpfWZ1bmN0aW9uIHFkKFNlKXtyZXR1cm4gU2U8MD9NYXRoLmZsb29yKFNlKTpNYXRoLmNlaWwoU2UpfWZ1bmN0aW9uIHp5KFNlKXtyZXR1cm4gNDgwMCpTZS8xNDYwOTd9ZnVuY3Rpb24gY2QoU2Upe3Jl''@;'; put 'put ''dHVybiAxNDYwOTcqU2UvNDgwMH1mdW5jdGlvbiBKZChTZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXMoU2UpfX12YXIgRWc9SmQoIm1zIiksZkk9SmQoInMiKSxGUz1KZCgibSIpLEhTPUpkKCJoIiksJGg9SmQoImQiKSxQcD1KZCgidyIpLHBJPUpkKCJNIiksVXk9SmQoIlEi''@;'; put 'put ''KSxnST1KZCgieSIpLE5TPUVnO2Z1bmN0aW9uIEtoKFNlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy5fZGF0YVtTZV06TmFOfX12YXIgVjg9S2goIm1pbGxpc2Vjb25kcyIpLHZJPUtoKCJzZWNvbmRzIikseUk9S2goIm1pbnV0ZXMiKSxWUz1LaCgiaG91''@;'; put 'put ''cnMiKSxCUz1LaCgiZGF5cyIpLFp5PUtoKCJtb250aHMiKSxXbz1LaCgieWVhcnMiKTt2YXIgWGg9TWF0aC5yb3VuZCxxaD17c3M6NDQsczo0NSxtOjQ1LGg6MjIsZDoyNix3Om51bGwsTToxMX07ZnVuY3Rpb24gdW0oU2UsJGUscHQsRHQsb24pe3JldHVybiBvbi5yZWxhdGl2ZVRpbWUoJGV8''@;'; put 'put ''fDEsISFwdCxTZSxEdCl9dmFyIFBzPU1hdGguYWJzO2Z1bmN0aW9uIHYzKFNlKXtyZXR1cm4oU2U+MCktKFNlPDApfHwrU2V9ZnVuY3Rpb24gVGcoKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7dmFyIER0LG9uLCRuLHFyLE9vLG5z''@;'; put 'put ''LHkwLEZjLFNlPVBzKHRoaXMuX21pbGxpc2Vjb25kcykvMWUzLCRlPVBzKHRoaXMuX2RheXMpLHB0PVBzKHRoaXMuX21vbnRocyksbGE9dGhpcy5hc1NlY29uZHMoKTtyZXR1cm4gbGE/KER0PVllKFNlLzYwKSxvbj1ZZShEdC82MCksU2UlPTYwLER0JT02MCwkbj1ZZShwdC8xMikscHQlPTEy''@;'; put 'put ''LHFyPVNlP1NlLnRvRml4ZWQoMykucmVwbGFjZSgvXC4/MCskLywiIik6IiIsT289bGE8MD8iLSI6IiIsbnM9djModGhpcy5fbW9udGhzKSE9PXYzKGxhKT8iLSI6IiIseTA9djModGhpcy5fZGF5cykhPT12MyhsYSk/Ii0iOiIiLEZjPXYzKHRoaXMuX21pbGxpc2Vjb25kcykhPT12MyhsYSk/''@;'; put 'put ''Ii0iOiIiLE9vKyJQIisoJG4/bnMrJG4rIlkiOiIiKSsocHQ/bnMrcHQrIk0iOiIiKSsoJGU/eTArJGUrIkQiOiIiKSsob258fER0fHxTZT8iVCI6IiIpKyhvbj9GYytvbisiSCI6IiIpKyhEdD9GYytEdCsiTSI6IiIpKyhTZT9GYytxcisiUyI6IiIpKToiUDBEIn12YXIgSGE9WDIucHJvdG90''@;'; put 'put ''eXBlO3JldHVybiBIYS5pc1ZhbGlkPWZ1bmN0aW9uIFR5KCl7cmV0dXJuIHRoaXMuX2lzVmFsaWR9LEhhLmFicz1mdW5jdGlvbiBHaCgpe3ZhciBTZT10aGlzLl9kYXRhO3JldHVybiB0aGlzLl9taWxsaXNlY29uZHM9dmwodGhpcy5fbWlsbGlzZWNvbmRzKSx0aGlzLl9kYXlzPXZsKHRoaXMu''@;'; put 'put ''X2RheXMpLHRoaXMuX21vbnRocz12bCh0aGlzLl9tb250aHMpLFNlLm1pbGxpc2Vjb25kcz12bChTZS5taWxsaXNlY29uZHMpLFNlLnNlY29uZHM9dmwoU2Uuc2Vjb25kcyksU2UubWludXRlcz12bChTZS5taW51dGVzKSxTZS5ob3Vycz12bChTZS5ob3VycyksU2UubW9udGhzPXZsKFNlLm1v''@;'; put 'put ''bnRocyksU2UueWVhcnM9dmwoU2UueWVhcnMpLHRoaXN9LEhhLmFkZD1mdW5jdGlvbiBYZChTZSwkZSl7cmV0dXJuIFp1KHRoaXMsU2UsJGUsMSl9LEhhLnN1YnRyYWN0PWZ1bmN0aW9uIFYwKFNlLCRlKXtyZXR1cm4gWnUodGhpcyxTZSwkZSwtMSl9LEhhLmFzPWZ1bmN0aW9uIHhnKFNlKXtp''@;'; put 'put ''ZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIE5hTjt2YXIgJGUscHQsRHQ9dGhpcy5fbWlsbGlzZWNvbmRzO2lmKCJtb250aCI9PT0oU2U9X3QoU2UpKXx8InF1YXJ0ZXIiPT09U2V8fCJ5ZWFyIj09PVNlKXN3aXRjaCgkZT10aGlzLl9kYXlzK0R0Lzg2NGU1LHB0PXRoaXMuX21vbnRocyt6eSgk''@;'; put 'put ''ZSksU2Upe2Nhc2UibW9udGgiOnJldHVybiBwdDtjYXNlInF1YXJ0ZXIiOnJldHVybiBwdC8zO2Nhc2UieWVhciI6cmV0dXJuIHB0LzEyfWVsc2Ugc3dpdGNoKCRlPXRoaXMuX2RheXMrTWF0aC5yb3VuZChjZCh0aGlzLl9tb250aHMpKSxTZSl7Y2FzZSJ3ZWVrIjpyZXR1cm4gJGUvNytEdC82''@;'; put 'put ''MDQ4ZTU7Y2FzZSJkYXkiOnJldHVybiAkZStEdC84NjRlNTtjYXNlImhvdXIiOnJldHVybiAyNCokZStEdC8zNmU1O2Nhc2UibWludXRlIjpyZXR1cm4gMTQ0MCokZStEdC82ZTQ7Y2FzZSJzZWNvbmQiOnJldHVybiA4NjQwMCokZStEdC8xZTM7Y2FzZSJtaWxsaXNlY29uZCI6cmV0dXJuIE1h''@;'; put 'put ''dGguZmxvb3IoODY0ZTUqJGUpK0R0O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHVuaXQgIitTZSl9fSxIYS5hc01pbGxpc2Vjb25kcz1FZyxIYS5hc1NlY29uZHM9ZkksSGEuYXNNaW51dGVzPUZTLEhhLmFzSG91cnM9SFMsSGEuYXNEYXlzPSRoLEhhLmFzV2Vla3M9UHAsSGEu''@;'; put 'put ''YXNNb250aHM9cEksSGEuYXNRdWFydGVycz1VeSxIYS5hc1llYXJzPWdJLEhhLnZhbHVlT2Y9TlMsSGEuX2J1YmJsZT1mdW5jdGlvbiBqeSgpe3ZhciBvbiwkbixxcixsYSxPbyxTZT10aGlzLl9taWxsaXNlY29uZHMsJGU9dGhpcy5fZGF5cyxwdD10aGlzLl9tb250aHMsRHQ9dGhpcy5fZGF0''@;'; put 'put ''YTtyZXR1cm4gU2U+PTAmJiRlPj0wJiZwdD49MHx8U2U8PTAmJiRlPD0wJiZwdDw9MHx8KFNlKz04NjRlNSpxZChjZChwdCkrJGUpLCRlPTAscHQ9MCksRHQubWlsbGlzZWNvbmRzPVNlJTFlMyxvbj1ZZShTZS8xZTMpLER0LnNlY29uZHM9b24lNjAsJG49WWUob24vNjApLER0Lm1pbnV0ZXM9''@;'; put 'put ''JG4lNjAscXI9WWUoJG4vNjApLER0LmhvdXJzPXFyJTI0LCRlKz1ZZShxci8yNCkscHQrPU9vPVllKHp5KCRlKSksJGUtPXFkKGNkKE9vKSksbGE9WWUocHQvMTIpLHB0JT0xMixEdC5kYXlzPSRlLER0Lm1vbnRocz1wdCxEdC55ZWFycz1sYSx0aGlzfSxIYS5jbG9uZT1mdW5jdGlvbiBtSSgp''@;'; put 'put ''e3JldHVybiBtbCh0aGlzKX0sSGEuZ2V0PWZ1bmN0aW9uIE44KFNlKXtyZXR1cm4gU2U9X3QoU2UpLHRoaXMuaXNWYWxpZCgpP3RoaXNbU2UrInMiXSgpOk5hTn0sSGEubWlsbGlzZWNvbmRzPVY4LEhhLnNlY29uZHM9dkksSGEubWludXRlcz15SSxIYS5ob3Vycz1WUyxIYS5kYXlzPUJTLEhh''@;'; put 'put ''LndlZWtzPWZ1bmN0aW9uIFd5KCl7cmV0dXJuIFllKHRoaXMuZGF5cygpLzcpfSxIYS5tb250aHM9WnksSGEueWVhcnM9V28sSGEuaHVtYW5pemU9ZnVuY3Rpb24gelMoU2UsJGUpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTt2YXIg''@;'; put 'put ''b24sJG4scHQ9ITEsRHQ9cWg7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBTZSYmKCRlPVNlLFNlPSExKSwiYm9vbGVhbiI9PXR5cGVvZiBTZSYmKHB0PVNlKSwib2JqZWN0Ij09dHlwZW9mICRlJiYoRHQ9T2JqZWN0LmFzc2lnbih7fSxxaCwkZSksbnVsbCE9JGUucyYmbnVsbD09JGUuc3MmJihE''@;'; put 'put ''dC5zcz0kZS5zLTEpKSwkbj1mdW5jdGlvbiBZeShTZSwkZSxwdCxEdCl7dmFyIG9uPW1sKFNlKS5hYnMoKSwkbj1YaChvbi5hcygicyIpKSxxcj1YaChvbi5hcygibSIpKSxsYT1YaChvbi5hcygiaCIpKSxPbz1YaChvbi5hcygiZCIpKSxucz1YaChvbi5hcygiTSIpKSx5MD1YaChvbi5hcygi''@;'; put 'put ''dyIpKSxGYz1YaChvbi5hcygieSIpKSxRZD0kbjw9cHQuc3MmJlsicyIsJG5dfHwkbjxwdC5zJiZbInNzIiwkbl18fHFyPD0xJiZbIm0iXXx8cXI8cHQubSYmWyJtbSIscXJdfHxsYTw9MSYmWyJoIl18fGxhPHB0LmgmJlsiaGgiLGxhXXx8T288PTEmJlsiZCJdfHxPbzxwdC5kJiZbImRkIixP''@;'; put 'put ''b107cmV0dXJuIG51bGwhPXB0LncmJihRZD1RZHx8eTA8PTEmJlsidyJdfHx5MDxwdC53JiZbInd3Iix5MF0pLChRZD1RZHx8bnM8PTEmJlsiTSJdfHxuczxwdC5NJiZbIk1NIixuc118fEZjPD0xJiZbInkiXXx8WyJ5eSIsRmNdKVsyXT0kZSxRZFszXT0rU2U+MCxRZFs0XT1EdCx1bS5hcHBs''@;'; put 'put ''eShudWxsLFFkKX0odGhpcywhcHQsRHQsb249dGhpcy5sb2NhbGVEYXRhKCkpLHB0JiYoJG49b24ucGFzdEZ1dHVyZSgrdGhpcywkbikpLG9uLnBvc3Rmb3JtYXQoJG4pfSxIYS50b0lTT1N0cmluZz1UZyxIYS50b1N0cmluZz1UZyxIYS50b0pTT049VGcsSGEubG9jYWxlPUthLEhhLmxvY2Fs''@;'; put 'put ''ZURhdGE9SjIsSGEudG9Jc29TdHJpbmc9TWUoInRvSXNvU3RyaW5nKCkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0b0lTT1N0cmluZygpIGluc3RlYWQgKG5vdGljZSB0aGUgY2FwaXRhbHMpIixUZyksSGEubGFuZz1VaCxzZSgiWCIsMCwwLCJ1bml4Iiksc2UoIngiLDAsMCwidmFsdWVP''@;'; put 'put ''ZiIpLEZuKCJ4IixhbiksRm4oIlgiLC9bKy1dP1xkKyhcLlxkezEsM30pPy8pLGZ0KCJYIixmdW5jdGlvbihTZSwkZSxwdCl7cHQuX2Q9bmV3IERhdGUoMWUzKnBhcnNlRmxvYXQoU2UpKX0pLGZ0KCJ4IixmdW5jdGlvbihTZSwkZSxwdCl7cHQuX2Q9bmV3IERhdGUoVHQoU2UpKX0pLF8udmVy''@;'; put 'put ''c2lvbj0iMi4zMC4xIixmdW5jdGlvbiBwKFNlKXtJPVNlfShrbyksXy5mbj1IaSxfLm1pbj1mdW5jdGlvbiBPYygpe3JldHVybiBFcCgiaXNCZWZvcmUiLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApKX0sXy5tYXg9ZnVuY3Rpb24gQmgoKXtyZXR1cm4gRXAoImlzQWZ0ZXIiLFtdLnNsaWNl''@;'; put 'put ''LmNhbGwoYXJndW1lbnRzLDApKX0sXy5ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3c/RGF0ZS5ub3coKTorbmV3IERhdGV9LF8udXRjPVosXy51bml4PWZ1bmN0aW9uIHNkKFNlKXtyZXR1cm4ga28oMWUzKlNlKX0sXy5tb250aHM9ZnVuY3Rpb24gbGQoU2UsJGUpe3JldHVybiBwYyhT''@;'; put 'put ''ZSwkZSwibW9udGhzIil9LF8uaXNEYXRlPU4sXy5sb2NhbGU9RG4sXy5pbnZhbGlkPUosXy5kdXJhdGlvbj1tbCxfLmlzTW9tZW50PV9lLF8ud2Vla2RheXM9ZnVuY3Rpb24gbTMoU2UsJGUscHQpe3JldHVybiBpYyhTZSwkZSxwdCwid2Vla2RheXMiKX0sXy5wYXJzZVpvbmU9ZnVuY3Rpb24g''@;'; put 'put ''ZzMoKXtyZXR1cm4ga28uYXBwbHkobnVsbCxhcmd1bWVudHMpLnBhcnNlWm9uZSgpfSxfLmxvY2FsZURhdGE9am4sXy5pc0R1cmF0aW9uPXRtLF8ubW9udGhzU2hvcnQ9ZnVuY3Rpb24gY20oU2UsJGUpe3JldHVybiBwYyhTZSwkZSwibW9udGhzU2hvcnQiKX0sXy53ZWVrZGF5c01pbj1mdW5j''@;'; put 'put ''dGlvbiBnYyhTZSwkZSxwdCl7cmV0dXJuIGljKFNlLCRlLHB0LCJ3ZWVrZGF5c01pbiIpfSxfLmRlZmluZUxvY2FsZT1tcixfLnVwZGF0ZUxvY2FsZT1mdW5jdGlvbiBNbihTZSwkZSl7aWYobnVsbCE9JGUpe3ZhciBwdCxEdCxvbj1mcjtudWxsIT1Kb1tTZV0mJm51bGwhPUpvW1NlXS5wYXJl''@;'; put 'put ''bnRMb2NhbGU/Sm9bU2VdLnNldCh4KEpvW1NlXS5fY29uZmlnLCRlKSk6KG51bGwhPShEdD1WdChTZSkpJiYob249RHQuX2NvbmZpZyksJGU9eChvbiwkZSksbnVsbD09RHQmJigkZS5hYmJyPVNlKSwocHQ9bmV3IEMoJGUpKS5wYXJlbnRMb2NhbGU9Sm9bU2VdLEpvW1NlXT1wdCksRG4oU2Up''@;'; put 'put ''fWVsc2UgbnVsbCE9Sm9bU2VdJiYobnVsbCE9Sm9bU2VdLnBhcmVudExvY2FsZT8oSm9bU2VdPUpvW1NlXS5wYXJlbnRMb2NhbGUsU2U9PT1EbigpJiZEbihTZSkpOm51bGwhPUpvW1NlXSYmZGVsZXRlIEpvW1NlXSk7cmV0dXJuIEpvW1NlXX0sXy5sb2NhbGVzPWZ1bmN0aW9uIEVhKCl7cmV0''@;'; put 'put ''dXJuIFQoSm8pfSxfLndlZWtkYXlzU2hvcnQ9ZnVuY3Rpb24gY2woU2UsJGUscHQpe3JldHVybiBpYyhTZSwkZSxwdCwid2Vla2RheXNTaG9ydCIpfSxfLm5vcm1hbGl6ZVVuaXRzPV90LF8ucmVsYXRpdmVUaW1lUm91bmRpbmc9ZnVuY3Rpb24galMoU2Upe3JldHVybiB2b2lkIDA9PT1TZT9Y''@;'; put 'put ''aDoiZnVuY3Rpb24iPT10eXBlb2YgU2UmJihYaD1TZSwhMCl9LF8ucmVsYXRpdmVUaW1lVGhyZXNob2xkPWZ1bmN0aW9uIEI4KFNlLCRlKXtyZXR1cm4gdm9pZCAwIT09cWhbU2VdJiYodm9pZCAwPT09JGU/cWhbU2VdOihxaFtTZV09JGUsInMiPT09U2UmJihxaC5zcz0kZS0xKSwhMCkpfSxf''@;'; put 'put ''LmNhbGVuZGFyRm9ybWF0PWZ1bmN0aW9uIHAwKFNlLCRlKXt2YXIgcHQ9U2UuZGlmZigkZSwiZGF5cyIsITApO3JldHVybiBwdDwtNj8ic2FtZUVsc2UiOnB0PC0xPyJsYXN0V2VlayI6cHQ8MD8ibGFzdERheSI6cHQ8MT8ic2FtZURheSI6cHQ8Mj8ibmV4dERheSI6cHQ8Nz8ibmV4dFdlZWsi''@;'; put 'put ''OiJzYW1lRWxzZSJ9LF8ucHJvdG90eXBlPUhpLF8uSFRNTDVfRk1UPXtEQVRFVElNRV9MT0NBTDoiWVlZWS1NTS1ERFRISDptbSIsREFURVRJTUVfTE9DQUxfU0VDT05EUzoiWVlZWS1NTS1ERFRISDptbTpzcyIsREFURVRJTUVfTE9DQUxfTVM6IllZWVktTU0tRERUSEg6bW06c3MuU1NTIixE''@;'; put 'put ''QVRFOiJZWVlZLU1NLUREIixUSU1FOiJISDptbSIsVElNRV9TRUNPTkRTOiJISDptbTpzcyIsVElNRV9NUzoiSEg6bW06c3MuU1NTIixXRUVLOiJHR0dHLVtXXVdXIixNT05USDoiWVlZWS1NTSJ9LF99KCl9LDk3NTk0OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNTAxOSksXz10''@;'; put 'put ''eXBlb2YgZ2xvYmFsVGhpcz4idSI/Z2xvYmFsOmdsb2JhbFRoaXM7Y2UuZXhwb3J0cz1mdW5jdGlvbigpe2Zvcih2YXIgVj1bXSx3PTA7dzxJLmxlbmd0aDt3KyspImZ1bmN0aW9uIj09dHlwZW9mIF9bSVt3XV0mJihWW1YubGVuZ3RoXT1JW3ddKTtyZXR1cm4gVn19LDk3NjY5OmNlPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO2NlLmV4cG9ydHM9dHlwZW9mIFJlZmxlY3Q8InUiJiZSZWZsZWN0LmdldFByb3RvdHlwZU9mfHxudWxsfSw5Nzk1MTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgZWUsST1iKDExMDgpLF89Yig3MTE2OCkscD1iKDU4NTQwKSxWPWIoMzQ2NzApLHc9Yig4NzM3MiksUD1i''@;'; put 'put ''KDU1OTg4KSxGPWIoNzk2NjIpLE49InByb3RvdHlwZSIsTz0ic2NyaXB0IixLPUYoIklFX1BST1RPIiksWj1mdW5jdGlvbigpe30sWT1mdW5jdGlvbihyZSl7cmV0dXJuIjwiK08rIj4iK3JlKyI8LyIrTysiPiJ9LFc9ZnVuY3Rpb24ocmUpe3JlLndyaXRlKFkoIiIpKSxyZS5jbG9zZSgpO3Zh''@;'; put 'put ''ciBpZT1yZS5wYXJlbnRXaW5kb3cuT2JqZWN0O3JldHVybiByZT1udWxsLGllfSxKPWZ1bmN0aW9uKCl7dHJ5e2VlPW5ldyBBY3RpdmVYT2JqZWN0KCJodG1sZmlsZSIpfWNhdGNoe31KPXR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQuZG9tYWluJiZlZT9XKGVlKTpmdW5jdGlvbigpe3Zh''@;'; put 'put ''ciB1ZSxyZT1QKCJpZnJhbWUiKSxpZT0iamF2YSIrTysiOiI7cmV0dXJuIHJlLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHcuYXBwZW5kQ2hpbGQocmUpLHJlLnNyYz1TdHJpbmcoaWUpLCh1ZT1yZS5jb250ZW50V2luZG93LmRvY3VtZW50KS5vcGVuKCksdWUud3JpdGUoWSgiZG9jdW1lbnQuRj1P''@;'; put 'put ''YmplY3QiKSksdWUuY2xvc2UoKSx1ZS5GfSgpOlcoZWUpO2Zvcih2YXIgcmU9cC5sZW5ndGg7cmUtLTspZGVsZXRlIEpbTl1bcFtyZV1dO3JldHVybiBKKCl9O1ZbS109ITAsY2UuZXhwb3J0cz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbihpZSx1ZSl7dmFyIGdlO3JldHVybiBudWxsIT09aWU/''@;'; put 'put ''KFpbTl09SShpZSksZ2U9bmV3IFosWltOXT1udWxsLGdlW0tdPWllKTpnZT1KKCksdm9pZCAwPT09dWU/Z2U6Xy5mKGdlLHVlKX19LDk4MDgzOihjZSxYKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSTshZnVuY3Rpb24oKXt2YXIgXz1YfHx7fTt2b2lkIDAhPT0oST1mdW5jdGlvbigpe3JldHVybiBf''@;'; put 'put ''fS5hcHBseShYLFtdKSkmJihjZS5leHBvcnRzPUkpLF8uZGVmYXVsdD1fO3ZhciBwPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyIsdz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLEY9L3VybFwoWyInXT8oLis/KVsiJ10/XCkvLFI9e3dvZmYyOiJmb250L3dvZmYyIix3b2Zm''@;'; put 'put ''OiJmb250L3dvZmYiLG90ZjoiYXBwbGljYXRpb24veC1mb250LW9wZW50eXBlIix0dGY6ImFwcGxpY2F0aW9uL3gtZm9udC10dGYiLGVvdDoiYXBwbGljYXRpb24vdm5kLm1zLWZvbnRvYmplY3QiLHNmbnQ6ImFwcGxpY2F0aW9uL2ZvbnQtc2ZudCIsc3ZnOiJpbWFnZS9zdmcreG1sIn0sej1m''@;'; put 'put ''dW5jdGlvbih5KXtyZXR1cm4geSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50fHx5IGluc3RhbmNlb2YgU1ZHRWxlbWVudH0sTj1mdW5jdGlvbih5KXtpZigheih5KSl0aHJvdyBuZXcgRXJyb3IoImFuIEhUTUxFbGVtZW50IG9yIFNWR0VsZW1lbnQgaXMgcmVxdWlyZWQ7IGdvdCAiK3kpfSxPPWZ1''@;'; put 'put ''bmN0aW9uKHkpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih4LEMpe3ooeSk/eCh5KTpDKG5ldyBFcnJvcigiYW4gSFRNTEVsZW1lbnQgb3IgU1ZHRWxlbWVudCBpcyByZXF1aXJlZDsgZ290ICIreSkpfSl9LFo9ZnVuY3Rpb24oeSl7dmFyIHg9T2JqZWN0LmtleXMoUikuZmlsdGVyKGZ1''@;'; put 'put ''bmN0aW9uKEMpe3JldHVybiB5LmluZGV4T2YoIi4iK0MpPjB9KS5tYXAoZnVuY3Rpb24oQyl7cmV0dXJuIFJbQ119KTtyZXR1cm4geD94WzBdOihjb25zb2xlLmVycm9yKCJVbmtub3duIGZvbnQgZm9ybWF0IGZvciAiK3krIi4gRm9udHMgbWF5IG5vdCBiZSB3b3JraW5nIGNvcnJlY3RseS4i''@;'; put 'put ''KSwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIil9LFc9ZnVuY3Rpb24oeSx4LEMpe3ZhciBUPXkudmlld0JveCYmeS52aWV3Qm94LmJhc2VWYWwmJnkudmlld0JveC5iYXNlVmFsW0NdfHxudWxsIT09eC5nZXRBdHRyaWJ1dGUoQykmJiF4LmdldEF0dHJpYnV0ZShDKS5tYXRjaCgvJSQvKSYm''@;'; put 'put ''cGFyc2VJbnQoeC5nZXRBdHRyaWJ1dGUoQykpfHx5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW0NdfHxwYXJzZUludCh4LnN0eWxlW0NdKXx8cGFyc2VJbnQod2luZG93LmdldENvbXB1dGVkU3R5bGUoeSkuZ2V0UHJvcGVydHlWYWx1ZShDKSk7cmV0dXJuIHR5cGVvZiBUPiJ1Inx8bnVsbD09''@;'; put 'put ''PVR8fGlzTmFOKHBhcnNlRmxvYXQoVCkpPzA6VH0sSj1mdW5jdGlvbih5KXtmb3IodmFyIHg9d2luZG93LmF0b2IoeS5zcGxpdCgiLCIpWzFdKSxDPXkuc3BsaXQoIiwiKVswXS5zcGxpdCgiOiIpWzFdLnNwbGl0KCI7IilbMF0sVD1uZXcgQXJyYXlCdWZmZXIoeC5sZW5ndGgpLEg9bmV3IFVp''@;'; put 'put ''bnQ4QXJyYXkoVCksaj0wO2o8eC5sZW5ndGg7aisrKUhbal09eC5jaGFyQ29kZUF0KGopO3JldHVybiBuZXcgQmxvYihbVF0se3R5cGU6Q30pfSxnZT17fSxUZT1udWxsLFplPWZ1bmN0aW9uKHkseCl7dmFyIEM9eHx8e30sVD1DLnNlbGVjdG9yUmVtYXAsSD1DLm1vZGlmeVN0eWxlLEU9Qy5m''@;'; put 'put ''b250cyxtPUMuZXhjbHVkZVVudXNlZENzcyxBPUMubW9kaWZ5Q3NzfHxmdW5jdGlvbihDZSxVZSl7cmV0dXJuKFQ/VChDZSk6Q2UpKyJ7IisoSD9IKFVlKTpVZSkrIn1cbiJ9LGFlPVtdLG5lPXR5cGVvZiBFPiJ1IixzZT1FfHxbXTtyZXR1cm4oVGV8fChUZT1BcnJheS5mcm9tKGRvY3VtZW50''@;'; put 'put ''LnN0eWxlU2hlZXRzKS5tYXAoZnVuY3Rpb24oeSl7dHJ5e3JldHVybntydWxlczp5LmNzc1J1bGVzLGhyZWY6eS5ocmVmfX1jYXRjaCh4KXtyZXR1cm4gY29uc29sZS53YXJuKCJTdHlsZXNoZWV0IGNvdWxkIG5vdCBiZSBsb2FkZWQ6ICIreS5ocmVmLHgpLHt9fX0pKSkuZm9yRWFjaChmdW5j''@;'; put 'put ''dGlvbihDZSl7dmFyIFVlPUNlLnJ1bGVzLEplPUNlLmhyZWY7VWUmJkFycmF5LmZyb20oVWUpLmZvckVhY2goZnVuY3Rpb24oaXQpe2lmKHR5cGVvZiBpdC5zdHlsZTwidSIpaWYoZnVuY3Rpb24oeSx4KXtpZih4KXRyeXtyZXR1cm4geS5xdWVyeVNlbGVjdG9yKHgpfHx5LnBhcmVudE5vZGUm''@;'; put 'put ''JnkucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yKHgpfWNhdGNoKEMpe2NvbnNvbGUud2FybignSW52YWxpZCBDU1Mgc2VsZWN0b3IgIicreCsnIicsQyl9fSh5LGl0LnNlbGVjdG9yVGV4dCkpYWUucHVzaChBKGl0LnNlbGVjdG9yVGV4dCxpdC5zdHlsZS5jc3NUZXh0KSk7ZWxzZSBpZihuZSYm''@;'; put 'put ''aXQuY3NzVGV4dC5tYXRjaCgvXkBmb250LWZhY2UvKSl7dmFyIHhlPWZ1bmN0aW9uKHkseCl7dmFyIEM9eS5jc3NUZXh0Lm1hdGNoKEYpLFQ9QyYmQ1sxXXx8IiI7aWYoVCYmIVQubWF0Y2goL15kYXRhOi8pJiYiYWJvdXQ6YmxhbmsiIT09VCl7dmFyIEg9VC5zdGFydHNXaXRoKCIuLi8iKT94''@;'; put 'put ''KyIvLi4vIitUOlQuc3RhcnRzV2l0aCgiLi8iKT94KyIvLiIrVDpUO3JldHVybnt0ZXh0OnkuY3NzVGV4dCxmb3JtYXQ6WihIKSx1cmw6SH19fShpdCxKZSk7eGUmJnNlLnB1c2goeGUpfWVsc2UgbXx8YWUucHVzaChpdC5jc3NUZXh0KX0pfSksZnVuY3Rpb24oeSl7cmV0dXJuIFByb21pc2Uu''@;'; put 'put ''YWxsKHkubWFwKGZ1bmN0aW9uKHgpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihDLFQpe2lmKGdlW3gudXJsXSlyZXR1cm4gQyhnZVt4LnVybF0pO3ZhciBIPW5ldyBYTUxIdHRwUmVxdWVzdDtILmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKCl7dmFyIGo9ZnVuY3Rpb24o''@;'; put 'put ''eSl7Zm9yKHZhciB4PSIiLEM9bmV3IFVpbnQ4QXJyYXkoeSksVD0wO1Q8Qy5ieXRlTGVuZ3RoO1QrKyl4Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKENbVF0pO3JldHVybiB3aW5kb3cuYnRvYSh4KX0oSC5yZXNwb25zZSksRT14LnRleHQucmVwbGFjZShGLCd1cmwoImRhdGE6Jyt4LmZvcm1hdCsi''@;'; put 'put ''O2Jhc2U2NCwiK2orJyIpJykrIlxuIjtnZVt4LnVybF09RSxDKEUpfSksSC5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oail7Y29uc29sZS53YXJuKCJGYWlsZWQgdG8gbG9hZCBmb250IGZyb206ICIreC51cmwsaiksZ2VbeC51cmxdPW51bGwsQyhudWxsKX0pLEguYWRkRXZl''@;'; put 'put ''bnRMaXN0ZW5lcigiYWJvcnQiLGZ1bmN0aW9uKGope2NvbnNvbGUud2FybigiQWJvcnRlZCBsb2FkaW5nIGZvbnQgZnJvbTogIit4LnVybCxqKSxDKG51bGwpfSksSC5vcGVuKCJHRVQiLHgudXJsKSxILnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLEguc2VuZCgpfSl9KSkudGhlbihmdW5j''@;'; put 'put ''dGlvbih4KXtyZXR1cm4geC5maWx0ZXIoZnVuY3Rpb24oQyl7cmV0dXJuIEN9KS5qb2luKCIiKX0pfShzZSkudGhlbihmdW5jdGlvbihDZSl7cmV0dXJuIGFlLmpvaW4oIlxuIikrQ2V9KX0sQj1mdW5jdGlvbigpe2lmKCFuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYiYmISgiZG93bmxvYWQi''@;'; put 'put ''aW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpKSlyZXR1cm57cG9wdXA6d2luZG93Lm9wZW4oKX19O18ucHJlcGFyZVN2Zz1mdW5jdGlvbihnLHkseCl7TihnKTt2YXIgQz15fHx7fSxUPUMubGVmdCxIPXZvaWQgMD09PVQ/MDpULGo9Qy50b3AsRT12b2lkIDA9PT1qPzA6aixtPUMud2lk''@;'; put 'put ''dGgsQT1DLmhlaWdodCxhZT1DLnNjYWxlLG5lPXZvaWQgMD09PWFlPzE6YWUsc2U9Qy5yZXNwb25zaXZlLENlPXZvaWQgMCE9PXNlJiZzZSxVZT1DLmV4Y2x1ZGVDc3MsSmU9dm9pZCAwIT09VWUmJlVlO3JldHVybiBmdW5jdGlvbih5KXtyZXR1cm4gUHJvbWlzZS5hbGwoQXJyYXkuZnJvbSh5''@;'; put 'put ''LnF1ZXJ5U2VsZWN0b3JBbGwoImltYWdlIikpLm1hcChmdW5jdGlvbih4KXt2YXIgQz14LmdldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwiaHJlZiIpfHx4LmdldEF0dHJpYnV0ZSgiaHJlZiIpO3JldHVybiBDPyhmdW5jdGlvbih5KXtyZXR1cm4geSYmMD09''@;'; put 'put ''PXkubGFzdEluZGV4T2YoImh0dHAiLDApJiYtMT09PXkubGFzdEluZGV4T2Yod2luZG93LmxvY2F0aW9uLmhvc3QpfShDKSYmKEMrPSgtMT09PUMuaW5kZXhPZigiPyIpPyI/IjoiJiIpKyJ0PSIrKG5ldyBEYXRlKS52YWx1ZU9mKCkpLG5ldyBQcm9taXNlKGZ1bmN0aW9uKFQsSCl7dmFyIGo9''@;'; put 'put ''ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksRT1uZXcgSW1hZ2U7RS5jcm9zc09yaWdpbj0iYW5vbnltb3VzIixFLnNyYz1DLEUub25lcnJvcj1mdW5jdGlvbigpe3JldHVybiBIKG5ldyBFcnJvcigiQ291bGQgbm90IGxvYWQgIitDKSl9LEUub25sb2FkPWZ1bmN0aW9uKCl7ai53''@;'; put 'put ''aWR0aD1FLndpZHRoLGouaGVpZ2h0PUUuaGVpZ2h0LGouZ2V0Q29udGV4dCgiMmQiKS5kcmF3SW1hZ2UoRSwwLDApLHguc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCJocmVmIixqLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIikpLFQoITApfX0pKTpQcm9taXNl''@;'; put 'put ''LnJlc29sdmUobnVsbCl9KSl9KGcpLnRoZW4oZnVuY3Rpb24oKXt2YXIgaXQ9Zy5jbG9uZU5vZGUoITApO2l0LnN0eWxlLmJhY2tncm91bmRDb2xvcj0oeXx8e30pLmJhY2tncm91bmRDb2xvcnx8Zy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I7dmFyIHhlPWZ1bmN0aW9uKHkseCxDLFQpe2lmKCJz''@;'; put 'put ''dmciPT09eS50YWdOYW1lKXJldHVybnt3aWR0aDpDfHxXKHkseCwid2lkdGgiKSxoZWlnaHQ6VHx8Vyh5LHgsImhlaWdodCIpfTtpZih5LmdldEJCb3gpe3ZhciBIPXkuZ2V0QkJveCgpO3JldHVybnt3aWR0aDpILngrSC53aWR0aCxoZWlnaHQ6SC55K0guaGVpZ2h0fX19KGcsaXQsbSxBKSx5''@;'; put 'put ''ZT14ZS53aWR0aCxLZT14ZS5oZWlnaHQ7aWYoInN2ZyIhPT1nLnRhZ05hbWUpe2lmKCFnLmdldEJCb3gpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiQXR0ZW1wdGVkIHRvIHJlbmRlciBub24tU1ZHIGVsZW1lbnQiLGcpO251bGwhPWl0LmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIikmJml0''@;'; put 'put ''LnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixpdC5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpLnJlcGxhY2UoL3RyYW5zbGF0ZVwoLio/XCkvLCIiKSk7dmFyIGplPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJzdmciKTtqZS5hcHBlbmRD''@;'; put 'put ''aGlsZChpdCksaXQ9amV9aWYoaXQuc2V0QXR0cmlidXRlKCJ2ZXJzaW9uIiwiMS4xIiksaXQuc2V0QXR0cmlidXRlKCJ2aWV3Qm94IixbSCxFLHllLEtlXS5qb2luKCIgIikpLGl0LmdldEF0dHJpYnV0ZSgieG1sbnMiKXx8aXQuc2V0QXR0cmlidXRlTlMocCwieG1sbnMiLHcpLGl0LmdldEF0''@;'; put 'put ''dHJpYnV0ZSgieG1sbnM6eGxpbmsiKXx8aXQuc2V0QXR0cmlidXRlTlMocCwieG1sbnM6eGxpbmsiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiksQ2U/KGl0LnJlbW92ZUF0dHJpYnV0ZSgid2lkdGgiKSxpdC5yZW1vdmVBdHRyaWJ1dGUoImhlaWdodCIpLGl0LnNldEF0dHJpYnV0''@;'; put 'put ''ZSgicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaW5ZTWluIG1lZXQiKSk6KGl0LnNldEF0dHJpYnV0ZSgid2lkdGgiLHllKm5lKSxpdC5zZXRBdHRyaWJ1dGUoImhlaWdodCIsS2UqbmUpKSxBcnJheS5mcm9tKGl0LnF1ZXJ5U2VsZWN0b3JBbGwoImZvcmVpZ25PYmplY3QgPiAqIikpLmZvckVh''@;'; put 'put ''Y2goZnVuY3Rpb24oTGUpe0xlLnNldEF0dHJpYnV0ZU5TKHAsInhtbG5zIiwic3ZnIj09PUxlLnRhZ05hbWU/dzoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpfSksIUplKXJldHVybiBaZShnLHkpLnRoZW4oZnVuY3Rpb24oTGUpe3ZhciBSZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50''@;'; put 'put ''KCJzdHlsZSIpO1JlLnNldEF0dHJpYnV0ZSgidHlwZSIsInRleHQvY3NzIiksUmUuaW5uZXJIVE1MPSI8IVtDREFUQVtcbiIrTGUrIlxuXV0+Ijt2YXIgVmU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGVmcyIpO1ZlLmFwcGVuZENoaWxkKFJlKSxpdC5pbnNlcnRCZWZvcmUoVmUsaXQuZmly''@;'; put 'put ''c3RDaGlsZCk7dmFyIEFlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO0FlLmFwcGVuZENoaWxkKGl0KTt2YXIgRGU9QWUuaW5uZXJIVE1MLnJlcGxhY2UoL05TXGQrOmhyZWYvZ2ksJ3htbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bGluazpocmVmJyk7''@;'; put 'put ''aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHgpcmV0dXJue3NyYzpEZSx3aWR0aDp5ZSxoZWlnaHQ6S2V9O3goRGUseWUsS2UpfSk7dmFyIGtlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2tlLmFwcGVuZENoaWxkKGl0KTt2YXIgSGU9a2UuaW5uZXJIVE1MO2lmKCJmdW5jdGlvbiIhPXR5''@;'; put 'put ''cGVvZiB4KXJldHVybntzcmM6SGUsd2lkdGg6eWUsaGVpZ2h0OktlfTt4KEhlLHllLEtlKX0pfSxfLnN2Z0FzRGF0YVVyaT1mdW5jdGlvbihnLHkseCl7cmV0dXJuIE4oZyksXy5wcmVwYXJlU3ZnKGcseSkudGhlbihmdW5jdGlvbihDKXt2YXIgSD1DLndpZHRoLGo9Qy5oZWlnaHQsRT0iZGF0''@;'; put 'put ''YTppbWFnZS9zdmcreG1sO2Jhc2U2NCwiK3dpbmRvdy5idG9hKGZ1bmN0aW9uKHkpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KHkpLnJlcGxhY2UoLyUoWzAtOUEtRl17Mn0pL2csZnVuY3Rpb24oeCxDKXt2YXIgVD1TdHJpbmcuZnJvbUNoYXJDb2RlKCIw''@;'; put 'put ''eCIrQyk7cmV0dXJuIiUiPT09VD8iJTI1IjpUfSkpfSgnPD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0''@;'; put 'put ''ZCIgWzwhRU5USVRZIG5ic3AgIiYjMTYwOyI+XT4nK0Muc3JjKSk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHgmJngoRSxILGopLEV9KX0sXy5zdmdBc1BuZ1VyaT1mdW5jdGlvbihnLHkseCl7TihnKTt2YXIgQz15fHx7fSxUPUMuZW5jb2RlclR5cGUsSD12b2lkIDA9PT1UPyJpbWFnZS9w''@;'; put 'put ''bmciOlQsaj1DLmVuY29kZXJPcHRpb25zLEU9dm9pZCAwPT09aj8uODpqLG09Qy5jYW52ZyxBPWZ1bmN0aW9uKG5lKXt2YXIgc2U9bmUuc3JjLENlPW5lLndpZHRoLFVlPW5lLmhlaWdodCxKZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxpdD1KZS5nZXRDb250ZXh0KCIyZCIp''@;'; put 'put ''LHhlPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxO0plLndpZHRoPUNlKnhlLEplLmhlaWdodD1VZSp4ZSxKZS5zdHlsZS53aWR0aD1KZS53aWR0aCsicHgiLEplLnN0eWxlLmhlaWdodD1KZS5oZWlnaHQrInB4IixpdC5zZXRUcmFuc2Zvcm0oeGUsMCwwLHhlLDAsMCksbT9tKEplLHNlKTpp''@;'; put 'put ''dC5kcmF3SW1hZ2Uoc2UsMCwwKTt2YXIgeWU9dm9pZCAwO3RyeXt5ZT1KZS50b0RhdGFVUkwoSCxFKX1jYXRjaChLZSl7aWYodHlwZW9mIFNlY3VyaXR5RXJyb3I8InUiJiZLZSBpbnN0YW5jZW9mIFNlY3VyaXR5RXJyb3J8fCJTZWN1cml0eUVycm9yIj09PUtlLm5hbWUpcmV0dXJuIHZvaWQg''@;'; put 'put ''Y29uc29sZS5lcnJvcigiUmVuZGVyZWQgU1ZHIGltYWdlcyBjYW5ub3QgYmUgZG93bmxvYWRlZCBpbiB0aGlzIGJyb3dzZXIuIik7dGhyb3cgS2V9cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHgmJngoeWUsSmUud2lkdGgsSmUuaGVpZ2h0KSxQcm9taXNlLnJlc29sdmUoeWUpfTtyZXR1cm4g''@;'; put 'put ''bT9fLnByZXBhcmVTdmcoZyx5KS50aGVuKEEpOl8uc3ZnQXNEYXRhVXJpKGcseSkudGhlbihmdW5jdGlvbihhZSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG5lLHNlKXt2YXIgQ2U9bmV3IEltYWdlO0NlLm9ubG9hZD1mdW5jdGlvbigpe3JldHVybiBuZShBKHtzcmM6Q2Usd2lkdGg6''@;'; put 'put ''Q2Uud2lkdGgsaGVpZ2h0OkNlLmhlaWdodH0pKX0sQ2Uub25lcnJvcj1mdW5jdGlvbigpe3NlKCJUaGVyZSB3YXMgYW4gZXJyb3IgbG9hZGluZyB0aGUgZGF0YSBVUkkgYXMgYW4gaW1hZ2Ugb24gdGhlIGZvbGxvd2luZyBTVkdcbiIrd2luZG93LmF0b2IoYWUuc2xpY2UoMjYpKSsiT3BlbiB0''@;'; put 'put ''aGUgZm9sbG93aW5nIGxpbmsgdG8gc2VlIGJyb3dzZXIncyBkaWFnbm9zaXNcbiIrYWUpfSxDZS5zcmM9YWV9KX0pfSxfLmRvd25sb2FkPWZ1bmN0aW9uKGcseSx4KXtpZihuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYiluYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYihKKHkpLGcpO2Vsc2V7''@;'; put 'put ''dmFyIEM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2lmKCJkb3dubG9hZCJpbiBDKXtDLmRvd25sb2FkPWcsQy5zdHlsZS5kaXNwbGF5PSJub25lIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKEMpO3RyeXt2YXIgVD1KKHkpLEg9VVJMLmNyZWF0ZU9iamVjdFVSTChUKTtDLmhyZWY9''@;'; put 'put ''SCxDLm9uY2xpY2s9ZnVuY3Rpb24oKXtyZXR1cm4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7cmV0dXJuIFVSTC5yZXZva2VPYmplY3RVUkwoSCl9KX19Y2F0Y2goail7Y29uc29sZS5lcnJvcihqKSxjb25zb2xlLndhcm4oIkVycm9yIHdoaWxlIGdldHRpbmcgb2JqZWN0IFVS''@;'; put 'put ''TC4gRmFsbGluZyBiYWNrIHRvIHN0cmluZyBVUkwuIiksQy5ocmVmPXl9Qy5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoQyl9ZWxzZSB4JiZ4LnBvcHVwJiYoeC5wb3B1cC5kb2N1bWVudC50aXRsZT1nLHgucG9wdXAubG9jYXRpb24ucmVwbGFjZSh5KSl9fSxfLnNhdmVTdmc9''@;'; put 'put ''ZnVuY3Rpb24oZyx5LHgpe3ZhciBDPUIoKTtyZXR1cm4gTyhnKS50aGVuKGZ1bmN0aW9uKFQpe3JldHVybiBfLnN2Z0FzRGF0YVVyaShULHh8fHt9KX0pLnRoZW4oZnVuY3Rpb24oVCl7cmV0dXJuIF8uZG93bmxvYWQoeSxULEMpfSl9LF8uc2F2ZVN2Z0FzUG5nPWZ1bmN0aW9uKGcseSx4KXt2''@;'; put 'put ''YXIgQz1CKCk7cmV0dXJuIE8oZykudGhlbihmdW5jdGlvbihUKXtyZXR1cm4gXy5zdmdBc1BuZ1VyaShULHh8fHt9KX0pLnRoZW4oZnVuY3Rpb24oVCl7cmV0dXJuIF8uZG93bmxvYWQoeSxULEMpfSl9fSgpfSw5ODM1MjpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7SS5kZWZpbmVMb2NhbGUoImZvIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJzX2Fwclx4ZWRsX21haV9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcl9hcHJfbWFpX2p1''@;'; put 'put ''bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoic3VubnVkYWd1cl9tXHhlMW5hZGFndXJfdFx4ZmRzZGFndXJfbWlrdWRhZ3VyX2hceGYzc2RhZ3VyX2ZyXHhlZGdnamFkYWd1cl9sZXlnYXJkYWd1ciIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzdW5f''@;'; put 'put ''bVx4ZTFuX3RceGZkc19taWtfaFx4ZjNzX2ZyXHhlZF9sZXkiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InN1X21ceGUxX3RceGZkX21pX2hceGYzX2ZyX2xlIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJE''@;'; put 'put ''IE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBELiBNTU1NLCBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltceGNkIGRhZyBrbC5dIExUIixuZXh0RGF5OiJbXHhjZCBtb3JnaW4ga2wuXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2tsLl0gTFQiLGxh''@;'; put 'put ''c3REYXk6IltceGNkIGdqXHhlMXIga2wuXSBMVCIsbGFzdFdlZWs6IltzXHhlZFx4ZjBzdHVdIGRkZGQgW2tsXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToidW0gJXMiLHBhc3Q6IiVzIHNceGVkXHhmMGFuaSIsczoiZlx4ZTEgc2VrdW5kIixzczoiJWQgc2VrdW5k''@;'; put 'put ''aXIiLG06ImVpbiBtaW51dHR1ciIsbW06IiVkIG1pbnV0dGlyIixoOiJlaW4gdFx4ZWRtaSIsaGg6IiVkIHRceGVkbWFyIixkOiJlaW4gZGFndXIiLGRkOiIlZCBkYWdhciIsTToiZWluIG1ceGUxbmFceGYwdXIiLE1NOiIlZCBtXHhlMW5hXHhmMGlyIix5OiJlaXR0IFx4ZTFyIix5eToiJWQg''@;'; put 'put ''XHhlMXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sOTg2MTM6KGNlLFgsYik9Pnt2YXIgST1iKDY1NjY3KSxfPWIoMzA3MTUpLHA9YigzNzE5NiksVj1iKDE2NTA4KSx3PWIoMTQxMDUp''@;'; put 'put ''LFA9Yig2NzIxMSksRj1iKDEwNTY4KSxSPWIoMjcwNTQpLkJ1ZmZlcjtjZS5leHBvcnRzPWZ1bmN0aW9uKFosWSxXKXt2YXIgcTtxPVoucGFkZGluZz9aLnBhZGRpbmc6Vz8xOjQ7dmFyIHJlLGVlPUkoWiksSj1lZS5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtpZihZLmxlbmd0aD5KfHxuZXcgVihZ''@;'; put 'put ''KS5jbXAoZWUubW9kdWx1cyk+PTApdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7cmU9Vz9GKG5ldyBWKFkpLGVlKTp3KFksZWUpO3ZhciBpZT1SLmFsbG9jKEotcmUubGVuZ3RoKTtpZihyZT1SLmNvbmNhdChbaWUscmVdLEopLDQ9PT1xKXJldHVybiBmdW5jdGlvbiB6KEss''@;'; put 'put ''Wil7dmFyIFk9Sy5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxXPVAoInNoYTEiKS51cGRhdGUoUi5hbGxvYygwKSkuZGlnZXN0KCkscT1XLmxlbmd0aDtpZigwIT09WlswXSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTt2YXIgZWU9Wi5zbGljZSgxLHErMSksSj1aLnNsaWNlKHEr''@;'; put 'put ''MSkscmU9cChlZSxfKEoscSkpLGllPXAoSixfKHJlLFktcS0xKSk7aWYoZnVuY3Rpb24gTyhLLFope0s9Ui5mcm9tKEspLFo9Ui5mcm9tKFopO3ZhciBZPTAsVz1LLmxlbmd0aDtLLmxlbmd0aCE9PVoubGVuZ3RoJiYoWSsrLFc9TWF0aC5taW4oSy5sZW5ndGgsWi5sZW5ndGgpKTtmb3IodmFy''@;'; put 'put ''IHE9LTE7KytxPFc7KVkrPUtbcV1eWltxXTtyZXR1cm4gWX0oVyxpZS5zbGljZSgwLHEpKSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtmb3IodmFyIHVlPXE7MD09PWllW3VlXTspdWUrKztpZigxIT09aWVbdWUrK10pdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVy''@;'; put 'put ''cm9yIik7cmV0dXJuIGllLnNsaWNlKHVlKX0oZWUscmUpO2lmKDE9PT1xKXJldHVybiBmdW5jdGlvbiBOKEssWixZKXtmb3IodmFyIFc9Wi5zbGljZSgwLDIpLHE9MixlZT0wOzAhPT1aW3ErK107KWlmKHE+PVoubGVuZ3RoKXtlZSsrO2JyZWFrfXZhciBKPVouc2xpY2UoMixxLTEpO2lmKCgi''@;'; put 'put ''MDAwMiIhPT1XLnRvU3RyaW5nKCJoZXgiKSYmIVl8fCIwMDAxIiE9PVcudG9TdHJpbmcoImhleCIpJiZZKSYmZWUrKyxKLmxlbmd0aDw4JiZlZSsrLGVlKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO3JldHVybiBaLnNsaWNlKHEpfSgwLHJlLFcpO2lmKDM9PT1xKXJldHVy''@;'; put 'put ''biByZTt0aHJvdyBuZXcgRXJyb3IoInVua25vd24gcGFkZGluZyIpfX0sOTg4Mjg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig4ODcyMyksXz1iKDMxMzYpLHA9Xy5nZXROQUYsVj1fLmdldEpTRix3PV8uYXNzZXJ0O2Z1bmN0aW9uIFAoUix6KXt0aGlzLnR5cGU9Uix0aGlzLnA9''@;'; put 'put ''bmV3IEkoei5wLDE2KSx0aGlzLnJlZD16LnByaW1lP0kucmVkKHoucHJpbWUpOkkubW9udCh0aGlzLnApLHRoaXMuemVybz1uZXcgSSgwKS50b1JlZCh0aGlzLnJlZCksdGhpcy5vbmU9bmV3IEkoMSkudG9SZWQodGhpcy5yZWQpLHRoaXMudHdvPW5ldyBJKDIpLnRvUmVkKHRoaXMucmVkKSx0''@;'; put 'put ''aGlzLm49ei5uJiZuZXcgSSh6Lm4sMTYpLHRoaXMuZz16LmcmJnRoaXMucG9pbnRGcm9tSlNPTih6Lmcsei5nUmVkKSx0aGlzLl93bmFmVDE9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUMj1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQzPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDQ9bmV3IEFy''@;'; put 'put ''cmF5KDQpLHRoaXMuX2JpdExlbmd0aD10aGlzLm4/dGhpcy5uLmJpdExlbmd0aCgpOjA7dmFyIE49dGhpcy5uJiZ0aGlzLnAuZGl2KHRoaXMubik7IU58fE4uY21wbigxMDApPjA/dGhpcy5yZWROPW51bGw6KHRoaXMuX21heHdlbGxUcmljaz0hMCx0aGlzLnJlZE49dGhpcy5uLnRvUmVkKHRo''@;'; put 'put ''aXMucmVkKSl9ZnVuY3Rpb24gRihSLHope3RoaXMuY3VydmU9Uix0aGlzLnR5cGU9eix0aGlzLnByZWNvbXB1dGVkPW51bGx9Y2UuZXhwb3J0cz1QLFAucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sUC5wcm90b3R5cGUudmFs''@;'; put 'put ''aWRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxQLnByb3RvdHlwZS5fZml4ZWROYWZNdWw9ZnVuY3Rpb24oeixOKXt3KHoucHJlY29tcHV0ZWQpO3ZhciBPPXouX2dldERvdWJsZXMoKSxLPXAoTiwxLHRoaXMuX2JpdExlbmd0aCksWj0oMTw8Ty5z''@;'; put 'put ''dGVwKzEpLShPLnN0ZXAlMj09MD8yOjEpO1ovPTM7dmFyIFcscSxZPVtdO2ZvcihXPTA7VzxLLmxlbmd0aDtXKz1PLnN0ZXApe3E9MDtmb3IodmFyIGVlPVcrTy5zdGVwLTE7ZWU+PVc7ZWUtLSlxPShxPDwxKStLW2VlXTtZLnB1c2gocSl9Zm9yKHZhciBKPXRoaXMuanBvaW50KG51bGwsbnVs''@;'; put 'put ''bCxudWxsKSxyZT10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksaWU9WjtpZT4wO2llLS0pe2ZvcihXPTA7VzxZLmxlbmd0aDtXKyspKHE9WVtXXSk9PT1pZT9yZT1yZS5taXhlZEFkZChPLnBvaW50c1tXXSk6cT09PS1pZSYmKHJlPXJlLm1peGVkQWRkKE8ucG9pbnRzW1ddLm5lZygpKSk7''@;'; put 'put ''Sj1KLmFkZChyZSl9cmV0dXJuIEoudG9QKCl9LFAucHJvdG90eXBlLl93bmFmTXVsPWZ1bmN0aW9uKHosTil7Zm9yKHZhciBPPTQsSz16Ll9nZXROQUZQb2ludHMoTyksWj1LLnBvaW50cyxZPXAoTixPPUsud25kLHRoaXMuX2JpdExlbmd0aCksVz10aGlzLmpwb2ludChudWxsLG51bGwsbnVs''@;'; put 'put ''bCkscT1ZLmxlbmd0aC0xO3E+PTA7cS0tKXtmb3IodmFyIGVlPTA7cT49MCYmMD09PVlbcV07cS0tKWVlKys7aWYocT49MCYmZWUrKyxXPVcuZGJscChlZSkscTwwKWJyZWFrO3ZhciBKPVlbcV07dygwIT09SiksVz0iYWZmaW5lIj09PXoudHlwZT9XLm1peGVkQWRkKEo+MD9aW0otMT4+MV06''@;'; put 'put ''WlstSi0xPj4xXS5uZWcoKSk6Vy5hZGQoSj4wP1pbSi0xPj4xXTpaWy1KLTE+PjFdLm5lZygpKX1yZXR1cm4iYWZmaW5lIj09PXoudHlwZT9XLnRvUCgpOld9LFAucHJvdG90eXBlLl93bmFmTXVsQWRkPWZ1bmN0aW9uKHosTixPLEssWil7dmFyIEoscmUsaWUsWT10aGlzLl93bmFmVDEsVz10''@;'; put 'put ''aGlzLl93bmFmVDIscT10aGlzLl93bmFmVDMsZWU9MDtmb3IoSj0wO0o8SztKKyspe3ZhciB1ZT0oaWU9TltKXSkuX2dldE5BRlBvaW50cyh6KTtZW0pdPXVlLnduZCxXW0pdPXVlLnBvaW50c31mb3IoSj1LLTE7Sj49MTtKLT0yKXt2YXIgZ2U9Si0xLF9lPUo7aWYoMT09PVlbZ2VdJiYxPT09''@;'; put 'put ''WVtfZV0pe3ZhciBUZT1bTltnZV0sbnVsbCxudWxsLE5bX2VdXTswPT09TltnZV0ueS5jbXAoTltfZV0ueSk/KFRlWzFdPU5bZ2VdLmFkZChOW19lXSksVGVbMl09TltnZV0udG9KKCkubWl4ZWRBZGQoTltfZV0ubmVnKCkpKTowPT09TltnZV0ueS5jbXAoTltfZV0ueS5yZWROZWcoKSk/KFRl''@;'; put 'put ''WzFdPU5bZ2VdLnRvSigpLm1peGVkQWRkKE5bX2VdKSxUZVsyXT1OW2dlXS5hZGQoTltfZV0ubmVnKCkpKTooVGVbMV09TltnZV0udG9KKCkubWl4ZWRBZGQoTltfZV0pLFRlWzJdPU5bZ2VdLnRvSigpLm1peGVkQWRkKE5bX2VdLm5lZygpKSk7dmFyIE1lPVstMywtMSwtNSwtNywwLDcsNSwx''@;'; put 'put ''LDNdLFplPVYoT1tnZV0sT1tfZV0pO2ZvcihlZT1NYXRoLm1heChaZVswXS5sZW5ndGgsZWUpLHFbZ2VdPW5ldyBBcnJheShlZSkscVtfZV09bmV3IEFycmF5KGVlKSxyZT0wO3JlPGVlO3JlKyspcVtnZV1bcmVdPU1lWzMqKDErKDB8WmVbMF1bcmVdKSkrKDErKDB8WmVbMV1bcmVdKSldLHFb''@;'; put 'put ''X2VdW3JlXT0wLFdbZ2VdPVRlfWVsc2UgcVtnZV09cChPW2dlXSxZW2dlXSx0aGlzLl9iaXRMZW5ndGgpLHFbX2VdPXAoT1tfZV0sWVtfZV0sdGhpcy5fYml0TGVuZ3RoKSxlZT1NYXRoLm1heChxW2dlXS5sZW5ndGgsZWUpLGVlPU1hdGgubWF4KHFbX2VdLmxlbmd0aCxlZSl9dmFyIHk9dGhp''@;'; put 'put ''cy5qcG9pbnQobnVsbCxudWxsLG51bGwpLHg9dGhpcy5fd25hZlQ0O2ZvcihKPWVlO0o+PTA7Si0tKXtmb3IodmFyIEM9MDtKPj0wOyl7dmFyIFQ9ITA7Zm9yKHJlPTA7cmU8SztyZSsrKXhbcmVdPTB8cVtyZV1bSl0sMCE9PXhbcmVdJiYoVD0hMSk7aWYoIVQpYnJlYWs7QysrLEotLX1pZihK''@;'; put 'put ''Pj0wJiZDKysseT15LmRibHAoQyksSjwwKWJyZWFrO2ZvcihyZT0wO3JlPEs7cmUrKyl7dmFyIEg9eFtyZV07MCE9PUgmJihIPjA/aWU9V1tyZV1bSC0xPj4xXTpIPDAmJihpZT1XW3JlXVstSC0xPj4xXS5uZWcoKSkseT0iYWZmaW5lIj09PWllLnR5cGU/eS5taXhlZEFkZChpZSk6eS5hZGQo''@;'; put 'put ''aWUpKX19Zm9yKEo9MDtKPEs7SisrKVdbSl09bnVsbDtyZXR1cm4gWj95OnkudG9QKCl9LFAuQmFzZVBvaW50PUYsRi5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxGLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB0aGlzLmN1cnZlLnZhbGlkYXRlKHRoaXMpfSxQLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbih6LE4pe3o9Xy50b0FycmF5KHosTik7dmFyIE89dGhpcy5wLmJ5dGVMZW5ndGgoKTtpZigoND09PXpbMF18fDY9PT16WzBdfHw3PT09elswXSkmJnoubGVuZ3RoLTE9PTIqTylyZXR1''@;'; put 'put ''cm4gNj09PXpbMF0/dyh6W3oubGVuZ3RoLTFdJTI9PTApOjc9PT16WzBdJiZ3KHpbei5sZW5ndGgtMV0lMj09MSksdGhpcy5wb2ludCh6LnNsaWNlKDEsMStPKSx6LnNsaWNlKDErTywxKzIqTykpO2lmKCgyPT09elswXXx8Mz09PXpbMF0pJiZ6Lmxlbmd0aC0xPT09TylyZXR1cm4gdGhpcy5w''@;'; put 'put ''b2ludEZyb21YKHouc2xpY2UoMSwxK08pLDM9PT16WzBdKTt0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcG9pbnQgZm9ybWF0Iil9LEYucHJvdG90eXBlLmVuY29kZUNvbXByZXNzZWQ9ZnVuY3Rpb24oeil7cmV0dXJuIHRoaXMuZW5jb2RlKHosITApfSxGLnByb3RvdHlwZS5fZW5jb2RlPWZ1''@;'; put 'put ''bmN0aW9uKHope3ZhciBOPXRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCksTz10aGlzLmdldFgoKS50b0FycmF5KCJiZSIsTik7cmV0dXJuIHo/W3RoaXMuZ2V0WSgpLmlzRXZlbigpPzI6M10uY29uY2F0KE8pOls0XS5jb25jYXQoTyx0aGlzLmdldFkoKS50b0FycmF5KCJiZSIsTikpfSxGLnBy''@;'; put 'put ''b3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oeixOKXtyZXR1cm4gXy5lbmNvZGUodGhpcy5fZW5jb2RlKE4pLHopfSxGLnByb3RvdHlwZS5wcmVjb21wdXRlPWZ1bmN0aW9uKHope2lmKHRoaXMucHJlY29tcHV0ZWQpcmV0dXJuIHRoaXM7dmFyIE49e2RvdWJsZXM6bnVsbCxuYWY6bnVsbCxiZXRh''@;'; put 'put ''Om51bGx9O3JldHVybiBOLm5hZj10aGlzLl9nZXROQUZQb2ludHMoOCksTi5kb3VibGVzPXRoaXMuX2dldERvdWJsZXMoNCx6KSxOLmJldGE9dGhpcy5fZ2V0QmV0YSgpLHRoaXMucHJlY29tcHV0ZWQ9Tix0aGlzfSxGLnByb3RvdHlwZS5faGFzRG91Ymxlcz1mdW5jdGlvbih6KXtpZighdGhp''@;'; put 'put ''cy5wcmVjb21wdXRlZClyZXR1cm4hMTt2YXIgTj10aGlzLnByZWNvbXB1dGVkLmRvdWJsZXM7cmV0dXJuISFOJiZOLnBvaW50cy5sZW5ndGg+PU1hdGguY2VpbCgoei5iaXRMZW5ndGgoKSsxKS9OLnN0ZXApfSxGLnByb3RvdHlwZS5fZ2V0RG91Ymxlcz1mdW5jdGlvbih6LE4pe2lmKHRoaXMu''@;'; put 'put ''cHJlY29tcHV0ZWQmJnRoaXMucHJlY29tcHV0ZWQuZG91YmxlcylyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO2Zvcih2YXIgTz1bdGhpc10sSz10aGlzLFo9MDtaPE47Wis9eil7Zm9yKHZhciBZPTA7WTx6O1krKylLPUsuZGJsKCk7Ty5wdXNoKEspfXJldHVybntzdGVwOnoscG9p''@;'; put 'put ''bnRzOk99fSxGLnByb3RvdHlwZS5fZ2V0TkFGUG9pbnRzPWZ1bmN0aW9uKHope2lmKHRoaXMucHJlY29tcHV0ZWQmJnRoaXMucHJlY29tcHV0ZWQubmFmKXJldHVybiB0aGlzLnByZWNvbXB1dGVkLm5hZjtmb3IodmFyIE49W3RoaXNdLE89KDE8PHopLTEsSz0xPT09Tz9udWxsOnRoaXMuZGJs''@;'; put 'put ''KCksWj0xO1o8TztaKyspTltaXT1OW1otMV0uYWRkKEspO3JldHVybnt3bmQ6eixwb2ludHM6Tn19LEYucHJvdG90eXBlLl9nZXRCZXRhPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LEYucHJvdG90eXBlLmRibHA9ZnVuY3Rpb24oeil7Zm9yKHZhciBOPXRoaXMsTz0wO088ejtPKyspTj1OLmRi''@;'; put 'put ''bCgpO3JldHVybiBOfX0sOTg4NTQ6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig1ODYwNyksXz1FcnJvcixwPUkoIiIucmVwbGFjZSksVj1TdHJpbmcobmV3IF8oInp4Y2FzZCIpLnN0YWNrKSx3PS9cblxzKmF0IFteOl0qOlteXG5dKi8sUD13LnRlc3QoVik7Y2UuZXhwb3J0cz1m''@;'; put 'put ''dW5jdGlvbihGLFIpe2lmKFAmJiJzdHJpbmciPT10eXBlb2YgRiYmIV8ucHJlcGFyZVN0YWNrVHJhY2UpZm9yKDtSLS07KUY9cChGLHcsIiIpO3JldHVybiBGfX0sOTg5MTA6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig2NTk5MiksXz1iKDc5NDc3KSxwPWIoOTU3MzEpO2NlLmV4''@;'; put 'put ''cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gcChJLF8sYXJndW1lbnRzKX19LDk5MTI5OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJ1Q2hhcnMiOlsxMjgsMTY1LDE2OSwxNzgsMTg0LDIxNiwyMjYsMjM1LDIzOCwyNDQsMjQ4LDI1MSwyNTMsMjU4LDI3NiwyODQs''@;'; put 'put ''MzAwLDMyNSwzMjksMzM0LDM2NCw0NjMsNDY1LDQ2Nyw0NjksNDcxLDQ3Myw0NzUsNDc3LDUwNiw1OTQsNjEwLDcxMiw3MTYsNzMwLDkzMCw5MzgsOTYyLDk3MCwxMDI2LDExMDQsMTEwNiw4MjA5LDgyMTUsODIxOCw4MjIyLDgyMzEsODI0MSw4MjQ0LDgyNDYsODI1Miw4MzY1LDg0NTIsODQ1''@;'; put 'put ''NCw4NDU4LDg0NzEsODQ4Miw4NTU2LDg1NzAsODU5Niw4NjAyLDg3MTMsODcyMCw4NzIyLDg3MjYsODczMSw4NzM3LDg3NDAsODc0Miw4NzQ4LDg3NTEsODc2MCw4NzY2LDg3NzcsODc4MSw4Nzg3LDg4MDIsODgwOCw4ODE2LDg4NTQsODg1OCw4ODcwLDg4OTYsODk3OSw5MzIyLDkzNzIsOTU0''@;'; put 'put ''OCw5NTg4LDk2MTYsOTYyMiw5NjM0LDk2NTIsOTY2Miw5NjcyLDk2NzYsOTY4MCw5NzAyLDk3MzUsOTczOCw5NzkzLDk3OTUsMTE5MDYsMTE5MDksMTE5MTMsMTE5MTcsMTE5MjgsMTE5NDQsMTE5NDcsMTE5NTEsMTE5NTYsMTE5NjAsMTE5NjQsMTE5NzksMTIyODQsMTIyOTIsMTIzMTIsMTIz''@;'; put 'put ''MTksMTIzMzAsMTIzNTEsMTI0MzYsMTI0NDcsMTI1MzUsMTI1NDMsMTI1ODYsMTI4NDIsMTI4NTAsMTI5NjQsMTMyMDAsMTMyMTUsMTMyMTgsMTMyNTMsMTMyNjMsMTMyNjcsMTMyNzAsMTMzODQsMTM0MjgsMTM3MjcsMTM4MzksMTM4NTEsMTQ2MTcsMTQ3MDMsMTQ4MDEsMTQ4MTYsMTQ5NjQs''@;'; put 'put ''MTUxODMsMTU0NzEsMTU1ODUsMTY0NzEsMTY3MzYsMTcyMDgsMTczMjUsMTczMzAsMTczNzQsMTc2MjMsMTc5OTcsMTgwMTgsMTgyMTIsMTgyMTgsMTgzMDEsMTgzMTgsMTg3NjAsMTg4MTEsMTg4MTQsMTg4MjAsMTg4MjMsMTg4NDQsMTg4NDgsMTg4NzIsMTk1NzYsMTk2MjAsMTk3MzgsMTk4''@;'; put 'put ''ODcsNDA4NzAsNTkyNDQsNTkzMzYsNTkzNjcsNTk0MTMsNTk0MTcsNTk0MjMsNTk0MzEsNTk0MzcsNTk0NDMsNTk0NTIsNTk0NjAsNTk0NzgsNTk0OTMsNjM3ODksNjM4NjYsNjM4OTQsNjM5NzYsNjM5ODYsNjQwMTYsNjQwMTgsNjQwMjEsNjQwMjUsNjQwMzQsNjQwMzcsNjQwNDIsNjUwNzQs''@;'; put 'put ''NjUwOTMsNjUxMDcsNjUxMTIsNjUxMjcsNjUxMzIsNjUzNzUsNjU1MTAsNjU1MzZdLCJnYkNoYXJzIjpbMCwzNiwzOCw0NSw1MCw4MSw4OSw5NSw5NiwxMDAsMTAzLDEwNCwxMDUsMTA5LDEyNiwxMzMsMTQ4LDE3MiwxNzUsMTc5LDIwOCwzMDYsMzA3LDMwOCwzMDksMzEwLDMxMSwzMTIsMzEz''@;'; put 'put ''LDM0MSw0MjgsNDQzLDU0NCw1NDUsNTU4LDc0MSw3NDIsNzQ5LDc1MCw4MDUsODE5LDgyMCw3OTIyLDc5MjQsNzkyNSw3OTI3LDc5MzQsNzk0Myw3OTQ0LDc5NDUsNzk1MCw4MDYyLDgxNDgsODE0OSw4MTUyLDgxNjQsODE3NCw4MjM2LDgyNDAsODI2Miw4MjY0LDgzNzQsODM4MCw4MzgxLDgz''@;'; put 'put ''ODQsODM4OCw4MzkwLDgzOTIsODM5Myw4Mzk0LDgzOTYsODQwMSw4NDA2LDg0MTYsODQxOSw4NDI0LDg0MzcsODQzOSw4NDQ1LDg0ODIsODQ4NSw4NDk2LDg1MjEsODYwMyw4OTM2LDg5NDYsOTA0Niw5MDUwLDkwNjMsOTA2Niw5MDc2LDkwOTIsOTEwMCw5MTA4LDkxMTEsOTExMyw5MTMxLDkx''@;'; put 'put ''NjIsOTE2NCw5MjE4LDkyMTksMTEzMjksMTEzMzEsMTEzMzQsMTEzMzYsMTEzNDYsMTEzNjEsMTEzNjMsMTEzNjYsMTEzNzAsMTEzNzIsMTEzNzUsMTEzODksMTE2ODIsMTE2ODYsMTE2ODcsMTE2OTIsMTE2OTQsMTE3MTQsMTE3MTYsMTE3MjMsMTE3MjUsMTE3MzAsMTE3MzYsMTE5ODIsMTE5''@;'; put 'put ''ODksMTIxMDIsMTIzMzYsMTIzNDgsMTIzNTAsMTIzODQsMTIzOTMsMTIzOTUsMTIzOTcsMTI1MTAsMTI1NTMsMTI4NTEsMTI5NjIsMTI5NzMsMTM3MzgsMTM4MjMsMTM5MTksMTM5MzMsMTQwODAsMTQyOTgsMTQ1ODUsMTQ2OTgsMTU1ODMsMTU4NDcsMTYzMTgsMTY0MzQsMTY0MzgsMTY0ODEs''@;'; put 'put ''MTY3MjksMTcxMDIsMTcxMjIsMTczMTUsMTczMjAsMTc0MDIsMTc0MTgsMTc4NTksMTc5MDksMTc5MTEsMTc5MTUsMTc5MTYsMTc5MzYsMTc5MzksMTc5NjEsMTg2NjQsMTg3MDMsMTg4MTQsMTg5NjIsMTkwNDMsMzM0NjksMzM0NzAsMzM0NzEsMzM0ODQsMzM0ODUsMzM0OTAsMzM0OTcsMzM1''@;'; put 'put ''MDEsMzM1MDUsMzM1MTMsMzM1MjAsMzM1MzYsMzM1NTAsMzc4NDUsMzc5MjEsMzc5NDgsMzgwMjksMzgwMzgsMzgwNjQsMzgwNjUsMzgwNjYsMzgwNjksMzgwNzUsMzgwNzYsMzgwNzgsMzkxMDgsMzkxMDksMzkxMTMsMzkxMTQsMzkxMTUsMzkxMTYsMzkyNjUsMzkzOTQsMTg5MDAwXX0nKX0s''@;'; put 'put ''OTkxODc6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXswOiItXHUwNDQ3XHUwNGFmIiwxOiItXHUwNDQ3XHUwNDM4IiwyOiItXHUwNDQ3XHUwNDM4IiwzOiItXHUwNDQ3XHUwNGFmIiw0OiItXHUwNDQ3XHUwNGFmIiw1OiItXHUwNDQ3XHUwNDM4Iiw2''@;'; put 'put ''OiItXHUwNDQ3XHUwNDRiIiw3OiItXHUwNDQ3XHUwNDM4Iiw4OiItXHUwNDQ3XHUwNDM4Iiw5OiItXHUwNDQ3XHUwNDQzIiwxMDoiLVx1MDQ0N1x1MDQ0MyIsMjA6Ii1cdTA0NDdcdTA0NGIiLDMwOiItXHUwNDQ3XHUwNDQzIiw0MDoiLVx1MDQ0N1x1MDQ0YiIsNTA6Ii1cdTA0NDdcdTA0YWYi''@;'; put 'put ''LDYwOiItXHUwNDQ3XHUwNDRiIiw3MDoiLVx1MDQ0N1x1MDQzOCIsODA6Ii1cdTA0NDdcdTA0MzgiLDkwOiItXHUwNDQ3XHUwNDQzIiwxMDA6Ii1cdTA0NDdcdTA0YWYifTtJLmRlZmluZUxvY2FsZSgia3kiLHttb250aHM6Ilx1MDQ0Zlx1MDQzZFx1MDQzMlx1MDQzMFx1MDQ0MFx1MDQ0Y19c''@;'; put 'put ''dTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0MzBcdTA0M2JcdTA0NGNfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzYlx1MDQ0Y19cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDM4XHUwNDRlXHUwNDNkXHUwNDRjX1x1MDQzOFx1MDQ0ZVx1MDQz''@;'; put 'put ''Ylx1MDQ0Y19cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDRjX1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Y19cdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzFcdTA0''@;'; put 'put ''NDBcdTA0NGNfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMxXHUwNDQwXHUwNDRjIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0NGZcdTA0M2RcdTA0MzJfXHUwNDQ0XHUwNDM1XHUwNDMyX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDBfXHUwNDNj''@;'; put 'put ''XHUwNDMwXHUwNDM5X1x1MDQzOFx1MDQ0ZVx1MDQzZFx1MDQ0Y19cdTA0MzhcdTA0NGVcdTA0M2JcdTA0NGNfXHUwNDMwXHUwNDMyXHUwNDMzX1x1MDQ0MVx1MDQzNVx1MDQzZF9cdTA0M2VcdTA0M2FcdTA0NDJfXHUwNDNkXHUwNDNlXHUwNDRmX1x1MDQzNFx1MDQzNVx1MDQzYSIuc3BsaXQo''@;'; put 'put ''Il8iKSx3ZWVrZGF5czoiXHUwNDE2XHUwNDM1XHUwNDNhXHUwNDQ4XHUwNDM1XHUwNDNjXHUwNDMxXHUwNDM4X1x1MDQxNFx1MDRhZlx1MDQzOVx1MDQ0OFx1MDRlOVx1MDQzY1x1MDQzMVx1MDRhZl9cdTA0MjhcdTA0MzVcdTA0MzlcdTA0NDhcdTA0MzVcdTA0M2NcdTA0MzFcdTA0MzhfXHUw''@;'; put 'put ''NDI4XHUwNDMwXHUwNDQwXHUwNDQ4XHUwNDM1XHUwNDNjXHUwNDMxXHUwNDM4X1x1MDQxMVx1MDQzNVx1MDQzOVx1MDQ0OFx1MDQzNVx1MDQzY1x1MDQzMVx1MDQzOF9cdTA0MTZcdTA0NDNcdTA0M2NcdTA0MzBfXHUwNDE4XHUwNDQ4XHUwNDM1XHUwNDNjXHUwNDMxXHUwNDM4Ii5zcGxpdCgi''@;'; put 'put ''XyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQxNlx1MDQzNVx1MDQzYV9cdTA0MTRcdTA0YWZcdTA0MzlfXHUwNDI4XHUwNDM1XHUwNDM5X1x1MDQyOFx1MDQzMFx1MDQ0MF9cdTA0MTFcdTA0MzVcdTA0MzlfXHUwNDE2XHUwNDQzXHUwNDNjX1x1MDQxOFx1MDQ0OFx1MDQzNSIuc3BsaXQoIl8iKSx3''@;'; put 'put ''ZWVrZGF5c01pbjoiXHUwNDE2XHUwNDNhX1x1MDQxNFx1MDQzOV9cdTA0MjhcdTA0MzlfXHUwNDI4XHUwNDQwX1x1MDQxMVx1MDQzOV9cdTA0MTZcdTA0M2NfXHUwNDE4XHUwNDQ4Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1N''@;'; put 'put ''LllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQxMVx1MDRhZlx1MDQzM1x1MDRhZlx1MDQzZCBcdTA0NDFcdTA0MzBcdTA0MzBcdTA0NDJdIExUIixuZXh0''@;'; put 'put ''RGF5OiJbXHUwNDJkXHUwNDQwXHUwNDQyXHUwNDM1XHUwNGEzIFx1MDQ0MVx1MDQzMFx1MDQzMFx1MDQ0Ml0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA0NDFcdTA0MzBcdTA0MzBcdTA0NDJdIExUIixsYXN0RGF5OiJbXHUwNDFhXHUwNDM1XHUwNDQ3XHUwNDRkXHUwNDRkIFx1MDQ0MVx1MDQz''@;'; put 'put ''MFx1MDQzMFx1MDQ0Ml0gTFQiLGxhc3RXZWVrOiJbXHUwNGU4XHUwNDQyXHUwNDNhXHUwNGU5XHUwNDNkIFx1MDQzMFx1MDQzZlx1MDQ0Mlx1MDQzMFx1MDQzZFx1MDQ0Ylx1MDQzZF0gZGRkZCBbXHUwNDNhXHUwNGFmXHUwNDNkXHUwNGFmXSBbXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyXSBM''@;'; put 'put ''VCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwNDM4XHUwNDQ3XHUwNDM4XHUwNDNkXHUwNDM0XHUwNDM1IixwYXN0OiIlcyBcdTA0M2NcdTA0NDNcdTA0NDBcdTA0NDNcdTA0M2QiLHM6Ilx1MDQzMVx1MDQzOFx1MDQ0MFx1MDQzZFx1MDQzNVx1MDQ0N1x1MDQz''@;'; put 'put ''NSBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLHNzOiIlZCBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLG06Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0M2NcdTA0YWZcdTA0M2RcdTA0ZTlcdTA0NDIiLG1tOiIlZCBcdTA0M2NcdTA0YWZcdTA0M2Rc''@;'; put 'put ''dTA0ZTlcdTA0NDIiLGg6Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0MzBcdTA0NDIiLGhoOiIlZCBcdTA0NDFcdTA0MzBcdTA0MzBcdTA0NDIiLGQ6Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0M2FcdTA0YWZcdTA0M2QiLGRkOiIlZCBcdTA0M2FcdTA0YWZcdTA0M2QiLE06''@;'; put 'put ''Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0MzBcdTA0MzkiLE1NOiIlZCBcdTA0MzBcdTA0MzkiLHk6Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0MzZcdTA0NGJcdTA0M2IiLHl5OiIlZCBcdTA0MzZcdTA0NGJcdTA0M2IifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0NDdc''@;'; put 'put ''dTA0Mzh8XHUwNDQ3XHUwNDRifFx1MDQ0N1x1MDRhZnxcdTA0NDdcdTA0NDMpLyxvcmRpbmFsOmZ1bmN0aW9uKFYpe3JldHVybiBWKyhfW1ZdfHxfW1YlMTBdfHxfW1Y+PTEwMD8xMDA6bnVsbF0pfSx3ZWVrOntkb3c6MSxkb3k6N319KX0oYig5NzU4NikpfSw5OTI5MDpmdW5jdGlvbihjZSxY''@;'; put 'put ''LGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInN2Iix7bW9udGhzOiJqYW51YXJpX2ZlYnJ1YXJpX21hcnNfYXByaWxfbWFqX2p1bmlfanVsaV9hdWd1c3RpX3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1No''@;'; put 'put ''b3J0OiJqYW5fZmViX21hcl9hcHJfbWFqX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoic1x4ZjZuZGFnX21ceGU1bmRhZ190aXNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2xceGY2cmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzXHhm''@;'; put 'put ''Nm5fbVx4ZTVuX3Rpc19vbnNfdG9yX2ZyZV9sXHhmNnIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InNceGY2X21ceGU1X3RpX29uX3RvX2ZyX2xceGY2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVktTU0tREQiLExMOiJEIE1N''@;'; put 'put ''TU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBba2wuXSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBba2wuXSBISDptbSIsbGxsOiJEIE1NTSBZWVlZIEhIOm1tIixsbGxsOiJkZGQgRCBNTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSWRhZ10gTFQiLG5leHREYXk6''@;'; put 'put ''IltJbW9yZ29uXSBMVCIsbGFzdERheToiW0lnXHhlNXJdIExUIixuZXh0V2VlazoiW1BceGU1XSBkZGRkIExUIixsYXN0V2VlazoiW0ldIGRkZGRbc10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im9tICVzIixwYXN0OiJmXHhmNnIgJXMgc2VkYW4iLHM6Im5ceGU1''@;'; put 'put ''Z3JhIHNla3VuZGVyIixzczoiJWQgc2VrdW5kZXIiLG06ImVuIG1pbnV0IixtbToiJWQgbWludXRlciIsaDoiZW4gdGltbWUiLGhoOiIlZCB0aW1tYXIiLGQ6ImVuIGRhZyIsZGQ6IiVkIGRhZ2FyIixNOiJlbiBtXHhlNW5hZCIsTU06IiVkIG1ceGU1bmFkZXIiLHk6ImV0dCBceGU1ciIseXk6''@;'; put 'put ''IiVkIFx4ZTVyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcOmV8XDphKS8sb3JkaW5hbDpmdW5jdGlvbihwKXt2YXIgVj1wJTEwO3JldHVybiBwKygxPT1+fihwJTEwMC8xMCk/IjplIjoxPT09Vnx8Mj09PVY/IjphIjoiOmUiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIo''@;'; put 'put ''OTc1ODYpKX0sOTk1NjA6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1iKDYyOTUxKX0sOTk4NzU6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPSJqYW4uX2ZlYi5fbXJ0Ll9hcHIuX21laV9qdW4uX2p1bC5fYXVnLl9zZXAuX29rdC5f''@;'; put 'put ''bm92Ll9kZWMuIi5zcGxpdCgiXyIpLHA9Imphbl9mZWJfbXJ0X2Fwcl9tZWlfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpLFY9Wy9eamFuL2ksL15mZWIvaSwvXihtYWFydHxtcnRcLj8pJC9pLC9eYXByL2ksL15tZWkkL2ksL15qdW5baS5dPyQvaSwvXmp1bFtpLl0/''@;'; put 'put ''JC9pLC9eYXVnL2ksL15zZXAvaSwvXm9rdC9pLC9ebm92L2ksL15kZWMvaV0sdz0vXihqYW51YXJpfGZlYnJ1YXJpfG1hYXJ0fGFwcmlsfG1laXxqdVtubF1pfGF1Z3VzdHVzfHNlcHRlbWJlcnxva3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyfGphblwuP3xmZWJcLj98bXJ0XC4/fGFwclwuP3xq''@;'; put 'put ''dVtubF1cLj98YXVnXC4/fHNlcFwuP3xva3RcLj98bm92XC4/fGRlY1wuPykvaTtJLmRlZmluZUxvY2FsZSgibmwtYmUiLHttb250aHM6ImphbnVhcmlfZmVicnVhcmlfbWFhcnRfYXByaWxfbWVpX2p1bmlfanVsaV9hdWd1c3R1c19zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZWNlbWJl''@;'; put 'put ''ciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDpmdW5jdGlvbihGLFIpe3JldHVybiBGPy8tTU1NLS8udGVzdChSKT9wW0YubW9udGgoKV06X1tGLm1vbnRoKCldOl99LG1vbnRoc1JlZ2V4OncsbW9udGhzU2hvcnRSZWdleDp3LG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGphbnVhcml8ZmVicnVhcml8''@;'; put 'put ''bWFhcnR8YXByaWx8bWVpfGp1W25sXWl8YXVndXN0dXN8c2VwdGVtYmVyfG9rdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXIpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihqYW5cLj98ZmViXC4/fG1ydFwuP3xhcHJcLj98bWVpfGp1W25sXVwuP3xhdWdcLj98c2VwXC4/fG9rdFwuP3xub3Zc''@;'; put 'put ''Lj98ZGVjXC4/KS9pLG1vbnRoc1BhcnNlOlYsbG9uZ01vbnRoc1BhcnNlOlYsc2hvcnRNb250aHNQYXJzZTpWLHdlZWtkYXlzOiJ6b25kYWdfbWFhbmRhZ19kaW5zZGFnX3dvZW5zZGFnX2RvbmRlcmRhZ192cmlqZGFnX3phdGVyZGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InpvLl9t''@;'; put 'put ''YS5fZGkuX3dvLl9kby5fdnIuX3phLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiem9fbWFfZGlfd29fZG9fdnJfemEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJE''@;'; put 'put ''IE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbdmFuZGFhZyBvbV0gTFQiLG5leHREYXk6Ilttb3JnZW4gb21dIExUIixuZXh0V2VlazoiZGRkZCBbb21dIExUIixsYXN0RGF5OiJbZ2lz''@;'; put 'put ''dGVyZW4gb21dIExUIixsYXN0V2VlazoiW2FmZ2Vsb3Blbl0gZGRkZCBbb21dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvdmVyICVzIixwYXN0OiIlcyBnZWxlZGVuIixzOiJlZW4gcGFhciBzZWNvbmRlbiIsc3M6IiVkIHNlY29uZGVuIixtOiJceGU5XHhlOW4g''@;'; put 'put ''bWludXV0IixtbToiJWQgbWludXRlbiIsaDoiXHhlOVx4ZTluIHV1ciIsaGg6IiVkIHV1ciIsZDoiXHhlOVx4ZTluIGRhZyIsZGQ6IiVkIGRhZ2VuIixNOiJceGU5XHhlOW4gbWFhbmQiLE1NOiIlZCBtYWFuZGVuIix5OiJceGU5XHhlOW4gamFhciIseXk6IiVkIGphYXIifSxkYXlPZk1vbnRo''@;'; put 'put ''T3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0ZXxkZSkvLG9yZGluYWw6ZnVuY3Rpb24oRil7cmV0dXJuIEYrKDE9PT1GfHw4PT09Rnx8Rj49MjA/InN0ZSI6ImRlIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9fSxjZT0+e2NlKGNlLnM9NTQ2NTkpfV0pOw=='';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=polyfills.21673843b72c55b0-js; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''KHNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXI9c2VsZi53ZWJwYWNrQ2h1bmtkYXRhY29udHJvbGxlcnx8W10pLnB1c2goW1s0NjFdLHs5MzU6KGMsZix0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5TLCJPYmplY3QiLHtjcmVhdGU6dCg4NDcxOSl9KX0sMTA2MDooYyxmKT0+e2YuZj1P''@;'; put 'put ''YmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzfSwxMTU4OihjLGYsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg0MjI4KTtjLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgZT1uKHRoaXMpLHM9IiI7cmV0dXJuIGUuZ2xvYmFsJiYocys9ImciKSxlLmlnbm9yZUNhc2UmJihzKz0iaSIpLGUubXVs''@;'; put 'put ''dGlsaW5lJiYocys9Im0iKSxlLnVuaWNvZGUmJihzKz0idSIpLGUuc3RpY2t5JiYocys9InkiKSxzfX0sMTE3NjooYyxmLHQpPT57dmFyIG49dCg5NzM4MCksZT10KDQyMjgpLHM9dCg0MDYyNyksbz1uLmhhcyx1PW4ua2V5LGw9ZnVuY3Rpb24oaSx2LHApe2lmKG8oaSx2LHApKXJldHVybiEw''@;'; put 'put ''O3ZhciB5PXModik7cmV0dXJuIG51bGwhPT15JiZsKGkseSxwKX07bi5leHAoe2hhc01ldGFkYXRhOmZ1bmN0aW9uKHYscCl7cmV0dXJuIGwodixlKHApLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6dShhcmd1bWVudHNbMl0pKX19KX0sMTUwODooYyxmLHQpPT57dmFyIG49dCg2MDkwNiks''@;'; put 'put ''ZT10KDY3NTc0KSgiaXRlcmF0b3IiKSxzPUFycmF5LnByb3RvdHlwZTtjLmV4cG9ydHM9ZnVuY3Rpb24obyl7cmV0dXJuIHZvaWQgMCE9PW8mJihuLkFycmF5PT09b3x8c1tlXT09PW8pfX0sMTc2MzooYyxmLHQpPT57Yy5leHBvcnRzPSF0KDc5NDQ4KShmdW5jdGlvbigpe3JldHVybiA3IT1P''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoe30sImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LDMxMDc6KGMsZix0KT0+e3ZhciBuPXQoOTczODApLGU9dCg0MjI4KSxzPW4uaGFzLG89bi5rZXk7bi5leHAoe2hhc093bk1ldGFkYXRhOmZ1bmN0aW9uKGwsaSl7cmV0dXJuIHMobCxl''@;'; put 'put ''KGkpLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6byhhcmd1bWVudHNbMl0pKX19KX0sMzM0NDpjPT57Yy5leHBvcnRzPWZ1bmN0aW9uKGYpe2lmKG51bGw9PWYpdGhyb3cgVHlwZUVycm9yKCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgIitmKTtyZXR1cm4gZn19LDM1MDQ6KGMsZix0KT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoNjYxNzkpKDApLHM9dCg4Njg4NCkoW10uZm9yRWFjaCwhMCk7bihuLlArbi5GKiFzLCJBcnJheSIse2ZvckVhY2g6ZnVuY3Rpb24odSl7cmV0dXJuIGUodGhpcyx1LGFyZ3VtZW50c1sxXSl9fSl9LDM1NTk6KGMsZix0KT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt0KDUyNDY4KSgic3ViIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLCJzdWIiLCIiLCIiKX19KX0sMzczMzpjPT57Yy5leHBvcnRzPU1hdGguc2lnbnx8ZnVuY3Rpb24odCl7cmV0dXJuIDA9PSh0PSt0KXx8dCE9dD90OnQ8MD8tMToxfX0sMzg0NDoo''@;'; put 'put ''YyxmLHQpPT57dmFyIG49dCg0Nzk2NykuZixlPXQoNTc5MTcpLHM9dCg2NzU3NCkoInRvU3RyaW5nVGFnIik7Yy5leHBvcnRzPWZ1bmN0aW9uKG8sdSxsKXtvJiYhZShvPWw/bzpvLnByb3RvdHlwZSxzKSYmbihvLHMse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTp1fSl9fSw0MDQwOihjLGYsdCk9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7dmFyIG49dCg0MjI4KSxlPXQoODE0ODUpLHM9dCgyODgyOCksbz10KDUyNTM1KTt0KDY5MjI4KSgibWF0Y2giLDEsZnVuY3Rpb24odSxsLGksdil7cmV0dXJuW2Z1bmN0aW9uKGQpe3ZhciB5PXUodGhpcyksRT1kPy5bbF07cmV0dXJuIHZvaWQgMCE9PUU/RS5jYWxs''@;'; put 'put ''KGQseSk6bmV3IFJlZ0V4cChkKVtsXShTdHJpbmcoeSkpfSxmdW5jdGlvbihwKXt2YXIgZD12KGkscCx0aGlzKTtpZihkLmRvbmUpcmV0dXJuIGQudmFsdWU7dmFyIHk9bihwKSxFPVN0cmluZyh0aGlzKTtpZigheS5nbG9iYWwpcmV0dXJuIG8oeSxFKTt2YXIgZz15LnVuaWNvZGU7eS5sYXN0''@;'; put 'put ''SW5kZXg9MDtmb3IodmFyIHgsRD1bXSxGPTA7bnVsbCE9PSh4PW8oeSxFKSk7KXt2YXIgQT1TdHJpbmcoeFswXSk7RFtGXT1BLCIiPT09QSYmKHkubGFzdEluZGV4PXMoRSxlKHkubGFzdEluZGV4KSxnKSksRisrfXJldHVybiAwPT09Rj9udWxsOkR9XX0pfSw0MTA0OihjLGYsdCk9Pnt2YXIg''@;'; put 'put ''bj10KDkyMTI3KSxlPXQoMzM4NDIpLHM9TWF0aC5hYnM7bihuLlMsIk51bWJlciIse2lzU2FmZUludGVnZXI6ZnVuY3Rpb24odSl7cmV0dXJuIGUodSkmJnModSk8PTkwMDcxOTkyNTQ3NDA5OTF9fSl9LDQyMjg6KGMsZix0KT0+e3ZhciBuPXQoNDMzMDUpO2MuZXhwb3J0cz1mdW5jdGlvbihl''@;'; put 'put ''KXtpZighbihlKSl0aHJvdyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBhbiBvYmplY3QhIik7cmV0dXJuIGV9fSw0MjQ2OihjLGYsdCk9Pnt0KDgzMDEpLHQoOTQxMTYpLHQoNzg2MDQpLHQoMzk2MzgpLHQoNDA0MCksdCg2ODMwNSksdCg3NDcwMSksdCgyMDM0MSksdCg1NjA5NCl9LDQzNzY6KGMs''@;'; put 'put ''Zix0KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCg2ODY0MSkuZixzPXQoNDIyOCk7bihuLlMsIlJlZmxlY3QiLHtkZWxldGVQcm9wZXJ0eTpmdW5jdGlvbih1LGwpe3ZhciBpPWUocyh1KSxsKTtyZXR1cm4hKGkmJiFpLmNvbmZpZ3VyYWJsZSkmJmRlbGV0ZSB1W2xdfX0pfSw0NDE1OmM9Pnt2YXIg''@;'; put 'put ''Zj0wLHQ9TWF0aC5yYW5kb20oKTtjLmV4cG9ydHM9ZnVuY3Rpb24obil7cmV0dXJuIlN5bWJvbCgiLmNvbmNhdCh2b2lkIDA9PT1uPyIiOm4sIilfIiwoKytmK3QpLnRvU3RyaW5nKDM2KSl9fSw0NzY1OihjLGYsdCk9Pnt2YXIgbj10KDU3MjIxKSxlPXQoNTk0MTUpLmYscz17fS50b1N0cmlu''@;'; put 'put ''ZyxvPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdyk6W107Yy5leHBvcnRzLmY9ZnVuY3Rpb24oaSl7cmV0dXJuIG8mJiJbb2JqZWN0IFdpbmRvd10iPT1zLmNhbGwoaSk/''@;'; put 'put ''ZnVuY3Rpb24obCl7dHJ5e3JldHVybiBlKGwpfWNhdGNoe3JldHVybiBvLnNsaWNlKCl9fShpKTplKG4oaSkpfX0sNTQ0MzooYyxmLHQpPT57dmFyIG49dCg0Nzk2NyksZT10KDY4NjQxKSxzPXQoNDA2MjcpLG89dCg1NzkxNyksdT10KDkyMTI3KSxsPXQoMTE5OTYpLGk9dCg0MjI4KSx2PXQo''@;'; put 'put ''NDMzMDUpO3UodS5TLCJSZWZsZWN0Iix7c2V0OmZ1bmN0aW9uIHAoZCx5LEUpe3ZhciBGLHgsZz1hcmd1bWVudHMubGVuZ3RoPDQ/ZDphcmd1bWVudHNbM10sRD1lLmYoaShkKSx5KTtpZighRCl7aWYodih4PXMoZCkpKXJldHVybiBwKHgseSxFLGcpO0Q9bCgwKX1pZihvKEQsInZhbHVlIikp''@;'; put 'put ''e2lmKCExPT09RC53cml0YWJsZXx8IXYoZykpcmV0dXJuITE7aWYoRj1lLmYoZyx5KSl7aWYoRi5nZXR8fEYuc2V0fHwhMT09PUYud3JpdGFibGUpcmV0dXJuITE7Ri52YWx1ZT1FLG4uZihnLHksRil9ZWxzZSBuLmYoZyx5LGwoMCxFKSk7cmV0dXJuITB9cmV0dXJuIHZvaWQgMCE9PUQuc2V0''@;'; put 'put ''JiYoRC5zZXQuY2FsbChnLEUpLCEwKX19KX0sNjAzMjooYyxmLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoODQ3MTkpLGU9dCgxMTk5Nikscz10KDM4NDQpLG89e307dCgzMzM0MSkobyx0KDY3NTc0KSgiaXRlcmF0b3IiKSxmdW5jdGlvbigpe3JldHVybiB0aGlzfSksYy5leHBvcnRzPWZ1''@;'; put 'put ''bmN0aW9uKHUsbCxpKXt1LnByb3RvdHlwZT1uKG8se25leHQ6ZSgxLGkpfSkscyh1LGwrIiBJdGVyYXRvciIpfX0sNjU0MzooYyxmLHQpPT57dmFyIG49dCg2MzM4NyksZT10KDE4MjcwKSxzPXQoNjEyNDkpLG89dCg4MTQ4NSk7Yy5leHBvcnRzPWZ1bmN0aW9uKHUsbCxpLHYscCl7bihsKTt2''@;'; put 'put ''YXIgZD1lKHUpLHk9cyhkKSxFPW8oZC5sZW5ndGgpLGc9cD9FLTE6MCxEPXA/LTE6MTtpZihpPDIpZm9yKDs7KXtpZihnIGluIHkpe3Y9eVtnXSxnKz1EO2JyZWFrfWlmKGcrPUQscD9nPDA6RTw9Zyl0aHJvdyBUeXBlRXJyb3IoIlJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRp''@;'; put 'put ''YWwgdmFsdWUiKX1mb3IoO3A/Zz49MDpFPmc7Zys9RClnIGluIHkmJih2PWwodix5W2ddLGcsZCkpO3JldHVybiB2fX0sNjcwMTooYyxmLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg3OTQ0OCkscz10KDE1MTIyKSxvPTEuLnRvUHJlY2lzaW9uO24obi5QK24uRiooZShm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiIxIiE9PW8uY2FsbCgxLHZvaWQgMCl9KXx8IWUoZnVuY3Rpb24oKXtvLmNhbGwoe30pfSkpLCJOdW1iZXIiLHt0b1ByZWNpc2lvbjpmdW5jdGlvbihsKXt2YXIgaT1zKHRoaXMsIk51bWJlciN0b1ByZWNpc2lvbjogaW5jb3JyZWN0IGludm9jYXRpb24hIik7cmV0''@;'; put 'put ''dXJuIHZvaWQgMD09PWw/by5jYWxsKGkpOm8uY2FsbChpLGwpfX0pfSw3MDgzOihjLGYsdCk9PnsidXNlIHN0cmljdCI7dCg1MjQ2OCkoImZpeGVkIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLCJ0dCIsIiIsIiIpfX0pfSw3MTAzOihjLGYsdCk9Pnt2YXIg''@;'; put 'put ''bj10KDkyMTI3KSxlPXQoNjMzODcpLHM9dCg0MjI4KSxvPSh0KDY3NTI2KS5SZWZsZWN0fHx7fSkuYXBwbHksdT1GdW5jdGlvbi5hcHBseTtuKG4uUytuLkYqIXQoNzk0NDgpKGZ1bmN0aW9uKCl7byhmdW5jdGlvbigpe30pfSksIlJlZmxlY3QiLHthcHBseTpmdW5jdGlvbihpLHYscCl7dmFy''@;'; put 'put ''IGQ9ZShpKSx5PXMocCk7cmV0dXJuIG8/byhkLHYseSk6dS5jYWxsKGQsdix5KX19KX0sNzM1OTpjPT57Yy5leHBvcnRzPU9iamVjdC5pc3x8ZnVuY3Rpb24odCxuKXtyZXR1cm4gdD09PW4/MCE9PXR8fDEvdD09MS9uOnQhPXQmJm4hPW59fSw3ODQ5OihjLGYsdCk9Pnt2YXIgbj1EYXRlLnBy''@;'; put 'put ''b3RvdHlwZSxlPSJJbnZhbGlkIERhdGUiLHM9InRvU3RyaW5nIixvPW5bc10sdT1uLmdldFRpbWU7bmV3IERhdGUoTmFOKSsiIiE9ZSYmdCgyODg1OSkobixzLGZ1bmN0aW9uKCl7dmFyIGk9dS5jYWxsKHRoaXMpO3JldHVybiBpPT1pP28uY2FsbCh0aGlzKTplfSl9LDgzMDE6KGMsZix0KT0+''@;'; put 'put ''e3ZhciBuPXQoNjc1MjYpLGU9dCg5ODg4MCkscz10KDQ3OTY3KS5mLG89dCg1OTQxNSkuZix1PXQoOTU0MTEpLGw9dCgxMTU4KSxpPW4uUmVnRXhwLHY9aSxwPWkucHJvdG90eXBlLGQ9L2EvZyx5PS9hL2csRT1uZXcgaShkKSE9PWQ7aWYodCgxNzYzKSYmKCFFfHx0KDc5NDQ4KShmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiB5W3QoNjc1NzQpKCJtYXRjaCIpXT0hMSxpKGQpIT1kfHxpKHkpPT15fHwiL2EvaSIhPWkoZCwiaSIpfSkpKXtpPWZ1bmN0aW9uKEEsayl7dmFyIFA9dGhpcyBpbnN0YW5jZW9mIGksTT11KEEpLFQ9dm9pZCAwPT09aztyZXR1cm4hUCYmTSYmQS5jb25zdHJ1Y3Rvcj09PWkm''@;'; put 'put ''JlQ/QTplKEU/bmV3IHYoTSYmIVQ/QS5zb3VyY2U6QSxrKTp2KChNPUEgaW5zdGFuY2VvZiBpKT9BLnNvdXJjZTpBLE0mJlQ/bC5jYWxsKEEpOmspLFA/dGhpczpwLGkpfTtmb3IodmFyIGc9ZnVuY3Rpb24oeCl7eCBpbiBpfHxzKGkseCx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiB2W3hdfSxzZXQ6ZnVuY3Rpb24oQSl7dlt4XT1BfX0pfSxEPW8odiksRj0wO0QubGVuZ3RoPkY7KWcoRFtGKytdKTtwLmNvbnN0cnVjdG9yPWksaS5wcm90b3R5cGU9cCx0KDI4ODU5KShuLCJSZWdFeHAiLGkpfXQoNTU3NjIpKCJSZWdFeHAiKX0sODQ0OTooYyxmKT0+e2YuZj17''@;'; put 'put ''fS5wcm9wZXJ0eUlzRW51bWVyYWJsZX0sOTM1MzooYyxmLHQpPT57dCg3NzQ5MSksdCg3NDkwNyksdCg3OTEwMCksdCgxOTI2OSksdCg5MTMxOSksdCg3OTczMiksdCgxMTc2KSx0KDMxMDcpLHQoNjE2OTEpLHQoNTYwOTQpfSw5NDI5OihjLGYsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPXQoNTUz''@;'; put 'put ''ODUpO24obi5QK24uRiooRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmchPT1lKSwiRGF0ZSIse3RvSVNPU3RyaW5nOmV9KX0sMTAxNzc6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoODE0ODUpLHM9dCg3ODk0Miksbz0ic3RhcnRzV2l0aCIsdT0iIltvXTtuKG4u''@;'; put 'put ''UCtuLkYqdCgyNTIwMykobyksIlN0cmluZyIse3N0YXJ0c1dpdGg6ZnVuY3Rpb24oaSl7dmFyIHY9cyh0aGlzLGksbykscD1lKE1hdGgubWluKGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLHYubGVuZ3RoKSksZD1TdHJpbmcoaSk7cmV0dXJuIHU/dS5jYWxsKHYsZCxw''@;'; put 'put ''KTp2LnNsaWNlKHAscCtkLmxlbmd0aCk9PT1kfX0pfSwxMDc0MzooYyxmLHQpPT57dCgxNzQ4MiksdCg4Mjk3NSksdCgzNTg5MCksdCg3MTYzMiksdCg1NjA5NCl9LDExNDMwOihjLGYsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUytuLkYsIk9iamVjdCIse2Fzc2lnbjp0KDI4MjA2KX0pfSwx''@;'; put 'put ''MTg3OTooYyxmLHQpPT57dmFyIG49dCg2ODY0MSksZT10KDQwNjI3KSxzPXQoNTc5MTcpLG89dCg5MjEyNyksdT10KDQzMzA1KSxsPXQoNDIyOCk7byhvLlMsIlJlZmxlY3QiLHtnZXQ6ZnVuY3Rpb24gaSh2LHApe3ZhciB5LEUsZD1hcmd1bWVudHMubGVuZ3RoPDM/djphcmd1bWVudHNbMl07''@;'; put 'put ''cmV0dXJuIGwodik9PT1kP3ZbcF06KHk9bi5mKHYscCkpP3MoeSwidmFsdWUiKT95LnZhbHVlOnZvaWQgMCE9PXkuZ2V0P3kuZ2V0LmNhbGwoZCk6dm9pZCAwOnUoRT1lKHYpKT9pKEUscCxkKTp2b2lkIDB9fSl9LDExOTk2OmM9PntjLmV4cG9ydHM9ZnVuY3Rpb24oZix0KXtyZXR1cm57ZW51''@;'; put 'put ''bWVyYWJsZTohKDEmZiksY29uZmlndXJhYmxlOiEoMiZmKSx3cml0YWJsZTohKDQmZiksdmFsdWU6dH19fSwxMjIyMDooYyxmLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDcwMTU3KSxzPVN0cmluZy5mcm9tQ2hhckNvZGUsbz1TdHJpbmcuZnJvbUNvZGVQb2ludDtuKG4uUytuLkYqKCEhbyYm''@;'; put 'put ''MSE9by5sZW5ndGgpLCJTdHJpbmciLHtmcm9tQ29kZVBvaW50OmZ1bmN0aW9uKGwpe2Zvcih2YXIgZCxpPVtdLHY9YXJndW1lbnRzLmxlbmd0aCxwPTA7dj5wOyl7aWYoZD0rYXJndW1lbnRzW3ArK10sZShkLDExMTQxMTEpIT09ZCl0aHJvdyBSYW5nZUVycm9yKGQrIiBpcyBub3QgYSB2YWxp''@;'; put 'put ''ZCBjb2RlIHBvaW50Iik7aS5wdXNoKGQ8NjU1MzY/cyhkKTpzKDU1Mjk2KygoZC09NjU1MzYpPj4xMCksZCUxMDI0KzU2MzIwKSl9cmV0dXJuIGkuam9pbigiIil9fSl9LDEyODg4OihjLGYsdCk9Pnt2YXIgbj10KDQzMzA1KTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSxzKXtpZighbihlKXx8ZS5f''@;'; put 'put ''dCE9PXMpdGhyb3cgVHlwZUVycm9yKCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICIrcysiIHJlcXVpcmVkISIpO3JldHVybiBlfX0sMTI5ODg6KGMsZix0KT0+e3ZhciBuPXQoNDQxNSkoIm1ldGEiKSxlPXQoNDMzMDUpLHM9dCg1NzkxNyksbz10KDQ3OTY3KS5mLHU9MCxsPU9iamVjdC5pc0V4''@;'; put 'put ''dGVuc2libGV8fGZ1bmN0aW9uKCl7cmV0dXJuITB9LGk9IXQoNzk0NDgpKGZ1bmN0aW9uKCl7cmV0dXJuIGwoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSl9KSx2PWZ1bmN0aW9uKGcpe28oZyxuLHt2YWx1ZTp7aToiTyIrICsrdSx3Ont9fX0pfSxFPWMuZXhwb3J0cz17S0VZOm4sTkVF''@;'; put 'put ''RDohMSxmYXN0S2V5OmZ1bmN0aW9uKGcsRCl7aWYoIWUoZykpcmV0dXJuInN5bWJvbCI9PXR5cGVvZiBnP2c6KCJzdHJpbmciPT10eXBlb2YgZz8iUyI6IlAiKStnO2lmKCFzKGcsbikpe2lmKCFsKGcpKXJldHVybiJGIjtpZighRClyZXR1cm4iRSI7dihnKX1yZXR1cm4gZ1tuXS5pfSxnZXRX''@;'; put 'put ''ZWFrOmZ1bmN0aW9uKGcsRCl7aWYoIXMoZyxuKSl7aWYoIWwoZykpcmV0dXJuITA7aWYoIUQpcmV0dXJuITE7dihnKX1yZXR1cm4gZ1tuXS53fSxvbkZyZWV6ZTpmdW5jdGlvbihnKXtyZXR1cm4gaSYmRS5ORUVEJiZsKGcpJiYhcyhnLG4pJiZ2KGcpLGd9fX0sMTMyOTI6KGMsZix0KT0+e3Zh''@;'; put 'put ''ciBuPXQoOTIxMjcpO24obi5TLCJEYXRlIix7bm93OmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9fSl9LDEzOTgxOihjLGYpPT57InVzZSBzdHJpY3QiO2YuYnl0ZUxlbmd0aD1mdW5jdGlvbiBpKGcpe3ZhciBEPWwoZykseD1EWzFdO3JldHVybiAzKihEWzBdK3gpLzQt''@;'; put 'put ''eH0sZi50b0J5dGVBcnJheT1mdW5jdGlvbiBwKGcpe3ZhciBELFQsRj1sKGcpLHg9RlswXSxBPUZbMV0saz1uZXcgZShmdW5jdGlvbiB2KGcsRCxGKXtyZXR1cm4gMyooRCtGKS80LUZ9KDAseCxBKSksUD0wLE09QT4wP3gtNDp4O2ZvcihUPTA7VDxNO1QrPTQpRD1uW2cuY2hhckNvZGVBdChU''@;'; put 'put ''KV08PDE4fG5bZy5jaGFyQ29kZUF0KFQrMSldPDwxMnxuW2cuY2hhckNvZGVBdChUKzIpXTw8NnxuW2cuY2hhckNvZGVBdChUKzMpXSxrW1ArK109RD4+MTYmMjU1LGtbUCsrXT1EPj44JjI1NSxrW1ArK109MjU1JkQ7cmV0dXJuIDI9PT1BJiYoRD1uW2cuY2hhckNvZGVBdChUKV08PDJ8bltn''@;'; put 'put ''LmNoYXJDb2RlQXQoVCsxKV0+PjQsa1tQKytdPTI1NSZEKSwxPT09QSYmKEQ9bltnLmNoYXJDb2RlQXQoVCldPDwxMHxuW2cuY2hhckNvZGVBdChUKzEpXTw8NHxuW2cuY2hhckNvZGVBdChUKzIpXT4+MixrW1ArK109RD4+OCYyNTUsa1tQKytdPTI1NSZEKSxrfSxmLmZyb21CeXRlQXJyYXk9''@;'; put 'put ''ZnVuY3Rpb24gRShnKXtmb3IodmFyIEQsRj1nLmxlbmd0aCx4PUYlMyxBPVtdLGs9MTYzODMsUD0wLE09Ri14O1A8TTtQKz1rKUEucHVzaCh5KGcsUCxQK2s+TT9NOlAraykpO3JldHVybiAxPT09eD9BLnB1c2godFsoRD1nW0YtMV0pPj4yXSt0W0Q8PDQmNjNdKyI9PSIpOjI9PT14JiZBLnB1''@;'; put 'put ''c2godFsoRD0oZ1tGLTJdPDw4KStnW0YtMV0pPj4xMF0rdFtEPj40JjYzXSt0W0Q8PDImNjNdKyI9IiksQS5qb2luKCIiKX07Zm9yKHZhciB0PVtdLG49W10sZT10eXBlb2YgVWludDhBcnJheTwidSI/VWludDhBcnJheTpBcnJheSxzPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2Rl''@;'; put 'put ''ZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIixvPTA7bzw2NDsrK28pdFtvXT1zW29dLG5bcy5jaGFyQ29kZUF0KG8pXT1vO2Z1bmN0aW9uIGwoZyl7dmFyIEQ9Zy5sZW5ndGg7aWYoRCU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUg''@;'; put 'put ''YSBtdWx0aXBsZSBvZiA0Iik7dmFyIEY9Zy5pbmRleE9mKCI9Iik7cmV0dXJuLTE9PT1GJiYoRj1EKSxbRixGPT09RD8wOjQtRiU0XX1mdW5jdGlvbiBkKGcpe3JldHVybiB0W2c+PjE4JjYzXSt0W2c+PjEyJjYzXSt0W2c+PjYmNjNdK3RbNjMmZ119ZnVuY3Rpb24geShnLEQsRil7Zm9yKHZh''@;'; put 'put ''ciBBPVtdLGs9RDtrPEY7ays9MylBLnB1c2goZCgoZ1trXTw8MTYmMTY3MTE2ODApKyhnW2srMV08PDgmNjUyODApKygyNTUmZ1trKzJdKSkpO3JldHVybiBBLmpvaW4oIiIpfW5bNDVdPTYyLG5bOTVdPTYzfSwxNTEyMjooYyxmLHQpPT57dmFyIG49dCg1NTA4OSk7Yy5leHBvcnRzPWZ1bmN0''@;'; put 'put ''aW9uKGUscyl7aWYoIm51bWJlciIhPXR5cGVvZiBlJiYiTnVtYmVyIiE9bihlKSl0aHJvdyBUeXBlRXJyb3Iocyk7cmV0dXJuK2V9fSwxNTE0NDooYyxmLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg2NjE3OSkoNSkscz0iZmluZCIsbz0hMDtzIGluW10mJkFycmF5KDEp''@;'; put 'put ''W3NdKGZ1bmN0aW9uKCl7bz0hMX0pLG4obi5QK24uRipvLCJBcnJheSIse2ZpbmQ6ZnVuY3Rpb24obCl7cmV0dXJuIGUodGhpcyxsLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KSx0KDg4MTg0KShzKX0sMTUzMjc6KGMsZix0KT0+e3ZhciBuPXQoOTIxMjcpLGU9''@;'; put 'put ''TWF0aC5pbXVsO24obi5TK24uRip0KDc5NDQ4KShmdW5jdGlvbigpe3JldHVybi01IT1lKDQyOTQ5NjcyOTUsNSl8fDIhPWUubGVuZ3RofSksIk1hdGgiLHtpbXVsOmZ1bmN0aW9uKG8sdSl7dmFyIGw9NjU1MzUsaT0rbyx2PSt1LHA9bCZpLGQ9bCZ2O3JldHVybiAwfHAqZCsoKGwmaT4+PjE2''@;'; put 'put ''KSpkK3AqKGwmdj4+PjE2KTw8MTY+Pj4wKX19KX0sMTU1Mzg6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDYzMzg3KSxlPXQoNDMzMDUpLHM9dCgyNDg3Nyksbz1bXS5zbGljZSx1PXt9O2MuZXhwb3J0cz1GdW5jdGlvbi5iaW5kfHxmdW5jdGlvbih2KXt2YXIgcD1uKHRoaXMpLGQ9''@;'; put 'put ''by5jYWxsKGFyZ3VtZW50cywxKSx5PWZ1bmN0aW9uKCl7dmFyIEU9ZC5jb25jYXQoby5jYWxsKGFyZ3VtZW50cykpO3JldHVybiB0aGlzIGluc3RhbmNlb2YgeT9mdW5jdGlvbihpLHYscCl7aWYoISh2IGluIHUpKXtmb3IodmFyIGQ9W10seT0wO3k8djt5KyspZFt5XT0iYVsiK3krIl0iO3Vb''@;'; put 'put ''dl09RnVuY3Rpb24oIkYsYSIsInJldHVybiBuZXcgRigiK2Quam9pbigiLCIpKyIpIil9cmV0dXJuIHVbdl0oaSxwKX0ocCxFLmxlbmd0aCxFKTpzKHAsRSx2KX07cmV0dXJuIGUocC5wcm90b3R5cGUpJiYoeS5wcm90b3R5cGU9cC5wcm90b3R5cGUpLHl9fSwxNTU3MjooYyxmLHQpPT57dmFy''@;'; put 'put ''IG49dCg0MzMwNSksZT10KDEyOTg4KS5vbkZyZWV6ZTt0KDgwOTIzKSgicHJldmVudEV4dGVuc2lvbnMiLGZ1bmN0aW9uKHMpe3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gcyYmbih1KT9zKGUodSkpOnV9fSl9LDE1NjI2OihjLGYsdCk9Pnt0KDY0NTA5KSx0KDM3NzI3KSx0KDY3MDEpLHQo''@;'; put 'put ''MzQ0MTkpLHQoOTE5MzMpLHQoNTU1MzgpLHQoMzk0OTcpLHQoNDEwNCksdCg2MDIxMCksdCg1NjU3NiksdCg4NDQzNyksdCg4ODA1MCksdCg1NjA5NCl9LDE1OTA5OihjLGYsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUywiTWF0aCIse2xvZzFwOnQoNzE0NzMpfSl9LDE1OTMyOihjLGYsdCk9''@;'; put 'put ''Pnt2YXIgbj10KDkyMTI3KSxlPXQoNDIyOCkscz1PYmplY3QucHJldmVudEV4dGVuc2lvbnM7bihuLlMsIlJlZmxlY3QiLHtwcmV2ZW50RXh0ZW5zaW9uczpmdW5jdGlvbih1KXtlKHUpO3RyeXtyZXR1cm4gcyYmcyh1KSwhMH1jYXRjaHtyZXR1cm4hMX19fSl9LDE1OTY5OihjLGYsdCk9Pnt2''@;'; put 'put ''YXIgbj10KDUxMzExKSxlPXQoMTA2MCkscz10KDg0NDkpO2MuZXhwb3J0cz1mdW5jdGlvbihvKXt2YXIgdT1uKG8pLGw9ZS5mO2lmKGwpZm9yKHZhciBkLGk9bChvKSx2PXMuZixwPTA7aS5sZW5ndGg+cDspdi5jYWxsKG8sZD1pW3ArK10pJiZ1LnB1c2goZCk7cmV0dXJuIHV9fSwxNjQ0MDpj''@;'; put 'put ''PT57Yy5leHBvcnRzPWZ1bmN0aW9uKGYsdCxuLGUpe2lmKCEoZiBpbnN0YW5jZW9mIHQpfHx2b2lkIDAhPT1lJiZlIGluIGYpdGhyb3cgVHlwZUVycm9yKG4rIjogaW5jb3JyZWN0IGludm9jYXRpb24hIik7cmV0dXJuIGZ9fSwxNzIyNDooYyxmLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQo''@;'; put 'put ''OTIxMjcpLGU9dCg4MTQ4NSkscz10KDc4OTQyKSxvPSJlbmRzV2l0aCIsdT0iIltvXTtuKG4uUCtuLkYqdCgyNTIwMykobyksIlN0cmluZyIse2VuZHNXaXRoOmZ1bmN0aW9uKGkpe3ZhciB2PXModGhpcyxpLG8pLHA9YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsZD1l''@;'; put 'put ''KHYubGVuZ3RoKSx5PXZvaWQgMD09PXA/ZDpNYXRoLm1pbihlKHApLGQpLEU9U3RyaW5nKGkpO3JldHVybiB1P3UuY2FsbCh2LEUseSk6di5zbGljZSh5LUUubGVuZ3RoLHkpPT09RX19KX0sMTc0ODI6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDM0ODQ4KSxlPXt9O2VbdCg2NzU3''@;'; put 'put ''NCkoInRvU3RyaW5nVGFnIildPSJ6IixlKyIiIT0iW29iamVjdCB6XSImJnQoMjg4NTkpKE9iamVjdC5wcm90b3R5cGUsInRvU3RyaW5nIixmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0ICIrbih0aGlzKSsiXSJ9LCEwKX0sMTgxMzI6KGMsZix0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5TLCJP''@;'; put 'put ''YmplY3QiLHtzZXRQcm90b3R5cGVPZjp0KDI1MTcwKS5zZXR9KX0sMTgyNzA6KGMsZix0KT0+e3ZhciBuPXQoMzM0NCk7Yy5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QobihlKSl9fSwxODg4MzooYyxmLHQpPT57dCg5OTY1MCksdCgxNzQ4MiksdCg1NjA5NCl9LDE5MTkwOihj''@;'; put 'put ''LGYsdCk9Pnt2YXIgbj10KDQyMjgpLGU9dCg2MzM4Nykscz10KDY3NTc0KSgic3BlY2llcyIpO2MuZXhwb3J0cz1mdW5jdGlvbihvLHUpe3ZhciBpLGw9bihvKS5jb25zdHJ1Y3RvcjtyZXR1cm4gdm9pZCAwPT09bHx8bnVsbD09KGk9bihsKVtzXSk/dTplKGkpfX0sMTkyNjk6KGMsZix0KT0+''@;'; put 'put ''e3ZhciBuPXQoNzE2MzIpLGU9dCg4MDk1Nikscz10KDk3MzgwKSxvPXQoNDIyOCksdT10KDQwNjI3KSxsPXMua2V5cyxpPXMua2V5LHY9ZnVuY3Rpb24ocCxkKXt2YXIgeT1sKHAsZCksRT11KHApO2lmKG51bGw9PT1FKXJldHVybiB5O3ZhciBnPXYoRSxkKTtyZXR1cm4gZy5sZW5ndGg/eS5s''@;'; put 'put ''ZW5ndGg/ZShuZXcgbih5LmNvbmNhdChnKSkpOmc6eX07cy5leHAoe2dldE1ldGFkYXRhS2V5czpmdW5jdGlvbihkKXtyZXR1cm4gdihvKGQpLGFyZ3VtZW50cy5sZW5ndGg8Mj92b2lkIDA6aShhcmd1bWVudHNbMV0pKX19KX0sMTk2MjA6KGMsZix0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5Q''@;'; put 'put ''LCJBcnJheSIse2NvcHlXaXRoaW46dCg4NDQzOCl9KSx0KDg4MTg0KSgiY29weVdpdGhpbiIpfSwyMDEwNzooYyxmLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNDIyOCksZT10KDgzMDQ4KSxzPSJudW1iZXIiO2MuZXhwb3J0cz1mdW5jdGlvbihvKXtpZigic3RyaW5nIiE9PW8mJm8hPT1z''@;'; put 'put ''JiYiZGVmYXVsdCIhPT1vKXRocm93IFR5cGVFcnJvcigiSW5jb3JyZWN0IGhpbnQiKTtyZXR1cm4gZShuKHRoaXMpLG8hPXMpfX0sMjAzNDE6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDk1NDExKSxlPXQoNDIyOCkscz10KDE5MTkwKSxvPXQoMjg4MjgpLHU9dCg4MTQ4NSksbD10''@;'; put 'put ''KDUyNTM1KSxpPXQoNjk2MDApLHY9dCg3OTQ0OCkscD1NYXRoLm1pbixkPVtdLnB1c2gseT0ic3BsaXQiLEU9Imxlbmd0aCIsZz0ibGFzdEluZGV4IixEPTQyOTQ5NjcyOTUsRj0hdihmdW5jdGlvbigpe1JlZ0V4cChELCJ5Iil9KTt0KDY5MjI4KSgic3BsaXQiLDIsZnVuY3Rpb24oeCxBLGss''@;'; put 'put ''UCl7dmFyIE07cmV0dXJuIE09ImMiPT0iYWJiYyJbeV0oLyhiKSovKVsxXXx8NCE9InRlc3QiW3ldKC8oPzopLywtMSlbRV18fDIhPSJhYiJbeV0oLyg/OmFiKSovKVtFXXx8NCE9Ii4iW3ldKC8oLj8pKC4/KS8pW0VdfHwiLiJbeV0oLygpKCkvKVtFXT4xfHwiIlt5XSgvLj8vKVtFXT9mdW5j''@;'; put 'put ''dGlvbihULGIpe3ZhciBMPVN0cmluZyh0aGlzKTtpZih2b2lkIDA9PT1UJiYwPT09YilyZXR1cm5bXTtpZighbihUKSlyZXR1cm4gay5jYWxsKEwsVCxiKTtmb3IodmFyIG10LHEsWCxVPVtdLG50PTAsdHQ9dm9pZCAwPT09Yj9EOmI+Pj4wLHl0PW5ldyBSZWdFeHAoVC5zb3VyY2UsKFQuaWdu''@;'; put 'put ''b3JlQ2FzZT8iaSI6IiIpKyhULm11bHRpbGluZT8ibSI6IiIpKyhULnVuaWNvZGU/InUiOiIiKSsoVC5zdGlja3k/InkiOiIiKSsiZyIpOyhtdD1pLmNhbGwoeXQsTCkpJiYhKChxPXl0W2ddKT5udCYmKFUucHVzaChMLnNsaWNlKG50LG10LmluZGV4KSksbXRbRV0+MSYmbXQuaW5kZXg8TFtF''@;'; put 'put ''XSYmZC5hcHBseShVLG10LnNsaWNlKDEpKSxYPW10WzBdW0VdLG50PXEsVVtFXT49dHQpKTspeXRbZ109PT1tdC5pbmRleCYmeXRbZ10rKztyZXR1cm4gbnQ9PT1MW0VdPyhYfHwheXQudGVzdCgiIikpJiZVLnB1c2goIiIpOlUucHVzaChMLnNsaWNlKG50KSksVVtFXT50dD9VLnNsaWNlKDAs''@;'; put 'put ''dHQpOlV9OiIwIlt5XSh2b2lkIDAsMClbRV0/ZnVuY3Rpb24oVCxiKXtyZXR1cm4gdm9pZCAwPT09VCYmMD09PWI/W106ay5jYWxsKHRoaXMsVCxiKX06ayxbZnVuY3Rpb24oYixMKXt2YXIgVT14KHRoaXMpLFo9Yj8uW0FdO3JldHVybiB2b2lkIDAhPT1aP1ouY2FsbChiLFUsTCk6TS5jYWxs''@;'; put 'put ''KFN0cmluZyhVKSxiLEwpfSxmdW5jdGlvbihULGIpe3ZhciBMPVAoTSxULHRoaXMsYixNIT09ayk7aWYoTC5kb25lKXJldHVybiBMLnZhbHVlO3ZhciBVPWUoVCksWj1TdHJpbmcodGhpcyksbnQ9cyhVLFJlZ0V4cCksdHQ9VS51bmljb2RlLG10PW5ldyBudChGP1U6Il4oPzoiK1Uuc291cmNl''@;'; put 'put ''KyIpIiwoVS5pZ25vcmVDYXNlPyJpIjoiIikrKFUubXVsdGlsaW5lPyJtIjoiIikrKFUudW5pY29kZT8idSI6IiIpKyhGPyJ5IjoiZyIpKSxxPXZvaWQgMD09PWI/RDpiPj4+MDtpZigwPT09cSlyZXR1cm5bXTtpZigwPT09Wi5sZW5ndGgpcmV0dXJuIG51bGw9PT1sKG10LFopP1taXTpbXTtm''@;'; put 'put ''b3IodmFyIFg9MCxldD0wLFY9W107ZXQ8Wi5sZW5ndGg7KXttdC5sYXN0SW5kZXg9Rj9ldDowO3ZhciBkdCxsdD1sKG10LEY/WjpaLnNsaWNlKGV0KSk7aWYobnVsbD09PWx0fHwoZHQ9cCh1KG10Lmxhc3RJbmRleCsoRj8wOmV0KSksWi5sZW5ndGgpKT09PVgpZXQ9byhaLGV0LHR0KTtlbHNl''@;'; put 'put ''e2lmKFYucHVzaChaLnNsaWNlKFgsZXQpKSxWLmxlbmd0aD09PXEpcmV0dXJuIFY7Zm9yKHZhciBDdD0xO0N0PD1sdC5sZW5ndGgtMTtDdCsrKWlmKFYucHVzaChsdFtDdF0pLFYubGVuZ3RoPT09cSlyZXR1cm4gVjtldD1YPWR0fX1yZXR1cm4gVi5wdXNoKFouc2xpY2UoWCkpLFZ9XX0pfSwy''@;'; put 'put ''MDc2MjooYyxmLHQpPT57dmFyIG49dCgzNDg0OCksZT10KDY3NTc0KSgiaXRlcmF0b3IiKSxzPXQoNjA5MDYpO2MuZXhwb3J0cz10KDU2MDk0KS5nZXRJdGVyYXRvck1ldGhvZD1mdW5jdGlvbihvKXtpZihudWxsIT1vKXJldHVybiBvW2VdfHxvWyJAQGl0ZXJhdG9yIl18fHNbbihvKV19fSwy''@;'; put 'put ''MDk1NzooYyxmLHQpPT57InVzZSBzdHJpY3QiO3QoNDA2MjkpKCJ0cmltIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLDMpfX0pfSwyMTYyNjooYyxmLHQpPT57dmFyIG49dCg0Nzk2NyksZT10KDQyMjgpLHM9dCg1MTMxMSk7Yy5leHBvcnRzPXQoMTc2Myk/''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnRpZXM6ZnVuY3Rpb24odSxsKXtlKHUpO2Zvcih2YXIgZCxpPXMobCksdj1pLmxlbmd0aCxwPTA7dj5wOyluLmYodSxkPWlbcCsrXSxsW2RdKTtyZXR1cm4gdX19LDIxODgzOihjLGYsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUywiUmVmbGVjdCIse2hhczpm''@;'; put 'put ''dW5jdGlvbihzLG8pe3JldHVybiBvIGluIHN9fSl9LDIyMDIwOihjLGYpPT57Zi5yZWFkPWZ1bmN0aW9uKHQsbixlLHMsbyl7dmFyIHUsbCxpPTgqby1zLTEsdj0oMTw8aSktMSxwPXY+PjEsZD0tNyx5PWU/by0xOjAsRT1lPy0xOjEsZz10W24reV07Zm9yKHkrPUUsdT1nJigxPDwtZCktMSxn''@;'; put 'put ''Pj49LWQsZCs9aTtkPjA7dT0yNTYqdSt0W24reV0seSs9RSxkLT04KTtmb3IobD11JigxPDwtZCktMSx1Pj49LWQsZCs9cztkPjA7bD0yNTYqbCt0W24reV0seSs9RSxkLT04KTtpZigwPT09dSl1PTEtcDtlbHNle2lmKHU9PT12KXJldHVybiBsP05hTjoxLzAqKGc/LTE6MSk7bCs9TWF0aC5w''@;'; put 'put ''b3coMixzKSx1LT1wfXJldHVybihnPy0xOjEpKmwqTWF0aC5wb3coMix1LXMpfSxmLndyaXRlPWZ1bmN0aW9uKHQsbixlLHMsbyx1KXt2YXIgbCxpLHYscD04KnUtby0xLGQ9KDE8PHApLTEseT1kPj4xLEU9MjM9PT1vP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxnPXM/MDp1''@;'; put 'put ''LTEsRD1zPzE6LTEsRj1uPDB8fDA9PT1uJiYxL248MD8xOjA7Zm9yKG49TWF0aC5hYnMobiksaXNOYU4obil8fG49PT0xLzA/KGk9aXNOYU4obik/MTowLGw9ZCk6KGw9TWF0aC5mbG9vcihNYXRoLmxvZyhuKS9NYXRoLkxOMiksbioodj1NYXRoLnBvdygyLC1sKSk8MSYmKGwtLSx2Kj0yKSwo''@;'; put 'put ''bis9bCt5Pj0xP0UvdjpFKk1hdGgucG93KDIsMS15KSkqdj49MiYmKGwrKyx2Lz0yKSxsK3k+PWQ/KGk9MCxsPWQpOmwreT49MT8oaT0obip2LTEpKk1hdGgucG93KDIsbyksbCs9eSk6KGk9bipNYXRoLnBvdygyLHktMSkqTWF0aC5wb3coMixvKSxsPTApKTtvPj04O3RbZStnXT0yNTUmaSxn''@;'; put 'put ''Kz1ELGkvPTI1NixvLT04KTtmb3IobD1sPDxvfGkscCs9bztwPjA7dFtlK2ddPTI1NSZsLGcrPUQsbC89MjU2LHAtPTgpO3RbZStnLURdfD0xMjgqRn19LDIyNjQyOihjLGYsdCk9Pnt2YXIgbj10KDU3MjIxKSxlPXQoNjg2NDEpLmY7dCg4MDkyMykoImdldE93blByb3BlcnR5RGVzY3JpcHRv''@;'; put 'put ''ciIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24obyx1KXtyZXR1cm4gZShuKG8pLHUpfX0pfSwyMjc1MDpjPT57Yy5leHBvcnRzPSExfSwyMjkxMzooYyxmLHQpPT57dCgxNzQ4MiksdCg4Mjk3NSksdCgzNTg5MCksdCg5MzM4NiksdCg1NjA5NCl9LDIyOTU2OihjLGYsdCk9PntjLmV4cG9y''@;'; put 'put ''dHM9IXQoMTc2MykmJiF0KDc5NDQ4KShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkodCg0NjAzNCkoImRpdiIpLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSwyMzAxMTooYyxmLHQpPT57dmFyIG49dCg2NzUyNiksZT10KDU2MDk0KSxzPXQo''@;'; put 'put ''MjI3NTApLG89dCg0Nzk2MCksdT10KDQ3OTY3KS5mO2MuZXhwb3J0cz1mdW5jdGlvbihsKXt2YXIgaT1lLlN5bWJvbHx8KGUuU3ltYm9sPXM/e306bi5TeW1ib2x8fHt9KTsiXyIhPWwuY2hhckF0KDApJiYhKGwgaW4gaSkmJnUoaSxsLHt2YWx1ZTpvLmYobCl9KX19LDIzNDgzOihjLGYsdCk9''@;'; put 'put ''Pnt2YXIgbj10KDkyMTI3KSxlPXQoNTcyMjEpLHM9dCg4MTQ4NSk7bihuLlMsIlN0cmluZyIse3JhdzpmdW5jdGlvbih1KXtmb3IodmFyIGw9ZSh1LnJhdyksaT1zKGwubGVuZ3RoKSx2PWFyZ3VtZW50cy5sZW5ndGgscD1bXSxkPTA7aT5kOylwLnB1c2goU3RyaW5nKGxbZCsrXSkpLGQ8diYm''@;'; put 'put ''cC5wdXNoKFN0cmluZyhhcmd1bWVudHNbZF0pKTtyZXR1cm4gcC5qb2luKCIiKX19KX0sMjQwNTA6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt0KDE4ODgzKSx0KDU0OTQwKSx0KDM5MjcxKSx0KDUyNDQ0KSx0KDI2MjAzKSx0KDE1NjI2KSx0KDg4MDI1KSx0KDU2NDQyKSx0KDMyODk5KSx0KDY2''@;'; put 'put ''Mzc0KSx0KDQyNDYpLHQoMjI5MTMpLHQoMTA3NDMpLHQoNjU4NDYpLHQoOTM1MyksdCg5NjkzNSksdCg5MjU2OCk7dmFyIGR0PXQoODM4MzgpO3dpbmRvdy5nbG9iYWw9d2luZG93LHdpbmRvdy5nbG9iYWwuQnVmZmVyPXdpbmRvdy5nbG9iYWwuQnVmZmVyfHxkdC5CdWZmZXIsd2luZG93LnBy''@;'; put 'put ''b2Nlc3M9e3ZlcnNpb246IiJ9fSwyNDg3NzpjPT57Yy5leHBvcnRzPWZ1bmN0aW9uKGYsdCxuKXt2YXIgZT12b2lkIDA9PT1uO3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiBlP2YoKTpmLmNhbGwobik7Y2FzZSAxOnJldHVybiBlP2YodFswXSk6Zi5jYWxsKG4sdFswXSk7Y2FzZSAy''@;'; put 'put ''OnJldHVybiBlP2YodFswXSx0WzFdKTpmLmNhbGwobix0WzBdLHRbMV0pO2Nhc2UgMzpyZXR1cm4gZT9mKHRbMF0sdFsxXSx0WzJdKTpmLmNhbGwobix0WzBdLHRbMV0sdFsyXSk7Y2FzZSA0OnJldHVybiBlP2YodFswXSx0WzFdLHRbMl0sdFszXSk6Zi5jYWxsKG4sdFswXSx0WzFdLHRbMl0s''@;'; put 'put ''dFszXSl9cmV0dXJuIGYuYXBwbHkobix0KX19LDI1MTcwOihjLGYsdCk9Pnt2YXIgbj10KDQzMzA1KSxlPXQoNDIyOCkscz1mdW5jdGlvbihvLHUpe2lmKGUobyksIW4odSkmJm51bGwhPT11KXRocm93IFR5cGVFcnJvcih1KyI6IGNhbid0IHNldCBhcyBwcm90b3R5cGUhIil9O2MuZXhwb3J0''@;'; put 'put ''cz17c2V0Ok9iamVjdC5zZXRQcm90b3R5cGVPZnx8KCJfX3Byb3RvX18iaW57fT9mdW5jdGlvbihvLHUsbCl7dHJ5eyhsPXQoMzUwNTIpKEZ1bmN0aW9uLmNhbGwsdCg2ODY0MSkuZihPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iKS5zZXQsMikpKG8sW10pLHU9IShvIGluc3RhbmNlb2Yg''@;'; put 'put ''QXJyYXkpfWNhdGNoe3U9ITB9cmV0dXJuIGZ1bmN0aW9uKHYscCl7cmV0dXJuIHModixwKSx1P3YuX19wcm90b19fPXA6bCh2LHApLHZ9fSh7fSwhMSk6dm9pZCAwKSxjaGVjazpzfX0sMjUyMDM6KGMsZix0KT0+e3ZhciBuPXQoNjc1NzQpKCJtYXRjaCIpO2MuZXhwb3J0cz1mdW5jdGlvbihl''@;'; put 'put ''KXt2YXIgcz0vLi87dHJ5eyIvLi8iW2VdKHMpfWNhdGNoe3RyeXtyZXR1cm4gc1tuXT0hMSwhIi8uLyJbZV0ocyl9Y2F0Y2h7fX1yZXR1cm4hMH19LDI2MjAzOihjLGYsdCk9Pnt0KDk2MTA4KSx0KDU2MDk0KX0sMjYzMTY6KGMsZix0KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCgyNTE3MCk7ZSYm''@;'; put 'put ''bihuLlMsIlJlZmxlY3QiLHtzZXRQcm90b3R5cGVPZjpmdW5jdGlvbihvLHUpe2UuY2hlY2sobyx1KTt0cnl7cmV0dXJuIGUuc2V0KG8sdSksITB9Y2F0Y2h7cmV0dXJuITF9fX0pfSwyNzA4NzpjPT57dmFyIGY9TWF0aC5jZWlsLHQ9TWF0aC5mbG9vcjtjLmV4cG9ydHM9ZnVuY3Rpb24obil7''@;'; put 'put ''cmV0dXJuIGlzTmFOKG49K24pPzA6KG4+MD90OmYpKG4pfX0sMjc5MjY6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDI3MDg3KSxlPXQoMzM0NCk7Yy5leHBvcnRzPWZ1bmN0aW9uKG8pe3ZhciB1PVN0cmluZyhlKHRoaXMpKSxsPSIiLGk9bihvKTtpZihpPDB8fGk9PTEvMCl0aHJv''@;'; put 'put ''dyBSYW5nZUVycm9yKCJDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZSIpO2Zvcig7aT4wOyhpPj4+PTEpJiYodSs9dSkpMSZpJiYobCs9dSk7cmV0dXJuIGx9fSwyODIwNjooYyxmLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoMTc2MyksZT10KDUxMzExKSxzPXQoMTA2MCksbz10KDg0NDkpLHU9''@;'; put 'put ''dCgxODI3MCksbD10KDYxMjQ5KSxpPU9iamVjdC5hc3NpZ247Yy5leHBvcnRzPSFpfHx0KDc5NDQ4KShmdW5jdGlvbigpe3ZhciB2PXt9LHA9e30sZD1TeW1ib2woKSx5PSJhYmNkZWZnaGlqa2xtbm9wcXJzdCI7cmV0dXJuIHZbZF09Nyx5LnNwbGl0KCIiKS5mb3JFYWNoKGZ1bmN0aW9uKEUp''@;'; put 'put ''e3BbRV09RX0pLDchPWkoe30sdilbZF18fE9iamVjdC5rZXlzKGkoe30scCkpLmpvaW4oIiIpIT15fSk/ZnVuY3Rpb24ocCxkKXtmb3IodmFyIHk9dShwKSxFPWFyZ3VtZW50cy5sZW5ndGgsZz0xLEQ9cy5mLEY9by5mO0U+ZzspZm9yKHZhciBNLHg9bChhcmd1bWVudHNbZysrXSksQT1EP2Uo''@;'; put 'put ''eCkuY29uY2F0KEQoeCkpOmUoeCksaz1BLmxlbmd0aCxQPTA7az5QOylNPUFbUCsrXSwoIW58fEYuY2FsbCh4LE0pKSYmKHlbTV09eFtNXSk7cmV0dXJuIHl9Oml9LDI4NTQzOihjLGYsdCk9PnsidXNlIHN0cmljdCI7dCg1MjQ2OCkoInN0cmlrZSIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIG4odGhpcywic3RyaWtlIiwiIiwiIil9fSl9LDI4ODI4OihjLGYsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MTIxMikoITApO2MuZXhwb3J0cz1mdW5jdGlvbihlLHMsbyl7cmV0dXJuIHMrKG8/bihlLHMpLmxlbmd0aDoxKX19LDI4ODU5OihjLGYsdCk9Pnt2YXIg''@;'; put 'put ''bj10KDY3NTI2KSxlPXQoMzMzNDEpLHM9dCg1NzkxNyksbz10KDQ0MTUpKCJzcmMiKSx1PXQoNDk0NjEpLGw9InRvU3RyaW5nIixpPSgiIit1KS5zcGxpdChsKTt0KDU2MDk0KS5pbnNwZWN0U291cmNlPWZ1bmN0aW9uKHYpe3JldHVybiB1LmNhbGwodil9LChjLmV4cG9ydHM9ZnVuY3Rpb24o''@;'; put 'put ''dixwLGQseSl7dmFyIEU9ImZ1bmN0aW9uIj09dHlwZW9mIGQ7RSYmKHMoZCwibmFtZSIpfHxlKGQsIm5hbWUiLHApKSx2W3BdIT09ZCYmKEUmJihzKGQsbyl8fGUoZCxvLHZbcF0/IiIrdltwXTppLmpvaW4oU3RyaW5nKHApKSkpLHY9PT1uP3ZbcF09ZDp5P3ZbcF0/dltwXT1kOmUodixwLGQp''@;'; put 'put ''OihkZWxldGUgdltwXSxlKHYscCxkKSkpfSkoRnVuY3Rpb24ucHJvdG90eXBlLGwsZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdGhpcyYmdGhpc1tvXXx8dS5jYWxsKHRoaXMpfSl9LDI4ODcyOihjLGYsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDc4''@;'; put 'put ''OTQyKSxzPSJpbmNsdWRlcyI7bihuLlArbi5GKnQoMjUyMDMpKHMpLCJTdHJpbmciLHtpbmNsdWRlczpmdW5jdGlvbih1KXtyZXR1cm4hIX5lKHRoaXMsdSxzKS5pbmRleE9mKHUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSwyOTE0NzooYyxmLHQpPT57dmFy''@;'; put 'put ''IG49dCg5MjEyNyksZT10KDc1NTUxKTtuKG4uUytuLkYqKGUhPU1hdGguZXhwbTEpLCJNYXRoIix7ZXhwbTE6ZX0pfSwzMTEwNDooYyxmLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDQwNjI3KSxzPXQoNDIyOCk7bihuLlMsIlJlZmxlY3QiLHtnZXRQcm90b3R5cGVPZjpmdW5jdGlvbih1KXty''@;'; put 'put ''ZXR1cm4gZShzKHUpKX19KX0sMzI0MDU6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoOTEyMTIpKCExKTtuKG4uUCwiU3RyaW5nIix7Y29kZVBvaW50QXQ6ZnVuY3Rpb24obyl7cmV0dXJuIGUodGhpcyxvKX19KX0sMzI4OTk6KGMsZix0KT0+e3QoMTMyOTIpLHQo''@;'; put 'put ''NTIzNDYpLHQoOTQyOSksdCg3ODQ5KSx0KDQ4OTUxKSxjLmV4cG9ydHM9RGF0ZX0sMzMzNDE6KGMsZix0KT0+e3ZhciBuPXQoNDc5NjcpLGU9dCgxMTk5Nik7Yy5leHBvcnRzPXQoMTc2Myk/ZnVuY3Rpb24ocyxvLHUpe3JldHVybiBuLmYocyxvLGUoMSx1KSl9OmZ1bmN0aW9uKHMsbyx1KXty''@;'; put 'put ''ZXR1cm4gc1tvXT11LHN9fSwzMzU4OTooYyxmLHQpPT57dmFyIG49dCg2NzUyNikucGFyc2VGbG9hdCxlPXQoNDA2MjkpLnRyaW07Yy5leHBvcnRzPTEvbih0KDc4NDUxKSsiLTAiKSE9LTEvMD9mdW5jdGlvbihvKXt2YXIgdT1lKFN0cmluZyhvKSwzKSxsPW4odSk7cmV0dXJuIDA9PT1sJiYi''@;'; put 'put ''LSI9PXUuY2hhckF0KDApPy0wOmx9Om59LDMzNzA2OihjLGYsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDU3MjIxKSxzPXQoMjcwODcpLG89dCg4MTQ4NSksdT1bXS5sYXN0SW5kZXhPZixsPSEhdSYmMS9bMV0ubGFzdEluZGV4T2YoMSwtMCk8MDtuKG4uUCtuLkYqKGx8''@;'; put 'put ''fCF0KDg2ODg0KSh1KSksIkFycmF5Iix7bGFzdEluZGV4T2Y6ZnVuY3Rpb24odil7aWYobClyZXR1cm4gdS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fDA7dmFyIHA9ZSh0aGlzKSxkPW8ocC5sZW5ndGgpLHk9ZC0xO2Zvcihhcmd1bWVudHMubGVuZ3RoPjEmJih5PU1hdGgubWluKHkscyhhcmd1''@;'; put 'put ''bWVudHNbMV0pKSkseTwwJiYoeT1kK3kpO3k+PTA7eS0tKWlmKHkgaW4gcCYmcFt5XT09PXYpcmV0dXJuIHl8fDA7cmV0dXJuLTF9fSl9LDMzODQyOihjLGYsdCk9Pnt2YXIgbj10KDQzMzA1KSxlPU1hdGguZmxvb3I7Yy5leHBvcnRzPWZ1bmN0aW9uKG8pe3JldHVybiFuKG8pJiZpc0Zpbml0''@;'; put 'put ''ZShvKSYmZShvKT09PW99fSwzNDQxOTooYyxmLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlMsIk51bWJlciIse0VQU0lMT046TWF0aC5wb3coMiwtNTIpfSl9LDM0NTYxOihjLGYsdCk9Pnt2YXIgbj10KDU3OTE3KSxlPXQoNTcyMjEpLHM9dCg2MTQ2NCkoITEpLG89dCg0MDc2NikoIklFX1BS''@;'; put 'put ''T1RPIik7Yy5leHBvcnRzPWZ1bmN0aW9uKHUsbCl7dmFyIGQsaT1lKHUpLHY9MCxwPVtdO2ZvcihkIGluIGkpZCE9byYmbihpLGQpJiZwLnB1c2goZCk7Zm9yKDtsLmxlbmd0aD52OyluKGksZD1sW3YrK10pJiYofnMocCxkKXx8cC5wdXNoKGQpKTtyZXR1cm4gcH19LDM0NjA5OihjLGYsdCk9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDYxNDY0KSghMSkscz1bXS5pbmRleE9mLG89ISFzJiYxL1sxXS5pbmRleE9mKDEsLTApPDA7bihuLlArbi5GKihvfHwhdCg4Njg4NCkocykpLCJBcnJheSIse2luZGV4T2Y6ZnVuY3Rpb24obCl7cmV0dXJuIG8/cy5hcHBseSh0aGlz''@;'; put 'put ''LGFyZ3VtZW50cyl8fDA6ZSh0aGlzLGwsYXJndW1lbnRzWzFdKX19KX0sMzQ4NDg6KGMsZix0KT0+e3ZhciBuPXQoNTUwODkpLGU9dCg2NzU3NCkoInRvU3RyaW5nVGFnIikscz0iQXJndW1lbnRzIj09bihmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpO2MuZXhwb3J0cz1mdW5jdGlv''@;'; put 'put ''bih1KXt2YXIgbCxpLHY7cmV0dXJuIHZvaWQgMD09PXU/IlVuZGVmaW5lZCI6bnVsbD09PXU/Ik51bGwiOiJzdHJpbmciPT10eXBlb2YoaT1mdW5jdGlvbih1LGwpe3RyeXtyZXR1cm4gdVtsXX1jYXRjaHt9fShsPU9iamVjdCh1KSxlKSk/aTpzP24obCk6Ik9iamVjdCI9PSh2PW4obCkpJiYi''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgbC5jYWxsZWU/IkFyZ3VtZW50cyI6dn19LDM1MDUyOihjLGYsdCk9Pnt2YXIgbj10KDYzMzg3KTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSxzLG8pe2lmKG4oZSksdm9pZCAwPT09cylyZXR1cm4gZTtzd2l0Y2gobyl7Y2FzZSAxOnJldHVybiBmdW5jdGlvbih1KXty''@;'; put 'put ''ZXR1cm4gZS5jYWxsKHMsdSl9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24odSxsKXtyZXR1cm4gZS5jYWxsKHMsdSxsKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbih1LGwsaSl7cmV0dXJuIGUuY2FsbChzLHUsbCxpKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkocyxhcmd1bWVu''@;'; put 'put ''dHMpfX19LDM1NDMzOihjLGYsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPXQoNDIyOCkscz1PYmplY3QuaXNFeHRlbnNpYmxlO24obi5TLCJSZWZsZWN0Iix7aXNFeHRlbnNpYmxlOmZ1bmN0aW9uKHUpe3JldHVybiBlKHUpLCFzfHxzKHUpfX0pfSwzNTU2NDooYyxmLHQpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBuPXQoMTgyNzApLGU9dCg3MDE1Nykscz10KDgxNDg1KTtjLmV4cG9ydHM9ZnVuY3Rpb24odSl7Zm9yKHZhciBsPW4odGhpcyksaT1zKGwubGVuZ3RoKSx2PWFyZ3VtZW50cy5sZW5ndGgscD1lKHY+MT9hcmd1bWVudHNbMV06dm9pZCAwLGkpLGQ9dj4yP2FyZ3VtZW50c1syXTp2b2lk''@;'; put 'put ''IDAseT12b2lkIDA9PT1kP2k6ZShkLGkpO3k+cDspbFtwKytdPXU7cmV0dXJuIGx9fSwzNTg5MDooYyxmLHQpPT57Zm9yKHZhciBuPXQoOTUxNjUpLGU9dCg1MTMxMSkscz10KDI4ODU5KSxvPXQoNjc1MjYpLHU9dCgzMzM0MSksbD10KDYwOTA2KSxpPXQoNjc1NzQpLHY9aSgiaXRlcmF0b3Ii''@;'; put 'put ''KSxwPWkoInRvU3RyaW5nVGFnIiksZD1sLkFycmF5LHk9e0NTU1J1bGVMaXN0OiEwLENTU1N0eWxlRGVjbGFyYXRpb246ITEsQ1NTVmFsdWVMaXN0OiExLENsaWVudFJlY3RMaXN0OiExLERPTVJlY3RMaXN0OiExLERPTVN0cmluZ0xpc3Q6ITEsRE9NVG9rZW5MaXN0OiEwLERhdGFUcmFuc2Zl''@;'; put 'put ''ckl0ZW1MaXN0OiExLEZpbGVMaXN0OiExLEhUTUxBbGxDb2xsZWN0aW9uOiExLEhUTUxDb2xsZWN0aW9uOiExLEhUTUxGb3JtRWxlbWVudDohMSxIVE1MU2VsZWN0RWxlbWVudDohMSxNZWRpYUxpc3Q6ITAsTWltZVR5cGVBcnJheTohMSxOYW1lZE5vZGVNYXA6ITEsTm9kZUxpc3Q6ITAsUGFp''@;'; put 'put ''bnRSZXF1ZXN0TGlzdDohMSxQbHVnaW46ITEsUGx1Z2luQXJyYXk6ITEsU1ZHTGVuZ3RoTGlzdDohMSxTVkdOdW1iZXJMaXN0OiExLFNWR1BhdGhTZWdMaXN0OiExLFNWR1BvaW50TGlzdDohMSxTVkdTdHJpbmdMaXN0OiExLFNWR1RyYW5zZm9ybUxpc3Q6ITEsU291cmNlQnVmZmVyTGlzdDoh''@;'; put 'put ''MSxTdHlsZVNoZWV0TGlzdDohMCxUZXh0VHJhY2tDdWVMaXN0OiExLFRleHRUcmFja0xpc3Q6ITEsVG91Y2hMaXN0OiExfSxFPWUoeSksZz0wO2c8RS5sZW5ndGg7ZysrKXt2YXIgayxEPUVbZ10sRj15W0RdLHg9b1tEXSxBPXgmJngucHJvdG90eXBlO2lmKEEmJihBW3ZdfHx1KEEsdixkKSxB''@;'; put 'put ''W3BdfHx1KEEscCxEKSxsW0RdPWQsRikpZm9yKGsgaW4gbilBW2tdfHxzKEEsayxuW2tdLCEwKX19LDM2MTk3OihjLGYsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg0Nzk2NykuZixlPXQoODQ3MTkpLHM9dCg5NjA2NSksbz10KDM1MDUyKSx1PXQoMTY0NDApLGw9dCg0ODc5MCksaT10KDk4''@;'; put 'put ''MTc1KSx2PXQoNzQ5NzApLHA9dCg1NTc2MiksZD10KDE3NjMpLHk9dCgxMjk4OCkuZmFzdEtleSxFPXQoMTI4ODgpLGc9ZD8iX3MiOiJzaXplIixEPWZ1bmN0aW9uKEYseCl7dmFyIGssQT15KHgpO2lmKCJGIiE9PUEpcmV0dXJuIEYuX2lbQV07Zm9yKGs9Ri5fZjtrO2s9ay5uKWlmKGsuaz09''@;'; put 'put ''eClyZXR1cm4ga307Yy5leHBvcnRzPXtnZXRDb25zdHJ1Y3RvcjpmdW5jdGlvbihGLHgsQSxrKXt2YXIgUD1GKGZ1bmN0aW9uKE0sVCl7dShNLFAseCwiX2kiKSxNLl90PXgsTS5faT1lKG51bGwpLE0uX2Y9dm9pZCAwLE0uX2w9dm9pZCAwLE1bZ109MCxudWxsIT1UJiZsKFQsQSxNW2tdLE0p''@;'; put 'put ''fSk7cmV0dXJuIHMoUC5wcm90b3R5cGUse2NsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBUPUUodGhpcyx4KSxiPVQuX2ksTD1ULl9mO0w7TD1MLm4pTC5yPSEwLEwucCYmKEwucD1MLnAubj12b2lkIDApLGRlbGV0ZSBiW0wuaV07VC5fZj1ULl9sPXZvaWQgMCxUW2ddPTB9LGRlbGV0ZTpmdW5j''@;'; put 'put ''dGlvbihNKXt2YXIgVD1FKHRoaXMseCksYj1EKFQsTSk7aWYoYil7dmFyIEw9Yi5uLFU9Yi5wO2RlbGV0ZSBULl9pW2IuaV0sYi5yPSEwLFUmJihVLm49TCksTCYmKEwucD1VKSxULl9mPT1iJiYoVC5fZj1MKSxULl9sPT1iJiYoVC5fbD1VKSxUW2ddLS19cmV0dXJuISFifSxmb3JFYWNoOmZ1''@;'; put 'put ''bmN0aW9uKFQpe0UodGhpcyx4KTtmb3IodmFyIEwsYj1vKFQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7TD1MP0wubjp0aGlzLl9mOylmb3IoYihMLnYsTC5rLHRoaXMpO0wmJkwucjspTD1MLnB9LGhhczpmdW5jdGlvbihUKXtyZXR1cm4hIUQoRSh0aGlzLHgp''@;'; put 'put ''LFQpfX0pLGQmJm4oUC5wcm90b3R5cGUsInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLHgpW2ddfX0pLFB9LGRlZjpmdW5jdGlvbihGLHgsQSl7dmFyIFAsTSxrPUQoRix4KTtyZXR1cm4gaz9rLnY9QTooRi5fbD1rPXtpOk09eSh4LCEwKSxrOngsdjpBLHA6UD1GLl9sLG46''@;'; put 'put ''dm9pZCAwLHI6ITF9LEYuX2Z8fChGLl9mPWspLFAmJihQLm49ayksRltnXSsrLCJGIiE9PU0mJihGLl9pW01dPWspKSxGfSxnZXRFbnRyeTpELHNldFN0cm9uZzpmdW5jdGlvbihGLHgsQSl7aShGLHgsZnVuY3Rpb24oayxQKXt0aGlzLl90PUUoayx4KSx0aGlzLl9rPVAsdGhpcy5fbD12b2lk''@;'; put 'put ''IDB9LGZ1bmN0aW9uKCl7Zm9yKHZhciBrPXRoaXMsUD1rLl9rLE09ay5fbDtNJiZNLnI7KU09TS5wO3JldHVybiBrLl90JiYoay5fbD1NPU0/TS5uOmsuX3QuX2YpP3YoMCwia2V5cyI9PVA/TS5rOiJ2YWx1ZXMiPT1QP00udjpbTS5rLE0udl0pOihrLl90PXZvaWQgMCx2KDEpKX0sQT8iZW50''@;'; put 'put ''cmllcyI6InZhbHVlcyIsIUEsITApLHAoeCl9fX0sMzc3Mjc6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoMjcwODcpLHM9dCgxNTEyMiksbz10KDI3OTI2KSx1PTEuLnRvRml4ZWQsbD1NYXRoLmZsb29yLGk9WzAsMCwwLDAsMCwwXSx2PSJOdW1iZXIudG9GaXhl''@;'; put 'put ''ZDogaW5jb3JyZWN0IGludm9jYXRpb24hIixwPSIwIixkPWZ1bmN0aW9uKEYseCl7Zm9yKHZhciBBPS0xLGs9eDsrK0E8NjspaVtBXT0oays9RippW0FdKSUxZTcsaz1sKGsvMWU3KX0seT1mdW5jdGlvbihGKXtmb3IodmFyIHg9NixBPTA7LS14Pj0wOylpW3hdPWwoKEErPWlbeF0pL0YpLEE9''@;'; put 'put ''QSVGKjFlN30sRT1mdW5jdGlvbigpe2Zvcih2YXIgRj02LHg9IiI7LS1GPj0wOylpZigiIiE9PXh8fDA9PT1GfHwwIT09aVtGXSl7dmFyIEE9U3RyaW5nKGlbRl0pO3g9IiI9PT14P0E6eCtvLmNhbGwocCw3LUEubGVuZ3RoKStBfXJldHVybiB4fSxnPWZ1bmN0aW9uKEYseCxBKXtyZXR1cm4g''@;'; put 'put ''MD09PXg/QTp4JTI9PTE/ZyhGLHgtMSxBKkYpOmcoRipGLHgvMixBKX07bihuLlArbi5GKighIXUmJigiMC4wMDAiIT09OGUtNS50b0ZpeGVkKDMpfHwiMSIhPT0uOS50b0ZpeGVkKDApfHwiMS4yNSIhPT0xLjI1NS50b0ZpeGVkKDIpfHwiMTAwMDAwMDAwMDAwMDAwMDEyOCIhPT0oMHhkZTBi''@;'; put 'put ''NmIzYTc2NDAwODApLnRvRml4ZWQoMCkpfHwhdCg3OTQ0OCkoZnVuY3Rpb24oKXt1LmNhbGwoe30pfSkpLCJOdW1iZXIiLHt0b0ZpeGVkOmZ1bmN0aW9uKHgpe3ZhciBULGIsTCxVLEE9cyh0aGlzLHYpLGs9ZSh4KSxQPSIiLE09cDtpZihrPDB8fGs+MjApdGhyb3cgUmFuZ2VFcnJvcih2KTtp''@;'; put 'put ''ZihBIT1BKXJldHVybiJOYU4iO2lmKEE8PS0xZTIxfHxBPj0xZTIxKXJldHVybiBTdHJpbmcoQSk7aWYoQTwwJiYoUD0iLSIsQT0tQSksQT4xZS0yMSlpZihUPWZ1bmN0aW9uKEYpe2Zvcih2YXIgeD0wLEE9RjtBPj00MDk2Oyl4Kz0xMixBLz00MDk2O2Zvcig7QT49MjspeCs9MSxBLz0yO3Jl''@;'; put 'put ''dHVybiB4fShBKmcoMiw2OSwxKSktNjksYj1UPDA/QSpnKDIsLVQsMSk6QS9nKDIsVCwxKSxiKj00NTAzNTk5NjI3MzcwNDk2LChUPTUyLVQpPjApe2ZvcihkKDAsYiksTD1rO0w+PTc7KWQoMWU3LDApLEwtPTc7Zm9yKGQoZygxMCxMLDEpLDApLEw9VC0xO0w+PTIzOyl5KDE8PDIzKSxMLT0y''@;'; put 'put ''Mzt5KDE8PEwpLGQoMSwxKSx5KDIpLE09RSgpfWVsc2UgZCgwLGIpLGQoMTw8LVQsMCksTT1FKCkrby5jYWxsKHAsayk7cmV0dXJuIE09az4wP1ArKChVPU0ubGVuZ3RoKTw9az8iMC4iK28uY2FsbChwLGstVSkrTTpNLnNsaWNlKDAsVS1rKSsiLiIrTS5zbGljZShVLWspKTpQK019fSl9LDM4''@;'; put 'put ''NDM3OihjLGYsdCk9PnsidXNlIHN0cmljdCI7dCg1MjQ2OCkoImZvbnRzaXplIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIG4odGhpcywiZm9udCIsInNpemUiLHMpfX0pfSwzODQ1MTooYyxmLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlMsIk9iamVjdCIse2lzOnQo''@;'; put 'put ''NzM1OSl9KX0sMzkyNzE6KGMsZix0KT0+e3QoNjUwNDkpLHQoNzA0ODkpLHQoOTU1MDIpLHQoNTYwOTQpfSwzOTQ5NzooYyxmLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlMsIk51bWJlciIse2lzTmFOOmZ1bmN0aW9uKHMpe3JldHVybiBzIT1zfX0pfSwzOTYzODooYyxmLHQpPT57dCgxNzYz''@;'; put 'put ''KSYmImciIT0vLi9nLmZsYWdzJiZ0KDQ3OTY3KS5mKFJlZ0V4cC5wcm90b3R5cGUsImZsYWdzIix7Y29uZmlndXJhYmxlOiEwLGdldDp0KDExNTgpfSl9LDM5ODEzOihjLGYsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDY2MTc5KSgyKTtuKG4uUCtuLkYqIXQoODY4ODQp''@;'; put 'put ''KFtdLmZpbHRlciwhMCksIkFycmF5Iix7ZmlsdGVyOmZ1bmN0aW9uKG8pe3JldHVybiBlKHRoaXMsbyxhcmd1bWVudHNbMV0pfX0pfSw0MDM0NTooYyxmLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlMsIk1hdGgiLHtzaWduOnQoMzczMyl9KX0sNDA2Mjc6KGMsZix0KT0+e3ZhciBuPXQoNTc5''@;'; put 'put ''MTcpLGU9dCgxODI3MCkscz10KDQwNzY2KSgiSUVfUFJPVE8iKSxvPU9iamVjdC5wcm90b3R5cGU7Yy5leHBvcnRzPU9iamVjdC5nZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24odSl7cmV0dXJuIHU9ZSh1KSxuKHUscyk/dVtzXToiZnVuY3Rpb24iPT10eXBlb2YgdS5jb25zdHJ1Y3RvciYmdSBp''@;'; put 'put ''bnN0YW5jZW9mIHUuY29uc3RydWN0b3I/dS5jb25zdHJ1Y3Rvci5wcm90b3R5cGU6dSBpbnN0YW5jZW9mIE9iamVjdD9vOm51bGx9fSw0MDYyOTooYyxmLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDMzNDQpLHM9dCg3OTQ0OCksbz10KDc4NDUxKSx1PSJbIitvKyJdIixpPVJlZ0V4cCgiXiIr''@;'; put 'put ''dSt1KyIqIiksdj1SZWdFeHAodSt1KyIqJCIpLHA9ZnVuY3Rpb24oeSxFLGcpe3ZhciBEPXt9LEY9cyhmdW5jdGlvbigpe3JldHVybiEhb1t5XSgpfHwiXHUyMDBiXHg4NSIhPSJcdTIwMGJceDg1Ilt5XSgpfSkseD1EW3ldPUY/RShkKTpvW3ldO2cmJihEW2ddPXgpLG4obi5QK24uRipGLCJT''@;'; put 'put ''dHJpbmciLEQpfSxkPXAudHJpbT1mdW5jdGlvbih5LEUpe3JldHVybiB5PVN0cmluZyhlKHkpKSwxJkUmJih5PXkucmVwbGFjZShpLCIiKSksMiZFJiYoeT15LnJlcGxhY2UodiwiIikpLHl9O2MuZXhwb3J0cz1wfSw0MDc2NjooYyxmLHQpPT57dmFyIG49dCg0NDU1NikoImtleXMiKSxlPXQo''@;'; put 'put ''NDQxNSk7Yy5leHBvcnRzPWZ1bmN0aW9uKHMpe3JldHVybiBuW3NdfHwobltzXT1lKHMpKX19LDQxMzE4OihjLGYsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUywiTWF0aCIse2Zyb3VuZDp0KDcyMTIyKX0pfSw0MjgxODooYyxmLHQpPT57InVzZSBzdHJpY3QiO3QoNTI0NjgpKCJzbWFsbCIs''@;'; put 'put ''ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcywic21hbGwiLCIiLCIiKX19KX0sNDMzMDU6Yz0+e2MuZXhwb3J0cz1mdW5jdGlvbihmKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGY/bnVsbCE9PWY6ImZ1bmN0aW9uIj09dHlwZW9mIGZ9fSw0NDU1NjooYyxmLHQp''@;'; put 'put ''PT57dmFyIG49dCg1NjA5NCksZT10KDY3NTI2KSxzPSJfX2NvcmUtanNfc2hhcmVkX18iLG89ZVtzXXx8KGVbc109e30pOyhjLmV4cG9ydHM9ZnVuY3Rpb24odSxsKXtyZXR1cm4gb1t1XXx8KG9bdV09dm9pZCAwIT09bD9sOnt9KX0pKCJ2ZXJzaW9ucyIsW10pLnB1c2goe3ZlcnNpb246bi52''@;'; put 'put ''ZXJzaW9uLG1vZGU6dCgyMjc1MCk/InB1cmUiOiJnbG9iYWwiLGNvcHlyaWdodDoiXHhhOSAyMDIwIERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpIn0pfSw0NDg5NDooYyxmLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlAsIlN0cmluZyIse3JlcGVhdDp0KDI3OTI2KX0pfSw0NjAzNDoo''@;'; put 'put ''YyxmLHQpPT57dmFyIG49dCg0MzMwNSksZT10KDY3NTI2KS5kb2N1bWVudCxzPW4oZSkmJm4oZS5jcmVhdGVFbGVtZW50KTtjLmV4cG9ydHM9ZnVuY3Rpb24obyl7cmV0dXJuIHM/ZS5jcmVhdGVFbGVtZW50KG8pOnt9fX0sNDY1OTI6KGMsZix0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5TLCJN''@;'; put 'put ''YXRoIix7dHJ1bmM6ZnVuY3Rpb24ocyl7cmV0dXJuKHM+MD9NYXRoLmZsb29yOk1hdGguY2VpbCkocyl9fSl9LDQ3MzM0OihjLGYsdCk9PnsidXNlIHN0cmljdCI7dCg1MjQ2OCkoImJvbGQiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuKHRoaXMsImIiLCIiLCIiKX19''@;'; put 'put ''KX0sNDc4NzQ6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoNjU0Myk7bihuLlArbi5GKiF0KDg2ODg0KShbXS5yZWR1Y2VSaWdodCwhMCksIkFycmF5Iix7cmVkdWNlUmlnaHQ6ZnVuY3Rpb24obyl7cmV0dXJuIGUodGhpcyxvLGFyZ3VtZW50cy5sZW5ndGgsYXJn''@;'; put 'put ''dW1lbnRzWzFdLCEwKX19KX0sNDc4OTk6KGMsZix0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5TLCJBcnJheSIse2lzQXJyYXk6dCg3Nzk4MSl9KX0sNDc5NjA6KGMsZix0KT0+e2YuZj10KDY3NTc0KX0sNDc5Njc6KGMsZix0KT0+e3ZhciBuPXQoNDIyOCksZT10KDIyOTU2KSxzPXQoODMwNDgp''@;'; put 'put ''LG89T2JqZWN0LmRlZmluZVByb3BlcnR5O2YuZj10KDE3NjMpP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbihsLGksdil7aWYobihsKSxpPXMoaSwhMCksbih2KSxlKXRyeXtyZXR1cm4gbyhsLGksdil9Y2F0Y2h7fWlmKCJnZXQiaW4gdnx8InNldCJpbiB2KXRocm93IFR5cGVFcnJv''@;'; put 'put ''cigiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhIik7cmV0dXJuInZhbHVlImluIHYmJihsW2ldPXYudmFsdWUpLGx9fSw0ODIzNjooYyxmLHQpPT57dmFyIG49dCg0MzMwNSksZT10KDEyOTg4KS5vbkZyZWV6ZTt0KDgwOTIzKSgiZnJlZXplIixmdW5jdGlvbihzKXtyZXR1cm4gZnVuY3Rpb24o''@;'; put 'put ''dSl7cmV0dXJuIHMmJm4odSk/cyhlKHUpKTp1fX0pfSw0ODc5MDooYyxmLHQpPT57dmFyIG49dCgzNTA1MiksZT10KDk3MzY4KSxzPXQoMTUwOCksbz10KDQyMjgpLHU9dCg4MTQ4NSksbD10KDIwNzYyKSxpPXt9LHY9e30scD1jLmV4cG9ydHM9ZnVuY3Rpb24oZCx5LEUsZyxEKXt2YXIgayxQ''@;'; put 'put ''LE0sVCxGPUQ/ZnVuY3Rpb24oKXtyZXR1cm4gZH06bChkKSx4PW4oRSxnLHk/MjoxKSxBPTA7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEYpdGhyb3cgVHlwZUVycm9yKGQrIiBpcyBub3QgaXRlcmFibGUhIik7aWYocyhGKSl7Zm9yKGs9dShkLmxlbmd0aCk7az5BO0ErKylpZigoVD15P3gobyhQ''@;'; put 'put ''PWRbQV0pWzBdLFBbMV0pOngoZFtBXSkpPT09aXx8VD09PXYpcmV0dXJuIFR9ZWxzZSBmb3IoTT1GLmNhbGwoZCk7IShQPU0ubmV4dCgpKS5kb25lOylpZigoVD1lKE0seCxQLnZhbHVlLHkpKT09PWl8fFQ9PT12KXJldHVybiBUfTtwLkJSRUFLPWkscC5SRVRVUk49dn0sNDg5NTE6KGMsZix0''@;'; put 'put ''KT0+e3ZhciBuPXQoNjc1NzQpKCJ0b1ByaW1pdGl2ZSIpLGU9RGF0ZS5wcm90b3R5cGU7biBpbiBlfHx0KDMzMzQxKShlLG4sdCgyMDEwNykpfSw0OTQ2MTooYyxmLHQpPT57Yy5leHBvcnRzPXQoNDQ1NTYpKCJuYXRpdmUtZnVuY3Rpb24tdG8tc3RyaW5nIixGdW5jdGlvbi50b1N0cmluZyl9''@;'; put 'put ''LDUxMzExOihjLGYsdCk9Pnt2YXIgbj10KDM0NTYxKSxlPXQoODYxNDApO2MuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24obyl7cmV0dXJuIG4obyxlKX19LDUyMzQ2OihjLGYsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDE4MjcwKSxzPXQoODMwNDgpO24obi5Q''@;'; put 'put ''K24uRip0KDc5NDQ4KShmdW5jdGlvbigpe3JldHVybiBudWxsIT09bmV3IERhdGUoTmFOKS50b0pTT04oKXx8MSE9PURhdGUucHJvdG90eXBlLnRvSlNPTi5jYWxsKHt0b0lTT1N0cmluZzpmdW5jdGlvbigpe3JldHVybiAxfX0pfSksIkRhdGUiLHt0b0pTT046ZnVuY3Rpb24odSl7dmFyIGw9''@;'; put 'put ''ZSh0aGlzKSxpPXMobCk7cmV0dXJuIm51bWJlciIhPXR5cGVvZiBpfHxpc0Zpbml0ZShpKT9sLnRvSVNPU3RyaW5nKCk6bnVsbH19KX0sNTI0NDQ6KGMsZix0KT0+e3QoOTA1NzEpLHQoNTYwOTQpfSw1MjQ2ODooYyxmLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDc5NDQ4KSxzPXQoMzM0NCks''@;'; put 'put ''bz0vIi9nLHU9ZnVuY3Rpb24obCxpLHYscCl7dmFyIGQ9U3RyaW5nKHMobCkpLHk9IjwiK2k7cmV0dXJuIiIhPT12JiYoeSs9IiAiK3YrJz0iJytTdHJpbmcocCkucmVwbGFjZShvLCImcXVvdDsiKSsnIicpLHkrIj4iK2QrIjwvIitpKyI+In07Yy5leHBvcnRzPWZ1bmN0aW9uKGwsaSl7dmFy''@;'; put 'put ''IHY9e307dltsXT1pKHUpLG4obi5QK24uRiplKGZ1bmN0aW9uKCl7dmFyIHA9IiJbbF0oJyInKTtyZXR1cm4gcCE9PXAudG9Mb3dlckNhc2UoKXx8cC5zcGxpdCgnIicpLmxlbmd0aD4zfSksIlN0cmluZyIsdil9fSw1MjUzNTooYyxmLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoMzQ4NDgp''@;'; put 'put ''LGU9UmVnRXhwLnByb3RvdHlwZS5leGVjO2MuZXhwb3J0cz1mdW5jdGlvbihzLG8pe3ZhciB1PXMuZXhlYztpZigiZnVuY3Rpb24iPT10eXBlb2YgdSl7dmFyIGw9dS5jYWxsKHMsbyk7aWYoIm9iamVjdCIhPXR5cGVvZiBsKXRocm93IG5ldyBUeXBlRXJyb3IoIlJlZ0V4cCBleGVjIG1ldGhv''@;'; put 'put ''ZCByZXR1cm5lZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbiBPYmplY3Qgb3IgbnVsbCIpO3JldHVybiBsfWlmKCJSZWdFeHAiIT09bihzKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyIik7cmV0dXJuIGUuY2FsbChzLG8p''@;'; put 'put ''fX0sNTI2NTA6KGMsZix0KT0+e3ZhciBuPXQoNjg2NDEpLGU9dCg5MjEyNykscz10KDQyMjgpO2UoZS5TLCJSZWZsZWN0Iix7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOmZ1bmN0aW9uKHUsbCl7cmV0dXJuIG4uZihzKHUpLGwpfX0pfSw1M2UzOihjLGYsdCk9Pnt2YXIgbj10KDE4MjcwKSxl''@;'; put 'put ''PXQoNDA2MjcpO3QoODA5MjMpKCJnZXRQcm90b3R5cGVPZiIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24obyl7cmV0dXJuIGUobihvKSl9fSl9LDU0NTkxOihjLGYsdCk9PnsidXNlIHN0cmljdCI7dCg1MjQ2OCkoImJsaW5rIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gbih0aGlzLCJibGluayIsIiIsIiIpfX0pfSw1NDkxMzooYyxmLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg2NjE3OSkoMSk7bihuLlArbi5GKiF0KDg2ODg0KShbXS5tYXAsITApLCJBcnJheSIse21hcDpmdW5jdGlvbihvKXtyZXR1cm4gZSh0aGlzLG8sYXJndW1l''@;'; put 'put ''bnRzWzFdKX19KX0sNTQ5NDA6KGMsZix0KT0+e3QoOTk2NTApLHQoOTM1KSx0KDY2MDY0KSx0KDg5NDQ4KSx0KDIyNjQyKSx0KDUzZTMpLHQoODg2NDcpLHQoODE4OTUpLHQoNDgyMzYpLHQoNzM4MjIpLHQoMTU1NzIpLHQoNjkzMTgpLHQoNjUwMzIpLHQoNzkwNzMpLHQoMTE0MzApLHQoMzg0''@;'; put 'put ''NTEpLHQoMTgxMzIpLHQoMTc0ODIpLHQoNTYwOTQpfSw1NWUzOihjLGYsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUywiUmVmbGVjdCIse293bktleXM6dCg5NjIyMil9KX0sNTUwODk6Yz0+e3ZhciBmPXt9LnRvU3RyaW5nO2MuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZi5jYWxsKHQp''@;'; put 'put ''LnNsaWNlKDgsLTEpfX0sNTUzODU6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDc5NDQ4KSxlPURhdGUucHJvdG90eXBlLmdldFRpbWUscz1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyxvPWZ1bmN0aW9uKHUpe3JldHVybiB1Pjk/dToiMCIrdX07Yy5leHBvcnRzPW4oZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4iMDM4NS0wNy0yNVQwNzowNjozOS45OTlaIiE9cy5jYWxsKG5ldyBEYXRlKC01MDAwMDAwMDAwMDAwMSkpfSl8fCFuKGZ1bmN0aW9uKCl7cy5jYWxsKG5ldyBEYXRlKE5hTikpfSk/ZnVuY3Rpb24oKXtpZighaXNGaW5pdGUoZS5jYWxsKHRoaXMpKSl0aHJvdyBSYW5nZUVy''@;'; put 'put ''cm9yKCJJbnZhbGlkIHRpbWUgdmFsdWUiKTt2YXIgbD10aGlzLGk9bC5nZXRVVENGdWxsWWVhcigpLHY9bC5nZXRVVENNaWxsaXNlY29uZHMoKSxwPWk8MD8iLSI6aT45OTk5PyIrIjoiIjtyZXR1cm4gcCsoIjAwMDAwIitNYXRoLmFicyhpKSkuc2xpY2UocD8tNjotNCkrIi0iK28obC5nZXRV''@;'; put 'put ''VENNb250aCgpKzEpKyItIitvKGwuZ2V0VVRDRGF0ZSgpKSsiVCIrbyhsLmdldFVUQ0hvdXJzKCkpKyI6IitvKGwuZ2V0VVRDTWludXRlcygpKSsiOiIrbyhsLmdldFVUQ1NlY29uZHMoKSkrIi4iKyh2Pjk5P3Y6IjAiK28odikpKyJaIn06c30sNTU1Mzg6KGMsZix0KT0+e3ZhciBuPXQoOTIx''@;'; put 'put ''MjcpO24obi5TLCJOdW1iZXIiLHtpc0ludGVnZXI6dCgzMzg0Mil9KX0sNTU3NjI6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDY3NTI2KSxlPXQoNDc5NjcpLHM9dCgxNzYzKSxvPXQoNjc1NzQpKCJzcGVjaWVzIik7Yy5leHBvcnRzPWZ1bmN0aW9uKHUpe3ZhciBsPW5bdV07cyYm''@;'; put 'put ''bCYmIWxbb10mJmUuZihsLG8se2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX19LDU1NzcxOihjLGYsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPU1hdGguYXNpbmg7bihuLlMrbi5GKiEoZSYmMS9lKDApPjApLCJNYXRoIix7YXNpbmg6ZnVuY3Rpb24gcyhvKXty''@;'; put 'put ''ZXR1cm4gaXNGaW5pdGUobz0rbykmJjAhPW8/bzwwPy1zKC1vKTpNYXRoLmxvZyhvK01hdGguc3FydChvKm8rMSkpOm99fSl9LDU2MDk0OmM9Pnt2YXIgZj1jLmV4cG9ydHM9e3ZlcnNpb246IjIuNi4xMiJ9OyJudW1iZXIiPT10eXBlb2YgX19lJiYoX19lPWYpfSw1NjQ0MjooYyxmLHQpPT57''@;'; put 'put ''dCgxMjIyMCksdCgyMzQ4MyksdCgyMDk1NyksdCg4Mjk3NSksdCgzMjQwNSksdCgxNzIyNCksdCgyODg3MiksdCg0NDg5NCksdCgxMDE3NyksdCg2NDk3OSksdCg4OTAxMSksdCg1NDU5MSksdCg0NzMzNCksdCg3MDgzKSx0KDY5MjEzKSx0KDM4NDM3KSx0KDYyMjIwKSx0KDc2NTQ5KSx0KDQy''@;'; put 'put ''ODE4KSx0KDI4NTQzKSx0KDM1NTkpLHQoODQxNTMpLHQoNDA0MCksdCg2ODMwNSksdCg3NDcwMSksdCgyMDM0MSksdCg1NjA5NCl9LDU2NTc2OihjLGYsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUywiTnVtYmVyIix7TUlOX1NBRkVfSU5URUdFUjotOTAwNzE5OTI1NDc0MDk5MX0pfSw1NzIy''@;'; put 'put ''MTooYyxmLHQpPT57dmFyIG49dCg2MTI0OSksZT10KDMzNDQpO2MuZXhwb3J0cz1mdW5jdGlvbihzKXtyZXR1cm4gbihlKHMpKX19LDU3NTA5OihjLGYsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUywiTWF0aCIse2xvZzEwOmZ1bmN0aW9uKHMpe3JldHVybiBNYXRoLmxvZyhzKSpNYXRoLkxP''@;'; put 'put ''RzEwRX19KX0sNTc3NjI6KGMsZix0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5QLCJBcnJheSIse2ZpbGw6dCgzNTU2NCl9KSx0KDg4MTg0KSgiZmlsbCIpfSw1NzkxNzpjPT57dmFyIGY9e30uaGFzT3duUHJvcGVydHk7Yy5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGYuY2FsbCh0LG4p''@;'; put 'put ''fX0sNTg4ODg6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoNjYxNzkpKDQpO24obi5QK24uRiohdCg4Njg4NCkoW10uZXZlcnksITApLCJBcnJheSIse2V2ZXJ5OmZ1bmN0aW9uKG8pe3JldHVybiBlKHRoaXMsbyxhcmd1bWVudHNbMV0pfX0pfSw1ODkzMzooYyxm''@;'; put 'put ''LHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNjc1MjYpLGU9dCg5MjEyNykscz10KDI4ODU5KSxvPXQoOTYwNjUpLHU9dCgxMjk4OCksbD10KDQ4NzkwKSxpPXQoMTY0NDApLHY9dCg0MzMwNSkscD10KDc5NDQ4KSxkPXQoOTg5MzEpLHk9dCgzODQ0KSxFPXQoOTg4ODApO2MuZXhwb3J0cz1m''@;'; put 'put ''dW5jdGlvbihnLEQsRix4LEEsayl7dmFyIFA9bltnXSxNPVAsVD1BPyJzZXQiOiJhZGQiLGI9TSYmTS5wcm90b3R5cGUsTD17fSxVPWZ1bmN0aW9uKHEpe3ZhciBYPWJbcV07cyhiLHEsImRlbGV0ZSI9PXE/ZnVuY3Rpb24oZXQpe3JldHVybiEoayYmIXYoZXQpKSYmWC5jYWxsKHRoaXMsMD09''@;'; put 'put ''PWV0PzA6ZXQpfToiaGFzIj09cT9mdW5jdGlvbihWKXtyZXR1cm4hKGsmJiF2KFYpKSYmWC5jYWxsKHRoaXMsMD09PVY/MDpWKX06ImdldCI9PXE/ZnVuY3Rpb24oVil7cmV0dXJuIGsmJiF2KFYpP3ZvaWQgMDpYLmNhbGwodGhpcywwPT09Vj8wOlYpfToiYWRkIj09cT9mdW5jdGlvbihWKXty''@;'; put 'put ''ZXR1cm4gWC5jYWxsKHRoaXMsMD09PVY/MDpWKSx0aGlzfTpmdW5jdGlvbihWLGx0KXtyZXR1cm4gWC5jYWxsKHRoaXMsMD09PVY/MDpWLGx0KSx0aGlzfSl9O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBNJiYoa3x8Yi5mb3JFYWNoJiYhcChmdW5jdGlvbigpeyhuZXcgTSkuZW50cmllcygpLm5l''@;'; put 'put ''eHQoKX0pKSl7dmFyIFo9bmV3IE0sbnQ9WltUXShrP3t9Oi0wLDEpIT1aLHR0PXAoZnVuY3Rpb24oKXtaLmhhcygxKX0pLHl0PWQoZnVuY3Rpb24ocSl7bmV3IE0ocSl9KSxtdD0hayYmcChmdW5jdGlvbigpe2Zvcih2YXIgcT1uZXcgTSxYPTU7WC0tOylxW1RdKFgsWCk7cmV0dXJuIXEuaGFz''@;'; put 'put ''KC0wKX0pO3l0fHwoKE09RChmdW5jdGlvbihxLFgpe2kocSxNLGcpO3ZhciBldD1FKG5ldyBQLHEsTSk7cmV0dXJuIG51bGwhPVgmJmwoWCxBLGV0W1RdLGV0KSxldH0pKS5wcm90b3R5cGU9YixiLmNvbnN0cnVjdG9yPU0pLCh0dHx8bXQpJiYoVSgiZGVsZXRlIiksVSgiaGFzIiksQSYmVSgi''@;'; put 'put ''Z2V0IikpLChtdHx8bnQpJiZVKFQpLGsmJmIuY2xlYXImJmRlbGV0ZSBiLmNsZWFyfWVsc2UgTT14LmdldENvbnN0cnVjdG9yKEQsZyxBLFQpLG8oTS5wcm90b3R5cGUsRiksdS5ORUVEPSEwO3JldHVybiB5KE0sZyksTFtnXT1NLGUoZS5HK2UuVytlLkYqKE0hPVApLEwpLGt8fHguc2V0U3Ry''@;'; put 'put ''b25nKE0sZyxBKSxNfX0sNTk0MTU6KGMsZix0KT0+e3ZhciBuPXQoMzQ1NjEpLGU9dCg4NjE0MCkuY29uY2F0KCJsZW5ndGgiLCJwcm90b3R5cGUiKTtmLmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKG8pe3JldHVybiBuKG8sZSl9fSw2MDIxMDooYyxmLHQpPT57dmFy''@;'; put 'put ''IG49dCg5MjEyNyk7bihuLlMsIk51bWJlciIse01BWF9TQUZFX0lOVEVHRVI6OTAwNzE5OTI1NDc0MDk5MX0pfSw2MDkwNjpjPT57Yy5leHBvcnRzPXt9fSw2MTI0OTooYyxmLHQpPT57dmFyIG49dCg1NTA4OSk7Yy5leHBvcnRzPU9iamVjdCgieiIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDAp''@;'; put 'put ''P09iamVjdDpmdW5jdGlvbihlKXtyZXR1cm4iU3RyaW5nIj09bihlKT9lLnNwbGl0KCIiKTpPYmplY3QoZSl9fSw2MTMwODooYyxmLHQpPT57dmFyIG49dCg2NzUyNikuZG9jdW1lbnQ7Yy5leHBvcnRzPW4mJm4uZG9jdW1lbnRFbGVtZW50fSw2MTQ2NDooYyxmLHQpPT57dmFyIG49dCg1NzIy''@;'; put 'put ''MSksZT10KDgxNDg1KSxzPXQoNzAxNTcpO2MuZXhwb3J0cz1mdW5jdGlvbihvKXtyZXR1cm4gZnVuY3Rpb24odSxsLGkpe3ZhciB5LHY9bih1KSxwPWUodi5sZW5ndGgpLGQ9cyhpLHApO2lmKG8mJmwhPWwpe2Zvcig7cD5kOylpZigoeT12W2QrK10pIT15KXJldHVybiEwfWVsc2UgZm9yKDtw''@;'; put 'put ''PmQ7ZCsrKWlmKChvfHxkIGluIHYpJiZ2W2RdPT09bClyZXR1cm4gb3x8ZHx8MDtyZXR1cm4hbyYmLTF9fX0sNjE2OTE6KGMsZix0KT0+e3ZhciBuPXQoOTczODApLGU9dCg0MjI4KSxzPXQoNjMzODcpLG89bi5rZXksdT1uLnNldDtuLmV4cCh7bWV0YWRhdGE6ZnVuY3Rpb24oaSx2KXtyZXR1''@;'; put 'put ''cm4gZnVuY3Rpb24oZCx5KXt1KGksdiwodm9pZCAwIT09eT9lOnMpKGQpLG8oeSkpfX19KX0sNjIyMjA6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt0KDUyNDY4KSgiaXRhbGljcyIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcywiaSIsIiIsIiIpfX0pfSw2MzM4''@;'; put 'put ''NzpjPT57Yy5leHBvcnRzPWZ1bmN0aW9uKGYpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBmKXRocm93IFR5cGVFcnJvcihmKyIgaXMgbm90IGEgZnVuY3Rpb24hIik7cmV0dXJuIGZ9fSw2MzYwNjooYyxmLHQpPT57dmFyIG49dCg0MzMwNSksZT10KDc3OTgxKSxzPXQoNjc1NzQpKCJzcGVjaWVz''@;'; put 'put ''Iik7Yy5leHBvcnRzPWZ1bmN0aW9uKG8pe3ZhciB1O3JldHVybiBlKG8pJiYoImZ1bmN0aW9uIj09dHlwZW9mKHU9by5jb25zdHJ1Y3RvcikmJih1PT09QXJyYXl8fGUodS5wcm90b3R5cGUpKSYmKHU9dm9pZCAwKSxuKHUpJiZudWxsPT09KHU9dVtzXSkmJih1PXZvaWQgMCkpLHZvaWQgMD09''@;'; put 'put ''PXU/QXJyYXk6dX19LDY0NTA5OihjLGYsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg2NzUyNiksZT10KDU3OTE3KSxzPXQoNTUwODkpLG89dCg5ODg4MCksdT10KDgzMDQ4KSxsPXQoNzk0NDgpLGk9dCg1OTQxNSkuZix2PXQoNjg2NDEpLmYscD10KDQ3OTY3KS5mLGQ9dCg0MDYyOSkudHJp''@;'; put 'put ''bSx5PSJOdW1iZXIiLEU9blt5XSxnPUUsRD1FLnByb3RvdHlwZSxGPXModCg4NDcxOSkoRCkpPT15LHg9InRyaW0iaW4gU3RyaW5nLnByb3RvdHlwZSxBPWZ1bmN0aW9uKFQpe3ZhciBiPXUoVCwhMSk7aWYoInN0cmluZyI9PXR5cGVvZiBiJiZiLmxlbmd0aD4yKXt2YXIgVSxaLG50LEw9KGI9''@;'; put 'put ''eD9iLnRyaW0oKTpkKGIsMykpLmNoYXJDb2RlQXQoMCk7aWYoNDM9PT1MfHw0NT09PUwpe2lmKDg4PT09KFU9Yi5jaGFyQ29kZUF0KDIpKXx8MTIwPT09VSlyZXR1cm4gTmFOfWVsc2UgaWYoNDg9PT1MKXtzd2l0Y2goYi5jaGFyQ29kZUF0KDEpKXtjYXNlIDY2OmNhc2UgOTg6Wj0yLG50PTQ5''@;'; put 'put ''O2JyZWFrO2Nhc2UgNzk6Y2FzZSAxMTE6Wj04LG50PTU1O2JyZWFrO2RlZmF1bHQ6cmV0dXJuK2J9Zm9yKHZhciBxLHR0PWIuc2xpY2UoMikseXQ9MCxtdD10dC5sZW5ndGg7eXQ8bXQ7eXQrKylpZigocT10dC5jaGFyQ29kZUF0KHl0KSk8NDh8fHE+bnQpcmV0dXJuIE5hTjtyZXR1cm4gcGFy''@;'; put 'put ''c2VJbnQodHQsWil9fXJldHVybitifTtpZighRSgiIDBvMSIpfHwhRSgiMGIxIil8fEUoIisweDEiKSl7RT1mdW5jdGlvbihiKXt2YXIgTD1hcmd1bWVudHMubGVuZ3RoPDE/MDpiLFU9dGhpcztyZXR1cm4gVSBpbnN0YW5jZW9mIEUmJihGP2woZnVuY3Rpb24oKXtELnZhbHVlT2YuY2FsbChV''@;'; put 'put ''KX0pOnMoVSkhPXkpP28obmV3IGcoQShMKSksVSxFKTpBKEwpfTtmb3IodmFyIE0saz10KDE3NjMpP2koZyk6Ik1BWF9WQUxVRSxNSU5fVkFMVUUsTmFOLE5FR0FUSVZFX0lORklOSVRZLFBPU0lUSVZFX0lORklOSVRZLEVQU0lMT04saXNGaW5pdGUsaXNJbnRlZ2VyLGlzTmFOLGlzU2FmZUlu''@;'; put 'put ''dGVnZXIsTUFYX1NBRkVfSU5URUdFUixNSU5fU0FGRV9JTlRFR0VSLHBhcnNlRmxvYXQscGFyc2VJbnQsaXNJbnRlZ2VyIi5zcGxpdCgiLCIpLFA9MDtrLmxlbmd0aD5QO1ArKyllKGcsTT1rW1BdKSYmIWUoRSxNKSYmcChFLE0sdihnLE0pKTtFLnByb3RvdHlwZT1ELEQuY29uc3RydWN0b3I9''@;'; put 'put ''RSx0KDI4ODU5KShuLHksRSl9fSw2NDk3OTooYyxmLHQpPT57InVzZSBzdHJpY3QiO3QoNTI0NjgpKCJhbmNob3IiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4gbih0aGlzLCJhIiwibmFtZSIscyl9fSl9LDY1MDMyOihjLGYsdCk9Pnt2YXIgbj10KDQzMzA1KTt0KDgw''@;'; put 'put ''OTIzKSgiaXNTZWFsZWQiLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihvKXtyZXR1cm4hbihvKXx8ISFlJiZlKG8pfX0pfSw2NTA0OTooYyxmLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlAsIkZ1bmN0aW9uIix7YmluZDp0KDE1NTM4KX0pfSw2NTg0NjooYyxmLHQpPT57dCg3MTAzKSx0''@;'; put 'put ''KDgyNTg2KSx0KDkyNTUyKSx0KDQzNzYpLHQoNzUxNTMpLHQoMTE4NzkpLHQoNTI2NTApLHQoMzExMDQpLHQoMjE4ODMpLHQoMzU0MzMpLHQoNTVlMyksdCgxNTkzMiksdCg1NDQzKSx0KDI2MzE2KSx0KDU2MDk0KX0sNjYwNjQ6KGMsZix0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5TK24uRioh''@;'; put 'put ''dCgxNzYzKSwiT2JqZWN0Iix7ZGVmaW5lUHJvcGVydHk6dCg0Nzk2NykuZn0pfSw2NjE3OTooYyxmLHQpPT57dmFyIG49dCgzNTA1MiksZT10KDYxMjQ5KSxzPXQoMTgyNzApLG89dCg4MTQ4NSksdT10KDkzMTkxKTtjLmV4cG9ydHM9ZnVuY3Rpb24obCxpKXt2YXIgdj0xPT1sLHA9Mj09bCxk''@;'; put 'put ''PTM9PWwseT00PT1sLEU9Nj09bCxnPTU9PWx8fEUsRD1pfHx1O3JldHVybiBmdW5jdGlvbihGLHgsQSl7Zm9yKHZhciBVLFosaz1zKEYpLFA9ZShrKSxNPW4oeCxBLDMpLFQ9byhQLmxlbmd0aCksYj0wLEw9dj9EKEYsVCk6cD9EKEYsMCk6dm9pZCAwO1Q+YjtiKyspaWYoKGd8fGIgaW4gUCkm''@;'; put 'put ''JihaPU0oVT1QW2JdLGIsayksbCkpaWYodilMW2JdPVo7ZWxzZSBpZihaKXN3aXRjaChsKXtjYXNlIDM6cmV0dXJuITA7Y2FzZSA1OnJldHVybiBVO2Nhc2UgNjpyZXR1cm4gYjtjYXNlIDI6TC5wdXNoKFUpfWVsc2UgaWYoeSlyZXR1cm4hMTtyZXR1cm4gRT8tMTpkfHx5P3k6TH19fSw2NjM3''@;'; put 'put ''NDooYyxmLHQpPT57dCg4Mjk3NSksdCg0Nzg5OSksdCg5Mzg2MyksdCg4MjE4OSksdCg5NjUxMSksdCg5NTg1MyksdCg5NzA3NSksdCgzNTA0KSx0KDU0OTEzKSx0KDM5ODEzKSx0KDg2NTExKSx0KDU4ODg4KSx0KDgxNDQ5KSx0KDQ3ODc0KSx0KDM0NjA5KSx0KDMzNzA2KSx0KDE5NjIwKSx0''@;'; put 'put ''KDU3NzYyKSx0KDE1MTQ0KSx0KDc1MzY5KSx0KDc2MjA5KSx0KDk1MTY1KSx0KDU2MDk0KX0sNjcyMjc6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQ3OTY3KSxlPXQoMTE5OTYpO2MuZXhwb3J0cz1mdW5jdGlvbihzLG8sdSl7byBpbiBzP24uZihzLG8sZSgwLHUpKTpzW29dPXV9''@;'; put 'put ''fSw2NzUyNjpjPT57dmFyIGY9Yy5leHBvcnRzPXR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuTWF0aD09TWF0aD93aW5kb3c6dHlwZW9mIHNlbGY8InUiJiZzZWxmLk1hdGg9PU1hdGg/c2VsZjpGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpOyJudW1iZXIiPT10eXBlb2YgX19nJiYoX19nPWYp''@;'; put 'put ''fSw2NzU3NDooYyxmLHQpPT57dmFyIG49dCg0NDU1NikoIndrcyIpLGU9dCg0NDE1KSxzPXQoNjc1MjYpLlN5bWJvbCxvPSJmdW5jdGlvbiI9PXR5cGVvZiBzOyhjLmV4cG9ydHM9ZnVuY3Rpb24obCl7cmV0dXJuIG5bbF18fChuW2xdPW8mJnNbbF18fChvP3M6ZSkoIlN5bWJvbC4iK2wpKX0p''@;'; put 'put ''LnN0b3JlPW59LDY3OTAxOihjLGYsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPXQoNzU1NTEpLHM9TWF0aC5leHA7bihuLlMsIk1hdGgiLHt0YW5oOmZ1bmN0aW9uKHUpe3ZhciBsPWUodT0rdSksaT1lKC11KTtyZXR1cm4gbD09MS8wPzE6aT09MS8wPy0xOihsLWkpLyhzKHUpK3MoLXUpKX19KX0s''@;'; put 'put ''NjgzMDU6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQyMjgpLGU9dCgxODI3MCkscz10KDgxNDg1KSxvPXQoMjcwODcpLHU9dCgyODgyOCksbD10KDUyNTM1KSxpPU1hdGgubWF4LHY9TWF0aC5taW4scD1NYXRoLmZsb29yLGQ9L1wkKFskJmAnXXxcZFxkP3w8W14+XSo+KS9nLHk9''@;'; put 'put ''L1wkKFskJmAnXXxcZFxkPykvZyxFPWZ1bmN0aW9uKGcpe3JldHVybiB2b2lkIDA9PT1nP2c6U3RyaW5nKGcpfTt0KDY5MjI4KSgicmVwbGFjZSIsMixmdW5jdGlvbihnLEQsRix4KXtyZXR1cm5bZnVuY3Rpb24oUCxNKXt2YXIgVD1nKHRoaXMpLGI9UD8uW0RdO3JldHVybiB2b2lkIDAhPT1i''@;'; put 'put ''P2IuY2FsbChQLFQsTSk6Ri5jYWxsKFN0cmluZyhUKSxQLE0pfSxmdW5jdGlvbihrLFApe3ZhciBNPXgoRixrLHRoaXMsUCk7aWYoTS5kb25lKXJldHVybiBNLnZhbHVlO3ZhciBUPW4oayksYj1TdHJpbmcodGhpcyksTD0iZnVuY3Rpb24iPT10eXBlb2YgUDtMfHwoUD1TdHJpbmcoUCkpO3Zh''@;'; put 'put ''ciBVPVQuZ2xvYmFsO2lmKFUpe3ZhciBaPVQudW5pY29kZTtULmxhc3RJbmRleD0wfWZvcih2YXIgbnQ9W107Oyl7dmFyIHR0PWwoVCxiKTtpZihudWxsPT09dHR8fChudC5wdXNoKHR0KSwhVSkpYnJlYWs7IiI9PT1TdHJpbmcodHRbMF0pJiYoVC5sYXN0SW5kZXg9dShiLHMoVC5sYXN0SW5k''@;'; put 'put ''ZXgpLFopKX1mb3IodmFyIG10PSIiLHE9MCxYPTA7WDxudC5sZW5ndGg7WCsrKXt0dD1udFtYXTtmb3IodmFyIGV0PVN0cmluZyh0dFswXSksVj1pKHYobyh0dC5pbmRleCksYi5sZW5ndGgpLDApLGx0PVtdLGR0PTE7ZHQ8dHQubGVuZ3RoO2R0KyspbHQucHVzaChFKHR0W2R0XSkpO3ZhciBD''@;'; put 'put ''dD10dC5ncm91cHM7aWYoTCl7dmFyIE90PVtldF0uY29uY2F0KGx0LFYsYik7dm9pZCAwIT09Q3QmJk90LnB1c2goQ3QpO3ZhciBOdD1TdHJpbmcoUC5hcHBseSh2b2lkIDAsT3QpKX1lbHNlIE50PUEoZXQsYixWLGx0LEN0LFApO1Y+PXEmJihtdCs9Yi5zbGljZShxLFYpK050LHE9VitldC5s''@;'; put 'put ''ZW5ndGgpfXJldHVybiBtdCtiLnNsaWNlKHEpfV07ZnVuY3Rpb24gQShrLFAsTSxULGIsTCl7dmFyIFU9TStrLmxlbmd0aCxaPVQubGVuZ3RoLG50PXk7cmV0dXJuIHZvaWQgMCE9PWImJihiPWUoYiksbnQ9ZCksRi5jYWxsKEwsbnQsZnVuY3Rpb24odHQseXQpe3ZhciBtdDtzd2l0Y2goeXQu''@;'; put 'put ''Y2hhckF0KDApKXtjYXNlIiQiOnJldHVybiIkIjtjYXNlIiYiOnJldHVybiBrO2Nhc2UiYCI6cmV0dXJuIFAuc2xpY2UoMCxNKTtjYXNlIiciOnJldHVybiBQLnNsaWNlKFUpO2Nhc2UiPCI6bXQ9Ylt5dC5zbGljZSgxLC0xKV07YnJlYWs7ZGVmYXVsdDp2YXIgcT0reXQ7aWYoMD09PXEpcmV0''@;'; put 'put ''dXJuIHR0O2lmKHE+Wil7dmFyIFg9cChxLzEwKTtyZXR1cm4gMD09PVg/dHQ6WDw9Wj92b2lkIDA9PT1UW1gtMV0/eXQuY2hhckF0KDEpOlRbWC0xXSt5dC5jaGFyQXQoMSk6dHR9bXQ9VFtxLTFdfXJldHVybiB2b2lkIDA9PT1tdD8iIjptdH0pfX0pfSw2ODY0MTooYyxmLHQpPT57dmFyIG49''@;'; put 'put ''dCg4NDQ5KSxlPXQoMTE5OTYpLHM9dCg1NzIyMSksbz10KDgzMDQ4KSx1PXQoNTc5MTcpLGw9dCgyMjk1NiksaT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO2YuZj10KDE3NjMpP2k6ZnVuY3Rpb24ocCxkKXtpZihwPXMocCksZD1vKGQsITApLGwpdHJ5e3JldHVybiBpKHAsZCl9''@;'; put 'put ''Y2F0Y2h7fWlmKHUocCxkKSlyZXR1cm4gZSghbi5mLmNhbGwocCxkKSxwW2RdKX19LDY5MjEzOihjLGYsdCk9PnsidXNlIHN0cmljdCI7dCg1MjQ2OCkoImZvbnRjb2xvciIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiBuKHRoaXMsImZvbnQiLCJjb2xvciIscyl9fSl9''@;'; put 'put ''LDY5MjI4OihjLGYsdCk9PnsidXNlIHN0cmljdCI7dCg5NDExNik7dmFyIG49dCgyODg1OSksZT10KDMzMzQxKSxzPXQoNzk0NDgpLG89dCgzMzQ0KSx1PXQoNjc1NzQpLGw9dCg2OTYwMCksaT11KCJzcGVjaWVzIiksdj0hcyhmdW5jdGlvbigpe3ZhciBkPS8uLztyZXR1cm4gZC5leGVjPWZ1''@;'; put 'put ''bmN0aW9uKCl7dmFyIHk9W107cmV0dXJuIHkuZ3JvdXBzPXthOiI3In0seX0sIjciIT09IiIucmVwbGFjZShkLCIkPGE+Iil9KSxwPWZ1bmN0aW9uKCl7dmFyIGQ9Lyg/OikvLHk9ZC5leGVjO2QuZXhlYz1mdW5jdGlvbigpe3JldHVybiB5LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07dmFyIEU9''@;'; put 'put ''ImFiIi5zcGxpdChkKTtyZXR1cm4gMj09PUUubGVuZ3RoJiYiYSI9PT1FWzBdJiYiYiI9PT1FWzFdfSgpO2MuZXhwb3J0cz1mdW5jdGlvbihkLHksRSl7dmFyIGc9dShkKSxEPSFzKGZ1bmN0aW9uKCl7dmFyIE09e307cmV0dXJuIE1bZ109ZnVuY3Rpb24oKXtyZXR1cm4gN30sNyE9IiJbZF0o''@;'; put 'put ''TSl9KSxGPUQ/IXMoZnVuY3Rpb24oKXt2YXIgTT0hMSxUPS9hLztyZXR1cm4gVC5leGVjPWZ1bmN0aW9uKCl7cmV0dXJuIE09ITAsbnVsbH0sInNwbGl0Ij09PWQmJihULmNvbnN0cnVjdG9yPXt9LFQuY29uc3RydWN0b3JbaV09ZnVuY3Rpb24oKXtyZXR1cm4gVH0pLFRbZ10oIiIpLCFNfSk6''@;'; put 'put ''dm9pZCAwO2lmKCFEfHwhRnx8InJlcGxhY2UiPT09ZCYmIXZ8fCJzcGxpdCI9PT1kJiYhcCl7dmFyIHg9Ly4vW2ddLEE9RShvLGcsIiJbZF0sZnVuY3Rpb24oVCxiLEwsVSxaKXtyZXR1cm4gYi5leGVjPT09bD9EJiYhWj97ZG9uZTohMCx2YWx1ZTp4LmNhbGwoYixMLFUpfTp7ZG9uZTohMCx2''@;'; put 'put ''YWx1ZTpULmNhbGwoTCxiLFUpfTp7ZG9uZTohMX19KSxQPUFbMV07bihTdHJpbmcucHJvdG90eXBlLGQsQVswXSksZShSZWdFeHAucHJvdG90eXBlLGcsMj09eT9mdW5jdGlvbihNLFQpe3JldHVybiBQLmNhbGwoTSx0aGlzLFQpfTpmdW5jdGlvbihNKXtyZXR1cm4gUC5jYWxsKE0sdGhpcyl9''@;'; put 'put ''KX19fSw2OTMxODooYyxmLHQpPT57dmFyIG49dCg0MzMwNSk7dCg4MDkyMykoImlzRnJvemVuIixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24obyl7cmV0dXJuIW4obyl8fCEhZSYmZShvKX19KX0sNjk2MDA6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgcCxkLG49dCgxMTU4KSxlPVJl''@;'; put 'put ''Z0V4cC5wcm90b3R5cGUuZXhlYyxzPVN0cmluZy5wcm90b3R5cGUucmVwbGFjZSxvPWUsdT0ibGFzdEluZGV4IixsPShkPS9iKi9nLGUuY2FsbChwPS9hLywiYSIpLGUuY2FsbChkLCJhIiksMCE9PXBbdV18fDAhPT1kW3VdKSxpPXZvaWQgMCE9PS8oKT8/Ly5leGVjKCIiKVsxXTsobHx8aSkm''@;'; put 'put ''JihvPWZ1bmN0aW9uKGQpe3ZhciBFLGcsRCxGLHk9dGhpcztyZXR1cm4gaSYmKGc9bmV3IFJlZ0V4cCgiXiIreS5zb3VyY2UrIiQoPyFcXHMpIixuLmNhbGwoeSkpKSxsJiYoRT15W3VdKSxEPWUuY2FsbCh5LGQpLGwmJkQmJih5W3VdPXkuZ2xvYmFsP0QuaW5kZXgrRFswXS5sZW5ndGg6RSks''@;'; put 'put ''aSYmRCYmRC5sZW5ndGg+MSYmcy5jYWxsKERbMF0sZyxmdW5jdGlvbigpe2ZvcihGPTE7Rjxhcmd1bWVudHMubGVuZ3RoLTI7RisrKXZvaWQgMD09PWFyZ3VtZW50c1tGXSYmKERbRl09dm9pZCAwKX0pLER9KSxjLmV4cG9ydHM9b30sNzAxNTc6KGMsZix0KT0+e3ZhciBuPXQoMjcwODcpLGU9''@;'; put 'put ''TWF0aC5tYXgscz1NYXRoLm1pbjtjLmV4cG9ydHM9ZnVuY3Rpb24obyx1KXtyZXR1cm4obz1uKG8pKTwwP2Uobyt1LDApOnMobyx1KX19LDcwNDg5OihjLGYsdCk9Pnt2YXIgbj10KDQ3OTY3KS5mLGU9RnVuY3Rpb24ucHJvdG90eXBlLHM9L15ccypmdW5jdGlvbiAoW14gKF0qKS8sbz0ibmFt''@;'; put 'put ''ZSI7byBpbiBlfHx0KDE3NjMpJiZuKGUsbyx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3RyeXtyZXR1cm4oIiIrdGhpcykubWF0Y2gocylbMV19Y2F0Y2h7cmV0dXJuIiJ9fX0pfSw3MTQ3MzpjPT57Yy5leHBvcnRzPU1hdGgubG9nMXB8fGZ1bmN0aW9uKHQpe3JldHVybih0PSt0''@;'; put 'put ''KT4tMWUtOCYmdDwxZS04P3QtdCp0LzI6TWF0aC5sb2coMSt0KX19LDcxNjMyOihjLGYsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCgzNjE5NyksZT10KDEyODg4KTtjLmV4cG9ydHM9dCg1ODkzMykoIlNldCIsZnVuY3Rpb24obyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcyxh''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSx7YWRkOmZ1bmN0aW9uKHUpe3JldHVybiBuLmRlZihlKHRoaXMsIlNldCIpLHU9MD09PXU/MDp1LHUpfX0sbil9LDcyMTIyOihjLGYsdCk9Pnt2YXIgbj10KDM3MzMpLGU9TWF0aC5wb3cscz1lKDIsLTUyKSxvPWUoMiwt''@;'; put 'put ''MjMpLHU9ZSgyLDEyNykqKDItbyksbD1lKDIsLTEyNik7Yy5leHBvcnRzPU1hdGguZnJvdW5kfHxmdW5jdGlvbihwKXt2YXIgRSxnLGQ9TWF0aC5hYnMocCkseT1uKHApO3JldHVybiBkPGw/eSooZC9sL28rMS9zLTEvcykqbCpvOihnPShFPSgxK28vcykqZCktKEUtZCkpPnV8fGchPWc/eSoo''@;'; put 'put ''MS8wKTp5Kmd9fSw3MjMzNTooYyxmLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDM3MzMpO24obi5TLCJNYXRoIix7Y2JydDpmdW5jdGlvbihvKXtyZXR1cm4gZShvPStvKSpNYXRoLnBvdyhNYXRoLmFicyhvKSwxLzMpfX0pfSw3MzgyMjooYyxmLHQpPT57dmFyIG49dCg0MzMwNSksZT10KDEy''@;'; put 'put ''OTg4KS5vbkZyZWV6ZTt0KDgwOTIzKSgic2VhbCIsZnVuY3Rpb24ocyl7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBzJiZuKHUpP3MoZSh1KSk6dX19KX0sNzQ3MDE6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQyMjgpLGU9dCg3MzU5KSxzPXQoNTI1MzUpO3QoNjkyMjgpKCJz''@;'; put 'put ''ZWFyY2giLDEsZnVuY3Rpb24obyx1LGwsaSl7cmV0dXJuW2Z1bmN0aW9uKHApe3ZhciBkPW8odGhpcykseT1wPy5bdV07cmV0dXJuIHZvaWQgMCE9PXk/eS5jYWxsKHAsZCk6bmV3IFJlZ0V4cChwKVt1XShTdHJpbmcoZCkpfSxmdW5jdGlvbih2KXt2YXIgcD1pKGwsdix0aGlzKTtpZihwLmRv''@;'; put 'put ''bmUpcmV0dXJuIHAudmFsdWU7dmFyIGQ9bih2KSx5PVN0cmluZyh0aGlzKSxFPWQubGFzdEluZGV4O2UoRSwwKXx8KGQubGFzdEluZGV4PTApO3ZhciBnPXMoZCx5KTtyZXR1cm4gZShkLmxhc3RJbmRleCxFKXx8KGQubGFzdEluZGV4PUUpLG51bGw9PT1nPy0xOmcuaW5kZXh9XX0pfSw3NDg5''@;'; put 'put ''NjooYyxmLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlMsIk1hdGgiLHtjbHozMjpmdW5jdGlvbihzKXtyZXR1cm4ocz4+Pj0wKT8zMS1NYXRoLmZsb29yKE1hdGgubG9nKHMrLjUpKk1hdGguTE9HMkUpOjMyfX0pfSw3NDkwNzooYyxmLHQpPT57dmFyIG49dCg5NzM4MCksZT10KDQyMjgpLHM9''@;'; put 'put ''bi5rZXksbz1uLm1hcCx1PW4uc3RvcmU7bi5leHAoe2RlbGV0ZU1ldGFkYXRhOmZ1bmN0aW9uKGksdil7dmFyIHA9YXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDpzKGFyZ3VtZW50c1syXSksZD1vKGUodikscCwhMSk7aWYodm9pZCAwPT09ZHx8IWQuZGVsZXRlKGkpKXJldHVybiExO2lmKGQu''@;'; put 'put ''c2l6ZSlyZXR1cm4hMDt2YXIgeT11LmdldCh2KTtyZXR1cm4geS5kZWxldGUocCksISF5LnNpemV8fHUuZGVsZXRlKHYpfX0pfSw3NDk3MDpjPT57Yy5leHBvcnRzPWZ1bmN0aW9uKGYsdCl7cmV0dXJue3ZhbHVlOnQsZG9uZTohIWZ9fX0sNzUxNTM6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgbj10KDkyMTI3KSxlPXQoNDIyOCkscz1mdW5jdGlvbihvKXt0aGlzLl90PWUobyksdGhpcy5faT0wO3ZhciBsLHU9dGhpcy5faz1bXTtmb3IobCBpbiBvKXUucHVzaChsKX07dCg2MDMyKShzLCJPYmplY3QiLGZ1bmN0aW9uKCl7dmFyIGwsbz10aGlzLHU9by5faztkb3tpZihvLl9pPj11''@;'; put 'put ''Lmxlbmd0aClyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXdoaWxlKCEoKGw9dVtvLl9pKytdKWluIG8uX3QpKTtyZXR1cm57dmFsdWU6bCxkb25lOiExfX0pLG4obi5TLCJSZWZsZWN0Iix7ZW51bWVyYXRlOmZ1bmN0aW9uKHUpe3JldHVybiBuZXcgcyh1KX19KX0sNzUzNjk6KGMsZix0''@;'; put 'put ''KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoNjYxNzkpKDYpLHM9ImZpbmRJbmRleCIsbz0hMDtzIGluW10mJkFycmF5KDEpW3NdKGZ1bmN0aW9uKCl7bz0hMX0pLG4obi5QK24uRipvLCJBcnJheSIse2ZpbmRJbmRleDpmdW5jdGlvbihsKXtyZXR1cm4gZSh0aGlzLGwsYXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pLHQoODgxODQpKHMpfSw3NTU1MTpjPT57dmFyIGY9TWF0aC5leHBtMTtjLmV4cG9ydHM9IWZ8fGYoMTApPjIyMDI1LjQ2NTc5NDgwNjcxOHx8ZigxMCk8MjIwMjUuNDY1Nzk0ODA2NzE4fHwtMmUtMTchPWYoLTJlLTE3KT9m''@;'; put 'put ''dW5jdGlvbihuKXtyZXR1cm4gMD09KG49K24pP246bj4tMWUtNiYmbjwxZS02P24rbipuLzI6TWF0aC5leHAobiktMX06Zn0sNzYyMDk6KGMsZix0KT0+e3QoNTU3NjIpKCJBcnJheSIpfSw3NjU0OTooYyxmLHQpPT57InVzZSBzdHJpY3QiO3QoNTI0NjgpKCJsaW5rIixmdW5jdGlvbihuKXty''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIG4odGhpcywiYSIsImhyZWYiLHMpfX0pfSw3NjY0ODooYyxmLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDcxNDczKSxzPU1hdGguc3FydCxvPU1hdGguYWNvc2g7bihuLlMrbi5GKiEobyYmNzEwPT1NYXRoLmZsb29yKG8oTnVtYmVyLk1BWF9WQUxV''@;'; put 'put ''RSkpJiZvKDEvMCk9PTEvMCksIk1hdGgiLHthY29zaDpmdW5jdGlvbihsKXtyZXR1cm4obD0rbCk8MT9OYU46bD45NDkwNjI2NS42MjQyNTE1Nj9NYXRoLmxvZyhsKStNYXRoLkxOMjplKGwtMStzKGwtMSkqcyhsKzEpKX19KX0sNzc0OTE6KGMsZix0KT0+e3ZhciBuPXQoOTczODApLGU9dCg0''@;'; put 'put ''MjI4KSxzPW4ua2V5LG89bi5zZXQ7bi5leHAoe2RlZmluZU1ldGFkYXRhOmZ1bmN0aW9uKGwsaSx2LHApe28obCxpLGUodikscyhwKSl9fSl9LDc3OTgxOihjLGYsdCk9Pnt2YXIgbj10KDU1MDg5KTtjLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24ocyl7cmV0dXJuIkFycmF5Ij09''@;'; put 'put ''bihzKX19LDc4NDUxOmM9PntjLmV4cG9ydHM9Ilx0XG5cdlxmXHIgXHhhMFx1MTY4MFx1MTgwZVx1MjAwMFx1MjAwMVx1MjAwMlx1MjAwM1x1MjAwNFx1MjAwNVx1MjAwNlx1MjAwN1x1MjAwOFx1MjAwOVx1MjAwYVx1MjAyZlx1MjA1Zlx1MzAwMFx1MjAyOFx1MjAyOVx1ZmVmZiJ9LDc4NjA0''@;'; put 'put ''OihjLGYsdCk9PnsidXNlIHN0cmljdCI7dCgzOTYzOCk7dmFyIG49dCg0MjI4KSxlPXQoMTE1OCkscz10KDE3NjMpLG89InRvU3RyaW5nIix1PS8uL1tvXSxsPWZ1bmN0aW9uKGkpe3QoMjg4NTkpKFJlZ0V4cC5wcm90b3R5cGUsbyxpLCEwKX07dCg3OTQ0OCkoZnVuY3Rpb24oKXtyZXR1cm4i''@;'; put 'put ''L2EvYiIhPXUuY2FsbCh7c291cmNlOiJhIixmbGFnczoiYiJ9KX0pP2woZnVuY3Rpb24oKXt2YXIgdj1uKHRoaXMpO3JldHVybiIvIi5jb25jYXQodi5zb3VyY2UsIi8iLCJmbGFncyJpbiB2P3YuZmxhZ3M6IXMmJnYgaW5zdGFuY2VvZiBSZWdFeHA/ZS5jYWxsKHYpOnZvaWQgMCl9KTp1Lm5h''@;'; put 'put ''bWUhPW8mJmwoZnVuY3Rpb24oKXtyZXR1cm4gdS5jYWxsKHRoaXMpfSl9LDc4OTQyOihjLGYsdCk9Pnt2YXIgbj10KDk1NDExKSxlPXQoMzM0NCk7Yy5leHBvcnRzPWZ1bmN0aW9uKHMsbyx1KXtpZihuKG8pKXRocm93IFR5cGVFcnJvcigiU3RyaW5nIyIrdSsiIGRvZXNuJ3QgYWNjZXB0IHJl''@;'; put 'put ''Z2V4ISIpO3JldHVybiBTdHJpbmcoZShzKSl9fSw3OTA3MzooYyxmLHQpPT57dmFyIG49dCg0MzMwNSk7dCg4MDkyMykoImlzRXh0ZW5zaWJsZSIsZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKG8pe3JldHVybiEhbihvKSYmKCFlfHxlKG8pKX19KX0sNzkxMDA6KGMsZix0KT0+e3ZhciBu''@;'; put 'put ''PXQoOTczODApLGU9dCg0MjI4KSxzPXQoNDA2MjcpLG89bi5oYXMsdT1uLmdldCxsPW4ua2V5LGk9ZnVuY3Rpb24odixwLGQpe2lmKG8odixwLGQpKXJldHVybiB1KHYscCxkKTt2YXIgRT1zKHApO3JldHVybiBudWxsIT09RT9pKHYsRSxkKTp2b2lkIDB9O24uZXhwKHtnZXRNZXRhZGF0YTpm''@;'; put 'put ''dW5jdGlvbihwLGQpe3JldHVybiBpKHAsZShkKSxhcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOmwoYXJndW1lbnRzWzJdKSl9fSl9LDc5Mzk3OihjLGYsdCk9PnsidXNlIHN0cmljdCI7dmFyIEYsbj10KDY3NTI2KSxlPXQoNjYxNzkpKDApLHM9dCgyODg1OSksbz10KDEyOTg4KSx1PXQoMjgy''@;'; put 'put ''MDYpLGw9dCg5OTg4MiksaT10KDQzMzA1KSx2PXQoMTI4ODgpLHA9dCgxMjg4OCksZD0hbi5BY3RpdmVYT2JqZWN0JiYiQWN0aXZlWE9iamVjdCJpbiBuLHk9IldlYWtNYXAiLEU9by5nZXRXZWFrLGc9T2JqZWN0LmlzRXh0ZW5zaWJsZSxEPWwudWZzdG9yZSx4PWZ1bmN0aW9uKFApe3JldHVy''@;'; put 'put ''biBmdW5jdGlvbigpe3JldHVybiBQKHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0sQT17Z2V0OmZ1bmN0aW9uKE0pe2lmKGkoTSkpe3ZhciBUPUUoTSk7cmV0dXJuITA9PT1UP0Qodih0aGlzLHkpKS5nZXQoTSk6VD9UW3RoaXMuX2ldOnZvaWQgMH19LHNl''@;'; put 'put ''dDpmdW5jdGlvbihNLFQpe3JldHVybiBsLmRlZih2KHRoaXMseSksTSxUKX19LGs9Yy5leHBvcnRzPXQoNTg5MzMpKHkseCxBLGwsITAsITApO3AmJmQmJih1KChGPWwuZ2V0Q29uc3RydWN0b3IoeCx5KSkucHJvdG90eXBlLEEpLG8uTkVFRD0hMCxlKFsiZGVsZXRlIiwiaGFzIiwiZ2V0Iiwi''@;'; put 'put ''c2V0Il0sZnVuY3Rpb24oUCl7dmFyIE09ay5wcm90b3R5cGUsVD1NW1BdO3MoTSxQLGZ1bmN0aW9uKGIsTCl7aWYoaShiKSYmIWcoYikpe3RoaXMuX2Z8fCh0aGlzLl9mPW5ldyBGKTt2YXIgVT10aGlzLl9mW1BdKGIsTCk7cmV0dXJuInNldCI9PVA/dGhpczpVfXJldHVybiBULmNhbGwodGhp''@;'; put 'put ''cyxiLEwpfSl9KSl9LDc5NDQ4OmM9PntjLmV4cG9ydHM9ZnVuY3Rpb24oZil7dHJ5e3JldHVybiEhZigpfWNhdGNoe3JldHVybiEwfX19LDc5NTg0OihjLGYsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUywiTWF0aCIse2xvZzI6ZnVuY3Rpb24ocyl7cmV0dXJuIE1hdGgubG9nKHMpL01hdGgu''@;'; put 'put ''TE4yfX0pfSw3OTczMjooYyxmLHQpPT57dmFyIG49dCg5NzM4MCksZT10KDQyMjgpLHM9bi5rZXlzLG89bi5rZXk7bi5leHAoe2dldE93bk1ldGFkYXRhS2V5czpmdW5jdGlvbihsKXtyZXR1cm4gcyhlKGwpLGFyZ3VtZW50cy5sZW5ndGg8Mj92b2lkIDA6byhhcmd1bWVudHNbMV0pKX19KX0s''@;'; put 'put ''ODA5MjM6KGMsZix0KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCg1NjA5NCkscz10KDc5NDQ4KTtjLmV4cG9ydHM9ZnVuY3Rpb24obyx1KXt2YXIgbD0oZS5PYmplY3R8fHt9KVtvXXx8T2JqZWN0W29dLGk9e307aVtvXT11KGwpLG4obi5TK24uRipzKGZ1bmN0aW9uKCl7bCgxKX0pLCJPYmplY3Qi''@;'; put 'put ''LGkpfX0sODA5NTY6KGMsZix0KT0+e3ZhciBuPXQoNDg3OTApO2MuZXhwb3J0cz1mdW5jdGlvbihlLHMpe3ZhciBvPVtdO3JldHVybiBuKGUsITEsby5wdXNoLG8scyksb319LDgxNDQ5OihjLGYsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDY1NDMpO24obi5QK24uRioh''@;'; put 'put ''dCg4Njg4NCkoW10ucmVkdWNlLCEwKSwiQXJyYXkiLHtyZWR1Y2U6ZnVuY3Rpb24obyl7cmV0dXJuIGUodGhpcyxvLGFyZ3VtZW50cy5sZW5ndGgsYXJndW1lbnRzWzFdLCExKX19KX0sODE0ODU6KGMsZix0KT0+e3ZhciBuPXQoMjcwODcpLGU9TWF0aC5taW47Yy5leHBvcnRzPWZ1bmN0aW9u''@;'; put 'put ''KHMpe3JldHVybiBzPjA/ZShuKHMpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSw4MTg5NTooYyxmLHQpPT57dCg4MDkyMykoImdldE93blByb3BlcnR5TmFtZXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHQoNDc2NSkuZn0pfSw4MjE4OTooYyxmLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcp''@;'; put 'put ''LGU9dCg2NzIyNyk7bihuLlMrbi5GKnQoNzk0NDgpKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcygpe31yZXR1cm4hKEFycmF5Lm9mLmNhbGwocylpbnN0YW5jZW9mIHMpfSksIkFycmF5Iix7b2Y6ZnVuY3Rpb24oKXtmb3IodmFyIG89MCx1PWFyZ3VtZW50cy5sZW5ndGgsbD1uZXcoImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIHRoaXM/dGhpczpBcnJheSkodSk7dT5vOyllKGwsbyxhcmd1bWVudHNbbysrXSk7cmV0dXJuIGwubGVuZ3RoPXUsbH19KX0sODIzOTI6KGMsZix0KT0+e3ZhciBuPXQoOTIxMjcpLGU9TWF0aC5hdGFuaDtuKG4uUytuLkYqIShlJiYxL2UoLTApPDApLCJNYXRoIix7YXRhbmg6''@;'; put 'put ''ZnVuY3Rpb24obyl7cmV0dXJuIDA9PShvPStvKT9vOk1hdGgubG9nKCgxK28pLygxLW8pKS8yfX0pfSw4MjU3NDpjPT57InVzZSBzdHJpY3QiO2MuZXhwb3J0cz1KU09OLnBhcnNlKCd7ImxvY2FsZSI6ImVuIiwiZGF0ZSI6eyJjYSI6WyJncmVnb3J5IiwiYnVkZGhpc3QiLCJjaGluZXNlIiwi''@;'; put 'put ''Y29wdGljIiwiZGFuZ2kiLCJldGhpb2FhIiwiZXRoaW9waWMiLCJnZW5lcmljIiwiaGVicmV3IiwiaW5kaWFuIiwiaXNsYW1pYyIsImlzbGFtaWNjIiwiamFwYW5lc2UiLCJwZXJzaWFuIiwicm9jIl0sImhvdXJObzAiOnRydWUsImhvdXIxMiI6dHJ1ZSwiZm9ybWF0cyI6eyJzaG9ydCI6Insx''@;'; put 'put ''fSwgezB9IiwibWVkaXVtIjoiezF9LCB7MH0iLCJmdWxsIjoiezF9IFwnYXRcJyB7MH0iLCJsb25nIjoiezF9IFwnYXRcJyB7MH0iLCJhdmFpbGFibGVGb3JtYXRzIjp7ImQiOiJkIiwiRSI6ImNjYyIsIkVkIjoiZCBFIiwiRWhtIjoiRSBoOm1tIGEiLCJFSG0iOiJFIEhIOm1tIiwiRWhtcyI6''@;'; put 'put ''IkUgaDptbTpzcyBhIiwiRUhtcyI6IkUgSEg6bW06c3MiLCJHeSI6InkgRyIsIkd5TU1NIjoiTU1NIHkgRyIsIkd5TU1NZCI6Ik1NTSBkLCB5IEciLCJHeU1NTUVkIjoiRSwgTU1NIGQsIHkgRyIsImgiOiJoIGEiLCJIIjoiSEgiLCJobSI6Img6bW0gYSIsIkhtIjoiSEg6bW0iLCJobXMiOiJo''@;'; put 'put ''Om1tOnNzIGEiLCJIbXMiOiJISDptbTpzcyIsImhtc3YiOiJoOm1tOnNzIGEgdiIsIkhtc3YiOiJISDptbTpzcyB2IiwiaG12IjoiaDptbSBhIHYiLCJIbXYiOiJISDptbSB2IiwiTSI6IkwiLCJNZCI6Ik0vZCIsIk1FZCI6IkUsIE0vZCIsIk1NTSI6IkxMTCIsIk1NTWQiOiJNTU0gZCIsIk1N''@;'; put 'put ''TUVkIjoiRSwgTU1NIGQiLCJNTU1NZCI6Ik1NTU0gZCIsIm1zIjoibW06c3MiLCJ5IjoieSIsInlNIjoiTS95IiwieU1kIjoiTS9kL3kiLCJ5TUVkIjoiRSwgTS9kL3kiLCJ5TU1NIjoiTU1NIHkiLCJ5TU1NZCI6Ik1NTSBkLCB5IiwieU1NTUVkIjoiRSwgTU1NIGQsIHkiLCJ5TU1NTSI6Ik1N''@;'; put 'put ''TU0geSIsInlRUVEiOiJRUVEgeSIsInlRUVFRIjoiUVFRUSB5In0sImRhdGVGb3JtYXRzIjp7InlNTU1NRUVFRWQiOiJFRUVFLCBNTU1NIGQsIHkiLCJ5TU1NTWQiOiJNTU1NIGQsIHkiLCJ5TU1NZCI6Ik1NTSBkLCB5IiwieU1kIjoiTS9kL3l5In0sInRpbWVGb3JtYXRzIjp7ImhtbXNzenp6''@;'; put 'put ''eiI6Img6bW06c3MgYSB6enp6IiwiaG1zeiI6Img6bW06c3MgYSB6IiwiaG1zIjoiaDptbTpzcyBhIiwiaG0iOiJoOm1tIGEifX0sImNhbGVuZGFycyI6eyJidWRkaGlzdCI6eyJtb250aHMiOnsibmFycm93IjpbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwi''@;'; put 'put ''RCJdLCJzaG9ydCI6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSwibG9uZyI6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0''@;'; put 'put ''ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXki''@;'; put 'put ''LCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJyb3ciOlsiQkUiXSwic2hvcnQiOlsiQkUiXSwibG9uZyI6WyJCRSJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwiY2hpbmVzZSI6eyJtb250aHMi''@;'; put 'put ''OnsibmFycm93IjpbIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiJdLCJzaG9ydCI6WyJNbzEiLCJNbzIiLCJNbzMiLCJNbzQiLCJNbzUiLCJNbzYiLCJNbzciLCJNbzgiLCJNbzkiLCJNbzEwIiwiTW8xMSIsIk1vMTIiXSwibG9uZyI6WyJNb250aDEi''@;'; put 'put ''LCJNb250aDIiLCJNb250aDMiLCJNb250aDQiLCJNb250aDUiLCJNb250aDYiLCJNb250aDciLCJNb250aDgiLCJNb250aDkiLCJNb250aDEwIiwiTW9udGgxMSIsIk1vbnRoMTIiXX0sImRheXMiOnsibmFycm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3Vu''@;'; put 'put ''IiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImNvcHRpYyI6''@;'; put 'put ''eyJtb250aHMiOnsibmFycm93IjpbIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIl0sInNob3J0IjpbIlRvdXQiLCJCYWJhIiwiSGF0b3IiLCJLaWFoayIsIlRvYmEiLCJBbXNoaXIiLCJCYXJhbWhhdCIsIkJhcmFtb3VkYSIsIkJhc2hhbnMi''@;'; put 'put ''LCJQYW9uYSIsIkVwZXAiLCJNZXNyYSIsIk5hc2llIl0sImxvbmciOlsiVG91dCIsIkJhYmEiLCJIYXRvciIsIktpYWhrIiwiVG9iYSIsIkFtc2hpciIsIkJhcmFtaGF0IiwiQmFyYW1vdWRhIiwiQmFzaGFucyIsIlBhb25hIiwiRXBlcCIsIk1lc3JhIiwiTmFzaWUiXX0sImRheXMiOnsibmFy''@;'; put 'put ''cm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXki''@;'; put 'put ''XX0sImVyYXMiOnsibmFycm93IjpbIkVSQTAiLCJFUkExIl0sInNob3J0IjpbIkVSQTAiLCJFUkExIl0sImxvbmciOlsiRVJBMCIsIkVSQTEiXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImRhbmdpIjp7Im1vbnRocyI6eyJuYXJyb3ciOlsiMSIsIjIiLCIzIiwiNCIs''@;'; put 'put ''IjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIl0sInNob3J0IjpbIk1vMSIsIk1vMiIsIk1vMyIsIk1vNCIsIk1vNSIsIk1vNiIsIk1vNyIsIk1vOCIsIk1vOSIsIk1vMTAiLCJNbzExIiwiTW8xMiJdLCJsb25nIjpbIk1vbnRoMSIsIk1vbnRoMiIsIk1vbnRoMyIsIk1vbnRoNCIs''@;'; put 'put ''Ik1vbnRoNSIsIk1vbnRoNiIsIk1vbnRoNyIsIk1vbnRoOCIsIk1vbnRoOSIsIk1vbnRoMTAiLCJNb250aDExIiwiTW9udGgxMiJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJG''@;'; put 'put ''cmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwiZXRoaW9waWMiOnsibW9udGhzIjp7Im5hcnJvdyI6WyIxIiwi''@;'; put 'put ''MiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyJdLCJzaG9ydCI6WyJNZXNrZXJlbSIsIlRla2VtdCIsIkhlZGFyIiwiVGFoc2FzIiwiVGVyIiwiWWVrYXRpdCIsIk1lZ2FiaXQiLCJNaWF6aWEiLCJHZW5ib3QiLCJTZW5lIiwiSGFtbGUiLCJOZWhhc3Nl''@;'; put 'put ''IiwiUGFndW1lbiJdLCJsb25nIjpbIk1lc2tlcmVtIiwiVGVrZW10IiwiSGVkYXIiLCJUYWhzYXMiLCJUZXIiLCJZZWthdGl0IiwiTWVnYWJpdCIsIk1pYXppYSIsIkdlbmJvdCIsIlNlbmUiLCJIYW1sZSIsIk5laGFzc2UiLCJQYWd1bWVuIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIs''@;'; put 'put ''IlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5h''@;'; put 'put ''cnJvdyI6WyJFUkEwIiwiRVJBMSJdLCJzaG9ydCI6WyJFUkEwIiwiRVJBMSJdLCJsb25nIjpbIkVSQTAiLCJFUkExIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJldGhpb2FhIjp7Im1vbnRocyI6eyJuYXJyb3ciOlsiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIs''@;'; put 'put ''IjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiXSwic2hvcnQiOlsiTWVza2VyZW0iLCJUZWtlbXQiLCJIZWRhciIsIlRhaHNhcyIsIlRlciIsIllla2F0aXQiLCJNZWdhYml0IiwiTWlhemlhIiwiR2VuYm90IiwiU2VuZSIsIkhhbWxlIiwiTmVoYXNzZSIsIlBhZ3VtZW4iXSwibG9uZyI6WyJN''@;'; put 'put ''ZXNrZXJlbSIsIlRla2VtdCIsIkhlZGFyIiwiVGFoc2FzIiwiVGVyIiwiWWVrYXRpdCIsIk1lZ2FiaXQiLCJNaWF6aWEiLCJHZW5ib3QiLCJTZW5lIiwiSGFtbGUiLCJOZWhhc3NlIiwiUGFndW1lbiJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJz''@;'; put 'put ''aG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJyb3ciOlsiRVJBMCJdLCJzaG9ydCI6''@;'; put 'put ''WyJFUkEwIl0sImxvbmciOlsiRVJBMCJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwiZ2VuZXJpYyI6eyJtb250aHMiOnsibmFycm93IjpbIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiJdLCJzaG9ydCI6WyJNMDEiLCJNMDIi''@;'; put 'put ''LCJNMDMiLCJNMDQiLCJNMDUiLCJNMDYiLCJNMDciLCJNMDgiLCJNMDkiLCJNMTAiLCJNMTEiLCJNMTIiXSwibG9uZyI6WyJNMDEiLCJNMDIiLCJNMDMiLCJNMDQiLCJNMDUiLCJNMDYiLCJNMDciLCJNMDgiLCJNMDkiLCJNMTAiLCJNMTEiLCJNMTIiXX0sImRheXMiOnsibmFycm93IjpbIlMi''@;'; put 'put ''LCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImVyYXMi''@;'; put 'put ''OnsibmFycm93IjpbIkVSQTAiLCJFUkExIl0sInNob3J0IjpbIkVSQTAiLCJFUkExIl0sImxvbmciOlsiRVJBMCIsIkVSQTEiXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImdyZWdvcnkiOnsibW9udGhzIjp7Im5hcnJvdyI6WyJKIiwiRiIsIk0iLCJBIiwiTSIsIkoi''@;'; put 'put ''LCJKIiwiQSIsIlMiLCJPIiwiTiIsIkQiXSwic2hvcnQiOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sImxvbmciOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUi''@;'; put 'put ''LCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXX0sImRheXMiOnsibmFycm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxv''@;'; put 'put ''bmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImVyYXMiOnsibmFycm93IjpbIkIiLCJBIiwiQkNFIiwiQ0UiXSwic2hvcnQiOlsiQkMiLCJBRCIsIkJDRSIsIkNFIl0sImxvbmciOlsiQmVmb3JlIENo''@;'; put 'put ''cmlzdCIsIkFubm8gRG9taW5pIiwiQmVmb3JlIENvbW1vbiBFcmEiLCJDb21tb24gRXJhIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJoZWJyZXciOnsibW9udGhzIjp7Im5hcnJvdyI6WyIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjEx''@;'; put 'put ''IiwiMTIiLCIxMyIsIjciXSwic2hvcnQiOlsiVGlzaHJpIiwiSGVzaHZhbiIsIktpc2xldiIsIlRldmV0IiwiU2hldmF0IiwiQWRhciBJIiwiQWRhciIsIk5pc2FuIiwiSXlhciIsIlNpdmFuIiwiVGFtdXoiLCJBdiIsIkVsdWwiLCJBZGFyIElJIl0sImxvbmciOlsiVGlzaHJpIiwiSGVzaHZh''@;'; put 'put ''biIsIktpc2xldiIsIlRldmV0IiwiU2hldmF0IiwiQWRhciBJIiwiQWRhciIsIk5pc2FuIiwiSXlhciIsIlNpdmFuIiwiVGFtdXoiLCJBdiIsIkVsdWwiLCJBZGFyIElJIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1v''@;'; put 'put ''biIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJBTSJdLCJzaG9ydCI6WyJBTSJdLCJsb25nIjpbIkFN''@;'; put 'put ''Il19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJpbmRpYW4iOnsibW9udGhzIjp7Im5hcnJvdyI6WyIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiXSwic2hvcnQiOlsiQ2hhaXRyYSIsIlZhaXNha2hhIiwiSnlhaXN0aGEiLCJB''@;'; put 'put ''c2FkaGEiLCJTcmF2YW5hIiwiQmhhZHJhIiwiQXN2aW5hIiwiS2FydGlrYSIsIkFncmFoYXlhbmEiLCJQYXVzYSIsIk1hZ2hhIiwiUGhhbGd1bmEiXSwibG9uZyI6WyJDaGFpdHJhIiwiVmFpc2FraGEiLCJKeWFpc3RoYSIsIkFzYWRoYSIsIlNyYXZhbmEiLCJCaGFkcmEiLCJBc3ZpbmEiLCJL''@;'; put 'put ''YXJ0aWthIiwiQWdyYWhheWFuYSIsIlBhdXNhIiwiTWFnaGEiLCJQaGFsZ3VuYSJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXki''@;'; put 'put ''LCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJyb3ciOlsiU2FrYSJdLCJzaG9ydCI6WyJTYWthIl0sImxvbmciOlsiU2FrYSJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwiaXNs''@;'; put 'put ''YW1pYyI6eyJtb250aHMiOnsibmFycm93IjpbIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiJdLCJzaG9ydCI6WyJNdWguIiwiU2FmLiIsIlJhYi4gSSIsIlJhYi4gSUkiLCJKdW0uIEkiLCJKdW0uIElJIiwiUmFqLiIsIlNoYS4iLCJSYW0uIiwiU2hh''@;'; put 'put ''dy4iLCJEaHVcdTAyYmJsLVEuIiwiRGh1XHUwMmJibC1ILiJdLCJsb25nIjpbIk11aGFycmFtIiwiU2FmYXIiLCJSYWJpXHUwMmJiIEkiLCJSYWJpXHUwMmJiIElJIiwiSnVtYWRhIEkiLCJKdW1hZGEgSUkiLCJSYWphYiIsIlNoYVx1MDJiYmJhbiIsIlJhbWFkYW4iLCJTaGF3d2FsIiwiRGh1''@;'; put 'put ''XHUwMmJibC1RaVx1MDJiYmRhaCIsIkRodVx1MDJiYmwtSGlqamFoIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRh''@;'; put 'put ''eSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJBSCJdLCJzaG9ydCI6WyJBSCJdLCJsb25nIjpbIkFIIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJpc2xhbWljYyI6eyJtb250''@;'; put 'put ''aHMiOnsibmFycm93IjpbIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiJdLCJzaG9ydCI6WyJNdWguIiwiU2FmLiIsIlJhYi4gSSIsIlJhYi4gSUkiLCJKdW0uIEkiLCJKdW0uIElJIiwiUmFqLiIsIlNoYS4iLCJSYW0uIiwiU2hhdy4iLCJEaHVcdTAy''@;'; put 'put ''YmJsLVEuIiwiRGh1XHUwMmJibC1ILiJdLCJsb25nIjpbIk11aGFycmFtIiwiU2FmYXIiLCJSYWJpXHUwMmJiIEkiLCJSYWJpXHUwMmJiIElJIiwiSnVtYWRhIEkiLCJKdW1hZGEgSUkiLCJSYWphYiIsIlNoYVx1MDJiYmJhbiIsIlJhbWFkYW4iLCJTaGF3d2FsIiwiRGh1XHUwMmJibC1RaVx1''@;'; put 'put ''MDJiYmRhaCIsIkRodVx1MDJiYmwtSGlqamFoIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXki''@;'; put 'put ''LCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJBSCJdLCJzaG9ydCI6WyJBSCJdLCJsb25nIjpbIkFIIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJqYXBhbmVzZSI6eyJtb250aHMiOnsibmFycm93''@;'; put 'put ''IjpbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdLCJzaG9ydCI6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSwibG9uZyI6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJN''@;'; put 'put ''YXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJX''@;'; put 'put ''ZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJyb3ciOlsiVGFpa2EgKDY0NVx1MjAxMzY1MCkiLCJIYWt1Y2hpICg2NTBcdTIwMTM2''@;'; put 'put ''NzEpIiwiSGFrdWhcdTAxNGQgKDY3Mlx1MjAxMzY4NikiLCJTaHVjaFx1MDE0ZCAoNjg2XHUyMDEzNzAxKSIsIlRhaWhcdTAxNGQgKDcwMVx1MjAxMzcwNCkiLCJLZWl1biAoNzA0XHUyMDEzNzA4KSIsIldhZFx1MDE0ZCAoNzA4XHUyMDEzNzE1KSIsIlJlaWtpICg3MTVcdTIwMTM3MTcpIiwi''@;'; put 'put ''WVx1MDE0ZHJcdTAxNGQgKDcxN1x1MjAxMzcyNCkiLCJKaW5raSAoNzI0XHUyMDEzNzI5KSIsIlRlbnB5XHUwMTRkICg3MjlcdTIwMTM3NDkpIiwiVGVucHlcdTAxNGQta2FtcFx1MDE0ZCAoNzQ5LTc0OSkiLCJUZW5weVx1MDE0ZC1zaFx1MDE0ZGhcdTAxNGQgKDc0OS03NTcpIiwiVGVucHlc''@;'; put 'put ''dTAxNGQtaFx1MDE0ZGppICg3NTctNzY1KSIsIlRlbnB5XHUwMTRkLWppbmdvICg3NjUtNzY3KSIsIkppbmdvLWtlaXVuICg3NjctNzcwKSIsIkhcdTAxNGRraSAoNzcwXHUyMDEzNzgwKSIsIlRlbi1cdTAxNGQgKDc4MS03ODIpIiwiRW5yeWFrdSAoNzgyXHUyMDEzODA2KSIsIkRhaWRcdTAx''@;'; put 'put ''NGQgKDgwNlx1MjAxMzgxMCkiLCJLXHUwMTRkbmluICg4MTBcdTIwMTM4MjQpIiwiVGVuY2hcdTAxNGQgKDgyNFx1MjAxMzgzNCkiLCJKXHUwMTRkd2EgKDgzNFx1MjAxMzg0OCkiLCJLYWpcdTAxNGQgKDg0OFx1MjAxMzg1MSkiLCJOaW5qdSAoODUxXHUyMDEzODU0KSIsIlNhaWtcdTAxNGQg''@;'; put 'put ''KDg1NFx1MjAxMzg1NykiLCJUZW4tYW4gKDg1Ny04NTkpIiwiSlx1MDE0ZGdhbiAoODU5XHUyMDEzODc3KSIsIkdhbmd5XHUwMTRkICg4NzdcdTIwMTM4ODUpIiwiTmlubmEgKDg4NVx1MjAxMzg4OSkiLCJLYW5weVx1MDE0ZCAoODg5XHUyMDEzODk4KSIsIlNoXHUwMTRkdGFpICg4OThcdTIw''@;'; put 'put ''MTM5MDEpIiwiRW5naSAoOTAxXHUyMDEzOTIzKSIsIkVuY2hcdTAxNGQgKDkyM1x1MjAxMzkzMSkiLCJKXHUwMTRkaGVpICg5MzFcdTIwMTM5MzgpIiwiVGVuZ3lcdTAxNGQgKDkzOFx1MjAxMzk0NykiLCJUZW5yeWFrdSAoOTQ3XHUyMDEzOTU3KSIsIlRlbnRva3UgKDk1N1x1MjAxMzk2MSki''@;'; put 'put ''LCJcdTAxNGN3YSAoOTYxXHUyMDEzOTY0KSIsIktcdTAxNGRoXHUwMTRkICg5NjRcdTIwMTM5NjgpIiwiQW5uYSAoOTY4XHUyMDEzOTcwKSIsIlRlbnJva3UgKDk3MFx1MjAxMzk3MykiLCJUZW5cdTIwMTllbiAoOTczXHUyMDEzOTc2KSIsIkpcdTAxNGRnZW4gKDk3Nlx1MjAxMzk3OCkiLCJU''@;'; put 'put ''ZW5nZW4gKDk3OFx1MjAxMzk4MykiLCJFaWthbiAoOTgzXHUyMDEzOTg1KSIsIkthbm5hICg5ODVcdTIwMTM5ODcpIiwiRWllbiAoOTg3XHUyMDEzOTg5KSIsIkVpc28gKDk4OVx1MjAxMzk5MCkiLCJTaFx1MDE0ZHJ5YWt1ICg5OTBcdTIwMTM5OTUpIiwiQ2hcdTAxNGR0b2t1ICg5OTVcdTIw''@;'; put 'put ''MTM5OTkpIiwiQ2hcdTAxNGRoXHUwMTRkICg5OTlcdTIwMTMxMDA0KSIsIkthbmtcdTAxNGQgKDEwMDRcdTIwMTMxMDEyKSIsIkNoXHUwMTRkd2EgKDEwMTJcdTIwMTMxMDE3KSIsIkthbm5pbiAoMTAxN1x1MjAxMzEwMjEpIiwiSmlhbiAoMTAyMVx1MjAxMzEwMjQpIiwiTWFuanUgKDEwMjRc''@;'; put 'put ''dTIwMTMxMDI4KSIsIkNoXHUwMTRkZ2VuICgxMDI4XHUyMDEzMTAzNykiLCJDaFx1MDE0ZHJ5YWt1ICgxMDM3XHUyMDEzMTA0MCkiLCJDaFx1MDE0ZGt5XHUwMTZiICgxMDQwXHUyMDEzMTA0NCkiLCJLYW50b2t1ICgxMDQ0XHUyMDEzMTA0NikiLCJFaXNoXHUwMTRkICgxMDQ2XHUyMDEzMTA1''@;'; put 'put ''MykiLCJUZW5naSAoMTA1M1x1MjAxMzEwNTgpIiwiS1x1MDE0ZGhlaSAoMTA1OFx1MjAxMzEwNjUpIiwiSmlyeWFrdSAoMTA2NVx1MjAxMzEwNjkpIiwiRW5reVx1MDE2YiAoMTA2OVx1MjAxMzEwNzQpIiwiU2hcdTAxNGRobyAoMTA3NFx1MjAxMzEwNzcpIiwiU2hcdTAxNGRyeWFrdSAoMTA3''@;'; put 'put ''N1x1MjAxMzEwODEpIiwiRWloXHUwMTRkICgxMDgxXHUyMDEzMTA4NCkiLCJcdTAxNGN0b2t1ICgxMDg0XHUyMDEzMTA4NykiLCJLYW5qaSAoMTA4N1x1MjAxMzEwOTQpIiwiS2FoXHUwMTRkICgxMDk0XHUyMDEzMTA5NikiLCJFaWNoXHUwMTRkICgxMDk2XHUyMDEzMTA5NykiLCJKXHUwMTRk''@;'; put 'put ''dG9rdSAoMTA5N1x1MjAxMzEwOTkpIiwiS1x1MDE0ZHdhICgxMDk5XHUyMDEzMTEwNCkiLCJDaFx1MDE0ZGppICgxMTA0XHUyMDEzMTEwNikiLCJLYXNoXHUwMTRkICgxMTA2XHUyMDEzMTEwOCkiLCJUZW5uaW4gKDExMDhcdTIwMTMxMTEwKSIsIlRlbi1laSAoMTExMC0xMTEzKSIsIkVpa3lc''@;'; put 'put ''dTAxNmIgKDExMTNcdTIwMTMxMTE4KSIsIkdlblx1MjAxOWVpICgxMTE4XHUyMDEzMTEyMCkiLCJIXHUwMTRkYW4gKDExMjBcdTIwMTMxMTI0KSIsIlRlbmppICgxMTI0XHUyMDEzMTEyNikiLCJEYWlqaSAoMTEyNlx1MjAxMzExMzEpIiwiVGVuc2hcdTAxNGQgKDExMzFcdTIwMTMxMTMyKSIs''@;'; put 'put ''IkNoXHUwMTRkc2hcdTAxNGQgKDExMzJcdTIwMTMxMTM1KSIsIkhcdTAxNGRlbiAoMTEzNVx1MjAxMzExNDEpIiwiRWlqaSAoMTE0MVx1MjAxMzExNDIpIiwiS1x1MDE0ZGppICgxMTQyXHUyMDEzMTE0NCkiLCJUZW5cdTIwMTl5XHUwMTRkICgxMTQ0XHUyMDEzMTE0NSkiLCJLeVx1MDE2YmFu''@;'; put 'put ''ICgxMTQ1XHUyMDEzMTE1MSkiLCJOaW5wZWkgKDExNTFcdTIwMTMxMTU0KSIsIkt5XHUwMTZianUgKDExNTRcdTIwMTMxMTU2KSIsIkhcdTAxNGRnZW4gKDExNTZcdTIwMTMxMTU5KSIsIkhlaWppICgxMTU5XHUyMDEzMTE2MCkiLCJFaXJ5YWt1ICgxMTYwXHUyMDEzMTE2MSkiLCJcdTAxNGNo''@;'; put 'put ''byAoMTE2MVx1MjAxMzExNjMpIiwiQ2hcdTAxNGRrYW4gKDExNjNcdTIwMTMxMTY1KSIsIkVpbWFuICgxMTY1XHUyMDEzMTE2NikiLCJOaW5cdTIwMTlhbiAoMTE2Nlx1MjAxMzExNjkpIiwiS2FcdTAxNGQgKDExNjlcdTIwMTMxMTcxKSIsIlNoXHUwMTRkYW4gKDExNzFcdTIwMTMxMTc1KSIs''@;'; put 'put ''IkFuZ2VuICgxMTc1XHUyMDEzMTE3NykiLCJKaXNoXHUwMTRkICgxMTc3XHUyMDEzMTE4MSkiLCJZXHUwMTRkd2EgKDExODFcdTIwMTMxMTgyKSIsIkp1ZWkgKDExODJcdTIwMTMxMTg0KSIsIkdlbnJ5YWt1ICgxMTg0XHUyMDEzMTE4NSkiLCJCdW5qaSAoMTE4NVx1MjAxMzExOTApIiwiS2Vu''@;'; put 'put ''a3lcdTAxNmIgKDExOTBcdTIwMTMxMTk5KSIsIlNoXHUwMTRkamkgKDExOTlcdTIwMTMxMjAxKSIsIktlbm5pbiAoMTIwMVx1MjAxMzEyMDQpIiwiR2Vua3lcdTAxNmIgKDEyMDRcdTIwMTMxMjA2KSIsIktlblx1MjAxOWVpICgxMjA2XHUyMDEzMTIwNykiLCJKXHUwMTRkZ2VuICgxMjA3XHUy''@;'; put 'put ''MDEzMTIxMSkiLCJLZW5yeWFrdSAoMTIxMVx1MjAxMzEyMTMpIiwiS2VucFx1MDE0ZCAoMTIxM1x1MjAxMzEyMTkpIiwiSlx1MDE0ZGt5XHUwMTZiICgxMjE5XHUyMDEzMTIyMikiLCJKXHUwMTRkXHUwMTRkICgxMjIyXHUyMDEzMTIyNCkiLCJHZW5uaW4gKDEyMjRcdTIwMTMxMjI1KSIsIkth''@;'; put 'put ''cm9rdSAoMTIyNVx1MjAxMzEyMjcpIiwiQW50ZWkgKDEyMjdcdTIwMTMxMjI5KSIsIkthbmtpICgxMjI5XHUyMDEzMTIzMikiLCJKXHUwMTRkZWkgKDEyMzJcdTIwMTMxMjMzKSIsIlRlbnB1a3UgKDEyMzNcdTIwMTMxMjM0KSIsIkJ1bnJ5YWt1ICgxMjM0XHUyMDEzMTIzNSkiLCJLYXRlaSAo''@;'; put 'put ''MTIzNVx1MjAxMzEyMzgpIiwiUnlha3VuaW4gKDEyMzhcdTIwMTMxMjM5KSIsIkVuXHUyMDE5XHUwMTRkICgxMjM5XHUyMDEzMTI0MCkiLCJOaW5qaSAoMTI0MFx1MjAxMzEyNDMpIiwiS2FuZ2VuICgxMjQzXHUyMDEzMTI0NykiLCJIXHUwMTRkamkgKDEyNDdcdTIwMTMxMjQ5KSIsIktlbmNo''@;'; put 'put ''XHUwMTRkICgxMjQ5XHUyMDEzMTI1NikiLCJLXHUwMTRkZ2VuICgxMjU2XHUyMDEzMTI1NykiLCJTaFx1MDE0ZGthICgxMjU3XHUyMDEzMTI1OSkiLCJTaFx1MDE0ZGdlbiAoMTI1OVx1MjAxMzEyNjApIiwiQnVuXHUyMDE5XHUwMTRkICgxMjYwXHUyMDEzMTI2MSkiLCJLXHUwMTRkY2hcdTAx''@;'; put 'put ''NGQgKDEyNjFcdTIwMTMxMjY0KSIsIkJ1blx1MjAxOWVpICgxMjY0XHUyMDEzMTI3NSkiLCJLZW5qaSAoMTI3NVx1MjAxMzEyNzgpIiwiS1x1MDE0ZGFuICgxMjc4XHUyMDEzMTI4OCkiLCJTaFx1MDE0ZFx1MDE0ZCAoMTI4OFx1MjAxMzEyOTMpIiwiRWluaW4gKDEyOTNcdTIwMTMxMjk5KSIs''@;'; put 'put ''IlNoXHUwMTRkYW4gKDEyOTlcdTIwMTMxMzAyKSIsIktlbmdlbiAoMTMwMlx1MjAxMzEzMDMpIiwiS2FnZW4gKDEzMDNcdTIwMTMxMzA2KSIsIlRva3VqaSAoMTMwNlx1MjAxMzEzMDgpIiwiRW5reVx1MDE0ZCAoMTMwOFx1MjAxMzEzMTEpIiwiXHUwMTRjY2hcdTAxNGQgKDEzMTFcdTIwMTMx''@;'; put 'put ''MzEyKSIsIlNoXHUwMTRkd2EgKDEzMTJcdTIwMTMxMzE3KSIsIkJ1bnBcdTAxNGQgKDEzMTdcdTIwMTMxMzE5KSIsIkdlblx1MDE0ZCAoMTMxOVx1MjAxMzEzMjEpIiwiR2Vua1x1MDE0ZCAoMTMyMVx1MjAxMzEzMjQpIiwiU2hcdTAxNGRjaFx1MDE2YiAoMTMyNFx1MjAxMzEzMjYpIiwiS2Fy''@;'; put 'put ''eWFrdSAoMTMyNlx1MjAxMzEzMjkpIiwiR2VudG9rdSAoMTMyOVx1MjAxMzEzMzEpIiwiR2Vua1x1MDE0ZCAoMTMzMVx1MjAxMzEzMzQpIiwiS2VubXUgKDEzMzRcdTIwMTMxMzM2KSIsIkVuZ2VuICgxMzM2XHUyMDEzMTM0MCkiLCJLXHUwMTRka29rdSAoMTM0MFx1MjAxMzEzNDYpIiwiU2hc''@;'; put 'put ''dTAxNGRoZWkgKDEzNDZcdTIwMTMxMzcwKSIsIktlbnRva3UgKDEzNzBcdTIwMTMxMzcyKSIsIkJ1bmNoXHUwMTZiICgxMzcyXHUyMDEzMTM3NSkiLCJUZW5qdSAoMTM3NVx1MjAxMzEzNzkpIiwiS1x1MDE0ZHJ5YWt1ICgxMzc5XHUyMDEzMTM4MSkiLCJLXHUwMTRkd2EgKDEzODFcdTIwMTMx''@;'; put 'put ''Mzg0KSIsIkdlbmNoXHUwMTZiICgxMzg0XHUyMDEzMTM5MikiLCJNZWl0b2t1ICgxMzg0XHUyMDEzMTM4NykiLCJLYWtlaSAoMTM4N1x1MjAxMzEzODkpIiwiS1x1MDE0ZFx1MDE0ZCAoMTM4OVx1MjAxMzEzOTApIiwiTWVpdG9rdSAoMTM5MFx1MjAxMzEzOTQpIiwiXHUwMTRjZWkgKDEzOTRc''@;'; put 'put ''dTIwMTMxNDI4KSIsIlNoXHUwMTRkY2hcdTAxNGQgKDE0MjhcdTIwMTMxNDI5KSIsIkVpa3lcdTAxNGQgKDE0MjlcdTIwMTMxNDQxKSIsIktha2l0c3UgKDE0NDFcdTIwMTMxNDQ0KSIsIkJ1blx1MjAxOWFuICgxNDQ0XHUyMDEzMTQ0OSkiLCJIXHUwMTRkdG9rdSAoMTQ0OVx1MjAxMzE0NTIp''@;'; put 'put ''IiwiS3lcdTAxNGR0b2t1ICgxNDUyXHUyMDEzMTQ1NSkiLCJLXHUwMTRkc2hcdTAxNGQgKDE0NTVcdTIwMTMxNDU3KSIsIkNoXHUwMTRkcm9rdSAoMTQ1N1x1MjAxMzE0NjApIiwiS2Fuc2hcdTAxNGQgKDE0NjBcdTIwMTMxNDY2KSIsIkJ1bnNoXHUwMTRkICgxNDY2XHUyMDEzMTQ2NykiLCJc''@;'; put 'put ''dTAxNGNuaW4gKDE0NjdcdTIwMTMxNDY5KSIsIkJ1bm1laSAoMTQ2OVx1MjAxMzE0ODcpIiwiQ2hcdTAxNGRreVx1MDE0ZCAoMTQ4N1x1MjAxMzE0ODkpIiwiRW50b2t1ICgxNDg5XHUyMDEzMTQ5MikiLCJNZWlcdTAxNGQgKDE0OTJcdTIwMTMxNTAxKSIsIkJ1bmtpICgxNTAxXHUyMDEzMTUw''@;'; put 'put ''NCkiLCJFaXNoXHUwMTRkICgxNTA0XHUyMDEzMTUyMSkiLCJUYWllaSAoMTUyMVx1MjAxMzE1MjgpIiwiS3lcdTAxNGRyb2t1ICgxNTI4XHUyMDEzMTUzMikiLCJUZW5idW4gKDE1MzJcdTIwMTMxNTU1KSIsIktcdTAxNGRqaSAoMTU1NVx1MjAxMzE1NTgpIiwiRWlyb2t1ICgxNTU4XHUyMDEz''@;'; put 'put ''MTU3MCkiLCJHZW5raSAoMTU3MFx1MjAxMzE1NzMpIiwiVGVuc2hcdTAxNGQgKDE1NzNcdTIwMTMxNTkyKSIsIkJ1bnJva3UgKDE1OTJcdTIwMTMxNTk2KSIsIktlaWNoXHUwMTRkICgxNTk2XHUyMDEzMTYxNSkiLCJHZW5uYSAoMTYxNVx1MjAxMzE2MjQpIiwiS2FuXHUyMDE5ZWkgKDE2MjRc''@;'; put 'put ''dTIwMTMxNjQ0KSIsIlNoXHUwMTRkaG8gKDE2NDRcdTIwMTMxNjQ4KSIsIktlaWFuICgxNjQ4XHUyMDEzMTY1MikiLCJKXHUwMTRkXHUwMTRkICgxNjUyXHUyMDEzMTY1NSkiLCJNZWlyZWtpICgxNjU1XHUyMDEzMTY1OCkiLCJNYW5qaSAoMTY1OFx1MjAxMzE2NjEpIiwiS2FuYnVuICgxNjYx''@;'; put 'put ''XHUyMDEzMTY3MykiLCJFbnBcdTAxNGQgKDE2NzNcdTIwMTMxNjgxKSIsIlRlbm5hICgxNjgxXHUyMDEzMTY4NCkiLCJKXHUwMTRka3lcdTAxNGQgKDE2ODRcdTIwMTMxNjg4KSIsIkdlbnJva3UgKDE2ODhcdTIwMTMxNzA0KSIsIkhcdTAxNGRlaSAoMTcwNFx1MjAxMzE3MTEpIiwiU2hcdTAx''@;'; put 'put ''NGR0b2t1ICgxNzExXHUyMDEzMTcxNikiLCJLeVx1MDE0ZGhcdTAxNGQgKDE3MTZcdTIwMTMxNzM2KSIsIkdlbmJ1biAoMTczNlx1MjAxMzE3NDEpIiwiS2FucFx1MDE0ZCAoMTc0MVx1MjAxMzE3NDQpIiwiRW5reVx1MDE0ZCAoMTc0NFx1MjAxMzE3NDgpIiwiS2FuXHUyMDE5ZW4gKDE3NDhc''@;'; put 'put ''dTIwMTMxNzUxKSIsIkhcdTAxNGRyZWtpICgxNzUxXHUyMDEzMTc2NCkiLCJNZWl3YSAoMTc2NFx1MjAxMzE3NzIpIiwiQW5cdTIwMTllaSAoMTc3Mlx1MjAxMzE3ODEpIiwiVGVubWVpICgxNzgxXHUyMDEzMTc4OSkiLCJLYW5zZWkgKDE3ODlcdTIwMTMxODAxKSIsIkt5XHUwMTRkd2EgKDE4''@;'; put 'put ''MDFcdTIwMTMxODA0KSIsIkJ1bmthICgxODA0XHUyMDEzMTgxOCkiLCJCdW5zZWkgKDE4MThcdTIwMTMxODMwKSIsIlRlbnBcdTAxNGQgKDE4MzBcdTIwMTMxODQ0KSIsIktcdTAxNGRrYSAoMTg0NFx1MjAxMzE4NDgpIiwiS2FlaSAoMTg0OFx1MjAxMzE4NTQpIiwiQW5zZWkgKDE4NTRcdTIw''@;'; put 'put ''MTMxODYwKSIsIk1hblx1MjAxOWVuICgxODYwXHUyMDEzMTg2MSkiLCJCdW5reVx1MDE2YiAoMTg2MVx1MjAxMzE4NjQpIiwiR2VuamkgKDE4NjRcdTIwMTMxODY1KSIsIktlaVx1MDE0ZCAoMTg2NVx1MjAxMzE4NjgpIiwiTSIsIlQiLCJTIiwiSCJdLCJzaG9ydCI6WyJUYWlrYSAoNjQ1XHUy''@;'; put 'put ''MDEzNjUwKSIsIkhha3VjaGkgKDY1MFx1MjAxMzY3MSkiLCJIYWt1aFx1MDE0ZCAoNjcyXHUyMDEzNjg2KSIsIlNodWNoXHUwMTRkICg2ODZcdTIwMTM3MDEpIiwiVGFpaFx1MDE0ZCAoNzAxXHUyMDEzNzA0KSIsIktlaXVuICg3MDRcdTIwMTM3MDgpIiwiV2FkXHUwMTRkICg3MDhcdTIwMTM3''@;'; put 'put ''MTUpIiwiUmVpa2kgKDcxNVx1MjAxMzcxNykiLCJZXHUwMTRkclx1MDE0ZCAoNzE3XHUyMDEzNzI0KSIsIkppbmtpICg3MjRcdTIwMTM3MjkpIiwiVGVucHlcdTAxNGQgKDcyOVx1MjAxMzc0OSkiLCJUZW5weVx1MDE0ZC1rYW1wXHUwMTRkICg3NDktNzQ5KSIsIlRlbnB5XHUwMTRkLXNoXHUw''@;'; put 'put ''MTRkaFx1MDE0ZCAoNzQ5LTc1NykiLCJUZW5weVx1MDE0ZC1oXHUwMTRkamkgKDc1Ny03NjUpIiwiVGVucHlcdTAxNGQtamluZ28gKDc2NS03NjcpIiwiSmluZ28ta2VpdW4gKDc2Ny03NzApIiwiSFx1MDE0ZGtpICg3NzBcdTIwMTM3ODApIiwiVGVuLVx1MDE0ZCAoNzgxLTc4MikiLCJFbnJ5''@;'; put 'put ''YWt1ICg3ODJcdTIwMTM4MDYpIiwiRGFpZFx1MDE0ZCAoODA2XHUyMDEzODEwKSIsIktcdTAxNGRuaW4gKDgxMFx1MjAxMzgyNCkiLCJUZW5jaFx1MDE0ZCAoODI0XHUyMDEzODM0KSIsIkpcdTAxNGR3YSAoODM0XHUyMDEzODQ4KSIsIkthalx1MDE0ZCAoODQ4XHUyMDEzODUxKSIsIk5pbmp1''@;'; put 'put ''ICg4NTFcdTIwMTM4NTQpIiwiU2Fpa1x1MDE0ZCAoODU0XHUyMDEzODU3KSIsIlRlbi1hbiAoODU3LTg1OSkiLCJKXHUwMTRkZ2FuICg4NTlcdTIwMTM4NzcpIiwiR2FuZ3lcdTAxNGQgKDg3N1x1MjAxMzg4NSkiLCJOaW5uYSAoODg1XHUyMDEzODg5KSIsIkthbnB5XHUwMTRkICg4ODlcdTIw''@;'; put 'put ''MTM4OTgpIiwiU2hcdTAxNGR0YWkgKDg5OFx1MjAxMzkwMSkiLCJFbmdpICg5MDFcdTIwMTM5MjMpIiwiRW5jaFx1MDE0ZCAoOTIzXHUyMDEzOTMxKSIsIkpcdTAxNGRoZWkgKDkzMVx1MjAxMzkzOCkiLCJUZW5neVx1MDE0ZCAoOTM4XHUyMDEzOTQ3KSIsIlRlbnJ5YWt1ICg5NDdcdTIwMTM5''@;'; put 'put ''NTcpIiwiVGVudG9rdSAoOTU3XHUyMDEzOTYxKSIsIlx1MDE0Y3dhICg5NjFcdTIwMTM5NjQpIiwiS1x1MDE0ZGhcdTAxNGQgKDk2NFx1MjAxMzk2OCkiLCJBbm5hICg5NjhcdTIwMTM5NzApIiwiVGVucm9rdSAoOTcwXHUyMDEzOTczKSIsIlRlblx1MjAxOWVuICg5NzNcdTIwMTM5NzYpIiwi''@;'; put 'put ''Slx1MDE0ZGdlbiAoOTc2XHUyMDEzOTc4KSIsIlRlbmdlbiAoOTc4XHUyMDEzOTgzKSIsIkVpa2FuICg5ODNcdTIwMTM5ODUpIiwiS2FubmEgKDk4NVx1MjAxMzk4NykiLCJFaWVuICg5ODdcdTIwMTM5ODkpIiwiRWlzbyAoOTg5XHUyMDEzOTkwKSIsIlNoXHUwMTRkcnlha3UgKDk5MFx1MjAx''@;'; put 'put ''Mzk5NSkiLCJDaFx1MDE0ZHRva3UgKDk5NVx1MjAxMzk5OSkiLCJDaFx1MDE0ZGhcdTAxNGQgKDk5OVx1MjAxMzEwMDQpIiwiS2Fua1x1MDE0ZCAoMTAwNFx1MjAxMzEwMTIpIiwiQ2hcdTAxNGR3YSAoMTAxMlx1MjAxMzEwMTcpIiwiS2FubmluICgxMDE3XHUyMDEzMTAyMSkiLCJKaWFuICgx''@;'; put 'put ''MDIxXHUyMDEzMTAyNCkiLCJNYW5qdSAoMTAyNFx1MjAxMzEwMjgpIiwiQ2hcdTAxNGRnZW4gKDEwMjhcdTIwMTMxMDM3KSIsIkNoXHUwMTRkcnlha3UgKDEwMzdcdTIwMTMxMDQwKSIsIkNoXHUwMTRka3lcdTAxNmIgKDEwNDBcdTIwMTMxMDQ0KSIsIkthbnRva3UgKDEwNDRcdTIwMTMxMDQ2''@;'; put 'put ''KSIsIkVpc2hcdTAxNGQgKDEwNDZcdTIwMTMxMDUzKSIsIlRlbmdpICgxMDUzXHUyMDEzMTA1OCkiLCJLXHUwMTRkaGVpICgxMDU4XHUyMDEzMTA2NSkiLCJKaXJ5YWt1ICgxMDY1XHUyMDEzMTA2OSkiLCJFbmt5XHUwMTZiICgxMDY5XHUyMDEzMTA3NCkiLCJTaFx1MDE0ZGhvICgxMDc0XHUy''@;'; put 'put ''MDEzMTA3NykiLCJTaFx1MDE0ZHJ5YWt1ICgxMDc3XHUyMDEzMTA4MSkiLCJFaWhcdTAxNGQgKDEwODFcdTIwMTMxMDg0KSIsIlx1MDE0Y3Rva3UgKDEwODRcdTIwMTMxMDg3KSIsIkthbmppICgxMDg3XHUyMDEzMTA5NCkiLCJLYWhcdTAxNGQgKDEwOTRcdTIwMTMxMDk2KSIsIkVpY2hcdTAx''@;'; put 'put ''NGQgKDEwOTZcdTIwMTMxMDk3KSIsIkpcdTAxNGR0b2t1ICgxMDk3XHUyMDEzMTA5OSkiLCJLXHUwMTRkd2EgKDEwOTlcdTIwMTMxMTA0KSIsIkNoXHUwMTRkamkgKDExMDRcdTIwMTMxMTA2KSIsIkthc2hcdTAxNGQgKDExMDZcdTIwMTMxMTA4KSIsIlRlbm5pbiAoMTEwOFx1MjAxMzExMTAp''@;'; put 'put ''IiwiVGVuLWVpICgxMTEwLTExMTMpIiwiRWlreVx1MDE2YiAoMTExM1x1MjAxMzExMTgpIiwiR2VuXHUyMDE5ZWkgKDExMThcdTIwMTMxMTIwKSIsIkhcdTAxNGRhbiAoMTEyMFx1MjAxMzExMjQpIiwiVGVuamkgKDExMjRcdTIwMTMxMTI2KSIsIkRhaWppICgxMTI2XHUyMDEzMTEzMSkiLCJU''@;'; put 'put ''ZW5zaFx1MDE0ZCAoMTEzMVx1MjAxMzExMzIpIiwiQ2hcdTAxNGRzaFx1MDE0ZCAoMTEzMlx1MjAxMzExMzUpIiwiSFx1MDE0ZGVuICgxMTM1XHUyMDEzMTE0MSkiLCJFaWppICgxMTQxXHUyMDEzMTE0MikiLCJLXHUwMTRkamkgKDExNDJcdTIwMTMxMTQ0KSIsIlRlblx1MjAxOXlcdTAxNGQg''@;'; put 'put ''KDExNDRcdTIwMTMxMTQ1KSIsIkt5XHUwMTZiYW4gKDExNDVcdTIwMTMxMTUxKSIsIk5pbnBlaSAoMTE1MVx1MjAxMzExNTQpIiwiS3lcdTAxNmJqdSAoMTE1NFx1MjAxMzExNTYpIiwiSFx1MDE0ZGdlbiAoMTE1Nlx1MjAxMzExNTkpIiwiSGVpamkgKDExNTlcdTIwMTMxMTYwKSIsIkVpcnlh''@;'; put 'put ''a3UgKDExNjBcdTIwMTMxMTYxKSIsIlx1MDE0Y2hvICgxMTYxXHUyMDEzMTE2MykiLCJDaFx1MDE0ZGthbiAoMTE2M1x1MjAxMzExNjUpIiwiRWltYW4gKDExNjVcdTIwMTMxMTY2KSIsIk5pblx1MjAxOWFuICgxMTY2XHUyMDEzMTE2OSkiLCJLYVx1MDE0ZCAoMTE2OVx1MjAxMzExNzEpIiwi''@;'; put 'put ''U2hcdTAxNGRhbiAoMTE3MVx1MjAxMzExNzUpIiwiQW5nZW4gKDExNzVcdTIwMTMxMTc3KSIsIkppc2hcdTAxNGQgKDExNzdcdTIwMTMxMTgxKSIsIllcdTAxNGR3YSAoMTE4MVx1MjAxMzExODIpIiwiSnVlaSAoMTE4Mlx1MjAxMzExODQpIiwiR2Vucnlha3UgKDExODRcdTIwMTMxMTg1KSIs''@;'; put 'put ''IkJ1bmppICgxMTg1XHUyMDEzMTE5MCkiLCJLZW5reVx1MDE2YiAoMTE5MFx1MjAxMzExOTkpIiwiU2hcdTAxNGRqaSAoMTE5OVx1MjAxMzEyMDEpIiwiS2VubmluICgxMjAxXHUyMDEzMTIwNCkiLCJHZW5reVx1MDE2YiAoMTIwNFx1MjAxMzEyMDYpIiwiS2VuXHUyMDE5ZWkgKDEyMDZcdTIw''@;'; put 'put ''MTMxMjA3KSIsIkpcdTAxNGRnZW4gKDEyMDdcdTIwMTMxMjExKSIsIktlbnJ5YWt1ICgxMjExXHUyMDEzMTIxMykiLCJLZW5wXHUwMTRkICgxMjEzXHUyMDEzMTIxOSkiLCJKXHUwMTRka3lcdTAxNmIgKDEyMTlcdTIwMTMxMjIyKSIsIkpcdTAxNGRcdTAxNGQgKDEyMjJcdTIwMTMxMjI0KSIs''@;'; put 'put ''Ikdlbm5pbiAoMTIyNFx1MjAxMzEyMjUpIiwiS2Fyb2t1ICgxMjI1XHUyMDEzMTIyNykiLCJBbnRlaSAoMTIyN1x1MjAxMzEyMjkpIiwiS2Fua2kgKDEyMjlcdTIwMTMxMjMyKSIsIkpcdTAxNGRlaSAoMTIzMlx1MjAxMzEyMzMpIiwiVGVucHVrdSAoMTIzM1x1MjAxMzEyMzQpIiwiQnVucnlh''@;'; put 'put ''a3UgKDEyMzRcdTIwMTMxMjM1KSIsIkthdGVpICgxMjM1XHUyMDEzMTIzOCkiLCJSeWFrdW5pbiAoMTIzOFx1MjAxMzEyMzkpIiwiRW5cdTIwMTlcdTAxNGQgKDEyMzlcdTIwMTMxMjQwKSIsIk5pbmppICgxMjQwXHUyMDEzMTI0MykiLCJLYW5nZW4gKDEyNDNcdTIwMTMxMjQ3KSIsIkhcdTAx''@;'; put 'put ''NGRqaSAoMTI0N1x1MjAxMzEyNDkpIiwiS2VuY2hcdTAxNGQgKDEyNDlcdTIwMTMxMjU2KSIsIktcdTAxNGRnZW4gKDEyNTZcdTIwMTMxMjU3KSIsIlNoXHUwMTRka2EgKDEyNTdcdTIwMTMxMjU5KSIsIlNoXHUwMTRkZ2VuICgxMjU5XHUyMDEzMTI2MCkiLCJCdW5cdTIwMTlcdTAxNGQgKDEy''@;'; put 'put ''NjBcdTIwMTMxMjYxKSIsIktcdTAxNGRjaFx1MDE0ZCAoMTI2MVx1MjAxMzEyNjQpIiwiQnVuXHUyMDE5ZWkgKDEyNjRcdTIwMTMxMjc1KSIsIktlbmppICgxMjc1XHUyMDEzMTI3OCkiLCJLXHUwMTRkYW4gKDEyNzhcdTIwMTMxMjg4KSIsIlNoXHUwMTRkXHUwMTRkICgxMjg4XHUyMDEzMTI5''@;'; put 'put ''MykiLCJFaW5pbiAoMTI5M1x1MjAxMzEyOTkpIiwiU2hcdTAxNGRhbiAoMTI5OVx1MjAxMzEzMDIpIiwiS2VuZ2VuICgxMzAyXHUyMDEzMTMwMykiLCJLYWdlbiAoMTMwM1x1MjAxMzEzMDYpIiwiVG9rdWppICgxMzA2XHUyMDEzMTMwOCkiLCJFbmt5XHUwMTRkICgxMzA4XHUyMDEzMTMxMSki''@;'; put 'put ''LCJcdTAxNGNjaFx1MDE0ZCAoMTMxMVx1MjAxMzEzMTIpIiwiU2hcdTAxNGR3YSAoMTMxMlx1MjAxMzEzMTcpIiwiQnVucFx1MDE0ZCAoMTMxN1x1MjAxMzEzMTkpIiwiR2VuXHUwMTRkICgxMzE5XHUyMDEzMTMyMSkiLCJHZW5rXHUwMTRkICgxMzIxXHUyMDEzMTMyNCkiLCJTaFx1MDE0ZGNo''@;'; put 'put ''XHUwMTZiICgxMzI0XHUyMDEzMTMyNikiLCJLYXJ5YWt1ICgxMzI2XHUyMDEzMTMyOSkiLCJHZW50b2t1ICgxMzI5XHUyMDEzMTMzMSkiLCJHZW5rXHUwMTRkICgxMzMxXHUyMDEzMTMzNCkiLCJLZW5tdSAoMTMzNFx1MjAxMzEzMzYpIiwiRW5nZW4gKDEzMzZcdTIwMTMxMzQwKSIsIktcdTAx''@;'; put 'put ''NGRrb2t1ICgxMzQwXHUyMDEzMTM0NikiLCJTaFx1MDE0ZGhlaSAoMTM0Nlx1MjAxMzEzNzApIiwiS2VudG9rdSAoMTM3MFx1MjAxMzEzNzIpIiwiQnVuY2hcdTAxNmIgKDEzNzJcdTIwMTMxMzc1KSIsIlRlbmp1ICgxMzc1XHUyMDEzMTM3OSkiLCJLXHUwMTRkcnlha3UgKDEzNzlcdTIwMTMx''@;'; put 'put ''MzgxKSIsIktcdTAxNGR3YSAoMTM4MVx1MjAxMzEzODQpIiwiR2VuY2hcdTAxNmIgKDEzODRcdTIwMTMxMzkyKSIsIk1laXRva3UgKDEzODRcdTIwMTMxMzg3KSIsIktha2VpICgxMzg3XHUyMDEzMTM4OSkiLCJLXHUwMTRkXHUwMTRkICgxMzg5XHUyMDEzMTM5MCkiLCJNZWl0b2t1ICgxMzkw''@;'; put 'put ''XHUyMDEzMTM5NCkiLCJcdTAxNGNlaSAoMTM5NFx1MjAxMzE0MjgpIiwiU2hcdTAxNGRjaFx1MDE0ZCAoMTQyOFx1MjAxMzE0MjkpIiwiRWlreVx1MDE0ZCAoMTQyOVx1MjAxMzE0NDEpIiwiS2FraXRzdSAoMTQ0MVx1MjAxMzE0NDQpIiwiQnVuXHUyMDE5YW4gKDE0NDRcdTIwMTMxNDQ5KSIs''@;'; put 'put ''IkhcdTAxNGR0b2t1ICgxNDQ5XHUyMDEzMTQ1MikiLCJLeVx1MDE0ZHRva3UgKDE0NTJcdTIwMTMxNDU1KSIsIktcdTAxNGRzaFx1MDE0ZCAoMTQ1NVx1MjAxMzE0NTcpIiwiQ2hcdTAxNGRyb2t1ICgxNDU3XHUyMDEzMTQ2MCkiLCJLYW5zaFx1MDE0ZCAoMTQ2MFx1MjAxMzE0NjYpIiwiQnVu''@;'; put 'put ''c2hcdTAxNGQgKDE0NjZcdTIwMTMxNDY3KSIsIlx1MDE0Y25pbiAoMTQ2N1x1MjAxMzE0NjkpIiwiQnVubWVpICgxNDY5XHUyMDEzMTQ4NykiLCJDaFx1MDE0ZGt5XHUwMTRkICgxNDg3XHUyMDEzMTQ4OSkiLCJFbnRva3UgKDE0ODlcdTIwMTMxNDkyKSIsIk1laVx1MDE0ZCAoMTQ5Mlx1MjAx''@;'; put 'put ''MzE1MDEpIiwiQnVua2kgKDE1MDFcdTIwMTMxNTA0KSIsIkVpc2hcdTAxNGQgKDE1MDRcdTIwMTMxNTIxKSIsIlRhaWVpICgxNTIxXHUyMDEzMTUyOCkiLCJLeVx1MDE0ZHJva3UgKDE1MjhcdTIwMTMxNTMyKSIsIlRlbmJ1biAoMTUzMlx1MjAxMzE1NTUpIiwiS1x1MDE0ZGppICgxNTU1XHUy''@;'; put 'put ''MDEzMTU1OCkiLCJFaXJva3UgKDE1NThcdTIwMTMxNTcwKSIsIkdlbmtpICgxNTcwXHUyMDEzMTU3MykiLCJUZW5zaFx1MDE0ZCAoMTU3M1x1MjAxMzE1OTIpIiwiQnVucm9rdSAoMTU5Mlx1MjAxMzE1OTYpIiwiS2VpY2hcdTAxNGQgKDE1OTZcdTIwMTMxNjE1KSIsIkdlbm5hICgxNjE1XHUy''@;'; put 'put ''MDEzMTYyNCkiLCJLYW5cdTIwMTllaSAoMTYyNFx1MjAxMzE2NDQpIiwiU2hcdTAxNGRobyAoMTY0NFx1MjAxMzE2NDgpIiwiS2VpYW4gKDE2NDhcdTIwMTMxNjUyKSIsIkpcdTAxNGRcdTAxNGQgKDE2NTJcdTIwMTMxNjU1KSIsIk1laXJla2kgKDE2NTVcdTIwMTMxNjU4KSIsIk1hbmppICgx''@;'; put 'put ''NjU4XHUyMDEzMTY2MSkiLCJLYW5idW4gKDE2NjFcdTIwMTMxNjczKSIsIkVucFx1MDE0ZCAoMTY3M1x1MjAxMzE2ODEpIiwiVGVubmEgKDE2ODFcdTIwMTMxNjg0KSIsIkpcdTAxNGRreVx1MDE0ZCAoMTY4NFx1MjAxMzE2ODgpIiwiR2Vucm9rdSAoMTY4OFx1MjAxMzE3MDQpIiwiSFx1MDE0''@;'; put 'put ''ZGVpICgxNzA0XHUyMDEzMTcxMSkiLCJTaFx1MDE0ZHRva3UgKDE3MTFcdTIwMTMxNzE2KSIsIkt5XHUwMTRkaFx1MDE0ZCAoMTcxNlx1MjAxMzE3MzYpIiwiR2VuYnVuICgxNzM2XHUyMDEzMTc0MSkiLCJLYW5wXHUwMTRkICgxNzQxXHUyMDEzMTc0NCkiLCJFbmt5XHUwMTRkICgxNzQ0XHUy''@;'; put 'put ''MDEzMTc0OCkiLCJLYW5cdTIwMTllbiAoMTc0OFx1MjAxMzE3NTEpIiwiSFx1MDE0ZHJla2kgKDE3NTFcdTIwMTMxNzY0KSIsIk1laXdhICgxNzY0XHUyMDEzMTc3MikiLCJBblx1MjAxOWVpICgxNzcyXHUyMDEzMTc4MSkiLCJUZW5tZWkgKDE3ODFcdTIwMTMxNzg5KSIsIkthbnNlaSAoMTc4''@;'; put 'put ''OVx1MjAxMzE4MDEpIiwiS3lcdTAxNGR3YSAoMTgwMVx1MjAxMzE4MDQpIiwiQnVua2EgKDE4MDRcdTIwMTMxODE4KSIsIkJ1bnNlaSAoMTgxOFx1MjAxMzE4MzApIiwiVGVucFx1MDE0ZCAoMTgzMFx1MjAxMzE4NDQpIiwiS1x1MDE0ZGthICgxODQ0XHUyMDEzMTg0OCkiLCJLYWVpICgxODQ4''@;'; put 'put ''XHUyMDEzMTg1NCkiLCJBbnNlaSAoMTg1NFx1MjAxMzE4NjApIiwiTWFuXHUyMDE5ZW4gKDE4NjBcdTIwMTMxODYxKSIsIkJ1bmt5XHUwMTZiICgxODYxXHUyMDEzMTg2NCkiLCJHZW5qaSAoMTg2NFx1MjAxMzE4NjUpIiwiS2VpXHUwMTRkICgxODY1XHUyMDEzMTg2OCkiLCJNZWlqaSIsIlRh''@;'; put 'put ''aXNoXHUwMTRkIiwiU2hcdTAxNGR3YSIsIkhlaXNlaSJdLCJsb25nIjpbIlRhaWthICg2NDVcdTIwMTM2NTApIiwiSGFrdWNoaSAoNjUwXHUyMDEzNjcxKSIsIkhha3VoXHUwMTRkICg2NzJcdTIwMTM2ODYpIiwiU2h1Y2hcdTAxNGQgKDY4Nlx1MjAxMzcwMSkiLCJUYWloXHUwMTRkICg3MDFc''@;'; put 'put ''dTIwMTM3MDQpIiwiS2VpdW4gKDcwNFx1MjAxMzcwOCkiLCJXYWRcdTAxNGQgKDcwOFx1MjAxMzcxNSkiLCJSZWlraSAoNzE1XHUyMDEzNzE3KSIsIllcdTAxNGRyXHUwMTRkICg3MTdcdTIwMTM3MjQpIiwiSmlua2kgKDcyNFx1MjAxMzcyOSkiLCJUZW5weVx1MDE0ZCAoNzI5XHUyMDEzNzQ5''@;'; put 'put ''KSIsIlRlbnB5XHUwMTRkLWthbXBcdTAxNGQgKDc0OS03NDkpIiwiVGVucHlcdTAxNGQtc2hcdTAxNGRoXHUwMTRkICg3NDktNzU3KSIsIlRlbnB5XHUwMTRkLWhcdTAxNGRqaSAoNzU3LTc2NSkiLCJUZW5weVx1MDE0ZC1qaW5nbyAoNzY1LTc2NykiLCJKaW5nby1rZWl1biAoNzY3LTc3MCki''@;'; put 'put ''LCJIXHUwMTRka2kgKDc3MFx1MjAxMzc4MCkiLCJUZW4tXHUwMTRkICg3ODEtNzgyKSIsIkVucnlha3UgKDc4Mlx1MjAxMzgwNikiLCJEYWlkXHUwMTRkICg4MDZcdTIwMTM4MTApIiwiS1x1MDE0ZG5pbiAoODEwXHUyMDEzODI0KSIsIlRlbmNoXHUwMTRkICg4MjRcdTIwMTM4MzQpIiwiSlx1''@;'; put 'put ''MDE0ZHdhICg4MzRcdTIwMTM4NDgpIiwiS2FqXHUwMTRkICg4NDhcdTIwMTM4NTEpIiwiTmluanUgKDg1MVx1MjAxMzg1NCkiLCJTYWlrXHUwMTRkICg4NTRcdTIwMTM4NTcpIiwiVGVuLWFuICg4NTctODU5KSIsIkpcdTAxNGRnYW4gKDg1OVx1MjAxMzg3NykiLCJHYW5neVx1MDE0ZCAoODc3''@;'; put 'put ''XHUyMDEzODg1KSIsIk5pbm5hICg4ODVcdTIwMTM4ODkpIiwiS2FucHlcdTAxNGQgKDg4OVx1MjAxMzg5OCkiLCJTaFx1MDE0ZHRhaSAoODk4XHUyMDEzOTAxKSIsIkVuZ2kgKDkwMVx1MjAxMzkyMykiLCJFbmNoXHUwMTRkICg5MjNcdTIwMTM5MzEpIiwiSlx1MDE0ZGhlaSAoOTMxXHUyMDEz''@;'; put 'put ''OTM4KSIsIlRlbmd5XHUwMTRkICg5MzhcdTIwMTM5NDcpIiwiVGVucnlha3UgKDk0N1x1MjAxMzk1NykiLCJUZW50b2t1ICg5NTdcdTIwMTM5NjEpIiwiXHUwMTRjd2EgKDk2MVx1MjAxMzk2NCkiLCJLXHUwMTRkaFx1MDE0ZCAoOTY0XHUyMDEzOTY4KSIsIkFubmEgKDk2OFx1MjAxMzk3MCki''@;'; put 'put ''LCJUZW5yb2t1ICg5NzBcdTIwMTM5NzMpIiwiVGVuXHUyMDE5ZW4gKDk3M1x1MjAxMzk3NikiLCJKXHUwMTRkZ2VuICg5NzZcdTIwMTM5NzgpIiwiVGVuZ2VuICg5NzhcdTIwMTM5ODMpIiwiRWlrYW4gKDk4M1x1MjAxMzk4NSkiLCJLYW5uYSAoOTg1XHUyMDEzOTg3KSIsIkVpZW4gKDk4N1x1''@;'; put 'put ''MjAxMzk4OSkiLCJFaXNvICg5ODlcdTIwMTM5OTApIiwiU2hcdTAxNGRyeWFrdSAoOTkwXHUyMDEzOTk1KSIsIkNoXHUwMTRkdG9rdSAoOTk1XHUyMDEzOTk5KSIsIkNoXHUwMTRkaFx1MDE0ZCAoOTk5XHUyMDEzMTAwNCkiLCJLYW5rXHUwMTRkICgxMDA0XHUyMDEzMTAxMikiLCJDaFx1MDE0''@;'; put 'put ''ZHdhICgxMDEyXHUyMDEzMTAxNykiLCJLYW5uaW4gKDEwMTdcdTIwMTMxMDIxKSIsIkppYW4gKDEwMjFcdTIwMTMxMDI0KSIsIk1hbmp1ICgxMDI0XHUyMDEzMTAyOCkiLCJDaFx1MDE0ZGdlbiAoMTAyOFx1MjAxMzEwMzcpIiwiQ2hcdTAxNGRyeWFrdSAoMTAzN1x1MjAxMzEwNDApIiwiQ2hc''@;'; put 'put ''dTAxNGRreVx1MDE2YiAoMTA0MFx1MjAxMzEwNDQpIiwiS2FudG9rdSAoMTA0NFx1MjAxMzEwNDYpIiwiRWlzaFx1MDE0ZCAoMTA0Nlx1MjAxMzEwNTMpIiwiVGVuZ2kgKDEwNTNcdTIwMTMxMDU4KSIsIktcdTAxNGRoZWkgKDEwNThcdTIwMTMxMDY1KSIsIkppcnlha3UgKDEwNjVcdTIwMTMx''@;'; put 'put ''MDY5KSIsIkVua3lcdTAxNmIgKDEwNjlcdTIwMTMxMDc0KSIsIlNoXHUwMTRkaG8gKDEwNzRcdTIwMTMxMDc3KSIsIlNoXHUwMTRkcnlha3UgKDEwNzdcdTIwMTMxMDgxKSIsIkVpaFx1MDE0ZCAoMTA4MVx1MjAxMzEwODQpIiwiXHUwMTRjdG9rdSAoMTA4NFx1MjAxMzEwODcpIiwiS2Fuamkg''@;'; put 'put ''KDEwODdcdTIwMTMxMDk0KSIsIkthaFx1MDE0ZCAoMTA5NFx1MjAxMzEwOTYpIiwiRWljaFx1MDE0ZCAoMTA5Nlx1MjAxMzEwOTcpIiwiSlx1MDE0ZHRva3UgKDEwOTdcdTIwMTMxMDk5KSIsIktcdTAxNGR3YSAoMTA5OVx1MjAxMzExMDQpIiwiQ2hcdTAxNGRqaSAoMTEwNFx1MjAxMzExMDYp''@;'; put 'put ''IiwiS2FzaFx1MDE0ZCAoMTEwNlx1MjAxMzExMDgpIiwiVGVubmluICgxMTA4XHUyMDEzMTExMCkiLCJUZW4tZWkgKDExMTAtMTExMykiLCJFaWt5XHUwMTZiICgxMTEzXHUyMDEzMTExOCkiLCJHZW5cdTIwMTllaSAoMTExOFx1MjAxMzExMjApIiwiSFx1MDE0ZGFuICgxMTIwXHUyMDEzMTEy''@;'; put 'put ''NCkiLCJUZW5qaSAoMTEyNFx1MjAxMzExMjYpIiwiRGFpamkgKDExMjZcdTIwMTMxMTMxKSIsIlRlbnNoXHUwMTRkICgxMTMxXHUyMDEzMTEzMikiLCJDaFx1MDE0ZHNoXHUwMTRkICgxMTMyXHUyMDEzMTEzNSkiLCJIXHUwMTRkZW4gKDExMzVcdTIwMTMxMTQxKSIsIkVpamkgKDExNDFcdTIw''@;'; put 'put ''MTMxMTQyKSIsIktcdTAxNGRqaSAoMTE0Mlx1MjAxMzExNDQpIiwiVGVuXHUyMDE5eVx1MDE0ZCAoMTE0NFx1MjAxMzExNDUpIiwiS3lcdTAxNmJhbiAoMTE0NVx1MjAxMzExNTEpIiwiTmlucGVpICgxMTUxXHUyMDEzMTE1NCkiLCJLeVx1MDE2Ymp1ICgxMTU0XHUyMDEzMTE1NikiLCJIXHUw''@;'; put 'put ''MTRkZ2VuICgxMTU2XHUyMDEzMTE1OSkiLCJIZWlqaSAoMTE1OVx1MjAxMzExNjApIiwiRWlyeWFrdSAoMTE2MFx1MjAxMzExNjEpIiwiXHUwMTRjaG8gKDExNjFcdTIwMTMxMTYzKSIsIkNoXHUwMTRka2FuICgxMTYzXHUyMDEzMTE2NSkiLCJFaW1hbiAoMTE2NVx1MjAxMzExNjYpIiwiTmlu''@;'; put 'put ''XHUyMDE5YW4gKDExNjZcdTIwMTMxMTY5KSIsIkthXHUwMTRkICgxMTY5XHUyMDEzMTE3MSkiLCJTaFx1MDE0ZGFuICgxMTcxXHUyMDEzMTE3NSkiLCJBbmdlbiAoMTE3NVx1MjAxMzExNzcpIiwiSmlzaFx1MDE0ZCAoMTE3N1x1MjAxMzExODEpIiwiWVx1MDE0ZHdhICgxMTgxXHUyMDEzMTE4''@;'; put 'put ''MikiLCJKdWVpICgxMTgyXHUyMDEzMTE4NCkiLCJHZW5yeWFrdSAoMTE4NFx1MjAxMzExODUpIiwiQnVuamkgKDExODVcdTIwMTMxMTkwKSIsIktlbmt5XHUwMTZiICgxMTkwXHUyMDEzMTE5OSkiLCJTaFx1MDE0ZGppICgxMTk5XHUyMDEzMTIwMSkiLCJLZW5uaW4gKDEyMDFcdTIwMTMxMjA0''@;'; put 'put ''KSIsIkdlbmt5XHUwMTZiICgxMjA0XHUyMDEzMTIwNikiLCJLZW5cdTIwMTllaSAoMTIwNlx1MjAxMzEyMDcpIiwiSlx1MDE0ZGdlbiAoMTIwN1x1MjAxMzEyMTEpIiwiS2Vucnlha3UgKDEyMTFcdTIwMTMxMjEzKSIsIktlbnBcdTAxNGQgKDEyMTNcdTIwMTMxMjE5KSIsIkpcdTAxNGRreVx1''@;'; put 'put ''MDE2YiAoMTIxOVx1MjAxMzEyMjIpIiwiSlx1MDE0ZFx1MDE0ZCAoMTIyMlx1MjAxMzEyMjQpIiwiR2VubmluICgxMjI0XHUyMDEzMTIyNSkiLCJLYXJva3UgKDEyMjVcdTIwMTMxMjI3KSIsIkFudGVpICgxMjI3XHUyMDEzMTIyOSkiLCJLYW5raSAoMTIyOVx1MjAxMzEyMzIpIiwiSlx1MDE0''@;'; put 'put ''ZGVpICgxMjMyXHUyMDEzMTIzMykiLCJUZW5wdWt1ICgxMjMzXHUyMDEzMTIzNCkiLCJCdW5yeWFrdSAoMTIzNFx1MjAxMzEyMzUpIiwiS2F0ZWkgKDEyMzVcdTIwMTMxMjM4KSIsIlJ5YWt1bmluICgxMjM4XHUyMDEzMTIzOSkiLCJFblx1MjAxOVx1MDE0ZCAoMTIzOVx1MjAxMzEyNDApIiwi''@;'; put 'put ''TmluamkgKDEyNDBcdTIwMTMxMjQzKSIsIkthbmdlbiAoMTI0M1x1MjAxMzEyNDcpIiwiSFx1MDE0ZGppICgxMjQ3XHUyMDEzMTI0OSkiLCJLZW5jaFx1MDE0ZCAoMTI0OVx1MjAxMzEyNTYpIiwiS1x1MDE0ZGdlbiAoMTI1Nlx1MjAxMzEyNTcpIiwiU2hcdTAxNGRrYSAoMTI1N1x1MjAxMzEy''@;'; put 'put ''NTkpIiwiU2hcdTAxNGRnZW4gKDEyNTlcdTIwMTMxMjYwKSIsIkJ1blx1MjAxOVx1MDE0ZCAoMTI2MFx1MjAxMzEyNjEpIiwiS1x1MDE0ZGNoXHUwMTRkICgxMjYxXHUyMDEzMTI2NCkiLCJCdW5cdTIwMTllaSAoMTI2NFx1MjAxMzEyNzUpIiwiS2VuamkgKDEyNzVcdTIwMTMxMjc4KSIsIktc''@;'; put 'put ''dTAxNGRhbiAoMTI3OFx1MjAxMzEyODgpIiwiU2hcdTAxNGRcdTAxNGQgKDEyODhcdTIwMTMxMjkzKSIsIkVpbmluICgxMjkzXHUyMDEzMTI5OSkiLCJTaFx1MDE0ZGFuICgxMjk5XHUyMDEzMTMwMikiLCJLZW5nZW4gKDEzMDJcdTIwMTMxMzAzKSIsIkthZ2VuICgxMzAzXHUyMDEzMTMwNiki''@;'; put 'put ''LCJUb2t1amkgKDEzMDZcdTIwMTMxMzA4KSIsIkVua3lcdTAxNGQgKDEzMDhcdTIwMTMxMzExKSIsIlx1MDE0Y2NoXHUwMTRkICgxMzExXHUyMDEzMTMxMikiLCJTaFx1MDE0ZHdhICgxMzEyXHUyMDEzMTMxNykiLCJCdW5wXHUwMTRkICgxMzE3XHUyMDEzMTMxOSkiLCJHZW5cdTAxNGQgKDEz''@;'; put 'put ''MTlcdTIwMTMxMzIxKSIsIkdlbmtcdTAxNGQgKDEzMjFcdTIwMTMxMzI0KSIsIlNoXHUwMTRkY2hcdTAxNmIgKDEzMjRcdTIwMTMxMzI2KSIsIkthcnlha3UgKDEzMjZcdTIwMTMxMzI5KSIsIkdlbnRva3UgKDEzMjlcdTIwMTMxMzMxKSIsIkdlbmtcdTAxNGQgKDEzMzFcdTIwMTMxMzM0KSIs''@;'; put 'put ''Iktlbm11ICgxMzM0XHUyMDEzMTMzNikiLCJFbmdlbiAoMTMzNlx1MjAxMzEzNDApIiwiS1x1MDE0ZGtva3UgKDEzNDBcdTIwMTMxMzQ2KSIsIlNoXHUwMTRkaGVpICgxMzQ2XHUyMDEzMTM3MCkiLCJLZW50b2t1ICgxMzcwXHUyMDEzMTM3MikiLCJCdW5jaFx1MDE2YiAoMTM3Mlx1MjAxMzEz''@;'; put 'put ''NzUpIiwiVGVuanUgKDEzNzVcdTIwMTMxMzc5KSIsIktcdTAxNGRyeWFrdSAoMTM3OVx1MjAxMzEzODEpIiwiS1x1MDE0ZHdhICgxMzgxXHUyMDEzMTM4NCkiLCJHZW5jaFx1MDE2YiAoMTM4NFx1MjAxMzEzOTIpIiwiTWVpdG9rdSAoMTM4NFx1MjAxMzEzODcpIiwiS2FrZWkgKDEzODdcdTIw''@;'; put 'put ''MTMxMzg5KSIsIktcdTAxNGRcdTAxNGQgKDEzODlcdTIwMTMxMzkwKSIsIk1laXRva3UgKDEzOTBcdTIwMTMxMzk0KSIsIlx1MDE0Y2VpICgxMzk0XHUyMDEzMTQyOCkiLCJTaFx1MDE0ZGNoXHUwMTRkICgxNDI4XHUyMDEzMTQyOSkiLCJFaWt5XHUwMTRkICgxNDI5XHUyMDEzMTQ0MSkiLCJL''@;'; put 'put ''YWtpdHN1ICgxNDQxXHUyMDEzMTQ0NCkiLCJCdW5cdTIwMTlhbiAoMTQ0NFx1MjAxMzE0NDkpIiwiSFx1MDE0ZHRva3UgKDE0NDlcdTIwMTMxNDUyKSIsIkt5XHUwMTRkdG9rdSAoMTQ1Mlx1MjAxMzE0NTUpIiwiS1x1MDE0ZHNoXHUwMTRkICgxNDU1XHUyMDEzMTQ1NykiLCJDaFx1MDE0ZHJv''@;'; put 'put ''a3UgKDE0NTdcdTIwMTMxNDYwKSIsIkthbnNoXHUwMTRkICgxNDYwXHUyMDEzMTQ2NikiLCJCdW5zaFx1MDE0ZCAoMTQ2Nlx1MjAxMzE0NjcpIiwiXHUwMTRjbmluICgxNDY3XHUyMDEzMTQ2OSkiLCJCdW5tZWkgKDE0NjlcdTIwMTMxNDg3KSIsIkNoXHUwMTRka3lcdTAxNGQgKDE0ODdcdTIw''@;'; put 'put ''MTMxNDg5KSIsIkVudG9rdSAoMTQ4OVx1MjAxMzE0OTIpIiwiTWVpXHUwMTRkICgxNDkyXHUyMDEzMTUwMSkiLCJCdW5raSAoMTUwMVx1MjAxMzE1MDQpIiwiRWlzaFx1MDE0ZCAoMTUwNFx1MjAxMzE1MjEpIiwiVGFpZWkgKDE1MjFcdTIwMTMxNTI4KSIsIkt5XHUwMTRkcm9rdSAoMTUyOFx1''@;'; put 'put ''MjAxMzE1MzIpIiwiVGVuYnVuICgxNTMyXHUyMDEzMTU1NSkiLCJLXHUwMTRkamkgKDE1NTVcdTIwMTMxNTU4KSIsIkVpcm9rdSAoMTU1OFx1MjAxMzE1NzApIiwiR2Vua2kgKDE1NzBcdTIwMTMxNTczKSIsIlRlbnNoXHUwMTRkICgxNTczXHUyMDEzMTU5MikiLCJCdW5yb2t1ICgxNTkyXHUy''@;'; put 'put ''MDEzMTU5NikiLCJLZWljaFx1MDE0ZCAoMTU5Nlx1MjAxMzE2MTUpIiwiR2VubmEgKDE2MTVcdTIwMTMxNjI0KSIsIkthblx1MjAxOWVpICgxNjI0XHUyMDEzMTY0NCkiLCJTaFx1MDE0ZGhvICgxNjQ0XHUyMDEzMTY0OCkiLCJLZWlhbiAoMTY0OFx1MjAxMzE2NTIpIiwiSlx1MDE0ZFx1MDE0''@;'; put 'put ''ZCAoMTY1Mlx1MjAxMzE2NTUpIiwiTWVpcmVraSAoMTY1NVx1MjAxMzE2NTgpIiwiTWFuamkgKDE2NThcdTIwMTMxNjYxKSIsIkthbmJ1biAoMTY2MVx1MjAxMzE2NzMpIiwiRW5wXHUwMTRkICgxNjczXHUyMDEzMTY4MSkiLCJUZW5uYSAoMTY4MVx1MjAxMzE2ODQpIiwiSlx1MDE0ZGt5XHUw''@;'; put 'put ''MTRkICgxNjg0XHUyMDEzMTY4OCkiLCJHZW5yb2t1ICgxNjg4XHUyMDEzMTcwNCkiLCJIXHUwMTRkZWkgKDE3MDRcdTIwMTMxNzExKSIsIlNoXHUwMTRkdG9rdSAoMTcxMVx1MjAxMzE3MTYpIiwiS3lcdTAxNGRoXHUwMTRkICgxNzE2XHUyMDEzMTczNikiLCJHZW5idW4gKDE3MzZcdTIwMTMx''@;'; put 'put ''NzQxKSIsIkthbnBcdTAxNGQgKDE3NDFcdTIwMTMxNzQ0KSIsIkVua3lcdTAxNGQgKDE3NDRcdTIwMTMxNzQ4KSIsIkthblx1MjAxOWVuICgxNzQ4XHUyMDEzMTc1MSkiLCJIXHUwMTRkcmVraSAoMTc1MVx1MjAxMzE3NjQpIiwiTWVpd2EgKDE3NjRcdTIwMTMxNzcyKSIsIkFuXHUyMDE5ZWkg''@;'; put 'put ''KDE3NzJcdTIwMTMxNzgxKSIsIlRlbm1laSAoMTc4MVx1MjAxMzE3ODkpIiwiS2Fuc2VpICgxNzg5XHUyMDEzMTgwMSkiLCJLeVx1MDE0ZHdhICgxODAxXHUyMDEzMTgwNCkiLCJCdW5rYSAoMTgwNFx1MjAxMzE4MTgpIiwiQnVuc2VpICgxODE4XHUyMDEzMTgzMCkiLCJUZW5wXHUwMTRkICgx''@;'; put 'put ''ODMwXHUyMDEzMTg0NCkiLCJLXHUwMTRka2EgKDE4NDRcdTIwMTMxODQ4KSIsIkthZWkgKDE4NDhcdTIwMTMxODU0KSIsIkFuc2VpICgxODU0XHUyMDEzMTg2MCkiLCJNYW5cdTIwMTllbiAoMTg2MFx1MjAxMzE4NjEpIiwiQnVua3lcdTAxNmIgKDE4NjFcdTIwMTMxODY0KSIsIkdlbmppICgx''@;'; put 'put ''ODY0XHUyMDEzMTg2NSkiLCJLZWlcdTAxNGQgKDE4NjVcdTIwMTMxODY4KSIsIk1laWppIiwiVGFpc2hcdTAxNGQiLCJTaFx1MDE0ZHdhIiwiSGVpc2VpIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJwZXJzaWFuIjp7Im1vbnRocyI6eyJuYXJyb3ciOlsiMSIsIjIi''@;'; put 'put ''LCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIl0sInNob3J0IjpbIkZhcnZhcmRpbiIsIk9yZGliZWhlc2h0IiwiS2hvcmRhZCIsIlRpciIsIk1vcmRhZCIsIlNoYWhyaXZhciIsIk1laHIiLCJBYmFuIiwiQXphciIsIkRleSIsIkJhaG1hbiIsIkVzZmFuZCJdLCJs''@;'; put 'put ''b25nIjpbIkZhcnZhcmRpbiIsIk9yZGliZWhlc2h0IiwiS2hvcmRhZCIsIlRpciIsIk1vcmRhZCIsIlNoYWhyaXZhciIsIk1laHIiLCJBYmFuIiwiQXphciIsIkRleSIsIkJhaG1hbiIsIkVzZmFuZCJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJz''@;'; put 'put ''aG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJyb3ciOlsiQVAiXSwic2hvcnQiOlsi''@;'; put 'put ''QVAiXSwibG9uZyI6WyJBUCJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwicm9jIjp7Im1vbnRocyI6eyJuYXJyb3ciOlsiSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0sInNob3J0IjpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIs''@;'; put 'put ''Ik1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLCJsb25nIjpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVy''@;'; put 'put ''Il19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZy''@;'; put 'put ''aWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJCZWZvcmUgUi5PLkMuIiwiTWluZ3VvIl0sInNob3J0IjpbIkJlZm9yZSBSLk8uQy4iLCJNaW5ndW8iXSwibG9uZyI6WyJCZWZvcmUgUi5PLkMuIiwiTWluZ3VvIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBN''@;'; put 'put ''In19fX0sIm51bWJlciI6eyJudSI6WyJsYXRuIl0sInBhdHRlcm5zIjp7ImRlY2ltYWwiOnsicG9zaXRpdmVQYXR0ZXJuIjoie251bWJlcn0iLCJuZWdhdGl2ZVBhdHRlcm4iOiJ7bWludXNTaWdufXtudW1iZXJ9In0sImN1cnJlbmN5Ijp7InBvc2l0aXZlUGF0dGVybiI6IntjdXJyZW5jeX17''@;'; put 'put ''bnVtYmVyfSIsIm5lZ2F0aXZlUGF0dGVybiI6InttaW51c1NpZ259e2N1cnJlbmN5fXtudW1iZXJ9In0sInBlcmNlbnQiOnsicG9zaXRpdmVQYXR0ZXJuIjoie251bWJlcn17cGVyY2VudFNpZ259IiwibmVnYXRpdmVQYXR0ZXJuIjoie21pbnVzU2lnbn17bnVtYmVyfXtwZXJjZW50U2lnbn0i''@;'; put 'put ''fX0sInN5bWJvbHMiOnsibGF0biI6eyJkZWNpbWFsIjoiLiIsImdyb3VwIjoiLCIsIm5hbiI6Ik5hTiIsInBsdXNTaWduIjoiKyIsIm1pbnVzU2lnbiI6Ii0iLCJwZXJjZW50U2lnbiI6IiUiLCJpbmZpbml0eSI6Ilx1MjIxZSJ9fSwiY3VycmVuY2llcyI6eyJBVUQiOiJBJCIsIkJSTCI6IlIk''@;'; put 'put ''IiwiQ0FEIjoiQ0EkIiwiQ05ZIjoiQ05ceGE1IiwiRVVSIjoiXHUyMGFjIiwiR0JQIjoiXHhhMyIsIkhLRCI6IkhLJCIsIklMUyI6Ilx1MjBhYSIsIklOUiI6Ilx1MjBiOSIsIkpQWSI6Ilx4YTUiLCJLUlciOiJcdTIwYTkiLCJNWE4iOiJNWCQiLCJOWkQiOiJOWiQiLCJUV0QiOiJOVCQiLCJV''@;'; put 'put ''U0QiOiIkIiwiVk5EIjoiXHUyMGFiIiwiWEFGIjoiRkNGQSIsIlhDRCI6IkVDJCIsIlhPRiI6IkNGQSIsIlhQRiI6IkNGUEYifX19Jyl9LDgyNTg2OihjLGYsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPXQoODQ3MTkpLHM9dCg2MzM4Nyksbz10KDQyMjgpLHU9dCg0MzMwNSksbD10KDc5NDQ4KSxp''@;'; put 'put ''PXQoMTU1MzgpLHY9KHQoNjc1MjYpLlJlZmxlY3R8fHt9KS5jb25zdHJ1Y3QscD1sKGZ1bmN0aW9uKCl7ZnVuY3Rpb24geSgpe31yZXR1cm4hKHYoZnVuY3Rpb24oKXt9LFtdLHkpaW5zdGFuY2VvZiB5KX0pLGQ9IWwoZnVuY3Rpb24oKXt2KGZ1bmN0aW9uKCl7fSl9KTtuKG4uUytuLkYqKHB8''@;'; put 'put ''fGQpLCJSZWZsZWN0Iix7Y29uc3RydWN0OmZ1bmN0aW9uKEUsZyl7cyhFKSxvKGcpO3ZhciBEPWFyZ3VtZW50cy5sZW5ndGg8Mz9FOnMoYXJndW1lbnRzWzJdKTtpZihkJiYhcClyZXR1cm4gdihFLGcsRCk7aWYoRT09RCl7c3dpdGNoKGcubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyBFO2Nh''@;'; put 'put ''c2UgMTpyZXR1cm4gbmV3IEUoZ1swXSk7Y2FzZSAyOnJldHVybiBuZXcgRShnWzBdLGdbMV0pO2Nhc2UgMzpyZXR1cm4gbmV3IEUoZ1swXSxnWzFdLGdbMl0pO2Nhc2UgNDpyZXR1cm4gbmV3IEUoZ1swXSxnWzFdLGdbMl0sZ1szXSl9dmFyIEY9W251bGxdO3JldHVybiBGLnB1c2guYXBwbHko''@;'; put 'put ''RixnKSxuZXcoaS5hcHBseShFLEYpKX12YXIgeD1ELnByb3RvdHlwZSxBPWUodSh4KT94Ok9iamVjdC5wcm90b3R5cGUpLGs9RnVuY3Rpb24uYXBwbHkuY2FsbChFLEEsZyk7cmV0dXJuIHUoayk/azpBfX0pfSw4MjczODooYyxmLHQpPT57dmFyIG49dCg2NzUyNikucGFyc2VJbnQsZT10KDQw''@;'; put 'put ''NjI5KS50cmltLHM9dCg3ODQ1MSksbz0vXlstK10/MFt4WF0vO2MuZXhwb3J0cz04IT09bihzKyIwOCIpfHwyMiE9PW4ocysiMHgxNiIpP2Z1bmN0aW9uKGwsaSl7dmFyIHY9ZShTdHJpbmcobCksMyk7cmV0dXJuIG4odixpPj4+MHx8KG8udGVzdCh2KT8xNjoxMCkpfTpufSw4Mjk3NTooYyxm''@;'; put 'put ''LHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTEyMTIpKCEwKTt0KDk4MTc1KShTdHJpbmcsIlN0cmluZyIsZnVuY3Rpb24oZSl7dGhpcy5fdD1TdHJpbmcoZSksdGhpcy5faT0wfSxmdW5jdGlvbigpe3ZhciBvLGU9dGhpcy5fdCxzPXRoaXMuX2k7cmV0dXJuIHM+PWUubGVuZ3RoP3t2YWx1''@;'; put 'put ''ZTp2b2lkIDAsZG9uZTohMH06KG89bihlLHMpLHRoaXMuX2krPW8ubGVuZ3RoLHt2YWx1ZTpvLGRvbmU6ITF9KX0pfSw4MzA0ODooYyxmLHQpPT57dmFyIG49dCg0MzMwNSk7Yy5leHBvcnRzPWZ1bmN0aW9uKGUscyl7aWYoIW4oZSkpcmV0dXJuIGU7dmFyIG8sdTtpZihzJiYiZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2Yobz1lLnRvU3RyaW5nKSYmIW4odT1vLmNhbGwoZSkpfHwiZnVuY3Rpb24iPT10eXBlb2Yobz1lLnZhbHVlT2YpJiYhbih1PW8uY2FsbChlKSl8fCFzJiYiZnVuY3Rpb24iPT10eXBlb2Yobz1lLnRvU3RyaW5nKSYmIW4odT1vLmNhbGwoZSkpKXJldHVybiB1O3Rocm93IFR5cGVF''@;'; put 'put ''cnJvcigiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlIil9fSw4MzgzODooYyxmLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoMTM5ODEpLGU9dCgyMjAyMCkscz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcj9T''@;'; put 'put ''eW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpOm51bGw7Zi5CdWZmZXI9aSxmLlNsb3dCdWZmZXI9ZnVuY3Rpb24gayhoKXtyZXR1cm4raCE9aCYmKGg9MCksaS5hbGxvYygraCl9LGYuSU5TUEVDVF9NQVhfQllURVM9NTA7dmFyIG89MjE0NzQ4MzY0NztmdW5jdGlvbiBs''@;'; put 'put ''KGgpe2lmKGg+byl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK2grJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpO3ZhciByPW5ldyBVaW50OEFycmF5KGgpO3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YocixpLnByb3RvdHlwZSkscn1mdW5jdGlvbiBpKGgs''@;'; put 'put ''cixhKXtpZigibnVtYmVyIj09dHlwZW9mIGgpe2lmKCJzdHJpbmciPT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4geShoKX1yZXR1cm4gdihoLHIs''@;'; put 'put ''YSl9ZnVuY3Rpb24gdihoLHIsYSl7aWYoInN0cmluZyI9PXR5cGVvZiBoKXJldHVybiBmdW5jdGlvbiBFKGgscil7aWYoKCJzdHJpbmciIT10eXBlb2Ygcnx8IiI9PT1yKSYmKHI9InV0ZjgiKSwhaS5pc0VuY29kaW5nKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6''@;'; put 'put ''ICIrcik7dmFyIGE9MHxQKGgsciksbT1sKGEpLHc9bS53cml0ZShoLHIpO3JldHVybiB3IT09YSYmKG09bS5zbGljZSgwLHcpKSxtfShoLHIpO2lmKEFycmF5QnVmZmVyLmlzVmlldyhoKSlyZXR1cm4gZnVuY3Rpb24gRChoKXtpZihubihoLFVpbnQ4QXJyYXkpKXt2YXIgcj1uZXcgVWludDhB''@;'; put 'put ''cnJheShoKTtyZXR1cm4gRihyLmJ1ZmZlcixyLmJ5dGVPZmZzZXQsci5ieXRlTGVuZ3RoKX1yZXR1cm4gZyhoKX0oaCk7aWYobnVsbD09aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZm''@;'; put 'put ''ZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBoKTtpZihubihoLEFycmF5QnVmZmVyKXx8aCYmbm4oaC5idWZmZXIsQXJyYXlCdWZmZXIpfHx0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI8InUiJiYobm4oaCxTaGFyZWRBcnJheUJ1ZmZlcil8''@;'; put 'put ''fGgmJm5uKGguYnVmZmVyLFNoYXJlZEFycmF5QnVmZmVyKSkpcmV0dXJuIEYoaCxyLGEpO2lmKCJudW1iZXIiPT10eXBlb2YgaCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXIn''@;'; put 'put ''KTt2YXIgbT1oLnZhbHVlT2YmJmgudmFsdWVPZigpO2lmKG51bGwhPW0mJm0hPT1oKXJldHVybiBpLmZyb20obSxyLGEpO3ZhciB3PWZ1bmN0aW9uIHgoaCl7aWYoaS5pc0J1ZmZlcihoKSl7dmFyIHI9MHxBKGgubGVuZ3RoKSxhPWwocik7cmV0dXJuIDA9PT1hLmxlbmd0aHx8aC5jb3B5KGEs''@;'; put 'put ''MCwwLHIpLGF9cmV0dXJuIHZvaWQgMCE9PWgubGVuZ3RoPyJudW1iZXIiIT10eXBlb2YgaC5sZW5ndGh8fHluKGgubGVuZ3RoKT9sKDApOmcoaCk6IkJ1ZmZlciI9PT1oLnR5cGUmJkFycmF5LmlzQXJyYXkoaC5kYXRhKT9nKGguZGF0YSk6dm9pZCAwfShoKTtpZih3KXJldHVybiB3O2lmKHR5''@;'; put 'put ''cGVvZiBTeW1ib2w8InUiJiZudWxsIT1TeW1ib2wudG9QcmltaXRpdmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBoW1N5bWJvbC50b1ByaW1pdGl2ZV0pcmV0dXJuIGkuZnJvbShoW1N5bWJvbC50b1ByaW1pdGl2ZV0oInN0cmluZyIpLHIsYSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0''@;'; put 'put ''IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgaCl9ZnVuY3Rpb24gcChoKXtpZigibnVtYmVyIiE9dHlwZW9mIGgpdGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKTtpZihoPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJytoKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKX1mdW5jdGlvbiB5KGgpe3JldHVybiBwKGgpLGwoaDwwPzA6MHxBKGgp''@;'; put 'put ''KX1mdW5jdGlvbiBnKGgpe2Zvcih2YXIgcj1oLmxlbmd0aDwwPzA6MHxBKGgubGVuZ3RoKSxhPWwociksbT0wO208cjttKz0xKWFbbV09MjU1JmhbbV07cmV0dXJuIGF9ZnVuY3Rpb24gRihoLHIsYSl7aWYocjwwfHxoLmJ5dGVMZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcignIm9mZnNl''@;'; put 'put ''dCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7aWYoaC5ieXRlTGVuZ3RoPHIrKGF8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCcibGVuZ3RoIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTt2YXIgbTtyZXR1cm4gbT12b2lkIDA9PT1yJiZ2b2lkIDA9PT1hP25ldyBVaW50''@;'; put 'put ''OEFycmF5KGgpOnZvaWQgMD09PWE/bmV3IFVpbnQ4QXJyYXkoaCxyKTpuZXcgVWludDhBcnJheShoLHIsYSksT2JqZWN0LnNldFByb3RvdHlwZU9mKG0saS5wcm90b3R5cGUpLG19ZnVuY3Rpb24gQShoKXtpZihoPj1vKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRl''@;'; put 'put ''IEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IitvLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8aH1mdW5jdGlvbiBQKGgscil7aWYoaS5pc0J1ZmZlcihoKSlyZXR1cm4gaC5sZW5ndGg7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KGgpfHxubihoLEFycmF5QnVmZmVy''@;'; put 'put ''KSlyZXR1cm4gaC5ieXRlTGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgaCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgaCk7''@;'; put 'put ''dmFyIGE9aC5sZW5ndGgsbT1hcmd1bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCFtJiYwPT09YSlyZXR1cm4gMDtmb3IodmFyIHc9ITE7Oylzd2l0Y2gocil7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gYTtjYXNlInV0ZjgiOmNhc2Ui''@;'; put 'put ''dXRmLTgiOnJldHVybiBZdChoKS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKmE7Y2FzZSJoZXgiOnJldHVybiBhPj4+MTtjYXNlImJhc2U2NCI6cmV0dXJuIGhuKGgpLmxlbmd0aDtkZWZhdWx0OmlmKHcpcmV0dXJu''@;'; put 'put ''IG0/LTE6WXQoaCkubGVuZ3RoO3I9KCIiK3IpLnRvTG93ZXJDYXNlKCksdz0hMH19ZnVuY3Rpb24gTShoLHIsYSl7dmFyIG09ITE7aWYoKHZvaWQgMD09PXJ8fHI8MCkmJihyPTApLHI+dGhpcy5sZW5ndGh8fCgodm9pZCAwPT09YXx8YT50aGlzLmxlbmd0aCkmJihhPXRoaXMubGVuZ3RoKSxh''@;'; put 'put ''PD0wKXx8KGE+Pj49MCk8PShyPj4+PTApKXJldHVybiIiO2ZvcihofHwoaD0idXRmOCIpOzspc3dpdGNoKGgpe2Nhc2UiaGV4IjpyZXR1cm4gZHQodGhpcyxyLGEpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIHEodGhpcyxyLGEpO2Nhc2UiYXNjaWkiOnJldHVybiBWKHRoaXMscixh''@;'; put 'put ''KTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBsdCh0aGlzLHIsYSk7Y2FzZSJiYXNlNjQiOnJldHVybiBtdCh0aGlzLHIsYSk7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBDdCh0aGlzLHIsYSk7ZGVmYXVsdDppZiht''@;'; put 'put ''KXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIraCk7aD0oaCsiIikudG9Mb3dlckNhc2UoKSxtPSEwfX1mdW5jdGlvbiBUKGgscixhKXt2YXIgbT1oW3JdO2hbcl09aFthXSxoW2FdPW19ZnVuY3Rpb24gYihoLHIsYSxtLHcpe2lmKDA9PT1oLmxlbmd0aClyZXR1cm4t''@;'; put 'put ''MTtpZigic3RyaW5nIj09dHlwZW9mIGE/KG09YSxhPTApOmE+MjE0NzQ4MzY0Nz9hPTIxNDc0ODM2NDc6YTwtMjE0NzQ4MzY0OCYmKGE9LTIxNDc0ODM2NDgpLHluKGE9K2EpJiYoYT13PzA6aC5sZW5ndGgtMSksYTwwJiYoYT1oLmxlbmd0aCthKSxhPj1oLmxlbmd0aCl7aWYodylyZXR1cm4t''@;'; put 'put ''MTthPWgubGVuZ3RoLTF9ZWxzZSBpZihhPDApe2lmKCF3KXJldHVybi0xO2E9MH1pZigic3RyaW5nIj09dHlwZW9mIHImJihyPWkuZnJvbShyLG0pKSxpLmlzQnVmZmVyKHIpKXJldHVybiAwPT09ci5sZW5ndGg/LTE6TChoLHIsYSxtLHcpO2lmKCJudW1iZXIiPT10eXBlb2YgcilyZXR1cm4g''@;'; put 'put ''ciY9MjU1LCJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP3c/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGgscixhKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGgscixhKTpMKGgsW3JdLGEsbSx3KTt0aHJvdyBu''@;'; put 'put ''ZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBMKGgscixhLG0sdyl7dmFyIEgsSz0xLCQ9aC5sZW5ndGgsRHQ9ci5sZW5ndGg7aWYodm9pZCAwIT09bSYmKCJ1Y3MyIj09PShtPVN0cmluZyhtKS50b0xvd2VyQ2FzZSgpKXx8InVj''@;'; put 'put ''cy0yIj09PW18fCJ1dGYxNmxlIj09PW18fCJ1dGYtMTZsZSI9PT1tKSl7aWYoaC5sZW5ndGg8Mnx8ci5sZW5ndGg8MilyZXR1cm4tMTtLPTIsJC89MixEdC89MixhLz0yfWZ1bmN0aW9uIF8ocXQscm4pe3JldHVybiAxPT09Sz9xdFtybl06cXQucmVhZFVJbnQxNkJFKHJuKkspfWlmKHcpe3Zh''@;'; put 'put ''ciBRPS0xO2ZvcihIPWE7SDwkO0grKylpZihfKGgsSCk9PT1fKHIsLTE9PT1RPzA6SC1RKSl7aWYoLTE9PT1RJiYoUT1IKSxILVErMT09PUR0KXJldHVybiBRKkt9ZWxzZS0xIT09USYmKEgtPUgtUSksUT0tMX1lbHNlIGZvcihhK0R0PiQmJihhPSQtRHQpLEg9YTtIPj0wO0gtLSl7Zm9yKHZh''@;'; put 'put ''ciBpdD0hMCx6dD0wO3p0PER0O3p0KyspaWYoXyhoLEgrenQpIT09XyhyLHp0KSl7aXQ9ITE7YnJlYWt9aWYoaXQpcmV0dXJuIEh9cmV0dXJuLTF9ZnVuY3Rpb24gVShoLHIsYSxtKXthPU51bWJlcihhKXx8MDt2YXIgdz1oLmxlbmd0aC1hO20/KG09TnVtYmVyKG0pKT53JiYobT13KTptPXc7''@;'; put 'put ''dmFyIEs9ci5sZW5ndGg7bT5LLzImJihtPUsvMik7Zm9yKHZhciAkPTA7JDxtOysrJCl7dmFyIER0PXBhcnNlSW50KHIuc3Vic3RyKDIqJCwyKSwxNik7aWYoeW4oRHQpKXJldHVybiAkO2hbYSskXT1EdH1yZXR1cm4gJH1mdW5jdGlvbiBaKGgscixhLG0pe3JldHVybiBvbihZdChyLGgubGVu''@;'; put 'put ''Z3RoLWEpLGgsYSxtKX1mdW5jdGlvbiBudChoLHIsYSxtKXtyZXR1cm4gb24oZnVuY3Rpb24gcG4oaCl7Zm9yKHZhciByPVtdLGE9MDthPGgubGVuZ3RoOysrYSlyLnB1c2goMjU1JmguY2hhckNvZGVBdChhKSk7cmV0dXJuIHJ9KHIpLGgsYSxtKX1mdW5jdGlvbiB0dChoLHIsYSxtKXtyZXR1''@;'; put 'put ''cm4gb24oaG4ociksaCxhLG0pfWZ1bmN0aW9uIHl0KGgscixhLG0pe3JldHVybiBvbihmdW5jdGlvbiB4bihoLHIpe2Zvcih2YXIgYSxtLEs9W10sJD0wOyQ8aC5sZW5ndGgmJiEoKHItPTIpPDApOysrJCltPShhPWguY2hhckNvZGVBdCgkKSk+PjgsSy5wdXNoKGElMjU2KSxLLnB1c2gobSk7''@;'; put 'put ''cmV0dXJuIEt9KHIsaC5sZW5ndGgtYSksaCxhLG0pfWZ1bmN0aW9uIG10KGgscixhKXtyZXR1cm4gbi5mcm9tQnl0ZUFycmF5KDA9PT1yJiZhPT09aC5sZW5ndGg/aDpoLnNsaWNlKHIsYSkpfWZ1bmN0aW9uIHEoaCxyLGEpe2E9TWF0aC5taW4oaC5sZW5ndGgsYSk7Zm9yKHZhciBtPVtdLHc9''@;'; put 'put ''cjt3PGE7KXt2YXIgXyxILFEsaXQsSz1oW3ddLCQ9bnVsbCxEdD1LPjIzOT80Oks+MjIzPzM6Sz4xOTE/MjoxO2lmKHcrRHQ8PWEpc3dpdGNoKER0KXtjYXNlIDE6SzwxMjgmJigkPUspO2JyZWFrO2Nhc2UgMjoxMjg9PSgxOTImKF89aFt3KzFdKSkmJihpdD0oMzEmSyk8PDZ8NjMmXyk+MTI3''@;'; put 'put ''JiYoJD1pdCk7YnJlYWs7Y2FzZSAzOkg9aFt3KzJdLDEyOD09KDE5MiYoXz1oW3crMV0pKSYmMTI4PT0oMTkyJkgpJiYoaXQ9KDE1JkspPDwxMnwoNjMmXyk8PDZ8NjMmSCk+MjA0NyYmKGl0PDU1Mjk2fHxpdD41NzM0MykmJigkPWl0KTticmVhaztjYXNlIDQ6SD1oW3crMl0sUT1oW3crM10s''@;'; put 'put ''MTI4PT0oMTkyJihfPWhbdysxXSkpJiYxMjg9PSgxOTImSCkmJjEyOD09KDE5MiZRKSYmKGl0PSgxNSZLKTw8MTh8KDYzJl8pPDwxMnwoNjMmSCk8PDZ8NjMmUSk+NjU1MzUmJml0PDExMTQxMTImJigkPWl0KX1udWxsPT09JD8oJD02NTUzMyxEdD0xKTokPjY1NTM1JiYobS5wdXNoKCgkLT02''@;'; put 'put ''NTUzNik+Pj4xMCYxMDIzfDU1Mjk2KSwkPTU2MzIwfDEwMjMmJCksbS5wdXNoKCQpLHcrPUR0fXJldHVybiBmdW5jdGlvbiBldChoKXt2YXIgcj1oLmxlbmd0aDtpZihyPD1YKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxoKTtmb3IodmFyIGE9IiIsbT0wO208cjsp''@;'; put 'put ''YSs9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsaC5zbGljZShtLG0rPVgpKTtyZXR1cm4gYX0obSl9Zi5rTWF4TGVuZ3RoPW8sIShpLlRZUEVEX0FSUkFZX1NVUFBPUlQ9ZnVuY3Rpb24gdSgpe3RyeXt2YXIgaD1uZXcgVWludDhBcnJheSgxKSxyPXtmb286ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gNDJ9fTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHIsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihoLHIpLDQyPT09aC5mb28oKX1jYXRjaHtyZXR1cm4hMX19KCkpJiZ0eXBlb2YgY29uc29sZTwidSImJiJmdW5jdGlvbiI9PXR5cGVvZiBj''@;'; put 'put ''b25zb2xlLmVycm9yJiZjb25zb2xlLmVycm9yKCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3Vw''@;'; put 'put ''cG9ydC4iKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaS5wcm90b3R5cGUsInBhcmVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoaS5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5idWZmZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGkucHJvdG90eXBlLCJvZmZzZXQi''@;'; put 'put ''LHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKGkuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnl0ZU9mZnNldH19KSxpLnBvb2xTaXplPTgxOTIsaS5mcm9tPWZ1bmN0aW9uKGgscixhKXtyZXR1cm4gdihoLHIsYSl9LE9iamVjdC5zZXRQcm90b3R5cGVPZihpLnByb3RvdHlw''@;'; put 'put ''ZSxVaW50OEFycmF5LnByb3RvdHlwZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKGksVWludDhBcnJheSksaS5hbGxvYz1mdW5jdGlvbihoLHIsYSl7cmV0dXJuIGZ1bmN0aW9uIGQoaCxyLGEpe3JldHVybiBwKGgpLGg8PTA/bChoKTp2b2lkIDAhPT1yPyJzdHJpbmciPT10eXBlb2YgYT9sKGgp''@;'; put 'put ''LmZpbGwocixhKTpsKGgpLmZpbGwocik6bChoKX0oaCxyLGEpfSxpLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGgpe3JldHVybiB5KGgpfSxpLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihoKXtyZXR1cm4geShoKX0saS5pc0J1ZmZlcj1mdW5jdGlvbihyKXtyZXR1cm4gbnVsbCE9ciYmITA9PT1y''@;'; put 'put ''Ll9pc0J1ZmZlciYmciE9PWkucHJvdG90eXBlfSxpLmNvbXBhcmU9ZnVuY3Rpb24ocixhKXtpZihubihyLFVpbnQ4QXJyYXkpJiYocj1pLmZyb20ocixyLm9mZnNldCxyLmJ5dGVMZW5ndGgpKSxubihhLFVpbnQ4QXJyYXkpJiYoYT1pLmZyb20oYSxhLm9mZnNldCxhLmJ5dGVMZW5ndGgpKSwh''@;'; put 'put ''aS5pc0J1ZmZlcihyKXx8IWkuaXNCdWZmZXIoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJidWYxIiwgImJ1ZjIiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7aWYocj09PWEpcmV0dXJuIDA7Zm9yKHZhciBtPXIubGVuZ3RoLHc9YS5s''@;'; put 'put ''ZW5ndGgsSz0wLCQ9TWF0aC5taW4obSx3KTtLPCQ7KytLKWlmKHJbS10hPT1hW0tdKXttPXJbS10sdz1hW0tdO2JyZWFrfXJldHVybiBtPHc/LTE6dzxtPzE6MH0saS5pc0VuY29kaW5nPWZ1bmN0aW9uKHIpe3N3aXRjaChTdHJpbmcocikudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2Ui''@;'; put 'put ''dXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxpLmNvbmNhdD1mdW5jdGlv''@;'; put 'put ''bihyLGEpe2lmKCFBcnJheS5pc0FycmF5KHIpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09ci5sZW5ndGgpcmV0dXJuIGkuYWxsb2MoMCk7dmFyIG07aWYodm9pZCAwPT09YSlmb3IoYT0wLG09MDttPHIu''@;'; put 'put ''bGVuZ3RoOysrbSlhKz1yW21dLmxlbmd0aDt2YXIgdz1pLmFsbG9jVW5zYWZlKGEpLEs9MDtmb3IobT0wO208ci5sZW5ndGg7KyttKXt2YXIgJD1yW21dO2lmKG5uKCQsVWludDhBcnJheSkpSyskLmxlbmd0aD53Lmxlbmd0aD9pLmZyb20oJCkuY29weSh3LEspOlVpbnQ4QXJyYXkucHJvdG90''@;'; put 'put ''eXBlLnNldC5jYWxsKHcsJCxLKTtlbHNle2lmKCFpLmlzQnVmZmVyKCQpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTskLmNvcHkodyxLKX1LKz0kLmxlbmd0aH1yZXR1cm4gd30saS5ieXRlTGVuZ3RoPVAsaS5wcm90''@;'; put 'put ''b3R5cGUuX2lzQnVmZmVyPSEwLGkucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciByPXRoaXMubGVuZ3RoO2lmKHIlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIGE9MDthPHI7YSs9MilU''@;'; put 'put ''KHRoaXMsYSxhKzEpO3JldHVybiB0aGlzfSxpLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmxlbmd0aDtpZihyJTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciBhPTA7YTxy''@;'; put 'put ''O2ErPTQpVCh0aGlzLGEsYSszKSxUKHRoaXMsYSsxLGErMik7cmV0dXJuIHRoaXN9LGkucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciByPXRoaXMubGVuZ3RoO2lmKHIlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0''@;'; put 'put ''LWJpdHMiKTtmb3IodmFyIGE9MDthPHI7YSs9OClUKHRoaXMsYSxhKzcpLFQodGhpcyxhKzEsYSs2KSxUKHRoaXMsYSsyLGErNSksVCh0aGlzLGErMyxhKzQpO3JldHVybiB0aGlzfSxpLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZz1pLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3Zh''@;'; put 'put ''ciByPXRoaXMubGVuZ3RoO3JldHVybiAwPT09cj8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9xKHRoaXMsMCxyKTpNLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHIpe2lmKCFpLmlzQnVmZmVyKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3Vt''@;'; put 'put ''ZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PXJ8fDA9PT1pLmNvbXBhcmUodGhpcyxyKX0saS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciByPSIiLGE9Zi5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gcj10aGlzLnRvU3RyaW5nKCJoZXgiLDAsYSkucmVwbGFj''@;'; put 'put ''ZSgvKC57Mn0pL2csIiQxICIpLnRyaW0oKSx0aGlzLmxlbmd0aD5hJiYocis9IiAuLi4gIiksIjxCdWZmZXIgIityKyI+In0scyYmKGkucHJvdG90eXBlW3NdPWkucHJvdG90eXBlLmluc3BlY3QpLGkucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24ocixhLG0sdyxLKXtpZihubihyLFVpbnQ4''@;'; put 'put ''QXJyYXkpJiYocj1pLmZyb20ocixyLm9mZnNldCxyLmJ5dGVMZW5ndGgpKSwhaS5pc0J1ZmZlcihyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInRhcmdldCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVv''@;'; put 'put ''ZiByKTtpZih2b2lkIDA9PT1hJiYoYT0wKSx2b2lkIDA9PT1tJiYobT1yP3IubGVuZ3RoOjApLHZvaWQgMD09PXcmJih3PTApLHZvaWQgMD09PUsmJihLPXRoaXMubGVuZ3RoKSxhPDB8fG0+ci5sZW5ndGh8fHc8MHx8Sz50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9m''@;'; put 'put ''IHJhbmdlIGluZGV4Iik7aWYodz49SyYmYT49bSlyZXR1cm4gMDtpZih3Pj1LKXJldHVybi0xO2lmKGE+PW0pcmV0dXJuIDE7aWYodGhpcz09PXIpcmV0dXJuIDA7Zm9yKHZhciAkPShLPj4+PTApLSh3Pj4+PTApLER0PShtPj4+PTApLShhPj4+PTApLF89TWF0aC5taW4oJCxEdCksSD10aGlz''@;'; put 'put ''LnNsaWNlKHcsSyksUT1yLnNsaWNlKGEsbSksaXQ9MDtpdDxfOysraXQpaWYoSFtpdF0hPT1RW2l0XSl7JD1IW2l0XSxEdD1RW2l0XTticmVha31yZXR1cm4gJDxEdD8tMTpEdDwkPzE6MH0saS5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24ocixhLG0pe3JldHVybi0xIT09dGhpcy5pbmRl''@;'; put 'put ''eE9mKHIsYSxtKX0saS5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihyLGEsbSl7cmV0dXJuIGIodGhpcyxyLGEsbSwhMCl9LGkucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gYih0aGlzLHIsYSxtLCExKX0saS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24o''@;'; put 'put ''cixhLG0sdyl7aWYodm9pZCAwPT09YSl3PSJ1dGY4IixtPXRoaXMubGVuZ3RoLGE9MDtlbHNlIGlmKHZvaWQgMD09PW0mJiJzdHJpbmciPT10eXBlb2YgYSl3PWEsbT10aGlzLmxlbmd0aCxhPTA7ZWxzZXtpZighaXNGaW5pdGUoYSkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3Ry''@;'; put 'put ''aW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO2E+Pj49MCxpc0Zpbml0ZShtKT8obT4+Pj0wLHZvaWQgMD09PXcmJih3PSJ1dGY4IikpOih3PW0sbT12b2lkIDApfXZhciBLPXRoaXMubGVuZ3RoLWE7aWYoKHZvaWQgMD09PW18fG0+Sykm''@;'; put 'put ''JihtPUspLHIubGVuZ3RoPjAmJihtPDB8fGE8MCl8fGE+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7d3x8KHc9InV0ZjgiKTtmb3IodmFyICQ9ITE7Oylzd2l0Y2godyl7Y2FzZSJoZXgiOnJldHVybiBV''@;'; put 'put ''KHRoaXMscixhLG0pO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIFoodGhpcyxyLGEsbSk7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gbnQodGhpcyxyLGEsbSk7Y2FzZSJiYXNlNjQiOnJldHVybiB0dCh0aGlzLHIsYSxtKTtjYXNlInVjczIiOmNh''@;'; put 'put ''c2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIHl0KHRoaXMscixhLG0pO2RlZmF1bHQ6aWYoJCl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3cpO3c9KCIiK3cpLnRvTG93ZXJDYXNlKCksJD0hMH19LGkucHJvdG90eXBlLnRvSlNP''@;'; put 'put ''Tj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIFg9NDA5NjtmdW5jdGlvbiBWKGgscixhKXt2YXIgbT0iIjthPU1hdGgubWluKGgubGVuZ3RoLGEpO2Zvcih2YXIgdz1yO3c8YTsr''@;'; put 'put ''K3cpbSs9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmaFt3XSk7cmV0dXJuIG19ZnVuY3Rpb24gbHQoaCxyLGEpe3ZhciBtPSIiO2E9TWF0aC5taW4oaC5sZW5ndGgsYSk7Zm9yKHZhciB3PXI7dzxhOysrdyltKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGhbd10pO3JldHVybiBtfWZ1bmN0aW9uIGR0''@;'; put 'put ''KGgscixhKXt2YXIgbT1oLmxlbmd0aDsoIXJ8fHI8MCkmJihyPTApLCghYXx8YTwwfHxhPm0pJiYoYT1tKTtmb3IodmFyIHc9IiIsSz1yO0s8YTsrK0spdys9VG5baFtLXV07cmV0dXJuIHd9ZnVuY3Rpb24gQ3QoaCxyLGEpe2Zvcih2YXIgbT1oLnNsaWNlKHIsYSksdz0iIixLPTA7SzxtLmxl''@;'; put 'put ''bmd0aC0xO0srPTIpdys9U3RyaW5nLmZyb21DaGFyQ29kZShtW0tdKzI1NiptW0srMV0pO3JldHVybiB3fWZ1bmN0aW9uIE90KGgscixhKXtpZihoJTEhPTB8fGg8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IGlzIG5vdCB1aW50Iik7aWYoaCtyPmEpdGhyb3cgbmV3IFJhbmdlRXJy''@;'; put 'put ''b3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKX1mdW5jdGlvbiBOdChoLHIsYSxtLHcsSyl7aWYoIWkuaXNCdWZmZXIoaCkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKHI+d3x8cjxL''@;'; put 'put ''KXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihhK20+aC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIFF0KGgscixhLG0sdyxLKXtpZihhK20+aC5sZW5ndGgpdGhyb3cg''@;'; put 'put ''bmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKGE8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gYW4oaCxyLGEsbSx3KXtyZXR1cm4gcj0rcixhPj4+PTAsd3x8UXQoaCwwLGEsNCksZS53cml0ZShoLHIsYSxtLDIzLDQp''@;'; put 'put ''LGErNH1mdW5jdGlvbiBHdChoLHIsYSxtLHcpe3JldHVybiByPStyLGE+Pj49MCx3fHxRdChoLDAsYSw4KSxlLndyaXRlKGgscixhLG0sNTIsOCksYSs4fWkucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKHIsYSl7dmFyIG09dGhpcy5sZW5ndGg7KHI9fn5yKTwwPyhyKz1tKTwwJiYocj0wKTpy''@;'; put 'put ''Pm0mJihyPW0pLChhPXZvaWQgMD09PWE/bTp+fmEpPDA/KGErPW0pPDAmJihhPTApOmE+bSYmKGE9bSksYTxyJiYoYT1yKTt2YXIgdz10aGlzLnN1YmFycmF5KHIsYSk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZih3LGkucHJvdG90eXBlKSx3fSxpLnByb3RvdHlwZS5yZWFkVWludExF''@;'; put 'put ''PWkucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24ocixhLG0pe3I+Pj49MCxhPj4+PTAsbXx8T3QocixhLHRoaXMubGVuZ3RoKTtmb3IodmFyIHc9dGhpc1tyXSxLPTEsJD0wOysrJDxhJiYoSyo9MjU2KTspdys9dGhpc1tyKyRdKks7cmV0dXJuIHd9LGkucHJvdG90eXBlLnJlYWRVaW50''@;'; put 'put ''QkU9aS5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihyLGEsbSl7cj4+Pj0wLGE+Pj49MCxtfHxPdChyLGEsdGhpcy5sZW5ndGgpO2Zvcih2YXIgdz10aGlzW3IrLS1hXSxLPTE7YT4wJiYoSyo9MjU2KTspdys9dGhpc1tyKy0tYV0qSztyZXR1cm4gd30saS5wcm90b3R5cGUucmVhZFVp''@;'; put 'put ''bnQ4PWkucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihyLGEpe3JldHVybiByPj4+PTAsYXx8T3QociwxLHRoaXMubGVuZ3RoKSx0aGlzW3JdfSxpLnByb3RvdHlwZS5yZWFkVWludDE2TEU9aS5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKHIsYSl7cmV0dXJuIHI+Pj49MCxh''@;'; put 'put ''fHxPdChyLDIsdGhpcy5sZW5ndGgpLHRoaXNbcl18dGhpc1tyKzFdPDw4fSxpLnByb3RvdHlwZS5yZWFkVWludDE2QkU9aS5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKHIsYSl7cmV0dXJuIHI+Pj49MCxhfHxPdChyLDIsdGhpcy5sZW5ndGgpLHRoaXNbcl08PDh8dGhpc1tyKzFd''@;'; put 'put ''fSxpLnByb3RvdHlwZS5yZWFkVWludDMyTEU9aS5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKHIsYSl7cmV0dXJuIHI+Pj49MCxhfHxPdChyLDQsdGhpcy5sZW5ndGgpLCh0aGlzW3JdfHRoaXNbcisxXTw8OHx0aGlzW3IrMl08PDE2KSsxNjc3NzIxNip0aGlzW3IrM119LGkucHJv''@;'; put 'put ''dG90eXBlLnJlYWRVaW50MzJCRT1pLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24ocixhKXtyZXR1cm4gcj4+Pj0wLGF8fE90KHIsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1tyXSsodGhpc1tyKzFdPDwxNnx0aGlzW3IrMl08PDh8dGhpc1tyKzNdKX0saS5wcm90b3R5cGUu''@;'; put 'put ''cmVhZEludExFPWZ1bmN0aW9uKHIsYSxtKXtyPj4+PTAsYT4+Pj0wLG18fE90KHIsYSx0aGlzLmxlbmd0aCk7Zm9yKHZhciB3PXRoaXNbcl0sSz0xLCQ9MDsrKyQ8YSYmKEsqPTI1Nik7KXcrPXRoaXNbciskXSpLO3JldHVybiB3Pj0oSyo9MTI4KSYmKHctPU1hdGgucG93KDIsOCphKSksd30s''@;'; put 'put ''aS5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKHIsYSxtKXtyPj4+PTAsYT4+Pj0wLG18fE90KHIsYSx0aGlzLmxlbmd0aCk7Zm9yKHZhciB3PWEsSz0xLCQ9dGhpc1tyKy0td107dz4wJiYoSyo9MjU2KTspJCs9dGhpc1tyKy0td10qSztyZXR1cm4gJD49KEsqPTEyOCkmJigkLT1NYXRo''@;'; put 'put ''LnBvdygyLDgqYSkpLCR9LGkucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKHIsYSl7cmV0dXJuIHI+Pj49MCxhfHxPdChyLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW3JdPy0xKigyNTUtdGhpc1tyXSsxKTp0aGlzW3JdfSxpLnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbihyLGEp''@;'; put 'put ''e3I+Pj49MCxhfHxPdChyLDIsdGhpcy5sZW5ndGgpO3ZhciBtPXRoaXNbcl18dGhpc1tyKzFdPDw4O3JldHVybiAzMjc2OCZtPzQyOTQ5MDE3NjB8bTptfSxpLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihyLGEpe3I+Pj49MCxhfHxPdChyLDIsdGhpcy5sZW5ndGgpO3ZhciBtPXRo''@;'; put 'put ''aXNbcisxXXx0aGlzW3JdPDw4O3JldHVybiAzMjc2OCZtPzQyOTQ5MDE3NjB8bTptfSxpLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihyLGEpe3JldHVybiByPj4+PTAsYXx8T3Qociw0LHRoaXMubGVuZ3RoKSx0aGlzW3JdfHRoaXNbcisxXTw8OHx0aGlzW3IrMl08PDE2fHRoaXNb''@;'; put 'put ''ciszXTw8MjR9LGkucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKHIsYSl7cmV0dXJuIHI+Pj49MCxhfHxPdChyLDQsdGhpcy5sZW5ndGgpLHRoaXNbcl08PDI0fHRoaXNbcisxXTw8MTZ8dGhpc1tyKzJdPDw4fHRoaXNbciszXX0saS5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rp''@;'; put 'put ''b24ocixhKXtyZXR1cm4gcj4+Pj0wLGF8fE90KHIsNCx0aGlzLmxlbmd0aCksZS5yZWFkKHRoaXMsciwhMCwyMyw0KX0saS5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24ocixhKXtyZXR1cm4gcj4+Pj0wLGF8fE90KHIsNCx0aGlzLmxlbmd0aCksZS5yZWFkKHRoaXMsciwhMSwyMyw0''@;'; put 'put ''KX0saS5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKHIsYSl7cmV0dXJuIHI+Pj49MCxhfHxPdChyLDgsdGhpcy5sZW5ndGgpLGUucmVhZCh0aGlzLHIsITAsNTIsOCl9LGkucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihyLGEpe3JldHVybiByPj4+PTAsYXx8T3Qociw4''@;'; put 'put ''LHRoaXMubGVuZ3RoKSxlLnJlYWQodGhpcyxyLCExLDUyLDgpfSxpLnByb3RvdHlwZS53cml0ZVVpbnRMRT1pLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihyLGEsbSx3KXtyPStyLGE+Pj49MCxtPj4+PTAsd3x8TnQodGhpcyxyLGEsbSxNYXRoLnBvdygyLDgqbSktMSwwKTt2YXIg''@;'; put 'put ''JD0xLER0PTA7Zm9yKHRoaXNbYV09MjU1JnI7KytEdDxtJiYoJCo9MjU2KTspdGhpc1thK0R0XT1yLyQmMjU1O3JldHVybiBhK219LGkucHJvdG90eXBlLndyaXRlVWludEJFPWkucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKHIsYSxtLHcpe3I9K3IsYT4+Pj0wLG0+Pj49MCx3fHxO''@;'; put 'put ''dCh0aGlzLHIsYSxtLE1hdGgucG93KDIsOCptKS0xLDApO3ZhciAkPW0tMSxEdD0xO2Zvcih0aGlzW2ErJF09MjU1JnI7LS0kPj0wJiYoRHQqPTI1Nik7KXRoaXNbYSskXT1yL0R0JjI1NTtyZXR1cm4gYSttfSxpLnByb3RvdHlwZS53cml0ZVVpbnQ4PWkucHJvdG90eXBlLndyaXRlVUludDg9''@;'; put 'put ''ZnVuY3Rpb24ocixhLG0pe3JldHVybiByPStyLGE+Pj49MCxtfHxOdCh0aGlzLHIsYSwxLDI1NSwwKSx0aGlzW2FdPTI1NSZyLGErMX0saS5wcm90b3R5cGUud3JpdGVVaW50MTZMRT1pLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gcj0rcixhPj4+PTAs''@;'; put 'put ''bXx8TnQodGhpcyxyLGEsMiw2NTUzNSwwKSx0aGlzW2FdPTI1NSZyLHRoaXNbYSsxXT1yPj4+OCxhKzJ9LGkucHJvdG90eXBlLndyaXRlVWludDE2QkU9aS5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihyLGEsbSl7cmV0dXJuIHI9K3IsYT4+Pj0wLG18fE50KHRoaXMscixhLDIs''@;'; put 'put ''NjU1MzUsMCksdGhpc1thXT1yPj4+OCx0aGlzW2ErMV09MjU1JnIsYSsyfSxpLnByb3RvdHlwZS53cml0ZVVpbnQzMkxFPWkucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24ocixhLG0pe3JldHVybiByPStyLGE+Pj49MCxtfHxOdCh0aGlzLHIsYSw0LDQyOTQ5NjcyOTUsMCksdGhp''@;'; put 'put ''c1thKzNdPXI+Pj4yNCx0aGlzW2ErMl09cj4+PjE2LHRoaXNbYSsxXT1yPj4+OCx0aGlzW2FdPTI1NSZyLGErNH0saS5wcm90b3R5cGUud3JpdGVVaW50MzJCRT1pLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gcj0rcixhPj4+PTAsbXx8TnQodGhpcyxy''@;'; put 'put ''LGEsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbYV09cj4+PjI0LHRoaXNbYSsxXT1yPj4+MTYsdGhpc1thKzJdPXI+Pj44LHRoaXNbYSszXT0yNTUmcixhKzR9LGkucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24ocixhLG0sdyl7aWYocj0rcixhPj4+PTAsIXcpe3ZhciBLPU1hdGgucG93KDIs''@;'; put 'put ''OCptLTEpO050KHRoaXMscixhLG0sSy0xLC1LKX12YXIgJD0wLER0PTEsXz0wO2Zvcih0aGlzW2FdPTI1NSZyOysrJDxtJiYoRHQqPTI1Nik7KXI8MCYmMD09PV8mJjAhPT10aGlzW2ErJC0xXSYmKF89MSksdGhpc1thKyRdPShyL0R0fDApLV8mMjU1O3JldHVybiBhK219LGkucHJvdG90eXBl''@;'; put 'put ''LndyaXRlSW50QkU9ZnVuY3Rpb24ocixhLG0sdyl7aWYocj0rcixhPj4+PTAsIXcpe3ZhciBLPU1hdGgucG93KDIsOCptLTEpO050KHRoaXMscixhLG0sSy0xLC1LKX12YXIgJD1tLTEsRHQ9MSxfPTA7Zm9yKHRoaXNbYSskXT0yNTUmcjstLSQ+PTAmJihEdCo9MjU2KTspcjwwJiYwPT09XyYm''@;'; put 'put ''MCE9PXRoaXNbYSskKzFdJiYoXz0xKSx0aGlzW2ErJF09KHIvRHR8MCktXyYyNTU7cmV0dXJuIGErbX0saS5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gcj0rcixhPj4+PTAsbXx8TnQodGhpcyxyLGEsMSwxMjcsLTEyOCkscjwwJiYocj0yNTUrcisxKSx0aGlz''@;'; put 'put ''W2FdPTI1NSZyLGErMX0saS5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gcj0rcixhPj4+PTAsbXx8TnQodGhpcyxyLGEsMiwzMjc2NywtMzI3NjgpLHRoaXNbYV09MjU1JnIsdGhpc1thKzFdPXI+Pj44LGErMn0saS5wcm90b3R5cGUud3JpdGVJbnQxNkJF''@;'; put 'put ''PWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gcj0rcixhPj4+PTAsbXx8TnQodGhpcyxyLGEsMiwzMjc2NywtMzI3NjgpLHRoaXNbYV09cj4+PjgsdGhpc1thKzFdPTI1NSZyLGErMn0saS5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gcj0rcixhPj4+PTAsbXx8''@;'; put 'put ''TnQodGhpcyxyLGEsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0aGlzW2FdPTI1NSZyLHRoaXNbYSsxXT1yPj4+OCx0aGlzW2ErMl09cj4+PjE2LHRoaXNbYSszXT1yPj4+MjQsYSs0fSxpLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24ocixhLG0pe3JldHVybiByPStyLGE+Pj49''@;'; put 'put ''MCxtfHxOdCh0aGlzLHIsYSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHI8MCYmKHI9NDI5NDk2NzI5NStyKzEpLHRoaXNbYV09cj4+PjI0LHRoaXNbYSsxXT1yPj4+MTYsdGhpc1thKzJdPXI+Pj44LHRoaXNbYSszXT0yNTUmcixhKzR9LGkucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5j''@;'; put 'put ''dGlvbihyLGEsbSl7cmV0dXJuIGFuKHRoaXMscixhLCEwLG0pfSxpLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24ocixhLG0pe3JldHVybiBhbih0aGlzLHIsYSwhMSxtKX0saS5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihyLGEsbSl7cmV0dXJuIEd0KHRoaXMscixh''@;'; put 'put ''LCEwLG0pfSxpLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gR3QodGhpcyxyLGEsITEsbSl9LGkucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24ocixhLG0sdyl7aWYoIWkuaXNCdWZmZXIocikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxk''@;'; put 'put ''IGJlIGEgQnVmZmVyIik7aWYobXx8KG09MCksIXcmJjAhPT13JiYodz10aGlzLmxlbmd0aCksYT49ci5sZW5ndGgmJihhPXIubGVuZ3RoKSxhfHwoYT0wKSx3PjAmJnc8bSYmKHc9bSksdz09PW18fDA9PT1yLmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKGE8MCl0aHJvdyBu''@;'; put 'put ''ZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKG08MHx8bT49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKHc8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTt3''@;'; put 'put ''PnRoaXMubGVuZ3RoJiYodz10aGlzLmxlbmd0aCksci5sZW5ndGgtYTx3LW0mJih3PXIubGVuZ3RoLWErbSk7dmFyIEs9dy1tO3JldHVybiB0aGlzPT09ciYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4/dGhpcy5jb3B5V2l0aGluKGEsbSx3KTpV''@;'; put 'put ''aW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChyLHRoaXMuc3ViYXJyYXkobSx3KSxhKSxLfSxpLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKHIsYSxtLHcpe2lmKCJzdHJpbmciPT10eXBlb2Ygcil7aWYoInN0cmluZyI9PXR5cGVvZiBhPyh3PWEsYT0wLG09dGhpcy5sZW5ndGgpOiJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgbSYmKHc9bSxtPXRoaXMubGVuZ3RoKSx2b2lkIDAhPT13JiYic3RyaW5nIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgdyYmIWkuaXNFbmNvZGluZyh3KSl0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3cpO2lmKDE9PT1yLmxlbmd0aCl7dmFyIEs9ci5jaGFyQ29kZUF0KDApOygidXRmOCI9PT13JiZLPDEyOHx8ImxhdGluMSI9PT13KSYmKHI9Syl9fWVsc2UibnVtYmVyIj09dHlwZW9mIHI/ciY9MjU1OiJib29sZWFuIj09dHlwZW9mIHIm''@;'; put 'put ''JihyPU51bWJlcihyKSk7aWYoYTwwfHx0aGlzLmxlbmd0aDxhfHx0aGlzLmxlbmd0aDxtKXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihtPD1hKXJldHVybiB0aGlzO3ZhciAkO2lmKGE+Pj49MCxtPXZvaWQgMD09PW0/dGhpcy5sZW5ndGg6bT4+PjAscnx8''@;'; put 'put ''KHI9MCksIm51bWJlciI9PXR5cGVvZiByKWZvcigkPWE7JDxtOysrJCl0aGlzWyRdPXI7ZWxzZXt2YXIgRHQ9aS5pc0J1ZmZlcihyKT9yOmkuZnJvbShyLHcpLF89RHQubGVuZ3RoO2lmKDA9PT1fKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSAiJytyKyciIGlzIGludmFsaWQgZm9y''@;'; put 'put ''IGFyZ3VtZW50ICJ2YWx1ZSInKTtmb3IoJD0wOyQ8bS1hOysrJCl0aGlzWyQrYV09RHRbJCVfXX1yZXR1cm4gdGhpc307dmFyIHNuPS9bXisvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24gWXQoaCxyKXtyPXJ8fDEvMDtmb3IodmFyIGEsbT1oLmxlbmd0aCx3PW51bGwsSz1bXSwkPTA7JDxtOysr''@;'; put 'put ''JCl7aWYoKGE9aC5jaGFyQ29kZUF0KCQpKT41NTI5NSYmYTw1NzM0NCl7aWYoIXcpe2lmKGE+NTYzMTkpeyhyLT0zKT4tMSYmSy5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZigkKzE9PT1tKXsoci09Myk+LTEmJksucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9dz1hO2NvbnRpbnVl''@;'; put 'put ''fWlmKGE8NTYzMjApeyhyLT0zKT4tMSYmSy5wdXNoKDIzOSwxOTEsMTg5KSx3PWE7Y29udGludWV9YT02NTUzNisody01NTI5Njw8MTB8YS01NjMyMCl9ZWxzZSB3JiYoci09Myk+LTEmJksucHVzaCgyMzksMTkxLDE4OSk7aWYodz1udWxsLGE8MTI4KXtpZigoci09MSk8MClicmVhaztLLnB1''@;'; put 'put ''c2goYSl9ZWxzZSBpZihhPDIwNDgpe2lmKChyLT0yKTwwKWJyZWFrO0sucHVzaChhPj42fDE5Miw2MyZhfDEyOCl9ZWxzZSBpZihhPDY1NTM2KXtpZigoci09Myk8MClicmVhaztLLnB1c2goYT4+MTJ8MjI0LGE+PjYmNjN8MTI4LDYzJmF8MTI4KX1lbHNle2lmKCEoYTwxMTE0MTEyKSl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKChyLT00KTwwKWJyZWFrO0sucHVzaChhPj4xOHwyNDAsYT4+MTImNjN8MTI4LGE+PjYmNjN8MTI4LDYzJmF8MTI4KX19cmV0dXJuIEt9ZnVuY3Rpb24gaG4oaCl7cmV0dXJuIG4udG9CeXRlQXJyYXkoZnVuY3Rpb24gRW4oaCl7''@;'; put 'put ''aWYoKGg9KGg9aC5zcGxpdCgiPSIpWzBdKS50cmltKCkucmVwbGFjZShzbiwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7aC5sZW5ndGglNCE9MDspaCs9Ij0iO3JldHVybiBofShoKSl9ZnVuY3Rpb24gb24oaCxyLGEsbSl7Zm9yKHZhciB3PTA7dzxtJiYhKHcrYT49ci5sZW5ndGh8fHc+''@;'; put 'put ''PWgubGVuZ3RoKTsrK3cpclt3K2FdPWhbd107cmV0dXJuIHd9ZnVuY3Rpb24gbm4oaCxyKXtyZXR1cm4gaCBpbnN0YW5jZW9mIHJ8fG51bGwhPWgmJm51bGwhPWguY29uc3RydWN0b3ImJm51bGwhPWguY29uc3RydWN0b3IubmFtZSYmaC5jb25zdHJ1Y3Rvci5uYW1lPT09ci5uYW1lfWZ1bmN0''@;'; put 'put ''aW9uIHluKGgpe3JldHVybiBoIT1ofXZhciBUbj1mdW5jdGlvbigpe2Zvcih2YXIgaD0iMDEyMzQ1Njc4OWFiY2RlZiIscj1uZXcgQXJyYXkoMjU2KSxhPTA7YTwxNjsrK2EpZm9yKHZhciBtPTE2KmEsdz0wO3c8MTY7Kyt3KXJbbSt3XT1oW2FdK2hbd107cmV0dXJuIHJ9KCl9LDg0MTUzOihj''@;'; put 'put ''LGYsdCk9PnsidXNlIHN0cmljdCI7dCg1MjQ2OCkoInN1cCIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcywic3VwIiwiIiwiIil9fSl9LDg0MzUyOihjLGYsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPU1hdGguYWJzO24obi5TLCJNYXRoIix7aHlwb3Q6ZnVuY3Rp''@;'; put 'put ''b24obyx1KXtmb3IodmFyIGQseSxsPTAsaT0wLHY9YXJndW1lbnRzLmxlbmd0aCxwPTA7aTx2OylwPChkPWUoYXJndW1lbnRzW2krK10pKT8obD1sKih5PXAvZCkqeSsxLHA9ZCk6bCs9ZD4wPyh5PWQvcCkqeTpkO3JldHVybiBwPT09MS8wPzEvMDpwKk1hdGguc3FydChsKX19KX0sODQ0Mzc6''@;'; put 'put ''KGMsZix0KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCgzMzU4OSk7bihuLlMrbi5GKihOdW1iZXIucGFyc2VGbG9hdCE9ZSksIk51bWJlciIse3BhcnNlRmxvYXQ6ZX0pfSw4NDQzODooYyxmLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoMTgyNzApLGU9dCg3MDE1Nykscz10KDgxNDg1KTtjLmV4''@;'; put 'put ''cG9ydHM9W10uY29weVdpdGhpbnx8ZnVuY3Rpb24odSxsKXt2YXIgaT1uKHRoaXMpLHY9cyhpLmxlbmd0aCkscD1lKHUsdiksZD1lKGwsdikseT1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCxFPU1hdGgubWluKCh2b2lkIDA9PT15P3Y6ZSh5LHYpKS1kLHYtcCksZz0x''@;'; put 'put ''O2ZvcihkPHAmJnA8ZCtFJiYoZz0tMSxkKz1FLTEscCs9RS0xKTtFLS0gPjA7KWQgaW4gaT9pW3BdPWlbZF06ZGVsZXRlIGlbcF0scCs9ZyxkKz1nO3JldHVybiBpfX0sODQ3MTk6KGMsZix0KT0+e3ZhciBuPXQoNDIyOCksZT10KDIxNjI2KSxzPXQoODYxNDApLG89dCg0MDc2NikoIklFX1BS''@;'; put 'put ''T1RPIiksdT1mdW5jdGlvbigpe30sbD0icHJvdG90eXBlIixpPWZ1bmN0aW9uKCl7dmFyIEUsdj10KDQ2MDM0KSgiaWZyYW1lIikscD1zLmxlbmd0aDtmb3Iodi5zdHlsZS5kaXNwbGF5PSJub25lIix0KDYxMzA4KS5hcHBlbmRDaGlsZCh2KSx2LnNyYz0iamF2YXNjcmlwdDoiLChFPXYuY29u''@;'; put 'put ''dGVudFdpbmRvdy5kb2N1bWVudCkub3BlbigpLEUud3JpdGUoIjxzY3JpcHQ+ZG9jdW1lbnQuRj1PYmplY3Q8XC9zY3JpcHQ+IiksRS5jbG9zZSgpLGk9RS5GO3AtLTspZGVsZXRlIGlbbF1bc1twXV07cmV0dXJuIGkoKX07Yy5leHBvcnRzPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKHAsZCl7''@;'; put 'put ''dmFyIHk7cmV0dXJuIG51bGwhPT1wPyh1W2xdPW4ocCkseT1uZXcgdSx1W2xdPW51bGwseVtvXT1wKTp5PWkoKSx2b2lkIDA9PT1kP3k6ZSh5LGQpfX0sODYxNDA6Yz0+e2MuZXhwb3J0cz0iY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVy''@;'; put 'put ''YWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mIi5zcGxpdCgiLCIpfSw4NjUxMTooYyxmLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg2NjE3OSkoMyk7bihuLlArbi5GKiF0KDg2ODg0KShbXS5zb21lLCEwKSwiQXJyYXkiLHtzb21lOmZ1bmN0aW9uKG8p''@;'; put 'put ''e3JldHVybiBlKHRoaXMsbyxhcmd1bWVudHNbMV0pfX0pfSw4Njg4NDooYyxmLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNzk0NDgpO2MuZXhwb3J0cz1mdW5jdGlvbihlLHMpe3JldHVybiEhZSYmbihmdW5jdGlvbigpe3M/ZS5jYWxsKG51bGwsZnVuY3Rpb24oKXt9LDEpOmUuY2FsbChu''@;'; put 'put ''dWxsKX0pfX0sODgwMjU6KGMsZix0KT0+e3QoNzY2NDgpLHQoNTU3NzEpLHQoODIzOTIpLHQoNzIzMzUpLHQoNzQ4OTYpLHQoOTQ1MjEpLHQoMjkxNDcpLHQoNDEzMTgpLHQoODQzNTIpLHQoMTUzMjcpLHQoNTc1MDkpLHQoMTU5MDkpLHQoNzk1ODQpLHQoNDAzNDUpLHQoOTkxMzQpLHQoNjc5''@;'; put 'put ''MDEpLHQoNDY1OTIpLHQoNTYwOTQpfSw4ODA1MDooYyxmLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDgyNzM4KTtuKG4uUytuLkYqKE51bWJlci5wYXJzZUludCE9ZSksIk51bWJlciIse3BhcnNlSW50OmV9KX0sODgxODQ6KGMsZix0KT0+e3ZhciBuPXQoNjc1NzQpKCJ1bnNjb3BhYmxlcyIp''@;'; put 'put ''LGU9QXJyYXkucHJvdG90eXBlO251bGw9PWVbbl0mJnQoMzMzNDEpKGUsbix7fSksYy5leHBvcnRzPWZ1bmN0aW9uKHMpe2Vbbl1bc109ITB9fSw4ODY0NzooYyxmLHQpPT57dmFyIG49dCgxODI3MCksZT10KDUxMzExKTt0KDgwOTIzKSgia2V5cyIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24obyl7cmV0dXJuIGUobihvKSl9fSl9LDg5MDExOihjLGYsdCk9PnsidXNlIHN0cmljdCI7dCg1MjQ2OCkoImJpZyIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcywiYmlnIiwiIiwiIil9fSl9LDg5NDQ4OihjLGYsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4u''@;'; put 'put ''UytuLkYqIXQoMTc2MyksIk9iamVjdCIse2RlZmluZVByb3BlcnRpZXM6dCgyMTYyNil9KX0sOTA1NzE6KGMsZix0KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCg4MjczOCk7bihuLkcrbi5GKihwYXJzZUludCE9ZSkse3BhcnNlSW50OmV9KX0sOTEyMTI6KGMsZix0KT0+e3ZhciBuPXQoMjcwODcp''@;'; put 'put ''LGU9dCgzMzQ0KTtjLmV4cG9ydHM9ZnVuY3Rpb24ocyl7cmV0dXJuIGZ1bmN0aW9uKG8sdSl7dmFyIHAsZCxsPVN0cmluZyhlKG8pKSxpPW4odSksdj1sLmxlbmd0aDtyZXR1cm4gaTwwfHxpPj12P3M/IiI6dm9pZCAwOihwPWwuY2hhckNvZGVBdChpKSk8NTUyOTZ8fHA+NTYzMTl8fGkrMT09''@;'; put 'put ''PXZ8fChkPWwuY2hhckNvZGVBdChpKzEpKTw1NjMyMHx8ZD41NzM0Mz9zP2wuY2hhckF0KGkpOnA6cz9sLnNsaWNlKGksaSsyKTpkLTU2MzIwKyhwLTU1Mjk2PDwxMCkrNjU1MzZ9fX0sOTEzMTk6KGMsZix0KT0+e3ZhciBuPXQoOTczODApLGU9dCg0MjI4KSxzPW4uZ2V0LG89bi5rZXk7bi5l''@;'; put 'put ''eHAoe2dldE93bk1ldGFkYXRhOmZ1bmN0aW9uKGwsaSl7cmV0dXJuIHMobCxlKGkpLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6byhhcmd1bWVudHNbMl0pKX19KX0sOTE5MzM6KGMsZix0KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCg2NzUyNikuaXNGaW5pdGU7bihuLlMsIk51bWJlciIse2lz''@;'; put 'put ''RmluaXRlOmZ1bmN0aW9uKG8pe3JldHVybiJudW1iZXIiPT10eXBlb2YgbyYmZShvKX19KX0sOTIxMjc6KGMsZix0KT0+e3ZhciBuPXQoNjc1MjYpLGU9dCg1NjA5NCkscz10KDMzMzQxKSxvPXQoMjg4NTkpLHU9dCgzNTA1MiksbD0icHJvdG90eXBlIixpPWZ1bmN0aW9uKHYscCxkKXt2YXIg''@;'; put 'put ''UCxNLFQsYix5PXYmaS5GLEU9diZpLkcsRD12JmkuUCxGPXYmaS5CLHg9RT9uOnYmaS5TP25bcF18fChuW3BdPXt9KToobltwXXx8e30pW2xdLEE9RT9lOmVbcF18fChlW3BdPXt9KSxrPUFbbF18fChBW2xdPXt9KTtmb3IoUCBpbiBFJiYoZD1wKSxkKVQ9KChNPSF5JiZ4JiZ2b2lkIDAhPT14''@;'; put 'put ''W1BdKT94OmQpW1BdLGI9RiYmTT91KFQsbik6RCYmImZ1bmN0aW9uIj09dHlwZW9mIFQ/dShGdW5jdGlvbi5jYWxsLFQpOlQseCYmbyh4LFAsVCx2JmkuVSksQVtQXSE9VCYmcyhBLFAsYiksRCYma1tQXSE9VCYmKGtbUF09VCl9O24uY29yZT1lLGkuRj0xLGkuRz0yLGkuUz00LGkuUD04LGku''@;'; put 'put ''Qj0xNixpLlc9MzIsaS5VPTY0LGkuUj0xMjgsYy5leHBvcnRzPWl9LDkyNTUyOihjLGYsdCk9Pnt2YXIgbj10KDQ3OTY3KSxlPXQoOTIxMjcpLHM9dCg0MjI4KSxvPXQoODMwNDgpO2UoZS5TK2UuRip0KDc5NDQ4KShmdW5jdGlvbigpe1JlZmxlY3QuZGVmaW5lUHJvcGVydHkobi5mKHt9LDEs''@;'; put 'put ''e3ZhbHVlOjF9KSwxLHt2YWx1ZToyfSl9KSwiUmVmbGVjdCIse2RlZmluZVByb3BlcnR5OmZ1bmN0aW9uKGwsaSx2KXtzKGwpLGk9byhpLCEwKSxzKHYpO3RyeXtyZXR1cm4gbi5mKGwsaSx2KSwhMH1jYXRjaHtyZXR1cm4hMX19fSl9LDkyNTY4OihjLGYsdCk9PnsidXNlIHN0cmljdCI7Y29u''@;'; put 'put ''c3Qgbj10KDgyNTc0KTtJbnRsLkRhdGVUaW1lRm9ybWF0LnByb3RvdHlwZS5mb3JtYXRUb1BhcnRzPWZ1bmN0aW9uKFApe2xldCBNPXRoaXMucmVzb2x2ZWRPcHRpb25zKCksVD1mdW5jdGlvbiBrKFApe3ZhciBaLG50LHR0LHl0LG10LE09UC5hdmFpbGFibGVGb3JtYXRzLFQ9UC50aW1lRm9y''@;'; put 'put ''bWF0cyxiPVAuZGF0ZUZvcm1hdHMsTD1QLm1lZGl1bSxVPVtdLHE9W10sWD1bXTtmdW5jdGlvbiBldChWLGx0KXt2YXIgZHQ9bmV3IEFycmF5KChWLm1hdGNoKC9NL2cpfHxbXSkubGVuZ3RoKzEpLEN0PW5ldyBBcnJheSgoVi5tYXRjaCgvRS9nKXx8W10pLmxlbmd0aCsxKTtyZXR1cm4gZHQu''@;'; put 'put ''bGVuZ3RoPjImJihsdD1sdC5yZXBsYWNlKC8oTXxMKSsvLGR0LmpvaW4oIiQxIikpKSxDdC5sZW5ndGg+MiYmKGx0PWx0LnJlcGxhY2UoLyhbRWVjXSkrLyxDdC5qb2luKCIkMSIpKSksbHR9Zm9yKFogaW4gTSlNLmhhc093blByb3BlcnR5KFopJiYoKHR0PUEobnQ9ZXQoWixNW1pdKSkpJiYo''@;'; put 'put ''VS5wdXNoKHR0KSxGKHR0KT9YLnB1c2gobnQpOngodHQpJiZxLnB1c2gobnQpKSk7Zm9yKHl0PTA7eXQ8cS5sZW5ndGg7eXQrPTEpZm9yKG10PTA7bXQ8WC5sZW5ndGg7bXQrPTEpKHR0PUEobnQ9TC5yZXBsYWNlKCJ7MH0iLHFbeXRdKS5yZXBsYWNlKCJ7MX0iLFhbbXRdKS5yZXBsYWNlKC9e''@;'; put 'put ''Wyxcc10rfFssXHNdKyQvZ2ksIiIpKSkmJlUucHVzaCh0dCk7Zm9yKFogaW4gVClULmhhc093blByb3BlcnR5KFopJiYoKHR0PUEobnQ9ZXQoWixUW1pdKSkpJiZVLnB1c2godHQpKTtmb3IoWiBpbiBiKWIuaGFzT3duUHJvcGVydHkoWikmJigodHQ9QShudD1ldChaLGJbWl0pKSkmJlUucHVz''@;'; put 'put ''aCh0dCkpO3JldHVybiBVfShuLmRhdGUuZm9ybWF0cyksYj17fTtmb3IodmFyIEwgaW4gbClzLmNhbGwobCxMKSYmKGJbIltbIitMKyJdXSJdPU1bTF0pO2xldCBaPWZ1bmN0aW9uIGkoUCxNLFQpe2Zvcih2YXIgcSxtdD0tMS8wLFg9MCxldD1NLmxlbmd0aDtYPGV0Oyl7dmFyIFY9TVtYXSxs''@;'; put 'put ''dD0wO2Zvcih2YXIgZHQgaW4gbClpZihzLmNhbGwobCxkdCkpe3ZhciBDdD1QWyJbWyIrZHQrIl1dIl0sT3Q9cy5jYWxsKFYsZHQpP1ZbZHRdOnZvaWQgMDtpZih2b2lkIDA9PT1DdCYmdm9pZCAwIT09T3QpbHQtPTIwO2Vsc2UgaWYodm9pZCAwIT09Q3QmJnZvaWQgMD09PU90KWx0LT0xMjA7''@;'; put 'put ''ZWxzZXt2YXIgTnQ9WyIyLWRpZ2l0IiwibnVtZXJpYyIsIm5hcnJvdyIsInNob3J0IiwibG9uZyJdLFF0PW8uY2FsbChOdCxDdCksYW49by5jYWxsKE50LE90KSxHdD1NYXRoLm1heChNYXRoLm1pbihhbi1RdCwyKSwtMik7VCYmKCgibnVtZXJpYyI9PT1DdHx8IjItZGlnaXQiPT09Q3QpJiYi''@;'; put 'put ''bnVtZXJpYyIhPT1PdCYmIjItZGlnaXQiIT09T3R8fCJudW1lcmljIiE9PUN0JiYiMi1kaWdpdCIhPT1DdCYmKCIyLWRpZ2l0Ij09PU90fHwibnVtZXJpYyI9PT1PdCkpJiYobHQtPTgpLDI9PT1HdD9sdC09NjoxPT09R3Q/bHQtPTM6LTE9PT1HdD9sdC09NjotMj09PUd0JiYobHQtPTgpfX1s''@;'; put 'put ''dD5tdCYmKG10PWx0LHE9ViksWCsrfXJldHVybiBxfShiLFQpO3JldHVybiBmdW5jdGlvbiBlKFAsTSl7aWYoIWlzRmluaXRlKE0pKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHZhbGlkIGRhdGUgcGFzc2VkIHRvIGZvcm1hdFRvUGFydHMiKTtmb3IodmFyIHEsVD0iZW4tVVMiLGI9''@;'; put 'put ''UC5wYXR0ZXJuLFo9KG5ldyBJbnRsLk51bWJlckZvcm1hdChbVF0se3VzZUdyb3VwaW5nOiExfSksbmV3IEludGwuTnVtYmVyRm9ybWF0KFtUXSx7bWluaW11bUludGVnZXJEaWdpdHM6Mix1c2VHcm91cGluZzohMX0pLGZ1bmN0aW9uIHYoUCxNLFQpe3ZhciBiPW5ldyBEYXRlKFApLEw9Imdl''@;'; put 'put ''dCIrKFR8fCIiKTtyZXR1cm57Iltbd2Vla2RheV1dIjpiW0wrIkRheSJdKCksIltbZXJhXV0iOisoYltMKyJGdWxsWWVhciJdKCk+PTApLCJbW3llYXJdXSI6YltMKyJGdWxsWWVhciJdKCksIltbbW9udGhdXSI6YltMKyJNb250aCJdKCksIltbZGF5XV0iOmJbTCsiRGF0ZSJdKCksIltbaG91''@;'; put 'put ''cl1dIjpiW0wrIkhvdXJzIl0oKSwiW1ttaW51dGVdXSI6YltMKyJNaW51dGVzIl0oKSwiW1tzZWNvbmRdXSI6YltMKyJTZWNvbmRzIl0oKSwiW1tpbkRTVF1dIjohMX19KE0pKSxudD0iZ3JlZ29yeSIsdHQ9bi5kYXRlLmNhbGVuZGFycyx5dD1bXSxtdD0veyhbXn1dKyl9L2csWD0wO251bGwh''@;'; put 'put ''PT0ocT1tdC5leGVjKGIpKTspe1g8cS5pbmRleCYmeXQucHVzaCh7dHlwZToic2VwYXJhdG9yIix2YWx1ZTpiLnN1YnN0cihYLHEuaW5kZXgtWCl9KTt2YXIgZXQ9cVsxXSxWPW51bGw7aWYocy5jYWxsKFAsZXQpKXt2YXIgbHQsZHQ9UFtldF0sQ3Q9WlsiW1siK2V0KyJdXSJdO2lmKCJ5ZWFy''@;'; put 'put ''Ij09PWV0JiZDdDw9MD9DdD0xLUN0OiJtb250aCI9PT1ldD9DdCsrOiJob3VyIj09PWV0JiYhMD09PVBbIltbaG91cjEyXV0iXSYmKGx0PShDdCU9MTIpIT09WlsiW1siK2V0KyJdXSJdLDA9PT1DdCYmITA9PT1QWyJbW2hvdXJObzBdXSJdJiYoQ3Q9MTIpKSwibnVtZXJpYyI9PT1kdClWPUN0''@;'; put 'put ''O2Vsc2UgaWYoIjItZGlnaXQiPT09ZHQpKFY9Q3QpLmxlbmd0aD4yJiYoVj1WLnNsaWNlKC0yKSk7ZWxzZSBpZihkdCBpbiB1KXN3aXRjaChldCl7Y2FzZSJtb250aCI6Vj1wKHR0LG50LCJtb250aHMiLGR0LFpbIltbIitldCsiXV0iXSk7YnJlYWs7Y2FzZSJ3ZWVrZGF5Ijp0cnl7Vj1wKHR0''@;'; put 'put ''LG50LCJkYXlzIixkdCxaWyJbWyIrZXQrIl1dIl0pfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgd2Vla2RheSBkYXRhIGZvciBsb2NhbGUgIitUKX1icmVhaztjYXNlInRpbWVab25lTmFtZSI6Vj0iIjticmVhaztkZWZhdWx0OlY9WlsiW1siK2V0KyJdXSJdfX1lbHNl''@;'; put 'put ''ImFtcG0iPT09ZXQmJihWPXAodHQsbnQsImRheVBlcmlvZHMiLGx0PyJwbSI6ImFtIikpO251bGwhPT1WJiYoeXQucHVzaCh7dHlwZTpxWzFdLHZhbHVlOlZ9KSxYPXEuaW5kZXgrcVswXS5sZW5ndGgpfXJldHVybiBYPGIubGVuZ3RoJiZ5dC5wdXNoKHt0eXBlOiJzZXBhcmF0b3IiLHZhbHVl''@;'; put 'put ''OmIuc3Vic3RyKFgpfSkseXR9KFosUCl9O3ZhciBzPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksbz1BcnJheS5wcm90b3R5cGUuaW5kZXhPZix1PU9iamVjdC5jcmVhdGUobnVsbCx7bmFycm93Ont9LHNob3J0Ont9LGxvbmc6e319KSxsPXt3ZWVrZGF5OlsibmFycm93Iiwic2hv''@;'; put 'put ''cnQiLCJsb25nIl0sZXJhOlsibmFycm93Iiwic2hvcnQiLCJsb25nIl0seWVhcjpbIjItZGlnaXQiLCJudW1lcmljIl0sbW9udGg6WyIyLWRpZ2l0IiwibnVtZXJpYyIsIm5hcnJvdyIsInNob3J0IiwibG9uZyJdLGRheTpbIjItZGlnaXQiLCJudW1lcmljIl0saG91cjpbIjItZGlnaXQiLCJu''@;'; put 'put ''dW1lcmljIl0sbWludXRlOlsiMi1kaWdpdCIsIm51bWVyaWMiXSxzZWNvbmQ6WyIyLWRpZ2l0IiwibnVtZXJpYyJdLHRpbWVab25lTmFtZTpbInNob3J0IiwibG9uZyJdfTtmdW5jdGlvbiBwKFAsTSxULGIsTCl7dmFyIFU9UFtNXSYmUFtNXVtUXT9QW01dW1RdOlAuZ3JlZ29yeVtUXSxaPXtu''@;'; put 'put ''YXJyb3c6WyJzaG9ydCIsImxvbmciXSxzaG9ydDpbImxvbmciLCJuYXJyb3ciXSxsb25nOlsic2hvcnQiLCJuYXJyb3ciXX0sbnQ9cy5jYWxsKFUsYik/VVtiXTpzLmNhbGwoVSxaW2JdWzBdKT9VW1pbYl1bMF1dOlVbWltiXVsxXV07cmV0dXJuIG51bGwhPUw/bnRbTF06bnR9dmFyIGQ9Lyg/''@;'; put 'put ''OltFZWNdezEsNn18R3sxLDV9fCg/Olt5WXVdK3xVezEsNX0pfFtNTF17MSw1fXxkezEsMn18YXxbaGtIS117MSwyfXxtezEsMn18c3sxLDJ9fHp7MSw0fSkoPz0oW14nXSonW14nXSonKSpbXiddKiQpL2cseT0vW1F4WFZPdlpBU2pnRkR3V0lRcUhdLyxFPXttb250aDpbIm51bWVyaWMiLCIy''@;'; put 'put ''LWRpZ2l0Iiwic2hvcnQiLCJsb25nIiwibmFycm93Il0sd2Vla2RheTpbInNob3J0Iiwic2hvcnQiLCJzaG9ydCIsImxvbmciLCJuYXJyb3ciXSxlcmE6WyJzaG9ydCIsInNob3J0Iiwic2hvcnQiLCJsb25nIiwibmFycm93Il19LGc9WyJ3ZWVrZGF5IiwiZXJhIiwieWVhciIsIm1vbnRoIiwi''@;'; put 'put ''ZGF5Il0sRD1bImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJ0aW1lWm9uZU5hbWUiXTtmdW5jdGlvbiBGKFApe2Zvcih2YXIgTT0wO008RC5sZW5ndGg7TSs9MSlpZihQLmhhc093blByb3BlcnR5KERbTV0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHgoUCl7Zm9yKHZhciBNPTA7TTxn''@;'; put 'put ''Lmxlbmd0aDtNKz0xKWlmKFAuaGFzT3duUHJvcGVydHkoZ1tNXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gQShQKXtpZigheS50ZXN0KFApKXt2YXIgTT17fTtyZXR1cm4gTS5wYXR0ZXJuPVAucmVwbGFjZShkLGZ1bmN0aW9uKFQpe3N3aXRjaChULmNoYXJBdCgwKSl7Y2FzZSJFIjpj''@;'; put 'put ''YXNlImUiOmNhc2UiYyI6cmV0dXJuIE0ud2Vla2RheT1FLndlZWtkYXlbVC5sZW5ndGgtMV0sInt3ZWVrZGF5fSI7Y2FzZSJHIjpyZXR1cm4gTS5lcmE9RS5lcmFbVC5sZW5ndGgtMV0sIntlcmF9IjtjYXNlInkiOmNhc2UiWSI6Y2FzZSJ1IjpjYXNlIlUiOnJldHVybiBNLnllYXI9Mj09PVQu''@;'; put 'put ''bGVuZ3RoPyIyLWRpZ2l0IjoibnVtZXJpYyIsInt5ZWFyfSI7Y2FzZSJNIjpjYXNlIkwiOnJldHVybiBNLm1vbnRoPUUubW9udGhbVC5sZW5ndGgtMV0sInttb250aH0iO2Nhc2UiZCI6cmV0dXJuIE0uZGF5PTI9PT1ULmxlbmd0aD8iMi1kaWdpdCI6Im51bWVyaWMiLCJ7ZGF5fSI7Y2FzZSJh''@;'; put 'put ''IjpyZXR1cm4ie2FtcG19IjtjYXNlImgiOmNhc2UiSCI6Y2FzZSJrIjpjYXNlIksiOnJldHVybiBNLmhvdXI9Mj09PVQubGVuZ3RoPyIyLWRpZ2l0IjoibnVtZXJpYyIsIntob3VyfSI7Y2FzZSJtIjpyZXR1cm4gTS5taW51dGU9Mj09PVQubGVuZ3RoPyIyLWRpZ2l0IjoibnVtZXJpYyIsIntt''@;'; put 'put ''aW51dGV9IjtjYXNlInMiOnJldHVybiBNLnNlY29uZD0yPT09VC5sZW5ndGg/IjItZGlnaXQiOiJudW1lcmljIiwie3NlY29uZH0iO2Nhc2UieiI6cmV0dXJuIE0udGltZVpvbmVOYW1lPVQubGVuZ3RoPDQ/InNob3J0IjoibG9uZyIsInt0aW1lWm9uZU5hbWV9In19KSxNLnBhdHRlcm49TS5w''@;'; put 'put ''YXR0ZXJuLnJlcGxhY2UoLycoW14nXSopJy9nLGZ1bmN0aW9uKFQsYil7cmV0dXJuIGJ8fCInIn0pLE0ucGF0dGVybi5pbmRleE9mKCJ7YW1wbX0iKT4tMSYmKE0uaG91cjEyPSEwLE0ucGF0dGVybjEyPU0ucGF0dGVybixNLnBhdHRlcm49TS5wYXR0ZXJuLnJlcGxhY2UoInthbXBtfSIsIiIp''@;'; put 'put ''LnJlcGxhY2UoL15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLCIiKSksTX19fSw5MzE5MTooYyxmLHQpPT57dmFyIG49dCg2MzYwNik7Yy5leHBvcnRzPWZ1bmN0aW9uKGUscyl7cmV0dXJuIG5ldyhuKGUpKShzKX19LDkzMzg2OihjLGYsdCk9PnsidXNlIHN0cmljdCI7dmFy''@;'; put 'put ''IG49dCgzNjE5NyksZT10KDEyODg4KSxzPSJNYXAiO2MuZXhwb3J0cz10KDU4OTMzKShzLGZ1bmN0aW9uKG8pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBvKHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0se2dldDpmdW5jdGlvbih1KXt2YXIgbD1uLmdl''@;'; put 'put ''dEVudHJ5KGUodGhpcyxzKSx1KTtyZXR1cm4gbCYmbC52fSxzZXQ6ZnVuY3Rpb24odSxsKXtyZXR1cm4gbi5kZWYoZSh0aGlzLHMpLDA9PT11PzA6dSxsKX19LG4sITApfSw5Mzg2MzooYyxmLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoMzUwNTIpLGU9dCg5MjEyNykscz10KDE4MjcwKSxv''@;'; put 'put ''PXQoOTczNjgpLHU9dCgxNTA4KSxsPXQoODE0ODUpLGk9dCg2NzIyNyksdj10KDIwNzYyKTtlKGUuUytlLkYqIXQoOTg5MzEpKGZ1bmN0aW9uKHApe0FycmF5LmZyb20ocCl9KSwiQXJyYXkiLHtmcm9tOmZ1bmN0aW9uKGQpe3ZhciBrLFAsTSxULHk9cyhkKSxFPSJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiB0aGlzP3RoaXM6QXJyYXksZz1hcmd1bWVudHMubGVuZ3RoLEQ9Zz4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsRj12b2lkIDAhPT1ELHg9MCxBPXYoeSk7aWYoRiYmKEQ9bihELGc+Mj9hcmd1bWVudHNbMl06dm9pZCAwLDIpKSxudWxsPT1BfHxFPT1BcnJheSYmdShBKSlmb3IoUD1uZXcgRShr''@;'; put 'put ''PWwoeS5sZW5ndGgpKTtrPng7eCsrKWkoUCx4LEY/RCh5W3hdLHgpOnlbeF0pO2Vsc2UgZm9yKFQ9QS5jYWxsKHkpLFA9bmV3IEU7IShNPVQubmV4dCgpKS5kb25lO3grKylpKFAseCxGP28oVCxELFtNLnZhbHVlLHhdLCEwKTpNLnZhbHVlKTtyZXR1cm4gUC5sZW5ndGg9eCxQfX0pfSw5NDEx''@;'; put 'put ''NjooYyxmLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNjk2MDApO3QoOTIxMjcpKHt0YXJnZXQ6IlJlZ0V4cCIscHJvdG86ITAsZm9yY2VkOm4hPT0vLi8uZXhlY30se2V4ZWM6bn0pfSw5NDUyMTooYyxmLHQpPT57dmFyIG49dCg5MjEyNyksZT1NYXRoLmV4cDtuKG4uUywiTWF0aCIse2Nv''@;'; put 'put ''c2g6ZnVuY3Rpb24obyl7cmV0dXJuKGUobz0rbykrZSgtbykpLzJ9fSl9LDk1MTY1OihjLGYsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg4ODE4NCksZT10KDc0OTcwKSxzPXQoNjA5MDYpLG89dCg1NzIyMSk7Yy5leHBvcnRzPXQoOTgxNzUpKEFycmF5LCJBcnJheSIsZnVuY3Rpb24odSxs''@;'; put 'put ''KXt0aGlzLl90PW8odSksdGhpcy5faT0wLHRoaXMuX2s9bH0sZnVuY3Rpb24oKXt2YXIgdT10aGlzLl90LGw9dGhpcy5fayxpPXRoaXMuX2krKztyZXR1cm4hdXx8aT49dS5sZW5ndGg/KHRoaXMuX3Q9dm9pZCAwLGUoMSkpOmUoMCwia2V5cyI9PWw/aToidmFsdWVzIj09bD91W2ldOltpLHVb''@;'; put 'put ''aV1dKX0sInZhbHVlcyIpLHMuQXJndW1lbnRzPXMuQXJyYXksbigia2V5cyIpLG4oInZhbHVlcyIpLG4oImVudHJpZXMiKX0sOTU0MTE6KGMsZix0KT0+e3ZhciBuPXQoNDMzMDUpLGU9dCg1NTA4OSkscz10KDY3NTc0KSgibWF0Y2giKTtjLmV4cG9ydHM9ZnVuY3Rpb24obyl7dmFyIHU7cmV0''@;'; put 'put ''dXJuIG4obykmJih2b2lkIDAhPT0odT1vW3NdKT8hIXU6IlJlZ0V4cCI9PWUobykpfX0sOTU1MDI6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQzMzA1KSxlPXQoNDA2MjcpLHM9dCg2NzU3NCkoImhhc0luc3RhbmNlIiksbz1GdW5jdGlvbi5wcm90b3R5cGU7cyBpbiBvfHx0KDQ3''@;'; put 'put ''OTY3KS5mKG8scyx7dmFsdWU6ZnVuY3Rpb24odSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXN8fCFuKHUpKXJldHVybiExO2lmKCFuKHRoaXMucHJvdG90eXBlKSlyZXR1cm4gdSBpbnN0YW5jZW9mIHRoaXM7Zm9yKDt1PWUodSk7KWlmKHRoaXMucHJvdG90eXBlPT09dSlyZXR1cm4hMDty''@;'; put 'put ''ZXR1cm4hMX19KX0sOTU4NTM6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoNjEzMDgpLHM9dCg1NTA4OSksbz10KDcwMTU3KSx1PXQoODE0ODUpLGw9W10uc2xpY2U7bihuLlArbi5GKnQoNzk0NDgpKGZ1bmN0aW9uKCl7ZSYmbC5jYWxsKGUpfSksIkFycmF5Iix7''@;'; put 'put ''c2xpY2U6ZnVuY3Rpb24odixwKXt2YXIgZD11KHRoaXMubGVuZ3RoKSx5PXModGhpcyk7aWYocD12b2lkIDA9PT1wP2Q6cCwiQXJyYXkiPT15KXJldHVybiBsLmNhbGwodGhpcyx2LHApO2Zvcih2YXIgRT1vKHYsZCksZz1vKHAsZCksRD11KGctRSksRj1uZXcgQXJyYXkoRCkseD0wO3g8RDt4''@;'; put 'put ''KyspRlt4XT0iU3RyaW5nIj09eT90aGlzLmNoYXJBdChFK3gpOnRoaXNbRSt4XTtyZXR1cm4gRn19KX0sOTYwNjU6KGMsZix0KT0+e3ZhciBuPXQoMjg4NTkpO2MuZXhwb3J0cz1mdW5jdGlvbihlLHMsbyl7Zm9yKHZhciB1IGluIHMpbihlLHUsc1t1XSxvKTtyZXR1cm4gZX19LDk2MTA4Oihj''@;'; put 'put ''LGYsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPXQoMzM1ODkpO24obi5HK24uRioocGFyc2VGbG9hdCE9ZSkse3BhcnNlRmxvYXQ6ZX0pfSw5NjIyMjooYyxmLHQpPT57dmFyIG49dCg1OTQxNSksZT10KDEwNjApLHM9dCg0MjI4KSxvPXQoNjc1MjYpLlJlZmxlY3Q7Yy5leHBvcnRzPW8mJm8ub3du''@;'; put 'put ''S2V5c3x8ZnVuY3Rpb24obCl7dmFyIGk9bi5mKHMobCkpLHY9ZS5mO3JldHVybiB2P2kuY29uY2F0KHYobCkpOml9fSw5NjUxMTooYyxmLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg1NzIyMSkscz1bXS5qb2luO24obi5QK24uRioodCg2MTI0OSkhPU9iamVjdHx8IXQo''@;'; put 'put ''ODY4ODQpKHMpKSwiQXJyYXkiLHtqb2luOmZ1bmN0aW9uKHUpe3JldHVybiBzLmNhbGwoZSh0aGlzKSx2b2lkIDA9PT11PyIsIjp1KX19KX0sOTY5MzU6KCk9PnsidXNlIHN0cmljdCI7Y29uc3QgYz1nbG9iYWxUaGlzO2Z1bmN0aW9uIGYoUyl7cmV0dXJuKGMuX19ab25lX3N5bWJvbF9wcmVm''@;'; put 'put ''aXh8fCJfX3pvbmVfc3ltYm9sX18iKStTfWNvbnN0IGU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixzPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxvPU9iamVjdC5nZXRQcm90b3R5cGVPZix1PU9iamVjdC5jcmVhdGUsbD1BcnJheS5wcm90b3R5cGUuc2xpY2UsaT0iYWRkRXZlbnRM''@;'; put 'put ''aXN0ZW5lciIsdj0icmVtb3ZlRXZlbnRMaXN0ZW5lciIscD1mKGkpLGQ9Zih2KSx5PSJ0cnVlIixFPSJmYWxzZSIsZz1mKCIiKTtmdW5jdGlvbiBEKFMsUil7cmV0dXJuIFpvbmUuY3VycmVudC53cmFwKFMsUil9ZnVuY3Rpb24gRihTLFIsQixPLE4pe3JldHVybiBab25lLmN1cnJlbnQuc2No''@;'; put 'put ''ZWR1bGVNYWNyb1Rhc2soUyxSLEIsTyxOKX1jb25zdCB4PWYsQT10eXBlb2Ygd2luZG93PCJ1IixrPUE/d2luZG93OnZvaWQgMCxQPUEmJmt8fGdsb2JhbFRoaXM7ZnVuY3Rpb24gVChTLFIpe2ZvcihsZXQgQj1TLmxlbmd0aC0xO0I+PTA7Qi0tKSJmdW5jdGlvbiI9PXR5cGVvZiBTW0JdJiYo''@;'; put 'put ''U1tCXT1EKFNbQl0sUisiXyIrQikpO3JldHVybiBTfWZ1bmN0aW9uIEwoUyl7cmV0dXJuIVN8fCExIT09Uy53cml0YWJsZSYmISgiZnVuY3Rpb24iPT10eXBlb2YgUy5nZXQmJnR5cGVvZiBTLnNldD4idSIpfWNvbnN0IFU9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0''@;'; put 'put ''YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlLFo9ISgibnciaW4gUCkmJnR5cGVvZiBQLnByb2Nlc3M8InUiJiYiW29iamVjdCBwcm9jZXNzXSI9PT1QLnByb2Nlc3MudG9TdHJpbmcoKSxudD0hWiYmIVUmJiEoIUF8fCFrLkhUTUxFbGVtZW50KSx0dD10eXBlb2YgUC5wcm9jZXNzPCJ1IiYmIltv''@;'; put 'put ''YmplY3QgcHJvY2Vzc10iPT09UC5wcm9jZXNzLnRvU3RyaW5nKCkmJiFVJiYhKCFBfHwhay5IVE1MRWxlbWVudCkseXQ9e30sbXQ9eCgiZW5hYmxlX2JlZm9yZXVubG9hZCIpLHE9ZnVuY3Rpb24oUyl7aWYoIShTPVN8fFAuZXZlbnQpKXJldHVybjtsZXQgUj15dFtTLnR5cGVdO1J8fChSPXl0''@;'; put 'put ''W1MudHlwZV09eCgiT05fUFJPUEVSVFkiK1MudHlwZSkpO2NvbnN0IEI9dGhpc3x8Uy50YXJnZXR8fFAsTz1CW1JdO2xldCBOO3JldHVybiBudCYmQj09PWsmJiJlcnJvciI9PT1TLnR5cGU/KE49TyYmTy5jYWxsKHRoaXMsUy5tZXNzYWdlLFMuZmlsZW5hbWUsUy5saW5lbm8sUy5jb2xubyxT''@;'; put 'put ''LmVycm9yKSwhMD09PU4mJlMucHJldmVudERlZmF1bHQoKSk6KE49TyYmTy5hcHBseSh0aGlzLGFyZ3VtZW50cyksImJlZm9yZXVubG9hZCI9PT1TLnR5cGUmJlBbbXRdJiYic3RyaW5nIj09dHlwZW9mIE4/Uy5yZXR1cm5WYWx1ZT1OOm51bGwhPU4mJiFOJiZTLnByZXZlbnREZWZhdWx0KCkp''@;'; put 'put ''LE59O2Z1bmN0aW9uIFgoUyxSLEIpe2xldCBPPWUoUyxSKTtpZighTyYmQiYmZShCLFIpJiYoTz17ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSwhT3x8IU8uY29uZmlndXJhYmxlKXJldHVybjtjb25zdCBOPXgoIm9uIitSKyJwYXRjaGVkIik7aWYoUy5oYXNPd25Qcm9wZXJ0eShO''@;'; put 'put ''KSYmU1tOXSlyZXR1cm47ZGVsZXRlIE8ud3JpdGFibGUsZGVsZXRlIE8udmFsdWU7Y29uc3QgSj1PLmdldCxzdD1PLnNldCxvdD1SLnNsaWNlKDIpO2xldCBmdD15dFtvdF07ZnR8fChmdD15dFtvdF09eCgiT05fUFJPUEVSVFkiK290KSksTy5zZXQ9ZnVuY3Rpb24oU3Qpe2xldCBydD10aGlz''@;'; put 'put ''OyFydCYmUz09PVAmJihydD1QKSxydCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBydFtmdF0mJnJ0LnJlbW92ZUV2ZW50TGlzdGVuZXIob3QscSksc3Q/LmNhbGwocnQsbnVsbCkscnRbZnRdPVN0LCJmdW5jdGlvbiI9PXR5cGVvZiBTdCYmcnQuYWRkRXZlbnRMaXN0ZW5lcihvdCxxLCExKSl9LE8u''@;'; put 'put ''Z2V0PWZ1bmN0aW9uKCl7bGV0IFN0PXRoaXM7aWYoIVN0JiZTPT09UCYmKFN0PVApLCFTdClyZXR1cm4gbnVsbDtjb25zdCBydD1TdFtmdF07aWYocnQpcmV0dXJuIHJ0O2lmKEope2xldCB4dD1KLmNhbGwodGhpcyk7aWYoeHQpcmV0dXJuIE8uc2V0LmNhbGwodGhpcyx4dCksImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIFN0LnJlbW92ZUF0dHJpYnV0ZSYmU3QucmVtb3ZlQXR0cmlidXRlKFIpLHh0fXJldHVybiBudWxsfSxzKFMsUixPKSxTW05dPSEwfWZ1bmN0aW9uIGV0KFMsUixCKXtpZihSKWZvcihsZXQgTz0wO088Ui5sZW5ndGg7TysrKVgoUywib24iK1JbT10sQik7ZWxzZXtjb25zdCBP''@;'; put 'put ''PVtdO2Zvcihjb25zdCBOIGluIFMpIm9uIj09Ti5zbGljZSgwLDIpJiZPLnB1c2goTik7Zm9yKGxldCBOPTA7TjxPLmxlbmd0aDtOKyspWChTLE9bTl0sQil9fWNvbnN0IFY9eCgib3JpZ2luYWxJbnN0YW5jZSIpO2Z1bmN0aW9uIGx0KFMpe2NvbnN0IFI9UFtTXTtpZighUilyZXR1cm47UFt4''@;'; put 'put ''KFMpXT1SLFBbU109ZnVuY3Rpb24oKXtjb25zdCBOPVQoYXJndW1lbnRzLFMpO3N3aXRjaChOLmxlbmd0aCl7Y2FzZSAwOnRoaXNbVl09bmV3IFI7YnJlYWs7Y2FzZSAxOnRoaXNbVl09bmV3IFIoTlswXSk7YnJlYWs7Y2FzZSAyOnRoaXNbVl09bmV3IFIoTlswXSxOWzFdKTticmVhaztjYXNl''@;'; put 'put ''IDM6dGhpc1tWXT1uZXcgUihOWzBdLE5bMV0sTlsyXSk7YnJlYWs7Y2FzZSA0OnRoaXNbVl09bmV3IFIoTlswXSxOWzFdLE5bMl0sTlszXSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkFyZyBsaXN0IHRvbyBsb25nLiIpfX0sT3QoUFtTXSxSKTtjb25zdCBCPW5ldyBSKGZ1bmN0''@;'; put 'put ''aW9uKCl7fSk7bGV0IE87Zm9yKE8gaW4gQikiWE1MSHR0cFJlcXVlc3QiPT09UyYmInJlc3BvbnNlQmxvYiI9PT1PfHxmdW5jdGlvbihOKXsiZnVuY3Rpb24iPT10eXBlb2YgQltOXT9QW1NdLnByb3RvdHlwZVtOXT1mdW5jdGlvbigpe3JldHVybiB0aGlzW1ZdW05dLmFwcGx5KHRoaXNbVl0s''@;'; put 'put ''YXJndW1lbnRzKX06cyhQW1NdLnByb3RvdHlwZSxOLHtzZXQ6ZnVuY3Rpb24oSil7ImZ1bmN0aW9uIj09dHlwZW9mIEo/KHRoaXNbVl1bTl09RChKLFMrIi4iK04pLE90KHRoaXNbVl1bTl0sSikpOnRoaXNbVl1bTl09Sn0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbVl1bTl19fSl9KE8p''@;'; put 'put ''O2ZvcihPIGluIFIpInByb3RvdHlwZSIhPT1PJiZSLmhhc093blByb3BlcnR5KE8pJiYoUFtTXVtPXT1SW09dKX1mdW5jdGlvbiBkdChTLFIsQil7bGV0IE89Uztmb3IoO08mJiFPLmhhc093blByb3BlcnR5KFIpOylPPW8oTyk7IU8mJlNbUl0mJihPPVMpO2NvbnN0IE49eChSKTtsZXQgSj1u''@;'; put 'put ''dWxsO2lmKE8mJighKEo9T1tOXSl8fCFPLmhhc093blByb3BlcnR5KE4pKSYmKEo9T1tOXT1PW1JdLEwoTyYmZShPLFIpKSkpe2NvbnN0IG90PUIoSixOLFIpO09bUl09ZnVuY3Rpb24oKXtyZXR1cm4gb3QodGhpcyxhcmd1bWVudHMpfSxPdChPW1JdLEopfXJldHVybiBKfWZ1bmN0aW9uIEN0''@;'; put 'put ''KFMsUixCKXtsZXQgTz1udWxsO2Z1bmN0aW9uIE4oSil7Y29uc3Qgc3Q9Si5kYXRhO3JldHVybiBzdC5hcmdzW3N0LmNiSWR4XT1mdW5jdGlvbigpe0ouaW52b2tlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sTy5hcHBseShzdC50YXJnZXQsc3QuYXJncyksSn1PPWR0KFMsUixKPT5mdW5jdGlv''@;'; put 'put ''bihzdCxvdCl7Y29uc3QgZnQ9QihzdCxvdCk7cmV0dXJuIGZ0LmNiSWR4Pj0wJiYiZnVuY3Rpb24iPT10eXBlb2Ygb3RbZnQuY2JJZHhdP0YoZnQubmFtZSxvdFtmdC5jYklkeF0sZnQsTik6Si5hcHBseShzdCxvdCl9KX1mdW5jdGlvbiBPdChTLFIpe1NbeCgiT3JpZ2luYWxEZWxlZ2F0ZSIp''@;'; put 'put ''XT1SfWxldCBOdD0hMSxRdD0hMTtmdW5jdGlvbiBhbigpe2lmKE50KXJldHVybiBRdDtOdD0hMDt0cnl7Y29uc3QgUz1rLm5hdmlnYXRvci51c2VyQWdlbnQ7KC0xIT09Uy5pbmRleE9mKCJNU0lFICIpfHwtMSE9PVMuaW5kZXhPZigiVHJpZGVudC8iKXx8LTEhPT1TLmluZGV4T2YoIkVkZ2Uv''@;'; put 'put ''IikpJiYoUXQ9ITApfWNhdGNoe31yZXR1cm4gUXR9ZnVuY3Rpb24gR3QoUyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFN9ZnVuY3Rpb24gc24oUyl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBTfWNvbnN0IEVuPXt1c2VHOiEwfSxZdD17fSxwbj17fSx4bj1uZXcgUmVnRXhwKCJeIitnKyIo''@;'; put 'put ''XFx3KykodHJ1ZXxmYWxzZSkkIiksaG49eCgicHJvcGFnYXRpb25TdG9wcGVkIik7ZnVuY3Rpb24gb24oUyxSKXtjb25zdCBCPShSP1IoUyk6UykrRSxPPShSP1IoUyk6UykreSxOPWcrQixKPWcrTztZdFtTXT17fSxZdFtTXVtFXT1OLFl0W1NdW3ldPUp9ZnVuY3Rpb24gbm4oUyxSLEIsTyl7''@;'; put 'put ''Y29uc3QgTj1PJiZPLmFkZHx8aSxKPU8mJk8ucm18fHYsc3Q9TyYmTy5saXN0ZW5lcnN8fCJldmVudExpc3RlbmVycyIsb3Q9TyYmTy5ybUFsbHx8InJlbW92ZUFsbExpc3RlbmVycyIsZnQ9eChOKSxTdD0iLiIrTisiOiIscnQ9InByZXBlbmRMaXN0ZW5lciIseHQ9Ii4iK3J0KyI6IixidD1m''@;'; put 'put ''dW5jdGlvbih2dCxZLGp0KXtpZih2dC5pc1JlbW92ZWQpcmV0dXJuO2NvbnN0IEx0PXZ0LmNhbGxiYWNrO2xldCBYdDsib2JqZWN0Ij09dHlwZW9mIEx0JiZMdC5oYW5kbGVFdmVudCYmKHZ0LmNhbGxiYWNrPXV0PT5MdC5oYW5kbGVFdmVudCh1dCksdnQub3JpZ2luYWxEZWxlZ2F0ZT1MdCk7''@;'; put 'put ''dHJ5e3Z0Lmludm9rZSh2dCxZLFtqdF0pfWNhdGNoKHV0KXtYdD11dH1jb25zdCBLdD12dC5vcHRpb25zO3JldHVybiBLdCYmIm9iamVjdCI9PXR5cGVvZiBLdCYmS3Qub25jZSYmWVtKXS5jYWxsKFksanQudHlwZSx2dC5vcmlnaW5hbERlbGVnYXRlP3Z0Lm9yaWdpbmFsRGVsZWdhdGU6dnQu''@;'; put 'put ''Y2FsbGJhY2ssS3QpLFh0fTtmdW5jdGlvbiBCdCh2dCxZLGp0KXtpZighKFk9WXx8Uy5ldmVudCkpcmV0dXJuO2NvbnN0IEx0PXZ0fHxZLnRhcmdldHx8UyxYdD1MdFtZdFtZLnR5cGVdW2p0P3k6RV1dO2lmKFh0KXtjb25zdCBLdD1bXTtpZigxPT09WHQubGVuZ3RoKXtjb25zdCB1dD1idChY''@;'; put 'put ''dFswXSxMdCxZKTt1dCYmS3QucHVzaCh1dCl9ZWxzZXtjb25zdCB1dD1YdC5zbGljZSgpO2ZvcihsZXQgV3Q9MDtXdDx1dC5sZW5ndGgmJighWXx8ITAhPT1ZW2huXSk7V3QrKyl7Y29uc3QgSXQ9YnQodXRbV3RdLEx0LFkpO0l0JiZLdC5wdXNoKEl0KX19aWYoMT09PUt0Lmxlbmd0aCl0aHJv''@;'; put 'put ''dyBLdFswXTtmb3IobGV0IHV0PTA7dXQ8S3QubGVuZ3RoO3V0Kyspe2NvbnN0IFd0PUt0W3V0XTtSLm5hdGl2ZVNjaGVkdWxlTWljcm9UYXNrKCgpPT57dGhyb3cgV3R9KX19fWNvbnN0IEh0PWZ1bmN0aW9uKHZ0KXtyZXR1cm4gQnQodGhpcyx2dCwhMSl9LF90PWZ1bmN0aW9uKHZ0KXtyZXR1''@;'; put 'put ''cm4gQnQodGhpcyx2dCwhMCl9O2Z1bmN0aW9uIHRuKHZ0LFkpe2lmKCF2dClyZXR1cm4hMTtsZXQganQ9ITA7WSYmdm9pZCAwIT09WS51c2VHJiYoanQ9WS51c2VHKTtjb25zdCBMdD1ZJiZZLnZoO2xldCBYdD0hMDtZJiZ2b2lkIDAhPT1ZLmNoa0R1cCYmKFh0PVkuY2hrRHVwKTtsZXQgS3Q9''@;'; put 'put ''ITE7WSYmdm9pZCAwIT09WS5ydCYmKEt0PVkucnQpO2xldCB1dD12dDtmb3IoO3V0JiYhdXQuaGFzT3duUHJvcGVydHkoTik7KXV0PW8odXQpO2lmKCF1dCYmdnRbTl0mJih1dD12dCksIXV0fHx1dFtmdF0pcmV0dXJuITE7Y29uc3QgV3Q9WSYmWS5ldmVudE5hbWVUb1N0cmluZyxJdD17fSxU''@;'; put 'put ''dD11dFtmdF09dXRbTl0sZ3Q9dXRbeChKKV09dXRbSl0sUHQ9dXRbeChzdCldPXV0W3N0XSxlbj11dFt4KG90KV09dXRbb3RdO2xldCBKdDtZJiZZLnByZXBlbmQmJihKdD11dFt4KFkucHJlcGVuZCldPXV0W1kucHJlcGVuZF0pO2NvbnN0IFp0PWp0P2Z1bmN0aW9uKGope2lmKCFJdC5pc0V4''@;'; put 'put ''aXN0aW5nKXJldHVybiBUdC5jYWxsKEl0LnRhcmdldCxJdC5ldmVudE5hbWUsSXQuY2FwdHVyZT9fdDpIdCxJdC5vcHRpb25zKX06ZnVuY3Rpb24oail7cmV0dXJuIFR0LmNhbGwoSXQudGFyZ2V0LEl0LmV2ZW50TmFtZSxqLmludm9rZSxJdC5vcHRpb25zKX0sa3Q9anQ/ZnVuY3Rpb24oail7''@;'; put 'put ''aWYoIWouaXNSZW1vdmVkKXtjb25zdCBHPVl0W2ouZXZlbnROYW1lXTtsZXQgcHQ7RyYmKHB0PUdbai5jYXB0dXJlP3k6RV0pO2NvbnN0IE10PXB0JiZqLnRhcmdldFtwdF07aWYoTXQpZm9yKGxldCBjdD0wO2N0PE10Lmxlbmd0aDtjdCsrKWlmKE10W2N0XT09PWope010LnNwbGljZShjdCwx''@;'; put 'put ''KSxqLmlzUmVtb3ZlZD0hMCxqLnJlbW92ZUFib3J0TGlzdGVuZXImJihqLnJlbW92ZUFib3J0TGlzdGVuZXIoKSxqLnJlbW92ZUFib3J0TGlzdGVuZXI9bnVsbCksMD09PU10Lmxlbmd0aCYmKGouYWxsUmVtb3ZlZD0hMCxqLnRhcmdldFtwdF09bnVsbCk7YnJlYWt9fWlmKGouYWxsUmVtb3Zl''@;'; put 'put ''ZClyZXR1cm4gZ3QuY2FsbChqLnRhcmdldCxqLmV2ZW50TmFtZSxqLmNhcHR1cmU/X3Q6SHQsai5vcHRpb25zKX06ZnVuY3Rpb24oail7cmV0dXJuIGd0LmNhbGwoai50YXJnZXQsai5ldmVudE5hbWUsai5pbnZva2Usai5vcHRpb25zKX0sZG49WT8uZGlmZnx8ZnVuY3Rpb24oaixHKXtjb25z''@;'; put 'put ''dCBwdD10eXBlb2YgRztyZXR1cm4iZnVuY3Rpb24iPT09cHQmJmouY2FsbGJhY2s9PT1HfHwib2JqZWN0Ij09PXB0JiZqLm9yaWdpbmFsRGVsZWdhdGU9PT1HfSx2bj1ab25lW3goIlVOUEFUQ0hFRF9FVkVOVFMiKV0sdW49U1t4KCJQQVNTSVZFX0VWRU5UUyIpXSxXPWZ1bmN0aW9uKGosRyxw''@;'; put 'put ''dCxNdCxjdD0hMSx3dD0hMSl7cmV0dXJuIGZ1bmN0aW9uKCl7Y29uc3QgUnQ9dGhpc3x8UztsZXQgRnQ9YXJndW1lbnRzWzBdO1kmJlkudHJhbnNmZXJFdmVudE5hbWUmJihGdD1ZLnRyYW5zZmVyRXZlbnROYW1lKEZ0KSk7bGV0ICR0PWFyZ3VtZW50c1sxXTtpZighJHQpcmV0dXJuIGouYXBw''@;'; put 'put ''bHkodGhpcyxhcmd1bWVudHMpO2lmKFomJiJ1bmNhdWdodEV4Y2VwdGlvbiI9PT1GdClyZXR1cm4gai5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bGV0IFV0PSExO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiAkdCl7aWYoISR0LmhhbmRsZUV2ZW50KXJldHVybiBqLmFwcGx5KHRoaXMsYXJndW1lbnRz''@;'; put 'put ''KTtVdD0hMH1pZihMdCYmIUx0KGosJHQsUnQsYXJndW1lbnRzKSlyZXR1cm47Y29uc3QgZ249ISF1biYmLTEhPT11bi5pbmRleE9mKEZ0KSxsbj1mdW5jdGlvbiB6KGope2lmKCJvYmplY3QiPT10eXBlb2YgaiYmbnVsbCE9PWope2NvbnN0IEc9ey4uLmp9O3JldHVybiBqLnNpZ25hbCYmKEcu''@;'; put 'put ''c2lnbmFsPWouc2lnbmFsKSxHfXJldHVybiBqfShmdW5jdGlvbiBBdChqLEcpe3JldHVybiBHPyJib29sZWFuIj09dHlwZW9mIGo/e2NhcHR1cmU6aixwYXNzaXZlOiEwfTpqPyJvYmplY3QiPT10eXBlb2YgaiYmITEhPT1qLnBhc3NpdmU/ey4uLmoscGFzc2l2ZTohMH06ajp7cGFzc2l2ZToh''@;'; put 'put ''MH06an0oYXJndW1lbnRzWzJdLGduKSksU249bG4/LnNpZ25hbDtpZihTbj8uYWJvcnRlZClyZXR1cm47aWYodm4pZm9yKGxldCBmbj0wO2ZuPHZuLmxlbmd0aDtmbisrKWlmKEZ0PT09dm5bZm5dKXJldHVybiBnbj9qLmNhbGwoUnQsRnQsJHQsbG4pOmouYXBwbHkodGhpcyxhcmd1bWVudHMp''@;'; put 'put ''O2NvbnN0IEFuPSEhbG4mJigiYm9vbGVhbiI9PXR5cGVvZiBsbnx8bG4uY2FwdHVyZSksRm49ISghbG58fCJvYmplY3QiIT10eXBlb2YgbG4pJiZsbi5vbmNlLGpuPVpvbmUuY3VycmVudDtsZXQgd249WXRbRnRdO3dufHwob24oRnQsV3QpLHduPVl0W0Z0XSk7Y29uc3QgRG49d25bQW4/eTpF''@;'; put 'put ''XTtsZXQgSW4sT249UnRbRG5dLGJuPSExO2lmKE9uKXtpZihibj0hMCxYdClmb3IobGV0IGZuPTA7Zm48T24ubGVuZ3RoO2ZuKyspaWYoZG4oT25bZm5dLCR0KSlyZXR1cm59ZWxzZSBPbj1SdFtEbl09W107Y29uc3QgQ249UnQuY29uc3RydWN0b3IubmFtZSxrbj1wbltDbl07a24mJihJbj1r''@;'; put 'put ''bltGdF0pLElufHwoSW49Q24rRysoV3Q/V3QoRnQpOkZ0KSksSXQub3B0aW9ucz1sbixGbiYmKEl0Lm9wdGlvbnMub25jZT0hMSksSXQudGFyZ2V0PVJ0LEl0LmNhcHR1cmU9QW4sSXQuZXZlbnROYW1lPUZ0LEl0LmlzRXhpc3Rpbmc9Ym47Y29uc3QgUG49anQ/RW46dm9pZCAwO1BuJiYoUG4u''@;'; put 'put ''dGFza0RhdGE9SXQpLFNuJiYoSXQub3B0aW9ucy5zaWduYWw9dm9pZCAwKTtjb25zdCBjbj1qbi5zY2hlZHVsZUV2ZW50VGFzayhJbiwkdCxQbixwdCxNdCk7aWYoU24pe0l0Lm9wdGlvbnMuc2lnbmFsPVNuO2NvbnN0IGZuPSgpPT5jbi56b25lLmNhbmNlbFRhc2soY24pO2ouY2FsbChTbiwi''@;'; put 'put ''YWJvcnQiLGZuLHtvbmNlOiEwfSksY24ucmVtb3ZlQWJvcnRMaXN0ZW5lcj0oKT0+U24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGZuKX1yZXR1cm4gSXQudGFyZ2V0PW51bGwsUG4mJihQbi50YXNrRGF0YT1udWxsKSxGbiYmKEl0Lm9wdGlvbnMub25jZT0hMCksImJvb2xlYW4iIT10''@;'; put 'put ''eXBlb2YgY24ub3B0aW9ucyYmKGNuLm9wdGlvbnM9bG4pLGNuLnRhcmdldD1SdCxjbi5jYXB0dXJlPUFuLGNuLmV2ZW50TmFtZT1GdCxVdCYmKGNuLm9yaWdpbmFsRGVsZWdhdGU9JHQpLHd0P09uLnVuc2hpZnQoY24pOk9uLnB1c2goY24pLGN0P1J0OnZvaWQgMH19O3JldHVybiB1dFtOXT1X''@;'; put 'put ''KFR0LFN0LFp0LGt0LEt0KSxKdCYmKHV0W3J0XT1XKEp0LHh0LGZ1bmN0aW9uKGope3JldHVybiBKdC5jYWxsKEl0LnRhcmdldCxJdC5ldmVudE5hbWUsai5pbnZva2UsSXQub3B0aW9ucyl9LGt0LEt0LCEwKSksdXRbSl09ZnVuY3Rpb24oKXtjb25zdCBqPXRoaXN8fFM7bGV0IEc9YXJndW1l''@;'; put 'put ''bnRzWzBdO1kmJlkudHJhbnNmZXJFdmVudE5hbWUmJihHPVkudHJhbnNmZXJFdmVudE5hbWUoRykpO2NvbnN0IHB0PWFyZ3VtZW50c1syXSxNdD0hIXB0JiYoImJvb2xlYW4iPT10eXBlb2YgcHR8fHB0LmNhcHR1cmUpLGN0PWFyZ3VtZW50c1sxXTtpZighY3QpcmV0dXJuIGd0LmFwcGx5KHRo''@;'; put 'put ''aXMsYXJndW1lbnRzKTtpZihMdCYmIUx0KGd0LGN0LGosYXJndW1lbnRzKSlyZXR1cm47Y29uc3Qgd3Q9WXRbR107bGV0IFJ0O3d0JiYoUnQ9d3RbTXQ/eTpFXSk7Y29uc3QgRnQ9UnQmJmpbUnRdO2lmKEZ0KWZvcihsZXQgJHQ9MDskdDxGdC5sZW5ndGg7JHQrKyl7Y29uc3QgVXQ9RnRbJHRd''@;'; put 'put ''O2lmKGRuKFV0LGN0KSlyZXR1cm4gRnQuc3BsaWNlKCR0LDEpLFV0LmlzUmVtb3ZlZD0hMCwwIT09RnQubGVuZ3RofHwoVXQuYWxsUmVtb3ZlZD0hMCxqW1J0XT1udWxsLE10fHwic3RyaW5nIiE9dHlwZW9mIEcpfHwoaltnKyJPTl9QUk9QRVJUWSIrR109bnVsbCksVXQuem9uZS5jYW5jZWxU''@;'; put 'put ''YXNrKFV0KSxLdD9qOnZvaWQgMH1yZXR1cm4gZ3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfSx1dFtzdF09ZnVuY3Rpb24oKXtjb25zdCBqPXRoaXN8fFM7bGV0IEc9YXJndW1lbnRzWzBdO1kmJlkudHJhbnNmZXJFdmVudE5hbWUmJihHPVkudHJhbnNmZXJFdmVudE5hbWUoRykpO2NvbnN0IHB0''@;'; put 'put ''PVtdLE10PXluKGosV3Q/V3QoRyk6Ryk7Zm9yKGxldCBjdD0wO2N0PE10Lmxlbmd0aDtjdCsrKXtjb25zdCB3dD1NdFtjdF07cHQucHVzaCh3dC5vcmlnaW5hbERlbGVnYXRlP3d0Lm9yaWdpbmFsRGVsZWdhdGU6d3QuY2FsbGJhY2spfXJldHVybiBwdH0sdXRbb3RdPWZ1bmN0aW9uKCl7Y29u''@;'; put 'put ''c3Qgaj10aGlzfHxTO2xldCBHPWFyZ3VtZW50c1swXTtpZihHKXtZJiZZLnRyYW5zZmVyRXZlbnROYW1lJiYoRz1ZLnRyYW5zZmVyRXZlbnROYW1lKEcpKTtjb25zdCBwdD1ZdFtHXTtpZihwdCl7Y29uc3Qgd3Q9altwdFtFXV0sUnQ9altwdFt5XV07aWYod3Qpe2NvbnN0IEZ0PXd0LnNsaWNl''@;'; put 'put ''KCk7Zm9yKGxldCAkdD0wOyR0PEZ0Lmxlbmd0aDskdCsrKXtjb25zdCBVdD1GdFskdF07dGhpc1tKXS5jYWxsKHRoaXMsRyxVdC5vcmlnaW5hbERlbGVnYXRlP1V0Lm9yaWdpbmFsRGVsZWdhdGU6VXQuY2FsbGJhY2ssVXQub3B0aW9ucyl9fWlmKFJ0KXtjb25zdCBGdD1SdC5zbGljZSgpO2Zv''@;'; put 'put ''cihsZXQgJHQ9MDskdDxGdC5sZW5ndGg7JHQrKyl7Y29uc3QgVXQ9RnRbJHRdO3RoaXNbSl0uY2FsbCh0aGlzLEcsVXQub3JpZ2luYWxEZWxlZ2F0ZT9VdC5vcmlnaW5hbERlbGVnYXRlOlV0LmNhbGxiYWNrLFV0Lm9wdGlvbnMpfX19fWVsc2V7Y29uc3QgcHQ9T2JqZWN0LmtleXMoaik7Zm9y''@;'; put 'put ''KGxldCBNdD0wO010PHB0Lmxlbmd0aDtNdCsrKXtjb25zdCB3dD14bi5leGVjKHB0W010XSk7bGV0IFJ0PXd0JiZ3dFsxXTtSdCYmInJlbW92ZUxpc3RlbmVyIiE9PVJ0JiZ0aGlzW290XS5jYWxsKHRoaXMsUnQpfXRoaXNbb3RdLmNhbGwodGhpcywicmVtb3ZlTGlzdGVuZXIiKX1pZihLdCly''@;'; put 'put ''ZXR1cm4gdGhpc30sT3QodXRbTl0sVHQpLE90KHV0W0pdLGd0KSxlbiYmT3QodXRbb3RdLGVuKSxQdCYmT3QodXRbc3RdLFB0KSwhMH1sZXQgVnQ9W107Zm9yKGxldCB2dD0wO3Z0PEIubGVuZ3RoO3Z0KyspVnRbdnRdPXRuKEJbdnRdLE8pO3JldHVybiBWdH1mdW5jdGlvbiB5bihTLFIpe2lm''@;'; put 'put ''KCFSKXtjb25zdCBKPVtdO2ZvcihsZXQgc3QgaW4gUyl7Y29uc3Qgb3Q9eG4uZXhlYyhzdCk7bGV0IGZ0PW90JiZvdFsxXTtpZihmdCYmKCFSfHxmdD09PVIpKXtjb25zdCBTdD1TW3N0XTtpZihTdClmb3IobGV0IHJ0PTA7cnQ8U3QubGVuZ3RoO3J0KyspSi5wdXNoKFN0W3J0XSl9fXJldHVy''@;'; put 'put ''biBKfWxldCBCPVl0W1JdO0J8fChvbihSKSxCPVl0W1JdKTtjb25zdCBPPVNbQltFXV0sTj1TW0JbeV1dO3JldHVybiBPP04/Ty5jb25jYXQoTik6Ty5zbGljZSgpOk4/Ti5zbGljZSgpOltdfWZ1bmN0aW9uIFRuKFMsUil7Y29uc3QgQj1TLkV2ZW50O0ImJkIucHJvdG90eXBlJiZSLnBhdGNo''@;'; put 'put ''TWV0aG9kKEIucHJvdG90eXBlLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLE89PmZ1bmN0aW9uKE4sSil7Tltobl09ITAsTyYmTy5hcHBseShOLEopfSl9Y29uc3Qgcj14KCJ6b25lVGFzayIpO2Z1bmN0aW9uIGEoUyxSLEIsTyl7bGV0IE49bnVsbCxKPW51bGw7Qis9Tztjb25zdCBzdD17''@;'; put 'put ''fTtmdW5jdGlvbiBvdChTdCl7Y29uc3QgcnQ9U3QuZGF0YTtydC5hcmdzWzBdPWZ1bmN0aW9uKCl7cmV0dXJuIFN0Lmludm9rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2NvbnN0IHh0PU4uYXBwbHkoUyxydC5hcmdzKTtyZXR1cm4gc24oeHQpP3J0LmhhbmRsZUlkPXh0OihydC5oYW5kbGU9''@;'; put 'put ''eHQscnQuaXNSZWZyZXNoYWJsZT1HdCh4dC5yZWZyZXNoKSksU3R9ZnVuY3Rpb24gZnQoU3Qpe2NvbnN0e2hhbmRsZTpydCxoYW5kbGVJZDp4dH09U3QuZGF0YTtyZXR1cm4gSi5jYWxsKFMscnQ/P3h0KX1OPWR0KFMsUis9TyxTdD0+ZnVuY3Rpb24ocnQseHQpe2lmKEd0KHh0WzBdKSl7Y29u''@;'; put 'put ''c3QgYnQ9e2lzUmVmcmVzaGFibGU6ITEsaXNQZXJpb2RpYzoiSW50ZXJ2YWwiPT09TyxkZWxheToiVGltZW91dCI9PT1PfHwiSW50ZXJ2YWwiPT09Tz94dFsxXXx8MDp2b2lkIDAsYXJnczp4dH0sQnQ9eHRbMF07eHRbMF09ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIEJ0LmFwcGx5KHRoaXMsYXJn''@;'; put 'put ''dW1lbnRzKX1maW5hbGx5e2NvbnN0e2hhbmRsZTpqdCxoYW5kbGVJZDpMdCxpc1BlcmlvZGljOlh0LGlzUmVmcmVzaGFibGU6S3R9PWJ0OyFYdCYmIUt0JiYoTHQ/ZGVsZXRlIHN0W0x0XTpqdCYmKGp0W3JdPW51bGwpKX19O2NvbnN0IEh0PUYoUix4dFswXSxidCxvdCxmdCk7aWYoIUh0KXJl''@;'; put 'put ''dHVybiBIdDtjb25zdHtoYW5kbGVJZDpfdCxoYW5kbGU6dG4saXNSZWZyZXNoYWJsZTpWdCxpc1BlcmlvZGljOnZ0fT1IdC5kYXRhO2lmKF90KXN0W190XT1IdDtlbHNlIGlmKHRuJiYodG5bcl09SHQsVnQmJiF2dCkpe2NvbnN0IFk9dG4ucmVmcmVzaDt0bi5yZWZyZXNoPWZ1bmN0aW9uKCl7''@;'; put 'put ''Y29uc3R7em9uZTpqdCxzdGF0ZTpMdH09SHQ7cmV0dXJuIm5vdFNjaGVkdWxlZCI9PT1MdD8oSHQuX3N0YXRlPSJzY2hlZHVsZWQiLGp0Ll91cGRhdGVUYXNrQ291bnQoSHQsMSkpOiJydW5uaW5nIj09PUx0JiYoSHQuX3N0YXRlPSJzY2hlZHVsaW5nIiksWS5jYWxsKHRoaXMpfX1yZXR1cm4g''@;'; put 'put ''dG4/P190Pz9IdH1yZXR1cm4gU3QuYXBwbHkoUyx4dCl9KSxKPWR0KFMsQixTdD0+ZnVuY3Rpb24ocnQseHQpe2NvbnN0IGJ0PXh0WzBdO2xldCBCdDtzbihidCk/KEJ0PXN0W2J0XSxkZWxldGUgc3RbYnRdKTooQnQ9YnQ/LltyXSxCdD9idFtyXT1udWxsOkJ0PWJ0KSxCdD8udHlwZT9CdC5j''@;'; put 'put ''YW5jZWxGbiYmQnQuem9uZS5jYW5jZWxUYXNrKEJ0KTpTdC5hcHBseShTLHh0KX0pfWZ1bmN0aW9uICQoUyxSLEIpe2lmKCFCfHwwPT09Qi5sZW5ndGgpcmV0dXJuIFI7Y29uc3QgTz1CLmZpbHRlcihKPT5KLnRhcmdldD09PVMpO2lmKDA9PT1PLmxlbmd0aClyZXR1cm4gUjtjb25zdCBOPU9b''@;'; put 'put ''MF0uaWdub3JlUHJvcGVydGllcztyZXR1cm4gUi5maWx0ZXIoSj0+LTE9PT1OLmluZGV4T2YoSikpfWZ1bmN0aW9uIER0KFMsUixCLE8pe1MmJmV0KFMsJChTLFIsQiksTyl9ZnVuY3Rpb24gXyhTKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoUykuZmlsdGVyKFI9PlIuc3Rh''@;'; put 'put ''cnRzV2l0aCgib24iKSYmUi5sZW5ndGg+MikubWFwKFI9PlIuc3Vic3RyaW5nKDIpKX1mdW5jdGlvbiBxdChTLFIsQixPLE4pe2NvbnN0IEo9Wm9uZS5fX3N5bWJvbF9fKE8pO2lmKFJbSl0pcmV0dXJuO2NvbnN0IHN0PVJbSl09UltPXTtSW09dPWZ1bmN0aW9uKG90LGZ0LFN0KXtyZXR1cm4g''@;'; put 'put ''ZnQmJmZ0LnByb3RvdHlwZSYmTi5mb3JFYWNoKGZ1bmN0aW9uKHJ0KXtjb25zdCB4dD1gJHtCfS4ke099OjpgK3J0LGJ0PWZ0LnByb3RvdHlwZTt0cnl7aWYoYnQuaGFzT3duUHJvcGVydHkocnQpKXtjb25zdCBCdD1TLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihidCxydCk7QnQm''@;'; put 'put ''JkJ0LnZhbHVlPyhCdC52YWx1ZT1TLndyYXBXaXRoQ3VycmVudFpvbmUoQnQudmFsdWUseHQpLFMuX3JlZGVmaW5lUHJvcGVydHkoZnQucHJvdG90eXBlLHJ0LEJ0KSk6YnRbcnRdJiYoYnRbcnRdPVMud3JhcFdpdGhDdXJyZW50Wm9uZShidFtydF0seHQpKX1lbHNlIGJ0W3J0XSYmKGJ0W3J0''@;'; put 'put ''XT1TLndyYXBXaXRoQ3VycmVudFpvbmUoYnRbcnRdLHh0KSl9Y2F0Y2h7fX0pLHN0LmNhbGwoUixvdCxmdCxTdCl9LFMuYXR0YWNoT3JpZ2luVG9QYXRjaGVkKFJbT10sc3QpfWNvbnN0IFJuPWZ1bmN0aW9uIG4oKXtjb25zdCBTPWdsb2JhbFRoaXMsUj0hMD09PVNbZigiZm9yY2VEdXBsaWNh''@;'; put 'put ''dGVab25lQ2hlY2siKV07aWYoUy5ab25lJiYoUnx8ImZ1bmN0aW9uIiE9dHlwZW9mIFMuWm9uZS5fX3N5bWJvbF9fKSl0aHJvdyBuZXcgRXJyb3IoIlpvbmUgYWxyZWFkeSBsb2FkZWQuIik7cmV0dXJuIFMuWm9uZT8/PWZ1bmN0aW9uIHQoKXtjb25zdCBTPWMucGVyZm9ybWFuY2U7ZnVuY3Rp''@;'; put 'put ''b24gUihBdCl7UyYmUy5tYXJrJiZTLm1hcmsoQXQpfWZ1bmN0aW9uIEIoQXQsYXQpe1MmJlMubWVhc3VyZSYmUy5tZWFzdXJlKEF0LGF0KX1SKCJab25lIik7bGV0IE89KCgpPT57Y2xhc3MgQXR7c3RhdGljIF9fc3ltYm9sX189ZjtzdGF0aWMgYXNzZXJ0Wm9uZVBhdGNoZWQoKXtpZihjLlBy''@;'; put 'put ''b21pc2UhPT1JdC5ab25lQXdhcmVQcm9taXNlKXRocm93IG5ldyBFcnJvcigiWm9uZS5qcyBoYXMgZGV0ZWN0ZWQgdGhhdCBab25lQXdhcmVQcm9taXNlIGAod2luZG93fGdsb2JhbCkuUHJvbWlzZWAgaGFzIGJlZW4gb3ZlcndyaXR0ZW4uXG5Nb3N0IGxpa2VseSBjYXVzZSBpcyB0aGF0IGEg''@;'; put 'put ''UHJvbWlzZSBwb2x5ZmlsbCBoYXMgYmVlbiBsb2FkZWQgYWZ0ZXIgWm9uZS5qcyAoUG9seWZpbGxpbmcgUHJvbWlzZSBhcGkgaXMgbm90IG5lY2Vzc2FyeSB3aGVuIHpvbmUuanMgaXMgbG9hZGVkLiBJZiB5b3UgbXVzdCBsb2FkIG9uZSwgZG8gc28gYmVmb3JlIGxvYWRpbmcgem9uZS5qcy4p''@;'; put 'put ''Iil9c3RhdGljIGdldCByb290KCl7bGV0IEk9QXQuY3VycmVudDtmb3IoO0kucGFyZW50OylJPUkucGFyZW50O3JldHVybiBJfXN0YXRpYyBnZXQgY3VycmVudCgpe3JldHVybiBndC56b25lfXN0YXRpYyBnZXQgY3VycmVudFRhc2soKXtyZXR1cm4gUHR9c3RhdGljIF9fbG9hZF9wYXRjaChJ''@;'; put 'put ''LEMsaHQ9ITEpe2lmKEl0Lmhhc093blByb3BlcnR5KEkpKXtjb25zdCBFdD0hMD09PWNbZigiZm9yY2VEdXBsaWNhdGVab25lQ2hlY2siKV07aWYoIWh0JiZFdCl0aHJvdyBFcnJvcigiQWxyZWFkeSBsb2FkZWQgcGF0Y2g6ICIrSSl9ZWxzZSBpZighY1siX19ab25lX2Rpc2FibGVfIitJXSl7''@;'; put 'put ''Y29uc3QgRXQ9IlpvbmU6IitJO1IoRXQpLEl0W0ldPUMoYyxBdCxUdCksQihFdCxFdCl9fWdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcGFyZW50fWdldCBuYW1lKCl7cmV0dXJuIHRoaXMuX25hbWV9X3BhcmVudDtfbmFtZTtfcHJvcGVydGllcztfem9uZURlbGVnYXRlO2NvbnN0cnVjdG9y''@;'; put 'put ''KEksQyl7dGhpcy5fcGFyZW50PUksdGhpcy5fbmFtZT1DP0MubmFtZXx8InVubmFtZWQiOiI8cm9vdD4iLHRoaXMuX3Byb3BlcnRpZXM9QyYmQy5wcm9wZXJ0aWVzfHx7fSx0aGlzLl96b25lRGVsZWdhdGU9bmV3IEoodGhpcyx0aGlzLl9wYXJlbnQmJnRoaXMuX3BhcmVudC5fem9uZURlbGVn''@;'; put 'put ''YXRlLEMpfWdldChJKXtjb25zdCBDPXRoaXMuZ2V0Wm9uZVdpdGgoSSk7aWYoQylyZXR1cm4gQy5fcHJvcGVydGllc1tJXX1nZXRab25lV2l0aChJKXtsZXQgQz10aGlzO2Zvcig7Qzspe2lmKEMuX3Byb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoSSkpcmV0dXJuIEM7Qz1DLl9wYXJlbnR9cmV0''@;'; put 'put ''dXJuIG51bGx9Zm9yayhJKXtpZighSSl0aHJvdyBuZXcgRXJyb3IoIlpvbmVTcGVjIHJlcXVpcmVkISIpO3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuZm9yayh0aGlzLEkpfXdyYXAoSSxDKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgSSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGluZyBmdW5j''@;'; put 'put ''dGlvbiBnb3Q6ICIrSSk7Y29uc3QgaHQ9dGhpcy5fem9uZURlbGVnYXRlLmludGVyY2VwdCh0aGlzLEksQyksRXQ9dGhpcztyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gRXQucnVuR3VhcmRlZChodCx0aGlzLGFyZ3VtZW50cyxDKX19cnVuKEksQyxodCxFdCl7Z3Q9e3BhcmVudDpndCx6b25l''@;'; put 'put ''OnRoaXN9O3RyeXtyZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmludm9rZSh0aGlzLEksQyxodCxFdCl9ZmluYWxseXtndD1ndC5wYXJlbnR9fXJ1bkd1YXJkZWQoSSxDPW51bGwsaHQsRXQpe2d0PXtwYXJlbnQ6Z3Qsem9uZTp0aGlzfTt0cnl7dHJ5e3JldHVybiB0aGlzLl96b25lRGVsZWdh''@;'; put 'put ''dGUuaW52b2tlKHRoaXMsSSxDLGh0LEV0KX1jYXRjaChadCl7aWYodGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsWnQpKXRocm93IFp0fX1maW5hbGx5e2d0PWd0LnBhcmVudH19cnVuVGFzayhJLEMsaHQpe2lmKEkuem9uZSE9dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkEgdGFz''@;'; put 'put ''ayBjYW4gb25seSBiZSBydW4gaW4gdGhlIHpvbmUgb2YgY3JlYXRpb24hIChDcmVhdGlvbjogIisoSS56b25lfHx0bikubmFtZSsiOyBFeGVjdXRpb246ICIrdGhpcy5uYW1lKyIpIik7Y29uc3QgRXQ9SSx7dHlwZTpadCxkYXRhOntpc1BlcmlvZGljOmt0PSExLGlzUmVmcmVzaGFibGU6bW49''@;'; put 'put ''ITF9PXt9fT1JO2lmKEkuc3RhdGU9PT1WdCYmKFp0PT09V3R8fFp0PT09dXQpKXJldHVybjtjb25zdCBkbj1JLnN0YXRlIT1qdDtkbiYmRXQuX3RyYW5zaXRpb25UbyhqdCxZKTtjb25zdCB2bj1QdDtQdD1FdCxndD17cGFyZW50Omd0LHpvbmU6dGhpc307dHJ5e1p0PT11dCYmSS5kYXRhJiYh''@;'; put 'put ''a3QmJiFtbiYmKEkuY2FuY2VsRm49dm9pZCAwKTt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2VUYXNrKHRoaXMsRXQsQyxodCl9Y2F0Y2godW4pe2lmKHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLHVuKSl0aHJvdyB1bn19ZmluYWxseXtjb25zdCB1bj1J''@;'; put 'put ''LnN0YXRlO2lmKHVuIT09VnQmJnVuIT09WHQpaWYoWnQ9PVd0fHxrdHx8bW4mJnVuPT09dnQpZG4mJkV0Ll90cmFuc2l0aW9uVG8oWSxqdCx2dCk7ZWxzZXtjb25zdCB6PUV0Ll96b25lRGVsZWdhdGVzO3RoaXMuX3VwZGF0ZVRhc2tDb3VudChFdCwtMSksZG4mJkV0Ll90cmFuc2l0aW9uVG8o''@;'; put 'put ''VnQsanQsVnQpLG1uJiYoRXQuX3pvbmVEZWxlZ2F0ZXM9eil9Z3Q9Z3QucGFyZW50LFB0PXZufX1zY2hlZHVsZVRhc2soSSl7aWYoSS56b25lJiZJLnpvbmUhPT10aGlzKXtsZXQgaHQ9dGhpcztmb3IoO2h0Oyl7aWYoaHQ9PT1JLnpvbmUpdGhyb3cgRXJyb3IoYGNhbiBub3QgcmVzY2hlZHVs''@;'; put 'put ''ZSB0YXNrIHRvICR7dGhpcy5uYW1lfSB3aGljaCBpcyBkZXNjZW5kYW50cyBvZiB0aGUgb3JpZ2luYWwgem9uZSAke0kuem9uZS5uYW1lfWApO2h0PWh0LnBhcmVudH19SS5fdHJhbnNpdGlvblRvKHZ0LFZ0KTtjb25zdCBDPVtdO0kuX3pvbmVEZWxlZ2F0ZXM9QyxJLl96b25lPXRoaXM7dHJ5''@;'; put 'put ''e0k9dGhpcy5fem9uZURlbGVnYXRlLnNjaGVkdWxlVGFzayh0aGlzLEkpfWNhdGNoKGh0KXt0aHJvdyBJLl90cmFuc2l0aW9uVG8oWHQsdnQsVnQpLHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLGh0KSxodH1yZXR1cm4gSS5fem9uZURlbGVnYXRlcz09PUMmJnRoaXMuX3Vw''@;'; put 'put ''ZGF0ZVRhc2tDb3VudChJLDEpLEkuc3RhdGU9PXZ0JiZJLl90cmFuc2l0aW9uVG8oWSx2dCksSX1zY2hlZHVsZU1pY3JvVGFzayhJLEMsaHQsRXQpe3JldHVybiB0aGlzLnNjaGVkdWxlVGFzayhuZXcgc3QoS3QsSSxDLGh0LEV0LHZvaWQgMCkpfXNjaGVkdWxlTWFjcm9UYXNrKEksQyxodCxF''@;'; put 'put ''dCxadCl7cmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyBzdCh1dCxJLEMsaHQsRXQsWnQpKX1zY2hlZHVsZUV2ZW50VGFzayhJLEMsaHQsRXQsWnQpe3JldHVybiB0aGlzLnNjaGVkdWxlVGFzayhuZXcgc3QoV3QsSSxDLGh0LEV0LFp0KSl9Y2FuY2VsVGFzayhJKXtpZihJLnpvbmUhPXRo''@;'; put 'put ''aXMpdGhyb3cgbmV3IEVycm9yKCJBIHRhc2sgY2FuIG9ubHkgYmUgY2FuY2VsbGVkIGluIHRoZSB6b25lIG9mIGNyZWF0aW9uISAoQ3JlYXRpb246ICIrKEkuem9uZXx8dG4pLm5hbWUrIjsgRXhlY3V0aW9uOiAiK3RoaXMubmFtZSsiKSIpO2lmKEkuc3RhdGU9PT1ZfHxJLnN0YXRlPT09anQp''@;'; put 'put ''e0kuX3RyYW5zaXRpb25UbyhMdCxZLGp0KTt0cnl7dGhpcy5fem9uZURlbGVnYXRlLmNhbmNlbFRhc2sodGhpcyxJKX1jYXRjaChDKXt0aHJvdyBJLl90cmFuc2l0aW9uVG8oWHQsTHQpLHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLEMpLEN9cmV0dXJuIHRoaXMuX3VwZGF0''@;'; put 'put ''ZVRhc2tDb3VudChJLC0xKSxJLl90cmFuc2l0aW9uVG8oVnQsTHQpLEkucnVuQ291bnQ9LTEsSX19X3VwZGF0ZVRhc2tDb3VudChJLEMpe2NvbnN0IGh0PUkuX3pvbmVEZWxlZ2F0ZXM7LTE9PUMmJihJLl96b25lRGVsZWdhdGVzPW51bGwpO2ZvcihsZXQgRXQ9MDtFdDxodC5sZW5ndGg7RXQr''@;'; put 'put ''KylodFtFdF0uX3VwZGF0ZVRhc2tDb3VudChJLnR5cGUsQyl9fXJldHVybiBBdH0pKCk7Y29uc3QgTj17bmFtZToiIixvbkhhc1Rhc2s6KEF0LGF0LEksQyk9PkF0Lmhhc1Rhc2soSSxDKSxvblNjaGVkdWxlVGFzazooQXQsYXQsSSxDKT0+QXQuc2NoZWR1bGVUYXNrKEksQyksb25JbnZva2VU''@;'; put 'put ''YXNrOihBdCxhdCxJLEMsaHQsRXQpPT5BdC5pbnZva2VUYXNrKEksQyxodCxFdCksb25DYW5jZWxUYXNrOihBdCxhdCxJLEMpPT5BdC5jYW5jZWxUYXNrKEksQyl9O2NsYXNzIEp7Z2V0IHpvbmUoKXtyZXR1cm4gdGhpcy5fem9uZX1fem9uZTtfdGFza0NvdW50cz17bWljcm9UYXNrOjAsbWFj''@;'; put 'put ''cm9UYXNrOjAsZXZlbnRUYXNrOjB9O19wYXJlbnREZWxlZ2F0ZTtfZm9ya0RsZ3Q7X2ZvcmtaUztfZm9ya0N1cnJab25lO19pbnRlcmNlcHREbGd0O19pbnRlcmNlcHRaUztfaW50ZXJjZXB0Q3VyclpvbmU7X2ludm9rZURsZ3Q7X2ludm9rZVpTO19pbnZva2VDdXJyWm9uZTtfaGFuZGxlRXJy''@;'; put 'put ''b3JEbGd0O19oYW5kbGVFcnJvclpTO19oYW5kbGVFcnJvckN1cnJab25lO19zY2hlZHVsZVRhc2tEbGd0O19zY2hlZHVsZVRhc2taUztfc2NoZWR1bGVUYXNrQ3VyclpvbmU7X2ludm9rZVRhc2tEbGd0O19pbnZva2VUYXNrWlM7X2ludm9rZVRhc2tDdXJyWm9uZTtfY2FuY2VsVGFza0RsZ3Q7''@;'; put 'put ''X2NhbmNlbFRhc2taUztfY2FuY2VsVGFza0N1cnJab25lO19oYXNUYXNrRGxndDtfaGFzVGFza0RsZ3RPd25lcjtfaGFzVGFza1pTO19oYXNUYXNrQ3VyclpvbmU7Y29uc3RydWN0b3IoYXQsSSxDKXt0aGlzLl96b25lPWF0LHRoaXMuX3BhcmVudERlbGVnYXRlPUksdGhpcy5fZm9ya1pTPUMm''@;'; put 'put ''JihDJiZDLm9uRm9yaz9DOkkuX2ZvcmtaUyksdGhpcy5fZm9ya0RsZ3Q9QyYmKEMub25Gb3JrP0k6SS5fZm9ya0RsZ3QpLHRoaXMuX2ZvcmtDdXJyWm9uZT1DJiYoQy5vbkZvcms/dGhpcy5fem9uZTpJLl9mb3JrQ3VyclpvbmUpLHRoaXMuX2ludGVyY2VwdFpTPUMmJihDLm9uSW50ZXJjZXB0''@;'; put 'put ''P0M6SS5faW50ZXJjZXB0WlMpLHRoaXMuX2ludGVyY2VwdERsZ3Q9QyYmKEMub25JbnRlcmNlcHQ/STpJLl9pbnRlcmNlcHREbGd0KSx0aGlzLl9pbnRlcmNlcHRDdXJyWm9uZT1DJiYoQy5vbkludGVyY2VwdD90aGlzLl96b25lOkkuX2ludGVyY2VwdEN1cnJab25lKSx0aGlzLl9pbnZva2Va''@;'; put 'put ''Uz1DJiYoQy5vbkludm9rZT9DOkkuX2ludm9rZVpTKSx0aGlzLl9pbnZva2VEbGd0PUMmJihDLm9uSW52b2tlP0k6SS5faW52b2tlRGxndCksdGhpcy5faW52b2tlQ3VyclpvbmU9QyYmKEMub25JbnZva2U/dGhpcy5fem9uZTpJLl9pbnZva2VDdXJyWm9uZSksdGhpcy5faGFuZGxlRXJyb3Ja''@;'; put 'put ''Uz1DJiYoQy5vbkhhbmRsZUVycm9yP0M6SS5faGFuZGxlRXJyb3JaUyksdGhpcy5faGFuZGxlRXJyb3JEbGd0PUMmJihDLm9uSGFuZGxlRXJyb3I/STpJLl9oYW5kbGVFcnJvckRsZ3QpLHRoaXMuX2hhbmRsZUVycm9yQ3VyclpvbmU9QyYmKEMub25IYW5kbGVFcnJvcj90aGlzLl96b25lOkku''@;'; put 'put ''X2hhbmRsZUVycm9yQ3VyclpvbmUpLHRoaXMuX3NjaGVkdWxlVGFza1pTPUMmJihDLm9uU2NoZWR1bGVUYXNrP0M6SS5fc2NoZWR1bGVUYXNrWlMpLHRoaXMuX3NjaGVkdWxlVGFza0RsZ3Q9QyYmKEMub25TY2hlZHVsZVRhc2s/STpJLl9zY2hlZHVsZVRhc2tEbGd0KSx0aGlzLl9zY2hlZHVs''@;'; put 'put ''ZVRhc2tDdXJyWm9uZT1DJiYoQy5vblNjaGVkdWxlVGFzaz90aGlzLl96b25lOkkuX3NjaGVkdWxlVGFza0N1cnJab25lKSx0aGlzLl9pbnZva2VUYXNrWlM9QyYmKEMub25JbnZva2VUYXNrP0M6SS5faW52b2tlVGFza1pTKSx0aGlzLl9pbnZva2VUYXNrRGxndD1DJiYoQy5vbkludm9rZVRh''@;'; put 'put ''c2s/STpJLl9pbnZva2VUYXNrRGxndCksdGhpcy5faW52b2tlVGFza0N1cnJab25lPUMmJihDLm9uSW52b2tlVGFzaz90aGlzLl96b25lOkkuX2ludm9rZVRhc2tDdXJyWm9uZSksdGhpcy5fY2FuY2VsVGFza1pTPUMmJihDLm9uQ2FuY2VsVGFzaz9DOkkuX2NhbmNlbFRhc2taUyksdGhpcy5f''@;'; put 'put ''Y2FuY2VsVGFza0RsZ3Q9QyYmKEMub25DYW5jZWxUYXNrP0k6SS5fY2FuY2VsVGFza0RsZ3QpLHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9uZT1DJiYoQy5vbkNhbmNlbFRhc2s/dGhpcy5fem9uZTpJLl9jYW5jZWxUYXNrQ3VyclpvbmUpLHRoaXMuX2hhc1Rhc2taUz1udWxsLHRoaXMuX2hhc1Rh''@;'; put 'put ''c2tEbGd0PW51bGwsdGhpcy5faGFzVGFza0RsZ3RPd25lcj1udWxsLHRoaXMuX2hhc1Rhc2tDdXJyWm9uZT1udWxsO2NvbnN0IGh0PUMmJkMub25IYXNUYXNrOyhodHx8SSYmSS5faGFzVGFza1pTKSYmKHRoaXMuX2hhc1Rhc2taUz1odD9DOk4sdGhpcy5faGFzVGFza0RsZ3Q9SSx0aGlzLl9o''@;'; put 'put ''YXNUYXNrRGxndE93bmVyPXRoaXMsdGhpcy5faGFzVGFza0N1cnJab25lPXRoaXMuX3pvbmUsQy5vblNjaGVkdWxlVGFza3x8KHRoaXMuX3NjaGVkdWxlVGFza1pTPU4sdGhpcy5fc2NoZWR1bGVUYXNrRGxndD1JLHRoaXMuX3NjaGVkdWxlVGFza0N1cnJab25lPXRoaXMuX3pvbmUpLEMub25J''@;'; put 'put ''bnZva2VUYXNrfHwodGhpcy5faW52b2tlVGFza1pTPU4sdGhpcy5faW52b2tlVGFza0RsZ3Q9SSx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmU9dGhpcy5fem9uZSksQy5vbkNhbmNlbFRhc2t8fCh0aGlzLl9jYW5jZWxUYXNrWlM9Tix0aGlzLl9jYW5jZWxUYXNrRGxndD1JLHRoaXMuX2NhbmNl''@;'; put 'put ''bFRhc2tDdXJyWm9uZT10aGlzLl96b25lKSl9Zm9yayhhdCxJKXtyZXR1cm4gdGhpcy5fZm9ya1pTP3RoaXMuX2ZvcmtaUy5vbkZvcmsodGhpcy5fZm9ya0RsZ3QsdGhpcy56b25lLGF0LEkpOm5ldyBPKGF0LEkpfWludGVyY2VwdChhdCxJLEMpe3JldHVybiB0aGlzLl9pbnRlcmNlcHRaUz90''@;'; put 'put ''aGlzLl9pbnRlcmNlcHRaUy5vbkludGVyY2VwdCh0aGlzLl9pbnRlcmNlcHREbGd0LHRoaXMuX2ludGVyY2VwdEN1cnJab25lLGF0LEksQyk6SX1pbnZva2UoYXQsSSxDLGh0LEV0KXtyZXR1cm4gdGhpcy5faW52b2tlWlM/dGhpcy5faW52b2tlWlMub25JbnZva2UodGhpcy5faW52b2tlRGxn''@;'; put 'put ''dCx0aGlzLl9pbnZva2VDdXJyWm9uZSxhdCxJLEMsaHQsRXQpOkkuYXBwbHkoQyxodCl9aGFuZGxlRXJyb3IoYXQsSSl7cmV0dXJuIXRoaXMuX2hhbmRsZUVycm9yWlN8fHRoaXMuX2hhbmRsZUVycm9yWlMub25IYW5kbGVFcnJvcih0aGlzLl9oYW5kbGVFcnJvckRsZ3QsdGhpcy5faGFuZGxl''@;'; put 'put ''RXJyb3JDdXJyWm9uZSxhdCxJKX1zY2hlZHVsZVRhc2soYXQsSSl7bGV0IEM9STtpZih0aGlzLl9zY2hlZHVsZVRhc2taUyl0aGlzLl9oYXNUYXNrWlMmJkMuX3pvbmVEZWxlZ2F0ZXMucHVzaCh0aGlzLl9oYXNUYXNrRGxndE93bmVyKSxDPXRoaXMuX3NjaGVkdWxlVGFza1pTLm9uU2NoZWR1''@;'; put 'put ''bGVUYXNrKHRoaXMuX3NjaGVkdWxlVGFza0RsZ3QsdGhpcy5fc2NoZWR1bGVUYXNrQ3VyclpvbmUsYXQsSSksQ3x8KEM9SSk7ZWxzZSBpZihJLnNjaGVkdWxlRm4pSS5zY2hlZHVsZUZuKEkpO2Vsc2V7aWYoSS50eXBlIT1LdCl0aHJvdyBuZXcgRXJyb3IoIlRhc2sgaXMgbWlzc2luZyBzY2hl''@;'; put 'put ''ZHVsZUZuLiIpO0h0KEkpfXJldHVybiBDfWludm9rZVRhc2soYXQsSSxDLGh0KXtyZXR1cm4gdGhpcy5faW52b2tlVGFza1pTP3RoaXMuX2ludm9rZVRhc2taUy5vbkludm9rZVRhc2sodGhpcy5faW52b2tlVGFza0RsZ3QsdGhpcy5faW52b2tlVGFza0N1cnJab25lLGF0LEksQyxodCk6SS5j''@;'; put 'put ''YWxsYmFjay5hcHBseShDLGh0KX1jYW5jZWxUYXNrKGF0LEkpe2xldCBDO2lmKHRoaXMuX2NhbmNlbFRhc2taUylDPXRoaXMuX2NhbmNlbFRhc2taUy5vbkNhbmNlbFRhc2sodGhpcy5fY2FuY2VsVGFza0RsZ3QsdGhpcy5fY2FuY2VsVGFza0N1cnJab25lLGF0LEkpO2Vsc2V7aWYoIUkuY2Fu''@;'; put 'put ''Y2VsRm4pdGhyb3cgRXJyb3IoIlRhc2sgaXMgbm90IGNhbmNlbGFibGUiKTtDPUkuY2FuY2VsRm4oSSl9cmV0dXJuIEN9aGFzVGFzayhhdCxJKXt0cnl7dGhpcy5faGFzVGFza1pTJiZ0aGlzLl9oYXNUYXNrWlMub25IYXNUYXNrKHRoaXMuX2hhc1Rhc2tEbGd0LHRoaXMuX2hhc1Rhc2tDdXJy''@;'; put 'put ''Wm9uZSxhdCxJKX1jYXRjaChDKXt0aGlzLmhhbmRsZUVycm9yKGF0LEMpfX1fdXBkYXRlVGFza0NvdW50KGF0LEkpe2NvbnN0IEM9dGhpcy5fdGFza0NvdW50cyxodD1DW2F0XSxFdD1DW2F0XT1odCtJO2lmKEV0PDApdGhyb3cgbmV3IEVycm9yKCJNb3JlIHRhc2tzIGV4ZWN1dGVkIHRoZW4g''@;'; put 'put ''d2VyZSBzY2hlZHVsZWQuIik7MCE9aHQmJjAhPUV0fHx0aGlzLmhhc1Rhc2sodGhpcy5fem9uZSx7bWljcm9UYXNrOkMubWljcm9UYXNrPjAsbWFjcm9UYXNrOkMubWFjcm9UYXNrPjAsZXZlbnRUYXNrOkMuZXZlbnRUYXNrPjAsY2hhbmdlOmF0fSl9fWNsYXNzIHN0e3R5cGU7c291cmNlO2lu''@;'; put 'put ''dm9rZTtjYWxsYmFjaztkYXRhO3NjaGVkdWxlRm47Y2FuY2VsRm47X3pvbmU9bnVsbDtydW5Db3VudD0wO196b25lRGVsZWdhdGVzPW51bGw7X3N0YXRlPSJub3RTY2hlZHVsZWQiO2NvbnN0cnVjdG9yKGF0LEksQyxodCxFdCxadCl7aWYodGhpcy50eXBlPWF0LHRoaXMuc291cmNlPUksdGhp''@;'; put 'put ''cy5kYXRhPWh0LHRoaXMuc2NoZWR1bGVGbj1FdCx0aGlzLmNhbmNlbEZuPVp0LCFDKXRocm93IG5ldyBFcnJvcigiY2FsbGJhY2sgaXMgbm90IGRlZmluZWQiKTt0aGlzLmNhbGxiYWNrPUM7Y29uc3Qga3Q9dGhpczt0aGlzLmludm9rZT1hdD09PVd0JiZodCYmaHQudXNlRz9zdC5pbnZva2VU''@;'; put 'put ''YXNrOmZ1bmN0aW9uKCl7cmV0dXJuIHN0Lmludm9rZVRhc2suY2FsbChjLGt0LHRoaXMsYXJndW1lbnRzKX19c3RhdGljIGludm9rZVRhc2soYXQsSSxDKXthdHx8KGF0PXRoaXMpLGVuKys7dHJ5e3JldHVybiBhdC5ydW5Db3VudCsrLGF0LnpvbmUucnVuVGFzayhhdCxJLEMpfWZpbmFsbHl7''@;'; put 'put ''MT09ZW4mJl90KCksZW4tLX19Z2V0IHpvbmUoKXtyZXR1cm4gdGhpcy5fem9uZX1nZXQgc3RhdGUoKXtyZXR1cm4gdGhpcy5fc3RhdGV9Y2FuY2VsU2NoZWR1bGVSZXF1ZXN0KCl7dGhpcy5fdHJhbnNpdGlvblRvKFZ0LHZ0KX1fdHJhbnNpdGlvblRvKGF0LEksQyl7aWYodGhpcy5fc3RhdGUh''@;'; put 'put ''PT1JJiZ0aGlzLl9zdGF0ZSE9PUMpdGhyb3cgbmV3IEVycm9yKGAke3RoaXMudHlwZX0gJyR7dGhpcy5zb3VyY2V9JzogY2FuIG5vdCB0cmFuc2l0aW9uIHRvICcke2F0fScsIGV4cGVjdGluZyBzdGF0ZSAnJHtJfScke0M/IiBvciAnIitDKyInIjoiIn0sIHdhcyAnJHt0aGlzLl9zdGF0ZX0n''@;'; put 'put ''LmApO3RoaXMuX3N0YXRlPWF0LGF0PT1WdCYmKHRoaXMuX3pvbmVEZWxlZ2F0ZXM9bnVsbCl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5kYXRhJiZ0eXBlb2YgdGhpcy5kYXRhLmhhbmRsZUlkPCJ1Ij90aGlzLmRhdGEuaGFuZGxlSWQudG9TdHJpbmcoKTpPYmplY3QucHJvdG90eXBlLnRvU3Ry''@;'; put 'put ''aW5nLmNhbGwodGhpcyl9dG9KU09OKCl7cmV0dXJue3R5cGU6dGhpcy50eXBlLHN0YXRlOnRoaXMuc3RhdGUsc291cmNlOnRoaXMuc291cmNlLHpvbmU6dGhpcy56b25lLm5hbWUscnVuQ291bnQ6dGhpcy5ydW5Db3VudH19fWNvbnN0IG90PWYoInNldFRpbWVvdXQiKSxmdD1mKCJQcm9taXNl''@;'; put 'put ''IiksU3Q9ZigidGhlbiIpO2xldCBidCxydD1bXSx4dD0hMTtmdW5jdGlvbiBCdChBdCl7aWYoYnR8fGNbZnRdJiYoYnQ9Y1tmdF0ucmVzb2x2ZSgwKSksYnQpe2xldCBhdD1idFtTdF07YXR8fChhdD1idC50aGVuKSxhdC5jYWxsKGJ0LEF0KX1lbHNlIGNbb3RdKEF0LDApfWZ1bmN0aW9uIEh0''@;'; put 'put ''KEF0KXswPT09ZW4mJjA9PT1ydC5sZW5ndGgmJkJ0KF90KSxBdCYmcnQucHVzaChBdCl9ZnVuY3Rpb24gX3QoKXtpZigheHQpe2Zvcih4dD0hMDtydC5sZW5ndGg7KXtjb25zdCBBdD1ydDtydD1bXTtmb3IobGV0IGF0PTA7YXQ8QXQubGVuZ3RoO2F0Kyspe2NvbnN0IEk9QXRbYXRdO3RyeXtJ''@;'; put 'put ''LnpvbmUucnVuVGFzayhJLG51bGwsbnVsbCl9Y2F0Y2goQyl7VHQub25VbmhhbmRsZWRFcnJvcihDKX19fVR0Lm1pY3JvdGFza0RyYWluRG9uZSgpLHh0PSExfX1jb25zdCB0bj17bmFtZToiTk8gWk9ORSJ9LFZ0PSJub3RTY2hlZHVsZWQiLHZ0PSJzY2hlZHVsaW5nIixZPSJzY2hlZHVsZWQi''@;'; put 'put ''LGp0PSJydW5uaW5nIixMdD0iY2FuY2VsaW5nIixYdD0idW5rbm93biIsS3Q9Im1pY3JvVGFzayIsdXQ9Im1hY3JvVGFzayIsV3Q9ImV2ZW50VGFzayIsSXQ9e30sVHQ9e3N5bWJvbDpmLGN1cnJlbnRab25lRnJhbWU6KCk9Pmd0LG9uVW5oYW5kbGVkRXJyb3I6SnQsbWljcm90YXNrRHJhaW5E''@;'; put 'put ''b25lOkp0LHNjaGVkdWxlTWljcm9UYXNrOkh0LHNob3dVbmNhdWdodEVycm9yOigpPT4hT1tmKCJpZ25vcmVDb25zb2xlRXJyb3JVbmNhdWdodEVycm9yIildLHBhdGNoRXZlbnRUYXJnZXQ6KCk9PltdLHBhdGNoT25Qcm9wZXJ0aWVzOkp0LHBhdGNoTWV0aG9kOigpPT5KdCxiaW5kQXJndW1l''@;'; put 'put ''bnRzOigpPT5bXSxwYXRjaFRoZW46KCk9Pkp0LHBhdGNoTWFjcm9UYXNrOigpPT5KdCxwYXRjaEV2ZW50UHJvdG90eXBlOigpPT5KdCxpc0lFT3JFZGdlOigpPT4hMSxnZXRHbG9iYWxPYmplY3RzOigpPT57fSxPYmplY3REZWZpbmVQcm9wZXJ0eTooKT0+SnQsT2JqZWN0R2V0T3duUHJvcGVy''@;'; put 'put ''dHlEZXNjcmlwdG9yOigpPT57fSxPYmplY3RDcmVhdGU6KCk9Pnt9LEFycmF5U2xpY2U6KCk9PltdLHBhdGNoQ2xhc3M6KCk9Pkp0LHdyYXBXaXRoQ3VycmVudFpvbmU6KCk9Pkp0LGZpbHRlclByb3BlcnRpZXM6KCk9PltdLGF0dGFjaE9yaWdpblRvUGF0Y2hlZDooKT0+SnQsX3JlZGVmaW5l''@;'; put 'put ''UHJvcGVydHk6KCk9Pkp0LHBhdGNoQ2FsbGJhY2tzOigpPT5KdCxuYXRpdmVTY2hlZHVsZU1pY3JvVGFzazpCdH07bGV0IGd0PXtwYXJlbnQ6bnVsbCx6b25lOm5ldyBPKG51bGwsbnVsbCl9LFB0PW51bGwsZW49MDtmdW5jdGlvbiBKdCgpe31yZXR1cm4gQigiWm9uZSIsIlpvbmUiKSxPfSgp''@;'; put 'put ''LFMuWm9uZX0oKTsoZnVuY3Rpb24gTW4oUyl7KGZ1bmN0aW9uIGl0KFMpe1MuX19sb2FkX3BhdGNoKCJab25lQXdhcmVQcm9taXNlIiwoUixCLE8pPT57Y29uc3QgTj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLEo9T2JqZWN0LmRlZmluZVByb3BlcnR5LG90PU8uc3ltYm9sLGZ0''@;'; put 'put ''PVtdLFN0PSExIT09UltvdCgiRElTQUJMRV9XUkFQUElOR19VTkNBVUdIVF9QUk9NSVNFX1JFSkVDVElPTiIpXSxydD1vdCgiUHJvbWlzZSIpLHh0PW90KCJ0aGVuIik7Ty5vblVuaGFuZGxlZEVycm9yPXo9PntpZihPLnNob3dVbmNhdWdodEVycm9yKCkpe2NvbnN0IFc9eiYmei5yZWplY3Rp''@;'; put 'put ''b247Vz9jb25zb2xlLmVycm9yKCJVbmhhbmRsZWQgUHJvbWlzZSByZWplY3Rpb246IixXIGluc3RhbmNlb2YgRXJyb3I/Vy5tZXNzYWdlOlcsIjsgWm9uZToiLHouem9uZS5uYW1lLCI7IFRhc2s6Iix6LnRhc2smJnoudGFzay5zb3VyY2UsIjsgVmFsdWU6IixXLFcgaW5zdGFuY2VvZiBFcnJv''@;'; put 'put ''cj9XLnN0YWNrOnZvaWQgMCk6Y29uc29sZS5lcnJvcih6KX19LE8ubWljcm90YXNrRHJhaW5Eb25lPSgpPT57Zm9yKDtmdC5sZW5ndGg7KXtjb25zdCB6PWZ0LnNoaWZ0KCk7dHJ5e3ouem9uZS5ydW5HdWFyZGVkKCgpPT57dGhyb3cgei50aHJvd09yaWdpbmFsP3oucmVqZWN0aW9uOnp9KX1j''@;'; put 'put ''YXRjaChXKXtIdChXKX19fTtjb25zdCBCdD1vdCgidW5oYW5kbGVkUHJvbWlzZVJlamVjdGlvbkhhbmRsZXIiKTtmdW5jdGlvbiBIdCh6KXtPLm9uVW5oYW5kbGVkRXJyb3Ioeik7dHJ5e2NvbnN0IFc9QltCdF07ImZ1bmN0aW9uIj09dHlwZW9mIFcmJlcuY2FsbCh0aGlzLHopfWNhdGNoe319''@;'; put 'put ''ZnVuY3Rpb24gX3Qoeil7cmV0dXJuIHomJiJmdW5jdGlvbiI9PXR5cGVvZiB6LnRoZW59ZnVuY3Rpb24gdG4oeil7cmV0dXJuIHp9ZnVuY3Rpb24gVnQoeil7cmV0dXJuIGt0LnJlamVjdCh6KX1jb25zdCB2dD1vdCgic3RhdGUiKSxZPW90KCJ2YWx1ZSIpLGp0PW90KCJmaW5hbGx5IiksTHQ9''@;'; put 'put ''b3QoInBhcmVudFByb21pc2VWYWx1ZSIpLFh0PW90KCJwYXJlbnRQcm9taXNlU3RhdGUiKSx1dD1udWxsLEl0PSExO2Z1bmN0aW9uIGd0KHosVyl7cmV0dXJuIGo9Pnt0cnl7QXQoeixXLGopfWNhdGNoKEcpe0F0KHosITEsRyl9fX1jb25zdCBQdD1mdW5jdGlvbigpe2xldCB6PSExO3JldHVy''@;'; put 'put ''biBmdW5jdGlvbihqKXtyZXR1cm4gZnVuY3Rpb24oKXt6fHwoej0hMCxqLmFwcGx5KG51bGwsYXJndW1lbnRzKSl9fX0sZW49IlByb21pc2UgcmVzb2x2ZWQgd2l0aCBpdHNlbGYiLEp0PW90KCJjdXJyZW50VGFza1RyYWNlIik7ZnVuY3Rpb24gQXQoeixXLGope2NvbnN0IEc9UHQoKTtpZih6''@;'; put 'put ''PT09ail0aHJvdyBuZXcgVHlwZUVycm9yKGVuKTtpZih6W3Z0XT09PXV0KXtsZXQgcHQ9bnVsbDt0cnl7KCJvYmplY3QiPT10eXBlb2Yganx8ImZ1bmN0aW9uIj09dHlwZW9mIGopJiYocHQ9aiYmai50aGVuKX1jYXRjaChNdCl7cmV0dXJuIEcoKCk9PntBdCh6LCExLE10KX0pKCksen1pZihX''@;'; put 'put ''IT09SXQmJmogaW5zdGFuY2VvZiBrdCYmai5oYXNPd25Qcm9wZXJ0eSh2dCkmJmouaGFzT3duUHJvcGVydHkoWSkmJmpbdnRdIT09dXQpSShqKSxBdCh6LGpbdnRdLGpbWV0pO2Vsc2UgaWYoVyE9PUl0JiYiZnVuY3Rpb24iPT10eXBlb2YgcHQpdHJ5e3B0LmNhbGwoaixHKGd0KHosVykpLEco''@;'; put 'put ''Z3QoeiwhMSkpKX1jYXRjaChNdCl7RygoKT0+e0F0KHosITEsTXQpfSkoKX1lbHNle3pbdnRdPVc7Y29uc3QgTXQ9eltZXTtpZih6W1ldPWoseltqdF09PT1qdCYmITA9PT1XJiYoelt2dF09eltYdF0seltZXT16W0x0XSksVz09PUl0JiZqIGluc3RhbmNlb2YgRXJyb3Ipe2NvbnN0IGN0PUIu''@;'; put 'put ''Y3VycmVudFRhc2smJkIuY3VycmVudFRhc2suZGF0YSYmQi5jdXJyZW50VGFzay5kYXRhLl9fY3JlYXRpb25UcmFjZV9fO2N0JiZKKGosSnQse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLHZhbHVlOmN0fSl9Zm9yKGxldCBjdD0wO2N0PE10Lmxlbmd0aDspQyh6''@;'; put 'put ''LE10W2N0KytdLE10W2N0KytdLE10W2N0KytdLE10W2N0KytdKTtpZigwPT1NdC5sZW5ndGgmJlc9PUl0KXt6W3Z0XT0wO2xldCBjdD1qO3RyeXt0aHJvdyBuZXcgRXJyb3IoIlVuY2F1Z2h0IChpbiBwcm9taXNlKTogIitmdW5jdGlvbiBzdCh6KXtyZXR1cm4geiYmei50b1N0cmluZz09PU9i''@;'; put 'put ''amVjdC5wcm90b3R5cGUudG9TdHJpbmc/KHouY29uc3RydWN0b3ImJnouY29uc3RydWN0b3IubmFtZXx8IiIpKyI6ICIrSlNPTi5zdHJpbmdpZnkoeik6ej96LnRvU3RyaW5nKCk6T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHopfShqKSsoaiYmai5zdGFjaz8iXG4iK2ouc3RhY2s6''@;'; put 'put ''IiIpKX1jYXRjaCh3dCl7Y3Q9d3R9U3QmJihjdC50aHJvd09yaWdpbmFsPSEwKSxjdC5yZWplY3Rpb249aixjdC5wcm9taXNlPXosY3Quem9uZT1CLmN1cnJlbnQsY3QudGFzaz1CLmN1cnJlbnRUYXNrLGZ0LnB1c2goY3QpLE8uc2NoZWR1bGVNaWNyb1Rhc2soKX19fXJldHVybiB6fWNvbnN0''@;'; put 'put ''IGF0PW90KCJyZWplY3Rpb25IYW5kbGVkSGFuZGxlciIpO2Z1bmN0aW9uIEkoeil7aWYoMD09PXpbdnRdKXt0cnl7Y29uc3QgVz1CW2F0XTtXJiYiZnVuY3Rpb24iPT10eXBlb2YgVyYmVy5jYWxsKHRoaXMse3JlamVjdGlvbjp6W1ldLHByb21pc2U6en0pfWNhdGNoe316W3Z0XT1JdDtmb3Io''@;'; put 'put ''bGV0IFc9MDtXPGZ0Lmxlbmd0aDtXKyspej09PWZ0W1ddLnByb21pc2UmJmZ0LnNwbGljZShXLDEpfX1mdW5jdGlvbiBDKHosVyxqLEcscHQpe0koeik7Y29uc3QgTXQ9elt2dF0sY3Q9TXQ/ImZ1bmN0aW9uIj09dHlwZW9mIEc/Rzp0bjoiZnVuY3Rpb24iPT10eXBlb2YgcHQ/cHQ6VnQ7Vy5z''@;'; put 'put ''Y2hlZHVsZU1pY3JvVGFzaygiUHJvbWlzZS50aGVuIiwoKT0+e3RyeXtjb25zdCB3dD16W1ldLFJ0PSEhaiYmanQ9PT1qW2p0XTtSdCYmKGpbTHRdPXd0LGpbWHRdPU10KTtjb25zdCBGdD1XLnJ1bihjdCx2b2lkIDAsUnQmJmN0IT09VnQmJmN0IT09dG4/W106W3d0XSk7QXQoaiwhMCxGdCl9''@;'; put 'put ''Y2F0Y2god3Qpe0F0KGosITEsd3QpfX0sail9Y29uc3QgRXQ9ZnVuY3Rpb24oKXt9LFp0PVIuQWdncmVnYXRlRXJyb3I7Y2xhc3Mga3R7c3RhdGljIHRvU3RyaW5nKCl7cmV0dXJuImZ1bmN0aW9uIFpvbmVBd2FyZVByb21pc2UoKSB7IFtuYXRpdmUgY29kZV0gfSJ9c3RhdGljIHJlc29sdmUo''@;'; put 'put ''Vyl7cmV0dXJuIFcgaW5zdGFuY2VvZiBrdD9XOkF0KG5ldyB0aGlzKG51bGwpLCEwLFcpfXN0YXRpYyByZWplY3QoVyl7cmV0dXJuIEF0KG5ldyB0aGlzKG51bGwpLEl0LFcpfXN0YXRpYyB3aXRoUmVzb2x2ZXJzKCl7Y29uc3QgVz17fTtyZXR1cm4gVy5wcm9taXNlPW5ldyBrdCgoaixHKT0+''@;'; put 'put ''e1cucmVzb2x2ZT1qLFcucmVqZWN0PUd9KSxXfXN0YXRpYyBhbnkoVyl7aWYoIVd8fCJmdW5jdGlvbiIhPXR5cGVvZiBXW1N5bWJvbC5pdGVyYXRvcl0pcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBadChbXSwiQWxsIHByb21pc2VzIHdlcmUgcmVqZWN0ZWQiKSk7Y29uc3Qgaj1bXTtsZXQg''@;'; put 'put ''Rz0wO3RyeXtmb3IobGV0IGN0IG9mIFcpRysrLGoucHVzaChrdC5yZXNvbHZlKGN0KSl9Y2F0Y2h7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBadChbXSwiQWxsIHByb21pc2VzIHdlcmUgcmVqZWN0ZWQiKSl9aWYoMD09PUcpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBadChbXSwiQWxs''@;'; put 'put ''IHByb21pc2VzIHdlcmUgcmVqZWN0ZWQiKSk7bGV0IHB0PSExO2NvbnN0IE10PVtdO3JldHVybiBuZXcga3QoKGN0LHd0KT0+e2ZvcihsZXQgUnQ9MDtSdDxqLmxlbmd0aDtSdCsrKWpbUnRdLnRoZW4oRnQ9PntwdHx8KHB0PSEwLGN0KEZ0KSl9LEZ0PT57TXQucHVzaChGdCksRy0tLDA9PT1H''@;'; put 'put ''JiYocHQ9ITAsd3QobmV3IFp0KE10LCJBbGwgcHJvbWlzZXMgd2VyZSByZWplY3RlZCIpKSl9KX0pfXN0YXRpYyByYWNlKFcpe2xldCBqLEcscHQ9bmV3IHRoaXMoKHd0LFJ0KT0+e2o9d3QsRz1SdH0pO2Z1bmN0aW9uIE10KHd0KXtqKHd0KX1mdW5jdGlvbiBjdCh3dCl7Ryh3dCl9Zm9yKGxl''@;'; put 'put ''dCB3dCBvZiBXKV90KHd0KXx8KHd0PXRoaXMucmVzb2x2ZSh3dCkpLHd0LnRoZW4oTXQsY3QpO3JldHVybiBwdH1zdGF0aWMgYWxsKFcpe3JldHVybiBrdC5hbGxXaXRoQ2FsbGJhY2soVyl9c3RhdGljIGFsbFNldHRsZWQoVyl7cmV0dXJuKHRoaXMmJnRoaXMucHJvdG90eXBlIGluc3RhbmNl''@;'; put 'put ''b2Yga3Q/dGhpczprdCkuYWxsV2l0aENhbGxiYWNrKFcse3RoZW5DYWxsYmFjazpHPT4oe3N0YXR1czoiZnVsZmlsbGVkIix2YWx1ZTpHfSksZXJyb3JDYWxsYmFjazpHPT4oe3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjpHfSl9KX1zdGF0aWMgYWxsV2l0aENhbGxiYWNrKFcsail7bGV0IEcs''@;'; put 'put ''cHQsTXQ9bmV3IHRoaXMoKEZ0LCR0KT0+e0c9RnQscHQ9JHR9KSxjdD0yLHd0PTA7Y29uc3QgUnQ9W107Zm9yKGxldCBGdCBvZiBXKXtfdChGdCl8fChGdD10aGlzLnJlc29sdmUoRnQpKTtjb25zdCAkdD13dDt0cnl7RnQudGhlbihVdD0+e1J0WyR0XT1qP2oudGhlbkNhbGxiYWNrKFV0KTpV''@;'; put 'put ''dCxjdC0tLDA9PT1jdCYmRyhSdCl9LFV0PT57aj8oUnRbJHRdPWouZXJyb3JDYWxsYmFjayhVdCksY3QtLSwwPT09Y3QmJkcoUnQpKTpwdChVdCl9KX1jYXRjaChVdCl7cHQoVXQpfWN0Kyssd3QrK31yZXR1cm4gY3QtPTIsMD09PWN0JiZHKFJ0KSxNdH1jb25zdHJ1Y3RvcihXKXtjb25zdCBq''@;'; put 'put ''PXRoaXM7aWYoIShqIGluc3RhbmNlb2Yga3QpKXRocm93IG5ldyBFcnJvcigiTXVzdCBiZSBhbiBpbnN0YW5jZW9mIFByb21pc2UuIik7alt2dF09dXQsaltZXT1bXTt0cnl7Y29uc3QgRz1QdCgpO1cmJlcoRyhndChqLCEwKSksRyhndChqLEl0KSkpfWNhdGNoKEcpe0F0KGosITEsRyl9fWdl''@;'; put 'put ''dFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIlByb21pc2UifWdldFtTeW1ib2wuc3BlY2llc10oKXtyZXR1cm4ga3R9dGhlbihXLGope2xldCBHPXRoaXMuY29uc3RydWN0b3I/LltTeW1ib2wuc3BlY2llc107KCFHfHwiZnVuY3Rpb24iIT10eXBlb2YgRykmJihHPXRoaXMuY29uc3Ry''@;'; put 'put ''dWN0b3J8fGt0KTtjb25zdCBwdD1uZXcgRyhFdCksTXQ9Qi5jdXJyZW50O3JldHVybiB0aGlzW3Z0XT09dXQ/dGhpc1tZXS5wdXNoKE10LHB0LFcsaik6Qyh0aGlzLE10LHB0LFcsaikscHR9Y2F0Y2goVyl7cmV0dXJuIHRoaXMudGhlbihudWxsLFcpfWZpbmFsbHkoVyl7bGV0IGo9dGhpcy5j''@;'; put 'put ''b25zdHJ1Y3Rvcj8uW1N5bWJvbC5zcGVjaWVzXTsoIWp8fCJmdW5jdGlvbiIhPXR5cGVvZiBqKSYmKGo9a3QpO2NvbnN0IEc9bmV3IGooRXQpO0dbanRdPWp0O2NvbnN0IHB0PUIuY3VycmVudDtyZXR1cm4gdGhpc1t2dF09PXV0P3RoaXNbWV0ucHVzaChwdCxHLFcsVyk6Qyh0aGlzLHB0LEcs''@;'; put 'put ''VyxXKSxHfX1rdC5yZXNvbHZlPWt0LnJlc29sdmUsa3QucmVqZWN0PWt0LnJlamVjdCxrdC5yYWNlPWt0LnJhY2Usa3QuYWxsPWt0LmFsbDtjb25zdCBtbj1SW3J0XT1SLlByb21pc2U7Ui5Qcm9taXNlPWt0O2NvbnN0IGRuPW90KCJ0aGVuUGF0Y2hlZCIpO2Z1bmN0aW9uIHZuKHope2NvbnN0''@;'; put 'put ''IFc9ei5wcm90b3R5cGUsaj1OKFcsInRoZW4iKTtpZihqJiYoITE9PT1qLndyaXRhYmxlfHwhai5jb25maWd1cmFibGUpKXJldHVybjtjb25zdCBHPVcudGhlbjtXW3h0XT1HLHoucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24ocHQsTXQpe3JldHVybiBuZXcga3QoKHd0LFJ0KT0+e0cuY2FsbCh0''@;'; put 'put ''aGlzLHd0LFJ0KX0pLnRoZW4ocHQsTXQpfSx6W2RuXT0hMH1yZXR1cm4gTy5wYXRjaFRoZW49dm4sbW4mJih2bihtbiksZHQoUiwiZmV0Y2giLHo9PmZ1bmN0aW9uIHVuKHope3JldHVybiBmdW5jdGlvbihXLGope2xldCBHPXouYXBwbHkoVyxqKTtpZihHIGluc3RhbmNlb2Yga3QpcmV0dXJu''@;'; put 'put ''IEc7bGV0IHB0PUcuY29uc3RydWN0b3I7cmV0dXJuIHB0W2RuXXx8dm4ocHQpLEd9fSh6KSkpLFByb21pc2VbQi5fX3N5bWJvbF9fKCJ1bmNhdWdodFByb21pc2VFcnJvcnMiKV09ZnQsa3R9KX0pKFMpLGZ1bmN0aW9uIHp0KFMpe1MuX19sb2FkX3BhdGNoKCJ0b1N0cmluZyIsUj0+e2NvbnN0''@;'; put 'put ''IEI9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLE89eCgiT3JpZ2luYWxEZWxlZ2F0ZSIpLE49eCgiUHJvbWlzZSIpLEo9eCgiRXJyb3IiKSxzdD1mdW5jdGlvbigpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzKXtjb25zdCBydD10aGlzW09dO2lmKHJ0KXJldHVybiJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBydD9CLmNhbGwocnQpOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChydCk7aWYodGhpcz09PVByb21pc2Upe2NvbnN0IHh0PVJbTl07aWYoeHQpcmV0dXJuIEIuY2FsbCh4dCl9aWYodGhpcz09PUVycm9yKXtjb25zdCB4dD1SW0pdO2lmKHh0KXJldHVybiBCLmNhbGwo''@;'; put 'put ''eHQpfX1yZXR1cm4gQi5jYWxsKHRoaXMpfTtzdFtPXT1CLEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZz1zdDtjb25zdCBvdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO09iamVjdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgUHJv''@;'; put 'put ''bWlzZSYmdGhpcyBpbnN0YW5jZW9mIFByb21pc2U/IltvYmplY3QgUHJvbWlzZV0iOm90LmNhbGwodGhpcyl9fSl9KFMpLGZ1bmN0aW9uIHJuKFMpe1MuX19sb2FkX3BhdGNoKCJ1dGlsIiwoUixCLE8pPT57Y29uc3QgTj1fKFIpO08ucGF0Y2hPblByb3BlcnRpZXM9ZXQsTy5wYXRjaE1ldGhv''@;'; put 'put ''ZD1kdCxPLmJpbmRBcmd1bWVudHM9VCxPLnBhdGNoTWFjcm9UYXNrPUN0O2NvbnN0IEo9Qi5fX3N5bWJvbF9fKCJCTEFDS19MSVNURURfRVZFTlRTIiksc3Q9Qi5fX3N5bWJvbF9fKCJVTlBBVENIRURfRVZFTlRTIik7UltzdF0mJihSW0pdPVJbc3RdKSxSW0pdJiYoQltKXT1CW3N0XT1SW0pd''@;'; put 'put ''KSxPLnBhdGNoRXZlbnRQcm90b3R5cGU9VG4sTy5wYXRjaEV2ZW50VGFyZ2V0PW5uLE8uaXNJRU9yRWRnZT1hbixPLk9iamVjdERlZmluZVByb3BlcnR5PXMsTy5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I9ZSxPLk9iamVjdENyZWF0ZT11LE8uQXJyYXlTbGljZT1sLE8ucGF0Y2hD''@;'; put 'put ''bGFzcz1sdCxPLndyYXBXaXRoQ3VycmVudFpvbmU9RCxPLmZpbHRlclByb3BlcnRpZXM9JCxPLmF0dGFjaE9yaWdpblRvUGF0Y2hlZD1PdCxPLl9yZWRlZmluZVByb3BlcnR5PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxPLnBhdGNoQ2FsbGJhY2tzPXF0LE8uZ2V0R2xvYmFsT2JqZWN0cz0oKT0+''@;'; put 'put ''KHtnbG9iYWxTb3VyY2VzOnBuLHpvbmVTeW1ib2xFdmVudE5hbWVzOll0LGV2ZW50TmFtZXM6Tixpc0Jyb3dzZXI6bnQsaXNNaXg6dHQsaXNOb2RlOlosVFJVRV9TVFI6eSxGQUxTRV9TVFI6RSxaT05FX1NZTUJPTF9QUkVGSVg6ZyxBRERfRVZFTlRfTElTVEVORVJfU1RSOmksUkVNT1ZFX0VW''@;'; put 'put ''RU5UX0xJU1RFTkVSX1NUUjp2fSl9KX0oUyl9KShSbiksZnVuY3Rpb24gUShTKXtTLl9fbG9hZF9wYXRjaCgibGVnYWN5IixSPT57Y29uc3QgQj1SW1MuX19zeW1ib2xfXygibGVnYWN5UGF0Y2giKV07QiYmQigpfSksUy5fX2xvYWRfcGF0Y2goInRpbWVycyIsUj0+e2NvbnN0IEI9InNldCIs''@;'; put 'put ''Tz0iY2xlYXIiO2EoUixCLE8sIlRpbWVvdXQiKSxhKFIsQixPLCJJbnRlcnZhbCIpLGEoUixCLE8sIkltbWVkaWF0ZSIpfSksUy5fX2xvYWRfcGF0Y2goInJlcXVlc3RBbmltYXRpb25GcmFtZSIsUj0+e2EoUiwicmVxdWVzdCIsImNhbmNlbCIsIkFuaW1hdGlvbkZyYW1lIiksYShSLCJtb3pS''@;'; put 'put ''ZXF1ZXN0IiwibW96Q2FuY2VsIiwiQW5pbWF0aW9uRnJhbWUiKSxhKFIsIndlYmtpdFJlcXVlc3QiLCJ3ZWJraXRDYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpfSksUy5fX2xvYWRfcGF0Y2goImJsb2NraW5nIiwoUixCKT0+e2NvbnN0IE89WyJhbGVydCIsInByb21wdCIsImNvbmZpcm0iXTtm''@;'; put 'put ''b3IobGV0IE49MDtOPE8ubGVuZ3RoO04rKylkdChSLE9bTl0sKHN0LG90LGZ0KT0+ZnVuY3Rpb24oU3QscnQpe3JldHVybiBCLmN1cnJlbnQucnVuKHN0LFIscnQsZnQpfSl9KSxTLl9fbG9hZF9wYXRjaCgiRXZlbnRUYXJnZXQiLChSLEIsTyk9PnsoZnVuY3Rpb24gSyhTLFIpe1IucGF0Y2hF''@;'; put 'put ''dmVudFByb3RvdHlwZShTLFIpfSkoUixPKSxmdW5jdGlvbiB3KFMsUil7aWYoWm9uZVtSLnN5bWJvbCgicGF0Y2hFdmVudFRhcmdldCIpXSlyZXR1cm47Y29uc3R7ZXZlbnROYW1lczpCLHpvbmVTeW1ib2xFdmVudE5hbWVzOk8sVFJVRV9TVFI6TixGQUxTRV9TVFI6SixaT05FX1NZTUJPTF9Q''@;'; put 'put ''UkVGSVg6c3R9PVIuZ2V0R2xvYmFsT2JqZWN0cygpO2ZvcihsZXQgZnQ9MDtmdDxCLmxlbmd0aDtmdCsrKXtjb25zdCBTdD1CW2Z0XSxidD1zdCsoU3QrSiksQnQ9c3QrKFN0K04pO09bU3RdPXt9LE9bU3RdW0pdPWJ0LE9bU3RdW05dPUJ0fWNvbnN0IG90PVMuRXZlbnRUYXJnZXQ7b3QmJm90''@;'; put 'put ''LnByb3RvdHlwZSYmUi5wYXRjaEV2ZW50VGFyZ2V0KFMsUixbb3QmJm90LnByb3RvdHlwZV0pfShSLE8pO2NvbnN0IE49Ui5YTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0O04mJk4ucHJvdG90eXBlJiZPLnBhdGNoRXZlbnRUYXJnZXQoUixPLFtOLnByb3RvdHlwZV0pfSksUy5fX2xvYWRfcGF0''@;'; put 'put ''Y2goIk11dGF0aW9uT2JzZXJ2ZXIiLChSLEIsTyk9PntsdCgiTXV0YXRpb25PYnNlcnZlciIpLGx0KCJXZWJLaXRNdXRhdGlvbk9ic2VydmVyIil9KSxTLl9fbG9hZF9wYXRjaCgiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLChSLEIsTyk9PntsdCgiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiKX0pLFMu''@;'; put 'put ''X19sb2FkX3BhdGNoKCJGaWxlUmVhZGVyIiwoUixCLE8pPT57bHQoIkZpbGVSZWFkZXIiKX0pLFMuX19sb2FkX3BhdGNoKCJvbl9wcm9wZXJ0eSIsKFIsQixPKT0+eyFmdW5jdGlvbiBIKFMsUil7aWYoWiYmIXR0fHxab25lW1Muc3ltYm9sKCJwYXRjaEV2ZW50cyIpXSlyZXR1cm47Y29uc3Qg''@;'; put 'put ''Qj1SLl9fWm9uZV9pZ25vcmVfb25fcHJvcGVydGllcztsZXQgTz1bXTtpZihudCl7Y29uc3QgTj13aW5kb3c7Tz1PLmNvbmNhdChbIkRvY3VtZW50IiwiU1ZHRWxlbWVudCIsIkVsZW1lbnQiLCJIVE1MRWxlbWVudCIsIkhUTUxCb2R5RWxlbWVudCIsIkhUTUxNZWRpYUVsZW1lbnQiLCJIVE1M''@;'; put 'put ''RnJhbWVTZXRFbGVtZW50IiwiSFRNTEZyYW1lRWxlbWVudCIsIkhUTUxJRnJhbWVFbGVtZW50IiwiSFRNTE1hcnF1ZWVFbGVtZW50IiwiV29ya2VyIl0pO2NvbnN0IEo9W107RHQoTixfKE4pLEImJkIuY29uY2F0KEopLG8oTikpfU89Ty5jb25jYXQoWyJYTUxIdHRwUmVxdWVzdCIsIlhNTEh0''@;'; put 'put ''dHBSZXF1ZXN0RXZlbnRUYXJnZXQiLCJJREJJbmRleCIsIklEQlJlcXVlc3QiLCJJREJPcGVuREJSZXF1ZXN0IiwiSURCRGF0YWJhc2UiLCJJREJUcmFuc2FjdGlvbiIsIklEQkN1cnNvciIsIldlYlNvY2tldCJdKTtmb3IobGV0IE49MDtOPE8ubGVuZ3RoO04rKyl7Y29uc3QgSj1SW09bTl1d''@;'; put 'put ''O0o/LnByb3RvdHlwZSYmRHQoSi5wcm90b3R5cGUsXyhKLnByb3RvdHlwZSksQil9fShPLFIpfSksUy5fX2xvYWRfcGF0Y2goImN1c3RvbUVsZW1lbnRzIiwoUixCLE8pPT57IWZ1bmN0aW9uIG0oUyxSKXtjb25zdHtpc0Jyb3dzZXI6Qixpc01peDpPfT1SLmdldEdsb2JhbE9iamVjdHMoKTso''@;'; put 'put ''Qnx8TykmJlMuY3VzdG9tRWxlbWVudHMmJiJjdXN0b21FbGVtZW50cyJpbiBTJiZSLnBhdGNoQ2FsbGJhY2tzKFIsUy5jdXN0b21FbGVtZW50cywiY3VzdG9tRWxlbWVudHMiLCJkZWZpbmUiLFsiY29ubmVjdGVkQ2FsbGJhY2siLCJkaXNjb25uZWN0ZWRDYWxsYmFjayIsImFkb3B0ZWRDYWxs''@;'; put 'put ''YmFjayIsImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayIsImZvcm1Bc3NvY2lhdGVkQ2FsbGJhY2siLCJmb3JtRGlzYWJsZWRDYWxsYmFjayIsImZvcm1SZXNldENhbGxiYWNrIiwiZm9ybVN0YXRlUmVzdG9yZUNhbGxiYWNrIl0pfShSLE8pfSksUy5fX2xvYWRfcGF0Y2goIlhIUiIsKFIsQik9''@;'; put 'put ''PnshZnVuY3Rpb24gU3QocnQpe2NvbnN0IHh0PXJ0LlhNTEh0dHBSZXF1ZXN0O2lmKCF4dClyZXR1cm47Y29uc3QgYnQ9eHQucHJvdG90eXBlO2xldCBIdD1idFtwXSxfdD1idFtkXTtpZighSHQpe2NvbnN0IFR0PXJ0LlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQ7aWYoVHQpe2NvbnN0IGd0''@;'; put 'put ''PVR0LnByb3RvdHlwZTtIdD1ndFtwXSxfdD1ndFtkXX19Y29uc3QgdG49InJlYWR5c3RhdGVjaGFuZ2UiLFZ0PSJzY2hlZHVsZWQiO2Z1bmN0aW9uIHZ0KFR0KXtjb25zdCBndD1UdC5kYXRhLFB0PWd0LnRhcmdldDtQdFtzdF09ITEsUHRbZnRdPSExO2NvbnN0IGVuPVB0W0pdO0h0fHwoSHQ9''@;'; put 'put ''UHRbcF0sX3Q9UHRbZF0pLGVuJiZfdC5jYWxsKFB0LHRuLGVuKTtjb25zdCBKdD1QdFtKXT0oKT0+e2lmKFB0LnJlYWR5U3RhdGU9PT1QdC5ET05FKWlmKCFndC5hYm9ydGVkJiZQdFtzdF0mJlR0LnN0YXRlPT09VnQpe2NvbnN0IGF0PVB0W0IuX19zeW1ib2xfXygibG9hZGZhbHNlIildO2lm''@;'; put 'put ''KDAhPT1QdC5zdGF0dXMmJmF0JiZhdC5sZW5ndGg+MCl7Y29uc3QgST1UdC5pbnZva2U7VHQuaW52b2tlPWZ1bmN0aW9uKCl7Y29uc3QgQz1QdFtCLl9fc3ltYm9sX18oImxvYWRmYWxzZSIpXTtmb3IobGV0IGh0PTA7aHQ8Qy5sZW5ndGg7aHQrKylDW2h0XT09PVR0JiZDLnNwbGljZShodCwx''@;'; put 'put ''KTshZ3QuYWJvcnRlZCYmVHQuc3RhdGU9PT1WdCYmSS5jYWxsKFR0KX0sYXQucHVzaChUdCl9ZWxzZSBUdC5pbnZva2UoKX1lbHNlIWd0LmFib3J0ZWQmJiExPT09UHRbc3RdJiYoUHRbZnRdPSEwKX07cmV0dXJuIEh0LmNhbGwoUHQsdG4sSnQpLFB0W09dfHwoUHRbT109VHQpLFd0LmFwcGx5''@;'; put 'put ''KFB0LGd0LmFyZ3MpLFB0W3N0XT0hMCxUdH1mdW5jdGlvbiBZKCl7fWZ1bmN0aW9uIGp0KFR0KXtjb25zdCBndD1UdC5kYXRhO3JldHVybiBndC5hYm9ydGVkPSEwLEl0LmFwcGx5KGd0LnRhcmdldCxndC5hcmdzKX1jb25zdCBMdD1kdChidCwib3BlbiIsKCk9PmZ1bmN0aW9uKFR0LGd0KXty''@;'; put 'put ''ZXR1cm4gVHRbTl09MD09Z3RbMl0sVHRbb3RdPWd0WzFdLEx0LmFwcGx5KFR0LGd0KX0pLEt0PXgoImZldGNoVGFza0Fib3J0aW5nIiksdXQ9eCgiZmV0Y2hUYXNrU2NoZWR1bGluZyIpLFd0PWR0KGJ0LCJzZW5kIiwoKT0+ZnVuY3Rpb24oVHQsZ3Qpe2lmKCEwPT09Qi5jdXJyZW50W3V0XXx8''@;'; put 'put ''VHRbTl0pcmV0dXJuIFd0LmFwcGx5KFR0LGd0KTt7Y29uc3QgUHQ9e3RhcmdldDpUdCx1cmw6VHRbb3RdLGlzUGVyaW9kaWM6ITEsYXJnczpndCxhYm9ydGVkOiExfSxlbj1GKCJYTUxIdHRwUmVxdWVzdC5zZW5kIixZLFB0LHZ0LGp0KTtUdCYmITA9PT1UdFtmdF0mJiFQdC5hYm9ydGVkJiZl''@;'; put 'put ''bi5zdGF0ZT09PVZ0JiZlbi5pbnZva2UoKX19KSxJdD1kdChidCwiYWJvcnQiLCgpPT5mdW5jdGlvbihUdCxndCl7Y29uc3QgUHQ9ZnVuY3Rpb24gQnQoVHQpe3JldHVybiBUdFtPXX0oVHQpO2lmKFB0JiYic3RyaW5nIj09dHlwZW9mIFB0LnR5cGUpe2lmKG51bGw9PVB0LmNhbmNlbEZufHxQ''@;'; put 'put ''dC5kYXRhJiZQdC5kYXRhLmFib3J0ZWQpcmV0dXJuO1B0LnpvbmUuY2FuY2VsVGFzayhQdCl9ZWxzZSBpZighMD09PUIuY3VycmVudFtLdF0pcmV0dXJuIEl0LmFwcGx5KFR0LGd0KX0pfShSKTtjb25zdCBPPXgoInhoclRhc2siKSxOPXgoInhoclN5bmMiKSxKPXgoInhockxpc3RlbmVyIiks''@;'; put 'put ''c3Q9eCgieGhyU2NoZWR1bGVkIiksb3Q9eCgieGhyVVJMIiksZnQ9eCgieGhyRXJyb3JCZWZvcmVTY2hlZHVsZWQiKX0pLFMuX19sb2FkX3BhdGNoKCJnZW9sb2NhdGlvbiIsUj0+e1IubmF2aWdhdG9yJiZSLm5hdmlnYXRvci5nZW9sb2NhdGlvbiYmZnVuY3Rpb24gYihTLFIpe2NvbnN0IEI9''@;'; put 'put ''Uy5jb25zdHJ1Y3Rvci5uYW1lO2ZvcihsZXQgTz0wO088Ui5sZW5ndGg7TysrKXtjb25zdCBOPVJbT10sSj1TW05dO2lmKEope2lmKCFMKGUoUyxOKSkpY29udGludWU7U1tOXT0ob3Q9Pntjb25zdCBmdD1mdW5jdGlvbigpe3JldHVybiBvdC5hcHBseSh0aGlzLFQoYXJndW1lbnRzLEIrIi4i''@;'; put 'put ''K04pKX07cmV0dXJuIE90KGZ0LG90KSxmdH0pKEopfX19KFIubmF2aWdhdG9yLmdlb2xvY2F0aW9uLFsiZ2V0Q3VycmVudFBvc2l0aW9uIiwid2F0Y2hQb3NpdGlvbiJdKX0pLFMuX19sb2FkX3BhdGNoKCJQcm9taXNlUmVqZWN0aW9uRXZlbnQiLChSLEIpPT57ZnVuY3Rpb24gTyhOKXtyZXR1''@;'; put 'put ''cm4gZnVuY3Rpb24oSil7eW4oUixOKS5mb3JFYWNoKG90PT57Y29uc3QgZnQ9Ui5Qcm9taXNlUmVqZWN0aW9uRXZlbnQ7aWYoZnQpe2NvbnN0IFN0PW5ldyBmdChOLHtwcm9taXNlOkoucHJvbWlzZSxyZWFzb246Si5yZWplY3Rpb259KTtvdC5pbnZva2UoU3QpfX0pfX1SLlByb21pc2VSZWpl''@;'; put 'put ''Y3Rpb25FdmVudCYmKEJbeCgidW5oYW5kbGVkUHJvbWlzZVJlamVjdGlvbkhhbmRsZXIiKV09TygidW5oYW5kbGVkcmVqZWN0aW9uIiksQlt4KCJyZWplY3Rpb25IYW5kbGVkSGFuZGxlciIpXT1PKCJyZWplY3Rpb25oYW5kbGVkIikpfSksUy5fX2xvYWRfcGF0Y2goInF1ZXVlTWljcm90YXNr''@;'; put 'put ''IiwoUixCLE8pPT57IWZ1bmN0aW9uIGgoUyxSKXtSLnBhdGNoTWV0aG9kKFMsInF1ZXVlTWljcm90YXNrIixCPT5mdW5jdGlvbihPLE4pe1pvbmUuY3VycmVudC5zY2hlZHVsZU1pY3JvVGFzaygicXVldWVNaWNyb3Rhc2siLE5bMF0pfSl9KFIsTyl9KX0oUm4pfSw5NzA3NTooYyxmLHQpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg2MzM4Nykscz10KDE4MjcwKSxvPXQoNzk0NDgpLHU9W10uc29ydCxsPVsxLDIsM107bihuLlArbi5GKihvKGZ1bmN0aW9uKCl7bC5zb3J0KHZvaWQgMCl9KXx8IW8oZnVuY3Rpb24oKXtsLnNvcnQobnVsbCl9KXx8IXQoODY4ODQpKHUp''@;'; put 'put ''KSwiQXJyYXkiLHtzb3J0OmZ1bmN0aW9uKHYpe3JldHVybiB2b2lkIDA9PT12P3UuY2FsbChzKHRoaXMpKTp1LmNhbGwocyh0aGlzKSxlKHYpKX19KX0sOTczNjg6KGMsZix0KT0+e3ZhciBuPXQoNDIyOCk7Yy5leHBvcnRzPWZ1bmN0aW9uKGUscyxvLHUpe3RyeXtyZXR1cm4gdT9zKG4obylb''@;'; put 'put ''MF0sb1sxXSk6cyhvKX1jYXRjaChpKXt2YXIgbD1lLnJldHVybjt0aHJvdyB2b2lkIDAhPT1sJiZuKGwuY2FsbChlKSksaX19fSw5NzM4MDooYyxmLHQpPT57dmFyIG49dCg5MzM4NiksZT10KDkyMTI3KSxzPXQoNDQ1NTYpKCJtZXRhZGF0YSIpLG89cy5zdG9yZXx8KHMuc3RvcmU9bmV3KHQo''@;'; put 'put ''NzkzOTcpKSksdT1mdW5jdGlvbihFLGcsRCl7dmFyIEY9by5nZXQoRSk7aWYoIUYpe2lmKCFEKXJldHVybjtvLnNldChFLEY9bmV3IG4pfXZhciB4PUYuZ2V0KGcpO2lmKCF4KXtpZighRClyZXR1cm47Ri5zZXQoZyx4PW5ldyBuKX1yZXR1cm4geH07Yy5leHBvcnRzPXtzdG9yZTpvLG1hcDp1''@;'; put 'put ''LGhhczpmdW5jdGlvbihFLGcsRCl7dmFyIEY9dShnLEQsITEpO3JldHVybiB2b2lkIDAhPT1GJiZGLmhhcyhFKX0sZ2V0OmZ1bmN0aW9uKEUsZyxEKXt2YXIgRj11KGcsRCwhMSk7cmV0dXJuIHZvaWQgMD09PUY/dm9pZCAwOkYuZ2V0KEUpfSxzZXQ6ZnVuY3Rpb24oRSxnLEQsRil7dShELEYs''@;'; put 'put ''ITApLnNldChFLGcpfSxrZXlzOmZ1bmN0aW9uKEUsZyl7dmFyIEQ9dShFLGcsITEpLEY9W107cmV0dXJuIEQmJkQuZm9yRWFjaChmdW5jdGlvbih4LEEpe0YucHVzaChBKX0pLEZ9LGtleTpmdW5jdGlvbihFKXtyZXR1cm4gdm9pZCAwPT09RXx8InN5bWJvbCI9PXR5cGVvZiBFP0U6U3RyaW5n''@;'; put 'put ''KEUpfSxleHA6ZnVuY3Rpb24oRSl7ZShlLlMsIlJlZmxlY3QiLEUpfX19LDk4MTc1OihjLGYsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCgyMjc1MCksZT10KDkyMTI3KSxzPXQoMjg4NTkpLG89dCgzMzM0MSksdT10KDYwOTA2KSxsPXQoNjAzMiksaT10KDM4NDQpLHY9dCg0MDYyNykscD10''@;'; put 'put ''KDY3NTc0KSgiaXRlcmF0b3IiKSxkPSEoW10ua2V5cyYmIm5leHQiaW5bXS5rZXlzKCkpLEU9ImtleXMiLGc9InZhbHVlcyIsRD1mdW5jdGlvbigpe3JldHVybiB0aGlzfTtjLmV4cG9ydHM9ZnVuY3Rpb24oRix4LEEsayxQLE0sVCl7bChBLHgsayk7dmFyIFgsZXQsVixiPWZ1bmN0aW9uKGx0''@;'; put 'put ''KXtpZighZCYmbHQgaW4gbnQpcmV0dXJuIG50W2x0XTtzd2l0Y2gobHQpe2Nhc2UgRTpjYXNlIGc6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBBKHRoaXMsbHQpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEEodGhpcyxsdCl9fSxMPXgrIiBJdGVyYXRvciIsVT1QPT1nLFo9''@;'; put 'put ''ITEsbnQ9Ri5wcm90b3R5cGUsdHQ9bnRbcF18fG50WyJAQGl0ZXJhdG9yIl18fFAmJm50W1BdLHl0PXR0fHxiKFApLG10PVA/VT9iKCJlbnRyaWVzIik6eXQ6dm9pZCAwLHE9IkFycmF5Ij09eCYmbnQuZW50cmllc3x8dHQ7aWYocSYmKFY9dihxLmNhbGwobmV3IEYpKSkhPT1PYmplY3QucHJv''@;'; put 'put ''dG90eXBlJiZWLm5leHQmJihpKFYsTCwhMCksIW4mJiJmdW5jdGlvbiIhPXR5cGVvZiBWW3BdJiZvKFYscCxEKSksVSYmdHQmJnR0Lm5hbWUhPT1nJiYoWj0hMCx5dD1mdW5jdGlvbigpe3JldHVybiB0dC5jYWxsKHRoaXMpfSksKCFufHxUKSYmKGR8fFp8fCFudFtwXSkmJm8obnQscCx5dCks''@;'; put 'put ''dVt4XT15dCx1W0xdPUQsUClpZihYPXt2YWx1ZXM6VT95dDpiKGcpLGtleXM6TT95dDpiKEUpLGVudHJpZXM6bXR9LFQpZm9yKGV0IGluIFgpZXQgaW4gbnR8fHMobnQsZXQsWFtldF0pO2Vsc2UgZShlLlArZS5GKihkfHxaKSx4LFgpO3JldHVybiBYfX0sOTg4ODA6KGMsZix0KT0+e3ZhciBu''@;'; put 'put ''PXQoNDMzMDUpLGU9dCgyNTE3MCkuc2V0O2MuZXhwb3J0cz1mdW5jdGlvbihzLG8sdSl7dmFyIGksbD1vLmNvbnN0cnVjdG9yO3JldHVybiBsIT09dSYmImZ1bmN0aW9uIj09dHlwZW9mIGwmJihpPWwucHJvdG90eXBlKSE9PXUucHJvdG90eXBlJiZuKGkpJiZlJiZlKHMsaSksc319LDk4OTMx''@;'; put 'put ''OihjLGYsdCk9Pnt2YXIgbj10KDY3NTc0KSgiaXRlcmF0b3IiKSxlPSExO3RyeXt2YXIgcz1bN11bbl0oKTtzLnJldHVybj1mdW5jdGlvbigpe2U9ITB9LEFycmF5LmZyb20ocyxmdW5jdGlvbigpe3Rocm93IDJ9KX1jYXRjaHt9Yy5leHBvcnRzPWZ1bmN0aW9uKG8sdSl7aWYoIXUmJiFlKXJl''@;'; put 'put ''dHVybiExO3ZhciBsPSExO3RyeXt2YXIgaT1bN10sdj1pW25dKCk7di5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6bD0hMH19LGlbbl09ZnVuY3Rpb24oKXtyZXR1cm4gdn0sbyhpKX1jYXRjaHt9cmV0dXJuIGx9fSw5OTEzNDooYyxmLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDc1NTUx''@;'; put 'put ''KSxzPU1hdGguZXhwO24obi5TK24uRip0KDc5NDQ4KShmdW5jdGlvbigpe3JldHVybi0yZS0xNyE9IU1hdGguc2luaCgtMmUtMTcpfSksIk1hdGgiLHtzaW5oOmZ1bmN0aW9uKHUpe3JldHVybiBNYXRoLmFicyh1PSt1KTwxPyhlKHUpLWUoLXUpKS8yOihzKHUtMSktcygtdS0xKSkqKE1hdGgu''@;'; put 'put ''RS8yKX19KX0sOTk2NTA6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDY3NTI2KSxlPXQoNTc5MTcpLHM9dCgxNzYzKSxvPXQoOTIxMjcpLHU9dCgyODg1OSksbD10KDEyOTg4KS5LRVksaT10KDc5NDQ4KSx2PXQoNDQ1NTYpLHA9dCgzODQ0KSxkPXQoNDQxNSkseT10KDY3NTc0KSxF''@;'; put 'put ''PXQoNDc5NjApLGc9dCgyMzAxMSksRD10KDE1OTY5KSxGPXQoNzc5ODEpLHg9dCg0MjI4KSxBPXQoNDMzMDUpLGs9dCgxODI3MCksUD10KDU3MjIxKSxNPXQoODMwNDgpLFQ9dCgxMTk5NiksYj10KDg0NzE5KSxMPXQoNDc2NSksVT10KDY4NjQxKSxaPXQoMTA2MCksbnQ9dCg0Nzk2NyksdHQ9''@;'; put 'put ''dCg1MTMxMSkseXQ9VS5mLG10PW50LmYscT1MLmYsWD1uLlN5bWJvbCxldD1uLkpTT04sVj1ldCYmZXQuc3RyaW5naWZ5LGx0PSJwcm90b3R5cGUiLGR0PXkoIl9oaWRkZW4iKSxDdD15KCJ0b1ByaW1pdGl2ZSIpLE90PXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLE50PXYoInN5bWJvbC1yZWdp''@;'; put 'put ''c3RyeSIpLFF0PXYoInN5bWJvbHMiKSxhbj12KCJvcC1zeW1ib2xzIiksR3Q9T2JqZWN0W2x0XSxzbj0iZnVuY3Rpb24iPT10eXBlb2YgWCYmISFaLmYsRW49bi5RT2JqZWN0LFl0PSFFbnx8IUVuW2x0XXx8IUVuW2x0XS5maW5kQ2hpbGQscG49cyYmaShmdW5jdGlvbigpe3JldHVybiA3IT1i''@;'; put 'put ''KG10KHt9LCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG10KHRoaXMsImEiLHt2YWx1ZTo3fSkuYX19KSkuYX0pP2Z1bmN0aW9uKF8sSCxRKXt2YXIgaXQ9eXQoR3QsSCk7aXQmJmRlbGV0ZSBHdFtIXSxtdChfLEgsUSksaXQmJl8hPT1HdCYmbXQoR3QsSCxpdCl9Om10LHhuPWZ1bmN0aW9u''@;'; put 'put ''KF8pe3ZhciBIPVF0W19dPWIoWFtsdF0pO3JldHVybiBILl9rPV8sSH0saG49c24mJiJzeW1ib2wiPT10eXBlb2YgWC5pdGVyYXRvcj9mdW5jdGlvbihfKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIF99OmZ1bmN0aW9uKF8pe3JldHVybiBfIGluc3RhbmNlb2YgWH0sb249ZnVuY3Rpb24oSCxR''@;'; put 'put ''LGl0KXtyZXR1cm4gSD09PUd0JiZvbihhbixRLGl0KSx4KEgpLFE9TShRLCEwKSx4KGl0KSxlKFF0LFEpPyhpdC5lbnVtZXJhYmxlPyhlKEgsZHQpJiZIW2R0XVtRXSYmKEhbZHRdW1FdPSExKSxpdD1iKGl0LHtlbnVtZXJhYmxlOlQoMCwhMSl9KSk6KGUoSCxkdCl8fG10KEgsZHQsVCgxLHt9''@;'; put 'put ''KSksSFtkdF1bUV09ITApLHBuKEgsUSxpdCkpOm10KEgsUSxpdCl9LG5uPWZ1bmN0aW9uKEgsUSl7eChIKTtmb3IodmFyIHJuLGl0PUQoUT1QKFEpKSx6dD0wLHF0PWl0Lmxlbmd0aDtxdD56dDspb24oSCxybj1pdFt6dCsrXSxRW3JuXSk7cmV0dXJuIEh9LFRuPWZ1bmN0aW9uKEgpe3ZhciBR''@;'; put 'put ''PU90LmNhbGwodGhpcyxIPU0oSCwhMCkpO3JldHVybiEodGhpcz09PUd0JiZlKFF0LEgpJiYhZShhbixIKSkmJighKFF8fCFlKHRoaXMsSCl8fCFlKFF0LEgpfHxlKHRoaXMsZHQpJiZ0aGlzW2R0XVtIXSl8fFEpfSxoPWZ1bmN0aW9uKEgsUSl7aWYoSD1QKEgpLFE9TShRLCEwKSxIIT09R3R8''@;'; put 'put ''fCFlKFF0LFEpfHxlKGFuLFEpKXt2YXIgaXQ9eXQoSCxRKTtyZXR1cm4gaXQmJmUoUXQsUSkmJiEoZShILGR0KSYmSFtkdF1bUV0pJiYoaXQuZW51bWVyYWJsZT0hMCksaXR9fSxyPWZ1bmN0aW9uKEgpe2Zvcih2YXIgcXQsUT1xKFAoSCkpLGl0PVtdLHp0PTA7US5sZW5ndGg+enQ7KSFlKFF0''@;'; put 'put ''LHF0PVFbenQrK10pJiZxdCE9ZHQmJnF0IT1sJiZpdC5wdXNoKHF0KTtyZXR1cm4gaXR9LGE9ZnVuY3Rpb24oSCl7Zm9yKHZhciBybixRPUg9PT1HdCxpdD1xKFE/YW46UChIKSksenQ9W10scXQ9MDtpdC5sZW5ndGg+cXQ7KWUoUXQscm49aXRbcXQrK10pJiYoIVF8fGUoR3Qscm4pKSYmenQu''@;'; put 'put ''cHVzaChRdFtybl0pO3JldHVybiB6dH07c258fCh1KChYPWZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIFgpdGhyb3cgVHlwZUVycm9yKCJTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhIik7dmFyIEg9ZChhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCksUT1m''@;'; put 'put ''dW5jdGlvbihpdCl7dGhpcz09PUd0JiZRLmNhbGwoYW4saXQpLGUodGhpcyxkdCkmJmUodGhpc1tkdF0sSCkmJih0aGlzW2R0XVtIXT0hMSkscG4odGhpcyxILFQoMSxpdCkpfTtyZXR1cm4gcyYmWXQmJnBuKEd0LEgse2NvbmZpZ3VyYWJsZTohMCxzZXQ6UX0pLHhuKEgpfSlbbHRdLCJ0b1N0''@;'; put 'put ''cmluZyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fa30pLFUuZj1oLG50LmY9b24sdCg1OTQxNSkuZj1MLmY9cix0KDg0NDkpLmY9VG4sWi5mPWEscyYmIXQoMjI3NTApJiZ1KEd0LCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsVG4sITApLEUuZj1mdW5jdGlvbihfKXtyZXR1cm4geG4oeShfKSl9''@;'; put 'put ''KSxvKG8uRytvLlcrby5GKiFzbix7U3ltYm9sOlh9KTtmb3IodmFyIG09Imhhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzIi5zcGxpdCgiLCIp''@;'; put 'put ''LHc9MDttLmxlbmd0aD53Oyl5KG1bdysrXSk7Zm9yKHZhciBLPXR0KHkuc3RvcmUpLCQ9MDtLLmxlbmd0aD4kOylnKEtbJCsrXSk7byhvLlMrby5GKiFzbiwiU3ltYm9sIix7Zm9yOmZ1bmN0aW9uKF8pe3JldHVybiBlKE50LF8rPSIiKT9OdFtfXTpOdFtfXT1YKF8pfSxrZXlGb3I6ZnVuY3Rp''@;'; put 'put ''b24oSCl7aWYoIWhuKEgpKXRocm93IFR5cGVFcnJvcihIKyIgaXMgbm90IGEgc3ltYm9sISIpO2Zvcih2YXIgUSBpbiBOdClpZihOdFtRXT09PUgpcmV0dXJuIFF9LHVzZVNldHRlcjpmdW5jdGlvbigpe1l0PSEwfSx1c2VTaW1wbGU6ZnVuY3Rpb24oKXtZdD0hMX19KSxvKG8uUytvLkYqIXNu''@;'; put 'put ''LCJPYmplY3QiLHtjcmVhdGU6ZnVuY3Rpb24oSCxRKXtyZXR1cm4gdm9pZCAwPT09UT9iKEgpOm5uKGIoSCksUSl9LGRlZmluZVByb3BlcnR5Om9uLGRlZmluZVByb3BlcnRpZXM6bm4sZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOmgsZ2V0T3duUHJvcGVydHlOYW1lczpyLGdldE93blByb3Bl''@;'; put 'put ''cnR5U3ltYm9sczphfSk7dmFyIER0PWkoZnVuY3Rpb24oKXtaLmYoMSl9KTtvKG8uUytvLkYqRHQsIk9iamVjdCIse2dldE93blByb3BlcnR5U3ltYm9sczpmdW5jdGlvbihIKXtyZXR1cm4gWi5mKGsoSCkpfX0pLGV0JiZvKG8uUytvLkYqKCFzbnx8aShmdW5jdGlvbigpe3ZhciBfPVgoKTty''@;'; put 'put ''ZXR1cm4iW251bGxdIiE9VihbX10pfHwie30iIT1WKHthOl99KXx8Int9IiE9VihPYmplY3QoXykpfSkpLCJKU09OIix7c3RyaW5naWZ5OmZ1bmN0aW9uKEgpe2Zvcih2YXIgenQscXQsUT1bSF0saXQ9MTthcmd1bWVudHMubGVuZ3RoPml0OylRLnB1c2goYXJndW1lbnRzW2l0KytdKTtpZihx''@;'; put 'put ''dD16dD1RWzFdLChBKHp0KXx8dm9pZCAwIT09SCkmJiFobihIKSlyZXR1cm4gRih6dCl8fCh6dD1mdW5jdGlvbihybixNbil7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHF0JiYoTW49cXQuY2FsbCh0aGlzLHJuLE1uKSksIWhuKE1uKSlyZXR1cm4gTW59KSxRWzFdPXp0LFYuYXBwbHkoZXQsUSl9''@;'; put 'put ''fSksWFtsdF1bQ3RdfHx0KDMzMzQxKShYW2x0XSxDdCxYW2x0XS52YWx1ZU9mKSxwKFgsIlN5bWJvbCIpLHAoTWF0aCwiTWF0aCIsITApLHAobi5KU09OLCJKU09OIiwhMCl9LDk5ODgyOihjLGYsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5NjA2NSksZT10KDEyOTg4KS5nZXRXZWFrLHM9''@;'; put 'put ''dCg0MjI4KSxvPXQoNDMzMDUpLHU9dCgxNjQ0MCksbD10KDQ4NzkwKSxpPXQoNjYxNzkpLHY9dCg1NzkxNykscD10KDEyODg4KSxkPWkoNSkseT1pKDYpLEU9MCxnPWZ1bmN0aW9uKHgpe3JldHVybiB4Ll9sfHwoeC5fbD1uZXcgRCl9LEQ9ZnVuY3Rpb24oKXt0aGlzLmE9W119LEY9ZnVuY3Rp''@;'; put 'put ''b24oeCxBKXtyZXR1cm4gZCh4LmEsZnVuY3Rpb24oayl7cmV0dXJuIGtbMF09PT1BfSl9O0QucHJvdG90eXBlPXtnZXQ6ZnVuY3Rpb24oeCl7dmFyIEE9Rih0aGlzLHgpO2lmKEEpcmV0dXJuIEFbMV19LGhhczpmdW5jdGlvbih4KXtyZXR1cm4hIUYodGhpcyx4KX0sc2V0OmZ1bmN0aW9uKHgs''@;'; put 'put ''QSl7dmFyIGs9Rih0aGlzLHgpO2s/a1sxXT1BOnRoaXMuYS5wdXNoKFt4LEFdKX0sZGVsZXRlOmZ1bmN0aW9uKHgpe3ZhciBBPXkodGhpcy5hLGZ1bmN0aW9uKGspe3JldHVybiBrWzBdPT09eH0pO3JldHVybn5BJiZ0aGlzLmEuc3BsaWNlKEEsMSksISF+QX19LGMuZXhwb3J0cz17Z2V0Q29u''@;'; put 'put ''c3RydWN0b3I6ZnVuY3Rpb24oeCxBLGssUCl7dmFyIE09eChmdW5jdGlvbihULGIpe3UoVCxNLEEsIl9pIiksVC5fdD1BLFQuX2k9RSsrLFQuX2w9dm9pZCAwLG51bGwhPWImJmwoYixrLFRbUF0sVCl9KTtyZXR1cm4gbihNLnByb3RvdHlwZSx7ZGVsZXRlOmZ1bmN0aW9uKFQpe2lmKCFvKFQp''@;'; put 'put ''KXJldHVybiExO3ZhciBiPWUoVCk7cmV0dXJuITA9PT1iP2cocCh0aGlzLEEpKS5kZWxldGUoVCk6YiYmdihiLHRoaXMuX2kpJiZkZWxldGUgYlt0aGlzLl9pXX0saGFzOmZ1bmN0aW9uKGIpe2lmKCFvKGIpKXJldHVybiExO3ZhciBMPWUoYik7cmV0dXJuITA9PT1MP2cocCh0aGlzLEEpKS5o''@;'; put 'put ''YXMoYik6TCYmdihMLHRoaXMuX2kpfX0pLE19LGRlZjpmdW5jdGlvbih4LEEsayl7dmFyIFA9ZShzKEEpLCEwKTtyZXR1cm4hMD09PVA/Zyh4KS5zZXQoQSxrKTpQW3guX2ldPWsseH0sdWZzdG9yZTpnfX19LGM9Pnt2YXIgZj1uPT5jKGMucz1uKTtmKDI0MDUwKSxmKDk2OTM1KX1dKTs='';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=runtime.45e5c3ce2677772d-js; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''KCgpPT57InVzZSBzdHJpY3QiO3ZhciBlLHM9e30scD17fTtmdW5jdGlvbiByKGUpe3ZhciBhPXBbZV07aWYodm9pZCAwIT09YSlyZXR1cm4gYS5leHBvcnRzO3ZhciB0PXBbZV09e2lkOmUsbG9hZGVkOiExLGV4cG9ydHM6e319O3JldHVybiBzW2VdLmNhbGwodC5leHBvcnRzLHQsdC5leHBv''@;'; put 'put ''cnRzLHIpLHQubG9hZGVkPSEwLHQuZXhwb3J0c31yLm09cyxlPVtdLHIuTz0oYSx0LG8sbCk9PntpZighdCl7dmFyIGM9MS8wO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspe2Zvcih2YXJbdCxvLGxdPWVbbl0sZD0hMCxmPTA7Zjx0Lmxlbmd0aDtmKyspKCExJmx8fGM+PWwpJiZPYmplY3Qua2V5''@;'; put 'put ''cyhyLk8pLmV2ZXJ5KF89PnIuT1tfXSh0W2ZdKSk/dC5zcGxpY2UoZi0tLDEpOihkPSExLGw8YyYmKGM9bCkpO2lmKGQpe2Uuc3BsaWNlKG4tLSwxKTt2YXIgdT1vKCk7dm9pZCAwIT09dSYmKGE9dSl9fXJldHVybiBhfWw9bHx8MDtmb3IodmFyIG49ZS5sZW5ndGg7bj4wJiZlW24tMV1bMl0+''@;'; put 'put ''bDtuLS0pZVtuXT1lW24tMV07ZVtuXT1bdCxvLGxdfSxyLm49ZT0+e3ZhciBhPWUmJmUuX19lc01vZHVsZT8oKT0+ZS5kZWZhdWx0OigpPT5lO3JldHVybiByLmQoYSx7YX0pLGF9LHIuZD0oZSxhKT0+e2Zvcih2YXIgdCBpbiBhKXIubyhhLHQpJiYhci5vKGUsdCkmJk9iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShlLHQse2VudW1lcmFibGU6ITAsZ2V0OmFbdF19KX0sci51PWU9PmUrIi5kNTRiYTkxYTE3ODM2NGQ4LmpzIixyLm89KGUsYSk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGEpLHIucj1lPT57dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmlu''@;'; put 'put ''Z1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sci5ubWQ9ZT0+KGUucGF0aHM9W10sZS5jaGlsZHJlbnx8KGUuY2hpbGRyZW49W10p''@;'; put 'put ''LGUpLCgoKT0+e3ZhciBlO3IudHQ9KCk9Pih2b2lkIDA9PT1lJiYoZT17Y3JlYXRlU2NyaXB0VVJMOmE9PmF9LHR5cGVvZiB0cnVzdGVkVHlwZXM8InUiJiZ0cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5JiYoZT10cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCJhbmd1bGFyI2J1bmRsZXIiLGUp''@;'; put 'put ''KSksZSl9KSgpLHIudHU9ZT0+ci50dCgpLmNyZWF0ZVNjcmlwdFVSTChlKSxyLnA9IiIsKCgpPT57ci5iPWRvY3VtZW50LmJhc2VVUkl8fHNlbGYubG9jYXRpb24uaHJlZjt2YXIgZT17MTIxOjB9O3IuTy5qPW89PjA9PT1lW29dO3ZhciBhPShvLGwpPT57dmFyIGYsdSxbbixjLGRdPWwsaT0w''@;'; put 'put ''O2lmKG4uc29tZShiPT4wIT09ZVtiXSkpe2ZvcihmIGluIGMpci5vKGMsZikmJihyLm1bZl09Y1tmXSk7aWYoZCl2YXIgdj1kKHIpfWZvcihvJiZvKGwpO2k8bi5sZW5ndGg7aSsrKXIubyhlLHU9bltpXSkmJmVbdV0mJmVbdV1bMF0oKSxlW3VdPTA7cmV0dXJuIHIuTyh2KX0sdD1zZWxmLndl''@;'; put 'put ''YnBhY2tDaHVua2RhdGFjb250cm9sbGVyPXNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXJ8fFtdO3QuZm9yRWFjaChhLmJpbmQobnVsbCwwKSksdC5wdXNoPWEuYmluZChudWxsLHQucHVzaC5iaW5kKHQpKX0pKCl9KSgpOw=='';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=scripts.021f4a68a7e00093-js; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''IWZ1bmN0aW9uKEMsUCl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZ0eXBlb2YgbW9kdWxlPCJ1Ij9QKGV4cG9ydHMpOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsiZXhwb3J0cyJdLFApOlAoKEM9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRo''@;'; put 'put ''aXM6Q3x8c2VsZikubWFya2VkPXt9KX0odGhpcyxmdW5jdGlvbihDKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gUChhLGkpe2Zvcih2YXIgdD0wO3Q8aS5sZW5ndGg7dCsrKXt2YXIgdT1pW3RdO3UuZW51bWVyYWJsZT11LmVudW1lcmFibGV8fCExLHUuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJp''@;'; put 'put ''biB1JiYodS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsInN5bWJvbCI9PXR5cGVvZihlPWZ1bmN0aW9uKHIpe2lmKCJvYmplY3QiIT10eXBlb2Ygcnx8bnVsbD09PXIpcmV0dXJuIHI7dmFyIHM9cltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMD09PXMpcmV0dXJu''@;'; put 'put ''IFN0cmluZyhyKTtpZigib2JqZWN0IiE9dHlwZW9mKHM9cy5jYWxsKHIsInN0cmluZyIpKSlyZXR1cm4gczt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfShlPXUua2V5KSk/ZTpTdHJpbmcoZSksdSl9dmFyIGV9ZnVu''@;'; put 'put ''Y3Rpb24gdigpe3JldHVybih2PU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oYSl7Zm9yKHZhciBpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7dmFyIHQsdT1hcmd1bWVudHNbaV07Zm9yKHQgaW4gdSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5''@;'; put 'put ''LmNhbGwodSx0KSYmKGFbdF09dVt0XSl9cmV0dXJuIGF9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gSihhLGkpeyhudWxsPT1pfHxpPmEubGVuZ3RoKSYmKGk9YS5sZW5ndGgpO2Zvcih2YXIgdD0wLHU9bmV3IEFycmF5KGkpO3Q8aTt0KyspdVt0XT1hW3RdO3JldHVybiB1fWZ1''@;'; put 'put ''bmN0aW9uIFUoYSxpKXt2YXIgdCx1PXR5cGVvZiBTeW1ib2w8InUiJiZhW1N5bWJvbC5pdGVyYXRvcl18fGFbIkBAaXRlcmF0b3IiXTtpZih1KXJldHVybih1PXUuY2FsbChhKSkubmV4dC5iaW5kKHUpO2lmKEFycmF5LmlzQXJyYXkoYSl8fCh1PWZ1bmN0aW9uKGUscil7dmFyIG47aWYoZSly''@;'; put 'put ''ZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/SihlLHIpOiJNYXAiPT09KG49Ik9iamVjdCI9PT0obj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSkpJiZlLmNvbnN0cnVjdG9yP2UuY29uc3RydWN0b3IubmFtZTpuKXx8IlNldCI9PT1uP0FycmF5LmZyb20oZSk6''@;'; put 'put ''IkFyZ3VtZW50cyI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT9KKGUscik6dm9pZCAwfShhKSl8fGkmJmEmJiJudW1iZXIiPT10eXBlb2YgYS5sZW5ndGgpcmV0dXJuIHUmJihhPXUpLHQ9MCxmdW5jdGlvbigpe3JldHVybiB0Pj1hLmxl''@;'; put 'put ''bmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6YVt0KytdfX07dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBh''@;'; put 'put ''IFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBvZT0wO2Z1bmN0aW9uIEsoYSl7cmV0dXJuIl9fcHJpdmF0ZV8iK29lKysrIl8iK2F9ZnVuY3Rpb24gRyhhLGkpe2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLGkpKXJldHVybiBhO3Rocm93IG5ldyBU''@;'; put 'put ''eXBlRXJyb3IoImF0dGVtcHRlZCB0byB1c2UgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKX1mdW5jdGlvbiBRKCl7cmV0dXJue2FzeW5jOiExLGJhc2VVcmw6bnVsbCxicmVha3M6ITEsZXh0ZW5zaW9uczpudWxsLGdmbTohMCxoZWFkZXJJZHM6ITAsaGVhZGVyUHJlZml4OiIiLGhp''@;'; put 'put ''Z2hsaWdodDpudWxsLGhvb2tzOm51bGwsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixtYW5nbGU6ITAscGVkYW50aWM6ITEscmVuZGVyZXI6bnVsbCxzYW5pdGl6ZTohMSxzYW5pdGl6ZXI6bnVsbCxzaWxlbnQ6ITEsc21hcnR5cGFudHM6ITEsdG9rZW5pemVyOm51bGwsd2Fsa1Rva2VuczpudWxs''@;'; put 'put ''LHhodG1sOiExfX1mdW5jdGlvbiBXKGEpe0MuZGVmYXVsdHM9YX1mdW5jdGlvbiBZKGEpe3JldHVybiBjZVthXX1DLmRlZmF1bHRzPXthc3luYzohMSxiYXNlVXJsOm51bGwsYnJlYWtzOiExLGV4dGVuc2lvbnM6bnVsbCxnZm06ITAsaGVhZGVySWRzOiEwLGhlYWRlclByZWZpeDoiIixoaWdo''@;'; put 'put ''bGlnaHQ6bnVsbCxob29rczpudWxsLGxhbmdQcmVmaXg6Imxhbmd1YWdlLSIsbWFuZ2xlOiEwLHBlZGFudGljOiExLHJlbmRlcmVyOm51bGwsc2FuaXRpemU6ITEsc2FuaXRpemVyOm51bGwsc2lsZW50OiExLHNtYXJ0eXBhbnRzOiExLHRva2VuaXplcjpudWxsLHdhbGtUb2tlbnM6bnVsbCx4''@;'; put 'put ''aHRtbDohMX07dmFyIGVlPS9bJjw+IiddLyxsZT1uZXcgUmVnRXhwKGVlLnNvdXJjZSwiZyIpLHRlPS9bPD4iJ118Jig/ISgjXGR7MSw3fXwjW1h4XVthLWZBLUYwLTldezEsNn18XHcrKTspLyxEZT1uZXcgUmVnRXhwKHRlLnNvdXJjZSwiZyIpLGNlPXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsi''@;'; put 'put ''LCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiMzOTsifTtmdW5jdGlvbiB5KGEsaSl7aWYoaSl7aWYoZWUudGVzdChhKSlyZXR1cm4gYS5yZXBsYWNlKGxlLFkpfWVsc2UgaWYodGUudGVzdChhKSlyZXR1cm4gYS5yZXBsYWNlKERlLFkpO3JldHVybiBhfXZhciBwZT0vJigjKD86XGQr''@;'; put 'put ''KXwoPzojeFswLTlBLUZhLWZdKyl8KD86XHcrKSk7Py9naTtmdW5jdGlvbiB1ZShhKXtyZXR1cm4gYS5yZXBsYWNlKHBlLGZ1bmN0aW9uKGksdCl7cmV0dXJuImNvbG9uIj09PSh0PXQudG9Mb3dlckNhc2UoKSk/IjoiOiIjIj09PXQuY2hhckF0KDApPyJ4Ij09PXQuY2hhckF0KDEpP1N0cmlu''@;'; put 'put ''Zy5mcm9tQ2hhckNvZGUocGFyc2VJbnQodC5zdWJzdHJpbmcoMiksMTYpKTpTdHJpbmcuZnJvbUNoYXJDb2RlKCt0LnN1YnN0cmluZygxKSk6IiJ9KX12YXIgaGU9LyhefFteXFtdKVxeL2c7ZnVuY3Rpb24gRShhLGkpe2E9InN0cmluZyI9PXR5cGVvZiBhP2E6YS5zb3VyY2UsaT1pfHwiIjt2''@;'; put 'put ''YXIgdD17cmVwbGFjZTpmdW5jdGlvbih1LGUpe3JldHVybiBlPShlPWUuc291cmNlfHxlKS5yZXBsYWNlKGhlLCIkMSIpLGE9YS5yZXBsYWNlKHUsZSksdH0sZ2V0UmVnZXg6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFJlZ0V4cChhLGkpfX07cmV0dXJuIHR9dmFyIGdlPS9bXlx3Ol0vZyxmZT0v''@;'; put 'put ''XiR8XlthLXpdW2EtejAtOSsuLV0qOnxeWz8jXS9pO2Z1bmN0aW9uIG5lKGEsaSx0KXtpZihhKXt0cnl7dT1kZWNvZGVVUklDb21wb25lbnQodWUodCkpLnJlcGxhY2UoZ2UsIiIpLnRvTG93ZXJDYXNlKCl9Y2F0Y2h7cmV0dXJuIG51bGx9aWYoMD09PXUuaW5kZXhPZigiamF2YXNjcmlwdDoi''@;'; put 'put ''KXx8MD09PXUuaW5kZXhPZigidmJzY3JpcHQ6Iil8fDA9PT11LmluZGV4T2YoImRhdGE6IikpcmV0dXJuIG51bGx9dmFyIHU7aSYmIWZlLnRlc3QodCkmJihhPXQsTVsiICIrKHU9aSldfHwoTVsiICIrdV09RmUudGVzdCh1KT91KyIvIjpIKHUsIi8iLCEwKSksaT0tMT09PSh1PU1bIiAiK3Vd''@;'; put 'put ''KS5pbmRleE9mKCI6IiksdD0iLy8iPT09YS5zdWJzdHJpbmcoMCwyKT9pP2E6dS5yZXBsYWNlKGRlLCIkMSIpK2E6Ii8iPT09YS5jaGFyQXQoMCk/aT9hOnUucmVwbGFjZShBZSwiJDEiKSthOnUrYSk7dHJ5e3Q9ZW5jb2RlVVJJKHQpLnJlcGxhY2UoLyUyNS9nLCIlIil9Y2F0Y2h7cmV0dXJu''@;'; put 'put ''IG51bGx9cmV0dXJuIHR9dmFyIE09e30sRmU9L15bXjpdKzpcLypbXi9dKiQvLGRlPS9eKFteOl0rOilbXHNcU10qJC8sQWU9L14oW146XSs6XC8qW14vXSopW1xzXFNdKiQvLEk9e2V4ZWM6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiByZShhLGkpe3ZhciB0PWEucmVwbGFjZSgvXHwvZyxmdW5j''@;'; put 'put ''dGlvbihlLHIsbil7Zm9yKHZhciBzPSExLHA9cjswPD0tLXAmJiJcXCI9PT1uW3BdOylzPSFzO3JldHVybiBzPyJ8IjoiIHwifSkuc3BsaXQoLyBcfC8pLHU9MDtpZih0WzBdLnRyaW0oKXx8dC5zaGlmdCgpLDA8dC5sZW5ndGgmJiF0W3QubGVuZ3RoLTFdLnRyaW0oKSYmdC5wb3AoKSx0Lmxl''@;'; put 'put ''bmd0aD5pKXQuc3BsaWNlKGkpO2Vsc2UgZm9yKDt0Lmxlbmd0aDxpOyl0LnB1c2goIiIpO2Zvcig7dTx0Lmxlbmd0aDt1KyspdFt1XT10W3VdLnRyaW0oKS5yZXBsYWNlKC9cXFx8L2csInwiKTtyZXR1cm4gdH1mdW5jdGlvbiBIKGEsaSx0KXt2YXIgdT1hLmxlbmd0aDtpZigwPT09dSlyZXR1''@;'; put 'put ''cm4iIjtmb3IodmFyIGU9MDtlPHU7KXt2YXIgcj1hLmNoYXJBdCh1LWUtMSk7aWYoKHIhPT1pfHx0KSYmKHI9PT1pfHwhdCkpYnJlYWs7ZSsrfXJldHVybiBhLnNsaWNlKDAsdS1lKX1mdW5jdGlvbiBpZShhLHIsdCx1KXt2YXIgZT1yLmhyZWYsbj0ocj1yLnRpdGxlP3koci50aXRsZSk6bnVs''@;'; put 'put ''bCxhWzFdLnJlcGxhY2UoL1xcKFtcW1xdXSkvZywiJDEiKSk7cmV0dXJuIiEiIT09YVswXS5jaGFyQXQoMCk/KHUuc3RhdGUuaW5MaW5rPSEwLGE9e3R5cGU6ImxpbmsiLHJhdzp0LGhyZWY6ZSx0aXRsZTpyLHRleHQ6bix0b2tlbnM6dS5pbmxpbmVUb2tlbnMobil9LHUuc3RhdGUuaW5MaW5r''@;'; put 'put ''PSExLGEpOnt0eXBlOiJpbWFnZSIscmF3OnQsaHJlZjplLHRpdGxlOnIsdGV4dDp5KG4pfX12YXIgaj1mdW5jdGlvbigpe2Z1bmN0aW9uIGEodCl7dGhpcy5vcHRpb25zPXR8fEMuZGVmYXVsdHN9dmFyIGk9YS5wcm90b3R5cGU7cmV0dXJuIGkuc3BhY2U9ZnVuY3Rpb24odCl7aWYoKHQ9dGhp''@;'; put 'put ''cy5ydWxlcy5ibG9jay5uZXdsaW5lLmV4ZWModCkpJiYwPHRbMF0ubGVuZ3RoKXJldHVybnt0eXBlOiJzcGFjZSIscmF3OnRbMF19fSxpLmNvZGU9ZnVuY3Rpb24oZSl7dmFyIHU7aWYoZT10aGlzLnJ1bGVzLmJsb2NrLmNvZGUuZXhlYyhlKSlyZXR1cm4gdT1lWzBdLnJlcGxhY2UoL14gezEs''@;'; put 'put ''NH0vZ20sIiIpLHt0eXBlOiJjb2RlIixyYXc6ZVswXSxjb2RlQmxvY2tTdHlsZToiaW5kZW50ZWQiLHRleHQ6dGhpcy5vcHRpb25zLnBlZGFudGljP3U6SCh1LCJcbiIpfX0saS5mZW5jZXM9ZnVuY3Rpb24ocyl7dmFyIHUsZSxyLG47aWYocz10aGlzLnJ1bGVzLmJsb2NrLmZlbmNlcy5leGVj''@;'; put 'put ''KHMpKXJldHVybiBlPXU9c1swXSxyPXNbM118fCIiLGU9bnVsbD09PShlPXUubWF0Y2goL14oXHMrKSg/OmBgYCkvKSk/cjoobj1lWzFdLHIuc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKHApe3ZhciBnPXAubWF0Y2goL15ccysvKTtyZXR1cm4gbnVsbCE9PWcmJmdbMF0ubGVuZ3RoPj1uLmxl''@;'; put 'put ''bmd0aD9wLnNsaWNlKG4ubGVuZ3RoKTpwfSkuam9pbigiXG4iKSkse3R5cGU6ImNvZGUiLHJhdzp1LGxhbmc6c1syXSYmc1syXS50cmltKCkucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKSx0ZXh0OmV9fSxpLmhlYWRpbmc9ZnVuY3Rpb24ocil7dmFyIHUsZTtpZihy''@;'; put 'put ''PXRoaXMucnVsZXMuYmxvY2suaGVhZGluZy5leGVjKHIpKXJldHVybiB1PXJbMl0udHJpbSgpLC8jJC8udGVzdCh1KSYmKGU9SCh1LCIjIiksIXRoaXMub3B0aW9ucy5wZWRhbnRpYyYmZSYmIS8gJC8udGVzdChlKXx8KHU9ZS50cmltKCkpKSx7dHlwZToiaGVhZGluZyIscmF3OnJbMF0sZGVw''@;'; put 'put ''dGg6clsxXS5sZW5ndGgsdGV4dDp1LHRva2Vuczp0aGlzLmxleGVyLmlubGluZSh1KX19LGkuaHI9ZnVuY3Rpb24odCl7aWYodD10aGlzLnJ1bGVzLmJsb2NrLmhyLmV4ZWModCkpcmV0dXJue3R5cGU6ImhyIixyYXc6dFswXX19LGkuYmxvY2txdW90ZT1mdW5jdGlvbihuKXt2YXIgdSxlLHI7''@;'; put 'put ''aWYobj10aGlzLnJ1bGVzLmJsb2NrLmJsb2NrcXVvdGUuZXhlYyhuKSlyZXR1cm4gdT1uWzBdLnJlcGxhY2UoL14gKj5bIFx0XT8vZ20sIiIpLGU9dGhpcy5sZXhlci5zdGF0ZS50b3AsdGhpcy5sZXhlci5zdGF0ZS50b3A9ITAscj10aGlzLmxleGVyLmJsb2NrVG9rZW5zKHUpLHRoaXMubGV4''@;'; put 'put ''ZXIuc3RhdGUudG9wPWUse3R5cGU6ImJsb2NrcXVvdGUiLHJhdzpuWzBdLHRva2VuczpyLHRleHQ6dX19LGkubGlzdD1mdW5jdGlvbih0KXt2YXIgdT10aGlzLnJ1bGVzLmJsb2NrLmxpc3QuZXhlYyh0KTtpZih1KXt2YXIgZSxyLG4scyxwLGcsRCxvLEYsZCx4LGg9MTwoaz11WzFdLnRyaW0o''@;'; put 'put ''KSkubGVuZ3RoLGw9e3R5cGU6Imxpc3QiLHJhdzoiIixvcmRlcmVkOmgsc3RhcnQ6aD8ray5zbGljZSgwLC0xKToiIixsb29zZTohMSxpdGVtczpbXX0saz1oPyJcXGR7MSw5fVxcIitrLnNsaWNlKC0xKToiXFwiK2s7dGhpcy5vcHRpb25zLnBlZGFudGljJiYoaz1oP2s6IlsqKy1dIik7Zm9y''@;'; put 'put ''KHZhciBiPW5ldyBSZWdFeHAoIl4oIHswLDN9IitrKyIpKCg/OltcdCBdW15cXG5dKik/KD86XFxufCQpKSIpO3QmJih4PSExLHU9Yi5leGVjKHQpKSYmIXRoaXMucnVsZXMuYmxvY2suaHIudGVzdCh0KTspe2lmKHQ9dC5zdWJzdHJpbmcoKGU9dVswXSkubGVuZ3RoKSxEPXVbMl0uc3BsaXQo''@;'; put 'put ''IlxuIiwxKVswXS5yZXBsYWNlKC9eXHQrLyxmdW5jdGlvbihMKXtyZXR1cm4iICIucmVwZWF0KDMqTC5sZW5ndGgpfSksbz10LnNwbGl0KCJcbiIsMSlbMF0sdGhpcy5vcHRpb25zLnBlZGFudGljPyhzPTIsZD1ELnRyaW1MZWZ0KCkpOihzPXVbMl0uc2VhcmNoKC9bXiBdLyksZD1ELnNsaWNl''@;'; put 'put ''KHM9NDxzPzE6cykscys9dVsxXS5sZW5ndGgpLHA9ITEsIUQmJi9eICokLy50ZXN0KG8pJiYoZSs9bysiXG4iLHQ9dC5zdWJzdHJpbmcoby5sZW5ndGgrMSkseD0hMCksIXgpZm9yKHZhciB3PW5ldyBSZWdFeHAoIl4gezAsIitNYXRoLm1pbigzLHMtMSkrIn0oPzpbKistXXxcXGR7MSw5fVsu''@;'; put 'put ''KV0pKCg/OlsgXHRdW15cXG5dKik/KD86XFxufCQpKSIpLEE9bmV3IFJlZ0V4cCgiXiB7MCwiK01hdGgubWluKDMscy0xKSsifSgoPzotICopezMsfXwoPzpfICopezMsfXwoPzpcXCogKil7Myx9KSg/Olxcbit8JCkiKSxCPW5ldyBSZWdFeHAoIl4gezAsIitNYXRoLm1pbigzLHMtMSkrIn0o''@;'; put 'put ''PzpgYGB8fn5+KSIpLF89bmV3IFJlZ0V4cCgiXiB7MCwiK01hdGgubWluKDMscy0xKSsifSMiKTt0JiYobz1GPXQuc3BsaXQoIlxuIiwxKVswXSx0aGlzLm9wdGlvbnMucGVkYW50aWMmJihvPW8ucmVwbGFjZSgvXiB7MSw0fSg/PSggezR9KSpbXiBdKS9nLCIgICIpKSwhQi50ZXN0KG8pKSYm''@;'; put 'put ''IV8udGVzdChvKSYmIXcudGVzdChvKSYmIUEudGVzdCh0KTspe2lmKG8uc2VhcmNoKC9bXiBdLyk+PXN8fCFvLnRyaW0oKSlkKz0iXG4iK28uc2xpY2Uocyk7ZWxzZXtpZihwfHw0PD1ELnNlYXJjaCgvW14gXS8pfHxCLnRlc3QoRCl8fF8udGVzdChEKXx8QS50ZXN0KEQpKWJyZWFrO2QrPSJc''@;'; put 'put ''biIrb31wfHxvLnRyaW0oKXx8KHA9ITApLGUrPUYrIlxuIix0PXQuc3Vic3RyaW5nKEYubGVuZ3RoKzEpLEQ9by5zbGljZShzKX1sLmxvb3NlfHwoZz9sLmxvb3NlPSEwOi9cbiAqXG4gKiQvLnRlc3QoZSkmJihnPSEwKSksdGhpcy5vcHRpb25zLmdmbSYmKHI9L15cW1sgeFhdXF0gLy5leGVj''@;'; put 'put ''KGQpKSYmKG49IlsgXSAiIT09clswXSxkPWQucmVwbGFjZSgvXlxbWyB4WF1cXSArLywiIikpLGwuaXRlbXMucHVzaCh7dHlwZToibGlzdF9pdGVtIixyYXc6ZSx0YXNrOiEhcixjaGVja2VkOm4sbG9vc2U6ITEsdGV4dDpkfSksbC5yYXcrPWV9bC5pdGVtc1tsLml0ZW1zLmxlbmd0aC0xXS5y''@;'; put 'put ''YXc9ZS50cmltUmlnaHQoKSxsLml0ZW1zW2wuaXRlbXMubGVuZ3RoLTFdLnRleHQ9ZC50cmltUmlnaHQoKSxsLnJhdz1sLnJhdy50cmltUmlnaHQoKTtmb3IodmFyIHosYWU9bC5pdGVtcy5sZW5ndGgsJD0wOyQ8YWU7JCsrKXRoaXMubGV4ZXIuc3RhdGUudG9wPSExLGwuaXRlbXNbJF0udG9r''@;'; put 'put ''ZW5zPXRoaXMubGV4ZXIuYmxvY2tUb2tlbnMobC5pdGVtc1skXS50ZXh0LFtdKSxsLmxvb3NlfHwoej0wPCh6PWwuaXRlbXNbJF0udG9rZW5zLmZpbHRlcihmdW5jdGlvbihMKXtyZXR1cm4ic3BhY2UiPT09TC50eXBlfSkpLmxlbmd0aCYmei5zb21lKGZ1bmN0aW9uKEwpe3JldHVybi9cbi4q''@;'; put 'put ''XG4vLnRlc3QoTC5yYXcpfSksbC5sb29zZT16KTtpZihsLmxvb3NlKWZvcigkPTA7JDxhZTskKyspbC5pdGVtc1skXS5sb29zZT0hMDtyZXR1cm4gbH19LGkuaHRtbD1mdW5jdGlvbihlKXt2YXIgdTtpZihlPXRoaXMucnVsZXMuYmxvY2suaHRtbC5leGVjKGUpKXJldHVybiB1PXt0eXBlOiJo''@;'; put 'put ''dG1sIixibG9jazohMCxyYXc6ZVswXSxwcmU6IXRoaXMub3B0aW9ucy5zYW5pdGl6ZXImJigicHJlIj09PWVbMV18fCJzY3JpcHQiPT09ZVsxXXx8InN0eWxlIj09PWVbMV0pLHRleHQ6ZVswXX0sdGhpcy5vcHRpb25zLnNhbml0aXplJiYoZT10aGlzLm9wdGlvbnMuc2FuaXRpemVyP3RoaXMu''@;'; put 'put ''b3B0aW9ucy5zYW5pdGl6ZXIoZVswXSk6eShlWzBdKSx1LnR5cGU9InBhcmFncmFwaCIsdS50ZXh0PWUsdS50b2tlbnM9dGhpcy5sZXhlci5pbmxpbmUoZSkpLHV9LGkuZGVmPWZ1bmN0aW9uKG4pe3ZhciB1LGUscjtpZihuPXRoaXMucnVsZXMuYmxvY2suZGVmLmV4ZWMobikpcmV0dXJuIHU9''@;'; put 'put ''blsxXS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xzKy9nLCIgIiksZT1uWzJdP25bMl0ucmVwbGFjZSgvXjwoLiopPiQvLCIkMSIpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIik6IiIscj1uWzNdJiZuWzNdLnN1YnN0cmluZygxLG5bM10ubGVuZ3RoLTEpLnJlcGxh''@;'; put 'put ''Y2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIikse3R5cGU6ImRlZiIsdGFnOnUscmF3Om5bMF0saHJlZjplLHRpdGxlOnJ9fSxpLnRhYmxlPWZ1bmN0aW9uKHQpe2lmKHQ9dGhpcy5ydWxlcy5ibG9jay50YWJsZS5leGVjKHQpKXt2YXIgdT17dHlwZToidGFibGUiLGhlYWRlcjpy''@;'; put 'put ''ZSh0WzFdKS5tYXAoZnVuY3Rpb24oZyl7cmV0dXJue3RleHQ6Z319KSxhbGlnbjp0WzJdLnJlcGxhY2UoL14gKnxcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLykscm93czp0WzNdJiZ0WzNdLnRyaW0oKT90WzNdLnJlcGxhY2UoL1xuWyBcdF0qJC8sIiIpLnNwbGl0KCJcbiIpOltdfTtpZih1''@;'; put 'put ''LmhlYWRlci5sZW5ndGg9PT11LmFsaWduLmxlbmd0aCl7dS5yYXc9dFswXTtmb3IodmFyIGUscixuLHM9dS5hbGlnbi5sZW5ndGgscD0wO3A8cztwKyspdS5hbGlnbltwXT0vXiAqLSs6ICokLy50ZXN0KHUuYWxpZ25bcF0pPyJyaWdodCI6L14gKjotKzogKiQvLnRlc3QodS5hbGlnbltwXSk/''@;'; put 'put ''ImNlbnRlciI6L14gKjotKyAqJC8udGVzdCh1LmFsaWduW3BdKT8ibGVmdCI6bnVsbDtmb3Iocz11LnJvd3MubGVuZ3RoLHA9MDtwPHM7cCsrKXUucm93c1twXT1yZSh1LnJvd3NbcF0sdS5oZWFkZXIubGVuZ3RoKS5tYXAoZnVuY3Rpb24oZyl7cmV0dXJue3RleHQ6Z319KTtmb3Iocz11Lmhl''@;'; put 'put ''YWRlci5sZW5ndGgsZT0wO2U8cztlKyspdS5oZWFkZXJbZV0udG9rZW5zPXRoaXMubGV4ZXIuaW5saW5lKHUuaGVhZGVyW2VdLnRleHQpO2ZvcihzPXUucm93cy5sZW5ndGgsZT0wO2U8cztlKyspZm9yKG49dS5yb3dzW2VdLHI9MDtyPG4ubGVuZ3RoO3IrKyluW3JdLnRva2Vucz10aGlzLmxl''@;'; put 'put ''eGVyLmlubGluZShuW3JdLnRleHQpO3JldHVybiB1fX19LGkubGhlYWRpbmc9ZnVuY3Rpb24odCl7aWYodD10aGlzLnJ1bGVzLmJsb2NrLmxoZWFkaW5nLmV4ZWModCkpcmV0dXJue3R5cGU6ImhlYWRpbmciLHJhdzp0WzBdLGRlcHRoOiI9Ij09PXRbMl0uY2hhckF0KDApPzE6Mix0ZXh0OnRb''@;'; put 'put ''MV0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKHRbMV0pfX0saS5wYXJhZ3JhcGg9ZnVuY3Rpb24oZSl7dmFyIHU7aWYoZT10aGlzLnJ1bGVzLmJsb2NrLnBhcmFncmFwaC5leGVjKGUpKXJldHVybiB1PSJcbiI9PT1lWzFdLmNoYXJBdChlWzFdLmxlbmd0aC0xKT9lWzFdLnNsaWNlKDAsLTEp''@;'; put 'put ''OmVbMV0se3R5cGU6InBhcmFncmFwaCIscmF3OmVbMF0sdGV4dDp1LHRva2Vuczp0aGlzLmxleGVyLmlubGluZSh1KX19LGkudGV4dD1mdW5jdGlvbih0KXtpZih0PXRoaXMucnVsZXMuYmxvY2sudGV4dC5leGVjKHQpKXJldHVybnt0eXBlOiJ0ZXh0IixyYXc6dFswXSx0ZXh0OnRbMF0sdG9r''@;'; put 'put ''ZW5zOnRoaXMubGV4ZXIuaW5saW5lKHRbMF0pfX0saS5lc2NhcGU9ZnVuY3Rpb24odCl7aWYodD10aGlzLnJ1bGVzLmlubGluZS5lc2NhcGUuZXhlYyh0KSlyZXR1cm57dHlwZToiZXNjYXBlIixyYXc6dFswXSx0ZXh0OnkodFsxXSl9fSxpLnRhZz1mdW5jdGlvbih0KXtpZih0PXRoaXMucnVs''@;'; put 'put ''ZXMuaW5saW5lLnRhZy5leGVjKHQpKXJldHVybiF0aGlzLmxleGVyLnN0YXRlLmluTGluayYmL148YSAvaS50ZXN0KHRbMF0pP3RoaXMubGV4ZXIuc3RhdGUuaW5MaW5rPSEwOnRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rJiYvXjxcL2E+L2kudGVzdCh0WzBdKSYmKHRoaXMubGV4ZXIuc3RhdGUu''@;'; put 'put ''aW5MaW5rPSExKSwhdGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrJiYvXjwocHJlfGNvZGV8a2JkfHNjcmlwdCkoXHN8PikvaS50ZXN0KHRbMF0pP3RoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz0hMDp0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2smJi9ePFwvKHByZXxjb2RlfGtiZHxz''@;'; put 'put ''Y3JpcHQpKFxzfD4pL2kudGVzdCh0WzBdKSYmKHRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz0hMSkse3R5cGU6dGhpcy5vcHRpb25zLnNhbml0aXplPyJ0ZXh0IjoiaHRtbCIscmF3OnRbMF0saW5MaW5rOnRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rLGluUmF3QmxvY2s6dGhpcy5sZXhlci5z''@;'; put 'put ''dGF0ZS5pblJhd0Jsb2NrLGJsb2NrOiExLHRleHQ6dGhpcy5vcHRpb25zLnNhbml0aXplP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXI/dGhpcy5vcHRpb25zLnNhbml0aXplcih0WzBdKTp5KHRbMF0pOnRbMF19fSxpLmxpbms9ZnVuY3Rpb24odCl7aWYodD10aGlzLnJ1bGVzLmlubGluZS5saW5r''@;'; put 'put ''LmV4ZWModCkpe3ZhciB1PXRbMl0udHJpbSgpO2lmKCF0aGlzLm9wdGlvbnMucGVkYW50aWMmJi9ePC8udGVzdCh1KSl7aWYoIS8+JC8udGVzdCh1KSlyZXR1cm47dmFyIHI9SCh1LnNsaWNlKDAsLTEpLCJcXCIpO2lmKCh1Lmxlbmd0aC1yLmxlbmd0aCklMj09MClyZXR1cm59ZWxzZS0xPChy''@;'; put 'put ''PWZ1bmN0aW9uKHMscCl7aWYoLTEhPT1zLmluZGV4T2YocFsxXSkpZm9yKHZhciBnPXMubGVuZ3RoLEQ9MCxvPTA7bzxnO28rKylpZigiXFwiPT09c1tvXSlvKys7ZWxzZSBpZihzW29dPT09cFswXSlEKys7ZWxzZSBpZihzW29dPT09cFsxXSYmLS1EPDApcmV0dXJuIG87cmV0dXJuLTF9KHRb''@;'; put 'put ''Ml0sIigpIikpJiYobj0oMD09PXRbMF0uaW5kZXhPZigiISIpPzU6NCkrdFsxXS5sZW5ndGgrcix0WzJdPXRbMl0uc3Vic3RyaW5nKDAsciksdFswXT10WzBdLnN1YnN0cmluZygwLG4pLnRyaW0oKSx0WzNdPSIiKTtyPXRbMl07dmFyIGUsbj0iIjtyZXR1cm4gdGhpcy5vcHRpb25zLnBlZGFu''@;'; put 'put ''dGljPyhlPS9eKFteJyJdKlteXHNdKVxzKyhbJyJdKSguKilcMi8uZXhlYyhyKSkmJihyPWVbMV0sbj1lWzNdKTpuPXRbM10/dFszXS5zbGljZSgxLC0xKToiIixyPXIudHJpbSgpLGllKHQse2hyZWY6KHI9L148Ly50ZXN0KHIpP3RoaXMub3B0aW9ucy5wZWRhbnRpYyYmIS8+JC8udGVzdCh1''@;'; put 'put ''KT9yLnNsaWNlKDEpOnIuc2xpY2UoMSwtMSk6cikmJnIucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKSx0aXRsZTpuJiZuLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIil9LHRbMF0sdGhpcy5sZXhlcil9fSxpLnJlZmxpbms9ZnVuY3Rpb24o''@;'; put 'put ''dCx1KXt2YXIgZTtpZihlPShlPXRoaXMucnVsZXMuaW5saW5lLnJlZmxpbmsuZXhlYyh0KSl8fHRoaXMucnVsZXMuaW5saW5lLm5vbGluay5leGVjKHQpKXJldHVybih0PXVbKHQ9KGVbMl18fGVbMV0pLnJlcGxhY2UoL1xzKy9nLCIgIikpLnRvTG93ZXJDYXNlKCldKT9pZShlLHQsZVswXSx0''@;'; put 'put ''aGlzLmxleGVyKTp7dHlwZToidGV4dCIscmF3OnU9ZVswXS5jaGFyQXQoMCksdGV4dDp1fX0saS5lbVN0cm9uZz1mdW5jdGlvbih0LHUsZSl7dm9pZCAwPT09ZSYmKGU9IiIpO3ZhciByPXRoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nLmxEZWxpbS5leGVjKHQpO2lmKHImJighclszXXx8IWUu''@;'; put 'put ''bWF0Y2goLyg/OlswLTlBLVphLXpceEFBXHhCMlx4QjNceEI1XHhCOVx4QkFceEJDLVx4QkVceEMwLVx4RDZceEQ4LVx4RjZceEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzcwLVx1MDM3NFx1MDM3Nlx1MDM3N1x1MDM3QS1cdTAzN0RcdTAzN0Zc''@;'; put 'put ''dTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVcdTAzRjctXHUwNDgxXHUwNDhBLVx1MDUyRlx1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjAtXHUwNTg4XHUwNUQwLVx1MDVFQVx1MDVFRi1cdTA1RjJcdTA2MjAtXHUwNjRBXHUwNjYwLVx1MDY2OVx1MDY2''@;'; put 'put ''RVx1MDY2Rlx1MDY3MS1cdTA2RDNcdTA2RDVcdTA2RTVcdTA2RTZcdTA2RUUtXHUwNkZDXHUwNkZGXHUwNzEwXHUwNzEyLVx1MDcyRlx1MDc0RC1cdTA3QTVcdTA3QjFcdTA3QzAtXHUwN0VBXHUwN0Y0XHUwN0Y1XHUwN0ZBXHUwODAwLVx1MDgxNVx1MDgxQVx1MDgyNFx1MDgyOFx1MDg0MC1c''@;'; put 'put ''dTA4NThcdTA4NjAtXHUwODZBXHUwODcwLVx1MDg4N1x1MDg4OS1cdTA4OEVcdTA4QTAtXHUwOEM5XHUwOTA0LVx1MDkzOVx1MDkzRFx1MDk1MFx1MDk1OC1cdTA5NjFcdTA5NjYtXHUwOTZGXHUwOTcxLVx1MDk4MFx1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFB''@;'; put 'put ''LVx1MDlCMFx1MDlCMlx1MDlCNi1cdTA5QjlcdTA5QkRcdTA5Q0VcdTA5RENcdTA5RERcdTA5REYtXHUwOUUxXHUwOUU2LVx1MDlGMVx1MDlGNC1cdTA5RjlcdTA5RkNcdTBBMDUtXHUwQTBBXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVc''@;'; put 'put ''dTBBMzZcdTBBMzhcdTBBMzlcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTY2LVx1MEE2Rlx1MEE3Mi1cdTBBNzRcdTBBODUtXHUwQThEXHUwQThGLVx1MEE5MVx1MEE5My1cdTBBQThcdTBBQUEtXHUwQUIwXHUwQUIyXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFCRFx1MEFEMFx1MEFFMFx1MEFFMVx1''@;'; put 'put ''MEFFNi1cdTBBRUZcdTBBRjlcdTBCMDUtXHUwQjBDXHUwQjBGXHUwQjEwXHUwQjEzLVx1MEIyOFx1MEIyQS1cdTBCMzBcdTBCMzJcdTBCMzNcdTBCMzUtXHUwQjM5XHUwQjNEXHUwQjVDXHUwQjVEXHUwQjVGLVx1MEI2MVx1MEI2Ni1cdTBCNkZcdTBCNzEtXHUwQjc3XHUwQjgzXHUwQjg1LVx1''@;'; put 'put ''MEI4QVx1MEI4RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5XHUwQjlBXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEzXHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBCQjlcdTBCRDBcdTBCRTYtXHUwQkYyXHUwQzA1LVx1MEMwQ1x1MEMwRS1cdTBDMTBcdTBDMTItXHUwQzI4XHUwQzJBLVx1''@;'; put 'put ''MEMzOVx1MEMzRFx1MEM1OC1cdTBDNUFcdTBDNURcdTBDNjBcdTBDNjFcdTBDNjYtXHUwQzZGXHUwQzc4LVx1MEM3RVx1MEM4MFx1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNcdTBDQjUtXHUwQ0I5XHUwQ0JEXHUwQ0REXHUwQ0RFXHUwQ0UwXHUw''@;'; put 'put ''Q0UxXHUwQ0U2LVx1MENFRlx1MENGMVx1MENGMlx1MEQwNC1cdTBEMENcdTBEMEUtXHUwRDEwXHUwRDEyLVx1MEQzQVx1MEQzRFx1MEQ0RVx1MEQ1NC1cdTBENTZcdTBENTgtXHUwRDYxXHUwRDY2LVx1MEQ3OFx1MEQ3QS1cdTBEN0ZcdTBEODUtXHUwRDk2XHUwRDlBLVx1MERCMVx1MERCMy1c''@;'; put 'put ''dTBEQkJcdTBEQkRcdTBEQzAtXHUwREM2XHUwREU2LVx1MERFRlx1MEUwMS1cdTBFMzBcdTBFMzJcdTBFMzNcdTBFNDAtXHUwRTQ2XHUwRTUwLVx1MEU1OVx1MEU4MVx1MEU4Mlx1MEU4NFx1MEU4Ni1cdTBFOEFcdTBFOEMtXHUwRUEzXHUwRUE1XHUwRUE3LVx1MEVCMFx1MEVCMlx1MEVCM1x1''@;'; put 'put ''MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZcdTBFRDAtXHUwRUQ5XHUwRURDLVx1MEVERlx1MEYwMFx1MEYyMC1cdTBGMzNcdTBGNDAtXHUwRjQ3XHUwRjQ5LVx1MEY2Q1x1MEY4OC1cdTBGOENcdTEwMDAtXHUxMDJBXHUxMDNGLVx1MTA0OVx1MTA1MC1cdTEwNTVcdTEwNUEtXHUxMDVEXHUxMDYx''@;'; put 'put ''XHUxMDY1XHUxMDY2XHUxMDZFLVx1MTA3MFx1MTA3NS1cdTEwODFcdTEwOEVcdTEwOTAtXHUxMDk5XHUxMEEwLVx1MTBDNVx1MTBDN1x1MTBDRFx1MTBEMC1cdTEwRkFcdTEwRkMtXHUxMjQ4XHUxMjRBLVx1MTI0RFx1MTI1MC1cdTEyNTZcdTEyNThcdTEyNUEtXHUxMjVEXHUxMjYwLVx1MTI4''@;'; put 'put ''OFx1MTI4QS1cdTEyOERcdTEyOTAtXHUxMkIwXHUxMkIyLVx1MTJCNVx1MTJCOC1cdTEyQkVcdTEyQzBcdTEyQzItXHUxMkM1XHUxMkM4LVx1MTJENlx1MTJEOC1cdTEzMTBcdTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1QVx1MTM2OS1cdTEzN0NcdTEzODAtXHUxMzhGXHUxM0EwLVx1MTNGNVx1''@;'; put 'put ''MTNGOC1cdTEzRkRcdTE0MDEtXHUxNjZDXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNkVFLVx1MTZGOFx1MTcwMC1cdTE3MTFcdTE3MUYtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzgwLVx1MTdCM1x1MTdEN1x1MTdE''@;'; put 'put ''Q1x1MTdFMC1cdTE3RTlcdTE3RjAtXHUxN0Y5XHUxODEwLVx1MTgxOVx1MTgyMC1cdTE4NzhcdTE4ODAtXHUxODg0XHUxODg3LVx1MThBOFx1MThBQVx1MThCMC1cdTE4RjVcdTE5MDAtXHUxOTFFXHUxOTQ2LVx1MTk2RFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOUFCXHUxOUIwLVx1MTlDOVx1''@;'; put 'put ''MTlEMC1cdTE5REFcdTFBMDAtXHUxQTE2XHUxQTIwLVx1MUE1NFx1MUE4MC1cdTFBODlcdTFBOTAtXHUxQTk5XHUxQUE3XHUxQjA1LVx1MUIzM1x1MUI0NS1cdTFCNENcdTFCNTAtXHUxQjU5XHUxQjgzLVx1MUJBMFx1MUJBRS1cdTFCRTVcdTFDMDAtXHUxQzIzXHUxQzQwLVx1MUM0OVx1MUM0''@;'; put 'put ''RC1cdTFDN0RcdTFDODAtXHUxQzg4XHUxQzkwLVx1MUNCQVx1MUNCRC1cdTFDQkZcdTFDRTktXHUxQ0VDXHUxQ0VFLVx1MUNGM1x1MUNGNVx1MUNGNlx1MUNGQVx1MUQwMC1cdTFEQkZcdTFFMDAtXHUxRjE1XHUxRjE4LVx1MUYxRFx1MUYyMC1cdTFGNDVcdTFGNDgtXHUxRjREXHUxRjUwLVx1''@;'; put 'put ''MUY1N1x1MUY1OVx1MUY1Qlx1MUY1RFx1MUY1Ri1cdTFGN0RcdTFGODAtXHUxRkI0XHUxRkI2LVx1MUZCQ1x1MUZCRVx1MUZDMi1cdTFGQzRcdTFGQzYtXHUxRkNDXHUxRkQwLVx1MUZEM1x1MUZENi1cdTFGREJcdTFGRTAtXHUxRkVDXHUxRkYyLVx1MUZGNFx1MUZGNi1cdTFGRkNcdTIwNzBc''@;'; put 'put ''dTIwNzFcdTIwNzQtXHUyMDc5XHUyMDdGLVx1MjA4OVx1MjA5MC1cdTIwOUNcdTIxMDJcdTIxMDdcdTIxMEEtXHUyMTEzXHUyMTE1XHUyMTE5LVx1MjExRFx1MjEyNFx1MjEyNlx1MjEyOFx1MjEyQS1cdTIxMkRcdTIxMkYtXHUyMTM5XHUyMTNDLVx1MjEzRlx1MjE0NS1cdTIxNDlcdTIxNEVc''@;'; put 'put ''dTIxNTAtXHUyMTg5XHUyNDYwLVx1MjQ5Qlx1MjRFQS1cdTI0RkZcdTI3NzYtXHUyNzkzXHUyQzAwLVx1MkNFNFx1MkNFQi1cdTJDRUVcdTJDRjJcdTJDRjNcdTJDRkRcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ4MC1cdTJEOTZcdTJEQTAtXHUyREE2''@;'; put 'put ''XHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkUyRlx1MzAwNS1cdTMwMDdcdTMwMjEtXHUzMDI5XHUzMDMxLVx1MzAzNVx1MzAzOC1cdTMwM0NcdTMwNDEtXHUzMDk2XHUz''@;'; put 'put ''MDlELVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRlx1MzEzMS1cdTMxOEVcdTMxOTItXHUzMTk1XHUzMUEwLVx1MzFCRlx1MzFGMC1cdTMxRkZcdTMyMjAtXHUzMjI5XHUzMjQ4LVx1MzI0Rlx1MzI1MS1cdTMyNUZcdTMyODAtXHUzMjg5XHUzMkIxLVx1MzJC''@;'; put 'put ''Rlx1MzQwMC1cdTREQkZcdTRFMDAtXHVBNDhDXHVBNEQwLVx1QTRGRFx1QTUwMC1cdUE2MENcdUE2MTAtXHVBNjJCXHVBNjQwLVx1QTY2RVx1QTY3Ri1cdUE2OURcdUE2QTAtXHVBNkVGXHVBNzE3LVx1QTcxRlx1QTcyMi1cdUE3ODhcdUE3OEItXHVBN0NBXHVBN0QwXHVBN0QxXHVBN0QzXHVB''@;'; put 'put ''N0Q1LVx1QTdEOVx1QTdGMi1cdUE4MDFcdUE4MDMtXHVBODA1XHVBODA3LVx1QTgwQVx1QTgwQy1cdUE4MjJcdUE4MzAtXHVBODM1XHVBODQwLVx1QTg3M1x1QTg4Mi1cdUE4QjNcdUE4RDAtXHVBOEQ5XHVBOEYyLVx1QThGN1x1QThGQlx1QThGRFx1QThGRVx1QTkwMC1cdUE5MjVcdUE5MzAt''@;'; put 'put ''XHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0YtXHVBOUQ5XHVBOUUwLVx1QTlFNFx1QTlFNi1cdUE5RkVcdUFBMDAtXHVBQTI4XHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFBNTAtXHVBQTU5XHVBQTYwLVx1QUE3Nlx1QUE3QVx1QUE3RS1cdUFBQUZcdUFBQjFcdUFB''@;'; put 'put ''QjVcdUFBQjZcdUFBQjktXHVBQUJEXHVBQUMwXHVBQUMyXHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUFcdUFBRjItXHVBQUY0XHVBQjAxLVx1QUIwNlx1QUIwOS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIyNlx1QUIyOC1cdUFCMkVcdUFCMzAtXHVBQjVBXHVBQjVDLVx1QUI2OVx1''@;'; put 'put ''QUI3MC1cdUFCRTJcdUFCRjAtXHVBQkY5XHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVEN0ZCXHVGOTAwLVx1RkE2RFx1RkE3MC1cdUZBRDlcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1RkIxRFx1RkIxRi1cdUZCMjhcdUZCMkEtXHVGQjM2XHVGQjM4LVx1RkIzQ1x1RkIz''@;'; put 'put ''RVx1RkI0MFx1RkI0MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZCRDMtXHVGRDNEXHVGRDUwLVx1RkQ4Rlx1RkQ5Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTcwLVx1RkU3NFx1RkU3Ni1cdUZFRkNcdUZGMTAtXHVGRjE5XHVGRjIxLVx1RkYzQVx1RkY0MS1cdUZGNUFcdUZGNjYtXHVG''@;'; put 'put ''RkJFXHVGRkMyLVx1RkZDN1x1RkZDQS1cdUZGQ0ZcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZEQ118XHVEODAwW1x1REMwMC1cdURDMEJcdURDMEQtXHVEQzI2XHVEQzI4LVx1REMzQVx1REMzQ1x1REMzRFx1REMzRi1cdURDNERcdURDNTAtXHVEQzVEXHVEQzgwLVx1RENGQVx1REQwNy1cdURE''@;'; put 'put ''MzNcdURENDAtXHVERDc4XHVERDhBXHVERDhCXHVERTgwLVx1REU5Q1x1REVBMC1cdURFRDBcdURFRTEtXHVERUZCXHVERjAwLVx1REYyM1x1REYyRC1cdURGNEFcdURGNTAtXHVERjc1XHVERjgwLVx1REY5RFx1REZBMC1cdURGQzNcdURGQzgtXHVERkNGXHVERkQxLVx1REZENV18XHVEODAx''@;'; put 'put ''W1x1REMwMC1cdURDOURcdURDQTAtXHVEQ0E5XHVEQ0IwLVx1RENEM1x1RENEOC1cdURDRkJcdUREMDAtXHVERDI3XHVERDMwLVx1REQ2M1x1REQ3MC1cdUREN0FcdUREN0MtXHVERDhBXHVERDhDLVx1REQ5Mlx1REQ5NFx1REQ5NVx1REQ5Ny1cdUREQTFcdUREQTMtXHVEREIxXHVEREIzLVx1''@;'; put 'put ''RERCOVx1RERCQlx1RERCQ1x1REUwMC1cdURGMzZcdURGNDAtXHVERjU1XHVERjYwLVx1REY2N1x1REY4MC1cdURGODVcdURGODctXHVERkIwXHVERkIyLVx1REZCQV18XHVEODAyW1x1REMwMC1cdURDMDVcdURDMDhcdURDMEEtXHVEQzM1XHVEQzM3XHVEQzM4XHVEQzNDXHVEQzNGLVx1REM1''@;'; put 'put ''NVx1REM1OC1cdURDNzZcdURDNzktXHVEQzlFXHVEQ0E3LVx1RENBRlx1RENFMC1cdURDRjJcdURDRjRcdURDRjVcdURDRkItXHVERDFCXHVERDIwLVx1REQzOVx1REQ4MC1cdUREQjdcdUREQkMtXHVERENGXHVEREQyLVx1REUwMFx1REUxMC1cdURFMTNcdURFMTUtXHVERTE3XHVERTE5LVx1''@;'; put 'put ''REUzNVx1REU0MC1cdURFNDhcdURFNjAtXHVERTdFXHVERTgwLVx1REU5Rlx1REVDMC1cdURFQzdcdURFQzktXHVERUU0XHVERUVCLVx1REVFRlx1REYwMC1cdURGMzVcdURGNDAtXHVERjU1XHVERjU4LVx1REY3Mlx1REY3OC1cdURGOTFcdURGQTktXHVERkFGXXxcdUQ4MDNbXHVEQzAwLVx1''@;'; put 'put ''REM0OFx1REM4MC1cdURDQjJcdURDQzAtXHVEQ0YyXHVEQ0ZBLVx1REQyM1x1REQzMC1cdUREMzlcdURFNjAtXHVERTdFXHVERTgwLVx1REVBOVx1REVCMFx1REVCMVx1REYwMC1cdURGMjdcdURGMzAtXHVERjQ1XHVERjUxLVx1REY1NFx1REY3MC1cdURGODFcdURGQjAtXHVERkNCXHVERkUw''@;'; put 'put ''LVx1REZGNl18XHVEODA0W1x1REMwMy1cdURDMzdcdURDNTItXHVEQzZGXHVEQzcxXHVEQzcyXHVEQzc1XHVEQzgzLVx1RENBRlx1RENEMC1cdURDRThcdURDRjAtXHVEQ0Y5XHVERDAzLVx1REQyNlx1REQzNi1cdUREM0ZcdURENDRcdURENDdcdURENTAtXHVERDcyXHVERDc2XHVERDgzLVx1''@;'; put 'put ''RERCMlx1RERDMS1cdUREQzRcdURERDAtXHVERERBXHVERERDXHVEREUxLVx1RERGNFx1REUwMC1cdURFMTFcdURFMTMtXHVERTJCXHVERTNGXHVERTQwXHVERTgwLVx1REU4Nlx1REU4OFx1REU4QS1cdURFOERcdURFOEYtXHVERTlEXHVERTlGLVx1REVBOFx1REVCMC1cdURFREVcdURFRjAt''@;'; put 'put ''XHVERUY5XHVERjA1LVx1REYwQ1x1REYwRlx1REYxMFx1REYxMy1cdURGMjhcdURGMkEtXHVERjMwXHVERjMyXHVERjMzXHVERjM1LVx1REYzOVx1REYzRFx1REY1MFx1REY1RC1cdURGNjFdfFx1RDgwNVtcdURDMDAtXHVEQzM0XHVEQzQ3LVx1REM0QVx1REM1MC1cdURDNTlcdURDNUYtXHVE''@;'; put 'put ''QzYxXHVEQzgwLVx1RENBRlx1RENDNFx1RENDNVx1RENDN1x1RENEMC1cdURDRDlcdUREODAtXHVEREFFXHVEREQ4LVx1REREQlx1REUwMC1cdURFMkZcdURFNDRcdURFNTAtXHVERTU5XHVERTgwLVx1REVBQVx1REVCOFx1REVDMC1cdURFQzlcdURGMDAtXHVERjFBXHVERjMwLVx1REYzQlx1''@;'; put 'put ''REY0MC1cdURGNDZdfFx1RDgwNltcdURDMDAtXHVEQzJCXHVEQ0EwLVx1RENGMlx1RENGRi1cdUREMDZcdUREMDlcdUREMEMtXHVERDEzXHVERDE1XHVERDE2XHVERDE4LVx1REQyRlx1REQzRlx1REQ0MVx1REQ1MC1cdURENTlcdUREQTAtXHVEREE3XHVEREFBLVx1REREMFx1RERFMVx1RERF''@;'; put 'put ''M1x1REUwMFx1REUwQi1cdURFMzJcdURFM0FcdURFNTBcdURFNUMtXHVERTg5XHVERTlEXHVERUIwLVx1REVGOF18XHVEODA3W1x1REMwMC1cdURDMDhcdURDMEEtXHVEQzJFXHVEQzQwXHVEQzUwLVx1REM2Q1x1REM3Mi1cdURDOEZcdUREMDAtXHVERDA2XHVERDA4XHVERDA5XHVERDBCLVx1''@;'; put 'put ''REQzMFx1REQ0Nlx1REQ1MC1cdURENTlcdURENjAtXHVERDY1XHVERDY3XHVERDY4XHVERDZBLVx1REQ4OVx1REQ5OFx1RERBMC1cdUREQTlcdURFRTAtXHVERUYyXHVERjAyXHVERjA0LVx1REYxMFx1REYxMi1cdURGMzNcdURGNTAtXHVERjU5XHVERkIwXHVERkMwLVx1REZENF18XHVEODA4''@;'; put 'put ''W1x1REMwMC1cdURGOTldfFx1RDgwOVtcdURDMDAtXHVEQzZFXHVEQzgwLVx1REQ0M118XHVEODBCW1x1REY5MC1cdURGRjBdfFtcdUQ4MENcdUQ4MUMtXHVEODIwXHVEODIyXHVEODQwLVx1RDg2OFx1RDg2QS1cdUQ4NkNcdUQ4NkYtXHVEODcyXHVEODc0LVx1RDg3OVx1RDg4MC1cdUQ4ODNc''@;'; put 'put ''dUQ4ODUtXHVEODg3XVtcdURDMDAtXHVERkZGXXxcdUQ4MERbXHVEQzAwLVx1REMyRlx1REM0MS1cdURDNDZdfFx1RDgxMVtcdURDMDAtXHVERTQ2XXxcdUQ4MUFbXHVEQzAwLVx1REUzOFx1REU0MC1cdURFNUVcdURFNjAtXHVERTY5XHVERTcwLVx1REVCRVx1REVDMC1cdURFQzlcdURFRDAt''@;'; put 'put ''XHVERUVEXHVERjAwLVx1REYyRlx1REY0MC1cdURGNDNcdURGNTAtXHVERjU5XHVERjVCLVx1REY2MVx1REY2My1cdURGNzdcdURGN0QtXHVERjhGXXxcdUQ4MUJbXHVERTQwLVx1REU5Nlx1REYwMC1cdURGNEFcdURGNTBcdURGOTMtXHVERjlGXHVERkUwXHVERkUxXHVERkUzXXxcdUQ4MjFb''@;'; put 'put ''XHVEQzAwLVx1REZGN118XHVEODIzW1x1REMwMC1cdURDRDVcdUREMDAtXHVERDA4XXxcdUQ4MkJbXHVERkYwLVx1REZGM1x1REZGNS1cdURGRkJcdURGRkRcdURGRkVdfFx1RDgyQ1tcdURDMDAtXHVERDIyXHVERDMyXHVERDUwLVx1REQ1Mlx1REQ1NVx1REQ2NC1cdURENjdcdURENzAtXHVE''@;'; put 'put ''RUZCXXxcdUQ4MkZbXHVEQzAwLVx1REM2QVx1REM3MC1cdURDN0NcdURDODAtXHVEQzg4XHVEQzkwLVx1REM5OV18XHVEODM0W1x1REVDMC1cdURFRDNcdURFRTAtXHVERUYzXHVERjYwLVx1REY3OF18XHVEODM1W1x1REMwMC1cdURDNTRcdURDNTYtXHVEQzlDXHVEQzlFXHVEQzlGXHVEQ0Ey''@;'; put 'put ''XHVEQ0E1XHVEQ0E2XHVEQ0E5LVx1RENBQ1x1RENBRS1cdURDQjlcdURDQkJcdURDQkQtXHVEQ0MzXHVEQ0M1LVx1REQwNVx1REQwNy1cdUREMEFcdUREMEQtXHVERDE0XHVERDE2LVx1REQxQ1x1REQxRS1cdUREMzlcdUREM0ItXHVERDNFXHVERDQwLVx1REQ0NFx1REQ0Nlx1REQ0QS1cdURE''@;'; put 'put ''NTBcdURENTItXHVERUE1XHVERUE4LVx1REVDMFx1REVDMi1cdURFREFcdURFREMtXHVERUZBXHVERUZDLVx1REYxNFx1REYxNi1cdURGMzRcdURGMzYtXHVERjRFXHVERjUwLVx1REY2RVx1REY3MC1cdURGODhcdURGOEEtXHVERkE4XHVERkFBLVx1REZDMlx1REZDNC1cdURGQ0JcdURGQ0Ut''@;'; put 'put ''XHVERkZGXXxcdUQ4MzdbXHVERjAwLVx1REYxRVx1REYyNS1cdURGMkFdfFx1RDgzOFtcdURDMzAtXHVEQzZEXHVERDAwLVx1REQyQ1x1REQzNy1cdUREM0RcdURENDAtXHVERDQ5XHVERDRFXHVERTkwLVx1REVBRFx1REVDMC1cdURFRUJcdURFRjAtXHVERUY5XXxcdUQ4MzlbXHVEQ0QwLVx1''@;'; put 'put ''RENFQlx1RENGMC1cdURDRjlcdURGRTAtXHVERkU2XHVERkU4LVx1REZFQlx1REZFRFx1REZFRVx1REZGMC1cdURGRkVdfFx1RDgzQVtcdURDMDAtXHVEQ0M0XHVEQ0M3LVx1RENDRlx1REQwMC1cdURENDNcdURENEJcdURENTAtXHVERDU5XXxcdUQ4M0JbXHVEQzcxLVx1RENBQlx1RENBRC1c''@;'; put 'put ''dURDQUZcdURDQjEtXHVEQ0I0XHVERDAxLVx1REQyRFx1REQyRi1cdUREM0RcdURFMDAtXHVERTAzXHVERTA1LVx1REUxRlx1REUyMVx1REUyMlx1REUyNFx1REUyN1x1REUyOS1cdURFMzJcdURFMzQtXHVERTM3XHVERTM5XHVERTNCXHVERTQyXHVERTQ3XHVERTQ5XHVERTRCXHVERTRELVx1''@;'; put 'put ''REU0Rlx1REU1MVx1REU1Mlx1REU1NFx1REU1N1x1REU1OVx1REU1Qlx1REU1RFx1REU1Rlx1REU2MVx1REU2Mlx1REU2NFx1REU2Ny1cdURFNkFcdURFNkMtXHVERTcyXHVERTc0LVx1REU3N1x1REU3OS1cdURFN0NcdURFN0VcdURFODAtXHVERTg5XHVERThCLVx1REU5Qlx1REVBMS1cdURF''@;'; put 'put ''QTNcdURFQTUtXHVERUE5XHVERUFCLVx1REVCQl18XHVEODNDW1x1REQwMC1cdUREMENdfFx1RDgzRVtcdURGRjAtXHVERkY5XXxcdUQ4NjlbXHVEQzAwLVx1REVERlx1REYwMC1cdURGRkZdfFx1RDg2RFtcdURDMDAtXHVERjM5XHVERjQwLVx1REZGRl18XHVEODZFW1x1REMwMC1cdURDMURc''@;'; put 'put ''dURDMjAtXHVERkZGXXxcdUQ4NzNbXHVEQzAwLVx1REVBMVx1REVCMC1cdURGRkZdfFx1RDg3QVtcdURDMDAtXHVERkUwXXxcdUQ4N0VbXHVEQzAwLVx1REUxRF18XHVEODg0W1x1REMwMC1cdURGNEFcdURGNTAtXHVERkZGXXxcdUQ4ODhbXHVEQzAwLVx1REZBRl0pLykpJiYoIXJbMV0mJiFy''@;'; put 'put ''WzJdfHwhZXx8dGhpcy5ydWxlcy5pbmxpbmUucHVuY3R1YXRpb24uZXhlYyhlKSkpe3ZhciBuPXJbMF0ubGVuZ3RoLTEscz1uLHA9MCxnPSIqIj09PXJbMF1bMF0/dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcuckRlbGltQXN0OnRoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nLnJEZWxpbVVu''@;'; put 'put ''ZDtmb3IoZy5sYXN0SW5kZXg9MCx1PXUuc2xpY2UoLTEqdC5sZW5ndGgrbik7bnVsbCE9KHI9Zy5leGVjKHUpKTspe3ZhciBELG89clsxXXx8clsyXXx8clszXXx8cls0XXx8cls1XXx8cls2XTtpZihvKWlmKG89by5sZW5ndGgsclszXXx8cls0XSlzKz1vO2Vsc2UgaWYoKHJbNV18fHJbNl0p''@;'; put 'put ''JiZuJTMmJiEoKG4rbyklMykpcCs9bztlbHNlIGlmKCEoMDwocy09bykpKXJldHVybiBvPU1hdGgubWluKG8sbytzK3ApLEQ9dC5zbGljZSgwLG4rci5pbmRleCtvKzEpLE1hdGgubWluKG4sbyklMj8obz1ELnNsaWNlKDEsLTEpLHt0eXBlOiJlbSIscmF3OkQsdGV4dDpvLHRva2Vuczp0aGlz''@;'; put 'put ''LmxleGVyLmlubGluZVRva2VucyhvKX0pOihvPUQuc2xpY2UoMiwtMikse3R5cGU6InN0cm9uZyIscmF3OkQsdGV4dDpvLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2VucyhvKX0pfX19LGkuY29kZXNwYW49ZnVuY3Rpb24obil7dmFyIHUsZSxyO2lmKG49dGhpcy5ydWxlcy5pbmxpbmUu''@;'; put 'put ''Y29kZS5leGVjKG4pKXJldHVybiByPW5bMl0ucmVwbGFjZSgvXG4vZywiICIpLHU9L1teIF0vLnRlc3QociksZT0vXiAvLnRlc3QocikmJi8gJC8udGVzdChyKSxyPXkocj11JiZlP3Iuc3Vic3RyaW5nKDEsci5sZW5ndGgtMSk6ciwhMCkse3R5cGU6ImNvZGVzcGFuIixyYXc6blswXSx0ZXh0''@;'; put 'put ''OnJ9fSxpLmJyPWZ1bmN0aW9uKHQpe2lmKHQ9dGhpcy5ydWxlcy5pbmxpbmUuYnIuZXhlYyh0KSlyZXR1cm57dHlwZToiYnIiLHJhdzp0WzBdfX0saS5kZWw9ZnVuY3Rpb24odCl7aWYodD10aGlzLnJ1bGVzLmlubGluZS5kZWwuZXhlYyh0KSlyZXR1cm57dHlwZToiZGVsIixyYXc6dFswXSx0''@;'; put 'put ''ZXh0OnRbMl0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKHRbMl0pfX0saS5hdXRvbGluaz1mdW5jdGlvbihyLHUpe3ZhciBlO2lmKHI9dGhpcy5ydWxlcy5pbmxpbmUuYXV0b2xpbmsuZXhlYyhyKSlyZXR1cm4gdT0iQCI9PT1yWzJdPyJtYWlsdG86IisoZT15KHRoaXMub3B0aW9u''@;'; put 'put ''cy5tYW5nbGU/dShyWzFdKTpyWzFdKSk6ZT15KHJbMV0pLHt0eXBlOiJsaW5rIixyYXc6clswXSx0ZXh0OmUsaHJlZjp1LHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzplLHRleHQ6ZX1dfX0saS51cmw9ZnVuY3Rpb24odCx1KXt2YXIgZSxyLG4scztpZihlPXRoaXMucnVsZXMuaW5saW5lLnVy''@;'; put 'put ''bC5leGVjKHQpKXtpZigiQCI9PT1lWzJdKW49Im1haWx0bzoiKyhyPXkodGhpcy5vcHRpb25zLm1hbmdsZT91KGVbMF0pOmVbMF0pKTtlbHNle2Zvcig7cz1lWzBdLGVbMF09dGhpcy5ydWxlcy5pbmxpbmUuX2JhY2twZWRhbC5leGVjKGVbMF0pWzBdLHMhPT1lWzBdOyk7cj15KGVbMF0pLG49''@;'; put 'put ''Ind3dy4iPT09ZVsxXT8iaHR0cDovLyIrZVswXTplWzBdfXJldHVybnt0eXBlOiJsaW5rIixyYXc6ZVswXSx0ZXh0OnIsaHJlZjpuLHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzpyLHRleHQ6cn1dfX19LGkuaW5saW5lVGV4dD1mdW5jdGlvbih0LHUpe2lmKHQ9dGhpcy5ydWxlcy5pbmxpbmUu''@;'; put 'put ''dGV4dC5leGVjKHQpKXJldHVybiB1PXRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz90aGlzLm9wdGlvbnMuc2FuaXRpemU/dGhpcy5vcHRpb25zLnNhbml0aXplcj90aGlzLm9wdGlvbnMuc2FuaXRpemVyKHRbMF0pOnkodFswXSk6dFswXTp5KHRoaXMub3B0aW9ucy5zbWFydHlwYW50cz91''@;'; put 'put ''KHRbMF0pOnRbMF0pLHt0eXBlOiJ0ZXh0IixyYXc6dFswXSx0ZXh0OnV9fSxhfSgpLGY9e25ld2xpbmU6L14oPzogKig/OlxufCQpKSsvLGNvZGU6L14oIHs0fVteXG5dKyg/OlxuKD86ICooPzpcbnwkKSkqKT8pKy8sZmVuY2VzOi9eIHswLDN9KGB7Myx9KD89W15gXG5dKig/OlxufCQpKXx+''@;'; put 'put ''ezMsfSkoW15cbl0qKSg/OlxufCQpKD86fChbXHNcU10qPykoPzpcbnwkKSkoPzogezAsM31cMVt+YF0qICooPz1cbnwkKXwkKS8saHI6L14gezAsM30oKD86LVtcdCBdKil7Myx9fCg/Ol9bIFx0XSopezMsfXwoPzpcKlsgXHRdKil7Myx9KSg/OlxuK3wkKS8saGVhZGluZzovXiB7MCwzfSgj''@;'; put 'put ''ezEsNn0pKD89XHN8JCkoLiopKD86XG4rfCQpLyxibG9ja3F1b3RlOi9eKCB7MCwzfT4gPyhwYXJhZ3JhcGh8W15cbl0qKSg/OlxufCQpKSsvLGxpc3Q6L14oIHswLDN9YnVsbCkoWyBcdF1bXlxuXSs/KT8oPzpcbnwkKS8saHRtbDoiXiB7MCwzfSg/Ojwoc2NyaXB0fHByZXxzdHlsZXx0ZXh0''@;'; put 'put ''YXJlYSlbXFxzPl1bXFxzXFxTXSo/KD86PC9cXDE+W15cXG5dKlxcbit8JCl8Y29tbWVudFteXFxuXSooXFxuK3wkKXw8XFw/W1xcc1xcU10qPyg/OlxcPz5cXG4qfCQpfDwhW0EtWl1bXFxzXFxTXSo/KD86Plxcbip8JCl8PCFcXFtDREFUQVxcW1tcXHNcXFNdKj8oPzpcXF1cXF0+XFxuKnwk''@;'; put 'put ''KXw8Lz8odGFnKSg/OiArfFxcbnwvPz4pW1xcc1xcU10qPyg/Oig/OlxcbiAqKStcXG58JCl8PCg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpKFthLXpdW1xcdy1dKikoPzphdHRyaWJ1dGUpKj8gKi8/Pig/PVsgXFx0XSooPzpcXG58JCkpW1xcc1xcU10qPyg/Oig/OlxcbiAqKStcXG58''@;'; put 'put ''JCl8PC8oPyFzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKVthLXpdW1xcdy1dKlxccyo+KD89WyBcXHRdKig/OlxcbnwkKSlbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKSkiLGRlZjovXiB7MCwzfVxbKGxhYmVsKVxdOiAqKD86XG4gKik/KFtePFxzXVteXHNdKnw8Lio/PikoPzooPzog''@;'; put 'put ''Kyg/OlxuICopP3wgKlxuICopKHRpdGxlKSk/ICooPzpcbit8JCkvLHRhYmxlOkksbGhlYWRpbmc6L14oKD86KD8hXmJ1bGwgKS58XG4oPyFcbnxidWxsICkpKz8pXG4gezAsM30oPSt8LSspICooPzpcbit8JCkvLF9wYXJhZ3JhcGg6L14oW15cbl0rKD86XG4oPyFocnxoZWFkaW5nfGxoZWFk''@;'; put 'put ''aW5nfGJsb2NrcXVvdGV8ZmVuY2VzfGxpc3R8aHRtbHx0YWJsZXwgK1xuKVteXG5dKykqKS8sdGV4dDovXlteXG5dKy8sX2xhYmVsOi8oPyFccypcXSkoPzpcXC58W15cW1xdXFxdKSsvLF90aXRsZTovKD86Iig/OlxcIj98W14iXFxdKSoifCdbXidcbl0qKD86XG5bXidcbl0rKSpcbj8nfFwo''@;'; put 'put ''W14oKV0qXCkpL30sYz0oZi5kZWY9RShmLmRlZikucmVwbGFjZSgibGFiZWwiLGYuX2xhYmVsKS5yZXBsYWNlKCJ0aXRsZSIsZi5fdGl0bGUpLmdldFJlZ2V4KCksZi5idWxsZXQ9Lyg/OlsqKy1dfFxkezEsOX1bLildKS8sZi5saXN0SXRlbVN0YXJ0PUUoL14oICopKGJ1bGwpICovKS5yZXBs''@;'; put 'put ''YWNlKCJidWxsIixmLmJ1bGxldCkuZ2V0UmVnZXgoKSxmLmxpc3Q9RShmLmxpc3QpLnJlcGxhY2UoL2J1bGwvZyxmLmJ1bGxldCkucmVwbGFjZSgiaHIiLCJcXG4rKD89XFwxPyg/Oig/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/OlxcKiAqKXszLH0pKD86XFxuK3wkKSkiKS5yZXBsYWNlKCJk''@;'; put 'put ''ZWYiLCJcXG4rKD89IitmLmRlZi5zb3VyY2UrIikiKS5nZXRSZWdleCgpLGYuX3RhZz0iYWRkcmVzc3xhcnRpY2xlfGFzaWRlfGJhc2V8YmFzZWZvbnR8YmxvY2txdW90ZXxib2R5fGNhcHRpb258Y2VudGVyfGNvbHxjb2xncm91cHxkZHxkZXRhaWxzfGRpYWxvZ3xkaXJ8ZGl2fGRsfGR0fGZp''@;'; put 'put ''ZWxkc2V0fGZpZ2NhcHRpb258ZmlndXJlfGZvb3Rlcnxmb3JtfGZyYW1lfGZyYW1lc2V0fGhbMS02XXxoZWFkfGhlYWRlcnxocnxodG1sfGlmcmFtZXxsZWdlbmR8bGl8bGlua3xtYWlufG1lbnV8bWVudWl0ZW18bWV0YXxuYXZ8bm9mcmFtZXN8b2x8b3B0Z3JvdXB8b3B0aW9ufHB8cGFyYW18''@;'; put 'put ''c2VjdGlvbnxzb3VyY2V8c3VtbWFyeXx0YWJsZXx0Ym9keXx0ZHx0Zm9vdHx0aHx0aGVhZHx0aXRsZXx0cnx0cmFja3x1bCIsZi5fY29tbWVudD0vPCEtLSg/IS0/PilbXHNcU10qPyg/Oi0tPnwkKS8sZi5odG1sPUUoZi5odG1sLCJpIikucmVwbGFjZSgiY29tbWVudCIsZi5fY29tbWVudCku''@;'; put 'put ''cmVwbGFjZSgidGFnIixmLl90YWcpLnJlcGxhY2UoImF0dHJpYnV0ZSIsLyArW2EtekEtWjpfXVtcdy46LV0qKD86ICo9ICoiW14iXG5dKiJ8ICo9IConW14nXG5dKid8ICo9ICpbXlxzIic9PD5gXSspPy8pLmdldFJlZ2V4KCksZi5saGVhZGluZz1FKGYubGhlYWRpbmcpLnJlcGxhY2UoL2J1''@;'; put 'put ''bGwvZyxmLmJ1bGxldCkuZ2V0UmVnZXgoKSxmLnBhcmFncmFwaD1FKGYuX3BhcmFncmFwaCkucmVwbGFjZSgiaHIiLGYuaHIpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0gIikucmVwbGFjZSgifGxoZWFkaW5nIiwiIikucmVwbGFjZSgifHRhYmxlIiwiIikucmVwbGFjZSgiYmxv''@;'; put 'put ''Y2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwv''@;'; put 'put ''Pz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLGYuX3RhZykuZ2V0UmVnZXgoKSxmLmJsb2NrcXVvdGU9RShmLmJsb2NrcXVvdGUpLnJlcGxhY2UoInBhcmFncmFwaCIsZi5wYXJhZ3JhcGgpLmdldFJlZ2V4KCksZi5ub3JtYWw9dih7fSxmKSxm''@;'; put 'put ''LmdmbT12KHt9LGYubm9ybWFsLHt0YWJsZToiXiAqKFteXFxuIF0uKlxcfC4qKVxcbiB7MCwzfSg/OlxcfCAqKT8oOj8tKzo/ICooPzpcXHwgKjo/LSs6PyAqKSopKD86XFx8ICopPyg/OlxcbigoPzooPyEgKlxcbnxocnxoZWFkaW5nfGJsb2NrcXVvdGV8Y29kZXxmZW5jZXN8bGlzdHxodG1s''@;'; put 'put ''KS4qKD86XFxufCQpKSopXFxuKnwkKSJ9KSxmLmdmbS50YWJsZT1FKGYuZ2ZtLnRhYmxlKS5yZXBsYWNlKCJociIsZi5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSAiKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImNvZGUiLCIgezR9W15cXG5d''@;'; put 'put ''IikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHBy''@;'; put 'put ''ZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixmLl90YWcpLmdldFJlZ2V4KCksZi5nZm0ucGFyYWdyYXBoPUUoZi5fcGFyYWdyYXBoKS5yZXBsYWNlKCJociIsZi5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSAiKS5yZXBsYWNlKCJ8bGhlYWRpbmciLCIi''@;'; put 'put ''KS5yZXBsYWNlKCJ0YWJsZSIsZi5nZm0udGFibGUpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4p''@;'; put 'put ''XSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixmLl90YWcpLmdldFJlZ2V4KCksZi5wZWRhbnRpYz12KHt9LGYubm9ybWFsLHtodG1sOkUoIl4gKig/OmNvbW1lbnQg''@;'; put 'put ''Kig/OlxcbnxcXHMqJCl8PCh0YWcpW1xcc1xcU10rPzwvXFwxPiAqKD86XFxuezIsfXxcXHMqJCl8PHRhZyg/OlwiW15cIl0qXCJ8J1teJ10qJ3xcXHNbXidcIi8+XFxzXSopKj8vPz4gKig/OlxcbnsyLH18XFxzKiQpKSIpLnJlcGxhY2UoImNvbW1lbnQiLGYuX2NvbW1lbnQpLnJlcGxhY2Uo''@;'; put 'put ''L3RhZy9nLCIoPyEoPzphfGVtfHN0cm9uZ3xzbWFsbHxzfGNpdGV8cXxkZm58YWJicnxkYXRhfHRpbWV8Y29kZXx2YXJ8c2FtcHxrYmR8c3VifHN1cHxpfGJ8dXxtYXJrfHJ1Ynl8cnR8cnB8YmRpfGJkb3xzcGFufGJyfHdicnxpbnN8ZGVsfGltZylcXGIpXFx3Kyg/ITp8W15cXHdcXHNAXSpA''@;'; put 'put ''KVxcYiIpLmdldFJlZ2V4KCksZGVmOi9eICpcWyhbXlxdXSspXF06ICo8PyhbXlxzPl0rKT4/KD86ICsoWyIoXVteXG5dK1siKV0pKT8gKig/OlxuK3wkKS8saGVhZGluZzovXigjezEsNn0pKC4qKSg/OlxuK3wkKS8sZmVuY2VzOkksbGhlYWRpbmc6L14oLis/KVxuIHswLDN9KD0rfC0rKSAq''@;'; put 'put ''KD86XG4rfCQpLyxwYXJhZ3JhcGg6RShmLm5vcm1hbC5fcGFyYWdyYXBoKS5yZXBsYWNlKCJociIsZi5ocikucmVwbGFjZSgiaGVhZGluZyIsIiAqI3sxLDZ9ICpbXlxuXSIpLnJlcGxhY2UoImxoZWFkaW5nIixmLmxoZWFkaW5nKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJl''@;'; put 'put ''cGxhY2UoInxmZW5jZXMiLCIiKS5yZXBsYWNlKCJ8bGlzdCIsIiIpLnJlcGxhY2UoInxodG1sIiwiIikuZ2V0UmVnZXgoKX0pLHtlc2NhcGU6L15cXChbISIjJCUmJygpKissXC0uLzo7PD0+P0BcW1xdXFxeX2B7fH1+XSkvLGF1dG9saW5rOi9ePChzY2hlbWU6W15cc1x4MDAtXHgxZjw+XSp8''@;'; put 'put ''ZW1haWwpPi8sdXJsOkksdGFnOiJeY29tbWVudHxePC9bYS16QS1aXVtcXHc6LV0qXFxzKj58XjxbYS16QS1aXVtcXHctXSooPzphdHRyaWJ1dGUpKj9cXHMqLz8+fF48XFw/W1xcc1xcU10qP1xcPz58XjwhW2EtekEtWl0rXFxzW1xcc1xcU10qPz58XjwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/''@;'; put 'put ''XFxdXFxdPiIsbGluazovXiE/XFsobGFiZWwpXF1cKFxzKihocmVmKSg/OlxzKyh0aXRsZSkpP1xzKlwpLyxyZWZsaW5rOi9eIT9cWyhsYWJlbClcXVxbKHJlZilcXS8sbm9saW5rOi9eIT9cWyhyZWYpXF0oPzpcW1xdKT8vLHJlZmxpbmtTZWFyY2g6InJlZmxpbmt8bm9saW5rKD8hXFwoKSIs''@;'; put 'put ''ZW1TdHJvbmc6e2xEZWxpbTovXig/OlwqKyg/OigoPyFcKilbcHVuY3RdKXxbXlxzKl0pKXxeXysoPzooKD8hXylbcHVuY3RdKXwoW15cc19dKSkvLHJEZWxpbUFzdDovXlteXypdKj9fX1teXypdKj9cKlteXypdKj8oPz1fXyl8W14qXSsoPz1bXipdKXwoPyFcKilbcHVuY3RdKFwqKykoPz1b''@;'; put 'put ''XHNdfCQpfFtecHVuY3Rcc10oXCorKSg/IVwqKSg/PVtwdW5jdFxzXXwkKXwoPyFcKilbcHVuY3Rcc10oXCorKSg/PVtecHVuY3Rcc10pfFtcc10oXCorKSg/IVwqKSg/PVtwdW5jdF0pfCg/IVwqKVtwdW5jdF0oXCorKSg/IVwqKSg/PVtwdW5jdF0pfFtecHVuY3Rcc10oXCorKSg/PVtecHVu''@;'; put 'put ''Y3Rcc10pLyxyRGVsaW1VbmQ6L15bXl8qXSo/XCpcKlteXypdKj9fW15fKl0qPyg/PVwqXCopfFteX10rKD89W15fXSl8KD8hXylbcHVuY3RdKF8rKSg/PVtcc118JCl8W15wdW5jdFxzXShfKykoPyFfKSg/PVtwdW5jdFxzXXwkKXwoPyFfKVtwdW5jdFxzXShfKykoPz1bXnB1bmN0XHNdKXxb''@;'; put 'put ''XHNdKF8rKSg/IV8pKD89W3B1bmN0XSl8KD8hXylbcHVuY3RdKF8rKSg/IV8pKD89W3B1bmN0XSkvfSxjb2RlOi9eKGArKShbXmBdfFteYF1bXHNcU10qP1teYF0pXDEoPyFgKS8sYnI6L14oIHsyLH18XFwpXG4oPyFccyokKS8sZGVsOkksdGV4dDovXihgK3xbXmBdKSg/Oig/PSB7Mix9XG4p''@;'; put 'put ''fFtcc1xTXSo/KD86KD89W1xcPCFcW2AqX118XGJffCQpfFteIF0oPz0gezIsfVxuKSkpLyxwdW5jdHVhdGlvbjovXigoPyFbKl9dKVtcc3B1bmN0dWF0aW9uXSkvfSk7ZnVuY3Rpb24ga2UoYSl7cmV0dXJuIGEucmVwbGFjZSgvLS0tL2csIlx1MjAxNCIpLnJlcGxhY2UoLy0tL2csIlx1MjAx''@;'; put 'put ''MyIpLnJlcGxhY2UoLyhefFstXHUyMDE0LyhcW3siXHNdKScvZywiJDFcdTIwMTgiKS5yZXBsYWNlKC8nL2csIlx1MjAxOSIpLnJlcGxhY2UoLyhefFstXHUyMDE0LyhcW3tcdTIwMThcc10pIi9nLCIkMVx1MjAxYyIpLnJlcGxhY2UoLyIvZywiXHUyMDFkIikucmVwbGFjZSgvXC57M30vZywi''@;'; put 'put ''XHUyMDI2Iil9ZnVuY3Rpb24gc2UoYSl7Zm9yKHZhciBpLHQ9IiIsdT1hLmxlbmd0aCxlPTA7ZTx1O2UrKylpPWEuY2hhckNvZGVBdChlKSx0Kz0iJiMiKyhpPS41PE1hdGgucmFuZG9tKCk/IngiK2kudG9TdHJpbmcoMTYpOmkpKyI7IjtyZXR1cm4gdH1jLl9wdW5jdHVhdGlvbj0iXFxwe1B9''@;'; put 'put ''JCs8PT5gXnx+IixjLnB1bmN0dWF0aW9uPUUoYy5wdW5jdHVhdGlvbiwidSIpLnJlcGxhY2UoL3B1bmN0dWF0aW9uL2csYy5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksYy5ibG9ja1NraXA9L1xbW15bXF1dKj9cXVwoW15cKFwpXSo/XCl8YFteYF0qP2B8PFtePD5dKj8+L2csYy5hbnlQdW5j''@;'; put 'put ''dHVhdGlvbj0vXFxbcHVuY3RdL2csYy5fZXNjYXBlcz0vXFwoW3B1bmN0XSkvZyxjLl9jb21tZW50PUUoZi5fY29tbWVudCkucmVwbGFjZSgiKD86LS1ceDNlfCQpIiwiLS1ceDNlIikuZ2V0UmVnZXgoKSxjLmVtU3Ryb25nLmxEZWxpbT1FKGMuZW1TdHJvbmcubERlbGltLCJ1IikucmVwbGFj''@;'; put 'put ''ZSgvcHVuY3QvZyxjLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxjLmVtU3Ryb25nLnJEZWxpbUFzdD1FKGMuZW1TdHJvbmcuckRlbGltQXN0LCJndSIpLnJlcGxhY2UoL3B1bmN0L2csYy5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksYy5lbVN0cm9uZy5yRGVsaW1VbmQ9RShjLmVtU3Ryb25n''@;'; put 'put ''LnJEZWxpbVVuZCwiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLGMuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLGMuYW55UHVuY3R1YXRpb249RShjLmFueVB1bmN0dWF0aW9uLCJndSIpLnJlcGxhY2UoL3B1bmN0L2csYy5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksYy5fZXNjYXBlcz1FKGMuX2Vz''@;'; put 'put ''Y2FwZXMsImd1IikucmVwbGFjZSgvcHVuY3QvZyxjLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxjLl9zY2hlbWU9L1thLXpBLVpdW2EtekEtWjAtOSsuLV17MSwzMX0vLGMuX2VtYWlsPS9bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dKyhAKVthLXpBLVowLTldKD86W2EtekEtWjAt''@;'; put 'put ''OS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSsoPyFbLV9dKS8sYy5hdXRvbGluaz1FKGMuYXV0b2xpbmspLnJlcGxhY2UoInNjaGVtZSIsYy5fc2NoZW1lKS5yZXBsYWNlKCJlbWFpbCIsYy5fZW1haWwpLmdl''@;'; put 'put ''dFJlZ2V4KCksYy5fYXR0cmlidXRlPS9ccytbYS16QS1aOl9dW1x3LjotXSooPzpccyo9XHMqIlteIl0qInxccyo9XHMqJ1teJ10qJ3xccyo9XHMqW15ccyInPTw+YF0rKT8vLGMudGFnPUUoYy50YWcpLnJlcGxhY2UoImNvbW1lbnQiLGMuX2NvbW1lbnQpLnJlcGxhY2UoImF0dHJpYnV0ZSIs''@;'; put 'put ''Yy5fYXR0cmlidXRlKS5nZXRSZWdleCgpLGMuX2xhYmVsPS8oPzpcWyg/OlxcLnxbXlxbXF1cXF0pKlxdfFxcLnxgW15gXSpgfFteXFtcXVxcYF0pKj8vLGMuX2hyZWY9LzwoPzpcXC58W15cbjw+XFxdKSs+fFteXHNceDAwLVx4MWZdKi8sYy5fdGl0bGU9LyIoPzpcXCI/fFteIlxcXSkqInwn''@;'; put 'put ''KD86XFwnP3xbXidcXF0pKid8XCgoPzpcXFwpP3xbXilcXF0pKlwpLyxjLmxpbms9RShjLmxpbmspLnJlcGxhY2UoImxhYmVsIixjLl9sYWJlbCkucmVwbGFjZSgiaHJlZiIsYy5faHJlZikucmVwbGFjZSgidGl0bGUiLGMuX3RpdGxlKS5nZXRSZWdleCgpLGMucmVmbGluaz1FKGMucmVmbGlu''@;'; put 'put ''aykucmVwbGFjZSgibGFiZWwiLGMuX2xhYmVsKS5yZXBsYWNlKCJyZWYiLGYuX2xhYmVsKS5nZXRSZWdleCgpLGMubm9saW5rPUUoYy5ub2xpbmspLnJlcGxhY2UoInJlZiIsZi5fbGFiZWwpLmdldFJlZ2V4KCksYy5yZWZsaW5rU2VhcmNoPUUoYy5yZWZsaW5rU2VhcmNoLCJnIikucmVwbGFj''@;'; put 'put ''ZSgicmVmbGluayIsYy5yZWZsaW5rKS5yZXBsYWNlKCJub2xpbmsiLGMubm9saW5rKS5nZXRSZWdleCgpLGMubm9ybWFsPXYoe30sYyksYy5wZWRhbnRpYz12KHt9LGMubm9ybWFsLHtzdHJvbmc6e3N0YXJ0Oi9eX198XCpcKi8sbWlkZGxlOi9eX18oPz1cUykoW1xzXFNdKj9cUylfXyg/IV8p''@;'; put 'put ''fF5cKlwqKD89XFMpKFtcc1xTXSo/XFMpXCpcKig/IVwqKS8sZW5kQXN0Oi9cKlwqKD8hXCopL2csZW5kVW5kOi9fXyg/IV8pL2d9LGVtOntzdGFydDovXl98XCovLG1pZGRsZTovXigpXCooPz1cUykoW1xzXFNdKj9cUylcKig/IVwqKXxeXyg/PVxTKShbXHNcU10qP1xTKV8oPyFfKS8sZW5k''@;'; put 'put ''QXN0Oi9cKig/IVwqKS9nLGVuZFVuZDovXyg/IV8pL2d9LGxpbms6RSgvXiE/XFsobGFiZWwpXF1cKCguKj8pXCkvKS5yZXBsYWNlKCJsYWJlbCIsYy5fbGFiZWwpLmdldFJlZ2V4KCkscmVmbGluazpFKC9eIT9cWyhsYWJlbClcXVxzKlxbKFteXF1dKilcXS8pLnJlcGxhY2UoImxhYmVsIixj''@;'; put 'put ''Ll9sYWJlbCkuZ2V0UmVnZXgoKX0pLGMuZ2ZtPXYoe30sYy5ub3JtYWwse2VzY2FwZTpFKGMuZXNjYXBlKS5yZXBsYWNlKCJdKSIsIn58XSkiKS5nZXRSZWdleCgpLF9leHRlbmRlZF9lbWFpbDovW0EtWmEtejAtOS5fKy1dKyhAKVthLXpBLVowLTktX10rKD86XC5bYS16QS1aMC05LV9dKlth''@;'; put 'put ''LXpBLVowLTldKSsoPyFbLV9dKS8sdXJsOi9eKCg/OmZ0cHxodHRwcz8pOlwvXC98d3d3XC4pKD86W2EtekEtWjAtOVwtXStcLj8pK1teXHM8XSp8XmVtYWlsLyxfYmFja3BlZGFsOi8oPzpbXj8hLiw6OypfJyJ+KCkmXSt8XChbXildKlwpfCYoPyFbYS16QS1aMC05XSs7JCl8Wz8hLiw6Oypf''@;'; put 'put ''JyJ+KV0rKD8hJCkpKy8sZGVsOi9eKH5+PykoPz1bXlxzfl0pKFtcc1xTXSo/W15cc35dKVwxKD89W15+XXwkKS8sdGV4dDovXihbYH5dK3xbXmB+XSkoPzooPz0gezIsfVxuKXwoPz1bYS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXStAKXxbXHNcU10qPyg/Oig/PVtcXDwhXFtgKn5f''@;'; put 'put ''XXxcYl98aHR0cHM/OlwvXC98ZnRwOlwvXC98d3d3XC58JCl8W14gXSg/PSB7Mix9XG4pfFteYS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXSg/PVthLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dK0ApKSkvfSksYy5nZm0udXJsPUUoYy5nZm0udXJsLCJpIikucmVwbGFjZSgi''@;'; put 'put ''ZW1haWwiLGMuZ2ZtLl9leHRlbmRlZF9lbWFpbCkuZ2V0UmVnZXgoKSxjLmJyZWFrcz12KHt9LGMuZ2ZtLHticjpFKGMuYnIpLnJlcGxhY2UoInsyLH0iLCIqIikuZ2V0UmVnZXgoKSx0ZXh0OkUoYy5nZm0udGV4dCkucmVwbGFjZSgiXFxiXyIsIlxcYl98IHsyLH1cXG4iKS5yZXBsYWNlKC9c''@;'; put 'put ''ezIsXH0vZywiKiIpLmdldFJlZ2V4KCl9KTt2YXIgUz1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoZSl7dGhpcy50b2tlbnM9W10sdGhpcy50b2tlbnMubGlua3M9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLm9wdGlvbnM9ZXx8Qy5kZWZhdWx0cyx0aGlzLm9wdGlvbnMudG9rZW5pemVyPXRoaXMu''@;'; put 'put ''b3B0aW9ucy50b2tlbml6ZXJ8fG5ldyBqLHRoaXMudG9rZW5pemVyPXRoaXMub3B0aW9ucy50b2tlbml6ZXIsdGhpcy50b2tlbml6ZXIub3B0aW9ucz10aGlzLm9wdGlvbnMsKHRoaXMudG9rZW5pemVyLmxleGVyPXRoaXMpLmlubGluZVF1ZXVlPVtdLHRoaXMuc3RhdGU9e2luTGluazohMSxp''@;'; put 'put ''blJhd0Jsb2NrOiExLHRvcDohMH0sZT17YmxvY2s6Zi5ub3JtYWwsaW5saW5lOmMubm9ybWFsfSx0aGlzLm9wdGlvbnMucGVkYW50aWM/KGUuYmxvY2s9Zi5wZWRhbnRpYyxlLmlubGluZT1jLnBlZGFudGljKTp0aGlzLm9wdGlvbnMuZ2ZtJiYoZS5ibG9jaz1mLmdmbSxlLmlubGluZT10aGlz''@;'; put 'put ''Lm9wdGlvbnMuYnJlYWtzP2MuYnJlYWtzOmMuZ2ZtKSx0aGlzLnRva2VuaXplci5ydWxlcz1lfWEubGV4PWZ1bmN0aW9uKGUscil7cmV0dXJuIG5ldyBhKHIpLmxleChlKX0sYS5sZXhJbmxpbmU9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gbmV3IGEocikuaW5saW5lVG9rZW5zKGUpfTt2YXIgdCx1''@;'; put 'put ''PWEucHJvdG90eXBlO3JldHVybiB1LmxleD1mdW5jdGlvbihlKXt2YXIgcjtmb3IoZT1lLnJlcGxhY2UoL1xyXG58XHIvZywiXG4iKSx0aGlzLmJsb2NrVG9rZW5zKGUsdGhpcy50b2tlbnMpO3I9dGhpcy5pbmxpbmVRdWV1ZS5zaGlmdCgpOyl0aGlzLmlubGluZVRva2VucyhyLnNyYyxyLnRv''@;'; put 'put ''a2Vucyk7cmV0dXJuIHRoaXMudG9rZW5zfSx1LmJsb2NrVG9rZW5zPWZ1bmN0aW9uKGUscil7dmFyIG4scyxwLGcsRD10aGlzO2Zvcih2b2lkIDA9PT1yJiYocj1bXSksZT10aGlzLm9wdGlvbnMucGVkYW50aWM/ZS5yZXBsYWNlKC9cdC9nLCIgICAgIikucmVwbGFjZSgvXiArJC9nbSwiIik6''@;'; put 'put ''ZS5yZXBsYWNlKC9eKCAqKShcdCspL2dtLGZ1bmN0aW9uKEYsZCx4KXtyZXR1cm4gZCsiICAgICIucmVwZWF0KHgubGVuZ3RoKX0pO2U7KXt2YXIgbz1mdW5jdGlvbigpe2lmKEQub3B0aW9ucy5leHRlbnNpb25zJiZELm9wdGlvbnMuZXh0ZW5zaW9ucy5ibG9jayYmRC5vcHRpb25zLmV4dGVu''@;'; put 'put ''c2lvbnMuYmxvY2suc29tZShmdW5jdGlvbihsKXtyZXR1cm4hIShuPWwuY2FsbCh7bGV4ZXI6RH0sZSxyKSkmJihlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksci5wdXNoKG4pLCEwKX0pKXJldHVybiJjb250aW51ZSI7aWYobj1ELnRva2VuaXplci5zcGFjZShlKSlyZXR1cm4gZT1lLnN1''@;'; put 'put ''YnN0cmluZyhuLnJhdy5sZW5ndGgpLDE9PT1uLnJhdy5sZW5ndGgmJjA8ci5sZW5ndGg/cltyLmxlbmd0aC0xXS5yYXcrPSJcbiI6ci5wdXNoKG4pLCJjb250aW51ZSI7aWYobj1ELnRva2VuaXplci5jb2RlKGUpKXJldHVybiBlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksIShzPXJbci5s''@;'; put 'put ''ZW5ndGgtMV0pfHwicGFyYWdyYXBoIiE9PXMudHlwZSYmInRleHQiIT09cy50eXBlP3IucHVzaChuKToocy5yYXcrPSJcbiIrbi5yYXcscy50ZXh0Kz0iXG4iK24udGV4dCxELmlubGluZVF1ZXVlW0QuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1zLnRleHQpLCJjb250aW51ZSI7aWYoKG49''@;'; put 'put ''RC50b2tlbml6ZXIuZmVuY2VzKGUpKXx8KG49RC50b2tlbml6ZXIuaGVhZGluZyhlKSl8fChuPUQudG9rZW5pemVyLmhyKGUpKXx8KG49RC50b2tlbml6ZXIuYmxvY2txdW90ZShlKSl8fChuPUQudG9rZW5pemVyLmxpc3QoZSkpfHwobj1ELnRva2VuaXplci5odG1sKGUpKSlyZXR1cm4gZT1l''@;'; put 'put ''LnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLHIucHVzaChuKSwiY29udGludWUiO2lmKG49RC50b2tlbml6ZXIuZGVmKGUpKXJldHVybiBlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksIShzPXJbci5sZW5ndGgtMV0pfHwicGFyYWdyYXBoIiE9PXMudHlwZSYmInRleHQiIT09cy50eXBlP0Qu''@;'; put 'put ''dG9rZW5zLmxpbmtzW24udGFnXXx8KEQudG9rZW5zLmxpbmtzW24udGFnXT17aHJlZjpuLmhyZWYsdGl0bGU6bi50aXRsZX0pOihzLnJhdys9IlxuIituLnJhdyxzLnRleHQrPSJcbiIrbi5yYXcsRC5pbmxpbmVRdWV1ZVtELmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9cy50ZXh0KSwiY29u''@;'; put 'put ''dGludWUiO2lmKChuPUQudG9rZW5pemVyLnRhYmxlKGUpKXx8KG49RC50b2tlbml6ZXIubGhlYWRpbmcoZSkpKXJldHVybiBlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksci5wdXNoKG4pLCJjb250aW51ZSI7dmFyIEYsZCx4O2lmKHA9ZSxELm9wdGlvbnMuZXh0ZW5zaW9ucyYmRC5vcHRp''@;'; put 'put ''b25zLmV4dGVuc2lvbnMuc3RhcnRCbG9jayYmKEY9MS8wLGQ9ZS5zbGljZSgxKSxELm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydEJsb2NrLmZvckVhY2goZnVuY3Rpb24obCl7Im51bWJlciI9PXR5cGVvZih4PWwuY2FsbCh7bGV4ZXI6dGhpc30sZCkpJiYwPD14JiYoRj1NYXRoLm1pbihGLHgp''@;'; put 'put ''KX0pLEY8MS8wKSYmMDw9RiYmKHA9ZS5zdWJzdHJpbmcoMCxGKzEpKSxELnN0YXRlLnRvcCYmKG49RC50b2tlbml6ZXIucGFyYWdyYXBoKHApKSlyZXR1cm4gcz1yW3IubGVuZ3RoLTFdLGcmJiJwYXJhZ3JhcGgiPT09cy50eXBlPyhzLnJhdys9IlxuIituLnJhdyxzLnRleHQrPSJcbiIrbi50''@;'; put 'put ''ZXh0LEQuaW5saW5lUXVldWUucG9wKCksRC5pbmxpbmVRdWV1ZVtELmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9cy50ZXh0KTpyLnB1c2gobiksZz1wLmxlbmd0aCE9PWUubGVuZ3RoLGU9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSwiY29udGludWUiO2lmKG49RC50b2tlbml6ZXIudGV4''@;'; put 'put ''dChlKSlyZXR1cm4gZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLChzPXJbci5sZW5ndGgtMV0pJiYidGV4dCI9PT1zLnR5cGU/KHMucmF3Kz0iXG4iK24ucmF3LHMudGV4dCs9IlxuIituLnRleHQsRC5pbmxpbmVRdWV1ZS5wb3AoKSxELmlubGluZVF1ZXVlW0QuaW5saW5lUXVldWUubGVu''@;'; put 'put ''Z3RoLTFdLnNyYz1zLnRleHQpOnIucHVzaChuKSwiY29udGludWUiO2lmKGUpe3ZhciBoPSJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrZS5jaGFyQ29kZUF0KDApO2lmKEQub3B0aW9ucy5zaWxlbnQpcmV0dXJuIGNvbnNvbGUuZXJyb3IoaCksImJyZWFrIjt0aHJvdyBuZXcgRXJyb3IoaCl9''@;'; put 'put ''fSgpO2lmKCJjb250aW51ZSIhPT1vJiYiYnJlYWsiPT09bylicmVha31yZXR1cm4gdGhpcy5zdGF0ZS50b3A9ITAscn0sdS5pbmxpbmU9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdGhpcy5pbmxpbmVRdWV1ZS5wdXNoKHtzcmM6ZSx0b2tlbnM6cj12b2lkIDA9PT1yP1tdOnJ9KSxyfSx1LmlubGlu''@;'; put 'put ''ZVRva2Vucz1mdW5jdGlvbihlLHIpe3ZhciBuLHMscCxnLEQsbyxGPXRoaXMsZD0odm9pZCAwPT09ciYmKHI9W10pLGUpO2lmKHRoaXMudG9rZW5zLmxpbmtzKXt2YXIgeD1PYmplY3Qua2V5cyh0aGlzLnRva2Vucy5saW5rcyk7aWYoMDx4Lmxlbmd0aClmb3IoO251bGwhPShnPXRoaXMudG9r''@;'; put 'put ''ZW5pemVyLnJ1bGVzLmlubGluZS5yZWZsaW5rU2VhcmNoLmV4ZWMoZCkpOyl4LmluY2x1ZGVzKGdbMF0uc2xpY2UoZ1swXS5sYXN0SW5kZXhPZigiWyIpKzEsLTEpKSYmKGQ9ZC5zbGljZSgwLGcuaW5kZXgpKyJbIisiYSIucmVwZWF0KGdbMF0ubGVuZ3RoLTIpKyJdIitkLnNsaWNlKHRoaXMu''@;'; put 'put ''dG9rZW5pemVyLnJ1bGVzLmlubGluZS5yZWZsaW5rU2VhcmNoLmxhc3RJbmRleCkpfWZvcig7bnVsbCE9KGc9dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmJsb2NrU2tpcC5leGVjKGQpKTspZD1kLnNsaWNlKDAsZy5pbmRleCkrIlsiKyJhIi5yZXBlYXQoZ1swXS5sZW5ndGgtMikrIl0i''@;'; put 'put ''K2Quc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmJsb2NrU2tpcC5sYXN0SW5kZXgpO2Zvcig7bnVsbCE9KGc9dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLmV4ZWMoZCkpOylkPWQuc2xpY2UoMCxnLmluZGV4KSsiKysiK2Quc2xpY2UodGhpcy50''@;'; put 'put ''b2tlbml6ZXIucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLmxhc3RJbmRleCk7Zm9yKDtlOyl7dmFyIGg9ZnVuY3Rpb24oKXtpZihEfHwobz0iIiksRD0hMSxGLm9wdGlvbnMuZXh0ZW5zaW9ucyYmRi5vcHRpb25zLmV4dGVuc2lvbnMuaW5saW5lJiZGLm9wdGlvbnMuZXh0ZW5zaW9ucy5p''@;'; put 'put ''bmxpbmUuc29tZShmdW5jdGlvbihBKXtyZXR1cm4hIShuPUEuY2FsbCh7bGV4ZXI6Rn0sZSxyKSkmJihlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksci5wdXNoKG4pLCEwKX0pKXJldHVybiJjb250aW51ZSI7aWYobj1GLnRva2VuaXplci5lc2NhcGUoZSkpcmV0dXJuIGU9ZS5zdWJzdHJp''@;'; put 'put ''bmcobi5yYXcubGVuZ3RoKSxyLnB1c2gobiksImNvbnRpbnVlIjtpZihuPUYudG9rZW5pemVyLnRhZyhlKSlyZXR1cm4gZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLChzPXJbci5sZW5ndGgtMV0pJiYidGV4dCI9PT1uLnR5cGUmJiJ0ZXh0Ij09PXMudHlwZT8ocy5yYXcrPW4ucmF3LHMu''@;'; put 'put ''dGV4dCs9bi50ZXh0KTpyLnB1c2gobiksImNvbnRpbnVlIjtpZihuPUYudG9rZW5pemVyLmxpbmsoZSkpcmV0dXJuIGU9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSxyLnB1c2gobiksImNvbnRpbnVlIjtpZihuPUYudG9rZW5pemVyLnJlZmxpbmsoZSxGLnRva2Vucy5saW5rcykpcmV0dXJu''@;'; put 'put ''IGU9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSwocz1yW3IubGVuZ3RoLTFdKSYmInRleHQiPT09bi50eXBlJiYidGV4dCI9PT1zLnR5cGU/KHMucmF3Kz1uLnJhdyxzLnRleHQrPW4udGV4dCk6ci5wdXNoKG4pLCJjb250aW51ZSI7aWYoKG49Ri50b2tlbml6ZXIuZW1TdHJvbmcoZSxkLG8p''@;'; put 'put ''KXx8KG49Ri50b2tlbml6ZXIuY29kZXNwYW4oZSkpfHwobj1GLnRva2VuaXplci5icihlKSl8fChuPUYudG9rZW5pemVyLmRlbChlKSl8fChuPUYudG9rZW5pemVyLmF1dG9saW5rKGUsc2UpKXx8IUYuc3RhdGUuaW5MaW5rJiYobj1GLnRva2VuaXplci51cmwoZSxzZSkpKXJldHVybiBlPWUu''@;'; put 'put ''c3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksci5wdXNoKG4pLCJjb250aW51ZSI7dmFyIGwsayxiO2lmKHA9ZSxGLm9wdGlvbnMuZXh0ZW5zaW9ucyYmRi5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRJbmxpbmUmJihsPTEvMCxrPWUuc2xpY2UoMSksRi5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRJ''@;'; put 'put ''bmxpbmUuZm9yRWFjaChmdW5jdGlvbihBKXsibnVtYmVyIj09dHlwZW9mKGI9QS5jYWxsKHtsZXhlcjp0aGlzfSxrKSkmJjA8PWImJihsPU1hdGgubWluKGwsYikpfSksbDwxLzApJiYwPD1sJiYocD1lLnN1YnN0cmluZygwLGwrMSkpLG49Ri50b2tlbml6ZXIuaW5saW5lVGV4dChwLGtlKSly''@;'; put 'put ''ZXR1cm4gZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLCJfIiE9PW4ucmF3LnNsaWNlKC0xKSYmKG89bi5yYXcuc2xpY2UoLTEpKSxEPSEwLChzPXJbci5sZW5ndGgtMV0pJiYidGV4dCI9PT1zLnR5cGU/KHMucmF3Kz1uLnJhdyxzLnRleHQrPW4udGV4dCk6ci5wdXNoKG4pLCJjb250aW51''@;'; put 'put ''ZSI7aWYoZSl7dmFyIHc9IkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitlLmNoYXJDb2RlQXQoMCk7aWYoRi5vcHRpb25zLnNpbGVudClyZXR1cm4gY29uc29sZS5lcnJvcih3KSwiYnJlYWsiO3Rocm93IG5ldyBFcnJvcih3KX19KCk7aWYoImNvbnRpbnVlIiE9PWgmJiJicmVhayI9PT1oKWJy''@;'; put 'put ''ZWFrfXJldHVybiByfSx1PWEsKHQ9W3trZXk6InJ1bGVzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm57YmxvY2s6ZixpbmxpbmU6Y319fV0pJiZQKHUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksYX0oKSxaPWZ1bmN0aW9uKCl7ZnVuY3Rpb24g''@;'; put 'put ''YSh0KXt0aGlzLm9wdGlvbnM9dHx8Qy5kZWZhdWx0c312YXIgaT1hLnByb3RvdHlwZTtyZXR1cm4gaS5jb2RlPWZ1bmN0aW9uKHQsbixlKXt2YXIgcjtyZXR1cm4gbj0obnx8IiIpLm1hdGNoKC9cUyovKVswXSx0aGlzLm9wdGlvbnMuaGlnaGxpZ2h0JiZudWxsIT0ocj10aGlzLm9wdGlvbnMu''@;'; put 'put ''aGlnaGxpZ2h0KHQsbikpJiZyIT09dCYmKGU9ITAsdD1yKSx0PXQucmVwbGFjZSgvXG4kLywiIikrIlxuIixuPyc8cHJlPjxjb2RlIGNsYXNzPSInK3RoaXMub3B0aW9ucy5sYW5nUHJlZml4K3kobikrJyI+JysoZT90OnkodCwhMCkpKyI8L2NvZGU+PC9wcmU+XG4iOiI8cHJlPjxjb2RlPiIr''@;'; put 'put ''KGU/dDp5KHQsITApKSsiPC9jb2RlPjwvcHJlPlxuIn0saS5ibG9ja3F1b3RlPWZ1bmN0aW9uKHQpe3JldHVybiI8YmxvY2txdW90ZT5cbiIrdCsiPC9ibG9ja3F1b3RlPlxuIn0saS5odG1sPWZ1bmN0aW9uKHQsdSl7cmV0dXJuIHR9LGkuaGVhZGluZz1mdW5jdGlvbih0LHUsZSxyKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5vcHRpb25zLmhlYWRlcklkcz8iPGgiK3UrJyBpZD0iJysodGhpcy5vcHRpb25zLmhlYWRlclByZWZpeCtyLnNsdWcoZSkpKyciPicrdCsiPC9oIit1KyI+XG4iOiI8aCIrdSsiPiIrdCsiPC9oIit1KyI+XG4ifSxpLmhyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy54''@;'; put 'put ''aHRtbD8iPGhyLz5cbiI6Ijxocj5cbiJ9LGkubGlzdD1mdW5jdGlvbih0LHUsZSl7dmFyIHI9dT8ib2wiOiJ1bCI7cmV0dXJuIjwiK3IrKHUmJjEhPT1lPycgc3RhcnQ9IicrZSsnIic6IiIpKyI+XG4iK3QrIjwvIityKyI+XG4ifSxpLmxpc3RpdGVtPWZ1bmN0aW9uKHQpe3JldHVybiI8bGk+''@;'; put 'put ''Iit0KyI8L2xpPlxuIn0saS5jaGVja2JveD1mdW5jdGlvbih0KXtyZXR1cm4iPGlucHV0ICIrKHQ/J2NoZWNrZWQ9IiIgJzoiIikrJ2Rpc2FibGVkPSIiIHR5cGU9ImNoZWNrYm94IicrKHRoaXMub3B0aW9ucy54aHRtbD8iIC8iOiIiKSsiPiAifSxpLnBhcmFncmFwaD1mdW5jdGlvbih0KXty''@;'; put 'put ''ZXR1cm4iPHA+Iit0KyI8L3A+XG4ifSxpLnRhYmxlPWZ1bmN0aW9uKHQsdSl7cmV0dXJuIjx0YWJsZT5cbjx0aGVhZD5cbiIrdCsiPC90aGVhZD5cbiIrKHU9dSYmIjx0Ym9keT4iK3UrIjwvdGJvZHk+IikrIjwvdGFibGU+XG4ifSxpLnRhYmxlcm93PWZ1bmN0aW9uKHQpe3JldHVybiI8dHI+''@;'; put 'put ''XG4iK3QrIjwvdHI+XG4ifSxpLnRhYmxlY2VsbD1mdW5jdGlvbih0LHUpe3ZhciBlPXUuaGVhZGVyPyJ0aCI6InRkIjtyZXR1cm4odS5hbGlnbj8iPCIrZSsnIGFsaWduPSInK3UuYWxpZ24rJyI+JzoiPCIrZSsiPiIpK3QrIjwvIitlKyI+XG4ifSxpLnN0cm9uZz1mdW5jdGlvbih0KXtyZXR1''@;'; put 'put ''cm4iPHN0cm9uZz4iK3QrIjwvc3Ryb25nPiJ9LGkuZW09ZnVuY3Rpb24odCl7cmV0dXJuIjxlbT4iK3QrIjwvZW0+In0saS5jb2Rlc3Bhbj1mdW5jdGlvbih0KXtyZXR1cm4iPGNvZGU+Iit0KyI8L2NvZGU+In0saS5icj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMueGh0bWw/Ijxi''@;'; put 'put ''ci8+IjoiPGJyPiJ9LGkuZGVsPWZ1bmN0aW9uKHQpe3JldHVybiI8ZGVsPiIrdCsiPC9kZWw+In0saS5saW5rPWZ1bmN0aW9uKHQsdSxlKXtyZXR1cm4gbnVsbD09PSh0PW5lKHRoaXMub3B0aW9ucy5zYW5pdGl6ZSx0aGlzLm9wdGlvbnMuYmFzZVVybCx0KSk/ZToodD0nPGEgaHJlZj0iJyt0''@;'; put 'put ''KyciJyx1JiYodCs9JyB0aXRsZT0iJyt1KyciJyksdCsiPiIrZSsiPC9hPiIpfSxpLmltYWdlPWZ1bmN0aW9uKHQsdSxlKXtyZXR1cm4gbnVsbD09PSh0PW5lKHRoaXMub3B0aW9ucy5zYW5pdGl6ZSx0aGlzLm9wdGlvbnMuYmFzZVVybCx0KSk/ZToodD0nPGltZyBzcmM9IicrdCsnIiBhbHQ9''@;'; put 'put ''IicrZSsnIicsdSYmKHQrPScgdGl0bGU9IicrdSsnIicpLHQrKHRoaXMub3B0aW9ucy54aHRtbD8iLz4iOiI+IikpfSxpLnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGF9KCksTj1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXt9dmFyIGk9YS5wcm90b3R5cGU7cmV0dXJuIGkuc3Ryb25nPWZ1''@;'; put 'put ''bmN0aW9uKHQpe3JldHVybiB0fSxpLmVtPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxpLmNvZGVzcGFuPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxpLmRlbD1mdW5jdGlvbih0KXtyZXR1cm4gdH0saS5odG1sPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxpLnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHR9''@;'; put 'put ''LGkubGluaz1mdW5jdGlvbih0LHUsZSl7cmV0dXJuIiIrZX0saS5pbWFnZT1mdW5jdGlvbih0LHUsZSl7cmV0dXJuIiIrZX0saS5icj1mdW5jdGlvbigpe3JldHVybiIifSxhfSgpLFg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7dGhpcy5zZWVuPXt9fXZhciBpPWEucHJvdG90eXBlO3JldHVy''@;'; put 'put ''biBpLnNlcmlhbGl6ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC50b0xvd2VyQ2FzZSgpLnRyaW0oKS5yZXBsYWNlKC88WyFcL2Etel0uKj8+L2dpLCIiKS5yZXBsYWNlKC9bXHUyMDAwLVx1MjA2Rlx1MkUwMC1cdTJFN0ZcXCchIiMkJSYoKSorLC4vOjs8PT4/QFtcXV5ge3x9fl0vZywiIikucmVw''@;'; put 'put ''bGFjZSgvXHMvZywiLSIpfSxpLmdldE5leHRTYWZlU2x1Zz1mdW5jdGlvbih0LHUpe3ZhciBlPXQscj0wO2lmKHRoaXMuc2Vlbi5oYXNPd25Qcm9wZXJ0eShlKSlmb3Iocj10aGlzLnNlZW5bdF07ZT10KyItIisgKytyLHRoaXMuc2Vlbi5oYXNPd25Qcm9wZXJ0eShlKTspO3JldHVybiB1fHwo''@;'; put 'put ''dGhpcy5zZWVuW3RdPXIsdGhpcy5zZWVuW2VdPTApLGV9LGkuc2x1Zz1mdW5jdGlvbih0LHUpe3JldHVybiB2b2lkIDA9PT11JiYodT17fSksdD10aGlzLnNlcmlhbGl6ZSh0KSx0aGlzLmdldE5leHRTYWZlU2x1Zyh0LHUuZHJ5cnVuKX0sYX0oKSxUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSh0''@;'; put 'put ''KXt0aGlzLm9wdGlvbnM9dHx8Qy5kZWZhdWx0cyx0aGlzLm9wdGlvbnMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyfHxuZXcgWix0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcix0aGlzLnJlbmRlcmVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMudGV4dFJlbmRl''@;'; put 'put ''cmVyPW5ldyBOLHRoaXMuc2x1Z2dlcj1uZXcgWH1hLnBhcnNlPWZ1bmN0aW9uKHQsdSl7cmV0dXJuIG5ldyBhKHUpLnBhcnNlKHQpfSxhLnBhcnNlSW5saW5lPWZ1bmN0aW9uKHQsdSl7cmV0dXJuIG5ldyBhKHUpLnBhcnNlSW5saW5lKHQpfTt2YXIgaT1hLnByb3RvdHlwZTtyZXR1cm4gaS5w''@;'; put 'put ''YXJzZT1mdW5jdGlvbih0LHUpe3ZvaWQgMD09PXUmJih1PSEwKTtmb3IodmFyIGUscixuLHMscCxnLEQsbyxGLGQseCxoLGwsayxiLHcsQT0iIixCPXQubGVuZ3RoLF89MDtfPEI7XysrKWlmKG89dFtfXSx0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMu''@;'; put 'put ''cmVuZGVyZXJzJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbby50eXBlXSYmKCExIT09KHc9dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW28udHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LG8pKXx8IVsic3BhY2UiLCJociIsImhlYWRpbmciLCJjb2RlIiwidGFi''@;'; put 'put ''bGUiLCJibG9ja3F1b3RlIiwibGlzdCIsImh0bWwiLCJwYXJhZ3JhcGgiLCJ0ZXh0Il0uaW5jbHVkZXMoby50eXBlKSkpQSs9d3x8IiI7ZWxzZSBzd2l0Y2goby50eXBlKXtjYXNlInNwYWNlIjpjb250aW51ZTtjYXNlImhyIjpBKz10aGlzLnJlbmRlcmVyLmhyKCk7Y29udGludWU7Y2FzZSJo''@;'; put 'put ''ZWFkaW5nIjpBKz10aGlzLnJlbmRlcmVyLmhlYWRpbmcodGhpcy5wYXJzZUlubGluZShvLnRva2Vucyksby5kZXB0aCx1ZSh0aGlzLnBhcnNlSW5saW5lKG8udG9rZW5zLHRoaXMudGV4dFJlbmRlcmVyKSksdGhpcy5zbHVnZ2VyKTtjb250aW51ZTtjYXNlImNvZGUiOkErPXRoaXMucmVuZGVy''@;'; put 'put ''ZXIuY29kZShvLnRleHQsby5sYW5nLG8uZXNjYXBlZCk7Y29udGludWU7Y2FzZSJ0YWJsZSI6Zm9yKGc9Rj0iIixuPW8uaGVhZGVyLmxlbmd0aCxlPTA7ZTxuO2UrKylnKz10aGlzLnJlbmRlcmVyLnRhYmxlY2VsbCh0aGlzLnBhcnNlSW5saW5lKG8uaGVhZGVyW2VdLnRva2Vucykse2hlYWRl''@;'; put 'put ''cjohMCxhbGlnbjpvLmFsaWduW2VdfSk7Zm9yKEYrPXRoaXMucmVuZGVyZXIudGFibGVyb3coZyksRD0iIixuPW8ucm93cy5sZW5ndGgsZT0wO2U8bjtlKyspe2ZvcihnPSIiLHM9KHA9by5yb3dzW2VdKS5sZW5ndGgscj0wO3I8cztyKyspZys9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhp''@;'; put 'put ''cy5wYXJzZUlubGluZShwW3JdLnRva2Vucykse2hlYWRlcjohMSxhbGlnbjpvLmFsaWduW3JdfSk7RCs9dGhpcy5yZW5kZXJlci50YWJsZXJvdyhnKX1BKz10aGlzLnJlbmRlcmVyLnRhYmxlKEYsRCk7Y29udGludWU7Y2FzZSJibG9ja3F1b3RlIjpEPXRoaXMucGFyc2Uoby50b2tlbnMpLEEr''@;'; put 'put ''PXRoaXMucmVuZGVyZXIuYmxvY2txdW90ZShEKTtjb250aW51ZTtjYXNlImxpc3QiOmZvcihGPW8ub3JkZXJlZCx6PW8uc3RhcnQsZD1vLmxvb3NlLG49by5pdGVtcy5sZW5ndGgsRD0iIixlPTA7ZTxuO2UrKylsPShoPW8uaXRlbXNbZV0pLmNoZWNrZWQsaz1oLnRhc2sseD0iIixoLnRhc2sm''@;'; put 'put ''JihiPXRoaXMucmVuZGVyZXIuY2hlY2tib3gobCksZD8wPGgudG9rZW5zLmxlbmd0aCYmInBhcmFncmFwaCI9PT1oLnRva2Vuc1swXS50eXBlPyhoLnRva2Vuc1swXS50ZXh0PWIrIiAiK2gudG9rZW5zWzBdLnRleHQsaC50b2tlbnNbMF0udG9rZW5zJiYwPGgudG9rZW5zWzBdLnRva2Vucy5s''@;'; put 'put ''ZW5ndGgmJiJ0ZXh0Ij09PWgudG9rZW5zWzBdLnRva2Vuc1swXS50eXBlJiYoaC50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQ9YisiICIraC50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQpKTpoLnRva2Vucy51bnNoaWZ0KHt0eXBlOiJ0ZXh0Iix0ZXh0OmJ9KTp4Kz1iKSx4Kz10aGlzLnBhcnNl''@;'; put 'put ''KGgudG9rZW5zLGQpLEQrPXRoaXMucmVuZGVyZXIubGlzdGl0ZW0oeCxrLGwpO0ErPXRoaXMucmVuZGVyZXIubGlzdChELEYseik7Y29udGludWU7Y2FzZSJodG1sIjpBKz10aGlzLnJlbmRlcmVyLmh0bWwoby50ZXh0LG8uYmxvY2spO2NvbnRpbnVlO2Nhc2UicGFyYWdyYXBoIjpBKz10aGlz''@;'; put 'put ''LnJlbmRlcmVyLnBhcmFncmFwaCh0aGlzLnBhcnNlSW5saW5lKG8udG9rZW5zKSk7Y29udGludWU7Y2FzZSJ0ZXh0Ijpmb3IoRD1vLnRva2Vucz90aGlzLnBhcnNlSW5saW5lKG8udG9rZW5zKTpvLnRleHQ7XysxPEImJiJ0ZXh0Ij09PXRbXysxXS50eXBlOylEKz0iXG4iKygobz10WysrX10p''@;'; put 'put ''LnRva2Vucz90aGlzLnBhcnNlSW5saW5lKG8udG9rZW5zKTpvLnRleHQpO0ErPXU/dGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgoRCk6RDtjb250aW51ZTtkZWZhdWx0OnZhciB6PSdUb2tlbiB3aXRoICInK28udHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZih0aGlzLm9wdGlvbnMuc2ls''@;'; put 'put ''ZW50KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3Ioeik7dGhyb3cgbmV3IEVycm9yKHopfXJldHVybiBBfSxpLnBhcnNlSW5saW5lPWZ1bmN0aW9uKHQsdSl7dT11fHx0aGlzLnJlbmRlcmVyO2Zvcih2YXIgZSxyLG49IiIscz10Lmxlbmd0aCxwPTA7cDxzO3ArKylpZihlPXRbcF0sdGhpcy5v''@;'; put 'put ''cHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVycyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2UudHlwZV0mJighMSE9PShyPXRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tlLnR5cGVdLmNhbGwoe3BhcnNlcjp0aGlz''@;'; put 'put ''fSxlKSl8fCFbImVzY2FwZSIsImh0bWwiLCJsaW5rIiwiaW1hZ2UiLCJzdHJvbmciLCJlbSIsImNvZGVzcGFuIiwiYnIiLCJkZWwiLCJ0ZXh0Il0uaW5jbHVkZXMoZS50eXBlKSkpbis9cnx8IiI7ZWxzZSBzd2l0Y2goZS50eXBlKXtjYXNlImVzY2FwZSI6Y2FzZSJ0ZXh0IjpuKz11LnRleHQo''@;'; put 'put ''ZS50ZXh0KTticmVhaztjYXNlImh0bWwiOm4rPXUuaHRtbChlLnRleHQpO2JyZWFrO2Nhc2UibGluayI6bis9dS5saW5rKGUuaHJlZixlLnRpdGxlLHRoaXMucGFyc2VJbmxpbmUoZS50b2tlbnMsdSkpO2JyZWFrO2Nhc2UiaW1hZ2UiOm4rPXUuaW1hZ2UoZS5ocmVmLGUudGl0bGUsZS50ZXh0''@;'; put 'put ''KTticmVhaztjYXNlInN0cm9uZyI6bis9dS5zdHJvbmcodGhpcy5wYXJzZUlubGluZShlLnRva2Vucyx1KSk7YnJlYWs7Y2FzZSJlbSI6bis9dS5lbSh0aGlzLnBhcnNlSW5saW5lKGUudG9rZW5zLHUpKTticmVhaztjYXNlImNvZGVzcGFuIjpuKz11LmNvZGVzcGFuKGUudGV4dCk7YnJlYWs7''@;'; put 'put ''Y2FzZSJiciI6bis9dS5icigpO2JyZWFrO2Nhc2UiZGVsIjpuKz11LmRlbCh0aGlzLnBhcnNlSW5saW5lKGUudG9rZW5zLHUpKTticmVhaztkZWZhdWx0OnZhciBnPSdUb2tlbiB3aXRoICInK2UudHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZih0aGlzLm9wdGlvbnMuc2lsZW50KXJl''@;'; put 'put ''dHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoZyk7dGhyb3cgbmV3IEVycm9yKGcpfXJldHVybiBufSxhfSgpLE89ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKHQpe3RoaXMub3B0aW9ucz10fHxDLmRlZmF1bHRzfXZhciBpPWEucHJvdG90eXBlO3JldHVybiBpLnByZXByb2Nlc3M9ZnVuY3Rpb24odCl7''@;'; put 'put ''cmV0dXJuIHR9LGkucG9zdHByb2Nlc3M9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGF9KCkscT0oTy5wYXNzVGhyb3VnaEhvb2tzPW5ldyBTZXQoWyJwcmVwcm9jZXNzIiwicG9zdHByb2Nlc3MiXSksSygicGFyc2VNYXJrZG93biIpKSxWPUsoIm9uRXJyb3IiKTtmdW5jdGlvbiBDZShhLGkpe3Zh''@;'; put 'put ''ciB0PXRoaXM7cmV0dXJuIGZ1bmN0aW9uKHUsZSxyKXsiZnVuY3Rpb24iPT10eXBlb2YgZSYmKHI9ZSxlPW51bGwpO3ZhciBuLHM9dih7fSxlKSxwPShlPXYoe30sdC5kZWZhdWx0cyxzKSxHKHQsVilbVl0oZS5zaWxlbnQsZS5hc3luYyxyKSk7aWYobnVsbD09dSlyZXR1cm4gcChuZXcgRXJy''@;'; put 'put ''b3IoIm1hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkIG9yIG51bGwiKSk7aWYoInN0cmluZyIhPXR5cGVvZiB1KXJldHVybiBwKG5ldyBFcnJvcigibWFya2VkKCk6IGlucHV0IHBhcmFtZXRlciBpcyBvZiB0eXBlICIrT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxs''@;'; put 'put ''KHUpKyIsIHN0cmluZyBleHBlY3RlZCIpKTtpZihzPXIsKG49ZSkmJiFuLnNpbGVudCYmKHMmJmNvbnNvbGUud2FybigibWFya2VkKCk6IGNhbGxiYWNrIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4g''@;'; put 'put ''dGhlIGZ1dHVyZS4gUmVhZCBtb3JlIGhlcmU6IGh0dHBzOi8vbWFya2VkLmpzLm9yZy91c2luZ19wcm8jYXN5bmMiKSwobi5zYW5pdGl6ZXx8bi5zYW5pdGl6ZXIpJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBzYW5pdGl6ZSBhbmQgc2FuaXRpemVyIHBhcmFtZXRlcnMgYXJlIGRlcHJlY2F0''@;'; put 'put ''ZWQgc2luY2UgdmVyc2lvbiAwLjcuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gUmVhZCBtb3JlIGhlcmU6IGh0dHBzOi8vbWFya2VkLmpzLm9yZy8jL1VTSU5HX0FEVkFOQ0VELm1kI29wdGlvbnMiKSwhbi5oaWdobGlnaHQmJiJsYW5n''@;'; put 'put ''dWFnZS0iPT09bi5sYW5nUHJlZml4fHxjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBoaWdobGlnaHQgYW5kIGxhbmdQcmVmaXggcGFyYW1ldGVycyBhcmUgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUg''@;'; put 'put ''ZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtaGlnaGxpZ2h0LiIpLG4ubWFuZ2xlJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBtYW5nbGUgcGFyYW1ldGVyIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGlzIGRlcHJlY2F0ZWQgc2lu''@;'; put 'put ''Y2UgdmVyc2lvbiA1LjAuMCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBUbyBjbGVhciB0aGlzIHdhcm5pbmcsIGluc3RhbGwgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLW1hbmdsZSwgb3IgZGlzYWJsZSBieSBzZXR0aW5nIGB7bWFuZ2xlOiBmYWxz''@;'; put 'put ''ZX1gLiIpLG4uYmFzZVVybCYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogYmFzZVVybCBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRw''@;'; put 'put ''czovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtYmFzZS11cmwuIiksbi5zbWFydHlwYW50cyYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogc21hcnR5cGFudHMgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3''@;'; put 'put ''aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gSW5zdGVhZCB1c2UgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLXNtYXJ0eXBhbnRzLiIpLG4ueGh0bWwmJmNvbnNvbGUud2FybigibWFya2VkKCk6IHhodG1sIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIHNpbmNlIHZl''@;'; put 'put ''cnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC14aHRtbC4iKSxuLmhlYWRlcklkc3x8bi5oZWFkZXJQcmVmaXgpJiZjb25zb2xlLndh''@;'; put 'put ''cm4oIm1hcmtlZCgpOiBoZWFkZXJJZHMgYW5kIGhlYWRlclByZWZpeCBwYXJhbWV0ZXJzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGFyZSBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gVG8gY2xlYXIgdGhpcyB3YXJu''@;'; put 'put ''aW5nLCBpbnN0YWxsICBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtZ2ZtLWhlYWRpbmctaWQsIG9yIGRpc2FibGUgYnkgc2V0dGluZyBge2hlYWRlcklkczogZmFsc2V9YC4iKSxlLmhvb2tzJiYoZS5ob29rcy5vcHRpb25zPWUpLHIpe3ZhciBnLEQ9ZS5oaWdobGlnaHQ7''@;'; put 'put ''dHJ5e2UuaG9va3MmJih1PWUuaG9va3MucHJlcHJvY2Vzcyh1KSksZz1hKHUsZSl9Y2F0Y2goaCl7cmV0dXJuIHAoaCl9dmFyIG8sRj1mdW5jdGlvbihoKXt2YXIgbDtpZighaCl0cnl7ZS53YWxrVG9rZW5zJiZ0LndhbGtUb2tlbnMoZyxlLndhbGtUb2tlbnMpLGw9aShnLGUpLGUuaG9va3Mm''@;'; put 'put ''JihsPWUuaG9va3MucG9zdHByb2Nlc3MobCkpfWNhdGNoKGspe2g9a31yZXR1cm4gZS5oaWdobGlnaHQ9RCxoP3AoaCk6cihudWxsLGwpfTtyZXR1cm4hRHx8RC5sZW5ndGg8Mz9GKCk6KGRlbGV0ZSBlLmhpZ2hsaWdodCxnLmxlbmd0aD8obz0wLHQud2Fsa1Rva2VucyhnLGZ1bmN0aW9uKGgp''@;'; put 'put ''eyJjb2RlIj09PWgudHlwZSYmKG8rKyxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7RChoLnRleHQsaC5sYW5nLGZ1bmN0aW9uKGwsayl7aWYobClyZXR1cm4gRihsKTtudWxsIT1rJiZrIT09aC50ZXh0JiYoaC50ZXh0PWssaC5lc2NhcGVkPSEwKSwwPT0tLW8mJkYoKX0pfSwwKSl9KSx2b2lkKDA9''@;'; put 'put ''PT1vJiZGKCkpKTpGKCkpfWlmKGUuYXN5bmMpcmV0dXJuIFByb21pc2UucmVzb2x2ZShlLmhvb2tzP2UuaG9va3MucHJlcHJvY2Vzcyh1KTp1KS50aGVuKGZ1bmN0aW9uKGgpe3JldHVybiBhKGgsZSl9KS50aGVuKGZ1bmN0aW9uKGgpe3JldHVybiBlLndhbGtUb2tlbnM/UHJvbWlzZS5hbGwo''@;'; put 'put ''dC53YWxrVG9rZW5zKGgsZS53YWxrVG9rZW5zKSkudGhlbihmdW5jdGlvbigpe3JldHVybiBofSk6aH0pLnRoZW4oZnVuY3Rpb24oaCl7cmV0dXJuIGkoaCxlKX0pLnRoZW4oZnVuY3Rpb24oaCl7cmV0dXJuIGUuaG9va3M/ZS5ob29rcy5wb3N0cHJvY2VzcyhoKTpofSkuY2F0Y2gocCk7dHJ5''@;'; put 'put ''e2UuaG9va3MmJih1PWUuaG9va3MucHJlcHJvY2Vzcyh1KSk7dmFyIGQ9YSh1LGUpLHg9KGUud2Fsa1Rva2VucyYmdC53YWxrVG9rZW5zKGQsZS53YWxrVG9rZW5zKSxpKGQsZSkpO3JldHVybiBlLmhvb2tzP2UuaG9va3MucG9zdHByb2Nlc3MoeCk6eH1jYXRjaChoKXtyZXR1cm4gcChoKX19''@;'; put 'put ''fWZ1bmN0aW9uIEVlKGEsaSx0KXtyZXR1cm4gZnVuY3Rpb24odSl7dmFyIGU7aWYodS5tZXNzYWdlKz0iXG5QbGVhc2UgcmVwb3J0IHRoaXMgdG8gaHR0cHM6Ly9naXRodWIuY29tL21hcmtlZGpzL21hcmtlZC4iLGEpcmV0dXJuIGU9IjxwPkFuIGVycm9yIG9jY3VycmVkOjwvcD48cHJlPiIr''@;'; put 'put ''eSh1Lm1lc3NhZ2UrIiIsITApKyI8L3ByZT4iLGk/UHJvbWlzZS5yZXNvbHZlKGUpOnQ/dm9pZCB0KG51bGwsZSk6ZTtpZihpKXJldHVybiBQcm9taXNlLnJlamVjdCh1KTtpZighdCl0aHJvdyB1O3QodSl9fUk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7T2JqZWN0LmRlZmluZVByb3BlcnR5''@;'; put 'put ''KHRoaXMsVix7dmFsdWU6RWV9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxxLHt2YWx1ZTpDZX0pLHRoaXMuZGVmYXVsdHM9e2FzeW5jOiExLGJhc2VVcmw6bnVsbCxicmVha3M6ITEsZXh0ZW5zaW9uczpudWxsLGdmbTohMCxoZWFkZXJJZHM6ITAsaGVhZGVyUHJlZml4OiIiLGhpZ2hs''@;'; put 'put ''aWdodDpudWxsLGhvb2tzOm51bGwsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixtYW5nbGU6ITAscGVkYW50aWM6ITEscmVuZGVyZXI6bnVsbCxzYW5pdGl6ZTohMSxzYW5pdGl6ZXI6bnVsbCxzaWxlbnQ6ITEsc21hcnR5cGFudHM6ITEsdG9rZW5pemVyOm51bGwsd2Fsa1Rva2VuczpudWxsLHho''@;'; put 'put ''dG1sOiExfSx0aGlzLm9wdGlvbnM9dGhpcy5zZXRPcHRpb25zLHRoaXMucGFyc2U9Ryh0aGlzLHEpW3FdKFMubGV4LFQucGFyc2UpLHRoaXMucGFyc2VJbmxpbmU9Ryh0aGlzLHEpW3FdKFMubGV4SW5saW5lLFQucGFyc2VJbmxpbmUpLHRoaXMuUGFyc2VyPVQsdGhpcy5wYXJzZXI9VC5wYXJz''@;'; put 'put ''ZSx0aGlzLlJlbmRlcmVyPVosdGhpcy5UZXh0UmVuZGVyZXI9Tix0aGlzLkxleGVyPVMsdGhpcy5sZXhlcj1TLmxleCx0aGlzLlRva2VuaXplcj1qLHRoaXMuU2x1Z2dlcj1YLHRoaXMuSG9va3M9Tyx0aGlzLnVzZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIGk9YS5wcm90b3R5cGU7cmV0''@;'; put 'put ''dXJuIGkud2Fsa1Rva2Vucz1mdW5jdGlvbih0LHUpe2Zvcih2YXIgZSxyPXRoaXMsbj1bXSxzPVUodCk7IShlPXMoKSkuZG9uZTspIWZ1bmN0aW9uKCl7dmFyIHA9ZS52YWx1ZTtzd2l0Y2gobj1uLmNvbmNhdCh1LmNhbGwocixwKSkscC50eXBlKXtjYXNlInRhYmxlIjpmb3IodmFyIGc9VShw''@;'; put 'put ''LmhlYWRlcik7IShEPWcoKSkuZG9uZTspe3ZhciBEPUQudmFsdWU7bj1uLmNvbmNhdChyLndhbGtUb2tlbnMoRC50b2tlbnMsdSkpfWZvcih2YXIgbyxGPVUocC5yb3dzKTshKG89RigpKS5kb25lOylmb3IodmFyIGQ9VShvLnZhbHVlKTshKHg9ZCgpKS5kb25lOyl7dmFyIHg9eC52YWx1ZTtu''@;'; put 'put ''PW4uY29uY2F0KHIud2Fsa1Rva2Vucyh4LnRva2Vucyx1KSl9YnJlYWs7Y2FzZSJsaXN0IjpuPW4uY29uY2F0KHIud2Fsa1Rva2VucyhwLml0ZW1zLHUpKTticmVhaztkZWZhdWx0OnIuZGVmYXVsdHMuZXh0ZW5zaW9ucyYmci5kZWZhdWx0cy5leHRlbnNpb25zLmNoaWxkVG9rZW5zJiZyLmRl''@;'; put 'put ''ZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnNbcC50eXBlXT9yLmRlZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnNbcC50eXBlXS5mb3JFYWNoKGZ1bmN0aW9uKGgpe249bi5jb25jYXQoci53YWxrVG9rZW5zKHBbaF0sdSkpfSk6cC50b2tlbnMmJihuPW4uY29uY2F0KHIud2Fsa1Rv''@;'; put 'put ''a2VucyhwLnRva2Vucyx1KSkpfX0oKTtyZXR1cm4gbn0saS51c2U9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyx1PXRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9uc3x8e3JlbmRlcmVyczp7fSxjaGlsZFRva2Vuczp7fX0sZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7''@;'; put 'put ''bisrKXJbbl09YXJndW1lbnRzW25dO3JldHVybiByLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIHAsZz12KHt9LHMpO2lmKGcuYXN5bmM9dC5kZWZhdWx0cy5hc3luY3x8Zy5hc3luY3x8ITEscy5leHRlbnNpb25zJiYocy5leHRlbnNpb25zLmZvckVhY2goZnVuY3Rpb24obCl7aWYoIWwubmFt''@;'; put 'put ''ZSl0aHJvdyBuZXcgRXJyb3IoImV4dGVuc2lvbiBuYW1lIHJlcXVpcmVkIik7dmFyIGs7aWYobC5yZW5kZXJlciYmKHUucmVuZGVyZXJzW2wubmFtZV09KGs9dS5yZW5kZXJlcnNbbC5uYW1lXSk/ZnVuY3Rpb24oKXtmb3IodmFyIGI9YXJndW1lbnRzLmxlbmd0aCx3PW5ldyBBcnJheShiKSxB''@;'; put 'put ''PTA7QTxiO0ErKyl3W0FdPWFyZ3VtZW50c1tBXTt2YXIgQj1sLnJlbmRlcmVyLmFwcGx5KHRoaXMsdyk7cmV0dXJuITE9PT1CP2suYXBwbHkodGhpcyx3KTpCfTpsLnJlbmRlcmVyKSxsLnRva2VuaXplcil7aWYoIWwubGV2ZWx8fCJibG9jayIhPT1sLmxldmVsJiYiaW5saW5lIiE9PWwubGV2''@;'; put 'put ''ZWwpdGhyb3cgbmV3IEVycm9yKCJleHRlbnNpb24gbGV2ZWwgbXVzdCBiZSAnYmxvY2snIG9yICdpbmxpbmUnIik7dVtsLmxldmVsXT91W2wubGV2ZWxdLnVuc2hpZnQobC50b2tlbml6ZXIpOnVbbC5sZXZlbF09W2wudG9rZW5pemVyXSxsLnN0YXJ0JiYoImJsb2NrIj09PWwubGV2ZWw/dS5z''@;'; put 'put ''dGFydEJsb2NrP3Uuc3RhcnRCbG9jay5wdXNoKGwuc3RhcnQpOnUuc3RhcnRCbG9jaz1bbC5zdGFydF06ImlubGluZSI9PT1sLmxldmVsJiYodS5zdGFydElubGluZT91LnN0YXJ0SW5saW5lLnB1c2gobC5zdGFydCk6dS5zdGFydElubGluZT1bbC5zdGFydF0pKX1sLmNoaWxkVG9rZW5zJiYo''@;'; put 'put ''dS5jaGlsZFRva2Vuc1tsLm5hbWVdPWwuY2hpbGRUb2tlbnMpfSksZy5leHRlbnNpb25zPXUpLHMucmVuZGVyZXIpe3ZhciBELG89dC5kZWZhdWx0cy5yZW5kZXJlcnx8bmV3IFoodC5kZWZhdWx0cyk7Zm9yKEQgaW4gcy5yZW5kZXJlcikhZnVuY3Rpb24obCl7dmFyIGs9b1tsXTtvW2xdPWZ1''@;'; put 'put ''bmN0aW9uKCl7Zm9yKHZhciBiPWFyZ3VtZW50cy5sZW5ndGgsdz1uZXcgQXJyYXkoYiksQT0wO0E8YjtBKyspd1tBXT1hcmd1bWVudHNbQV07dmFyIEI9cy5yZW5kZXJlcltsXS5hcHBseShvLHcpO3JldHVybiExPT09Qj9rLmFwcGx5KG8sdyk6Qn19KEQpO2cucmVuZGVyZXI9b31pZihzLnRv''@;'; put 'put ''a2VuaXplcil7dmFyIEYsZD10LmRlZmF1bHRzLnRva2VuaXplcnx8bmV3IGoodC5kZWZhdWx0cyk7Zm9yKEYgaW4gcy50b2tlbml6ZXIpIWZ1bmN0aW9uKGwpe3ZhciBrPWRbbF07ZFtsXT1mdW5jdGlvbigpe2Zvcih2YXIgYj1hcmd1bWVudHMubGVuZ3RoLHc9bmV3IEFycmF5KGIpLEE9MDtB''@;'; put 'put ''PGI7QSsrKXdbQV09YXJndW1lbnRzW0FdO3ZhciBCPXMudG9rZW5pemVyW2xdLmFwcGx5KGQsdyk7cmV0dXJuITE9PT1CP2suYXBwbHkoZCx3KTpCfX0oRik7Zy50b2tlbml6ZXI9ZH1pZihzLmhvb2tzKXt2YXIgeCxoPXQuZGVmYXVsdHMuaG9va3N8fG5ldyBPO2Zvcih4IGluIHMuaG9va3Mp''@;'; put 'put ''IWZ1bmN0aW9uKGwpe3ZhciBrPWhbbF07aFtsXT1PLnBhc3NUaHJvdWdoSG9va3MuaGFzKGwpP2Z1bmN0aW9uKGIpe3JldHVybiB0LmRlZmF1bHRzLmFzeW5jP1Byb21pc2UucmVzb2x2ZShzLmhvb2tzW2xdLmNhbGwoaCxiKSkudGhlbihmdW5jdGlvbih3KXtyZXR1cm4gay5jYWxsKGgsdyl9''@;'; put 'put ''KTooYj1zLmhvb2tzW2xdLmNhbGwoaCxiKSxrLmNhbGwoaCxiKSl9OmZ1bmN0aW9uKCl7Zm9yKHZhciBiPWFyZ3VtZW50cy5sZW5ndGgsdz1uZXcgQXJyYXkoYiksQT0wO0E8YjtBKyspd1tBXT1hcmd1bWVudHNbQV07dmFyIEI9cy5ob29rc1tsXS5hcHBseShoLHcpO3JldHVybiExPT09Qj9r''@;'; put 'put ''LmFwcGx5KGgsdyk6Qn19KHgpO2cuaG9va3M9aH1zLndhbGtUb2tlbnMmJihwPXQuZGVmYXVsdHMud2Fsa1Rva2VucyxnLndhbGtUb2tlbnM9ZnVuY3Rpb24obCl7dmFyIGs9W107cmV0dXJuIGsucHVzaChzLndhbGtUb2tlbnMuY2FsbCh0aGlzLGwpKSxwP2suY29uY2F0KHAuY2FsbCh0aGlz''@;'; put 'put ''LGwpKTprfSksdC5kZWZhdWx0cz12KHt9LHQuZGVmYXVsdHMsZyl9KSx0aGlzfSxpLnNldE9wdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVmYXVsdHM9dih7fSx0aGlzLmRlZmF1bHRzLHQpLHRoaXN9LGF9KCk7dmFyIFI9bmV3IEkoQy5kZWZhdWx0cyk7ZnVuY3Rpb24gbShhLGks''@;'; put 'put ''dCl7cmV0dXJuIFIucGFyc2UoYSxpLHQpfW0ub3B0aW9ucz1tLnNldE9wdGlvbnM9ZnVuY3Rpb24oYSl7cmV0dXJuIFIuc2V0T3B0aW9ucyhhKSxXKG0uZGVmYXVsdHM9Ui5kZWZhdWx0cyksbX0sbS5nZXREZWZhdWx0cz1RLG0uZGVmYXVsdHM9Qy5kZWZhdWx0cyxtLnVzZT1mdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBSLnVzZS5hcHBseShSLGFyZ3VtZW50cyksVyhtLmRlZmF1bHRzPVIuZGVmYXVsdHMpLG19LG0ud2Fsa1Rva2Vucz1mdW5jdGlvbihhLGkpe3JldHVybiBSLndhbGtUb2tlbnMoYSxpKX0sbS5wYXJzZUlubGluZT1SLnBhcnNlSW5saW5lLG0uUGFyc2VyPVQsbS5wYXJzZXI9VC5w''@;'; put 'put ''YXJzZSxtLlJlbmRlcmVyPVosbS5UZXh0UmVuZGVyZXI9TixtLkxleGVyPVMsbS5sZXhlcj1TLmxleCxtLlRva2VuaXplcj1qLG0uU2x1Z2dlcj1YLG0uSG9va3M9Tzt2YXIgbWU9KG0ucGFyc2U9bSkub3B0aW9ucyx4ZT1tLnNldE9wdGlvbnMsYmU9bS51c2Usd2U9bS53YWxrVG9rZW5zLEJl''@;'; put 'put ''PW0ucGFyc2VJbmxpbmUseWU9bSx2ZT1ULnBhcnNlLF9lPVMubGV4O0MuSG9va3M9TyxDLkxleGVyPVMsQy5NYXJrZWQ9SSxDLlBhcnNlcj1ULEMuUmVuZGVyZXI9WixDLlNsdWdnZXI9WCxDLlRleHRSZW5kZXJlcj1OLEMuVG9rZW5pemVyPWosQy5nZXREZWZhdWx0cz1RLEMubGV4ZXI9X2Us''@;'; put 'put ''Qy5tYXJrZWQ9bSxDLm9wdGlvbnM9bWUsQy5wYXJzZT15ZSxDLnBhcnNlSW5saW5lPUJlLEMucGFyc2VyPXZlLEMuc2V0T3B0aW9ucz14ZSxDLnVzZT1iZSxDLndhbGtUb2tlbnM9d2V9KTs='';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=spinner.16f763cebc6b64df-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA3MiA3MiI+CiAgICA8ZGVmcz4KICAgICAgICA8c3R5bGU+CiAgICAgICAgICAgIC5jbHMtMSwKICAgICAgICAgICAgLmNscy0yIHsKICAg''@;'; put 'put ''ICAgICAgICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgICAgICAgICBzdHJva2UtbWl0ZXJsaW1pdDogMTA7CiAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg6IDVweDsKICAgICAgICAgICAgfQogICAgICAgICAgICAuY2xzLTEgewogICAgICAgICAgICAgICAgc3Ryb2tlOiAjMDAwMDAw''@;'; put 'put ''OwogICAgICAgICAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuMTU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLmNscy0yIHsKICAgICAgICAgICAgICAgIHN0cm9rZTogIzAwNzJhMzsKICAgICAgICAgICAgfQogICAgICAgIDwvc3R5bGU+CiAgICA8L2RlZnM+CiAgICA8dGl0bGU+UHJl''@;'; put 'put ''bG9hZGVyXzcyeDI8L3RpdGxlPgogICAgPGNpcmNsZSBjbGFzcz0iY2xzLTEiIGN4PSIzNiIgY3k9IjM2IiByPSIzMyIvPgogICAgPHBhdGggY2xhc3M9ImNscy0yIiBkPSJNMTQuMyw2MC45QTMzLDMzLDAsMCwxLDM2LDMiPgogICAgPC9wYXRoPgo8L3N2Zz4K'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=styles.ba002e25d103644a-css; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''QGNoYXJzZXQgIlVURi04IjsvKiEKICogQ29weXJpZ2h0IChjKSBIQU5EU09OQ09ERSBzcC4geiBvLiBvLgogKgogKiBIQU5EU09OVEFCTEUgaXMgYSBzb2Z0d2FyZSBkaXN0cmlidXRlZCBieSBIQU5EU09OQ09ERSBzcC4geiBvLiBvLiwgYSBQb2xpc2ggY29ycG9yYXRpb24gYmFzZWQgaW4K''@;'; put 'put ''ICogR2R5bmlhLCBQb2xhbmQsIGF0IEFsZWphIFp3eWNpZXN0d2EgOTYtOTgsIHJlZ2lzdGVyZWQgYnkgdGhlIERpc3RyaWN0IENvdXJ0IGluIEdkYW5zayB1bmRlciBudW1iZXIKICogNTM4NjUxLCBFVSB0YXggSUQgbnVtYmVyOiBQTDU4NjIyOTQwMDIsIHNoYXJlIGNhcGl0YWw6IFBMTiA2''@;'; put 'put ''Miw4MDAuMDAuCiAqCiAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IGFwcGxpY2FibGUgY29weXJpZ2h0IGxhd3MsIGluY2x1ZGluZyBpbnRlcm5hdGlvbmFsIHRyZWF0aWVzLCBhbmQgZHVhbC0KICogbGljZW5zZWQgLSBkZXBlbmRpbmcgb24gd2hldGhlciB5b3VyIHVzZSBmb3Ig''@;'; put 'put ''Y29tbWVyY2lhbCBwdXJwb3NlcywgbWVhbmluZyBpbnRlbmRlZCBmb3Igb3IKICogcmVzdWx0aW5nIGluIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgb3Igbm90LgogKgogKiBJZiB5b3VyIHVzZSBpcyBzdHJpY3RseSBwZXJzb25hbCBvciBzb2xlbHkg''@;'; put 'put ''Zm9yIGV2YWx1YXRpb24gcHVycG9zZXMsIG1lYW5pbmcgZm9yIHRoZSBwdXJwb3NlcyBvZiB0ZXN0aW5nCiAqIHRoZSBzdWl0YWJpbGl0eSwgcGVyZm9ybWFuY2UsIGFuZCB1c2VmdWxuZXNzIG9mIHRoaXMgc29mdHdhcmUgb3V0c2lkZSB0aGUgcHJvZHVjdGlvbiBlbnZpcm9ubWVudCwKICog''@;'; put 'put ''eW91IGFncmVlIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBpbmNsdWRlZCBpbiB0aGUgImhhbmRzb250YWJsZS1ub24tY29tbWVyY2lhbC1saWNlbnNlLnBkZiIgZmlsZS4KICoKICogWW91ciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBmb3IgY29tbWVyY2lhbCBwdXJwb3NlcyBpcyBzdWJqZWN0''@;'; put 'put ''IHRvIHRoZSB0ZXJtcyBpbmNsdWRlZCBpbiBhbiBhcHBsaWNhYmxlCiAqIGxpY2Vuc2UgYWdyZWVtZW50LgogKgogKiBJbiBhbnkgY2FzZSwgeW91IG11c3Qgbm90IG1ha2UgYW55IHN1Y2ggdXNlIG9mIHRoaXMgc29mdHdhcmUgYXMgdG8gZGV2ZWxvcCBzb2Z0d2FyZSB3aGljaCBtYXkgYmUK''@;'; put 'put ''ICogY29uc2lkZXJlZCBjb21wZXRpdGl2ZSB3aXRoIHRoaXMgc29mdHdhcmUuCiAqCiAqIFVOTEVTUyBFWFBSRVNTTFkgQUdSRUVEIE9USEVSV0lTRSwgSEFORFNPTkNPREUgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBPTiBBTiAiQVMgSVMiCiAqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMg''@;'; put 'put ''T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgQU5EIElOIE5PIEVWRU5UIEFORCBVTkRFUiBOTwogKiBMRUdBTCBUSEVPUlksIFNIQUxMIEhBTkRTT05DT0RFIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgRElSRUNULAogKiBJTkRJUkVDVCwgU1BFQ0lBTCwg''@;'; put 'put ''SU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgQVJJU0lORyBGUk9NCiAqIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRISVMgU09GVFdBUkUuCiAqCiAqIFZlcnNpb246IDE2LjIuMAogKiBSZWxlYXNlIGRhdGU6IDI1LzExLzIwMjUgKGJ1aWx0''@;'; put 'put ''IGF0IDIwLzExLzIwMjUgMTM6Mjc6MDUpCiAqLy5oYW5kc29udGFibGUgLnRhYmxlIHRoLC5oYW5kc29udGFibGUgLnRhYmxlIHRke2JvcmRlci10b3A6bm9uZX0uaGFuZHNvbnRhYmxlIHRye2JhY2tncm91bmQ6I2ZmZn0uaGFuZHNvbnRhYmxlIHRke2JhY2tncm91bmQtY29sb3I6aW5oZXJp''@;'; put 'put ''dH0uaGFuZHNvbnRhYmxlIC50YWJsZSBjYXB0aW9uK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRoLC5oYW5kc29udGFibGUgLnRhYmxlIGNhcHRpb24rdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGQsLmhhbmRzb250YWJsZSAudGFibGUgY29sZ3JvdXArdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGgsLmhh''@;'; put 'put ''bmRzb250YWJsZSAudGFibGUgY29sZ3JvdXArdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGQsLmhhbmRzb250YWJsZSAudGFibGUgdGhlYWQ6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQgdGgsLmhhbmRzb250YWJsZSAudGFibGUgdGhlYWQ6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQgdGR7''@;'; put 'put ''Ym9yZGVyLXRvcDoxcHggc29saWQgI0NDQ0NDQ30uaGFuZHNvbnRhYmxlIC50YWJsZS1ib3JkZXJlZHtib3JkZXI6MDtib3JkZXItY29sbGFwc2U6c2VwYXJhdGV9LmhhbmRzb250YWJsZSAudGFibGUtYm9yZGVyZWQgdGgsLmhhbmRzb250YWJsZSAudGFibGUtYm9yZGVyZWQgdGR7Ym9yZGVy''@;'; put 'put ''LWxlZnQ6bm9uZX0uaGFuZHNvbnRhYmxlIC50YWJsZS1ib3JkZXJlZCB0aDpmaXJzdC1jaGlsZCwuaGFuZHNvbnRhYmxlIC50YWJsZS1ib3JkZXJlZCB0ZDpmaXJzdC1jaGlsZHtib3JkZXItbGVmdDoxcHggc29saWQgI0NDQ0NDQ30uaGFuZHNvbnRhYmxlIC50YWJsZT50Ym9keT50cj50ZCwu''@;'; put 'put ''aGFuZHNvbnRhYmxlIC50YWJsZT50Ym9keT50cj50aCwuaGFuZHNvbnRhYmxlIC50YWJsZT50Zm9vdD50cj50ZCwuaGFuZHNvbnRhYmxlIC50YWJsZT50Zm9vdD50cj50aCwuaGFuZHNvbnRhYmxlIC50YWJsZT50aGVhZD50cj50ZCwuaGFuZHNvbnRhYmxlIC50YWJsZT50aGVhZD50cj50aHts''@;'; put 'put ''aW5lLWhlaWdodDoyMXB4O3BhZGRpbmc6MH0uY29sLWxnLTEuaGFuZHNvbnRhYmxlLC5jb2wtbGctMTAuaGFuZHNvbnRhYmxlLC5jb2wtbGctMTEuaGFuZHNvbnRhYmxlLC5jb2wtbGctMTIuaGFuZHNvbnRhYmxlLC5jb2wtbGctMi5oYW5kc29udGFibGUsLmNvbC1sZy0zLmhhbmRzb250YWJs''@;'; put 'put ''ZSwuY29sLWxnLTQuaGFuZHNvbnRhYmxlLC5jb2wtbGctNS5oYW5kc29udGFibGUsLmNvbC1sZy02LmhhbmRzb250YWJsZSwuY29sLWxnLTcuaGFuZHNvbnRhYmxlLC5jb2wtbGctOC5oYW5kc29udGFibGUsLmNvbC1sZy05LmhhbmRzb250YWJsZSwuY29sLW1kLTEuaGFuZHNvbnRhYmxlLC5j''@;'; put 'put ''b2wtbWQtMTAuaGFuZHNvbnRhYmxlLC5jb2wtbWQtMTEuaGFuZHNvbnRhYmxlLC5jb2wtbWQtMTIuaGFuZHNvbnRhYmxlLC5jb2wtbWQtMi5oYW5kc29udGFibGUsLmNvbC1tZC0zLmhhbmRzb250YWJsZSwuY29sLW1kLTQuaGFuZHNvbnRhYmxlLC5jb2wtbWQtNS5oYW5kc29udGFibGUsLmNv''@;'; put 'put ''bC1tZC02LmhhbmRzb250YWJsZSwuY29sLW1kLTcuaGFuZHNvbnRhYmxlLC5jb2wtbWQtOC5oYW5kc29udGFibGUsLmNvbC1tZC05LmhhbmRzb250YWJsZSAuY29sLXNtLTEuaGFuZHNvbnRhYmxlLC5jb2wtc20tMTAuaGFuZHNvbnRhYmxlLC5jb2wtc20tMTEuaGFuZHNvbnRhYmxlLC5jb2wt''@;'; put 'put ''c20tMTIuaGFuZHNvbnRhYmxlLC5jb2wtc20tMi5oYW5kc29udGFibGUsLmNvbC1zbS0zLmhhbmRzb250YWJsZSwuY29sLXNtLTQuaGFuZHNvbnRhYmxlLC5jb2wtc20tNS5oYW5kc29udGFibGUsLmNvbC1zbS02LmhhbmRzb250YWJsZSwuY29sLXNtLTcuaGFuZHNvbnRhYmxlLC5jb2wtc20t''@;'; put 'put ''OC5oYW5kc29udGFibGUsLmNvbC1zbS05LmhhbmRzb250YWJsZSAuY29sLXhzLTEuaGFuZHNvbnRhYmxlLC5jb2wteHMtMTAuaGFuZHNvbnRhYmxlLC5jb2wteHMtMTEuaGFuZHNvbnRhYmxlLC5jb2wteHMtMTIuaGFuZHNvbnRhYmxlLC5jb2wteHMtMi5oYW5kc29udGFibGUsLmNvbC14cy0z''@;'; put 'put ''LmhhbmRzb250YWJsZSwuY29sLXhzLTQuaGFuZHNvbnRhYmxlLC5jb2wteHMtNS5oYW5kc29udGFibGUsLmNvbC14cy02LmhhbmRzb250YWJsZSwuY29sLXhzLTcuaGFuZHNvbnRhYmxlLC5jb2wteHMtOC5oYW5kc29udGFibGUsLmNvbC14cy05LmhhbmRzb250YWJsZXtwYWRkaW5nLWxlZnQ6''@;'; put 'put ''MDtwYWRkaW5nLXJpZ2h0OjB9LmhhbmRzb250YWJsZS5odC13cmFwcGVye2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmhhbmRzb250YWJsZSAudGFibGUtc3RyaXBlZD50Ym9keT50cjpudGgtb2YtdHlwZSgybil7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5oYW5kc29udGFibGUgLmhpZGV7ZGlz''@;'; put 'put ''cGxheTpub25lfS5oYW5kc29udGFibGUgLnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGUgLnd0SGlkZXJ7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MH0uaGFuZHNvbnRhYmxlIC53dFNwcmVhZGVye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjA7aGVpZ2h0OmF1dG99''@;'; put 'put ''LmhhbmRzb250YWJsZSB0YWJsZSwuaGFuZHNvbnRhYmxlIHRib2R5LC5oYW5kc29udGFibGUgdGhlYWQsLmhhbmRzb250YWJsZSB0ZCwuaGFuZHNvbnRhYmxlIHRoLC5oYW5kc29udGFibGUgaW5wdXQsLmhhbmRzb250YWJsZSB0ZXh0YXJlYSwuaGFuZHNvbnRhYmxlIGRpdntib3gtc2l6aW5n''@;'; put 'put ''OmNvbnRlbnQtYm94Oy13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3h9LmhhbmRzb250YWJsZSBpbnB1dCwuaGFuZHNvbnRhYmxlIHRleHRhcmVhe21pbi1oZWlnaHQ6aW5pdGlhbH0uaGFuZHNvbnRhYmxlIHRhYmxlLmh0Q29yZXtib3Jk''@;'; put 'put ''ZXItY29sbGFwc2U6c2VwYXJhdGU7Ym9yZGVyLXNwYWNpbmc6MDttYXJnaW46MDtib3JkZXItd2lkdGg6MDt0YWJsZS1sYXlvdXQ6Zml4ZWQ7d2lkdGg6MDtvdXRsaW5lLXdpZHRoOjA7Y3Vyc29yOmRlZmF1bHQ7bWF4LXdpZHRoOm5vbmU7bWF4LWhlaWdodDpub25lfS5oYW5kc29udGFibGUg''@;'; put 'put ''Y29sLC5oYW5kc29udGFibGUgY29sLnJvd0hlYWRlcnt3aWR0aDo1MHB4fS5oYW5kc29udGFibGUgdGgsLmhhbmRzb250YWJsZSB0ZHtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLWxlZnQtd2lkdGg6MDtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLWJvdHRvbToxcHggc29s''@;'; put 'put ''aWQgI2NjYztoZWlnaHQ6MjJweDtlbXB0eS1jZWxsczpzaG93O2xpbmUtaGVpZ2h0OjIxcHg7cGFkZGluZzowIDRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7dmVydGljYWwtYWxpZ246dG9wO292ZXJmbG93OmhpZGRlbjtvdXRsaW5lOm5vbmU7b3V0bGluZS13aWR0aDowO3doaXRlLXNwYWNl''@;'; put 'put ''OnByZS13cmFwfVtkaXI9cnRsXS5oYW5kc29udGFibGUgdGgsW2Rpcj1ydGxdLmhhbmRzb250YWJsZSB0ZHtib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItbGVmdDoxcHggc29saWQgI2NjY30uaGFuZHNvbnRhYmxlIHRoOmxhc3QtY2hpbGR7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmln''@;'; put 'put ''aHQ6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2NjY31bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRoOmxhc3QtY2hpbGR7Ym9yZGVyLXJpZ2h0Om5vbmU7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNjY2N9LmhhbmRzb250YWJsZSB0aDpmaXJzdC1jaGlsZCwuaGFuZHNv''@;'; put 'put ''bnRhYmxlIC5odF9jbG9uZV9pbmxpbmVfc3RhcnQgdGQ6Zmlyc3Qtb2YtdHlwZSwuaGFuZHNvbnRhYmxlIC5odF9jbG9uZV90b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciB0ZDpmaXJzdC1vZi10eXBlLC5oYW5kc29udGFibGUgLmh0X2Nsb25lX2JvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyIHRk''@;'; put 'put ''OmZpcnN0LW9mLXR5cGUsLmhhbmRzb250YWJsZS5odC13cmFwcGVyOm5vdCguaHRGaXJzdERhdGFzZXRDb2x1bW5Ob3RSZW5kZXJlZCkgdGQ6Zmlyc3Qtb2YtdHlwZXtib3JkZXItbGVmdDoxcHggc29saWQgI2NjY31bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRoOmZpcnN0LWNoaWxkLFtkaXI9''@;'; put 'put ''cnRsXS5oYW5kc29udGFibGUuaHQtd3JhcHBlcjpub3QoLmh0Rmlyc3REYXRhc2V0Q29sdW1uTm90UmVuZGVyZWQpIHRkOmZpcnN0LW9mLXR5cGV7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjY2NjfS5oYW5kc29udGFibGUgLmh0X2Nsb25lX3RvcCB0aDpudGgtY2hpbGQoMil7Ym9yZGVyLWxl''@;'; put 'put ''ZnQtd2lkdGg6MDtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2N9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRfY2xvbmVfdG9wIHRoOm50aC1jaGlsZCgyKXtib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItbGVmdDoxcHggc29saWQgI2NjY30uaGFuZHNvbnRhYmxlLmh0Um93SGVhZGVy''@;'; put 'put ''cyB0aGVhZCB0ciB0aDpudGgtY2hpbGQoMil7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNjY2N9W2Rpcj1ydGxdLmhhbmRzb250YWJsZS5odFJvd0hlYWRlcnMgdGhlYWQgdHIgdGg6bnRoLWNoaWxkKDIpe2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjY30uaGFuZHNvbnRhYmxlIHRyOmZpcnN0''@;'; put 'put ''LWNoaWxkIHRoLC5oYW5kc29udGFibGUgdHI6Zmlyc3QtY2hpbGQgdGR7Ym9yZGVyLXRvcDoxcHggc29saWQgI2NjY30uaHRfbWFzdGVyOm5vdCguaW5uZXJCb3JkZXJJbmxpbmVTdGFydCk6bm90KC5lbXB0eUNvbHVtbnMpIHRib2R5IHRyIHRoLC5odF9tYXN0ZXI6bm90KC5pbm5lckJvcmRl''@;'; put 'put ''cklubGluZVN0YXJ0KTpub3QoLmVtcHR5Q29sdW1ucykgdGhlYWQgdHIgdGg6Zmlyc3QtY2hpbGQsLmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVySW5saW5lU3RhcnQpOm5vdCguZW1wdHlDb2x1bW5zKX4uaGFuZHNvbnRhYmxlOm5vdCguaHRHaG9zdFRhYmxlKSB0Ym9keSB0ciB0aCwuaHRf''@;'; put 'put ''bWFzdGVyOm5vdCguaW5uZXJCb3JkZXJJbmxpbmVTdGFydCk6bm90KC5lbXB0eUNvbHVtbnMpfi5oYW5kc29udGFibGU6bm90KC5odF9jbG9uZV90b3ApOm5vdCguaHRHaG9zdFRhYmxlKSB0aGVhZCB0ciB0aDpmaXJzdC1jaGlsZHtib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItbGVmdDox''@;'; put 'put ''cHggc29saWQgI2NjY31bZGlyPXJ0bF0uaHRfbWFzdGVyOm5vdCguaW5uZXJCb3JkZXJJbmxpbmVTdGFydCk6bm90KC5lbXB0eUNvbHVtbnMpIHRib2R5IHRyIHRoLFtkaXI9cnRsXS5odF9tYXN0ZXI6bm90KC5pbm5lckJvcmRlcklubGluZVN0YXJ0KTpub3QoLmVtcHR5Q29sdW1ucykgdGhl''@;'; put 'put ''YWQgdHIgdGg6Zmlyc3QtY2hpbGQsW2Rpcj1ydGxdLmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVySW5saW5lU3RhcnQpOm5vdCguZW1wdHlDb2x1bW5zKX4uaGFuZHNvbnRhYmxlOm5vdCguaHRHaG9zdFRhYmxlKSB0Ym9keSB0ciB0aCxbZGlyPXJ0bF0uaHRfbWFzdGVyOm5vdCguaW5uZXJC''@;'; put 'put ''b3JkZXJJbmxpbmVTdGFydCk6bm90KC5lbXB0eUNvbHVtbnMpfi5oYW5kc29udGFibGU6bm90KC5odF9jbG9uZV90b3ApOm5vdCguaHRHaG9zdFRhYmxlKSB0aGVhZCB0ciB0aDpmaXJzdC1jaGlsZHtib3JkZXItbGVmdC13aWR0aDowO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjY30uaHRf''@;'; put 'put ''bWFzdGVyOm5vdCguaW5uZXJCb3JkZXJUb3ApOm5vdCguaW5uZXJCb3JkZXJCb3R0b20pIHRoZWFkIHRyOmxhc3QtY2hpbGQgdGgsLmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVyVG9wKTpub3QoLmlubmVyQm9yZGVyQm90dG9tKX4uaGFuZHNvbnRhYmxlIHRoZWFkIHRyOmxhc3QtY2hpbGQg''@;'; put 'put ''dGgsLmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVyVG9wKTpub3QoLmlubmVyQm9yZGVyQm90dG9tKSB0aGVhZCB0ci5sYXN0Q2hpbGQgdGgsLmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVyVG9wKTpub3QoLmlubmVyQm9yZGVyQm90dG9tKX4uaGFuZHNvbnRhYmxlIHRoZWFkIHRyLmxhc3RD''@;'; put 'put ''aGlsZCB0aHtib3JkZXItYm90dG9tLXdpZHRoOjB9LmhhbmRzb250YWJsZSB0aHtiYWNrZ3JvdW5kLWNvbG9yOiNmMGYwZjA7Y29sb3I6IzIyMjt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXdlaWdodDo0MDA7d2hpdGUtc3BhY2U6bm93cmFwfS5oYW5kc29udGFibGUgdGhlYWQgdGh7cGFkZGlu''@;'; put 'put ''ZzowfS5oYW5kc29udGFibGUgdGguYWN0aXZle2JhY2tncm91bmQtY29sb3I6I2NjY30uaGFuZHNvbnRhYmxlIHRoZWFkIHRoIC5yZWxhdGl2ZXtwYWRkaW5nOjJweCA0cHh9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlcntkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoxLjF9''@;'; put 'put ''LmhhbmRzb250YWJsZSAud3RCb3JkZXJ7cG9zaXRpb246YWJzb2x1dGU7Zm9udC1zaXplOjB9LmhhbmRzb250YWJsZSAud3RCb3JkZXIuaGlkZGVue2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSAud3RCb3JkZXI6bnRoLWNoaWxkKDEpLC5oYW5kc29udGFibGUgLnd0Qm9y''@;'; put 'put ''ZGVyOm50aC1jaGlsZCgzKXt6LWluZGV4OjJ9LmhhbmRzb250YWJsZSAud3RCb3JkZXI6bnRoLWNoaWxkKDIpLC5oYW5kc29udGFibGUgLnd0Qm9yZGVyOm50aC1jaGlsZCg0KXt6LWluZGV4OjF9LmhhbmRzb250YWJsZSAud3RCb3JkZXIuY3VycmVudHt6LWluZGV4OjEwfS5oYW5kc29udGFi''@;'; put 'put ''bGUgLnd0Qm9yZGVyLmFyZWF7ei1pbmRleDo4fS5oYW5kc29udGFibGUgLnd0Qm9yZGVyLmZpbGx7ei1pbmRleDo2fS5oYW5kc29udGFibGUgLnd0Qm9yZGVyLmNvcm5lcntmb250LXNpemU6MDtjdXJzb3I6Y3Jvc3NoYWlyfS5odEJvcmRlcnMgLnd0Qm9yZGVyLmh0LWJvcmRlci1zdHlsZS1k''@;'; put 'put ''YXNoZWQtdmVydGljYWx7YmFja2dyb3VuZC1pbWFnZTpyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSx2YXIoLS1odC1jdXN0b20tYm9yZGVyLWNvbG9yKSAwIDVweCx0cmFuc3BhcmVudCAwIDEwcHgpfS5odEJvcmRlcnMgLnd0Qm9yZGVyLmh0LWJvcmRlci1zdHlsZS1kYXNo''@;'; put 'put ''ZWQtaG9yaXpvbnRhbHtiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gcmlnaHQsdmFyKC0taHQtY3VzdG9tLWJvcmRlci1jb2xvcikgMCA1cHgsdHJhbnNwYXJlbnQgMCAxMHB4KX0uaHRCb3JkZXJzIC53dEJvcmRlci5odC1ib3JkZXItc3R5bGUtZG90dGVk''@;'; put 'put ''LWhvcml6b250YWx7YmFja2dyb3VuZC1pbWFnZTpyYWRpYWwtZ3JhZGllbnQoY2lyY2xlLHZhcigtLWh0LWN1c3RvbS1ib3JkZXItY29sb3IpIGNhbGModmFyKC0taHQtY3VzdG9tLWJvcmRlci1zaXplKSAvIDIpLHRyYW5zcGFyZW50IDApO2JhY2tncm91bmQtc2l6ZTpjYWxjKHZhcigtLWh0''@;'; put 'put ''LWN1c3RvbS1ib3JkZXItc2l6ZSkgKiAyKSB2YXIoLS1odC1jdXN0b20tYm9yZGVyLXNpemUpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fS5odEJvcmRlcnMgLnd0Qm9yZGVyLmh0LWJvcmRlci1zdHlsZS1kb3R0ZWQtdmVydGljYWx7YmFja2dyb3VuZC1pbWFnZTpyYWRpYWwtZ3JhZGll''@;'; put 'put ''bnQoY2lyY2xlLHZhcigtLWh0LWN1c3RvbS1ib3JkZXItY29sb3IpIGNhbGModmFyKC0taHQtY3VzdG9tLWJvcmRlci1zaXplKSAvIDIpLHRyYW5zcGFyZW50IDApO2JhY2tncm91bmQtc2l6ZTp2YXIoLS1odC1jdXN0b20tYm9yZGVyLXNpemUpIGNhbGModmFyKC0taHQtY3VzdG9tLWJvcmRl''@;'; put 'put ''ci1zaXplKSAqIDIpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC15fS5odF9jbG9uZV9tYXN0ZXJ7ei1pbmRleDoxMDB9Lmh0X2Nsb25lX2lubGluZV9zdGFydHt6LWluZGV4OjEyMH0uaHRfY2xvbmVfYm90dG9te3otaW5kZXg6MTMwfS5odF9jbG9uZV9ib3R0b21faW5saW5lX3N0YXJ0X2Nv''@;'; put 'put ''cm5lcnt6LWluZGV4OjE1MH0uaHRfY2xvbmVfdG9we3otaW5kZXg6MTYwfS5odF9jbG9uZV90b3BfaW5saW5lX3N0YXJ0X2Nvcm5lcnt6LWluZGV4OjE4MH0uaGFuZHNvbnRhYmxlIGNvbC5oaWRkZW57d2lkdGg6MCFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSB0ci5oaWRkZW4sLmhhbmRzb250''@;'; put 'put ''YWJsZSB0ci5oaWRkZW4gdGQsLmhhbmRzb250YWJsZSB0ci5oaWRkZW4gdGh7ZGlzcGxheTpub25lfS5odF9tYXN0ZXIsLmh0X2Nsb25lX2lubGluZV9zdGFydCwuaHRfY2xvbmVfdG9wLC5odF9jbG9uZV9ib3R0b217b3ZlcmZsb3c6aGlkZGVufS5odF9tYXN0ZXIgLnd0SG9sZGVye292ZXJm''@;'; put 'put ''bG93OmF1dG99LmhhbmRzb250YWJsZSAuaHRfbWFzdGVyIHRhYmxlLmh0Q29yZT50aGVhZCwuaGFuZHNvbnRhYmxlIC5odF9tYXN0ZXIgdGFibGUuaHRDb3JlPnRib2R5PnRyPnRoLC5oYW5kc29udGFibGUgLmh0X2Nsb25lX2lubGluZV9zdGFydCB0YWJsZS5odENvcmU+dGhlYWR7dmlzaWJp''@;'; put 'put ''bGl0eTpoaWRkZW59Lmh0X2Nsb25lX3RvcCAud3RIb2xkZXIsLmh0X2Nsb25lX2lubGluZV9zdGFydCAud3RIb2xkZXIsLmh0X2Nsb25lX2JvdHRvbSAud3RIb2xkZXJ7b3ZlcmZsb3c6aGlkZGVufS5oYW5kc29udGFibGV7cG9zaXRpb246cmVsYXRpdmU7dG91Y2gtYWN0aW9uOm1hbmlwdWxh''@;'; put 'put ''dGlvbjtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxTZWdvZSBVSSxSb2JvdG8sT3h5Z2VuLFVidW50dSxIZWx2ZXRpY2EgTmV1ZSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojMzczNzM3fS5oYW5kc29u''@;'; put 'put ''dGFibGUgYXtjb2xvcjojMTA0YWNjfS5oYW5kc29udGFibGUuaHRBdXRvU2l6ZXt2aXNpYmlsaXR5OmhpZGRlbjtsZWZ0Oi05OTAwMHB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDotOTkwMDBweH0uaGFuZHNvbnRhYmxlIHRkLmh0SW52YWxpZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmJlYmEhaW1w''@;'; put 'put ''b3J0YW50fS5oYW5kc29udGFibGUgdGQuaHROb1dyYXB7d2hpdGUtc3BhY2U6bm93cmFwfS5oYW5kc29udGFibGUgdGQuaW52aXNpYmxlU2VsZWN0aW9uLC5oYW5kc29udGFibGUgdGguaW52aXNpYmxlU2VsZWN0aW9ue291dGxpbmU6bm9uZX0uaGFuZHNvbnRhYmxlIHRkLmludmlzaWJsZVNl''@;'; put 'put ''bGVjdGlvbjo6c2VsZWN0aW9uLC5oYW5kc29udGFibGUgdGguaW52aXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb257YmFja2dyb3VuZDojZmZmMH0uaG90LWRpc3BsYXktbGljZW5zZS1pbmZve2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFNlZ29lIFVJLFJv''@;'; put 'put ''Ym90byxPeHlnZW4sVWJ1bnR1LEhlbHZldGljYSBOZXVlLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiMzNzM3Mzc7cGFkZGluZzo1cHggMCAzcHg7dGV4dC1hbGlnbjpsZWZ0fS5ob3QtZGlzcGxheS1saWNlbnNlLWluZm8gYXtjb2xvcjoj''@;'; put 'put ''MTA0YWNjO2ZvbnQtc2l6ZToxMHB4fS5odEZvY3VzQ2F0Y2hlcntwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4Oi0xO29wYWNpdHk6MDtib3JkZXI6MDttYXJnaW46MDtwYWRkaW5nOjA7d2lkdGg6MDtoZWlnaHQ6MH0uaGFuZHNvbnRhYmxlIC5odFRleHRFbGxpcHNpc3t0ZXh0LW92ZXJmbG93''@;'; put 'put ''OmVsbGlwc2lzO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9LmhhbmRzb250YWJsZSAubWFudWFsQ29sdW1uUmVzaXplcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtjdXJzb3I6Y29sLXJlc2l6ZTt6LWluZGV4OjIxMDt3aWR0aDo1cHg7aGVpZ2h0OjI1cHh9LmhhbmRzb250''@;'; put 'put ''YWJsZSAubWFudWFsUm93UmVzaXplcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7Y3Vyc29yOnJvdy1yZXNpemU7ei1pbmRleDoyMTA7aGVpZ2h0OjVweDt3aWR0aDo1MHB4fS5oYW5kc29udGFibGUgLm1hbnVhbENvbHVtblJlc2l6ZXI6aG92ZXIsLmhhbmRzb250YWJsZSAubWFudWFsQ29s''@;'; put 'put ''dW1uUmVzaXplci5hY3RpdmUsLmhhbmRzb250YWJsZSAubWFudWFsUm93UmVzaXplcjpob3ZlciwuaGFuZHNvbnRhYmxlIC5tYW51YWxSb3dSZXNpemVyLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiMzNGE5ZGJ9LmhhbmRzb250YWJsZSAubWFudWFsQ29sdW1uUmVzaXplckd1aWRle3Bvc2l0''@;'; put 'put ''aW9uOmFic29sdXRlO3JpZ2h0OnVuc2V0O3RvcDowO2JhY2tncm91bmQtY29sb3I6IzM0YTlkYjtkaXNwbGF5Om5vbmU7d2lkdGg6MDtib3JkZXItcmlnaHQ6MXB4IGRhc2hlZCAjNzc3O2JvcmRlci1sZWZ0Om5vbmU7bWFyZ2luLWxlZnQ6NXB4O21hcmdpbi1yaWdodDp1bnNldH1bZGlyPXJ0''@;'; put 'put ''bF0uaGFuZHNvbnRhYmxlIC5tYW51YWxDb2x1bW5SZXNpemVyR3VpZGV7bGVmdDp1bnNldDtib3JkZXItbGVmdDoxcHggZGFzaGVkICM3Nzc7Ym9yZGVyLXJpZ2h0Om5vbmU7bWFyZ2luLXJpZ2h0OjVweDttYXJnaW4tbGVmdDp1bnNldH0uaGFuZHNvbnRhYmxlIC5tYW51YWxSb3dSZXNpemVy''@;'; put 'put ''R3VpZGV7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2JvdHRvbTowO2JhY2tncm91bmQtY29sb3I6IzM0YTlkYjtkaXNwbGF5Om5vbmU7aGVpZ2h0OjA7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICM3Nzc7bWFyZ2luLXRvcDo1cHh9LmhhbmRzb250YWJsZSAubWFudWFsQ29sdW1uUmVzaXpl''@;'; put 'put ''ckd1aWRlLmFjdGl2ZSwuaGFuZHNvbnRhYmxlIC5tYW51YWxSb3dSZXNpemVyR3VpZGUuYWN0aXZle2Rpc3BsYXk6YmxvY2s7ei1pbmRleDoyMDl9LmhhbmRzb250YWJsZSB0ZC5hcmVhLC5oYW5kc29udGFibGUgdGQuYXJlYS0xLC5oYW5kc29udGFibGUgdGQuYXJlYS0yLC5oYW5kc29udGFi''@;'; put 'put ''bGUgdGQuYXJlYS0zLC5oYW5kc29udGFibGUgdGQuYXJlYS00LC5oYW5kc29udGFibGUgdGQuYXJlYS01LC5oYW5kc29udGFibGUgdGQuYXJlYS02LC5oYW5kc29udGFibGUgdGQuYXJlYS03e3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGUgdGQuYXJlYTpiZWZvcmUsLmhhbmRzb250''@;'; put 'put ''YWJsZSB0ZC5hcmVhLTE6YmVmb3JlLC5oYW5kc29udGFibGUgdGQuYXJlYS0yOmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtMzpiZWZvcmUsLmhhbmRzb250YWJsZSB0ZC5hcmVhLTQ6YmVmb3JlLC5oYW5kc29udGFibGUgdGQuYXJlYS01OmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRkLmFy''@;'; put 'put ''ZWEtNjpiZWZvcmUsLmhhbmRzb250YWJsZSB0ZC5hcmVhLTc6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDtiYWNrZ3JvdW5kOiMwMDVlZmZ9LmhhbmRzb250YWJsZSB0ZC5hcmVhOmJlZm9yZXtvcGFjaXR5Oi4xfS5oYW5kc29udGFibGUgdGQuYXJlYS0xOmJl''@;'; put 'put ''Zm9yZXtvcGFjaXR5Oi4yfS5oYW5kc29udGFibGUgdGQuYXJlYS0yOmJlZm9yZXtvcGFjaXR5Oi4yN30uaGFuZHNvbnRhYmxlIHRkLmFyZWEtMzpiZWZvcmV7b3BhY2l0eTouMzV9LmhhbmRzb250YWJsZSB0ZC5hcmVhLTQ6YmVmb3Jle29wYWNpdHk6LjQxfS5oYW5kc29udGFibGUgdGQuYXJl''@;'; put 'put ''YS01OmJlZm9yZXtvcGFjaXR5Oi40N30uaGFuZHNvbnRhYmxlIHRkLmFyZWEtNjpiZWZvcmV7b3BhY2l0eTouNTR9LmhhbmRzb250YWJsZSB0ZC5hcmVhLTc6YmVmb3Jle29wYWNpdHk6LjU4fS5oYW5kc29udGFibGUgdGJvZHkgdGguY3VycmVudCwuaGFuZHNvbnRhYmxlIHRoZWFkIHRoLmN1''@;'; put 'put ''cnJlbnR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAycHggIzRiODlmZn0uaGFuZHNvbnRhYmxlIHRib2R5IHRoLmh0X19oaWdobGlnaHQsLmhhbmRzb250YWJsZSB0aGVhZCB0aC5odF9faGlnaGxpZ2h0e2JhY2tncm91bmQtY29sb3I6I2RjZGNkY30uaGFuZHNvbnRhYmxlIHRib2R5IHRoLmh0''@;'; put 'put ''X19hY3RpdmVfaGlnaGxpZ2h0LC5oYW5kc29udGFibGUgdGhlYWQgdGguaHRfX2FjdGl2ZV9oaWdobGlnaHR7YmFja2dyb3VuZC1jb2xvcjojOGViMGU3O2NvbG9yOiMwMDB9LmhhbmRzb250YWJsZUlucHV0e2JvcmRlcjpub25lO291dGxpbmUtd2lkdGg6MDttYXJnaW46MDtwYWRkaW5nOjFw''@;'; put 'put ''eCA1cHggMDtmb250LWZhbWlseTppbmhlcml0O2xpbmUtaGVpZ2h0OjIxcHg7Zm9udC1zaXplOmluaGVyaXQ7Ym94LXNoYWRvdzowIDAgMCAycHggIzUyOTJmNyBpbnNldDtyZXNpemU6bm9uZTtkaXNwbGF5OmJsb2NrO2NvbG9yOiMwMDA7Ym9yZGVyLXJhZGl1czowO2JhY2tncm91bmQtY29s''@;'; put 'put ''b3I6I2ZmZjtib3gtc2l6aW5nOmJvcmRlci1ib3ghaW1wb3J0YW50fS5oYW5kc29udGFibGVJbnB1dDpmb2N1c3tvdXRsaW5lOm5vbmV9LmhhbmRzb250YWJsZUlucHV0SG9sZGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MH0uaHRTZWxlY3RFZGl0b3J7cG9zaXRpb246YWJzb2x1''@;'; put 'put ''dGU7c2VsZWN0ey13ZWJraXQtYXBwZWFyYW5jZTptZW51bGlzdC1idXR0b24haW1wb3J0YW50O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7Ym9yZGVyOjJweCBzb2xpZCAjNGI4OWZmO2JveC1zaXppbmc6Ym9yZGVyLWJveCFpbXBvcnRhbnR9fS5odFNlbGVjdEVkaXRvciBzZWxlY3Q6Zm9jdXN7''@;'; put 'put ''b3V0bGluZTpub25lfS5odFNlbGVjdEVkaXRvciAuaHRBdXRvY29tcGxldGVBcnJvd3tkaXNwbGF5Om5vbmV9LmhhbmRzb250YWJsZSAuaHREaW1tZWR7Y29sb3I6Izc3N30uaGFuZHNvbnRhYmxlIC5odFN1Ym1lbnV7cG9zaXRpb246cmVsYXRpdmV9LmhhbmRzb250YWJsZSAuaHRTdWJtZW51''@;'; put 'put ''IDphZnRlcntjb250ZW50OiJcMjViNiI7Y29sb3I6Izc3Nztwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDo1cHg7Zm9udC1zaXplOjlweH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5odFN1Ym1lbnUgOmFmdGVye2NvbnRlbnQ6IiJ9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRTdWJtZW51IDpi''@;'; put 'put ''ZWZvcmV7Y29udGVudDoiXDI1YzAiO2NvbG9yOiM3Nzc7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo1cHg7Zm9udC1zaXplOjlweH0uaGFuZHNvbnRhYmxlIC5odExlZnR7dGV4dC1hbGlnbjpsZWZ0fS5oYW5kc29udGFibGUgLmh0Q2VudGVye3RleHQtYWxpZ246Y2VudGVyfS5oYW5kc29udGFi''@;'; put 'put ''bGUgLmh0UmlnaHR7dGV4dC1hbGlnbjpyaWdodH0uaGFuZHNvbnRhYmxlIC5odEp1c3RpZnl7dGV4dC1hbGlnbjpqdXN0aWZ5fS5oYW5kc29udGFibGUgLmh0VG9we3ZlcnRpY2FsLWFsaWduOnRvcH0uaGFuZHNvbnRhYmxlIC5odE1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmhhbmRz''@;'; put 'put ''b250YWJsZSAuaHRCb3R0b217dmVydGljYWwtYWxpZ246Ym90dG9tfS5oYW5kc29udGFibGUgLmh0UGxhY2Vob2xkZXJ7Y29sb3I6Izk5OX0uaGFuZHNvbnRhYmxlLmxpc3Rib3h7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO21hcmdpbjowfS5oYW5kc29udGFibGUubGlzdGJveC5hdXRvY29tcGxl''@;'; put 'put ''dGVFZGl0b3IsLmhhbmRzb250YWJsZS5saXN0Ym94LmRyb3Bkb3duRWRpdG9ye2JvcmRlci13aWR0aDowfS5oYW5kc29udGFibGUubGlzdGJveCAuaHRfbWFzdGVyIHRhYmxle2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTtiYWNrZ3JvdW5kOiNmZmZ9LmhhbmRzb250YWJsZS5saXN0Ym94LmF1''@;'; put 'put ''dG9jb21wbGV0ZUVkaXRvciAuaHRfbWFzdGVyIHRhYmxlLC5oYW5kc29udGFibGUubGlzdGJveC5kcm9wZG93bkVkaXRvciAuaHRfbWFzdGVyIHRhYmxle2JvcmRlcjoxcHggc29saWQgI2NjY30uaGFuZHNvbnRhYmxlLmxpc3Rib3ggdGgsLmhhbmRzb250YWJsZS5saXN0Ym94IHRyOmZpcnN0''@;'; put 'put ''LWNoaWxkIHRoLC5oYW5kc29udGFibGUubGlzdGJveCB0cjpsYXN0LWNoaWxkIHRoLC5oYW5kc29udGFibGUubGlzdGJveCB0cjpmaXJzdC1jaGlsZCB0ZCwuaGFuZHNvbnRhYmxlLmxpc3Rib3ggdGR7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50IWltcG9ydGFudH0uaGFuZHNvbnRhYmxlLmxp''@;'; put 'put ''c3Rib3ggdGgsLmhhbmRzb250YWJsZS5saXN0Ym94IHRke3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5oYW5kc29udGFibGUubGlzdGJveCB0ZC5odERpbW1lZHtjdXJzb3I6ZGVmYXVsdDtjb2xvcjppbmhlcml0O2ZvbnQtc3R5bGU6aW5oZXJpdH0uaGFuZHNv''@;'; put 'put ''bnRhYmxlLmxpc3Rib3ggLnd0Qm9yZGVye3Zpc2liaWxpdHk6aGlkZGVufS5oYW5kc29udGFibGUubGlzdGJveCB0ciB0ZC5jdXJyZW50LC5oYW5kc29udGFibGUubGlzdGJveCB0cjpob3ZlciB0ZHtiYWNrZ3JvdW5kOiNlZWV9Lmh0X2VkaXRvcl9oaWRkZW57ei1pbmRleDotMX0uaHRfZWRp''@;'; put 'put ''dG9yX3Zpc2libGV7ei1pbmRleDoyMDB9LmhhbmRzb250YWJsZSB0ZC5odFNlYXJjaFJlc3VsdHtiYWNrZ3JvdW5kOiNmY2VkZDk7Y29sb3I6IzU4MzcwN30uaGFuZHNvbnRhYmxlLm1vYmlsZSwuaGFuZHNvbnRhYmxlLm1vYmlsZSAud3RIb2xkZXJ7LXdlYmtpdC10b3VjaC1jYWxsb3V0Om5v''@;'; put 'put ''bmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2h9LmhhbmRzb250YWJsZS5tb2JpbGUgLmhhbmRzb250YWJsZUlucHV0OmZvY3Vz''@;'; put 'put ''e2JveC1zaGFkb3c6MCAwIDAgMnB4ICM1MjkyZjcgaW5zZXQ7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9LmhhbmRzb250YWJsZSAudG9wU2VsZWN0aW9uSGFuZGxlLC5oYW5kc29udGFibGUgLnRvcFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhLC5oYW5kc29udGFibGUgLmJvdHRvbVNlbGVjdGlv''@;'; put 'put ''bkhhbmRsZSwuaGFuZHNvbnRhYmxlIC5ib3R0b21TZWxlY3Rpb25IYW5kbGUtSGl0QXJlYXtsZWZ0Oi0xMDAwMHB4O3JpZ2h0OnVuc2V0O3RvcDotMTAwMDBweDt6LWluZGV4Ojk5OTl9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAudG9wU2VsZWN0aW9uSGFuZGxlLFtkaXI9cnRsXS5oYW5kc29u''@;'; put 'put ''dGFibGUgLnRvcFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhLFtkaXI9cnRsXS5oYW5kc29udGFibGUgLmJvdHRvbVNlbGVjdGlvbkhhbmRsZSxbZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5ib3R0b21TZWxlY3Rpb25IYW5kbGUtSGl0QXJlYXtyaWdodDotMTAwMDBweDtsZWZ0OnVuc2V0fS5oYW5k''@;'; put 'put ''c29udGFibGUuaGlkZS10d2VlbnthbmltYXRpb246b3BhY2l0eS1oaWRlIC4zczthbmltYXRpb24tZmlsbC1tb2RlOmZvcndhcmRzOy13ZWJraXQtYW5pbWF0aW9uLWZpbGwtbW9kZTpmb3J3YXJkc30uaGFuZHNvbnRhYmxlLnNob3ctdHdlZW57YW5pbWF0aW9uOm9wYWNpdHktc2hvdyAuM3M7''@;'; put 'put ''YW5pbWF0aW9uLWZpbGwtbW9kZTpmb3J3YXJkczstd2Via2l0LWFuaW1hdGlvbi1maWxsLW1vZGU6Zm9yd2FyZHN9LmhhbmRzb250YWJsZSAuaHRBdXRvY29tcGxldGVBcnJvd3tmbG9hdDpyaWdodDtmb250LXNpemU6MTBweDtjb2xvcjojYmJiO2N1cnNvcjpkZWZhdWx0O3dpZHRoOjE2cHg7''@;'; put 'put ''dGV4dC1hbGlnbjpjZW50ZXJ9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRBdXRvY29tcGxldGVBcnJvd3tmbG9hdDpsZWZ0fS5oYW5kc29udGFibGUgdGQuaHRJbnZhbGlkIC5odEF1dG9jb21wbGV0ZUFycm93e2NvbG9yOiM1NTV9LmhhbmRzb250YWJsZSB0ZC5odEludmFsaWQgLmh0QXV0''@;'; put 'put ''b2NvbXBsZXRlQXJyb3c6aG92ZXJ7Y29sb3I6IzFhMWExYX0uaGFuZHNvbnRhYmxlIHRkIC5odEF1dG9jb21wbGV0ZUFycm93OmhvdmVye2NvbG9yOiM3Nzd9LmhhbmRzb250YWJsZSB0ZC5hcmVhIC5odEF1dG9jb21wbGV0ZUFycm93e2NvbG9yOiNkM2QzZDN9LmhhbmRzb250YWJsZSAuaHRD''@;'; put 'put ''aGVja2JveFJlbmRlcmVySW5wdXQubm9WYWx1ZXtvcGFjaXR5Oi41fS5oYW5kc29udGFibGUgLmh0Q2hlY2tib3hSZW5kZXJlckxhYmVse2ZvbnQtc2l6ZTppbmhlcml0O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9ja30uaGFuZHNvbnRh''@;'; put 'put ''YmxlIC5odENoZWNrYm94UmVuZGVyZXJMYWJlbC5mdWxsV2lkdGh7d2lkdGg6MTAwJX0uaGFuZHNvbnRhYmxlIC5jb2xsYXBzaWJsZUluZGljYXRvcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO2xlZnQ6dW5zZXQ7cmlnaHQ6NXB4O2JvcmRl''@;'; put 'put ''cjoxcHggc29saWQgI0E2QTZBNjtsaW5lLWhlaWdodDo4cHg7Y29sb3I6IzIyMjtib3JkZXItcmFkaXVzOjEwcHg7Zm9udC1zaXplOjEwcHg7d2lkdGg6MTBweDtoZWlnaHQ6MTBweDtjdXJzb3I6cG9pbnRlcjtib3gtc2hhZG93OjAgMCAwIDNweCAjZWVlO2JhY2tncm91bmQ6I2VlZTt0ZXh0''@;'; put 'put ''LWFsaWduOmNlbnRlcn1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5jb2xsYXBzaWJsZUluZGljYXRvcntyaWdodDp1bnNldDtsZWZ0OjVweH0uaGFuZHNvbnRhYmxlW2Rpcj1sdHJdIHRoZWFkIHRoOmhhcyguY29sbGFwc2libGVJbmRpY2F0b3IpIGRpdi5odFJpZ2h0IHNwYW4uY29sSGVhZGVy''@;'; put 'put ''e21hcmdpbi1yaWdodDoyMHB4fS5oYW5kc29udGFibGVbZGlyPXJ0bF0gdGhlYWQgdGg6aGFzKC5jb2xsYXBzaWJsZUluZGljYXRvcikgZGl2Lmh0TGVmdCBzcGFuLmNvbEhlYWRlcnttYXJnaW4tbGVmdDoyMHB4fS5oYW5kc29udGFibGUgLmNvbHVtblNvcnRpbmd7cG9zaXRpb246cmVsYXRp''@;'; put 'put ''dmV9LmhhbmRzb250YWJsZVtkaXI9bHRyXSBkaXYuaHRSaWdodCBzcGFuW2NsYXNzKj1hc2NlbmRpbmddLC5oYW5kc29udGFibGVbZGlyPWx0cl0gZGl2Lmh0UmlnaHQgc3BhbltjbGFzcyo9ZGVzY2VuZGluZ117bWFyZ2luLXJpZ2h0OjEwcHg7bWFyZ2luLWxlZnQ6LTEwcHh9LmhhbmRzb250''@;'; put 'put ''YWJsZVtkaXI9cnRsXSBkaXYuaHRMZWZ0IHNwYW5bY2xhc3MqPWFzY2VuZGluZ10sLmhhbmRzb250YWJsZVtkaXI9cnRsXSBkaXYuaHRMZWZ0IHNwYW5bY2xhc3MqPWRlc2NlbmRpbmdde21hcmdpbi1sZWZ0OjEwcHg7bWFyZ2luLXJpZ2h0Oi0xMHB4fS5oYW5kc29udGFibGVbZGlyPWx0cl0g''@;'; put 'put ''ZGl2Lmh0UmlnaHQgc3BhbltjbGFzcyo9YXNjZW5kaW5nXTpvbmx5LWNoaWxkLC5oYW5kc29udGFibGVbZGlyPWx0cl0gZGl2Lmh0UmlnaHQgc3BhbltjbGFzcyo9ZGVzY2VuZGluZ106b25seS1jaGlsZHttYXJnaW4tcmlnaHQ6MTVweDttYXJnaW4tbGVmdDotMTVweH0uaGFuZHNvbnRhYmxl''@;'; put 'put ''W2Rpcj1ydGxdIGRpdi5odExlZnQgc3BhbltjbGFzcyo9YXNjZW5kaW5nXTpvbmx5LWNoaWxkLC5oYW5kc29udGFibGVbZGlyPXJ0bF0gZGl2Lmh0TGVmdCBzcGFuW2NsYXNzKj1kZXNjZW5kaW5nXTpvbmx5LWNoaWxke21hcmdpbi1sZWZ0OjE1cHg7bWFyZ2luLXJpZ2h0Oi0xNXB4fS5oYW5k''@;'; put 'put ''c29udGFibGUgLmNvbHVtblNvcnRpbmcuc29ydEFjdGlvbjpob3Zlcnt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2N1cnNvcjpwb2ludGVyfS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZzpiZWZvcmV7dG9wOjUwJTttYXJnaW4tdG9wOi02cHg7cGFkZGluZy1s''@;'; put 'put ''ZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTlweDtsZWZ0OnVuc2V0O2NvbnRlbnQ6IiI7aGVpZ2h0OjEwcHg7d2lkdGg6NXB4O2JhY2tncm91bmQtc2l6ZTpjb250YWluO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0''@;'; put 'put ''aW9uLXg6cmlnaHR9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nOmJlZm9yZXtwYWRkaW5nLXJpZ2h0OjhweDtwYWRkaW5nLWxlZnQ6MDtsZWZ0Oi05cHg7cmlnaHQ6dW5zZXQ7YmFja2dyb3VuZC1wb3NpdGlvbi14OmxlZnR9LmhhbmRzb250YWJs''@;'; put 'put ''ZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nLmFzY2VuZGluZzpiZWZvcmV7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCUUFBQUFvQ0FNQUFBREo3eXJwQUFBQUtsQk1WRVVBQUFBQUFBQUFBQUFBQUFBQUFB''@;'; put 'put ''QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUtFODZJQUFBQURYUlNUbE1BQkJFbVJHcHJsSlc3MmU3N3RUa1RLd0FBQUZOSlJFRlVlQUh0emprU2dDQVVCTkhQZ3NveTk3K3VsR1hScUpFNUwreGt4b1l0MlVkc0xiNWJxRklOeithTHV1TG41ckl1MlJrTzNmWnBXRU5pbU5n''@;'; put 'put ''aXc2aUJZUlRQTUxKakdGeFFaMWh4eGIveEJJMXFDOGszOUNkS0FBQUFBRWxGVGtTdVFtQ0MpfS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZy5kZXNjZW5kaW5nOmJlZm9yZXtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3''@;'; put 'put ''MEtHZ29BQUFBTlNVaEVVZ0FBQUJRQUFBQW9DQU1BQUFESjd5cnBBQUFBS2xCTVZFVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBS0U4NklBQUFBRFhSU1RsTUFCQkVtUkdwcmxKVzcyZTc3dFRrVEt3QUFBRkpKUkVGVWVBSHR6amtTZ0NB''@;'; put 'put ''UVJORm1RWVVaN245ZEtVdnJ1MFRtdlBBbjNicjBRZmdkWjV4eDZ4K3JRbjIzR3FUWW5xMUZEY251elpJTzJXbWVkVnFJUlZ4Z0dLRXlqTmdZUmpLR2taMWhGSVozSTcwTHlNMFZ0VThBQUFBQVNVVk9SSzVDWUlJPSl9Lmh0R2hvc3RUYWJsZSAuaHRDb3JlIHNwYW4uY29sSGVhZGVyLmNvbHVt''@;'; put 'put ''blNvcnRpbmc6bm90KC5pbmRpY2F0b3JEaXNhYmxlZCk6YmVmb3Jle2NvbnRlbnQ6IioiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmctcmlnaHQ6MjBweH0uaGFuZHNvbnRhYmxlLmh0R2hvc3RUYWJsZSB0YWJsZSB0aGVhZCB0aHtib3JkZXItYm90dG9t''@;'; put 'put ''LXdpZHRoOjB9LmhhbmRzb250YWJsZS5odEdob3N0VGFibGUgdGFibGUgdGJvZHkgdHIgdGgsLmhhbmRzb250YWJsZS5odEdob3N0VGFibGUgdGFibGUgdGJvZHkgdHIgdGR7Ym9yZGVyLXRvcC13aWR0aDowfS5oYW5kc29udGFibGUgLmh0Q29tbWVudENlbGx7cG9zaXRpb246cmVsYXRpdmV9''@;'; put 'put ''LmhhbmRzb250YWJsZSAuaHRDb21tZW50Q2VsbDphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjA7bGVmdDp1bnNldDtib3JkZXItbGVmdDo2cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0Om5vbmU7Ym9yZGVyLXRvcDo2cHggc29saWQgYmxh''@;'; put 'put ''Y2t9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRDb21tZW50Q2VsbDphZnRlcntsZWZ0OjA7cmlnaHQ6dW5zZXQ7Ym9yZGVyLXJpZ2h0OjZweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItbGVmdDpub25lfS5odENvbW1lbnRzQ29udGFpbmVyIC5odENvbW1lbnRze2Rpc3BsYXk6bm9uZTt6''@;'; put 'put ''LWluZGV4OjEwNTk7cG9zaXRpb246YWJzb2x1dGV9Lmh0Q29tbWVudHNDb250YWluZXIgLmh0Q29tbWVudFRleHRBcmVhe2JveC1zaGFkb3c6IzAwMDAwMDFlIDAgMXB4IDNweCwjMDAwMDAwM2QgMCAxcHggMnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6bm9uZTtib3JkZXItbGVm''@;'; put 'put ''dDozcHggc29saWQgI2NjYztib3JkZXItcmlnaHQ6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7d2lkdGg6MjE1cHg7aGVpZ2h0OjkwcHg7Zm9udC1zaXplOjEycHg7cGFkZGluZzo1cHg7b3V0bGluZTowIWltcG9ydGFudDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX1bZGlyPXJ0bF0uaHRD''@;'; put 'put ''b21tZW50c0NvbnRhaW5lciAuaHRDb21tZW50VGV4dEFyZWF7Ym9yZGVyLXJpZ2h0OjNweCBzb2xpZCAjY2NjO2JvcmRlci1sZWZ0Om5vbmV9Lmh0Q29tbWVudHNDb250YWluZXIgLmh0Q29tbWVudFRleHRBcmVhOmZvY3Vze2JveC1zaGFkb3c6IzAwMDAwMDFlIDAgMXB4IDNweCwjMDAwMDAw''@;'; put 'put ''M2QgMCAxcHggMnB4LGluc2V0IDAgMCAwIDFweCAjNTI5MmY3O2JvcmRlci1sZWZ0OjNweCBzb2xpZCAjNTI5MmY3O2JvcmRlci1yaWdodDpub25lfVtkaXI9cnRsXS5odENvbW1lbnRzQ29udGFpbmVyIC5odENvbW1lbnRUZXh0QXJlYTpmb2N1c3tib3JkZXItcmlnaHQ6M3B4IHNvbGlkICM1''@;'; put 'put ''MjkyZjc7Ym9yZGVyLWxlZnQ6bm9uZX0vKiEKICogSGFuZHNvbnRhYmxlIENvbnRleHRNZW51CiAqLy5odENvbnRleHRNZW51Om5vdCguaHRHaG9zdFRhYmxlKXtkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDYwfS5odENvbnRleHRNZW51IC5odF9jbG9uZV90b3As''@;'; put 'put ''Lmh0Q29udGV4dE1lbnUgLmh0X2Nsb25lX2JvdHRvbSwuaHRDb250ZXh0TWVudSAuaHRfY2xvbmVfaW5saW5lX3N0YXJ0LC5odENvbnRleHRNZW51IC5odF9jbG9uZV90b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciwuaHRDb250ZXh0TWVudSAuaHRfY2xvbmVfYm90dG9tX2lubGluZV9zdGFydF9j''@;'; put 'put ''b3JuZXJ7ZGlzcGxheTpub25lfS5odENvbnRleHRNZW51IC5odF9tYXN0ZXIgdGFibGUuaHRDb3Jle2JvcmRlci1jb2xvcjojY2NjO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItdG9wLXdpZHRoOjFweDtib3JkZXItYm90dG9tLXdpZHRoOjJweDtib3JkZXItbGVmdC13aWR0aDoxcHg7Ym9y''@;'; put 'put ''ZGVyLXJpZ2h0LXdpZHRoOjJweH1bZGlyPXJ0bF0uaHRDb250ZXh0TWVudSAuaHRfbWFzdGVyIHRhYmxlLmh0Q29yZXtib3JkZXItcmlnaHQtd2lkdGg6MXB4O2JvcmRlci1sZWZ0LXdpZHRoOjJweH0uaHRDb250ZXh0TWVudS5oYW5kc29udGFibGU6Zm9jdXN7b3V0bGluZTpub25lfS5odENv''@;'; put 'put ''bnRleHRNZW51IC53dEJvcmRlcnt2aXNpYmlsaXR5OmhpZGRlbn0uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZHtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXdpZHRoOjA7cGFkZGluZzo0cHggNnB4IDA7Y3Vyc29yOnBvaW50ZXI7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5v''@;'; put 'put ''d3JhcDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkOmZpcnN0LWNoaWxke2JvcmRlci10b3Atd2lkdGg6MDtib3JkZXItYm90dG9tLXdpZHRoOjA7Ym9yZGVyLWxlZnQtd2lkdGg6MDtib3JkZXItcmlnaHQtd2lkdGg6MH1bZGlyPXJ0bF0u''@;'; put 'put ''aHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZDpmaXJzdC1jaGlsZHtib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItbGVmdC13aWR0aDowfS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGltbWVke2ZvbnQtc3R5bGU6bm9ybWFsO2NvbG9yOiMzMjMyMzJ9Lmh0Q29u''@;'; put 'put ''dGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuY3VycmVudHtiYWNrZ3JvdW5kOiNmM2YzZjN9Lmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHRTZXBhcmF0b3J7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U2ZTZlNjtoZWlnaHQ6MDtwYWRkaW5nOjA7Y3Vyc29yOmRlZmF1bHR9Lmh0''@;'; put 'put ''Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaXNhYmxlZHtjb2xvcjojOTk5O2N1cnNvcjpkZWZhdWx0fS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGlzYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZDojZmZmO2NvbG9yOiM5OTk7Y3Vyc29yOmRlZmF1bHR9Lmh0Q29u''@;'; put 'put ''dGV4dE1lbnUgdGFibGUgdGJvZHkgdHIuaHRIaWRkZW57ZGlzcGxheTpub25lfS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkIC5odEl0ZW1XcmFwcGVye21hcmdpbi1sZWZ0OjEwcHg7bWFyZ2luLXJpZ2h0OjZweH1bZGlyPXJ0bF0uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0''@;'; put 'put ''ciB0ZCAuaHRJdGVtV3JhcHBlcnttYXJnaW4tcmlnaHQ6MTBweDttYXJnaW4tbGVmdDo2cHh9Lmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQgZGl2IHNwYW4uc2VsZWN0ZWR7bWFyZ2luLXRvcDotMnB4O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NHB4O3JpZ2h0OjB9W2Rpcj1ydGxd''@;'; put 'put ''Lmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQgZGl2IHNwYW4uc2VsZWN0ZWR7cmlnaHQ6NHB4O2xlZnQ6MH0uaHRDb250ZXh0TWVudSAuaHRfbWFzdGVyIC53dEhvbGRlcntvdmVyZmxvdzpoaWRkZW59dGV4dGFyZWEuSGFuZHNvbnRhYmxlQ29weVBhc3Rle3Bvc2l0aW9uOmZpeGVk''@;'; put 'put ''IWltcG9ydGFudDt0b3A6MCFpbXBvcnRhbnQ7cmlnaHQ6MTAwJSFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuO29wYWNpdHk6MDtvdXRsaW5lOjAgbm9uZSFpbXBvcnRhbnR9LyohCiAqIEhhbmRzb250YWJsZSBEcm9wZG93bk1lbnUKICovLmhhbmRzb250YWJsZSAuY2hhbmdlVHlwZXtiYWNr''@;'; put 'put ''Z3JvdW5kOiNlZWU7Ym9yZGVyLXJhZGl1czoycHg7Ym9yZGVyOjFweCBzb2xpZCAjYmJiO2NvbG9yOiNiYmI7Zm9udC1zaXplOjlweDtsaW5lLWhlaWdodDo5cHg7cGFkZGluZzoycHg7bWFyZ2luOjNweCAxcHggMCA1cHg7ZmxvYXQ6cmlnaHR9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuY2hh''@;'; put 'put ''bmdlVHlwZXtmbG9hdDpsZWZ0fS5oYW5kc29udGFibGVbZGlyPXJ0bF0gLmNoYW5nZVR5cGV7bWFyZ2luOjNweCA1cHggMCAxcHh9LmhhbmRzb250YWJsZSAuY2hhbmdlVHlwZTpiZWZvcmV7Y29udGVudDoiXDI1YmMgICJ9LmhhbmRzb250YWJsZSAuY2hhbmdlVHlwZTpob3Zlcntib3JkZXI6''@;'; put 'put ''MXB4IHNvbGlkICM3Nzc7Y29sb3I6Izc3NztjdXJzb3I6cG9pbnRlcn0uaHREcm9wZG93bk1lbnU6bm90KC5odEdob3N0VGFibGUpe2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwNjB9Lmh0RHJvcGRvd25NZW51IC5odF9jbG9uZV90b3AsLmh0RHJvcGRvd25NZW51''@;'; put 'put ''IC5odF9jbG9uZV9ib3R0b20sLmh0RHJvcGRvd25NZW51IC5odF9jbG9uZV9pbmxpbmVfc3RhcnQsLmh0RHJvcGRvd25NZW51IC5odF9jbG9uZV90b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciwuaHREcm9wZG93bk1lbnUgLmh0X2Nsb25lX2JvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVye2Rpc3Bs''@;'; put 'put ''YXk6bm9uZX0uaHREcm9wZG93bk1lbnUgdGFibGUuaHRDb3Jle2JvcmRlci1jb2xvcjojY2NjO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItdG9wLXdpZHRoOjFweDtib3JkZXItYm90dG9tLXdpZHRoOjJweDtib3JkZXItbGVmdC13aWR0aDoxcHg7Ym9yZGVyLXJpZ2h0LXdpZHRoOjJweH1b''@;'; put 'put ''ZGlyPXJ0bF0uaHREcm9wZG93bk1lbnUgdGFibGUuaHRDb3Jle2JvcmRlci1yaWdodC13aWR0aDoxcHg7Ym9yZGVyLWxlZnQtd2lkdGg6MnB4fS5odERyb3Bkb3duTWVudS5oYW5kc29udGFibGU6Zm9jdXN7b3V0bGluZTpub25lfS5odERyb3Bkb3duTWVudSAud3RCb3JkZXJ7dmlzaWJpbGl0''@;'; put 'put ''eTpoaWRkZW59Lmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRke2JhY2tncm91bmQ6I2ZmZjtib3JkZXItd2lkdGg6MDtwYWRkaW5nOjRweCA2cHggMDtjdXJzb3I6cG9pbnRlcjtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9''@;'; put 'put ''Lmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkOmZpcnN0LWNoaWxke2JvcmRlci10b3Atd2lkdGg6MDtib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItYm90dG9tLXdpZHRoOjA7Ym9yZGVyLWxlZnQtd2lkdGg6MH1bZGlyPXJ0bF0uaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkg''@;'; put 'put ''dHIgdGQ6Zmlyc3QtY2hpbGR7Ym9yZGVyLWxlZnQtd2lkdGg6MDtib3JkZXItcmlnaHQtd2lkdGg6MH0uaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaW1tZWR7Zm9udC1zdHlsZTpub3JtYWw7Y29sb3I6IzMyMzIzMn0uaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIg''@;'; put 'put ''dGQuY3VycmVudHtiYWNrZ3JvdW5kOiNlOWU5ZTl9Lmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0U2VwYXJhdG9ye2JvcmRlci10b3A6MXB4IHNvbGlkICNlNmU2ZTY7aGVpZ2h0OjA7cGFkZGluZzowO2N1cnNvcjpkZWZhdWx0fS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9k''@;'; put 'put ''eSB0ciB0ZC5odERpc2FibGVke2NvbG9yOiM5OTl9Lmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGlzYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZDojZmZmO2NvbG9yOiM5OTk7Y3Vyc29yOmRlZmF1bHR9Lmh0RHJvcGRvd25NZW51Om5vdCguaHRHaG9zdFRhYmxlKSB0YWJsZSB0''@;'; put 'put ''Ym9keSB0ci5odEhpZGRlbntkaXNwbGF5Om5vbmV9Lmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkIC5odEl0ZW1XcmFwcGVye21hcmdpbi1sZWZ0OjEwcHg7bWFyZ2luLXJpZ2h0OjEwcHh9W2Rpcj1ydGxdLmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkIC5odEl0ZW1X''@;'; put 'put ''cmFwcGVye21hcmdpbi1yaWdodDoxMHB4O21hcmdpbi1sZWZ0OjEwcHh9Lmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkIGRpdiBzcGFuLnNlbGVjdGVke21hcmdpbi10b3A6LTJweDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjRweDtyaWdodDowfVtkaXI9cnRsXS5odERyb3Bkb3du''@;'; put 'put ''TWVudSB0YWJsZSB0Ym9keSB0ciB0ZCBkaXYgc3Bhbi5zZWxlY3RlZHtyaWdodDo0cHg7bGVmdDowfS5odERyb3Bkb3duTWVudSAuaHRfbWFzdGVyIC53dEhvbGRlcntvdmVyZmxvdzpoaWRkZW59LyohCiAqIEhhbmRzb250YWJsZSBGaWx0ZXJzCiAqLy5odEZpbHRlcnNDb25kaXRpb25zTWVu''@;'; put 'put ''dTpub3QoLmh0R2hvc3RUYWJsZSl7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTA3MH0uaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgLmh0X2Nsb25lX3RvcCwuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgLmh0X2Nsb25lX2JvdHRvbSwuaHRGaWx0ZXJzQ29uZGl0aW9u''@;'; put 'put ''c01lbnUgLmh0X2Nsb25lX2lubGluZV9zdGFydCwuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgLmh0X2Nsb25lX3RvcF9pbmxpbmVfc3RhcnRfY29ybmVyLC5odEZpbHRlcnNDb25kaXRpb25zTWVudSAuaHRfY2xvbmVfYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXJ7ZGlzcGxheTpub25lfS5o''@;'; put 'put ''dEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZS5odENvcmV7Ym9yZGVyOjFweCBzb2xpZCAjYmJiO2JvcmRlci1ib3R0b20td2lkdGg6MnB4O2JvcmRlci1yaWdodC13aWR0aDoycHh9Lmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IC53dEJvcmRlcnt2aXNpYmlsaXR5OmhpZGRlbn0uaHRGaWx0''@;'; put 'put ''ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGR7YmFja2dyb3VuZDojZmZmO2JvcmRlci13aWR0aDowO3BhZGRpbmc6NHB4IDZweCAwO2N1cnNvcjpwb2ludGVyO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1vdmVyZmxvdzplbGxpcHNpc30uaHRGaWx0''@;'; put 'put ''ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQ6Zmlyc3QtY2hpbGR7Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1yaWdodC13aWR0aDowO2JvcmRlci1ib3R0b20td2lkdGg6MDtib3JkZXItbGVmdC13aWR0aDowfVtkaXI9cnRsXS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0''@;'; put 'put ''YWJsZSB0Ym9keSB0ciB0ZDpmaXJzdC1jaGlsZHtib3JkZXItbGVmdC13aWR0aDowO2JvcmRlci1yaWdodC13aWR0aDowfS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odERpbW1lZHtmb250LXN0eWxlOm5vcm1hbDtjb2xvcjojMzIzMjMyfS5odEZpbHRlcnND''@;'; put 'put ''b25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5jdXJyZW50e2JhY2tncm91bmQ6I2U5ZTllOX0uaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHRTZXBhcmF0b3J7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U2ZTZlNjtoZWlnaHQ6MDtwYWRkaW5nOjB9Lmh0''@;'; put 'put ''RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGlzYWJsZWR7Y29sb3I6Izk5OX0uaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaXNhYmxlZDpob3ZlcntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6Izk5OTtjdXJzb3I6ZGVmYXVsdH0u''@;'; put 'put ''aHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQgLmh0SXRlbVdyYXBwZXJ7bWFyZ2luLWxlZnQ6MTBweDttYXJnaW4tcmlnaHQ6MTBweH0uaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQgZGl2IHNwYW4uc2VsZWN0ZWR7bWFyZ2luLXRvcDot''@;'; put 'put ''MnB4O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NHB4fS5odEZpbHRlcnNDb25kaXRpb25zTWVudSAuaHRfbWFzdGVyIC53dEhvbGRlcntvdmVyZmxvdzpoaWRkZW59LmhhbmRzb250YWJsZSAuaHRNZW51RmlsdGVyaW5ne2JvcmRlci1ib3R0b206MXB4IGRvdHRlZCAjY2NjO2hlaWdodDoxMzVw''@;'; put 'put ''eDtvdmVyZmxvdzpoaWRkZW59LmhhbmRzb250YWJsZSAuaHRfbWFzdGVyIHRhYmxlIHRkLmh0Q3VzdG9tTWVudVJlbmRlcmVye2JhY2tncm91bmQtY29sb3I6I2ZmZjtjdXJzb3I6YXV0b30uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNNZW51TGFiZWx7Zm9udC1zaXplOi43NWVtfS5oYW5kc29u''@;'; put 'put ''dGFibGUgLmh0RmlsdGVyc01lbnVBY3Rpb25CYXJ7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZy10b3A6MTBweDtwYWRkaW5nLWJvdHRvbTozcHh9LmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudUNvbmRpdGlvbi5ib3JkZXJ7Ym9yZGVyLWJvdHRvbToxcHggZG90dGVkICNjY2MhaW1wb3J0''@;'; put 'put ''YW50fS5oYW5kc29udGFibGUgLmh0RmlsdGVyc01lbnVDb25kaXRpb24gLmh0VUlJbnB1dHtwYWRkaW5nOjAgMCA1cHh9LmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudVZhbHVle2JvcmRlci1ib3R0b206MXB4IGRvdHRlZCAjY2NjIWltcG9ydGFudH0uaGFuZHNvbnRhYmxlIC5odEZpbHRl''@;'; put 'put ''cnNNZW51VmFsdWUgLmh0VUlNdWx0aXBsZVNlbGVjdFNlYXJjaHtwYWRkaW5nOjB9LmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudUNvbmRpdGlvbiAuaHRVSUlucHV0IGlucHV0LC5oYW5kc29udGFibGUgLmh0RmlsdGVyc01lbnVWYWx1ZSAuaHRVSU11bHRpcGxlU2VsZWN0U2VhcmNoIGlu''@;'; put 'put ''cHV0e2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOi43NWVtO3BhZGRpbmc6NHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDoxMDAlfS5odFVJTXVsdGlwbGVTZWxlY3QgLmh0X21hc3RlciAud3RIb2xkZXJ7b3ZlcmZsb3c6YXV0b30uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNB''@;'; put 'put ''Y3RpdmUgLmNoYW5nZVR5cGV7Ym9yZGVyOjFweCBzb2xpZCAjNTA5MjcyO2NvbG9yOiMxODgwNGU7YmFja2dyb3VuZC1jb2xvcjojZDJlMGQ5fS5oYW5kc29udGFibGUgLmh0VUlTZWxlY3RBbGx7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MTBweH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxl''@;'; put 'put ''IC5odFVJU2VsZWN0QWxse21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjEwcHh9LmhhbmRzb250YWJsZSAuaHRVSUNsZWFyQWxsLC5oYW5kc29udGFibGUgLmh0VUlTZWxlY3RBbGx7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmhhbmRzb250YWJsZSAuaHRVSUNsZWFyQWxsIGEsLmhhbmRzb250''@;'; put 'put ''YWJsZSAuaHRVSVNlbGVjdEFsbCBhe2ZvbnQtc2l6ZTouNzVlbX0uaGFuZHNvbnRhYmxlIC5odFVJU2VsZWN0aW9uQ29udHJvbHN7dGV4dC1hbGlnbjpyaWdodH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5odFVJU2VsZWN0aW9uQ29udHJvbHN7dGV4dC1hbGlnbjpsZWZ0fS5oYW5kc29udGFi''@;'; put 'put ''bGUgLmh0Q2hlY2tib3hSZW5kZXJlcklucHV0e2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjowIDVweCAwIDA7dmVydGljYWwtYWxpZ246bWlkZGxlO2hlaWdodDoxZW19W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRDaGVja2JveFJlbmRlcmVySW5wdXR7bWFyZ2luLWxlZnQ6NXB4O21h''@;'; put 'put ''cmdpbi1yaWdodDowfS5oYW5kc29udGFibGUgLmh0VUlJbnB1dHtwYWRkaW5nOjNweCAwIDdweDtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcn0uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQgaW5wdXR7Ym9yZGVyLXJhZGl1czoycHg7Ym9yZGVyOjFweCBzb2xpZCAjZDJkMWQx''@;'; put 'put ''fS5oYW5kc29udGFibGUgLmh0VUlJbnB1dEljb257cG9zaXRpb246YWJzb2x1dGV9LmhhbmRzb250YWJsZSAuaHRVSUlucHV0Lmh0VUlCdXR0b257Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmhhbmRzb250YWJsZSAuaHRVSUlucHV0Lmh0VUlCdXR0b24gaW5wdXR7YmFj''@;'; put 'put ''a2dyb3VuZC1jb2xvcjojZWVlO2NvbG9yOiMwMDA7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6Ljc1ZW07Zm9udC13ZWlnaHQ6NzAwO2hlaWdodDoxOXB4O21pbi13aWR0aDo2NHB4fS5oYW5kc29udGFibGUgLmh0VUlJbnB1dC5odFVJQnV0dG9uIGlucHV0''@;'; put 'put ''OmhvdmVye2JvcmRlci1jb2xvcjojYjliOWI5fS5oYW5kc29udGFibGUgLmh0VUlJbnB1dC5odFVJQnV0dG9uT0t7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MTBweH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQuaHRVSUJ1dHRvbk9Le21hcmdpbi1yaWdodDowO21hcmdp''@;'; put 'put ''bi1sZWZ0OjEwcHh9LmhhbmRzb250YWJsZSAuaHRVSUlucHV0Lmh0VUlCdXR0b25PSyBpbnB1dHtiYWNrZ3JvdW5kLWNvbG9yOiMwZjlkNTg7Ym9yZGVyLWNvbG9yOiMxODgwNGU7Y29sb3I6I2ZmZn0uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQuaHRVSUJ1dHRvbk9LIGlucHV0OmZvY3VzLXZp''@;'; put 'put ''c2libGV7YmFja2dyb3VuZC1jb2xvcjojOTJkZDhkO2JvcmRlci1jb2xvcjojN2NiODc4O2NvbG9yOiMwMDB9LmhhbmRzb250YWJsZSAuaHRVSUlucHV0Lmh0VUlCdXR0b25PSyBpbnB1dDpob3Zlcntib3JkZXItY29sb3I6IzFhNmY0Nn0uaGFuZHNvbnRhYmxlIC5odFVJU2VsZWN0e2N1cnNv''@;'; put 'put ''cjpwb2ludGVyO21hcmdpbi1ib3R0b206N3B4O3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGUgLmh0VUlTZWxlY3RDYXB0aW9ue2JhY2tncm91bmQtY29sb3I6I2U4ZThlODtib3JkZXItcmFkaXVzOjJweDtib3JkZXI6MXB4IHNvbGlkICNkMmQxZDE7Zm9udC1mYW1pbHk6aW5oZXJp''@;'; put 'put ''dDtmb250LXNpemU6Ljc1ZW07Zm9udC13ZWlnaHQ6NzAwO3BhZGRpbmc6M3B4IDIwcHggM3B4IDEwcHg7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVufS5oYW5kc29udGFibGUgLmh0VUlTZWxlY3RDYXB0aW9uOmhvdmVye2JhY2tncm91''@;'; put 'put ''bmQtY29sb3I6I2U4ZThlODtib3JkZXI6MXB4IHNvbGlkICNiOWI5Yjl9LmhhbmRzb250YWJsZSAuaHRVSVNlbGVjdERyb3Bkb3duOmFmdGVye2NvbnRlbnQ6IlwyNWIyIjtmb250LXNpemU6N3B4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjEwcHg7dG9wOjB9LmhhbmRzb250YWJsZSAuaHRV''@;'; put 'put ''SVNlbGVjdERyb3Bkb3duOmJlZm9yZXtjb250ZW50OiJcMjViYyI7Zm9udC1zaXplOjdweDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoxMHB4O3RvcDo4cHh9LmhhbmRzb250YWJsZSAuaHRVSU11bHRpcGxlU2VsZWN0IC5oYW5kc29udGFibGUgLmh0Q29yZXtib3JkZXI6bm9uZX0uaGFuZHNv''@;'; put 'put ''bnRhYmxlIC5odFVJTXVsdGlwbGVTZWxlY3QgLmhhbmRzb250YWJsZSAuaHRDb3JlIHRkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNX0uaGFuZHNvbnRhYmxlIC5odFVJTXVsdGlwbGVTZWxlY3RTZWFyY2ggaW5wdXR7Ym9yZGVyLXJhZGl1czoycHg7Ym9yZGVyOjFweCBzb2xpZCAj''@;'; put 'put ''ZDJkMWQxO3BhZGRpbmc6M3B4fS5oYW5kc29udGFibGUgLmh0VUlSYWRpb3tkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo1cHg7aGVpZ2h0OjEwMCV9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRVSVJhZGlve21hcmdpbi1yaWdodDowO21hcmdpbi1s''@;'; put 'put ''ZWZ0OjVweH0uaGFuZHNvbnRhYmxlIC5odFVJUmFkaW86bGFzdC1jaGlsZHttYXJnaW4tcmlnaHQ6MH0uaGFuZHNvbnRhYmxlIC5odFVJUmFkaW8+aW5wdXRbdHlwZT1yYWRpb117bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6LjVleH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5odFVJUmFk''@;'; put 'put ''aW8+aW5wdXRbdHlwZT1yYWRpb117bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6LjVleH0uaGFuZHNvbnRhYmxlIC5odFVJUmFkaW8gbGFiZWx7dmVydGljYWwtYWxpZ246bWlkZGxlfS5oYW5kc29udGFibGUgLmh0RmlsdGVyc01lbnVPcGVyYXRvcnN7cGFkZGluZy1ib3R0b206NXB4fS5o''@;'; put 'put ''YW5kc29udGFibGUgdGguYmVmb3JlSGlkZGVuQ29sdW1ue3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGUgdGguYmVmb3JlSGlkZGVuQ29sdW1uOmFmdGVyLC5oYW5kc29udGFibGUgdGguYWZ0ZXJIaWRkZW5Db2x1bW46YmVmb3Jle2NvbG9yOiNiYmI7cG9zaXRpb246YWJzb2x1dGU7''@;'; put 'put ''dG9wOjUwJTtmb250LXNpemU6NXB0O3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpfS5oYW5kc29udGFibGUgdGguYWZ0ZXJIaWRkZW5Db2x1bW57cG9zaXRpb246cmVsYXRpdmV9LmhhbmRzb250YWJsZVtkaXI9bHRyXSB0aC5hZnRlckhpZGRlbkNvbHVtbiBkaXYuaHRMZWZ0e21hcmdpbi1s''@;'; put 'put ''ZWZ0OjEwcHh9LmhhbmRzb250YWJsZVtkaXI9bHRyXSB0aC5iZWZvcmVIaWRkZW5Db2x1bW4gZGl2Lmh0UmlnaHQsLmhhbmRzb250YWJsZVtkaXI9cnRsXSB0aC5hZnRlckhpZGRlbkNvbHVtbiBkaXYuaHRSaWdodHttYXJnaW4tcmlnaHQ6MTBweH0uaGFuZHNvbnRhYmxlW2Rpcj1ydGxdIHRo''@;'; put 'put ''LmJlZm9yZUhpZGRlbkNvbHVtbiBkaXYuaHRMZWZ0e21hcmdpbi1sZWZ0OjEwcHh9LmhhbmRzb250YWJsZSB0aC5iZWZvcmVIaWRkZW5Db2x1bW46YWZ0ZXJ7cmlnaHQ6MXB4O2NvbnRlbnQ6IlwyNWMwIn1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRoLmJlZm9yZUhpZGRlbkNvbHVtbjphZnRl''@;'; put 'put ''cntyaWdodDppbml0aWFsO2xlZnQ6MXB4O2NvbnRlbnQ6IlwyNWI2In0uaGFuZHNvbnRhYmxlIHRoLmFmdGVySGlkZGVuQ29sdW1uOmJlZm9yZXtsZWZ0OjFweDtjb250ZW50OiJcMjViNiJ9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSB0aC5hZnRlckhpZGRlbkNvbHVtbjpiZWZvcmV7cmlnaHQ6''@;'; put 'put ''MXB4O2xlZnQ6aW5pdGlhbDtjb250ZW50OiJcMjVjMCJ9LyohCiAqIEhhbmRzb250YWJsZSBIaWRkZW5Sb3dzCiAqLy5oYW5kc29udGFibGUgdGguYmVmb3JlSGlkZGVuUm93OmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRoLmFmdGVySGlkZGVuUm93OmFmdGVye2NvbG9yOiNiYmI7Zm9udC1zaXpl''@;'; put 'put ''OjZwdDtsaW5lLWhlaWdodDo2cHQ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDoycHh9LmhhbmRzb250YWJsZSB0aC5iZWZvcmVIaWRkZW5Sb3csLmhhbmRzb250YWJsZSB0aC5hZnRlckhpZGRlblJvd3twb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIHRoLmJlZm9yZUhpZGRlblJvdzpi''@;'; put 'put ''ZWZvcmV7Y29udGVudDoiXDI1YjIiO2JvdHRvbToycHh9LmhhbmRzb250YWJsZSB0aC5hZnRlckhpZGRlblJvdzphZnRlcntjb250ZW50OiJcMjViYyI7dG9wOjJweH0uaGFuZHNvbnRhYmxlLmh0X19zZWxlY3Rpb24tLXJvd3MgdGJvZHkgdGguYmVmb3JlSGlkZGVuUm93Lmh0X19oaWdobGln''@;'; put 'put ''aHQ6YmVmb3JlLC5oYW5kc29udGFibGUuaHRfX3NlbGVjdGlvbi0tcm93cyB0Ym9keSB0aC5hZnRlckhpZGRlblJvdy5odF9faGlnaGxpZ2h0OmFmdGVye2NvbG9yOiNlZWV9LmhhbmRzb250YWJsZSB0ZC5hZnRlckhpZGRlblJvdy5maXJzdFZpc2libGVSb3csLmhhbmRzb250YWJsZSB0aC5h''@;'; put 'put ''ZnRlckhpZGRlblJvdy5maXJzdFZpc2libGVSb3d7Ym9yZGVyLXRvcDoxcHggc29saWQgI0NDQ30uaHRSb3dIZWFkZXJzIC5odF9tYXN0ZXIuaW5uZXJCb3JkZXJJbmxpbmVTdGFydH4uaHRfY2xvbmVfdG9wX2lubGluZV9zdGFydF9jb3JuZXIgdGg6bnRoLWNoaWxkKDIpLC5odFJvd0hlYWRl''@;'; put 'put ''cnMgLmh0X21hc3Rlci5pbm5lckJvcmRlcklubGluZVN0YXJ0fi5odF9jbG9uZV9pbmxpbmVfc3RhcnQgdGQ6Zmlyc3Qtb2YtdHlwZXtib3JkZXItbGVmdDowIG5vbmV9LmhhbmRzb250YWJsZS5odF9fbWFudWFsQ29sdW1uTW92ZS5hZnRlci1zZWxlY3Rpb24tLWNvbHVtbnMgdGhlYWQgdGgu''@;'; put 'put ''aHRfX2hpZ2hsaWdodHtjdXJzb3I6bW92ZTtjdXJzb3I6Z3JhYn0uaGFuZHNvbnRhYmxlLmh0X19tYW51YWxDb2x1bW5Nb3ZlLm9uLW1vdmluZy0tY29sdW1ucyAqLC5oYW5kc29udGFibGUuaHRfX21hbnVhbENvbHVtbk1vdmUub24tbW92aW5nLS1jb2x1bW5zIHRoZWFkIHRoLmh0X19oaWdo''@;'; put 'put ''bGlnaHR7Y3Vyc29yOm1vdmU7Y3Vyc29yOmdyYWJiaW5nfS5oYW5kc29udGFibGUuaHRfX21hbnVhbENvbHVtbk1vdmUub24tbW92aW5nLS1jb2x1bW5zIC5tYW51YWxDb2x1bW5SZXNpemVye2Rpc3BsYXk6bm9uZX0uaGFuZHNvbnRhYmxlIC5odF9fbWFudWFsQ29sdW1uTW92ZS0tZ3VpZGVs''@;'; put 'put ''aW5lLC5oYW5kc29udGFibGUgLmh0X19tYW51YWxDb2x1bW5Nb3ZlLS1iYWNrbGlnaHR7cG9zaXRpb246YWJzb2x1dGU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpub25lfS5oYW5kc29udGFibGUgLmh0X19tYW51YWxDb2x1bW5Nb3ZlLS1ndWlkZWxpbmV7YmFja2dyb3VuZDojNzU3NTc1O3dpZHRo''@;'; put 'put ''OjJweDt0b3A6MDttYXJnaW4taW5saW5lLXN0YXJ0Oi0xcHg7bWFyZ2luLWlubGluZS1lbmQ6MDt6LWluZGV4OjIwNX0uaGFuZHNvbnRhYmxlIC5odF9fbWFudWFsQ29sdW1uTW92ZS0tYmFja2xpZ2h0e2JhY2tncm91bmQ6IzM0MzQzNDtiYWNrZ3JvdW5kOiMzNDM0MzQ0MDtkaXNwbGF5Om5v''@;'; put 'put ''bmU7ei1pbmRleDoyMDU7cG9pbnRlci1ldmVudHM6bm9uZX0uaGFuZHNvbnRhYmxlLm9uLW1vdmluZy0tY29sdW1ucy5zaG93LXVpIC5odF9fbWFudWFsQ29sdW1uTW92ZS0tZ3VpZGVsaW5lLC5oYW5kc29udGFibGUub24tbW92aW5nLS1jb2x1bW5zIC5odF9fbWFudWFsQ29sdW1uTW92ZS0t''@;'; put 'put ''YmFja2xpZ2h0e2Rpc3BsYXk6YmxvY2t9LmhhbmRzb250YWJsZS5odF9fbWFudWFsUm93TW92ZS5hZnRlci1zZWxlY3Rpb24tLXJvd3MgdGJvZHkgdGguaHRfX2hpZ2hsaWdodHtjdXJzb3I6bW92ZTtjdXJzb3I6Z3JhYn0uaGFuZHNvbnRhYmxlLmh0X19tYW51YWxSb3dNb3ZlLm9uLW1vdmlu''@;'; put 'put ''Zy0tcm93cyAqLC5oYW5kc29udGFibGUuaHRfX21hbnVhbFJvd01vdmUub24tbW92aW5nLS1yb3dzIHRib2R5IHRoLmh0X19oaWdobGlnaHR7Y3Vyc29yOm1vdmU7Y3Vyc29yOmdyYWJiaW5nfS5oYW5kc29udGFibGUuaHRfX21hbnVhbFJvd01vdmUub24tbW92aW5nLS1yb3dzIC5tYW51YWxS''@;'; put 'put ''b3dSZXNpemVye2Rpc3BsYXk6bm9uZX0uaGFuZHNvbnRhYmxlIC5odF9fbWFudWFsUm93TW92ZS0tZ3VpZGVsaW5lLC5oYW5kc29udGFibGUgLmh0X19tYW51YWxSb3dNb3ZlLS1iYWNrbGlnaHR7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTtkaXNwbGF5Om5vbmV9LmhhbmRzb250YWJs''@;'; put 'put ''ZSAuaHRfX21hbnVhbFJvd01vdmUtLWd1aWRlbGluZXtiYWNrZ3JvdW5kOiM3NTc1NzU7aGVpZ2h0OjJweDtsZWZ0OjA7bWFyZ2luLXRvcDotMXB4O3otaW5kZXg6MjA1fS5oYW5kc29udGFibGUgLmh0X19tYW51YWxSb3dNb3ZlLS1iYWNrbGlnaHR7YmFja2dyb3VuZDojMzQzNDM0O2JhY2tn''@;'; put 'put ''cm91bmQ6IzM0MzQzNDQwO2Rpc3BsYXk6bm9uZTt6LWluZGV4OjIwNTtwb2ludGVyLWV2ZW50czpub25lfS5oYW5kc29udGFibGUub24tbW92aW5nLS1yb3dzLnNob3ctdWkgLmh0X19tYW51YWxSb3dNb3ZlLS1ndWlkZWxpbmUsLmhhbmRzb250YWJsZS5vbi1tb3ZpbmctLXJvd3MgLmh0X19t''@;'; put 'put ''YW51YWxSb3dNb3ZlLS1iYWNrbGlnaHR7ZGlzcGxheTpibG9ja30uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFzcyo9aGlnaGxpZ2h0XTpub3QoW2NsYXNzKj1mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbF0pOmJlZm9yZXtvcGFjaXR5OjB9LmhhbmRzb250''@;'; put 'put ''YWJsZSB0Ym9keSB0ZFtyb3dzcGFuXVtjbGFzcyo9YXJlYV1bY2xhc3MqPWhpZ2hsaWdodF1bY2xhc3MqPWZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsLW11bHRpcGxlXTpiZWZvcmV7b3BhY2l0eTouMX0uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFzcyo9''@;'; put 'put ''aGlnaGxpZ2h0XVtjbGFzcyo9ZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwtMF06YmVmb3Jle29wYWNpdHk6LjF9LmhhbmRzb250YWJsZSB0Ym9keSB0ZFtyb3dzcGFuXVtjbGFzcyo9YXJlYV1bY2xhc3MqPWhpZ2hsaWdodF1bY2xhc3MqPWZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsLTFdOmJlZm9y''@;'; put 'put ''ZXtvcGFjaXR5Oi4yfS5oYW5kc29udGFibGUgdGJvZHkgdGRbcm93c3Bhbl1bY2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdW2NsYXNzKj1mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbC0yXTpiZWZvcmV7b3BhY2l0eTouMjd9LmhhbmRzb250YWJsZSB0Ym9keSB0ZFtyb3dzcGFuXVtjbGFz''@;'; put 'put ''cyo9YXJlYV1bY2xhc3MqPWhpZ2hsaWdodF1bY2xhc3MqPWZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsLTNdOmJlZm9yZXtvcGFjaXR5Oi4zNX0uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFzcyo9aGlnaGxpZ2h0XVtjbGFzcyo9ZnVsbHlTZWxlY3RlZE1l''@;'; put 'put ''cmdlZENlbGwtNF06YmVmb3Jle29wYWNpdHk6LjQxfS5oYW5kc29udGFibGUgdGJvZHkgdGRbcm93c3Bhbl1bY2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdW2NsYXNzKj1mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbC01XTpiZWZvcmV7b3BhY2l0eTouNDd9LmhhbmRzb250YWJsZSB0Ym9k''@;'; put 'put ''eSB0ZFtyb3dzcGFuXVtjbGFzcyo9YXJlYV1bY2xhc3MqPWhpZ2hsaWdodF1bY2xhc3MqPWZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsLTZdOmJlZm9yZXtvcGFjaXR5Oi41NH0uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFzcyo9aGlnaGxpZ2h0XVtjbGFz''@;'; put 'put ''cyo9ZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwtN106YmVmb3Jle29wYWNpdHk6LjU4fS5oYW5kc29udGFibGVbZGlyPWx0cl0gZGl2Lmh0UmlnaHQgc3BhbltjbGFzcyo9c29ydC1de21hcmdpbi1yaWdodDoxNXB4O21hcmdpbi1sZWZ0Oi0xNXB4fS5oYW5kc29udGFibGVbZGlyPXJ0bF0gZGl2''@;'; put 'put ''Lmh0TGVmdCBzcGFuW2NsYXNzKj1zb3J0LV17bWFyZ2luLWxlZnQ6MTVweDttYXJnaW4tcmlnaHQ6LTE1cHh9LmhhbmRzb250YWJsZVtkaXI9bHRyXSBkaXYuaHRSaWdodCBzcGFuW2NsYXNzKj1zb3J0LV06b25seS1jaGlsZHttYXJnaW4tcmlnaHQ6MjBweDttYXJnaW4tbGVmdDotMjBweH0u''@;'; put 'put ''aGFuZHNvbnRhYmxlW2Rpcj1ydGxdIGRpdi5odExlZnQgc3BhbltjbGFzcyo9c29ydC1dOm9ubHktY2hpbGR7bWFyZ2luLWxlZnQ6MjBweDttYXJnaW4tcmlnaHQ6LTIwcHh9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nOmFmdGVye3RvcDo1MCU7bWFyZ2luLXRv''@;'; put 'put ''cDotMnB4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi0xNXB4O2xlZnQ6dW5zZXQ7cGFkZGluZy1sZWZ0OjVweDtwYWRkaW5nLXJpZ2h0OnVuc2V0O2ZvbnQtc2l6ZTo4cHg7aGVpZ2h0OjhweDtsaW5lLWhlaWdodDoxLjF9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5j''@;'; put 'put ''b2x1bW5Tb3J0aW5nOmFmdGVye2xlZnQ6LTE1cHg7cmlnaHQ6dW5zZXQ7cGFkZGluZy1yaWdodDo1cHg7cGFkZGluZy1sZWZ0OnVuc2V0fS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZ1tjbGFzc149c29ydC1dOmFmdGVyLC5oYW5kc29udGFibGUgc3Bhbi5jb2xI''@;'; put 'put ''ZWFkZXIuY29sdW1uU29ydGluZ1tjbGFzcyo9IiBzb3J0LSJdOmFmdGVye2NvbnRlbnQ6IisifS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZy5zb3J0LTE6YWZ0ZXJ7Y29udGVudDoiMSJ9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5n''@;'; put 'put ''LnNvcnQtMjphZnRlcntjb250ZW50OiIyIn0uaGFuZHNvbnRhYmxlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmcuc29ydC0zOmFmdGVye2NvbnRlbnQ6IjMifS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZy5zb3J0LTQ6YWZ0ZXJ7Y29udGVudDoiNCJ9Lmhh''@;'; put 'put ''bmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nLnNvcnQtNTphZnRlcntjb250ZW50OiI1In0uaGFuZHNvbnRhYmxlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmcuc29ydC02OmFmdGVye2NvbnRlbnQ6IjYifS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29s''@;'; put 'put ''dW1uU29ydGluZy5zb3J0LTc6YWZ0ZXJ7Y29udGVudDoiNyJ9Lmh0R2hvc3RUYWJsZSB0aCBkaXYgYnV0dG9uLmNoYW5nZVR5cGUrc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZzpub3QoLmluZGljYXRvckRpc2FibGVkKXtwYWRkaW5nLXJpZ2h0OjVweH0uaGFuZHNvbnRhYmxlIHRoZWFk''@;'; put 'put ''IHRoLmhpZGRlbkhlYWRlcjpub3QoOmZpcnN0LW9mLXR5cGUpe2Rpc3BsYXk6bm9uZX10aGVhZCB0aC5oaWRkZW5IZWFkZXJUZXh0IC5jb2xIZWFkZXJ7b3BhY2l0eTowfS5oYW5kc29udGFibGUgdGguaHRfbmVzdGluZ0xldmVsc3t0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZy1sZWZ0OjdweH1b''@;'; put 'put ''ZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRoLmh0X25lc3RpbmdMZXZlbHN7dGV4dC1hbGlnbjpyaWdodDtwYWRkaW5nLXJpZ2h0OjdweH0uaGFuZHNvbnRhYmxlIHRoIGRpdi5odF9uZXN0aW5nTGV2ZWxze2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MTFweDty''@;'; put 'put ''aWdodDp1bnNldH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRoIGRpdi5odF9uZXN0aW5nTGV2ZWxze3JpZ2h0OjExcHg7bGVmdDp1bnNldH0uaGFuZHNvbnRhYmxlLmlubmVyQm9yZGVySW5saW5lU3RhcnQgdGggZGl2Lmh0X25lc3RpbmdMZXZlbHMsLmhhbmRzb250YWJsZS5pbm5lckJvcmRl''@;'; put 'put ''cklubGluZVN0YXJ0fi5oYW5kc29udGFibGUgdGggZGl2Lmh0X25lc3RpbmdMZXZlbHN7cmlnaHQ6MTBweDtsZWZ0OnVuc2V0fVtkaXI9cnRsXS5oYW5kc29udGFibGUuaW5uZXJCb3JkZXJJbmxpbmVTdGFydCB0aCBkaXYuaHRfbmVzdGluZ0xldmVscyxbZGlyPXJ0bF0uaGFuZHNvbnRhYmxl''@;'; put 'put ''LmlubmVyQm9yZGVySW5saW5lU3RhcnR+LmhhbmRzb250YWJsZSB0aCBkaXYuaHRfbmVzdGluZ0xldmVsc3tsZWZ0OjEwcHg7cmlnaHQ6dW5zZXR9LmhhbmRzb250YWJsZSB0aCBzcGFuLmh0X25lc3RpbmdMZXZlbHtkaXNwbGF5OmlubGluZS1ibG9ja30uaGFuZHNvbnRhYmxlIHRoIHNwYW4u''@;'; put 'put ''aHRfbmVzdGluZ0xldmVsX2VtcHR5e2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEwcHg7aGVpZ2h0OjFweDtmbG9hdDpsZWZ0fVtkaXI9cnRsXS5oYW5kc29udGFibGUgdGggc3Bhbi5odF9uZXN0aW5nTGV2ZWxfZW1wdHl7ZmxvYXQ6cmlnaHR9LmhhbmRzb250YWJsZSB0aCBzcGFuLmh0''@;'; put 'put ''X25lc3RpbmdMZXZlbDphZnRlcntjb250ZW50OiJcMjUxMCI7Zm9udC1zaXplOjlweDtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTtib3R0b206M3B4fS5oYW5kc29udGFibGUgdGggZGl2Lmh0X25lc3RpbmdCdXR0b257ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRp''@;'; put 'put ''b246YWJzb2x1dGU7cmlnaHQ6LTJweDtsZWZ0OnVuc2V0O2N1cnNvcjpwb2ludGVyfVtkaXI9cnRsXS5oYW5kc29udGFibGUgdGggZGl2Lmh0X25lc3RpbmdCdXR0b257bGVmdDotMnB4O3JpZ2h0OnVuc2V0fS5oYW5kc29udGFibGUgdGggZGl2Lmh0X25lc3RpbmdCdXR0b24uaHRfbmVzdGlu''@;'; put 'put ''Z0V4cGFuZDphZnRlcntjb250ZW50OiIrIn0uaGFuZHNvbnRhYmxlIHRoIGRpdi5odF9uZXN0aW5nQnV0dG9uLmh0X25lc3RpbmdDb2xsYXBzZTphZnRlcntjb250ZW50OiItIn0uaGFuZHNvbnRhYmxlLmlubmVyQm9yZGVySW5saW5lU3RhcnQgdGggZGl2Lmh0X25lc3RpbmdCdXR0b24sLmhh''@;'; put 'put ''bmRzb250YWJsZS5pbm5lckJvcmRlcklubGluZVN0YXJ0fi5oYW5kc29udGFibGUgdGggZGl2Lmh0X25lc3RpbmdCdXR0b257cmlnaHQ6MDtsZWZ0OnVuc2V0fVtkaXI9cnRsXS5oYW5kc29udGFibGUuaW5uZXJCb3JkZXJJbmxpbmVTdGFydCB0aCBkaXYuaHRfbmVzdGluZ0J1dHRvbixbZGly''@;'; put 'put ''PXJ0bF0uaGFuZHNvbnRhYmxlLmlubmVyQm9yZGVySW5saW5lU3RhcnR+LmhhbmRzb250YWJsZSB0aCBkaXYuaHRfbmVzdGluZ0J1dHRvbntsZWZ0OjA7cmlnaHQ6dW5zZXR9Lmh0LXJvb3Qtd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29s''@;'; put 'put ''dW1uO2hlaWdodDoxMDAlfS5odC1ncmlke2ZsZXg6MSAxIGF1dG87bWluLWhlaWdodDowfS5odC1kaWFsb2d7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2Rpc3BsYXk6bm9uZTtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxTZWdvZSBVSSxSb2Jv''@;'; put 'put ''dG8sT3h5Z2VuLFVidW50dSxIZWx2ZXRpY2EgTmV1ZSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ei1pbmRleDoxMDYwO29wYWNpdHk6MDtvdmVyZmxvdy15OmF1dG87Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JveC1zaXppbmc6Ym9yZGVy''@;'; put 'put ''LWJveCFpbXBvcnRhbnR9Lmh0LWRpYWxvZ1tkaXI9cnRsXXtsZWZ0OmF1dG87cmlnaHQ6MH0uaHQtZGlhbG9nOmZvY3Vze2JvcmRlcjoxcHggc29saWQgIzRiODlmZjtvdXRsaW5lOm5vbmV9Lmh0LWRpYWxvZzpoYXMoLmh0Rm9jdXNDYXRjaGVyOmZvY3VzKXtib3JkZXI6MXB4IHNvbGlkICM0''@;'; put 'put ''Yjg5ZmY7b3V0bGluZTpub25lfS5odC1kaWFsb2cgKntib3gtc2l6aW5nOmJvcmRlci1ib3ghaW1wb3J0YW50fS5odC1kaWFsb2ctLWJhY2tncm91bmQtc29saWR7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5odC1kaWFsb2ctLWJhY2tncm91bmQtc2VtaS10cmFuc3BhcmVudHtiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOiNmZmZmZmY4MH0uaHQtZGlhbG9nLS1hbmltYXRpb257dHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMgZWFzZS1pbi1vdXR9Lmh0LWRpYWxvZy0tc2hvd3tvcGFjaXR5OjF9Lmh0LWRpYWxvZ19fY29udGVudC13cmFwcGVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVz''@;'; put 'put ''dGlmeS1jb250ZW50OmNlbnRlcjt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6MTAwJTtwYWRkaW5nOjE2cHh9Lmh0LWRpYWxvZ19fY29udGVudC13cmFwcGVyOmZvY3Vze2JvcmRlcjoxcHggc29saWQgIzRiODlmZjtvdXRsaW5lOm5vbmV9Lmh0LWRpYWxvZ19fY29udGVudHtwb3NpdGlvbjpyZWxh''@;'; put 'put ''dGl2ZTtwYWRkaW5nOjhweDtkaXNwbGF5OmZsZXg7Z2FwOjhweDttYXgtd2lkdGg6NDgwcHg7Y29sb3I6IzIyMn0uaHQtZGlhbG9nX19jb250ZW50LS1iYWNrZ3JvdW5ke2JveC1zaGFkb3c6MCA4cHggMTZweCAjMDAwMDAwMTQ7YmFja2dyb3VuZC1jb2xvcjojZjdmN2Y5fS5odC1kaWFsb2ct''@;'; put 'put ''LWNvbmZpcm0gLmh0LWRpYWxvZ19fY29udGVudC13cmFwcGVye3RleHQtYWxpZ246Y2VudGVyfS5odC1kaWFsb2ctLWNvbmZpcm0gLmh0LWRpYWxvZ19fY29udGVudC13cmFwcGVyLWlubmVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2p1''@;'; put 'put ''c3RpZnktY29udGVudDpjZW50ZXI7Z2FwOjhweDttYXgtd2lkdGg6NDgwcHh9Lmh0LWRpYWxvZy0tY29uZmlybSAuaHQtZGlhbG9nX19jb250ZW50LXdyYXBwZXItaW5uZXItLWJhY2tncm91bmR7Ym94LXNoYWRvdzowIDhweCAxNnB4ICMwMDAwMDAxNDtiYWNrZ3JvdW5kLWNvbG9yOiNmN2Y3''@;'; put 'put ''Zjl9Lmh0LWRpYWxvZy0tY29uZmlybSAuaHQtZGlhbG9nX19jb250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lmh0LWRpYWxvZy0tY29uZmlybSAuaHQtZGlhbG9nX19jb250ZW50Omhhcygu''@;'; put 'put ''aHQtZGlhbG9nX19idXR0b25zKXtnYXA6NHB4fS5odC1kaWFsb2ctLWNvbmZpcm0gLmh0LWRpYWxvZ19fdGl0bGV7bWFyZ2luOjA7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjI0cHh9Lmh0LWRpYWxvZy0tY29uZmlybSAuaHQtZGlhbG9nX19kZXNjcmlwdGlv''@;'; put 'put ''bnttYXJnaW46MDtjb2xvcjojMjIyO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxNnB4fS5odC1kaWFsb2ctLWNvbmZpcm0gLmh0LWRpYWxvZ19fYnV0dG9uc3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDp3cmFwO2dhcDo4cHh9''@;'; put 'put ''Lmh0LXJvb3Qtd3JhcHBlciAuaHQtcGFnaW5hdGlvbntjb2xvcjojMjIyO2JhY2tncm91bmQ6I2YwZjBmMDtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXRvcC1jb2xvcjp0cmFuc3BhcmVudDtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxTZWdvZSBV''@;'; put 'put ''SSxSb2JvdG8sT3h5Z2VuLFVidW50dSxIZWx2ZXRpY2EgTmV1ZSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjQwMDtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3cteDphdXRvfS5odC1yb290LXdyYXBwZXIgLmh0LXBhZ2luYXRpb25fX2lubmVye2Rp''@;'; put 'put ''c3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC13cmFwOndyYXA7Z2FwOjhweDtwYWRkaW5nLWlubGluZTo4cHg7cGFkZGluZy1ibG9jazo0cHg7bWluLXdpZHRoOjIzMHB4fS5odC1yb290LXdyYXBwZXIgLmh0LXBhZ2luYXRp''@;'; put 'put ''b24tLWJvcmRlcmVke2JvcmRlci10b3AtY29sb3I6I2NjY30uaHQtcm9vdC13cmFwcGVyIC5odC1wYWdlLXNpemUtc2VjdGlvbntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHh9Lmh0LXJvb3Qtd3JhcHBlciAuaHQtcGFnZS1zaXplLXNlY3Rpb24gc3Bhbnt3aGl0ZS1z''@;'; put 'put ''cGFjZTpub3dyYXB9Lmh0LXJvb3Qtd3JhcHBlciAuaHQtcGFnZS1zaXplLXNlY3Rpb25fX3NlbGVjdC13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlci1yYWRpdXM6MnB4O2JvcmRlcjoxcHggc29saWQgI2NjY30uaHQtcm9vdC13cmFwcGVyIC5odC1wYWdlLXNpemUtc2VjdGlvbl9f''@;'; put 'put ''c2VsZWN0LXdyYXBwZXIgc2VsZWN0e3BhZGRpbmctaW5saW5lLXN0YXJ0OjhweDtwYWRkaW5nLWlubGluZS1lbmQ6OHB4O3BhZGRpbmctdG9wOjRweDtwYWRkaW5nLWJvdHRvbTo0cHg7Ym9yZGVyLXJhZGl1czoycHg7Y29sb3I6IzIyMjtiYWNrZ3JvdW5kLWNvbG9yOiNmMGYwZjA7Ym9yZGVy''@;'; put 'put ''Om5vbmU7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7Zm9udC1zaXplOmluaGVyaXQ7Y3Vyc29yOnBvaW50ZXJ9Lmh0LXJvb3Qtd3JhcHBlciAuaHQtcGFnZS1zaXplLXNlY3Rpb25fX3NlbGVjdC13cmFwcGVyIHNlbGVjdDpkaXNhYmxlZHtvcGFjaXR5Oi40O2N1cnNvcjpkZWZhdWx0fS5odC1y''@;'; put 'put ''b290LXdyYXBwZXIgLmh0LXBhZ2Utc2l6ZS1zZWN0aW9uX19zZWxlY3Qtd3JhcHBlciBzZWxlY3Q6aG92ZXI6bm90KDpkaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwfS5odC1yb290LXdyYXBwZXIgLmh0LXBhZ2Utc2l6ZS1zZWN0aW9uX19zZWxlY3Qtd3JhcHBlciBzZWxlY3Q6''@;'; put 'put ''Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO291dGxpbmU6MXB4IHNvbGlkICM0Yjg5ZmZ9Lmh0LXJvb3Qtd3JhcHBlciAuaHQtcGFnZS1jb3VudGVyLXNlY3Rpb257bWFyZ2luLWlubGluZS1lbmQ6YXV0b30uaHQtcm9vdC13cmFwcGVyIC5odC1wYWdlLW5hdmlnYXRpb24tc2VjdGlv''@;'; put 'put ''bntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHh9Lmh0LXJvb3Qtd3JhcHBlciAuaHQtcGFnZS1uYXZpZ2F0aW9uLXNlY3Rpb24gYnV0dG9ue2ZvbnQtc2l6ZTppbmhlcml0O2NvbG9yOiMyMjI7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXI6bm9uZTtw''@;'; put 'put ''YWRkaW5nOjRweDtib3JkZXItcmFkaXVzOjJweDtjdXJzb3I6cG9pbnRlcn0uaHQtcm9vdC13cmFwcGVyIC5odC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbiBidXR0b246YmVmb3Jle2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTZweDtoZWlnaHQ6MTZweDtsaW5lLWhlaWdodDoxNnB4O3RleHQtYWxp''@;'; put 'put ''Z246Y2VudGVyfS5odC1yb290LXdyYXBwZXIgLmh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uIGJ1dHRvbjpkaXNhYmxlZHtvcGFjaXR5Oi40O2N1cnNvcjpkZWZhdWx0fS5odC1yb290LXdyYXBwZXIgLmh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uIGJ1dHRvbjpob3Zlcjpub3QoOmRpc2Fi''@;'; put 'put ''bGVkKXtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTB9Lmh0LXJvb3Qtd3JhcHBlciAuaHQtcGFnZS1uYXZpZ2F0aW9uLXNlY3Rpb24gYnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IHNvbGlkICM0Yjg5ZmZ9Lmh0LXJvb3Qtd3JhcHBlciAuaHQtcGFnZS1uYXZpZ2F0aW9uLXNlY3Rpb24gLmh0LXBh''@;'; put 'put ''Z2UtZmlyc3Q6YmVmb3Jle2NvbnRlbnQ6IlwyMWE0In1bZGlyPXJ0bF0uaHQtcm9vdC13cmFwcGVyIC5odC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbiAuaHQtcGFnZS1maXJzdDpiZWZvcmV7Y29udGVudDoiXDIxYTYifS5odC1yb290LXdyYXBwZXIgLmh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0''@;'; put 'put ''aW9uIC5odC1wYWdlLXByZXY6YmVmb3Jle2NvbnRlbnQ6IlwyMWEyIn1bZGlyPXJ0bF0uaHQtcm9vdC13cmFwcGVyIC5odC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbiAuaHQtcGFnZS1wcmV2OmJlZm9yZXtjb250ZW50OiJcMjFhMyJ9Lmh0LXJvb3Qtd3JhcHBlciAuaHQtcGFnZS1uYXZpZ2F0''@;'; put 'put ''aW9uLXNlY3Rpb24gLmh0LXBhZ2UtbmV4dDpiZWZvcmV7Y29udGVudDoiXDIxYTMifVtkaXI9cnRsXS5odC1yb290LXdyYXBwZXIgLmh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uIC5odC1wYWdlLW5leHQ6YmVmb3Jle2NvbnRlbnQ6IlwyMWEyIn0uaHQtcm9vdC13cmFwcGVyIC5odC1wYWdl''@;'; put 'put ''LW5hdmlnYXRpb24tc2VjdGlvbiAuaHQtcGFnZS1sYXN0OmJlZm9yZXtjb250ZW50OiJcMjFhNiJ9W2Rpcj1ydGxdLmh0LXJvb3Qtd3JhcHBlciAuaHQtcGFnZS1uYXZpZ2F0aW9uLXNlY3Rpb24gLmh0LXBhZ2UtbGFzdDpiZWZvcmV7Y29udGVudDoiXDIxYTQifS5odC1yb290LXdyYXBwZXIg''@;'; put 'put ''Lmh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uIHNwYW57d2hpdGUtc3BhY2U6bm93cmFwfS5odC1sb2FkaW5nX19pY29uLXN2Z3tkaXNwbGF5OmJsb2NrO3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHg7Y29sb3I6IzUyOTJmNzthbmltYXRpb246aHQtbG9hZGluZy1zcGluIDFzIGxpbmVhciBpbmZp''@;'; put 'put ''bml0ZTt0cmFuc2Zvcm0tb3JpZ2luOjUwJSA1MCV9Lmh0LWxvYWRpbmdfX2NvbnRlbnR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4fS5odC1sb2FkaW5nX190aXRsZXttYXJnaW46MDtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MThw''@;'; put 'put ''eH0uaHQtbG9hZGluZ19fZGVzY3JpcHRpb257bWFyZ2luOjA7Y29sb3I6IzIyMjtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxNnB4O2ZvbnQtd2VpZ2h0OjQwMH1Aa2V5ZnJhbWVzIGh0LWxvYWRpbmctc3Bpbnt0b3t0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fS5odC1lbXB0eS1kYXRh''@;'; put 'put ''LXN0YXRle2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO2xlZnQ6MDt6LWluZGV4Ojk5OTtvdmVyZmxvdy15OmF1dG87Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JveC1zaXppbmc6Ym9yZGVyLWJveDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lmh0LWVtcHR5LWRhdGEt''@;'; put 'put ''c3RhdGUgKntib3gtc2l6aW5nOmJvcmRlci1ib3ghaW1wb3J0YW50fS5odC1lbXB0eS1kYXRhLXN0YXRlX19jb250ZW50LXdyYXBwZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjEwMCU7bWlu''@;'; put 'put ''LWhlaWdodDoxMDAlO3BhZGRpbmc6MTZweH0uaHQtZW1wdHktZGF0YS1zdGF0ZV9fY29udGVudC13cmFwcGVyLWlubmVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7bWF4LXdpZHRoOjQ4MHB4O3Bh''@;'; put 'put ''ZGRpbmc6MTZweH0uaHQtZW1wdHktZGF0YS1zdGF0ZV9fY29udGVudC13cmFwcGVyLWlubmVyOmZvY3Vze291dGxpbmU6bm9uZTtib3gtc2hhZG93OjAgMCAwIDFweCAjNGI4OWZmfS5odC1lbXB0eS1kYXRhLXN0YXRlX19jb250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1''@;'; put 'put ''bW47YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Z2FwOjRweH0uaHQtZW1wdHktZGF0YS1zdGF0ZV9fdGl0bGV7bWFyZ2luOjA7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjI0cHh9Lmh0LWVtcHR5LWRhdGEtc3RhdGVfX2Rlc2Ny''@;'; put 'put ''aXB0aW9ue21hcmdpbjowO2NvbG9yOiMyMjI7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MTZweDtmb250LXdlaWdodDo0MDB9Lmh0LWVtcHR5LWRhdGEtc3RhdGVfX2J1dHRvbnN7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgt''@;'; put 'put ''d3JhcDp3cmFwO2dhcDo4cHh9Lmh0LWVtcHR5LWRhdGEtc3RhdGVfX2J1dHRvbnMtLWhhcy1idXR0b25ze21hcmdpbi10b3A6OHB4fS5odC1lbXB0eS1kYXRhLXN0YXRlLS1kaXNhYmxlLXRvcC1ib3JkZXJ7Ym9yZGVyLXRvcC13aWR0aDowfS5odC1lbXB0eS1kYXRhLXN0YXRlLS1kaXNhYmxl''@;'; put 'put ''LWlubGluZS1ib3JkZXJ7Ym9yZGVyLWlubGluZS1zdGFydC13aWR0aDowfS5odC1lbXB0eS1kYXRhLXN0YXRlLS1kaXNhYmxlLWJvdHRvbS1ib3JkZXIsLmh0LWVtcHR5LWRhdGEtc3RhdGU6aGFzKH4uaHQtcGFnaW5hdGlvbil7Ym9yZGVyLWJvdHRvbS13aWR0aDowfS8qIQogKiBQaWthZGF5''@;'; put 'put ''CiAqIENvcHlyaWdodCDCqSAyMDE0IERhdmlkIEJ1c2hlbGwgfCBCU0QgJiBNSVQgbGljZW5zZSB8IGh0dHBzOi8vZGJ1c2hlbGwuY29tLwogKi8ucGlrYS1zaW5nbGV7ei1pbmRleDo5OTk5O2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7Y29sb3I6IzMzMztiYWNrZ3JvdW5kOiNm''@;'; put 'put ''ZmY7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1ib3R0b20tY29sb3I6I2JiYjtmb250LWZhbWlseTpIZWx2ZXRpY2EgTmV1ZSxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZn0ucGlrYS1zaW5nbGU6YmVmb3JlLC5waWthLXNpbmdsZTphZnRlcntjb250ZW50OiIgIjtkaXNwbGF5OnRh''@;'; put 'put ''YmxlfS5waWthLXNpbmdsZTphZnRlcntjbGVhcjpib3RofS5waWthLXNpbmdsZS5pcy1oaWRkZW57ZGlzcGxheTpub25lfS5waWthLXNpbmdsZS5pcy1ib3VuZHtwb3NpdGlvbjphYnNvbHV0ZTtib3gtc2hhZG93OjAgNXB4IDE1cHggLTVweCAjMDAwMDAwODB9LnBpa2EtbGVuZGFye2Zsb2F0''@;'; put 'put ''OmxlZnQ7d2lkdGg6MjQwcHg7bWFyZ2luOjhweH0ucGlrYS10aXRsZXtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcn0ucGlrYS1sYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4Ojk5OTk7b3ZlcmZsb3c6aGlkZGVuO21hcmdpbjow''@;'; put 'put ''O3BhZGRpbmc6NXB4IDNweDtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoyMHB4O2ZvbnQtd2VpZ2h0OjcwMDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LnBpa2EtdGl0bGUgc2VsZWN0e2N1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6OTk5ODttYXJnaW46MDtsZWZ0''@;'; put 'put ''OjA7dG9wOjVweDtvcGFjaXR5OjB9LnBpa2EtcHJldiwucGlrYS1uZXh0e2Rpc3BsYXk6YmxvY2s7Y3Vyc29yOnBvaW50ZXI7cG9zaXRpb246cmVsYXRpdmU7b3V0bGluZTpub25lO2JvcmRlcjowO3BhZGRpbmc6MDt3aWR0aDoyMHB4O2hlaWdodDozMHB4O3RleHQtaW5kZW50OjIwcHg7d2hp''@;'; put 'put ''dGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtcG9zaXRpb246Y2VudGVyIGNlbnRlcjtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjc1JSA3NSU7b3BhY2l0eTouNX0ucGlrYS1w''@;'; put 'put ''cmV2OmhvdmVyLC5waWthLW5leHQ6aG92ZXJ7b3BhY2l0eToxfS5waWthLXByZXYsLmlzLXJ0bCAucGlrYS1uZXh0e2Zsb2F0OmxlZnQ7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCUUFBQUFlQ0FZQUFBQXNFajVy''@;'; put 'put ''QUFBQVVrbEVRVlI0MnUzVk1Rb0FJQkFEUWY4UGdqK09EOWhHMkN0T05KQjJ5bVFrS2UwSGJ3QVAweHVjRGlRV0FSSVRJREVCRW5NZ01ROFM4K0FxQklsNmtLZ0hpWHFRcUFlSmVwQm8vejM4Si9VMHVBSGxhQmtCbDlJNEd3QUFBQUJKUlU1RXJrSmdnZz09KX0ucGlrYS1uZXh0LC5pcy1ydGwg''@;'; put 'put ''LnBpa2EtcHJldntmbG9hdDpyaWdodDtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJRQUFBQWVDQVlBQUFBc0VqNXJBQUFBVTBsRVFWUjQydTNWT3dvQU1BZ0UwZHdmQW5OalUyNmJZa0JDRkd3ZmlMOVZWV29PK0JK''@;'; put 'put ''NEdmM2d0c0VLS29GQk5UQ29DQVlWd2FBaUdOUUdNVUhNa2pHYmdqazJtSU9OdVhvMG5DOFhuQ2YxSlhnQXJWSVpBUWg1VEtZQUFBQUFTVVZPUks1Q1lJST0pfS5waWthLXByZXYuaXMtZGlzYWJsZWQsLnBpa2EtbmV4dC5pcy1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtvcGFjaXR5Oi4yfS5w''@;'; put 'put ''aWthLXNlbGVjdHtkaXNwbGF5OmlubGluZS1ibG9ja30ucGlrYS10YWJsZXt3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowO2JvcmRlcjowfS5waWthLXRhYmxlIHRoLC5waWthLXRhYmxlIHRke3dpZHRoOjE0LjI4NTcxNDI4NTcxNDI4NiU7cGFk''@;'; put 'put ''ZGluZzowfS5waWthLXRhYmxlIHRoe2NvbG9yOiM5OTk7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MjVweDtmb250LXdlaWdodDo3MDA7dGV4dC1hbGlnbjpjZW50ZXJ9LnBpa2EtYnV0dG9ue2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94Oy1t''@;'; put 'put ''b3otYm94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZTtib3JkZXI6MDttYXJnaW46MDt3aWR0aDoxMDAlO3BhZGRpbmc6NXB4O2NvbG9yOiM2NjY7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MTVweDt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kOiNmNWY1ZjU7aGVpZ2h0''@;'; put 'put ''OmluaXRpYWx9LnBpa2Etd2Vla3tmb250LXNpemU6MTFweDtjb2xvcjojOTk5fS5pcy10b2RheSAucGlrYS1idXR0b257Y29sb3I6IzNhZjtmb250LXdlaWdodDo3MDB9LmlzLXNlbGVjdGVkIC5waWthLWJ1dHRvbiwuaGFzLWV2ZW50IC5waWthLWJ1dHRvbntjb2xvcjojZmZmO2ZvbnQtd2Vp''@;'; put 'put ''Z2h0OjcwMDtiYWNrZ3JvdW5kOiMzYWY7Ym94LXNoYWRvdzppbnNldCAwIDFweCAzcHggIzE3OGZlNTtib3JkZXItcmFkaXVzOjNweH0uaGFzLWV2ZW50IC5waWthLWJ1dHRvbntiYWNrZ3JvdW5kOiMwMDVkYTk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAzcHggIzAwNzZjOX0uaXMtZGlzYWJs''@;'; put 'put ''ZWQgLnBpa2EtYnV0dG9uLC5pcy1pbnJhbmdlIC5waWthLWJ1dHRvbntiYWNrZ3JvdW5kOiNkNWU5Zjd9LmlzLXN0YXJ0cmFuZ2UgLnBpa2EtYnV0dG9ue2NvbG9yOiNmZmY7YmFja2dyb3VuZDojNmNiMzFkO2JveC1zaGFkb3c6bm9uZTtib3JkZXItcmFkaXVzOjNweH0uaXMtZW5kcmFuZ2Ug''@;'; put 'put ''LnBpa2EtYnV0dG9ue2NvbG9yOiNmZmY7YmFja2dyb3VuZDojM2FmO2JveC1zaGFkb3c6bm9uZTtib3JkZXItcmFkaXVzOjNweH0uaXMtZGlzYWJsZWQgLnBpa2EtYnV0dG9ue3BvaW50ZXItZXZlbnRzOm5vbmU7Y3Vyc29yOmRlZmF1bHQ7Y29sb3I6Izk5OTtvcGFjaXR5Oi4zfS5pcy1vdXRz''@;'; put 'put ''aWRlLWN1cnJlbnQtbW9udGggLnBpa2EtYnV0dG9ue2NvbG9yOiM5OTk7b3BhY2l0eTouM30uaXMtc2VsZWN0aW9uLWRpc2FibGVke3BvaW50ZXItZXZlbnRzOm5vbmU7Y3Vyc29yOmRlZmF1bHR9LnBpa2EtYnV0dG9uOmhvdmVyLC5waWthLXJvdy5waWNrLXdob2xlLXdlZWs6aG92ZXIgLnBp''@;'; put 'put ''a2EtYnV0dG9ue2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZmY4MDAwO2JveC1zaGFkb3c6bm9uZTtib3JkZXItcmFkaXVzOjNweH0ucGlrYS10YWJsZSBhYmJye2JvcmRlci1ib3R0b206bm9uZTtjdXJzb3I6aGVscH1jbHItaWNvbntkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MDtoZWln''@;'; put 'put ''aHQ6MTZweDt3aWR0aDoxNnB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtmaWxsOmN1cnJlbnRDb2xvcn1jbHItaWNvbiAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOmN1cnJlbnRDb2xvcn1jbHItaWNvbi5pcy1ncmVlbixjbHItaWNvbi5pcy1zdWNjZXNze2ZpbGw6IzJlODUwMH1j''@;'; put 'put ''bHItaWNvbi5pcy1ncmVlbiAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2UsY2xyLWljb24uaXMtc3VjY2VzcyAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOiMyZTg1MDB9Y2xyLWljb24uaXMtcmVkLGNsci1pY29uLmlzLWRhbmdlcixjbHItaWNvbi5pcy1lcnJvcntmaWxsOiNlMDIy''@;'; put 'put ''MDB9Y2xyLWljb24uaXMtcmVkIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZSxjbHItaWNvbi5pcy1kYW5nZXIgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tlLGNsci1pY29uLmlzLWVycm9yIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6I2UwMjIwMH1jbHItaWNvbi5pcy13YXJuaW5n''@;'; put 'put ''e2ZpbGw6I2MyN2IwMH1jbHItaWNvbi5pcy13YXJuaW5nIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6I2MyN2IwMH1jbHItaWNvbi5pcy1ibHVlLGNsci1pY29uLmlzLWluZm97ZmlsbDojMDA3N2I4fWNsci1pY29uLmlzLWJsdWUgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tlLGNs''@;'; put 'put ''ci1pY29uLmlzLWluZm8gLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tle3N0cm9rZTojMDA3N2I4fWNsci1pY29uLmlzLXdoaXRlLGNsci1pY29uLmlzLWludmVyc2V7ZmlsbDojZmZmfWNsci1pY29uLmlzLXdoaXRlIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZSxjbHItaWNvbi5pcy1pbnZlcnNl''@;'; put 'put ''IC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6I2ZmZn1jbHItaWNvbi5pcy1oaWdobGlnaHR7ZmlsbDojMDA3N2I4fWNsci1pY29uLmlzLWhpZ2hsaWdodCAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOiMwMDc3Yjh9Y2xyLWljb25bc2hhcGUkPSIgdXAiXSBzdmcsY2xy''@;'; put 'put ''LWljb25bZGlyPXVwXSBzdmd7dHJhbnNmb3JtOnJvdGF0ZSgwKX1jbHItaWNvbltzaGFwZSQ9IiBkb3duIl0gc3ZnLGNsci1pY29uW2Rpcj1kb3duXSBzdmd7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpfWNsci1pY29uW3NoYXBlJD0iIHJpZ2h0Il0gc3ZnLGNsci1pY29uW2Rpcj1yaWdodF0g''@;'; put 'put ''c3Zne3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfWNsci1pY29uW3NoYXBlJD0iIGxlZnQiXSBzdmcsY2xyLWljb25bZGlyPWxlZnRdIHN2Z3t0cmFuc2Zvcm06cm90YXRlKDI3MGRlZyl9Y2xyLWljb25bZmxpcD1ob3Jpem9udGFsXSBzdmd7dHJhbnNmb3JtOnNjYWxlKC0xKSByb3RhdGVYKDE4''@;'; put 'put ''MGRlZyl9Y2xyLWljb25bZmxpcD12ZXJ0aWNhbF0gc3Zne3RyYW5zZm9ybTpzY2FsZSgtMSkgcm90YXRlWSgxODBkZWcpfWNsci1pY29uIC5jbHItaS1iYWRnZXtmaWxsOiNlMDIyMDB9Y2xyLWljb24gLmNsci1pLWJhZGdlIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6I2UwMjIw''@;'; put 'put ''MH1jbHItaWNvbj4qe2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7ZGlzcGxheTpibG9jaztwb2ludGVyLWV2ZW50czpub25lfWNsci1pY29uPnN2Z3t0cmFuc2l0aW9uOmluaGVyaXR9Y2xyLWljb24+c3ZnIHRpdGxle2Rpc3BsYXk6bm9uZX1jbHItaWNvbiAuY2xyLWktc29saWQsY2xyLWljb24g''@;'; put 'put ''LmNsci1pLXNvbGlkLS1iYWRnZWQsY2xyLWljb24gLmNsci1pLXNvbGlkLS1hbGVydGVke2Rpc3BsYXk6bm9uZX1jbHItaWNvbiAuY2xyLWktb3V0bGluZS0tYWxlcnRlZDpub3QoLmNsci1pLW91dGxpbmUpLGNsci1pY29uIC5jbHItaS1vdXRsaW5lLS1iYWRnZWQ6bm90KC5jbHItaS1vdXRs''@;'; put 'put ''aW5lKXtkaXNwbGF5Om5vbmV9Y2xyLWljb25bY2xhc3MqPWhhcy1hbGVydF0gLmNhbi1hbGVydCAuY2xyLWktb3V0bGluZS0tYWxlcnRlZHtkaXNwbGF5OmJsb2NrfWNsci1pY29uW2NsYXNzKj1oYXMtYWxlcnRdIC5jYW4tYWxlcnQgLmNsci1pLW91dGxpbmU6bm90KC5jbHItaS1vdXRsaW5l''@;'; put 'put ''LS1hbGVydGVkKXtkaXNwbGF5Om5vbmV9Y2xyLWljb25bY2xhc3MqPWhhcy1iYWRnZV0gLmNhbi1iYWRnZSAuY2xyLWktb3V0bGluZS0tYmFkZ2Vke2Rpc3BsYXk6YmxvY2t9Y2xyLWljb25bY2xhc3MqPWhhcy1iYWRnZV0gLmNhbi1iYWRnZSAuY2xyLWktb3V0bGluZTpub3QoLmNsci1pLW91''@;'; put 'put ''dGxpbmUtLWJhZGdlZCl7ZGlzcGxheTpub25lfWNsci1pY29uLmlzLXNvbGlkIC5oYXMtc29saWQgLmNsci1pLXNvbGlke2Rpc3BsYXk6YmxvY2t9Y2xyLWljb24uaXMtc29saWQgLmhhcy1zb2xpZCAuY2xyLWktb3V0bGluZSxjbHItaWNvbi5pcy1zb2xpZCAuaGFzLXNvbGlkIC5jbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWR7ZGlzcGxheTpub25lfWNsci1pY29uLmlzLXNvbGlkIC5oYXMtc29saWQgLmNsci1pLXNvbGlkLS1hbGVydGVkOm5vdCguY2xyLWktc29saWQpLGNsci1pY29uLmlzLXNvbGlkIC5oYXMtc29saWQgLmNsci1pLXNvbGlkLS1iYWRnZWQ6bm90KC5jbHItaS1zb2xpZCl7''@;'; put 'put ''ZGlzcGxheTpub25lfWNsci1pY29uLmlzLXNvbGlkW2NsYXNzKj1oYXMtYmFkZ2VdIC5jYW4tYmFkZ2UuaGFzLXNvbGlkIC5jbHItaS1zb2xpZC0tYmFkZ2Vke2Rpc3BsYXk6YmxvY2t9Y2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1iYWRnZV0gLmNhbi1iYWRnZS5oYXMtc29saWQgLmNs''@;'; put 'put ''ci1pLW91dGxpbmUsY2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1iYWRnZV0gLmNhbi1iYWRnZS5oYXMtc29saWQgLmNsci1pLW91dGxpbmUtLWJhZGdlZCxjbHItaWNvbi5pcy1zb2xpZFtjbGFzcyo9aGFzLWJhZGdlXSAuY2FuLWJhZGdlLmhhcy1zb2xpZCAuY2xyLWktc29saWQ6bm90''@;'; put 'put ''KC5jbHItaS1zb2xpZC0tYmFkZ2VkKXtkaXNwbGF5Om5vbmV9Y2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1hbGVydF0gLmNhbi1hbGVydC5oYXMtc29saWQgLmNsci1pLXNvbGlkLS1hbGVydGVke2Rpc3BsYXk6YmxvY2t9Y2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1hbGVydF0g''@;'; put 'put ''LmNhbi1hbGVydC5oYXMtc29saWQgLmNsci1pLW91dGxpbmUsY2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1hbGVydF0gLmNhbi1hbGVydC5oYXMtc29saWQgLmNsci1pLW91dGxpbmUtLWFsZXJ0ZWQsY2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1hbGVydF0gLmNhbi1hbGVydC5o''@;'; put 'put ''YXMtc29saWQgLmNsci1pLXNvbGlkOm5vdCguY2xyLWktc29saWQtLWFsZXJ0ZWQpe2Rpc3BsYXk6bm9uZX1jbHItaWNvbi5oYXMtYmFkZ2UtLXN1Y2Nlc3MgLmNsci1pLWJhZGdle2ZpbGw6IzJlODUwMH1jbHItaWNvbi5oYXMtYmFkZ2UtLXN1Y2Nlc3MgLmNsci1pLWJhZGdlIC50cmFuc3Bh''@;'; put 'put ''cmVudC1maWxsLXN0cm9rZXtzdHJva2U6IzJlODUwMH1jbHItaWNvbi5oYXMtYmFkZ2UtLWVycm9yIC5jbHItaS1iYWRnZXtmaWxsOiNlMDIyMDB9Y2xyLWljb24uaGFzLWJhZGdlLS1lcnJvciAuY2xyLWktYmFkZ2UgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tle3N0cm9rZTojZTAyMjAwfWNs''@;'; put 'put ''ci1pY29uLmhhcy1iYWRnZS0taW5mbyAuY2xyLWktYmFkZ2V7ZmlsbDojMDA3N2I4fWNsci1pY29uLmhhcy1iYWRnZS0taW5mbyAuY2xyLWktYmFkZ2UgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tle3N0cm9rZTojMDA3N2I4fWNsci1pY29uLmhhcy1hbGVydCAuY2xyLWktYWxlcnR7ZmlsbDoj''@;'; put 'put ''YzI3YjAwfWNsci1pY29uLmhhcy1hbGVydCAuY2xyLWktYWxlcnQgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tle3N0cm9rZTojYzI3YjAwfWNsci1pY29uIC5pcy1vZmYtc2NyZWVue3Bvc2l0aW9uOmZpeGVkIWltcG9ydGFudDtib3JkZXI6MCFpbXBvcnRhbnQ7aGVpZ2h0OjFweCFpbXBvcnRh''@;'; put 'put ''bnQ7d2lkdGg6MXB4IWltcG9ydGFudDtsZWZ0OjAhaW1wb3J0YW50O3RvcDotMXB4IWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4haW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnQ7bWFyZ2luOjAgMCAtMXB4IWltcG9ydGFudH06cm9vdHstLWNkcy1nbG9iYWwtYmFzZToyMDstLWNkcy1n''@;'; put 'put ''bG9iYWwtc2NhbGUtc3BhY2U6MTstLWNkcy1nbG9iYWwtc2NhbGUtbGF5b3V0LXNwYWNlOjE7LS1jZHMtZ2xvYmFsLXNjYWxlLXR5cG9ncmFwaHk6MTstLWNkcy1nbG9iYWwtbGF5b3V0LWdyaWQtY29sczoxMjstLWNkcy1nbG9iYWwtbGF5b3V0LXdpZHRoLXhzOjU3NnB4Oy0tY2RzLWdsb2Jh''@;'; put 'put ''bC1sYXlvdXQtd2lkdGgtc206NzY4cHg7LS1jZHMtZ2xvYmFsLWxheW91dC13aWR0aC1tZDo5OTJweDstLWNkcy1nbG9iYWwtbGF5b3V0LXdpZHRoLWxnOjEyMDBweDstLWNkcy1nbG9iYWwtbGF5b3V0LXdpZHRoLXhsOjE0NDBweDstLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXh4eHM6Y2Fs''@;'; put 'put ''YygyICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTEpKTstLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXh4czpjYWxjKDQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMSkpOy0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UteHM6Y2FsYyg4ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxl''@;'; put 'put ''LTEpKTstLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXNtOmNhbGMoMTIgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMSkpOy0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UtbWQ6Y2FsYygxNiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0xKSk7LS1jZHMtZ2xvYmFsLWxheW91dC1zcGFj''@;'; put 'put ''ZS1sZzpjYWxjKDI0ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTEpKTstLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXhsOmNhbGMoMzIgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMSkpOy0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UteHhsOmNhbGMoNDggKiB2YXIoLS1jZHMtaW50''@;'; put 'put ''ZXJuYWwtc2NhbGUtMSkpOy0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UteHh4bDpjYWxjKDY0ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTEpKTstLWNkcy1nbG9iYWwtc3BhY2UtMDpjYWxjKDAgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMikpOy0tY2RzLWdsb2JhbC1zcGFjZS0x''@;'; put 'put ''OmNhbGMoMSAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTI6Y2FsYygyICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtMzpjYWxjKDQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMikpOy0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS00OmNhbGMoNiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTU6Y2FsYyg4ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtNjpjYWxjKDEyICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxl''@;'; put 'put ''LTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtNzpjYWxjKDE2ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtODpjYWxjKDE4ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtOTpjYWxjKDI0ICogdmFyKC0tY2Rz''@;'; put 'put ''LWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtMTA6Y2FsYygzMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTExOmNhbGMoMzYgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMikpOy0tY2RzLWdsb2JhbC1zcGFjZS0xMjpj''@;'; put 'put ''YWxjKDQ4ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtMTM6Y2FsYyg2NCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTE0OmNhbGMoNzIgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMikpOy0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS0xNTpjYWxjKDk2ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtY29sb3ItYmxhY2s6aHNsKDAsIDAlLCAwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlOmhzbCgwLCAwJSwgMTAwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTUw''@;'; put 'put ''OmhzbCg5MywgODAlLCA5NCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0xMDA6aHNsKDkzLCA4MCUsIDgzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTIwMDpoc2woOTMsIDgwJSwgNzAlKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMzAwOmhzbCg5MywgODAlLCA1NiUpOy0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1ncmVlbi00MDA6aHNsKDkzLCA4MCUsIDQ4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTUwMDpoc2woOTMsIDgwJSwgNDQlKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNjAwOmhzbCg5MywgODAlLCAzNyUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi03MDA6''@;'; put 'put ''aHNsKDkzLCA4MCUsIDI4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTgwMDpoc2woOTMsIDgwJSwgMjMlKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tOTAwOmhzbCg5MywgODAlLCAxNyUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0xMDAwOmhzbCg5MywgODAlLCAxMiUpOy0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1ibHVlLTI1OmhzbCgxOTgsIDEwMCUsIDk2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTA6aHNsKDE5OCwgMTAwJSwgOTUlKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03NTpoc2woMTk4LCAxMDAlLCA5NCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTEwMDpo''@;'; put 'put ''c2woMTk4LCAxMDAlLCA4NyUpOy0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTIwMDpoc2woMTk4LCAxMDAlLCA3OCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTMwMDpoc2woMTk4LCAxMDAlLCA3MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTQwMDpoc2woMTk4LCAxMDAlLCA1OSUpOy0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwMDpoc2woMTk4LCAxMDAlLCA0OCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTYwMDpoc2woMTk4LCAxMDAlLCA0MyUpOy0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMDpoc2woMTk4LCAxMDAlLCAzNCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ibHVl''@;'; put 'put ''LTgwMDpoc2woMTk4LCAxMDAlLCAyNyUpOy0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTkwMDpoc2woMTk4LCAxMDAlLCAyMSUpOy0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTEwMDA6aHNsKDE5OCwgMTAwJSwgMTUlKTstLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTUwOmhzbCgyODIsIDEwMCUs''@;'; put 'put ''IDk3JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0xMDA6aHNsKDI4MiwgODAlLCA5MSUpOy0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMjAwOmhzbCgyODIsIDczJSwgODMlKTstLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTMwMDpoc2woMjgyLCA2NiUsIDc0JSk7LS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLXZpb2xldC00MDA6aHNsKDI4MiwgNjAlLCA2NSUpOy0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNTAwOmhzbCgyODIsIDYwJSwgNTclKTstLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTYwMDpoc2woMjgyLCA2MCUsIDQ5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC03MDA6''@;'; put 'put ''aHNsKDI4MywgODAlLCAzNiUpOy0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtODAwOmhzbCgyODIsIDEwMCUsIDI2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC05MDA6aHNsKDI4MiwgMTAwJSwgMTklKTstLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTEwMDA6aHNsKDI4MiwgMTAwJSwg''@;'; put 'put ''MTQlKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTUwOmhzbCg5LCAxMDAlLCA5NyUpOy0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMTAwOmhzbCg5LCAxMDAlLCA5NCUpOy0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMjAwOmhzbCg5LCAxMDAlLCA4OCUpOy0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMzAw''@;'; put 'put ''OmhzbCg5LCAxMDAlLCA3OSUpOy0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNDAwOmhzbCg5LCAxMDAlLCA3MSUpOy0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNTAwOmhzbCg5LCAxMDAlLCA2NSUpOy0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNjAwOmhzbCg5LCAxMDAlLCA1OSUpOy0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1yZWQtNzAwOmhzbCg5LCAxMDAlLCA0NCUpOy0tY2RzLWdsb2JhbC1jb2xvci1yZWQtODAwOmhzbCg5LCAxMDAlLCAzOCUpOy0tY2RzLWdsb2JhbC1jb2xvci1yZWQtOTAwOmhzbCg5LCAxMDAlLCAyOCUpOy0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMTAwMDpoc2woOSwgMTAwJSwg''@;'; put 'put ''MjIlKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTA6aHNsKDQxLCAxMDAlLCA5NiUpOy0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS0xMDA6aHNsKDQxLCAxMDAlLCA5MiUpOy0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS0yMDA6aHNsKDQxLCAxMDAlLCA4NiUpOy0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1vY2hyZS0zMDA6aHNsKDQxLCAxMDAlLCA3OCUpOy0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS00MDA6aHNsKDQxLCAxMDAlLCA3MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS01MDA6aHNsKDQwLCAxMDAlLCA1OSUpOy0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS02MDA6aHNsKDM5LCAx''@;'; put 'put ''MDAlLCA1MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS03MDA6aHNsKDM4LCAxMDAlLCA0MiUpOy0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS04MDA6aHNsKDM3LCAxMDAlLCAzMiUpOy0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS05MDA6aHNsKDM2LCAxMDAlLCAyNyUpOy0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1vY2hyZS0xMDAwOmhzbCgzNSwgMTAwJSwgMTklKTstLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItNTA6aHNsKDIzOCwgMTAwJSwgOTYlKTstLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItMTAwOmhzbCgyMzgsIDU4JSwgODglKTstLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5k''@;'; put 'put ''ZXItMjAwOmhzbCgyMzgsIDUzJSwgNzklKTstLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItMzAwOmhzbCgyMzgsIDUyJSwgNzAlKTstLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItNDAwOmhzbCgyMzgsIDU4JSwgNjQlKTstLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItNTAwOmhzbCgy''@;'; put 'put ''MzgsIDU5JSwgNTglKTstLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItNjAwOmhzbCgyMzgsIDYwJSwgNTIlKTstLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItNzAwOmhzbCgyMzgsIDY5JSwgNDUlKTstLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItODAwOmhzbCgyMzgsIDEwMCUsIDMy''@;'; put 'put ''JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTkwMDpoc2woMjM4LCAxMDAlLCAyMiUpOy0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci0xMDAwOmhzbCgyMzgsIDEwMCUsIDE0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTUwOmhzbCgyMTEsIDEwMCUsIDk1JSk7LS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLWF6dXJlLTEwMDpoc2woMjExLCAxMDAlLCA4OCUpOy0tY2RzLWdsb2JhbC1jb2xvci1henVyZS0yMDA6aHNsKDIxMSwgMTAwJSwgODElKTstLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtMzAwOmhzbCgyMTEsIDEwMCUsIDcwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTQw''@;'; put 'put ''MDpoc2woMjExLCAxMDAlLCA2MiUpOy0tY2RzLWdsb2JhbC1jb2xvci1henVyZS01MDA6aHNsKDIxMSwgMTAwJSwgNTQlKTstLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtNjAwOmhzbCgyMTEsIDEwMCUsIDQ2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTcwMDpoc2woMjExLCAxMDAlLCAz''@;'; put 'put ''NyUpOy0tY2RzLWdsb2JhbC1jb2xvci1henVyZS04MDA6aHNsKDIxMSwgMTAwJSwgMjYlKTstLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtOTAwOmhzbCgyMTEsIDEwMCUsIDE4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTEwMDA6aHNsKDIxMSwgMTAwJSwgMTQlKTstLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItYXF1YS01MDpoc2woMTg0LCAxMDAlLCA5NiUpOy0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTEwMDpoc2woMTg0LCAxMDAlLCA4NiUpOy0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTIwMDpoc2woMTg0LCAxMDAlLCA3NSUpOy0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTMwMDpoc2woMTg0''@;'; put 'put ''LCAxMDAlLCA2MiUpOy0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTQwMDpoc2woMTg0LCAxMDAlLCA0OCUpOy0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTUwMDpoc2woMTg0LCAxMDAlLCA0MyUpOy0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTYwMDpoc2woMTg0LCAxMDAlLCAzNCUpOy0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1hcXVhLTcwMDpoc2woMTg0LCAxMDAlLCAyNSUpOy0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTgwMDpoc2woMTg0LCAxMDAlLCAxOCUpOy0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTkwMDpoc2woMTg0LCAxMDAlLCAxMyUpOy0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTEwMDA6''@;'; put 'put ''aHNsKDE4NCwgMTAwJSwgMTAlKTstLWNkcy1nbG9iYWwtY29sb3ItamFkZS01MDpoc2woMTYwLCA4MyUsIDk1JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtMTAwOmhzbCgxNjAsIDgyJSwgODglKTstLWNkcy1nbG9iYWwtY29sb3ItamFkZS0yMDA6aHNsKDE2MCwgNzglLCA3OCUpOy0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1qYWRlLTMwMDpoc2woMTYwLCA2OSUsIDY1JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNDAwOmhzbCgxNjAsIDY5JSwgNTMlKTstLWNkcy1nbG9iYWwtY29sb3ItamFkZS01MDA6aHNsKDE2MCwgNjQlLCA0NSUpOy0tY2RzLWdsb2JhbC1jb2xvci1qYWRlLTYwMDpo''@;'; put 'put ''c2woMTYwLCA2OSUsIDM2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNzAwOmhzbCgxNjAsIDY0JSwgMzAlKTstLWNkcy1nbG9iYWwtY29sb3ItamFkZS04MDA6aHNsKDE2MCwgMTAwJSwgMjElKTstLWNkcy1nbG9iYWwtY29sb3ItamFkZS05MDA6aHNsKDE2MCwgNzAlLCAxOCUpOy0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1qYWRlLTEwMDA6aHNsKDE2MCwgNjklLCAxNCUpOy0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctNTA6aHNsKDUwLCAxMDAlLCA5NSUpOy0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctMTAwOmhzbCg1MCwgMTAwJSwgODQlKTstLWNkcy1nbG9iYWwtY29sb3IteWVsbG93''@;'; put 'put ''LTIwMDpoc2woNTAsIDEwMCUsIDczJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy0zMDA6aHNsKDUwLCAxMDAlLCA1NyUpOy0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctNDAwOmhzbCg0NiwgMTAwJSwgNTIlKTstLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTUwMDpoc2woNDQsIDEwMCUs''@;'; put 'put ''IDQ3JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy02MDA6aHNsKDQyLCAxMDAlLCA0MiUpOy0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctNzAwOmhzbCg0MCwgMTAwJSwgMzclKTstLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTgwMDpoc2woNDAsIDEwMCUsIDI2JSk7LS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLXllbGxvdy05MDA6aHNsKDQwLCAxMDAlLCAxOCUpOy0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctMTAwMDpoc2woNDAsIDEwMCUsIDEzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtNTA6aHNsKDY2LCAxMDAlLCA5NCUpOy0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTEwMDpoc2wo''@;'; put 'put ''NjYsIDk1JSwgODMlKTstLWNkcy1nbG9iYWwtY29sb3ItbGltZS0yMDA6aHNsKDY2LCA4NSUsIDcwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtMzAwOmhzbCg2NiwgODAlLCA1OCUpOy0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTQwMDpoc2woNjYsIDgwJSwgNDglKTstLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItbGltZS01MDA6aHNsKDY2LCA5MCUsIDQxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtNjAwOmhzbCg2NiwgOTAlLCAzNiUpOy0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTcwMDpoc2woNjYsIDEwMCUsIDI4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtODAwOmhzbCg2NiwgMTAw''@;'; put 'put ''JSwgMjIlKTstLWNkcy1nbG9iYWwtY29sb3ItbGltZS05MDA6aHNsKDY2LCAxMDAlLCAxMiUpOy0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTEwMDA6aHNsKDY2LCAxMDAlLCA3JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS01MDpoc2woMjUsIDEwMCUsIDk1JSk7LS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLXRhbmdlcmluZS0xMDA6aHNsKDI1LCAxMDAlLCA4OCUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtMjAwOmhzbCgyNSwgOTQlLCA3OCUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtMzAwOmhzbCgyNSwgMTAwJSwgNzIlKTstLWNkcy1nbG9iYWwtY29sb3ItdGFu''@;'; put 'put ''Z2VyaW5lLTQwMDpoc2woMjUsIDEwMCUsIDYyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS01MDA6aHNsKDI1LCAxMDAlLCA0OCUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtNjAwOmhzbCgyNSwgMTAwJSwgNDElKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTcw''@;'; put 'put ''MDpoc2woMjUsIDEwMCUsIDM0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS04MDA6aHNsKDI1LCAxMDAlLCAyNSUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtOTAwOmhzbCgyNSwgMTAwJSwgMTklKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTEwMDA6aHNsKDI1''@;'; put 'put ''LCAxMDAlLCAxNSUpOy0tY2RzLWdsb2JhbC1jb2xvci1tYWdlbnRhLTUwOmhzbCgzNDUsIDEwMCUsIDk1JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW1hZ2VudGEtMTAwOmhzbCgzNDUsIDEwMCUsIDg3JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW1hZ2VudGEtMjAwOmhzbCgzNDUsIDEwMCUsIDc5JSk7''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWNvbG9yLW1hZ2VudGEtMzAwOmhzbCgzNDUsIDEwMCUsIDcwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW1hZ2VudGEtNDAwOmhzbCgzNDUsIDEwMCUsIDYxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW1hZ2VudGEtNTAwOmhzbCgzNDUsIDgxJSwgNTAlKTstLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItbWFnZW50YS02MDA6aHNsKDM0NSwgODMlLCA0MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1tYWdlbnRhLTcwMDpoc2woMzQ1LCA5MSUsIDMxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW1hZ2VudGEtODAwOmhzbCgzNDUsIDEwMCUsIDI0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW1hZ2VudGEt''@;'; put 'put ''OTAwOmhzbCgzNDUsIDEwMCUsIDE5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW1hZ2VudGEtMTAwMDpoc2woMzQ1LCAxMDAlLCAxNSUpOy0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTUwOmhzbCgzMjQsIDEwMCUsIDk3JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXBpbmstMTAwOmhzbCgzMjQsIDk1JSwg''@;'; put 'put ''OTElKTstLWNkcy1nbG9iYWwtY29sb3ItcGluay0yMDA6aHNsKDMyNCwgODQlLCA4MSUpOy0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTMwMDpoc2woMzI0LCA3OCUsIDcwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXBpbmstNDAwOmhzbCgzMjQsIDc4JSwgNjIlKTstLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''cGluay01MDA6aHNsKDMyNCwgNjQlLCA1MSUpOy0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTYwMDpoc2woMzI0LCA4MCUsIDM5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXBpbmstNzAwOmhzbCgzMjQsIDEwMCUsIDMwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXBpbmstODAwOmhzbCgzMjQsIDEwMCUs''@;'; put 'put ''IDI0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXBpbmstOTAwOmhzbCgzMjQsIDEwMCUsIDE4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXBpbmstMTAwMDpoc2woMzI0LCAxMDAlLCAxNSUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktNTA6aHNsKDI4MiwgMyUsIDk3JSk7LS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLXdhcm0tZ3JheS0xMDA6aHNsKDI4MiwgMyUsIDkyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXdhcm0tZ3JheS0yMDA6aHNsKDI4MiwgMyUsIDg0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXdhcm0tZ3JheS0zMDA6aHNsKDI4MiwgMyUsIDc0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXdhcm0t''@;'; put 'put ''Z3JheS00MDA6aHNsKDI4MiwgMyUsIDYzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXdhcm0tZ3JheS01MDA6aHNsKDI4MiwgMyUsIDU0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXdhcm0tZ3JheS02MDA6aHNsKDI4MiwgMyUsIDQzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXdhcm0tZ3JheS03MDA6aHNs''@;'; put 'put ''KDI4MiwgMyUsIDM1JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXdhcm0tZ3JheS04MDA6aHNsKDI4MiwgMyUsIDI4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXdhcm0tZ3JheS05MDA6aHNsKDI4MiwgMyUsIDIwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXdhcm0tZ3JheS0xMDAwOmhzbCgyODIsIDMlLCAx''@;'; put 'put ''NCUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS01MDpoc2woMjM4LCAyMCUsIDk2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXNsYXRlLTEwMDpoc2woMjM4LCAyMCUsIDkxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXNsYXRlLTIwMDpoc2woMjM4LCAyMCUsIDgyJSk7LS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LXNsYXRlLTMwMDpoc2woMjM4LCAyMCUsIDczJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXNsYXRlLTQwMDpoc2woMjM4LCAyMCUsIDYzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXNsYXRlLTUwMDpoc2woMjM4LCAyMyUsIDU2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXNsYXRlLTYwMDpoc2woMjM4LCAy''@;'; put 'put ''NCUsIDQ5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXNsYXRlLTcwMDpoc2woMjM4LCAyOCUsIDM4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXNsYXRlLTgwMDpoc2woMjM4LCAyOCUsIDI5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXNsYXRlLTkwMDpoc2woMjM4LCAyOCUsIDIyJSk7LS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLXNsYXRlLTEwMDA6aHNsKDIzOCwgMjglLCAxNCUpOy0tY2RzLWdsb2JhbC1jb2xvci1pY2UtNTA6aHNsKDIxMSwgMTAwJSwgOTclKTstLWNkcy1nbG9iYWwtY29sb3ItaWNlLTEwMDpoc2woMjExLCA1OCUsIDkwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWljZS0yMDA6aHNsKDIxMSwg''@;'; put 'put ''NTMlLCA4MSUpOy0tY2RzLWdsb2JhbC1jb2xvci1pY2UtMzAwOmhzbCgyMTEsIDQ5JSwgNzAlKTstLWNkcy1nbG9iYWwtY29sb3ItaWNlLTQwMDpoc2woMjExLCA0NyUsIDYyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWljZS01MDA6aHNsKDIxMSwgNDclLCA1MyUpOy0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1pY2UtNjAwOmhzbCgyMTEsIDU2JSwgNDQlKTstLWNkcy1nbG9iYWwtY29sb3ItaWNlLTcwMDpoc2woMjExLCA2OSUsIDM0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWljZS04MDA6aHNsKDIxMSwgNjklLCAyNyUpOy0tY2RzLWdsb2JhbC1jb2xvci1pY2UtOTAwOmhzbCgyMTEsIDEwMCUsIDIw''@;'; put 'put ''JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWljZS0xMDAwOmhzbCgyMTEsIDEwMCUsIDE0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS01MDpoc2woMjExLCAyMCUsIDk2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS0xMDA6aHNsKDIxMSwgMjAlLCA5MCUpOy0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1jb29sLWdyYXktMjAwOmhzbCgyMTEsIDIwJSwgODElKTstLWNkcy1nbG9iYWwtY29sb3ItY29vbC1ncmF5LTMwMDpoc2woMjExLCAyMCUsIDcyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS00MDA6aHNsKDIxMSwgMjAlLCA2MSUpOy0tY2RzLWdsb2JhbC1jb2xvci1j''@;'; put 'put ''b29sLWdyYXktNTAwOmhzbCgyMTEsIDIwJSwgNTMlKTstLWNkcy1nbG9iYWwtY29sb3ItY29vbC1ncmF5LTYwMDpoc2woMjExLCAyMCUsIDQ0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS03MDA6aHNsKDIxMSwgMjMlLCAzNiUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb29sLWdyYXkt''@;'; put 'put ''ODAwOmhzbCgyMTEsIDMwJSwgMjglKTstLWNkcy1nbG9iYWwtY29sb3ItY29vbC1ncmF5LTkwMDpoc2woMjExLCA0MCUsIDIyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS0xMDAwOmhzbCgyMTEsIDYzJSwgMTQlKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTUwOmhzbCg0MSwgMjMl''@;'; put 'put ''LCA5NiUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW4tMTAwOmhzbCg0MSwgMjIlLCA5MSUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW4tMjAwOmhzbCg0MSwgMjclLCA4MiUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW4tMzAwOmhzbCg0MSwgMjMlLCA2OCUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW4t''@;'; put 'put ''NDAwOmhzbCg0MSwgMjMlLCA1OCUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW4tNTAwOmhzbCg0MSwgMjAlLCA0NyUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW4tNjAwOmhzbCg0MSwgMjAlLCA0MCUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW4tNzAwOmhzbCg0MSwgMjAlLCAzMiUpOy0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci10YW4tODAwOmhzbCg0MSwgMjMlLCAyNiUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW4tOTAwOmhzbCg0MSwgMjMlLCAyMSUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW4tMTAwMDpoc2woNDEsIDIyJSwgMTYlKTstLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTI1Omhz''@;'; put 'put ''bCgxOTgsIDMzJSwgOTklKTstLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwOmhzbCgxOTgsIDM2JSwgOTYlKTstLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMDpoc2woMTk4LCAyMCUsIDkxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDA6aHNs''@;'; put 'put ''KDE5OCwgMTQlLCA4MiUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwOmhzbCgxOTgsIDEwJSwgNzElKTstLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTQwMDpoc2woMTk4LCA5JSwgNTYlKTstLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwMDpoc2wo''@;'; put 'put ''MTk4LCAxMCUsIDQ2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDA6aHNsKDE5OCwgMTQlLCAzNiUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwOmhzbCgxOTgsIDE5JSwgMjglKTstLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMDpoc2wo''@;'; put 'put ''MTk4LCAyMyUsIDIzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi05MDA6aHNsKDE5OCwgMjglLCAxOCUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMDpoc2woMTk4LCAzMCUsIDE1JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMTAwOmhz''@;'; put 'put ''bCgyMDAsIDMxJSwgMTMlKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JheS0wOmhzbCgwLCAwJSwgMTAwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyYXktNTA6aHNsKDAsIDAlLCA5OCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmF5LTEwMDpoc2woMCwgMCUsIDk1JSk7LS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LWdyYXktMjAwOmhzbCgwLCAwJSwgOTElKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JheS0zMDA6aHNsKDAsIDAlLCA4NyUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmF5LTQwMDpoc2woMCwgMCUsIDgwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyYXktNTAwOmhzbCgwLCAwJSwgNzAlKTstLWNkcy1n''@;'; put 'put ''bG9iYWwtY29sb3ItZ3JheS02MDA6aHNsKDAsIDAlLCA1NSUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmF5LTcwMDpoc2woMCwgMCUsIDQwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyYXktODAwOmhzbCgwLCAwJSwgMjclKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JheS05MDA6aHNsKDAsIDAlLCAy''@;'; put 'put ''MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmF5LTEwMDA6aHNsKDAsIDAlLCAwJSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNv''@;'; put 'put ''bG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlv''@;'; put 'put ''bi05MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTQ1MDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibGFjayk7LS1jZHMtZ2xvYmFsLXR5cG9n''@;'; put 'put ''cmFwaHktZm9udC13ZWlnaHQtbGlnaHQ6MzAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXJlZ3VsYXI6NDAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LW1lZGl1bTo1MDA7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJv''@;'; put 'put ''bGQ6NjAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWJvbGQ6NjAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWV4dHJhYm9sZDo2MDA7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1zaXplLTA6Y2FsYygxMCAqIHZhcigtLWNkcy1pbnRlcm5h''@;'; put 'put ''bC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1zaXplLTE6Y2FsYygxMSAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1zaXplLTI6Y2FsYygxMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1zaXplLTM6Y2FsYygxMyAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1zaXplLTQ6Y2FsYygxNCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9n''@;'; put 'put ''cmFwaHktZm9udC1zaXplLTU6Y2FsYygxNiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1zaXplLTY6Y2FsYygyMCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1zaXpl''@;'; put 'put ''LTc6Y2FsYygyNCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1zaXplLTg6Y2FsYygzMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1zaXplLTk6Y2FsYyg0MCAqIHZh''@;'; put 'put ''cigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1mYW1pbHk6IkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNhbnMtc2VyaWY7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVhZGVyLWZvbnQtZmFtaWx5OiJDbGFyaXR5IENpdHkiLCAi''@;'; put 'put ''QXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1vbm9zcGFjZS1mb250LWZhbWlseTp1aS1tb25vc3BhY2UsIENvbnNvbGFzLCBNZW5sbywgTW9uYWNvLCBtb25vc3BhY2U7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQ6LjE0NzVl''@;'; put 'put ''bTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQ6LjE3MDNlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodDouNTE3ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwKTstLWNkcy1n''@;'; put 'put ''bG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkt''@;'; put 'put ''bGluay1jb2xvci12aXNpdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTcwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci12aXNpdGVkLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTEwMDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxp''@;'; put 'put ''bmstb24tY29sb3JiZzp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsYWNrKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZTpjYWxjKDE0ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0OjEu''@;'; put 'put ''NDI4NTcxNGVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmc6LS4wMDcxNDI4NmVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQ6NDAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC1zaXplOmNhbGMoNDAgKiB2''@;'; put 'put ''YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQ6MS4xZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1sZXR0ZXItc3BhY2luZzotLjAxMjVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5''@;'; put 'put ''LWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkaW5nLWZvbnQtc2l6ZTpjYWxjKDMyICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkaW5nLWxpbmUtaGVpZ2h0OjEuMTI1ZW07LS1jZHMtZ2xvYmFsLXR5''@;'; put 'put ''cG9ncmFwaHktaGVhZGluZy1sZXR0ZXItc3BhY2luZzotLjAxMjVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkaW5nLWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkbGluZS1mb250LXNpemU6Y2FsYygzMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2Fs''@;'; put 'put ''ZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVhZGxpbmUtbGluZS1oZWlnaHQ6MS4xMjVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkbGluZS1sZXR0ZXItc3BhY2luZzotLjAxMjVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkbGluZS1mb250LXdlaWdodDo1MDA7''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtZm9udC1zaXplOmNhbGMoMjQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWxpbmUtaGVpZ2h0OjEuMzMzMzMzZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGV0''@;'; put 'put ''dGVyLXNwYWNpbmc6LS4wMDgzMzMzM2VtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtc2l6ZTpjYWxjKDIwICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0OjEuMmVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmc6LS4wMWVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1''@;'; put 'put ''YnNlY3Rpb24tZm9udC1zaXplOmNhbGMoMTYgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQ6MS41ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1sZXR0ZXItc3BhY2luZzotLjAx''@;'; put 'put ''MjVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWZvbnQtc2l6ZTpjYWxjKDE2ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNz''@;'; put 'put ''YWdlLWxpbmUtaGVpZ2h0OjEuNWVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtbGV0dGVyLXNwYWNpbmc6LS4wMTI1ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1mb250LXdlaWdodDpjYWxjKDQwMCAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkp''@;'; put 'put ''Oy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemU6Y2FsYygxMyAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0OjEuMjMwNzdlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1z''@;'; put 'put ''ZWNvbmRhcnktbGV0dGVyLXNwYWNpbmc6LS4wMDc2OTJlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQ6NDAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplOmNhbGMoMTEgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykp''@;'; put 'put ''Oy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQ6MS40NTQ1NDVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nOi4wMTgxODJlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0OjQwMDstLWNk''@;'; put 'put ''cy1nbG9iYWwtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC1zaXplOmNhbGMoMTAgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1saW5lLWhlaWdodDoxLjJlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zbWFs''@;'; put 'put ''bGNhcHRpb24tbGV0dGVyLXNwYWNpbmc6LjA1ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1pbmZvLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWdsb2JhbC10''@;'; put 'put ''eXBvZ3JhcGh5LXN1Y2Nlc3MtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi04MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXdhcm5pbmctaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS05MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRhbmdlci1ob3Zl''@;'; put 'put ''cjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC04MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW5ldXRyYWwtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNhYmxlZDp2YXIoLS1jZHMtZ2xvYmFsLWNv''@;'; put 'put ''bG9yLWNvbnN0cnVjdGlvbi01MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc2FibGVkLWJ1dHRvbjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MDApOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZHVyYXRpb24taW5zdGFudDowczstLWNkcy1nbG9iYWwtYW5pbWF0''@;'; put 'put ''aW9uLWR1cmF0aW9uLXF1aWNrZXN0Oi4xczstLWNkcy1nbG9iYWwtYW5pbWF0aW9uLWR1cmF0aW9uLXF1aWNrZXI6LjE1czstLWNkcy1nbG9iYWwtYW5pbWF0aW9uLWR1cmF0aW9uLXF1aWNrOi4yczstLWNkcy1nbG9iYWwtYW5pbWF0aW9uLWR1cmF0aW9uLXNlY29uZGFyeTouM3M7LS1jZHMt''@;'; put 'put ''Z2xvYmFsLWFuaW1hdGlvbi1kdXJhdGlvbi1wcmltYXJ5Oi40czstLWNkcy1nbG9iYWwtYW5pbWF0aW9uLWR1cmF0aW9uLXNsb3c6LjVzOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZHVyYXRpb24tc2xvd2VyOi43czstLWNkcy1nbG9iYWwtYW5pbWF0aW9uLWR1cmF0aW9uLXNsb3dlc3Q6Ljhz''@;'; put 'put ''Oy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZWFzaW5nLXByaW1hcnk6Y3ViaWMtYmV6aWVyKDAsLjk5LDAsLjk5KTstLWNkcy1nbG9iYWwtYW5pbWF0aW9uLWVhc2luZy1zZWNvbmRhcnk6Y3ViaWMtYmV6aWVyKDAsIDEuNSwgLjUsIDEpOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZWFzaW5nLWxv''@;'; put 'put ''b3A6Y3ViaWMtYmV6aWVyKC4xNywgLjQsIC44LCAuNzkpOy0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMDpjYWxjKDQgKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0yMDA6Y2FsYygxMiAqICgxcmVt''@;'; put 'put ''IC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTMwMDo1MCU7LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDA6Y2FsYygxICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jZHMtYWxpYXMtb2JqZWN0''@;'; put 'put ''LWJvcmRlci13aWR0aC0yMDA6Y2FsYygyICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0zMDA6Y2FsYygzICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13''@;'; put 'put ''aWR0aC00MDA6Y2FsYyg0ICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3ItdGludDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3Itc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKTstLWNkcy1hbGlhcy1vYmplY3Qtc2hhZG93LTEwMDowIGNhbGMoKDEgLyB2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWJhc2UsIDIwKSkgKiAxcmVtKSBjYWxjKCgzIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpICogMXJlbSkgMCBoc2xhKDE5OCwgMzAlLCAxNSUsIC41KTstLWNkcy1hbGlhcy1vYmplY3Qtc2hhZG93LTIwMDowIGNhbGMoKDEgLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2Us''@;'; put 'put ''IDIwKSkgKiAxcmVtKSBjYWxjKCgzIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpICogMXJlbSkgMCBoc2xhKDE5OCwgMzAlLCAxNSUsIC4zKTstLWNkcy1hbGlhcy1vYmplY3Qtc2hhZG93LTMwMDowIGNhbGMoKDEgLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkgKiAxcmVtKSBj''@;'; put 'put ''YWxjKCgzIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpICogMXJlbSkgMCBoc2xhKDE5OCwgMzAlLCAxNSUsIC4yKTstLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0wOmhzbGEoMCwgMCUsIDAlLCAwKTstLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0xMDA6aHNsYSgwLCAwJSwgMCUs''@;'; put 'put ''IC4yKTstLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0yMDA6aHNsYSgwLCAwJSwgMCUsIC40KTstLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0zMDA6aHNsYSgwLCAwJSwgMCUsIC42KTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZTpIaWdobGlnaHQgc29saWQgMnB4''@;'; put 'put ''Oy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lLXdlYmtpdDo1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUtb2Zmc2V0OjFweDstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tdG91''@;'; put 'put ''Y2gtdGFyZ2V0OmNhbGMoMzYgKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0''@;'; put 'put ''aW9uLWJhY2tncm91bmQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13aGl0ZSk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1i''@;'; put 'put ''YWNrZ3JvdW5kLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03NSk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVy''@;'; put 'put ''YWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rp''@;'; put 'put ''b24tMjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1kaXNhYmxlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1i''@;'; put 'put ''bHVlLTcwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb29sLWdyYXktNTApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03NSk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtc2VsZWN0''@;'; put 'put ''ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13aGl0ZSk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtc2VsZWN0ZWQtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rp''@;'; put 'put ''b24tYmFja2dyb3VuZC1zaGFkZS1zZWxlY3RlZC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDAwKTstLWNk''@;'; put 'put ''cy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3Itc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24t''@;'; put 'put ''MzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtODAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1jbGljazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtOTAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTkwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8tc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTkwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWlu''@;'; put 'put ''dGVyYWN0aW9uLWluZm8tc2Vjb25kYXJ5LWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXN1Y2Nlc3MtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRl''@;'; put 'put ''cmFjdGlvbi1zdWNjZXNzLWNsaWNrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi05MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlv''@;'; put 'put ''bi1zdWNjZXNzLXNlY29uZGFyeS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTUwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24td2FybmluZy1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0''@;'; put 'put ''aW9uLXdhcm5pbmctY2xpY2s6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi05MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTkwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXdh''@;'; put 'put ''cm5pbmctc2Vjb25kYXJ5LWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1kYW5nZXItaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtODAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFu''@;'; put 'put ''Z2VyLWNsaWNrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTkwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWRhbmdlci1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLXNlY29uZGFy''@;'; put 'put ''eS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC01MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW5ldXRyYWwtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tbmV1dHJhbC1j''@;'; put 'put ''bGljazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1uZXV0cmFsLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1u''@;'; put 'put ''ZXV0cmFsLXNlY29uZGFyeS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWludmVyc2UtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtaW50ZXJhY3Rpb24taW52ZXJzZS1jbGljazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbnZlcnNlLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1hcHAtYmFja2dyb3VuZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yNSk7LS1jZHMtYWxpYXMtb2JqZWN0LW92ZXJsYXktYmFja2dyb3VuZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTstLWNkcy1hbGlhcy1vYmplY3Qtb3ZlcmxheS1iYWNr''@;'; put 'put ''ZHJvcC1iYWNrZ3JvdW5kOmhzbGEoMCwgMCUsIDAlLCAuNik7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC10aW50OnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtY29sb3ItY29uc3RydWN0aW9uLTUwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtZGFyazp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS01MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2U6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtaW52ZXJz''@;'; put 'put ''ZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2Utc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29u''@;'; put 'put ''dGFpbmVyLWJhY2tkcm9wLWJhY2tncm91bmQ6aHNsYSgwLCAwJSwgMTAwJSwgLjYpOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWluZm86dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1ibHVlLTcwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWluZm8tdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTApOy0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWFsaWFzLXN0YXR1''@;'; put 'put ''cy1zdWNjZXNzOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwKTstLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcy10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNTApOy0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''Z3JlZW4tODAwKTstLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZzp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTUwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTEwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmct''@;'; put 'put ''c2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS02MDApOy0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLWRhcms6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS04MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwKTst''@;'; put 'put ''LWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNTApOy0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXItc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtODAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLWRhcms6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1yZWQtOTAwKTstLWNkcy1hbGlhcy1zdGF0dXMtbmV1dHJhbDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTApOy0t''@;'; put 'put ''Y2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTcwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWRpc2Fi''@;'; put 'put ''bGVkLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNDAwKTstLWNkcy1hbGlhcy1zdGF0dXMtYWx0OnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItdmlvbGV0LTcwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWFsdC10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTYwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWFsdC1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC05MDApOy0tY2RzLWFsaWFzLXV0aWxpdHkt''@;'; put 'put ''Z3JheTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktZ3JheS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwKTstLWNkcy1hbGlhcy11dGlsaXR5LWdyYXktc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ibHVlLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwKTstLWNkcy1hbGlhcy11dGlsaXR5LWJs''@;'; put 'put ''dWUtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTgwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1saWdodC1ibHVlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0zMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktbGlnaHQtYmx1ZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''Ymx1ZS01MCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1saWdodC1ibHVlLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS02MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktZGFyay1ibHVlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtODAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWRh''@;'; put 'put ''cmstYmx1ZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtNTApOy0tY2RzLWFsaWFzLXV0aWxpdHktZGFyay1ibHVlLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtMTAwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ncmVlbjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LWdyZWVuLTcwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ncmVlbi10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNTApOy0tY2RzLWFsaWFzLXV0aWxpdHktZ3JlZW4tc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi04MDApOy0tY2RzLWFsaWFzLXV0aWxpdHkteWVs''@;'; put 'put ''bG93OnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXllbGxvdy10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMTAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXllbGxvdy1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJl''@;'; put 'put ''LTcwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1yZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXJlZC10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTUwKTstLWNkcy1hbGlhcy11dGlsaXR5LXJlZC1zaGFkZTp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLXJlZC04MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktdGFuZ2VyaW5lOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTQwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS10YW5nZXJpbmUtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS01MCk7LS1jZHMt''@;'; put 'put ''YWxpYXMtdXRpbGl0eS10YW5nZXJpbmUtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtNjAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXZpb2xldDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC02MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktdmlvbGV0LXRpbnQ6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNTApOy0tY2RzLWFsaWFzLXV0aWxpdHktdmlvbGV0LXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTgwMCk7LS1jZHMtYWxpYXMtdml6LWJvcmRlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMTAwKTst''@;'; put 'put ''LWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS02MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTEtYmx1ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNjAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0yOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItdmlvbGV0LTcwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMi12aW9sZXQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNjAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0zOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS04MDApOy0tY2RzLWFsaWFzLXZpei1nZW5l''@;'; put 'put ''cmFsLTMtYXF1YTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtODAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC00OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItNDAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC00LWxpbWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1saW1l''@;'; put 'put ''LTcwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXBpbmstNTAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC01LWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTgwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNjp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLWxpbWUtNzAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC02LWFxdWE6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTEwMDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTc6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci03MDApOy0tY2RzLWFsaWFzLXZp''@;'; put 'put ''ei1nZW5lcmFsLTctdmlvbGV0OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTgwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtODp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNjAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC04LWxpbWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1saW1lLTkwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtOTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtODAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC05LWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTA6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNjAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xMC1saW1lOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGltZS0xMDAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xMTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNjAwKTstLWNkcy1h''@;'; put 'put ''bGlhcy12aXotZ2VuZXJhbC0xMS1hcXVhOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS02MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTEyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtODAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xMi12aW9sZXQ6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci12aW9sZXQtMTAwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTM6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNDAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xMy12aW9sZXQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNzAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy12aXotZ2VuZXJhbC0xNDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTcwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTQtYmx1ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMTAwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTU6dmFyKC0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1waW5rLTcwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTUtYXF1YTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNzAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xNjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTYwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTYt''@;'; put 'put ''bGltZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtODAwKTstLWNkcy1hbGlhcy12aXotc2V2ZXJpdHktbmV1dHJhbDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS1zdWNjZXNzOnZhcigtLWNkcy1nbG9iYWwtY29s''@;'; put 'put ''b3ItZ3JlZW4tNzAwKTstLWNkcy1hbGlhcy12aXotc2V2ZXJpdHktd2FybmluZzp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy03MDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS13YXJuaW5nLWxpZ2h0OnZhcigtLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTQwMCk7LS1jZHMtYWxp''@;'; put 'put ''YXMtdml6LXNldmVyaXR5LWltbWVkaWF0ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS00MDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS1jcml0aWNhbDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS1mcmVlLXNwYWNl''@;'; put 'put ''LWZpbGw6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlhcy12aXotc2V2ZXJpdHktZnJlZS1zcGFjZS1ib3JkZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ibHVlLTUw''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVl''@;'; put 'put ''LTIwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTMwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVl''@;'; put 'put ''bnRpYWwtYmx1ZS01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTYwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS03MDA6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1ibHVlLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTgwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS05MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTkwMCk7LS1jZHMt''@;'; put 'put ''YWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS0xMDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0xMDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtNTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNTApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZp''@;'; put 'put ''b2xldC0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTIwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTMwMDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLXZpb2xldC0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0''@;'; put 'put ''LTUwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNzAwKTstLWNkcy1hbGlhcy12''@;'; put 'put ''aXotc2VxdWVudGlhbC12aW9sZXQtODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTgwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTkwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC05MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xl''@;'; put 'put ''dC0xMDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTEwMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTEwMDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLW9jaHJlLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS0zMDApOy0tY2Rz''@;'; put 'put ''LWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1v''@;'; put 'put ''Y2hyZS02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTcwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtODAwOnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtY29sb3Itb2NocmUtODAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS05MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS05MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTEwMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS0xMDAwKTst''@;'; put 'put ''LWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1hcXVhLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS01MCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1''@;'; put 'put ''YS0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTIwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTMwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1hcXVhLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTUwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTYwMCk7LS1jZHMtYWxpYXMtdml6''@;'; put 'put ''LXNlcXVlbnRpYWwtYXF1YS03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTgwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS05MDA6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1hcXVhLTkwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS0xMDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0xMDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi01MDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTUw''@;'; put 'put ''KTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0xMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTIwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVl''@;'; put 'put ''bnRpYWwtZ3JlZW4tMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi00MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTUwMDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTUwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi03''@;'; put 'put ''MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTgwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tOTAwKTstLWNkcy1hbGlhcy12aXotc2Vx''@;'; put 'put ''dWVudGlhbC1ncmVlbi0xMDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMTAwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTUwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtMTAwOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtY29sb3ItcmVkLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMzAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy12aXotc2VxdWVudGlhbC1yZWQtNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC01MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC02MDA6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1yZWQtNjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC04MDApOy0tY2Rz''@;'; put 'put ''LWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC05MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtOTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtMTAwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC0xMDAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLXZpb2xldC1h''@;'; put 'put ''cXVhLXYtMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTIwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy12aW9sZXQtYXF1YS12LTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0zMDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctdmlvbGV0LWFxdWEtdi00''@;'; put 'put ''MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNDAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLXZpb2xldC1hcXVhLXYtNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTUwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy12aW9sZXQtYXF1YS12LTYwMDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC02MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctdmlvbGV0LWFxdWEtdi03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLXZpb2xldC1hcXVhLW5ldXRyYWw6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci12aW9sZXQtNTApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctdmlvbGV0LWFxdWEtYS00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTQwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy12aW9sZXQtYXF1YS1hLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNv''@;'; put 'put ''bG9yLWFxdWEtNTAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLXZpb2xldC1hcXVhLWEtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS02MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctdmlvbGV0LWFxdWEtYS03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTcw''@;'; put 'put ''MCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy12aW9sZXQtYXF1YS1hLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtODAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLXZpb2xldC1hcXVhLWEtOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS05MDApOy0tY2RzLWFs''@;'; put 'put ''aWFzLXZpei1kaXZlcmdpbmctYmx1ZS1qYWRlLWItMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0zMDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1qYWRlLWItNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS00MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdp''@;'; put 'put ''bmctYmx1ZS1qYWRlLWItNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1qYWRlLWItNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS02MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1qYWRlLWIt''@;'; put 'put ''NzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1qYWRlLWItODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1qYWRlLW5ldXRyYWw6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1ibHVlLTUwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1qLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtMzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1qLTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWph''@;'; put 'put ''ZGUtNDAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1qLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNTAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1qLTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNjAwKTstLWNkcy1h''@;'; put 'put ''bGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1qLTcwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1qLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtODAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJn''@;'; put 'put ''aW5nLWJsdWUtZ3JlZW4tYi0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTMwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWdyZWVuLWItNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS00MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1ncmVl''@;'; put 'put ''bi1iLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4tYi02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTYwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWdyZWVuLWItNzAwOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1ncmVlbi1iLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtODAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4tbmV1dHJhbDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLWJsdWUtNTApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1ncmVlbi1nLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTMwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWdyZWVuLWctNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4t''@;'; put 'put ''NDAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4tZy01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1ncmVlbi1nLTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTYwMCk7LS1jZHMt''@;'; put 'put ''YWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWdyZWVuLWctNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4tZy04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi04MDApOy0tY2RzLWFsaWFzLXZpei1k''@;'; put 'put ''aXZlcmdpbmctZ3JlZW4teWVsbG93LXJlZC1nLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTIwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLWctMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMzAwKTstLWNkcy1hbGlhcy12aXot''@;'; put 'put ''ZGl2ZXJnaW5nLWdyZWVuLXllbGxvdy1yZWQtZy00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi00MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctZ3JlZW4teWVsbG93LXJlZC1nLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTUwMCk7LS1jZHMtYWxpYXMtdml6''@;'; put 'put ''LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLWctNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNjAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWdyZWVuLXllbGxvdy1yZWQtZy03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi03MDApOy0tY2RzLWFsaWFzLXZp''@;'; put 'put ''ei1kaXZlcmdpbmctZ3JlZW4teWVsbG93LXJlZC1uZXV0cmFsOnZhcigtLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTIwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLXItNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTQwMCk7LS1jZHMtYWxpYXMt''@;'; put 'put ''dml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLXItNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTUwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLXItNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTYwMCk7LS1jZHMtYWxpYXMtdml6''@;'; put 'put ''LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLXItNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLXItODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTgwMCk7LS1jZHMtYWxpYXMtdml6LWRp''@;'; put 'put ''dmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLXItOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTkwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13aGl0ZSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0yMDA6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''Y29uc3RydWN0aW9uLTkwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00NTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibGFjayk7LS1jZHMtYWxp''@;'; put 'put ''YXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1saWdodDozMDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1yZWd1bGFyOjQwMDstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LW1lZGl1bTo1MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1z''@;'; put 'put ''ZW1pYm9sZDo2MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1ib2xkOjYwMDstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWV4dHJhYm9sZDo2MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtMDpjYWxjKDEwICogdmFyKC0tY2RzLWludGVy''@;'; put 'put ''bmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0xOmNhbGMoMTEgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC1zaXplLTI6Y2FsYygxMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1j''@;'; put 'put ''ZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtMzpjYWxjKDEzICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS00OmNhbGMoMTQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktZm9udC1zaXplLTU6Y2FsYygxNiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtNjpjYWxjKDIwICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS03OmNh''@;'; put 'put ''bGMoMjQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC1zaXplLTg6Y2FsYygzMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtOTpjYWxjKDQwICogdmFyKC0tY2Rz''@;'; put 'put ''LWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5OiJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGVyLWZvbnQtZmFtaWx5OiJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5l''@;'; put 'put ''eHQiLCBzYW5zLXNlcmlmOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbW9ub3NwYWNlLWZvbnQtZmFtaWx5OnVpLW1vbm9zcGFjZSwgQ29uc29sYXMsIE1lbmxvLCBNb25hY28sIG1vbm9zcGFjZTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0Oi4xNDc1ZW07LS1jZHMtYWxp''@;'; put 'put ''YXMtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQ6LjE3MDNlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXgtaGVpZ2h0Oi41MTdlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1saW5rLWNvbG9yLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvci1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRl''@;'; put 'put ''ZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC03MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvci12aXNpdGVkLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTEwMDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1vbi1jb2xvcmJnOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3ItYmxhY2spOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemU6Y2FsYygxNCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0OjEuNDI4NTcxNGVtOy0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZzotLjAwNzE0Mjg2ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0OjQwMDstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC1zaXplOmNhbGMoNDAgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUt''@;'; put 'put ''MykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzcGxheS1saW5lLWhlaWdodDoxLjFlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktbGV0dGVyLXNwYWNpbmc6LS4wMTI1ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNwbGF5LWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LWhlYWRpbmctZm9udC1zaXplOmNhbGMoMzIgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGluZy1saW5lLWhlaWdodDoxLjEyNWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGluZy1sZXR0ZXItc3BhY2lu''@;'; put 'put ''ZzotLjAxMjVlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWhlYWRpbmctZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGxpbmUtZm9udC1zaXplOmNhbGMoMzIgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVh''@;'; put 'put ''ZGxpbmUtbGluZS1oZWlnaHQ6MS4xMjVlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWhlYWRsaW5lLWxldHRlci1zcGFjaW5nOi0uMDEyNWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGxpbmUtZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktdGl0bGUtZm9udC1z''@;'; put 'put ''aXplOmNhbGMoMjQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQ6MS4zMzMzMzNlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXRpdGxlLWxldHRlci1zcGFjaW5nOi0uMDA4MzMzMzNlbTstLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LXRpdGxlLWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC1zaXplOmNhbGMoMjAgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodDoxLjJlbTstLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmc6LS4wMWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXdlaWdodDo1MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtc2l6ZTpjYWxjKDE2ICogdmFyKC0tY2RzLWludGVy''@;'; put 'put ''bmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQ6MS41ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxldHRlci1zcGFjaW5nOi0uMDEyNWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXdl''@;'; put 'put ''aWdodDo1MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1tZXNzYWdlLWZvbnQtc2l6ZTpjYWxjKDE2ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LW1lc3NhZ2UtbGluZS1oZWlnaHQ6MS41ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1tZXNz''@;'; put 'put ''YWdlLWxldHRlci1zcGFjaW5nOi0uMDEyNWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbWVzc2FnZS1mb250LXdlaWdodDpjYWxjKDQwMCAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZTpjYWxjKDEz''@;'; put 'put ''ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodDoxLjIzMDc3ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmc6LS4wMDc2OTJlbTstLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LXNlY29uZGFyeS1mb250LXdlaWdodDo0MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZTpjYWxjKDExICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQ6MS40NTQ1NDVlbTst''@;'; put 'put ''LWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGV0dGVyLXNwYWNpbmc6LjAxODE4MmVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodDo0MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC1zaXplOmNhbGMoMTAgKiB2YXIoLS1j''@;'; put 'put ''ZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxpbmUtaGVpZ2h0OjEuMmVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxldHRlci1zcGFjaW5nOi4wNWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0''@;'; put 'put ''aW9uLWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWluZm8taG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTgwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWNjZXNzLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tODAwKTstLWNkcy1h''@;'; put 'put ''bGlhcy10eXBvZ3JhcGh5LXdhcm5pbmctaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS05MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGFuZ2VyLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTgwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1uZXV0cmFsLWhv''@;'; put 'put ''dmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTcwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQtYnV0dG9uOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwMCk7LS1jZHMtaW50ZXJuYWwtc2NhbGUtMTpjYWxjKCgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkgKiB2YXIoLS1jZHMtZ2xvYmFsLXNjYWxlLWxheW91dC1zcGFjZSkpOy0tY2RzLWludGVybmFsLXNjYWxlLTI6Y2FsYygoMXJl''@;'; put 'put ''bSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpICogdmFyKC0tY2RzLWdsb2JhbC1zY2FsZS1zcGFjZSkpOy0tY2RzLWludGVybmFsLXNjYWxlLTM6Y2FsYygoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpICogdmFyKC0tY2RzLWdsb2JhbC1zY2FsZS10eXBvZ3JhcGh5KSl9aHRtbHtm''@;'; put 'put ''b250LXNpemU6Y2FsYygodmFyKC0tY2RzLWdsb2JhbC1iYXNlKS8xNikqMTAwJSk7Ym94LXNpemluZzpib3JkZXItYm94IWltcG9ydGFudH0qLDphZnRlciw6YmVmb3Jle2JveC1zaXppbmc6aW5oZXJpdCFpbXBvcnRhbnR9W2Nkcy1iYXNlLWZvbnQ9IjE2Il17LS1jZHMtZ2xvYmFsLWJhc2U6''@;'; put 'put ''MTZ9W2Nkcy10aGVtZV17YmFja2dyb3VuZDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWFwcC1iYWNrZ3JvdW5kKTtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNTAwKX1bY2RzLWNvbnRyb2xdIDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItMjAwKX1bY2RzLWNvbnRyb2xdIDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItMjAwKX1bY2RzLWNvbnRyb2xdW19kaXNhYmxlZF17LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3It''@;'; put 'put ''MjAwOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpfWh0bWxbY2RzLWZvY3VzLXRyYXBde292ZXJmbG93OmhpZGRlbiFpbXBvcnRhbnQ7d2lkdGg6MTAwdnc7aGVpZ2h0OjEwMHZofVtjZHMtdGV4dF17Zm9udC1mYW1pbHk6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQt''@;'; put 'put ''ZmFtaWx5KTttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowfVtjZHMtdGV4dF1bY2RzLWxheW91dH49Z3JpZF06YWZ0ZXIsW2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj1ncmlkXTpiZWZvcmUsW2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXTphZnRlcixbY2RzLXRleHRdW2Nkcy1s''@;'; put 'put ''YXlvdXR+PWhvcml6b250YWxdOmJlZm9yZSxbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXTphZnRlcixbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXTpiZWZvcmV7ZGlzcGxheTpub25lfVtjZHMtdGV4dCo9ZGlzcGxheV0sW2Nkcy10ZXh0Kj1oZWFkaW5nXSxbY2RzLXRl''@;'; put 'put ''eHQqPWhlYWRsaW5lXSxbY2RzLXRleHQqPXNlY3Rpb25dLFtjZHMtdGV4dCo9c3Vic2VjdGlvbl0sW2Nkcy10ZXh0Kj10aXRsZV17Zm9udC1mYW1pbHk6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRlci1mb250LWZhbWlseSk7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3Jh''@;'; put 'put ''cGh5LWNvbG9yLTQwMCl9W2Nkcy10ZXh0Kj1ib2R5XSxbY2RzLXRleHQqPWNhcHRpb25dLFtjZHMtdGV4dCo9bWVzc2FnZV0sW2Nkcy10ZXh0Kj1zZWNvbmRhcnldLFtjZHMtdGV4dCo9c21hbGxjYXB0aW9uXXtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNTAwKX1b''@;'; put 'put ''Y2RzLXRleHQqPWlubGluZV17d2lkdGg6YXV0byFpbXBvcnRhbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fVtjZHMtdGV4dCo9ZGlzcGxheV17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1sZXR0ZXItc3Bh''@;'; put 'put ''Y2luZyl9W2Nkcy10ZXh0Kj1kaXNwbGF5XTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS1kaXNwbGF5LWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1kaXNwbGF5XTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1saW5l''@;'; put 'put ''LWhlaWdodCkgLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9aGVhZGluZ10sW2Nkcy10ZXh0Kj1oZWFkbGluZV17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkaW5nLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBv''@;'; put 'put ''Z3JhcGh5LWhlYWRpbmctZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkaW5nLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVhZGluZy1sZXR0ZXItc3BhY2luZyl9W2Nkcy10ZXh0''@;'; put 'put ''Kj1oZWFkaW5nXTpiZWZvcmUsW2Nkcy10ZXh0Kj1oZWFkbGluZV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCh2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVhZGluZy1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9aGVhZGluZ106YWZ0ZXIsW2Nkcy10ZXh0Kj1oZWFkbGluZV06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7''@;'; put 'put ''bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygo''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRpbmctbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXRpdGxlXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1sZXR0ZXItc3BhY2luZyl9''@;'; put 'put ''W2Nkcy10ZXh0Kj10aXRsZV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFw''@;'; put 'put ''aHktdGl0bGUtbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXRpdGxlXTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5''@;'; put 'put ''LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQpIC0gMWVt''@;'; put 'put ''KS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXNlY3Rpb25de2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhl''@;'; put 'put ''aWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpfVtjZHMtdGV4dCo9c2VjdGlvbl06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxh''@;'; put 'put ''eTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgKyAu''@;'; put 'put ''MDM3ZW0pfVtjZHMtdGV4dCo9c2VjdGlvbl06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5''@;'; put 'put ''cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXN1YnNl''@;'; put 'put ''Y3Rpb25de2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9n''@;'; put 'put ''cmFwaHktc3Vic2VjdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpfVtjZHMtdGV4dCo9c3Vic2VjdGlvbl06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3''@;'; put 'put ''aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4''@;'; put 'put ''dCo9c3Vic2VjdGlvbl06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNj''@;'; put 'put ''ZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWJvZHlde2ZvbnQtd2Vp''@;'; put 'put ''Z2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2lu''@;'; put 'put ''Zyk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQpfVtjZHMtdGV4dCo9Ym9keV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgKyAuMWVtKX1bY2RzLXRleHQqPWJvZHldOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0''@;'; put 'put ''aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNh''@;'; put 'put ''bGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSAtIC4wNDRlbSl9Ym9keVtjZHMtdGV4dCo9Ym9keV06YWZ0ZXIsYm9keVtjZHMtdGV4dCo9Ym9keV06YmVmb3Jle2NvbnRlbnQ6bm9uZX1bY2RzLXRleHQqPW1lc3NhZ2Vde2Zv''@;'; put 'put ''bnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1s''@;'; put 'put ''aW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtbGV0dGVyLXNwYWNpbmcpfVtjZHMtdGV4dCo9bWVzc2FnZV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2Fs''@;'; put 'put ''YygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9bWVzc2FnZV06YWZ0ZXJ7Y29udGVudDoi''@;'; put 'put ''IjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXNlY29uZGFyeV17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBo''@;'; put 'put ''eS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX1bY2RzLXRleHQqPXNlY29uZGFyeV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlw''@;'; put 'put ''b2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnldOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWln''@;'; put 'put ''aHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWln''@;'; put 'put ''aHQpKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWNhcHRpb25de2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXNpemUp''@;'; put 'put ''O2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5''@;'; put 'put ''LWNhcHRpb24tbGV0dGVyLXNwYWNpbmcpfVtjZHMtdGV4dCo9Y2FwdGlvbl06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxj''@;'; put 'put ''KCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9Y2FwdGlvbl06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFl''@;'; put 'put ''bSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBv''@;'; put 'put ''Z3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXNtYWxsY2FwdGlvbl17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxl''@;'; put 'put ''dHRlci1zcGFjaW5nKX1bY2RzLXRleHQqPXNtYWxsY2FwdGlvbl06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCh2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1zbWFsbGNhcHRpb25dOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygo''@;'; put 'put ''KCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHR+PWxpbmtde2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yKSFpbXBvcnRhbnQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSFpbXBv''@;'; put 'put ''cnRhbnQ7bGluZS1oZWlnaHQ6aW5oZXJpdCFpbXBvcnRhbnQ7Zm9udC1zaXplOmluaGVyaXQhaW1wb3J0YW50fVtjZHMtdGV4dH49bGlua106Zm9jdXN7b3V0bGluZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUpO291dGxpbmUtb2Zmc2V0OnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZS1vZmZzZXQpfVtjZHMtdGV4dH49bGlua106aG92ZXJ7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItaG92ZXIpIWltcG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOnZpc2l0ZWQ6bm90KFtjZHMtdGV4dH49''@;'; put 'put ''c3RhdGljXSksW2Nkcy10ZXh0fj1saW5rXVtjZHMtdGV4dH49dmlzaXRlZF17Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZCkhaW1wb3J0YW50fVtjZHMtdGV4dH49bGlua106dmlzaXRlZDpub3QoW2Nkcy10ZXh0fj1zdGF0aWNdKTpob3Zlcixb''@;'; put 'put ''Y2RzLXRleHR+PWxpbmtdW2Nkcy10ZXh0fj12aXNpdGVkXTpob3Zlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci12aXNpdGVkLWhvdmVyKSFpbXBvcnRhbnR9QG1lZGlhICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCl7W2Nkcy10ZXh0PWxp''@;'; put 'put ''bmtdOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lLXdlYmtpdCl9fVtjZHMtdGV4dH49Y29kZV17Y29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpO2ZvbnQtZmFtaWx5Om1vbm9zcGFjZX1bY2RzLWRpdmlkZXJde2Rpc3Bs''@;'; put 'put ''YXk6YmxvY2s7aGVpZ2h0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7b3ZlcmZsb3c6aGlkZGVuO2JveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpIDAgMCAwIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEw''@;'; put 'put ''MCkgaW5zZXR9W2Nkcy10ZXh0fj1leHRyYWJvbGRde2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1leHRyYWJvbGQpIWltcG9ydGFudH1bY2RzLXRleHR+PWJvbGRde2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250''@;'; put 'put ''LXdlaWdodC1ib2xkKSFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1zZW1pYm9sZF17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKSFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1tZWRpdW1de2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS1mb250LXdlaWdodC1tZWRpdW0pIWltcG9ydGFudH1bY2RzLXRleHR+PXJlZ3VsYXJde2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1yZWd1bGFyKSFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1saWdodF17Zm9udC13ZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWxpZ2h0KSFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1jYXBpdGFsaXplXXt0ZXh0LXRyYW5zZm9ybTpjYXBpdGFsaXplIWltcG9ydGFudH1bY2RzLXRleHR+PXVwcGVyY2FzZV17dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLXRleHR+PWxvd2VyY2FzZV17dGV4dC10cmFuc2Zvcm06bG93ZXJjYXNlIWltcG9ydGFudH1bY2RzLXRleHR+PXRydW5jYXRlXXtvdmVyZmxvdzpoaWRkZW4haW1wb3J0YW50O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXMhaW1wb3J0YW50O3doaXRlLXNwYWNlOm5vd3JhcCFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy10ZXh0fj10cnVuY2F0ZV06YWZ0ZXIsW2Nkcy10ZXh0fj10cnVuY2F0ZV06YmVmb3Jle2NvbnRlbnQ6bm9uZX1bY2RzLXRleHR+PWp1c3RpZnlde3RleHQtYWxpZ246anVzdGlmeSFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1sZWZ0XXt0ZXh0LWFsaWduOmxlZnQhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtdGV4dH49cmlnaHRde3RleHQtYWxpZ246cmlnaHQhaW1wb3J0YW50fVtjZHMtdGV4dH49Y2VudGVyXXt0ZXh0LWFsaWduOmNlbnRlciFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1tb25vc3BhY2Vde2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tb25vc3BhY2Ut''@;'; put 'put ''Zm9udC1mYW1pbHkpfVtjZHMtdGV4dH49bGhlXXtwYWRkaW5nOi4wNXB4IDB9W2Nkcy10ZXh0fj1saGVdOmJlZm9yZXtjb250ZW50OiIiO21hcmdpbi10b3A6LS4xMjRlbTtkaXNwbGF5OmJsb2NrO2hlaWdodDowfVtjZHMtdGV4dH49bGhlXTphZnRlcntjb250ZW50OiIiO21hcmdpbi1ib3R0''@;'; put 'put ''b206LS4yMjFlbTtkaXNwbGF5OmJsb2NrO2hlaWdodDowfVtjZHMtbGF5b3V0fj1kaXNhYmxlLWxoZV06YWZ0ZXIsW2Nkcy1sYXlvdXR+PWRpc2FibGUtbGhlXTpiZWZvcmUsW2Nkcy10ZXh0fj1kaXNhYmxlLWxoZV06YWZ0ZXIsW2Nkcy10ZXh0fj1kaXNhYmxlLWxoZV06YmVmb3Jle2NvbnRl''@;'; put 'put ''bnQ6bm9uZX1bY2RzLXRleHQqPWgwXSxbY2RzLXRleHQqPWgxXSxbY2RzLXRleHQqPWgyXSxbY2RzLXRleHQqPWgzXSxbY2RzLXRleHQqPWg0XSxbY2RzLXRleHQqPWg1XSxbY2RzLXRleHQqPWg2XXtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVhZGVyLWZvbnQt''@;'; put 'put ''ZmFtaWx5LCAiQ2xhcml0eSBDaXR5IiwgIkF2ZW5pciBOZXh0Iiwgc2Fucy1zZXJpZik7Zm9udC1zaXplOjJyZW07Zm9udC13ZWlnaHQ6MjAwO2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci00MDApO2xpbmUtaGVpZ2h0OjEuMmVtO2xldHRlci1zcGFjaW5nOi0uMDEy''@;'; put 'put ''NWVtfVtjZHMtdGV4dCo9aDBdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgY2FsYygoMS4yZW0gLSAxZW0pLzIpKSotMSkgKyAu''@;'; put 'put ''MDM3ZW0pfVtjZHMtdGV4dCo9aDBdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3Jh''@;'; put 'put ''cGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKDEuMmVtIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWgxXSxbY2RzLXRleHQqPWgyXSxbY2RzLXRleHQqPWgzXSxbY2RzLXRleHQqPWg0XSxbY2Rz''@;'; put 'put ''LXRleHQqPWg1XSxbY2RzLXRleHQqPWg2XXtmb250LXNpemU6MS42cmVtO2xpbmUtaGVpZ2h0OjEuNWVtO2xldHRlci1zcGFjaW5nOi0uMDE1NmVtfVtjZHMtdGV4dCo9aDFdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNh''@;'; put 'put ''bGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgLjI1ZW0pKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1oMV06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgLjI1ZW0pKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1oMl0s''@;'; put 'put ''W2Nkcy10ZXh0Kj1oM10sW2Nkcy10ZXh0Kj1oNF0sW2Nkcy10ZXh0Kj1oNV0sW2Nkcy10ZXh0Kj1oNl17Zm9udC1zaXplOjEuNHJlbTtsaW5lLWhlaWdodDoxLjcxNDNlbTtsZXR0ZXItc3BhY2luZzotLjAxNzg1N2VtfVtjZHMtdGV4dCo9aDJdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6''@;'; put 'put ''YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgY2FsYygoMS43MTQzZW0gLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9aDJdOmFmdGVye2NvbnRlbnQ6IiI7ZGlz''@;'; put 'put ''cGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5''@;'; put 'put ''cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKDEuNzE0M2VtIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWgzXSxbY2RzLXRleHQqPWg0XSxbY2RzLXRleHQqPWg1XSxbY2RzLXRleHQqPWg2XXtmb250LXNpemU6MS4xcmVtO2xpbmUtaGVpZ2h0OjEuMDkwOWVtO2xldHRl''@;'; put 'put ''ci1zcGFjaW5nOi0uMDEzNjM2ZW19W2Nkcy10ZXh0Kj1oM106YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjA5MDll''@;'; put 'put ''bSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1oM106YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygoMS4wOTA5ZW0gLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9aDRdLFtjZHMtdGV4dCo9aDVdLFtjZHMtdGV4dCo9''@;'; put 'put ''aDZde2ZvbnQtc2l6ZTouOXJlbTtsaW5lLWhlaWdodDoxLjMzMzMzM2VtO2xldHRlci1zcGFjaW5nOi0uMDExMTExZW19W2Nkcy10ZXh0Kj1oNF06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjMzMzMzM2VtIC0gMWVtKS8yKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWg0XTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0g''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCgxLjMzMzMzM2VtIC0gMWVtKS8yKSkqLTEp''@;'; put 'put ''IC0gLjA0NGVtKX1bY2RzLXRleHQqPWg1XSxbY2RzLXRleHQqPWg2XXtmb250LXNpemU6LjhyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNWVtO2xldHRlci1zcGFjaW5nOi0uMDEyNWVtfVtjZHMtdGV4dCo9aDVdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVp''@;'; put 'put ''Z2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgLjI1ZW0pKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1oNV06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7''@;'; put 'put ''bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgLjI1ZW0p''@;'; put 'put ''Ki0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1oNl17Zm9udC1zaXplOi43cmVtO2ZvbnQtd2VpZ2h0OjUwMDtsZXR0ZXItc3BhY2luZzotLjAzMTI1ZW19W2Nkcy10ZXh0Kj1oNl06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206''@;'; put 'put ''Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyAuMjVlbSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWg2XTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyAuMjVlbSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXAw''@;'; put 'put ''XSxbY2RzLXRleHQqPXAxXXtmb250LXNpemU6MS4ycmVtO2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNTAwKTtsaW5lLWhlaWdodDoxLjE2NjY3ZW07bGV0dGVyLXNwYWNpbmc6LS4wMDgzMzNlbX1bY2RzLXRleHQqPXAwXTpiZWZvcmV7''@;'; put 'put ''Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKDEuMTY2NjdlbSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1wMF06''@;'; put 'put ''YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAt''@;'; put 'put ''IHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygoMS4xNjY2N2VtIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXAxXXtmb250LXNpemU6LjdyZW07Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7bGluZS1o''@;'; put 'put ''ZWlnaHQ6MS43MTQyOWVtO2xldHRlci1zcGFjaW5nOi0uMDE0Mjg2ZW19W2Nkcy10ZXh0Kj1wMV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhl''@;'; put 'put ''aWdodCkgKyBjYWxjKCgxLjcxNDI5ZW0gLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9cDFdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkt''@;'; put 'put ''dG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKDEuNzE0MjllbSAtIDFlbSkvMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1wMl0sW2Nk''@;'; put 'put ''cy10ZXh0Kj1wM10sW2Nkcy10ZXh0Kj1wNF0sW2Nkcy10ZXh0Kj1wNV17Zm9udC1zaXplOi42NXJlbTtmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7bGluZS1oZWlnaHQ6MS44NDYxNWVtO2xldHRlci1zcGFjaW5nOi0uMDA3Njky''@;'; put 'put ''ZW19W2Nkcy10ZXh0Kj1wMl06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjg0NjE1ZW0gLSAxZW0pLzIpKSotMSkg''@;'; put 'put ''KyAuMDM3ZW0pfVtjZHMtdGV4dCo9cDJdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBv''@;'; put 'put ''Z3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKDEuODQ2MTVlbSAtIDFlbSkvMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1wM10sW2Nkcy10ZXh0Kj1wNF0sW2Nkcy10ZXh0Kj1wNV17Zm9udC13ZWlnaHQ6''@;'; put 'put ''NDAwfVtjZHMtdGV4dCo9cDNdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgY2FsYygoMS44NDYxNWVtIC0gMWVtKS8yKSkqLTEp''@;'; put 'put ''ICsgLjAzN2VtKX1bY2RzLXRleHQqPXAzXTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlw''@;'; put 'put ''b2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCgxLjg0NjE1ZW0gLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9cDRdLFtjZHMtdGV4dCo9cDVde2ZvbnQtc2l6ZTouNnJlbTtmb250LXdlaWdo''@;'; put 'put ''dDo2MDA7bGluZS1oZWlnaHQ6MmVtO2xldHRlci1zcGFjaW5nOi0uMDA4MzMzZW19W2Nkcy10ZXh0Kj1wNF06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3At''@;'; put 'put ''Z2FwLWhlaWdodCkgKyAuNWVtKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9cDRdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQp''@;'; put 'put ''IC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIC41ZW0pKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1wNV17Zm9udC13ZWlnaHQ6NDAwfVtjZHMtdGV4dCo9cDVdOmJlZm9yZXtj''@;'; put 'put ''b250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgLjVlbSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXA1XTphZnRlcntjb250ZW50OiIiO2Rpc3Bs''@;'; put 'put ''YXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBv''@;'; put 'put ''Z3JhcGh5LXgtaGVpZ2h0KSkgKyAuNWVtKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9cDZdLFtjZHMtdGV4dCo9cDddLFtjZHMtdGV4dCo9cDhde2ZvbnQtc2l6ZTouNTVyZW07Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci00MDApO2xp''@;'; put 'put ''bmUtaGVpZ2h0OjEuMDkwOTA5ZW07bGV0dGVyLXNwYWNpbmc6LjAxODE4MmVtfVtjZHMtdGV4dCo9cDZdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdh''@;'; put 'put ''cC1oZWlnaHQpICsgY2FsYygoMS4wOTA5MDllbSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1wNl06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dy''@;'; put 'put ''YXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygoMS4wOTA5MDllbSAtIDFlbSkvMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1w''@;'; put 'put ''N10sW2Nkcy10ZXh0Kj1wOF17Zm9udC13ZWlnaHQ6NDAwfVtjZHMtdGV4dCo9cDddOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsg''@;'; put 'put ''Y2FsYygoMS4wOTA5MDllbSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1wN106YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2Fw''@;'; put 'put ''LWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygoMS4wOTA5MDllbSAtIDFlbSkvMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1wOF17Zm9udC1zaXpl''@;'; put 'put ''Oi41cmVtO2xpbmUtaGVpZ2h0OjEuMmVtO2xldHRlci1zcGFjaW5nOi4wMmVtfVtjZHMtdGV4dCo9cDhdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdh''@;'; put 'put ''cC1oZWlnaHQpICsgY2FsYygoMS4yZW0gLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9cDhdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkt''@;'; put 'put ''dG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKDEuMmVtIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX06aG9zdCw6cm9vdHstLVwzYjQgMTp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14eHhzKTstLVwzYjQgMjp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14eHMpOy0tXDNiNCAzOnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXhzKTstLVwzYjQgNDp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS1zbSk7''@;'; put 'put ''LS1cM2I0IDU6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UtbWQpOy0tXDNiNCA2OnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLWxnKTstLVwzYjQgNzp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14bCk7LS1cM2I0IDg6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3Bh''@;'; put 'put ''Y2UteHhsKTstLVwzYjQgOTp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14eHhsKX1bY2RzLWxheW91dCo9ImFsaWduOmZpbGwiXT4qe2ZsZXgtZ3JvdzoxIWltcG9ydGFudDtmbGV4LWJhc2lzOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0id3JhcDpub25lIl17ZmxleC13cmFwOm5v''@;'; put 'put ''d3JhcCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl17ZmxleC1ncm93OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ246c2hyaW5rIl17ZmxleC1zaHJpbms6MSFpbXBvcnRhbnQ7ZmxleC1ncm93OjAhaW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOjU3NnB4''@;'; put 'put ''KXtbY2RzLWxheW91dCo9ImFsaWduQHhzOmZpbGwiXT4qe2ZsZXgtZ3JvdzoxIWltcG9ydGFudDtmbGV4LWJhc2lzOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0id3JhcEB4czpub25lIl17ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpzdHJldGNo''@;'; put 'put ''Il17ZmxleC1ncm93OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6c2hyaW5rIl17ZmxleC1zaHJpbms6MSFpbXBvcnRhbnQ7ZmxleC1ncm93OjAhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpmaWxsIl0+KntmbGV4''@;'; put 'put ''LWdyb3c6MSFpbXBvcnRhbnQ7ZmxleC1iYXNpczowIWltcG9ydGFudH1bY2RzLWxheW91dH49IndyYXBAc206bm9uZSJde2ZsZXgtd3JhcDpub3dyYXAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206c3RyZXRjaCJde2ZsZXgtZ3JvdzoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9''@;'; put 'put ''ImFsaWduQHNtOnNocmluayJde2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50O2ZsZXgtZ3JvdzowIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpe1tjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6ZmlsbCJdPip7ZmxleC1ncm93OjEhaW1wb3J0YW50O2ZsZXgtYmFzaXM6MCFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJ3cmFwQG1kOm5vbmUiXXtmbGV4LXdyYXA6bm93cmFwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImFsaWduQG1kOnN0cmV0Y2giXXtmbGV4LWdyb3c6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpzaHJpbmsiXXtmbGV4LXNocmluazoxIWltcG9y''@;'; put 'put ''dGFudDtmbGV4LWdyb3c6MCFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpmaWxsIl0+KntmbGV4LWdyb3c6MSFpbXBvcnRhbnQ7ZmxleC1iYXNpczowIWltcG9ydGFudH1bY2RzLWxheW91dH49IndyYXBAbGc6bm9uZSJde2ZsZXgt''@;'; put 'put ''d3JhcDpub3dyYXAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6c3RyZXRjaCJde2ZsZXgtZ3JvdzoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImFsaWduQGxnOnNocmluayJde2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50O2ZsZXgtZ3JvdzowIWltcG9ydGFudH19QG1lZGlhICht''@;'; put 'put ''aW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91dCo9ImFsaWduQHhsOmZpbGwiXT4qe2ZsZXgtZ3JvdzoxIWltcG9ydGFudDtmbGV4LWJhc2lzOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0id3JhcEB4bDpub25lIl17ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJh''@;'; put 'put ''bGlnbkB4bDpzdHJldGNoIl17ZmxleC1ncm93OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6c2hyaW5rIl17ZmxleC1zaHJpbms6MSFpbXBvcnRhbnQ7ZmxleC1ncm93OjAhaW1wb3J0YW50fX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF17ZGlzcGxheTpmbGV4O2ZsZXgtZGly''@;'; put 'put ''ZWN0aW9uOnJvdztmbGV4LXdyYXA6d3JhcDtqdXN0aWZ5LWl0ZW1zOmZsZXgtc3RhcnQ7YWxpZ24taXRlbXM6ZmxleC1zdGFydDt3aWR0aDoxMDAlO21hcmdpbjowO21pbi1oZWlnaHQ6MH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdLFtjZHMtbGF5''@;'; put 'put ''b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dH49dmVydGljYWxdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLXRleHRde3dpZHRoOmluaXRpYWwhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17YWxpZ24taXRlbXM6Zmxl''@;'; put 'put ''eC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmJvdHRvbSJde2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMt''@;'; put 'put ''bGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVu''@;'; put 'put ''dDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50''@;'; put 'put ''ZXI7YWxpZ24tY29udGVudDpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9Im9yZGVyOnJldmVyc2UiXXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9''@;'; put 'put ''ImFsaWduOnZlcnRpY2FsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJde2p1c3RpZnktY29udGVudDpzdHJl''@;'; put 'put ''dGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJl''@;'; put 'put ''dGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMt''@;'; put 'put ''bGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91''@;'; put 'put ''dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl17bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxh''@;'; put 'put ''eW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpib3R0b20iXXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6''@;'; put 'put ''b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJde21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp0b3AiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Ym90dG9tIl17YWxpZ24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpsZWZ0Il17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpyaWdodCJde2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250''@;'; put 'put ''ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmNlbnRlciJde2FsaWduLWl0''@;'; put 'put ''ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0ib3JkZXJAeHM6cmV2ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1zdHJldGNoIl17anVz''@;'; put 'put ''dGlmeS1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpob3Jpem9udGFsLXN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6c3Ry''@;'; put 'put ''ZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5''@;'; put 'put ''b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl0s''@;'; put 'put ''W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1jZW50ZXIiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxp''@;'; put 'put ''Z25AeHM6dG9wIl17YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHhzOmJvdHRvbSJde2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6cmlnaHQi''@;'; put 'put ''XXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJhbGlnbkBzbTp0b3AiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Ym90dG9tIl17YWxpZ24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJh''@;'; put 'put ''bGlnbkBzbTpsZWZ0Il17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpyaWdodCJde2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWdu''@;'; put 'put ''QHNtOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49''@;'; put 'put ''aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0ib3JkZXJAc206cmV2ZXJzZSJde2Zs''@;'; put 'put ''ZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9u''@;'; put 'put ''dGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLXN0cmV0Y2giXT4qe2ZsZXgtZ3Jvdzox''@;'; put 'put ''fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206c3RyZXRj''@;'; put 'put ''aCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1jZW50ZXIiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dG9wIl17YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHNtOmJvdHRvbSJde2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1A''@;'; put 'put ''bWVkaWEgKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp0b3AiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Ym90dG9tIl17YWxpZ24taXRl''@;'; put 'put ''bXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpsZWZ0Il17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpyaWdodCJde2p1c3RpZnktY29udGVudDpm''@;'; put 'put ''bGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOmhvcml6''@;'; put 'put ''b250YWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5''@;'; put 'put ''b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0ib3JkZXJAbWQ6cmV2ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dmVydGljYWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxp''@;'; put 'put ''Z24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLXN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtj''@;'; put 'put ''ZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0i''@;'; put 'put ''YWxpZ25AbWQ6dmVydGljYWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1jZW50''@;'; put 'put ''ZXIiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dG9wIl17YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2Rz''@;'; put 'put ''LWxheW91dCo9ImFsaWduQG1kOmJvdHRvbSJde2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJhbGlnbkBtZDpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpe1tjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dG9wIl17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49''@;'; put 'put ''aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmJvdHRvbSJde2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6bGVmdCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9u''@;'; put 'put ''dGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6cmlnaHQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXJ9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7''@;'; put 'put ''YWxpZ24tY29udGVudDpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9Im9yZGVyQGxnOnJldmVyc2UiXXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9''@;'; put 'put ''ImFsaWduQGxnOnZlcnRpY2FsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtc3RyZXRjaCJde2p1c3RpZnktY29udGVu''@;'; put 'put ''dDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6aG9yaXpvbnRhbC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnN0cmV0Y2giXXthbGln''@;'; put 'put ''bi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWdu''@;'; put 'put ''QGxnOmNlbnRlciJdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJdLFtjZHMtbGF5b3V0''@;'; put 'put ''fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtY2VudGVyIl17bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOnRvcCJd''@;'; put 'put ''e2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpib3R0b20iXXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOnJpZ2h0Il17bWFyZ2luLWxl''@;'; put 'put ''ZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6bGVmdCJde21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9''@;'; put 'put ''ImFsaWduQHhsOnRvcCJde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpib3R0b20iXXthbGlnbi1pdGVtczpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmxl''@;'; put 'put ''ZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGlj''@;'; put 'put ''YWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFs''@;'; put 'put ''XVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJvcmRlckB4bDpyZXZlcnNlIl17ZmxleC1kaXJlY3Rp''@;'; put 'put ''b246cm93LXJldmVyc2V9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJhbGlnbkB4bDpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtc3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpzdHJldGNoIl0+KntmbGV4''@;'; put 'put ''LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9y''@;'; put 'put ''aXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpob3Jpem9udGFsLWNlbnRlciJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp0b3AiXXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Ym90dG9tIl17YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49''@;'; put 'put ''aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fVtjZHMtbGF5b3V0''@;'; put 'put ''fj12ZXJ0aWNhbF17d2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSxbY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXtqdXN0aWZ5LWNvbnRl''@;'; put 'put ''bnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpib3R0b20iXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXXthbGlnbi1pdGVtczpmbGV4LWVuZH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj12''@;'; put 'put ''ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMt''@;'; put 'put ''bGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9Im9yZGVyOnJldmVyc2UiXXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZX1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1zdHJldGNoIl17anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtc3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaH1bY2RzLWxheW91''@;'; put 'put ''dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49''@;'; put 'put ''dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxh''@;'; put 'put ''eW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXttYXJnaW4tYm90dG9t''@;'; put 'put ''OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpib3R0b20iXXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG99W2Nk''@;'; put 'put ''cy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0b31AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dG9wIl17anVzdGlmeS1jb250ZW50OmZsZXgtc3Rh''@;'; put 'put ''cnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Ym90dG9tIl17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5''@;'; put 'put ''b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOnJpZ2h0Il17YWxpZ24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49''@;'; put 'put ''dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpob3Jpem9udGFsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRl''@;'; put 'put ''cn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJvcmRlckB4czpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtc3RyZXRjaCJde2p1c3RpZnktY29udGVu''@;'; put 'put ''dDpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOnZlcnRpY2FsLXN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmhvcml6b250YWwtc3RyZXRjaCJde2FsaWduLWl0ZW1z''@;'; put 'put ''OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6c3RyZXRjaCJdPip7''@;'; put 'put ''ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHhzOmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp2ZXJ0aWNhbC1jZW50ZXIiXXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRv''@;'; put 'put ''fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdPltj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dG9wIl17bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Ym90dG9tIl17bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMt''@;'; put 'put ''bGF5b3V0Kj0iYWxpZ25AeHM6cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXtbY2RzLWxheW91dH49dmVydGljYWxdW2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJhbGlnbkBzbTp0b3AiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpib3R0b20iXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iYWxpZ25Ac206bGVmdCJde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206cmlnaHQiXXthbGlnbi1pdGVtczpmbGV4LWVuZH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp2ZXJ0''@;'; put 'put ''aWNhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmhvcml6b250YWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHNt''@;'; put 'put ''OmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9Im9yZGVyQHNtOnJldmVyc2UiXXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZX1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJhbGlnbkBzbTp2ZXJ0aWNhbC1zdHJldGNoIl17anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwtc3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxh''@;'; put 'put ''eW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpzdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHNtOnZl''@;'; put 'put ''cnRpY2FsLWNlbnRlciJde21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHNtOmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLWNl''@;'; put 'put ''bnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp0b3AiXXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpib3R0b20iXXttYXJn''@;'; put 'put ''aW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHNtOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0b319''@;'; put 'put ''QG1lZGlhIChtaW4td2lkdGg6OTkycHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnRvcCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOmJvdHRvbSJde2p1c3RpZnkt''@;'; put 'put ''Y29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpsZWZ0Il17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpyaWdodCJde2FsaWduLWl0ZW1zOmZsZXgtZW5k''@;'; put 'put ''fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnZlcnRpY2FsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpj''@;'; put 'put ''ZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0ib3JkZXJAbWQ6cmV2ZXJzZSJde2ZsZXgtZGly''@;'; put 'put ''ZWN0aW9uOmNvbHVtbi1yZXZlcnNlfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnZlcnRpY2FsLXN0cmV0Y2giXXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp2ZXJ0aWNhbC1z''@;'; put 'put ''dHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnN0cmV0Y2giXXth''@;'; put 'put ''bGlnbi1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpjZW50ZXIi''@;'; put 'put ''XSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dmVydGljYWwtY2VudGVyIl17bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0sW2Nkcy1sYXlv''@;'; put 'put ''dXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQG1kOmhvcml6b250YWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQG1kOnRvcCJde21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQG1kOmJvdHRvbSJde21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQG1kOnJpZ2h0Il17bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxd''@;'; put 'put ''PltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6bGVmdCJde21hcmdpbi1yaWdodDphdXRvfX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnRvcCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0''@;'; put 'put ''fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmJvdHRvbSJde2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpsZWZ0Il17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxd''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpyaWdodCJde2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0iYWxpZ25AbGc6aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0ib3JkZXJAbGc6cmV2ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLXN0cmV0Y2giXXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2Rz''@;'; put 'put ''LWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp2ZXJ0aWNhbC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpob3Jpem9udGFsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNofVtjZHMt''@;'; put 'put ''bGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtj''@;'; put 'put ''ZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dmVydGljYWwtY2VudGVyIl17bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49''@;'; put 'put ''dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFs''@;'; put 'put ''aWduQGxnOnRvcCJde21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOmJvdHRvbSJde21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWdu''@;'; put 'put ''QGxnOnJpZ2h0Il17bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6bGVmdCJde21hcmdpbi1yaWdodDphdXRvfX1AbWVkaWEgKG1pbi13aWR0aDoxNDQwcHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFs''@;'; put 'put ''aWduQHhsOnRvcCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmJvdHRvbSJde2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDps''@;'; put 'put ''ZWZ0Il17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpyaWdodCJde2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnZlcnRpY2FsLWNlbnRlciJd''@;'; put 'put ''e2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Y2VudGVyIl17YWxp''@;'; put 'put ''Z24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0ib3JkZXJAeGw6cmV2ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWdu''@;'; put 'put ''QHhsOnZlcnRpY2FsLXN0cmV0Y2giXXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGln''@;'; put 'put ''bkB4bDpob3Jpem9udGFsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNh''@;'; put 'put ''bF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtY2VudGVy''@;'; put 'put ''Il17bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtY2VudGVyIl17YWxpZ24t''@;'; put 'put ''c2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOnRvcCJde21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOmJvdHRvbSJde21hcmdpbi10b3A6YXV0byFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOnJpZ2h0Il17bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6bGVmdCJde21hcmdpbi1yaWdodDphdXRvfX1bY2RzLWxheW91dH49''@;'; put 'put ''Z3JpZF17ZGlzcGxheTpncmlkO2FsaWduLWl0ZW1zOnN0YXJ0O2FsaWduLWNvbnRlbnQ6c3RhcnQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCh2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1ncmlkLWNvbHMpLDFmcik7d2lkdGg6MTAwJX1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91''@;'; put 'put ''dCo9cm93c117Z3JpZC10ZW1wbGF0ZS1yb3dzOnJlcGVhdCgxMixhdXRvKX1bY2RzLWxheW91dH49Z3JpZF0+W2Nkcy1sYXlvdXQqPXJvd117YWxpZ24tc2VsZjpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iY29sczphdXRvIl17Z3JpZC1hdXRvLWZsb3c6Y29sdW1u''@;'; put 'put ''O2dyaWQtdGVtcGxhdGUtY29sdW1uczppbml0aWFsfVtjZHMtbGF5b3V0Kj0iY29sc0AiXT4qe2dyaWQtY29sdW1uOnNwYW4gdmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtZ3JpZC1jb2xzKX1bY2RzLWxheW91dCo9ImNvbEAiXXtncmlkLWNvbHVtbjpzcGFuIDEyfVtjZHMtbGF5b3V0Kj0iY29s''@;'; put 'put ''czoxIl0+KntncmlkLWNvbHVtbjpzcGFuIDEvc3BhbiAxfVtjZHMtbGF5b3V0Kj0icm93czoxIl0+KntncmlkLXJvdzpzcGFuIDEvc3BhbiAxfVtjZHMtbGF5b3V0Kj0iY29sczoyIl0+KntncmlkLWNvbHVtbjpzcGFuIDIvc3BhbiAyfVtjZHMtbGF5b3V0Kj0icm93czoyIl0+KntncmlkLXJv''@;'; put 'put ''dzpzcGFuIDIvc3BhbiAyfVtjZHMtbGF5b3V0Kj0iY29sczozIl0+KntncmlkLWNvbHVtbjpzcGFuIDMvc3BhbiAzfVtjZHMtbGF5b3V0Kj0icm93czozIl0+KntncmlkLXJvdzpzcGFuIDMvc3BhbiAzfVtjZHMtbGF5b3V0Kj0iY29sczo0Il0+KntncmlkLWNvbHVtbjpzcGFuIDQvc3BhbiA0''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0icm93czo0Il0+KntncmlkLXJvdzpzcGFuIDQvc3BhbiA0fVtjZHMtbGF5b3V0Kj0iY29sczo1Il0+KntncmlkLWNvbHVtbjpzcGFuIDUvc3BhbiA1fVtjZHMtbGF5b3V0Kj0icm93czo1Il0+KntncmlkLXJvdzpzcGFuIDUvc3BhbiA1fVtjZHMtbGF5b3V0Kj0iY29s''@;'; put 'put ''czo2Il0+KntncmlkLWNvbHVtbjpzcGFuIDYvc3BhbiA2fVtjZHMtbGF5b3V0Kj0icm93czo2Il0+KntncmlkLXJvdzpzcGFuIDYvc3BhbiA2fVtjZHMtbGF5b3V0Kj0iY29sczo3Il0+KntncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0icm93czo3Il0+KntncmlkLXJv''@;'; put 'put ''dzpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0iY29sczo4Il0+KntncmlkLWNvbHVtbjpzcGFuIDgvc3BhbiA4fVtjZHMtbGF5b3V0Kj0icm93czo4Il0+KntncmlkLXJvdzpzcGFuIDgvc3BhbiA4fVtjZHMtbGF5b3V0Kj0iY29sczo5Il0+KntncmlkLWNvbHVtbjpzcGFuIDkvc3BhbiA5''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0icm93czo5Il0+KntncmlkLXJvdzpzcGFuIDkvc3BhbiA5fVtjZHMtbGF5b3V0Kj0iY29sczoxMCJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0Kj0icm93czoxMCJdPip7Z3JpZC1yb3c6c3BhbiAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iY29sczoxMSJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMS9zcGFuIDExfVtjZHMtbGF5b3V0Kj0icm93czoxMSJdPip7Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExfVtjZHMtbGF5b3V0Kj0iY29sczoxMiJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMi9zcGFuIDEyfVtjZHMtbGF5b3V0Kj0icm93''@;'; put 'put ''czoxMiJdPip7Z3JpZC1yb3c6c3BhbiAxMi9zcGFuIDEyfVtjZHMtbGF5b3V0Kj0iY29sOjEiXXtncmlkLWNvbHVtbjpzcGFuIDEvc3BhbiAxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzoxIl17Z3JpZC1yb3c6c3BhbiAxL3NwYW4gMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6''@;'; put 'put ''MiJde2dyaWQtY29sdW1uOnNwYW4gMi9zcGFuIDIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OjIiXXtncmlkLXJvdzpzcGFuIDIvc3BhbiAyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDozIl17Z3JpZC1jb2x1bW46c3BhbiAzL3NwYW4gMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJyb3c6MyJde2dyaWQtcm93OnNwYW4gMy9zcGFuIDMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOjQiXXtncmlkLWNvbHVtbjpzcGFuIDQvc3BhbiA0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzo0Il17Z3JpZC1yb3c6c3BhbiA0L3NwYW4gNCFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJjb2w6NSJde2dyaWQtY29sdW1uOnNwYW4gNS9zcGFuIDUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OjUiXXtncmlkLXJvdzpzcGFuIDUvc3BhbiA1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDo2Il17Z3JpZC1jb2x1bW46c3BhbiA2L3NwYW4gNiFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJyb3c6NiJde2dyaWQtcm93OnNwYW4gNi9zcGFuIDYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOjciXXtncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzo3Il17Z3JpZC1yb3c6c3BhbiA3L3NwYW4gNyFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJjb2w6OCJde2dyaWQtY29sdW1uOnNwYW4gOC9zcGFuIDghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OjgiXXtncmlkLXJvdzpzcGFuIDgvc3BhbiA4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDo5Il17Z3JpZC1jb2x1bW46c3BhbiA5L3NwYW4gOSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6OSJde2dyaWQtcm93OnNwYW4gOS9zcGFuIDkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOjEwIl17Z3JpZC1jb2x1bW46c3BhbiAxMC9zcGFuIDEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzoxMCJde2dyaWQtcm93OnNwYW4gMTAvc3Bh''@;'; put 'put ''biAxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6MTEiXXtncmlkLWNvbHVtbjpzcGFuIDExL3NwYW4gMTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OjExIl17Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDoxMiJde2dyaWQtY29s''@;'; put 'put ''dW1uOnNwYW4gMTIvc3BhbiAxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6MTIiXXtncmlkLXJvdzpzcGFuIDEyL3NwYW4gMTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOnN0YXJ0LTEiXXtncmlkLWNvbHVtbi1zdGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDpl''@;'; put 'put ''bmQtMSJde2dyaWQtY29sdW1uLWVuZDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzpzdGFydC0xIl17Z3JpZC1yb3ctc3RhcnQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6ZW5kLTEiXXtncmlkLXJvdy1lbmQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6c3RhcnQt''@;'; put 'put ''MiJde2dyaWQtY29sdW1uLXN0YXJ0OjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOmVuZC0yIl17Z3JpZC1jb2x1bW4tZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OnN0YXJ0LTIiXXtncmlkLXJvdy1zdGFydDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzplbmQt''@;'; put 'put ''MiJde2dyaWQtcm93LWVuZDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDpzdGFydC0zIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6ZW5kLTMiXXtncmlkLWNvbHVtbi1lbmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6c3RhcnQt''@;'; put 'put ''MyJde2dyaWQtcm93LXN0YXJ0OjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OmVuZC0zIl17Z3JpZC1yb3ctZW5kOjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOnN0YXJ0LTQiXXtncmlkLWNvbHVtbi1zdGFydDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDplbmQtNCJd''@;'; put 'put ''e2dyaWQtY29sdW1uLWVuZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzpzdGFydC00Il17Z3JpZC1yb3ctc3RhcnQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6ZW5kLTQiXXtncmlkLXJvdy1lbmQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6c3RhcnQtNSJde2dy''@;'; put 'put ''aWQtY29sdW1uLXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOmVuZC01Il17Z3JpZC1jb2x1bW4tZW5kOjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OnN0YXJ0LTUiXXtncmlkLXJvdy1zdGFydDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzplbmQtNSJde2dy''@;'; put 'put ''aWQtcm93LWVuZDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDpzdGFydC02Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6ZW5kLTYiXXtncmlkLWNvbHVtbi1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6c3RhcnQtNiJde2dy''@;'; put 'put ''aWQtcm93LXN0YXJ0OjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OmVuZC02Il17Z3JpZC1yb3ctZW5kOjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOnN0YXJ0LTciXXtncmlkLWNvbHVtbi1zdGFydDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDplbmQtNyJde2dyaWQt''@;'; put 'put ''Y29sdW1uLWVuZDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzpzdGFydC03Il17Z3JpZC1yb3ctc3RhcnQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6ZW5kLTciXXtncmlkLXJvdy1lbmQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6c3RhcnQtOCJde2dyaWQtY29s''@;'; put 'put ''dW1uLXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOmVuZC04Il17Z3JpZC1jb2x1bW4tZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OnN0YXJ0LTgiXXtncmlkLXJvdy1zdGFydDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzplbmQtOCJde2dyaWQtcm93''@;'; put 'put ''LWVuZDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDpzdGFydC05Il17Z3JpZC1jb2x1bW4tc3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6ZW5kLTkiXXtncmlkLWNvbHVtbi1lbmQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6c3RhcnQtOSJde2dyaWQtcm93''@;'; put 'put ''LXN0YXJ0OjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OmVuZC05Il17Z3JpZC1yb3ctZW5kOjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOnN0YXJ0LTEwIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOmVuZC0xMCJde2dyaWQtY29s''@;'; put 'put ''dW1uLWVuZDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6c3RhcnQtMTAiXXtncmlkLXJvdy1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6ZW5kLTEwIl17Z3JpZC1yb3ctZW5kOjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDpzdGFydC0xMSJde2dyaWQt''@;'; put 'put ''Y29sdW1uLXN0YXJ0OjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDplbmQtMTEiXXtncmlkLWNvbHVtbi1lbmQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OnN0YXJ0LTExIl17Z3JpZC1yb3ctc3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OmVuZC0xMSJd''@;'; put 'put ''e2dyaWQtcm93LWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6c3RhcnQtMTIiXXtncmlkLWNvbHVtbi1zdGFydDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6ZW5kLTEyIl17Z3JpZC1jb2x1bW4tZW5kOjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzpzdGFy''@;'; put 'put ''dC0xMiJde2dyaWQtcm93LXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzplbmQtMTIiXXtncmlkLXJvdy1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOnN0YXJ0LTEzIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29s''@;'; put 'put ''OmVuZC0xMyJde2dyaWQtY29sdW1uLWVuZDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6c3RhcnQtMTMiXXtncmlkLXJvdy1zdGFydDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6ZW5kLTEzIl17Z3JpZC1yb3ctZW5kOjEzIWltcG9ydGFudH1bY2RzLWxheW91dH49Z3Jp''@;'; put 'put ''ZF1bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2FsaWduLWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde2p1c3RpZnktY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpib3R0b20iXXthbGln''@;'; put 'put ''bi1jb250ZW50OmVuZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1j''@;'; put 'put ''b250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNo''@;'; put 'put ''Il17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVy''@;'; put 'put ''O2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246Y2Vu''@;'; put 'put ''dGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpe1tjZHMtbGF5b3V0Kj0iY29sc0B4czoxIl0+KntncmlkLWNvbHVtbjpzcGFuIDEvc3Bh''@;'; put 'put ''biAxfVtjZHMtbGF5b3V0Kj0icm93c0B4czoxIl0+KntncmlkLXJvdzpzcGFuIDEvc3BhbiAxfVtjZHMtbGF5b3V0Kj0iY29sc0B4czoyIl0+KntncmlkLWNvbHVtbjpzcGFuIDIvc3BhbiAyfVtjZHMtbGF5b3V0Kj0icm93c0B4czoyIl0+KntncmlkLXJvdzpzcGFuIDIvc3BhbiAyfVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0iY29sc0B4czozIl0+KntncmlkLWNvbHVtbjpzcGFuIDMvc3BhbiAzfVtjZHMtbGF5b3V0Kj0icm93c0B4czozIl0+KntncmlkLXJvdzpzcGFuIDMvc3BhbiAzfVtjZHMtbGF5b3V0Kj0iY29sc0B4czo0Il0+KntncmlkLWNvbHVtbjpzcGFuIDQvc3BhbiA0fVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0icm93c0B4czo0Il0+KntncmlkLXJvdzpzcGFuIDQvc3BhbiA0fVtjZHMtbGF5b3V0Kj0iY29sc0B4czo1Il0+KntncmlkLWNvbHVtbjpzcGFuIDUvc3BhbiA1fVtjZHMtbGF5b3V0Kj0icm93c0B4czo1Il0+KntncmlkLXJvdzpzcGFuIDUvc3BhbiA1fVtjZHMtbGF5b3V0Kj0iY29sc0B4''@;'; put 'put ''czo2Il0+KntncmlkLWNvbHVtbjpzcGFuIDYvc3BhbiA2fVtjZHMtbGF5b3V0Kj0icm93c0B4czo2Il0+KntncmlkLXJvdzpzcGFuIDYvc3BhbiA2fVtjZHMtbGF5b3V0Kj0iY29sc0B4czo3Il0+KntncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0icm93c0B4czo3Il0+''@;'; put 'put ''KntncmlkLXJvdzpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0iY29sc0B4czo4Il0+KntncmlkLWNvbHVtbjpzcGFuIDgvc3BhbiA4fVtjZHMtbGF5b3V0Kj0icm93c0B4czo4Il0+KntncmlkLXJvdzpzcGFuIDgvc3BhbiA4fVtjZHMtbGF5b3V0Kj0iY29sc0B4czo5Il0+KntncmlkLWNv''@;'; put 'put ''bHVtbjpzcGFuIDkvc3BhbiA5fVtjZHMtbGF5b3V0Kj0icm93c0B4czo5Il0+KntncmlkLXJvdzpzcGFuIDkvc3BhbiA5fVtjZHMtbGF5b3V0Kj0iY29sc0B4czoxMCJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0Kj0icm93c0B4czoxMCJdPip7Z3JpZC1yb3c6''@;'; put 'put ''c3BhbiAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0Kj0iY29sc0B4czoxMSJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMS9zcGFuIDExfVtjZHMtbGF5b3V0Kj0icm93c0B4czoxMSJdPip7Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExfVtjZHMtbGF5b3V0Kj0iY29sc0B4czoxMiJdPip7Z3JpZC1jb2x1''@;'; put 'put ''bW46c3BhbiAxMi9zcGFuIDEyfVtjZHMtbGF5b3V0Kj0icm93c0B4czoxMiJdPip7Z3JpZC1yb3c6c3BhbiAxMi9zcGFuIDEyfX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjEiXT4qe2dyaWQtY29sdW1uOnNwYW4gMS9zcGFuIDF9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJyb3dzQHNtOjEiXT4qe2dyaWQtcm93OnNwYW4gMS9zcGFuIDF9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjIiXT4qe2dyaWQtY29sdW1uOnNwYW4gMi9zcGFuIDJ9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjIiXT4qe2dyaWQtcm93OnNwYW4gMi9zcGFuIDJ9W2Nkcy1sYXlvdXQqPSJjb2xzQHNt''@;'; put 'put ''OjMiXT4qe2dyaWQtY29sdW1uOnNwYW4gMy9zcGFuIDN9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjMiXT4qe2dyaWQtcm93OnNwYW4gMy9zcGFuIDN9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjQiXT4qe2dyaWQtY29sdW1uOnNwYW4gNC9zcGFuIDR9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjQiXT4q''@;'; put 'put ''e2dyaWQtcm93OnNwYW4gNC9zcGFuIDR9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjUiXT4qe2dyaWQtY29sdW1uOnNwYW4gNS9zcGFuIDV9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjUiXT4qe2dyaWQtcm93OnNwYW4gNS9zcGFuIDV9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjYiXT4qe2dyaWQtY29s''@;'; put 'put ''dW1uOnNwYW4gNi9zcGFuIDZ9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjYiXT4qe2dyaWQtcm93OnNwYW4gNi9zcGFuIDZ9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjciXT4qe2dyaWQtY29sdW1uOnNwYW4gNy9zcGFuIDd9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjciXT4qe2dyaWQtcm93OnNwYW4g''@;'; put 'put ''Ny9zcGFuIDd9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjgiXT4qe2dyaWQtY29sdW1uOnNwYW4gOC9zcGFuIDh9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjgiXT4qe2dyaWQtcm93OnNwYW4gOC9zcGFuIDh9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjkiXT4qe2dyaWQtY29sdW1uOnNwYW4gOS9zcGFu''@;'; put 'put ''IDl9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjkiXT4qe2dyaWQtcm93OnNwYW4gOS9zcGFuIDl9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjEwIl0+KntncmlkLWNvbHVtbjpzcGFuIDEwL3NwYW4gMTB9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjEwIl0+KntncmlkLXJvdzpzcGFuIDEwL3NwYW4gMTB9''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjExIl0+KntncmlkLWNvbHVtbjpzcGFuIDExL3NwYW4gMTF9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjExIl0+KntncmlkLXJvdzpzcGFuIDExL3NwYW4gMTF9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjEyIl0+KntncmlkLWNvbHVtbjpzcGFuIDEyL3NwYW4g''@;'; put 'put ''MTJ9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjEyIl0+KntncmlkLXJvdzpzcGFuIDEyL3NwYW4gMTJ9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dCo9ImNvbHNAbWQ6MSJdPip7Z3JpZC1jb2x1bW46c3BhbiAxL3NwYW4gMX1bY2RzLWxheW91dCo9InJvd3NAbWQ6MSJdPip7''@;'; put 'put ''Z3JpZC1yb3c6c3BhbiAxL3NwYW4gMX1bY2RzLWxheW91dCo9ImNvbHNAbWQ6MiJdPip7Z3JpZC1jb2x1bW46c3BhbiAyL3NwYW4gMn1bY2RzLWxheW91dCo9InJvd3NAbWQ6MiJdPip7Z3JpZC1yb3c6c3BhbiAyL3NwYW4gMn1bY2RzLWxheW91dCo9ImNvbHNAbWQ6MyJdPip7Z3JpZC1jb2x1''@;'; put 'put ''bW46c3BhbiAzL3NwYW4gM31bY2RzLWxheW91dCo9InJvd3NAbWQ6MyJdPip7Z3JpZC1yb3c6c3BhbiAzL3NwYW4gM31bY2RzLWxheW91dCo9ImNvbHNAbWQ6NCJdPip7Z3JpZC1jb2x1bW46c3BhbiA0L3NwYW4gNH1bY2RzLWxheW91dCo9InJvd3NAbWQ6NCJdPip7Z3JpZC1yb3c6c3BhbiA0''@;'; put 'put ''L3NwYW4gNH1bY2RzLWxheW91dCo9ImNvbHNAbWQ6NSJdPip7Z3JpZC1jb2x1bW46c3BhbiA1L3NwYW4gNX1bY2RzLWxheW91dCo9InJvd3NAbWQ6NSJdPip7Z3JpZC1yb3c6c3BhbiA1L3NwYW4gNX1bY2RzLWxheW91dCo9ImNvbHNAbWQ6NiJdPip7Z3JpZC1jb2x1bW46c3BhbiA2L3NwYW4g''@;'; put 'put ''Nn1bY2RzLWxheW91dCo9InJvd3NAbWQ6NiJdPip7Z3JpZC1yb3c6c3BhbiA2L3NwYW4gNn1bY2RzLWxheW91dCo9ImNvbHNAbWQ6NyJdPip7Z3JpZC1jb2x1bW46c3BhbiA3L3NwYW4gN31bY2RzLWxheW91dCo9InJvd3NAbWQ6NyJdPip7Z3JpZC1yb3c6c3BhbiA3L3NwYW4gN31bY2RzLWxh''@;'; put 'put ''eW91dCo9ImNvbHNAbWQ6OCJdPip7Z3JpZC1jb2x1bW46c3BhbiA4L3NwYW4gOH1bY2RzLWxheW91dCo9InJvd3NAbWQ6OCJdPip7Z3JpZC1yb3c6c3BhbiA4L3NwYW4gOH1bY2RzLWxheW91dCo9ImNvbHNAbWQ6OSJdPip7Z3JpZC1jb2x1bW46c3BhbiA5L3NwYW4gOX1bY2RzLWxheW91dCo9''@;'; put 'put ''InJvd3NAbWQ6OSJdPip7Z3JpZC1yb3c6c3BhbiA5L3NwYW4gOX1bY2RzLWxheW91dCo9ImNvbHNAbWQ6MTAiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTAvc3BhbiAxMH1bY2RzLWxheW91dCo9InJvd3NAbWQ6MTAiXT4qe2dyaWQtcm93OnNwYW4gMTAvc3BhbiAxMH1bY2RzLWxheW91dCo9ImNv''@;'; put 'put ''bHNAbWQ6MTEiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTEvc3BhbiAxMX1bY2RzLWxheW91dCo9InJvd3NAbWQ6MTEiXT4qe2dyaWQtcm93OnNwYW4gMTEvc3BhbiAxMX1bY2RzLWxheW91dCo9ImNvbHNAbWQ6MTIiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTIvc3BhbiAxMn1bY2RzLWxheW91dCo9''@;'; put 'put ''InJvd3NAbWQ6MTIiXT4qe2dyaWQtcm93OnNwYW4gMTIvc3BhbiAxMn19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXtbY2RzLWxheW91dCo9ImNvbHNAbGc6MSJdPip7Z3JpZC1jb2x1bW46c3BhbiAxL3NwYW4gMX1bY2RzLWxheW91dCo9InJvd3NAbGc6MSJdPip7Z3JpZC1yb3c6c3BhbiAx''@;'; put 'put ''L3NwYW4gMX1bY2RzLWxheW91dCo9ImNvbHNAbGc6MiJdPip7Z3JpZC1jb2x1bW46c3BhbiAyL3NwYW4gMn1bY2RzLWxheW91dCo9InJvd3NAbGc6MiJdPip7Z3JpZC1yb3c6c3BhbiAyL3NwYW4gMn1bY2RzLWxheW91dCo9ImNvbHNAbGc6MyJdPip7Z3JpZC1jb2x1bW46c3BhbiAzL3NwYW4g''@;'; put 'put ''M31bY2RzLWxheW91dCo9InJvd3NAbGc6MyJdPip7Z3JpZC1yb3c6c3BhbiAzL3NwYW4gM31bY2RzLWxheW91dCo9ImNvbHNAbGc6NCJdPip7Z3JpZC1jb2x1bW46c3BhbiA0L3NwYW4gNH1bY2RzLWxheW91dCo9InJvd3NAbGc6NCJdPip7Z3JpZC1yb3c6c3BhbiA0L3NwYW4gNH1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImNvbHNAbGc6NSJdPip7Z3JpZC1jb2x1bW46c3BhbiA1L3NwYW4gNX1bY2RzLWxheW91dCo9InJvd3NAbGc6NSJdPip7Z3JpZC1yb3c6c3BhbiA1L3NwYW4gNX1bY2RzLWxheW91dCo9ImNvbHNAbGc6NiJdPip7Z3JpZC1jb2x1bW46c3BhbiA2L3NwYW4gNn1bY2RzLWxheW91dCo9''@;'; put 'put ''InJvd3NAbGc6NiJdPip7Z3JpZC1yb3c6c3BhbiA2L3NwYW4gNn1bY2RzLWxheW91dCo9ImNvbHNAbGc6NyJdPip7Z3JpZC1jb2x1bW46c3BhbiA3L3NwYW4gN31bY2RzLWxheW91dCo9InJvd3NAbGc6NyJdPip7Z3JpZC1yb3c6c3BhbiA3L3NwYW4gN31bY2RzLWxheW91dCo9ImNvbHNAbGc6''@;'; put 'put ''OCJdPip7Z3JpZC1jb2x1bW46c3BhbiA4L3NwYW4gOH1bY2RzLWxheW91dCo9InJvd3NAbGc6OCJdPip7Z3JpZC1yb3c6c3BhbiA4L3NwYW4gOH1bY2RzLWxheW91dCo9ImNvbHNAbGc6OSJdPip7Z3JpZC1jb2x1bW46c3BhbiA5L3NwYW4gOX1bY2RzLWxheW91dCo9InJvd3NAbGc6OSJdPip7''@;'; put 'put ''Z3JpZC1yb3c6c3BhbiA5L3NwYW4gOX1bY2RzLWxheW91dCo9ImNvbHNAbGc6MTAiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTAvc3BhbiAxMH1bY2RzLWxheW91dCo9InJvd3NAbGc6MTAiXT4qe2dyaWQtcm93OnNwYW4gMTAvc3BhbiAxMH1bY2RzLWxheW91dCo9ImNvbHNAbGc6MTEiXT4qe2dy''@;'; put 'put ''aWQtY29sdW1uOnNwYW4gMTEvc3BhbiAxMX1bY2RzLWxheW91dCo9InJvd3NAbGc6MTEiXT4qe2dyaWQtcm93OnNwYW4gMTEvc3BhbiAxMX1bY2RzLWxheW91dCo9ImNvbHNAbGc6MTIiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTIvc3BhbiAxMn1bY2RzLWxheW91dCo9InJvd3NAbGc6MTIiXT4q''@;'; put 'put ''e2dyaWQtcm93OnNwYW4gMTIvc3BhbiAxMn19QG1lZGlhIChtaW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91dCo9ImNvbHNAeGw6MSJdPip7Z3JpZC1jb2x1bW46c3BhbiAxL3NwYW4gMX1bY2RzLWxheW91dCo9InJvd3NAeGw6MSJdPip7Z3JpZC1yb3c6c3BhbiAxL3NwYW4gMX1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImNvbHNAeGw6MiJdPip7Z3JpZC1jb2x1bW46c3BhbiAyL3NwYW4gMn1bY2RzLWxheW91dCo9InJvd3NAeGw6MiJdPip7Z3JpZC1yb3c6c3BhbiAyL3NwYW4gMn1bY2RzLWxheW91dCo9ImNvbHNAeGw6MyJdPip7Z3JpZC1jb2x1bW46c3BhbiAzL3NwYW4gM31bY2RzLWxheW91dCo9''@;'; put 'put ''InJvd3NAeGw6MyJdPip7Z3JpZC1yb3c6c3BhbiAzL3NwYW4gM31bY2RzLWxheW91dCo9ImNvbHNAeGw6NCJdPip7Z3JpZC1jb2x1bW46c3BhbiA0L3NwYW4gNH1bY2RzLWxheW91dCo9InJvd3NAeGw6NCJdPip7Z3JpZC1yb3c6c3BhbiA0L3NwYW4gNH1bY2RzLWxheW91dCo9ImNvbHNAeGw6''@;'; put 'put ''NSJdPip7Z3JpZC1jb2x1bW46c3BhbiA1L3NwYW4gNX1bY2RzLWxheW91dCo9InJvd3NAeGw6NSJdPip7Z3JpZC1yb3c6c3BhbiA1L3NwYW4gNX1bY2RzLWxheW91dCo9ImNvbHNAeGw6NiJdPip7Z3JpZC1jb2x1bW46c3BhbiA2L3NwYW4gNn1bY2RzLWxheW91dCo9InJvd3NAeGw6NiJdPip7''@;'; put 'put ''Z3JpZC1yb3c6c3BhbiA2L3NwYW4gNn1bY2RzLWxheW91dCo9ImNvbHNAeGw6NyJdPip7Z3JpZC1jb2x1bW46c3BhbiA3L3NwYW4gN31bY2RzLWxheW91dCo9InJvd3NAeGw6NyJdPip7Z3JpZC1yb3c6c3BhbiA3L3NwYW4gN31bY2RzLWxheW91dCo9ImNvbHNAeGw6OCJdPip7Z3JpZC1jb2x1''@;'; put 'put ''bW46c3BhbiA4L3NwYW4gOH1bY2RzLWxheW91dCo9InJvd3NAeGw6OCJdPip7Z3JpZC1yb3c6c3BhbiA4L3NwYW4gOH1bY2RzLWxheW91dCo9ImNvbHNAeGw6OSJdPip7Z3JpZC1jb2x1bW46c3BhbiA5L3NwYW4gOX1bY2RzLWxheW91dCo9InJvd3NAeGw6OSJdPip7Z3JpZC1yb3c6c3BhbiA5''@;'; put 'put ''L3NwYW4gOX1bY2RzLWxheW91dCo9ImNvbHNAeGw6MTAiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTAvc3BhbiAxMH1bY2RzLWxheW91dCo9InJvd3NAeGw6MTAiXT4qe2dyaWQtcm93OnNwYW4gMTAvc3BhbiAxMH1bY2RzLWxheW91dCo9ImNvbHNAeGw6MTEiXT4qe2dyaWQtY29sdW1uOnNwYW4g''@;'; put 'put ''MTEvc3BhbiAxMX1bY2RzLWxheW91dCo9InJvd3NAeGw6MTEiXT4qe2dyaWQtcm93OnNwYW4gMTEvc3BhbiAxMX1bY2RzLWxheW91dCo9ImNvbHNAeGw6MTIiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTIvc3BhbiAxMn1bY2RzLWxheW91dCo9InJvd3NAeGw6MTIiXT4qe2dyaWQtcm93OnNwYW4g''@;'; put 'put ''MTIvc3BhbiAxMn19QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpe1tjZHMtbGF5b3V0Kj0iY29sQHhzOjEiXXtncmlkLWNvbHVtbjpzcGFuIDEvc3BhbiAxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czoxIl17Z3JpZC1yb3c6c3BhbiAxL3NwYW4gMSFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJjb2xAeHM6MiJde2dyaWQtY29sdW1uOnNwYW4gMi9zcGFuIDIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOjIiXXtncmlkLXJvdzpzcGFuIDIvc3BhbiAyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czozIl17Z3JpZC1jb2x1bW46c3BhbiAzL3NwYW4gMyFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6MyJde2dyaWQtcm93OnNwYW4gMy9zcGFuIDMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOjQiXXtncmlkLWNvbHVtbjpzcGFuIDQvc3BhbiA0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czo0Il17Z3JpZC1yb3c6c3BhbiA0''@;'; put 'put ''L3NwYW4gNCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6NSJde2dyaWQtY29sdW1uOnNwYW4gNS9zcGFuIDUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOjUiXXtncmlkLXJvdzpzcGFuIDUvc3BhbiA1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czo2Il17Z3Jp''@;'; put 'put ''ZC1jb2x1bW46c3BhbiA2L3NwYW4gNiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6NiJde2dyaWQtcm93OnNwYW4gNi9zcGFuIDYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOjciXXtncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3IWltcG9ydGFudH1bY2RzLWxheW91dCo9''@;'; put 'put ''InJvd0B4czo3Il17Z3JpZC1yb3c6c3BhbiA3L3NwYW4gNyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6OCJde2dyaWQtY29sdW1uOnNwYW4gOC9zcGFuIDghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOjgiXXtncmlkLXJvdzpzcGFuIDgvc3BhbiA4IWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dCo9ImNvbEB4czo5Il17Z3JpZC1jb2x1bW46c3BhbiA5L3NwYW4gOSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6OSJde2dyaWQtcm93OnNwYW4gOS9zcGFuIDkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOjEwIl17Z3JpZC1jb2x1bW46c3BhbiAxMC9z''@;'; put 'put ''cGFuIDEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czoxMCJde2dyaWQtcm93OnNwYW4gMTAvc3BhbiAxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6MTEiXXtncmlkLWNvbHVtbjpzcGFuIDExL3NwYW4gMTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOjEx''@;'; put 'put ''Il17Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czoxMiJde2dyaWQtY29sdW1uOnNwYW4gMTIvc3BhbiAxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6MTIiXXtncmlkLXJvdzpzcGFuIDEyL3NwYW4gMTIhaW1wb3J0YW50fX1A''@;'; put 'put ''bWVkaWEgKG1pbi13aWR0aDo3NjhweCl7W2Nkcy1sYXlvdXQqPSJjb2xAc206MSJde2dyaWQtY29sdW1uOnNwYW4gMS9zcGFuIDEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOjEiXXtncmlkLXJvdzpzcGFuIDEvc3BhbiAxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbToy''@;'; put 'put ''Il17Z3JpZC1jb2x1bW46c3BhbiAyL3NwYW4gMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206MiJde2dyaWQtcm93OnNwYW4gMi9zcGFuIDIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOjMiXXtncmlkLWNvbHVtbjpzcGFuIDMvc3BhbiAzIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dCo9InJvd0BzbTozIl17Z3JpZC1yb3c6c3BhbiAzL3NwYW4gMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206NCJde2dyaWQtY29sdW1uOnNwYW4gNC9zcGFuIDQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOjQiXXtncmlkLXJvdzpzcGFuIDQvc3BhbiA0IWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTo1Il17Z3JpZC1jb2x1bW46c3BhbiA1L3NwYW4gNSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206NSJde2dyaWQtcm93OnNwYW4gNS9zcGFuIDUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOjYiXXtncmlkLWNvbHVtbjpzcGFu''@;'; put 'put ''IDYvc3BhbiA2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTo2Il17Z3JpZC1yb3c6c3BhbiA2L3NwYW4gNiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206NyJde2dyaWQtY29sdW1uOnNwYW4gNy9zcGFuIDchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOjciXXtn''@;'; put 'put ''cmlkLXJvdzpzcGFuIDcvc3BhbiA3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTo4Il17Z3JpZC1jb2x1bW46c3BhbiA4L3NwYW4gOCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206OCJde2dyaWQtcm93OnNwYW4gOC9zcGFuIDghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''Y29sQHNtOjkiXXtncmlkLWNvbHVtbjpzcGFuIDkvc3BhbiA5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTo5Il17Z3JpZC1yb3c6c3BhbiA5L3NwYW4gOSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206MTAiXXtncmlkLWNvbHVtbjpzcGFuIDEwL3NwYW4gMTAhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOjEwIl17Z3JpZC1yb3c6c3BhbiAxMC9zcGFuIDEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbToxMSJde2dyaWQtY29sdW1uOnNwYW4gMTEvc3BhbiAxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206MTEiXXtncmlkLXJvdzpz''@;'; put 'put ''cGFuIDExL3NwYW4gMTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOjEyIl17Z3JpZC1jb2x1bW46c3BhbiAxMi9zcGFuIDEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbToxMiJde2dyaWQtcm93OnNwYW4gMTIvc3BhbiAxMiFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdp''@;'; put 'put ''ZHRoOjk5MnB4KXtbY2RzLWxheW91dCo9ImNvbEBtZDoxIl17Z3JpZC1jb2x1bW46c3BhbiAxL3NwYW4gMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6MSJde2dyaWQtcm93OnNwYW4gMS9zcGFuIDEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOjIiXXtncmlkLWNvbHVt''@;'; put 'put ''bjpzcGFuIDIvc3BhbiAyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDoyIl17Z3JpZC1yb3c6c3BhbiAyL3NwYW4gMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6MyJde2dyaWQtY29sdW1uOnNwYW4gMy9zcGFuIDMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1k''@;'; put 'put ''OjMiXXtncmlkLXJvdzpzcGFuIDMvc3BhbiAzIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDo0Il17Z3JpZC1jb2x1bW46c3BhbiA0L3NwYW4gNCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6NCJde2dyaWQtcm93OnNwYW4gNC9zcGFuIDQhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iY29sQG1kOjUiXXtncmlkLWNvbHVtbjpzcGFuIDUvc3BhbiA1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDo1Il17Z3JpZC1yb3c6c3BhbiA1L3NwYW4gNSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6NiJde2dyaWQtY29sdW1uOnNwYW4gNi9zcGFuIDYhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOjYiXXtncmlkLXJvdzpzcGFuIDYvc3BhbiA2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDo3Il17Z3JpZC1jb2x1bW46c3BhbiA3L3NwYW4gNyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6NyJde2dyaWQtcm93OnNwYW4g''@;'; put 'put ''Ny9zcGFuIDchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOjgiXXtncmlkLWNvbHVtbjpzcGFuIDgvc3BhbiA4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDo4Il17Z3JpZC1yb3c6c3BhbiA4L3NwYW4gOCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6OSJde2dy''@;'; put 'put ''aWQtY29sdW1uOnNwYW4gOS9zcGFuIDkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOjkiXXtncmlkLXJvdzpzcGFuIDkvc3BhbiA5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDoxMCJde2dyaWQtY29sdW1uOnNwYW4gMTAvc3BhbiAxMCFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJyb3dAbWQ6MTAiXXtncmlkLXJvdzpzcGFuIDEwL3NwYW4gMTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOjExIl17Z3JpZC1jb2x1bW46c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDoxMSJde2dyaWQtcm93OnNwYW4gMTEvc3BhbiAx''@;'; put 'put ''MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6MTIiXXtncmlkLWNvbHVtbjpzcGFuIDEyL3NwYW4gMTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOjEyIl17Z3JpZC1yb3c6c3BhbiAxMi9zcGFuIDEyIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXtb''@;'; put 'put ''Y2RzLWxheW91dCo9ImNvbEBsZzoxIl17Z3JpZC1jb2x1bW46c3BhbiAxL3NwYW4gMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6MSJde2dyaWQtcm93OnNwYW4gMS9zcGFuIDEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOjIiXXtncmlkLWNvbHVtbjpzcGFuIDIvc3Bh''@;'; put 'put ''biAyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzoyIl17Z3JpZC1yb3c6c3BhbiAyL3NwYW4gMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6MyJde2dyaWQtY29sdW1uOnNwYW4gMy9zcGFuIDMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOjMiXXtncmlkLXJv''@;'; put 'put ''dzpzcGFuIDMvc3BhbiAzIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzo0Il17Z3JpZC1jb2x1bW46c3BhbiA0L3NwYW4gNCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6NCJde2dyaWQtcm93OnNwYW4gNC9zcGFuIDQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxn''@;'; put 'put ''OjUiXXtncmlkLWNvbHVtbjpzcGFuIDUvc3BhbiA1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzo1Il17Z3JpZC1yb3c6c3BhbiA1L3NwYW4gNSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6NiJde2dyaWQtY29sdW1uOnNwYW4gNi9zcGFuIDYhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0icm93QGxnOjYiXXtncmlkLXJvdzpzcGFuIDYvc3BhbiA2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzo3Il17Z3JpZC1jb2x1bW46c3BhbiA3L3NwYW4gNyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6NyJde2dyaWQtcm93OnNwYW4gNy9zcGFuIDchaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOjgiXXtncmlkLWNvbHVtbjpzcGFuIDgvc3BhbiA4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzo4Il17Z3JpZC1yb3c6c3BhbiA4L3NwYW4gOCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6OSJde2dyaWQtY29sdW1uOnNw''@;'; put 'put ''YW4gOS9zcGFuIDkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOjkiXXtncmlkLXJvdzpzcGFuIDkvc3BhbiA5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzoxMCJde2dyaWQtY29sdW1uOnNwYW4gMTAvc3BhbiAxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6''@;'; put 'put ''MTAiXXtncmlkLXJvdzpzcGFuIDEwL3NwYW4gMTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOjExIl17Z3JpZC1jb2x1bW46c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzoxMSJde2dyaWQtcm93OnNwYW4gMTEvc3BhbiAxMSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJjb2xAbGc6MTIiXXtncmlkLWNvbHVtbjpzcGFuIDEyL3NwYW4gMTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOjEyIl17Z3JpZC1yb3c6c3BhbiAxMi9zcGFuIDEyIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91dCo9''@;'; put 'put ''ImNvbEB4bDoxIl17Z3JpZC1jb2x1bW46c3BhbiAxL3NwYW4gMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6MSJde2dyaWQtcm93OnNwYW4gMS9zcGFuIDEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOjIiXXtncmlkLWNvbHVtbjpzcGFuIDIvc3BhbiAyIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dCo9InJvd0B4bDoyIl17Z3JpZC1yb3c6c3BhbiAyL3NwYW4gMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6MyJde2dyaWQtY29sdW1uOnNwYW4gMy9zcGFuIDMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOjMiXXtncmlkLXJvdzpzcGFuIDMvc3Bh''@;'; put 'put ''biAzIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDo0Il17Z3JpZC1jb2x1bW46c3BhbiA0L3NwYW4gNCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6NCJde2dyaWQtcm93OnNwYW4gNC9zcGFuIDQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOjUiXXtncmlkLWNv''@;'; put 'put ''bHVtbjpzcGFuIDUvc3BhbiA1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDo1Il17Z3JpZC1yb3c6c3BhbiA1L3NwYW4gNSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6NiJde2dyaWQtY29sdW1uOnNwYW4gNi9zcGFuIDYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93''@;'; put 'put ''QHhsOjYiXXtncmlkLXJvdzpzcGFuIDYvc3BhbiA2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDo3Il17Z3JpZC1jb2x1bW46c3BhbiA3L3NwYW4gNyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6NyJde2dyaWQtcm93OnNwYW4gNy9zcGFuIDchaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0iY29sQHhsOjgiXXtncmlkLWNvbHVtbjpzcGFuIDgvc3BhbiA4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDo4Il17Z3JpZC1yb3c6c3BhbiA4L3NwYW4gOCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6OSJde2dyaWQtY29sdW1uOnNwYW4gOS9zcGFuIDkh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOjkiXXtncmlkLXJvdzpzcGFuIDkvc3BhbiA5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDoxMCJde2dyaWQtY29sdW1uOnNwYW4gMTAvc3BhbiAxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6MTAiXXtncmlkLXJv''@;'; put 'put ''dzpzcGFuIDEwL3NwYW4gMTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOjExIl17Z3JpZC1jb2x1bW46c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDoxMSJde2dyaWQtcm93OnNwYW4gMTEvc3BhbiAxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJjb2xAeGw6MTIiXXtncmlkLWNvbHVtbjpzcGFuIDEyL3NwYW4gMTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOjEyIl17Z3JpZC1yb3c6c3BhbiAxMi9zcGFuIDEyIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpe1tjZHMtbGF5b3V0Kj0iY29sQHhzOnN0YXJ0''@;'; put 'put ''LTEiXXtncmlkLWNvbHVtbi1zdGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czplbmQtMSJde2dyaWQtY29sdW1uLWVuZDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czpzdGFydC0xIl17Z3JpZC1yb3ctc3RhcnQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJy''@;'; put 'put ''b3dAeHM6ZW5kLTEiXXtncmlkLXJvdy1lbmQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6c3RhcnQtMiJde2dyaWQtY29sdW1uLXN0YXJ0OjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOmVuZC0yIl17Z3JpZC1jb2x1bW4tZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0icm93QHhzOnN0YXJ0LTIiXXtncmlkLXJvdy1zdGFydDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czplbmQtMiJde2dyaWQtcm93LWVuZDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czpzdGFydC0zIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MyFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJjb2xAeHM6ZW5kLTMiXXtncmlkLWNvbHVtbi1lbmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6c3RhcnQtMyJde2dyaWQtcm93LXN0YXJ0OjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOmVuZC0zIl17Z3JpZC1yb3ctZW5kOjMhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOnN0YXJ0LTQiXXtncmlkLWNvbHVtbi1zdGFydDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czplbmQtNCJde2dyaWQtY29sdW1uLWVuZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czpzdGFydC00Il17Z3JpZC1yb3ctc3Rh''@;'; put 'put ''cnQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6ZW5kLTQiXXtncmlkLXJvdy1lbmQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6c3RhcnQtNSJde2dyaWQtY29sdW1uLXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOmVuZC01Il17Z3JpZC1j''@;'; put 'put ''b2x1bW4tZW5kOjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOnN0YXJ0LTUiXXtncmlkLXJvdy1zdGFydDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czplbmQtNSJde2dyaWQtcm93LWVuZDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czpzdGFydC02Il17''@;'; put 'put ''Z3JpZC1jb2x1bW4tc3RhcnQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6ZW5kLTYiXXtncmlkLWNvbHVtbi1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6c3RhcnQtNiJde2dyaWQtcm93LXN0YXJ0OjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhz''@;'; put 'put ''OmVuZC02Il17Z3JpZC1yb3ctZW5kOjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOnN0YXJ0LTciXXtncmlkLWNvbHVtbi1zdGFydDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czplbmQtNyJde2dyaWQtY29sdW1uLWVuZDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9''@;'; put 'put ''InJvd0B4czpzdGFydC03Il17Z3JpZC1yb3ctc3RhcnQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6ZW5kLTciXXtncmlkLXJvdy1lbmQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6c3RhcnQtOCJde2dyaWQtY29sdW1uLXN0YXJ0OjghaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0iY29sQHhzOmVuZC04Il17Z3JpZC1jb2x1bW4tZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOnN0YXJ0LTgiXXtncmlkLXJvdy1zdGFydDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czplbmQtOCJde2dyaWQtcm93LWVuZDo4IWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dCo9ImNvbEB4czpzdGFydC05Il17Z3JpZC1jb2x1bW4tc3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6ZW5kLTkiXXtncmlkLWNvbHVtbi1lbmQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6c3RhcnQtOSJde2dyaWQtcm93LXN0YXJ0Ojkh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOmVuZC05Il17Z3JpZC1yb3ctZW5kOjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOnN0YXJ0LTEwIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOmVuZC0xMCJde2dyaWQtY29s''@;'; put 'put ''dW1uLWVuZDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6c3RhcnQtMTAiXXtncmlkLXJvdy1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6ZW5kLTEwIl17Z3JpZC1yb3ctZW5kOjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czpzdGFydC0x''@;'; put 'put ''MSJde2dyaWQtY29sdW1uLXN0YXJ0OjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czplbmQtMTEiXXtncmlkLWNvbHVtbi1lbmQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOnN0YXJ0LTExIl17Z3JpZC1yb3ctc3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0icm93QHhzOmVuZC0xMSJde2dyaWQtcm93LWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6c3RhcnQtMTIiXXtncmlkLWNvbHVtbi1zdGFydDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6ZW5kLTEyIl17Z3JpZC1jb2x1bW4tZW5kOjEyIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dCo9InJvd0B4czpzdGFydC0xMiJde2dyaWQtcm93LXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czplbmQtMTIiXXtncmlkLXJvdy1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOnN0YXJ0LTEzIl17Z3JpZC1jb2x1bW4tc3Rh''@;'; put 'put ''cnQ6MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOmVuZC0xMyJde2dyaWQtY29sdW1uLWVuZDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6c3RhcnQtMTMiXXtncmlkLXJvdy1zdGFydDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6ZW5kLTEzIl17''@;'; put 'put ''Z3JpZC1yb3ctZW5kOjEzIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpe1tjZHMtbGF5b3V0Kj0iY29sQHNtOnN0YXJ0LTEiXXtncmlkLWNvbHVtbi1zdGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTplbmQtMSJde2dyaWQtY29sdW1uLWVuZDoxIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dCo9InJvd0BzbTpzdGFydC0xIl17Z3JpZC1yb3ctc3RhcnQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206ZW5kLTEiXXtncmlkLXJvdy1lbmQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206c3RhcnQtMiJde2dyaWQtY29sdW1uLXN0YXJ0''@;'; put 'put ''OjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC0yIl17Z3JpZC1jb2x1bW4tZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOnN0YXJ0LTIiXXtncmlkLXJvdy1zdGFydDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTplbmQtMiJde2dyaWQtcm93''@;'; put 'put ''LWVuZDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTpzdGFydC0zIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206ZW5kLTMiXXtncmlkLWNvbHVtbi1lbmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206c3RhcnQtMyJd''@;'; put 'put ''e2dyaWQtcm93LXN0YXJ0OjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOmVuZC0zIl17Z3JpZC1yb3ctZW5kOjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOnN0YXJ0LTQiXXtncmlkLWNvbHVtbi1zdGFydDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTpl''@;'; put 'put ''bmQtNCJde2dyaWQtY29sdW1uLWVuZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTpzdGFydC00Il17Z3JpZC1yb3ctc3RhcnQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206ZW5kLTQiXXtncmlkLXJvdy1lbmQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xA''@;'; put 'put ''c206c3RhcnQtNSJde2dyaWQtY29sdW1uLXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC01Il17Z3JpZC1jb2x1bW4tZW5kOjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOnN0YXJ0LTUiXXtncmlkLXJvdy1zdGFydDo1IWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dCo9InJvd0BzbTplbmQtNSJde2dyaWQtcm93LWVuZDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTpzdGFydC02Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206ZW5kLTYiXXtncmlkLWNvbHVtbi1lbmQ6NiFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJyb3dAc206c3RhcnQtNiJde2dyaWQtcm93LXN0YXJ0OjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOmVuZC02Il17Z3JpZC1yb3ctZW5kOjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOnN0YXJ0LTciXXtncmlkLWNvbHVtbi1zdGFydDo3IWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTplbmQtNyJde2dyaWQtY29sdW1uLWVuZDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTpzdGFydC03Il17Z3JpZC1yb3ctc3RhcnQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206ZW5kLTciXXtncmlkLXJvdy1lbmQ6''@;'; put 'put ''NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206c3RhcnQtOCJde2dyaWQtY29sdW1uLXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC04Il17Z3JpZC1jb2x1bW4tZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOnN0YXJ0LTgiXXtncmlk''@;'; put 'put ''LXJvdy1zdGFydDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTplbmQtOCJde2dyaWQtcm93LWVuZDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTpzdGFydC05Il17Z3JpZC1jb2x1bW4tc3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206ZW5kLTki''@;'; put 'put ''XXtncmlkLWNvbHVtbi1lbmQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206c3RhcnQtOSJde2dyaWQtcm93LXN0YXJ0OjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOmVuZC05Il17Z3JpZC1yb3ctZW5kOjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOnN0''@;'; put 'put ''YXJ0LTEwIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC0xMCJde2dyaWQtY29sdW1uLWVuZDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206c3RhcnQtMTAiXXtncmlkLXJvdy1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJyb3dAc206ZW5kLTEwIl17Z3JpZC1yb3ctZW5kOjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTpzdGFydC0xMSJde2dyaWQtY29sdW1uLXN0YXJ0OjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTplbmQtMTEiXXtncmlkLWNvbHVtbi1lbmQ6MTEhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOnN0YXJ0LTExIl17Z3JpZC1yb3ctc3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOmVuZC0xMSJde2dyaWQtcm93LWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206c3RhcnQtMTIiXXtncmlkLWNvbHVt''@;'; put 'put ''bi1zdGFydDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206ZW5kLTEyIl17Z3JpZC1jb2x1bW4tZW5kOjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTpzdGFydC0xMiJde2dyaWQtcm93LXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTplbmQt''@;'; put 'put ''MTIiXXtncmlkLXJvdy1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOnN0YXJ0LTEzIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC0xMyJde2dyaWQtY29sdW1uLWVuZDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJyb3dAc206c3RhcnQtMTMiXXtncmlkLXJvdy1zdGFydDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206ZW5kLTEzIl17Z3JpZC1yb3ctZW5kOjEzIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpe1tjZHMtbGF5b3V0Kj0iY29sQG1kOnN0YXJ0LTEiXXtncmlk''@;'; put 'put ''LWNvbHVtbi1zdGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDplbmQtMSJde2dyaWQtY29sdW1uLWVuZDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDpzdGFydC0xIl17Z3JpZC1yb3ctc3RhcnQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6ZW5k''@;'; put 'put ''LTEiXXtncmlkLXJvdy1lbmQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6c3RhcnQtMiJde2dyaWQtY29sdW1uLXN0YXJ0OjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOmVuZC0yIl17Z3JpZC1jb2x1bW4tZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93''@;'; put 'put ''QG1kOnN0YXJ0LTIiXXtncmlkLXJvdy1zdGFydDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDplbmQtMiJde2dyaWQtcm93LWVuZDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDpzdGFydC0zIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJjb2xAbWQ6ZW5kLTMiXXtncmlkLWNvbHVtbi1lbmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6c3RhcnQtMyJde2dyaWQtcm93LXN0YXJ0OjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOmVuZC0zIl17Z3JpZC1yb3ctZW5kOjMhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0iY29sQG1kOnN0YXJ0LTQiXXtncmlkLWNvbHVtbi1zdGFydDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDplbmQtNCJde2dyaWQtY29sdW1uLWVuZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDpzdGFydC00Il17Z3JpZC1yb3ctc3RhcnQ6NCFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6ZW5kLTQiXXtncmlkLXJvdy1lbmQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6c3RhcnQtNSJde2dyaWQtY29sdW1uLXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOmVuZC01Il17Z3JpZC1jb2x1bW4tZW5k''@;'; put 'put ''OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOnN0YXJ0LTUiXXtncmlkLXJvdy1zdGFydDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDplbmQtNSJde2dyaWQtcm93LWVuZDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDpzdGFydC02Il17Z3JpZC1jb2x1''@;'; put 'put ''bW4tc3RhcnQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6ZW5kLTYiXXtncmlkLWNvbHVtbi1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6c3RhcnQtNiJde2dyaWQtcm93LXN0YXJ0OjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOmVuZC02Il17''@;'; put 'put ''Z3JpZC1yb3ctZW5kOjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOnN0YXJ0LTciXXtncmlkLWNvbHVtbi1zdGFydDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDplbmQtNyJde2dyaWQtY29sdW1uLWVuZDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDpz''@;'; put 'put ''dGFydC03Il17Z3JpZC1yb3ctc3RhcnQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6ZW5kLTciXXtncmlkLXJvdy1lbmQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6c3RhcnQtOCJde2dyaWQtY29sdW1uLXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''Y29sQG1kOmVuZC04Il17Z3JpZC1jb2x1bW4tZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOnN0YXJ0LTgiXXtncmlkLXJvdy1zdGFydDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDplbmQtOCJde2dyaWQtcm93LWVuZDo4IWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dCo9ImNvbEBtZDpzdGFydC05Il17Z3JpZC1jb2x1bW4tc3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6ZW5kLTkiXXtncmlkLWNvbHVtbi1lbmQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6c3RhcnQtOSJde2dyaWQtcm93LXN0YXJ0OjkhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0icm93QG1kOmVuZC05Il17Z3JpZC1yb3ctZW5kOjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOnN0YXJ0LTEwIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOmVuZC0xMCJde2dyaWQtY29sdW1uLWVuZDox''@;'; put 'put ''MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6c3RhcnQtMTAiXXtncmlkLXJvdy1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6ZW5kLTEwIl17Z3JpZC1yb3ctZW5kOjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDpzdGFydC0xMSJde2dyaWQt''@;'; put 'put ''Y29sdW1uLXN0YXJ0OjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDplbmQtMTEiXXtncmlkLWNvbHVtbi1lbmQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOnN0YXJ0LTExIl17Z3JpZC1yb3ctc3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1k''@;'; put 'put ''OmVuZC0xMSJde2dyaWQtcm93LWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6c3RhcnQtMTIiXXtncmlkLWNvbHVtbi1zdGFydDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6ZW5kLTEyIl17Z3JpZC1jb2x1bW4tZW5kOjEyIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dCo9InJvd0BtZDpzdGFydC0xMiJde2dyaWQtcm93LXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDplbmQtMTIiXXtncmlkLXJvdy1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOnN0YXJ0LTEzIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTMhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOmVuZC0xMyJde2dyaWQtY29sdW1uLWVuZDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6c3RhcnQtMTMiXXtncmlkLXJvdy1zdGFydDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6ZW5kLTEzIl17Z3JpZC1yb3ct''@;'; put 'put ''ZW5kOjEzIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXtbY2RzLWxheW91dCo9ImNvbEBsZzpzdGFydC0xIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6ZW5kLTEiXXtncmlkLWNvbHVtbi1lbmQ6MSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJyb3dAbGc6c3RhcnQtMSJde2dyaWQtcm93LXN0YXJ0OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOmVuZC0xIl17Z3JpZC1yb3ctZW5kOjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOnN0YXJ0LTIiXXtncmlkLWNvbHVtbi1zdGFydDoyIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzplbmQtMiJde2dyaWQtY29sdW1uLWVuZDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzpzdGFydC0yIl17Z3JpZC1yb3ctc3RhcnQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6ZW5kLTIiXXtncmlkLXJvdy1lbmQ6MiFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6c3RhcnQtMyJde2dyaWQtY29sdW1uLXN0YXJ0OjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOmVuZC0zIl17Z3JpZC1jb2x1bW4tZW5kOjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOnN0YXJ0LTMiXXtncmlkLXJv''@;'; put 'put ''dy1zdGFydDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzplbmQtMyJde2dyaWQtcm93LWVuZDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzpzdGFydC00Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6ZW5kLTQiXXtn''@;'; put 'put ''cmlkLWNvbHVtbi1lbmQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6c3RhcnQtNCJde2dyaWQtcm93LXN0YXJ0OjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOmVuZC00Il17Z3JpZC1yb3ctZW5kOjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOnN0YXJ0''@;'; put 'put ''LTUiXXtncmlkLWNvbHVtbi1zdGFydDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzplbmQtNSJde2dyaWQtY29sdW1uLWVuZDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzpzdGFydC01Il17Z3JpZC1yb3ctc3RhcnQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJy''@;'; put 'put ''b3dAbGc6ZW5kLTUiXXtncmlkLXJvdy1lbmQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6c3RhcnQtNiJde2dyaWQtY29sdW1uLXN0YXJ0OjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOmVuZC02Il17Z3JpZC1jb2x1bW4tZW5kOjYhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0icm93QGxnOnN0YXJ0LTYiXXtncmlkLXJvdy1zdGFydDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzplbmQtNiJde2dyaWQtcm93LWVuZDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzpzdGFydC03Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NyFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJjb2xAbGc6ZW5kLTciXXtncmlkLWNvbHVtbi1lbmQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6c3RhcnQtNyJde2dyaWQtcm93LXN0YXJ0OjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOmVuZC03Il17Z3JpZC1yb3ctZW5kOjchaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOnN0YXJ0LTgiXXtncmlkLWNvbHVtbi1zdGFydDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzplbmQtOCJde2dyaWQtY29sdW1uLWVuZDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzpzdGFydC04Il17Z3JpZC1yb3ctc3Rh''@;'; put 'put ''cnQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6ZW5kLTgiXXtncmlkLXJvdy1lbmQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6c3RhcnQtOSJde2dyaWQtY29sdW1uLXN0YXJ0OjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOmVuZC05Il17Z3JpZC1j''@;'; put 'put ''b2x1bW4tZW5kOjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOnN0YXJ0LTkiXXtncmlkLXJvdy1zdGFydDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzplbmQtOSJde2dyaWQtcm93LWVuZDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzpzdGFydC0xMCJd''@;'; put 'put ''e2dyaWQtY29sdW1uLXN0YXJ0OjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzplbmQtMTAiXXtncmlkLWNvbHVtbi1lbmQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOnN0YXJ0LTEwIl17Z3JpZC1yb3ctc3RhcnQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''cm93QGxnOmVuZC0xMCJde2dyaWQtcm93LWVuZDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6c3RhcnQtMTEiXXtncmlkLWNvbHVtbi1zdGFydDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6ZW5kLTExIl17Z3JpZC1jb2x1bW4tZW5kOjExIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dCo9InJvd0BsZzpzdGFydC0xMSJde2dyaWQtcm93LXN0YXJ0OjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzplbmQtMTEiXXtncmlkLXJvdy1lbmQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOnN0YXJ0LTEyIl17Z3JpZC1jb2x1bW4tc3RhcnQ6''@;'; put 'put ''MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOmVuZC0xMiJde2dyaWQtY29sdW1uLWVuZDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6c3RhcnQtMTIiXXtncmlkLXJvdy1zdGFydDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6ZW5kLTEyIl17Z3Jp''@;'; put 'put ''ZC1yb3ctZW5kOjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzpzdGFydC0xMyJde2dyaWQtY29sdW1uLXN0YXJ0OjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzplbmQtMTMiXXtncmlkLWNvbHVtbi1lbmQ6MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxn''@;'; put 'put ''OnN0YXJ0LTEzIl17Z3JpZC1yb3ctc3RhcnQ6MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOmVuZC0xMyJde2dyaWQtcm93LWVuZDoxMyFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjE0NDBweCl7W2Nkcy1sYXlvdXQqPSJjb2xAeGw6c3RhcnQtMSJde2dyaWQtY29sdW1u''@;'; put 'put ''LXN0YXJ0OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOmVuZC0xIl17Z3JpZC1jb2x1bW4tZW5kOjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOnN0YXJ0LTEiXXtncmlkLXJvdy1zdGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDplbmQtMSJde2dy''@;'; put 'put ''aWQtcm93LWVuZDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDpzdGFydC0yIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6ZW5kLTIiXXtncmlkLWNvbHVtbi1lbmQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6c3Rh''@;'; put 'put ''cnQtMiJde2dyaWQtcm93LXN0YXJ0OjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOmVuZC0yIl17Z3JpZC1yb3ctZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOnN0YXJ0LTMiXXtncmlkLWNvbHVtbi1zdGFydDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNv''@;'; put 'put ''bEB4bDplbmQtMyJde2dyaWQtY29sdW1uLWVuZDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDpzdGFydC0zIl17Z3JpZC1yb3ctc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6ZW5kLTMiXXtncmlkLXJvdy1lbmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJjb2xAeGw6c3RhcnQtNCJde2dyaWQtY29sdW1uLXN0YXJ0OjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOmVuZC00Il17Z3JpZC1jb2x1bW4tZW5kOjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOnN0YXJ0LTQiXXtncmlkLXJvdy1zdGFydDo0IWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dCo9InJvd0B4bDplbmQtNCJde2dyaWQtcm93LWVuZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDpzdGFydC01Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6ZW5kLTUiXXtncmlkLWNvbHVtbi1lbmQ6NSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6c3RhcnQtNSJde2dyaWQtcm93LXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOmVuZC01Il17Z3JpZC1yb3ctZW5kOjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOnN0YXJ0LTYiXXtncmlkLWNvbHVtbi1zdGFy''@;'; put 'put ''dDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDplbmQtNiJde2dyaWQtY29sdW1uLWVuZDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDpzdGFydC02Il17Z3JpZC1yb3ctc3RhcnQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6ZW5kLTYiXXtncmlkLXJv''@;'; put 'put ''dy1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6c3RhcnQtNyJde2dyaWQtY29sdW1uLXN0YXJ0OjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOmVuZC03Il17Z3JpZC1jb2x1bW4tZW5kOjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOnN0YXJ0LTci''@;'; put 'put ''XXtncmlkLXJvdy1zdGFydDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDplbmQtNyJde2dyaWQtcm93LWVuZDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDpzdGFydC04Il17Z3JpZC1jb2x1bW4tc3RhcnQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6''@;'; put 'put ''ZW5kLTgiXXtncmlkLWNvbHVtbi1lbmQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6c3RhcnQtOCJde2dyaWQtcm93LXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOmVuZC04Il17Z3JpZC1yb3ctZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29s''@;'; put 'put ''QHhsOnN0YXJ0LTkiXXtncmlkLWNvbHVtbi1zdGFydDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDplbmQtOSJde2dyaWQtY29sdW1uLWVuZDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDpzdGFydC05Il17Z3JpZC1yb3ctc3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJyb3dAeGw6ZW5kLTkiXXtncmlkLXJvdy1lbmQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6c3RhcnQtMTAiXXtncmlkLWNvbHVtbi1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6ZW5kLTEwIl17Z3JpZC1jb2x1bW4tZW5kOjEwIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dCo9InJvd0B4bDpzdGFydC0xMCJde2dyaWQtcm93LXN0YXJ0OjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDplbmQtMTAiXXtncmlkLXJvdy1lbmQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOnN0YXJ0LTExIl17Z3JpZC1jb2x1bW4t''@;'; put 'put ''c3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOmVuZC0xMSJde2dyaWQtY29sdW1uLWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6c3RhcnQtMTEiXXtncmlkLXJvdy1zdGFydDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6ZW5kLTEx''@;'; put 'put ''Il17Z3JpZC1yb3ctZW5kOjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDpzdGFydC0xMiJde2dyaWQtY29sdW1uLXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDplbmQtMTIiXXtncmlkLWNvbHVtbi1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''cm93QHhsOnN0YXJ0LTEyIl17Z3JpZC1yb3ctc3RhcnQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOmVuZC0xMiJde2dyaWQtcm93LWVuZDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6c3RhcnQtMTMiXXtncmlkLWNvbHVtbi1zdGFydDoxMyFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJjb2xAeGw6ZW5kLTEzIl17Z3JpZC1jb2x1bW4tZW5kOjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDpzdGFydC0xMyJde2dyaWQtcm93LXN0YXJ0OjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDplbmQtMTMiXXtncmlkLXJvdy1lbmQ6MTMh''@;'; put 'put ''aW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp0b3AiXXthbGlnbi1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6cmlnaHQiXXtqdXN0aWZ5LWNvbnRl''@;'; put 'put ''bnQ6ZW5kfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Ym90dG9tIl17YWxpZ24tY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpsZWZ0Il17anVzdGlmeS1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1pdGVtczpzdHJldGNo''@;'; put 'put ''O2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1b''@;'; put 'put ''Y2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhzOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmhvcml6b250YWwtY2VudGVyIl17anVzdGlm''@;'; put 'put ''eS1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6''@;'; put 'put ''Y2VudGVyfX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp0b3AiXXthbGlnbi1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206cmlnaHQiXXtqdXN0aWZ5LWNvbnRlbnQ6''@;'; put 'put ''ZW5kfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Ym90dG9tIl17YWxpZ24tY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpsZWZ0Il17anVzdGlmeS1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1pdGVtczpzdHJldGNoO2p1''@;'; put 'put ''c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2Rz''@;'; put 'put ''LWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1p''@;'; put 'put ''dGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2Vu''@;'; put 'put ''dGVyfX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp0b3AiXXthbGlnbi1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6cmlnaHQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZW5k''@;'; put 'put ''fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Ym90dG9tIl17YWxpZ24tY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpsZWZ0Il17anVzdGlmeS1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iYWxpZ25AbWQ6dmVydGljYWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3Rp''@;'; put 'put ''ZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxh''@;'; put 'put ''eW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQG1kOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1pdGVt''@;'; put 'put ''czpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQG1kOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVy''@;'; put 'put ''fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpe1tjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dG9wIl17YWxpZ24tY29udGVudDpzdGFydH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmVuZH1b''@;'; put 'put ''Y2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmJvdHRvbSJde2FsaWduLWNvbnRlbnQ6ZW5kfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6bGVmdCJde2p1c3RpZnktY29udGVudDpzdGFydH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91''@;'; put 'put ''dCo9ImFsaWduQGxnOnZlcnRpY2FsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtc3RyZXRjaCJde2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5''@;'; put 'put ''LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktaXRlbXM6''@;'; put 'put ''Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXI7anVzdGlmeS1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn19''@;'; put 'put ''QG1lZGlhIChtaW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnRvcCJde2FsaWduLWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpyaWdodCJde2p1c3RpZnktY29udGVudDplbmR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpib3R0b20iXXthbGlnbi1jb250ZW50OmVuZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJhbGlnbkB4bDp2ZXJ0aWNhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1j''@;'; put 'put ''b250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0''@;'; put 'put ''fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWl0ZW1zOmNl''@;'; put 'put ''bnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj0iZGlzcGxheTpub25lIl17ZGlzcGxheTpub25lIWltcG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXk6ZmxleCJde2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5OmNvbnRlbnRzIl17ZGlzcGxheTpjb250ZW50cyFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJkaXNwbGF5OmJsb2NrIl17ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5OmlubGluZSJde2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QHNtOm5vbmUiXXtk''@;'; put 'put ''aXNwbGF5Om5vbmUhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheUBzbTpmbGV4Il17ZGlzcGxheTpmbGV4IWltcG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXlAc206YmxvY2siXXtkaXNwbGF5OmJsb2NrIWltcG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXlAc206aW5saW5l''@;'; put 'put ''Il17ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QG1kOm5vbmUiXXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheUBtZDpmbGV4Il17ZGlzcGxheTpmbGV4IWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49ImRpc3BsYXlAbWQ6YmxvY2siXXtkaXNwbGF5OmJsb2NrIWltcG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXlAbWQ6aW5saW5lIl17ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpe1tjZHMtbGF5b3V0fj0iZGlzcGxheUBs''@;'; put 'put ''Zzpub25lIl17ZGlzcGxheTpub25lIWltcG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXlAbGc6ZmxleCJde2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QGxnOmJsb2NrIl17ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5''@;'; put 'put ''QGxnOmlubGluZSJde2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91dH49ImRpc3BsYXlAeGw6bm9uZSJde2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QHhsOmZsZXgiXXtkaXNwbGF5OmZsZXgh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheUB4bDpibG9jayJde2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheUB4bDppbmxpbmUiXXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9fTo6c2xvdHRlZChbY2RzLWxheW91dH49ImRpc3BsYXk6c2NyZWVu''@;'; put 'put ''LXJlYWRlci1vbmx5Il0pLFtjZHMtbGF5b3V0fj0iZGlzcGxheTpzY3JlZW4tcmVhZGVyLW9ubHkiXXtwb3NpdGlvbjphYnNvbHV0ZSFpbXBvcnRhbnQ7Y2xpcDpyZWN0KDFweCwxcHgsMXB4LDFweCk7Y2xpcC1wYXRoOmluc2V0KDUwJSk7cGFkZGluZzowO2JvcmRlcjowO2hlaWdodDoxcHg7''@;'; put 'put ''d2lkdGg6MXB4O292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dG9wOjA7bGVmdDowO2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iZ2FwOm5vbmUiXXtnYXA6MH1bY2RzLWxheW91dCo9ImdhcDp4eHhzIl17Z2FwOnZhcigtLVwzYjQgMSl9W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJnYXA6eHhzIl17Z2FwOnZhcigtLVwzYjQgMil9W2Nkcy1sYXlvdXQqPSJnYXA6eHMiXXtnYXA6dmFyKC0tXDNiNCAzKX1bY2RzLWxheW91dCo9ImdhcDpzbSJde2dhcDp2YXIoLS1cM2I0IDQpfVtjZHMtbGF5b3V0Kj0iZ2FwOm1kIl17Z2FwOnZhcigtLVwzYjQgNSl9W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJnYXA6bGciXXtnYXA6dmFyKC0tXDNiNCA2KX1bY2RzLWxheW91dCo9ImdhcDp4bCJde2dhcDp2YXIoLS1cM2I0IDcpfVtjZHMtbGF5b3V0Kj0iZ2FwOnh4bCJde2dhcDp2YXIoLS1cM2I0IDgpfVtjZHMtbGF5b3V0Kj0iZ2FwOnh4eGwiXXtnYXA6dmFyKC0tXDNiNCA5KX1bY2RzLWxh''@;'; put 'put ''eW91dH49InA6bm9uZSJde3BhZGRpbmc6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtOm5vbmUiXXttYXJnaW46MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOnh4eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibTp4eHhzIl17bWFyZ2luOnZh''@;'; put 'put ''cigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icDp4eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibTp4eHMiXXttYXJnaW46dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOnhzIl17cGFkZGluZzp2YXIoLS1c''@;'; put 'put ''M2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im06eHMiXXttYXJnaW46dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOnNtIl17cGFkZGluZzp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im06c20iXXttYXJnaW46dmFyKC0tXDNiNCA0KSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOm1kIl17cGFkZGluZzp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im06bWQiXXttYXJnaW46dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOmxnIl17cGFkZGluZzp2YXIoLS1cM2I0IDYpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49Im06bGciXXttYXJnaW46dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOnhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im06eGwiXXttYXJnaW46dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJwOnh4bCJde3BhZGRpbmc6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtOnh4bCJde21hcmdpbjp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6eHh4bCJde3BhZGRpbmc6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PSJtOnh4eGwiXXttYXJnaW46dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXg6bm9uZSJde3BhZGRpbmctbGVmdDowIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15Om5vbmUiXXtwYWRkaW5nLXRvcDowIWltcG9y''@;'; put 'put ''dGFudDtwYWRkaW5nLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteDp4eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6eHh4cyJde3BhZGRpbmct''@;'; put 'put ''dG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14Onh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0icC15Onh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14OnhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50O3BhZGRp''@;'; put 'put ''bmctcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteDpzbSJde3BhZGRpbmctbGVm''@;'; put 'put ''dDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15OnNtIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJwLXg6bWQiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteTptZCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O3BhZGRpbmctYm90''@;'; put 'put ''dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14OmxnIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6bGciXXtwYWRkaW5nLXRvcDp2YXIo''@;'; put 'put ''LS1cM2I0IDYpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteDp4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0icC15OnhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXg6eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6''@;'; put 'put ''dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXg6eHh4bCJde3BhZGRpbmctbGVmdDp2YXIo''@;'; put 'put ''LS1cM2I0IDkpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15Onh4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49Im0teDpub25lIl17bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15Om5vbmUiXXttYXJnaW4tdG9wOjAhaW1wb3J0YW50O21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXg6eHh4cyJd''@;'; put 'put ''e21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teTp4eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMSkhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0ibS14Onh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teTp4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50O21h''@;'; put 'put ''cmdpbi1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXg6eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXk6eHMiXXttYXJnaW4tdG9w''@;'; put 'put ''OnZhcigtLVwzYjQgMykhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXg6c20iXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJtLXk6c20iXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXg6bWQiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFy''@;'; put 'put ''KC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXk6bWQiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXg6bGciXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDYp''@;'; put 'put ''IWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXk6bGciXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXg6eGwi''@;'; put 'put ''XXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXk6eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXg6eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15Onh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7bWFy''@;'; put 'put ''Z2luLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teDp4eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15Onh4eGwiXXttYXJnaW4t''@;'; put 'put ''dG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXQ6bm9uZSJde3BhZGRpbmctdG9wOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yOm5vbmUiXXtwYWRkaW5nLXJpZ2h0OjAhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0icC1iOm5vbmUiXXtwYWRkaW5nLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbDpub25lIl17cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10Onh4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49InAtcjp4eHhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYjp4eHhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWw6eHh4cyJde3BhZGRpbmctbGVmdDp2''@;'; put 'put ''YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdDp4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtcjp4eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iOnh4''@;'; put 'put ''cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sOnh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdDp4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj0icC1yOnhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYjp4cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sOnhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwz''@;'; put 'put ''YjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10OnNtIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXI6c20iXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iOnNtIl17cGFkZGlu''@;'; put 'put ''Zy1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWw6c20iXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXQ6bWQiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''InAtcjptZCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWI6bWQiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbDptZCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49InAtdDpsZyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yOmxnIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYjpsZyJde3BhZGRpbmctYm90dG9tOnZh''@;'; put 'put ''cigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sOmxnIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10OnhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXI6eGwiXXtw''@;'; put 'put ''YWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iOnhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWw6eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJwLXQ6eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXI6eHhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYjp4eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0''@;'; put 'put ''IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbDp4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXQ6eHh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yOnh4eGwiXXtwYWRk''@;'; put 'put ''aW5nLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iOnh4eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbDp4eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS10Om5vbmUiXXttYXJnaW4tdG9wOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yOm5vbmUiXXttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWI6bm9uZSJde21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWw6bm9u''@;'; put 'put ''ZSJde21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10Onh4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yOnh4eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJt''@;'; put 'put ''LWI6eHh4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWw6eHh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10Onh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJtLXI6eHhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iOnh4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWw6eHhzIl17bWFyZ2luLWxlZnQ6dmFy''@;'; put 'put ''KC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXQ6eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yOnhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iOnhzIl17bWFy''@;'; put 'put ''Z2luLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbDp4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10OnNtIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''Im0tcjpzbSJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYjpzbSJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWw6c20iXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49Im0tdDptZCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXI6bWQiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWI6bWQiXXttYXJnaW4tYm90dG9tOnZhcigtLVwz''@;'; put 'put ''YjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sOm1kIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXQ6bGciXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yOmxnIl17bWFyZ2luLXJp''@;'; put 'put ''Z2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iOmxnIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbDpsZyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10''@;'; put 'put ''OnhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tcjp4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYjp4bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJtLWw6eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdDp4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yOnh4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDgp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYjp4eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sOnh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10Onh4eGwiXXttYXJnaW4t''@;'; put 'put ''dG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yOnh4eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWI6eHh4bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJtLWw6eHh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXtbY2RzLWxheW91dCo9ImdhcEB4czpub25lIl17Z2FwOjB9W2Nkcy1sYXlvdXQqPSJnYXBAeHM6eHh4cyJde2dhcDp2YXIoLS1cM2I0IDEpfVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iZ2FwQHhzOnh4cyJde2dhcDp2YXIoLS1cM2I0IDIpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhzOnhzIl17Z2FwOnZhcigtLVwzYjQgMyl9W2Nkcy1sYXlvdXQqPSJnYXBAeHM6c20iXXtnYXA6dmFyKC0tXDNiNCA0KX1bY2RzLWxheW91dCo9ImdhcEB4czptZCJde2dhcDp2YXIoLS1cM2I0IDUp''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0iZ2FwQHhzOmxnIl17Z2FwOnZhcigtLVwzYjQgNil9W2Nkcy1sYXlvdXQqPSJnYXBAeHM6eGwiXXtnYXA6dmFyKC0tXDNiNCA3KX1bY2RzLWxheW91dCo9ImdhcEB4czp4eGwiXXtnYXA6dmFyKC0tXDNiNCA4KX1bY2RzLWxheW91dCo9ImdhcEB4czp4eHhsIl17Z2Fw''@;'; put 'put ''OnZhcigtLVwzYjQgOSl9W2Nkcy1sYXlvdXR+PSJwQHhzOm5vbmUiXXtwYWRkaW5nOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4czpub25lIl17bWFyZ2luOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4czp4eHhzIl17cGFkZGluZzp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Im1AeHM6eHh4cyJde21hcmdpbjp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeHM6eHhzIl17cGFkZGluZzp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeHM6eHhzIl17bWFyZ2luOnZhcigtLVwzYjQgMikhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0fj0icEB4czp4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhzOnhzIl17bWFyZ2luOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4czpzbSJde3BhZGRpbmc6dmFyKC0tXDNiNCA0KSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhzOnNtIl17bWFyZ2luOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4czptZCJde3BhZGRpbmc6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhzOm1kIl17bWFyZ2luOnZhcigtLVwzYjQgNSkhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0icEB4czpsZyJde3BhZGRpbmc6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhzOmxnIl17bWFyZ2luOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4czp4bCJde3BhZGRpbmc6dmFyKC0tXDNiNCA3KSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhzOnhsIl17bWFyZ2luOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4czp4eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4czp4eGwiXXttYXJnaW46dmFyKC0tXDNiNCA4''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhzOnh4eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4czp4eHhsIl17bWFyZ2luOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhzOm5vbmUiXXtwYWRkaW5nLWxl''@;'; put 'put ''ZnQ6MCFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4czpub25lIl17cGFkZGluZy10b3A6MCFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeHM6eHh4cyJde3BhZGRpbmctbGVmdDp2YXIo''@;'; put 'put ''LS1cM2I0IDEpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhzOnh4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49InAteEB4czp4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4czp4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDtwYWRk''@;'; put 'put ''aW5nLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4czp4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhzOnhzIl17cGFk''@;'; put 'put ''ZGluZy10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeHM6c20iXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDQpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49InAteUB4czpzbSJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhzOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNSkhaW1w''@;'; put 'put ''b3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeHM6bWQiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4''@;'; put 'put ''czpsZyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhzOmxnIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0t''@;'; put 'put ''XDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeHM6eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4czp4bCJde3BhZGRpbmctdG9wOnZhcigtLVwz''@;'; put 'put ''YjQgNykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhzOnh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0icC15QHhzOnh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhzOnh4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7cGFkZGlu''@;'; put 'put ''Zy1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4czp4eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeHM6bm9uZSJde21h''@;'; put 'put ''cmdpbi1sZWZ0OjAhaW1wb3J0YW50O21hcmdpbi1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4czpub25lIl17bWFyZ2luLXRvcDowIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhzOnh4eHMiXXttYXJnaW4tbGVmdDp2''@;'; put 'put ''YXIoLS1cM2I0IDEpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeHM6eHh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49Im0teEB4czp4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeHM6eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDttYXJnaW4t''@;'; put 'put ''Ym90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhzOnhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhzOnhzIl17bWFyZ2luLXRv''@;'; put 'put ''cDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhzOnNtIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj0ibS15QHhzOnNtIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhzOm1kIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7bWFyZ2lu''@;'; put 'put ''LXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhzOm1kIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhzOmxnIl17bWFyZ2luLWxl''@;'; put 'put ''ZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhzOmxnIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj0ibS14QHhzOnhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhzOnhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDttYXJnaW4t''@;'; put 'put ''Ym90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhzOnh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4czp4eGwiXXttYXJnaW4t''@;'; put 'put ''dG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeHM6eHh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49Im0teUB4czp4eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhzOm5vbmUiXXtwYWRkaW5nLXRvcDowIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49InAtckB4czpub25lIl17cGFkZGluZy1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4czpub25lIl17cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeHM6bm9uZSJde3BhZGRpbmctbGVmdDowIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''InAtdEB4czp4eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeHM6eHh4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeHM6eHh4cyJde3BhZGRpbmctYm90dG9tOnZhcigt''@;'; put 'put ''LVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhzOnh4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeHM6eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJA''@;'; put 'put ''eHM6eHhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4czp4eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4czp4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAy''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeHM6eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4czp4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeHM6eHMiXXtw''@;'; put 'put ''YWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4czp4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4czpzbSJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj0icC1yQHhzOnNtIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4czpzbSJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhzOnNtIl17cGFkZGluZy1sZWZ0''@;'; put 'put ''OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhzOm1kIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeHM6bWQiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''cC1iQHhzOm1kIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeHM6bWQiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeHM6bGciXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDYp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4czpsZyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeHM6bGciXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4czpsZyJd''@;'; put 'put ''e3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4czp4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhzOnhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49InAtYkB4czp4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhzOnhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhzOnh4bCJde3BhZGRpbmctdG9w''@;'; put 'put ''OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhzOnh4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeHM6eHhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PSJwLWxAeHM6eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhzOnh4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4czp4eHhsIl17cGFkZGluZy1yaWdodDp2YXIo''@;'; put 'put ''LS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4czp4eHhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeHM6eHh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''Im0tdEB4czpub25lIl17bWFyZ2luLXRvcDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4czpub25lIl17bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhzOm5vbmUiXXttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhz''@;'; put 'put ''Om5vbmUiXXttYXJnaW4tbGVmdDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4czp4eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4czp4eHhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS1iQHhzOnh4eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhzOnh4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4czp4eHMiXXttYXJnaW4tdG9wOnZh''@;'; put 'put ''cigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhzOnh4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4czp4eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''bS1sQHhzOnh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhzOnhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4czp4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDMpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4czp4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeHM6eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4czpzbSJde21hcmdp''@;'; put 'put ''bi10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeHM6c20iXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeHM6c20iXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0ibS1sQHhzOnNtIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeHM6bWQiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhzOm1kIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQg''@;'; put 'put ''NSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhzOm1kIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4czptZCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhzOmxnIl17''@;'; put 'put ''bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4czpsZyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4czpsZyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJtLWxAeHM6bGciXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4czp4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeHM6eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0t''@;'; put 'put ''XDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeHM6eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhzOnhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeHM6''@;'; put 'put ''eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4czp4eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeHM6eHhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49Im0tbEB4czp4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4czp4eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4czp4eHhsIl17bWFyZ2lu''@;'; put 'put ''LXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhzOnh4eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhzOnh4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH19QG1l''@;'; put 'put ''ZGlhIChtaW4td2lkdGg6NzY4cHgpe1tjZHMtbGF5b3V0Kj0iZ2FwQHNtOm5vbmUiXXtnYXA6MH1bY2RzLWxheW91dCo9ImdhcEBzbTp4eHhzIl17Z2FwOnZhcigtLVwzYjQgMSl9W2Nkcy1sYXlvdXQqPSJnYXBAc206eHhzIl17Z2FwOnZhcigtLVwzYjQgMil9W2Nkcy1sYXlvdXQqPSJnYXBA''@;'; put 'put ''c206eHMiXXtnYXA6dmFyKC0tXDNiNCAzKX1bY2RzLWxheW91dCo9ImdhcEBzbTpzbSJde2dhcDp2YXIoLS1cM2I0IDQpfVtjZHMtbGF5b3V0Kj0iZ2FwQHNtOm1kIl17Z2FwOnZhcigtLVwzYjQgNSl9W2Nkcy1sYXlvdXQqPSJnYXBAc206bGciXXtnYXA6dmFyKC0tXDNiNCA2KX1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImdhcEBzbTp4bCJde2dhcDp2YXIoLS1cM2I0IDcpfVtjZHMtbGF5b3V0Kj0iZ2FwQHNtOnh4bCJde2dhcDp2YXIoLS1cM2I0IDgpfVtjZHMtbGF5b3V0Kj0iZ2FwQHNtOnh4eGwiXXtnYXA6dmFyKC0tXDNiNCA5KX1bY2RzLWxheW91dH49InBAc206bm9uZSJde3BhZGRpbmc6MCFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHNtOm5vbmUiXXttYXJnaW46MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHNtOnh4eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBzbTp4eHhzIl17bWFyZ2luOnZhcigtLVwzYjQgMSkhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0fj0icEBzbTp4eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBzbTp4eHMiXXttYXJnaW46dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHNtOnhzIl17cGFkZGluZzp2YXIoLS1cM2I0IDMpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49Im1Ac206eHMiXXttYXJnaW46dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHNtOnNtIl17cGFkZGluZzp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1Ac206c20iXXttYXJnaW46dmFyKC0tXDNiNCA0KSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHNtOm1kIl17cGFkZGluZzp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1Ac206bWQiXXttYXJnaW46dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHNtOmxnIl17cGFkZGluZzp2YXIoLS1cM2I0IDYp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49Im1Ac206bGciXXttYXJnaW46dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHNtOnhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1Ac206eGwiXXttYXJnaW46dmFyKC0tXDNiNCA3''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHNtOnh4bCJde3BhZGRpbmc6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHNtOnh4bCJde21hcmdpbjp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAc206eHh4bCJde3BhZGRpbmc6dmFyKC0t''@;'; put 'put ''XDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHNtOnh4eGwiXXttYXJnaW46dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAc206bm9uZSJde3BhZGRpbmctbGVmdDowIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0icC15QHNtOm5vbmUiXXtwYWRkaW5nLXRvcDowIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBzbTp4eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAc206eHh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHNtOnh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDIpIWlt''@;'; put 'put ''cG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHNtOnh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14''@;'; put 'put ''QHNtOnhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAc206eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIo''@;'; put 'put ''LS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBzbTpzbSJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHNtOnNtIl17cGFkZGluZy10b3A6dmFyKC0t''@;'; put 'put ''XDNiNCA0KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAc206bWQiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49InAteUBzbTptZCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHNtOmxnIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50O3BhZGRpbmct''@;'; put 'put ''cmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAc206bGciXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBzbTp4bCJde3BhZGRpbmct''@;'; put 'put ''bGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHNtOnhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJwLXhAc206eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAc206eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRh''@;'; put 'put ''bnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAc206eHh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHNt''@;'; put 'put ''Onh4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBzbTpub25lIl17bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS15QHNtOm5vbmUiXXttYXJnaW4tdG9wOjAhaW1wb3J0YW50O21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAc206eHh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDEpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49Im0teUBzbTp4eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHNtOnh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMikhaW1w''@;'; put 'put ''b3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBzbTp4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAc206''@;'; put 'put ''eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAc206eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAz''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAc206c20iXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAc206c20iXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNCkhaW1w''@;'; put 'put ''b3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAc206bWQiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAc206''@;'; put 'put ''bWQiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAc206bGciXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA2''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAc206bGciXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAc206eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDcpIWlt''@;'; put 'put ''cG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAc206eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAc206''@;'; put 'put ''eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHNtOnh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0''@;'; put 'put ''IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBzbTp4eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHNtOnh4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQg''@;'; put 'put ''OSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAc206bm9uZSJde3BhZGRpbmctdG9wOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHNtOm5vbmUiXXtwYWRkaW5nLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0icC1iQHNtOm5vbmUiXXtwYWRkaW5nLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBzbTpub25lIl17cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHNtOnh4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49InAtckBzbTp4eHhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBzbTp4eHhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAc206eHh4cyJde3BhZGRp''@;'; put 'put ''bmctbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBzbTp4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBzbTp4eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0icC1iQHNtOnh4cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHNtOnh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBzbTp4cyJde3BhZGRpbmctdG9wOnZh''@;'; put 'put ''cigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHNtOnhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBzbTp4cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''cC1sQHNtOnhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHNtOnNtIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAc206c20iXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNCkh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHNtOnNtIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAc206c20iXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAc206bWQiXXtw''@;'; put 'put ''YWRkaW5nLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBzbTptZCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAc206bWQiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49InAtbEBzbTptZCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBzbTpsZyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHNtOmxnIl17cGFkZGluZy1yaWdodDp2''@;'; put 'put ''YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBzbTpsZyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHNtOmxnIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''cC10QHNtOnhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAc206eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHNtOnhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA3''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAc206eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAc206eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAc206eHhsIl17''@;'; put 'put ''cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBzbTp4eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBzbTp4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJwLXRAc206eHh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHNtOnh4eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHNtOnh4eGwiXXtwYWRk''@;'; put 'put ''aW5nLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBzbTp4eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHNtOm5vbmUiXXttYXJnaW4tdG9wOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''bS1yQHNtOm5vbmUiXXttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAc206bm9uZSJde21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAc206bm9uZSJde21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHNt''@;'; put 'put ''Onh4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHNtOnh4eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAc206eHh4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAxKSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAc206eHh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHNtOnh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAc206eHhzIl17bWFy''@;'; put 'put ''Z2luLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHNtOnh4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAc206eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJtLXRAc206eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHNtOnhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHNtOnhzIl17bWFyZ2luLWJvdHRvbTp2YXIo''@;'; put 'put ''LS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBzbTp4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHNtOnNtIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBzbTpz''@;'; put 'put ''bSJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBzbTpzbSJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAc206c20iXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49Im0tdEBzbTptZCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAc206bWQiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAc206bWQiXXttYXJnaW4tYm90dG9t''@;'; put 'put ''OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHNtOm1kIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAc206bGciXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1y''@;'; put 'put ''QHNtOmxnIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHNtOmxnIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBzbTpsZyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNikhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHNtOnhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBzbTp4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBzbTp4bCJde21hcmdpbi1i''@;'; put 'put ''b3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAc206eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBzbTp4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0ibS1yQHNtOnh4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBzbTp4eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHNtOnh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwz''@;'; put 'put ''YjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHNtOnh4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHNtOnh4eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAc206''@;'; put 'put ''eHh4bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAc206eHh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXQqPSJnYXBAbWQ6bm9uZSJde2dh''@;'; put 'put ''cDowfVtjZHMtbGF5b3V0Kj0iZ2FwQG1kOnh4eHMiXXtnYXA6dmFyKC0tXDNiNCAxKX1bY2RzLWxheW91dCo9ImdhcEBtZDp4eHMiXXtnYXA6dmFyKC0tXDNiNCAyKX1bY2RzLWxheW91dCo9ImdhcEBtZDp4cyJde2dhcDp2YXIoLS1cM2I0IDMpfVtjZHMtbGF5b3V0Kj0iZ2FwQG1kOnNtIl17''@;'; put 'put ''Z2FwOnZhcigtLVwzYjQgNCl9W2Nkcy1sYXlvdXQqPSJnYXBAbWQ6bWQiXXtnYXA6dmFyKC0tXDNiNCA1KX1bY2RzLWxheW91dCo9ImdhcEBtZDpsZyJde2dhcDp2YXIoLS1cM2I0IDYpfVtjZHMtbGF5b3V0Kj0iZ2FwQG1kOnhsIl17Z2FwOnZhcigtLVwzYjQgNyl9W2Nkcy1sYXlvdXQqPSJn''@;'; put 'put ''YXBAbWQ6eHhsIl17Z2FwOnZhcigtLVwzYjQgOCl9W2Nkcy1sYXlvdXQqPSJnYXBAbWQ6eHh4bCJde2dhcDp2YXIoLS1cM2I0IDkpfVtjZHMtbGF5b3V0fj0icEBtZDpub25lIl17cGFkZGluZzowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbWQ6bm9uZSJde21hcmdpbjowIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49InBAbWQ6eHh4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQG1kOnh4eHMiXXttYXJnaW46dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQG1kOnh4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAyKSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQG1kOnh4cyJde21hcmdpbjp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbWQ6eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDp4cyJde21hcmdpbjp2YXIoLS1cM2I0IDMp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbWQ6c20iXXtwYWRkaW5nOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDpzbSJde21hcmdpbjp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbWQ6bWQiXXtwYWRkaW5nOnZhcigtLVwzYjQg''@;'; put 'put ''NSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDptZCJde21hcmdpbjp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbWQ6bGciXXtwYWRkaW5nOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDpsZyJde21hcmdpbjp2YXIoLS1cM2I0''@;'; put 'put ''IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbWQ6eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDp4bCJde21hcmdpbjp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbWQ6eHhsIl17cGFkZGluZzp2YXIoLS1c''@;'; put 'put ''M2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbWQ6eHhsIl17bWFyZ2luOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBtZDp4eHhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbWQ6eHh4bCJde21hcmdpbjp2''@;'; put 'put ''YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBtZDpub25lIl17cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbWQ6bm9uZSJde3BhZGRpbmctdG9wOjAhaW1wb3J0YW50O3BhZGRpbmctYm90''@;'; put 'put ''dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QG1kOnh4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBtZDp4eHhzIl17cGFkZGluZy10b3A6dmFyKC0t''@;'; put 'put ''XDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbWQ6eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJwLXlAbWQ6eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbWQ6eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7cGFkZGlu''@;'; put 'put ''Zy1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBtZDp4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QG1kOnNtIl17cGFkZGlu''@;'; put 'put ''Zy1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbWQ6c20iXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49InAteEBtZDptZCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QG1kOm1kIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRh''@;'; put 'put ''bnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbWQ6bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBtZDps''@;'; put 'put ''ZyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QG1kOnhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNi''@;'; put 'put ''NCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbWQ6eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBtZDp4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNi''@;'; put 'put ''NCA4KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBtZDp4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49InAteEBtZDp4eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbWQ6eHh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O3BhZGRpbmct''@;'; put 'put ''Ym90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QG1kOm5vbmUiXXttYXJnaW4tbGVmdDowIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbWQ6bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnQ7bWFyZ2lu''@;'; put 'put ''LWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBtZDp4eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QG1kOnh4eHMiXXttYXJnaW4tdG9wOnZhcigt''@;'; put 'put ''LVwzYjQgMSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAbWQ6eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0ibS15QG1kOnh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBtZDp4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50O21hcmdpbi1yaWdo''@;'; put 'put ''dDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBtZDp4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBtZDpzbSJde21hcmdpbi1sZWZ0OnZh''@;'; put 'put ''cigtLVwzYjQgNCkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBtZDpzbSJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49Im0teEBtZDptZCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBtZDptZCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRv''@;'; put 'put ''bTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBtZDpsZyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBtZDpsZyJde21hcmdpbi10b3A6dmFy''@;'; put 'put ''KC0tXDNiNCA2KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBtZDp4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49Im0teUBtZDp4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBtZDp4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDttYXJnaW4tcmln''@;'; put 'put ''aHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbWQ6eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QG1kOnh4eGwiXXttYXJnaW4tbGVm''@;'; put 'put ''dDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbWQ6eHh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49InAtdEBtZDpub25lIl17cGFkZGluZy10b3A6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbWQ6bm9uZSJde3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbWQ6bm9uZSJde3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0icC1sQG1kOm5vbmUiXXtwYWRkaW5nLWxlZnQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbWQ6eHh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQG1kOnh4eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQg''@;'; put 'put ''MSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQG1kOnh4eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBtZDp4eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QG1k''@;'; put 'put ''Onh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQG1kOnh4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbWQ6eHhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAyKSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbWQ6eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QG1kOnhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbWQ6eHMiXXtwYWRk''@;'; put 'put ''aW5nLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQG1kOnhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbWQ6eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJwLXRAbWQ6c20iXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBtZDpzbSJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbWQ6c20iXXtwYWRkaW5nLWJvdHRvbTp2''@;'; put 'put ''YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBtZDpzbSJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBtZDptZCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1y''@;'; put 'put ''QG1kOm1kIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBtZDptZCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQG1kOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNSkh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QG1kOmxnIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbWQ6bGciXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQG1kOmxnIl17cGFk''@;'; put 'put ''ZGluZy1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbWQ6bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbWQ6eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49InAtckBtZDp4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbWQ6eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBtZDp4bCJde3BhZGRpbmctbGVmdDp2''@;'; put 'put ''YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBtZDp4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBtZDp4eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''cC1iQG1kOnh4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQG1kOnh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBtZDp4eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNi''@;'; put 'put ''NCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbWQ6eHh4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbWQ6eHh4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1s''@;'; put 'put ''QG1kOnh4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbWQ6bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbWQ6bm9uZSJde21hcmdpbi1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''Im0tYkBtZDpub25lIl17bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBtZDpub25lIl17bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbWQ6eHh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PSJtLXJAbWQ6eHh4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBtZDp4eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBtZDp4eHhzIl17bWFyZ2luLWxlZnQ6dmFy''@;'; put 'put ''KC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbWQ6eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBtZDp4eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJA''@;'; put 'put ''bWQ6eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBtZDp4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBtZDp4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAzKSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbWQ6eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbWQ6eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQG1kOnhzIl17bWFyZ2lu''@;'; put 'put ''LWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbWQ6c20iXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQG1kOnNtIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0ibS1iQG1kOnNtIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBtZDpzbSJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QG1kOm1kIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDUp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBtZDptZCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBtZDptZCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAbWQ6bWQiXXtt''@;'; put 'put ''YXJnaW4tbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBtZDpsZyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbWQ6bGciXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJtLWJAbWQ6bGciXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQG1kOmxnIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbWQ6eGwiXXttYXJnaW4tdG9wOnZhcigtLVwz''@;'; put 'put ''YjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQG1kOnhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQG1kOnhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBtZDp4''@;'; put 'put ''bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QG1kOnh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbWQ6eHhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0ibS1iQG1kOnh4bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAbWQ6eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbWQ6eHh4bCJde21hcmdpbi10''@;'; put 'put ''b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbWQ6eHh4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBtZDp4eHhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49Im0tbEBtZDp4eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXQqPSJnYXBAbGc6bm9uZSJde2dhcDowfVtjZHMtbGF5b3V0Kj0iZ2FwQGxnOnh4eHMiXXtnYXA6dmFyKC0tXDNiNCAxKX1b''@;'; put 'put ''Y2RzLWxheW91dCo9ImdhcEBsZzp4eHMiXXtnYXA6dmFyKC0tXDNiNCAyKX1bY2RzLWxheW91dCo9ImdhcEBsZzp4cyJde2dhcDp2YXIoLS1cM2I0IDMpfVtjZHMtbGF5b3V0Kj0iZ2FwQGxnOnNtIl17Z2FwOnZhcigtLVwzYjQgNCl9W2Nkcy1sYXlvdXQqPSJnYXBAbGc6bWQiXXtnYXA6dmFy''@;'; put 'put ''KC0tXDNiNCA1KX1bY2RzLWxheW91dCo9ImdhcEBsZzpsZyJde2dhcDp2YXIoLS1cM2I0IDYpfVtjZHMtbGF5b3V0Kj0iZ2FwQGxnOnhsIl17Z2FwOnZhcigtLVwzYjQgNyl9W2Nkcy1sYXlvdXQqPSJnYXBAbGc6eHhsIl17Z2FwOnZhcigtLVwzYjQgOCl9W2Nkcy1sYXlvdXQqPSJnYXBAbGc6''@;'; put 'put ''eHh4bCJde2dhcDp2YXIoLS1cM2I0IDkpfVtjZHMtbGF5b3V0fj0icEBsZzpub25lIl17cGFkZGluZzowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbGc6bm9uZSJde21hcmdpbjowIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbGc6eHh4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAxKSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQGxnOnh4eHMiXXttYXJnaW46dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQGxnOnh4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQGxnOnh4cyJde21hcmdpbjp2YXIoLS1cM2I0''@;'; put 'put ''IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbGc6eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBsZzp4cyJde21hcmdpbjp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbGc6c20iXXtwYWRkaW5nOnZhcigtLVwz''@;'; put 'put ''YjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBsZzpzbSJde21hcmdpbjp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbGc6bWQiXXtwYWRkaW5nOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBsZzptZCJde21hcmdpbjp2YXIoLS1c''@;'; put 'put ''M2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbGc6bGciXXtwYWRkaW5nOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBsZzpsZyJde21hcmdpbjp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbGc6eGwiXXtwYWRkaW5nOnZhcigt''@;'; put 'put ''LVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBsZzp4bCJde21hcmdpbjp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbGc6eHhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbGc6eHhsIl17bWFyZ2luOnZh''@;'; put 'put ''cigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBsZzp4eHhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbGc6eHh4bCJde21hcmdpbjp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBsZzpub25lIl17''@;'; put 'put ''cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbGc6bm9uZSJde3BhZGRpbmctdG9wOjAhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QGxnOnh4eHMiXXtwYWRkaW5n''@;'; put 'put ''LWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBsZzp4eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbGc6eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbGc6eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAyKSFpbXBv''@;'; put 'put ''cnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbGc6eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBs''@;'; put 'put ''Zzp4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QGxnOnNtIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0t''@;'; put 'put ''XDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbGc6c20iXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBsZzptZCJde3BhZGRpbmctbGVmdDp2YXIoLS1c''@;'; put 'put ''M2I0IDUpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QGxnOm1kIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PSJwLXhAbGc6bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBsZzpsZyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50O3BhZGRpbmctYm90''@;'; put 'put ''dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QGxnOnhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbGc6eGwiXXtwYWRkaW5nLXRv''@;'; put 'put ''cDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBsZzp4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49InAteUBsZzp4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBsZzp4eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0''@;'; put 'put ''YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbGc6eHh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QGxn''@;'; put 'put ''Om5vbmUiXXttYXJnaW4tbGVmdDowIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbGc6bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBsZzp4eHhzIl17bWFy''@;'; put 'put ''Z2luLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QGxnOnh4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAbGc6eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QGxnOnh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRh''@;'; put 'put ''bnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBsZzp4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBsZzp4cyJd''@;'; put 'put ''e21hcmdpbi10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBsZzpzbSJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDQpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49Im0teUBsZzpzbSJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBsZzptZCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0''@;'; put 'put ''YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBsZzptZCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBsZzpsZyJd''@;'; put 'put ''e21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBsZzpsZyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49Im0teEBsZzp4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBsZzp4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRh''@;'; put 'put ''bnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBsZzp4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbGc6eHhs''@;'; put 'put ''Il17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QGxnOnh4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA5''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbGc6eHh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBsZzpub25lIl17cGFkZGluZy10b3A6MCFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJwLXJAbGc6bm9uZSJde3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbGc6bm9uZSJde3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQGxnOm5vbmUiXXtwYWRkaW5nLWxlZnQ6MCFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJwLXRAbGc6eHh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQGxnOnh4eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQGxnOnh4eHMiXXtwYWRkaW5nLWJv''@;'; put 'put ''dHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBsZzp4eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QGxnOnh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0icC1yQGxnOnh4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbGc6eHhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbGc6eHhzIl17cGFkZGluZy1sZWZ0OnZh''@;'; put 'put ''cigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QGxnOnhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbGc6eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1i''@;'; put 'put ''QGxnOnhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbGc6eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbGc6c20iXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDQpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49InAtckBsZzpzbSJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbGc6c20iXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBsZzpzbSJde3Bh''@;'; put 'put ''ZGRpbmctbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBsZzptZCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQGxnOm1kIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49InAtYkBsZzptZCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQGxnOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QGxnOmxnIl17cGFkZGluZy10b3A6dmFy''@;'; put 'put ''KC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbGc6bGciXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQGxnOmxnIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJw''@;'; put 'put ''LWxAbGc6bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbGc6eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBsZzp4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA3KSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbGc6eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBsZzp4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBsZzp4eGwiXXtw''@;'; put 'put ''YWRkaW5nLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBsZzp4eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQGxnOnh4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0icC1sQGxnOnh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBsZzp4eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbGc6eHh4bCJde3BhZGRpbmct''@;'; put 'put ''cmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbGc6eHh4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQGxnOnh4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJtLXRAbGc6bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbGc6bm9uZSJde21hcmdpbi1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBsZzpub25lIl17bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49Im0tbEBsZzpub25lIl17bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbGc6eHh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbGc6eHh4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49Im0tYkBsZzp4eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBsZzp4eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbGc6eHhzIl17bWFy''@;'; put 'put ''Z2luLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBsZzp4eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbGc6eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49Im0tbEBsZzp4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBsZzp4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbGc6eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0t''@;'; put 'put ''XDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbGc6eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQGxnOnhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbGc6''@;'; put 'put ''c20iXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQGxnOnNtIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQGxnOnNtIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49Im0tbEBsZzpzbSJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QGxnOm1kIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBsZzptZCJde21hcmdpbi1yaWdodDp2''@;'; put 'put ''YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBsZzptZCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAbGc6bWQiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0t''@;'; put 'put ''dEBsZzpsZyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbGc6bGciXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbGc6bGciXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNikhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQGxnOmxnIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbGc6eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQGxnOnhsIl17bWFyZ2luLXJp''@;'; put 'put ''Z2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQGxnOnhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBsZzp4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0ibS10QGxnOnh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbGc6eHhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQGxnOnh4bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNi''@;'; put 'put ''NCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAbGc6eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbGc6eHh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbGc6eHh4''@;'; put 'put ''bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBsZzp4eHhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBsZzp4eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBv''@;'; put 'put ''cnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjE0NDBweCl7W2Nkcy1sYXlvdXQqPSJnYXBAeGw6bm9uZSJde2dhcDowfVtjZHMtbGF5b3V0Kj0iZ2FwQHhsOnh4eHMiXXtnYXA6dmFyKC0tXDNiNCAxKX1bY2RzLWxheW91dCo9ImdhcEB4bDp4eHMiXXtnYXA6dmFyKC0tXDNiNCAyKX1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImdhcEB4bDp4cyJde2dhcDp2YXIoLS1cM2I0IDMpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhsOnNtIl17Z2FwOnZhcigtLVwzYjQgNCl9W2Nkcy1sYXlvdXQqPSJnYXBAeGw6bWQiXXtnYXA6dmFyKC0tXDNiNCA1KX1bY2RzLWxheW91dCo9ImdhcEB4bDpsZyJde2dhcDp2YXIoLS1cM2I0''@;'; put 'put ''IDYpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhsOnhsIl17Z2FwOnZhcigtLVwzYjQgNyl9W2Nkcy1sYXlvdXQqPSJnYXBAeGw6eHhsIl17Z2FwOnZhcigtLVwzYjQgOCl9W2Nkcy1sYXlvdXQqPSJnYXBAeGw6eHh4bCJde2dhcDp2YXIoLS1cM2I0IDkpfVtjZHMtbGF5b3V0fj0icEB4bDpub25lIl17''@;'; put 'put ''cGFkZGluZzowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeGw6bm9uZSJde21hcmdpbjowIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeGw6eHh4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhsOnh4eHMiXXttYXJnaW46dmFyKC0tXDNi''@;'; put 'put ''NCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhsOnh4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhsOnh4cyJde21hcmdpbjp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeGw6eHMiXXtwYWRkaW5nOnZhcigt''@;'; put 'put ''LVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4bDp4cyJde21hcmdpbjp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeGw6c20iXXtwYWRkaW5nOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4bDpzbSJde21hcmdpbjp2YXIo''@;'; put 'put ''LS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeGw6bWQiXXtwYWRkaW5nOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4bDptZCJde21hcmdpbjp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeGw6bGciXXtwYWRkaW5nOnZh''@;'; put 'put ''cigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4bDpsZyJde21hcmdpbjp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeGw6eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4bDp4bCJde21hcmdpbjp2''@;'; put 'put ''YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeGw6eHhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeGw6eHhsIl17bWFyZ2luOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4bDp4eHhsIl17cGFk''@;'; put 'put ''ZGluZzp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeGw6eHh4bCJde21hcmdpbjp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4bDpub25lIl17cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJwLXlAeGw6bm9uZSJde3BhZGRpbmctdG9wOjAhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhsOnh4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1c''@;'; put 'put ''M2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4bDp4eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeGw6eHhzIl17cGFkZGluZy1sZWZ0OnZhcigt''@;'; put 'put ''LVwzYjQgMikhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeGw6eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJwLXhAeGw6eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4bDp4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50O3BhZGRpbmct''@;'; put 'put ''Ym90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhsOnNtIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeGw6c20iXXtwYWRkaW5n''@;'; put 'put ''LXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4bDptZCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0fj0icC15QHhsOm1kIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeGw6bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRh''@;'; put 'put ''bnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4bDpsZyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhsOnhs''@;'; put 'put ''Il17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeGw6eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0''@;'; put 'put ''IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4bDp4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4bDp4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0''@;'; put 'put ''IDgpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4bDp4eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PSJwLXlAeGw6eHh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhsOm5vbmUiXXttYXJnaW4tbGVmdDowIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6MCFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeGw6bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4bDp4eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigt''@;'; put 'put ''LVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhsOnh4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeGw6eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0t''@;'; put 'put ''XDNiNCAyKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhsOnh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49Im0teEB4bDp4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4bDp4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2''@;'; put 'put ''YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4bDpzbSJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4bDpzbSJde21hcmdpbi10b3A6dmFyKC0t''@;'; put 'put ''XDNiNCA0KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4bDptZCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49Im0teUB4bDptZCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4bDpsZyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2''@;'; put 'put ''YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4bDpsZyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4bDp4bCJde21hcmdpbi1sZWZ0OnZhcigt''@;'; put 'put ''LVwzYjQgNykhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4bDp4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49Im0teEB4bDp4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeGw6eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDttYXJnaW4tYm90dG9t''@;'; put 'put ''OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhsOnh4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeGw6eHh4bCJde21hcmdpbi10b3A6''@;'; put 'put ''dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4bDpub25lIl17cGFkZGluZy10b3A6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeGw6bm9uZSJde3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJwLWJAeGw6bm9uZSJde3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhsOm5vbmUiXXtwYWRkaW5nLWxlZnQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeGw6eHh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMSkh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhsOnh4eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhsOnh4eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4bDp4''@;'; put 'put ''eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhsOnh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhsOnh4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeGw6eHhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeGw6eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhsOnhzIl17cGFk''@;'; put 'put ''ZGluZy10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeGw6eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhsOnhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJwLWxAeGw6eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeGw6c20iXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4bDpzbSJde3BhZGRpbmctcmlnaHQ6dmFy''@;'; put 'put ''KC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeGw6c20iXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4bDpzbSJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAt''@;'; put 'put ''dEB4bDptZCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhsOm1kIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4bDptZCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNSkh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhsOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhsOmxnIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeGw6bGciXXtwYWRk''@;'; put 'put ''aW5nLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhsOmxnIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeGw6bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJwLXRAeGw6eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4bDp4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeGw6eGwiXXtwYWRkaW5nLWJvdHRvbTp2''@;'; put 'put ''YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4bDp4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4bDp4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAt''@;'; put 'put ''ckB4bDp4eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhsOnh4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhsOnh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0''@;'; put 'put ''IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4bDp4eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeGw6eHh4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeGw6''@;'; put 'put ''eHh4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhsOnh4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeGw6bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJtLXJAeGw6bm9uZSJde21hcmdpbi1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4bDpub25lIl17bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4bDpub25lIl17bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PSJtLXRAeGw6eHh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeGw6eHh4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4bDp4eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIo''@;'; put 'put ''LS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4bDp4eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeGw6eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4''@;'; put 'put ''bDp4eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeGw6eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4bDp4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDIpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4bDp4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeGw6eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeGw6eHMiXXttYXJnaW4t''@;'; put 'put ''Ym90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhsOnhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeGw6c20iXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0ibS1yQHhsOnNtIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhsOnNtIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4bDpzbSJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQg''@;'; put 'put ''NCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhsOm1kIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4bDptZCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4bDptZCJde21h''@;'; put 'put ''cmdpbi1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeGw6bWQiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4bDpsZyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJtLXJAeGw6bGciXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeGw6bGciXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhsOmxnIl17bWFyZ2luLWxlZnQ6dmFyKC0t''@;'; put 'put ''XDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeGw6eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhsOnhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhsOnhs''@;'; put 'put ''Il17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4bDp4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhsOnh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJtLXJAeGw6eHhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhsOnh4bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeGw6eHhsIl17bWFyZ2luLWxl''@;'; put 'put ''ZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeGw6eHh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeGw6eHh4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49Im0tYkB4bDp4eHhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4bDp4eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9fVtjZHMtbGF5b3V0PW5vLXNjcm9sbGluZ117b3ZlcmZsb3c6aGlkZGVuIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49ImNvbnRhaW5lcjpmaWxsIl0sW2Nkcy1sYXlvdXR+PWZpbGxde3dpZHRoOjEwMCUhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iY29udGFpbmVyOmNlbnRlciJde21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OmF1dG99W2Nkcy1sYXlvdXR+PSJjb250''@;'; put 'put ''YWluZXI6eHMiXXt3aWR0aDoxMDAlO21heC13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC13aWR0aC14cyl9W2Nkcy1sYXlvdXR+PSJjb250YWluZXI6c20iXXt3aWR0aDoxMDAlO21heC13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC13aWR0aC1zbSl9W2Nkcy1sYXlvdXR+PSJj''@;'; put 'put ''b250YWluZXI6bWQiXXt3aWR0aDoxMDAlO21heC13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC13aWR0aC1tZCl9W2Nkcy1sYXlvdXR+PSJjb250YWluZXI6bGciXXt3aWR0aDoxMDAlO21heC13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC13aWR0aC1sZyl9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJjb250YWluZXI6eGwiXXt3aWR0aDoxMDAlO21heC13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC13aWR0aC14bCl9Kiw6YWZ0ZXIsOmJlZm9yZSw6aG9zdHtib3gtc2l6aW5nOmJvcmRlci1ib3h9W2Nkcy10aGVtZX49ZGFya117LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3It''@;'; put 'put ''NTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0zMDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTEwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsYWNrKTstLWNkcy1n''@;'; put 'put ''bG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS00MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTIwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1j''@;'; put 'put ''b2xvci12aXNpdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItMzAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci0yMDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9y''@;'; put 'put ''LTQ1MDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzYWJsZWQtYnV0dG9uOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTkwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzYWJsZWQ6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1pbmZvLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0yMDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1Y2Nlc3MtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1n''@;'; put 'put ''cmVlbi00MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXdhcm5pbmctaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctNjAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kYW5nZXItaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNDAwKTstLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS1uZXV0cmFsLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1vbi1jb2xvcmJnOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMDApOy0tY2RzLWFsaWFzLXR5cG9n''@;'; put 'put ''cmFwaHktY29sb3ItMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmxhY2spOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0zMDA6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3Ry''@;'; put 'put ''dWN0aW9uLTUwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkLWJ1dHRvbjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi05MDApOy0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktZGlzYWJsZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWluZm8taG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTIwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWNjZXNzLWhvdmVy''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNDAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXdhcm5pbmctaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctNjAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRhbmdlci1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LXJlZC00MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbmV1dHJhbC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1vbi1jb2xvcmJnOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEw''@;'; put 'put ''MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNDAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3ItaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTIwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1saW5rLWNvbG9yLXZpc2l0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMzAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0yMDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGlu''@;'; put 'put ''ay1jb2xvci1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtYXBwLWJhY2tncm91bmQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZHJvcC1iYWNr''@;'; put 'put ''Z3JvdW5kOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0zMDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi05MDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC10''@;'; put 'put ''aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFj''@;'; put 'put ''a2dyb3VuZC1kYXJrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTExMDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC1pbnZlcnNlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNv''@;'; put 'put ''bnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2UtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC1pbnZlcnNlLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMw''@;'; put 'put ''MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibGFjayk7LS1jZHMtYWxpYXMtb2JqZWN0LW92ZXJsYXktYmFja2dyb3VuZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi05MDApOy0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTAwKTstLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNDAwKTstLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVy''@;'; put 'put ''LWNvbG9yLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LXNoYWRvdy0xMDA6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikgMCB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9w''@;'; put 'put ''YWNpdHktMzAwKTstLWNkcy1hbGlhcy1vYmplY3Qtc2hhZG93LTIwMDowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSAwIHZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0yMDApOy0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMzAwOjAg''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpIDAgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIw''@;'; put 'put ''MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9u''@;'; put 'put ''LTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLXNlbGVjdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29u''@;'; put 'put ''c3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1jb25zdHJ1Y3Rpb24tODAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFj''@;'; put 'put ''a2dyb3VuZC1zZWxlY3RlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWRpc2FibGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTcwMCk7LS1jZHMtYWxp''@;'; put 'put ''YXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaGlnaGxpZ2h0OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS00MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTExMDAp''@;'; put 'put ''Oy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtYWN0aXZlOnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3Vu''@;'; put 'put ''ZC1zaGFkZS1zZWxlY3RlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02''@;'; put 'put ''MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMzAwKTst''@;'; put 'put ''LWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8tc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwMCk7LS1jZHMtYWxpYXMt''@;'; put 'put ''b2JqZWN0LWludGVyYWN0aW9uLWluZm8tY2xpY2s6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8tc2Vjb25kYXJ5LWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0xMDAwKTstLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTQwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXN1Y2Nlc3MtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50''@;'; put 'put ''ZXJhY3Rpb24tc3VjY2Vzcy1jbGljazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXN1Y2Nlc3Mtc2Vjb25kYXJ5LWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMTAwMCk7LS1jZHMtYWxpYXMtb2JqZWN0''@;'; put 'put ''LWludGVyYWN0aW9uLXdhcm5pbmctaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctMzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24td2FybmluZy1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctNTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50''@;'; put 'put ''ZXJhY3Rpb24td2FybmluZy1jbGljazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy01MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLXNlY29uZGFyeS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy0xMDAwKTstLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtaW50ZXJhY3Rpb24tZGFuZ2VyLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTQwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWRhbmdlci1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rp''@;'; put 'put ''b24tZGFuZ2VyLWNsaWNrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWRhbmdlci1zZWNvbmRhcnktaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMTAwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9u''@;'; put 'put ''LW5ldXRyYWwtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tbmV1dHJhbC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNDAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50''@;'; put 'put ''ZXJhY3Rpb24tbmV1dHJhbC1jbGljazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi00MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1uZXV0cmFsLXNlY29uZGFyeS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2Rz''@;'; put 'put ''LWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbnZlcnNlLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTcwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWludmVyc2UtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgw''@;'; put 'put ''MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWludmVyc2UtY2xpY2s6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwKTstLWNkcy1hbGlhcy1zdGF0dXMtdGludDp0cmFuc3BhcmVudDstLWNkcy1hbGlhcy1zdGF0dXMtaW5mbzp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLWJsdWUtNDAwKTstLWNkcy1hbGlhcy1zdGF0dXMtaW5mby10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1zdWNj''@;'; put 'put ''ZXNzOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNTAwKTstLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcy10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tODAwKTstLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcy1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVu''@;'; put 'put ''LTYwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmc6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS00MDApOy0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS05MDApOy0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLXNoYWRl''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTAwKTstLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNjAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTUwMCk7LS1jZHMt''@;'; put 'put ''YWxpYXMtc3RhdHVzLWRhbmdlci10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTkwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlci1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC02MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXItZGFyazp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLXJlZC05MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2Rz''@;'; put 'put ''LWFsaWFzLXN0YXR1cy1uZXV0cmFsLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTQwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVk''@;'; put 'put ''LXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWdyYXk6dmFyKC0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1jb25zdHJ1Y3Rpb24tMzAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWdyYXktdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWdyYXktc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAw''@;'; put 'put ''KTstLWNkcy1hbGlhcy11dGlsaXR5LWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTMwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ibHVlLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTEwMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktYmx1ZS1zaGFkZTp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLWJsdWUtMjAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWxpZ2h0LWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1saWdodC1ibHVlLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTEwMDApOy0tY2RzLWFs''@;'; put 'put ''aWFzLXV0aWxpdHktbGlnaHQtYmx1ZS1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWRhcmstYmx1ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTIwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1kYXJrLWJsdWUtdGludDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTEwMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktZGFyay1ibHVlLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtNTApOy0tY2RzLWFsaWFzLXV0aWxpdHktZ3JlZW46dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi00MDApOy0tY2Rz''@;'; put 'put ''LWFsaWFzLXV0aWxpdHktZ3JlZW4tdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTEwMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktZ3JlZW4tc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0yMDApOy0tY2RzLWFsaWFzLXV0aWxpdHkteWVsbG93OnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtY29sb3Itb2NocmUtNDAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXllbGxvdy10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtOTAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXllbGxvdy1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTMwMCk7LS1jZHMtYWxp''@;'; put 'put ''YXMtdXRpbGl0eS1yZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNTAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXJlZC10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTEwMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktcmVkLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVk''@;'; put 'put ''LTIwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS10YW5nZXJpbmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtNjAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXRhbmdlcmluZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTEwMDApOy0tY2RzLWFsaWFzLXV0aWxp''@;'; put 'put ''dHktdGFuZ2VyaW5lLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTQwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS12aW9sZXQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNDAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXZpb2xldC10aW50OnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtY29sb3ItdmlvbGV0LTEwMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktdmlvbGV0LXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTIwMCk7LS1jZHMtYWxpYXMtdml6LWJvcmRlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS01MCk7LS1jZHMtYWxpYXMtdml6''@;'; put 'put ''LWdlbmVyYWwtMTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNDAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xLWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTQwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC01''@;'; put 'put ''MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTItdmlvbGV0OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTQwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMzp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtMjAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0zLWFxdWE6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTIwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTQwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNC1saW1lOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGltZS0zMDApOy0tY2RzLWFs''@;'; put 'put ''aWFzLXZpei1nZW5lcmFsLTU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTQwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNS1ibHVlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0yMDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTY6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1s''@;'; put 'put ''aW1lLTQwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNi1hcXVhOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS01MCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNzp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTMwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNy12aW9s''@;'; put 'put ''ZXQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMjAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC04OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS00MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTgtbGltZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtMTAwKTstLWNk''@;'; put 'put ''cy1hbGlhcy12aXotZ2VuZXJhbC05OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGltZS0yMDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTktYmx1ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMzAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xMDp2YXIoLS1jZHMtZ2xvYmFsLWNv''@;'; put 'put ''bG9yLXZpb2xldC0zMDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTEwLWxpbWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTUwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xMTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNDAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0x''@;'; put 'put ''MS1hcXVhOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS00MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTEyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtMTAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xMi12aW9sZXQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQt''@;'; put 'put ''NTApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTEzOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTQwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTMtdmlvbGV0OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTMwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTQ6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0yMDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTE0LWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xNTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXBpbmstMzAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy12aXotZ2VuZXJhbC0xNS1hcXVhOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0zMDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTE2OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtMzAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xNi1saW1lOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItbGltZS0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS1uZXV0cmFsOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMCk7LS1jZHMtYWxpYXMtdml6LXNldmVyaXR5LXN1Y2Nlc3M6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MDApOy0tY2RzLWFs''@;'; put 'put ''aWFzLXZpei1zZXZlcml0eS13YXJuaW5nOnZhcigtLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTMwMCk7LS1jZHMtYWxpYXMtdml6LXNldmVyaXR5LXdhcm5pbmctbGlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctMzAwKTstLWNkcy1hbGlhcy12aXotc2V2ZXJpdHktaW1tZWRp''@;'; put 'put ''YXRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNldmVyaXR5LWNyaXRpY2FsOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNldmVyaXR5LWZyZWUtc3BhY2UtZmlsbDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtNTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTEwMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS05MDApOy0t''@;'; put 'put ''Y2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJs''@;'; put 'put ''dWUtNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29s''@;'; put 'put ''b3ItYmx1ZS00MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0yMDApOy0tY2RzLWFsaWFzLXZp''@;'; put 'put ''ei1zZXF1ZW50aWFsLWJsdWUtOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0xMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtMTAwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC01MDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0xMDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTkwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LXZpb2xldC04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTYwMCk7LS1jZHMt''@;'; put 'put ''YWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC01MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlh''@;'; put 'put ''bC12aW9sZXQtNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTMwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC05MDA6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtMTAwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC01MCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtNTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hy''@;'; put 'put ''ZS0xMDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS05MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTgwMCk7LS1jZHMtYWxpYXMtdml6''@;'; put 'put ''LXNlcXVlbnRpYWwtb2NocmUtMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTUwMDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTUwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1v''@;'; put 'put ''Y2hyZS0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTIwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMTAwKTstLWNkcy1hbGlhcy12''@;'; put 'put ''aXotc2VxdWVudGlhbC1vY2hyZS0xMDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtNTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTEwMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtMTAwOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS05MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS03''@;'; put 'put ''MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS01MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50''@;'; put 'put ''aWFsLWFxdWEtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS00MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtODAwOnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtY29sb3ItYXF1YS0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0xMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtMTAwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNTApOy0tY2RzLWFs''@;'; put 'put ''aWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMTAwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tOTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVl''@;'; put 'put ''bi0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tNDAwOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItZ3JlZW4tNjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTQwMCk7LS1jZHMt''@;'; put 'put ''YWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdy''@;'; put 'put ''ZWVuLTkwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tMTAwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTUwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtNTA6dmFyKC0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1yZWQtMTAwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTEwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC05MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtODAwKTstLWNkcy1hbGlhcy12aXot''@;'; put 'put ''c2VxdWVudGlhbC1yZWQtMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC01MDA6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1yZWQtNTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTcwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC0zMDApOy0tY2RzLWFsaWFz''@;'; put 'put ''LXZpei1zZXF1ZW50aWFsLXJlZC04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTEwMDA6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1yZWQtNTApfTpyb290ey0tY2RzLWdsb2JhbC1iYXNlOjIwfWh0bWx7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtsaW5lLWhlaWdodDoxLjE1Oy1tcy10ZXh0LXNpemUtYWRqdXN0OjEwMCU7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCV9Ym9keXttYXJnaW46''@;'; put 'put ''MH1hcnRpY2xlLGFzaWRlLGRldGFpbHMsZmlnY2FwdGlvbixmaWd1cmUsZm9vdGVyLGhlYWRlcixtYWluLG1lbnUsbmF2LHNlY3Rpb24sc3VtbWFyeXtkaXNwbGF5OmJsb2NrfWF1ZGlvLGNhbnZhcyxwcm9ncmVzcyx2aWRlb3tkaXNwbGF5OmlubGluZS1ibG9ja31hdWRpbzpub3QoW2NvbnRy''@;'; put 'put ''b2xzXSl7ZGlzcGxheTpub25lO2hlaWdodDowfXByb2dyZXNze3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfXRlbXBsYXRlLFtoaWRkZW5de2Rpc3BsYXk6bm9uZX1he2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC10ZXh0LWRlY29yYXRpb24tc2tpcDpvYmplY3RzfWE6YWN0''@;'; put 'put ''aXZlLGE6aG92ZXJ7b3V0bGluZS13aWR0aDowfWFiYnJbdGl0bGVde2JvcmRlci1ib3R0b206bm9uZTt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9YixzdHJv''@;'; put 'put ''bmd7Zm9udC13ZWlnaHQ6aW5oZXJpdH1iLHN0cm9uZ3tmb250LXdlaWdodDpib2xkZXJ9ZGZue2ZvbnQtc3R5bGU6aXRhbGljfWgxe2ZvbnQtc2l6ZToyZW07bWFyZ2luOi42N2VtIDB9bWFya3tiYWNrZ3JvdW5kLWNvbG9yOiNmZjA7Y29sb3I6IzAwMH1zbWFsbHtmb250LXNpemU6ODAlfXN1''@;'; put 'put ''YixzdXB7Zm9udC1zaXplOjc1JTtsaW5lLWhlaWdodDowO3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfXN1Yntib3R0b206LS4yNWVtfXN1cHt0b3A6LS41ZW19aW1ne2JvcmRlci1zdHlsZTpub25lfXN2Zzpub3QoOnJvb3Qpe292ZXJmbG93OmhpZGRlbn1jb2Rl''@;'; put 'put ''LGtiZCxwcmUsc2FtcHtmb250LWZhbWlseTptb25vc3BhY2U7Zm9udC1zaXplOjFlbX1maWd1cmV7bWFyZ2luOjFlbSA0MHB4fWhye2JveC1zaXppbmc6Y29udGVudC1ib3g7aGVpZ2h0OjA7b3ZlcmZsb3c6dmlzaWJsZX1idXR0b24saW5wdXQsb3B0Z3JvdXAsc2VsZWN0LHRleHRhcmVhe2Zv''@;'; put 'put ''bnQ6aW5oZXJpdDttYXJnaW46MH10ZXh0YXJlYXtsaW5lLWhlaWdodDoxLjE1fW9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OjcwMH1idXR0b24saW5wdXR7b3ZlcmZsb3c6dmlzaWJsZX1idXR0b24sc2VsZWN0e3RleHQtdHJhbnNmb3JtOm5vbmV9YnV0dG9uLGh0bWwgW3R5cGU9YnV0dG9uXSxbdHlw''@;'; put 'put ''ZT1yZXNldF0sW3R5cGU9c3VibWl0XXstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9ufWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixbdHlwZT1idXR0b25dOjotbW96LWZvY3VzLWlubmVyLFt0eXBlPXJlc2V0XTo6LW1vei1mb2N1cy1pbm5lcixbdHlwZT1zdWJtaXRdOjotbW96LWZvY3VzLWlu''@;'; put 'put ''bmVye2JvcmRlci1zdHlsZTpub25lO3BhZGRpbmc6MH1maWVsZHNldHtib3JkZXI6MXB4IHNvbGlkIHNpbHZlcjttYXJnaW46MCAycHg7cGFkZGluZzouMzVlbSAuNjI1ZW0gLjc1ZW19bGVnZW5ke2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjppbmhlcml0O2Rpc3BsYXk6dGFibGU7bWF4''@;'; put 'put ''LXdpZHRoOjEwMCU7cGFkZGluZzowO3doaXRlLXNwYWNlOm5vcm1hbH10ZXh0YXJlYXtvdmVyZmxvdzphdXRvfVt0eXBlPWNoZWNrYm94XSxbdHlwZT1yYWRpb117Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MH1bdHlwZT1udW1iZXJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9u''@;'; put 'put ''LFt0eXBlPW51bWJlcl06Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99W3R5cGU9c2VhcmNoXXstd2Via2l0LWFwcGVhcmFuY2U6dGV4dGZpZWxkO291dGxpbmUtb2Zmc2V0Oi0ycHh9W3R5cGU9c2VhcmNoXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbixbdHlw''@;'; put 'put ''ZT1zZWFyY2hdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbjtmb250OmluaGVyaXR9OnJvb3R7LS1jbHItY29sb3ItbmV1dHJhbC0wOmhzbCgxOTgs''@;'; put 'put ''IDAlLCAxMDAlKTstLWNsci1jb2xvci1uZXV0cmFsLTUwOmhzbCgxOTgsIDAlLCA5OCUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtMTAwOmhzbCgxOTgsIDAlLCA5NSUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtMjAwOmhzbCgxOTgsIDAlLCA5MSUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtMzAwOmhzbCgx''@;'; put 'put ''OTgsIDAlLCA4NyUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtNDAwOmhzbCgxOTgsIDAlLCA4MCUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtNTAwOmhzbCgxOTgsIDAlLCA3MCUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtNjAwOmhzbCgxOTgsIDAlLCA1NSUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtNzAwOmhz''@;'; put 'put ''bCgxOTgsIDAlLCA0MCUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtODAwOmhzbCgxOTgsIDAlLCAyNyUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtOTAwOmhzbCgxOTgsIDAlLCAyMCUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtMTAwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwt''@;'; put 'put ''MDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtNTA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1uZXV0cmFsLTEwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtMjAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24t''@;'; put 'put ''bmV1dHJhbC0zMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1uZXV0cmFsLTQwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtNTAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tbmV1dHJhbC02MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0t''@;'; put 'put ''Y2xyLWNvbG9yLW9uLW5ldXRyYWwtNzAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1vbi1uZXV0cmFsLTgwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3Itb24tbmV1dHJhbC05MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtMTAwMDpo''@;'; put 'put ''c2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3ItYWN0aW9uLTUwOmhzbCgxOTgsIDgzJSwgOTQlKTstLWNsci1jb2xvci1hY3Rpb24tMTAwOmhzbCgxOTgsIDgxJSwgODglKTstLWNsci1jb2xvci1hY3Rpb24tMjAwOmhzbCgxOTgsIDc4JSwgNzglKTstLWNsci1jb2xvci1hY3Rpb24tMzAw''@;'; put 'put ''OmhzbCgxOTgsIDY5JSwgNjklKTstLWNsci1jb2xvci1hY3Rpb24tNDAwOmhzbCgxOTgsIDY2JSwgNTclKTstLWNsci1jb2xvci1hY3Rpb24tNTAwOmhzbCgxOTgsIDgwJSwgNDYlKTstLWNsci1jb2xvci1hY3Rpb24tNjAwOmhzbCgxOTgsIDEwMCUsIDMyJSk7LS1jbHItY29sb3ItYWN0aW9u''@;'; put 'put ''LTcwMDpoc2woMTk4LCAxMDAlLCAyOCUpOy0tY2xyLWNvbG9yLWFjdGlvbi04MDA6aHNsKDE5OCwgMTAwJSwgMjQlKTstLWNsci1jb2xvci1hY3Rpb24tOTAwOmhzbCgxOTgsIDEwMCUsIDIxJSk7LS1jbHItY29sb3ItYWN0aW9uLTEwMDA6aHNsKDE5OCwgMTAwJSwgMTUlKTstLWNsci1jb2xv''@;'; put 'put ''ci1vbi1hY3Rpb24tNTA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1hY3Rpb24tMTAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tYWN0aW9uLTIwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi0zMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNs''@;'; put 'put ''ci1jb2xvci1vbi1hY3Rpb24tNDAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tYWN0aW9uLTUwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi02MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi03MDA6aHNsKDE5OCwgMCUs''@;'; put 'put ''IDEwMCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi04MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi05MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi0xMDAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1zZWNvbmRhcnkt''@;'; put 'put ''YWN0aW9uLTUwOmhzbCgyODIsIDEwMCUsIDk1JSk7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi0xMDA6aHNsKDI4MiwgNTklLCA4NyUpOy0tY2xyLWNvbG9yLXNlY29uZGFyeS1hY3Rpb24tMjAwOmhzbCgyODIsIDUxJSwgNzglKTstLWNsci1jb2xvci1zZWNvbmRhcnktYWN0aW9uLTMw''@;'; put 'put ''MDpoc2woMjgyLCA0NSUsIDcwJSk7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi00MDA6aHNsKDI4MiwgNDQlLCA2MiUpOy0tY2xyLWNvbG9yLXNlY29uZGFyeS1hY3Rpb24tNTAwOmhzbCgyODIsIDQzJSwgNTQlKTstLWNsci1jb2xvci1zZWNvbmRhcnktYWN0aW9uLTYwMDpoc2woMjgy''@;'; put 'put ''LCA1MCUsIDQ1JSk7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi03MDA6aHNsKDI4MiwgNjklLCAzNyUpOy0tY2xyLWNvbG9yLXNlY29uZGFyeS1hY3Rpb24tODAwOmhzbCgyODIsIDEwMCUsIDI5JSk7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi05MDA6aHNsKDI4MiwgMTAwJSwg''@;'; put 'put ''MjIlKTstLWNsci1jb2xvci1zZWNvbmRhcnktYWN0aW9uLTEwMDA6aHNsKDI4MiwgMTAwJSwgMTQlKTstLWNsci1jb2xvci1vbi1zZWNvbmRhcnktYWN0aW9uLTUwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi0xMDA6aHNsKDE5OCwgMCUsIDAlKTst''@;'; put 'put ''LWNsci1jb2xvci1vbi1zZWNvbmRhcnktYWN0aW9uLTIwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXNlY29uZGFyeS1hY3Rpb24tMzAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi00MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1j''@;'; put 'put ''b2xvci1vbi1zZWNvbmRhcnktYWN0aW9uLTUwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi02MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLXNlY29uZGFyeS1hY3Rpb24tNzAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1j''@;'; put 'put ''b2xvci1vbi1zZWNvbmRhcnktYWN0aW9uLTgwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi05MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLXNlY29uZGFyeS1hY3Rpb24tMTAwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHIt''@;'; put 'put ''Y29sb3ItZGFuZ2VyLTUwOmhzbCg5LCAxMDAlLCA5NyUpOy0tY2xyLWNvbG9yLWRhbmdlci0xMDA6aHNsKDksIDk1JSwgOTIlKTstLWNsci1jb2xvci1kYW5nZXItMjAwOmhzbCg5LCA5MSUsIDg2JSk7LS1jbHItY29sb3ItZGFuZ2VyLTMwMDpoc2woOSwgODMlLCA3NiUpOy0tY2xyLWNvbG9y''@;'; put 'put ''LWRhbmdlci00MDA6aHNsKDksIDg1JSwgNjclKTstLWNsci1jb2xvci1kYW5nZXItNTAwOmhzbCg5LCA4OCUsIDYxJSk7LS1jbHItY29sb3ItZGFuZ2VyLTYwMDpoc2woOSwgOTIlLCA1MCUpOy0tY2xyLWNvbG9yLWRhbmdlci03MDA6aHNsKDksIDEwMCUsIDQzJSk7LS1jbHItY29sb3ItZGFu''@;'; put 'put ''Z2VyLTgwMDpoc2woOSwgMTAwJSwgMzglKTstLWNsci1jb2xvci1kYW5nZXItOTAwOmhzbCg5LCAxMDAlLCAzMCUpOy0tY2xyLWNvbG9yLWRhbmdlci0xMDAwOmhzbCg5LCAxMDAlLCAyMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci01MDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9u''@;'; put 'put ''LWRhbmdlci0xMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1kYW5nZXItMjAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tZGFuZ2VyLTMwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci00MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1j''@;'; put 'put ''b2xvci1vbi1kYW5nZXItNTAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tZGFuZ2VyLTYwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci03MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci04MDA6aHNsKDE5OCwgMCUsIDEw''@;'; put 'put ''MCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci05MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci0xMDAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci13YXJuaW5nLTUwOmhzbCg0OCwgMTAwJSwgOTUlKTstLWNsci1jb2xvci13YXJuaW5nLTEwMDpoc2wo''@;'; put 'put ''NDgsIDEwMCUsIDg5JSk7LS1jbHItY29sb3Itd2FybmluZy0yMDA6aHNsKDQ4LCAxMDAlLCA4MyUpOy0tY2xyLWNvbG9yLXdhcm5pbmctMzAwOmhzbCg0OCwgOTglLCA3MiUpOy0tY2xyLWNvbG9yLXdhcm5pbmctNDAwOmhzbCg0OCwgOTQlLCA1NyUpOy0tY2xyLWNvbG9yLXdhcm5pbmctNTAw''@;'; put 'put ''OmhzbCg0OCwgOTUlLCA0OCUpOy0tY2xyLWNvbG9yLXdhcm5pbmctNjAwOmhzbCg0NiwgMTAwJSwgNDUlKTstLWNsci1jb2xvci13YXJuaW5nLTcwMDpoc2woNDMsIDEwMCUsIDQyJSk7LS1jbHItY29sb3Itd2FybmluZy04MDA6aHNsKDQxLCAxMDAlLCAzNCUpOy0tY2xyLWNvbG9yLXdhcm5p''@;'; put 'put ''bmctOTAwOmhzbCgzOCwgMTAwJSwgMjglKTstLWNsci1jb2xvci13YXJuaW5nLTEwMDA6aHNsKDMxLCAxMDAlLCAxOSUpOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctNTA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi13YXJuaW5nLTEwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNv''@;'; put 'put ''bG9yLW9uLXdhcm5pbmctMjAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24td2FybmluZy0zMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi13YXJuaW5nLTQwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctNTAwOmhzbCgxOTgsIDAlLCAw''@;'; put 'put ''JSk7LS1jbHItY29sb3Itb24td2FybmluZy02MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi13YXJuaW5nLTcwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctODAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24td2FybmluZy05MDA6aHNs''@;'; put 'put ''KDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi13YXJuaW5nLTEwMDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLXN1Y2Nlc3MtNTA6aHNsKDkzLCA1MiUsIDg4JSk7LS1jbHItY29sb3Itc3VjY2Vzcy0xMDA6aHNsKDkzLCA1OCUsIDc1JSk7LS1jbHItY29sb3Itc3VjY2Vzcy0y''@;'; put 'put ''MDA6aHNsKDkzLCA3NiUsIDQ5JSk7LS1jbHItY29sb3Itc3VjY2Vzcy0zMDA6aHNsKDkzLCA3NyUsIDQ0JSk7LS1jbHItY29sb3Itc3VjY2Vzcy00MDA6aHNsKDkzLCA3OSUsIDQwJSk7LS1jbHItY29sb3Itc3VjY2Vzcy01MDA6aHNsKDkzLCA2NyUsIDM4JSk7LS1jbHItY29sb3Itc3VjY2Vz''@;'; put 'put ''cy02MDA6aHNsKDkzLCA4NSUsIDMyJSk7LS1jbHItY29sb3Itc3VjY2Vzcy03MDA6aHNsKDkzLCAxMDAlLCAyNiUpOy0tY2xyLWNvbG9yLXN1Y2Nlc3MtODAwOmhzbCg5MywgMTAwJSwgMjElKTstLWNsci1jb2xvci1zdWNjZXNzLTkwMDpoc2woOTMsIDEwMCUsIDE2JSk7LS1jbHItY29sb3It''@;'; put 'put ''c3VjY2Vzcy0xMDAwOmhzbCg5MywgMTAwJSwgMTMlKTstLWNsci1jb2xvci1vbi1zdWNjZXNzLTUwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tc3VjY2Vzcy0xMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1zdWNjZXNzLTIwMDpoc2woMTk4LCAwJSwgMCUpOy0t''@;'; put 'put ''Y2xyLWNvbG9yLW9uLXN1Y2Nlc3MtMzAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tc3VjY2Vzcy00MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1zdWNjZXNzLTUwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXN1Y2Nlc3MtNjAwOmhzbCgxOTgs''@;'; put 'put ''IDAlLCAwJSk7LS1jbHItY29sb3Itb24tc3VjY2Vzcy03MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLXN1Y2Nlc3MtODAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1vbi1zdWNjZXNzLTkwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3Itb24tc3Vj''@;'; put 'put ''Y2Vzcy0xMDAwOmhzbCgxOTgsIDAlLCAxMDAlKX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1ncmlkLWd1dHRlci13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpOy0tY2xyLWdyaWQtY29udGFpbmVyLXBhZGRpbmc6Y2FsYyh2YXIoLS1jbHItZ3JpZC1ndXR0ZXItd2lkdGgpICogLjUp''@;'; put 'put ''Oy0tY2xyLWdyaWQtY29sdW1uLXBhZGRpbmc6Y2FsYyh2YXIoLS1jbHItZ3JpZC1ndXR0ZXItd2lkdGgpICogLjUpOy0tY2xyLWdyaWQtcm93LW1hcmdpbjpjYWxjKHZhcigtLWNsci1ncmlkLWd1dHRlci13aWR0aCkgKiAtLjUpfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLWNsb3NlLWNvbG9y''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWNsb3NlLWNvbG9yLWhvdmVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLWNsb3NlLWNvbG9yLWFjdGl2ZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWlu''@;'; put 'put ''dGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItYmFzZWZvbnQtc2l6ZToxMjUlOy0tY2xyLWdsb2JhbC1ib3JkZXJyYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''Ym9yZGVyLXdpZHRoLTEwMCk7LS1jbHItZ2xvYmFsLWFwcC1iYWNrZ3JvdW5kOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYXBwLWJhY2tncm91bmQpOy0tY2xyLWdsb2JhbC1zZWxlY3Rpb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVj''@;'; put 'put ''dGVkKTstLWNsci1nbG9iYWwtb24tc2VsZWN0aW9uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3Itc2VsZWN0ZWQpOy0tY2xyLWdsb2JhbC1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci1ob3Zlcik7LS1jbHIt''@;'; put 'put ''Z2xvYmFsLWNvbnRlbnQtaGVhZGVyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1nbG9iYWwtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWdsb2JhbC1zdWNjZXNzLWNvbG9yOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItZ2xvYmFsLWVycm9yLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyKX06cm9vdHstLWNsci1wb3BvdmVyLWJveC1zaGFkb3ctY29sb3I6cmdiYSgxNDAsIDE0MCwgMTQwLCAuMjUpfTpyb290IFtjZHMtdGhlbWVdey0t''@;'; put 'put ''Y2xyLW1ldHJvcG9saXMtZm9udC1mYW1pbHk6TWV0cm9wb2xpcywgIkF2ZW5pciBOZXh0IiwgIkhlbHZldGljYSBOZXVlIiwgQXJpYWwsIHNhbnMtc2VyaWY7LS1jbHItYm9keS1mb250OnZhcigtLWNsci1tZXRyb3BvbGlzLWZvbnQtZmFtaWx5KTstLWNsci1mb250OnZhcigtLWNsci1ib2R5''@;'; put 'put ''LWZvbnQpOy0tY2xyLWRpc3BsYXktZm9udDp2YXIoLS1jbHItbWV0cm9wb2xpcy1mb250LWZhbWlseSk7LS1jbHItZm9udC13ZWlnaHQtbGlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtbGlnaHQpOy0tY2xyLWZvbnQtd2VpZ2h0LXJlZ3VsYXI6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtcmVndWxhcik7LS1jbHItZm9udC13ZWlnaHQtc2VtaWJvbGQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpOy0tY2xyLWZvbnQtd2VpZ2h0LWJvbGQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHkt''@;'; put 'put ''Zm9udC13ZWlnaHQtYm9sZCk7LS1jbHItZm9udC13ZWlnaHQtZXh0cmFib2xkOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWV4dHJhYm9sZCk7LS1jbHItaDEtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMzAwKTstLWNsci1oMS1mb250LXNp''@;'; put 'put ''emU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzcGxheS1mb250LXNpemUpOy0tY2xyLWgxLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC13ZWlnaHQpOy0tY2xyLWgxLWZvbnQtZmFtaWx5OnZhcigtLWNsci1kaXNwbGF5LWZvbnQpOy0t''@;'; put 'put ''Y2xyLWgxLWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQpOy0tY2xyLWgxLWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktbGV0dGVyLXNwYWNpbmcpOy0tY2xyLWgyLWNvbG9yOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTMwMCk7LS1jbHItaDItZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWhlYWRsaW5lLWZvbnQtc2l6ZSk7LS1jbHItaDItZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGxpbmUtZm9udC13ZWlnaHQp''@;'; put 'put ''Oy0tY2xyLWgyLWZvbnQtZmFtaWx5OnZhcigtLWNsci1kaXNwbGF5LWZvbnQpOy0tY2xyLWgyLWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWhlYWRsaW5lLWxpbmUtaGVpZ2h0KTstLWNsci1oMi1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1oZWFkbGluZS1sZXR0ZXItc3BhY2luZyk7LS1jbHItaDMtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMzAwKTstLWNsci1oMy1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktdGl0bGUtZm9udC1zaXplKTstLWNsci1oMy1mb250LXdlaWdodDp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS10aXRsZS1mb250LXdlaWdodCk7LS1jbHItaDMtZm9udC1mYW1pbHk6dmFyKC0tY2xyLWRpc3BsYXktZm9udCk7LS1jbHItaDMtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQpOy0tY2xyLWgz''@;'; put 'put ''LWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXRpdGxlLWxldHRlci1zcGFjaW5nKTstLWNsci1oNC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0zMDApOy0tY2xyLWg0LWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1z''@;'; put 'put ''ZWN0aW9uLWZvbnQtc2l6ZSk7LS1jbHItaDQtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXdlaWdodCk7LS1jbHItaDQtZm9udC1mYW1pbHk6dmFyKC0tY2xyLWRpc3BsYXktZm9udCk7LS1jbHItaDQtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCk7LS1jbHItaDQtbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3BhY2luZyk7LS1jbHItaDUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMzAwKTst''@;'; put 'put ''LWNsci1oNS1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXNpemUpOy0tY2xyLWg1LWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC13ZWlnaHQpOy0tY2xyLWg1LWZvbnQtZmFtaWx5OnZhcigt''@;'; put 'put ''LWNsci1kaXNwbGF5LWZvbnQpOy0tY2xyLWg1LWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQpOy0tY2xyLWg1LWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGV0dGVyLXNwYWNp''@;'; put 'put ''bmcpOy0tY2xyLWg2LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTMwMCk7LS1jbHItaDYtZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LW1lc3NhZ2UtZm9udC1zaXplKTstLWNsci1oNi1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dy''@;'; put 'put ''YXBoeS1tZXNzYWdlLWZvbnQtd2VpZ2h0KTstLWNsci1oNi1mb250LWZhbWlseTp2YXIoLS1jbHItZGlzcGxheS1mb250KTstLWNsci1oNi1saW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0KTstLWNsci1oNi1sZXR0ZXItc3BhY2luZzp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1tZXNzYWdlLWxldHRlci1zcGFjaW5nKTstLWNsci1wMC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00NTApOy0tY2xyLXAwLWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7''@;'; put 'put ''LS1jbHItcDAtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7LS1jbHItcDAtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCk7LS1jbHItcDAtbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyk7LS1jbHItcDEtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDUwKTstLWNsci1wMS1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpOy0tY2xyLXAxLWZv''@;'; put 'put ''bnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpOy0tY2xyLXAxLWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQpOy0tY2xyLXAxLWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBv''@;'; put 'put ''Z3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpOy0tY2xyLXAyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQ1MCk7LS1jbHItcDItZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpOy0tY2xyLXAyLWZvbnQtd2Vp''@;'; put 'put ''Z2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LW1lZGl1bSk7LS1jbHItcDItbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTstLWNsci1wMi1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVy''@;'; put 'put ''LXNwYWNpbmcpOy0tY2xyLXAzLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQ1MCk7LS1jbHItcDMtZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpOy0tY2xyLXAzLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7LS1jbHItcDMtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTstLWNsci1wMy1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpOy0tY2xy''@;'; put 'put ''LXA0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQ1MCk7LS1jbHItcDQtZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpOy0tY2xyLXA0LWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZv''@;'; put 'put ''bnQtd2VpZ2h0LXNlbWlib2xkKTstLWNsci1wNC1saW5lLWhlaWdodDpjYWxjKDIwICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jbHItcDQtbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTstLWNs''@;'; put 'put ''ci1wNS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00NTApOy0tY2xyLXA1LWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTstLWNsci1wNS1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1z''@;'; put 'put ''ZWNvbmRhcnktZm9udC13ZWlnaHQpOy0tY2xyLXA1LWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7LS1jbHItcDUtbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTstLWNsci1wNi1jb2xvcjp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00NTApOy0tY2xyLXA2LWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7LS1jbHItcDYtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdo''@;'; put 'put ''dCk7LS1jbHItcDYtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7LS1jbHItcDYtbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7LS1jbHItcDctY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDUwKTstLWNsci1wNy1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWZvbnQtc2l6ZSk7LS1jbHItcDctZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9u''@;'; put 'put ''LWZvbnQtd2VpZ2h0KTstLWNsci1wNy1saW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGluZS1oZWlnaHQpOy0tY2xyLXA3LWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1sZXR0ZXItc3BhY2lu''@;'; put 'put ''Zyk7LS1jbHItcDgtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDUwKTstLWNsci1wOC1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWZvbnQtc2l6ZSk7LS1jbHItcDgtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5''@;'; put 'put ''cG9ncmFwaHktc21hbGxjYXB0aW9uLWZvbnQtd2VpZ2h0KTstLWNsci1wOC1saW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGluZS1oZWlnaHQpOy0tY2xyLXA4LWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxs''@;'; put 'put ''Y2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7LS1jbHItbGlzdC1pdGVtLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCl9LmNsci1hbGlnbi1iYXNlbGluZXt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi10b3B7dmVydGljYWwtYWxp''@;'; put 'put ''Z246dG9wIWltcG9ydGFudH0uY2xyLWFsaWduLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGUhaW1wb3J0YW50fS5jbHItYWxpZ24tYm90dG9te3ZlcnRpY2FsLWFsaWduOmJvdHRvbSFpbXBvcnRhbnR9LmNsci1hbGlnbi10ZXh0LWJvdHRvbXt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LWJvdHRv''@;'; put 'put ''bSFpbXBvcnRhbnR9LmNsci1hbGlnbi10ZXh0LXRvcHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcCFpbXBvcnRhbnR9LmNsci1jbGVhcmZpeDphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6dGFibGU7Y2xlYXI6Ym90aH0uY2xyLWRpc3BsYXktYmxvY2t7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9''@;'; put 'put ''LmNsci1kaXNwbGF5LWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9LmNsci1kaXNwbGF5LWlubGluZXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9LmNsci1mbGV4LXJvd3tmbGV4LWRpcmVjdGlvbjpyb3chaW1wb3J0YW50fS5jbHItZmxleC1jb2x1bW57Zmxl''@;'; put 'put ''eC1kaXJlY3Rpb246Y29sdW1uIWltcG9ydGFudH0uY2xyLWZsZXgtcm93LXJldmVyc2V7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC1jb2x1bW4tcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LXdy''@;'; put 'put ''YXB7ZmxleC13cmFwOndyYXAhaW1wb3J0YW50fS5jbHItZmxleC1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9LmNsci1mbGV4LXdyYXAtcmV2ZXJzZXtmbGV4LXdyYXA6d3JhcC1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtZmlsbHtmbGV4OjEgMSBhdXRvIWltcG9ydGFu''@;'; put 'put ''dH0uY2xyLWZsZXgtZ3Jvdy0we2ZsZXgtZ3JvdzowIWltcG9ydGFudH0uY2xyLWZsZXgtZ3Jvdy0xe2ZsZXgtZ3JvdzoxIWltcG9ydGFudH0uY2xyLWZsZXgtc2hyaW5rLTB7ZmxleC1zaHJpbms6MCFpbXBvcnRhbnR9LmNsci1mbGV4LXNocmluay0xe2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50''@;'; put 'put ''fS5jbHItanVzdGlmeS1jb250ZW50LXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXJ7anVzdGlmeS1jb250''@;'; put 'put ''ZW50OmNlbnRlciFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5jbHItYWxp''@;'; put 'put ''Z24taXRlbXMtc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1lbmR7YWxpZ24taXRlbXM6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1p''@;'; put 'put ''dGVtcy1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1zdHJldGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2ghaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1zdGFydHthbGlnbi1jb250ZW50OmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHIt''@;'; put 'put ''YWxpZ24tY29udGVudC1lbmR7YWxpZ24tY29udGVudDpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LWNlbnRlcnthbGlnbi1jb250ZW50OmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LWJldHdlZW57YWxpZ24tY29udGVudDpzcGFjZS1iZXR3ZWVuIWlt''@;'; put 'put ''cG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtYXJvdW5ke2FsaWduLWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtc3RyZXRjaHthbGlnbi1jb250ZW50OnN0cmV0Y2ghaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1hdXRve2FsaWduLXNlbGY6YXV0''@;'; put 'put ''byFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXN0YXJ0e2FsaWduLXNlbGY6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLWVuZHthbGlnbi1zZWxmOmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtY2VudGVye2FsaWduLXNlbGY6Y2VudGVyIWltcG9ydGFu''@;'; put 'put ''dH0uY2xyLWFsaWduLXNlbGYtYmFzZWxpbmV7YWxpZ24tc2VsZjpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXN0cmV0Y2h7YWxpZ24tc2VsZjpzdHJldGNoIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7LmNsci1mbGV4LXNtLXJvd3tmbGV4LWRpcmVjdGlv''@;'; put 'put ''bjpyb3chaW1wb3J0YW50fS5jbHItZmxleC1zbS1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1uIWltcG9ydGFudH0uY2xyLWZsZXgtc20tcm93LXJldmVyc2V7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC1zbS1jb2x1bW4tcmV2ZXJzZXtmbGV4LWRp''@;'; put 'put ''cmVjdGlvbjpjb2x1bW4tcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LXNtLXdyYXB7ZmxleC13cmFwOndyYXAhaW1wb3J0YW50fS5jbHItZmxleC1zbS1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9LmNsci1mbGV4LXNtLXdyYXAtcmV2ZXJzZXtmbGV4LXdyYXA6d3JhcC1y''@;'; put 'put ''ZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtc20tZmlsbHtmbGV4OjEgMSBhdXRvIWltcG9ydGFudH0uY2xyLWZsZXgtc20tZ3Jvdy0we2ZsZXgtZ3JvdzowIWltcG9ydGFudH0uY2xyLWZsZXgtc20tZ3Jvdy0xe2ZsZXgtZ3JvdzoxIWltcG9ydGFudH0uY2xyLWZsZXgtc20tc2hyaW5rLTB7''@;'; put 'put ''ZmxleC1zaHJpbms6MCFpbXBvcnRhbnR9LmNsci1mbGV4LXNtLXNocmluay0xe2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LXNtLXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1zbS1lbmR7''@;'; put 'put ''anVzdGlmeS1jb250ZW50OmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1zbS1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlciFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtc20tYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiFpbXBv''@;'; put 'put ''cnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtc20tYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtc20tc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1zbS1lbmR7YWxpZ24t''@;'; put 'put ''aXRlbXM6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtc20tY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1zbS1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1zbS1zdHJl''@;'; put 'put ''dGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2ghaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1zbS1zdGFydHthbGlnbi1jb250ZW50OmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1zbS1lbmR7YWxpZ24tY29udGVudDpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGln''@;'; put 'put ''bi1jb250ZW50LXNtLWNlbnRlcnthbGlnbi1jb250ZW50OmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXNtLWJldHdlZW57YWxpZ24tY29udGVudDpzcGFjZS1iZXR3ZWVuIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtc20tYXJvdW5ke2FsaWduLWNvbnRlbnQ6c3Bh''@;'; put 'put ''Y2UtYXJvdW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtc20tc3RyZXRjaHthbGlnbi1jb250ZW50OnN0cmV0Y2ghaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1zbS1hdXRve2FsaWduLXNlbGY6YXV0byFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXNtLXN0YXJ0e2FsaWduLXNl''@;'; put 'put ''bGY6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXNtLWVuZHthbGlnbi1zZWxmOmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtc20tY2VudGVye2FsaWduLXNlbGY6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtc20tYmFzZWxpbmV7YWxpZ24t''@;'; put 'put ''c2VsZjpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXNtLXN0cmV0Y2h7YWxpZ24tc2VsZjpzdHJldGNoIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5jbHItZmxleC1tZC1yb3d7ZmxleC1kaXJlY3Rpb246cm93IWltcG9ydGFudH0uY2xyLWZsZXgtbWQt''@;'; put 'put ''Y29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbiFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLXJvdy1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtbWQtY29sdW1uLXJldmVyc2V7ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2UhaW1wb3J0''@;'; put 'put ''YW50fS5jbHItZmxleC1tZC13cmFwe2ZsZXgtd3JhcDp3cmFwIWltcG9ydGFudH0uY2xyLWZsZXgtbWQtbm93cmFwe2ZsZXgtd3JhcDpub3dyYXAhaW1wb3J0YW50fS5jbHItZmxleC1tZC13cmFwLXJldmVyc2V7ZmxleC13cmFwOndyYXAtcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LW1k''@;'; put 'put ''LWZpbGx7ZmxleDoxIDEgYXV0byFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLWdyb3ctMHtmbGV4LWdyb3c6MCFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLWdyb3ctMXtmbGV4LWdyb3c6MSFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLXNocmluay0we2ZsZXgtc2hyaW5rOjAhaW1wb3J0YW50fS5jbHIt''@;'; put 'put ''ZmxleC1tZC1zaHJpbmstMXtmbGV4LXNocmluazoxIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1tZC1zdGFydHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtbWQtZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZCFpbXBv''@;'; put 'put ''cnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtbWQtY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LW1kLWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW4haW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LW1k''@;'; put 'put ''LWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLW1kLXN0YXJ0e2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtbWQtZW5ke2FsaWduLWl0ZW1zOmZsZXgtZW5kIWltcG9ydGFudH0uY2xy''@;'; put 'put ''LWFsaWduLWl0ZW1zLW1kLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtbWQtYmFzZWxpbmV7YWxpZ24taXRlbXM6YmFzZWxpbmUhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtbWQtc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNoIWltcG9y''@;'; put 'put ''dGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbWQtc3RhcnR7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbWQtZW5ke2FsaWduLWNvbnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1tZC1jZW50ZXJ7YWxpZ24tY29u''@;'; put 'put ''dGVudDpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1tZC1iZXR3ZWVue2FsaWduLWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LW1kLWFyb3VuZHthbGlnbi1jb250ZW50OnNwYWNlLWFyb3VuZCFpbXBvcnRhbnR9LmNsci1hbGln''@;'; put 'put ''bi1jb250ZW50LW1kLXN0cmV0Y2h7YWxpZ24tY29udGVudDpzdHJldGNoIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbWQtYXV0b3thbGlnbi1zZWxmOmF1dG8haW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1tZC1zdGFydHthbGlnbi1zZWxmOmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHIt''@;'; put 'put ''YWxpZ24tc2VsZi1tZC1lbmR7YWxpZ24tc2VsZjpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLW1kLWNlbnRlcnthbGlnbi1zZWxmOmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLW1kLWJhc2VsaW5le2FsaWduLXNlbGY6YmFzZWxpbmUhaW1wb3J0YW50fS5jbHIt''@;'; put 'put ''YWxpZ24tc2VsZi1tZC1zdHJldGNoe2FsaWduLXNlbGY6c3RyZXRjaCFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXsuY2xyLWZsZXgtbGctcm93e2ZsZXgtZGlyZWN0aW9uOnJvdyFpbXBvcnRhbnR9LmNsci1mbGV4LWxnLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW4h''@;'; put 'put ''aW1wb3J0YW50fS5jbHItZmxleC1sZy1yb3ctcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LWxnLWNvbHVtbi1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtbGctd3JhcHtmbGV4LXdy''@;'; put 'put ''YXA6d3JhcCFpbXBvcnRhbnR9LmNsci1mbGV4LWxnLW5vd3JhcHtmbGV4LXdyYXA6bm93cmFwIWltcG9ydGFudH0uY2xyLWZsZXgtbGctd3JhcC1yZXZlcnNle2ZsZXgtd3JhcDp3cmFwLXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC1sZy1maWxse2ZsZXg6MSAxIGF1dG8haW1wb3J0YW50''@;'; put 'put ''fS5jbHItZmxleC1sZy1ncm93LTB7ZmxleC1ncm93OjAhaW1wb3J0YW50fS5jbHItZmxleC1sZy1ncm93LTF7ZmxleC1ncm93OjEhaW1wb3J0YW50fS5jbHItZmxleC1sZy1zaHJpbmstMHtmbGV4LXNocmluazowIWltcG9ydGFudH0uY2xyLWZsZXgtbGctc2hyaW5rLTF7ZmxleC1zaHJpbms6''@;'; put 'put ''MSFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtbGctc3RhcnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LWxnLWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LWxn''@;'; put 'put ''LWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1sZy1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1sZy1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNl''@;'; put 'put ''LWFyb3VuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1sZy1zdGFydHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLWxnLWVuZHthbGlnbi1pdGVtczpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1sZy1jZW50ZXJ7YWxpZ24t''@;'; put 'put ''aXRlbXM6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLWxnLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLWxnLXN0cmV0Y2h7YWxpZ24taXRlbXM6c3RyZXRjaCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LWxnLXN0''@;'; put 'put ''YXJ0e2FsaWduLWNvbnRlbnQ6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LWxnLWVuZHthbGlnbi1jb250ZW50OmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbGctY2VudGVye2FsaWduLWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFs''@;'; put 'put ''aWduLWNvbnRlbnQtbGctYmV0d2VlbnthbGlnbi1jb250ZW50OnNwYWNlLWJldHdlZW4haW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1sZy1hcm91bmR7YWxpZ24tY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1sZy1zdHJldGNoe2FsaWduLWNv''@;'; put 'put ''bnRlbnQ6c3RyZXRjaCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLWxnLWF1dG97YWxpZ24tc2VsZjphdXRvIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbGctc3RhcnR7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbGctZW5ke2FsaWduLXNlbGY6''@;'; put 'put ''ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1sZy1jZW50ZXJ7YWxpZ24tc2VsZjpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1sZy1iYXNlbGluZXthbGlnbi1zZWxmOmJhc2VsaW5lIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbGctc3RyZXRjaHthbGlnbi1z''@;'; put 'put ''ZWxmOnN0cmV0Y2ghaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey5jbHItZmxleC14bC1yb3d7ZmxleC1kaXJlY3Rpb246cm93IWltcG9ydGFudH0uY2xyLWZsZXgteGwtY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbiFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLXJvdy1y''@;'; put 'put ''ZXZlcnNle2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgteGwtY29sdW1uLXJldmVyc2V7ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC14bC13cmFwe2ZsZXgtd3JhcDp3cmFwIWltcG9ydGFudH0uY2xyLWZsZXgt''@;'; put 'put ''eGwtbm93cmFwe2ZsZXgtd3JhcDpub3dyYXAhaW1wb3J0YW50fS5jbHItZmxleC14bC13cmFwLXJldmVyc2V7ZmxleC13cmFwOndyYXAtcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLWZpbGx7ZmxleDoxIDEgYXV0byFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLWdyb3ctMHtmbGV4LWdy''@;'; put 'put ''b3c6MCFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLWdyb3ctMXtmbGV4LWdyb3c6MSFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLXNocmluay0we2ZsZXgtc2hyaW5rOjAhaW1wb3J0YW50fS5jbHItZmxleC14bC1zaHJpbmstMXtmbGV4LXNocmluazoxIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29u''@;'; put 'put ''dGVudC14bC1zdGFydHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQteGwtZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQteGwtY2VudGVye2p1c3RpZnktY29udGVudDpjZW50''@;'; put 'put ''ZXIhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LXhsLWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW4haW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LXhsLWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uY2xyLWFsaWdu''@;'; put 'put ''LWl0ZW1zLXhsLXN0YXJ0e2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMteGwtZW5ke2FsaWduLWl0ZW1zOmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLXhsLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXIhaW1wb3J0YW50fS5jbHIt''@;'; put 'put ''YWxpZ24taXRlbXMteGwtYmFzZWxpbmV7YWxpZ24taXRlbXM6YmFzZWxpbmUhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMteGwtc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNoIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQteGwtc3RhcnR7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0''@;'; put 'put ''IWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQteGwtZW5ke2FsaWduLWNvbnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC14bC1jZW50ZXJ7YWxpZ24tY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC14bC1iZXR3ZWVue2FsaWdu''@;'; put 'put ''LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXhsLWFyb3VuZHthbGlnbi1jb250ZW50OnNwYWNlLWFyb3VuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXhsLXN0cmV0Y2h7YWxpZ24tY29udGVudDpzdHJldGNoIWltcG9ydGFudH0uY2xy''@;'; put 'put ''LWFsaWduLXNlbGYteGwtYXV0b3thbGlnbi1zZWxmOmF1dG8haW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi14bC1zdGFydHthbGlnbi1zZWxmOmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi14bC1lbmR7YWxpZ24tc2VsZjpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGln''@;'; put 'put ''bi1zZWxmLXhsLWNlbnRlcnthbGlnbi1zZWxmOmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXhsLWJhc2VsaW5le2FsaWduLXNlbGY6YmFzZWxpbmUhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi14bC1zdHJldGNoe2FsaWduLXNlbGY6c3RyZXRjaCFpbXBvcnRhbnR9fS5jbHIt''@;'; put 'put ''ZmxleC14cy1maXJzdHtvcmRlcjotMX0uY2xyLWZsZXgteHMtbGFzdHtvcmRlcjoxfS5jbHItZmxleC14cy11bm9yZGVyZWR7b3JkZXI6MH0uY2xyLWZsZXgtaXRlbXMteHMtdG9we2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9LmNsci1mbGV4LWl0ZW1zLXhzLW1pZGRsZXthbGlnbi1pdGVtczpj''@;'; put 'put ''ZW50ZXJ9LmNsci1mbGV4LWl0ZW1zLXhzLWJvdHRvbXthbGlnbi1pdGVtczpmbGV4LWVuZH0uY2xyLWZsZXgteHMtdG9we2FsaWduLXNlbGY6ZmxleC1zdGFydH0uY2xyLWZsZXgteHMtbWlkZGxle2FsaWduLXNlbGY6Y2VudGVyfS5jbHItZmxleC14cy1ib3R0b217YWxpZ24tc2VsZjpmbGV4''@;'; put 'put ''LWVuZH0uY2xyLWZsZXgtaXRlbXMteHMtbGVmdHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0uY2xyLWZsZXgtaXRlbXMteHMtY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmNsci1mbGV4LWl0ZW1zLXhzLXJpZ2h0e2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uY2xyLWZsZXgt''@;'; put 'put ''aXRlbXMteHMtYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9LmNsci1mbGV4LWl0ZW1zLXhzLWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItZmxleC1zbS1maXJzdHtvcmRlcjotMX0uY2xyLWZsZXgt''@;'; put 'put ''c20tbGFzdHtvcmRlcjoxfS5jbHItZmxleC1zbS11bm9yZGVyZWR7b3JkZXI6MH19QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItZmxleC1pdGVtcy1zbS10b3B7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uY2xyLWZsZXgtaXRlbXMtc20tbWlkZGxle2FsaWduLWl0ZW1zOmNlbnRlcn0u''@;'; put 'put ''Y2xyLWZsZXgtaXRlbXMtc20tYm90dG9te2FsaWduLWl0ZW1zOmZsZXgtZW5kfX1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7LmNsci1mbGV4LXNtLXRvcHthbGlnbi1zZWxmOmZsZXgtc3RhcnR9LmNsci1mbGV4LXNtLW1pZGRsZXthbGlnbi1zZWxmOmNlbnRlcn0uY2xyLWZsZXgtc20tYm90''@;'; put 'put ''dG9te2FsaWduLXNlbGY6ZmxleC1lbmR9fUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXsuY2xyLWZsZXgtaXRlbXMtc20tbGVmdHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0uY2xyLWZsZXgtaXRlbXMtc20tY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmNsci1mbGV4LWl0ZW1z''@;'; put 'put ''LXNtLXJpZ2h0e2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uY2xyLWZsZXgtaXRlbXMtc20tYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9LmNsci1mbGV4LWl0ZW1zLXNtLWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59fUBtZWRpYSAobWluLXdpZHRo''@;'; put 'put ''Ojc2OHB4KXsuY2xyLWZsZXgtbWQtZmlyc3R7b3JkZXI6LTF9LmNsci1mbGV4LW1kLWxhc3R7b3JkZXI6MX0uY2xyLWZsZXgtbWQtdW5vcmRlcmVke29yZGVyOjB9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXsuY2xyLWZsZXgtaXRlbXMtbWQtdG9we2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9''@;'; put 'put ''LmNsci1mbGV4LWl0ZW1zLW1kLW1pZGRsZXthbGlnbi1pdGVtczpjZW50ZXJ9LmNsci1mbGV4LWl0ZW1zLW1kLWJvdHRvbXthbGlnbi1pdGVtczpmbGV4LWVuZH19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5jbHItZmxleC1tZC10b3B7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fS5jbHItZmxl''@;'; put 'put ''eC1tZC1taWRkbGV7YWxpZ24tc2VsZjpjZW50ZXJ9LmNsci1mbGV4LW1kLWJvdHRvbXthbGlnbi1zZWxmOmZsZXgtZW5kfX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LmNsci1mbGV4LWl0ZW1zLW1kLWxlZnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LmNsci1mbGV4LWl0ZW1zLW1k''@;'; put 'put ''LWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5jbHItZmxleC1pdGVtcy1tZC1yaWdodHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmNsci1mbGV4LWl0ZW1zLW1kLWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5jbHItZmxleC1pdGVtcy1tZC1iZXR3ZWVue2p1''@;'; put 'put ''c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7LmNsci1mbGV4LWxnLWZpcnN0e29yZGVyOi0xfS5jbHItZmxleC1sZy1sYXN0e29yZGVyOjF9LmNsci1mbGV4LWxnLXVub3JkZXJlZHtvcmRlcjowfX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7''@;'; put 'put ''LmNsci1mbGV4LWl0ZW1zLWxnLXRvcHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5jbHItZmxleC1pdGVtcy1sZy1taWRkbGV7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItZmxleC1pdGVtcy1sZy1ib3R0b217YWxpZ24taXRlbXM6ZmxleC1lbmR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXsu''@;'; put 'put ''Y2xyLWZsZXgtbGctdG9we2FsaWduLXNlbGY6ZmxleC1zdGFydH0uY2xyLWZsZXgtbGctbWlkZGxle2FsaWduLXNlbGY6Y2VudGVyfS5jbHItZmxleC1sZy1ib3R0b217YWxpZ24tc2VsZjpmbGV4LWVuZH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpey5jbHItZmxleC1pdGVtcy1sZy1sZWZ0''@;'; put 'put ''e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5jbHItZmxleC1pdGVtcy1sZy1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uY2xyLWZsZXgtaXRlbXMtbGctcmlnaHR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5jbHItZmxleC1pdGVtcy1sZy1hcm91bmR7anVzdGlmeS1jb250''@;'; put 'put ''ZW50OnNwYWNlLWFyb3VuZH0uY2xyLWZsZXgtaXRlbXMtbGctYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsuY2xyLWZsZXgteGwtZmlyc3R7b3JkZXI6LTF9LmNsci1mbGV4LXhsLWxhc3R7b3JkZXI6MX0uY2xyLWZsZXgt''@;'; put 'put ''eGwtdW5vcmRlcmVke29yZGVyOjB9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmNsci1mbGV4LWl0ZW1zLXhsLXRvcHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5jbHItZmxleC1pdGVtcy14bC1taWRkbGV7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItZmxleC1pdGVtcy14bC1ib3R0b217''@;'; put 'put ''YWxpZ24taXRlbXM6ZmxleC1lbmR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmNsci1mbGV4LXhsLXRvcHthbGlnbi1zZWxmOmZsZXgtc3RhcnR9LmNsci1mbGV4LXhsLW1pZGRsZXthbGlnbi1zZWxmOmNlbnRlcn0uY2xyLWZsZXgteGwtYm90dG9te2FsaWduLXNlbGY6ZmxleC1lbmR9''@;'; put 'put ''fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmNsci1mbGV4LWl0ZW1zLXhsLWxlZnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LmNsci1mbGV4LWl0ZW1zLXhsLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5jbHItZmxleC1pdGVtcy14bC1yaWdodHtqdXN0aWZ5LWNvbnRl''@;'; put 'put ''bnQ6ZmxleC1lbmR9LmNsci1mbGV4LWl0ZW1zLXhsLWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5jbHItZmxleC1pdGVtcy14bC1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufX0uY2xyLWZsb2F0LXhzLWxlZnR7ZmxvYXQ6bGVmdCFpbXBvcnRhbnR9''@;'; put 'put ''LmNsci1mbG9hdC14cy1yaWdodHtmbG9hdDpyaWdodCFpbXBvcnRhbnR9LmNsci1mbG9hdC14cy1ub25le2Zsb2F0Om5vbmUhaW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXsuY2xyLWZsb2F0LXNtLWxlZnR7ZmxvYXQ6bGVmdCFpbXBvcnRhbnR9LmNsci1mbG9hdC1zbS1yaWdo''@;'; put 'put ''dHtmbG9hdDpyaWdodCFpbXBvcnRhbnR9LmNsci1mbG9hdC1zbS1ub25le2Zsb2F0Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LmNsci1mbG9hdC1tZC1sZWZ0e2Zsb2F0OmxlZnQhaW1wb3J0YW50fS5jbHItZmxvYXQtbWQtcmlnaHR7ZmxvYXQ6cmlnaHQhaW1w''@;'; put 'put ''b3J0YW50fS5jbHItZmxvYXQtbWQtbm9uZXtmbG9hdDpub25lIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpey5jbHItZmxvYXQtbGctbGVmdHtmbG9hdDpsZWZ0IWltcG9ydGFudH0uY2xyLWZsb2F0LWxnLXJpZ2h0e2Zsb2F0OnJpZ2h0IWltcG9ydGFudH0uY2xyLWZsb2F0''@;'; put 'put ''LWxnLW5vbmV7ZmxvYXQ6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmNsci1mbG9hdC14bC1sZWZ0e2Zsb2F0OmxlZnQhaW1wb3J0YW50fS5jbHItZmxvYXQteGwtcmlnaHR7ZmxvYXQ6cmlnaHQhaW1wb3J0YW50fS5jbHItZmxvYXQteGwtbm9uZXtmbG9hdDpu''@;'; put 'put ''b25lIWltcG9ydGFudH19LmNsci1pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW4haW1wb3J0YW50fS5jbHItaGlkZGVuLXhzLXVwe2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9QG1lZGlhIChtYXgtd2lkdGg6NTc1Ljk4cHgpey5jbHItaGlkZGVuLXhzLWRvd257ZGlzcGxheTpub25lIWltcG9y''@;'; put 'put ''dGFudH19QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItaGlkZGVuLXNtLXVwe2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWF4LXdpZHRoOjc2Ny45OHB4KXsuY2xyLWhpZGRlbi1zbS1kb3due2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjc2''@;'; put 'put ''OHB4KXsuY2xyLWhpZGRlbi1tZC11cHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1heC13aWR0aDo5OTEuOThweCl7LmNsci1oaWRkZW4tbWQtZG93bntkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7LmNsci1oaWRkZW4tbGctdXB7ZGlz''@;'; put 'put ''cGxheTpub25lIWltcG9ydGFudH19QG1lZGlhIChtYXgtd2lkdGg6MTE5OS45OHB4KXsuY2xyLWhpZGRlbi1sZy1kb3due2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmNsci1oaWRkZW4teGwtdXB7ZGlzcGxheTpub25lIWltcG9ydGFudH19LmNs''@;'; put 'put ''ci1oaWRkZW4teGwtZG93biwuY2xyLXZpc2libGUtcHJpbnQtYmxvY2t7ZGlzcGxheTpub25lIWltcG9ydGFudH1AbWVkaWEgcHJpbnR7LmNsci12aXNpYmxlLXByaW50LWJsb2Nre2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fX0uY2xyLXZpc2libGUtcHJpbnQtaW5saW5le2Rpc3BsYXk6bm9u''@;'; put 'put ''ZSFpbXBvcnRhbnR9QG1lZGlhIHByaW50ey5jbHItdmlzaWJsZS1wcmludC1pbmxpbmV7ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50fX0uY2xyLXZpc2libGUtcHJpbnQtaW5saW5lLWJsb2Nre2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9QG1lZGlhIHByaW50ey5jbHItdmlzaWJsZS1wcmludC1p''@;'; put 'put ''bmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fX1AbWVkaWEgcHJpbnR7LmNsci1oaWRkZW4tcHJpbnR7ZGlzcGxheTpub25lIWltcG9ydGFudH19LmNsci1jb250YWluZXJ7d2lkdGg6MTAwJTtwYWRkaW5nLXJpZ2h0OnZhcigtLWNsci1ncmlkLWNvbnRhaW5lci1w''@;'; put 'put ''YWRkaW5nKTtwYWRkaW5nLWxlZnQ6dmFyKC0tY2xyLWdyaWQtY29udGFpbmVyLXBhZGRpbmcpO21hcmdpbi1yaWdodDphdXRvO21hcmdpbi1sZWZ0OmF1dG99LmNsci1yb3d7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO21hcmdpbi1yaWdodDp2YXIoLS1jbHItZ3JpZC1yb3ctbWFyZ2lu''@;'; put 'put ''KTttYXJnaW4tbGVmdDp2YXIoLS1jbHItZ3JpZC1yb3ctbWFyZ2luKX0uY2xyLW5vLWd1dHRlcnN7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MH0uY2xyLW5vLWd1dHRlcnM+LmNsci1jb2wsLmNsci1uby1ndXR0ZXJzPltjbGFzcyo9Y2xyLWNvbC1de3BhZGRpbmctcmlnaHQ6MDtwYWRk''@;'; put 'put ''aW5nLWxlZnQ6MH0uY2xyLWNvbC14bCwuY2xyLWNvbC14bC1hdXRvLC5jbHItY29sLXhsLTEyLC5jbHItY29sLXhsLTExLC5jbHItY29sLXhsLTEwLC5jbHItY29sLXhsLTksLmNsci1jb2wteGwtOCwuY2xyLWNvbC14bC03LC5jbHItY29sLXhsLTYsLmNsci1jb2wteGwtNSwuY2xyLWNvbC14''@;'; put 'put ''bC00LC5jbHItY29sLXhsLTMsLmNsci1jb2wteGwtMiwuY2xyLWNvbC14bC0xLC5jbHItY29sLWxnLC5jbHItY29sLWxnLWF1dG8sLmNsci1jb2wtbGctMTIsLmNsci1jb2wtbGctMTEsLmNsci1jb2wtbGctMTAsLmNsci1jb2wtbGctOSwuY2xyLWNvbC1sZy04LC5jbHItY29sLWxnLTcsLmNs''@;'; put 'put ''ci1jb2wtbGctNiwuY2xyLWNvbC1sZy01LC5jbHItY29sLWxnLTQsLmNsci1jb2wtbGctMywuY2xyLWNvbC1sZy0yLC5jbHItY29sLWxnLTEsLmNsci1jb2wtbWQsLmNsci1jb2wtbWQtYXV0bywuY2xyLWNvbC1tZC0xMiwuY2xyLWNvbC1tZC0xMSwuY2xyLWNvbC1tZC0xMCwuY2xyLWNvbC1t''@;'; put 'put ''ZC05LC5jbHItY29sLW1kLTgsLmNsci1jb2wtbWQtNywuY2xyLWNvbC1tZC02LC5jbHItY29sLW1kLTUsLmNsci1jb2wtbWQtNCwuY2xyLWNvbC1tZC0zLC5jbHItY29sLW1kLTIsLmNsci1jb2wtbWQtMSwuY2xyLWNvbC1zbSwuY2xyLWNvbC1zbS1hdXRvLC5jbHItY29sLXNtLTEyLC5jbHIt''@;'; put 'put ''Y29sLXNtLTExLC5jbHItY29sLXNtLTEwLC5jbHItY29sLXNtLTksLmNsci1jb2wtc20tOCwuY2xyLWNvbC1zbS03LC5jbHItY29sLXNtLTYsLmNsci1jb2wtc20tNSwuY2xyLWNvbC1zbS00LC5jbHItY29sLXNtLTMsLmNsci1jb2wtc20tMiwuY2xyLWNvbC1zbS0xLC5jbHItY29sLC5jbHIt''@;'; put 'put ''Y29sLWF1dG8sLmNsci1jb2wtMTIsLmNsci1jb2wtMTEsLmNsci1jb2wtMTAsLmNsci1jb2wtOSwuY2xyLWNvbC04LC5jbHItY29sLTcsLmNsci1jb2wtNiwuY2xyLWNvbC01LC5jbHItY29sLTQsLmNsci1jb2wtMywuY2xyLWNvbC0yLC5jbHItY29sLTF7d2lkdGg6MTAwJTttaW4taGVpZ2h0''@;'; put 'put ''Oi4wNXJlbTtwYWRkaW5nLXJpZ2h0OnZhcigtLWNsci1ncmlkLWNvbHVtbi1wYWRkaW5nKTtwYWRkaW5nLWxlZnQ6dmFyKC0tY2xyLWdyaWQtY29sdW1uLXBhZGRpbmcpfS5jbHItY29se2ZsZXgtYmFzaXM6MDtmbGV4LWdyb3c6MTttYXgtd2lkdGg6MTAwJX0uY2xyLWNvbC1hdXRve2ZsZXg6''@;'; put 'put ''MCAwIGF1dG87d2lkdGg6YXV0bzttYXgtd2lkdGg6bm9uZX0uY2xyLWNvbC0xe2ZsZXg6MCAwIDguMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjguMzMzMzMzMzMzMyV9LmNsci1jb2wtMntmbGV4OjAgMCAxNi42NjY2NjY2NjY3JTttYXgtd2lkdGg6MTYuNjY2NjY2NjY2NyV9LmNsci1jb2wtM3tm''@;'; put 'put ''bGV4OjAgMCAyNSU7bWF4LXdpZHRoOjI1JX0uY2xyLWNvbC00e2ZsZXg6MCAwIDMzLjMzMzMzMzMzMzMlO21heC13aWR0aDozMy4zMzMzMzMzMzMzJX0uY2xyLWNvbC01e2ZsZXg6MCAwIDQxLjY2NjY2NjY2NjclO21heC13aWR0aDo0MS42NjY2NjY2NjY3JX0uY2xyLWNvbC02e2ZsZXg6MCAw''@;'; put 'put ''IDUwJTttYXgtd2lkdGg6NTAlfS5jbHItY29sLTd7ZmxleDowIDAgNTguMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjU4LjMzMzMzMzMzMzMlfS5jbHItY29sLTh7ZmxleDowIDAgNjYuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjY2LjY2NjY2NjY2NjclfS5jbHItY29sLTl7ZmxleDowIDAgNzUlO21h''@;'; put 'put ''eC13aWR0aDo3NSV9LmNsci1jb2wtMTB7ZmxleDowIDAgODMuMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjgzLjMzMzMzMzMzMzMlfS5jbHItY29sLTExe2ZsZXg6MCAwIDkxLjY2NjY2NjY2NjclO21heC13aWR0aDo5MS42NjY2NjY2NjY3JX0uY2xyLWNvbC0xMntmbGV4OjAgMCAxMDAlO21heC13''@;'; put 'put ''aWR0aDoxMDAlfS5jbHItb3JkZXItZmlyc3R7b3JkZXI6LTF9LmNsci1vcmRlci1sYXN0e29yZGVyOjEzfS5jbHItb3JkZXItMHtvcmRlcjowfS5jbHItb3JkZXItMXtvcmRlcjoxfS5jbHItb3JkZXItMntvcmRlcjoyfS5jbHItb3JkZXItM3tvcmRlcjozfS5jbHItb3JkZXItNHtvcmRlcjo0''@;'; put 'put ''fS5jbHItb3JkZXItNXtvcmRlcjo1fS5jbHItb3JkZXItNntvcmRlcjo2fS5jbHItb3JkZXItN3tvcmRlcjo3fS5jbHItb3JkZXItOHtvcmRlcjo4fS5jbHItb3JkZXItOXtvcmRlcjo5fS5jbHItb3JkZXItMTB7b3JkZXI6MTB9LmNsci1vcmRlci0xMXtvcmRlcjoxMX0uY2xyLW9yZGVyLTEy''@;'; put 'put ''e29yZGVyOjEyfS5jbHItb2Zmc2V0LTF7bWFyZ2luLWxlZnQ6OC4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC0ye21hcmdpbi1sZWZ0OjE2LjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LTN7bWFyZ2luLWxlZnQ6MjUlfS5jbHItb2Zmc2V0LTR7bWFyZ2luLWxlZnQ6MzMuMzMzMzMzMzMzMyV9LmNs''@;'; put 'put ''ci1vZmZzZXQtNXttYXJnaW4tbGVmdDo0MS42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC02e21hcmdpbi1sZWZ0OjUwJX0uY2xyLW9mZnNldC03e21hcmdpbi1sZWZ0OjU4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LTh7bWFyZ2luLWxlZnQ6NjYuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtOXtt''@;'; put 'put ''YXJnaW4tbGVmdDo3NSV9LmNsci1vZmZzZXQtMTB7bWFyZ2luLWxlZnQ6ODMuMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtMTF7bWFyZ2luLWxlZnQ6OTEuNjY2NjY2NjY2NyV9QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItY29sLXNte2ZsZXgtYmFzaXM6MDtmbGV4LWdyb3c6MTttYXgt''@;'; put 'put ''d2lkdGg6MTAwJX0uY2xyLWNvbC1zbS1hdXRve2ZsZXg6MCAwIGF1dG87d2lkdGg6YXV0bzttYXgtd2lkdGg6bm9uZX0uY2xyLWNvbC1zbS0xe2ZsZXg6MCAwIDguMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjguMzMzMzMzMzMzMyV9LmNsci1jb2wtc20tMntmbGV4OjAgMCAxNi42NjY2NjY2NjY3''@;'; put 'put ''JTttYXgtd2lkdGg6MTYuNjY2NjY2NjY2NyV9LmNsci1jb2wtc20tM3tmbGV4OjAgMCAyNSU7bWF4LXdpZHRoOjI1JX0uY2xyLWNvbC1zbS00e2ZsZXg6MCAwIDMzLjMzMzMzMzMzMzMlO21heC13aWR0aDozMy4zMzMzMzMzMzMzJX0uY2xyLWNvbC1zbS01e2ZsZXg6MCAwIDQxLjY2NjY2NjY2''@;'; put 'put ''NjclO21heC13aWR0aDo0MS42NjY2NjY2NjY3JX0uY2xyLWNvbC1zbS02e2ZsZXg6MCAwIDUwJTttYXgtd2lkdGg6NTAlfS5jbHItY29sLXNtLTd7ZmxleDowIDAgNTguMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjU4LjMzMzMzMzMzMzMlfS5jbHItY29sLXNtLTh7ZmxleDowIDAgNjYuNjY2NjY2''@;'; put 'put ''NjY2NyU7bWF4LXdpZHRoOjY2LjY2NjY2NjY2NjclfS5jbHItY29sLXNtLTl7ZmxleDowIDAgNzUlO21heC13aWR0aDo3NSV9LmNsci1jb2wtc20tMTB7ZmxleDowIDAgODMuMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjgzLjMzMzMzMzMzMzMlfS5jbHItY29sLXNtLTExe2ZsZXg6MCAwIDkxLjY2''@;'; put 'put ''NjY2NjY2NjclO21heC13aWR0aDo5MS42NjY2NjY2NjY3JX0uY2xyLWNvbC1zbS0xMntmbGV4OjAgMCAxMDAlO21heC13aWR0aDoxMDAlfS5jbHItb3JkZXItc20tZmlyc3R7b3JkZXI6LTF9LmNsci1vcmRlci1zbS1sYXN0e29yZGVyOjEzfS5jbHItb3JkZXItc20tMHtvcmRlcjowfS5jbHIt''@;'; put 'put ''b3JkZXItc20tMXtvcmRlcjoxfS5jbHItb3JkZXItc20tMntvcmRlcjoyfS5jbHItb3JkZXItc20tM3tvcmRlcjozfS5jbHItb3JkZXItc20tNHtvcmRlcjo0fS5jbHItb3JkZXItc20tNXtvcmRlcjo1fS5jbHItb3JkZXItc20tNntvcmRlcjo2fS5jbHItb3JkZXItc20tN3tvcmRlcjo3fS5j''@;'; put 'put ''bHItb3JkZXItc20tOHtvcmRlcjo4fS5jbHItb3JkZXItc20tOXtvcmRlcjo5fS5jbHItb3JkZXItc20tMTB7b3JkZXI6MTB9LmNsci1vcmRlci1zbS0xMXtvcmRlcjoxMX0uY2xyLW9yZGVyLXNtLTEye29yZGVyOjEyfS5jbHItb2Zmc2V0LXNtLTB7bWFyZ2luLWxlZnQ6MH0uY2xyLW9mZnNl''@;'; put 'put ''dC1zbS0xe21hcmdpbi1sZWZ0OjguMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtc20tMnttYXJnaW4tbGVmdDoxNi42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC1zbS0ze21hcmdpbi1sZWZ0OjI1JX0uY2xyLW9mZnNldC1zbS00e21hcmdpbi1sZWZ0OjMzLjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0''@;'; put 'put ''LXNtLTV7bWFyZ2luLWxlZnQ6NDEuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtc20tNnttYXJnaW4tbGVmdDo1MCV9LmNsci1vZmZzZXQtc20tN3ttYXJnaW4tbGVmdDo1OC4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1zbS04e21hcmdpbi1sZWZ0OjY2LjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0''@;'; put 'put ''LXNtLTl7bWFyZ2luLWxlZnQ6NzUlfS5jbHItb2Zmc2V0LXNtLTEwe21hcmdpbi1sZWZ0OjgzLjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LXNtLTExe21hcmdpbi1sZWZ0OjkxLjY2NjY2NjY2NjclfX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LmNsci1jb2wtbWR7ZmxleC1iYXNpczowO2Zs''@;'; put 'put ''ZXgtZ3JvdzoxO21heC13aWR0aDoxMDAlfS5jbHItY29sLW1kLWF1dG97ZmxleDowIDAgYXV0bzt3aWR0aDphdXRvO21heC13aWR0aDpub25lfS5jbHItY29sLW1kLTF7ZmxleDowIDAgOC4zMzMzMzMzMzMzJTttYXgtd2lkdGg6OC4zMzMzMzMzMzMzJX0uY2xyLWNvbC1tZC0ye2ZsZXg6MCAw''@;'; put 'put ''IDE2LjY2NjY2NjY2NjclO21heC13aWR0aDoxNi42NjY2NjY2NjY3JX0uY2xyLWNvbC1tZC0ze2ZsZXg6MCAwIDI1JTttYXgtd2lkdGg6MjUlfS5jbHItY29sLW1kLTR7ZmxleDowIDAgMzMuMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjMzLjMzMzMzMzMzMzMlfS5jbHItY29sLW1kLTV7ZmxleDow''@;'; put 'put ''IDAgNDEuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjQxLjY2NjY2NjY2NjclfS5jbHItY29sLW1kLTZ7ZmxleDowIDAgNTAlO21heC13aWR0aDo1MCV9LmNsci1jb2wtbWQtN3tmbGV4OjAgMCA1OC4zMzMzMzMzMzMzJTttYXgtd2lkdGg6NTguMzMzMzMzMzMzMyV9LmNsci1jb2wtbWQtOHtmbGV4''@;'; put 'put ''OjAgMCA2Ni42NjY2NjY2NjY3JTttYXgtd2lkdGg6NjYuNjY2NjY2NjY2NyV9LmNsci1jb2wtbWQtOXtmbGV4OjAgMCA3NSU7bWF4LXdpZHRoOjc1JX0uY2xyLWNvbC1tZC0xMHtmbGV4OjAgMCA4My4zMzMzMzMzMzMzJTttYXgtd2lkdGg6ODMuMzMzMzMzMzMzMyV9LmNsci1jb2wtbWQtMTF7''@;'; put 'put ''ZmxleDowIDAgOTEuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjkxLjY2NjY2NjY2NjclfS5jbHItY29sLW1kLTEye2ZsZXg6MCAwIDEwMCU7bWF4LXdpZHRoOjEwMCV9LmNsci1vcmRlci1tZC1maXJzdHtvcmRlcjotMX0uY2xyLW9yZGVyLW1kLWxhc3R7b3JkZXI6MTN9LmNsci1vcmRlci1tZC0w''@;'; put 'put ''e29yZGVyOjB9LmNsci1vcmRlci1tZC0xe29yZGVyOjF9LmNsci1vcmRlci1tZC0ye29yZGVyOjJ9LmNsci1vcmRlci1tZC0ze29yZGVyOjN9LmNsci1vcmRlci1tZC00e29yZGVyOjR9LmNsci1vcmRlci1tZC01e29yZGVyOjV9LmNsci1vcmRlci1tZC02e29yZGVyOjZ9LmNsci1vcmRlci1t''@;'; put 'put ''ZC03e29yZGVyOjd9LmNsci1vcmRlci1tZC04e29yZGVyOjh9LmNsci1vcmRlci1tZC05e29yZGVyOjl9LmNsci1vcmRlci1tZC0xMHtvcmRlcjoxMH0uY2xyLW9yZGVyLW1kLTExe29yZGVyOjExfS5jbHItb3JkZXItbWQtMTJ7b3JkZXI6MTJ9LmNsci1vZmZzZXQtbWQtMHttYXJnaW4tbGVm''@;'; put 'put ''dDowfS5jbHItb2Zmc2V0LW1kLTF7bWFyZ2luLWxlZnQ6OC4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1tZC0ye21hcmdpbi1sZWZ0OjE2LjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LW1kLTN7bWFyZ2luLWxlZnQ6MjUlfS5jbHItb2Zmc2V0LW1kLTR7bWFyZ2luLWxlZnQ6MzMuMzMzMzMzMzMz''@;'; put 'put ''MyV9LmNsci1vZmZzZXQtbWQtNXttYXJnaW4tbGVmdDo0MS42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC1tZC02e21hcmdpbi1sZWZ0OjUwJX0uY2xyLW9mZnNldC1tZC03e21hcmdpbi1sZWZ0OjU4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LW1kLTh7bWFyZ2luLWxlZnQ6NjYuNjY2NjY2NjY2''@;'; put 'put ''NyV9LmNsci1vZmZzZXQtbWQtOXttYXJnaW4tbGVmdDo3NSV9LmNsci1vZmZzZXQtbWQtMTB7bWFyZ2luLWxlZnQ6ODMuMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtbWQtMTF7bWFyZ2luLWxlZnQ6OTEuNjY2NjY2NjY2NyV9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXsuY2xyLWNvbC1sZ3tm''@;'; put 'put ''bGV4LWJhc2lzOjA7ZmxleC1ncm93OjE7bWF4LXdpZHRoOjEwMCV9LmNsci1jb2wtbGctYXV0b3tmbGV4OjAgMCBhdXRvO3dpZHRoOmF1dG87bWF4LXdpZHRoOm5vbmV9LmNsci1jb2wtbGctMXtmbGV4OjAgMCA4LjMzMzMzMzMzMzMlO21heC13aWR0aDo4LjMzMzMzMzMzMzMlfS5jbHItY29s''@;'; put 'put ''LWxnLTJ7ZmxleDowIDAgMTYuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjE2LjY2NjY2NjY2NjclfS5jbHItY29sLWxnLTN7ZmxleDowIDAgMjUlO21heC13aWR0aDoyNSV9LmNsci1jb2wtbGctNHtmbGV4OjAgMCAzMy4zMzMzMzMzMzMzJTttYXgtd2lkdGg6MzMuMzMzMzMzMzMzMyV9LmNsci1j''@;'; put 'put ''b2wtbGctNXtmbGV4OjAgMCA0MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6NDEuNjY2NjY2NjY2NyV9LmNsci1jb2wtbGctNntmbGV4OjAgMCA1MCU7bWF4LXdpZHRoOjUwJX0uY2xyLWNvbC1sZy03e2ZsZXg6MCAwIDU4LjMzMzMzMzMzMzMlO21heC13aWR0aDo1OC4zMzMzMzMzMzMzJX0uY2xy''@;'; put 'put ''LWNvbC1sZy04e2ZsZXg6MCAwIDY2LjY2NjY2NjY2NjclO21heC13aWR0aDo2Ni42NjY2NjY2NjY3JX0uY2xyLWNvbC1sZy05e2ZsZXg6MCAwIDc1JTttYXgtd2lkdGg6NzUlfS5jbHItY29sLWxnLTEwe2ZsZXg6MCAwIDgzLjMzMzMzMzMzMzMlO21heC13aWR0aDo4My4zMzMzMzMzMzMzJX0u''@;'; put 'put ''Y2xyLWNvbC1sZy0xMXtmbGV4OjAgMCA5MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6OTEuNjY2NjY2NjY2NyV9LmNsci1jb2wtbGctMTJ7ZmxleDowIDAgMTAwJTttYXgtd2lkdGg6MTAwJX0uY2xyLW9yZGVyLWxnLWZpcnN0e29yZGVyOi0xfS5jbHItb3JkZXItbGctbGFzdHtvcmRlcjoxM30u''@;'; put 'put ''Y2xyLW9yZGVyLWxnLTB7b3JkZXI6MH0uY2xyLW9yZGVyLWxnLTF7b3JkZXI6MX0uY2xyLW9yZGVyLWxnLTJ7b3JkZXI6Mn0uY2xyLW9yZGVyLWxnLTN7b3JkZXI6M30uY2xyLW9yZGVyLWxnLTR7b3JkZXI6NH0uY2xyLW9yZGVyLWxnLTV7b3JkZXI6NX0uY2xyLW9yZGVyLWxnLTZ7b3JkZXI6''@;'; put 'put ''Nn0uY2xyLW9yZGVyLWxnLTd7b3JkZXI6N30uY2xyLW9yZGVyLWxnLTh7b3JkZXI6OH0uY2xyLW9yZGVyLWxnLTl7b3JkZXI6OX0uY2xyLW9yZGVyLWxnLTEwe29yZGVyOjEwfS5jbHItb3JkZXItbGctMTF7b3JkZXI6MTF9LmNsci1vcmRlci1sZy0xMntvcmRlcjoxMn0uY2xyLW9mZnNldC1s''@;'; put 'put ''Zy0we21hcmdpbi1sZWZ0OjB9LmNsci1vZmZzZXQtbGctMXttYXJnaW4tbGVmdDo4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LWxnLTJ7bWFyZ2luLWxlZnQ6MTYuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtbGctM3ttYXJnaW4tbGVmdDoyNSV9LmNsci1vZmZzZXQtbGctNHttYXJnaW4tbGVm''@;'; put 'put ''dDozMy4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1sZy01e21hcmdpbi1sZWZ0OjQxLjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LWxnLTZ7bWFyZ2luLWxlZnQ6NTAlfS5jbHItb2Zmc2V0LWxnLTd7bWFyZ2luLWxlZnQ6NTguMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtbGctOHttYXJnaW4tbGVm''@;'; put 'put ''dDo2Ni42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC1sZy05e21hcmdpbi1sZWZ0Ojc1JX0uY2xyLW9mZnNldC1sZy0xMHttYXJnaW4tbGVmdDo4My4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1sZy0xMXttYXJnaW4tbGVmdDo5MS42NjY2NjY2NjY3JX19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4''@;'; put 'put ''KXsuY2xyLWNvbC14bHtmbGV4LWJhc2lzOjA7ZmxleC1ncm93OjE7bWF4LXdpZHRoOjEwMCV9LmNsci1jb2wteGwtYXV0b3tmbGV4OjAgMCBhdXRvO3dpZHRoOmF1dG87bWF4LXdpZHRoOm5vbmV9LmNsci1jb2wteGwtMXtmbGV4OjAgMCA4LjMzMzMzMzMzMzMlO21heC13aWR0aDo4LjMzMzMz''@;'; put 'put ''MzMzMzMlfS5jbHItY29sLXhsLTJ7ZmxleDowIDAgMTYuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjE2LjY2NjY2NjY2NjclfS5jbHItY29sLXhsLTN7ZmxleDowIDAgMjUlO21heC13aWR0aDoyNSV9LmNsci1jb2wteGwtNHtmbGV4OjAgMCAzMy4zMzMzMzMzMzMzJTttYXgtd2lkdGg6MzMuMzMz''@;'; put 'put ''MzMzMzMzMyV9LmNsci1jb2wteGwtNXtmbGV4OjAgMCA0MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6NDEuNjY2NjY2NjY2NyV9LmNsci1jb2wteGwtNntmbGV4OjAgMCA1MCU7bWF4LXdpZHRoOjUwJX0uY2xyLWNvbC14bC03e2ZsZXg6MCAwIDU4LjMzMzMzMzMzMzMlO21heC13aWR0aDo1OC4z''@;'; put 'put ''MzMzMzMzMzMzJX0uY2xyLWNvbC14bC04e2ZsZXg6MCAwIDY2LjY2NjY2NjY2NjclO21heC13aWR0aDo2Ni42NjY2NjY2NjY3JX0uY2xyLWNvbC14bC05e2ZsZXg6MCAwIDc1JTttYXgtd2lkdGg6NzUlfS5jbHItY29sLXhsLTEwe2ZsZXg6MCAwIDgzLjMzMzMzMzMzMzMlO21heC13aWR0aDo4''@;'; put 'put ''My4zMzMzMzMzMzMzJX0uY2xyLWNvbC14bC0xMXtmbGV4OjAgMCA5MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6OTEuNjY2NjY2NjY2NyV9LmNsci1jb2wteGwtMTJ7ZmxleDowIDAgMTAwJTttYXgtd2lkdGg6MTAwJX0uY2xyLW9yZGVyLXhsLWZpcnN0e29yZGVyOi0xfS5jbHItb3JkZXIteGwt''@;'; put 'put ''bGFzdHtvcmRlcjoxM30uY2xyLW9yZGVyLXhsLTB7b3JkZXI6MH0uY2xyLW9yZGVyLXhsLTF7b3JkZXI6MX0uY2xyLW9yZGVyLXhsLTJ7b3JkZXI6Mn0uY2xyLW9yZGVyLXhsLTN7b3JkZXI6M30uY2xyLW9yZGVyLXhsLTR7b3JkZXI6NH0uY2xyLW9yZGVyLXhsLTV7b3JkZXI6NX0uY2xyLW9y''@;'; put 'put ''ZGVyLXhsLTZ7b3JkZXI6Nn0uY2xyLW9yZGVyLXhsLTd7b3JkZXI6N30uY2xyLW9yZGVyLXhsLTh7b3JkZXI6OH0uY2xyLW9yZGVyLXhsLTl7b3JkZXI6OX0uY2xyLW9yZGVyLXhsLTEwe29yZGVyOjEwfS5jbHItb3JkZXIteGwtMTF7b3JkZXI6MTF9LmNsci1vcmRlci14bC0xMntvcmRlcjox''@;'; put 'put ''Mn0uY2xyLW9mZnNldC14bC0we21hcmdpbi1sZWZ0OjB9LmNsci1vZmZzZXQteGwtMXttYXJnaW4tbGVmdDo4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LXhsLTJ7bWFyZ2luLWxlZnQ6MTYuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQteGwtM3ttYXJnaW4tbGVmdDoyNSV9LmNsci1vZmZzZXQt''@;'; put 'put ''eGwtNHttYXJnaW4tbGVmdDozMy4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC14bC01e21hcmdpbi1sZWZ0OjQxLjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LXhsLTZ7bWFyZ2luLWxlZnQ6NTAlfS5jbHItb2Zmc2V0LXhsLTd7bWFyZ2luLWxlZnQ6NTguMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQt''@;'; put 'put ''eGwtOHttYXJnaW4tbGVmdDo2Ni42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC14bC05e21hcmdpbi1sZWZ0Ojc1JX0uY2xyLW9mZnNldC14bC0xMHttYXJnaW4tbGVmdDo4My4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC14bC0xMXttYXJnaW4tbGVmdDo5MS42NjY2NjY2NjY3JX19LmNsci1icmVh''@;'; put 'put ''ay1yb3d7d2lkdGg6MTAwJX0qLDpiZWZvcmUsOmFmdGVye2JveC1zaXppbmc6Ym9yZGVyLWJveH11bC5saXN0LXVuc3R5bGVkOm5vdChbY2RzLWxpc3RdKXtwYWRkaW5nLWxlZnQ6MDttYXJnaW4tbGVmdDowO2xpc3Qtc3R5bGUtcG9zaXRpb246b3V0c2lkZX11bC5saXN0LXVuc3R5bGVkOm5v''@;'; put 'put ''dChbY2RzLWxpc3RdKSBsaTo6bWFya2Vye2NvbG9yOnRyYW5zcGFyZW50fWxpe2NvbG9yOnZhcigtLWNsci1saXN0LWl0ZW0tY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9n''@;'; put 'put ''cmFwaHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyl9dWw6bm90KFtjZHMtbGlzdF0pLG9s''@;'; put 'put ''Om5vdChbY2RzLWxpc3RdKXtsaXN0LXN0eWxlLXBvc2l0aW9uOmluc2lkZTttYXJnaW4tbGVmdDowO21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjA7cGFkZGluZy1sZWZ0OjB9dWwubGlzdDpub3QoW2Nkcy1saXN0XSksb2wubGlzdDpub3QoW2Nkcy1saXN0XSl7bGlzdC1zdHlsZS1wb3Np''@;'; put 'put ''dGlvbjpvdXRzaWRlO21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9dWwubGlzdDpub3QoW2Nkcy1saXN0XSkuY29tcGFjdD5saSxvbC5saXN0Om5vdChbY2RzLWxpc3RdKS5jb21wYWN0Pmxpe21hcmdpbi1ib3R0b206MH11bDpub3QoLmxpc3QtdW5zdHlsZWQpOm5vdChb''@;'; put 'put ''Y2RzLWxpc3RdKT5saT51bC5saXN0LXVuc3R5bGVkLG9sOm5vdChbY2RzLWxpc3RdKT5saT51bC5saXN0LXVuc3R5bGVke21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9bGk+dWw6bm90KFtjZHMtbGlzdF0pe21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTYpfXVsLmxpc3QtZ3JvdXA6bm90KFtjZHMtbGlzdF0pe21hcmdpbi10b3A6MH11bDpub3QoW2Nkcy1saXN0XSkubGlzdC1zcGFjZXIsb2w6bm90KFtjZHMtbGlzdF0pLmxpc3Qtc3BhY2Vye21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX1wcmV7bWFy''@;'; put 'put ''Z2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgMH1wcmV7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApfXByZSBjb2Rle3doaXRlLXNwYWNlOnByZX1jb2RlLmNsci1jb2Rle2NvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LXJlZCk7cGFkZGluZzowO2JhY2tncm91bmQ6MCAwfWgxOm5vdChbY2RzLXRleHRdKXttYXJnaW4tdG9wOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1oMS1mb250LWZhbWlseSk7Y29sb3I6dmFyKC0tY2xyLWgxLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2xyLWgxLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWgxLWZvbnQtd2Vp''@;'; put 'put ''Z2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jbHItaDEtbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNsci1oMS1sZXR0ZXItc3BhY2luZyl9aDI6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1m''@;'; put 'put ''YW1pbHk6dmFyKC0tY2xyLWgyLWZvbnQtZmFtaWx5KTtjb2xvcjp2YXIoLS1jbHItaDItY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItaDItZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItaDItZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1oMi1saW5lLWhlaWdo''@;'; put 'put ''dCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLWgyLWxldHRlci1zcGFjaW5nKX1oMzpub3QoW2Nkcy10ZXh0XSl7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbi1ib3R0b206MDtmb250LWZhbWlseTp2YXIoLS1jbHItaDMtZm9udC1mYW1pbHkpO2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1oMy1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1oMy1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1oMy1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLWgzLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItaDMtbGV0dGVyLXNw''@;'; put 'put ''YWNpbmcpfWg0Om5vdChbY2RzLXRleHRdKXttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1oNC1mb250LWZhbWlseSk7Y29sb3I6dmFyKC0tY2xyLWg0LWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2xyLWg0''@;'; put 'put ''LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWg0LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jbHItaDQtbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNsci1oNC1sZXR0ZXItc3BhY2luZyl9aDU6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWg1LWZvbnQtZmFtaWx5KTtjb2xvcjp2YXIoLS1jbHItaDUtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItaDUtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItaDUtZm9u''@;'; put 'put ''dC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1oNS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLWg1LWxldHRlci1zcGFjaW5nKX1oNjpub3QoW2Nkcy10ZXh0XSl7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbi1ib3R0b206MDtm''@;'; put 'put ''b250LWZhbWlseTp2YXIoLS1jbHItaDYtZm9udC1mYW1pbHkpO2NvbG9yOnZhcigtLWNsci1oNi1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1oNi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1oNi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLWg2LWxpbmUt''@;'; put 'put ''aGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItaDYtbGV0dGVyLXNwYWNpbmcpfWJvZHk6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6MCFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1mb250KTtjb2xvcjp2YXIoLS1jbHItcDEtY29sb3Ip''@;'; put 'put ''O2ZvbnQtc2l6ZTp2YXIoLS1jbHItcDEtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItcDEtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1wMS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLXAxLWxldHRlci1zcGFjaW5nKX1ib2R5IHA6bm90''@;'; put 'put ''KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wMS1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wMS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0''@;'; put 'put ''OnZhcigtLWNsci1wMS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXAxLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDEtbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnAwOm5vdChbY2RzLXRleHRdKSxib2R5IHAucDA6bm90KFtjZHMtdGV4dF0pe21hcmdp''@;'; put 'put ''bi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wMC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wMC1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wMC1mb250''@;'; put 'put ''LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXAwLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDAtbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnAyOm5vdChbY2RzLXRleHRdKSxib2R5IHAucDI6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wMi1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wMi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wMi1mb250LXdlaWdodCk7bGluZS1oZWln''@;'; put 'put ''aHQ6dmFyKC0tY2xyLXAyLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDItbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnAzOm5vdChbY2RzLXRleHRdKSxib2R5IHAucDM6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJn''@;'; put 'put ''aW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wMy1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wMy1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wMy1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXAzLWxp''@;'; put 'put ''bmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDMtbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnA0Om5vdChbY2RzLXRleHRdKSxib2R5IHAucDQ6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1m''@;'; put 'put ''YW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wNC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wNC1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wNC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXA0LWxpbmUtaGVpZ2h0KTtsZXR0ZXIt''@;'; put 'put ''c3BhY2luZzp2YXIoLS1jbHItcDQtbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnA1Om5vdChbY2RzLXRleHRdKSxib2R5IHAucDU6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZv''@;'; put 'put ''bnQpO2NvbG9yOnZhcigtLWNsci1wNS1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wNS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wNS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXA1LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHIt''@;'; put 'put ''cDUtbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnA2Om5vdChbY2RzLXRleHRdKSxib2R5IHAucDY6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1wNi1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wNi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wNi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXA2LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDYtbGV0dGVyLXNwYWNpbmcp''@;'; put 'put ''fWJvZHkgLnA3Om5vdChbY2RzLXRleHRdKSxib2R5IHAucDc6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wNy1jb2xvcik7Zm9udC1z''@;'; put 'put ''aXplOnZhcigtLWNsci1wNy1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wNy1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXA3LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDctbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnA4Om5vdChbY2Rz''@;'; put 'put ''LXRleHRdKSxib2R5IHAucDg6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wOC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wOC1m''@;'; put 'put ''b250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wOC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXA4LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDgtbGV0dGVyLXNwYWNpbmcpfS50ZXh0LWxpZ2h0e2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1m''@;'; put 'put ''b250LXdlaWdodC1saWdodCl9LnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodCFpbXBvcnRhbnR9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyIWltcG9ydGFudH0udGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdCFpbXBvcnRhbnR9LnRleHQtanVzdGlmeXt0ZXh0LWFsaWduOmp1c3Rp''@;'; put 'put ''ZnkhaW1wb3J0YW50fWh0bWw6bm90KFtjZHMtdGV4dF0pe2NvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQ1MCk7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2ZvbnQtc2l6ZTpjYWxjKHZhcigtLWNkcy1nbG9iYWwtYmFzZSkvMTYqMTAwJSl9OnJvb3QgW2Nkcy10''@;'; put 'put ''aGVtZV17LS1jbHItbGluay1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvcik7LS1jbHItbGluay1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yKTstLWNsci1saW5rLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LWxpbmstY29sb3ItaG92ZXIpOy0tY2xyLWxpbmstdmlzaXRlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQpOy0tY2xyLWxpbmstdmlzaXRlZC1jb2xvci1ob3Zlcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNv''@;'; put 'put ''bG9yLXZpc2l0ZWQtaG92ZXIpfWh0bWx7Ym94LXNpemluZzpib3JkZXItYm94fSosOmJlZm9yZSw6YWZ0ZXJ7Ym94LXNpemluZzppbmhlcml0fWh0bWx7LW1zLW92ZXJmbG93LXN0eWxlOnNjcm9sbGJhcjstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9aW1ne3ZlcnRp''@;'; put 'put ''Y2FsLWFsaWduOm1pZGRsZX1bcm9sZT1idXR0b25de2N1cnNvcjpwb2ludGVyfWEsYXJlYSxidXR0b24sW3JvbGU9YnV0dG9uXSxpbnB1dCxsYWJlbCxzZWxlY3Qsc3VtbWFyeSx0ZXh0YXJlYXt0b3VjaC1hY3Rpb246bWFuaXB1bGF0aW9ufWlucHV0LGJ1dHRvbixzZWxlY3QsdGV4dGFyZWF7''@;'; put 'put ''Ym9yZGVyLXJhZGl1czowfWlucHV0W3R5cGU9cmFkaW9dOmRpc2FibGVkLGlucHV0W3R5cGU9Y2hlY2tib3hdOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZH1pbnB1dFt0eXBlPWRhdGVdLGlucHV0W3R5cGU9dGltZV0saW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF0saW5wdXRbdHlwZT1t''@;'; put 'put ''b250aF17LXdlYmtpdC1hcHBlYXJhbmNlOmxpc3Rib3h9dGV4dGFyZWF7cmVzaXplOnZlcnRpY2FsfWZpZWxkc2V0e21pbi13aWR0aDowO3BhZGRpbmc6MDttYXJnaW46MDtib3JkZXI6MH1sZWdlbmR7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO3BhZGRpbmc6MDtsaW5lLWhlaWdodDppbmhl''@;'; put 'put ''cml0fWlucHV0W3R5cGU9c2VhcmNoXXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX1baGlkZGVuXXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fWRse21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjFyZW19dGFibGV7Ym9yZGVyLXNwYWNpbmc6MH0uY2xyLXNyLW9ubHl7cG9zaXRpb246YWJzb2x1''@;'; put 'put ''dGU7Y2xpcDpyZWN0KDFweCwxcHgsMXB4LDFweCk7Y2xpcC1wYXRoOmluc2V0KDUwJSk7cGFkZGluZzowO2JvcmRlcjowO2hlaWdodDoxcHg7d2lkdGg6MXB4O292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dG9wOjA7bGVmdDowfS5hbGVydC1pY29uLC5jbHItaWNvbntkaXNw''@;'; put 'put ''bGF5OmlubGluZS1ibG9jaztoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3BhZGRpbmc6MDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOmNvbnRhaW47dmVydGljYWwtYWxpZ246bWlkZGxl''@;'; put 'put ''fS5hbGVydC1pY29uLmNsci1pY29uLXdhcm5pbmcsLmFsZXJ0LWljb24uaWNvbi13YXJuaW5nLC5jbHItaWNvbi5jbHItaWNvbi13YXJuaW5nLC5jbHItaWNvbi5pY29uLXdhcm5pbmd7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0Nzdmcl''@;'; put 'put ''MjB2ZXJzaW9uJTNEJTIyMS4xJTIyJTIwdmlld0JveCUzRCUyMjUlMjA1JTIwMjYlMjAyNiUyMiUyMHByZXNlcnZlQXNwZWN0UmF0aW8lM0QlMjJ4TWlkWU1pZCUyMG1lZXQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHhtbG5zJTNB''@;'; put 'put ''eGxpbmslM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjE5OTklMkZ4bGluayUyMiUzRSUzQ2RlZnMlM0UlM0NzdHlsZSUyMHR5cGUlM0QlMjJ0ZXh0JTJGY3NzJTIyJTNFJTBBJTA5LmNsci1pLW91dGxpbmUlN0JmaWxsLXJ1bGUlM0FldmVub2RkJTNCY2xpcC1ydWxlJTNBZXZlbm9k''@;'; put 'put ''ZCUzQmZpbGwlM0ElMjM3NDc0NzQlM0IlN0QlM0MlMkZzdHlsZSUzRSUzQyUyRmRlZnMlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0N0aXRsZSUzRWV4Y2xhbWF0aW9uLXRyaWFuZ2xlLWxpbmUlM0MlMkZ0aXRsZSUzRSUwQSUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BhdGglMjBjbGFzcyUzRCUyMmNsci1pLW91dGxpbmUlMjBjbHItaS1vdXRsaW5lLXBhdGgtMSUyMiUyMGQlM0QlMjJNMTglMkMyMS4zMmExLjMlMkMxLjMlMkMwJTJDMCUyQzAlMkMxLjMtMS4zVjE0YTEuMyUyQzEu''@;'; put 'put ''MyUyQzAlMkMxJTJDMC0yLjYlMkMwdjZBMS4zJTJDMS4zJTJDMCUyQzAlMkMwJTJDMTglMkMyMS4zMlolMjIlM0UlM0MlMkZwYXRoJTNFJTNDY2lyY2xlJTIwY2xhc3MlM0QlMjJjbHItaS1vdXRsaW5lJTIwY2xyLWktb3V0bGluZS1wYXRoLTIlMjIlMjBjeCUzRCUyMjE3Ljk1JTIyJTIwY3kl''@;'; put 'put ''M0QlMjIyNC4yNyUyMiUyMHIlM0QlMjIxLjUlMjIlM0UlM0MlMkZjaXJjbGUlM0UlM0NwYXRoJTIwY2xhc3MlM0QlMjJjbHItaS1vdXRsaW5lJTIwY2xyLWktb3V0bGluZS1wYXRoLTMlMjIlMjBkJTNEJTIyTTMwLjMzJTJDMjUuNTQlMkMyMC41OSUyQzcuNmEzJTJDMyUyQzAlMkMwJTJDMC01''@;'; put 'put ''LjI3JTJDMEw1LjU3JTJDMjUuNTRBMyUyQzMlMkMwJTJDMCUyQzAlMkM4LjIxJTJDMzBIMjcuNjlhMyUyQzMlMkMwJTJDMCUyQzAlMkMyLjY0LTQuNDNabS0xLjc4JTJDMS45NGExJTJDMSUyQzAlMkMwJTJDMS0uODYuNDlIOC4yMWExJTJDMSUyQzAlMkMwJTJDMS0uODgtMS40OEwxNy4wNyUy''@;'; put 'put ''QzguNTVhMSUyQzElMkMwJTJDMCUyQzElMkMxLjc2JTJDMGw5Ljc0JTJDMTcuOTRBMSUyQzElMkMwJTJDMCUyQzElMkMyOC41NSUyQzI3LjQ4WiUyMiUzRSUzQyUyRnBhdGglM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZzdmclM0UpfS5hbGVydC1pY29u''@;'; put 'put ''LmNsci1pY29uLXdhcm5pbmctd2hpdGUsLmNsci1pY29uLmNsci1pY29uLXdhcm5pbmctd2hpdGV7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIwdmVyc2lvbiUzRCUyMjEuMSUyMiUyMHZpZXdCb3glM0QlMjI1JTIwNSUyMDI2''@;'; put 'put ''JTIwMjYlMjIlMjBwcmVzZXJ2ZUFzcGVjdFJhdGlvJTNEJTIyeE1pZFlNaWQlMjBtZWV0JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlMjB4bWxucyUzQXhsaW5rJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYxOTk5JTJGeGxp''@;'; put 'put ''bmslMjIlM0UlM0NkZWZzJTNFJTNDc3R5bGUlMjB0eXBlJTNEJTIydGV4dCUyRmNzcyUyMiUzRSUwQSUwOS5jbHItaS1vdXRsaW5lJTdCZmlsbC1ydWxlJTNBZXZlbm9kZCUzQmNsaXAtcnVsZSUzQWV2ZW5vZGQlM0JmaWxsJTNBaHNsKDE5OCwgMCUsIDEwMCUpJTNCJTdEJTNDJTJGc3R5bGUl''@;'; put 'put ''M0UlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VleGNsYW1hdGlvbi10cmlhbmdsZS1saW5lJTNDJTJGdGl0bGUlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlM0NwYXRoJTIwY2xhc3MlM0QlMjJjbHItaS1vdXRsaW5lJTIwY2xyLWktb3V0bGluZS1wYXRoLTElMjIlMjBkJTNEJTIyTTE4JTJDMjEuMzJhMS4zJTJDMS4zJTJDMCUyQzAlMkMwJTJDMS4zLTEuM1YxNGExLjMlMkMxLjMlMkMwJTJDMSUyQzAtMi42JTJDMHY2QTEuMyUyQzEuMyUyQzAl''@;'; put 'put ''MkMwJTJDMCUyQzE4JTJDMjEuMzJaJTIyJTNFJTNDJTJGcGF0aCUzRSUzQ2NpcmNsZSUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUtcGF0aC0yJTIyJTIwY3glM0QlMjIxNy45NSUyMiUyMGN5JTNEJTIyMjQuMjclMjIlMjByJTNEJTIyMS41JTIyJTNFJTNDJTJG''@;'; put 'put ''Y2lyY2xlJTNFJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUtcGF0aC0zJTIyJTIwZCUzRCUyMk0zMC4zMyUyQzI1LjU0JTJDMjAuNTklMkM3LjZhMyUyQzMlMkMwJTJDMCUyQzAtNS4yNyUyQzBMNS41NyUyQzI1LjU0QTMlMkMzJTJDMCUyQzAlMkMw''@;'; put 'put ''JTJDOC4yMSUyQzMwSDI3LjY5YTMlMkMzJTJDMCUyQzAlMkMwJTJDMi42NC00LjQzWm0tMS43OCUyQzEuOTRhMSUyQzElMkMwJTJDMCUyQzEtLjg2LjQ5SDguMjFhMSUyQzElMkMwJTJDMCUyQzEtLjg4LTEuNDhMMTcuMDclMkM4LjU1YTElMkMxJTJDMCUyQzAlMkMxJTJDMS43NiUyQzBsOS43''@;'; put 'put ''NCUyQzE3Ljk0QTElMkMxJTJDMCUyQzAlMkMxJTJDMjguNTUlMkMyNy40OFolMjIlM0UlM0MlMkZwYXRoJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGc3ZnJTNFIil9LmFsZXJ0LWljb24uY2xyLXZtdy1sb2dvLC5jbHItaWNvbi5jbHItdm13LWxvZ297''@;'; put 'put ''YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMzYlMjAzNiUyMiUyMHZlcnNpb24lM0QlMjIxLjElMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2''@;'; put 'put ''ZyUyMiUyMHhtbG5zJTNBeGxpbmslM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjE5OTklMkZ4bGluayUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3RpdGxlJTNFdm0lMjBidWclM0MlMkZ0aXRsZSUzRSUwQSUyMCUyMCUyMCUyMCUzQ2RlZnMlM0UlM0MlMkZkZWZzJTNFJTBBJTIwJTIw''@;'; put 'put ''JTIwJTIwJTNDZyUyMGlkJTNEJTIySGVhZGVycyUyMiUyMHN0cm9rZSUzRCUyMm5vbmUlMjIlMjBzdHJva2Utd2lkdGglM0QlMjIxJTIyJTIwZmlsbCUzRCUyMm5vbmUlMjIlMjBmaWxsLXJ1bGUlM0QlMjJldmVub2RkJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDZyUyMGlk''@;'; put 'put ''JTNEJTIyQ0wtSGVhZGVycy1TcGVjcyUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSgtMjYyLjAwMDAwMCUyQyUyMC0xNzUuMDAwMDAwKSUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2clMjBpZCUzRCUyMjAxJTIyJTIwdHJhbnNmb3JtJTNEJTIy''@;'; put 'put ''dHJhbnNsYXRlKDIzOC4wMDAwMDAlMkMlMjAxNjMuMDAwMDAwKSUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2clMjBpZCUzRCUyMnZtLWJ1ZyUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSgyNC43MDMxMjUlMkMlMjAxMi4w''@;'; put 'put ''MDAwMDApJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGlkJTNEJTIyUmVjdGFuZ2xlLTQyJTIyJTIwZmlsbC1vcGFjaXR5JTNEJTIyMC4yNSUyMiUyMGZpbGwlM0QlMjIlMjNEREREREQlMjIlMjBv''@;'; put 'put ''cGFjaXR5JTNEJTIyMC42JTIyJTIweCUzRCUyMjAlMjIlMjB5JTNEJTIyMCUyMiUyMHdpZHRoJTNEJTIyMzYlMjIlMjBoZWlnaHQlM0QlMjIzNiUyMiUyMHJ4JTNEJTIyMyUyMiUzRSUzQyUyRnJlY3QlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk03LjYzOTQ4Mzc2JTJDMTMuODc2MjQwMiUyMEM3LjMyMjY1MzI0JTJDMTMuMjA5NzA4MiUyMDYuNTM5NzgxNTIlMkMxMi45MDg1MTM5JTIwNS44MDkyMzA0MiUyQzEzLjIxOTkzNCUyMEM1LjA3NzcxMDQzJTJDMTMuNTMyMjgzNyUyMDQu''@;'; put 'put ''ODA5MzI0OTUlMkMxNC4zMTAzNjkxJTIwNS4xMzk3MjAwNyUyQzE0Ljk3NjkwMTElMjBMOC4yMDcyNTk1NCUyQzIxLjM3NDQ5MjMlMjBDOC42ODk3NzIwNyUyQzIyLjM3ODQ3MzUlMjA5LjE5ODQ0NDkxJTJDMjIuOTAzNzA0NCUyMDEwLjE1MjgxMjElMkMyMi45MDM3MDQ0JTIwQzExLjE3MjA5''@;'; put 'put ''NTUlMkMyMi45MDM3MDQ0JTIwMTEuNjE2ODIwOSUyQzIyLjMzMTA2MzMlMjAxMi4wOTgzNjQ2JTJDMjEuMzc0NDkyMyUyMEMxMi4wOTgzNjQ2JTJDMjEuMzc0NDkyMyUyMDE0Ljc3NDQ2ODIlMkMxNS43ODQ3MzQxJTIwMTQuODAxNTk3NCUyQzE1LjcyNjE2ODUlMjBDMTQuODI4NzI2NiUyQzE1''@;'; put 'put ''LjY2NjY3MzMlMjAxNC45MTQ5NTg4JTJDMTUuNDg2MzI4NiUyMDE1LjE4NzIxOTklMkMxNS40ODcyNTgyJTIwQzE1LjQxNzgxODIlMkMxNS40OTAwNDclMjAxNS42MTA2Mjk0JTJDMTUuNjY1NzQzNyUyMDE1LjYxMDYyOTQlMkMxNS45MDE4NjUyJTIwTDE1LjYxMDYyOTQlMkMyMS4zNjk4NDQz''@;'; put 'put ''JTIwQzE1LjYxMDYyOTQlMkMyMi4yMTIwNzMlMjAxNi4wOTc5ODY1JTJDMjIuOTAzNzA0NCUyMDE3LjAzNDkxMzQlMkMyMi45MDM3MDQ0JTIwQzE3Ljk3MTg0MDMlMkMyMi45MDM3MDQ0JTIwMTguNDc4NTc1NCUyQzIyLjIxMjA3MyUyMDE4LjQ3ODU3NTQlMkMyMS4zNjk4NDQzJTIwTDE4LjQ3''@;'; put 'put ''ODU3NTQlMkMxNi44OTY1NTAzJTIwQzE4LjQ3ODU3NTQlMkMxNi4wMzM4NzAyJTIwMTkuMTIxOTI1NCUyQzE1LjQ3NDI0MzYlMjAyMC4wMDA3MTgzJTJDMTUuNDc0MjQzNiUyMEMyMC44Nzg1NDIzJTJDMTUuNDc0MjQzNiUyMDIxLjQ2Mzc1ODMlMkMxNi4wNTI0NjI0JTIwMjEuNDYzNzU4MyUy''@;'; put 'put ''QzE2Ljg5NjU1MDMlMjBMMjEuNDYzNzU4MyUyQzIxLjM2OTg0NDMlMjBDMjEuNDYzNzU4MyUyQzIyLjIxMjA3MyUyMDIxLjk1MjA4NDIlMkMyMi45MDM3MDQ0JTIwMjIuODg4MDQyMyUyQzIyLjkwMzcwNDQlMjBDMjMuODI0MDAwMyUyQzIyLjkwMzcwNDQlMjAyNC4zMzI2NzMxJTJDMjIuMjEy''@;'; put 'put ''MDczJTIwMjQuMzMyNjczMSUyQzIxLjM2OTg0NDMlMjBMMjQuMzMyNjczMSUyQzE2Ljg5NjU1MDMlMjBDMjQuMzMyNjczMSUyQzE2LjAzMzg3MDIlMjAyNC45NzUwNTQzJTJDMTUuNDc0MjQzNiUyMDI1Ljg1Mzg0NzIlMkMxNS40NzQyNDM2JTIwQzI2LjczMDcwMjMlMkMxNS40NzQyNDM2JTIw''@;'; put 'put ''MjcuMzE2ODg3MSUyQzE2LjA1MjQ2MjQlMjAyNy4zMTY4ODcxJTJDMTYuODk2NTUwMyUyMEwyNy4zMTY4ODcxJTJDMjEuMzY5ODQ0MyUyMEMyNy4zMTY4ODcxJTJDMjIuMjEyMDczJTIwMjcuODA1MjEzMSUyQzIyLjkwMzcwNDQlMjAyOC43NDIxNCUyQzIyLjkwMzcwNDQlMjBDMjkuNjc3MTI5''@;'; put 'put ''MSUyQzIyLjkwMzcwNDQlMjAzMC4xODQ4MzMxJTJDMjIuMjEyMDczJTIwMzAuMTg0ODMzMSUyQzIxLjM2OTg0NDMlMjBMMzAuMTg0ODMzMSUyQzE2LjI3ODM1ODIlMjBDMzAuMTg0ODMzMSUyQzE0LjQwNzA0ODglMjAyOC42MTgxMjA3JTJDMTMuMDk2Mjk1NiUyMDI2LjczMDcwMjMlMkMxMy4w''@;'; put 'put ''OTYyOTU2JTIwQzI0Ljg0NTIyMTYlMkMxMy4wOTYyOTU2JTIwMjMuNjY1MTAwNiUyQzE0LjM0NzU1MzYlMjAyMy42NjUxMDA2JTJDMTQuMzQ3NTUzNiUyMEMyMy4wMzcyNTMlMkMxMy41NjY2NzkzJTIwMjIuMTcyMDI0NyUyQzEzLjA5NzIyNTIlMjAyMC43MDg5ODQ3JTJDMTMuMDk3MjI1MiUy''@;'; put 'put ''MEMxOS4xNjQ1NTclMkMxMy4wOTcyMjUyJTIwMTcuODEyOTQwNiUyQzE0LjM0NzU1MzYlMjAxNy44MTI5NDA2JTJDMTQuMzQ3NTUzNiUyMEMxNy4xODQxMjQxJTJDMTMuNTY2Njc5MyUyMDE2LjExNTQyNjclMkMxMy4wOTcyMjUyJTIwMTUuMjMwODIwNCUyQzEzLjA5NzIyNTIlMjBDMTMuODYx''@;'; put 'put ''NzYzOCUyQzEzLjA5NzIyNTIlMjAxMi43NzQ2NTcyJTJDMTMuNjc1NDQ0JTIwMTIuMTExOTI5MiUyQzE1LjEzMDI4NzElMjBMMTAuMTUyODEyMSUyQzE5LjU2MDgxODklMjBMNy42Mzk0ODM3NiUyQzEzLjg3NjI0MDIlMjIlMjBpZCUzRCUyMkZpbGwtNCUyMiUyMGZpbGwlM0QlMjIlMjNGRkZG''@;'; put 'put ''RkYlMjIlM0UlM0MlMkZwYXRoJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRmclM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZn''@;'; put 'put ''JTNFJTBBJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwQSUzQyUyRnN2ZyUzRSIpfS5pcy1vZmYtc2NyZWVue3Bvc2l0aW9uOmZpeGVkIWltcG9ydGFudDtib3JkZXI6MCFpbXBvcnRhbnQ7aGVpZ2h0OjFweCFpbXBvcnRhbnQ7d2lkdGg6MXB4IWltcG9ydGFudDtsZWZ0OjAhaW1wb3J0YW50O3Rv''@;'; put 'put ''cDouMDVyZW0haW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiFpbXBvcnRhbnQ7dmlzaWJpbGl0eTpoaWRkZW4haW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnQ7bWFyZ2luOjAgMCAuMDVyZW0haW1wb3J0YW50fS5jbHItcG9wb3Zlci1jb250ZW50e3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6''@;'; put 'put ''MTA1MH06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1idG4tdmVydGljYWwtbWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCk7LS1jbHItYnRuLWhvcml6b250YWwtbWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7LS1jbHItYnRuLWhvcml6b250YWwtcGFkZGluZzp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTYpOy0tY2xyLWJ0bi12ZXJ0aWNhbC1wYWRkaW5nOjA7LS1jbHItYnRuLXBhZGRpbmc6dmFyKC0tY2xyLWJ0bi12ZXJ0aWNhbC1wYWRkaW5nKSB2YXIoLS1jbHItYnRuLWhvcml6b250YWwtcGFkZGluZyk7LS1jbHItYnRuLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTExKTstLWNsci1idG4taGVpZ2h0LXNtOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7LS1jbHItYnRuLWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItYnRuLWJvcmRlci13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTEpOy0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLWhlaWdodDp2YXIoLS1jbHItYnRuLWhlaWdodC1zbSk7LS1jbHItYnRuLWFwcGVhcmFuY2Utc3RhbmRhcmQtcGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7LS1jbHItYnRuLWFwcGVhcmFuY2Utc3RhbmRhcmQt''@;'; put 'put ''aWNvbi1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItYnRuLWFwcGVhcmFuY2UtZm9ybS1oZWlnaHQ6dmFyKC0tY2xyLWJ0bi1oZWlnaHQpOy0tY2xyLWJ0bi1hcHBlYXJhbmNlLWZvcm0tcGFkZGluZzp2YXIoLS1jbHItYnRuLXBhZGRpbmcpOy0tY2xyLWJ0bi1ncm91cC1m''@;'; put 'put ''b2N1cy1vdXRsaW5lOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZSk7LS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0wKTstLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRy''@;'; put 'put ''YW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLWJ0bi1kZWZhdWx0LWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY29sb3IpOy0tY2xyLWJ0bi1kZWZhdWx0LWJnLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbmZvLXNlY29uZGFyeS1ob3Zlcik7LS1jbHItYnRuLWRlZmF1bHQtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5''@;'; put 'put ''cG9ncmFwaHktaW5mby1ob3Zlcik7LS1jbHItYnRuLWRlZmF1bHQtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQt''@;'; put 'put ''ZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1kaXNhYmxlZC1ib3JkZXItY29s''@;'; put 'put ''b3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNv''@;'; put 'put ''bG9yKTstLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1ob3Zl''@;'; put 'put ''cik7LS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtY29sb3IpOy0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jb2xvcik7LS1jbHItYnRuLWRlZmF1''@;'; put 'put ''bHQtY2hlY2tlZC1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZC1idXR0b24pOy0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLWRlZmF1bHQt''@;'; put 'put ''b3V0bGluZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yOnZhcigtLWNsci1i''@;'; put 'put ''dG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8tc2Vjb25kYXJ5LWhvdmVyKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWhvdmVyLWNvbG9yOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LWluZm8taG92ZXIpOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLW91''@;'; put 'put ''dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxp''@;'; put 'put ''bmUtYmctY29sb3IpOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtY2hlY2tlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xv''@;'; put 'put ''ci0xMDApOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLXByaW1hcnktY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1idG4tcHJp''@;'; put 'put ''bWFyeS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLWJ0bi1wcmltYXJ5LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLWJ0bi1wcmltYXJ5LWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJh''@;'; put 'put ''Y3Rpb24taW5mby1ob3Zlcik7LS1jbHItYnRuLXByaW1hcnktaG92ZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWNvbG9yKTstLWNsci1idG4tcHJpbWFyeS1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1idG4tcHJpbWFyeS1h''@;'; put 'put ''Y3RpdmUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbmZvLWFjdGl2ZSk7LS1jbHItYnRuLXByaW1hcnktZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQtYnV0dG9uKTstLWNsci1idG4tcHJpbWFyeS1kaXNhYmxl''@;'; put 'put ''ZC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1idG4tcHJpbWFyeS1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLXByaW1hcnktY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtc3RhdHVzLWluZm8pOy0tY2xyLWJ0bi1wcmltYXJ5LWNoZWNrZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mbyk7LS1jbHItYnRuLXByaW1hcnkt''@;'; put 'put ''b3V0bGluZS1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWhvdmVyLWJnLWNvbG9y''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1zZWNvbmRhcnktaG92ZXIpOy0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaW5mby1ob3Zlcik7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1hY3Rp''@;'; put 'put ''dmUtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1jb2xvcik7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1kaXNhYmxlZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1kaXNhYmxlZC1ib3JkZXItY29sb3I6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1jaGVja2VkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1i''@;'; put 'put ''dG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tc3VjY2Vzcy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJ0bi1zdWNjZXNzLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItYnRuLXN1Y2Nl''@;'; put 'put ''c3MtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1iZy1jb2xvcik7LS1jbHItYnRuLXN1Y2Nlc3MtaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1zdWNjZXNzLWhvdmVyKTstLWNsci1idG4tc3VjY2Vzcy1ob3Zlci1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLXN1Y2Nlc3MtY29sb3IpOy0tY2xyLWJ0bi1zdWNjZXNzLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJ0bi1zdWNjZXNzLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXN1''@;'; put 'put ''Y2Nlc3MtYWN0aXZlKTstLWNsci1idG4tc3VjY2Vzcy1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZC1idXR0b24pOy0tY2xyLWJ0bi1zdWNjZXNzLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xy''@;'; put 'put ''LWJ0bi1zdWNjZXNzLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1idG4tc3VjY2Vzcy1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1jb2xvcik7LS1jbHItYnRuLXN1Y2Nlc3MtY2hlY2tlZC1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYnRuLXN1Y2Nlc3MtYmctY29sb3IpOy0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWJnLWNvbG9yOnZhcigtLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1j''@;'; put 'put ''bHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1zZWNvbmRhcnktaG92''@;'; put 'put ''ZXIpOy0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3VjY2Vzcy1ob3Zlcik7LS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYmctY29sb3Ip''@;'; put 'put ''Oy0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWNvbG9yKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1idG4t''@;'; put 'put ''c3VjY2Vzcy1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1idG4t''@;'; put 'put ''c3VjY2Vzcy1vdXRsaW5lLWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1jb2xvcik7LS1jbHItYnRuLWRhbmdl''@;'; put 'put ''ci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJ0bi1kYW5nZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLWJ0bi1kYW5nZXItYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWJnLWNvbG9yKTst''@;'; put 'put ''LWNsci1idG4tZGFuZ2VyLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLWhvdmVyKTstLWNsci1idG4tZGFuZ2VyLWhvdmVyLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWNvbG9yKTstLWNsci1idG4tZGFuZ2VyLWFjdGl2ZS1iZy1j''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWRhbmdlci1hY3RpdmUpOy0tY2xyLWJ0bi1kYW5nZXItYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYnRuLWRhbmdlci1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZC1idXR0b24pOy0tY2xyLWJ0bi1kYW5nZXItZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLWRhbmdlci1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1k''@;'; put 'put ''aXNhYmxlZCk7LS1jbHItYnRuLWRhbmdlci1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWJnLWNvbG9yKTstLWNsci1idG4tZGFuZ2VyLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItY29sb3IpOy0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1jb2xvcjp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWJnLWNvbG9yOnZhcigtLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7''@;'; put 'put ''LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLXNlY29uZGFyeS1ob3Zlcik7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRh''@;'; put 'put ''bmdlci1ob3Zlcik7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY29sb3Ip''@;'; put 'put ''Oy0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yKTstLWNs''@;'; put 'put ''ci1idG4tZGFuZ2VyLW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0''@;'; put 'put ''bi1kYW5nZXItb3V0bGluZS1jaGVja2VkLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi13YXJuaW5nLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmxhY2spOy0tY2xyLWJ0bi13YXJuaW5nLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1z''@;'; put 'put ''dGF0dXMtd2FybmluZyk7LS1jbHItYnRuLXdhcm5pbmctYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1iZy1jb2xvcik7LS1jbHItYnRuLXdhcm5pbmctaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLWhvdmVyKTstLWNs''@;'; put 'put ''ci1idG4td2FybmluZy1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctY29sb3IpOy0tY2xyLWJ0bi13YXJuaW5nLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXdhcm5pbmctYWN0aXZlKTstLWNsci1idG4td2FybmluZy1hY3RpdmUt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWNvbG9yKTstLWNsci1idG4td2FybmluZy1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZC1idXR0b24pOy0tY2xyLWJ0bi13YXJuaW5nLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1z''@;'; put 'put ''dGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi13YXJuaW5nLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1idG4td2FybmluZy1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1iZy1jb2xvcik7LS1jbHItYnRu''@;'; put 'put ''LXdhcm5pbmctY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctY29sb3IpOy0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLWRhcmspOy0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtYmctY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWJ0bi1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyayk7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWlu''@;'; put 'put ''dGVyYWN0aW9uLXdhcm5pbmctc2Vjb25kYXJ5LWhvdmVyKTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXdhcm5pbmctaG92ZXIpOy0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1idG4td2FybmluZy1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1jb2xvcik7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''dHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5n''@;'; put 'put ''LW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi1uZXV0cmFsLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYnRuLW5ldXRyYWwtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsKTstLWNsci1idG4tbmV1dHJhbC1ib3JkZXItY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWJnLWNvbG9yKTstLWNsci1idG4tbmV1dHJhbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW5ldXRyYWwtaG92ZXIpOy0tY2xyLWJ0bi1uZXV0cmFsLWhvdmVyLWNvbG9yOnZhcigtLWNsci1idG4tbmV1''@;'; put 'put ''dHJhbC1jb2xvcik7LS1jbHItYnRuLW5ldXRyYWwtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tbmV1dHJhbC1hY3RpdmUpOy0tY2xyLWJ0bi1uZXV0cmFsLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtY29sb3IpOy0tY2xyLWJ0''@;'; put 'put ''bi1uZXV0cmFsLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkLWJ1dHRvbik7LS1jbHItYnRuLW5ldXRyYWwtZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLW5ldXRyYWwtZGlzYWJsZWQt''@;'; put 'put ''Ym9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1uZXV0cmFsLWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWJnLWNvbG9yKTstLWNsci1idG4tbmV1dHJhbC1jaGVja2VkLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJh''@;'; put 'put ''bC1jb2xvcik7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwpOy0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTApOy0tY2xyLWJ0bi1uZXV0cmFsLW91dGxp''@;'; put 'put ''bmUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWNvbG9yKTstLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LW5ldXRyYWwtaG92ZXIpOy0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtaG92ZXIt''@;'; put 'put ''YmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1uZXV0cmFsLXNlY29uZGFyeS1ob3Zlcik7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsKTstLWNsci1idG4tbmV1dHJhbC1vdXRsaW5l''@;'; put 'put ''LWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1kaXNhYmxlZC1i''@;'; put 'put ''Zy1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1jaGVja2VkLWJn''@;'; put 'put ''LWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi1saW5rLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0''@;'; put 'put ''dXMtaW5mbyk7LS1jbHItYnRuLWxpbmstYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLWxpbmstY29sb3IpOy0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4t''@;'; put 'put ''bGluay1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1pbmZvLWhvdmVyKTstLWNsci1idG4tbGluay12aXNpdGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZCk7LS1jbHItYnRuLWxpbmstdmlzaXRlZC1ob3Zlci1jb2xv''@;'; put 'put ''cjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQtaG92ZXIpOy0tY2xyLWJ0bi1saW5rLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1idG4tbGluay1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9y''@;'; put 'put ''KTstLWNsci1idG4tbGluay1jaGVja2VkLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2xyLWJ0bi1saW5rLXByaW1hcnktY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvKTstLWNsci1idG4tbGluay1wcmltYXJ5LWJnLWNvbG9yOnZhcigtLWNsci1i''@;'; put 'put ''dG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXByaW1hcnktYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXByaW1hcnktaG92ZXItYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1j''@;'; put 'put ''b2xvcik7LS1jbHItYnRuLWxpbmstcHJpbWFyeS1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1pbmZvLWhvdmVyKTstLWNsci1idG4tbGluay1wcmltYXJ5LWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1jb2xvcik7LS1jbHItYnRuLWxpbmst''@;'; put 'put ''cHJpbWFyeS1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstcHJpbWFyeS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLWxpbmstcHJpbWFyeS1kaXNhYmxl''@;'; put 'put ''ZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1wcmltYXJ5LWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1wcmltYXJ5LWNoZWNrZWQtYmctY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstcHJpbWFyeS1jaGVja2VkLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWNvbG9yKTstLWNsci1idG4tbGluay1zdWNjZXNzLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3Vj''@;'; put 'put ''Y2Vzcyk7LS1jbHItYnRuLWxpbmstc3VjY2Vzcy1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1zdWNjZXNzLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1zdWNj''@;'; put 'put ''ZXNzLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3VjY2Vzcy1ob3Zlcik7LS1jbHItYnRuLWxpbmstc3VjY2Vzcy1hY3RpdmUtY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtY29sb3IpOy0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstc3VjY2Vzcy1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3Bh''@;'; put 'put ''cmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstc3VjY2Vzcy1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1jb2xvcik7LS1j''@;'; put 'put ''bHItYnRuLWxpbmstd2FybmluZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyayk7LS1jbHItYnRuLWxpbmstd2FybmluZy1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay13YXJuaW5nLWJvcmRlci1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay13YXJuaW5nLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXdhcm5pbmctaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5''@;'; put 'put ''cG9ncmFwaHktd2FybmluZy1ob3Zlcik7LS1jbHItYnRuLWxpbmstd2FybmluZy1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXdhcm5pbmctYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29s''@;'; put 'put ''b3IpOy0tY2xyLWJ0bi1saW5rLXdhcm5pbmctZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi1saW5rLXdhcm5pbmctZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRu''@;'; put 'put ''LWxpbmstd2FybmluZy1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstd2FybmluZy1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXdh''@;'; put 'put ''cm5pbmctY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1jb2xvcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyKTstLWNsci1idG4tbGluay1kYW5nZXItYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3Bh''@;'; put 'put ''cmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1kYW5nZXItaG92ZXItYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHIt''@;'; put 'put ''YnRuLWxpbmstZGFuZ2VyLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRhbmdlci1ob3Zlcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWNvbG9yKTstLWNsci1idG4tbGluay1kYW5nZXItYWN0aXZl''@;'; put 'put ''LWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLWRhbmdlci1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWRpc2FibGVkLWJnLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLWRhbmdlci1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10''@;'; put 'put ''cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRhbmdlci1jb2xvcik7LS1jbHItYnRuLWxpbmstbmV1dHJhbC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwpOy0tY2xyLWJ0bi1saW5r''@;'; put 'put ''LW5ldXRyYWwtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstbmV1dHJhbC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstbmV1dHJhbC1ob3Zlci1iZy1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1uZXV0cmFsLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LW5ldXRyYWwtaG92ZXIpOy0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4tbGlu''@;'; put 'put ''ay1uZXV0cmFsLWNvbG9yKTstLWNsci1idG4tbGluay1uZXV0cmFsLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1uZXV0cmFsLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVk''@;'; put 'put ''KTstLWNsci1idG4tbGluay1uZXV0cmFsLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xy''@;'; put 'put ''LWJ0bi1saW5rLW5ldXRyYWwtY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1uZXV0cmFsLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtY29sb3IpOy0tY2xyLWJ0bi1pbnZlcnNlLWNvbG9y''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2xyLWJ0bi1pbnZlcnNlLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTstLWNsci1idG4taW52ZXJzZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4t''@;'; put 'put ''aW52ZXJzZS1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWludmVyc2UtaG92ZXIpOy0tY2xyLWJ0bi1pbnZlcnNlLWhvdmVyLWNvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1jb2xvcik7LS1jbHItYnRuLWludmVyc2UtYWN0aXZlLWJnLWNvbG9y''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW52ZXJzZS1hY3RpdmUpOy0tY2xyLWJ0bi1pbnZlcnNlLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTstLWNsci1idG4taW52ZXJzZS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLWludmVyc2UtZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1pbnZlcnNlLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVk''@;'; put 'put ''KTstLWNsci1idG4taW52ZXJzZS1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1iZy1jb2xvcik7LS1jbHItYnRuLWludmVyc2UtY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtY29sb3IpfS5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAu''@;'; put 'put ''YnRue2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7YWxpZ24taXRlbXM6Y2VudGVyO3BsYWNlLWNvbnRlbnQ6Y2VudGVyOy13ZWJraXQtYXBwZWFyYW5jZTpub25lIWltcG9ydGFudDtib3JkZXI6dmFyKC0tY2xyLWJ0bi1i''@;'; put 'put ''b3JkZXItd2lkdGgpIHNvbGlkO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWJ0bi1ib3JkZXItcmFkaXVzKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xNCk7bWF4LXdpZHRoOmNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTt3aGl0ZS1zcGFjZTpub3dy''@;'; put 'put ''YXA7dGV4dC1vdmVyZmxvdzplbGxpcHNpcztvdmVyZmxvdzpoaWRkZW47dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNvbG9yKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LWZvbnQtc2l6ZS0yKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSk7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2hlaWdodDp2YXIoLS1jbHItYnRuLWFwcGVhcmFuY2UtZm9ybS1oZWlnaHQp''@;'; put 'put ''O3BhZGRpbmc6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNlLWZvcm0tcGFkZGluZyl9LmJ0bjpob3ZlciwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5i''@;'; put 'put ''dG4gY2RzLWljb24sLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNvbG9yKX0uYnRuOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlcntiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWhvdmVyLWNvbG9yKX0uYnRuOmhvdmVyIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuOmhvdmVy''@;'; put 'put ''IGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtaG92ZXItY29sb3IpfS5idG46YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtYWN0aXZlLWNvbG9yKX0uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG46YWN0''@;'; put 'put ''aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWFjdGl2ZS1jb2xvcil9LmJ0bi5kaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5kaXNhYmxlZC5idG4sLmJ0''@;'; put 'put ''bjpkaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQt''@;'; put 'put ''YmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmRpc2FibGVkLmJ0biBjZHMtaWNvbiwuYnRuLmRpc2FibGVkIGNsci1pY29u''@;'; put 'put ''LC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmRpc2FibGVkLmJ0biBjbHItaWNvbiwuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuOmRpc2FibGVkIGNsci1pY29uLC5hbGVydC1hcHAtbGV2''@;'; put 'put ''ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtY29sb3IpfS5idG4gLmNsci1sb2FkaW5nLWJ0bi1jb250ZW50LC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biAuY2xyLWxvYWRpbmctYnRuLWNv''@;'; put 'put ''bnRlbnR7ZGlzcGxheTpmbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2FsaWduLWl0ZW1zOmNlbnRlcn0uYnRuLWdyb3VwPi5idG4gY2xyLWljb24sLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb257dHJhbnNmb3JtOnRyYW5z''@;'; put 'put ''bGF0ZTNkKDAsY2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpKSwwKX1hLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuYnRuLC5idG4uYnRuLXNlY29uZGFyeSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25kYXJ5LmJ0biwuYnRuLXNlY29u''@;'; put 'put ''ZGFyeSAuYnRuLC5idG4tc2Vjb25kYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25kYXJ5IC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1ib3JkZXItY29sb3IpO2JhY2tncm91''@;'; put 'put ''bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY29sb3IpfWEuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gYS5idG4gY2RzLWljb24sYS5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bCAuYWxlcnQtaXRlbSBhLmJ0biBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnkgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXNlY29uZGFyeS5idG4gY2RzLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5IGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0''@;'; put 'put ''LWl0ZW0gLmJ0bi1zZWNvbmRhcnkuYnRuIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5IC5idG4gY2RzLWljb24sLmJ0bi1zZWNvbmRhcnkgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zZWNvbmRhcnkg''@;'; put 'put ''LmJ0biBjZHMtaWNvbiwuYnRuLXNlY29uZGFyeSAuYnRuIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25kYXJ5IC5idG4gY2xyLWljb257Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNvbG9yKX1hLmJ0bjpob3ZlciwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuYnRuOmhvdmVyLC5idG4uYnRuLXNlY29uZGFyeTpob3ZlciwuYnRuLXNlY29uZGFyeSAuYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1k''@;'; put 'put ''ZWZhdWx0LWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtaG92ZXItY29sb3IpfWEuYnRuOmhvdmVyIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gYS5idG46aG92ZXIgY2RzLWljb24sYS5idG46aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbCAuYWxlcnQtaXRlbSBhLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnk6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5OmhvdmVyIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5IC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1zZWNvbmRhcnkgLmJ0bjpo''@;'; put 'put ''b3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtaG92ZXItY29sb3IpfWEuYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuYnRuOmFjdGl2ZSwuYnRuLmJ0bi1zZWNvbmRhcnk6YWN0aXZlLC5idG4tc2Vjb25kYXJ5IC5idG46YWN0aXZle2Jh''@;'; put 'put ''Y2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWFjdGl2ZS1jb2xvcil9YS5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gYS5idG46YWN0aXZlIGNkcy1p''@;'; put 'put ''Y29uLGEuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnk6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLXNlY29uZGFyeTphY3RpdmUgY2xyLWljb24sLmJ0bi1zZWNvbmRhcnkgLmJ0''@;'; put 'put ''bjphY3RpdmUgY2RzLWljb24sLmJ0bi1zZWNvbmRhcnkgLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWFjdGl2ZS1jb2xvcil9YS5idG4uZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmRpc2FibGVkLmJ0bixhLmJ0bjpkaXNh''@;'; put 'put ''YmxlZCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuYnRuOmRpc2FibGVkLC5idG4uYnRuLXNlY29uZGFyeS5kaXNhYmxlZCwuYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQsLmJ0bi1zZWNvbmRhcnkgLmJ0bi5kaXNhYmxlZCwuYnRuLXNlY29uZGFyeSAuYnRuOmRpc2FibGVke2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWJv''@;'; put 'put ''cmRlci1jb2xvcil9YS5idG4uZGlzYWJsZWQgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmRpc2FibGVkLmJ0biBjZHMtaWNvbixhLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuZGlzYWJsZWQuYnRuIGNsci1pY29u''@;'; put 'put ''LGEuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gYS5idG46ZGlzYWJsZWQgY2RzLWljb24sYS5idG46ZGlzYWJsZWQgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1z''@;'; put 'put ''ZWNvbmRhcnkuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLXNlY29uZGFyeTpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1zZWNvbmRhcnkgLmJ0bi5kaXNhYmxl''@;'; put 'put ''ZCBjZHMtaWNvbiwuYnRuLXNlY29uZGFyeSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5IC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1zZWNvbmRhcnkgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtY29s''@;'; put 'put ''b3IpfS5idG4uYnRuLWluZm8sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8uYnRuLC5idG4taW5mbyAuYnRuLC5idG4taW5mbyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8gLmJ0biwu''@;'; put 'put ''YnRuLmJ0bi1wcmltYXJ5LC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1wcmltYXJ5LmJ0biwuYnRuLXByaW1hcnkgLmJ0biwuYnRuLXByaW1hcnkgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1wcmlt''@;'; put 'put ''YXJ5IC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktY29sb3IpfS5idG4uYnRuLWluZm8gY2RzLWljb24s''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8uYnRuIGNkcy1pY29uLC5idG4uYnRuLWluZm8gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8uYnRuIGNsci1pY29uLC5idG4taW5mbyAuYnRuIGNkcy1pY29uLC5idG4taW5mbyAuYWxl''@;'; put 'put ''cnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8gLmJ0biBjZHMtaWNvbiwuYnRuLWluZm8gLmJ0biBjbHItaWNvbiwuYnRuLWluZm8gLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1p''@;'; put 'put ''Y29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1pbmZvIC5idG4gY2xyLWljb24sLmJ0bi5idG4tcHJpbWFyeSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tcHJpbWFyeS5idG4gY2RzLWljb24sLmJ0bi5idG4tcHJpbWFyeSBjbHItaWNvbiwu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tcHJpbWFyeS5idG4gY2xyLWljb24sLmJ0bi1wcmltYXJ5IC5idG4gY2RzLWljb24sLmJ0bi1wcmltYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVt''@;'; put 'put ''IC5idG4tcHJpbWFyeSAuYnRuIGNkcy1pY29uLC5idG4tcHJpbWFyeSAuYnRuIGNsci1pY29uLC5idG4tcHJpbWFyeSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXByaW1hcnkgLmJ0biBjbHItaWNv''@;'; put 'put ''bntjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktY29sb3IpfS5idG4uYnRuLWluZm86aG92ZXIsLmJ0bi1pbmZvIC5idG46aG92ZXIsLmJ0bi5idG4tcHJpbWFyeTpob3ZlciwuYnRuLXByaW1hcnkgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1o''@;'; put 'put ''b3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1pbmZvOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLWluZm86aG92ZXIgY2xyLWljb24sLmJ0bi1pbmZvIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1pbmZvIC5idG46aG92ZXIg''@;'; put 'put ''Y2xyLWljb24sLmJ0bi5idG4tcHJpbWFyeTpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1wcmltYXJ5OmhvdmVyIGNsci1pY29uLC5idG4tcHJpbWFyeSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tcHJpbWFyeSAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFy''@;'; put 'put ''eS1ob3Zlci1jb2xvcil9LmJ0bi5idG4taW5mbzphY3RpdmUsLmJ0bi1pbmZvIC5idG46YWN0aXZlLC5idG4uYnRuLXByaW1hcnk6YWN0aXZlLC5idG4tcHJpbWFyeSAuYnRuOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1hY3RpdmUtYmctY29sb3IpO2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWluZm86YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLWluZm86YWN0aXZlIGNsci1pY29uLC5idG4taW5mbyAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWluZm8gLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0''@;'; put 'put ''bi5idG4tcHJpbWFyeTphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tcHJpbWFyeTphY3RpdmUgY2xyLWljb24sLmJ0bi1wcmltYXJ5IC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tcHJpbWFyeSAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktYWN0aXZl''@;'; put 'put ''LWNvbG9yKX0uYnRuLmJ0bi1pbmZvLmRpc2FibGVkLC5idG4uYnRuLWluZm86ZGlzYWJsZWQsLmJ0bi1pbmZvIC5idG4uZGlzYWJsZWQsLmJ0bi1pbmZvIC5idG46ZGlzYWJsZWQsLmJ0bi5idG4tcHJpbWFyeS5kaXNhYmxlZCwuYnRuLmJ0bi1wcmltYXJ5OmRpc2FibGVkLC5idG4tcHJpbWFy''@;'; put 'put ''eSAuYnRuLmRpc2FibGVkLC5idG4tcHJpbWFyeSAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWRpc2FibGVkLWJnLWNvbG9yKTti''@;'; put 'put ''b3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4taW5mby5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1pbmZvLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLWluZm86ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4taW5m''@;'; put 'put ''bzpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLWluZm8gLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWluZm8gLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLWluZm8gLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWluZm8gLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1wcmlt''@;'; put 'put ''YXJ5LmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLXByaW1hcnkuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tcHJpbWFyeTpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1wcmltYXJ5OmRpc2FibGVkIGNsci1pY29uLC5idG4tcHJpbWFyeSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5i''@;'; put 'put ''dG4tcHJpbWFyeSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tcHJpbWFyeSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tcHJpbWFyeSAuYnRuOmRpc2FibGVkIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tc3VjY2Vz''@;'; put 'put ''cywuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc3VjY2Vzcy5idG4sLmJ0bi1zdWNjZXNzIC5idG4sLmJ0bi1zdWNjZXNzIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc3VjY2VzcyAuYnRue2JvcmRl''@;'; put 'put ''ci1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzIGNkcy1pY29uLC5hbGVydC1hcHAt''@;'; put 'put ''bGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zdWNjZXNzLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1zdWNjZXNzIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zdWNjZXNzLmJ0biBjbHItaWNvbiwuYnRuLXN1Y2Nlc3MgLmJ0biBjZHMtaWNvbiwuYnRuLXN1Y2Nlc3Mg''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zdWNjZXNzIC5idG4gY2RzLWljb24sLmJ0bi1zdWNjZXNzIC5idG4gY2xyLWljb24sLmJ0bi1zdWNjZXNzIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0''@;'; put 'put ''ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc3VjY2VzcyAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1jb2xvcil9LmJ0bi5idG4tc3VjY2Vzczpob3ZlciwuYnRuLXN1Y2Nlc3MgLmJ0bjpob3ZlcntiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLXN1Y2Nlc3M6aG92ZXIgY2xyLWljb24sLmJ0bi1zdWNjZXNzIC5i''@;'; put 'put ''dG46aG92ZXIgY2RzLWljb24sLmJ0bi1zdWNjZXNzIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzOmFjdGl2ZSwuYnRuLXN1Y2Nlc3MgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYnRuLXN1Y2Nlc3MtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1zdWNjZXNzOmFjdGl2ZSBjbHItaWNvbiwuYnRuLXN1Y2Nlc3MgLmJ0bjphY3RpdmUg''@;'; put 'put ''Y2RzLWljb24sLmJ0bi1zdWNjZXNzIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1hY3RpdmUtY29sb3IpfS5idG4uYnRuLXN1Y2Nlc3MuZGlzYWJsZWQsLmJ0bi5idG4tc3VjY2VzczpkaXNhYmxlZCwuYnRuLXN1Y2Nlc3MgLmJ0bi5kaXNhYmxlZCwu''@;'; put 'put ''YnRuLXN1Y2Nlc3MgLmJ0bjpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1idG4tc3VjY2Vzcy1kaXNhYmxlZC1ib3JkZXItY29sb3IpfS5idG4uYnRuLXN1Y2Nlc3MuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tc3VjY2Vzcy5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1zdWNjZXNzOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLXN1Y2Nlc3M6ZGlz''@;'; put 'put ''YWJsZWQgY2xyLWljb24sLmJ0bi1zdWNjZXNzIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1zdWNjZXNzIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1zdWNjZXNzIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1zdWNjZXNzIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWRpc2FibGVkLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nLmJ0biwuYnRuLXdhcm5pbmcgLmJ0biwuYnRuLXdhcm5pbmcgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRu''@;'; put 'put ''LC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nIC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRu''@;'; put 'put ''LXdhcm5pbmctY29sb3IpfS5idG4uYnRuLXdhcm5pbmcgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXdhcm5pbmcuYnRuIGNkcy1pY29uLC5idG4uYnRuLXdhcm5pbmcgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXdhcm5pbmcu''@;'; put 'put ''YnRuIGNsci1pY29uLC5idG4td2FybmluZyAuYnRuIGNkcy1pY29uLC5idG4td2FybmluZyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXdhcm5pbmcgLmJ0biBjZHMtaWNvbiwuYnRuLXdhcm5pbmcg''@;'; put 'put ''LmJ0biBjbHItaWNvbiwuYnRuLXdhcm5pbmcgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nIC5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWNvbG9yKX0uYnRu''@;'; put 'put ''LmJ0bi13YXJuaW5nOmhvdmVyLC5idG4td2FybmluZyAuYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctaG92ZXItY29sb3IpfS5idG4uYnRuLXdhcm5pbmc6aG92ZXIgY2Rz''@;'; put 'put ''LWljb24sLmJ0bi5idG4td2FybmluZzpob3ZlciBjbHItaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bjpob3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctaG92ZXItY29sb3IpfS5idG4uYnRuLXdhcm5pbmc6YWN0''@;'; put 'put ''aXZlLC5idG4td2FybmluZyAuYnRuOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1hY3RpdmUtY29sb3IpfS5idG4uYnRuLXdhcm5pbmc6YWN0aXZlIGNkcy1pY29uLC5idG4u''@;'; put 'put ''YnRuLXdhcm5pbmc6YWN0aXZlIGNsci1pY29uLC5idG4td2FybmluZyAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4td2FybmluZy5kaXNhYmxlZCwu''@;'; put 'put ''YnRuLmJ0bi13YXJuaW5nOmRpc2FibGVkLC5idG4td2FybmluZyAuYnRuLmRpc2FibGVkLC5idG4td2FybmluZyAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi13YXJuaW5nLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4td2FybmluZy5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi13YXJuaW5nLmRpc2FibGVkIGNsci1pY29uLC5i''@;'; put 'put ''dG4uYnRuLXdhcm5pbmc6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4td2FybmluZzpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bjpkaXNhYmxl''@;'; put 'put ''ZCBjZHMtaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLWRhbmdlciwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tZGFuZ2VyLmJ0biwuYnRuLWRhbmdlciAu''@;'; put 'put ''YnRuLC5idG4tZGFuZ2VyIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tZGFuZ2VyIC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLWRhbmdlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItY29sb3IpfS5idG4uYnRuLWRhbmdlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tZGFuZ2VyLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1kYW5nZXIgY2xyLWljb24s''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWRhbmdlci5idG4gY2xyLWljb24sLmJ0bi1kYW5nZXIgLmJ0biBjZHMtaWNvbiwuYnRuLWRhbmdlciAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAu''@;'; put 'put ''YnRuLWRhbmdlciAuYnRuIGNkcy1pY29uLC5idG4tZGFuZ2VyIC5idG4gY2xyLWljb24sLmJ0bi1kYW5nZXIgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1kYW5nZXIgLmJ0biBjbHItaWNvbntjb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYnRuLWRhbmdlci1jb2xvcil9LmJ0bi5idG4tZGFuZ2VyOmhvdmVyLC5idG4tZGFuZ2VyIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItaG92ZXItY29s''@;'; put 'put ''b3IpfS5idG4uYnRuLWRhbmdlcjpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1kYW5nZXI6aG92ZXIgY2xyLWljb24sLmJ0bi1kYW5nZXIgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLWRhbmdlciAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWhvdmVyLWNv''@;'; put 'put ''bG9yKX0uYnRuLmJ0bi1kYW5nZXI6YWN0aXZlLC5idG4tZGFuZ2VyIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWRhbmdlcjph''@;'; put 'put ''Y3RpdmUgY2RzLWljb24sLmJ0bi5idG4tZGFuZ2VyOmFjdGl2ZSBjbHItaWNvbiwuYnRuLWRhbmdlciAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWRhbmdlciAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWRh''@;'; put 'put ''bmdlci5kaXNhYmxlZCwuYnRuLmJ0bi1kYW5nZXI6ZGlzYWJsZWQsLmJ0bi1kYW5nZXIgLmJ0bi5kaXNhYmxlZCwuYnRuLWRhbmdlciAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tZGFuZ2VyLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWRhbmdlci5kaXNhYmxlZCBjbHIt''@;'; put 'put ''aWNvbiwuYnRuLmJ0bi1kYW5nZXI6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tZGFuZ2VyOmRpc2FibGVkIGNsci1pY29uLC5idG4tZGFuZ2VyIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1kYW5nZXIgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLWRhbmdlciAuYnRuOmRpc2Fi''@;'; put 'put ''bGVkIGNkcy1pY29uLC5idG4tZGFuZ2VyIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLW5ldXRyYWwsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRyYWwuYnRuLC5idG4tbmV1dHJh''@;'; put 'put ''bCAuYnRuLC5idG4tbmV1dHJhbCAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRyYWwgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbmV1dHJhbC5idG4gY2RzLWljb24sLmJ0bi5idG4tbmV1dHJh''@;'; put 'put ''bCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbmV1dHJhbC5idG4gY2xyLWljb24sLmJ0bi1uZXV0cmFsIC5idG4gY2RzLWljb24sLmJ0bi1uZXV0cmFsIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''IC5hbGVydC1pdGVtIC5idG4tbmV1dHJhbCAuYnRuIGNkcy1pY29uLC5idG4tbmV1dHJhbCAuYnRuIGNsci1pY29uLC5idG4tbmV1dHJhbCAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRyYWwg''@;'; put 'put ''LmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtY29sb3IpfS5idG4uYnRuLW5ldXRyYWw6aG92ZXIsLmJ0bi1uZXV0cmFsIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1idG4tbmV1dHJhbC1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbDpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1uZXV0cmFsOmhvdmVyIGNsci1pY29uLC5idG4tbmV1dHJhbCAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tbmV1dHJhbCAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4tbmV1dHJhbC1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbDphY3RpdmUsLmJ0bi1uZXV0cmFsIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFs''@;'; put 'put ''LWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbDphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tbmV1dHJhbDphY3RpdmUgY2xyLWljb24sLmJ0bi1uZXV0cmFsIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tbmV1dHJhbCAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YnRuLW5ldXRyYWwtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1uZXV0cmFsLmRpc2FibGVkLC5idG4uYnRuLW5ldXRyYWw6ZGlzYWJsZWQsLmJ0bi1uZXV0cmFsIC5idG4uZGlzYWJsZWQsLmJ0bi1uZXV0cmFsIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWRpc2Fi''@;'; put 'put ''bGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtZGlzYWJsZWQtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1uZXV0cmFsLmRp''@;'; put 'put ''c2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW5ldXRyYWwuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tbmV1dHJhbDpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1uZXV0cmFsOmRpc2FibGVkIGNsci1pY29uLC5idG4tbmV1dHJhbCAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tbmV1''@;'; put 'put ''dHJhbCAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tbmV1dHJhbCAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tbmV1dHJhbCAuYnRuOmRpc2FibGVkIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tb3V0bGluZSwuYWxl''@;'; put 'put ''cnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS5idG4sLmJ0bi5idG4tb3V0bGluZSAuYnRuLC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5idG4sLmJ0bi5idG4tb3V0bGluZS1z''@;'; put 'put ''ZWNvbmRhcnksLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmJ0biwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG4sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bCAuYWxlcnQtaXRlbSAuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG4sLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRs''@;'; put 'put ''aW5lLXNlY29uZGFyeSAuYnRuLC5idG4tb3V0bGluZSAuYnRuLC5idG4tb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0''@;'; put 'put ''LW91dGxpbmUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1jb2xvcil9LmJ0bi5idG4tb3V0bGluZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''IC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS5idG4gY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS5idG4gY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4uYnRuLW91dGxp''@;'; put 'put ''bmUgLmJ0biBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25kYXJ5LW91dGxpbmUuYnRuIGNkcy1pY29uLC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGNsci1pY29uLC5hbGVydC1hcHAt''@;'; put 'put ''bGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5idG4gY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1v''@;'; put 'put ''dXRsaW5lLXNlY29uZGFyeSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1zZWNvbmRhcnkuYnRuIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5hbGVydC1hcHAtbGV2''@;'; put 'put ''ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYWxlcnQtYXBw''@;'; put 'put ''LWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmFsZXJ0''@;'; put 'put ''LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5h''@;'; put 'put ''bGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAu''@;'; put 'put ''YWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZSAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWNvbG9yKX0uYnRuLmJ0bi1vdXRsaW5lOmhvdmVyLC5idG4uYnRuLW91dGxpbmUgLmJ0bjpob3ZlciwuYnRuLmJ0bi1zZWNvbmRh''@;'; put 'put ''cnktb3V0bGluZTpob3ZlciwuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpob3ZlciwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG46aG92ZXIsLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuOmhvdmVyLC5idG4tb3V0bGluZSAuYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1vdXRsaW5lOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmU6aG92ZXIgY2xyLWljb24sLmJ0bi5idG4tb3V0''@;'; put 'put ''bGluZSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUgLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXNl''@;'; put 'put ''Y29uZGFyeTpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpob3ZlciBjbHItaWNvbiwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuOmhvdmVyIGNsci1pY29uLC5idG4tb3V0bGluZS1z''@;'; put 'put ''ZWNvbmRhcnkgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi1vdXRsaW5lIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1vdXRsaW5lIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0''@;'; put 'put ''LW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLW91dGxpbmU6YWN0aXZlLC5idG4uYnRuLW91dGxpbmUgLmJ0bjphY3RpdmUsLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6YWN0aXZlLC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmFjdGl2ZSwuYnRuLXNlY29uZGFyeS1vdXRsaW5l''@;'; put 'put ''IC5idG46YWN0aXZlLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bjphY3RpdmUsLmJ0bi1vdXRsaW5lIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQt''@;'; put 'put ''b3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLW91dGxpbmU6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmU6YWN0aXZlIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwu''@;'; put 'put ''YnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6YWN0aXZlIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTphY3RpdmUgY2xy''@;'; put 'put ''LWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG46YWN0aXZlIGNsci1pY29uLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRu''@;'; put 'put ''OmFjdGl2ZSBjbHItaWNvbiwuYnRuLW91dGxpbmUgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1vdXRsaW5lIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tb3V0bGluZS5kaXNhYmxlZCwuYnRu''@;'; put 'put ''LmJ0bi1vdXRsaW5lOmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lIC5idG46ZGlzYWJsZWQsLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUuZGlzYWJsZWQsLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6ZGlzYWJsZWQsLmJ0bi5idG4t''@;'; put 'put ''b3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQsLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuLmRpc2FibGVkLC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0bjpkaXNhYmxlZCwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG4u''@;'; put 'put ''ZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuOmRpc2FibGVkLC5idG4tb3V0bGluZSAuYnRuLmRpc2FibGVkLC5idG4tb3V0bGluZSAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFs''@;'; put 'put ''bG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tb3V0bGluZS5kaXNhYmxlZCBj''@;'; put 'put ''ZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmU6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0''@;'; put 'put ''bGluZSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tc2Vj''@;'; put 'put ''b25kYXJ5LW91dGxpbmUuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgY2RzLWlj''@;'; put 'put ''b24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRu''@;'; put 'put ''LmRpc2FibGVkIGNkcy1pY29uLC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0''@;'; put 'put ''bGluZS1zZWNvbmRhcnkgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bjpkaXNhYmxl''@;'; put 'put ''ZCBjbHItaWNvbiwuYnRuLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1wcmltYXJ5LW91dGxpbmUuYnRuLC5idG4tb3V0bGluZS1pbmZvIC5idG4sLmJ0bi1vdXRsaW5lLWluZm8gLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWluZm8gLmJ0biwuYnRuLWluZm8tb3V0bGluZSAuYnRuLC5idG4taW5mby1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQt''@;'; put 'put ''YXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW5mby1vdXRsaW5lIC5idG4sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0biwuYnRuLXByaW1hcnktb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXByaW1h''@;'; put 'put ''cnktb3V0bGluZSAuYnRuLC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG4sLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0biwuYnRuLmJ0bi1vdXRs''@;'; put 'put ''aW5lLXByaW1hcnksLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtcHJpbWFyeS5idG4sLmJ0bi5idG4tb3V0bGluZS1pbmZvLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWluZm8uYnRuLC5idG4uYnRuLWluZm8tb3V0bGluZSwuYWxl''@;'; put 'put ''cnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW5mby1vdXRsaW5lLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1jb2xvcil9LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1wcmltYXJ5LW91dGxp''@;'; put 'put ''bmUuYnRuIGNkcy1pY29uLC5idG4uYnRuLXByaW1hcnktb3V0bGluZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tcHJpbWFyeS1vdXRsaW5lLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1pbmZvIC5h''@;'; put 'put ''bGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1pbmZvIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLWluZm8gLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYWxlcnQtYXBwLWxl''@;'; put 'put ''dmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtaW5mbyAuYnRuIGNsci1pY29uLC5idG4taW5mby1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi1pbmZvLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQt''@;'; put 'put ''aXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1pbmZvLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuIGNsci1pY29uLC5idG4taW5mby1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBj''@;'; put 'put ''bHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW5mby1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLXByaW1hcnktb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWlj''@;'; put 'put ''b24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29u''@;'; put 'put ''LC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1wcmltYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1wcmltYXJ5LmJ0biBjZHMtaWNvbiwuYnRuLmJ0''@;'; put 'put ''bi1vdXRsaW5lLXByaW1hcnkgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtcHJpbWFyeS5idG4gY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1pbmZvIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWlu''@;'; put 'put ''Zm8uYnRuIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtaW5mbyBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1pbmZvLmJ0biBjbHItaWNvbiwuYnRuLmJ0bi1pbmZvLW91dGxpbmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRl''@;'; put 'put ''bSAuYnRuLWluZm8tb3V0bGluZS5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmJ0bi5idG4taW5mby1vdXRsaW5lIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1pbmZvLW91dGxpbmUu''@;'; put 'put ''YnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWNvbG9yKX0uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6aG92ZXIsLmJ0bi1vdXRsaW5lLWluZm8gLmJ0bjpo''@;'; put 'put ''b3ZlciwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmhvdmVyLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG46aG92ZXIsLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0bjpob3ZlciwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6aG92ZXIsLmJ0bi5idG4tb3V0bGluZS1pbmZvOmhvdmVyLC5idG4uYnRu''@;'; put 'put ''LWluZm8tb3V0bGluZTpob3ZlciwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0''@;'; put 'put ''bGluZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLXByaW1hcnktb3V0bGluZTpob3ZlciBjbHItaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tb3V0bGluZS1pbmZvIC5idG46aG92ZXIg''@;'; put 'put ''Y2xyLWljb24sLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmhvdmVyIGNsci1pY29uLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0bjpob3ZlciBjbHItaWNv''@;'; put 'put ''biwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTpob3ZlciBjbHItaWNvbiwu''@;'; put 'put ''YnRuLmJ0bi1vdXRsaW5lLWluZm86aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1pbmZvOmhvdmVyIGNsci1pY29uLC5idG4uYnRuLWluZm8tb3V0bGluZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjZHMt''@;'; put 'put ''aWNvbiwuYnRuLmJ0bi1pbmZvLW91dGxpbmU6aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLXByaW1h''@;'; put 'put ''cnktb3V0bGluZTphY3RpdmUsLmJ0bi1vdXRsaW5lLWluZm8gLmJ0bjphY3RpdmUsLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bjphY3RpdmUsLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0bjphY3RpdmUsLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0bjphY3RpdmUsLmJ0bi5idG4tb3V0bGluZS1wcmlt''@;'; put 'put ''YXJ5OmFjdGl2ZSwuYnRuLmJ0bi1vdXRsaW5lLWluZm86YWN0aXZlLC5idG4uYnRuLWluZm8tb3V0bGluZTphY3RpdmUsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxp''@;'; put 'put ''bmUtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLXByaW1hcnktb3V0bGluZTphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lOmFjdGl2ZSBjbHItaWNvbiwuYnRuLW91dGxpbmUt''@;'; put 'put ''aW5mbyAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLXByaW1hcnktb3V0bGluZSAu''@;'; put 'put ''YnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXBy''@;'; put 'put ''aW1hcnk6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTphY3RpdmUgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1pbmZvOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWluZm86YWN0aXZlIGNsci1pY29uLC5idG4uYnRuLWluZm8tb3V0bGluZTphY3Rp''@;'; put 'put ''dmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLWluZm8tb3V0bGluZTphY3RpdmUgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNs''@;'; put 'put ''ci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lLmRpc2FibGVkLC5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCwuYnRuLW91dGxpbmUtaW5mbyAuYnRuLmRpc2FibGVkLC5idG4tb3V0''@;'; put 'put ''bGluZS1pbmZvIC5idG46ZGlzYWJsZWQsLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmRpc2FibGVkLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG4uZGlzYWJsZWQsLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0bjpkaXNhYmxlZCwuYnRuLW91''@;'; put 'put ''dGxpbmUtcHJpbWFyeSAuYnRuLmRpc2FibGVkLC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG46ZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTpkaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lLWluZm8uZGlzYWJsZWQsLmJ0''@;'; put 'put ''bi5idG4tb3V0bGluZS1pbmZvOmRpc2FibGVkLC5idG4uYnRuLWluZm8tb3V0bGluZS5kaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxlZCwuYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZlbC5hbGVy''@;'; put 'put ''dC1pbmZvIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWRpc2FibGVkLWJnLWNv''@;'; put 'put ''bG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRu''@;'; put 'put ''LXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1vdXRsaW5lLWluZm8gLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4t''@;'; put 'put ''b3V0bGluZS1pbmZvIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLWluZm8gLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4taW5mby1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1p''@;'; put 'put ''bmZvLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwu''@;'; put 'put ''YnRuLXByaW1hcnktb3V0bGluZSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuLmRpc2FibGVk''@;'; put 'put ''IGNsci1pY29uLC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5''@;'; put 'put ''LmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1pbmZvLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtaW5m''@;'; put 'put ''by5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWluZm86ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1pbmZvOmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLWluZm8tb3V0bGluZS5kaXNhYmxlZCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWlu''@;'; put 'put ''Zm8gLmFsZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1pbmZvLW91dGxpbmUuZGlzYWJsZWQgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4taW5mby1vdXRsaW5lOmRp''@;'; put 'put ''c2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWluZm8tb3V0bGluZTpkaXNhYmxlZCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmJ0bjpk''@;'; put 'put ''aXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zdWNjZXNzLW91dGxpbmUuYnRuLC5hbGVydC1hcHAtbGV2ZWwu''@;'; put 'put ''YWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAuYnRuLC5idG4uYnRuLW91dGxpbmUtc3VjY2VzcywuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1zdWNjZXNzLmJ0biwuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYnRuLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5hbGVydC1h''@;'; put 'put ''cHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG4sLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0biwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYmctY29sb3Ip''@;'; put 'put ''O2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXN1Y2Nlc3Mtb3V0bGluZS5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1z''@;'; put 'put ''dWNjZXNzIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zdWNjZXNzLW91dGxpbmUuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxl''@;'; put 'put ''cnQtaXRlbSAuYnRuIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtc3VjY2VzcyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1zdWNjZXNzLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgY2xyLWljb24sLmFsZXJ0LWFwcC1s''@;'; put 'put ''ZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5idG4gY2xyLWljb24sLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bCAuYWxlcnQtaXRlbSAuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwg''@;'; put 'put ''LmFsZXJ0LWl0ZW0gLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1zdWNjZXNzIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5h''@;'; put 'put ''bGVydC1pdGVtIC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxl''@;'; put 'put ''cnQtaXRlbSAuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmU6aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5idG46''@;'; put 'put ''aG92ZXIsLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOmhvdmVyLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46aG92ZXIsLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yKTtj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lOmhvdmVyIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLXN1Y2Nl''@;'; put 'put ''c3Mtb3V0bGluZTpob3ZlciBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOmhvdmVyIGNsci1p''@;'; put 'put ''Y29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46aG92ZXIgY2xyLWlj''@;'; put 'put ''b257Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZTphY3RpdmUsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5idG46YWN0aXZlLC5idG4uYnRuLW91dGxpbmUtc3VjY2Vzczph''@;'; put 'put ''Y3RpdmUsLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0bjphY3RpdmUsLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1v''@;'; put 'put ''dXRsaW5lLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lOmFjdGl2ZSBjbHItaWNv''@;'; put 'put ''biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6YWN0aXZlIGNsci1pY29uLC5idG4tc3VjY2Vzcy1vdXRs''@;'; put 'put ''aW5lIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46YWN0aXZlIGNsci1pY29uLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1idG4tc3VjY2Vzcy1vdXRsaW5lLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lLmRpc2FibGVkLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkLC5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZTpkaXNhYmxlZCwuYWxl''@;'; put 'put ''cnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOmRpc2FibGVkLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG4uZGlzYWJsZWQsLmJ0bi1zdWNj''@;'; put 'put ''ZXNzLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuLmRpc2FibGVkLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dl''@;'; put 'put ''ZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmUuZGlzYWJs''@;'; put 'put ''ZWQgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lLmRpc2FibGVkIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAu''@;'; put 'put ''YnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZTpkaXNhYmxlZCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmU6ZGlzYWJsZWQg''@;'; put 'put ''Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtc3VjY2Vzcy5kaXNhYmxlZCBjbHItaWNvbiwuYnRu''@;'; put 'put ''LmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOmRpc2FibGVkIGNsci1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjbHIt''@;'; put 'put ''aWNvbiwuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuLmRp''@;'; put 'put ''c2FibGVkIGNsci1pY29uLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4t''@;'; put 'put ''d2FybmluZy1vdXRsaW5lLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nLW91dGxpbmUuYnRuLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAuYnRuLC5idG4uYnRuLW91dGxpbmUtd2FybmluZywuYWxlcnQtYXBwLWxldmVsIC5hbGVy''@;'; put 'put ''dC1pdGVtIC5idG4tb3V0bGluZS13YXJuaW5nLmJ0biwuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuLC5idG4td2FybmluZy1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4td2FybmluZy1vdXRsaW5lIC5i''@;'; put 'put ''dG4sLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0biwuYnRuLW91dGxpbmUtd2FybmluZyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtd2FybmluZyAuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRu''@;'; put 'put ''LXdhcm5pbmctb3V0bGluZS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nLW91dGxpbmUgY2RzLWljb24s''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXdhcm5pbmctb3V0bGluZS5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmJ0bi5idG4td2FybmluZy1vdXRsaW5lIGNsci1pY29uLC5hbGVydC1hcHAt''@;'; put 'put ''bGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nLW91dGxpbmUuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtd2FybmluZyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVy''@;'; put 'put ''dC1pdGVtIC5idG4tb3V0bGluZS13YXJuaW5nLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmcgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtd2FybmluZy5idG4gY2xyLWljb24sLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0biBj''@;'; put 'put ''ZHMtaWNvbiwuYnRuLXdhcm5pbmctb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG4gY2xy''@;'; put 'put ''LWljb24sLmJ0bi13YXJuaW5nLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuIGNkcy1p''@;'; put 'put ''Y29uLC5idG4tb3V0bGluZS13YXJuaW5nIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS13YXJuaW5nIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0biBjbHItaWNv''@;'; put 'put ''biwuYnRuLW91dGxpbmUtd2FybmluZyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5l''@;'; put 'put ''LWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nLW91dGxpbmU6aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG46aG92ZXIsLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nOmhvdmVyLC5idG4td2FybmluZy1vdXRsaW5lIC5idG46aG92ZXIsLmJ0bi1vdXRs''@;'; put 'put ''aW5lLXdhcm5pbmcgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4td2FybmluZy1vdXRsaW5lOmhvdmVy''@;'; put 'put ''IGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLXdhcm5pbmctb3V0bGluZTpob3ZlciBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0bjpob3Zl''@;'; put 'put ''ciBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmc6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nOmhvdmVyIGNsci1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0bjpob3ZlciBj''@;'; put 'put ''bHItaWNvbiwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLXdhcm5pbmctb3V0bGluZTph''@;'; put 'put ''Y3RpdmUsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG46YWN0aXZlLC5idG4uYnRuLW91dGxpbmUtd2FybmluZzphY3RpdmUsLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0bjphY3RpdmUsLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0bjphY3RpdmV7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4td2FybmluZy1vdXRsaW5lOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4td2FybmluZy1vdXRsaW5lOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi5idG4tb3V0''@;'; put 'put ''bGluZS13YXJuaW5nOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmc6YWN0aXZlIGNsci1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG46YWN0aXZlIGNsci1pY29uLC5idG4tb3V0bGlu''@;'; put 'put ''ZS13YXJuaW5nIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4td2FybmluZy1vdXRsaW5lLmRpc2FibGVkLC5hbGVydC1h''@;'; put 'put ''cHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkLC5idG4uYnRuLXdhcm5pbmctb3V0bGluZTpkaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmcu''@;'; put 'put ''ZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nOmRpc2FibGVkLC5idG4td2FybmluZy1vdXRsaW5lIC5idG4uZGlzYWJsZWQsLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuLmRpc2FibGVkLC5idG4tb3V0bGluZS13YXJu''@;'; put 'put ''aW5nIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nLW91dGxpbmUuZGlzYWJsZWQgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG4uZGlzYWJsZWQgY2RzLWljb24s''@;'; put 'put ''LmJ0bi5idG4td2FybmluZy1vdXRsaW5lLmRpc2FibGVkIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLXdhcm5pbmctb3V0bGluZTpkaXNhYmxlZCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxl''@;'; put 'put ''dmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi13YXJuaW5nLW91dGxpbmU6ZGlzYWJsZWQgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0''@;'; put 'put ''bi5idG4tb3V0bGluZS13YXJuaW5nLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtd2FybmluZy5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmc6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nOmRpc2FibGVkIGNsci1p''@;'; put 'put ''Y29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG46ZGlz''@;'; put 'put ''YWJsZWQgY2xyLWljb24sLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLXdhcm5p''@;'; put 'put ''bmcgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tZGFuZ2VyLW91dGxpbmUsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWRhbmdlci1vdXRsaW5lLmJ0biwuYWxlcnQtYXBw''@;'; put 'put ''LWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuLC5idG4uYnRuLW91dGxpbmUtZGFuZ2VyLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWRhbmdlci5idG4sLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuLC5idG4tZGFuZ2VyLW91dGxpbmUgLmFsZXJ0''@;'; put 'put ''LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0biwuYnRuLW91dGxpbmUtZGFuZ2VyIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxl''@;'; put 'put ''cnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1iZy1jb2xvcik7Y29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1jb2xvcil9LmJ0bi5idG4tZGFuZ2VyLW91dGxpbmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWRhbmdlci1vdXRsaW5lLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAu''@;'; put 'put ''YWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5idG4uYnRuLWRhbmdlci1vdXRsaW5lIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1kYW5nZXItb3V0bGluZS5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0''@;'; put 'put ''biBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1kYW5nZXIuYnRuIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtZGFuZ2VyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0''@;'; put 'put ''ZW0gLmJ0bi1vdXRsaW5lLWRhbmdlci5idG4gY2xyLWljb24sLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4tZGFuZ2VyLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0''@;'; put 'put ''bi1kYW5nZXItb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLWRhbmdlci1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tZGFu''@;'; put 'put ''Z2VyLW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUt''@;'; put 'put ''ZGFuZ2VyIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuIGNsci1pY29uLC5idG4tb3V0bGluZS1kYW5nZXIgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWRhbmdl''@;'; put 'put ''ciAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY29sb3IpfS5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG46aG92ZXIsLmJ0bi5idG4tb3V0bGluZS1kYW5nZXI6''@;'; put 'put ''aG92ZXIsLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuOmhvdmVyLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUt''@;'; put 'put ''aG92ZXItY29sb3IpfS5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmhvdmVyIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tZGFuZ2VyLW91dGxpbmU6aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1s''@;'; put 'put ''ZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlcjpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlcjpob3ZlciBjbHItaWNvbiwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG46aG92ZXIgY2RzLWlj''@;'; put 'put ''b24sLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuOmhvdmVyIGNsci1pY29uLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1ob3Zlci1j''@;'; put 'put ''b2xvcil9LmJ0bi5idG4tZGFuZ2VyLW91dGxpbmU6YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG46YWN0aXZlLC5idG4uYnRuLW91dGxpbmUtZGFuZ2VyOmFjdGl2ZSwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG46YWN0aXZlLC5idG4tb3V0bGlu''@;'; put 'put ''ZS1kYW5nZXIgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmFjdGl2ZSBj''@;'; put 'put ''ZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1kYW5nZXItb3V0bGluZTphY3RpdmUgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUg''@;'; put 'put ''Y2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1kYW5nZXI6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtZGFuZ2VyOmFjdGl2ZSBjbHItaWNvbiwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0bjphY3RpdmUgY2xy''@;'; put 'put ''LWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1kYW5nZXItb3V0bGluZS5kaXNh''@;'; put 'put ''YmxlZCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkLC5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmRpc2FibGVkLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGlu''@;'; put 'put ''ZS1kYW5nZXIuZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1kYW5nZXI6ZGlzYWJsZWQsLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuLmRpc2FibGVkLC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG4uZGlzYWJsZWQsLmJ0bi1vdXRsaW5l''@;'; put 'put ''LWRhbmdlciAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtZGlzYWJsZWQtYmctY29sb3IpO2JvcmRlci1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tZGFuZ2VyLW91dGxpbmUuZGlzYWJsZWQgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwu''@;'; put 'put ''YnRuLmJ0bi1kYW5nZXItb3V0bGluZS5kaXNhYmxlZCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwu''@;'; put 'put ''YWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tZGFuZ2VyLW91dGxpbmU6ZGlzYWJsZWQgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1v''@;'; put 'put ''dXRsaW5lLWRhbmdlci5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlci5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlcjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlcjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLWRh''@;'; put 'put ''bmdlci1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2xyLWljb24s''@;'; put 'put ''LmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuOmRpc2FibGVkIGNs''@;'; put 'put ''ci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLW5ldXRyYWwtb3V0bGluZSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbmV1dHJhbC1vdXRsaW5lLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRy''@;'; put 'put ''YWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYnRuLmJ0bi1vdXRsaW5lLW5ldXRyYWwsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtbmV1dHJhbC5idG4sLmJ0bi1uZXV0cmFsLW91dGxpbmUgLmJ0biwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5h''@;'; put 'put ''bGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG4sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2''@;'; put 'put ''ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWJnLWNvbG9yKTtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbC1vdXRsaW5lIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1uZXV0cmFsLW91dGxpbmUuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxl''@;'; put 'put ''cnQtaXRlbSAuYnRuIGNkcy1pY29uLC5idG4uYnRuLW5ldXRyYWwtb3V0bGluZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbmV1dHJhbC1vdXRsaW5lLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW0gLmJ0''@;'; put 'put ''biBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLW5ldXRyYWwgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtbmV1dHJhbC5idG4gY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1uZXV0cmFsIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0''@;'; put 'put ''LWl0ZW0gLmJ0bi1vdXRsaW5lLW5ldXRyYWwuYnRuIGNsci1pY29uLC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi1uZXV0cmFsLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0''@;'; put 'put ''ZW0gLmJ0bi1uZXV0cmFsLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuIGNsci1pY29uLC5idG4tbmV1dHJhbC1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVt''@;'; put 'put ''IC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0biBjZHMtaWNvbiwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAu''@;'; put 'put ''YnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0''@;'; put 'put ''bi1vdXRsaW5lLW5ldXRyYWwgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbC1vdXRsaW5lOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbSAuYnRuOmhvdmVyLC5idG4u''@;'; put 'put ''YnRuLW91dGxpbmUtbmV1dHJhbDpob3ZlciwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuOmhvdmVyLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLW5ldXRyYWwtb3V0bGluZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmU6''@;'; put 'put ''aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtIC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1uZXV0cmFsOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbDpob3ZlciBjbHItaWNvbiwuYnRuLW5l''@;'; put 'put ''dXRyYWwtb3V0bGluZSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmU6YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbSAuYnRuOmFjdGl2ZSwuYnRuLmJ0bi1vdXRsaW5lLW5ldXRyYWw6YWN0aXZlLC5idG4t''@;'; put 'put ''bmV1dHJhbC1vdXRsaW5lIC5idG46YWN0aXZlLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1hY3Rp''@;'; put 'put ''dmUtY29sb3IpfS5idG4uYnRuLW5ldXRyYWwtb3V0bGluZTphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLW5ldXRyYWwtb3V0bGluZTphY3RpdmUgY2xyLWljb24sLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbDphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1uZXV0cmFsOmFjdGl2ZSBjbHItaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuOmFj''@;'; put 'put ''dGl2ZSBjZHMtaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRy''@;'; put 'put ''YWwtb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLW5ldXRyYWwtb3V0bGluZS5kaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxlZCwuYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmU6ZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1uZXV0cmFsLmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbDpkaXNhYmxlZCwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuLmRpc2FibGVkLC5idG4tbmV1dHJhbC1vdXRsaW5l''@;'; put 'put ''IC5idG46ZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0bi5kaXNhYmxlZCwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbC1vdXRsaW5lLmRpc2FibGVkIGNkcy1pY29u''@;'; put 'put ''LC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW5ldXRyYWwtb3V0bGluZS5kaXNhYmxlZCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxl''@;'; put 'put ''ZCBjbHItaWNvbiwuYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmU6ZGlzYWJsZWQgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbmV1dHJhbC1vdXRsaW5lOmRpc2FibGVkIGNsci1pY29uLC5h''@;'; put 'put ''bGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbC5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLW5ldXRyYWwuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGlu''@;'; put 'put ''ZS1uZXV0cmFsOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbDpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1u''@;'; put 'put ''ZXV0cmFsLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0bi5kaXNhYmxlZCBjbHIt''@;'; put 'put ''aWNvbiwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLWxpbmssLmFsZXJ0''@;'; put 'put ''LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmsuYnRuLC5idG4tbGluayAuYnRuLC5idG4tbGluayAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmsgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0''@;'; put 'put ''bi1saW5rLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1jb2xvcil9LmJ0bi5idG4tbGluayBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay5idG4g''@;'; put 'put ''Y2RzLWljb24sLmJ0bi5idG4tbGluayBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay5idG4gY2xyLWljb24sLmJ0bi1saW5rIC5idG4gY2RzLWljb24sLmJ0bi1saW5rIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxl''@;'; put 'put ''cnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluayAuYnRuIGNkcy1pY29uLC5idG4tbGluayAuYnRuIGNsci1pY29uLC5idG4tbGluayAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmsg''@;'; put 'put ''LmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY29sb3IpfS5idG4uYnRuLWxpbms6aG92ZXIsLmJ0bi1saW5rIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1o''@;'; put 'put ''b3Zlci1jb2xvcil9LmJ0bi5idG4tbGluazpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rOmhvdmVyIGNsci1pY29uLC5idG4tbGluayAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tbGluayAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1ob3Zlci1jb2xv''@;'; put 'put ''cil9LmJ0bi5idG4tbGluazphY3RpdmUsLmJ0bi1saW5rIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluazphY3RpdmUgY2RzLWlj''@;'; put 'put ''b24sLmJ0bi5idG4tbGluazphY3RpdmUgY2xyLWljb24sLmJ0bi1saW5rIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tbGluayAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1saW5rLmRpc2FibGVkLC5idG4uYnRu''@;'; put 'put ''LWxpbms6ZGlzYWJsZWQsLmJ0bi1saW5rIC5idG4uZGlzYWJsZWQsLmJ0bi1saW5rIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGlzYWJs''@;'; put 'put ''ZWQtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWxpbmsuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tbGluazpkaXNhYmxlZCBjZHMtaWNvbiwu''@;'; put 'put ''YnRuLmJ0bi1saW5rOmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluayAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tbGluayAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluayAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tbGluayAuYnRuOmRpc2FibGVkIGNsci1pY29ue2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1idG4tbGluay1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tbGluay1wcmltYXJ5LC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXByaW1hcnkuYnRuLC5idG4tbGluay1wcmltYXJ5IC5idG4sLmJ0bi1saW5rLXByaW1hcnkgLmFsZXJ0LWFwcC1s''@;'; put 'put ''ZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXByaW1hcnkgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXByaW1hcnktYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1w''@;'; put 'put ''cmltYXJ5LWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1jb2xvcil9LmJ0bi5idG4tbGluay1wcmltYXJ5IGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXByaW1hcnkuYnRuIGNkcy1pY29uLC5idG4uYnRuLWxpbmstcHJp''@;'; put 'put ''bWFyeSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1wcmltYXJ5LmJ0biBjbHItaWNvbiwuYnRuLWxpbmstcHJpbWFyeSAuYnRuIGNkcy1pY29uLC5idG4tbGluay1wcmltYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNv''@;'; put 'put ''biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1wcmltYXJ5IC5idG4gY2RzLWljb24sLmJ0bi1saW5rLXByaW1hcnkgLmJ0biBjbHItaWNvbiwuYnRuLWxpbmstcHJpbWFyeSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstcHJpbWFyeSAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWNvbG9yKX0uYnRuLmJ0bi1saW5rLXByaW1hcnk6aG92ZXIsLmJ0bi1saW5rLXByaW1hcnkgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbGluay1wcmltYXJ5OmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLWxpbmstcHJpbWFyeTpob3ZlciBjbHItaWNvbiwu''@;'; put 'put ''YnRuLWxpbmstcHJpbWFyeSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tbGluay1wcmltYXJ5IC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXByaW1hcnktaG92ZXItY29sb3IpfS5idG4uYnRuLWxpbmstcHJpbWFyeTphY3RpdmUsLmJ0bi1saW5rLXByaW1h''@;'; put 'put ''cnkgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluay1wcmltYXJ5OmFjdGl2ZSBjZHMtaWNvbiwuYnRu''@;'; put 'put ''LmJ0bi1saW5rLXByaW1hcnk6YWN0aXZlIGNsci1pY29uLC5idG4tbGluay1wcmltYXJ5IC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tbGluay1wcmltYXJ5IC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWFjdGl2ZS1jb2xvcil9LmJ0bi5i''@;'; put 'put ''dG4tbGluay1wcmltYXJ5LmRpc2FibGVkLC5idG4uYnRuLWxpbmstcHJpbWFyeTpkaXNhYmxlZCwuYnRuLWxpbmstcHJpbWFyeSAuYnRuLmRpc2FibGVkLC5idG4tbGluay1wcmltYXJ5IC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXByaW1hcnktZGlzYWJsZWQtY29s''@;'; put 'put ''b3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXByaW1hcnktZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLXBy''@;'; put 'put ''aW1hcnkuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay1wcmltYXJ5LmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLWxpbmstcHJpbWFyeTpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXByaW1hcnk6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1saW5rLXByaW1hcnkgLmJ0''@;'; put 'put ''bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWxpbmstcHJpbWFyeSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluay1wcmltYXJ5IC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1saW5rLXByaW1hcnkgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxp''@;'; put 'put ''bmstcHJpbWFyeS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tbGluay1zdWNjZXNzLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXN1Y2Nlc3MuYnRuLC5idG4tbGluay1zdWNjZXNzIC5idG4sLmJ0bi1saW5rLXN1Y2Nlc3MgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQt''@;'; put 'put ''aXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWJnLWNv''@;'; put 'put ''bG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1jb2xvcil9LmJ0bi5idG4tbGluay1zdWNjZXNzIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXN1Y2Nlc3MuYnRuIGNkcy1pY29uLC5idG4uYnRuLWxpbmstc3VjY2VzcyBjbHItaWNv''@;'; put 'put ''biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1zdWNjZXNzLmJ0biBjbHItaWNvbiwuYnRuLWxpbmstc3VjY2VzcyAuYnRuIGNkcy1pY29uLC5idG4tbGluay1zdWNjZXNzIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBw''@;'; put 'put ''LWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1zdWNjZXNzIC5idG4gY2RzLWljb24sLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0biBjbHItaWNvbiwuYnRuLWxpbmstc3VjY2VzcyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxl''@;'; put 'put ''cnQtaXRlbSAuYnRuLWxpbmstc3VjY2VzcyAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWNvbG9yKX0uYnRuLmJ0bi1saW5rLXN1Y2Nlc3M6aG92ZXIsLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1i''@;'; put 'put ''dG4tbGluay1zdWNjZXNzLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbGluay1zdWNjZXNzOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLWxpbmstc3VjY2Vzczpob3ZlciBjbHItaWNvbiwuYnRuLWxpbmstc3Vj''@;'; put 'put ''Y2VzcyAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tbGluay1zdWNjZXNzIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtaG92ZXItY29sb3IpfS5idG4uYnRuLWxpbmstc3VjY2VzczphY3RpdmUsLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0bjphY3Rp''@;'; put 'put ''dmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluay1zdWNjZXNzOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXN1''@;'; put 'put ''Y2Nlc3M6YWN0aXZlIGNsci1pY29uLC5idG4tbGluay1zdWNjZXNzIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tbGluay1zdWNjZXNzIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluay1zdWNj''@;'; put 'put ''ZXNzLmRpc2FibGVkLC5idG4uYnRuLWxpbmstc3VjY2VzczpkaXNhYmxlZCwuYnRuLWxpbmstc3VjY2VzcyAuYnRuLmRpc2FibGVkLC5idG4tbGluay1zdWNjZXNzIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpu''@;'; put 'put ''b3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLXN1Y2Nlc3MuZGlzYWJs''@;'; put 'put ''ZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay1zdWNjZXNzLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLWxpbmstc3VjY2VzczpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXN1Y2Nlc3M6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0bi5kaXNhYmxlZCBj''@;'; put 'put ''ZHMtaWNvbiwuYnRuLWxpbmstc3VjY2VzcyAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluay1zdWNjZXNzIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1k''@;'; put 'put ''aXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tbGluay13YXJuaW5nLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXdhcm5pbmcuYnRuLC5idG4tbGluay13YXJuaW5nIC5idG4sLmJ0bi1saW5rLXdhcm5pbmcgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5h''@;'; put 'put ''bGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXdhcm5pbmcgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWJnLWNvbG9yKTtjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1jb2xvcil9LmJ0bi5idG4tbGluay13YXJuaW5nIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXdhcm5pbmcuYnRuIGNkcy1pY29uLC5idG4uYnRuLWxpbmstd2FybmluZyBjbHItaWNvbiwuYWxlcnQtYXBw''@;'; put 'put ''LWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay13YXJuaW5nLmJ0biBjbHItaWNvbiwuYnRuLWxpbmstd2FybmluZyAuYnRuIGNkcy1pY29uLC5idG4tbGluay13YXJuaW5nIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVy''@;'; put 'put ''dC1pdGVtIC5idG4tbGluay13YXJuaW5nIC5idG4gY2RzLWljb24sLmJ0bi1saW5rLXdhcm5pbmcgLmJ0biBjbHItaWNvbiwuYnRuLWxpbmstd2FybmluZyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRu''@;'; put 'put ''LWxpbmstd2FybmluZyAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWNvbG9yKX0uYnRuLmJ0bi1saW5rLXdhcm5pbmc6aG92ZXIsLmJ0bi1saW5rLXdhcm5pbmcgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJu''@;'; put 'put ''aW5nLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbGluay13YXJuaW5nOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLWxpbmstd2FybmluZzpob3ZlciBjbHItaWNvbiwuYnRuLWxpbmstd2FybmluZyAuYnRuOmhv''@;'; put 'put ''dmVyIGNkcy1pY29uLC5idG4tbGluay13YXJuaW5nIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctaG92ZXItY29sb3IpfS5idG4uYnRuLWxpbmstd2FybmluZzphY3RpdmUsLmJ0bi1saW5rLXdhcm5pbmcgLmJ0bjphY3RpdmV7YmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluay13YXJuaW5nOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXdhcm5pbmc6YWN0aXZl''@;'; put 'put ''IGNsci1pY29uLC5idG4tbGluay13YXJuaW5nIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tbGluay13YXJuaW5nIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluay13YXJuaW5nLmRpc2FibGVk''@;'; put 'put ''LC5idG4uYnRuLWxpbmstd2FybmluZzpkaXNhYmxlZCwuYnRuLWxpbmstd2FybmluZyAuYnRuLmRpc2FibGVkLC5idG4tbGluay13YXJuaW5nIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLXdhcm5pbmcuZGlzYWJsZWQgY2RzLWljb24s''@;'; put 'put ''LmJ0bi5idG4tbGluay13YXJuaW5nLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLWxpbmstd2FybmluZzpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXdhcm5pbmc6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1saW5rLXdhcm5pbmcgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRu''@;'; put 'put ''LWxpbmstd2FybmluZyAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluay13YXJuaW5nIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1saW5rLXdhcm5pbmcgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1kaXNhYmxlZC1jb2xv''@;'; put 'put ''cil9LmJ0bi5idG4tbGluay1kYW5nZXIsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstZGFuZ2VyLmJ0biwuYnRuLWxpbmstZGFuZ2VyIC5idG4sLmJ0bi1saW5rLWRhbmdlciAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAu''@;'; put 'put ''YWxlcnQtaXRlbSAuYnRuLWxpbmstZGFuZ2VyIC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1k''@;'; put 'put ''YW5nZXItY29sb3IpfS5idG4uYnRuLWxpbmstZGFuZ2VyIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLWRhbmdlci5idG4gY2RzLWljb24sLmJ0bi5idG4tbGluay1kYW5nZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRu''@;'; put 'put ''LWxpbmstZGFuZ2VyLmJ0biBjbHItaWNvbiwuYnRuLWxpbmstZGFuZ2VyIC5idG4gY2RzLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstZGFuZ2VyIC5i''@;'; put 'put ''dG4gY2RzLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYnRuIGNsci1pY29uLC5idG4tbGluay1kYW5nZXIgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLWRhbmdlciAuYnRuIGNsci1pY29ue2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItY29sb3IpfS5idG4uYnRuLWxpbmstZGFuZ2VyOmhvdmVyLC5idG4tbGluay1kYW5nZXIgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1idG4tbGluay1kYW5nZXItaG92ZXItY29sb3IpfS5idG4uYnRuLWxpbmstZGFuZ2VyOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLWxpbmstZGFuZ2VyOmhvdmVyIGNsci1pY29uLC5idG4tbGluay1kYW5nZXIgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLWxpbmstZGFuZ2VyIC5idG46aG92''@;'; put 'put ''ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRhbmdlci1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbGluay1kYW5nZXI6YWN0aXZlLC5idG4tbGluay1kYW5nZXIgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWFjdGl2ZS1i''@;'; put 'put ''Zy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRhbmdlci1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWxpbmstZGFuZ2VyOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLWRhbmdlcjphY3RpdmUgY2xyLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYnRuOmFjdGl2ZSBjZHMtaWNv''@;'; put 'put ''biwuYnRuLWxpbmstZGFuZ2VyIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1saW5rLWRhbmdlci5kaXNhYmxlZCwuYnRuLmJ0bi1saW5rLWRhbmdlcjpkaXNhYmxlZCwuYnRuLWxpbmstZGFuZ2VyIC5i''@;'; put 'put ''dG4uZGlzYWJsZWQsLmJ0bi1saW5rLWRhbmdlciAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItZGlzYWJsZWQtYmct''@;'; put 'put ''Y29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tbGluay1kYW5nZXIuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay1kYW5nZXIuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tbGluay1kYW5n''@;'; put 'put ''ZXI6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay1kYW5nZXI6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tbGluay1kYW5nZXIgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLWxpbmstZGFuZ2VyIC5idG46ZGlz''@;'; put 'put ''YWJsZWQgY2RzLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYnRuOmRpc2FibGVkIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLWxpbmstbmV1dHJhbCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1u''@;'; put 'put ''ZXV0cmFsLmJ0biwuYnRuLWxpbmstbmV1dHJhbCAuYnRuLC5idG4tbGluay1uZXV0cmFsIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1uZXV0cmFsIC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4t''@;'; put 'put ''bGluay1uZXV0cmFsLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtY29sb3IpfS5idG4uYnRuLWxpbmstbmV1dHJhbCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxl''@;'; put 'put ''dmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1uZXV0cmFsLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLW5ldXRyYWwgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstbmV1dHJhbC5idG4gY2xyLWljb24sLmJ0bi1saW5rLW5ldXRyYWwgLmJ0biBjZHMt''@;'; put 'put ''aWNvbiwuYnRuLWxpbmstbmV1dHJhbCAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstbmV1dHJhbCAuYnRuIGNkcy1pY29uLC5idG4tbGluay1uZXV0cmFsIC5idG4gY2xyLWljb24sLmJ0bi1s''@;'; put 'put ''aW5rLW5ldXRyYWwgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLW5ldXRyYWwgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1jb2xvcil9LmJ0bi5idG4t''@;'; put 'put ''bGluay1uZXV0cmFsOmhvdmVyLC5idG4tbGluay1uZXV0cmFsIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtaG92ZXItY29sb3IpfS5idG4uYnRuLWxp''@;'; put 'put ''bmstbmV1dHJhbDpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLW5ldXRyYWw6aG92ZXIgY2xyLWljb24sLmJ0bi1saW5rLW5ldXRyYWwgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLWxpbmstbmV1dHJhbCAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1u''@;'; put 'put ''ZXV0cmFsLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLW5ldXRyYWw6YWN0aXZlLC5idG4tbGluay1uZXV0cmFsIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmst''@;'; put 'put ''bmV1dHJhbC1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWxpbmstbmV1dHJhbDphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tbGluay1uZXV0cmFsOmFjdGl2ZSBjbHItaWNvbiwuYnRuLWxpbmstbmV1dHJhbCAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWxpbmstbmV1dHJhbCAuYnRuOmFjdGl2''@;'; put 'put ''ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWxpbmstbmV1dHJhbC5kaXNhYmxlZCwuYnRuLmJ0bi1saW5rLW5ldXRyYWw6ZGlzYWJsZWQsLmJ0bi1saW5rLW5ldXRyYWwgLmJ0bi5kaXNhYmxlZCwuYnRuLWxpbmstbmV1''@;'; put 'put ''dHJhbCAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tbGluay1uZXV0cmFsLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4tbGluay1uZXV0cmFsLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tbGluay1uZXV0cmFsLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWxpbmstbmV1dHJhbC5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1saW5rLW5ldXRyYWw6ZGlzYWJsZWQgY2RzLWlj''@;'; put 'put ''b24sLmJ0bi5idG4tbGluay1uZXV0cmFsOmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluay1uZXV0cmFsIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1saW5rLW5ldXRyYWwgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLWxpbmstbmV1dHJhbCAuYnRuOmRpc2FibGVkIGNkcy1pY29u''@;'; put 'put ''LC5idG4tbGluay1uZXV0cmFsIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLWludmVyc2UsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWludmVyc2UuYnRuLC5idG4taW52ZXJz''@;'; put 'put ''ZSAuYnRuLC5idG4taW52ZXJzZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWludmVyc2UgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYnRuLWludmVyc2UtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1jb2xvcil9LmJ0bi5idG4taW52ZXJzZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW52ZXJzZS5idG4gY2RzLWljb24sLmJ0bi5idG4taW52ZXJz''@;'; put 'put ''ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW52ZXJzZS5idG4gY2xyLWljb24sLmJ0bi1pbnZlcnNlIC5idG4gY2RzLWljb24sLmJ0bi1pbnZlcnNlIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''IC5hbGVydC1pdGVtIC5idG4taW52ZXJzZSAuYnRuIGNkcy1pY29uLC5idG4taW52ZXJzZSAuYnRuIGNsci1pY29uLC5idG4taW52ZXJzZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWludmVyc2Ug''@;'; put 'put ''LmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtY29sb3IpfS5idG4uYnRuLWludmVyc2U6aG92ZXIsLmJ0bi1pbnZlcnNlIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1idG4taW52ZXJzZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4taW52ZXJzZTpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1pbnZlcnNlOmhvdmVyIGNsci1pY29uLC5idG4taW52ZXJzZSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4taW52ZXJzZSAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4taW52ZXJzZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4taW52ZXJzZTphY3RpdmUsLmJ0bi1pbnZlcnNlIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNl''@;'; put 'put ''LWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4taW52ZXJzZTphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4taW52ZXJzZTphY3RpdmUgY2xyLWljb24sLmJ0bi1pbnZlcnNlIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4taW52ZXJzZSAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YnRuLWludmVyc2UtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1pbnZlcnNlLmRpc2FibGVkLC5idG4uYnRuLWludmVyc2U6ZGlzYWJsZWQsLmJ0bi1pbnZlcnNlIC5idG4uZGlzYWJsZWQsLmJ0bi1pbnZlcnNlIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWRpc2Fi''@;'; put 'put ''bGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtZGlzYWJsZWQtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1pbnZlcnNlLmRp''@;'; put 'put ''c2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWludmVyc2UuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4taW52ZXJzZTpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1pbnZlcnNlOmRpc2FibGVkIGNsci1pY29uLC5idG4taW52ZXJzZSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4taW52''@;'; put 'put ''ZXJzZSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4taW52ZXJzZSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4taW52ZXJzZSAuYnRuOmRpc2FibGVkIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tc20sLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5idG4tc20gLmJ0bntmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0xKTtsaW5lLWhlaWdodDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOmNhbGMoLjIqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtoZWlnaHQ6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLWhlaWdodCk7cGFkZGluZzp2YXIoLS1j''@;'; put 'put ''bHItYnRuLWFwcGVhcmFuY2Utc3RhbmRhcmQtcGFkZGluZyl9LmJ0bi1ibG9ja3tkaXNwbGF5OmZsZXg7d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJX0uYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bnttYXJnaW46dmFyKC0tY2xyLWJ0bi12ZXJ0aWNhbC1tYXJnaW4pIHZh''@;'; put 'put ''cigtLWNsci1idG4taG9yaXpvbnRhbC1tYXJnaW4pIHZhcigtLWNsci1idG4tdmVydGljYWwtbWFyZ2luKSAwfS5idG4uYnRuLWxpbmssLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmsuYnRue21hcmdpbi1yaWdodDowfS5idG4uYnRuLWxpbmsuYnRuLWludmVyc2V7Ym9y''@;'; put 'put ''ZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5idG4tc206bm90KC5idG4tbGluaykgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuOm5vdCguYnRuLWxpbmspIGNsci1pY29ue3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLGNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS0xKSksMCl9LmJ0bi1zbTpub3QoLmJ0bi1saW5rKSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46bm90KC5idG4tbGluaykgY2xyLWljb24sLmJ0bi1zbTpub3QoLmJ0bi1saW5rKSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46''@;'; put 'put ''bm90KC5idG4tbGluaykgY2RzLWljb257aGVpZ2h0OnZhcigtLWNsci1idG4tYXBwZWFyYW5jZS1zdGFuZGFyZC1pY29uLXNpemUpO3dpZHRoOnZhcigtLWNsci1idG4tYXBwZWFyYW5jZS1zdGFuZGFyZC1pY29uLXNpemUpfS5idG4taWNvbnttaW4td2lkdGg6MH0uYnRuLWdyb3VwLmJ0bi1s''@;'; put 'put ''aW5rIC5kcm9wZG93bi10b2dnbGV7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY29sb3IpfS5idG4tZ3JvdXAuYnRuLWxpbmsg''@;'; put 'put ''LmRyb3Bkb3duLXRvZ2dsZSBjZHMtaWNvbiwuYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWNvbG9yKX0uYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYnRuLWxpbmstaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1ob3Zlci1jb2xvcil9LmJ0bi1ncm91cC5idG4tbGluayAuZHJvcGRvd24tdG9nZ2xlOmhvdmVyIGNkcy1pY29uLC5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZTpob3Zl''@;'; put 'put ''ciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstaG92ZXItY29sb3IpfS5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRu''@;'; put 'put ''LWxpbmstYWN0aXZlLWNvbG9yKX0uYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGU6YWN0aXZlIGNkcy1pY29uLC5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZTphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1jb2xvcil9''@;'; put 'put ''LmJ0bi1ncm91cC5idG4tbGluayAuZHJvcGRvd24tdG9nZ2xlLmRpc2FibGVkLC5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZTpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yOnZhcigtLWNsci1idG4tbGluay1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kaXNhYmxlZC1ib3JkZXItY29sb3IpfS5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZS5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWdyb3VwLmJ0''@;'; put 'put ''bi1saW5rIC5kcm9wZG93bi10b2dnbGUuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1ncm91cC5idG4tbGluayAuZHJvcGRvd24tdG9nZ2xlOmRpc2FibGVkIGNkcy1pY29uLC5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZTpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYnRuLWxpbmstZGlzYWJsZWQtY29sb3IpfS5idG4tZ3JvdXAuYnRuLXNtIC5idG4tZ3JvdXAtb3ZlcmZsb3c+LmRyb3Bkb3duLXRvZ2dsZSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tZ3JvdXAuYnRuIC5idG4tZ3JvdXAtb3ZlcmZsb3c+LmRyb3Bkb3duLXRvZ2dsZXtm''@;'; put 'put ''b250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0xKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOmNh''@;'; put 'put ''bGMoLjIqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtoZWlnaHQ6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLWhlaWdodCk7cGFkZGluZzp2YXIoLS1jbHItYnRuLWFwcGVhcmFuY2Utc3RhbmRhcmQtcGFkZGluZyl9LmNo''@;'; put 'put ''ZWNrYm94LmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4sLmNoZWNrYm94LWlubGluZS5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0biwucmFkaW8uYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0g''@;'; put 'put ''LnJhZGlvLmJ0biwucmFkaW8taW5saW5lLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5yYWRpby1pbmxpbmUuYnRue3BhZGRpbmc6MH0uY2hlY2tib3guYnRuIGxhYmVsLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0biBsYWJlbCwuY2hlY2tib3gt''@;'; put 'put ''aW5saW5lLmJ0biBsYWJlbCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuIGxhYmVsLC5yYWRpby5idG4gbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGxhYmVsLC5yYWRpby1pbmxpbmUuYnRuIGxhYmVsLC5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLnJhZGlvLWlubGluZS5idG4gbGFiZWx7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTthbGlnbi1pdGVtczpjZW50ZXI7cGxhY2UtY29udGVudDpjZW50ZXI7LXdlYmtpdC1hcHBl''@;'; put 'put ''YXJhbmNlOm5vbmUhaW1wb3J0YW50O3BhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5jaGVja2JveC5idG4uZGlzYWJsZWQgbGFiZWwsLmNoZWNrYm94LmJ0bjpkaXNhYmxlZCBsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5kaXNhYmxlZCBsYWJlbCwuY2hlY2tib3gtaW5s''@;'; put 'put ''aW5lLmJ0bjpkaXNhYmxlZCBsYWJlbCwucmFkaW8uYnRuLmRpc2FibGVkIGxhYmVsLC5yYWRpby5idG46ZGlzYWJsZWQgbGFiZWwsLnJhZGlvLWlubGluZS5idG4uZGlzYWJsZWQgbGFiZWwsLnJhZGlvLWlubGluZS5idG46ZGlzYWJsZWQgbGFiZWx7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jaGVj''@;'; put 'put ''a2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF0rbGFiZWw6YmVmb3JlLC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF0rbGFiZWw6YWZ0ZXIsLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF0rbGFiZWw6YmVmb3JlLC5jaGVja2JveC1pbmxpbmUuYnRu''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdK2xhYmVsOmFmdGVye2NvbnRlbnQ6bm9uZX0ucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dK2xhYmVsOmJlZm9yZSwucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dK2xhYmVsOmFmdGVyLC5yYWRpby1pbmxpbmUuYnRuIGlucHV0W3R5cGU9cmFkaW9d''@;'; put 'put ''K2xhYmVsOmJlZm9yZSwucmFkaW8taW5saW5lLmJ0biBpbnB1dFt0eXBlPXJhZGlvXStsYWJlbDphZnRlcntjb250ZW50Om5vbmV9LmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hd''@;'; put 'put ''OmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtY29sb3IpfS5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5j''@;'; put 'put ''bHItaWNvbiwuY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNo''@;'; put 'put ''ZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVj''@;'; put 'put ''a2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1ob3Zlci1jb2xvcil9LmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNo''@;'; put 'put ''ZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNs''@;'; put 'put ''ci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtaG92ZXItY29sb3IpfS5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hl''@;'; put 'put ''Y2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4t''@;'; put 'put ''ZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1jb2xvcil9LmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVj''@;'; put 'put ''a2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVs''@;'; put 'put ''dC1jaGVja2VkLWFjdGl2ZS1jb2xvcil9LmNoZWNrYm94LmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5kaXNh''@;'; put 'put ''YmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtZGlzYWJsZWQtY29sb3IpO2JhY2tncm91''@;'; put 'put ''bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtZGlzYWJsZWQtYmctY29sb3IpfS5jaGVja2JveC5idG4uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2ti''@;'; put 'put ''b3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hl''@;'; put 'put ''Y2tib3gtaW5saW5lLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG46''@;'; put 'put ''ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRp''@;'; put 'put ''c2FibGVkLWNvbG9yKX0uY2hlY2tib3guYnRuIGxhYmVsLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0biBsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0biBsYWJlbCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuIGxhYmVs''@;'; put 'put ''e3dpZHRoOjEwMCV9LmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUgaW5wdXRb''@;'; put 'put ''dHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xh''@;'; put 'put ''YmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4taW5m''@;'; put 'put ''by1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLWluZm8g''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCts''@;'; put 'put ''YWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5l''@;'; put 'put ''LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91''@;'; put 'put ''dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAu''@;'; put 'put ''Y2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVs''@;'; put 'put ''dC1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1jb2xvcil9LmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5IGlu''@;'; put 'put ''cHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJl''@;'; put 'put ''bD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4u''@;'; put 'put ''YnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLXNlY29u''@;'; put 'put ''ZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXBy''@;'; put 'put ''aW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBp''@;'; put 'put ''bnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9''@;'; put 'put ''Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5w''@;'; put 'put ''dXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUt''@;'; put 'put ''aW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRb''@;'; put 'put ''dHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2Jv''@;'; put 'put ''eF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFi''@;'; put 'put ''ZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+''@;'; put 'put ''Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2Vk''@;'; put 'put ''K2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06''@;'; put 'put ''Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hl''@;'; put 'put ''Y2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBl''@;'; put 'put ''PWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1p''@;'; put 'put ''bmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hl''@;'; put 'put ''Y2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIr''@;'; put 'put ''bGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC5idG4uYnRu''@;'; put 'put ''LXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1zZWNv''@;'; put 'put ''bmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNr''@;'; put 'put ''Ym94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlw''@;'; put 'put ''ZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6''@;'; put 'put ''aG92ZXIrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2Vk''@;'; put 'put ''OmhvdmVyK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tl''@;'; put 'put ''ZDpob3ZlcitsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9''@;'; put 'put ''Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtaG92ZXItYmct''@;'; put 'put ''Y29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkgaW5w''@;'; put 'put ''dXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIr''@;'; put 'put ''bGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92''@;'; put 'put ''ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVj''@;'; put 'put ''a2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVj''@;'; put 'put ''a2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94''@;'; put 'put ''LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAu''@;'; put 'put ''YWxlcnQtaXRlbSAuY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94''@;'; put 'put ''LmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2Jv''@;'; put 'put ''eC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2Jv''@;'; put 'put ''eC1pbmxpbmUuYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gt''@;'; put 'put ''aW5saW5lLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwu''@;'; put 'put ''Y2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92''@;'; put 'put ''ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNo''@;'; put 'put ''ZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNv''@;'; put 'put ''bmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5l''@;'; put 'put ''LmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92''@;'; put 'put ''ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0''@;'; put 'put ''biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4t''@;'; put 'put ''b3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtaG92ZXItY29sb3IpfS5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVj''@;'; put 'put ''a2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LmJ0bi5i''@;'; put 'put ''dG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUt''@;'; put 'put ''cHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRb''@;'; put 'put ''dHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1pbmZvIGlu''@;'; put 'put ''cHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2Jv''@;'; put 'put ''eF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVj''@;'; put 'put ''a2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkOmFjdGl2ZStsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1''@;'; put 'put ''dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtYWN0aXZlLWNvbG9yKX0uY2hlY2tib3guYnRu''@;'; put 'put ''LmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLWlu''@;'; put 'put ''Zm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9''@;'; put 'put ''Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hl''@;'; put 'put ''Y2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0''@;'; put 'put ''eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkg''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vj''@;'; put 'put ''b25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLWlu''@;'; put 'put ''Zm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNv''@;'; put 'put ''biwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tl''@;'; put 'put ''ZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2Vk''@;'; put 'put ''OmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06''@;'; put 'put ''Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hl''@;'; put 'put ''Y2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06''@;'; put 'put ''Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlu''@;'; put 'put ''cHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5i''@;'; put 'put ''dG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwu''@;'; put 'put ''Y2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFj''@;'; put 'put ''dGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNo''@;'; put 'put ''ZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGlu''@;'; put 'put ''ZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDph''@;'; put 'put ''Y3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2ti''@;'; put 'put ''b3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1jb2xvcil9LmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94''@;'; put 'put ''LmJ0bi5idG4tc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4taW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLWluZm86ZGlzYWJsZWQgaW5w''@;'; put 'put ''dXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2Vk''@;'; put 'put ''K2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5j''@;'; put 'put ''aGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2ti''@;'; put 'put ''b3guYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0''@;'; put 'put ''bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4taW5m''@;'; put 'put ''by1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRu''@;'; put 'put ''LmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVj''@;'; put 'put ''a2JveC5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRu''@;'; put 'put ''LmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWlu''@;'; put 'put ''Zm8uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLmRpc2FibGVkIGlu''@;'; put 'put ''cHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lLmRpc2FibGVkIGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5kaXNhYmxl''@;'; put 'put ''ZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnku''@;'; put 'put ''ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vj''@;'; put 'put ''b25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWlu''@;'; put 'put ''Zm8tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVj''@;'; put 'put ''a2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2Jv''@;'; put 'put ''eF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1pbmZvLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94''@;'; put 'put ''XTpjaGVja2VkK2xhYmVse2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWJnLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkuZGlz''@;'; put 'put ''YWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJs''@;'; put 'put ''ZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLmRpc2FibGVkIGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2Jv''@;'; put 'put ''eF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2Vk''@;'; put 'put ''K2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+''@;'; put 'put ''Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVs''@;'; put 'put ''PmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVj''@;'; put 'put ''a2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hl''@;'; put 'put ''Y2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpkaXNhYmxlZCBp''@;'; put 'put ''bnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5''@;'; put 'put ''LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGlu''@;'; put 'put ''ZS1wcmltYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5i''@;'; put 'put ''dG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5j''@;'; put 'put ''aGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJl''@;'; put 'put ''bD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0bi5kaXNhYmxlZCBpbnB1dFt0''@;'; put 'put ''eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm8tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hl''@;'; put 'put ''Y2tib3guYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5h''@;'; put 'put ''bGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5j''@;'; put 'put ''ZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBl''@;'; put 'put ''PWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0''@;'; put 'put ''eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQg''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFy''@;'; put 'put ''eTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5i''@;'; put 'put ''dG4taW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4u''@;'; put 'put ''YnRuLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRu''@;'; put 'put ''LmJ0bi1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5s''@;'; put 'put ''aW5lLmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNr''@;'; put 'put ''Ym94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tl''@;'; put 'put ''ZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1''@;'; put 'put ''dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNv''@;'; put 'put ''bmRhcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5j''@;'; put 'put ''aGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06''@;'; put 'put ''Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTpkaXNhYmxl''@;'; put 'put ''ZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4t''@;'; put 'put ''b3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNv''@;'; put 'put ''biwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVj''@;'; put 'put ''a2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mby1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVj''@;'; put 'put ''a2JveC1pbmxpbmUuYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlw''@;'; put 'put ''ZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5l''@;'; put 'put ''LmJ0bi5idG4taW5mby1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hd''@;'; put 'put ''OmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLWluZm8uZGlzYWJsZWQgaW5w''@;'; put 'put ''dXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1pbmZvOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUt''@;'; put 'put ''aW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQr''@;'; put 'put ''bGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktY2hlY2tl''@;'; put 'put ''ZC1jb2xvcil9LmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5l''@;'; put 'put ''LmJ0bi5idG4tcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5''@;'; put 'put ''LWNoZWNrZWQtY29sb3IpfS5jaGVja2JveC5idG4uYnRuLXN1Y2Nlc3MgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc3VjY2VzcyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWJ0bi1zdWNjZXNzLWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1zdWNjZXNzIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5i''@;'; put 'put ''dG4tc3VjY2VzcyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zdWNjZXNzIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXN1Y2Nlc3Mg''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtY2hlY2tlZC1jb2xvcil9LmNoZWNrYm94LmJ0bi5idG4td2FybmluZyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUu''@;'; put 'put ''YnRuLmJ0bi13YXJuaW5nIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctY2hlY2tlZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWNoZWNrZWQtY29sb3IpfS5jaGVja2JveC5idG4u''@;'; put 'put ''YnRuLXdhcm5pbmcgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi13YXJuaW5nIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXdhcm5pbmcgaW5wdXRb''@;'; put 'put ''dHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4td2FybmluZyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1jaGVja2VkLWNvbG9yKX0uY2hlY2ti''@;'; put 'put ''b3guYnRuLmJ0bi1kYW5nZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tZGFuZ2VyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1jaGVja2Vk''@;'; put 'put ''LWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1kYW5nZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1kYW5nZXIgaW5wdXRbdHlwZT1jaGVja2Jv''@;'; put 'put ''eF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tZGFuZ2VyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWRhbmdlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xh''@;'; put 'put ''YmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWNoZWNrZWQtY29sb3IpfS5jaGVja2JveC5idG4uYnRuLWxpbmsgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tbGluayBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1saW5rIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+''@;'; put 'put ''Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tbGluayBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1saW5rIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGlu''@;'; put 'put ''ZS5idG4uYnRuLWxpbmsgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY2hlY2tlZC1jb2xvcil9LmNoZWNrYm94LmJ0bi5idG4taW52ZXJzZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVj''@;'; put 'put ''a2JveC1pbmxpbmUuYnRuLmJ0bi1pbnZlcnNlIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtY2hlY2tlZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWNoZWNrZWQtY29sb3IpfS5j''@;'; put 'put ''aGVja2JveC5idG4uYnRuLWludmVyc2UgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbnZlcnNlIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWlu''@;'; put 'put ''dmVyc2UgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW52ZXJzZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1jaGVja2VkLWNv''@;'; put 'put ''bG9yKX0ucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4gaW5wdXRb''@;'; put 'put ''dHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tl''@;'; put 'put ''ZDpob3ZlcitsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1ob3Zlci1jb2xvcil9LnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhv''@;'; put 'put ''dmVyK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1ob3Zlci1jb2xvcil9LnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFj''@;'; put 'put ''dGl2ZStsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtYWN0aXZlLWNvbG9yKX0ucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0''@;'; put 'put ''aXZlK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtYWN0aXZlLWNvbG9yKX0ucmFkaW8uYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9d''@;'; put 'put ''OmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2Vk''@;'; put 'put ''LWRpc2FibGVkLWJnLWNvbG9yKX0ucmFkaW8uYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG46ZGlzYWJsZWQgaW5w''@;'; put 'put ''dXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtZGlzYWJsZWQtY29sb3IpfS5yYWRpby5idG4gbGFi''@;'; put 'put ''ZWwsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGxhYmVse3dpZHRoOjEwMCV9LnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xh''@;'; put 'put ''YmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBl''@;'; put 'put ''PXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4t''@;'; put 'put ''aW5mby1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlw''@;'; put 'put ''ZT1yYWRpb106Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9d''@;'; put 'put ''OmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRu''@;'; put 'put ''LWluZm8gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVs''@;'; put 'put ''PmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4u''@;'; put 'put ''YnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1h''@;'; put 'put ''cnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlv''@;'; put 'put ''XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWlj''@;'; put 'put ''b24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRp''@;'; put 'put ''by5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3Zlcits''@;'; put 'put ''YWJlbCwucmFkaW8uYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBl''@;'; put 'put ''PXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFi''@;'; put 'put ''ZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbCwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWlu''@;'; put 'put ''Zm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZh''@;'; put 'put ''dWx0LWNoZWNrZWQtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1z''@;'; put 'put ''ZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVj''@;'; put 'put ''a2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24s''@;'; put 'put ''LnJhZGlvLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0''@;'; put 'put ''bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRu''@;'; put 'put ''LW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUt''@;'; put 'put ''c2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmUg''@;'; put 'put ''aW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWluZm8t''@;'; put 'put ''b3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5i''@;'; put 'put ''dG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0''@;'; put 'put ''LWNoZWNrZWQtaG92ZXItY29sb3IpfS5yYWRpby5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbCwucmFkaW8uYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxp''@;'; put 'put ''bmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWwsLnJhZGlvLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNo''@;'; put 'put ''ZWNrZWQ6YWN0aXZlK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbCwucmFk''@;'; put 'put ''aW8uYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWwsLnJhZGlvLmJ0bi5i''@;'; put 'put ''dG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1hY3RpdmUtY29s''@;'; put 'put ''b3IpfS5yYWRpby5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4t''@;'; put 'put ''aW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hl''@;'; put 'put ''Y2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFi''@;'; put 'put ''ZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNs''@;'; put 'put ''ci1pY29uLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNv''@;'; put 'put ''biwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLnJh''@;'; put 'put ''ZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5hbGVydC1hcHAt''@;'; put 'put ''bGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+''@;'; put 'put ''Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1jb2xvcil9LnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2Fi''@;'; put 'put ''bGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4taW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5y''@;'; put 'put ''YWRpby5idG4uYnRuLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBl''@;'; put 'put ''PXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVs''@;'; put 'put ''LC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1v''@;'; put 'put ''dXRsaW5lLXByaW1hcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNh''@;'; put 'put ''YmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9d''@;'; put 'put ''OmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5idG4uZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hl''@;'; put 'put ''Y2tlZCtsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2Vk''@;'; put 'put ''K2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVs''@;'; put 'put ''dC1jaGVja2VkLWRpc2FibGVkLWJnLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCts''@;'; put 'put ''YWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwu''@;'; put 'put ''cmFkaW8uYnRuLmJ0bi1pbmZvLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4taW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLWluZm86ZGlzYWJs''@;'; put 'put ''ZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpj''@;'; put 'put ''aGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWlj''@;'; put 'put ''b24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5i''@;'; put 'put ''dG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4u''@;'; put 'put ''YnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5i''@;'; put 'put ''dG4tc2Vjb25kYXJ5LW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4u''@;'; put 'put ''YnRuLXNlY29uZGFyeS1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5i''@;'; put 'put ''dG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4t''@;'; put 'put ''b3V0bGluZS1wcmltYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1v''@;'; put 'put ''dXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4t''@;'; put 'put ''b3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFs''@;'; put 'put ''ZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWluZm8tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+''@;'; put 'put ''Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106''@;'; put 'put ''Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1''@;'; put 'put ''dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPXJh''@;'; put 'put ''ZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWNvbG9yKX0ucmFkaW8u''@;'; put 'put ''YnRuLmJ0bi1wcmltYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktY2hlY2tlZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLXBy''@;'; put 'put ''aW1hcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1wcmltYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4u''@;'; put 'put ''YnRuLXN1Y2Nlc3MgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4tc3VjY2Vz''@;'; put 'put ''cyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXN1Y2Nlc3MgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4t''@;'; put 'put ''d2FybmluZyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi13YXJuaW5nIGlu''@;'; put 'put ''cHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4td2FybmluZyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1kYW5n''@;'; put 'put ''ZXIgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLWRhbmdlciBpbnB1dFt0eXBl''@;'; put 'put ''PXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWRhbmdlciBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGlu''@;'; put 'put ''ZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzIGlucHV0W3R5cGU9cmFk''@;'; put 'put ''aW9dOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmUg''@;'; put 'put ''aW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGlu''@;'; put 'put ''ZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zdWNj''@;'; put 'put ''ZXNzIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtY2hlY2tlZC1jb2xv''@;'; put 'put ''cil9LnJhZGlvLmJ0bi5idG4td2FybmluZy1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0''@;'; put 'put ''bi1vdXRsaW5lLXdhcm5pbmcgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWNoZWNrZWQtY29sb3Ip''@;'; put 'put ''fS5yYWRpby5idG4uYnRuLXdhcm5pbmctb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWlj''@;'; put 'put ''b24sLnJhZGlvLmJ0bi5idG4td2FybmluZy1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMt''@;'; put 'put ''aWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmcgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmcgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YnRuLXdhcm5pbmctb3V0bGluZS1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1kYW5nZXItb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRp''@;'; put 'put ''b106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWRhbmdlciBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRh''@;'; put 'put ''bmdlci1vdXRsaW5lLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLWRhbmdlci1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJh''@;'; put 'put ''ZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWRhbmdlci1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJh''@;'; put 'put ''ZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtZGFuZ2VyIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1kYW5nZXIgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMt''@;'; put 'put ''aWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLWxpbmsgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1jaGVja2VkLWJnLWNvbG9yKTtjb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYnRuLWxpbmstY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4tbGluayBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWxpbmsgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYnRuLWxpbmstY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4taW52ZXJzZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4t''@;'; put 'put ''aW52ZXJzZS1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1pbnZlcnNlIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4taW52ZXJzZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1idG4taW52ZXJzZS1jaGVja2VkLWNvbG9yKX0uYnRuLWdyb3Vwe2Rpc3BsYXk6aW5saW5lLWZsZXg7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9LmJ0bi1ncm91cCBjbHItZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtib3JkZXItcmFkaXVzOjB9LmJ0bi1ncm91''@;'; put 'put ''cCBjbHItZHJvcGRvd246bGFzdC1jaGlsZCAuZHJvcGRvd24tdG9nZ2xle2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWNsci1idG4tYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLWJ0bi1ib3JkZXItcmFkaXVzKX0uYnRuLWdyb3VwIC5i''@;'; put 'put ''dG57bWFyZ2luOjA7b3ZlcmZsb3c6aGlkZGVufS5idG4tZ3JvdXAgLmJ0biBsYWJlbHtoZWlnaHQ6MTAwJX0uYnRuLWdyb3VwIC5idG4gaW5wdXRbdHlwZT1yYWRpb106aG92ZXIsLmJ0bi1ncm91cCAuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmhvdmVye2FwcGVhcmFuY2U6bm9uZTtvcGFj''@;'; put 'put ''aXR5OjE7dG9wOjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtib3JkZXI6SGlnaGxpZ2h0IHNvbGlkIDJweH0uYnRuLWdyb3VwIC5idG4gaW5wdXRbdHlwZT1yYWRpb106aG92ZXI6Oi1tcy1jaGVjaywuYnRuLWdyb3VwIC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06aG92ZXI6Oi1tcy1jaGVj''@;'; put 'put ''a3tkaXNwbGF5Om5vbmV9LmJ0bi1ncm91cCAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LmJ0bi1ncm91cCAuYnRuOm5vdCg6bGFzdC1jaGlsZCl7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDtib3Jk''@;'; put 'put ''ZXItYm90dG9tLXJpZ2h0LXJhZGl1czowfS5idG4tZ3JvdXAgLmJ0bjpkaXNhYmxlZDpub3QoOmxhc3QtY2hpbGQpe2JvcmRlci1yaWdodDpub25lfS5idG4tZ3JvdXAgLnRvb2x0aXA6bm90KDpmaXJzdC1jaGlsZCkgLmJ0bntib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRv''@;'; put 'put ''bS1sZWZ0LXJhZGl1czowfS5idG4tZ3JvdXAgLnRvb2x0aXA6bm90KDpsYXN0LWNoaWxkKSAuYnRue2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uYnRuLWdyb3VwLmJ0bi1wcmltYXJ5IC50b29sdGlwOm5vdCg6bGFzdC1jaGlsZCk+LmJ0''@;'; put 'put ''biwuYnRuLWdyb3VwLmJ0bi1wcmltYXJ5Pi5idG46bm90KDpsYXN0LWNoaWxkKSwuYnRuLWdyb3VwLmJ0bi1uZXV0cmFsIC50b29sdGlwOm5vdCg6bGFzdC1jaGlsZCk+LmJ0biwuYnRuLWdyb3VwLmJ0bi1uZXV0cmFsPi5idG46bm90KDpsYXN0LWNoaWxkKSwuYnRuLWdyb3VwLmJ0bi1zdWNj''@;'; put 'put ''ZXNzIC50b29sdGlwOm5vdCg6bGFzdC1jaGlsZCk+LmJ0biwuYnRuLWdyb3VwLmJ0bi1zdWNjZXNzPi5idG46bm90KDpsYXN0LWNoaWxkKSwuYnRuLWdyb3VwLmJ0bi1kYW5nZXIgLnRvb2x0aXA6bm90KDpsYXN0LWNoaWxkKT4uYnRuLC5idG4tZ3JvdXAuYnRuLWRhbmdlcj4uYnRuOm5vdCg6''@;'; put 'put ''bGFzdC1jaGlsZCksLmJ0bi1ncm91cC5idG4td2FybmluZyAudG9vbHRpcDpub3QoOmxhc3QtY2hpbGQpPi5idG4sLmJ0bi1ncm91cC5idG4td2FybmluZz4uYnRuOm5vdCg6bGFzdC1jaGlsZCl7bWFyZ2luOjAgdmFyKC0tY2xyLWJ0bi1ib3JkZXItd2lkdGgpIDAgMH0uYnRuLWdyb3VwPi5i''@;'; put 'put ''dG4tZ3JvdXAtb3ZlcmZsb3d7cG9zaXRpb246cmVsYXRpdmV9LmJ0bi1ncm91cD4uYnRuLWdyb3VwLW92ZXJmbG93Omxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCk+LmJ0bjpmaXJzdC1jaGlsZHtib3JkZXItcmFkaXVzOjAgdmFyKC0tY2xyLWJ0bi1ib3JkZXItcmFkaXVzKSB2YXIoLS1j''@;'; put 'put ''bHItYnRuLWJvcmRlci1yYWRpdXMpIDB9LmJ0bi1ncm91cD4uYnRuLWdyb3VwLW92ZXJmbG93Omxhc3QtY2hpbGQ6Zmlyc3QtY2hpbGQ+LmJ0bjpmaXJzdC1jaGlsZHtib3JkZXItcmFkaXVzOnZhcigtLWNsci1idG4tYm9yZGVyLXJhZGl1cyl9LmJ0bi1ncm91cCAuYnRuOm5vdChbZGlzYWJs''@;'; put 'put ''ZWRdKSsuYnRue2JvcmRlci1sZWZ0Om5vbmV9LmJ0bi1ncm91cCAudG9vbHRpcDpub3QoOmZpcnN0LWNoaWxkKSAuYnRue2JvcmRlci1sZWZ0Om5vbmV9LmJ0bi1ncm91cCAuYnRuOm5vdChbZGlzYWJsZWRdKSsuYnRuLWdyb3VwLW92ZXJmbG93IC5idG57Ym9yZGVyLWxlZnQ6bm9uZX0uYnRu''@;'; put 'put ''LWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGUsLmJ0bi1ncm91cC5idG4taWNvbi1saW5rLmJ0bi1saW5rIC5idG4sLmJ0bi1ncm91cC5idG4taWNvbiAuYnRue21pbi13aWR0aDowfS5idG4tZ3JvdXAgLmNsci1pY29uLXRpdGxle2Rpc3BsYXk6bm9uZTt0ZXh0LXRyYW5zZm9ybTpu''@;'; put 'put ''b25lfS5idG4tZ3JvdXAgLmRyb3Bkb3duLXRvZ2dsZXtkaXNwbGF5OmJsb2NrfS5idG4tZ3JvdXAgLmRyb3Bkb3duLW1lbnUgY2RzLWljb24sLmJ0bi1ncm91cCAuZHJvcGRvd24tbWVudSBjbHItaWNvbntkaXNwbGF5Om5vbmV9LmJ0bi1ncm91cCAuZHJvcGRvd24tbWVudSAuY2xyLWljb24t''@;'; put 'put ''dGl0bGV7ZGlzcGxheTppbmxpbmV9LmNoZWNrYm94LC5yYWRpb3twb3NpdGlvbjpyZWxhdGl2ZX0uY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0sLmNoZWNrYm94IGlucHV0W3R5cGU9cmFkaW9dLC5yYWRpbyBpbnB1dFt0eXBlPWNoZWNrYm94XSwucmFkaW8gaW5wdXRbdHlwZT1yYWRp''@;'; put 'put ''b117Y3Vyc29yOnBvaW50ZXI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2hlaWdodDowO3dpZHRoOjA7b3BhY2l0eTowfS5kcm9wZG93bi1tZW51LmNsci1idXR0b24tZ3JvdXAtbWVudXt2aXNpYmlsaXR5OnZpc2libGV9YnV0dG9uLmNsb3Nle3BhZGRpbmc6MDtjdXJzb3I6cG9p''@;'; put 'put ''bnRlcjtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0uY2xvc2V7ZmxvYXQ6cmlnaHQ7Zm9udC1zaXplOjEuOHJlbTt0cmFuc2l0aW9uOmNvbG9yIGxpbmVhciAuMnM7Zm9udC13ZWlnaHQ6MjAwO3RleHQtc2hhZG93Om5vbmU7bGluZS1oZWlnaHQ6aW5o''@;'; put 'put ''ZXJpdDtjb2xvcjp2YXIoLS1jbHItY2xvc2UtY29sb3IpfS5jbG9zZSBjZHMtaWNvbiwuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItY2xvc2UtY29sb3IpfS5jbG9zZTpob3Zlcntjb2xvcjp2YXIoLS1jbHItY2xvc2UtY29sb3ItaG92ZXIpfS5jbG9zZTpob3ZlciBjZHMtaWNvbiwu''@;'; put 'put ''Y2xvc2U6aG92ZXIgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItY2xvc2UtY29sb3ItaG92ZXIpfS5jbG9zZTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWNsb3NlLWNvbG9yLWFjdGl2ZSl9LmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xy''@;'; put 'put ''LWNsb3NlLWNvbG9yLWFjdGl2ZSl9LmNsb3NlOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lKTtvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLW9mZnNldDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWlu''@;'; put 'put ''dGVyYWN0aW9uLW91dGxpbmUtb2Zmc2V0KX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1hbGVydC1ib3JkZXJyYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItYXBwLWFsZXJ0LXBhZ2VyLXdpZHRoOmNhbGMoMTQ0ICogKDFyZW0gLyB2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWJhc2UpKSk7LS1jbHItYWxlcnQtYWN0aW9uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItYWxlcnQtYWN0aW9uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1j''@;'; put 'put ''bHItYWxlcnQtY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtYWN0aW9uLWNvbG9yKTstLWNsci1hbGVydC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1hY3Rpb24tYWN0aXZlLWNvbG9yKTstLWNsci1hcHAtbGV2ZWwtYWxlcnQtY29sb3I6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci13aGl0ZSk7LS1jbHItYXBwLWFsZXJ0LWNsb3NlLWljb24tY29sb3I6dmFyKC0tY2xyLWFwcC1sZXZlbC1hbGVydC1jb2xvcik7LS1jbHItYWxlcnQtaW5mby1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8tdGludCk7LS1jbHItYWxlcnQtaW5mby1m''@;'; put 'put ''b250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItYWxlcnQtaW5mby1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvKTstLWNsci1hbGVydC1pbmZvLWljb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tZm9udC1jb2xv''@;'; put 'put ''cik7LS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWFjdGl2ZS1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYWxlcnQtYWN0aW9uLWFjdGl2ZS1jb2xvcik7LS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKTstLWNsci1hbGVydC1zdWNjZXNzLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy1zdGF0dXMtc3VjY2Vzcy10aW50KTstLWNsci1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1hbGVydC1zdWNjZXNzLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLWFs''@;'; put 'put ''ZXJ0LXN1Y2Nlc3MtaWNvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1mb250LWNvbG9yKTstLWNsci1hbGVydC1zdWNjZXNzLWNsb3NlLWljb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcik7LS1jbHItYWxlcnQtc3VjY2Vzcy1hY3Rpb24tY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcik7LS1jbHItYWxlcnQtc3VjY2Vzcy1hY3Rpb24tYWN0aXZlLWNvbG9yOnZhcigtLWNsci1hbGVydC1hY3Rpb24tYWN0aXZlLWNvbG9yKTstLWNsci1hbGVydC1zdWNjZXNzLWNsb3NlLWljb24taG92ZXItY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWFsZXJ0LWNsb3NlLWljb24taG92ZXItY29sb3IpOy0tY2xyLWFsZXJ0LXdhcm5pbmctYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLXRpbnQpOy0tY2xyLWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDAp''@;'; put 'put ''Oy0tY2xyLWFsZXJ0LXdhcm5pbmctYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZyk7LS1jbHItYWxlcnQtd2FybmluZy1pY29uLWNvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1mb250LWNvbG9yKTstLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1mb250LWNvbG9yKTstLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFsZXJ0''@;'; put 'put ''LWFjdGlvbi1hY3RpdmUtY29sb3IpOy0tY2xyLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1mb250LWNvbG9yKTstLWNsci1hbGVydC1kYW5nZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXItdGludCk7''@;'; put 'put ''LS1jbHItYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1hbGVydC1kYW5nZXItYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyKTstLWNsci1hbGVydC1kYW5nZXItaWNvbi1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItZm9udC1jb2xvcik7LS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWZvbnQtY29s''@;'; put 'put ''b3IpOy0tY2xyLWFsZXJ0LWRhbmdlci1hY3Rpb24tYWN0aXZlLWNvbG9yOnZhcigtLWNsci1hbGVydC1hY3Rpb24tYWN0aXZlLWNvbG9yKTstLWNsci1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtY2xvc2UtaWNvbi1ob3Zlci1jb2xvcik7LS1j''@;'; put 'put ''bHItYWxlcnQtbmV1dHJhbC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtdGludCk7LS1jbHItYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItYWxlcnQtbmV1dHJhbC1ib3JkZXItY29sb3I6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsKTstLWNsci1hbGVydC1uZXV0cmFsLWljb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcik7LS1jbHItYWxlcnQtbmV1dHJhbC1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWNsci1hbGVydC1uZXV0cmFsLWZvbnQt''@;'; put 'put ''Y29sb3IpOy0tY2xyLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yOnZhcigtLWNsci1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYWxlcnQtYWN0aW9uLWFjdGl2ZS1jb2xvcik7LS1jbHItYWxlcnQt''@;'; put 'put ''bmV1dHJhbC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKTstLWNsci1hcHAtYWxlcnQtaW5mby1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1hcHAtYWxlcnQtaW5mby1ib3JkZXItY29sb3I6bm9uZTstLWNsci1hcHAtYWxlcnQtaW5mby1pY29uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtaW5mby1h''@;'; put 'put ''Y3Rpb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24tY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24taG92ZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy1zdGF0dXMtd2FybmluZyk7LS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsYWNrKTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1ib3JkZXItY29sb3I6bm9uZTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1pY29uLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1hcHAtYWxlcnQtd2FybmluZy1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3I6dmFyKC0tY2xyLWFw''@;'; put 'put ''cC1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWNsb3NlLWljb24taG92ZXItY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWFwcC1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1kYW5nZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLWFwcC1hbGVydC1kYW5nZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0x''@;'; put 'put ''MDApOy0tY2xyLWFwcC1hbGVydC1kYW5nZXItYm9yZGVyLWNvbG9yOm5vbmU7LS1jbHItYXBwLWFsZXJ0LWRhbmdlci1pY29uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYXBwLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFwcC1h''@;'; put 'put ''bGVydC1kYW5nZXItZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMt''@;'; put 'put ''c3VjY2Vzcyk7LS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWJvcmRlci1jb2xvcjpub25lOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWljb24tY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWFwcC1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWNsb3NlLWljb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItYXBw''@;'; put 'put ''LWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1ob3Zlci1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYXBwLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsKTstLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9y''@;'; put 'put ''LTEwMCk7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYm9yZGVyLWNvbG9yOm5vbmU7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtaWNvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtY2xvc2UtaWNvbi1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1hY3Rpb24tYWN0aXZlLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1hcHAtYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtcGFnZXItdGV4dC1jb2xvcjp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWFwcC1hbGVydC1pbmZvLXBhZ2VyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mby1zaGFkZSk7LS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctcGFnZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13YXJu''@;'; put 'put ''aW5nLXNoYWRlKTstLWNsci1hcHAtYWxlcnQtZGFuZ2VyLXBhZ2VyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLXNoYWRlKTstLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1wYWdlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3Mtc2hhZGUpOy0t''@;'; put 'put ''Y2xyLWFwcC1hbGVydC1uZXV0cmFsLXBhZ2VyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtbmV1dHJhbC1zaGFkZSk7LS1jbHItYXBwLWFsZXJ0LWluZm8tcGFnZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWFwcC1hbGVy''@;'; put 'put ''dC13YXJuaW5nLXBhZ2VyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibGFjayk7LS1jbHItYXBwLWFsZXJ0LWRhbmdlci1wYWdlci1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtcGFnZXIt''@;'; put 'put ''Zm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLXBhZ2VyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1saWdodHdlaWdodC1hbGVydC1pbmZvLWljb24tY29s''@;'; put 'put ''b3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvKTstLWNsci1saWdodHdlaWdodC1hbGVydC1pbmZvLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1saWdodHdlaWdodC1hbGVydC13YXJuaW5nLWljb24tY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXN0YXR1cy13YXJuaW5nLWRhcmspOy0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LWRhbmdlci1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1z''@;'; put 'put ''dGF0dXMtZGFuZ2VyKTstLWNsci1saWdodHdlaWdodC1hbGVydC1kYW5nZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LXN1Y2Nlc3MtaWNvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nl''@;'; put 'put ''c3MpOy0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LW5ldXRyYWwtaWNvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtc2hhZGUp''@;'; put 'put ''Oy0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApfS5hbGVydC1pY29ue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLWhl''@;'; put 'put ''aWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5hbGVydC1pY29uLXdyYXBwZXJ7ZGlzcGxheTppbmxpbmUtZmxleDtmbGV4OjAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5hbGVydC1pdGVte2ZsZXg6MSAxIGF1''@;'; put 'put ''dG87ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDpub3dyYXA7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpfS5hbGVydC1pdGVtc3tmbGV4OjEgMSBhdXRvO2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO3BhZGRpbmc6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS01KSAwO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2Rpc3BsYXk6ZmxleH0uYWxlcnQtaXRlbT5zcGFuLC5hbGVydC10ZXh0e2ZsZXg6MSAxO3RleHQtYWxpZ246bGVmdDthbGlnbi1zZWxmOmNlbnRlcn0uYWxlcnR7Zm9udC1zaXplOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0zKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OmNhbGMoMjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7d2lkdGg6YXV0bztib3JkZXItcmFkaXVzOnZhcigtLWNsci1hbGVydC1ib3JkZXJyYWRpdXMpO3BhZGRpbmc6MCB2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KTtiYWNrZ3JvdW5kOnZhcigtLWNsci1hbGVydC1pbmZvLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1mb250''@;'; put 'put ''LWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItYWxlcnQtaW5mby1ib3JkZXItY29sb3IpfS5hbGVydCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIoLS1jbHItYWxlcnQt''@;'; put 'put ''aW5mby1mb250LWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSkgY2RzLWljb24sLmFsZXJ0IC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFsZXJ0LWluZm8tZm9udC1jb2xvcil9''@;'; put 'put ''LmFsZXJ0IC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWljb24tY29sb3IpfS5hbGVydCAuYWxlcnQtYWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpO2JvcmRlci1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYWxlcnQtaW5mby1hY3Rpb24tYWN0aXZlLWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWFjdGlvbiwuYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVydCAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQgLmRyb3Bkb3du''@;'; put 'put ''LXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0IC5hbGVydC1hY3Rpb24uYnRuIGNsci1p''@;'; put 'put ''Y29uLC5hbGVydCAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbiwuYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydCAuZHJvcGRv''@;'; put 'put ''d24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydCAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2xyLWljb24sLmFsZXJ0IC5kcm9wZG93bi10b2dn''@;'; put 'put ''bGUuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0IC5jbG9zZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWNvbG9y''@;'; put 'put ''KX0uYWxlcnQgLmNsb3NlIGNkcy1pY29uLC5hbGVydCAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQgLmNsb3NlOmZvY3VzLC5hbGVydCAuY2xvc2U6aG92ZXIsLmFsZXJ0IC5jbG9zZTphY3RpdmV7Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0IC5jbG9zZTpmb2N1cyBjZHMtaWNvbiwuYWxlcnQgLmNsb3NlOmZvY3VzIGNsci1pY29uLC5hbGVydCAuY2xvc2U6aG92ZXIgY2RzLWljb24sLmFsZXJ0IC5jbG9zZTpob3ZlciBjbHItaWNvbiwuYWxlcnQgLmNs''@;'; put 'put ''b3NlOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQgLmNsb3NlOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1pbmZvLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC5hbGVydC1pbmZve2JhY2tncm91bmQ6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYmctY29sb3IpO2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci1hbGVydC1pbmZvLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1hbGVydC1pbmZvLWJvcmRlci1jb2xvcil9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVt''@;'; put 'put ''IGE6bm90KC5iYWRnZSl7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSkgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6''@;'; put 'put ''bm90KC5iYWRnZSkgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYWxlcnQtaW5mby1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtaWNvbntjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1pY29uLWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9ucyAuZHJv''@;'; put 'put ''cGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tYWN0aXZlLWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uLC5hbGVydC5hbGVydC1p''@;'; put 'put ''bmZvIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQuYWxlcnQtaW5mbyAuZHJvcGRvd24tdG9nZ2xlLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0''@;'; put 'put ''LWluZm8tYWN0aW9uLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuIGNkcy1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuIGNsci1pY29uLC5hbGVydC5hbGVydC1p''@;'; put 'put ''bmZvIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZl''@;'; put 'put ''LC5hbGVydC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQt''@;'; put 'put ''YWN0aW9uLmJ0bjphY3RpdmUgY2xyLWljb24sLmFsZXJ0LmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1h''@;'; put 'put ''Y3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1pbmZvIC5jbG9zZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuY2xvc2UgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWluZm8gLmNsb3NlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xy''@;'; put 'put ''LWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWluZm8gLmNsb3NlOmZvY3VzLC5hbGVydC5hbGVydC1pbmZvIC5jbG9zZTpob3ZlciwuYWxlcnQuYWxlcnQtaW5mbyAuY2xvc2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWNsb3NlLWljb24taG92''@;'; put 'put ''ZXItY29sb3IpfS5hbGVydC5hbGVydC1pbmZvIC5jbG9zZTpmb2N1cyBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtaW5mbyAuY2xvc2U6Zm9jdXMgY2xyLWljb24sLmFsZXJ0LmFsZXJ0LWluZm8gLmNsb3NlOmhvdmVyIGNkcy1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5jbG9zZTpob3ZlciBjbHIt''@;'; put 'put ''aWNvbiwuYWxlcnQuYWxlcnQtaW5mbyAuY2xvc2U6YWN0aXZlIGNkcy1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5jbG9zZTphY3RpdmUgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtc3VjY2Vzc3tiYWNrZ3Jv''@;'; put 'put ''dW5kOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1ib3JkZXIt''@;'; put 'put ''Y29sb3IpfS5hbGVydC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2Upe2NvbG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3IpfS5hbGVydC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFk''@;'; put 'put ''Z2UpIGNkcy1pY29uLC5hbGVydC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWljb257Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFs''@;'; put 'put ''ZXJ0LXN1Y2Nlc3MtYWN0aW9uLWFjdGl2ZS1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1''@;'; put 'put ''Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxl''@;'; put 'put ''cnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0biBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0biBjbHItaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAu''@;'; put 'put ''ZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1zdWNjZXNzIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3Rp''@;'; put 'put ''dmV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC5h''@;'; put 'put ''bGVydC1zdWNjZXNzIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQt''@;'; put 'put ''c3VjY2VzcyAuY2xvc2V7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlIGNkcy1pY29uLC5hbGVydC5hbGVydC1zdWNjZXNzIC5jbG9zZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1zdWNjZXNz''@;'; put 'put ''LWNsb3NlLWljb24tY29sb3IpfS5hbGVydC5hbGVydC1zdWNjZXNzIC5jbG9zZTpmb2N1cywuYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2U6aG92ZXIsLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1jbG9zZS1pY29uLWhv''@;'; put 'put ''dmVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2U6Zm9jdXMgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmZvY3VzIGNsci1pY29uLC5hbGVydC5hbGVydC1zdWNjZXNzIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xv''@;'; put 'put ''c2U6aG92ZXIgY2xyLWljb24sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0''@;'; put 'put ''LmFsZXJ0LXdhcm5pbmd7YmFja2dyb3VuZDp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xy''@;'; put 'put ''LWFsZXJ0LXdhcm5pbmctYm9yZGVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbXMg''@;'; put 'put ''LmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5n''@;'; put 'put ''IC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWljb24tY29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb25zIC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcik7Ym9y''@;'; put 'put ''ZGVyLWNvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1hY3RpdmUtY29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1hY3Rpb24t''@;'; put 'put ''Y29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuLC5hbGVydC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpO2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJu''@;'; put 'put ''aW5nLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG4gY2xyLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2RzLWljb24s''@;'; put 'put ''LmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUsLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmRy''@;'; put 'put ''b3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuOmFj''@;'; put 'put ''dGl2ZSBjbHItaWNvbiwuYWxlcnQuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWFjdGlv''@;'; put 'put ''bi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmNsb3Nle2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5nIC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtd2FybmluZyAuY2xvc2UgY2xyLWljb257ZmlsbDp2''@;'; put 'put ''YXIoLS1jbHItYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQuYWxlcnQtd2FybmluZyAuY2xvc2U6Zm9jdXMsLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmhvdmVyLC5hbGVydC5hbGVydC13YXJuaW5nIC5jbG9zZTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0''@;'; put 'put ''LXdhcm5pbmctY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmZvY3VzIGNkcy1pY29uLC5hbGVydC5hbGVydC13YXJuaW5nIC5jbG9zZTpmb2N1cyBjbHItaWNvbiwuYWxlcnQuYWxlcnQtd2FybmluZyAuY2xvc2U6aG92ZXIgY2RzLWljb24sLmFs''@;'; put 'put ''ZXJ0LmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmhvdmVyIGNsci1pY29uLC5hbGVydC5hbGVydC13YXJuaW5nIC5jbG9zZTphY3RpdmUgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWNsb3NlLWlj''@;'; put 'put ''b24taG92ZXItY29sb3IpfS5hbGVydC5hbGVydC1kYW5nZXJ7YmFja2dyb3VuZDp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0x''@;'; put 'put ''MDApIHNvbGlkIHZhcigtLWNsci1hbGVydC1kYW5nZXItYm9yZGVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2Upe2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdl''@;'; put 'put ''ciAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKX0uYWxlcnQu''@;'; put 'put ''YWxlcnQtZGFuZ2VyIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1j''@;'; put 'put ''b2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItYWN0aW9uLWFjdGl2ZS1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLC5hbGVydC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWFj''@;'; put 'put ''dGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRh''@;'; put 'put ''bmdlci1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0biBjbHItaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1pY29uLC5h''@;'; put 'put ''bGVydC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC5hbGVydC1kYW5nZXIgLmRyb3Bkb3du''@;'; put 'put ''LXRvZ2dsZS5idG46YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjbHIt''@;'; put 'put ''aWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcil9LmFs''@;'; put 'put ''ZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2V7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQuYWxlcnQtZGFuZ2VyIC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5jbG9zZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1k''@;'; put 'put ''YW5nZXItY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6Zm9jdXMsLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6aG92ZXIsLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1o''@;'; put 'put ''b3Zlci1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6Zm9jdXMgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6Zm9jdXMgY2xyLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6aG92ZXIgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6''@;'; put 'put ''aG92ZXIgY2xyLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6YWN0aXZlIGNkcy1pY29uLC5hbGVydC5hbGVydC1kYW5nZXIgLmNsb3NlOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LmFsZXJ0''@;'; put 'put ''LW5ldXRyYWx7YmFja2dyb3VuZDp2YXIoLS1jbHItYWxlcnQtbmV1dHJhbC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWFsZXJ0''@;'; put 'put ''LW5ldXRyYWwtYm9yZGVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbXMgLmFsZXJ0''@;'; put 'put ''LWl0ZW0gYTpub3QoLmJhZGdlKSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3IpfS5hbGVydCAuYWxlcnQtaXRlbT5zcGFuLC5h''@;'; put 'put ''bGVydCAuYWxlcnQtaXRlbSAuYWxlcnQtdGV4dCwuYWxlcnQgLmFsZXJ0LWl0ZW0gLmFsZXJ0LWFjdGlvbnN7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpIDB9LmFsZXJ0IC5hbGVydC1pdGVtIC5jbHItaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KTt3aWR0''@;'; put 'put ''aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpfS5hbGVydCAuYWxlcnQtaXRlbSAuY2xyLWljb24rLmFsZXJ0LXRleHR7cGFkZGluZy1sZWZ0OjB9LmFsZXJ0IC5hbGVydC1pdGVtIC5jbHItaWNvbisuYWxlcnQtdGV4dDpi''@;'; put 'put ''ZWZvcmV7Y29udGVudDpub25lfS5hbGVydCAuYWxlcnQtYWN0aW9uc3tmbGV4OjAgMCBhdXRvO3doaXRlLXNwYWNlOm5vd3JhcH0uYWxlcnQgLmFsZXJ0LWFjdGlvbnM+LmFsZXJ0LWFjdGlvbjpub3QoOmxhc3QtY2hpbGQpLC5hbGVydCAuYWxlcnQtYWN0aW9ucz4uZHJvcGRvd246bm90KDps''@;'; put 'put ''YXN0LWNoaWxkKXttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uYWxlcnQgLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duLWl0ZW17Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLXRleHQtY29sb3IpfS5hbGVydCAuYWxlcnQtYWN0aW9uLC5hbGVydCAuZHJvcGRvd24tdG9n''@;'; put 'put ''Z2xle3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LmFsZXJ0IC5hbGVydC1hY3Rpb24gYnV0dG9uLmRyb3Bkb3duLXRvZ2dsZTpub3QoLmJ0bil7YmFja2dyb3VuZDowIDA7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLXRleHQtY29sb3IpfS5hbGVydCAuZHJvcGRv''@;'; put 'put ''d24tdG9nZ2xlOm5vdCguYnRuKXtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MH0uYWxlcnQgLmNsb3Nle29yZGVyOjEwMDtmbGV4OjAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''OSk7bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgMH0uYWxlcnQgLmNsb3NlIGNkcy1pY29uLC5hbGVydCAuY2xvc2UgY2xyLWljb257aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttaW4taGVpZ2h0OnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9LmFsZXJ0IC5hbGVydC1zcGlubmVyLnNwaW5uZXItaW5saW5le2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLWhl''@;'; put 'put ''aWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbjowfS5hbGVydCAuYWxlcnQtc3Bpbm5lci5zcGlubmVyLWlubGluZTpiZWZvcmUsLmFsZXJ0IC5hbGVydC1zcGlubmVyLnNwaW5uZXItaW5saW5lOmFmdGVye2hl''@;'; put 'put ''aWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5hbGVydCAuY2xvc2V+LmFsZXJ0LWl0ZW0+LmFs''@;'; put 'put ''ZXJ0LWFjdGlvbnN7cGFkZGluZy1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5hbGVydCAuY2xvc2V+LmFsZXJ0LWl0ZW0+LmFsZXJ0LWFjdGlvbnM+LmFsZXJ0LWFjdGlvbjpsYXN0LWNoaWxke21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5hbGVydC5h''@;'; put 'put ''bGVydC1saWdodHdlaWdodHtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MH0uYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1ze3BhZGRpbmc6MH0uYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVte21pbi1oZWlnaHQ6MDttYXJnaW46MH0uYWxl''@;'; put 'put ''cnQuYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtPnNwYW4sLmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0IC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSAuYWxlcnQtYWN0aW9ucywuYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVt''@;'; put 'put ''IC5hbGVydC10ZXh0e2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9k''@;'; put 'put ''eS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyl9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0IC5jbG9zZXtkaXNwbGF5Om5vbmV9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0Om5vdCguYWxlcnQtc20pIC5h''@;'; put 'put ''bGVydC1pY29ue21hcmdpbjowfS5hbGVydC5hbGVydC1saWdodHdlaWdodC5hbGVydC1pbmZvIC5hbGVydC10ZXh0e2NvbG9yOnZhcigtLWNsci1saWdodHdlaWdodC1hbGVydC1pbmZvLWZvbnQtY29sb3IpfS5hbGVydC5hbGVydC1saWdodHdlaWdodC5hbGVydC1pbmZvIC5hbGVydC1pY29u''@;'; put 'put ''e2NvbG9yOnZhcigtLWNsci1saWdodHdlaWdodC1hbGVydC1pbmZvLWljb24tY29sb3IpfS5hbGVydC5hbGVydC1saWdodHdlaWdodC5hbGVydC13YXJuaW5nIC5hbGVydC10ZXh0e2NvbG9yOnZhcigtLWNsci1saWdodHdlaWdodC1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpfS5hbGVydC5h''@;'; put 'put ''bGVydC1saWdodHdlaWdodC5hbGVydC13YXJuaW5nIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1saWdodHdlaWdodC1hbGVydC13YXJuaW5nLWljb24tY29sb3IpfS5hbGVydC5hbGVydC1saWdodHdlaWdodC5hbGVydC1kYW5nZXIgLmFsZXJ0LXRleHR7Y29sb3I6dmFyKC0tY2xyLWxp''@;'; put 'put ''Z2h0d2VpZ2h0LWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHQuYWxlcnQtZGFuZ2VyIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1saWdodHdlaWdodC1hbGVydC1kYW5nZXItaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0LmFs''@;'; put 'put ''ZXJ0LXN1Y2Nlc3MgLmFsZXJ0LXRleHR7Y29sb3I6dmFyKC0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LXN1''@;'; put 'put ''Y2Nlc3MtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0LmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LXRleHR7Y29sb3I6dmFyKC0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0LmFsZXJ0LW5ldXRyYWwgLmFs''@;'; put 'put ''ZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LW5ldXRyYWwtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbHttYXJnaW46MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7b3ZlcmZsb3cteTphdXRvO2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZv''@;'; put 'put ''LWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tZm9udC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWJvcmRlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbCAu''@;'; put 'put ''YWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tZm9udC1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5h''@;'; put 'put ''bGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWljb24tY29sb3IpfS5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwgLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tYWN0aXZlLWNvbG9yKX0uYWxlcnQt''@;'; put 'put ''YXBwLWxldmVsIC5hbGVydC1hY3Rpb24sLmFsZXJ0LWFwcC1sZXZlbCAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuZHJvcGRvd24t''@;'; put 'put ''dG9nZ2xlLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtYWN0aW9uLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxl''@;'; put 'put ''dmVsIC5hbGVydC1hY3Rpb24uYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNv''@;'; put 'put ''bG9yKX0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rp''@;'; put 'put ''b24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5kcm9wZG93bi10b2dnbGUuYnRu''@;'; put 'put ''OmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsIC5jbG9zZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2UgY2RzLWlj''@;'; put 'put ''b24sLmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2U6Zm9jdXMsLmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2U6aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbCAuY2xv''@;'; put 'put ''c2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsIC5jbG9zZTpmb2N1cyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5jbG9zZTpmb2N1cyBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5jbG9z''@;'; put 'put ''ZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5jbG9zZTpob3ZlciBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5jbG9zZTphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZv''@;'; put 'put ''LWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bnttYXJnaW46MH0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm97YmFja2dyb3VuZDp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1hcHAtYWxl''@;'; put 'put ''cnQtaW5mby1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYm9yZGVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVt''@;'; put 'put ''IGE6bm90KC5iYWRnZSl7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFs''@;'; put 'put ''ZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSkgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tZm9udC1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1pY29uLWNv''@;'; put 'put ''bG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24t''@;'; put 'put ''YWN0aXZlLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFs''@;'; put 'put ''ZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9u''@;'; put 'put ''LWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuZHJvcGRvd24tdG9nZ2xlLmJ0''@;'; put 'put ''biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2''@;'; put 'put ''ZSwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2RzLWljb24s''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuZHJvcGRvd24t''@;'; put 'put ''dG9nZ2xlLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuY2xvc2U6Zm9j''@;'; put 'put ''dXMsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZTpob3ZlciwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1p''@;'; put 'put ''bmZvIC5jbG9zZTpmb2N1cyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlOmZvY3VzIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuY2xvc2U6aG92ZXIgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZTpob3Zl''@;'; put 'put ''ciBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLWNvbG9y''@;'; put 'put ''KX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlcntiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lk''@;'; put 'put ''dGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1ib3JkZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2Upe2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWZvbnQtY29s''@;'; put 'put ''b3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6''@;'; put 'put ''dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItZm9udC1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFj''@;'; put 'put ''dGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWFjdGl2ZS1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1k''@;'; put 'put ''YW5nZXIgLmFsZXJ0LWFjdGlvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG4sLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''LmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbiwuYWxlcnQt''@;'; put 'put ''YXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQtYXBw''@;'; put 'put ''LWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0''@;'; put 'put ''LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24t''@;'; put 'put ''dG9nZ2xlLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2V7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1jb2xvcil9LmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmNsb3NlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5jbG9zZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFu''@;'; put 'put ''Z2VyIC5jbG9zZTpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2U6aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmNsb3NlOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxl''@;'; put 'put ''cnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2U6Zm9jdXMgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmNsb3NlOmZvY3VzIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxl''@;'; put 'put ''dmVsLmFsZXJ0LWRhbmdlciAuY2xvc2U6aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1h''@;'; put 'put ''bGVydC1kYW5nZXItY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFse2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcik7Ym9y''@;'; put 'put ''ZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWJvcmRlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2Upe2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSkgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVt''@;'; put 'put ''cyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtYWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWFjdGlvbi1hY3RpdmUtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtYWN0aW9uLC5hbGVydC1hcHAtbGV2ZWwuYWxl''@;'; put 'put ''cnQtbmV1dHJhbCAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmRyb3Bkb3du''@;'; put 'put ''LXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1hY3Rpb24tY29sb3IpO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtYWN0aW9uLmJ0biBj''@;'; put 'put ''ZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWFjdGlvbi5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuZHJvcGRv''@;'; put 'put ''d24tdG9nZ2xlLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuZHJvcGRv''@;'; put 'put ''d24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwg''@;'; put 'put ''LmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjbHIt''@;'; put 'put ''aWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmNsb3Nle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0''@;'; put 'put ''LW5ldXRyYWwgLmNsb3NlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5jbG9zZTpmb2N1''@;'; put 'put ''cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmNsb3NlOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuY2xvc2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''LmFsZXJ0LW5ldXRyYWwgLmNsb3NlOmZvY3VzIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuY2xvc2U6Zm9jdXMgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0''@;'; put 'put ''LW5ldXRyYWwgLmNsb3NlOmhvdmVyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuY2xvc2U6YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1u''@;'; put 'put ''ZXV0cmFsLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZ3tiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpO2JvcmRlcjp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1ib3JkZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbXMgLmFs''@;'; put 'put ''ZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1mb250LWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWljb24tY29sb3Ip''@;'; put 'put ''fS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWFj''@;'; put 'put ''dGlvbi1hY3RpdmUtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpfS5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpO2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1hcHAtYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBw''@;'; put 'put ''LWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1s''@;'; put 'put ''ZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xl''@;'; put 'put ''LmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5p''@;'; put 'put ''bmcgLmNsb3Nle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmNsb3NlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIo''@;'; put 'put ''LS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5jbG9zZTpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xv''@;'; put 'put ''c2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmZvY3VzIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2U6Zm9jdXMg''@;'; put 'put ''Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmhvdmVyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2U6YWN0aXZlIGNkcy1p''@;'; put 'put ''Y29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2Vzc3tiYWNrZ3JvdW5kOnZhcigtLWNs''@;'; put 'put ''ci1hcHAtYWxlcnQtc3VjY2Vzcy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1ib3JkZXIt''@;'; put 'put ''Y29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVt''@;'; put 'put ''cyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1mb250LWNvbG9yKX0uYWxl''@;'; put 'put ''cnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWFjdGlvbi1hY3RpdmUtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLC5hbGVydC1hcHAtbGV2ZWwu''@;'; put 'put ''YWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bk''@;'; put 'put ''b3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1hY3Rpb24tY29sb3IpO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0''@;'; put 'put ''biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuZHJv''@;'; put 'put ''cGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuZHJv''@;'; put 'put ''cGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nl''@;'; put 'put ''c3MgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBj''@;'; put 'put ''bHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3Nle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFs''@;'; put 'put ''ZXJ0LXN1Y2Nlc3MgLmNsb3NlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5jbG9zZTpm''@;'; put 'put ''b2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxl''@;'; put 'put ''dmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmZvY3VzIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2U6Zm9jdXMgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFs''@;'; put 'put ''ZXJ0LXN1Y2Nlc3MgLmNsb3NlOmhvdmVyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2U6YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVy''@;'; put 'put ''dC1zdWNjZXNzLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW1ze2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCl9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbXtqdXN0aWZ5LWNvbnRlbnQ6Y2Vu''@;'; put 'put ''dGVyO2FsaWduLWl0ZW1zOmNlbnRlcjttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYWxlcnQtYWN0aW9uc3twYWRkaW5nOjB9LmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2V7bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtNCkgMH0uYWxlcnQtc20gLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVte21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uYWxlcnQtc20gLmFsZXJ0LWljb24td3JhcHBlcntkaXNwbGF5OmZsZXg7ZmxleC1iYXNpczp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2hlaWdo''@;'; put 'put ''dDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5hbGVydC1zbSAuYWxlcnQtaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uYWxlcnQtc20gLmFsZXJ0LWl0ZW0+c3BhbiwuYWxlcnQtc20gLmFsZXJ0LWl0ZW0gLmFsZXJ0LXRleHQsLmFsZXJ0LXNtIC5hbGVydC1pdGVtIC5hbGVydC1hY3Rpb25ze2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRh''@;'; put 'put ''cnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtwYWRkaW5nOjB9LmFsZXJ0LXNtIC5jbG9zZXttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSAwfS5hbGVydC1zbSAuYWxlcnQtc3Bpbm5lci5zcGlubmVyLWlubGluZXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uYWxlcnQtc20gLmFsZXJ0LXNwaW5uZXIuc3Bpbm5lci1pbmxpbmU6YmVmb3JlLC5h''@;'; put 'put ''bGVydC1zbSAuYWxlcnQtc3Bpbm5lci5zcGlubmVyLWlubGluZTphZnRlcntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS03KX0uYWxlcnQtc20uYWxlcnQtbGlnaHR3ZWlnaHR7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjB9LmFsZXJ0LXNtLmFsZXJ0LWxpZ2h0d2VpZ2h0IC5hbGVydC1pdGVtc3tnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uYWxlcnQtc20uYWxlcnQtbGlnaHR3ZWln''@;'; put 'put ''aHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVte3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSAwfS5hbGVydC1zbS5hbGVydC1saWdodHdlaWdodCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0+c3BhbiwuYWxlcnQtc20uYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5h''@;'; put 'put ''bGVydC1pdGVtIC5hbGVydC1hY3Rpb25zLC5hbGVydC1zbS5hbGVydC1saWdodHdlaWdodCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gLmFsZXJ0LXRleHR7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5n''@;'; put 'put ''KX0uYWxlcnQtc20uYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIC5hbGVydC1pY29uLXdyYXBwZXJ7ZmxleC1iYXNpczp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5hbGVydC1zbS5hbGVydC1saWdo''@;'; put 'put ''dHdlaWdodCAuY2xvc2V7ZGlzcGxheTpub25lfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzY4cHgpey5hbGVydCAuYWxlcnQtaXRlbXtmbGV4LXdyYXA6d3JhcH0uYWxlcnQgLmFsZXJ0LWl0ZW0gLmFsZXJ0LXRleHR7bWF4LXdpZHRoOjkwJTt3aWR0aDo5MCU7ZmxleC1iYXNpczo5''@;'; put 'put ''MCV9LmFsZXJ0IC5hbGVydC1pdGVtIC5hbGVydC1hY3Rpb25ze2ZsZXg6MSAwIDEwMCV9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtYWN0aW9uc3ttYXJnaW4tbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyKX19LmFsZXJ0LWhpZGRlbntkaXNwbGF5Om5vbmV9LmFsZXJ0cyAuYWxlcnR7''@;'; put 'put ''bWFyZ2luLXRvcDowfS5hbGVydHMgLmFsZXJ0cy13cmFwcGVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9LmFsZXJ0cyAuYWxlcnRzLXdyYXBwZXIgY2xyLWFsZXJ0e2ZsZXg6MSAxIDEwMCV9LmFsZXJ0cy5hbGVydC1pbmZve2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVy''@;'; put 'put ''dC1pbmZvLXBhZ2VyLWJnLWNvbG9yKX0uYWxlcnRzLmFsZXJ0LXdhcm5pbmd7YmFja2dyb3VuZDp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctcGFnZXItYmctY29sb3IpfS5hbGVydHMuYWxlcnQtZGFuZ2Vye2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItcGFnZXIt''@;'; put 'put ''YmctY29sb3IpfS5hbGVydHMuYWxlcnQtc3VjY2Vzc3tiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1wYWdlci1iZy1jb2xvcil9LmFsZXJ0cy5hbGVydC1uZXV0cmFse2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLXBhZ2VyLWJnLWNvbG9yKX0u''@;'; put 'put ''YWxlcnRzLXBhZ2Vye2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtcGFnZXItdGV4dC1jb2xvcik7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTtmbGV4OjEgMCB2YXIoLS1jbHItYXBwLWFsZXJ0LXBhZ2VyLXdpZHRoKX0uYWxlcnQtaW5mbyAuYWxlcnRzLXBhZ2Vye2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1wYWdlci1mb250LWNvbG9yKX0uYWxlcnQtd2FybmluZyAuYWxlcnRzLXBhZ2Vye2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1wYWdlci1mb250LWNvbG9yKX0uYWxlcnQtZGFuZ2VyIC5hbGVydHMtcGFnZXJ7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWFwcC1hbGVydC1kYW5nZXItcGFnZXItZm9udC1jb2xvcil9LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0cy1wYWdlcntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtcGFnZXItZm9udC1jb2xvcil9LmFsZXJ0LW5ldXRyYWwgLmFsZXJ0cy1wYWdlcntjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYXBwLWFsZXJ0LW5ldXRyYWwtcGFnZXItZm9udC1jb2xvcil9LmFsZXJ0cy1wYWdlci1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO2Jv''@;'; put 'put ''cmRlcjowO2JvcmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZDowIDA7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1wYWdlci10ZXh0LWNvbG9yKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6dmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLWhlaWdodCl9YnV0dG9uLmFsZXJ0cy1wYWdlci1idXR0b257Y3Vyc29yOnBvaW50ZXJ9LmFsZXJ0cy1wYWdlci1idXR0b24gY2RzLWljb24sLmFsZXJ0cy1wYWdlci1idXR0b24gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1w''@;'; put 'put ''YWdlci10ZXh0LWNvbG9yKX0uYWxlcnQtaW5mbyAuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjZHMtaWNvbiwuYWxlcnQtaW5mbyAuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tcGFnZXItZm9udC1jb2xvcil9LmFsZXJ0LXdhcm5pbmcg''@;'; put 'put ''LmFsZXJ0cy1wYWdlci1idXR0b24gY2RzLWljb24sLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0cy1wYWdlci1idXR0b24gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLXBhZ2VyLWZvbnQtY29sb3IpfS5hbGVydC1kYW5nZXIgLmFsZXJ0cy1wYWdlci1idXR0b24gY2Rz''@;'; put 'put ''LWljb24sLmFsZXJ0LWRhbmdlciAuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1wYWdlci1mb250LWNvbG9yKX0uYWxlcnQtc3VjY2VzcyAuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjZHMtaWNvbiwuYWxlcnQtc3VjY2VzcyAuYWxl''@;'; put 'put ''cnRzLXBhZ2VyLWJ1dHRvbiBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtcGFnZXItZm9udC1jb2xvcil9LmFsZXJ0LW5ldXRyYWwgLmFsZXJ0cy1wYWdlci1idXR0b24gY2RzLWljb24sLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0cy1wYWdlci1idXR0b24gY2xyLWlj''@;'; put 'put ''b257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLXBhZ2VyLWZvbnQtY29sb3IpfS5hbGVydHMtcGFnZXItY29udHJvbHtkaXNwbGF5OmZsZXg7d2hpdGUtc3BhY2U6bm93cmFwO2hlaWdodDoxMDAlO2FsaWduLWl0ZW1zOmNlbnRlcjt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5n''@;'; put 'put ''OjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uYWxlcnRzLXBhZ2VyLWNvbnRyb2w+KntkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleDoxIDEgYXV0b306cm9vdCBbY2RzLXRoZW1lXXstLWNsci1jYXJkLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1v''@;'; put 'put ''YmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWNhcmQtZGl2aWRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItY2FyZC10aXRsZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWNhcmQtdGl0''@;'; put 'put ''bGUtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQpOy0tY2xyLWNhcmQtYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci1jYXJkLWJvcmRlci13aWR0aDp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApOy0tY2xyLWNhcmQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci1jYXJkLWJveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMzAwKTstLWNsci1jYXJkLWNsaWNr''@;'; put 'put ''YWJsZS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItY2FyZC1jbGlja2FibGUtYm94LXNoYWRvdzowIDAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpIHZhcigtLWNsci1jYXJkLWNsaWNrYWJsZS1i''@;'; put 'put ''b3JkZXItY29sb3IpOy0tY2xyLWNhcmQtaGVhZGVyLXRpdGxlLWNvbG9yOnZhcigtLWNsci1jYXJkLXRpdGxlLWNvbG9yKTstLWNsci1jYXJkLWNvbnRlbnQtdGl0bGUtY29sb3I6dmFyKC0tY2xyLWNhcmQtdGl0bGUtY29sb3IpOy0tY2xyLWNhcmQtdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtdHlwb2dyYXBoeS1jb2xvci00MDApfS5jYXJke2JveC1zaGFkb3c6dmFyKC0tY2xyLWNhcmQtYm94LXNoYWRvdyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItY2FyZC1ib3JkZXItcmFkaXVzKTtib3JkZXI6dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHIt''@;'; put 'put ''Y2FyZC1ib3JkZXItY29sb3IpfS5jYXJkLmNsaWNrYWJsZTpob3Zlcntib3gtc2hhZG93OnZhcigtLWNsci1jYXJkLWNsaWNrYWJsZS1ib3gtc2hhZG93KTtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItY2FyZC1jbGlja2Fi''@;'; put 'put ''bGUtYm9yZGVyLWNvbG9yKTtjdXJzb3I6cG9pbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt0cmFuc2l0aW9uOmJvcmRlciAuMnMgZWFzZSxib3gtc2hhZG93IC4ycyBlYXNlLHRyYW5zZm9ybSAuMnMgZWFzZX0uY2FyZC1ibG9jayAuY2FyZC1kaXZpZGVyLC5jYXJkIC5jYXJkLXRpdGxlLC5j''@;'; put 'put ''YXJkIC5jYXJkLXRleHQsLmNhcmQgLmNhcmQtbWVkaWEtYmxvY2ssLmNhcmQgLmxpc3QsLmNhcmQgLmxpc3QtdW5zdHlsZWR7bWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2FyZC1ibG9jayAuY2FyZC1kaXZpZGVyOmxhc3QtY2hpbGQsLmNh''@;'; put 'put ''cmQgLmNhcmQtdGl0bGU6bGFzdC1jaGlsZCwuY2FyZCAuY2FyZC10ZXh0Omxhc3QtY2hpbGQsLmNhcmQgLmNhcmQtbWVkaWEtYmxvY2s6bGFzdC1jaGlsZCwuY2FyZCAubGlzdDpsYXN0LWNoaWxkLC5jYXJkIC5saXN0LXVuc3R5bGVkOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5jYXJk''@;'; put 'put ''LmNhcmQtaW1nPmltZywuY2FyZD4uY2FyZC1pbWc6Zmlyc3QtY2hpbGQ6bGFzdC1jaGlsZD5pbWcsLmNhcmQtaW1nPmltZ3tkaXNwbGF5OmJsb2NrO2hlaWdodDphdXRvO3dpZHRoOjEwMCU7bWF4LXdpZHRoOjEwMCV9LmNhcmR7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci1jYXJkLWJnLWNvbG9yKTt3aWR0aDoxMDAlO21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uY2FyZCAuYWxlcnR7bWFyZ2luOjAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDB9LmNhcmQgLmJ0bi1saW5re21pbi13aWR0aDow''@;'; put 'put ''O3BhZGRpbmc6MH0uY2FyZC5jbGlja2FibGV7Y29sb3I6aW5oZXJpdH0uY2FyZD4ubGlzdCwuY2FyZD4ubGlzdC11bnN0eWxlZHtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KX0uY2FyZCAubGlzdC1ncm91cHtwYWRkaW5nLWxlZnQ6''@;'; put 'put ''MDttYXJnaW4tYm90dG9tOjA7bGlzdC1zdHlsZTpub25lfS5jYXJkIC5saXN0LWdyb3VwLWl0ZW17Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0''@;'; put 'put ''KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7YmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjp2YXIoLS1jbHItY2FyZC1iZy1jb2xvcik7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItY2FyZC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci1jYXJkLWJvcmRlci1jb2xvcil9QHN1cHBvcnRzICgtbXMtaW1lLWFsaWduOmF1dG8pey5jYXJkIC5kcm9wZG93bj4uZHJvcGRv''@;'; put 'put ''d24tdG9nZ2xlOmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi10b3A6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKX19LmNhcmQtYmxvY2t7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jYXJkLWZvb3RlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJl''@;'; put 'put ''Y3Rpb246cm93O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfWgzLmNhcmQtaGVhZGVyLC5jYXJkLWhlYWRlcntmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHkt''@;'; put 'put ''c2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtjb2xvcjp2YXIoLS1jbHItY2FyZC1oZWFkZXItdGl0bGUtY29sb3IpfWg0LmNhcmQtdGl0bGUsLmNhcmQtdGl0bGV7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0''@;'; put 'put ''ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItY2FyZC1jb250ZW50LXRpdGxlLWNvbG9yKX1oMS5jYXJkLWhlYWRlcixoMS5jYXJkLXRpdGxlLGgyLmNhcmQtaGVhZGVyLGgyLmNhcmQtdGl0bGUs''@;'; put 'put ''aDMuY2FyZC1oZWFkZXIsaDMuY2FyZC10aXRsZSxoNC5jYXJkLWhlYWRlcixoNC5jYXJkLXRpdGxlLGg1LmNhcmQtaGVhZGVyLGg1LmNhcmQtdGl0bGUsaDYuY2FyZC1oZWFkZXIsaDYuY2FyZC10aXRsZXttYXJnaW4tdG9wOjB9LmNhcmQtdGV4dHtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpO2NvbG9yOnZhcigtLWNsci1jYXJkLXRleHQtY29sb3IpfS5jYXJkLWltZzpmaXJzdC1jaGlsZD5pbWd7Ym9yZGVyLXJhZGl1czowO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXJhZGl1''@;'; put 'put ''cyk7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXJhZGl1cyl9LmNhcmQtaW1nOmxhc3QtY2hpbGQ+aW1ne2JvcmRlci1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWNsci1jYXJkLWJvcmRlci1yYWRpdXMpO2JvcmRlci1ib3R0''@;'; put 'put ''b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci1jYXJkLWJvcmRlci1yYWRpdXMpfS5jYXJkLmNhcmQtaW1nPmltZywuY2FyZD4uY2FyZC1pbWc6Zmlyc3QtY2hpbGQ6bGFzdC1jaGlsZD5pbWd7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItY2FyZC1ib3JkZXItcmFkaXVzKX0uY2FyZC1ibG9jayAu''@;'; put 'put ''YnRuLC5jYXJkLWJsb2NrIC5idG4uYnRuLWxpbmssLmNhcmQtYmxvY2sgLmNhcmQtbGluaywuY2FyZC1mb290ZXIgLmJ0biwuY2FyZC1mb290ZXIgLmJ0bi5idG4tbGluaywuY2FyZC1mb290ZXIgLmNhcmQtbGluaywuY2FyZC1ibG9jayAuYnRuLWdyb3VwIC5idG4sLmNhcmQtZm9vdGVyIC5i''@;'; put 'put ''dG4tZ3JvdXAgLmJ0bnttYXJnaW46MH0uY2FyZC1oZWFkZXIsLmNhcmQtYmxvY2t7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItY2FyZC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci1jYXJkLWJvcmRlci1jb2xvcil9LmNhcmQtaGVhZGVyOmxhc3QtY2hpbGQsLmNhcmQtYmxvY2s6bGFz''@;'; put 'put ''dC1jaGlsZHtib3JkZXItYm90dG9tOm5vbmV9LmNhcmQtZGl2aWRlcntkaXNwbGF5OmJsb2NrO2JvcmRlci1ib3R0b206dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItY2FyZC1kaXZpZGVyLWNvbG9yKX0uY2FyZC1ibG9jayAuY2FyZC1kaXZpZGVye21hcmdp''@;'; put 'put ''bi1sZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSk7bWFyZ2luLXJpZ2h0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSk7d2lkdGg6YXV0b30uY2FyZC1oZWFkZXIrLmNhcmQtZGl2aWRlciwuY2FyZC1ibG9jaysuY2FyZC1kaXZpZGVye2Rpc3BsYXk6bm9u''@;'; put 'put ''ZX0uY2FyZC1tZWRpYS1ibG9ja3tkaXNwbGF5OmZsZXh9LmNhcmQtbWVkaWEtYmxvY2sgLmNhcmQtbWVkaWEtaW1hZ2V7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxleDowIDAgYXV0bztoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS0xMyk7bWF4LWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzKTttYXgtd2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyl9LmNhcmQtbWVkaWEtYmxvY2sgLmNhcmQtbWVkaWEtZGVzY3JpcHRpb257Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHkt''@;'; put 'put ''Zm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1ib2R5LWxldHRlci1zcGFjaW5nKTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2NvbG9yOnZhcigtLWNsci1jYXJkLXRleHQtY29sb3IpO21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNhcmQtbWVkaWEtYmxvY2sgLmNhcmQtbWVkaWEtdGl0bGUs''@;'; put 'put ''LmNhcmQtbWVkaWEtYmxvY2sgc3BhbiwuY2FyZC1tZWRpYS1ibG9jayAuY2FyZC1tZWRpYS10ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5jYXJkLW1lZGlhLWJsb2NrLndyYXB7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jYXJkLW1lZGlhLWJsb2NrLndyYXAgLmNhcmQtbWVkaWEtZGVzY3Jp''@;'; put 'put ''cHRpb257bWFyZ2luLWxlZnQ6MDttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNhcmQtYmxvY2s+Lmxpc3QsLmNhcmQtYmxvY2s+Lmxpc3QtdW5zdHlsZWR7cGFkZGluZzowfUBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6NTc2cHgpey5jYXJkLWNvbHVtbnN7Y29s''@;'; put 'put ''dW1uLWNvdW50OjM7Y29sdW1uLWdhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2JyZWFrLWluc2lkZTphdm9pZDtjb2x1bW4tZmlsbDpiYWxhbmNlOy13ZWJraXQtcGVyc3BlY3RpdmU6MX0uY2FyZC1jb2x1bW5zLmNhcmQtY29sdW1ucy0ye2NvbHVtbi1jb3VudDoyfS5jYXJkLWNvbHVt''@;'; put 'put ''bnMuY2FyZC1jb2x1bW5zLTR7Y29sdW1uLWNvdW50OjR9LmNhcmQtY29sdW1ucyAuY2FyZHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KX0uY2FyZC1jb2x1bW5zIC5jbGlja2FibGV7YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW59fUBzdXBw''@;'; put 'put ''b3J0cyAoLW1zLWltZS1hbGlnbjphdXRvKXsuY2FyZCAuY2hlY2tib3guYnRuIGxhYmVsLC5jYXJkIC5jaGVja2JveC1pbmxpbmUuYnRuIGxhYmVsLC5jYXJkIC5yYWRpby5idG4gbGFiZWwsLmNhcmQgLnJhZGlvLWlubGluZS5idG4gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2t9fTpyb290''@;'; put 'put ''IFtjZHMtdGhlbWVdey0tY2xyLW5hdi1ib3gtc2hhZG93LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci1uYXYtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmUpOy0tY2xyLW5h''@;'; put 'put ''di1zZWxlY3RlZC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbmF2LWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcik7LS1jbHItbmF2LXNlbGVjdGVkLWhvdmVyLWJhY2tncm91''@;'; put 'put ''bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci1uYXYtc2VsZWN0ZWQtYWN0aXZlLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVj''@;'; put 'put ''dGVkLWFjdGl2ZSk7LS1jbHItbmF2LWxpbmstY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItbmF2LWxpbmstYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKX1AbWVkaWEgc2NyZWVu''@;'; put 'put ''e3NlY3Rpb25bYXJpYS1oaWRkZW49dHJ1ZV17ZGlzcGxheTpub25lfX1bZGF0YS1oaWRkZW49dHJ1ZV17ZGlzcGxheTpub25lfWJ1dHRvbi5uYXYtbGlua3tib3JkZXItcmFkaXVzOjA7dGV4dC10cmFuc2Zvcm06Y2FwaXRhbGl6ZTttaW4td2lkdGg6MH0udGFicy1vdmVyZmxvd3twb3NpdGlv''@;'; put 'put ''bjpyZWxhdGl2ZX0udGFicy1vdmVyZmxvdyAuZHJvcGRvd24tbWVudXtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMCk7Ym94LXNoYWRvdzp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LXNoYWRvdy0xMDApO292ZXJmbG93OmhpZGRlbn0udGFicy1vdmVyZmxvdyAuYnRue2xpbmUtaGVp''@;'; put 'put ''Z2h0OmNhbGMoMjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtNCk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7Ym9yZGVyLXJhZGl1''@;'; put 'put ''czp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTApfS50YWItY29udGVudHtkaXNwbGF5OmlubGluZX1fOi1tcy1mdWxsc2NyZWVuIC50YWItY29udGVudCw6cm9vdCAudGFiLWNvbnRlbnR7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTAwJX0udGFicy12ZXJ0aWNhbHtkaXNwbGF5OmZsZXh9''@;'; put 'put ''LnRhYnMtdmVydGljYWw+Lm5hdntoZWlnaHQ6YXV0bztib3gtc2hhZG93Om5vbmU7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOnN0cmV0Y2g7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7b3ZlcmZsb3c6YXV0bztmbGV4LXNocmluazowO3BhZGRpbmc6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTt3aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIpO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS50YWJzLXZlcnRpY2FsPi5uYXYgLm5hdi1s''@;'; put 'put ''aW5re3RleHQtYWxpZ246bGVmdDtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtib3JkZXI6MDtmbGV4LXNocmluazowO21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDowO3dpZHRoOjEwMCV9LnRhYnMtdmVydGljYWw+Lm5hdiAubmF2LWxpbmsuYnRue21hcmdpbi1ib3R0b206''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0udGFicy12ZXJ0aWNhbD4ubmF2IC5uYXYtbGluay5hY3RpdmU6YmVmb3JlLC50YWJzLXZlcnRpY2FsPi5uYXYgLm5hdi1saW5rOmhvdmVyOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDt3''@;'; put 'put ''aWR0aDoxMDAlO2JvcmRlcjowO2JvcmRlci1sZWZ0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTMwMCkgc29saWQgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7dHJhbnNpdGlvbjpib3JkZXItbGVmdCAuMnMgZWFz''@;'; put 'put ''ZS1pbn0udGFicy1hY3Rpb25ze2Rpc3BsYXk6aW5saW5lLWZsZXg7d2lkdGg6MTAwJX0udGFicy1hY3Rpb25zW3Bvc2l0aW9ufj1sZWZ0XXtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9LnRhYnMtYWN0aW9uc1twb3NpdGlvbn49cmlnaHRde2p1c3RpZnktY29udGVudDplbmR9OnJvb3QgW2Nkcy10''@;'; put 'put ''aGVtZV17LS1jbHItZHJvcGRvd24tYWN0aXZlLXRleHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLWRyb3Bkb3duLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWRy''@;'; put 'put ''b3Bkb3duLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItZHJvcGRvd24tZGl2aWRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvci10aW50KTstLWNsci1kcm9wZG93bi1kaXZpZGVyLWJvcmRlci13aWR0aDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpOy0tY2xyLWRyb3Bkb3duLWNoaWxkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItZHJvcGRvd24tYmctaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNr''@;'; put 'put ''Z3JvdW5kLWhvdmVyKTstLWNsci1kcm9wZG93bi1zZWxlY3Rpb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkKTstLWNsci1kcm9wZG93bi10ZXh0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29s''@;'; put 'put ''b3IpOy0tY2xyLWRyb3Bkb3duLWhlYWRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWRyb3Bkb3duLWhlYWRlci1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1tZWRpdW0pOy0tY2xyLWRyb3Bkb3du''@;'; put 'put ''LWl0ZW0tZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTstLWNsci1kcm9wZG93bi1pdGVtLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWRyb3Bkb3duLWl0ZW0tYmctY29sb3I6''@;'; put 'put ''dHJhbnNwYXJlbnQ7LS1jbHItZHJvcGRvd24taXRlbS1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci1kcm9wZG93bi1pdGVtLWhvdmVyLWJnLWNvbG9yOnZhciggLS1jbHItZHJvcGRvd24tYmctaG92ZXItY29sb3IgKTst''@;'; put 'put ''LWNsci1kcm9wZG93bi1pdGVtLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItZHJvcGRvd24taXRlbS1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWFj''@;'; put 'put ''dGl2ZSk7LS1jbHItZHJvcGRvd24taXRlbS1zZWxlY3RlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLXNlbGVjdGVkKTstLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWJnLWNvbG9yOnZhciggLS1jbHItZHJvcGRvd24tc2VsZWN0aW9uLWNvbG9y''@;'; put 'put ''ICk7LS1jbHItZHJvcGRvd24taXRlbS1zZWxlY3RlZC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQtaG92ZXIpOy0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1hY3RpdmUpOy0tY2xyLWRyb3Bkb3duLWl0ZW0tZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCk7LS1jbHItZHJvcGRvd24taXRlbS1kaXNhYmxl''@;'; put 'put ''ZC1iZy1jb2xvcjp0cmFuc3BhcmVudH0uZHJvcGRvd24tbWVudSAuYnRuLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LC5kcm9wZG93bi1tZW51IC5idG4taW5mbywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnksLmRy''@;'; put 'put ''b3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzLC5kcm9wZG93bi1tZW51IC5idG4tZGFu''@;'; put 'put ''Z2VyLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeSwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLC5kcm9wZG93bi1tZW51IC5idG4tbGluaywuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbSwuZHJvcGRvd24tbWVudSAuZHJvcGRv''@;'; put 'put ''d24taGVhZGVye292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3RleHQtYWxpZ246bGVmdDtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9LmRyb3Bkb3due3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xle2Rp''@;'; put 'put ''c3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbjowO3doaXRlLXNwYWNlOm5vd3JhcDtjdXJzb3I6cG9pbnRlcn0uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZSBjbHItaWNvbltzaGFwZV49Y2FyZXRdLC5kcm9wZG93biAuZHJvcGRv''@;'; put 'put ''d24tdG9nZ2xlIGNsci1pY29uW3NoYXBlXj1hbmdsZV17Y29sb3I6aW5oZXJpdDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS03KX0uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZSBjZHMtaWNvbltzaGFwZV49Y2FyZXRdLC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlIGNkcy1pY29uW3NoYXBlXj1hbmdsZV17bWFyZ2luLXRvcDp1bnNldDtjb2xvcjppbmhlcml0O2hlaWdodDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUuYnRue3RleHQtb3ZlcmZsb3c6dW5zZXR9LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUuYnRuIGNsci1pY29ue3RyYW5zZm9ybTpub25lfS5kcm9wZG93''@;'; put 'put ''biAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbltzaGFwZV49Y2FyZXRdLC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbltzaGFwZV49Y2FyZXRdLC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbltzaGFwZV49YW5nbGVdLC5kcm9wZG93biAu''@;'; put 'put ''ZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbltzaGFwZV49YW5nbGVde3JpZ2h0OnZhcigtLWNsci1idG4taG9yaXpvbnRhbC1wYWRkaW5nKX0uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZTpub3QoLmJ0bil7cGFkZGluZzowO2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1hY3RpdmUtdGV4''@;'; put 'put ''dC1jb2xvcil9LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGU6bm90KC5idG4pIGNkcy1pY29uW3NoYXBlXj1jYXJldF0sLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGU6bm90KC5idG4pIGNsci1pY29uW3NoYXBlXj1jYXJldF0sLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGU6bm90KC5idG4p''@;'; put 'put ''IGNkcy1pY29uW3NoYXBlXj1hbmdsZV0sLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGU6bm90KC5idG4pIGNsci1pY29uW3NoYXBlXj1hbmdsZV17cmlnaHQ6MH0uZHJvcGRvd24gYnV0dG9uLmRyb3Bkb3duLXRvZ2dsZTpub3QoLmJ0bil7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjA7Y3Vyc29y''@;'; put 'put ''OnBvaW50ZXI7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWFjdGl2ZS10ZXh0LWNvbG9yKX0uZHJvcGRvd24tbWVudT4qe2Rpc3BsYXk6YmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwfS5kcm9wZG93bi1tZW51e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cG9zaXRpb246YWJz''@;'; put 'put ''b2x1dGU7dG9wOjEwMCU7bGVmdDowO21pbi13aWR0aDpjYWxjKDEyMCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWF4LXdpZHRoOmNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1iZy1jb2xv''@;'; put 'put ''cik7Ym9yZGVyLXdpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24tYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVy''@;'; put 'put ''LXJhZGl1cy0xMDApO2JveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMjAwKTttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMik7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpIDA7dmlzaWJpbGl0eTpoaWRkZW47ei1pbmRleDoxMDUwfS5k''@;'; put 'put ''cm9wZG93bi1tZW51IC5kcm9wZG93bi1oZWFkZXJ7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWhlYWRlci1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1kcm9wZG93bi1oZWFkZXIt''@;'; put 'put ''Zm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttYXJnaW46MH0u''@;'; put 'put ''ZHJvcGRvd24tbWVudSAuZHJvcGRvd24taGVhZGVyfi5kcm9wZG93bi1pdGVtLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1oZWFkZXJ+LmRyb3Bkb3duPi5kcm9wZG93bi1pdGVte3BhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKX0uZHJvcGRvd24tbWVudSAuYnRuLC5k''@;'; put 'put ''cm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LC5kcm9wZG93bi1tZW51IC5idG4taW5mbywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnksLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSwuZHJvcGRvd24t''@;'; put 'put ''bWVudSAuYnRuLW91dGxpbmUtd2FybmluZywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeSwuZHJvcGRvd24tbWVu''@;'; put 'put ''dSAuYnRuLXdhcm5pbmcsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLC5kcm9wZG93bi1tZW51IC5idG4tbGluaywuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbXtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWln''@;'; put 'put ''aHQ6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItZHJv''@;'; put 'put ''cGRvd24taXRlbS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1iZy1jb2xvcik7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6YXV0''@;'; put 'put ''bzttYXJnaW46MDt3aWR0aDoxMDAlO3RleHQtdHJhbnNmb3JtOm5vbmV9LmRyb3Bkb3duLW1lbnUgLmJ0bi5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnkuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4taW5mby5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5l''@;'; put 'put ''LmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmcuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGlu''@;'; put 'put ''ZS1kYW5nZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5LmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcuYWN0aXZlLC5k''@;'; put 'put ''cm9wZG93bi1tZW51IC5idG4tc3VjY2Vzcy5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbS5hY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtYmctY29sb3IpfS5kcm9wZG93bi1tZW51IC5idG46aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnk6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZTpo''@;'; put 'put ''b3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeTpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5n''@;'; put 'put ''ZXI6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXI6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5OmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZzpob3ZlciwuZHJvcGRvd24tbWVu''@;'; put 'put ''dSAuYnRuLXN1Y2Nlc3M6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmhvdmVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmhvdmVye2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWhvdmVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93''@;'; put 'put ''bi1pdGVtLWhvdmVyLWJnLWNvbG9yKTt0ZXh0LWRlY29yYXRpb246bm9uZX0uZHJvcGRvd24tbWVudSAuYnRuOmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTpob3Zlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmhvdmVyLmFjdGl2ZSwuZHJvcGRv''@;'; put 'put ''d24tbWVudSAuYnRuLW91dGxpbmU6aG92ZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5OmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2Fy''@;'; put 'put ''bmluZzpob3Zlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpob3Zlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6aG92ZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyOmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24t''@;'; put 'put ''bWVudSAuYnRuLXByaW1hcnk6aG92ZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZzpob3Zlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzOmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWxpbms6aG92ZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51''@;'; put 'put ''IC5kcm9wZG93bi1pdGVtOmhvdmVyLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWhvdmVyLWJnLWNvbG9yKX0uZHJvcGRvd24tbWVudSAuYnRuOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTphY3RpdmUsLmRyb3Bk''@;'; put 'put ''b3duLW1lbnUgLmJ0bi1pbmZvOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5OmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmFjdGl2ZSwuZHJvcGRvd24tbWVudSAu''@;'; put 'put ''YnRuLW91dGxpbmUtd2FybmluZzphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRu''@;'; put 'put ''LXByaW1hcnk6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZzphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWxpbms6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmFjdGl2ZXtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItZHJvcGRvd24taXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tYWN0aXZlLWJnLWNvbG9yKX0uZHJvcGRvd24tbWVudSAuYnRuOmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnk6YWN0aXZlLmFj''@;'; put 'put ''dGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWluZm86YWN0aXZlLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6YWN0aXZlLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeTphY3RpdmUuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1z''@;'; put 'put ''ZWNvbmRhcnk6YWN0aXZlLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZzphY3RpdmUuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXI6YWN0aXZlLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2VzczphY3RpdmUu''@;'; put 'put ''YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyOmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5OmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nOmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzOmFjdGl2''@;'; put 'put ''ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06YWN0aXZlLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWFjdGl2ZS1iZy1jb2xvcil9LmRyb3Bk''@;'; put 'put ''b3duLW1lbnUgLmJ0bjpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLWluZm86Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5OmZvY3VzLC5k''@;'; put 'put ''cm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnk6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmc6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzczpmb2N1''@;'; put 'put ''cywuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlcjpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnk6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzczpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLWxpbms6Zm9j''@;'; put 'put ''dXMsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06Zm9jdXN7ei1pbmRleDppbmhlcml0fS5kcm9wZG93bi1tZW51IC5idG4uZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bjpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeS5kaXNhYmxlZCwuZHJvcGRvd24tbWVu''@;'; put 'put ''dSAuYnRuLXNlY29uZGFyeTpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6ZGlzYWJs''@;'; put 'put ''ZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxp''@;'; put 'put ''bmUtc2Vjb25kYXJ5OmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nOmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZGlzYWJsZWQsLmRyb3Bkb3du''@;'; put 'put ''LW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2VzczpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5kaXNhYmxlZCwuZHJv''@;'; put 'put ''cGRvd24tbWVudSAuYnRuLWRhbmdlcjpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnkuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5OmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLXdh''@;'; put 'put ''cm5pbmc6ZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2VzczpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLWxpbmsuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmRpc2FibGVkLC5kcm9wZG93''@;'; put 'put ''bi1tZW51IC5kcm9wZG93bi1pdGVtLmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmRpc2FibGVke3BvaW50ZXItZXZlbnRzOm5vbmU7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tZGlzYWJsZWQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRy''@;'; put 'put ''b3Bkb3duLWl0ZW0tZGlzYWJsZWQtYmctY29sb3IpOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5kcm9wZG93bi1tZW51IC5idG4uZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bjpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXNl''@;'; put 'put ''Y29uZGFyeS5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5i''@;'; put 'put ''dG4tb3V0bGluZS5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQ6''@;'; put 'put ''aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmRpc2FibGVkOmhvdmVyLC5k''@;'; put 'put ''cm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nOmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAu''@;'; put 'put ''YnRuLW91dGxpbmUtc3VjY2Vzcy5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2VzczpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlcjpkaXNhYmxlZDpo''@;'; put 'put ''b3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnkuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5OmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmc6ZGlz''@;'; put 'put ''YWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2VzczpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWxpbmsuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmRp''@;'; put 'put ''c2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmRpc2FibGVkOmhvdmVye2JhY2tncm91bmQ6MCAwfS5kcm9wZG93bi1tZW51IC5idG4uZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1t''@;'; put 'put ''ZW51IC5idG46ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTpkaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRv''@;'; put 'put ''d24tbWVudSAuYnRuLWluZm86ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lOmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5kaXNhYmxl''@;'; put 'put ''ZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQ6YWN0''@;'; put 'put ''aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZzpkaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlci5kaXNhYmxlZDphY3RpdmUsLmRyb3Bk''@;'; put 'put ''b3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpkaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzOmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAu''@;'; put 'put ''YnRuLWRhbmdlci5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXI6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeS5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5OmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRv''@;'; put 'put ''d24tbWVudSAuYnRuLXdhcm5pbmcuZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZzpkaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3M6ZGlzYWJsZWQ6YWN0''@;'; put 'put ''aXZlLC5kcm9wZG93bi1tZW51IC5idG4tbGluay5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbS5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06ZGlz''@;'; put 'put ''YWJsZWQ6YWN0aXZle2JhY2tncm91bmQ6MCAwO2JveC1zaGFkb3c6bm9uZX0uZHJvcGRvd24tbWVudSAuYnRuLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxp''@;'; put 'put ''bmUuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5LmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRs''@;'; put 'put ''aW5lLWRhbmdlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnkuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5hY3RpdmUs''@;'; put 'put ''LmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWxpbmsuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmFjdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0uZHJvcGRvd24tbWVudSAuYnRuLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3du''@;'; put 'put ''LW1lbnUgLmJ0bi1zZWNvbmRhcnkuYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUuYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5hY3RpdmU6YmVmb3Jl''@;'; put 'put ''LC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnkuYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5hY3RpdmU6YmVmb3JlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVu''@;'; put 'put ''dSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5hY3RpdmU6YmVmb3JlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5LmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nLmFjdGl2ZTpiZWZvcmUsLmRy''@;'; put 'put ''b3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0uYWN0aXZlOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTow''@;'; put 'put ''O2xlZnQ6MDt3aWR0aDoxMDAlO2JvcmRlcjowO2JvcmRlci1sZWZ0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTMwMCkgc29saWQgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7dHJhbnNpdGlvbjpib3JkZXItbGVm''@;'; put 'put ''dCAuMnMgZWFzZS1pbn0uZHJvcGRvd24tbWVudSAuYnRuLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnkuZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUuZXhwYW5kYWJsZSwuZHJv''@;'; put 'put ''cGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5leHBhbmRhYmxlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnkuZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5leHBhbmRhYmxlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGlu''@;'; put 'put ''ZS1kYW5nZXIuZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5leHBhbmRhYmxlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5LmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi13''@;'; put 'put ''YXJuaW5nLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0uZXhwYW5kYWJsZXtwYWRkaW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtNSl9LmRyb3Bkb3duLW1lbnUgLmJ0bi5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LmV4cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmV4cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLmV4''@;'; put 'put ''cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnkuZXhwYW5kYWJsZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmV4cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmcuZXhwYW5k''@;'; put 'put ''YWJsZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyLmV4cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZXhwYW5kYWJsZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5leHBhbmRhYmxlOmFmdGVyLC5kcm9w''@;'; put 'put ''ZG93bi1tZW51IC5idG4tcHJpbWFyeS5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzcy5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tbGluay5leHBhbmRhYmxl''@;'; put 'put ''OmFmdGVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmV4cGFuZGFibGU6YWZ0ZXJ7Y29udGVudDoiIjttYXNrOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUy''@;'; put 'put ''MiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDEyJTIwMTIlMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDc3R5bGUlM0UuY2xzLTElN0JmaWxsJTNBJ25vbmUnJTNCJTdEJTNDJTJGc3R5bGUlM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZk''@;'; put 'put ''ZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VDYXJldCUzQyUyRnRpdGxlJTNFJTBBJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xzLTElMjIlMjBkJTNEJTIyTTYlMkM5TDEuMiUyQzQuMmEwLjY4JTJDMC42OCUyQzAlMkMwJTJDMSUyQzEtMUw2JTJDNy4wOCUyQzku''@;'; put 'put ''ODQlMkMzLjI0YTAuNjglMkMwLjY4JTJDMCUyQzElMkMxJTJDMSUyQzFaJTIyJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBIik7bWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stc2l6ZTpjb3ZlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWNvbG9yKTtoZWlnaHQ6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO3RyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTttYXJnaW4tbGVmdDphdXRvfS5kcm9wZG93bi1tZW51IC5idG4uZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1z''@;'; put 'put ''ZWNvbmRhcnkuZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmV4cGFuZGFibGUuYWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5leHBhbmRhYmxlLmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJp''@;'; put 'put ''bWFyeS5leHBhbmRhYmxlLmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmV4cGFuZGFibGUuYWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmV4cGFuZGFibGUuYWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51''@;'; put 'put ''IC5idG4tb3V0bGluZS1kYW5nZXIuZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXIuZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bkb3du''@;'; put 'put ''LW1lbnUgLmJ0bi1wcmltYXJ5LmV4cGFuZGFibGUuYWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5leHBhbmRhYmxlLmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3MuZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0''@;'; put 'put ''bi1saW5rLmV4cGFuZGFibGUuYWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmV4cGFuZGFibGUuYWN0aXZlOmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtY29sb3IpfS5kcm9wZG93bi1tZW51IC5idG4uZXhw''@;'; put 'put ''YW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeS5leHBhbmRhYmxlOmhvdmVyOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4taW5mby5leHBhbmRhYmxlOmhvdmVyOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5leHBhbmRhYmxlOmhvdmVy''@;'; put 'put ''OmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5LmV4cGFuZGFibGU6aG92ZXI6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5leHBhbmRhYmxlOmhvdmVyOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmV4''@;'; put 'put ''cGFuZGFibGU6aG92ZXI6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlci5leHBhbmRhYmxlOmhvdmVyOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzLmV4cGFuZGFibGU6aG92ZXI6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXIu''@;'; put 'put ''ZXhwYW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnkuZXhwYW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcuZXhwYW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3MuZXhwYW5kYWJsZTpo''@;'; put 'put ''b3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLWxpbmsuZXhwYW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbS5leHBhbmRhYmxlOmhvdmVyOmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0taG92ZXItY29sb3Ip''@;'; put 'put ''fS5kcm9wZG93bi1tZW51IC5idG4uZXhwYW5kYWJsZTphY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnkuZXhwYW5kYWJsZTphY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmV4cGFuZGFibGU6YWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5i''@;'; put 'put ''dG4tb3V0bGluZS5leHBhbmRhYmxlOmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5leHBhbmRhYmxlOmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmV4cGFuZGFibGU6YWN0aXZlOmFmdGVyLC5kcm9wZG93''@;'; put 'put ''bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmV4cGFuZGFibGU6YWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZXhwYW5kYWJsZTphY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZXhwYW5kYWJsZTphY3RpdmU6''@;'; put 'put ''YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXIuZXhwYW5kYWJsZTphY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5LmV4cGFuZGFibGU6YWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5leHBhbmRhYmxlOmFjdGl2ZTphZnRlciwuZHJv''@;'; put 'put ''cGRvd24tbWVudSAuYnRuLXN1Y2Nlc3MuZXhwYW5kYWJsZTphY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLmV4cGFuZGFibGU6YWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmV4cGFuZGFibGU6YWN0aXZlOmFmdGVye2JhY2tncm91bmQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tYWN0aXZlLWNvbG9yKX0uZHJvcGRvd24tbWVudSAuYnRuLmV4cGFuZGFibGUuZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LmV4''@;'; put 'put ''cGFuZGFibGUuZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnkuZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uZXhwYW5kYWJsZS5kaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uZXhwYW5kYWJs''@;'; put 'put ''ZTpkaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUuZXhwYW5kYWJsZS5kaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUuZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5leHBh''@;'; put 'put ''bmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5LmV4cGFuZGFibGU6ZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5i''@;'; put 'put ''dG4tb3V0bGluZS1zZWNvbmRhcnkuZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmV4cGFuZGFibGU6ZGlzYWJsZWQ6''@;'; put 'put ''YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlci5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5l''@;'; put 'put ''eHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzLmV4cGFuZGFibGU6ZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXIuZXhwYW5kYWJsZS5kaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdl''@;'; put 'put ''ci5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeS5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeS5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5l''@;'; put 'put ''eHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzcy5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzcy5leHBh''@;'; put 'put ''bmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tbGluay5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tbGluay5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmV4cGFuZGFibGUu''@;'; put 'put ''ZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0uZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWRpc2FibGVkLWNvbG9yKX0uZHJvcGRvd24tbWVudSAuYnRuOmZvY3VzLC5kcm9wZG93bi1t''@;'; put 'put ''ZW51IC5idG4tc2Vjb25kYXJ5OmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4taW5mbzpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29u''@;'; put 'put ''ZGFyeTpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZzpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyOmZv''@;'; put 'put ''Y3VzLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeTpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmc6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tbGluazpmb2N1cywuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRl''@;'; put 'put ''bTpmb2N1c3tvdXRsaW5lLW9mZnNldDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikpfS5kcm9wZG93bi1tZW51IC5idG4sLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW17cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9QG1lZGlhIHNjcmVlbiBhbmQgKG1h''@;'; put 'put ''eC13aWR0aDo1NzZweCl7LmRyb3Bkb3duLW1lbnUgLmJ0biwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbXtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX19LmRyb3Bkb3duLW1lbnUgYS5kcm9wZG93bi1pdGVte3RleHQtZGVj''@;'; put 'put ''b3JhdGlvbjpub25lfS5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1kaXZpZGVye2JvcmRlci1ib3R0b20td2lkdGg6dmFyKC0tY2xyLWRyb3Bkb3duLWRpdmlkZXItYm9yZGVyLXdpZHRoKTtib3JkZXItYm90dG9tLXN0eWxlOnNvbGlkO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWRy''@;'; put 'put ''b3Bkb3duLWRpdmlkZXItY29sb3IpO21hcmdpbjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5idG4tZ3JvdXAtb3ZlcmZsb3cub3Blbj4uZHJvcGRvd24tbWVudSwuYnRuLWdyb3VwLW92ZXJmbG93Lm9wZW4+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudSwudGFicy1v''@;'; put 'put ''dmVyZmxvdy5vcGVuPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93Lm9wZW4+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24ub3Blbj4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24ub3Blbj4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1t''@;'; put 'put ''ZW51e3Zpc2liaWxpdHk6dmlzaWJsZX0uYnRuLWdyb3VwLW92ZXJmbG93LmJvdHRvbS1sZWZ0Pi5kcm9wZG93bi1tZW51LC5idG4tZ3JvdXAtb3ZlcmZsb3cuYm90dG9tLXJpZ2h0Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LmJvdHRvbS1sZWZ0Pi5kcm9wZG93bi1tZW51LC50YWJz''@;'; put 'put ''LW92ZXJmbG93LmJvdHRvbS1yaWdodD4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24uYm90dG9tLWxlZnQ+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLmJvdHRvbS1yaWdodD4uZHJvcGRvd24tbWVudXt0b3A6MTAwJTtib3R0b206YXV0bzttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0y''@;'; put 'put ''KSAwIDAgMH0uYnRuLWdyb3VwLW92ZXJmbG93LmJvdHRvbS1sZWZ0Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LmJvdHRvbS1sZWZ0Pi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5ib3R0b20tbGVmdD4uZHJvcGRvd24tbWVudXtsZWZ0OjA7cmlnaHQ6YXV0b30uYnRuLWdyb3VwLW92''@;'; put 'put ''ZXJmbG93LmJvdHRvbS1yaWdodD4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy5ib3R0b20tcmlnaHQ+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLmJvdHRvbS1yaWdodD4uZHJvcGRvd24tbWVudXtyaWdodDowO2xlZnQ6YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LnRvcC1sZWZ0Pi5k''@;'; put 'put ''cm9wZG93bi1tZW51LC5idG4tZ3JvdXAtb3ZlcmZsb3cudG9wLXJpZ2h0Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LnRvcC1sZWZ0Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LnRvcC1yaWdodD4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24udG9wLWxlZnQ+LmRyb3Bkb3du''@;'; put 'put ''LW1lbnUsLmRyb3Bkb3duLnRvcC1yaWdodD4uZHJvcGRvd24tbWVudXt0b3A6YXV0bztib3R0b206MTAwJTttYXJnaW46MCAwIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikgMH0uYnRuLWdyb3VwLW92ZXJmbG93LnRvcC1sZWZ0Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LnRvcC1s''@;'; put 'put ''ZWZ0Pi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi50b3AtbGVmdD4uZHJvcGRvd24tbWVudXtsZWZ0OjA7cmlnaHQ6YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LnRvcC1yaWdodD4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy50b3AtcmlnaHQ+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3du''@;'; put 'put ''LnRvcC1yaWdodD4uZHJvcGRvd24tbWVudXtyaWdodDowO2xlZnQ6YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LC5idG4tZ3JvdXAtb3ZlcmZsb3cubGVmdC1ib3R0b20+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cubGVmdC10b3A+LmRyb3Bk''@;'; put 'put ''b3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cubGVmdC1ib3R0b20+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudXtyaWdodDoxMDAlO2xlZnQ6YXV0bzttYXJnaW46MCB2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTIpIDAgMH0uYnRuLWdyb3VwLW92ZXJmbG93LmxlZnQtYm90dG9tPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LmxlZnQtYm90dG9tPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudXt0b3A6MDtib3R0b206YXV0b30uYnRu''@;'; put 'put ''LWdyb3VwLW92ZXJmbG93LmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5sZWZ0LXRvcD4uZHJvcGRvd24tbWVudXtib3R0b206MDt0b3A6YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LnJpZ2h0LXRvcD4uZHJv''@;'; put 'put ''cGRvd24tbWVudSwuYnRuLWdyb3VwLW92ZXJmbG93LnJpZ2h0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy5yaWdodC10b3A+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cucmlnaHQtYm90dG9tPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5yaWdodC10b3A+LmRy''@;'; put 'put ''b3Bkb3duLW1lbnUsLmRyb3Bkb3duLnJpZ2h0LWJvdHRvbT4uZHJvcGRvd24tbWVudXtsZWZ0OjEwMCU7cmlnaHQ6YXV0bzttYXJnaW46MCAwIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKX0uYnRuLWdyb3VwLW92ZXJmbG93LnJpZ2h0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwudGFicy1v''@;'; put 'put ''dmVyZmxvdy5yaWdodC1ib3R0b20+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLnJpZ2h0LWJvdHRvbT4uZHJvcGRvd24tbWVudXt0b3A6MDtib3R0b206YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LnJpZ2h0LXRvcD4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy5yaWdodC10b3A+LmRy''@;'; put 'put ''b3Bkb3duLW1lbnUsLmRyb3Bkb3duLnJpZ2h0LXRvcD4uZHJvcGRvd24tbWVudXtib3R0b206MDt0b3A6YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93IC5kcm9wZG93biAuZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdyAuZHJvcGRvd24gLmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duIC5kcm9w''@;'; put 'put ''ZG93biAuZHJvcGRvd24tbWVudXtib3JkZXItY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWNoaWxkLWJvcmRlci1jb2xvcik7cG9zaXRpb246YWJzb2x1dGV9LmJ0bi1ncm91cC1vdmVyZmxvdyAuZHJvcGRvd24ubGVmdC10b3A+LmRyb3Bkb3duLW1lbnUsLmJ0bi1ncm91cC1vdmVyZmxvdyAu''@;'; put 'put ''ZHJvcGRvd24ubGVmdC10b3A+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdyAuZHJvcGRvd24ubGVmdC10b3A+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cgLmRyb3Bkb3duLmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRy''@;'; put 'put ''b3Bkb3duLW1lbnUsLmRyb3Bkb3duIC5kcm9wZG93bi5sZWZ0LXRvcD4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24gLmRyb3Bkb3duLmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bkb3duLW1lbnV7aW5zZXQ6MCAxMDAlIGF1dG8gYXV0bzttYXJnaW4tdG9wOmNhbGMoKC0x''@;'; put 'put ''KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7bWFyZ2luLXJpZ2h0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSl9LmJ0bi1ncm91cC1vdmVyZmxvdyAuZHJvcGRvd24ucmlnaHQtdG9wPi5kcm9wZG93bi1tZW51LC5idG4t''@;'; put 'put ''Z3JvdXAtb3ZlcmZsb3cgLmRyb3Bkb3duLnJpZ2h0LXRvcD4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93IC5kcm9wZG93bi5yaWdodC10b3A+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cgLmRyb3Bkb3duLnJpZ2h0LXRvcD4uZHJvcGRv''@;'; put 'put ''d24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1tZW51LC5kcm9wZG93biAuZHJvcGRvd24ucmlnaHQtdG9wPi5kcm9wZG93bi1tZW51LC5kcm9wZG93biAuZHJvcGRvd24ucmlnaHQtdG9wPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bkb3duLW1lbnV7aW5zZXQ6MCBhdXRvIGF1dG8gMTAw''@;'; put 'put ''JTttYXJnaW4tdG9wOmNhbGMoKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7bWFyZ2luLWxlZnQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpKX0uYnRuLWdyb3VwLW92ZXJmbG93IC5kcm9wZG93bi5sZWZ0LWJvdHRv''@;'; put 'put ''bT4uZHJvcGRvd24tbWVudSwuYnRuLWdyb3VwLW92ZXJmbG93IC5kcm9wZG93bi5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93IC5kcm9wZG93bi5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdyAu''@;'; put 'put ''ZHJvcGRvd24ubGVmdC1ib3R0b20+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24gLmRyb3Bkb3duLmxlZnQtYm90dG9tPi5kcm9wZG93bi1tZW51LC5kcm9wZG93biAuZHJvcGRvd24ubGVmdC1ib3R0b20+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJv''@;'; put 'put ''cGRvd24tbWVudXtpbnNldDphdXRvIDEwMCUgMCBhdXRvO21hcmdpbi1ib3R0b206Y2FsYygoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTttYXJnaW4tcmlnaHQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpKX0uYnRu''@;'; put 'put ''LWdyb3VwLW92ZXJmbG93IC5kcm9wZG93bi5yaWdodC1ib3R0b20+LmRyb3Bkb3duLW1lbnUsLmJ0bi1ncm91cC1vdmVyZmxvdyAuZHJvcGRvd24ucmlnaHQtYm90dG9tPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cgLmRyb3Bkb3duLnJpZ2h0''@;'; put 'put ''LWJvdHRvbT4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdyAuZHJvcGRvd24ucmlnaHQtYm90dG9tPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duIC5kcm9wZG93bi5yaWdodC1ib3R0b20+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duIC5kcm9wZG93''@;'; put 'put ''bi5yaWdodC1ib3R0b20+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudXtpbnNldDphdXRvIGF1dG8gMCAxMDAlO21hcmdpbi1ib3R0b206Y2FsYygoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTttYXJnaW4tbGVm''@;'; put 'put ''dDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykpfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLWxvZ2luLXRpdGxlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItbG9naW4taGludC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1jb2xvci00MDApOy0tY2xyLWxvZ2luLWZvb3Rlci1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTstLWNsci1sb2dpbi1jb3B5cmlnaHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvcik7LS1jbHItbG9naW4tYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTstLWNsci1sb2dpbi13ZWxjb21lLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItbG9naW4tZXJyb3ItYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWJnLWNv''@;'; put 'put ''bG9yKTstLWNsci1sb2dpbi1lcnJvci1pY29uLWNvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItaWNvbi1jb2xvcik7LS1jbHItbG9naW4tbG9nby1jb2xvcjojNzE3MTc1Oy0tY2xyLWxvZ2luLXRyYWRlbWFyay1jb2xvcjp2YXIoLS1jbHItaDItY29sb3IpOy0tY2xyLWxvZ2luLXRyYWRl''@;'; put 'put ''bWFyay1mb250LXdlaWdodDp2YXIoLS1jbHItaDItZm9udC13ZWlnaHQpOy0tY2xyLWxvZ2luLXRyYWRlbWFyay1mb250LWZhbWlseTp2YXIoLS1jbHItaDItZm9udC1mYW1pbHkpOy0tY2xyLWxvZ2luLXRyYWRlbWFyay1mb250LXNpemU6dmFyKC0tY2xyLWgyLWZvbnQtc2l6ZSk7LS1jbHIt''@;'; put 'put ''bG9naW4tdHJhZGVtYXJrLWxldHRlci1zcGFjaW5nOnZhcigtLWNsci1oMi1sZXR0ZXItc3BhY2luZyl9OnJvb3QgW2Nkcy10aGVtZX49ZGFya117LS1jbHItbG9naW4tbG9nby1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKX0ubG9naW4td3JhcHBlcntkaXNwbGF5OmZsZXg7''@;'; put 'put ''aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0MlM0Z4bWwlMjB2ZXJzaW9uJTNEJTIyMS4wJTIyJTIwZW5jb2RpbmclM0QlMjJ1dGYtOCUyMiUzRiUzRSUwRCUwQSUzQyUyMURPQ1RZUEUlMjBzdmclMjBQVUJMSUMlMjAlMjItJTJG''@;'; put 'put ''JTJGVzNDJTJGJTJGRFREJTIwU1ZHJTIwMS4xJTJGJTJGRU4lMjIlMjAlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRkdyYXBoaWNzJTJGU1ZHJTJGMS4xJTJGRFREJTJGc3ZnMTEuZHRkJTIyJTNFJTBEJTBBJTNDc3ZnJTBEJTBBJTIwJTIwJTIwJTIwJTIwdmVyc2lvbiUzRCUyMjEuMSUy''@;'; put 'put ''MiUwRCUwQSUyMCUyMCUyMCUyMCUyMGlkJTNEJTIybm8tYXNwZWN0LXJhdGlvJTIyJTBEJTBBJTIwJTIwJTIwJTIwJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlMEQlMEElMjAlMjAlMjAlMjAlMjB4bWxucyUzQXhsaW5rJTNEJTIyaHR0cCUz''@;'; put 'put ''QSUyRiUyRnd3dy53My5vcmclMkYxOTk5JTJGeGxpbmslMjIlMEQlMEElMjAlMjAlMjAlMjAlMjB4JTNEJTIyMHB4JTIyJTBEJTBBJTIwJTIwJTIwJTIwJTIweSUzRCUyMjBweCUyMiUwRCUwQSUyMCUyMCUyMCUyMCUyMGhlaWdodCUzRCUyMjIwNTUuNTVweCUyMiUwRCUwQSUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMHdpZHRoJTNEJTIyMTQ0MHB4JTIyJTBEJTBBJTIwJTIwJTIwJTIwJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMjA1NS41NSUyMDE0NDAlMjIlMEQlMEElMjAlMjAlMjAlMjAlMjBwcmVzZXJ2ZUFzcGVjdFJhdGlvJTNEJTIyeE1pbllNaW4lMjBzbGljZSUyMiUzRSUwRCUwQSUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2Rlc2MlM0VMb2dpbiUyMEltYWdlJTNDJTJGZGVzYyUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2clMjBzdHJva2UlM0QlMjJub25lJTIyJTIwc3Ryb2tlLXdpZHRoJTNEJTIyMSUyMiUyMGZpbGwlM0QlMjJu''@;'; put 'put ''b25lJTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSUyODAuMDAwMDAwJTJDJTIwLTQuMDAwMDAwJTI5JTIyJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDZyUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUzQ2clM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyM0ZBRkFGQSUyMiUyMHglM0QlMjIwJTIyJTIweSUzRCUyMjQlMjIlM0UlM0MlMkZyZWN0JTNFJTBEJTBBJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjMwMDdDQkIlMjIlMjBvcGFjaXR5JTNEJTIyMC40JTIyJTIwc3R5bGUlM0QlMjJtaXgtYmxlbmQtbW9kZSUzQSUyMG11bHRpcGx5JTNCJTIyJTIwcG9pbnRzJTNEJTIyMTEwOC40MyUy''@;'; put 'put ''MDE0NDMuNjMlMjAxMTA5LjA4JTIwMTQ0My42MyUyMDQ0My40NCUyMDc3Ny43NCUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzkzRDhDQSUyMiUyMG9wYWNp''@;'; put 'put ''dHklM0QlMjIwLjYlMjIlMjBzdHlsZSUzRCUyMm1peC1ibGVuZC1tb2RlJTNBJTIwb3ZlcmxheSUzQiUyMiUyMHBvaW50cyUzRCUyMjAuNzklMjAzMzQuOTIlMjA0NDMuNDQlMjA3NzcuNzQlMjAwLjc5JTIwMzM0LjQ5JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9pbnRzJTNEJTIyMC43OSUyMDIxMS44OCUyMDAuNzklMjAzMjkuNiUyMDU5LjYyJTIwMjcwLjc3JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNEJTIyMTYwLjY1JTIwMTY5Ljc0JTIwMC43OSUyMDkuNzMlMjAwLjc5JTIwMjExLjg4JTIwOTAuMjclMjAzMDEuNDYlMjA1OS42MiUyMDI3''@;'; put 'put ''MC43NyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0NERTNFRSUyMiUyMHBvaW50cyUzRCUyMjUwMy43NyUyMDE0NDMuNjMlMjA2OTcuNDclMjAxNDQzLjYz''@;'; put 'put ''JTIwODAzLjc0JTIwMTMzNy4zNiUyMDcwNi45MyUyMDEyNDAuNDMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNDREUzRUUlMjIlMjBwb2ludHMlM0QlMjIx''@;'; put 'put ''NTguMzMlMjA2OTEuMTUlMjAwLjc5JTIwODQ4LjcyJTIwMC43OSUyMDE0MjcuNDMlMjA0NDcuNTIlMjA5ODAuNyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUy''@;'; put 'put ''M0NFRERFMCUyMiUyMHBvaW50cyUzRCUyMjI1Ny43MSUyMDU5MS43NSUyMDAuNzklMjAzMzQuNDklMjAwLjc5JTIwNTMzLjQyJTIwMTU4LjMzJTIwNjkxLjE1JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTlDOUQ1JTIyJTIwcG9pbnRzJTNEJTIyMC43OSUyMDUzMy40MiUyMDAuNzklMjA4NDguNzIlMjAxNTguMzMlMjA2OTEuMTUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBRkQ0RTclMjIlMjBwb2ludHMlM0QlMjI4MDYuNDYlMjAxMTQwLjg5JTIwNTQ2Ljk0JTIwODgxLjI4JTIwNDQ3LjUyJTIwOTgwLjclMjA3MDYuOTMlMjAxMjQwLjQzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOEZDNERGJTIyJTIwcG9pbnRzJTNEJTIyNDQ3LjUyJTIwOTgwLjclMjAwLjc5JTIwMTQyNy40MyUyMDAuNzklMjAxNDQzLjYzJTIwNTAzLjc3JTIwMTQ0My42MyUyMDcwNi45''@;'; put 'put ''MyUyMDEyNDAuNDMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM3MEMwREMlMjIlMjBwb2ludHMlM0QlMjI2MDguMjMlMjA4MTkuOTklMjA1NDYuOTQlMjA4''@;'; put 'put ''ODEuMjglMjA4MDYuNDYlMjAxMTQwLjg5JTIwODY3LjY0JTIwMTA3OS43JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNE''@;'; put 'put ''JTIyNDIwLjA1JTIwNDI5LjM5JTIwMzE5LjAxJTIwNTMwLjQ1JTIwNjA4LjIzJTIwODE5Ljk5JTIwNzA5LjMlMjA3MTguOTElMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwl''@;'; put 'put ''M0QlMjIlMjM2OUFGRDQlMjIlMjBwb2ludHMlM0QlMjI3MDkuMyUyMDcxOC45MSUyMDYwOC4yMyUyMDgxOS45OSUyMDg2Ny42NCUyMDEwNzkuNyUyMDk2OC43NCUyMDk3OC42JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOEVCNUJDJTIyJTIwcG9pbnRzJTNEJTIyNjE5LjU5JTIwMjI5LjgyJTIwMzkzLjQyJTIwMy4xMiUyMDMyNy4yNyUyMDMuMTIlMjAxNjAuNjUlMjAxNjkuNzQlMjA0MjAuMDUlMjA0MjkuMzklMjIlM0UlM0MlMkZwb2x5Z29uJTNF''@;'; put 'put ''JTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM4RUI1QkMlMjIlMjBwb2ludHMlM0QlMjIzMTkuMDElMjA1MzAuNDUlMjAzMTkuMDElMjA1MzAuNDUlMjA5MC4yNyUyMDMwMS40NiUyMiUzRSUzQyUy''@;'; put 'put ''RnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzdDQjBDNyUyMiUyMHBvaW50cyUzRCUyMjE2MC42NSUyMDE2OS43NCUyMDU5LjYyJTIwMjcwLjc3JTIwOTAuMjclMjAzMDEuNDYl''@;'; put 'put ''MjAzMTkuMDElMjA1MzAuNDUlMjA0MjAuMDUlMjA0MjkuMzklMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM4NEM0RDIlMjIlMjBwb2ludHMlM0QlMjI1OS42''@;'; put 'put ''MiUyMDI3MC43NyUyMDAuNzklMjAzMjkuNiUyMDAuNzklMjAzMzQuNDklMjAyNTcuNzElMjA1OTEuNzUlMjAzMTkuMDElMjA1MzAuNDUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUy''@;'; put 'put ''MGZpbGwlM0QlMjIlMjM3Q0IwQzclMjIlMjBwb2ludHMlM0QlMjI1MzcuNTUlMjAzLjEyJTIwMzkzLjQyJTIwMy4xMiUyMDYxOS41OSUyMDIyOS44MiUyMDY5MS43NCUyMDE1Ny42NiUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzg3RDFEQiUyMiUyMHBvaW50cyUzRCUyMjg0Ni4yNSUyMDMuMTIlMjA1MzcuNTUlMjAzLjEyJTIwNjkxLjc0JTIwMTU3LjY2JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQ0RFM0VFJTIyJTIwcG9pbnRzJTNEJTIyOTA5Ljg3JTIwMTQ0My42MyUyMDg1MC4xOSUyMDEzODMuODclMjA3OTAuNDMlMjAxNDQzLjYzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9pbnRzJTNEJTIyMzE5LjAxJTIwNTMwLjQ1JTIwMjU3LjcxJTIwNTkxLjc1JTIwNDQzLjQ0JTIwNzc3Ljc0JTIwNTQ2Ljk0JTIwODgxLjI4JTIwNjA4LjIz''@;'; put 'put ''JTIwODE5Ljk5JTIwODY3LjY0JTIwMTA3OS43JTIwODY3LjY0JTIwMTA3OS43JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9pbnRz''@;'; put 'put ''JTNEJTIyODY3LjY0JTIwMTA3OS43JTIwODA2LjQ2JTIwMTE0MC44OSUyMDkwMy4zMSUyMDEyMzcuNzglMjA5NjQuNDYlMjAxMTc2LjYzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24l''@;'; put 'put ''MjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNEJTIyMTA2NS41NyUyMDEwNzUuNTIlMjA5NjguNzQlMjA5NzguNiUyMDg2Ny42NCUyMDEwNzkuNyUyMDk2NC40NiUyMDExNzYuNjMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5NkM3REYlMjIlMjBwb2ludHMlM0QlMjI5NjQuNDYlMjAxMTc2LjYzJTIwODY3LjY0JTIwMTA3OS43JTIwODY3LjY0JTIwMTA3OS43JTIwOTY0LjQ2JTIwMTE3Ni42MyUyMiUzRSUzQyUyRnBvbHlnb24lM0Ul''@;'; put 'put ''MEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzk2QzdERiUyMiUyMHBvaW50cyUzRCUyMjEwMTAuOTIlMjAxMjIzLjEzJTIwMTIzMS4xNiUyMDE0NDMuNjMlMjAxMDEwLjkyJTIwMTIyMy4xMyUyMiUz''@;'; put 'put ''RSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzk2QzdERiUyMiUyMHBvaW50cyUzRCUyMjEyNDAuMDglMjA3MDcuMjIlMjAxMTY3LjklMjA3NzkuNCUyMDEyNjQuNjgl''@;'; put 'put ''MjA4NzYuNCUyMDEzMzYuODclMjA4MDQuMjIlMjAxMjQwLjA4JTIwNzA3LjIxJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRz''@;'; put 'put ''JTNEJTIyOTgwLjgzJTIwNDQ3LjM5JTIwNjkxLjc0JTIwMTU3LjY2JTIwNjE5LjU5JTIwMjI5LjgyJTIwOTA4LjY2JTIwNTE5LjU2JTIwOTgwLjgzJTIwNDQ3LjM5JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQUZENEU3JTIyJTIwcG9pbnRzJTNEJTIyNzA5LjMlMjA3MTguOTElMjA5NjguNzQlMjA5NzguNiUyMDExNjcuOTElMjA3NzkuNCUyMDkwOC42NiUyMDUxOS41NSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzY5QUZENCUyMiUyMHBvaW50cyUzRCUyMjk4MC44MyUyMDQ0Ny4zOSUyMDkwOC42NiUyMDUxOS41NSUyMDExNjcuOTElMjA3NzkuNCUyMDEyNDAuMDglMjA3MDcuMjElMjIlM0UlM0MlMkZw''@;'; put 'put ''b2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBMERFRUElMjIlMjBwb2ludHMlM0QlMjIxMDM0LjU5JTIwMy4xMiUyMDg0Ni4yNSUyMDMuMTIlMjA2OTEuNzQlMjAxNTcuNjYlMjA5''@;'; put 'put ''ODAuODMlMjA0NDcuMzklMjAxMjI5Ljc1JTIwMTk4LjQ3JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9pbnRzJTNEJTIyMTI0MC4w''@;'; put 'put ''OCUyMDcwNy4yMSUyMDEzMzYuODclMjA4MDQuMjIlMjAxNTg2LjAxJTIwNTU1LjA4JTIwMTQ4OS4xNCUyMDQ1OC4xMiUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUy''@;'; put 'put ''MiUyMzcwQzBEQyUyMiUyMHBvaW50cyUzRCUyMjEyMjkuNzUlMjAxOTguNDclMjA5ODAuODMlMjA0NDcuMzklMjAxMjQwLjA4JTIwNzA3LjIxJTIwMTQ4OS4xNCUyMDQ1OC4xMiUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0I3Q0VEMiUyMiUyMHBvaW50cyUzRCUyMjEyOTIuMjIlMjAxMzAyLjM4JTIwMTQzMy4zMiUyMDE0NDMuNjMlMjAxODMwLjYxJTIwMTQ0My42MyUyMDE0OTEuMTglMjAxMTAzLjQyJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUw''@;'; put 'put ''QSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9pbnRzJTNEJTIyMTAxMC45MiUyMDEyMjMuMTMlMjA5NDkuNzglMjAxMjg0LjI3JTIwMTEwOS4wOCUyMDE0NDMuNjMlMjAxMTUwLjk4''@;'; put 'put ''JTIwMTQ0My42MyUyMDExOTEuMDklMjAxNDAzLjUxJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNzVCOEM1JTIyJTIwcG9pbnRzJTNEJTIyMTE1MC45OCUy''@;'; put 'put ''MDE0NDMuNjMlMjAxMjMxLjE2JTIwMTQ0My42MyUyMDExOTEuMDklMjAxNDAzLjUxJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9p''@;'; put 'put ''bnRzJTNEJTIyMTI5Mi4yMiUyMDEzMDIuMzglMjAxMTEyLjAzJTIwMTEyMi4wMiUyMDEwMTAuOTIlMjAxMjIzLjEzJTIwMTE5MS4wOSUyMDE0MDMuNTElMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTND''@;'; put 'put ''cG9seWdvbiUyMGZpbGwlM0QlMjIlMjM2RUE0QkMlMjIlMjBwb2ludHMlM0QlMjIxMTkxLjA5JTIwMTQwMy41MSUyMDEyMzEuMTYlMjAxNDQzLjYzJTIwMTQzMy4zMiUyMDE0NDMuNjMlMjAxMjkyLjIyJTIwMTMwMi4zOCUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzAwN0NCQiUyMiUyMG9wYWNpdHklM0QlMjIwLjQlMjIlMjBzdHlsZSUzRCUyMm1peC1ibGVuZC1tb2RlJTNBJTIwbXVsdGlwbHklM0IlMjIlMjBwb2ludHMlM0QlMjIxMzgzLjMlMjA4''@;'; put 'put ''NTAuNzUlMjAxMzExLjEyJTIwOTIyLjk0JTIwMTQ5MS4xOCUyMDExMDMuNDIlMjAxNTYzLjM3JTIwMTAzMS4yMyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUy''@;'; put 'put ''M0I3Q0VEMiUyMiUyMHBvaW50cyUzRCUyMjE0OTEuMTglMjAxMTAzLjQyJTIwMTgzMC42MSUyMDE0NDMuNjMlMjAxOTc0Ljg2JTIwMTQ0My42MyUyMDE1NjMuMzclMjAxMDMxLjIzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNkVBNEJDJTIyJTIwcG9pbnRzJTNEJTIyMTQ5MS4xOCUyMDExMDMuNDIlMjAxODMwLjYxJTIwMTQ0My42MyUyMDE5NzQuODYlMjAxNDQzLjYzJTIwMTU2My4zNyUyMDEwMzEuMjMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBE''@;'; put 'put ''JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBMERFRUElMjIlMjBwb2ludHMlM0QlMjIxODEyLjY1JTIwNzgxLjk1JTIwMTYzMi40NiUyMDYwMS41OSUyMDEzODMuMyUyMDg1MC43NSUyMDE1NjMuMzcl''@;'; put 'put ''MjAxMDMxLjIzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQjdDRUQyJTIyJTIwcG9pbnRzJTNEJTIyMTU2My4zNyUyMDEwMzEuMjMlMjAxOTc0Ljg2JTIw''@;'; put 'put ''MTQ0My42MyUyMDIwNTQuNDUlMjAxNDQzLjYzJTIwMjA1NC40NSUyMDEwMjMuOTklMjAxODEyLjY1JTIwNzgxLjk1JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIy''@;'; put 'put ''JTIzNzhDQUQ0JTIyJTIwcG9pbnRzJTNEJTIyMTU2My4zNyUyMDEwMzEuMjMlMjAxOTc0Ljg2JTIwMTQ0My42MyUyMDIwNTQuNDUlMjAxNDQzLjYzJTIwMjA1NC40NSUyMDEwMjMuOTklMjAxODEyLjY1JTIwNzgxLjk1JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTFDNUUwJTIyJTIwcG9pbnRzJTNEJTIyODAzLjc0JTIwMTMzNy4zNiUyMDg1MC4xOSUyMDEzODMuODclMjA5NDkuNzglMjAxMjg0LjI3JTIwOTAzLjMxJTIwMTIzNy43OCUyMiUzRSUz''@;'; put 'put ''QyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzkxQzVFMCUyMiUyMHBvaW50cyUzRCUyMjEwNjUuNTclMjAxMDc1LjUyJTIwMTExMi4wMyUyMDExMjIuMDIlMjAxMzExLjEy''@;'; put 'put ''JTIwOTIyLjk0JTIwMTI2NC42OSUyMDg3Ni40JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNzdCOEQ5JTIyJTIwcG9pbnRzJTNEJTIyNjk3LjQ3JTIwMTQ0''@;'; put 'put ''My42MyUyMDc5MC40MyUyMDE0NDMuNjMlMjA4NTAuMTklMjAxMzgzLjg3JTIwODAzLjc0JTIwMTMzNy4zNiUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0Ew''@;'; put 'put ''REVFQSUyMiUyMHBvaW50cyUzRCUyMjk2NC40NiUyMDExNzYuNjMlMjA5MDMuMzElMjAxMjM3Ljc4JTIwOTQ5Ljc4JTIwMTI4NC4yNyUyMDEwMTAuOTIlMjAxMjIzLjEzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNURCNUQ2JTIyJTIwcG9pbnRzJTNEJTIyOTY0LjQ2JTIwMTE3Ni42MyUyMDkwMy4zMSUyMDEyMzcuNzglMjA5NDkuNzglMjAxMjg0LjI3JTIwMTAxMC45MiUyMDEyMjMuMTMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjM5NkM3REYlMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxMDM4LjI0NzI5NyUyQyUyMDExNDkuMjc1NDI5JTI5JTIwcm90YXRlJTI4LTQ0Ljk3MDAwMCUyOSUyMHRy''@;'; put 'put ''YW5zbGF0ZSUyOC0xMDM4LjI0NzI5NyUyQyUyMC0xMTQ5LjI3NTQyOSUyOSUyMCUyMiUyMHglM0QlMjI5NjYuNzUyMjk3JTIyJTIweSUzRCUyMjExMTYuNDEwNDMlMjIlMjB3aWR0aCUzRCUyMjE0Mi45OSUyMiUyMGhlaWdodCUzRCUyMjY1LjczJTIyJTNFJTNDJTJGcmVjdCUzRSUwRCUwQSUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3JlY3QlMjBmaWxsJTNEJTIyJTIzNTdBOEQwJTIyJTIwdHJhbnNmb3JtJTNEJTIydHJhbnNsYXRlJTI4MTAzOC4yNDcyOTclMkMlMjAxMTQ5LjI3NTQyOSUyOSUyMHJvdGF0ZSUyOC00NC45NzAwMDAlMjkl''@;'; put 'put ''MjB0cmFuc2xhdGUlMjgtMTAzOC4yNDcyOTclMkMlMjAtMTE0OS4yNzU0MjklMjklMjAlMjIlMjB4JTNEJTIyOTY2Ljc1MjI5NyUyMiUyMHklM0QlMjIxMTE2LjQxMDQzJTIyJTIwd2lkdGglM0QlMjIxNDIuOTklMjIlMjBoZWlnaHQlM0QlMjI2NS43MyUyMiUzRSUzQyUyRnJlY3QlM0UlMEQl''@;'; put 'put ''MEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzk2QzdERiUyMiUyMHBvaW50cyUzRCUyMjEwMTAuOTIlMjAxMjIzLjEzJTIwMTAxMC45MiUyMDEyMjMuMTMlMjA5NjQuNDYlMjAxMTc2LjYzJTIwOTY0LjQ2''@;'; put 'put ''JTIwMTE3Ni42MyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzAwMDAwMCUyMiUyMG9wYWNpdHklM0QlMjIwLjQyJTIyJTIwcG9pbnRzJTNEJTIyMTAxMC45''@;'; put 'put ''MiUyMDEyMjMuMTMlMjAxMDEwLjkyJTIwMTIyMy4xMyUyMDk2NC40NiUyMDExNzYuNjMlMjA5NjQuNDYlMjAxMTc2LjYzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNE''@;'; put 'put ''JTIyJTIzMDA3Q0JCJTIyJTIwb3BhY2l0eSUzRCUyMjAuNCUyMiUyMHN0eWxlJTNEJTIybWl4LWJsZW5kLW1vZGUlM0ElMjBtdWx0aXBseSUzQiUyMiUyMHBvaW50cyUzRCUyMjEzMzYuODclMjA4MDQuMjIlMjAxMjY0LjY5JTIwODc2LjQlMjAxMzExLjEyJTIwOTIyLjk0JTIwMTM4My4zJTIw''@;'; put 'put ''ODUwLjc1JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNTdBOEQwJTIyJTIwcG9pbnRzJTNEJTIyMTMzNi44NyUyMDgwNC4yMiUyMDEyNjQuNjklMjA4NzYu''@;'; put 'put ''NCUyMDEzMTEuMTIlMjA5MjIuOTQlMjAxMzgzLjMlMjA4NTAuNzUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5M0Q4Q0ElMjIlMjBvcGFjaXR5JTNEJTIy''@;'; put 'put ''MC42JTIyJTIwc3R5bGUlM0QlMjJtaXgtYmxlbmQtbW9kZSUzQSUyMG92ZXJsYXklM0IlMjIlMjBwb2ludHMlM0QlMjIxMzM2Ljg3JTIwODA0LjIyJTIwMTM4My4zJTIwODUwLjc1JTIwMTYzMi40NiUyMDYwMS41OSUyMDE1ODYuMDElMjA1NTUuMDglMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBE''@;'; put 'put ''JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM1REI1RDYlMjIlMjBwb2ludHMlM0QlMjIxMzM2Ljg3JTIwODA0LjIyJTIwMTM4My4zJTIwODUwLjc1JTIwMTYzMi40NiUyMDYwMS41OSUyMDE1ODYuMDEl''@;'; put 'put ''MjA1NTUuMDglMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBRkQzRTYlMjIlMjBwb2ludHMlM0QlMjIyMDU2JTIwMC4xMiUyMDE2NDUuNDklMjAwLjEyJTIw''@;'; put 'put ''MTY0OC40OSUyMDMuMTIlMjAxOTQ0LjA3JTIwMy4xMiUyMDE3OTYuMjIlMjAxNTAuOTklMjAxODkzLjEyJTIwMjQ3Ljk3JTIwMjA1NC40NSUyMDg2LjY0JTIwMjA1NC40NSUyMDE3OS42JTIwMTkzOS41OCUyMDI5NC40NyUyMDIwNTYlMjA0MTElMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBB''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM3QUI5RDklMjIlMjBwb2ludHMlM0QlMjIxNjQ4LjQ5JTIwMy4xMiUyMDE3OTYuMjIlMjAxNTAuOTklMjAxOTQ0LjA3JTIwMy4xMiUyMiUzRSUzQyUyRnBvbHln''@;'; put 'put ''b24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzY2QUVENCUyMiUyMHBvaW50cyUzRCUyMjIwNTQuNDUlMjA4Ni42NCUyMDE4OTMuMTIlMjAyNDcuOTclMjAxOTM5LjU4JTIwMjk0LjQ3JTIw''@;'; put 'put ''MjA1NC40NSUyMDE3OS42JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQjdDRUQyJTIyJTIwcG9pbnRzJTNEJTIyMTg4NC44MiUyMDcwOS43OCUyMDIwNTQu''@;'; put 'put ''NDUlMjA4NzkuNTclMjAyMDU0LjQ1JTIwNTQwLjE1JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQUZENEU3JTIyJTIwcG9pbnRzJTNEJTIyMTQ4OS4xNCUy''@;'; put 'put ''MDQ1OC4xMiUyMDE0ODkuMTQlMjA0NTguMTIlMjAxMzcxLjEzJTIwMzM5Ljk5JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQUZENEU3JTIyJTIwcG9pbnRz''@;'; put 'put ''JTNEJTIyMTc5Ni4yMiUyMDE1MC45OSUyMDE2NDguNDklMjAzLjEyJTIwMTQyNS4xJTIwMy4xMiUyMDEzMDEuOTElMjAxMjYuMzElMjAxNTYxLjMlMjAzODUuOTUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjM5MUM1RTAlMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxNzk4Ljk1NDA2NiUyQyUyMDM4OC43OTg3ODElMjklMjByb3RhdGUlMjgtNDQuOTcwMDAwJTI5JTIwdHJhbnNsYXRlJTI4LTE3OTguOTU0MDY2JTJDJTIwLTM4OC43OTg3ODEl''@;'; put 'put ''MjklMjAlMjIlMjB4JTNEJTIyMTYzMi44MjQwNyUyMiUyMHklM0QlMjIzNTUuOTMzNzgxJTIyJTIwd2lkdGglM0QlMjIzMzIuMjYlMjIlMjBoZWlnaHQlM0QlMjI2NS43MyUyMiUzRSUzQyUyRnJlY3QlM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzkxQzVFMCUyMiUyMHBvaW50cyUzRCUyMjE1ODYuMDElMjA1NTUuMDglMjAxNjMyLjQ2JTIwNjAxLjU5JTIwMTYzMi40NiUyMDYwMS41OSUyMDE1ODYuMDElMjA1NTUuMDglMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjNCM0VBRUUlMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxNTczLjcxMTU3NyUyQyUyMDQ3MC42MjAyNjMlMjklMjByb3RhdGUlMjgtNDUuMDAwMDAwJTI5JTIwdHJhbnNs''@;'; put 'put ''YXRlJTI4LTE1NzMuNzExNTc3JTJDJTIwLTQ3MC42MjAyNjMlMjklMjAlMjIlMjB4JTNEJTIyMTUyMi42ODE1OCUyMiUyMHklM0QlMjI0MDIuMDg1MjYzJTIyJTIwd2lkdGglM0QlMjIxMDIuMDYlMjIlMjBoZWlnaHQlM0QlMjIxMzcuMDclMjIlM0UlM0MlMkZyZWN0JTNFJTBEJTBBJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjNCM0VBRUUlMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxNzU4LjY3Njc1OCUyQyUyMDY1NS43NjcxMjAlMjklMjByb3RhdGUlMjgtNDQuOTcwMDAwJTI5JTIwdHJh''@;'; put 'put ''bnNsYXRlJTI4LTE3NTguNjc2NzU4JTJDJTIwLTY1NS43NjcxMjAlMjklMjAlMjIlMjB4JTNEJTIyMTcwNy42NDY3NiUyMiUyMHklM0QlMjI1MjguMjkyMTIlMjIlMjB3aWR0aCUzRCUyMjEwMi4wNiUyMiUyMGhlaWdodCUzRCUyMjI1NC45NSUyMiUzRSUzQyUyRnJlY3QlM0UlMEQlMEElMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0IzRUFFRSUyMiUyMHBvaW50cyUzRCUyMjEzMDEuOTElMjAxMjYuMzElMjAxMTc4Ljg0JTIwMy4xMiUyMDEwMzQuNTklMjAzLjEyJTIwMTIyOS43NSUyMDE5OC40NyUy''@;'; put 'put ''MiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzgzQzBDOCUyMiUyMHBvaW50cyUzRCUyMjE4MTIuNjUlMjA3ODEuOTUlMjAyMDU0LjQ1JTIwMTAyMy45OSUyMDIw''@;'; put 'put ''NTQuNDUlMjA4NzkuNTclMjAxODg0LjgyJTIwNzA5Ljc4JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3JlY3QlMjBmaWxsJTNEJTIyJTIzN0RDNkRDJTIyJTIwdHJhbnNmb3JtJTNEJTIydHJhbnNs''@;'; put 'put ''YXRlJTI4MTM5NS41MTY5MDElMkMlMjAyOTIuMjA2NTE5JTI5JTIwcm90YXRlJTI4LTQ1LjAwMDAwMCUyOSUyMHRyYW5zbGF0ZSUyOC0xMzk1LjUxNjkwMSUyQyUyMC0yOTIuMjA2NTE5JTI5JTIwJTIyJTIweCUzRCUyMjEzNDQuNDkxOSUyMiUyMHklM0QlMjIxMDguNzAxNTE5JTIyJTIwd2lk''@;'; put 'put ''dGglM0QlMjIxMDIuMDUlMjIlMjBoZWlnaHQlM0QlMjIzNjcuMDElMjIlM0UlM0MlMkZyZWN0JTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjM2OEI4RDUlMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFu''@;'; put 'put ''c2xhdGUlMjgxNjQ1LjMxMzYxOSUyQyUyMDU0Mi4yNDk3NjAlMjklMjByb3RhdGUlMjgtNDUuMDAwMDAwJTI5JTIwdHJhbnNsYXRlJTI4LTE2NDUuMzEzNjE5JTJDJTIwLTU0Mi4yNDk3NjAlMjklMjAlMjIlMjB4JTNEJTIyMTU5NC4yODM2MiUyMiUyMHklM0QlMjI1MDkuMzg0NzYlMjIlMjB3''@;'; put 'put ''aWR0aCUzRCUyMjEwMi4wNiUyMiUyMGhlaWdodCUzRCUyMjY1LjczJTIyJTNFJTNDJTJGcmVjdCUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRmclM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NnJTIwdHJhbnNm''@;'; put 'put ''b3JtJTNEJTIydHJhbnNsYXRlJTI4MC4wMDAwMDAlMkMlMjAzLjAwMDAwMCUyOSUyMiUyMHN0cm9rZSUzRCUyMiUyMzAwMDAwMCUyMiUyMG9wYWNpdHklM0QlMjIwLjE1JTIyJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcGF0aCUy''@;'; put 'put ''MGQlM0QlMjJNMC45NSUyQzAuMTIlMjBMMC45NSUyQzg0MC4xMiUyMiUyMGlkJTNEJTIyU2hhcGUlMjIlM0UlM0MlMkZwYXRoJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRmcl''@;'; put 'put ''M0UlMEQlMEElMjAlMjAlMjAlMjAlM0MlMkZnJTNFJTBEJTBBJTNDJTJGc3ZnJTNFKTtiYWNrZ3JvdW5kLXNpemU6MTAwJTtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNhbGMoNTgwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKSAwO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdH0ubG9n''@;'; put 'put ''aW4td3JhcHBlciAubG9naW57YmFja2dyb3VuZDp2YXIoLS1jbHItbG9naW4tYmFja2dyb3VuZC1jb2xvcik7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5n''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7aGVpZ2h0OmF1dG87bWluLWhlaWdodDoxMDB2aDt3aWR0aDpjYWxjKDU4MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1mb290ZXIsLmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dp''@;'; put 'put ''bi1oZWFkZXJ7ZGlzcGxheTpmbGV4O3dpZHRoOjEwMCU7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcn0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWZvb3RlciAuYWN0aW9ucywubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWhlYWRlciAuYWN0aW9uc3ttYXJn''@;'; put 'put ''aW4tbGVmdDphdXRvfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4taGVhZGVyIC5sb2dve2hlaWdodDoxNnB4O3dpZHRoOjEwMCU7bWFzazp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCxcICUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTA1JTIyJTIwaGVpZ2h0JTNEJTIyMTYl''@;'; put 'put ''MjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxMDUlMjAxNiUyMiUyMGZpbGwlM0QlMjJub25lJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElM0NwYXRoJTIwZCUzRCUyMk00NC45MzcxJTIwMTQuOEw0MC4zNTk4JTIwMi4wMDA4''@;'; put 'put ''MkM0MC4yOTMyJTIwMS44MDA5NCUyMDQwLjIyNjYlMjAxLjYwMTA2JTIwNDAuMjI2NiUyMDEuNDAxMTdDNDAuMjI2NiUyMDAuODY4MTUzJTIwNDAuNjkzJTIwMC4zNDE3OTclMjA0MS4zNTI2JTIwMC4zNDE3OTdDNDEuOTUyMiUyMDAuMzQxNzk3JTIwNDIuMzQ1MyUyMDAuNzQxNTYzJTIwNDIu''@;'; put 'put ''NDc4NiUyMDEuMjY3OTJMNDYuMjU2NCUyMDEyLjI3NDhMNTAuMTAwOCUyMDEuMjY3OTJDNTAuMzAwNyUyMDAuNzM0OSUyMDUwLjYzMzglMjAwLjM0MTc5NyUyMDUxLjIyNjglMjAwLjM0MTc5N0g1MS4zNkM1MS45NTk3JTIwMC4zNDE3OTclMjA1Mi4zNTI4JTIwMC43NDE1NjMlMjA1Mi41NTI3''@;'; put 'put ''JTIwMS4yNjc5Mkw1Ni4zMzA1JTIwMTIuMjc0OEw2MC4xNzQ5JTIwMS4yMDEyOUM2MC4zMDgyJTIwMC43MzQ5MDElMjA2MC42NDEzJTIwMC4zNDE3OTclMjA2MS4yMzQzJTIwMC4zNDE3OTdDNjEuOTAwNiUyMDAuMzQxNzk3JTIwNjIuMzYwMyUyMDAuODA4MTg4JTIwNjIuMzYwMyUyMDEuNDAx''@;'; put 'put ''MTdDNjIuMzYwMyUyMDEuNjAxMDYlMjA2Mi4yOTM2JTIwMS44Njc1NyUyMDYyLjIyNyUyMDIuMDAwODJMNTcuNTgzMSUyMDE0LjhDNTcuMzE2NiUyMDE1LjQ2NjMlMjA1Ni44NTAyJTIwMTUuNzkyOCUyMDU2LjMyMzglMjAxNS43OTI4SDU2LjI1NzJDNTUuNjU3NSUyMDE1Ljc5MjglMjA1NS4y''@;'; put 'put ''NjQ0JTIwMTUuNDU5NiUyMDU0Ljk5NzklMjAxNC44TDUxLjI4NjglMjAzLjkyNjM2TDQ3LjUwOSUyMDE0LjhDNDcuMzA5MSUyMDE1LjQ2NjMlMjA0Ni44NDk0JTIwMTUuNzkyOCUyMDQ2LjMxNjMlMjAxNS43OTI4SDQ2LjI0OTdDNDUuNjUwMSUyMDE1Ljc5MjglMjA0NS4xOTAzJTIwMTUuNDU5''@;'; put 'put ''NiUyMDQ0LjkyMzglMjAxNC44SDQ0LjkzNzFaJTIyJTIwZmlsbCUzRCUyMiUyMzcxNzE3NSUyMiUyRiUzRSUwQSUzQ3BhdGglMjBkJTNEJTIyTTc4LjM1MjUlMjAxLjQ2NzhDNzguMzUyNSUyMDAuODY4MTUyJTIwNzguODE4OSUyMDAuMzQxNzk3JTIwNzkuNDc4NSUyMDAuMzQxNzk3QzgwLjEz''@;'; put 'put ''ODIlMjAwLjM0MTc5NyUyMDgwLjYwNDUlMjAwLjgwODE4NyUyMDgwLjYwNDUlMjAxLjQ2NzhWNC4wNTI5NkM4MS43MzA2JTIwMS41MzQ0MyUyMDg0LjE4MjUlMjAwLjM0MTc5NyUyMDg1Ljg0MTUlMjAwLjM0MTc5N0M4Ni41MDExJTIwMC4zNDE3OTclMjA4Ni45Njc1JTIwMC44MDgxODclMjA4''@;'; put 'put ''Ni45Njc1JTIwMS40Njc4Qzg2Ljk2NzUlMjAyLjA2NzQ1JTIwODYuNTY3NyUyMDIuNTI3MTglMjA4NS45NzQ3JTIwMi41OTM4MUM4My4wNTY0JTIwMi45MjY5NSUyMDgwLjY3MTIlMjA1LjExMjM0JTIwODAuNjcxMiUyMDkuNDg5NzhWMTQuNTkzNUM4MC42NzEyJTIwMTUuMTkzMSUyMDgwLjIw''@;'; put 'put ''NDglMjAxNS43MTk1JTIwNzkuNTQ1MiUyMDE1LjcxOTVDNzguODg1NiUyMDE1LjcxOTUlMjA3OC40MTkyJTIwMTUuMTg2NCUyMDc4LjQxOTIlMjAxNC41OTM1VjEuNDYxMTQlMjIlMjBmaWxsJTNEJTIyJTIzNzE3MTc1JTIyJTJGJTNFJTBBJTNDcGF0aCUyMGQlM0QlMjJNOTQuMTI5NCUyMDE1''@;'; put 'put ''LjkyNzJDOTAuMDg1MSUyMDE1LjkyNzIlMjA4Ni43MDclMjAxMi43NDI0JTIwODYuNzA3JTIwOC4xNzE3VjguMTA1MDhDODYuNzA3JTIwMy43OTQyNyUyMDg5LjY5MTklMjAwLjM0OTYwOSUyMDkzLjgwMjklMjAwLjM0OTYwOUM5OC4xODAzJTIwMC4zNDk2MDklMjAxMDAuNjk5JTIwMy45OTQx''@;'; put 'put ''NSUyMDEwMC42OTklMjA3LjkxMTg2QzEwMC42OTklMjA4LjUxMTUxJTIwMTAwLjIzMiUyMDguOTcxMjMlMjA5OS42Mzk1JTIwOC45NzEyM0g4OC44OTkxQzg5LjIzMjIlMjAxMi4yMjI3JTIwOTEuNDg0MiUyMDE0LjAwODMlMjA5NC4xMzYlMjAxNC4wMDgzQzk1Ljk5NDklMjAxNC4wMDgzJTIw''@;'; put 'put ''OTcuMzIwOCUyMDEzLjI4MiUyMDk4LjM4MDIlMjAxMi4yODI2Qzk4LjU4MDElMjAxMi4xNDk0JTIwOTguNzglMjAxMi4wMTYxJTIwOTkuMDM5OCUyMDEyLjAxNjFDOTkuNTcyOCUyMDEyLjAxNjElMjAxMDAuMDMzJTIwMTIuNDgyNSUyMDEwMC4wMzMlMjAxMi45NDIyQzEwMC4wMzMlMjAxMy4y''@;'; put 'put ''MDg4JTIwOTkuODk5MyUyMDEzLjQ3NTMlMjA5OS42OTk0JTIwMTMuNjY4NUM5OC4zMDY5JTIwMTQuOTk0NCUyMDk2LjY0NzklMjAxNS45MjA1JTIwOTQuMTI5NCUyMDE1LjkyMDVWMTUuOTI3MlpNOTguNTA2OCUyMDcuMjM4OTFDOTguMzA2OSUyMDQuNTIwNTElMjA5Ni43MTQ1JTIwMi4xMzUy''@;'; put 'put ''MyUyMDkzLjgwMjklMjAyLjEzNTIzQzkxLjIxNzclMjAyLjEzNTIzJTIwODkuMjkyMiUyMDQuMzIwNjIlMjA4OC45NjU3JTIwNy4yMzg5MUg5OC41MTM1SDk4LjUwNjhaJTIyJTIwZmlsbCUzRCUyMiUyMzcxNzE3NSUyMiUyRiUzRSUwQSUzQ3BhdGglMjBkJTNEJTIyTTYyLjM3NSUyMDExLjIx''@;'; put 'put ''NThDNjIuMzc1JTIwNy45NjQ0JTIwNjUuMDI2OCUyMDYuMzA1MzclMjA2OC44MDQ2JTIwNi4zMDUzN0M3MC43MzAxJTIwNi4zMDUzNyUyMDcyLjEyMjYlMjA2LjU3MTg4JTIwNzMuNDQxOSUyMDYuOTcxNjVWNi40Mzg2M0M3My40NDE5JTIwMy43MjAyMiUyMDcxLjc4MjglMjAyLjMyNzclMjA2''@;'; put 'put ''OC45MzEyJTIwMi4zMjc3QzY3LjQwNTQlMjAyLjMyNzclMjA2Ni41NDU5JTIwMi41Mjc1OCUyMDY1LjQxOTklMjAyLjk5Mzk3QzY1LjI4NjYlMjAzLjA2MDYlMjA2NS4xNTM0JTIwMy4wNjA2JTIwNjUuMDIwMSUyMDMuMDYwNkM2NC40ODcxJTIwMy4wNjA2JTIwNjQuMDI3NCUyMDIuNTk0MjEl''@;'; put 'put ''MjA2NC4wMjc0JTIwMi4wNjc4NUM2NC4wMjc0JTIwMS42MDE0NiUyMDY0LjIyNzMlMjAxLjM0MTYxJTIwNjQuNjI3JTIwMS4xNDE3MkM2Ni4wODYyJTIwMC40NzU0NDclMjA2Ny4yMTIyJTIwMC4yODIyMjclMjA2OS4xMzc3JTIwMC4yODIyMjdDNzEuMjU2NSUyMDAuMjgyMjI3JTIwNzIuOTE1''@;'; put 'put ''NSUyMDAuODE1MjUyJTIwNzMuOTc0OSUyMDEuOTQxMjZDNzQuOTY3NiUyMDIuOTM0MDElMjA3NS41MDA3JTIwNC4zOTMxNiUyMDc1LjUwMDclMjA2LjMxODdWMTQuNjA3MkM3NS41MDA3JTIwMTUuMjczNSUyMDc1LjAzNDMlMjAxNS43MzMyJTIwNzQuNDQxMyUyMDE1LjczMzJDNzMuNzc1JTIw''@;'; put 'put ''MTUuNzMzMiUyMDczLjM4MTklMjAxNS4yNjY4JTIwNzMuMzgxOSUyMDE0LjY3MzhWMTMuMjE0N0M3Mi4zMjI1JTIwMTQuNjA3MiUyMDcwLjU5NjklMjAxNS43OTk4JTIwNjcuOTQ1MSUyMDE1Ljc5OThDNjUuMjI2NyUyMDE1LjkzMzElMjA2Mi4zNzUlMjAxNC4zNDA3JTIwNjIuMzc1JTIwMTEu''@;'; put 'put ''MjIyNVYxMS4yMTU4Wk03My41MTUyJTIwMTAuMDg5OFY4LjYzMDY4QzcyLjM4OTElMjA4LjI5NzU0JTIwNzAuOTMlMjA3Ljk2NDQlMjA2OS4wNzExJTIwNy45NjQ0QzY2LjIxOTQlMjA3Ljk2NDQlMjA2NC42OTM3JTIwOS4yMjM2NiUyMDY0LjY5MzclMjAxMS4wODI2VjExLjE0OTJDNjQuNjkz''@;'; put 'put ''NyUyMDEzLjA3NDclMjA2Ni40MTkzJTIwMTQuMTM0MSUyMDY4LjQ3MTQlMjAxNC4xMzQxQzcxLjI1NjUlMjAxNC4xMzQxJTIwNzMuNTA4NSUyMDEyLjQ3NTElMjA3My41MDg1JTIwMTAuMDg5OEg3My41MTUyWiUyMiUyMGZpbGwlM0QlMjIlMjM3MTcxNzUlMjIlMkYlM0UlMEElM0NwYXRoJTIw''@;'; put 'put ''ZCUzRCUyMk00LjEwMjIyJTIwMS4yNjg2MkMzLjYzNTgzJTIwMC4yMDkyMzclMjAyLjM3NjU2JTIwLTAuMzIzNzg3JTIwMS4yNTA1NSUyMDAuMjA5MjM1QzAuMTI0NTQ1JTIwMC43NDIyNTYlMjAtMC4yNzUyMTglMjAyLjAwMTUyJTIwMC4xOTExNzYlMjAzLjA2MDlMNC45NjE3MiUyMDEzLjQ3''@;'; put 'put ''NDhDNS42ODc5NiUyMDE1LjEzMzglMjA2LjQ4NzQ5JTIwMTUuOTI2NyUyMDguMDEzMjclMjAxNS45MjY3QzkuNTM5MDQlMjAxNS45MjY3JTIwMTAuMjY1MyUyMDE1LjAwMDYlMjAxMS4wNjQ4JTIwMTMuNDc0OEMxMS4wNjQ4JTIwMTMuNDc0OCUyMDE1LjI0MjQlMjA0LjM4Njc5JTIwMTUuMzA5''@;'; put 'put ''JTIwNC4zMjY4M0MxNS4zNzU2JTIwNC4yNjAyJTIwMTUuNTA4OSUyMDMuOTI3MDYlMjAxNS45MDg2JTIwMy45MjcwNkMxNi4yNDE4JTIwMy45MjcwNiUyMDE2LjU2ODMlMjA0LjE5MzU3JTIwMTYuNTY4MyUyMDQuNTkzMzRWMTMuNDgxNUMxNi41NjgzJTIwMTQuODc0JTIwMTcuMjk0NSUyMDE2''@;'; put 'put ''JTIwMTguODIwMyUyMDE2QzIwLjM0NjElMjAxNiUyMDIxLjA3MjMlMjAxNC44NzQlMjAyMS4wNzIzJTIwMTMuNDgxNVY2LjE4NTc0QzIxLjA3MjMlMjA0Ljc5MzIyJTIwMjIuMDY1JTIwMy44NjcxJTIwMjMuNDU3NiUyMDMuODY3MUMyNC44NTAxJTIwMy44NjcxJTIwMjUuNzA5NiUyMDQuNzkz''@;'; put 'put ''MjIlMjAyNS43MDk2JTIwNi4xODU3NFYxMy40ODE1QzI1LjcwOTYlMjAxNC44NzQlMjAyNi40NDI1JTIwMTYlMjAyNy45NjE2JTIwMTZDMjkuNDgwNyUyMDE2JTIwMzAuMjEzNiUyMDE0Ljg3NCUyMDMwLjIxMzYlMjAxMy40ODE1VjYuMTg1NzRDMzAuMjEzNiUyMDQuNzkzMjIlMjAzMS4yMDY0''@;'; put 'put ''JTIwMy44NjcxJTIwMzIuNTk4OSUyMDMuODY3MUMzMy45OTE0JTIwMy44NjcxJTIwMzQuODUwOSUyMDQuNzkzMjIlMjAzNC44NTA5JTIwNi4xODU3NFYxMy40ODE1QzM0Ljg1MDklMjAxNC44NzQlMjAzNS41NzcxJTIwMTYlMjAzNy4xMDI5JTIwMTZDMzguNjI4NyUyMDE2JTIwMzkuMzU0OSUy''@;'; put 'put ''MDE0Ljg3NCUyMDM5LjM1NDklMjAxMy40ODE1VjUuMTkyOTlDMzkuMzU0OSUyMDIuMTQxNDQlMjAzNi45MDMlMjAwLjAyMjY3ODElMjAzMy45ODQ3JTIwMC4wMjI2NzgxQzMxLjA2NjQlMjAwLjAyMjY3ODElMjAyOS4yMTQyJTIwMi4wODE0OCUyMDI5LjIxNDIlMjAyLjA4MTQ4QzI4LjA4ODIl''@;'; put 'put ''MjAwLjgyMjIxMyUyMDI2Ljc2MjMlMjAwLjAyMjY3ODElMjAyNC41MTAzJTIwMC4wMjI2NzgxQzIyLjEyNSUyMDAuMDIyNjc4MSUyMDE5Ljk5OTYlMjAyLjA4MTQ4JTIwMTkuOTk5NiUyMDIuMDgxNDhDMTkuMDA2OCUyMDAuODIyMjEzJTIwMTcuMzQ3OCUyMDAuMDIyNjc4MSUyMDE1Ljk1NTMl''@;'; put 'put ''MjAwLjAyMjY3ODFDMTMuODM2NSUyMDAuMDIyNjc4MSUyMDEyLjExMDklMjAwLjk0ODgwNSUyMDExLjExODElMjAzLjM0MDc0TDguMDY2NTclMjAxMC41Njk4TDQuMDg4ODklMjAxLjI4ODYxTDQuMTAyMjIlMjAxLjI2ODYyWiUyMiUyMGZpbGwlM0QlMjIlMjM3MTcxNzUlMjIlMkYlM0UlMEEl''@;'; put 'put ''M0NwYXRoJTIwZCUzRCUyMk0xMDAuODkyJTIwMi4yMDA3MUMxMDAuODkyJTIwMS4xNDEzMyUyMDEwMS42ODQlMjAwLjM0MTc5NyUyMDEwMi43NTElMjAwLjM0MTc5N0MxMDMuODE3JTIwMC4zNDE3OTclMjAxMDQuNjA5JTIwMS4yMDEyOSUyMDEwNC42MDklMjAyLjIwMDcxQzEwNC42MDklMjAz''@;'; put 'put ''LjIwMDEzJTIwMTAzLjgxNyUyMDQuMDU5NjIlMjAxMDIuNzUxJTIwNC4wNTk2MkMxMDEuNzU4JTIwNC4wNTk2MiUyMDEwMC44OTIlMjAzLjIwMDEzJTIwMTAwLjg5MiUyMDIuMjAwNzFaTTEwNC4yNyUyMDIuMjAwNzFDMTA0LjI3JTIwMS4zNDEyMSUyMDEwMy42MSUyMDAuNjc0OTM1JTIwMTAy''@;'; put 'put ''Ljc0NCUyMDAuNjc0OTM1QzEwMS44NzglMjAwLjY3NDkzNSUyMDEwMS4yMTglMjAxLjQwMTE4JTIwMTAxLjIxOCUyMDIuMjAwNzFDMTAxLjIxOCUyMDMuMDYwMjElMjAxMDEuODc4JTIwMy43MjY0OCUyMDEwMi43NDQlMjAzLjcyNjQ4QzEwMy42MSUyMDMuNzI2NDglMjAxMDQuMjclMjAzLjAw''@;'; put 'put ''MDI0JTIwMTA0LjI3JTIwMi4yMDA3MVolMjIlMjBmaWxsJTNEJTIyJTIzNzE3MTc1JTIyJTJGJTNFJTBBJTNDcGF0aCUyMGQlM0QlMjJNMTAyLjA4NSUyMDEuNDAyMDNDMTAyLjA4NSUyMDEuMjY4NzclMjAxMDIuMTUyJTIwMS4yMDIxNSUyMDEwMi4yODUlMjAxLjIwMjE1SDEwMi44ODVDMTAz''@;'; put 'put ''LjE1MSUyMDEuMjAyMTUlMjAxMDMuMjg0JTIwMS4yNjg3NyUyMDEwMy40MTglMjAxLjQwMjAzQzEwMy41NTElMjAxLjUzNTI4JTIwMTAzLjU1MSUyMDEuNjY4NTQlMjAxMDMuNTUxJTIwMS44MDE3OUMxMDMuNTUxJTIwMi4wNjgzJTIwMTAzLjQxOCUyMDIuMjY4MTklMjAxMDMuMjE4JTIwMi4z''@;'; put 'put ''MzQ4MkwxMDMuNDg0JTIwMi42Njc5NkMxMDMuNTI5JTIwMi43MTIzNyUyMDEwMy41NTElMjAyLjc1Njc5JTIwMTAzLjU1MSUyMDIuODAxMjFDMTAzLjU1MSUyMDIuOTM0NDYlMjAxMDMuNDg0JTIwMy4wMDEwOSUyMDEwMy4zNTElMjAzLjAwMTA5QzEwMy4yODQlMjAzLjAwMTA5JTIwMTAzLjIx''@;'; put 'put ''OCUyMDIuOTM0NDclMjAxMDMuMTUxJTIwMi44Njc4NEwxMDIuNzUxJTIwMi40MDE0NEgxMDIuNDE4VjIuODAxMjFDMTAyLjQxOCUyMDIuOTM0NDYlMjAxMDIuMzUyJTIwMy4wMDEwOSUyMDEwMi4yMTglMjAzLjAwMTA5QzEwMi4wODUlMjAzLjAwMTA5JTIwMTAyLjAxOSUyMDIuOTM0NDYlMjAx''@;'; put 'put ''MDIuMDE5JTIwMi44MDEyMVYxLjQwODY5SDEwMi4wODVWMS40MDIwM1pNMTAyLjg3OCUyMDIuMTI4MjdDMTAzLjA3OCUyMDIuMTI4MjclMjAxMDMuMjExJTIwMS45OTUwMiUyMDEwMy4yMTElMjAxLjg2MTc2QzEwMy4yMTElMjAxLjY2MTg4JTIwMTAzLjA3OCUyMDEuNTk1MjUlMjAxMDIuODc4''@;'; put 'put ''JTIwMS41OTUyNUgxMDIuNDc4VjIuMTI4MjdIMTAyLjg3OFolMjIlMjBmaWxsJTNEJTIyJTIzNzE3MTc1JTIyJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBKTttYXNrLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbG9naW4tbG9nby1jb2xvcil9LmxvZ2luLXdy''@;'; put 'put ''YXBwZXIgLmxvZ2luIC5sb2dpbi1mb290ZXJ7Z2FwOnZhcigtLWNsci1sb2dpbi1mb290ZXItZ2FwKX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWZvb3RlciBhLC5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZm9vdGVyIC5jb3B5cmlnaHR7Zm9udC1zaXplOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3Bh''@;'; put 'put ''Y2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItbG9naW4tY29weXJpZ2h0LWNvbG9yKX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWJvZHl7aGVpZ2h0OjEwMCU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0''@;'; put 'put ''aW9uOmNvbHVtbjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aWR0aDpjYWxjKDMyMCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC50aXRsZXtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHkt''@;'; put 'put ''ZGlzcGxheS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktbGV0dGVyLXNwYWNpbmcpO2NvbG9yOnZhcigtLWNsci1sb2dpbi10aXRsZS1jb2xvcil9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC50aXRsZSAud2VsY29tZXtjb2xvcjp2YXIoLS1jbHItbG9naW4td2VsY29tZS1jb2xvcik7bWFyZ2luOjAgMCB2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDB9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC50aXRsZSAuc3VidGl0bGUsLmxvZ2luLXdyYXBwZXIgLmxvZ2luIC50aXRsZSAuaGludHtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVy''@;'; put 'put ''LXNwYWNpbmcpO2NvbG9yOnZhcigtLWNsci1sb2dpbi1oaW50LWNvbG9yKTttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwIDAgMH0ubG9naW4td3JhcHBlciAubG9naW4gLnRyYWRlbWFya3tjb2xvcjp2YXIoLS1jbHItbG9naW4tdHJhZGVtYXJrLWNvbG9yKTtmb250LXdlaWdo''@;'; put 'put ''dDp2YXIoLS1jbHItbG9naW4tdHJhZGVtYXJrLWZvbnQtd2VpZ2h0KTtmb250LWZhbWlseTp2YXIoLS1jbHItbG9naW4tdHJhZGVtYXJrLWZvbnQtZmFtaWx5KTtmb250LXNpemU6dmFyKC0tY2xyLWxvZ2luLXRyYWRlbWFyay1mb250LXNpemUpO2xldHRlci1zcGFjaW5nOnZhcigtLWNsci1s''@;'; put 'put ''b2dpbi10cmFkZW1hcmstbGV0dGVyLXNwYWNpbmcpfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXB7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzKTt3aWR0aDoxMDAlfS5sb2dpbi13cmFwcGVy''@;'; put 'put ''IC5sb2dpbiAubG9naW4tZ3JvdXAgLmF1dGgtc291cmNlLC5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLnVzZXJuYW1lLC5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLnBhc3N3b3JkLC5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNoZWNr''@;'; put 'put ''Ym94LC5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1mb3JtLWNvbnRyb2x7bWFyZ2luOjAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpIDB9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuY2xyLWNoZWNrYm94LXdyYXBwZXJ7bWFyZ2luOjAgMCB2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzKSAwfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1jb250cm9sLWNvbnRhaW5lcntkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCV9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuY2xyLWNvbnRyb2wtY29udGFp''@;'; put 'put ''bmVyIC5jbHItc2VsZWN0LXdyYXBwZXIsLmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItc2VsZWN0e3dpZHRoOjEwMCV9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5j''@;'; put 'put ''bHItaW5wdXQtd3JhcHBlcj4uY2xyLWlucHV0e3dpZHRoOjEwMCV9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQtd3JhcHBlcnt3aWR0aDoxMDAlfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNs''@;'; put 'put ''ci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXI+LmNsci1pbnB1dC1ncm91cHttYXgtd2lkdGg6MTAwJTt3aWR0aDoxMDAlfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXI+LmNsci1p''@;'; put 'put ''bnB1dC1ncm91cD4uY2xyLWlucHV0e3dpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkpfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLnRvb2x0aXAtdmFsaWRhdGlvbnttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCl9LmxvZ2lu''@;'; put 'put ''LXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAudG9vbHRpcC12YWxpZGF0aW9uIC51c2VybmFtZSwubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC50b29sdGlwLXZhbGlkYXRpb24gLnBhc3N3b3Jke3dpZHRoOjEwMCU7bWFyZ2luLXRvcDowfS5sb2dpbi13cmFwcGVyIC5s''@;'; put 'put ''b2dpbiAubG9naW4tZ3JvdXAgLmVycm9ye2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OmNhbGMoMjAq''@;'; put 'put ''KDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7ZGlzcGxheTpub25lO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtiYWNrZ3JvdW5kOnZhcigtLWNs''@;'; put 'put ''ci1sb2dpbi1lcnJvci1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVy''@;'; put 'put ''LXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1ib3JkZXItY29sb3IpfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmVycm9yOmJlZm9yZXtjb250ZW50OiIiO21hc2s6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUy''@;'; put 'put ''MHZlcnNpb24lM0QlMjIxLjElMjIlMjB2aWV3Qm94JTNEJTIyNSUyMDUlMjAyNiUyMDI2JTIyJTIwcHJlc2VydmVBc3BlY3RSYXRpbyUzRCUyMnhNaWRZTWlkJTIwbWVldCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIweG1sbnMlM0F4''@;'; put 'put ''bGluayUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMTk5OSUyRnhsaW5rJTIyJTNFJTNDZGVmcyUzRSUzQ3N0eWxlJTNFLmNsci1pLW91dGxpbmUlN0JmaWxsJTNBJ25vbmUnJTNCJTdEJTNDJTJGc3R5bGUlM0UlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VleGNsYW1hdGlvbi1jaXJjbGUtbGluZSUzQyUyRnRpdGxlJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xJTIyJTIwZCUzRCUyMk0xOCUyQzZBMTIlMkMxMiUyQzAlMkMxJTJDMCUyQzMwJTJDMTglMkMxMiUyQzEyJTJDMCUyQzAlMkMwJTJDMTglMkM2Wm0wJTJDMjJBMTAlMkMxMCUyQzAlMkMxJTJDMSUyQzI4JTJDMTglMkMxMCUyQzEwJTJDMCUyQzAlMkMxJTJDMTglMkMy''@;'; put 'put ''OFolMjIlM0UlM0MlMkZwYXRoJTNFJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUtcGF0aC0yJTIyJTIwZCUzRCUyMk0xOCUyQzIwLjA3YTEuMyUyQzEuMyUyQzAlMkMwJTJDMS0xLjMtMS4zdi02YTEuMyUyQzEuMyUyQzAlMkMxJTJDMSUyQzIuNiUy''@;'; put 'put ''QzB2NkExLjMlMkMxLjMlMkMwJTJDMCUyQzElMkMxOCUyQzIwLjA3WiUyMiUzRSUzQyUyRnBhdGglM0UlM0NjaXJjbGUlMjBjbGFzcyUzRCUyMmNsci1pLW91dGxpbmUlMjBjbHItaS1vdXRsaW5lLXBhdGgtMyUyMiUyMGN4JTNEJTIyMTcuOTUlMjIlMjBjeSUzRCUyMjIzLjAyJTIyJTIwciUz''@;'; put 'put ''RCUyMjEuNSUyMiUzRSUzQyUyRmNpcmNsZSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRnN2ZyUzRSIpO21hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXNpemU6Y292ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbG9naW4tZXJyb3ItaWNvbi1j''@;'; put 'put ''b2xvcik7bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSAwIDA7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdy''@;'; put 'put ''b3VwIC5lcnJvci5hY3RpdmV7ZGlzcGxheTpmbGV4fS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmVycm9yLmFjdGl2ZTpiZWZvcmV7ZmxleDowIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5idG57bWFy''@;'; put 'put ''Z2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgMDttYXgtd2lkdGg6bm9uZX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5zaWdudXB7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7Zm9udC1zaXplOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpO3RleHQtYWxpZ246Y2VudGVyfS5sb2dpbi13cmFw''@;'; put 'put ''cGVyIC5sb2dpbjphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmxhY2spO29wYWNpdHk6LjE7dG9wOjA7cmln''@;'; put 'put ''aHQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpKX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2OHB4KXsubG9naW4td3JhcHBlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2JhY2tncm91bmQ6dmFyKC0tY2xyLWxvZ2luLWJhY2tncm91bmQtY29sb3IpfS5sb2dpbi13''@;'; put 'put ''cmFwcGVyIC5sb2dpbnt3aWR0aDoxMDAlO21hcmdpbi1sZWZ0OjA7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpIDIwJX0ubG9naW4td3JhcHBlciAubG9naW46YWZ0ZXJ7Y29udGVudDpub25lfX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjU3NnB4KXsubG9naW4td3Jh''@;'; put 'put ''cHBlciAubG9naW57cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpIDE1JX19Lm1haW4tY29udGFpbmVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMHZoO2JhY2tncm91bmQ6dmFyKC0tY2xyLWdsb2JhbC1hcHAtYmFja2dyb3VuZCl9Lm1haW4t''@;'; put 'put ''Y29udGFpbmVyIC5hbGVydC5hbGVydC1hcHAtbGV2ZWx7ZmxleDowIDAgYXV0bztvdmVyZmxvdy14OmhpZGRlbn0ubWFpbi1jb250YWluZXIgaGVhZGVyLC5tYWluLWNvbnRhaW5lciAuaGVhZGVye2ZsZXg6MCAwIHZhcigtLWNsci1oZWFkZXItaGVpZ2h0KX0ubWFpbi1jb250YWluZXIgLnN1''@;'; put 'put ''Yi1uYXYsLm1haW4tY29udGFpbmVyIC5zdWJuYXZ7ZmxleDowIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSl9Lm1haW4tY29udGFpbmVyIC51LW1haW4tY29udGFpbmVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleDoxIDEgYXV0bztvdmVyZmxvdzpoaWRkZW59''@;'; put 'put ''Lm1haW4tY29udGFpbmVyIC5jb250ZW50LWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7ZmxleDoxIDEgYXV0bzttaW4taGVpZ2h0Oi4wNXJlbX0ubWFpbi1jb250YWluZXIgLmNvbnRlbnQtY29udGFpbmVyIC5jb250ZW50LWFyZWF7ZmxleDoxIDEgYXV0bztvdmVyZmxvdy15OmF1dG87LXdlYmtp''@;'; put 'put ''dC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7cGFkZGluZzoxLjJyZW19Lm1haW4tY29udGFpbmVyIC5jb250ZW50LWNvbnRhaW5lciAuY29udGVudC1hcmVhPjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9Lm1haW4tY29udGFpbmVyIC5jb250ZW50LWNvbnRhaW5lciAuY2xyLXZlcnRpY2Fs''@;'; put 'put ''LW5hdntmbGV4OjAgMCBhdXRvO29yZGVyOi0xfUBtZWRpYSBwcmludHsubWFpbi1jb250YWluZXJ7aGVpZ2h0OmF1dG99fWJvZHkubm8tc2Nyb2xsaW5nLGJvZHlbY2RzLWxheW91dD1uby1zY3JvbGxpbmddLGJvZHkubm8tc2Nyb2xsaW5nIC5tYWluLWNvbnRhaW5lciAuY29udGVudC1jb250''@;'; put 'put ''YWluZXIgLmNvbnRlbnQtYXJlYSxib2R5W2Nkcy1sYXlvdXQ9bm8tc2Nyb2xsaW5nXSAubWFpbi1jb250YWluZXIgLmNvbnRlbnQtY29udGFpbmVyIC5jb250ZW50LWFyZWF7b3ZlcmZsb3c6aGlkZGVufTpyb290IFtjZHMtdGhlbWVdey0tY2xyLW1vZGFsLWJvcmRlci1yYWRpdXM6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItbW9kYWwtY2xvc2UtY29sb3I6dmFyKC0tY2xyLWNsb3NlLWNvbG9yKTstLWNsci1tb2RhbC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTstLWNsci1tb2RhbC1jb250''@;'; put 'put ''ZW50LWJveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMzAwKTstLWNsci1tb2RhbC1iYWNrZHJvcC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW92ZXJsYXktYmFja2Ryb3AtYmFja2dyb3VuZCk7LS1jbHItbW9kYWwtc20td2lkdGg6Y2FsYygyODggKiAoMXJl''@;'; put 'put ''bSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNsci1tb2RhbC1tZC13aWR0aDpjYWxjKDU3NiAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2xyLW1vZGFsLWxnLXdpZHRoOmNhbGMoODY0ICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jbHIt''@;'; put 'put ''bW9kYWwteGwtd2lkdGg6Y2FsYygxMTUyICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jbHItbW9kYWwtdGl0bGUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1tb2RhbC10aXRsZS1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemUpOy0tY2xyLW1vZGFsLXRpdGxlLWZvbnQtZmFtaWx5OnZhcigtLWNsci1mb250KTstLWNsci1tb2RhbC10aXRsZS1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtd2VpZ2h0KTstLWNsci1tb2Rh''@;'; put 'put ''bC10aXRsZS1saW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0KTstLWNsci1tb2RhbC10aXRsZS1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxldHRlci1zcGFjaW5nKX0uY2xyLXNpZGUtcGFu''@;'; put 'put ''ZWwtcGlubmVkLXNte3BhZGRpbmctcmlnaHQ6dmFyKC0tY2xyLW1vZGFsLXNtLXdpZHRoKSFpbXBvcnRhbnR9LmNsci1zaWRlLXBhbmVsLXBpbm5lZC1tZHtwYWRkaW5nLXJpZ2h0OnZhcigtLWNsci1tb2RhbC1tZC13aWR0aCkhaW1wb3J0YW50fS5jbHItc2lkZS1wYW5lbC1waW5uZWQtbGd7''@;'; put 'put ''cGFkZGluZy1yaWdodDp2YXIoLS1jbHItbW9kYWwtbGctd2lkdGgpIWltcG9ydGFudH0uY2xyLXNpZGUtcGFuZWwtcGlubmVkLXhse3BhZGRpbmctcmlnaHQ6dmFyKC0tY2xyLW1vZGFsLXhsLXdpZHRoKSFpbXBvcnRhbnR9LmNsci1tb2RhbC1ob3N0e292ZXJmbG93OmhpZGRlbjtwb3NpdGlv''@;'; put 'put ''bjpyZWxhdGl2ZX0uY2xyLW1vZGFsLWhvc3QgLm1vZGFsLC5jbHItbW9kYWwtaG9zdCAubW9kYWwtYmFja2Ryb3B7cG9zaXRpb246YWJzb2x1dGV9Lm1vZGFse3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ei1pbmRleDoxMDUwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47anVz''@;'; put 'put ''dGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkqMik7bWF4LXdpZHRoOjEwMCV9Lm1vZGFsIC5hbGVydCsubW9kYWwtaGVhZGVyLC5tb2RhbCAuYWxlcnQrLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZXtt''@;'; put 'put ''YXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NzZweCl7Lm1vZGFse3BhZGRpbmc6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpLzIpfX0ubW9kYWwgLm1vZGFsLWJvZHl7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTkpfS5zaWRlLXBhbmVsIC5tb2RhbHtsZWZ0OmluaXRpYWw7cGFkZGluZzowO2hlaWdodDoxMDAlfS5zaWRlLXBhbmVsIC5tb2RhbCAubW9kYWwtY29udGVudC13cmFwcGVye2hlaWdodDoxMDAlfS5zaWRlLXBhbmVsIC5tb2RhbCAubW9kYWwtY29udGVudC13cmFwcGVyIC5tb2Rh''@;'; put 'put ''bC1jb250ZW50e2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LnNpZGUtcGFuZWwgLm1vZGFsIC5tb2RhbC1kaWFsb2d7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2hlaWdodDoxMDAlfS5zaWRlLXBhbmVsIC5tb2RhbC5tb2RhbC1mdWxsLXNjcmVlbntp''@;'; put 'put ''bnNldDowO3BhZGRpbmc6MH0uc2lkZS1wYW5lbCAubW9kYWwgLm1vZGFsLWJvZHktd3JhcHBlcntmbGV4OjEgMTttYXgtaGVpZ2h0OjEwMCV9Lm1vZGFsLWRpYWxvZ3twb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjEwNTA7d2lkdGg6dmFyKC0tY2xyLW1vZGFsLW1kLXdpZHRoKTtib3JkZXIt''@;'; put 'put ''cmFkaXVzOnZhcigtLWNsci1tb2RhbC1ib3JkZXItcmFkaXVzKTtib3gtc2hhZG93OnZhcigtLWNsci1tb2RhbC1jb250ZW50LWJveC1zaGFkb3cpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29u''@;'; put 'put ''dGFpbmVyLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbW9kYWwtYmctY29sb3IpO21heC13aWR0aDoxMDAlfS5tb2RhbC1kaWFsb2cubW9kYWwtc217d2lkdGg6dmFyKC0tY2xyLW1vZGFsLXNtLXdpZHRoKX0ubW9kYWwtZGlhbG9nLm1vZGFsLWxne3dpZHRoOnZh''@;'; put 'put ''cigtLWNsci1tb2RhbC1sZy13aWR0aCl9Lm1vZGFsLWRpYWxvZy5tb2RhbC14bHt3aWR0aDp2YXIoLS1jbHItbW9kYWwteGwtd2lkdGgpfS5tb2RhbC1oZWFkZXIsLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZXtib3JkZXItYm90dG9tOm5vbmU7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTkpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkgMH0ubW9kYWwtaGVhZGVyKy5tb2RhbC1mb290ZXIsLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSsubW9kYWwtZm9vdGVye3BhZGRpbmctdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9Lm1vZGFsLWhlYWRlci0tYWNjZXNzaWJs''@;'; put 'put ''ZXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6ZmxleC1zdGFydH0ubW9kYWwtaGVhZGVyIC5tb2RhbC10aXRsZSwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5tb2RhbC10aXRsZSwubW9kYWwtaGVhZGVyIC5zaWRlLXBhbmVsLXRpdGxl''@;'; put 'put ''LC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLnNpZGUtcGFuZWwtdGl0bGV7Y29sb3I6dmFyKC0tY2xyLW1vZGFsLXRpdGxlLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpO21hcmdpbjow''@;'; put 'put ''fS5tb2RhbC1oZWFkZXIgLm1vZGFsLXRpdGxlOm5vdChbY2RzLXRleHRdKSwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5tb2RhbC10aXRsZTpub3QoW2Nkcy10ZXh0XSksLm1vZGFsLWhlYWRlciAuc2lkZS1wYW5lbC10aXRsZTpub3QoW2Nkcy10ZXh0XSksLm1vZGFsLWhlYWRlci0tYWNj''@;'; put 'put ''ZXNzaWJsZSAuc2lkZS1wYW5lbC10aXRsZTpub3QoW2Nkcy10ZXh0XSl7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLW1vZGFsLXRpdGxlLWZvbnQtZmFtaWx5KTtmb250LXNpemU6dmFyKC0tY2xyLW1vZGFsLXRpdGxlLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLW1vZGFsLXRpdGxl''@;'; put 'put ''LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jbHItbW9kYWwtdGl0bGUtbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNsci1tb2RhbC10aXRsZS1sZXR0ZXItc3BhY2luZyl9Lm1vZGFsLWhlYWRlciAuY2xvc2UsLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAuY2xv''@;'; put 'put ''c2UsLm1vZGFsLWhlYWRlciAucGlubmFibGUsLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAucGlubmFibGV7Zm9udC1zaXplOmluaXRpYWw7bGluZS1oZWlnaHQ6aW5pdGlhbH0ubW9kYWwtaGVhZGVyIC5jbG9zZSBjZHMtaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5jbG9zZSBj''@;'; put 'put ''ZHMtaWNvbiwubW9kYWwtaGVhZGVyIC5jbG9zZSBjbHItaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5jbG9zZSBjbHItaWNvbiwubW9kYWwtaGVhZGVyIC5waW5uYWJsZSBjZHMtaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5waW5uYWJsZSBjZHMtaWNvbiwubW9kYWwt''@;'; put 'put ''aGVhZGVyIC5waW5uYWJsZSBjbHItaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5waW5uYWJsZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1tb2RhbC1jbG9zZS1jb2xvcik7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS05KX0ubW9kYWwtaGVhZGVyIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwubW9kYWwtaGVhZGVyIC5jbG9zZTpob3ZlciBjbHItaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5jbG9zZTpob3ZlciBj''@;'; put 'put ''bHItaWNvbiwubW9kYWwtaGVhZGVyIC5waW5uYWJsZTpob3ZlciBjZHMtaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5waW5uYWJsZTpob3ZlciBjZHMtaWNvbiwubW9kYWwtaGVhZGVyIC5waW5uYWJsZTpob3ZlciBjbHItaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5w''@;'; put 'put ''aW5uYWJsZTpob3ZlciBjbHItaWNvbntmaWxsOnZhcigtLWNsci1jbG9zZS1jb2xvci1ob3Zlcil9Lm1vZGFsLWhlYWRlciAuY2xvc2U6aG92ZXI6YWN0aXZlIGNkcy1pY29uLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLmNsb3NlOmhvdmVyOmFjdGl2ZSBjZHMtaWNvbiwubW9kYWwtaGVh''@;'; put 'put ''ZGVyIC5jbG9zZTpob3ZlcjphY3RpdmUgY2xyLWljb24sLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAuY2xvc2U6aG92ZXI6YWN0aXZlIGNsci1pY29uLC5tb2RhbC1oZWFkZXIgLnBpbm5hYmxlOmhvdmVyOmFjdGl2ZSBjZHMtaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5waW5u''@;'; put 'put ''YWJsZTpob3ZlcjphY3RpdmUgY2RzLWljb24sLm1vZGFsLWhlYWRlciAucGlubmFibGU6aG92ZXI6YWN0aXZlIGNsci1pY29uLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLnBpbm5hYmxlOmhvdmVyOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1jbG9zZS1jb2xvci1hY3RpdmUp''@;'; put 'put ''fS5tb2RhbC1oZWFkZXIgLnBpbm5hYmxlLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLnBpbm5hYmxle3BhZGRpbmc6MDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MDttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTthcHBlYXJhbmNlOm5vbmU7''@;'; put 'put ''LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Lm1vZGFsLXRpdGxlLXdyYXBwZXJ7ZmxleDoxfS5tb2RhbC10aXRsZS13cmFwcGVyIC5tb2RhbC10aXRsZSBoMywubW9kYWwtdGl0bGUtd3JhcHBlciAuc2lkZS1wYW5lbC10aXRsZSBoM3ttYXJnaW4tdG9wOjB9Lm1vZGFsLWJvZHktd3JhcHBlcntt''@;'; put 'put ''YXgtaGVpZ2h0Ojcwdmg7b3ZlcmZsb3cteTphdXRvO292ZXJmbG93LXg6aGlkZGVufS5tb2RhbC1ib2R5LXdyYXBwZXIgLm1vZGFsLWJvZHksLm1vZGFsLWJvZHktd3JhcHBlciAuc2lkZS1wYW5lbC1ib2R5e2NvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7Zm9u''@;'; put 'put ''dC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTts''@;'; put 'put ''ZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKX0ubW9kYWwtYm9keS13cmFwcGVyPjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9Lm1vZGFsLWJvZHktd3JhcHBlcj46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9Lm1vZGFsLWZv''@;'; put 'put ''b3RlcntwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5tb2RhbC1mb290ZXIsLnNpZGUtcGFuZWwtZm9vdGVye2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''NSl9Lm1vZGFsLWZvb3RlciAuYnRuLC5zaWRlLXBhbmVsLWZvb3RlciAuYnRue21hcmdpbjowfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzY4cHgpIGFuZCAob3JpZW50YXRpb246bGFuZHNjYXBlKXsubW9kYWwtYm9keS13cmFwcGVye21heC1oZWlnaHQ6NTV2aH19QG1lZGlhIHNj''@;'; put 'put ''cmVlbiBhbmQgKG1heC13aWR0aDo1NzZweCl7Lm1vZGFsLWJvZHktd3JhcHBlcnttYXgtaGVpZ2h0OjU1dmh9fS5tb2RhbC1iYWNrZHJvcHtwb3NpdGlvbjpmaXhlZDtpbnNldDowO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLW1vZGFsLWJhY2tkcm9wLWNvbG9yKTt6LWluZGV4OjEwNDB9''@;'; put 'put ''Lm1vZGFsIC5tb2RhbC1uYXZ7ZGlzcGxheTpub25lfS5tb2RhbC5tb2RhbC1mdWxsLXNjcmVlbntwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7aGVpZ2h0OjEwMCV9Lm1vZGFsLm1vZGFsLWZ1bGwtc2NyZWVuIC5tb2RhbC1kaWFsb2d7ZGlzcGxheTpmbGV4O3dpZHRoOjEwMCU7''@;'; put 'put ''aGVpZ2h0OjEwMCV9Lm1vZGFsLm1vZGFsLWZ1bGwtc2NyZWVuIC5tb2RhbC1kaWFsb2cgLm1vZGFsLWNvbnRlbnQtd3JhcHBlcntkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjF9Lm1vZGFsLm1vZGFsLWZ1bGwtc2NyZWVuIC5tb2RhbC1kaWFsb2cgLm1vZGFsLWNvbnRlbnR7ZGlzcGxheTpmbGV4''@;'; put 'put ''O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWdyb3c6MX0ubW9kYWwubW9kYWwtZnVsbC1zY3JlZW4gLm1vZGFsLWRpYWxvZyAubW9kYWwtYm9keS13cmFwcGVyLC5tb2RhbC5tb2RhbC1mdWxsLXNjcmVlbiAubW9kYWwtZGlhbG9nIC5tb2RhbC1ib2R5e2ZsZXgtZ3JvdzoxO21heC1oZWln''@;'; put 'put ''aHQ6MTAwJX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1oZWFkZXItaGVpZ2h0OmNhbGMoNjAgKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNsci1oZWFkZXItZGl2aWRlci1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2xyLWhl''@;'; put 'put ''YWRlci1iZy1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS0xMDAwKTstLWNsci1oZWFkZXItMi1iZy1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2xyLWhlYWRlci0zLWJnLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''YXp1cmUtOTAwKTstLWNsci1oZWFkZXItNC1iZy1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLTMtYmctY29sb3IpOy0tY2xyLWhlYWRlci01LWJnLWNvbG9yOnZhcigtLWNsci1oZWFkZXItMy1iZy1jb2xvcik7LS1jbHItaGVhZGVyLTYtYmctY29sb3I6dmFyKC0tY2xyLWhlYWRlci1iZy1jb2xv''@;'; put 'put ''cik7LS1jbHItaGVhZGVyLTctYmctY29sb3I6dmFyKC0tY2xyLWhlYWRlci0yLWJnLWNvbG9yKTstLWNsci1oZWFkZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2xyLWhlYWRlci1mb250LWNvbG9yLWhvdmVyOnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtY29sb3ItY29uc3RydWN0aW9uLTUwKTstLWNsci1oZWFkZXItdGl0bGUtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC13ZWlnaHQpOy0tY2xyLWhlYWRlci10aXRsZS1mb250LWZhbWlseTp2YXIoLS1jbHItZm9udCk7LS1jbHItaGVh''@;'; put 'put ''ZGVyLXNlYXJjaC1pY29uLXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTstLWNsci1oZWFkZXItc2VhcmNoLW1hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7LS1jbHItaGVhZGVyLXNlYXJjaC1tYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTst''@;'; put 'put ''LWNsci1oZWFkZXItc2VhcmNoLWdhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpOy0tY2xyLWhlYWRlci1zZWFyY2gtaW5wdXQtZm9udC1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTstLWNsci1oZWFkZXItc2VhcmNoLXBsYWNlaG9sZGVyLWZvbnQtd2VpZ2h0OnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1yZWd1bGFyKTstLWNsci1oZWFkZXItc2VhcmNoLXBsYWNlaG9sZGVyLXRleHQtY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNDAwKTstLWNsci1oZWFkZXItc2VhcmNoLWJvcmRlci1hY3RpdmU6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCBIaWdobGlnaHQ7LS1jbHItaGVhZGVyLXNlYXJjaC1ib3JkZXItaG92ZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVj''@;'; put 'put ''dGlvbi00MDApfWhlYWRlciwuaGVhZGVye2Rpc3BsYXk6ZmxleDtjb2xvcjp2YXIoLS1jbHItaGVhZGVyLWZvbnQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci1iZy1jb2xvcik7aGVpZ2h0OnZhcigtLWNsci1oZWFkZXItaGVpZ2h0KTt3aGl0ZS1zcGFjZTpub3dy''@;'; put 'put ''YXB9aGVhZGVyLmhlYWRlci0xLC5oZWFkZXIuaGVhZGVyLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLWJnLWNvbG9yKX1oZWFkZXIuaGVhZGVyLTIsLmhlYWRlci5oZWFkZXItMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1oZWFkZXItMi1iZy1jb2xvcil9aGVhZGVy''@;'; put 'put ''LmhlYWRlci0zLC5oZWFkZXIuaGVhZGVyLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLTMtYmctY29sb3IpfWhlYWRlci5oZWFkZXItNCwuaGVhZGVyLmhlYWRlci00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci00LWJnLWNvbG9yKX1oZWFkZXIuaGVhZGVy''@;'; put 'put ''LTUsLmhlYWRlci5oZWFkZXItNXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1oZWFkZXItNS1iZy1jb2xvcil9aGVhZGVyLmhlYWRlci02LC5oZWFkZXIuaGVhZGVyLTZ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLTYtYmctY29sb3IpfWhlYWRlci5oZWFkZXItNywuaGVh''@;'; put 'put ''ZGVyLmhlYWRlci03e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci03LWJnLWNvbG9yKX1oZWFkZXIuaGVhZGVyLTgsLmhlYWRlci5oZWFkZXItOHtiYWNrZ3JvdW5kLWNvbG9yOiMwZjE3MWN9aGVhZGVyIC5icmFuZGluZywuaGVhZGVyIC5icmFuZGluZ3tkaXNwbGF5OmZsZXg7''@;'; put 'put ''ZmxleDowIDAgYXV0bzttaW4td2lkdGg6Y2FsYygyMDQqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO3BhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfWhlYWRlciAuYnJhbmRpbmc+YSxoZWFkZXIgLmJyYW5kaW5nPi5uYXYtbGluaywuaGVhZGVyIC5icmFuZGluZz5h''@;'; put 'put ''LC5oZWFkZXIgLmJyYW5kaW5nPi5uYXYtbGlua3tkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9aGVhZGVyIC5icmFu''@;'; put 'put ''ZGluZz5hOmZvY3VzLGhlYWRlciAuYnJhbmRpbmc+Lm5hdi1saW5rOmZvY3VzLC5oZWFkZXIgLmJyYW5kaW5nPmE6Zm9jdXMsLmhlYWRlciAuYnJhbmRpbmc+Lm5hdi1saW5rOmZvY3Vze291dGxpbmUtb2Zmc2V0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSl9aGVhZGVyIC5i''@;'; put 'put ''cmFuZGluZyAuY2xyLWljb24saGVhZGVyIC5icmFuZGluZyBjZHMtaWNvbixoZWFkZXIgLmJyYW5kaW5nIGNsci1pY29uLC5oZWFkZXIgLmJyYW5kaW5nIC5jbHItaWNvbiwuaGVhZGVyIC5icmFuZGluZyBjZHMtaWNvbiwuaGVhZGVyIC5icmFuZGluZyBjbHItaWNvbntmbGV4LWdyb3c6MDtm''@;'; put 'put ''bGV4LXNocmluazowO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKX1oZWFkZXIgLmJyYW5kaW5nIC50aXRsZSwuaGVhZGVyIC5icmFuZGluZyAudGl0bGV7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1mb250LWNvbG9yKTtm''@;'; put 'put ''b250LWZhbWlseTp2YXIoLS1jbHItaGVhZGVyLXRpdGxlLWZvbnQtZmFtaWx5KTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1oZWFkZXItdGl0bGUtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpO3RleHQtZGVjb3JhdGlvbjpub25lfWhlYWRlciAuc2V0dGluZ3MgLm5hdi10''@;'; put 'put ''ZXh0LGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LXRleHQsaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LXRleHQsLmhlYWRlciAuc2V0dGluZ3MgLm5hdi10ZXh0LC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi10ZXh0LC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtdGV4dHtmb250LXNp''@;'; put 'put ''emU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyl9aGVhZGVyIC5zZXR0aW5ncyBjbHItaWNvbixoZWFkZXIgLmhlYWRlci1uYXYgY2xyLWljb24saGVhZGVyIC5oZWFkZXItYWN0aW9ucyBjbHItaWNvbiwuaGVhZGVyIC5zZXR0aW5ncyBjbHItaWNvbiwuaGVhZGVyIC5oZWFk''@;'; put 'put ''ZXItbmF2IGNsci1pY29uLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvcil9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmssaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluayxoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5u''@;'; put 'put ''YXYtbGluaywuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmssLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmssLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5re2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxp''@;'; put 'put ''Z246Y2VudGVyO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvcil9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbms6aG92ZXIsaGVhZGVy''@;'; put 'put ''IC5oZWFkZXItbmF2IC5uYXYtbGluazpob3ZlcixoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluazpob3ZlciwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbms6aG92ZXIsLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbms6aG92ZXIsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5h''@;'; put 'put ''di1saW5rOmhvdmVye2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvci1ob3Zlcil9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbms6ZGlzYWJsZWQsaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazpkaXNhYmxlZCxoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluazpkaXNh''@;'; put 'put ''YmxlZCwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbms6ZGlzYWJsZWQsLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbms6ZGlzYWJsZWQsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZH1oZWFkZXIgLnNldHRpbmdzIC5uYXYt''@;'; put 'put ''bGluayBjZHMtaWNvbixoZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluayBjbHItaWNvbixoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rIGNkcy1pY29uLGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsgY2xyLWljb24saGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsgY2RzLWlj''@;'; put 'put ''b24saGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsgY2xyLWljb24sLmhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rIGNkcy1pY29uLC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluayBjbHItaWNvbiwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluayBjZHMtaWNvbiwuaGVhZGVy''@;'; put 'put ''IC5oZWFkZXItbmF2IC5uYXYtbGluayBjbHItaWNvbiwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsgY2RzLWljb24sLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rIGNsci1pY29ue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtOSl9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsubmF2LWljb24tdGV4dCxoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLm5hdi1pY29uLXRleHQsaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsubmF2LWljb24tdGV4dCwuaGVhZGVyIC5zZXR0aW5n''@;'; put 'put ''cyAubmF2LWxpbmsubmF2LWljb24tdGV4dCwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluay5uYXYtaWNvbi10ZXh0LC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluay5uYXYtaWNvbi10ZXh0e2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpfWhlYWRlciAuc2V0dGluZ3Mg''@;'; put 'put ''Lm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2RzLWljb24saGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjbHItaWNvbixoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2RzLWljb24saGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluay5u''@;'; put 'put ''YXYtaWNvbi10ZXh0IGNsci1pY29uLGhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2RzLWljb24saGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjbHItaWNvbiwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsubmF2''@;'; put 'put ''LWljb24tdGV4dCBjZHMtaWNvbiwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjbHItaWNvbiwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluay5uYXYtaWNvbi10ZXh0IGNkcy1pY29uLC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLm5hdi1pY29uLXRl''@;'; put 'put ''eHQgY2xyLWljb24sLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2RzLWljb24sLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2xyLWljb257dHJhbnNmb3JtOm5vbmV9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxp''@;'; put 'put ''bmsgLm5hdi1pY29uKy5uYXYtdGV4dCxoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rIC5uYXYtaWNvbisubmF2LXRleHQsaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsgLm5hdi1pY29uKy5uYXYtdGV4dCwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsgLm5hdi1pY29uKy5u''@;'; put 'put ''YXYtdGV4dCwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0LC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0e2Rpc3BsYXk6bm9uZX1oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluay5hY3RpdmUgLm5hdi10''@;'; put 'put ''ZXh0LGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsuYWN0aXZlIC5uYXYtdGV4dCxoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluay5hY3RpdmUgLm5hdi10ZXh0LC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluay5hY3RpdmUgLm5hdi10ZXh0LC5oZWFkZXIgLmhlYWRlci1uYXYg''@;'; put 'put ''Lm5hdi1saW5rLmFjdGl2ZSAubmF2LXRleHQsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rLmFjdGl2ZSAubmF2LXRleHR7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dy''@;'; put 'put ''YXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKX1oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluazpmb2N1cyxoZWFk''@;'; put 'put ''ZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rOmZvY3VzLGhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rOmZvY3VzLC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluazpmb2N1cywuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazpmb2N1cywuaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAu''@;'; put 'put ''bmF2LWxpbms6Zm9jdXN7b3V0bGluZS1vZmZzZXQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpKX1oZWFkZXIgLmhlYWRlci1uYXYsLmhlYWRlciAuaGVhZGVyLW5hdntkaXNwbGF5OmZsZXg7ZmxleDowIDAgYXV0bzthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246cmVsYXRp''@;'; put 'put ''dmV9aGVhZGVyIC5oZWFkZXItbmF2OmJlZm9yZSwuaGVhZGVyIC5oZWFkZXItbmF2OmJlZm9yZXtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci1kaXZpZGVyLWNvbG9yKTtoZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7d2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtsZWZ0OjB9aGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazpmaXJzdC1vZi10eXBlLGhlYWRlciAuaGVhZGVy''@;'; put 'put ''LW5hdiAubmF2LWxpbms6bGFzdC1vZi10eXBlLC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rOmZpcnN0LW9mLXR5cGUsLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbms6bGFzdC1vZi10eXBle3Bvc2l0aW9uOnJlbGF0aXZlfWhlYWRlciAuc2V0dGluZ3MsaGVhZGVyIC5oZWFkZXIt''@;'; put 'put ''YWN0aW9ucywuaGVhZGVyIC5zZXR0aW5ncywuaGVhZGVyIC5oZWFkZXItYWN0aW9uc3tmbGV4OjEgMCBhdXRvO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9aGVhZGVyIC5zZXR0aW5ncz46bm90KC5kcm9wZG93bik6YmVmb3JlLGhlYWRlciAuc2V0dGluZ3M+LmRyb3Bk''@;'; put 'put ''b3duPi5kcm9wZG93bi10b2dnbGU6YmVmb3JlLGhlYWRlciAuaGVhZGVyLWFjdGlvbnM+Om5vdCguZHJvcGRvd24pOmJlZm9yZSxoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmJlZm9yZSwuaGVhZGVyIC5zZXR0aW5ncz46bm90KC5kcm9wZG93bik6''@;'; put 'put ''YmVmb3JlLC5oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmJlZm9yZSwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucz46bm90KC5kcm9wZG93bik6YmVmb3JlLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmJlZm9yZXtk''@;'; put 'put ''aXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci1kaXZpZGVyLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7d2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3Jk''@;'; put 'put ''ZXItd2lkdGgtMTAwKTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtsZWZ0OjB9aGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2dsZSxoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlLC5oZWFkZXIgLnNldHRpbmdzPi5k''@;'; put 'put ''cm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xle2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSB2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTcpO291dGxpbmUtb2Zmc2V0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSk7YWxpZ24taXRlbXM6Y2VudGVyO2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvcil9aGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2ds''@;'; put 'put ''ZTpob3ZlcixoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmhvdmVyLC5oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmhvdmVyLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xl''@;'; put 'put ''OmhvdmVye2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvci1ob3Zlcil9aGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2dsZTpkaXNhYmxlZCxoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmRpc2FibGVkLC5oZWFk''@;'; put 'put ''ZXIgLnNldHRpbmdzPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmRpc2FibGVkLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZH1oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93biAuZHJvcGRvd24t''@;'; put 'put ''dG9nZ2xlLm5hdi1pY29uIGNkcy1pY29uOm5vdChbc2hhcGVePWFuZ2xlXSksaGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5uYXYtaWNvbiBjbHItaWNvbjpub3QoW3NoYXBlXj1hbmdsZV0pLGhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duIC5kcm9w''@;'; put 'put ''ZG93bi10b2dnbGUubmF2LWljb24gY2RzLWljb246bm90KFtzaGFwZV49YW5nbGVdKSxoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi1pY29uIGNsci1pY29uOm5vdChbc2hhcGVePWFuZ2xlXSksLmhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3du''@;'; put 'put ''IC5kcm9wZG93bi10b2dnbGUubmF2LWljb24gY2RzLWljb246bm90KFtzaGFwZV49YW5nbGVdKSwuaGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5uYXYtaWNvbiBjbHItaWNvbjpub3QoW3NoYXBlXj1hbmdsZV0pLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5k''@;'; put 'put ''cm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi1pY29uIGNkcy1pY29uOm5vdChbc2hhcGVePWFuZ2xlXSksLmhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LWljb24gY2xyLWljb246bm90KFtzaGFwZV49YW5nbGVdKXtoZWlnaHQ6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS05KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfWhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duIC5kcm9wZG93bi1tZW51LGhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duIC5kcm9wZG93bi1tZW51LC5oZWFkZXIgLnNldHRpbmdzPi5kcm9w''@;'; put 'put ''ZG93biAuZHJvcGRvd24tbWVudSwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucz4uZHJvcGRvd24gLmRyb3Bkb3duLW1lbnV7bWFyZ2luLXRvcDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2xlZnQ6YXV0bzty''@;'; put 'put ''aWdodDowfWhlYWRlciAuc2VhcmNoLWJveCxoZWFkZXIgLnNlYXJjaCwuaGVhZGVyIC5zZWFyY2gtYm94LC5oZWFkZXIgLnNlYXJjaHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXg6MCAwIGF1dG87bWF4LXdpZHRoOmNhbGMoMjg4KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''YmFzZSkpKTtwYWRkaW5nOjA7cG9zaXRpb246cmVsYXRpdmU7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1mb250LWNvbG9yKX1oZWFkZXIgLnNlYXJjaC1ib3g6aG92ZXIsaGVhZGVyIC5zZWFyY2g6aG92ZXIsLmhlYWRlciAuc2VhcmNoLWJveDpob3ZlciwuaGVhZGVyIC5zZWFyY2g6aG92ZXJ7''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1mb250LWNvbG9yLWhvdmVyKX1oZWFkZXIgLnNlYXJjaC1ib3g6ZGlzYWJsZWQsaGVhZGVyIC5zZWFyY2g6ZGlzYWJsZWQsLmhlYWRlciAuc2VhcmNoLWJveDpkaXNhYmxlZCwuaGVhZGVyIC5zZWFyY2g6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2Vk''@;'; put 'put ''fWhlYWRlciAuc2VhcmNoLWJveDpiZWZvcmUsaGVhZGVyIC5zZWFyY2g6YmVmb3JlLC5oZWFkZXIgLnNlYXJjaC1ib3g6YmVmb3JlLC5oZWFkZXIgLnNlYXJjaDpiZWZvcmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246YWJzb2x1dGU7Y29udGVudDoiIjtiYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1oZWFkZXItZGl2aWRlci1jb2xvcik7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3dpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7dG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7bGVmdDphdXRvfWhlYWRlciAuc2Vh''@;'; put 'put ''cmNoLWJveD4ubmF2LWljb24saGVhZGVyIC5zZWFyY2g+Lm5hdi1pY29uLC5oZWFkZXIgLnNlYXJjaC1ib3g+Lm5hdi1pY29uLC5oZWFkZXIgLnNlYXJjaD4ubmF2LWljb257bWFyZ2luOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSBjYWxjKDMqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1i''@;'; put 'put ''YXNlKSkpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9aGVhZGVyIC5zZWFyY2gtYm94IGxhYmVsLGhlYWRlciAuc2VhcmNoIGxhYmVsLC5oZWFkZXIgLnNlYXJjaC1ib3ggbGFiZWwsLmhlYWRlciAuc2VhcmNoIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmctbGVmdDp2YXIo''@;'; put 'put ''LS1jbHItaGVhZGVyLXNlYXJjaC1nYXApO21hcmdpbi1sZWZ0OnZhcigtLWNsci1oZWFkZXItc2VhcmNoLW1hcmdpbi1sZWZ0KTttYXJnaW4tcmlnaHQ6dmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtbWFyZ2luLXJpZ2h0KTt0ZXh0LWFsaWduOmNlbnRlcn1oZWFkZXIgLnNlYXJjaC1ib3ggbGFi''@;'; put 'put ''ZWw6YmVmb3JlLGhlYWRlciAuc2VhcmNoIGxhYmVsOmJlZm9yZSwuaGVhZGVyIC5zZWFyY2gtYm94IGxhYmVsOmJlZm9yZSwuaGVhZGVyIC5zZWFyY2ggbGFiZWw6YmVmb3Jle2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbnRlbnQ6IiI7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9z''@;'; put 'put ''dmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDM2JTIwMzYlMjIlM0UlM0NkZWZzJTNFJTNDc3R5bGUlM0UuY2xzLTElN0JmaWxsJTNBJTIzZmZmZmZmJTNC''@;'; put 'put ''JTdEJTNDJTJGc3R5bGUlM0UlM0MlMkZkZWZzJTNFJTNDdGl0bGUlM0VTZWFyY2glM0MlMkZ0aXRsZSUzRSUzQ2clMjBpZCUzRCUyMmljb25zJTIyJTNFJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xzLTElMjIlMjBkJTNEJTIyTTE1JTJDNC4wNUExMC45NSUyQzEwLjk1JTJDMCUyQzElMkMxJTJD''@;'; put 'put ''NC4wNSUyQzE1JTJDMTElMkMxMSUyQzAlMkMwJTJDMSUyQzE1JTJDNC4wNU0xNSUyQzJBMTMlMkMxMyUyQzAlMkMxJTJDMCUyQzI4JTJDMTUlMkMxMyUyQzEzJTJDMCUyQzAlMkMwJTJDMTUlMkMyWiUyMiUyRiUzRSUzQ3BhdGglMjBjbGFzcyUzRCUyMmNscy0xJTIyJTIwJTIwZCUzRCUyMk0z''@;'; put 'put ''My43MSUyQzMyLjI5bC03LjM3LTcuNDItMS40MiUyQzEuNDElMkM3LjM3JTJDNy40MmExJTJDMSUyQzAlMkMxJTJDMCUyQzEuNDItMS40MVolMjIlMkYlM0UlM0MlMkZnJTNFJTNDJTJGc3ZnJTNFKTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOmNvbnRhaW47''@;'; put 'put ''Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OnZhcigtLWNsci1oZWFkZXItc2VhcmNoLWljb24tc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtaWNvbi1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1oZWFkZXItc2VhcmNoLWljb24tc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1o''@;'; put 'put ''ZWFkZXItc2VhcmNoLWljb24tc2l6ZSk7dmVydGljYWwtYWxpZ246bWlkZGxlO21hcmdpbjowO21hcmdpbi1yaWdodDpjYWxjKC0xKih2YXIoLS1jbHItaGVhZGVyLXNlYXJjaC1pY29uLXNpemUpICsgdmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtZ2FwKSkpfWhlYWRlciAuc2VhcmNoLWJveCBs''@;'; put 'put ''YWJlbCBpbnB1dCxoZWFkZXIgLnNlYXJjaCBsYWJlbCBpbnB1dCwuaGVhZGVyIC5zZWFyY2gtYm94IGxhYmVsIGlucHV0LC5oZWFkZXIgLnNlYXJjaCBsYWJlbCBpbnB1dHtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbjphdXRvfWhlYWRlciAuc2VhcmNoLWJv''@;'; put 'put ''eCBpbnB1dFt0eXBlPXRleHRdLGhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF0sLmhlYWRlciAuc2VhcmNoLWJveCBpbnB1dFt0eXBlPXRleHRdLC5oZWFkZXIgLnNlYXJjaCBpbnB1dFt0eXBlPXRleHRde2JvcmRlcjowO2JhY2tncm91bmQ6MCAwO2NvbG9yOnZhcigtLWNsci1oZWFk''@;'; put 'put ''ZXItc2VhcmNoLWlucHV0LWZvbnQtY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3BhZGRpbmc6MCAwIDAgY2FsYyh2YXIoLS1jbHItaGVhZGVyLXNlYXJjaC1pY29u''@;'; put 'put ''LXNpemUpICsgMip2YXIoLS1jbHItaGVhZGVyLXNlYXJjaC1nYXApKTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdo''@;'; put 'put ''dC1zZW1pYm9sZCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKX1oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTotd2Via2l0LWF1dG9maWxs''@;'; put 'put ''LGhlYWRlciAuc2VhcmNoLWJveCBpbnB1dFt0eXBlPXRleHRdOi13ZWJraXQtYXV0b2ZpbGw6Zm9jdXMsaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTotd2Via2l0LWF1dG9maWxsLGhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06LXdlYmtpdC1hdXRvZmlsbDpmb2N1cywu''@;'; put 'put ''aGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF06LXdlYmtpdC1hdXRvZmlsbCwuaGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF06LXdlYmtpdC1hdXRvZmlsbDpmb2N1cywuaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTotd2Via2l0LWF1dG9maWxsLC5o''@;'; put 'put ''ZWFkZXIgLnNlYXJjaCBpbnB1dFt0eXBlPXRleHRdOi13ZWJraXQtYXV0b2ZpbGw6Zm9jdXN7LXdlYmtpdC10cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgMHMgNjAwMDAwcyxjb2xvciAwcyA2MDAwMDBzO3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAwcyA2MDAwMDBzLGNvbG9yIDBz''@;'; put 'put ''IDYwMDAwMHN9aGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF06OnBsYWNlaG9sZGVyLGhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06OnBsYWNlaG9sZGVyLC5oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTo6cGxhY2Vob2xkZXIsLmhlYWRlciAuc2Vh''@;'; put 'put ''cmNoIGlucHV0W3R5cGU9dGV4dF06OnBsYWNlaG9sZGVye2NvbG9yOnZhcigtLWNsci1oZWFkZXItc2VhcmNoLXBsYWNlaG9sZGVyLXRleHQtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKX1oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10''@;'; put 'put ''ZXh0XTpob3ZlcixoZWFkZXIgLnNlYXJjaCBpbnB1dFt0eXBlPXRleHRdOmhvdmVyLC5oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTpob3ZlciwuaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTpob3Zlcntib3JkZXI6dmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtYm9y''@;'; put 'put ''ZGVyLWhvdmVyKX1oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTpmb2N1cy12aXNpYmxlLGhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06Zm9jdXMtdmlzaWJsZSwuaGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF06Zm9jdXMtdmlzaWJsZSwuaGVhZGVy''@;'; put 'put ''IC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTpmb2N1cy12aXNpYmxle291dGxpbmU6MDtib3JkZXI6dmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtYm9yZGVyLWFjdGl2ZSl9aGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF06Zm9jdXMsaGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5''@;'; put 'put ''cGU9dGV4dF06YWN0aXZlLGhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06Zm9jdXMsaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTphY3RpdmUsLmhlYWRlciAuc2VhcmNoLWJveCBpbnB1dFt0eXBlPXRleHRdOmZvY3VzLC5oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlw''@;'; put 'put ''ZT10ZXh0XTphY3RpdmUsLmhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06Zm9jdXMsLmhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06YWN0aXZle2JhY2tncm91bmQ6MCAwfWhlYWRlciAuYnJhbmRpbmcrLnNlYXJjaCxoZWFkZXIgLmJyYW5kaW5nKy5zZWFyY2gtYm94LC5o''@;'; put 'put ''ZWFkZXIgLmJyYW5kaW5nKy5zZWFyY2gsLmhlYWRlciAuYnJhbmRpbmcrLnNlYXJjaC1ib3h7cG9zaXRpb246cmVsYXRpdmV9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo3NjhweCl7aGVhZGVyIC5zZWFyY2gtYm94LGhlYWRlciAuc2VhcmNoLC5oZWFkZXIgLnNlYXJjaC1ib3gsLmhl''@;'; put 'put ''YWRlciAuc2VhcmNoe2ZsZXg6MSAwIGF1dG87bWF4LXdpZHRoOm5vbmU7ZGlzcGxheTpub25lfWhlYWRlciAuc2VhcmNoLWJveCBsYWJlbCxoZWFkZXIgLnNlYXJjaCBsYWJlbCwuaGVhZGVyIC5zZWFyY2gtYm94IGxhYmVsLC5oZWFkZXIgLnNlYXJjaCBsYWJlbHtwYWRkaW5nOjB9fWE6bm90''@;'; put 'put ''KC5idG4sLm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwuYWxlcnQtYWN0aW9uLC5iYWRnZSwuY2xyLXRyZWVub2RlLWxpbmspe2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXJlZ3VsYXIpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''dHlwb2dyYXBoeS1mb250LXNpemUtMyk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzpjYWxjKC0uMSooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9YTpub3QoLmJ0biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVy''@;'; put 'put ''dC1hY3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6bGlua3tjb2xvcjp2YXIoLS1jbHItbGluay1jb2xvcil9YTpub3QoLmJ0biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1hY3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6bGluazpob3Zlcntj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItbGluay1ob3Zlci1jb2xvcil9YTpub3QoLmJ0biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1hY3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6bGluazpob3ZlciBjZHMtaWNvbixhOm5vdCguYnRuLC5uYXYtbGluaywuZHJvcGRv''@;'; put 'put ''d24taXRlbSwubGFiZWwsLmFsZXJ0LWFjdGlvbiwuYmFkZ2UsLmNsci10cmVlbm9kZS1saW5rKTpsaW5rOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1saW5rLWhvdmVyLWNvbG9yKX1hOm5vdCguYnRuLC5uYXYtbGluaywuZHJvcGRvd24taXRlbSwubGFiZWwsLmFsZXJ0LWFjdGlv''@;'; put 'put ''biwuYmFkZ2UsLmNsci10cmVlbm9kZS1saW5rKTpsaW5rOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItbGluay1hY3RpdmUtY29sb3IpfWE6bm90KC5idG4sLm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwuYWxlcnQtYWN0aW9uLC5iYWRnZSwuY2xyLXRyZWVub2RlLWxpbmspOmxpbms6''@;'; put 'put ''YWN0aXZlIGNkcy1pY29uLGE6bm90KC5idG4sLm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwuYWxlcnQtYWN0aW9uLC5iYWRnZSwuY2xyLXRyZWVub2RlLWxpbmspOmxpbms6YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1saW5rLWFjdGl2ZS1jb2xvcil9YTpub3QoLmJ0''@;'; put 'put ''biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1hY3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6dmlzaXRlZHtjb2xvcjp2YXIoLS1jbHItbGluay12aXNpdGVkLWNvbG9yKX1hOm5vdCguYnRuLC5uYXYtbGluaywuZHJvcGRvd24taXRlbSwubGFiZWwsLmFs''@;'; put 'put ''ZXJ0LWFjdGlvbiwuYmFkZ2UsLmNsci10cmVlbm9kZS1saW5rKTp2aXNpdGVkIGNkcy1pY29uLGE6bm90KC5idG4sLm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwuYWxlcnQtYWN0aW9uLC5iYWRnZSwuY2xyLXRyZWVub2RlLWxpbmspOnZpc2l0ZWQgY2xyLWljb257Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWxpbmstdmlzaXRlZC1jb2xvcil9YTpub3QoLmJ0biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1hY3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6dmlzaXRlZDpob3Zlcntjb2xvcjp2YXIoLS1jbHItbGluay12aXNpdGVkLWNvbG9yLWhvdmVy''@;'; put 'put ''KX1hOm5vdCguYnRuLC5uYXYtbGluaywuZHJvcGRvd24taXRlbSwubGFiZWwsLmFsZXJ0LWFjdGlvbiwuYmFkZ2UsLmNsci10cmVlbm9kZS1saW5rKTp2aXNpdGVkOmhvdmVyIGNkcy1pY29uLGE6bm90KC5idG4sLm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwuYWxlcnQtYWN0aW9u''@;'; put 'put ''LC5iYWRnZSwuY2xyLXRyZWVub2RlLWxpbmspOnZpc2l0ZWQ6aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWxpbmstdmlzaXRlZC1jb2xvci1ob3Zlcil9YS5saW5rLW5vcm1hbDpsaW5re2NvbG9yOnZhcigtLWNsci1saW5rLWNvbG9yKX1hLmxpbmstaG92ZXJlZDpsaW5re2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci1saW5rLWhvdmVyLWNvbG9yKX1hLmxpbmstY2xpY2tlZDpsaW5re2NvbG9yOnZhcigtLWNsci1saW5rLWFjdGl2ZS1jb2xvcil9YS5saW5rLXZpc2l0ZWQ6bGlua3tjb2xvcjp2YXIoLS1jbHItbGluay12aXNpdGVkLWNvbG9yKX1hLmxpbmstdmlzaXRlZC1ob3ZlcjpsaW5r''@;'; put 'put ''e2NvbG9yOnZhcigtLWNsci1saW5rLXZpc2l0ZWQtY29sb3ItaG92ZXIpfS5uYXZ7ZGlzcGxheTpmbGV4O2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTtsaXN0LXN0eWxlLXR5cGU6bm9uZTthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luOjA7d2lkdGg6MTAwJTt3aGl0ZS1zcGFj''@;'; put 'put ''ZTpub3dyYXA7Ym94LXNoYWRvdzowIGNhbGMoLTEqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkgMCB2YXIoLS1jbHItbmF2LWJveC1zaGFkb3ctY29sb3IpIGluc2V0O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5uYXYgLm5hdi1pdGVte2Rpc3BsYXk6''@;'; put 'put ''aW5saW5lLWJsb2NrfS5uYXYgLm5hdi1pdGVtLmFjdGl2ZT4ubmF2LWxpbmt7Y29sb3I6dmFyKC0tY2xyLW5hdi1saW5rLWFjdGl2ZS1jb2xvcik7Ym94LXNoYWRvdzowIGNhbGMoLTEqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkgMCB2YXIoLS1jbHItbmF2LWJv''@;'; put 'put ''eC1zaGFkb3ctY29sb3IpIGluc2V0fS5uYXYgLm5hdi1saW5re3Bvc2l0aW9uOnJlbGF0aXZlO2NvbG9yOnZhcigtLWNsci1uYXYtbGluay1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtwYWRkaW5nOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTtkaXNwbGF5OmlubGluZS1ibG9ja30ubmF2IC5uYXYtbGluay5idG57dGV4dC10cmFuc2Zvcm06bm9uZTttYXJnaW46MCAwIGNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7Ym9yZGVyLXJhZGl1''@;'; put 'put ''czowfS5uYXYgLm5hdi1saW5rLmRyb3Bkb3duLXRvZ2dsZXtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9Lm5hdiAubmF2LWxpbmsuZHJvcGRvd24tdG9nZ2xlIGNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1uYXYtbGluay1jb2xvcil9Lm5hdiAubmF2LWxpbms6aG92ZXIsLm5h''@;'; put 'put ''diAubmF2LWxpbms6Zm9jdXMsLm5hdiAubmF2LWxpbms6YWN0aXZle2NvbG9yOmluaGVyaXR9Lm5hdiAubmF2LWxpbms6YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLW5hdi1hY3RpdmUtYmctY29sb3IpfS5uYXYgLm5hdi1saW5rOmhvdmVyOmJlZm9yZSwubmF2IC5uYXYtbGlu''@;'; put 'put ''ay5hY3RpdmU6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3dpZHRoOjEwMCU7Ym9yZGVyOjA7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0zMDApIHNvbGlkIHZhcigtLWNkcy1hbGlhcy1v''@;'; put 'put ''YmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpO3RyYW5zaXRpb246Ym9yZGVyLWJvdHRvbSAuMnMgZWFzZS1pbn0ubmF2IC5uYXYtbGluazpob3ZlciwubmF2IC5uYXYtbGluazpmb2N1cywubmF2IC5uYXYtbGluazphY3RpdmUsLm5hdiAubmF2LWxpbmsuYWN0aXZle3Rl''@;'; put 'put ''eHQtZGVjb3JhdGlvbjpub25lfS5uYXYgLm5hdi1saW5rLmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItbmF2LWxpbmstYWN0aXZlLWNvbG9yKX0ubmF2IC5uYXYtbGluay5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbmF2LXNlbGVjdGVkLWhvdmVyLWJhY2tncm91bmQt''@;'; put 'put ''Y29sb3IpfS5uYXYgLm5hdi1saW5rLmFjdGl2ZTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbmF2LXNlbGVjdGVkLWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yKX0ubmF2IC5uYXYtbGluay5uYXYtaXRlbXttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX06''@;'; put 'put ''cm9vdCBbY2RzLXRoZW1lXXstLWNsci1zdWJuYXYtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCl9LnN1Yi1uYXYsLnN1Ym5hdntkaXNwbGF5OmZsZXg7Ym94LXNoYWRvdzowIGNhbGMoLTEqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXIt''@;'; put 'put ''d2lkdGgtMTAwKSkgMCB2YXIoLS1jbHItbmF2LWJveC1zaGFkb3ctY29sb3IpIGluc2V0O2JveC1zaGFkb3c6MCAtLjA1cmVtIDAgdmFyKC0tY2xyLW5hdi1ib3gtc2hhZG93LWNvbG9yLCBoc2woMTk4LCAwJSwgODAlKSkgaW5zZXQ7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxp''@;'; put 'put ''Z24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXN1Ym5hdi1iZy1jb2xvcik7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpfS5zdWItbmF2IC5uYXYsLnN1Ym5hdiAubmF2e2ZsZXg6MSAxIGF1dG87cGFkZGluZy1sZWZ0OjEuMnJlbX0uc3ViLW5hdiAu''@;'; put 'put ''bmF2LWl0ZW0sLnN1Yi1uYXYgLm5hdi1pdGVtIGEsLnN1Ym5hdiAubmF2LWl0ZW0sLnN1Ym5hdiAubmF2LWl0ZW0gYXt0ZXh0LWRlY29yYXRpb246bm9uZX0uc3ViLW5hdiBhc2lkZSwuc3VibmF2IGFzaWRle2ZsZXg6MCAwIGF1dG87ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjto''@;'; put 'put ''ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7cGFkZGluZzowIDEuMnJlbX0uc3ViLW5hdiBhc2lkZT46bGFzdC1jaGlsZCwuc3VibmF2IGFzaWRlPjpsYXN0LWNoaWxke21hcmdpbi1yaWdodDowO3BhZGRpbmctcmlnaHQ6MH06cm9vdCBbY2RzLXRoZW1lXXstLWNsci12ZXJ0aWNh''@;'; put 'put ''bC1uYXYtZGl2aWRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItdmVydGljYWwtbmF2LWljb24tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLXZlcnRpY2FsLW5hdi1pY29uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''b2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1yaWdodC1tYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KTstLWNsci12ZXJ0aWNhbC1uYXYtY29sbGFwc2VkLWNhcmV0LXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7LS1jbHItdmVy''@;'; put 'put ''dGljYWwtbmF2LWl0ZW0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItdmVydGljYWwtbmF2LWl0ZW0tYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci12ZXJ0aWNhbC1u''@;'; put 'put ''YXYtaXRlbS1wYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY2hpbGQtcGFkZGluZzp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTstLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7LS1jbHItdmVy''@;'; put 'put ''dGljYWwtbmF2LW1pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyKTstLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTstLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0''@;'; put 'put ''ZWQtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkKTstLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNo''@;'; put 'put ''YWRlLXNlbGVjdGVkLWhvdmVyKTstLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1zZWxlY3RlZC1hY3RpdmUpOy0tY2xyLXZlcnRpY2FsLW5hdi1iZy1jb2xvcjp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUpOy0tY2xyLXZlcnRpY2FsLW5hdi1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtaG92ZXIpOy0tY2xyLXZlcnRpY2FsLW5hdi1hY3Rp''@;'; put 'put ''dmUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLWFjdGl2ZSk7LS1jbHItdmVydGljYWwtbmF2LWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItdmVydGlj''@;'; put 'put ''YWwtbmF2LWl0ZW0tdG9wLWxldmVsLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7LS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0t''@;'; put 'put ''Y2xyLXZlcnRpY2FsLW5hdi10b2dnbGUtaWNvbi1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci12ZXJ0aWNhbC1uYXYtdG9nZ2xlLWljb24tYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rp''@;'; put 'put ''b24tY29sb3ItYWN0aXZlKTstLWNsci12ZXJ0aWNhbC1uYXYtdG9nZ2xlLWljb24tZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCk7LS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1idXR0b24tc2l6ZTp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTEwKTstLWNsci12ZXJ0aWNhbC1uYXYtdHJpZ2dlci1kaXZpZGVyLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItdmVydGljYWwtbmF2LXRyaWdnZXItZGl2aWRlci1ib3JkZXItd2lkdGg6dmFyKC0tY2xyLWdsb2JhbC1i''@;'; put 'put ''b3JkZXJ3aWR0aCk7LS1jbHItdmVydGljYWwtbmF2LXRyaWdnZXItY29sbGFwc2VkLW1hcmdpbjptaXhpbnMuYmFzZWxpbmVQeCgzKTstLWNsci12ZXJ0aWNhbC1uYXYtaGVhZGVyLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7''@;'; put 'put ''LS1jbHItdmVydGljYWwtbmF2LWhlYWRlci1wYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLXZlcnRpY2FsLW5hdntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3dpZHRoOmNhbGMoMjQwKigxcmVtL3Zhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtYmFzZSkpKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWJnLWNvbG9yKTt3aWxsLWNoYW5nZTp3aWR0aDt0cmFuc2l0aW9uOndpZHRoIC4ycyBlYXNlLWluLW91dH0uY2xyLXZl''@;'; put 'put ''cnRpY2FsLW5hdiAubmF2LWRpdmlkZXJ7Ym9yZGVyLXRvcDp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRyaWdnZXItZGl2aWRlci1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci12ZXJ0aWNhbC1uYXYtdHJpZ2dlci1kaXZpZGVyLWJvcmRlci1jb2xvcil9LmNsci12ZXJ0aWNhbC1uYXYg''@;'; put 'put ''Lm5hdi1jb250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleDoxIDEgYXV0bztnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtwYWRkaW5nLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpO292ZXJmbG93LXk6YXV0bztvdmVyZmxvdy14OmhpZGRlbn0u''@;'; put 'put ''Y2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3Vwe2Rpc3BsYXk6YmxvY2s7ZmxleDowIDAgYXV0bztoZWlnaHQ6YXV0bzttaW4taGVpZ2h0OnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1oZWlnaHQpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudHtkaXNwbGF5OmZsZXg7''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQuYWN0aXZle2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRp''@;'; put 'put ''Y2FsLW5hdi1zZWxlY3RlZC1iZy1jb2xvcik7cG9zaXRpb246cmVsYXRpdmV9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50LmFjdGl2ZTpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTtib3JkZXI6''@;'; put 'put ''MDtib3JkZXItbGVmdDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0zMDApIHNvbGlkIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpO3RyYW5zaXRpb246Ym9yZGVyLWxlZnQgLjJzIGVhc2UtaW59LmNsci12ZXJ0aWNh''@;'; put 'put ''bC1uYXYgLm5hdi1ncm91cC1jb250ZW50LmFjdGl2ZSAubmF2LWljb257ZmlsbDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tYWN0aXZlLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQuYWN0aXZlOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LXZlcnRpY2FsLW5hdi1zZWxlY3RlZC1ob3Zlci1iZy1jb2xvcil9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50LmFjdGl2ZTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWFjdGl2ZS1iZy1jb2xvcil9LmNsci12ZXJ0''@;'; put 'put ''aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50OmhvdmVye2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1ob3Zlci1iZy1jb2xvcik7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmNsci12''@;'; put 'put ''ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50OmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWFjdGl2ZS1iZy1jb2xvcil9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91''@;'; put 'put ''cC1jb250ZW50IC5uYXYtbGlua3tmbGV4OjEgMSBhdXRvO3BhZGRpbmctbGVmdDowO21pbi13aWR0aDowfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWljb257bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLXZlcnRpY2FsLW5hdiAu''@;'; put 'put ''bmF2LWdyb3VwLWNvbnRlbnQgLm5hdi10ZXh0e3BhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWljb24rLm5hdi10ZXh0e3BhZGRpbmctbGVmdDowfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3Jv''@;'; put 'put ''dXAtY29udGVudCAubmF2LWxpbmsrLm5hdi1ncm91cC10ZXh0e2Rpc3BsYXk6bm9uZX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQ+Lm5hdi1saW5rLmFjdGl2ZSwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQ+Lm5hdi1saW5rOmFjdGl2ZXtmb250LXdl''@;'; put 'put ''aWdodDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tYWN0aXZlLWZvbnQtd2VpZ2h0KX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNoaWxkcmVue292ZXJmbG93LXk6aGlkZGVufS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlciwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdy''@;'; put 'put ''b3VwLXRyaWdnZXJ7ZmxleDowIDAgdmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10b2dnbGUtYnV0dG9uLXNpemUpO2JvcmRlcjowO2hlaWdodDp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1idXR0b24tc2l6ZSk7cGFkZGluZzowO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Y3Vy''@;'; put 'put ''c29yOnBvaW50ZXI7b3V0bGluZS1vZmZzZXQ6Y2FsYygtMSpjYWxjKDUqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRyaWdnZXIgY2RzLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXSwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRyaWdnZXIg''@;'; put 'put ''Y2xyLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXSwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXIgY2RzLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXSwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXIgY2xyLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXXtjb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1pY29uLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRyaWdnZXIgY2RzLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTpob3ZlciwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRyaWdnZXIgY2xyLWljb25bc2hhcGU9YW5nbGUtZG91''@;'; put 'put ''YmxlXTpob3ZlciwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXIgY2RzLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTpob3ZlciwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXIgY2xyLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTpob3Zlcntjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1pY29uLWhvdmVyLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRyaWdnZXIgY2RzLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTphY3RpdmUsLmNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmlnZ2VyIGNsci1pY29uW3NoYXBlPWFuZ2xlLWRv''@;'; put 'put ''dWJsZV06YWN0aXZlLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlciBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdOmFjdGl2ZSwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXIgY2xyLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTphY3RpdmV7Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10b2dnbGUtaWNvbi1hY3RpdmUtY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlcjpkaXNhYmxlZCBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlcjpkaXNhYmxlZCBjbHItaWNv''@;'; put 'put ''bltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlci5kaXNhYmxlZCBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlci5kaXNhYmxlZCBjbHItaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHIt''@;'; put 'put ''dmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlcjpkaXNhYmxlZCBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlcjpkaXNhYmxlZCBjbHItaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5u''@;'; put 'put ''YXYtZ3JvdXAtdHJpZ2dlci5kaXNhYmxlZCBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlci5kaXNhYmxlZCBjbHItaWNvbltzaGFwZT1hbmdsZS1kb3VibGVde2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtdG9nZ2xl''@;'; put 'put ''LWljb24tZGlzYWJsZWQtY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtoZWlnaHQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWhlaWdodCk7cGFkZGluZzp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWFyZ2luLWJvdHRvbTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlciBjZHMtaWNvbnttYXJnaW4tcmlnaHQ6MDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlci5vbi1jb2xsYXBzZXtkaXNwbGF5OmJsb2NrfS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlci5vbi1jb2xsYXBzZSBjZHMtaWNvbnttYXJnaW46MH0uY2xy''@;'; put 'put ''LXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXJ7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87Y29sb3I6aW5oZXJpdDtvdmVyZmxvdzpoaWRkZW47dGV4dC1hbGlnbjpsZWZ0fS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlciAubmF2LWdyb3VwLXRyaWdnZXItaWNv''@;'; put 'put ''bntmbGV4LXNocmluazowO3dpZHRoOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1zaXplKTttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTthbGlnbi1zZWxmOmNlbnRlcjt0cmFuc2l0aW9uOmFsbCAuMnMgZWFzZS1pbi1vdXR9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmln''@;'; put 'put ''Z2VyLWljb257dHJhbnNpdGlvbjphbGwgLjJzIGVhc2UtaW4tb3V0fS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlcisubmF2LWNvbnRlbnR7Ym9yZGVyLXRvcDp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRyaWdnZXItZGl2aWRlci1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci12''@;'; put 'put ''ZXJ0aWNhbC1uYXYtdHJpZ2dlci1kaXZpZGVyLWJvcmRlci1jb2xvcik7cGFkZGluZy10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRleHQsLmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1saW5re2hlaWdodDp2YXIoLS1jbHItdmVydGlj''@;'; put 'put ''YWwtbmF2LWl0ZW0taGVpZ2h0KTtwYWRkaW5nOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1wYWRkaW5nKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9u''@;'; put 'put ''dC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyk7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtvdXRsaW5lLW9mZnNldDpjYWxjKC0x''@;'; put 'put ''KmNhbGMoNSooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdGV4dCwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRleHR7ZmxleDoxIDEgYXV0bzt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6''@;'; put 'put ''ZWxsaXBzaXN9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1saW5re2Rpc3BsYXk6ZmxleDt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtbGluay5hY3RpdmV7Y29sb3I6dmFyKC0tY2xyLXZl''@;'; put 'put ''cnRpY2FsLW5hdi1pdGVtLWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWJnLWNvbG9yKTtwb3NpdGlvbjpyZWxhdGl2ZX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbmsuYWN0aXZlOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0''@;'; put 'put ''aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO2JvcmRlcjowO2JvcmRlci1sZWZ0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTMwMCkgc29saWQgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hs''@;'; put 'put ''aWdodCk7dHJhbnNpdGlvbjpib3JkZXItbGVmdCAuMnMgZWFzZS1pbn0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbmsuYWN0aXZlIC5uYXYtaWNvbntmaWxsOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1hY3RpdmUtY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtbGluay5hY3Rp''@;'; put 'put ''dmU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWhvdmVyLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbmsuYWN0aXZlOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQt''@;'; put 'put ''YWN0aXZlLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbms6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWhvdmVyLWJnLWNvbG9yKTt0ZXh0LWRlY29y''@;'; put 'put ''YXRpb246bm9uZX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbms6YWN0aXZle2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtYWN0aXZlLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtYWN0aXZlLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAu''@;'; put 'put ''bmF2LWhlYWRlcntwYWRkaW5nOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaGVhZGVyLXBhZGRpbmcpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtMik7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1oZWFkZXItZm9udC13ZWlnaHQpO2xp''@;'; put 'put ''bmUtaGVpZ2h0OjEuMzMzMzMzZW07bGV0dGVyLXNwYWNpbmc6LS4wMDgzMzMzM2VtfS5jbHItdmVydGljYWwtbmF2IC5uYXYtaWNvbntmbGV4OjAgMCB2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tc2l6ZSk7YWxpZ24tc2VsZjpjZW50ZXI7aGVpZ2h0OnZhcigtLWNsci12ZXJ0aWNhbC1u''@;'; put 'put ''YXYtaWNvbi1zaXplKTt3aWR0aDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tc2l6ZSk7bWluLWhlaWdodDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1zaXplKTttYXJnaW4tcmlnaHQ6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS0zKTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmNsci12ZXJ0aWNhbC1uYXYgY2xyLXZlcnRpY2FsLW5hdi1ncm91cC1jaGlsZHJlbntkaXNwbGF5OmJsb2NrfS5jbHItdmVydGljYWwtbmF2IC5uYXYtYnRue2ZsZXg6MSAxIGF1dG87cGFkZGluZzowO21hcmdpbjowO2Jh''@;'; put 'put ''Y2tncm91bmQ6MCAwO2JvcmRlcjowO2N1cnNvcjpwb2ludGVyO291dGxpbmUtb2Zmc2V0OmNhbGMoLTEqY2FsYyg1KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKSl9LmNsci12ZXJ0aWNhbC1uYXY+Lm5hdi1saW5rLC5jbHItdmVydGljYWwtbmF2IC5uYXYtY29udGVudD4ubmF2LWxp''@;'; put 'put ''bmt7ZmxleDowIDAgdmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10b2dnbGUtYnV0dG9uLXNpemUpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtbGluaysubmF2LWdyb3VwLXRyaWdnZXJ7ZmxleDowIDAgdmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10b2dnbGUtYnV0dG9uLXNpemUpfS5jbHItdmVydGlj''@;'; put 'put ''YWwtbmF2IC5uYXYtbGluaysubmF2LWdyb3VwLXRyaWdnZXIgLm5hdi1ncm91cC10ZXh0e2Rpc3BsYXk6bm9uZX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWljb24rLm5hdi1ncm91cC10ZXh0e3BhZGRpbmctbGVmdDowfS5jbHItdmVydGljYWwtbmF2Lmhhcy1uYXYtZ3JvdXBzIC5uYXYtY29u''@;'; put 'put ''dGVudD4ubmF2LWxpbmssLmNsci12ZXJ0aWNhbC1uYXYuaGFzLW5hdi1ncm91cHMgLm5hdi1ncm91cCAubmF2LWdyb3VwLXRleHQsLmNsci12ZXJ0aWNhbC1uYXYuaGFzLW5hdi1ncm91cHMgLm5hdi1ncm91cCAubmF2LWdyb3VwLXRyaWdnZXJ7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXZlcnRp''@;'; put 'put ''Y2FsLW5hdi1pdGVtLXRvcC1sZXZlbC1mb250LXdlaWdodCl9LmNsci12ZXJ0aWNhbC1uYXYuaGFzLW5hdi1ncm91cHMgLm5hdi1ncm91cC1jaGlsZHJlbiAubmF2LWxpbmssLmNsci12ZXJ0aWNhbC1uYXYuaGFzLWljb25zIC5uYXYtZ3JvdXAtY2hpbGRyZW4gLm5hdi1saW5re3BhZGRpbmc6''@;'; put 'put ''dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWNoaWxkLXBhZGRpbmcpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAuYWN0aXZlOm5vdCguaXMtZXhwYW5kZWQpIC5uYXYtZ3JvdXAtY29udGVudHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQt''@;'; put 'put ''YmctY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAuYWN0aXZlOm5vdCguaXMtZXhwYW5kZWQpIC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWljb257ZmlsbDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tYWN0aXZlLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdy''@;'; put 'put ''b3VwLWNvbnRlbnQgLm5hdi1saW5rLmFjdGl2ZX4ubmF2LWdyb3VwLXRyaWdnZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1saW5rOmhvdmVyfi5uYXYt''@;'; put 'put ''Z3JvdXAtdHJpZ2dlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaG92ZXItYmctY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWxpbms6YWN0aXZlfi5uYXYtZ3JvdXAtdHJpZ2dlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci12ZXJ0aWNhbC1uYXYtYWN0aXZlLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1saW5rLmFjdGl2ZTpob3Zlcn4ubmF2LWdyb3VwLXRyaWdnZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWhv''@;'; put 'put ''dmVyLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1saW5rLmFjdGl2ZTphY3RpdmV+Lm5hdi1ncm91cC10cmlnZ2Vye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1zZWxlY3RlZC1hY3RpdmUtYmctY29sb3IpfS5jbHIt''@;'; put 'put ''dmVydGljYWwtbmF2Om5vdCguaXMtY29sbGFwc2VkKSAubmF2LWxpbmsrLm5hdi1ncm91cC10cmlnZ2Vye2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVd''@;'; put 'put ''KSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWR7d2lkdGg6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1taW4td2lkdGgpO21pbi13aWR0aDp2YXIoLS1jbHItdmVydGljYWwtbmF2LW1pbi13aWR0aCk7bWF4LXdpZHRoOmNhbGModmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1taW4td2lkdGgp''@;'; put 'put ''ICsgY2FsYygxNCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkpO2N1cnNvcjpwb2ludGVyfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29s''@;'; put 'put ''bGFwc2VkIC5uYXYtaWNvbnttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0ubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9''@;'; put 'put ''b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZCAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1saW5re2ZsZXg6MCAwIHZhcigtLWNsci12ZXJ0aWNhbC1uYXYtbWluLXdpZHRoKX0ubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxv''@;'; put 'put ''dy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZCAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1saW5rfi5uYXYtZ3JvdXAtdHJpZ2dlcntmbGV4OjAgMCBjYWxjKHZhcigtLWNsci12ZXJ0aWNhbC1uYXYtY29sbGFw''@;'; put 'put ''c2VkLWNhcmV0LXNpemUpICsgdmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pY29uLXJpZ2h0LW1hcmdpbikpO3RyYW5zZm9ybTp0cmFuc2xhdGUoY2FsYygtMSp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tc2l6ZSkpKTtwb2ludGVyLWV2ZW50czpub25lfS5tYWluLWNvbnRhaW5lcjpub3Qo''@;'; put 'put ''W2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtbGluaywubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9''@;'; put 'put ''b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZCAubmF2LWdyb3VwLXRyaWdnZXJ7cGFkZGluZzowfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkg''@;'; put 'put ''LmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtZ3JvdXAtdHJpZ2dlcntwYWRkaW5nLWxlZnQ6MH0ubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2''@;'; put 'put ''LmlzLWNvbGxhcHNlZCAubmF2LWdyb3VwLXRyaWdnZXIgY2xyLWljb24ubmF2LWdyb3VwLXRyaWdnZXItaWNvbntoZWlnaHQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWhlaWdodCk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttYXJnaW4tbGVmdDpjYWxjKDMqKDFyZW0v''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21hcmdpbi1yaWdodDowfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtZ3JvdXAt''@;'; put 'put ''dHJpZ2dlciBjZHMtaWNvbi5uYXYtZ3JvdXAtdHJpZ2dlci1pY29ue3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWFyZ2luOjB9Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAu''@;'; put 'put ''Y2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWQgLm5hdi1ncm91cCwubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZCAubmF2LWxpbmt7''@;'; put 'put ''ZGlzcGxheTpub25lfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkLmhhcy1pY29ucyAubmF2LWdyb3Vwe2Rpc3BsYXk6YmxvY2t9Lm1h''@;'; put 'put ''aW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWQuaGFzLWljb25zIC5uYXYtbGlua3tkaXNwbGF5OmZsZXh9Lm1haW4tY29udGFpbmVyOm5vdChb''@;'; put 'put ''Y2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWQuaGFzLWljb25zIC5uYXYtZ3JvdXAtdGV4dCwubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51''@;'; put 'put ''XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZC5oYXMtaWNvbnMgLm5hdi10ZXh0e3Bvc2l0aW9uOmFic29sdXRlO2NsaXA6cmVjdCgxcHgsMXB4LDFweCwxcHgpO2NsaXAtcGF0aDppbnNldCg1MCUpO3BhZGRpbmc6MDti''@;'; put 'put ''b3JkZXI6MDtoZWlnaHQ6MXB4O3dpZHRoOjFweDtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RvcDowO2xlZnQ6MH0uY2xyLXZlcnRpY2FsLW5hdi5uYXYtdHJpZ2dlci0tYm90dG9tIC5uYXYtdHJpZ2dlcntvcmRlcjoyO21hcmdpbi10b3A6MH0uY2xyLXZlcnRpY2FsLW5h''@;'; put 'put ''di5uYXYtdHJpZ2dlci0tYm90dG9tIC5uYXYtdHJpZ2dlcisubmF2LWNvbnRlbnR7Ym9yZGVyLXRvcDowO2JvcmRlci1ib3R0b206dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10cmlnZ2VyLWRpdmlkZXItYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItdmVydGljYWwtbmF2LXRyaWdnZXIt''@;'; put 'put ''ZGl2aWRlci1ib3JkZXItY29sb3IpO3BhZGRpbmctdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItc2xpZGluZy1wYW5lbC10ZXh0LWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JheS03MDApOy0tY2xyLXJlc3BvbnNpdmUtbmF2LXRy''@;'; put 'put ''aWdnZXItYmctY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmF5LTApOy0tY2xyLXJlc3BvbnNpdmUtbmF2LXRyaWdnZXItYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci1yZXNwb25zaXZlLW5hdi1vdmVyZmxvdy1ib3Jk''@;'; put 'put ''ZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLXJlc3BvbnNpdmUtbmF2LWhhbWJ1cmdlci1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApfS5jbHItbmF2LWNsb3Nle21hcmdpbjp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2JhY2tncm91bmQ6MCAwO2JvcmRlcjowO2NvbG9yOnZhcigtLWNvbG9yKTstLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpfS5jbHItbmF2LWNsb3NlOmhvdmVyLC5jbHItbmF2LWNsb3NlOmZvY3Vzey0tY29sb3I6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci13YXJtLWdyYXktMTAwKX0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyLC5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlcntkaXNwbGF5Om5vbmV9LmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcj5zcGFuLC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI+c3BhbjpiZWZvcmUsLmhlYWRl''@;'; put 'put ''ci1oYW1idXJnZXItdHJpZ2dlcj5zcGFuOmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7YmFja2dyb3VuZDp2YXIoLS1jbHItcmVzcG9uc2l2ZS1uYXYtdHJpZ2dlci1iZy1j''@;'; put 'put ''b2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKX0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyPnNwYW57cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlkZGxlfS5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI+c3Bhbjpi''@;'; put 'put ''ZWZvcmUsLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcj5zcGFuOmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowfS5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI+c3BhbjpiZWZvcmV7dG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9LmhlYWRlci1o''@;'; put 'put ''YW1idXJnZXItdHJpZ2dlcj5zcGFuOmFmdGVye2JvdHRvbTpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpfS5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIuYWN0aXZlPnNwYW57YmFja2dyb3VuZDowIDB9LmhlYWRlci1oYW1idXJnZXItdHJpZ2dlci5hY3RpdmU+c3BhbjpiZWZv''@;'; put 'put ''cmUsLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlci5hY3RpdmU+c3BhbjphZnRlcntsZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7dHJhbnNmb3JtLW9yaWdpbjo5JTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNnMgZWFzZX0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyLmFjdGl2ZT5zcGFu''@;'; put 'put ''OmJlZm9yZXt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyLmFjdGl2ZT5zcGFuOmFmdGVye3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX0uaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI+c3BhbiwuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI+c3BhbjpiZWZv''@;'; put 'put ''cmUsLmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyPnNwYW46YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTtiYWNrZ3JvdW5kOnZhcigtLWNsci1yZXNwb25zaXZlLW5hdi10cmln''@;'; put 'put ''Z2VyLWJnLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyPnNwYW57cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlkZGxlfS5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlcj5zcGFuOmJlZm9yZSwuaGVh''@;'; put 'put ''ZGVyLW92ZXJmbG93LXRyaWdnZXI+c3BhbjphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MH0uaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI+c3BhbjpiZWZvcmV7dG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9LmhlYWRlci1vdmVyZmxvdy10cmln''@;'; put 'put ''Z2VyPnNwYW46YWZ0ZXJ7Ym90dG9tOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9LmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyLmFjdGl2ZT5zcGFue2JhY2tncm91bmQ6MCAwfS5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlci5hY3RpdmU+c3BhbjpiZWZvcmUsLmhlYWRlci1vdmVy''@;'; put 'put ''Zmxvdy10cmlnZ2VyLmFjdGl2ZT5zcGFuOmFmdGVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGVmdDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCkpO3RyYW5zZm9ybS1vcmlnaW46LTMlO3RyYW5zaXRp''@;'; put 'put ''b246dHJhbnNmb3JtIC42cyBlYXNlfS5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlci5hY3RpdmU+c3BhbjpiZWZvcmV7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9LmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyLmFjdGl2ZT5zcGFuOmFmdGVye3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX1AbWVkaWEg''@;'; put 'put ''c2NyZWVuIGFuZCAobWF4LXdpZHRoOjk5MnB4KXsubWFpbi1jb250YWluZXIgLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlciwubWFpbi1jb250YWluZXIgLmhlYWRlci1vdmVyZmxvdy10cmlnZ2Vye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JvcmRlcjowO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpw''@;'; put 'put ''b2ludGVyO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2hlaWdodDp2YXIoLS1jbHItaGVhZGVyLWhlaWdodCk7d2lkdGg6dmFyKC0tY2xyLWhlYWRlci1oZWlnaHQpO3BhZGRpbmc6MCAwIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgMDt0ZXh0LWFsaWduOmNlbnRlcjt3''@;'; put 'put ''aGl0ZS1zcGFjZTpub3dyYXA7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1mb250LWNvbG9yKX0ubWFpbi1jb250YWluZXIgLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcjpmb2N1cywubWFpbi1jb250YWluZXIgLmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyOmZvY3Vze291dGxpbmUtb2Zmc2V0OmNh''@;'; put 'put ''bGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSl9Lm1haW4tY29udGFpbmVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI6aG92ZXIsLm1haW4tY29udGFpbmVyIC5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlcjpob3Zlcntjb2xvcjp2YXIoLS1jbHItaGVhZGVyLWZvbnQtY29sb3ItaG92''@;'; put 'put ''ZXIpfS5tYWluLWNvbnRhaW5lciAuaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyOmRpc2FibGVkLC5tYWluLWNvbnRhaW5lciAuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5tYWluLWNvbnRhaW5lciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVs''@;'; put 'put ''LTEsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyIC5jbHItdmVydGljYWwtbmF2LmNsci1uYXYtbGV2ZWwtMXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29s''@;'; put 'put ''dW1uO3Bvc2l0aW9uOmZpeGVkO2luc2V0OjAgYXV0byAwIDA7YmFja2dyb3VuZDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWJnLWNvbG9yKTt6LWluZGV4OjEwMzk7aGVpZ2h0OjEwMHZoO3RyYW5zZm9ybTp0cmFuc2xhdGUoY2FsYygtMSpjYWxjKDM2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWJhc2UpKSkpKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgZWFzZX0ubWFpbi1jb250YWluZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0y''@;'; put 'put ''LC5tYWluLWNvbnRhaW5lciAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwb3NpdGlvbjpmaXhlZDtpbnNldDowIDAgMCBhdXRvO2JhY2tncm91bmQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1iZy1jb2xvcik7ei1p''@;'; put 'put ''bmRleDoxMDM5O2hlaWdodDoxMDB2aDt0cmFuc2Zvcm06dHJhbnNsYXRlKGNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGVhc2V9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYsLm1haW4t''@;'; put 'put ''Y29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIGFzaWRlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0xIGFzaWRlLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYt''@;'; put 'put ''bGV2ZWwtMiAubmF2LC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiBhc2lkZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiBhc2lkZXtmbGV4LWRpcmVjdGlv''@;'; put 'put ''bjpjb2x1bW47YWxpZ24taXRlbXM6c3RyZXRjaH0ubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgYXNpZGUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSBhc2lkZSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgYXNp''@;'; put 'put ''ZGUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiBhc2lkZXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3dpZHRoOjEwMCV9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2''@;'; put 'put ''ZWwtMSAubmF2LC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdntwYWRkaW5nLWxlZnQ6MDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0ubWFpbi1jb250YWluZXIgLnN1''@;'; put 'put ''Ym5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWl0ZW0sLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtaXRlbSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWl0ZW0sLm1haW4tY29udGFpbmVyIC5z''@;'; put 'put ''dWItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtaXRlbXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7bWFyZ2luLXJpZ2h0OjB9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lciAuc3ViLW5h''@;'; put 'put ''di5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbmssLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbmt7cGFkZGluZzp2YXIoLS1jbHItdmVy''@;'; put 'put ''dGljYWwtbmF2LWl0ZW0tcGFkZGluZyk7d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY29sb3IpfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2''@;'; put 'put ''ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZSwubWFpbi1jb250YWlu''@;'; put 'put ''ZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tYWN0aXZlLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYmctY29sb3IpO3Bvc2l0aW9u''@;'; put 'put ''OnJlbGF0aXZlfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmU6YmVmb3JlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbmsuYWN0aXZlOmJlZm9yZSwubWFpbi1jb250YWluZXIg''@;'; put 'put ''LnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbmsuYWN0aXZlOmJlZm9yZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZTpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206''@;'; put 'put ''MDtsZWZ0OjA7d2lkdGg6MTAwJTtib3JkZXI6MDtib3JkZXItbGVmdDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0zMDApIHNvbGlkIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpO3RyYW5zaXRpb246Ym9yZGVyLWxl''@;'; put 'put ''ZnQgLjJzIGVhc2UtaW59Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rLmFjdGl2ZSAubmF2LWljb24sLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmUgLm5hdi1pY29uLC5tYWlu''@;'; put 'put ''LWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluay5hY3RpdmUgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbmsuYWN0aXZlIC5uYXYtaWNvbntmaWxsOnZhcigtLWNsci12ZXJ0aWNhbC1u''@;'; put 'put ''YXYtaWNvbi1hY3RpdmUtY29sb3IpfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmU6aG92ZXIsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmU6aG92ZXIsLm1haW4t''@;'; put 'put ''Y29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZTpob3ZlciwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNh''@;'; put 'put ''bC1uYXYtc2VsZWN0ZWQtaG92ZXItYmctY29sb3IpfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmU6YWN0aXZlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbmsuYWN0aXZlOmFj''@;'; put 'put ''dGl2ZSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbmsuYWN0aXZlOmFjdGl2ZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWFjdGl2ZS1iZy1jb2xvcil9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbms6aG92''@;'; put 'put ''ZXIsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbms6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWFjdGl2''@;'; put 'put ''ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWhvdmVyLWJnLWNvbG9yKTt0ZXh0LWRlY29yYXRpb246bm9uZX0ubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbms6YWN0aXZlLC5tYWluLWNvbnRhaW5lciAu''@;'; put 'put ''c3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbms6YWN0aXZlLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluazphY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluazph''@;'; put 'put ''Y3RpdmV7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtYmctY29sb3IpfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluazpob3Zl''@;'; put 'put ''ciwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbmsuYWN0aXZlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbms6aG92ZXIsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwt''@;'; put 'put ''MSAubmF2IC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5z''@;'; put 'put ''dWItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluazpob3ZlciwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZXtib3gtc2hhZG93Om5vbmV9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5u''@;'; put 'put ''YXYgLm5hdi1saW5rOmhvdmVyOm5vdCguYWN0aXZlKTpiZWZvcmUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluazpob3Zlcjpub3QoLmFjdGl2ZSk6YmVmb3JlLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2''@;'; put 'put ''IC5uYXYtbGluazpob3Zlcjpub3QoLmFjdGl2ZSk6YmVmb3JlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbms6aG92ZXI6bm90KC5hY3RpdmUpOmJlZm9yZXtjb250ZW50Om5vbmV9Lm1haW4tY29udGFpbmVyIC5jbHItdmVydGljYWwtbmF2''@;'; put 'put ''LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0ye2JvcmRlci1yaWdodDpub25lfS5tYWluLWNvbnRhaW5lciAuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXJ7cG9zaXRpb246cmVsYXRpdmV9Lm1haW4tY29udGFpbmVyIC5oZWFk''@;'; put 'put ''ZXItb3ZlcmZsb3ctdHJpZ2dlcjphZnRlcntkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci1kaXZpZGVyLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7d2lkdGg6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtsZWZ0OjB9Lm1haW4tY29udGFpbmVyIC5oZWFkZXIgLmJyYW5kaW5ne21heC13aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWlu''@;'; put 'put ''LXdpZHRoOjA7b3ZlcmZsb3c6aGlkZGVufS5tYWluLWNvbnRhaW5lciAuaGVhZGVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIrLmJyYW5kaW5ne3BhZGRpbmctbGVmdDowO21hcmdpbi1sZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9Lm1haW4tY29udGFpbmVyIC5o''@;'; put 'put ''ZWFkZXIgLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcisuYnJhbmRpbmcgLmNsci1pY29uLC5tYWluLWNvbnRhaW5lciAuaGVhZGVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIrLmJyYW5kaW5nIC5sb2dvLC5tYWluLWNvbnRhaW5lciAuaGVhZGVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdn''@;'; put 'put ''ZXIrLmJyYW5kaW5nIGNkcy1pY29uLC5tYWluLWNvbnRhaW5lciAuaGVhZGVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIrLmJyYW5kaW5nIGNsci1pY29ue2Rpc3BsYXk6bm9uZX0ubWFpbi1jb250YWluZXIgLmhlYWRlciAuYnJhbmRpbmcrLmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyLC5t''@;'; put 'put ''YWluLWNvbnRhaW5lciAuaGVhZGVyIC5oZWFkZXItbmF2Ky5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlciwubWFpbi1jb250YWluZXIgLmhlYWRlciAuaGVhZGVyLW5hdisuY2RrLXZpc3VhbGx5LWhpZGRlbisuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXJ7bWFyZ2luLWxlZnQ6YXV0b30ubWFpbi1j''@;'; put 'put ''b250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItYmFja2Ryb3AsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItYmFja2Ryb3B7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDtiYWNrZ3JvdW5kOnZhcigtLWNkcy1hbGlhcy1v''@;'; put 'put ''YmplY3Qtb3ZlcmxheS1iYWNrZHJvcC1iYWNrZ3JvdW5kKTtjdXJzb3I6cG9pbnRlcjt6LWluZGV4OjEwMzh9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lci5vcGVu''@;'; put 'put ''LWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluaywubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluaywubWFpbi1jb250YWluZXIub3Blbi1v''@;'; put 'put ''dmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGlua3tmbGV4OjAgMCBhdXRvO29wYWNpdHk6MTtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY29sb3IpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFk''@;'; put 'put ''ZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluayAubmF2LWljb24sLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rIC5mYSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJn''@;'; put 'put ''ZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluayAuZmEsLm1haW4tY29udGFpbmVy''@;'; put 'put ''Lm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rIC5mYSwubWFp''@;'; put 'put ''bi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluayAubmF2LWljb24sLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxp''@;'; put 'put ''bmsgLmZhe2Rpc3BsYXk6bm9uZX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsgLm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1u''@;'; put 'put ''YXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluayAubmF2LXRleHQsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsgLm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUg''@;'; put 'put ''LmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rIC5uYXYtdGV4dHtkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCkgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7''@;'; put 'put ''d2hpdGUtc3BhY2U6bm9ybWFsO2NvbG9yOnZhcigtLWNsci1zbGlkaW5nLXBhbmVsLXRleHQtY29sb3IpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7Zm9udC13ZWlnaHQ6NDAwfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRl''@;'; put 'put ''ci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0LC5tYWluLWNvbnRh''@;'; put 'put ''aW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rIC5uYXYtaWNvbisubmF2LXRleHQsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2''@;'; put 'put ''LWxpbmsgLm5hdi1pY29uKy5uYXYtdGV4dHtkaXNwbGF5OmlubGluZS1ibG9ja30ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdl''@;'; put 'put ''ci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlLC5tYWluLWNvbnRhaW5lci5v''@;'; put 'put ''cGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rLmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tYWN0aXZlLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0''@;'; put 'put ''ZWQtYmctY29sb3IpO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluay5hY3RpdmU6YmVmb3JlLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5o''@;'; put 'put ''ZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmU6YmVmb3JlLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLmFjdGl2ZTpiZWZvcmUsLm1haW4tY29udGFp''@;'; put 'put ''bmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsuYWN0aXZlOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO2JvcmRlcjowO2JvcmRlci1sZWZ0''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTMwMCkgc29saWQgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7dHJhbnNpdGlvbjpib3JkZXItbGVmdCAuMnMgZWFzZS1pbn0ubWFpbi1jb250YWluZXIub3Blbi1oYW1i''@;'; put 'put ''dXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlIC5uYXYtaWNvbiwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsuYWN0aXZlIC5u''@;'; put 'put ''YXYtaWNvbiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluay5hY3RpdmUgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHIt''@;'; put 'put ''bmF2LWxldmVsLTIgLm5hdi1saW5rLmFjdGl2ZSAubmF2LWljb257ZmlsbDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tYWN0aXZlLWNvbG9yKX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxp''@;'; put 'put ''bmsuYWN0aXZlOmhvdmVyLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmU6aG92ZXIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2''@;'; put 'put ''LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlOmhvdmVyLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rLmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0''@;'; put 'put ''aWNhbC1uYXYtc2VsZWN0ZWQtaG92ZXItYmctY29sb3IpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluay5hY3RpdmU6YWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51''@;'; put 'put ''IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmU6YWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLmFjdGl2ZTphY3RpdmUsLm1haW4tY29u''@;'; put 'put ''dGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsuYWN0aXZlOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYWN0aXZlLWJnLWNvbG9yKX0ubWFpbi1jb250YWlu''@;'; put 'put ''ZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbms6aG92ZXIsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rOmhvdmVyLC5t''@;'; put 'put ''YWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5r''@;'; put 'put ''OmhvdmVye2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1ob3Zlci1iZy1jb2xvcik7dGV4dC1kZWNvcmF0aW9uOm5vbmV9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1l''@;'; put 'put ''bnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rOmFjdGl2ZSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbms6YWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVu''@;'; put 'put ''LW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rOmFjdGl2ZSwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluazphY3RpdmV7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtYmctY29sb3IpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5u''@;'; put 'put ''YXYtbGluay5hY3RpdmU+Lm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmU+Lm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRl''@;'; put 'put ''ciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLmFjdGl2ZT4ubmF2LXRleHQsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsuYWN0aXZlPi5uYXYtdGV4dHtjb2xvcjppbmhl''@;'; put 'put ''cml0fS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlciwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlcntkaXNwbGF5Om5vbmV9Lm1haW4tY29udGFpbmVy''@;'; put 'put ''Lm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmd7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO292ZXJmbG93OmhpZGRlbjt3aWR0aDpjYWxjKDM2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWF4LXdpZHRoOmNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtYmFzZSkpKTt6LWluZGV4OjEwNDA7cGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmc+Lm5hdi1saW5re292ZXJmbG93OmhpZGRlbn0ubWFpbi1jb250YWluZXIub3Bl''@;'; put 'put ''bi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5icmFuZGluZyAuY2xyLWljb24sLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmcgLmxvZ28sLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmcgY2RzLWlj''@;'; put 'put ''b24sLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmcgY2xyLWljb257ZGlzcGxheTppbmxpbmUtYmxvY2t9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmcgY2RzLWljb25bc2hhcGU9dm0tYnVnXSwu''@;'; put 'put ''bWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5icmFuZGluZyBjbHItaWNvbltzaGFwZT12bS1idWddLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmJyYW5kaW5nIC5jbHItdm13LWxvZ297YmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItaGVhZGVyLWJnLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmJyYW5kaW5nIC50aXRsZXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwt''@;'; put 'put ''bmF2LWl0ZW0tY29sb3IpO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVufS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItbmF2LWNsb3Nle3Bvc2l0aW9uOmZpeGVkO3RvcDowO3JpZ2h0OmF1dG87bGVmdDowO3otaW5kZXg6MTAzOTt0cmFuc2Zv''@;'; put 'put ''cm06dHJhbnNsYXRlKGNhbGMoY2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSkpO3RyYW5zaXRpb246dHJhbnNmb3JtIC42cyBlYXNlfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItbmF2LWNs''@;'; put 'put ''b3NlOmFmdGVye2NvbnRlbnQ6bm9uZX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuY2xyLW5hdi1jbG9zZT5zcGFue2JhY2tncm91bmQ6MCAwfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW46YmVmb3JlLC5tYWluLWNv''@;'; put 'put ''bnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW46YWZ0ZXJ7bGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO3RyYW5zZm9ybS1vcmlnaW46OSU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjZzIGVhc2V9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2Vy''@;'; put 'put ''LW1lbnUgLmNsci1uYXYtY2xvc2U+c3BhbjpiZWZvcmV7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2U+c3BhbjphZnRlcnt0cmFuc2Zvcm06cm90YXRlKC00NWRlZyl9Lm1haW4tY29udGFpbmVyLm9wZW4t''@;'; put 'put ''aGFtYnVyZ2VyLW1lbnUgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSwu''@;'; put 'put ''bWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTF7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1jbHItaGVhZGVyLWhlaWdodCkgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpKTt0cmFuc2Zvcm06dHJhbnNsYXRlKDApO3Ry''@;'; put 'put ''YW5zaXRpb246dHJhbnNmb3JtIC4zcyBlYXNlfS5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVy''@;'; put 'put ''Lm9wZW4tb3ZlcmZsb3ctbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTJ7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgZWFz''@;'; put 'put ''ZX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLnN1Yi1u''@;'; put 'put ''YXYuY2xyLW5hdi1sZXZlbC0ye3BhZGRpbmctdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtyaWdodDowO2xlZnQ6YXV0bzt6LWluZGV4OjEwMzk7dHJhbnNm''@;'; put 'put ''b3JtOnRyYW5zbGF0ZShjYWxjKC0xKmNhbGMoY2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSkpKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNnMgZWFzZX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5j''@;'; put 'put ''bHItbmF2LWNsb3NlOmFmdGVye2NvbnRlbnQ6bm9uZX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW57YmFja2dyb3VuZDowIDB9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZT5zcGFuOmJlZm9yZSwu''@;'; put 'put ''bWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW46YWZ0ZXJ7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMik7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSk7''@;'; put 'put ''dHJhbnNmb3JtLW9yaWdpbjotMyU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjZzIGVhc2V9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZT5zcGFuOmJlZm9yZXt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxv''@;'; put 'put ''dy1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW46YWZ0ZXJ7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3VibmF2''@;'; put 'put ''LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0xe292ZXJmbG93OmluaGVyaXQ7''@;'; put 'put ''d2lkdGg6Y2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC13aWR0aDpjYWxjKDM2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xOmJlZm9y''@;'; put 'put ''ZSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMTpiZWZvcmUsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0xOmJlZm9yZSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJn''@;'; put 'put ''ZXItbWVudSAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTE6YmVmb3Jle2NvbnRlbnQ6bm9uZX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdl''@;'; put 'put ''ci1tZW51IC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluaywubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItdmVydGljYWwtbmF2''@;'; put 'put ''LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmt7d2lkdGg6MTAwJX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWlu''@;'; put 'put ''LWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0ye3dpZHRoOmNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFz''@;'; put 'put ''ZSkpKTttYXgtd2lkdGg6Y2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjU3NnB4KXsubWFpbi1jb250YWluZXIgLmhlYWRlciAuYnJhbmRpbmd7bWF4LXdpZHRoOmNhbGMoMTQ0KigxcmVtL3ZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtYmFzZSkpKTttaW4td2lkdGg6MDtvdmVyZmxvdzpoaWRkZW59Lm1haW4tY29udGFpbmVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSwu''@;'; put 'put ''bWFpbi1jb250YWluZXIgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0xe3RyYW5zZm9ybTp0cmFuc2xhdGUoY2FsYygtMSpjYWxjKDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkpKX0ubWFpbi1jb250YWluZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yLC5t''@;'; put 'put ''YWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lciAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTJ7dHJhbnNmb3JtOnRyYW5zbGF0ZShjYWxjKDI4OCooMXJlbS92''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmJyYW5kaW5ne3dpZHRoOmNhbGMoMjg4KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttYXgtd2lkdGg6Y2FsYygyODgqKDFyZW0vdmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1iYXNlKSkpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXIt''@;'; put 'put ''bWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0xe292ZXJmbG93OmluaGVyaXQ7d2lkdGg6Y2FsYygyODgqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21h''@;'; put 'put ''eC13aWR0aDpjYWxjKDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2V7cG9zaXRpb246Zml4ZWQ7dG9wOjA7cmlnaHQ6YXV0bztsZWZ0OjA7ei1pbmRleDoxMDM5O3RyYW5zZm9ybTp0cmFu''@;'; put 'put ''c2xhdGUoY2FsYyhjYWxjKDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjZzIGVhc2V9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2U6YWZ0''@;'; put 'put ''ZXJ7Y29udGVudDpub25lfS5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZs''@;'; put 'put ''b3ctbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTJ7d2lkdGg6Y2FsYygyODgqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC13aWR0aDpjYWxjKDI4''@;'; put 'put ''OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtyaWdodDowO2xlZnQ6YXV0bzt6LWluZGV4OjEwMzk7dHJhbnNmb3JtOnRyYW5zbGF0ZShjYWxjKC0xKmNh''@;'; put 'put ''bGMoY2FsYygyODgqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSkpKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNnMgZWFzZX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlOmFmdGVye2NvbnRl''@;'; put 'put ''bnQ6bm9uZX19OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItYmFkZ2UtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS1ncmF5KTstLWNsci1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJhZGdlLWluZm8tYmctY29s''@;'; put 'put ''b3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktYmx1ZSk7LS1jbHItYmFkZ2UtaW5mby1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJhZGdlLXN1Y2Nlc3MtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktZ3JlZW4pOy0tY2xyLWJhZGdl''@;'; put 'put ''LXN1Y2Nlc3MtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1iYWRnZS13YXJuaW5nLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LXllbGxvdyk7LS1jbHItYmFkZ2Utd2FybmluZy1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJs''@;'; put 'put ''YWNrKTstLWNsci1iYWRnZS1kYW5nZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktcmVkKTstLWNsci1iYWRnZS1kYW5nZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1iYWRnZS1ncmF5LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy11dGlsaXR5LWdyYXkpOy0tY2xyLWJhZGdlLWdyYXktY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1iYWRnZS1wdXJwbGUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktdmlvbGV0KTstLWNsci1iYWRnZS1wdXJwbGUtY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1iYWRnZS1ibHVlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LWRhcmstYmx1ZSk7LS1jbHItYmFkZ2UtYmx1ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJh''@;'; put 'put ''ZGdlLW9yYW5nZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS10YW5nZXJpbmUpOy0tY2xyLWJhZGdlLW9yYW5nZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWJhZGdlLWxpZ2h0LWJsdWUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXV0aWxpdHktbGlnaHQtYmx1ZSk7LS1jbHItYmFkZ2UtbGlnaHQtYmx1ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApfS5iYWRnZXtkaXNwbGF5OmlubGluZS1mbGV4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1j''@;'; put 'put ''b250ZW50OmNlbnRlcjttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1iYWRnZS1iYWNrZ3JvdW5kLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtib3JkZXItcmFkaXVzOmNhbGMoMip2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKSk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1o''@;'; put 'put ''ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGV0dGVyLXNwYWNpbmcpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSB2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS1jbHItYmFkZ2UtY29sb3IpfS5iYWRnZTp2aXNpdGVke2NvbG9yOnZhcigtLWNsci1iYWRn''@;'; put 'put ''ZS1jb2xvcil9LmJhZGdlOmxpbmt7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYmFkZ2UtZ3JheS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWdyYXktY29sb3IpfS5iYWRnZS5iYWRnZS1ncmF5LC5iYWRnZS5iYWRnZS0xe2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLWdy''@;'; put 'put ''YXktYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS1ncmF5LWNvbG9yKX0uYmFkZ2UuYmFkZ2UtcHVycGxlLC5iYWRnZS5iYWRnZS0ye2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLXB1cnBsZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLXB1cnBsZS1jb2xvcil9LmJh''@;'; put 'put ''ZGdlLmJhZGdlLWJsdWUsLmJhZGdlLmJhZGdlLTN7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2UtYmx1ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWJsdWUtY29sb3IpfS5iYWRnZS5iYWRnZS1vcmFuZ2UsLmJhZGdlLmJhZGdlLTR7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFk''@;'; put 'put ''Z2Utb3JhbmdlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2Utb3JhbmdlLWNvbG9yKX0uYmFkZ2UuYmFkZ2UtbGlnaHQtYmx1ZSwuYmFkZ2UuYmFkZ2UtNXtiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS1saWdodC1ibHVlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2Ut''@;'; put 'put ''bGlnaHQtYmx1ZS1jb2xvcil9LmJhZGdlLmJhZGdlLWluZm97YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2UtaW5mby1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWluZm8tY29sb3IpfS5iYWRnZS5iYWRnZS1zdWNjZXNze2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLXN1Y2Nl''@;'; put 'put ''c3MtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS1zdWNjZXNzLWNvbG9yKX0uYmFkZ2UuYmFkZ2UtZGFuZ2Vye2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLWRhbmdlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWRhbmdlci1jb2xvcil9LmJhZGdlLmJhZGdlLXdh''@;'; put 'put ''cm5pbmd7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2Utd2FybmluZy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLXdhcm5pbmctY29sb3IpfV86LW1zLWlucHV0LXBsYWNlaG9sZGVyIC5iYWRnZSw6cm9vdCAuYmFkZ2V7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIp''@;'; put 'put ''IGNhbGMoMyooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkgMH1Ac3VwcG9ydHMgKC1tcy1pbWUtYWxpZ246YXV0byl7LmJhZGdle3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSBjYWxjKDMqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpIDB9fTpyb290IFtjZHMt''@;'; put 'put ''dGhlbWVdey0tY2xyLWxhYmVsLWZvbnQtY29sb3ItbGlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1sYWJlbC1mb250LWNvbG9yLWRhcms6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMTAwMCk7LS1jbHItbGFiZWwtZGVmYXVsdC1ib3JkZXItY29sb3I6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktZ3JheSk7LS1jbHItbGFiZWwtZGVmYXVsdC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbGFiZWwtYmctaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5k''@;'; put 'put ''LWhvdmVyKTstLWNsci1sYWJlbC1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci1sYWJlbC1iZy1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWFjdGl2ZSk7LS1j''@;'; put 'put ''bHItbGFiZWwtYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci1sYWJlbC1iZy1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtZGlzYWJsZWQpOy0tY2xyLWxh''@;'; put 'put ''YmVsLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1sYWJlbC1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItbGFiZWwtZ3JheS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''b2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbGFiZWwtZ3JheS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktZ3JheSk7LS1jbHItbGFiZWwtZ3JheS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxhYmVsLXB1cnBsZS1iZy1jb2xv''@;'; put 'put ''cjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbGFiZWwtcHVycGxlLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS12aW9sZXQpOy0tY2xyLWxhYmVsLXB1cnBsZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0t''@;'; put 'put ''Y2xyLWxhYmVsLWJsdWUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTApOy0tY2xyLWxhYmVsLWJsdWUtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LWRhcmstYmx1ZSk7LS1jbHItbGFiZWwtYmx1ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxhYmVsLW9yYW5nZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbGFiZWwtb3JhbmdlLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS10YW5nZXJpbmUpOy0tY2xyLWxhYmVsLW9yYW5n''@;'; put 'put ''ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxhYmVsLWxpZ2h0LWJsdWUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTApOy0tY2xyLWxhYmVsLWxpZ2h0LWJsdWUtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11''@;'; put 'put ''dGlsaXR5LWxpZ2h0LWJsdWUpOy0tY2xyLWxhYmVsLWxpZ2h0LWJsdWUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1sYWJlbC1pbmZvLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LWJsdWUtdGludCk7LS1jbHItbGFiZWwtaW5mby1m''@;'; put 'put ''b250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItbGFiZWwtaW5mby1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktYmx1ZSk7LS1jbHItbGFiZWwtc3VjY2Vzcy1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS1ncmVl''@;'; put 'put ''bi10aW50KTstLWNsci1sYWJlbC1zdWNjZXNzLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1sYWJlbC1zdWNjZXNzLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS1ncmVlbik7LS1jbHItbGFiZWwtd2FybmluZy1iZy1j''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS15ZWxsb3ctdGludCk7LS1jbHItbGFiZWwtd2FybmluZy1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItbGFiZWwtd2FybmluZy1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxp''@;'; put 'put ''dHkteWVsbG93KTstLWNsci1sYWJlbC1kYW5nZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktcmVkLXRpbnQpOy0tY2xyLWxhYmVsLWRhbmdlci1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItbGFiZWwtZGFuZ2VyLWJvcmRl''@;'; put 'put ''ci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS1yZWQpOy0tY2xyLWxhYmVsLWJvcmRlci13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApfS5sYWJlbCxhLmxhYmVse2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZv''@;'; put 'put ''bnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9n''@;'; put 'put ''cmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS01KTtib3JkZXI6dmFyKC0tY2xyLWxhYmVsLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWxhYmVsLWRlZmF1bHQtYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0yMDApO2hlaWdodDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbjowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSAwO3doaXRlLXNwYWNlOm5vd3JhcDtjb2xvcjp2YXIoLS1jbHItbGFiZWwtZm9udC1jb2xvci1saWdodCk7dGV4dC1kZWNvcmF0aW9uOm5vbmV9''@;'; put 'put ''LmxhYmVsOmhhcyg+LmJhZGdlKSwubGFiZWw6aGFzKD5jZHMtaWNvbiksYS5sYWJlbDpoYXMoPi5iYWRnZSksYS5sYWJlbDpoYXMoPmNkcy1pY29uKXtwYWRkaW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmxhYmVsIC5iYWRnZSwubGFiZWwgY2RzLWljb24sYS5sYWJlbCAu''@;'; put 'put ''YmFkZ2UsYS5sYWJlbCBjZHMtaWNvbnttYXJnaW46MDt0ZXh0LWRlY29yYXRpb246bm9uZX0ubGFiZWw6aGFzKC5iYWRnZSksYS5sYWJlbDpoYXMoLmJhZGdlKXtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0ubGFiZWwuY2xpY2thYmxlOm5vdCg6aGFzKC50ZXh0KSksYS5sYWJlbC5j''@;'; put 'put ''bGlja2FibGU6bm90KDpoYXMoLnRleHQpKXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5sYWJlbC5jbGlja2FibGU+LnRleHQsYS5sYWJlbC5jbGlja2FibGU+LnRleHR7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0ubGFiZWw6dmlzaXRlZCxhLmxhYmVsOnZpc2l0ZWR7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWxhYmVsLWZvbnQtY29sb3ItbGlnaHQpfS5sYWJlbDpmb2N1cywubGFiZWw6aG92ZXIsLmxhYmVsOmFjdGl2ZSxhLmxhYmVsOmZvY3VzLGEubGFiZWw6aG92ZXIsYS5sYWJlbDphY3RpdmV7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmxhYmVsLmNsaWNrYWJsZTpub3QoLmRpc2FibGVk''@;'; put 'put ''KTpob3ZlcixhLmxhYmVsLmNsaWNrYWJsZTpub3QoLmRpc2FibGVkKTpob3Zlcnt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kOnZhcigtLWNsci1sYWJlbC1iZy1ob3Zlci1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWxhYmVsLWhvdmVyLWNvbG9yKX0ubGFiZWwuY2xpY2thYmxlOm5v''@;'; put 'put ''dCguZGlzYWJsZWQpOmFjdGl2ZSxhLmxhYmVsLmNsaWNrYWJsZTpub3QoLmRpc2FibGVkKTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWxhYmVsLWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZDp2YXIoLS1jbHItbGFiZWwtYmctYWN0aXZlLWNvbG9yKTt0cmFuc2Zvcm06dHJhbnNsYXRlWSh2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTIpKX0ubGFiZWwubGFiZWwtZ3JheSwubGFiZWwubGFiZWwtMSxhLmxhYmVsLmxhYmVsLWdyYXksYS5sYWJlbC5sYWJlbC0xe2JvcmRlcjp2YXIoLS1jbHItbGFiZWwtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItbGFiZWwtZ3JheS1ib3JkZXItY29s''@;'; put 'put ''b3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWxhYmVsLWdyYXktYmctY29sb3IpfS5sYWJlbC5sYWJlbC1ncmF5Pi5iYWRnZSxhLmxhYmVsLmxhYmVsLWdyYXk+LmJhZGdle2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLWdyYXktYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRn''@;'; put 'put ''ZS1ncmF5LWNvbG9yKX0ubGFiZWwubGFiZWwtcHVycGxlLC5sYWJlbC5sYWJlbC0yLGEubGFiZWwubGFiZWwtcHVycGxlLGEubGFiZWwubGFiZWwtMntib3JkZXI6dmFyKC0tY2xyLWxhYmVsLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWxhYmVsLXB1cnBsZS1ib3JkZXItY29sb3Ip''@;'; put 'put ''O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWxhYmVsLXB1cnBsZS1iZy1jb2xvcil9LmxhYmVsLmxhYmVsLXB1cnBsZT4uYmFkZ2UsYS5sYWJlbC5sYWJlbC1wdXJwbGU+LmJhZGdle2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLXB1cnBsZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWJhZGdlLXB1cnBsZS1jb2xvcil9LmxhYmVsLmxhYmVsLWJsdWUsLmxhYmVsLmxhYmVsLTMsYS5sYWJlbC5sYWJlbC1ibHVlLGEubGFiZWwubGFiZWwtM3tib3JkZXI6dmFyKC0tY2xyLWxhYmVsLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWxhYmVsLWJsdWUtYm9yZGVyLWNvbG9y''@;'; put 'put ''KTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1sYWJlbC1ibHVlLWJnLWNvbG9yKX0ubGFiZWwubGFiZWwtYmx1ZT4uYmFkZ2UsYS5sYWJlbC5sYWJlbC1ibHVlPi5iYWRnZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS1ibHVlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2Ut''@;'; put 'put ''Ymx1ZS1jb2xvcil9LmxhYmVsLmxhYmVsLW9yYW5nZSwubGFiZWwubGFiZWwtNCxhLmxhYmVsLmxhYmVsLW9yYW5nZSxhLmxhYmVsLmxhYmVsLTR7Ym9yZGVyOnZhcigtLWNsci1sYWJlbC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci1sYWJlbC1vcmFuZ2UtYm9yZGVyLWNvbG9yKTti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1sYWJlbC1vcmFuZ2UtYmctY29sb3IpfS5sYWJlbC5sYWJlbC1vcmFuZ2U+LmJhZGdlLGEubGFiZWwubGFiZWwtb3JhbmdlPi5iYWRnZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS1vcmFuZ2UtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1i''@;'; put 'put ''YWRnZS1vcmFuZ2UtY29sb3IpfS5sYWJlbC5sYWJlbC1saWdodC1ibHVlLC5sYWJlbC5sYWJlbC01LGEubGFiZWwubGFiZWwtbGlnaHQtYmx1ZSxhLmxhYmVsLmxhYmVsLTV7Ym9yZGVyOnZhcigtLWNsci1sYWJlbC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci1sYWJlbC1saWdodC1i''@;'; put 'put ''bHVlLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbGFiZWwtbGlnaHQtYmx1ZS1iZy1jb2xvcil9LmxhYmVsLmxhYmVsLWxpZ2h0LWJsdWU+LmJhZGdlLGEubGFiZWwubGFiZWwtbGlnaHQtYmx1ZT4uYmFkZ2V7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2UtbGln''@;'; put 'put ''aHQtYmx1ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWxpZ2h0LWJsdWUtY29sb3IpfS5sYWJlbC5sYWJlbC1pbmZvLGEubGFiZWwubGFiZWwtaW5mb3tiYWNrZ3JvdW5kOnZhcigtLWNsci1sYWJlbC1pbmZvLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItbGFiZWwtaW5mby1m''@;'; put 'put ''b250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2xyLWxhYmVsLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWxhYmVsLWluZm8tYm9yZGVyLWNvbG9yKX0ubGFiZWwubGFiZWwtaW5mbz4uYmFkZ2UsYS5sYWJlbC5sYWJlbC1pbmZvPi5iYWRnZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRn''@;'; put 'put ''ZS1pbmZvLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2UtaW5mby1jb2xvcil9LmxhYmVsLmxhYmVsLXN1Y2Nlc3MsYS5sYWJlbC5sYWJlbC1zdWNjZXNze2JhY2tncm91bmQ6dmFyKC0tY2xyLWxhYmVsLXN1Y2Nlc3MtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1sYWJlbC1zdWNj''@;'; put 'put ''ZXNzLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jbHItbGFiZWwtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItbGFiZWwtc3VjY2Vzcy1ib3JkZXItY29sb3IpfS5sYWJlbC5sYWJlbC1zdWNjZXNzPi5iYWRnZSxhLmxhYmVsLmxhYmVsLXN1Y2Nlc3M+LmJhZGdle2JhY2tncm91bmQ6''@;'; put 'put ''dmFyKC0tY2xyLWJhZGdlLXN1Y2Nlc3MtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS1zdWNjZXNzLWNvbG9yKX0ubGFiZWwubGFiZWwtd2FybmluZyxhLmxhYmVsLmxhYmVsLXdhcm5pbmd7YmFja2dyb3VuZDp2YXIoLS1jbHItbGFiZWwtd2FybmluZy1iZy1jb2xvcik7Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWxhYmVsLXdhcm5pbmctZm9udC1jb2xvcik7Ym9yZGVyOnZhcigtLWNsci1sYWJlbC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci1sYWJlbC13YXJuaW5nLWJvcmRlci1jb2xvcil9LmxhYmVsLmxhYmVsLXdhcm5pbmc+LmJhZGdlLGEubGFiZWwubGFiZWwtd2Fybmlu''@;'; put 'put ''Zz4uYmFkZ2V7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2Utd2FybmluZy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLXdhcm5pbmctY29sb3IpfS5sYWJlbC5sYWJlbC1kYW5nZXIsYS5sYWJlbC5sYWJlbC1kYW5nZXJ7YmFja2dyb3VuZDp2YXIoLS1jbHItbGFiZWwtZGFuZ2Vy''@;'; put 'put ''LWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItbGFiZWwtZGFuZ2VyLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jbHItbGFiZWwtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItbGFiZWwtZGFuZ2VyLWJvcmRlci1jb2xvcil9LmxhYmVsLmxhYmVsLWRhbmdlcj4uYmFkZ2UsYS5sYWJl''@;'; put 'put ''bC5sYWJlbC1kYW5nZXI+LmJhZGdle2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLWRhbmdlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWRhbmdlci1jb2xvcil9LmxhYmVsPi5iYWRnZSxhLmxhYmVsPi5iYWRnZXttYXJnaW46MH0ubGFiZWwuZGlzYWJsZWQsLmxhYmVsOmRp''@;'; put 'put ''c2FibGVkLGEubGFiZWwuZGlzYWJsZWQsYS5sYWJlbDpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWQ7cG9pbnRlci1ldmVudHM6bm9uZTtiYWNrZ3JvdW5kOnZhcigtLWNsci1sYWJlbC1iZy1kaXNhYmxlZC1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWxhYmVsLWRpc2FibGVkLWNvbG9yKTti''@;'; put 'put ''b3JkZXItY29sb3I6dmFyKC0tY2xyLWxhYmVsLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmxhYmVsLmRpc2FibGVkIC5iYWRnZSwubGFiZWw6ZGlzYWJsZWQgLmJhZGdlLGEubGFiZWwuZGlzYWJsZWQgLmJhZGdlLGEubGFiZWw6ZGlzYWJsZWQgLmJhZGdle2JhY2tncm91bmQ6dmFyKC0tY2xy''@;'; put 'put ''LWxhYmVsLWRpc2FibGVkLWNvbG9yKX1ALW1vei1kb2N1bWVudCB1cmwtcHJlZml4KCl7LmxhYmVsLGEubGFiZWx7dmVydGljYWwtYWxpZ246Ym90dG9tfX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1wcm9ncmVzcy1kZWZhdWx0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mbyk7''@;'; put 'put ''LS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTE6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzKTstLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlci1zaGFkZSk7LS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTM6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXN0YXR1cy13YXJuaW5nKTstLWNsci1wcm9ncmVzcy1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLXNoYWRlKTstLWNsci1wcm9ncmVzcy1sYWJlbC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApfS5wcm9ncmVz''@;'; put 'put ''cywucHJvZ3Jlc3Mtc3RhdGlje2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czowO2ZvbnQtc2l6ZTppbmhlcml0O2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO21hcmdpbjowO292ZXJmbG93OmhpZGRlbjttYXgtaGVpZ2h0OnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtNik7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJX0ucHJvZ3Jlc3M+cHJvZ3Jlc3N7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBl''@;'; put 'put ''YXJhbmNlOm5vbmU7Y29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWRlZmF1bHQtY29sb3IpO2Rpc3BsYXk6YmxvY2s7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYmctY29sb3IpO2JvcmRlcjowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LnByb2dyZXNzPnByb2dyZXNzOjot''@;'; put 'put ''d2Via2l0LXByb2dyZXNzLXZhbHVle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWRlZmF1bHQtY29sb3IpfS5wcm9ncmVzcz5wcm9ncmVzczo6LW1vei1wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtZGVmYXVsdC1jb2xvcil9LnBy''@;'; put 'put ''b2dyZXNzPnByb2dyZXNzW3ZhbHVlPSIwIl06Oi1tb3otcHJvZ3Jlc3MtYmFyey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO2NvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1iZy1jb2xvcik7''@;'; put 'put ''bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1pbWFnZTpub25lfS5wcm9ncmVzcz5wcm9ncmVzc1t2YWx1ZT0iMCJdOjotd2Via2l0LXByb2dyZXNzLXZhbHVley13ZWJraXQtdHJhbnNpdGlvbjpub25l''@;'; put 'put ''O3RyYW5zaXRpb246bm9uZX0ucHJvZ3Jlc3M+cHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jlc3MtYmFye2JvcmRlci1yYWRpdXM6MDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1iZy1jb2xvcil9LnByb2dyZXNzPnByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLWlubmVyLWVs''@;'; put 'put ''ZW1lbnR7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmV9LnByb2dyZXNzPnByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLXZhbHVley13ZWJraXQtdHJhbnNpdGlvbjp3aWR0aCAuMjNzIGVh''@;'; put 'put ''c2UtaW47dHJhbnNpdGlvbjp3aWR0aCAuMjNzIGVhc2UtaW47Ym9yZGVyLXJhZGl1czowfS5wcm9ncmVzcy5zdWNjZXNzPnByb2dyZXNze2NvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMSl9LnByb2dyZXNzLnN1Y2Nlc3M+cHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jlc3MtdmFs''@;'; put 'put ''dWV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTEpfS5wcm9ncmVzcy5zdWNjZXNzPnByb2dyZXNzOjotbW96LXByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMSl9LnByb2dyZXNzLndhcm5pbmc+''@;'; put 'put ''cHJvZ3Jlc3N7Y29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0zKX0ucHJvZ3Jlc3Mud2FybmluZz5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMyl9LnByb2dyZXNzLndhcm5pbmc+''@;'; put 'put ''cHJvZ3Jlc3M6Oi1tb3otcHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0zKX0ucHJvZ3Jlc3MuZGFuZ2VyPnByb2dyZXNze2NvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMil9LnByb2dyZXNzLmRhbmdlcj5wcm9ncmVz''@;'; put 'put ''czo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMil9LnByb2dyZXNzLmRhbmdlcj5wcm9ncmVzczo6LW1vei1wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9y''@;'; put 'put ''LTIpfS5wcm9ncmVzcy5sYWJlbGVkLC5wcm9ncmVzcy1zdGF0aWMubGFiZWxlZHtwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO2NvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1sYWJlbC1jb2xvcil9LnByb2dyZXNzLmxhYmVsZWQ+c3Bh''@;'; put 'put ''biwucHJvZ3Jlc3Mtc3RhdGljLmxhYmVsZWQ+c3BhbntkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7bWFyZ2luLXRvcDowO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKX0ucHJvZ3Jlc3MuY29tcGFjdDpu''@;'; put 'put ''b3QoLmxhYmVsZWQpLC5wcm9ncmVzcy1zdGF0aWMuY29tcGFjdDpub3QoLmxhYmVsZWQpe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5wcm9ncmVzcy5jb21wYWN0LmxhYmVsZWQ+LnByb2dyZXNzLW1ldGVyLC5wcm9ncmVzcy1zdGF0aWMuY29tcGFjdC5sYWJlbGVkPi5wcm9n''@;'; put 'put ''cmVzcy1tZXRlcntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX1Aa2V5ZnJhbWVzIGNsci1wcm9ncmVzcy1mYWRlezAle29wYWNpdHk6MX10b3tvcGFjaXR5OjB9fS5wcm9ncmVzcy5wcm9ncmVzcy1mYWRlPnByb2dyZXNzW3Zh''@;'; put 'put ''bHVlPSIxMDAiXSwucHJvZ3Jlc3MucHJvZ3Jlc3MtZmFkZT5wcm9ncmVzc1t2YWx1ZT0iMTAwIl0rc3BhbnthbmltYXRpb246Y2xyLXByb2dyZXNzLWZhZGUgLjNzIGxpbmVhciAuNXMgZm9yd2FyZHN9LnByb2dyZXNzLmZsYXNoLWRhbmdlcj5wcm9ncmVzcywucHJvZ3Jlc3MuZmxhc2g+cHJv''@;'; put 'put ''Z3Jlc3N7dHJhbnNpdGlvbjpjb2xvciAuMXMgZWFzZS1vdXQgMXN9LnByb2dyZXNzLmZsYXNoLWRhbmdlcj5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZSwucHJvZ3Jlc3MuZmxhc2g+cHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWV7LXdlYmtpdC10cmFuc2l0aW9uOndp''@;'; put 'put ''ZHRoIC4yM3MgZWFzZS1pbixiYWNrZ3JvdW5kLWNvbG9yIC4xcyBlYXNlLW91dCAuM3M7dHJhbnNpdGlvbjp3aWR0aCAuMjNzIGVhc2UtaW4sYmFja2dyb3VuZC1jb2xvciAuMXMgZWFzZS1vdXQgLjNzfS5wcm9ncmVzcy5mbGFzaC1kYW5nZXI+cHJvZ3Jlc3NbdmFsdWU9IjAiXTo6LXdlYmtp''@;'; put 'put ''dC1wcm9ncmVzcy12YWx1ZSwucHJvZ3Jlc3MuZmxhc2g+cHJvZ3Jlc3NbdmFsdWU9IjAiXTo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXstd2Via2l0LXRyYW5zaXRpb246bm9uZTt0cmFuc2l0aW9uOm5vbmV9LnByb2dyZXNzLmZsYXNoLWRhbmdlcj5wcm9ncmVzczo6LW1vei1wcm9ncmVzcy1i''@;'; put 'put ''YXIsLnByb2dyZXNzLmZsYXNoPnByb2dyZXNzOjotbW96LXByb2dyZXNzLWJhcnstbW96LXRyYW5zaXRpb246d2lkdGggLjIzcyBlYXNlLWluLGJhY2tncm91bmQtY29sb3IgLjFzIGVhc2Utb3V0IC4zczt0cmFuc2l0aW9uOndpZHRoIC4yM3MgZWFzZS1pbixiYWNrZ3JvdW5kLWNvbG9yIC4x''@;'; put 'put ''cyBlYXNlLW91dCAuM3N9LnByb2dyZXNzLmZsYXNoPnByb2dyZXNzW3ZhbHVlPSIxMDAiXXtjb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTEpfS5wcm9ncmVzcy5mbGFzaD5wcm9ncmVzc1t2YWx1ZT0iMTAwIl06Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWV7YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTEpfS5wcm9ncmVzcy5mbGFzaD5wcm9ncmVzc1t2YWx1ZT0iMTAwIl06Oi1tb3otcHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0xKX0ucHJvZ3Jlc3MucHJvZ3Jlc3MtZmFk''@;'; put 'put ''ZS5mbGFzaD5wcm9ncmVzc1t2YWx1ZT0iMTAwIl0sLnByb2dyZXNzLnByb2dyZXNzLWZhZGUuZmxhc2g+cHJvZ3Jlc3NbdmFsdWU9IjEwMCJdK3NwYW57YW5pbWF0aW9uOmNsci1wcm9ncmVzcy1mYWRlIC42cyBsaW5lYXIgMXMgZm9yd2FyZHN9LnByb2dyZXNzLmZsYXNoLWRhbmdlcj5wcm9n''@;'; put 'put ''cmVzc1t2YWx1ZT0iMTAwIl17Y29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0yKX0ucHJvZ3Jlc3MuZmxhc2gtZGFuZ2VyPnByb2dyZXNzW3ZhbHVlPSIxMDAiXTo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQt''@;'; put 'put ''Y29sb3ItMil9LnByb2dyZXNzLmZsYXNoLWRhbmdlcj5wcm9ncmVzc1t2YWx1ZT0iMTAwIl06Oi1tb3otcHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0yKX1Aa2V5ZnJhbWVzIGNsci1wcm9ncmVzcy1sb29wZXJ7MCV7bGVmdDotMTAw''@;'; put 'put ''JX10b3tsZWZ0OjEwMCV9fS5wcm9ncmVzcy5sb29we3Bvc2l0aW9uOnJlbGF0aXZlfS5wcm9ncmVzcy5sb29wPnByb2dyZXNze292ZXJmbG93OmhpZGRlbjtjb2xvcjp0cmFuc3BhcmVudH0ucHJvZ3Jlc3MubG9vcD5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXtiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOnRyYW5zcGFyZW50fS5wcm9ncmVzcy5sb29wPnByb2dyZXNzOjotbW96LXByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5wcm9ncmVzcy5sb29wOmFmdGVye2FuaW1hdGlvbjpjbHItcHJvZ3Jlc3MtbG9vcGVyIDJzIGVhc2UtaW4tb3V0IGluZmluaXRl''@;'; put 'put ''O2NvbnRlbnQ6IiAiO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWRlZmF1bHQtY29sb3IpO3dpZHRoOjUwJX0ucHJvZ3Jlc3MubG9vcC5kYW5nZXI6YWZ0ZXJ7YmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTIpfS5wcm9ncmVzcy5sb29wLndhcm5pbmc6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTMpfS5wcm9ncmVzcy5sb29wLnN1Y2Nlc3M6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTEpfS5wcm9ncmVzcy1zdGF0aWN7cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyOjA7d2lkdGg6MTAwJX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1iZy1jb2xvcik7''@;'; put 'put ''ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1kZWZhdWx0LWNvbG9yKTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cG9zaXRpb246YWJz''@;'; put 'put ''b2x1dGU7ZGlzcGxheTpibG9jazt3aWR0aDowO2NvbnRlbnQ6IiAifS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjEiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMiJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3Rh''@;'; put 'put ''dGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzIl06YmVmb3Jle3dpZHRoOjIlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjQiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNSJdOmJlZm9yZSwu''@;'; put 'put ''cHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjciXTpiZWZvcmV7d2lkdGg6NSV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0i''@;'; put 'put ''OCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjEwIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFs''@;'; put 'put ''dWU9IjExIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjEyIl06YmVmb3Jle3dpZHRoOjEwJX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIxMyJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVz''@;'; put 'put ''cy1tZXRlcltkYXRhLXZhbHVlPSIxNCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIxNSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIxNiJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5w''@;'; put 'put ''cm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIxNyJdOmJlZm9yZXt3aWR0aDoxNSV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMTgiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMTkiXTpiZWZvcmUsLnBy''@;'; put 'put ''b2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjAiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjEiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjIiXTpiZWZv''@;'; put 'put ''cmV7d2lkdGg6MjAlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjIzIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjI0Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEt''@;'; put 'put ''dmFsdWU9IjI1Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjI2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjI3Il06YmVmb3Jle3dpZHRoOjI1JX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9n''@;'; put 'put ''cmVzcy1tZXRlcltkYXRhLXZhbHVlPSIyOCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIyOSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzMCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGlj''@;'; put 'put ''Pi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzMSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzMiJdOmJlZm9yZXt3aWR0aDozMCV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzMiXTpiZWZvcmUs''@;'; put 'put ''LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzQiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzUiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzYiXTpi''@;'; put 'put ''ZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzciXTpiZWZvcmV7d2lkdGg6MzUlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjM4Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2Rh''@;'; put 'put ''dGEtdmFsdWU9IjM5Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjQwIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjQxIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1l''@;'; put 'put ''dGVyW2RhdGEtdmFsdWU9IjQyIl06YmVmb3Jle3dpZHRoOjQwJX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0MyJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0NCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3Rh''@;'; put 'put ''dGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0NSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0NiJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0NyJdOmJlZm9yZXt3aWR0aDo0''@;'; put 'put ''NSV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNDgiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNDkiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNTAi''@;'; put 'put ''XTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNTEiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNTIiXTpiZWZvcmV7d2lkdGg6NTAlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVy''@;'; put 'put ''W2RhdGEtdmFsdWU9IjUzIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjU0Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjU1Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNz''@;'; put 'put ''LW1ldGVyW2RhdGEtdmFsdWU9IjU2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjU3Il06YmVmb3Jle3dpZHRoOjU1JX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI1OCJdOmJlZm9yZSwucHJvZ3Jlc3Mt''@;'; put 'put ''c3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI1OSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2MCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2MSJdOmJlZm9yZSwucHJv''@;'; put 'put ''Z3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2MiJdOmJlZm9yZXt3aWR0aDo2MCV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNjMiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0i''@;'; put 'put ''NjQiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNjUiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNjYiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12''@;'; put 'put ''YWx1ZT0iNjciXTpiZWZvcmV7d2lkdGg6NjUlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjY4Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjY5Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dy''@;'; put 'put ''ZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjcwIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjcxIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjcyIl06YmVmb3Jle3dpZHRoOjcwJX0ucHJvZ3Jl''@;'; put 'put ''c3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3MyJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3NCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3NSJdOmJlZm9yZSwu''@;'; put 'put ''cHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3NiJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3NyJdOmJlZm9yZXt3aWR0aDo3NSV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1''@;'; put 'put ''ZT0iNzgiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNzkiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iODAiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0''@;'; put 'put ''YS12YWx1ZT0iODEiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iODIiXTpiZWZvcmV7d2lkdGg6ODAlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjgzIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnBy''@;'; put 'put ''b2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijg0Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijg1Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijg2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0''@;'; put 'put ''aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijg3Il06YmVmb3Jle3dpZHRoOjg1JX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI4OCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI4OSJdOmJlZm9y''@;'; put 'put ''ZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5MCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5MSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5MiJd''@;'; put 'put ''OmJlZm9yZXt3aWR0aDo5MCV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iOTMiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iOTQiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJb''@;'; put 'put ''ZGF0YS12YWx1ZT0iOTUiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iOTYiXTpiZWZvcmV7d2lkdGg6OTUlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijk3Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+''@;'; put 'put ''LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijk4Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijk5Il06YmVmb3Jle3dpZHRoOjk4JX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIxMDAiXTpiZWZvcmV7''@;'; put 'put ''d2lkdGg6MTAwJX0ucHJvZ3Jlc3Mtc3RhdGljLmxhYmVsZWQ+LnByb2dyZXNzLW1ldGVye3JpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpfS5wcm9ncmVzcy1zdGF0aWMuc3VjY2Vzcz4ucHJvZ3Jlc3MtbWV0ZXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dy''@;'; put 'put ''ZXNzLWFsdC1jb2xvci0xKX0ucHJvZ3Jlc3Mtc3RhdGljLndhcm5pbmc+LnByb2dyZXNzLW1ldGVyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMyl9LnByb2dyZXNzLXN0YXRpYy5kYW5nZXI+LnByb2dyZXNzLW1ldGVyOmJlZm9yZXtiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMil9LmNhcmQtYmxvY2sgLnByb2dyZXNzLC5jYXJkLWJsb2NrIC5wcm9ncmVzcy1zdGF0aWMsLmNhcmQtZm9vdGVyIC5wcm9ncmVzcywuY2FyZC1mb290ZXIgLnByb2dyZXNzLXN0YXRpY3toZWlnaHQ6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS0zKTtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7bWFyZ2luOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSkgMCAwfS5jYXJkLWJsb2NrIC5wcm9ncmVzcy50b3AsLmNhcmQtYmxvY2sgLnByb2dyZXNzLXN0YXRpYy50b3AsLmNhcmQtZm9vdGVyIC5wcm9n''@;'; put 'put ''cmVzcy50b3AsLmNhcmQtZm9vdGVyIC5wcm9ncmVzcy1zdGF0aWMudG9we21hcmdpbi10b3A6MDt0b3A6MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWNsci1jYXJkLWJvcmRlci1yYWRpdXMsIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApKTtib3JkZXIt''@;'; put 'put ''dG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1jbHItY2FyZC1ib3JkZXItcmFkaXVzLCB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKSl9LmNhcmQtYmxvY2sgLnByb2dyZXNzPnByb2dyZXNzLC5jYXJkLWJsb2NrIC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVy''@;'; put 'put ''LC5jYXJkLWZvb3RlciAucHJvZ3Jlc3M+cHJvZ3Jlc3MsLmNhcmQtZm9vdGVyIC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO3Bvc2l0aW9uOmFic29sdXRlfS5wcm9ncmVzcy1ibG9ja3tkaXNwbGF5OmZsZXg7d2lkdGg6''@;'; put 'put ''MTAwJTthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtjb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtbGFiZWwtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFj''@;'; put 'put ''aW5nKX0ucHJvZ3Jlc3MtYmxvY2s+KntmbGV4OjAgMCBhdXRvO3BhZGRpbmctcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0ucHJvZ3Jlc3MtYmxvY2s+Omxhc3QtY2hpbGR7cGFkZGluZy1yaWdodDowfS5wcm9ncmVzcy1ibG9jaz5sYWJlbCwucHJvZ3Jlc3MtYmxvY2s+c3Bhbntt''@;'; put 'put ''YXgtd2lkdGg6MzMlfS5wcm9ncmVzcy1ibG9jaz4ucHJvZ3Jlc3MsLnByb2dyZXNzLWJsb2NrPi5wcm9ncmVzcy1zdGF0aWN7ZmxleDowIDEgYXV0b30ucHJvZ3Jlc3MtYmxvY2s+LnByb2dyZXNzLWdyb3Vwe2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6YXV0bztmbGV4OjAgMSBhdXRv''@;'; put 'put ''O2Rpc3BsYXk6ZmxleDt3aWR0aDoxMDAlfS5wcm9ncmVzcy1ibG9jaz4ucHJvZ3Jlc3MtZ3JvdXAgLmNsci1yb3d7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDtjb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtbGFiZWwtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dy''@;'; put 'put ''YXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyl9LnByb2dyZXNzLWJsb2NrPi5wcm9ncmVzcy1ncm91cCAuY2xyLXJvdz5bY2xhc3MqPWNsci1jb2wtXXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjB9LmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2Nre21h''@;'; put 'put ''cmdpbi1ib3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtwYWRkaW5nOjB9LmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5jYXJkLWJsb2NrIC5wcm9ncmVzcy1ibG9jaz5sYWJlbHttYXgtd2lkdGg6MzMlfS5jYXJkLWJsb2NrIC5w''@;'; put 'put ''cm9ncmVzcy1ibG9jayAucHJvZ3Jlc3MsLmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrIC5wcm9ncmVzcy1zdGF0aWN7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7bWFyZ2luLXRvcDowfS5jYXJkLWJsb2NrIC5wcm9ncmVzcy1ibG9jayAucHJv''@;'; put 'put ''Z3Jlc3M+cHJvZ3Jlc3MsLmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrIC5wcm9ncmVzcz4ucHJvZ3Jlc3MtbWV0ZXIsLmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrIC5wcm9ncmVzcy1zdGF0aWM+cHJvZ3Jlc3MsLmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrIC5wcm9ncmVzcy1zdGF0''@;'; put 'put ''aWM+LnByb2dyZXNzLW1ldGVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfV86LW1zLWlucHV0LXBsYWNlaG9sZGVyIC5wcm9ncmVzcy1ibG9jaz5sYWJlbCw6cm9vdCAucHJvZ3Jlc3MtYmxvY2s+bGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2t9OnJvb3QgW2Nkcy10aGVtZV17''@;'; put 'put ''LS1jbHItc3Bpbm5lci1kZWZhdWx0LXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xNCk7LS1jbHItc3Bpbm5lci1tZWRpdW0tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTstLWNsci1zcGlubmVyLXNtYWxsLXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KTstLWNsci1z''@;'; put 'put ''cGlubmVyLWluc2lkZS1idXR0b24tc3Ryb2tlLXdpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7LS1jbHItc3Bpbm5lci1pbnNpZGUtdHJlZXZpZXctc3Ryb2tlLXdpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7LS1jbHIt''@;'; put 'put ''c3Bpbm5lci1kZWZhdWx0LXN0cm9rZS13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpOy0tY2xyLXNwaW5uZXItbWVkaXVtLXN0cm9rZS13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC00MDApOy0tY2xyLXNwaW5uZXItc21hbGwtc3Ryb2tlLXdpZHRoOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCk7LS1jbHItc3Bpbm5lci1maWxsLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtc2hhZGUpOy0tY2xyLXNwaW5uZXItZmlsbC1pbnZlcnNlLWJnLWNvbG9yOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtaW52ZXJzZS10aW50KTstLWNsci1zcGlubmVyLWZpbGwtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvKTstLWNsci1zcGlubmVyLWZpbGwtaW52ZXJzZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8tdGlu''@;'; put 'put ''dCk7LS1jbHItc3Bpbm5lci1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0zMDApOy0tY2xyLXNwaW5uZXItbWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9LnNwaW5uZXJ7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxp''@;'; put 'put ''bmUtYmxvY2s7aGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQt''@;'; put 'put ''c2l6ZSk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHkt''@;'; put 'put ''c2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpO2FuaW1hdGlvbjpzcGluIDFzIGxpbmVhciBpbmZpbml0ZTttYXJnaW4tcmlnaHQ6MDtwYWRkaW5nOjA7dGV4dC1pbmRlbnQ6MTAw''@;'; put 'put ''JTtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwfS5zcGlubmVyOmFmdGVye2NvbnRlbnQ6IiI7aGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1zcGlu''@;'; put 'put ''bmVyLWRlZmF1bHQtc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2NsaXAtcGF0aDplbGxpcHNlKDEwMCUgNTMuNSUgYXQgMCAwKTtib3JkZXI6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zdHJv''@;'; put 'put ''a2Utd2lkdGgpIHNvbGlkIHZhcigtLWNsci1zcGlubmVyLWZpbGwtY29sb3IpO2JvcmRlci1yaWdodC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItYm90dG9tLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXNwaW5uZXItYm9yZGVyLXJhZGl1cyl9LnNwaW5uZXI6''@;'; put 'put ''YmVmb3Jle2NvbnRlbnQ6IiI7aGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1zcGlubmVy''@;'; put 'put ''LWRlZmF1bHQtc2l6ZSk7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2JvcmRlcjp2YXIoLS1jbHItc3Bpbm5lci1kZWZhdWx0LXN0cm9rZS13aWR0aCkgc29saWQgdmFyKC0tY2xyLXNwaW5uZXItZmlsbC1iZy1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItc3Bpbm5lci1i''@;'; put 'put ''b3JkZXItcmFkaXVzKX0uc3Bpbm5lci5zcGlubmVyLW1ke2hlaWdodDp2YXIoLS1jbHItc3Bpbm5lci1tZWRpdW0tc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItbWVkaXVtLXNpemUpO21pbi1oZWlnaHQ6dmFyKC0tY2xyLXNwaW5uZXItbWVkaXVtLXNpemUpO21pbi13aWR0aDp2YXIo''@;'; put 'put ''LS1jbHItc3Bpbm5lci1tZWRpdW0tc2l6ZSl9LnNwaW5uZXIuc3Bpbm5lci1tZDpiZWZvcmUsLnNwaW5uZXIuc3Bpbm5lci1tZDphZnRlcntoZWlnaHQ6dmFyKC0tY2xyLXNwaW5uZXItbWVkaXVtLXNpemUpO3dpZHRoOnZhcigtLWNsci1zcGlubmVyLW1lZGl1bS1zaXplKTttaW4taGVpZ2h0''@;'; put 'put ''OnZhcigtLWNsci1zcGlubmVyLW1lZGl1bS1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItbWVkaXVtLXNpemUpO2JvcmRlci13aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1tZWRpdW0tc3Ryb2tlLXdpZHRoKX0uc3Bpbm5lci5zcGlubmVyLWlubGluZSwuc3Bpbm5lci5zcGlubmVy''@;'; put 'put ''LXNte2hlaWdodDp2YXIoLS1jbHItc3Bpbm5lci1zbWFsbC1zaXplKTt3aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1zbWFsbC1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLXNtYWxsLXNpemUpO21pbi13aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1zbWFsbC1zaXplKX0uc3Bpbm5l''@;'; put 'put ''ci5zcGlubmVyLWlubGluZTpiZWZvcmUsLnNwaW5uZXIuc3Bpbm5lci1pbmxpbmU6YWZ0ZXIsLnNwaW5uZXIuc3Bpbm5lci1zbTpiZWZvcmUsLnNwaW5uZXIuc3Bpbm5lci1zbTphZnRlcntoZWlnaHQ6dmFyKC0tY2xyLXNwaW5uZXItc21hbGwtc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLXNwaW5u''@;'; put 'put ''ZXItc21hbGwtc2l6ZSk7bWluLWhlaWdodDp2YXIoLS1jbHItc3Bpbm5lci1zbWFsbC1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItc21hbGwtc2l6ZSk7Ym9yZGVyLXdpZHRoOnZhcigtLWNsci1zcGlubmVyLXNtYWxsLXN0cm9rZS13aWR0aCl9LnNwaW5uZXIuc3Bpbm5lci1p''@;'; put 'put ''bmxpbmV7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b207bWFyZ2luLXJpZ2h0OnZhcigtLWNsci1zcGlubmVyLW1hcmdpbi1yaWdodCl9LnNwaW5uZXIuc3Bpbm5lci1pbnZlcnNlOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLXNwaW5uZXItZmlsbC1pbnZlcnNlLWJnLWNvbG9yKX0u''@;'; put 'put ''c3Bpbm5lci5zcGlubmVyLWludmVyc2U6YWZ0ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1zcGlubmVyLWZpbGwtaW52ZXJzZS1jb2xvcik7Ym9yZGVyLXJpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1ib3R0b20tY29sb3I6dHJhbnNwYXJlbnR9LnNwaW5uZXIuc3Bpbm5lci1uZXV0''@;'; put 'put ''cmFsLTA6YmVmb3Jle2JvcmRlci1jb2xvcjojMDAwfS5zcGlubmVyLnNwaW5uZXItbmV1dHJhbC0wOmFmdGVye2JvcmRlci1jb2xvcjp2YXIoLS1jbHItc3Bpbm5lci1maWxsLWNvbG9yKTtib3JkZXItcmlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp0cmFuc3Bh''@;'; put 'put ''cmVudH0uc3Bpbm5lci5zcGlubmVyLWNoZWNre2FuaW1hdGlvbjpub25lO21hc2s6dXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIwdmVyc2lvbiUzRCUyMjEuMSUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDM2JTIwMzYlMjIlMjBwcmVzZXJ2ZUFzcGVjdFJh''@;'; put 'put ''dGlvJTNEJTIyeE1pZFlNaWQlMjBtZWV0JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlMjB4bWxucyUzQXhsaW5rJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYxOTk5JTJGeGxpbmslMjIlMjBmb2N1c2FibGUlM0QlMjJmYWxz''@;'; put 'put ''ZSUyMiUyMGFyaWEtaGlkZGVuJTNEJTIydHJ1ZSUyMiUyMHJvbGUlM0QlMjJpbWclMjIlM0UlM0NwYXRoJTIwZmlsbCUzRCUyMiUyMzc0NzQ3NCUyMiUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUtcGF0aC0xJTIyJTIwZCUzRCUyMk0xMy43MiUyQzI3LjY5JTJD''@;'; put 'put ''My4yOSUyQzE3LjI3YTElMkMxJTJDMCUyQzAlMkMxJTJDMS40MS0xLjQxbDklMkM5TDMxLjI5JTJDNy4yOWExJTJDMSUyQzAlMkMwJTJDMSUyQzEuNDElMkMxLjQxWiUyMiUzRSUzQyUyRnBhdGglM0UlM0MlMkZzdmclM0UpO21hc2stcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1idG4tc3VjY2Vzcy1jaGVja2VkLWNvbG9yKX0uc3Bpbm5lci5zcGlubmVyLWNoZWNrOmFmdGVyLC5zcGlubmVyLnNwaW5uZXItY2hlY2s6YmVmb3Jle2JvcmRlcjowfS5idG4gLnNwaW5uZXJ7bWFyZ2luLXJpZ2h0OjA7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''Nyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmJ0biAuc3Bpbm5lcjpiZWZvcmUsLmJ0biAuc3Bpbm5lcjphZnRlcntoZWlnaHQ6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtib3JkZXItd2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItaW5zaWRlLWJ1dHRv''@;'; put 'put ''bi1zdHJva2Utd2lkdGgpfS5idG4taWNvbjpub3QoLmJ0bi1zbSkgLnNwaW5uZXJ7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNsci10cmVlbm9kZS1zcGlubmVyLWNvbnRhaW5lciAuc3Bpbm5lcntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtt''@;'; put 'put ''aW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLXRyZWVub2RlLXNwaW5uZXItY29udGFpbmVyIC5zcGlubmVyOmJlZm9yZSwuY2xyLXRyZWVub2RlLXNwaW5uZXItY29udGFpbmVyIC5zcGlubmVyOmFmdGVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dp''@;'; put 'put ''ZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2JvcmRlci13aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1pbnNpZGUtdHJlZXZpZXctc3Ryb2tlLXdpZHRoKX1A''@;'; put 'put ''a2V5ZnJhbWVzIHNwaW57MCV7dHJhbnNmb3JtOnJvdGF0ZSgwKX10b3t0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fTpyb290IFtjZHMtdGhlbWVdey0tY2xyLXRhYmxlLWJvcmRlcndpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7LS1jbHItdGFibGUtYm9y''@;'; put 'put ''ZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLXRhYmxlLWNlbGwtcGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItdGFibGUtY2VsbC1jb21wYWN0LXBhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLXRhYmxlLW5vYm9yZGVyLWJvcmRlcndpZHRoOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtMCk7LS1jbHItdGFibGUtZGF0YS1jZWxsLWZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1zaXplLTQpOy0tY2xyLXRhYmxlLWRhdGEtY2VsbC1saW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLXRhYmxlLWRhdGEt''@;'; put 'put ''Y2VsbC1mb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtcmVndWxhcik7LS1jbHItdGFibGUtaGVhZGVyLWNlbGwtZm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXNpemUtMSk7LS1jbHItdGFibGUtaGVhZGVyLWNlbGwt''@;'; put 'put ''bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTstLWNsci10YWJsZS1oZWFkZXItY2VsbC1mb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpOy0tY2xyLXRhYmxlLWJnY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVj''@;'; put 'put ''dC1jb250YWluZXItYmFja2dyb3VuZCk7LS1jbHItdGhlYWQtYmdjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLXRpbnQpOy0tY2xyLXRhYmxlLWhlYWRlci1ib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNv''@;'; put 'put ''bG9yKTstLWNsci10YWJsZS1mb290ZXItYm9yZGVyLXRvcC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItdGFibGUtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci10YWJsZXJvdy1ib3JkZXJjb2xv''@;'; put 'put ''cjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItdGFibGUtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLXRhYmxlLW1hcmdpbjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpIDAgMCAwOy0tY2xyLXRoZWFkLWNv''@;'; put 'put ''bG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItdGFibGUtc21hbGxwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCk7LS1jbHItdGFibGUtYm90dG9tY2VsbHBhZGRpbmc6Y2FsYyh2YXIoLS1jbHItdGFibGUtY2VsbHBhZGRpbmcpIC0gdmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS0xKSk7LS1jbHItdGFibGUtdG9wY2VsbHBhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTstLWNsci10YWJsZS1mb250c2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTstLWNsci10YWJsZS1saW5laGVpZ2h0''@;'; put 'put ''Om1peGlucy5iYXNlbGluZVB4KDE0KTstLWNsci10YWJsZS1jZWxscGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpOy0tY2xyLXRhYmxlLWNvbXBhY3Qtcm93LWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpOy0tY2xyLXRhYmxlLWNvbXBhY3QtdmVydGljYWwtcGFkZGlu''@;'; put 'put ''ZzpjYWxjKCAodmFyKC0tY2xyLXRhYmxlLWNvbXBhY3Qtcm93LWhlaWdodCkgLSB2YXIoLS1jbHItdGFibGUtbGluZWhlaWdodCkpICogLjUgKX0udGFibGV7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlO2JvcmRlcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpIHNvbGlkIHZhcigtLWNs''@;'; put 'put ''ci10YWJsZS1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1yYWRpdXMpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJnY29sb3IpO2NvbG9yOnZhcigtLWNsci10YWJsZS1mb250LWNvbG9yKTttYXJnaW46dmFyKC0tY2xyLXRhYmxl''@;'; put 'put ''LW1hcmdpbik7bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJX0udGFibGUgdGgsLnRhYmxlIHRke2JvcmRlci10b3Atc3R5bGU6c29saWQ7Ym9yZGVyLXRvcC13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpO2JvcmRlci10b3AtY29sb3I6dmFyKC0tY2xyLXRhYmxlcm93LWJvcmRl''@;'; put 'put ''cmNvbG9yKTtwYWRkaW5nOnZhcigtLWNsci10YWJsZS1jZWxsLXBhZGRpbmcpO3RleHQtYWxpZ246Y2VudGVyO3ZlcnRpY2FsLWFsaWduOnRvcH0udGFibGUgdGgubGVmdCwudGFibGUgdGQubGVmdHt0ZXh0LWFsaWduOmxlZnR9LnRhYmxlIHRoLmxlZnQ6Zmlyc3QtY2hpbGQsLnRhYmxlIHRk''@;'; put 'put ''LmxlZnQ6Zmlyc3QtY2hpbGR7cGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LnRhYmxlIHRoLnJpZ2h0LC50YWJsZSB0ZC5yaWdodHt0ZXh0LWFsaWduOnJpZ2h0fS50YWJsZSB0ZHttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO2ZvbnQtc2l6ZTp2''@;'; put 'put ''YXIoLS1jbHItdGFibGUtZGF0YS1jZWxsLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXRhYmxlLWRhdGEtY2VsbC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXRhYmxlLWRhdGEtY2VsbC1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0udGFibGUgdGh7Y29sb3I6dmFyKC0tY2xyLXRoZWFkLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKTtiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWNsci10aGVhZC1iZ2NvbG9yKTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZDtib3JkZXItYm90dG9tLXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCk7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItdGFi''@;'; put 'put ''bGUtYm9yZGVyLWNvbG9yKTtib3JkZXItdG9wOjAgbm9uZX0udGFibGUgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGR7Ym9yZGVyLXRvcDowIG5vbmV9LnRhYmxlIHRib2R5K3Rib2R5e2JvcmRlci10b3Atc3R5bGU6c29saWQ7Ym9yZGVyLXRvcC13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVy''@;'; put 'put ''d2lkdGgpO2JvcmRlci10b3AtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcil9LnRhYmxlIHRoZWFkIHRoOmZpcnN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzKX0udGFibGUgdGhl''@;'; put 'put ''YWQgdGg6bGFzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXMpfS50YWJsZSB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowO2JvcmRl''@;'; put 'put ''ci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXMpfS50YWJsZSB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxl''@;'; put 'put ''LWNvcm5lcmNlbGxyYWRpdXMpfS50YWJsZS1jb21wYWN0IHRoLC50YWJsZS1jb21wYWN0IHRke21pbi1oZWlnaHQ6dmFyKC0tY2xyLXRhYmxlLWNvbXBhY3Qtcm93LWhlaWdodCk7cGFkZGluZzp2YXIoLS1jbHItdGFibGUtY2VsbC1jb21wYWN0LXBhZGRpbmcpfS50YWJsZS50YWJsZS12ZXJ0''@;'; put 'put ''aWNhbCB0aGVhZCB0aHtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7ZGlzcGxheTpub25lfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0aHtib3JkZXItYm90dG9tOjA7Ym9yZGVyLXRvcC1zdHlsZTpzb2xpZDtib3JkZXItdG9wLXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCk7Ym9y''@;'; put 'put ''ZGVyLXRvcC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKTt2ZXJ0aWNhbC1hbGlnbjp0b3B9LnRhYmxlLnRhYmxlLXZlcnRpY2FsIHRkLC50YWJsZS50YWJsZS12ZXJ0aWNhbCB0aHt0ZXh0LWFsaWduOmxlZnQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci10YWJsZS1ib3JkZXIt''@;'; put 'put ''Y29sb3IpfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0ZDpmaXJzdC1jaGlsZCwudGFibGUudGFibGUtdmVydGljYWwgdGg6Zmlyc3QtY2hpbGR7Ym9yZGVyLXJpZ2h0LXN0eWxlOnNvbGlkO2JvcmRlci1yaWdodC13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpO2JvcmRlci1yaWdo''@;'; put 'put ''dC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10aGVhZC1iZ2NvbG9yKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0''@;'; put 'put ''Ym9keTpmaXJzdC1vZi10eXBlIHRyOmZpcnN0LWNoaWxkIHRoLC50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpmaXJzdC1vZi10eXBlIHRyOmZpcnN0LWNoaWxkIHRke2JvcmRlci10b3A6MCBub25lfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpmaXJzdC1vZi10eXBlIHRyOmZpcnN0''@;'; put 'put ''LWNoaWxkIHRoOmZpcnN0LWNoaWxkLC50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpmaXJzdC1vZi10eXBlIHRyOmZpcnN0LWNoaWxkIHRkOmZpcnN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVz''@;'; put 'put ''KX0udGFibGUudGFibGUtdmVydGljYWwgdGJvZHk6Zmlyc3Qtb2YtdHlwZSB0cjpmaXJzdC1jaGlsZCB0aDpsYXN0LWNoaWxkLC50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpmaXJzdC1vZi10eXBlIHRyOmZpcnN0LWNoaWxkIHRkOmxhc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowO2JvcmRl''@;'; put 'put ''ci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzKX0udGFibGUudGFibGUtdmVydGljYWwgdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkLC50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpsYXN0LWNoaWxkIHRyOmxh''@;'; put 'put ''c3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXMpfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGg6bGFzdC1jaGls''@;'; put 'put ''ZCwudGFibGUudGFibGUtdmVydGljYWwgdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzKX0udGFibGUudGFibGUtbm9ib3Jk''@;'; put 'put ''ZXJ7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci13aWR0aDowfS50YWJsZS50YWJsZS1ub2JvcmRlciB0aHtib3JkZXItYm90dG9tLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci10b3A6MCBub25lfS50YWJsZS50YWJs''@;'; put 'put ''ZS1ub2JvcmRlciB0aDpmaXJzdC1jaGlsZHtib3JkZXItcmlnaHQ6MCBub25lfS50YWJsZS50YWJsZS1ub2JvcmRlciB0ZHtib3JkZXItdG9wOjAgbm9uZTtwYWRkaW5nLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS50YWJsZS50YWJsZS1ub2JvcmRlciB0ZDpmaXJzdC1jaGlsZHti''@;'; put 'put ''b3JkZXItcmlnaHQ6MCBub25lfS50YWJsZS50YWJsZS1ub2JvcmRlciB0aGVhZCB0aDpmaXJzdC1jaGlsZCwudGFibGUudGFibGUtbm9ib3JkZXIgdGhlYWQgdGg6bGFzdC1jaGlsZHtib3JkZXItcmFkaXVzOjB9LnRhYmxlLnRhYmxlLW5vYm9yZGVyIHRoLC50YWJsZS50YWJsZS1ub2JvcmRl''@;'; put 'put ''ciB0ZHtib3JkZXItcmFkaXVzOjAhaW1wb3J0YW50fS50YWJsZS50YWJsZS1ub2JvcmRlciB0aDpmaXJzdC1jaGlsZCwudGFibGUudGFibGUtbm9ib3JkZXIgdGQ6Zmlyc3QtY2hpbGR7cGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9OnJvb3QgW2Nkcy10aGVtZV17LS1j''@;'; put 'put ''bHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci10b29sdGlwLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItdG9vbHRpcC1ib3JkZXItcmFkaXVzOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLXRvb2x0aXAtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpfS50b29sdGlwe2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQt''@;'; put 'put ''YWxpZ246bGVmdDtvdmVyZmxvdzp2aXNpYmxlfS50b29sdGlwPi50b29sdGlwLWNvbnRlbnR7dmlzaWJpbGl0eTpoaWRkZW47b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAuM3MgbGluZWFyO3doaXRlLXNwYWNlOm5vcm1hbDt6LWluZGV4OjEwNTB9LnRvb2x0aXA+LnRvb2x0aXAtY29u''@;'; put 'put ''dGVudDphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDotMjBweDtjb250ZW50OiIiO3otaW5kZXg6LTF9LnRvb2x0aXA+LnRvb2x0aXAtY29udGVudCBsaXtjb2xvcjppbmhlcml0fS50b29sdGlwOmhvdmVyPi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXA6Zm9jdXM+LnRvb2x0aXAtY29u''@;'; put 'put ''dGVudHt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eToxfS50b29sdGlwOmhvdmVyPi50b29sdGlwLWNvbnRlbnQ6ZW1wdHksLnRvb2x0aXA6Zm9jdXM+LnRvb2x0aXAtY29udGVudDplbXB0eXt2aXNpYmlsaXR5OmhpZGRlbjtvcGFjaXR5OjB9LnRvb2x0aXA6Zm9jdXN7b3V0bGluZTowfS50''@;'; put 'put ''b29sdGlwOmZvY3VzPjpmaXJzdC1jaGlsZHtvdXRsaW5lLW9mZnNldDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUtb2Zmc2V0KTtvdXRsaW5lOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZSl9LnRvb2x0aXA+LnRvb2x0aXAtY29u''@;'; put 'put ''dGVudCwudG9vbHRpcC50b29sdGlwLXRvcC1yaWdodD4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC10b3AtcmlnaHR7bWFyZ2luOjA7d2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2JvcmRlci1yYWRpdXM6dmFy''@;'; put 'put ''KC0tY2xyLXRvb2x0aXAtYm9yZGVyLXJhZGl1cyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2NvbG9yOnZhcigtLWNsci10b29sdGlwLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXRvb2x0aXAtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1s''@;'; put 'put ''ZXR0ZXItc3BhY2luZyk7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6YXV0byBhdXRvIDEwMCUgNTAlO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDttYXJnaW4tYm90dG9tOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpfS50b29s''@;'; put 'put ''dGlwPi50b29sdGlwLWNvbnRlbnQ6YmVmb3JlLC50b29sdGlwLnRvb2x0aXAtdG9wLXJpZ2h0Pi50b29sdGlwLWNvbnRlbnQ6YmVmb3JlLC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC10b3AtcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRl''@;'; put 'put ''ci1ldmVudHM6bm9uZTtsZWZ0OjA7dG9wOmF1dG87cmlnaHQ6YXV0bztib3R0b206Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKTtib3JkZXItbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2Jv''@;'; put 'put ''cmRlci10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItYm90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnR9LnRvb2x0aXAudG9vbHRpcC10b3AtbGVmdD4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC10b3AtbGVmdHttYXJnaW46MDt3aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2Up''@;'; put 'put ''KSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdG9vbHRpcC1ib3JkZXItcmFkaXVzKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7Y29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItdG9vbHRpcC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDphdXRvIDUwJSAxMDAlIGF1dG87Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDttYXJnaW4tYm90dG9tOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSArIHZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtNSkpfS50b29sdGlwLnRvb2x0aXAtdG9wLWxlZnQ+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXRvcC1sZWZ0OmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7''@;'; put 'put ''cmlnaHQ6MDt0b3A6YXV0bztsZWZ0OmF1dG87Ym90dG9tOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSk7Ym9yZGVyLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXRvcDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlk''@;'; put 'put ''IHRyYW5zcGFyZW50fS50b29sdGlwLnRvb2x0aXAtYm90dG9tLXJpZ2h0Pi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1yaWdodHttYXJnaW46MDt3aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7Ym9y''@;'; put 'put ''ZGVyLXJhZGl1czp2YXIoLS1jbHItdG9vbHRpcC1ib3JkZXItcmFkaXVzKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7Y29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Zm9u''@;'; put 'put ''dC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItdG9vbHRpcC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDoxMDAlIGF1dG8gYXV0byA1MCU7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO21hcmdpbi10b3A6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01''@;'; put 'put ''KSl9LnRvb2x0aXAudG9vbHRpcC1ib3R0b20tcmlnaHQ+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1yaWdodDpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lO2xlZnQ6''@;'; put 'put ''MDtib3R0b206YXV0bztyaWdodDphdXRvO3RvcDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikpO2JvcmRlci1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWJvdHRvbTp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB0cmFu''@;'; put 'put ''c3BhcmVudH0udG9vbHRpcC50b29sdGlwLWJvdHRvbS1sZWZ0Pi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1sZWZ0e21hcmdpbjowO3dpZHRoOmNhbGMoMjQwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtib3JkZXItcmFk''@;'; put 'put ''aXVzOnZhcigtLWNsci10b29sdGlwLWJvcmRlci1yYWRpdXMpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtjb2xvcjp2YXIoLS1jbHItdG9vbHRpcC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtmb250LXNpemU6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci10b29sdGlwLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5''@;'; put 'put ''LWJvZHktbGV0dGVyLXNwYWNpbmcpO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjEwMCUgNTAlIGF1dG8gYXV0bztib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO21hcmdpbi10b3A6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9LnRv''@;'; put 'put ''b2x0aXAudG9vbHRpcC1ib3R0b20tbGVmdD4udG9vbHRpcC1jb250ZW50OmJlZm9yZSwudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtYm90dG9tLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTtyaWdodDowO2JvdHRv''@;'; put 'put ''bTphdXRvO2xlZnQ6YXV0bzt0b3A6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKTtib3JkZXItcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItYm90dG9tOnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtNSkgc29saWQgdmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnR9''@;'; put 'put ''LnRvb2x0aXAudG9vbHRpcC1yaWdodD4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1yaWdodHtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDo1MCUgYXV0byBhdXRvIDEwMCU7bWFyZ2luOjA7d2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1iYXNlKSkpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXRvb2x0aXAtYm9yZGVyLXJhZGl1cyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2NvbG9yOnZhcigtLWNsci10b29sdGlwLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b29sdGlwLWJhY2tn''@;'; put 'put ''cm91bmQtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXRvb2x0aXAtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bGV0dGVyLXNwYWNpbmc6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyk7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO21hcmdpbi1sZWZ0OmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpfS50b29sdGlwLnRvb2x0aXAtcmlnaHQ+''@;'; put 'put ''LnRvb2x0aXAtY29udGVudDpiZWZvcmUsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXJpZ2h0OmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7Ym90dG9tOmF1dG87cmlnaHQ6YXV0bztsZWZ0OmNhbGMoLTEqdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS02KSk7Ym9yZGVyLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlw''@;'; put 'put ''LWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHRyYW5zcGFyZW50fS50b29sdGlwLnRvb2x0aXAtbGVmdD4udG9vbHRpcC1j''@;'; put 'put ''b250ZW50LC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1sZWZ0e3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjUwJSAxMDAlIGF1dG8gYXV0bzttYXJnaW46MDt3aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1j''@;'; put 'put ''bHItdG9vbHRpcC1ib3JkZXItcmFkaXVzKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7Y29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItdG9vbHRpcC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRl''@;'; put 'put ''ci1zcGFjaW5nKTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO21hcmdpbi1yaWdodDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpKX0udG9vbHRpcC50b29sdGlwLWxlZnQ+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsLnRvb2x0aXAg''@;'; put 'put ''LnRvb2x0aXAtY29udGVudC50b29sdGlwLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtib3R0b206YXV0bztsZWZ0OmF1dG87cmlnaHQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKTtib3JkZXItdG9w''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItYm90dG9tOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnR9LnRvb2x0aXAudG9vbHRpcC14cz4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9v''@;'; put 'put ''bHRpcC14c3t3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTE0KX0udG9vbHRpcC50b29sdGlwLXNtPi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXNte3dpZHRoOmNhbGMoMTIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0udG9v''@;'; put 'put ''bHRpcC50b29sdGlwLW1kPi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLW1ke3dpZHRoOmNhbGMoMjQwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0udG9vbHRpcC50b29sdGlwLWxnPi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRv''@;'; put 'put ''b2x0aXAtY29udGVudC50b29sdGlwLWxne3dpZHRoOmNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0udG9vbHRpcD4uYnRuKy50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAudG9vbHRpcC10b3AtcmlnaHQ+LmJ0bisudG9vbHRpcC1jb250ZW50LC50b29sdGlwLnRvb2x0''@;'; put 'put ''aXAtdG9wLWxlZnQ+LmJ0bisudG9vbHRpcC1jb250ZW50e21hcmdpbi1ib3R0b206Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAtIHZhcigtLWNsci1idG4tdmVydGljYWwtbWFyZ2luKSl9LnRvb2x0aXAudG9vbHRpcC1ib3R0b20t''@;'; put 'put ''cmlnaHQ+LmJ0bisudG9vbHRpcC1jb250ZW50LC50b29sdGlwLnRvb2x0aXAtYm90dG9tLWxlZnQ+LmJ0bisudG9vbHRpcC1jb250ZW50e21hcmdpbi10b3A6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAtIHZhcigtLWNsci1idG4t''@;'; put 'put ''dmVydGljYWwtbWFyZ2luKSl9LnRvb2x0aXAudG9vbHRpcC1yaWdodD4uYnRuKy50b29sdGlwLWNvbnRlbnR7bWFyZ2luLWxlZnQ6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAtIHZhcigtLWNsci1idG4taG9yaXpvbnRhbC1tYXJn''@;'; put 'put ''aW4pKX0udG9vbHRpcD4uY2xyLWljb257bWFyZ2luLXJpZ2h0OjB9LnRvb2x0aXA+c3Zne3BvaW50ZXItZXZlbnRzOm5vbmV9LnRvb2x0aXAtdHJpZ2dlcjpmb2N1cysudG9vbHRpcC1jb250ZW50e3Zpc2liaWxpdHk6dmlzaWJsZX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1mb3Jtcy1iYXNl''@;'; put 'put ''bGluZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpOy0tY2xyLWZvcm1zLWljb24tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpOy0tY2xyLWZvcm0tZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQpOy0t''@;'; put 'put ''Y2xyLWZvcm1zLWxhYmVsLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItZm9ybXMtdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWZvcm1zLWludmFsaWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0''@;'; put 'put ''YXR1cy1kYW5nZXIpOy0tY2xyLWZvcm1zLWludmFsaWQtdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7LS1jbHItZm9ybXMtdmFsaWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzKTstLWNsci1mb3Jtcy12YWxpZC10ZXh0LWNvbG9yOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItZm9ybXMtc3VidGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0zMDApOy0tY2xyLWZvcm1zLXBsYWNlaG9sZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTIwMCk7LS1jbHIt''@;'; put 'put ''Zm9ybXMtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYm9yZGVyLWNvbG9yKTstLWNsci1mb3Jtcy1mb2N1c2VkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLWZvcm1zLXN1''@;'; put 'put ''YnRleHQtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWJvcmRlci1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKTstLWNsci1mb3Jtcy10ZXh0LWRpc2Fi''@;'; put 'put ''bGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1mb3Jtcy1sYWJlbC1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItZm9ybXMtcGxhY2Vob2xkZXItZGlzYWJsZWQtY29sb3I6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWxhYmVsLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTstLWNsci1mb3Jtcy1pbnB1dC1wYWRkaW5nOjAgY2FsYyg0ICogdmFyKC0tY2xyLWZvcm1zLWJhc2Vs''@;'; put 'put ''aW5lKSAvIDMpOy0tY2xyLWZvcm1zLWlucHV0LXdyYXBwZXItaGVpZ2h0OmNhbGMoNCAqIHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpOy0tY2xyLWZvcm1zLWlucHV0LWdyb3VwLWljb24tYWN0aW9uLXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTstLWNsci1mb3Jtcy1pbnB1dC1n''@;'; put 'put ''cm91cC1pY29uLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9i''@;'; put 'put ''amVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItZm9ybXMtY2hlY2tib3gtbGFiZWwtY29sb3I6dmFyKC0tY2xyLWZvcm1zLWxhYmVsLWNvbG9yKTstLWNsci1mb3Jtcy1jaGVja2JveC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dy''@;'; put 'put ''b3VuZC1oaWdobGlnaHQpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLWZvcm1zLWNoZWNrYm94LW1hcmstY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kKTstLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1sYWJlbC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtbGFiZWwtZGlzYWJsZWQtY29sb3IpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLWJhY2tncm91bmQtY29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWZvcm0tZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcik7LS1jbHItZm9ybXMtY2hlY2tib3gtZGlzYWJsZWQtY2hlY2tlZC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLWJvcmRlci1j''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1pbmRldGVybWluYXRlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLW1hcmstY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kKTstLWNsci1mb3Jtcy1yYWRpby1sYWJlbC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtbGFiZWwtY29sb3IpOy0tY2xyLWZvcm1zLXJhZGlvLWxhYmVsLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LWRpc2FibGVkKTstLWNsci1mb3Jtcy1yYWRpby1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3JtLWRpc2FibGVkLWJhY2tncm91bmQtY29sb3IpOy0tY2xyLWZvcm1zLXJhZGlvLWRpc2FibGVkLW1hcmstY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHkt''@;'; put 'put ''Y29sb3ItMTAwKTstLWNsci1mb3Jtcy1yYWRpby1zZWxlY3RlZC1zaGFkb3c6aW5zZXQgMCAwIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaGlnaGxpZ2h0KTstLWNsci1mb3Jtcy1yYWRpby1jaGVja2Vk''@;'; put 'put ''LWRpc2FibGVkLXNoYWRvdzppbnNldCAwIDAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpOy0tY2xyLWZvcm1zLXBhc3N3b3JkLWV5ZS1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''aW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWZvcm1zLXBhc3N3b3JkLWRpc2FibGVkLWV5ZS1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFj''@;'; put 'put ''dGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC1zaGFkZSk7LS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLWZvcm1zLXJhbmdlLXRodW1iLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpOy0tY2xyLWZvcm1zLXJh''@;'; put 'put ''bmdlLXRyYWNrLWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKTstLWNsci1mb3Jtcy1yYW5nZS10cmFjay1ib3JkZXItd2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKTstLWNsci1mb3Jtcy1yYW5nZS1wcm9ncmVzcy1maWxsLWNvbG9yLWRpc2FibGVkOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpOy0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWNvbG9yLWRpc2FibGVkOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQtdGludCk7LS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLWNvbG9yLWRpc2Fi''@;'; put 'put ''bGVkOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpOy0tY2xyLWZvcm1zLXNlbGVjdC1ob3Zlci1iYWNrZ3JvdW5kOnRyYW5zcGFyZW50Oy0tY2xyLWZvcm1zLXNlbGVjdC1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVy''@;'; put 'put ''YWN0aW9uLWNvbG9yLWRpc2FibGVkKTstLWNsci1mb3Jtcy1zZWxlY3QtaG92ZXItYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLWZvcm1zLXNlbGVjdC1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCk7LS1jbHItZm9ybXMtc2VsZWN0LWNhcmV0LWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1jb2xvcjp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci1mb3Jtcy1zZWxlY3QtY2FyZXQtc2l6ZTpjYWxjKDEwICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jbHItZm9ybXMtc2VsZWN0LW9wdGlvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xv''@;'; put 'put ''ci00MDApOy0tY2xyLWZvcm1zLXNlbGVjdC1vcHRpb24tYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQpOy0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''Y29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpOy0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1vcHRpb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktY29sb3ItNDAwKTstLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlwbGUtc2VsZWN0ZWQtb3B0aW9uLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkKTstLWNsci1mb3Jtcy10ZXh0YXJlYS1iYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWZvcm1zLXRleHRhcmVhLWRpc2FibGVkLWJhY2tncm91bmQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCk7LS1jbHItZm9ybXMtdGV4dGFyZWEtYm9yZGVyLXJh''@;'; put 'put ''ZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci1mb3Jtcy1kYXRhbGlzdC1jYXJldC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwpOy0tY2xyLWZvcm1zLWRhdGFsaXN0LWNhcmV0LWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWRhdGFsaXN0LWNhcmV0LWljb24tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHItZm9ybS1jb250cm9se21hcmdpbi10b3A6Y2FsYyg0KnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO2Rpc3BsYXk6ZmxleDtmbGV4''@;'; put 'put ''LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uY2xyLWZvcm0tY29udHJvbCBpbnB1dDo6LW1zLXJldmVhbCwuY2xyLWZvcm0tY29udHJvbCBpbnB1dDo6LW1zLWNsZWFye2Rpc3BsYXk6bm9uZX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZHtjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItZm9ybXMtdGV4dC1kaXNhYmxlZC1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgbGFiZWwsLmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1jb250cm9sLWxhYmVse2NvbG9yOnZhcigtLWNsci1mb3Jtcy1sYWJlbC1kaXNhYmxlZC1jb2xvcil9LmNsci1mb3JtLWNv''@;'; put 'put ''bnRyb2wtZGlzYWJsZWQgLmNsci1pbnB1dCwuY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLXRleHRhcmVhLC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItc2VsZWN0LC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItbnVtYmVyLWlucHV0e2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1mb3Jtcy10ZXh0LWRpc2FibGVkLWNvbG9yKTtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1ib3JkZXItZGlzYWJsZWQtY29sb3IpfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIGlucHV0W3R5cGU9cmFuZ2VdOjotd2Via2l0LXNsaWRlci10aHVtYiwuY2xyLWZvcm0t''@;'; put 'put ''Y29udHJvbC1kaXNhYmxlZCBpbnB1dFt0eXBlPXJhbmdlXTo6LW1vei1yYW5nZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1yYW5nZS1wcm9ncmVzcy1maWxsLWNvbG9yLWRpc2FibGVkLCB2YXIoLS1jbHItZm9ybXMtcmFuZ2UtcHJvZ3Jlc3MtZmlsbC1jb2xvci1k''@;'; put 'put ''aXNhYmxlZCkpfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItc3VidGV4dHtjb2xvcjp2YXIoLS1jbHItZm9ybXMtc3VidGV4dC1kaXNhYmxlZC1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtbXVsdGl7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDp3cmFwfS5jbHItZm9ybS1j''@;'; put 'put ''b250cm9sLW11bHRpIC5jbHItY29udHJvbC1sYWJlbHt3aWR0aDoxMDAlfS5jbHItY29udHJvbC1sYWJlbHtkaXNwbGF5OmJsb2NrO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1sYWJlbC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNp''@;'; put 'put ''emUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1mb3Jtcy1sYWJlbC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnkt''@;'; put 'put ''bGV0dGVyLXNwYWNpbmcpfS5jbHItY29udHJvbC1jb250YWluZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOnZhcigtLWNsci1wMi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7bGluZS1oZWln''@;'; put 'put ''aHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS5jbHItY29udHJvbC1pbmxpbmV7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2FsaWduLWNvbnRlbnQ6ZmxleC1z''@;'; put 'put ''dGFydH0uY2xyLWNvbnRyb2wtaW5saW5lIC5jbHItY29udHJvbC1sYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6Y2FsYygyKnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO3dpZHRoOmF1dG99LmNsci1zdWJ0ZXh0e2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0''@;'; put 'put ''ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItZm9ybXMtc3VidGV4dC1jb2xvcik7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5jbHItc3VidGV4dC5lcnJvcntjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItZm9ybXMtaW52YWxpZC10ZXh0LWNvbG9yKX0uY2xyLXN1YnRleHQuc3VjY2Vzc3tjb2xvcjp2YXIoLS1jbHItZm9ybXMtdmFsaWQtdGV4dC1jb2xvcil9LmNsci1zdWJ0ZXh0LXdyYXBwZXJ7ZmxleC1iYXNpczoxMDAlO2Rpc3BsYXk6ZmxleH0uY2xyLXZhbGlkYXRlLWljb257aGVp''@;'; put 'put ''Z2h0OnZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpO3dpZHRoOnZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpO21pbi1oZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLWljb24tc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZh''@;'; put 'put ''bGlkLWNvbG9yKTtmaWxsOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtkaXNwbGF5Om5vbmV9LmNsci1zdWNjZXNzIC5jbHItdmFsaWRhdGUtaWNvbntkaXNwbGF5OmlubGluZS1ibG9jaztjb2xvcjp2YXIoLS1jbHItZm9ybXMtdmFsaWQtY29sb3IpO2ZpbGw6dmFyKC0tY2xyLWZv''@;'; put 'put ''cm1zLXZhbGlkLWNvbG9yKX0uY2xyLWVycm9yIC5jbHItdmFsaWRhdGUtaWNvbntkaXNwbGF5OmlubGluZS1ibG9ja30uY2xyLWZvcm0taG9yaXpvbnRhbCAuY2xyLWZvcm0tY29udHJvbD4uY2xyLWNvbnRyb2wtbGFiZWwsLmNsci1mb3JtLWhvcml6b250YWwgLmNsci1mb3JtLWNvbnRyb2w+''@;'; put 'put ''LmNsci1mb3JtLWNvbnRyb2wuY2xyLWZvcm0tY29udHJvbC1tdWx0aSAuY2xyLWNvbnRyb2wtbGFiZWx7d2lkdGg6Y2FsYygzMip2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpKTtmbGV4LXNocmluazowO21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uY2xyLWZvcm0taG9y''@;'; put 'put ''aXpvbnRhbC5jbHItcm93IC5jbHItY29udHJvbC1sYWJlbHt3aWR0aDphdXRvfS5jbHItZm9ybS1ob3Jpem9udGFsIC5jbHItZm9ybS1jb250cm9se2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9LmNsci1mb3JtOm5vdCguY2xyLWZvcm0tY29tcGFjdCkgLmNsci1jb250cm9sLWNv''@;'; put 'put ''bnRhaW5lci5jbHItZXJyb3I+LmNsci1zdWJ0ZXh0LXdyYXBwZXIgLmNsci12YWxpZGF0ZS1pY29uLC5jbHItZm9ybTpub3QoLmNsci1mb3JtLWNvbXBhY3QpIC5jbHItY29udHJvbC1jb250YWluZXIuY2xyLXN1Y2Nlc3M+LmNsci1zdWJ0ZXh0LXdyYXBwZXIgLmNsci12YWxpZGF0ZS1pY29u''@;'; put 'put ''e21hcmdpbi1sZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1mb3JtLWNvbnRyb2w+LmNsci1jb250cm9sLWxhYmVse3dpZHRoOmNhbGMoMzIqdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSk7bWluLXdpZHRoOmNhbGMoMzIqdmFy''@;'; put 'put ''KC0tY2xyLWZvcm1zLWJhc2VsaW5lKSl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1mb3JtLWNvbnRyb2wuY2xyLXJvdz4uY2xyLWNvbnRyb2wtbGFiZWx7d2lkdGg6YXV0bzttaW4td2lkdGg6YXV0b30uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWNvbnRyb2wtbGFiZWx7bWFyZ2luLXRvcDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZm9ybS1jb250cm9se2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7bWFyZ2luLXRvcDpjYWxjKDIqdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1jb250cm9s''@;'; put 'put ''LWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXB9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1zdWJ0ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZXJyb3IgLmNsci1z''@;'; put 'put ''dWJ0ZXh0LC5jbHItZm9ybS1jb21wYWN0IC5jbHItc3VjY2VzcyAuY2xyLXN1YnRleHR7bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWVycm9yIC5jbHItc3VidGV4dC5lcnJvciwuY2xyLWZvcm0tY29tcGFjdCAuY2xyLWVycm9y''@;'; put 'put ''IC5jbHItc3VidGV4dC5zdWNjZXNzLC5jbHItZm9ybS1jb21wYWN0IC5jbHItc3VjY2VzcyAuY2xyLXN1YnRleHQuZXJyb3IsLmNsci1mb3JtLWNvbXBhY3QgLmNsci1zdWNjZXNzIC5jbHItc3VidGV4dC5zdWNjZXNze21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCl9LmNs''@;'; put 'put ''ci1mb3JtLWNvbXBhY3QgLmNsci1lcnJvciAuY2xyLXZhbGlkYXRlLWljb24sLmNsci1mb3JtLWNvbXBhY3QgLmNsci1zdWNjZXNzIC5jbHItdmFsaWRhdGUtaWNvbnttYXJnaW4tbGVmdDowfS5jbHItZm9ybS1jb21wYWN0IC5jbHItc3VidGV4dC13cmFwcGVye2ZsZXgtYmFzaXM6YXV0bztk''@;'; put 'put ''aXNwbGF5OmlubGluZS1ibG9ja30uY2xyLWZvcm17cGFkZGluZzp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpfS5jbHItZm9ybS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIC5jbHItY29udHJvbC1jb250YWluZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGggLmNsci1mb3JtLWNvbnRyb2wg''@;'; put 'put ''LmNsci1zZWxlY3Qtd3JhcHBlciwuY2xyLWZvcm0tZnVsbC13aWR0aCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWlucHV0LXdyYXBwZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGggLmNsci1mb3JtLWNvbnRyb2wgLmNsci1udW1iZXItaW5wdXQtd3JhcHBlciwuY2xyLWZvcm0tZnVsbC13aWR0aCAu''@;'; put 'put ''Y2xyLWZvcm0tY29udHJvbCAuY2xyLWNvbWJvYm94e3dpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpKX0uY2xyLWZvcm0tZnVsbC13aWR0aCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWNvbWJvYm94LXdyYXBwZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGggLmNsci1m''@;'; put 'put ''b3JtLWNvbnRyb2wgLmNsci1jb21ib2JveC1pbnB1dC13cmFwcGVyLC5jbHItZm9ybS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIC5jbHItdGV4dGFyZWEtd3JhcHBlciwuY2xyLWZvcm0tZnVsbC13aWR0aCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWlucHV0LWdyb3VwLC5jbHItZm9y''@;'; put 'put ''bS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIGlucHV0LC5jbHItZm9ybS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIHRleHRhcmVhLC5jbHItZm9ybS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIHNlbGVjdHt3aWR0aDoxMDAlfS5jbHItZm9ybS1mdWxsLXdpZHRoIC5j''@;'; put 'put ''bHItZm9ybS1jb250cm9sIC5jbHItY29tYm9ib3gsLmNsci1mb3JtLWZ1bGwtd2lkdGguY2xyLWZvcm0tY29tcGFjdCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWlucHV0LXdyYXBwZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGguY2xyLWZvcm0tY29tcGFjdCAuY2xyLWZvcm0tY29udHJvbCAuY2xy''@;'; put 'put ''LW51bWJlci1pbnB1dC13cmFwcGVyLC5jbHItZm9ybS1mdWxsLXdpZHRoLmNsci1mb3JtLWNvbXBhY3QgLmNsci1mb3JtLWNvbnRyb2wgLmNsci1zZWxlY3Qtd3JhcHBlciwuY2xyLWZvcm0tZnVsbC13aWR0aC5jbHItZm9ybS1jb21wYWN0IC5jbHItZm9ybS1jb250cm9sIC5jbHItbXVsdGlz''@;'; put 'put ''ZWxlY3Qtd3JhcHBlcntkaXNwbGF5OmlubGluZS1mbGV4fS5jbHItZm9ybS1mdWxsLXdpZHRoLmNsci1mb3JtLWNvbXBhY3QgLmNsci1jb250cm9sLWNvbnRhaW5lcntmbGV4LXdyYXA6bm93cmFwfS5jbHItZm9ybS1mdWxsLXdpZHRoLmNsci1mb3JtLWNvbXBhY3QgLmNsci1zdWJ0ZXh0e2Zs''@;'; put 'put ''ZXg6MCAwIGF1dG99LmNsci1mb3JtLWZ1bGwtd2lkdGg6bm90KC5jbHItZm9ybS1jb21wYWN0KSAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWVycm9yIC5jbHItc2VsZWN0LXdyYXBwZXI6YWZ0ZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGg6bm90KC5jbHItZm9ybS1jb21wYWN0KSAuY2xyLWZvcm0t''@;'; put 'put ''Y29udHJvbCAuY2xyLXN1Y2Nlc3MgLmNsci1zZWxlY3Qtd3JhcHBlcjphZnRlcntyaWdodDp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpfS5jbHItZm9ybS1mdWxsLXdpZHRoOm5vdCguY2xyLWZvcm0tY29tcGFjdCkgLmNsci1mb3JtLWNvbnRyb2wgLmNsci1jb250cm9sLWNvbnRhaW5lcjpu''@;'; put 'put ''b3QoLmNsci1lcnJvcik6bm90KC5jbHItc3VjY2VzcykgdGV4dGFyZWF7d2lkdGg6Y2FsYygxMDAlIC0gdmFyKC0tY2xyLWZvcm1zLWljb24tc2l6ZSkpfS5jbHItZm9ybS1ncm91cHtwYWRkaW5nOnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9LmNsci1yZXF1aXJlZC1tYXJrOmFmdGVye2Nv''@;'; put 'put ''bnRlbnQ6IioiO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtmaWxsOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC1zaXplLTMpO21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1iYXNl''@;'; put 'put ''bGluZSl9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lfS5jbHItY2hlY2tib3gtd3JhcHBlcntwb3NpdGlvbjpy''@;'; put 'put ''ZWxhdGl2ZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItY2hlY2tib3gtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7Zm9udC13ZWlnaHQ6NDAwO2Rpc3BsYXk6YmxvY2t9LmNsci1jaGVja2JveC13cmFwcGVyfi5jbHItdmFsaWRhdGUtaWNvbnttYXJnaW4tbGVmdDow''@;'; put 'put ''fS5jbHItY2hlY2tib3gtd3JhcHBlcn4uY2xyLXN1YnRleHR7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmNsci1jaGVja2JveC13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MDtjdXJzb3I6cG9pbnRlcjttaW4taGVp''@;'; put 'put ''Z2h0OmNhbGModmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSo0KTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgMDtjb2xvcjp2YXIoLS1jbHItZm9ybXMtbGFiZWwtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXpl''@;'; put 'put ''KTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0uY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF17cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttaW4taGVpZ2h0''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtYm9yZGVyLXJhZGl1cyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpIDB9LmNsci1jaGVja2Jv''@;'; put 'put ''eC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOm5vdCg6ZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmlubGluZS1ibG9jaztoZWln''@;'; put 'put ''aHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2JvcmRlcjouMDVyZW0gc29saWQgdmFyKC0tY2xyLWZvcm1zLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtYm9yZGVyLXJhZGl1cyl9''@;'; put 'put ''LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6IiI7ZGlzcGxheTpub25lO2hlaWdodDpjYWxjKGNhbGMoY2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpKi41KSouNSkgKyB2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTEpKTt3aWR0aDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykqLjUpO2JvcmRlci1sZWZ0OmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSouMTI1KSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtbWFyay1jb2xvcik7Ym9yZGVyLWJvdHRvbTpjYWxjKHZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtNykqLjEyNSkgc29saWQgdmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LW1hcmstY29sb3IpO2xlZnQ6Y2FsYyhjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykqLjUpKi41KTt0cmFuc2Zvcm06dHJhbnNsYXRlWShjYWxjKGNhbGModmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS03KSouNSkqLjUpKSByb3RhdGUoLTQ1ZGVnKX0uY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Zm9jdXN7b3V0bGluZTowfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpmb2N1czpiZWZvcmV7b3V0bGluZTp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUpO291dGxpbmUtY29sb3I6LXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0OmNhbGMoMyooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9''@;'; put 'put ''Y2hlY2tib3hdOmNoZWNrZWQ6YmVmb3Jle2JhY2tncm91bmQ6dmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LWJhY2tncm91bmQtY29sb3IpO2JvcmRlcjowfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2Nr''@;'; put 'put ''fS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XS5jbHItaW5kZXRlcm1pbmF0ZTpiZWZvcmUsLmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmluZGV0ZXJtaW5hdGU6YmVmb3Jle2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJv''@;'; put 'put ''cmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1pbmRldGVybWluYXRlLWJvcmRlci1jb2xvcil9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdLmNsci1pbmRldGVybWluYXRlOmFmdGVyLC5jbHItY2hlY2tib3gtd3JhcHBlciBp''@;'; put 'put ''bnB1dFt0eXBlPWNoZWNrYm94XTppbmRldGVybWluYXRlOmFmdGVye2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1ib3JkZXItY29sb3IpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RyYW5zZm9ybTp0cmFu''@;'; put 'put ''c2xhdGVZKGNhbGMoY2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpKi41KSouNSkpfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpkaXNhYmxlZCtsYWJlbHtjdXJzb3I6bm90LWFsbG93ZWQ7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLWxhYmVsLWRpc2FibGVk''@;'; put 'put ''LWNvbG9yKX0uY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06ZGlzYWJsZWQ6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm0tZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1k''@;'; put 'put ''aXNhYmxlZC1ib3JkZXItY29sb3IpfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpkaXNhYmxlZDpjaGVja2VkOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1jaGVja2VkLWJhY2tncm91bmQtY29sb3Ip''@;'; put 'put ''O2JvcmRlcjowfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpkaXNhYmxlZDpjaGVja2VkOmFmdGVye2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtZGlzYWJsZWQtbWFyay1jb2xvcil9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5''@;'; put 'put ''cGU9Y2hlY2tib3hdOmRpc2FibGVkLmNsci1pbmRldGVybWluYXRlOmFmdGVyLC5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpkaXNhYmxlZDppbmRldGVybWluYXRlOmFmdGVye2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtZGlzYWJsZWQt''@;'; put 'put ''aW5kZXRlcm1pbmF0ZS1jb2xvcik7Ym9yZGVyLWxlZnQ6bm9uZX0uY2xyLWNoZWNrYm94LXdyYXBwZXIuY2xyLWNoZWNrYm94LWlubGluZXtkaXNwbGF5OmZsZXh9LmNsci1jaGVja2JveC13cmFwcGVyLmNsci1jaGVja2JveC1pbmxpbmUgLmNsci1jb250cm9sLWxhYmVse2Rpc3BsYXk6aW5s''@;'; put 'put ''aW5lLWJsb2NrO21hcmdpbi1yaWdodDpjYWxjKDIqdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSk7d2lkdGg6YXV0b30uY2xyLWVycm9yIC5jbHItY2hlY2tib3gtd3JhcHBlcjpub3QoLmRhdGFncmlkLXNlbGVjdCAuY2xyLWNoZWNrYm94LXdyYXBwZXIpIGlucHV0W3R5cGU9Y2hlY2tib3hd''@;'; put 'put ''OmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IpfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItY2hlY2tib3gtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWwsLmNsci1jaGVja2JveC13cmFwcGVyLmNsci1jaGVja2JveC13cmFwcGVyLWRp''@;'; put 'put ''c2FibGVkIC5jbHItY29udHJvbC1sYWJlbHtjdXJzb3I6bm90LWFsbG93ZWQ7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLWxhYmVsLWRpc2FibGVkLWNvbG9yKX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06YmVmb3Jl''@;'; put 'put ''LC5jbHItY2hlY2tib3gtd3JhcHBlci5jbHItY2hlY2tib3gtd3JhcHBlci1kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybS1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZv''@;'; put 'put ''cm1zLWNoZWNrYm94LWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YmVmb3JlLC5jbHItY2hlY2tib3gtd3JhcHBlci5jbHItY2hlY2tib3gtd3JhcHBlci1k''@;'; put 'put ''aXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1jaGVja2VkLWJhY2tncm91bmQtY29sb3IpO2JvcmRlcjowfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItY2hl''@;'; put 'put ''Y2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFmdGVyLC5jbHItY2hlY2tib3gtd3JhcHBlci5jbHItY2hlY2tib3gtd3JhcHBlci1kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFmdGVye2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMt''@;'; put 'put ''Y2hlY2tib3gtZGlzYWJsZWQtbWFyay1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdLmNsci1pbmRldGVybWluYXRlOmFmdGVyLC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItY2hlY2tib3gt''@;'; put 'put ''d3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTppbmRldGVybWluYXRlOmFmdGVyLC5jbHItY2hlY2tib3gtd3JhcHBlci5jbHItY2hlY2tib3gtd3JhcHBlci1kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XS5jbHItaW5kZXRlcm1pbmF0ZTphZnRlciwuY2xyLWNoZWNrYm94LXdyYXBw''@;'; put 'put ''ZXIuY2xyLWNoZWNrYm94LXdyYXBwZXItZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06aW5kZXRlcm1pbmF0ZTphZnRlcntib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLWluZGV0ZXJtaW5hdGUtY29sb3IpO2JvcmRlci1sZWZ0Om5vbmV9LmNsci1m''@;'; put 'put ''b3JtLWNvbXBhY3QgLmNsci1jaGVja2JveC13cmFwcGVye21heC13aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDttaW4taGVpZ2h0OmNhbGModmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSo0KX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWNoZWNrYm94LXdyYXBwZXJ+LmNsci1zdWJ0ZXh0e21hcmdp''@;'; put 'put ''bi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1jaGVja2JveC13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6Y2FsYygyKnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO3dpZHRo''@;'; put 'put ''OmF1dG99LmNsci1mb3JtLWNvbXBhY3QgLmNsci1jaGVja2JveC13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHttYXJnaW4tdG9wOjB9LmNsci1maWxlLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLXRvcDp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpfS5jbHItZmlsZS13cmFw''@;'; put 'put ''cGVyIC5jbHItY29udHJvbC1sYWJlbHtmb250LXdlaWdodDo0MDA7ZGlzcGxheTpibG9ja30uY2xyLWZpbGUtd3JhcHBlcn4uY2xyLXZhbGlkYXRlLWljb257bWFyZ2luLWxlZnQ6MH0uY2xyLWZpbGUtd3JhcHBlcn4uY2xyLXN1YnRleHR7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmNsci1maWxl''@;'; put 'put ''LXdyYXBwZXIgLmJ0bnttYXJnaW46MH0uY2xyLWZpbGV7aGVpZ2h0OjA7d2lkdGg6MDtvcGFjaXR5OjA7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6LTF9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1maWxlLXdyYXBwZXJ7bWF4LXdpZHRoOjEwMCU7bWFyZ2luLXRv''@;'; put 'put ''cDowfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS13cmFwcGVyfi5jbHItc3VidGV4dHttYXJnaW4tbGVmdDp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS13cmFwcGVyfi5jbHItdmFsaWRhdGUtaWNvbntsaW5lLWhlaWdodDpjYWxjKHZh''@;'; put 'put ''cigtLWNsci1mb3Jtcy1iYXNlbGluZSkqNCl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1maWxlLXdyYXBwZXJ+LmNsci1zdWJ0ZXh0e2xpbmUtaGVpZ2h0OmNhbGModmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSo0KTttYXJnaW4tdG9wOjB9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1maWxlLXdy''@;'; put 'put ''YXBwZXIgLmNsci1jb250cm9sLWxhYmVse21hcmdpbi10b3A6MDtsaW5lLWhlaWdodDoxLjA4cmVtfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS13cmFwcGVyIC5idG57aGVpZ2h0OjEuMnJlbX0uY2xyLWZpbGUtaW5wdXQtd3JhcHBlcntkaXNwbGF5OmZsZXg7cG9zaXRpb246cmVsYXRp''@;'; put 'put ''dmU7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5jbHItZmlsZS1pbnB1dC13cmFwcGVyIC5jbHItZmlsZS1pbnB1dHtoZWlnaHQ6MDt3aWR0aDowO29wYWNpdHk6MDtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDotMX0uY2xyLWZpbGUtaW5w''@;'; put 'put ''dXQtd3JhcHBlciAuY2xyLWZpbGUtaW5wdXQtYnJvd3NlLWJ1dHRvbiwuY2xyLWZpbGUtaW5wdXQtd3JhcHBlciAuY2xyLWZpbGUtaW5wdXQtY2xlYXItYnV0dG9ue21hcmdpbjowO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpfS5jbHItZmlsZS1pbnB1dC13cmFwcGVy''@;'; put 'put ''IC5jbHItZmlsZS1pbnB1dC1jbGVhci1idXR0b257cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikhaW1wb3J0YW50O21pbi13aWR0aDp1bnNldDtib3JkZXI6MH0uY2xyLWZpbGUtaW5wdXQtd3JhcHBlciAuY2xyLWZpbGUtaW5wdXQtYnJvd3NlLWJ1dHRvbi10ZXh0e292ZXJm''@;'; put 'put ''bG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS1pbnB1dC13cmFwcGVye21hcmdpbi10b3A6MH1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOjc2OHB4KXsuY2xyLWZvcm0taG9yaXpvbnRhbCAuY2xyLWZpbGUtaW5wdXQtd3Jh''@;'; put 'put ''cHBlcnttYXJnaW4tdG9wOjB9fS5jbHItZmlsZS1saXN0IC5jbHItZmlsZS1saXN0LWl0ZW17bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO21heC13aWR0aDo1MDBweH0uY2xyLWZpbGUtbGlzdCAuY2xyLWZpbGUtbGFiZWwtYW5kLXN0YXR1cy1pY29ue2Rpc3BsYXk6aW5s''@;'; put 'put ''aW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItZmlsZS1saXN0IC5jbHItZmlsZS1sYWJlbHt3aGl0ZS1zcGFjZTp3cmFwO2hlaWdodDp1bnNldDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKTtwYWRkaW5n''@;'; put 'put ''LXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmNsci1maWxlLWxpc3QgLmNsci1maWxlLWNsZWFyLWJ1dHRvbnttYXJnaW46MDtwYWRkaW5nOjA7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7aGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRp''@;'; put 'put ''b24tbGluZS1oZWlnaHQpfS5jbHItZmlsZS1saXN0IC5jbHItZmlsZS1jbGVhci1idXR0b24gY2RzLWljb257bWFyZ2luOjB9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1maWxlLWxpc3QtaXRlbXtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7YWxpZ24taXRlbXM6Y2VudGVyO2NvbHVtbi1n''@;'; put 'put ''YXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWZpbGUtbGlzdC1pdGVtIC5jbHItc3VidGV4dHttYXJnaW46MCFpbXBvcnRhbnR9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1maWxlLWxpc3QtYnJlYWt7ZmxleC1iYXNpczoxMDAlO2hlaWdodDowfS5j''@;'; put 'put ''bHItaW5wdXQtd3JhcHBlcnt3aGl0ZS1zcGFjZTpub3dyYXA7bWF4LWhlaWdodDp2YXIoLS1jbHItZm9ybXMtaW5wdXQtd3JhcHBlci1oZWlnaHQpfS5jbHItaW5wdXR7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1h''@;'; put 'put ''cHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZDowIDA7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1pbnB1dC13cmFwcGVyLWhlaWdodCk7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXRleHQtY29s''@;'; put 'put ''b3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yKTtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOnZhcigtLWNsci1mb3Jtcy1pbnB1dC1w''@;'; put 'put ''YWRkaW5nKTttYXgtaGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1pbnB1dC13cmFwcGVyLWhlaWdodCk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1m''@;'; put 'put ''b250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS5jbHItaW5wdXQ6Zm9jdXN7b3V0bGluZTowfS5jbHItaW5wdXRbcmVhZG9ubHld''@;'; put 'put ''e2JvcmRlcjowfS5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pe2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSx0cmFuc3BhcmVudCA5NSUsdmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IpIDk1JSkgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTowIDEwMCU7dHJhbnNp''@;'; put 'put ''dGlvbjpiYWNrZ3JvdW5kLXNpemUgLjJzIGVhc2V9LmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSk6Zm9jdXMsLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSkuY2xyLWZvY3VzLC5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pOmZvY3VzLXdpdGhpbntib3JkZXItYm90dG9tLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1mb3Jtcy1mb2N1c2VkLWNvbG9yKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlfS5jbHItaW5wdXQ6ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXRleHQtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLWlucHV0OmRpc2FibGVkOjpwbGFjZWhvbGRl''@;'; put 'put ''cntjb2xvcjp2YXIoLS1jbHItZm9ybXMtcGxhY2Vob2xkZXItZGlzYWJsZWQtY29sb3IpfS5jbHItZXJyb3IgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSl7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcik7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGll''@;'; put 'put ''bnQodG8gYm90dG9tLHRyYW5zcGFyZW50IDk1JSx2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcikgOTUlKSBuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjAgMTAwJTt0cmFuc2l0aW9uOmJhY2tncm91bmQtc2l6ZSAuMnMgZWFzZX0uY2xyLWVycm9yIC5jbHItaW5wdXQ6bm90KFtyZWFk''@;'; put 'put ''b25seV0pOmZvY3VzLC5jbHItZXJyb3IgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSkuY2xyLWZvY3VzLC5jbHItZXJyb3IgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSk6Zm9jdXMtd2l0aGlue2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IpO2Jh''@;'; put 'put ''Y2tncm91bmQtc2l6ZToxMDAlIDEwMCV9LmNsci1zdWNjZXNzIC5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pe2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sdHJhbnNwYXJlbnQgOTUl''@;'; put 'put ''LHZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xvcikgOTUlKSBuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjAgMTAwJTt0cmFuc2l0aW9uOmJhY2tncm91bmQtc2l6ZSAuMnMgZWFzZX0uY2xyLXN1Y2Nlc3MgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSk6Zm9jdXMsLmNsci1zdWNjZXNzIC5j''@;'; put 'put ''bHItaW5wdXQ6bm90KFtyZWFkb25seV0pLmNsci1mb2N1cywuY2xyLXN1Y2Nlc3MgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSk6Zm9jdXMtd2l0aGlue2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlfS5j''@;'; put 'put ''bHItZm9ybS1jb250cm9sLnJvdyAuY2xyLWlucHV0LXdyYXBwZXJ7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpKX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWlucHV0e21heC13aWR0aDoxMDAlfS5jbHItZm9ybS1jb21wYWN0IC5jbHItaW5wdXR+LmNs''@;'; put 'put ''ci1zdWJ0ZXh0e21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9LmNsci1mb3JtLWNvbnRyb2wtcmVhZG9ubHkgLmNsci1pbnB1dHtib3JkZXI6MH0uY2xyLWZvcm0tY29udHJvbC1tdWx0aSAuY2xyLWlucHV0e21heC13aWR0aDpjYWxjKDEwMCUgKyB2YXIoLS1jbHItZm9y''@;'; put 'put ''bXMtaWNvbi1zaXplKSl9OjpwbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1jbHItZm9ybXMtcGxhY2Vob2xkZXItY29sb3IpfS5jbHItaW5wdXQtZ3JvdXB7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXRleHQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXIt''@;'; put 'put ''d2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yKTtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sdHJhbnNwYXJlbnQgOTUlLHZhcigtLWNsci1mb3Jtcy1mb2N1c2VkLWNv''@;'; put 'put ''bG9yKSA5NSUpIG5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6MCAxMDAlO3RyYW5zaXRpb246YmFja2dyb3VuZC1zaXplIC4ycyBlYXNlO3Bvc2l0aW9uOnJlbGF0aXZlO21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLWlucHV0LXdyYXBwZXItaGVpZ2h0KX0uY2xy''@;'; put 'put ''LWlucHV0LWdyb3VwOmZvY3VzLC5jbHItaW5wdXQtZ3JvdXAuY2xyLWZvY3VzLC5jbHItaW5wdXQtZ3JvdXA6Zm9jdXMtd2l0aGlue2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IpO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCV9LmNsci1pbnB1dC1n''@;'; put 'put ''cm91cC5jbHItZm9jdXN7d2lkdGg6YXV0b30uY2xyLWlucHV0LWdyb3VwIC5jbHItaW5wdXR7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjA7bWFyZ2luLXJpZ2h0OjA7bWF4LXdpZHRoOjEwMCV9LmNsci1pbnB1dC1ncm91cCAuY2xyLWlucHV0Om5vdChbcmVhZG9ubHldKTpmb2N1c3tiYWNrZ3Jv''@;'; put 'put ''dW5kLXNpemU6MDtib3JkZXI6MH0uY2xyLWlucHV0LWdyb3VwIHNlbGVjdCwuY2xyLWlucHV0LWdyb3VwIC5jbHItc2VsZWN0LXdyYXBwZXIgc2VsZWN0LC5jbHItaW5wdXQtZ3JvdXAgLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdHtib3JkZXI6MH0uY2xyLWlucHV0LWdyb3VwIC5j''@;'; put 'put ''bHItaW5wdXQtZ3JvdXAtYWRkb257Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXN1YnRleHQtY29sb3IpfS5jbHItaW5wdXQtZ3JvdXAgLmNsci1pbnB1dC1ncm91cC1hY3Rpb25ze2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItaW5wdXQtZ3JvdXAgLmNsci1pbnB1''@;'; put 'put ''dC1ncm91cC1pY29uLWFjdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MDtwYWRkaW5nOjA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTti''@;'; put 'put ''YWNrZ3JvdW5kOjAgMDtwYWRkaW5nOjAgY2FsYygxLjUqdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSk7Y3Vyc29yOnBvaW50ZXJ9YnV0dG9uLmNsci1pbnB1dC1ncm91cCAuY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9ue2N1cnNvcjpwb2ludGVyfS5jbHItaW5wdXQtZ3JvdXAgLmNsci1p''@;'; put 'put ''bnB1dC1ncm91cC1pY29uLWFjdGlvbiBjZHMtaWNvbiwuY2xyLWlucHV0LWdyb3VwIC5jbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb24gY2xyLWljb257ZmlsbDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLWlucHV0LWdy''@;'; put 'put ''b3VwLWljb24tYWN0aW9uLXNpemUpO3dpZHRoOnZhcigtLWNsci1mb3Jtcy1pbnB1dC1ncm91cC1pY29uLWFjdGlvbi1zaXplKTt0cmFuc2Zvcm06dHJhbnNsYXRlKGNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSksY2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKSl9''@;'; put 'put ''LmNsci1lcnJvciAuY2xyLWlucHV0LWdyb3Vwe2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IpO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSx0cmFuc3BhcmVudCA5NSUsdmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IpIDk1''@;'; put 'put ''JSkgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTowIDEwMCU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXNpemUgLjJzIGVhc2V9LmNsci1lcnJvciAuY2xyLWlucHV0LWdyb3VwOmZvY3VzLC5jbHItZXJyb3IgLmNsci1pbnB1dC1ncm91cC5jbHItZm9jdXMsLmNsci1lcnJvciAuY2xyLWlucHV0''@;'; put 'put ''LWdyb3VwOmZvY3VzLXdpdGhpbntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlfS5jbHItc3VjY2VzcyAuY2xyLWlucHV0LWdyb3Vwe2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZh''@;'; put 'put ''bGlkLWNvbG9yKTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sdHJhbnNwYXJlbnQgOTUlLHZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xvcikgOTUlKSBuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjAgMTAwJTt0cmFuc2l0aW9uOmJhY2tncm91bmQtc2l6ZSAuMnMgZWFz''@;'; put 'put ''ZX0uY2xyLXN1Y2Nlc3MgLmNsci1pbnB1dC1ncm91cDpmb2N1cywuY2xyLXN1Y2Nlc3MgLmNsci1pbnB1dC1ncm91cC5jbHItZm9jdXMsLmNsci1zdWNjZXNzIC5jbHItaW5wdXQtZ3JvdXA6Zm9jdXMtd2l0aGlue2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNv''@;'; put 'put ''bG9yKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItaW5wdXQtZ3JvdXB7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWRpc2FibGVkLWNvbG9yKX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xy''@;'; put 'put ''LWlucHV0LWdyb3VwLWljb24tYWN0aW9ue2NvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0LWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiBjZHMtaWNvbntmaWxsOnZhcigtLWNs''@;'; put 'put ''ci1mb3Jtcy1pbnB1dC1ncm91cC1pY29uLWRpc2FibGVkLWNvbG9yKX0uY2xyLWlucHV0LWdyb3VwOmhhcyhpbnB1dFtyZWFkb25seV0pLC5jbHItZm9ybS1jb250cm9sLXJlYWRvbmx5IC5jbHItaW5wdXQtZ3JvdXB7Ym9yZGVyOjA7YmFja2dyb3VuZDowIDB9LmNsci1pbnB1dC1ncm91cDpo''@;'; put 'put ''YXMoaW5wdXRbcmVhZG9ubHldKSAuY2xyLWlucHV0LWdyb3VwLWFjdGlvbnMsLmNsci1mb3JtLWNvbnRyb2wtcmVhZG9ubHkgLmNsci1pbnB1dC1ncm91cCAuY2xyLWlucHV0LWdyb3VwLWFjdGlvbnN7ZGlzcGxheTpub25lfS5jbHItZm9ybS1ob3Jpem9udGFsIC5jbHItaW5wdXQtZ3JvdXB7''@;'; put 'put ''bWF4LXdpZHRoOjEwMCU7cGFkZGluZy1yaWdodDowfS5jbHItcmFkaW8td3JhcHBlciBpbnB1dFt0eXBlPXJhZGlvXXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFuY2U6bm9uZX0uY2xyLXJhZGlvLXdy''@;'; put 'put ''YXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uY2xyLXJhZGlvLXdyYXBwZXIgLmNsci1jb250cm9sLWxhYmVse2ZvbnQtd2VpZ2h0OjQwMDtkaXNwbGF5OmJsb2NrfS5jbHItcmFkaW8td3JhcHBlcn4uY2xyLXZhbGlkYXRlLWljb257bWFy''@;'; put 'put ''Z2luLWxlZnQ6MH0uY2xyLXJhZGlvLXdyYXBwZXJ+LmNsci1zdWJ0ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5jbHItcmFkaW8td3JhcHBlciBpbnB1dFt0eXBlPXJhZGlvXXtwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTt3aWR0aDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtib3JkZXItcmFkaXVzOjUwJTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgMH0uY2xyLXJhZGlvLXdyYXBwZXIg''@;'; put 'put ''aW5wdXRbdHlwZT1yYWRpb106bm90KDpkaXNhYmxlZCl7Y3Vyc29yOnBvaW50ZXJ9LmNsci1yYWRpby13cmFwcGVyIGlucHV0W3R5cGU9cmFkaW9dOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7Ym9yZGVyOi4wNXJlbSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOjUwJX0uY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpiZWZvcmV7Ym9y''@;'; put 'put ''ZGVyOjA7Ym94LXNoYWRvdzp2YXIoLS1jbHItZm9ybXMtcmFkaW8tc2VsZWN0ZWQtc2hhZG93KX0uY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpkaXNhYmxlZDpiZWZvcmV7Ym94LXNoYWRvdzp2YXIoLS1jbHItZm9ybXMtcmFkaW8tY2hlY2tlZC1kaXNhYmxl''@;'; put 'put ''ZC1zaGFkb3cpfS5jbHItcmFkaW8td3JhcHBlciBpbnB1dFt0eXBlPXJhZGlvXTpmb2N1c3tvdXRsaW5lOjB9LmNsci1yYWRpby13cmFwcGVyIGlucHV0W3R5cGU9cmFkaW9dOmZvY3VzOmJlZm9yZXtvdXRsaW5lOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZSk7''@;'; put 'put ''b3V0bGluZS1jb2xvcjotd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1vZmZzZXQ6Y2FsYygzKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0uY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb106ZGlzYWJsZWQrbGFiZWx7Y3Vyc29yOm5vdC1hbGxvd2VkO2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1mb3Jtcy1yYWRpby1sYWJlbC1kaXNhYmxlZC1jb2xvcil9LmNsci1yYWRpby13cmFwcGVyIGlucHV0W3R5cGU9cmFkaW9dOmRpc2FibGVkOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1yYWRpby1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''KTtib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCl9LmNsci1yYWRpby13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MDtjdXJzb3I6cG9pbnRlcjtt''@;'; put 'put ''aW4taGVpZ2h0OmNhbGModmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSo0KTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgMDtjb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFkaW8tbGFiZWwtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRh''@;'; put 'put ''cnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0uY2xyLXJhZGlvLXdyYXBwZXIgLmNsci1jb250cm9sLWxhYmVsOmVtcHR5e3BhZGRpbmctbGVmdDowfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItcmFkaW8td3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7''@;'; put 'put ''Y3Vyc29yOm5vdC1hbGxvd2VkO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1yYWRpby1sYWJlbC1kaXNhYmxlZC1jb2xvcil9LmNsci1lcnJvciAuY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb106YmVmb3Jle2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xv''@;'; put 'put ''cil9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1yYWRpby13cmFwcGVye21heC13aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDttaW4taGVpZ2h0OmNhbGMoNCp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpKX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLXJhZGlvLXdyYXBwZXJ+LmNsci1zdWJ0ZXh0e21h''@;'; put 'put ''cmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1yYWRpby13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6Y2FsYygyKnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO3dpZHRo''@;'; put 'put ''OmF1dG99LmNsci1mb3JtLWNvbXBhY3QgLmNsci1yYWRpby13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHttYXJnaW4tdG9wOjB9LmNsci1zZWxlY3Qtd3JhcHBlciwuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7d2hpdGUtc3BhY2U6bm93cmFwfS5jbHItc2Vs''@;'; put 'put ''ZWN0LXdyYXBwZXIgc2VsZWN0LC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3R7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO2Jv''@;'; put 'put ''cmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZDowIDA7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXRleHQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAw''@;'; put 'put ''KSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yKTtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LXNpemU6dmFyKC0tY2xyLXAyLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQt''@;'; put 'put ''d2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzowIGNhbGModmFyKC0tY2xyLWZvcm1zLXNl''@;'; put 'put ''bGVjdC1jYXJldC1zaXplKSArIHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkqMikgMCB2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpO2N1cnNvcjpwb2ludGVyO3otaW5kZXg6Mn0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpmb2N1cywuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0''@;'; put 'put ''OmZvY3Vze291dGxpbmU6MH0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpub3QoW211bHRpcGxlXSksLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdDpub3QoW211bHRpcGxlXSl7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHRyYW5zcGFyZW50IDk1JSx2YXIo''@;'; put 'put ''LS1jbHItZm9ybXMtZm9jdXNlZC1jb2xvcikgOTUlKSBuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjAgMTAwJTt0cmFuc2l0aW9uOmJhY2tncm91bmQtc2l6ZSAuMnMgZWFzZX0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpub3QoW211bHRpcGxlXSk6Zm9jdXMsLmNsci1zZWxlY3Qtd3Jh''@;'; put 'put ''cHBlciBzZWxlY3Q6bm90KFttdWx0aXBsZV0pLmNsci1mb2N1cywuY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpub3QoW211bHRpcGxlXSk6Zm9jdXMtd2l0aGluLC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3Q6bm90KFttdWx0aXBsZV0pOmZvY3VzLC5jbHItbXVsdGlzZWxlY3Qt''@;'; put 'put ''d3JhcHBlciBzZWxlY3Q6bm90KFttdWx0aXBsZV0pLmNsci1mb2N1cywuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpmb2N1cy13aXRoaW57Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtZm9jdXNlZC1jb2xvcik7YmFja2dyb3VuZC1z''@;'; put 'put ''aXplOjEwMCUgMTAwJX0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdFttdWx0aXBsZV06Zm9jdXMsLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdFttdWx0aXBsZV06Zm9jdXN7b3V0bGluZS1jb2xvcjpIaWdobGlnaHQ7b3V0bGluZS1jb2xvcjotd2Via2l0LWZvY3VzLXJpbmctY29s''@;'; put 'put ''b3I7b3V0bGluZS1zdHlsZTphdXRvO291dGxpbmUtd2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKX0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpob3ZlciwuY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDphY3RpdmUsLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdDpob3Zl''@;'; put 'put ''ciwuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0OmFjdGl2ZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1ob3Zlci1ib3JkZXItY29sb3IpO2JhY2tncm91bmQ6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1ob3Zlci1iYWNrZ3JvdW5kKX0uY2xyLXNlbGVjdC13cmFw''@;'; put 'put ''cGVyIHNlbGVjdDpob3ZlcjpkaXNhYmxlZCwuY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDphY3RpdmU6ZGlzYWJsZWQsLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdDpob3ZlcjpkaXNhYmxlZCwuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0OmFjdGl2ZTpkaXNhYmxlZHtj''@;'; put 'put ''dXJzb3I6bm90LWFsbG93ZWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpkaXNhYmxlZCBvcHRpb24sLmNsci1zZWxlY3Qtd3JhcHBlciBzZWxlY3Qgb3B0aW9uOmRpc2FibGVkLC5j''@;'; put 'put ''bHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3Q6ZGlzYWJsZWQgb3B0aW9uLC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3Qgb3B0aW9uOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLXNl''@;'; put 'put ''bGVjdC13cmFwcGVyIHNlbGVjdCBvcHRpb24sLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdCBvcHRpb257Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1vcHRpb24tY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1vcHRpb24tYmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcil9LmNsci1zZWxlY3Qtd3JhcHBlciBzZWxlY3Q6Oi1tcy1leHBhbmQsLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdDo6LW1zLWV4cGFuZHtkaXNwbGF5Om5vbmV9LmNsci1zZWxlY3Qtd3JhcHBlcnttYXgtaGVpZ2h0OmNhbGMoNCp2YXIoLS1jbHItZm9ybXMtYmFzZWxp''@;'; put 'put ''bmUpKTtkaXNwbGF5OmlubGluZS1ibG9ja30uY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6IiI7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtY2FyZXQtc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1zaXplKTt0''@;'; put 'put ''b3A6Y2FsYyguNSooNCp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpIC0gdmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1zaXplKSkpO3JpZ2h0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSk7bWFyZ2luOjA7bWFzazp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0Nz''@;'; put 'put ''dmclMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDEyJTIwMTIlMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDc3R5bGUlM0UuY2xzLTElN0Jm''@;'; put 'put ''aWxsJTNBJTIzOWE5YTlhJTNCJTdEJTNDJTJGc3R5bGUlM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VDYXJldCUzQyUyRnRpdGxlJTNFJTBBJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xzLTElMjIlMjBkJTNEJTIyTTYl''@;'; put 'put ''MkM5TDEuMiUyQzQuMmEwLjY4JTJDMC42OCUyQzAlMkMwJTJDMSUyQzEtMUw2JTJDNy4wOCUyQzkuODQlMkMzLjI0YTAuNjglMkMwLjY4JTJDMCUyQzElMkMxJTJDMSUyQzFaJTIyJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBKTttYXNrLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItZm9ybXMtc2VsZWN0LWNhcmV0LWNvbG9yKX0uY2xyLXNlbGVjdC13cmFwcGVyOmhvdmVyOmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1ob3Zlci1jb2xvcil9LmNsci1lcnJvciAuY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVy''@;'; put 'put ''LC5jbHItc3VjY2VzcyAuY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVye3JpZ2h0OmNhbGModmFyKC0tY2xyLWZvcm1zLWljb24tc2l6ZSkgKyB2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpKX0uY2xyLW11bHRpc2VsZWN0LXdyYXBwZXJ7ZGlzcGxheTpmbGV4fS5jbHItbXVsdGlzZWxlY3Qtd3Jh''@;'; put 'put ''cHBlciAuY2xyLXZhbGlkYXRlLWljb257bWFyZ2luLWxlZnQ6MH1zZWxlY3RbbXVsdGlwbGVdLHNlbGVjdFtzaXplXXtwYWRkaW5nOjA7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1i''@;'; put 'put ''b3JkZXItY29sb3IpO2JhY2tncm91bmQ6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2hlaWdodDphdXRvO21pbi13aWR0aDpjYWxjKDEyMCooMXJl''@;'; put 'put ''bS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9c2VsZWN0W211bHRpcGxlXTpob3ZlcixzZWxlY3RbbXVsdGlwbGVdOmFjdGl2ZSxzZWxlY3Rbc2l6ZV06aG92ZXIsc2VsZWN0W3NpemVdOmFjdGl2ZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlwbGUtYmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlwbGUtYm9yZGVyLWNvbG9yKX1zZWxlY3RbbXVsdGlwbGVdIG9wdGlvbixzZWxlY3Rbc2l6ZV0gb3B0aW9ue3BhZGRpbmc6Y2FsYyh2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpKi41KSB2YXIoLS1jbHIt''@;'; put 'put ''Zm9ybXMtYmFzZWxpbmUpO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlwbGUtb3B0aW9uLWNvbG9yKX1zZWxlY3RbbXVsdGlwbGVdIG9wdGlvbjpjaGVja2VkLHNlbGVjdFtzaXplXSBvcHRpb246Y2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxl''@;'; put 'put ''Y3QtbXVsdGlwbGUtc2VsZWN0ZWQtb3B0aW9uLWJhY2tncm91bmQtY29sb3IpfS5jbHItZXJyb3Igc2VsZWN0Om5vdChbbXVsdGlwbGVdKXtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBib3R0''@;'; put 'put ''b20sdHJhbnNwYXJlbnQgOTUlLHZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKSA5NSUpIG5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6MCAxMDAlO3RyYW5zaXRpb246YmFja2dyb3VuZC1zaXplIC4ycyBlYXNlfS5jbHItZXJyb3Igc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpmb2N1cywu''@;'; put 'put ''Y2xyLWVycm9yIHNlbGVjdDpub3QoW211bHRpcGxlXSkuY2xyLWZvY3VzLC5jbHItZXJyb3Igc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpmb2N1cy13aXRoaW57Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcik7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAw''@;'; put 'put ''JX0uY2xyLWVycm9yIHNlbGVjdFttdWx0aXBsZV17Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKX0uY2xyLXN1Y2Nlc3Mgc2VsZWN0Om5vdChbbXVsdGlwbGVdKXtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xvcik7YmFja2dy''@;'; put 'put ''b3VuZDpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHRyYW5zcGFyZW50IDk1JSx2YXIoLS1jbHItZm9ybXMtdmFsaWQtY29sb3IpIDk1JSkgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTowIDEwMCU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXNpemUgLjJzIGVhc2V9LmNsci1zdWNjZXNzIHNl''@;'; put 'put ''bGVjdDpub3QoW211bHRpcGxlXSk6Zm9jdXMsLmNsci1zdWNjZXNzIHNlbGVjdDpub3QoW211bHRpcGxlXSkuY2xyLWZvY3VzLC5jbHItc3VjY2VzcyBzZWxlY3Q6bm90KFttdWx0aXBsZV0pOmZvY3VzLXdpdGhpbntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy12YWxpZC1j''@;'; put 'put ''b2xvcik7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJX0uY2xyLXN1Y2Nlc3Mgc2VsZWN0W211bHRpcGxlXXtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLXNlbGVjdC5kaXNhYmxlZHtjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItZm9ybXMtc2VsZWN0LWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1zZWxlY3QuZGlzYWJsZWQ6aG92ZXI6YWZ0ZXJ7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1jb2xvcil9LmNsci1mb3JtLWNv''@;'; put 'put ''bnRyb2wtZGlzYWJsZWQgLmNsci1zZWxlY3QuZGlzYWJsZWQ+c2VsZWN0LC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItc2VsZWN0IHNlbGVjdDpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItZm9ybXMtc2VsZWN0LWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWR9LmNs''@;'; put 'put ''ci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1zZWxlY3QuZGlzYWJsZWQ+c2VsZWN0OmhvdmVyLC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItc2VsZWN0IHNlbGVjdDpkaXNhYmxlZDpob3ZlcntiYWNrZ3JvdW5kOjAgMDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLWJv''@;'; put 'put ''cmRlci1jb2xvcil9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1tdWx0aXNlbGVjdC13cmFwcGVye21hcmdpbi10b3A6MH0uY2xyLXRleHRhcmVhLXdyYXBwZXJ7d2hpdGUtc3BhY2U6bm93cmFwO2Rpc3BsYXk6ZmxleDttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LmNsci10''@;'; put 'put ''ZXh0YXJlYS13cmFwcGVyIC5jbHItdmFsaWRhdGUtaWNvbnttYXJnaW4tbGVmdDowfS5jbHItdGV4dGFyZWF7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO2hlaWdodDphdXRvO3Jlc2l6ZTp2ZXJ0aWNhbDtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9i''@;'; put 'put ''amVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kOnZhcigtLWNsci1mb3Jtcy10ZXh0YXJlYS1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIo''@;'; put 'put ''LS1jbHItZm9ybXMtdGV4dGFyZWEtYm9yZGVyLXJhZGl1cyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OmNhbGMoMjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyl9LmNsci10ZXh0YXJlYTpmb2N1c3tv''@;'; put 'put ''dXRsaW5lLWNvbG9yOkhpZ2hsaWdodDtvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLXN0eWxlOmF1dG87b3V0bGluZS13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpO291dGxpbmUtY29sb3I6dmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3Ip''@;'; put 'put ''O2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtZm9jdXNlZC1jb2xvcil9LmNsci10ZXh0YXJlYTpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXRl''@;'; put 'put ''eHRhcmVhLWRpc2FibGVkLWJhY2tncm91bmQpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWRpc2FibGVkLWNvbG9yKX0uY2xyLXN1Y2Nlc3MgLmNsci10ZXh0YXJlYXtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKTtvdXRsaW5lLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1mb3Jtcy12YWxpZC1jb2xvcil9LmNsci1lcnJvciAuY2xyLXRleHRhcmVhe2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcik7b3V0bGluZS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcil9LmNsci1jb250cm9sLWNvbnRhaW5lciB0''@;'; put 'put ''ZXh0YXJlYXt3aWR0aDphdXRvfS5jbHItZm9ybS1jb250cm9sLnJvdyAuY2xyLXRleHRhcmVhLXdyYXBwZXJ7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpfS5jbHItZm9ybS1jb21wYWN0IC5jbHItdGV4dGFyZWEtd3JhcHBlcnttYXJnaW4tdG9wOjB9''@;'; put 'put ''LmNsci1mb3JtLWNvbXBhY3QgLmNsci10ZXh0YXJlYS13cmFwcGVyIC5jbHItdGV4dGFyZWF7bWF4LXdpZHRoOjEwMCV9LmNsci1mb3JtLWNvbXBhY3QgLmNsci10ZXh0YXJlYS13cmFwcGVyIC5jbHItdGV4dGFyZWF+LmNsci1zdWJ0ZXh0e21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1i''@;'; put 'put ''YXNlbGluZSl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItdG9nZ2xlLWJnLWNvbG9yLW9mZjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwpOy0tY2xyLXRvZ2dsZS1iZy1jb2xvci1vbjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLXRvZ2dsZS1oYW5kbGUtYmct''@;'; put 'put ''Y29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kKTstLWNsci10b2dnbGUtaGFuZGxlLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWJnLWNvbG9yLW9mZik7LS1jbHItdG9nZ2xlLWhhbmRsZS1ib3JkZXItY29sb3Itb246dmFyKC0tY2xyLXRv''@;'; put 'put ''Z2dsZS1iZy1jb2xvci1vbik7LS1jbHItdG9nZ2xlLWRpc2FibGVkLWRlZmF1bHQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpOy0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1kZWZhdWx0LWhhbmRsZS1jb2xvcjp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQpOy0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vZmYtYm9yZGVyLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtZGVmYXVsdC1ib3JkZXItY29sb3IpOy0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vZmYtYmctY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLXRvZ2dsZS1kaXNhYmxlZC1kZWZhdWx0LWhhbmRsZS1jb2xvcik7LS1jbHItdG9nZ2xlLWRpc2FibGVkLW9mZi1oYW5kbGUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtZGVmYXVsdC1ib3JkZXItY29sb3IpOy0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1ib3Jk''@;'; put 'put ''ZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1kZWZhdWx0LWJvcmRlci1jb2xvcik7LS1jbHItdG9nZ2xlLWRpc2FibGVkLW9uLWJnLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtZGVmYXVsdC1ib3JkZXItY29sb3IpOy0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1o''@;'; put 'put ''YW5kbGUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtZGVmYXVsdC1ib3JkZXItY29sb3IpfS5jbHItdG9nZ2xlLXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF17LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFu''@;'; put 'put ''Y2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmV9LmNsci10b2dnbGUtd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTkpO2p1c3RpZnktY29udGVudDpzdGFydDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uY2xyLXRvZ2dsZS13cmFwcGVyIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2N1cnNvcjpwb2ludGVyO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTkpO2ZsZXg6MSAxIGF1dG99LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XXtwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTtmbGV4OjAgMCBhdXRvO2JvcmRlci1y''@;'; put 'put ''YWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTIwMCl9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpub3QoOmRpc2FibGVkKXtjdXJzb3I6cG9pbnRlcn0uY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmJlZm9y''@;'; put 'put ''ZXtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmlubGluZS1ibG9jaztjb250ZW50OiIiO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApIHNvbGlkIHZhcigtLWNsci10b2dnbGUtYmctY29sb3Itb2ZmKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy1vYmplY3QtYm9yZGVyLXJhZGl1cy0yMDApO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1iZy1jb2xvci1vZmYpO3RyYW5zaXRpb24tZHVyYXRpb246LjE1''@;'; put 'put ''czt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWluO3RyYW5zaXRpb24tcHJvcGVydHk6Ym9yZGVyLWNvbG9yLGJhY2tncm91bmQtY29sb3J9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmlubGlu''@;'; put 'put ''ZS1ibG9jaztjb250ZW50OiIiO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApIHNvbGlkIHZhcigtLWNsci10b2dnbGUtaGFuZGxlLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMzAw''@;'; put 'put ''KTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b2dnbGUtaGFuZGxlLWJnLWNvbG9yKTtsZWZ0OjA7cmlnaHQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKSk7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03''@;'; put 'put ''KTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OnJpZ2h0LGxlZnR9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpmb2N1c3tvdXRsaW5lOjB9LmNsci10b2dnbGUtd3Jh''@;'; put 'put ''cHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpmb2N1czpiZWZvcmV7b3V0bGluZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUpO291dGxpbmUtY29sb3I6LXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0OmNhbGMoMyooMXJlbS92YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWJhc2UpKSl9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1iZy1jb2xvci1vbik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWJnLWNvbG9yLW9uKTt0''@;'; put 'put ''cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kLWNvbG9yfS5jbHItdG9nZ2xlLXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphZnRlcnti''@;'; put 'put ''b3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1oYW5kbGUtYm9yZGVyLWNvbG9yLW9uKTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OnJpZ2h0LGxlZnQ7bGVmdDpjYWxjKHZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtMTApIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSk7cmlnaHQ6MH0uY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmRpc2FibGVkK2xhYmVse2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2ti''@;'; put 'put ''b3hdOmRpc2FibGVkOm5vdCg6Y2hlY2tlZCl7bGVmdDowfS5jbHItdG9nZ2xlLXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06ZGlzYWJsZWQ6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vZmYtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItdG9nZ2xlLWRpc2FibGVkLW9mZi1ib3JkZXItY29sb3IpfS5jbHItdG9nZ2xlLXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06ZGlzYWJsZWQ6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRpc2FibGVkLW9mZi1iZy1jb2xvcik7Ym9yZGVyLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtb2ZmLWhhbmRsZS1ib3JkZXItY29sb3IpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2Vk''@;'; put 'put ''OmRpc2FibGVkOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1iZy1jb2xvcil9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNr''@;'; put 'put ''Ym94XTpjaGVja2VkOmRpc2FibGVkOmFmdGVye2JvcmRlci1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRpc2FibGVkLW9uLWhhbmRsZS1ib3JkZXItY29sb3IpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNsci10b2dn''@;'; put 'put ''bGUtd3JhcHBlci5kaXNhYmxlZCBsYWJlbHtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci10b2dnbGUtd3JhcHBlci5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1ib3JkZXItY29sb3Ip''@;'; put 'put ''O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1iZy1jb2xvcil9LmNsci10b2dnbGUtd3JhcHBlci5yaWdodC1sYWJlbHtmbGV4LWZsb3c6cm93LXJldmVyc2V9LmNsci10b2dnbGUtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7ZGlzcGxheTpibG9jaztm''@;'; put 'put ''b250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRh''@;'; put 'put ''cnktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpIDA7bWFyZ2luLXRvcDowfS5jbHItY29udHJvbC1pbmxpbmUgLmNsci10b2dnbGUt''@;'; put 'put ''d3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjB9LmNsci10b2dnbGUtcmlnaHQgLmNsci10b2dnbGUtd3JhcHBlcntmbGV4LWZsb3c6cm93LXJldmVyc2V9LmNsci10b2dnbGUtcmlnaHQgbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxv''@;'; put 'put ''Y2t9LmNsci1yYW5nZS13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDthbGlnbi1pdGVtczpmbGV4LWVuZDtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRodW1iLWhlaWdodCk7d2hpdGUtc3BhY2U6bm93cmFwfS5j''@;'; put 'put ''bHItcmFuZ2Utd3JhcHBlciAuZmlsbC1pbnB1dHtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpO3BvaW50ZXItZXZlbnRzOm5vbmU7Y3Vyc29yOnBvaW50ZXI7ei1pbmRleDoxMDti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1yYW5nZS1wcm9ncmVzcy1maWxsLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6bm9uZX0uY2xyLXJhbmdle2Rpc3BsYXk6ZmxleDtqdXN0aWZ5''@;'; put 'put ''LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmZsZXgtZW5kO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KX0uY2xyLXJhbmdlOmRpc2FibGVke3BvaW50ZXItZXZlbnRzOmF1dG87Y3Vyc29yOm5vdC1hbGxvd2VkOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2xl''@;'; put 'put ''ZnQ6MDtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWhlaWdodCk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stY29sb3ItZGlzYWJsZWQpfS5jbHItcmFuZ2U6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1iey13ZWJraXQtYXBwZWFy''@;'; put 'put ''YW5jZTpub25lO3RyYW5zZm9ybTp0cmFuc2xhdGVZKGNhbGModmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRodW1iLWhlaWdodCkvMiAtIHZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpLzIgKyB2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLXdpZHRoKSkpO2JvcmRl''@;'; put 'put ''ci1yYWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3ItZGlzYWJsZWQpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0''@;'; put 'put ''KX0uY2xyLXJhbmdlOmRpc2FibGVkOjotbW96LXJhbmdlLXRodW1ie2JvcmRlcjowO2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3ItZGlzYWJsZWQpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2Ut''@;'; put 'put ''dGh1bWItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KX0uY2xyLXJhbmdlOmRpc2FibGVkKy5maWxsLWlucHV0e3BvaW50ZXItZXZlbnRzOmF1dG87Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdl''@;'; put 'put ''LXByb2dyZXNzLWZpbGwtY29sb3ItZGlzYWJsZWQpfWlucHV0W3R5cGU9cmFuZ2Vde3BhZGRpbmc6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtsZWZ0OjA7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1z''@;'; put 'put ''LXJhbmdlLXRyYWNrLWNvbG9yKTtib3JkZXI6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVy''@;'; put 'put ''LXJhZGl1cyl9aW5wdXRbdHlwZT1yYW5nZV06Oi13ZWJraXQtc2xpZGVyLXRodW1iey13ZWJraXQtYXBwZWFyYW5jZTpub25lO3RyYW5zZm9ybTp0cmFuc2xhdGVZKGNhbGModmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRodW1iLWhlaWdodCkvMiAtIHZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFj''@;'; put 'put ''ay1oZWlnaHQpLzIgKyB2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLXdpZHRoKSkpO2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3IpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2Ut''@;'; put 'put ''dGh1bWItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KX1pbnB1dFt0eXBlPXJhbmdlXTpkaXNhYmxlZHtib3JkZXI6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNr''@;'; put 'put ''LWJvcmRlci1jb2xvci1kaXNhYmxlZCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLXJhZGl1cyl9aW5wdXRbdHlwZT1yYW5nZV06Oi1tb3otcmFuZ2UtdGh1bWJ7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItZm9ybXMtcmFuZ2UtcHJvZ3Jlc3MtZmlsbC1jb2xvcik7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10aHVtYi1oZWlnaHQpO3dpZHRoOnZhcigtLWNsci1mb3Jtcy1yYW5nZS10aHVtYi1oZWlnaHQpfUBzdXBwb3J0cyAoLW1zLWltZS1hbGlnbjphdXRvKXsuY2xyLXJhbmdl''@;'; put 'put ''LXdyYXBwZXIgLmZpbGwtaW5wdXR7ZGlzcGxheTpub25lfS5jbHItcmFuZ2Utd3JhcHBlci5wcm9ncmVzcy1maWxsIGlucHV0W3R5cGU9cmFuZ2VdOjotbXMtZmlsbC1sb3dlcntoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWhlaWdodCk7YmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItZm9ybXMtcmFuZ2UtcHJvZ3Jlc3MtZmlsbC1jb2xvcil9aW5wdXRbdHlwZT1yYW5nZV17Ym9yZGVyOjA7bWFyZ2luOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7bGVmdDowO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTtiYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnRyYW5zcGFyZW50fWlucHV0W3R5cGU9cmFuZ2VdOjotbXMtdHJhY2t7bWFyZ2luOjA7Ym9yZGVyOjA7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWNv''@;'; put 'put ''bG9yKX1pbnB1dFt0eXBlPXJhbmdlXTo6LW1zLXRodW1ie2JvcmRlcjowO2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3IpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTt3''@;'; put 'put ''aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KX19XzotbXMtZnVsbHNjcmVlbiAuY2xyLXJhbmdlLXdyYXBwZXIgLmZpbGwtaW5wdXQsOnJvb3QgLmNsci1yYW5nZS13cmFwcGVyIC5maWxsLWlucHV0e2Rpc3BsYXk6bm9uZX1fOi1tcy1mdWxsc2NyZWVuIC5jbHItcmFu''@;'; put 'put ''Z2Utd3JhcHBlci5wcm9ncmVzcy1maWxsIGlucHV0W3R5cGU9cmFuZ2VdOjotbXMtZmlsbC1sb3dlciw6cm9vdCAuY2xyLXJhbmdlLXdyYXBwZXIucHJvZ3Jlc3MtZmlsbCBpbnB1dFt0eXBlPXJhbmdlXTo6LW1zLWZpbGwtbG93ZXJ7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFj''@;'; put 'put ''ay1oZWlnaHQpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3IpfV86LW1zLWZ1bGxzY3JlZW4gaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy10b29sdGlwLDpyb290IGlucHV0W3R5cGU9cmFuZ2VdOjotbXMtdG9vbHRpcHt2aXNpYmlsaXR5''@;'; put 'put ''OmhpZGRlbn1fOi1tcy1mdWxsc2NyZWVuIGlucHV0W3R5cGU9cmFuZ2VdLDpyb290IGlucHV0W3R5cGU9cmFuZ2Vde2JvcmRlcjowO21hcmdpbjowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2xlZnQ6MDtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRodW1iLWhlaWdodCk7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp0cmFuc3BhcmVudH1fOi1tcy1mdWxsc2NyZWVuIGlucHV0W3R5cGU9cmFuZ2VdOjotbXMtdHJhY2ssOnJvb3QgaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy10cmFja3tib3JkZXI6MDttYXJnaW46MDtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWhlaWdodCk7''@;'; put 'put ''Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stY29sb3IpfV86LW1zLWZ1bGxzY3JlZW4gaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy10aHVtYiw6cm9vdCBpbnB1dFt0eXBlPXJhbmdlXTo6LW1zLXRodW1ie2JvcmRlcjowO2JvcmRlci1y''@;'; put 'put ''YWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3IpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KX1pbnB1dFtjbHJE''@;'; put 'put ''YXRhbGlzdElucHV0XXtwb3NpdGlvbjpyZWxhdGl2ZX1pbnB1dFtjbHJEYXRhbGlzdElucHV0XTo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye29wYWNpdHk6MDtjdXJzb3I6dGV4dH0uY2xyLWlucHV0LWdyb3VwIGlucHV0W2NsckRhdGFsaXN0SW5wdXRde3otaW5kZXg6Mn0u''@;'; put 'put ''Y2xyLWlucHV0LWdyb3VwIC5jbHItZGF0YWxpc3QtY2FyZXR7cG9zaXRpb246YWJzb2x1dGU7dG9wOjI1JTtyaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1kYXRhbGlzdC1jYXJldC1jb2xvcik7Y3Vyc29yOnRleHQ7aGVpZ2h0OnZhcigtLWNs''@;'; put 'put ''ci1mb3Jtcy1kYXRhbGlzdC1jYXJldC1pY29uLXNpemUpO3dpZHRoOnZhcigtLWNsci1mb3Jtcy1kYXRhbGlzdC1jYXJldC1pY29uLXNpemUpfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItZGF0YWxpc3QtY2FyZXR7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLWRhdGFsaXN0LWNhcmV0''@;'; put 'put ''LWRpc2FibGVkLWNvbG9yKX1jbHItZGF0YWxpc3QtY29udGFpbmVyIC5jbHItaW5wdXQtZ3JvdXB7cGFkZGluZy1yaWdodDowfS5jbHItaW5wdXQtd3JhcHBlciBpbnB1dFtjbHJQYXNzd29yZF0rYnV0dG9uLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiAuY2xyLXBhc3N3b3JkLWV5ZS1p''@;'; put 'put ''Y29ue2NvbG9yOnZhcigtLWNsci1mb3Jtcy1wYXNzd29yZC1leWUtaWNvbi1jb2xvcil9LmNsci1pbnB1dC13cmFwcGVyIGlucHV0W2NsclBhc3N3b3JkXStidXR0b24uY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9uW2Rpc2FibGVkXSAuY2xyLXBhc3N3b3JkLWV5ZS1pY29ue2ZpbGw6dmFy''@;'; put 'put ''KC0tY2xyLWZvcm1zLXBhc3N3b3JkLWRpc2FibGVkLWV5ZS1pY29uLWNvbG9yKX0uY2xyLWlucHV0LXdyYXBwZXIgaW5wdXRbY2xyUGFzc3dvcmRdW2Rpc2FibGVkXXtjb2xvcjp2YXIoLS1jbHItZm9ybXMtcGFzc3dvcmQtZGlzYWJsZWQtZXllLWljb24tY29sb3IpfS5jbHItbnVtYmVyLWlu''@;'; put 'put ''cHV0LXdyYXBwZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO21heC1oZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLWlucHV0LXdyYXBwZXItaGVpZ2h0KX0uY2xyLW51bWJlci1pbnB1dC13cmFwcGVyIC5jbHItbnVtYmVyLWlucHV0ey1tb3otYXBwZWFyYW5jZTp0ZXh0''@;'; put 'put ''ZmllbGR9LmNsci1udW1iZXItaW5wdXQtd3JhcHBlciAuY2xyLW51bWJlci1pbnB1dDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiwuY2xyLW51bWJlci1pbnB1dC13cmFwcGVyIC5jbHItbnVtYmVyLWlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uey13ZWJraXQtYXBwZWFyYW5j''@;'; put 'put ''ZTpub25lO21hcmdpbjowfS5jbHItbnVtYmVyLWlucHV0LXdyYXBwZXIgLmNsci1udW1iZXItaW5wdXQtc2VwYXJhdG9ye2JhY2tncm91bmQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSk7aGVpZ2h0OnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtNyl9LmNsci1udW1iZXItaW5wdXQtd3JhcHBlciAuY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9ue2hlaWdodDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkgLSB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApKTt3aWR0aDpjYWxj''@;'; put 'put ''KHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkgLSB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApKTtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uY2xyLW51bWJlci1pbnB1dC13cmFwcGVyIC5jbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb246aG92''@;'; put 'put ''ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXIpfS5jbHItbnVtYmVyLWlucHV0LXdyYXBwZXIgLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtYWN0aXZlKX0uY2xyLW51bWJlci1pbnB1dC13cmFwcGVyIC5jbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb246ZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjp1bnNldH06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1jYWxlbmRhci1iYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWNhbGVuZGFyLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItY2FsZW5kYXItb3B0aW9uLXRleHQtY29sb3I6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItY2FsZW5kYXItYWN0aXZlLW9wdGlvbi1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItY2FsZW5kYXItcmFuZ2UtY2VsbC1iYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZCk7LS1jbHItY2FsZW5kYXItYnRuLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWNhbGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWNhbGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1ib3JkZXItY29sb3IpOy0tY2xyLWNhbGVuZGFyLWFjdGl2ZS1jZWxsLWJh''@;'; put 'put ''Y2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItY2FsZW5kYXItYWN0aXZlLWZvY3VzLWNlbGwtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91''@;'; put 'put ''bmQtaGlnaGxpZ2h0KTstLWNsci1jYWxlbmRhci1hY3RpdmUtY2VsbC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWNhbGVuZGFyLWJ0bi1waWNrZXItdHJpZ2dlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yKTst''@;'; put 'put ''LWNsci1jYWxlbmRhci1idG4tcGlja2VyLXRyaWdnZXItaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvci1ob3Zlcik7LS1jbHItY2FsZW5kYXItYnRuLXBpY2tlci10cmlnZ2VyLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1s''@;'; put 'put ''aW5rLWNvbG9yKTstLWNsci1jYWxlbmRhci1idG4taG92ZXItZm9jdXMtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhvdmVyKTstLWNsci1jYWxlbmRhci1idG4taG92ZXItZm9jdXMtY29sb3ItdGV4dDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0''@;'; put 'put ''LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci1jYWxlbmRhci1idG4tYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci1jYWxlbmRhci1idG4tYWN0aXZlLWNvbG9yLWJnOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''aW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmUpOy0tY2xyLWNhbGVuZGFyLXdlZWtkYXktZm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXNpemUtMyk7LS1jbHItY2FsZW5kYXItdG9kYXktZGF0ZS1jZWxsLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7LS1jbHItY2FsZW5kYXItcGlja2VyLWJ0bi1mb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS02KTstLWNsci1jYWxlbmRhci1waWNrZXItYnRuLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS1mb250LXdlaWdodC1tZWRpdW0pfS5kYXRlcGlja2Vye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOndyYXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpO3BhZGRpbmc6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDpjYWxjKCg3KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpKSArICgyKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykpICsgKDIqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkpO2hlaWdodDpjYWxjKCg4KnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpKSArICgyKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykpICsgKDIqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkgKyA2KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykpO2JhY2tncm91bmQ6dmFyKC0tY2xyLWNhbGVuZGFy''@;'; put 'put ''LWJhY2tncm91bmQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1jYWxlbmRhci1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7Ym94''@;'; put 'put ''LXNoYWRvdzp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LXNoYWRvdy0xMDApO3otaW5kZXg6MTA1MH0uZGF0ZXBpY2tlciAuZGF0ZXBpY2tlci12aWV3LW1hbmFnZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtyb3ctZ2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7d2lk''@;'; put 'put ''dGg6Y2FsYyg3KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpKX0uZGF0ZXBpY2tlci5oYXMtcmFuZ2Utb3B0aW9ue3dpZHRoOmNhbGMoKDcqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkpICsgKDIqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSkgKyAoMip2YXIoLS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LWJvcmRlci13aWR0aC0xMDApKSArIDE1MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykgKyAyKnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkpfS5kYXRlcGlja2VyLmhhcy1hY3Rpb24tYnV0dG9uc3to''@;'; put 'put ''ZWlnaHQ6Y2FsYygoOCp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKSkgKyAoMip2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpKSArICgyKnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkpICsgNip2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpICsgdmFyKC0tY2xyLWJ0''@;'; put 'put ''bi1oZWlnaHQpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpO3Jvdy1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uZGF0ZXBpY2tlciAuZGF0ZXBpY2tlci1hY3Rpb25ze21pbi13aWR0aDoxMDAlO2hlaWdodDpjYWxjKHZhcigt''@;'; put 'put ''LWNsci1idG4taGVpZ2h0KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykpO2Rpc3BsYXk6ZmxleDtib3JkZXItdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgc29saWQgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYm9yZGVyLWNvbG9yKTtqdXN0aWZ5LWNvbnRlbnQ6''@;'; put 'put ''ZW5kO3BhZGRpbmctdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7Z2FwOnZhcigtLWNsci1idG4taG9yaXpvbnRhbC1tYXJnaW4pfS5kYXRlcGlja2VyIC5kYXRlcGlja2VyLWFjdGlvbnMgYnV0dG9ue21hcmdpbjowfS5jbHItZGF0ZS1yYW5nZS1waWNrZXItbmF2e3dpZHRoOmNhbGMo''@;'; put 'put ''MTUwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2hlaWdodDoxMDAlfS5jYWxlbmRhci1oZWFkZXJ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2Fs''@;'; put 'put ''aWduLWl0ZW1zOmNlbnRlcjt3aWR0aDpjYWxjKDcqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkpfS5jYWxlbmRhci1zd2l0Y2hlcnMsLnllYXItc3dpdGNoZXJze2Rpc3BsYXk6ZmxleH0ueWVhci1zd2l0Y2hlcnN7ZmxleDowIDAgYXV0bzthbGlnbi1zZWxmOmNlbnRlcjt3aWR0aDpjYWxj''@;'; put 'put ''KHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpKjMpfS5jYWxlbmRhci10YWJsZXtmbGV4OjEgMSBhdXRvO2JvcmRlci1zcGFjaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTt3aWR0aDoxMDAlfXRkLmNhbGVuZGFyLWNlbGwsdGQuY2FsZW5kYXItdGFibGUgLmNhbGVuZGFyLWNlbGx7''@;'; put 'put ''aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3BhZGRpbmc6MDt0ZXh0LWFsaWduOmNl''@;'; put 'put ''bnRlcn0uZGF5e2Rpc3BsYXk6aW5saW5lfS53ZWVrZGF5c3tmbGV4OjAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKX0ud2Vla2RheXtmb250LXNpemU6dmFyKC0tY2xyLWNhbGVuZGFyLXdlZWtkYXktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1mb250LXdlaWdodC1zZW1pYm9sZCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS5jYWxlbmRhci1i''@;'; put 'put ''dG57aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3BhZGRpbmc6MDttYXJnaW46MCFp''@;'; put 'put ''bXBvcnRhbnQ7Y29sb3I6aW5oZXJpdDtib3JkZXI6MDtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZTp2YXIoLS1jbHItY2FsZW5kYXItcGlja2VyLWJ0bi1mb250LXNp''@;'; put 'put ''emUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1jYWxlbmRhci1waWNrZXItYnRuLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0''@;'; put 'put ''aW9uLWxldHRlci1zcGFjaW5nKX0uY2FsZW5kYXItYnRuLmluLXJhbmdle2JhY2tncm91bmQ6dmFyKC0tY2xyLWNhbGVuZGFyLXJhbmdlLWNlbGwtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXJhZGl1czowfS5jYWxlbmRhci1idG46aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1jbHItY2FsZW5k''@;'; put 'put ''YXItYnRuLWhvdmVyLWZvY3VzLWNvbG9yKX0uY2FsZW5kYXItYnRuOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCkgc29saWQgMnB4O291dGxpbmUtb2Zmc2V0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSk7YmFja2dyb3VuZDp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXIpfS5jYWxlbmRhci1idG46YWN0aXZle2JhY2tncm91bmQ6dmFyKC0tY2xyLWNhbGVuZGFyLWJ0bi1hY3RpdmUtY29sb3ItYmcpfS5kYXktYnRue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTt3aWR0''@;'; put 'put ''aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTtwYWRkaW5nOjA7bWFyZ2luOjAhaW1wb3J0YW50O2JvcmRlcjowO2JvcmRlci1yYWRpdXM6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7YmFja2dyb3VuZDowIDA7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29u''@;'; put 'put ''ZGFyeS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpO3dpZHRoOjEwMCU7Y29sb3I6aW5oZXJpdH0uZGF5LWJ0bi5pbi1yYW5n''@;'; put 'put ''ZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxlbmRhci1yYW5nZS1jZWxsLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1yYWRpdXM6MH0uZGF5LWJ0bjpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxlbmRhci1idG4taG92ZXItZm9jdXMtY29sb3IpfS5kYXktYnRuOmZvY3Vze291dGxp''@;'; put 'put ''bmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCkgc29saWQgMnB4O291dGxpbmUtb2Zmc2V0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSk7YmFja2dyb3VuZDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXIpfS5kYXkt''@;'; put 'put ''YnRuOmFjdGl2ZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxlbmRhci1idG4tYWN0aXZlLWNvbG9yLWJnKX0uZGF5LWJ0bjpob3Zlcntjb2xvcjp2YXIoLS1jbHItY2FsZW5kYXItYnRuLWhvdmVyLWZvY3VzLWNvbG9yLXRleHQpfS5kYXktYnRuOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItY2Fs''@;'; put 'put ''ZW5kYXItYnRuLWFjdGl2ZS1jb2xvcil9LmRheS1idG4uaXMtdG9kYXl7Y29sb3I6dmFyKC0tY2xyLWNhbGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgc29saWQgdmFyKC0tY2xyLWNhbGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1i''@;'; put 'put ''b3JkZXItY29sb3IpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1jYWxlbmRhci10b2RheS1kYXRlLWNlbGwtZm9udC13ZWlnaHQpfS5kYXktYnRuLmlzLXNlbGVjdGVkLC5kYXktYnRuLmlzLXN0YXJ0LXJhbmdlLC5kYXktYnRuLmlzLWVuZC1yYW5nZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxl''@;'; put 'put ''bmRhci1hY3RpdmUtY2VsbC1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItY2FsZW5kYXItYWN0aXZlLWNlbGwtY29sb3IpfS5kYXktYnRuLmlzLXN0YXJ0LXJhbmdlOm5vdCguaXMtZW5kLXJhbmdlKXtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tcmln''@;'; put 'put ''aHQtcmFkaXVzOjB9LmRheS1idG4uaXMtZW5kLXJhbmdlOm5vdCguaXMtc3RhcnQtcmFuZ2Upe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LmRheS1idG4uaXMtc2VsZWN0ZWQ6Zm9jdXN7YmFja2dyb3VuZDp2YXIoLS1jbHItY2FsZW5kYXIt''@;'; put 'put ''YWN0aXZlLWZvY3VzLWNlbGwtYmFja2dyb3VuZC1jb2xvcil9LmRheS1idG4uaXMtZXhjbHVkZWR7ZGlzcGxheTpub25lfS5kYXktYnRuLmlzLWRpc2FibGVke2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpO3BvaW50ZXItZXZlbnRzOm5v''@;'; put 'put ''bmU7YmFja2dyb3VuZDowIDB9LmNhbGVuZGFyLXBpY2tlcnN7ZGlzcGxheTpmbGV4fS5zd2l0Y2hlcntjb2xvcjp2YXIoLS1jbHItY2FsZW5kYXItYnRuLWNvbG9yKX0uc3dpdGNoZXI6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLWNhbGVuZGFyLWJ0bi1ob3Zlci1mb2N1cy1jb2xvci10ZXh0KX0u''@;'; put 'put ''c3dpdGNoZXI6YWN0aXZle2NvbG9yOnZhcigtLWNsci1jYWxlbmRhci1idG4tYWN0aXZlLWNvbG9yKX0uc3dpdGNoZXIgY2RzLWljb24sLnN3aXRjaGVyIGNsci1pY29ue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCl9Lm1v''@;'; put 'put ''bnRocGlja2VyLXRyaWdnZXIsLnllYXJwaWNrZXItdHJpZ2dlcnt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzKTtjb2xvcjp2YXIoLS1jbHItY2FsZW5kYXItYnRuLXBpY2tlci10cmlnZ2VyLWNvbG9yKTt0ZXh0LWFsaWduOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZs''@;'; put 'put ''b3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Lm1vbnRocGlja2VyLXRyaWdnZXIueWVhci1yYW5nZSwueWVhcnBpY2tlci10cmlnZ2VyLnllYXItcmFuZ2V7d2lkdGg6dW5zZXQ7YWxpZ24tY29udGVudDpjZW50ZXI7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5t''@;'; put 'put ''b250aHBpY2tlciwueWVhcnBpY2tlcnttaW4taGVpZ2h0OmNhbGMoNip2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyKSl9Lm1vbnRocGlja2VyLC55ZWFycGlja2VyLC5kYXlwaWNrZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO3Jvdy1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01''@;'; put 'put ''KTtoZWlnaHQ6Y2FsYyg5KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApICsgMyp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpKTt3aWR0aDpjYWxjKDcqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkpfS55ZWFyc3tmbGV4LWRpcmVjdGlvbjpyb3d9Lm1vbnRoLC55ZWFye2hlaWdodDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTExKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02''@;'; put 'put ''KTttYXJnaW46MCFpbXBvcnRhbnQ7Y29sb3I6aW5oZXJpdDtib3JkZXI6MDtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMik7d2lkdGg6Y2FsYyguNSpjYWxjKCg3KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpKSArICgyKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykp''@;'; put 'put ''ICsgKDIqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSAtIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkpfS5tb250aDpob3ZlciwueWVhcjpob3Zlcntjb2xvcjp2YXIoLS1jbHItY2Fs''@;'; put 'put ''ZW5kYXItYnRuLWhvdmVyLWZvY3VzLWNvbG9yLXRleHQpfS5tb250aDphY3RpdmUsLnllYXI6YWN0aXZle2NvbG9yOnZhcigtLWNsci1jYWxlbmRhci1idG4tYWN0aXZlLWNvbG9yKX0ubW9udGguaXMtdG9kYXksLnllYXIuaXMtdG9kYXl7Y29sb3I6dmFyKC0tY2xyLWNhbGVuZGFyLXRvZGF5''@;'; put 'put ''LWRhdGUtY2VsbC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgc29saWQgdmFyKC0tY2xyLWNhbGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1ib3JkZXItY29sb3IpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1jYWxlbmRhci10b2RheS1kYXRlLWNlbGwtZm9udC13ZWlnaHQp''@;'; put 'put ''fS5tb250aC5pcy1zZWxlY3RlZCwubW9udGguaXMtc3RhcnQtcmFuZ2UsLm1vbnRoLmlzLWVuZC1yYW5nZSwueWVhci5pcy1zZWxlY3RlZCwueWVhci5pcy1zdGFydC1yYW5nZSwueWVhci5pcy1lbmQtcmFuZ2V7YmFja2dyb3VuZDp2YXIoLS1jbHItY2FsZW5kYXItYWN0aXZlLWNlbGwtYmFj''@;'; put 'put ''a2dyb3VuZC1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWNhbGVuZGFyLWFjdGl2ZS1jZWxsLWNvbG9yKX0ubW9udGguaXMtc3RhcnQtcmFuZ2U6bm90KC5pcy1lbmQtcmFuZ2UpLC55ZWFyLmlzLXN0YXJ0LXJhbmdlOm5vdCguaXMtZW5kLXJhbmdlKXtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czow''@;'; put 'put ''O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9Lm1vbnRoLmlzLWVuZC1yYW5nZTpub3QoLmlzLXN0YXJ0LXJhbmdlKSwueWVhci5pcy1lbmQtcmFuZ2U6bm90KC5pcy1zdGFydC1yYW5nZSl7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0u''@;'; put 'put ''bW9udGguaXMtc2VsZWN0ZWQ6Zm9jdXMsLnllYXIuaXMtc2VsZWN0ZWQ6Zm9jdXN7YmFja2dyb3VuZDp2YXIoLS1jbHItY2FsZW5kYXItYWN0aXZlLWZvY3VzLWNlbGwtYmFja2dyb3VuZC1jb2xvcil9Lm1vbnRoLmlzLWRpc2FibGVkLC55ZWFyLmlzLWRpc2FibGVke2NvbG9yOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1vbnRoLmlzLWRpc2FibGVkOmhvdmVyLC55ZWFyLmlzLWRpc2FibGVkOmhvdmVye2JhY2tncm91bmQ6MCAwfS5tb250aHMsLnllYXJze3Jvdy1nYXA6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS0zKTtmbGV4LXdyYXA6d3JhcDtkaXNwbGF5OmZsZXh9Lm1vbnRoe3RleHQtYWxpZ246Y2VudGVyO2hlaWdodDpjYWxjKDUqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSk7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS55''@;'; put 'put ''ZWFye3RleHQtYWxpZ246Y2VudGVyfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLWNvbWJvYm94LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItY29tYm9ib3gtaW5wdXQtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0''@;'; put 'put ''LWNvbnRhaW5lci1iYWNrZ3JvdW5kLXRpbnQpOy0tY2xyLWNvbWJvYm94LXBpbGwtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQpOy0tY2xyLWNvbWJvYm94LXBpbGwtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtYm9yZGVyLWNvbG9yKTstLWNsci1jb21ib2JveC1waWxsLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1jb21ib2JveC1maWx0ZXItaGlnaGxpZ2h0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1o''@;'; put 'put ''aWdobGlnaHQpOy0tY2xyLWNvbWJvYm94LW1pbi13aWR0aDpjYWxjKDE2OCAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2xyLWNvbWJvYm94LW11bHRpLW1pbi13aWR0aDpjYWxjKDM2MCAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2xyLWNvbWJv''@;'; put 'put ''Ym94LW1pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTstLWNsci1jb21ib2JveC1mb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpOy0tY2xyLWNvbWJvYm94LWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dy''@;'; put 'put ''YXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpOy0tY2xyLWNvbWJvYm94LXRleHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1jb21ib2JveC1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0t''@;'; put 'put ''Y2xyLWNvbWJvYm94LXBhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpOy0tY2xyLWNvbWJvYm94LXRyaWdnZXItcGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7LS1jbHItY29tYm9ib3gtdHJpZ2dlci1wYWRkaW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtNSk7LS1jbHItY29tYm9ib3gtdHJpZ2dlci1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTstLWNsci1jb21ib2JveC10cmlnZ2VyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItY29tYm9ib3gtaG92ZXItYmFj''@;'; put 'put ''a2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXIpOy0tY2xyLWNvbWJvYm94LWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmUpOy0tY2xy''@;'; put 'put ''LWNvbWJvYm94LXBpbGwtcGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7LS1jbHItY29tYm9ib3gtcGlsbC1tYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpIDAgMDstLWNsci1jb21ib2JveC1waWxsLWhlaWdodDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLWNvbWJvYm94LXBpbGwtcmVtb3ZlLWljb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItY29tYm9ib3gtY2FyZXQtaWNvbi1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHIt''@;'; put 'put ''Y29tYm9ib3gtcGlsbC1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApfS5jbHItY29tYm9ib3gtZm9ybS1jb250cm9se2FsaWduLWl0ZW1zOnN0cmV0Y2h9LmNsci1jb21ib2JveC1mb3JtLWNvbnRyb2wgLmNsci1lcnJvciAuY2xyLXZhbGlk''@;'; put 'put ''YXRlLWljb257bWFyZ2luLWxlZnQ6MH0uY2xyLWZvY3VzLWluZGljYXRvcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1mb2N1c2VkLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKTt3aWR0aDowO3RyYW5zaXRpb246d2lkdGggLjJzIGVhc2U7cG9zaXRp''@;'; put 'put ''b246YWJzb2x1dGU7Ym90dG9tOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7bGVmdDowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tY2xyLWNvbWJvYm94LWJvcmRlci1yYWRpdXMpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci1jb21ib2Jv''@;'; put 'put ''eC1ib3JkZXItcmFkaXVzKX0uY2xyLWZvY3Vze3dpZHRoOjEwMCV9LmNsci1lcnJvciAuY2xyLWZvY3VzLWluZGljYXRvcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKX0uY2xyLWNvbWJvYm94LXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7cGFkZGlu''@;'; put 'put ''ZzowIGNhbGModmFyKC0tY2xyLWNvbWJvYm94LXRyaWdnZXItZ2FwKSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgKyB2YXIoLS1jbHItY29tYm9ib3gtdHJpZ2dlci1wYWRkaW5nLXJpZ2h0KSkgMCB2YXIoLS1jbHItY29tYm9ib3gtdHJpZ2dlci1wYWRkaW5nLWxlZnQpO21pbi1oZWln''@;'; put 'put ''aHQ6dmFyKC0tY2xyLWNvbWJvYm94LW1pbi1oZWlnaHQpO21pbi13aWR0aDp2YXIoLS1jbHItY29tYm9ib3gtbWluLXdpZHRoKTtmb250LXNpemU6dmFyKC0tY2xyLWNvbWJvYm94LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWNvbWJvYm94LWZvbnQtd2VpZ2h0KTtsaW5lLWhl''@;'; put 'put ''aWdodDpjYWxjKDIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1jb2xvcik7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1mb3Jtcy1ib3JkZXItY29s''@;'; put 'put ''b3IpO2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWNvbWJvYm94LWlucHV0LWJhY2tncm91bmQtY29sb3IpO2JvcmRlci13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApO2JvcmRlci1z''@;'; put 'put ''dHlsZTpzb2xpZDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWNvbWJvYm94LWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItY29tYm9ib3gtYm9yZGVyLXJhZGl1cyl9LmNsci1jb21ib2JveC13cmFwcGVyIC5jbHItaW5wdXR7cGFkZGluZzowO21heC1oZWlnaHQ6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLWNvbWJvYm94LXdyYXBwZXIgLmNsci1pbnB1dDpub3QoOmRpc2FibGVkKXtjb2xvcjp2YXIoLS1jbHItY29tYm9ib3gtdGV4dC1jb2xvcil9LmNsci1jb21ib2JveC13cmFwcGVyLm11bHRpe21pbi13aWR0aDptaW4odmFyKC0tY2xyLWNvbWJvYm94''@;'; put 'put ''LW11bHRpLW1pbi13aWR0aCksMTAwJSk7cGFkZGluZy1ib3R0b206Y2FsYygzKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0uY2xyLWNvbWJvYm94LXdyYXBwZXIgLmNsci1pbnB1dC5jbHItY29tYm9ib3gtaW5wdXQ6Zm9jdXN7YmFja2dyb3VuZDowIDB9LmNsci1jb21ib2JveC13''@;'; put 'put ''cmFwcGVyLmludmFsaWR7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcil9LmNsci1jb21ib2JveC13cmFwcGVyIC5jbHItY29tYm9ib3gtaW5wdXR7YmFja2dyb3VuZDowIDA7Ym9yZGVyLWJvdHRvbTpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0u''@;'; put 'put ''Y2xyLWNvbWJvYm94LXdyYXBwZXIgLmNsci1jb21ib2JveC1yZW1vdmUtYnRue2JhY2tncm91bmQ6MCAwO2JvcmRlcjowO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtwYWRkaW5nOjA7Y29sb3I6dmFyKC0tY2xyLWNvbWJvYm94LXBpbGwtcmVtb3ZlLWljb24tY29sb3IpfS5jbHItY29t''@;'; put 'put ''Ym9ib3gtd3JhcHBlciAubGFiZWwtY29tYm9ib3gtcGlsbHtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGV0dGVyLXNwYWNpbmcpO2hlaWdodDp2YXIoLS1jbHItY29tYm9ib3gtcGlsbC1oZWlnaHQpO21hcmdpbjp2YXIoLS1j''@;'; put 'put ''bHItY29tYm9ib3gtcGlsbC1tYXJnaW4pO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWNvbWJvYm94LXBpbGwtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSk7Ym9yZGVyLXN0eWxlOnNvbGlkO2FsaWduLWl0ZW1zOmNlbnRlcjtib3Jk''@;'; put 'put ''ZXItcmFkaXVzOnZhcigtLWNsci1jb21ib2JveC1waWxsLWJvcmRlci1yYWRpdXMpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItY29tYm9ib3gtcGlsbC1ib3JkZXItY29sb3IpO3BhZGRpbmc6dmFyKC0tY2xyLWNvbWJvYm94LXBpbGwtcGFkZGluZyl9LmNsci1jb21ib2JveC13cmFwcGVyIC5s''@;'; put 'put ''YWJlbC1jb21ib2JveC1waWxsIC5jbHItY29tYm9ib3gtcGlsbC1jb250ZW50e2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7Y29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWNvbWJvYm94LXBpbGwtZm9udC1jb2xvcik7cGFkZGluZzowfS5jbHItY29tYm9ib3gtd3JhcHBlciAubGFiZWwtY29tYm9ib3gtcGlsbCBjZHMtaWNvbiwuY2xyLWNvbWJvYm94LXdyYXBwZXIgLmxhYmVsLWNvbWJvYm94LXBpbGwgY2xyLWljb257bWFyZ2luLXRvcDpj''@;'; put 'put ''YWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpfS5jbHItY29tYm9ib3gtd3JhcHBlciAubGFiZWwtY29tYm9ib3gtcGlsbCBjZHMtaWNvbltzaGFwZT13aW5kb3ctY2xvc2VdLC5jbHItY29tYm9ib3gtd3JhcHBlciAubGFiZWwtY29tYm9ib3gtcGlsbCBjbHItaWNvbltzaGFwZT13''@;'; put 'put ''aW5kb3ctY2xvc2Vde2NvbG9yOnZhcigtLWNsci1jb21ib2JveC1waWxsLWZvbnQtY29sb3IpfS5jbHItY29tYm9ib3gtd3JhcHBlciAuY2xyLWNvbWJvYm94LWlucHV0LXdyYXBwZXJ7Ym9yZGVyOjA7YmFja2dyb3VuZDowIDB9LmNsci1jb21ib2JveC13cmFwcGVyOm5vdCguZGlzYWJsZWQp''@;'; put 'put ''OmhvdmVyLC5jbHItY29tYm9ib3gtd3JhcHBlcjpmb2N1cy13aXRoaW57YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItY29tYm9ib3gtaG92ZXItYmFja2dyb3VuZC1jb2xvcil9LmNsci1jb21ib2JveC10cmlnZ2Vye3BhZGRpbmctbGVmdDp2YXIoLS1jbHItY29tYm9ib3gtdHJpZ2dlci1w''@;'; put 'put ''YWRkaW5nLWxlZnQpO3BhZGRpbmctcmlnaHQ6dmFyKC0tY2xyLWNvbWJvYm94LXRyaWdnZXItcGFkZGluZy1yaWdodCk7bWFyZ2luOmF1dG87cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7cmlnaHQ6MDtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MDtjb2xvcjpjdXJyZW50Q29sb3I7''@;'; put 'put ''Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowfS5jbHItY29tYm9ib3gtdHJpZ2dlcjpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKX0uY2xyLWNvbWJvYm94LXRyaWdnZXI6ZGlzYWJsZWQgY2RzLWljb25bc2hhcGU9YW5nbGVd''@;'; put 'put ''LC5jbHItY29tYm9ib3gtdHJpZ2dlcjpkaXNhYmxlZCBjbHItaWNvbltzaGFwZT1hbmdsZV17Y29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCl9LmNsci1jb21ib2JveC10cmlnZ2VyIGNkcy1pY29uW3NoYXBlPWFuZ2xlXSwuY2xyLWNvbWJv''@;'; put 'put ''Ym94LXRyaWdnZXIgY2xyLWljb25bc2hhcGU9YW5nbGVde2NvbG9yOnZhcigtLWNsci1jb21ib2JveC10cmlnZ2VyLWZvbnQtY29sb3IpO2hlaWdodDp2YXIoLS1jbHItY29tYm9ib3gtY2FyZXQtaWNvbi1zaXplKTt3aWR0aDp2YXIoLS1jbHItY29tYm9ib3gtY2FyZXQtaWNvbi1zaXplKTtt''@;'; put 'put ''aW4taGVpZ2h0OnZhcigtLWNsci1jb21ib2JveC1jYXJldC1pY29uLXNpemUpO21pbi13aWR0aDp2YXIoLS1jbHItY29tYm9ib3gtY2FyZXQtaWNvbi1zaXplKX0uY2xyLWNvbWJvYm94LW9wdGlvbnN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwb3NpdGlvbjphYnNvbHV0''@;'; put 'put ''ZTt0b3A6MTAwJTtsZWZ0OjA7bWluLXdpZHRoOmNhbGMoMTIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttYXgtd2lkdGg6Y2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWJnLWNvbG9yKTti''@;'; put 'put ''b3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFk''@;'; put 'put ''aXVzLTEwMCk7Ym94LXNoYWRvdzp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LXNoYWRvdy0yMDApO21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgMDt2aXNpYmlsaXR5OmhpZGRlbjt6LWluZGV4OjEwNTA7cG9zaXRp''@;'; put 'put ''b246c3RhdGljO21heC1oZWlnaHQ6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO292ZXJmbG93LXk6YXV0bzt2aXNpYmlsaXR5OnZpc2libGV9LmNsci1jb21ib2JveC1vcHRpb25zIC5jbHItY29tYm9ib3gtb3B0aW9ucy1sb2FkaW5ne3BhZGRpbmc6Y2FsYygzKigx''@;'; put 'put ''cmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpfS5jbHItY29tYm9ib3gtb3B0aW9ucyAuY2xyLWNvbWJvYm94LW9wdGlvbnMtbG9hZGluZyAuY2xyLWNvbWJvYm94LW9wdGlvbnMtbG9hZGluZy10ZXh0e3BhZGRpbmctbGVmdDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTQpfS5jbHItY29tYm9ib3gtb3B0aW9ucyAuY2xyLWNvbWJvYm94LW9wdGlvbnMtZW1wdHktdGV4dHtwYWRkaW5nLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0uY2xyLWNvbWJvYm94LW9wdGlvbntmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxl''@;'; put 'put ''dHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1iZy1jb2xvcik7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTMpO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6YXV0bzttYXJnaW46MDt3aWR0aDoxMDAlO3RleHQtdHJhbnNmb3JtOm5vbmV9LmNsci1jb21ib2JveC1vcHRpb24uYWN0aXZle2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWJnLWNvbG9yKX0uY2xyLWNvbWJvYm94LW9wdGlvbjpob3Zlcntjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1ob3Zlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1ob3Zlci1iZy1j''@;'; put 'put ''b2xvcik7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmNsci1jb21ib2JveC1vcHRpb246aG92ZXIuYWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtaG92ZXItYmctY29sb3IpfS5jbHItY29tYm9ib3gtb3B0aW9uOmFjdGl2ZXtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItZHJvcGRvd24taXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tYWN0aXZlLWJnLWNvbG9yKX0uY2xyLWNvbWJvYm94LW9wdGlvbjphY3RpdmUuYWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0''@;'; put 'put ''ZW0tc2VsZWN0ZWQtYWN0aXZlLWJnLWNvbG9yKX0uY2xyLWNvbWJvYm94LW9wdGlvbjpmb2N1c3t6LWluZGV4OmluaGVyaXR9LmNsci1jb21ib2JveC1vcHRpb24uZGlzYWJsZWQsLmNsci1jb21ib2JveC1vcHRpb246ZGlzYWJsZWR7cG9pbnRlci1ldmVudHM6bm9uZTtjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItZHJvcGRvd24taXRlbS1kaXNhYmxlZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1kaXNhYmxlZC1iZy1jb2xvcik7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LmNsci1jb21ib2JveC1vcHRpb24uZGlzYWJsZWQ6''@;'; put 'put ''aG92ZXIsLmNsci1jb21ib2JveC1vcHRpb246ZGlzYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZDowIDB9LmNsci1jb21ib2JveC1vcHRpb24uZGlzYWJsZWQ6YWN0aXZlLC5jbHItY29tYm9ib3gtb3B0aW9uOmRpc2FibGVkOmFjdGl2ZXtiYWNrZ3JvdW5kOjAgMDtib3gtc2hhZG93Om5vbmV9LmNs''@;'; put 'put ''ci1jb21ib2JveC1vcHRpb24uY2xyLWZvY3Vze2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWNvbWJvYm94LWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yKX0uY2xyLWNvbWJvYm94LW9wdGlvbnMgLmNsci1jb21ib2JveC1vcHRpb257cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''Nyl9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NzZweCl7LmNsci1jb21ib2JveC1vcHRpb25zIC5jbHItY29tYm9ib3gtb3B0aW9ue3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfX0uY2xyLWNvbWJvYm94LWRpc2FibGVk''@;'; put 'put ''e2NvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0LWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci1jb21ib2JveC1kaXNhYmxlZCAuY2xyLWNvbWJvYm94LWlucHV0LC5jbHItY29tYm9ib3gtZGlzYWJsZWQgLmNsci1jb21ib2JveC1yZW1vdmUtYnRuLC5jbHItY29tYm9i''@;'; put 'put ''b3gtZGlzYWJsZWQgLmNsci1jb21ib2JveC10cmlnZ2Vye2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLWZpbHRlci1oaWdobGlnaHQgYntmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpO2NvbG9yOnZhcigtLWNsci1jb21ib2JveC1m''@;'; put 'put ''aWx0ZXItaGlnaGxpZ2h0KX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1zdGFjay12aWV3LWJvcmRlci13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApOy0tY2xyLXN0YWNrLXZpZXctYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRl''@;'; put 'put ''ci1yYWRpdXMtMTAwKTstLWNsci1zdGFjay12aWV3LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItc3RhY2stYmxvY2stY2hhbmdlZC1ib3JkZXItdG9wLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWJvcmRlci1jb2xvcik7LS1jbHIt''@;'; put 'put ''c3RhY2stdmlldy10aXRsZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLXN0YWNrLXZpZXctcm93LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItc3RhY2stdmlldy1yb3ctYmctY29sb3I6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCk7LS1jbHItc3RhY2stdmlldy1leHBhbmRhYmxlLXJvdy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWJnLWNvbG9yOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZCk7LS1jbHItc3RhY2stdmlldy1leHBhbmRhYmxlLXJvdy1ob3Zlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWJnLWhvdmVy''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcik7LS1jbHItc3RhY2stdmlldy1leHBhbmRhYmxlLXJvdy1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLXN0YWNrLXZpZXctZXhwYW5k''@;'; put 'put ''YWJsZS1yb3ctYmctYWN0aXZlOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmUpOy0tY2xyLXN0YWNrLXZpZXctZXhwYW5kZWQtcm93LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3Itc2VsZWN0ZWQpOy0tY2xy''@;'; put 'put ''LXN0YWNrLXZpZXctZXhwYW5kZWQtcm93LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZCk7LS1jbHItc3RhY2stdmlldy1leHBhbmRlZC1ob3Zlci1yb3ctYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFj''@;'; put 'put ''dGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci1zdGFjay12aWV3LWV4cGFuZGVkLWFjdGl2ZS1yb3ctYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZSk7LS1jbHItc3RhY2stdmlldy1yb3ctZm9u''@;'; put 'put ''dC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpOy0tY2xyLXN0YWNrLXZpZXctcm93LWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7LS1jbHItc3RhY2stdmlldy1yb3ctbGluZS1o''@;'; put 'put ''ZWlnaHQ6Y2FsYygyMCAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2xyLXN0YWNrLXZpZXctcm93LWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9j''@;'; put 'put ''ay1ib3JkZXItYm90dG9tOnZhcigtLWNsci1zdGFjay12aWV3LWJvcmRlci1jb2xvcik7LS1jbHItc3RhY2stdmlldy1zdGFjay1jaGlsZHJlbi1zdGFjay1ibG9jay1ib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWJvcmRlci1jb2xvcik7LS1jbHItc3RhY2stdmll''@;'; put 'put ''dy1zdGFjay1jaGlsZHJlbi1zdGFjay1ibG9jay1sYWJlbC1hbmQtY29udGVudC1iZy1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1iZy1jb2xvcik7LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1jYXJldC1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1leHBhbmRhYmxlLXJvdy1j''@;'; put 'put ''b2xvcik7LS1jbHItc3RhY2stdmlldy1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1yb3ctY29sb3IpOy0tY2xyLXN0YWNrLXZpZXctYmctY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctcm93LWJnLWNvbG9yKTstLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWxhYmVsLWZvbnQtc2l6''@;'; put 'put ''ZTp2YXIoLS1jbHItc3RhY2stdmlldy1yb3ctZm9udC1zaXplKTstLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWxhYmVsLWZvbnQtd2VpZ2h0OnZhcigtLWNsci1zdGFjay12aWV3LXJvdy1mb250LXdlaWdodCk7LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1sYWJlbC1saW5lLWhl''@;'; put 'put ''aWdodDp2YXIoLS1jbHItc3RhY2stdmlldy1yb3ctbGluZS1oZWlnaHQpOy0tY2xyLXN0YWNrLXZpZXctc3RhY2stYmxvY2stbGFiZWwtbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLXN0YWNrLXZpZXctcm93LWxldHRlci1zcGFjaW5nKTstLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4''@;'; put 'put ''cGFuZGVkLWJnLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGVkLXJvdy1iZy1jb2xvcik7LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1leHBhbmRhYmxlLWhvdmVyOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWhvdmVyKTstLWNsci1zdGFjay12aWV3''@;'; put 'put ''LXN0YWNrLWJsb2NrLWV4cGFuZGVkLXRleHQtY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctZXhwYW5kZWQtcm93LWNvbG9yKX0uc3RhY2staGVhZGVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LWVuZH0uc3RhY2staGVhZGVyIC5zdGFjay10aXRsZXtkaXNwbGF5OmJsb2NrO2Zs''@;'; put 'put ''ZXg6MSAxIGF1dG87bWFyZ2luOjA7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDA7Y29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctdGl0bGUtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWln''@;'; put 'put ''aHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2Vj''@;'; put 'put ''dGlvbi1sZXR0ZXItc3BhY2luZyl9LnN0YWNrLWhlYWRlciAuc3RhY2stYWN0aW9uc3tkaXNwbGF5OmJsb2NrO2ZsZXg6MCAwIGF1dG99LnN0YWNrLWhlYWRlciAuc3RhY2stYWN0aW9ucyAuc3RhY2stYWN0aW9ue21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKX0uc3RhY2st''@;'; put 'put ''dmlld3tvdmVyZmxvdy15OmF1dG87d29yZC13cmFwOmJyZWFrLXdvcmQ7bWFyZ2luLXRvcDowO2JvcmRlcjp2YXIoLS1jbHItc3RhY2stdmlldy1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci1zdGFjay12aWV3LWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItc3Rh''@;'; put 'put ''Y2stdmlldy1ib3JkZXItcmFkaXVzKX0uc3RhY2stdmlldyBkZCwuc3RhY2stdmlldyBkdHttYXJnaW4taW5saW5lLXN0YXJ0OjA7bWFyZ2luLWxlZnQ6MH0uc3RhY2stdmlldyAuc3RhY2stYmxvY2t7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgd3JhcDtvdmVyZmxvdy15OmhpZGRlbjti''@;'; put 'put ''b3JkZXItYm90dG9tLXdpZHRoOnZhcigtLWNsci1zdGFjay12aWV3LWJvcmRlci13aWR0aCk7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZDtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWJvcmRlci1ib3R0b20pfS5zdGFjay12aWV3Pi5zdGFj''@;'; put 'put ''ay1ibG9jazpsYXN0LWNoaWxkLC5zdGFjay12aWV3PjpsYXN0LWNoaWxkIC5zdGFjay1ibG9jazpsYXN0LW9mLXR5cGV7Ym9yZGVyLWJvdHRvbTpub25lfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1jaGFuZ2VkOmJlZm9yZXtjb250ZW50OiIgIjtwb3NpdGlvbjphYnNvbHV0ZTtoZWlnaHQ6''@;'; put 'put ''MDt3aWR0aDowO2JvcmRlci10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSBzb2xpZCB2YXIoLS1jbHItc3RhY2stYmxvY2stY2hhbmdlZC1ib3JkZXItdG9wLWNvbG9yKTtib3JkZXItcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSBzb2xpZCB0cmFuc3BhcmVudH0uc3RhY2st''@;'; put 'put ''dmlldyAuc3RhY2stYmxvY2stY2FyZXR7YWxpZ24tc2VsZjpjZW50ZXJ9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWxhYmVse3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS0xMSk7Y29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctYmctY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1sYWJlbC1mb250LXNpemUpO2Zv''@;'; put 'put ''bnQtd2VpZ2h0OnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWxhYmVsLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1sYWJlbC1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLXN0YWNrLXZpZXctc3Rh''@;'; put 'put ''Y2stYmxvY2stbGFiZWwtbGV0dGVyLXNwYWNpbmcpO2ZsZXg6MSAxIGF1dG87ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stbGFiZWw6Zm9jdXN7b3V0bGluZS1jb2xvcjpIaWdobGlnaHQ7b3V0bGluZS1jb2xvcjotd2Via2l0LWZvY3Vz''@;'; put 'put ''LXJpbmctY29sb3I7b3V0bGluZS1zdHlsZTphdXRvO291dGxpbmUtd2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKTtvdXRsaW5lLW9mZnNldDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpfS5zdGFjay12aWV3IC5zdGFjay12aWV3LWtleXtmbGV4OjAgMSA0MCU7bWF4''@;'; put 'put ''LXdpZHRoOjQwJTttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stY2FyZXR7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4taGVpZ2h0OnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1jYXJldC1jb2xvcik7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LnN0YWNrLXZpZXcgLnN0YWNr''@;'; put 'put ''LWJsb2NrLWNvbnRlbnR7ZmxleDoxIDEgYXV0bzt3aWR0aDo2MCU7bWFyZ2luLWJvdHRvbTowfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1jb250ZW50PjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWNvbnRlbnQ+Omxhc3QtY2hpbGR7bWFyZ2lu''@;'; put 'put ''LWJvdHRvbTowfS5zdGFjay12aWV3IC5zdGFjay1jaGlsZHJlbntmbGV4OjAgMCBhdXRvO3dpZHRoOjEwMCV9LnN0YWNrLXZpZXcgLnN0YWNrLWNoaWxkcmVuIC5zdGFjay1ibG9ja3tib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWNoaWxkcmVuLXN0YWNr''@;'; put 'put ''LWJsb2NrLWJvcmRlci1ib3R0b20tY29sb3IpfS5zdGFjay12aWV3IC5zdGFjay1jaGlsZHJlbj4uc3RhY2stYmxvY2s6bGFzdC1jaGlsZCwuc3RhY2stdmlldyAuc3RhY2stY2hpbGRyZW4+Omxhc3QtY2hpbGQgLnN0YWNrLWJsb2NrOmxhc3Qtb2YtdHlwZXtib3JkZXItYm90dG9tOm5vbmV9''@;'; put 'put ''LnN0YWNrLXZpZXcgLnN0YWNrLWNoaWxkcmVuIC5zdGFjay1ibG9jay1sYWJlbCwuc3RhY2stdmlldyAuc3RhY2stY2hpbGRyZW4gLnN0YWNrLWJsb2NrLWNvbnRlbnR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1jaGlsZHJlbi1zdGFjay1ibG9jay1sYWJl''@;'; put 'put ''bC1hbmQtY29udGVudC1iZy1jb2xvcil9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGU+LnN0YWNrLWJsb2NrLWxhYmVse3BhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2NvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWNvbG9y''@;'; put 'put ''KTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWJnLWNvbG9yKTtjdXJzb3I6cG9pbnRlcn0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZT4uc3RhY2stYmxvY2stbGFiZWw6YmVmb3Jle2Rpc3BsYXk6aW5saW5lLWJsb2NrO2Nv''@;'; put 'put ''bnRlbnQ6IiI7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7YmFja2dyb3VuZC1yZXBlYXQ6''@;'; put 'put ''bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb250YWluO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2''@;'; put 'put ''ZyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDEyJTIwMTIlMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDc3R5bGUlM0UuY2xzLTElN0JmaWxsJTNBdmFyKC0tY2xyLWFjY29yZGlvbi10ZXh0LWNvbG9yKSUzQiU3RCUzQyUyRnN0''@;'; put 'put ''eWxlJTNFJTBBJTIwJTIwJTIwJTIwJTNDJTJGZGVmcyUzRSUwQSUyMCUyMCUyMCUyMCUzQ3RpdGxlJTNFQ2FyZXQlM0MlMkZ0aXRsZSUzRSUwQSUyMCUyMCUyMCUyMCUzQ3BhdGglMjBjbGFzcyUzRCUyMmNscy0xJTIyJTIwZCUzRCUyMk02JTJDOUwxLjIlMkM0LjJhMC42OCUyQzAuNjglMkMw''@;'; put 'put ''JTJDMCUyQzElMkMxLTFMNiUyQzcuMDglMkM5Ljg0JTJDMy4yNGEwLjY4JTJDMC42OCUyQzAlMkMxJTJDMSUyQzElMkMxWiUyMiUyRiUzRSUwQSUzQyUyRnN2ZyUzRSUwQSIpO3RyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0u''@;'; put 'put ''c3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZT4uc3RhY2stYmxvY2stbGFiZWwsLnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGU+LnN0YWNrLWJsb2NrLWNvbnRlbnR7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4ycyBlYXNlLWluLW91dCxjb2xvciAuMnMg''@;'; put 'put ''ZWFzZS1pbi1vdXR9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGU6bm90KC5zdGFjay1ibG9jay1leHBhbmRlZCk+LnN0YWNrLWJsb2NrLWxhYmVsOmhvdmVye2NvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGFibGUtaG92ZXIpO2JhY2tncm91''@;'; put 'put ''bmQtY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctYmctaG92ZXIpfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlOm5vdCguc3RhY2stYmxvY2stZXhwYW5kZWQpPi5zdGFjay1ibG9jay1sYWJlbDpob3ZlciAuc3RhY2stYmxvY2stY2FyZXR7Zmls''@;'; put 'put ''bDp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1leHBhbmRhYmxlLWhvdmVyKX0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZTpub3QoLnN0YWNrLWJsb2NrLWV4cGFuZGVkKT4uc3RhY2stYmxvY2stbGFiZWw6aG92ZXI6YWN0aXZle2NvbG9yOnZhcigtLWNsci1z''@;'; put 'put ''dGFjay12aWV3LWV4cGFuZGFibGUtcm93LWFjdGl2ZSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1leHBhbmRhYmxlLXJvdy1iZy1hY3RpdmUpfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlOm5vdCguc3RhY2stYmxvY2stZXhwYW5kZWQpPi5zdGFj''@;'; put 'put ''ay1ibG9jay1sYWJlbDpob3ZlcjphY3RpdmUgLnN0YWNrLWJsb2NrLWNhcmV0e2ZpbGw6dmFyKC0tY2xyLXN0YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctYWN0aXZlKX0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZS5zdGFjay1ibG9jay1leHBhbmRlZD4uc3RhY2stYmxvY2st''@;'; put 'put ''bGFiZWx7Ym9yZGVyLWJvdHRvbS13aWR0aDp2YXIoLS1jbHItc3RhY2stdmlldy1ib3JkZXItd2lkdGgpO2JvcmRlci1ib3R0b20tc3R5bGU6c29saWQ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1ib3JkZXItYm90dG9tKTtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1leHBhbmRlZC10ZXh0LWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGVkLWJnLWNvbG9yKX0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZS5zdGFjay1ibG9j''@;'; put 'put ''ay1leHBhbmRlZD4uc3RhY2stYmxvY2stbGFiZWw6YmVmb3Jle3RyYW5zZm9ybTpyb3RhdGUoMCl9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGUuc3RhY2stYmxvY2stZXhwYW5kZWQ+LnN0YWNrLWJsb2NrLWxhYmVsIC5zdGFjay1ibG9jay1jYXJldHtmaWxsOnZhcigtLWNs''@;'; put 'put ''ci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGVkLXRleHQtY29sb3IpfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1sYWJlbDpob3Zlcntjb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9j''@;'; put 'put ''ay1leHBhbmRhYmxlLWhvdmVyKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGVkLWhvdmVyLXJvdy1iZy1jb2xvcil9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGUuc3RhY2stYmxvY2stZXhwYW5kZWQ+LnN0YWNrLWJsb2NrLWxhYmVsOmhv''@;'; put 'put ''dmVyIC5zdGFjay1ibG9jay1jYXJldHtmaWxsOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGFibGUtaG92ZXIpfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1sYWJlbDpob3ZlcjphY3Rp''@;'; put 'put ''dmV7Y29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctYWN0aXZlKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGVkLWFjdGl2ZS1yb3ctYmctY29sb3IpfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlLnN0YWNrLWJs''@;'; put 'put ''b2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1sYWJlbDpob3ZlcjphY3RpdmUgLnN0YWNrLWJsb2NrLWNhcmV0e2ZpbGw6dmFyKC0tY2xyLXN0YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctYWN0aXZlKX0ubW9kYWwgLnN0YWNrLXZpZXd7bWFyZ2luLWJvdHRvbTowfS5zdGFjay12aWV3IGNsci1z''@;'; put 'put ''dGFjay1ibG9jay5zdGFjay1ibG9jay1leHBhbmRhYmxlIC5zdGFjay1ibG9jay1sYWJlbDpiZWZvcmV7Y29udGVudDpub25lfS5zdGFjay12aWV3IC5zdGFjay1jaGlsZHJlbiBjbHItc3RhY2stYmxvY2sgLnN0YWNrLWJsb2NrLWxhYmVsIC5zdGFjay12aWV3LWtleSwuc3RhY2stdmlldyAu''@;'; put 'put ''c3RhY2stY2hpbGRyZW4gLnN0YWNrLWJsb2NrLWxhYmVsIC5zdGFjay12aWV3LWtleXtwYWRkaW5nLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0uc3RhY2stdmlldyAuc3RhY2stY2hpbGRyZW4gY2xyLXN0YWNrLWJsb2NrIC5zdGFjay1ibG9jay1sYWJlbDpiZWZvcmUsLnN0YWNr''@;'; put 'put ''LXZpZXcgLnN0YWNrLWNoaWxkcmVuIC5zdGFjay1ibG9jay1sYWJlbDpiZWZvcmV7ZGlzcGxheTpub25lfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLXRyZWUtYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci10cmVlLWxpbmstaG92''@;'; put 'put ''ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhvdmVyKTstLWNsci10cmVlLWxpbmstc2VsZWN0aW9uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZCk7LS1jbHItdHJlZS1saW5r''@;'; put 'put ''LXRleHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItdHJlZS1ub2RlLWNhcmV0LWxpbmstaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1ob3Zlcik7LS1jbHItdHJlZS1ub2RlLWNhcmV0LWxp''@;'; put 'put ''bmstYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci10cmVlLW5vZGUtY2FyZXQtbGluay1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKTstLWNsci10''@;'; put 'put ''cmVlLW5vZGUtY2FyZXQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItdHJlZS1ub2RlLWNhcmV0LWhvdmVyLWNvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY2FyZXQtbGluay1ob3Zlci1jb2xvcik7LS1jbHItdHJlZS1ub2RlLWNhcmV0LWFj''@;'; put 'put ''dGl2ZS1jb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNhcmV0LWxpbmstYWN0aXZlLWNvbG9yKTstLWNsci10cmVlLW5vZGUtY2FyZXQtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jYXJldC1saW5rLWRpc2FibGVkLWNvbG9yKTstLWNsci10cmVlLW5vZGUtY29udGVudC10''@;'; put 'put ''ZXh0LW9ubHktY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci10cmVlLW5vZGUtY29udGVudC1jb2xvcjp2YXIoLS1jbHItdHJlZS1saW5rLXRleHQtY29sb3IpOy0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1v''@;'; put 'put ''YmplY3Qtb3BhY2l0eS0wKTstLWNsci10cmVlLW5vZGUtY29udGVudC1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1ob3Zlci1jb2xvcjp2YXIoLS1jbHItdHJlZS1saW5rLWhvdmVy''@;'; put 'put ''LWNvbG9yKTstLWNsci10cmVlLW5vZGUtY29udGVudC1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWJnLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0''@;'; put 'put ''aW9uLWJhY2tncm91bmQtYWN0aXZlKTstLWNsci10cmVlLW5vZGUtY29udGVudC1zZWxlY3RlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLXNlbGVjdGVkKTstLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1zZWxlY3RlZC1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''dHJlZS1saW5rLXNlbGVjdGlvbi1jb2xvcik7LS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtYmctc2VsZWN0ZWQtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1z''@;'; put 'put ''ZWxlY3RlZC1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZSk7LS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xy''@;'; put 'put ''LXRyZWUtbm9kZS1jb250ZW50LWJnLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0wKX0uY2xyLXRyZWUtbm9kZXtkaXNwbGF5OmJsb2NrfS5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVye2N1cnNvcjpu''@;'; put 'put ''b3QtYWxsb3dlZH0uY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWxpbmt7cG9pbnRlci1ldmVudHM6bm9uZX0uY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAu''@;'; put 'put ''Y2xyLXRyZWVub2RlLWxpbmssLmNsci10cmVlLW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIgLmNsci10cmVlbm9kZS1jb250ZW50LC5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIC5jbHItdHJlZW5v''@;'; put 'put ''ZGUtY2hlY2tib3h7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtYmctZGlzYWJsZWQtY29sb3IpfS5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIC5jbHItdHJlZW5vZGUtbGluaywuY2xyLXRyZWUtbm9k''@;'; put 'put ''ZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWNvbnRlbnQsLmNsci10cmVlLW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIgLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94''@;'; put 'put ''XSsuY2xyLWNvbnRyb2wtbGFiZWx7Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWRpc2FibGVkLWNvbG9yKX0uY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWxpbmsgY2RzLWljb24sLmNsci10cmVl''@;'; put 'put ''LW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIgLmNsci10cmVlbm9kZS1saW5rIGNsci1pY29uLC5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIC5jbHItdHJlZW5vZGUtY29udGVudCBjZHMtaWNvbiwu''@;'; put 'put ''Y2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWNvbnRlbnQgY2xyLWljb24sLmNsci10cmVlLW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIgLmNsci10cmVlbm9kZS1jaGVja2Jv''@;'; put 'put ''eCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWwgY2RzLWljb24sLmNsci10cmVlLW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIgLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wt''@;'; put 'put ''bGFiZWwgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItdHJlZS1ub2RlLWNhcmV0LWRpc2FibGVkLWNvbG9yKX0uY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWNhcmV0e2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLXRy''@;'; put 'put ''ZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWNhcmV0IGNkcy1pY29uLC5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIC5jbHItdHJlZW5vZGUtY2FyZXQgY2xyLWljb257''@;'; put 'put ''ZmlsbDp2YXIoLS1jbHItdHJlZS1ub2RlLWNhcmV0LWRpc2FibGVkLWNvbG9yKX0uY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1z''@;'; put 'put ''aXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9n''@;'; put 'put ''cmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0uY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lcj4uY2xyLXRyZWVub2RlLWNoZWNrYm94LmNsci1jaGVja2JveC13cmFwcGVye3dpZHRoOjEwMCU7cGFkZGluZzowIDAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5jbHIt''@;'; put 'put ''dHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyPi5jbHItdHJlZW5vZGUtY2hlY2tib3guY2xyLWNoZWNrYm94LXdyYXBwZXI6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCl9LmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXI+LmNsci10cmVl''@;'; put 'put ''bm9kZS1jaGVja2JveC5jbHItY2hlY2tib3gtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7d2lkdGg6MTAwJTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDB9LmNsci10cmVlLW5v''@;'; put 'put ''ZGUtY29udGVudC1jb250YWluZXI6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjB9LmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXI6Zm9jdXM+LmNsci10cmVlbm9kZS1jb250ZW50LC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyOmZvY3VzPi5jbHItdHJlZW5vZGUtY2hlY2ti''@;'; put 'put ''b3h7b3V0bGluZS1vZmZzZXQ6Y2FsYygtMSp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApKTtvdXRsaW5lLWNvbG9yOkhpZ2hsaWdodDtvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLXN0eWxlOmF1dG87b3V0bGluZS13aWR0aDp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApfS5jbHItdHJlZW5vZGUtY29udGVudHtmbGV4OjEgMSBhdXRvO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTtjb2xvcjp2YXIoLS1jbHItdHJl''@;'; put 'put ''ZS1ub2RlLWNvbnRlbnQtdGV4dC1vbmx5LWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdHJlZS1ib3JkZXItcmFkaXVzKSAwIDAgdmFyKC0tY2xyLXRyZWUtYm9yZGVyLXJhZGl1cyl9''@;'; put 'put ''LmNsci10cmVlbm9kZS1jb250ZW50OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApfS5jbHItdHJlZW5vZGUtY29udGVudDpub3QoOmhhcyguY2xyLXRyZWVub2RlLWxpbmspKXtwYWRkaW5nLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0u''@;'; put 'put ''Y2xyLXRyZWVub2RlLWNvbnRlbnQgY2RzLWljb24sLmNsci10cmVlbm9kZS1jb250ZW50IGNsci1pY29ue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21p''@;'; put 'put ''bi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2NvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29udGVudC10ZXh0LW9ubHktY29sb3IpO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uY2xyLXRyZWVub2RlLWNvbnRl''@;'; put 'put ''bnQgLmNsci10cmVlbm9kZS1saW5rLmFjdGl2ZSwuY2xyLXRyZWVub2RlLWNoZWNrYm94OmhhcyhpbnB1dFt0eXBlPWNoZWNrYm94XTpub3QoOmRpc2FibGVkKTpjaGVja2VkKXtjb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtc2VsZWN0ZWQtY29sb3IpO2JhY2tncm91bmQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWJnLXNlbGVjdGVkLWNvbG9yKX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rLC5jbHItdHJlZW5vZGUtY2hlY2tib3h7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdHJlZS1ib3JkZXItcmFkaXVzKTtiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1jb2xvcil9LmNsci10cmVlbm9kZS1jb250ZW50IC5jbHItdHJlZW5vZGUtbGluazpob3ZlciwuY2xyLXRyZWVub2RlLWNoZWNrYm94OmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250''@;'; put 'put ''ZW50LWJnLWhvdmVyLWNvbG9yKX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rOmFjdGl2ZSwuY2xyLXRyZWVub2RlLWNoZWNrYm94OmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1hY3RpdmUtY29sb3IpfS5jbHIt''@;'; put 'put ''dHJlZW5vZGUtY29udGVudCAuY2xyLXRyZWVub2RlLWxpbmssLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWx7Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbG9yKX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNs''@;'; put 'put ''ci10cmVlbm9kZS1saW5rIGNkcy1pY29uLC5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRyZWVub2RlLWxpbmsgY2xyLWljb24sLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWwgY2RzLWljb24sLmNsci10cmVlbm9kZS1jaGVj''@;'; put 'put ''a2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWwgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbG9yKX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rOmhvdmVyLC5jbHItdHJlZW5vZGUtY2hlY2tib3gg''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF0rLmNsci1jb250cm9sLWxhYmVsOmhvdmVye2NvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29udGVudC1ob3Zlci1jb2xvcil9LmNsci10cmVlbm9kZS1jb250ZW50IC5jbHItdHJlZW5vZGUtbGluazpob3ZlciBjZHMtaWNvbiwuY2xyLXRyZWVub2RlLWNv''@;'; put 'put ''bnRlbnQgLmNsci10cmVlbm9kZS1saW5rOmhvdmVyIGNsci1pY29uLC5jbHItdHJlZW5vZGUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0rLmNsci1jb250cm9sLWxhYmVsOmhvdmVyIGNkcy1pY29uLC5jbHItdHJlZW5vZGUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0rLmNs''@;'; put 'put ''ci1jb250cm9sLWxhYmVsOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29udGVudC1ob3Zlci1jb2xvcil9LmNsci10cmVlbm9kZS1jb250ZW50IC5jbHItdHJlZW5vZGUtbGluazphY3RpdmUsLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNr''@;'; put 'put ''Ym94XSsuY2xyLWNvbnRyb2wtbGFiZWw6YWN0aXZle2NvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29udGVudC1hY3RpdmUtY29sb3IpfS5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRyZWVub2RlLWxpbms6YWN0aXZlIGNkcy1pY29uLC5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRy''@;'; put 'put ''ZWVub2RlLWxpbms6YWN0aXZlIGNsci1pY29uLC5jbHItdHJlZW5vZGUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0rLmNsci1jb250cm9sLWxhYmVsOmFjdGl2ZSBjZHMtaWNvbiwuY2xyLXRyZWVub2RlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdKy5jbHItY29udHJvbC1s''@;'; put 'put ''YWJlbDphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWFjdGl2ZS1jb2xvcil9LmNsci10cmVlbm9kZS1jb250ZW50IC5jbHItdHJlZW5vZGUtbGluay5hY3RpdmU6aG92ZXIsLmNsci10cmVlbm9kZS1jaGVja2JveDpoYXMoaW5wdXRbdHlwZT1jaGVj''@;'; put 'put ''a2JveF06bm90KDpkaXNhYmxlZCk6Y2hlY2tlZCk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtYmctc2VsZWN0ZWQtaG92ZXItY29sb3IpfS5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRyZWVub2RlLWxpbmsuYWN0aXZlOmFjdGl2ZSwuY2xy''@;'; put 'put ''LXRyZWVub2RlLWNoZWNrYm94OmhhcyhpbnB1dFt0eXBlPWNoZWNrYm94XTpub3QoOmRpc2FibGVkKTpjaGVja2VkKTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtYmctc2VsZWN0ZWQtYWN0aXZlLWNvbG9yKX0uY2xyLXRyZWVub2RlLWNhcmV0''@;'; put 'put ''e2ZsZXg6MCAwIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO21hcmdpbjowO3BhZGRpbmc6MDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTttaW4t''@;'; put 'put ''d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jYXJldC1jb2xvcil9LmNsci10cmVlbm9kZS1jYXJldDpob3Zlcntjb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNh''@;'; put 'put ''cmV0LWhvdmVyLWNvbG9yKX0uY2xyLXRyZWVub2RlLWNhcmV0OmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNhcmV0LWFjdGl2ZS1jb2xvcil9LmNsci10cmVlLW5vZGUtY2FyZXQtaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTcpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uY2xyLXRyZWVub2RlLXNwaW5uZXItY29udGFpbmVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTtwYWRkaW5nOmNhbGMoKHZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtMTApIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSkqLjUpfS5jbHItdHJlZW5vZGUtc3Bpbm5lcntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLXRyZWVub2RlLWNoaWxkcmVue21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO3dpbGwtY2hhbmdlOmhlaWdodDtvdmVyZmxvdy15OmhpZGRlbn0uY2xyLXRyZWVub2RlLWxpbmt7ZGlzcGxh''@;'; put 'put ''eTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTttYXJnaW46MDtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7Ym9yZGVy''@;'; put 'put ''OjA7Y3Vyc29yOnBvaW50ZXI7dGV4dC1hbGlnbjpsZWZ0fS5jbHItdHJlZW5vZGUtbGluazpob3ZlciwuY2xyLXRyZWVub2RlLWxpbms6Zm9jdXN7dGV4dC1kZWNvcmF0aW9uOm5vbmV9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItZGF0YWdyaWQtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''dHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWRhdGFncmlkLWRlZmF1bHQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0t''@;'; put 'put ''Y2xyLWRhdGFncmlkLXJvdy1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXIpOy0tY2xyLWRhdGFncmlkLXJvdy1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWFjdGl2''@;'; put 'put ''ZSk7LS1jbHItZGF0YWdyaWQtcm93LWhvdmVyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNs''@;'; put 'put ''ci1kYXRhZ3JpZC1wYWdpbmF0aW9uLWJ0bi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1wYWdpbmF0aW9uLWJ0bi1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1kYXRhZ3Jp''@;'; put 'put ''ZC1wYWdpbmF0aW9uLWlucHV0LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItZGF0YWdyaWQtcGFnaW5hdGlvbi1pbnB1dC1ib3JkZXItZm9jdXMtY29sb3I6dmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IpOy0tY2xyLWRhdGFncmlk''@;'; put 'put ''LXBvcG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCk7LS1jbHItZGF0YWdyaWQtcG9wb3Zlci1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpOy0tY2xyLWRhdGFncmlkLXBvcG92ZXItZm9udC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWRhdGFncmlkLWFjdGlvbi1wb3BvdmVyLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcik7LS1jbHItZGF0YWdyaWQtcm93LXNlbGVjdGVk''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItZGF0YWdyaWQtcm93LXNlbGVjdGVkLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkKTstLWNsci1kYXRhZ3JpZC1yb3ctc2VsZWN0''@;'; put 'put ''ZWQtYWN0aXZlLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZSk7LS1jbHItZGF0YWdyaWQtcm93LXNlbGVjdGVkLWhvdmVyLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1p''@;'; put 'put ''bnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tc3dpdGNoLWhlYWRlci1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWRhdGFncmlkLWNvbHVtbi1zd2l0Y2gtaGVhZGVyLWZv''@;'; put 'put ''bnQtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1ob3Zlcik7LS1jbHItZGF0YWdyaWQtY29sdW1uLXN3aXRjaC1oZWFkZXItZm9udC1ob3Zlci1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUp''@;'; put 'put ''Oy0tY2xyLWRhdGFncmlkLWRldGFpbC1jYXJldC1pY29uLW9wZW4tYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWljb24tb3Blbi1pY29uLWNvbG9yOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZCk7LS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMjAwKTstLWNsci1kYXRhZ3JpZC1sb2FkaW5nLWJhY2tncm91bmQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1j''@;'; put 'put ''b250YWluZXItYmFja2Ryb3AtYmFja2dyb3VuZCk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLXBhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpOy0tY2xyLWRhdGFn''@;'; put 'put ''cmlkLWNvbHVtbi10b2dnbGUtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYm9yZGVyLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWZpbGwtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTApOy0tY2xyLWRhdGFn''@;'; put 'put ''cmlkLWNvbHVtbi10b2dnbGUtdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1j''@;'; put 'put ''b2x1bW4tdG9nZ2xlLWJvcmRlci1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1maWxsLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFj''@;'; put 'put ''a2dyb3VuZCk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS10ZXh0LWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1ib3JkZXItYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''aW50ZXJhY3Rpb24tYm9yZGVyLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWZpbGwtYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0wKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLXRleHQtYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtY29udGVudC1wYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtY2xvc2UtaWNvbi1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7''@;'; put 'put ''LS1jbHItZGF0YWdyaWQtZGV0YWlsLWJvZHktdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWRhdGFncmlkLWRldGFpbC1oZWFkZXItdGl0bGUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1kYXRh''@;'; put 'put ''Z3JpZC1kZXRhaWwtcGFuZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTstLWNsci1kYXRhZ3JpZC1kZXRhaWwtcGFuZS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpOy0tY2xyLWRhdGFncmlkLXBs''@;'; put 'put ''YWNlaG9sZGVyLWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtc2l6ZSk7LS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXdlaWdodCk7LS1jbHItZGF0YWdy''@;'; put 'put ''aWQtcGxhY2Vob2xkZXItbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCk7LS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3BhY2lu''@;'; put 'put ''Zyk7LS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTstLWNsci1kYXRhZ3JpZC1wb3BvdmVycy1ib3gtc2hhZG93OnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtc2hhZG93LTEwMCk7LS1j''@;'; put 'put ''bHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci1oZWlnaHQ6Y2FsYygxMDAlIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpOy0tY2xyLWRhdGFncmlkLWNvbHVtbi1yZXNp''@;'; put 'put ''emUtaGFuZGxlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJvcmRlci1jb2xvcik7LS1jbHItZGF0YWdyaWQtZmlsdGVyLXRvZ2dsZS1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItZGF0YWdyaWQtZm9vdGVyLXBhZ2luYXRpb24tZ2FwOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtNik7LS1jbHItZGF0YWdyaWQtZml4ZWQtY29sdW1uLXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMik7LS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci1leHBhbmRieTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpOy0tY2xyLWRhdGFncmlk''@;'; put 'put ''LWljb24tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLWRhdGFncmlkLWFjdGlvbi1hcnJvdy1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCk7LS1jbHItZGF0YWdyaWQtY29tcGFjdC1vdXRsaW5lLW9mZnNldDpjYWxjKC0xICogdG9rZW5zLiRjZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTMpOy0tY2xyLWRhdGFncmlkLWhvcml6b250YWwtcGFkZGluZzptaXhpbnMuYmFzZWxpbmVQeCg5KX0uZGF0YWdyaWR7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlO2JvcmRlcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpIHNvbGlkIHZhcigtLWNsci10YWJsZS1ib3JkZXItY29s''@;'; put 'put ''b3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1yYWRpdXMpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJnY29sb3IpO2NvbG9yOnZhcigtLWNsci10YWJsZS1mb250LWNvbG9yKTttYXJnaW46dmFyKC0tY2xyLXRhYmxlLW1hcmdpbik7bWF4LXdpZHRo''@;'; put 'put ''OjEwMCU7d2lkdGg6MTAwJX0uZGF0YWdyaWQgLmRhdGFncmlkLWNvbHVtbiwuZGF0YWdyaWQgLmRhdGFncmlkLWNlbGx7Ym9yZGVyLXRvcC1zdHlsZTpzb2xpZDtib3JkZXItdG9wLXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCk7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''dGFibGVyb3ctYm9yZGVyY29sb3IpO3BhZGRpbmc6dmFyKC0tY2xyLXRhYmxlLWNlbGwtcGFkZGluZyk7dGV4dC1hbGlnbjpjZW50ZXI7dmVydGljYWwtYWxpZ246dG9wfS5kYXRhZ3JpZCAuZGF0YWdyaWQtY29sdW1uLmxlZnQsLmRhdGFncmlkIC5kYXRhZ3JpZC1jZWxsLmxlZnR7dGV4dC1h''@;'; put 'put ''bGlnbjpsZWZ0fS5kYXRhZ3JpZCAuZGF0YWdyaWQtY29sdW1uLmxlZnQ6Zmlyc3QtY2hpbGQsLmRhdGFncmlkIC5kYXRhZ3JpZC1jZWxsLmxlZnQ6Zmlyc3QtY2hpbGR7cGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmRhdGFncmlkIC5kYXRhZ3JpZC1jb2x1bW4ucmln''@;'; put 'put ''aHQsLmRhdGFncmlkIC5kYXRhZ3JpZC1jZWxsLnJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LmRhdGFncmlkIC5kYXRhZ3JpZC1jZWxse21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7Zm9udC1zaXplOnZhcigtLWNsci10YWJsZS1kYXRhLWNlbGwtZm9udC1zaXplKTtmb250''@;'; put 'put ''LXdlaWdodDp2YXIoLS1jbHItdGFibGUtZGF0YS1jZWxsLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jbHItdGFibGUtZGF0YS1jZWxsLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcp''@;'; put 'put ''fS5kYXRhZ3JpZCAuZGF0YWdyaWQtY29sdW1ue2NvbG9yOnZhcigtLWNsci10aGVhZC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1z''@;'; put 'put ''ZW1pYm9sZCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGhl''@;'; put 'put ''YWQtYmdjb2xvcik7dmVydGljYWwtYWxpZ246bWlkZGxlO2JvcmRlci1ib3R0b20tc3R5bGU6c29saWQ7Ym9yZGVyLWJvdHRvbS13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcik7Ym9yZGVy''@;'; put 'put ''LXRvcDowIG5vbmV9LmRhdGFncmlkIC5kYXRhZ3JpZC1ib2R5IC5kYXRhZ3JpZC1yb3c6Zmlyc3QtY2hpbGQgLmRhdGFncmlkLWNlbGx7Ym9yZGVyLXRvcDowIG5vbmV9LmRhdGFncmlkIC5kYXRhZ3JpZC1ib2R5Ky5kYXRhZ3JpZC1ib2R5e2JvcmRlci10b3Atc3R5bGU6c29saWQ7Ym9yZGVy''@;'; put 'put ''LXRvcC13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpO2JvcmRlci10b3AtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcil9LmRhdGFncmlkIC5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLWNvbHVtbjpmaXJzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVy''@;'; put 'put ''LXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1jbHItdGFibGUtY29ybmVyY2VsbHJhZGl1cyl9LmRhdGFncmlkIC5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLWNvbHVtbjpsYXN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1jbHItdGFibGUtY29y''@;'; put 'put ''bmVyY2VsbHJhZGl1cyl9LmRhdGFncmlkIC5kYXRhZ3JpZC1ib2R5Omxhc3QtY2hpbGQgLmRhdGFncmlkLXJvdzpsYXN0LWNoaWxkIC5kYXRhZ3JpZC1jZWxsOmZpcnN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3Ju''@;'; put 'put ''ZXJjZWxscmFkaXVzKX0uZGF0YWdyaWQgLmRhdGFncmlkLWJvZHk6bGFzdC1jaGlsZCAuZGF0YWdyaWQtcm93Omxhc3QtY2hpbGQgLmRhdGFncmlkLWNlbGw6bGFzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5l''@;'; put 'put ''cmNlbGxyYWRpdXMpfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1jb2x1bW4sLmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWNlbGx7bWluLWhlaWdodDp2YXIoLS1jbHItdGFibGUtY29tcGFjdC1yb3ctaGVpZ2h0KTtwYWRkaW5nOnZhcigtLWNsci10YWJsZS1jZWxsLWNvbXBhY3Qt''@;'; put 'put ''cGFkZGluZyl9LmRhdGFncmlkLWhvc3R7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO3Bvc2l0aW9uOnJlbGF0aXZlfS5kYXRhZ3JpZHtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDstbXMtb3ZlcmZsb3ctc3R5bGU6''@;'; put 'put ''LW1zLWF1dG9oaWRpbmctc2Nyb2xsYmFyO292ZXJmbG93OmF1dG87ZmxleDoxIDEgYXV0bzttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9LmRhdGFncmlkLmNkay12aXJ0dWFsLXNjcm9sbGFibGUgLmRhdGFncmlkLXJvd3N7ZmxleC1ncm93OjB9LmRhdGFncmlkLW92ZXJm''@;'; put 'put ''bG93LWVsbGlwc2lzIC5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXNjcm9sbGluZy1jZWxscz4uZGF0YWdyaWQtY2VsbHt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9LmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXR7cGFkZGluZzp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTIpIHZhcigtLWNsci1kYXRhZ3JpZC1ob3Jpem9udGFsLXBhZGRpbmcpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7dGV4dC1hbGlnbjpjZW50ZXJ9LmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9u''@;'; put 'put ''ey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2N1cnNv''@;'; put 'put ''cjpwb2ludGVyO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKX1idXR0b24uZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1idXR0b257Y3Vyc29yOnBvaW50ZXJ9LmRhdGFn''@;'; put 'put ''cmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtaWNvbntjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtaWNvbi1jb2xvcil9LmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtaWNvbiBzdmd7dHJhbnNpdGlvbjp0''@;'; put 'put ''cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0fS5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IC5zcGlubmVye21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KX0uZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC5kYXRhZ3JpZC1jb2x1bW57cGFkZGluZzp2YXIoLS1jbHItdGFibGUt''@;'; put 'put ''dG9wY2VsbHBhZGRpbmcpIHZhcigtLWNsci10YWJsZS1jZWxscGFkZGluZykgdmFyKC0tY2xyLXRhYmxlLWJvdHRvbWNlbGxwYWRkaW5nKX0uZGF0YWdyaWQtaGVhZGVyLC5kYXRhZ3JpZC1ib2R5LC5kYXRhZ3JpZC1yb3csLmRhdGFncmlkLWNvbHVtbiwuZGF0YWdyaWQtY2VsbCwuZGF0YWdy''@;'; put 'put ''aWQtZml4ZWQtY29sdW1ue2Rpc3BsYXk6YmxvY2t9LmRhdGFncmlkLXJvd3tib3JkZXItdG9wLXN0eWxlOnNvbGlkO2JvcmRlci10b3Atd2lkdGg6dmFyKC0tY2xyLXRhYmxlLWJvcmRlcndpZHRoKTtib3JkZXItdG9wLWNvbG9yOnZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpfS5kYXRh''@;'; put 'put ''Z3JpZC1yb3c6Zmlyc3Qtb2YtdHlwZXtib3JkZXItdG9wOm5vbmV9LmRhdGFncmlkLXJvdzpob3ZlciwuZGF0YWdyaWQtcm93OmhvdmVyIC5kYXRhZ3JpZC1yb3ctc3RpY2t5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXJvdy1ob3Zlci1jb2xvcil9LmRhdGFncmlkLXJv''@;'; put 'put ''dy5kYXRhZ3JpZC1zZWxlY3RlZCwuZGF0YWdyaWQtcm93LmRhdGFncmlkLXNlbGVjdGVkIC5kYXRhZ3JpZC1yb3ctc3RpY2t5e2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1yb3ctc2VsZWN0ZWQpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXJvdy1zZWxlY3RlZC1iYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yKX0uZGF0YWdyaWQtcm93LmRhdGFncmlkLXNlbGVjdGVkOmhvdmVyLC5kYXRhZ3JpZC1yb3cuZGF0YWdyaWQtc2VsZWN0ZWQ6aG92ZXIgLmRhdGFncmlkLXJvdy1zdGlja3l7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcm93LXNlbGVjdGVkLWhvdmVy''@;'; put 'put ''LWJhY2tncm91bmQtY29sb3IpfS5kYXRhZ3JpZC1yb3cuZGF0YWdyaWQtc2VsZWN0ZWQ6YWN0aXZlLC5kYXRhZ3JpZC1yb3cuZGF0YWdyaWQtc2VsZWN0ZWQ6YWN0aXZlIC5kYXRhZ3JpZC1yb3ctc3RpY2t5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXJvdy1zZWxlY3Rl''@;'; put 'put ''ZC1hY3RpdmUtYmFja2dyb3VuZC1jb2xvcil9LmRhdGFncmlkLXJvdzphY3RpdmUsLmRhdGFncmlkLXJvdzphY3RpdmUgLmRhdGFncmlkLXJvdy1zdGlja3l7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcm93LWFjdGl2ZS1jb2xvcil9LmRhdGFncmlkLXJvdy5kYXRhZ3Jp''@;'; put 'put ''ZC1yb3ctc2tlbGV0b257YmFja2dyb3VuZC1jb2xvcjp1bnNldH0uZGF0YWdyaWQtcm93LmRhdGFncmlkLXJvdy1za2VsZXRvbiAuZGF0YWdyaWQtcm93LXNjcm9sbGFibGUsLmRhdGFncmlkLXJvdy5kYXRhZ3JpZC1yb3ctc2tlbGV0b24gLmRhdGFncmlkLXJvdy1zdGlja3l7ZGlzcGxheTpu''@;'; put 'put ''b25lfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXJvdy1kZXRhaWwtd3JhcHBlcntmbGV4OjEgMSBhdXRvO2Rpc3BsYXk6ZmxleH0uZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1yb3ctZGV0YWlse3dpZHRoOmF1dG99LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtcm93LWRldGFpbCAuZGF0YWdyaWQt''@;'; put 'put ''Y2VsbHtwYWRkaW5nLXRvcDowO2JvcmRlcjowfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXJvdy1kZXRhaWwgLmRhdGFncmlkLWNlbGwuZGF0YWdyaWQtY29udGFpbmVye2ZvbnQtc2l6ZTp2YXIoLS1jbHItdGFibGUtZm9udHNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBv''@;'; put 'put ''Z3JhcGh5LWJvZHktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpfS5kYXRhZ3JpZC1yb3cgLmRhdGFn''@;'; put 'put ''cmlkLXNlbGVjdHttaW4td2lkdGg6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIC0gdmFyKC0tY2xyLXRhYmxlLWJvcmRlcndpZHRoKSk7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5k''@;'; put 'put ''YXRhZ3JpZC1yb3cgLmRhdGFncmlkLXNlbGVjdCwuZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1zZWxlY3QgaW5wdXR7Y3Vyc29yOnBvaW50ZXJ9LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtc2VsZWN0LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQsLmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtc2Vs''@;'; put 'put ''ZWN0LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgaW5wdXR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXNpZ25wb3N0LXRyaWdnZXIgLnNpZ25wb3N0e21hcmdpbjpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpIDA7aGVpZ2h0OnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtOSl9LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtc2lnbnBvc3QtdHJpZ2dlciAuc2lnbnBvc3QgLnNpZ25wb3N0LXRyaWdnZXJ7aGVpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uZGF0YWdyaWQtcm93LmRhdGFncmlkLXJv''@;'; put 'put ''dy1sb2FkaW5nIC5kYXRhZ3JpZC1yb3ctc3RpY2t5e2Rpc3BsYXk6bm9uZX0uZGF0YWdyaWQtcm93LmRhdGFncmlkLXJvdy1sb2FkaW5nIC5kYXRhZ3JpZC1jZWxse2Rpc3BsYXk6ZmxleDtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmRhdGFncmlkLXJvdy1zdGlja3l7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYmdjb2xvcik7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDpub3dyYXA7cG9zaXRpb246c3RpY2t5O2xlZnQ6MDt6''@;'; put 'put ''LWluZGV4OjUwMH0uZGF0YWdyaWQtcm93LXN0aWNreSAuZGF0YWdyaWQtY2VsbDpsYXN0LWNoaWxkOmFmdGVye2NvbnRlbnQ6IiI7d2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3Itd2lkdGgpO2hlaWdodDp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRv''@;'; put 'put ''ci1oZWlnaHQpO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKX0uZGF0YWdyaWQtcm93LXNjcm9sbGFibGV7ZmxleDoxIDEgYXV0bztkaXNwbGF5OmZsZXg7''@;'; put 'put ''ZmxleC1mbG93OmNvbHVtbiBub3dyYXB9LmRhdGFncmlkLXJvdy1zY3JvbGxhYmxlLmlzLXJlcGxhY2Vke2ZsZXgtZGlyZWN0aW9uOnJvd30uZGF0YWdyaWQtcm93LXNjcm9sbGFibGUuaXMtcmVwbGFjZWQgLmRhdGFncmlkLXNjcm9sbGluZy1jZWxsc3tmbGV4OjAgMCBhdXRvfS5kYXRhZ3Jp''@;'; put 'put ''ZC1yb3ctc2Nyb2xsYWJsZSAuZGF0YWdyaWQtY29sdW1uOmxhc3QtY2hpbGQgLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3J7ZGlzcGxheTpub25lfS5kYXRhZ3JpZC1yb3ctZmxleHtmbGV4OjEgMSBhdXRvO2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IG5vd3JhcH0uZGF0YWdyaWQtcm93''@;'; put 'put ''LWZsZXggLmRhdGFncmlkLXJvdy1kZXRhaWx7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgbm93cmFwfS5kYXRhZ3JpZC1yb3ctZmxleCAuZGF0YWdyaWQtcm93LWRldGFpbCAuZGF0YWdyaWQtY2VsbHtwYWRkaW5nLXRvcDowfS5kYXRhZ3JpZC1zY3JvbGxpbmctY2VsbHMsLmRhdGFncmlk''@;'; put 'put ''LXNjcm9sbGluZy1kZXRhaWxze2Rpc3BsYXk6ZmxleDtmbGV4OjEgMSBhdXRvO2ZsZXgtZmxvdzpyb3cgbm93cmFwfS5kYXRhZ3JpZC1hY3Rpb24tYmFye21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uZGF0YWdyaWQtYWN0aW9uLWJhcn4uZGF0YWdyaWQtc3Bpbm5lcnto''@;'; put 'put ''ZWlnaHQ6Y2FsYygxMDAlIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KSk7dG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9LmRhdGFncmlkLWhlYWRlcntwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRleDo1MDE7d2lkdGg6YXV0b30uZGF0YWdyaWQtaGVhZGVyIC5kYXRhZ3JpZC1j''@;'; put 'put ''b2x1bW57Ym9yZGVyLWJvdHRvbTpub25lfS5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLXJvd3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10aGVhZC1iZ2NvbG9yKTtib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZDtib3JkZXItYm90dG9tLXdpZHRoOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKX0uZGF0YWdyaWQtaGVhZGVyIC5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXJvdy1zdGlja3l7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''dGhlYWQtYmdjb2xvcik7ei1pbmRleDo1MDJ9LmRhdGFncmlkLWhlYWRlciAuZGF0YWdyaWQtcm93OmhvdmVyLC5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLXJvdzpob3ZlciAuZGF0YWdyaWQtcm93LXN0aWNreXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10aGVhZC1iZ2NvbG9yKX0u''@;'; put 'put ''ZGF0YWdyaWQtaGVhZGVyIC5kYXRhZ3JpZC1yb3ctc2Nyb2xsYWJsZXtmbGV4LWRpcmVjdGlvbjpyb3d9LmRhdGFncmlkLXRhYmxlLXdyYXBwZXJ7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87bWluLWhlaWdodDoxMDAlfS5kYXRhZ3JpZC10YWJsZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFn''@;'; put 'put ''cmlkLXJvd3N7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4OjEgMSBhdXRvfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtYm9keXt3aWR0aDphdXRvfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1ue3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246bGVm''@;'; put 'put ''dDttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xNSk7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87dmVydGljYWwtYWxpZ246dG9wO2JvcmRlcjowfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1p''@;'; put 'put ''bnRlcmFjdGlvbi1vdXRsaW5lKTtvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLW9mZnNldDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIGNsci1kZy1maWx0ZXIsLmRhdGFncmlk''@;'; put 'put ''LXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gY2xyLWRnLXN0cmluZy1maWx0ZXIsLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gY2xyLWRnLW51bWVyaWMtZmlsdGVye2Rpc3BsYXk6ZmxleDtvcmRlcjo5OTttYXJnaW4tbGVmdDphdXRvO2FsaWduLWl0ZW1zOmNlbnRlcn0uZGF0YWdy''@;'; put 'put ''aWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtbnVtZXJpYy1maWx0ZXItaW5wdXR7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xNCl9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLW51bWVyaWMtZmlsdGVyLWlucHV0IC5jbHItZm9ybS1j''@;'; put 'put ''b250cm9se21hcmdpbi10b3A6MH0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtZmlsdGVyLXRvZ2dsZXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFuY2U6bm9uZTttYXJn''@;'; put 'put ''aW46MDtwYWRkaW5nOjA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kOjAgMDtjdXJzb3I6cG9pbnRlcjtmbG9hdDpyaWdodDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7aGVpZ2h0OnZhcigtLWNsci1kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLXNpemUp''@;'; put 'put ''O3dpZHRoOnZhcigtLWNsci1kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLXNpemUpO21pbi1oZWlnaHQ6dmFyKC0tY2xyLWRhdGFncmlkLWZpbHRlci10b2dnbGUtc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLXNpemUpO21hcmdpbi1sZWZ0OnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtNCk7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb250YWlufWJ1dHRvbi5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xle2N1cnNvcjpwb2ludGVyfS5kYXRhZ3JpZC10YWJsZSAu''@;'; put 'put ''ZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlIGNkcy1pY29uLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlIGNsci1pY29ue2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpfS5k''@;'; put 'put ''YXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlOmhvdmVyIGNkcy1pY29uLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNkcy1hbGlhcy1v''@;'; put 'put ''YmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLmRhdGFncmlkLWZpbHRlci1vcGVuIGNkcy1pY29uLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0''@;'; put 'put ''ZXItdG9nZ2xlLmRhdGFncmlkLWZpbHRlci1vcGVuIGNsci1pY29ue2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtZmlsdGVyLXRvZ2dsZS5kYXRhZ3JpZC1maWx0''@;'; put 'put ''ZXJlZCBjZHMtaWNvbiwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtZmlsdGVyLXRvZ2dsZS5kYXRhZ3JpZC1maWx0ZXJlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLXNlbGVjdGVkKX0uZGF0YWdyaWQt''@;'; put 'put ''dGFibGUgLmRhdGFncmlkLWNvbHVtbi5kYXRhZ3JpZC1maXhlZC13aWR0aHtmbGV4OjAgMCBhdXRvfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tZmxleHtkaXNwbGF5OmZsZXg7ZmxleDoxIDEgYXV0b30uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlk''@;'; put 'put ''LWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXRpdGxley13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNo''@;'; put 'put ''YWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2NvbG9yOnZhcigtLWNsci10YWJsZS1mb250LWNvbG9yKTt0ZXh0LWFsaWduOmxlZnQ7ZmxleDoxIDEgYXV0bzthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tc2VsZjpjZW50ZXI7ZGlzcGxheTpmbGV4fWJ1dHRvbi5kYXRhZ3JpZC10YWJsZSAuZGF0''@;'; put 'put ''YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tdGl0bGV7Y3Vyc29yOnBvaW50ZXJ9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi10aXRsZSAuc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbi5idG57aGVpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6''@;'; put 'put ''aW5oZXJpdH0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXRpdGxlIC5jbHItY2hlY2tib3gtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7bWFyZ2luLXRvcDpjYWxjKC0xKjEwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0uZGF0YWdy''@;'; put 'put ''aWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiBidXR0b24uZGF0YWdyaWQtY29sdW1uLXRpdGxlOmhvdmVye3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y3Vyc29yOnBvaW50ZXJ9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gYnV0dG9uLmRhdGFncmlkLWNvbHVtbi10aXRsZSAu''@;'; put 'put ''c29ydC1pY29ue2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpO21hcmdpbi1sZWZ0OmF1dG87aGVpZ2h0OnZhcigtLWNsci1kYXRhZ3JpZC1pY29uLXNpemUpO3dpZHRoOnZhcigtLWNsci1kYXRhZ3JpZC1pY29uLXNpemUpO3ZlcnRpY2FsLWFsaWduOm1p''@;'; put 'put ''ZGRsZX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiBidXR0b24uZGF0YWdyaWQtY29sdW1uLXRpdGxlIC5zb3J0LWljb246aG92ZXJ7Y29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1ob3Zlcil9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1j''@;'; put 'put ''b2x1bW4gYnV0dG9uLmRhdGFncmlkLWNvbHVtbi10aXRsZSAuc29ydC1pY29uOmFjdGl2ZXtjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSl9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0''@;'; put 'put ''b3J7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4OjAgMCBhdXRvO3dpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7b3JkZXI6MTAwO21hcmdpbi1sZWZ0OmF1dG87aGVpZ2h0OjEwMCV9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1''@;'; put 'put ''bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3I6YWZ0ZXJ7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtoZWlnaHQ6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3ItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci13aWR0aCk7''@;'; put 'put ''cmlnaHQ6MDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yIC5kYXRhZ3JpZC1jb2x1bW4taGFuZGxley13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1t''@;'; put 'put ''b3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOmNhbGModmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS02KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSk7dG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSk7Y3Vyc29yOmNvbC1yZXNpemU7aGVpZ2h0OmNhbGMoMTAw''@;'; put 'put ''JSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgLSB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApKTt6LWluZGV4OjUwMX1idXR0b24uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvciAuZGF0YWdyaWQtY29s''@;'; put 'put ''dW1uLWhhbmRsZXtjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvciAuZGF0YWdyaWQtY29sdW1uLXJlc2l6ZS10cmFja2Vye3Bvc2l0aW9uOmFic29sdXRlO3RvcDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtNikpO2Rpc3BsYXk6bm9uZTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpO2hlaWdodDowO2JvcmRlci1yaWdodC1zdHlsZTpkb3R0ZWQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0zMDApO2JvcmRlci1yaWdodC13aWR0aDp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCk7Y3Vyc29yOmNvbC1yZXNpemV9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3IgLmRhdGFncmlkLWNvbHVtbi1yZXNpemUtdHJh''@;'; put 'put ''Y2tlci5vbi1hcnJvdy1rZXktcmVzaXple3RyYW5zaXRpb246dHJhbnNmb3JtIC4ycyBlYXNlLW91dH0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvciAuZXhjZWVkZWQtbWF4e2JvcmRlci1yaWdodDp2YXIoLS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LWJvcmRlci13aWR0aC0xMDApIGRvdHRlZCB2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlci1kYXJrKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtc2lnbnBvc3QtdHJpZ2dlciAuc2lnbnBvc3R7bWFyZ2luOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS01KSkgMDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtc2lnbnBvc3QtdHJpZ2dlciAuc2lnbnBvc3QgLnNpZ25wb3N0LXRyaWdnZXJ7aGVpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbi5kYXRhZ3JpZC1zZWxlY3QsLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4uZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbi5k''@;'; put 'put ''YXRhZ3JpZC1yb3ctYWN0aW9uc3ttYXgtd2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWZpeGVkLWNvbHVtbi1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWZpeGVkLWNvbHVtbi1zaXplKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGx7ZmxleDoxIDEgYXV0bzt0ZXh0''@;'; put 'put ''LWFsaWduOmxlZnQ7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTUpO2JvcmRlcjowfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbC5kYXRhZ3JpZC1maXhlZC13aWR0aHtmbGV4OjAgMCBhdXRvfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbC5kYXRhZ3JpZC1m''@;'; put 'put ''aXhlZC1jb2x1bW57ZmxleDowIDAgdmFyKC0tY2xyLWRhdGFncmlkLWZpeGVkLWNvbHVtbi1zaXplKTttYXgtd2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWZpeGVkLWNvbHVtbi1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWZpeGVkLWNvbHVtbi1zaXplKX0uZGF0YWdyaWQt''@;'; put 'put ''dGFibGUgLmRhdGFncmlkLWNlbGwuZGF0YWdyaWQtcm93LWFjdGlvbnN7YmFja2dyb3VuZDowIDB9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXR7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpIHZhcigtLWNsci1kYXRhZ3Jp''@;'; put 'put ''ZC1ob3Jpem9udGFsLXBhZGRpbmcpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7dGV4dC1hbGlnbjpjZW50ZXJ9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lKTtvdXRsaW5lLWNv''@;'; put 'put ''bG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLW9mZnNldDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbCAuZGF0YWdyaWQtYWN0aW9uLXRvZ2dsZXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFw''@;'; put 'put ''cGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MDtwYWRkaW5nOjA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kOjAgMDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0''@;'; put 'put ''aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfWJ1dHRvbi5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbCAuZGF0YWdyaWQtYWN0aW9uLXRvZ2dsZXtjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGwgLmRhdGFncmlkLWFjdGlvbi10b2dnbGUgY2RzLWlj''@;'; put 'put ''b24sLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsIC5kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1pY29uLWNvbG9yKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGwgLmRhdGFncmlkLWFjdGlvbi10b2dnbGU6YWN0aXZl''@;'; put 'put ''IGNkcy1pY29uLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbCAuZGF0YWdyaWQtYWN0aW9uLXRvZ2dsZTphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWFjdGlvbi10b2dnbGUtY29sb3IpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbCAuY2xyLXRv''@;'; put 'put ''Z2dsZS13cmFwcGVye21hcmdpbi10b3A6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKTtwYWRkaW5nLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0LC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtcm93''@;'; put 'put ''LWFjdGlvbnMsLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0e3Bvc2l0aW9uOnJlbGF0aXZlfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0IC5kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlOmJlZm9yZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlk''@;'; put 'put ''LWRldGFpbC1jYXJldCAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWJ1dHRvbjpiZWZvcmUsLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uOmJlZm9yZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLXJvdy1hY3Rp''@;'; put 'put ''b25zIC5kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlOmJlZm9yZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLXJvdy1hY3Rpb25zIC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtYnV0dG9uOmJlZm9yZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLXJvdy1hY3Rpb25zIC5kYXRhZ3JpZC1leHBhbmRh''@;'; put 'put ''YmxlLWNhcmV0LWJ1dHRvbjpiZWZvcmUsLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IC5kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlOmJlZm9yZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWRldGFpbC1jYXJldC1i''@;'; put 'put ''dXR0b246YmVmb3JlLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1idXR0b246YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTt0b3A6MDtsZWZ0OjB9LmRh''@;'; put 'put ''dGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250YWluZXJ7ZmxleDoxIDEgYXV0bztkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtib3JkZXItdG9wLXN0eWxlOnNvbGlkO2JvcmRlci10b3AtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcik7''@;'; put 'put ''Ym9yZGVyLXRvcC13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtcGxhY2Vob2xkZXJ7YmFja2dyb3VuZDp2YXIoLS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItYmFja2dyb3VuZC1jb2xvcik7ZGlzcGxheTpu''@;'; put 'put ''b25lO3dpZHRoOjEwMCV9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1wbGFjZWhvbGRlci5kYXRhZ3JpZC1lbXB0eXtib3JkZXItdG9wOjA7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDtn''@;'; put 'put ''YXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7Zm9udC1zaXplOnZhcigtLWNsci1kYXRhZ3JpZC1wbGFjZWhvbGRlci1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1kYXRhZ3JpZC1wbGFjZWhvbGRlci1mb250LXdl''@;'; put 'put ''aWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLWRhdGFncmlkLXBsYWNlaG9sZGVyLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItbGV0dGVyLXNwYWNpbmcpO2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb2xv''@;'; put 'put ''cil9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1wbGFjZWhvbGRlciAuZGF0YWdyaWQtcGxhY2Vob2xkZXItaW1hZ2V7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDti''@;'; put 'put ''YWNrZ3JvdW5kLXNpemU6Y29udGFpbjtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlcjtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjA2MCUyMDcyJTIyJTIwdmVyc2lvbiUzRCUyMjEuMSUy''@;'; put 'put ''MiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIweG1sbnMlM0F4bGluayUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMTk5OSUyRnhsaW5rJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDZGVmcyUzRSUwQSUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUzQ2VsbGlwc2UlMjBpZCUzRCUyMnBhdGgtMSUyMiUyMGN4JTNEJTIyMzAlMjIlMjBjeSUzRCUyMjYxLjc2NjY2NjclMjIlMjByeCUzRCUyMjE1LjQ1MTI5MDQlMjIlMjByeSUzRCUyMjQuNzMzMzMzMzMlMjIlM0UlM0MlMkZlbGxpcHNlJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTNDbWFzayUyMGlkJTNEJTIybWFzay0yJTIyJTIwbWFza0NvbnRlbnRVbml0cyUzRCUyMnVzZXJTcGFjZU9uVXNlJTIyJTIwbWFza1VuaXRzJTNEJTIyb2JqZWN0Qm91bmRpbmdCb3glMjIlMjB4JTNEJTIyMCUyMiUyMHklM0QlMjIwJTIyJTIwd2lkdGglM0QlMjIzMC45MDI1ODA4''@;'; put 'put ''JTIyJTIwaGVpZ2h0JTNEJTIyOS40NjY2NjY2NyUyMiUyMGZpbGwlM0QlMjJ3aGl0ZSUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3VzZSUyMHhsaW5rJTNBaHJlZiUzRCUyMiUyM3BhdGgtMSUyMiUzRSUzQyUyRnVzZSUzRSUwQSUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUzQyUyRm1hc2slM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTNDZyUyMGlkJTNEJTIyUGFnZS0xJTIyJTIwc3Ryb2tlJTNEJTIybm9uZSUyMiUyMHN0cm9rZS13aWR0aCUzRCUyMjElMjIlMjBmaWxsJTNEJTIybm9uZSUyMiUyMGZpbGwt''@;'; put 'put ''cnVsZSUzRCUyMmV2ZW5vZGQlMjIlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NnJTIwaWQlM0QlMjJBcnRib2FyZCUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3VzZSUyMGlkJTNEJTIyT3ZhbC0xMCUyMiUyMHN0cm9rZSUzRCUyMiUyM0Mx''@;'; put 'put ''REZFRiUyMiUyMG1hc2slM0QlMjJ1cmwoJTIzbWFzay0yKSUyMiUyMHN0cm9rZS13aWR0aCUzRCUyMjIuOCUyMiUyMHN0cm9rZS1saW5lY2FwJTNEJTIyc3F1YXJlJTIyJTIwc3Ryb2tlLWRhc2hhcnJheSUzRCUyMjMlMkM2JTJDMyUyQzUlMjIlMjB4bGluayUzQWhyZWYlM0QlMjIlMjNwYXRo''@;'; put 'put ''LTElMjIlM0UlM0MlMkZ1c2UlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk0zOC40NjEzNjQ3JTJDMTguMTY0MjQ1NiUyMEwzMC45ODkwMTM3JTJDMzQuOTE0MTg0NiUyMEwzMSUyQzQ3JTIwTDMyLjU5Nzc3ODMlMkM0Ni41MTY3MjM2''@;'; put 'put ''JTIwTDMyLjU5Nzc3ODMlMkMzNC45MTQxODQ2JTIwTDUxLjA2NzMyMTglMkMxNS43NTYwNDI1JTIwQzUxLjA2NzMyMTglMkMxNS43NTYwNDI1JTIwNDguNjI5NTE2NiUyQzE2LjY1NDI5NjklMjA0NC45NjI4OTA2JTJDMTcuMzM5MjMzNCUyMEM0MS4yOTYyNjQ2JTJDMTguMDI0MTY5OSUyMDM4''@;'; put 'put ''LjQ2MTM2NDclMkMxOC4xNjQyNDU2JTIwMzguNDYxMzY0NyUyQzE4LjE2NDI0NTYlMjBaJTIyJTIwaWQlM0QlMjJQYXRoLTE5NSUyMiUyMGZpbGwlM0QlMjIlMjNDMURGRUYlMjIlM0UlM0MlMkZwYXRoJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcGF0aCUy''@;'; put 'put ''MGQlM0QlMjJNNC43NDYzOTIyNiUyQzEyLjU2NjE4NTUlMjBMNC42MjA2NTcyNiUyQzEyLjE2MDUzNDglMjBMNS4zNTE1NDE0JTJDMTEuMTYyNTA0NCUyMEw1Ljc3NjIyMzg1JTJDMTEuMTU5OTM5JTIwTDYuMjA5MzYzMDklMkMxMi41NTczNDgxJTIwTDQuNzQ2MzkyMjYlMkMxMi41NjYxODU1''@;'; put 'put ''JTIwWiUyME02LjIwOTM2MzA5JTJDMTIuNTU3MzQ4MSUyMEw2LjMyNTQyNjMyJTJDMTIuOTMxNzk1NCUyMEwyOC40OTYzODU1JTJDMzQuODc5NjcxOCUyMEwyOC40OTYzODU1JTJDNDcuODA5NjY5MSUyMEwzMi42JTJDNDYuNDgzNjUxMyUyMEwzMi42JTJDMzQuODk5MjM2NSUyMEw1My45NzM0''@;'; put 'put ''OTQlMkMxMi43MDM1ODEzJTIwTDUzLjk3MzQ5NCUyQzEyLjI2ODgyMDElMjBMNi4yMDkzNjMwOSUyQzEyLjU1NzM0ODElMjBaJTIwTTU1LjM3MzQ5NCUyQzEwLjg2MDMzNzYlMjBMNTUuMzczNDk0JTJDMTMuMjY4MDY2NCUyMEwzNCUyQzM1LjQ2MzcyMTYlMjBMMzQlMkM0Ny41MDI1NDAxJTIw''@;'; put 'put ''TDI3LjA5NjM4NTUlMkM0OS43MzMzMzMzJTIwTDI3LjA5NjM4NTUlMkMzNS40NjM3MjE5JTIwTDUuMDkxNzk2ODglMkMxMy42ODA1NDIlMjBMNC4zMTMyNTMwMSUyQzExLjE2ODc3NjQlMjBMNTUuMzczNDk0JTJDMTAuODYwMzM3NiUyMFolMjIlMjBpZCUzRCUyMlBhdGgtMTQ5JTIyJTIwZmls''@;'; put 'put ''bCUzRCUyMiUyMzdGQkRERCUyMiUzRSUzQyUyRnBhdGglM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NlbGxpcHNlJTIwaWQlM0QlMjJPdmFsLTklMjIlMjBmaWxsJTNEJTIyJTIzRkZGRkZGJTIyJTIwY3glM0QlMjIzMCUyMiUyMGN5JTNEJTIyMTEuNzg1NjU0''@;'; put 'put ''JTIyJTIwcnglM0QlMjIyNiUyMiUyMHJ5JTNEJTIyNi43ODU2NTQwMSUyMiUzRSUzQyUyRmVsbGlwc2UlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk0zMCUyQzE3LjE3MTMwOCUyMEMzNi44NzcyMTc3JTJDMTcuMTcxMzA4JTIwNDMu''@;'; put 'put ''MzExMjI4MiUyQzE2LjQ2MTA3MDElMjA0OC4wMzEyMzcxJTJDMTUuMjI5MjEwNiUyMEM1MC4yNzc3NjExJTJDMTQuNjQyODk3NyUyMDUyLjA1MDc2MTklMkMxMy45NTc5Njc3JTIwNTMuMjIxNjIzMSUyQzEzLjIzNTQ5NzMlMjBDNTQuMTkzODU2NSUyQzEyLjYzNTU4ODYlMjA1NC42JTJDMTIu''@;'; put 'put ''MTE3NTg5MSUyMDU0LjYlMkMxMS43ODU2NTQlMjBDNTQuNiUyQzExLjQ1MzcxODklMjA1NC4xOTM4NTY1JTJDMTAuOTM1NzE5NCUyMDUzLjIyMTYyMzElMkMxMC4zMzU4MTA3JTIwQzUyLjA1MDc2MTklMkM5LjYxMzM0MDMyJTIwNTAuMjc3NzYxMSUyQzguOTI4NDEwMzQlMjA0OC4wMzEyMzcx''@;'; put 'put ''JTJDOC4zNDIwOTc0NiUyMEM0My4zMTEyMjgyJTJDNy4xMTAyMzc5NSUyMDM2Ljg3NzIxNzclMkM2LjQlMjAzMCUyQzYuNCUyMEMyMy4xMjI3ODIzJTJDNi40JTIwMTYuNjg4NzcxOCUyQzcuMTEwMjM3OTUlMjAxMS45Njg3NjI5JTJDOC4zNDIwOTc0NiUyMEM5LjcyMjIzODg2JTJDOC45Mjg0''@;'; put 'put ''MTAzNCUyMDcuOTQ5MjM4MTQlMkM5LjYxMzM0MDMyJTIwNi43NzgzNzY4OSUyQzEwLjMzNTgxMDclMjBDNS44MDYxNDM1JTJDMTAuOTM1NzE5NCUyMDUuNCUyQzExLjQ1MzcxODklMjA1LjQlMkMxMS43ODU2NTQlMjBDNS40JTJDMTIuMTE3NTg5MSUyMDUuODA2MTQzNSUyQzEyLjYzNTU4ODYl''@;'; put 'put ''MjA2Ljc3ODM3Njg5JTJDMTMuMjM1NDk3MyUyMEM3Ljk0OTIzODE0JTJDMTMuOTU3OTY3NyUyMDkuNzIyMjM4ODYlMkMxNC42NDI4OTc3JTIwMTEuOTY4NzYyOSUyQzE1LjIyOTIxMDYlMjBDMTYuNjg4NzcxOCUyQzE2LjQ2MTA3MDElMjAyMy4xMjI3ODIzJTJDMTcuMTcxMzA4JTIwMzAlMkMx''@;'; put 'put ''Ny4xNzEzMDglMjBaJTIwTTMwJTJDMTguNTcxMzA4JTIwQzE1LjY0MDU5NjUlMkMxOC41NzEzMDglMjA0JTJDMTUuNTMzMjY3MiUyMDQlMkMxMS43ODU2NTQlMjBDNCUyQzguMDM4MDQwNzglMjAxNS42NDA1OTY1JTJDNSUyMDMwJTJDNSUyMEM0NC4zNTk0MDM1JTJDNSUyMDU2JTJDOC4wMzgw''@;'; put 'put ''NDA3OCUyMDU2JTJDMTEuNzg1NjU0JTIwQzU2JTJDMTUuNTMzMjY3MiUyMDQ0LjM1OTQwMzUlMkMxOC41NzEzMDglMjAzMCUyQzE4LjU3MTMwOCUyMFolMjIlMjBpZCUzRCUyMk92YWwtOS1Db3B5JTIyJTIwZmlsbCUzRCUyMiUyMzdGQkRERCUyMiUzRSUzQyUyRnBhdGglM0UlMEElMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk0xOC4yNjA4NjQzJTJDNy4xNDU2Mjk4OCUyMEwyMi43MjczNTYlMkMxNi45MDQ3MjQxJTIwQzIyLjcyNzM1NiUyQzE2LjkwNDcyNDElMjAxNS4zMDA2NTkyJTJDMTYuMzkxMTc0MyUyMDEwLjI3NjAwMSUyQzE0''@;'; put 'put ''Ljc1MTE1OTclMjBDNS4yNTEzNDI3NyUyQzEzLjExMTE0NSUyMDUuMzgwMzEwMDYlMkMxMS44Mjg0MzAyJTIwNS4zODAzMTAwNiUyQzExLjY4ODI5MzUlMjBDNS4zODAzMTAwNiUyQzEwLjQ4MzI4MzElMjA4LjE2NjMzMTUyJTJDOS40MTg3NzcxNiUyMDExLjExNDU2MyUyQzguNTczMjQyMTkl''@;'; put 'put ''MjBDMTQuNTQ5MzE5JTJDNy41ODgxNzQ5MiUyMDE4LjI2MDg2NDMlMkM3LjE0NTYyOTg4JTIwMTguMjYwODY0MyUyQzcuMTQ1NjI5ODglMjBaJTIyJTIwaWQlM0QlMjJQYXRoLTE5NiUyMiUyMGZpbGwlM0QlMjIlMjNDMURGRUYlMjIlM0UlM0MlMkZwYXRoJTNFJTBBJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTNDJTJGZyUzRSUwQSUyMCUyMCUyMCUyMCUzQyUyRmclM0UlMEElM0MlMkZzdmclM0UiKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWhpZGRlbi1jb2x1bW4uZGF0YWdyaWQtY29sdW1uLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtaGlkZGVuLWNvbHVtbi5kYXRhZ3Jp''@;'; put 'put ''ZC1jZWxse2Rpc3BsYXk6bm9uZX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLXJvdy1zY3JvbGxhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3I6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXJlc2l6ZS1oYW5k''@;'; put 'put ''bGVyLWNvbG9yKX0uZGF0YWdyaWQtcm93LXJlcGxhY2VkIC5kYXRhZ3JpZC1zY3JvbGxpbmctY2VsbHMgLmRhdGFncmlkLWNlbGw6bm90KC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0KTpub3QoLmRhdGFncmlkLXJvdy1hY3Rpb25zKTpub3QoLmRhdGFncmlkLXNlbGVjdCl7ZGlzcGxheTpu''@;'; put 'put ''b25lfS5kYXRhZ3JpZC1yb3ctcmVwbGFjZWQgLmRhdGFncmlkLXJvdy1kZXRhaWwgLmRhdGFncmlkLWNlbGx7ZGlzcGxheTpibG9jaztwYWRkaW5nOnZhcigtLWNsci10YWJsZS1jZWxsLXBhZGRpbmcpfS5kYXRhZ3JpZC1yb3ctcmVwbGFjZWQgLmRhdGFncmlkLXJvdy1kZXRhaWwgLmRhdGFn''@;'; put 'put ''cmlkLWNlbGwuZGF0YWdyaWQtaGlkZGVuLWNvbHVtbntkaXNwbGF5Om5vbmV9LmRhdGFncmlkLXJvdy1yZXBsYWNlZCAuZGF0YWdyaWQtcm93LWRldGFpbCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldHtwYWRkaW5nLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpfS5kYXRhZ3JpZC1m''@;'; put 'put ''b290ZXJ7ZmxleDowIDAgYXV0bztkaXNwbGF5OmZsZXg7ZmxleC1mbG93OnJvdyBub3dyYXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6c3RyZXRjaDtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtm''@;'; put 'put ''b250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGlu''@;'; put 'put ''ZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGV0dGVyLXNwYWNpbmcpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRoZWFkLWJnY29sb3IpO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6dmFyKC0tY2xyLXRhYmxl''@;'; put 'put ''LWZvb3Rlci1ib3JkZXItdG9wLWNvbG9yKTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTtib3JkZXItdG9wOm5vbmU7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9y''@;'; put 'put ''ZGVyLXJhZGl1cy0xMDApO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCl9LmRhdGFncmlkLWZvb3RlciAucGFnaW5hdGlvbntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwO2p1c3Rp''@;'; put 'put ''ZnktY29udGVudDpmbGV4LWVuZDtnYXA6dmFyKC0tY2xyLWRhdGFncmlkLWZvb3Rlci1wYWdpbmF0aW9uLWdhcCl9LmRhdGFncmlkLWZvb3RlciAucGFnaW5hdGlvbi1zaXple2Rpc3BsYXk6YmxvY2s7ZmxleDoxIDEgYXV0bzt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1hbGlnbjpyaWdodH0u''@;'; put 'put ''ZGF0YWdyaWQtZm9vdGVyIC5wYWdpbmF0aW9uLXNpemUgLmNsci1wYWdlLXNpemUtc2VsZWN0e2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRp''@;'; put 'put ''b24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxldHRlci1zcGFjaW5nKTttYXJnaW4tbGVmdDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZGF0YWdyaWQtZm9vdGVyIC5wYWdpbmF0aW9uLWRlc2NyaXB0aW9ue3doaXRlLXNwYWNlOm5vd3JhcH0uZGF0YWdyaWQtZm9vdGVyIC5wYWdpbmF0''@;'; put 'put ''aW9uLWxpc3R7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uZGF0YWdyaWQtZm9vdGVyIC5jb2x1bW4tc3dpdGNoLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7ZmxleDowIDAgYXV0bztkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5kYXRhZ3JpZC1mb290ZXIgLmNv''@;'; put 'put ''bHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9ue21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpO3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemU7cGFkZGluZzp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1wYWRkaW5nKTtib3JkZXItY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWZpbGwtY29sb3IpO2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLXRleHQtY29sb3IpO21h''@;'; put 'put ''cmdpbjowfS5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9uLmRpc2FibGVkLC5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9uOmRpc2FibGVkLC5kYXRhZ3JpZC1mb290''@;'; put 'put ''ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9uLmRpc2FibGVkOmhvdmVyLC5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9uOmRpc2FibGVkOmhvdmVyLC5kYXRhZ3JpZC1mb290ZXIgLmNvbHVt''@;'; put 'put ''bi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9uLmRpc2FibGVkOmFjdGl2ZSwuZGF0YWdyaWQtZm9vdGVyIC5jb2x1bW4tc3dpdGNoLXdyYXBwZXIgLmNvbHVtbi10b2dnbGUtLWFjdGlvbjpkaXNhYmxlZDphY3RpdmV7Y3Vyc29yOm5vdC1hbGxvd2VkO2JvcmRlci1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1kaXNhYmxlZC1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtZGlzYWJsZWQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtZmlsbC1jb2xv''@;'; put 'put ''cil9LmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4tdG9nZ2xlLS1hY3Rpb246aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWJvcmRlci1ob3Zlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''ZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1maWxsLWhvdmVyLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS10ZXh0LWhvdmVyLWNvbG9yKX0uZGF0YWdyaWQtZm9vdGVyIC5jb2x1bW4tc3dpdGNoLXdyYXBwZXIgLmNvbHVtbi10b2dnbGUtLWFjdGlvbjphY3Rp''@;'; put 'put ''dmUsLmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4tdG9nZ2xlLS1hY3Rpb246Zm9jdXN7Ym94LXNoYWRvdzpub25lO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1ib3JkZXItYWN0aXZlLWNvbG9yKTtiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWZpbGwtYWN0aXZlLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS10ZXh0LWFjdGl2ZS1jb2xvcil9LmRhdGFncmlkLWZvb3RlciAuY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZHtkaXNw''@;'; put 'put ''bGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDoxMDAlfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5kYXRhZ3JpZC1mb290ZXItc2VsZWN0LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7Y3Vyc29yOmRlZmF1bHQ7bWFy''@;'; put 'put ''Z2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmRhdGFncmlkLWZvb3Rlci1zZWxlY3QuY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbDpiZWZvcmV7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItZm9ybXMtbGFiZWwtZGlzYWJsZWQtY29sb3IpfS5kYXRhZ3JpZC1zcGlubmVye3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aWR0aDoxMDAlO3RvcDp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTYpO2hlaWdodDpjYWxjKDEwMCUgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1sb2FkaW5nLWJhY2tncm91bmQpO3otaW5kZXg6NTkwfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1yb3ctcmVwbGFjZWQgLmRh''@;'; put 'put ''dGFncmlkLXJvdy1kZXRhaWwgLmRhdGFncmlkLWNlbGx7cGFkZGluZzp2YXIoLS1jbHItdGFibGUtY2VsbC1jb21wYWN0LXBhZGRpbmcpfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3I6YWZ0ZXJ7aGVpZ2h0OmNhbGMoMTAwJSAt''@;'; put 'put ''ICguNSp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci1leHBhbmRieSkpKX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1zZWxlY3R7cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlk''@;'; put 'put ''LWRldGFpbC1jYXJldC5kYXRhZ3JpZC1jZWxse3BhZGRpbmc6MH0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtY2VsbCBjbHItaWNvbnttYXJnaW4tdG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpO21hcmdpbi1ib3R0''@;'; put 'put ''b206Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpKTt0cmFuc2Zvcm06dHJhbnNsYXRlWShjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpKX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtY2VsbCBjZHMtaWNvbnttYXJnaW4tdG9wOmNhbGMoLTEqdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS0zKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpO21hcmdpbi1ib3R0b206Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpKX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtY2VsbCAuYmFkZ2V7bWFyZ2luLXRvcDpjYWxjKC0xKnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtMykpO21hcmdpbi1ib3R0b206Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldHt0ZXh0LWFsaWduOmNlbnRlcn0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZXhwYW5kYWJs''@;'; put 'put ''ZS1jYXJldCAuc3Bpbm5lcnttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBw''@;'; put 'put ''ZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRo''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7b3V0bGluZS1vZmZzZXQ6dmFyKC0tY2xyLWRhdGFncmlkLWNvbXBhY3Qtb3V0bGluZS1vZmZzZXQpfWJ1dHRvbi5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LWJ1''@;'; put 'put ''dHRvbntjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1pY29ue21hcmdpbjowfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LmRhdGFncmlkLWNlbGx7''@;'; put 'put ''cGFkZGluZzowfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LmRhdGFncmlkLWNvbHVtbntwYWRkaW5nLXRvcDpjYWxjKHZhcigtLWNsci10YWJsZS1jb21wYWN0LXZlcnRpY2FsLXBhZGRpbmcpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7cGFkZGlu''@;'; put 'put ''Zy1ib3R0b206dmFyKC0tY2xyLXRhYmxlLWNvbXBhY3QtdmVydGljYWwtcGFkZGluZyl9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLXNpZ25wb3N0LXRyaWdnZXIgLnNpZ25wb3N0IC5zaWducG9zdC10cmlnZ2VyIGNkcy1pY29uOm5vdChbc2hhcGU9aW5mby1jaXJjbGVdLFtzaGFwZT1l''@;'; put 'put ''eGNsYW1hdGlvbi10cmlhbmdsZV0sW3NoYXBlPWV4Y2xhbWF0aW9uLWNpcmNsZV0sW3NoYXBlPWNoZWNrLWNpcmNsZV0sW3NoYXBlPWluZm9dLFtzaGFwZT1lcnJvcl0pLC5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1zaWducG9zdC10cmlnZ2VyIC5zaWducG9zdCAuc2lnbnBvc3QtdHJp''@;'; put 'put ''Z2dlciBjbHItaWNvbjpub3QoW3NoYXBlPWluZm8tY2lyY2xlXSxbc2hhcGU9ZXhjbGFtYXRpb24tdHJpYW5nbGVdLFtzaGFwZT1leGNsYW1hdGlvbi1jaXJjbGVdLFtzaGFwZT1jaGVjay1jaXJjbGVdLFtzaGFwZT1pbmZvXSxbc2hhcGU9ZXJyb3JdKXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS05KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1mb290ZXJ7cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLWhlaWdodDp2YXIoLS1jbHItdGFibGUtY29tcGFjdC1yb3ctaGVpZ2h0KTtsaW5l''@;'; put 'put ''LWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpLXZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSl9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWZvb3RlciAucGFnaW5hdGlvbntsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5kYXRhZ3JpZC1jb21wYWN0IC5k''@;'; put 'put ''YXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9ue291dGxpbmUtb2Zmc2V0OnZhcigtLWNsci1kYXRhZ3JpZC1jb21wYWN0LW91dGxpbmUtb2Zmc2V0KX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZm9vdGVyIC5jbHItZm9ybS1j''@;'; put 'put ''b250cm9sLWRpc2FibGVkIC5kYXRhZ3JpZC1mb290ZXItc2VsZWN0LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7dG9wOjB9LmRhdGFncmlkLWZvb3Rlci1kZXNjcmlwdGlvbntmbGV4OjEgMSBhdXRvO2ZsZXgtd3JhcDpub3dyYXA7d2hp''@;'; put 'put ''dGUtc3BhY2U6bm93cmFwO2Rpc3BsYXk6YmxvY2s7dGV4dC1hbGlnbjpyaWdodDttYXJnaW46YXV0byAwfS5wYWdpbmF0aW9uLWxpc3R7bGlzdC1zdHlsZTpub25lO2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IG5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOnN0''@;'; put 'put ''cmV0Y2h9LnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1jdXJyZW50e2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC13ZWln''@;'; put 'put ''aHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxldHRlci1zcGFjaW5nKTtiYWNrZ3JvdW5kOjAgMDtiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0YXJlYS1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBhZ2luYXRpb24taW5wdXQtYm9yZGVyLWNvbG9yKTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAw''@;'; put 'put ''KTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTt0ZXh0LWFsaWduOmNlbnRlcjt0cmFuc2l0aW9uOm5vbmUhaW1wb3J0YW50fS5wYWdpbmF0''@;'; put 'put ''aW9uLWxpc3QgLnBhZ2luYXRpb24tY3VycmVudDpmb2N1cywucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0aW9uLWN1cnJlbnQuY2xyLWZvY3Vze2JhY2tncm91bmQ6MCAwO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1kYXRh''@;'; put 'put ''Z3JpZC1wYWdpbmF0aW9uLWlucHV0LWJvcmRlci1mb2N1cy1jb2xvcil9LnBhZ2luYXRpb24tbGlzdD4qe3BhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpfS5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tZmlyc3QsLnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1sYXN0''@;'; put 'put ''LC5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tcHJldmlvdXMsLnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1uZXh0e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb250YWlufS5wYWdpbmF0''@;'; put 'put ''aW9uLWxpc3QgLnBhZ2luYXRpb24tZmlyc3Q6ZGlzYWJsZWQsLnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1sYXN0OmRpc2FibGVkLC5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tcHJldmlvdXM6ZGlzYWJsZWQsLnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1uZXh0OmRpc2Fi''@;'; put 'put ''bGVke2NvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpO2N1cnNvcjpub3QtYWxsb3dlZDtvcGFjaXR5OjF9LnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1maXJzdCwucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0aW9uLXByZXZpb3Vze21hcmdpbi1yaWdodDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTYpfS5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tbGFzdCwucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0aW9uLW5leHR7bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0ucGFnaW5hdGlvbi1saXN0IGJ1dHRvbnstd2Via2l0LWFwcGVhcmFu''@;'; put 'put ''Y2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MDtwYWRkaW5nOjA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kOjAgMDtjb2xvcjp2YXIoLS1jbHItZGF0YWdy''@;'; put 'put ''aWQtcGFnaW5hdGlvbi1idG4tY29sb3IpO2N1cnNvcjpwb2ludGVyfWJ1dHRvbi5wYWdpbmF0aW9uLWxpc3QgYnV0dG9ue2N1cnNvcjpwb2ludGVyfS5kYXRhZ3JpZC1jZWxsLXdpZHRoLXplcm97Ym9yZGVyOjAhaW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnQ7d2lkdGg6MDtmbGV4OjAg''@;'; put 'put ''MCBhdXRvIWltcG9ydGFudDttaW4td2lkdGg6MCFpbXBvcnRhbnQ7ZGlzcGxheTpibG9jayFpbXBvcnRhbnQ7dmlzaWJpbGl0eTpoaWRkZW4haW1wb3J0YW50O3Bvc2l0aW9uOmFic29sdXRlIWltcG9ydGFudDt0b3A6MDtsZWZ0OjB9LmRhdGFncmlkLW91dGVyLXdyYXBwZXJ7ZGlzcGxheTpm''@;'; put 'put ''bGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LWdyb3c6MTtvdmVyZmxvdzphdXRvfS5kYXRhZ3JpZC1pbm5lci13cmFwcGVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1ncm93OjE7b3ZlcmZsb3c6YXV0bzttaW4td2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1iYXNlKSkpfS5kYXRhZ3JpZC1kZXRhaWwtb3Blbj4uZGF0YWdyaWQtb3V0ZXItd3JhcHBlcj4uZGF0YWdyaWQtaW5uZXItd3JhcHBlciBkaXYuZGF0YWdyaWQtdGFibGV7bWF4LXdpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVufS5kYXRhZ3JpZC1kZXRhaWwtb3Blbj4uZGF0''@;'; put 'put ''YWdyaWQtb3V0ZXItd3JhcHBlcj4uZGF0YWdyaWQtaW5uZXItd3JhcHBlcj4uY2RrLXZpcnR1YWwtc2Nyb2xsYWJsZSBkaXYuZGF0YWdyaWQtdGFibGV7b3ZlcmZsb3c6dW5zZXR9LmRhdGFncmlkLWRldGFpbC1vcGVuPi5kYXRhZ3JpZC1vdXRlci13cmFwcGVyPi5kYXRhZ3JpZC1pbm5lci13''@;'; put 'put ''cmFwcGVyIGNsci1kZy1jZWxse3dpZHRoOjEwMCUhaW1wb3J0YW50fS5kYXRhZ3JpZC1kZXRhaWwtb3Blbj4uZGF0YWdyaWQtb3V0ZXItd3JhcHBlcj4uZGF0YWdyaWQtaW5uZXItd3JhcHBlciBjbHItZGctY29sdW1uOmZpcnN0LWNoaWxke3dpZHRoOmF1dG8haW1wb3J0YW50fS5kYXRhZ3Jp''@;'; put 'put ''ZC1kZXRhaWwtb3BlbiAuZGF0YWdyaWR7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDtib3JkZXItcmlnaHQ6bm9uZX0uZGF0YWdyaWQtZGV0YWlsLW9wZW4gLmRhdGFncmlkLWlubmVyLXdyYXBwZXJ7d2lkdGg6MzQlfS5kYXRhZ3JpZC1kZXRhaWwtb3BlbiAuZGF0YWdyaWQtcGxhY2Vob2xk''@;'; put 'put ''ZXItY29udGFpbmVyLC5kYXRhZ3JpZC1kZXRhaWwtb3BlbiAuZGF0YWdyaWQtcm93e2JvcmRlci1yaWdodDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpfS5kYXRhZ3JpZC1kZXRhaWwtb3BlbiAuZGF0''@;'; put 'put ''YWdyaWQtZm9vdGVye2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9LmRhdGFncmlkLWRldGFpbC1vcGVuIC5wYWdpbmF0aW9ue3dpZHRoOjEwMCV9LmRhdGFncmlkLWRldGFpbC1vcGVuIC5wYWdpbmF0aW9uLWRlc2NyaXB0aW9uLWNvbXBhY3R7dGV4dC1hbGlnbjpsZWZ0O2ZsZXg6MX0u''@;'; put 'put ''ZGF0YWdyaWQtZGV0YWlsLW9wZW4gLmRhdGFncmlkLWZvb3RlciAucGFnaW5hdGlvbi1saXN0e21hcmdpbi1yaWdodDowfS5kYXRhZ3JpZC1yb3ctZGV0YWlsLW9wZW57cG9zaXRpb246cmVsYXRpdmV9LmRhdGFncmlkLXJvdy1kZXRhaWwtb3BlbjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5''@;'; put 'put ''OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXI6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmlnaHQtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcik7dG9wOmNhbGMoMTAqKDFyZW0vdmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1iYXNlKSkpO3JpZ2h0OjB9LmRhdGFncmlkLXJvdy1kZXRhaWwtb3BlbjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlcjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcG9wb3Zlci1iZy1jb2xvcik7dG9wOmNhbGMoMTEqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LmRhdGFncmlkLWRldGFpbC1wYW5le21hcmdpbi10b3A6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS02KTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1kZXRhaWwtcGFuZS1ib3JkZXItY29sb3IpO2JvcmRlci1sZWZ0Om5v''@;'; put 'put ''bmU7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7YmFja2dyb3VuZDp2YXIoLS1jbHItZGF0YWdy''@;'; put 'put ''aWQtZGV0YWlsLXBhbmUtYmctY29sb3IpO292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmJsb2NrO2ZsZXgtZ3JvdzoyO3dpZHRoOjY2JX0uZGF0YWdyaWQtZGV0YWlsLXBhbmUtY29udGVudHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO292ZXJmbG93OmF1dG87aGVpZ2h0OjEw''@;'; put 'put ''MCU7cGFkZGluZzp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtY29udGVudC1wYWRkaW5nKX0uZGF0YWdyaWQtZGV0YWlsLWJvZHl7ZmxleDoxIDEgYXV0bztwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykgMDtjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLWJv''@;'; put 'put ''ZHktdGV4dC1jb2xvcil9LmRhdGFncmlkLWRldGFpbC1oZWFkZXJ7ZmxleDowIDAgYXV0bztmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWln''@;'; put 'put ''aHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpO21hcmdpbi10b3A6MDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJl''@;'; put 'put ''Y3Rpb246cm93fS5kYXRhZ3JpZC1kZXRhaWwtaGVhZGVyIC5kYXRhZ3JpZC1kZXRhaWwtaGVhZGVyLXRpdGxle2ZsZXg6MSAxIGF1dG87Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWRldGFpbC1oZWFkZXItdGl0bGUtY29sb3IpfS5kYXRhZ3JpZC1kZXRhaWwtaGVhZGVyIC5kYXRhZ3JpZC1k''@;'; put 'put ''ZXRhaWwtcGFuZS1jbG9zZXtmbGV4OjEgMSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5kYXRhZ3JpZC1kZXRhaWwtaGVhZGVyIC5kYXRhZ3JpZC1kZXRhaWwtcGFuZS1jbG9zZSAuYnRuLmJ0bi1saW5re21pbi13aWR0''@;'; put 'put ''aDphdXRvO21hcmdpbjowO3BhZGRpbmctcmlnaHQ6MH0uZGF0YWdyaWQtZGV0YWlsLWhlYWRlciAuZGF0YWdyaWQtZGV0YWlsLXBhbmUtY2xvc2UgLmJ0bi5idG4tbGluayBjZHMtaWNvbntoZWlnaHQ6dmFyKC0tY2xyLWRhdGFncmlkLWRldGFpbC1wYW5lLWNsb3NlLWljb24tc2l6ZSk7d2lk''@;'; put 'put ''dGg6dmFyKC0tY2xyLWRhdGFncmlkLWRldGFpbC1wYW5lLWNsb3NlLWljb24tc2l6ZSk7bWluLWhlaWdodDp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtY2xvc2UtaWNvbi1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWRldGFpbC1wYW5lLWNsb3NlLWljb24tc2l6''@;'; put 'put ''ZSk7Y29sb3I6dmFyKC0tY2xyLW1vZGFsLWNsb3NlLWNvbG9yKX0uZGF0YWdyaWQtZGV0YWlsLWNhcmV0e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQuZGF0YWdyaWQtY2VsbHtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''MykgMH0uZGF0YWdyaWQtZGV0YWlsLWNhcmV0IC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3Jk''@;'; put 'put ''ZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2ludGVyO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9YnV0dG9uLmRhdGFncmlkLWRldGFpbC1jYXJldCAuZGF0''@;'; put 'put ''YWdyaWQtZGV0YWlsLWNhcmV0LWJ1dHRvbntjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtZGV0YWlsLWNhcmV0IC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtYnV0dG9uOmRpc2FibGVkIGNkcy1pY29uLmRhdGFncmlkLWRldGFpbC1jYXJldC1pY29uey0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9i''@;'; put 'put ''amVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCl9LmRhdGFncmlkLWRldGFpbC1jYXJldCAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWJ1dHRvbi5pcy1vcGVuIC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtaWNvbntib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVy''@;'; put 'put ''LXJhZGl1cy0xMDApO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWRldGFpbC1jYXJldC1pY29uLW9wZW4tYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtaWNvbi1vcGVuLWljb24tY29sb3IpfS5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQg''@;'; put 'put ''LmRhdGFncmlkLWRldGFpbC1jYXJldC1pY29ue2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1pY29uLWNvbG9yKX0uZGF0YWdyaWQtZGV0YWlsLWNhcmV0IC5zcGlubmVye21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KX0uZGF0YWdyaWQtZGV0YWlsLWNhcmV0LmRhdGFncmlk''@;'; put 'put ''LWNvbHVtbntwYWRkaW5nOnZhcigtLWNsci10YWJsZS10b3BjZWxscGFkZGluZykgdmFyKC0tY2xyLXRhYmxlLWNlbGxwYWRkaW5nKSB2YXIoLS1jbHItdGFibGUtYm90dG9tY2VsbHBhZGRpbmcpfS5kYXRhZ3JpZC1kZXRhaWwtb3ZlcmxheS5kYXRhZ3JpZC1kZXRhaWwtb3Blbj4uZGF0YWdy''@;'; put 'put ''aWQtb3V0ZXItd3JhcHBlcj4uZGF0YWdyaWQtaW5uZXItd3JhcHBlcnt3aWR0aDowO21pbi13aWR0aDp1bnNldH0uZGF0YWdyaWQtZGV0YWlsLW92ZXJsYXkgLmRhdGFncmlkLWRldGFpbC1wYW5le2JvcmRlci1sZWZ0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkg''@;'; put 'put ''c29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1kZXRhaWwtcGFuZS1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7d2lkdGg6MTAwJX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjU3NnB4''@;'; put 'put ''KXsuZGF0YWdyaWQtZGV0YWlsLW9wZW4+LmRhdGFncmlkLW91dGVyLXdyYXBwZXI+LmRhdGFncmlkLWlubmVyLXdyYXBwZXJ7ZGlzcGxheTpub25lfS5kYXRhZ3JpZC1kZXRhaWwtcGFuZXtib3JkZXItbGVmdDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlk''@;'; put 'put ''O2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApfX0uY29sdW1uLXN3aXRjaHtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtYm9yZGVyLXJhZGl1cy0xMDApO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJnLWNvbG9yKTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTti''@;'; put 'put ''b3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJvcmRlci1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS1jbHItZGF0YWdyaWQtcG9wb3ZlcnMtYm94LXNoYWRvdyk7d2lkdGg6Y2FsYygyNTAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNl''@;'; put 'put ''KSkpO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ei1pbmRleDoxMDUwfS5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVye2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vi''@;'; put 'put ''c2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpfS5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGgxLC5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGgyLC5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGgzLC5jb2x1bW4tc3dpdGNoIC5z''@;'; put 'put ''d2l0Y2gtaGVhZGVyIGg0LC5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGg1LC5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGg2e2NvbG9yOnZhcigtLWNsci1wMS1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC1zaXpl''@;'; put 'put ''KTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dy''@;'; put 'put ''YXBoeS1zdWJzZWN0aW9uLWxldHRlci1zcGFjaW5nKTttYXJnaW46MH0uY29sdW1uLXN3aXRjaCAuc3dpdGNoLWhlYWRlciBidXR0b257bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCk7bWFyZ2luOjA7cGFkZGluZzowfS5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGJ1''@;'; put 'put ''dHRvbiBjZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXN3aXRjaC1oZWFkZXItZm9udC1jb2xvcil9LmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1oZWFkZXIgYnV0dG9uIGNkcy1pY29uOmhvdmVye2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tc3dpdGNoLWhl''@;'; put 'put ''YWRlci1mb250LWhvdmVyLWNvbG9yKX0uY29sdW1uLXN3aXRjaCAuc3dpdGNoLWhlYWRlciBidXR0b24gY2RzLWljb246YWN0aXZle2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tc3dpdGNoLWhlYWRlci1mb250LWFjdGl2ZS1jb2xvcil9LmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1j''@;'; put 'put ''b250ZW50e21heC1oZWlnaHQ6Y2FsYygzMDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO292ZXJmbG93LXk6YXV0bzttaW4taGVpZ2h0OmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KSArIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkpfS5jb2x1''@;'; put 'put ''bW4tc3dpdGNoIC5zd2l0Y2gtY29udGVudCBsaXtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3BhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpfS5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtZm9vdGVyIC5idG57bWFyZ2luOjA7cGFkZGluZzowfS5jb2x1''@;'; put 'put ''bW4tc3dpdGNoIC5zd2l0Y2gtZm9vdGVyIC5hY3Rpb24tcmlnaHR7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZGF0YWdyaWQtZmlsdGVye21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTtiYWNrZ3JvdW5kOnZhcigtLWNsci1kYXRhZ3JpZC1wb3Bv''@;'; put 'put ''dmVyLWJnLWNvbG9yKTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJvcmRlci1jb2xvcik7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTgpO2JveC1zaGFkb3c6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXJzLWJveC1zaGFkb3cpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7Zm9udC13ZWlnaHQ6NDAwfS5kYXRhZ3JpZC1maWx0ZXIgLmRhdGFncmlkLWZpbHRl''@;'; put 'put ''ci1jbG9zZS13cmFwcGVye3RleHQtYWxpZ246cmlnaHR9LmRhdGFncmlkLWZpbHRlciAuZGF0YWdyaWQtZmlsdGVyLWNsb3NlLXdyYXBwZXIgLmNsb3Nle2Zsb2F0Om5vbmU7Zm9udC1zaXplOnVuc2V0fS5kYXRhZ3JpZC1maWx0ZXIgLmRhdGFncmlkLWZpbHRlci1hcHBseXttYXJnaW4tYm90''@;'; put 'put ''dG9tOjB9LmRhdGFncmlkLWZpbHRlciAuZGF0YWdyaWQtbnVtZXJpYy1maWx0ZXItZm9ybXtkaXNwbGF5OmZsZXg7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9LmRhdGFncmlkLWZpbHRlciAuZGF0YWdyaWQtbnVtZXJpYy1maWx0ZXItZm9ybSBpbnB1dC5kYXRhZ3JpZC1udW1lcmlj''@;'; put 'put ''LWZpbHRlci1pbnB1dHt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTE1KX0uZGF0YWdyaWQtZmlsdGVyIC5jbHItZm9ybS1jb250cm9se21hcmdpbi10b3A6MH0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93e3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dmFyKC0tY2xyLWRhdGFn''@;'; put 'put ''cmlkLXBvcG92ZXItYmctY29sb3IpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTttYXJnaW4tbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAw''@;'; put 'put ''KTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYm9yZGVyLWNvbG9yKTtib3gtc2hhZG93OnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVycy1ib3gtc2hhZG93KTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2Zv''@;'; put 'put ''bnQtd2VpZ2h0OjQwMDt3aGl0ZS1zcGFjZTpub3dyYXB9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdzpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjEwMCU7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoLTEqdmFyKC0tY2xyLWRhdGFn''@;'; put 'put ''cmlkLWFjdGlvbi1hcnJvdy1zaXplKSk7Ym9yZGVyLXRvcDp2YXIoLS1jbHItZGF0YWdyaWQtYWN0aW9uLWFycm93LXNpemUpIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206dmFyKC0tY2xyLWRhdGFncmlkLWFjdGlvbi1hcnJvdy1zaXplKSBzb2xpZCB0cmFuc3BhcmVudDtib3Jk''@;'; put 'put ''ZXItcmlnaHQtd2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWFjdGlvbi1hcnJvdy1zaXplKTtib3JkZXItcmlnaHQtc3R5bGU6c29saWQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJvcmRlci1jb2xvcil9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdzph''@;'; put 'put ''ZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7cmlnaHQ6MTAwJTtoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygtMSp2YXIoLS1jbHItZGF0YWdyaWQtYWN0aW9uLWFycm93LXNpemUpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7Ym9yZGVyLXRv''@;'; put 'put ''cDpjYWxjKHZhcigtLWNsci1kYXRhZ3JpZC1hY3Rpb24tYXJyb3ctc2l6ZSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOmNhbGModmFyKC0tY2xyLWRhdGFncmlkLWFjdGlvbi1hcnJvdy1zaXplKSAtIHZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtMSkpIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodC13aWR0aDpjYWxjKHZhcigtLWNsci1kYXRhZ3JpZC1hY3Rpb24tYXJyb3ctc2l6ZSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTtib3JkZXItcmlnaHQtc3R5bGU6c29saWQ7Ym9yZGVyLXJpZ2h0LWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJnLWNvbG9yKX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbXtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWRyb3Bkb3du''@;'; put 'put ''LWl0ZW0tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1jb2xvcik7YmFj''@;'; put 'put ''a2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1iZy1jb2xvcik7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6YXV0bzttYXJnaW46MDt3aWR0aDoxMDAl''@;'; put 'put ''O3RleHQtdHJhbnNmb3JtOm5vbmV9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW0uYWN0aXZle2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWJn''@;'; put 'put ''LWNvbG9yKX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTpob3Zlcntjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1ob3Zlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1ob3Zlci1iZy1jb2xvcik7dGV4dC1kZWNvcmF0''@;'; put 'put ''aW9uOm5vbmV9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW06aG92ZXIuYWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtaG92ZXItYmctY29sb3IpfS5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cgLmFjdGlvbi1pdGVt''@;'; put 'put ''OmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tYWN0aXZlLWJnLWNvbG9yKX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTphY3RpdmUuYWN0aXZle2Jh''@;'; put 'put ''Y2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtYWN0aXZlLWJnLWNvbG9yKX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTpmb2N1c3t6LWluZGV4OmluaGVyaXR9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW0u''@;'; put 'put ''ZGlzYWJsZWQsLmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW06ZGlzYWJsZWR7cG9pbnRlci1ldmVudHM6bm9uZTtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1kaXNhYmxlZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1k''@;'; put 'put ''aXNhYmxlZC1iZy1jb2xvcik7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW0uZGlzYWJsZWQ6aG92ZXIsLmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW06ZGlzYWJsZWQ6aG92''@;'; put 'put ''ZXJ7YmFja2dyb3VuZDowIDB9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW0uZGlzYWJsZWQ6YWN0aXZlLC5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cgLmFjdGlvbi1pdGVtOmRpc2FibGVkOmFjdGl2ZXtiYWNrZ3JvdW5kOjAgMDtib3gtc2hhZG93Om5vbmV9LmRhdGFn''@;'; put 'put ''cmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGV7ZGlzcGxheTpibG9ja30uZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQsLmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRhdGFncmlkLWZvb3RlciwuZGF0YWdyaWQtaG9z''@;'; put 'put ''dC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtcm93LW1hc3RlciwuZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtcm93LWNsaWNrYWJsZXtkaXNwbGF5Om5vbmV9LmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRh''@;'; put 'put ''dGFncmlkLWNhbGN1bGF0aW9uLXRhYmxle2Rpc3BsYXk6dGFibGU7dGFibGUtbGF5b3V0OmF1dG99LmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRhdGFncmlkLWNhbGN1bGF0aW9uLXRhYmxlIC5kYXRhZ3JpZC1jYWxjdWxhdGlvbi1oZWFkZXJ7ZGlzcGxheTp0YWJs''@;'; put 'put ''ZS1oZWFkZXItZ3JvdXB9LmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRhdGFncmlkLWNhbGN1bGF0aW9uLXRhYmxlIC5kYXRhZ3JpZC1jYWxjdWxhdGlvbi1oZWFkZXIgLmRhdGFncmlkLWNvbHVtbntkaXNwbGF5OnRhYmxlLWNlbGw7bWluLXdpZHRoOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtMTUpfS5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1jYWxjdWxhdGlvbi10YWJsZSAuZGF0YWdyaWQtY2FsY3VsYXRpb24taGVhZGVyIC5kYXRhZ3JpZC1jb2x1bW57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci10YWJsZXJvdy1i''@;'; put 'put ''b3JkZXJjb2xvcik7Ym9yZGVyLXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCk7Ym9yZGVyLXN0eWxlOnNvbGlkO3BhZGRpbmc6dmFyKC0tY2xyLXRhYmxlLXRvcGNlbGxwYWRkaW5nKSB2YXIoLS1jbHItdGFibGUtY2VsbHBhZGRpbmcpIHZhcigtLWNsci10YWJsZS1ib3R0b21j''@;'; put 'put ''ZWxscGFkZGluZyk7dmVydGljYWwtYWxpZ246dG9wO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbi1ib3R0b206MH0uZGF0''@;'; put 'put ''YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtY2FsY3VsYXRpb24tdGFibGUgLmRhdGFncmlkLXJvd3tkaXNwbGF5OnRhYmxlLXJvd30uZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtY2FsY3VsYXRpb24tdGFibGUgLmRh''@;'; put 'put ''dGFncmlkLXJvdyBjbHItZXhwYW5kYWJsZS1hbmltYXRpb257ZGlzcGxheTpub25lfS5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1jYWxjdWxhdGlvbi10YWJsZSAuZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1jZWxse2Rpc3BsYXk6dGFibGUtY2VsbDtt''@;'; put 'put ''aW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xNSk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpO3BhZGRpbmc6dmFyKC0tY2xyLXRhYmxlLXRvcGNlbGxwYWRkaW5nKSB2YXIoLS1jbHItdGFibGUtY2VsbHBhZGRpbmcpIHZhcigtLWNsci10YWJs''@;'; put 'put ''ZS1ib3R0b21jZWxscGFkZGluZyk7dmVydGljYWwtYWxpZ246dG9wfS5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yLC5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1wbGFjZWhvbGRl''@;'; put 'put ''ci1jb250YWluZXIsLmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRhdGFncmlkLWZpeGVkLWNvbHVtbntkaXNwbGF5Om5vbmV9QGtleWZyYW1lcyBjbHItc2tlbGV0b24tbG9hZGluZ3swJXtiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6MH10b3tiYWNrZ3JvdW5kLXBvc2l0''@;'; put 'put ''aW9uLXg6LTIwMCV9fS5mYWRle29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjJzIGVhc2UtaW4tb3V0O3dpbGwtY2hhbmdlOm9wYWNpdHl9LmZhZGUuaW57b3BhY2l0eToxfS5mYWRlRG93bntvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTI1JSk7dHJhbnNpdGlvbjpvcGFj''@;'; put 'put ''aXR5IC4ycyBlYXNlLWluLW91dCx0cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0O3dpbGwtY2hhbmdlOm9wYWNpdHksdHJhbnNmb3JtfS5mYWRlRG93bi5pbntvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwKX0uc2tlbGV0b24tbG9hZGluZzpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5''@;'; put 'put ''OmlubGluZS1ibG9jazt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7YmFja2dyb3VuZDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LXNrZWxldG9uLWxvYWRpbmctZ3JhZGllbnQpO2FuaW1hdGlvbjp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWFuaW1hdGlvbi1za2VsZXRvbi1kdXJhdGlvbikgY2xyLXNrZWxldG9uLWxvYWRpbmcgdmFyKC0tY2RzLWdsb2JhbC1hbmltYXRpb24tZWFzaW5nLWluLW91dCkgaW5maW5pdGU7YmFja2dyb3VuZC1zaXplOjIwMCUgMTAwJX06cm9vdCBbY2RzLXRoZW1lXXstLWNs''@;'; put 'put ''ci13aXphcmQtZGVmYXVsdC1zcGFjZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpOy0tY2xyLXdpemFyZC1tYWluLWJnY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vdmVybGF5LWJhY2tncm91bmQpOy0tY2xyLXdpemFyZC1tYWluLXRleHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5''@;'; put 'put ''cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci13aXphcmQtc3RlcG5hdi1iZ2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZCk7LS1jbHItd2l6YXJkLXN0ZXBuYXYtdGV4dDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xy''@;'; put 'put ''LXdpemFyZC1zdGVwbmF2LXRleHQtYWN0aXZlOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci13aXphcmQtc3RlcG5hdi10ZXh0LWhvdmVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLXdp''@;'; put 'put ''emFyZC1zdGVwbmF2LXRleHQtLWFjdGl2ZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLXNlbGVjdGVkKTstLWNsci13aXphcmQtc3RlcG5hdi10ZXh0LWRpc2FibGVkOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci13aXphcmQtc3Rl''@;'; put 'put ''cG5hdi1pdGVtLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtdGludCk7LS1jbHItd2l6YXJkLXN0ZXBuYXYtYm9yZGVyLXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTstLWNsci13aXphcmQtc3RlcG5hdi1pdGVtLWJvcmRlci1jb2xvci0tYWN0aXZl''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItd2l6YXJkLXN0ZXBuYXYtc2VsZWN0ZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLXdpemFyZC1zdGVwbmF2LWFjdGl2ZS1iZ2Nv''@;'; put 'put ''bG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZCk7LS1jbHItd2l6YXJkLXN0ZXBuYXYtc2VsZWN0ZWQtYmdjb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtYWN0aXZlLWJnY29sb3IpOy0tY2xyLXdpemFyZC1zdGVwbmF2LXNlbGVj''@;'; put 'put ''dGVkLWhvdmVyLWJnY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci13aXphcmQtc3RlcG5hdi1zZWxlY3RlZC1hY3RpdmUtYmdjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tn''@;'; put 'put ''cm91bmQtc2VsZWN0ZWQtYWN0aXZlKTstLWNsci13aXphcmQtc3RlcG5hdi1saW5rLWVycm9yLWljb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstY29tcGxldGUtaWNvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVz''@;'; put 'put ''LXN1Y2Nlc3MpOy0tY2xyLXdpemFyZC1zdGVwbmF2LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1ib3JkZXItY29sb3IpOy0tY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlv''@;'; put 'put ''bi1iYWNrZ3JvdW5kLWhvdmVyKTstLWNsci13aXphcmQtc3RlcG5hdi1saW5rLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtYWN0aXZlKTstLWNsci13aXphcmQtc3RlcG5hdi1saW5rLXBhZGRpbmc6Y2FsYyh2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTUpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7LS1jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbS1lcnJvci1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLXdpemFyZC10aXRsZS10ZXh0OnZhcigtLWNkcy1hbGlhcy10eXBv''@;'; put 'put ''Z3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItd2l6YXJkLWZvb3Rlci1oZWlnaHQ6YXV0bzstLWNsci13aXphcmQtaGVhZGVyLWFjdGlvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci13aXphcmQtaGVhZGVyLWFjdGlvbi1jb2xvci0taG92ZXJl''@;'; put 'put ''ZDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci13aXphcmQtYm94LXNoYWRvdzp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LXNoYWRvdy0zMDApOy0tY2xyLXdpemFyZC1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVy''@;'; put 'put ''LXJhZGl1cy0xMDApOy0tY2xyLXdpemFyZC1jb250ZW50LWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCl9LmNsci13aXphcmQgLm1vZGFsLWRpYWxvZ3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0''@;'; put 'put ''ZW1zOmNlbnRlcjtib3gtc2hhZG93OnZhcigtLWNsci13aXphcmQtYm94LXNoYWRvdyk7aGVpZ2h0OjUwJTttYXgtaGVpZ2h0OjEwMCV9LmNsci13aXphcmQgLm1vZGFsLWNvbnRlbnR7Ym9yZGVyLXJhZGl1czowIHZhcigtLWNsci13aXphcmQtYm9yZGVyLXJhZGl1cykgdmFyKC0tY2xyLXdp''@;'; put 'put ''emFyZC1ib3JkZXItcmFkaXVzKSAwO2JveC1zaGFkb3c6bm9uZTtwYWRkaW5nOjA7ZmxleDoyIDIgYXV0bzt3aWR0aDo2NiU7aGVpZ2h0OmluaXRpYWw7b3ZlcmZsb3c6aGlkZGVuO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY2xy''@;'; put 'put ''LXdpemFyZCAubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxle2ZsZXg6MCAwIGF1dG87d2lkdGg6MTAwJTtwYWRkaW5nOnZhcigtLWNsci13aXphcmQtZGVmYXVsdC1zcGFjZSkgdmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKSAwfS5jbHItd2l6YXJkIC5tb2RhbC10aXRsZXtjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItd2l6YXJkLXRpdGxlLXRleHQpO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7d2lkdGg6MTAwJX0uY2xyLXdpemFyZCAubW9kYWwtYm9keXtmbGV4OjEgMSBhdXRvO2NvbG9yOnZhcigtLWNsci13aXphcmQtbWFpbi10ZXh0LWNvbG9yKTt3aWR0aDoxMDAlO3BhZGRp''@;'; put 'put ''bmc6dmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKX0uY2xyLXdpemFyZCAubW9kYWwtZm9vdGVye2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtmbGV4OjAgMCB2YXIoLS1jbHItd2l6YXJkLWZvb3Rlci1oZWlnaHQpO2hlaWdodDp2YXIoLS1jbHItd2l6YXJkLWZvb3Rlci1oZWlnaHQp''@;'; put 'put ''O21pbi1oZWlnaHQ6dmFyKC0tY2xyLXdpemFyZC1mb290ZXItaGVpZ2h0KTttYXgtaGVpZ2h0OnZhcigtLWNsci13aXphcmQtZm9vdGVyLWhlaWdodCk7cGFkZGluZzowIHZhcigtLWNsci13aXphcmQtZGVmYXVsdC1zcGFjZSkgdmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKX0uY2xy''@;'; put 'put ''LXdpemFyZCAuY2xyLXdpemFyZC1idG57bWFyZ2luOjA7bWF4LXdpZHRoOjEwMCU7ZGlzcGxheTpibG9ja30uY2xyLXdpemFyZCAubW9kYWwtdGl0bGUtdGV4dHtkaXNwbGF5OmlubGluZS1ibG9jaztmbGV4OjAgMSBhdXRvO3dpZHRoOjEwMCU7b3V0bGluZTowfS5jbHItd2l6YXJkIC5tb2Rh''@;'; put 'put ''bC10aXRsZS13cmFwcGVye3dpZHRoOjEwMCV9LmNsci13aXphcmQgLm1vZGFsLWhlYWRlci1hY3Rpb25zLXdyYXBwZXJ7ZmxleDoxIDAgYXV0bztoZWlnaHQ6dmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKTtwYWRkaW5nLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtwYWRk''@;'; put 'put ''aW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmNsci13aXphcmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbi13cmFwcGVye2Rpc3BsYXk6aW5saW5lLWZsZXh9LmNsci13aXphcmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbntoZWlnaHQ6dmFyKC0tY2xyLXdpemFyZC1k''@;'; put 'put ''ZWZhdWx0LXNwYWNlKTt3aWR0aDp2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2UpO2JvcmRlcjowO3BhZGRpbmc6MDttYXJnaW46MDttaW4td2lkdGg6dmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKTtsaW5lLWhlaWdodDp2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2Up''@;'; put 'put ''O2ZvbnQtc2l6ZTp2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2UpO2NvbG9yOnZhcigtLWNsci13aXphcmQtaGVhZGVyLWFjdGlvbi1jb2xvcik7dHJhbnNpdGlvbjpjb2xvciBsaW5lYXIgLjJzfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWhlYWRlci1hY3Rpb24gYXtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItd2l6YXJkLWhlYWRlci1hY3Rpb24tY29sb3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWhlYWRlci1hY3Rpb246aG92ZXIsLmNsci13aXphcmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbjphY3RpdmUsLmNsci13aXphcmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbjpmb2N1''@;'; put 'put ''c3tjb2xvcjp2YXIoLS1jbHItd2l6YXJkLWhlYWRlci1hY3Rpb24tY29sb3ItLWhvdmVyZWQpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWhlYWRlci1hY3Rpb24gY2RzLWljb24sLmNsci13aXphcmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbiBjbHItaWNvbntoZWlnaHQ6dmFyKC0tY2xy''@;'; put 'put ''LXdpemFyZC1kZWZhdWx0LXNwYWNlKTt3aWR0aDp2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2UpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtd3JhcHBlcntmbGV4OjEgMSBhdXRvO2hlaWdodDoxMDAlO3dpZHRoOjM0JTttYXgtd2lkdGg6MzQlO2Rpc3BsYXk6ZmxleDtm''@;'; put 'put ''bGV4LWRpcmVjdGlvbjpjb2x1bW47b3JkZXI6LTE7b3ZlcmZsb3c6aGlkZGVuO292ZXJmbG93LXk6YXV0bztib3JkZXItcmlnaHQ6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJ3aWR0aCkgc29saWQgdmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtYmdjb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItd2l6YXJkLWJvcmRlci1yYWRpdXMpIDAgMCB2YXIoLS1jbHItd2l6YXJkLWJvcmRlci1yYWRpdXMpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXZ7cGFkZGluZzowIDAgdmFy''@;'; put 'put ''KC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKSB2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2UpO2Rpc3BsYXk6YmxvY2s7Y29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LXRleHQpO3dpZHRoOjEwMCU7ZmxleDoxIDEgYXV0b30uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVw''@;'; put 'put ''bmF2LWxpc3R7ZGlzcGxheTpibG9jaztib3gtc2hhZG93Om5vbmU7Y291bnRlci1yZXNldDphO3doaXRlLXNwYWNlOm5vd3JhcDtoZWlnaHQ6YXV0bztsaXN0LXN0eWxlLXR5cGU6bm9uZTttYXJnaW46MDt3aWR0aDoxMDAlfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbXtk''@;'; put 'put ''aXNwbGF5OmJsb2NrO2JvcmRlci1sZWZ0OnZhcigtLWNsci13aXphcmQtc3RlcG5hdi1ib3JkZXItc2l6ZSkgc29saWQgdmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0tYm9yZGVyLWNvbG9yKTttYXJnaW4tYm90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSk7Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLXdpemFyZC1zdGVwbmF2LXRleHQpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWJnY29sb3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbSBidXR0b24uY2xyLXdpemFyZC1zdGVwbmF2LWxpbmt7Y29sb3I6aW5oZXJpdDtiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOmluaGVyaXR9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1pdGVtLmRpc2FibGVke2NvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi10ZXh0LWRpc2FibGVkKX0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0uYWN0aXZle2NvbG9yOnZhcigt''@;'; put 'put ''LWNsci13aXphcmQtc3RlcG5hdi10ZXh0LS1hY3RpdmUpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LXNlbGVjdGVkLWJnY29sb3IpO2JvcmRlci1sZWZ0LWNvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi1zZWxlY3RlZC1ib3JkZXItY29sb3IpfS5jbHIt''@;'; put 'put ''d2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbS5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtc2VsZWN0ZWQtaG92ZXItYmdjb2xvcil9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1pdGVtLmFjdGl2ZTphY3RpdmV7YmFj''@;'; put 'put ''a2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtc2VsZWN0ZWQtYWN0aXZlLWJnY29sb3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbTpub3QoLmRpc2FibGVkKTpub3QoLmFjdGl2ZSk6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2''@;'; put 'put ''LXRleHQtaG92ZXIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstaG92ZXItYmctY29sb3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbTpub3QoLmRpc2FibGVkKTpub3QoLmFjdGl2ZSk6YWN0aXZle2NvbG9yOnZhcigtLWNsci13''@;'; put 'put ''aXphcmQtc3RlcG5hdi10ZXh0LWFjdGl2ZSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtbGluay1hY3RpdmUtYmctY29sb3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbSAuY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstdGl0bGV7d29yZC1i''@;'; put 'put ''cmVhazpicmVhay13b3JkO3doaXRlLXNwYWNlOm5vcm1hbH0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0uY29tcGxldGV7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi1pdGVtLWJvcmRlci1jb2xvci0tYWN0aXZlKTt0cmFuc2l0aW9uOmJvcmRlci1j''@;'; put 'put ''b2xvciAuMnMgZWFzZS1pbn0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0uY29tcGxldGUgLmNsci13aXphcmQtc3RlcG5hdi1saW5rLWljb24gY2RzLWljb257LS1jb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtbGluay1jb21wbGV0ZS1pY29uLWNvbG9yKX0uY2xy''@;'; put 'put ''LXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0uZXJyb3J7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi1pdGVtLWVycm9yLWJvcmRlci1jb2xvcik7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjJzIGVhc2UtaW59LmNsci13aXphcmQgLmNsci13aXphcmQtc3Rl''@;'; put 'put ''cG5hdi1pdGVtLmVycm9yIC5jbHItd2l6YXJkLXN0ZXBuYXYtbGluay1pY29uIGNkcy1pY29uey0tY29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstZXJyb3ItaWNvbi1jb2xvcil9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1pdGVtLm5vLWNsaWNrIGJ1dHRvbntw''@;'; put 'put ''b2ludGVyLWV2ZW50czpub25lfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtbGlua3t3aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDtwbGFjZS1jb250ZW50Om5vcm1hbDtjb2xvcjppbmhlcml0O2FsaWduLWl0ZW1zOmNlbnRlcjt0ZXh0LWFsaWduOmxlZnQ7dGV4dC10cmFuc2Zvcm06''@;'; put 'put ''bm9uZTttYXJnaW46MDtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7aGVpZ2h0OmF1dG87bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyKTttYXgtd2lkdGg6aW5oZXJpdDtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNp''@;'; put 'put ''emUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LW1lZGl1bSk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9k''@;'; put 'put ''eS1sZXR0ZXItc3BhY2luZyl9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1saW5rIC5jbHItd2l6YXJkLXN0ZXBuYXYtbGluay1pY29ue2Rpc3BsYXk6ZmxleH0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWxpbmsgLmNsci13aXphcmQtc3RlcG5hdi1saW5rLWljb24s''@;'; put 'put ''LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1saW5rIC5jbHItd2l6YXJkLXN0ZXBuYXYtbGluay1wYWdlLW51bWJlcnt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXRpdGxle21hcmdpbi10b3A6MDtmbGV4OjAgMCBhdXRvO2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci13aXphcmQtdGl0bGUtdGV4dCk7cGFkZGluZzp2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2UpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktc2VjdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3BhY2luZyl9LmNsci13aXphcmQgLm1v''@;'; put 'put ''ZGFsLWNvbnRlbnQtd3JhcHBlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXg6MSAxIDEwMCU7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNsci13aXphcmQgLm1vZGFsLWNvbnRlbnQtd3JhcHBlciAubW9kYWwtbmF2e2hlaWdodDphdXRvfS5j''@;'; put 'put ''bHItd2l6YXJkIC5jbHItd2l6YXJkLWZvb3Rlci1idXR0b25ze3RleHQtYWxpZ246cmlnaHQ7bWFyZ2luOjB9LmNsci13aXphcmQgLmNsci13aXphcmQtZm9vdGVyLWJ1dHRvbnMtd3JhcHBlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDpub3dyYXA7anVzdGlm''@;'; put 'put ''eS1jb250ZW50OmZsZXgtZW5kO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWJ0bi13cmFwcGVye2ZsZXg6MCAxIGF1dG99LmNsci13aXphcmQgLmNsci13aXphcmQtYnRuLXdyYXBwZXJbYXJpYS1oaWRkZW49dHJ1ZV17ZGlzcGxheTpub25l''@;'; put 'put ''fS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWJ0bi5idG4tbGlua3twYWRkaW5nOjB9LmNsci13aXphcmQgLmNsci13aXphcmQtY29udGVudHtkaXNwbGF5OmJsb2NrfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXBhZ2U6bm90KFthcmlhLWhpZGRlbj10cnVlXSl7ZGlzcGxheTpibG9ja30uY2xy''@;'; put 'put ''LXdpemFyZCAubW9kYWwtZGlhbG9ne2hlaWdodDo3NXZofS5jbHItd2l6YXJkIC5tb2RhbC1ib2R5LXdyYXBwZXJ7bWF4LWhlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWdyb3c6MTt3aWR0aDoxMDAlfS5jbHItd2l6YXJkLndpemFyZC1tZCAubW9kYWwtZGlhbG9ne21pbi1oZWlnaHQ6''@;'; put 'put ''Y2FsYyg0MjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC1oZWlnaHQ6Y2FsYyg1MDQqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5jbHItd2l6YXJkLndpemFyZC1tZCAubW9kYWwtY29udGVudCwuY2xyLXdpemFyZC53aXphcmQtbWQgLmNsci13aXphcmQtc3Rl''@;'; put 'put ''cG5hdi13cmFwcGVye21heC1oZWlnaHQ6Y2FsYyg1MDQqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5jbHItd2l6YXJkLndpemFyZC1tZCAuY2xyLXdpemFyZC1zdGVwbmF2LXdyYXBwZXJ7bWluLXdpZHRoOmNhbGMoMjE2KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtt''@;'; put 'put ''YXgtd2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5jbHItd2l6YXJkLndpemFyZC1sZyAubW9kYWwtZGlhbG9ne21pbi1oZWlnaHQ6Y2FsYyg0MjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC1oZWlnaHQ6Y2FsYyg3MjAqKDFyZW0vdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5jbHItd2l6YXJkLndpemFyZC1sZyAubW9kYWwtY29udGVudCwuY2xyLXdpemFyZC53aXphcmQtbGcgLmNsci13aXphcmQtc3RlcG5hdi13cmFwcGVye21heC1oZWlnaHQ6Y2FsYyg3MjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5jbHIt''@;'; put 'put ''d2l6YXJkLndpemFyZC1sZyAubmF2LXBhbmVsLC5jbHItd2l6YXJkLndpemFyZC1sZyAuY2xyLXdpemFyZC1zdGVwbmF2LXdyYXBwZXJ7bWluLXdpZHRoOmNhbGMoMjQwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttYXgtd2lkdGg6Y2FsYygyODgqKDFyZW0vdmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1iYXNlKSkpfS5jbHItd2l6YXJkLndpemFyZC14bCAubW9kYWwtZGlhbG9ne2hlaWdodDo3NXZoO21heC1oZWlnaHQ6bm9uZX0uY2xyLXdpemFyZC53aXphcmQteGwgLm5hdi1wYW5lbCwuY2xyLXdpemFyZC53aXphcmQteGwgLmNsci13aXphcmQtc3RlcG5hdi13cmFwcGVye21pbi13''@;'; put 'put ''aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWF4LXdpZHRoOmNhbGMoMzIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0uY2xyLXdpemFyZCAuc3Bpbm5lcjpub3QoLnNwaW5uZXItaW5saW5lKTpub3QoLmNsci10cmVlbm9kZS1zcGlubmVyKXts''@;'; put 'put ''ZWZ0OmNhbGMoNTAlICsgY2FsYygxMTUqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpKTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NDAlfS5jbHItd2l6YXJkLXBhZ2U+OmZpcnN0LWNoaWxke21hcmdpbi10b3A6MH0uY2xyLXdpemFyZC1wYWdlPjpmaXJzdC1jaGlsZD46Zmlyc3QtY2hp''@;'; put 'put ''bGR7bWFyZ2luLXRvcDowfS5jbHItd2l6YXJkLXBhZ2U+Zm9ybTpmaXJzdC1jaGlsZHtwYWRkaW5nLXRvcDowfS5jbHItd2l6YXJkLXBhZ2U+Zm9ybTpmaXJzdC1jaGlsZD4uZm9ybS1ibG9jazpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9LmNsci13aXphcmQtLWlubGluZXtkaXNwbGF5OmJs''@;'; put 'put ''b2NrO3dpZHRoOjEwMCV9LmNsci13aXphcmQtLWlubGluZT5jbHItbW9kYWw+Lm1vZGFsOmZvY3Vze291dGxpbmUtc3R5bGU6bm9uZTtvdXRsaW5lLWNvbG9yOnRyYW5zcGFyZW50fS5jbHItd2l6YXJkLS1pbmxpbmUgY2xyLW1vZGFse2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7ZGlzcGxheTpi''@;'; put 'put ''bG9ja30uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbHtwYWRkaW5nOjA7cG9zaXRpb246c3RhdGljO2hlaWdodDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbCAuY29udGVudC1jb250YWluZXJ7aGVpZ2h0OjEwMCV9LmNsci13aXphcmQtLWlubGluZSAu''@;'; put 'put ''bW9kYWwgLmNvbnRlbnQtY29udGFpbmVyIC5uYXYtcGFuZWx7aGVpZ2h0Ojk5JTt3aWR0aDo5OSV9LmNsci13aXphcmQtLWlubGluZSAubW9kYWwgLm1vZGFsLWNvbnRlbnR7Ym94LXNoYWRvdzpub25lfS5jbHItd2l6YXJkLS1pbmxpbmUgLm1vZGFsIC5tb2RhbC1kaWFsb2d7bWluLWhlaWdo''@;'; put 'put ''dDoxMDAlO2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7ei1pbmRleDphdXRvfS5jbHItd2l6YXJkLS1pbmxpbmUgLm1vZGFsLWJvZHktd3JhcHBlcntoZWlnaHQ6MTAwJX0uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbC1oZWFkZXIgLmNsb3Nle2Rpc3BsYXk6bm9uZX0uY2xyLXdpemFyZC0taW5s''@;'; put 'put ''aW5lIC5uYXYubmF2TGlzdHtwYWRkaW5nLXRvcDowfS5jbHItd2l6YXJkLS1pbmxpbmUgLm1vZGFsLWRpYWxvZyAubW9kYWwtY29udGVudCAubW9kYWwtYm9keSAuY29udGVudC1hcmVhe292ZXJmbG93LXk6YXV0b30uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbC1iYWNrZHJvcHtoZWlnaHQ6''@;'; put 'put ''MDt3aWR0aDowO2Rpc3BsYXk6bm9uZX0uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbC1jb250ZW50LXdyYXBwZXJ7YWxpZ24taXRlbXM6c3RyZXRjaDtoZWlnaHQ6MTAwJX0uY2xyLXdpemFyZC0taW5saW5lIC5jbHItd2l6YXJkLXN0ZXBuYXYtd3JhcHBlciwuY2xyLXdpemFyZC0taW5saW5l''@;'; put 'put ''LmNsci13aXphcmQgLm1vZGFsLWNvbnRlbnR7bWluLWhlaWdodDoxMDAlO2hlaWdodDphdXRvO21heC1oZWlnaHQ6MTAwJX0uY2xyLXdpemFyZC0taW5saW5lIC5jbHItd2l6YXJkLXN0ZXBuYXYtd3JhcHBlciAuY2xyLXdpemFyZC1zdGVwbmF2LC5jbHItd2l6YXJkLS1pbmxpbmUuY2xyLXdp''@;'; put 'put ''emFyZCAubW9kYWwtY29udGVudCAuY2xyLXdpemFyZC1zdGVwbmF2e2hlaWdodDoxMDAlfS5jbHItd2l6YXJkLS1uby1zaGFkb3cgLm1vZGFsLWNvbnRlbnQtd3JhcHBlciwuY2xyLXdpemFyZC0tbm8tc2hhZG93IC5tb2RhbC1kaWFsb2d7Ym94LXNoYWRvdzpub25lfS5jbHItd2l6YXJkLS1u''@;'; put 'put ''by10aXRsZSAuY2xyLXdpemFyZC10aXRsZXtkaXNwbGF5Om5vbmV9LmNsci13aXphcmQtLW5vLXRpdGxlIC5jbHItd2l6YXJkLXN0ZXBuYXZ7cGFkZGluZy10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0ubWFpbi1jb250YWluZXIgLmNvbnRlbnQtY29udGFpbmVyIC5jb250ZW50LWFy''@;'; put 'put ''ZWEgLndpemFyZC1pbi1wYWdlLndpemFyZC1pbi1wYWdlLS1maWxsLWNvbnRlbnQtYXJlYXtkaXNwbGF5OmJsb2NrO2hlaWdodDpjYWxjKDEwMCUgKyAyLjRyZW0pO21hcmdpbjotMS4ycmVtfS53aXphcmQtaW4tcGFnZSAuY2xyLXdpemFyZC1mb290ZXItYnV0dG9ucy13cmFwcGVye2p1c3Rp''@;'; put 'put ''ZnktY29udGVudDpmbGV4LXN0YXJ0fUBtZWRpYSBzY3JlZW57LmNsci13aXphcmQtcGFnZVthcmlhLWhpZGRlbj10cnVlXXtkaXNwbGF5Om5vbmV9fUBzdXBwb3J0cyAoLW1zLWltZS1hbGlnbjphdXRvKXsuY2xyLXdpemFyZCAuY2xyLXdpemFyZC1oZWFkZXItYWN0aW9ue21hcmdpbi10b3A6''@;'; put 'put ''Y2FsYygtMyooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9fTpyb290IFtjZHMtdGhlbWVdey0tY2xyLXNpZ25wb3N0LWNvbnRlbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1zaWducG9zdC1jb250ZW50LWJnLWNvbG9yOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLXNpZ25wb3N0LWNvbnRlbnQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYm9yZGVyLWNvbG9yKTstLWNsci1zaWducG9zdC1hY3Rpb24tY29sb3I6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItc2lnbnBvc3QtYWN0aW9uLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLXNpZ25wb3N0LWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVj''@;'; put 'put ''dC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLXNpZ25wb3N0LWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItc2lnbnBvc3QtcG9pbnRlci1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7LS1jbHItc2lnbnBv''@;'; put 'put ''c3QtcG9pbnRlci1ib3JkZXI6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItc2l6ZSkgc29saWQgdmFyKC0tY2xyLXNpZ25wb3N0LWNvbnRlbnQtYm9yZGVyLWNvbG9yKTstLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXI6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXIt''@;'; put 'put ''c2l6ZSkgc29saWQgdHJhbnNwYXJlbnQ7LS1jbHItc2lnbnBvc3QtcG9pbnRlci1wc2V1ZG8tYm9yZGVyOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLXNpemUpIHNvbGlkIHZhcigtLWNsci1zaWducG9zdC1jb250ZW50LWJnLWNvbG9yKTstLWNsci1zaWducG9zdC1wb2ludGVyLXBzdWVk''@;'; put 'put ''by1ib3JkZXI6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHNldWRvLWJvcmRlcik7LS1jbHItc2lnbnBvc3QtYm9yZGVyLXNpemU6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItc2l6ZSl9LnNpZ25wb3N0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5zaWducG9zdDpob3ZlcntjdXJzb3I6''@;'; put 'put ''cG9pbnRlcn0uc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbjpub3QoLmNsb3NlKXttYXJnaW46MDtwYWRkaW5nOjA7Ym9yZGVyLXdpZHRoOjA7Y29sb3I6dmFyKC0tY2xyLXNpZ25wb3N0LWFjdGlvbi1jb2xvcil9LnNpZ25wb3N0IC5zaWducG9zdC1hY3Rpb246bm90KC5jbG9zZSkgY2RzLWlj''@;'; put 'put ''b24sLnNpZ25wb3N0IC5zaWducG9zdC1hY3Rpb246bm90KC5jbG9zZSkgY2xyLWljb257aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtjb2xvcjp2YXIoLS1jbHItc2lnbnBvc3QtYWN0aW9uLWNvbG9yKX0uc2lnbnBvc3Qg''@;'; put 'put ''LnNpZ25wb3N0LWFjdGlvbjpub3QoLmNsb3NlKSBjZHMtaWNvbjpob3Zlciwuc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbjpub3QoLmNsb3NlKSBjbHItaWNvbjpob3Zlciwuc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbjpub3QoLmNsb3NlKTpob3Zlcntjb2xvcjp2YXIoLS1jbHItc2lnbnBv''@;'; put 'put ''c3QtYWN0aW9uLWhvdmVyLWNvbG9yKX0uc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbjpub3QoLmNsb3NlKS5hY3RpdmUgY2RzLWljb24sLnNpZ25wb3N0IC5zaWducG9zdC1hY3Rpb246bm90KC5jbG9zZSkuYWN0aXZlIGNsci1pY29uLC5zaWducG9zdCAuc2lnbnBvc3QtYWN0aW9uOm5vdCgu''@;'; put 'put ''Y2xvc2UpLmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItc2lnbnBvc3QtYWN0aW9uLWFjdGl2ZS1jb2xvcil9LnNpZ25wb3N0IC5zaWducG9zdC1jb250ZW50LWhlYWRlciBidXR0b257bGluZS1oZWlnaHQ6MDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uc2lnbnBvc3QgLnNpZ25wb3N0LWNvbnRlbnQtaGVhZGVyIGJ1dHRvbiBjZHMtaWNvbiwuc2lnbnBvc3QgLnNpZ25wb3N0LWNvbnRl''@;'; put 'put ''bnQtaGVhZGVyIGJ1dHRvbiBjbHItaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0u''@;'; put 'put ''c2lnbnBvc3QtdHJpZ2dlcnttYXJnaW46MDtkaXNwbGF5OmlubGluZS1mbGV4fS5zaWducG9zdC1jb250ZW50e2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7bWluLXdpZHRoOmNhbGMoMjE2KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttYXgtd2lkdGg6Y2FsYygzNjAqKDFy''@;'; put 'put ''ZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMik7bWF4LWhlaWdodDpjYWxjKDUwNCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDox''@;'; put 'put ''MDUwfS5zaWducG9zdC1jb250ZW50OmhvdmVye2N1cnNvcjpkZWZhdWx0fS5zaWducG9zdC1jb250ZW50IC5wb3BvdmVyLXBvaW50ZXJ7aGVpZ2h0OjA7d2lkdGg6MDtwb3NpdGlvbjphYnNvbHV0ZX0uc2lnbnBvc3QtY29udGVudCAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtjb250ZW50OiIi''@;'; put 'put ''O2hlaWdodDowO3dpZHRoOjA7cG9zaXRpb246YWJzb2x1dGV9LnNpZ25wb3N0LWNvbnRlbnQudG9wLWxlZnQgLnBvcG92ZXItcG9pbnRlciwuc2lnbnBvc3QtY29udGVudC50b3AtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXIsLnNpZ25wb3N0LWNvbnRlbnQudG9wLXJpZ2h0IC5wb3BvdmVyLXBv''@;'; put 'put ''aW50ZXJ7Ym9yZGVyLXRvcDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1ib3JkZXIpO2JvdHRvbTpjYWxjKC0xKnZhcigtLWNsci1zaWducG9zdC1ib3JkZXItc2l6ZSkpfS5zaWducG9zdC1jb250ZW50LnRvcC1sZWZ0IC5wb3BvdmVyLXBvaW50ZXI6YmVmb3JlLC5zaWducG9zdC1jb250''@;'; put 'put ''ZW50LnRvcC1taWRkbGUgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQudG9wLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXI6YmVmb3Jle2JvcmRlci10b3A6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHN1ZWRvLWJvcmRlcik7Ym90dG9tOnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtMil9LnNpZ25wb3N0LWNvbnRlbnQudG9wLWxlZnQgLnNpZ25wb3N0LXdyYXB7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uc2lnbnBvc3QtY29udGVudC50b3AtbGVmdCAucG9wb3Zlci1wb2ludGVye2JvcmRlci1sZWZ0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVy''@;'; put 'put ''LWludmlzaWJsZS1ib3JkZXIpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LnNpZ25wb3N0LWNvbnRlbnQudG9wLWxlZnQgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWxlZnQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRl''@;'; put 'put ''cik7cmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0uc2lnbnBvc3QtY29udGVudC50b3AtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2xlZnQ6NTAlfS5zaWducG9zdC1jb250ZW50''@;'; put 'put ''LnRvcC1taWRkbGUgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2xlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0uc2lnbnBvc3QtY29udGVudC50b3AtcmlnaHQgLnNpZ25wb3N0LXdy''@;'; put 'put ''YXB7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS5zaWducG9zdC1jb250ZW50LnRvcC1yaWdodCAucG9wb3Zlci1wb2ludGVye2JvcmRlci1yaWdodDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTtsZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1z''@;'; put 'put ''cGFjZS0xKSl9LnNpZ25wb3N0LWNvbnRlbnQudG9wLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXI6YmVmb3Jle2JvcmRlci1yaWdodDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTtsZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSl9LnNpZ25wb3N0LWNvbnRl''@;'; put 'put ''bnQuYm90dG9tLWxlZnQgLnBvcG92ZXItcG9pbnRlciwuc2lnbnBvc3QtY29udGVudC5ib3R0b20tbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXIsLnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9p''@;'; put 'put ''bnRlci1ib3JkZXIpO3RvcDpjYWxjKC0xKnZhcigtLWNsci1zaWducG9zdC1ib3JkZXItc2l6ZSkpfS5zaWducG9zdC1jb250ZW50LmJvdHRvbS1sZWZ0IC5wb3BvdmVyLXBvaW50ZXI6YmVmb3JlLC5zaWducG9zdC1jb250ZW50LmJvdHRvbS1taWRkbGUgLnBvcG92ZXItcG9pbnRlcjpiZWZv''@;'; put 'put ''cmUsLnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXI6YmVmb3Jle2JvcmRlci1ib3R0b206dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHN1ZWRvLWJvcmRlcik7dG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMil9LnNpZ25wb3N0LWNvbnRlbnQuYm90''@;'; put 'put ''dG9tLWxlZnQgLnNpZ25wb3N0LXdyYXB7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MH0uc2lnbnBvc3QtY29udGVudC5ib3R0b20tbGVmdCAucG9wb3Zlci1wb2ludGVye2JvcmRlci1sZWZ0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO3JpZ2h0OmNhbGMo''@;'; put 'put ''LTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLWxlZnQgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWxlZnQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7cmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1z''@;'; put 'put ''cGFjZS0xKX0uc2lnbnBvc3QtY29udGVudC5ib3R0b20tbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2xlZnQ6NTAlfS5zaWducG9zdC1jb250ZW50LmJvdHRvbS1taWRkbGUgLnBvcG92ZXIt''@;'; put 'put ''cG9pbnRlcjpiZWZvcmV7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY2xyLXNpZ25wb3N0LWJvcmRlci1zaXplKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpfS5zaWducG9zdC1jb250ZW50''@;'; put 'put ''LmJvdHRvbS1yaWdodCAuc2lnbnBvc3Qtd3JhcHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjB9LnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2xlZnQ6''@;'; put 'put ''Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKX0uc2lnbnBvc3QtY29udGVudC5ib3R0b20tcmlnaHQgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2xlZnQ6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS0xKX0uc2lnbnBvc3QtY29udGVudC5sZWZ0LXRvcCAucG9wb3Zlci1wb2ludGVyLC5zaWducG9zdC1jb250ZW50LmxlZnQtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXIsLnNpZ25wb3N0LWNvbnRlbnQubGVmdC1ib3R0b20gLnBvcG92ZXItcG9pbnRlcntib3JkZXItbGVmdDp2''@;'; put 'put ''YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1ib3JkZXIpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY2xyLXNpZ25wb3N0LWJvcmRlci1zaXplKSl9LnNpZ25wb3N0LWNvbnRlbnQubGVmdC10b3AgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQubGVmdC1taWRkbGUgLnBv''@;'; put 'put ''cG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQubGVmdC1ib3R0b20gLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWxlZnQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHN1ZWRvLWJvcmRlcil9LnNpZ25wb3N0LWNvbnRlbnQubGVmdC10b3AgLnNpZ25wb3N0''@;'; put 'put ''LXdyYXB7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uc2lnbnBvc3QtY29udGVudC5sZWZ0LXRvcCAucG9wb3Zlci1wb2ludGVye2JvcmRlci10b3A6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7Ym90dG9tOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS0xKSl9LnNpZ25wb3N0LWNvbnRlbnQubGVmdC10b3AgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLXRvcDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6Y2FsYygtMSp2YXIoLS1jbHItc2lnbnBvc3QtYm9yZGVyLXNpemUpIC0g''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7cmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKX0uc2lnbnBvc3QtY29udGVudC5sZWZ0LW1pZGRsZSAucG9wb3Zlci1wb2ludGVye2JvcmRlci1ib3R0b206dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7''@;'; put 'put ''dG9wOjUwJX0uc2lnbnBvc3QtY29udGVudC5sZWZ0LW1pZGRsZSAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItYm90dG9tOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO3RvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpO2xlZnQ6Y2FsYygtMSp2''@;'; put 'put ''YXIoLS1jbHItc2lnbnBvc3QtYm9yZGVyLXNpemUpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSl9LnNpZ25wb3N0LWNvbnRlbnQubGVmdC1ib3R0b20gLnNpZ25wb3N0LXdyYXB7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MH0uc2lnbnBvc3QtY29udGVudC5sZWZ0LWJvdHRvbSAucG9w''@;'; put 'put ''b3Zlci1wb2ludGVye2JvcmRlci1ib3R0b206dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7dG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LnNpZ25wb3N0LWNvbnRlbnQubGVmdC1ib3R0b20gLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7''@;'; put 'put ''Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKTtsZWZ0OmNhbGMoLTEqdmFyKC0tY2xyLXNpZ25wb3N0LWJvcmRlci1zaXplKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikpfS5z''@;'; put 'put ''aWducG9zdC1jb250ZW50LnJpZ2h0LXRvcCAucG9wb3Zlci1wb2ludGVyLC5zaWducG9zdC1jb250ZW50LnJpZ2h0LW1pZGRsZSAucG9wb3Zlci1wb2ludGVyLC5zaWducG9zdC1jb250ZW50LnJpZ2h0LWJvdHRvbSAucG9wb3Zlci1wb2ludGVye2JvcmRlci1yaWdodDp2YXIoLS1jbHItc2ln''@;'; put 'put ''bnBvc3QtcG9pbnRlci1ib3JkZXIpO2xlZnQ6Y2FsYygtMSp2YXIoLS1jbHItc2lnbnBvc3QtYm9yZGVyLXNpemUpKX0uc2lnbnBvc3QtY29udGVudC5yaWdodC10b3AgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQucmlnaHQtbWlkZGxlIC5wb3BvdmVyLXBvaW50''@;'; put 'put ''ZXI6YmVmb3JlLC5zaWducG9zdC1jb250ZW50LnJpZ2h0LWJvdHRvbSAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItcmlnaHQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHN1ZWRvLWJvcmRlcik7bGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpfS5zaWducG9zdC1jb250''@;'; put 'put ''ZW50LnJpZ2h0LXRvcCAuc2lnbnBvc3Qtd3JhcHtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LnNpZ25wb3N0LWNvbnRlbnQucmlnaHQtdG9wIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLXRvcDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTtib3R0b206''@;'; put 'put ''Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKX0uc2lnbnBvc3QtY29udGVudC5yaWdodC10b3AgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLXRvcDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6Y2FsYygtMSp2YXIoLS1jbHIt''@;'; put 'put ''c2lnbnBvc3QtYm9yZGVyLXNpemUpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LnNpZ25wb3N0LWNvbnRlbnQucmlnaHQtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6NTAl''@;'; put 'put ''fS5zaWducG9zdC1jb250ZW50LnJpZ2h0LW1pZGRsZSAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItYm90dG9tOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO3RvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpfS5zaWducG9zdC1jb250ZW50LnJp''@;'; put 'put ''Z2h0LWJvdHRvbSAuc2lnbnBvc3Qtd3JhcHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjB9LnNpZ25wb3N0LWNvbnRlbnQucmlnaHQtYm90dG9tIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6Y2Fs''@;'; put 'put ''YygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKX0uc2lnbnBvc3QtY29udGVudC5yaWdodC1ib3R0b20gLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS0xKX0uc2lnbnBvc3QtY29udGVudC1oZWFkZXJ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTt3aWR0aDoxMDAlO2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDt0b3A6MDtib3JkZXItcmFkaXVzOnZhcigt''@;'; put 'put ''LWNsci1zaWducG9zdC1ib3JkZXItcmFkaXVzKX0uc2lnbnBvc3QtY29udGVudC1oZWFkZXIgLnNpZ25wb3N0LXRpdGxle2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHkt''@;'; put 'put ''Zm9udC13ZWlnaHQtc2VtaWJvbGQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGV0dGVyLXNwYWNpbmcpO21hcmdpbi1yaWdodDphdXRv''@;'; put 'put ''fS5zaWducG9zdC13cmFwe2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpIGNhbGMoMTUqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2JvcmRlcjp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1zaWducG9zdC1jb250ZW50LWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItc2lnbnBvc3QtYm9yZGVyLXJhZGl1cyk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItc2lnbnBvc3QtY29udGVu''@;'; put 'put ''dC1iZy1jb2xvcik7ei1pbmRleDoxMDUwO3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LnNpZ25wb3N0LWNvbnRlbnQtYm9keXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpO2NvbG9yOnZhcigtLWNsci1zaWducG9z''@;'; put 'put ''dC1jb250ZW50LWNvbG9yKTt0ZXh0LWFsaWduOmxlZnQ7bWF4LWhlaWdodDpjYWxjKDQ1MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7b3ZlcmZsb3cteTphdXRvO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKX0uY2xyLWFjY29yZGlvbntkaXNw''@;'; put 'put ''bGF5OmJsb2NrO21hcmdpbi1ib3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uY2xyLWFjY29yZGlvbi1wYW5lbHtkaXNwbGF5OmJsb2NrfS5jbHItYWNjb3JkaW9uLWhlYWRlcntjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLXRleHQtY29sb3IpO2JveC1zaGFkb3c6dmFyKC0tY2xy''@;'; put 'put ''LWFjY29yZGlvbi1oZWFkZXItbGVmdC1pbmRpY2F0b3IpO2JhY2tncm91bmQ6dmFyKC0tY2xyLWFjY29yZGlvbi1oZWFkZXItYmFja2dyb3VuZC1jb2xvcik7dHJhbnNpdGlvbjphbGwgLjJzIGVhc2UtaW4tb3V0O2JvcmRlcjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpIHNvbGlkIHZhcigt''@;'; put 'put ''LWNsci1hY2NvcmRpb24tYm9yZGVyLWNvbG9yKTtib3JkZXItYm90dG9tLXdpZHRoOjA7d2lkdGg6MTAwJTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25k''@;'; put 'put ''YXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDpjYWxjKDIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpO3RleHQtYWxpZ246bGVmdH0uY2xyLWFjY29yZGlv''@;'; put 'put ''bi1oZWFkZXI6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi10ZXh0LWNvbG9yLWhvdmVyKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLWhvdmVyLWJhY2tncm91bmQtY29sb3IpfS5jbHItYWNjb3JkaW9uLWhlYWRlcjphY3RpdmV7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWFjY29yZGlvbi10ZXh0LWNvbG9yLWFjdGl2ZSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWhlYWRlci1hY3RpdmUtYmFja2dyb3VuZC1jb2xvcil9LmNsci1hY2NvcmRpb24tcGFuZWwtZGlzYWJsZWQ+ZGl2Pi5jbHItYWNjb3JkaW9uLWhlYWRlcntiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLWJhY2tncm91bmQtY29sb3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsLWRpc2FibGVkPmRpdj4uY2xyLWFjY29yZGlvbi1oZWFkZXI6aG92ZXIsLmNsci1hY2NvcmRpb24tcGFuZWwtZGlzYWJsZWQ+ZGl2Pi5jbHItYWNjb3Jk''@;'; put 'put ''aW9uLWhlYWRlcjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1kaXNhYmxlZD4uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNjb3JkaW9uLWhlYWRlcntiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLWRpc2FibGVkLWJhY2tncm91bmQtY29sb3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsLWRpc2FibGVkPi5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4+LmNsci1hY2NvcmRpb24taGVhZGVyOmhvdmVyLC5jbHItYWNjb3JkaW9uLXBh''@;'; put 'put ''bmVsLWRpc2FibGVkPi5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4+LmNsci1hY2NvcmRpb24taGVhZGVyOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLWRpc2FibGVkLWJhY2tncm91bmQtY29sb3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsOmxhc3Qt''@;'; put 'put ''Y2hpbGQgLmNsci1hY2NvcmRpb24tY29udGVudCwuY2xyLWFjY29yZGlvbi1wYW5lbDpsYXN0LWNoaWxkIC5jbHItYWNjb3JkaW9uLWhlYWRlcntib3JkZXItYm90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgc29saWQgdmFyKC0tY2xyLWFjY29yZGlvbi1ib3JkZXItY29sb3IpfS5j''@;'; put 'put ''bHItYWNjb3JkaW9uLWhlYWRlci1idXR0b257ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgd3JhcDtmbGV4OjEgMSAwO3dpZHRoOjEwMCU7Ym9yZGVyOjA7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpO2JhY2tncm91bmQ6MCAwO3RleHQtYWxpZ246bGVmdDtjdXJzb3I6cG9p''@;'; put 'put ''bnRlcjtjb2xvcjppbmhlcml0O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXsuY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9ue2ZsZXgtZmxvdzpyb3d9fS5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b246ZGlzYWJsZWR7Y3Vyc29yOm5v''@;'; put 'put ''dC1hbGxvd2VkfS5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b246ZGlzYWJsZWQgLmNsci1hY2NvcmRpb24tc3RhdHVzLC5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b246ZGlzYWJsZWQgLmNsci1hY2NvcmRpb24tdGl0bGUsLmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbjpkaXNhYmxl''@;'; put 'put ''ZCAuY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbntjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLXBhbmVsLWRpc2FibGVkLWNvbG9yKX0uY2xyLWFjY29yZGlvbi1zdGF0dXN7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxp''@;'; put 'put ''Z246dG9wfS5jbHItYWNjb3JkaW9uLXRpdGxle2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5jbHItYWNjb3JkaW9uLWhlYWRlci1oYXMtZGVzY3JpcHRpb24gLmNsci1hY2NvcmRpb24tdGl0bGV7bWluLXdpZHRoOnZhcigtLWNsci1hY2NvcmRpb24tc3RlcC10aXRsZS1taW4td2lkdGgpO21heC13''@;'; put 'put ''aWR0aDpjYWxjKDI2NCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7d2lkdGg6MTAwJX0uY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbntkaXNwbGF5OmlubGluZS1ibG9jazttYXgtd2lkdGg6Y2FsYyg2NTAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfUBtZWRpYSAobWlu''@;'; put 'put ''LXdpZHRoOjU3NnB4KXsuY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbnttYXJnaW4tbGVmdDpjYWxjKDQwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX19LmNsci1hY2NvcmRpb24tY29udGVudHtiYWNrZ3JvdW5kOnZhcigtLWNsci1hY2NvcmRpb24tY29udGVudC1iYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSBzb2xpZCB2YXIoLS1jbHItYWNjb3JkaW9uLWJvcmRlci1jb2xvcik7Ym9yZGVyLWJvdHRvbTowO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCk7ZGlzcGxheTpub25lfS5jbHIt''@;'; put 'put ''YWNjb3JkaW9uLWNvbnRlbnQgLmNsci1mb3JtLC5jbHItYWNjb3JkaW9uLWNvbnRlbnQubmctdHJpZ2dlcntwYWRkaW5nOjB9QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItYWNjb3JkaW9uLWNvbnRlbnR7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpIGNhbGMoNTQqKDFy''@;'; put 'put ''ZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfX0uY2xyLWFjY29yZGlvbi1pbm5lci1jb250ZW50e3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7LmNsci1hY2NvcmRpb24taW5uZXItY29udGVudHtwYWRkaW5nOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtOCkgY2FsYyg1NCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9fS5jbHItYWNjb3JkaW9uLWFuZ2xle3RyYW5zaXRpb246YWxsIC4ycyBlYXNlLWluLW91dDt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNj''@;'; put 'put ''b3JkaW9uLWhlYWRlcntib3gtc2hhZG93OnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLWxlZnQtY3VycmVudC1pbmRpY2F0b3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4gLmNsci1hY2NvcmRpb24tcGFuZWwtY29tcGxldGU+LmNsci1hY2NvcmRpb24taGVhZGVye2JveC1zaGFkb3c6''@;'; put 'put ''aW5zZXQgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwIDAgdmFyKC0tY2xyLWFjY29yZGlvbi1ib3JkZXItbGVmdC1jb2xvci1jb21wbGV0ZSl9LmNsci1hY2NvcmRpb24tcGFuZWwtb3BlbiAuY2xyLWFjY29yZGlvbi1wYW5lbC1lcnJvcj4uY2xyLWFjY29yZGlvbi1oZWFkZXJ7Ym94LXNo''@;'; put 'put ''YWRvdzppbnNldCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDAgMCB2YXIoLS1jbHItYWNjb3JkaW9uLWJvcmRlci1sZWZ0LWNvbG9yLWVycm9yKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNjb3JkaW9uLWNvbnRlbnQtcmVnaW9uIC5jbHItYWNjb3JkaW9uLWNvbnRlbnR7''@;'; put 'put ''ZGlzcGxheTpibG9ja30uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNjb3JkaW9uLWhlYWRlcntiYWNrZ3JvdW5kOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLW9wZW4tYmFja2dyb3VuZC1jb2xvcil9LmNsci1hY2NvcmRpb24tcGFuZWwtb3Blbj4uY2xyLWFjY29yZGlvbi1o''@;'; put 'put ''ZWFkZXI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWhlYWRlci1vcGVuLWhvdmVyLWJhY2tncm91bmQtY29sb3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4+LmNsci1hY2NvcmRpb24taGVhZGVyOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9u''@;'; put 'put ''LXRleHQtY29sb3ItYWN0aXZlKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLW9wZW4tYWN0aXZlLWJhY2tncm91bmQtY29sb3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4+LmNsci1hY2NvcmRpb24taGVhZGVyIC5jbHItYWNjb3JkaW9uLWFuZ2xle3Zp''@;'; put 'put ''c2liaWxpdHk6dmlzaWJsZTt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZyl9LmNsci1hY2NvcmRpb24tcGFuZWwtY29tcGxldGU+LmNsci1hY2NvcmRpb24tY29tcGxldGUtaWNvbntkaXNwbGF5OmlubGluZS1ibG9jaztjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWNvbXBsZXRlLWNvbG9yKX0u''@;'; put 'put ''Y2xyLWFjY29yZGlvbi1wYW5lbC1jb21wbGV0ZT4uY2xyLWFjY29yZGlvbi1hbmdsZXt2aXNpYmlsaXR5OnZpc2libGV9LmNsci1hY2NvcmRpb24tcGFuZWwtY29tcGxldGU+LmNsci1hY2NvcmRpb24taGVhZGVye2JveC1zaGFkb3c6aW5zZXQgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAw''@;'; put 'put ''IDAgdmFyKC0tY2xyLWFjY29yZGlvbi1ib3JkZXItbGVmdC1jb2xvci1jb21wbGV0ZSl9LmNsci1hY2NvcmRpb24tcGFuZWwtY29tcGxldGUgLm5nLXRyaWdnZXIuY2xyLWFjY29yZGlvbi1jb250ZW50e2Rpc3BsYXk6YmxvY2t9LmNsci1hY2NvcmRpb24tcGFuZWwtZXJyb3I+LmNsci1hY2Nv''@;'; put 'put ''cmRpb24taGVhZGVye2JveC1zaGFkb3c6aW5zZXQgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwIDAgdmFyKC0tY2xyLWFjY29yZGlvbi1ib3JkZXItbGVmdC1jb2xvci1lcnJvcil9LmNsci1hY2NvcmRpb24tcGFuZWwtZXJyb3I+LmNsci1hY2NvcmRpb24tZXJyb3ItaWNvbntkaXNwbGF5''@;'; put 'put ''OmlubGluZS1ibG9jaztjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWVycm9yLWNvbG9yKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1lcnJvciAuY2xyLWFjY29yZGlvbi1udW1iZXIsLmNsci1hY2NvcmRpb24tcGFuZWwtY29tcGxldGUgLmNsci1hY2NvcmRpb24tbnVtYmVye3Bvc2l0aW9uOmFi''@;'; put 'put ''c29sdXRlO2NsaXA6cmVjdCgxcHgsMXB4LDFweCwxcHgpO2NsaXAtcGF0aDppbnNldCg1MCUpO3BhZGRpbmc6MDtib3JkZXI6MDtoZWlnaHQ6MXB4O3dpZHRoOjFweDtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RvcDowO2xlZnQ6MH0uY2xyLWFjY29yZGlvbjpub3QoLmNs''@;'; put 'put ''ci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1oZWFkZXI6bm90KC5jbHItc3RlcHBlci1oZWFkZXIpe2JveC1zaGFkb3c6bm9uZX0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1wYW5lbCAuY2xyLWFjY29yZGlvbi1oZWFkZXI6bm90''@;'; put 'put ''KC5jbHItc3RlcHBlci1oZWFkZXIpe2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWFjY29yZGlvbi1ib3JkZXItcmFkaXVzKX0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1wYW5lbCAuY2xyLWFjY29yZGlvbi1oZWFkZXI6bm90KC5jbHItc3Rl''@;'; put 'put ''cHBlci1oZWFkZXIpKy5jbHItYWNjb3JkaW9uLWNvbnRlbnQtcmVnaW9uPi5jbHItYWNjb3JkaW9uLWNvbnRlbnR7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1jbHItYWNjb3JkaW9uLWJvcmRlci1yYWRpdXMpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci1h''@;'; put 'put ''Y2NvcmRpb24tYm9yZGVyLXJhZGl1cyl9LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3JtcykgLmNsci1hY2NvcmRpb24tcGFuZWwrLmNsci1hY2NvcmRpb24tcGFuZWw+ZGl2W2NsYXNzKj1jbHItYWNjb3JkaW9uLXBhbmVsLV0+LmNsci1hY2NvcmRpb24taGVhZGVyOm5vdCgu''@;'; put 'put ''Y2xyLXN0ZXBwZXItaGVhZGVyKXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnVuc2V0O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnVuc2V0fS5jbHItYWNjb3JkaW9uOm5vdCguY2xyLXN0ZXBwZXItZm9ybXMpIC5jbHItYWNjb3JkaW9uLXBhbmVsOm5vdCg6bGFzdC1jaGlsZCk+ZGl2W2NsYXNz''@;'; put 'put ''Kj1jbHItYWNjb3JkaW9uLXBhbmVsLV0+LmNsci1hY2NvcmRpb24taGVhZGVyOm5vdCguY2xyLXN0ZXBwZXItaGVhZGVyKSwuY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1wYW5lbDpub3QoOmxhc3QtY2hpbGQpPmRpdltjbGFzcyo9Y2xyLWFj''@;'; put 'put ''Y29yZGlvbi1wYW5lbC1dPi5jbHItYWNjb3JkaW9uLWhlYWRlcjpub3QoLmNsci1zdGVwcGVyLWhlYWRlcikrLmNsci1hY2NvcmRpb24tY29udGVudC1yZWdpb24+LmNsci1hY2NvcmRpb24tY29udGVudHtib3JkZXItYm90dG9tOm5vbmU7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp1bnNl''@;'; put 'put ''dDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp1bnNldH0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9ue2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS02KX0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1jb250ZW50e3BhZGRpbmc6MH0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1pbm5lci1jb250ZW50e3BhZGRpbmc6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7Y29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi1jb250ZW50LWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2xy''@;'; put 'put ''LWFjY29yZGlvbi1jb250ZW50LWZvbnQtc2l6ZSl9LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3JtcykgLmNsci1hY2NvcmRpb24tcGFuZWwtZGlzYWJsZWQgLmNsci1hY2NvcmRpb24taW5uZXItY29udGVudHtjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLXBhbmVsLWRpc2Fi''@;'; put 'put ''bGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3JtcykgLmNsci1hY2NvcmRpb24tc3RhdHVze3dpZHRoOmF1dG99LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3JtcykgLmNsci1hY2NvcmRpb24tc3RhdHVzIGNk''@;'; put 'put ''cy1pY29uLC5jbHItYWNjb3JkaW9uOm5vdCguY2xyLXN0ZXBwZXItZm9ybXMpIC5jbHItYWNjb3JkaW9uLXN0YXR1cyBjbHItaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHItYWNjb3JkaW9uLXBhbmVsLW9w''@;'; put 'put ''ZW4+LmNsci1hY2NvcmRpb24taGVhZGVye2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MCFpbXBvcnRhbnQ7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MCFpbXBvcnRhbnQ7Ym9yZGVyLWJvdHRvbTowIWltcG9ydGFudH06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1hY2NvcmRpb24tdGV4''@;'; put 'put ''dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci1hY2NvcmRpb24tdGV4dC1jb2xvci1ob3Zlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci1hY2NvcmRpb24tdGV4dC1jb2xvci1hY3RpdmU6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLWFjY29yZGlvbi1wYW5lbC1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKTstLWNsci1hY2NvcmRpb24tYWN0aXZlLWJhY2tn''@;'; put 'put ''cm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkKTstLWNsci1hY2NvcmRpb24tY29udGVudC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWFjY29y''@;'; put 'put ''ZGlvbi1jb250ZW50LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQ1MCk7LS1jbHItYWNjb3JkaW9uLWNvbnRlbnQtZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpOy0tY2xyLWFjY29yZGlvbi1oZWFkZXItYmFj''@;'; put 'put ''a2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTstLWNsci1hY2NvcmRpb24taGVhZGVyLWRpc2FibGVkLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCk7LS1jbHItYWNjb3Jk''@;'; put 'put ''aW9uLWhlYWRlci1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcik7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1hY3RpdmUtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0''@;'; put 'put ''aW9uLWJhY2tncm91bmQtYWN0aXZlKTstLWNsci1hY2NvcmRpb24taGVhZGVyLW9wZW4tYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yKTstLWNsci1hY2NvcmRpb24taGVhZGVyLW9wZW4tYWN0aXZlLWJhY2tncm91bmQtY29sb3I6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZSk7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1vcGVuLWhvdmVyLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVj''@;'; put 'put ''dGVkLWhvdmVyKTstLWNsci1hY2NvcmRpb24tZXJyb3ItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLWFjY29yZGlvbi1jb21wbGV0ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLWFjY29yZGlvbi1ib3JkZXItY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpOy0tY2xyLWFjY29yZGlvbi1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLWFjY29yZGlvbi1ib3JkZXItbGVmdC1jb2xvci1jb21wbGV0ZTp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''c3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLWFjY29yZGlvbi1ib3JkZXItbGVmdC1jb2xvci1lcnJvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1sZWZ0LWluZGljYXRvcjppbnNldCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDAgMCB2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtdGludCk7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1sZWZ0LWN1cnJlbnQtaW5kaWNhdG9yOmluc2V0IHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgMCAwIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdo''@;'; put 'put ''bGlnaHQpOy0tY2xyLWFjY29yZGlvbi1zdGVwLXRpdGxlLW1pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzKX0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9ue2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS05KTttaW4taGVpZ2h0OmNhbGMoNTYqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS05KX0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItc3RlcC1zdGF0dXN7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyKTtkaXNwbGF5OmlubGluZS1mbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2FsaWduLWl0ZW1zOmNlbnRlcn0uY2xyLXN0ZXBwZXItZm9y''@;'; put 'put ''bXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItc3RlcC1zdGF0dXM+LmNsci1zdGVwLWVycm9yLWljb24sLmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLXN0''@;'; put 'put ''ZXAtc3RhdHVzPi5jbHItc3RlcC1jb21wbGV0ZS1pY29ue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7cGFkZGluZzowfS5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhl''@;'; put 'put ''YWRlci1idXR0b24+LmNsci1zdGVwLXN0YXR1cz4uY2xyLXN0ZXAtZXJyb3ItaWNvbntjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWVycm9yLWNvbG9yKX0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItc3Rl''@;'; put 'put ''cC1zdGF0dXM+LmNsci1zdGVwLWNvbXBsZXRlLWljb257Y29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi1jb21wbGV0ZS1jb2xvcil9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLXN0ZXAtdGl0bGUtd3JhcHBl''@;'; put 'put ''cnttaW4td2lkdGg6dmFyKC0tY2xyLWFjY29yZGlvbi1zdGVwLXRpdGxlLW1pbi13aWR0aCk7bWF4LXdpZHRoOmNhbGMoMjY0KjFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSk7d2lkdGg6MTAwJTtkaXNwbGF5OmlubGluZS1mbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO2Fs''@;'; put 'put ''aWduLWl0ZW1zOmNlbnRlcjtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dy''@;'; put 'put ''YXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKX0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItc3RlcC10''@;'; put 'put ''aXRsZS13cmFwcGVyPi5jbHItc3RlcC1udW1iZXJ7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLXN0ZXAtdGl0bGUtd3JhcHBlcj4uY2xyLWFj''@;'; put 'put ''Y29yZGlvbi10aXRsZXttaW4td2lkdGg6aW5pdGlhbDttYXgtd2lkdGg6aW5pdGlhbDt3aWR0aDppbml0aWFsO21hcmdpbi1sZWZ0OjB9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLWFjY29yZGlvbi1kZXNj''@;'; put 'put ''cmlwdGlvbiwuY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItc3RlcC1kZXNjcmlwdGlvbnttYXJnaW4tbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyl9QG1lZGlhIChtYXgtd2lkdGg6NTc2cHgpey5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b257Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmNsci1z''@;'; put 'put ''dGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLXN0ZXAtc3RhdHVze21pbi13aWR0aDppbml0aWFsO3dpZHRoOmluaXRpYWx9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24t''@;'; put 'put ''aGVhZGVyLWJ1dHRvbj4uY2xyLXN0ZXAtdGl0bGUtd3JhcHBlcnt3aWR0aDppbml0aWFsfS5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b24+LmNsci1zdGVwLXRpdGxlLXdyYXBwZXI+LmNsci1zdGVwLW51bWJlcnttaW4t''@;'; put 'put ''d2lkdGg6aW5pdGlhbH0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uLC5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhl''@;'; put 'put ''YWRlci1idXR0b24+LmNsci1zdGVwLWRlc2NyaXB0aW9ue21hcmdpbi1sZWZ0OjB9fS5jbHItc3RlcHBlci1mb3JtcyAuY2xyLWFjY29yZGlvbi1wYW5lbC1pbmFjdGl2ZTpub3QoLmNsci1hY2NvcmRpb24tcGFuZWwtb3Blbik+LmNsci1zdGVwcGVyLWhlYWRlciAuY2xyLXN0ZXAtYW5nbGV7''@;'; put 'put ''dmlzaWJpbGl0eTpoaWRkZW59QG1lZGlhIChtYXgtd2lkdGg6NTc2cHgpey5jbHItc3RlcHBlci1mb3JtcyAuY2xyLWFjY29yZGlvbi1wYW5lbC1pbmFjdGl2ZTpub3QoLmNsci1hY2NvcmRpb24tcGFuZWwtb3Blbik+LmNsci1zdGVwcGVyLWhlYWRlciAuY2xyLXN0ZXAtYW5nbGV7ZGlzcGxh''@;'; put 'put ''eTpub25lfX0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwLWJ1dHRvbnttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9Y2xyLXN0ZXBwZXItcGFuZWwgLmNsci1hY2NvcmRpb24taW5uZXItY29udGVu''@;'; put 'put ''dHtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItdGltZWxpbmUtbGluZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJvcmRlci1jb2xvcik7LS1jbHItdGlt''@;'; put 'put ''ZWxpbmUtc3RlcC1oZWFkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci10aW1lbGluZS1zdGVwLXRpdGxlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItdGltZWxpbmUtc3RlcC1kZXNjcmlwdGlvbi1j''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLXRpbWVsaW5lLWluY29tcGxldGUtc3RlcC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJvcmRlci1jb2xvcik7LS1jbHItdGltZWxpbmUtY3VycmVudC1zdGVwLWNvbG9yOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLXRpbWVsaW5lLXN1Y2Nlc3Mtc3RlcC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLXRpbWVsaW5lLWVycm9yLXN0ZXAtY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLXRpbWVsaW5lLXN0ZXAtdGl0bGUtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpOy0tY2xyLXRpbWVsaW5lLXN0ZXAtaW50ZXJuYWwtc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTYpfS5jbHItdGltZWxpbmV7ZGlzcGxheTpmbGV4O3BhZGRpbmc6dmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtaW50ZXJuYWwtc3BhY2luZyl9LmNsci10aW1lbGluZS1zdGVwe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47d2lkdGg6MTAwJTttaW4td2lkdGg6Y2FsYygxNzUq''@;'; put 'put ''KDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LmNsci10aW1lbGluZS1zdGVwIGNkcy1pY29uLC5jbHItdGltZWxpbmUtc3RlcCBjbHItaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7d2lkdGg6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSl9LmNsci10aW1lbGluZS1zdGVwIGNkcy1pY29uW3NoYXBlPWNpcmNsZV0sLmNsci10aW1lbGluZS1zdGVwIGNs''@;'; put 'put ''ci1pY29uW3NoYXBlPWNpcmNsZV17Y29sb3I6dmFyKC0tY2xyLXRpbWVsaW5lLWluY29tcGxldGUtc3RlcC1jb2xvcil9LmNsci10aW1lbGluZS1zdGVwIGNkcy1pY29uW3NoYXBlPWRvdC1jaXJjbGVdLC5jbHItdGltZWxpbmUtc3RlcCBjbHItaWNvbltzaGFwZT1kb3QtY2lyY2xlXXtjb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItdGltZWxpbmUtY3VycmVudC1zdGVwLWNvbG9yKX0uY2xyLXRpbWVsaW5lLXN0ZXAgY2RzLWljb25bc2hhcGU9c3VjY2Vzcy1zdGFuZGFyZF0sLmNsci10aW1lbGluZS1zdGVwIGNsci1pY29uW3NoYXBlPXN1Y2Nlc3Mtc3RhbmRhcmRde2NvbG9yOnZhcigtLWNsci10aW1l''@;'; put 'put ''bGluZS1zdWNjZXNzLXN0ZXAtY29sb3IpfS5jbHItdGltZWxpbmUtc3RlcCBjZHMtaWNvbltzaGFwZT1lcnJvci1zdGFuZGFyZF0sLmNsci10aW1lbGluZS1zdGVwIGNsci1pY29uW3NoYXBlPWVycm9yLXN0YW5kYXJkXXtjb2xvcjp2YXIoLS1jbHItdGltZWxpbmUtZXJyb3Itc3RlcC1jb2xv''@;'; put 'put ''cil9LmNsci10aW1lbGluZS1zdGVwIGNsci1zcGlubmVyLnNwaW5uZXJ7bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMil9LmNsci10aW1lbGluZS1zdGVwIGNsci1zcGlubmVyLnNwaW5uZXIsLmNsci10aW1lbGluZS1zdGVwIGNsci1zcGlubmVyLnNwaW5uZXI6YWZ0ZXIsLmNsci10''@;'; put 'put ''aW1lbGluZS1zdGVwIGNsci1zcGlubmVyLnNwaW5uZXI6YmVmb3Jle2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO21pbi13aWR0aDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTEwKX0uY2xyLXRpbWVsaW5lLXN0ZXA6bm90KDpsYXN0LW9mLXR5cGUpIC5jbHItdGltZWxpbmUtc3RlcC1ib2R5OmJlZm9yZXtjb250ZW50OiIiO2JhY2tncm91bmQ6dmFyKC0tY2xyLXRpbWVsaW5lLWxpbmUtY29sb3IpO2hlaWdodDp2YXIoLS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LWJvcmRlci13aWR0aC0yMDApO3dpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpICsgdmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtaW50ZXJuYWwtc3BhY2luZykpO3RyYW5zZm9ybTp0cmFuc2xhdGUoY2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKSAt''@;'; put 'put ''IHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCkpLGNhbGMoLS41Kih2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkpKSl9LmNsci10aW1lbGluZS1zdGVwLWhlYWRlcnt3aGl0ZS1zcGFjZTpu''@;'; put 'put ''b3dyYXA7bWFyZ2luLWJvdHRvbTp2YXIoLS1jbHItdGltZWxpbmUtc3RlcC1pbnRlcm5hbC1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItdGltZWxpbmUtc3RlcC1oZWFkZXItY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtm''@;'; put 'put ''b250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1tZWRpdW0pO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vj''@;'; put 'put ''b25kYXJ5LWxldHRlci1zcGFjaW5nKX0uY2xyLXRpbWVsaW5lLXN0ZXAtYm9keXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jbHItdGltZWxpbmUtc3RlcC1ib2R5IGNkcy1pY29uLC5jbHItdGltZWxpbmUtc3RlcC1ib2R5IGNsci1pY29ue2hlaWdodDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOmluaXRpYWw7bWluLWhlaWdodDppbml0aWFsfS5jbHItdGltZWxpbmUtc3RlcC1ib2R5IGNkcy1pY29uW3NoYXBlPWNpcmNsZV0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2RzLWljb25b''@;'; put 'put ''c2hhcGU9ZG90LWNpcmNsZV0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2RzLWljb25bc2hhcGU9c3VjY2Vzcy1zdGFuZGFyZF0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2RzLWljb25bc2hhcGU9ZXJyb3Itc3RhbmRhcmRdLC5jbHItdGltZWxpbmUtc3RlcC1ib2R5IGNsci1pY29uW3No''@;'; put 'put ''YXBlPWNpcmNsZV0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2xyLWljb25bc2hhcGU9ZG90LWNpcmNsZV0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2xyLWljb25bc2hhcGU9c3VjY2Vzcy1zdGFuZGFyZF0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2xyLWljb25bc2hhcGU9ZXJyb3It''@;'; put 'put ''c3RhbmRhcmRde2NvbG9yOmluaGVyaXR9LmNsci10aW1lbGluZS1zdGVwLXRpdGxle21hcmdpbjp2YXIoLS1jbHItdGltZWxpbmUtc3RlcC1pbnRlcm5hbC1zcGFjaW5nKSAwO2NvbG9yOnZhcigtLWNsci10aW1lbGluZS1zdGVwLXRpdGxlLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtdGl0bGUtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNp''@;'; put 'put ''bmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0uY2xyLXRpbWVsaW5lLXN0ZXAtZGVzY3JpcHRpb257Y29sb3I6dmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtZGVzY3JpcHRpb24tY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyl9LmNsci10aW1lbGluZS1zdGVwLWRlc2NyaXB0aW9uIGJ1dHRvbntkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6dmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtaW50ZXJuYWwtc3BhY2luZyl9LmNsci10aW1lbGlu''@;'; put 'put ''ZS1zdGVwLWRlc2NyaXB0aW9uIGltZ3t3aWR0aDoxMDAlO21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uY2xyLXRpbWVsaW5lLmNsci10aW1lbGluZS12ZXJ0aWNhbHtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOmNhbGMoMzIwKigxcmVtL3ZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtYmFzZSkpKX0uY2xyLXRpbWVsaW5lLmNsci10aW1lbGluZS12ZXJ0aWNhbCAuY2xyLXRpbWVsaW5lLXN0ZXB7ZmxleC1kaXJlY3Rpb246cm93O21hcmdpbi1sZWZ0OjA7cG9zaXRpb246cmVsYXRpdmV9LmNsci10aW1lbGluZS5jbHItdGltZWxpbmUtdmVydGljYWwgLmNsci10aW1l''@;'; put 'put ''bGluZS1zdGVwOm5vdCg6bGFzdC1vZi10eXBlKXttYXJnaW4tYm90dG9tOnZhcigtLWNsci10aW1lbGluZS1zdGVwLWludGVybmFsLXNwYWNpbmcpfS5jbHItdGltZWxpbmUuY2xyLXRpbWVsaW5lLXZlcnRpY2FsIC5jbHItdGltZWxpbmUtc3RlcDpub3QoOmxhc3Qtb2YtdHlwZSkgLmNsci10''@;'; put 'put ''aW1lbGluZS1zdGVwLWJvZHk6YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCk7aGVpZ2h0OmNhbGMoMTAwJSAtICguNSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKSArIHZhcigtLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''Ym9yZGVyLXdpZHRoLTIwMCkpKTt0cmFuc2Zvcm06dHJhbnNsYXRlKGNhbGMoLS41Kih2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKSArIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCkpIC0gdmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtaW50ZXJuYWwtc3BhY2luZykp''@;'; put 'put ''LGNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkgLSB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApKSl9LmNsci10aW1lbGluZS5jbHItdGltZWxpbmUtdmVydGljYWwgLmNsci10aW1lbGluZS1zdGVwLWhlYWRlcnt0ZXh0LWFsaWduOnJpZ2h0O3doaXRlLXNw''@;'; put 'put ''YWNlOm5vcm1hbDt3b3JkLWJyZWFrOmJyZWFrLXdvcmQ7d2lkdGg6Y2FsYyg2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWluLXdpZHRoOmNhbGMoNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21hcmdpbjp2YXIoLS1jbHItdGltZWxpbmUtc3RlcC1pbnRlcm5h''@;'; put 'put ''bC1zcGFjaW5nKSB2YXIoLS1jbHItdGltZWxpbmUtc3RlcC1pbnRlcm5hbC1zcGFjaW5nKSAwIDB9LmNsci10aW1lbGluZS5jbHItdGltZWxpbmUtdmVydGljYWwgLmNsci10aW1lbGluZS1zdGVwLWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6Y2Fs''@;'; put 'put ''YygxNzgqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21hcmdpbi1sZWZ0OnZhcigtLWNsci10aW1lbGluZS1zdGVwLWludGVybmFsLXNwYWNpbmcpfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLWJyZWFkY3J1bWItaXRlbS1zcGFjZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5j''@;'; put 'put ''bHItYnJlYWRjcnVtYi1tZW51e2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDthbGlnbi1pdGVtczpjZW50ZXJ9LmNsci1icmVhZGNydW1iLW1lbnUgLmNsci1icmVhZGNydW1iLWl0ZW17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQpO2xldHRlci1z''@;'; put 'put ''cGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyl9LmNsci1icmVhZGNydW1iLW1lbnUgLmNsci1icmVhZGNydW1iLWl0ZW0gYXt0ZXh0LWRlY29yYXRpb246bm9uZTt0ZXh0LWFsaWduOmNlbnRlcjtsaW5lLWhlaWdodDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTkpfS5jbHItYnJlYWRjcnVtYi1tZW51IC5jbHItYnJlYWRjcnVtYi1pdGVtOm5vdCg6bGFzdC1jaGlsZCk6YWZ0ZXJ7Y29udGVudDoiLyI7bWFyZ2luOjAgdmFyKC0tY2xyLWJyZWFkY3J1bWItaXRlbS1zcGFjZSk7Y29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktY29sb3ItNDAwKX0uY2xyLWJyZWFkY3J1bWItbWVudSAuY2xyLWJyZWFkY3J1bWItaXRlbTpsYXN0LWNoaWxke2NvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCl9LmNsci1icmVhZGNydW1iLW1lbnUgLmNsci1icmVhZGNydW1iLWV4cGFuZHttYXJnaW46MDtw''@;'; put 'put ''YWRkaW5nOjA7Z2FwOjA7bWluLXdpZHRoOmZpdC1jb250ZW50fUBmb250LWZhY2V7Zm9udC1mYW1pbHk6TWV0cm9wb2xpcztzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24vZm9udC13b2ZmO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdSZ0FCQUFBQUFGUWdBQk1BQUFBQW04QUFBUUFBQUFBQUFB''@;'; put 'put ''QUFBQUFBQUFBQUFBQUFBQUFBQUFCR1JsUk5BQUFCcUFBQUFCd0FBQUFjZk5INTVrZEVSVVlBQUFIRUFBQUFUUUFBQUdJSDFRZjhSMUJQVXdBQUFoUUFBQWNhQUFBT2RqeStlamxIVTFWQ0FBQUpNQUFBQUNBQUFBQWdSSFpNZFU5VEx6SUFBQWxRQUFBQVRRQUFBR0JvUHF6clkyMWhjQUFBQ2FB''@;'; put 'put ''QUFBSnNBQUFEbm5kREQ3RmpkblFnQUFBTURBQUFBREFBQUFBOEVZNEJqR1p3WjIwQUFBdzhBQUFHT2dBQURSWjJaSDEyWjJGemNBQUFFbmdBQUFBSUFBQUFDQUFBQUJCbmJIbG1BQUFTZ0FBQU5uTUFBR2dVeEZJZ04yaGxZV1FBQUVqMEFBQUFOZ0FBQURZTFlZZ1VhR2hsWVFBQVNTd0FBQUFo''@;'; put 'put ''QUFBQUpBZDJCREpvYlhSNEFBQkpVQUFBQW9nQUFBVHV1UEkvRkd4dlkyRUFBRXZZQUFBQ2NnQUFBbnFKYW5Cd2JXRjRjQUFBVGt3QUFBQWdBQUFBSUFLRUFlbHVZVzFsQUFCT2JBQUFBWUlBQUFOV0xkQ0U5WEJ2YzNRQUFFL3dBQUFEb1FBQUJpR1hGajJLY0hKbGNBQUFVNVFBQUFDQkFBQUFq''@;'; put 'put ''UmxRQWhCM1pXSm1BQUJVR0FBQUFBWUFBQUFHOW5oWW1BQUFBQUVBQUFBQTFGRzFhZ0FBQUFEVHdaMkdBQUFBQU5TK3B2VjQyZzJNUVFxRVFCREVFa2YwTUxQb2Y3eXBML0RvZlhmVi96L0FJZ1JDMFRRQ0xSNmNkRlJralZzbzdIelR2MUQ0QjdtNDA0OERPbG9wTmx2NjQ1U2VYWExUNTFzWHpT''@;'; put 'put ''YStXM0FGM0FBQUFIamFqVmNCYkZiVkZmN091ZmUrdi8wTFdFb0xDQjBEVWhreFRXV0VTVVZHaVdNRnNWUERtRUVIWmx1Y1k2MVE3QmpaaURGS0hacWw2WXpERHBFMHFBeU1Oc0JRc1NLeXBxdk9PVWRrWTZZaFlGd0h5RFltMDduRkNQTDJ2Zk4rNkY5b3QvR0ZqOE81OTkxN3p6bmY3Ym1GQU1o''@;'; put 'put ''aU1oWkM1dFhXTFVZQlBEMklZemorSTFDNGhtODNyVVRwaW04Mk5hQjhSY09LQnM0Ry9jbG9PaU5oeCsreUdJMEptR0llaHdyVXVZNTBORnBscTByVWlvZ2Z5ZkRWL0dLYytRSktMMEJRRzdlU0EyYWpCWjhpbG5GUUhvUHpaS3djUVJHRzhXUi9qN3ZqN1hGdmZCUkQvSWsvR0hMa3Q0TjYrN2gz''@;'; put 'put ''L3YrUHh6OGRjb1gzaGh3WitqeC9qUGNPTWJJOTdvdjNKYmpJMzh1L3Ywa3cyQjV4SzdPa21NaE1UMkcyUGtjb3FnaUhxd2lQNlVUQUY0Z0lNNGtNcmlFS01Jc29aRzVuczFKckNNSDkrQkZuUGtnRVpyeUYvaGNJd1l1RTRDVkNjWkR3K0FQaGNaUUkrRE1SNFRnUjRUMGl3bWtpZ3crSURNNFFo''@;'; put 'put ''YXplcDF3dEpySlNMTVVvbEJJcElaZEtLWGtjSzV2bDJ0T29rZ3ArY3lVaGR1NzB4R29uZG5aaWJ5Y09tRWNVb0pZb3hBSWlpMFZFRVJyeGZhNlFSQkpaSkpGRkV2QVRQTXI1YlVRaGZvWk5uUDhFZnM3NTI0a2k3Q1F5MkVVVTRCZEVCcnVKQWp4SFpQQThVWUE5UkNFNmlVTHNKN0xvSXJMb0py''@;'; put 'put ''TG9JYko0bFJEOG1oRExUb1IzaUNMOGlVanpvcFlYdGJ4NHkwdXd2QVRMaTdlOGVNdUxsekV5aHZtNlhDNG5KemtLWExXS0dackNHbGV4dHROWjA1bk16Q3htcEJHcmNEZWE4RDJzWmkzdnh6bzA0d0ZtNFVGR3Y1TVJQY2RLdnNnS0htVGxqckppeDFtcDB6ekpHYnRaeGR5M05MbGZlcS9kdzll''@;'; put 'put ''a2lYRVBwN3IyVVhldDhiOEdVYXVOREhZSExveWNTakRJbDZlSHZCdW56aXVlOS9wbzNCdzNYenlTM3JwNGM3eDUwSkcvMkRlS2N0T0VtQ1lVWHlNY2JpVThiaU1DbGhJUkZmRW81eVJxRUZPRG1ob1VIVVNFSFVSa2xSYXJ0RmlseFNvdFZsZkZNY0xoQk9Gd2tuQTRTd1NjSXlJWktTTloxMUV5''@;'; put 'put ''aWx3bVplU2tvbUlWRlJrdjQ3bStvaEtYRVVVWVNRd3pwWXNwWFUzcExxZjArVVMrMHIzRkUrWEZrekdsdTV6Uyt6WHVMU3B2VVdVc3F2TktUeldlcW5zdk1iU3VrMmk5YVZaekVTYktkUlpueHZUclRMK2FpemxSc2VZaVQ3U3NlZkhuSzlwWkZqSXlUYTdoN3NsUHIxcEd1SWoxdXBWeExXVWti''@;'; put 'put ''WXhrSXg1ak5FL2dTVHlGcll4b095UFp3ZHZZeWROMjhaUTlQTjB4MXVBa1QzYU9KeGpGM2Nad2wvRmNjWUxwV1RIQ09rcUpxYU9FdTlUUUVyTnIySW1PUkJQSWZjeC90NnlYRm5sRU5rcTdiSlZuWkpmc2tYM1NMYS9MQVRra2grVmRPU0duNUVQNVdNNnAxNndXNjJndDE4azZWYXQwaHM3U3VW''@;'; put 'put ''cXJkYnBJbCtqdGVvZlc2eXBkby9mb09uMUlXM1dEYnRJdHVrMDdkTGQyNm43dDBUZjBMWDFiajJpZm50VDM5U1A5eE1GRmJwZ3JjV1BkQkZmaHJuVFQzTlZ1dHJ2T0xYQTN1c1h1TnZjTmQ2ZTd5elc1SDdoNzNRUHV4KzVoMStZMnV5ZmQwMjZIZTk3dGRWM3VOZmVtKzczcmRlKzRZKzZ2N2gv''@;'; put 'put ''dTMrNnNWMS9nUi9oU1A4NVA5Rk44cFovdXEvMGNQODh2OURmN1cveFMveTIvM0svMHEvMWFmNTlmNzF2OEkzNmpiL2RiL1ROK2w5L2o5L2x1LzdvLzRBLzV3LzVkZjhLZjhoLzZqLzI1NEVNMkZJZlJvVHhNRGxORFZaZ1Jab1c1b1RiVWhVVmhTYmc5M0JIcXc2cXdKdHdUMW9XSFFtdllFRGFG''@;'; put 'put ''TFdGYjZBaTdRMmZZSDNyQ0crR3Q4SFk0RXZyQ3lmQisrQ2g4RWlHS29tRzhIVTI2azl4c1BOKzR4bmhEd21nMGJqUFAybjUvam04d3JqUysxbmhsd2xwbTl2WEdjNHdybEQ5VDVRcmpxNHlyRTBhOWNidStURzR3ZjZYeGJQUDNHcDh4ejBUang0MG5HVWZHQzF3OStTbmpwc0ZaZjVVWFk0MzVM''@;'; put 'put ''MkY4MlhpTGNXTS95N0kwZHJQdk1uN1ZlTU9sbkdiQTdFdjVldU1LN2ZwZnJNOE95RlhYWUl5NXhvOGIxL2N6czlkbDJmdnZuT2F6YTFDZWxNZE5lV2NlWU9mVnRObjhWNWcvMzU1dk9Xd3hlMWxlNXRNb0J0ZzJtcW9pMzU5bXRUcTFiVTZxbWJRNmFkU3BQbk4yenAvTWFUTzczYTA1cjk2Y3hn''@;'; put 'put ''NmEzWlBZdVpxbUdWdWJVM0s0eUorZUljM2JBYlBYV28wT0pmTmRxc0FiYks5ZW0yTTNJdFh0QUgrbDJXZHlOZHA1UWRYNS92UUdYWnVubWJRaStmWldzNytlK20yKzNRc3RNNy9wSWFlMFNYbjJIT1BJUEVQWmZ6UDdib3V1MXV3M3pjNWZ1U2IrSmJrcTNuOVJwZkozck03ZDdxNy9nd2ZPVkh6''@;'; put 'put ''VzNxWGd1MnNxczVLOFRqMjdkaVc3WVBMQ2p2QjV2c1F5bUlGcTlyQ2tjNDlnMy80aWUzclN1VWZhRzdYRU92Y28vbDYxa0gyb2ppakRUZXh6bzlucGJ1SHZQa3VJY3V2bG4ySFhXOGF1MWNpMzIwUjd2YzFrUjIvbmVsdlkrYjVpdmUrcjdINHZzME8rZ2dQNERsOTBwL0ZEZTFWdXhEOGw0REYy''@;'; put 'put ''NHZIb3NKN2F5Zk9LWEdhL20wV1FlTDJwOEQ3Y1NWN1BibGVFc2R5cmdoRk53OVU4OVhVODVZMVl6TkVYVEx1L016NXNiSGVHR3Uzbmc4YkxqYmNaOXhtZk5TN0NsN2pQY254WE1sSWdoWktWSWhrdUl5NDkwWDhBdGxLWFdBQUFBQUVBQUFBS0FCd0FIZ0FCUkVaTVZBQUlBQVFBQUFBQS8vOEFB''@;'; put 'put ''QUFBQUFCNDJtTmdackpnbk1EQXlzREMxTVVVd2NEQTRBMmhHZU1ZUkJqTmdIeWdGQnl3TXlDQlVPOXdQd1lIQmdYVlA4elMvNDBaR0ppUE1xb3FNREJNQnNreHNUS3RCMUlLREV3QXhsY0tOZ0FBQUhqYXRaTlpVSTVSSE1aLy83ZDlFU29VOWZiMmFkTkdvaFJGOXFYSXZwU3MyYkt2MlJyckVF''@;'; put 'put ''TkZVc2llSktNWkUxTlR0aHZ1dURWampMN1BsVnZ1REIzSFYwd3p6TGh5WnQ1ejNuUE9uT2VjZVo3ZkgzQ2g2d3RCZEk5VTZwazQ1NjVTck1jbGpNT05nWlJ3aXpydTBrZ1R6YlRRSmg0U0lJTWtUQVpMbkNSSnFxUkxwa3lWSE1tVFFpbVNFaVBWZUdXOGQ0a3lqNXV0NWhQemkrVnVCVnJCVnFo''@;'; put 'put ''bHM2S3NZVmE2ZGQvbUgvbE5LWDJIeFkwZTJvOXA0NW40U244eHhTYXhraWdwa2lZWmtpWFpraXNGc2tFMmErMlh4bHV0ZmNoc01kdk56NVpoQlZoQlZvaFRlNmlWOWt0YmZWUXYxSFAxVkxXclZ2VklOYXVIcWtrMXFnWlZyK3JVTlZXcmFsUzFxbEtWcWtLVnFUT3FWSjNvZk5PWjFabjAvWk9q''@;'; put 'put ''M0ZIZ3lIZkUyQWZhL2V3K2RpKzdtOTNvK05yeHVlUHdoNUIzeVYxZS9hZm1ibmc3aytDUFd3U2orOC80aDBiWFNSZGNkWGJ1ZU9DSkY5NzQ0RXN2L09oTkgvcmlUd0NCOUtNL0F3Z2lXR2M4U0tjZWlrbVlUaVFjRzRPSklKSW9vb2xoQ0xIRUVVOENpUXhsR0VrTUo1a1JqQ1NGVkVhUlJqcWpH''@;'; put 'put ''VU1HbVl6VnpHUXhuZ2xNWkJLVG1jSlVwakdkR1dTVHcweG1rY3RzNWpDWGVjeG5BUXRaeEdKTldoNzVMS1dBWlN4bmhYNy9EbmF5bTJJT2NaelRsRk5HQmVjNVJ5VlZWSE9SR2k1eGhjdlVjcFhyM05RVS9XVDBOZzJhcFh1YXBwOXRGYXUxSGRGczRHeTNOK3Raby90ZG5QanRWdUZmSEx4QVBa''@;'; put 'put ''dFoyV05sTFpza1JvOWIyTTR4N0Rna1hQTVpLVkc2QWlLNG8zY2VvR21XQkYwUDhkMW5pcHhoeExLTnZXeGxIM3M0d0VGZFMvczV3bEc5ZFpoU1RuR1MxN3FhZXJGT3ZNUmJmTmdvZnBwL3p4K1F6YXJvZU5wallNQUNISUhRa3NHU2FUMERBOU51SmxZR2h2OGh6TkwvalpsMi8vL0NkSUJKOFAr''@;'; put 'put ''WC8zNGdQZ0RJUFEwaWVOcXRWbWwzMDBZVWxieGxJeHRaYUZGTHgweWNwdEhJcEJTQ0FRTkJpdTFDdWpoYkswRnBwVGhKOXdXNjBYMWY4Szk1Y3RwejZEZCtXdThiMlNhQmhKNzIxQi8wN3N5N00yK2JlV015bENCajNhOEVRaXpkTllhV2x5aTNlczJuVXhiTkJPRzJhSzc3bENwRWYvVWF2VWFq''@;'; put 'put ''SVRlc2ZKNk1nQXhQTHJZTTAvQkMxeUZUa1FpM0hVb3BzU25vWHAweTA5ZGFNMmEvVjJsVUtGZng4NVF1QkN2WC9iek1XMDFmVUwyT3FZWEFFbFJpVkFvQ0VTZnNhSk5tTU5VZUNacGovUnd6NzlWOUFXK2FrYUQrdWg5aVJyQ3VuOUU4by9uUUNvTWdzTWkwZzBDU1VmZTNnc0NodEJMWUoxT0k0''@;'; put 'put ''Rm5XcS91VWxTN2xwSXM0QWpKRGh6Skt3aSt4R1djM1hNRWE5dGhLUE9BdlNKVUdwV2Z6VUhxaUtab3dFTTlsQ3doeTJRL3JWclFTK0RMSUI0SVdWbjNvTEE2dGJkK2hyS0llejI0WnFTUlRPUXlsSzVGeDZVYVUydGdtc3dFRGxKMTFxRWNKZG5YQWE5ek5HQnVDZDZDRk1HQkt1S2hkN1ZXdG5n''@;'; put 'put ''SERxN2l6K1c3dSs5VGVXdlFudTVnMlhQQVFkeWdxVFJseFhYUytESXR6U3NLQ2t4MHZVUjBaTFNZbUJnNVlUbE5ZWlZqM1E5dTk2SkRTQWJVRyt0TW90aVh6d1d6ZW9VRVZwMUlWMm93V0hScFNJQXBCaDd5cnZCeEF1Z0VOOG1nRm8wR01IQnJHTmlNNkpRSVphTUF1RFhtaGFJYUNocEEwaDBi''@;'; put 'put ''VTBwb2ZaellYZ3lrYTNKSzNIUnBWUzh2KzBtb3lhZVV4UDZibkQ2dllHUGJXL1hoNEdBV01YQnEyK2N6aUpMdnhJZjRNNGtQbUpDcVJMdFQ5bUpPSGFOMG02c3RtWi9NU3l6cllTdlM4QkZlQlp3SkVVb1AvTmN6dUxkVUJCWXdOWTB3aVd4NFpGMXVtYWVwYWpTa2pObEtWTlorR3BTc3FOSURE''@;'; put 'put ''MXcvRG9TdENtUDl6ZE5RMGhnelhiWWJ4NFp4TmQyenJPTkkwanRqR2JJY21WR3l5bkVTZVdSNVJjWnJsWXlyT3NIeGN4Vm1XUjFXY1kybXB1SWZsRXlydVpmbWtpdnRZUHFOa0orK1VDNUZoS1lwazN1QUw0dERzTHVWa1Yza3pVZHE3bE5OZDVhMUVlVXdaTkdqL2gvaWVRbnpINEpkQWZDenpp''@;'; put 'put ''SS9sY2NUSFVpSStsbE9JajJVQjhiR2NSbndzbjBaOExHY1FIMHVsUkZrZlUwZkI3R2dvUEhiQjA2WEUxVk44Vm91S0hKc2MzTUlUdUFBMWNVQVZaVlNTM0JFZnliQTQrcmx1YWMxSk9qRWJaODJKaW85R3hnRSt1enN6RDZ0UEtuRmErL3NjZUdibFlTTzRuZnNhNTNsajhnK0RmNHNYWlNrK2FV''@;'; put 'put ''NXdjS2VRQUhpOHY4TzRGVkhKb2RPcWVLVHMwUHcvVVhHQ0c2Q2ZRVTJNeVlJb2locmZmT1R5U3JOWmt6VzBDaDlQQkRvcjJzRzhhVTZNSTZVbHRLaEpHZ0V0ZzY1WjBEVHE4K3l0WmxFS1VXNWl2N043S2FLWTdFVVp6SUFwS09TbXNiRHM3NlJFV2xnN3FlbjAwY0RsUnRxTG5pdzFXMVp4aGIw''@;'; put 'put ''SDcyUEl6U3g1TjFKZXVDa3A3VVdiVUtlOHlBSU91WkU5dUNhQ1cyanZzb3BpU2xpb0lqNEliUVg3N1dORUppMHpneTZCSW1SeHNySVA3WW9kT2FLQ2RnTGZldElxNzl0QzdjOTE4aUF3bTUxdTUwR1drYUx6WFJYMWFuMVYxdGdvVjYvY1RSOEgwODZ3c2VZWFJSbFBMbnZmbmhUc1Y2Y0V1UUpH''@;'; put 'put ''VjNhLzdrbng5anZXN1VwSlB0c1hkbm5pZFVvVjhsK0FCMFB1bFBjaUdrV1JzMWlsRWMrdlczZ3lSVGtveGtWekhCZjAwaDd0aWxYZm8xM1lkKzJqVmx4V1ZMSWZaZEJWZE5adXdqYytYd2pxUUNvS1dxUWlWbmc2WkQ2Ym5acndzWlM0TEVYY3MyVFhSZlFkUENFZDRyODR4TFgvNjl4eUZOeWl5''@;'; put 'put ''aEpkYU5jSnlRZHRIeXZvclNXN2s0Y3FSbWZ0dkd4bm9oMUpOK2dhZ3A1SUxqaitYdUF1anhYcEZPN3o4d2ZNWDhGMjV2Z1luUWErcXVnTXhCTG5yWUlFaXlyZTBrNm1YbEI4aEdrSjhFWFZRck1DZUFuQVpQQ3lhcGw2cGc2Z1o1YVpVd0ZZWVE2RFZlWXdXR01PZzNXMWc2NTNHZWdWSUZPalY5''@;'; put 'put ''V09tY3o1UU1sY3dEeVQwVFhtYVhTZGVScTl4anlOYnJCTkQrQjF0c25nRGJiSklHU2JEQ0xtVkFFMm1NT2d3UndHbTh4aHNLWDljb0cydFYrTTN0UitNWHBMKzhYb2JlMFhvM2UwWDR6ZTFYNHhlay83eGVoOTVQaGN0NEFmNkJGZEJQd3dnWmNBUCtLazY5RUNSamZ4akxZNXR4TEluSTgxeDJ4''@;'; put 'put ''elBzSGk4OTFkUDlVanZlS3pCUEtLenhQSTlOdllwMDM0SW9GTStES0JUUGdLM0hKM3Y2LzFTTk8vU1NEVHYwMGcwNy9EeWpiaCt3UXk0WWNFTXVGSGNDOTA5L3RKanpUOTV3UXkvWmNFTXYxWHJHd1Rma3NnRTM1UElCUHVxSjIrVEtyelo5VzFxWGVMMGxQMTI1MTMyUGtiWlRPNkxBQUFBQUVB''@;'; put 'put ''QWYvL0FBOTQyclY5Q1hoYlY1bm9PZWRLdXBJbDJiNWFMY3Vick5YV2FtdXp2TWpYUzd3dmNiekZTUnhuYzV5MEtWM1NsaTRocExRTkZBcVVBV1pZaHI0dTBLRk1TNUsyZEtIdEZDaFEycUhMREcrQWVjTUg1UTB6TEcvWUJqb3diWDA5L3puM1hsbTI3S2J3ZlMrMUpQdnFyUC81OStVVWxhSEZ0''@;'; put 'put ''U1QrRk9kR0hLcEFkdVJDWHRTRTBpaUh1dEFRY29tTzNueG5lemFUYkE3NjZxdXJIRUtsUVVOUVdTS3M5UWdlM3A2MGUrM0p0RGVkVFBQc2s0ZGYxYWYwR2YyazM4Q1R0UHE3MG9aMXlDYlQrRlBTczdqclAzdDY3K3Z0dmUrKzNrYVBwN2UzOTBpdjU5YjdqalI2am5qdXUrOCt6NUVqdHc0TTNI''@;'; put 'put ''ZDBvT0ZGN21kOUhyOEhmbTQ2MWpndzREc0l2dzE0T25zYmo5elE1b3p2dlBMS0I2KzhjbWQ4eFJQM3dBOUNCRTJ2L1I2ZEkrZlkzdnhpSThJWUxTS0V5a2NSSWR5U0JuT2NreHZUYURRVm1uSy9VS25sbldGcmt2TTZBdWxVSnRucXNOdDAzdjNENW9URzdiWlpxNnV0NUp4a2VkRnRzN2pkRnBz''@;'; put 'put ''Ym9iVTFOSWdmeFdQa2s1V05xQXloU2c3ZUgwRjAzaUM4WFFmenVsRTl1bUgwdkhmbmJqRlVvU05JeXhGTUVGNDJZb09oZkxTODBzenh2SDdSVkViMGVtRlVnd21wSUdOdU1VQWZzQytSbmo5YTJrOXB1Q0RXSVZSZlYxc0QwN2lyWFZWT1dMQlZLUHpqYThPWVQvSmUzcHRscjJ5U3ZaSThlL0gw''@;'; put 'put ''Uy95YnpJM21HMk50c2J2Z2RhMzUyc3c3emRjcGY5MWdmdml1ekYzNGE5OU5Qd2IvMHQ5TlB3Ny8wdDhGU01iV0hpVVI4Z2ZrUVNFVVI1MWlMdWIzMWRWV3U1dzJzNm5NWU9hSURpT09qQ0RDa1pzUlJ2Z1dDbWEwQkhCeG9yR21wcVo0VTl4aEZ5eGEzaEgybFdQQWtYUU1CN01PcHhERDZWUWVa''@;'; put 'put ''d0ZaSEU0ZW5nbDEySTRjem5RNWZHVFNxVUJRSUpIVWtSMWl6OGxvYU9meG93ZGE5K2JFS3haRHZwbm81ZStROW9zN09rYXdlV1owNnVhNU5OZmR5MmNqclRzcmNXWDFycUhrYkZyWDJXV2NiZlZHZU9sTjkrNUpYSk8yL1o0ZmJwV3lJNm1XRG9mMEpxeE5pK0pyLzBYK2xYd0pNTVVLcHhaSEhl''@;'; put 'put ''aUYwZk5WY0hKaEk5YVdZYXpUNGhXa1EzcURUbjhNYVRSb2lXQ0tTV1k0RW03SnhCT09xK0RHM0tQbmc5QWwvcFpkRURSbC9mZ2xFK1o1Snc5bm50eWlCeUhRbG5aRFcvZGFXQkFEaVVSRGc4MkdVS0lqMFo1Sk5jUWJZcUdBcmQ1V1YxMWx0UWlWc0pueVFEbHZEMXRrNENaYkFhYTJjdXpGU2V5''@;'; put 'put ''MVVLQjZHM1YybXlPSk5uMmZ4K3ZmL2ZWQU1EUVlpUTdDZXhSL3FGTnE3cndtMXg2SnRMV0g4ZFJBS0RnWWxiK0t0ZEdIdVFoZWpFN0VXM1pHbzVPSmxva28zclU2aFQ4NGtNNE1EbVRUQTlMeDZFUkxZaUlXbll5M1RFWVRBNW4wSVAwSzlzZWhwclhma3hQa01ZQjlHUGhQWHV5SVIvMTFOVzZY''@;'; put 'put ''MDRETE9GTFBrSXBpUGw0Q01uYU1hb3V3S2hKcGFJaWtJNm1HY0VOenVGRUhtS1VONnJ5TmRFL1o0bzNCTjg1TTFxbmpuWWp1ekNudjBwSU5CT0hQT3B3a2lhVjlKenVQNU83eDFFWEdFNUhoOE54YzVzcElVeWFSdkZyNmRGZHQvVVJmcmprMGZqcC90bm1vbVQrdzNMS1F1MmtnT3VpTGpJVERJ''@;'; put 'put ''ODM1VVovNFR2RkExZkhoYThqeDlsaE5WNmdoRzI3dVdqMDNkOHRZMS82UTZBVmlBSDZCUGtFK2lVd29PbnJlQVloaXBDeUpuUzhHSktoRTlNOTUrQk12VXRJWlgzakU3aU93SFd1QkkxVmc3Mng1bFNBNHkva2cvbzlEM3NvcXArQTlsSUhXK2JVNUhDTlB3ZGk2aDAxYW5BZ3pOcFoxQXZuWW5Q''@;'; put 'put ''em5MN25rc0hkdTRaeDMxNDl2dU9ISHUvMjd2MzdWRHk0RVlDS2c1emxjcC9iVFFUOG5JN2FzRExEWXVZVTU3MkhvZk11RkgxejFkZWpIdXROK0hmZ200SDFmUXJOSUZMdjhHSlBKSGQyeFJwZE5xMGQ0RjlZaWJvVERXSU9SRnFNVkhkWnF5UkpGYU8wWTdHNFd6UXdQWmRKTndkb2FOMCt4RTFi''@;'; put 'put ''YWpYbmdCbkJxUWZnam0rbkd3WUQ4VzdMVjZhakh3U0lJWkxMQUp0aHp1dzA2VldDSDA4RitaNzNoUHlkajNWODJHM1RlaW9aeXJjYk1hOHFjMFhBa1ppL1Q4R2F0eHRMczB4bk13S3owdXNwS0xtVFRhczA4VnlhRWRSR25JK3dvNDNpelR1TUlPWXc2dmRtQWJ6THJhMXFhYTh4VlBHZlNhNHk4''@;'; put 'put ''V1JBc0ZpTnYxT2hOWEZsalRYTkxqZDVzMWp0YTQ2Wnlyc0hJbVhSYUUxOG1FR2dpbUhpVFZtZml5aHNzK25pclEyK21CNHY2MEhGU1RsTElpQUtBRXhvT2EyWUJsNEV6WUE0dEE3blRvOWZnY2NiREszVjhkUmg3cWZSTVV5bWFKT1hmekQvM1hQNmJPUDVOK2dzZGIzTHROSG9NN1VUbHlDa0M2''@;'; put 'put ''YUpCRmFXQU1Id1dpajJBODQzcklvMmZESnF0SU5HY05mV2g0OUVFRlczK3VscXhsWTdWaG42TE8zQU1xTEZLdEROa25GMUhScUdTb2FMSDdtbkRuTFNLWTExc1A4TWdZejhIOHh1cHRrQ2ZBSmZEMklucFFSdFJtWStEQXk2V3FFY1VhV29xU0ZLODlwdTFSL0hIeVU5aFhrRXNwNE9DNU1CWHl4''@;'; put 'put ''TlNWb1VuQjZTN0I4aFAzM3daTWZuYUFiemlHSGtTMkZzOWlvaE5nRmhzeHpKWHdDRFkyUUlxZ1o0cTZ5dnJxaHlNRCtwZ0lack5mSTZrVXpIc2JhUkVBZ3dBNDNjUERyNTdhdXIwNE9EcHFmekJUT1pnUG44b2t6bVVOKzI5WjJYbDdyMTc3MTVadVdkdjU5alp1ZG4zam82ZW5aczdPOFpnVUEz''@;'; put 'put ''dmI0QzgxeUczV0FWSHlRRzhSbVN1alFFL3h3UXJBeDBmekNZRjc1TzMxRDZZRXNtQjJaYVRxMU9JOVcrQlRlbGhQeTdVTEFhTlpiQWR3QVpDUmhnNEdidWpDc3NpWWpKR2NQcUNHcjRxblBWVC9rVlh6d2NMSEs0Q3cvbTB3S24wTnUxb3VtSm5MSHI5Y09laDNOak10L0JKcWFudFgvS1hwcHA2''@;'; put 'put ''QTVmN3hmN1VZcTd2MU5DRDhobUdBSjVhbUQrTXVzVk9kelhNNVFPQ2hoWEFNa0NTUXdzQ2NvbmpORXVBb0xBWWtKZExsS2Fkakp6RHFObm45L2o5UE8rQ2s2YWNJOW5LV0dzWXA1MnRHWG1OT2o2WVVibXdBdnhYVGtXaXZxUDV4Rmo0ME55T2diRjl6Y09SekVKVGVQSDkrU1B0QTIyZFU1Mlg5''@;'; put 'put ''SnA2MnB1VFdYOVBVNzYzRS9kMyt2TytkQ3AwS2pHWDd0b2xsTS8yWmZlbUdENkU0QzBGOEM5RFpoUVZtMDBZVUhCRXA0VjlZQVQ2NmxFQUlST2xGWm94bzlGb05nSU5DNVpLdWw2L0o0aVRBdFZZdldrQjQ5dWt6eHZ3elBpbGw0clN6eDlzd3k5SXVZNEhmNFp2a003SzU5UUdjSExDUEExVTcz''@;'; put 'put ''RUFleE1xT2FKQkdFNEszcEdHQVlrc3lwSjdJNUFhVUgyallBMlVBRWsrUDBwVmZLYUFsajkrVjZTNWVhVTlQaEdKVENRbVIxc04rSVBTUTN6ZlhPZHlaLzVFcjZrOUdZOGx3MlBSeUZBb1c0V1h1bDV2U1IvSTk2eTBNMWgwd2hyOWNKWnUwT043eFc0Z0lvNEVxb2hXUTBaMHdHSTBXazZ6Z2dw''@;'; put 'put ''aWxJY0ZxdHlpcGdhaG1xYWFrSzhST2xkNy9RRTlLTVJJV1JMbElCVExuSHlBa2tzdGhqOHM2Z2Jva1NieGU0NTJkWjNvUFgxbThOVFlPMlo5bzNPNS9abnF5M3I5RTVIWVJMei9zTGx5M3hCK01IT3dPMytzNjhrN1YvN213SzdXNGFuYjUyenBidWxNZkx3NVB0dzAzclY3V1laekIyekV3T2lw''@;'; put 'put ''WHF3QkdZSVpOVkUraEpudUR0b3ZhRGNjTEE5NzBoNDdNSWlucEhmamw2VHZESk9ydWxwVzMwUDFpUlRBb1liQklRemo5WXM5TmgwQmJqdkNGd0ZCNFJwNkFBS0dzMkpjSXhLaGNJaDBSTnBUclRYaG1tWVpHaEVEWldPVWUyUTJxUlFLZkFxd2tGbUpVL2s3V0U0WVovbko1VDJ6dlozRDNjYzZP''@;'; put 'put ''bzkxajdYM3p2WmMwZGMwRW8rTVJFQjdpSStFV25ZbFV0T1J5SzUwWWxlTHFXVSsyN1hmN3BqTHBxWmpzWmxVYnRibTJOK1puVy9CdDN0eWZsOUhZMk9ITDVCcklOSUZYejRRNnZaaTdPME9CZkkrdE5YNTExWEMwUnYwWUQ4UTJMb1dDRmxMVm9BVU9OZ3Z4emxHaTZTRmV2Nk5EWFRIQWErZm5i''@;'; put 'put ''OURQbjVRMFNuQ2RtSDZod0lCQzRYRk92UDgzS2FUNzJMNHNJT2RmQXZEQXZMa3hwT1hzVUU2UTA5ZXhnRjVEMHltNE5kQmZzQ3lSczlIUVZOeVVxYk9WaXJJMXB0V3R0N2NWRkRCZDhDa1ZvcWZMNGdXa3draGs5UGtzRlF5UWFSVE5BMVZFSkV0aEpKTitjUjMxbGlwZExMV1NIT3FuQUo3ajhs''@;'; put 'put ''YS9EcllleFd3RGg0SnlJUy9nQXdYTUg0Y2YrRjhNa3h4TjRzV3NVU21BWGQxRCtzSTZGUFd0Tjl1eHZZc2ZrNjZBWi9GWFpsWDgwOC9uV2Y3N0VOZkplWDRYd0JiZWRRbzFsTWNwMlllMkU0Y21WVllQdUdvTGxCSk9UN2xFdlMvUHZ6M1VwcTkvaVYvWng3bUhFT0x4S3JPeWNHYzJTaE9hKzNh''@;'; put 'put ''TVh3VzVueE95bjBhWm53MTh5cWQwNzMyZS93dHdJOHE1RU5aTWVVd0dTbUx4SlROY3pEeDZTS1pReG0rRm1zMFRzMll5K1h5dWJ6K0tsOVFSeGVpeXMxMXJzNU11V0k1LzB6NzNxU3ZweWs3N3cvdk85dSttRXJ1YmU4eHErQzlXaHZzOERaMitwTHg1cE10TThuSXpwenhQVVdtTlYxblpPMTJi''@;'; put 'put ''Z2U1RjNXakNWakwrVHJBQWFIUlEvUmNnNFZvOUowZFlHZHlJKzcxWndiMTJZTGNPR1EwRUEzSUFSM2x5cm95MEMzNXcwaGhkc0JFOUhwdUNUWW82S25OVmcvdG8yQmNhN0JoSHIzZFRrM1VOZ1NZNlEyY2Z1V2luYldBcVMxVUpuQkl1N0o5TDU3WHpTT2RqbDlpM1NjWHdNYXJFa1dFeEFseGZH''@;'; put 'put ''Z0FnSkVQQkpvQ3ZrREF4THRMdEpuR1FMQ0lPbHNkenF5VFp5WmM2MGJtbEd4bGRvR1hxdEhNenFPUEhVbmNmLzdZVlYrNTRzaURSNU5Uc1dpbnZtNjJKVDdjM0hPOHZYWFFZbTR2aTRUcTY5b0RpNS9adS96RmxmMTM3Y3NmemxyYTM5RWYzR01nN2VuNHprUlA2dXFqRHg2NS9DdFhIdnpzMHNS''@;'; put 'put ''bEdiQkRFNUdKWlAvSnZwaTNWOXY2VCs2R1FIaWhkL1pqOHl2bmx2ZCtackhHNC9ZM3ZMWThhaXRMNXpNTHFiWUJkdVlOOFBaMTRQczhTUEt3R0RKZ0FNd0lZQ0NncEFha09CV3JZRlJRalVxdjE1ZnB5MlFWdVFxa09NOU0ycUFSazZ4MDdlQUFqdE9mdy9mZmY4ODk1TnpxMUt2NGpIUUdnTDRm''@;'; put 'put ''eGo4RzQxZUNwdFdJdXNSMjRQd3dndzZvRHVTamRobk9WbkVROFZqV3hPbGM3bXFMNEttdmJuUTNWamtFbDhVVmFkQXpSWGlqQVBCZ3F1cUF6bU8zS3I4SSszRnJkaTZSakxmM3BSWTdwSy9oVU1mb2VOZFBmdE0zTjlmM0czSXVNdEdTSG5kV0w3Wmw1aEw0MXI1MHF1L1gwcVBqSFIxajBtOHBI''@;'; put 'put ''Nkh5NndOQXA3VW9Kb2FyWGNZeWlpUWpLcnQyYkhCaHdZTmFWQlB3QjZnTFM3TisvbnpwbWVQc3ZRY08zTHM0Y0tZbEVyb2tOMzdMeE1RdDQ3bExRcEdXTXdNbU9MbWxldzltV3lOTmlhbjNUazYrYnlyUkhHMXBnM09oY0h1RTZWZDJaclVVd01RTWNnVk1KcVBOWXJTYjdJRUc2dHV4cWxnWnhs''@;'; put 'put ''a0YvU2hFZm43SmZZdUw5MTN5ODUvUDN6WStmdHY4L2VUYzdyOCtmUGd6dXp1RzM3TnIxMDNEcTg4eCtUOEo4OFZnUGlPS2l4R1ZLMUpkU3JNSW9xdThXQnRtVm9aUjluaUJhbVdsL0ZHUVgzZmc2NlQzNFRzbEQvNFJ1ZXExdkNSMWtYTmRoZkhUTUw0Qk5Za0JkWHpLNmRpb3Fvb0JYeGlRZ1k3''@;'; put 'put ''TWVCNGIyY3ZHUFNYZDBvUC9uUTM2VlhWTWVsNTN3bmw1VUZwc0JhMExjZldFYUxSTWlkZHFFRU11WmdNN3FDYktXQ3hvRzZBUkJyeXltZWNSTmhMdnBzTkxlL0VIc0xYbGp1RkZkb0REZDhBQlh0OGxIMkQ2Uk5OMzhHSHB2K001K1FqYkVsSDFDUDJlODZpdzU2c1lUSU9pVDFGWGwwRkhwdnVs''@;'; put 'put ''ZnFrS3RCbVdtTzRXWGtsNEoxZUowcUlvNG5zcE9lRnV1bTNwSmR3cWo0cyt6SHlzVnVyQVdMZDVaSE1SREo1SlVhUzlxSjBFc3VjWmFDdFFMR0xtQmNOb3BpeVRKUTZReWNuQUxxQkttMThEM1lzMFpWZ0dKYk1IVHpaRW5YdGJ3djBCRWF3elUzY3lIczFGZHJiaWY1UmlmWmQwd2h6N1lLZ3Iy''@;'; put 'put ''RDRieEZxRFhrdVlkTVBNODhiSm5sT3J4U0xMMDZTQWt3YWdDUkJkKzBSODZhejBLazVOUzcrN0d0WXJuUVNkK3pucC9YamsxRXNNZnYwd0xvRnh0VlFuWll1bW96RTZrRUduUlZwQm9JdjJBNTRrQlVLa1hyRUxVRzcxUTZ3L3BhRmZySytMMzJKZE5rRmRsd0dNRXE5Z2dCUFlMMklkMW9taTlM''@;'; put 'put ''cjBPbDJXRGYvSDZoUUpzczkvVnNmOVM0YkxkYUtiSjZSa1ZFdGhWQXpMOHNwalBnNGpEdEZqZVlJTXduaURxMDlRL2t0eCtIZi9QK3hxbWVuc3YvdkFnYnYzajk4OE1YSHp1SXk0Q3NzNWVPL1MwbWNQZGs2OWIzTHl2Vk15M2pKNVFISDJJT3pOQkh3SExHTllCWkFxaDZtYlpOMlJEMXNzTjlz''@;'; put 'put ''c1pudTVYUWcwNktnVDMxUGdQWGF2eXBhRlNWdzljR1ZQejVVRC8wZkVGZk1uVHN5L1RNNjFIYzZESEpOd3g4emc0S3owZkRFTWJHQlY1c1FNOWF0cmlRN01QT2FCNURDSGg5Zk5wMkxmdHQxdUQ5bURzVUNRTW1HUTVFNStnelNHRlpGc01PdmNKSXJKN3lKTlkwMDc0MWQyTGFvd1dwdTRwdW02''@;'; put 'put ''Qmw4QlNManEya1J2WWtjZ1hBQ1c5UDM4Y3VKWThGQ3FHRnhGOENxSDlZRDhKTlFCcDVxbXk2Q0tLT3hOSVhlZnp5TUlWc3A3WUxWV2J4QnNZSUZCVHB0VVlFWU9YamIvNk1qRHo0a01kRkxzWlFZMmZNdlY1Ukw4WStEN05JV2M3RWQ4alVUSVV5aEk1WlhEVHUxaVFyVktGVlRVeVZza3I0SW80''@;'; put 'put ''SXY0S0tnb2pTc3FTaUNvUW11ZCt6bWNDazc5OHYzcDBKRmIweE5OZTQ5ZWZWbkhTczh0SjBMaDQ5bllVTk9lbzFkZW1Uc3hZc3lsV285NE83MlpyaXIzOUhoMlQvSlFhM1BjMitWcmFYTzVkKy9NTGlSbFBoZ0ZHQTB6SFVQMjFSVE1TdG01b3FqYTJBdDJwUmVveGYwclV2TXJFY3pLTG9XTzV3''@;'; put 'put ''QS96a0ovTy9LSWRZcERIK1BpcmRtUnplYXpxYUtZOHEyTkxBelhuaGtVc3d6enhNRXpVNmFSVzJid0o2V1Z2dU1kSGNmNzZHOHp0NHpJYTFYMUlSMmRTOHZzWU9DYUNzT1V1UTZvL0RMWG9Yd00rQWI1dXZRUEEvQ0RUZGhFdVM2ODdpSUhZQ3cvbUVrYVJrc3dWaG5sKzhBb2FGaUppWEcyZWVB''@;'; put 'put ''VWxrb3RsYUpKTjZZL25OZUl2ZjZoYnp3eitKV3ZELzI4NXh2ZjdJSGhuaUw5N0RWRmRxOStYbDRueUZCeU0rTnR3QnNOT2hnYWpwNnluL0pSTE9PYXhXSVJLRnhobFRDa2dZMk9UMkhkNUk5K05JbDU2YjhuZi9UcUpKNlg3c2MrNlFkNEh1K0dkNTg4dGdYR1BnTmo2MUd0V0szamdBZ0xERTd4''@;'; put 'put ''QkZnRTZnbFF4b1FqQzBtLzJQblRuMDlJLzY4UFYrRy9rajRQb3gyWGZrYkhhb2V4UkZYdVUzaXV1OWtLdm9XQ204MGlzQlZuWlJjRENQOTIvSUMwRjc4aFRlTUxxNjhuU1hkWGN2V3JzdXlmV3ZzZ2JpTS9mSnRXWEJJUUMxNVRQejEzN3Fma2g2MnJWdXA3WFh0ajdWRjgxelkrVUE1MFcrMEFY''@;'; put 'put ''cEpkb0JpMXdIeFZoZmxrLzl3eW9tb1o5ZGZTK2RENmZFNWcrbWw0dGNCMFArMGh2Mng5OHh3ZFBvTS9neCtVY2V1QzdraS82QUR1enJ5V01EUDE0RjZ0ZUZndTZGQy9OUW5zZ2ZkK0wzTlgrMDAzNTBBSy9lclZWK21hcGJWM2tsMXI1Mkc2QmpiR05qNWpPZ1FQQUNSa1p2V0JuVG41WEx1SmlO''@;'; put 'put ''NGtMME5mSit0cmdwNUQ4TTNWRmhESDhxeFpwN2U3OThZcytVckZoMlgrMWdyNnd5K0lnS29CNDNhSzQxV1kwemhCSUFpZ3hkZlZham1kVmtQTldLMk9hR1Z2SmRYaVhZeFdSdlZZcDFPVkxqZVltTzZBMisrcGg1RmNQci9YYWdBNElZY2RBRlhzNm1LMkViVndMYUIrcWVFd2ZQcEUzbjBpdSt1''@;'; put 'put ''U3pHTDd4TkxBem9GcDEvNEYxeVhsczVNOXV5YzZpSEROUWVrYnV5S3RlMGRhSnlMMTlyNTlzV1NyNU02M1RWZjN0Q2E3NUpnMHlZTjhzWUFGMGkxMlZwUVJyWWJ4eWNyUmdsdkd4WFNvRGM0NXF4VWhhNlBWNDNaQlQyRGJtNXh6UVlwVFFyRlBUaFc5SHp1Uno1L283VDVjbjgvWEgrNE96U1FT''@;'; put 'put ''TThuMGRDdzJuU2JDNEkxalk2Y0dPOVBMNUVucDM5S2RVazNib2M3T2cyM1U3WDB3QzJlVUFIai9CdUM5dFEzaTJ0NEdjYnlsRGZMYkd3WUhieGhLTHZyRDdxRmdkbDg2dlM4YkduYUgvZnRUcHFGM2pZeWNHZ3I1bW1zYmNnYzdPZzdsUEhYTi9pWjY5aG1BbTJjZGJnTEg0RWFoeFFESFZHdmxy''@;'; put 'put ''SG5tejFNVTdHSzRXUUplZ2NJTkt3ZTl2a3FCYkpiTEhncXVYaFY0TnpHSUpSbjB5Sk9yTzViVG5ZT254c1p1Qk9CaDkrcFZXUXF4VE52QnpzNUQxRjRDdUJFZndNMko2cWlWQ1R5R0kwd1FFMDVEbGd2TGM0M3FpdlNIcWlxRXF1cXFhdDNWOEpjRERBTzZVcDhNc1dJdHdsTkhra1RIZTJDeCtN''@;'; put 'put ''Z0JkN0RoK3ZiKzZ3WjNYTE5qN0IwZDBxZzJNNXVhdUxRTVg2czdNQm4xMVRaN28wT254a1p2SEJ5K2RTRTkzNEwvZG5ubjFCRkdmeUFQOEJSNUJhVFZIckdzQXV1MGxSanB5SWpzREtsQk9wMTJDVFNHS21ad28wWFFmbVRIRzh0UXFBWmxWd2QwdGxMNjVZSlk1dld5MkJYUHUyVmU1Nlg4aHpt''@;'; put 'put ''R21QTllaMy9zMWx2ek16UDlxVlNrd1JHbzloRnRUa3JoYitjRzIwYzhNVWV6UjZiMStOb01xUUVZMGxqOGtMaWpycExvdElvZkUyZ1pHSjZPckZENmhvbEJzYUZ1R1ZmQm1XbEZZdzBnTytWd09JeFFIL0Q3ZlpUR3NhQ1FDN01xTWh1OG1ZQUY2UklzcU9tK2NxanpTbDlOdzJMTHdyRzZGYkgz''@;'; put 'put ''MHE2dVMzdDdqdGJkT3B0SXpLYVQwL0g0ZEpKb3BkYmVsZlpBZld1dForL2svblM3ZU1YQWppdkVYUHFRdENjeGx3WDd2bVV1RGRCbmNCK0h0ejhBSHR0cHBNSWkrN1laRG9PeXhyeHRyaUp6REZRSndlYTFVZnVUMGpxQVVuSFhDQXE1NDhzV1d2SVQrZWhJT0orM0w3WVJvWFZQVG5vRTkvZE1C''@;'; put 'put ''M3FEMG1OQTE2K0ZNd3llM2ZEK2NmSVZrTkVWMUFJc3VGT3I2TUVKbzZvMVhWRnVOakYzcVhhVHU1UUhFYkxiNWJKWTRBVzhoRnppc2dqVjFZTEZ0Yno2Qm95Lzl0VGFCUG9JRzk5TmNiNEMrSEk1MXNCcGFZdG00amlHSnhyZ2NocU5XelBHWExSdVU3WFRZUlhZckh5SmsxWTVLcVk4NmJ3enln''@;'; put 'put ''cmVFYTBvTS9zRnR6ZmZuMXBmeXBzL01mQnBMZDlVVHpLckw3UU5NM2dEU3dEcWV4Skc5NG9OQmczUUc2ZXlXN29hVlQ4UnJFemFZeXJvR0M4RjJGYi9ZT0xMeS9rOGJwckNWZExQZm5YMGZRRE9XaHlWNVJjOW52ZkR1S3JkVzFsaTk0NEJsSUJWeUcyNUlPQ3lGNlhFbG9acTJlN1ZhZ1ZHWExv''@;'; put 'put ''bE1BWjFPdGVvaHNiOTVIUDNva2F2WVBWYXZUWURVRkhSMGVzMi9KSzB5M2dMNytTKzZWaCtxRTJjeWcvU3Q3eDFLdDArWjYvYzMxbUVFaFA1OVUraUhXdUtkNlpBSkJWd1V0aUVrOEtmZ1pQMnQ0R1QybG1Ha2dxZkhJUjVOOW1icm92YW00NjN0amRmT3pVOGZHcHc4TWJoNFJzSE00dlo3R0lt''@;'; put 'put ''UzkrenBwRjNEUTJkb2hJRzVFeXUvWEF1ZDZpOS9WQ3UvVkM3dko1cDREbDVXRStKYkJhS1pmTzZXS1lBc3VLTHltWVZNSCtXYkpaK1RTNHNsOGhtS2c5blFCNEtXOGhEb1VnZXJvdkNVWmt2YmljUGhZdHh3cmVRaDlyVlNTeXNDOFJsS2JSQkhtSTBEZmkxQUdzMTBTdzhPVHFyNHRlNkpnSENR''@;'; put 'put ''N0RKT3JjbGs3UVhNT3B2VGd5MDcwMENHYjdTazR0UHA2VWZFZTBsMUk0RDNlUnBHRE93cGIzcDJteHZCcERmRnk2Mk56UEY1cVpEa1V6VTJpVHMyTDU5VmRTemJ5RTkyRGV3ZnpJKzFSby8wRnkvYzZTbHIydG5kakRjTXBzeU5mbGl2UzMrWU5UdTdzczA5L3JyM1ltV3FLK3hxVnJ3NWNMaC9v''@;'; put 'put ''RE1JL3l3eGlueVVaRG5jVEhpeERxMmI4TGRURmtpV2FUT1U0Q0JUcWRxQUV4dVdodXA0UFRMZXFpZzVIMEFSNkp1L0V3V1Q5bGFxMVA5TXpQNTk3ekhWMjJwTjlvcmhaRjJQSlA3MElkeTBnT2VabE1aNDAwdzczOFJyVXpQSE0wdUdkRUNkNkd6VWYwSVVlSkNhcEtHSGRtOU5pL3pjUmJwUlpU''@;'; put 'put ''ZHlsYTVnUCtMa25HYlN0UnczRzhBQlFOUjR6SHBLVWJVZUZqZUwralZ4RWEwYWg2RWFxbXB1b0ZnWVJhRlZUWXQzVHNlZjJ6SHExa1FuaVA0VVNwRE1MQTl4Rm1oZjZtTktyeTFqZXJ0dmUwdk1oOTVmKytEK1E5K0tBOGpUdUNINkd2MURYeS9ORit3cGZFZllXeVdkMVBHYTdDR3NqbHE2Y0RZ''@;'; put 'put ''SENseWdJS3RTdkhFQXhhUE5aaDBacE84RlorNzk5N2hiMzFsK05PZkhuN211ZTkvSCt0WFgzeHhWZm9qSGJkdWJZeTRZRnlCd3Rxb0o3QmtqTUVBVm9ZdW9LR2JVenliRnB1WG9hR01oZDJZWTdzb3gveGhmMld0dDdhcHZQNWYrNS81VXQrdnFzYXlqd2paQ3Flcmo1aWxMdnpzNnBPZFdTenZC''@;'; put 'put ''ZGduZmdubTNNYU9GZDdhanMzZ1B1bFpmSWYwRkI2UWpyWGdUM2EwU0NzZGJOencyaDY4bHp3QkhBVmc1R0p5b0JMam9VYVdWUVFONWhXQ3hXaFNjRkF4cDRuaExnenNQMDExS1pxOTZTd25kcWNjRk9GcEdKekhwbGwvSXRzVzk4K09hRHZ5THV6ekI3ellsZS9RM2hucVQzOHdGVzJKcFc3UDlB''@;'; put 'put ''ZjFjWDFOb3ZtT2VOWmt6aVErSEU3VTZPTXd5MlZyajZLN3Q3R0pxWVM5TEpWU2tvS28vMmtQM3MvV0hoTDllbWJMQ21CUk5tSTh1SjVXdDBSQk5VbXpaUWx2Q3p0QmJBVGxnSDZXeHVxemRhUVdBOWJiRzNYd0NTY1NZeXNPQkh4c3hTT3ovbmhiTmdFN2VTY3NOdnpoZU5ac3lzYnZhS2FMMVFm''@;'; put 'put ''N003ZW5ZaTNSMUFmVC9TSDkyaHJxd2MzNE5QNkN3R1B6bWlUOUVoa3VJUHk0OUVzV0phYXladGZhSFBvaUVWUjlqSzJPQ2p6WHFKcERZaVVsK2hqVGllUmtMdEFPa2g5VjRxbStZWE9DQ0dyOGRIVUgvcFVxWHg4RisyMGMxUUJsQVpkc3FLOXhWemx0VnJPMlRGYUMxQlJkV1hsbVBFaW9sdEdG''@;'; put 'put ''aHN1OTZSaFJjM0xwV2RLa1hIckdQckNYZ0R2amwyWmpZdjVJTG5ja0w4YW1HOE5WK1VadmQxVll1bW0rcjIrK0ljUjE5eHJIcnVydHZXclVLSFp4UVU5emRUMG56V3NhcXB1dlBpbmd1NFdUY3U1VUZoWWFZWEd1UGxHRW82VkpHb2ludVo0OEh0WmlBa3lUSjh6bHk1UjhtcTNCODBWdTkxcFVL''@;'; put 'put ''OWo4UHREZnFLcmt0M3ZTV1pZdHQ5SDhyTVUweDRkRUpHTkhMZ2N5ZE1kSlY3eHlJUWVjK3NVWHU3cnE2MTdNM2Q1L29sTk1SV050MGFuazdia1hOL2llSE5RVGJNUElnTUgyUUR6TE5qaXF3d1RVRkEzaGxzdFlXcmFjWCtTd1d5MXFDbmFsa1NaaHMzUjR1NXJFQnk5RzhQaTJoMTU1NVpVK2VE''@;'; put 'put ''MzBSK3F0d3YyNVBibnJyb00zZkNsMVdiSHo2eWQ3OEJ4NWdPVkJ0REl2U1pBbUNnSXlNOGZsa3BhandNS1RXMlE2VUFkS3NTTGRXdlQ3dnFvcW9kSlZKWnhUUHNrZSt1bXFwTC9MbjRDL1laVEdYOFovVjltSXcxcFV5ZUV3ZWxMeDI4emlhOGpadCtQem9ma0szVGdqdlVET3RyeGRuNCtUOXo3''@;'; put 'put ''UmR6WkxYcTQ0SS9PNjROcExnTVBuNExSQmYwZFVmQ0p5bW9yTzkxQXh4dHgyekcwYllGSUJLenBNQjFWcHFQL1cyTCtTYXp2YzlkdjBqV2tjYnRtZHkrMXVXYTBuWDF6ZEplZGkvZ1I5Q25jQTBPcEVkeEdYSUpSOVRCWWxNR2FLb0xkWVhjMU1rSis0clBURDZsTDhXV3NpZW8xbVFhSnIyZDRx''@;'; put 'put ''blRiQVphc0J4SmVlOG1ld3JFMWdXVGVBT2czeVdITUZ6YllBcnIyeXpsZ1AwR0YydWtVUGF3S1lkWHE3TmdzaXpTVjFJWmZWNS9OUndVMUJ4NkxSekxaVnRCdnF1d0xobFVtK0ZHd0xWY1VxTGJVK1I1M2RhaXV2OUNTcU5QcW92OFlYcXpBSEtSSllqY0pFRHJPYWhoU2MrN1BzM0NNOFBmY0ll''@;'; put 'put ''bHJKeHhqQi84ejRsUSsxaTluR0txZEpRK1R3QWtGMHJRd2haUVlHMHVjQVVrU2V6K3QyMmEwRnZFVEZMRXhKanFKdUlaMnFmUUt6d1NHRnIzbTJ5Q0ZaNTNQU21TMnlTTmdlbU4rY3U3NnlFZFpLODNUNjBFZlJGNUQrQXNIbjVUU2RMZG9jeDg1dDJweFUyMkFlZlhHYk5pdUZObVoweHpadDVn''@;'; put 'put ''cHpIVVdmazl1UXpXMitVUmpIaUw2OXNZMmNIOEU5eEdqQmdnYkZmb0h5SWliMTlRZ0RGOUxET2VnMXl3WmdrTHBGMENzVmY3WlcxcHlZR1dXcHRFRHZDb1ZCR1lGallqVmlucVpKRktBaGdDVmhVeVBuMG12N1IvRHRSQ2Q1ZnFhRTBHbENSWmYwRHZ3UjZYS2t4TDFGbHFlUVFhK0w3a3c2R05E''@;'; put 'put ''d09qZGdhalVObWJrcUFJL0xNZUcwQ3ZwSGFDeUt3MWZBRzlLOFEvVXlPVVlSOEhURnBBTHBkd0RXN1NZMHljWkdNM05vSDRRMXA5OXVKMXB2RTl2UWlUdDFzVjVpZUhNSG1nMUZqbXpSRDQzUnRCeGp3TjhNMUdjRkE2b0dwR1VGVnZuRFpncVVaZWhXcmxDeWVHMVB1VVpmdTVrOHErWS9QcjlW''@;'; put 'put ''amtZOHkzbnhScXB0MHgvNXpKNlNwQTJLVHl5SGd1RjNTS0dCOXpOOHdrVjR1Ym5OY2ZUd05tMU9xbTJBQm03Y3BzMWNZWnlqNkNxNXpUcCtyMUV0N2NOc3JvaThuclU3dGhvSFZ4YTFPWTVzbTl1cy9RTEdlWTJ0SnlLdlorMXZTOXI4TzdUNUkxdVBQTTdSdFhzMnJnZG9xUm5lWG1DeDBscWF6''@;'; put 'put ''YnRSMDFqVVl4b29OUlNwR2hVVjhGRmJVY05LcmV6UXpRd3lwMnpkMEdmR1UxSlFqWHlncXlRUDVpdCtUazU0R1JsUlUxNitnLyt4a1BhQ3UvTzRkZlYyT2ZubEQzbFdpZ1J3WURGOXhsTmFGSjd5aVJKWXNUZzFnMVdyY3I2UGxmQ2R6VzJPNDl3MmJVNnFiZUI4WDltbXpVcWhqUms5dEUyYnVj''@;'; put 'put ''SmNSOUZ6bS9nWFJydlFYK0t2RVIwSUE5M0RlcG9iQ1VwbEVFZ2ttSFZtblRoemUrUjIrZWVEWVR5aC9uYjc3V0drNXZQK2p1WEkrMUNjMWdkRndyVTFMb2ZKb0djK0dwYTJvN2c5SEhMNFJGY1VQdkg3L1hGL0xHZ05XbGtHdHByVkdnQWJMMXVVTDVma2tjT0pGVEpGY2tnYVUrL0hNNmtEZCs5''@;'; put 'put ''dnZ6U1dIcDZMWjRBMjIwOUUwOE96cS84Vzh1TlQvdmtZMENnK2NmTkV5Q2ZkQW4rUm1uZnZXUHJzd1lDMzYxRExtUjFBbmZRMzZUc3JJZnh3VFQwUXFmVDlxZmROWm84MlNlTTE5UXgyTEtiTXpxbE5PY3NuU3M1N2M1dmo2UDl1MCthazJnYk84Z3ZidEprcmpITVUzYjJaVm1XOWw4M1ZxY3ox''@;'; put 'put ''OU1aeE51VWF4QmozaEhQUUx1dXdFdVVvRksyQjVLbHcyQ3FjbFU0aDRLbms1UWhvc2loRHcxL0kwT2o1NTVJTWpWTXNSYVB0cG1kbUJnZG5wQmRrbVRQRGNuR2VCUnB1RVdOR1VNS1pHZ0lDaDF0UkV5NlpXeHN2NnVSMFFhdlA0L2RFdkN3a1VaSzdIY2JwOVlJRmxYRlQvK3BNZWw4dXR5L1ZH''@;'; put 'put ''bW5yU2UzSjdoa0k3d2pOOWUzbzZCaWZiRytmRklrNU9aMUlUQ2RUTTFYdS9kbjBmRXVIcnp2WU1kb3hrbTRiSGMrdFNnQkhPVjc1TXNDeEgyUXZRWDJYeS9TOThUa0g4UDFFMGZQbjFmYVlQMURjL3VuQ2MzTnY4Zk1IQ3VNZm5TOTZ6cmtMN1kxVU93TWFndWZjWGFERFJVSEw2MEhIeE9VYWdK''@;'; put 'put ''M0hEVXFDSGV0SkR1dktES0I0OGpvdERhT1c2VWpaQ3RJakhhL1hMWnNOUk0wR2RvMldHMDBjRlliVXR3TzBsVTdIWWdpbGU5SmlaM3NzRlV1MkpHQ0NpTlhuOWZsOS9nb0F1UnJFa3ROVFM2S3JzZ043VTJnTDBWeHpOZVpLWHBYalhIM1hldXV1R2RwN2FYSG9kZkNBdzN0NVQwbnNTN3BsSWtw''@;'; put 'put ''RHNwUDljaFJzb0tOallHRnNQU2JibGMza2kyTmkwa3g0TkJxbzdtbE5kY280bGxnVFdld3pneTZJN2tUYzA2RFJhdXhZcDAyQldxOHJxUFdxWHVQbjRTdUNkVmVnNGhUN1FsQ0tucU1icWJwSmdEWFc2a0JwZnN2V29yZTBJYlVFMEpGQ2V3MnRBZ1hKQk12TXlBcUpucThPYS81RVJZUVcwV1dT''@;'; put 'put ''K0hDSkl0SnphZGRXa2RyR3VVUjVpUUdSMDQ5ZXM2TWtlTnNZMGpSaWlwTnlUSlRpL0pCTUN6Zkl1THJ4T2FXRmU0dWVQNisyeC95bHhlMGZLSXh6OUJCN3ZrWlp3MjFzbkpmazhUOGd0eDhGZ0JtTG5oK3ZrTnYvRzN6OGhvMy9ranorZmZMekg4UEg3OWo0Y3Z1am4xbXZxMmdsZncvYVFoVHRF''@;'; put 'put ''YTJWekt0YUMrb0FhQU0ycTZVTUQ4bDU1dzdWQlMxc3lBNXppemFhcHNGaHNsTDhHQ3k1dXJxNmFGMGs0QXY0YWQ2c0twa0tpVkFCS2lEcFNkSnM3czFlZWZ4UGkrS1Z3OE5YOVhTZDZEL1dGejU4eW5td1B0c1ZEQjl5amxUTXhtT3piWm5aZUdJdVF5eGZPTER6OUVEdnRhUERKM3RtWnVhenFY''@;'; put 'put ''QzFyN3JHRzBsNVZsOUk3bXR2MjVOSzdzbTE3MDBCdk9SWUVPVTFVekt2R1ZtSCt5Q0Q0eTUyVG4zb3ZWcytQNDdPRnoxL1hua084TDJ1ZUp5bkM4L05lNHFmUDZBK1IwY3ZsM2xXSHpwTnlra2Q4NU81MFNHNXdMcUdWaXRRMXd2UzhGaXIwUjdXcVVGR0Z5MmtiVVJJcDVhRXFPMjBXczA4a0kx''@;'; put 'put ''MmlYV1lYQkFkekNCeVYxYURjRktkYkhwcW9SWUhQY0V1S2k1cXdBN0ZNdjBwTGIvNGpsck84RFhWSkozTlgxaXZZdUFLOFMwbldHN05yQVlKTFB0UXNOcmxOT3EwR2ozR1drNEpoS3duTUd6V1hEd2VUN09ueVc4SldqWm9Mc1dLQzlOYm5GaU93bWtVclFXNFprTncrTWJCNmY2RzRXNXZhUGpV''@;'; put 'put ''NEs3QmhtRlJPdG1DVGFsOGRqR0w4V0xXNVpSZVMrYnh4L2VuaHQ0MTB1SWZEaHhJRFowYWFRMk1TbS9tY1h1Zy9WRHV1KzJIYzRHQkd1azVQNXlSSEZlZ1o3MWJwakdGSmpjK3B6andzYUxuejZ2dE1iK3Z1UDBEaFhHT1RzdlBaVjg2SFdlZk1zN0hpK0p5Rjh1WitiUGljc0tmSDVmalZyWklt''@;'; put 'put ''aW5heHdQS1BtQi9NNmpJeGs4VS9BREhGTDIrV0krV1pmclpna3cvTmxMY2QyL0JQMkJROUxiU3ZoY0tjdDh3TGZPdWhyVnB6Z3E2bWhOVlUvaTVzSTdUWTRLZElGRzRFWkF4aUJvL1I1a096UzZYR0ZXMUtDdE5TNm1xcnFyMkNZTGc4RkRab2xXOE45bWdYSFFoUytqV3JKRndWbTlMdk1NdTlC''@;'; put 'put ''Y3FNR29hUGJVTjFoL2NmLzhkdGJtRXM4bjBLVmFOMGVpdWJiRGpIYXdtZytaMFRaTWMwRWd6aUxCRmNRL1ZTTnlZS2lROGlVVU5uSjdYWTYyK21TWkJVNldFMXhPK1VJbnFvdXVzQUN0TnIxZGpuRW93RGRZZERvY3o0WFRBWndVMUpPUXBBeU85c1BMME5tcUlYVkEzRXloSytDSTV1aTIzb3lU''@;'; put 'put ''cDYvQUplWDgvVjVPLzZDN2RVV1BmeHV3dm1oREd0dnlSUWhhWWFpOTlnT25ZQVVYSC9rT0pyaTduWDFGNkdGRG80Wk5GZlUrcWZiRWVQYk5OMytlVnZnVHJENjdibG8rd3ZrR2w3ODBsZUVSenJiNUdub1EyZzZ4TkJXanhGbVNBTm85ekZ0b0kyaWoyTTJEb3U1R2FuM1VJYUxRYXZoa1EreXdh''@;'; put 'put ''WXREVGFrc3RUWnpXb21VNG1zcENCWlhDNTZqam5QRTlKeGx6dTkzTjdxWWdqWUFHdklycjNGdVNwNlVXd3FQTjRlbERQUnZpMCtmUDUzdldVSEdRZW5UMVMwVkpXMzhiNisxZGZXUkRtTHJneDBnVS9CakhZTmxid0JYMGo3TUYvZVBZTE5yS0I0TEwwUGUyNmF2cUxoeTBVZXBkZ0Fab3ZVc045''@;'; put 'put ''ZXBWZ293UU1LM1hWVE5KS1lMemk0am5GWWNlWlhjVm8weVlBUUZZV1gxeERhb1JiRjZhMFMxUVhGZnJZTHdxUmp0bDVNOFdGY1pNeXVoYlE5RzdSbnEyVUNYRGtEVU11QnlxWWNVdE5JNTBtT1d6MFJ0ZnpvaFd2dy80YnprR3hSUTBHaDRFcndhMFlBK3R1VU02RUxRNnpUS04wYWdIclZ6OXdC''@;'; put 'put ''SVFHSmxhcVlqMnEwMFpBUERoclhyUWJMSktkbVZNek9XMUJ2eGVMdzN4YURadVNGZVNIQ2RydEx5YUkzZDlZWk1HVzltbVRMa1dzQ3RzWXVCdkZLT2hzbGJadWNOR2l0UG13SUp3ZU12dzkxankzQlkrTWYwV1BySE4rcXRla1pXc1Rvang4V2FGano5YjBsZk9mYU44ZkVUbTR5dEtYK25YdE1a''@;'; put 'put ''STdndjRVMEdNVEVkaTdUbnFsSXFoUERvc0hvaldFejFmNWFTR09LMkRSME5HNmh6bTlKb1ZnNm9vbFFQMTZYUUNkV3N5TkpMamprdHkzREVlcCs2dWVEN2VsVTFYeENwaTRTYXZwNmJhYnFWdXJ5cVRxaVRScTFSa3ZjajVKK2JWWWJlcnhsc1hNQWhPcCtXWGJ5dkZicStudXJvdDZnaUg2T1Vu''@;'; put 'put ''YzI4MzN3NzArZjhOK0ZYR2FGcjJCUjViKzNpSnYvQmxhS05sTkMzci9NZnVVSElHMXFiUkQ0RXVyVFRPVGlXbVZZNnpxMlhvRkdTcXZQR0JmR1RwMXFxVUFkMUNKYjRmVXV5cnRvc3l3VkV4VVIweGtic1ZVY2hrOU5vYk1OY1RMTmJub1RlcTJHMUV3M213WExaZk9ESlZXYXdvRUFrTEVqZlVn''@;'; put 'put ''UlhpcURCdm1VSm5WUmZrcE9VLzZwSVdxTlZXVlZVNVNaZm1kVnZ5OWZMaTFGaWdVTFhxZ0hYV3QraDUvTWZWTjVTRkFnN1NTczIvV3ZldEFnL2pOL21HV000ZDJHTGFRbTZjVUpJYk41clAwendTR0c4ZjRQUVZJRWNhQVhjWlR1TnZ5WFliUE9jWXJrOG96MjlqejFrZEZwT2JjVVZ1bHBYUUQ0''@;'; put 'put ''QUVsM08zUXB0SnBZMEZQU3EzZVZSdEk5ZHpQYW1PQStOZnhXUWNMcEp4ZEp3d2F6T3B0TGx1WXhzNWo1WjBBWTZZYVFhYnlWaG1BTTJlMHhPMXNtMVRrWmdabWUyRklqRStUWkVrYStjRjBpWDE3dGtqZnVRalhWMjRMaWJHOEpUMHlxZzRLa21va0t1TFdRNWpnMWhyTE9OMVZLanFsZXE1U3FV''@;'; put 'put ''WXhNNHVlOEU4YUxYS3dCaFA1Y2ZIODFQNFFMUDBBbmFHeEJBK0lqM1pYT3hqdmw3MU1RT01mbFVDUjlrV2ZGbXhCYW4rY1pmY0Y4N21MOW1adFNobjgzdTV2ZlJybWtlb3RvZm45eFhOZGJMZ3o5YkRhV3c5MS9NRnUxTi9EQlg1bFJNRnYvSXg5T1VTZlVXMnM4NFdiTWRqaDlCVy9tOWNqdjZ4''@;'; put 'put ''Sk82MjBYNGx1UHkwckRPbmdMRStDK2RxQVl1L1hjd1dxbEQxcEZDR2FxRGxkbXFlRFRNMmFxMDFEaHRMckpNRnNXczl2S2F5UXhwaFcxZGIvTElvWHYySC9mY2NPSERQZmhLWFBEdmxnSThpakhkL2V2L1MzZnU3Vmw4ZzJZbGJKeWZlUGFUWWxkd2JMSjgwaWRyUmxEamh4SG9kZGQweHJRRTR2''@;'; put 'put ''VmF2V1RZWmlFNG5WMVc2Um8xOEdVZDFlc1ZsbDByNXdJcEl0YWR5Mll3djZXdU5OTk9VVTZzdjRQT2JZZEViSFhicmZMeEl5RFpzNHVoSWxyWmNoK3lwRzdxaDBmdXVrVUdXaHpuOExxL251cUdDekpXT0ZXVms0ak1iY3RYSGUzc201QnpOOFc1eFRCYSt4V21hYXY2NklvTVBzck5OSy9qN1RB''@;'; put 'put ''bGV5SG1IOUd4blpkL1BtS0tyQWY0ZVpQaWJWdkQwQ2JrOTRPOEN3OTlaNWJteGFLNlQ2bHlBdisvZGNxNzlESDluWmZ5MXlYT3h1amkyem95eXpydEtjRi9PWmFUcm5KUFhxY1JXWTJzaXE2a1QwUnVpTTluYVVLL1I2ZDAwNmw1ZENhS2RwbGhyRlA5amRHTmNGZlRGSlJEc0R0a2cwdUt0QTZ1''@;'; put 'put ''eFRZSFZpL2VpM3N2NDVrRHB4YnJKUWQ4dFFxdGJkSlJqcXlaZnhFZFRHNndXQTVnQlB0azl1VTEwRlYrOGVwQkUwa2QyVkd3VmFCMjhQckY5VGVITjg2bVNlR3RPMnhaL2l5cERscGNxc3J6VVBKeFpUV3RMZloxR3kyK01oV3RHM0tEeERtOFpFT2Q1M1JLaXllQm8zWmR4MFlENFJUdHRHUkMv''@;'; put 'put ''U0s5dEErS2wvWlNBdUM4Y2Vuc0JjWHl4QkZ6ODlLR1JMUVBqaWFYQXRsbTVvN3UwalNXbkZhemZQazIzbUQ1UHF2UUp0SDFzRy9wOFhxVlByTThxdGFSQW43U1cxSU1lRnUxVmNMVElhUWFKWUtLWFo0MTRzRVk5NUNhRWFJcnBGU3hFUlU1UlI1V2FvTUYwT1VMd0FaRGticXdlVmpQdG9FSGM2''@;'; put 'put ''YmZSUXd4dWFrd0xBZ2src3FrUGl4VFE0bjVHV1BTTTJJMVRXNTRRdGJ0cCtTdWV0VzV4Q2pWbHRDWTJ0Z25XZlVVMXNuNmdBWnIzSEVmUGlhNG1yT2VhN2NTZ2o5b0lNWlJFVGlKSXE5SGVYSVpwYlkvaENoQmVBRjVhMmNOeG1rV2RYTjlURWtDSnJ2ZlJHOGpwaTNVQ2NHN1pYZ21tRkhYaktK''@;'; put 'put ''QXMwQzJPNGl3YjJ3bkFvcTZJYlNJcXVEUkQyOGt3SHdkS2NEZVNYYy9hYm1qd1Yyd1JRQmxNRm1keXg2cDBmamtuaTlVc014ek5Lamo2emhJY3Bibm1QMkM2NnJ5c3E1S21FbjFXanYwbUNySGZZK2hqcGJvejg4MmVMZmhtancyZ29yanhOd3F4WlNQNlZrbmNtUFZsY1VmWjMydThBVzBWdXdZ''@;'; put 'put ''OTdQTmI5UVdMditCYnh1VkxTS20zbm1iMTFuN1VJYlk1Z0NXVnc4bUM2TVBjaUhKN2hYcEhLblA3cmh0RjBNUHZxL0w2ZmZKZEZyTFhmSk0zWkZOOU5qazdlR2JLcktzcWVBeXFEbHl0VkdxVGM2d3VHMXNhRkJlQnY5cnh5UlBGZGRzczczNmE3QUM3aDYzVkFMYWlIbXM1UDZhM0VpbkovdFJm''@;'; put 'put ''V1VpL0wzWlgrbWhOVGNoREk5UWIvWlFiYy9IWGJVcXlRM1pMRnFmbTU5Y05USGZVT0xBNVNiOWd4akY4b2ZYZ0RLZmE1VndCUEZXQ0MzSStQdVY3ZTVnK3hLUHZGZVVIbkZUekErRDVyU1Y5WlIvNDg2b1BIUE9McUtqdlhDRzM0Q2c2VllJTHJFNmI0VXVYb2pNOVZESytuQU5QOFdWUjFwa1VY''@;'; put 'put ''SlA3enFsOXdUNzk3alo5SDFENlVqL2NuVVY5VHhiNjZ0RU4yL1I5WHAwWDYzc1puckw2dDF2aDdDdW9yNEJtNWRLNkJlWXJFTmF2TjNFenhLeEE1VloydllsdVUzV2J2cWlxN2FITnBXeHkvaXdlSWMrL3pacHRKNjNaL2x6WHNmVFV6alI1L3JiRnhhM0hLTlJwRUhRejBNN1ZTcFdHTWtZMnlY''@;'; put 'put ''dTcwenVuMHNlNnlQT0xpN2NwWTR6ancrUUN2VzJSamRGSTh3WTAxTkZWbWtKclJpWS9WMGhJVnZiTHpJdjd4K3BDam14dGJkWVJxaDFySXVOMWRTRzcwMmtQMWRiTGMreEJkekIvU0lETjhaYjV1WnV6bmVjVjc4YTZOME91Z1lSMW16azN5NmR1WTZQU1lqNmFVYnlpeFJ6RzNIeWg4SXg3VzFu''@;'; put 'put ''VnhmY2szOWpaR1E3RHE5cm5xM2I1L1M0eUx2OGQ3bXp5dStTSGNwN3dORnBGTmlTZ2RyYUN1TXJQYUtVa0F5R3RjZ0Q1UHMrNEdVZS9tWlFyUjN3T2paSlpyZHp0VytUY3ZhSEQ2MjRwT0hRZlpKNGJtK0xKbGUrZEpWMzRESGthZHQ3TDVzM2FBSVo2NXMreVlqd0VRcERWZUJDTVZ0ak5CZk5x''@;'; put 'put ''Y1RmaEpwbVM1d0JScUZVUUExSE5UYjE0bE9yWWRCSDBhZ3R6dlV0d21FT21aajRSdExQZmcyYjZPK216V0N2S2gvaHNwL29wbjBjM2ZwemxnL09vbXEycVFndllPRVN0MUt1dGxrSWV1WlAzK3BYRWNKenRQWnNoTDFmYzlHR1dJSTdYNXFSZnJ6MjhkajhxUno0MmdxdDhpMm9WWDJFc2Z1Tmx1''@;'; put 'put ''RitRZlpBMlY0MzNEZG0zeVB5TUJmNTR2Y29mVVIvT2JNTWZYMWI1SStwRFR4WHgxdlcreC9HWEw5cjNPQmFMK3M0VitoN0ZReVg4VWU3N1FLSHZVZXEzWlBjVEx0QTRRbkVNNHMwMVdRZDRjMDNSQVJKcnU2a3ZYL1pMc3piZmZGT1NZenR2U2tvYjJiKzlVaGpIREx4dWEvLzIwd1gvdG5rY2Ja''@;'; put 'put ''azcxcmVGanJFeHprdFEzd25sZmxYMG44U0FveGUvZi9nZnBEaU9kcWg5dVBhMzBZY2piMHBxbjJIOGJYU0IzQWs0MC9vd29NdlFwc3U0WFpzdTQ1YXJoaFlla2JISXFqcTlaU0Y5Z1Y2blhHMm4xeW1UVytsOXloYTNmSjh5aFNQK0ZucU1mQXFnVUlHb0xHQTFRR1NrVUFNRTY4QW4yVHBxVWZz''@;'; put 'put ''anRlVkVYWXFaRmRheisrTFpZcXdieWo0NHh2NFdIdlZWK1N6c1JwR05LM0p1dThCLzNXYXRydEoxNCt2SXB5cUQ4cnJaK3I4SzY3Y1UxazlSU3QwSXZYUHJjZHlOUC8ybjFWSDhyNzYrZUx5M04vNjQvQkh2ay9GbkdQQXFoSFlDYmdpQUcxNTQveXJEY1FIZkRBMTRlaysvWm5mUlBmM2RhQlJt''@;'; put 'put ''K3cvNXJ2NldDcXd0bDYvUjEyT2RDWmNaZFdYRlYrOWJ6UmJPYU9TV0JFTWxyeW0rc1Q5OWtZN3M5bjI1TjA5N2M4cTkvYmt0KzIxeGMzOUpYekEwTW1Oam9xamU0RDgyUHphM2E2YzRLbzRNOUNlNkUvbTJ6SmEzK2R2K2pOdjhHemI5N1N0cTI1RDVrMi82eDhPRHdjSWYwaFBxdmY5MzUvN1Uv''@;'; put 'put ''d0hBbHY4emdQWC9LUUM5VnlpTjF2RGYwZHNtSHRaaW5BaDNZeWZBTG5CdjVoT2Z5THorZGROalQ1aVZPNTNTb0dRcjdUaldMcGgxOHRGUGZDTDkyYy8yUHZHWTZldmZZTExpWjhxZGluRTBLWTdWdUlsR0IrTFBpT25OdUJvcUNqWGNzZ0dUTW95Tk5BKzhrUGx2d2thajZ1bGd0bUVzRW01dUVp''@;'; put 'put ''eCtzUGtFcTk5TWZWU0ZlenFDWUJCUzB3SSs4cVNRYktlam1VUUFaQ2Q4MFBqWGkvS1ZpMk8zTFR2MlRYSzZYWWRjUjI0WlZoTCtaejdreGNQU1oza05YcExPMTM5MFQ0SmR3OWg3Y2lqbmRIcnFjMzJYZHJKcy93TVR1VnB2dFMwM2UwS1c3emhPeXZGbHdBZDFENE5DbDJCY1Q3NHA5ako2Unl4''@;'; put 'put ''VGRFRFY0WUFyZXdRUDRWWlg2WXZ4b1NUQXBVNnBKZGQveVdVMWEwbGlpMHRTU292QzY5NnFLUHlONVcxcndvSE81VGxCQnVDRUVsdDRnTkcvL1B5Qzhudzk5aWsvZjc3d25MKzYrUGtENm5OMDlOTGk1K3ZqOTRGYXRmNzhiS0g5c2YxSWdjRTB1UXhnUUdNRitpODFlYTBZWUZCaWlxbVFXTGZE''@;'; put 'put ''QXB0aGNwbHNseFVEUnJITC9yTUlQb3FOTmxjRUlzVTgrNHNOV1FucmE2WjJ0YndYc0wzL29tZ3ZUeGRnWXA2VDVTaE4rL2tJdTV0Q3hZV2s0SjFXcnFPZzM2L053UGZhMHUrMXE1UG9md0FQZm54NUFBQUJBQUFBQVFBQXRDY0F3bDhQUFBVQUh3UG9BQUFBQU5QQm5ZWUFBQUFBMUw2bTlmOVcv''@;'; put 'put ''dThFV0FQRkFBQUFDQUFDQUFBQUFBQUFlTnBqWUdSZ1lENzY3ellEQTB2SC83RC9rMWtpR0lBaXlJRFJHZ0NsaGdhdkFBQUFlTnFObEUxb0UxRVVoYys3azVVTHdUOFVCU2xxRWx1YnBLMmhEYVkwbEJSYmJVclNqbllSYWtXaEN4ZGFZclc2RnRHNkV4RVhYZmtEVXZjdUJiSHVSTWdtdU5LSytF''@;'; put 'put ''TVVXbHhrSVMwNG52dWFxWFhTZ29IRE56TzViOTY3NTUxNXBvWXo0TThNVVFjb0E5ZmNSNzg4UkZUT0krN3NRRUllb0JrZjBXL0cwRVBGelF6U01veXNBZkptQ2lrczRvUzU2LzJVSjBpYkl2YktTYlJMRHc3TEJGVkFTczZoVzA1elRBRkp2YmIxSE11NkxuMFBtVE0xN0hOS2FKVXZhSkpIR0pj''@;'; put 'put ''NTF0YklDZFlWcVNydlh5R1BCVjd2NGh3M01TYUgwT2NNc0laMVRwVC8zMERlOGhacnVIYVpSa3plWTFUZkdXcEdXSjRoSXZld1hhN2ptTG1BWWE1NWhXdzNuOUVwQmUrM1NTTWpYZWlRSzNCbE45cklUbkhSeHA3RE1ra2ZzaGhDQlJtODlWN0lOZ3ppSFhMT0ZITDZYSzdaZWxmSG1LdjBjQkV4''@;'; put 'put ''TThseFdmNmZZRzlKSEpROTdHMEErMFZZY3dkSHpGWmNKT1BtSlhycCs0aWRzMGhQdUVZeml6Nnp4SnJueU5oMWpTT0tEL1E4eWZzbEpPblhxbGNieVBsT3FuL3EzVHBod1N1cmYrUVA2cHV6QlMyK2QwSEpUb3hZcW4vcnBmN1JaK25BS2V2VkJuTEtwUGJpL2l0VXZEZjBiNUQ4U24yU1M4eUY3''@;'; put 'put ''MTFRbWd0bDF2cjdWK3FmK3F6VWZuWE9JTFYzbmQrbjVvajdZdnU5elQxVlAzUk5tMUd6cHZ0ZEo3MnFjTDNxWFJPNVFoN1hQbXdHbVFQTm9XWmhqV2NSTmhIdXZjNnIvUVZvZldWdmExeEdNdFRDZVpsYnpVNERtV1hOVXdPbjZ4bnpxZnVqSG0xQy9RWnNEblVQMWIvNnQ2QjVERkl6em14bXJC''@;'; put 'put ''NHo4MlV5UjNWVHI1bkRYM3dHYjlSL1o1QU5udGJuWkc3aFZGZlBHeXhUVHdIcFJjcTVqQlRQQkhzdW1IbHlucHlsdnlWZTgxd0t6U0JoV2hHaFlqTG5WVzArSEk0dDRlaC9pWm1CK3dlYlAvVU1lTnBOd2wxSUdnRUFBR0R6djFOUE8vVzY4KzY2WCs5dWV1ZWRkeEVSRVRKRVFpUWtZa2owRU5G''@;'; put 'put ''RFJFUVBRMEpreEFqcElYeUlpQmdqSW1TRWhJd1lJU042a0JnUnd3ZUpIaVFpSWlRaWVoZ1NNbVRzWlEvait3d0d3L0kvZTRaeUQ5S3pib3diVDR3UEpvTUpOMVZOZDJhcm1USy9OVStiRDh3MWk5RXlaOW14UEZxVDFpWHJveTFwMjdFZDJzNXM5N2FPUGRXYjZNMzIvZ1FnSUFua2dCTFFkbENP''@;'; put 'put ''SWNlQ1k5dnh6WEhudERvbm5Cdk9sb3R6cmJwMlhYVlhHMlRBTkpnRkQ4QnpzQWwyM1FQdVVmYzdkOVVEZXFZOFpVKzNMOVZYN1d0REhMUUNmWWFPdlVidm1MZmd2ZkZwdmhsZnhmZms1LzBKLzN2L3ZyOEpXK0VKZUI0K2drL2hsLzVZZjdHL2pqZ1JCQmxDMHNnSHBJVGFVUis2aU9iUklycVBI''@;'; put 'put ''cVBuNkhXQUNqd0gvbUFlak1FR3NRU1d3UmF4UEhhSjNXQXZ1QUdIY0E0ZndxZndHbjZGdC9BT0FSQTRNVTFVaU8vRUQ2SkIzQkpQeE92QUpqbEl4c2dVbVNIbnlSVXlUMjZRMjVTZDhsRVVKVkhEVkp4S1V4VWFwaGs2UW8vUUNYcVNMdE1uOUFWOVJiZm9YMHlNT1dYcVRKTjVaam9zd09Jc3h4''@;'; put 'put ''YllYYmJFbnJBMUR1SStjVWRjbGJ2a3Jybjc0RXJ3WTdBWVBPY1JQc1RIK0JTZjRSZjVQRi9rOS9rRzN4VkFJU0R3Z2liRWhiUXdKeXdMYThLbTBCUm54R1V4SnhiRUxiRWtmaFZyWXYzTllXZ3R0QlhhQzRmQ2pmQkQrRld5U3o2Smx6UXBMcVdsTDFKWEJ1V0FMTW5EY2xLZWtSZmtuRnlRZCtX''@;'; put 'put ''U2ZDMTNJb0ZJS3BLTlZDTnRaVXlaVlRhVlBhV3NuQ29YU2xOcEtSMFZVSEZWVkVmVXhIOW0xWnhhVWMraVFKU0pqa2N6MFl3Mm9jMXBXZTFCYSt0R2ZWUWYxNmYwV1gxSlg5WFg5WVorcXovcHZ3ZUJ2MHRBdlNvQUFBQUJBQUFCUEFCWUFBb0FQd0FFQUFJQUtBQTVBSXNBQUFDREFSWUFBd0FC''@;'; put 'put ''ZU5xRmtzMU93a0FVaGM4VUpJREdLREV1R2hkOUFmbFRJZXBTdzBaUUl3bzdFaEFFSWxBdHhZVFg4Q24wVGZ4NUFkMjRkdTNhaFlmaHRxREJrRWs3Mzh5NTk5eTUwd0tJNFFNQnFHQUV3Q0dmTVN0WVhJM1p3RExxd2dGazRBZ0hrY1NEOEFKTXZBbUhtUHNsSEVaYXhZUWpNSlhudVlodFZSRmVR''@;'; put 'put ''a25kQzY5Z1RYMEtyeUtxdm9XZnNHNkVoSitSTkRhRVh4QTI4c0t2aUJyblkzNFB3RFFxT0lDTkd3eDU0amFhYU1IbHlSNzVwSG55RkR1eFVLTnFNYTZsWS9ya0l1Y3VzL3JNN1NHT0Fock1jN1NUalk1RTVYM0hNK3BOREtoVUdaVmlSbEtQZlZ6Z0NHVWNrMlo1YkU1NXpLdGgvYWxTNHNwaFRG''@;'; put 'put ''dWYwWnFxT3E5U2lYVEoyV2JNcVBNVDVqYzRqL0xxMUtya1UrcERYZC9sM3Y5M00vSnp1ZHBEZ3VQdWw3T3RmYnUrYTV5YXpiV1gwNWVzSmxXWHV3TitDUzhtd2RtcjJkVmRUbW9tWm5ZNGEyL1NjNWxxRFZjNjMvVnZxeUIzbDlPcXhaSFJXcFluUzJHWDd5M3MrUDlLRnRlTWEyaC9SKzQ5NXpz''@;'; put 'put ''V2Njc08ybFFjeG5SK0FHaWlndmNBQUhqYWJaTlhiQnhWRklhLzM3RjMzVFpPNzcxWHgxNzN4Q2t1YThleFl5Y3VjZXpFU2NhN1kyZnhlaGZHdTNGc3VnUUNIa0R3d2pQbENSQzlDaVI0UUtKWDBYc0gwWG1rQisvY0NWNGs3c044L3htZDg1OHo5OTRoQzNlZEcyQWUvN05VbTM2UXhReXl5Y0dI''@;'; put 'put ''bjF6eXlLZUFRZ0xNcEloWnpHWU9jNmZxNTdPQWhTeGlNVXRZeWpLV3M0S1ZyR0kxYTFqTE90YXpnWTFzWWpOYjJNbzJ0bFBNRGtvb0pVZ1o1VlJRU1JYVjFMQ1RYZFN5bXozc1pSOTExTk5BSXlHYWFHWS9MUnlnbFRZTzBrNEhoemhNSjExMDA4TVJlamxLSC8wYzR6Z0RuT0FrcDdDNG5hdTRt''@;'; put 'put ''cHU1Z1R0NG4rdTVscWY1bUR1NWpidDVubWU1aDBIQzNFaUVGN0Y1amhkNGxaZDRtVmY0bGlIZTREVmU1MTZHK1lXYmVKczNlWXZUZk0rUFhNY0ZSQmxobEJoeGJpSEJSVnlJd3hncGtweGhuTzg0eXlRVFhNeWxYTUpqM01ybFhNWVZYTWtQL01Uanl0SU1aU3RIUHZuNWk3ODVKNVNyUE9WTEts''@;'; put 'put ''Q2hBcHFwSXMzU2JNM2hWMzdUWE0zVGZDM1FRaTNpZDk3UllpM1JVaTNUY3EzZ2M3N1FTcTNTYXEzUldxM1RlbTNRUm0zaVB1N1habTNSVm0zVGRoVnJoMHI0Z3ovNWtxOVVxcURLVks0S1ZhcEsxYXJSVHUxU3JYWnJqL1pxSDArb1R2VnFVQ05mODQxQ3ZNdG5mTUNIZk1TbnZNY25hbEt6OXF0''@;'; put 'put ''RkI5U3FOaDFVdXpwMFNJZlZxUzUxcTBkSDFNc0RQTWdqUE1wRFBNdzEzS1dqUE1PVFBLVStmbGEvanVtNEJuUkNKM1ZLbGdZVlZrUzJodngxbzFiWVNjVDlscUd2YnRDeHo5Zyt5NFcvTGpHY2lOc2pmc3ZRMXhpMjBra1JnOGFwQ2l2cEQza1d0bUYrS0pKSVd1R3dIVS9tMi85S2Y4aXpzajJy''@;'; put 'put ''a1BHd1hSUTJoeE9qbzVaSkxSek9DUHd0bm52VVk0dm5FelVzYk0yc0hNa0lmRzFXT0pXMGZUR0ROdE12WnRCdVhzWmRGTFpuZXNRelBkcE5ldHlGdjhPYklXRVk2RGlkaWc5YlRtbzBacVdTZ1VSbTVPczBIUnpUb1RPemc1UFpvZE4wY0F5NlROV1lDMzhxSGkwcHJReDZMUE4xbTZTa21hYkht''@;'; put 'put ''eVpsbU5QalJPUERPYW4wTTlEem44bFNtWkcveDl2QmxHRkJiempxaEZPalF6SDdiTUY0aHU3TDBCUFQydGR2WnB4MGtkOC9mZHFUMDZlZG5qaFlWdVd5TEZqcDZ4MTJyS2xyTlc3UWF4ekdYZVQxUnFLMlk0OUZ4L0xHejZ0MFhXbW92dHBqamNjR2o0MitQbU0wNFNMOU5saFNFdlJZNXJIY1k0''@;'; put 'put ''WEhTc05nVTNZbzVTVGNvS0twSWNjcXRtTEpmTXVkeFVqMzdxZGxrVFg5MmVrNFlKMGYwQ1M2M2RPeXdQdDlqRGI3bXRaNVZ2bzBUSEl5R291NHliblcyTlFlUld3bkwySjc2aCszWmJjaEFBQUFlTnBqOE43QmNDSW9ZaU1qWTEva0JzYWRIQXdjRE1rRkd4blluVFpKTWpKb2dSaWJlVGdZT1NB''@;'; put 'put ''c01UWXdpOE5wRjdNREF5TURKNURONmJTTEFjcG1abkRacU1MWUVSaXh3YUVqWWlOemlzdEdOUkJ2RjBjREF5T0xRMGR5U0FSSVNTUVFiT2JqWU9UUjJzSDR2M1VEUys5R0pnYVh6YXdwYkF3dUxnRCtIQ1ZnQUFBQUFBRlltUFozQUFBPSkgZm9ybWF0KCJ3b2ZmIik7Zm9udC13ZWlnaHQ6MjAw''@;'; put 'put ''O2ZvbnQtc3R5bGU6bm9ybWFsfUBmb250LWZhY2V7Zm9udC1mYW1pbHk6TWV0cm9wb2xpcztzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24vZm9udC13b2ZmO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdSZ0FCQUFBQUFGVWtBQk1BQUFBQXBRZ0FBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB''@;'; put 'put ''QUFCR1JsUk5BQUFCcUFBQUFCd0FBQUFjZk5INTVrZEVSVVlBQUFIRUFBQUFUUUFBQUdJSDFRZjhSMUJQVXdBQUFoUUFBQWNYQUFBT2RqNThmRXhIVTFWQ0FBQUpMQUFBQUNBQUFBQWdSSFpNZFU5VEx6SUFBQWxNQUFBQVRRQUFBR0JvUUt6elkyMWhjQUFBQ1p3QUFBSnNBQUFEbm5kREQ3Rmpk''@;'; put 'put ''blFnQUFBTUNBQUFBREFBQUFBOEVhd0JwR1p3WjIwQUFBdzRBQUFHT2dBQURSWjJaSDEyWjJGemNBQUFFblFBQUFBSUFBQUFDQUFBQUJCbmJIbG1BQUFTZkFBQU40d0FBSEc0LzdIR0RHaGxZV1FBQUVvSUFBQUFOZ0FBQURZTFpZZ1NhR2hsWVFBQVNrQUFBQUFoQUFBQUpBZDZCQ0JvYlhSNEFB''@;'; put 'put ''QktaQUFBQW9ZQUFBVGFxMU0rVld4dlkyRUFBRXpzQUFBQ2N3QUFBbnBON2pMbWJXRjRjQUFBVDJBQUFBQWdBQUFBSUFLRUFwRnVZVzFsQUFCUGdBQUFBWEVBQUFNUUkreDRZWEJ2YzNRQUFGRDBBQUFEb1FBQUJpR1hGajJLY0hKbGNBQUFWSmdBQUFDQkFBQUFqUmxRQWhCM1pXSm1BQUJWSEFB''@;'; put 'put ''QUFBWUFBQUFHOW5kWW1BQUFBQUVBQUFBQTFGRzFhZ0FBQUFEVHdaMkdBQUFBQU5TK3B2VjQyZzJNUVFxRVFCREVFa2YwTUxQb2Y3eXBML0RvZlhmVi96L0FJZ1JDMFRRQ0xSNmNkRlJralZzbzdIelR2MUQ0QjdtNDA0OERPbG9wTmx2NjQ1U2VYWExUNTFzWHpTYStXM0FGM0FBQUFIamFqVmNO''@;'; put 'put ''YkpiVkZYN091ZmUrMzlldmdLV1VINkVnSVZnYjB4UkdtQWl5YVJoVVJ5cVNqaWthWnZiam5JUHgxMkV6RnVmNGNXZ1dVaGVIREFscEVQa3gyZ0NpWWtYR3VvWXh4ellDeWd4aFlGd0h5QlltMCtsQ1JIbjN2T2Y5c0MvUWJ1TUpENGR6NzN2dlBlYzh0K2NXQXFDQUVaZ0ttVnhYUHdONWVIb1F4''@;'; put 'put ''M0Q4UjZCd2M3N2RPQThWYzcvUk9BZVZjK2ZNbmNQWm9EOFpUV2NrN1BoZEFRTXdERlhtY1JpSmV0ZWFqa1lMYkZXSm1oSHhJK205aUY4TU5sOUF4V2NRMU1YTjVJQ0pXSWxQRWN0Z0tJL0JlVEpJanFFVXZYaXlmOFFkOFpiNFNId2NQZnlKMys5eDVQZmRlanU1ZC9iL0orT2Y5N2pDdXoyTzlI''@;'; put 'put ''eWVQOFc3ZWhqWkVuZkd1eE5jNWovQ3Y3OUwwTjBlY1RPenBCak9URmN4VzljUmlsckNZUlRoTVlZSStEd1JZUnlSdzNnaWp3bEVDWE03a1pWcUlnUkw4UlBPZkpRSXpQaEsrbDhtQks4UWdsY0p4U0hDNDAzQzR6Z1I4RmNpd2traXdydEVoTE5FRHU4VE9ad25TbGk5VDdsYVRCU2tUTXBRSXVW''@;'; put 'put ''U1RxNlFDdkpnVnJiQXRVZFRKU1A1emZXRTJMblRFNnVkMk5tSnZaMDRZREtSUngxUmd0dUlBaHFJVXN6SGcxd2hpU1N5U0NLTEpPQnhQTW41cTRrUy9BSnJPZjlwYk9MOExVUXB0aEU1YkNmeWVJSElZUWVSeDR0RURpOFJlZXdrU3RCR2xHQVBVVUE3VVVBSFVjQmVvb0RmRUlMZkVtTFppZkEy''@;'; put 'put ''VVlxL0VHbGUxUEtpbGhkdmVRbVdsMkI1OFpZWGIzbnhNbEFHTWw5WHk5WGtKRWVCcTlZeVExV3NjUzFyTzRZMUhjZk1UR0JHNW1NQkZxSVIzOGNpMW5JcGxtRTVIbUVXSG1YMDJ4alJpNnprSzZ6Z0lWYnVPQ3Qya3BVNnk1T2N0NXRWeG4wcmt2dWxEOXM5M0NlTmpMczMxYldidW11T1ArcEdy''@;'; put 'put ''VGJTM1IzNGJPUk1nbTYrUE52ajNUaHpVZkc4MThmajVmSHl5MGZTV3hldmk5ZDFPL0kzKzBaUmFab1EwNFRpcTRURDNZVEhQVVRBTENLaUlwN2tuRVFOWW1wUVU0T2lsWWl3bFlpczBtS1ZGcXUwV0tYRjZxbzRRVGljSWh4T0V3NmZFQUVYaUVqNlNsL1d0Wi8wSS9lWC91U2tvbUlWRlJraVE3''@;'; put 'put ''aStvZ1pYRWFYb1MvUXlwWXNwWFUzcHJxajBXNG1zMHIzRkUyWGl5Wm5TWFZIcFhScjNGcFczcUhJVzFVV2xweHBQMWIyTDZGblhTYlRlTkt2RkNCUGxPb3N6Wi9wMXBsOHR4cHlvV0l1UkoxcldUUHhaUlR2TFFrNUd5M2p1bnZ6MHFtT0VEYXpYM1l4ckZpTlp6VWpXNENsRzh6UTI0QmxzWkVS''@;'; put 'put ''YkdNbFczc1kybnJhZHA5ekwwNTFnRFU3elpCZDRnbjdjYlNCM0djSVZoNW1lRlgyc281U2JPc3E1eTgyMHhPeWIyWW1PUmNQSW5jeC9oNnlRbGZLRXJKRVcyU2pQeVhiWktidWxRMTZYQTNKWWpzbzdja3JPeUFkeVRpNm8xNEtXNlFDdDFCRmFyYlU2Vmlmb0xWcW45ZHFnTS9WZXZVOW42d0p0''@;'; put 'put ''MG9kMG1UNm16YnBLMStwNjNheXR1a1BiZEkvdTFmMTZVTi9TWTlxcHAvVTkvVkEvZG5DUjYrWEszU0EzekkxMDE3dlI3Z1kzMFUxeXQ3bHBib2E3eDMzZDNlKys1eHJkRDl6RDdoSDNVL2N6dDlxdGN4dmNzMjZyZThudGN1MXVuL3VEZThNZGNXKzdFKzd2N3AvdTMrNFRyejd2Ky9nS1A5Z1A5''@;'; put 'put ''MVcreG8veE4vb3Yrc2wrcXAvdTcvU3ovRGY5QTM2ZVgrUi82SmY0Rlg2bGY4S3Y4UzErbzMvT2IvYzcvVzdmNFYvM0IveGhmOVMvNDAvNU0vNERmODVmQ0Q0VVFsa1lFQ3JEaUZBZGFzUFlNQ0hjRXVwQ2ZXZ0lNOE85NGI0d095d0lUZUdoc0N3OEZwckRxckEyckErYlEydllFZHJDbnJBMzdB''@;'; put 'put ''OEh3MXZoV09nTXA4Tjc0Y1B3Y1lRb2lucnhkaXpXYmVRbHhuVVpYcFV3bW94YnpMTzB5MS9rYWNZMXhqY1pQNWl3RGpWN3V2RWs0MnVWUDFPbDJuaVU4WlNFc2RCNGs3NUdialQvZU9PSjV1ODBQbStlNjR3M0dGY1o1NDBiM0d6eTg4YUx1MmQ5TXh1aithOWdURE4rMXJpcGkrV3VOSGF6NXhu''@;'; put 'put ''dk0xNTFKYWNaTVB0S25tNThyYmIvTDlhTmwrU3F2VHZHbDQyZk1WN1l4Y3hldTJYdnYzT2F6L1p1dVNyRGl6Tm52c1RPMUhTSithdk5uN1hUckQ1dTlsMlp6SS9xR3IxbzIyaXFpcXcvemVxVTFMWTVxV2JTNnFSUnAvb3Mya1YvTXFmRjdFMnU2YUo2aXhwN3crejlpVjJzYVpxeFZOdXA5ckwr''@;'; put 'put ''OUF4cDNnNmEvU09yMFo5TjUrZHNmcXFjVHB0ak55TFY3U1grR3JQUHA3Yk5TVldkOWFjMzZLYU1adEtLWk8wWHpQNVc2cmY1ZGk5MHFQazNtRDlWV2xYR25tU2NOMDlQOWtmcGZiSG83akQ3c05uWmxldmlYeVhWaWZkY1ZxbnNqbE9LdDd2OS8rQkxaeXF1c1hjcCtPNnFabGFTMTZsbjE2NWhG''@;'; put 'put ''MHhlMkJFK3g1ZFlEbU54STN0WTBybjdzRzkvZ1QwOTZkeDk3WTFhYnAyN0gzK3Ztc28rVkUvMHh4M3Njd1BZNmU3azd6NHppVXJyNVVQWjliN0dyaldmYjdmaDlub2J4NDdld3ZYV3MvUGRicjN2Syt4K3I3RkQvaElIOEIyKzZNNWlzYjBxMStCZkV2QVVPL0VRdEZwUGJlTjVSYTZ5MzgwaVNQ''@;'; put 'put ''eGpVK0VTM0U5ZXdXNVhpa0hjYXlRakdvMGJlT3BKUE9VMHpPRG9yMDI3ZnpRK2FteDNCdnN5Zk1oNHJ2Rm00MVJWT2JOTDhTWHU4d0MrS3puSlM0a1VwRlI2UzU4clQvUWY2ajZiS1FBQUFRQUFBQW9BSEFBZUFBRkVSa3hVQUFnQUJBQUFBQUQvL3dBQUFBQUFBSGphWTJCbWNtQ2N3TURLd01M''@;'; put 'put ''VXhSVEJ3TURnRGFFWjR4aEVHTTJBZktBVUhMQXpJSUZRNzNBL0JnY0dCZFUvek5ML2pSa1ltSTh5cWlzd01Fd0d5VEd4TXEwSFVnb01UQURKWlFwQUFBQUFlTnExazFsUWpsRWN4bi8vdDMwUktoVDE5dlpwMDBhaUZFWDJwY2krbEt6WnNxL1pHdXNRUTBWU3lKNGtveGtUVTFPMkcrNjROV09N''@;'; put 'put ''dnMrVlcrNE1IY2RYVERQTXVISm0zblBlYzg2YzU1eDVudDhmY0tIckMwRjBqMVRxbVRqbnJsS3N4eVdNdzQyQmxIQ0xPdTdTU0JQTnROQW1IaElnZ3lSTUJrdWNKRW1xcEV1bVRKVWN5Wk5DS1pJU0k5VjRaYngzaVRLUG02M21FL09MNVc0RldzRldxR1d6b3F4aFZycDEzK1lmK1UwcGZZZkZq''@;'; put 'put ''UjdhajJuam1maEtmekhGSnJHU0tDbVNKaG1TSmRtU0t3V3lRVFpyN1pmR1c2MTl5R3d4MjgzUGxtRUZXRUZXaUZON3FKWDJTMXQ5VkMvVWMvVlV0YXRXOVVnMXE0ZXFTVFdxQmxXdjZ0UTFWYXRxVkxXcVVwV3FRcFdwTTZwVW5laDgwNW5WbWZUOWs2UGNVZURJZDhUWUI5cjk3RDUyTDd1YjNl''@;'; put 'put ''ajQydkc1NC9DSGtIZkpYVjc5cCtadWVEdVQ0STliQktQN3ovaUhSdGRKRjF4MWR1NTQ0SWtYM3ZqZ1N5Lzg2RTBmK3VKUEFJSDBvejhEQ0NKWVp6eElweDZLU1poT0pCd2JnNGtna2lpaWlXRUlzY1FSVHdLSkRHVVlTUXdubVJHTUpJVlVScEZHT3FNWlF3YVpqTlhNWkRHZUNVeGtFcE9ad2xT''@;'; put 'put ''bU1aMFpaSlBEVEdhUnkyem1NSmQ1ekdjQkMxbkVZazFhSHZrc3BZQmxMR2VGZnY4T2RyS2JZZzV4bk5PVVUwWUY1emxISlZWVWM1RWFMbkdGeTlSeWxldmMxQlQ5WlBRMkRacWxlNXFtbjIwVnE3VWQwV3pnYkxjMzYxbWorMTJjK08xVzRWOGN2RUE5bTFuWlkyVXRteVJHajF2WXpqSHNPQ1Jj''@;'; put 'put ''OHhrcFVib0NJcmlqZHg2Z2FaWUVYUS94M1dlS25HSEVzbzI5YkdVZmV6akFRVjFMK3puQ1ViMTFtRkpPY1pMWHVwcDZzVTY4eEZ0ODJDaCttbi9QSDVETnF1aDQybU5nd0FMOGdkQ1p3WmxwUFFNRDAyNG1WZ2FHL3lITTB2K05tWGIvLzhKMGpFbncvNWYvZmlBK0FNOVBEVmg0MnExV2FYZlRS''@;'; put 'put ''aFNWdkdVakcxbG9VVXZIVEp5bTBjaWtGSUlCQTBHSzdVSzZPRnNyUVdtbE9FbjNCYnJSZlYvd3IzbHkyblBvTjM1YTd4dlpKb0dFbnZiVUgvVHV6THN6YjV0NVl6S1VJR1BkcndSQ0xOMDFocGFYS0xkNnphZFRGczBFNGJab3J2dVVLa1IvOVJxOVJxTWhONng4bm95QURFOHV0Z3pUOEVMWElW''@;'; put 'put ''T1JDTGNkU2lteEtlaGVuVExUMTFvelpyOVhhVlFvVi9IemxDNEVLOWY5dk14YlRWOVF2WTZwaGNBU1ZHSlVDZ0lSSit4b2syWXcxUjRKbW1QOUhEUHYxWDBCYjVxUm9QNjZIMkpHc0s2ZjBUeWorZEFLZ3lDd3lMU0RRSkpSOTdlQ3dLRzBFdGduVTRqZ1dkYXIrNVNWTHVXa2l6Z0NNa09ITWty''@;'; put 'put ''Q0w3RVpaemRjd1JyMjJFbzg0QzlJbFFhbFovTlFlcUlwbWpBUXoyVUxDSExaRCt0V3RCTDRNc2dIZ2haV2ZlZ3NEcTF0MzZHc29oN1BiaG1wSkZNNURLVXJrWEhwUnBUYTJDYXpBUU9VblhXb1J3bDJkY0JyM00wWUc0SjNvSVV3WUVxNHFGM3RWYTJlQWNPcnVMUDVidTc3MU41YTlDZTdtRFpj''@;'; put 'put ''OEJCM0tDcE5HWEZkZEw0TWkzTkt3b0tUSFM5UkhSa3RKaVlHRGxoT1UxaGxXUGREMjczb2tOSUJ0UWI2MHlpMkpmUEJiTjZoUVJXblVoWGFqQllkR2xJZ0NrR0h2S3U4SEVDNkFRM3lhQVdqUVl3Y0dzWTJJem9sQWhsb3dDNE5lYUZvaG9LR2tEU0hSdFRTbWg5bk5oZURLUnJja3JjZEdsVkx5''@;'; put 'put ''LzdTYWpKcDVURS9wdWNQcTlnWTl0YjllSGdZQll4Y0dyYjV6T0lrdS9FaC9nemlRK1lrS3BFdTFQMllrNGRvM1NicXkyWm44eExMT3RoSzlMd0VWNEZuQWtSU2cvODF6TzR0MVFFRmpBMWpUQ0piSGhrWFc2WnA2bHFOS1NNMlVwVTFuNGFsS3lvMGdNUFhEOE9oSzBLWS8zTjAxRFNHRE5kdGh2''@;'; put 'put ''SGhuRTEzYk9zNDBqU08yTVpzaHlaVWJMS2NSSjVaSGxGeG11VmpLczZ3ZkZ6RldaWkhWWnhqYWFtNGgrVVRLdTVsK2FTSysxZytvMlFuNzVRTGtXRXBpbVRlNEF2aTBPd3U1V1JYZVROUjJydVUwMTNsclVSNVRCazBhUCtIK0o1Q2ZNZmdsMEI4TFBPSWorVnh4TWRTSWo2V1U0aVBaUUh4c1p4''@;'; put 'put ''R2ZDeWZSbndzWnhBZlM2VkVXUjlUUjhIc2FDZzhkc0hUcGNUVlUzeFdpNG9jbXh6Y3doTzRBRFZ4UUJWbFZKTGNFUi9Kc0RqNnVXNXB6VWs2TVJ0bnpZbUtqMGJHQVQ2N096TVBxMDhxY1ZyNyt4eDRadVZoSTdpZCt4cm5lV1B5RDROL2l4ZGxLVDVwVG5Cd3A1QUFlTHkvdzdnVlVjbWgwNnA0''@;'; put 'put ''cE96US9EOVJjWUlib0o5QlRZekpnaWlLR3Q5ODVQSktzMW1UTmJRS0gwOEVPaXZhd2J4cFRvd2pwU1cwcUVrYUFTMkRybG5RTk9yejdLMW1VUXBSYm1LL3Mzc3BvcGpzUlJuTWdDa281S2F4c096dnBFUmFXRHVwNmZUUndPVkcyb3VlTERWYlZuR0Z2UWZ2WThqTkxIazNVbDY0S1NudFJadFFw''@;'; put 'put ''N3pJQWc2NWtUMjRKb0piYU8reWltSktXS2dpUGdodEJmdnRZMFFtTFRPRExvRWlaSEd5c2cvdGloMDVvb0oyQXQ5NjBpcnYyMEx0ejNYeUlEQ2JuVzduUVphUm92TmRGZlZxZlZYVzJDaFhyOXhOSHdmVHpyQ3g1aGRGR1U4dWU5K2VGT3hYcHdTNUFrWlhkci91U2ZIMk85YnRTa2srMnhkMmVl''@;'; put 'put ''SjFTaFh5WDRBSFErNlU5eUlhUlpHeldLVVJ6NjliZURKRk9TakdSWE1jRi9UU0h1MktWZCtqWGRoMzdhTldYRlpVc2g5bDBGVjAxbTdDTno1ZkNPcEFLZ3BhcENKV2VEcGtQcHVkbXZDeGxMZ3NSZHl6Wk5kRjlCMDhJUjNpdnpqRXRmL3IzSElVM0tMS0VsMW8xd25KQjIwZksraXRKYnVUaHlw''@;'; put 'put ''R1orMjhiR2VpSFVrMzZCcUNua2d1T1A1ZTRDNlBGZWtVN3ZQekI4eGZ3WGJtK0JpZEJyNnE2QXpFRXVldGdnU0xLdDdTVHFaZVVIeUVhUW53UmRWQ3N3SjRDY0JrOExKcW1YcW1EcUJubHBsVEFWaGhEb05WNWpCWVl3NkRkYldEcm5jWjZCVWdVNk5YMVk2WnpQbEF5VnpBUEpQUk5lWnBkSjE1''@;'; put 'put ''R3IzR1BJMXVzRTBQNEhXMnllQU50c2tnWkpzTUl1WlVBVGFZdzZEQkhBYWJ6R0d3cGYxeWdiYTFYNHplMUg0eGVrdjd4ZWh0N1JlamQ3UmZqTjdWZmpGNlQvdkY2SDNrK0Z5M2dCL29FVjBFL0RDQmx3QS80cVRyMFFKR04vR010am0zRXNpY2p6WEhiSE0rd2VMejNWMC8xU085NHJNRThvclBF''@;'; put 'put ''OGowMjlpblRmZ2lnVXo0TW9GTStBcmNjbmUvci9WSTA3OUpJTk8vVFNEVHY4UEtOdUg3QkRMaGh3UXk0VWR3TDNUMyswbVBOUDNuQkRMOWx3UXkvVmVzYkJOK1N5QVRmazhnRSs2b25iNU1xdk5uMWJXcGQ0dlNVL1hiblhmWStSdGxNN29zQUFBQUFRQUIvLzhBRDNqYXRYMEplR1BWZWVnNTUw''@;'; put 'put ''cTZramZ0a21WNTBTN2JzaVRiMnJ4YnRyeEt0dXl4eCtQWlBKNWh4dU1aR0FpVEdRakxERXNJSlNTa1NVTkMyZ1JDQ0R4YWFGa213TEJNRmdoZlNpWUxKQzl0bXJSWjJyUXA5QVhTdEVsTCtzRHkrODg1OTBxeUpjOE0rYjRIWThtK091dC8vbjA1UWhWb2FUMkNQeXZZa1lDMHlJeHN5STFhVUF4''@;'; put 'put ''MW8zNDBnV3hKeS9CQVgwOGlIbW4xZTVycWFpMTZuVVpCVUVWN1FPblVPMFZ6eE93MlIyTHVXQ1Ftc25jUmZwV2YwbWYwblg0Q1QyTHk3MUliMWlFUmllSFA1bDdHL2Y4NU5Qenc4UERERHcrN25NN2g0ZUZEdzg3Ykh6N2tjaDV5UHZ6d3c4NURoMjRmRzN2NDhKamp1OEliS2FmWENmOXVQZUlh''@;'; put 'put ''Ry9NY2dOL0duSDNEcmtNM2RGbkRzOGVQUDNiOCtHeDQxUmwyd2orRUNKcGYveDM2R25tQzdjMmJkQ0dNMFJKQ3FDYURDQkdXRlZnUXJNS1VRcUhRS21xOGVwMVN0QWFNRWNGdDhjV2k4VWlueFd4U3VaZjJtbUtDdzJHMU5EVlp5Qk01dzNjZFZyUERZYlk2RUZwZlIrUDRNYnhJSHRTNVVBVkNP''@;'; put 'put ''Z0ZlbjBaMFhqKzgzQUR6MmxFVHVpSHpaT2Zzem1TelZrV1FVaUNZSUx4U2lUV2Fta3lOcmxvUVJmVlNWUVZScS9VWkJTWkVTNmJzU1I5OXdENUVhdkZ3YVQrcDRhNWtJMEpOalEzMU1JMjl6bFpyaFFVYjlmbi94SVlBRmlPaVczUW4yRThpd240aUl2c1I2WWY0djZMWGFxOE5EZ2Z2Z1ovajJ1''@;'; put 'put ''UFI5MnRQU0g5ZG8zM3VudWc5K0t1djlqOEYvL1cvMnY4MC9OZi9La0F5dEg2V2hNbmJxQkY1VVJ0cVR3YmJBaTZudmE3V2FqWlVWcWpGR2tTVUFHYVNCakNRMnhCRytFTUFFaXVhYXRMckJRQ3dSd1ZvRWZQNUV4WnJMSVJqMFFHY0FQU3dXRVdmMzl5SXpRZ2UxOEJiUEJhRkJ5UjgvRWoycHIw''@;'; put 'put ''ZDAzc3YyOSs1c3l0NzFhNzJpWm5MMzVjNzNOVWJTV0l5bVJxLy9Fb3hPYXpiM1QrdFg3UE5aenUyeDhYKy9wcTUvdEdhMzlUdG5NZjJkdjFQTlVPdHVaR1JVREJtZWdzV29rVGg5ZjhtYjVKbkFDT01jRHBoMUl1K2xYbXlGazRvVUltVkZSaXJsSGdWcVpCYW8xSWZRUW9GV2lhWVlrdzFnRjVZ''@;'; put 'put ''cmhLSklHaUZLWHZtU1Q5MENWK3dDNEttckorNFhJVkYwU3JDMlViSzlDQUUydEp1cUh5dlhidVN2dloyaDhOa1FxaTl0NzBuSG5XRUhhRm1uNm5KMUZoWGF6VG9kYkNaR2wrTmFBNFlPRWdqblFCS1V3MTI0d2gyR3lnczNTNlYyV1NKb0UyZkQrRENaMStZYkc2WkRJWFlLLzdvY0s1MStOcDRv''@;'; put 'put ''clUxM3RXQ1p5ZGI4aDhGMk1ORUsxNEtaVU1kTTZIUVRMaDlKb2puMXJiaHUxT2RrWkZVdERPVk94aWNhUS9UejZCRk1KNktkSTdRajJCL0FtcFoveDA1U1o1RkRoUUFQak9RN0EwSHZVME45WFcxRmJoQ0lBNk1CSkttR0k2WGdWd3RHU1VRS1lNTW9GQmJtOVBaRm11TE9nUE8xamFYU3JRRWxI''@;'; put 'put ''NlYyMFgzRkU4VTd3dytzc1lUVnBWb1JiQTFLOStsSWVIekEyckJUa2x3OTlJMS9RZTdwbWNiNjRPem5jRjBZUHYyL3YzdGpVTWRvZmZuUHRjVm4ranY4RFZObmh6dUdaenZGL2ZzRCsvc1RSMTB0MHo0Z3BPQndHUmdjTm81dmpJKzMzRGwwRW15T3hLSWo5YkhXNXJqYXk5bnI1dTFaOEs5WTRE''@;'; put 'put ''endCZlFnK1JCVklPQ21TZGJBRkVxS2V0aDU0c0JDWFNJL3JrSWYrSWxTaUhUdTU2MmVBbHN4eERMc3g3UkpMcDM2dTFHbzEwdnR1RWZrZU90UnJ2ZDJIcWNCS0RId1BvT25DQmZSdFZJOVZTMUVyY0hHTXRLV05uMnJPS2p4NDZ0TkM5czM3N1F2UEN6VzI3OTZVTHJ6aGMrY08yNXhRQ2RFT2gz''@;'; put 'put ''Qi9iTGZVWG95OEhqVDNEQWhWaS9GUmpoNXNWejEzN2doWjJ0Q3orOTlaYWZMYkMrdmZnNnZFUytDanNaVGc0dVRvMG4vUFZXVVEyY0tkMlBVVFVjMmlTMEF1UW5OeUVpWUNLY29peVdINlF3QlNNc28zMXpzKzBobDBNcG1nSUd0dVo0UWlYQy8yNlh6dzkvSitLRDJNOS9vMmRwdGNEL1BqODdZ''@;'; put 'put ''TTZRb1MzdFEvK2kvRTVVYWJHVi93Ylk3S0pkL1JZcjI0bjc2MW8xRmhUVnRjMVdwVkpWcFZCVTFnY0RnV0I5cFVKUnBWSXByTTIxMVFvQnE3VVZGZmwyQ3RXRjJ1SHJxalhXaUVyYnFERzVHT05XVnF0ME9yMWVwMU5WSzlXaUtGUzdUSnBHclNwaTFWUmZla3NHMXhRNlNtcElGRlVpWDlLTllE''@;'; put 'put ''ckZBdUE5QUJJTGFBVllBMFVUQlo1bWZGMm5FdXNDMkUwbGFveEsxZ2lwZVRIekl2ekRMUysrbUg3cEpUcmU5UHFONkNXMEgvRFBtZ1F5UitNeStnRVJlUXdVMDRBOFhBVXhKODQwVjFsQXl0VTdIY0dqb1RBVmQwRjM0MkFYSGFzTC9RcjM0aWhRYm0zU3pCQjNvWUM0ZWgwZHpPZzBPN3V3a0Z2''@;'; put 'put ''RDBVbTJuMG1RdTgvQS9KVlVnNkJQZ0NOaWJNVVVCeXBSaFVjQVZsVXNaWTlLRXJZcUwxM3grbS9XeitLSHlPc3dyejVaUXdjRllZSlA4Z2twVzhNekM3a0hGc2pyNzc2R21NenRCYjV5TFRrSHJMQUp0U1ZiZ0t1eUhYTU9na0hZc3dYb2dQWjBUYnJHV2d2am1TQ01Bb3JOUEpIRW9pRkFKa3BN''@;'; put 'put ''alRDVDZvT1RreCtjbjRQWFcrZjc5a1dqKy9yNjlzVmkrL3FxOW54eGRmV0JQWHNlV0YzOTRwNkp5VnZuNW02ZG1LQ3ZIQVoxbEJSQUIxQWhlN0lXamxJQWVLVTVoOGRZaTZmMFJnWTYwWitJNk4xUFgrZDZaREJMWnJNOUo5YTJJZGEvQXpaVkNmdXhvZGFrdjZvU3RnUFlRRWlhZ1pPeFJxckVM''@;'; put 'put ''Q0Vtai9SV2oxOGgxZ1lHTVNWbXVucVY2STlMekZDTDRYdzYzcGtZYWg3MmR1L3lKWlkrM1hlb043UDRORjdLK1laK09MQWFiZTUzZEVXQ0grcmMyemQ2WStiZU5KKy9HZUNwaC9sYjBHQ3l6MVlMYzdrd2tEU3NBd3RVdUFPVjR4V1lYYkVNQ0FxTEFkbTZyTUpLcFZWSlQ3a0ZOWHM4VG85WEZH''@;'; put 'put ''MXcwcFM1UkRxcEhBcmdtTlVpQ2FUQ0NrVUo5TisvdFRudVB0US9zWFBmL0dSNmZQZmlVSHlIUDdybkUwT3J2Wm1lL3NXK0s4ZXFobUtSVUhTaXQyOWdBdU9oN3ZoWVp6aDhmWGdoUGpDbnI5ayswcjA3d25HaEdWNEdBUFlWd09XQ3lkWXE0RWs0clZMQ0hqQUMvZlV3Z0krSlhLMWlxckt5c3Jx''@;'; put 'put ''eUd1aktvS05yOVRyOU9LS25HcXc3cHNmNHp0d2pGWGhoOStwcU52ZjdQeC9DcitRR3gvLzgxL2hnN2o0T295NkFVU1BNMDRqNmt0MG1qQlhhR29FbzROelRDRjZSQW9TOElKQWxMdUUzQXFnUk5iajBScTlIQnBBbDBpa0pZOUZQNlVtTTV4SHlaOWNISXpzdkQ2ZGI5azdNalhkWDRIdHlaOFdS''@;'; put 'put ''bWNIVi9zSDNqVlgxUkxyM040OEZodWRpOWZoQSt2VlE1TUJ3YXJVTFlOQUhhNHZBK1RXZ1ZzcXREWG80TzM4ZFVTcElXZ1ZzUmFFVUZLc29MMlpGV0pqTUlScEJyMnhzYld6eHVxRnp2ZGZyVTRQZWhxVEZVSzVCaVFYRURDZVNCa0M1aUVGV0pFUktNWGNkSFJpNGF1ejJXOUkzVC9mdGF3bDRK''@;'; put 'put ''a0x4M1RISFNyOG4wN3h2ZkdpcFdyYzRpaCtEaFE0ZTZmdkt2U3QvY2FDMXVkL3RuYmxqbTZZemtmdEljTUkvQ3R1Y08wRGxEWnhqRmFPaHBtUzlBZ2lJVVJEbFBaanA4S0FGZy9aRDFVcnNqRG5Od0JTZXlOMkZ2NS83MFc2eWt1NWR1NHZxRzFHQVF5dkF3UTV3NkVFanlTR1RpZ0NIVFl0RlFK''@;'; put 'put ''QTRoUnFBZ09HTUdLY0lCT3JyRVFyMEJMb2pIZld0OVMwZUZ3eFIxNmFockt1Y3hpSEJ4NUFuUU1vOXJOS2YvaHJDbU1rYjd4OWVTQTFNREYzUlAzREZVS1ozZUdINHhKaG5JdHd5SGhqYTFUN3VCcFVwUHV2enpjWkJxYXBxWCt3ZTJHdXUzZGFkbUc4THppZDZaeTJXdmYzZGkrMzRFNDF4cnl2''@;'; put 'put ''ZU5CTHh4UnRJN25sSHQ5ZmY1OFRZMmVmM2Rqc1kvbTg2ZTRjQmpyMUNBellFZ1cwcmdYQ1ZaQlhRWDRDOUNvSWxVeVFkNUxPSDNjTForN3hlZHZZVzZlZzVIUS9nZmt6L2xQWnZvSkRnN05JU3dVK1ZuUG9ndzRZVU8vWU9pZ0hrM09aVDU3aVErd2c5ZG5iK3NBY21RL0E2eUFzcjVlZVVmN05G''@;'; put 'put ''NnJueHB1VEdXMVVWUWxYV0tvdEJ4d1FMNWVlR0lzRkN5Z2dacS9TTzc1YWxUZTZBL0J2WWRFeDI0bld3NmJRd21ZajBRTWIzSTgwWmpKL0Q5ejhaQ1ZDNlQ2Q2RPRWNXQVM5VlQ2a0k2RkRHbU5kY2pjMEo0QkMzNGRPNHAvY1hZODgvUDg3T0lvWE9rUnI4VDRDSkluSWxteWorVWxNT0ZDU0JM''@;'; put 'put ''RWdzbkFoVXR1c29CNmUwVC85UDRXL25ZdXpubjlLZlRNT2NVMmduTWNwekNqQm5Jb2hqU3JOeUNwK0dPVi9KZGQvLy9QTmp2K2o5QlozVHZ2NDcvQnFjZnkzeW9FUXlhcW1xcEd3UFU3WXR3TVEzRmNrUXlzQ1ZXS0d3S3Fac05wdkg1dmJXZXZ3cXVoQlpEaGI0ZEEwRzI2MVliai9Yc3lmaUhH''@;'; put 'put ''aU96bmtqZS85b1lIODBzcWRuUmkrRDk1VFMwK1ZvU2pnN2c1RVQ3ZHNqYmJPOVZiY1VtYzkwblczcmR3bWpvQ2NQb2l4K0p2TmtCV2pLQnFlRHFJWGhKb09nVVBmMUVrRFFOQmhiVlJzKzBSUjlZdHFpVDdubXUzYnQ0cE0wVjJxSUFtU0NpbkpvVlFVR3JmSWdraGdnTUJhMVdsZ0d3T2pWVTlM''@;'; put 'put ''VVFUQzhGVml6aUM2MWsrazlUdEwwaDB4Q0RZc0FIS2hhSTZoWEw5cFpDWVpIQnhWQ0FsS3VidDFMRkZXQVl5cHhtWFdmMlVYL1M5WW1rd2dsczhucGlURTRxd0dmcjlYcjhmbXFSSHVKOHVTaU5sYVJrQUFqcklOWmw1MHlYNVRVcWs1bXJvQUJtdURhZ01RK1JwNDg4djRYcno3MDJPSG9YQ2pV''@;'; put 'put ''cjI2Yzc1aGNTaDNyNlJ3MVZLZjBIazlqWTdkMzZiNDlLNCt2N3Z2QzNvR0RDVVBQVlNQTk85VTRIZ3Rtdy8yUms0Y2ZPL1MrRjQ4ZmVHZzVlMlU4MU93UDc1OGVPWkVLZW9hVkMyZXRUZTZXeGVHRlR5MnVQckd5NTc2bGVxZmQ2MWk3YkVyVVJucWlPenBpUXhRZkFTM0pEMERlaUtBNUJKTE5H''@;'; put 'put ''Z3h3U1FOMUFMa29RR3VnWWx6QVRIdFRxOVVWNmdxdWp0ZUMxaUF5VTl0ZmlVbDM3dGJSQlJ5bS8xYnUvOEs5OTVJbjFyYjlLejZhK3d6QWZCK01meHpHMTRGVzUwTDl5UjZRT0RDRENqZ0N5R1VsVmFja0I1V0l1ZFpQNTdMWEdmVE9wanFYM1ZWcjBkc010amFIbWluZEd3V1BFMHNLbHRrby83''@;'; put 'put ''SVA5eVoydEhkMDlBMUZsM3B6ejJOLzkrUms5NDkvbWR5MkxmbEw4a1JidGlNNjF0QzRweXUrb3gzZk5kRGVQdkNUM0xueHJxN3hITk50cU56OEtKTWhvV1NnemxaWlFYRWtMWXNLeXdZWEdqeGcwc0pIWFdoNWxNaXJDTVVIamhNUDd0Ly80TkxZTFIweDMwcGk4blFtYzNveXNlS0xkZHd5VmdY''@;'; put 'put ''bnR2emdnVVJudkNVMGZWdG02b1BaVUV1OGcrb3lGRzR2TUgzT3pDeWtQSmlZbzBBQ1UxV2x5VkJwcmpMN3dMb0U4TWdvR2NBSkNmY0NXTC92aldPUExDOC9jdXlOTnhadXoyUnVYL2dzZVdMbnZRY1AzcmR6Zk96VXpNeU5ZMnMvWjN1ZmdmbjZZTDVLRkU2MnlSeWI2bTZLSlJDYk5jV2FON05v''@;'; put 'put ''S3JuSERWUTVvMW5pMzNxbitmUDRtdHhIOGVkelJ2d1dXZmxGK3QvVDVBbEp0NWJIMTZDV3BFOGVuM0poTnFxczJzQUhHcVNoSXpOK3pFWjF5K1BPOEVGenIvQkIrWG5kRCtmbFJMRmtKNWhKU0dnaVJLRmtCb05TZ1JoeWtXVVkyVUkxWDhiK1Fjc3h3cUc1dVVucDFCY0o5ZExEaTdueFhkallm''@;'; put 'put ''dmZFRWp2QWlVK0ZZOTdydXZrQnRxLzZ2b0V2ei8yMnZac2ZZWGQ3M04vT2o5RGQ4RkJoejdjd21QcVRIa2s5WGdHZG5PNlgrc3UwYURNc01kMHQvRVRnbGR5U3pWMlJ6ZUpQVTNMQzNYVGJ1Yi9CYlh4Y2RCL3o4UnFwWTZWZ1gzSFRGSXlybVd5VzlxSTJHY2pGdjJiMEIxakVUQm1HMFV3NUo4''@;'; put 'put ''c0NJSk9WZ1YySHRFYXZBcm9YVEJkWUJhV3lKei9RMUcxYURQZG5zNG1EZzFYSnpxNUExOTVKL0ZxdVkrUllIOS9uM3Z3K0hja0dqVnBKbU9URnpDTW9jTSt0MFdEZ3NqNml4eEVOMEFTSTFiMVp2SGMxOTNNY1hjbTljd3pXbS9zUVBwWDdhOENmNVB0ZlplT093TGdhR0ZkSmRXRzJhRG9hSlEw''@;'; put 'put ''SmRFcWsxT3Zwb3IyQUp4RTkwZVI2czJuQXViWFBzZjZVaG41ZldKZFlabDBtdmJ3dURSaEJibjBsbk1DK0xGcEg2OW5zK2pwZGxCUC9mRzBiRWRuNy82RDh1QTh4WEc1TTJrVkNTa1kxNUVmRnNDdzNHeE0vbXMzbWR0QmorVDRKdzRqaHRlOVQva3R4K0xmL1AyeDR6blQyUGJCLy93UDdKaytu''@;'; put 'put ''MDZjbk9lSktMT2ZBZzh2TER4Mll5SDV3S25QYk5NZGJwcDlRbkQwSWU2c0N2Z05XT0t3Q1NGWEExQ1ZUQ0NUQUZtdXFUWVpxYzQxWjczT29hQkRCbWVjOVpyZk1sdlV6MkRwMk1wVTZPWFkraXpVTHE2c0w1OGdUWFN1RGd5dGRiK09oN01oSU52ZVRZaGlZYUJ3bTJVa2QrMHFpQXJOU0lOUTFX''@;'; put 'put ''akRaRkVXZVViUFozR0p1RHZ2OGxBR0RFTGVLL21KaXBvNzFlTUtmc0c0U3d1UzN6ZDdwenRudzhmNGxHVUM1VjdlN3IraThxcTRoRHlOY2YzVTQxVFBtRCtSaGxmdVhwdnFsbm1YUFlxZ1lYRVh3cW9FMWdmd0VnYUhBc2ltOEFwcUl4TjRrY3ZkNG5IcTlrZklldW1LM0gyeHVQWU9jVXZZVmtJ''@;'; put 'put ''Tkg1ciswNi9HeldRYTZYTTg1QmpaODJ3bEQ3dTIzR2ZRK1NRRW4rVFgvaTRUSmx3RnFJSzlxclFRa05zRkY0S0xPNXlKNTFZS2F2VUVQQlpkRnRtcW9GelJFU3RnZjl5Y0NPTzk3WDBmNHFwSEloSGZ4c3N5QldOL1JvY2xySXUxdGgySXRJNzRkQjY4NmtiaHF1dkxLL25EVW1YQkVFMVpEVzZZ''@;'; put 'put ''N3Zqc2FDZmUzaHB5SnBvNUliZDJ1N1YyN28yeXRRWURUSk5NenVHOG9iOUp5WjQ1a0NtQTMyTFJ1b0JqVDY2VCs5U3lZdEdtSmxuY0FqbndLK3B1Uk05a29CUnN3THQ2ZUdabE1IcE1zamluemt2WW84VEhzdW0weUcxL3U2MXVPWnlkdm02K2F1bU1IL21UdXFxSFZucDdWSWZyYmpqdW1PSDNM''@;'; put 'put ''T3BHS3pxVmtOamh3VG9scGNzNERKZ25uUEpTWEFlOGdQOGg5ZndIK1lSQnBsUFBDenhreUEyTjVFVktZR0QzQldCV1U5d096b0tFdEpzclo1b0ZiR0hSS0tra2pka3ovQ2U1SzdQYnUvT3JaeGJOZjNmbXI2YSs5T0EzRC9RMXBZei9ieU9UYXMzeWRJRWZKM1l5L0FYL1VxR0JvT0g3S2dtb3lt''@;'; put 'put ''T09id1dEUVU3akNLbUZJRFJzZFpKcTQvKy8rYmhtTHVmOWg3enR6ZjRGdHVkZnhJdnoyT3JieHNRMHc5c2RnYkRWcVNOYXBCS0REUEpPVHZCQUdGdHlTeG9RajgrZCtkZUNuUDkrWGUzTU8xK0xQNUo3QzA3bWp1VGZvV0QwdzFyZ3MreWs4QzI2OXZGOGo3OVl6Nk5tS0U5eTlBUXBBRCtnVFJ3''@;'; put 'put ''bkpIY0FQcnYxMmdQalRBMnMvNXZKLzIvckhjRC81MlNWYW1SRkFMUGpaOXVhamo3NUpmdGE5NXV5R0h1dnZySi9GVDJ6aGN4VkF2MVV1NEdYdWNzV29BK1pyeU04bit3T3Bha2I5dzNRK1ZKalBDb3cvQmo4ZE1OMmJQZVRuM2U4K1FZZVA0L3Z3MHh5M3pxZ09qU1F0d09HWmx4Um1waDdqazVK''@;'; put 'put ''MzU0d0tqUmdqUnJkZmRQK285NEdobTI1T2dpejY5VC84QTExemJ2MzlaRzc5R1pqT3djYll3a2ROaHhBQmdJUnNYL3VyVElxZjZ5QkpZcEY4RC9wYVdkOHE2RGtCbjV3MGdFam1zeWFzN3NHWjYzdklWdzJmNER5dUUzU0kzeEE5c2lNLytrSFNaTU9Db2hhRWdoNDArYVpHcGFCU0t0TGN5SFJB''@;'; put 'put ''WTZXS1VHTUxiR3lxME5zeWFxeFNvV1VKSHlYajBsT21IU1V0MWxqVzB5U2I4dUpqWHRwdzFLZ3pVLzlXdmIvZTUzSlF6NWJINnpacTRLaVF4UXhuVldURVdRdmVXZ09vZ1hLNEVOOStSY2ErRXArL1BMR1V5TzVPVHJrbkE0MkhkbGdPMWt6TjlzNVBkaEg5TlFkeTM5alcxckU3MHprVGFEQU9M''@;'; put 'put ''dG9zL1owNWIzZGt4dHdYQ2llUUZKOG5FeURyREdBTlBYZFdXMEdVSUM4NDlCb0FhWFdadkpQS0pua282VGF0ZWRBNU56ZWlxdDhHWDZZRXQ0dU1kZ2tEVVlpWmpFYUVqQzZqMDI2REpZUHMydVFaOVZPaTBzdnUwR0w5NDc0ckJ3YXVUUFVmYU14a0dnLzBlMmJhMm1ZNk8yZmIybVk3aVg3MHht''@;'; put 'put ''ejIxR2gzOUFBNWwvdTNhSGZPQjhaYTc5NW9kRzl2NzFLVTQyazc0TnpiZ0hQbGJUSGIxcmFZNVlLMjJIK2RtcHc4TlI1ZDlrYnJSbnlSeFFqODg0M1pvOTREc2FyMDZZbUpVK2xtVDZUZWtkZ1hUeXgxT1JzajNsWjZabkU0czBEK3pQUkM4WmxSMkRFd01rT2pHTW9GZEhkdWJzU1FVMlN1MXcy''@;'; put 'put ''NGZwSFJMbUdnMGpNeitOeDZlbVpZUXZFQ2VQUmtzMjRVb0VlVmtnL3VGRHV0VG5aeTVOemE2SUZvOStpcGJQWkdPRGhzWFR1MStjd0lQVFBpZ1RNem8zcHE2UU9QRndoVGhvaWdJQ3Y1WmRveXFpSTl6bUlCYmJmZVlyZlZVZ2x1OERIM3E0ZWZWbUd4WmlkZG4wcDB3bkx4d2FYYWtQTURYYVBY''@;'; put 'put ''VFk1ZU0zcnkxdHd1OVVwbThsQUYzcXZla1U1NDZqbzhiV09ucHpPbnhyNTQ1L1JsK0RONzB1azlIS2RBRnVQdHdQc3NhSGV5UW90VlNoMUdLcExtMlNyMVNLVlNMb1BHVnNzY0htaEpnU1hQSzh0UXFRTmpRd1ZjWnJYMHcxM0pDbytieFNsRjBjN2xqSnZ5ZnVZMDVFaW9NcjkwODgyWmJkdkdF''@;'; put 'put ''L0ZXcjZaZWIzVVNaU28zZ0wrZUd1OUpPeE9hS204OTA0TzNreGFBSDgzUitIYXlxbEZIVkVxTm12bXdKZjRLREExa2pvcXNVczF5V1ZRUWlYQVpNSTBGL3BwdlI1a2hySk8yUnFWdFRaYzA1cVVOeC9pckExUW5ucWtCbTJqeWViMGV5bCt4dnRpWEh0L2dTZ2M4akpYZ1ljdlFpWFQvMVI1bjQ4''@;'; put 'put ''NzJYWWNBSlVlUDlmY2ZHOTJNa3NwYzUvQnFqNitwdDhHeGZXcDdlMnp3NnZIeHF3ZGk3YnR5aDBMYm9wRnRvZEMyU0hSYmlKLzlOQ0NvQW1qWVRLTmpCaDVYWWJRRUNqdnpCdHVLVEhKQVJMM0piYUkrQ01ycTREZ2xmNTFlNG5iNGhsMGRtWW51d0dSYkptTmRpaE45WkU5UDdsazhPRGpyR1hE''@;'; put 'put ''bm5nVzI5blpyak5IRUlMeCtrZncxNkdoYTZnWEkrL1JyS2ZMb003SkhSVnRUWGNYYytjcE43bndSVklpOURRMW1VME9EeVpmSmtJT05KdnFycVhIZjJqc3cvdm9yNjFscGZEdWxPUzNJNVJwUVFVbGFXVFNUSURCY1ZleFh3VWJ0Q2g1Q3NGZlZXUzFHUFp0VkxBa2lGRHNCVlBrVlhCWFVWbFY1''@;'; put 'put ''dGJhbXpIaWlzSlIzZjZVUkI1UXFUd09KckgyM2grdG13SnBZTExVU3VaTU9qUUxvWFdDbWlZNnZSdFpQOVVhbTdXR3E2REJSQXJCdC9zbStwNVl5R1d6ZmoydHpiL3h5NzUwQXpqYmN5TStSSHM5bllGelo5NkVyOFgxTUFaU0FXL0cyUWdUb3lZMys5S3lqanJrK09CMVpLQkVybDlXaVNsQXE5''@;'; put 'put ''UmtGalRRWDJEV1FPanlrVFZUUWhLaFV0dUlXcGd2MHYxQlhTaDkwd1c3a2N1dU5icVBicEFGdVVZUmVxZzIvUk15Y09PQ1ZQTGs5bkVsRkI3TDhKV09haWZUc05PdjI5aGFoWGFib25TaW5Xc0s5a2M2K0F0NVRudnpoWnpqYWN4QVltZldrcE5TdWx6RmYycitWNDBzSllVaWJMOXR6eTA1MDI5''@;'; put 'put ''VVhJeW56SlpDVWNoNG9pc3VZY2RqUEpuK0o3YUwrRXN1Ri9TVmNNUmkvY1hMeXh2Rk9xaGQwY3UxQVVndlNweVltVHFkVFhVdUorTDRFVncrUXBNOXRCMzFPWDE2Zm8zSmFCV0lRQ0wyZ1dGRWdHWEd4UHFjdlZkTTJOalJkZkxSTEdPaVM5RG41T1A0Z2ZTNzNXM0xtUURsOWp1cFEyMEdIMHBm''@;'; put 'put ''Vm9RbzdzeFVwTTVrTklvMnBQdnBOcXRIbWhxYUxqM1lKQTExUWg5SmZUSFpkUUlkU3JzM2c2b0lTZFNEWFdhcjN6c1BMWVlCVEZicitHWjdFd1lHa1o2Sld3Skx1UzNVU0RoaXpUSGdGeFpoL2FDcmZhNHNPc09temVoTzN2UTN4aURsUG1zOWNQdDZ6SndMcytHLzZVN0NKM005cDBBYWpJT2pu''@;'; put 'put ''TDhJNmZhZ2pHVExEUWkxZ2JDTlM4TmJaTnJ1ZmZNanJDWEQzRTAvK2lMTTBBVG5UelNyNjVBeUNSa0psMEhlT2gveTdka1FHWFpIZ2N2YndUSGgvcTJkNkl0UlhGKzFLaklTdW1LdHE5aWFHMnJ4MWJsTzFmU2d4T3Q5azcrbG85b0FtYWRBN3VrTmpPNmkrQjJ2Y1R1NEdmUytjYkxOZ0ZaUDVS''@;'; put 'put ''TGlOaWtheVJBTXBBQWV3SlBkelRaVHBjRVluVmVLOE5Ec3ZwcGZTelVBdzBYQmVQSUczdDhZVDQ5dTJaVzYrMlduVjEydk16blFQVHFmKytJOVR1YlAxM2lvTmxUbkFud0M1R2I4VmFFS2J6RytCWVVvQ2Y3TjVZSlUvb3NvOGtySUhDMFpCMlo1YmRpcndXN1BiNUdaaGxDTE5uMHB6SHBqVUU0''@;'; put 'put ''R3kyUzZaNlFKeXZnTWNGcGd1bnN5OXhKZ3Vub1Q5MklGNGE0bFN6dW1TdlVDeTdxczNNRytGa2J1dDdOdi82cEh0UDU0QXpXd2VQMGIxRXd6aURna082Ri9xLzlKZjJQL2xucjMxWTBNZnUzWDI4ZkU3UHpvT0l5N2pCK2pQMmp2NHZ0ekJncDlPaExGWkRtR0ZxTUFLS3Qrb0Z3WEdGa2hSZ01W''@;'; put 'put ''Z01GREVjL3BGdDlFZnNTWWlvaEUvOGJsN2QzN3p4WjJmdW52bjExNTU5VldzWG52NTViWGM3K200amV0VHhBWGo2cW11V0trR3ZJWWhBYm1sb1NsZTc2ZHJ0ek84MWlPZHdlU1czS29VVFFheHdIWlJnOFZqWGtPZHU4NmxiZnluK1dmK2N0dWJkVk9KcC9YSmFsTmRrb2k1T2Z6NDJrdkpic3oz''@;'; put 'put ''RW9lWFYySE9MWHhrK2d2N3lPSzRJL2UzK0JPNVYzRTBkNlFYM3piZW16czl6c1lOck8vR2U4bnp3SFVCUmphbUFPZ3dubkN4REVsb3NDZ3hBb3htOUJhcVFpbEN1QitEYkk1UlJaM21xbHRyaU5uS2c2NGlwVTRSYXhhOXdWZ3M2RjJjVnZYM1dyRFg1L05pYTIrZjZ2UE5JN0dQZGJZbGdwMTN4''@;'; put 'put ''VlBONnBpbXJxM2xFNkZFZFUwaTlQSFdvRTBUZzFtdVhEK0xIdG5DMzBhMXR5djcrcVFFUityZjNvMlgyZHFiazE0MTg1UHBNWUsxNC9GQ092RXlCZFVNclFZZ29pbGdCYkh1NTRsS0NjcGRFbzJrQVFQS20xMHFlSWNUQ2ZYMVd2bUtMYjM5cXVuOFRvNXJiTUhXajRjU05kV0owQ2RhMnVvME1Y''@;'; put 'put ''VnpLbjVYWnpEUjF2bXgyRWl6ZW4wZERlQldmRE4rVkMvaTZ2VzEzRnRJY3diaDUzSnZzUXdaS3VQbTFuZWdyeEs5ck91ejFWR0Z4SmFSYytLTXBFVFhaL28yVDB3RnJURHllU21YSkxqWEZDTjZPWGRrYlJUL1dyYXh6K0szeVRTcVEwNktLWTBOZFRhcnhXVFVWU3RKRlkvdHdhd0xVdGtIcUg5''@;'; put 'put ''MUxPZVNseUJ3VHo4dFBxREhDTEllckd5UHhRb2l6WXgvT0JmSzloM3M3ajdZbHczT09xTnRBNE9oYU83RDJkN2VyS3RaT1ppcW5qNCtPSGg4dW1xb1grbHZpblJvY2xkV2RrWk9YV25FZHhpdlRQSDhJRVQ2UVMrdlI2bGtFbzZUSnB3aGtlYTFpM2hTaVFrd1g1R3dNQkl6SFdubW1TaXlpQklu''@;'; put 'put ''MG5wVVQzTUR3UjZnYXJIWDdJd2xXTFp2c1NzSGpwQ21LWkwrdGY4N05EQ1FPRGc0ZW0xdGQvV09SSC8yVzk5S3AzMmVjNms3Um83MVNSSEtPMUxuaXYzWUZ0U2RqSnN3MHVDMEdoYUdLU2M3ck1JRTFFYlFaRmNxV0prSno0KzBtSTBHdWFSRVYwbUxTbGg1ajFsT1FJWWZSdUQ0czQrLzl0cHJj''@;'; put 'put ''L0R6K08rbzV4dFBwbVpUSjA3QUN6NU0zZC9jL2lNTGVBODV3M0s2T3BuSDFVK1RuQUY1V1JCa1dTbFFRT0daTWxsZDFCbGJiSlIxRnYyKzIwN3o1TzNHeDZSM3NtQTNHdXJyRGZSMy9nNzQyb2FpK0lmNFJaMExCMVJJSitBQStvN2tBNTdEMTVBN0w4Vi9USE96Qm5FODl5MXlaK0pTL2NkVzBm''@;'; put 'put ''M2N6Qi8za084WmJ1Szh6Yi8rS2w2SE05QlNXeEFocGlqY1JNWHZCNm5nWWlFQUZnTHlNU21BSmZXcWwycGJOQlpVTTNxa3ArdmdZRzdnbWdIYzByR3p1M3RYNTFvVCtmTzFYVHhHL0ZQMGwzZ0VnTmFZdEJkeEJVTFp4VXhSOG5XOENIcVhOVFphekkyTjVwODJXaXdORFJhTFpGc09yaWZSLzlB''@;'; put 'put ''TWJuUXQyNXZPYWdJOE50SXNRalhseDJrdXJ4MWc0SUJnVjF4Tk04dUFTNjhXR09sK09zd3NLSm1zQ1dEV1RWdTE0VkxhaG14R2o4ZERwVFFGSGMvaWQrWFZJNVlhQzhJcUh2bmYvcTVXVzFobmJBQU54MlEwMWVpYzBWcUZHUFEyZUlLNnFsYXJXYTgxVnVxelZKakF1VWZoM0gvR3pyMU5wT2Zl''@;'; put 'put ''aHI0cjVaNmw4VDh5L3VSQlBjbUVxOVphcFNBOFhFa1FYU3REU002d1FOcnNSNUtJODdqdE5yTXhqNWVvbUdWSldaN1V2YXFTRldQZ01MaFQ0bVBOWmZMbENud3RkMTJaakRtMkJ4YURFMjdRdVdDdE5DY3hoZjRFUFlyVVp3aCs4bEhHY011ME9ZcnJ0Mmh6UW02RFJmVFVGbTFXODIycTBXZTJh''@;'; put 'put ''TE1uUDlkaDlGZThEZG5jNWh2NWNTclJEemEyNGZsV3dubEdDd1kwbGt6cEtYdWtjRmNqREV4SURjZWdWcXhvZ0RlcWxrQTFsVUpqU3E0b01hdldvRE5BWjYzRW55cUJXV0k1QVNkR2M3SkFJUURyS2lBbjR1Uit2M3Mzdm9zMDVJdy81Ums1TkQwcm5ic1YzNXk3bGVmUUpGbk9VeHk5azZ5UHgv''@;'; put 'put ''dytoYWlxRXdBcmJGckEzeG9NTDJrN0lQOGt4MzJhZmdJTTYycDRRWXFyWkplcEpZT0FtVXUySm9pNi9iQnFlOTRJQ2RJK0NDdHV1dFJPYnVnVTJ0QkpPSFd4WHNuQTVnNDA3Wk1jS3RPUFczaVZQbThya0o0UkRMdDZrSTlhTERPSHplUlhKajR1SVR4WitzQlFqVUpzM0V5YnRUcyt1YU5jd2xj''@;'; put 'put ''NG9YRGhqU1RiclRsMDc2NlNERERBSlpZdnhYQzdXY0wvMnhrdTRTS2MzTnptS0hwMml6WW41RGFBLzdkczBXWlBmcHpENkhyZXBvRGI2MVJ5M01mbWF1UHJXZjlZdVhHd282ak5VZUJ2bTlxcy96dU1zODdXMDhiWHMvNWtTUnNhTkZhdzlmQnhEcTgvc25FOVFFYzBNUE50bG5mUlFDc1JObW9Z''@;'; put 'put ''UzJwTWt5NDBSU3FHVmd0dkRkcDZWalpxaG03VklHOHFDcjRQWmlWRjlMTGZBNGdxSW9MUXh5L3o1TG5SVVRsOTdsdjRmRDZGRG5lbmNkdmFuL0pFdWwrbS94Tmd3SEtER0MvcGtIakovU1Z3WXZrdURFNmQwdGsrVnNKdk5yYzVpaE5idERraHQ0R3pmWFdMTnF2NU50WG9TMXUwMlpPZjZ6QjZa''@;'; put 'put ''UlBmd21nT2ZSSi9tNEFwaFZSUHFXbitOMmlRZnFBT2Y4S2FzT0tSTzJKM2ZEajJZZm92aW1mWUcvc2podVI2aE4reXVoNDNDbUpSTW9ndFdFRUNyUTMxdGlxVlVxSEJTSmxQZTZZZkNVVWZZV1UrNzdsc3I3SWQ4cG5QdGN6VlE5TWlMQmxWbVlpcWcrY2ZTdjRnQzQrRHFrb0RxbHVQYy9FaEtN''@;'; put 'put ''T3BBVzRUOUxUNWpINGpxeEVxbEJpSTdrVEJvd1RpSGxtc21EdEhFVS9Sd1pZSWVUR3kvNEY5WFpjSEl3czdReEhnTHQyWHQ4R3ZhNy94T1BBVjQ0dkFaUER1MDJtUEkzZlArQ0t4blI1WmZ1aUF4OVd6MG5GNkZMZ0wvUzMzOS90OStQNDQ4SmpjdjJRL09CWFo3OHNkaUNOMi9peTNodUZhbDRT''@;'; put 'put ''UFQ1Zmc3T1kyUjlHL2J0SG1oTndHOFBHSkxkcnN5WTl6R1AzRlpsN0RkWFkyVjU4MDEwc2J4OW1VZHhWaXpGK3B3TW9WRlphaWpmbkNZaENiV290SmE5Vlo5VDZuVHVTWklKR2liRFZ2UGx0dDlwV1NiTFhyZWJyYVRkK1VzOVVvTFd5SHVYWGtaZFJDZlY4VllFQXdGWXJtcTYzS3VlY3N2SU9Y''@;'; put 'put ''VkR4MTJ1aDFlcHdCTndzUDVuM1FvcnlFV0w1T0xGOFFSVU1BMjFtdVV1d3lsc3E4bUtJcHpLbUV0OWMxMmQwOW1TVTEwZmxRYUQ1NnBKdG5NNC9UTE9aeFo4SVJTNDNHMTliNXVmSzhqZThCSEVkQWNTQW9kYWpjY3dIZ2UwL1I4L055ZXl3dUY3Zi9TdjU1ZGFyNCtabjgrSWQzRmowWDdQbjJs''@;'; put 'put ''VGNqeGdmZ3VmQm5vSCsyb1FoS29pUEpsUWFBbmFzZU5Cd3pybEIzWVZXRkJwUm1VYVdrVlJzVktsS3hpdFJJSmFwVks5VWFJbGR0MkRJMWxWVUNsZVVTK1VXandTQkMwV1Iwc0xjN0dBbDJ0b2RoZ29BQnFNM3I4V29CNUhJd2VVT2VmbEdLQjQreWJJd3hJMXJ4SStkOWtCL3hnUFBRU1kvejVN''@;'; put 'put ''aStveHZTUDBhWHJaN0wremRGb1hOM1RyYlJwSkQwRUk5SEQzYkZoeGF6UlZraGlZNk9SQ0U4blR2U010THNNL2VGMnVNODl5SEpjaC9pV0pHc2J3ODdIUXFsSWdxbWlKZzNSUlJwTTFiSk9sa1FUR2tWbk5iVkxFWjdsV3hpMjJpY1ZyVU1DaEFMQURBdnB6M1B6VUtzazBxa2RjdVgxb3RxWmVH''@;'; put 'put ''TnZmQ3BpM1ZMdHBYMG9JWVFPbFNtb3lvZkk0dWp1Sm1yWjlRWm9IaVBhbGtOcHNvY1BsS2lsaVdQRFpSTC9uQXR0bXRMYktsdXpmUTF3eVg1SUs0V3djMXRMSjdyUUdsb2d0UFdWYWpNYzBwYlh5aDZmbDV1ajhXanhlM1A1TWM1ZkJsN3Z2NEt2TjNEeG5tVmovOWgzajREMExNWFBUOXE0dTMv''@;'; put 'put ''RDd6OVh6YitxM3o4ditUUC81bStzZkY1KzhNUG9YeTlYSUo4QjdTbklOcWROT3FZcTdxaG50MXFZVElhS3ZCRTVzazZHdXFVL2ZuNkRkbTM5cVNKcHIrQk5Gd3RmZ3hXYldOalk3Q3h6ZWZ4ZVdsTmdpemtaUGxtOVZHbGdkMkZrYkNLbTRNbitCOFhreWNtMHllSCtpNVBIUnhwMlhlRGZVL2NQ''@;'; put 'put ''dFhpT0dnZnQ4MjBCV1pqbmJOdHdXMFJVdldGNWJtYkoxTFhaaWJlbjl3Mk94Y2ZhRzQyTkRYWjJ3WWNhejlxMzVHSUxuU0dGMktKeFE1YTI4YmluNVIzYmVPOGE3RUE5M0VHeHprTzN4dkxQYWZuOTFqUjgvTnlleXhlVzl6K0svbm4xYnVMbjUvSmozLzRmWndIcHRDMXBJYjRtSS9Ramk3ajkz''@;'; put 'put ''RFE1QS9taGtJS0VTc1Z5b01xT1hodm82RTlGMElxNXJCYUxiUlRLaFdMUUVQS1pkWmhabGZTd3F4RHU2NE9oSjNzWUZSVGE3MDRtUUNNeE9KaU5teVVyUFRYYWRuZDkrUXl0aGRrODN3OC9WU2hlazNJeDE2dFlNVzI1UFU0RTJoa2ZsK2R6Vm9KdXBkNmd4NEhId2xGSHhYcmNlVjZsZTFRUm8r''@;'; put 'put ''emJhbkhGY2YxTHE3SDJjcnBjUmNjZ3VseFRxZXp4ZG5zTmZnTkcvUzRZaldPYW5FS3E1RXJjUmFLNVg0QjVJakxPM25qK094SXc4S3d5d2VjYUdhc2NTR1Z1Nm5sblk0NHNLSi9YNHo0M3drbjhDZjNSaVpPcDBPdWFjOXlCQmhRMkoxOUo0NTlMdUJCMytsYVNneDM1LzdlQ2ZqRjQwd1VUM2R5''@;'; put 'put ''L0QzTThXN2pjNHEvZjFyMC9MemNIb3NIaXR1ZnlZOXpXTUpmSGdPaDQreVZ4dmxNVWJ5YjU4SU5KdnVrZ0hmNVhNT2kyUE9saEozMWYzallXVmd0bTBlWTM4Y1phUit3djEyb3lGY1R5ZnR6amtoMldyRmR4UFdiTy9QNnpaRk1jZC9MOG40ZWphVERsdlo5THE4RGFiWnp2dXRZbnhkY3pCOXRv''@;'; put 'put ''L0NyeFNwQnBORlRyQ1JDV3NRcVJBM1p3OHllWUpjZVpXU04wb2ltckZhcnpXcno2UFY2czFNdDFnV1UzQXVYOFBOYVBLNnNkQ1lxaWVCeWQzVDAxWS9rNi9Kc3ppWjdvLzdmN3YvQ0p4cTZPNXZyUDh0SzlCdzJlNk1SajdKQ1BTblBkNTRNQW4wSFVBSmZ6b211bnFwbzlaaHFhQ0lKaHpTQ1dn''@;'; put 'put ''U3lWQWRBKzFESlpGNjJqYkxReG5UUmNTNDhSSjREdE1BYVJUVVJWK1U3R0d4ZzRxdlYzR2RwWmFIY2pYbHd3ZElPQUU2dDFBdVZkaks5dDFuZTR3U1VlK2piMnRvU2JYR2Z4d2o2YWJPelFxeVhqekdlaUcybG41cjE4dG42aXRLUnlTQTlaWXUrTkNWNTlRcCs0TCtTVTVQcHNWdGJxOFkyNVNi''@;'; put 'put ''VGZHV0dCWjh1NUNoTC9vQ1BNdnZMSjlsZi8xRml4L0g4WE1vZnhpVCs4R2RGZlUvSWZiRWF2YkJGMy9OU1g0TFZYT2ZoTlkrc3IxL3FlMHNKWGRGYzNCK1JjOUJtbkxYUkNsNmhHbW1nelhOQ05XMEViU1RmRUZEc3pVak8zejBHUEtzT1B2bjdzd1lGMGFqbHNMeVBpaytNQkNWYWdZUFM1Y3VO''@;'; put 'put ''YlJrYUVlS1h1R2p6eVRxdFc3Wm1rb0oyWVpMRG12ZDlYdXI0NzJWb2lrWUd1OTNlYW0veDA0d0ZuMXNLVTdsTFVuemxDM1BRNWl5VlkwTWIwbFFlZlRRemxQdDljYTdLNU5xelJmbSsvNnN6bVZ6NzhnYnVtdmNiUnZKK3d5UG9XTG16QnYzMnpyeCtlMlFCbGZNNTRncjA0eTM2eXJxeEFHMit6''@;'; put 'put ''dXNxZ1UvUld0SjZOSjRjMFlIS29NZjBqZys1QW9RU243aUVSRkh5bmxPUnBNMHdaUW1JMDZpVXc0MG1ONjNHMGxNU2xHdFkzVEtkV1NYV1dsVFVPc05weWtHSnJpNzNnbHpoeXVpbkErakwyOERyVW1tTTlpRExnNmEzeGQyU05McGRJQ05yTUZHcVFHTVdRZG1nNVJKT1dpNlBWS0RJcVJRck5C''@;'; put 'put ''WmFzSWI0T1dma0d3dFlkcGRYYnNvQWdBK1c2MEV6a1hVK242L05GNmgxR1h4ZXQ1dFpUeHMzcE5xY1ZNMGlONktjV24wNnYwVzFXcnNod1RvRU5uQkw5a0hKd05YV1NiczJHWEVoMlJwczNUWXIvaTdMdUM3amUxYVg4VDF2dG92VWtsM0VhbnVaakcyVlpPekxaZnlvTkYrYXl0ZzBsN0VucGI2''@;'; put 'put ''NXQyaGRNTzhMZUtNbEJza1BDZTBGSzZwQklTQUlNYWtQTmhHMVdHdWxEaU42Vnc2YTRFd2hVRWtETVlKYXNhcVI5ZkFhR2o1UUxsZW9pRkxKdy9uTFBKd3ZjWVp3dVM0VldLWFM4NDZvdEp2cHZjNzBuaWVoak1JUkRsUFhkM2dnM0orSWFVUGFVS0RGN2F5dk14dXBDN3kyU2pZUUtBNXdtOEQ2''@;'; put 'put ''SHBPMXNhUGU3bk80TmNZNnUvRS9MaWx2ZTRldjBSWnR0emI3N1VhRGZkdWxKbkdETFV1TG4vU00zL0M0d0pIMWUwdGlCeitFTmxXTTMzQjc5OGhua0pRSE00L2VCSjVocEZrVGF0QzRqRHkvUnI1V2g2ZFhjVG50MFZ1Y3JJUkxGc3lnbThxTTRVMUtHeVpkbGpNREpsZWJxOGpEa2piRjlDaFl4''@;'; put 'put ''VHg2a2NYOG5TaVo3RGViaUVKd1luNE5VZUdVSlZORG15ZGdsaHppYUFRTDNLS3RMcHVXYlpRWFpLVmx4ZktTOWtrNUFETjBhVTBXYThiTEYxZklDVml6d3pycjJ6VWkvcCsxZDZTRkFwM1F1UDFEaFRnTDhGZk5KajhyeStORzl4QmxQdDlhWDVKdm5jbGthUElZakxjWDZPNFdrTHN1b0M5R2Qv''@;'; put 'put ''aUgzR2NCei9XTUhyUFM4MCt6NTZ5K20ra1pZVW5QMEpiUU9JQUVOd2gvQkcxbXBEWVdkSmEzT1N1MzRYWGk1K1J4WVB5N21FNkFpM1FDT3M0SWF6TWp0Zm1UalcxNGZRanBCeHlwcHBuRlZaVVZHakJDQlRXUksrWTNGWjlYbzJwenZ2aGNqRkVrU1poRk0rblA5YzdQWnoveWtYUWFtd09aQUo3''@;'; put 'put ''Si9YZzhNLzVicWY2a2h1WEVPNUlObFJXaWlrcDh0VlNScjVPS1M4M3Nzam9zZ2tVa0RZcHI1akpUVTVrNWZGbHI3cHRZNzgvNDhYTHVtNjBGbmVraEJzTU9DVDcvV1FKRDdnUDVudVFEb2JyYW83d3ZuTXREN0x3NkpENUplSHQ0cmlCNnVUM0E2b1dpdVU3a1kxdHFkRzZMdWM3bi9TM3FFNmdv''@;'; put 'put ''eGhUSng1aU9TSG9oMlNRTHhobnRjcC9Ka2N0UXVWZ1lya0huUzJMdm0vdzV1T1phYnRPQUdTaDhIODdVZ0Jwb3prUCtaZ3MxeVY5dG9hRWwvSEp1SFROVUc0ejFGaFBMKytVS2dxMFFZNWRaSVEyekY5U3BDRmNSMWw3ZTk4WDkrNys0RDNEQU9EdDVPcE0rbmVaS3d1S2Y3VnYrNHY3MDJqK1Rw''@;'; put 'put ''dWxiTTVuclVranlwd2hBR2NBbE9sQVgycGJNV3JGYVJWM2dUSnNCVnE5VUsxYXFORVNsa3YwVmxXS0ZVT1N4Nk94MHVSRHE3T3BNeEtLdURsZDdhek9NNVRCNGZCNXZOU3g2bytPN3dNTUx3dCt4aVpranJnWUliWEtGbGR0Ny9lZzRTNDBmdmM3ck9qa2lLUU81cTR0UzVQSDFHMnV2K25ySGVk''@;'; put 'put ''TDhXRS92S0ZVTGlyUG04L1ZZa241d2tKMXJUTUxkcjVYZ0JNK0hwdWU2d1AyZDgxSmZ3TkdEREhkakVvNit5TnZuM3FMNTAxSjcrcnlwYUs0VDhseUF1eDh1TzljVkRIY1hPTzdXODdsWW5UMWJaMXhhNTMwbGVNL3pvZWs2ZC9CMUhrTlNEbU9TMWVnUDAveUtXTFNwVWFFVTdUVHJwazRIYW9l''@;'; put 'put ''VzVWZlViNWxmSVlyTU5XN0pld0V1SmIvaW9wM0s1bGRjcE5lVytSV2wvYVQ4Q20rd21lWlhHRmgrQmZmSmwwK3c4RjNLYlFRa0hGbVowSlpMdHZqb1pSZThvK0NQZHNZRjkrYXNpOG9ERjc2MWdKOWRjRDNKY3R3SFVTN1oxSUZGVldkVG82QVVONmJIS0MrUUhpUEJ4dmFISEovdER6bysyeDk0''@;'; put 'put ''ZkxhUzQvTUVtaTh0UFFaZk5Ka2Z2M2hncW15ZVRIaWZiK3NVLyt5Q3NpUmJSdWx2dWtEU2Y0RldUOGkwQ25SK2VBdGFQUy9US2xiSDh1Zk43cWh3b2hlU09scmhqcXpWSUJtcTZDV2dVdTRmREVBenk2OW0wVjV5aXZvNXBVUXRqWm93Wlk0UXZCL0V1UjNMUjlWR3V5aVFjTk1sOVVtMmJHcE83''@;'; put 'put ''eGtnK0ZCSkx3VzlKRnNQNjNZaUtxUm9HcUdSbXJMc0dzMnlKMFhkQS9SMkRieGdMSE1ZOWRYMHlvM1FKb2luOGxkd3NIcUtKS3VuQ0tOWGtyWVdyQlphelVTakRwb0kwZVFqazhxMFRBbEtoZksyQ2t6clZ6VlhnekFETU5QNlVVRlFMS2w0RldsSmRERlk2S1BXa0pzdTFpblpXcjY5RkdFczZp''@;'; put 'put ''WlFXRkViTUl6Q3JNckRDdENpTHBNdFFvdTR0UFREeWtnQXQ1WGljSGVoSHNSYjc5V1ZSaExGOFdoeGtVakNvdmJ5R0NLN0U0WGhha0xDMVd0S2NKWFdzUHlhNmEyTFhHOGx2U1c2TGMrcGlPUnpLbzZnejVYcTBjelBmMmZlejM5a3VqajM0eHY1bkkxSzlGcEpQZ2JyeStMNUxLWUFiVzR0bHhN''@;'; put 'put ''Q2V0bWpaZnNHQ25FS1hMTVhTZmU1ekxQN1hEeW9OOWxsQnQ1VURTY0wvQlFMYWVtR0xQbCtlQlpDS0JoSTBNUGpxWFY3UFB5K0xKWkJzY2xwcytuNkYvS3B5ZHZtdGVhOFo4TnkyUWVrZTJESUUreldGMTJENU14d05sanVmVi94cFRCU3pTbXNkUTVzSUM5Nm16c0lhalJnUEtveEZyeTQ2TFpH''@;'; put 'put ''NmFteThOUlVwdTNtWm5udmRyMVVrRVJyZWJaeWFEdWtOdFRIbkMvNktlUER2dkJZRngrR1NvQUtEeTNZYkdiMVVCdGQxQnNMaVFxMk1abmpEdW5pdXFKTWthSGNXald4dWNJb2I0NHlYS2QzNVRCNjZPSDVRM2l4Qkk5NVBSSGwzYnNaTG9yb0owVTVReWZrbkNGNC9wR1N2andXZEY2T0JXRnhQ''@;'; put 'put ''eXJxdXllZmIzUVkzVmFDeCt3T0c0YnIvWklPK0ZUSitMeUdoK0w2RXRjQnIwZEZmZmZJZmNITy90c3QrcDZSK2xKZjUrZUsrcDdJOTFXalUxdjBQUy9QaTlYRERHOVpiVGkxM2JYVTUwR3JER2pkRmZONXNDSW1zcDhhRlhaR1ZGcFVVKzc2TjVWYktLcjQvdExtTW0rcEhtQ0duTC9FKzJ5czlE''@;'; put 'put ''NmJCOGNPOTh4a3U4bjVPM2ZzS0Q5R3ZzNk13RWtRY2xLcU1wUEdTRVJFOTJCM2RxYm44Qmc1djJQSG5kSVkwL2dnZVE2c2Nxbktvb0xRT29zMG1GUFV6MUZhRjFDTnFyeEN2c3BDMmpTemx4NlphZ3liWW5WMU1WTzRZYXFGVERmQ254WUwvTkhFNWxsQW4yTytIUitiNTRJMUI1c3JPSGFYVkd0''@;'; put 'put ''SU5TTFR1RnF3c3hxUkxqWnFrRDRIRFcxVmlRVmdIWXY1NG1iaGtpcEZpci9qNHNhK3ZrQUFmbXJkN2xyNlE2YjUzNEcrTnY2ZzFzMXJIK1l4SlgwOTZtRXJDTmZBWnJRVVk5SktWdUhCS3JVQXBvdU1Hd3Ywa3hsZS9lYXhLS1JxRWVrN0dZcWM2RGYyTlZuNjg0N3p4NWdYeWlpNXpObTVEWkYr''@;'; put 'put ''L0VIeUZkajVNSnMzQWJJQWE1aHZ6b1R4aEJvTHJFNE56bktWM2V5MEtGLzhRb1FacHExYVFKUXJKZVJBOUlzVENsbGQrYm9FWE4xazAxdXFUYldxa0c3V1hQUTdHVFFZdFRVT2ovZ0IrWjJmeHlCK2pkVzRpS2lPclVxckJJeWNvRmIzU2FNaFh4dGpGZDFlcWRnRkQvR0tsNXMvYmpqTmFHOWI3''@;'; put 'put ''cTMxcDlZZlJ6WEl3MGF3MVpTcHVQUGt4eEkzZmpuQjQ5eWZXbHR2OTczTC9hVE1aNXJua1RmSVBCS2xjSFFMSHZrOW1VZWlGSHF1aUw4VytoNEZtL2xpZlkvaTBhSytlL0o5RCtQWkVoN0orNTdKOXowTWZJN1ozdXZiYWJ5bU9OYno3anJYWWQ1ZGwzU1lkcEN4SG1hM1QwaHR2djV1anNmMTNz''@;'; put 'put ''MUpiWGc4WVRVL1RqVTZ0RVU4NFN2NWVFTDFOQ3FiVTVwQ0g5OUNQbnd2bnl1UVdwSHV2RWR2RWcyT1hQejdJTDZmQytQSXVOeEg2TG1FUGdKNU55ZjNHY2RmUnVmSUE0QXpuVThCdWt4a25yUVVmNUdLYmRNWHFmREt4MTFQY3l3eXlnNThMcWlmcDE5djBWUkx2OTZDM0U2LzM4THM0Tjl2UVgx''@;'; put 'put ''MCtLdm9KZklnUUVFTFVFbnhPa2FTeXRjeHdqcndiV3dkRGFqbjZZWWFJaStsbWwxK3c3N3JoeTNHdUtHVVRXRHNiOWRaVDYzSHdHNWMyN2dpNjVZTGZHdUx0ZGFYcmh2ZlNSN1UrZm02MmZxL0NlczM1TmRQVVVyZUNBWXMvQktleEErOHQ5cXdCOGJIT3pyR3hqcSt4Tjg2eGpuK1RBSmVqYUw5''@;'; put 'put ''Z0J0Z2MrbmM4UHBOaHVONlRDOUpFK2wzTENrT0ZIM0gwaURLd0d4djh2eXVEaTFXMXZDdlFGSmpWUld1cUZSVkZIOXRrckhhSUZSV0NzdDZqVTVVRkgvYlV1d2lIZGszSi9IZUl1MHRTTis1MUYyMlg1bHZYU3JwQzRwZmZHb3FtWlMvZldscWNXckgzR3d5azB5UGpiUVB0ZzkweGN0K0U1UHBE''@;'; put 'put ''L2dtSnNlbXZ6MUZiUjN4OS93dFRYaWk2SS9jV2ZrN20rNS96MS9lVlBhTG5BcGY2RVR2WFl6aUN1Q2RTcVI2Q3JUcjlzQWd0Z0xzZkErazdyNDc5YzQzZEU4L3E1ZnV2SXhpdmR4T1lPMzhDYXNZaEZZUFBERDY3Tk82Yjd6Q1pNVWIwcjNUWVRTVG5LcTNFd1c5dmFJUzAyOHVVSUFBSkFwaFJZ''@;'; put 'put ''TkpCY2FWdEw0bFg5QlVoU3NyWlpjTnMyMURiWUhXRnIzQkN6YXIzdWl0QnZ1MmNJK1dId3hhYWh2QjJ3QXBWTlRTakVENmZWRk81ZzdHMytiWFVtYyt2R0pkeWhMbHRrTjFCMitia09xWXBqL2t3b25jR1pXQTUzSXZPajR5MThldXFrNGVIMC9WYWUyTzFQQ1JYbGJFdERpV3FtOHltMUxaeS9q''@;'; put 'put ''My9PQVdVb05QQUI5VVBRVktYVHZqZXZ5bS94T3NXSmtxT3FEcUNNQ1ZuWG9uRWRiVzZBOHEzTHZHN3d4UlAyTXpWaXRKZTVsN3pON2pIUnp2SE5qeUNnNHB2NFRacTdoZGlwV2N6ZWVkQkdpc21UMHZ4SnI1OC9QNTUrTE54Yy9QeU0vUjRldUtueGZHVDZFUEZUMi9NOS8reUJYeXZTbno1QWFB''@;'; put 'put ''QVkxOXFKOXBjUnN4d0tERUhKTWhVYkRGZkp0aGNnTzN6WW9CSTlsbS8xMEVIOGxPMjFFRUlzbEV1NmMwdDQ2dG1mb0YrRjV3SmJxL2FDOWZ5Y09rK21EK2JoUDBlWFozazR3TEViMTdYcnF1aVg2K3ZoMCtWNVorcmx5YlFmOFAyeitjMHdBQkFBQUFBUUFBMzV2bWhsOFBQUFVBSHdQb0FBQUFB''@;'; put 'put ''TlBCbllZQUFBQUExTDZtOWY5Ui91MEVZUVBGQUFBQUNBQUNBQUFBQUFBQWVOcGpZR1JnWUQ3Njd5WURBOHZFLzRIL1cxZ1NHWUFpeUlEUkVBQ2xJQWFoQUFBQWVOcDFsRDlNVTFFVXhyOXpYZ2VpZzhIQlFTc2FEVlF0ZjZXQkttaHRKS0xTcGkzUG9ERmF3OEJrMEFnSkxrWVM0OFJBUXVLaUF5''@;'; put 'put ''UWRESEV6Y1hGd2N0REJSQ1lIblFoTGJZaVN5QVRSNTNjdUxXSmIybno1dGUvZCsrNDUzLzNlbFhYY0JqK1NwbzVSamZCbEhvTmFRRVRIME82RjBhSHpPSWtTQm1VTTU2bDJlWTQremVHaU5DQXRrNGpqTjY3SVFyQ21yOUVub3ppb2FYVHBWWnpRKzlSMXhNbCt2Y0U1ZWNUc3R4dlB1UnpUYTg4''@;'; put 'put ''aFU3S0pROTREdE9vdkhOVlh5T3NpeDI2UWs4am9LUFdkL3o4amcxWCtEbk9OWjdpbFVReDRJOGg3U2tWNC95a3lqak1jd3pwMUNtMWF3b2c5TTNRR3pmb1dMYnFBL1RxTnMzSVBPZGE4U1haSkNUMmFEZjdJSlNUMEhFN3JZL2phaEU2eVIzMTB5aDNPZmNUblpwSEdNaEpZRGo3b0VReGhCU2x2''@;'; put 'put ''R2ltN3JnL2RlTi9teUJONnVJWTJtZUM4TE85M3M3Y2tqbXVFdmVYUXBNb3hNNGpLQVl5VDdmS092alppMksxNWw1NndSbm5CV3ZhZ1ZkNGc0ZW9hUndRL01DQnhkejFHdjdhOHFxTVFTUFBQdk5zaHJBYWZ6RC95SjFYMDl1SlV4YnRxNldFTU81cC9PMlgrMFdlOWdHdk9xenJ5UHBMV2kvKy96''@;'; put 'put ''RGY2TjBTV3FCWFcxTC90WGJVc0Y4YXM4L2VmekQvejJXajkycHJWdE41dC9Rb3RSOXdYNjFmbnVLZm1oOVcwR3kxcnR0OWwwcXR2clBjTHZZdVNBWG5aK25BWlpBNHNoNWFGYlRJdjBvMW04OWI2cTZINXl0NHFERFVnRmdwelhlYldzbE5EZStlWXB4cE9sVE5Xb2UyUGViUUw3UjF3T2JROU5Q''@;'; put 'put ''L0s3NExsc1pxMlZ6TEw3SmtLelB4WE1rVWxxUGRJNmo1ZVE1Q3JQTE9hTlo2VzE1UjF3Q3R1blRmWW9GNENta1RjbTBDY1o4S2dPMU9XeUNXeWdKczZ5N09DNTFKb0RoM1NpeGFxVFJlRG9zdUh4N25jMXpwZkgvNWY3Unp3cEFBQWVOcE53bDlJR25FQUFHQXovNVNlcDZYcGVkNmR0L004cjd2''@;'; put 'put ''VHpwKy8wMk1NMlVORWlNVHdvY2VJSVJFOVJBOGhFVEZpaEVoRVJBOFJFajZFakJFU01ZYUlSSXlJaU9GRGhNUUlrUkV5aGd6cFFTU2toNzNzWVh5ZlJxTlovcWVnT1JuQUJ0YTBxdlpFKzZCOUhuUU9YZzYyZFRhZG9FdnEwcnFTcnFaSDlFdjZndjZQWWNhd1ltZ2JrOGFjTVc4OE05YU43YUg0''@;'; put 'put ''Y0hhNGJFSk1LZE8ycVdwcW1hRjUzcHd4ZnpiWHpWMkVScWFRWGVUR3dsblNscXJsQWJXaFVUU043cU1WdEdVMVdBbHIzRHB2L1dBOXRNVnRkeVBZU0dua1pUUTUycmRIN1F2MkwvYW12ZXZJT0pwajNGalZPZU04ZG5aZElkZUJxK3hxWVRZc2dXV3dDNnp1SnR5U2U4NTk0dTdoVVh3VjM4UUxl''@;'; put 'put ''QVgvNVVFOEs1NE56NTJuNWVrUlF3Uk9TRVNjeUpJcE1rMW15QnlaSjB2a0JYbExQbEloNmkyVm90SlVoc3BSZWFyaXpYbnozcEwzd252cmZhUnBlcFhlcEhmb1E3cEluOUhucjk0eERCTmlYak5UVElxWlk1YVlEUE9SNmZtMFB0U0gremdmOE1WOVIreDdkcGxkWjdQc1BsdGdlMzZ0MytHbi9j''@;'; put 'put ''QWY5Kzl3ZTl3eGQ4cDk0MnBjazN2aW5nUEZRRGx3R2FnSGZ2SXkvNVcvNXUvNEZ2L0V2NHczeGp2amZVRVd0b1FEb1NSVWhDdmhYdmd0OUVWRWZDTXVpR3ZpbHJnbkhvbW5ZbFdzaVQvRXR0aVRKcVVyNlY1NmxEcFNQNGdFc2FBUWpJWWNvYzZFWmdLWk9KSW41Vmw1VVY2WHMvS2hYSlRMOG1V''@;'; put 'put ''WUM5ZkN6WEE3L0FLR0FBNGtvSUlFbUFXTFlCVjhBamVnSGFFaTA1SHR5RFcwUVFEbjRBcmNnTHN3RDB1d0FyL0RCdXpBdm9JbzJIK0FrbFEybFQybG9YU2plRlNJQ2pFNkJtUFRzWExzT2xaWFVSVlhPUldvY1RXaHpxcEY5VXc5VjJ0cTR5OU1NOG1nQUFBQkFBQUJQQUJnQUFvQVFBQUVBQUlB''@;'; put 'put ''S0FBNUFJc0FBQUNEQWJVQUF3QUJlTnFOa3MxT3dsQVFoYzl0MFlBYTQ4SzRZR0c2TU82RWdnUWlMalZzRkRRU3dTMElBcEZhTGNYRXJVL2kxdmN3eHA4WDBJMlA0RE40ZWp0VUpZMHhOK1YrZDg2Wm1kNHBBSmJ3Q0JNcWtRS3d5eWRraFdXZVFqYXdpQk5oRTJXY0NTZXdoanZoR2FUeElEekwr''@;'; put 'put ''SWR3RW5sbENLZVFWZ1hoZVJSVVRYZ0JEWFVyL0lRVjlTYjhERnQ5Q3I4Z2Fhd0t2MkxPV0EvNTNVVGFzTEVERjVlNGdZY0JldWpEaDRWN1Bubll5S0ZJYWxPMTZPdHJ6NGhjNSs0d2E4VGNDMlJRUlpkNW5xN2tZcWhkUjR6MU1PYXBSU1ZIbDYzWE5vNnhoeVpxcExpOGphbk1PSTgxNVdudzVE''@;'; put 'put ''RSswTzlqL2VqMm53NE5Say9wY3NuQlRROVlvOHM5eU8xUWE1RVBxUWZhUHZmT0g3TUk1dWZ6VkVhVzYvcFhaVmZYZGFLcUdXb3V6NU9ja1dUMXFQcU1qam41aVNmTGZkTFQwVGY5N3BtTnZXV1RzVGIvYjRIRGoyWlNsUWxWdEdweEZiVldZdThjdHZpN2lVTDA5VXM0cDYrcnEzb3kzVXBVc1k0''@;'; put 'put ''cnZ1T0Fpa2ZQOEF2Y3ZYaHpBQUFBZU5wdGsxZHNIRlVVaHIvZnNYZmROazd2dlZmSFh2ZkVLUzVyeDdGakp5NXg3TVJKeHJ0alovRjZGOGE3Y1d5NkJBSWVRUERDTStVSkVMMEtKSGhBb2xmUmV3ZlJlYVFINzl3SlhpVHV3M3ovR1ozem56UDMzaUVMZDUwYllCNy9zMVNiZnBERkRMTEp3WWVm''@;'; put 'put ''WFBMSXA0QkNBc3lraUZuTVpnNXpwK3JuczRDRkxHSXhTMWpLTXBhemdwV3NZalZyV01zNjFyT0JqV3hpTTF2WXlqYTJVOHdPU2lnbFNCbmxWRkJKRmRYVXNKTmQxTEtiUGV4bEgzWFUwMEFqSVpwb1pqOHRIS0NWTmc3U1RnZUhPRXduWFhUVHd4RjZPVW9mL1J6ak9BT2M0Q1Nuc0xpZHE3aWFt''@;'; put 'put ''N21CTzNpZjY3bVdwL21ZTzdtTnUzbWVaN21IUWNMY1NJUVhzWG1PRjNpVmwzaVpWL2lXSWQ3Z05WN25Yb2I1aFp0NG16ZDVpOU44ejQ5Y3h3VkVHV0dVR0hGdUljRkZYSWpER0NtU25HR2M3empMSkJOY3pLVmN3bVBjeXVWY3hoVmN5US84eE9QSzBneGxLMGMrK2ZtTHZ6a25sS3M4NVVzcVVL''@;'; put 'put ''RUNtcWtpemRKc3plRlhmdE5jemROOExkQkNMZUozM3RGaUxkRlNMZE55cmVCenZ0QktyZEpxcmRGYXJkTjZiZEJHYmVJKzd0ZG1iZEZXYmROMkZXdUhTdmlEUC9tU3IxU3FvTXBVcmdwVnFrclZxdEZPN1ZLdGRtdVA5bW9mVDZoTzlXcFFJMS96alVLOHkyZDh3SWQ4eEtlOHh5ZHFVclAycTBV''@;'; put 'put ''SDFLbzJIVlM3T25SSWg5V3BMbldyUjBmVXl3TTh5Q004eWtNOHpEWGNwYU04dzVNOHBUNStWcitPNmJnR2RFSW5kVXFXQmhWV1JMYUcvSFdqVnRoSnhQMldvYTl1MExIUDJEN0xoYjh1TVp5STJ5Tit5OURYR0xiU1NSR0R4cWtLSytrUGVSYTJZWDRva2toYTRiQWRUK2JiLzBwL3lMT3lQYXVR''@;'; put 'put ''OGJCZEZEYUhFNk9qbGtrdEhNNEkvQzJlZTlSamkrY1ROU3hzemF3Y3lRaDhiVlk0bGJSOU1ZTTIweTltMEc1ZXhsMFV0bWQ2eERNOTJrMTYzSVcvdzVzaFlSam9PSjJLRDF0T2FqUm1wWktCUkdiazZ6UWRITk9oTTdPRGs5bWgwM1J3RExwTTFaZ0xmeW9lTFNtdERIb3M4M1dicEtTWnBzZWJK''@;'; put 'put ''bVdZMCtORTQ4TTVxZlF6MFBPZnlWS1prYi9IMjhHVVlVRnZPT3FFVTZORE1mdHN3WGlHN3N2UUU5UGExMjltbkhTUjN6OTkycFBUcDUyZU9GaFc1YklzV09uckhYYXNxV3MxYnRCckhNWmQ1UFZHb3JaamowWEg4c2JQcTNSZGFhaSsybU9OeHdhUGpiNCtZelRoSXYwMldGSVM5Rmptc2R4amhj''@;'; put 'put ''ZEt3MkJUZGlqbEpOeWdvcWtoeHlxMllzbDh5NTNGU1BmdXAyV1JOZjNaNlRoZ25SL1FKTHJkMDdMQSszMk1OdnVhMW5sVytqUk1jaklhaTdqSnVkYlkxQjVGYkNjdlludnFIN2RsdHlFQUFBQjQybVB3M3NGd0lpaGlJeU5qWCtRR3hwMGNEQndNeVFVYkdkaWROa2t5TW1pQkdKdDVPQmc1SUN3''@;'; put 'put ''eE5qQ0x3MmtYc3dNREl3TW5rTTNwdElzQnltWm1jTm1vd3RnUkdMSEJvU05pSTNPS3kwWTFFRzhYUndNREk0dERSM0pJQkVoSkpCQnM1dU5nNU5IYXdmaS9kUU5MNzBZbUJwZk5yQ2xzREM0dUFQNGNKV0FBQUFBQUFWaVk5bllBQUE9PSkgZm9ybWF0KCJ3b2ZmIik7Zm9udC13ZWlnaHQ6NDAw''@;'; put 'put ''O2ZvbnQtc3R5bGU6bm9ybWFsfUBmb250LWZhY2V7Zm9udC1mYW1pbHk6TWV0cm9wb2xpcztzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24vZm9udC13b2ZmO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdSZ0FCQUFBQUFGWHdBQk1BQUFBQW9PQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB''@;'; put 'put ''QUFCR1JsUk5BQUFCcUFBQUFCd0FBQUFjZktUYkxFZEVSVVlBQUFIRUFBQUFUUUFBQUdJSDFRZjhSMUJQVXdBQUFoUUFBQWNmQUFBT2RqK2hmWFJIVTFWQ0FBQUpOQUFBQUNBQUFBQWdSSFpNZFU5VEx6SUFBQWxVQUFBQVRnQUFBR0JvcWEzK1kyMWhjQUFBQ2FRQUFBSnNBQUFEbm5kREQ3Rmpk''@;'; put 'put ''blFnQUFBTUVBQUFBREFBQUFBOEVkOEJ5Mlp3WjIwQUFBeEFBQUFHT2dBQURSWjJaSDEyWjJGemNBQUFFbndBQUFBSUFBQUFDQUFBQUJCbmJIbG1BQUFTaEFBQU9Ea0FBRzA4c05HeU5XaGxZV1FBQUVyQUFBQUFOZ0FBQURZTGE0WUhhR2hsWVFBQVN2Z0FBQUFoQUFBQUpBZUVCQ0JvYlhSNEFB''@;'; put 'put ''QkxIQUFBQW9zQUFBVGFzbmc1UG14dlkyRUFBRTJvQUFBQ2J3QUFBbnB5VlZmYWJXRjRjQUFBVUJnQUFBQWdBQUFBSUFLUkFoNXVZVzFsQUFCUU9BQUFBWVVBQUFOa0wrYUdTbkJ2YzNRQUFGSEFBQUFEb1FBQUJpR1hGajJLY0hKbGNBQUFWV1FBQUFDQkFBQUFqUmxRQWhCM1pXSm1BQUJWNkFB''@;'; put 'put ''QUFBWUFBQUFHOUcxWW1BQUFBQUVBQUFBQTFDU1l1Z0FBQUFEVHdaMkdBQUFBQU5TK3BPdDQyZzJNUVFxRVFCREVFa2YwTUxQb2Y3eXBML0RvZlhmVi96L0FJZ1JDMFRRQ0xSNmNkRlJralZzbzdIelR2MUQ0QjdtNDA0OERPbG9wTmx2NjQ1U2VYWExUNTFzWHpTYStXM0FGM0FBQUFIamFqVmNM''@;'; put 'put ''YkZWVkZsMzdmTzVyM3dNc3BYeUVVZ2toVUFoV2hqQ2lDS054bWxwSVJ4bXNCQTBZTlk0ZmtNOVVaS2JHeUdjVXpVanF4SkdLWkVMUU10cGdCVVRGcWtoZUNQNklJZmdKRWl3RUsyTDlBU29hSThwMTNYMGZjRXY3WnV4S1YzZjNPZmZjcy9kZTUrM3pJQURTR0lvcGtNcXFtbG9Vd05HRE1JVGxI''@;'; put 'put ''NEdCbmZPWHVua29tWHRqM1J5VXpwMHpkdzVuZy81b05KNFJzZVZ6YWZSREdZYXJ4MklZYW14TFBCb3MwRlVsYUVEQWg2VG5RajR4VUgwZUphY2hxQW9ieUI0VHNRSy9JSlNCTU53RzU4a0FhVU1HUGJpekkyRTJiQTczaHZ1UjV5ZjhKdS9JN202OW4yQkFwLzgvQy8rZGQ0V092Q050ZVVmMmh0''@;'; put 'put ''azhJODNod1hCcmhMT2Y0Ty9PQ0YxMml2RHpzSUZaTWhqQ1RBOW50a1lRQmhXRXhRV0V3MWpDNC9kRWdQRkVDaGNUQlpoQUZESzNFMW1wUllSZ0tlN256QWNJejR5dm9QOUZRdkFTSVhpWk1IaVhjSGlmY05oUGVIeENCUGlVQ1BBWkVlQW9rY0kzUkFvbmlFSlc3eGV1RmhKcEtaSWlGRXF4RkpO''@;'; put 'put ''THBJUThrSlZOYysweFZNa3dQak9LRU4xM3ZHT2pPN2E2WTZjNzlxZ2tDbEJGRktLYVNHTWFrY0Y4M01VVm9rZ0NqU1RRU0R3ZXhrck9ieVFLOFJoV2MvNFQrQy9uUDAxa3NKRklZUk5SZ09lSUZEWVRCWGllU09FRm9nQmJpRUswRW9YWVJxU1JKZExZVHFTeGcwampkVUx3SmlHYW5RQUhpQXcr''@;'; put 'put ''SnVLOEdNMkwwYnc0ell2WHZIak5pOU84T00yTGsvN1NuL2s2Vjg0bFJ6bnlYTFdDR1JyT0dsZXd0bU5aMC9ITXpBUm1aRDRXNEsrb3c1MVl5Rm91eFRMOEEvY3hDdzh3K28yTTZIbFc4aVZXOEYxV2JqOHI5aWtyZFpRN09hRW5xNGp2TFluT2w3bFh6K0ViVXNlNGUxSmZXNm03aHZEN2J0U3FJ''@;'; put 'put ''OUg1eUR2eUpYR3NteWVQNVQwYlgrYis3Z3UvRGcrRUQ0VVBuVDJTTzVGTllkUHAvNzVJakh5dXp4aVVxaVpFTldGd0RXRnhMZUZ3SGVFeGt3aW9pSldjRTZsQlZBMUcxV0RRUWdUWVFBUmFhZEZLaTFaYXROS2lkVFU0UkZnY0ppdzZDSXVmQ1krVFJDQzlwVGZyMmtmNmtQdEtYM0pVVWRHS2ln''@;'; put 'put ''eVNRVnpmWURUT0lUTG9UZlJRcFlzcTNhalNiVTdwVnhCSnBUdU5KMGpFazFLbDI1elN6MmpjYVZST28wcHBWS2VVSG1zOFZ2Y3JSSDVkUjlFNjFhekpSUmdwMTJxY0tkV3ZWZjJhWE15UmlrMHU4a2pMSmhGL1V0RldzNUNTTVhJeDN4NTllbFV4d21tczE3V01heVlqYVdRa3EvQTRvM2tDVDZJ''@;'; put 'put ''SjZ4alIwNHhrQTA5akszZWI1UzUzY0hlSFdJTU83dXdrZDlDSGIrdlB0d3ppaW1XcVo0TmUybEdLdzZXMGk5bmZMcVVsYWwvS1R0UVdsSkhibWYvdHNseFd5Q095U3RiSU9sa3ZtMlNMYkpYdDhwYnNrZzlrbnh5VXcvS1ZmQ3MveWtualROb1VtWDZtMUF3MTVhYkNqRE1UekdXbXl0U1lhV2FH''@;'; put 'put ''dWQ3Y2JHYWJCV2FSdWNjc013K2FCdk9vV1czV21xZE1pOWxzV3MwMnM4UHNOTHZOSHRObTJrMkhPV0tPbTU4c2JHQjcyR0k3d0piWllYYVVIV012dEJQdDViYmFYbWxyN1hYMkJudUx2Y1BXMmIvYmUrMTk5cC8yWDdiUi9zYythWnZ0QnZ1Q2ZjVm03UnYySGZ1ZTNXc1AyRVAyQzN2TS9tQi9k''@;'; put 'put ''c1lWdUY2dXhBMTBROXh3TjlxTmRSZTVQN2hLTjhWTmRkUGRUSGVUdTgzTmN3dmQzVzZKVys1V3VFZmNLcmZHclhQcjNTYTN4VzExMjkxYmJwZjd3TzF6QjkxaDk1WDcxdjNvVG5ybjA3N0k5L09sZnFndjl4VituSi9nTC9OVnZzWlA4elA4OWY1bVA5c3Y4SXY4UFg2WmY5QTMrRWY5YXIvV1Ar''@;'; put 'put ''VmIvR2JmNnJmNUhYNm4zKzMzK0RiZjdqdjhFWC9jL3hRZ0NJSWVQQjMxWmlONWlYS2xjclZ5WThSWXJOeXNubVhLS3hNOFZibENlWkx5M3lJMmc5V3VWYTVTSG1ING1Tcmx5aFhLa3lOR3ZmS3o1dFZUdGx5aVBFbjk3Y29uMUROS3VVbDVwSEpHK2M5Mk52a1o1ZnJ1bVZVL0UyTzErcnN3cGl0''@;'; put 'put ''dlZsNThobVZXSEx2YTg1VGZWRjdabGVNTXFOMlZhNVZIbU96L1kybzNtYXRzZDR5cHlpM0s5V2VZMmN0cTl2NDN4L25NZHNzakUxeWYySE1uTzFIVEplb3ZWMy9TcnRRY1BxYjJyRVRtNHlnNjJUa1YrYlA4aldwUGptMmRFMnNtcms0Y2RhelBuSjN6UjNPYTFYN1dManFsM3B6R1BsVDcvY2pP''@;'; put 'put ''MVRUT1dLenRXSHRKZjF6Wk9HL3ZxYjFZYS9TUjZ2eHJuVDlWMzlXdWMvUkV4THJ0NUs5USswU3VnaHRQcXpycGowL1FwSVJtNG9vazdlZlV2algyNjN3OUYyYXcrcHZVSHl0dFpNS3VVczZvSjU5OVhPMjdOYnFyMU42amRuTGw2bkFMK1h6bFpLV1NiNXljTzkzWjM4Q2RaeHFjcC9kUzhONVZ6''@;'; put 'put ''cXhFdDFQSHJqMmFYVEM2WVFmNEhXOWlLWXpEUmV4aFVlZnV4YjQ5aVQwOTZ0eTk5WTVhckoyN0Qvdk9GUGFoR3FJdnJtS2Y2OGRPTjUzZmZXWVFwZHJMQjdQcnpXTFhtcys3MnhDOXZZMW5SMS9EOWRheTgvMUplOS9WN0g2dnNrTytobDI0bFRlNm82alhXK1VxZkNjZWo3TVREMEtMOXRSVzds''@;'; put 'put ''ZmtIUDF1RmtEQ1dJVkxjQXQ1T2J0ZGh0OTF5aGpiS042OUwrU3VMK2N1cjBRdFI5OVc3ZTVWUHFpc1p3YTdFNnlWd0YzSzY1VS8xcXoxVlR1RFAvSTl0K0YyU1VtQkZFcGFNdEpUZW5YZDBhOTlsNTkwQUFBQkFBQUFDZ0FjQUI0QUFVUkdURlFBQ0FBRUFBQUFBUC8vQUFBQUFBQUFlTnBqWUda''@;'; put 'put ''eVovekN3TXJBd3RURkZNSEF3T0FOb1JuakdFUVl6WUI4QmpZR09HQm5RQUtoM3VGK0RBNE1DcXAvbUtYL0d6TXdNSjlrMUZGZ1lKZ01rbU5pWlZvUHBCUVltQUR3YlFxMUFBQjQycldUV1ZDT1VSekdmLyszZlJFcUZQWDI5bW5UUnFJVVJmYWx5TDZVck5teXI5a2E2eEJEUlZMSW5pU2pHUk5U''@;'; put 'put ''VTdZYjdyZzFZNHkrejVWYjdnd2R4MWRNTTh5NGNtYmVjOTV6enB6bm5IbWUzeDl3b2VzTFFYU1BWT3FaT09ldVVxekhKWXpEallHVWNJczY3dEpJRTgyMDBDWWVFaUNESkV3R1M1d2tTYXFrUzZaTWxSekprMElwa2hJajFYaGx2SGVKTW8rYnJlWVQ4NHZsYmdWYXdWYW9aYk9pckdGV3VuWGY1''@;'; put 'put ''aC81VFNsOWg4V05IdHFQYWVPWitFcC9NY1Vtc1pJb0taSW1HWklsMlpJckJiSkJObXZ0bDhaYnJYM0liREhiemMrV1lRVllRVmFJVTN1b2xmWkxXMzFVTDlSejlWUzFxMWIxU0RXcmg2cEpOYW9HVmEvcTFEVlZxMnBVdGFwU2xhcENsYWt6cWxTZDZIelRtZFdaOVAyVG85eFI0TWgzeE5nSDJ2''@;'; put 'put ''M3NQbll2dTV2ZDZQamE4Ym5qOEllUWQ4bGRYdjJuNW01NE81UGdqMXNFby92UCtJZEcxMGtYWEhWMjduamdpUmZlK09CTEwvem9UUi82NGs4QWdmU2pQd01JSWxoblBFaW5Ib3BKbUU0a0hCdURpU0NTS0tLSllRaXh4QkZQQW9rTVpSaEpEQ2VaRVl3a2hWUkdrVVk2b3hsREJwbU0xY3hrTVo0''@;'; put 'put ''SlRHUVNrNW5DVktZeG5SbGtrOE5NWnBITGJPWXdsM25NWndFTFdjUmlUVm9lK1N5bGdHVXNaNFYrL3c1MnNwdGlEbkdjMDVSVFJnWG5PVWNsVlZSemtSb3VjWVhMMUhLVjY5elVGUDFrOURZTm1xVjdtcWFmYlJXcnRSM1JiT0JzdHpmcldhUDdYWno0N1ZiaFh4eThRRDJiV2RsalpTMmJKRWFQ''@;'; put 'put ''VzlqT01ldzRKRnp6R1NsUnVnSWl1S04zSHFCcGxnUmREL0hkWjRxY1ljU3lqYjFzWlI5N09NQkJYVXY3T2NKUnZYV1lVazV4a3RlNm1ucXhUcnpFVzN6WUtINmFmODhma00ycTZIamFZMkRBQXBLQk1Jd2hqR2s5QXdQVGJpWldCb2IvSWN6Uy80Mlpkdi8vd25TSlNmRC9sLzkrSUQ0QTJzOE5z''@;'; put 'put ''bmphclZacGQ5TkdGSlc4WlNNYldXaFJTOGRNbktiUnlLUVVnZ0VEUVlydFFybzRXeXRCYWFVNFNmY0Z1dEY5WC9DdmVYTGFjK2czZmxydkc5a21nWVNlOXRRZjlPN011ek52bTNsak1wUWdZOTJ2QkVJczNUV0dscGNvdDNyTnAxTVd6UVRodG1pdSs1UXFSSC8xR3IxR295RTNySHllaklBTVR5''@;'; put 'put ''NjJETlB3UXRjaFU1RUl0eDFLS2JFcDZGNmRNdFBYV2pObXYxZHBWQ2hYOGZPVUxnUXIxLzI4ekZ0TlgxQzlqcW1Gd0JKVVlsUUtBaEVuN0dpVFpqRFZIZ21hWS8wY00rL1ZmUUZ2bXBHZy9yb2ZZa2F3cnAvUlBLUDUwQXFESUxESXRJTkFrbEgzdDRMQW9iUVMyQ2RUaU9CWjFxdjdsSlV1NWFT''@;'; put 'put ''TE9BSXlRNGN5U3NJdnNSbG5OMXpCR3ZiWVNqemdMMGlWQnFWbjgxQjZvaW1hTUJEUFpRc0ljdGtQNjFhMEV2Z3l5QWVDRmxaOTZDd09yVzNmb2F5aUhzOXVHYWtrVXprTXBTdVJjZWxHbE5yWUpyTUJBNVNkZGFoSENYWjF3R3ZjelJnYmduZWdoVEJnU3Jpb1hlMVZyWjRCdzZ1NHMvbHU3dnZV''@;'; put 'put ''M2xyMEo3dVlObHp3RUhjb0trMFpjVjEwdmd5TGMwckNncE1kTDFFZEdTMG1KZ1lPV0U1VFdHVlk5MFBidmVpUTBnRzFCdnJUS0xZbDg4RnMzcUZCRmFkU0ZkcU1GaDBhVWlBS1FZZThxN3djUUxvQkRmSm9CYU5CakJ3YXhqWWpPaVVDR1dqQUxnMTVvV2lHZ29hUU5JZEcxTkthSDJjMkY0TXBH''@;'; put 'put ''dHlTdHgwYVZVdkwvdEpxTW1ubE1UK201dytyMkJqMjF2MTRlQmdGakZ3YXR2bk00aVM3OFNIK0RPSkQ1aVFxa1M3VS9aaVRoMmpkSnVyTFptZnpFc3M2MkVyMHZBUlhnV2NDUkZLRC96WE03aTNWQVFXTURXTk1JbHNlR1JkYnBtbnFXbzBwSXpaU2xUV2ZocVVyS2pTQXc5Y1B3NkVyUXBqL2Mz''@;'; put 'put ''VFVOSVlNMTIyRzhlR2NUWGRzNnpqU05JN1l4bXlISmxSc3NweEVubGtlVVhHYTVXTXF6ckI4WE1WWmxrZFZuR05wcWJpSDVSTXE3bVg1cElyN1dENmpaQ2Z2bEF1UllTbUtaTjdnQytMUTdDN2xaRmQ1TTFIYXU1VFRYZVd0UkhsTUdUUm8vNGY0bmtKOHgrQ1hRSHdzODRpUDVYSEV4MUlpUHBa''@;'; put 'put ''VGlJOWxBZkd4bkVaOExKOUdmQ3huRUI5THBVUlpIMU5Id2V4b0tEeDJ3ZE9seE5WVGZGYUxpaHliSE56Q0U3Z0FOWEZBRldWVWt0d1JIOG13T1BxNWJtbk5TVG94RzJmTmlZcVBSc1lCUHJzN013K3JUeXB4V3Z2N0hIaG01V0VqdUozN0d1ZDVZL0lQZzMrTEYyVXBQbWxPY0hDbmtBQjR2TC9E''@;'; put 'put ''dUJWUnlhSFRxbmlrN05EOFAxRnhnaHVnbjBGTmpNbUNLSW9hMzN6azhrcXpXWk0xdEFvZlR3UTZLOXJCdkdsT2pDT2xKYlNvU1JvQkxZT3VXZEEwNnZQc3JXWlJDbEZ1WXIremV5bWltT3hGR2N5QUtTamtwckd3N08ra1JGcFlPNm5wOU5IQTVVYmFpNTRzTlZ0V2NZVzlCKzlqeU0wc2VUZFNY''@;'; put 'put ''cmdwS2UxRm0xQ252TWdDRHJtUlBiZ21nbHRvNzdLS1lrcFlxQ0krQ0cwRisrMWpSQ1l0TTRNdWdTSmtjYkt5RCsyS0hUbWlnbllDMzNyU0t1L2JRdTNQZGZJZ01KdWRidWRCbHBHaTgxMFY5V3A5VmRiWUtGZXYzRTBmQjlQT3NMSG1GMFVaVHk1NzM1NFU3RmVuQkxrQ1JsZDJ2KzVKOGZZNzF1''@;'; put 'put ''MUtTVDdiRjNaNTRuVktGZkpmZ0FkRDdwVDNJaHBGa2JOWXBSSFByMXQ0TWtVNUtNWkZjeHdYOU5JZTdZcFYzNk5kMkhmdG8xWmNWbFN5SDJYUVZYVFdic0kzUGw4STZrQXFDbHFrSWxaNE9tUSttNTJhOExHVXVDeEYzTE5rMTBYMEhUd2hIZUsvT01TMS8rdmNjaFRjb3NvU1hXalhDY2tIYlI4''@;'; put 'put ''cjZLMGx1NU9IS2tabjdieHNaNklkU1Rmb0dvS2VTQzQ0L2w3Z0xvOFY2UlR1OC9NSHpGL0JkdWI0R0owR3Zxcm9ETVFTNTYyQ0JJc3EzdEpPcGw1UWZJUnBDZkJGMVVLekFuZ0p3R1R3c21xWmVxWU9vR2VXbVZNQldHRU9nMVhtTUZoakRvTjF0WU91ZHhub0ZTQlRvMWZWanBuTStVREpYTUE4''@;'; put 'put ''azlFMTVtbDBuWGthdmNZOGpXNndUUS9nZGJiSjRBMjJ5U0JrbXd3aTVsUUJOcGpEb01FY0Jwdk1ZYkNsL1hLQnRyVmZqTjdVZmpGNlMvdkY2RzN0RjZOM3RGK00zdFYrTVhwUCs4WG9mZVQ0WExlQUgrZ1JYUVQ4TUlHWEFEL2lwT3ZSQWtZMzhZeTJPYmNTeUp5UE5jZHNjejdCNHZQZFhUL1ZJ''@;'; put 'put ''NzNpc3dUeWlzOFR5UFRiMktkTitDS0JUUGd5Z1V6NEN0eHlkNyt2OVVqVHYwa2cwNzlOSU5PL3c4bzI0ZnNFTXVHSEJETGhSM0F2ZFBmN1NZODAvZWNFTXYyWEJETDlWNnhzRTM1TElCTitUeUFUN3FpZHZreXE4MmZWdGFsM2k5SlQ5ZHVkZDlqNUcyVXp1aXdBQUFBQkFBSC8vd0FQZU5xMWZR''@;'; put 'put ''bDRaRldaNkRublZ0V3RMYW5VbnFTeTFaNmxrdHBTcWV5cDdFdGw2WFJuN2U0a3ZTWHBwcUZwNklWRlFCQWJCa1ZSbkhFYnhVRVFCMWthQkZxVVpSeEdCWjQ5TGlNT09vN29tM0ZHSGJmbkcwWjBKRGZ2UCtmY1czV3pOVGpmOTZDVFZPNzl6L2FmZnovL2Y0S01hR0U5aVQ4dWVKQ0FMTWlKU3BB''@;'; put 'put ''ZjFhQVVha0VkYUFpVlpGdzluZTJ0NmFaa2JUaFFXVnJzc2hZWk5BUVpZM1ZhcjlVck9wTk92ek9aOHFlU0taSDlGT0dqOHBRK296L3BHM2lTVWo3TE1LeEJPcG5DSDVmK0RuZjgzKzZlQjNwNkhuaWd4K2YxOXZUMEhPbnhubnZnaU05N3hQdkFBdzk0anh3NU56RHd3TXBBMWQ4TFArdjFCcjN3''@;'; put 'put ''NzVhanZvR0J3RUg0Tk9CdDcvRWR1YjdaSGQxMTFWV1BYSFhWcnVpcU4rcUZmd2dSTkxyK092b1dPYy9XRnN6NEVNWm9BU0ZVbUVXRUNFc2FMQWh1WVZTajBWZzBoVUZya1ZaMDE5bVRndDhWU2pVMkpSTXVwMFBubnpsVDBxY05oOHM4b1pDSG5KZDhQNnd1S3cySFM4dXFFVnBmUjMzNFhud0Rl''@;'; put 'put ''YkRJaDR3SUZRbncvU1ZFeHczQXR4dGhYQStxUk1PWkFZdU9JSzFBTUVGNDJZUU5oc0pzWVZHQklJcjZCYk9SNlBYV3JBWVRZaUdqQ0ZWV2xKZEJLMDlwU2JFYnhyZGJjLytKNVhWWVRJcCswWjltWCtrayswcUs3RXVrTC9HYnNTdnRKeUs3SXUrTlRFUXV0eCtQWFdHL0FqNjlGNTZjc1AzTmUy''@;'; put 'put ''UHZ4UmVleno0Qy8yV2Z6ejRLLzJXZlI0Q1owUG9GMGtiZVFCVW9pQ0tvUGxNYnFmTjVQYVhGYnFmTlpOU0xoWWhvQVcxa0JKYUZDVDRJNjNPajBVcXJWUUJzQlhTd3g2bFFPTzF5cHhwd3FyRVRwMkd2WFc0eEZIWldZQ2VDeDRYWWFXdEtOY0lEMG5ibXNxbDNIZWpJN2oxeUpMbXZkZXJLeGRi''@;'; put 'put ''KzhSTlhTWmRIRTNWTnY4NjBaSzQ0S1daNml2WmxoMncvS3AzZWxaeHBGanM2emJ0SE82My82Sm1id3U0YTZ3dUdGcjgwMzFaZDNXRDlKc3hEaXlMcnZ5TnI1Q25ZWFR0Z09vcmEwUC9LUGxhOGF5NVRaOEphSThZNkxWNUZPcVEzNlBSSGtVYURsZ2ltdTE4QWV5QXNtVVVpQ0JaaDFKTjlMQXhO''@;'; put 'put ''b3Bkc2dnQ1V0Uk9YekZnVTNlS29KNVBjcGdVaEFFdWJvZTFiemM5blFyRllWWlhEZ1ZDc0xkYmExRmdWcldxb0Rqa3FIUldseFhhYnRRZ1dVeGdxRkoxMU5vN1JaQUl3NlNqRWZwekVmb1pLdjAvbmRMaVNhTlA3VHB4Lzk2bVJtdHFSV0F5K1o2UDR2YnVrOE1UcFJESVVqaWREZU85SUxUemty''@;'; put 'put ''NnJqOUdFaWpQYzFqRWZqdXhvYUptTHhpWG84dFRhSi83SWpHdTNzaURWMFN2dnFKK0pSK2c0ZzZydnA0ODZHYUNlaXRCTmNmNTNjUUw2QXZLZ2VOYUhPVEZzOEdxNnFLUGVVbUloUklGNk1CREpDYVJzdkFldTVzbHBnT0lZWm9LQ0dCcCt2b2FraDVhdjNSU0orbmVpcTA0YkNPcitQTHFvcHJW''@;'; put 'put ''NGF2SE0zcGQwNjBZM28ydHg4bmJZMGdOT2xrcUF2c2U5MDEzSkxkcUs4Tkxxbk1UWlJQekU5MUZkWE9SR05uWlQrTWxsYzJ0TlU3M2NNWE5HeE9wbzIraHJuWW5QdHZRZjhOZjJoaG13a2txMXZIdzNzR2VpYURDejNuU0lqMFhCcDJsc2FEd2NTYTY5MVh6MmNtbXpLSUlRcG42TW55WVBJak95''@;'; put 'put ''WklpcEYyUGJpVVdlQXdNUnRlWGtoK3FldFhyZmJhN1hFOEg4c2U5MCtuOXU3UEl4b0g2M3JNN2lQUElzS2tPNkpBaTJPMVRFeGszWURnOENpeEFldnZISzFjV3JYNUo3RzJSL2Q4cTdYOWpSTlAzWHExRk5UYWRhMkZ0bzJLbTFGYU11UkVFNXovTlR1bVlSMnE5RERxZW1ucmo3MTVFelRudGZl''@;'; put 'put ''ZGN1UDlyQzJLWHdDSHlEUG80T29PWlBhT3pIVVZGM2gxdWxoRVNNQ3hocU10Qml0NnJCV1M1YUFlRjFhRUVJQWVtRFA3czcyV0lQUFd5ZFNTb1NacHB2U09oSCs5L3ZDL0RmZzlRWWNEdkhma2dtM0MvNW52M0ZVQUN4QU5QRlg3TmRDREJ0WmdmbHZ0SnN3dEhlNW1aaDkzbXJVRWJ1ajJxclRX''@;'; put 'put ''UTBhYzNHRHdXMDJ1dzBOeFdhTnNVaWp0MVk3N0VSbnRKb0xLSnpSWmdnNUdXQUJBN1NXYXFLT0FnYm9EQmxzUmdwWmdFOVlUS1VKbjduQTdqTUtGdEZnRVFzdEdyMVdxOWRZQ3ZVV3ZWaWtNZnJzQldaZm90Ums0WkJpa2VnekF5aThaYUNpQVZ2TkhOVHNnNWNjbHVHMEd5MFRCMmxHSmhUSytK''@;'; put 'put ''Rkd3SnBwb0cyUUZGaEF5OEQrZUFFQmFzZVk0QzdTaWFWMTJFODFZSXBxd2lSeFBMdi9tV2YyUDR1OXp6NDcvL3p6dEwrQjlXdlF0OUYxcUJDNU04REthRkNoTVdDVWdJM1NHSENBVDBWbXUyb0xQS0Z3bVRjY2poMkx4RUU5aFZPMS91RTA3YXNSL1FTMzQwN2d6dUtNRTlHT3B1bWNZVVlJWmxS''@;'; put 'put ''RU83TjduZDVHckpkK2p6djNzdlgwZ3A1OEVjWTNVWTFQbjREVXc5aU5LVEdZa0RFZ0FCR290ZUpsc2tZMDU3UWhYdi9WK2dWOGdmd1V4clZtQ21tbnQ4TFlwL21BVkhUaGtjdWwreTRuUDMyVGltNVFKazBnTzI0aHo0QzRxMFNSVEEwUUgxc3hseElZbERPYlFGRVJLTmJLb29waUY1T0xvRy9x''@;'; put 'put ''Tkp2bEhrazFObUMvanpKU0JZd2szcGJOM2pZOWZTNmJQVGVkbm9uRlp0THAyWGg4Tm0zZTkrblYxWHYzN2J0M2RmWFQreFo2cngwZHZhYTM5NXJSMFd0N0dRNWczYmdjZExZT2VUTEZzSlVDNEd1RVMzR01MWGpVYW1lb0U4UHBwTlgvaFd0cW45cTlRdEtqdys5WW0wU3NmUlFXVlF6cktVYTFt''@;'; put 'put ''YkRKQ01zQmFpQmtoS0dUaVQ5cWRDd2dwbk9zN2tCSUl4YlhkV0ZGYW92aEpsbmNXVEJzVC9UTnZyYlJwcWFaVU4rQmoyZU9kWXpNM1l1SEpmZWViN1VzUnB1Nkd4UHQ1eHFYT3ZxdkhmcXpSVGEySDNCWkFXUFhvSzVNZTBreGpPUERtTURvTUFXbXVCSEJ5ekN5WmdtSUV5WUN1bk9KOHJ5YnNY''@;'; put 'put ''c05xZzRFdklHZ0tKYkFMbE9oa2t4UVBRT1dtanZSdEhsNm9vejJmemhYMngwNDFOcXphMm84bSsyZDNOV2VuQXAxTFh5NC8zajdTR3ZIVE9kVncrWk1xcmN1a1dsTXBmRmUzSnlNZFVick82K0xUVGUxNzdZVjd1bHQzWmZrZE9DSGIxbkF1eEdrRzFnZlpqQXk4SWhPQzJ2QUNHek5GVUFkVTZr''@;'; put 'put ''V3phakpaQ293RlFCUDJZcm9YSVBlTUU1YXFiWHBUMWtGZkt2MGtBbVBYWHY0OFBKdjc1bkVYNWFHNXU5NUEvZEx6OERxNDRDZkdoaWpETFZuV213Zzlnck1CR3ZBbmhsQjhCMXBRSUVMQWxuZzJuc2pjc0FjODFudEFUOUREaGc2U1JrallwaHlrZGlVSThPL09OSTF0OUt6WjAvdlpNK2dFWDlX''@;'; put 'put ''K3FLdVo2enphRWYzcVJIejVVUDd4dHZhaGhOVmVIWHhZaVI1cUtmdldFdU9CN3BnM3p5b0d2V0Q3UU5ydHdMUkJJdUpWaU9NNkVDYWFMU0NaaFhsTktnSTgxSUVRMWtaeks2NkxPejNRdnZTUURDa0I0c015Yk9od29MeWlGdmtyQUhDT0duTDBScGxrNDhlNjh4Y1BYakg3ZGx6ZTY2Y2J3ejBS''@;'; put 'put ''eHFuRXJqcVVJdTdOempUM1RKVldEamVqVC9mZUxDbis3TDI1ejZ4K3RrREUrTmViLzkxMmJxWTlOSHFibi9IU0VkaWJKYlNIZ2dkNG1aOFU1a3BBMzJDR2RkUWVZT1puUTEyTFZnMTFGckUzcFRYQ1lMZ3I2U1A0QjlMUHpwTkpoZEgxejVKN1lnbzRDSEY4QkFHMzZNdjArM1FFWkNxSTZJS0E3''@;'; put 'put ''SjAwQU1HTU93UGt3N1YxUlFKMWFucXhtaDlXYmdzNUt1aXFJZ1lxTGphenBDUWthT3lvdHowTStpaFFrSnRpWitmN1p2c2J1L3J2YktyKzhxZXdaYnVYZjFuaDFKemsrM3R1MlpUdlh0and3SC9jSHh2cnprMjI5cXh6MVc4cTdsNUtsSS9sVzdkNVhMdmEyK2RpK0tQdHNmcU85b2I0bTJDOUpX''@;'; put 'put ''dWhLK3BBdU9LSmwraWkrNTFHdGFZeWU5MVJSSHNzUUc0VkUrMUJxeFVDenlxSmF0QTZRSXNUeEJjV1pVU1VQYWFMekFZQ0xLOWR2R3Q1aHdMMnBiK0lpL1lScGZPWmFJcmliKzRaWmN6YlBlNzJEYlgweDBuejJ6Y1piN3owa2ZvTnJQOXBtdGdlb0xvUUNlNHFjeW1NcHJOME1vZEtpMTNxTXht''@;'; put 'put ''aE14dXM4dFd4SlNIVHJZZ0ZPVkJ0bEVrWmZKUGZJdWlVYVJUeWlmd3M1aCtKRHJ3czBEL1drVmtCZW44UG1SNEhPT244ZnNlUzlaeE9wd2hoTXdESGVxZTBCR3drZXlwb0xNQU85UDQ2OUw3OENrY0gvdkJ6RU1QelRLKzYwWlBFQWYrQlZDZWlIeVpTa3F2MURkRDRCQ1FhVmxNRTRIcTd5SXFw''@;'; put 'put ''U21uMC8rNzhYZWtldmIxaS9uYjVtSE1FUmpUcVl3cHdKanBlcHpTT3JVaitCU00rWFVwOWNoREQ4MzhZT3dIZEV6Myt1djRPN0QvVHJDVzA1bEd1MEZQeFJ1bTRsbUFnVzlTNlFrcXFMVllvM0ZyUmwwdWw5ZFZGU3oyQjNWMElqSUg1NlF4TUxaemc3LzZ4TzZqZmMwekE1Mkx0M2NkYW9yUHBR''@;'; put 'put ''ODRGTXplcXV1TzFIVk5kVjRWbjJtTVRMYWFUL3dnNzhyUytVWFc3eFQ2eVgyQW13bjBvNHk1eWthTWhzNE9Jb0tRekQ3bUJ3Y3BCWWFPUWRBWWJqSmpveFliWjVFV0pMV294VWVSYU1KNlVYOFk2WFNLMzBQOUsxaUcxVUM5cXhwb25GUWF3MklOUnNHdytwYWQ2TUREYXNtMVFrZ25JTjNxenEz''@;'; put 'put ''MWVuRVdnVXU5eExxWkFEK3JwS2NIb1o2Sm52SGhRVmhVSmhRSzIwT0JVS2hBTE50aVF2aENZUlh2SkZ6dXRGdmtFaUZCTWE2eUxoTE1ZdmNyb2xUbXI5N0hWcS8rOHNubFI1YlRNOUZvaDdGaVZ6UTJXdGR6V1d1OHoyNmVMdEs0RGQ3eThyUi8zeWYyTHorNnNuRFBZc2R5eXQ1eXN0ZmVGMHpF''@;'; put 'put ''YWdkcm02T25WeDVldnZMTFZ4MjRiM0hpeW5Ra0hLcVA3R3JzUGRWWDUrL1NUYmpQdEpncXFtcW11NlkvT0xQNjZQTCtUK3d2cnlvTGVMRXh0aWNSYll4TzFNZmIyZjZWd3JmdmdSd1dRWlBXWmFvTldFUHdDRkFSa0pVR3RDaFZiV0R3VTB0R3I5Y2I5VVp1bWhhREZoV1pheGsyWVJLUlB0NStF''@;'; put 'put ''b2ZwdjhOM3duL2svTnJrVC9HQTlDWEErNndjMHloQ0pjaUhPakt0SUlsaEJCMXdqbFpEdE5TOGtJTXJJdVlXTUIzTFUycXplaXRMZlI1ZnNjdGFZaXVKVk9tWkFicFJJSHN4MDZwMTJHbFhQc3ppZ1piNVJEemUwZDEwb0VONkJOYzM5dlEwdnZScTYvQnc2NnZrZkdRODNqanNxZGpiMGpRZHd4''@;'; put 'put ''OU0xOVUxZjFWNnFTdVI2UG9YWmcvRlFOYmVEYnhXamhveWRhVWxKcU9HR2hXS1BIVnRDUC9BZzNKVUZncUdhUGhIa3ljQmNldXU0NmI3RHgyNmYybm8xc1JnWUxHeDkweC8vNW5leHNYQVlPTFdJZlBCKzVlVzdqdllrdXdMUjRhdUhSaTRiaWdTN2t1MndMNVF2SDJaMlRkTzVpM2swTVFjWXhs''@;'; put 'put ''TlpwUERabkthbmFFcUxVV1BRcGgxT0MwVFlCMjJ6djdxeENNSER6NXk0bGYvT1hGOWYvODd4dDlQenM5OTR2RGhUODd0ejV3YUhyNDZJeG5ZMnNHQUlYMHduZ2xGTXhGRnNsRjdSck1BdXFWUWJZVXk2OTdFdzB0ZzN0aWRzcHl6ZXAyUDQ4dWxQOGNma2tUOEJ6TDVsY1Z2TDVMemkyaEQvd1pV''@;'; put 'put ''a3drcC9WTnB4WHBWVkQ2OE1DQUQ3Wm5KTGRhclgrbDNoWGI2MHFMMFhkNHAzNi83WWIrOEtKVkpnTXVBaEVwQ05GcG1QR3MxaUJFWDkwK3BKY2pFSkdoL08yeWFuN3RYWHV0Ry90MjBlU2svL2pOY0Z2dUw0YVhQSERyMG1hV1JQNDhOK2s4MDlkRU43SXZzOHorTnI1WitIVy9qVzlpYTZBdlY4''@;'; put 'put ''eTJzOEh3Z3YrWTdHVTdEbVlCc01pNkRqVXJYUytOREZyUVpsNWl1RnI2UzhKM2N1U3pkc2J5TXI2SHNoS1BTdDhsNTZUWHNnMTVvcThkWmZKTEdGVlMrQm5mVHdORVlYVjZtclFEV0NmcmpHNHovZ0lxWWFjOG9taG1zWkVrQVluSXp0QmNoaXoyb2dlWjVVeDVtUWJuc3NldTlnL1pkZGMyRHl5''@;'; put 'put ''M0wzZVpNb3I4NnVhY2J0RlM4Ny9KMnZzNFo2T3BEYkoxVm1YS0RYa3VZaHNJc0FpYndHS1hkWnVNNk1XbkZTUVAyZzJ2b24xbkdmYmRJLzQ3cjMvbGZSMkM2MHNmeGl2UjE2VGJjZVB4bDNpOElZdkNYenlNdHRSSFpwR2x2aUc0K1I1MFdhYTFXT3VrZzBFblNTaHhTdzhvaTBOemFlZFllZUFn''@;'; put 'put ''SUlEY3ZjWnQ1T2F6S3ZEemdGUGl0SnRpQjJlWGYvbmFaZnNHY3V2RGZBdkovVG45S2JybFA4akNqNDRxTVJ5UmtTNCsyWEk4WXB1Um4vZUgzTGk5TForaVd2RUVNYTVQdzlRYVZ2WlIrZi8vL3c1ZmxBZ2VvOHVCOVM3Mm4rL3RQOTNLcEk0c2JlTHAwLzhHRm9lc0dCcTRkNGpUTGRBR2wxK093''@;'; put 'put ''TmpQSUhQQkdZUmJBcGdLbW9ZbDhBQnlXV0ZqZ3NCVTRDNTNXVUpXT0JyKzlPYm5qOUNzaTJackYzaUVZOS9UUXM4dlludDIzTC9zb09kK3ltc21zdHZ3R2p3MjB0dzlJYjZweDRLQTJmQ1pCQTloRUsxQkhScUJod0x3UG8xRkZBWjFPWjlnWnFnK0ZxZkJGTUFkeGd5S21NZVIwT08xdTJvQVY4''@;'; put 'put ''dnVRZjdoMUxIcFYrNUtDSHVsWFBZZGFsK3R6K01FVlZ6UjA5ZldHYW5KNGt2NlFtTzZiNjU5UUlTcVBwMEtZQytoTVFnTmlpa3U0akxSYVdhVEpMQTVPc3RWcXAvS0d6dFFmQnIvVHlqQ21UY3E0SXNjUFRwdy8vZGYzTERPVVNmMlBNblRoVzA0NS8vQ2IzekNzdllzaWpORjBhUDIvU0J0NUZy''@;'; put 'put ''d0IwRkV1Si9WSENWYWhpUVpZVlRxcUdvV0RFVDlGVTk0TERUZVFiUVNlVzZhbGo1M3FXTDZ4YjNSaVlmeHdjOGNWZmFQWHAxb2p5NDNCZGw5b3NPdlVtZGFySmt3bnNnYzZJZzF4cDYxaHRLMWxmeW9SSGEyT2xNYzhsZFVlaTJkdXBtMS9pczZ6Qm5BMHlld0tIaGZKdVhZOGtDR2J5TmdQdnAw''@;'; put 'put ''ZnVNVDR2MG4xdnl5RGE3Y284KzR1b0l0N29EM1l2WmtLT1ppT3NYcHBUdVJ3QkJ5SytxWENpdnN6aXR6Q3Z0dXp5L0g1NXVhNStNcm9iZFBtc1R0bThmdWwweDBIbXNBMHdIZEtWOC9lTWNibGpHSUQ2ZWhZV3VhTGdxU1VoU1NYTkdDcWMwbGpvQkYxRHliZms3NS9FdjdSL1FHR1ByLzJIVkxQ''@;'; put 'put ''K2dLdlFGUENlQWo2TWxKWkR3S0NudUV3MWMwV0R4TENWcVNsbXBNS0hmZ24rRTNZWDNueXdZZFBQdnpneVg5WmZ1b0xWRks4VHN6c2E1TDQxMzZJbEw3SnA1ZzhBM2xvMEVIWGhJWmpxWTJHT2EzWmJEWXJ4U3ZNRXJvMHNON3hKN0R3anE5OTdUb3NTR3ZYZiszRjYvQ2M5TmRZbFA2QVorSFRI''@;'; put 'put ''N0RJK3k2QXZqOEdmZXRSZWFaVVIza3ZKOWhrYjl6R3ptN2tQbUhMcXFSZlhmLzMzem9qL2VZb0xzQ2ZscDdIUGRLaTlKKzByeWJvYTdlaTZ5ays4eUd0bkgrZkMyblpyR3pHYWU3bWc4SnZ3dStUM2tHS3BGUDRnMnYvTmtISTRzU2F4UFg5K1BxN2NULzU3dHYwdnBKQVdQQTEvc1puUHZNRytl''@;'; put 'put ''N0FXaHN3RUY3Ly9mb0YvTGM3eEJzRnNHZjFsK01GSG03RUtBcmpoWFBqS2ZFd2FvclIyQ2dkRCtYSGM0T3dUOEZYOUlFSGZ2LzdKdkxWZ1RmUDArNFQrSlA0QzV5Mkh0Y2Q2Y3U0UUtxekNDR01US09scCtVb3grTTYxR2RQMnYxaDBmL3Q0VStPbnprekJ0cm4xOS84SnAyenRINGwyYjMrTkF4''@;'; put 'put ''WHhmcllJVDVMdXhBQmdZUk1yVDA4Tk16M3RZdGtzSnU4QW0zZHJLMFpXbEpwZjlvR1BpQWZOZTMyZHgyNGRvaDgyZkhuM0tlckI1dmhEOFFLZkJGQ04yWWN4VmpRdUVFUldNRnlyeWpYQ2pxdEJudzdCN2huVlFDczFSSHRLdk05cVFGZmt0Vmo2b3JKOU9nQnUyY3JDT1VxQnFlWVpQTVpwOGVE''@;'; put 'put ''a0Nma0NYb3JZZGlTUU5Cdk53QlNrY3NKV0ZVSHBuS09yQTNzTStYY0N0OSs5Y0d5cGZqVThmUlN5OGp1enNIT3FjRFIvYlo1Yy9kb2FxUTdRYXhuRDBrdkRvWWplN09KaWJxeW9wYXh1dUZHS1o2czczYzAxZFRFK1pySFFONU1neDZ5Z1pmeTdBV0xFVFFRbGxkWkRzUlZsTTFGV0Vya2NCcGRJ''@;'; put 'put ''dWdpOEZTOUFPVGRERVJOc2cyQk45bWw5U3FIZlRzREFvenF0V0x1YjRDWkIwL1ZZYmNqWlBmWnZaNFNtRGJvbUUyaHZEQmxBS3NTd1ZQYkI1KzdvclB6aXQ2MnBZcERoeW9YMjl3ak5UVWowWWJobXByaEJtSUZGMkg4aHY1VWZDOTVSdnB0TENXMVJLZFRxYWxvZENxVm1vNXltb29BZlVoQUgr''@;'; put 'put ''V29NUk0zQWg1S1REREpVbUJ5SWVjdGxlenNMYmt1NlMyOWZ0Tkk5c2JocGtPaFhuZDNvR0VpR3AySUJucUtlOE9IbTgwak53NE4zVEJTRytvc3JVaE14eFBUaVVwUFJ6akM5NC9hRWMyNS9iTUs2djJqaUdSN3c1d0I5ZjVaOHZ1M0dZZ1JxY2pDaHB4SWxmMmpnSVdYQkdUN0o3K2wwTXg0Mmdp''@;'; put 'put ''emRmOXNJYitWN2grV0NUNlBKQ3ZadEgraytWREZVbHN2MzhURnlxdlp6a1haTHBKbjF2cjN4bFA5TjR5UHY2TS9GY09XdGJzMjd4K04yYnhPd3JCL0x0aVVUS2FEMEkxamg2NWd3eEJCUTVaek01WG5MeE9kR3l4Z2Q3bTdyTFFFbWpyQmo2THpEZkJ0VXh0ZlhqcEhuZWlGS2VPRmFYZW43NXJt''@;'; put 'put ''b2V1SCtzOE9qcDlzazQ0WjUzdTY1czI0eVRDYUdhMHF6Z1FpQXplTWo3NWpJUHVlL1QyNzhSWFpycTRzcFRFdmZGc2szNEpoOTJhTVJWaW50V0trb3pFbHVsbGxTS2ZUTG9HbFZjeUNFMmhCZytWb0lpZ3FUNllVSEFNZFNKM1ZyUy9uTThhZ241MnZpYUtINndnL2xkczhGTWJwVWVmODF2WFhI''@;'; put 'put ''eHdmSDIwdmEzSUc5T1ZGcmtxaW5aSW04T05UblowVERtdVAzdVQzVUR4RzE2ZElJK0N4RXRXaGF6T1dpaUtpMCtaanM3S0lCRGtIYWtOSFZxbGh1Q1JxaU16ekRLbDJKaUp6SUZROHdrd3BJTm9FQmlLeXFncWhxcnFxMmxBQVJxd01CWU1CS2lLeFZlWjI3clYxNEkzRWt5S3FzMy9TMkh2TmFO''@;'; put 'put ''ZXBVTGhzTnJwbnFYS3h0ZmQ0UjhmeDN0YWxDcURIL3Y2NXVYNmlsUkk5cTYyaHloRlB4V2h2dGo3ZWRYSnc4R1JuTXJKSHVtYnZ3TUQ4L01BQVAvdWpockNWeFNWUFBtVmpKaFBmR2pkaWJBUW1NWXRGbGloV3NNdzlidTdzYjMwTmIvSVBXYlJEZmdPTVVzQ3RQYXZENzZCaEFTcmhZTmZrUUpw''@;'; put 'put ''VkZuTDQ5dm40d2Q3R1VFLzQwS0hpZWRpVzVMNVc2UXU0dVhYWTIreVYvZ2FrMlZxMUxPczc0UHVUNUIvQWpyS2dBVDV0Vnk0b1hVd3B4U3JicVo2TUErdzVUQTJOVmRYamVXbzZXQW9MekN4U3JkMFVxUmJCQ2pqZzk1Y1UrLzNGaWNPSHliNUFjYkUvNEM0T3pLejlrWTYvL3RMNnVEeCtLVHFT''@;'; put 'put ''TVZwQXR4WmlEY2xSdDFZMUYwRmdwS3M1b0FQTWVEU011aEVBQ0lpZFBtMThDVEtGUmRGTHpTVXVweHhIRjdmRTBXVkhnSnJKdXR4RVQ4YUxDa3I4eFJXSHh6cnlFMzd6UDQzNk1hUGZRd0pycjNidVl2cytDQXVnWjRZbXRQUUZBM1BTbEoyM2NnMUk1NFEzN0xtVmF6ejFDOWh0Y0hZWDJLOGIz''@;'; put 'put ''c3pQWDdCWjdjd2l4TlFZWWlvTVhPbXU3NTc5OUo1RGg5YXV4UjdwMzc0L2RRNjJzd2ZyT1IyaXo4RjhCTlRPcDJHaXdRdzVJQ0pQd0tTS2tYalliMG9BYlg3K3lYelFaT2pRSVNvK2tiSk9vUTk0MjAvbFR5bkcyaXFNV0V5Yk1yV0xDaGJ0a2w3VUNWcXROYXVocDdac1dTQjU0SGY2VmdkdmlV''@;'; put 'put ''NVhrbnM1ejBJMWZ1VHpXKzErdTk5aEFQbWpvbVRkaGc5SkorZGUrRTcrWmpwMnNDUGVQTUMrSFQ3c0dJczN6N3B0KzlvVUNtOXRHZXBOU2M4cFA0bDJLRnpmSElzMUl4V2ZXc0cvSHJ0Z05SUE9xSFFOZHVaT2FhazhzcXE1a05IVUZ2N2tUT2hBZHBqOFppYlVpY3FNWlI1czJxMDdmTGg0VHMy''@;'; put 'put ''RG5RM1M0MFNiRGNjVS9UTUtjOW9VOXloNXk3aUg2OUp4ajlkdnpJTHBNSFRqQ0JnS3pISm9pTzZLd2ovWmNCaTVZUWplellEZEVKOU9jQU5Dc2YybXdQYXpNdHZoNkdiYmoycHlIYmd2d1B4NUE0eGl5TTQxUFpNS20yMURGY3pic05NVTlQMlA3RFRwdjhuajg5dlphZFFtbWdLYlNGblhScHNv''@;'; put 'put ''djY0U2xXR1NWWFFTczNLc20yeW1EVENYc0Yrc20xWFFuMkMvYU5jbXNDNXZ3TXhML1Z2dFQzRGI4VWxZbHduMVhERHBxS2N1cjhyS0ZDYllNdHo4Wk1hQVU2SG92RmxLN1lBTElHV1ltTEUxSlowS0NiKzgzTFBybUhqNE1QN0h0cG5KUHVtZmlQWXdqN204amwrRThZTFUzblZnZ3AzZ0hjT3dJ''@;'; put 'put ''UHh5a1plU3paR1hJQW9FYWdQTTNnMnBRaTlZc1RTNFRxWnhGMExGOHN0bkdxS3pjNUdtNW82bFBjZjJ4QS9YUmNZR3FwUHVoa1R6WVB6RWpMazZPTmdWcktpcXNwYjJkQXhNVjVVTng3eGxqbUtIeFZyWkhodWFvL1lTekhHUmZBanNwV2dtNHNZNkd1WUZzKzVXcWt2SUFqMDBBQ1NBWjNhQW0z''@;'; put 'put ''TE1Cckw3cUJFVTVPNlZWYzR6QW9sTEQ3Q2EwbmpSMlZUV1BqbytmdkQ2Nnl0ZFJlWDZFcXRqb2hQSHB0Ny8vaW5wVlkvZnBPYzVTSzhEUHJWTXZ0aGhRSktUTHlCYVpJMnBjZ2ZkeWxOWjhPYzlRQzVmUU1YN1dleGZaUVpUUmNWbVpDVVdLbGFhRlNFRHhQSkhFQ2tnWlBDdzlCSVZNbmhDenNr''@;'; put 'put ''aGRVU3I1T1Fva1F6RkJyVGFtTWR0NTZFWDEvRjc3em4rVHd0ZytKekFkMU1GamNFcVJrSTF0TjhhdzdGZU9vWlR2bnpOelZNM24xMStkTjhOTis2REh0K0piNkZmYTMvRU4wczM1Mk5OTnVpYjVZQVpSUTNOSjZHZFl3eDlDMFIxS0dDejJTajFlTU9pM3g1T3V0TkowWTd2ZTkvN1QzejF1WlB2''@;'; put 'put ''UG5maTJhOCsvenpXcjMzKzgyOUtiOUIrUzlaSFNUMzBhNlhaTUNZOWdTbFRJNEhJWFZQaVBFRG43bUhFYVVWRk5vYzZMTmlGQmJhS1Fpd2VyM1dWKzBwODV0TFhMbnZnazZzLzhleHVlZEkxV21SenBZbGVPb28vdW5heEw0UDVXa0I4NHUvQm1EdkVlYXlYanZNa3NFLzZDYjVIZWcwSHBMMGor''@;'; put 'put ''TkQ4aUhUUFBPdTNlbjB2UGtLK0NGS3JPaE1zWWNZbGFHazg1UE1TbXVNR0lMTXlQMk0wWVhWUi9VMURnR2xRUmlsZ3N6Qk5LSFlYRXFlYkh4V0tsTXRFYk41Zmplc2JVeEZjdlRDaGIydDE0bEFvSE1TdWxqYjlQVFVEVGJmRjYzcnE0dWZTQTlYNmJvTzd0dm85RGVtQ3duVERIZFcxeFladUdP''@;'; put 'put ''ZXk5UXZvQ1JZMzJqay9EbXlJeTRhSGxWdzFtbis1RjYreWRRQis5Q3p1UTArcGhud1lEN0l1WnVYVGU0UW5hTzQyRVIxMWJ0QnBZWjZCa3FZWkpta1FEeUtRUDhnb1dBOXNUMjFiaXd1bUhncGhaMnViZmhkZEZCV3UxZnQzTFJ1S2E2dnZhRWdYRnFRYjNsTmQ2elowNjZzSDB1Zll3bTVMOTlm''@;'; put 'put ''b2FlNTVDNjdHdCtGSHJTSXVXRitYZm9rTWp5UDh0UFJMbGczQmM5OW4wTGVZYkxXd1V5czZRYXFRbVZIT2NwM3M5THhvby9ITERFdWVhQWkyVGZKQk9YbWc1VXdKbUZCS3ZzQmFQMzVOOFQ4dllJbU1BUzk0S1dZcXlrdEwzQzZIdmFoQVM4ejhmQXBHblpiVDdrSGNsN0ljT3A0MXptUFhORitj''@;'; put 'put ''Ymlyb1RuQS9BK0FqZzJyQlA1eUtUblVjYm0wNTBqSFZzTnZiRzJodEMvVktkL2MwTnZZRWE3V1pQdlBZVlYxZFY0NFY5SFJxcTcyZHRTYnBMMHlSanBzUDJQR0M3V0FiejRGRVpBeHN5VExVbThuQVR0RmtJaVRTWEdRUkQyc3hBYUVxRW5ZY3d2d3ptbFVraXR5NVJ6enBxOHhxRHdaQXMxRGpM''@;'; put 'put ''dWowcHRJc2UxTWQ3TkNWWTVwNlJzYldmanFVeWJTc1pBYXU4d3dXVE1TYmg1NTdibTZ1b2ZhaHdYTjlsN2ZMcDJ5M0RENmtqczI2VUV1bXlZR1JBWStBaXlreXQyUkZod21ZVFdER0xSdFpqUURQZVhNNTdUYWxCcURJUktzQVdIbUZVMGtvaFMvRzhQalJlNzd5bGE4Y2hhOTdXRFFYRHc1bUIw''@;'; put 'put ''K2NnRy80S0EzcHN2M3FJcFA0YXZJY3k5OUpzQ2hpbUNhdEF2Mnl3UDZTVnFDSXdoUGJaUERRQUtQYSswaW9QaTlXVnJwZFZaWHV4OWpQS2hlWnBEKzlUdnFNL3dSNnJVRkovSC93M3hYNWNKMFdGUW00RHIwcXh6WEg4UzNrcnJjVEU2VjVPRjI0UjNxZTNOWDlkbU9pYnRGLzRlQUhoc2dyRGxs''@;'; put 'put ''dUI5YS9BWDdQbzdEVC9nejQ0YURwRUxtSnF0VjNVUzNHd3Ryc1dDUEV0QUpXekI5Nm1FdlBOd29ITG10dFhzN2c4ckd6WXpnUW4yOXQzWnRZcXlJZlhUc0tmWGVpVjlDWFFIV1o2Sm1pU2pBUUtqSW1WTW0wVFNyc0hRb0VTa3ZoNnhYNDRmZkRSem5ldTk2SjFxRkJNVHJEMW1ZQmUwVmpONUI4''@;'; put 'put ''Vk1KTW94SmczSU9xMXB5a1NVUWd0RmZ6VXZVQU8zMEJDNUNCQUdIZHRCTU0xOW5GeUcwUEJBSlVaMVBNc1FRTkZvNVE1VHpTV3BOWHExc2pKVEdyczl6djhBQnRXbXhWN2NYNlNLZzgyRkJVRUhVN0xJVTJvMjBzemVwallyRG52Mk43SHRIUlBZK2c3ekU2REsrUDRIOWxzc21MV2pQcFNxZkRy''@;'; put 'put ''Q0g4NkkwZ09sRkdqRnhZZ2VZNWdHUjE1NjBxZHRtdE9acEVhbkhGVTNFU2FiZE9NVmxCdHVDa0xNRmltL09pOHVKTXVtcHpaaFNiT3p0TEVtNHE4dEZxSHF1SWV0R2ZvYzhoL2VNRVAvWTVKbVMzZ1RtR0hUdkFuRlZnc0lnZTNBSG04aHhNQWZyb0RqQ3J1YkZXMEwwY2hteUdlVG5YandsOWN5''@;'; put 'put ''TU16eE1TWGdNWlpBRlRmekRUWjZYeWgybDZjTUpCOHRDc05MMW0yUUFDVWJjQWRxWjh4cVBsMWhKejVXeEZObWh0a1lXU0NTUWtWakpIVWpTWkNLd0NjRkd5U2dhSnRMYm5ETDZUTkV2aXQza3F5VjEza2ZPTDBvZnhNZWtqTFBlamsrWHFwRERKbE5iV0NFUWo2aXFBTk11eEJwZlpnRzZ0bUFo''@;'; put 'put ''YW1kenI2ZEdzZ0UvQ042UTVvUVFQWmZrdE8ydWczUTdBbkQyRVJnMm9BZHRBR3lHc3VlbHR0NnFrOVVBYldnazN2R1d6VEdSekM1clhSNDVzMTVESC9Xa2NJWVVhZzdYQWRsNG5WVFU4Qm12QnNtall6SDNibnZjbThjdUxnY0dHNjNvSzlaV2JXZE05Yy9mTTVveWx5VWk0TDlxczhXN2syR2Jq''@;'; put 'put ''a1UvTWJjeGdRb3ltV0w0UG8vRnFtUS9leVdnS3EyaHpNOHd4OVBnT01HY1ZHT0NEYTNlQVdjMzFzNEpPY3BnOGphOWZwRGt6Ykt3SW44LzYrN2IwQTZJQ0oxUXd4NUJuTTh6NnJ3SEd4dVlUNGZOWlA3OEY1dDhCcG9UTmgvZXpzdjdaamZNQmZxcUZiOTluT1FUbE5MdDhvM1d4b0dkbkRBYVZl''@;'; put 'put ''V0d4d0k5eVN4bXI4WE5Dc3dMUU5jWjhISUU1VEVtckVrTUEza3FLb1BEeDEzbnkxOERBcjZaNSt0ZXorSmxjQ2hodVdNVCt0VWQ0SXRpTGkvOEFPR0Q1TFV5bXhHV1pjdThXUExHY0RZYW5oTHkzbjlraWR6YkRITU94SFdET0tqQ3d0MS9kQWVieUhFd0JlbklIbU5YY1dDdm91VTN5aStaTTNZ''@;'; put 'put ''RmZKUTVRQXJvbmRBakg2b0poNEl4d211WnN1dkdIejcwN2MrNjI3dHZPZGI3NzNCM24zdDNKUG1mZWZRNnhlalVsUjRWV3VkYWpjN0ovNjhJYVVsZGJYbFppMXRHVWJLUVZSanpzcWFCNml1SHBQRzlReklJcDlMamVsZFZ0T0VFRWcwSjlwT1RpUjRJNjlYRmZwaENZdlQ0UUNkbkRkbFp4b1dS''@;'; put 'put ''eGg4QTlUS3N5VUpNaWNya3hENDBqWHU2RlhVbnkxZVRCKzViU3E1R0dJL01OamNEYVRVY2o5VWZtSkZSWmhrZTdzc0RoT0hPNnY2Sk1laUtUSmNVMzlDM2RmOUJYbVZxSjM5Z0h2TzJ0YkZ5UmZqenR3emRURHBmK01IVGRRTU8wWDdxNW51S2U1V213Zlc2V2FlSFJMZlN5R2VZWSt2RU9NR2NW''@;'; put 'put ''R0tDRnorNEFzNXJyWndWOWFqT2ZjMXVaamRVdWovWGN4bjQyNWU4MFpPcUFPclFhckYzV1lmbjRLMWVFQ1pyTDRuSlkzRVZ1YThoYkpQS3NncVFxMnltWXkzWmFlV1pMdHRPWmx0Vk05MHJMOWQ4YmFHL3ZsOVp5c1N2aUpWOERTVFgvbEJIc2Rob3VxUWZxcUFBZEFFcE1vTWRFK1hSVHZLRERj''@;'; put 'put ''dGk2VEU1cVhNMEJxbDdQWjR6MmdEZmdyZk96WTYxY2pGUlVwcHBTY28xU2lsNmdjZWF4bGlPWnpPSG1nKzAwVzNaM2U4dndjRXQ3Sk5uYjA1anNYU2JtcHVsb2RMcnBXTHBpWDNQVGRHeWU1c25PZEVhaTdaMXhtak1LdU9aNUFxOEFydnRBdnhQVXU0aTJlUzdBSG54QTlmeWlBby9GV1RYOEM3''@;'; put 'put ''bm5CUVBxNTgvbCtsK1pVRDBYS25Qd3BoczVuOEp6NFVOZ0gwWlFFbVZ3TjYvcExTc0RMSHM5WUkwNHNWSGZqSFZHQXlHaWpucDJ1aEc1aUhkSEdCT0Z5YjgyYlBONmZwNlBFd0hDb2xXR3EwaVBkS0pldDF4Z0lFcEdma20yMEdRV3FCYlBKdzNRY1pzdTJjYU1jeTJ5aGRoa1VnbU16T2FHS04r''@;'; put 'put ''TUZnNi9aUmRnUmxRMU50YlhJOVNZYWV4cWE2bFAxaWRpVWNCY25UM2dEd1FEUVV2T3JGRFMzTGRrWVBEemlVMEh2aUJ6T25EdXZQRmxmdnFiT1JuMFh0bTdkRUtWbmpIWHZWQVNXRzNiZkNJc2ZhQTNUTE0yZWxyNDJYQkxJdEV5TjVaUDI0alhSeEtxazJMcERuK2JQK0JvcXFtTnNieUVUcGFY''@;'; put 'put ''a0VJUFpjcURXS3RwREJHZE5sVktrSzRFQzZpNEVEYTRBTHhtbld3V0JtaDVBQUZqUVFjY3BXT3N4MHJkZU5MRkFaRENIcXpZZFVFS0MzQTNYUm80NDlzQ3h3cmdqK1RBdFJUM3hoQ3ozaGkzQm5SL291RkdFeVh3RCtiaWxxMkdXM0gzOGE3dHNpY0NkWnNOdHhiRDJPbWVMZGtVbkw5NGZnRGwz''@;'; put 'put ''eUhPMTh2YlBhZDgvUkhWODRzS1BCWVgxZkRQNWZwWm1XSFAxNy9HenV4b1A5L2cvZC9PNFdsUUxLSjZmc3pKNFg4R3o4MnMvMi93L2gva3ozOE16KzJzZnc2L2NpK1BMOUdhcVU3eVRWUUdWdGJlakwySTFRYktscFBEYmpQaW9leGpwZlFZVHduZVd6ZGtsOUpEWHd5YUFKTlY5V053ZDh2THky''@;'; put 'put ''dkxhd0srVUpEbTJ5c3FXTkcrN2hBMUtVTGNwaUJ5OHFtTzI5by9uKzQ1a3gwOTI5dDJyT2RBYjNqZm1mTEpxb2FsL2dNVlBRVnoxY094Z1hsNjlHSDUxTktlVzRaN3o0NE9YZFUxUGpyUjJCc29yZ3luNjNyTDEzNjJsSTJPMWk4T3g4Y2pGRS84VEkvS3kwa3VML2ZtOFQzSzhMZWI0L1gwZHMv''@;'; put 'put ''cHZqMmdlbjVSZ2NmaUZXcjRGM0xQQy9hcm56K1g2MzlsbWN2ZGJuUkVybXUyZ01YY2xnSHRyRlBPekJFTFRTRU5rUDhza0w5MlNRUysxRTR3ajlCVFZBcmFWWWtrNnFscnJqNUdCOGRRWGFPRXJjR2dweVFRS1BrRnJhWDZsdndML2xLb3RDUVlMQ2tOZGMwL3IzeUVPU2xuakc1VWhXcHlOcHNE''@;'; put 'put ''YkxZd1FMbE5ZSjNwRlpzTm5ncXFwOXZhYkNYYjJXenFBN0x0YkRhdjExdmpyUTdhd3JZTk5wdmFaS01XbThadDV3YWJpeHBzWVFFRVp6ZzRjdVBRWkUvWi9oNWZDQmg2b3I5c2Z5OEl1NS9VeEtLN292ODhFZlhDSi96Qi9ZbWhHMGNpVldPaGhTU3djcjEzL0xkeGJQSUFOMzhSMkxrOUtyM2hZ''@;'; put 'put ''ZnZHejJqby9zOXh1amlJdG5sTzZlSkRxdWNYRlhnczdsWERQNWZyWjJVM2Y4N1BIbWcvKytWKzdsYWRxL0tjckEvbnoxVzNUWmZiZXJhNlE3cmN0b2V3MjcrV00rZm9JZXpiUElXMS9zOVBZWVhWcmVseU9kdzhKK01HY0RhSlZER1hsbHhjNWlqNjJCYS9odHMvZCtYc242T0RhTHVZRGphZysz''@;'; put 'put ''Wm9tN09kc0dHU3k4YlM5VDJDRjJ4Zk4vVFNrV2t0d1VCOVdJZkppQjVNYnRocXNzTEtmZWk5TTBEUFNsbWRIWTBXRnhlWEZwY0dhT3pHNGFWQkJ5MlBvYVg5WVY0S3hsVitJbTBpZ3RlZmlIZTRDOXB6ZFdIRkZlVWxaUmJwemp2dnFtaE5CTXQ0aVZpRnU5aGp4WjJzVUV6T085MURlb0JuNlUx''@;'; put 'put ''Q1QzTUdMUE9BNlZXS2llQ0FxZFZIOUlKZUZESFcxOENVbVdXMjNXdXQvRnJtNFJyb1dkUVRjVldwWkM4QngxcXY1NUZDdDNxSm5rejlWbGhRM0JhNUFkb0VQNSt4MXRiV3Btb2JRd0U3R0UxaHIxRXN5NkVsdFlQTjVMUXFpQXFwTWxoSkQwVlp5WllrMXBXck9lcCtxeVN6VWdTR3kvbzNKclBT''@;'; put 'put ''L0ZhR3pZL2xrMXBsdi9odTVndUZaRi9vNTF0OEtwN0xTWGwzUU9iZEQ2cmFubFhhWWoxNmJJZTJGK1cyQk92bk9IMnkyalhXTml5M1BiMnR6LzViOGd6QURESVlpOUFCSnJrQllKNFdNQVVDR0RsR0FwVC96bHlPNTdVZ1Qwcmh6V3NYYkJwaTBDdW56U0dxVmpBU3RHZ1pOZ2draTE0djU5RFJV''@;'; put 'put ''eEYrTVFWUENLTFNwM1pIYUNiRmFSTW0xZDFFRVVNYld4UmVzc1VHNER5Y1RpZm44YXFCYVR6UDV2RjRhajAxWVhvaUgvTEx4elgrTFdtZ3lrVWdhSE0yeGJXWkRla1U5OTkvS0NQOVVwMVQwYi8yakNvbjlHT3Q3ZTFyWDkrUVZaR0xvYlhrWW1oSDRmOXQ5aHZzdWJ0eTl0elJjYlJkL0EwYjBY''@;'; put 'put ''ZDJhS3ZZZ2dMQWZKSFh5QUhQOTdFN0ZnWXpmVVdnaUsyQU8zNkdUTFA3S2VPSkMwZ1U1WUF5RmZLV0xETWtnREh0V3VYWXplR25WVFpXeW9CS1BhSmY0VE8zekpHcUFzVmh6bFVWVEU1SlR5alZpb3lIbXBtSTRqV0c5S3h5aGVYS2hsQTllbWZHUnIyS0VDWmFzQjJJQVd3Qm1nbGZCdlJSRGVh''@;'; put 'put ''K1JxdlRMTk5ncmJMajh1MDRMR09HU1ErbXJZSUtLRnMvUHJ4ZEM1cW9XaFFPaCt2REVaZlBIbXIwQjFtWVY5eTBJdDJXdEZ2cUd5QTU5ZmJIMmNMY0luVzZnbzBwdU5YZ21VbS9rYjJ1VW5laHNuS2JGYXZ5Y2NFSHcyZDRTdTQyc1ZqOU5ySFl6YjZBWHZZRldLMG1vNUZhV1dkOWVVdGJuazlM''@;'; put 'put ''YVdTRTY2eFRjbHZwWjdUT2s3Y0YyckdRVXNUdmZ3QjR3WThLVVFOcVJmZGtIUFdWUkM4cTVRb0N2UTRFRFhINVVHZWlSeFNDWHJOcXdQbDZYbEhVTG9FYnJkWHkwKzBsZnJydG9aZDZiWVUyWXAzT3l0dWdUUzNBbVk1R2FZUTIyaHB0U1NVdERaYUd1aHEvdDZ6VWFhZVIybUt6WXRyUys2aTRO''@;'; put 'put ''ZXYrRTlKMmNXVlZWZGdmTURncnExei8vWlladkpOMXZySzJocEpnVGFYTFZUWDZ0dEo1d1pkNkRZaXhpdkUvajFrZlhmL1VscmoyOXdDbWxQRS85N2VPZm96SHRPTHJlOURyd01NT251ZEFzSVBuZ1NoWGVmQWNJSzR6QTE2WGw1WEx5Q2R3YVZva3FYRHE2NVJVTGVabEhXZFBxdXNjZ1FMeWtH''@;'; put 'put ''d3IwTnpaZFJqckJYWVc3YVc1NjA0SDBRaGVKakowcW8yVlRYTkxqcU5ZMGtKVlJXbXgyMlVwMkRZdjFxNU15SzJlMFNINWpIcVl6cXpDYlQ4YzUxUExuMVd2VmNFc3kyTW1IWDU5N1kveU5JRm1hZm5OVS9rekFKQjN4azF4U0paakNuNndObGZIYTkxU3h6dDQrREJOY29MK1pvQUhQZ1M2MEFl''@;'; put 'put ''MHpuZ0EveXYzbWVGNUJlT05jZm41cDlselZqdkxkSDlVMXYzV0xmd0dISXJyaGZjQXpJUU00MElYT013RkJZYlg0RDZqOUFQOVA4ejBORmJwYWRyUFlRWXpJY09jM3dqRDgvbEpMOUJJQWMzNE5KdU1CbkMxQkQxUnFwRTNGZllXb0FKbnJyQlhURkVpU1R0RkorbVZHbmJ0V3JuMTFzVkZzQUVY''@;'; put 'put ''YXZDSTlQUGVoZDRmeXZVQ1hwYVhuTTBVbUl5aWptcGdmVDR2M1FRZmkrUjZ2bHhhY0w3RXo4TitVdzViNXVlZmRMTDdzekROQzVUSHg5N0pRMk5qaHlieHdScnBKYXdMTDRUeG5QU0RtdHlaeVUzS21Rbmc4UmZiNFJwODlsZGtuNTNhV2Zkeld3bjI3MkcycjNGWnR2SFk2aEE4dHhLckFnODRm''@;'; put 'put ''U0ZuV3ozTVpIQmNsc0dmMzJHc2k3bjRnUDQ0VXAyVHRPVE9TWTZpcDdiWVpkeHZ2aXZuNHg5ZFFOdWQ1K0RDeldjc2N0dXBmUHdCRjE0bTU2R0NzSDRWOXQ2R3l1bTVmZTUyQVQzSlhTOWdvS1hVU3E0WTg5VEs3V1V1QjhzcjVZcTlKSDljbkV1dWNHSnIzZ3pxNDZwOTdma0Q5eDg4ZFA4UzZa''@;'; put 'put ''SEVZWHAwZWJxUEsvZTVqeTh1M2J1MEtKbnhmdzJjSFJpNGt0OUZDSE1XL2gzME8xMVhDNXJLVExxeFhtY2d0QUNaaFFlQWhqUmF2V2JaYkNBNm5SSUtNSWxHUVJVTVNDYjlmb1NTTGNubXBwUS80WS9YMVVCM1huc2dGQWdXd0x3M2hsSHpNbDZsdGpXYmJEcFpoUXRsUEg3YWV6b1lQTk16ek5L''@;'; put 'put ''YmUwNEhBeWU3RlRVdVhhUEtjOGJYYnFpcjZXeEtkZkhNNTQ3R1ZEdlQ1MFNkL0l5dnBKcGQxdXZIMmQ2bVpQcjk0aGE2NERtM2RHK25lV3d1Szl0K1FLZkhHZjJtWkRxOXlPR2xuOUVjWFJtZVBvL21iSWpqakg1VE12M2V2TzFZWnhqOVRuUDZ0Zkd4V08wem0yZVRQTStQYktGOW5xdEw1em5E''@;'; put 'put ''NTNrRXlYWFRuYXh1dWd2OWQ4WVZqNVdYYVhUNkVxekJ4WVZFMEJTQXVhRFpQbGNBek04bDBQa3U3dmRwOGRaVGY5czJ1UUp2M1dyYlhJRzNhclpqcnNBMkRYbXVnRGtZOGRQMEhLL1ZBRjdGSlVMTm9iZFJIazdhcnIxaW02Q3orMzJybHlvWlAzNVN0em4yYkR4MHlSSnllYjlZem5VSFdnZmpD''@;'; put 'put ''b3U2V0FYUml1WEFrNlcwNEZDOWM2SzhjNUdOT3llS3VpVkVLekJRUGlLMEpjbWpmdFBHdldXanlpMjdEYnZ3RnEzWUVlTjIyN2ExSGQ4MVU2QzJtbTJhSHZ5WlM1MFA0TGZLTE1jdkhoemZMc0VqdmhUZU1kMTgxNHgyYzVhSE5seTVjLzY1aWpmUEtyd0pmTDI0QTI5ZVZIZ1Q2K3M0YjlZQWI5''@;'; put 'put ''SzdBcXJRRnpNV054YVF5d3pLd0VUdklwUzNGZ0ExN0tTR25ueVNHMmlRVDA0ek11Z0pzL08ySE5oRWFCTU5QWWg1TzIweU5adkE1V09iTGEwME5KWUlKaDVNdG9vNjdIU2JxTmZwRlhmWUkrckkwenNPOEQ3NzFuM3dPT205QjV1eTRIcHkxeUN3dlA1T2x0ZmZnTDZXS2E3QmVxSFdTUXg2Qnlh''@;'; put 'put ''R1hGS2ZOa2YvV28zMlZpT0dpV0xEU1ZCY2dHRmFVeWdJbWdVZHJ5emt1WHZJZ3hRczFlZmI2QTNrcHJkcWxLbmRIcDZsQnFJanFtWUN4Uk9WMncyb25oVWJ1QUZUTkxLaDJZR1N0eFlndUNuaDQvZ1cyazIwNTJzU0FtWFZSWnV6Q0p2MW8ybDFtVUtmMnhoZzlNZnVwR0EwbXBacDlJb3ROT29G''@;'; put 'put ''RzBaZ3R1d3N0MlhKeEJaN2wrY2h0T1R5RUk1dW80ZDRyUHl1WEt6ODZBaFM1VEM4bk10ek1LRy8zNUxEd05xeTgyMFdsd2VZbTdmTG93QWI3QlBidG0zUHgvcHg0VzRrMzZleGg5Mm5FYURuTTA0UVJ3V3dyWVZBNHN4Tmx0TlA4bkgxdk5NRUxRS0JZbi9Rd2U4bll0a0VtOElRbTY3ZklQZU0z''@;'; put 'put ''amF0dCtWaUQ0NGoxOG4zY0pEejdOWU5TNmtjYlBCNTNQZWNWRi9Ld2VjNkFIT2RBNy9JajI3aVV0cFNySWRORVRFVy9GaUg2WmxORVh2aVo1RnI0RkU4TEFkN3krUktGMXBac2sxOHQwcCtUV082dWVxVGpTRmRZNENXdUlXOW9pckV2YlVTSlptTDRwSTVGa1JTMTZVY3pydXZ3YkxOQlNxS2t3''@;'; put 'put ''aDd4ZTRLWWZUWXluTmU4TmdXT3VLMUtGUm03bVcwSUtMdnFQSmN6aXA1THZEODNWdmE4ck9IaThyWkF4Ym5rYXJ0YWk1SFpnWGRzSVdPMkIwZWpOWTZaRnRyUzU2YlhQOUJhVzJCMjFyeWVTTnZ1NnEwQmQvMzJ6dTBmVTV1UytPQkgxYTFQWnRycTBkbmQyaDdVUmtYNjlzWTNiQzZXdXBQRjlJ''@;'; put 'put ''NEJNMUlwelU3TEE3QkNtRElBV3E5ZXhoUkY2SUNlMEM1N2twVkRtdklsOEYrZmt2dEs4MGJQMHd1dnMyN1BOejBMby9Qeks3Mmo0LzFrWXQzN3Q2OWZSKzUraVNDYmdXZU95MVhKOGw5cEpPaXY2dHZiTHgvZFpaYzNMMzdUcm1QRVh3RmVRNzJVYzdHTnhLYWp6OWlBQlU1dEYzK2VBRXlCNFZj''@;'; put 'put ''TnI0Y2NtSk95Y1BqbFkyT1ZHbHB5dEZZTVZGTFJxb3FVZzZYeTVHcXFHTGpUS0tIV0t3bHhNYTVaRzc2NWt4L0picy9IeW1SYXdsR3NFT29aTFVFemF4WGVtOE96YVpmMVdJQk9IdzJWd1FxdksyS0F2WDk5VGQxZFVVaW5aMFJlb0U2L1NJai9QZElWNEkvY1B0NGp2d2VRTG9iV1ZFcm0wRzBF''@;'; put 'put ''Qlpqb2RReW9tV1ZBT3hXR01EcExKT0VBbjB6d2F1bUFpNk5YRlVnMzhPdUNqTGYwRkhoN3M4RmxoOWhVU0czSEZMbWQ3bVRkbnc3ZVFGRzdtSGpwcDNRczRGVmFUa3dIdEpqWVpBZW1KTlpxazZCZmxlVkt6U0lNTUdNUXhmb1VLMU1ISWlhZk1vVnkvU0dkSzR5L2JqQVYyeDFtK3h1YmJwbzJz''@;'; put 'put ''aysyOXk2dEdXR2ROcXNCUVVWWHNNNytFLzlEWHcvdXZCL3NGb0lFWlh5aWdFdElHZUl1cmFuN2JaY0RZVmI5QWZsb2dpY1BmQ0JRZktLNDVZUE9kN0orSzVYK3RuNmsrdGZBcVlLc0I1SytGM2tHK3UwQXJtK3hJMlhrbC9nZ1UxUFZWVjRuUWN0V1FBekp4OXZVdVFqNnNWMU84akhWeFQ1aUhy''@;'; put 'put ''UjR3aHQwL1lZZnZvdDJ4N0RYYXEycTdtMks3aC9pM3prYlovTHRWMUJYK2YrN2ZvZ1BjOVFuNFc4K1R0dVA3ejVPOWwraUFCTW1QbkdRekxNMHd5R3FHQjRyUDN5WEQ4RlFBM2J4OXBmeU1YYUM4YlF0am1RdmVpOU8raUdWM0xuMHIwSHVPNXRSUDlHVExqanJlK0JmMVdxd1IxelNodWgvVzIw''@;'; put 'put ''RWZSdi9sNXAwNDAvZ3k2U3p3TE5sREY2R2RwY0VNZnB4YTdFeTNsczlvWDhCZmJrOWcwMzJEUGJCMzhXZlpzOENDdTJBQVppdkxhTnhISzFiVEFtL21zMlpqbTkwYW04RU9oOFF5R1R3SVJhb0RoZ1l6ZEliUnhidStOVXNHNkhhVldwUHZQNTRVZklnMFZoUGo4MnozK0dlZHB5ODZSa29reVlZ''@;'; put 'put ''dkZodkF2V1pObXBMb2pXeGJPNm9FMTE4WSszK256d3I0WCtleGcrZWVudlh2akE4ZFFMZFBOT2RCM3NQVGd5Ulg3NC9zK01ocTNBSXdqa1FHVDlkNW96cXIrUDBnWFVPSXQreWZNYzR4YXNMZVIvdmtTUGRXWnNOT21NNmo5NVlpK3dDU2FUc0dRMUZJa2E5VjlLU2IxRlEvWlhUM2hya2JZVzVM''@;'; put 'put ''K1gwckp0dTIzK1lzcVd0dUNCTkkyT1pqTEtYMDRablIyZDJiMHJrODJNRFBURnVtS2R6VTNiL2hVVngvL2dyNmhVYmZvOW9JS3RhdnFULzhJS0hza3F2NHhFcGZQSzMxdjVLL29oOGFmODRaWDg1NG1HM0I5aHlmOHhGZ3pXZlJLWDRMK2pOK1k4QVFaenJLNEx1d0YzZ2Z0MjMzMzM3amRmdEQ5''@;'; put 'put ''eHdjRnJXUUd1UW9FVEdGdzQ3UlpyUC9qQjNaLys5T0NGSit3dnZzeDB3Uy9rTzNTamFDSXpXdVloR25ySGdJbFo2UnBRY09CYkx4c3dNV0pzb3JVT3VSb1hNMHRPNVJFUStCNUZEWkc2MmhxckxRak9vTlVlTEtEQnE5eEZRMkh3RkZubVNTclpTZktWbFRSaERKRHM5cktRS2l0dlNkdzZOUGFl''@;'; put 'put ''RmZmTUlORU03eTladm0xRUxta1p1TmFMSzZXWFlDR3QwdmNyYnNwT3NtdDN1NjhlN0M4dUFDWGVlMWs3SzJnWjYrb3ZLN0hiK2dkbVpabmxKUTU4UGNnNTNST0UxaERZYzdkN1gwL3Y5V2FHREpneUFraGRyOVZMaExVMStwWExYV2lSNzJMUVAxVmlMOUNTMkRaM1BXMjlLNkhsOENYdVN2amoz''@;'; put 'put ''aDJ2U3BCajlpMVV4dU9ZZk9idytWd3N2NFhxTHZaY2RjN0tubC9NUFJldlE5dkJvNVdyMU0vei9mZktmaXAvZmxjTy91Z3g1VDZLUGVSZGdBTXZpZ01PcW4wMkREalk3R01waU1oN1dJSE5LSGtYODdqVWFKRTlybldrUWc5M3Y5UUlrbDJ2ZXpmblByRDVVbiticndQODdVK3AxdkZDRGg4RlIz''@;'; put 'put ''TTUvT2c4dTNOR29ZT2sxVCttM0I2RGFkNGJ2TmR1ZmE5ZG0wRC9ENUQ4RWlJQUFBQUFBUUFBQUFFQUFBOENHK3hmRHp6MUFCOEQ2QUFBQUFEVHdaMkdBQUFBQU5TK3BPdi9RLzdvQkhVRHlRQUFBQWdBQWdBQUFBQUFBSGphWTJCa1lHQSsrZThLQXdQTG92L08veXRZU2htQUlzaUEwUkFBcGZJ''@;'; put 'put ''R3F3QUFBSGphZFpRL2FKTlJGTVhQdlY4R1JSeXNXRkZzYXpIV0prU2ExdGhxd2NZMHhWU1RTRnRyZzBJWGNWQVJzYUNwNHVKU3NRNHU0dVJrRUYwczZ1Ulcvd3ppNEs2VE9FbFVXbWdvV0FyMTg5eG5JakdKQ1ljZmVmbmVlL2VlZDc0bnk1Z0VQNUtsV3FrZHlNaHJER2tCUWIySURpK01pRDdF''@;'; put 'put ''YnF4Z1NDNmhud3JMZmV6WGNTU2tDVWRrQ2pGWmo2UTg4eGYwSlhvbGoyYisxNldqMktYVDFDUzZOWTllUFlVK1BjdnhQUHJjODV5ckdZNXhIZktZckdLck44VzlTdGl1ejVIVE9VUjFsYnlHdEo2bml2ejlFV21zSWFPdDJNS2FKblFmQnIzVHlIa2VGZUwvczBnNzN1UHpyRjJ2STZRTEdMRTFB''@;'; put 'put ''d2ZRcHZQVUUyelVXNnp6Q282ejVoV3lTNzZoUjBmOFh6S0J1QjdHWHAxQlZuZXlsaG11TllhSW5FTzczbVR0T1F4akNZZXc1TC9YVHFSUXdyQjNCeWtiWjUwUk40OXpaQlpaS2FGRGJuQmVqbjBtME93Tm9VVWo3RzBjMjNRZGV1UXVPcVVGRjhpd3ZNSkI4OTN0T1kyWTFTZ3ZXRXNiUWp5THVL''@;'; put 'put ''dnJOb0w0aVFFWmNPTlIrclhIZWRWQWdTYlMvRFB2cW9RMS80UDVSeTVTWDczTkNGZThxNVVHa1hFMC82cGwvdEZubmxuV2VkVkEzanhwdll6OUsvcjJqdjZseUNMMVJhL3kvQ3ZlMWNweVlUVC9xbVgrbWM5RzY5ZjJyS1gxYnZ0WGFEbml1VmkvK3FEc3k1amJwekV0YTNiZVpkS3J6NnozRTcz''@;'; put 'put ''ckpuM3lxUFhoTXNnY1dBNHRDMzk1QnUweWlIYnoxdnFyWThqVkVLa3dzQUhSd0NidXk5eGFkdXJJTEZ1ZTZzaDh1NHhWYU9kakh2Mkg5ZzY0SE5vWm1uL2xkOEh5V0V2THVCU1lQZE5UeFBHZFBFRWxxRGZvMXpESDRDY3JhOWF5enRQeW5ySU1lTVUvOXcxV3FjZUF4aEh6THZNZWFTcmZLWXZr''@;'; put 'put ''SXZrSUovVXQ3d3JlUzRFQzM4TWtnbFJZNS93ZkxoOGU1L0pjRzN5enlQNEdqNWZ3dEFCNDJrWENYVWdhY1FBQWNMdXVNNzh1TXp2UDIzbWZlcDk1bnYvejdrRWlRaUpDSXFJbmllSERpQmd4WXNTSWlJZ3h4aDVHUkVRUEVTSVJzWWM5REFtSkVTRWo5aEFqSWtSaWpKQWhFaElpTVVhSWpOakxZ''@;'; put 'put ''UHgrTnB0dDhaKzg3V09YclNzTFVkQTJWSVRLMEgzM1h2ZFpkd09HNERBOERMK0ZEK0ZhejJqUFVrOEpZWkFVVXJSajlobjduSDNWbnJjWGUrSGV1c1B2V0hBVUhBMG43a3c1dDUwbFo4V0Z1SUJyeHJYbU9uRGR1Y1B1ZGZlcHgrdlJQZk9lRGMrSnA0R2lhQko5aWk2aE8rZ3hXa0ZiZmMvN0hy''@;'; put 'put ''MFQzbXEvM3YvR1ovTmxmWG5mbjRHeGdaY0RGVC9sbi9lWEIwY0dsd2ZQTVJpYndoYXhISFllZ0FKYVlDV3dIYmdKTkhFS1g4Q1A4WWRnSWpnYXpBWlhnaCtDRjRSR0pJa05JazhVaURPaVF0d1M3U2VqcEpma3lBUTVUbWJJQlhLTjNDVDN5U2I1R1BLR3VGQWlOQjdLaEpZcG1NSW9pVXBTazFT''@;'; put 'put ''V3l0RVFqZElFTGRDQUhxSFRUSnBwTVIwV1lYMHN4U3FzeGFiWUtiYkVmbU92MlJyYllqc2N3azF6MTF5TmEzRWRIdUY5L0E2L3p4L3hKZjZLdndrcjRYSzRIcjZQUUJFMHdrUkFKQmxwUkRvQ0l1QkNXSGdsZEVTM2lJdUthSWtwc1NGMkpFUWFscmFrQSttejlGVzZrbXJTYnhtUmNYbENmaWZ2''@;'; put 'put ''eW9keVFUNlZMK1VmY2xOdUswNEZVK2FVVzZXdHdxcFhKVlZOVGFxVGFtWklqL1pHaWFnUUxXcXoyZ3R0WGR2U2N0b243VVM3MEw3SHROaEJyQmo3RWl2SHFyRjdIZEpSbmRHSDlCRTlyYS9xT2Iyay80cVQ4V3g4TDE0SENBQmdERXlEWjJBUnZBWWJJQThLNEF4Y2dwK2crWitCR0l5Uk5tYU5Q''@;'; put 'put ''ZVBJcUJvdG81V29KOXFtMjF3MTM1dTdadG1zbW5mbWd3VlpxRVZZODlhU3RXNXRXdm0vYW16QVRRQUFBUUFBQVR3QVlnQUtBRDhBQkFBQ0FDZ0FPUUNMQUFBQWtBRkJBQU1BQVhqYWhaTE5Uc0pBRklWUEN4cUloS0F4THJwcVhMaVR2eWdZWEdyY0NHb2tscDBKU0FWaXNkQVdFMS9GTnpEeFFm''@;'; put 'put ''eDVBamMrZzB1WG5nNjNDQVlsazJhK21YdnV1VE8zQTJBTkg0aEJpeWNCSFBJYnM0Wk5yc2FzSTQxcjRSajJFQWpIVWNTVDhCS01pYzh5YzcrRUV5aHFobkFTaGxZVlhzR09Gbm1tWUdrUHdobXNhNS9DcTBqcGNlRm5iT2daNFJmazlTM2hWeVIwUy9nTmFmMXl6Tzh4R0xxREE3Z1k0QjRlZXVp''@;'; put 'put ''Z3k1T2JlT1JYUkI0RmxFZ3RSazNxdWtyamsrdWMrOHp5bVh1TExHcXdtZWNwSnhlT3FNTGRObmxFN1RtNVEzTFFwSzdBbkx3YSs3akFNUm80SWMxejJaNXhXVnpIL0ZYSjRzcWpxcWRPYWs1Vlhsek40bnhGalV0VjJJRlRPdGhUOVpya004YkRXSlZ6KzU4ZWhYME51S29neDNFMzQrd3EzLzdF''@;'; put 'put ''TmN1WXkzV1U0MHRXaDlHQXV5UCtrVWlUNHh6VjdLdDcvdFRNemIzalgzdlJyUnZrRnQ5eTZCQk1PbGFUL2gycHFNbFJVckV5ejFaZ3ZJSmR2cGpvMVpSeFE1M05DZ1BwdjAxdm45bVJheDFEN3ZRWTh4aHp2Z0hGZllWakFBQUFlTnB0azFkc0hGVVVoci9mc1hmZE5rN3Z2VmZIWHZmRUtTNXJ4''@;'; put 'put ''N0ZqSnk1eDdNUkp4cnRqWi9GNkY4YTdjV3k2QkFJZVFQRENNK1VKRUwwS0pIaEFvbGZSZXdmUmVhUUg3OXdKWGlUdXczei9HWjN6bnpQMzNpRUxkNTBiWUI3L3MxU2JmcERGRExMSndZZWZYUExJcDRCQ0FzeWtpRm5NWmc1enArcm5zNENGTEdJeFMxaktNcGF6Z3BXc1lqVnJXTXM2MXJPQmpX''@;'; put 'put ''eGlNMXZZeWphMlU4d09TaWdsU0JubFZGQkpGZFhVc0pOZDFMS2JQZXhsSDNYVTAwQWpJWnBvWmo4dEhLQ1ZOZzdTVGdlSE9Fd25YWFRUd3hGNk9Vb2YvUnpqT0FPYzRDU25zTGlkcTdpYW03bUJPM2lmNjdtV3AvbVlPN21OdTNtZVo3bUhRY0xjU0lRWHNYbU9GM2lWbDNpWlYvaVdJZDdnTlY3''@;'; put 'put ''blhvYjVoWnQ0bXpkNWk5Tjh6NDljeHdWRUdXR1VHSEZ1SWNGRlhJakRHQ21TbkdHYzd6akxKQk5jektWY3dtUGN5dVZjeGhWY3lRLzh4T1BLMGd4bEswYysrZm1MdnprbmxLczg1VXNxVUtFQ21xa2l6ZEpzemVGWGZ0TmN6ZE44TGRCQ0xlSjMzdEZpTGRGU0xkTnlyZUJ6dnRCS3JkSnFyZEZh''@;'; put 'put ''cmRONmJkQkdiZUkrN3RkbWJkRldiZE4yRld1SFN2aURQL21TcjFTcW9NcFVyZ3BWcWtyVnF0Rk83Vkt0ZG11UDltb2ZUNmhPOVdwUUkxL3pqVUs4eTJkOHdJZDh4S2U4eHlkcVVyUDJxMFVIMUtvMkhWUzdPblJJaDlXcExuV3JSMGZVeXdNOHlDTTh5a004ekRYY3BhTTh3NU04cFQ1K1ZyK082''@;'; put 'put ''YmdHZEVJbmRVcVdCaFZXUkxhRy9IV2pWdGhKeFAyV29hOXUwTEhQMkQ3TGhiOHVNWnlJMnlOK3k5RFhHTGJTU1JHRHhxa0tLK2tQZVJhMllYNG9ra2hhNGJBZFQrYmIvMHAveUxPeVBhdVE4YkJkRkRhSEU2T2psa2t0SE00SS9DMmVlOVJqaStjVE5TeHN6YXdjeVFoOGJWWTRsYlI5TVlNMjB5''@;'; put 'put ''OW0wRzVleGwwVXRtZDZ4RE05MmsxNjNJVy93NXNoWVJqb09KMktEMXRPYWpSbXBaS0JSR2JrNnpRZEhOT2hNN09EazltaDAzUndETHBNMVpnTGZ5b2VMU210REhvczgzV2JwS1NacHNlYkptV1kwK05FNDhNNXFmUXowUE9meVZLWmtiL0gyOEdVWVVGdk9PcUVVNk5ETWZ0c3dYaUc3c3ZRRTlQ''@;'; put 'put ''YTEyOW1uSFNSM3o5OTJwUFRwNTJlT0ZoVzViSXNXT25ySFhhc3FXczFidEJySE1aZDVQVkdvclpqajBYSDhzYlBxM1JkYWFpKzJtT054d2FQamI0K1l6VGhJdjAyV0ZJUzlGam1zZHhqaGNkS3cyQlRkaWpsSk55Z29xa2h4eXEyWXNsOHk1M0ZTUGZ1cDJXUk5mM1o2VGhnblIvUUpMcmQwN0xB''@;'; put 'put ''KzMyTU52dWExbmxXK2pSTWNqSWFpN2pKdWRiWTFCNUZiQ2N2WW52cUg3ZGx0eUVBQUFCNDJtUHczc0Z3SWloaUl5TmpYK1FHeHAwY0RCd015UVViR2RpZE5ra3lNbWlCR0p0NU9CZzVJQ3d4TmpDTHcya1hzd01ESXdNbmtNM3B0SXNCeW1abWNObW93dGdSR0xIQm9TTmlJM09LeTBZMUVHOFhS''@;'; put 'put ''d01ESTR0RFIzSklCRWhKSkJCczV1Tmc1Tkhhd2ZpL2RRTkw3MFltQnBmTnJDbHNEQzR1QVA0Y0pXQUFBQUFBQVZpWTlHd0FBQT09KSBmb3JtYXQoIndvZmYiKTtmb250LXdlaWdodDo1MDA7Zm9udC1zdHlsZTpub3JtYWx9QGZvbnQtZmFjZXtmb250LWZhbWlseTpNZXRyb3BvbGlzO3NyYzp1''@;'; put 'put ''cmwoZGF0YTphcHBsaWNhdGlvbi9mb250LXdvZmY7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R1JnQUJBQUFBQUZhRUFCTUFBQUFBb3VBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJHUmxSTkFBQUJxQUFBQUJ3QUFBQWNmTkg1NWtkRVJVWUFBQUhFQUFBQVRRQUFBR0lIMVFmOFIx''@;'; put 'put ''QlBVd0FBQWhRQUFBY1lBQUFPZGtEQ2ZwWkhVMVZDQUFBSkxBQUFBQ0FBQUFBZ1JIWk1kVTlUTHpJQUFBbE1BQUFBVFFBQUFHQnBFcThKWTIxaGNBQUFDWndBQUFKc0FBQURubmRERDdGamRuUWdBQUFNQ0FBQUFEQUFBQUE4RWhFQjhXWndaMjBBQUF3NEFBQUdPZ0FBRFJaMlpIMTJaMkZ6Y0FB''@;'; put 'put ''QUVuUUFBQUFJQUFBQUNBQUFBQkJuYkhsbUFBQVNmQUFBT013QUFHOGtIZDdZbDJobFlXUUFBRXRJQUFBQU5nQUFBRFlMYzRnUmFHaGxZUUFBUzRBQUFBQWhBQUFBSkFlUkJDQm9iWFI0QUFCTHBBQUFBb3dBQUFUYXVZNDBKMnh2WTJFQUFFNHdBQUFDZEFBQUFuclUrN24yYldGNGNBQUFVS1FB''@;'; put 'put ''QUFBZ0FBQUFJQUtVQTFCdVlXMWxBQUJReEFBQUFZNEFBQU42TWdpSVduQnZjM1FBQUZKVUFBQURvUUFBQmlHWEZqMktjSEpsY0FBQVZmZ0FBQUNCQUFBQWpSbFFBaEIzWldKbUFBQldmQUFBQUFZQUFBQUc5bmhZbUFBQUFBRUFBQUFBMUZHMWFnQUFBQURUd1oyR0FBQUFBTlMrcHZWNDJnMk1R''@;'; put 'put ''UXFFUUJERUVrZjBNTFBvZjd5cEwvRG9mWGZWL3ovQUlnUkMwVFFDTFI2Y2RGUmtqVnNvN0h6VHYxRDRCN200MDQ4RE9sb3BObHY2NDVTZVhYTFQ1MXNYelNhK1czQUYzQUFBQUhqYWpWY05iSmJWRlg3T3VmZStYL3NWYWlubFIrZ1lJWVFoYVRvZ1RKUWdHa1k2MHhSVXhsdzFhTGJwbklNaGpE''@;'; put 'put ''SENOdWNLYzJBV0Fwcy9YU1VMUSsxMGtncXNDbmJXa1lZd1J0eENaQkxEb0RBR0ZhcHhNb1F0QnBWM3ozdmVEL3ZXdHRNKzZkUFRjKzk3MzN2T2VlNTM3Z2NCa01jNDFFTG0xTlF0UUJFOFBZaGpPUDRSS056aWJ5Ni9EeFZMdnI1OE1TcVhMRjZ5bUxOQmZ6S2F6a2pZOGJrOGhtTU1KcGpIWVR6''@;'; put 'put ''cVhFczZHaTJ6VlNYYWdJZ1B5ZUFWZkdLVStRSXFQb0tnSnQ1QURwaUo5ZmdRc1l5Q2NodWNKeU9sRXlVWXhKMmRqVHZpWitQRDhURU04Qk9mRzNEa1VML2VMbFQyK3YrdCtKRUJWM2h6d0pHakE0L0Urd1lZZVRZK0hyY24rSmovTUgvL2txRHYyK1BYNG8zeFJ1WjFMRE05Z2RuNkhLR29KaHcr''@;'; put 'put ''VDNoTUpRSytRRVNZVHVSd0xWR0VHVVF4Y3p1VGxWcEpDRmJqWjV5NWpnak0rSHI2ZHhLQ0Z3bkJId2pGUWNMak5jTGpHQkZ3aW9qd0JoSGhEQkhoTEpIRE9TS0g5NGxpVnU5RHJoWVRlU21UTWhSTHVaU1RLNlNDUElxVnpYUHR5VlRKZUQ0emlSRGJkN3BqdFIwNzI3RzNIUWZNSVlwUVF4VGpS''@;'; put 'put ''aUtQK1VRSmx1TDdYQ0dKSkxKSUlvc2tZQ01lNC94R29oaS93aWJPZndLLzVmeG5pQkpzSjNMWVFSVGg5MFFPclVRUm5pZHllSUVvd2k2aUdHMUVNWFlUZVhRUWVld2g4dGhMNVBFblF2Qm5RaXc3RVk0VEpmZ25rZVpGTFM5cWVmR1dsMkI1Q1pZWGIzbnhsaGN2STJRRTgzV2xYRWxPY2hTNGFq''@;'; put 'put ''VXpOSUUxcm1adHA3S20wNW1aR2N6SVVpekRkN0VjMzhNSzFuSTExdUNuZUpCWldNZm90ek9pNTFuSkYxbkJnNnpjTVZic0RWYnFMSGZ5dnAyc01yNjNJamxmK29DZHczMnluSEVQcHI3YXFidU44WC82VWF1TjhPK1pBVWZlSkM3MDgrVDVUenBQY1dmOHIvZ2Y4U005Snk5NzB1SXo4ZFo0NjBm''@;'; put 'put ''L2RXZWZ0MmVVSnpqUmhKZ21GRjhoSEc0alBHNG5BaFlTRVJYeEdPY2thaEJUZzVvYUZDMUVoRzFFWkpVV3E3UllwY1VxTFZaWFJSZmhjSnB3NkNZY1BpQUNMaEdSREpFaHJPdFFHVW9lSnNQSVNVWEZLaW95V2taemZVVVZyaUJLTUlRWVpFb1hVN3FhMGwxQjZWOGlza3IzRmsrVWlTZG5TbmNG''@;'; put 'put ''cGZkbzNGdFUzcUxLV1ZTWGxaNXFQRlgzUzhUQXVrNmk5YVpaTFVTWUtOZFpuRG5UcnpQOWFpSG1STVZhaUR6UnNtYml6eXJhV1JaeU1sbXU1ZHVUVDY4YVJqaWY5YnFOY1Mxa0pJMk1wQW1QTTVvbjhDU2VRak1qZW9hUmJPTnBiT051TzdqTHZkeGRGMnZReloxZDRnNkc4bTBqK0piUlhIR002''@;'; put 'put ''VmxSYWgybFBQNEo3WExNdy9XMHhPenIyWWs2b3pIa2s4ei9IbGtyNitWaGFaTE4waXhiWllmc2twZGxqK3lYQTNKSWpzZ0pPUzF2eTd2eW5seFNyM2t0MCtGYXFlTjBvbGJyTkoyaE4yaU4xdWw4cmRjNzlXNWRwTXQwcGQ2dmEvUWgzYUNQNmliZG9rOXJpN1pxbSs3V3ZmcUt2cXF2YTZlZTFH''@;'; put 'put ''NTlSeS9vUlFjWHVVR3UzSTEwWTl4NE44bE5kbGU3bVc2MnU5SE5jd3ZjN2U1cjdoNzNIYmZjclhJUHVBZmR6OTB2WEtQN3RYdlMvYzV0Y3krNGwxeUgyK2YrNnY3bURydmpyc3U5NWY3dC91cys4T3FMZkttdjhLUDhXRC9CVi9tcC9oby95OC94dGY1bWY2dGY2TC9oNy9YMytSWCtoNzdCci9Y''@;'; put 'put ''ci9jTyt5Vy8yelg2cjMrRjMrWmY5SHIvZkgvQ0gvQkYvd3AvMmIvdDMvWHYrVXZBaEg4ckM4RkFaeG9XSm9UcE1DelBDRGFFbTFJWDVvVDdjR2U0T2k4S3lzRExjSDlhRWg4S0c4R2pZRkxhRXAwTkxhQTF0WVhmWUcxNEpyNGJYUTJjNEdickRPK0ZDdUJnaGlxSkJQQjJyZER1NXdYaTJjYTF4''@;'; put 'put ''VThKWVo5eHFualhHalJtK3hYaUs4U3hqVzQxMVN1ejZ6R3FUbEorcGNwVnh0ZkhjaExIYWVLZTJreHZNZjEwUDQ1VHh4Y3hUemNaVnhxWEd0N2hGNUJialZmMnpuc3ZFV0d2K1BvdzdqTnVOMS9XdzNKWEdidllTNC8zR2pYMDV6Y0FBTzZrM25xUWRuOFQ2eTE2NTZ1aVA4VlhqbmNhcmU1aDUr''@;'; put 'put ''elQ4ZjFabWJudDRWV2JQdmV4TVRSdk1mNVg1cy9ac3krRnZ6TDRyay9uMExiMXNHMDNybS9VM21UMDN0VzFPcXBtME9tblVxVDRMZHNHZnpHazFlNmRiZVZtOUJZMTFtbjAwc1FzMVRYT1NhanZOVE5iZm1MRVBtZDFnTlRwcU9qL1ZvMEJxdGVQeWlVQmYveFN6TDZhMnpVbFZuZlduSjJoV1Jq''@;'; put 'put ''UFZtY3luOWc2ekYyV3FZSG5UU3ZNM216OVZXbFhHVHJOYW1zbDhYL3U4MlQreTZHNHkrKzltWjFldWpiY2xLOGZQZmF4UzJUZk9MWnp1amsvQnZXY3FQbXYzVXZEZU5aRlpTVzZubmwyN2lsMHd1V0ZIbU1LYldBN1RjQTE3V05LNVM5bTNyMk5QVHpyM0VMdWpsbHZuSHNydlZiWHNRM1hFTU56''@;'; put 'put ''RVBqZWNuZTVXZnZlcEp5cXRsMytHWGU4T2RxMmx2THVOdGR2YmRIYjB6Vnh2Q3p2ZlhPdDlYMmIzYTJlSC9DTU80RnU4MFozRkQreFcyWVR6RXZBNE8vRm90RmhQYmVOK1JhNnc3MllSSkY1aEttekFQZVMxN0hZbEdNbDNqV2RFazNFMWR6MmJ1NXlIQlJ3OWFOcnRNajV0YkdjR1J6SjgxUGpI''@;'; put 'put ''eHM4Wm43Q3NqVE83QkYva2UrN0Z0eVVuUlZJc2VTbVJ3VkxhZDBmL0EzSUZvYmNBQVFBQUFBb0FIQUFlQUFGRVJreFVBQWdBQkFBQUFBRC8vd0FBQUFBQUFIamFZMkJtOG1XS1lHQmxZR0hxQXRJTURONFFtakdPUVlUUkRNaG5ZR2VBQXlRbUEwT29kN2dmZ3dPRGd1b2ZadW4veGd3TXpPY1lE''@;'; put 'put ''UlVZR0NhRDVKaFltZFlES1FVR0pnQzhpUW9yQUFBQWVOcTFrMWxRamxFY3huLy90MzBSS2hUMTl2WnAwMGFpRkVYMnBjaStsS3pac3EvWkd1c1FRMFZTeUo0a294a1RVMU8yRys2NE5XT012cytWVys0TUhjZFhURFBNdUhKbTNuUGVjODZjNTV4NW50OGZjS0hyQzBGMGoxVHFtVGpucmxLc3h5''@;'; put 'put ''V013NDJCbEhDTE91N1NTQlBOdE5BbUhoSWdneVJNQmt1Y0pFbXFwRXVtVEpVY3laTkNLWklTSTlWNFpieDNpVEtQbTYzbUUvT0w1VzRGV3NGV3FHV3pvcXhoVnJwMTMrWWYrVTBwZllmRmpSN2FqMm5qbWZoS2Z6SEZKckdTS0NtU0pobVNKZG1TS3dXeVFUWnI3WmZHVzYxOXlHd3gyODNQbG1F''@;'; put 'put ''RldFRldpRk43cUpYMlMxdDlWQy9VYy9WVXRhdFc5VWcxcTRlcVNUV3FCbFd2NnRRMVZhdHFWTFdxVXBXcVFwV3BNNnBVbmVoODA1blZtZlQ5azZQY1VlRElkOFRZQjlyOTdENTJMN3ViM2VqNDJ2RzU0L0NIa0hmSlhWNzlwK1p1ZUR1VDRJOWJCS1A3ei9pSFJ0ZEpGMXgxZHU1NDRJa1gzdmpn''@;'; put 'put ''U3kvODZFMGYrdUpQQUlIMG96OERDQ0pZWnp4SXB4NktTWmhPSkJ3Ymc0a2draWlpaVdFSXNjUVJUd0tKREdVWVNRd25tUkdNSklWVVJwRkdPcU1aUXdhWmpOWE1aREdlQ1V4a0VwT1p3bFNtTVowWlpKUERUR2FSeTJ6bU1KZDV6R2NCQzFuRVlrMWFIdmtzcFlCbExHZUZmdjhPZHJLYllnNXhu''@;'; put 'put ''Tk9VVTBZRjV6bEhKVlZVYzVFYUxuR0Z5OVJ5bGV2YzFCVDlaUFEyRFpxbGU1cW1uMjBWcTdVZDBXemdiTGMzNjFtaisxMmMrTzFXNFY4Y3ZFQTltMW5aWTJVdG15UkdqMXZZempIc09DUmM4eGtwVWJvQ0lyaWpkeDZnYVpZRVhRL3gzV2VLbkdIRXNvMjliR1VmZXpqQVFWMUwrem5DVWIxMW1G''@;'; put 'put ''Sk9jWkxYdXBwNnNVNjh4RnQ4MkNoK21uL1BINUROcXVoNDJtTmd3QUxLZ1RDRElZTnBQUU1EMDI0bVZnYUcveUhNMHYrTm1YYi8vOEowajBudy81Zi9maUErQU9ZTERncDQycTFXYVhmVFJoU1Z2R1VqRzFsb1VVdkhUSnltMGNpa0ZJSUJBMEdLN1VLNk9Gc3JRV21sT0VuM0JiclJmVi93cjNs''@;'; put 'put ''eTJuUG9OMzVhN3h2WkpvR0VudmJVSC9UdXpMc3piNXQ1WXpLVUlHUGRyd1JDTE4wMWhwYVhLTGQ2emFkVEZzMEU0YlpvcnZ1VUtrUi85UnE5UnFNaE42eDhub3lBREU4dXRnelQ4RUxYSVZPUkNMY2RTaW14S2VoZW5UTFQxMW96WnI5WGFWUW9WL0h6bEM0RUs5Zjl2TXhiVFY5UXZZNnBoY0FT''@;'; put 'put ''VkdKVUNnSVJKK3hvazJZdzFSNEptbVA5SERQdjFYMEJiNXFSb1A2NkgySkdzSzZmMFR5aitkQUtneUN3eUxTRFFKSlI5N2VDd0tHMEV0Z25VNGpnV2Rhcis1U1ZMdVdraXpnQ01rT0hNa3JDTDdFWlp6ZGN3UnIyMkVvODRDOUlsUWFsWi9OUWVxSXBtakFRejJVTENITFpEK3RXdEJMNE1zZ0hn''@;'; put 'put ''aFpXZmVnc0RxMXQzNkdzb2g3UGJobXBKRk01REtVcmtYSHBScFRhMkNhekFRT1VuWFdvUndsMmRjQnIzTTBZRzRKM29JVXdZRXE0cUYzdFZhMmVBY09ydUxQNWJ1NzcxTjVhOUNlN21EWmM4QkIzS0NwTkdYRmRkTDRNaTNOS3dvS1RIUzlSSFJrdEppWUdEbGhPVTFobFdQZEQyNzNva05JQnRR''@;'; put 'put ''YjYweWkySmZQQmJONmhRUlduVWhYYWpCWWRHbElnQ2tHSHZLdThIRUM2QVEzeWFBV2pRWXdjR3NZMkl6b2xBaGxvd0M0TmVhRm9ob0tHa0RTSFJ0VFNtaDluTmhlREtScmNrcmNkR2xWTHkvN1NhakpwNVRFL3B1Y1BxOWdZOXRiOWVIZ1lCWXhjR3JiNXpPSWt1L0VoL2d6aVErWWtLcEV1MVAy''@;'; put 'put ''WWs0ZG8zU2JxeTJabjh4TExPdGhLOUx3RVY0Rm5Ba1JTZy84MXpPNHQxUUVGakExalRDSmJIaGtYVzZacDZscU5LU00yVXBVMW40YWxLeW8wZ01QWEQ4T2hLMEtZLzNOMDFEU0dETmR0aHZIaG5FMTNiT3M0MGpTTzJNWnNoeVpVYkxLY1JKNVpIbEZ4bXVWaktzNndmRnpGV1paSFZaeGphYW00''@;'; put 'put ''aCtVVEt1NWwrYVNLKzFnK28yUW43NVFMa1dFcGltVGU0QXZpME93dTVXUlhlVE5SMnJ1VTAxM2xyVVI1VEJrMGFQK0grSjVDZk1mZ2wwQjhMUE9JaitWeHhNZFNJajZXVTRpUFpRSHhzWnhHZkN5ZlJud3NaeEFmUzZWRVdSOVRSOEhzYUNnOGRzSFRwY1RWVTN4V2k0b2NteHpjd2hPNEFEVnhR''@;'; put 'put ''QlZsVkpMY0VSL0pzRGo2dVc1cHpVazZNUnRuelltS2owYkdBVDY3T3pNUHEwOHFjVnI3K3h4NFp1VmhJN2lkK3hybmVXUHlENE4vaXhkbEtUNXBUbkJ3cDVBQWVMeS93N2dWVWNtaDA2cDRwT3pRL0Q5UmNZSWJvSjlCVFl6SmdpaUtHdDk4NVBKS3MxbVROYlFLSDA4RU9pdmF3YnhwVG93anBT''@;'; put 'put ''VzBxRWthQVMyRHJsblFOT3J6N0sxbVVRcFJibUsvczNzcG9wanNSUm5NZ0NrbzVLYXhzT3p2cEVSYVdEdXA2ZlRSd09WRzJvdWVMRFZiVm5HRnZRZnZZOGpOTEhrM1VsNjRLU250Ulp0UXA3eklBZzY1a1QyNEpvSmJhTyt5aW1KS1dLZ2lQZ2h0QmZ2dFkwUW1MVE9ETG9FaVpIR3lzZy90aWgw''@;'; put 'put ''NW9vSjJBdDk2MGlydjIwTHR6M1h5SURDYm5XN25RWmFSb3ZOZEZmVnFmVlhXMkNoWHI5eE5Id2ZUenJDeDVoZEZHVTh1ZTkrZUZPeFhwd1M1QWtaWGRyL3VTZkgyTzlidFNraysyeGQyZWVKMVNoWHlYNEFIUSs2VTl5SWFSWkd6V0tVUno2OWJlREpGT1NqR1JYTWNGL1RTSHUyS1ZkK2pYZGgz''@;'; put 'put ''N2FOV1hGWlVzaDlsMEZWMDFtN0NOejVmQ09wQUtncGFwQ0pXZURwa1BwdWRtdkN4bExnc1JkeXpaTmRGOUIwOElSM2l2empFdGYvcjNISVUzS0xLRWwxbzF3bkpCMjBmSytpdEpidVRoeXBHWisyOGJHZWlIVWszNkJxQ25rZ3VPUDVlNEM2UEZla1U3dlB6Qjh4ZndYYm0rQmlkQnI2cTZBekVF''@;'; put 'put ''dWV0Z2dTTEt0N1NUcVplVUh5RWFRbndSZFZDc3dKNENjQms4TEpxbVhxbURxQm5scGxUQVZoaERvTlY1akJZWXc2RGRiV0RybmNaNkJVZ1U2TlgxWTZaelBsQXlWekFQSlBSTmVacGRKMTVHcjNHUEkxdXNFMFA0SFcyeWVBTnRza2daSnNNSXVaVUFUYVl3NkRCSEFhYnpHR3dwZjF5Z2JhMVg0''@;'; put 'put ''emUxSDR4ZWt2N3hlaHQ3UmVqZDdSZmpON1ZmakY2VC92RjZIM2srRnkzZ0Ivb0VWMEUvRENCbHdBLzRxVHIwUUpHTi9HTXRqbTNFc2ljanpYSGJITSt3ZUx6M1YwLzFTTzk0ck1FOG9yUEU4ajAyOWluVGZnaWdVejRNb0ZNK0FyY2NuZS9yL1ZJMDc5SklOTy9UU0RUdjhQS051SDdCRExoaHdR''@;'; put 'put ''eTRVZHdMM1QzKzBtUE5QM25CREw5bHdReS9WZXNiQk4rU3lBVGZrOGdFKzZvbmI1TXF2Tm4xYldwZDR2U1UvWGJuWGZZK1J0bE03b3NBQUFBQVFBQi8vOEFEM2phdFgwSmRGekZsV2hWdmU3M2VsT3I5NWJVMmxxOVNkMnQxdEpxdGZaK1dtenRxMjFrMlJheXNDM0oyR0JiWnJPeE1lQ1FCUUlo''@;'; put 'put ''Sk01a2c0U1FZekloWUpaQUlDUXpXU1loem9KL2Z1WVBKd21UU2VDZkpIK3lURDRoazhtQW52NnRxdmRhcmMwNDg4L1lVcXY3dlZ2MXF1NStiOTJxUmlZMHZaekVIeGQ4U0VENXlJMEtVUUJWb1JScVJ1Mm9EeFhLbnE2T3RwWjBZeklhQ1pZVkZYanNOcU9PSUZOdFRPKzMreVYzMGgxd0oxT0JW''@;'; put 'put ''RElsc2I4U3ZOV3UwbXYwTDcwRFYxTGFleFdHTlVnblUvamp5amR4K3h1ZFhlZTd1czZmNzZydys3dTZ1dlozK2U4NnY3L0N2OTkvL3Z4NS8vNzlkMjNkZW41dWEva1BoRjkzKzBOKytMbGpvV0xyMXVBc3ZOdnFiK3VxMkgreXlWc3pkdXpZNDhlT2pkWE0rMnY4OElNUVFWdVgzMFN2a3d0c2Jp''@;'; put 'put ''RzVBbUdNcGhGQzFrRkVpRENqdzRMZ0ZZWjBPbDIremhxeTIvU1NOK1pNQ2dGUE9OWFFtS3ozdUYxaVlQUytrdTJHUktLaUxGRmRUaTRvOWIrcjhaY2xFbVgrR29TV2wxRW5Qb2NmSmhkc0ZjaUVrRTJBMTFjUmZXNEZ2TndPei9XaE10UXZiODBYQ2RJTEJCT0VENWl4MFdnZHROcnlCRWt5VEZ0''@;'; put 'put ''TXhHQ3dEK293SWZsa0NLR3kwcEppYU9Vcktpend3dk9kOXV3L3FTU0dwYVFVa0FKcDlwdE9zdCtreEg0bGVwT1ErRUh2UW5RNmVpWjZkWFMvWjM5OHpqTVA3ODdBbFhuUHQ4N0V6K0RISDk4RkNEMi82L0ZkbjROL3V4NUhnSm15NWVkSUwva3pLa0ZCRkVNSk9SYUwrc3VMQ3IwZWw5MXNNa2hX''@;'; put 'put ''UlBDQUhpUGNEL1BDQk0vQ0JMMW9xTlJ1RndCZFFSR0luQXBIMGg1dktvRUJiV21ndGNjcmhTUHVVdXhHY05XSzNZN0dWQU5jSUwwbkR1MSs5NzYrZ2NuNStjVTl1Mis0dXFkbjROaHg1Vmc0R295LzJsalRkR1JSa3J0dHU2ZTZuZC8wN1pnWVh6UzNkMWpHOTdUYXZsSzA4eXJzRE9hZk45YVVL''@;'; put 'put ''a2ZySy93UjI5TklqNnFXLzEyd2ttZUJzazdBY2cxcVJkOGRmTEpnYktjY00yTzlDV05SaitlUmlBeEcwYkNBZERvMFF6Q2xmQjdnWDVpeFNFUVE4b1VoMytDVEVXaFNjOWttQ0VCWk8ybkdnaVhKS3czNTVPUUdMUWdCV05vTWJkeHFha29PMTlhV2w3dGNDTlcyMXJZME5wVFhsQ2NxdzY0eVYy''@;'; put 'put ''bFJnZE5odDhGa3JHR3I1STQ1S0RJN2NMSWVzT2l5NGdCTzRnQkRZNkJDZExzOFNiVG1mZ2RldWZlcG9XaDB1TFp1T0JvYnFzUHYzNk9FOWl3bUVvRmdkU0tBNTRaaWNMRnVpTjRLSm1vQ0FYcHhLakZhV3plV1NJekJhelcrYW1rY2Z6WWRpemVscTJOcFpTSXhXbGM3VmxQRElBYlQ4VmdUdllV''@;'; put 'put ''bzMvaVgvMGplUmI2RXlsRWNOYUlPdWJVMkVTNHJLUzRxTUJrRlVnNjhMcEFCeXRkNEJzVE9NNmdIWVdPWUFlYXBydmI3cXh1clUvNjRQeGF2RUNWUFRCOFJBeFdjZ1hKbkJyZThqV212S0hrUm5acVhUOU9SRGtlQXJXQ3FwSGhrYXJGenZxVnZ0TGlnYnJLaFlYdk4wTGI2dnFxUzZickU5Y29u''@;'; put 'put ''RXA3Q3RwcG9tU2t6MlJPTDlkVGxqWS9WVHJWM1R3Y3JPOE9Ka1VUMWNFM3pZTGgxcUgwZ3ZrOCtUbHJpZ2NMYTBvSjRvS0o2NlMrcDNXTUZ6Y0c2Rm9Rd2xYSDBMWkJsQzNMS05xcEJHSG54a0R0SVlPQ09GVjBoQmE1eVIzeStDUEE3ZnZWdzBGZFo2UXNlN2tXMGo4YmxxL0FZK1FyS1ErSXpl''@;'; put 'put ''WHBjRzJNcUp1MWxzL0JLbjF0Y1BKZ1pIeDRleit6NitkbXovekxldGUzQ2tTTlBiT3RtYmNQUVZ0YmFTdENXWXlHUzVnZ0tUd3dQVDJRT1FnL3oyNTQ0Y3VUQ3RxNHg2T1BuWTZ4dEF1L0grOGpmb1htVWxodG1obnFhcWdDWE1JY0JBV01kUmlEVzh5TFc2OGtNOEs1SEQvb0hJT2VtSnVXT3Vw''@;'; put 'put ''cUFQeVpSUm9TQnBodlRvZ1QvQXhYaENQL1lDQlRnN3ltbHZCNXZLZmF5enhvcVJLa1JicVhwUnkrN1lNVVNKU2FGZEx2Z1U2QUNPa2pnQ0w4Z0JsNTBtVVdTVnhCdzZZMUdtMDV2TFlpV1c2MmwxVjZyWG1jM2lBWnZoV1EzRTlIc3lyTzZURmdVN0M0aDRPQ2dCc2xlclM5d3V3cHFYWkloQjFv''@;'; put 'put ''UXNRbEVZNy9ENGt1VTVoczlmclBPYURTWUhJYThQSk1vbXZLc0JvZFpNcGgwMW5MUlpzZ3ZUZmdzRG9mRlZhc3JkT2M1aERJVEJUWWE4bldtZkNJYWphTE5vck1hRENZTjNsMm9xM1ZaSEJUSEhXaVdGSkkyWkVaaE9ZQjBBdGJ0QUY0SHpZRUZkQURVQVo1R2dPdGhwc1J0b2xRVXd3RnFEVlBV''@;'; put 'put ''S2laSjRaZXUreEw4NEtJWFhsajQ4cGRwZjVubFJmUUw5RUZrUlY0WnhvOTZOWjREd1FrNktNK0JTRlRrNEhvOFlTbXJUcFNIRTlYSmF4TzFOZVhsaWZiYXl1Mk50Szg2OU0rNEEvZUJ0QmJJYmtRNzJrSDVBa2FFWUVRMjJwblQ3L2JYNFR6bGo3anZFT09aZHJDWlA0SG5tNm4xcDFkQUMyTHN4''@;'; put 'put ''WlE3ek1nVUZJQXJjaTNrSWRVNldyS1dFUy8vWnZrNS9CM3lLM2l1WGJiU1RzL0NzMi9nRDZTcURHODVxNXcvUzM3MTlpWEU3R1hkOHB2a0h2SWlxTDh5RkplcmdCdlpqTG5Xd0dDbzJRQnNOakN5WmJiU0FnL1RrMkI2WXJxMWVwQ2tHaExBWEZTd1N1RkpocnVIaCsrZW5IemYwTkQ3SnV0SDQv''@;'; put 'put ''SFIrdnF4ZUh5czNyTDdNL1B6RCsvZS9mRDgvR2QyTDNaY3YzWHI5ZTN0OUxXRDRZQVNOZzB5THlLZlhBQ2tGQUJmQTF5clk1eVBoK3hPaGpvcGtrN2FBeS9lbFB6Ni9sT2tiSERuMmFWeHhOckhZVkpobUU4Qmlzb1Jzd21tQTl4QXlBQkRKMU9IMUFHWlJzd0cyYjNCc0U0cWlHV3dwc1dsU0tP''@;'; put 'put ''cS8vSXhrS2Q2U1c3Y1VwdmNWamsrOTJEUGRabit5ZnR4V3BIbXZwdmNIcXRwcWFzZGZIZmpOUjFiYnU2K1laRTl1eFJ3R1lWblY2R00zRlpZQU0rcHdKakEwMkVJQTlTR2cwRS9BRS9XelFCendrQVEwczlRSmVCbDhsK0ZLb05CZnpBa1NZVkFaYXBra3ZYTTdraXBwS2R4N2ZBa0ZlMy9lSGQ4''@;'; put 'put ''S0xRMzNkNDMyRDg4M05IWDExUTNIaHJZKzhtKzY5djdXdHEzeXpjTVdUS3BpYXBFVTNXaUJoL0dkZkZvS2w0MWRLSjJSMlBiaE4yNnZiTjFkd1BuZzFKNDJRbDRONEcycTVhakZ2QTM4SUNvaHpsZ0JIN25IS0NPbWRoODNaRFpiTTR6NTRGTU9XeDByQ0YvQkNmdDFQTU1GR0lCbjFZZXQrQ3Q1''@;'; put 'put ''MlptVHYzazNDeCtRUmsvZEE1SUdGRit6T2tUQXh3MXdIT0tLWTRjb0F2ekxFU0F6ckVlQVk1MEFLRUR1eTRJWkpvYjlkVTRBZyt0d3U0TUJoaU93UFZSTVZRaFJhZ3dTWTFaYnJ6L3dNRFUzbzdCb2ZhUmpoMG0vTHp5VlJIZUxiUjMzVEppdVhacWNrdERTcTRONHVzV240b21yK25lZW0wTHgw''@;'; put 'put ''RXRqRzBBNk9kREVkUW5iN0VCRHV6QVBBVllKNFN3WHFjYkVFR3g2UFNDYmg1bGphc0VZOU4wUkhFeGpEQlNIQTc0b1l1aVlDaHNBRDhOcVNPaWVvT3BiSWxMaVFRZkhGbTI4eVR4SXdjN3VtN3N2L2ZlNFh0Mkh0L1ZIdWlPMVE0bGRPVlhOeGc3L0tNdGRZUDVCVGZpTHpYczYrbysxUGFWVHg1''@;'; put 'put ''OGRHWjRwcXlzZWFFN1ZLVThXdEZjbnU1TXhqOU04WnVFaVFTWS9KVEp4V0JvTUpNZXFuY3c4NzNCMXdWdmh6cVEySi95dTBFaFBLQThqUCtnL085N1NmdmkxVXNYcUg4UkJUeDBxbmhJb1I2NTB5VVMwSzREVXM3MFZTMWhnT2xqSUJEVEVwV1ZGQU9WcWNxR21tcUtoNHB5aW9lNGthcXRqVHdN''@;'; put 'put ''RlRNNTNwV1h2Z2ZiWkNYVXgvalhrMXVITTgyZFd4YTd1by8zZERYSlE3MG5CK3RHK2hzYiswWnEyOGRqWFJDd3hNYmJMVFZUclcxVDNvTFJwdWJ0OGVydFRjMmozZ0s0c3JNR1A5UVlyVXczVnNVYUJPVlNVN3kwcG9pUW9wcFM2a1FSVkE5ekhGcWhkU25RRitpdE40TEFHZ0JyT3Bpc0hzUlZU''@;'; put 'put ''K2FCNlFXWW9TQjRCblBzZ1VacmZ4bWRZeWdZWXJUMmNGSno0UVVyVEQrb2MzYUE1ZWJhRVdqOTkrdW9MRFBxTjFNeVYxS0NreGRYVTVsVFhua0V5TXpJVGVmQTdBV3hnRzN3VXQxTmRUVWJYaUVQc3ZROHlMSllFTEo0TFI2SGpSa1JVWFV0TkNOQ05qQW9GZXBmZkVTekxNcGQyanVJdlppZEpC''@;'; put 'put ''YUl2ZklSc2t2SURvaTZGUm1md3ZoNWZPdVR5Umpsd3pUYVRrU3lHL2hRZkVZazREczVVeUYzSG5hbjhTWGxiL0JCSEpuOTBkeUREODR6dWV0QWo1RkMvQ2ZnUEFsMURENVpCbUdCQTFFdlZwalY0a1k3QnMrL2dISXlqZVFRaEJCa2g2cklpVEE4OVJ5MThGU1RVelZBLzNmZ255b2g5dnVuaFpN''@;'; put 'put ''TE1KNCtHSTlYRzQ4QTQwbFg0NVRlcmUvREIyRThsNVM2Rng5OGNPNUhzeitpNDNFdXY0bGZBZDV3SXo5cWwxczBubkFDK3d0VW1nUWRFZzdBeUxqelJyVmlWa2Q1UEI2L3B6emtEUWFaYm5TcUFpNUZWcmpldlNyS2ZXSm9iMGY5Y0dkLzlRMjluZnZUOCtQSHZCcnU3OVkxVjRZYit3YVNyZlU3''@;'; put 'put ''Rzd1dmMrejVQeXNCTUVIeDVmY0xXOGdqU0VZajZKTHM5cGVYQ1FhaEd4c05EcXd6dHJjUkVWaVlSMWpWRVBmcXNIRVMxRGhFVFZTN2lpYnFFdTVEcXVZQ3ZXQXdDRE9nZE8wR0dwWlYwVWdPaUdFd0NvYjVkMnlzQjhMVVVUVXRJUDM4NXEwa1NaeEVvaWpOc09hakVKQVZkQUlUZDQ1MER2ZHRo''@;'; put 'put ''Vmxrd3VGWUtCZ09XeVRmT3RlaWdnWWRXUVhxOGRLd2hBdFNQY1Z2anRkUnp6eDcwQ2daM0xBaWJaMFg1aGEvZG5UK0MvdWJkOVhWdGx1S1J4S0QwNTBIVzJxNm5aWjVhNTdaV3U0cmJxaVkrc1QwM0JmbTlqdzQwM1lnNVdvKzF1M3ZGM0VpRnBIRERkRWJEbnhoN3NqWGp1MTllSHI4V0ZNc0Vv''@;'; put 'put ''N3RHK3MrM2wzbGJ6UDBkVFNPMm9yTEtyZTM3L2pBOXJrbkR1ejV4SjZTOHBLZ0gzc25NclpZZmF5M3FycVIyeFludkx3S2Vsa0NDeHVUSzQxWXg0SjdIWEMwRHF3cnRYVVFHVkFQeDhDY1hlNnlGb0IxbFZnSUdqRmpVcXA4c2VFZVhBWS9kOCtlT0hIcUZMbXdOUDVyN0ZmK0JkQU9VUWQ1SC9T''@;'; put 'put ''ZkQ1NFA0MXJRWC9BRUVlUkZyeU42Nm5hb0NSZ0pjOCtZUHF1bzBHNHJMeTMwRi9tOWJsdUJ2U0JXYm1DT0tjTzhwcC85bUZuWkdIWTd0VGRqZUx4MVQ4TnNXMWZUL296eUdaeE10TFltdm5ReDJkbVp2RWd1eEVmcjlqZVU3RzVxM0ZHTFAxSVhDdGM5cnZ4VE9oWkwvd1BWQzlXZ2R6OEdzbFdD''@;'; put 'put ''R3VRNkNPTlJvUmxzYVJHWVdSQXRWWDk1VmlXSjRFSUpLZzZId2pSSmxHVU5qMlpIYyttT0c4L3YyM2QrNzhDN2sxUGxVM1VkaDJYNWNFZmRsSDluL1hzR0xMT2ZuWmw1WkxhMVlWc28xblZFN2p6U0ZRMVBwRm9aYlNqdXZzVjhIemVMSkxLb1lrRzBpaXFMMmVVd3V5M3VjTG1lb2toanpoZ09x''@;'; put 'put ''VXdZdy9heE40NCt1Vy9mazBmZlFNdDlSek9abzMxM2tnczdQN2x2MzRNN2o3VWU3TzVlYUZXU0ZBY1FtWUx0dVFEcXVFYU9henFOS2hEZE5PZ1NhNjZIeWp4L00wOURVWDNpVnZXYjNlLytCN3hQZVJDL2Qra3RvaWZ0NXhlZldTUVhGcm1QcGZWdlJGVnlXT3NmZUUzSGV0WGNBTGhoUkViYU0r''@;'; put 'put ''VXoxck05b1BWN21uYjZ4S0x5T3UrVTArMXZnVzUrMUNvMzJZQmNkdkROeTdBT21BdzZwbHBScjBPTXpWYTBJbk9Sd0M5d0F2RUNQQUR6MjNOTTRub2lwZ0w0WFRoVWQyNXc5dEY5K3g2ZEhmcHczVlQ1Z1dUbU9sbStMaE1aSzM4TW4xVCtOZG5PU2RtV3pKS3l5SHRhbS9kSEdWNGpjbEQxSlEr''@;'; put 'put ''QUQwdm5UUE5KK1dndFBqR2RNZndtNFpWODlMVHl0NmRQNDBrcVZqaWsvSlJjVUg2TkM2Q1hmbWoxTFpiTHBIbUluRmlFaDNFUWlQUnpZUVJZTzlpT2Z3SllHK1VrNXZyakFlNTd3ZUJtQkdBb0wwTzlEZVU3UXpwb3Z1THF3eWlvdUQxNXVtSzdveStTN0R6VnV0QmxrZXNuZ2pYOUxmZ2xwYTdu''@;'; put 'put ''Y0J1bjd5aDBkWjdOczF3dU1ScjBCQngwUElCWnhremcrVXludzhIdFlkS09rMFljZ05BeE1Ib2FWMzlNK1IyT2ZQejE2ZE13dVNmeG1QSkQ1WFpjdWY4ZmVML1VxU2lGZnZYVWQyU0RwcjJocTVHR09qM1MyKzEwMENIZ2xhUWRGRkxnMUNMdzNkSTNXWHVRSThHNk1pNXBnM0c1N05xNGZCQTBC''@;'; put 'put ''T3htb01EWTZkZGVQM1hxOWRmb21LYnhJNEQ4NzlHL1NrcnRrM3lSOFhLcDdKTUlXZGVqSTlzamhpRUZXSC80MEtsVHlqbmFYd2wrSGZwN1hTbWhjazU1V1BudmlIVzUydGw3L3Bwcnp1L3RPSlRKSE9yZ3VrZFZPck9Qek14OGRuYXg2MGluZktTTGN5elRPNVJmajdQOGxwdEdxekFLRUZVQjA5''@;'; put 'put ''VEZTckljcG1qTmN6bnkzRmEzUFZ3dTBrUzVQNnQ3M0lHc2J1N0ZzZjRidTd0djdIL2lOQzdwSEIzdC9EUzUwTExRMWJYUThpdThxNzJob2YwMWxJc0RGL1h0NVhxYTdDWjZnZWgxb1BRRUNKT3pnWTB1SjJ2b2Ryc2o3bkIxT0VKVk1OaHlyeFRKRldNWWpTNGRTWHNiVjJHRktNR0tMVjBETlVm''@;'; put 'put ''Yjltcm9VWDdXTXRXMUo1REZEeTY3TnQ0MkxBY3JzM2g2bzJwa2VLeTFlejJlVGdDZXJEQ1dwRnliUitXYXhvclVkQjRBUjBTTkZVV0JNTEdFSWJ2dFFEcGs5Vk1wOThiOEVZaE43WDdWLy9LcWNYVU00OTk4NXE3VERHMjdocjZnREg2YVllMVh2Mko0RzE0c2VKUGpqY3RHMmZLZlNDLzVDcXBF''@;'; put 'put ''ZFhMQ0M1RmhBVmdzUkhJeFJqM0RIS05WaVNLaDZpREZHQlZ4SHFwQ2FKTWdxM1FmaTNwVXR2cjl1WmErK1Z2YmUveWQ3V056clpsanZTTzNOL1pVSDBnbU8vdDIzbnhMKzQxajV1YkdxZW1HU0hHZzBPcXNIdTVvbldtc3E5a1RpYVpDbFZVdTM5Umt4MHlLalRXb3h2S1Nta1BKaG44ODZhRzZ5''@;'; put 'put ''amdBOFY4QUpBYTlTaHBlUFFYaDM2SXF4LzNBSTQ5Q2UvQi81VkkxRVk5eDd0emN5T1VLdWpTRFRCVVhEM2cwSFliOWQ0K2NUb3duRzhZVHA0YnYzbWtadVdjbnZsczUyYlNydm41WEUzNjNjdFBPZTBZNFhsMHcxbjltOFNvOFM4L2lWZENhcXNMa1dnZGNkcTUxakRRYjc4UGtuNVZmM0tQODR1''@;'; put 'put ''NmYvSVRxWFBqOU16R3l2Z29SMHBVeWVZSytURlR2ZzdLZ2F6L01sTFBKZzdadzJQVFVrbElGQkQ5Q3dJd0RoZS83MENQdi9jeUgzdmZqMDE5NEhCUzU0c0svcGIrZ09SU0Y4SEZDN0VFK3ozUWI2RWFqQ0YwVG1zdWxmSWU1YVhFNEhIYUtWeGhsQkh3MkllbE5KL0ZqYVBuRHp6NzNJYlM4Zk83''@;'; put 'put ''WjV4N0FPNVhQdmZrbW5zUTczM3dUK2pTb2V0eUFTdVFpa2NwZlZybXBrYnFETGZVWTJVaEJzK0VDNVE4Zit1clg3bFArN3huZ3dNZVZpeml0YkZNVUxlNmYxbXcreGVOSzJpc2IrMmZUWGc0N0cybWFwd0RBOENmeHJjcjdRWjIvRzU5WitxY1ovTFBGR2FXQzIvMkI1VnZ4Q1BrK2o4dzhHMFJt''@;'; put 'put ''dGl1UHpNRE91djBEV1Bmd3c4cmI1UHZibG5ac1k3aGQvdmZsNS9DUE5zbFpDdUQ3bXM3aVhUeGxTZjJRVzNIZDZ2SFFsQVViRDlNRDZuaTBiQnQxNW1qbWxZNEg1WTdIQzhZaUJYNVU5Y01QWTUzeWRqMTViTnZiRnppdGEvQ0QrTXVjSjU4UzkvZklIckFNTEFzSkk2TVoyUnZVRE1wVEl1cHhK''@;'; put 'put ''cDJVM0JjblA3NzcwS0Zkd0R1Ly8rWTM2WnlVNVVOa1l2bEZlR2c1NjJPVEhERHRRZ0lDRUxKOTZRdGJ4dmp6TXlTRHcrUVZhT3RsYlMyWXhxOEkzZURBWUl6WVU5UGVRR2J4eGgzazY1NlA4dmdpQWpKTGlKM2xNMjZYdllWWTBCV0FNWEZBRkZCV1NrUTlzSVNvaDRqUUJTZ3JCM2k5U0dpNEp1''@;'; put 'put ''aG1hRHhRT0dqQW9vaG1WRmIyZ2Z1MEhvUUtKSVBUL0xvcDJhMmxRWGlxSnhnT09JMkFXK1J4QTNKelRZUlhEWU1iYVI0a3BhMlg0YnR2dWJsNEtwSGVXZCs4dDZXdnY3MnJZeVI2L1Y3cnFLbGxTMEp1amhQN3pmdVVpeDJCU05WZ1hmMUl2TmhhM3hQWjBhaTBKU0l0cnBwZ01LNnVNNU5ac0dj''@;'; put 'put ''T1ZJcCt4S2RueXNjNndZU1JuZ3o0dEErQWhvRXBmcnVFTXNsZ05xdFRxS2J3Nk5UQjFQazRWL25YQWxHUGIxV3lUdzJVL2RyYTQrYUFBSk56VzRzb1ZzRk1RVHpzY2tLTTZDeDFsaFI2WVRaMnUzTk4rakJDNWNmT01ra3JLNDc0K2NQdDdZZDdtdmVVblR4WnRxZTVmUHYyVG5saVFpYjJMYmVP''@;'; put 'put ''akp6YVVsYzlRVjVVL3FPNlRobTh1cjkvZXJxLy8ycmdyMHJBbVI1NDVYSXhXT0htTVpqbnNqSFlIODhNRGQwKzBId2dQT0h1S0kvMlJlSEhuL0ZNUk9iYUxBT24rL3BPRFZSSCtncUtxNGZqMWNQVkpZVzlWUW5PdjNFWTAxYVZqbCtUVFhhSWp3VkdRcFZvRkh1TUlDeTh5Q1ZhL2dyUjFnSXhq''@;'; put 'put ''cFZZaXBKenJFWTBDbWk5TENBam1ucVhRak5kdHhwbVBkRWM0WUNkRWcydjRYNlAxMDV5aUVhMkFxMmFlaGpsbXZhVVRRREJPb0Z3NU1XbExXUHgyaTJuUmtadTNWSWJ4K0xTdzFtaVpXVThCblR6QURGa3VaMVFnbUhtdGVsQTcrcklnZXpvMURHcjNPWDF3cDhTYjNGUklUUjFRelJHeHhqazVN''@;'; put 'put ''cDE0dnpVYXhNbFB4QVY3eHp5RFB0dmFSNjR0WC9yTGYyamkyM0tTZk53dW1FNEQ5dk0zYW05cFo2eFFQWFdVeU5EdDI0ZHVuZW1zUnR2YVVzbTI2anVBa2NiTDVEL0FZODlJNXRzV05SRG5DaFNLbElDRlNOUjFNK0F4MWJBa2gxb1dnZjBzNnZHenNkckNMSXdubzFnNUNJSVFrUlFUZlByYndJ''@;'; put 'put ''NVRLRUFXK3lUSkI5WWVPcmQyT2x5SDh1MmFmN1d2OXg0NDgyRGd4TnlTYXNuWVBUbGUwcUkvb0N5RjMvNlFHUG5kbzl6eEdpcUtBSmNSNWUza3c3QWRSbUtvWTl3SG5TVVlyMWd3MFJjU1JMNzJFWGQ2b3VxbmlrSFZRa21TQ1R6TUJsaFJnS0c1dXFCa2NYSnRHd1doR3BZbUFjRlJHdkFRTXVX''@;'; put 'put ''bHlOVUhpdVBob013bnJKd0tCU2tXaGJiVmNYQTQ4ZDJ2SnJsVXF0WXJnTVVRdWVObGRXK3F4SkR1OHAycDdzT3RiVWQ2a3BmWFR3Mk50YlJQamJhUWZSS2ZkZDhTN2hzcXJDa3A3VTdtc2djN2UwOTJsRmJOYXk4YjZ5alkzUzBvMk1NNkFzZU9TbGg4Y1BSWisxMEtWc2xyUmN4MFlNck0zcG1M''@;'; put 'put ''VWhXTkt2VTI5YU5ic09kbFlzczg2TGVBV3JtQVFKY3lHbDNCbHcwUlVGVklSQ1V6NGtHN1c2WUtENDNXWGRUZTIzRHdNbVRCVmNsaVQyNXUwWDVFcTVMZFhjbGxKZEFvc0xWWEhab3B1ZmI1R2ZnditXanJYeklubXpDdklCeWtGMzFqMzB5K0tSd0N6eUkrWnpMVTlRMXliZm1XVmdXWGI4bWl5''@;'; put 'put ''NkJON0cvcXFxa3VLcXF1T1BrU2JJdFdremZGa2RIbHQ2aXoxLyt6dktJK253ZjJrK3RFaEdzb09PeWtxSFBHWXNnTUpiVzdSVUJLejRkNDNvRUFBSmlTMk9yYjRJT1lobCtuNlhJNjNIYTJlaWtkVG4rM0J5RG1CM3BZcU05MytTM2VrcE9idXRhR2ZMYmI1a04wenF4b29pNGwxN3IyYkdTRzRn''@;'; put 'put ''QjNjMW81a3RHRml4cWxMZHpVMG5IaFZmUjNNNU5ZKzROb0RZRTNkUHM0Nm83VTFQUE9leE81cFZpNmxBeFd3Zis4MVV2My9kQS84bVRQNzhmbHlxdnZUeDhCMWl6SFgraTQ2RVZHbDhsMUw5cTQ4TXdVMTlVVGN5b0F6RG41R3A4N0pPV3pKdWErdUpLOHFZYjZBV3FsODhUK0Z2WUFYSWZRRmM5''@;'; put 'put ''VjE1RXNCNnJGc2hERlk1K3hpQ0pnbDV2SDlUUmxXVTJKZEJJOEpuZUZlRXVFY1hDN00wcGxpNEtvSW9BOERCd3NSSFUwbG91WHMzTzliVFNKa2wrTUZsM2MxTzhQbk56VTNXZGZQS2thNmkyY2JMQXVhdEY0KzlVc3JPOVJ2bW05cGZvdDRiakRZbnFGSjlETjVOUk84ak9PTFdrV0xDQVh0SXNx''@;'; put 'put ''Wk9GY25xcWpleTVVc2o0YXAxOFhsWUlwVFZDV05zclVpbXN6NUhDcHFqeUF0RnZDVEZmamZvZEV6Q3VOZm1Yd25mTXYzZ3VuMytoTHNlWmdRSDJHdTJMeGNEcDZJL0YrcU9xd3pGd3FxL3Y5TUFDK0J2eDRXcnVlSENkc0JWMC9DeU1oL29jaDVtblNFeTVQZ2Z6QUVTQit0VTUzaHJGa3BON0NF''@;'; put 'put ''dzdySFVrYzJDdTBLbHovN1ZPblVLZW1samwwMUgvYVR2NFQzd3VaMVEvbUR0Um1QdkI4RUVRVnZ2QjJla1Y1dmcxZzVweFlrNlNmWTNMdFFybXl0MmYxSlc0UC9xbDBiZFgzSjh4WlhMRis4Rm9LN3ljSUZTOWRUNXJac1VKZkJaMlppbkJEZUllSy9NUjNCb3pyM2l5MUQxNERoUU0wekNPeHFS''@;'; put 'put ''Yms3a2Z6MmEyelowOGlmOVgyOEt1QWVVdG90L1BaYWg4K1UzOEEzaGVKZldSUGZCQUwwVG40Q1d6SlVBMTVWTzRVY29udmlibEU5NGc0MU9LdmFXRUt1WnYzNUpJYjlzVlN0U2xNOFB4dXFubWhybDRNamhjNFkrNW92R21nZVRSM1phcTBJNjJrZ0tmTDk4V2JJN1hEbFQ1UzZhOEJZVnVtOXVX''@;'; put 'put ''bDErUnFSK1lvajRYakhXQmZBaDhyaG81N3NVaVRUbURhM2lXMmhReVRSY3hBQnNRM3UzbDdpQnprWndWMUVjSzhYVTF1MW9UQmN4SUY5VWEwM2pCMDFvaVR3d08zbnpqalNXZWZKK3h4T25aM29tOUIrNjc3NER5SDBVVkppT3pDU0RQUHFMbmVzYVo5VVpWUFFNcVJyV2VPWEdsVjd1cUdvQ1ZV''@;'; put 'put ''SkxyR1ZmQUZXRHJFVGs4UkcwV0c1V2QrS2g2YWRLVURYRE1XNkJhUU5uZ2Z1VVNWVGE0VjYwaEF0OU5yOVVRYVZrVnpVKzBPMWowN3VUcEg4Y2RIL25RblQ4OUR1N1BlL0V0MUZpelhJOVFDKzNYNTVIc2w4OGpGWnc4Zkh6dWhrTW5uemh5NVBvajBPT244Q3o5WFhvTFg2TTh0Skx2QW8rVDE2''@;'; put 'put ''eVpKQjNXMFpRWHpTcEEzd0xKV2FSd09CeDZscnlVQXM0SVRTWkpUdnlSMjg3YzlZMFgzbjNUVFhlOThJM0hIOGVHcFljZmZsdjVNK3QzZVlnMFFiODJXcjFqTnRBaFUyWWxhdGVVVWZmU3Nmc0VkZlhCNGN4bDFBd1cyQ3hFNlFQdDNxSkFXY0xsK2VrZGYzUGZiVDl0dnVXTDFyeWR6b29FTVNx''@;'; put 'put ''MzRUdVhYcm1QOFBwR2VIa2RucmRKdnNtK2FiNUpvdm1tQkhZb2IrTEhzZkk3N0ZFR3AzRG5vU25sN3creDNPWHlMbnlZdklEOHFGSU9GYkI4SUZocTNPY3ZwM2xnbXN1Y1ZBVWJvMUc3aDlwd21vSk1nM1pKZ2JoRlFOSWdyaUZ1TDF1K2xLaW9TVGgvTm9xckcxSnhITnU3emRUYzVNYkRrVEIy''@;'; put 'put ''TnpXYlBoWHRhenBURXgyTzF0N1czRmRwR0RaNEkrRzdKb3VzNmVwM2hhczhobUZPczdubDU5RGZzZnpVNXJWODRFZk03ZHlwMWRWaGlOVjI0ZXZaUEFBL0JwWS9zdVVUMU9mSGpFY3htbFFyMGhBZXBTWG5SSExGdkdEWElnMk42VEJNSjRIQlpTTXdBUS9UVlY0d0YxS0VEajBVR2FKRE4yNmJq''@;'; put 'put ''ZUY0UXdQTWFYYmJsTUZURlg1WGRkcGFOSGxYT09LRmVWVDJOZDlXQy9PcU9kUFVGNVdXbDFFS1IvQjkrR203aFBNUVVYNkRqRThoL0x6eUcxYXRRVzFoei9KVjZCZE12K2F6MVRNNk9HcVFtVlBPRW10T3VtNjEyZ0ZtemlVdmlBVC9Kdm1NV3JyUWUxL0pkbUxYcWhXV3R1Q1grVE1xbDU4amVq''@;'; put 'put ''S01DbEU1eFVwSmNXR0J4KzEwNUZ0MDJNTFh5ZUNwTzlURUlrYkRSYXptTWtqcjNMa09wU1h1bEtEaGlCMmkxeUNFMWVBQjRLL3YyOVYrb0tWbGY4ZXUydTNsRXhXMTlZRUo1WlBwZUR4TkxISlAzdkRSVE9iSWNGNVhoeGl0NkF1YmxCZk5rZDUzYlhmaWxITjdrdFZwMHJ6cGk2Z1lkY3N5MEpJ''@;'; put 'put ''V09pR0oxazlMdUY4UGNSM0dFbUZMTWl3eW94VlBrc1NUQVloWHBCWGJuYUVnbUJicTNJWGMvbFNhVlppdTB2Z2xtSmJIa2VtbGZ4enQ3bTVkNk41eVc4bU92UDVZZmRlVFQ4N05wZW8rTVhpMjUzQ2J1dEozNitBblVFNXUySU9hNVVZWFJrWThBTkdseE1LU09SRVRjSm5BdUI4d3NUME52QzZQ''@;'; put 'put ''NGxMYnMyQXowMTBMYkR1SVd5dDZoVjhtNVBqckgzamhoUmZPUFAvODgvZjlrbWFUY2MvZ2xzR0RCK0VGSDZJcFpVYXJEQm5DN3lNWFdXMVJQY3RDUm1oaExmQXRXMUNZMFFzVVVYaDBnK29pbXFETWpUN3FjOTd2Q3dhTENrUEJvbWVDSWZhWERORy80WUtpa1BZWGVEV0M2b2tSZjl0V2dXTTZa''@;'; put 'put ''Qk53REwybTVrVUg4TDNrM0pYa1ZHa2RVQWFQS0UrVGM0TlhtbFAxU29FdkxqNndnN3ppdVpQTHNILzVaZEpPbmdCS0IyU0l3Tm1DejIzVW5ONUpMUmRMcTdQbGxEQ3pCRmp6ZCtpQ01sMVhzZlllYW0yZTY4UnRlMjdlZzh2cWQ3VzA3cWxmS2lkM0w5MEVmVGVqNzZIdjROMkF0RkxabDZNUUNG''@;'; put 'put ''VVZvemtGdjQyNTJJdEdTMHVpMFpMdlJVdExvL1JYelJjdnQ0TVpNWVBkdXBITkxkK0ZpYzVwSkR3aElZQkJ0dEo4QkRqMkFzRzZvNGl1WFFoa2ZrV2I3bVVycmVEeU1SQmdyTnMyZytGMnVnQjVuY0Zna05wcGlqbGVSMTRSWGxXUVNmZkcvTFNxTlZGVWJ5c284VHNMN1haSG5xdTh1MEFmRDVl''@;'; put 'put ''RUU3YThCcThqUDg5bWNnMmwyWDZlT05EY3ltZ2UxMU9heDlIcmZEL1A4Z0QrSmROTGZ0UXBkNVFCNTd0Z1lHN3F6UTRnUFNJQ0xkR2ptQk0xYmNYS2F5RXlSc2hmWHVoMTJsV05SWU5pbEt1eDFCS2lsVFFZM1VLREcxUWwxcnkyTUd0Rm95blhyaTNOUW13T3JNWkh1TU5XUVZmZzdCTEVZYmVq''@;'; put 'put ''enlQRFV3US8rWG1tYURlQU9RajZlR09ZRXhvTWx0QkRtOEFjeThMa29ZOXVBbk04KzZ3NTlHRU9ROWJDdkp6dHh3eDh1UW9HYUFBK2kvQkhWbHZrUUZ2bGJqdFZqUlRsQm9SQkFSbVFqaGgwQjR5Z0Y4VnBjRFBWcFNZOWQ1UllOT2V3T2FCeHZxcWJ6S0Fvc1ZiSWtxTDFUWDQzdGd2a2tGYlFz''@;'; put 'put ''b3dHUDREZlQ3WXR2ZlV0WHRseTU1M2t3cUx5R042aFBNWnJVZHBaRFZFS0cyVi9GUmIxVVVJZ0xBZjFXSUoxdU5nQkhHekhSQkFIU3VubUtjNzkxYlFhUk1CSDRRWHBybC9KTVRKMXJzWnNZT2oyd3RoOUxCZnBnRVlKMmdoaDNXMVgzS3FVYm1sYTFVbzQ5WTdONVBqYUZpQjlBdG0vVVVPK1Zr''@;'; put 'put ''RFRDaW5VRUlxQ0ZQcmQxUEx3ZEc0K1ZqWEZXbUZjRTROb2hRc3ZUZmwzSms3MldQVmxheVhWTy9uQWpyV2xWSFBSOEVSZGk4Ni9Xb0NiVEFjK3ZuTjFhUlh3RmF0QllueGVxY3JDQ2NaWE9JYy8xOEljUkk5dEFuTkNnd0ZaT0xvSnpQRnNQM1B3bjhHczhQbnk5MmdORDN0V25JOW4rZjNyK2dH''@;'; put 'put ''bXhsMDVNQWZCdXErQldmNHR3QVRaZU9KOFBNdVByNE1CYTRYamJEeThuN25sUjFhUEIyU3FDbDUreVdvYVNsQ2IzTHphMDVnMnNQVUpZNDZya1o4UGYwcnlpOW4rUkRjMHl3TzdZMXJKSmJDQUtXbm5KZVcwR00yZGxNRDQ0eC94Z3JTK3ZqZDI4SXEwTCtESHNsVnBPTENJaTVhK3dXdlQvbmJ4''@;'; put 'put ''YWNBQnE3ZGhlcVZPMVN1ZldZY25Wa1BDOEZTdjB2YVQ2M1RQV3BpRHVHb1RtQk1hRE5EMks1dkFITXZDNUtIbk5vRTVubjNXSEhwNmpRNmp0V0czUTd4U0FwWkFmRVpFdURZV2lvQllSTkxldEZmeTRvL2NlZWZBbldlSHo5NHhjTWVkdDUvTnZqK0wyT0t5VmpQakJSc1VSWGVwOGEwTDYwaGx4''@;'; put 'put ''RmZrTll0NkhSaGF2VERnWTFlRm5Lc1lycXI1bGdLV1NhRWxBNTVCY2RXU0l6Z1h1Y3RSSHI2R0tPYXVEOHJXaW9xS2FFVlYyQkZ4c0IwaTJWSnpLWkN0cXFjeEl2SjRNYTk4MVZGT2lHQlBrbnd2ZWMzNXZkZnVyankrTTVFRW1UNUkzeW41UlFXNHBpa0RrbzByRDJYcWxCODJaNGozMXA2Wno4''@;'; put 'put ''NjIxc3pYbmVxaEVsMHpyL3g2dUF4ZkV3Q3hmcVByU09kRXAvSlFnTnM2VmlQQzZOdWs4c0NqNitWcERjeEI5T05OWUU1b01GbGJ0eDdtZUxZZnpZN2x5RGYzbDltejJ0Um52YkM2bjV4NksxcEhsSkJqd0JWNkhkWWZFTEc2ZkpiZFBBcG1LOS9qeXZmYXZQYXczeWF4NmpKM01xZnFLcFN0dWpw''@;'; put 'put ''MVlhWHFTaDVqVlZmSFdoYzZ1eFphYnZwMVIwTkQrK3RxWFdLU2ZCZGtmdXBaTS9qdE5IZmxCNDRvQmFVdlFNQXhyeFZUZS9qeXNJalZsSFd4V2xZNW53WE11VDBsbTV4QmY5QWZEN0RWcm5YN0ttSTRwUlU2cFRSTFFKTmV2YTNYZG5jZmJFMG1XUFh1Y0txK3M3TStWVkhkMWxKVDAzcUtHSnQy''@;'; put 'put ''MXRYdGJHb1lMK1FWdklkcDVlNWNZN2lxb1RHdU9EbnRlYTNCSzREckhqRHVCSFZQYlhSZEFCcmNrM1A5a2dhUHBiRmMrSmV5MS9NR2NxOWZ6UFkvdHpYbnVoRE13cHRQYy9tRTY4Sjk0Q05Xb3dZa2swT0RUNXJvaWtwRk1SRFZCMzZBRzV0SUV4Wk44R0RSS0JBa2lRTmdxYzBBVTdZeEREWkw0''@;'; put 'put ''RXlZSlFwbXVZS3ViRmZXVmVsYU1NTUdZQ3NReG8waHB1Zy9Qc1VZTW9uRU5HbUFtRkNVaUhnZ3owaW85OHNUK0ZhelJhQk93MHBkQTUxeDZuSk5MRGpiWU5DS3plYmN4cGEvL25tMi81L25VV1ExZ3N6UzV2TWczYUprdU9MV3NyeTJJVnBwUnZlRnYyTVhETWx5ZVNxVlNJQ2pKYWN5cmMySmhr''@;'; put 'put ''U3lyaFo0TEU1RG4xQXdsSi8xdXRac1VQRG1iUGxneXpscjF0WlJZenZPNXNKZjVPdnNIWWZENVllNzloNWZxWU5wdXJxMmZYZFJhSC9MMnNWMzVmT0R0RHltcFk2dnd0ZFh4NU5UUTlueW1PS2llRlZsZGM2aXZQSTVPZUYzMVFSRDNBNVdndTlNYXo4YTBHTnlTUkRyZGNrUUVmVU5oVUNmQWd6''@;'; put 'put ''QmNSNUlHTVRHUkZTalJvZ0tSR0QwbzBnRURTUXlWY1hpSzE3SnNoY3NsUTlyOUFwUldJQzc3ZkxBY3NVNk9IYSt3ZjRzdUo2dDVZZVplOHZ5MUxxLzByR2x0U2o0S3dmeTEvdTFCWjNYWlRhcVQ4R210VzZ0Y2ZpR3JuWGxLbGs5RkdONnJvL3J2Mm0wd1hXcS96NlFjLzJTQm8rbDdibndGN1A5''@;'; put 'put ''ekhIOXQvd3R0clpKKzNtWjkvOXVEdDhOQkd6THVYN1F3K0YvQ2RkTFdmOHY4LzRmNWRkZmhldGgxaitIbjN1UTUrSHFXYTNOLzJTMVlydGtwNDB0cDJRUHZuQ1ljQjh2eGZCb0N4MzJWZFhBZElFY2c4WEVaRDczOHBTY1Yxek1hOEhDSWJwSFFuTlJzdTVKZU1YbHlsMFB3bTlzNzdsbGVQaGtU''@;'; put 'put ''OHRDMTU3TzhPU1JzdDZCWTUzVDVhMGw0K09kOHZoRUo3RS9kUFgyc3dQZE53MzFIc3NNRGZiWDlaY25heHFpL2I2bHYrem9rcS9hMXRsOWxZWWZVc0xzeVRpM0p5cGQrTG9qeGRzRXgrZmhqYTVUZWoyVWMvMlNCbytsZmJud0wyV3ZyKzcvWXJiL3VTbHVsenJRTmxKSStsbE8xVWYzVFFEZmEz''@;'; put 'put ''VUZpS1h2a0E1WWZwSnRJSk5BRnZXakxGejIyWXJBKzlBeXJRYWF0OGd0TllDb09YY0hHYzZQeGtxTG8xVWxmNkQ3M1g2b2ZzQmZwbitqeGFXeHBvV1h0TGN3Sm0wTjFrdHpzRmxmMXVzaU9oSUpGeFhxOURxemdhaStMTDBxckZ6ZDBKY3QzTWlYelYwMTNNaVg5ZnY5VmY3SzBEdjVzanF2dW1Y''@;'; put 'put ''U3cxeFpDZFJsUER4MFptQjRTOUcrN29vSXZCdlpXclN2UnpsWC9IS3dNdG9mKzA1ZnpQY0RmeFIvY0U5OTMrbUJhT2xJYURvSkVod3JHLzFsL044OElNT1BnaERYeFg3dnB1ZkhzTFVyU3Z1ZHEyUjQ5ZlVWR2ViWEwybndXUm5tMXk5bSsxRmxXRjJQb2Yzc1VmdTVOMmZObWRlNWZUeTNWSEdU''@;'; put 'put ''dXNQMTY4NmIxQjF1dUVDOThXMjFCSkV1VVA5M2xSMHF3dnlhc3NNc1RpNnFPQUZjOWVYbXpUTFpQTlVDZW1CZGpNZDl3bk5abjNDaEo3ZnQ0V3oreW9nZTNLVHRON0orbzNGVTNaTzN2RTJvZ0hpZ0FLU3pYVzRwd3BLdUFJdVlEQmdnREFFU2t6bTJIVXZQOWhXd0ZWUzFKS3V3c05CWDZBdjY3''@;'; put 'put ''WGE3eTArekwzcWVWRXdISW55N1hwS2pxVDZOd2QrdkNOZlh0YnZMR3JLNzk3Q24yRmRRWUZOK2MrTEVmV1Z0OVVFZjN6M2s4M2dLYkRqTk52U3A5WDdiU0MvSWFneWwwUXRjOEh3bFdLY3ZoaGpDZ3cxQ1RZSVlEVWFNalRFc1lmQkVONzhMNWx5VjNLaTJSWk1wSGJDNGhZTjBEUUhQaUlUUFVr''@;'; put 'put ''MDBzUktBeEhwZ0ZueXdKa3krdmJrTnBtUkhQQjVQeHh2RFFXY2dHQTY0L0hRVklvdWJUUXFDUVl2Wk5YU0ZjNHFEU1MvRG0zbDlnZkRjTFJ5QmY5RUtoVGtXMXhZSzArSmhodE5QYWdYRGFxN2dZeXhPREt0eDRpL1d4WnU4UHBiSzdsWlZkdS9PNWhrK3htSlYxaFliMFBsTjJsNVMyeEpzR09W''@;'; put 'put ''OHl2WVlzcllSdGUzQ09qNk5ReHhqSmk4Q1RDK0R5UmQya0Q4aEk4QThULzVFZ1FCR3pSdUJCSnpKMXMyK0MvUkpFWXpwTmRua0FNTHJnT2JhS255WW1oV01CRDA2QVB4cnkrNzAxYWhPc0ZZd1JiVlBkRk5vdEpycVJGTkRxMXRZTDl0aUZmQUtuQ2lxQmRHNXdOVDlkdmg4dnJBdkZLTFZDdUdB''@;'; put 'put ''dXFRVldGOWJvaFl2b053U2szZDFyS294ZWVpaGt4M0t2MnVGSnAxTGY1OVRaL3YrcnFhbXBSL242aW1lVDh4azg0a0xhUDg2T25QZjdWeldkMXRRZGRtYVhDUTJvUjlzMGxieit3U0FlWXJucUVEZWg5blpHS0NOaXJFQnMxMU9lbEhIOTFXcUoyTFErbnVKU1NFZ1VSTTlwb3U0TmxxUk9McExW''@;'; put 'put ''UHNmMEVTTURET3hVaDRqZXVVV25uSHY0ZUxFcFloY1dLUXBkeVk0VEFjdHNKcmpFSXFqTTdLRFJnd2hUUFFHY0FCQnR5QzZ5YndJK0tBU1hIa2RqUFFBelZScmxGV1BOMkxsUXN5UFpGWXBwSUd5T2VOOUc3VWd0SFF1SEE3SHd6RlBoVE1jRElSWWpsdFM1K0RWVk1yYTZtWHE5eU8xZ3ZtMXJS''@;'; put 'put ''WTZxMkk2WFoxdGRTRnpFS0l1NVM5cVFGWHN0VHBoc2htWXZzV1JVOVFNNFJXZVpYWE5HK1NoRFJ2a29kZjYrUWJWUjJCN1o1bU5pcW8yNnF2cjJ2SjZZMnFqQnJpTldsVGJLcS9UZmJlOExmQktQdkVqZmtZSHdBczF5SW9TcUFYOW1VdTd0eHBMK2pLc00wQW9wL05pSXVqb0VTNm96OGZ1aUJ2''@;'; put 'put ''Y1VhMUN6RXlYY1FTRGJ0NklWelpoUzVKK0JzSm9xdmExZmIxT2tuTncyL29tSml5S2R0NFFyVzBtVnlOa3BPZTg0UGxzMDh2QTAvaTdwb2Ftdld0YWFwcFR5ZnhFZmlKV0ZmQVhGN21kTlAxZFlOSDhZbm9jQUhlRjlYOUZSVFF1RFFXclFpRmpZU0JVaUlWM3JJNGVxZ3VYZGNhTEE1VjAvYnIz''@;'; put 'put ''Q2txbElmNzZPVEI0Z3VrUnZnNndzUHp3dXJXQ253Qk1KZE1qUEVaYitBUmYwMjFhM29ZVTBBVXV1ak9Vcm5qUzQxY0k3cytlNDhJTHF6VHA5L2pabmlaTkx1aE9XRTNnRlNidnVsT1cxVkt1K2h2VWhpQjQxcmZaV3I4ZkhaTE5idXIyKzBIUXFSRUowSlZqTVljcFZPOCtQeXVzakxhbExMUlpL''@;'; put 'put ''VkJlQXpCRnQybVZseFpCaEptZnQyR0pzbE5kbGsxN2M4YytyNVlMYktGektQSG1uMnpqazFncEcxZ0t3M3hLYXZQMCtOK1czbEpucEs3bG9HK3RyTUdBampXdHlRZHJOY1Q2N0w1dSs3cDkzYlEwV0wvMEZ2UTNDbko0bnAwM21lQnlpSC9QL1grNEhtUHlPYUplZjRKZnAzdXBtWjlSby9vWnpu''@;'; put 'put ''VXl6K0o1NFY2QUdWVmhQT2c1RHZPY0JzUDNaTCtvOVFQOWY1LzVCRGpISjZEOTNNbGdSamVHNGZzeVNCL3dVeDZ0dkxXWVRVWlJEeEpJdE4zcGF6WjY1NkU4dDdiUk95V2wwclFZMnkyNVNaOFNBUC8rMUtuRnhiY2lSeUo0aS9LZm1hTWQzOUgyZlRTdyt2QkJPYzlza2tScTZRMElhMVhpWm5o''@;'; put 'put ''clUvZDBac3V6VjdaNSt0Z25iYkZyYXVxTGJsYjdneVV3OStyemNjUDR5YUdoaytONGI1Vnk4VC9EUjhKNFF2bHRGY3F1V2QyaHJWa0JIbC9mQ05la2hQbDA0NnRpL1RHZzN4Y1pYZXRVL1dybDhIQzloTmcxZU1EcFJiVHlyQlBaOVRFRCt0d216N3FVelVNWTlxR2NkYXBNZHAxcUFUMjV6Z2Zr''@;'; put 'put ''OGZtNWJDNWhZUkp0dEo2R3JXdlh1TlMyKzFieUhOaXE3aHNDeFN2UVBiWU9vRktMbk02ZU9HRWcyU01uakhScnZWYXZ4eUxDRW1leHg4V0tlcWxyWWFJRkxwb3prUzEwY1dQN3luYnZIZXJ5L1F1emRCLzhMT2xkZXFzcmMwak9ITTd3UmZ5cFQxdzk4K21yRjVVVS9sN21zQ3pQTnpNN0JtTVdm''@;'; put 'put ''ZzcrQloxWE05b3VqM3N4alVUME9wcGUxd3NEd0VNNnZVRjN3R0lrb3FpbEhNeVNTY2hKT2lTVGdRQkN5ZVprVTJNcVVCK29pMVZCZDM1bk1Cd001Y0c0VnlkcFY4eEJqdCtnVzNPT2pPcERDSGs4Tzl0NUpCdzVLdk1DODh6UlNQQzZqT1pJS0xmbDFKdmpXMWJ0ajJxc3EwM3pDdlRHbXRvVWN5''@;'; put 'put ''bDB1VVhvdUo4NkY2cHZjWUxSTnFYeTc5UHIrSUxYUDFQYTd1QzVQelgrN1FVK1BjSDRONlh5NlNzY1hubWQxa3VyOFBSNlI5WS9QY0g0TjZYeTc4MGJQdXQyeHI4N09QOGErYlBZSG5nMnprWjFuQStzNDMxZU4wM0hlUlVmNTI1dC8zdzcyei9mZ2Q2V1MrckFHYWt2S1JiMFVoSGRmWWgxdU1B''@;'; put 'put ''S0xra2VLOXJnZWVmNDZub05TUkpud1BQMURLS1ZOTWE2Y28zcU5lVWE3OWlvZEYyTmgzRHFuVnF4ZGNPTmlqWFd0K08xR3VaUWRZU1dhZGdOVW5Fc0tHNmF5YjZDUXdKSTc2bnJOOGhwZXg4NGVKbHpBNjVmRkN2V3BMWXRzNWM3UmtDdGYyOW45ZTh5WFNlb3c2Syt2cFRveEpJaWduVGdMaUdn''@;'; put 'put ''RnhIeVZxOFQ2Tmc2Z2JaU3FkYXViTEpPb0tObmFOMTJlV0M2VHJBR1RsMG4wTUJGdnVjdlhnbjRaYXVnbDBFdkxhaDlwNHA4L0lPOW94dmhOM2xOK0hKbCt0c21wVFdMQjJreFVuYlp1djBjZVRxaHlSUEk0dVFtOG5SSmt5ZHNLT2Z5RkFSNW9tYzhsS01YNUh3dlVNUmpBWXFZNlhtVEtrVmlH''@;'; put 'put ''a1VvNnNncG1nQlU2N09NQnNMOHMzV0VpV2NSZmlWdDVLbzE0Q3A1MXJYU1VUTFpZZGpscUp3RzgxUWFUQ0FNZm1rVFd0RWdueDRYZ0dlZDY2bmhLNlhuVmF5cEl1ek1IbC9COWtPMHMvMFFDZlJ0dWFBS0c0U29teGdOTGt5TTJhSklmVmJONkhYNnN5WU1BOFhHbzJCc0FNTjBONllnNktaRnZp''@;'; put 'put ''ZVQxejRpWDNaWnNucWxqY0ZJYm51blJuSjBZM2hXV29uMjV6UVRLSjdvZVFZSlZNMDJhWGdCVXpUcm9kdUVvOWR2M1BCU0FjQ3BkUnlja2xmMmNnUjhjZHZhS3N5MGFhdzVkM3ZIUklFbHhQaVBuU1hDZURTdDh1ajZYRWdKK0IwRnpQK2M1UDRudVdhZGo4cHJPRExaR282RkRXd0h6NldmeSti''@;'; put 'put ''U3Rad0tiL3R5dGtaRXExSE1yZjlnYlZsdEFNdmJBOHdkRzlXZ2dOOTAzNFp0aDFmV0FyQzFENm5ub0d4ajU2QUU2TnFOQzdRK0xSck9vL3NxQnRSVHBiUXp4MW5PWFF0MjJKYS9RTEFnRUhUeE02Wm9VTG9tYzdIbTFCVHk2UERkazdac3VzSXhmMG85UFlWY1lHZWxXTDFxZ3NKZjVIMzRXTzVS''@;'; put 'put ''S253ZnpqWXlDM0ZNQ04zR3cza3JtRlFCWW0xZENBTjdEZmhXWFNEWlZad1N2YmJEYStQMHI1L2Y1eWxmYlVWblRjYlhIUFE3QTY2QXkwK3QyN3BVNzhyV25hUTlteE1uc3l3aXpjL2R5bk1TNTBhbmF6ZjFhSkVkMElxZDhjTDRzWVhYQytHdWRYekU5KzlRbmJtTDhZS0V2cHRUSTNSQ3F4R0M2''@;'; put 'put ''N2V0YTh2WEtDNXBheFJZbWtBNWJZOW42NHZtMEEzcitJaWR3Y0o0clgzVGVrYStiNGJ5MmpUM2o0NmduTGJIdGJZYjVnMTUyNHRxVzVvMy9HQk8yeFBadGh2bHBuamJTOXB6c2FHQm43MUM5eVhUR0RpZjdzaWdGZjEwbnhNWlFPcW1JYktYZXR3K3h0VDV5THJSa1dWaUlEOW5HL0hURyt3ZHBy''@;'; put 'put ''WDNONU5MVjNpZWlwZWVwM0orNGVEWThOQW91WFQvNk9qR2ZXVDNkUkYwRnRqeUJuVlhsOXBIT2lrRk1xTkR3Mk1IRjhpbGtaSDcxVDU2b1k5dlFIU3I3bWd3RWJxbllZQ0dHbjBiMWVEbklVdEl5TzVvVUNmTmdva254L3d0cm9haW9nWlhTL2w0alBUNnkxdGNYaTk4OExQbkRLRVhXVDRseko1''@;'; put 'put ''ejJmcit0YnNsdEIwU0t5a09kVDlHTHdiOXh2WmpOTEZlNlNaV3VpTmhIcVFVWTJFeXU0bFd1S0pkR2JuZlczQjdaMmQxUXBZVDN2SnlyOGZ2OTVEZXpnVDluT2hzOG52NFJiN1BZQnZXZzAyem94WTJnaG9yVENhZmNnejltb28rOWVRZXdPa2swNFlDdlVPbmFrZTJvRWVuN3N4UXo5K3ZXRkdJ''@;'; put 'put ''cDlwTHZNTmMvRUg3UGM3U09UNG04Smt5UnJja2FjUHZKeStCWEhleDU2YnBma3dqMjkzbXhyalBnSVZlZGlqUkpEV3B3TVB6MnRFbFJCamx1eFdDSWJiWmpUNGYwY1B2MlZIYTNBTlVhU29Hc0NWUTZIQ2JIQjU5eHBDc2NXc2Y1UHpkcE4xdXM1aDlwVWE2UThoaUxpNDEzYTdTSkVQWGlkaTV0''@;'; put 'put ''VVY4NTRVZXVMS1BocVUzT0IzWnZTaGVLUkJTTjVmZ0hjZjREcE8vOGR6QjVLOVJlWDM1dWVWdkl5c0tzaDRLK2JuenEvZTVCYk45Q2FzUG9QOEt6MStXaElKVnlqTFBUYkk4SmRjcFhGZmVvZWxLMUkwck50R1ZyMmk2RW5VRHhFWnREK0luMzdIdFFkeVMwL1o0dHUwY2JscW5LM25iaTltMmMr''@;'; put 'put ''aHJQRDVkYnFGblYrYXVuN3o5ZSs1THZQMTcxWmVJTERmVE5RbWVaMmN3Rjk3K0hWOG5lL3QzS2d6UDF4L0w5cE9IcnQwa1gvOVNObCtmTjRJMnJDWHRSdS9aeEU2OGtsM0w3bGJqM0RyME0yTEJ2ZTk4N2o4OW03ajNvTlpHYUwrQ05vTGw3VGUxTmkzNEEraFY4Z1R3VFRIam1iNjFtd281enpp''@;'; put 'put ''MTFEaFBybjUzNVFzTHlOMnJ2ckdBemltRDcwZS9JQmRneHZrMDY4ajNDSkxTN0I1QmVDYitQbnRtQ2FxUXkwcXN3T3VyTm9VSlRMa0ZDNElPZHVMWDZtZnJOeDBLTHQ5a1dNR2M5M3g4K0lmQUd4RStQamJPUDhBNEhkbHhNcGV6Vk12dmpxSHplQkkvRGxDYjdMR2k1d3V3UFZacnpoZDRxajBZ''@;'; put 'put ''YkE4RTJNLzVZRnVRdjROTEhFL3R3RGRmUmg4RTJrTlFZd3ZBNng4WUQ5dnh6d0ZBb3QrUG83czc1L3R4TW1nUW52eGJYbFJWbDQvMVZ2NzFOUVlzV3JESkxKcHl2L0xHbWVjUXpHWmh4bTYwU2JyY2I4cEp2VU5EOXEwM3ZMVkVXd3ZxOStVMGI5aHVnMi9NV2RjV29wSEdvU0ZaMXI0NVoyaHk2''@;'; put 'put ''S3FKTVhsUUh0amFVNXVwN1docTNQQmJkRnovaFcvUktWL3pPWmdEVzk3NFYzL0REaDVrZitpSDRWcmxjOXIzN1h3SzNnQnM4TXEvZUVkOVAxYVQreVU4SzEvR2c4SFRyOGNSL0cxNkt0RXplb3hyWXhuc0Jkd0ZIcG05Ly83WnBZdWVwNS8xOHYzQUFCZlQ0QVFHRjBsN3BRaEFQZkpJLzdOUGV5''@;'; put 'put ''NStqOW1EMzZubkk5ZWdIZktFRDZoV2pIVWlvV1VrR0pucHFmUTZNSGNRYlI4d1ltTEMyRXgzakdTM0NWbFlEU3RQUGNGckRVckVZOUVxdXlNRTRhSGRHY3FEVUhMbDJLY0l4STdjV1U5MmtKVmNDQzB2QTFSNy9Td3h5bllJMWI5bllPVGVlZTlZRnhHNmR4VE92M2RJM1JXVXVhNE1pOHJQOVFR''@;'; put 'put ''SGxEZEtGN3ZuMkpIS25jZjdlajNtUWs5dnorRjJ0aWVvdTZtMzBHUDI5SFlNMGU5c3dVV2tFTjhKdWs1OGh0QjlHTTdzYWUxMzBuUGFtVk1EYm8wQW10ZHY5eE5oYVluKzVwd1J4cys0TUR6cmRlYnBTZTEvL2JDSnQ4WTJQR3lDMTJIQWMwQzM0MXAxcmVBSnJUNERybjlEdmI2eVJzdXZYOHBl''@;'; put 'put ''bDQ3blhyK29YVWR6QjNPdnY1SzkzbjBxOS9xNTdQV0ZlZTFzdEcza0hwWWpUOEM4SXdFbmhubHZYRllEczAvbVZOUGs0T0VlRm5SWmM1RnhranRkZjFKeHdtT3ZYS3lvY2RkamEzRkQ0MnlPRzRpelA1MHo5cGV5T01pN2p0dERXcnIvTlhaT2owYnZwRDJ3VlR0eEI5TjZPTGl2WDM5ZnZ6U0sv''@;'; put 'put ''aC9pRXp6NkFBRUFBQUFCQUFCVkVyVCtYdzg4OVFBZkErZ0FBQUFBMDhHZGhnQUFBQURVdnFiMS96Yis0d1NLQTg0QUFBQUlBQUlBQUFBQUFBQjQybU5nWkdCZ1B2ZnZQQU1EeStiL1p2OXpXTG9ZZ0NMSWdORVFBS2NOQnJnQUFBQjQybldVeldzVFVSVEZ6NzB6RkVFSTJFUlFRb3pHWUV4TXFr''@;'; put 'put ''bTEwV290YVdwaUJXdnNScXhZRjFJWExsUzZVRVFGa2E1RVJWMjRjMVhwMG9WS2QzYWhDQVg5QzBSUXV0Q0NDaFZLb1M2TTV6NHpFcE9hY0RqejhkNjhlMy92ek1nU1RvTS9PVXBGcVJRcU1vK1NUaUdoRTRoN1JhVDFDYlpJQjBweUJUM1VObm1BTGoyQmd4emZMeGVSbC9Yb2s5bjZWMzNKNDl2''@;'; put 'put ''bzFGUEk4djRtdlVtZHhRNjlqbDA2aW00OWp3eVBDMjQ4NStvd2l2WWMrbUZaUWRpN3hIbUxDT3NNYXZvTU9WMmgzMENWZFZUMUM4OC9vaW9oREdrYzYvUXBqdWtCbEx3enFIaytsZUg5ZTZnNmYrem14TGxXa3M4YjBoK0krRVZzMU5mWXdIbHI5QzY2NVJxT3NPWmxlazRXc0ZOcjlWOHl6cHJL''@;'; put 'put ''U09rZFZEU0I3ZlNzamlBbEU0anBKR3NmdzRBSTlvdlU1N1JBSG9LeTl3Z0R2RjdXcTI1OHhlYklmVEpjd21hWjVMd3hzcXloMDZ0eTdUd2k3RGVpSVhUSlF5UWxpWFAwbEx6Q0huSWZkR3ZlUXQ1cWxEbldzcHYzM3BHeDFUWEZQUUQyU2RsZHo1SlhnbjJGblJiL2xaL2tHc2JQMkRWSlF2VzN4''@;'; put 'put ''by8ralpyM29rZ0g3RnFsbVFaTDQ5Y3M0MGZPZXBJeVZxdkllMEczWHNpdVdlVDJ4cGpSUDFNZjlESUtmOW0xeW5KaGJ2eWFaZnlNczduMWEydTJ1dlZ1NndkdU9lSytXTC9NY3RieHNKcWEvWGpUdVdYTjlydmhaUFdKOWI0bnU3MnNINDRoKzNBWlpBNHNoKzQ4OEhIRVpBUXhZMnY5dGJseFpX''@;'; put 'put ''K0IreUhrL0E3V3lkeGFkdHFjV2JZOHRUbno3VElXdU8yUE1mcVAyenZnY21oN2FQd2E3NExsc2RVdDR6TEQ3RFdFbi9SUmFwQ2E1WmhEdklaNlQvRE1WbTlqMmxpVGRjTmIrUE85NFRPQmFVRDdrUGN1OE5zUlJhLzdMcXhGTDlVdjArUzE3TDRWOEo4akxjUFlTbkYvNjk5ZFBqek81YjZ1OHEr''@;'; put 'put ''Zzhoc3BZOWZPZU5wRndsMUk0bkFBQVBDMWx0K3VNcHRPOTNIK042ZWJPN2U1TlVGNmtpUGlDQi9paUFpSkhvNklPT1E0SXFLSEl5VGlrQjRPa1pDSU9FSWlJdUtJRUxtSGtPZ2hZa1FQSVJFUlIvUWdJdEpEeUNFUjkzSncvSDRRQkdYKzJZYjJ1NkN1TkV6QTMrRWorQXB1ZGYvb1B1OXVJUlpF''@;'; put 'put ''UUpKSUR0bEg2ajBqUGNzOTV5YkJOR1k2TWI4eHA4MFo4NnE1YkRZc2xLVnQ1YXpMMWpQcmkwMjBUZGoyYk5lMmhwMndqOXJuN0hsN3hRRTVFbzZDbytZVW5XUE9ySFBQV1VNaGxFUEgwVlYwRXpYUVZxK2psK3ZkNlJ2dVcrdjM5cy8zWDdxbVhHVlhlMkJpWUh2Z3dpMjZsOXpWUVc1d1kvQVNZ''@;'; put 'put ''N0VaN0FBenNJNkg4MHg3Y3A1clQ4dXJlMGU4Uzk1VEhNVlQrRHBleE12NEZmN3FZMzFydnJ5djd1djRIWDdLTC91VC9nLytMU0pEckJCNW9rU1VpWFBpbG1nU3IrUjdNazFteUJVeVQ1YklNbmxOVFZPZnFTeFZvSGFwQ3ZWTXArazVlb0Zlb2RmcElsMEtKQUozZ1hyZ0dVREFBYnlBQlRJWUJu''@;'; put 'put ''dmdHRlNCQVc3QUkzaGlFc3dKYzhIVW1BZW14WFRZSlhhVjNXQjMyR08yR3V3TC9nb2F3WnRnSTlqbUxKeVBBNXpCM1hNTjdpVmtDWTJIYXFGNjZEbHNDcnZDVlBpSmgzbVVmOGNmOGxXK3hqL3dMUUVTWEFJcjZNS3NVQkxLd3Fsd0tkd0tUZUZQeEJiQkl1R0lGc21LaUlpSlFJeUtDWEZNbkJU''@;'; put 'put ''bnhjVzNxU2dVZFVXcDZJRTBMbjJVRnFWdlVrSGFsWTZrTStsS1p1Vk4rVUN1eUJkeVRhN0xIY1drZUJWVzBaV2tzcUJzS0JXbEdjTmlrN0ZDN0xjS3E3S2FWRlBxalBwSi9hcm0xQzMxVUsycWhucXZOdjdURUkzU1JyVkpyYWo5MU82MHB0WWNlaGhxNnpaOVdjL3BSZDNRYi9SSC9VbC9pVnZp''@;'; put 'put ''N3ZoVWZEYitKWjZONS84Q0RCRE15QUFCQUFBQlBBQm9BQW9BUVFBRUFBSUFLQUE1QUlzQUFBQ1RBbXNBQXdBQmVOcU5rc3RPd2tBVWh2OFdOS0RHS0RIR3NPcktHQk81cWVCdFlkU3dVZFJJaEswZ0ZSckJZaWxHWGZvMmJsejZERjZld0kyUDREUDRkeml0TjJMSXBKMXY1dnpuUHpPbkJSRERP''@;'; put 'put ''MExRd2xFQU8zeDZyR0dPcXg3ckdFZFRPSVFOM0FxSHNZSkg0U0hFOFNFOGpGa3RJaHhCUmtzSVJ4SFhUb1JIc2FUNVBtTW9hUS9DRTVqU3c4S1RpT2t6d2srWTF1ZUZuNUhTTjRWZkVOSGJ3cThZMGE5Ny9CWkNYTC9ETm15MGNRTUhGdXBvd0lXQmV6NFpwSkJHbGxSbDFLQ3VvVFFkY3BGemkx''@;'; put 'put ''a2Q1bDRnZ1FKTTVqbkt5V1lmZkpWSmxVWGFVcnMxSEhHbmppNjVRbldhbVNrMTFuR01YWlN4VCtybnRSQjQrVTZEVmpSKzFTeHg1VkJycVpNYjM4NHdXTjBTK1pRNm0wcXZLd2QwTVRsNzJUWEdLdVJEeHIzWUh1ZmFQMzN6ZXUxeXRZWWt4OVVQWjF2NXRnTFhCR00yMTM1T1I3THFqTHJjN2ZJ''@;'; put 'put ''citab2taNzltUzkzMXEyYXk3ejM3N2YzdFpaazdWWndwSHpmb1hVRTZtVmRSZ3lPcllqbWVNSTFWdmhleEhQeFBPWnhUWjZvNmpueUZmT0JZeENWdllqSGlVTlA4QkxoWmg1Y0FBSGphYlpOWGJCeFZGSWEvMzdGMzNUWk83NzFYeDE3M3hDa3VhOGV4WXljdWNlekVTY2E3WTJmeGVoZkd1M0Zz''@;'; put 'put ''dWdRQ0hrRHd3alBsQ1JDOUNpUjRRS0pYMFhzSDBYbWtCKy9jQ1Y0azdzTjgveG1kODU4ejk5NGhDM2VkRzJBZS83TlVtMzZReFF5eXljR0huMXp5eUtlQVFnTE1wSWhaekdZT2M2ZnE1N09BaFN4aU1VdFl5aktXczRLVnJHSTFhMWpMT3RhemdZMXNZak5iMk1vMnRsUE1Ea29vSlVnWjVWUlFT''@;'; put 'put ''UlhWMUxDVFhkU3ltejNzWlI5MTFOTkFJeUdhYUdZL0xSeWdsVFlPMGs0SGh6aE1KMTEwMDhNUmVqbEtILzBjNHpnRG5PQWtwN0M0bmF1NG1wdTVnVHQ0bit1NWxxZjVtRHU1amJ0NW5tZTVoMEhDM0VpRUY3RjVqaGQ0bFpkNG1WZjRsaUhlNERWZTUxNkcrWVdiZUpzM2VZdlRmTStQWE1jRlJC''@;'; put 'put ''bGhsQmh4YmlIQlJWeUl3eGdwa3B4aG5PODR5eVFUWE15bFhNSmozTXJsWE1ZVlhNa1AvTVRqeXRJTVpTdEhQdm41aTc4NUo1U3JQT1ZMS2xDaEFwcXBJczNTYk0zaFYzN1RYTTNUZkMzUVFpM2lkOTdSWWkzUlVpM1RjcTNnYzc3UVNxM1NhcTNSV3EzVGVtM1FSbTNpUHU3WFptM1JWbTNUZGhW''@;'; put 'put ''cmgwcjRnei81a3E5VXFxREtWSzRLVmFwSzFhclJUdTFTclhacmovWnFIMCtvVHZWcVVDTmY4NDFDdk10bmZNQ0hmTVNudk1jbmFsS3o5cXRGQjlTcU5oMVV1enAwU0lmVnFTNTFxMGRIMU1zRFBNZ2pQTXBEUE13MTNLV2pQTU9UUEtVK2ZsYS9qdW00Qm5SQ0ozVktsZ1lWVmtTMmh2eDFvMWJZ''@;'; put 'put ''U2NUOWxxR3ZidEN4ejlnK3k0Vy9MakdjaU5zamZzdlExeGkyMGtrUmc4YXBDaXZwRDNrV3RtRitLSkpJV3VHd0hVL20yLzlLZjhpenNqMnJrUEd3WFJRMmh4T2pvNVpKTFJ6T0NQd3RubnZVWTR2bkV6VXNiTTJzSE1rSWZHMVdPSlcwZlRHRE50TXZadEJ1WHNaZEZMWm5lc1F6UGRwTmV0eUZ2''@;'; put 'put ''OE9iSVdFWTZEaWRpZzliVG1vMFpxV1NnVVJtNU9zMEhSelRvVE96ZzVQWm9kTjBjQXk2VE5XWUMzOHFIaTBwclF4NkxQTjFtNlNrbWFiSG15WmxtTlBqUk9QRE9hbjBNOUR6bjhsU21aRy94OXZCbEdGQmJ6anFoRk9qUXpIN2JNRjRodTdMMEJQVDJ0ZHZacHgwa2Q4L2ZkcVQwNmVkbmpoWVZ1''@;'; put 'put ''V3lMRmpwNngxMnJLbHJOVzdRYXh6R1hlVDFScUsyWTQ5RngvTEd6NnQwWFdtb3Z0cGpqY2NHajQyK1BtTTA0U0w5TmxoU0V2Ulk1ckhjWTRYSFNzTmdVM1lvNVNUY29LS3BJY2NxdG1MSmZNdWR4VWozN3FkbGtUWDkyZWs0WUowZjBDUzYzZE95d1B0OWpEYjdtdFo1VnZvMFRISXlHb3U0eWJu''@;'; put 'put ''VzJOUWVSV3duTDJKNzZoKzNaYmNoQUFBQWVOcGo4TjdCY0NJb1lpTWpZMS9rQnNhZEhBd2NETWtGR3huWW5UWkpNakpvZ1JpYmVUZ1lPU0FzTVRZd2k4TnBGN01EQXlNREo1RE42YlNMQWNwbVpuRFpxTUxZRVJpeHdhRWpZaU56aXN0R05SQnZGMGNEQXlPTFEwZHlTQVJJU1NRUWJPYmpZT1RS''@;'; put 'put ''MnNINHYzVURTKzlHSmdhWHphd3BiQXd1TGdEK0hDVmdBQUFBQUFGWW1QWjNBQUE9KSBmb3JtYXQoIndvZmYiKTtmb250LXdlaWdodDo2MDA7Zm9udC1zdHlsZTpub3JtYWx9Y2xyLW1vZGFse2Rpc3BsYXk6bm9uZX1jbHItbW9kYWwub3BlbntkaXNwbGF5OmlubGluZX1jbHItZXhwYW5kYWJs''@;'; put 'put ''ZS1hbmltYXRpb257ZGlzcGxheTpibG9ja31jbHItc3RhY2stYmxvY2t7ZGlzcGxheTpibG9ja31jbHItc3RhY2staGVhZGVye2Rpc3BsYXk6YmxvY2t9Y2xyLXN0YWNrLXZpZXd7ZGlzcGxheTpibG9ja306cm9vdCBbY2RzLXRoZW1lXXstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LWZh''@;'; put 'put ''bWlseTp2YXIoLS1jbHItbWV0cm9wb2xpcy1mb250LWZhbWlseSk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ncmF5OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZHJvcC1iYWNrZ3JvdW5kOmhzbGEoMCwgMCUs''@;'; put 'put ''IDEwMCUsIC42KTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTc1KTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1ob3Zlcjp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tc2tl''@;'; put 'put ''bGV0b24tZHVyYXRpb246NHM7LS1jZHMtZ2xvYmFsLWFuaW1hdGlvbi1lYXNpbmctaW4tb3V0OmN1YmljLWJlemllciguNDIsIC4wMSwgLjU4LCAxKTstLWNkcy1hbGlhcy1vYmplY3Qtc2tlbGV0b24tbG9hZGluZy1ncmFkaWVudDpsaW5lYXItZ3JhZGllbnQoIDkwZGVnLCB2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQpIDAlLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApIDM1JSwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKSA2NSUsIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rp''@;'; put 'put ''b24tYmFja2dyb3VuZCkgMTAwJSApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lOkhpZ2hsaWdodCBhdXRvIDJweDstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1zZWxlY3RlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtOTAwKTstLWNkcy1h''@;'; put 'put ''bGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbmZvLWNsaWNrKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1z''@;'; put 'put ''dWNjZXNzLWNsaWNrKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24td2FybmluZy1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLWNsaWNrKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLWFjdGl2ZTp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWRhbmdlci1jbGljayk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW5ldXRyYWwtYWN0aXZlOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tbmV1dHJhbC1jbGljayk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9u''@;'; put 'put ''LWludmVyc2UtYWN0aXZlOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW52ZXJzZS1jbGljayk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNv''@;'; put 'put ''bnN0cnVjdGlvbi0zMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkLWhvdmVy''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtc2VsZWN0ZWQtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMCk7LS1jZHMtYWxpYXMtb2JqZWN0''@;'; put 'put ''LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2U6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtaW52ZXJzZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7''@;'; put 'put ''LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2Utc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTAwKX06cm9vdCBbY2RzLXRoZW1lfj1kYXJrXXstLWNkcy1hbGlhcy11dGlsaXR5LWdyYXk6dmFyKC0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1jb25zdHJ1Y3Rpb24tMzAwKTstLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNjAwKTstLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtOTAwKTstLWNkcy1hbGlhcy1z''@;'; put 'put ''dGF0dXMtZGFuZ2VyLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tkcm9wLWJhY2tncm91bmQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTMwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9u''@;'; put 'put ''LWJhY2tncm91bmQtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAw''@;'; put 'put ''KTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2RzLWFsaWFzLW9iamVjdC1za2VsZXRvbi1sb2FkaW5nLWdyYWRpZW50OmxpbmVhci1ncmFkaWVudCggOTBk''@;'; put 'put ''ZWcsIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZCkgMCUsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwMCkgMzUlLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi00MDApIDY1JSwgdmFyKC0tY2RzLWFsaWFzLW9i''@;'; put 'put ''amVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kKSAxMDAlICk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8tc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGU6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1i''@;'; put 'put ''YWNrZ3JvdW5kLXNoYWRlLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS05MDApOy0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtc2VsZWN0ZWQtYWN0aXZlOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2U6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtaW52''@;'; put 'put ''ZXJzZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2Utc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKX1AY2hhcnNldCAiVVRGLTgiO0Bm''@;'; put 'put ''b250LWZhY2V7Zm9udC1mYW1pbHk6dGV4dC1zZWN1cml0eS1kaXNjO3NyYzp1cmwoaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL25vcHBhL3RleHQtc2VjdXJpdHkvbWFzdGVyL2Rpc3QvdGV4dC1zZWN1cml0eS1kaXNjLndvZmYpfWFwcC1lZGl0b3IgLmNhcmR7bWFyZ2luLXRv''@;'; put 'put ''cDowO2JvcmRlcjowfWFwcC1lZGl0b3IgLmJ1dHRvbkJhcntwYWRkaW5nOjJweCAxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcn1hcHAtZWRpdG9yIC50ZXN0UmVke2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZjAwYyFpbXBvcnRhbnR9YXBwLWVkaXRvciBob3QtdGFibGUgLmZpcnN0Q29sdW1uSGVh''@;'; put 'put ''ZGVyU3R5bGUgYnV0dG9uLmNoYW5nZVR5cGV7ZGlzcGxheTpub25lfWFwcC1lZGl0b3IgaG90LXRhYmxlIC5oYW5kc29udGFibGUgdGJvZHkgdGguaHRfX2hpZ2hsaWdodC5wcmltYXJ5S2V5SGVhZGVyU3R5bGUsYXBwLWVkaXRvciBob3QtdGFibGUgLmhhbmRzb250YWJsZSB0aGVhZCB0aC5o''@;'; put 'put ''dF9faGlnaGxpZ2h0LnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDZiMDBiMCFpbXBvcnRhbnR9YXBwLWVkaXRvciBob3QtdGFibGUgLnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDZiMDA2ZSFpbXBvcnRhbnR9YXBwLWVkaXRvciBo''@;'; put 'put ''b3QtdGFibGUgdGgucmVhZG9ubHlDZWxsIGRpdntvcGFjaXR5Oi40fWFwcC1lZGl0b3IgaG90LXRhYmxlIHRkLnJlYWRvbmx5Q2VsbHtvcGFjaXR5Oi41fWFwcC1lZGl0b3IgLnN1Ym1pdC1yZWFzb257bWluLWhlaWdodDoxMjBweDttYXgtaGVpZ2h0OjEyMHB4O2hlaWdodDoxMjBweH1hcHAt''@;'; put 'put ''ZWRpdG9yIC5pbmZvQmFye21hcmdpbi10b3A6MTRweDtiYWNrZ3JvdW5kOiM0OTU5Njc7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjNweDtmb250LXNpemU6MTZweDtoZWlnaHQ6MzBweDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1z''@;'; put 'put ''cGFjZTpub3dyYXB9YXBwLWVkaXRvciAuaW5mb0JhciBzcGFue3dpZHRoOjgwJX1hcHAtZWRpdG9yIC5pbmZvQmFyOmhvdmVye2hlaWdodDp1bnNldDt3aGl0ZS1zcGFjZTpub3JtYWx9YXBwLWVkaXRvciAuaW5mb0Jhcjpob3ZlciBzcGFue3dpZHRoOnVuc2V0fWFwcC1lZGl0b3IgLnBrSGVh''@;'; put 'put ''ZGVye2JhY2tncm91bmQ6IzY4NzY4Mjtjb2xvcjojZmZmO21hcmdpbjotMXB4fWFwcC1lZGl0b3IgLmhlYWRlckJhcnthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWJnLWNvbG9yKX1hcHAtZWRpdG9yIC5lcnJvci1pY29ue3dpZHRoOjMwcHg7''@;'; put 'put ''aGVpZ2h0OjMwcHg7Y29sb3I6cmVkfWFwcC1lZGl0b3IgLmJ0bkN0cmx7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1hcHAtZWRpdG9yIC5jYXJkLWhlYWRlcntib3JkZXItYm90dG9tOjFweCBzb2xpZCB0cmFuc3BhcmVudH1hcHAtZWRpdG9yIC5oaWRkZW57dmlzaWJp''@;'; put 'put ''bGl0eTpoaWRkZW59YXBwLWVkaXRvciAubXktZHJvcC16b25le2JvcmRlcjpzb2xpZCAxcHggbGlnaHRncmF5O2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOiNmNWY1ZjU7Ym94LXNoYWRvdzppbnNldCAwIDAgNHB4IDJweCAjYTdhNWE1MmI7aGVpZ2h0OjUwdmh9YXBwLWVkaXRvciAu''@;'; put 'put ''bnYtZmlsZS1vdmVye2JvcmRlcjpzb2xpZCAycHggZ3JlZW59YXBwLWVkaXRvciAuZmlsZS1kcm9wLXRleHR7dGV4dC1hbGlnbjpjZW50ZXJ9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpe2FwcC1lZGl0b3IgLnByb2dyZXNTdGF0aWN7bWFyZ2luLXRvcDo5cHghaW1wb3J0''@;'; put 'put ''YW50fWFwcC1lZGl0b3IgLnByb2dyZXNzLGFwcC1lZGl0b3IgLnByb2dyZXNzLXN0YXRpY3t3aWR0aDpjYWxjKDEwMCUgLSAxNHB4KX19YXBwLWVkaXRvciAuaG90RWRpdG9ye3Bvc2l0aW9uOnJlbGF0aXZlfWFwcC1lZGl0b3IgLmV4Y2VsLXBhcnNpbmd7ZGlzcGxheTpmbGV4O2ZsZXgtZGly''@;'; put 'put ''ZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmV9YXBwLWVkaXRvciAuZXhjZWwtcGFyc2luZyAuZGV0YWlsc3ttYXJnaW46MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTQ1cHh9YXBwLWVkaXRvciAuZWRpdC1yZWNvcmQtc3Bpbm5lcntkaXNwbGF5OmZs''@;'; put 'put ''ZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDojZmZmOTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDt3aWR0aDoxMDAlO3otaW5kZXg6NTAwfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ4MHB4KXthcHAtZWRpdG9y''@;'; put 'put ''IC5wcm9ncmVzU3RhdGlje21hcmdpbi10b3A6MzJweCFpbXBvcnRhbnR9YXBwLWVkaXRvciAuY2FyZC1ibG9jayxhcHAtZWRpdG9yIC5jYXJkLWZvb3RlcntwYWRkaW5nOjEwcHggMCAwfX1hcHAtZWRpdG9yIC5jb250ZW50LWFyZWF7cGFkZGluZzowIC44cmVtIC44cmVtIWltcG9ydGFudDtw''@;'; put 'put ''YWRkaW5nLXRvcDowfWFwcC1lZGl0b3IgLmRyb3AtYXJlYXtwb3NpdGlvbjpmaXhlZDtpbnNldDowO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7bWFyZ2luOjFweDtib3JkZXI6MnB4IGRhc2hlZCAjZmZmO3otaW5kZXg6LTF9YXBw''@;'; put 'put ''LWVkaXRvciAuZHJvcC1hcmVhIHNwYW57Zm9udC1zaXplOjIwcHg7bWFyZ2luLXRvcDoyMHB4O3BhZGRpbmc6MTBweDtiYWNrZ3JvdW5kOiNkYmRiZGI7Ym9yZGVyLXJhZGl1czo1cHg7Y29sb3I6IzAwMH1hcHAtZWRpdG9yICNzdWJtaXRCdG4sYXBwLWVkaXRvciAjY2FuY2VsU3VibWl0QnRu''@;'; put 'put ''e3dpZHRoOjE1MHB4fWFwcC1lZGl0b3IgLnZpZXctdGFibGV7Zm9udC1zaXplOmluaGVyaXQhaW1wb3J0YW50O2NvbG9yOiMxYTU3YmIhaW1wb3J0YW50fUBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCl7YXBwLWVkaXRvciAuaWNvbi1jb2xsYXBzZSAudGV4dHtkaXNwbGF5Om5vbmV9fW15LWFw''@;'; put 'put ''cCBhcHAtcmVxdWVzdHMtbW9kYWx7ei1pbmRleDoxMDAwMH1teS1hcHAgaGVhZGVyLmFwcC1oZWFkZXJ7YmFja2dyb3VuZDojMzE0MzUxIWltcG9ydGFudDtjb2xvcjojZmZmfW15LWFwcCAubG9nbyBpbWcud2l0aG91dC10ZXh0e3dpZHRoOjMwcHh9bXktYXBwIC5sb2dvIGltZy53aXRoLXRl''@;'; put 'put ''eHR7d2lkdGg6MjEwcHh9bXktYXBwIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXJ7ZGlzcGxheTpibG9jaztiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjowO21hcmdpbi1sZWZ0OjEwcHh9bXktYXBwIC5kZW1vLWV4cGlyZWQtbm90aWNle2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRl''@;'; put 'put ''bnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtwb3NpdGlvbjpmaXhlZDtsZWZ0OjA7dG9wOjA7aGVpZ2h0OjEwMHZoIWltcG9ydGFudDt3aWR0aDoxMDB2dyFpbXBvcnRhbnQ7ei1pbmRleDoxMDU7YmFja2dyb3VuZDojMjEyMTIxODB9bXktYXBwIC5kZW1vLWV4cGlyZWQtbm90aWNlIC5l''@;'; put 'put ''eHBpcmVkLWRldGFpbHN7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjMwcHg7ei1pbmRleDoxMTA7YmFja2dyb3VuZDojMzE0MzUxfW15LWFwcCAuZGVtby1leHBpcmVkLW5vdGljZSAuZXhwaXJlZC1kZXRhaWxzIC5leHBpcmVkLW5vdGljZXtjb2xv''@;'; put 'put ''cjojZTBlMGUwO2ZvbnQtc2l6ZToxNnB4fW15LWFwcCAuZGVtby1leHBpcmVkLW5vdGljZSAuZXhwaXJlZC1kZXRhaWxzIC5leHBpcmVkLW5vdGljZSAubWFpbHRve2NvbG9yOiM4ZGM1M2V9bXktYXBwIC5tYWluLWNvbnRhaW5lciAudXBkYXRlLWtleXtkaXNwbGF5OmZsZXg7YWxpZ24taXRl''@;'; put 'put ''bXM6Y2VudGVyO2NvbG9yOiNmZmY7cGFkZGluZzowIDEwcHg7YmFja2dyb3VuZDojMDAwMDAwMjZ9bXktYXBwIC5hbGVydC1pY29uLXdyYXBwZXJ7bWFyZ2luLXRvcDowIWltcG9ydGFudH1teS1hcHAgLm5hdi10ZXh0e21hcmdpbi1yaWdodDoyMHB4fW15LWFwcCAuc2lkZWJhci10b2dnbGV7''@;'; put 'put ''ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nLWxlZnQ6MTBweH1teS1hcHAgLnNpZGViYXItdG9nZ2xlIGNsci1pY29ue2N1cnNvcjpwb2ludGVyO3dpZHRoOjMwcHg7aGVpZ2h0OjMwcHh9bXktYXBwIGhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLmRy''@;'; put 'put ''b3Bkb3due3Bvc2l0aW9uOnVuc2V0fW15LWFwcCBoZWFkZXIgLm5hdi1saW5rOmhvdmVye2NvbG9yOiNmYWZhZmF9bXktYXBwIGhlYWRlciAubmF2LWxpbmsuYWN0aXZle2JhY2tncm91bmQ6IzFkMmYzZH1teS1hcHAgLm5vdGZ7YmFja2dyb3VuZDojMTZhNTdhO2NvbG9yOiNmZmZjZmM7Zm9u''@;'; put 'put ''dC1zaXplOjEycHh9bXktYXBwIC50b2dnbGUtc3dpdGNoIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw6YmVmb3Jle2JvcmRlci1jb2xvcjojNjE3MTdkO2JhY2tncm91bmQtY29sb3I6IzYxNzE3ZDt0cmFuc2l0aW9uOi4xNXMgZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5''@;'; put 'put ''OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kLWNvbG9yfW15LWFwcCAubWFpbi1jb250YWluZXJ7bWluLWhlaWdodDoxMDB2aCFpbXBvcnRhbnR9bXktYXBwIC5jb250ZW50LWNvbnRhaW5lcnt6LWluZGV4OjAhaW1wb3J0YW50fW15LWFwcCAubmF2QmFyUmVzcHtkaXNwbGF5OmZsZXg7anVzdGlm''@;'; put 'put ''eS1jb250ZW50OmNlbnRlcjtiYWNrZ3JvdW5kOiM0OTVhNjc7Y29sb3I6I2ZmZn1teS1hcHAgLmFwcC1sb2FkaW5nIC5sb2FkaW5nLWxvZ297bWF4LXdpZHRoOjQwMHB4O3dpZHRoOjEwMCV9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpe215LWFwcCAubmF2QmFyUmVzcHtk''@;'; put 'put ''aXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7YmFja2dyb3VuZDojNDk1YTY3O2NvbG9yOiNmZmZ9bXktYXBwIC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbmssbXktYXBwIC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5j''@;'; put 'put ''bHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbmssbXktYXBwIC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluayxteS1hcHAgLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5re3BhZGRpbmc6MCAu''@;'; put 'put ''NXJlbSAwIDFyZW07d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztib3JkZXItcmFkaXVzOi4xMjVyZW0gMCAwIC4xMjVyZW07Y29sb3I6Izk1Yzg0Yn1teS1hcHAgLmNhcmQtYmxvY2ssbXktYXBwIC5jYXJkLWZvb3Rlcntw''@;'; put 'put ''YWRkaW5nOjEwcHggMCAwfW15LWFwcCAubWFpbi1jb250YWluZXJbX25nY29udGVudC1jMF0gLmNvbnRlbnQtY29udGFpbmVyW19uZ2NvbnRlbnQtYzBdIC5jb250ZW50LWFyZWFbX25nY29udGVudC1jMF17cGFkZGluZzowcmVtfX0uaHRJbnZhbGlke2JhY2tncm91bmQ6IzAwMCFpbXBvcnRh''@;'; put 'put ''bnR9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDgwcHgpe2gye2ZvbnQtc2l6ZTouN3JlbSFpbXBvcnRhbnR9aDN7Zm9udC1zaXplOi43cmVtfX0ubmF2LWxpbmt7cGFkZGluZzowcmVtIDFyZW19Ym9keVtjZHMtdGhlbWU9bGlnaHRdIC5idG4tcHJpbWFyeSAuYnRuLGJvZHlbY2Rz''@;'; put 'put ''LXRoZW1lPWxpZ2h0XSAuYnRuLmJ0bi1wcmltYXJ5e2JvcmRlci1jb2xvcjojMzE0MzUxO2JhY2tncm91bmQtY29sb3I6IzMxNDM1MTtjb2xvcjojZmZmfWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5idG4tcHJpbWFyeSAuYnRuLGJvZHlbY2RzLXRoZW1lPWRhcmtdIC5idG4uYnRuLXByaW1hcnl7''@;'; put 'put ''Ym9yZGVyLWNvbG9yOiM1ZTczODI7YmFja2dyb3VuZC1jb2xvcjojNWU3MzgyO2NvbG9yOiNmZmZ9Ym9keVtjZHMtdGhlbWU9ZGFya10gLmJ0bi1wcmltYXJ5IC5idG4gY2xyLWljb24sYm9keVtjZHMtdGhlbWU9ZGFya10gLmJ0bi1wcmltYXJ5IC5idG4gY2RzLWljb24sYm9keVtjZHMtdGhl''@;'; put 'put ''bWU9ZGFya10gLmJ0bi5idG4tcHJpbWFyeSBjbHItaWNvbixib2R5W2Nkcy10aGVtZT1kYXJrXSAuYnRuLmJ0bi1wcmltYXJ5IGNkcy1pY29ue2NvbG9yOiNmZmZ9LmJ0bi1wcmltYXJ5IC5idG46ZGlzYWJsZWQsLmJ0bi5idG4tcHJpbWFyeTpkaXNhYmxlZHtvcGFjaXR5Oi42NX0uYnRue2N1''@;'; put 'put ''cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrOy13ZWJraXQtYXBwZWFyYW5jZTpub25lIWltcG9ydGFudDtib3JkZXItcmFkaXVzOi4xMjVyZW07Ym9yZGVyOjFweCBzb2xpZDttaW4td2lkdGg6M3JlbTttYXgtd2lkdGg6MTVyZW07d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3Zl''@;'; put 'put ''cmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVuO3RleHQtYWxpZ246Y2VudGVyO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bGluZS1oZWlnaHQ6MS41cmVtO2xldHRlci1zcGFjaW5nOi4xMmVtO2ZvbnQtc2l6ZTouNXJlbTtmb250LXdlaWdodDo1''@;'; put 'put ''MDA7aGVpZ2h0OjEuNXJlbTtwYWRkaW5nOjAgLjVyZW19LmJ0bi5idG4tb3V0bGluZTpob3Zlcntib3JkZXItY29sb3I6IzMxNDM1MTtiYWNrZ3JvdW5kLWNvbG9yOiM0OTVhNjc7Y29sb3I6I2ZmZn1ib2R5W2Nkcy10aGVtZT1kYXJrXSAuYnRuLmJ0bi1pY29uLmJ0bi1kaW1tZWR7Y29sb3I6''@;'; put 'put ''IzcyOTVhZX1ib2R5W2Nkcy10aGVtZT1saWdodF0gLmJ0bi5idG4taWNvbi5idG4tZGltbWVke2NvbG9yOiMzMTQzNTF9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIC5idG4uYnRuLW91dGxpbmV7Ym9yZGVyLWNvbG9yOiMzMTQzNTE7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjoj''@;'; put 'put ''MzE0MzUxfS5odE1vYmlsZUVkaXRvckNvbnRhaW5lciAuaW5wdXRzIHRleHRhcmVhe2ZvbnQtc2l6ZToxM3B0O2JvcmRlcjoycHggc29saWQgIzQ4NTk2Nztib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtib3gtc2hhZG93Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7''@;'; put 'put ''aW5zZXQ6MCAwIDAgMTRweDtwYWRkaW5nOjdwdDt3aWR0aDoyOTBweH0uaHRNb2JpbGVFZGl0b3JDb250YWluZXIgLnBvc2l0aW9uQ29udHJvbHN7d2lkdGg6MzMzcHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NXB0O3RvcDo1MHB4O2JvdHRvbTowO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNv''@;'; put 'put ''bnRlbnQ6Y2VudGVyfS5odE1vYmlsZUVkaXRvckNvbnRhaW5lci5hY3RpdmV7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTIwcHg7d2lkdGg6MzUwcHh9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIC53dEJvcmRlcntiYWNrZ3JvdW5kLWNvbG9yOiM0OTVhNjchaW1wb3J0YW50fWJvZHlbY2RzLXRoZW1l''@;'; put 'put ''PWxpZ2h0XSAuaHRfbWFzdGVyIHRyOm50aC1vZi10eXBlKG9kZCk+dGR7ZmlsdGVyOmJyaWdodG5lc3MoLjk3KX1ib2R5W2Nkcy10aGVtZT1saWdodF0gLmh0X21hc3RlciAuaHREaW1tZWR7Y29sb3I6IzM3MzczNyFpbXBvcnRhbnQ7ZmlsdGVyOmJyaWdodG5lc3MoMSkhaW1wb3J0YW50fWJv''@;'; put 'put ''ZHlbY2RzLXRoZW1lPWRhcmtdIC5odF9tYXN0ZXIgdHI6bnRoLW9mLXR5cGUob2RkKT50ZHtmaWx0ZXI6YnJpZ2h0bmVzcygxLjIpfWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5odF9tYXN0ZXI6bm90KC5lbXB0eUNvbHVtbnMpfi5oYW5kc29udGFibGUgdGJvZHkgdHIgdGgsYm9keVtjZHMtdGhl''@;'; put 'put ''bWU9ZGFya10gLmh0X21hc3Rlcjpub3QoLmVtcHR5Q29sdW1ucyl+LmhhbmRzb250YWJsZTpub3QoLmh0X2Nsb25lX3RvcCkgdGhlYWQgdHIgdGg6Zmlyc3QtY2hpbGR7YmFja2dyb3VuZC1jb2xvcjojMmQ0MDQ4O2JvcmRlci1jb2xvcjojNjk3Yzg1fWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5o''@;'; put 'put ''YW5kc29udGFibGUgdGQsYm9keVtjZHMtdGhlbWU9ZGFya10gLmhhbmRzb250YWJsZSB0cjpmaXJzdC1jaGlsZCB0aCxib2R5W2Nkcy10aGVtZT1kYXJrXSAuaGFuZHNvbnRhYmxlIHRyOmZpcnN0LWNoaWxkIHRkLGJvZHlbY2RzLXRoZW1lPWRhcmtdIC5oYW5kc29udGFibGUgLmhhbmRzb250''@;'; put 'put ''YWJsZS5odF9jbG9uZV90b3AgLnd0SGlkZXJ7Ym9yZGVyLWNvbG9yOiM2OTdjODV9Ym9keVtjZHMtdGhlbWU9ZGFya10gLmhhbmRzb250YWJsZSAuY2hhbmdlVHlwZXtiYWNrZ3JvdW5kLWNvbG9yOiMzYzU2NjI7Ym9yZGVyLWNvbG9yOiM2OTdjODV9Ym9keVtjZHMtdGhlbWU9ZGFya10gLmhh''@;'; put 'put ''bmRzb250YWJsZUlucHV0e2JhY2tncm91bmQtY29sb3I6IzcwOGI5OH0uaGFuZHNvbnRhYmxlIC5oYW5kc29udGFibGUuaHRfY2xvbmVfdG9wIC53dEhpZGVye3BhZGRpbmc6MCFpbXBvcnRhbnQ7bWFyZ2luOjA7Ym9yZGVyLWJvdHRvbTozcHggc29saWQgI2Q2ZDNkM31ib2R5W2Nkcy10aGVt''@;'; put 'put ''ZT1saWdodF0gLmNvbnRlbnQtY29udGFpbmVye2JhY2tncm91bmQ6I2Y1ZjZmZn0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQsLmRhdGFncmlkLWhpc3RvcnkgLmRhdGFncmlke2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1y''@;'; put 'put ''YWRpdXM6LjEyNXJlbTttYXJnaW46MDttYXJnaW4tdG9wOjFyZW07bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJTtwYWRkaW5nOjE1cHggMTVweCA1MHB4fS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1mb290LC5kYXRhZ3JpZC1oaXN0b3J5IC5kYXRhZ3JpZC1mb290e2p1c3RpZnktY29u''@;'; put 'put ''dGVudDpmbGV4LWVuZDtoZWlnaHQ6MS41cmVtO3BhZGRpbmc6MCAuNXJlbTtsaW5lLWhlaWdodDpjYWxjKDEuNXJlbSAtIDNweCk7Zm9udC1zaXplOi40NTgzM3JlbTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLXRvcDoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjB9LmRhdGFn''@;'; put 'put ''cmlkLWNvbXBhY3QgLmRhdGFncmlkLWZvb3RlciwuZGF0YWdyaWQtaGlzdG9yeSAuZGF0YWdyaWQtZm9vdGVye3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjMwcHg7dG9wOjFweH0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQgLmRhdGFncmlkLWhlYWQsLmRhdGFncmlkLWhpc3RvcnkgLmRh''@;'; put 'put ''dGFncmlkIC5kYXRhZ3JpZC1oZWFke2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjY2NjfS5kcm9wZG93bi1tZW51e3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMDAlO2xlZnQ6MDttYXJnaW4tdG9wOi4wODMzMzNyZW07ZGlzcGxheTpmbGV4O2ZsZXgtZGly''@;'; put 'put ''ZWN0aW9uOmNvbHVtbjtwYWRkaW5nOi41cmVtIDA7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JveC1zaGFkb3c6MCAxcHggLjEyNXJlbSAjNzM3MzczNDA7bWluLXdpZHRoOjVyZW07bWF4LXdpZHRoOjE1cmVtO2JvcmRlci1yYWRpdXM6LjEyNXJlbTt2aXNpYmlsaXR5OmhpZGRlbjt6LWluZGV4''@;'; put 'put ''OjEwMDB9LnRhYmxle2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6MDttYXJnaW46MDttYXJnaW4tdG9wOjFyZW07bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJX0udGFibGUgdGh7Zm9udC1zaXplOi40NTgzM3JlbTtm''@;'; put 'put ''b250LXdlaWdodDo2MDA7bGV0dGVyLXNwYWNpbmc6LjAzZW07dmVydGljYWwtYWxpZ246Ym90dG9tO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNjY2M7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS5tYWluLWNvbnRhaW5lciAuY29udGVudC1jb250YWluZXJ7bWluLWhlaWdodDowcHg7cG9z''@;'; put 'put ''aXRpb246cmVsYXRpdmV9aG9tZS1jb21wb25lbnQgY2xyLXRyZWUtbm9kZSBidXR0b257d2hpdGUtc3BhY2U6bm93cmFwfWhvbWUtY29tcG9uZW50IC5jYXJkLWJsb2Nre2hlaWdodDoxMDAlO3BhZGRpbmc6MH1ob21lLWNvbXBvbmVudCAubm8tdGFibGUtc2VsZWN0ZWR7cG9zaXRpb246cmVs''@;'; put 'put ''YXRpdmU7aGVpZ2h0OjEwMCV9aG9tZS1jb21wb25lbnQgLnNwaW5uZXItd3JhcHBlci1mdWxscGFnZXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX1jbHItaWNvbi5pcy1ibHVlLGNsci1pY29uLmlz''@;'; put 'put ''LWluZm97ZmlsbDojNmE5MjM1fWFwcC1zaWRlYmFyIC5jbHItdmVydGljYWwtbmF2IC5uYXYtbGluay5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH1hcHAtc2lkZWJhciBjbHItdmVydGljYWwtbmF2e3dpZHRoOjI3MnB4O21pbi13aWR0aDoyNzJweDtoZWlnaHQ6MTAwJTtt''@;'; put 'put ''YXgtd2lkdGg6Mzc1cHg7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNoYWRvdzowIDAgNXB4ICMwMDAwMDAxZn1hcHAtc2lkZWJhciBjbHItdmVydGljYWwtbmF2IC5zdW4tZHJvcGRvd257bWluLWhlaWdodDozNnB4fWFwcC1zaWRlYmFyIGNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmVle2hlaWdo''@;'; put 'put ''dDoxMDAlO292ZXJmbG93LXk6YXV0b31hcHAtc2lkZWJhciBjbHItdmVydGljYWwtbmF2LmNsb3NlZHttYXJnaW4tbGVmdDotMjcycHh9YXBwLXNpZGViYXIgY2xyLXZlcnRpY2FsLW5hdiAucmVzaXplLWhhbmRsZXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDotM3B4''@;'; put 'put ''O2JvcmRlci1yaWdodDo0cHggc29saWQgIzgwYjQ0MTtjdXJzb3I6Y29sLXJlc2l6ZTtvcGFjaXR5OjA7dHJhbnNpdGlvbjphbGwgLjFzIGVhc2UtaW4tb3V0fWFwcC1zaWRlYmFyIGNsci12ZXJ0aWNhbC1uYXYgLnJlc2l6ZS1oYW5kbGU6aG92ZXJ7b3BhY2l0eTouNX1hcHAtc2lkZWJhciBj''@;'; put 'put ''bHItdmVydGljYWwtbmF2IC5yZXNpemUtaGFuZGxlLnJlc2l6aW5ne29wYWNpdHk6MX1hcHAtc2lkZWJhciBjbHItdmVydGljYWwtbmF2LnJlc2l6aW5ne3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnR9YXBwLXNpZGViYXIgLm5hdi1kaXZpZGVye2JvcmRlcjowO2JvcmRlci10b3A6MXB4IHNv''@;'; put 'put ''bGlkICNkM2QzZDM7bWFyZ2luLWJvdHRvbTowfWFwcC1zaWRlYmFyIC5wYWdlLXRpdGxle21hcmdpbjowO2ZvbnQtc2l6ZToxOHB4O3RleHQtYWxpZ246Y2VudGVyfWFwcC1zaWRlYmFyIC56ZXJvLW1hcmdpbnttYXJnaW46MCFpbXBvcnRhbnR9YXBwLXNpZGViYXIgLnVzZXItbmF2LWJ0bntw''@;'; put 'put ''YWRkaW5nOjAgMnB4fWFwcC1zaWRlYmFyICNzaWRlYmFyTmF2e3otaW5kZXg6MjAwfUBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCl7YXBwLXNpZGViYXIgI3NpZGViYXJOYXZ7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7dG9wOjB9fWFwcC14bG1hcCAuY2FyZHttYXJnaW4tdG9wOjA7Zmxl''@;'; put 'put ''eDoxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59YXBwLXhsbWFwIGNsci10cmVlLW5vZGUgYnV0dG9ue3doaXRlLXNwYWNlOm5vd3JhcH1hcHAteGxtYXAgLm5vLXRhYmxlLXNlbGVjdGVke3Bvc2l0aW9uOnJlbGF0aXZlfWFwcC14bG1hcCAuaGVhZGVyLXJvdyAudGl0bGUt''@;'; put 'put ''Y29se2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9YXBwLXhsbWFwIC5oZWFkZXItcm93IC5vcHRpb25zLWNvbHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfWFwcC14bG1hcCAuc3d7bWFyZ2luOjFyZW0gMHJlbSAuNXJlbSAxcmVtfWFwcC14bG1hcCAudmll''@;'; put 'put ''d2VyVGl0bGV7dGV4dC1hbGlnbjpjZW50ZXJ9YXBwLXhsbWFwIC5jYXJkRmxleHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcn1hcHAteGxtYXAgLmNvbnRlbnQtYXJlYXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufWFwcC14bG1hcCBob3QtdGFibGUgLnBy''@;'; put 'put ''aW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kOiMzMDZiMDA2ZX1hcHAteGxtYXAgLmRyb3AtYXJlYXtwb3NpdGlvbjpmaXhlZDtpbnNldDowO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbjoxcHg7Ym9yZGVyOjJweCBkYXNoZWQgI2ZmZjt6LWluZGV4Oi0x''@;'; put 'put ''fWFwcC14bG1hcCAuZHJvcC1hcmVhIHNwYW57Zm9udC1zaXplOjIwcHg7bWFyZ2luLXRvcDoyMHB4O2NvbG9yOiNmZmZ9YXBwLW11bHRpLWRhdGFzZXQgLm5vLXRhYmxlLXNlbGVjdGVke2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjth''@;'; put 'put ''bGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWJnLWNvbG9yKTt6LWluZGV4OjEwO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dG9wOjB9YXBwLW11bHRpLWRhdGFzZXQgLmhlYWRlci1yb3d7cGFkZGluZzoxNXB4IDA7''@;'; put 'put ''Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2QzZDNkM31hcHAtbXVsdGktZGF0YXNldCAuZGF0YXNldC1pbnB1dC13cmFwcGVye21heC13aWR0aDo1MDBweDt3aWR0aDoxMDAlfWFwcC1tdWx0aS1kYXRhc2V0IC5zdWJtaXQtcmVhc29ue21pbi1oZWlnaHQ6NzBweDttYXgtaGVpZ2h0OjcwcHg7''@;'; put 'put ''aGVpZ2h0OjcwcHh9YXBwLW11bHRpLWRhdGFzZXQgLmxvZy13cmFwcGVye21hcmdpbjowIDEwcHg7aGVpZ2h0OmF1dG99YXBwLW11bHRpLWRhdGFzZXQgLmRhdGFzZXQtc2VsZWN0aW9uLWFjdGlvbnN7Ym9yZGVyLXRvcDoxcHggc29saWQgI2QzZDNkM31hcHAtbXVsdGktZGF0YXNldCAubGlj''@;'; put 'put ''ZW5jZS1saW1pdC1ub3RpY2V7Y29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLWRhcmspfWFwcC1tdWx0aS1kYXRhc2V0IC5zdWJtaXNzaW9uLXJlc3VsdHN7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2QzZDNkM310ZC5ub3QtbWF0Y2hlZHtiYWNrZ3JvdW5kLWNvbG9yOiNm''@;'; put 'put ''ZjAwMDA1NH1hcHAtc3VibWl0dGVkIC5ub0JvcmRlcntib3JkZXItYm90dG9tOjFweCBzb2xpZCB0cmFuc3BhcmVudCFpbXBvcnRhbnR9YXBwLXN1Ym1pdHRlZCAudG9vbHRpcC50b29sdGlwLWJvdHRvbS1sZWZ0Pi50b29sdGlwLWNvbnRlbnQsYXBwLXN1Ym1pdHRlZCAudG9vbHRpcCAudG9v''@;'; put 'put ''bHRpcC1jb250ZW50LnRvb2x0aXAtYm90dG9tLWxlZnR7YmFja2dyb3VuZDojMzE0MzUxIWltcG9ydGFudH1hcHAtc3VibWl0dGVkIC50b29sdGlwLnRvb2x0aXAtYm90dG9tLWxlZnQ+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsYXBwLXN1Ym1pdHRlZCAudG9vbHRpcCAudG9vbHRpcC1jb250''@;'; put 'put ''ZW50LnRvb2x0aXAtYm90dG9tLWxlZnQ6YmVmb3Jle2JvcmRlci1yaWdodDouMjVyZW0gc29saWQgIzMxNDM1MTtib3JkZXItYm90dG9tOi4yMDgzM3JlbSBzb2xpZCAjMzE0MzUxfWFwcC1zdWJtaXR0ZWQgLm5vLXN1Ym1pdHRlZC10YWJsZXN7aGVpZ2h0OmNhbGMoMTAwdmggLSAyMDBweCl9''@;'; put 'put ''YXBwLWFwcHJvdmUgLmNvbHVtbi1jZW50ZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn1hcHAtYXBwcm92ZSAuZGF0YWdyaWQgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXRpdGxl''@;'; put 'put ''e291dGxpbmU6bm9uZSFpbXBvcnRhbnR9YXBwLWFwcHJvdmUgLmxpbmtze2ZvbnQtd2VpZ2h0OjcwMDtjdXJzb3I6cG9pbnRlcn1hcHAtYXBwcm92ZSAudG9vbHRpcC50b29sdGlwLWJvdHRvbS1sZWZ0Pi50b29sdGlwLWNvbnRlbnQsYXBwLWFwcHJvdmUgLnRvb2x0aXAgLnRvb2x0aXAtY29u''@;'; put 'put ''dGVudC50b29sdGlwLWJvdHRvbS1sZWZ0e2JhY2tncm91bmQ6IzMxNDM1MSFpbXBvcnRhbnR9YXBwLWFwcHJvdmUgLnRvb2x0aXAudG9vbHRpcC1ib3R0b20tbGVmdD4udG9vbHRpcC1jb250ZW50OmJlZm9yZSxhcHAtYXBwcm92ZSAudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAt''@;'; put 'put ''Ym90dG9tLWxlZnQ6YmVmb3Jle2JvcmRlci1yaWdodDouMjVyZW0gc29saWQgIzMxNDM1MTtib3JkZXItYm90dG9tOi4yMDgzM3JlbSBzb2xpZCAjMzE0MzUxfWFwcC1hcHByb3ZlIC5ub0JvcmRlcntib3JkZXItYm90dG9tOjFweCBzb2xpZCB0cmFuc3BhcmVudCFpbXBvcnRhbnR9YXBwLWFw''@;'; put 'put ''cHJvdmUgLmFwcHJvdmFscy1saXN0LXdyYXBwZXJ7aGVpZ2h0Ojcwdmg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcn1hcHAtYXBwcm92ZSAubm9hcHByb3ZhbHMtaW5mby13cmFwcGVye2Rpc3BsYXk6''@;'; put 'put ''ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OmNhbGMoMTAwdmggLSAyMDBweCl9YXBwLWhpc3RvcnkgLnJlamVjdGVke2NvbG9yOiM5MjIwMWE7Zm9udC13ZWlnaHQ6NzAwfWFwcC1oaXN0b3J5IC5hY2Nl''@;'; put 'put ''cHRlZHtjb2xvcjojMTA1YzI2O2ZvbnQtd2VpZ2h0OjcwMH1hcHAtaGlzdG9yeSAuaHNDZWxse2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnQ7ZmxleC1kaXJlY3Rpb246Y29sdW1uIWltcG9ydGFudDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudDthbGlnbi1pdGVtczpjZW50ZXIhaW1w''@;'; put 'put ''b3J0YW50O3BhZGRpbmc6N3B4fWFwcC1oaXN0b3J5IC5idENlbGx7ZGlzcGxheTpmbGV4IWltcG9ydGFudDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH1hcHAtaGlzdG9yeSAudmVyQ2VudGVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7d29yZC1icmVhazpicmVh''@;'; put 'put ''ay1hbGx9YXBwLWhpc3RvcnkgLmxvYWQtbW9yZSBpbnB1dHt3aWR0aDo5MHB4fWFwcC1oaXN0b3J5ICNub0RhdGFDb250YWluZXJ7aGVpZ2h0OmNhbGMoMTAwdmggLSAyMDBweCl9YXBwLWhpc3RvcnkgLnRhYmxlLWxpbmt7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtmb250LXdlaWdodDo3''@;'; put 'put ''MDB9YXBwLXZpZXdlciAuY2FyZHttYXJnaW4tdG9wOjA7ZmxleDoxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59YXBwLXZpZXdlciBjbHItdHJlZS1ub2RlIGJ1dHRvbnt3aGl0ZS1zcGFjZTpub3dyYXB9YXBwLXZpZXdlciAudG9nZ2xlLXN3aXRjaCBpbnB1dFt0eXBlPWNo''@;'; put 'put ''ZWNrYm94XTpjaGVja2VkK2xhYmVsOmJlZm9yZXtib3JkZXItY29sb3I6IzMxNDM1MTtiYWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTEhaW1wb3J0YW50O3RyYW5zaXRpb246LjE1cyBlYXNlLWluO3RyYW5zaXRpb24tcHJvcGVydHk6Ym9yZGVyLWNvbG9yLGJhY2tncm91bmQtY29sb3J9YXBwLXZp''@;'; put 'put ''ZXdlciAuaGVhZGVyLXJvdyAudGl0bGUtY29se2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9YXBwLXZpZXdlciAuaGVhZGVyLXJvdyAub3B0aW9ucy1jb2x7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZDthbGlnbi1pdGVtczpjZW50ZXJ9YXBwLXZpZXdlciAu''@;'; put 'put ''c3d7bWFyZ2luOjFyZW0gMHJlbSAuNXJlbSAxcmVtfWFwcC12aWV3ZXIgLmluZm9CYXJ7bWFyZ2luLXRvcDoxMHB4O2JhY2tncm91bmQ6IzQ5NTk2Nztjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6M3B4O2ZvbnQtc2l6ZToxNnB4fWFwcC12aWV3ZXIgLmZpbHRlclNpZGV7''@;'; put 'put ''bWFyZ2luLXRvcDoyNnB4O21hcmdpbi1ib3R0b206MTlweH1hcHAtdmlld2VyIC5vcHRpb25zLWRyb3Bkb3duIGNsci1pY29ue21hcmdpbi1yaWdodDo1cHh9YXBwLXZpZXdlciAuZHJvcGRvd24tbWVudXt3aWR0aDoxODBweDttYXJnaW4tdG9wOi0xOHB4O3BhZGRpbmc6MH1hcHAtdmlld2Vy''@;'; put 'put ''IC5kcm9wZG93bi1tZW51IC5idG57d2lkdGg6MTAwJTt0ZXh0LXRyYW5zZm9ybTpub25lfWFwcC12aWV3ZXIgLmNhcmRGbGV4e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfWFwcC12aWV3ZXIgLm5vRGF0YXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtm''@;'; put 'put ''bGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXg6MX1hcHAtdmlld2VyIC5maWx0ZXJCdG57ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1hcHAtdmlld2VyIC5lZGl0QnRue2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFy''@;'; put 'put ''dH1hcHAtdmlld2VyIC5idG5WaWV3e21hcmdpbjowIWltcG9ydGFudH1hcHAtdmlld2VyIC5jb250ZW50LWFyZWF7cGFkZGluZzouNXJlbSFpbXBvcnRhbnQ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn1hcHAtdmlld2VyIC5kb3dubG9hZC1zZWxlY3QgLmNsci1zZWxlY3Qt''@;'; put 'put ''d3JhcHBlcnttYXgtaGVpZ2h0OnVuc2V0IWltcG9ydGFudH1hcHAtdmlld2VyIC5yZWZyZXNoLXRhYmxle2N1cnNvcjpwb2ludGVyO21hcmdpbi1sZWZ0OjVweH1hcHAtdmlld2VyIC5saWJpbmZve3BhZGRpbmc6MTBweCAyMHB4O292ZXJmbG93OmF1dG99YXBwLXZpZXdlciBob3QtdGFibGV7''@;'; put 'put ''aGVpZ2h0OmNhbGMoMTAwdmggLSAyMDBweCl9YXBwLXZpZXdlciBob3QtdGFibGUgLmhhbmRzb250YWJsZSB0Ym9keSB0aC5odF9faGlnaGxpZ2h0LnByaW1hcnlLZXlIZWFkZXJTdHlsZSxhcHAtdmlld2VyIGhvdC10YWJsZSAuaGFuZHNvbnRhYmxlIHRoZWFkIHRoLmh0X19oaWdobGlnaHQu''@;'; put 'put ''cHJpbWFyeUtleUhlYWRlclN0eWxle2JhY2tncm91bmQtY29sb3I6IzMwNmIwMGIwIWltcG9ydGFudH1hcHAtdmlld2VyIGhvdC10YWJsZSAucHJpbWFyeUtleUhlYWRlclN0eWxle2JhY2tncm91bmQtY29sb3I6IzMwNmIwMDZlIWltcG9ydGFudH1hcHAtdmlld2VyIC5uby10YWJsZS1zZWxl''@;'; put 'put ''Y3RlZC1pbmZve2JhY2tncm91bmQ6bm9uZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn1hcHAtdmlld2VyIC53ZWItcXVlcnl7bWF4LWhlaWdodDozNXZofWFwcC12aWV3ZXIgLndlYi1xdWVyeSAud2ViLXF1ZXJ5LXRleHR7bWluLWhlaWdo''@;'; put 'put ''dDoxMDBweDttYXgtaGVpZ2h0OjEwMHB4O3dpZHRoOjEwMCUhaW1wb3J0YW50fWFwcC12aWV3ZXIgLndlYi1xdWVyeSAud2ViLXF1ZXJ5LXdyYXBwZXIgLmNsci1jb250cm9sLWNvbnRhaW5lcnt3aWR0aDoxMDAlfWFwcC12aWV3ZXIgLndlYi1xdWVyeSAud2ViLXF1ZXJ5LXdyYXBwZXIgY2xy''@;'; put 'put ''LXRleHRhcmVhLWNvbnRhaW5lcnttYXJnaW46MCFpbXBvcnRhbnR9YXBwLXZpZXdlciAud2ViLXF1ZXJ5IC53ZWItcXVlcnktd3JhcHBlciAuY2xyLXRleHRhcmVhLXdyYXBwZXJ7bWFyZ2luOjAhaW1wb3J0YW50fWFwcC12aWV3ZXIgLnRhYmxlLXNlYXJjaC13cmFwcGVye21hcmdpbi1sZWZ0''@;'; put 'put ''OjB9YXBwLXZpZXdlciAudGFibGUtc2VhcmNoLXdyYXBwZXIgZm9ybXtwYWRkaW5nLWxlZnQ6MH1hcHAtdmlld2VyIC50YWJsZS1zZWFyY2gtd3JhcHBlciBjbHItaWNvbnttYXJnaW4tdG9wOjRweH1hcHAtdmlld2VyIC50YWJsZS1zZWFyY2gtd3JhcHBlciBjbHItaW5wdXQtY29udGFpbmVy''@;'; put 'put ''e21hcmdpbi10b3A6MH1hcHAtdmlld2VyIC50YWJsZS1zZWFyY2gtd3JhcHBlciAuY2xyLWNvbnRyb2wtY29udGFpbmVye21hcmdpbi1sZWZ0OjB9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpe2FwcC12aWV3ZXIgLmZpbHRlckJ0bntkaXNwbGF5OmZsZXg7anVzdGlmeS1j''@;'; put 'put ''b250ZW50OmNlbnRlcn1hcHAtdmlld2VyIC5lZGl0QnRue2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfX1AbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpe2FwcC12aWV3ZXIgLnJvd3ttYXJnaW4tcmlnaHQ6MHJlbTttYXJnaW4tbGVmdDowcmVtfX1hcHAtZ3JvdXAgLnNpZGVi''@;'; put 'put ''YXItaGVpZ2h0e2hlaWdodDoxMDAlfWFwcC1ncm91cCAuZ3JvdXAtaW5mby10ZXh0e2Rpc3BsYXk6aW5saW5lO2ZvbnQtc2l6ZToyMHB4fWFwcC1ncm91cCAuZ3JvdXAtaW5mb3tib3JkZXI6MXB4IHNvbGlkO2JvcmRlci1yYWRpdXM6M3B4fWFwcC1ncm91cCAuZ3JvdXAtaW5mbyB0ZHt0ZXh0''@;'; put 'put ''LWFsaWduOmNlbnRlcn1hcHAtZ3JvdXAgLmdyb3VwLWRhdGF7Ym9yZGVyOjFweCBzb2xpZDtib3JkZXItcmFkaXVzOjNweH1hcHAtZ3JvdXAgLmdyb3VwLWRhdGF7bWluLWhlaWdodDphdXRvfWFwcC1ncm91cCAuZ3JvdXAtZGF0YSBoMyxhcHAtZ3JvdXAgLmdyb3VwLWRhdGEgaDV7dGV4dC1h''@;'; put 'put ''bGlnbjpjZW50ZXJ9YXBwLWdyb3VwIC5ncm91cC1kYXRhIC5tZW1iZXItdGFibGV7d2lkdGg6MTAwJX1hcHAtZ3JvdXAgLmdyb3VwLWRhdGEgLm1lbWJlci10YWJsZSB0Ym9keSB0cjpob3ZlcntjdXJzb3I6cG9pbnRlcn1hcHAtZ3JvdXAgLnRhYmxlLWNvbnRhaW5lcntvdmVyZmxvdzphdXRv''@;'; put 'put ''fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KXthcHAtZ3JvdXAgLmdyb3VwLWRhdGF7bWluLWhlaWdodDp1bnNldCFpbXBvcnRhbnR9fWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC1ncm91cCAuZ3JvdXAtaW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTE7Ym9yZGVyLWNv''@;'; put 'put ''bG9yOiMzMTQzNTF9Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLWdyb3VwIC5ncm91cC1kYXRhe2JhY2tncm91bmQtY29sb3I6IzMxNDM1MTtib3JkZXItY29sb3I6IzMxNDM1MX1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtZ3JvdXAgLm1lbWJlci10YWJsZSB0Ym9keSB0cjpob3ZlcntiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOiMyOTQwNGJ9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIGFwcC1ncm91cCAuZ3JvdXAtaW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7Ym9yZGVyLWNvbG9yOiNhN2E3YTc7Ym94LXNoYWRvdzowIDJweCA1cHggI2RhZDdkN31ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBw''@;'; put 'put ''LWdyb3VwIC5ncm91cC1kYXRhe2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXItY29sb3I6I2E3YTdhNztib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtZ3JvdXAgLm1lbWJlci10YWJsZSB0Ym9keSB0cjpob3ZlcntiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOiNlNmU2ZTZ9YXBwLXVzZXIgLnNpZGViYXItaGVpZ2h0e2hlaWdodDoxMDAlfWFwcC11c2VyIC51c2VyLWluZm8tdGV4dHtkaXNwbGF5OmlubGluZTtmb250LXNpemU6MjBweH1hcHAtdXNlciAudXNlci1pbmZve2JvcmRlcjoxcHggc29saWQ7Ym9yZGVyLXJhZGl1czozcHh9YXBw''@;'; put 'put ''LXVzZXIgLnVzZXItaW5mbyB0ZHt0ZXh0LWFsaWduOmNlbnRlcn1hcHAtdXNlciAudXNlci1kYXRhe2JvcmRlcjoxcHggc29saWQ7Ym9yZGVyLXJhZGl1czozcHh9YXBwLXVzZXIgLnVzZXItZGF0YXttaW4taGVpZ2h0OmF1dG99YXBwLXVzZXIgLnVzZXItZGF0YSBoMyxhcHAtdXNlciAudXNl''@;'; put 'put ''ci1kYXRhIGg1e3RleHQtYWxpZ246Y2VudGVyfWFwcC11c2VyIC51c2VyLXRhYmxle3dpZHRoOjEwMCV9YXBwLXVzZXIgLnVzZXItdGFibGUgdGhlYWR7YmFja2dyb3VuZC1jb2xvcjojZGFkYWRhfWFwcC11c2VyIC51c2VyLXRhYmxlIHRib2R5IHRyOmhvdmVye2N1cnNvcjpwb2ludGVyfWFw''@;'; put 'put ''cC11c2VyIC53aWR0aC01MHt3aWR0aDo1MCV9YXBwLXVzZXIgLndpZHRoLTMze3dpZHRoOjMzJX1hcHAtdXNlciAudGFibGUtY29udGFpbmVye292ZXJmbG93LXk6c2Nyb2xsO21heC1oZWlnaHQ6NTAwcHh9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpe2FwcC11c2VyIC51''@;'; put 'put ''c2VyLWRhdGF7bWluLWhlaWdodDp1bnNldCFpbXBvcnRhbnR9fWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC11c2VyIC51c2VyLWluZm97YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxO2JvcmRlci1jb2xvcjojMzE0MzUxfWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC11c2VyIC51c2VyLWRhdGF7''@;'; put 'put ''YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxO2JvcmRlci1jb2xvcjojMzE0MzUxfWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC11c2VyIC51c2VyLXRhYmxlIHRib2R5IHRyOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzI5NDA0Yn1ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLXVzZXIgLnVzZXIt''@;'; put 'put ''aW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7Ym9yZGVyLWNvbG9yOiNhN2E3YTc7Ym94LXNoYWRvdzowIDJweCA1cHggI2RhZDdkN31ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLXVzZXIgLnVzZXItZGF0YXtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7Ym9yZGVyLWNvbG9yOiNhN2E3''@;'; put 'put ''YTc7Ym94LXNoYWRvdzowIDJweCA1cHggI2RhZDdkN31ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLXVzZXIgLnVzZXItdGFibGUgdGJvZHkgdHI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZTZlNmU2fWFwcC1yZXF1ZXN0cy1tb2RhbHstLWxpbmUtaGVpZ2h0OiAxNnB4Oy0tbGluZS10b3A6''@;'; put 'put ''IDBweH1hcHAtcmVxdWVzdHMtbW9kYWwgLmxvZy13cmFwcGVyLnNhc2xvZ3twb3NpdGlvbjpyZWxhdGl2ZTt3aGl0ZS1zcGFjZTpwcmU7Zm9udC1mYW1pbHk6bW9ub3NwYWNlfWFwcC1yZXF1ZXN0cy1tb2RhbCAubG9nLXdyYXBwZXIuc2FzbG9nIC5oaWdobGlnaHRlZC1saW5le2JhY2tncm91''@;'; put 'put ''bmQtY29sb3I6I2ZmMDN9YXBwLXJlcXVlc3RzLW1vZGFsIC5saW5lLWhpZ2hsaWdodC1vdmVybGF5e3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt3aWR0aDoxMDAlO3BvaW50ZXItZXZlbnRzOm5vbmU7YW5pbWF0aW9uOmZhZGVPdXQgM3MgZm9yd2FyZHM7ei1pbmRleDoxMH1hcHAtcmVxdWVz''@;'; put 'put ''dHMtbW9kYWwgLnRlbXAtaGVpZ2h0LXNldHRlcntoZWlnaHQ6dmFyKC0tbGluZS1oZWlnaHQpfWFwcC1yZXF1ZXN0cy1tb2RhbCAubGluZS1wb3NpdGlvbi1zZXR0ZXJ7dG9wOnZhcigtLWxpbmUtdG9wKX1hcHAtcmVxdWVzdHMtbW9kYWwgLnRlbXAtbGluZS1oZWlnaHQtY2FsY3twb3NpdGlv''@;'; put 'put ''bjphYnNvbHV0ZTt2aXNpYmlsaXR5OmhpZGRlbjtoZWlnaHQ6YXV0b31hcHAtcmVxdWVzdHMtbW9kYWwgLmVycm9yLWhpZ2hsaWdodHtiYWNrZ3JvdW5kLWNvbG9yOiNmMDAzfWFwcC1yZXF1ZXN0cy1tb2RhbCAud2FybmluZy1oaWdobGlnaHR7YmFja2dyb3VuZC1jb2xvcjojZmYwM31Aa2V5''@;'; put 'put ''ZnJhbWVzIGZhZGVPdXR7MCV7b3BhY2l0eToxfTcwJXtvcGFjaXR5OjF9dG97b3BhY2l0eTowfX1hcHAtcmVxdWVzdHMtbW9kYWwgLmhpZ2hsaWdodGVkLWxpbmV7YmFja2dyb3VuZC1jb2xvcjojNjFhMjIwMmJ9YXBwLXJlcXVlc3RzLW1vZGFsIC5lcnJvci1saW5le2NvbG9yOiNlMTIyMDB9''@;'; put 'put ''YXBwLXJlcXVlc3RzLW1vZGFsIC53YXJuaW5nLWxpbmV7Y29sb3I6I2YyYWYwMH1hcHAtcmVxdWVzdHMtbW9kYWwgLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTRlNGU0O3BhZGRpbmc6MCAwIC41cmVtO21hcmdpbi1ib3R0b206NXB4fWFwcC1y''@;'; put 'put ''ZXF1ZXN0cy1tb2RhbCAuZHJvcGRvd24taXRlbS5zZWxlY3RlZHtiYWNrZ3JvdW5kOiNkOGUzZTl9YXBwLXJlcXVlc3RzLW1vZGFsIC5uby1yZXFze2JvcmRlci10b3A6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEwMTk2MDc4NDMpO3BhZGRpbmctdG9wOjVweDt0ZXh0LWFsaWduOmNlbnRlcn0u''@;'; put 'put ''cmVxdWVzdHMtbW9kYWwgLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZS0tYWNjZXNzaWJsZSAuY2xvc2UgY2xyLWljb257ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9LnJlcXVlc3RzLW1vZGFsIC5tb2RhbC1jb250ZW50e3BhZGRpbmc6MjBweCAxMHB4IDVweH0ud29yay10YWJsZXMtZHJvcGRv''@;'; put 'put ''d24gYnV0dG9ue2NvbG9yOnZhcigtLWNsci1uYXYtbGluay1jb2xvciwgIzhjOGM4YykhaW1wb3J0YW50fS5zdGFjay12aWV3e2hlaWdodDphdXRvIWltcG9ydGFudDttYXNrLWltYWdlOm5vbmUhaW1wb3J0YW50Oy13ZWJraXQtbWFzay1pbWFnZTpub25lIWltcG9ydGFudH0uY29udGVudCBj''@;'; put 'put ''bHItaWNvbnttYXJnaW4tYm90dG9tOjVweH0uY29udGVudCBwcmV7d29yZC1icmVhazpicmVhay1hbGw7d2hpdGUtc3BhY2U6cHJlLXdyYXA7bWF4LWhlaWdodDppbml0aWFsO292ZXJmbG93OnZpc2libGU7Ym9yZGVyOjB9LmNvbnRlbnQgLnN0YWNrLWJsb2NrLWxhYmVse3dpZHRoOjEwMCU7''@;'; put 'put ''cGFkZGluZy1sZWZ0Oi42cmVtIWltcG9ydGFudH0uY29udGVudCAuc3RhY2stYmxvY2stbGFiZWwgLnN0YWNrLXZpZXcta2V5e2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmVyci1saW5rcyAuY2xyLXRyZWVub2RlLWNoaWxkcmVue21heC1oZWlnaHQ6NTVweDtvdmVyZmxvdzphdXRvfWFwcC1z''@;'; put 'put ''eXN0ZW0gLmNvbnRlbnQtYm94e21heC13aWR0aDoxMjg5cHh9YXBwLXN5c3RlbSAuc3lzLWluZm8+ZGl2e2ZsZXg6MX1hcHAtc3lzdGVtIC5zeXMtaW5mbyBkaXY6bnRoLWNoaWxkKDIpe21hcmdpbjowIDMwcHh9YXBwLXN5c3RlbSAuYWRtaW4tYWN0aW9uLGFwcC1zeXN0ZW0gLnVzZXItYWN0''@;'; put 'put ''aW9ue2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzo1cHggMTBweDtib3JkZXItcmFkaXVzOjZweDtib3JkZXI6MXB4IHNvbGlkICNkZWRlZGU7bWFyZ2luLWJvdHRvbTo1cHh9YXBwLXN5c3RlbSAuYWRtaW4tYWN0''@;'; put 'put ''aW9uIGJ1dHRvbixhcHAtc3lzdGVtIC51c2VyLWFjdGlvbiBidXR0b257bWluLXdpZHRoOjEwMnB4fWFwcC1zeXN0ZW0gLmRhcmt7Zm9udC13ZWlnaHQ6NzAwO21hcmdpbi1sZWZ0OjVweH1AbWVkaWEgKG1heC13aWR0aDogOTkzcHgpe2FwcC1zeXN0ZW0gLnN5cy1pbmZvIGRpdjpudGgtY2hp''@;'; put 'put ''bGQoMil7bWFyZ2luOjB9YXBwLXN5c3RlbSAuc3lzLWluZm8gZGl2e21hcmdpbjoyMHB4IDB9fWFwcC1xdWVyeSAuY29udGVudHtkaXNwbGF5OmZsZXh9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufWFwcC1x''@;'; put 'put ''dWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1sb2dpY3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cGFkZGluZzoxNXB4fWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1x''@;'; put 'put ''dWVyeXtwYWRkaW5nOjMwcHggMCAyMHB4IDIwcHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3Bvc2l0aW9uOnJlbGF0aXZlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeT4uY2xyLXJv''@;'; put 'put ''d3tqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnk+LmNsci1yb3c6bm90KDpsYXN0LWNoaWxkKXtwYWRkaW5nLWJvdHRvbToxNXB4O21hcmdpbi1ib3R0b206MTVweDtib3JkZXItYm90dG9tOjFw''@;'; put 'put ''eCBzb2xpZCByZ2JhKDAsMCwwLC4xNil9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC5yZW1vdmUtZ3JvdXAtY2xhdXNlLWJ1dHRvbntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdodDoxMHB4O2NvbG9yOmdyYXl9YXBwLXF1ZXJ5IC5jb250''@;'; put 'put ''ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YXJpYWJsZS1jb2x7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7cGFkZGluZy1ib3R0b206MXB4fWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFyaWFi''@;'; put 'put ''bGUtY29sIC5kYXRhbGlzdC13cmFwcGVye3dpZHRoOjEwMCV9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YXJpYWJsZS1jb2wgLmRhdGFsaXN0LXdyYXBwZXIgaW5wdXR7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMt''@;'; put 'put ''Y29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLm9wZXJhdG9yLWNvbHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydH1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLm9wZXJhdG9yLWNvbCBjbHItc2VsZWN0LWNvbnRhaW5lcntoZWln''@;'; put 'put ''aHQ6NDVweDttYXJnaW4tdG9wOjA7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtwYWRkaW5nLWJvdHRvbToxcHh9YXBwLXF1ZXJ5IC5jb250''@;'; put 'put ''ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLmNoZWNrYm94LXZhbHN7d2lkdGg6MTAwJTtwYWRkaW5nOjAgNXB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjMpfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIg''@;'; put 'put ''LmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5jaGVja2JveC12YWxzIGNsci1jaGVja2JveC1jb250YWluZXJ7bWFyZ2luLXRvcDowfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5jaGVja2JveC12YWxzIHNlY3Rpb257bWF4''@;'; put 'put ''LWhlaWdodDoxMjBweDtvdmVyZmxvdy15OnNjcm9sbH1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAuc2luZ2xlLWZpZWxkLXZhbHN7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5j''@;'; put 'put ''bGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAuc2luZ2xlLWZpZWxkLXZhbHMgLmNsci1jb250cm9sLWNvbnRhaW5lcnt3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5zaW5nbGUtZmllbGQtdmFscyAuY2xyLWNv''@;'; put 'put ''bnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQtd3JhcHBlcnttYXgtd2lkdGg6bm9uZX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAuc2luZ2xlLWZpZWxkLXZhbHMgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0''@;'; put 'put ''LXdyYXBwZXIgLmNsci1pbnB1dC1ncm91cHt3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5zaW5nbGUtZmllbGQtdmFscz5pbnB1dHt3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1j''@;'; put 'put ''b250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5zaW5nbGUtZmllbGQtdmFscyBpbnB1dFt0eXBlPXRpbWVde3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDoxN3B4fWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5y''@;'; put 'put ''YW5nZS12YWxze3dpZHRoOjEwMCV9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnJhbmdlLXZhbHMgLmNsci1jb250cm9sLWNvbnRhaW5lcnt3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWlu''@;'; put 'put ''ZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5yYW5nZS12YWxzIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVye21heC13aWR0aDpub25lfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5yYW5n''@;'; put 'put ''ZS12YWxzIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVyIC5jbHItaW5wdXQtZ3JvdXB7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAucmFuZ2UtdmFscyAuZnJvbXttYXJnaW4t''@;'; put 'put ''Ym90dG9tOjEwcHh9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnJhbmdlLXZhbHMgLmZyb20+aW5wdXR7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZh''@;'; put 'put ''bHVlLWNvbCAucmFuZ2UtdmFscyAuZnJvbSBpbnB1dFt0eXBlPXRpbWVde3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDoxN3B4fWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5yYW5nZS12YWxzIC5mcm9tLGFwcC1xdWVyeSAu''@;'; put 'put ''Y29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5yYW5nZS12YWxzIC50b3ttaW4td2lkdGg6MTAwcHh9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnJhbmdlLXZhbHMgLmZyb20+''@;'; put 'put ''aW5wdXQsYXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnJhbmdlLXZhbHMgLnRvPmlucHV0e3dpZHRoOjEwMCV9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wg''@;'; put 'put ''LnJhbmdlLXZhbHMgLmZyb20gaW5wdXRbdHlwZT10aW1lXSxhcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAucmFuZ2UtdmFscyAudG8gaW5wdXRbdHlwZT10aW1lXXt3aWR0aDoxMDAlO3BhZGRpbmctcmlnaHQ6MTdweH1hcHAt''@;'; put 'put ''cXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAuY29udGFpbnMtdmFsc3t3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5jb250YWlucy12YWxzIC5j''@;'; put 'put ''bHItY29udHJvbC1jb250YWluZXJ7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAuY29udGFpbnMtdmFscyAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQtd3JhcHBlcnttYXgtd2lkdGg6bm9u''@;'; put 'put ''ZX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAuY29udGFpbnMtdmFscyAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQtd3JhcHBlciAuY2xyLWlucHV0LWdyb3Vwe3dpZHRoOjEwMCV9YXBwLXF1ZXJ5IC5jb250''@;'; put 'put ''ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLmNvbnRhaW5zLXZhbHM+aW5wdXR7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAuY29udGFpbnMtdmFscyBpbnB1dFt0''@;'; put 'put ''eXBlPXRpbWVde3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDoxN3B4fWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAuY2xhdXNlLWJ1dHRvbnN7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQ7ZmxleC1kaXJlY3Rpb246''@;'; put 'put ''cm93O2FsaWduLWl0ZW1zOmNlbnRlcn1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLmNsYXVzZS1idXR0b25zIGJ1dHRvbnttaW4td2lkdGg6YXV0b31hcHAtcXVlcnkgLmludmFsaWQtY2xhdXNle2JvcmRlci1sZWZ0OjJweCBzb2xpZCAjZDk0''@;'; put 'put ''YjMxfWFwcC1xdWVyeSAuY2xhdXNlLXJvdyBjbHItaWNvbnttYXJnaW46MH1hcHAtcXVlcnkgLmNsYXVzZS1yb3c6YWZ0ZXJ7cG9zaXRpb246cmVsYXRpdmU7Y29udGVudDoiIjtoZWlnaHQ6LjQxNjY3cmVtO3dpZHRoOi40MTY2N3JlbTt0b3A6LjI5MTY3cmVtO3JpZ2h0Oi4yNXJlbTtiYWNr''@;'; put 'put ''Z3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmdcMjAyNiUyQzkuODQlMkMzLjI0YTAuNjglMkMwLjY4JTJDMCUyQzElMkMxJTJDMSUyQzFaJTIyJTJGJTNFJTBBJTNDJTJGc3Zn''@;'; put 'put ''JTNFJTBBKTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOmNvbnRhaW47dmVydGljYWwtYWxpZ246bWlkZGxlO21hcmdpbjowfWFwcC1xdWVyeSBwcmVbY2xhc3MqPWxhbmd1YWdlLV17cGFkZGluZzo4cHg7bWFyZ2luOjA7Ym9yZGVyLXJhZGl1czoxcHg7ZGlz''@;'; put 'put ''cGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO21pbi1oZWlnaHQ6NjZweDtwb3NpdGlvbjpyZWxhdGl2ZX1hcHAtcXVlcnkgcHJlW2NsYXNzKj1sYW5ndWFnZS1dIHNwYW4uc3Bpbm5lcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjEwcHg7dG9wOjEw''@;'; put 'put ''cHh9YXBwLXF1ZXJ5IHByZVtjbGFzcyo9bGFuZ3VhZ2UtXSBjb2Rle3doaXRlLXNwYWNlOnByZS13cmFwO3dvcmQtYnJlYWs6YnJlYWstd29yZH1hcHAtcXVlcnkgLmlucHV0LXZhbHtib3JkZXI6MHB4O2JhY2tncm91bmQ6I2ZiZjhmODtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOTk5OTk5''@;'; put 'put ''fWFwcC1xdWVyeSBjbHItZGF0ZS1jb250YWluZXJ7bWFyZ2luLXRvcDoycHghaW1wb3J0YW50fWFwcC1xdWVyeSBpbnB1dFt0eXBlPXRpbWVde2JvcmRlcjowO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2IzYjNiM31hcHAtcXVlcnkgaW5wdXRbdHlw''@;'; put 'put ''ZT10aW1lXTpmb2N1c3tvdXRsaW5lOm5vbmV9YXBwLXF1ZXJ5IC5pbi12YWx1ZXMtbW9kYWwgLm1vZGFsLWZvb3Rlcntib3JkZXItdG9wOjFweCBzb2xpZCAjZDhkOGQ4O21hcmdpbi10b3A6MTBweH1hcHAtcXVlcnkgLnByb2dyZXNzLGFwcC1xdWVyeSAucHJvZ3Jlc3Mtc3RhdGlje2JhY2tn''@;'; put 'put ''cm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7d2lkdGg6MTAwJTtoZWlnaHQ6NHB4O3RvcDozcHh9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIGFwcC1xdWVyeSAuY2xhdXNlLWxvZ2lje2JhY2tncm91bmQ6I2U5ZTllOX1ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLXF1ZXJ5IC5jbGF1c2UtcXVlcnl7''@;'; put 'put ''YmFja2dyb3VuZDojZmJmOGY4fWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC1xdWVyeSAubGluZS1udW1iZXJze2JvcmRlci1jb2xvcjojOTg5Nzk3IWltcG9ydGFudH1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtcXVlcnkgLmNsYXVzZS1sb2dpY3tiYWNrZ3JvdW5kOiMxOTJhMzB9Ym9keVtj''@;'; put 'put ''ZHMtdGhlbWU9ZGFya10gYXBwLXF1ZXJ5IC5jbGF1c2UtcXVlcnl7YmFja2dyb3VuZDojMjYzZTQ4fWFwcC1sb2dpbiAuc2lkZUJhclByb3Bze2JhY2tncm91bmQ6IzMxNDM1MSFpbXBvcnRhbnQ7Y29sb3I6I2UwZTBlMH1hcHAtbG9naW4gLnNpZGVCYXJQcm9wcyBoMixhcHAtbG9naW4gLnNp''@;'; put 'put ''ZGVCYXJQcm9wcyBoMyxhcHAtbG9naW4gLnNpZGVCYXJQcm9wcyBoNCxhcHAtbG9naW4gLnNpZGVCYXJQcm9wcyBoNSxhcHAtbG9naW4gLnNpZGVCYXJQcm9wcyBpbnB1dHtjb2xvcjojZTBlMGUwfWFwcC1sb2dpbiAuc2lkZUJhclByb3BzIGJ1dHRvbntib3JkZXItY29sb3I6d2hlYXQhaW1w''@;'; put 'put ''b3J0YW50fWFwcC1sb2dpbiAuc2lkZUJhclByb3BzIGF7Y29sb3I6I2UwZTBlMH1hcHAtbG9naW4gLmxvZ2luLXNpZGViYXItd3JhcHBlcnt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDtwb2ludGVyLWV2ZW50czpub25lO3otaW5kZXg6MTAwMDB9''@;'; put 'put ''YXBwLWxvZ2luIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXI+Kntwb2ludGVyLWV2ZW50czphdXRvfWFwcC1sb2dpbiAubG9naW4tc2lkZWJhci13cmFwcGVyIC5sb2dpbi1zaWRlYmFye3dpZHRoOjQwMHB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtiYWNrZ3JvdW5k''@;'; put 'put ''OiNmZmY7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZGRkO3BhZGRpbmc6NDBweDt0cmFuc2Zvcm06dHJhbnNsYXRlKC00MDBweCk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGVhc2V9YXBwLWxvZ2luIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLXNpZGViYXIgZm9ybS5sb2dpbnt6''@;'; put 'put ''LWluZGV4OjEwMTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2p1c3RpZnktY29udGVudDpjZW50ZXJ9YXBwLWxvZ2luIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLXNpZGViYXIgZm9ybS5sb2dpbiAudGl0bGV7Zm9udC1zaXplOjMycHg7bGV0dGVyLXNwYWNpbmc6''@;'; put 'put ''bm9ybWFsO2xpbmUtaGVpZ2h0OjM2cHh9YXBwLWxvZ2luIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLXNpZGViYXIgZm9ybS5sb2dpbiAudGl0bGUgLndlbGNvbWV7bWFyZ2luLXRvcDozNnB4fWFwcC1sb2dpbiAubG9naW4tc2lkZWJhci13cmFwcGVyIC5sb2dpbi1zaWRlYmFyIGZv''@;'; put 'put ''cm0ubG9naW4gLmxvZ2luLWdyb3Vwe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cGFkZGluZzo0OHB4IDAgMH1hcHAtbG9naW4gLmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tc2lkZWJhciBmb3JtLmxvZ2luIC5sb2dpbi1ncm91cD4qe21hcmdpbjo2cHggMCAxOHB4''@;'; put 'put ''fWFwcC1sb2dpbiAubG9naW4tc2lkZWJhci13cmFwcGVyLmFjdGl2ZSAubG9naW4tc2lkZWJhcnt0cmFuc2Zvcm06dHJhbnNsYXRlKDApO3otaW5kZXg6MTAxfWFwcC1sb2dpbiAubG9naW4tc2lkZWJhci13cmFwcGVyLmFjdGl2ZSAub3ZlcmxheXtkaXNwbGF5OmJsb2NrfWFwcC1sb2dpbiAu''@;'; put 'put ''bG9naW4tc2lkZWJhci13cmFwcGVyIC5vdmVybGF5e2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kOiMyMTIxMjE4MDt6LWluZGV4OjEwMH1hcHAtbG9naW4gLmxvZ2luLWxvZ297bWF4LXdpZHRoOjIwMHB4''@;'; put 'put ''fS5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLWdyb3VwIC5jbHItY29udHJvbC1jb250YWluZXIsLmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tZ3JvdXAgLmNsci1pbnB1dC1ncm91cCwubG9naW4tc2lkZWJhci13cmFwcGVyIC5sb2dpbi1ncm91cCAudXNlcm5hbWUsLmxvZ2lu''@;'; put 'put ''LXNpZGViYXItd3JhcHBlciAubG9naW4tZ3JvdXAgLnBhc3N3b3Jke3dpZHRoOjEwMCV9LmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tZ3JvdXAgLmNsci1pbnB1dC13cmFwcGVyLC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLWdyb3VwIGJ1dHRvbnttYXgtd2lkdGg6bm9uZX1h''@;'; put 'put ''cHAtdGVybXMgOmhvc3R7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDojZjVmNmZmfWFwcC10ZXJtcyAuY2xyLWNoZWNrYm94LXdyYXBwZXIuZGlzYWJsZWR7b3BhY2l0eTouNX1hcHAtdGVybXMgLmNhcmR7aGVpZ2h0OjEwMCU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttYXJn''@;'; put 'put ''aW4tdG9wOjB9YXBwLXRlcm1zIC5jYXJkIC5jYXJkLWJsb2Nre2ZsZXg6MTtvdmVyZmxvdzphdXRvfWFwcC10ZXJtcyAuYWNjZXB0LWNoZWNrYm94e3BhZGRpbmc6MTBweCAxNXB4fWFwcC1kZXBsb3kgLmNhcmR7bWFyZ2luLXRvcDowfWFwcC1kZXBsb3kgLmJ0bnttYXJnaW4tdG9wOjEwcHh9''@;'; put 'put ''YXBwLWRlcGxveSAubG9nLXdyYXBwZXJ7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kOiNmMGYwZjA7Ym9yZGVyOjFweCBzb2xpZCAjYzljOWM5O3BhZGRpbmc6MTBweDtvdmVyZmxvdzphdXRvO3doaXRlLXNwYWNlOnByZS13cmFwfWFwcC1kZXBsb3kgI2NvbnRleHRzLWJ0bntwYWRkaW5nOjNweCAw''@;'; put 'put ''IDA7bWluLXdpZHRoOjMwcHg7bWFyZ2luLWxlZnQ6MTBweDtoZWlnaHQ6MzBweDtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfWFwcC1kZXBsb3kgLnZhbGlkYXRpb24tYmFye2Rpc3BsYXk6ZmxleDttYXJnaW4tdG9wOjIwcHg7''@;'; put 'put ''YWxpZ24taXRlbXM6Y2VudGVyfWFwcC1kZXBsb3kgLnZhbGlkYXRpb24tYmFyIGNsci1pY29ue21hcmdpbi1yaWdodDo1cHh9YXBwLWRlcGxveSAuYXV0b2RlcGxveS1zZWN0aW9ue3BhZGRpbmc6MCAxNXB4fWFwcC1kZXBsb3kgLmF1dG9kZXBsb3ktc2VjdGlvbiAuY2xyLWNoZWNrYm94LXdy''@;'; put 'put ''YXBwZXJ7bWFyZ2luOjIwcHggMH1hcHAtZGVwbG95IC5hdXRvZGVwbG95LXNlY3Rpb24gLmJ0bi1hdXRvZGVwbG95e2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjE1cHggMH1hcHAtYWxlcnRzIGNsci1hbGVydHN7ZGlzcGxheTpibG9ja31hcHAtbWFudWFsLWRlcGxveSAuY2xlYXItbWVtb3J5LWJ1''@;'; put 'put ''dHRvbntyaWdodDoxMHB4O3RvcDoycHh9YXBwLWxpbmVhZ2UgLnRvZ2dsZS1zd2l0Y2ggaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbDpiZWZvcmV7Ym9yZGVyLWNvbG9yOiMzMTQzNTE7YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxIWltcG9ydGFudDt0cmFuc2l0aW9uOi4xNXMg''@;'; put 'put ''ZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kLWNvbG9yfWFwcC1saW5lYWdlICNncmFwaHtoZWlnaHQ6Y2FsYygxMDB2aCAtIDE5NXB4KTtvdmVyZmxvdzpoaWRkZW47dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO2Jv''@;'; put 'put ''cmRlcjoxcHggc29saWQgI2U0ZTRlNDttYXJnaW4tdG9wOjEwcHh9YXBwLWxpbmVhZ2UgLnNlbGVjdGlvbi13cmFwcGVye3dpZHRoOjEwMCU7bWF4LXdpZHRoOjY3MHB4fWFwcC1saW5lYWdlIC5jb2x1bW4tYWN0aXZle2JhY2tncm91bmQ6I2Q4ZTNlOTtjb2xvcjojMDAwfWFwcC1saW5lYWdl''@;'; put 'put ''IC5jb250ZW50LWFyZWF7cGFkZGluZzouNXJlbSFpbXBvcnRhbnR9YXBwLWxpbmVhZ2UgLmNvbnRlbnQtYXJlYSAuY2FyZHttaW4taGVpZ2h0OmNhbGMoMTAwdmggLSAxMjBweCl9YXBwLWxpbmVhZ2UgLmNvbnRlbnQtYXJlYSAuY2FyZCAuY2FyZC1ibG9ja3twYWRkaW5nOi41cmVtIC4zNXJl''@;'; put 'put ''bSFpbXBvcnRhbnR9YXBwLWxpbmVhZ2UgY2xyLXRyZWUtbm9kZSBidXR0b257d2hpdGUtc3BhY2U6bm93cmFwfWFwcC1saW5lYWdlIC5idG4tZ3JvdXAuZGlyZWN0aW9ue21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9YXBwLWxpbmVhZ2UgLmdyYXBoLXJlbmRlci1zcGlu''@;'; put 'put ''bmVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOjEwMCU7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luLXRvcDoxMHB4fWFwcC1saW5lYWdlIC5iaWdsaW5lYWdlLXJvd3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxp''@;'; put 'put ''Z24taXRlbXM6Y2VudGVyO21hcmdpbi1ib3R0b206MjBweH1hcHAtbGluZWFnZSAubW9kYWwtZm9vdGVyIHB7bWFyZ2luOjB9YXBwLWxpbmVhZ2UgLmxpbmVhZ2UtdGl0bGUtd3JhcHBlcntsZWZ0OjEycHh9YXBwLWxpbmVhZ2UgLm1heC1kZXB0aC1pbnB1dHt3aWR0aDoxMDAlfUBtZWRpYSAo''@;'; put 'put ''bWF4LXdpZHRoOiA3NjhweCl7YXBwLWxpbmVhZ2UgLnRvZ2dsZS1zd2l0Y2gtY29udGFpbmVye21hcmdpbi1ib3R0b206MjBweH19ZGMtdHJlZSBjbHItdHJlZS1ub2RlIGJ1dHRvbnt3aGl0ZS1zcGFjZTpub3dyYXB9ZGMtdHJlZSBjbHItdHJlZSAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNv''@;'; put 'put ''bnRhaW5lcjpmb2N1cyAuY2xyLXRyZWVub2RlLWxpbmt7YmFja2dyb3VuZDojZThlOGU4O2JhY2tncm91bmQ6dmFyKC0tY2xyLXRyZWUtbGluay1ob3Zlci1jb2xvciwgI2U4ZThlOCk7dGV4dC1kZWNvcmF0aW9uOm5vbmV9YXBwLW1ldGFkYXRhIC5vYmplY3RzLWNvbHtoZWlnaHQ6NzV2aDtv''@;'; put 'put ''dmVyZmxvdzpzY3JvbGw7Ym9yZGVyOjFweCBzb2xpZCAjY2NjY2NjO2JvcmRlci1yYWRpdXM6NHB4fWFwcC1tZXRhZGF0YSAuY29scy1oZWFke2JvcmRlcjoxcHggc29saWQgI2NjY2NjYztwYWRkaW5nOjEwcHg7ZGlzcGxheTpmbGV4fWFwcC1tZXRhZGF0YSAub2JqZWN0LXRleHR7ZGlzcGxh''@;'; put 'put ''eTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luLWxlZnQ6MTBweDtmbGV4OjF9YXBwLW1ldGFkYXRhIC5yZXBvLWRyb3Bkb3due21hcmdpbi1yaWdodDoxNXB4O21hcmdpbi1sZWZ0OjE1cHg7bWFyZ2luLWJvdHRvbToxMHB4''@;'; put 'put ''fWFwcC1tZXRhZGF0YSAuY2xyLWFjY29yZGlvbi10aXRsZXt3aWR0aDoxMDAlfWFwcC1tZXRhZGF0YSAuZmxvYXQtcmlnaHR7bWFyZ2luOjA7ZmxvYXQ6cmlnaHR9YXBwLW1ldGFkYXRhIC5mdWxsLXdpZHRoe3dpZHRoOjEwMCV9YXBwLW1ldGFkYXRhIC5vYmplY3QtdXJpe21hcmdpbjo1cHgg''@;'; put 'put ''MCAwfWFwcC1tZXRhZGF0YSAub2JqZWN0LWhlYWRlcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3BhZGRpbmctbGVmdDozcHg7cGFkZGluZy1yaWdodDozcHh9YXBwLW1ldGFkYXRhIC5vYmplY3QtaGVhZGVyOmhvdmVye2Jv''@;'; put 'put ''cmRlci1yYWRpdXM6M3B4fWFwcC1tZXRhZGF0YSAuZGF0YWdyaWQtaG9zdHtkaXNwbGF5OnVuc2V0IWltcG9ydGFudH1hcHAtbWV0YWRhdGEgLmNhcmR7bWFyZ2luLXRvcDowO2ZsZXg6MTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufWFwcC1tZXRhZGF0YSAuY29udGVudC1h''@;'; put 'put ''cmVhe3BhZGRpbmc6LjVyZW0haW1wb3J0YW50O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLW1ldGFkYXRhIC5vYmplY3QtaGVhZGVyOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzQwNTU2MH1ib2R5W2Nkcy10aGVtZT1saWdodF0g''@;'; put 'put ''YXBwLW1ldGFkYXRhIC5vYmplY3RzLWNvbHtiYWNrZ3JvdW5kOiNmZmZ9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIGFwcC1tZXRhZGF0YSAub2JqZWN0LWhlYWRlcjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNkOGUzZTl9YXBwLWxpY2Vuc2luZ3toZWlnaHQ6Y2FsYygxMDAlIC0gOTZweCk7cGFk''@;'; put 'put ''ZGluZzoyMHB4fWFwcC1saWNlbnNpbmcgLmNhcmR7bWFyZ2luLXRvcDowfWFwcC1saWNlbnNpbmcgLmtleS1lcnJvcntmb250LXNpemU6MTZweH1hcHAtbGljZW5zaW5nIC5taXNza2V5e2NvbG9yOiNlNzRjM2N9YXBwLWxpY2Vuc2luZyAubGljZW5zZS1rZXktZm9ybSxhcHAtbGljZW5zaW5n''@;'; put 'put ''IC5hY3RpdmF0aW9uLWtleS1mb3Jte3BhZGRpbmc6MH1hcHAtbGljZW5zaW5nIC5saWNlbnNlLWtleS1mb3JtIC5jbHItY29udHJvbC1jb250YWluZXIsYXBwLWxpY2Vuc2luZyAuYWN0aXZhdGlvbi1rZXktZm9ybSAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCV9YXBwLWxpY2Vu''@;'; put 'put ''c2luZyAubGljZW5zZS1rZXktZm9ybSAuY2xyLWNvbnRyb2wtY29udGFpbmVyIHRleHRhcmVhLGFwcC1saWNlbnNpbmcgLmFjdGl2YXRpb24ta2V5LWZvcm0gLmNsci1jb250cm9sLWNvbnRhaW5lciB0ZXh0YXJlYXt3aWR0aDoxMDAlO2hlaWdodDoxNzBweDttYXgtaGVpZ2h0OjE3MHB4O21p''@;'; put 'put ''bi1oZWlnaHQ6MTcwcHg7cmVzaXplOm5vbmV9YXBwLWxpY2Vuc2luZyAuYXBwbHkta2V5c3toZWlnaHQ6NDBweH1hcHAtbGljZW5zaW5nIC5kcm9wLWFyZWF7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6MTVweDtib3JkZXI6''@;'; put 'put ''MnB4IGRhc2hlZCAjYjJiMmIyO2JvcmRlci1yYWRpdXM6NHB4O2N1cnNvcjpwb2ludGVyO21hcmdpbjoxMHB4IDB9YXBwLWxpY2Vuc2luZyBjbHItdGFicyBidXR0b257Ym94LXNoYWRvdzpub25lIWltcG9ydGFudH1hcHAtdmlld2JveGVzIC5saWNlbmNlLW5vdGljZXtmb250LXNpemU6MTRw''@;'; put 'put ''eDtkaXNwbGF5OmJsb2NrO29wYWNpdHk6LjZ9YXBwLXZpZXdib3hlcyBjbHItbW9kYWwucm9vdC1tb2RhbHt6LWluZGV4OjEzMDB9YXBwLXZpZXdib3hlcyBjbHItbW9kYWwucm9vdC1tb2RhbCAubW9kYWwtYm9keS13cmFwcGVye2hlaWdodDpjYWxjKDEwMCUgLSA2MHB4KX1hcHAtdmlld2Jv''@;'; put 'put ''eGVzIGNsci1tb2RhbC5yb290LW1vZGFsIC5tb2RhbC1jb250ZW50e2hlaWdodDo4MHZofWFwcC12aWV3Ym94ZXMgY2xyLW1vZGFsLnJvb3QtbW9kYWwgLm1vZGFsLWJvZHl7bWF4LWhlaWdodDoxMDAlO2hlaWdodDoxMDAlfWFwcC12aWV3Ym94ZXMgZGMtdHJlZXtvdmVyZmxvdzphdXRvO2Zs''@;'; put 'put ''ZXg6MX1hcHAtdmlld2JveGVzIC50b29sdGlwLWxvbmd7d29yZC1icmVhazpicmVhay13b3JkfWFwcC12aWV3Ym94ZXMgLmFkZC1uZXd7d2lkdGg6NTAlO3BhZGRpbmctcmlnaHQ6NXB4fWFwcC12aWV3Ym94ZXMgLmFkZC1uZXc+cHttYXJnaW4tYm90dG9tOjFweH1hcHAtdmlld2JveGVzIC52''@;'; put 'put ''aWV3Ym94LWxpbWl0LW5vdGljZXtvcGFjaXR5Oi43O2NvbG9yOiNlNzRjM2N9YXBwLXZpZXdib3hlcyAuY3VycmVudGx5LW9wZW57d2lkdGg6NTAlfWFwcC12aWV3Ym94ZXMgLmN1cnJlbnRseS1vcGVuIC5vcGVuLXZpZXdib3h7Y3Vyc29yOnBvaW50ZXI7cGFkZGluZzozcHggNXB4fWFwcC12''@;'; put 'put ''aWV3Ym94ZXMgLmN1cnJlbnRseS1vcGVuIC5vcGVuLXZpZXdib3guc2VsZWN0ZWR7YmFja2dyb3VuZDojM2M4NTAwMmV9YXBwLXZpZXdib3hlcyAudmlld2JveGVzLWNvbnRhaW5lcntwb3NpdGlvbjpmaXhlZDtpbnNldDowO3BvaW50ZXItZXZlbnRzOm5vbmU7ei1pbmRleDo5OTl9YXBwLXZp''@;'; put 'put ''ZXdib3hlcyAudmlld2JveHttaW4td2lkdGg6MjAwcHg7bWluLWhlaWdodDoyMDBweDtwb3NpdGlvbjpmaXhlZDtsZWZ0OjA7dG9wOjA7cG9pbnRlci1ldmVudHM6YWxsO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czozcHg7Ym9yZGVy''@;'; put 'put ''LXRvcC1yaWdodC1yYWRpdXM6M3B4O2JveC1zaGFkb3c6MCAwIDEwcHggLTNweCAjMDAwfWFwcC12aWV3Ym94ZXMgLnZpZXdib3guZm9jdXNlZHt6LWluZGV4OjExMDA7b3V0bGluZTpub25lfWFwcC12aWV3Ym94ZXMgLnZpZXdib3ggLmNvbnRlbnR7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAs''@;'; put 'put ''MCwwLC4zMDE5NjA3ODQzKTtiYWNrZ3JvdW5kOiNmZmY7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtmbGV4OjE7b3ZlcmZsb3cteDphdXRvfWFwcC12aWV3Ym94ZXMgLnZpZXdib3ggLmRyYWctaGFuZGxle3dpZHRoOjEwMCU7bWluLWhlaWdodDoyMHB4O2JhY2tncm91bmQtY29sb3I6IzNjODUw''@;'; put 'put ''MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjNweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czozcHg7Y29sb3I6I2ZmZjtwYWRkaW5nOjAgNXB4O3BvaW50ZXItZXZlbnRzOmFsbH1hcHAtdmlld2JveGVzIC52aWV3Ym94IC5kcmFnLWhhbmRsZSAudGFibGUtdGl0bGV7d2hpdGUtc3BhY2U6cHJl''@;'; put 'put ''LXdyYXA7d29yZC1icmVhazpicmVhay1hbGx9YXBwLXZpZXdib3hlcyAudmlld2JveCAuZHJhZy1oYW5kbGUgLmFjdGlvbnN7ZGlzcGxheTpmbGV4O21pbi13aWR0aDozNXB4fWFwcC12aWV3Ym94ZXMgLnZpZXdib3ggLmRyYWctaGFuZGxlIC5hY3Rpb25zIGNsci1pY29ue2N1cnNvcjpwb2lu''@;'; put 'put ''dGVyO21hcmdpbi1sZWZ0OjVweH1hcHAtdmlld2JveGVzIC52aWV3Ym94IC5kcmFnLWhhbmRsZSAuYWN0aW9ucyBjbHItaWNvbjpob3Zlcnt0cmFuc2Zvcm06c2NhbGUoMS4zKX1hcHAtdmlld2JveGVzIC52aWV3Ym94IC5jbGljay1pY29ue2N1cnNvcjpwb2ludGVyfWFwcC12aWV3Ym94ZXMg''@;'; put 'put ''LnZpZXdib3ggLmNsaWNrLWljb246aG92ZXJ7dHJhbnNmb3JtOnNjYWxlKDEuMyl9YXBwLXZpZXdib3hlcyAudmlld2JveCAuZHJhZ0hhbmRsZXtwb3NpdGlvbjphYnNvbHV0ZX1hcHAtdmlld2JveGVzIC52aWV3Ym94IC5kcmFnSGFuZGxlLmNvcm5lcnt3aWR0aDoxNXB4O2hlaWdodDoxNXB4''@;'; put 'put ''O2N1cnNvcjpud3NlLXJlc2l6ZX1hcHAtdmlld2JveGVzIC52aWV3Ym94IC5kcmFnSGFuZGxlLnJpZ2h0e3dpZHRoOjJweDtoZWlnaHQ6MTAwJTtjdXJzb3I6ZXctcmVzaXplfWFwcC12aWV3Ym94ZXMgLnZpZXdib3ggLmRyYWdIYW5kbGUuYm90dG9te2hlaWdodDoycHg7d2lkdGg6MTAwJTtj''@;'; put 'put ''dXJzb3I6bnMtcmVzaXplfWFwcC12aWV3Ym94ZXMgLmNvbHMtc2VhcmNoe3dpZHRoOjEwMCU7bWFyZ2luLXRvcDo1cHg7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4yNzg0MzEzNzI1KTtib3JkZXItcmFkaXVzOjNweH1hcHAtdmlld2JveGVzIC5jb2xzLWxpc3R7Ym9yZGVyOnNvbGlk''@;'; put 'put ''IDFweCAjY2NjO21pbi1oZWlnaHQ6NjBweDtib3JkZXItcmFkaXVzOjRweDtvdmVyZmxvdzpoaWRkZW47ZGlzcGxheTpibG9jazt3aWR0aDo0MDBweDttYXgtd2lkdGg6MTAwJTttYXJnaW4tdG9wOjVweH1hcHAtdmlld2JveGVzIC5jb2wtYm94e3BhZGRpbmc6MnB4IDEwcHg7Ym9yZGVyLWJv''@;'; put 'put ''dHRvbTpzb2xpZCAxcHggI2NjYztjb2xvcjojMDAwMDAwZGU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Ym94LXNpemluZzpib3JkZXItYm94O2N1cnNvcjptb3ZlO2ZvbnQtc2l6ZToxNHB4''@;'; put 'put ''fWFwcC12aWV3Ym94ZXMgLmNvbC1ib3guc2VhcmNoOmZvY3Vze2JhY2tncm91bmQ6IzAwMDAwMDFhfWFwcC12aWV3Ym94ZXMgLmNvbC1ib3gucHJpbWFyeUtleUhlYWRlclN0eWxle2JhY2tncm91bmQ6IzMwNmIwMDI0fWFwcC12aWV3Ym94ZXMgLmNkay1kcmFnLXByZXZpZXd7Ym94LXNpemlu''@;'; put 'put ''Zzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaGFkb3c6MCA1cHggNXB4IC0zcHggIzAwMDMsMCA4cHggMTBweCAxcHggIzAwMDAwMDI0LDAgM3B4IDE0cHggMnB4ICMwMDAwMDAxZjt6LWluZGV4OjEzMDAhaW1wb3J0YW50fWFwcC12aWV3Ym94ZXMgLmNkay1kcmFnLXBsYWNl''@;'; put 'put ''aG9sZGVye29wYWNpdHk6MH1hcHAtdmlld2JveGVzIC5jZGstZHJhZy1hbmltYXRpbmd7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjI1cyBjdWJpYy1iZXppZXIoMCwwLC4yLDEpfWFwcC12aWV3Ym94ZXMgLmNvbC1ib3g6bGFzdC1jaGlsZHtib3JkZXI6bm9uZX1hcHAtdmlld2JveGVzIC5jb2xz''@;'; put 'put ''LWxpc3QuY2RrLWRyb3AtbGlzdC1kcmFnZ2luZyAuY29sLWJveDpub3QoLmNkay1kcmFnLXBsYWNlaG9sZGVyKXt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMjVzIGN1YmljLWJlemllcigwLDAsLjIsMSl9YXBwLXZpZXdib3hlcyAuZGlzYWJsZWR7b3BhY2l0eTouNTt0cmFuc2Zvcm06bm9uZSFp''@;'; put 'put ''bXBvcnRhbnQ7cG9pbnRlci1ldmVudHM6bm9uZX1hcHAtdmlld2JveGVzIC5maWx0ZXItYWN0aXZle2NvbG9yOiMwMDcyYTN9YXBwLXZpZXdib3hlcyBob3QtdGFibGUgLmZpcnN0Q29sdW1uSGVhZGVyU3R5bGUgYnV0dG9uLmNoYW5nZVR5cGV7ZGlzcGxheTpub25lfWFwcC12aWV3Ym94ZXMg''@;'; put 'put ''aG90LXRhYmxlIC5oYW5kc29udGFibGUgdGJvZHkgdGguaHRfX2hpZ2hsaWdodC5wcmltYXJ5S2V5SGVhZGVyU3R5bGUsYXBwLXZpZXdib3hlcyBob3QtdGFibGUgLmhhbmRzb250YWJsZSB0aGVhZCB0aC5odF9faGlnaGxpZ2h0LnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kOiMz''@;'; put 'put ''MDZiMDBiMH1hcHAtdmlld2JveGVzIGhvdC10YWJsZSAucHJpbWFyeUtleUhlYWRlclN0eWxle2JhY2tncm91bmQ6IzMwNmIwMDZlfWFwcC12aWV3Ym94ZXMgaG90LXRhYmxlIHRoLnJlYWRvbmx5Q2VsbCBkaXZ7b3BhY2l0eTouNH1hcHAtdmlld2JveGVzIGhvdC10YWJsZSB0ZC5yZWFkb25s''@;'; put 'put ''eUNlbGx7b3BhY2l0eTouNX1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtdmlld2JveGVzIC5jdXJyZW50bHktb3BlbiAub3Blbi12aWV3Ym94OmhvdmVye2JhY2tncm91bmQ6IzMxNGI1N31ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtdmlld2JveGVzIC5jb2xzLWxpc3R7YmFja2dyb3VuZDoj''@;'; put 'put ''MzE0YjU3O2NvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOiM4NTg1ODV9Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLXZpZXdib3hlcyAuY29sLWJveHtiYWNrZ3JvdW5kOiMzMTRiNTc7Ym9yZGVyLWNvbG9yOiM4NTg1ODU7Y29sb3I6aW5oZXJpdH1ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLXZp''@;'; put 'put ''ZXdib3hlcyAuY3VycmVudGx5LW9wZW4gLm9wZW4tdmlld2JveDpob3ZlcntiYWNrZ3JvdW5kOiNlOGU4ZTh9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIGFwcC12aWV3Ym94ZXMgLmNvbHMtbGlzdHtiYWNrZ3JvdW5kOiNmZmZ9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIGFwcC12aWV3Ym94ZXMgLmNv''@;'; put 'put ''bC1ib3h7YmFja2dyb3VuZDojZmZmfWFwcC1hdXRvbWF0aWMtZGVwbG95IC5kYy1sb2MtaW5wdXQtd3JhcHBlciBpbnB1dHt3aWR0aDo1MDBweH1hcHAtYXV0b21hdGljLWRlcGxveSAuYXV0by1kZXBsb3l7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6''@;'; put 'put ''Y2VudGVyO3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7YmFja2dyb3VuZDojMDAwNjt6LWluZGV4OjEwMH1hcHAtYXV0b21hdGljLWRlcGxveSAuc3Bpbm5lci1ib3h7d2lkdGg6NDAwcHg7cGFkZGluZzoyMHB4O2JvcmRlci1yYWRpdXM6M3B4O2JhY2tncm91bmQ6I2ZmZjtkaXNwbGF5OmZsZXg7''@;'; put 'put ''anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JveC1zaGFkb3c6MXB4IDFweCA4cHggIzAwMDAwMDgyfWFwcC1hdXRvbWF0aWMtZGVwbG95IC5zcGlubmVyLWJveCAuYnV0dG9uc3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250''@;'; put 'put ''ZW50OnNwYWNlLWJldHdlZW47d2lkdGg6MTAwJX1hcHAtYXV0b21hdGljLWRlcGxveSAuZGVwbG95LXN0YXR1cy1yb3d7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1zZWxmOmZsZXgtc3RhcnR9YXBwLWF1dG9tYXRpYy1kZXBsb3kgLmRlcGxveS1zdGF0dXMtcm93IHB7''@;'; put 'put ''bWFyZ2luOjAgMCAwIDEwcHh9YXBwLWF1dG9tYXRpYy1kZXBsb3kgLmRlcGxveS1zdWNjZXNze2NvbG9yOiM2ZWNmNDR9YXBwLWF1dG9tYXRpYy1kZXBsb3kgLmRlcGxveS1lcnJvcntjb2xvcjojZTc0YzNjfWFwcC1hdXRvbWF0aWMtZGVwbG95IC5kZXBsb3ktdW5kZXRlcm1pbmF0ZWR7Y29s''@;'; put 'put ''b3I6I2NhY2FjYX1hcHAtYXV0b21hdGljLWRlcGxveSBocntib3JkZXI6MDtib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4yNzA1ODgyMzUzKX1hcHAtaW5mby1tb2RhbCAuY2xyLWFib3J0LW1vZGFsIC5tb2RhbC10aXRsZS13cmFwcGVye3dpZHRoOjEwMCV9YXBwLWluZm8t''@;'; put 'put ''bW9kYWwgLmNsci1hYm9ydC1tb2RhbCAubW9kYWx7ei1pbmRleDoyMDUwfWFwcC1pbmZvLW1vZGFsIC5tb2RhbC10aXRsZXtwb3NpdGlvbjpyZWxhdGl2ZX1hcHAtaW5mby1tb2RhbCAuc2FzU2VydmljZXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdodDoxMHB4O21hcmdpbjowfWFwcC1p''@;'; put 'put ''bmZvLW1vZGFsIC5tb2RhbC1mb290ZXJ7cG9zaXRpb246cmVsYXRpdmV9YXBwLWluZm8tbW9kYWwgLnN5c3RleHR7b3ZlcmZsb3c6YXV0bzttYXJnaW4tdG9wOjIwcHg7cGFkZGluZzoxMHB4IDA7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RjZGNkY31hcHAtaW5mby1tb2RhbCAuc3lzdGV4dCBw''@;'; put 'put ''e21hcmdpbi10b3A6MDt3b3JkLXdyYXA6YnJlYWstd29yZH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5jb2x1bW4tZW50cnl7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNv''@;'; put 'put ''bHVtbi1lbnRyeSAubmFtZS1pbnB1dC1yb3d7d2lkdGg6MTAwJTttYXgtd2lkdGg6MjYwcHh9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY29sdW1uLWVudHJ5IC5uYW1lLWlucHV0LXJvdyAuY2VsbC1kZXNje21hcmdpbi1yaWdodDozMHB4O21hcmdpbi10b3A6MTBweH1h''@;'; put 'put ''cHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5jb2x1bW4tZW50cnkgLmlucHV0cy13cmFwcGVye2ZsZXg6MTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNvbHVtbi1lbnRyeSAuaW5wdXRzLXdyYXBw''@;'; put 'put ''ZXI+Kjpub3QoLmRhdGUtZmllbGQpOm5vdChjbHItc2VsZWN0LWNvbnRhaW5lcil7ZmxleDoxfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNvbHVtbi1lbnRyeSBwe21hcmdpbi10b3A6MH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5jb2x1bW4tZW50''@;'; put 'put ''cnkgLmNsci10ZXh0YXJlYS13cmFwcGVye21hcmdpbi10b3A6MCFpbXBvcnRhbnR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY29sdW1uLWVudHJ5IC5jbHItZm9ybS1jb250cm9se21hcmdpbi10b3A6MCFpbXBvcnRhbnR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRp''@;'; put 'put ''dC1tb2RhbCAuY29sdW1uLWVudHJ5IGFwcC1zb2Z0LXNlbGVjdHtkaXNwbGF5OmJsb2NrO3dpZHRoOjIyNHB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtjb2xvcjojMDAwO3BhZGRpbmc6Y2FsYyguMjVyZW0gKyAycHgpIC41cmVtO2JvcmRlci1yYWRpdXM6LjEyNXJlbTtmb250LXNpemU6LjU0''@;'; put 'put ''MTY2N3JlbTttYXJnaW4tcmlnaHQ6NnB4fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNvbHVtbi1lbnRyeSBhcHAtc29mdC1zZWxlY3QgaW5wdXR7d2lkdGg6MTAwJTtib3JkZXI6MH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5jb2x1bW4tZW50cnkg''@;'; put 'put ''YXBwLXNvZnQtc2VsZWN0IGlucHV0OmZvY3Vze2JhY2tncm91bmQ6bm9uZTtib3JkZXI6MCFpbXBvcnRhbnR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY29sdW1uLWVudHJ5IGFwcC1zb2Z0LXNlbGVjdCBpbnB1dDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbixhcHAt''@;'; put 'put ''ZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5jb2x1bW4tZW50cnkgYXBwLXNvZnQtc2VsZWN0IGlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lO21hcmdpbjowfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNv''@;'; put 'put ''bHVtbi1lbnRyeTpmaXJzdC1jaGlsZCBwOmZpcnN0LWNoaWxke21hcmdpbi10b3A6MH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5kYXRlLWZpZWxke3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQt''@;'; put 'put ''bW9kYWwgLmRhdGUtZmllbGQgdGV4dGFyZWF7d2lkdGg6MjMwcHh9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuZGF0ZS1maWVsZCAuZGF0ZS1waWNrZXJ7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6NHB4fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9k''@;'; put 'put ''YWwgLmRhdGUtZmllbGQgLmRhdGUtcGlja2VyIC5jbHItaW5wdXQtZ3JvdXB7Ym9yZGVyOjAhaW1wb3J0YW50fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLm1vZGFsLWJvZHl7cGFkZGluZy1ib3R0b206MTBweH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFs''@;'; put 'put ''IGNsci1zZWxlY3QtY29udGFpbmVye2JvcmRlcjoxcHggc29saWQgIzk5OTtjb2xvcjojMDAwO2JvcmRlci1yYWRpdXM6LjEyNXJlbTttYXJnaW4tcmlnaHQ6NXB4fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgY2xyLXNlbGVjdC1jb250YWluZXIgLmNsci1zZWxlY3Qtd3Jh''@;'; put 'put ''cHBlcnttYXgtaGVpZ2h0OnVuc2V0fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgY2xyLXNlbGVjdC1jb250YWluZXIgLmNsci1zZWxlY3Qtd3JhcHBlcjphZnRlcnt0b3A6MTVweH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIGNsci1zZWxlY3QtY29udGFp''@;'; put 'put ''bmVyIHNlbGVjdHtoZWlnaHQ6YXV0bztwYWRkaW5nOjEwcHggMjBweCAxMHB4IDEwcHg7Ym9yZGVyOjAhaW1wb3J0YW50fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgY2xyLXNlbGVjdC1jb250YWluZXIgc2VsZWN0OmZvY3Vze2JhY2tncm91bmQ6MCAwIWltcG9ydGFudH1h''@;'; put 'put ''cHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIGNsci1zZWxlY3QtY29udGFpbmVyIHNlbGVjdDpob3ZlcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgY2xyLWlucHV0LWNvbnRhaW5lcnt3aWR0aDoyMjRweDtib3JkZXI6''@;'; put 'put ''MXB4IHNvbGlkICM5OTk7Y29sb3I6IzAwMDtwYWRkaW5nOmNhbGMoLjI1cmVtICsgMnB4KSAuNXJlbTtib3JkZXItcmFkaXVzOi4xMjVyZW07Zm9udC1zaXplOi41NDE2NjdyZW07bWFyZ2luLXJpZ2h0OjZweH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIGNsci1pbnB1dC1j''@;'; put 'put ''b250YWluZXIgLmNsci1pbnB1dC1ncm91cHt3aWR0aDoxMDAlO2JvcmRlcjowfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgY2xyLWlucHV0LWNvbnRhaW5lciBpbnB1dHt3aWR0aDoxMDAlO2JvcmRlcjowfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgY2xy''@;'; put 'put ''LWlucHV0LWNvbnRhaW5lciBpbnB1dDpmb2N1c3tiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOjAhaW1wb3J0YW50fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgY2xyLWlucHV0LWNvbnRhaW5lciBpbnB1dDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbixhcHAtZWRpdC1yZWNv''@;'; put 'put ''cmQgLnJlY29yZC1lZGl0LW1vZGFsIGNsci1pbnB1dC1jb250YWluZXIgaW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjB9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHItaW5wdXQtY29udGFpbmVyLmlu''@;'; put 'put ''dmFsaWQtZGF0YXtib3JkZXItY29sb3I6cmVkfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLm1vZGFsLWRpYWxvZ3t3aWR0aDo4MHZ3fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNsci1jb250cm9sLWNvbnRhaW5lcnt3aWR0aDoxMDAlfWFwcC1lZGl0''@;'; put 'put ''LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNsci1jb250cm9sLWNvbnRhaW5lciB0ZXh0YXJlYXt3aWR0aDoxMDAlO3Jlc2l6ZTpub25lO2JvcmRlci1jb2xvcjojOTk5fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNsci1jb250cm9sLWNvbnRhaW5lciB0ZXh0YXJl''@;'; put 'put ''YS5pbnZhbGlkLWRhdGF7Ym9yZGVyLWNvbG9yOnJlZDtvdXRsaW5lOjB9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIHRleHRhcmVhLm5vdC1jaGFye2ZvbnQtZmFtaWx5Okx1Y2lkYSBDb25zb2xlLE1vbmFjbyxtb25vc3BhY2V9YXBw''@;'; put 'put ''LWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuZ2VuZXJhdGUtcmVjb3JkLXVybHtyaWdodDo0MHB4O3RvcDo0MHB4O2ZvbnQtc2l6ZToxMnB4fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmdlbmVyYXRlLXJlY29yZC11cmwtYnV0dG9ue3JpZ2h0OjI1cHg7dG9w''@;'; put 'put ''OjVweH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGV7cGFkZGluZzowIDAgMXJlbX1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5tb2RhbC1mb290ZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtq''@;'; put 'put ''dXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5tb2RhbC1mb290ZXIgLmFsZXJ0e21hcmdpbjowfWFwcC1lZGl0LXJlY29yZCAucHJldi1uZXh0e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9YXBwLWVkaXQtcmVj''@;'; put 'put ''b3JkIC5wcmV2LW5leHQgcHttYXJnaW46MH1hcHAtZWRpdC1yZWNvcmQgLnByZXYtbmV4dCBidXR0b257bWFyZ2luOjAgMTBweH1hcHAtZWRpdC1yZWNvcmQgLmZvY3VzYWJsZTpmb2N1c3tib3gtc2hhZG93OjAgMCAzcHggIzVhYTIyMH1hcHAtZWRpdC1yZWNvcmQgLmVudHJ5LWlucHV0LWxl''@;'; put 'put ''ZnQtb2Zmc2V0e2xlZnQ6LTMwcHh9YXBwLWVkaXQtcmVjb3JkIC52YWxpZGF0aW9uLWluZm8tYWxlcnR7d2lkdGg6MzEwcHh9YXBwLWF1dG9jb21wbGV0ZSAuaW5wdXQtdmFse2JvcmRlcjowcHg7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOTk5OTk5''@;'; put 'put ''fWFwcC1hdXRvY29tcGxldGUgaW5wdXR7d2lkdGg6MTAwJTtvdXRsaW5lOm5vbmV9YXBwLWF1dG9jb21wbGV0ZSBpbnB1dDo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye21hcmdpbi10b3A6LTVweH1hcHAtYXV0b2NvbXBsZXRlIC5hdXRvY29tcGxldGUtd3JhcHBlciAub3Zl''@;'; put 'put ''cmxheXtwb3NpdGlvbjpmaXhlZDtpbnNldDowO3otaW5kZXg6MTUwMH1hcHAtYXV0b2NvbXBsZXRlIC5hdXRvY29tcGxldGUtd3JhcHBlciAuZGF0YWxpc3R7cG9zaXRpb246Zml4ZWQ7Ym94LXNoYWRvdzowIDNweCAxMHB4IC0xcHggIzAwMDAwMDJiO292ZXJmbG93OmF1dG87ei1pbmRleDoy''@;'; put 'put ''MDAwfWFwcC1hdXRvY29tcGxldGUgLmF1dG9jb21wbGV0ZS13cmFwcGVyIC5kYXRhbGlzdCBvcHRpb257cGFkZGluZzo1cHggMTBweDtjdXJzb3I6cG9pbnRlcn1hcHAtYXV0b2NvbXBsZXRlIC5hdXRvY29tcGxldGUtd3JhcHBlciAuZGF0YWxpc3Qgb3B0aW9uOmhvdmVye2JhY2tncm91bmQ6''@;'; put 'put ''IzAwMDAwMDBmfWFwcC1hdXRvY29tcGxldGUgLmF1dG9jb21wbGV0ZS13cmFwcGVyIC5kYXRhbGlzdCBvcHRpb24uZm9jdXNlZHtiYWNrZ3JvdW5kOiMwMDAwMDAwZn1hcHAtYXV0b2NvbXBsZXRlIC5hdXRvY29tcGxldGUtd3JhcHBlciAubG9hZC1tb3Jle3RleHQtYWxpZ246Y2VudGVyO2Jv''@;'; put 'put ''cmRlci10b3A6MXB4IHNvbGlkICNlNmU2ZTZ9Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLWF1dG9jb21wbGV0ZSAuZGF0YWxpc3R7YmFja2dyb3VuZDojMjEzMzNiO2JvcmRlcjoxcHggc29saWQgIzU3NTc1N31ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtYXV0b2NvbXBsZXRlIGlucHV0e2Nv''@;'; put 'put ''bG9yOiNmZmZ9Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLWF1dG9jb21wbGV0ZSAuZGF0YWxpc3Qgb3B0aW9ue2NvbG9yOiNmZmZ9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIGFwcC1hdXRvY29tcGxldGUgLmRhdGFsaXN0e2JhY2tncm91bmQ6I2ZmZn1hcHAtY29udGFjdC1saW5rIC51bnNldHtj''@;'; put 'put ''b2xvcjp1bnNldH1hcHAtZGF0YXNldC1pbmZvIC5tb2RhbC1ib2R5IGNsci10YWJze21heC1oZWlnaHQ6NzB2aH1hcHAtZGF0YXNldC1pbmZvIC5tb2RhbC1ib2R5IC50YWItY29udGVudHt3aWR0aDoxMDAlO292ZXJmbG93OmF1dG99YXBwLWRhdGFzZXQtaW5mbyAubW9kYWwtYm9keSAudGFi''@;'; put 'put ''LWNvbnRlbnQgLmRhdGFncmlkLW91dGVyLXdyYXBwZXJ7d2lkdGg6MTAwJX1hcHAtZGF0YXNldC1pbmZvIGNsci1tb2RhbCAubW9kYWwtZGlhbG9ne2hlaWdodDoxMDAlfWFwcC1kYXRhc2V0LWluZm8gLmNsaWNrYWJsZS1yb3d7Y3Vyc29yOnBvaW50ZXJ9YXBwLWRhdGFzZXQtaW5mbyAuZGF0''@;'; put 'put ''YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGw6Zm9jdXN7b3V0bGluZTpub25lO291dGxpbmUtb2Zmc2V0OjB9YXBwLXVwbG9hZC1zdGF0ZXJ7ZGlzcGxheTpibG9ja31hcHAtdXBsb2FkLXN0YXRlciBwe21hcmdpbjowO3RleHQtYWxpZ246Y2VudGVyfWFwcC1hcHByb3ZlLWRldGFpbHMgLmxv''@;'; put 'put ''YWRlcntkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtoZWlnaHQ6NzV2aDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1ufWFwcC1hcHByb3ZlLWRldGFpbHMgLm1vZGFsTGFyZ2V7d2lkdGg6NTByZW0haW1wb3J0YW50fWFwcC1hcHByb3ZlLWRldGFp''@;'; put 'put ''bHMgLmFkZGVkUm93e2JvcmRlcjoxcHggc29saWQgcmdiYSg5LDc3LDExNywuMik7Ym9yZGVyLXJhZGl1czo1cHh9YXBwLWFwcHJvdmUtZGV0YWlscyAuZGVsZXRlZFJvd3tib3JkZXI6MXB4IHNvbGlkIHJnYmEoNzAsNzEsNzAsLjIpO2JvcmRlci1yYWRpdXM6NXB4fWFwcC1hcHByb3ZlLWRl''@;'; put 'put ''dGFpbHMgLnVwZGF0ZWRSb3d7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDksMTE3LDksLjIpO2JvcmRlci1yYWRpdXM6NXB4fWFwcC1hcHByb3ZlLWRldGFpbHMgLmNoe2JhY2tncm91bmQ6IzAwMDAwMDFhO2JvcmRlcjoxcHggc29saWQgcmdiYSgxMDQsMTAwLDAsLjQpO2JvcmRlci1yYWRpdXM6''@;'; put 'put ''NXB4fWFwcC1hcHByb3ZlLWRldGFpbHMgLmNoOmhvdmVye2JhY2tncm91bmQ6I2ZjODc3ODY2fWFwcC1hcHByb3ZlLWRldGFpbHMgLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXRvcC1yaWdodCxhcHAtYXBwcm92ZS1kZXRhaWxzIC50b29sdGlwLnRvb2x0aXAtdG9wLXJpZ2h0''@;'; put 'put ''Pi50b29sdGlwLWNvbnRlbnQsYXBwLWFwcHJvdmUtZGV0YWlscyAudG9vbHRpcD4udG9vbHRpcC1jb250ZW50e2ZvbnQtc2l6ZTouNTQxNjdyZW07Zm9udC13ZWlnaHQ6NDAwO2xldHRlci1zcGFjaW5nOm5vcm1hbDtiYWNrZ3JvdW5kOiMzMTQzNTE7Ym9yZGVyLXJhZGl1czouMTI1cmVtO2Nv''@;'; put 'put ''bG9yOiNmMGYxZWM7bGluZS1oZWlnaHQ6Ljc1cmVtO21hcmdpbjowO3BhZGRpbmc6LjM3NXJlbSAuNXJlbTt3aWR0aDoyMzVweDtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDphdXRvIGF1dG8gMTAwJSAxMnB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDttYXJnaW4tYm90dG9tOi42NjY2''@;'; put 'put ''N3JlbX1hcHAtYXBwcm92ZS1kZXRhaWxzIC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC10b3AtcmlnaHQ6YmVmb3JlLGFwcC1hcHByb3ZlLWRldGFpbHMgLnRvb2x0aXAudG9vbHRpcC10b3AtcmlnaHQ+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsYXBwLWFwcHJvdmUtZGV0YWls''@;'; put 'put ''cyAudG9vbHRpcD4udG9vbHRpcC1jb250ZW50OmJlZm9yZXtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206LS4zNzVyZW07bGVmdDowO3RvcDphdXRvO3JpZ2h0OmF1dG87Y29udGVudDoiIjtib3JkZXItbGVmdDouMjVyZW0gc29saWQgIzMxNDM1MTtib3JkZXItdG9wOi4yMDgzM3JlbSBzb2xp''@;'; put 'put ''ZCAjMzE0MzUxO2JvcmRlci1yaWdodDouMjVyZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbTouMjA4MzNyZW0gc29saWQgdHJhbnNwYXJlbnR9YXBwLWFwcHJvdmUtZGV0YWlscyAudGFibGV7Ym9yZGVyOjBweCBzb2xpZH1hcHAtYXBwcm92ZS1kZXRhaWxzIC50b2dnbGUtc3dp''@;'; put 'put ''dGNoIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw6YmVmb3Jle2JvcmRlci1jb2xvcjojMzE0MzUxO2JhY2tncm91bmQtY29sb3I6IzMxNDM1MSFpbXBvcnRhbnQ7dHJhbnNpdGlvbjouMTVzIGVhc2UtaW47dHJhbnNpdGlvbi1wcm9wZXJ0eTpib3JkZXItY29sb3IsYmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcn1hcHAtYXBwcm92ZS1kZXRhaWxzIC50YWJsZUNvbnR7b3ZlcmZsb3c6YXV0bzttYXJnaW46MTVweCAxMHB4IDEwcHh9YXBwLWFwcHJvdmUtZGV0YWlscyAudGFibGVDb250IHRke3dvcmQtYnJlYWs6YnJlYWstd29yZH1hcHAtYXBwcm92ZS1kZXRhaWxzIC5hcHByb3ZhbElu''@;'; put 'put ''Zm97ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1hcHAtYXBwcm92ZS1kZXRhaWxzIC5hcHByb3ZhbEJhY2t7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KXthcHAtYXBwcm92ZS1k''@;'; put 'put ''ZXRhaWxzIC5hcHByb3ZhbEluZm97ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luLXRvcDoxNXB4fWFwcC1hcHByb3ZlLWRldGFpbHMgLmFwcHJvdmFsQmFja3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW4tYm90dG9tOjE1cHh9YXBw''@;'; put 'put ''LWFwcHJvdmUtZGV0YWlscyAuY2FyZHttYXJnaW4tdG9wOjByZW0haW1wb3J0YW50O21pbi1oZWlnaHQ6Y2FsYygxMDB2aCArIC0wcHgpIWltcG9ydGFudH1hcHAtYXBwcm92ZS1kZXRhaWxzIC50YWJsZSB0ZC5sZWZ0LGFwcC1hcHByb3ZlLWRldGFpbHMgLnRhYmxlIHRoLmxlZnR7dGV4dC1h''@;'; put 'put ''bGlnbjpsZWZ0O3dpZHRoOjE1MHB4IWltcG9ydGFudDtmbGV4OjB9fWFwcC1hcHByb3ZlLWRldGFpbHMgLnRhYmxlIHRkLmxlZnQsYXBwLWFwcHJvdmUtZGV0YWlscyAudGFibGUgdGgubGVmdHt0ZXh0LWFsaWduOmxlZnQ7ZmxleDoxO3dpZHRoOjMwMHB4IWltcG9ydGFudH1hcHAtYXBwcm92''@;'; put 'put ''ZS1kZXRhaWxzIC50b29sbHtwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOiNlNmIzYjM7Y29sb3I6IzMxNDM1MTt0b3A6MDtoZWlnaHQ6MzZweDt3aWR0aDoxMDAlO2xlZnQ6MDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXh9YXBwLWFw''@;'; put 'put ''cHJvdmUtZGV0YWlscyAjYWNjZXB0QnRuLGFwcC1hcHByb3ZlLWRldGFpbHMgI3JlamVjdEJ0bnt3aWR0aDoxNzVweH1hcHAtYXBwcm92ZS1kZXRhaWxzICNyZWplY3RCdG57YmFja2dyb3VuZC1jb2xvcjojYTYyZjE2IWltcG9ydGFudH1hcHAtYXBwcm92ZS1kZXRhaWxzIC5mb3JtYXR0ZWQt''@;'; put 'put ''dmFsdWVzLXRvZ2dsZXttaW4td2lkdGg6NzVweH1hcHAtYXBwcm92ZS1kZXRhaWxzIGNsci1tb2RhbCAubW9kYWwtYm9keS13cmFwcGVye292ZXJmbG93OmF1dG99YXBwLWFwcHJvdmUtZGV0YWlscyAucm93cy1ub3RpY2V7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4t''@;'; put 'put ''cmlnaHQ6MTBweDtjb2xvcjojNmE2YTZhO2ZvbnQtc2l6ZToxNXB4fWFwcC1hcHByb3ZlLWRldGFpbHMgLnJvd3Mtbm90aWNlIGNsci1pY29ue21hcmdpbjowfWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC1hcHByb3ZlLWRldGFpbHMgdGFibGUgLnVwZGF0ZWRSb3d7YmFja2dyb3VuZDojOTM5''@;'; put 'put ''NzFlfWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC1hcHByb3ZlLWRldGFpbHMgdGFibGUgLmFkZGVkUm93e2JhY2tncm91bmQ6IzU2OTk1Zn1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtYXBwcm92ZS1kZXRhaWxzIHRhYmxlIC5kZWxldGVkUm93e2JhY2tncm91bmQ6IzhhNWE1YX1ib2R5W2Nk''@;'; put 'put ''cy10aGVtZT1saWdodF0gYXBwLWFwcHJvdmUtZGV0YWlscyB0YWJsZSAudXBkYXRlZFJvd3tiYWNrZ3JvdW5kOiNmYWZkYTh9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIGFwcC1hcHByb3ZlLWRldGFpbHMgdGFibGUgLmFkZGVkUm93e2JhY2tncm91bmQ6IzkyZDA5YX1ib2R5W2Nkcy10aGVtZT1s''@;'; put 'put ''aWdodF0gYXBwLWFwcHJvdmUtZGV0YWlscyB0YWJsZSAuZGVsZXRlZFJvd3tiYWNrZ3JvdW5kOiNlNmIzYjN9YXBwLXZpeWEtYXBpLWV4cGxvcmVyIC5hcGktY29sbGVjdGlvbi1kcm9wZG93bnttYXJnaW4tbGVmdDoxNXB4O21hcmdpbi1yaWdodDoxNXB4O21hcmdpbi1ib3R0b206MTBweH1h''@;'; put 'put ''cHAtdml5YS1hcGktZXhwbG9yZXIgLmpzb24tYXJlYXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0b31hcHAtdml5YS1hcGktZXhwbG9yZXIgLmpzb24tYXJlYSBhe3RleHQtZGVjb3JhdGlvbjpub25lfWFwcC12''@;'; put 'put ''aXlhLWFwaS1leHBsb3JlciAuanNvbi1hcmVhPm5neC1qc29uLXZpZXdlcntoZWlnaHQ6MTAwJX1hcHAtdml5YS1hcGktZXhwbG9yZXIgLmpzb24tYXJlYT5uZ3gtanNvbi12aWV3ZXI+Lm5neC1qc29uLXZpZXdlcntvdmVyZmxvdzphdXRvfWFwcC12aXlhLWFwaS1leHBsb3JlciAuanNvbi10''@;'; put 'put ''b2dnbGV7cG9zaXRpb246YWJzb2x1dGU7bGVmdDoxMHB4O21hcmdpbjowfWFwcC12aXlhLWFwaS1leHBsb3JlciAuZW5kcG9pbnQtYnJlYWRjcnVtc3ttYXJnaW46MCAwIDAgMTBweH1hcHAtdml5YS1hcGktZXhwbG9yZXIgLnF1ZXJ5LXBhcmFtcyBpbnB1dHt3aWR0aDo3MHB4fWFwcC1sb2Fk''@;'; put 'put ''aW5nLWluZGljYXRvciAubG9hZGluZy1pbmRpY2F0b3J7bGluZS1oZWlnaHQ6Mi41cmVtO2hlaWdodDoyLjVyZW07ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6MTAwJTttYXJnaW4tcmlnaHQ6MTBweH1hcHAtbG9hZGluZy1pbmRpY2F0b3IgLmxvYWRpbmctaW5kaWNh''@;'; put 'put ''dG9yIC5zcGlubmVye3ZlcnRpY2FsLWFsaWduOm1pZGRsZX1hcHAtbG9hZGluZy1pbmRpY2F0b3IgLmxvYWRpbmctaW5kaWNhdG9yIGNsci1zaWducG9zdC1jb250ZW50e2xpbmUtaGVpZ2h0OjI0cHg7Y29sb3I6IzU2NTY1NjtjdXJzb3I6YXV0b31hcHAtbG9hZGluZy1pbmRpY2F0b3IgLmxv''@;'; put 'put ''YWRpbmctaW5kaWNhdG9yIGNsci1zaWducG9zdC1jb250ZW50IHB7bWFyZ2luLXRvcDoxMHB4O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn1hcHAtbG9hZGluZy1pbmRpY2F0b3IgLmxvYWRpbmctaW5kaWNhdG9yIGNsci1zaWducG9zdC1jb250ZW50IHA6Zmly''@;'; put 'put ''c3QtY2hpbGR7bWFyZ2luLXRvcDowfWFwcC1sb2FkaW5nLWluZGljYXRvciAubG9hZGluZy1pbmRpY2F0b3IgY2xyLXNpZ25wb3N0LWNvbnRlbnQgcDpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH1hcHAtbG9hZGluZy1pbmRpY2F0b3IgLmxvYWRpbmctaW5kaWNhdG9yIGNsci1zaWducG9z''@;'; put 'put ''dC1jb250ZW50IHAgc3BhbnttYXJnaW4tbGVmdDoxMHB4fWFwcC1sb2FkaW5nLWluZGljYXRvciAubG9hZGluZy1pbmRpY2F0b3IgY2xyLXNpZ25wb3N0LWNvbnRlbnQgcCBzcGFuLnJ1bm5pbmd7Y29sb3I6I2U5YmYwNH1hcHAtbG9hZGluZy1pbmRpY2F0b3IgLmxvYWRpbmctaW5kaWNhdG9y''@;'; put 'put ''IGNsci1zaWducG9zdC1jb250ZW50IHAgc3Bhbi5zdWNjZXNze2NvbG9yOiM2MGI1MTV9YXBwLWxvYWRpbmctaW5kaWNhdG9yIC5sb2FkaW5nLWluZGljYXRvciBjbHItc2lnbnBvc3QtY29udGVudCBwIHNwYW4uZmFpbHtjb2xvcjojYzkyMTAwfWFwcC1leGNlbC1wYXNzd29yZC1tb2RhbCAu''@;'; put 'put ''ZXhjZWwtcGFzc3dvcmQtcm9vdCAubW9kYWx7ei1pbmRleDoxMDYwfWFwcC1leGNlbC1wYXNzd29yZC1tb2RhbCAubW9kYWwtZm9vdGVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59YXBwLWV4Y2VsLXBhc3N3b3JkLW1vZGFs''@;'; put 'put ''IC5tb2RhbC1mb290ZXIgLmJ1dHRvbnN7ZGlzcGxheTpmbGV4O2dhcDo1cHh9YXBwLXN0YWdlIC5yZWplY3RlZHtjb2xvcjojOTIyMDFhO2ZvbnQtd2VpZ2h0OjcwMH1hcHAtc3RhZ2UgLmFjY2VwdGVke2NvbG9yOiMxMDVjMjY7Zm9udC13ZWlnaHQ6NzAwfWFwcC1zdGFnZSAuYmFzZVRhYmxl''@;'; put 'put ''TGlua3tjdXJzb3I6cG9pbnRlcjttYXJnaW4tdG9wOjEwcHg7Y29sb3I6IzAwN2NiYn1hcHAtc3RhZ2UgLmh0Rm9jdXNDYXRjaGVye3Bvc2l0aW9uOmFic29sdXRlIWltcG9ydGFudDtsZWZ0Oi05OTk5cHghaW1wb3J0YW50O3dpZHRoOjFweCFpbXBvcnRhbnQ7aGVpZ2h0OjFweCFpbXBvcnRh''@;'; put 'put ''bnQ7b3ZlcmZsb3c6aGlkZGVuIWltcG9ydGFudDtjbGlwOnJlY3QoMCwwLDAsMCkhaW1wb3J0YW50O2JvcmRlcjowIWltcG9ydGFudDttYXJnaW46LTFweCFpbXBvcnRhbnQ7cGFkZGluZzowIWltcG9ydGFudH1hcHAtc3RhZ2UgLmh0Rm9jdXNDYXRjaGVyOmZvY3Vze291dGxpbmU6bm9uZSFp''@;'; put 'put ''bXBvcnRhbnR9Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLXN0YWdlIC5iYXNlVGFibGVMaW5re2NvbG9yOiM0ZWMwZmZ9YXBwLXNvZnQtc2VsZWN0IC5pbnB1dC12YWx7Ym9yZGVyOjBweDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM5OTk5OTl9YXBw''@;'; put 'put ''LXNvZnQtc2VsZWN0IGlucHV0e3dpZHRoOjEwMCU7b3V0bGluZTpub25lfWFwcC1zb2Z0LXNlbGVjdCBpbnB1dDo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye21hcmdpbi10b3A6LTVweH1hcHAtc29mdC1zZWxlY3QgY2xyLWRhdGUtY29udGFpbmVye3Bvc2l0aW9uOnJlbGF0''@;'; put 'put ''aXZlO21hcmdpbi10b3A6MnB4IWltcG9ydGFudH1hcHAtc29mdC1zZWxlY3QgY2xyLWRhdGUtY29udGFpbmVyIC5jbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb257cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTVweH1hcHAtc29mdC1zZWxlY3QgY2xyLWRhdGUtY29udGFpbmVyIGlucHV0Ojot''@;'; put 'put ''d2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3J7bWFyZ2luLXJpZ2h0OjIwcHg7bWFyZ2luLXRvcDotNXB4fWFwcC1zb2Z0LXNlbGVjdCBsYWJlbC5zZWNvbmRMYWJlbEFjdGl2ZSBzcGFuOm5vdCgudmFsdWUtdHlwZS1zZWxlY3RlZCl7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3Vn''@;'; put 'put ''aDtjdXJzb3I6cG9pbnRlcjtvcGFjaXR5Oi42fWFwcC1zYXNqcy1jb25maWd1cmF0b3IgLmNsci1jb250cm9sLWNvbnRhaW5lcnt3aWR0aDo1MHZ3fWFwcC1zYXNqcy1jb25maWd1cmF0b3IgLmNsci1pbnB1dC13cmFwcGVye3dpZHRoOjEwMCV9YXBwLXNhc2pzLWNvbmZpZ3VyYXRvciAuY2xy''@;'; put 'put ''LWlucHV0LXdyYXBwZXIgaW5wdXR7d2lkdGg6MTAwJX1hcHAtc2FzanMtY29uZmlndXJhdG9yIC50aGluUHJvZ3Jlc3N7bGVmdDowO3JpZ2h0OjA7d2lkdGg6dW5zZXQ7aGVpZ2h0OjFweDttYXJnaW4tdG9wOjAhaW1wb3J0YW50fWFwcC1zYXNqcy1jb25maWd1cmF0b3IgLnRoaW5Qcm9ncmVz''@;'; put 'put ''czphZnRlcnt0b3A6MH1hcHAtaGVhZGVyLWFjdGlvbnN7ZGlzcGxheTpjb250ZW50c31hcHAtaGVhZGVyLWFjdGlvbnMgLmNvcHlSaWdodHttYXJnaW4tdG9wOjEwcHh9YXBwLWhlYWRlci1hY3Rpb25zIC5jb3B5UmlnaHQgc3Bhbnt3b3JkLWJyZWFrOmJyZWFrLXdvcmQ7d2hpdGUtc3BhY2U6''@;'; put 'put ''cHJlLXdyYXA7d2lkdGg6MTAwJTt0ZXh0LWFsaWduOmNlbnRlcjtsaW5lLWhlaWdodDoxLjV9YXBwLWhlYWRlci1hY3Rpb25zIC51c2VyLW5hdi10b2dnbGV7cGFkZGluZzowIDEwcHghaW1wb3J0YW50O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjEwMCV9YXBwLWhl''@;'; put 'put ''YWRlci1hY3Rpb25zIC5hcHAtbmF2LWRyb3Bkb3due3BhZGRpbmctcmlnaHQ6MTVweDtsaW5lLWhlaWdodDozcmVtO2hlaWdodDozcmVtfWFwcC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1kcm9wZG93bj5idXR0b24uZHJvcGRvd24tdG9nZ2xle2NvbG9yOiNmYWZhZmE7cG9zaXRpb246cmVs''@;'; put 'put ''YXRpdmV9YXBwLWhlYWRlci1hY3Rpb25zIC5hcHAtbmF2LWRyb3Bkb3duPmJ1dHRvbi5kcm9wZG93bi10b2dnbGU6YWZ0ZXJ7Y29udGVudDoiIjtiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmE7b3BhY2l0eTouMTU7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDtoZWlnaHQ6NDBw''@;'; put 'put ''eDt0b3A6MTBweH1hcHAtaGVhZGVyLWFjdGlvbnMgLmFwcC1uYXYtZHJvcGRvd24+YnV0dG9uLmRyb3Bkb3duLXRvZ2dsZSAuYmFkZ2UuaGlkZGVue3Zpc2liaWxpdHk6aGlkZGVufWFwcC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1kcm9wZG93biBjbHItZHJvcGRvd24tbWVudXtjb2xvcjoj''@;'; put 'put ''NTY1NjU2O3BhZGRpbmctYm90dG9tOjB9YXBwLWhlYWRlci1hY3Rpb25zIC5hcHAtbmF2LWRyb3Bkb3duIGNsci1kcm9wZG93bi1tZW51IC5zZXBhcmF0b3J7bWFyZ2luOjEwcHggMDtib3JkZXItYm90dG9tOjFweCBzb2xpZCBncmF5fWFwcC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1kcm9w''@;'; put 'put ''ZG93biBjbHItZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6NDVweDtsaW5lLWhlaWdodDo0MHB4fWFwcC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1k''@;'; put 'put ''cm9wZG93biBjbHItZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbSAuYmFkZ2V7cG9zaXRpb246YWJzb2x1dGU7dG9wOjE1cHg7cmlnaHQ6MjZweDttYXJnaW4tcmlnaHQ6MH1hcHAtaGVhZGVyLWFjdGlvbnMgLmFwcC1uYXYtZHJvcGRvd24gY2xyLWRyb3Bkb3duLW1lbnUgLmRyb3Bkb3du''@;'; put 'put ''LWl0ZW0uZGVidWctc3dpdGNoLWl0ZW17cGFkZGluZzowfWFwcC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1kcm9wZG93biBjbHItZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbSAudG9nZ2xlLXN3aXRjaHttYXJnaW46MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2p1c3RpZnktY29udGVu''@;'; put 'put ''dDpjZW50ZXJ9YXBwLWhlYWRlci1hY3Rpb25zIC5hcHAtbmF2LWRyb3Bkb3duIGNsci1kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtIC5jbHItbG9nb3V0e3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjIwcHg7dG9wOjE1cHh9YXBwLWhlYWRlci1hY3Rpb25zIC5hcHAtbmF2LWRyb3Bkb3du''@;'; put 'put ''IGNsci1kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtIC5jbHItY29udHJvbC1jb250YWluZXJ7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX1hcHAtaGVhZGVyLWFjdGlvbnMgLmFwcC1uYXYtZHJvcGRvd24gY2xyLWRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0gY2xyLXRvZ2dsZS13cmFw''@;'; put 'put ''cGVye3dpZHRoOjEwMCU7bWFyZ2luOjA7aGVpZ2h0OjEwMCU7cGFkZGluZzoxMHB4IDIwcHh9YXBwLWhlYWRlci1hY3Rpb25zIC5hcHAtbmF2LWRyb3Bkb3duIGNsci1kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtIGlucHV0e2luc2V0OjA7Y3Vyc29yOnBvaW50ZXJ9YXBwLWhlYWRlci1h''@;'; put 'put ''Y3Rpb25zIC5hcHAtbmF2LWRyb3Bkb3duIGNsci1kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtIC5jbHItdG9nZ2xlLXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF0rbGFiZWw6YWZ0ZXJ7dHJhbnNpdGlvbjpub25lIWltcG9ydGFudH1hcHAtaGVhZGVyLWFjdGlvbnMgLmRlYnVnLXRv''@;'; put 'put ''Z2dsZS1sYWJlbHtwYWRkaW5nLWxlZnQ6NDJweH1AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpe2FwcC1oZWFkZXItYWN0aW9ucyAuc2lkZW5hdi1jb250ZW50IGEubmF2LWxpbmsuYWN0aXZle2NvbG9yOmluaGVyaXQ7cGFkZGluZzoxNXB4O2JhY2tncm91bmQ6IzU2NTY1Nn19YXBwLWhlYWRl''@;'; put 'put ''ci1hY3Rpb25zIC5uYXYtbGluay5kLWJsb2NrIHNwYW4uYmFkZ2V7cG9zaXRpb246YWJzb2x1dGV9YXBwLWhlYWRlci1hY3Rpb25zIC5hdmF0YXItaW1ne3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bWFyZ2luLWxlZnQ6MTBweDtib3JkZXItcmFkaXVzOjUwcHh9LmNsci1pbnB1dC13cmFwcGVy''@;'; put 'put ''LnNtYWxsLW10IC5jbHItZm9ybS1jb250cm9se21hcmdpbi10b3A6NXB4IWltcG9ydGFudH1ib2R5W2Nkcy10aGVtZT1kYXJrXXtzY3JvbGxiYXItd2lkdGg6dGhpbjtzY3JvbGxiYXItY29sb3I6IzNiNTI2OCAjMjczODQ5fWJvZHlbY2RzLXRoZW1lPWRhcmtdOjotd2Via2l0LXNjcm9sbGJh''@;'; put 'put ''cnt3aWR0aDoxMXB4fWJvZHlbY2RzLXRoZW1lPWRhcmtdOjotd2Via2l0LXNjcm9sbGJhci10cmFja3tiYWNrZ3JvdW5kOiMzYjUyNjh9Ym9keVtjZHMtdGhlbWU9ZGFya106Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQtY29sb3I6IzI3Mzg0OTtib3JkZXItcmFkaXVzOjZw''@;'; put 'put ''eDtib3JkZXI6M3B4IHNvbGlkICMzYjUyNjh9Ym9keVtjZHMtdGhlbWU9ZGFya10gY2xyLWljb24uaXMtaGlnaGxpZ2h0e2ZpbGw6IzRlYzBmZn1ib2R5LGh0bWx7Zm9udC13ZWlnaHQ6NDAwIWltcG9ydGFudDtwYWRkaW5nOjA7bWFyZ2luOjB9Ym9keS5zaG91bGQtbG9naW4gY2xyLW1vZGFs''@;'; put 'put ''LGh0bWwuc2hvdWxkLWxvZ2luIGNsci1tb2RhbHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fWJvZHlbY2RzLXRoZW1lPWRhcmtdIGJ1dHRvbjpmb2N1c3tvdXRsaW5lOm5vbmV9Ym9keVtjZHMtdGhlbWU9ZGFya10gYnV0dG9uOmZvY3VzLXZpc2libGV7b3V0bGluZToxcHggc29saWQgcmdiKDI1''@;'; put 'put ''NSwyNTUsMjU1KX1ib2R5W2Nkcy10aGVtZT1saWdodF0gYnV0dG9uOmZvY3Vze291dGxpbmU6bm9uZX1ib2R5W2Nkcy10aGVtZT1saWdodF0gYnV0dG9uOmZvY3VzLXZpc2libGV7b3V0bGluZToxcHggc29saWQgcmdiKDAsMCwwKX0uc2VsZWN0LXRhYmxlLWljb24sLnNlbGVjdC1saWJyYXJ5''@;'; put 'put ''LWljb257d2lkdGg6ODBweH1bY2RzLXRleHQ9bGFiZWxde2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci0yMDApfVtjZHMtdGV4dD1sYWJlbExpbmtde2xpbmUtaGVpZ2h0OjEuOCFpbXBvcnRhbnR9W2Nkcy10ZXh0PWNhcHRpb25fY2xlYW5de2ZvbnQtc2l6ZTp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7''@;'; put 'put ''bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNhcHRpb24tbGV0dGVyLXNwYWNpbmcpfVtjZHMtdGV4dD1jYXB0aW9uX2NsZWFuXTphZnRlcixbY2RzLXRleHQ9Y2FwdGlvbl9jbGVhbl06YmVmb3Jle2Rpc3BsYXk6bm9uZX0ubW9kYWwgLm1vZGFsLWJvZHl7cGFk''@;'; put 'put ''ZGluZzoxNXB4fS5tb2RhbCAubW9kYWwtZm9vdGVye3BhZGRpbmc6MCAxNXB4IDE1cHh9LmxvZy13cmFwcGVye21pbi1oZWlnaHQ6NTBweDtwYWRkaW5nOjEwcHg7bWFyZ2luLXRvcDoxMHB4O3doaXRlLXNwYWNlOnByZS13cmFwO2JvcmRlci1yYWRpdXM6M3B4O2JvcmRlcjoxcHggc29saWQg''@;'; put 'put ''I2UyZTJlMjtoZWlnaHQ6NDh2aDtvdmVyZmxvdzphdXRvfS5zbGlkZXJ7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MzIwcHg7bWFyZ2luLWxlZnQ6NzVweDttYXJnaW4tdG9wOjcwcHg7aGVpZ2h0OjVweDtvdmVyZmxvdy14OmhpZGRlbn0ubGluZXtwb3NpdGlvbjphYnNvbHV0ZTtvcGFjaXR5''@;'; put 'put ''Oi40O2JhY2tncm91bmQ6IzczZDU0NDt3aWR0aDoxNTAlO2hlaWdodDo1cHh9LnN1YmxpbmV7cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZDojNzNkNTQ0O2hlaWdodDo1cHh9LmluY3thbmltYXRpb246aW5jcmVhc2UgMnMgaW5maW5pdGV9LmRlY3thbmltYXRpb246ZGVjcmVhc2UgMnMg''@;'; put 'put ''LjVzIGluZmluaXRlfUBrZXlmcmFtZXMgaW5jcmVhc2V7MCV7bGVmdDotNSU7d2lkdGg6NSV9dG97bGVmdDoxMzAlO3dpZHRoOjEwMCV9fUBrZXlmcmFtZXMgZGVjcmVhc2V7MCV7bGVmdDotODAlO3dpZHRoOjgwJX10b3tsZWZ0OjExMCU7d2lkdGg6MTAlfX0uYXBwLWxvYWRpbmd7ZGlzcGxh''@;'; put 'put ''eTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDoxMDB2aDtiYWNrZ3JvdW5kOiMzMTQzNTE7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3otaW5kZXg6MjAwMDtwb3NpdGlvbjpmaXhlZDtpbnNldDowfS5zZWxlY3Qtbm9uZXstd2Via2l0LXVzZXIt''@;'; put 'put ''c2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uaC1hdXRve2hlaWdodDphdXRvfS5oLXVuc2V0LWl7aGVpZ2h0OnVuc2V0IWltcG9ydGFudH0ubWluLWgtNTB2aHttaW4taGVpZ2h0OjUwdmh9LmgtMjR2aCwuaC0yNXZoe2hlaWdodDoyNXZofS5oLTcwdmh7aGVpZ2h0Ojcwdmh9LmgtODB2''@;'; put 'put ''aHtoZWlnaHQ6ODB2aH0uaC0xMDB7aGVpZ2h0OjEwMCV9LnctNTB2d3t3aWR0aDo1MHZ3fS53LTEwMHt3aWR0aDoxMDAlfS53LTEwMC1pe3dpZHRoOjEwMCUhaW1wb3J0YW50fS53LTQwe3dpZHRoOjQwJX0ubWluLXctMHttaW4td2lkdGg6MHB4fS5teC01e21hcmdpbjowIDVweH0ubXktNXtt''@;'; put 'put ''YXJnaW46NXB4IDB9Lm15LTE1e21hcmdpbjoxNXB4IDB9Lm15LTEwLW14LWF1dG97bWFyZ2luOjEwcHggYXV0b30ubS0we21hcmdpbjowIWltcG9ydGFudH0ubS0xMHttYXJnaW46MTBweH0ubXQtMHttYXJnaW4tdG9wOjAhaW1wb3J0YW50fS5tdC0zLW5lZ2F0aXZle21hcmdpbi10b3A6LTNw''@;'; put 'put ''eH0ubXQtNXttYXJnaW4tdG9wOjVweH0ubXQtNS1pe21hcmdpbi10b3A6NXB4IWltcG9ydGFudH0ubXQtMnttYXJnaW4tdG9wOjJweH0ubXQtMi1pe21hcmdpbi10b3A6MnB4IWltcG9ydGFudH0ubXQtMTB7bWFyZ2luLXRvcDoxMHB4fS5tdC0xNXttYXJnaW4tdG9wOjE1cHh9Lm10LTIwe21h''@;'; put 'put ''cmdpbi10b3A6MjBweH0ubWwtMHttYXJnaW4tbGVmdDowfS5tbC0ze21hcmdpbi1sZWZ0OjNweH0ubWwtNXttYXJnaW4tbGVmdDo1cHh9Lm1sLTUtaXttYXJnaW4tbGVmdDo1cHghaW1wb3J0YW50fS5tbC0xMHttYXJnaW4tbGVmdDoxMHB4fS5tbC0xNXttYXJnaW4tbGVmdDoxNXB4fS5tbC0y''@;'; put 'put ''MHttYXJnaW4tbGVmdDoyMHB4fS5tbC0yMC1pe21hcmdpbi1sZWZ0OjIwcHghaW1wb3J0YW50fS5tci0we21hcmdpbi1yaWdodDowfS5tci01e21hcmdpbi1yaWdodDo1cHh9Lm1yLTVpe21hcmdpbi1yaWdodDo1cHghaW1wb3J0YW50fS5tci0xMHttYXJnaW4tcmlnaHQ6MTBweH0ubXItMTJ7''@;'; put 'put ''bWFyZ2luLXJpZ2h0OjEycHh9Lm1yLTIwe21hcmdpbi1yaWdodDoyMHB4fS5tYi0we21hcmdpbi1ib3R0b206MH0ubWItMGl7bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH0ubWItNXttYXJnaW4tYm90dG9tOjVweH0ubWItMTB7bWFyZ2luLWJvdHRvbToxMHB4fS5tYi0xMC1pe21hcmdpbi1i''@;'; put 'put ''b3R0b206MTBweCFpbXBvcnRhbnR9Lm1iLTE1e21hcmdpbi1ib3R0b206MTVweH0ubWItMjB7bWFyZ2luLWJvdHRvbToyMHB4fS5tYi0zMHttYXJnaW4tYm90dG9tOjMwcHh9LnAtMHtwYWRkaW5nOjB9LnAtMTB7cGFkZGluZzoxMHB4fS5wYi0we3BhZGRpbmctYm90dG9tOjB9LnBiLTEwe3Bh''@;'; put 'put ''ZGRpbmctYm90dG9tOjEwcHh9LnB5LTV7cGFkZGluZzo1cHggMH0ucHktMTB7cGFkZGluZzoxMHB4IDB9LmJhY2tncm91bmQtdHJhbnNwYXJlbnR7YmFja2dyb3VuZDp0cmFuc3BhcmVudH0uYmFja2dyb3VuZC10cmFuc3BhcmVudC1pe2JhY2tncm91bmQ6dHJhbnNwYXJlbnQhaW1wb3J0YW50''@;'; put 'put ''fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAuY29sb3ItZ3JheXtjb2xvcjojNWE1YTVhfWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAuY29sb3ItZGFyay1ncmF5e2NvbG9yOiM0OTU5Njd9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIC5jb2xvci1kYXJrZXItZ3JheXtjb2xvcjojMzE0MzUxfS5jb2xvci13''@;'; put 'put ''aGl0ZXtjb2xvcjojZmZmfS5jb2xvci13aGl0ZS1pe2NvbG9yOiNmZmYhaW1wb3J0YW50fS5jb2xvci1ncmVlbntjb2xvcjojNGI5ZTRifS5jb2xvci1kYy1ncmVlbntjb2xvcjojODFiNDQwfS5jb2xvci1yZWR7Y29sb3I6I2U0NTQ1NH0uY29sb3Itb3Jhbmdle2NvbG9yOiNlNjdlMjJ9LmNv''@;'; put 'put ''bG9yLWJsdWV7Y29sb3I6IzNmOGNjM30uY29sb3IteWVsbG93e2NvbG9yOiNmMWM0MGZ9LmN1cnNvci1wb2ludGVye2N1cnNvcjpwb2ludGVyfS5jdXJzb3ItZGVmdWFsdHtjdXJzb3I6ZGVmYXVsdH0uY3Vyc29yLWRlZmF1bHQtaXtjdXJzb3I6ZGVmYXVsdCFpbXBvcnRhbnR9LmJhY2tncm91''@;'; put 'put ''bmQtdHJhbnNwYXJlbnR7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ucG9pbnRlci1ldmVudHMtbm9uZXtwb2ludGVyLWV2ZW50czpub25lfS53aGl0ZXNwYWNlLW5vd3JhcHt3aGl0ZS1zcGFjZTpub3dyYXB9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfS5mb250LXNpemUt''@;'; put 'put ''MTV7Zm9udC1zaXplOjE1cHh9LmZvbnQtc2l6ZS0xOHtmb250LXNpemU6MThweH0uZm9udC1ib2xke2ZvbnQtd2VpZ2h0OjcwMH0uZm9udC1ib2xkLWl7Zm9udC13ZWlnaHQ6NzAwIWltcG9ydGFudH0uZm9udC13ZWlnaHQtMzAwe2ZvbnQtd2VpZ2h0OjMwMH0uZm9udC13ZWlnaHQtNzAwe2Zv''@;'; put 'put ''bnQtd2VpZ2h0OjcwMH0ud29yZC1icmVha3t3b3JkLWJyZWFrOmJyZWFrLXdvcmR9LndvcmQtYnJlYWstYWxse3dvcmQtYnJlYWs6YnJlYWstYWxsfS5wb3NpdGlvbi1yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0ucG9zaXRpb24tYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9LmQtbm9u''@;'; put 'put ''ZXtkaXNwbGF5Om5vbmV9LmQtYmxvY2t7ZGlzcGxheTpibG9ja30uZC1pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmQtZmxleHtkaXNwbGF5OmZsZXh9LmQtY29udGVudHN7ZGlzcGxheTpjb250ZW50c30uZmxleC11bnNldHtmbGV4OnVuc2V0fS5hbGlnbi1zZWxmLWVuZHth''@;'; put 'put ''bGlnbi1zZWxmOmZsZXgtZW5kfS5hbGlnbi1zZWxmLXN0YXJ0e2FsaWduLXNlbGY6ZmxleC1zdGFydH0uYWxpZ24taXRlbXMtY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlcn0uanVzdGlmeS1jb250ZW50LWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5qdXN0aWZ5LWNvbnRlbnQtY2Vu''@;'; put 'put ''dGVyLWl7anVzdGlmeS1jb250ZW50OmNlbnRlciFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC1zdGFydHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0uanVzdGlmeS1jb250ZW50LWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9Lmp1c3RpZnktY29udGVudC1iZXR3ZWVue2p1c3Rp''@;'; put 'put ''ZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5qdXN0aWZ5LWNvbnRlbnQtYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9LmZsZXgtY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY2xyLWdhcC01e2dhcDo1cHh9LmNsci1nYXAtMHtnYXA6MH0ub3ZlcmZsb3ctYXV0b3tv''@;'; put 'put ''dmVyZmxvdzphdXRvfS56LWluZGV4LWhpZ2hlc3R7ei1pbmRleDoxMDAwMDAwMH0udmVydGljYWwtYWxpZ24tbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uaWNvbi1kYy1maWxse2ZpbGw6IzgxYjQ0MH0uZGF0YWdyaWQtY3VzdG9tLWZvb3RlciAuZGF0YWdyaWQtb3V0ZXItd3JhcHBl''@;'; put 'put ''ciwudGV4dC1hcmVhLWZ1bGwtd2lkdGggLmNsci1jb250cm9sLWNvbnRhaW5lciwudGV4dC1hcmVhLWZ1bGwtd2lkdGggLmNsci1jb250cm9sLWNvbnRhaW5lciB0ZXh0YXJlYXt3aWR0aDoxMDAlfS50ZXh0LWFyZWEtZnVsbC13aWR0aCBjbHItdGV4dGFyZWEtY29udGFpbmVye21hcmdpbjow''@;'; put 'put ''IWltcG9ydGFudH0udGV4dC1hcmVhLWZ1bGwtd2lkdGggLmNsci10ZXh0YXJlYS13cmFwcGVye21hcmdpbjowIWltcG9ydGFudH0ucHJvZ3Jlc1N0YXRpY3ttYXJnaW4tdG9wOi02cHghaW1wb3J0YW50O3Bvc2l0aW9uOmFic29sdXRlIWltcG9ydGFudDt6LWluZGV4OjEwMDAwIWltcG9ydGFu''@;'; put 'put ''dH0ucHJvZ3Jlc3MsLnByb2dyZXNzLXN0YXRpY3tiYWNrZ3JvdW5kLWNvbG9yOiNmNWY2ZmU7Ym9yZGVyLXJhZGl1czowO2ZvbnQtc2l6ZTppbmhlcml0O2hlaWdodDo2cHg7bWFyZ2luOjA7bWF4LWhlaWdodDouNTgzMzMzcmVtO21pbi1oZWlnaHQ6LjE2NjY2N3JlbTtvdmVyZmxvdzpoaWRk''@;'; put 'put ''ZW47ZGlzcGxheTpibG9jazt3aWR0aDpjYWxjKDEwMCUgLSA2M3B4KX0ucHJvZ3Jlc3MubG9vcDphZnRlcnthbmltYXRpb246Y2xyLXByb2dyZXNzLWxvb3BlciAxLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlO2NvbnRlbnQ6IiAiO3RvcDouMTY2NjY3cmVtO2JvdHRvbTowO2xlZnQ6MDtwb3Np''@;'; put 'put ''dGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO2JhY2tncm91bmQtY29sb3I6IzYwYjUxNTt3aWR0aDo3NSV9LmJhZGdlLXdhcm5pbmd7Y29sb3I6I2ZmZiFpbXBvcnRhbnR9LmNvbnRlbnQtY29udGFpbmVyIC5jb250ZW50LWFyZWEgLmNhcmQtaGVhZGVyIGgze21hcmdpbi10b3A6MTBweH0u''@;'; put 'put ''bW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxle3BhZGRpbmc6MTVweCAxNXB4IDB9Lm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAuY2xvc2UgY2xyLWljb257ZGlzcGxheTpub25lfS5zaG93LWNsb3NlIC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLmNsb3NlIGNsci1pY29ue2Rpc3BsYXk6aW5s''@;'; put 'put ''aW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDotMThweDtyaWdodDotMTBweH0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlcntiYWNrZ3JvdW5kOiNkOTRiMmU7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZX0uY2FyZC1oZWFkZXJ7Zm9udC13ZWlnaHQ6MzAwfS5zZWxlY3Qgc2VsZWN0''@;'; put 'put ''OmZvY3Vze2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM0OTU5Njc7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTgwZGVnLHRyYW5zcGFyZW50IDk1JSwjNDk1YTY3IDApIG5vLXJlcGVhdH0uY2xyLXRyZWVub2RlLWNoaWxkcmVue21hcmdpbi1sZWZ0Oi4ycmVtIWltcG9ydGFudH0udGFi''@;'; put 'put ''bGUtYWN0aXZlOmZvY3Vze2JhY2tncm91bmQ6I2Q4ZTNlOX1jbHItc2VsZWN0LWNvbnRhaW5lciAuY2xyLWNvbnRyb2wtY29udGFpbmVyLGNsci1zZWxlY3QtY29udGFpbmVyIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1zZWxlY3Qtd3JhcHBlcixjbHItc2VsZWN0LWNvbnRhaW5lciBz''@;'; put 'put ''ZWxlY3R7d2lkdGg6MTAwJX10Ym9keXtmb250LXdlaWdodDo0MDB9aDMsaDR7Y29sb3I6IzU4NTg1ODtmb250LXdlaWdodDo0MDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2xpbmUtaGVpZ2h0OjFyZW07bWFyZ2luLXRvcDoxcmVtO21hcmdpbi1ib3R0b206MH1oMSxoMntjb2xvcjojNTg1ODU4''@;'; put 'put ''O2ZvbnQtd2VpZ2h0OjQwMDtsZXR0ZXItc3BhY2luZzpub3JtYWw7bGluZS1oZWlnaHQ6MnJlbTttYXJnaW4tdG9wOjFyZW07bWFyZ2luLWJvdHRvbTowfWNsci1pY29uLmlzLWluZm97ZmlsbDojODBiNDQxfS5kYXRhZ3JpZC1ob3N0LC5kYXRhZ3JpZC1vdmVybGF5LXdyYXBwZXJ7ZGlzcGxh''@;'; put 'put ''eTotbXMtZmxleGJveDtkaXNwbGF5Oi13ZWJraXQtYm94IWltcG9ydGFudH0uYnRuIC5jbHItbG9hZGluZy1idG4tY29udGVudHtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5idG4uYnRuLWRhbmdlciwuYnRuLmJ0bi13YXJuaW5ne2JvcmRlci1jb2xvcjojZWY0ZjJlO2JhY2tncm91bmQtY29s''@;'; put 'put ''b3I6I2Q5NGIyZTtjb2xvcjojZmZmfS5idG4uYnRuLXNtOmhhcyhjbHItaWNvbil7bGluZS1oZWlnaHQ6Mn0uZC1ub25le2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmQtYmxvY2t7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9LmNsci1mbGV4LTF7ZmxleDoxfS5jbHItZmxleC1jb2x1bW57Zmxl''@;'; put 'put ''eC1kaXJlY3Rpb246Y29sdW1ufS5jbHItZmxleC1yb3d7ZmxleC1kaXJlY3Rpb246cm93fS5ib3JkZXItMHtib3JkZXI6MH0uYm94LXNoYWRvdy1ub25le2JveC1zaGFkb3c6bm9uZX0uYm94LXNoYWRvdy1ub25lLWl7Ym94LXNoYWRvdzpub25lIWltcG9ydGFudH0uaHRDdXN0b21IaWRkZW57''@;'; put 'put ''ZGlzcGxheTpub25lfWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5odERhcmt7YmFja2dyb3VuZDojODg4O2NvbG9yOiNmZmZ9Ym9keVtjZHMtdGhlbWU9ZGFya10gLmhhbmRzb250YWJsZSAuaHREYXJre2JhY2tncm91bmQ6IzNjNTY2Mjtjb2xvcjojZWVlfWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5o''@;'; put 'put ''YW5kc29udGFibGUgLmRhcmtUSDpub3QoLnByaW1hcnlLZXlIZWFkZXJTdHlsZSl7YmFja2dyb3VuZDojNDg3ZDk2O2NvbG9yOiNlZWV9Ym9keVtjZHMtdGhlbWU9ZGFya10gLmhhbmRzb250YWJsZSAuZGFya1RILmh0X19oaWdobGlnaHR7YmFja2dyb3VuZDojM2I2YjgxfS5oYW5kc29udGFi''@;'; put 'put ''bGUgLmh0QXV0b2NvbXBsZXRlQXJyb3d7Y29sb3I6IzgyODI4Mn0uaGFuZHNvbnRhYmxlLmxpc3Rib3h7Ym94LXNoYWRvdzowIDRweCAyMHB4ICMwMDAwMDA3MH0uaGFuZHNvbnRhYmxlIHRkLmh0SW52YWxpZCwuaGFuZHNvbnRhYmxlIHRkLmRjLWludmFsaWQtY2VsbHtiYWNrZ3JvdW5kOiNl''@;'; put 'put ''NjI3MDBhZCFpbXBvcnRhbnQ7Ym9yZGVyOjFweCBzb2xpZCByZWQhaW1wb3J0YW50O2NvbG9yOiNmZmYhaW1wb3J0YW50fS5oYW5kc29udGFibGUgLm51bWVyaWNMaXN0Ym94e3RleHQtYWxpZ246cmlnaHR9Lm1hcmdpbi10b3AtMjB7bWFyZ2luLXRvcDoyMHB4fS5oaWRkZW57ZGlzcGxheTpu''@;'; put 'put ''b25lIWltcG9ydGFudH0udW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5uby1ib3JkZXJze2JvcmRlcjowfS5jYXJkLm5vLWJvcmRlcnMsLmNhcmQubm8tYm9yZGVycyAuY2FyZC1oZWFkZXIsLmNhcmQubm8tYm9yZGVycyAuY2FyZC1ibG9jaywuY2FyZC5uby1ib3JkZXJzIC5jYXJkLWZv''@;'; put 'put ''b3RlciwuY2FyZC5uby1pbm5lci1ib3JkZXJzIC5jYXJkLWhlYWRlciwuY2FyZC5uby1pbm5lci1ib3JkZXJzIC5jYXJkLWJsb2NrLC5jYXJkLm5vLWlubmVyLWJvcmRlcnMgLmNhcmQtZm9vdGVye2JvcmRlcjowO2JveC1zaGFkb3c6bm9uZX1AbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpey5k''@;'; put 'put ''LXNtLW5vbmV7ZGlzcGxheTpub25lIWltcG9ydGFudH0uZC1zbS1pbmxpbmV7ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50fS5kLXNtLWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9LmQtc20tYmxvY2t7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9LmQtc20tdGFi''@;'; put 'put ''bGV7ZGlzcGxheTp0YWJsZSFpbXBvcnRhbnR9LmQtc20tdGFibGUtY2VsbHtkaXNwbGF5OnRhYmxlLWNlbGwhaW1wb3J0YW50fS5kLXNtLWZsZXh7ZGlzcGxheTpmbGV4IWltcG9ydGFudH0uZC1zbS1pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4IWltcG9ydGFudH0uY2xyLWZsZXgt''@;'; put 'put ''c20tY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY2xyLWZsZXgtc20tcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30uY2xyLWdhcC1zbS01e2dhcDo1cHh9LmNsci1nYXAtc20tMHtnYXA6MH19QG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KXsuZC1tZC1ub25le2Rpc3BsYXk6bm9uZSFpbXBv''@;'; put 'put ''cnRhbnR9LmQtbWQtaW5saW5le2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudH0uZC1tZC1pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fS5kLW1kLWJsb2Nre2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fS5kLW1kLXRhYmxle2Rpc3BsYXk6dGFibGUhaW1wb3J0YW50''@;'; put 'put ''fS5kLW1kLXRhYmxlLWNlbGx7ZGlzcGxheTp0YWJsZS1jZWxsIWltcG9ydGFudH0uZC1tZC1mbGV4e2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnR9LmQtbWQtaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleCFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpj''@;'; put 'put ''b2x1bW59LmNsci1mbGV4LW1kLXJvd3tmbGV4LWRpcmVjdGlvbjpyb3d9LmNsci1nYXAtbWQtNXtnYXA6NXB4fS5jbHItZ2FwLW1kLTB7Z2FwOjB9fUBtZWRpYSAobWluLXdpZHRoOiA5OTJweCl7LmQtbGctbm9uZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS5kLWxnLWlubGluZXtkaXNwbGF5''@;'; put 'put ''OmlubGluZSFpbXBvcnRhbnR9LmQtbGctaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH0uZC1sZy1ibG9ja3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudH0uZC1sZy10YWJsZXtkaXNwbGF5OnRhYmxlIWltcG9ydGFudH0uZC1sZy10YWJsZS1jZWxse2Rpc3BsYXk6''@;'; put 'put ''dGFibGUtY2VsbCFpbXBvcnRhbnR9LmQtbGctZmxleHtkaXNwbGF5OmZsZXghaW1wb3J0YW50fS5kLWxnLWlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXghaW1wb3J0YW50fS5jbHItZmxleC1sZy1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jbHItZmxleC1sZy1yb3d7Zmxl''@;'; put 'put ''eC1kaXJlY3Rpb246cm93fS5jbHItZ2FwLWxnLTV7Z2FwOjVweH0uY2xyLWdhcC1sZy0we2dhcDowfX0uZGF0YWdyaWQtYm9keXtwYWRkaW5nLWJvdHRvbToycmVtIWltcG9ydGFudH0uYWJvcnRNc2d7d2hpdGUtc3BhY2U6cHJlLXdyYXA7Zm9udC1mYW1pbHk6bW9ub3NwYWNlfSNncmFwaCBz''@;'; put 'put ''dmd7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0ubm8tdGFibGUtc2VsZWN0ZWR7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOnZhcigtLWNsci12ZXJ0''@;'; put 'put ''aWNhbC1uYXYtYmctY29sb3IpO3otaW5kZXg6MTA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt0b3A6MH0uY29weVJpZ2h0e2JhY2tncm91bmQ6IzQ5NTk2NyFpbXBvcnRhbnQ7Y29sb3I6I2ZmZjtkaXNwbGF5OmZsZXghaW1wb3J0YW50O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRl''@;'; put 'put ''bXM6Y2VudGVyO3BhZGRpbmc6NXB4IDAgNHB4O3otaW5kZXg6MTAwfS5uYXYtdHJlZT5jbHItdHJlZS1ub2RlLmNsci1leHBhbmRlZHtkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9Y2xyLXRyZWUtbm9kZXtvdmVyZmxvdy15OnZpc2libGV9Y2xyLXRyZWUtbm9kZTpmb2N1c3tvdXRs''@;'; put 'put ''aW5lOm5vbmUhaW1wb3J0YW50fWNsci10cmVlLW5vZGUgLmNsci10cmVlbm9kZS1jYXJldHt3aWR0aDphdXRvIWltcG9ydGFudDtoZWlnaHQ6YXV0byFpbXBvcnRhbnR9Y2xyLXRyZWUtbm9kZSAuY2xyLXRyZWVub2RlLXNwaW5uZXItY29udGFpbmVye3BhZGRpbmc6MCA4cHg7d2lkdGg6YXV0''@;'; put 'put ''bztoZWlnaHQ6YXV0bzthbGlnbi1pdGVtczpjZW50ZXJ9Y2xyLXRyZWUtbm9kZSAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lcjpmb2N1c3tvdXRsaW5lOm5vbmUhaW1wb3J0YW50fS5jbHItdHJlZW5vZGUtY29udGVudCBwe3doaXRlLXNwYWNlOm5vd3JhcH0uc2VhcmNoLW5vZGV7''@;'; put 'put ''bWFyZ2luLWJvdHRvbTo1cHh9LnRyZWUtc2VhcmNoLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0udHJlZS1zZWFyY2gtd3JhcHBlciBjbHItaW5wdXQtY29udGFpbmVye21hcmdpbjowfS50cmVlLXNlYXJjaC13cmFwcGVyIGNsci1p''@;'; put 'put ''Y29ue3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7Ym90dG9tOjA7bWFyZ2luOjAgMCAzcHg7Y3Vyc29yOnBvaW50ZXJ9LmNsci10cmVlLW5vZGV7b3ZlcmZsb3c6dmlzaWJsZSFpbXBvcnRhbnR9LmNvbnRlbnQtY29udGFpbmVye3dpZHRoOjEwMCV9QC1tb3otZG9jdW1lbnQgdXJsLXByZWZp''@;'; put 'put ''eCgpey53dEhvbGRlcnt3aWR0aDoxMDAlIWltcG9ydGFudH19aW5wdXQ6Oi1tcy1jbGVhcntkaXNwbGF5Om5vbmV9QG1lZGlhIGFsbCBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OiBub25lKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Y2xyLXRyZWUtbm9kZS5jbHItZXhwYW5kZWR7cGFk''@;'; put 'put ''ZGluZy1ib3R0b206MjBweDttaW4taGVpZ2h0OmF1dG99LmNsci10cmVlLW5vZGV7bWluLWhlaWdodDoyNHB4fS5jbHItdHJlZW5vZGUtY2hpbGRyZW57b3ZlcmZsb3c6aGlkZGVuIWltcG9ydGFudH0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci1pY29uLC5jbHItdHJlZW5vZGUtY29udGVu''@;'; put 'put ''dCBjbHItaWNvbnttaW4td2lkdGg6MTZweDttaW4taGVpZ2h0OjE2cHh9LnRyZWUtc2VhcmNoLXdyYXBwZXIgY2xyLWljb257Ym90dG9tOjJweH0uY29udGVudC1jb250YWluZXJ7aGVpZ2h0OjEwMCV9LmNvbnRlbnQtYXJlYT4uY2FyZHttYXJnaW4tYm90dG9tOjIwcHh9LnJlY29yZC1lZGl0''@;'; put 'put ''LW1vZGFsIHRleHRhcmVhe21pbi1oZWlnaHQ6NDJweH19LmJvcmRlci1ib3R0b20tZGl2aWRlcntib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZDNkM2QzfS5sb2FkaW5nU3Bpbm5lcntoZWlnaHQ6NzB2aDtmbGV4OjE7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1k''@;'; put 'put ''aXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcn0uZGlzYWJsZS1wYXNzd29yZC1tYW5hZ2Vyey13ZWJraXQtdGV4dC1zZWN1cml0eTpkaXNjOy1tb3otdGV4dC1zZWN1cml0eTpkaXNjO3RleHQtc2VjdXJpdHk6ZGlzYztmb250LWZhbWlseTp0ZXh0LXNlY3VyaXR5LWRpc2N9LnJl''@;'; put 'put ''bGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfWhyLmxpZ2h0e2JvcmRlcjowO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNkZWRlZGV9LnNwaW5uZXJ7YmFja2dyb3VuZDp1cmwoL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L3NwaW5uZXIu''@;'; put 'put ''MTZmNzYzY2ViYzZiNjRkZi1zdmcpIWltcG9ydGFudH0uY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVye2JhY2tncm91bmQ6dXJsKC9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9jYXJldC42NWYxZmMwYWNiZTRjN2ZmLXN2ZykhaW1wb3J0''@;'; put 'put ''YW50fWJvZHlbY2RzLXRoZW1lPWRhcmtdIC50YWJsZS1zZWFyY2gtd3JhcHBlcntiYWNrZ3JvdW5kOiMyMTMzM2J9LnRhYmxlLXNlYXJjaC13cmFwcGVye2JhY2tncm91bmQtY29sb3I6I2ZmZn0udGFibGUtc2VhcmNoLXdyYXBwZXIgLmlucHV0LXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7''@;'; put 'put ''bWluLXdpZHRoOjE3MHB4fS50YWJsZS1zZWFyY2gtd3JhcHBlciAuaW5wdXQtd3JhcHBlciBjbHItaWNvbiwudGFibGUtc2VhcmNoLXdyYXBwZXIgLmlucHV0LXdyYXBwZXIgLnNwaW5uZXJ7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MTlweDt0b3A6MH0udGFibGUtc2VhcmNoLXdyYXBwZXIg''@;'; put 'put ''LmlucHV0LXdyYXBwZXIgY2xyLWljb257Y3Vyc29yOnBvaW50ZXJ9LnRhYmxlLXNlYXJjaC13cmFwcGVyIC5pbnB1dC13cmFwcGVyIFtuYW1lPXNlYXJjaC1pbnB1dF17cGFkZGluZy1yaWdodDoyNXB4fS50YWJsZS1zZWFyY2gtd3JhcHBlciBjbHItaW5wdXQtY29udGFpbmVye21hcmdpbi10''@;'; put 'put ''b3A6LTVweDttYXJnaW4tcmlnaHQ6MH0udGFibGUtc2VhcmNoLXdyYXBwZXIgY2xyLWlucHV0LWNvbnRhaW5lciBsYWJlbHtkaXNwbGF5Om5vbmV9LnRhYmxlLXNlYXJjaC13cmFwcGVyIGNsci1jaGVja2JveC1jb250YWluZXJ7bWFyZ2luLXRvcDowfS50YWJsZS1zZWFyY2gtd3JhcHBlciBp''@;'; put 'put ''bnB1dDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiwudGFibGUtc2VhcmNoLXdyYXBwZXIgaW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjB9LnRhYmxlLXNlYXJjaC13cmFwcGVyIGlucHV0W3R5cGU9bnVtYmVyXXstbW96''@;'; put 'put ''LWFwcGVhcmFuY2U6dGV4dGZpZWxkfS5kYy1sb2NrZWQtY29udHJvbHtvcGFjaXR5Oi40O2N1cnNvcjpub3QtYWxsb3dlZCFpbXBvcnRhbnR9LmxpbmstaXR7Y3Vyc29yOnBvaW50ZXI7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0K'';'; put 'run;'; put '%sasjsout(CSS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/web9/images; %let service=caret-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMiAxMiI+CiAgICA8ZGVmcz4KICAgICAgICA8c3R5bGU+LmNscy0xe2ZpbGw6I2IzYjNiMzt9PC9zdHlsZT4KICAgIDwvZGVmcz4KICAgIDx0aXRsZT5DYXJldDwvdGl0bGU+CiAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xzLTEiIGQ9Ik02LDlMMS4yLDQuMmEwLjY4LDAuNjgsMCwwLDEsMS0xTDYsNy4wOCw5Ljg0LDMuMjRhMC42OCwwLjY4LDAsMSwxLDEsMVoiLz4KPC9zdmc+Cg=='';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=datacontroller-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB3aWR0aD0iMTY5MCIgaGVpZ2h0PSIyNDAiIHZpZXdCb3g9IjAgMCAxNjkwIDI0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEwNV83KSI+CjxwYXRoIGQ9Ik0xMjQuOSA1NS4yMDAxQzEyOC4y''@;'; put 'put ''IDU1LjYwMDEgMTMxLjQgNTUuOTAwMSAxMzQuNyA1Ni4zMDAxQzE0Mi42IDU3LjQwMDEgMTUwLjMgNTguOTAwMSAxNTcuNSA2Mi42MDAxQzE1OS42IDYzLjcwMDEgMTYxLjYgNjQuOTAwMSAxNjMuMSA2Ni44MDAxQzE2NS41IDY5LjYwMDEgMTY1LjQgNzIuNjAwMSAxNjMgNzUuNDAwMUMxNjAu''@;'; put 'put ''NSA3OC4yMDAxIDE1Ny4zIDc5LjgwMDEgMTUzLjkgODEuMTAwMUMxNDYgODQuMjAwMSAxMzcuNyA4NS42MDAxIDEyOS4zIDg2LjMwMDFDMTE1LjYgODcuNDAwMSAxMDIuMSA4Ni45MDAxIDg4LjcgODMuNzAwMUM4NC4zIDgyLjcwMDEgODAgODEuMzAwMSA3Ni4xIDc5LjEwMDFDNzQuNiA3OC4z''@;'; put 'put ''MDAxIDczLjIgNzcuMzAwMSA3MS45IDc2LjEwMDFDNjguMyA3Mi42MDAxIDY4LjMgNjguOTAwMSA3MiA2NS42MDAxQzc2IDYyLjAwMDEgODAuOSA2MC4zMDAxIDg1LjkgNTguOTAwMUM5Mi45IDU2LjkwMDEgMTAwIDU1LjkwMDEgMTA3LjIgNTUuNDAwMUMxMDcuOCA1NS40MDAxIDEwOC41IDU1''@;'; put 'put ''LjYwMDEgMTA5IDU1LjEwMDFDMTE0LjIgNTUuMjAwMSAxMTkuNiA1NS4yMDAxIDEyNC45IDU1LjIwMDFaIiBmaWxsPSIjRTBFMEUwIi8+CjxwYXRoIGQ9Ik02OS4yMDAxIDEzNy4zQzc1LjYwMDEgMTQ1LjUgODQuNzAwMSAxNDguNSA5NC4xMDAxIDE1MC41QzExMi43IDE1NC41IDEzMS4zIDE1''@;'; put 'put ''NCAxNDkuNCAxNDcuNkMxNTUgMTQ1LjYgMTYwLjIgMTQyLjkgMTYzLjkgMTM3LjlDMTY0LjUgMTM3LjEgMTY0LjggMTM3LjUgMTY1LjEgMTM4LjFDMTY1LjcgMTM5LjQgMTY2IDE0MC43IDE2NiAxNDIuMUMxNjYgMTQ3IDE2NiAxNTIgMTY2IDE1Ni45QzE2NiAxNjAuMSAxNjQuNSAxNjIuNiAx''@;'; put 'put ''NjIuMyAxNjQuOEMxNTcuNyAxNjkuNCAxNTEuOSAxNzEuOSAxNDUuOCAxNzMuOEMxMzMuNSAxNzcuNiAxMjAuOSAxNzguNCAxMDguMiAxNzcuNUM5OC43MDAxIDE3Ni44IDg5LjUgMTc1IDgwLjggMTcxLjFDNzcuMSAxNjkuNCA3My43MDAxIDE2Ny40IDcxLjAwMDEgMTY0LjNDNjguOTAwMSAx''@;'; put 'put ''NjEuOSA2Ny44IDE1OS4yIDY3LjggMTU2QzY3LjkgMTUxLjUgNjcuOCAxNDcgNjcuOCAxNDIuNUM2Ny44IDE0MC43IDY4LjEwMDEgMTM5IDY5LjIwMDEgMTM3LjNaIiBmaWxsPSIjOEVDNjNGIi8+CjxwYXRoIGQ9Ik02OS4yOTk5IDEwNi40Qzc0LjU5OTkgMTEzLjUgODEuOTk5OSAxMTYuNSA4''@;'; put 'put ''OS44OTk5IDExOC42QzEwOC44IDEyMy42IDEyNy43IDEyMy41IDE0Ni40IDExNy45QzE1Mi42IDExNi4xIDE1OC40IDExMy40IDE2Mi45IDEwOC41QzE2My41IDEwNy45IDE2My45IDEwNi41IDE2NC42IDEwNi43QzE2NS42IDEwNyAxNjUuNiAxMDguNCAxNjUuOSAxMDkuNUMxNjYuMyAxMTEu''@;'; put 'put ''MiAxNjYuMSAxMTIuOSAxNjYuMSAxMTQuNkMxNjYuMSAxMTggMTY2IDEyMS4zIDE2Ni4xIDEyNC43QzE2Ni4zIDEyOC45IDE2NC42IDEzMi4yIDE2MS41IDEzNC45QzE1Ni44IDEzOS4xIDE1MS4xIDE0MS42IDE0NSAxNDMuMkMxMjQuNSAxNDguNyAxMDQuMSAxNDguNiA4My45OTk5IDE0MS42''@;'; put 'put ''Qzc5LjA5OTkgMTM5LjkgNzQuNTk5OSAxMzcuNSA3MC45OTk5IDEzMy42QzY4Ljc5OTkgMTMxLjIgNjcuNyAxMjguNCA2Ny43IDEyNS4xQzY3LjggMTIwLjcgNjcuNyAxMTYuMiA2Ny43IDExMS44QzY3LjggMTEwIDY4LjA5OTkgMTA4LjIgNjkuMjk5OSAxMDYuNFoiIGZpbGw9IiNFMEUwRTAi''@;'; put 'put ''Lz4KPHBhdGggZD0iTTY5LjEgNzYuN0M3MC42IDgxLjEgNzQuMiA4My4wOTk5IDc4IDg0Ljg5OTlDODQuOCA4OC4wOTk5IDkyLjEgODkuNiA5OS40IDkwLjVDMTEzLjkgOTIuMyAxMjguNCA5Mi4xIDE0Mi43IDg5LjFDMTQ4LjUgODcuOSAxNTQuMSA4Ni4zIDE1OS4yIDgzLjFDMTYyLjEgODEu''@;'; put 'put ''MyAxNjMuNiA3OS42IDE2NC42IDc2LjhDMTY1LjYgNzguMiAxNjUuOSA3OS43IDE2NS45IDgxLjJDMTY1LjkgODYuMiAxNjYgOTEuMSAxNjUuOSA5Ni4xQzE2NS44IDEwMC4zIDE2My40IDEwMy4zIDE2MC4zIDEwNS44QzE1NC41IDExMC40IDE0Ny43IDExMi44IDE0MC42IDExNC40QzEyMS44''@;'; put 'put ''IDExOC41IDEwMy4yIDExOC4yIDg0LjkgMTEyQzgwLjEgMTEwLjQgNzUuNSAxMDguMSA3MS44IDEwNC41QzY5IDEwMS44IDY3LjUgOTguNyA2Ny42IDk0LjdDNjcuNyA5MC40IDY3LjYgODYuMSA2Ny42IDgxLjhDNjcuOCA3OS45IDY4LjEgNzguMyA2OS4xIDc2LjdaIiBmaWxsPSIjOEVDNjNG''@;'; put 'put ''Ii8+CjxwYXRoIGQ9Ik0xODMuOSAyMTAuOUMyMDAuMiAyMTEuOCAyMDguOSAxOTEuOCAxOTcuMSAxODAuNUMxODQuNyAxNjguNiAxNjQuMyAxNzkuNyAxNjcuNSAxOTYuNUM5My44IDI0My41IC0wLjk5OTk4MSAxNzMuMiAyNiA4Ny44MDAxTDcuODAwMDIgNzUuNjAwMUMtMzMuMSAxODQuMyA5''@;'; put 'put ''Mi44IDI3Ni4yIDE4My45IDIxMC45Wk0xNzguNyAxODcuNEMxODYuMyAxNzkuNSAxOTguNCAxOTAuNSAxOTEuMyAxOTguOEMxODMuOCAyMDcuNSAxNzAuNiAxOTUuOCAxNzguNyAxODcuNFoiIGZpbGw9IiNFMEUwRTAiLz4KPHBhdGggZD0iTTM1LjIgNTAuNzAwMUM0Ni45IDYxLjkwMDEgNjYu''@;'; put 'put ''MiA1Mi43MDAxIDY1LjEgMzYuNzAwMUMxMzguNyAtMTAuNyAyMzQgNTkuNTAwMSAyMDcgMTQ1LjJMMjI1LjIgMTU3LjRDMjY0LjkgNTEuODAwMSAxNDQuNCAtNDMuMjk5OSA1MS4yIDIwLjYwMDFDMzMuNyAxNy4wMDAxIDIyLjQgMzguNDAwMSAzNS4yIDUwLjcwMDFaTTUzLjYgNDMuODAwMUM0''@;'; put 'put ''NS44IDUxLjkwMDEgMzMuNSA0MC4xMDAxIDQxLjMgMzIuMDAwMUM0OS4xIDIzLjkwMDEgNjEuNCAzNS43MDAxIDUzLjYgNDMuODAwMVoiIGZpbGw9IiM4RUM2M0YiLz4KPHBhdGggZD0iTTMyMy41NzUgNDcuODg3NEMzMjMuNTc1IDQ2Ljc5MDEgMzIzLjkxNyA0NS44OTg1IDMyNC42MDMgNDUu''@;'; put 'put ''MjEyN0MzMjUuNDI2IDQ0LjM4OTcgMzI2LjM4NiA0My45NzgyIDMyNy40ODQgNDMuOTc4MkgzNjkuMDQ0QzM3OC45MiA0My45NzgyIDM4OC4wNDEgNDUuNzYxMyAzOTYuNDA4IDQ5LjMyNzZDNDA0LjkxMyA1Mi44OTM4IDQxMi4yNTEgNTcuOTAwMyA0MTguNDIzIDY0LjM0N0M0MjQuNTk2IDcw''@;'; put 'put ''LjY1NjUgNDI5LjQ2NSA3OC4yMDA1IDQzMy4wMzEgODYuOTc5QzQzNi41OTcgOTUuNzU3NSA0MzguMzggMTA1LjQyOCA0MzguMzggMTE1Ljk4OUM0MzguMzggMTI2LjU1MSA0MzYuNTk3IDEzNi4yMjEgNDMzLjAzMSAxNDQuOTk5QzQyOS40NjUgMTUzLjc3OCA0MjQuNTk2IDE2MS4zOSA0MTgu''@;'; put 'put ''NDIzIDE2Ny44MzdDNDEyLjI1MSAxNzQuMTQ2IDQwNC45MTMgMTc5LjA4NCAzOTYuNDA4IDE4Mi42NTFDMzg4LjA0MSAxODYuMjE3IDM3OC45MiAxODggMzY5LjA0NCAxODhIMzI3LjQ4NEMzMjYuMzg2IDE4OCAzMjUuNDI2IDE4Ny42NTcgMzI0LjYwMyAxODYuOTcxQzMyMy45MTcgMTg2LjE0''@;'; put 'put ''OCAzMjMuNTc1IDE4NS4xODggMzIzLjU3NSAxODQuMDkxVjQ3Ljg4NzRaTTM0OS4yOTMgNjkuMjg0OVYxNjIuNjkzSDM2OS42NjJDMzc1LjgzNCAxNjIuNjkzIDM4MS40NTggMTYxLjUyNyAzODYuNTMzIDE1OS4xOTZDMzkxLjYwOCAxNTYuODY0IDM5NS45MjggMTUzLjY0MSAzOTkuNDk1IDE0''@;'; put 'put ''OS41MjZDNDAzLjE5OCAxNDUuNDExIDQwNi4wMSAxNDAuNTQxIDQwNy45MyAxMzQuOTE4QzQwOS45ODggMTI5LjE1NyA0MTEuMDE2IDEyMi44NDcgNDExLjAxNiAxMTUuOTg5QzQxMS4wMTYgMTA5LjI2OCA0MDkuOTg4IDEwMy4wMjcgNDA3LjkzIDk3LjI2NjNDNDA2LjAxIDkxLjUwNTQgNDAz''@;'; put 'put ''LjE5OCA4Ni41Njc1IDM5OS40OTUgODIuNDUyNkMzOTUuOTI4IDc4LjMzNzcgMzkxLjYwOCA3NS4xMTQzIDM4Ni41MzMgNzIuNzgyNkMzODEuNDU4IDcwLjQ1MDggMzc1LjgzNCA2OS4yODQ5IDM2OS42NjIgNjkuMjg0OUgzNDkuMjkzWk01MzEuMDkzIDE3Ny45MThDNTI3LjM4OSAxODAuNjYy''@;'; put 'put ''IDUyMy4xMzcgMTgzLjEzMSA1MTguMzM3IDE4NS4zMjVDNTEzLjUzNiAxODcuMzgzIDUwOC43MzUgMTg4LjQxMSA1MDMuOTM1IDE4OC40MTFDNDk2LjgwMiAxODguNDExIDQ5MC4yMTggMTg3LjEwOCA0ODQuMTgzIDE4NC41MDJDNDc4LjE0OCAxODEuODk2IDQ3Mi45MzYgMTc4LjI2MSA0Njgu''@;'; put 'put ''NTQ2IDE3My41OThDNDY0LjI5NCAxNjguOTM0IDQ2MC45MzQgMTYzLjQ0OCA0NTguNDY1IDE1Ny4xMzhDNDU1Ljk5NiAxNTAuODI5IDQ1NC43NjEgMTQzLjk3IDQ1NC43NjEgMTM2LjU2NEM0NTQuNzYxIDEyOS40MzEgNDU2LjA2NCAxMjIuNzc5IDQ1OC42NzEgMTE2LjYwNkM0NjEuMjc3IDEx''@;'; put 'put ''MC4yOTcgNDY0Ljg0MyAxMDQuODEgNDY5LjM2OSAxMDAuMTQ3QzQ3My44OTYgOTUuMzQ2IDQ3OS4xMDggOTEuNTc0IDQ4NS4wMDYgODguODMwN0M0OTEuMDQxIDg2LjA4NzQgNDk3LjQ4OCA4NC43MTU4IDUwNC4zNDYgODQuNzE1OEM1MDkuMTQ3IDg0LjcxNTggNTEzLjg3OSA4NS44MTMxIDUx''@;'; put 'put ''OC41NDIgODguMDA3N0M1MjMuMjA2IDkwLjA2NTIgNTI3LjM4OSA5Mi40NjU1IDUzMS4wOTMgOTUuMjA4OFY4OS4wMzY1QzUzMS4wOTMgODcuOTM5MSA1MzEuNDM2IDg3LjA0NzYgNTMyLjEyMiA4Ni4zNjE4QzUzMi45NDUgODUuNTM4OCA1MzMuOTA1IDg1LjEyNzMgNTM1LjAwMiA4NS4xMjcz''@;'; put 'put ''SDU1MS4wNUM1NTMuNjU2IDg1LjEyNzMgNTU0Ljk1OSA4Ni40MzAzIDU1NC45NTkgODkuMDM2NVYxODQuMDkxQzU1NC45NTkgMTg2LjY5NyA1NTMuNjU2IDE4OCA1NTEuMDUgMTg4SDUzNS4wMDJDNTMzLjkwNSAxODggNTMyLjk0NSAxODcuNjU3IDUzMi4xMjIgMTg2Ljk3MUM1MzEuNDM2IDE4''@;'; put 'put ''Ni4xNDggNTMxLjA5MyAxODUuMTg4IDUzMS4wOTMgMTg0LjA5MVYxNzcuOTE4Wk00NzkuNjU3IDEzNi41NjRDNDc5LjY1NyAxNDAuMjY3IDQ4MC4zNDIgMTQzLjc2NSA0ODEuNzE0IDE0Ny4wNTdDNDgzLjA4NiAxNTAuMjExIDQ4NC45MzcgMTUzLjAyMyA0ODcuMjY5IDE1NS40OTJDNDg5LjYw''@;'; put 'put ''MSAxNTcuOTYxIDQ5Mi4yNzYgMTU5Ljk1IDQ5NS4yOTMgMTYxLjQ1OUM0OTguNDQ4IDE2Mi44MyA1MDEuNzQgMTYzLjUxNiA1MDUuMTY5IDE2My41MTZDNTA4Ljg3MiAxNjMuNTE2IDUxMi4yMzMgMTYyLjgzIDUxNS4yNTEgMTYxLjQ1OUM1MTguMjY4IDE1OS45NSA1MjAuODc0IDE1Ny45NjEg''@;'; put 'put ''NTIzLjA2OSAxNTUuNDkyQzUyNS40MDEgMTUzLjAyMyA1MjcuMTg0IDE1MC4yMTEgNTI4LjQxOCAxNDcuMDU3QzUyOS42NTMgMTQzLjc2NSA1MzAuMjcgMTQwLjI2NyA1MzAuMjcgMTM2LjU2NEM1MzAuMjcgMTMyLjg2IDUyOS42NTMgMTI5LjQzMSA1MjguNDE4IDEyNi4yNzZDNTI3LjE4NCAx''@;'; put 'put ''MjIuOTg0IDUyNS40MDEgMTIwLjEwNCA1MjMuMDY5IDExNy42MzVDNTIwLjg3NCAxMTUuMTY2IDUxOC4yNjggMTEzLjI0NiA1MTUuMjUxIDExMS44NzRDNTEyLjIzMyAxMTAuMzY1IDUwOC44NzIgMTA5LjYxMSA1MDUuMTY5IDEwOS42MTFDNTAxLjc0IDEwOS42MTEgNDk4LjQ0OCAxMTAuMzY1''@;'; put 'put ''IDQ5NS4yOTMgMTExLjg3NEM0OTIuMjc2IDExMy4yNDYgNDg5LjYwMSAxMTUuMTY2IDQ4Ny4yNjkgMTE3LjYzNUM0ODQuOTM3IDEyMC4xMDQgNDgzLjA4NiAxMjIuOTg0IDQ4MS43MTQgMTI2LjI3NkM0ODAuMzQyIDEyOS40MzEgNDc5LjY1NyAxMzIuODYgNDc5LjY1NyAxMzYuNTY0Wk01NzQu''@;'; put 'put ''NDA3IDg5LjAzNjVDNTc0LjQwNyA4Ny45MzkxIDU3NC43NSA4Ny4wNDc2IDU3NS40MzYgODYuMzYxOEM1NzYuMTIyIDg1LjUzODggNTc3LjAxMyA4NS4xMjczIDU3OC4xMTEgODUuMTI3M0g1OTMuMzM2VjU4LjE3NDZDNTkzLjMzNiA1Ny4wNzczIDU5My42NzkgNTYuMTg1OCA1OTQuMzY0IDU1''@;'; put 'put ''LjQ5OTlDNTk1LjE4NyA1NC42NzcgNTk2LjE0OCA1NC4yNjU1IDU5Ny4yNDUgNTQuMjY1NUg2MTMuMjkzQzYxNS44OTkgNTQuMjY1NSA2MTcuMjAyIDU1LjU2ODUgNjE3LjIwMiA1OC4xNzQ2Vjg1LjEyNzNINjM1LjMwOEM2MzYuNDA1IDg1LjEyNzMgNjM3LjI5NyA4NS41Mzg4IDYzNy45ODIg''@;'; put 'put ''ODYuMzYxOEM2MzguNjY4IDg3LjA0NzYgNjM5LjAxMSA4Ny45MzkxIDYzOS4wMTEgODkuMDM2NVYxMDQuMjYyQzYzOS4wMTEgMTA1LjM1OSA2MzguNjY4IDEwNi4yNSA2MzcuOTgyIDEwNi45MzZDNjM3LjI5NyAxMDcuNjIyIDYzNi40MDUgMTA3Ljk2NSA2MzUuMzA4IDEwNy45NjVINjE3LjIw''@;'; put 'put ''MlYxODQuMDkxQzYxNy4yMDIgMTg2LjY5NyA2MTUuODk5IDE4OCA2MTMuMjkzIDE4OEg1OTcuMjQ1QzU5Ni4xNDggMTg4IDU5NS4xODcgMTg3LjY1NyA1OTQuMzY0IDE4Ni45NzFDNTkzLjY3OSAxODYuMTQ4IDU5My4zMzYgMTg1LjE4OCA1OTMuMzM2IDE4NC4wOTFWMTA3Ljk2NUg1NzguMTEx''@;'; put 'put ''QzU3Ny4wMTMgMTA3Ljk2NSA1NzYuMTIyIDEwNy42MjIgNTc1LjQzNiAxMDYuOTM2QzU3NC43NSAxMDYuMjUgNTc0LjQwNyAxMDUuMzU5IDU3NC40MDcgMTA0LjI2MlY4OS4wMzY1Wk03MjkuNjkzIDE3Ny45MThDNzI1Ljk5IDE4MC42NjIgNzIxLjczOCAxODMuMTMxIDcxNi45MzcgMTg1LjMy''@;'; put 'put ''NUM3MTIuMTM3IDE4Ny4zODMgNzA3LjMzNiAxODguNDExIDcwMi41MzUgMTg4LjQxMUM2OTUuNDAzIDE4OC40MTEgNjg4LjgxOSAxODcuMTA4IDY4Mi43ODQgMTg0LjUwMkM2NzYuNzQ4IDE4MS44OTYgNjcxLjUzNiAxNzguMjYxIDY2Ny4xNDcgMTczLjU5OEM2NjIuODk1IDE2OC45MzQgNjU5''@;'; put 'put ''LjUzNCAxNjMuNDQ4IDY1Ny4wNjUgMTU3LjEzOEM2NTQuNTk2IDE1MC44MjkgNjUzLjM2MiAxNDMuOTcgNjUzLjM2MiAxMzYuNTY0QzY1My4zNjIgMTI5LjQzMSA2NTQuNjY1IDEyMi43NzkgNjU3LjI3MSAxMTYuNjA2QzY1OS44NzcgMTEwLjI5NyA2NjMuNDQzIDEwNC44MSA2NjcuOTcgMTAw''@;'; put 'put ''LjE0N0M2NzIuNDk2IDk1LjM0NiA2NzcuNzA4IDkxLjU3NCA2ODMuNjA3IDg4LjgzMDdDNjg5LjY0MiA4Ni4wODc0IDY5Ni4wODggODQuNzE1OCA3MDIuOTQ3IDg0LjcxNThDNzA3Ljc0NyA4NC43MTU4IDcxMi40NzkgODUuODEzMSA3MTcuMTQzIDg4LjAwNzdDNzIxLjgwNyA5MC4wNjUyIDcy''@;'; put 'put ''NS45OSA5Mi40NjU1IDcyOS42OTMgOTUuMjA4OFY4OS4wMzY1QzcyOS42OTMgODcuOTM5MSA3MzAuMDM2IDg3LjA0NzYgNzMwLjcyMiA4Ni4zNjE4QzczMS41NDUgODUuNTM4OCA3MzIuNTA1IDg1LjEyNzMgNzMzLjYwMyA4NS4xMjczSDc0OS42NTFDNzUyLjI1NyA4NS4xMjczIDc1My41NiA4''@;'; put 'put ''Ni40MzAzIDc1My41NiA4OS4wMzY1VjE4NC4wOTFDNzUzLjU2IDE4Ni42OTcgNzUyLjI1NyAxODggNzQ5LjY1MSAxODhINzMzLjYwM0M3MzIuNTA1IDE4OCA3MzEuNTQ1IDE4Ny42NTcgNzMwLjcyMiAxODYuOTcxQzczMC4wMzYgMTg2LjE0OCA3MjkuNjkzIDE4NS4xODggNzI5LjY5MyAxODQu''@;'; put 'put ''MDkxVjE3Ny45MThaTTY3OC4yNTcgMTM2LjU2NEM2NzguMjU3IDE0MC4yNjcgNjc4Ljk0MyAxNDMuNzY1IDY4MC4zMTUgMTQ3LjA1N0M2ODEuNjg2IDE1MC4yMTEgNjgzLjUzOCAxNTMuMDIzIDY4NS44NyAxNTUuNDkyQzY4OC4yMDEgMTU3Ljk2MSA2OTAuODc2IDE1OS45NSA2OTMuODk0IDE2''@;'; put 'put ''MS40NTlDNjk3LjA0OSAxNjIuODMgNzAwLjM0IDE2My41MTYgNzAzLjc3IDE2My41MTZDNzA3LjQ3MyAxNjMuNTE2IDcxMC44MzMgMTYyLjgzIDcxMy44NTEgMTYxLjQ1OUM3MTYuODY5IDE1OS45NSA3MTkuNDc1IDE1Ny45NjEgNzIxLjY2OSAxNTUuNDkyQzcyNC4wMDEgMTUzLjAyMyA3MjUu''@;'; put 'put ''Nzg0IDE1MC4yMTEgNzI3LjAxOSAxNDcuMDU3QzcyOC4yNTMgMTQzLjc2NSA3MjguODcgMTQwLjI2NyA3MjguODcgMTM2LjU2NEM3MjguODcgMTMyLjg2IDcyOC4yNTMgMTI5LjQzMSA3MjcuMDE5IDEyNi4yNzZDNzI1Ljc4NCAxMjIuOTg0IDcyNC4wMDEgMTIwLjEwNCA3MjEuNjY5IDExNy42''@;'; put 'put ''MzVDNzE5LjQ3NSAxMTUuMTY2IDcxNi44NjkgMTEzLjI0NiA3MTMuODUxIDExMS44NzRDNzEwLjgzMyAxMTAuMzY1IDcwNy40NzMgMTA5LjYxMSA3MDMuNzcgMTA5LjYxMUM3MDAuMzQgMTA5LjYxMSA2OTcuMDQ5IDExMC4zNjUgNjkzLjg5NCAxMTEuODc0QzY5MC44NzYgMTEzLjI0NiA2ODgu''@;'; put 'put ''MjAxIDExNS4xNjYgNjg1Ljg3IDExNy42MzVDNjgzLjUzOCAxMjAuMTA0IDY4MS42ODYgMTIyLjk4NCA2ODAuMzE1IDEyNi4yNzZDNjc4Ljk0MyAxMjkuNDMxIDY3OC4yNTcgMTMyLjg2IDY3OC4yNTcgMTM2LjU2NFoiIGZpbGw9IiNFMEUwRTAiLz4KPHBhdGggZD0iTTg3My4yMDYgNzQuMjIy''@;'; put 'put ''OEM4NzIuNjU3IDc1LjA0NTggODcxLjkwMyA3NS41MjU4IDg3MC45NDMgNzUuNjYzQzg2OS45ODIgNzUuODAwMiA4NjkuMDIyIDc1LjU5NDQgODY4LjA2MiA3NS4wNDU4Qzg2NC45MDcgNzMuMTI1NSA4NjEuMTM1IDcxLjQ3OTUgODU2Ljc0NiA3MC4xMDc5Qzg1Mi4zNTcgNjguNzM2MiA4NDcu''@;'; put 'put ''ODk5IDY4LjExOSA4NDMuMzczIDY4LjI1NjJDODM3LjQ3NSA2OC4yNTYyIDgzMS45ODggNjkuNTU5MiA4MjYuOTEzIDcyLjE2NTNDODIxLjk3NSA3NC42MzQzIDgxNy42NTQgNzguMDYzNCA4MTMuOTUxIDgyLjQ1MjZDODEwLjI0OCA4Ni43MDQ3IDgwNy4zNjcgOTEuNzExMSA4MDUuMzEgOTcu''@;'; put 'put ''NDcyQzgwMy4yNTIgMTAzLjIzMyA4MDIuMjkyIDEwOS40MDUgODAyLjQyOSAxMTUuOTg5QzgwMi41NjYgMTIyLjg0NyA4MDMuNTk1IDEyOS4yMjUgODA1LjUxNSAxMzUuMTIzQzgwNy41NzMgMTQwLjg4NCA4MTAuMzg1IDE0NS44OTEgODEzLjk1MSAxNTAuMTQzQzgxNy41MTcgMTU0LjM5NSA4''@;'; put 'put ''MjEuODM4IDE1Ny43NTUgODI2LjkxMyAxNjAuMjI0QzgzMS45ODggMTYyLjU1NiA4MzcuNjggMTYzLjcyMiA4NDMuOTkgMTYzLjcyMkM4NTAuMDI1IDE2My41ODUgODU1LjUxMiAxNjIuNTU2IDg2MC40NSAxNjAuNjM2Qzg2NS41MjUgMTU4LjcxNiA4NzAuNTMxIDE1NS45NzIgODc1LjQ2OSAx''@;'; put 'put ''NTIuNDA2Qzg3Ni40MjkgMTUxLjcyIDg3Ny40NTggMTUxLjUxNCA4NzguNTU1IDE1MS43ODlDODc5LjY1MiAxNTEuOTI2IDg4MC41NDQgMTUyLjQ3NSA4ODEuMjMgMTUzLjQzNUw4OTEuMTA2IDE2OC4yNDhDODkyLjM0IDE3MC4xNjkgODkxLjk5NyAxNzEuODgzIDg5MC4wNzcgMTczLjM5MkM4''@;'; put 'put ''ODIuNTMzIDE3OS4xNTMgODc1LjE5NSAxODMuMzM2IDg2OC4wNjIgMTg1Ljk0M0M4NjAuOTMgMTg4LjU0OSA4NTIuOTc0IDE4OS44NTIgODQ0LjE5NiAxODkuODUyQzgzMy42MzQgMTg5Ljk4OSA4MjQuMTAxIDE4OC4zNDMgODE1LjU5NyAxODQuOTE0QzgwNy4yMyAxODEuMzQ4IDgwMC4wMjkg''@;'; put 'put ''MTc2LjM0MSA3OTMuOTk0IDE2OS44OTRDNzg4LjA5NiAxNjMuMzExIDc4My41MDEgMTU1LjQ5MiA3ODAuMjA5IDE0Ni40MzlDNzc3LjA1NCAxMzcuMzg3IDc3NS40MDggMTI3LjM3NCA3NzUuMjcxIDExNi40MDFDNzc1LjEzNCAxMDcuMDczIDc3Ni41NzQgOTguMDIwNyA3NzkuNTkyIDg5LjI0''@;'; put 'put ''MjJDNzgyLjc0NiA4MC4zMjY2IDc4Ny4yMDQgNzIuMzcxMSA3OTIuOTY1IDY1LjM3NTdDNzk4LjcyNiA1OC4zODA0IDgwNS43MjEgNTIuNzU2NyA4MTMuOTUxIDQ4LjUwNDZDODIyLjE4MSA0NC4yNTI1IDgzMS40MzkgNDIuMTI2NSA4NDEuNzI3IDQyLjEyNjVDODQ4LjcyMiA0MS45ODkzIDg1''@;'; put 'put ''NS41OCA0Mi44MTIzIDg2Mi4zMDEgNDQuNTk1NEM4NjkuMTU5IDQ2LjM3ODYgODc1Ljg4IDQ5LjY3MDUgODgyLjQ2NCA1NC40NzEyQzg4My40MjQgNTUuMTU3IDg4My45NzMgNTYuMDQ4NiA4ODQuMTEgNTcuMTQ1OUM4ODQuMjQ3IDU4LjEwNjEgODgzLjk3MyA1OS4wNjYyIDg4My4yODcgNjAu''@;'; put 'put ''MDI2M0w4NzMuMjA2IDc0LjIyMjhaTTkwNi4yMTIgMTM2LjU2NEM5MDYuMjEyIDEyOS4yOTQgOTA3LjUxNSAxMjIuNTA0IDkxMC4xMjEgMTE2LjE5NUM5MTIuNzI3IDEwOS44ODUgOTE2LjIyNSAxMDQuMzk5IDkyMC42MTQgOTkuNzM1MkM5MjUuMTQgOTUuMDcxNyA5MzAuNDIxIDkxLjQzNjgg''@;'; put 'put ''OTM2LjQ1NiA4OC44MzA3Qzk0Mi40OTIgODYuMDg3NCA5NDkuMDA3IDg0LjcxNTggOTU2LjAwMiA4NC43MTU4Qzk2Mi45OTggODQuNzE1OCA5NjkuNDQ0IDg2LjA4NzQgOTc1LjM0MiA4OC44MzA3Qzk4MS4zNzcgOTEuNDM2OCA5ODYuNTkgOTUuMDcxNyA5OTAuOTc5IDk5LjczNTJDOTk1LjUw''@;'; put 'put ''NSAxMDQuMzk5IDk5OS4wMDMgMTA5Ljg4NSAxMDAxLjQ3IDExNi4xOTVDMTAwNC4wOCAxMjIuNTA0IDEwMDUuMzggMTI5LjI5NCAxMDA1LjM4IDEzNi41NjRDMTAwNS4zOCAxNDMuODMzIDEwMDQuMDggMTUwLjYyMyAxMDAxLjQ3IDE1Ni45MzJDOTk5LjAwMyAxNjMuMjQyIDk5NS41MDUgMTY4''@;'; put 'put ''LjcyOSA5OTAuOTc5IDE3My4zOTJDOTg2LjU5IDE3OC4wNTYgOTgxLjM3NyAxODEuNzU5IDk3NS4zNDIgMTg0LjUwMkM5NjkuMzA3IDE4Ny4xMDggOTYyLjc5MiAxODguNDExIDk1NS43OTYgMTg4LjQxMUM5NDguODAxIDE4OC40MTEgOTQyLjI4NiAxODcuMTA4IDkzNi4yNTEgMTg0LjUwMkM5''@;'; put 'put ''MzAuMjE1IDE4MS43NTkgOTI0LjkzNSAxNzguMDU2IDkyMC40MDggMTczLjM5MkM5MTYuMDE5IDE2OC43MjkgOTEyLjUyMSAxNjMuMjQyIDkwOS45MTUgMTU2LjkzMkM5MDcuNDQ2IDE1MC42MjMgOTA2LjIxMiAxNDMuODMzIDkwNi4yMTIgMTM2LjU2NFpNOTMxLjEwNyAxMzYuNTY0QzkzMS4x''@;'; put 'put ''MDcgMTQwLjQwNCA5MzEuNzI0IDE0NC4wMzkgOTMyLjk1OSAxNDcuNDY4QzkzNC4xOTMgMTUwLjc2IDkzNS45MDggMTUzLjY0MSA5MzguMTAyIDE1Ni4xMDlDOTQwLjI5NyAxNTguNTc4IDk0Mi45MDMgMTYwLjU2NyA5NDUuOTIxIDE2Mi4wNzZDOTQ4LjkzOCAxNjMuNDQ4IDk1Mi4yMyAxNjQu''@;'; put 'put ''MTM0IDk1NS43OTYgMTY0LjEzNEM5NTkuMzYzIDE2NC4xMzQgOTYyLjY1NSAxNjMuNDQ4IDk2NS42NzIgMTYyLjA3NkM5NjguODI3IDE2MC41NjcgOTcxLjUwMiAxNTguNTc4IDk3My42OTYgMTU2LjEwOUM5NzUuODkxIDE1My42NDEgOTc3LjYwNSAxNTAuNzYgOTc4Ljg0IDE0Ny40NjhDOTgw''@;'; put 'put ''LjA3NCAxNDQuMDM5IDk4MC42OTIgMTQwLjQwNCA5ODAuNjkyIDEzNi41NjRDOTgwLjY5MiAxMzIuNzIzIDk4MC4wNzQgMTI5LjE1NyA5NzguODQgMTI1Ljg2NUM5NzcuNjA1IDEyMi40MzYgOTc1Ljg5MSAxMTkuNDg3IDk3My42OTYgMTE3LjAxOEM5NzEuNTAyIDExNC41NDkgOTY4LjgyNyAx''@;'; put 'put ''MTIuNjI5IDk2NS42NzIgMTExLjI1N0M5NjIuNjU1IDEwOS43NDggOTU5LjM2MyAxMDguOTk0IDk1NS43OTYgMTA4Ljk5NEM5NTIuMjMgMTA4Ljk5NCA5NDguOTM4IDEwOS43NDggOTQ1LjkyMSAxMTEuMjU3Qzk0Mi45MDMgMTEyLjYyOSA5NDAuMjk3IDExNC41NDkgOTM4LjEwMiAxMTcuMDE4''@;'; put 'put ''QzkzNS45MDggMTE5LjQ4NyA5MzQuMTkzIDEyMi40MzYgOTMyLjk1OSAxMjUuODY1QzkzMS43MjQgMTI5LjE1NyA5MzEuMTA3IDEzMi43MjMgOTMxLjEwNyAxMzYuNTY0Wk0xMDUwLjkgMTg0LjA5MUMxMDUwLjkgMTg2LjY5NyAxMDQ5LjU5IDE4OCAxMDQ2Ljk5IDE4OEgxMDMwLjk0QzEwMjku''@;'; put 'put ''ODQgMTg4IDEwMjguODggMTg3LjY1NyAxMDI4LjA2IDE4Ni45NzFDMTAyNy4zNyAxODYuMTQ4IDEwMjcuMDMgMTg1LjE4OCAxMDI3LjAzIDE4NC4wOTFWODkuMDM2NUMxMDI3LjAzIDg3LjkzOTEgMTAyNy4zNyA4Ny4wNDc2IDEwMjguMDYgODYuMzYxOEMxMDI4Ljg4IDg1LjUzODggMTAyOS44''@;'; put 'put ''NCA4NS4xMjczIDEwMzAuOTQgODUuMTI3M0gxMDQ2Ljk5QzEwNDkuNTkgODUuMTI3MyAxMDUwLjkgODYuNDMwMyAxMDUwLjkgODkuMDM2NVY5Ni42NDlDMTA1NC44OCA5My4zNTcxIDEwNTkuNDcgOTAuNTQ1MyAxMDY0LjY4IDg4LjIxMzVDMTA2OS44OSA4NS44ODE3IDEwNzUuMDQgODQuNzE1''@;'; put 'put ''OCAxMDgwLjExIDg0LjcxNThDMTA4NC45MSA4NC43MTU4IDEwODkuMzcgODUuNjA3NCAxMDkzLjQ5IDg3LjM5MDVDMTA5Ny42IDg5LjAzNjUgMTEwMS4xIDkxLjQzNjggMTEwMy45OCA5NC41OTE2QzExMDcgOTcuNjA5MiAxMTA5LjMzIDEwMS4xNzUgMTExMC45OCAxMDUuMjlDMTExMi42MiAx''@;'; put 'put ''MDkuNDA1IDExMTMuNDQgMTEzLjkzMiAxMTEzLjQ0IDExOC44N1YxODQuMDkxQzExMTMuNDQgMTg2LjY5NyAxMTEyLjE0IDE4OCAxMTA5LjUzIDE4OEgxMDkzLjQ5QzEwOTIuMzkgMTg4IDEwOTEuNDMgMTg3LjY1NyAxMDkwLjYxIDE4Ni45NzFDMTA4OS45MiAxODYuMTQ4IDEwODkuNTggMTg1''@;'; put 'put ''LjE4OCAxMDg5LjU4IDE4NC4wOTFWMTI2LjY4OEMxMDg5LjU4IDEyMS4wNjQgMTA4OC4yNyAxMTYuNzQ0IDEwODUuNjcgMTEzLjcyNkMxMDgzLjA2IDExMC41NzEgMTA3OS4zNiAxMDguOTk0IDEwNzQuNTYgMTA4Ljk5NEMxMDcxLjU0IDEwOC45OTQgMTA2OC41OSAxMDkuNjExIDEwNjUuNzEg''@;'; put 'put ''MTEwLjg0NUMxMDYyLjk3IDExMS45NDMgMTA2MC41IDExMy41MiAxMDU4LjMgMTE1LjU3OEMxMDU2LjI1IDExNy40OTggMTA1NC41MyAxMTkuODMgMTA1My4xNiAxMjIuNTczQzEwNTEuOTMgMTI1LjMxNiAxMDUxLjMxIDEyOC4xOTcgMTA1MS4zMSAxMzEuMjE0TDEwNTAuOSAxODQuMDkxWk0x''@;'; put 'put ''MTI3Ljg3IDg5LjAzNjVDMTEyNy44NyA4Ny45MzkxIDExMjguMjEgODcuMDQ3NiAxMTI4LjkgODYuMzYxOEMxMTI5LjU4IDg1LjUzODggMTEzMC40OCA4NS4xMjczIDExMzEuNTcgODUuMTI3M0gxMTQ2LjhWNTguMTc0NkMxMTQ2LjggNTcuMDc3MyAxMTQ3LjE0IDU2LjE4NTggMTE0Ny44MyA1''@;'; put 'put ''NS40OTk5QzExNDguNjUgNTQuNjc3IDExNDkuNjEgNTQuMjY1NSAxMTUwLjcxIDU0LjI2NTVIMTE2Ni43NkMxMTY5LjM2IDU0LjI2NTUgMTE3MC42NyA1NS41Njg1IDExNzAuNjcgNTguMTc0NlY4NS4xMjczSDExODguNzdDMTE4OS44NyA4NS4xMjczIDExOTAuNzYgODUuNTM4OCAxMTkxLjQ1''@;'; put 'put ''IDg2LjM2MThDMTE5Mi4xMyA4Ny4wNDc2IDExOTIuNDcgODcuOTM5MSAxMTkyLjQ3IDg5LjAzNjVWMTA0LjI2MkMxMTkyLjQ3IDEwNS4zNTkgMTE5Mi4xMyAxMDYuMjUgMTE5MS40NSAxMDYuOTM2QzExOTAuNzYgMTA3LjYyMiAxMTg5Ljg3IDEwNy45NjUgMTE4OC43NyAxMDcuOTY1SDExNzAu''@;'; put 'put ''NjdWMTg0LjA5MUMxMTcwLjY3IDE4Ni42OTcgMTE2OS4zNiAxODggMTE2Ni43NiAxODhIMTE1MC43MUMxMTQ5LjYxIDE4OCAxMTQ4LjY1IDE4Ny42NTcgMTE0Ny44MyAxODYuOTcxQzExNDcuMTQgMTg2LjE0OCAxMTQ2LjggMTg1LjE4OCAxMTQ2LjggMTg0LjA5MVYxMDcuOTY1SDExMzEuNTdD''@;'; put 'put ''MTEzMC40OCAxMDcuOTY1IDExMjkuNTggMTA3LjYyMiAxMTI4LjkgMTA2LjkzNkMxMTI4LjIxIDEwNi4yNSAxMTI3Ljg3IDEwNS4zNTkgMTEyNy44NyAxMDQuMjYyVjg5LjAzNjVaTTEyNzMuMjggMTA4LjE3MUMxMjcyLjg3IDEwOS4yNjggMTI3Mi4xOCAxMTAuMDIyIDEyNzEuMjIgMTEwLjQz''@;'; put 'put ''NEMxMjcwLjI2IDExMC44NDUgMTI2OS4yMyAxMTAuNzc3IDEyNjguMTQgMTEwLjIyOEMxMjY3LjA0IDEwOS42OCAxMjY1LjY3IDEwOS4yIDEyNjQuMDIgMTA4Ljc4OEMxMjYyLjUxIDEwOC4zNzcgMTI2MC44NyAxMDguMTcxIDEyNTkuMDggMTA4LjE3MUMxMjU2LjA3IDEwOC4xNzEgMTI1My4x''@;'; put 'put ''OSAxMDguNzg4IDEyNTAuNDQgMTEwLjAyMkMxMjQ3LjcgMTExLjI1NyAxMjQ1LjIzIDExMi45NzIgMTI0My4wNCAxMTUuMTY2QzEyNDAuOTggMTE3LjIyNCAxMjM5LjMzIDExOS42OTMgMTIzOC4xIDEyMi41NzNDMTIzNi44NiAxMjUuMzE2IDEyMzYuMjUgMTI4LjE5NyAxMjM2LjI1IDEzMS4y''@;'; put 'put ''MTRMMTIzNS44NCAxODQuMDkxQzEyMzUuODQgMTg1LjE4OCAxMjM1LjQ5IDE4Ni4xNDggMTIzNC44MSAxODYuOTcxQzEyMzQuMTIgMTg3LjY1NyAxMjMzLjIzIDE4OCAxMjMyLjEzIDE4OEgxMjE1Ljg4QzEyMTQuNzggMTg4IDEyMTMuODIgMTg3LjY1NyAxMjEzIDE4Ni45NzFDMTIxMi4zMSAx''@;'; put 'put ''ODYuMTQ4IDEyMTEuOTcgMTg1LjE4OCAxMjExLjk3IDE4NC4wOTFWODkuMDM2NUMxMjExLjk3IDg3LjkzOTEgMTIxMi4zMSA4Ny4wNDc2IDEyMTMgODYuMzYxOEMxMjEzLjgyIDg1LjUzODggMTIxNC43OCA4NS4xMjczIDEyMTUuODggODUuMTI3M0gxMjMyLjEzQzEyMzMuMjMgODUuMTI3MyAx''@;'; put 'put ''MjM0LjEyIDg1LjUzODggMTIzNC44MSA4Ni4zNjE4QzEyMzUuNDkgODcuMDQ3NiAxMjM1Ljg0IDg3LjkzOTEgMTIzNS44NCA4OS4wMzY1Vjk0LjU5MTZDMTIzOS44MSA5MS43MTExIDEyNDQuMDcgODkuMzc5NCAxMjQ4LjU5IDg3LjU5NjJDMTI1My4xMiA4NS42NzU5IDEyNTcuOTkgODQuNzE1''@;'; put 'put ''OCAxMjYzLjIgODQuNzE1OEMxMjY4LjU1IDg0LjcxNTggMTI3My4yMSA4NS43NDQ1IDEyNzcuMTkgODcuODAyQzEyNzkuMTEgODkuMDM2NSAxMjc5LjczIDkwLjYxMzggMTI3OS4wNCA5Mi41MzQxTDEyNzMuMjggMTA4LjE3MVpNMTI4NS4zMyAxMzYuNTY0QzEyODUuMzMgMTI5LjI5NCAxMjg2''@;'; put 'put ''LjYzIDEyMi41MDQgMTI4OS4yNCAxMTYuMTk1QzEyOTEuODUgMTA5Ljg4NSAxMjk1LjM0IDEwNC4zOTkgMTI5OS43MyA5OS43MzUyQzEzMDQuMjYgOTUuMDcxNyAxMzA5LjU0IDkxLjQzNjggMTMxNS41NyA4OC44MzA3QzEzMjEuNjEgODYuMDg3NCAxMzI4LjEyIDg0LjcxNTggMTMzNS4xMiA4''@;'; put 'put ''NC43MTU4QzEzNDIuMTIgODQuNzE1OCAxMzQ4LjU2IDg2LjA4NzQgMTM1NC40NiA4OC44MzA3QzEzNjAuNSA5MS40MzY4IDEzNjUuNzEgOTUuMDcxNyAxMzcwLjEgOTkuNzM1MkMxMzc0LjYyIDEwNC4zOTkgMTM3OC4xMiAxMDkuODg1IDEzODAuNTkgMTE2LjE5NUMxMzgzLjIgMTIyLjUwNCAx''@;'; put 'put ''Mzg0LjUgMTI5LjI5NCAxMzg0LjUgMTM2LjU2NEMxMzg0LjUgMTQzLjgzMyAxMzgzLjIgMTUwLjYyMyAxMzgwLjU5IDE1Ni45MzJDMTM3OC4xMiAxNjMuMjQyIDEzNzQuNjIgMTY4LjcyOSAxMzcwLjEgMTczLjM5MkMxMzY1LjcxIDE3OC4wNTYgMTM2MC41IDE4MS43NTkgMTM1NC40NiAxODQu''@;'; put 'put ''NTAyQzEzNDguNDMgMTg3LjEwOCAxMzQxLjkxIDE4OC40MTEgMTMzNC45MSAxODguNDExQzEzMjcuOTIgMTg4LjQxMSAxMzIxLjQgMTg3LjEwOCAxMzE1LjM3IDE4NC41MDJDMTMwOS4zMyAxODEuNzU5IDEzMDQuMDUgMTc4LjA1NiAxMjk5LjUzIDE3My4zOTJDMTI5NS4xNCAxNjguNzI5IDEy''@;'; put 'put ''OTEuNjQgMTYzLjI0MiAxMjg5LjAzIDE1Ni45MzJDMTI4Ni41NiAxNTAuNjIzIDEyODUuMzMgMTQzLjgzMyAxMjg1LjMzIDEzNi41NjRaTTEzMTAuMjMgMTM2LjU2NEMxMzEwLjIzIDE0MC40MDQgMTMxMC44NCAxNDQuMDM5IDEzMTIuMDggMTQ3LjQ2OEMxMzEzLjMxIDE1MC43NiAxMzE1LjAz''@;'; put 'put ''IDE1My42NDEgMTMxNy4yMiAxNTYuMTA5QzEzMTkuNDIgMTU4LjU3OCAxMzIyLjAyIDE2MC41NjcgMTMyNS4wNCAxNjIuMDc2QzEzMjguMDYgMTYzLjQ0OCAxMzMxLjM1IDE2NC4xMzQgMTMzNC45MSAxNjQuMTM0QzEzMzguNDggMTY0LjEzNCAxMzQxLjc3IDE2My40NDggMTM0NC43OSAxNjIu''@;'; put 'put ''MDc2QzEzNDcuOTUgMTYwLjU2NyAxMzUwLjYyIDE1OC41NzggMTM1Mi44MSAxNTYuMTA5QzEzNTUuMDEgMTUzLjY0MSAxMzU2LjcyIDE1MC43NiAxMzU3Ljk2IDE0Ny40NjhDMTM1OS4xOSAxNDQuMDM5IDEzNTkuODEgMTQwLjQwNCAxMzU5LjgxIDEzNi41NjRDMTM1OS44MSAxMzIuNzIzIDEz''@;'; put 'put ''NTkuMTkgMTI5LjE1NyAxMzU3Ljk2IDEyNS44NjVDMTM1Ni43MiAxMjIuNDM2IDEzNTUuMDEgMTE5LjQ4NyAxMzUyLjgxIDExNy4wMThDMTM1MC42MiAxMTQuNTQ5IDEzNDcuOTUgMTEyLjYyOSAxMzQ0Ljc5IDExMS4yNTdDMTM0MS43NyAxMDkuNzQ4IDEzMzguNDggMTA4Ljk5NCAxMzM0Ljkx''@;'; put 'put ''IDEwOC45OTRDMTMzMS4zNSAxMDguOTk0IDEzMjguMDYgMTA5Ljc0OCAxMzI1LjA0IDExMS4yNTdDMTMyMi4wMiAxMTIuNjI5IDEzMTkuNDIgMTE0LjU0OSAxMzE3LjIyIDExNy4wMThDMTMxNS4wMyAxMTkuNDg3IDEzMTMuMzEgMTIyLjQzNiAxMzEyLjA4IDEyNS44NjVDMTMxMC44NCAxMjku''@;'; put 'put ''MTU3IDEzMTAuMjMgMTMyLjcyMyAxMzEwLjIzIDEzNi41NjRaTTE0MDguMjEgMzcuMzk0NEMxNDA4LjIxIDM2LjI5NyAxNDA4LjU1IDM1LjQwNTUgMTQwOS4yNCAzNC43MTk3QzE0MTAuMDYgMzQuMDMzOCAxNDExLjAyIDMzLjY5MDkgMTQxMi4xMiAzMy42OTA5SDE0MjguMTZDMTQyOS4yNiAz''@;'; put 'put ''My42OTA5IDE0MzAuMTUgMzQuMDMzOCAxNDMwLjg0IDM0LjcxOTdDMTQzMS42NiAzNS40MDU1IDE0MzIuMDcgMzYuMjk3IDE0MzIuMDcgMzcuMzk0NFYxODQuMDkxQzE0MzIuMDcgMTg2LjY5NyAxNDMwLjc3IDE4OCAxNDI4LjE2IDE4OEgxNDEyLjEyQzE0MTEuMDIgMTg4IDE0MTAuMDYgMTg3''@;'; put 'put ''LjY1NyAxNDA5LjI0IDE4Ni45NzFDMTQwOC41NSAxODYuMTQ4IDE0MDguMjEgMTg1LjE4OCAxNDA4LjIxIDE4NC4wOTFWMzcuMzk0NFpNMTQ2MyAzNy4zOTQ0QzE0NjMgMzYuMjk3IDE0NjMuMzUgMzUuNDA1NSAxNDY0LjAzIDM0LjcxOTdDMTQ2NC44NSAzNC4wMzM4IDE0NjUuODEgMzMuNjkw''@;'; put 'put ''OSAxNDY2LjkxIDMzLjY5MDlIMTQ4Mi45NkMxNDg0LjA2IDMzLjY5MDkgMTQ4NC45NSAzNC4wMzM4IDE0ODUuNjMgMzQuNzE5N0MxNDg2LjQ2IDM1LjQwNTUgMTQ4Ni44NyAzNi4yOTcgMTQ4Ni44NyAzNy4zOTQ0VjE4NC4wOTFDMTQ4Ni44NyAxODYuNjk3IDE0ODUuNTcgMTg4IDE0ODIuOTYg''@;'; put 'put ''MTg4SDE0NjYuOTFDMTQ2NS44MSAxODggMTQ2NC44NSAxODcuNjU3IDE0NjQuMDMgMTg2Ljk3MUMxNDYzLjM1IDE4Ni4xNDggMTQ2MyAxODUuMTg4IDE0NjMgMTg0LjA5MVYzNy4zOTQ0Wk0xNTM3Ljc2IDE0OC4wODVDMTUzOS42OCAxNTIuODg2IDE1NDIuNTYgMTU2Ljc5NSAxNTQ2LjQgMTU5''@;'; put 'put ''LjgxM0MxNTUwLjM3IDE2Mi44MyAxNTU0LjkgMTY0LjMzOSAxNTU5Ljk4IDE2NC4zMzlDMTU2My42OCAxNjQuMzM5IDE1NjcuMjUgMTYzLjcyMiAxNTcwLjY3IDE2Mi40ODhDMTU3NC4xIDE2MS4yNTMgMTU3Ni45OCAxNTkuNTM5IDE1NzkuMzIgMTU3LjM0NEMxNTgwLjE0IDE1Ni42NTggMTU4''@;'; put 'put ''MS4wMyAxNTYuMzg0IDE1ODEuOTkgMTU2LjUyMUMxNTgzLjA5IDE1Ni41MjEgMTU4My45OCAxNTYuODY0IDE1ODQuNjcgMTU3LjU1TDE1OTYuMzkgMTY4LjY2QzE1OTcuMDggMTY5LjM0NiAxNTk3LjQyIDE3MC4yMzcgMTU5Ny40MiAxNzEuMzM1QzE1OTcuNDIgMTcyLjI5NSAxNTk3LjA4IDE3''@;'; put 'put ''My4xMTggMTU5Ni4zOSAxNzMuODA0QzE1OTEuODcgMTc4LjYwNCAxNTg2LjUyIDE4Mi4yMzkgMTU4MC4zNCAxODQuNzA4QzE1NzQuMTcgMTg3LjE3NyAxNTY3LjM4IDE4OC40MTEgMTU1OS45OCAxODguNDExQzE1NTMuMTIgMTg4LjQxMSAxNTQ2Ljc0IDE4Ny4xNzcgMTU0MC44NCAxODQuNzA4''@;'; put 'put ''QzE1MzUuMDggMTgyLjIzOSAxNTMwLjAxIDE3OC43NDEgMTUyNS42MiAxNzQuMjE1QzE1MjAuODIgMTY5LjQxNCAxNTE3LjExIDE2My43MjIgMTUxNC41MSAxNTcuMTM4QzE1MTEuOSAxNTAuNTU0IDE1MTAuNiAxNDMuNTU5IDE1MTAuNiAxMzYuMTUyQzE1MTAuNiAxMjkuMDIgMTUxMS45IDEy''@;'; put 'put ''Mi4zNjcgMTUxNC41MSAxMTYuMTk1QzE1MTcuMTEgMTA5Ljg4NSAxNTIwLjYxIDEwNC4zOTkgMTUyNSA5OS43MzUyQzE1MjkuNTMgOTUuMDcxNyAxNTM0LjgxIDkxLjQzNjggMTU0MC44NCA4OC44MzA3QzE1NDYuODggODYuMDg3NCAxNTUzLjMyIDg0LjcxNTggMTU2MC4xOCA4NC43MTU4QzE1''@;'; put 'put ''NjYuNDkgODQuNzE1OCAxNTcyLjMyIDg1Ljg4MTcgMTU3Ny42NyA4OC4yMTM1QzE1ODMuMTYgOTAuNTQ1MyAxNTg3Ljk2IDkzLjc2ODYgMTU5Mi4wNyA5Ny44ODM1QzE1OTMuODYgOTkuNTI5NSAxNTk1LjU3IDEwMS40NSAxNTk3LjIyIDEwMy42NDRDMTU5OC44NiAxMDUuODM5IDE2MDAuMyAx''@;'; put 'put ''MDguMzc3IDE2MDEuNTQgMTExLjI1N0MxNjAyLjc3IDExNC4xMzcgMTYwMy43MyAxMTcuNDk4IDE2MDQuNDIgMTIxLjMzOEMxNjA1LjI0IDEyNS4wNDIgMTYwNS42NSAxMjkuMjk0IDE2MDUuNjUgMTM0LjA5NUMxNjA1LjY1IDEzNy4zODcgMTYwNS40NSAxNDAuOTUzIDE2MDUuMDMgMTQ0Ljc5''@;'; put 'put ''M0MxNjA0Ljc2IDE0Ni45ODggMTYwMy41MyAxNDguMDg1IDE2MDEuMzMgMTQ4LjA4NUgxNTM3Ljc2Wk0xNTU5LjU2IDEwOC43ODhDMTU1My44IDEwOC43ODggMTU0OS4wNyAxMTAuMzY1IDE1NDUuMzcgMTEzLjUyQzE1NDEuNjYgMTE2LjY3NSAxNTM5LjA2IDEyMC41ODQgMTUzNy41NSAxMjUu''@;'; put 'put ''MjQ4SDE1ODAuNzZDMTU3OS4yNSAxMjAuODU4IDE1NzYuNzEgMTE3LjAxOCAxNTczLjE0IDExMy43MjZDMTU2OS43MSAxMTAuNDM0IDE1NjUuMTkgMTA4Ljc4OCAxNTU5LjU2IDEwOC43ODhaTTE2ODguNTEgMTA4LjE3MUMxNjg4LjEgMTA5LjI2OCAxNjg3LjQxIDExMC4wMjIgMTY4Ni40NSAx''@;'; put 'put ''MTAuNDM0QzE2ODUuNDkgMTEwLjg0NSAxNjg0LjQ2IDExMC43NzcgMTY4My4zNyAxMTAuMjI4QzE2ODIuMjcgMTA5LjY4IDE2ODAuOSAxMDkuMiAxNjc5LjI1IDEwOC43ODhDMTY3Ny43NCAxMDguMzc3IDE2NzYuMSAxMDguMTcxIDE2NzQuMzEgMTA4LjE3MUMxNjcxLjI5IDEwOC4xNzEgMTY2''@;'; put 'put ''OC40MSAxMDguNzg4IDE2NjUuNjcgMTEwLjAyMkMxNjYyLjkzIDExMS4yNTcgMTY2MC40NiAxMTIuOTcyIDE2NTguMjYgMTE1LjE2NkMxNjU2LjIxIDExNy4yMjQgMTY1NC41NiAxMTkuNjkzIDE2NTMuMzMgMTIyLjU3M0MxNjUyLjA5IDEyNS4zMTYgMTY1MS40NyAxMjguMTk3IDE2NTEuNDcg''@;'; put 'put ''MTMxLjIxNEwxNjUxLjA2IDE4NC4wOTFDMTY1MS4wNiAxODUuMTg4IDE2NTAuNzIgMTg2LjE0OCAxNjUwLjAzIDE4Ni45NzFDMTY0OS4zNSAxODcuNjU3IDE2NDguNDYgMTg4IDE2NDcuMzYgMTg4SDE2MzEuMTFDMTYzMC4wMSAxODggMTYyOS4wNSAxODcuNjU3IDE2MjguMjMgMTg2Ljk3MUMx''@;'; put 'put ''NjI3LjU0IDE4Ni4xNDggMTYyNy4yIDE4NS4xODggMTYyNy4yIDE4NC4wOTFWODkuMDM2NUMxNjI3LjIgODcuOTM5MSAxNjI3LjU0IDg3LjA0NzYgMTYyOC4yMyA4Ni4zNjE4QzE2MjkuMDUgODUuNTM4OCAxNjMwLjAxIDg1LjEyNzMgMTYzMS4xMSA4NS4xMjczSDE2NDcuMzZDMTY0OC40NiA4''@;'; put 'put ''NS4xMjczIDE2NDkuMzUgODUuNTM4OCAxNjUwLjAzIDg2LjM2MThDMTY1MC43MiA4Ny4wNDc2IDE2NTEuMDYgODcuOTM5MSAxNjUxLjA2IDg5LjAzNjVWOTQuNTkxNkMxNjU1LjA0IDkxLjcxMTEgMTY1OS4yOSA4OS4zNzk0IDE2NjMuODIgODcuNTk2MkMxNjY4LjM1IDg1LjY3NTkgMTY3My4y''@;'; put 'put ''MiA4NC43MTU4IDE2NzguNDMgODQuNzE1OEMxNjgzLjc4IDg0LjcxNTggMTY4OC40NCA4NS43NDQ1IDE2OTIuNDIgODcuODAyQzE2OTQuMzQgODkuMDM2NSAxNjk0Ljk2IDkwLjYxMzggMTY5NC4yNyA5Mi41MzQxTDE2ODguNTEgMTA4LjE3MVoiIGZpbGw9IiM4RUM2M0YiLz4KPC9nPgo8ZGVm''@;'; put 'put ''cz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMDVfNyI+CjxyZWN0IHdpZHRoPSIxNjg5IiBoZWlnaHQ9IjI0MCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=dc-logo-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB3aWR0aD0iNzAiIGhlaWdodD0iNzAiIHZpZXdCb3g9IjAgMCA3MCA3MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEwMV84KSI+CjxwYXRoIGQ9Ik0zNy41OTkzIDE2LjYyMTJDMzguNTkxNiAx''@;'; put 'put ''Ni43NDE1IDM5LjU1MzggMTYuODMxNyA0MC41NDYxIDE2Ljk1MTlDNDIuOTIxNiAxNy4yODI3IDQ1LjIzNyAxNy43MzM3IDQ3LjQwMiAxOC44NDYzQzQ4LjAzMzQgMTkuMTc3MSA0OC42MzQ4IDE5LjUzNzkgNDkuMDg1OSAyMC4xMDkyQzQ5LjgwNzUgMjAuOTUxMiA0OS43Nzc0IDIxLjg1MzMg''@;'; put 'put ''NDkuMDU1OCAyMi42OTUyQzQ4LjMwNCAyMy41MzcxIDQ3LjM0MTggMjQuMDE4MyA0Ni4zMTk1IDI0LjQwOTJDNDMuOTQ0IDI1LjM0MTMgNDEuNDQ4MiAyNS43NjIzIDM4LjkyMjQgMjUuOTcyOEMzNC44MDI5IDI2LjMwMzUgMzAuNzQzNSAyNi4xNTMyIDI2LjcxNDIgMjUuMTkxQzI1LjM5MTEg''@;'; put 'put ''MjQuODkwMyAyNC4wOTgxIDI0LjQ2OTMgMjIuOTI1NCAyMy44MDc4QzIyLjQ3NDQgMjMuNTY3MiAyMi4wNTM0IDIzLjI2NjUgMjEuNjYyNSAyMi45MDU3QzIwLjU4IDIxLjg1MzMgMjAuNTggMjAuNzQwNyAyMS42OTI2IDE5Ljc0ODRDMjIuODk1NCAxOC42NjU5IDI0LjM2ODggMTguMTU0NyAy''@;'; put 'put ''NS44NzIyIDE3LjczMzdDMjcuOTc3MSAxNy4xMzI0IDMwLjExMiAxNi44MzE3IDMyLjI3NyAxNi42ODEzQzMyLjQ1NzUgMTYuNjgxMyAzMi42Njc5IDE2Ljc0MTUgMzIuODE4MyAxNi41OTExQzM0LjM4MTkgMTYuNjIxMiAzNi4wMDU2IDE2LjYyMTIgMzcuNTk5MyAxNi42MjEyWiIgZmlsbD0i''@;'; put 'put ''I0UwRTBFMCIvPgo8cGF0aCBkPSJNMjAuODUwNyA0MS4zMDgyQzIyLjc3NTEgNDMuNzczOCAyNS41MTE1IDQ0LjY3NTkgMjguMzM4IDQ1LjI3NzNDMzMuOTMwOSA0Ni40ODAxIDM5LjUyMzggNDYuMzI5NyA0NC45NjYzIDQ0LjQwNTNDNDYuNjUwMiA0My44MDM5IDQ4LjIxMzggNDIuOTkyIDQ5''@;'; put 'put ''LjMyNjQgNDEuNDg4NkM0OS41MDY4IDQxLjI0OCA0OS41OTcgNDEuMzY4MyA0OS42ODcyIDQxLjU0ODdDNDkuODY3NyA0MS45Mzk2IDQ5Ljk1NzkgNDIuMzMwNSA0OS45NTc5IDQyLjc1MTVDNDkuOTU3OSA0NC4yMjQ5IDQ5Ljk1NzkgNDUuNzI4NCA0OS45NTc5IDQ3LjIwMThDNDkuOTU3OSA0''@;'; put 'put ''OC4xNjQgNDkuNTA2OCA0OC45MTU3IDQ4Ljg0NTMgNDkuNTc3MkM0Ny40NjIxIDUwLjk2MDQgNDUuNzE4MSA1MS43MTIyIDQzLjg4MzggNTIuMjgzNUM0MC4xODUzIDUzLjQyNjEgMzYuMzk2NiA1My42NjY3IDMyLjU3NzcgNTMuMzk2MUMyOS43MjEyIDUzLjE4NTYgMjYuOTU0OCA1Mi42NDQz''@;'; put 'put ''IDI0LjMzODcgNTEuNDcxNkMyMy4yMjYxIDUwLjk2MDQgMjIuMjAzOCA1MC4zNTkxIDIxLjM5MTkgNDkuNDI2OUMyMC43NjA1IDQ4LjcwNTIgMjAuNDI5NyA0Ny44OTM0IDIwLjQyOTcgNDYuOTMxMUMyMC40NTk4IDQ1LjU3OCAyMC40Mjk3IDQ0LjIyNDkgMjAuNDI5NyA0Mi44NzE4QzIwLjQy''@;'; put 'put ''OTcgNDIuMzMwNSAyMC41MTk5IDQxLjgxOTMgMjAuODUwNyA0MS4zMDgyWiIgZmlsbD0iIzhFQzYzRiIvPgo8cGF0aCBkPSJNMjAuODgwNyAzMi4wMTY3QzIyLjQ3NDQgMzQuMTUxNiAyNC42OTk2IDM1LjA1MzcgMjcuMDc1IDM1LjY4NTJDMzIuNzU4MiAzNy4xODg2IDM4LjQ0MTMgMzcuMTU4''@;'; put 'put ''NiA0NC4wNjQzIDM1LjQ3NDdDNDUuOTI4NiAzNC45MzM0IDQ3LjY3MjYgMzQuMTIxNiA0OS4wMjU4IDMyLjY0ODJDNDkuMjA2MiAzMi40Njc3IDQ5LjMyNjUgMzIuMDQ2OCA0OS41MzY5IDMyLjEwNjlDNDkuODM3NiAzMi4xOTcxIDQ5LjgzNzYgMzIuNjE4MSA0OS45Mjc4IDMyLjk0ODhDNTAu''@;'; put 'put ''MDQ4MSAzMy40NiA0OS45ODggMzMuOTcxMiA0OS45ODggMzQuNDgyNEM0OS45ODggMzUuNTA0NyA0OS45NTc5IDM2LjQ5NyA0OS45ODggMzcuNTE5NEM1MC4wNDgxIDM4Ljc4MjMgNDkuNTM2OSAzOS43NzQ2IDQ4LjYwNDggNDAuNTg2NUM0Ny4xOTE1IDQxLjg0OTQgNDUuNDc3NiA0Mi42MDEx''@;'; put 'put ''IDQzLjY0MzMgNDMuMDgyMkMzNy40NzkxIDQ0LjczNjEgMzEuMzQ0OSA0NC43MDYgMjUuMzAwOSA0Mi42MDExQzIzLjgyNzUgNDIuMDkgMjIuNDc0NCA0MS4zNjgzIDIxLjM5MTkgNDAuMTk1NkMyMC43MzA0IDM5LjQ3MzkgMjAuMzk5NyAzOC42MzIgMjAuMzk5NyAzNy42Mzk3QzIwLjQyOTcg''@;'; put 'put ''MzYuMzE2NiAyMC4zOTk3IDM0Ljk2MzUgMjAuMzk5NyAzMy42NDA0QzIwLjQyOTcgMzMuMDk5MiAyMC41MTk5IDMyLjU1NzkgMjAuODgwNyAzMi4wMTY3WiIgZmlsbD0iI0UwRTBFMCIvPgo8cGF0aCBkPSJNMjAuODIwNyAyMy4wODYxQzIxLjI3MTcgMjQuNDA5MSAyMi4zNTQyIDI1LjAxMDUg''@;'; put 'put ''MjMuNDk2OSAyNS41NTE3QzI1LjU0MTYgMjYuNTE0IDI3LjczNjYgMjYuOTY1IDI5LjkzMTcgMjcuMjM1N0MzNC4yOTE4IDI3Ljc3NjkgMzguNjUxOSAyNy43MTY4IDQyLjk1MTggMjYuODE0N0M0NC42OTU4IDI2LjQ1MzkgNDYuMzc5NyAyNS45NzI3IDQ3LjkxMzIgMjUuMDEwNUM0OC43ODUz''@;'; put 'put ''IDI0LjQ2OTMgNDkuMjM2MyAyMy45NTgxIDQ5LjUzNyAyMy4xMTYxQzQ5LjgzNzcgMjMuNTM3MSA0OS45Mjc5IDIzLjk4ODIgNDkuOTI3OSAyNC40MzkyQzQ5LjkyNzkgMjUuOTQyNyA0OS45NTggMjcuNDE2MSA0OS45Mjc5IDI4LjkxOTVDNDkuODk3OCAzMC4xODI1IDQ5LjE3NjIgMzEuMDg0''@;'; put 'put ''NSA0OC4yNDQgMzEuODM2M0M0Ni41IDMzLjIxOTUgNDQuNDU1MyAzMy45NDExIDQyLjMyMDMgMzQuNDIyM0MzNi42NjczIDM1LjY1NTEgMzEuMDc0NCAzNS41NjQ5IDI1LjU3MTcgMzMuNzAwNkMyNC4xMjgzIDMzLjIxOTUgMjIuNzQ1MSAzMi41Mjc5IDIxLjYzMjYgMzEuNDQ1NEMyMC43OTA2''@;'; put 'put ''IDMwLjYzMzUgMjAuMzM5NiAyOS43MDE0IDIwLjM2OTYgMjguNDk4NkMyMC4zOTk3IDI3LjIwNTYgMjAuMzY5NiAyNS45MTI2IDIwLjM2OTYgMjQuNjE5NkMyMC40Mjk4IDI0LjA0ODMgMjAuNTIgMjMuNTY3MiAyMC44MjA3IDIzLjA4NjFaIiBmaWxsPSIjOEVDNjNGIi8+CjxwYXRoIGQ9Ik01''@;'; put 'put ''NS4zNDAzIDYzLjQzOTNDNjAuMjQxNyA2My43MDk5IDYyLjg1NzcgNTcuNjk2IDU5LjMwOTUgNTQuMjk4MUM1NS41ODA5IDUwLjcxOTkgNDkuNDQ2NyA1NC4wNTc2IDUwLjQwOSA1OS4xMDkzQzI4LjI0NzggNzMuMjQxOSAtMC4yNTgwMzQgNTIuMTAzMSA3Ljg2MDcxIDI2LjQyMzhMMi4zODgw''@;'; put 'put ''OCAyMi43NTUzQy05LjkxMDMzIDU1LjQ0MDggMjcuOTQ3MSA4My4wNzQ2IDU1LjM0MDMgNjMuNDM5M1pNNTMuNzc2NyA1Ni4zNzI5QzU2LjA2MiA1My45OTc0IDU5LjcwMDQgNTcuMzA1MSA1Ny41NjU1IDU5LjgwMDlDNTUuMzEwMyA2Mi40MTY5IDUxLjM0MTEgNTguODk4OCA1My43NzY3IDU2''@;'; put 'put ''LjM3MjlaIiBmaWxsPSIjRTBFMEUwIi8+CjxwYXRoIGQ9Ik0xMC42MjcyIDE1LjI2ODFDMTQuMTQ1MyAxOC42MzU4IDE5Ljk0ODcgMTUuODY5NCAxOS42MTc5IDExLjA1ODNDNDEuNzQ5IC0zLjE5NDYxIDcwLjQwNTIgMTcuOTE0MiA2Mi4yODY1IDQzLjY4MzZMNjcuNzU5MSA0Ny4zNTIxQzc5''@;'; put 'put ''LjY5NjcgMTUuNTk4OCA0My40NjMgLTEyLjk5NzIgMTUuNDM4MyA2LjIxNzE1QzEwLjE3NjEgNS4xMzQ2NSA2Ljc3ODI3IDExLjU2OTUgMTAuNjI3MiAxNS4yNjgxWk0xNi4xNTk5IDEzLjE5MzNDMTMuODE0NSAxNS42Mjg5IDEwLjExNiAxMi4wODA3IDEyLjQ2MTQgOS42NDUwN0MxNC44MDY4''@;'; put 'put ''IDcuMjA5NDQgMTguNTA1NCAxMC43NTc2IDE2LjE1OTkgMTMuMTkzM1oiIGZpbGw9IiM4RUM2M0YiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMDFfOCI+CjxyZWN0IHdpZHRoPSI3MCIgaGVpZ2h0PSI3MCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8''@;'; put 'put ''L3N2Zz4K'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=favicon-ico; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''iVBORw0KGgoAAAANSUhEUgAAApgAAAJ6CAYAAACMvTJAAAAMFGlDQ1BJQ0MgUHJvZmlsZQAASImVVwdUk8kWnr+kEBJaIAJSQm+CFOnSe0c62AhJgFAiJAQVO7Ko4FpQEQFR0RUQRdcCyKIidmUR7P1hQWVlXSzYUHmTArq+dt49Z/75cufeO9+d3JkzA4CiNSsnJwtVAiCbnyeICvBmJiQmMUmP''@;'; put 'put ''AAY0AB0YAiUWW5jjFRkZCqCM9X+XdzcAIu6vWopj/ev4fxVlDlfIBgCJhDiFI2RnQ3wYAFydnSPIA4DQBfUGc/NyxHgIYlUBJAgAERfjNClWF+MUKZ4ksYmJ8oHYEwAylcUSpAGgIObNzGenwTgKYo7WfA6PD3E1xO7sdBYH4nsQT8rOngOxIhli05Tv4qT9LWbKeEwWK20cS3ORCNmXJ8zJYs3/''@;'; put 'put ''P5fjf0t2lmhsDn3YqOmCwChxznDd6jPnhIgxFeJ2fkp4BMQqEJ/ncST2YnwnXRQYK7MfZAt94JoBBgAo4LB8QyDWgpghyoz1kmFblkDiC+3RcF5eUIwMpwjmRMnio/n8rPBQWZyV6dygMVzDFfpFj9mk8vyDIIaVhh4uSI+Jl/JET+fz4sIhVoC4R5gZHSLzfVCQ7hM+ZiMQRYk5G0L8NlXgHyW1''@;'; put 'put ''wdSzhWN5YVZslmQuWAuYZ156TKDUF0vgChNCxzhwuL5+Ug4Yh8uPlXHDYHV5R8l8i3OyImX2WA03KyBKus7YAWF+9JjvlTxYYNJ1wB5lsIIjZXO9y8mLjJFyw1EQCnyAL2ACEWwpYA7IALzuwZZB+Es64g9YQADSABdYyjRjHvGSET78RoMC8CdEXCAc9/OWjHJBPtR/GddKv5YgVTKaL/HIBE8h''@;'; put 'put ''zsY1cXfcFQ+FX0/YbHEn3HnMj6k4NivRj+hLDCT6E83GebAh6yzYBID3b3QhsOfC7MRc+GM5fItHeEroJTwiXCf0EW6DOPBEEkVmNZtXKPiBOROEgT4YzV+WXcr32eHGkLU97o27Qf6QO87ANYElPgVm4oV7wNzsofZ7hqJxbt/W8sf5xKy/z0emVzBXsJexSBn/Z3zGrX6M4vPdGnFgH/KjJbYS''@;'; put 'put ''O4Sdw05iF7B2rAUwsRNYK9aFHRPj8Up4IqmEsdmiJNwyYRzemI11o/WA9ecf5mbJ5hevlzCPOy9PvBl85uTMF/DS0vOYXvA05jKD+GyrSUxbaxsnAMRnu/ToeMOQnNkI4+I3XW4HAM4lUJn2TccyAODoUwDo777pDF7Dcl8HwLEetkiQL9WJj2NAABSgCHeFBtABBsAU5mMLHIAr8AR+IBhEgBiQ''@;'; put 'put ''CGbBFU8H2ZDzXLAQLAPFoBSsA5tAJdgGdoJ6sA8cBC2gHZwEZ8El0AOug7uwLvrBCzAE3oERBEFICA2hIxqILmKEWCC2iBPijvghoUgUkogkI2kIHxEhC5HlSClShlQiO5AG5FfkKHISuYD0IreRh8gA8hr5hGIoFVVFtVFjdDLqhHqhIWgMOhNNQ3PRArQIXYNWoLXoXrQZPYleQq+jfegLdBgD''@;'; put 'put ''mDzGwPQwS8wJ88EisCQsFRNgi7ESrByrxZqwNvg/X8X6sEHsI07E6TgTt4S1GYjH4mw8F1+Mr8Yr8Xq8GT+NX8Uf4kP4VwKNoEWwILgQgggJhDTCXEIxoZywm3CEcAbum37COyKRyCCaEB3hvkwkZhAXEFcTtxL3EzuIvcTHxGESiaRBsiC5kSJILFIeqZi0hbSXdIJ0hdRP+kCWJ+uSbcn+5CQy''@;'; put 'put ''n1xILifvIR8nXyE/I4/IKckZybnIRchx5ObLrZXbJdcmd1muX26EokwxobhRYigZlGWUCkoT5QzlHuWNvLy8vryz/DR5nvxS+Qr5A/Ln5R/Kf6SqUM2pPtQZVBF1DbWO2kG9TX1Do9GMaZ60JFoebQ2tgXaK9oD2QYGuYKUQpMBRWKJQpdCscEXhpaKcopGil+IsxQLFcsVDipcVB5XklIyVfJRY''@;'; put 'put ''SouVqpSOKt1UGlamK9soRyhnK69W3qN8Qfm5CknFWMVPhaNSpLJT5ZTKYzpGN6D70Nn05fRd9DP0flWiqolqkGqGaqnqPtVu1SE1FbUpanFq89Sq1I6p9TEwhjEjiJHFWMs4yLjB+DRBe4LXBO6EVROaJlyZ8F59orqnOle9RH2/+nX1TxpMDT+NTI31Gi0a9zVxTXPNaZpzNWs0z2gOTlSd6DqR''@;'; put 'put ''PbFk4sGJd7RQLXOtKK0FWju1urSGtXW0A7RztLdon9Ie1GHoeOpk6GzUOa4zoEvXddfl6W7UPaH7B1ON6cXMYlYwTzOH9LT0AvVEejv0uvVG9E30Y/UL9ffr3zegGDgZpBpsNOg0GDLUNQwzXGjYaHjHSM7IySjdaLPROaP3xibG8cYrjFuMn5uomwSZFJg0mtwzpZl6mOaa1ppeMyOaOZllmm01''@;'; put 'put ''6zFHze3N082rzC9boBYOFjyLrRa9kwiTnCfxJ9VOumlJtfSyzLdstHxoxbAKtSq0arF6OdlwctLk9ZPPTf5qbW+dZb3L+q6Nik2wTaFNm81rW3Nbtm2V7TU7mp2/3RK7VrtXUyymcKfUTLllT7cPs19h32n/xcHRQeDQ5DDgaOiY7FjteNNJ1SnSabXTeWeCs7fzEud2548uDi55Lgdd/nK1dM10''@;'; put 'put ''3eP6fKrJVO7UXVMfu+m7sdx2uPW5M92T3be793noebA8aj0eeRp4cjx3ez7zMvPK8Nrr9dLb2lvgfcT7vY+LzyKfDl/MN8C3xLfbT8Uv1q/S74G/vn+af6P/UIB9wIKAjkBCYEjg+sCbQdpB7KCGoKFgx+BFwadDqCHRIZUhj0LNQwWhbWFoWHDYhrB74Ubh/PCWCBARFLEh4n6kSWRu5G/TiNMi''@;'; put 'put ''p1VNexplE7Uw6lw0PXp29J7odzHeMWtj7saaxopiO+MU42bENcS9j/eNL4vvS5icsCjhUqJmIi+xNYmUFJe0O2l4ut/0TdP7Z9jPKJ5xY6bJzHkzL8zSnJU169hsxdms2YeSCcnxyXuSP7MiWLWs4ZSglOqUIbYPezP7BceTs5EzwHXjlnGfpbqllqU+T3NL25A2kO6RXp4+yPPhVfJeZQRmbMt4''@;'; put 'put ''nxmRWZc5mhWftT+bnJ2cfZSvws/kn56jM2fenN4ci5zinL5cl9xNuUOCEMFuISKcKWzNU4XXnC6Rqegn0cN89/yq/A9z4+Yemqc8jz+va775/FXznxX4F/yyAF/AXtC5UG/hsoUPF3kt2rEYWZyyuHOJwZKiJf1LA5bWL6Msy1z2e6F1YVnh2+Xxy9uKtIuWFj3+KeCnxmKFYkHxzRWuK7atxFfy''@;'; put 'put ''Vnavslu1ZdXXEk7JxVLr0vLSz6vZqy/+bPNzxc+ja1LXdK91WFuzjriOv+7Geo/19WXKZQVljzeEbWjeyNxYsvHtptmbLpRPKd+2mbJZtLmvIrSidYvhlnVbPlemV16v8q7aX61Vvar6/VbO1is1njVN27S3lW77tJ23/daOgB3Ntca15TuJO/N3Pt0Vt+vcL06/NOzW3F26+0sdv66vPqr+dINj''@;'; put 'put ''Q8MerT1rG9FGUePA3hl7e/b57mttsmzasZ+xv/QAOCA68Mevyb/eOBhysPOQ06Gmw0aHq4/Qj5Q0I83zm4da0lv6WhNbe48GH+1sc2078pvVb3Xteu1Vx9SOrT1OOV50fPREwYnhjpyOwZNpJx93zu68eyrh1LXT0053nwk5c/6s/9lT57zOnTjvdr79gsuFoxedLrZccrjU3GXfdeR3+9+PdDt0''@;'; put 'put ''N192vNza49zT1ju19/gVjysnr/pePXst6Nql6+HXe2/E3rh1c8bNvlucW89vZ91+dSf/zsjdpfcI90ruK90vf6D1oPYfZv/Y3+fQd+yh78OuR9GP7j5mP37xRPjkc3/RU9rT8me6zxqe2z5vH/Af6Plj+h/9L3JejAwW/6n8Z/VL05eH//L8q2soYaj/leDV6OvVbzTe1L2d8rZzOHL4wbvsdyPv''@;'; put 'put ''Sz5ofKj/6PTx3Kf4T89G5n4mfa74Yval7WvI13uj2aOjOSwBS3IVwGBDU1MBeF0HAC0R3h16AKAoSN9eEkGk70UJAv8JS99nEnEAoM4TgNilAITCO0oNbEYQU2EvvnrHeALUzm68yUSYamcrjUWFLxjCh9HRN9oAkNoA+CIYHR3ZOjr6ZRckexuAjlzpm08sRHi/324mRt2XRobAD/JPCotuA2JA''@;'; put 'put ''n4YAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAGdaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8y''@;'; put 'put ''Mi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjY2NDwvZXhpZjpQaXhlbFhEaW1lbnNp''@;'; put 'put ''b24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj42MzQ8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KSHKtHgAAABxpRE9UAAAAAgAAAAAAAAE9AAAAKAAAAT0AAAE9AACKlRxL/UIAAEAASURB''@;'; put 'put ''VHgB7L0HgNxmeqb5FVChIzuRTTZzzlESRUVSFCUqzIwmjyZnx71zWO96b89h7b31ede+27O9DjOe8eSo0USlURxpGESKYhBzzqFJdrNzqADg3g/FoppUk6zuQlWjUC+kZmXgx/OjUC++GFq25v2OcCEBEiABEiABEiABEiABjwiEKDA9IsnVkAAJkAAJkAAJkAAJuAQoMHkgkAAJkAAJkAAJkAAJ''@;'; put 'put ''eEqAAtNTnFwZCZAACZAACZAACZAABSaPARIgARIgARIgARIgAU8JUGB6ipMrIwESIAESIAESIAESoMDkMUACJEACJEACJEACJOApAQpMT3FyZSRAAiRAAiRAAiRAAhSYPAZIgARIgARIgARIgAQ8JUCB6SlOrowESIAESIAESIAESIACk8cACZAACZAACZAACZCApwQoMD3FyZWRAAmQAAmQAAmQ''@;'; put 'put ''AAlQYPIYIAESIAESIAESIAES8JQABaanOLkyEiABEiABEiABEiABCkweAyRAAiRAAiRAAiRAAp4SoMD0FCdXRgIkQAIkQAIkQAIkQIHJY4AESIAESIAESIAESMBTAhSYnuLkykiABEiABEiABEiABCgweQyQAAmQAAmQAAmQAAl4SoAC01OcXBkJkAAJkAAJkAAJkAAFJo8BEiABEiABEiABEiAB''@;'; put 'put ''TwlQYHqKkysjARIgARIgARIgARKgwOQxQAIkQAIkQAIkQAIk4CkBCkxPcXJlJEACJEACJEACJEACFJg8BkiABAJBwHEcMc2QmGFbwtGQhCM27ockEnMkHBOJRHGL52OVtlRW2VJW5UhZpT7W53G/PCTRCkdC+O+GC162EiL9vY4k4yGJ9+OvRx+HpKcTt90hSeA5Ky6SSuI+3qvvTyUMsZL4DJ6z''@;'; put 'put ''UrqFm2znhoPgiyRAAiTgbwIUmP6eH46OBEgAOiwCsRgpE4mVO64grKjCfQjDimo8rtDnRaJ4LVrmuILSjAhEo4hpiBhh/BkG/iDp8E9IHLHtNFbbdtw70KaiAhUvZbdgTFgdVog7+r/7l34yvQUR27Lxh1tszMF2kokQBCfEJv5SEKb9EKAJiNI4/vp7DOntdiBUcb/r8nN9+j5DUimIXt0AFxIg''@;'; put 'put ''ARIoIgIUmEU0WRwqCQSVQCjkSLlaFGFBrKh1ZFSDI1U16fsV+jwEZQRWyDCskZGwIWYEMi6juSAKIeH0H1ckqk7URUXdFb145U76tYL9e3mMeuPeNdJPGHqL/43LAlXHo0N0LAeC0oYYtcVSyyj+etU62mVId4dIT7uBPzwHS2lPZ0iSeN1x0uvUdXAhARIgAb8QoMD0y0xwHCQQeAJqXRRYHW2p''@;'; put 'put ''qheprrelpt6RStxW1YorLqNwU0diEJBwdeuiVkUHwtG1NEIwXjY8ptVYUHmltSesrek7KkYzQlRFqA2LZjKekr5uQ/p6HAhPU7pbRbouhaSzNS1A1U2fhBv+pu7+oDLkfpEACYw4AQrMEZ8CDoAEgkfAhFtahaRaIkc12lI7xpHqBkuqa+DOhkUyVhZ24yPThkeISFju1PLoCsmRsjYWyzRcNlhe''@;'; put 'put ''EZ5m2hKq2Ky4Lf39DuJARbph6Wxvgei8gFv86WMVpY59eQXFsr8cJwmQQFESoMAsymnjoEnAHwTUwhhBvGNlLayREJH14yAqxzpSOxqJNDVIoIFFUt3Zqh4zlkiKyDzOnWpHuN3VABxCgpMbD4r7qbiFWE+Izg5HOi4Y0nbelLaLAvEJiydc7bZF0ZnHWeGqSaAkCVBgluS0c6dJYHgEDI2VRGJN''@;'; put 'put ''TaMjDeNtaWiCoMT9asRLRitMJNVArMAsqRZJ5LjAJElz5PBIe/wpFZwqPDE/IVg89b4FV3tfry29bQ7EpiGtZwy51GxAgGrSEWM7PZ4Bro4ESo4ABWbJTTl3mASyJ2AY6tqGmISQHD0RgnICXN6Imyyv1jJABvQjxCSECvQkxWT2WP3zTgjO8GXRqZbPVMKCGx1WTrjW284ZcvEUROc5uNcvocQS''@;'; put 'put ''Xev+mTeOhASKgAAFZhFMEodIAoUiYJrpDO6GCbY0TlFBaSMZR7O7w9AfaTe3pdnZapmkcbJQ01K47ailE4LTtXSmIxtgzbSksw1CExbOC8dD0noWVk4kFdmWW6ipcGPjlkiABIqKAAVmUU0XB0sC3hIIwUJZhfjJMRMdaZzqyGgIylGjYaGshB/VdXUjfk/FJF3d3oIvprUNtHIiL70PgrPrkrgu''@;'; put 'put ''9fPHDWk5bbgC1EHNTy4kQAIkkCFAgZkhwVsSKAkC6cLkGj85biqslPirHWMj49uE5QqSEiIhpVXIr9QDKgko3MmhEMBxEtaC9e41iNbptKTjvMgFuNObj4Wk5YyJgvHIVqeFeyhU+V4SCBwBCszATSl3iASuJqBWyuo6WCinODJ+puXGUlbVaXccLVmD0jZaIogWyquh8VH2BNTCibR1vUDRxCHN''@;'; put 'put ''VG89G5LmI6ach0u9HQlEzFLPHiffSQJBIUCBGZSZ5H6QwAACZlhLBjkybrolTbNsqUctysoaFKeE21sLdWscJWMoBwDjXW8IZGI4VXAiaSgO6+YlZKU3Q2g2HzZh3Uz3aUekpzfb41pIgAR8S4AC07dTw4GRwNAIRNFGsX6CJRNm2tI0A7UoUT6orNx0M73VskQr5dB48t0eEBhg3Uyh/WUnug2p''@;'; put 'put ''G/2Mis0T6l6H0GSrSw9AcxUk4D8CFJj+mxOOiASyIqBFzmNlIg0oHzRxliXjYamsGYNWi1HUMITrW3ta00qZFUq+qRAEoCU1O91AAXgLsb49bbacg8g8cwCudIhOt8sQxWYhZoLbIIGCEKDALAhmboQEvCNgRhwZo5bKOY4rLGsaL4tKTdDR6uZMrvAONteUNwIG3OgmxKbmlHWh2PuF4yKnDkJs''@;'; put 'put ''InaztwebpdjMG3uumAQKQYACsxCUuQ0SyJGAgfqUdYipnDQbwnK2dtBBi8YyJOlQVOZIlh/3A4EQxKYmCmlocNclWDaPGXJ6ryHnjpuS6NMRMmbTD/PEMZDAUAhQYA6FFt9LAgUkoIXNq2odCEpLpsyH1XKSjXaMSNWl+7uAs8BNFZpAxrJpIcRDOwqdOWjIyX3oKoRC71aCQrPQ88HtkcBwCVBg''@;'; put 'put ''DpccP0cCeSDgxlWWizRNs2TyAhtlhWypqjHh9XYQUwnzDssJ5YE6V+lLAtCSrtiEZTMZt6UFpY9O7Ydlc78p7RCejkWx6ct546BI4DIBCkweCiTgAwLqAteC51MX2jJhnpYVciQcNhBTCWnpNvr2wSA5BBIYKQLQkvp9EPzf3+Wg7JHI8V2mnD1sSH+vCk2KzZGaGm6XBK5HgALzemT4PAnkmYBa''@;'; put 'put ''K8sqHNSpdGTGopQ0ThOpqEIcGuIqLSbr5Jk+V1+sBNxe6UgO0koJHS0O3OchObHHlEvokW7Rqlms08pxB5AABWYAJ5W75G8C2lmnZowjUxdZMnW+JbVjUboF5VtYq9Lf88bR+Y+Aljwy4UKP99pyHiWPju40ELMZln7NQqdV038TxhGVFAEKzJKabu7sSBIIwQ3eiESdOStSMnEmrJfV6SxwWitH''@;'; put 'put ''cla47UAQ0ILul62a7RccOYEMdHWht51nT/RAzC93oigJUGAW5bRx0MVCwE3agRt84hxbZt1iSeNkR6IxxlYWy/xxnMVHIGPV7O9x5PiekBzZhtqap/RijnGaxTebHHExE6DALObZ49j9S0BLDNU4Mg1u8BnLbNSwRH5CyJBkEgGWLITu33njyAJDQGM1IxFD4nFLLsB9fnir6RZyj/fCeR6i2AzM''@;'; put 'put ''RHNHfEuAAtO3U8OBFSMBrV1ZN9aWGbfYMm2hJdUNJmIrbbG1xBAXEiCBwhOAlowgA11LfV06J3L4LVOOvRWSng6kpDNOs/DzwS2WDAEKzJKZau5oPglo4s6YyYivvM2SSXNtZIObkoSwZImhfFLnuklgaARc9znEZmeL5cZoHt5uSPsFjdOkRXNoJPluErg5AQrMmzPiO0jgugS0fuW4GZbMXY4W''@;'; put 'put ''jkjciZWjtV0S9VNYEP26zPgCCYw0AW1NqVbNnk5LTqJT0MHNprSgU5BjU2iO9Nxw+8EhQIEZnLnknhSQgAlhOXGOJXPusKVpqiXhSJjxlQXkz02RgCcEEKcZRZxmX68lZw+FZP8bYTl/3EAtWgpNT/hyJSVNgAKzpKefOz9UAmbYlsnoCz5vhSVjpkBYmhSWQ2XI95OA7whonGYUYS1ICDp7JCQH''@;'; put 'put ''NoflDLoEUWj6bqY4oCIiQIFZRJPFoY4cgbSwtGXuClvGTnXcLFRN3mFG+MjNCbdMAp4TUKEZMSWVTKEdZVj2bwrJ6QNI1KNF03PUXGHwCVBgBn+OuYc5EDBNWyaiN/j8OwcIS42x5EICJBBcApeFpjZBaD4Wkn2vG3IKQpMWzeBOOffMewIUmN4z5RoDQECTdybOtGT+PbaMmwaLpbZypLAMwMxy''@;'; put 'put ''F0hgCAQgNMOwaFpWSs4dMmXvJkPOHqbQHAJBvrWECVBglvDkc9ffSUDbOTZNsWXePSlkhdtu8k6KxdHfCYrPkEApEbgsNNV1fvqQIfs3huUckoHYHaiUDgLu61AJUGAOlRjfH0gCBupY1jfZsuDelEyeq+0cEfBPYRnIueZOkcCwCVx2nSeQDHTqQEj2rtfyRrBosrzRsJHyg8ElQIEZ3LnlnmVB''@;'; put 'put ''QDvGVY+GsLwrJdOWoEB6BepYJtjOMQt0fAsJlC4BnDeiyDrv67FRsF1kz+th6WDB9tI9HrjngxKgwBwUC58MPgFHyqscmYNyQ3NQJL26lgXSgz/n3EMS8JjA5Tqa3SjYfuhNuM5RR7OnHeqTLSg9Bs3VFSMBCsxinDWOOScCkYgjU5elZCEywxuaDLZ0zIkmP0wCJJDpDNR20ZZ9KG10ZFtY+ntD''@;'; put 'put ''bjkz0iGBUiVAgVmqM1+C+62Z4ePR1nHRKiTyTLPdbo52yilBEtxlEiCBfBAw0ILSRAvKCydt2bXOlFP7kIGeUosmFxIoPQIUmKU35yW3x6GQIzWNtixamZRpC1F2BLFTKY2z5EICJEACeSBgov2kbdtyen9Idr8Wlovoc85EoDyA5ip9TYAC09fTw8HlQsBxHKmoEpm9IiXz7rCkahQTeHLhyc+S''@;'; put 'put ''AAkMgQAMl9oVqK/PkiNbDdm70ZSuNgMroEVzCBT51iImQIFZxJPHoV+fgBl2ZPI8SxbfZ8no8Yak0JHDsegOvz4xvkICJJAXApcTgdouWrJnvSFHtkckmaDIzAtrrtRXBCgwfTUdHEyuBNQdXj/OlsWrbZk83xIjZCAGiq0dc+XKz5MACeRGQOMz9e/sEZGdvzJZqD03nPx0ERCgwCyCSeIQb05A''@;'; put 'put ''3eFllSJz1R1+J93hNyfGd5AACYwEAY0B10Lth+E2370+LN1tas2kRXMk5oLbzC8BCsz88uXaC0DAzQ5HW8clq1Mybgrd4QVAzk2QAAnkQgChmFHEZ7Zd0GxzuM13hMVKUmTmgpSf9R8BCkz/zQlHlDUBR6rqHJQdSsmspbaYUbjDk3SHZ42PbyQBEhhRAuoy125iJw/Abf5KBG0nQ+I4FJojOinc''@;'; put 'put ''uGcEKDA9Q8kVFZKAGbZl6mJYLZHEUz/WcF1OwhyeQk4Bt0UCJOARgXAM2eZdlux93ZR9aDuZ6KPI9AgtVzOCBCgwRxA+Nz10Anq1XzPGkqX3Q2AugrUSotJmdvjQQfITJEACviKg3YDCpoHkH1t2vBRmEpCvZoeDGQ4BCszhUONnRoSAiRaPs27RTjwpqalnTcsRmQRulARIIK8EwijSHo/bcvAN''@;'; put 'put ''Q/agG1BPl8GWk3klzpXniwAFZr7Icr2eEXBLD421ZemDFmpbwmhpO7RaekaXKyIBEvAdgcu1M5vRcnL7iyhpdNTEOY9uc9/NEwd0QwIUmDfEwxe9IKACMYzC52ZYxIg6KMiRPlGqUEyhT6+N7Ekrpd7ud55ATbx/1rIUYi1TSOgJSxLlPbiQAAmQQCkQ0JaTyYQjBzZnrJmaFPTO82QpsOA+Fh8B''@;'; put 'put ''CszimzMfj9iRylr0/R5tS22j9v9Glne1LVG0aywrg7iEiztk4A/Fz1VLhhBCaaHDTjIBl1CfSH9XSLo6DOlqEem4COGJ1xfcjVjL+bBYYq/ZicfHU8+hkQAJ5IfAZWvmeVgzt72I2Myj6GtOa2Z+WHOtnhKgwPQUZ+mtLFpmy+iJtjTNsGTsFJFRDSh4XoVg9bD23H3bne0meOMf93YAJvdaXPUm''@;'; put 'put ''7hiGxhrph0SSKQslh9DLN3a5E8+1HxywDt4lgaESuMoIdPmBeyzqiq7cuclaBx7PKPR/ZRn4/JUneYcEciOg1sxEwpYDGw3ZtT4i8d5sD9TctstPk8BwCVBgDpdcCX/OMEUap6RkynxbJs52pLpeRAPTNZs7pRndcH3nurg60/0n1zXx80En4P7MwsqjC65R8A9a8qlKTBvK3edV/zn6HyIsbJjG''@;'; put 'put ''bbQPtS0cs3jBsWEtx3Fr41at5LbWIbzJIaxGeC3w795ie2qZN3S7JuqxYhAGLrBC+J5oOEh6fFilrlPH4W7THVD6q6KPb7I9dyf4DwngGIvgXHv2iCNbnzel5TSOYRy3XEjAjwQoMP04Kz4dU7TclikLLZl9K6yW421YFxETicLmdF37dMICMqy0QIN4U8GoVu6McIQosyAWk8i41RjeOGoHpuIh''@;'; put 'put ''3DrS3yuoJYjQix48j+cSsPYk+/FcHJ9BSEYqhYuhBGJ/ITjVUu4gBsO9LsI67SzCfF2LOwSkKkYznB6bhoBEEGdsRnDBFcNfFBb4Mlj08RetwB/CRGIVCBep1Pvpx5EY4pNjKhqwDl0PVuxqTR2PCmGNDdGteHDRll4T/w0CAW032d9tyVu/NhGfaeJYxpeCCwn4jAAFps8mxI/DiZZZKA9ky5wV''@;'; put 'put ''ttShqLmNHzsLFqCbWXn8uC8ck38JuJ5qWGhMtQhqhxNXQDoQhRCREId9PRCOiNPt6dA/Q3o7Q9Lbhdjd7hAEZVpAppAwZkNspmMt/Luvhlo8kfgWU6FZrqJTpHwUYpjxV1GTvtX7KkzLIEo1VCQMAeooJFcEqwUWd9L/+3dHObK8EdDviH5XTuwTWDPD0n4RIhPHAxcS8AsBCky/zIQPx6Fuv2mL''@;'; put 'put ''LVm80paG8WrtUdciz2A+nKqiGlLGZayu5BBEU0ZIxvtTEodY7IFw7LhgSMclke4WU7rbVVymrZBqqfS7ePRqMtRiG47ZUo4kuSokz2kC3Sgk0FXX6WMbVRVgES2DyID1U5lk3P9q7aTL3atZ8P96IugC1H7Rkm0vmHJyH3qaozIHFxLwAwEKTD/Mgu/G4Ej9OFtueTAlk7TuJMZnJyksfTdNRTCg''@;'; put 'put ''a8WkKp8UEhXUha2WyI6WkLRdCEknqgZ0tqhVEglecYMC6SZzayL+s0ItnhCdtWNQsWEc/hosiE9YPKu1aoOJUAKITjgaUrgwFFg7+Q2+CdQiflljfh3EU+zdZMquX6HtJC7IWM6oiCc0IEOnwAzIRHq1GyHDlnl32LL4viR+wMKIacsiIM2rjXM9RU/AFZSXW95p/VONdezvtaX7kiFtEJGtZwxp''@;'; put 'put ''P49yVK1wa+NH0GK5FQ/nPO1uV+tmLRoT1EN06m3NaJEKiM4o3OyaAOVgTjR2VWt/UXR6iH+kV4UvXxSxmWeQAPTmLw0kAJm4UKM1c6SnpZS3T4FZyrM/YN/VvlGF2K/lj6ZkxmK1euAZjfHiQgI3IKA/X24smFuWynETbrphheyAiGyBmLx0FsKyGS7ubtNNqLnBqvhSPgjAYhxDfGdVHcJcmhxp''@;'; put 'put ''QEmxBngnqhs07lNj+C7HVKuVk4IzHzNQ8HVqAlBvpy1bXzLk2A4YCRCXzIUERoIABeZIUPfbNmFpapxky13vs6RhgiZL0Grptynyy3jcn6rLFkoNntQMbo2RbD0bkgsnDdwidhLxk5rRzcWfBExkv1fUWq6Fc8zkdEUIbYxQVmWIaaqrFRZOCk5/Tl6WozLwHdXv5wG4zHfAZd6L5Di6zLOEx7d5''@;'; put 'put ''RoAC0zOUxbkidWNORj3LOx9LIYsVLkvEx3EhgYEEtCyQCg+9TSEWt6fTkfZzITl33ICoRBzlRRMlgSgoBzIrpvuamF4Jt7paOMdMsWTMZEfqxtjIXtc5h4XTrRnKGM5imlN3rJjXjMt8y7Ome/FHl3nRzWJRD5gCs6inL7fBa5b4zFtTcsejlphRLe9Cl3huRIPxaVcqagZzGDFc+K+/N+VaJZsh''@;'; put 'put ''KM8fxw/VGS0PRItIMGb7nXuhFk51qY+BV6NpOiycuK2qD0GspJOG1LqpyUNcioOAusy72y2UMorI8d3aGY0Xg8Uxc8U/SgrM4p/DYe2BistZt1ly57tR90UD/xlvOSyOQfmQ/uRkYiltCAi1UraeCsmZo6Y0Hwu55YLQvZNLCRKIlaeThZpm2DJuakrqmxC/WYEsdZg+U3pQMHbT90eFusy1g9Tu''@;'; put 'put ''9cgyfzWM2rIUmb6ftAAMkAIzAJM41F3IWC7veg9+HLR+HmKuuJQegbSoRNwdalFqUldXqy0X4fI+fcB04ym722mlLL2j4sZ7rO0xR9U7Mg6WzfGzYN2cYKM4PDoQIYQilaTYvDG9EX4VhoQIkvGO77Vly7Nh6URlB1TuH+FBcfNBJkCBGeTZHWTfNOZyygJb7v1gUgwUaKblchBIAX7KFZUaUwn3''@;'; put 'put ''t4rKbojKc8cMOX3QkIsn0vXzArz73DVPCaTrcI6basnEOY6MRfxmZQ36sFNsekrZ65VpYfbWs7Zsetp0Q14c9jL3GjHXd5kABWYpHQoQl2MnOXL/J+MoXaLB+7RclsL0uzaKyzGV6v7uaHPkAuIpT+6FqDxJUVkKx0Ah9rGyxpax0yyZNEBsapKQRTd6IfAPaRtmxEAdWlveRPefI1vDaP9LS+aQ''@;'; put 'put ''APLNWRGgwMwKU/G/SZM1RiFTdM2nU1LXxGzx4p/Rm++BZgebl+tTakzlRZQROr43JM2Iq+zthOLkQgJ5IqDF3sfPdCA2kzJ6CiydVZowph3BkCCUp21ytUMjoDHX2jJr16uGvPVahMk/Q8PHd2dBgAIzC0hBeEsk4sg9H0rI9KUG61wGYUKvsw9qhwjBRWmERRL9trSeFjm535BT6FHc2UpReR1s''@;'; put 'put ''fDpPBDQkR/unT5pny+R5joxusiVcpt4TaBvNRs/TdrnaLAnghBFBlvnhbSJvPIMLz27GXWdJjm/LggAFZhaQiv0tIdOWBXdZcvu7UMeQrR+LfToHHX/GWmkjYauzzZYz+005tgexVqdZlmRQYHyy4ARMXOSOmaB1d5Myaa4j1Sh9pNnNllo1qTQLPh8DNxhB7/rmo7Zs+ElE2tHSFZepA1/mfRIY''@;'; put 'put ''FgEKzGFhK6IPwYIwZoIlD34uhStVZowX0czddKjuzwAyQzVZK9HjyPlTgjp3ppsF3oc6lVxIwK8EyqscmTgrJVMWatwm2lmWw6qJJHRaNUduxsJI/ulssWT9T8Ny/miYon/kpiIwW6bADMxUDr4jkZgtqz+eRJYnyojQejk4pCJ7VqWjgSB9/QXoanfkNKyVR3cY0oI2jbZFYVlk01nSwzVwAVyH''@;'; put 'put ''UkfTITQnzUvJqAaEd+CiyUL3IFo1C39o6MVqsldkMzr/HN1hMvmn8FMQqC1SYAZqOq/eGa13Oef2FHqMj6xr3LW0wRWmrQa1OPOVnrj4BdGOIDZu1bXLgKyr5+/aR2k3eLq8UOsZR47tNOUEMsF72hlbeS0rPi4+AuXVSAqabcm0pZY0TtbYwLTQZCH3ws6lm/yD8/FbSP7ZieQfXrQWln+QtkaB''@;'; put 'put ''GaTZHLAvmjVejbIhj/xGQirqDHEKXJJIxZDGV2kP6wQsp71d6GHdJRLvgTu3HyIT/0XLbYlWog9ytYi6zGJlKJeB2owpWC8oNtOT6Ypz6EcD2eCJXlvOomblkW2mnD0CS0OcwnLAIc+7ASGgsZpjJ1syY5lmoltSUYMMdD0lqFUzIPvo+93AiScCL8nezSJvPhfmucb3E+bPAVJg+nNech6Vdty4''@;'; put 'put ''ZU1SlqyBEOlHcFOBFrVShiEq4wjcbzkpcuYQivmi1WBHiymJPtWNKpkGLhCWldodxIbVAnFZs21pQK3OCrSiS+oPCgRnKS5pYQkZDpHe22nLqQMhOYx6dRdP4ce2NJGU4mFQ0vusrQ3rxzkybbElUxdaUtOAbwXc5yx1VKDDQkUm4jKP77Ll9V9EpKdjgPepQEPgZoqbAAVmcc/fdUbvSM0YRx7+''@;'; put 'put ''Yhw9g2G9VPdznhcVRG7xXojZ0/sMObAFYghFvG1YHoayqFu/fpwtM5ba+FFBTFY9+uZCrMKPPpTVFO17XWEJayXSsdDKzcHJPR0L1XaB1sqinVQOPGcClTXIPl+QkpmwajaMS3tH3OzznNfMFdyMgJthfsyWdU9GkATknqFu9hG+TgIuAQrMAB4Iar1ctiYlS9dI3q2XerpRo6QmnTQfdWT7S2Fp''@;'; put 'put ''PmbmThXB/zWwas5HeaXpt8KVHkW5HRWaAV2Uo7rBVUZ3XLDlyM6wHNsRkq42D1gGlBl3q/QIxMrh5UAy0Jxb0Ad9CrwlmhCk9TRL4/pzxCZcM8zbmm1Z/yQMB2dwscse5iM2F8W0YQrMYpqtLMaqbqVR9Y489IW4VNZCsOTRxeyKS7hwraQjezaasvs1uLUT3lraQtBX49F+btnaFOKyUCQ+obVM''@;'; put 'put ''sgBRJG95W1g6cqlZ5Og2Q44ieae3y1uORYKDwySBrAhEoojPnO3I7FuTMm6agXhBB0ITkecBOjdkBaKAbzJxkd+DGrsbfhqRs4fx20KRWUD6xbkpCszinLfrjjoE6+U8ZI7ficzxfMZeqjBy4wO7bdn8VERO7EHrmDwtmrBUhQxTFZmzb0FGvPrdi9yY6fKDxVLFcutZWw4hcefErrD0IQmKCwmQ''@;'; put 'put ''QHYEwrgAHTsrKfOWO9I0UxNThCWOskM3rHe5ZYz6HNn48wjCdygyhwWxhD5EgRmwydYr+wc/l5CxU/LnUk6LS0O6ECO4Di6TC4i1LMQSiTmy8J6ULL7Pgi7DKIowLvOKsASwtnMQltvVFW5SWBbiAOI2AkvAxClonCs0YdmcEZKwCk26zvMy36EwEq0SjmxGdvmhNzXDnxfFeQEdgJVSYAZgEq/s''@;'; put 'put ''Ar7nTXAnP/iZZLrTVx7cRa5Aglu865LIaz8KSwuymgu5hCO2zLvDklvWQmSqi6ZIfGLuKRgGyzCslpfOQ1hu1eSdMFzh7iuFRMhtkUBgCajQbJqZkrk4RzRNh9AMo8YuXeeez7dbKxO/L9teNGT3BnT9YYMHzxkHYYUUmEGYxcv7oMk9t61NyKL7EKuYh9JEaZEUkjg6Pbz6A4+SeYbBXy2Zi1al''@;'; put 'put ''ZMkqxF1pzUyfL1q6yYSw7O2y5ehbpuxFvGp3G2MsfT5tHF4REzAhLLXkmZ4nxkxCTQZciGot4DxccxcxpRyHjgQrFfQ7Xg7JW1qQPcWL5RyJBu7jFJgBmtJYmSUPfTEp9eO1Vpz3p1I9fdhwTb/+c1MOb8tfzGU2UxKrsGXFuyyZdStiTX3aAjPdeQc1QeO2nNwVkj2vh+XSucJafLNhyfeQQFAJ''@;'; put 'put ''RMscmb4UFs3bbZQ/Q0KihtWoRTOoO1zo/cKPQhgVRHb9GtbMFyIIS6DILPQU+Hl7FJh+np2hjA1lfRon2bIW8ZfaQcfrM6ieNkKwwh14QwUmApxGfEG2fIMjqz8BQT32cku5ER9TegCZLkY2Et5PHxbZs27krL0+QcJhkMCIEiivsmX2cr0gtd2C7W63MDg/KDQ9mBb8OLhdf14X2fJcRFJJikwP''@;'; put 'put ''qAZiFRSYgZhGzei2ZeGdltz+Hu+zx93TBdwhbRcceenrUent9od7V0MCJs+zZeWH8xdzOpTDw+UEcW+A1cWTtuzeGJaTu7XYPE+4Q+HI95JAvgiMakAMN86TM2DVjKFbmK3dwqgyc8eNU5x2/dm/yZE3nmVrydyBBmMNFJjBmEe4KRy590MJmbbEkJTHLmOVR45hyIYfm3IEGc9+WlxX+buTMusW''@;'; put 'put ''xJ16vN9D2U+NszTQIrPrki374Qo/iHqWiT5/CPGh7AffSwKlQGDMJEsWrrRkEmppmoj2YSKQN7OuXX8ObxWUMUJN5DjPf95QLd61UGAW79xdNfIyxCQ+8hsJGdWIgHYEs3u1uLY3WOTOHxd58ZuIsUn566QRQmjA2Cm23A9XebgMoy1w6SI3zhLCsr/fkWNvhWT3+jBEpr8YeXUscD0kECQCBs4d''@;'; put 'put ''k+dbsuDelDSiiYPN+ExPptcVmdsui8x+ngs9gVqkK6HALNKJu3rY6N893pFH0XvcQI0yLwOLXIEJAfX6Tw05uHVkE3uu3ue3H8XKbbnjMe1THCqYFVO5uKU6oDDPHbaRRRlFq0yeTN+eFd4jgeIgEMX5Y/ZtllvaaFQd6gfTbZ7zxKnIPLLNkQ0/o7s8Z5hFvAIKzCKevMzQ1Yo3ZYElqz9uuW0b''@;'; put 'put ''M8/neqsiyoGA0oLqv/xKFMXA/SmgDJQkmTTHklWPIxazAO3LXHc4Ep60Z7iWHDoM4Z1iiY5cDzd+ngRGlEDNGJQ1WpmSqQttiURRiYP1M3OaD4rMnPAF4sMUmAGYRk12WXhPUpY/Cgueh/Uv01Y6Qw7vcGT9kzHfktIad1V1jqz9VEJqkFGuPwz5WDLZ4cm4yBG4wzU7vJPu8Hyg5jpJYMQITJqL''@;'; put 'put ''bmGrbGmcorGZ6ba0+TmjjNguFmzDaXe5g8ojYUnQXV4w7n7ZEAWmX2Yih3FoUeHbH0nK/Hu8F5haSXfTz0NyYIs/3eMZbNFyR5aDwdzbvXeTu2ECMN5qEs/FkyHZ/kpIzhz0N48MF96SAAkMnYC6zefekZL5K2wpH4WLVi3STpU5dJD4BEXmsLAF4kMUmAGYxnxlkKuwSsL1++I3TLl4yt+CykQW''@;'; put 'put ''/exbLcRi2ggT8K67jxsmgKDWODLCD2wOyT5kiMd5JR6Abw13gQRuTqBhvCVL70vJxHmGhEIoacQi7TeHNsg7IuUmzp+2bPqF1sn0Z6jVIMPmUzkSoMDMEaAfPq7i6sFPJ9CDFwXHE96IK1dY4Z+eDkH8ZUx6OvUZ/y4hw5GmGYhD/VjKLTviVaKTusW15/mR7SjT9DM/FJj37xxwZCQQRAImQpBm''@;'; put 'put ''LLPQgjclo+qRbc4koGFNcxiJP26dzKcgMhmzPiyGxfYhCsxim7FBxhuOWvIIWkQ2TEif/AZ5y5CfcuWkFldvRoLPV6OS8HtNMyQ61Y+F0P5sQmKVGL1H5YpcgYn2mEd3hGT9T6JD5sgPkAAJBINAzWhLFt+fkukLQ6ggwd7mQ55VnJbDUVP2rNeOPyhyb9GSOWSGRfYBCswim7DBhhstt+ThL6Bl''@;'; put 'put ''YlM6Vmiw9wz1ubTAFGk5HYLA1B6zfj8ZaOtIS9Z+JiWV9agF6lGiT8aCeQy9xNc9SYE51OOI7yeBIBHAmUVm3AKhiSLtNag5TGvmEGf3ssjc+Qp6l78chsh0f2mGuBK+vVgIUGAWy0zdYJz5FJitZ0Py3Ff8V2D9nTjSAvOhz6akoo4C8518+AwJkIBXBKrrbVn6QDJtzUR4DmMzh0BWRWbEkG0v''@;'; put 'put ''iux8LUKROQR0xfZWCsxim7FBxps/gRmSjouOPPuvcJH7PrGFFsxBDg0+RQIkkCcCV6yZqzU2M31Ry0zzLGFDZJpmCH3LDdm7KQyBTktmluSK6m0UmEU1XYMPNl8CU6ty9HVrDGZMutp87iJHDGbDOEce+EweYjA1yectkQ0/8W8t0MGPDD5LAiSQbwJaoP2WB5MyZb6BhECtmwmLZr43GoT1I8Zf''@;'; put 'put ''az9pjcwj2xGTaVNkBmFaB+4DBeZAGkV6Pxyx5aEvJNx+ul6X6LFwZfnSt01pPubvMkVXssg/jixyExPp0Rk+HYOJ7MctjrzxNGMwi/QrwmGTQF4JaC3iObdrbGZKyqohNFGgndbMmyPXdrsWGrCt+7EpJ/eYbsWOm3+K7ygWAhSYxTJTNxinlim6/xMJmTjHuzJFujm9ngxBrb3xnCN7N/hbXLl1''@;'; put 'put ''MG9LyZ2PiaQS1g1oDe2ltMA0ZNevUWD9ZZYpGho9vpsESotA42RLbllrSdN0GDJZziiryTfCaI7R68jL3w/LeRgyKMyzwlYUb6LALIppuvEgzbAtd70/JbNvy0MnH/TcPrHbkVe/72/3sHbeWPHuJIqtG5KMeyswbduQN5833CLrN54JvkoCJFDqBMoqHFl8XxIWTUdMXJM62gWo1KHcZP9NJP30''@;'; put 'put ''tNnyyncj0nIO4VgIS+JS/AQoMIt/DtHC0JFb1iRlyQMQmH0eiiuw0RNjb6fIc/8WlZ52f8Zh6ul7VH06/rKmwdte5GrBTCZM2fjTkBzf4+8wgQAcytwFEggMgelLUrLsAQvnJu1pjrMUVeYN59aMGnLprCO/+m5YOi6hc5LrQ7vhR/iizwlQYPp8grIZnsYfzkKbxHs+6EjKQ+udbjvjJt/8TLpN''@;'; put 'put ''YjbjKfR7NP5p6iLd/xRin7zduu5/b6/Iq9+NysXT/hTY3u4x10YCJOAVgbqxttz2CFpNzoLItBGX6U2jNa+G57v1hGOmnDtky69+GJH+bp5vfTdBQxwQBeYQgfnx7WplGzvNkgeRQe31VZ8KLMH3XAuuP/81f/aRjVU6svKDCZmEfsGexl9i121kp3deMOSFb0alr8ul4cdDgGMiARLwKYFIzJYl''@;'; put 'put ''91sy73Y77TJnP/MbzlQELSWPbLdlw0+jCHfiOfeGsHz+IgWmzycom+G5LuJaWx75rYSUVyGD0aM2iZlt61fcMQy4iQ05vM1fbmIND5g4x5b7HkcqojvQzKhzv1XhrijPHRZ5+btltD7kjpRrIIGSJTBjqSXLHkxIdQ1a+mopI7rMr3ssqMjc/ZojW55nIfbrQiqCFygwi2CSshmilip68DNJGTfD''@;'; put 'put ''20xy3bar26C22lF0/UXEYvb1+sd1UV5ly6rHUzJ+BrLHk976n1RgOo4m94Rkyy+ZQZ7Nccj3kAAJXJ9Aw3hL7niXJWOm4dzCLPPrg8K5N4wE0zeeDcme11mI/fqg/P0KBaa/5yfr0bmJPmhdtmSNt4k+mQGoyDTwhd+9AVeVz/ojozwctWXeHYhxethGLTVvxaXutwpMK2nKhp8bcmynFtfkQgIk''@;'; put 'put ''QAK5ESivcuTWB1Poaa4mTC3Mnk6mzG2twft0CIXY1Rv36x+H5cQu1sgsxhmmwCzGWRtkzCHECk6cY8n9n7TcvriDvCXnp1RwpZBEs+7JMIrijqyr3EBi09jplqx+3JJIOU7QiGvyclFB7YBpT1tIXvhWVLpa/WO19XI/uS4SIIHCE9DEzPl3oTA7yhnFyrQwuwY6cbmWgNbI7O9B0s93Y3L+JM7K''@;'; put 'put ''LF90LSJfP6bA9PX0ZD84BwE9laMcefS34lJZmz5hZf/p7N6poktwVdndgbqYyKpu1XplI7FA+NWORtzlR1NS16SdIPJjvdST2ckDIq99P4pYTHfvR2JvuU0SIIGAEpg8z5LbHk1KTR0MmWrJpMp8x0xr+aL2Zlte/nYU5Ys0jZXn4ndA8ukTFJg+nZjhDEvL9dz5GAr8rvC24PrAsehXOwRvcds5''@;'; put 'put ''kVd+UHjLnpvQVOPI3R/WuMuQp1njV+0ndtS2UGD9BS3PxPjLgWx4nwRIwDsC9eNtxGUmpXEqXMJsMTkoWC1fdOZAunxRwkc5AIMOlk9eIUCBeQVF8d9RN/mkuSlZrW7yVP72xxWZcF20nhH59RMR6WgplCXTkaoanIzfl5IpKEnkZceed9BS9zgKy7/4rYh0Fmz/3jEKPkECJFACBCqqHVkOkTlt''@;'; put 'put ''gVox2cd8sCnXzPK9G2wk/kTFStGKORgjvz1Hgem3GclxPLEKWx76XELqx6OjDVqU5WvRr7eB9l7t523Z+POInD+e5yQYCL66RojLxyzXcplPcZnOHg/Jsd0hWfcjf/dgz9f8cr0kQAKFJRCGB2oJkn8WrHDgJWLyzzvo40dHW0puedqQPZuQ9GNRZL6Dkc+eoMD02YTkOhzNJl9wT0pufxQtDvs9''@;'; put 'put ''bmtzzeD06x0yQxJHp5vtr5hycLOZl1hF3afxsyxZjo4YdY1m3tzimd1TgZlE9vj6Hxlycn+ehXNmo7wlARIoeQIaS6/JP8vWpCQaS2dR589MUHy4NbNcDSevPmHK6f0oX8TYeF9PIgWmr6dn6IPTGMWaelse/iKKro/KT7LPwFG515D40odMQ07stuWtVyJyqdkbl7nuSwVKeiy4OyVz7rQliqtX''@;'; put 'put ''C7Xj8rm41kts4PzxEILK/dm5KJ/7z3WTAAmMPIGpC1NoMWlJFRI3NfGHyT9vz4lmlne3O27ST1uza+Z4+0Xe8xUBCkxfTYc3g1GL37I1SVmqNTHzbMXMjFi/5uq+6Oly0OZLO/6Y0o4Wi8NZ9Cq+rMKRKYttmb/CkoYmxFuqsPS4Q9FgY1OBaVumbHo6JIe2jmwppsHGx+dIgARKg8DYqZabtFk7''@;'; put 'put ''BpZMnBMpMt+ed7dn+REk/XwPPct7hvc78/baeC9fBCgw80V2BNebtmI6sGLGC2LFzOxq2poJoYmC7D2djpw7EoJV05ALJw3p6775SSActqWmEYlK82yZutCS+rFoqYazaj5jSTNj19u3rZfIkEcZpmT85mMe+HneJwESIAEvCdQi7vzO9yZk7FT1RjH5ZyBbTfrZ97otm59m0s9ALn66T4Hpp9nw''@;'; put 'put ''cCxqxVy4MinLHy6cFTMz/IzQDEdM16Xd02FLx0VDLp0LSRcys/s6ULBdswDxv1oqK5EZXoOr9PpxKRk1Wp8Lu20fbY+Lp2fGd71bFZippCGvo3PP0Z20Xl6PE58nARIoHAGtb3zH+xIyeTbiD1Esk5bMy+xxvlZjxuanUEpuM+IxbTzBxVcEKDB9NR3eDqa8yhLtT94wAbGLeShGns1o3a88EoFM''@;'; put 'put ''xGkauNWAdW3/lWlboaLObQmG522M0RrwWjbr9+o9Og5VvCf2oVPRE7giZoaiV2i5HhIggRwJxModuf3daC+5BP4piswrNPW3I5VAPOZ30pVMKL6voPHFHQpMX0xDfgahdTG1U8R9H0VdTFV0qu64vIOAaktNRuzvFjem5+JpZo6/AxKfIAESGFEC4YgttzyclHnLNXQH53Sez935cDv9nLNQsxiN''@;'; put 'put ''P+AhY6efET1Mr9o4BeZVOIL3QLv7rHg3Tkp3Ft5VXiw03dhLx0SpJUd2vca6l8UybxwnCZQaAQM9zJfej1qZKx107WWtzMz8azzmke22rPsxvE9J1x2VeYm3I0iAAnME4Rdi05p9WFVrywOfTko9srFHylVeiH0dzjZccYl/zh5Cz3G0vkwmeHIaDkd+hgRIoHAEFt+XlCWrIDKRGCn4n8ZMEc0s''@;'; put 'put ''3/KsyO4NiMdkiFPhDsYbbIkC8wZwgvKSiqix0xCP+cmkGFHtd8vTkc6tKyXhbepsDcmr349I23lmjQflmOd+kEDQCWh94KWrUxBW2FOKTLSWAwa0SH75e2FpPqxF2IN+BPh//ygw/T9HnowwBNfK3Nu1rpqNDG6ejTLiMtlnyIZfaJF4Zo17cqBxJSRAAgUjMHdFSm590JJwGdQUGreVuqbSWszt''@;'; put 'put ''zZfjMdsQj6nWFS4jRoACc8TQF37DWrrotoeSsmgV4zH1vGPbhux4OSS71kUKPxncIgmQAAl4QGDO7SoyUxIp05Oam87pwVqLdxUaj3l4q8j6n2iZPHqlRnImKTBHkv4IbDuCTMS7PpCSmbeUrshMX9Qasvf1kLz5HFwpaWf5CMwGN0kCJEACuROYudSSWx9NSlk5RabS1MzyTfBM7d9ssj5m7ofX''@;'; put 'put ''sNdAgTlsdMX7wRiKm9/zwbhMXWRKsg9+lRJaXHEZMuTgmyJbnkGvcS34zoUESIAEipzADIjM2ygy3VkMoeZyot+Wl74ZlYunYcXUOnRcCk6AArPgyEd+g5pZXlntyL0fTMnEBbBklojIzIjLA2868uYzUYrLkT8UOQISIAEPCajIXA6RGaMlU8KwYjYftVGEPSpxxNpzKTwBCszCM/fNFssqtM9t''@;'; put 'put ''SqYvhciMBzdC3L121fMLYi73bArJjhfRipKWS98chxwICZCAdwRmL08i1t6WSAwpPyWezxkpN2XnKyJbcc63WbrIu4MsyzVRYGYJKqhvi8RsWf4ICrHfYUhS20lqq8YALSouQ2G4S/pCsvNVCMz1iMlhzGWAZpi7QgIkcC2B2Uj8Wb4W2eWlLjLxA6C/Aa+gdNHpAzj301V+7aGS18cUmHnFWxwr''@;'; put 'put ''1+4QC1ehptp9Fgr3hlBLLBgiU13i2v+8sxVXsC+F5fhOtoAsjiOSoyQBEsiVwLw7U3LLAxCZ0dK2ZBooXdRxwZEXvhGWbpYuyvWwGtLnKTCHhCu4b9a+5VPmw5r5rqRUN5iS6i/e5B+9YtWiuyEDMTiHHXkDmeKXmikug3v0cs9IgAQGI7BoJTr+rEZWtVnavcu1dNH+zQ4yyyMoXeT+QgyGi895''@;'; put 'put ''TIAC02Ogxb06R2pGO67LfMoCwy3IXmxdf9JWS0P6ey3Z97oJl3gY7R8Z4F3cxyVHTwIkMFwCy9YkZNFKXHCjd3nJdrdRTYmfgQ1PhuUoPFmOTZE53ONpKJ+jwBwKrRJ5rxlG158Vliy6NylVdWFJFEECkJ4uNNZS/zt7xJEdr4Tl/HFaLUvkkOVukgAJXIeAeqdueyQl8+/Q0KfSFZka/tVzyZbn''@;'; put 'put ''vxaTjrb0b8V1kPFpjwhQYHoEMnirgTVzjCOL0et2+gJLzBgyrxP+yzR3hSXiLA0jJK3NNoqnm3JsO7PEg3c8co9IgASGSyAMo8GK9yTRYANrcEpXZKqr/BDK1G34aZhdfoZ7MA3hcxSYQ4BVim/Vq9+maZYsXGlJ0wyRMAKmkz4QmpkEHu01237RQmuwiBzaZkpfN10fpXiccp9JgARuTEArhtzz''@;'; put 'put ''vqRMXghfsVOiMZn4eTDg2Fr3o4gc22mgXTB/L2581OT2KgVmbvxK5tMqNCfMsmT27ZaMn25LWRWshChrVMiMc/dUAGtlOJyOD209I3J0uylHdyPmsptxliVzMHJHSYAEhkWgrMqWVR+GsQDncG24UYoxma6rvB2u8q/SVT6sg2gIH6LAHAIsvhUEIDRHN9kybYktk+ZYSAoKiQmrppWyxbIQ4+Nx''@;'; put 'put ''hSO1VGrbL9PUq01HutstaT4CNzhEZfNRCM0khSWPSxIgARLIlsCoBlvuezwpdeP0E6UpMtVVfnCLIxt/Rld5tsfNcN5HgTkcavyMSyBaZsvYqRYsm46MnWbLqDpHohVht7CtWjZtXB6rKMxGdLrWSRWTiKXUP42p1Of6+1LS0x5y+8meOWzKeYjK3i733ZwFEiABEiCBYRAYM9GSe2DJHFWvzTWy''@;'; put 'put ''OkUPYys+/oj7WyPy6ydMOb4rzALseZoqCsw8gS211ZphW2qRFNQwERbOCZogZEtljQXBaUg0elkwuuLxajKIN0c4kCOWbUsi4UiyV2ClDElHiyGXzhnSciYkXbifiFNUXk2OjwYSMFDzNAwrNy5RUI5FZHRDndy+dKHMnzVDImHt3uSxaX3gxod5Xy+++uNxaWvvlIuX2uVSe4f719HZJV3dvdLb''@;'; put 'put ''1y/JVGqYa+fHSODGBCbMSSEmMyWxKnxncCz67xty4/Hn+mq6ALstL349Kl34zdF4fi7eEqDA9JYn13aFAKyZZSLlVY7EKhGzWRnCYwdJQmqlvPwmCMsEit4m+0TiPSE3QaevN4Qi76GSO9ldwcY7VwhEI2EpLyuTyspyqa6skKqKChlVXSU1+jeqSirdx5VSWV4uFeVlUlYWc+PK9ODR12trRiG0''@;'; put 'put ''wt+lqvRHTf/S8XC4wEomXdHZB3HZ1dMrnV09V4Rna1uHtLa1u4K0HSK0o6tb+vrj8BLgKo0LCQyDwOzbknLHY9o8N23GLDWRqa7yXevQ6Q3NOCz2Kh/GEXTjj1Bg3pgPXyUBEsgDARVV5RCEVRCOdRCC9bU1Mrq+VhrqavBXi/t1MqqqQioqyt33RSMRicViCJ1IX53orYqyjLjK3Opzum7L0ixZ''@;'; put 'put ''jS8rrp9MHbsuun96X28z9zP7k0gkICz7pfuyAG3r6JQWWEBbLrXJxdY2aYEIVSGqVlAK0DwcvAFb5a1rE7J4FTzliKMvrm+LBxOhXzdo6xe/G0bXN3WVe7BOruIKAQrMKyh4hwRIwEsCGRFZW1Mto+vqZFxjgzSNHSONcF+Paah3LZGjqiulDMIxIx71MyoWM38qqgaKRy/HV6zrGihC1UKrj/U2''@;'; put 'put ''I0DjcLurAO3p7RMVn2r5PH+xVc5daHFvVYy2dXTABU/rZ7EeA16O2zRtuftDSZmxBImUSVyYebnyIliXGTXQlMOWl78VlXhfxr1WBAMvgiFSYBbBJHGIJOB3AmWxqGt5HNc4WiY2jXX/xo8bA2FZ67q1K2GJjMAKqWIoIxoHWhn1OS7eEFDGmb+MAM1YfJV5b1+fdHR2w9XeIc0trdJ8oVVOnjmH''@;'; put 'put ''2xbXEtoJ17sm6HEpHQLlFbas/lRSGicjJh4JmqU2+2G4yrc866C1cERsuso9O/ApMD1DyRWRQPAJqHDReMfG0fUyeUKTTJ3YJFMmjod1crTUw9VdVVWJOqXqakq7p1NIUsncp4j0x/Ghc6iCU8Vnxv2uVmIVnl0Qly2weJ5tviAnIDpVeJ7BfbWCJhJJf+wAR5EXAnWNttz/qbhU1cKKV2JJP1q5''@;'; put 'put ''JN6L2phfj0lbs/rNmfDjxUFGgekFRa6DBAJKQOuPumJyfJPMnj5Fpk+ZKBOaGiEma9z4SBUoKk7UMpZxawcUReB3KyM8M+JTH+sFQndPj7S0tsups81y7NQZOXryNIRnsys6dd65BIfARGSWr/xQSsIxSCyYMUvJkqkJP4e3ObL+J0j4YX1lTw5qCkxPMHIlJBAMAhoPqa7tGRCSc2ZMdW/Hjhnt''@;'; put 'put ''urnVMqkiUkWH3tIiGYw5v9leqODMiE691Uz3ru4eOXseVs7T52T/4WNy5Php93F/PHGz1fF1nxOYf1dSlj+KQWqinM/H6unw1GgJ4+2vfxCRE3s0iZBWzFz5UmDmSpCfJ4EiJhBBKaAmuLfnzJgmC+bMkOmTJ7iJOFWVle5eqYUqY50s4t3k0D0mkBGc6mbXRa2c5xHLqdbNvYeOysGjJ1yLZzLJ''@;'; put 'put ''Op4eo8/76mC4lrseS8isFYiXLrGkH+1K13rGkRe/EZG+Hib85HqwUWDmSpCfJ4EiIqDCoHZUtcycOkkWz5sl82ZPlwnjGmGhrHYTQzLWSbVQciGBbAnocaV/auXWpau7G3GcF+UAhObOvQdcwdmK7HUmD2VLdGTfF9Okn4+lZNx0xFKXWNKPusrffF5k12vw2DDhJ6cDkQIzJ3z8MAn4n0AYVqYJ''@;'; put 'put ''yOxWQblo7iyZOW2SWyZIxQAtlP6fv2Ic4UALpx5jrajRefj4KXkLYvOtvYeQOHQeoRaM3/Tz3NaNtWXNpxNSOQomzRJK+rmS8PNvSPi5oG5yusqHe5xSYA6XHD9HAj4moGWDpk+eKEsXznWF5dRJ49HdZpQbN6lWSv3R50IChSKgrvRM1rq2wjx64rRs27VPtu/e72aqsyVmoWZiaNuZujAl934w''@;'; put 'put ''JYZGQpRQ0o9aMQ9uEdn4M1OsFF3lQztq3n43BebbLHiPBIqagCbozJo2WW5dPF+WQVhORLZ3BdopDkzMKeod5OADQSDjStcsdY3d1AShzdt3ytad+5AodJEXPz6b5VseTMqS+9DwoJQ6/cBoqVn0L34nLOeOoOwaI4aGdVRSYA4LGz9EAv4gEIGbW62Ty5culOVL5rs1KcvRm1stlGqpZKa3P+aJ''@;'; put 'put ''oxicQEZs6u0ltLfUBKGNW3a41k3ttc5l5AmEI7bc9/GkTJoFT7lVOkXYw+jwc/awIy9/JyLJOK2YwzkSKTCHQ42fIYERJKCWH+3ZfRsslXctXyrzZk1HT+9KisoRnBNuOncC6kLPlMI6fe68vLF9l6x/Y7scO3lG6ELPnW8ua6hpQDzm5+JSXQOhVULxmNpGcsOThhzcmk5ey4VhKX6WArMUZ537''@;'; put 'put ''XJQE1Fo5fcoEuXfFrXLHrYtRXmiMux+ZzO+i3CkOmgQGIaBCU/+0beXOvQflVxvfkB1aevCmAABAAElEQVR7DqDbUP8g7+ZThSAwBfGYKy/HY5ZKJ1EjHJL2CyLPfCkKKyaTfYZ6nFFgDpUY308CBSagsZWL5s6UB1beIUsXzHWLnmuxaybqFHgiuLmCE1DXufaw1+P9CLLQX9nwhmx88y25hD7q''@;'; put 'put ''XApPYPkjSVl4T2nFY2rCz6anRfasixQeeJFvkQKzyCeQww8ugfKyGJJ15snDq+9yywvFIDT1h5Y1KoM759yzwQloWIgKTV1Oo2WlCs3XXn9TzrdcYpzx4Mjy8mwkBlf5JxOoj4ki7CVSHzNkhqS305an/6VM+rpoxRzKgUWBORRafC8JFIBALBqFpXKOvOuBlbJ4/mxR17gKSybsFAA+N+F7Auo6''@;'; put 'put ''13jNc8g4f3n9ZvkVxKYKTV54FWbqRk+w5IFPpSRaoZnWpZH0E4UVc8erIm8+RyvmUI4yCsyh0OJ7SSCPBMJh0+39/dja1XLnbUtEhSaFZR6Bc9VFTWCg0Hz+1Q2u2Gxto+u8EJM6D/3Kby+hfuUh5DYlEf77zJcj0tGSbo9aCM7Fvg0KzGKfQY6/6AmoZXJ0fa08ev+9cIffLXW1NXSFF/2scgcK''@;'; put 'put ''RSAjNI8cPylPvfCabHhzh/T09hVq8yW5nZDhyH2PJ2XKotLpV65WzL2bHNn402hJzvlwdpoCczjU+BkS8IiAWimXLZwjH3r3Wpk/e4Zbu5LJOx7B5WpKikAU3yX97mzduVd+9PQLbv9ztqPM3yEwCqWLHkQryap6xCWWQOkihAHj+HLkuX+NSus5WjGzObIoMLOhxPeQQB4INNTVymNr75NH7r9H''@;'; put 'put ''KivKJZFI5GErXCUJlA4BTQZSodmGLPNfvPCq/Oz5X0k8zu9Vvo6AGUstufsDqZKJxYzETDm83ZbXfhjLF9JArZcCM1DTyZ0pBgKaoDAbLR0//eHH3CQetbrQalkMM8cxFguBTN9zzTT/9pNPSfPF1mIZelGNEw5yuefDSZmxVLPKLW1XHuhFrZgw1srzX4vIhRO0Yt5ssikwb0aIr5OAhwQ0kWfV''@;'; put 'put ''HbfJJz7wLhnXOBrWlbiHa+eqSIAEMgTUmqmlvbR+5pe+9YTsP3xMUriY4+Itgeo6uMo/m5Tqeqy3BFzlasU8tsuSV74DK6YqTi7XJUCBeV00fIEEvCUQi0Vlzd23y+c/9n7R4umaIc6FBEggvwRUZGqf8y9/50nZtHUn207mAfeMZXCVvw+uctgwS8GKCWUJK2ZYmo/Tinmjw4kC80Z0+BoJeERA''@;'; put 'put ''i6Z/8NEH5MPvWYuL3hBd4h5x5WpIIBsCWqS9vz8uX/nuk/Iq3ObxBC/usuGW7XtUWN77kYRMX2KUhKs8gh7lJ/Y78vI3Y4EX1NkeA4O9jwJzMCp8jgQ8JFBRXiYff/+j8v5H1rhZ4iwI7SFcrooEsiSg5YwS8Bp8+Vs/ktc2UWRmiS3rt2lW+drPJaRyFNzGQS/Ajl1EF1N5/uthOXcknDWjUnsj''@;'; put 'put ''BWapzTj3t6AEVFx+BFbLjzz2sJslzm48BcXPjZHAVQRUZKol8x++9j26y68i482DOSuScud7oC8R6xp0V3kmFvNlxGKqV4rLOwlQYL6TCZ8hAU8IaI3Lh+67S37jEx9029jRcukJVq6EBHIioO7yVsRk/o9//JocOHJcLNvOaX388NsETBRgX/2JhEyYg+dQMzLIIjOtKRGL+XVTmo/Rivn2UfD2''@;'; put 'put ''PQrMt1nwHgl4RkDLpGgB9T/+3c+5CT0sQ+QZWq6IBHImoIk/ew8ekb/556/LBfQx5+IdgdETkVX+qYREyrVXOayZ3q3ad2tSK+bRncgo/y6tmINNDgXmYFT4HAnkSGDsmAb5T//uczJ35nSWIsqRJT9OAvkgUF5eLk+i48/3fvqs9Pah0TQXzwgsezApS1c5Ylt2oAUmksk13FR++dWIXDzFjPJr''@;'; put 'put ''DyAKzGuJ8DEJ5EhAM8Y/gIzxT37w3Yj34g9Xjjj5cRLICwEDWRra5ee//f1XZM+Bw3SVe0g5Vo6En8/HpX4cFBgiEIJuxTy41ZZ1P2J3n2sPIQrMa4nwMQnkQECDvSdPaJK/+KPfltH1dW7WeA6r40dJgATySKCsrEx+jYzyf/za96WrpzePWyq9VU9ZmJKVH7bFgMIMssDUWEwb8abPfDkql5pp''@;'; put 'put ''xRx4pFNgDqTB+ySQI4EyFFPX/uKf++j7ab3MkSU/TgL5JqAXhFoT8//6/74s+w4dpRXTQ+BaG3PVRxMydVHwa2NGy0zZvcGRTb+Iekiw+FdFgVn8c8g98BGBuppqxF5+Hj3G5zD20kfzwqGQwPUIaCzmD372nDzx1POMxbwepGE+39DkyJrPxKVME36wjqBaMkOoiRnvE3nmX6LS1YYHXFwCFJg8''@;'; put 'put ''EEjAIwIa0zVz6kS4x39XKivK3dJEHq2aqyEBEsgTgSjKie3ef0j++n99Vdo7u/O0ldJd7S0PJGXJaiT8pILtKlcr5raXHNn2Iq2YmaOdAjNDgrckkCOBCIo43718qfzRb3+GsZc5suTHSaBQBLSkWHtnl/zZ3/yTnDxzDlnBQbWzFYro1dupqHTkQST81DZqsGJwa2MaZkh6Omx56p9i0t9LK6Ye''@;'; put 'put ''BRSYV38X+IgEhk1AC6u/a8298kUUVo/H48NeDz9IAiRQOAIah5lMpeSvkE2+e/9hSaELDRdvCcy+LSV3vg/p5AEvW6RWzA0/Fdm3KeItwCJdGwVmkU4ch+0/Am6Cz0Or5XOPv48JPv6bHo6IBK5LQK2Y/x2dfd7YsQveBwrM64Ia5gtmxJEHUHy9aTriMAPc4ccMh6TlnC3PfqlMrJRGnZb2QoFZ''@;'; put 'put ''2vPPvfeQQBm6g7z7wZXyeWSQ04LpIViuigTySEAtmPr31//r3+TNnXsoMPPEeuJsC1nlKQmbwXWTK7pw1JCXv2PIiT1sH0mBmacvE1dbegSi6HG86s7b5A9+45OSSCRKDwD3mASKkIAm5/X3x+Wv/kELrh9hqaI8zaHa81Z9NB74skUqME/td+SFb0TdC5c84SyK1VJgFsU0cZDFQMDED9WCOTPk''@;'; put 'put ''T3//NyUajTBZoBgmjWMseQLqHr/Y2iZ//rf/JGeaL5Q8j3wCGDPJQp9yWDHLkEgV1FwqKGkH4abPfSUqLWdKO9mHAjOf3yauu+QINI6ulz/7g9+UaZMnSjKZLLn95w6TQLERiCG05c0du+X/+fK3pLOLZYryPX93PpaQ2XdgK8ngli1i4fX0UUSBme9vE9dfUgQqysvkU+hB/n70Iu/rQ+VdLiRA''@;'; put 'put ''Ar4moO0iv/KdJ+WZl9ehqw9DW/I9WTVjbHnoiwkB9sAWXw8ZIenrseVplCzq7SpdKyYFZr6/TVx/SRFQN/nCuTPlT2HF1LqYrKlXUtPPnS0yAmF8R1svtclf/M8vy4nTZ/l9LdD8LX8oKQtXBrv4uloxX/+5yJ6NpVuyiAKzQF8obqZ0CFRXVcjvfPojsvruFSxXVDrTzj0tQgLaJvJHaBH5fbSK''@;'; put 'put ''7O3rL8I9KM4hV9fBivmFuFSMMiSEwvZBDMc0IyG5eNqW576MkkVWaZYsosAszu8nR+1jAgZKnsydNc1N9qmqrMDJhXX1fDxdHFqJEtAWkafPNst/Q4H1U7jlUlgCyx5MytL7gm3F1LqYz3/DlLOHSrNkEQVmYb9T3FqJENCi6+9F0fXPfOS9rIlZInPO3SweApnal//wb9+TdZu3SYIJeQWfvMpa''@;'; put 'put ''Wx6GFbOyJrhWzEjMlEPbbPn1E7GC8/XDBikw/TALHEMgCdSOqpbf+8LH5a7ly5jwE8gZ5k4VKwFN7PnZcy/Lt3/8NF3jIziJSx9IyLL70KI8oC0kQ8jviSPX8+l/jkh3uzmCpEdm0xSYI8OdWy0BAmolmTCuUf74dz8rM6dNoSWzBOacu+h/Ahp3ueGN7fKPX/++tHV0+n/AAR5hZQ2smF/shxXT''@;'; put 'put ''DGwsppvs8zSSfdaVXrJPSQnMD73rAdmyY4+cOHMuwF9Z7pqfCGhW+ewZU+SPfuszMh5iky0k/TQ7HEupEVBxuX33Pvm7f/22nG+5VGq778v9dWMxVyEWM6BWTDfZ55TIs/8axT6WVrJPyQjM8WPHyD/+1X+Wvv6EfPvJp+T51zayJIUvTzfBG1QYnULmzZ4uv//FT8j4sRSZwZth7lExEFC3+Ft7''@;'; put 'put ''9ovGXZ670MLzv08mzc0o/3xCKmpQFzOgDX4MeMd/+bWINB8tLTd5yQhMtV5+8RMfcntEa+2z19/cIV//4c/k9Dm2BvPJeSbQw3AtmdOnyP+OmMypkybQkhno2ebO+YmAhqqouNy09S350reekOaLrX4aHscCAssfRl3Me4ObUa5u8r0bHdn482hJzXdJCEztNfs3f/IHKB0z3RWYOsN6wmlta5fv''@;'; put 'put ''wJr53K82lHxT+pI66vO0sxH0152xJCnHdoYR2P3O7g36Qzd5wjhYMj8pc2dOc49FFmLP02RwtSQAAnru17/nX90Az9XTcqm9Y9BzvXaXKa+25eJJU6xUabkx/XCg1IL/WmSUl5WHAtndxzBD0ttpyy/+MSb9ve/8bfDDHORjDCUhMOfOnCr//f/8A5ffwB90PfGoNXPd5q3yjSd+LufOt+SDMddZ''@;'; put 'put ''AgQM05GJsyy58wO2rH/ClDOHr+8Kmdg0Vj72vkdk5R23um461sksgQOEu1hwApFIBCFRcbeQ+lMvvubev94glqxOyrRFlrz6g6i0X1CBSZF5PVb5ev6u9yZk1gqsPaA9yrVk0Ws/FDm8vXSSfUpCYH7+8ffKR977yHVLxag1s6X1knznx8/IL3Glq5YmLiQwFAKxCkfu/WBCpi4wZd8blqz/cfSG''@;'; put 'put ''x9Go6ip5cOUd8oFH1khdbQ2tmUOBzfeSwA0I6Pk7Fou5RdS/8t0fyzYk9aRS1292ECt35IHP9kvT1LDseMWRt16NSDLO34AbIM7LS6MnWbL2UykJwxMUxNY+4aghJ/fa8tK3UBOzRDRG4AWmFrz+u7/8Y5kAq1EqlbruF2OgNfPrP/gZ43SuS4ovXEsghMj0xsmWrPl0SiJRuEK6Q/Lq90y5eOr6''@;'; put 'put ''VkxdRzhsytwZ0+Tx9z4kSxfMdVd7o2P02u3yMQmQwNUE1GqpHoFNW3fKE2gBefTkmZsm88y9PSnLH4U7PWJLd6sjL34rIh0t6sakyLyabn4fqXdx9ccSMmURuKfswGlM1ZSJhCPP/EtMOltLw00eeIF5y6J58pf/4XdvKC4Hfm20jEXzhYuuNfOldZsGvsT7JDAogUjMkYX3pOSWtTgvxtVSEpKj''@;'; put 'put ''O0TW/ySKk+TNf6SqqyplzT0r5D1rV0lT4xj3WKXbfFDUfJIEBiWQMRBo68cfP/uSrEedy55eVLi+yVJWKXL/J/pl9ER8a2E4MyKGbPyZATcmYjGTN//u3mT1fHmIBCbOsWTVRy0JG8ETmIrCrYn5FGpiri8NN3ngBea/++zj+OFefV33+GDHv8ZlGqhfqLGZas1kvbTBKPG5DIGySlvu+2hKmmYI''@;'; put 'put ''fpRs1/uRiBsQmIac2pddD1rtXz5pQpO8a829surO20RFZxLt62zbzmyGtyRAAtcQ0PO09hS/1NYhr76+RZ59ZZ2cbb54U6tlZjWL79N+2BCXhoXPwKuAOLkj20U2/cIcNFEv8zne5oeAiVj2Bz6TkHHTMRm4Vse/gVrCkZCcO+7IL/81lpXxodh3PtACs6qyHO7x/ySNo+tdt8lQJ0utmWebL8Ca''@;'; put 'put ''+bS8suGNoX6c7y8FAjB71DXa8iBOiuXVhjj2ZZsljB8Xz4TkV99DokFX9u6QCC5utDD7u9aslOVLF0hlRQWFZikcR9zHIRFQYanu8O6eXrf80DMvr5MjJ07dMNby2g2MnoALQ7hkK0bhO+uEXDGj2b7tLY689I0oWvtl/729dt18PHwCs29NyR3vx4V6EAuv43fBxm/Ecyi63nr2xiFUwyfon08G''@;'; put 'put ''WmDeccsi+bM//O0rpYmGg12tmRo0/hqujr/xw1/IxUttw1kNPxNQAiE3e9yW1R9PYA9x9rh8yZ2O4Tbk4JtqDYkM+Wo1Go3Iwjkz5dH775FlCPMoRyIaLZoBPYi4W1kTyLjCu7p75I0du+S5V9bL4WOnJAFr/1AWDWu57/G4NM3UsjiOa710P2+EJNXryAvfjkjrGVwwQnhyKSyBWLm2j0xIbaOq''@;'; put 'put ''McxNYTef962pm/zN5wUJZcF3kwdaYGrnlEfuv3dI7vHrHV1qzTxx+qzbBUjje7iQgBIwI47Mvg1X3O9xXPf4QCoqMq2UIVtfCsm+jcM7mcSQpDYf9VvXrrpLNJ5Ys89VaDJGcyBp3g8yAb3A1wt9FZda7WPz9l3y8vrNrrBM3iBx83pMVFAufzQpc+9QcZl2jV95r6snHSTpReXUIQjMEmvtd4XD''@;'; put 'put ''CN9ZtgahC6uhL5GwFTSBaYZD8G7Z8uyXymDNdA+4Eaadv80HVmBWV1W42eNjGobnHh8MuZ7kUjjgX8HJ7Xs/fRaF2jsGexufKyECboLPyqTc8kBIkv1Xl0JxTx34p79fZPPTYTmOAuzDXdR1PnPaJFl91+1yx62LZXR9nRufqVnnA2u7Dnf9/BwJ+I1Axg2ucch6cb9u8zY3eefc+Yti5RCbvOje''@;'; put 'put ''pCy5X4uwXyMuLwMwIADW/ciU47tZdH2kjgktvP4QCq/HKnARAIUZKJGJ3wS1y/7yKzFUGgl2GEZgBaYX7vHBvlx6Na1B5afOnHM7Q6zfQmvmYJxK5blImQ1xaSGLHPWB3Qzyq/fcFZk4h/ShdNHrPzfl1P7hi0xds7acHNc4Wu5evtT907aTGoumQpNWzavZ81HxERhorezs6pY9Bw7LrzdtRS3L''@;'; put 'put ''/aKPc13m3YlqD2uQpQwXuSB/bjDhYmom+c8NObLNlBQzyXNFPqzP60XzqscTMn0JrMioYTrYPA1rxT75kLrJt73oyLaXgt06MrAC8w/gHn/YI/f4YMdkxpr5MkoZfe+nz7ktyAZ7H58LNoEoijQvfwTuttthwRxEYOreuyIT8dx9+H3c8kxEju3yJri7sqJcFs+b5XYEWjh31lVWTWafB/u4C9re''@;'; put 'put ''qftbL5QSiYScPnferWP5OnqHHz911vUa5bq/Wqt28aqULFrliBmGsryOuNTtqMDc9DTip7ewVFGu3HP5/CQtWfQxS8xQ8EoWqZu85QxqYn45hjAA9xciF1S+/WwgBab+8P79fx1+9ni2s5WxZh4/dcatm7nxTRQ/5FJSBKIISF/xrhTiMK8vMBWInkJCSCCI9zuy5dmwHNkRfjuxIEdiGavmbUvm''@;'; put 'put ''y+1LF7lZ6FWVlVdc6BSbOQLmx/NCIJOwo8fnRcRW7oCV8nUUSN8Nq6XWsNTzqxeLdupZtjYps2+FuzWEMJYbiEvdHgWmF9RzX0cYhe8f+kJSGiYgy/8mc5b71gq8Bj20YaV9FuWKWpBMFtQlkALztsXz5S9QXF2TIQqxqDVTg83Vmvn9n/2S1sxCQPfJNrIVmDpc9+cS5xKtkXkAVa/2rotIf583''@;'; put 'put ''P6IZHBqrOWVik9yK74AmBU2fPFGqUFNTf8TVhU43eoYUbwtNQAXjwLhKTdjZd/g4ROVbsnv/YWnr6HSPUy/HpaWIboWHYfy0ECxFsIRl4WulwPRyBnJb16KVCbl1LdKyApjs42aT/xLZ5L8aXgJobmQL8+lACszf+fRH5L0P3+9J9ni205CxZh5FLTbtab5p285sP8r3FTGBoQjMzG4asGTqD93p''@;'; put 'put ''QyI70fc4X4HeGbG5ZMEcWTp/jkyfMtHte67HaiZmkwlCmVnhbT4I6LGmF+DuRTgu+NVSue/QMXlz5x5XVLZeakclmixU3xAHZ6B82PRFKVn2kC1V1TBaarmbLDdDgTlE2Hl8+6gGLVkUlzJN9sF2spzCPI7Iu1WbKLp+/pgtz32lDPvlraHBu1HmtqbACcwYEnD+7i//o0wcP879Ec0Nz9A/rXFE''@;'; put 'put ''ccQRaZvJH8CaqVflXIJLYDgCU2ngd9d1mfd02LL39bAc3prfziFhxLiNbqiTeTOnydKFc2X29CkydkyDVKD8llo3VXDqLQVncI/VQuxZxkqp7m+1Vvb29sq5Cy2umNwOF/jBo8elvbM7r8dZ3ThbFt6bkinz1d0N3+oQO8JQYBbiSMluG3o+uu+jCZmq/ckDVnhdfwOslCNPfykq7Re8icvPjmrh''@;'; put 'put ''3hU4gTl/9nT56//8++4JbKR+LAdaM7/15FPyxvbdhZtRbqmgBIYrMHWQes0aQucQB7XQzp90ZPc6U84eNGHR0Vfyu1SUl8nUieNl7qxpbp1NzUYfXV8rZSjoPtCdPlLfofzuPdfuFYFrBaWGJV1qa5ejJ8+4sZR7Dx51Swz19ce92uR11xOrcGTWLRYS7lJS3aAu8eytlgNXSoE5kMbI35+yICUr''@;'; put 'put ''P2KLgeDZIFkwlay6yTf+AuFSG4LpJg+cwPzEBx6VT33osYK6x6/3FXStmfGEvPDaRvnhL57HlXvX9d7K54uUQKTMkVsfTMmCuwcvU5TNbumVrLaoS8RD6F0usm+TKRdOGp4lOdxsDCoStID7ZFj9Z02fLLOnTZGpk8ZLQ10N4jer3I9r7KYKT1o5b0Yz2K9nBKW6vNVCqVnfbe0dyPy+ANf3UcRU''@;'; put 'put ''HpWjJ85IB851+XB9D0YXxlKZNC8lc++0ZNxkvAPfJ0fF5WBvzuI5CswsIBXwLVGUglM3ee1YnBMD1tknHDXk5P50a1LXrVVAroXYVKAEptp9/vbP/73MnTm9YAk+N5ukjDXz8LETbt3MLW/tudlH+HoREUjXwYRL7h7numWKst0dFZpm2EA5IwdFnpEIhDIpl86NTIZheVlMxo8d48Ztzpw62b0d''@;'; put 'put ''B5e6CtFYLOZ6CCg6s53Z4nxfRkxm3N26Fz09PUhi7HRLCR08clwOHjvpWijbO7pyKn4+HEIGSg81TrNlHoTlxFmOhBHTZqdyt3JRYA5nNvL7mdseTsqiex1P5je/Ix3a2kM4vff3iTzzTzHp7lAFE6wlUAJzEiww/++f/xEKoaP3c7YR3QWaz0yNt2fRO/eJp17wpGhwgYbOzdyAgJcCM7MZTQIK''@;'; put 'put ''oU5ab7stpw5qPb6wtJ5GweHMG0bgVksh1cOiqaJTrZuanT5p/FjEcY6WqsoKt/mADku/d5nuQmrt5OJ/AiokrxWTOo+9fX2uJbL5QivqUZ6RIydOywk0mGhGTKWWERqpc6y2ehwz2YErPCkT54VEyxDZiGXz6pRPgem/Y7ZxkiUPfDYpEfSpGMnzYD7IRGDF/NX3DTmaQ6e3fIzLi3UGSmA+uuZe''@;'; put 'put ''+b0vfMIX7vHBJidjzTx09IR880e/kG274A/lUtQE8iEwFYhey2rdTG1b19dty2kIzcNbDblwIoxSQ/5ApolDtTXVEJ2NSKobK9MQx6kCtHF0HZ4fJeWI51RXqgqRgcIz89gfe1E6o8iISL3NWCV1LtTN3dvX77q6my+2yqmzzXLyjP6dkwstl6Srp9cNjRhpUobhyNgptsxCjOXEWSJllegknsyu''@;'; put 'put ''9NBQxk6BORRahXmvzv3azyVk7FTIy4DVxNQ4zP2bHVn/k+B19QmUwPyT3/ui3LPiVvR+RvNnHy9qzexH0Pvzl2MzvWiB5uPdDfTQ8iUwB0JzXefoLpLAYX3huCOHUKT9LARn3OMamgO3Odz7Kl40gaihrtYVm01oazmhqdFtbzkG/dNrRlVJGVzs6mbX92bEprrb9T5jPIdHXlnqonGRumQEZOZ5''@;'; put 'put ''tSr3wSLpCkm4s1U4nm9pdV3dZ5svuI870IqxHzHjflsiMVvGz7JlJhJ4xk8NSaRMs2+9F5aZ/TZhUdryTEj2bcbFHFtFZrCM+O2ilUnUxNT42mC1jtT4+84WR57655gkE8FykwdGYNYgNuzv/usfuz9sxVBMWk/8+iOrcUxf/+HPZMeeAyP+BeYAhk6gEAIzMyrVEBqjaSHQvf2cI0d3m3Jyjykd''@;'; put 'put ''LSMTp5kZVza3eryXxaJSO6ra/Y5qiaTG0fVuqSTNXq+HxVNd7eUQp2r5VIGUEUeZ5KKMyz1zq4I0yEtm/3UfM8JRb/VPX8u8nrFCqiVSs7XV4qgXrS2oMdlyqc0Vjxdb2+QiHmvyTWd3jy8skjebu+p6W6bMtWTKEktGNxk49vMrLDPjCcdMefM5ZPa+jl7kCf9/tzLjDvpt3Vh09vl8XKLlOBEG''@;'; put 'put ''7KuvrUyf+2oUyZ3BKlcUGIG5fMkC+S9/9Du+Se7J9svuWjPjcXnucmxmF07+XIqHQCEFZoaKXuMaEJp6UurucKT5aMhNCmo+HpaED62amXHf6DaGuOnKigokEVVKHcTmOMR2ahZ7fe0o192uF5DaAlato5qApK73KGreZsTWwHVnrKAZATpQkGaeG/j+wZ4b+PpQ7mdE37WfGSgIM2Ix81zm8cDP''@;'; put 'put ''6Jj1QlnL/miXsP7+hPQn4q4FsqurxxWJrSgHpHV222CRbEPiTXtnp3R190ovPDhxH1oiB+7f9e5HY46MnmzL9IUpWC0dqarViEsk76gr/Hof8vh5V2D+MiR7NxoUmB6zzWV1eiRoHOb4GfCRB9BNvgVdfd4KWFefwAjML3zs/fLh9zzk2/jLG32x9IdGfyw1NpPWzBuR8t9rIyEwMxRcZwoMLOEw''@;'; put 'put ''LC1wGbZfQJmj/SGUvQhJ+9mwpHwSq5kZby63KsJUhKq4VAtnNdpfVsPiWVUFUYpSSlUQn3rfFaF4PSNEowhH0e9WBIxUlCorXZcmLelt5k+/g3o/I/oGik59buAy8DV9Xh8PFLV6P/Onr6UwESoSUyoY9RaP47ioVGujuqTVbd0HUaiJM92wPnbjtqcHf3Bp62N9Xl+PJ5KucLQCljylZYZqYZ2a''@;'; put 'put ''NM+SSbNTUjcOc4VwNHWDj4SQoMAceLT76/78u5Ny+yPBc5NruaLThxx54d9w4F9zvvHXDAxtNIEQmJps8D/+5Pdljo/KEw1tGtLvVmumZm4+89Kv5cfPvoQfF9Qv4OJrAmmBaaFM0fDrYHqxg65VE3GayAtC2QtbWs+F5PQ+Q84eNqT9IkoUW1eLJC+26fd1qDDUdpkqKvU2ghRUFZb6PVOxqm54''@;'; put 'put ''FaDu87hv4P1agSKzpD+f/mzmpG+hm4i6ogfWeFQxmYD40+fSVseUKyRVTCaT6fsqKlVgaiykPqf3rxWqme2Wwi2mREY1WjIB1qjxc2wZPR5JO2gHiOiPglorB2NNgTkYFX88VzvalrVfSCDBCzoMx0qhrNr53ntN6OzvseVpxGH2dAYnLCMQAnPCuEb5n//lPyCmMVr0J233Rw0/egcQm/nNJ34u''@;'; put 'put ''b+09mO9jm+vPgUAELr0lq5KyZE1Ikv3+MBnqBbDGamoqerzHgtg05MzBkJw7Epa2i5p5W3piM4cp5kc9IqDflfomW5qmOzJ+puVaLcsrTJyzCxNbme1uUGBmS6rw70u7yRNwk2PbASy6/tK3EFe/LzhxmIEQmA+uvEP+/W99xvfZ40P5OqpbT62Z2gHoyadfHMpH+d4CEtAfzcWrUrJ0DSyYPhGY''@;'; put 'put ''A3dfC/maprp+ITZh2VSBqTGb546giPtZXDX3BudqeeB+8/7IE4CxGDGUSNCZ5EBUWtKI2pVV9WiPF0NNV3i/1Rqst35bKDD9NiNXj2cB3OTLH4X1El6BoFgwdQ+1XNHO1xx549nglCsKhMD8w9/8pKxddXegBKYecGFYMl9EKaO//+p33dgwfY6Lvwj4XWAOpKV2SwNudBWdVkqk+5JaN9EH/Sha''@;'; put 'put ''U54ypas13a5y4Gd4nwSyJaDHVeUoGzGUtluvcgySdWrHiJRXIeMdFzl2ErGqKiqzXeEIvY8Cc4TAZ7lZtYKv/SyyycuC5Ykx0YnqwklHnv0SOqW5lZCzBOLjtxW9wFS3+N/9xX9EoedxbnyTj1kPeWgaj/S3//w12bRt15A/yw8UhkAxCcyBRNxTM+qvhdWVDh9lf78tXZccaT1jysVTIbdzUOcl''@;'; put 'put ''uP3jeJ0LCQxCIBKxpbJORMvHjJlkS8MEW0aNTgvKsApKnMDUSjkSiTqDDDfrpygws0Y1Im8Moej6Q59Lyli0CRVEJfn9giVbSOplSiYcNw6z81IwzrtFLzBnTp0kf/Onf+hmgAYpaF5jMc+jq8b/8X//vVuKJNuDlO8rLIFiFZjXUnKtmxCb2jlIY5v6+yzp7RBkpqvgNORSc0g6kKXe14NEjBJM''@;'; put 'put ''GLqWV6k9Nk0HiRW21DSK1I+33VjKukZHKmsdtGpEghQuVhyrOAXltXNJgXktEf89Xnp/0g1LCpqbPIIarK98PyTH3kLR1wAsRS8w3/3ASvnfPv/xoixPdKPjx0TW67pNW+Vv/+UbN3obXxthAkERmNdi1KvpEESDxm+qjcCCe7OvB3U320XamtPCU0VnF660412oF+iP/KZrd4OPh0HAjDhSUenA''@;'; put 'put ''GgkX91gISlgoa/Cn1spyFLlWV55mkLkxlBCVmqQTpIUC0/+zOXZKSh74TEq0GkGQDj+Nw9y93pZNT8X8PwlZjLDoBeYf/+5nZfXdKwIXf2mgbMo/ff378sJrr2cxjXzLSBEIqsC8lqdKCoHW1DI/IbVyQlWkIDrjKK3RC4HZAfd6J8ohdeBPYzl7ukIS70bXIQrPa1H65rEBq2SsDFbIOojJBgdi''@;'; put 'put ''0pEaiMpR9RCYNfoa6oWqmMTVhpPCRYbW38T/QfpBH2wyKDAHo+Kv5yJRRx7+YhzxvojvxbkoKMdkJg7zuf+fvesAkKo6u2fq9mVhadKLgKggCAFEaVKEqMRobFEsPxr9TTEaY/1jS6ImakSCYk9ETSxYwQIiUhRQmoICgvTey9Zpb/7zvWUImIXd2ZnZeffufbq8KW/uu/fcO/PO+8r5ns6gI8n+''@;'; put 'put ''1XUW8HH2RmmCKaLLj933ezRv2kS7+EvRwLzzobHYuIXmIrM5FoG6QjArmwD750/4x0FLp1g9o3Svh4KWrcVZVuShm53Ec7cbxXtJPPe6+Jxu9mLGGpW5qRXJUHb5kNlShoDA62WsZEZuFHkFTMKhS1tIZB5JZC6JZQWRpP4nM7tFi0+skTHLpFy1dblwxwOwIZjxoJW+Y08bGUKnXiSXCiSOVRcl''@;'; put 'put ''+b6yYBfjMP38vVQ/DlNpgqlr/KVUFFm6fBXueeTJCqtBdVenOa7WEajLBPNoYNuUkf8cQTxJVSxaM0XKKcj6AeXllEg6IJZOkHSSgPJx7HmAcZ6BUrpgwxWE52jnMa/bxkXGP1rIzAIyKD6dXc9Cdj7lgbjPpUs7u4DPs/leLv8yaYEWFQFexYRISka3JBJC3NwGzEMIGIJ5CApHP2jNcqIDLuJN''@;'; put 'put ''alQvuSKp6jPtJephLlNfD1Npgnn24H749ejL9Iu/9HjxxqQpeOnNyY7+gpvOAYZgxrcKbIMl/7H1Oe1/SJLYhCTo8TrBKjcspxikXFIp7ISiAPfltHiW0Q1fStIpj4OyLwHCAR7HYyMhciT+CWkSd64OmwzD440yy59/JI9+ksPMbBJJEsUsWiOz+ZdLi2RmHl3ZfD2DsZHiNpQkATevSzaJFFxp''@;'; put 'put ''JRZhIEnAERZpiGTVq8MQzKoxcsIRObx5GnFNObLzeNMka90JnUpCHyQOc/H0KBZOUV8PU2mCefN1ozC0f1/t4i/FRfXHMU+bKj5J+LKmugkhmKcMDOOUMyusc6k+n+7t2/SQ/0hWslw13EJC+X/sdYtEyWKN6jCJU9gmli6EKe0RJNkM0TIaLHfzMd30tJAG5LVyPqbUUohup3CQf6xiJMdLNSPL''@;'; put 'put ''kox4WvKoCRqReCe2Lao60YNZ8rYqRXXjoFi3znb3sxmGT9N6K8/lsdQ4j3I8/GNiqNTY9rIapawbL//8GSSG3EsspJe6fhlZFnx8LNZGv7zG432Mg/SQPHp9UkedbUs9UG5CqKOMixQrpC1YLiRdl6tsGhe6IZhpBD/OUw+5IoDmHfghfgl0Wfpiwdy8ysJHz2dU/KbEiYmTDleWYEr9cYm/bNOy''@;'; put 'put ''uXbxl9t27MKtfx6DomKaaczmaAQqapFbrEUuRMZktNTWZNkU6yDREtIlm9t+zndihFRelAMlN4XMS3JU5B8hZBYJakQIWUTqtHMvx9jvSz3sCqJm8T2JKY0eg2TKRY2foLWRpxViKScUQsm+CMEUUul2W/Zzed8jfeSf/X6MLB68Mh66QNp9kc4c7JP9gP2wXzH/pBoBQzBTjXDy2u/SP4Qew+Sm''@;'; put 'put ''UB83ufw2lBywMOmJDOUrrSlLMFtSWP3Ru2+GlFTUSf9S5IlmzV2AR556MXnfQtNSyhAwBDNl0Ka04UOe9IMPSPsqyOhhZz10zGGvHevhD62HRzw/+OSI147VmHkvbQgYgpk26OM+cdM2EQweRbkihpJocwNm34O68OFzXmxfz7tShTdlCeaAPj1w269G0w1G35dGm8gTPfvyREyeNkujUek7FEMw''@;'; put 'put ''9Z1bM7K6iYAhmOrMu4SUDL8myJKkZGW8e9OFZEoc5udvA8vnMZ5G4U1ZgnntZefjgrOHaZXgIzFcpWXluPvhJ/D9uo0KL6u603VDMOvOXJuR1g0EDMFUa54HXBxA2y5URtBIrkiS9VYuiGL2RLUTfZQlmA/e8Rt0PbETs0gZua/JJgRz3cbNuOPBsSgr18syq8kU/dcw/FlR/GhECCf0krrdJgbz''@;'; put 'put ''vwAyLxgEFEPA6/dg/ocuLJ/rsZPCFOt+netu59NC6H22XnGYHhaz2L05iklPZVYk8Ck6q0oSzHp5uXj8/ttQvyCfgfkVwfCK4n9EtyX+8pPZ8/D4c68c8bp54lwE/HTR9D47jI49DcF07iyZnhkEqo+AaIXOm+zGyvkeW22g+p80R6YDgYYtwxh2ZYRqC/q4yEUpIlAaweTxWSzPa0eIpwPahM+p''@;'; put 'put ''JME8sWM7PHjHjXZyj04JPqY8ZMLrudYbEILZ55wwOvQwBLPWwTcnNAikAAFDMFMAagqbrIjDDDAOk7IMGsVhyjqc+k9KFq2kFIWim5IEU0eB9Vj85f/9dRzWrN+k6HKqe932Z0dxxnkhtGEMUDhoXOR1bwWYEeuGgCGY6s3ogEuCaHMy+61RHKYk+sybBHzzmbqJPkoSzBuvuQzDB52hlcC6ib9U''@;'; put 'put ''70dNemwIpprzZnptEDgaAoZgHg0Z577e5Ywwegyni1wjPUxJ9Fm1MIpZb6ib6KMcwfRQVfmvf7gJndq3ZVk5lvLQZBP3uOhfPvr0BE1GVDeGYRPMn8rds9tYMOvGlJtRao6AIZjqTfBx7cMYfFmElbP0icOURJ+ddGZ+8JSfxR/UjMNUjmAW1q9nJ/jk5eZol+Dz3CsT8d7Umep9u+twjyX+p+95''@;'; put 'put ''EbTtKqUIjYu8Di8FM3RNEDAEU72JzM5jXfJrA8gpYF1yTeIwJdGnvJgVfcZnoPQA40sV3JQjmCd1bI8H77zRJpc6JfgEgyHc99hTWLZyjYLLqO522ZYpGh7GCb1Zi9zIFNXdhWBGrg0CQjDnvOPG94tNFrkqk0oVTAy5OohmbSm1XvG/Kl0/ej9ptJTQuY+eZ0WfdWpW9FGOYOqY4OOm23/rjp24''@;'; put 'put ''7U9jsL+o+OgLzrzjOAR8GVF0HRhGtzNJMMuNBdNxE2Q6ZBCIEwE3XZOzJ3qwbikJZlhN12ScQ9bicNEjPvmMKKywpVVFn5lvuLBqgZqZ5MoRzBuuvBgjzxqkVQUfIZiLli7D/Y89o1VddS1+taoYhMcfRaeeYfQ517jIq4DKvG0QUAMBcsqZr3qx8TsPrIghmGpMGnB89zBOv4C62Jplki+ZGcWX''@;'; put 'put ''H6iZ6KMcwdSxgo+XAusTJ0/Fi29Qk8BsSiHgZlB5i44WBl7KilKKBmIrBbjprEEglQiQT4aZOzp9At2SGzy84TcEM5VwJ7PtwuYRnHVVCF41uVilUHj9bmxYbmHahMxK33f6i0oRzLycbIy5/1Y0KmyACOUItNlcbjz61D/x2ZeLtRlSnRmIK4rCJhaGXhWEP4eB2BYDgMxmEDAIKImAy+NCyd4o''@;'; put 'put ''Ba79OLBbyKUhmKpMpCRcjvhFAPUK+TusSaKPm+tx306WjHwyQ8mqUkoRzLYtm+ORu2+mFIHcWepzIS8pLYMIrK/buEWV77Lp52EIZDGD8czLgmjc0s2YLX1Klx42RPPQIFAnEJAEn62rgRl0kZeXqJm5WycmqpJBCicYdgUTfTryTd7o68AQmOODQAB4/wk/ivaptx6VIpin9+yGu377CwJOxDXZ''@;'; put 'put ''JEts/aYtuOPBsSgtK9dkVHVrGL5MCz2GRnDSGSbRp27NvBmtbgiIuPXS2cDiaR6qQqh3QddtPuIdT8/hQXTpR36pUaKPWDE/et6DbWvVS/RRimBe+pPhuPLi87RK8PEw/nLO/MV4aNwL8X6XzPEOQUDiMFt3ttDvYgZvGQOmQ2bFdMMgED8C4iKf9ZoH65eZBJ/40Uv/Jzr0CKPvT/VL9Jn5OjPJ''@;'; put 'put ''FxqCmdIV9rvrRmFI/75alYj0eLx4/b2P8PJb76cUO9N46hAQ10y9BhYGM8C8XqGLmac6OGdSh5dp2SDgRASEXBbtAab904v9eyjYbeIvnThNx+xT41YRDL0yDK9XDxe5DFZqki+eHsXCKeplLyljwRQpn7/e9Vuc0KGdViUiwQSfvz39ImZ/seiYXxzzprMR8GVY1MKMoOsAI7ju7JkyvTMIVI6A''@;'; put 'put ''jxfyZZ8DC6bSPV5u3OOVo+TsV7Pzo/gxE32y85mexft8HW71JWxj9WILM17LcDb4lfROGYKZn5eLscwgb1C/QKsMcom7/MNfn8CaDSw6ajZlEXDx16xxS1oxR1EmQxQljKtc2bk0Ha+DCDCZwmKEy7SXvdixnu5xy2SPq7gK3O4oho8OoFEr9p6/wToQTEk827HBYk3yTOXGowzBbN3iODx69+9o''@;'; put 'put ''+vZqk0EuCT5bd+zCrX/8G4pKSlX8Pps+H4aAP9tCn7ND6NDDbcpGHoaLeWgQcDoCYiVasySKOW97ESgz1kunz9ex+tf/oiDancLikeGIcoSssnFJkk8RpbMmM5M8oJhlXRmC2bt7F9x98/UIBilorckmcktffbsC9zwyXhvSrMnU1GgYYsVs0pqSRZeH4MvgD5zRxKwRjuZDBoFaRcDNuOkwxdVf''@;'; put 'put ''8WLrGje/t8Z6Wav4J/lk3QeHcMogWi+pla2DBVOkisIh0cIUbVa1apIrQzBHDhuIG666RKsMcjcJ5kfTP8P4Ca8n+StmmksXAiJZdOqQCE6mVIapTZ6uWTDnNQhUHwE79nIukyg+8iFYbshl9ZFz5pHtu1WUjHRZ+tQkFyvmlBc8vAFSK5NcGYJ5/agLcd6IwVoRTJEoeu6ViXhv6kxnflNNr2qA''@;'; put 'put ''QBT5hYzFvCKEgoZGeL0GAJqPGARqDQG3102rkIXpL/uwb4e4xg3BrDXwU3Sixi0PZpL79Mok//RVMNnHlyLUUtOsMgTznpuvQ+9TT9FKZD1CF+pD457Dgq+XpWZ2TatpQcDWxTw5gv4XhCtcNDr4adKCpDmpQSCFCJBLCp2c/ZYX67/xsAqXIZcpRLvWms6tz0Sfa8qRnVshNKXDz69IFc2fEsXX''@;'; put 'put ''09WSKlKCYEpijyT4tG/TUiuJIikRKRV8Nm7ZVmtfPnOi2kHAli0aEkbXfi6T8FM7kJuzGATiQkASe5bMAr76xFTtiQs4hx/s9Vn48bVBFDQlwdSkJrkQzGVzLcx5Ry2pIiUIZv16+Xjsvt+jQUE9bSSKJIN809btuP2BMSguKXP4V9Z0ryYIZLNG+ek/C6JVJ7mARWrShPmMQcAgkAIEhFyu+9bC''@;'; put 'put ''3Ld9KC02WeMpgDh9TZJUDtWsJrnX78b65VF8MsEQzKQvrNbNKVF07y3wMilGqqbosIlw/JLlK3H3w09qMyYd5iWpY2BWeUFDCwMuCaGwmQfhoCGZScXXNGYQqAECQi63r4tg1kRm5e4St7hxjdcARkd/pO/IIDr0Zhc1qUnu8bqwa4tFqSLRwlRnvSphwTy1S2fcd8sNCIepJaHJJgk+02bNxdjn''@;'; put 'put ''/6XJiMwwKkNApIsatrDQ/8IQ8iXpJ2QU2CvDybxmEKgNBLx+D/ZstTDrDS/2bhODRW2c1ZyjthE4ZVAI3QfrI1UkWeTFey28R6miYJk6UkVKEMxhA07DzdddqVcGOWuQ/+vt9/Hqux/V9nfPnK+WEZDqEo1bR9DvggjyCt3GklnL+JvTGQQEgRi5/OwtD3ZvFnKpjiXIzGB8CBzfPYTTz+fdgyZS''@;'; put 'put ''RS5qtQbKK8TWi/epE9KhBMH8+U9H4IoLf6IVwXTRRT72uVcw/fMv4/vmmKOVRMAuJdkqgr4kmQWNXIgEjSVTyYk0nVYSAdstznJ7c5gxvne7sVwqOYlxdLpZ+zDOvCwCj0cTqSK5F6LqzPvP+LF7i7FgxrEUqj70N6N/jh8P7q8VwQyFwvjT488wDnNV1QCYI7RAQEhmg+Oi6H9RGPWbMDzIkEwt''@;'; put 'put ''5tUMwsEI8MIs5HLjCgvzJnkZc2m0Lh08W0nrWoPGFoaOLkdGFudbkzAIDzVbP37Rg00rDcFM2kKRhu5lichep3bVSgOzqLgEdz40lpnkO5KKlWnM6QjQXU5LZo/hFpq1ZbUficnU5AfQ6cib/tUtBMSt6GHs2spFUSya4kPJAcrWSN09s2mPQBYVPEZcG0BugVsrqaJP/02x9a/UEVt3vIvcQ1fy''@;'; put 'put ''o/f8Dse3ba2NBqb8yG3dvhO3PfA4DhQVa/9lNwP8IQKs9tMwiu7UyWzfBRDBfVO3/IcYmecGgZojINYeqd+8ZIYb384RBQd14tZqPmrzyRgCumphzpsUxTefqSO27niCmZuTjTHUwGzcsFArDczvVq+jBfPv2owp9sU2++ojIHfZJ54W5p8Fb4bJMK8+cuZIg8DRERDNwOK9UXw13Y3vF3thRYzV''@;'; put 'put ''8uho6fmOzPiQ/wmgWRu6hyr+V36gIrb+9Ywo5n9oCGbSJrNRYX2bYObm5DAhTI/ECJEomjv/Kzw47vmk4WQaSj8CYm1v0awJ2rZqjhlzFlSrQ76MKFqfFEG3MyOsYe6i1cW4zKsFnDnIIPADBFx0h4tLfOv3Liyc5sbOjW56Bqoml16vB5kZfpSUlhtN4h9gqvLTARcH0LaLC9GIpUUUkhDMFV9E''@;'; put 'put ''8dlbhmAmbV22a9UCD//hJv5w6COy7vX58MG0WRg/4fWk4WQaSj8CebS2//LqS9H1xI544PFn8c1331erU5L8U9jcQrfBEbTsJO5yJgxGTGBmtcAzBxkEiICHVstwuYXl8zx0ibtRVlS9RIiC/Dxcf8WFOOH4tviUih6vT5qKsvKAwVQDBHqfG0LnPvw91URs3cc1vvYbC9NfyVRmdhzvIu92Uif8''@;'; put 'put ''8dZf6SWyTg3MV96ajNfem6LMQjEdPTYCcgN0Conlnb++Bn6/D6vXbcBD417A9l17jv3Bw97NzLHQqVfEdpln5Rlr5mHQmIcGgUoRsBN5pMrJJuDrT1l+d5WXxQyqtlpKYxILf93lP8MIKpR4mBAk1dXGv/gapsycg2AwVOn5zIvqIKCb2LrX58bWtRY+eCZDmWQ1xxPMAX164HZetMvLy9VZ2VX0''@;'; put 'put ''VFzk41jBZyor+ZhNDwTycrN5sboQg/v1sdeqXKwWLlmGR5+eQNdb9WvNu6nb1riVha5nhtGsHbGhIdNYM/VYI2YUyUVArJahsiizxF1Y9pkXxfuEWFaPXEpPenU7GTdeezmyMyvqO2dkZGD5ytWUj3sWe/cfSG5nTWu1jkCnPmGcdq5YMCNauMilXORuVqGaJOUiFSkS4HiCOXLYANxw1aVaaWBK''@;'; put 'put ''1vDDT/4DXyxeWutfOnPC5CMglpDj27TEPZTTys/LtRO35DVxcn8yex6efmkiQnGWOc3IjuL4U5kA1NdCfn0XPy9M07jNkz97pkXVEHDzQis0cttaF5bMcnPvqbbVMjZWuSEUb8MJHXgXd7BepHxng6EQ7vvbU1ixai3VHfSI+Y+Nua7t23Zl9bQLI3BpUs1HykUe2BXFJJaLDCmiiuB4gjnqgnNw''@;'; put 'put ''Gf/KyqpvBXL6FykQDOLuh5/EyjXrnd5V079qIJDh97MQQD9ce9kFR2i1ygXL4sXrnQ8/wUtvvh93AoHEZtZrZOFkksy23SIUjBbpFZMEVI0pMYdoiIC4w70kl/sZdbJirgurFnkRKK2+xTIGiZcepNGXnIezBp0BNnnE99LP7/LY517GjLkLEDBu8hhkSu5bdIxgwCVheDWp5uPmYi0psjD5yQyU''@;'; put 'put ''Fashu+V4gvnLqy7GucMGaUUwi0tKcceDjxuRdSV/tv6702K1vImutt6VFAMQkhlmFuMbk6bUOObW66sQZz/xDAvN20fh8Zn4zP+eBfOKtgjwwuojsSwttrBmCTNp57ntijw1cRN6GSt9+QVn85oykHGXzDI/aL2MYZeZmYm3PpjGGPn3UVqmT1hWbHx1ad+oZQRDrwzDx99PHXw/dj3yAOuRj/Mz''@;'; put 'put ''HMQQzKSs5VtvuAqDTu+tTQymEI7tO3eTYI7Fnn37k4KRaSS9CDRv2hj33fK/aNKoYaXJaBKPKdaQf7/9Ad7+aHqNOyuSRs07RHBCHwtNGKfpYdC3sWjWGE7zQacjQOuij2s8QJ63aQWwfK4HOze7a6xrGSOXI88aRMslQ1h+QC4FDonDXPj1t3j4qRdNEQynr48q+lef5SKHjQ6wXKSYqas4WIG3''@;'; put 'put ''uWS59hmDSQvmvp3VU0lI97Acb8G8/5Yb0JPB2IGAHtIRQjA3bN6G2x8YY+6Q0736k3B+uWh16dwBd914LV0xR5fSknkPMdj8dVoyJ07+uNKLW3W748uwKGdkoSMzzpu2isJtiGZ1oTPHqYDAQYtlIGhh80oXvvvCg+3r44+zPHyoonV5+fnnYCQtl+JqrIxcyvHiPhcDwL2PPmk8TIcDqODj3PoW''@;'; put 'put ''hl8TQHZuRcyu8hyTBJMLFx8+68fOTYZgJrwk5aL88P/dhM4d21M2Iphwe05oQKxZK75fa6r4OGEyktAHv89LC3sv/Gb0ZVWuUZl7SfZ5mfGYk6bOSDiJQCyazWjR7HCqhaZto8jIFHc83UFGQzMJM2uaqG0ERCjdy78A9Sw3r3Tju/nuhImljCGLWeJXXTQSwwaeweQgfj8qsVzGxirXnHAkgj+N''@;'; put 'put ''eQZLl69K+Dsaa9fsax+B7FxaMK8pR34Djzb1yOXm6KMXvHZiW+0jGv8ZHW3B9FOQXMpEtmrRTJs65EIyFi1dbmcqxj9d5hNOQ0AuXucNPxNXXDiyWmEcMv+lFHKe/PEMWjKn0XWe+I2Tx2ehUXOgffewbdnMLmB8DnOBwhQY1sE15LQ5N/1JLgKSFS4ZsqX7o9hIV/iqhR7s3kKLZVhMNolt9evl''@;'; put 'put ''4xfUuuzbsxuJJSu6HINcxs7k43XnEbrIP/9ycdzqD7E2zD79CPgzoxhOF3lBE1owOe/KWzAJqdfrxscT3Nj4nTf9AFejB44mmLE65EeLbavG+Bx3iGhgzp63AA+Pf9FxfTMdih+B7KxMJg2cg/N/PKTaiWhCMoOhMGbOnW8nE+zdXxT/iSv5hJtZ53mFFlqdGEGbkyw0aFbxg2SsmpWAZV5KLwK0''@;'; put 'put ''xEhGuFSt2rvTwoZvPFi7xI19u6pX3rE6nZfY6F//z6U4sdPxjF2jFmI1yKW0K3GYT00QwfW5DM1K/AawOn01xyQfAY/HwohfhNDguCgJph732r4MDz55xYV1Sw3BTHjFyN3nY/f+Hg3q17O1BRNu0AENCMGc8unneOKfrzqgN6YLiSKQk52F0Zeeb8sUxSOlJSRTJIwWUYz9pTcnY93GLYl25YjP''@;'; put 'put ''+/xRNG1DsnlSGMd1iCJfrJo0CEWMC/0InMyTWkSA68/jcdNaCQTKLGynjuXapR5sWulBeYn0I3GLZWw0XTt3pFfhXHRq36bSxLvYcZXtJZP8H6+9g/emfIpyQzArg0iJ19zuKM66OojGbcguNXHmSD3yT19zYTUlulTYHG3BbNqoEI/ddyvESmRpInorQeQig/GP195VYX2YPlaBQG5OFq4fddGh''@;'; put 'put ''Cj5VHH7E2xLvJURz3aYteHniZHz51TdHvJ+MJzwFsvMYo9neQuvOEVYJiiKnHpOR+J8hm8lA2LRRFQLi/pYqJKJ4sG8H6N7zYMO3buzZVvOM8KOdUxLthvY/DRecPQSNGzaokWEiKyuLcdKT8eb7/eqQVQAACklJREFUH5u65EcDWoHX5bdvyNUBNBOCqYkF08vqVQunulgW1afADPCWsfvgnxJ6''@;'; put 'put ''Z24tmzWlBfMWO7Ovuu4NZ47kP73ysA75y29OYjbx1P+8aB4pi4AQTCkROYQXtZqWM5Wbjn0HiuzEn/c/mR1Xacl4gJM7+uwCSh21i6A5s9AbtSTZzHezri3jNY1lMx4ozbHHQoDrSZIRhFTSM40DuyPYtoakcrkbO9Z5bNkhublK9taEBokLzxmK/n16IjPDXyNyKX0SgvnqOx/aig9GCzPZs1S7''@;'; put 'put ''7Q0eFUCLjjwnq6A5lujEAYkQzK8/BUmmP45Ppe9QRxPMDm1b4S93/da28mhDMEkmnv/Xm3h3yoz0zbo5c9IQSAbBlM54aHkRQfZFS5fh37y4rV63MWl9rKwhqRKUW2DZ7qPmrHjRRMhmfTf7IVpr4krXxKdU2eDNa8lHgHzRS/e3i+tHLJVFrLazbb0bm1eIxJCLLnAhlMknlbGB/KjbSbjkJyNw''@;'; put 'put ''PK8ZDLZMyOMlLvIXX3+Xv9GfGgtmDGBF9wMvDaL1yew8Ex51IJhy07ZmCTDztQwlZsTRBPNkBmf/+fZfJ/Rj4bRZcPMKPu6Ff+HjWfOc1jXTnxogkCyCKacWq44QzW07dtmC7J/M/iIpWeZVDotkMzsnioYUb2/GSkGN20RQ0BDwM6Bc4kSNK71KBOveAeSKHlopXbzgybotL4ngwE4Xtq0jqfze''@;'; put 'put ''hV3U6Qva1X1TRyoF9IYNCmxtyyH9ToPUFw9TBizRzcRgJoqgcz7f/6IA2nVlMhlvmHUhmGtJMGcYgpn4Iut+8gm4//e/TMqPRuK9SVIL/DF+7JmXMGvewiQ1aJpJJwLJJJixcdjWTIqyL6Q1U0TZv1u9LvZWyvfiKfDz5rheEwvHtWGiEN3pDZqSgNZjcgbzhKK0bobpbhKXk9nqEALkieL2lnhK''@;'; put 'put ''qYITCkVQvBfYs9Vtk8rt61gjfIe4xLlIamHz0RPUp0dXnD9iMNq1aZmw1fLwLksW+fP/fgvvT5vNJB89CnwcPr669LjfzwJo300fginfvx0bLXzwdJYS0+hoC2afU7vgDzddX6WAtRJIH+xkhBfmR8b/A/MWLVWp26avR0EgFQRTTiVWIYnN3L13H6ZSLmXKjM+xa8++o/QidS+LKz0730LDFrCz''@;'; put 'put ''0huyvm+9hlFk5njZR8Y1GcKZOvDT2TJ5oodrMGahDAdIKA+4sG8bbOukuL33bmcZx1LpZGqtlD+EoWO71rb27I9Y4U10aEOh0A8PSei5EMzxL76GqbOMTFFCQDrgw6f/JIjje3F98oZdh1tiqUe+b3sU747LdAC6VXfB0QSzX+9Tcedvrq1x8kTVw6/9IyS27YG/P2eLrdf+2c0Zk41AqghmrJ9i''@;'; put 'put ''zSSTw9oNmyjOPhOfz/8qrSVG3R5qbTaIorA566G3tlDYzEJ+IQlnNqtliIWToZtyExUVC6cOv+ixidB5z+tvzN3NKEqGJEVRXkZCua/CKrlroxs7t7hwYAflhMTtHa1dQhmD/rgmDTGc1XjOPP1HqF9Qz/ZspSI23xDMGOLq7/UkmBYJprFgJrw6B/btidt/dU21BawTPmEtNBAMhvDnsc9iCcuQ''@;'; put 'put ''mU19BEQH80pW8Rl51qCUrlOpLiJlJpetXE2iOctOBgpwLaV7k8x0qfnboFnUzkovpKhxfkOL9X9JWvwkx5JwIUlDQjjlz2zpReAwy6SQSU4Ps7ojKD0AFO12UTqI8ZMkk/tpnSzex9Km1BlPRcZ3PCA0KqxPUtkLQ/r1QdPGDW3B9Iikp6doMwQzRcCmoVkdCeaebRYmPWEIZsLL6dyhA3DDVZdo''@;'; put 'put ''ZcGUyhD3/m0865GvSxgf00D6ERCCOepn59ouu3iE1mvS85jbXMSfly5fSbf5HCz6ZjlDSNJPNGPjEbd5JhOG6jVm0hDJZgNaOAv4OKcea6XnuCuqt5DViGtdEojEWmYsnTH0krinkdGOmZREHJJKWTuSrBUoJZlk4ajivR6SSdDl7aE2pcu2VgbL5fzpsU5WNnLRsTyjV3ebWIpknWzJSOKp7FyH''@;'; put 'put ''v2YI5uFoqP1YO4LJ73HRnijeGmNc5AmvzCt44b7kvBEs16VPoLUEjd/76HgmbqxPGB/TQPoRqE2CGRutkAWxaArR/Pa7VbYigdS3Lym103Zjhzlm76FbPTu/wrJZ0ISkk0lD+SxpmZ3PsnzZJJ5ZjOdkb+08T0M8qz9vBE3WAjkk5YEq9hJOYZFIBmmVDLA6TvEBNy2TJJI7hUhWWClLi2iZtH9S''@;'; put 'put ''BXXnbVLiUbxX/Xv3QDM+lq02iGUMCUMwY0iov9eNYNozwq/thLsNwUx4dV5+/tn4Of90IZhyMSgpLcVdf3mCpQE3J4yPaSD9CKSDYMZGHSOaYQawr1q7HjPmzMcXi5di526m9zp8q7B0WsirD+QyhrOAiUOSPJRNd3tWLvd5kuQkuoq0wNnedYnrFI97RXyn7Wy3/3H4QBPpnhBHfl4C+2WuxRIp''@;'; put 'put ''Gdzyori2g4EwiSRd3NSYLGECTvFexknSzX1gF5/TvV28HwiVixtcWnH25vV60LFtawxifGUvJu80LGxgy9PVJrGMIWQIZgwJ9fdaEkxOy4R7DMFMeHVeP+pCnDtsoDZZ5IZgJrwkHNdAOgnm4WCIRVPI19YdO/ElFQpmfbEQq9dvpls0dbFqh58/WY/dZJMZWYzrbGAhpwB2QlEuqw/JX1ZexXte''@;'; put 'put ''/rb6M4SAMsbTdv/y7CSf4nIXd7vtdudLkmh0iIMeepCsntawnQp+KIZGEsWKJzZpFPIozJH/S1ejtEJGKA4dDFh2HKSQyDJaHktJJEuYfFMkfxQzL9vvRlkp3d+2/KM0qtZWkJ+HHl07YwCr73Tu0A45Odl2Vng6SwMbgqnWGjpWb3UkmPLdePm+7GMN2zHvOTqL/LZfXo1+dJMkW4YiXegbgpku''@;'; put 'put ''5FN3XqcQzNgIRdpI6puXlJRiBfUzP/tyERZ/s0IJq2ZsDEfbe9wWvJkuZqxbdpxnZh5Y6lIsnizvl2sxxlNc7i5kZFjw8zi3Nwo3S/b6xBIqBE6EPIWQygliXIxsTnhpbLMpaex5bB978/B97PPc07Z46B2bOMozeUnalsdCfvmogjQKcZQ/un2ZQBMKuEgiKVROklhezOxtksgyurbLikgoiyus''@;'; put 'put ''k4EyN49hW9Z/ziPNqrpl+P2suNMSfXt2Q8+uJ+I4usE9nBv5nU9FVni8OBmCGS9izj1eN4JpyxTtoEzR340FM+FVd9sNJJh9DMFMGEjTQMoQcBrBjA005j6XC/b2nbuxdMUqzF3wFZYzuexAEZmLphsdwjap9Aqx9FnwMdnSz8fezCh8/E32ZXDPMr4iJu/xR1k5ifGs3FeQUVZSYla820twyAxt''@;'; put 'put ''PkqSam+yO8jvLBI9SyyGfC4Z8lZIpH1IGENCHGlN5D4UdiMc4D7oIpEkiWR4bDggRNFCJFiRnS1xkHK8fPZQ4/JQw02sza2aH4ceXTrbLvC2rVsgmzW/xcKeDjf4sSA2BPNY6Kj1npYEc7s6MkX/DwAA///r8VITAABAAElEQVTsXQd8FNX2/rZl0xMSSkLovXcBBUSKgNg7dkXF8tRn74o+n/7V''@;'; put 'put ''J4oFsIMdO4KCFEFA6b33HkpIAklI22z5nzNhNcQkpGyZuXvmR5jd2Zk7937nzsw3p5q6DrrUA50uj919C/r17o6ioiKd9rBq3TKZTMjNy8NTr4zDnv2pVTtY9tYlAlGREbjhigtxybCByM/P12UfLRYLbDYbHHQdHTpyFBu2bMfS1euxbdc+ZGXn6LLPeuqUx/P3LZKvYVkqh4DNakXD+kno2rEN''@;'; put 'put ''undqh6YNUxAXGwO32w2n04mSuFauxcDsZbfbMX7SZMxeuASFhY7AnFTO4hcEzrrUgVY9TPA4Xfj7KvbLqQLSqMlswvEjbvz0TkRAzlfTk5iEYNYUwsofLwSz8lgZZU8jEMySWFrpoc9/TDaPpKVj07adWLl+M7Zs3430Y8d1+9AvOQb5rF8EIiPC0aRhfXTt0Aad27VGo5QkxMbEaPOKSSWTS70v''@;'; put 'put ''YWFheOvDz/H74hUodKih3NA75v7q39lXFaJZJyKYLrc6BPMwEcxxQjBrPGdEg1ljCKUBPyNgNIJZEg6vZtPlciE94xh2k1Z93aZt2Eikc//Bw8gvKCy5u3wWBP6BgNlsRp3EWmjVtDE6t2+NNi2aoH69OoiIiADPK/4zAqksOTDW9o/94DMsWLJKexEr+Zt8NhYCqhFMs8WEQzs9mDkx3BCCEA1m''@;'; put 'put ''AMUkGswAgh2gUxmZYJaEiIkCP1h5yc8vQOrhNGzfvZfM6TvIlL4XR9IzyKzpKnmIfA5RBGKjozTTd8e2LdG2RVM0bZSChFrx4BcWJpRGd2kqJpifE8FcKQTT4HN84PWFaNiaBuH2KKHBtFhN2L0O+P1ruyEko2uC+fg9I9G3ZzfD37C8M0EIphcJddaqEMzSEuGHLBMG1j5l5+QQ4TyKrTt3Y8uO''@;'; put 'put ''Pdi5dz+Oph9DEZk8ZVEfAZ7jKUl10apZY7Rv3QLNGqeQ1jIBEeHhf/lTGk1LWZHUhGBWhI5xfmMf33NvdCClFfVZIYK5YzWw8DshmDWeiQ/dcQMG9OmlHMF8+tVx2L1PgnxqPEF00ICqBLMktKzdZLLp1VDlnMjFwSNp2LF7P5FOIpx79iMtI1NM6iVBM/Bn1lAmk5mbCWXblqyhbKCZwSPJ7M0v''@;'; put 'put ''yayhZE2lqosQTDUkazYRwbzFgaSmFN5Drr8qBPlYw8xYPRdYPTvMEELStQbzRorOHXHJeRTJp44vWKHDgefGTNA0QYaYIdLJChEIBYJZGoCShJO1BCeIcGZQgNCeAweJbB7Ajj37cODgERyjCHWViUhpXIz4nSO9E2vFUTBOMmkmG6Bl00ZaYE5iQi1NQ8lj4uAc/guVRQimGpI2W9wYdqsTtRu4''@;'; put 'put ''QVxTCYJps1uwdAawYX6xO5PeJaVrgnndZcNx3WUXqEUwKe3Fc68LwdT7hVHZ/oUiwSyNDWu1WLvJ0em8sIaL0x8dPpqB/amHsWvfAeyjNWs9s7JPiGm9NIAB+m61WlArNlbTTnKkd/MmDdGI0ghxkA6nD2L58QsDk8lQfjEQghmgCenn01htHgy/vRDxSSYimGr4YIaFWzB3sgm7Vhffa/0MYY2b''@;'; put 'put ''1zXBHHHxMNx45UVKEUwOlPjvm+9jLUXrymJ8BIRgli3DklpO3oOtEGxaT888rkWoc5T6vtRDREIzadsx5FFgkV7zIpY9Qv1uZRyjoyJRKy4WKcl10TC5Hho1SKZ1EmonxFPaoGhwKh5emEjyn0o+lDWVjBDMmiKoj+PDI9wYQgSzVh2zMj6YNjKRz/nCjL0bhGDWeJYN6tsTj9w9UrcJrKszQCfl''@;'; put 'put ''43pl3EdYsXZTdQ6XY3SGgBDMyguEtZys7WRNGa9ZU8YR68ezs8nEnqVFrh+k6PVDaRk4cOgwjmXlaMQzlLVpFaHLGsmoyEjEk/axXp0ELT0Qpwhi/8m6tRO07fw7486LkMmK0Pz7N56f/5swCYtXrBVt+9+wGO5TZCyZyG8rRHS8WRkNJkeRz/7EigPbiq9pvQtF1xrMc87qgcfvuU0pgumBCWPe''@;'; put 'put ''nYQ/l6/R+9yQ/lUCASGYlQCpgl2YaHq1nbzmPyaeeVTxKic3D8eJZLJ/J6dJOkLazqOUrzPzeJZmgj+Rl48CcjlRlYCaCRu7PQycvDyOkpXXio9BnYQEjUzWq5NI60QkkJYymoJyOKLba+JmDaaXTIpWuILJV85PrMEc894n+HPZGklTVA5GRtgcm1hMMMMjyUROHVYhyMdMlXx+/ciKw3uEYNZ4''@;'; put 'put ''Dp7ZvTOevn8UHBQYo8piogfo2A+oSsSi5aoMKaTHIQTTP+Jnoukln17iyWdi4sTm9gJKAp9P66ycE5pfJ6+PZ2VrWk/2/8wmczyb5HM1Ekr7ExFl4soWhGCag1mbGGazajlHw4k88vyJJi0jm7TjYqKIRMaRaTuGtI+x2nf2jeR9IohkhlMJQ68WmIkjj4fXPB4hkr6bh2Ii9x2WwWwpIcmNoSML''@;'; put 'put ''YQsneqkCu2SWTOmWfnk/DBkHhWDWeG717NIBzz54pzJpihgQC5lf3vn4S8yav7jG+EgDwUdACGZwZFCagHrJqJdwMeniYCPO2lBU5NQIJn9mX08Hlf/LLyjQCCoTVS4HWEBklbfzvk4isbzmsAD2mebPbs8/SxxyBLaNyKJ2bpOZ/Bpt8G5j8sg1re20LSLcjgj+TNtY08i/8TZtX/rdTv6QrH3k''@;'; put 'put ''MXmXkuPwEkghkV50/LsWgulffAPVer0mLgy+wUnXlhoBPmTQoPuRBz+PD0NWuhDMGs+jTu1a4b+P3qOUCYwJ5qTJU/DDjN9qjI80EHwEhGAGXwYV9cBL2pgEekko7+/dXvJzSQLn/exdl3cObpMX77rkZz7We7xXa1p6XXIfrSH5L+gICMEMugh80oGGrV045xonOB+mEgpMMo8X5rkwbUI4co//''@;'; put 'put ''/TLqE7D81IiufTA50e8rT92v3by9N2o/4RCwZi0WKyb/NB1f/kjJrGQxPAJMMDlf68XDBirlK2x4wcgABIFqIlBMMKUWeTXh081hLbq60OcyKgjALiS66VX1O8L+l7nZRDDHhaMgTwhm9ZE8eWRjSq3x+uiHNb8jVQgmm8J+mjkPH375Q43xkQaCjwD7zo0ccQnOG9iP/AILgt8h6YEgIAjUCAFO''@;'; put 'put ''4fQ2uTHN+3OZ5j5Ro8bk4KAh0LZPEXqdR+6X5PKiBMG0mJCV4cbP4+wocgjBrPHESq5XG2Ofe0TzZVKFYLKJfM6CxXjroy9rjI80EHwEoqMicOcNV2FQv95CMIMvDumBIFBjBNh3dsInX2MW3acLKThMFmMi0PXcInTpT0FwFNinAsHkFEUZB4Fp5IPp8RS75uhdMro2kXNSYNZgciSl13dJ74Ce''@;'; put 'put ''rn9MMBctW42Xx318ul3ldwMgwATzjuuvxOCzzxSCaQB5SRcFgdMhwATzwy++xy+/LdSCxE63v/yuTwTOutiBlj05MkYNDabVZkbqTjd+/dB+is+3PtEv7pWuCSZXnHjjuYeplFmCMoE+HFywZsMWKhf57l8BAHqeINK3ihEQglkxPvKrIGA0BMIp0n/S11M0VyZObyWLMRE4Z0QhGndkgqmGBpPr''@;'; put 'put ''kO9a78K8L8INIxBdE0zO+zb2+Ueo3Fk9LeebYVCtoKNMMLfv2ovHX3pTS4dSwa7ykwEQEBO5AYQkXRQEqoBAREQEvvjhZ3z/yxwtrVUVDpVddYKAiYziw251oG4TMo5ThjEVTORch3zTYg8WTSku86oTqCvshq4JJnsZjP3Po2jepBHloiuqcCBG+ZHTmaRSObzHXxpLiaDzjNJt6Wc5CMRSFZV7''@;'; put 'put ''Rl6Dvj27aQnAy9lNNgsCgoBBEGCCOXnKdHwzbZYQTIPIrHQ3w+xEMG8vQHxddcpEMsFcTdkNV86ylR6ubr/rmmAyai89fi86t2+jTDUfJphHMzLx1CvvIC09U7cTQzpWOQRioiM1H0wJ8qkcXrKXIKB3BESDqXcJnb5/UXFEMKkOeVQc5b/lfLSnP0T3ezDBXDwV2PinEEyfCeup+25D317dlQqg''@;'; put 'put ''4GoiTDD37E/1GU7SUHAQ4DRFt15zKYYN6KvUHA0OmnJWQSD4CLAP5kTywZxK6eTEBzP48qhOD5QrE0kgMMGc+6UJu9ZaqwNJUI7RvQbz37ddp+UYzM/PDwpA/jgpl5574c33sX7zdn80L20GEIFIqhF93aXDcfkFQyTRegBxl1MJAv5CwJumaOb8RVr5UH+dR9r1HwIprVwYQFV8LGY1tJeMFKcp''@;'; put 'put ''mjXJgtTtQjB9NnNuufpiXH3xeWo9vKlu8evvfYKFS1f5DCdpKDgIcF3pi4acg1tGXCoazOCIQM4qCPgUAYvFglfHT8SSleskENOnyAausZbdXDiLq/gokgMTHJDipjrk74ch86Ax6pCztHWvwbxs+CCMojyDKmkwORcm51mbOut3loEsBkbARrLs07MrHr7zJmUC0QwsDum6IFAjBDjLR0FhIZ4f''@;'; put 'put ''8y627txD/IRCkGUxHAJdBjjQZRDFkitSxcdEZSId+S5MHW+cOuQ8aXRPMAf26YlH/zVSKYLJ5SK/+3k2PvmWPHZlMTQCFnogtWnZFM8+cAfsVGJOlYpThhaKdF4QqCYCfG9OPXxEI5iH0tKr2YocFmwE+lxciBY9qZyiIknWzVQmMueYm+qQ2+EoMEaZSJ4DuieYZ3Ruj9EP3aWUdog1mPMXLceY''@;'; put 'put ''9z4N9nUo568hAkwo69VJxHM0RxulJCs1T2sIjRwuCBgOAfa/XLpqHd744HNk55wwXP+lw4QA3ZMH3+hASiv6TGZlFSLI2f/yaKobv5AG06PZy40had0TzJZNG+HVpx/QSiOpoh2Saj7GuDgq28sYiiT/1y3XoP+ZPcQPs7KgyX6CgA4R4Ajyz7//GT9Mn4P8gkId9lC6dDoEbGFunHebA/FJ6qQo''@;'; put 'put ''soaZsW+TG3M+M04VH5aT7glmct3aeIOq+UTQha9KPXLOhbn3wEGtmo/cxE53u9D/72FhNgzpfxbuvulqSbauf3FJDwWBMhHg+zL7XL7wxntYv2WHMuWJyxyswhuj492UZL0QkdFEMGmcKmgwi6v4uKmKj91QktM9wVSxHrkkWzfUNXLazrI8mzSoj/88cjfiYmPkwXRaxGQHQUB/CISRD/XWnbvx''@;'; put 'put ''0lsfIj3zuP46KD2qFAJ1G7lw7o1OWG1qmMd50Ewwl88A1v5unCTr3G/dE0x2un599ENo1rihUv5tHKk4+rUJ2EZ1yWUxPgJsJueSkWf3FjO58aUpIwhFBMQ8robUm3Z2ot/lbqrg41ZCe8lSYYI5bzKwc7UQTJ/PUtYM9ejcQSnzI/keY8y7n2DRijU+x0saDDwCVsqd17t7Jzxy181aJLkq/sKB''@;'; put 'put ''R1LOKAgEHgHOfclBPc+9/i527tkv2SACLwKfnVG1FEUMDEeRz/zYgkO7jJNknfutew0md/KBUddj6Dl9lUpVxJHkH335PX6a+TsPURYFEIgn8/hjlFKrc/vWSr0MKSAaGYIgUCECXH/859nztRKRuXnqVI2rcNCK/tj3CkpR1NUMjyIpisgDC04nJVkfH4asdOMkWefpZQiCeeMVF+Lay85XjmBO''@;'; put 'put ''/20B3v30W0Uv89AbFidd70tJ1x8YdYMWkCZazNCbAzJi4yHAWT2YVD5P2svt5LLkpjQ3shgTAbPJg3NHOpDUhGRIOfJVkKSZkqznZrsx9R07CvONkwOTZ5AhCOawAX1w/+03KEUw+aa2ct0m/IciFmVRBwEO8vn3rdfizB5dJGWROmKVkSiMAGsvv5n6Kyb/9Cvy8gsUHqn6Q4uMdmMopSiKSVAn''@;'; put 'put ''RRHnwEw74MH0CXYizBwXb5zFEARTxWTrTDD37E+VVEXGuVYq1VNvZZ8n770NMdFRElFeKdRkJ0EgOAhw5Piefal46e0PqYJPWnA6IWf1GQKJ9V0YeksRrGE+azLoDdnsFuxc68bvXxkrRREDZwiC2bRRCl575kGwI7ZKZses7Bw88fLbOHTkaNAnsXTAdwiE28Nw0ZBzcPPVl4gvpu9glZYEAZ8i''@;'; put 'put ''wC/5bA7nYMulq9ajyOn0afvSWOARaNqJIsivUC+CfM1cN1bMFILplxmVEB+Lsc8/ivi4WKU0Qi6XWzORr9u8zS+4SaPBQyAuJhr3UHWffr27K+XaETxE5cyCgG8R4LREP/wyG1/8OF1M476FNmitdR1UhM4DyPfS5VLC/5KB5BRFC74zYdtyY0WQc98NocG0Wi2UC/Nh5XJhmkkj++6n32DG3D9Y''@;'; put 'put ''FrIohAAnX29Yvx4evfsWbd4WUt5TWQQBQUAfCLDf5bLV6zGWao5nHs/SR6ekFzVGoP8IB5p0oGZIeaNCgA8DYuEURZOsOLjDWBHk3HdDEEzu6OgH70Cvbp2VMjlyEvmfZs7Fh1/+yEOURTEE2B+zXavmeOjOG1EnMQEOh0OxEcpwBAHjIWC327F73wG8Om4i9h08rJTblfGk4bseW60erURkQjIR''@;'; put 'put ''G2KXKhBMTlFU5OAURXZkZxorgpwlaxiCeecNV+KS8wYpZW5kH6BV6zdr6TF8d5lJS3pCgLXv3Tq0xX0UWc4uHkVFRXrqnvRFEAgpBJhcss/7axMmaVXUuPa4LGogEJdIAT63FSE8kogNDUkFgskJ1rPTPZhGBLPIYawIcp5VhiGYHDRx980jlCKYbEZNPXQEj744VsvDpsZlLqMojQDnx+zZtYPm''@;'; put 'put ''k8mR5UIySyMk3wUB/yPA5DItPUMzi6/fskMpf37/o6f/MzRs7UL/a12wUAJMFcglI24NMyN1u5uq+ITrXwBl9NAwBJMf0KMfvEs5MyMn+H361XcoZdHBMsQjm1RBgEkml5K8+6arEU11y50SsaqKaGUcBkCAyeVBSkP01kdfYuO2nUIuDSCzqnax09lF6DZEvQCfjYs8WPyTMfMuGYZgNk5Jxmuj''@;'; put 'put ''HwI/qFVKVQSTmdJkTMIfy1ZX9XqS/Q2GAJvLu3dsh/tuuw5cVlJ8Mg0mQOmuIRHgaPFde/fjzQ+/0OqMi1nckGI8bafPvqoQzTqZKIJcHQ0mR5D/SSEam5fYTjt+Pe5gGIIZEx2ppSriYAkXpSBQZeHcnt9Mm4nPv/9FlSHJOCpAgOV9Vo/OuIVyZNarkygkswKs5CdBoCYIsAsSay5Xk5/7BMrW''@;'; put 'put ''cYDckZRSTtQEHMWOtdrcOI8q+NRSKMCHRcRVfGZOtFAEufFSFHH/DUMw+Wbx8pP/Roc2LZV6KHOqomWr1uHFtz5kecgSAgiwJrND6xa49ZpL0bxJI20+y4MvBAQvQwwYAvwix0GUs+Yvwmff/aylIuJniCxqIlCrrhtDbimEPYpkrIgDJk9Xx8kI8hwDRpDzTDMMweTO3k+mxaED+ipV45lvevxm''@;'; put 'put ''/ZgE+rCIQ2bhh1+TBvVx/eXnU/qtTppPplsiWkNG/jJQ/yFgs9lQSCnBfp49H19NmYGCQkkP5j+09dFyk44unH2li9ITqWMe5/yXmUc9+GWcnZ4Pxnw5MhTBvHz4YNx+/RVKRZLz5ZlfUIhnKNBn594D+rhapRcBQyAhPg6XDhuA88/tjzB6MEqEecCglxMpiAD7W3Iwz+SfZuDP5WukQo+CMi5r''@;'; put 'put ''SN2HOdCpH+B2qkMwuQb57vUuzP3CmBHkLCdDEcwzOrfHcw/frZSJXBMCabPe+fhLzFm4tKxrR7YpjkBkRDj5ZXbBiIuHoX5SXTGZKy5vGZ7vEfCaxNnf8vMffsGOPfuV8tX3PWLqtMi6vcE3FyKlOVnH3R5VLORaichVczxYNduYEeQ8wwxFMBsk18WYZx/SHLdV8lnjij5sznnv8+/UuepDcSRU''@;'; put 'put ''PiIyGrBHeHAsrWpVF7jqT7MmDXHVhUPQm0zmvEgqo1CcRDLmqiLAgTw5J3K1e+jPcxbgWFZ2VZtATIIbucdNcLuNaYqs8oAVOiAixo3htxciKt5MJnJ1CCZrMOd+YSItpjEDfHiKGYpghtvDMPY/jyIlqZ5SD1/2x9uwZTue/d94KqEqlSWMeu8LI2LZY0gREhsAcz+zIje7aiSTx82J2Af17YlL''@;'; put 'put ''hg2kKPPaWmlUlV6mjCpb6bf+EGCtJf9t3LpTM4nzPdRR5KxyR9v3caLbQDc2Lzdh7TwrigqFZFYZxCAeUL+FCwOvddJcUIdccoCP00n+l+/acbyKyoogiuIfpzYUweTeP/fQXVQVpaNSNck50CfzeBae+L+3cORoxj+EJBv0j4DZ7EG9JnSju8EJm82CPRtclL+MyntV42FlpYdmk4b1cRn5HPfu''@;'; put 'put ''1lHT2EvOTP3PAelhYBDg+yVrLdMzMjF97h+YMXchjmefqNbJG7Zxos9lbkREe5B/woM5E8OQfpie7h4hmdUCNAgHdepPCdbPVSvB+t8lIsOoRGTVFRVBEEOZpzQcwbzl6otx9cXnKRfo4yLfkVfHf4xlqzeUKSjZqG8EwiLc6HVBEVp1N8Pp4DytFmxe5sGK6bZqm93YN5P9ji85byBaNWtC7biV''@;'; put 'put ''0tzrW6LSOz0iEBZGD1yqgrVk5VpM+XUe+Vruo2uienmR4+q4cc7VDsTVI1MeGY6sZJJcORvY8IcVzmq8GOoRL9X7xNadQdc50LAdjdSljgaTS0Tu2+TGnM+MG+DDc89wBLP/mT3w+D23KpWqiAXBpp5vplLCdXJQl8VgCJDvZWKyB+fe5IA9kipJ0MsCmzjcHnJ9WACsmmOj79XTiPANNCE+FoP7''@;'; put 'put ''9cYwStHFQUAcaa5SsQGDSVu6GwQEOPUQL9t27sGUmfOwYu3GGkWIs580V35JbmEq9tuj3IlmqxkZB9zk9xZWLfeWIMAS8qeMiPJg6KgCxNZSy/+SK/gYPcCHJ6fhCGbTRil47ZkHNUKmkm8a+2FyBOTzb7wn1SYMdtu02jxo09uFnsM9J7WXxQNgTulykVznmLDxz5qV+mKCmlS3Ns4lojmQfDTZ''@;'; put 'put ''P1OIpsEminS3yghwACS/fO/Zn4qZvy/C74uWIyuneuZw78nZV6/XRQ607EYXKOdN9Cbm1r56MO/LMKTuNFPJweq9FHrPI2v/I5DczIVB16vlf8mo2UiDOecLM/ZuMG6AD4/DcAQzItyOt//7OOrWTlRKi8MEIi09A0++/DbSM4+zbGQxCAL2SA/6XlGExm1NpxJM7j+5z7C5bdVvZDJfXPObhZnm''@;'; put 'put ''SXK9OhQI1EsjmnwdsOlc8mcaZLJINyuFAGss+aV7/8HD+G3hEsz7cznSjx2v8cs32RfQdYgLHfuQTZzs4n+Ry5O94sjdNfM8WPc75aQVM3mlZBXMnTqdTf6XQ9Tyv2TFRFGRGz9PsCM73RJMeGt8bsMRTB7x8w/fhTO6qBXow+MSP0xGwWiLh1KckJnmZgeiEujxRX5AJRdNB8Ik00Ekc45vSCa3''@;'; put 'put ''z0SzLtUyH3DWGejfuzsaplARXlqYaKqk2dcGJf+FBAL8ks3EkufvvtRDRCqX4ffFK7QXbp/MaWq30wAnugwgbmly/YNcMsgWmxkHd3ow/ysbCvKMG1wRChOG58TgG4rQoDXdcxXKf8n1xzMPE8EcH05KNGNr0Q1JMG+68kJcc+n5ygX6sDno22mz8Ol300Lh/qDEGE0UPZ7cnMw0lCbDxC+bp/JL''@;'; put 'put ''bYx/k0yQZsSKdQss1fbJLAu0WnGx6EWZFdg/uVWzRoiKitKStYufZlloyTa9IcCaSiaW/HK0ffc+zP1jKRZTEM+xrBzfdZXISEfSdnUeaILFSuSynGxwJirPl5flxsyJrD3iK9fYD3jfAai/liJjPTjvtgIl819uX+XBgm+Mm2DdO1sMSTDP6tEZT99/h1KpilggfKNdv3k7Rr8m+TC9E1Tva4vV''@;'; put 'put ''jRZdPTjrUhdcZNYob/GSTDf7ZM4in8wlpKkpf/fymqlwu53yxLZp3gRnk0azW8e2mp8mv+Vzwnapc14hdPJjgBFgbaXXvzIrOwfrNm/TzOBrN22tUfBOWcMwUxBex/5OdDqH7rEWijin666M98DiQ+lCdVMqzTmfW5G2x1LtDBBl9UO2+RaBhq1d6H+ti/J1qFMekhHiAJ9FP5mwaVHNXap8i3jV''@;'; put 'put ''WzMkwUyhSNoxox9COOVC84nppOq4+e2IbHJgf+Llt6ie7lG/nUMa9h0C1jA3OvR1o/sQD/lsnT5diuZfU2imFEaUDmU+JXX2Q44zflFJIK1m907t0Lt7J7Rp0RRxsTHatSJk03eyl5aqjgAH7Hi1lexfuWTlOixasQZ7ySRe3XRDFfXCaiWfy3OL0LY36SLNREQq8VLHOQgXfGulXLZmuA1uoqwI''@;'; put 'put ''G6P/1p2KWnTq71Gq/jgrzPkZMeNDG9L2Gtv/kueXIQmm1WrB66MfRrPGDdULbqDZNfaDzzB/8UqjX/8h0X+b3Y0ug1zodDb5P1aCYDIoZrNJ863ZtdaDNXMpJUqWpt/0C16sJapfrzbl0+ygEc4WTRsimkzootn0C9zSaBkIMKnkechz7iglR2dt5eIVa7GeKu+cyM0v4wjfbLJTbtqe5zvRvAsH''@;'; put 'put ''i/8zoKe8s7Af5uKpZmxfaSGrhP+uzfLOL9tPjwAXthhyi4OKW7D/ZQUa6dM3pas9+NnALho/jbejUAEfYEMSTJ4RD4y6HkP691EvHybdiGfO+wPjJn2tq4kvnSkbAVs4lYccWoR2Z5oqTTC5JQ7S8dDfIQooWDXbivRU/7+t2mxWNEiuh64d2qAHJXBv3rgBYmNiNPM5+2uKz2bZMpatVUOAzd9e''@;'; put 'put ''v0p2zcik6O+tO/dqfpVMKtMzjlFMRrlG6qqdrJy942q7Nc1lk/acl7by5JKbY4K55Gczti0XglkOvEHfXKuuG0NHFiKM8g6TB0T5Lg9B72nVOqAlWN9CFaU+sVftQJ3ubViCef7gs3HvyGuVC/ThmzPnfHvqlXeQm+e/t3udzkfDdUur4HO+C616VF6D6R0kiVozhxyn6qBrfrNhz3qOWg2MxoSt''@;'; put 'put ''AClJ9dClfSt069AWzZs0REKteC34iIMtmBio5n7ixV3WvkeACaVXU8llTdMzj2Hz9t1YRbl9N2zdoZFKF82pQCz1W7rQdZATtVPoWiqZ57KSJxeCWUmggrhb6zOc6H0xMUt6Mfbvq0pgB8n+lytm0vNgbs3yJge21+WfzbAEs2XTRnj16Qe0B6JqD0IHPeD/QwnXN27dWb7k5BddIFBMMJ1EMKum''@;'; put 'put ''wfR2numkyWJGYQGwdRkF//xhJdNIYEimtw9c+7x2YjzatWxGwUHtNJ/NOom1wGX5mGiK36YXKVl7EeAXYS+h5G3ZFKiTejgNm7bv0kzg23fto/rgOQF9SbGRP3TrXi6yJrgRGUfc0lm90oFCML1S1u/6bCrx2awjydhFL8L67WaVe8YpimZNsiJ1u/8tWlXuXDUOMCzB5DrNY59/hKqb1FHOtGe1''@;'; put 'put ''2vDlDz/jq59+rYZI5ZBAIlBTguntK/vesH7n8A56e51HEaz7gnODYeIQExWJFvQC16ltK7Rv3RwN69fTTOn8G5NNNqWr9lLnlYOsy0agNKHMy8ujwhCZVAt8PzZs2YEtO3cj9VAanDQ3grEkJLvQ+RwXGrbhSHEK/CiVj7YqfRKCWRW0Ar+vVh7y9kLEUt5hE7laqEIwNf/LEx5MfYdysOYG5/7v''@;'; put 'put ''a2kalmAyEE/eexv6UUqWggJS/yi0sGZg3aZtkq7IADL1FcHkoWomcyKaudkeqvpjIR8wKxwFgdVmloacTenJ9BLHkegdiGy2ataYqmglIDIyUttVzOmlEVPju9fkzfciXphQHqUKYzuJUG7ZsZt8KvfgwKEjPk8pVFX0wuweNOvGWksX4hIo3oMTbteQcQjBrKoUArt/wzYunHONi4qkqaW9ZP/L''@;'; put 'put ''A9s9mPUR5b/kh4ECi6EJ5mXDB2HU9Vcq54fJ84r9L5+kdEX7Ug8rMM3UHYIvCSajVGwyJ20mqTMP7TRpSdmP7NbP2yxbDlij2apZE3Ro0wKNqYIQm9O9hNNrTpe8m8aZ86ydZELJkd78mWV3Ijf3Lw0lm7u37dqDg0eOBp1QlkQ1qYkL7fu6kNKyWGvJVbRqyC215oVglkRZf597nU9pp84iWTvV''@;'; put 'put ''Ipia/+Vsyiwyx/gJ1r2zxtAEsy1pVV5+6n7NXKeayc5MmoP3P/8Ov8xZ4JWVrHWIgK8JpneI/AKrmUxygZ2rKG/mUgtyj+uvdF0x4UzSgoT4emzSsD7qJiYgOjpKIy18XXpJp2rXqFdWRlp7yaRXQ8l9ZwtQ5vEsHEpLx+59qUQm92prNoGzP7jelthE8rXs7USLTh6Ex3Bi9JprLUuOUQhmSTT0''@;'; put 'put ''9Zn9bIfdVoRaSR6loscZZfa//HWiBYd2GD/BunfWGJpgRoTb8eZ/HlXSD5NNU0tXrcOLb33olZWsdYiARjAvoCjy7lWPIq/McLR0RsQrjx/xYAuZzXett1A6JP0RTe9YwsJsqFc7USOazRo1IOLZgPJw1kV8XAyiTprVhXR60fLvmkkkE0rWTPJnxj0/Px9czCGNUgVxvW/2odx74KBW2CEnN0/T''@;'; put 'put ''Xvq3V9VvPTLGg+bdnGjZ3YXYRHoD46I8NbWHl9EdIZhlgKKTTay1HnorJ74k4ZO62hcaaz0MjZUJuTluTHvHjgIF8l96MTU0weRBPH7PSKrBfIZyfpg8No7CfOKlN3H4KOWxkUWXCIRFUB7MYWSy6VW9KPLKDIrN5mYreRyRf9nh3cCmJfSWu81KmsHKHB3cfZjgcNBQvTqJaNygvkY8G6UkIalO''@;'; put 'put ''bdSKj0VEePhfSbg5eIjNs/wn2s7KyY3x9f55Tdz8nbXGOSdywWUYj6RnYP/BIxqh5PVh0lTydn+Qs8r1ump7Rca40aQjlWQlX8uEJL4aSGPpI3N4WT0RglkWKvrYxgE+nSkFVQt6ybCRxk/TXuujazXqBftf7t/swexP1ch/6QXD8ATz/EH9cO+t1ynph2kircP4iZMxa8Fir7xkrTMEbOFUJnIw''@;'; put 'put ''+4L5R4NZcrjEGyg1jJmqVwEHd5JGc4mV/DSZePJD1zgLEyA2rdemvJv1k+qgQf0kNKDyr/Xr1aFcnHGIJfM6+3R6A0zKIp6hREC9BJLXjIlXM8kYFBYWIr+gEMezsin35HHNzM3BN4fSjpJWMo1M39na78aZHX/3NCrOgyYdqBJPNzcS6nHcAxMK//vdCcH8WwZ6/dSwjZPK8zqRkMzJ8DmrhV57''@;'; put 'put ''Wrl+sf/lkp+pfPBCNfJfekdteILJ1Ug4HybfeFV76FjItPXnslV4ZdxEr7xkrTMEmGB2G8z1yCtXi9wX3WeiyfWSnQ4mmiZsW2GmtfGrjjBxioqMQEJ8HFUcqktazkQkE+nkqHXeVkw8I2Cn/Jxcz9q7lNR68j2Av3sXvd4TmCx5Fx43L7z2/nl/Y3LtJZEnKJL7GBHGjGNZWgAOm7bTqPRiJn1n''@;'; put 'put ''a0dBIU0IBRau0tK0swuNO7gQz6bwABFLL3RCML1I6HsdGU3azMFFaNHVQ1aQk764+u5y2b3jKU5a+V8+CEP6fv0EdJbd2aptNTzBDKPyd2889ygaNUjWzEJVG76+9+aH0DHSTIiZXL9yCgbB9KLBHMVCpvMiCnJI28vBQFbs32pSooatd4zetY3SJcWQZjMuNgbx9JdIms7aCbU04plApva4mGiq''@;'; put 'put ''sR6paUbt9jCNhPJLJ5uNy3r59JJQ75rPw2S0NCEt/d3bn5IEkbfxd++2kp+95LHkcUwavflEC6nqDRPD/PwCMIHMzsklbWSOdt0zkeTgG/7LIr/JE+QjydrK8vrkPYcR11abB3WbuNG8E0eFU6L0WNLMk1YqGJHCQjCNNYMatXORNpMCf+oZU5vJyoKsdPK/HGeHs0i//vXVmRWGJ5g86H/dfDUu''@;'; put 'put ''HDJASTM5R5OPm/gVZs0XM3l1Jri/jwkmwfSOzUs02Ucz85AHezZasWeDGdnpat2svOMta82kjgOMIux2RETYERURoRFSJp2sFY0mk3tUZLj2OZyCA8PD7LDbbRoRDSNtKNdp54pGxSZoYu6kU7CSO4LJVBwcU/qcHipB6C196KJqIpxgnMkqE8aiIqdGGjkC2+Eo0ohhHkVq5xGJ5PRjubn5Gplk''@;'; put 'put ''H8lcCrrJzy/U9udjVSSPpbHzfuexxtYGGrV2olEHN+o0AKw2E1xkBueqA8GyegrB9ErIOOsICgDrOqgIzbu66aXSWL6ZbB7fstSDP35QJz2Rd+YoQTD79eqGJyjpOpuSVFtYA7J8zQYtmjyUHj5GkaMeCKYXK6ZFHAxkMnm0ZO0HdwB7N9hweI856AnbvX3U41ozS5/UQHJiea8Gkgkn/8YE3ruw''@;'; put 'put ''rxd/dxKpZELJf05nMbnk65MDZ+Q69aJV9poDNeo2pcCd9i4kkdYyKo4NhEQKivzvX1l2j07dKgTzVDyM9I3dKrqR2TwhyQJnoTHqlNvsFvw+2YSda9RJT+SdM0oQTA4WGEvpitiEVtLk5R2k0des6eCk6weoFJss+kJATwTTi4zGh0h5yWTJSdqgY4c9ZDrnKEULfSYzUnCq+Xm7J+sQRMBO2RZq''@;'; put 'put ''N3ShUVsXkpt6EFObEruzHzGR82BqK8sShRDMslAxzrbIWNJmDihCs+7km0kujXqONOeXVUcBmcfH23HiuFr+lzxjlCCYPJD/PnoPunZsSyYpNRzdeUzehYN9Pv7yB0yZOc+7SdY6QUCPBLMkNEw2zTYKHqEPBfkeZBwksrnFgoM7zMhKM14EesmxyWd9I2CPcCMxxU31wd1IIlIZVxfkisAmcDJ/''@;'; put 'put ''kwY4WCbw06EmBPN0CBnjd9aQdzuXk7LrV5tppXtz6g43Zn4cbgxQq9hLZQjm5cMH4XZFy0aymW795u0YPWYCaZ9E/VTFOe7X3fVOMEsOnt+WOSiI1/m5bvLXBFIp+vwwpTo6dpi0SYo5mJccu3wODAIRFNlbhzSV9VuRprIxaSrrkC8rkUoPkUq3jkllSXSEYJZEw9ifo0ib2UWLNGfXFv/mT60O''@;'; put 'put ''Uux/uWw6sG7+31kxqtOOXo9RhmC2aNJQS1fEZExFHyiONH1uzHhs3blXr3MpJPtlJIJZUkAUu0IBLcVks7DAQ9pMN47s4zJlZqQftCA/m/ZmJiqLIFABAmZ6aEcnUIBOIw9SWri0dXQtrh5E2nHKbmAUUllyiEIwS6KhxuemlJ2g60AH4pOscOnFN5Nur8xVZnB6ogPqmcd55ihDMNkhf8zoh9GM''@;'; put 'put ''8mJyChDVFk638t3Ps/HJt1NVG5qhx2NUglkSdKaRHBzE6TI4gvdElgfHDgKHiXCm7aUUGkctcOQL2SyJWSh/DrNT4vPk4rRCyRSsUyuJ0grF0MsKvdyzzy/8WGUnELgLwQwEyoE/Byfu7zLIQXkzi9+d/VkNqjKj49rjmQfd+PldO1km1cz4oQzBZIHeft1luPz8IUqmK+LIVq7Q8diLY7VUJ5WZ''@;'; put 'put ''wLKP/xFQgWCWREmjkScDhEDaqaJCIpzHgczDZqRRNPpRIp45aRby5xTCWRI3lT9brGTqTiBC2chNuSpJS9mAtJbxQFg4WYuYT5LpW2+BOjWRhxDMmqCn/2ObdXGSNpOS+NelF6IgajPZPL5uoQfLflYvPZF3FihFMLt2aIP/PPIvJTWYLDBO5THm3Un4c/kar/xkHWQEVCOYpeFkGmkizSb7bvIM''@;'; put 'put ''1Agnmc+z0kxITyXfTfrLPEI+nTkSnV4aO6N+t1DS8xgikAn1XahHhDKhvgfxtT2wRxancOJyjW6Daykrko0QzIrQUeO36HjOm+lAsy5cICE4vpmswZz1iQWp29RLT+SdJUoRTK5vPPb5R5BUt46SwTBSOtI7bfWzVp1glkZa01sS4SxOQu6hlzkPCvJIy5lJVaeOmJBxqDhgiJO8F+ZSbkOPaDpL''@;'; put 'put ''Y6i372GUQiiW/CgTUzxIbOBCYhJpKBPdlLDeqr1c/OVLqdewbx8DKgTTx4DqtDn2f+TE7F0GOlErwNpMdkfKyXRReqJwSlOkpnmcxa4UweQB3XfrtRg+6GwlzeQ8vmzKifn0K+9g/8HD/FWWICMQagSzNNwafaT7o4UTktMbOXmta1rO/FwP+XJyKiQyrx+yaBrP7Ayg8ASlDJFECKVhDNh3WxgR''@;'; put 'put ''R4qsja9DZDKZfCmJVMbVoWTnsVQJyU6CpHxWXkLJeYRChFOegr8QzFPgUP5LTLwbXSmdUdPOpM2kGR8I30xOrr51uRt/fG9XGl/lCGbvbp3wzAN3KJkPk2eixWLFVz/+gq9++lXpiWmUwYU6wSxLTsVaTpqrFKruJZ1OqtLCpDM/x4wcIprHj5roz4wT6SbkZpnIp7PYn6+s9mRb1RFgGYRFeqim''@;'; put 'put ''txtxiUQoiUzWqgf67CKCaUJ4JLk9aBk3in0oA/FQrfoognOEEMzg4B7Ms7I2s0U3NzqfQ5HmdSnS3OHfKkC2MDN++9xCZX3VjB73ylI5ghkbE423qKpPAlX3UTFnJKdh2rX3AJ5+9R0J9vHO4iCuhWBWDnyNdNJ/mj/nyfRIXDvdUeBCYR75cJ4gjecxC9VPNyE7kzSeR4E88vUszJP8nBUhzJmk''@;'; put 'put ''7EQkwyn/ZEwtN9X2Jo0k/XFQTjRpZsKjiWhGUI112pG1kRyQw2QyVLWTFWHp/U0IpheJ0FvzNcR5M5uTNpMvEn+8eJnJSpCbQ9Hj4+z00q2ueZxnj3IEkwf14KgbcG7/s1BQUMBflVs42Oe18ROxaOVa5cZmtAEJwayZxDTiSf5IXGnIfJJ4sjahiKI7CylSvZh8msjcToTzGK/NRDxNyMuh30gj''@;'; put 'put ''6ijg1Eqc+7Zm/dDz0VarmyK2vRpJUO1uIo/0IGQzd2QcmbxjSCNJfpQ2ikq1EJDs9soPRibwHv5TGBt/yE0Ipj9QNU6bfP9p1d2FzuSbGZtIwYs+1mayeXz7ag8WfK1u9LhX2koSzL49u+LJ+25HYWGhd5xKrS2U83PZ6vV48a0PtUStSg3OYIMRgukfgWnEk8gSE08T/ceaT20b3fxdFFjkKKIA''@;'; put 'put ''o0JaEwktIC1nYS4R0BO8JvJJnwv5cz7V+c2jYCN6z3QXAUVURZbJqJuy6gR7sVg84GhtK7lg2aiIhz2SNY2kcYwCIqI8RBpZKwnKL0mfo9ywhpOPZDiRSDKtWdnXlTWSRBw5kTlxSPogRNJXMhWC6Sskjd1OLAW6dSVtZpOOxb6ZnDnBFwtfw3O/NGP3enWjx704KUkwVTeTc07M/IJCPENm8h17''@;'; put 'put ''9ntlKesgICAEMwig0ynZNMz/kccIrTk2hQNUtI9ah1hz52QtHqXUcRK5dDrY1E5rqsHgJKLppHdPRyFpP3k7fS+i7S6NgNJvRRTo4mLNKFei0WgtkTn6TqTW42Zyx6cgOwKd30JKiGLjs4c0sNDIn4nyRtro2WGmtSXMQ8EznOaJCCSRSSsF2dh4bad9iFjy8RZaM2nkVFCsgSxun87ABJLZsLbm''@;'; put 'put ''UwqJ1ITr5/+EYPoZYEM1z76ZLnQf4iKXE7NmWalJ90PJPM44KUkweWD333Ydhg7oq6yZnCv7TJ05Dx98+QMPV5YgISAEM0jAV/K0XiLKuzN385I3vtFrX0qQUt6n3OUkuWPS99dCTZj5BNzUaRbtMI0rMkktboSTlGufuNHif6dpRX4OBAJCMAOBsrHOEVvbhZ7nFaFRe28J1OJruKqj0Mzjq8g8''@;'; put 'put ''/o365nHGRlmC2bNLB4x+6C5lo8lZe3I0IxNP/N9bSM+kUiuyBAUBJpjdB7vQvi9pwchvUBZBQBAwNgJCMI0tP3/1ni0VrXq5tLyZ0XGWat3vrSfN43tCwDzOclCWYEaE2/EmRZOrmnSdhWcmm9ykb6bgxxlz+assQUCA/eJ60Jtt216mat1wgtBlOaUgIAhUgIAQzArAkZ8oUwNpM4cVoXEHCgA6''@;'; put 'put ''WdWqMrBo5vFsF6a+E07+4ezbo/6iLMFk0Y26/nJcNvxcZZOuF6cs2o+nKPF6Xr6aEfN6vwQ5MKPXBS6KOhQNpt5lJf0TBCqDgBDMyqAU2vuwNrPNmS50HcB5ZSvnm8m1x7cspeTqP6idXL3kzFCaYHZo3QIvPn4v+cazc3z1fCZKgqXLz2Qqf/ujLzH3z2W67J7qndII5vlOtOohGkzVZS3jCw0E''@;'; put 'put ''hGCGhpx9Mcr4ui6yYDnRuK2ZggApo8NJ/+qy2uZ5NfsTEw5spai+EFmUJphWSuczZvRDaN6kEYqKKIRUwYVTFq3btA3PjZlAUbPiAxhoEQvBDDTicj5BwL8ICMH0L76qte7VZnYZ6KK0YmVrM7n2+PEMN34ZF07p0ioRFagISEoTTJbR1RcNxS0jLlXWTM5jdNFb0yvvfITlazfyV1kCiIAQzACC''@;'; put 'put ''LacSBAKAgBDMAICs4Clq1SvWZjZq809tJpvH1/7uxvIZoWMeZxErTzAb1k/StJhhlHROVTM5+2IuX7MBL739UXHePAUvXr0OSQimXiUj/RIEqoeAEMzq4SZHEaEyedD2TCdVAXIjMvqkNvOkwvLXD2xI26927fHSc0B5gskDfo7SFfXs2lHZyj48Rgdlin7xzQ+wbvM2/ipLgBAQghkgoOU0gkCA''@;'; put 'put ''EBCCGSCgFT5NfD0neg53oSFpMznH7eE9Tkx/P7y4UIPC4y49tJAgmOec2QOP3XOrsknXWahW0tDOX7Qcr737SWkZy3c/IhBGNaB7Dneg9Rll+9748dTStCAgCPgBASGYfgA1BJs0m0mb2ceJHkM8WDXHhPXzQye4xyvukCCYMVGRGEs5MeskJsClaCAMJ14vKHRQsM94bNmxxytfWfsZAZud69W6''@;'; put 'put ''0LGfpCnyM9TSvCAQEASYYC6aYsbO1RatbGhATionURaBhCQXCnJNyMsJjdyXJQUZEgSTBzzqOsqJeb66OTF5jBYqH7lwyQr8b4JoMRmPQCxcW7rdWW70GEa1r6WSTyAgl3MIAn5FgCN+F3xnwd71lEj7ZC16v55QGhcEFEUgZAhm6+aN8fKT95MTLiUVUDQnJo8tv6AQz78+QbSYAbpgLVYPmnZy''@;'; put 'put ''oe/lLridiuZaDRCWchpBIOgIcECGy4PfvrLh4A5LyPnMBR1/6YBSCIQMweT7xouP34fO7VsrW5+cZ6ZoMQN7fXLUYFITFwbd4ITZSucWjhlYAcjZBAFfImA2wZHrwZxPwpB+mJ4aHn5yyCIICALVQSBkCCaDc+7ZvfHgHTcpHewjWszqXAbVP4a14XGJHgy6yYHYRNKOk/ZDFkFAEDAmAmwezzxC''@;'; put 'put ''GsxJYcgNQZ85Y0pNeq1XBEKKYMZER2Hs848oHezDE421mH8sXan5YqrqDqCnC8oe6cZZlzrRtIMJTodUU9KTbKQvgkBVELDZLdi+0oMlv1jhyAu9oIyqYCX7CgKnQyCkCCaDMfLqi3HVxecpXdmHx+mg0pj/pbyY6zdv56+y+BEBi82DNj1d6HWhBPr4EWZpWhDwOwKWMDMWUwT59lUU4FMk5nG/''@;'; put 'put ''Ay4nUBqBkCOYjRsk47VnHoLNZlU22IdnLNcoX0GlIzn5usvtVnoSB3twFFuFhBQXhtzogC2CtB5UulMWQUAQMBgC5H9ZmOsm/0s7MsT/0mDCk+7qEYGQI5gshGfuH4Uze3RRurIPj5NrlL82YSKWrFrPX2XxIwL2SA/6XuZA4/ZmMZP7EWdpWhDwFwJWMo/vWushDaYVhfliHvcXztJu6CAQkgTz''@;'; put 'put ''jC7tMfrBu1BEZmSVF9Zibtq2E6PHTCAy7VB5qEEfm8XiQeOObvS7oogCfYLeHemAICAIVBUBskTM/9qK/VstlHJMzONVhU/2FwRKIxCSBNNGQTD/e+YBtGjaWHmSSYk/MX7SZMxesKS07OW7jxGIjHVj4DUO1GlsJv8tcUvwMbzSnCDgNwSsYRak7nBj4WQb8nJFe+k3oKXhkEIgJAkmS/j8Qf1w''@;'; put 'put ''763XKR/sYzabsS/1MJ58+S3knMgNqckd6MFarG406+JGn0vccLuEYAYafzmfIFAtBEhZyfrKBd9YsXczaS+lek+1YJSDBIHSCIQswYyNicYbzz2sfMoiFrjVasNn303FN9NmlZa/fPcxAhFRbpx9VRFSWokvpo+hleYEAb8gwKmJdorvpV+wlUZDG4GQJZgs9puuvBDXXHq+8lpMTr6ecSwLz7z6''@;'; put 'put ''Dg4eORraM97PozebqbJPMzcGjHDCaqdCIBJR7mfEpXlBoPoImCixegFV7vntUxsyDpops4j4XlYfTTlSEDgVgZAmmMn1auP10Q8jMiICbsVT+VhtNsya9yfenvjVqTNAvvkcAZvdg479i9B1oAlFhRLx43OApUFBwBcIEJdkF6Jl083YulzyXvoCUmlDECiJQEgTTAbivpHXYPjg/iGhxSygSPKX''@;'; put 'put ''3voQ6zZvKzkH5LMfEIiIJlP5lU40aC0k0w/wSpOCQI0RsIVbsHWZmwimDQ5JS1RjPKUBQaA0AiFPMFs0aYhXnn4AFnqTVb2sIqctWrtxK14Y+75W6af0ZJDvvkNAS76e7EL/EUVUq5yiyp0S9OM7dKUlQaBmCHDOy8O73FhAaYlysswU5COm8ZohKkcLAv9EIOQJJkPyxL234uzePVBQUPBPhBTb''@;'; put 'put ''YiIizWmLZs1frNjI9Dcck8WNBi0oAfvlRbBHmig6VSr86E9K0qNQQ8BqM+NYugfzJ1tx7JCFFAuhhoCMVxAIDAJCMAnnTm1b4oVH79E0mKprMTng58jRDDxNAT9HM44FZpaF8FksVg+atHfiTEpdZLFR0I+QzBCeDTL0YCNgIXJ54hhpLr+x4eh+M/nei+Yy2DKR86uLgBBMki2Trucfugs9unRQ''@;'; put 'put ''vnwkT2ULJZr/Zc4CvPfZt+rObB2NzGLzoHlnJ3qeLyRTR2KRroQYAkwuc7Pc+PMHGw7uJJcoIZchNgNkuIFGQAjmScTP6EzlI4lkql4+kofLhJoDfl586wOs37w90HMuJM/HJLMFkcwzLnBTXlKIuTwkZ4EMOlgIcKWe7AyXRi4P7xFyGSw5yHlDCwEhmCflzUE+/33sHnRu3yY0tJgn65Q///q7''@;'; put 'put ''yC8oDK1ZH6TRcqWf5p3d6HkB5cgkbYpU+wmSIOS0IYUAJ1LPPOzBoh8sSCOzuOS6DCnxy2CDiIAQzBLg9+7WEc88cCccDkeJrep+tFismPTNFPww/Td1B6mzkZktHrTs7kS3QW6Ex5ikZrnO5CPdUQsBTkV0aJcHi6dYcDxNAnrUkq6MRu8ICMEsISGr1YIXH7sXHdq0DAmSyabyrJwTGP2/8dhz''@;'; put 'put ''4GAJJOSjPxFgc3mDVk50H+ZBfG3A6ZAURv7EW9oOQQTMXCLXjN0bgGU/W8n3koN5JKAnBGeCDDmICAjBLAV+nzO64Mn7bg8JgslDt5JD4OIVa/DK+ElwuaTqTKnp4LevXFIyMcWF7kPdSGkOFHGeTOGZfsNbGg4dBMxU/pErs21facWKmRYUFRDblEUQEAQCjoAQzFKQh5oWk4cvuTFLTYIAfo2O''@;'; put 'put ''d1NZSSdadKfgH4skZA8g9HIqBRGwhJlReAJY+7sZO1bRZ6nQo6CUZUhGQUAIZhmSCqWIch4+1+NNS8/E6DHjcfDw0TIQkU3+RMAW7kbTjm50PseF2AQqLVlEqkxJ/uxPyKVt1RAwm8gaY0LaXmD1b1SlZze/rIlJXDUxy3iMhYAQzDLkxRHlLzz6L3Tp0DYkIsoZAqvNhoVLVmDMu5/CReYlWQKL''@;'; put 'put ''AJvMayW50GWACw3aerRUUm6nsMzASkHOZkQEOL+lk17Ktq0wY9NCK7KPc+FHIZdGlKX0WS0EhGCWI89uHdviOcqLGUp+iZqpfCKVkVwgZSTLmRZ+32yPcKNZFxfa9/EgjgKAioqIZLqFaPodeDmB4RAwkdbSQlrLzEMerJ1nwf6tRDQd4m9pOEFKh5VFQAhmOaLlCOvRD9yBXt07h0SNcoaBTeVc''@;'; put 'put ''PnL0a+ORejitHGRks78RMJkouryeG+37utCknRu2CDL3idnc37BL+0ZBgJSTNtJaFuR5yM8S2LTIhpxjrLEUraVRRCj9DA0EhGBWIOd2rZrhxcfv025bqtco98LApvIlWlT5RDidElXuxSUYa05nVL+5Cx36uFGvKZnNSWOjEc1gdEbOKQjoAAE2h7sp2wWXetz4hw1H9oB8LUVrqQPRSBcEgX8g''@;'; put 'put ''IATzH5CcuuGRu27GzJmaHAAAQABJREFUwL69QkaLyaM3U5Wfj778HlNnzT8VDPkWFATCIjxo0tGFNj1dqF3fRJVI+KEqfrJBEYacNCgImMkUbqYXrIyDbmxabMXeDRY4CkRjGRRhyEkFgUoiIATzNEA1bpCM/z3zIOxhYVputdPsrsTP7B5wIjcPXEZy++59SozJ6INgDXpUjAdNO7nQsqcbCfWI''@;'; put 'put ''aBLHFKJpdMlK/ytCgHNaMrnMJo+drStN2LnKgtxsCuGhe5QsgoAgoG8EhGBWQj533nAlLjlvEPLz8yuxtxq7WEiLuXHrTrww9j3k5ReoMSglRuFBRAzQrFNx7syEJB4Umc5ZoymxQEpIWAYBCt4xw2QBso+Sn+VqM3autiCHosPhEWIp80MQMAoCQjArIanaCfF447lHERcbHVJR5Vzl5/tfZlO9''@;'; put 'put ''8qmVQEl2CSQCHmKTkdFAo/YutOjGpnOP9lB2cmojiToPpCjkXL5CgLgjl3fk96TjR4hYrjFhzzoK4DlOG4RY+gplaUcQCBgCQjArCfWVF5yLW6+9PKS0mGyGKipy4vX3P8PilWsriZTsFmgErHY3GrR0o0VXCgZq5kF4uAlOF1FQ+pNFENA7Ahy8xknSucBAxgFg51rysdxoQT5V5JHIcL1LT/on''@;'; put 'put ''CJSPgBDM8rE55ZeoyAi8Pvph1E+qS9HVzlN+U/kLpy46cjQDz1LqosNp6SoP1fBjs1jdVN/cg+aURzOltQextdikCJqvYj43vHBVGwBrK6k0KsgMXpDjQepOE3atMVMFHqodXihmcNXELeMJTQSEYFZB7sMG9MF9t14XMtV9vNCwqXzZ6vV4ZdxEOIqKvJtlrVMEOI9mVJwbjdpRUFAHJ5FOyhto''@;'; put 'put ''59J5HkrxIlpNnYotJLploqAdK/3xS8+xI8C+TRbs3WTG8aNkGncJsQyJSSCDDBkEhGBWQdSsxXzm/jvQqV2rkCOZFosVX02ZTn8zqoCY7BpsBDiXZr1GLjSmWucpLUirSbXOObErk02P+GoGWzwhcX4mlRb6Y2169nEPDpO2cs96M9UNp1RDoq0MiTkggwxNBIRgVkHubC7mEpJP/fv2kEq+zhCx''@;'; put 'put ''P2aho4hqlX+CZWs2VAE12VUXCJBWMzIKSGnlQsN2LiQ14mh0Cz3zPaRNoie/kE1diEmVTvxFKulOmZvlwtH9ZuzbbMYhSpCel03aSlGkqyJqGYcgUC4CQjDLhabsH8JsVvzr5hEYOqBvSAX8MBqcuoj9MJ8bMwEHjxwtGyDZqnsETGb2z3Sjfis3GrYmv80GoIh0fuh7RLOpe+nptIOkoORE6Fwb''@;'; put 'put ''nPOz5ma7SUNpxoHt5Fe5g/LqZvH8op1kEQQEgZBBQAhmNUTdKCUJLz52X8ilLWKo2B9z5bpN5I/5MfILCquBnhyiJwTMFjabE9lsSWUpW7hQpwFpOkmzCdJ4aj6brNkUbZOeRKafvnD0N5m+TRSrwyVMsylPZdpe4OAOC47sNp3UVAqp1I/ApCeCQGAREIJZDbytVgsuGz4YI0dcGnJaTIaLSeZP''@;'; put 'put ''M+fhgy++l4oa1Zg/ej2ENZvRpNms19iDlJaUW5PIZkw8aaVsxVopTn0kpnS9Si8A/SKuaCFSyZV12JG3MNeJYxScc2SviUilGZmpFhTkcT+EVAZAGnIKQUD3CAjBrKaI4mNjMPrBO9GqeRM4HI5qtmLMw9gfk5VaEyZNxqwFS4w5COl1xQiQBjM8Akio70Jy8+JAobh6QEQUVVgh/uBxUfoj1m6K''@;'; put 'put ''72bFOBr5V5Izm721co3sg13gQm4O56okUrnHqhHLLCKYbon+NrKUpe+CgN8QEIJZTWjNdMPt1a0THvvXLVoL7L8WSguTzByqV/7yOx9pJSVDaeyhOFY2pcfU8mh5Nus1cSGxvhuxtSlQKNKqmdO1uuic3J2vg9C6FNSZDkQoWUNpIg0lX9/OQiKUWR5kHjHj6D6O+jbheJoZhfm0o2gp1ZG7jEQQ''@;'; put 'put ''8BMCQjBrACwH/Nw78lqc2/+skDSVc9DP/oOH8Z833tOSsdcASjnUYAhY2Jye6CENp5v8NilQiEpVxhHhDI8ivzwbabWIaHIlIRcFfIiWU4fC9WonmVCSDyWXYszPd5LfpAnHDpmQTlrK9FQzsohcFhQU/67DUYR8l2z0DLKH2RAVGYnwsDDY6LM3RJ/f85xUia2ALGx5efnII0G6tAsy5GETAAKE''@;'; put 'put ''gBDMGgLdILkeBfzcg4Ra8SFV4ccLG/tjrli7Aa+OnyRBP15QQnBtJpN6RCyRzLpEOpPcSEj2IJ4+R9E2O5nVuRQgazfZtM7k0y3BQ4GbJV7NJAXkEJ8kBTOVZSTtZP4JD7IzyHfysBkZRCozD1JKoWNmFGkeP6yllEVPCERGhCO5Xh00bVgfjVOStapyibXiEBsTjXA7kUubjYKuLKf4xTtdLi1n''@;'; put 'put ''M6eYyzmRi6MZx5B6OA17DxzCngMHkXoojdLPhZaLl55kqnpfhGDWUMKsxbtgcD/ceePV9KbPr/qht1jpxjZ9zgK8+9m3xSbS0INARlwGAnRpIDKWTOl1PKhFZDO+jovM6rQt3kWaTjPCqLoQ+/hpxJMt66zxZLWLmNnLQPM0m5gPklmb85lzDkr6qBENFwFamOdEfq4ZJ46xiZs0lEQos2idTd8d''@;'; put 'put ''eZKT8jTIBvXnlKQ66NS2FTrSX/PGDVA7IR6RpK3U/ODpOuGyxcXXT7F7Cn/m30ou/J3/OI+z94/3O0GEMy0jE1t27Maq9ZuxadtOHMvKKXmofBYEaoSAEMwawVd8MFf4efLe29CVkrAXFoZm6h6z2YJJ30zBjzPm+gBRaUJVBLiMpT2CUiGRZpPJZkxtIqAUuR5di4hnHJnYIz2w2oGwMCs9FAkF''@;'; put 'put ''IpyauZ3LqdNDkasPMQcNOT/Pk5yBrdmshmRizqZtjWjQJlehm4Jw3CjIp0TmWUBOOnCctJM5FISTfYzzUrJPJTdyKvng5mTRFwJ1EmuhZ5cO6Nm1I1o0aYha8XGanIuoTK/b7dauA1/0mOcOK0hY8+kiTWdaegY2bNmBhUtXYc2mrRS8KmWBfYFzKLchBNMH0ucLtW2Lpnj+4bvpwWjTbgI+aNZQ''@;'; put 'put ''TTAGRU6XVulnyap1huq7dFYPCHioXjpgJ4IZGcPkk9ZUTz2GSGcEE0+qQsS/hdE+VkqbZAujaHZW19GiEVEioExENULqjWw/SUY1Qso7/vWBv+hgOcn1NNqnMcdi4sg9I2WTRiR5SNqYyHeuyEF/RBId+R7SSBKJzLTgxHHgRCYlMifTdl6OCQW5bP7mFoRIMgpGWfjlqW3LZhjS/0x07dAGdWsn''@;'; put 'put ''aqSSM5Twb4FYmGyGkR8nE9mde/bhtz+WYQGRzeNZ2VpfAtEHOYdaCAjB9JE8beSLOOKSYbjusgtCMuCHYWTzy5GjGXiNyklu27XXR8hKM4IA0SUKKgqz0194MdEMjy4OKIqIdmvEMyKKfqO/cCagtI+VYh2sNjcsYTwvKfDISuZBzh+vqf0IUeJff1Ew/nCSyBWv6H/vM927Pp0QvI1p7RZ/0f7X''@;'; put 'put ''iGNx+381xc0T+eWAC05m73KaKFE5iEB6UFRABJL+ColA5hFZzD9Bf2S1zM+hYBtaF1AEtyOfgze49eLznK5r8rt+EeAX887tWmH4oH4aseRgHTZ7s0YxmAsTTSace/enYubvizB74RLNhzOYfZJzGw8BIZg+lBnnxnz2wTvQunnTkMuN6YWRSebOPfvx2nuf4OBhKSfpxUXWgUKATOyUUslMWk6L''@;'; put 'put ''1Wtu98BC5NQWRppPIp62cLdmhrfa6Hfaj9dc4pD3N1PWJYvVreV+5Ie/2UwklROLk2n/L9JZciisPiUNk5MIosftLbdJJmviBy4igW4nkUH6c1EchYO0j07vmrSMHFtRVGAm0zURy0Iz7c8+deyTKsSxJMSqfm7VrDEuHjqA0t11RGREhPbMCJS2srKYchAnm9B37d2Pb6fNwvwlK0PSQldZvGS/''@;'; put 'put ''UxEQgnkqHjX6xuSqS/vWeOb+UZpJQW83ixoNrgoHm+nNd82GLXjj/c9wPFucxqsAnewqCAgCiiOQQD6VlwwbgHPPPlOLAGeTtN6fFUwyeVm+ZgM++24adu8/qPs+Kz6NDDE8IZg+FhObym+66kJcccHQkDWVs+aHTZELl67EOxO/QkGhpMHw8TST5gQBQcCACPTs0h7XX34hmlFEOJvBOWjHSEsE''@;'; put 'put ''aVozMo/h66kz8ctvCzQ3DyP1X/oaWASEYPoBb35Dff7hu+gm0jBkTeVMMjnWYua8P/DR5B/J9BdcnyI/iFmaFAQEAUGgUgjEREXi6ouHYSgV5QgnR2H2szTqwr6Z/Dd/8Qp8TPf29EyKNJNFECgDASGYZYBS001cRrJbp7Z46r7bQ9pUziTTRSzzh+mz8cUP02sKqxwvCAgCgoDhEGhCidFvu/Yy''@;'; put 'put ''dGrXmvx03YbTWpYHOOfj3LZzN97++Cts371PTOblARXC24Vg+kn4xabyi8hUPiRkTeUMLfulchWJz7+fhqmz5vsJbWlWEBAEBAH9IdCzaweMvPoSpFDFNyNrLctD1m63I/PYcYz/5GssXbWeFArGMvmXNy7Z7hsEhGD6BscyW0mIj6WAH4oqb9E0ZBOwMzCsyWQ/zI+/+hGzFiwuEyvZKAgIAoKA''@;'; put 'put ''SggMpZyWN1x5EeKolKOK5NIrK44053KT73/+nZY7M9gplrz9knXwERCC6UcZsPauU9uWeJqiylmjaTSHbl9Cw1icyM3TyklypQhZBAFBQBBQFYFLKP3QNZcO12qEh8J9n30yWXv5yTc/YdpsDv4Rn3tV53ZVxiUEsypoVWNfq9WCERcNw/VXXBjSpnKGjknm8ewTGEeR5cso3YUsgoAgIAiohsDl''@;'; put 'put ''wwdT0Y3zEGYLLaUC39/ZWvXBF99j+tw/hGSqNrGrMR4hmNUAraqHRHOt8vu4Vnk7FBQUVPVwpfbnmxBHHY6bNBmr1m9WamwyGEFAEAhtBM6nijw3XXWxRi71ntvSH5Li+zuXbB1P9/d5fy6HUzSZ/oDZMG0KwQyAqPitrkWThnjuobsQEx0V8m92bE5JS8/E2A8+x4atOwIgATmFICAICAL+RaBf''@;'; put 'put ''r26468arqCpPeEhHVPP93UGBnS+P+wir1m3WCKd/kZfW9YqAEMwASYYvuvMG9MFdN10NI1Ru8Dcs/KZ7mOqWv/3Rl0Iy/Q22tC8ICAJ+RaBdq2Z4cNSNqJNYK6R97b0gc+WfoxmZ+M/r72HPAan648Ul1NZCMAMocbs9DPfecg0GU4mw/Pz8AJ5Zn6cSkqlPuUivBAFBoPII1E1MwKP/uhktmzYW''@;'; put 'put ''clkCtvDwcGzYvA0vvvWhlAwugUsofRSCGWBp162dgP88fDcapiSHbJWfkpALySyJhnwWBAQBIyHAQZysNDj7zB4wUcdD0e+yInlxMvYfZ8yhFHVT4KCa67KEFgJCMAMsbyZUXdq31oJ+Qj11kRd6L8l8hypCrN+y3btZ1oKAICAI6BqB4QP74pYRl1IaOouQyzIkxfEH/Pfau59g0fI1koi9DIxU''@;'; put 'put ''3iQEMwjS5bdeTmVxM1V4CPWoci/8TDKPUODP2x99QSRTAn+8uMhaEBAE9IlAY7JCPUHZQZLqJAq5rEBE7I+ZevgInnl1nBbcWcGu8pNiCAjBDJJAOdLw4TtvwllndBV/zJMy8EaXc9kxSWEUpIkppxUEBIHTImCloM37br1WM41zffFgLawd5Psm//HCL+q8eE31XEGIk557v2s/BuE/MZUHAXQd''@;'; put 'put ''nFIIZhCFkJJUF6MfvBP1ac2R5bJAu1FmUG3bdz/9FktXrxdIBAFBQBDQHQK9u3XCv2+7nir12ALeNyaVYWFh2nlzc3ORcSxLyy3M981cDh71gPplR1xsNNjnPyEuFvHxcZqp2ks4A91p7jPnxHxuzARs3Loz6IQ30OMP1fMJwQyi5M100XXr1BZP3Hsb+I04FEqKVQZufhs/np2jVYSQspKVQUz2''@;'; put 'put ''EQQEgUAhEBFux1P/vh0d2rREILWXrJ1kYpmbl4ct23dr1dA2Uh7hQ2npyMsvu4BHGJmnE2rFUYR7I3Tt0Aad27VGUt3aGsELtFKDo8qXrFyLl9/5WKtdHih5yXmCh4AQzOBhr52Z/TEvO2+Q5igu/ph/C4Nvply7/NNvp2Hm/EV//yCfBAFBQBAIIgID+5yBO2+8OqDVeuykkTxB2so/l63Gr78v''@;'; put 'put ''ws49+6tVJacWaTP7nNGFUuX1RvMmjTSCHKi64azF5OW/b74vCdiDOH8DeWohmIFEu5xzhVN+TPbnGdi3t/hjlsCISWZ+QSG+mjIdP838vcQv8lEQEAQEgcAjwNrLp/89Cu1aN2dHR793wOtfuYzchb6dNgvbdu2tFrEs3dEoKl88qG9PXDx0IJLr1UFhYWHpXfzyXbSYfoFVt40KwdSJaGonxGul''@;'; put 'put ''JJs1bhiwi10nQ6+wG0wyi5wuTPn1NyKav4Z8mc0KwZIfBQFBwK8IsPbvnluuRUR4mN/9CNkczlacyT/NwIy5f6LADySQ4wBGjrgEvbp3hpPiAPwdDMRaTK5V/ixFlG/cJr6Yfp2sOmhcCKYOhMBd4AuvXctmmm8P1ytnZ2xZihFgkukmZcHM3//AJ99M1bSago0gIAgIAoFEwEL3oYfvugm9u3Wm''@;'; put 'put ''0/pXe8km8dRDR/DuZ99g7aZt9Dxw+W2o7P9/1UVDtdR57LLl71iAiIgITJs1j3zsf5Dk636Tqj4aFoKpDzloveAb2MC+vXDvyGu0i9zfb5M6Gvppu8IE3ET4LFq+Gu999p2UHjstYrKDICAI+BKBZo0a4On7b0cCRWT7897M5HL3vgMY+8Hnmq8la/wCsZxLfpm3XnMZRaD7VzvLZv9Minh/7KU3''@;'; put 'put ''ceRoRiCGJucIEgJCMIMEfHmn5eo+119+Pq6++DzxxywFEpNMM92c1m7coqUxSj2cVmoP+SoICAKCgH8QuPLCIRhB92WL2eQ3gllMLlPx+vufEslM9bs2sTRS/Xp1IxeAEVqaI39qMnmcbxKB/u2PpT7xKS09DvmuDwSEYOpDDqf0gh3JOQl7n57dhGSegkzxFyuR8J1792MCJWTfunNvGXvIJkFA''@;'; put 'put ''EBAEfIcAp/th7WXHtq38FtzDFW/SqJrZa+9OwtYde4JWVvG8AX1w+/VXgNPo+UtTy8E+fyxdqZWQLHRIDmjfzVR9tSQEU1/y+Ks3nCD32QfugAT9/AXJKR+YZPLN+IMvvseSVetO+U2+CAKCgCDgSwSaNUohgnkHmcdj/UK6ioMZnZpZfOmq9RTYGFwf/Fsp8OcSSp/nr1gANpMfy8rGoy+8rpUI''@;'; put 'put ''9qWspC39ICAEUz+yOKUnbA5u3byJFvQTHxvjtwv9lJMa7AvfpHLz8im6fAamzZ7vlxu/wSCR7goCgoAfEBg+qB9uufoS2CgIxh9aPTYZfzN1Jr6ZNrPcpOl+GFa5TXIp46dPJpP3V55M1tj+39sfUvL1dUHT1pYLgPzgEwSEYPoERv80wkE/Z/borJnLmXD60yfGPyPwf6v85u9yufHLbwvw5Y/T''@;'; put 'put ''JcLc/5DLGQSBkEPg/tuvR/8ze/jFPM7kchOl7HmFKtwczTymG2zbtmiKZ6mUMbts+YNUc33yb6b+qhXTCLbGVjegK9YRIZg6FyinjbhoyDm47drL4XA4/HKh6xyC03ZPizA3mbF8zQa89/m3OJqhn5v0aTsvOwgCgoCuEeCk5Oyu1KpZY5/3k+9dHCM+5t1PNFcff6Yjqk7n77zxSgwfdDZcfjDZ''@;'; put 'put ''M7Feu3Ernn99AuX4dFSne3KMzhEQgqlzAXH32MH81msuxcXDBkrQTzny4hs1m8x37NmH9ymN0eYdu8vZUzYLAoKAIFB5BBqlJBHBvBOJVNPb1wuTrKXkQ/4GRVRn55zwdfM1bq9Bcl28+Ph9iIuJ9rlyg+/XGZSu6NEX3tCV5rbGoEkDfyEgBPMvKPT9gd+iH7rjRpx1RlchmRWIioN/+KbFCdnn''@;'; put 'put ''LVpewZ7ykyAgCAgCp0egZ9cOuP/2GxDpY1NxseXFhP9NmEQkM/iBPeUh8a+br8bQAX19rsXk8bvcbjz18ltaNhB/mOHLG5NsDwwCQjADg7NPzlInoRaevO82tKGKPwUFBT5pU8VG+M24kNwJps76nXx8ZmmfVRynjEkQEAT8j8CF5/bHTVddDKvF7FMtHge57KJ0ay+88b6uNXidKDXTMw+MovFb''@;'; put 'put ''fA42l8N8+Z2PqIDGGgn08Tm6wW9QCGbwZVDpHvAbX+MGyRTdNwrJ9epoPpmVPjjEduTgHyrAiaWr12Hi5Ck4lJYeYgjIcAUBQcAXCNxM5JJJpsXHBJNLJn7/y2x88cMvuogcLw8rDvJ5iczkzRo38HmgKWPwwRff4aeZ8/xaDrO8scl2/yIgBNO/+Pq8dSZOHdq0wBP33IroqEhJX1QBwl6/zL0H''@;'; put 'put ''DuKjr37E6g1bKthbfhIEBAFB4J8I+COC3Gsef21CcXCP3qOo777pKgwb2M/nZnKOJP/u51mY9PVPQc/9+U/Jy5aaIiAEs6YIBuF4b/qiB0fdCI4y91eesiAMzS+nZL/ME7l5Wo45NptzWiNZBAFBQBA4HQJMBB/71y3o1bXj6Xat0u+sKOCgnudff5eqkh3wqem9Sh2p5M5D+5+Ju2+5Bm6Xq5JH''@;'; put 'put ''VG431mDOnPcHxk2aDEdRcJPLV67HsldVEBCCWRW0dLQv+xlySa9RVNKL82OKg3TFwuEbOqcDWUjlyT79dpqkMqoYLvlVEBAECAF+gX/qvtvRuX1rcrjx3cL+l3v3H8Tzb7yrVSTzXcv+aalD6xZaqiabzerTE3DJyAWLV2i116VkpE+h1UVjQjB1IYbqdYJvflddOBTXX36B5MisBIQlTeYfk1/m''@;'; put 'put ''qvWbK3GU7CIICAKhioA9jGuQjyK3pJY+TbLO6Yk2bNmOl976EMezc3QPb0pSXfzfE/chJjrKp31lHJavXo+XKNCnUHJh+hRbPTQmBFMPUqhBH2xk/h1JdWMvHT5Y0hdVEkc2meecyNWizH+cMVeizCuJm+wmCIQaAlwycTRVs/F1knUmVivXbaQURZ/oMv9laTnXrZ2AFx+7B3USE3xqLWMcVq3b''@;'; put 'put ''hBfefF8IZmnQFfguBFMBIfJb9j0jr8G5Z58lJLOS8mSTOWs0V6zdiE/IZM6BQLIIAoKAIFASAbs9DKMpyXqblk19aiL3Eqv/UQWfLANoMGsnxGsaTH8QzOVrSIP5tmgwS847VT4LwVREkjEUUf7AqBskEXsV5cm+UEeOZuCrKTPw28Ilmp9mFZuQ3QUBQUBRBNhC9PT9t6Mj5YL0pQ8m53/cvH0X''@;'; put 'put ''/jv2fUOYyJPqJGoEs1Z8nE81mJoP5hLywXzvU7IkFSk6i0J3WEIwFZJ9QnwsHqRqPz06dxBNZhXkyiZzThOycMlKfE456aSWeRXAk10FAYURYEvHE/eMpHtqe5+Oku85Bw+n4bkxEwyRo7c55cB84dF7wDkxfblwFPnsBYvw9kdfShS5L4HVSVtCMHUiCF91oy75yDxKaTXaU9SfVPupPKolA4C+''@;'; put 'put ''/HEGFq1YU/mDZU9BQBBQFgEu0duvV3fS3PkuvRkT1/yCQox+bTy279oLt4dzXOh36d2tIx65eyTMvlTj0nA5D+aUGb/hwy9/kDyY+hV/tXsmBLPa0On3wOR6temt+za0bNZYSGYVxcSaBQeZamaTufzrn37FsazsKrYguwsCgoBKCIy67nKtFreF2JUv08GxmfzNDz/H74tWkPZO3+bhay4ehmsu''@;'; put 'put ''PZ9yCPs2VyVrMCdO/hHfT58jlXxUumhOjkUIpoJC5SE1rJ9ECYJHonmThkIyqyhj1mYy0dxFCZC//PEXLFm1vootyO6CgCCgCgJXnD8YIy4Z7vNa5Ox/OGPuQnDKNC4EodeF74fPUi3ybh3b+bxUJGMwhgKd5v25TGqR63UC1KBfQjBrAJ6eD+WbQtOG9TWS2TAlmVJAFOq5u7rsG5NMdjyf9+dS''@;'; put 'put ''qgI0S3wzdSkl6ZQg4F8EzjmzB+666Wpwtg5fajD5/nLoyFGMHjOe1un+HUQNWq9fr44W4BMbE12DVv55KD+jGM/nxryL9ZQTlAuGyKIWAkIw1ZLnKaPhC5idsx+5+xZNoykk8xR4KvWFfaX478DBI/h66q+YT1Un9O0tValhyU6CgCBQSQRaNG2Ep/99O+J8TLD49Gwmf4vN5HRf0WsU9aXnDcTN''@;'; put 'put ''V1/i8zKRfF/lfMSPvTgWqRTwJIt6CAjBVE+mp4yISWbLpg3x+D23ol6d2lrFn1N2kC+VQoBLc7roDXvR8jVaTfO9Bw5V6jjZSRAQBIyLQDSlf7vsvEE4b2BfhFNOTF8vnA9z3aateGXcRF36e3Oi+f9S9Di7Wvlaw8gp4rbt2oOnXn5bC3jyNbbSXvAREIIZfBn4vQdMMts0b0KazJuFZNYQbb4p''@;'; put 'put ''pqVnYurMeZg5f5HcGGuIpxwuCOgVgTMoNdHVFNzSiu6dbpfLp+bxkmPml9e3KE3PAkqTprdgn6HnnIW7bx7hc+0lj58DfGb9/ifemThZd+MuKR/5XH0EhGBWHztDHamRzBZEMu+6GUl164hPZg2kxw8EKgOETVt3kNl8JlZv2FKD1uRQQUAQ0BMCyeRzePnwQeh/5hla3sciP0d480vr7n2pePGt''@;'; put 'put ''D3A4TT++mLXiYvDfx+5Fg+R6Ptdesrw5wOftj76gF/XFFJ3u0tMUkL74CAEhmD4C0gjNFJPMpnjozhtRv15dIZk1FBo/GPLyC8gvczl+/HUuJU4+WsMW5XBBQBAIFgJsAh/crzcuGnIO6ifV1UiPr83C5Y2NydZPZBX57LtpyM3LL2+3gG6/44Yrcf7gs+GiIhS+XvhZxOngnnz5LeykbB2+DJ7y''@;'; put 'put ''dV+lveojIASz+tgZ8ki+sDm6/FFKYdRIostrLEN2VOdoUNY88APitz+W6uYBUePBSQOCQIgg0LVDG1x5wRB0aNtSKwnp9AOpqghKvi9z8OA4MhfrwVTet2dXPHD7DbBYzH4hf/xyvp38L59+dZzcLyuaGAb/TQimwQVYne4Xk8wUPEo+mY0bpkiezOqAWOoYNpubiGxuofrC3/08G8vWbPDLjbnU''@;'; put 'put ''aeWrICAI1ACBFNJUXkbmcK7UExUZEdQgSH5Rzco5gf+Nn4gNW3cGzWzcjDKPcNR8Yq14v5jGWVzsfzl5ynR88cN0qeBTg/mr90OFYOpdQn7sH2swH77zJs2JPT9fH2YZPw43IE3zmzk76i9ZuQ5TyGy+jcrAySIICAL6QoBzOg45u7dmAq5D5XXZBzBQ5vCKkOC0RVyj/PX3PtXuHZy5IpBLUt3a''@;'; put 'put ''ePLeW9G0UQOqrON70ziPxautfZa0lxvIj13M44GUcGDPJQQzsHjr7mwNkutqppD2bVpCSKbvxMMPimzSRsylChU/z1mgJVT2XevSkiAgCFQHgTCbVdNWXjz0HDRrXJx6R28BJpy6KPXQEYybNJkSkO8ImCYzqU4i+effhDYtmvqNXLLM+N64eftOqsM+Qczj1ZnEBjpGCKaBhOWvrtatnYB/33Yd''@;'; put 'put ''undqLyTThyB7/TPT0jMwY96flJJjEY5n5/jwDNKUICAIVAYB1pp169hWy2nZoU0L8i20wN/R4ZXpV3n7MAk7npWtlZFcuHSV39P4cEGO+269Tst36W9c2Dz+3qffYBq9ePtLS1oerrI9sAgIwQws3ro8G5so2N/m3pHX4KwzuiIvT791cXUJ4Gk6xQ8zJpv7KDn7dKo9zFpNjj6XRRAQBPyPAGvk''@;'; put 'put ''WGPZs2tHSpZuD6qfZVVGyz6ZTjLd/zr3D3z3yxxkHDtelcMrvW+fM7rgtmsvA7sK+Jtc8r2QX7Ife/ENXZfHrDR4smOFCAjBrBCe0PoxNjoKo66/AoPPPlML/BHfGN/Knx8YnD9z/aZtmtl85bpNVB7O4duTSGuCgCCgIcABPJefPxhMoGKiow2Zlo01r2wy37V3P76dNguLVqz1mTYzsVacptEd''@;'; put 'put ''RlWKbHRvCoSrQGRkJH6cPgcfffWjBPeEwHUqBDMEhFyVIUaE23HzVRfjQsoF5yDyIySzKuhVbl8OBOK6wxu2bMMvcxZizcatPntoVK4HspcgoC4C7EvI+SwH9OlJRSVqa2ZYPQTw1ARxNpmzOZmDYmaQRnPV+s3VtoJwAvVzzjoDwwb0BZNwbjcQ93m24uQXFODJ/3sbu/enBuScNcFcjq05AkIw''@;'; put 'put ''a46hci3w2+wIKpF21UVDtchKo9+c9Sgg1kywRrOw0IF1m7dppvO1G7cJ0dSjsKRPhkCAfckHEakcROSSiSXftwKhlQsUOHzP8BLNfamHsHzNRo1o7j1wENkncivsRgxZp5pRZPgZXdqhV7dOSKZqbkwqA+kDydrLKTNYezlF7nMVSkudH4VgqiNLn46EfWXOH9QPI0dcojnEB/JG5NOB6LyxkkRz''@;'; put 'put ''/Zbt+HXeH1R6cquYznUuN+mefhDg0o79e3fXtHKskeNF9fsVW0H4Hl1YWIj0zGOaP+Pho+nIPJ5N7k2FGgZ2qkwUHxuDFMoUUp8wYj97NrczNoHGh/vKWTWefPltMDmWJTQQEIIZGnKu1igtZNLoRzfuO6lkWHRUpN8dwKvVSUUOYqJZbDp3YPO2XZj5+59YSWYwvZSNUwRmGYZCCDCZPOesHhqx''@;'; put 'put ''DIZGTg9Q8n3Dm63C+9lr7ubv/Jk1uUwog6nN5cjxT7+dim+mzaS+SN1xPcydQPRBCGYgUDbwOfjm1ZHSejww6gbUrZ1oSEd5I8HPDwU2nbtcbkq0vAe/LVyCxZS0nSt8yCIICAJAEyp1O6hvL3A5Q458DrSpV2RQNQTYrM9BSs/+bzyOUeolWUIHASGYoSPrao+USQ+XD7v/tuvRslljyZVZbST/''@;'; put 'put ''v73zfI7qStP4u2NQzhEhDBJCEogcTDAGG9tg43EoxxnP7Hpqy7sftnb/jN2q/bjhw1ZN7Uxt7YTd8YzHM2MccMAYE2whkEgiCOWcc8Sw+z6HObjBwghJ3X3vPc+tajrQ995zfu9t9dPvecPMd7RC84Z6IBqaWgW18L746pR0dPfO/CB8JwkEhABWU0qKlpnkna0b1kqGZkDDIxdNr1xA0IZ1GsaL''@;'; put 'put ''qmf453//mcaMnhf8PePmDgEKTHdsPeeZ5moQ/d//9eumntyEZgPapZg5H5gH+E4CWDrHhoLtKFNy+ESFegRaPNHa7jsHzv8kgTkSQFWLdatKNHFnm7lHi0fUamTi4RzBRmh3LI2jLNHP//cPLEsUIeZeOg0Fppes4YOxJCclyJs/fFH2PbaTf+gjbC8EyuM2qIWKkXn+2bGT2kquZtblSiI8fJ6O''@;'; put 'put ''BGZMICMtVbZvXmeSd0qKCiRGf2RBWPJH7YwRRv2NSCiq1rJK//Rv/8ml8ahbIzoDoMCMDndfn3WBipwfaAmjV5/bxwzzKFgScbEmIUhLHNVqbBOWz788fVY6uXweBWvwlPNFANf1siV5snvbJtNRDJnPWGJFggqF5XxRjsxxEEeOH8L/+K8/lcu1jbRfZLB77iwUmJ4ziT8GhJioPTsf0hZjL2uX''@;'; put 'put ''jETftF/zB92ZjzJ0+RzFl7/4qlIuXq1Te1yb+UH4ThKIIoHEhHiz/L17+yZzn67eS8RWRrqUThQRBOrU+KGASMt/+ekvzI/f65rFzs1NAhSYbtp9XmaNPyRlxcvlH7SH+bIli017yXk5MA9y3wSsVxOdMmrqGk2sZnnlOSYF3TdJ7hAJArhel2h9xh2b18vDWzYYzyWyjRlfGQn64TsHPM740ftf''@;'; put 'put ''v/mDvPPhIZYkCh9qXxyZAtMXZvL2IFGP7u/eeE22bFjDHuZRNpXNPscwenr75Iz2PT92ssp4NYdHxqI8Op7edQKpmqSzrqxEdm3dJKtLiwTeSiTsQFhy8zcB/O3Bj4Tfaq3LX779HpN6/G3OeRk9Bea8YORBUIj9J68+L89o9x+WD/HG9QAvEf7gT2pP+aaWdm0rV21iNeubWk0vdG+MkqMIOoFY''@;'; put 'put ''vQaLly+V7dqicMv61bJYf5AijpveyuBYHuISST1/PHhIfs5WkMEx7BxnQoE5R4Dc/RsCyHB+af/j2sP8aUF5EXolvmET7UdYtoJ9RkZHTYmjijMXpOJstbZt62AtwWgbJ4Dnx7W2dPEi7X29Wm9rTB3d+Lg4xlYG0NY2POft9z5Wz+UB/ngNoI1nOyUKzNmS437TElio2YPwUrz5oxclf1Eu4zKn''@;'; put 'put ''pRS9F+0SOr4UhjTLs1braZZrAeTK85ektaOLYjN6pvH9mSEqES6zcc1K2bZxrRRpc4ZkXRK3rQqZCe57E39rAsgWh31//c778rbWu2QbyG8hcvoFCkynzR+eyUO8oNzI32qG+ca1q0x7SX65hIf1XI4KO+ELAqJzcGhI6nTpHJnolXprae+SKcbFzQWvE/suWABRmWtE5ZZ1ZVJUsERSU1JMWRpk''@;'; put 'put ''gbMgenAvAyyJoxTRz/7nHa3JWy7MFg+urWc7MwrM2ZLjfvckkJaSLD984WnZ//gjAjHDsiP3RBa1N4SKTSyjN2rM5pnqy3K2ukaFZ4surTNBKGrG8diJEf6CqhEbVpeaskLLl+ZLin7W8SOSotJjxgrDcPCDFB16rtQ2yH/892/kYk0961yGgXMQDkmBGQQrengOsTELtV7mVvmrV56T9NQU4830''@;'; put 'put ''8HA5NCVgl9Gx5DkxOSntunR+8Wq9VOkyek19k3T39tNb4diVgs46JZqos76s1GR/L87NkURN7LMJffRUunFBIJYbtv74yAn51e/fk76BITcmzlnOigAF5qywcaf7IYCi7KXa7u1vfvyyrNK6mZMqWrhkfj8Eo/temyAEMdE/MGgSg85pq8pqFZ0NzW0yNDwS3QHy7PNOICE+TutU5srKFYXqpSw2''@;'; put 'put ''STpZGemmxiGuAybwzTtyTx8QPzZRkaJOO4f9SksQoXMYl8Q9bTJPDI4C0xNmcGMQGWkp8uOXvi97d++41QLOjZkHZ5Z2KR33KH/Uo97MOk0UunClVi6p4Gxp75TRsfHgTNiRmcTGxkhuVoZ6KZfJ6pIiLSu0TPJyssxSKBBg6RvCkptbBPA5R6xlX/+AfHj4mLz70efqtRw0f7/dIsHZzoYABeZs''@;'; put 'put ''qHGfWROI0SXzx3XJ/A1dMk/jkvmsOXplR3g2kCiEDV2E+voHpb65VfsPN5iOQk2t7TI4PEqPtVcM9udxwEOZl5NtknJWFhWqhzJf8rT3d3JSkhEP9FJ6zGARHo71WGLF4mj5aTnw8RFpauvg5zjCdvD76Sgw/W5BH44fS+YrCpfKm6+/KGtXlZg+5ozh8qEhpxmyFZyI40QoBL6g2rp65KrGbiJL''@;'; put 'put ''vUFv3X39MjY+Mc3efCkcBFA6LC012Sx5o3QQPntL8/MkOyNN4ygTbwlKeCkZuhIOC/jjmPBWIhwGn93O7h45Vl6psZZfSqP+SOR14Q8bem2UFJhes4hD40HbuFef2yfPPrnb/GGb0iVXbsEiAMFpb/CKjY6NSa96OVvUG4JMdXg72zp7pKun14hOfpHNzf5IqkvRz9Vi9UYi03u5CkoUPM9SMYkV''@;'; put 'put ''AwgIbHbJm7znxtvPe0NIhopK1MW9VFsvxyvOyFenz0n/IBN4/GxfL4ydAtMLVnB4DPCubN+8Tt7QNpMP6hfhhC6z8ksvuBcEvtSs4MSXG0TnmIrOAf1y69J4zpa2TmlW8Qnh2dM3IAODwybWM7hEZjczMExNTpTM9DRT3BwFzvH5yc/LEZQHS9UbkjLwWQJj3LhKMDvWft4LnzdsVkziusFj3PC3''@;'; put 'put ''Fj/2EENddeGS3i7rj71u/v31s8E9NnYKTI8ZxMXh4I/d4twsLWX0vDyydaP5AwcPCzc3CIR++UF0YsPyOmpvDmqGeo8uqXd290q7LrV39fSZ5/0qPPH/ExOTckNFVBA3FDFP0HqDKUk3hWROVros0sSb3KxMyc3OlJzMdI2ZTDRJGBAOEJP43EBIUkwG8YqYfk74/MAzjR8ReGw3++Niauqaad84''@;'; put 'put ''rPVtkaCDzxKqP9Q2NEurCkoUSw/dz+7PexKYKwEKzLkS5P7zRgCZrHt3bTfF2TPUMwORwc1dAhCbuEE8WeGJL1FcF4jhHFHP59DQiC7lDZsvzl7NdMVjLO2hdBIE6PjklHk/vmS9IkQhHGNUEMSqhzEx4aaATE1JUs9jinokU029WNwjbhLL3YkqMuM1KcfGx1nhYIUknnNzkwCuCfyo+Ojz43Li''@;'; put 'put ''lJYOun7jz2IRnusbxvs/rj/CEJoyqp8ZfA64kUCkCFBgRoo0zzMjAkgAQtzYT157QTZpm0kbKzajnfkmZwhAcMLrYsUnnkNoWfEFETqpX6ao14iySRMqNEfHx81jPMeXLrLecQ8vKEouTU5eM+0xv1YRaz2B+JK+doc3HefAeRcuXCDf+4ub48DjGL3hCx/38XFxEqcdb+JURCYkxBmRiMxteCQT''@;'; put 'put ''9Tn+Hx1xIDLNvnqPY2Kz8wgVkPRIOnNpz2iiuPZRPqi1o9MUPD9WXsXWrjMixzdFkgAFZiRp81wzJgDPzvef2CUv7n/CxJPRmzljdHyjEsAXsF32s2IUz60n1ApSC8uKOjy3wi70Mf4/dMOxIAjtOUIf4zX7OvbBYysQ7zx26HlDj8/HJHA3AigLhmvq2MlKFZfvm5jlO6/Pu+3L10kgkgQoMCNJ''@;'; put 'put ''m+e6LwK2A9BfvvKs9j1eSW/mfdHjm+eLQKhYDD0mv9RDafBxJAjEqee7V2OS33r3Izl4+LjxvEfivDwHCcyGAAXmbKhxn4gSSNKex888/oi89MyTJiaN3syI4ufJSIAEokwAHnJ4Lk9WnZNf/O6A1De1slVjlG3C09+bAAXmvRnxHR4gcMub+bJ6M9esNBmTiJPjRgIkQAJBJoBYSzQseOeDQ/Le''@;'; put 'put ''p0dM3HCQ58u5BYcABWZwbOnETJAosV+9mS+rNzM9LdVkCHOp0gnTc5Ik4BQBeCzhuTx19oL88u0D2g2rmV5Lp64A/0+WAtP/NnRuBt/TAPdCzTR//YX9pkg7ACBbmBsJkAAJ+J0AYn7htUSs5e8/+FQ+OHSUXku/G9XR8VNgOmr4IEwbbfEe2/GQaTe5RLuYIDbTZusGYX6cAwmQgFsEUOYKW3nl''@;'; put 'put ''OVN+CAXRr2vhfG4k4EcCFJh+tBrHfIsAfu0v0q4mLz3zhOx5eKvWHIw3QvPWG/iABEiABDxOwHotO7Rb1VvvHpRPj37FougetxmHd28CFJj3ZsR3+IAAuqOsLyuRHzz/tKxZWcwkIB/YjEMkARIQ0zN+SkN8Dh8/KW+/94kWT+8yxfbJhgT8ToAC0+8W5PhvI4CSRvse3SEvPLVHcrRnM5bNmQR0''@;'; put 'put ''GyI+IQES8AABJPBgSbymrkF+/c4HmsxT/a2uUR4YJodAArMmQIE5a3Tc0asE0KUlf1GOvPLsXtm1daO27IvjsrlXjcVxkYBjBOxy+ODQsBz4+HN5V2+DwyOOUeB0XSBAgemClR2d481l81J57bl9Ztkcnkxmmzt6MXDaJOABAjHacx71e8urzstbfzoodY0tTOLxgF04hPAQoMAMD1ce1UME4uNi''@;'; put 'put ''Zc/OrfLi048Lss0hMq9fv+6hEXIoJEACQSZgl8PrGpvlt9rm8XjFGUHcJTcSCDIBCswgW5dzu0UAy1JZGWny3N5HNUbzYUlNSWZ85i06fEACJBAOAnY5HJ14Dnzyuda0PCb9g0PhOBWPSQKeI0CB6TmTcEDhJICWkwVL8403c+dDG0xB46mpKSYChRM6j00CDhJAsXQkGR4trzQF0xu1puUNDdPh''@;'; put 'put ''RgKuEKDAdMXSnOdtBBCfuVbLGaF+5vqyUtOSDUKTGwmQAAnMhYAtln7uUo387sBHcqb6isZdMiRnLky5rz8JUGD6024c9TwRiNEyIfBkPv/UY1JaVGg6ATERaJ7g8jAk4BAB2zsc3Xf++OEh+fzLCpmY5I9Why4BTvUOAhSYdwDhUzcJoH7mozu2yLNP7pZlSxazULublwFnTQL3TcAm8KALz4ef''@;'; put 'put ''HZWDh4/LgJYg4kYCrhOgwHT9CuD8byOQnpoiTzyyTZ7es1Py83JNSRGUFeFGAiRAAqEEUG8XZYcGNGnnM+3CgySe9s4exnOHQuJjpwlQYDptfk5+OgI243yfdgTau3uH5GZnUWhOB4qvkYCDBGxm+MjomCbwnJZ3PzosjS3trGfp4LXAKX83AQrM7+bD/3WYAL5IcjLTZa8KTXg1F+VkU2g6fD1w''@;'; put 'put ''6m4TwN8DeCzHxyfkq8pzRljW1DfJ16yp6/aFwdnflQAF5l3R8D9I4CYBKzSf3L1dnty1nUKTFwYJOETACstJrTJx6swF+ZN6LC9cqWOzBoeuAU51dgQoMGfHjXs5SOAboQmP5lYjNNERiDGaDl4MnHLgCYQKy9NnqzXG8oig9BBLDgXe9JzgPBGgwJwnkDyMOwTwxZOVniZ7VGTCo7lEk4HQ55x1''@;'; put 'put ''NN25BjjT4BLA5xtF0ie0SDo8lhCW5y9fpbAMrsk5szARoMAME1ge1g0CyDrftW2jaT9Z8GC+ILOUnYHcsD1nGSwCNit8VJN3KtRj+f6nX0h1TS2FZbDMzNlEkAAFZgRh81TBJADvJepoPrxlvXo0d8jKFQWCbh4o2H7jxo1gTpqzIoGAELB1LIeGRzR556wc/Oy4XKptYIxlQOzLaUSPAAVm9Njz''@;'; put 'put ''zAEkgM5A68qKZf+eXeY+KTHRCE3EanIjARLwDgF03sGtp7dPjlWckU+OnJD6plaWG/KOiTgSnxOgwPS5ATl8bxJY8MADUlTwoInR3L5prWRlZhiPCNtQetNeHJUbBBBfidUF3Le0dcjhExV6OykdXb1cbXDjEuAsI0iAAjOCsHkq9wjgiyw3O1N2b98sj27fIgUPLjYQIDSxtM6NBEgg/AQQXwlh''@;'; put 'put ''iZWEK3UNcuhouRyvqJL+QbZ0DD99nsFVAhSYrlqe8444gcSEeNm8dpU8pW0oVxYVSEJCApfPI24FntAlAnYZfHhkVM5drJFPvvhSKs9fMhniLnHgXEkgGgQoMKNBned0mkBsbIwKzEL1am6SzevKJCcr03gz6dV0+rLg5OeJAFYNICzhtezo6jaeyiNfnpbahmbGV84TYx6GBGZCgAJzJpT4HhII''@;'; put 'put ''A4Hv6Rdhji6fb9u4VnY+tEGKC5dKXFwcvZphYM1DBp8AssEhLPFDrb6pRfuEV8mhY+W6DD7EcJTgm58z9CABCkwPGoVDco9AnBZ2XlVcaEodbVm/2ng1QQFdgljqyL3rgTOeGYHQpJ3+gSE5e/GyHD5+UjvuXJUx7RnOjQRIIHoEKDCjx55nJoFvEcCyXmZ6qmzSWM1Htm6UUo3VTE5KMskJEJtM''@;'; put 'put ''DPoWMr7gIAFbuxL9wesbW8wy+IlTZ6W9q4f1Kx28HjhlbxKgwPSmXTgqEpCFutyHrHMsoW9ZXybLtFMQPJ0QmsiGpdjkReISAfz4whI4tq6eXjl97qIcO1kl1VdqNWlnyiUUnCsJ+IIABaYvzMRBuk4gThODykqKZOvGNbJpzSrJy82+FW/GIu6uXx3Bnb8VlVgKHxwalktX61VUVkrV+cvSp7GV''@;'; put 'put ''DB8Jru05M/8ToMD0vw05A4cI4Is2JSnRiE0UcF+7qtjEa2LJEMkNFJsOXQwBnarNAsc1PTI6KnWNrVJedU4qqi5Ia2cXe4MH1O6cVvAIUGAGz6ackSME4N1JS0mSNSuLZeuGNbK6dIVkZ6aLFZvw7nAZ3ZGLwefTDBWV45qc09jSJhVnL0jFmQuaEd4mU/rjiRsJkIC/CFBg+steHC0JTEsAYjM9''@;'; put 'put ''NUU9m8tNbc3VupyODkIxMTEmZpMJQtNi44tRJGCXv3E/Nj4uTS3tJq7y1NlqqW1slskpisoomoenJoE5E6DAnDNCHoAEvEXALqOXriiQDWWluoxeIvmLsiU+Pt7ErLH0kbfs5dJo4F3HDaJyeGREvZOtGk95SSovXDa1KykqXboaONegE6DADLqFOT/nCSTEx0nh0nxZp0JzfVmJLM3PkzT1dkKI''@;'; put 'put ''MiPd+csjrABwjUFQIvsb8cEoen61vkmqLlySM9VXpLW9S65pVQRuJEACwSNAgRk8m3JGJHBXAviyz8vJMvU1N6wplZLCZZoklGG8mxAAuDF28674+B8zIGC9lLjH0nen1qa8VNtglr+v1DVKT28/WzbOgCPfQgJ+J0CB6XcLcvwkMAcCSYkJUrBksSYIFZlbgdbaRCwnPE4QmlZ0zuEU3DXgBEJj''@;'; put 'put ''KXG99PYPmCSdcxdrtEZlndQ3t7KrTsCvAU6PBKYjQIE5HRW+RgIOEnhA4+Iy0lJl+bIlJlmoWL2bDy7OlXR9Dd4oKzjp4XTw4giZMq4FKyohKFGfsqW9Uy6rlxJFz6/WN0vfwCC9lCHM+JAEXCRAgemi1TlnEpgBAQjOLC17VKjdhFYVL5cVBUuN4ExNSZZY7SgUKjjxmFvwCCCG0opJ3CNmF4Ky''@;'; put 'put ''raNLrmgsJQqfI+O7s7uPNViDZ37OiATmRIACc074uDMJuEMAghPicmn+IikuXGo8nVhSz8pIk8SEBJM0hLqbNkudNTj9dW1YMQkhCS8ltomJCeONhIfyakOz1NQ1mWzvnn71UKr3khsJkAAJ3I0ABebdyPB1EiCBexJAhnp2ZoYs1yx1LK0jnjMvN0sLwCdLgopOiBV4NyE6ITjp6bwn0oi84U4x''@;'; put 'put ''ieeTk5MyNDyifb77pKm1QwVlk/FOtnV0y8jYOG0XEcvwJCQQHAIUmMGxJWdCAlEnAKGSlBhv2lcuW5JnBCc8nrlZmaY0UrK2uUQCEcSm9XZSeIbPbLCHFZM2dhK8xzW7e3h0zIjJ5rYOaWhuM4k5EJMoJfQ1vZPhMwqPTAKOEKDAdMTQnCYJRJNAfFysZKanaomkbI3jXCRL8nLU05ltWlumJCdJ''@;'; put 'put ''ghaBh/DEFhrbCTGEzd6bJ/znNgJWROLeikg8BjN4JYdHRmVA4yY7u3tNMg4EZasKSTyHx/I642dv48knJEAC80OAAnN+OPIoJEAC90kAIigxId6URUJbS9wW6/I6vJ2LsrM03jNJ63PGSZwmFEE4WdEEAYobBJRdcg+qAMWc7YZwg9AbXrcicnxiUkbHxjRecsh4Jds6u6S9s0c6e3qlW+tODg6N''@;'; put 'put ''sJ+3Bcl7EiCBiBCgwIwIZp6EBEjgfgjEag/1m+IzWT2faZKtxeCzNZkIZZTS01KMKE1U8QkBivei5zrEV6ggs0IU57VC1N7bsURSmIaODefHeO09/g83+xpex9gQu3rt2jX1RE7JmIpItFccGBzWWpOD0t7VLT19A0ZEwkMJEQmhGck5mQnwHxIgARKYhgAF5jRQ+BIJkIC3CSzU5XQkGOGGzPZU''@;'; put 'put ''XWZPSU785rHGeiLeEyIV74EXFPvExcbIAwu0daF6RO1ysvUKWvEZej+dWMP/W0FoKVnxaAUi7u178H57g2DEkvS1qWvGo4je2xMqHkc1iQZdbxAXiWVrCEbcQzTi8Yi+Pqr/Pz4xZUSnPS/vSYAESMCrBCgwvWoZjosESGBeCCxcuMCIy9iYhcbTiXsIzjiNC41diNcW3hSqRqQmmQx4/D/EaXJS''@;'; put 'put ''wm1jwGspKlzhKYQAvKFeRgjJGzf+T8Xh6E2hqGJxSOMecYNAnND3jmu5nyn1REJM4jY5NSVTt0TmlJb8YR3R20DzCQmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQ''@;'; put 'put ''AAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfs''@;'; put 'put ''wdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4i+ZHtw4AAADdSURBVAAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAF''@;'; put 'put ''prfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8J/D97oVzdCcK8fgAAAABJRU5ErkJggg=='';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=select-library-png; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''iVBORw0KGgoAAAANSUhEUgAAAdsAAAG7CAYAAACLjj9uAAAAAXNSR0IArs4c6QAAIABJREFUeF7snQecVNW9x0+7907dQhNLYmLLS4wmStmOYIslGk0sicanRo0JILALqIltLXRYECtJjGkmKinGhiCwC1soorFEk5iosWEBtszutFvOee8uDM7OzrLT596Z/37ey8rOOf/y/Z+Z39x7T8EIfoAA''@;'; put 'put ''EAACQAAIAIGsEsBZtQ7GgQAQAAJAAAgAAQRiC4MACAABIAAEgECWCYDYZhkwmAcCQAAIAAEgAGILYwAIAAEgAASAQJYJpC229zVP9Zgxjo4JtMur82vH/yyQ5fjBfJ4IPL6v7rHuL5pyf1+eQgK3RUYg8tkzdfL9foyReKjtB96ran/ZW2QYIF2bEBggtg83X+EIGOIPCvZ8HSOKMSYYIRxp0/8b''@;'; put 'put ''7/u3+aL5GkYYMSq7zVf6Xx7+R+xtsu/X8O2HaiESNmEGmfbPABOp2MtU3ilkknBtIoUxO8QWyGY5p4CpoLqkPV5j3qRpv18Tpqsbql8gMcChEJF/7/2973XzlxBYGOb/EkxoiPted1J+/pVTfhVK2CE0BAI5IDDgHXl/6yXlSO79d8jwjcyBb3ABBIAAEMgoAZm4exzcfcTV1as7M2oYjAGBNAkM''@;'; put 'put ''ENtVO84ZJTj+d0DvKUvTLnQHAkAACOScgEScPRhrR06v2LAn587BIRA4AIEBYvtA+/ljkMTfDOrdpUANCAABIGA3AhJxdGscHdlQvRaubO1WvAKPd5DYYln8O6B1lRR43pAeEAACBUgAxLYAi1ogKQ0SWyKjt/xaZ/8MY/gBAkAACNiJAIitnapVXLHGEVv8tl/b4y4uDHuz5ULXCGZSsrmbEyIN''@;'; put 'put ''oYXMmdoCcZ5sf2h/YAKMKC6zhcG1MCWSMhyvvfVQg8O1K4bXI+ySyVXn4f4le2bfyH8n2v+zWcOJ9tjfLt505/2fT+bqB0YU53BWTbGlGjtiat0zXcO1hdeBQC4JDBTbV84fI+nSB77wJ3EFRwjBBSIXC52/SBDSdSUsJE6Exknu1gXE0JGT8K0ZoQPGqTn35pHsNw1/dEw2WWUqO4M5rZkadKay''@;'; put 'put ''dAihIe6xDFWjRGqR69zTeUOnzM10uo+dFOSpsU8n8H19NWPoz4Z4ddAMOuS4FIgwGUvHIkyfoYTJ8cIDsc1A0cBEVggMElvFcH7SHfowrjMhOHeotHTalBabSEpWmIFRIAAE8kRgUVuNVwj1A5m64s4rAbHNU2HA7bAEkhZb3ucsmfuNdQMuIIb1Ag2AABAAAhkgsHJrRYlfNd5TmDvuigkQ2wxA''@;'; put 'put ''BhNZIQBimxWsYBQIAIFsENh7ZRv+QKbuoa5se6jGvgjPbLNBH2ymQwDENh160BcIAIGcEth3G/lDmbq88RxLxNGjK+Ev1J/Q0p3TwMAZEBiGAIgtDBEgAARsQwDE1jalgkBjCIDYwpAAAkDANgRAbG1TKggUxBbGABAAAnYlcF/zZE8v8++E28h2rWDxxp3sla3B+5ylMBu5eAcMZA4E8kkgEbGV''@;'; put 'put ''mXH4tePX9+QzTvANBGIJgNjCmAACQMA2BPaKbWCnTJ1DTpACsbVNOYsqUBDboio3JAsE7E1g7zNbzRTbuHuLmbORQWztXeNCjR7EtlArC3kBgQIkAGJbgEUtkpRAbIuk0JAmECgEAuYOUgFNfHiAK9tumRlfgGe2hVDtwsoBxLaw6gnZAIGCJrBwx7hSFKQfgNgWdJkLMjkQ24IsKyQFBAqTwMId''@;'; put 'put ''p5aioO+AYqsr4S/CDlKFWX87ZzVIbIk69Hm2QnBY+mPnakPsQMDmBEyxxUHfB9LQE6S6QWxtXuQCDT+pw+NBbAt0FEBaQMAmBEBsbVIoCHMQgQFiu/KlM0crhvMdv7Yn7tncILYwgoAAEMgngeXNk8tUFngfrmzzWQXwnQoBENtUqEEfIAAE8kIAxDYv2MFpBgiA2GYAIpgAAkAgNwQWtNaWE6S+''@;'; put 'put ''B1e2ueENXjJHII7YOt72a51xd2eB28iZAw+WgAAQSJ4AiG3yzKCHNQiA2FqjDhAFEAACCRBIRGypxo6YWvdMVwLmoAkQyBkBENucoQZHQAAIpEugqaNqhGYY7x7oNjKIbbqUoX82CIDYZoMq2AQCQCArBEBss4IVjOaAAIhtDiCDCyAABDJDAMQ2MxzBSu4JgNjmnjl4BAJAIEUCw4ktI0o30yR4''@;'; put 'put ''ZpsiX+iWPQKw9Cd7bMEyEAACGSYAYpthoGAuZwRAbHOGGhwBASCQLgEQ23QJQv98EQCxzRd58AsEgEDSBIZb+gO3kZNGCh1yRADENkegwQ0QAALpEwCxTZ8hWMgPARDb/HAHr0AACKRAYLi9keHKNgWo0CUnBEBsc4IZnAABIJAJAiC2maAINvJBAMQ2H9TBJxAAAikRGO48W7iyTQkrdMoBARDb''@;'; put 'put ''HEAGF0AACGSGAIhtZjiCldwTALHNPXPwCASAQIoE4DZyiuCgW94JgNjmvQQQABAAAokSALFNlBS0sxqBeGL7X7+2xxUvUCE4533OkrnfWOe3WiIQDxAAAoVPAJb+FH6NCzVDENtCrSzkBQQKkEACO0h1MU06Es6zLcDi2zwlEFubFxDCBwLFRMAUW9Uw3pWp0xMvb0YUENtiGhA2yhWe2dqoWBAq''@;'; put 'put ''ECh2AkubJ4/SWeCdA4mtoahH1J/Q0l3srCB/axEYILardpwzCgnJfGbrhme21ioURAMEgABCKzfXjQ7g8NsgtjAa7EYgabE1JHro9RNbPrZbohAvEAAC9iewYuspB4W13v9IQ95GljsNRTsSrmztX+tCyyCO2LJ3/Fpn3OchQgguU8/Vugg0myCECDPzt65JmBKOdSwG2IuGZb4eD57BiYj+OxN4''@;'; put 'put ''wL8TAR7tdyg/FEv9/g3tsxjJUDHta3sg3xRzbIi9sUf/94Cchdb/Oo/JMZGcYttEx2ocIL5ILNG/k/UXySvSj+7LI9pOdE5UGrpmRpy+w8UTqVVsvcx/J8phf+w4/rgbLoZEXo/lFMsr0bpH84sen0ONgdj6m7WObWvoQ78XE8ktmTaUDa7//vdGVP0jPA40Xky/aoxzrCKdMF01BNYkIh2v8/Bf''@;'; put 'put ''GJEd8WJkRO5UmDji2vHre5LJAdoCgWwTGPAmvXfb+SMZQe8EtE7vUI650DUuuGG+jhGO9B9SZLOdQPbs788twy5E1JeJaGzmn9PwaZqK/poSMR35W/Trsa+llWF0PmkZSrGzFYde0t8XU8g9l3mnnE9KHcWAgRz5h+j/MUFJ1BF3aaL5mim2cGWbwnCCLlknEEdsxdsBrask657BARAAAkAgwwRA''@;'; put 'put ''bDMMFMxljACIbcZQgiEgAATyTcAUW6bJR8E623xXAvzHEhi09Ec2lLcCWteQt5EBIRAAAkDAqgQYUToJNo6ZXrFhj1VjhLiKk8AAsb1v+1ljKVbePNAz2+LEBFkDASBgBwLmphYKU465dvxTu+0QL8RYPAQGiO09L517iFO43vOFP6LFgwAyBQJAoFAImGJLsHE0XNkWSkULJ48BYnt/6yXlsuTa''@;'; put 'put ''iAzjYC6M/hnH5gxZbE483v8TmdaKzcnIOMw+HqMagSGJOIwxHxGkGHivmajpttF2Y2dWpjSJMeWqiIHzeFO2k0zHgUyH7jl8bEPPBk6UYprzWhNNJRk8SbYdyCCBvIfHmmQEiTVPY7Z5lIPk6pW6z/iFHfq9OhDqvqnD/XHvrc/e2cTmMiHe/2+MCRVIZwGy86Ch+DHiQJI28j2EEUci+nNoYI/I''@;'; put 'put ''yoiA3vOqgpzfmzZldV9iNYFWQCA3BAa9b3/zymXu3s4Q9o5wCPO3GYZXdfS/OYIjnf2//WqXKA+7he4Mlwpm/KtP/aR0qHCduPyLP6564r+ZTEcIhO9Zc6Y8lM2xh3vEx+/27c9txllrwpn0D7aAQKERWPnsmUpiOR0V0+w//f8233MXHbs6donssCZXbf72wV34g3/J1Bl3nohC3bsJL5kQFMYn''@;'; put 'put ''pjHzc8e9y69ddNFqI/I54HUehLsUf//73RfepTVOadGHdQwNgECOCST3JTkmOFOYQ1r4gz71k7Kh4lZlqexGWGCe47KCOyBgDwKL2mq8nIffV5g77hd2B/N2hiV2ZP0JT8Bex/YoKUQ5BIE0xfZ0d0grfb9P/bR8KMI4jMvrp8Cm4DACgQAQGExg4fPjSoWC31OYO+7afhcr6eZhfgQs5YHRY3cC''@;'; put 'put ''aYntkldOd5fqZR/2hYe+jQxia/chAvEDgewRMMUWOfB7Mo0vtk5W2mMIeuT0ir/AUp7slQEs54BAWmL7m1dOd4dAbHNQJnABBAqTwHBXtk5W6jMEPQLEtjDrX0xZZUBsy3f2hT8ecntHuLItpuEEuQKB5AgkILY9hIijYN1sclyhtfUIgNharyYQERAoGgIgtkVT6qJPFMS26IcAAAAC+SOwvHly''@;'; put 'put ''WZj1vXugZ7ZwZZu/+oDnzBEAsc0cS7AEBIBAkgRAbJMEBs1tSwDE1ralg8CBgP0J7BVb/3sydcXd1MKcjQxXtvavM2QwYBvG5HGYs5HD+siPesM7hzwlCCZIJc8VegCBYiEAYlsslYY8076yBbGFQQQEgECqBBa01pZjFH4XrmxTJQj97EIAxNYulYI4gUABEgCxLcCiQkpxCYDYwsAAAkAgbwSa''@;'; put 'put ''OqpGqIb+X7iyzVsJwHGOCIDY5gg0uAECQGAwARBbGBXFQgDEtlgqDXkCAQsSGF5svT2EYNhByoK1g5CSIwBimxwvaA0EgEAGCczfNnEkUcU7Q99GBrHNIG4wlUcCaYntfa9f6JFDbCcs/cljBcE1ELAxgUTE1hASnPpj4xpD6HsJpC22Uoh8CAcRwHACAkAgFQKJiC3cRk6FLPSxGgEQW6tVBOIB''@;'; put 'put ''AkVEYGnzuFE6I2/DbeQiKnqRpgpiW6SFh7SBgBUIJHJlC7eRrVApiCFdAiC26RKE/kAACKRMIJErWxDblPFCRwsRALG1UDEgFCBQbARAbIut4sWbL4ht8dYeMgcCeSewT2zfkqmrJF4wLlbSrQt21PSKv+zJe7AQABBIg0BaYmue+hPSy3fCbOQ0KgBdgUARE9j7zJa/PdTh8SC2RTw4Cix1ENsC''@;'; put 'put ''KyikAwTsRADE1k7VgljTIQBimw496AsEgEBaBEBs08IHnW1EAMTWRsWKF2pTR5VT455yig2JEnlQPSWuCm3f3xnhg17XVSOtMRAbU7wYBrXBg+PIVBkMQUSsLYOr/X9jMu3/rfO9bUw2kbaRv/W3IxwLxgjWGcdqYM+0KS19mYoP7AwkAGILI6JYCKT1QQvPbPM/TJZvOfm2oNYz08E85fmPprAi''@;'; put 'put ''0IyQ3+s4+JefuqQ5jceuVgsrO2tkA2JrjTpAFNknAGKbfcZZ9XDvtnNWqobvuqw6KWLjpY7DfutV1KsvArHNyigwxRaH+dsKc8Ns5KwQBqNWIQBia5VKpBjHA9u/dXdQ756RYnfoNgyBcvlzD6nI9eNrx/9MA1iZJwBim3mmYNGaBEBsrVmXhKMCsU0YVUoNS5SDf26IkmkgtinhG7YTiO2wiKBB''@;'; put 'put ''gRAAsbV5Ie9/4byVIa0LbiNnqY5eeewD14x/bGqWzBe9WRDboh8CRQMAxNbmpQaxzW4BPdLoe3444Y9wmz5LmEFsswQWzFqOAIit5UqSXEDDiS1BLIQx1QXi+5a5YGH+RHmJHQMxS2f6/zloOU1yUVquNUYIY4wRFoIzgQznUBG62Ii7fzTxL7Msl0GBBARiWyCFhDSGJQBiOywiazc40DNbc+kK''@;'; put 'put ''w55zZtduaLZ2FvmLblnb5EpMxJahxbZ8xY8mPlGfvwgL2zOIbWHXF7L7jACIrc1Hw4HEVgjOdcG/ckNt+79snmbWwl/RVvMlTtg/h3LgpGXLf1zx14asBVDkhhMR24CuHtlQvbazyFFB+jYnAGJr8wI+sP28FUG9a+ZQaXCdHztnUusbNk8za+Eva609BlM65JcRh1TaNHXCk7OzFkCRGx5ObB3M''@;'; put 'put ''2x3SNRDbIh8nhZA+iK3Nqzjc0h8d83HXV7W+ZPM0sxY+iG3W0CZkeFixlbxdIU07Cq5sE8IJjSxMAMTWwsVJJLThJkgZQjtubk3H3xOxVYxtFrXVfEk6wG1khZUumzbxyTnFyCYXOYPY5oIy+LACARBbK1QhjRhAbNOAhxBa2jH5fwgS/xjKCohtenyH6w1iOxwheL1QCIDY2rySILbpFXD5lklf''@;'; put 'put ''FgIP+UwbxDY9vsP1BrEdjhC8XigEQGxtXslV2867x290TR8qDbiNfOACL91c9xXCyOtDXtmS0mXTKuE2crbeJiC22SILdq1GAMTWahVJMp5V2759j9/YM6TYqlz/6o217UOKSZLuCq75kvbJX6VYvAa3kfNTWhDb/HAHr7knAGKbe+YZ9Qhimx7Opo5JxyGEXwWxTY9jqr1BbFMlB/3sRgDE1m4V''@;'; put 'put ''i4kXxDa9Ai7ZWnc85eQVENv0OKbau6mjakRY194Z6jxbByz9SRUt9LMYARBbixUk2XBAbJMlNrD9stbar2FKXx7KCmxqkR7f4XrDle1whOD1QiEAYmvzSoLYplfA4a5sYbvG9PgO1xvEdjhC8HqhEACxtXklQWzTKyCIbXr80u0Nt5HTJQj97UIAxNYulRoizuHW2cJs5AMXeLjZyC4Gp/5k8y0C''@;'; put 'put ''YptNumDbSgRAbK1UjRRiAbFNAVpUl6a2mmMRYUNuZwm3kdPjO1xvENvhCMHrhUIAxNbmlRxObGFTi/SubEFss/sGAbHNLl+wbh0CILbWqUVKkQx36g9C4viG6s1DbtqQktMC6jTcbWQQ2+wWG8Q2u3zBunUIgNhapxYpRXL/9nOXh/SeWUN1hvNsD4x1uO0aHVJ509QJT8B5timNzuE7gdgOzwha''@;'; put 'put ''FAYBEFub1/GBbec0BQ1ffbw0DK5rmJOvw+HxQxd5uCtbOIggu28QENvs8gXr1iEAYmudWqQUyX1bz1ka5r64V14G18Iy9f6vykWLadyzz0OYOuLWXSI61jgT8QKJvGb+jn59qPYpJRPTKdbXgWwyEj+n+H38/X/WeVhwrtRoPPTHoWwr1Lt4WsXTN2QiH7AxmACILYyKYiEAYmvzSt+37axFYcN/''@;'; put 'put ''/VBpECwhgpjNs8xe+BzpiAttSAcycS+YXvnsT7MXQXFb3ie2byvMXRqPBGzXWNzjo5CyB7G1eTVXbjtzoW4E4MorS3WUqGPedRVrb86S+aI3C2Jb9EOgaACA2Nq81CC22S0gJY47Z1auvTW7XorXOoht8da+2DIHsbV5xe/bevbSMO+D2bJZqiPFyu0zq9Y1Zsl80ZsFsS36IVA0AEBsbV7qVdu/''@;'; put 'put ''c79f3/1jm6dh2fAJke+YVfn8bZYN0OaBgdjavIAQfsIEQGwTRmXNhr986bJHukPvXWLN6OwflUy9S6ZXPD3kBDT7Z5jfDEBs88sfvOeOAIht7lhnxdN9289dGtQ6Z2bFeJEb1Yxgr0PyLquvaplX5Ciylj6IbdbQgmGLEQCxtVhBkg3n8ccvpG+M3iWVKOH+WvrCStx1ssnaLfb2Jk/WXcbH9nn0''@;'; put 'put ''iy5abRQ7j2zlD2KbLbJg12oEQGytVhGIBwgUEQEQ2yIqdpGnCmJb5AMA0gcC+SQAYptP+uA7lwRAbHNJG3wBASAwgACILQyIYiEAYlsslYY8gYAFCYDYWrAoEFJWCKQttmF95Ee94Z3eoaLDYVxeP6WlOyvRg1EgAARsTQDE1tblg+CTIABimwQsaAoEgEBmCYDYZpYnWLMuARBb69YGIgMCBU8A''@;'; put 'put ''xLbgSwwJ7iOQdbFVZansxvHre4A4EAACQCCWAIgtjIliIQBiWyyVhjyBgAUJgNhasCgQUlYIgNhmBSsYBQJAIBECILaJUII2hUAAxLYQqgg5AAGbEtgrturbCvOUxkvBIXm7Qpp2VEP12k6bpghhA4F+AiC2MBCAABDIGwEQ27yhB8c5JgBim2Pg4A4IAIHPCIDYwmgoFgIgtsVSacgTCFiQQCJi''@;'; put 'put ''i0LiyKl1z3RZMHwICQgkTADENmFU0BAIAIFMEwCxzTRRsGdVAiC2Vq0MxAUEioAAiG0RFBlS7CcAYgsDAQgAgbwRALHNG3pwnGMCILY5Bg7ugAAQ+IwAiC2MhmIhAGJbLJWGPIGABQmA2FqwKBBSVgiA2GYFKxgFAkAgEQIgtolQgjaFQADEthCqCDkAAZsSWNBaW45E8J0D7SAFS39sWlwIewAB''@;'; put 'put ''EFsYEEAACOSNAIht3tCD4xwTALHNMXBwBwSAwGcEQGxhNBQLARDbYqk05AkELEjAfGar6upbMvOUxQvPPIgAbiNbsHAQUtIEQGyTRgYdgAAQyBSBRMQWTv3JFG2wk08CILb5pA++gUCREwCxLfIBUETpg9gWUbEh1cEEVm49s4RpvZTLClENJhyGX/Riod9Q294LvLJPAMQ2+4zBgzUIgNhaow4Q''@;'; put 'put ''RY4IPNB++hjElK8KjC+gmNb4Qp8ezpHOorYuFQghPsL5hY+ccsm/e4IfvEwRXa0K450ZlWt8OQqzaNyA2BZNqYs+0ayLLQ7j8vopLd1FTxoA5I1AY/NkNkJhxxGqzPaFPj5DorKbEtmRaEA6V4MOWrITY/J7QvD90yY++3GifaHdgQmA2MIIKRYCILbFUukizNMU2TKZnhAwfHdSTGol6nCni0Ei''@;'; put 'put ''zg8RMn6DdHTvdbXP70zXXrH3B7Et9hFQPPmD2BZPrYsq06U7Jo+iKp2ncf9ljCjOeMlzYWgG1zSBuIEQEv3/hzAmmFKCmUwwNW8vx/3Rufa2g7l/rLDO5mvHv6gVFdwMJgtim0GYYMrSBEBsLV0eCC4VAstbTzmCE+0xjPH42P5CCNGn7Xnfzcr+GtT61hHD8cJNp277JLrd0uZxo8JYP06RPZOJ''@;'; put 'put ''YBcLJI7BGMd9r0jE/Qw39Btn1qz7eyqxFnsfENtiHwHFkz+IbfHUuigyXdo6uRYT47cYky9EJ8yFoUvE2RxSux8Mcve6xiktfYkAWbVjnBTQvIeGdf+tAolvK9RdGttPM0J+Fy19REP6HQ3VGz9MxC602UsAxBZGQrEQALEtlkoXQZ53d0w5RQjyMMf656LTDWm+lwlVfurylW+ccdaacKoozK0F''@;'; put 'put ''GeFXqnrgJ06pdFSsHdXw90jY9XNFkhZOr9iwJ1U/xdQPxLaYql3cuYLYFnf9Cyb7pe2TJgW1zt+75ZGHRpIyuKZS6rgHh/hdmZwRv3j75LFM53cZXP8+JZISCzGk9b7mlcfM2FPi7Wg8drVaMJCzkAiIbRaggklLEgCxtWRZIKhkCCzfMvkLYS3wnMycX4r004xwgAvjbnffqNvTuZo9UBxL2iee''@;'; put 'put ''rBt8oUQdJ8ROpjK4FlZoyTpMjDv2BLSXG6e06MnkVCxtQWyLpdKQJ4gtjAFbEzB3gBJC/7Mh1FOirmjDlEjfa6je9JdcJLe4teqbjCrLEeJHmrOZo30KwTlC9A+c8VvmVmx+Jxfx2MkHiK2dqgWxpkMAxDYdetA3rwSEQLipfVITwmhmZLYwF7pGBLmpobZ1SS6DW/nsmYrfs/smgfRpDlYyItY3''@;'; put 'put ''RnQXIWRxSA+ugq0gP6OTiNhyLh09veIv8Aw8lwMafGWcQNpiq+ojPvaFP/IMFRnsIJXxmoHBfQTuaTvtEA1rbyAs9s8QFgI90Vu26+LGY9/Iy7PSxc0TxiJKZguMpkrU4YotFuf6fzGhd3K347G5X1vnL/ZigtgW+wgonvxBbIun1gWX6d1bTr1N5+ptkavakO7rZNR5yvU1HS/nO9llrbXH+I3u''@;'; put 'put ''+zzyyFNjYxGCG4bgWyXsmHvohyO2X3TRanNTjaL8AbEtyrIXZdIgtkVZdvsn3dTxjREyZVtUo++YSDaaoTXdUNcx2yrZPf74hfSdQ94/m2JpMcFk/+StSHw6Dwcl4nqaCH7HzJqWotwUY/62iSNJ2PjPgQ6Ph9vIVhnREEc6BEBs06EHffNGYPmWyVcIIR7+TGjD78tCqqif1PpR3oIawvHy5sll''@;'; put 'put ''OlNvF5hfE2/rSCzIJ5hIi0pD6gNXTmkJWS3+bMZjB7E1vzT5R++SAmNGM9ITLCUyoiaTsC5zt673EM2nvYuQDjPOszlS7G8bxNb+NSy6DMxdnQQ6/OGAuufSSPIC4ftmV7dMtzKMee3jv+okJTcIrl8ab/tHr3zwS0Gts2ns+6WPFsutZSuLbf9Zx5LzK5KQr/Yqoyo6g+8frBp9I7m5lTYWiGIF''@;'; put 'put ''OZjX71XGfCiE+lpfuGsdIupz145/+j0rj0OILT8EQGzzwx28pkHAPGSAhMULCKP+LRnN7RIxIt+9vm7L02mYzUnXRoGIs73mJCx4E6Py12OdmttKKrRkrUaCNzRMbH49J0Hl0YkVxfbe7eccSxGZRbF8mk/debB5KEUiiMx9t7nQwxJ17qBIukUTPdsaqrcEE+kLbQqfAIht4de44DK8u+O0UzQR''@;'; put 'put ''WEMwk8zkJOJ4WSBykp0Od29snuxwSoGLQ1rf7V5l9OGxRVKNgE+h7l/qQl4wt2bdpwVXxH0JWUVsV+04xxXS1QqJOqf7QjtPlamzJB3m5hK0gNbziVcZvVx3Satg5nk6NAujL4htYdSxqLJYseXUei60pqikf3vYB2OutOOtV1NsREi9DmMyw8G85YOudDl/n1HncoLpQ3b6MpHogLSC2C7fcvKJ''@;'; put 'put ''BEkLQ3p39VBnHhtC1wyuBnQeDplHMyKECMVMokR2mM/hhzqO0dzUhGBpi8Ska6dPXFvwdyoSrXsxtgOxLcaq2zzne7Z+49caD/1vJA0h0NTZNZsesHNai9urjwypvgedUukkSgbftlT1wBtO5r3GIfe8UEjn5+ZTbBtfv1Au83WfgYRYypF2dOz4Mbfc1Hn4n5jQjbqubuE88CZj7p2qEQ66VSY0''@;'; put 'put ''6nAgWTvIMPRjFNk7zjDUixiRv0CJNOi2c0jv63TS0lk91ZMeacSN3M5jFWJPjQCIbWrcoFeeCJi3+whyPtGrfnLafrFFxjmzq9ss/7x2OGTm81xl87hTKVWWUcyOjTeJihHpCYTETddVbPgHxv2n3dv6J19ia7L2ttfcbSDjqtgZ4poR6iOYNYeMvntvOemVdYkCNm06Wk88TWalDVyoUyI7m1UV''@;'; put 'put ''AAAgAElEQVSPOaL7O5n3J9zfd++0BI94TNQ3tLM+ARBb69cIIowi8FDbuV5VxpuCevcJ+8WW46rZtS1bCwVUY/NkprDg/wqhLY13a1k1Ar0Sdq5yCj5/al1bl53zzpfY3rP1zDmq0bcIY0Ki+WlG8In//wbTGKrd/lojRildgZqi6+o4+YsOwpbrInxOtP3+OVRIPC8bnstmTFqzy861g9iTIwBi''@;'; put 'put ''mxwvaJ1nAqbY6or0vF/bXREJhRN0+pzKTc/nObSMu5+/uW40Fv6ZCJPpCht8aD0S+CNMyJ0UK4/Y9XluPsR2efvJjboI3Rh9PGJQ9+2WsGNqqVN9IlO36c0vTW7ZuLJEPqjRr+06JHqAOGhpW5j3zayv2vhSxgcOGLQkARBbS5YFghqKgHkbmWL3477wR2dH2hhCmzm3pmNloVJb2l59eEDtfNAt''@;'; put 'put ''jz4NY9K/oUL0T0jzvexio2d2q2qH3TZWyLXYLu845Tydh39DCfVGGPapu9+nhF1z06RX1mZjDK1om/IlHRuPEowHLPXCiP4LCfrd+prn8769aDbyBpsDCYDYwoiwFYGHmyc7VM+In/m1PZdFAidIvm1W9fN32CqRFIJd0Fo5WQh9kUwdJ8bOftWMUEAizieRwHc11NpnfW4uxfbebacc0xvuXacw''@;'; put 'put ''5/6lVn3q7vfccsl5s6u3/C2FkiTcpamj6lCK3Q8aQvtmdCcnK31D4331nRWT1sPEqYRx2rIhiK0ty1bcQd+99bRbDK7uF1cH8z76qdt5eeOxq/Ny0k8uq2Ee5Rf0dl6iGoF5bnnEwbG+da4GJaSswowunFW54ZNcxpaKr1yJrbmu2S1pj1PC9j9DVY1ApyDkez+p2ZbwJKhUcoz0WbL2dLfh7n5E''@;'; put 'put ''Js5vRdtR9cBup1x6dVfF+qdSfU6cTlzQNzcEQGxzwxm8ZJDAPS+cW6NpPW0Rk2Gt70M3HnNCMU04adwxzuX0k1sZc14fb9ayEOJDIUij7HP+dsZZa8IZxJ9RU7kSW3MtbUjzNSvMvX+zCpWH5t5Yu21pRhMaxtjCHeNKcUh+RCLy/scgZhenVN4Z0rtvqK9q+UUu4wFfuSMAYps71uApQwTu237W''@;'; put 'put ''WH+46wVG5cNMk+bGAUiwc2bXNj+bIRe2MbO8tfYIv+h9yMXKJscGbR7lF9b9bzho+bSG2g2tVkwqF2Lb1FHlNDhdTQndL3CcG+sNJL59Q217b665LGqr8eqG/16nVLp/rbgZQ1jv6ypxHHz5tIlPP5XrmMBf9gmA2GafMXjIMAHzVqpWGnwUY3FexDRG9A/11RsvybArW5gzD2boCbHTCGKLCWHH''@;'; put 'put ''xga97yi/ZwzEb5lT3fJPKyWVC7FdufXMSiH0pwyhjjJz14xgH8POc2fXbmrOFwvzJKF3D9l5Bcbogej1uOY+3xJx3H3Yh2NuteOOaPniaQe/ILZ2qBLEOIjA0vbJFxAsVkdecEnl7wlNr/5x9dMfFiuuBa215YgHZgssfuRgJSNjOZhH+SFMFypG6NdWWZ+bbbE1l994JON3hJCLIzy4MDb0qeyb''@;'; put 'put ''jRY4zvCOluOnUkxud0ql/V8EzB/zQAOFuhtxMNgEm18Uzrs5LbG97/ULPUqIfuQLf+QZCgkO4/L6KS3dhYMMMrECAfNWnEyU1wQy9s8slYiy4LrKdT+1Qnz5jGFRW80hEqa3GUK7nBJZiY3F4Oo7FEm3M5/70Xw/z8222N7TdtohksPbElD39G/HaAqZYQR/cP2kF36VzxpF+17WVlMZ0H1/jp3w''@;'; put 'put ''hgV5UmD5yobqtZ1WiRXiSJ1AWmL7m1dOd6v6iI9BbFMvAPRMnUBT++SlCPMGhHD/OCaIfcyRGN9QvbFor26jaZpLhQgSyxmRj4/dKclsJxHns9wI3TCjuuX1fG39mG2xXd5+8skq9/9Voo7+CwLOjY8IMY602tF3d246/mQhxG898ogBm1+4pPLHdN47bXrFhj2pv1OgpxUIgNhaoQoQQ0oEFm+f''@;'; put 'put ''PFaEgy9K1BH1AYU3MeI81647KqUE4gCd+p8NHvrhN83nuRjjY2Kb9i8Vwo4nOSO3zq7Y8Gam/Q9nL+tiu2XyFZzzX0ZmbBPMtjql7kmZ2iVquPySeX3e5nEH6zzY4pVHD6hTWO/7m8JKz4EvkcnQtF5bEFvr1QQiSoLA4s2V1xHKmiKbPJh7zzLCVh38/sjrYILJZyAX7ji1lISC1ziZd7bGg2Nj''@;'; put 'put ''ETPs8AnEHyQGuvu62ud3JlGCtJpmW2zv3XrG3SoPzjCDNGdnU8QWdVefdItVN5CYt7XiIAd3PI4RmjQArMCvCY4vm13X/EpawKFz3giA2OYNPTjOBAFzZnK4xPdnSthZEXvmczmK6Z3dYXGn3bYvzASTA9lYumPyKKLyOw2uXxm9N3Ckj/k8l2B5gUcpeeTa8U8Fsh1PU0fVCFVX35KZpyyeL4fk''@;'; put 'put ''7eJcOnp6xV9Suo26tK1mEyGsX7h0roawoGfOrWtryXZe6dhfubWipC+s/tkhlZwSbSegdX3slkedDfspp0M3f31BbPPHHjxniMDSzRVfMbB4UqLOI6NNKswzhxHyQC5EI0Op5MzMoraKKRJx3s6FVhnvKDgHK2kJ6b2LfKWjN2ZzZ65siq05E3mky7FdM4L9J0RpPBwQyJh4Y+0Llj/E3ZwAKLj2''@;'; put 'put ''S5k5L4geFJoe2ClL7svrq1rW52ywgKOMEMi62KqyVHbj+PU9GYkWjACBIQgs6qiaKHT9TzJz9W90EfXzHJbYtPoJG94GeIMJLGmv/hbD8jKO+BF430SzSCvzljzF8p8QN26ZWdP8ZjYmUWVTbJc3Ty7zoV2veZVR/WNCNYJ9MqWHN1RvscXsXnOXMNkvHlaY+4LoCW4hvbdLwq6r5tS2PZGNmsD7''@;'; put 'put ''JDsEQGyzwxWs5oHAkvbqKg8b85ug0XVUtHsnK/MFjb5FmhG6Jx87BuUBRVIuTVEK08BcQuhsFmepEMVSJ0XSYr/huz/T/LIptnufB6N/yczZv+aYC6NXptphMyq3+ZIClOfGS9qrF1Is3RAdhvnFgRF56pyatt/mOTxwnyABENsEQUEzexBY2lo7LqB3/tGjjP5CdMTmc1yB0DaZOX809t2Sv8Pk''@;'; put 'put ''qcH1NI/y6wl9usKrjD6DEdkxkB/nmhH6p1sZ03BdxTMZO4oum2Jr7kOs9al/c8sjvmjmYu7OpEieI+1wQEM0e3NG+b9G/+N2tzLypoGCG/C5pRGzrqtc+7A93p3FHWVaYpvIphZwG7m4B1g+sjc/wANq8A8uufT0WP/mB67O1Y2KVHq91bYuzAerWJ/mB/s7h+w8StV9D7rlEYP2Wza4Fg7pfa94''@;'; put 'put ''pPJZPdWbtqV7So1Zq5CuvuXIwgSpvc9sPa2a0Vtp5mnGrgt+xk/qtlp6glS8cSAEwkvbKk/RRPgxBysZEWnDBTcEN37DMZ6Z6bsOVhiPhRQDiG0hVRNy2U/APFJNIl0zEcJzorfCizQIar7dXmXMQp2jh2GHnsEDxxQqiXRfpPHQ/BLloP27dEVa7r1KLPmdQfC82RPXvZ/q0DNv9aKw/h8H82Zl''@;'; put 'put ''NvKy9snrMRb9s3r7D6zA5OaGqk0L7fqsc17bCWcig//aKZWNjmbuZGW/MkTfHNj8ItWRmP1+ILbZZwwe8khg5ea60WHCmzBGF8ebddsb/vS/HmXk9R45+IQVNzrII7p+1+YkHUeAXG4Izdy/d8AHvPl6UPftlqjzQdznWTj3G+v8yca7T2z/7WDe8nh90136c++2by5Tjd6GiG2C5I1OufMMO9d6''@;'; put 'put ''0eaqiRjjPzIqfS6aGcG0WaKOS6ZNfPbjZOsA7bNPAMQ2+4zBgwUILNg04WKBjUUK9Xx+8PmvQsjU+3vV0Bsbqtf+xwLhWi6Epo6qQ33hzgc88ugzIxuIRAepGaF/O2nJNWM/KGtL5nn40uZxo1Qq3syW2C7pqJlFBG2K1Nwjj3ozRAK1M05cs8tykJMIaMGmqhM04XvSI++daR35YcjRShm9CAQ3''@;'; put 'put ''CZg5agpimyPQ4Cb/BMyj6LqD7PtcGHcozB27RKj/mZ5MvL/QmViUzq3R/GeanQgaBSKujuov6kbotw7mrYr1woVhnp/7moOUXZHoTkfZFtvlraccEeDd25ySp/9Unf7lTES6ZFbVhseyQyl3Vhc3TxgrKyXPcqT3ryOO/AiB/05k+i1Y7pa7WiTiCcQ2EUrQpqAI3Nc82RNk+lUCi9soYYNuX4Z0''@;'; put 'put ''X6dMvQ8jhSycM75ld0Eln4FkGl//iqx0ur6vG+G7Yk+qMc2bz3MZcTwkGfyuGZNaD3gFOextZObp5EI+JtUdpMxafyI+XFPmOKR2b+pCOGjpQ/oefXq+TzzKQCnQgi2VX8CaYa4vPzHankLdrxp66Nszaja+lQk/YCN9AiC26TMECzYlsLi9+kgh+DyCyHnxti6kWPkHEfguEg4/CeeKDi7y/M11''@;'; put 'put ''oykO34gQvlaiDndsC8GN9xBh87lb/t3cr8V/nrt3NnLYnCAV/5ltmmJrxtTUMeWksN77V4W5S81/q0aw10VHnjOjes0mmw7dAWGb5xhrRvczHnnkgLsNYd3/scxc35ldvbmjEPK0ew4gtnavIMSfNoElrbUVfm3Xg15lzHEYExprkAu+hWF2u1P2bbTzxJq0QQ1hYEHrieNcbOT1quH/VuyXFnMG''@;'; put 'put ''sFsa1ebXulf2quKZ2APbTaEQIvBWNsXWnJnulIJ/lIjj7EgKGNFWQ+bfLpQ7F+aXFs0Qj0hUOSO6TBiRnYLz7zbUbmrNVv3BbmIEQGwT4wStioDAgs0Tr8ZI3CEz18Gx6ZrPc12sfDXi+u27qqretuqpMfks0+L26tMJJsuxIP+DMSaxsUjEtUY39J/2VNe8GuGXC7E141jWVnOWwPhJgun+L1OE''@;'; put 'put ''KD+ZWbFukV2XAcXyNW+Z+1loFSXSd6O3dwxqPbsVWnrJnNpNz+dzfBS7bxDbYh8BkP8AAuZVUKmDzmBYWqTx4CA6BtdVSpV7ZIIXwJrGwYPH3HxhSVvVDIdUcr3OQwMOQjdby8TZKzD5hSHCi8ydnHIltk0dVc6wrj+qMNe5n13dkk4h8PcaajauK5S3gTl+FeJfpEiu/mMFIz/79lO+fG5d21OF''@;'; put 'put ''kqvd8gCxtVvFIN6cEGhqm3IspdIKQ4RPjeeQYvkfHImbe0rKn87mqTg5STYLTpY2Tx6FJe0mXWhXS9TpiXVBhLQbYX67QfE6NdyzPfI8Nbadg3k6KSFfunb8U2lPVGvqmHxUQOtsc0nlB0X8+NXOD71s1Cmzapv/lQUMeTFpzhp3bJ5wHSL4LjmKvWr4fRJx3N5Q3ba8UK7m8wI4RacZEFv2sS+8''@;'; put 'put ''c9DkiEg8sF1jipWBbnknYJ6Vq5b4LvA6xs7xq7u/HhuQeWvZq4x50q91roBJKIPLZX7oO9snnuikJbNUHro43vrcEnns33rCO78Wfdsz2pIptjrj/5OJdbHmVffi9vHTKHasiL6dzLDjhTAOXD23svXVvA+6DAVg5jq/ddxZQmgPRX+5MJ+hUywtdso9t8L8gwzBTtAMiG2CoKBZ8RIwb0ES5Lwq''@;'; put 'put ''bPhvlqhj/1VRhEhY9/cokvfXOhULrp/YArv3xBkq5vm5BtcXSMRxAiVMjm1iHhOB8eCPI1NssaZ9+cc16z7NxAg03cxrOf5hh1xy6UDxF68yJF8xo3r93zLhxyo2FrR8fULQ6HukzHno0dExYST9FhMx126HMliFaypxZEBs6Ue+8EeDbhPBlW0q5YA+ViZgbv0YxGojQujyeEtdAlr3J25pxK2U''@;'; put 'put ''OB6dUbnGVse45YK7uT7X3V12GhZkMSH0K/F8xoquQj17NEGPnVX55CeZinHJ2tPdyB1sxFjUR1/h+tXOj1ys/OqGms1rCuk2610dVYeqwV3PlDkP/Vo0w6Dme8Ell15UX9Xy30yxBTtDEwCxhdEBBJIksHhTxdGESYsxwufEWyqEEHqJc3RzX82mtemeipNkaLZo3j9ZSdNuYlS5nhImHegqV6Gu''@;'; put 'put ''PZqQMiq2pj8zht5Qz30eZeTl0bewVSOwW6auH9ZXbSqog9nnr584MoA+3TTCdfix0bxVI/ASI95vz6nZ+K4tBo+Ng8y62OIwLq+f0tJtY0YQOhAYRMB8Hlm6dUpVX2jXg25l5FdjG3Bh6DpXN8nU9aOG6hbYbznOGFq0teKwcMj/kEceOegoRLO5eZVLMetm1FExveLZNzM9DPceJ/juFUKg5TJ1''@;'; put 'put ''evffjTOCfTJ1Lmmo3nRHpn3m015jR9UIovke90ij+k9Bivz4wp++5XGOvXhOZfOL+Yyv0H1nXWwFUz4P+8wW+jAq3vzMU3HcquuH3NB+IlFlTCyJ/ue5zP1LrPMl9ZNaPypeUvEzN/er7vTTOl0Eb1GYu4IRxRnb0iONaNG5eqvfob001E5UqXI1vzQprePPZ0S+hxJp//pq88uSQypZperGrYV0''@;'; put 'put ''BOOStce7NQdbKDPXj6KfWQdV325Z8lztr259Cu7GpDqaDtwvbbGVQ2xnb3jn/m+Fse6cdNTNqtHVzAUWCOlI54QjpO1vRjDDBIth49jbP7Uf077Z/0B+eAIxIMRQtA0ujP6YCKb99s38DvRDhsjhQLlxoQuTUWqZJ9crkTokYzHRmpk5xtqlFAvDENj8HfsaFyTlsRBriwhdmHGa/0/ZQF+Gvndc''@;'; put 'put ''mn8XuggbQuv3S6W97bBBuUG4y/xNiDzSLZXcEzA6B9ymi/jrCX/yjlsecYcQ+E9wyPfgUWSKnret9qiA0fOASyqfEnsyk87VkGYEX3PL5dd1h8SLjVNaDvxmS2agmptetNYe4zd6nvLII46J7hrUul50OMvOnz1xc8pn9iYZSk6aL2mbdJHB/atk5tl/jrBmhAKcG8vd/tF3FsK+0TkBmYSTtD7E''@;'; put 'put ''73v9Qo8UIh/2hT8uScInNAUCBUHA3OCCC10TiHMkhCEzd/8H11Aza/cl/TIWeF6Pip6O3bqwIKCkmUT/phjtFWf+/x3kOymRv0Zits/sP+QAy09QxO+cVdue0bWx5jGCQrBHMCYnDUhDoH8ILK4utOVdi9omfNvFRt+rcf+AHdOwIE0uxXfLteNfDKRZTugeRSAtsX2o7Vyv4XR+AGILYwoIDCZw''@;'; put 'put ''INHVudqqMM9VMyqe/08hzXzN5DhYvLnyalUE73JJZYOWW5lbEDLiWEV1x4o5UzJ3MtPCHaeW4qD/DxKVz4zOxZyp7JZHn9dQvXF7JnPMty1zSZaqBx6JPb0JI/YzSuS5MKs+cxUCsc0cS7AEBOISGEp0heAGxcoDKtPnwfrc+INnefPkMo0Gb2LMMSe2hUDmFg3G+xSRBb7yPb9sPPYNNRNDcNWO''@;'; put 'put ''ca6ekHI3I9LV0fZUPbCbYuUHhbbl4cK2CcfqRvgvLql8/1pcIYT5DOVZB+eXTa1r68oE12K3kZbYrtx6ZolDKnkfrmyLfRhB/sMRONBVbkDrv2q61SW5f3/t+Kfg1l0MTPPW8sptk47qC/t+7pRKB97iRQiZh9aHNN8rCi2ZOreubdtwtUjkdXPiVk+A/YRSpTH6+XFY7+uhVJl1fU3HrxKxY5c2''@;'; put 'put ''C1qPKw+ogfZy52Ffjo5ZcL2dY/e352ZoUxG78MhGnGmJ7f2vnl3ONM9/QWyzURqwWYgEhhJdUzAwpi8jTu7AJPR8Q/WWwacgFCKQJHIyt88MebtPE0jcJVFlwAYNphnVCPQy7HiSIL6gobb99SRMD3FHAuGFrRMuR0jcrTD3/nkpmhHsY9g5v1fDSzI9USvdmNPpv7R53CiV8tUOVjI52g7F0lZD''@;'; put 'put ''6JfBErZ06CKUnti2nl3OXO53+sKf9B/KDD9AAAgkRmDoW8tC6FzdrEhlM7orKv8OR/kN5mluSKHq4gpDhG53SqWjY1uYJ9zI1PNL2RCLZkxq3ZVYRYZuNX/T+LM4Uh92SeUDlnYx5LhPR6iglgat3FpRsifQvbrUMXbA2ueg1vsPr1J+wYzKDW+ky7NY+6clto+/fqHc2+uZjwQ7VOehgMG1/dPx''@;'; put 'put ''zecpGCPOhcHNJyscC47NBwFcCIT2HnWJScySn30LOvi+qHB/W/Mn+mhMbq61OeDSD3Mhh9mL76uqQGb7yL8QwnGX4Jiv7/UjCBeYkwOyEQktFRrK1/DDbaB9My7eH/fev8fw6P/33vzi5zacv4G5D9c68rrge7+skf3+P4uLR/GOtfdZtAf2FLv8I7o1RnE20jXzx8l/gRQC7V3CFTVm9udojmOT''@;'; put 'put ''O+HmkBYYmaPYHJjmX7kwiPl6/184xsKclcwFNgxz3COM+/9t/t18HWHOkWE6IkTCzpGE0Ckc952IKXXFkjCvnmTi/JmOlEVwCy/+OJm3teIgWcU3C4KvYkQetD7XMNR3EKY3+8s7/5ju89xFbRPH64b6hFMqPTQ6GoPrz0rM8YNC2mN471pc+pBDKrk4OldVD7zHsPvSOXUtbYl+RkC7zwikJbYA''@;'; put 'put ''EggAgfQILG+tPULF+nyKpQtil7mYlmXqfksYxq17qqoehavc+KwXbppQzTFvUqhrQrzTgyTiWKMb4Z/Oqm55JZ2Z3/PaJ3yda6E1bnnE2AGRcNKuyOKCaQV0CIW5jzXb47jXxbzXROca0vu6FFL2ndm1G5rTG/nF1xvEtvhqDhlbjIB5mdzUVns0pqQJIXx2bHi8f9YyfRlhdGN9Vct6i4VviXAa''@;'; put 'put ''myczWQqeLmNpGcH0f2KDMrimIsQeVRi5aUZlywepBr2obfyXKHauJZgcPsAGxlslQ/rOdbXP70zVttX6mdtZ/mfsW3co1H1jzP7RPoW6L6+vbnnCajFbOR4QWytXB2IrKgL9h363T7hA17X5Lrn0yNjkdR4OysT1a4H5IjipJf7QmL9t4kgc1mZyIX7slEpHxbYigu5GGN0uwvx3qe7ZPr914jG6''@;'; put 'put ''7n/Wo4waUCOK5W2c8UvqJ2x4u5AG7rxNX/shxnShg3nLI3mZm4s4qffmztLy+xuPXZ2RJVeFxCxeLiC2hV5hyM92BMwj4ISr59L/n9xwR7zzc0O6r1Mh3l9i4lxQSPv2ZrJQi9pqDkHCuEEg4wqZugbtcKfp4f9IVJmPsPpoKjO/mzqqRggh/RFjPCU6blUPviUT75UNtRtaM5lPvm0t6qiaGFK7''@;'; put 'put ''V3vlMZ8fEIsQf2KG+8czJq1JeyJavnPMtn8Q22wTBvtAIEUCi5orDjOodgfB7EKZOgedGU2x8g+OtJuFCK1JRTBSDMtW3ea3jqvwsPL6sBE4jxJJiQ3eyUo3B7Sulb1lY59K9grN3G3Kw5UHVb3vu9F2Zer+WNX6ZvpqTv5jIT1nn7d53IkSlh5nVBlwRS+E2ECpdGkhTRLLxiAHsc0GVbAJBDJI''@;'; put 'put ''wDw/lzK2RCD8zejDziMuhBDbERY/7a1qbYYTW+KDX9xa9U1KpGUY4wEHDZitzZ28ZOp+Thf63Pqq9f9IpnTmMiSElZ8Jblwy8Lmmv8fBSq/trqxbXUiCu3hz5YmaCD0ZOytbIq6NQkXfhSvcoUcPiG0y7yxoCwTyRMCcRLWg9YTvCCEWO6XSL8aGYS6vo9Txc86NOxuqN36YpzAt7baxebLDzfSZ''@;'; put 'put ''DsnboPHAoOMQGVZ6EDLuC3N6dzLLrczarNgy5XaB+C3RACiW/aoevHNuXdsiS4NJMrhlHVUnKKT81yr3H7f/Cx8SwsVGNOuq/7JCmiSWJJoDNgexzSRNsAUEskxg34YO30eI3y4z54DTWkzX5vNcmbh/5pCUpdMrNuzJcji2NL98c93BgpJGQ2iXx7u1zDl/n2ByW0PNpocTTdCc3FbWcfJVBtIe''@;'; put 'put ''jL7C7d8ZTOD5vTWtjYV012FFa83nVcz/xIg8PpoRQcoOZPDvzKpb/16i7IqlHYhtsVQa8iwoAndtmvA5hNSbJaJcKlGnOzY5guTXMRLzVTf5a6YPXC8EkOaylncOee9kwY0FMnOPi83JPDxewZ61GtJ/0lC9/rVEcu6/+7B5wmyJyvMoYfL+qz7BDUbdt3QFQwW1veOC1glHcK79zimVVkXzYdjx''@;'; put 'put ''gi7QJQ3Va/+TCLdiaQNiWyyVhjwLkoD5PNenf/zzEuXgiYwog3ZR0oW6yck8c/Z4yl5NdgJQQQKLSco8cKAzIF2uc/8dLqn8IIxx9PZs5n7LPRJ2/tyQybJET2ZauHn8d3WuLnfJ5QM2v5CQc6mGREHNIF+4Y1wp8pOHZcl1fjTasO7/l4OWXllfs2FLMYyjRHIEsU2EErQBAhYnsGjz+IlhI/gr''@;'; put 'put ''jzJqwKktZtgG18IaV5sdzHMdbCYfv5DmnsBhg16hGcFbHaxkZGyrsN7XRZG8otSlLk3kUPUl7dVf9Yf3PFHiGDtg5q5f71rvoJ5L59Z0fGrxIZVweOaRhL6gdC+lypXRnfrU3R84SMn3r5+0ZVPCxgq4IYhtARcXUisuAuYEIIJ23cSoY7qDecpisw9qPbtc8qjbekL6w41TWkLFRSexbJe2Vx/e''@;'; put 'put ''G9p9b4njoLPibf0Y0nr/rtCSaxpqWrYNt/WjudtUUPU9U+I4eODmF4g9g3X1ykwckpBYVtlvZW7vKO9WlijMOz367oCq93XLzPm9huq257IfhbU9gNhauz4QHRBImkDj1ooSWdXvkqjjRxQzKdqAOWvZr3V+4JZG3Iax/hiszx2M13ye++6hH345pAfvd0sldbEtDK5rQa1rh1sZNW129ea/HahA''@;'; put 'put ''5uYXfrXvGbc8ojK6XXfwo9fKXYecW0g7gZmTxOTN46+UqHw/JdL+Z9aaEfQzosztrW5dVUiTxJJ9Y4LYJksM2gMBmxBY2loxzqfuub/MeejE2JDNCUAGN7bIxDOjvub5l22SUk7DNO8UyKT3YpX7G0uUg74Q61ztP5nJ9RA2jEX1k1o/Giq4Ba215f7wB8+OcB0+QHBDat/rTlp2bn1dYW3vuKB1''@;'; put 'put ''whmaEfi5Rx51WISJ+ShDYd57///IqztmVK7x5bSQFnEGYmuRQkAYQCAbBCKCYYjwTW555NGDBcPf45DKH2WGsWBa9cb3hrs1mo0YrW7TfJ4b1ND3VSNwy6ATfxBCAa37E4k4H+SI3f2TurauePksaqvxYkrSxfgAACAASURBVMxXMSx/L/p187mmWy65eHb1lg6rc0gmvsXt1V9HHP2eUWnAHAIh''@;'; put 'put ''+DqMpR8U41pwENtkRhC0BQI2JRCZAIQFuZ0QOuh5rvlsjVHvQwLJi5PZ0MGmOFIKe97mcQczTOcIJK6Rqcsba0Q31LcpkZdKNPTIjMptg67eVj57phL0di6mhE0lmLFI/6DWvUvGjmv8ddueKqTbrEs3V3wlYPj/6FFGDhBcSuTNBjcuKTbBBbFN6W0HnYCAPQks2TTpi5jxJoSQufXj/g/8SDaM''@;'; put 'put ''OP7JuT73kA9GrLnootXmUffwE0PAZBgW3ebh6nXxGAY130tuVvKjmdWbdsS7U7C4tWImJmxJ9PP0sO7voVhqCNRu+VUhCe6CLZVfCAb3PFfmOORL0RgNrr/gQK7zimm3KRBb+CgBAkVGoH/zhfbxZ5bIB9+m6r5Bz3PNvYI98pinekN7ls2pa2krMjwJpWtOBnK3VZ6NCVsc7/xcc+coiqQ/c67d''@;'; put 'put ''PLuu7c1Yo/Pbxp+FOP9d9LF1OldDFEt3z67ZfGNCQdik0bJNEz5nEGoeYDDgmbVC3X/ThXbxzMrn/22TVNIKE8Q2LXzQGQjYl8C+25qXCCHmxdv60fzwd7CS3xoM3VY/fu2QE4DsSyD9yM3jEHVn1w0IiRkKc5fGWlSNgI9ix88Upt4Ze2t5cdvEOoMbf1WYZ/85seZsccTFQ706m9o4pUVPP0Jr''@;'; put 'put ''WGjcMc6F+wJrvPKYSdER9am73y2XDz3juup1/7RGpNmLAsQ2e2zBMhCwBYEl7dVjsKA/EsiYQYk0aEMHmXreMWeXCiSvgvNz45d0wabxJyjMeZ3G1Ysk6hiwfaYQQnjlg17waZ+u6Csd86fonbzu3PTVb0vEdb9MnQdFLJvtGZFX4C7pJzPOWhO2xSBKIEhz3kBIE79j1HlOzC3ltxBml82t2VTQ''@;'; put 'put ''u02B2CYwSKAJECgGAuazSM7C87Ag5zMiO2JzJpi9KhC+3SU5n7t2/FOBYmCSTI7m7fmFm080D5OfJzHX+HjPc2XqeU7j+k31VWtfithe0F49QVW7HvcqYwYsL+KCP+Zg8rRCOlDCFNy+cPjnDqn0omi2GLH/IoyvrK9a35IMczu1BbG1U7UgViCQAwLLOiadIBGlSefq5Fh35rNILowOiuTbejXc''@;'; put 'put ''Wki3OjOJdklr1fmEyAsxRoPOzzW4GsKIPWogftMNte07Tb+L26uPZEL6MyLo+Og4VD2w1iGXXF5IB7Objy/Cpb3zKaYNA3P1d8vM/YOG6k1/yWQtrGILxNYqlYA4gICFCPTvonTIB1cHdd/NbnnkoRjhQZ8VEnE9jLBx53UV696xUOiWCWXv89w9N2CErpPjbJ8phPgQYXRnb+nuhxuPfUM1t4pU''@;'; put 'put ''9fBTDsmz/5xYMxku+EYu0UsTPQjBMgAOEIi5vSPahZZ4pZHTo7fFNIxwH2POy2dVNv+l0NZ8g9jaYWRCjEAgxwTua57s8TFdcjDHWJkoD4aNvgETWyLhBHXf7hL54LtIMPDQtCktfTkO0xbuFrXVHEIQ/wlC5IfRR++ZwZszvzUj/B9MyPU31G59sn89tM4eo4SdEZ2cX+38u5O4Lp4zadsbtkg6''@;'; put 'put ''wSAXt1Z9U+Ohh51SyahIF3NiHsOsya0EGq8d/6KWoCnLNwOxtXyJIEAgkH0C5qH0WHIdjHV8iUydp6p68JiA3ikTRKhEnSXxNuWPRMUFN9fjbndK7plhvefvsN9y/Hot3DShWkPh+Q7qqYw9tN7gahghspoJfFtQVntQ0HjQIXsuiLbEhf5PxPH359S1vZj9EZE7D+as7KDe9zuvPPrz0V4pVn5n''@;'; put 'put ''CDyzUCblgdjmbkyBJyBgOQKLt08eS3R0BUXk0rDRd7hMnYN2Rko0aI2HA1ig7UwpnX7Yf0v+CZtiDCZn3j51drlOEhzFPbQ+pPv2IIR+rQi2QjDlZoTQD6InWgW0ro8d1PuDObXtaxKtix3aLW6f8PWQau42NXrACUkIoY0Sly8rhM0vQGztMBIhRiCQYQLmrU2BtBu5oV7skErHZNK8agR7HVLp''@;'; put 'put ''7wUjt8P63PhkzdvFvaHgtQLjOS6pbBD/oNb1osxKV7lY6aVho/ekaCtBrXePQj0//PzOg/5aSF9o5neM+x83HvFrQ6gDNlqRqWcD14PXzqjZ+FYmx2mubYHY5po4+AMCeSRw77ZTRmq6qPdrXde65M+ekw28Xdk/41gzN1gIG71dGDGdIGwwqqCw0ScTzCSZukowItT8b4wHT54y7VGsPDSzat3V''@;'; put 'put ''eUzX8q7NI/hUQ5+LEZ4uUacnNmAHLQmPdh+lvO/bv1Kov4nOw0GB8NJgzZbGQtresf9Oi6Y9RjCtQ1GT8mTmek1F/HsNE9e+bvmiDhEgiK1dKwdxA4EkCSzZWne8P/Dx417l4GPiCWRA6/rEr3W+7iCe+72O8mZfWPF9ZddoYbp548LV4iurL9z/efHG6F1YYf7PEyHOkqn74pDhPy56B6WQ3rvH''@;'; put 'put ''6SyfWD+hsI6PSxJ5ws3vajthvDD4CrdUVpNoJ4Nrqsycd82s3HBnon3s0G5p87hRkmPkbw0RHjBJzC2NfDNs+C6fUbl+qx3yiI0RxNaOVYOYgUASBMznhI7OkukI8dvlmKsn81xbzQhvxgg3obDRFmJef7JrZxubJzOF6V6Mtat0IzTXvOpVqHNZV+XGWwvpqisJ5Ck1Neuk7Hacr/LgwtgNLoYy''@;'; put 'put ''aN59oJj+zCn3ziikmbvmhD1faHdrieOQcdG564b6jkMq++aMyjW2m5UNYpvS2wI6AQF7EDDXelKvdpvBw+ZWjEp01J3B918rlUbf4jecaxuntIQykZG59aOmB8+h1PX4DbXtvZmwWWw2FrQeV24Y6DqM6QynVDpo+8x4PDAiqyVKflxIu02Zt9g5Z48RQk6Nzplz423GHJfPqlxvq0MyQGyL7Z0M''@;'; put 'put ''+RYNgVU7xkm7/NoKhXqvoYRJkcQ1I+QnWJ7HtN4H6qe83F00QGyW6F2bJnwuZHQu8UgjzjTvFgwbvhAbCZevnFW3/r1h29qkgbneu5v6fuVk3u9Eh9wb3vXfcuWQb8+oXv83m6SCQGztUimIEwgkSeDuradeqevafZggZ6RrSPN9igid89O6Hb9N0hw0zxOBZa21xwQN34NDnZ8bHZYvtPNfZfJh''@;'; put 'put ''35pV2/yvPIWbcbfm7XVP18hpAhkLKZHkiIM+ddd7Hlb+nYba9h0Zd5oFgyC2WYAKJoFAvgksaau5SCD+K0bk/UJLsfyGqgd/MLeubVu+4wP/yROYt+nEi7jQVrjl8rHRM3VjLYW0vjddxHHarLr2grnCNXNc0l73XYzE7wimNJKzwY1XEeanza3p+DR5orntAWKbW97gDQhknUBTx6nHhbWu5xTJ''@;'; put 'put ''c0jEmWYE35ao8r2G6tbtWQ8AHGSNgHkurBIgNxOMr4u3VOgzEdLeogh/1y5XfYkCW9JePQMjvNRcchbpw4jjibHvlVxg9TXHILaJVhnaAQEbEFjUVuNFQntOos7qSLi6oX6AiXT53JrNG22QAoSYAAHzlCBV6/2FSx4x6GSmSPeQ7utUSOnZs2tbbLlUZigMTe2TViCMZ0ZeN/eXVojrkulVax9P''@;'; put 'put ''AF3emoDY5g09OAYCmSewcus3Zuk8tDzqCkelWPpRQ82mhzPvDSzmk4C55Mophc5CAt3BiHRcvP2rg5pvt0ceOW1m1XpLC1EyHJe8crqb+3paJOoYH3V1+09K6JRpE5/9OBlbuWwLYptL2uALCGSRwPId3zhYC/k6GJH3H0IeUPc8r4QPOX/uN9b5s+gaTOeZwOL26u8wrCxBiH8xNhS/uucDh1Qy''@;'; put 'put ''zg7PNRPFuLS1dpwuws/LzFUe6eNk5cs+mfD16xtxI0/UTi7bgdjmkjb4AgJZJLByyzdu0EVoYcQFQfRtgfVv1ldt/kcW3YJpixAw91sOavQ2jMVURmRHJCyKpUe6QvrVmVpLbZF00dKOutsJIrdG4lH14Kdeh+tr0ya2WPLqFsTWKiMH4gACaRBYsfWUg/pCu7e65LL9V7Wc85vm1LbOT8MsdLUh''@;'; put 'put ''gaaOkw9FwrhVIHENpfJWhsU5hbTZRaQki7ZOPkyova/JzFMW+ZtM3OdNr3z2r1YsG4itFasCMQGBJAk0tU26imOximDSvywirPs/8CqlXy/ED9kk0RRl85XPnqmoJb6TCaEfNFRvfq0QIew9rtD7Z4k4zo7k55VH/+Ka8X+8xor5gthasSoQExBIgoC5U5Qv5FhHCds/M5Vz/Z6+mvZZsDdxEiCh''@;'; put 'put ''qe0ILGmdPJlS0RwJ3COP/rceDFZMrXumy2rJgNharSIQDxBIksDyzXUHh1HwFZm5R5tdzdNgGJYm19ds2pKkKWgOBGxFYOGOU0tFoOsthXn695DWjFCfh42aOK3qGcvNUwCxtdXQgmCBwGACK7ee8hW/2tMROeLOr3budMueiQ3VWz4EXkCgkAmYt8v18uA2JMTXInliwi6sr9zwR6vlDWJrtYpA''@;'; put 'put ''PEAgSQJNHafMNHhw8Wf7xuK/1Fe1fAdj1H8WLfwAgUIl8PjjF9LdXwzfG9J6fhTJUZZK7pk+4akZVssZxNZqFYF4gECSBO7ectpjhlAv2nsLWVcxQj+cU9v+6yTNQHMgYEsCyztOnsWFtiyyqUeZ47C1PzjxkQEHz1shMRBbK1QBYgACaRBYsHn8PxXm/pJpQjUCPkKkE6+v6XgrDZPQFQjYhsCK''@;'; put 'put ''LVMqdK61EUyZGbSEXe/Jkuf4a8ev7rFSEiC2VqoGxAIEUiDwsxcu+HuftuvYvWIb7MWYT7ihdkfBHLGWAhLoUkQE7mk77ZAQCrxDCes/fk/V/d2YlB97Q+3zO62EAcTWStWAWIBAkgRWbj2zBAn+mi5Cn49c2WIsf/mG2nZLfdAkmRY0BwIJE1i149RSzZDeVI3AGLOTQMLcmrRudvVmSx0sD2Kb''@;'; put 'put ''cEmhIRCwHgHzgyagin8IpB9sRhfW/T0COY/+6aTWXdaLFiICApknYB7IcKh3zKu96idfNq0bXA0z6rikvqr5z5n3lrpFENvU2UFPIJB3AsubJ5fJLu/LYcN3eOTKVuLoq7NPeuH9vAcHAQCBHBBoFI1k1AsvPq/qvpMj7hhx1M+oXLsiB+4TdgFimzAqaAgErEdg+d8ml/GA8TLGJCK2veZxa3Nq''@;'; put 'put ''Ot61XrQQERDIPAEhEL532xmLNR6cE7HukEoemjrhqasz7y11iyC2qbODnkAg7wQaX79QLvd1bzKEWmkGo/NwUCB69g217fu3sMt7kBAAEMgygbu3nHK5ztWH8L69wZ1SecePJzxRk2W3SZkHsU0KFzQGAtYjsHLr6ct1Hp4ViYwjfsec6tbbrBcpRAQEskNgWdspUwwUeDZytKBLGvnOx32dxzRO''@;'; put 'put ''adGz4zF5qyC2yTODHkDAUgRWbvvG/4Y034OMyE4zMG4Y22fXtlXCDlKWKhMEk0UCTW1TjtWEf6tEnR7TjUzcPk2RD68/4YnuLLpNyjSIbVK4oDEQsB6BRZsnniew+I1MXV4zurDWt4s6vcdfb9FDtK1HECKyO4FFbTWHCB5+XWbuvWfbCtQnCflL11lorS2Ird1HGcRf9ATMDxoZs1aB0RH9V7ZC''@;'; put 'put ''1wjH5zbUtT1X9HAAQFEQ2Lve3Nihi/DRZsI6V0MKcZ4ys3pjh1UAgNhapRIQBxBIkYC5zpDgPU965BFn9n+pF0L8/1Xusj0VlTc04kaeolnoBgRsRWD+5nEvOZjnBDNo85hJh1Ry7nUVz621ShIgtlapBMQBBNIgsLjtpDouAs9EbiX3qXs+cLhGTYBbyWlAha62InDftrN/ETb6rooErVDvvbsm''@;'; put 'put ''jp9plS+cILa2Gk4QLBCIT2DVjnGu3rCrhWAyIdKCYmXejMp1t8BEKRg1xUBg+ZbJNwkh7orkOsJ5+NP/7X7vfKvMSAaxLYZRCDkWBYFl7bUNGNNlkWRDum+PRx4xaUblhjeKAgAkWdQEVmw95XhV929lROmflW9wfecoTTryyiktISuAAbG1QhUgBiCQAQIrtp5ykISdm8NG7zERcwSR58JcveiG''@;'; put 'put ''2vbeDLgAE0DAsgSWtdZ+TUdqW2T5T7njc592hd76QkP1lqAVggaxtUIVIAYgkCECTR0n34iQsSBijgvDoITdVl/VMi9DLsAMELAkgRVbKw4KqOobDlYywgzQHPsuufSYqROeedsKAYPYWqEKEAMQyBCBJa+c7qaB8FNIoCkRk4bguyim/9tQ3QJLgTLEGcxYj8Dyv51XVmI4X+tRdx5mRicENwgi''@;'; put 'put ''dfU1m7ZYIVoQWytUAWIAAhkkcPfW044Oqp3bZebZu8AfIeRXO99xOcecMbtiw5sZdAWmgIBlCJhrbcN69z8pkfuPmzTFVsKu6hnVa7dbIUgQWytUAWIAAhkm0NQ26SoD6fdTIskR0wTR17Hg351Z0/L3DLsDc0Ag7wQebp7sCLlL1gb1nkl7xVYIJyuZM7Xi6aa8B4cQArG1QhUgBiCQYQJL2ydN''@;'; put 'put ''EsJ4lhLmjjatUO+rWJDLplY++WqGXYI5IJB3AvduP3u5qvftP5SjxHHoYwb/12XXjn9Ry3dwILb5rgD4BwIZIrDy2TMVURaqlZjn0t7wroslqrjimQ7rfe8rjpIzGyY2v54h12AGCFiCwAPbzvlm0PA9FRXMe4y4jptRucaX7wBBbPNdAfAPBDJAYOXWyYcFtNBKjMTpEnUMuJqNmNeMUMDJSj/F''@;'; put 'put ''mP5V13pX1te1WWKWZgbSBxNAoJ/AkrZJV1GCfxHBUeI4pNMX6jy6oXptZ74RgdjmuwLgHwikSWBp+0kTEDIeIpgeF2vK4FqYEcd7Ahl/MAReXaKw9384br0PdpVKEzp0tySBFe0nTQjxwHqZukoiATqR97AfVz/9Yb4DBrHNdwXAPxBIg0BT+6TT/VrnL93yyEOjzZgiq7CSP2s8cG9v6e4djce+''@;'; put 'put ''oabhBroCAVsQMO/waIa+A2N6UCRgQtjXZlVuyPscBRBbWwwhCBIIDCawuL36CsNQVyjMXRp51ZyBGTb6PpCQ43p/XcfjjRjBqT8weIqGwP+1d+fxdZTl4sDfbWbOknOSphuUTQGvCAoCaZOcpG3SdKOKChcKondB0UopaZO2FMX7MaJQuiVtCkJBFC4XvbYISIHSLUmzF1IuXBblB1xRsC2U7Ged''@;'; put 'put ''mfd9f59JOSEcWrKd/Tz5w4+fnJnnfZ7vTHkyc2bet7q1MNene593qrnnhIu2sdySpTOeOJBoBGi2iT4CMD4IjEGgpqXkqhDvf2Dou7TW1SzG6GEbs/9kWf7+zjGEhV1AIKUFpES4tn3+PVyGbvy42bo3L52xsyLRhUGzTfQRgPFBYJQCm1tLF3iNzoccyoRTwrsGzb4uhbhuPOvw1D8uXryDjzIk''@;'; put 'put ''bA4CaSNQ0zrvdon0/wgX5GAT6/wm/XqlZ0dC50iGZps2pxgUkgkCte1l53cHj+x0qZPPHtJoO6XES2+b/eL2TDCAGkHgswQ2tcz+Acbo/vA2kxznvNiv9M++6YId3kTKQbNNpD6MDQKjENjYUTIJBY3thLDBeY91HuinxPat1UWNdaMIBZuCQNoKVLeWLBTS3EkwZVaRE9TT/hpQ0aVLL/xddyKL''@;'; put 'put ''hmabSH0YGwRGIbClde5ajoxbw7sIaRoCyeW3FLXeO4owsCkIpLXAuuaiPCTNvQq1DcwNzojtQ405L1yS9/iRRBYOzTaR+jA2CIxQoKap+Gwv7212qrkDk6xbPwYPPnZL8cHF8M7sCBFhs4wQ2NAyfwqSvpcoYQP/Vgwe8CrYWVBZnNgZ06DZZsTpB0WmssD27VfTw2f0VnERvA1jPPBvNmh6X2NU''@;'; put 'put ''++YtRa1vp3JtkDsIRFugpr4kR7HbD+rC/0/h2BjjeRWFDfuiPdZo4kGzHY0WbAsCCRCobi7J06WvTqUOlzW8zv19Gsm6rqKo/pkEpANDgkBSC2zruNwR0P0NApnTP05Urqj0NG5JZOLQbBOpD2ODwAgEatsW/tSUgV+EN+0NHu3QnNkLf5L/PLxLOwI/2CSzBKw7QZ2fMx8MmF3/Fq6cEdvm8oLd''@;'; put 'put ''CX3XFpptZp2HUG2KCVS3LshVCNpviOBXrdSF5Bwj5ZqVRfV/TLFSIF0QiJvAlra5VVwaPwsP6FQm/veS6Y9/O24JnGAgaLaJ1IexQWAYgZqW0q9JLJ4Ob6Zz/1GVsrxKT1vCJ1aHgwcCySqwuXX21QKhwffOnUruCwibJUvydvoTlTM020TJw7ggMAKB2vb5600RWj14O4xqz5m8/8pKT1tCZ8MZ''@;'; put 'put ''QeqwCQgkTGBTc0kBpaRNyOOTqdmY67BqGl+5IYFL7UGzTdjpAAODwGcLbHh5vhP3BeoIJTPCW0okf7TS07gN7EAABE4ucE/rgnNNLN7k8vhiV7rp7XGoU6xF5N9LlBs020TJw7ggMIzA+vqSU0K485BTzZ1mbWrNf0yw4+JbZ7b8HfBAAAROLrCt4/JJvlDfSwijgaUnDR70qcReXFHU8FKi3KDZ''@;'; put 'put ''JkoexgWB4ZptY8ElAhn7wyv7EMTeCIng9DXFLf2ABwIgcHKB39aX2PSs3J0+o3NueCsu5A2rixsfTJQbNNtEycO4IDCMwJ0H8hZRQnco1OawNnUpU59j3g+uuL60IQh4IAACJxeoqi9hkx3OmhD3LgtvxbC6qbxw76pEuUGzTZQ8jAsCwwhsbC66khA2+IqPylxPiQl8cfkXdoUADwRA4LMFatvm''@;'; put 'put ''3qiL0FaCCbW21Iht100Fuxclyg2abaLkYVwQGEZgQ4vneoqV34Q3s7MJv3vfqVxfdcGO4099wA8IgMBJBba0ly4yuP4kwUyxNlKo41W/oXjWFD+VkK9hoNnCyQoCSSqwsanwh4Sqg08eO5SJD2L8txuX5B0ykjRlSAsEkkZgQ4unEEnUQImiWkm51FPe7dd7vlqZoNd/oNkmzakBiYDAJwU2tBRf''@;'; put 'put ''TzEdvLJ1sOz/OurUvg9XtnCmgMDwAtWtc04T0niTYGK3tg6Z3u4skvvlm4v3Hh5+7+hvAc02+qYQEQSiInBX84zrFKz9J/7oO6cJ2unPdIf0qys9O2BCi6gIQ5B0FrirY2624T36mlOdOPD6j24G+h006+LyorqErJQFzTadzzaoLaUFtrSUfNnP+xs1ljXh+F/m/sMuzX3hsvz9sABBSh9ZSD4e''@;'; put 'put ''AlUSEVfr7IMYozxrPFPoQRvL+mZ5wd498Rg/cgxotolQhzFBYAQCm9vLpgZCPYc0JWvgL3MphUBCXrJyZvPLI9gdNgGBjBaQEuFtHVc85De6/jUMgSX9eUVRXVUiYKDZJkIdxgSBEQhYt8HsBmnkMnTh4OaYXFNZWD84wfoIwsAmIJCRAlazvfeFy9cHzb7Bd2tt1P3I0vydg803njDQbOOpDWOB''@;'; put 'put ''wCgEqupLbE7FeIIStnBwN4lqK4sOLB9FGNgUBDJWoLqt5Eec61sGn0jWpuz7waU75iUCBJptItRhTBAYocD6Fs8tDCvrwpvbmbuhlwS+dWvevt4RhoDNQCBjBapbS87Vue9FlTpcFoLf7PmbG02bXj5r17F4o0Czjbc4jAcCoxDY2Fpynmn6W1Vm/+ghKW+3xtxXVHrqD4wiDGwKAhkpsK656IsY''@;'; put 'put ''8ecZ0dwWgFs91R8S3muPTc97pgpXiXiiQLONpzaMBQKjFNjWcanj/f7gnixtUlF4V4rV6uWFe1eOMhRsDgIZJ7ChxTPF4MG/2Jhr4I9V60dIbmrUtVbqaGs8r3Ch2Wbc6QcFp5rA1raFJYYM1Ifz9htdRxzKhAWVnsZXUq0WyBcE4imwffvV9G/TDu+hhM2JHNend75rV3M32UPkwZtKG7yxzgua''@;'; put 'put ''bayFIT4IjFOgtj3f3eXrbnTbT70oHIoR+z1dLlclzCY1TlzYPe0FNljvqxvHttmZ62JGtIHZpIb+BE1fm5O5V3WHxItVMVxRC5pt2p9qUGA6CGxsLrpMIvkEJYpm1WMthq0xx3UrCuufSof6oAYQiKVA1Wvnq1k9ORcFDd99DjXnksixrFvLIdPf5FZyly8r3PcqxkhGOx9ottEWhXggECOBn+77''@;'; put 'put ''fFuu48yCwatbrL5uULxw5Yw978ZoSAgLAmklsLG+ZBJS+A8Vqq3k0siNLE6j7k5T6A8KBW2uyNt9JJrFQ7ONpibEAoEYCmxoKsjnyNyjUufAk5XWj5S8KUubsHBJ3k5/DIeG0CCQVgLrmoumEYRuJ5hcjzEhny6O/ZUS/Ivy/H0PResqF5ptWp1CUEw6C1gz4qxvzr9bobalQ+tkxP4IDQSXxuMh''@;'; put 'put ''j3T2hdoyS8CaOzm7teTCPv2Du13a5MGn/T/+Q1YIU5gvOdmEpcsKnz04Xh1otuMVhP1BII4C1m2wfnT02Wxt6vShw1Kk3a87UeXqi/b44pgODAUCKS9gzdRmU3zfIJLeyah2TmRBBg/5bcz9uOTGL1cU178x1oKh2Y5VDvYDgQQJ1LSVfM7kxnZK2CcaLkH0SYlFRUVhwzsJSg2GBYGUFVjXXOSS''@;'; put 'put ''wriZy9AKu5IzObKQgNn3YZaaW2swfu+qvIYPR1soNNvRisH2IJAEAlbD7Qkc3pttO/Xcoen49Z43s5SJN/ToorWqtMFMglQhBRBIKYFNB6afYRL6M4LxdylRB57+/+QPeYthdocpvX+o9LSNeG1paLYpdRpAsiDwscDa+kvO1dSsnQjj84a6CGmaWNIHMWG/qPTU/QPMQAAERi+wtiV/PpXs5wTj''@;'; put 'put ''6QRTOjSCtdylS52836d3bzntH5OeW7x4Bx9uBGi2wwnB5yCQxAIbWuZPMXnXkxpzFkam6Te6j7qVU+9Apv8P5bOa4j7xehKzQWogMCKBqvoSZleCi4Qw1mos6/zInaQU3MbcT5jE+Pny6Xte/ayg0GxHRA4bgUDyClS3FtrtbOr2gNn99cgshRQ8aPZ8MMl+9n2G7v/1zcV7DydvJZAZCCSngPVv''@;'; put 'put ''THB6FSZkLcb4tMgsTTHwENVjCOm3lRc0vHeiKqDZJuexhaxAYMQC9zy/cLrk+DFd+s882U7WbS8hRSu2KVeM5eGOEScDdT3IRAAAH41JREFUG4JAGgtsODDr8338H7/KUibNVKjN+ek/btEbDjVnWdAIvljp2d019HNotml8YkBp6S1wV8fcbLuJ1wSMnqUqdWSfqFrd9PYw6viQIuUPQjG3rZzR''@;'; put 'put ''CLNNpfdpAdXFWMB6PzeraeZ5Pt55f5Y6sfCEk2JI/GebMuHGpTOeGFwKE5ptjA8MhAeBWAhsbJx5viTiXkrYrE//dc1NjNBfpJS/IUTbDg9JxeIIQEwQQGh9c8E1GNF1BJMzIpuuQpzPkID/2vBkM9Bs4YwBgRQTqG4uylOY+2FD+D/xwIaUUtqYqz1g9PyGI/SHNcUt/SlWGqQLAiknUNt+mZsS''@;'; put 'put ''tj9k9uUNJi9Rv8q065bl73k6/Dtotil3aCHhTBaoaZtZ5A31bHequdOGOoRM7+s26r6lN+f9vVUXvK5nshHUDgLxFNjaOvcrXrP3gMYcgwvUa9T902MzLl1bhasENNt4Hg0YCwSiILC+saAoJHyfarSmNJ5UOF1aMaspqquURCFlCAECaS9wR8NX/mRXc78RLlRI8Q7Scqavytv5iVmm4Mo27U8F''@;'; put 'put ''KDAdBNa3eM4JGN11LnXK4BPHOvf3M2Jf79J81UvyDsGqP+lwoKGGlBLY1FxSYEr/XoXas6zEheScYmVphaf+/shCoNmm1KGFZDNRwHrqWPq6ntMU1+Batjr396nYXllZ3PhgJppAzSCQaIGBd28FOUCGzFGuEeeuY/kzvj709jHcRk70kYLxQWAEAtayelsOzl0nhLE6vLk1a40p+G1rZrauG0EI''@;'; put 'put ''2AQEQCAGAhubi9YSwm79uJkSH8ZK2YrCPSdcjg+ubGNwECAkCERLYENbSQk3fX9SqWNwwXiM6dYVBXXLo7WodbRyhTggkCkCtY2XTSYqPqgL3+c/brZ0e4Wn7pqTGUCzzZSzA+pMOYGB21SS7SSYlIWT7wu9/5aTuOevnv38X1OuIEgYBNJE4O62RZUh4d2IMR7oodw0OylBsyuLW16DZpsmBxnK''@;'; put 'put ''yByBmrbZl5nceIISZWCZL4MHfQqyfbty5oGdmaMAlYJAcglsap5dasrAU+GHoqzsFOpYc3P+rvWflSlc2SbXcYRsQGBAoOq1q9Wcvu4/CmkMLi7Ahfm42xa8dkneIQOYQAAE4i9g3W1ixPV7U4S+GR7detVH5Vkzymft+syVtaDZxv94wYggMKzAxpZZs0wReFqlDpe1sTU7FMaytNLTNDjX6rBB''@;'; put 'put ''YAMQAIGoCmxunXO1LgIPM6LarcBCcpNhbdkKz/5tww0EzXY4IfgcBBIgsPX5y/7DMP23h4fm0njTp6sXVpU2BBOQDgwJAhkvsP75klMUk+yRiH8ljKFSx06nP7D4+hH8u4Rmm/GnEAAkm8C2jssdAd1/QCBzYK5V61UfhPAvVxY1ViVbrpAPCGSKQHVraTVCoiJcL5bYiwiZXVFY9+JIDKDZjkQJ''@;'; put 'put ''tgGBOApsbi79IsfmQYzJwLJ5pggFKFGLVnoa/yeOacBQIAACHwnc3TLnLMqymgO89/QwCsHq4z1B45qq0gZzJFDQbEeiBNuAQBwFNrXOuklKuYVgQq1hQ6b3HY2p51d62gJxTAOGAgEQ+EhgS9v8X3EZujEMIkyzkzBaWulpfGWkSNBsRyoF24FAnATu71h8p1d//8fh4bgwn1hd3HJlnIaHYUAA''@;'; put 'put ''BIYI1LbOvTjAvc0K1RzWr62vdVSadevNBbs2jgYKmu1otGBbEIixgDU9Y237vBe41C+1hjJ40M+w4+qVxfXPxnhoCA8CIBAhYL2CN8nbv13ngcFXfUxpvCk0x/Rb8/b1jgYMmu1otGBbEIixwK+avjYBqeTlIO87wxrq+IIDquezZqaJcUoQHgQyVmBzW9k1XOiP4o++0uHC0BViLx/Jqz6RaNBs''@;'; put 'put ''M/Y0gsKTUWBbx9zsgC4PCWSe81Gz7VeofTY8HJWMRwtySmeBmvqSHKShRonk4Ks+jNie7HK5r6m6YIc+2tqh2Y5WDLYHgRgKWLeRH37pXx7vCvz9W9YwQgouhbxt9cxmWOEnhu4QGgQiBWrb5pebMrQl/HshzE5G1a+tKKw/4ao+wwlCsx1OCD4HgTgKWM3214eueaBfP/r98LAY0Y0VnrrBJfbi''@;'; put 'put ''mA4MBQIZKVDTNvdLCtGe07n3zEEAiR7p0/H3RvqqD9xGzshTB4pOJYHa9vnrTREabK42ln3P0hlPLUulGiBXEEhVgSpZRZwtu5+kRL08XINpBo8qijanorDxz2OtC65sxyoH+4FAjAS2tJf9kAtzcK5Vm+Les3T6zgUxGg7CggAIDBGobp0zQ+f9e4euIa1grfLmwj0144GCZjsePdgXBGIgsKW1''@;'; put 'put ''tCwkAjsZ0QYmO7dR9+tL83deEIOhICQIgECEwNa2+Y8bMnTF4FWtNN600ey88oJdfePBgmY7Hj3YFwRiIFDTVHx2SAYOqSwrxwqvm/6eLM197rL8/Z0xGA5CggAIfCRgveqjc/9DjKg261fWqj5EkhsqixsfHi8SNNvxCsL+IBBlgbs65maTQH87o7bzrNBcGCGGldKKogNtUR4KwoEACHwksK65''@;'; put 'put ''yKUS1iwRujCMohHXrpsKnl4UDSRottFQhBggEGWBjS0znyCYDLz+M/CD6S/7Cmb9rApXiSgPBeFAAAQQQrXtC1bq3L8uPCc5kqifYm3hcs+e1mgAQbONhiLEAIEoC2xuLVnCpbgXYzzwb5QRewfqwsXli3aFojwUhAOBjBeobl1wbsD8oM3O3JMG/75FdHuFp+6aaOFAs42WJMQBgSgKbG4u+qKP''@;'; put 'put ''+5rsSvZkK6w1uYWKtenlnn2wzF4UnSEUCFTVl7AJGruHI+OHYQ2Th95XmFo6nld9ImWh2cK5BgJJKLB9+9X06Jm995si9L1weobQnwkY2lVVpQ3BJEwZUgKBlBTY3DY/3+D9DfSjh6KsIihWypcX7tsazYKg2UZTE2KBQBQFNjYXfUci+SAlimaFtRaRV6ijuKKw7sUoDgOhQCBjBapeO19VP9Se''@;'; put 'put ''tinueYN/1HL9DYUiT6WnrSuaMNBso6kJsUAgigK17fluIbJ2CWR6Pr66De3KsRlXLck75I/iUBAKBDJSoKZlzhxd+HYq1DawVq2QpoER+eHKoqaHog0CzTbaohAPBKIosKHF8wOC6H0YE/Lx1W3WdysK9z0exWEgFAhknMDdB8smhri+GyMysHa09aPRrGcdft8/Xx+Dr2qg2WbcKQYFp5JAdWuh''@;'; put 'put ''XQj2FCFkbjjvgNF7jFHnojXFLR2pVAvkCgLJJLC1fd5yQ4RqEDr+xL+C7ZILlL+i6LkXYpEnNNtYqEJMEIiiwKam4osCon+PQ8mZMhgWo3aT4itumdFwNIpDQSgQyAiBmsaZp/plb4ddmTAtXDAj9j91BYLWA4hmLBCg2cZCFWKCQJQF1rd45mOJngo/LGWF183AQQ2r11XMbP6/KA8H4UAgrQXu''@;'; put 'put ''aV94a4D7fhmewIJz4xgj6vyKooaXYlU4NNtYyUJcEIiywNrGSx7RmOu7Q8MSRNtMJL63ytPwlygPB+FAIC0FNreV5vv0nqftyvEJLKz5jxmx3bKicN+4VvUZDgua7XBC8DkIJImA9XSyN6Q/NvQ1BSs1r975bo596ne6Zsxsgekck+RgQRpJKVD77GWa33Vsl0qdpeEEdTPwukPFheUFB8e1qs9w''@;'; put 'put ''BUOzHU4IPgeBJBKwGm7IINspVT+xvq3Bgz5GbNswtt1R6dkd1fcDk6h8SAUExiVQ3Vw2ExGzMRxESiEQxj9Y6Wn8zbgCj2BnaLYjQIJNQCCZBO6pL8nqpj2/cbDsq4fmJaWUAaP3Lac2cXlFYd2uZMoZcgGBRAtUty7IFdy3i1A6I5wLI9qTGtO+syRvZ8zfW4dmm+gzAMYHgTEIWDPfKB/afkAw''@;'; put 'put ''uUNjzuyhIbgwdEbtBzAS/7GisP7gGMLDLiCQdgKbmmduwISsChcmhNmpMvvXywv2tcejWGi28VCGMUAgRgJ3tl56ntd37NFcx5kXEkzZ0GGsW8uUqI+rSPl5eVHd2zFKAcKCQNILbG6aeyZTWL0uAmcPJivRI306/l6sXvWJRIFmm/SnCSQIAsMLrG2avlDnvm0udfKZkVvrpreHYHU7o+4fw/e5''@;'; put 'put ''w1vCFuklYC3q0XmWfmuA9/wyXJlhBo+oilYWzVV9hlODZjucEHwOAikisKHFM8VndG91sOxvMKLZItMO6L3/59BylvS6P2isuuB1PUXKgjRBYFwCNW2zLwuZvt+r9PjXLdazDYxoq5YX7q0eV+BR7gzNdpRgsDkIJLvAhgOzPi9o6CGF2GZF5mr9h8arH3s5S8m9cWVxS1y+q0p2L8gvvQXuPrjo''@;'; put 'put ''KZ37Lg9XyYXxFiXywkpPWyCelUOzjac2jAUCcRIYWDqsy75MCHPNJ6Z5/Gh8U+hBjNAfNKb9tLyg4b04pQXDgEBcBWray64yTP8j7KO1arkwDULoj+Lxqk9kodBs43roYTAQiK9AdWthLhdoFZfGTSp1uiNHD5p9XRgpv2M05xeri/Z8EN/sYDQQiJ1AbePMyZyxOonEl8OjDMx/7HItrrpgR9y/''@;'; put 'put ''RoFmG7tjDZFBIGkE1rUVfMmGs1eHzN5rGdHskYm5tFP+0qcfrRUO7T9XX7THlzSJQyIgMAYBKRHe3Dpzo0B4BcZ4YHlKJGQfxsrCiqL9bWMIOe5doNmOmxACgEDqCGxsKiomlNVKKS4Kr5E7NHtKtH0cyx+f/rec/1m8eAdPncogUxD4WKC2Zc45CnM0BHj/6eHfEkR+t8JT/51EOUGzTZQ8jAsC''@;'; put 'put ''CRKw1sjlgnzfpU29zW90nhKZBkYkoFLnw6bsq15e0PhmgtKEYUFgzAK17fPvM0VoSTiAyUPvY0WZv7qg6X/HHHScO0KzHScg7A4CqSpwV8fcbKYbtxGEVp+wBon8hCq/IF1KTfmiXaFUrRPyziyB2ta5F/vNnjqVOXMGr2qxUhnrVX2GU4ZmO5wQfA4CaSxgfbe1sdVzAcOOm00R+HdKmBpZrlOd''@;'; put 'put ''8qpf/3CrRMFH4v26RBrTQ2kxEPhtfYmtz679FxfBfw6H58J8267Y8pfl7++MwZAjDgnNdsRUsCEIpLfAxpZZsxCSGwgmgxO1hyu21vxUaVajQObPVhTsa05vCaguVQW2tJddGzL9vw2/6mPVQST94YqiugcSXRM020QfARgfBJJIwHo/19U7ZT7FZK2QfPCViaFNF0uyExP0s4rCxlcxRjKJ0odU''@;'; put 'put ''MlhgY0fJJBISexHGXw0zKMT+lCF6r02GOzLQbDP45ITSQeBkAlbTdfa4fyyEXK1QmzNyOylFn8ocWzEyaxJ9ew6OIghYAjVtc2+U0vhVWIMiJUQoLr45f29HMghBs02GowA5gECSCmxuL5saNPu3qcT+zROlaHLjQ4bpzyuLm+5O0hIgrQwQqHmh7GzG2W5DBM8dbLZY++Op72ZfkyyvsEGzzYAT''@;'; put 'put ''EUoEgfEIWKumvDPt7wv8oa7Nbvu0L5zgKpcr1NHKublmhWd/O9xaHo827DtagSpZRRzNu/7IqO1b4X2tVX0UwuZVFre8Ntp4sdoemm2sZCEuCKSZQFXHpQ5H0HZ50OzelKVOPi2yPFOE/Bipj1HCflLpqftHmpUP5SSpwOaWsukh4W1QqM1hpWjNf6xgddWKovraZEoZmm0yHQ3IBQRSQKCmviRH''@;'; put 'put ''Z97lXPJyG3PnRqasm4EjCrNVG6r6wK15+3pToCRIMUUFql67Wp3U3/+oLgJXhUsImt7/zeauoptKG7zJVBY022Q6GpALCKSQQHVr4WlevX+rnbkXUaJokan79e43XbapK7pdOfsSMfF7ClFCqmMUqGkrvVJK8cfw7tYrakjKG1YVtzw8xpAx2w2abcxoITAIZIbAXQcKPZSSaoLp9MFJ34eUzoi9''@;'; put 'put ''wRT6morCuhfg+9zMOCfiUWV164JcJAP7h77qw7D6uCm9302GV30iDaDZxuOsgDFAIM0FqupLmFPVvxYw+u7OUicOTv4eLptL01CIfadEbGVF4XPvpDkHlBcHgdrWuStMZNQMXtUK3s2wtmBF0f4X4jD8qIeAZjtqMtgBBEDgZAK17fnugIErJRKVKrW7Irfj3PjQruTcpwteU+nZ3QWSIDAWgS3t''@;'; put 'put ''877QFzxS5xzyh521qs+09yb9a7K86gNXtmM5srAPCIDAqAQ2HZh1hk92VmvUeZlC7Z+aFCNg9r3t0iYuDxiBxjXFLf2jCg4bZ7zA5tay+wQyh67qcxQryoJEruoz3EGBK9vhhOBzEACBMQusb/GcY4rQvRpxlJ1o/VxfqPNVhzK1/IzDuY3JekUy5uJhx5gIVLfOmaHzvj0qdWZbA0gpBCO21csL''@;'; put 'put ''91bHZMAoBYVmGyVICAMCIHBygXWNhd8ypO9eO8uZijH+xH93TBEKEET/QAX5Se/MsvercJUASxA4kYC1StXaxot32xT3vPDnhjD+n2qo+RWlDT3JrAbNNpmPDuQGAmkksK65yCWlvhwhdItKHZ/6PtdqugiRR20se2V5wa6+NCodSomSQO3BsplBw7+bEdVuheTCCGGEv7+quOXRKA0RszDQbGNG''@;'; put 'put ''C4FBAAROJHBX8/QLODfW2Zh7UeRVrpRSOtXJL+umd3VXMNRQVdpggiIIWAK17Ze5De6rxxhfEhZhxPbkKX93X5UKX0FAs4XzGARAIO4C1u3ADS1FxQih9YywgsgErCsWhdrrJZK3VRTWvRj3BGHApBOoaS27SUi9Nvzdv+SylxJlXrK+6hMJCM026U4pSAgEMkfAmm/ZFqT/kqVMWq1z3zmRlQvB''@;'; put 'put ''ezTmepibwXtXFNe/kTkyUOlQAWv1qb7g0eez1Elnhn9PMP3vFYV1304VKWi2qXKkIE8QSGOBDS/Pd6L+wBohQxUKtWdFlmpy/RgjyjpGnQ/A97lpfCKcoDTrLkjtwbkruTA2hD82TP9hhdkXVnoaX0kVDWi2qXKkIE8QyACBtU3Tz7Yz90qDB26gRFEjS87WTvlLd+hozcrCAw/A1I8ZcEIMLAo/''@;'; put 'put ''5xK/0b3bztyTwhUzzJaXF+5PqlV9hjsa0GyHE4LPQQAE4ipQJRFxNhdMx4TVEkxnRA4upeCU2Oq4aa5eObP+5bgmB4PFVaCqvsRmo96nVeYsCw8sBP8rsrEZq/IaPoxrMuMcDJrtOAFhdxAAgdgIDKyfG2DftSu5qw3hPzdyFOv7XIU4fi2wfk9FYQPMtxybw5DQqFta55UFeO8Tn5j6E9MbKwvr''@;'; put 'put ''7ktoYmMYHJrtGNBgFxAAgfgJHF8/138Tl0blidbPtb7PtTFnLTJC28pnNR2LX2YwUiwF7j5YNtFvBJ5mRBl8Wl2lzp1Ov3/x9aUNwViOHYvY0GxjoQoxQQAEoi5Q0zjz1BAO3E2wsogR1RY5QEDvPqxR11a7qdydbAuHRx0jAwJWt5QuFUjfTDBTrHIxwj6KtDnlnt3Pp2L50GxT8ahBziCQwQJ3''@;'; put 'put ''NE4vCxgfbM6xnfklggmNpFCw41UuzdtJD3uqfNGuUAZTpWzp1lUtF6iJS/NL4SIYsf+pK7/gylSdzhOabcqejpA4CGSugPUQla0p/3JTBu5zKBNOiZSQUgpT6B2a4vzBioL9/5u5UqlXufWqz9bnF67STe+dBFM2UIGUfZTSOcsL6g+lXkXHM4Zmm6pHDvIGARBAd3Vcmh3o7d+sKa5v2ljWhEgS''@;'; put 'put ''U4T8EuGn7dj+k/KiureBLPkFNjXPLjVlcKdCbQNLM3JhGip13Jrsq/oMJwvNdjgh+BwEQCDpBTa350/1Br13KTRrsUJtjsiEDR706dz/ikPN+WmW6m9bknfIn/RFZWCCtc9epuEJ/PeGDF0RLt9a1UchrsJKz+6uVCaBZpvKRw9yBwEQ+ITAna2XnodNtAYhfIXGjq93OvTHWuhAIvEGRuheVdof''@;'; put 'put ''6zSMD2Cxg+Q5iba2LSwJ8J5nGNEG/mDiwtQp1Zan4qs+karQbJPnPINMQAAEoiSwscVzltforrZT98ITXelaw1hXuypxPE0xXecKmX9OxddJosSVFGFqOhacinT9OYnEheGENJr1rN9mLF590R5fUiQ5jiSg2Y4DD3YFARBIbgFr+kck5BpMyHXqCeZcDmdPEH1bYvSIoOw3ldP3vAdTQcb/uFa3''@;'; put 'put ''lW5BUpSHR7ZW9dG0rG8sm/FsY/yzif6I0GyjbwoRQQAEkkjAerp17fMzclFQ/6lE6Lt2JXtwjt3INK2l/UwResfO3A8yibf7ZKhrTXFLfxKV85mpbOu4VEFogsPgklGT0n5FJ0qQY8NGpSqoNBnnPOgOrSl+Kqlqqmlb+DkbVVsCZu+0cIGMKDtQl/Iv6fL6FjTbVPlXBHmCAAiMW6Cm/qs5QUYW''@;'; put 'put ''S4GWKcx+Hv1owoQTBbZuMzOiee1swh6d+/YRotQhhPoSueqQtToS9WGNEFNBBtaoSs5lRPsCRuSrNuY+3eDGNJ17J+tmX5YuQkQiMfjfeOvr6ix1IpcSfTjBfvobhgh1h8y+twSnj9k4f+/7CWzAW9rm3cul/qPwcRCCd2GpzEmnua+h2Y77ny8EAAEQSDUB6wqwL+T6Ijd9twtszj7RNJCRNenc''@;'; put 'put ''3ysl8mVrU17RpdGgUdtugxvHOBPcFpKcaNkhtd8Zur70oVFPJfjb+n+3CaVLkURTuNqnmcLGpGEQQlm2RMY/SYRnEMIulFKc1hN8b6r1/inGmFKsapQo2nj8rT8qnGruMYU46rjQd0rM2xl5v3NJ3iFjPHFHum/twdKL/KH+BpU5c6x9pBRCpVlrluXv2pROt/Oh2Y70jIDtQAAE0lLAem0oYPCv''@;'; put 'put ''ZSmTvu03ugsUavvUeronK1zngT400Bwcerbt9KMqdbzNkfG+Yfr/RiR52RB6jySoH3MhqEKkkIIhRBWExCSKqWYI/iWHkjNBIvk5hm2nBY3eM3pC/3CZIjgwmQNGhI4mn2gcoJDp7861n9FkysCvHb7A3lg+OFZVX8Im2tTtQ1/14cJ8i9vsebfm7euNRj3JEgOabbIcCcgDBEAg4QLr22d9AZv8''@;'; put 'put ''KkbUqwwRPJ9gqhBMPzUlZMITPUkC1lWhRFJYyxBKJCUa+P9yYGuMMbb+9/gUl4RghMnx3534R0huutUp9Qb3387YsYOxuNKtaS+7yjSDj1LCBtYutr4zZ0hdVlHc8OtkNR5rXtBsxyoH+4EACKStgDUdJGooUR1KYI6N5SySUi7SuXfaeG/ZRgvMakoKcXQRjI5QqrXrPHCYmwGvIQIfcsTfZcT9''@;'; put 'put ''jkqFty+k9Q0dU3X4s4lunG5yfiYjyufsWm5xQO8rUqnttJPlZjVujblekdy4Mytk7IzWla61Vu0EGz3EpXl+eGyNZj2zdMYzl6fT7eNwbdBso3X2QxwQAIG0FahuLbRjk+UEcahAY7ZLNOK+pD/0/vkCmW6F2LMoUQauzKL1Y32Pago9YGMuL6XqEYbYC0He9xZC6GVpsne5U+2agLqNI/azzaoL''@;'; put 'put ''duhjHdd6UrumrdCGOT3VIPhrutFf7lCzP7V2sBXfutKVUh60kewbb/Y8+8pYxwzvt6Vt3o9MEfrV4NW1RP0atS+6qeC55vHGTsb9odkm41GBnEAABJJeYFvHpY5OTu1KCJ/GEf+8JORUjdpzGVJPVZnrLILIWbrpzzFkUDOFQax7uAgjoRG7oSouv5DysJDme7rpPyIx7xZcD5hC9yLMj1JC/mow''@;'; put 'put ''ckTpyQn6VD0Ur1muqjouddh86ldVpvxbkPdfdaIHx3Qe6Lez7EelKdeumLnv72M5UJuen3+GItB+U4S+EN7fetWnK2BeF69ax5L3ePaBZjsePdgXBEAABE4isH371fRvX+y1aQFKeSBANGbikMmkrhhcIdPMSs+OQDLjbW4qOjMgA9WUqJeFp08cmm/Q9Ha5tMm/lBI/OJrXoSyXI2f0buUydGM4''@;'; put 'put ''nmEGj6jUvqiiqOGlZDYZT27QbMejB/uCAAiAQJoLbGjxfJkRezUXoTknelgMY/Yywfhn3QHzmZFclVqv+vhC/QeGzl3NkFJR7tm3OZ0podmm89GF2kAABEAgSgJ3NU9fnKNN+7HP6L4Io08/xexUpjweNHo3Lffsaf2sIbe0z3+Mi9A/h7cRUrzjEO5Lls58pjtKqSZlGGi2SXlYICkQAAEQSD6B''@;'; put 'put ''qtfOV909U2/gUv8FJSw3MsOBp6Spcxsj4vZl+fs7Iz+vaSm7ypC+h4felsaILKnw1N+ffNVGNyNottH1hGggAAIgkPYCNU3FZ+vIvINgcuWJnsRmxPYGFuh2A/U9UelpG/hu+q6OudlKSK/HGF8cBlKw9kSnO/va8TxRnSrY0GxT5UhBniAAAiCQZALVzUV5PaEPfuXSJl8U2XSPvyok2jWSXY4I''@;'; put 'put ''elsI/dumDN1tTTU5UIZEfUgST2Vx/WtJVlZM0oFmGxNWCAoCIAACmSOwvrloZsjsfcCpTvxiZNVCCm5Xcv6uYtXdb3w4Mfw5Repjyz17r84UJWi2mXKkoU4QAAEQiKGA9X2u2mnfyIhyAyOa/bOGEoJ3U0qKKgob/xzDlJIqNDTbpDockAwIgAAIpK6ANSPVXe0FZxFTriWYXnGy6S0Voq64uWDv''@;'; put 'put ''ltStdPSZQ7MdvRnsAQIgAAIg8BkC1sQV7007fJ7A5E6CyTeGbqrz4OvI7vKk26o+w50Q0GyHE4LPQQAEQAAExiRgLaGXpfAbhDRvZ1SdTJGiE8wW3Fz4XMOYAqbwTtBsU/jgQeogAAIgkAoCtY0zJyNVu19KkhXktivXFD/Vnwp5RzNHaLbR1IRYIAACIAACIHACAWi2cFqAAAiAAAiAQIwFoNnG''@;'; put 'put ''GBjCgwAIgAAIgAA0WzgHQAAEQAAEQCDGAtBsYwwM4UEABEAABEAAmi2cAyAAAiAAAiAQYwFotjEGhvAgAAIgAAIg8P8BcbF+IvaVe9EAAAAASUVORK5CYII='';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=select-table-png; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''iVBORw0KGgoAAAANSUhEUgAAAdsAAAGTCAYAAABgcbg1AAAAAXNSR0IArs4c6QAAIABJREFUeF7sXQecVNXVv+WVmdm+gKBgRY3GLxqlLNsQY4nGoFGDGhOjsVNEqiXFoKJIEdTYiCWxRlEESyAWBNkCKGpMYo0FQRTp26a89+69X+7Mzu7b2ZmdXnb2zC+R3Zl7zzn3f+7b/9xyzsEIXoAAIAAI''@;'; put 'put ''AAKAACCQVgRwWqWDcEAAEAAEAAFAABBA3ch2ycYrSpqdjKrEgYvaAbK4JuSPJvP6/3Ux3f9vKl4mc3eTZZTELr+ItfVoSwstiOsLhdbk67G9Sl1xyQvg1n2ModjZ5bppwAaVOvz/KsToprMnn4Tqi4ZnpDEnMtZY50QsmMQqK1y74Jij+dPeN3S8oX4I+iKIfbBvLM9FT+ON5p9oczwWnOJ9Duwy''@;'; put 'put ''48EwFltiwTw4/+1z30van4e2wPPgpSZWiO7/mfk8hGjU+8uj798Trw3QHhDIBAIdf8SXNI5zGq7yvzrVku8TTDVKVAUjQjHCGOMAKQuBhP+39pdAnWSNEepGekKIsEQopKT2V6BfZ7PgL+3v2PrHy++ddgYNxn57O3nLbn9ksANy4mVY+xgjjdWPKeq0E0mspS4/3lii0q7b3kb2acdPCG63O4Bd''@;'; put 'put ''AKcgrl3ADTPILoC09+wJFzkf4p2Ydrvi7Rtve2ybWz341P9R13FiTNpxD37WPu3lgNvHTBBCAcjlmKQfgvPePtcDHgg/90Nt6vrciK4PQ+dzFvwp3ocgMJs6n7Uu6mP1ZWzPSUB06PPck/+6zv1g/y7zyz9e+R/p1/Z574deyDe4fI+zgF6iMeH9zBJt55x71H2t8c4baA8IpBuBjgfxkbfO39+H''@;'; put 'put ''PJ95rL1aupWCfEAAEAAEUo1AodYfKaR4n0uO+8uOVMsGeYBAsgh0kO3ijecNFcL7kdvcqyYrFPoDAoAAIJBpBCTZEoP0u6zq2d2Z1g36AIFoCHSQ7QPvnXMYstiHbnOPEq0TfA4IAAKAQK4hIMnW8njLJ9T+Hc5tc805YE/nUeRD74w71OLmR0C2MCsAAUCgNyIgybaNsrKpxy7f2xvtB5vzG4GQ''@;'; put 'put ''bWTfx0C2+e1wGB0gkK8IANnmq2fzY1ydF6TePvsQA/FPgGzzw7EwCkCgryEAZNvXPN67xttBtg9uGHcwI+anPZEt46ZPIG4PN+kI7rFf2O8MeuiIVEggZKF3AZmgte34+4Mwgj93hPtQouo9yWXcMgViZrsT8hTj2EJoAlEncUUl2RoHfmyfw1KOdAcmWNHsoW7hfGFxn0eIQPhJ11e4EKmYxxJO''@;'; put 'put ''VbzjS3BKZr2b/ZnwuyXwH0ykXyhRI0ZLANlm3XdgQA8IdPzBuf+9nx2ELfTfnshWI/opFmL/kvKIYfBW3ddBvJrbhYVmyEBEpFIW01+9tiRcozGas+RixmhbECf5r0GcWPXKfzlWiY5VpBSVuoY8tcP9+bHhYBIyxhbT3zBFvGp5GZN4mIrV5Y++Thn29uALzd3pJ8OWrCNW/4WzK9axJ+H6HrtG''@;'; put 'put ''sz34ueHhGKGCgKz2f4KChWEShVFKNO2nnBv3RiJcl1q6wmDGTB9r2okNjRPdx32MCoelCK9idTwD0g9B2T35I3Rgdv/YP7P7Kls4pkJvpLlify6kHtlOqBpRGR4qBK+PpFuSbekXRDn33GfDfPlJhcUgAxBIHAHbme24A4QwP+95G7loyLSql7cmrg56xorAkg/GaYgPeuXrln+NCU+2nCMujpxe''@;'; put 'put ''W/9prDKhXXwILGo4sZIh31qCadgb+i6t/MGrhi+7Ij6p0DpRBO7ZcGI/g1k7gWwTRRD6ZROBDrK9960z96cYf9ET2apcG3x1zWvfZNPgvqJ78cYr1BKHvvKb5n+dGIlsGWKHX1vd+HlfwSTT47yjfswoga16gikNp7tA7f/IlSOWXpppu/qqPiDbvur5/Bh3XGSLEB0yreoNWNlmwPexkC3G1vem''@;'; put 'put ''Va37LAPm9EkVd647ocLiZkMksi3UBz1+xbBnft0nwcnCoBc2/rgcIe8uWNlmAXxQmTQCnRek1p89hFH+Zc/byEC2SSMeo4BYyJZwcdjU2vovYhQJzeJEAMg2TsDS3BzINs0Ag/i0ItB5Qapx3GCsmpuAbNOKd8zCJdkWadqKba3/PinSNjK38KEzj1/7ZcxCoWFcCATI1mogmITdRi5S933i8hFP''@;'; put 'put ''XxiXUGicMAJAtglDBx1zAIEOsn343TP2Mxn5Csg2B7yCEAKyzb4fgGyz7wO7BUC2ueUPsCY+BGy3kc/eVwi+Gcg2PgDT1RrINl3Ixi43Ktlqg568fPgzv4pdIrRMBgEg22TQg77ZRiAusoXbyJlzF5Bt5rCOpCkq2cI2ckadBGSbUbhBWYoRsN1GHjeIYnMLhP6kGOEExQHZJghcCrtFuyAFZ7Yp''@;'; put 'put ''BDsGUUC2MYAETXIWASDbHHVNLGRrEHPoDZXrN+XoEHq9WQsba0dyIRoh9Cc3XAlkmxt+ACsSQwDINjHc0t7LH/qj6Su/aY2c1ALINr1uWNBw/AiE2Dog2/TiHKt0INtYkYJ2uYiALc72jIGMkq9hGzk33BRLnC2QbXp9BWSbXnzjlQ5kGy9i0D6XEOiMs33/rH2wIbYC2eaGe4Bss++HhfVjhnNs''@;'; put 'put ''rY+0si3SBj52+fAlF2Xf0r5hAZBt3/Bzvo4SyDZHPQtkm33HANlm3wd2C4Bsc8sfYE18CADZxodXxloD2WYM6oiKgGyz7wMg29zyAViTOAJAtoljl9aeQLZphTcm4QvqaoYhguQ2ctgSe7CNHBOMKWsEK9uUQQmCsoAAkG0WQI9FJZBtLCiltw2QbXrxjVc6kG28iEH7XEKgg2wfeXfcAIOZ30C6''@;'; put 'put ''xtxwD5Bt9v0QC9ludYrLZx31rJF9a/PfAiDb/PdxPo8QyDZHvRsL2ULVn/Q6LxrZFmoDH/sGyDa9TrBJB7LNGNSgKA0IANmmAdRUiASyTQWKycmIRrbyzBZWtslhHE9vINt40IK2uYYAkG2ueaTdHiDb7Dtm0bra4xgXGyJdkIKVbWZ9BGSbWbxBW2oRALJNLZ4pkxZI16it+AaKx6cM03gFAdnG''@;'; put 'put ''i1h62wPZphdfkJ5eBGwl9sb2F4J+Cxek0gt4rNJjKUQAZ7axoplYu2hkW6QNeHSrE18BF6QSwzfeXkC28SIG7XMJgVCylbeR1cgG0iHTqt7YmksDyFdbgGyz71kg2+z7wG4BkG1u+QOsiQ8BINv48MpYa0m2xZr6929b/3NyOKVCcA4r2/S6A8g2vfjGK/2+upoyL6W7I/Ur1Pqj0i+Icu65z7J4''@;'; put 'put ''ZUN7QCDdCADZphvhBOXHQraEi8Om1tZ/kaAK6BYFASDb3JoisLLNLX+ANfEhAGQbH14Zaw1kmzGoIyqKRrZwGzmzPgKyzSzeoC21CADZphbPlEmTZFuoKS9/1/rBKZG2kWFlmzK4wwoCsk0vvvFKB7KNFzFon0sIANnmkjdstgDZZt8x0cgWbiNn1keSbE3WtEWluiucZjizzaw/QFt8CADZxodX''@;'; put 'put ''xlr7byPr9KVtLR/+GFa2GYO9i6JoZAvbyJn1y8LGynKT8S0qdQDZZhZ60JYCBIBsUwBiOkT4yValL21rA7JNB76xyIyWrhHINhYUU9emnWw3q9RRACvb1OEKkjKDAJBtZnCOW4sk2wKVvri97cNTYWUbN3wp6RCNbGEbOSUwxyxkTl1NGUGmXNkC2caMGjTMFQSAbHPFEyF2+M9sVfLCd20fnQZk''@;'; put 'put ''mx0nAdlmB/dIWmFlm1v+AGviQyA0N/JWyCAVH4Dpag1kmy5kY5cLZBs7VploCSvbTKAMOtKFAJBtupBNUm6AbPHy79o+/kmklS1kkEoS5CjdgWzTi2+80oFs40UM2ucSAkC2ueQNmy2zVo9RhpZ/74UdQLZZ8xCQbdagD6sYtpFzyx9gTXwIANnGh1fGWkuyPbTf4cu3t35yOqxsMwZ7F0VAttnB''@;'; put 'put ''PZJWINvc8gdYEx8CQLbx4ZWx1n6yLTts2Xb3pz8Fss0Y7EC22YE6Jq2wjRwTTNAoRxGA4vE56hgg2+w7Bla22feB3QJY2eaWP8Ca+BDoINv73z9rH2wIeRtZiSwC6tnGB2/irSXZHlJ22LKdsLJNHMQkewLZJglgirsD2aYYUBCXUQSAbDMKd+zK/Bekyg5/fof7k7GwjRw7bqlsCWSbSjSTlwVk''@;'; put 'put ''mzyGICF7CADZZg/7HjX7ybZ06NIdns/OALLNjpOAbLODeyStQLa55Q+wJj4EgGzjwytjrYFsMwZ1REXRyBZyI2fWR0C2mcUbtKUWgQ6yfXD9GQMZJV/DmW1qAU5UGpBtosilrl80si3SBj621Skun3XUs0bqtIIkWNnCHMhHBIBsc9SrsZCtQcyhN1Su35SjQ+j1ZkUj20J90OPfOPhlQLaZcTWs''@;'; put 'put ''bDODM2hJDwJAtunBNWmpQLZJQ5i0gKj1bIFsk8Y4HgEQZxsPWtA21xDoINt73xo3iGJzC2wj54aL/KE/5UOf29n22ZnhLBKCc1jZptdX0ci2SN33ia0udimsbNPrh6B0INvM4Axa0oMAkG16cE1aaiDO9pBnd7o//xmQbdJwJiQAyDYh2NLWCcg2bdCC4AwgAGSbAZATUSHJ9uDSQ5bs8nx+ViSy''@;'; put 'put ''FYgdMqO68atE5EOf6Ajc0Tj6WCH4WwTTsIleirRBT2518ktgZRsdy1S0ALJNBYogI1sIANlmC/koev1kW3LwM7u8X5wNZJsdJwHZZgf3SFqBbHPLH2BNfAgA2caHV8ZaS7I9qPTAv+32bPo5kG3GYO+iaF5D1Q8JIm/DyjY7+IdqDZCtsVmlzsJwFhVq/VHpF0Q599xnWW5YDFYAAp0IANnm6GyQ''@;'; put 'put ''ZHtgyYFP7fFuGgdkmx0nzV9fezRmfCPBihrOArgglVm/ANlmFm/QlloEOsh28caz9xWCb+7pNrLKtcFX17z2TWpNAGnhEAiQ7f5P7PFuPi8S2ZqcH3x9bcNmQDA9CMxvqPo/jPC7kcgW4mzTg3vP28iwss0s6qAtVQjERbZYc+w3dfgr36ZKOciJjIAk2/1Lhjze5N1yfiSyRRY+aPrxa7cAjulB''@;'; put 'put ''YGF99VEco/cirmy1AY9udeIr4IJUevAPlbpo9ZhSn+LerFFnEWwjZwZz0JI6BDrI9k/vnrGfyshXPa1sgWxTB3w0SbGsbC1qHHjdqA1fR5MFnyeGwIK1td8XlP+TRthGLlT7P3zFiKWXJSYdesWLQIBs2zZr1AVkGy940D7rCHSQ7cPvnrGfGYVsdQXvO3Hkmm1Zt7oPGBDLBSmMrQOmVa3b2gfg''@;'; put 'put ''yMoQo5Gtk5YvHl+x7KqsGNcHlQLZ9kGn59GQO6v+NI4bjFVzU08rWyDbzHl+8cYrVAe1nukpzhbINr3+8JMt4f+kJPwFKZ0W3TOx4uWr02sFSA8iIC9IYWR81dM2sukkRROPerYVUAMEcg2BuMgWITpkWtUbsJLKgBeXfDBO85qlS3e6P/1pOHWQrjH9Tmgn2/coUbRw2oBs0+8Du4ZYbiO3UVY2''@;'; put 'put ''9djlezNrGWgDBKIjYCtEcPYQRvmXPa9sC46dOHLFP6OLhRbJIrB44y/6l+oDlmxtef+E8GQrOBbqmGk1q+qS1QX9wyOwaMOPfsQs3z8i3kbWBj7WpO6dMPOYV9sAw/QjcMdbp+wvTPcXkeKeZZwtkG36/QAaEkMgLrLdt+ioeoLoToQRoVjjAnFLqsWIYowQQVj+gxFGol0u6W6Vv03Xl79T4GXr''@;'; put 'put ''3963vX1Qkuho2ylHdhYo8LtNFiLtfYOfoYCB/pdApJsdgf7C1sYvV4SDFiPuf18g/2D9P3PBROB3/z+c+xswgREWDAkufw7IE0LI/wsmm8i+8j2pnbQLxEIw4bWafrrLvckRybXl+gH/UTXnJyp2StAxwYpAwmYvlqBggiUSApF2QDDCfn/J//n/L/9DMMWys+wSwJi0YxEQYrdB4tn+RrvdkSef''@;'; put 'put ''HGg7PAGQbK8gtp3zpdu8CHg07EsgbvNNpz8k9n4/Ci4hbveHH2/5s+DyJb+pMCE448iyuLDkz1z6hSP5m8kopophef5vr2/LsZFGV6wP2uNUyl4XmPsoUUm7ukBCBakOYyx4YADEP4ElthjLH7EgBBGB/S9E/S7wf+b/3f84BeazdF7AT4Hf2ueo9GH3Z6LjHX/D0Gci+DwE5m1QVvfnMej/yF7t''@;'; put 'put ''/CSIe/BZCPrajr8EQ45Ytg08E50+CkriyD9RuPSDQEz+y2RDizHGkeGzuEm5YEV7PJvC5gqXcoBsY/EYtMkWArakFmfuTzH+oueqP9kyE/QCAoAAINAzAkC2MENyGQEg21z2DtgGCAACMSMAZBszVNAwCwjYklqMO0AI83NY2WbBC6ASEAAEkkYAyDZpCEFAGhEAsk0juCAaEAAEMocAkG3msAZN''@;'; put 'put ''8SMAZBs/ZtADEAAEchABINscdAqY1IEAkC1MBkAAEMgLBIBs88KNeTuIuMiWCybDGsKGwkRAKErbeETlrQ9sAwtGLwXeihRPGOwgwyMECkQYwSsVCHQJM8IYExoIu4n84sIyAyE/tmYhoVLhevcoNBVDyTsZgWejp2cCyDbvnJ5XA4rrNjJB6kU+3Po2FVhgRjkjnDFOBCUcMyywxhixsIqDv4ci''@;'; put 'put ''RU015G+MgSyiYIVbCbMuUwNxpdQMxPYGfw/qDr4faktou2helWMO10aOP/i+IsyOnxkPtGdq5+d+OwUWEqugPPlzwH6OiUooshRCFItyoZaVOYY83OTbemg4vfIP/P/+8MzmzFwqKPNhxjgjCsOW1UG+FhGYklDMw480aEcnbjxpPqAkGG8dkBrExD9eIrD8PbSN3To5l6L5JdLndl9EkxG0K2iL''@;'; put 'put ''oJRgRnVC1fM4YtdHIlyK9dWM+f5oMW8gX7hCOTM4U7WAz02DY+RASDE4tjQi5L/yfemXAAaB8dmxl/Mgmr3dnqsQnOPtn6n2dv+HezaCz4HdHvn8yGdFCKxoRDlOIPRUJHuheHymPAl6EkEgLrKFeraJQJxYH1mI4ODSoc/t8nx2Zniy5VxgetSMqjUfJ6YBekVDYNG62uMYF+sJpmGLxytEnz95''@;'; put 'put ''1KvXRpMDn6cGgXs2nNjPYNZOINvU4AlSMotAB9k+uD56ukYg28w5J0C2By/Z5fnirEhkyxA7/Nrqxs8zZ1Xf0nRHXc0xgoi3I6VrVIlzwdWj/jGzb6GSvdEubKwsNxnfrFJHQTgrYGWbPd+A5ugIdJDt/TFU/QGyjQ5oqlq0r2yX7vJ8dkYksuUWPnTm8Wu/TJVOkNMVgYWNo3/ABXsnEtnqSsFd''@;'; put 'put ''E0eumAK4ZQaBQCECcwuQbWbwBi2pRaCDbNuLx8sSe2G3zKRaINvUgt+TNEm2Q8sOf36H+5OxkcjWIObQGyrXb8qcVX1LUzSy1WjxnyZVvDS5b6GSvdEC2WYPe9CcPAK228hn7ysE/wrINnlQUyFBku0hZYct66nEnkDskBnVjV+lQh/I6I7A/PW1R2PGN0Zc2UI924xOm1hK7JV+QZRzz302UAwC''@;'; put 'put ''XoBADiEAZJtDzrCbIsn20H6HL9/e+snpkVa2QLbpdV7gzBZtjBRuAvVs04t/qHQg28ziDdpSiwCQbWrxTJk0SbaHlR/x4ndtH50WiWxhGzllcIcVBGSbXnzjlQ5kGy9i0D6XEAgl2809FSKAM9vMuW7xxivUIpW+uK3tw1OBbDOHu13TvIaqHxJE3o60stWUknsnjXxxUnas63ta4cy27/k8n0YM''@;'; put 'put ''ZJuj3pRkW6gpL3/X+sEpQLbZcdIdjaOPFYK/FYlsHUrJvROAbDPmHCDbjEENitKAAJBtGkBNhUhJtsWa+vdvW/9zMpBtKhCNX0Y0snUqxfeNH/nSxPglQ49EEACyTQQ16JMrCNgySI0bRLG5BbaRc8M1/m1kTVuxrfXfJwHZZscn0cjWoZTcP2HkixOyY13f0wpk2/d8nk8jBrLNUW8C2WbfMVHJ''@;'; put 'put ''Vi19YMKIF8Zn39K+YQGQbd/wc76OEsg2Rz0rybbEoa/8pvlfJ8LKNjtOas+NvCHimS2QbUYdA2SbUbhBWYoRALJNMaCpEgdkmyokE5cTjWydtHTx+IoXrkpcA/SMBwHIjRwPWtA21xCIi2wRokOmVb2xNdcGkY/2LPlgnMbFoBWwss2ed6OTbfni8RXLgGwz5CIg2wwBDWrSggCQbVpgTV5oLGQL''@;'; put 'put ''hQiSx7knCdHI1qWU/fmqkcuvTK8VID2IAJAtzIXejACQbY56z7+NrGkrvunhNjKQbXqdF5VstfIHrxq+7Ir0WgHSgWxhDuQDAkC2OerFWG4jA9mm13nRbiO7gGzT64AQ6bCyzSjcoCzFCNiKx58xkFHydU9xtnBmm2L0exAXS1ILINv0+iMa2TqV8ofGj1x2eXqtAOmwsoU5kA8IANnmqBeBbLPv''@;'; put 'put ''GCDb7PvAbgGsbHPLH2BNfAgA2caHV8ZaB8hWefnbHnIjw8o2ve4IkC3bEKmerUvt9/BVI56/LL1WgHRY2cIcyAcEgGxz1Iv+M1udvrSt5cMfhzNRCM6BbNPrvEDVH/xWJLJ1Kv0eGj/yedhGTq8bOqTDyjZDQIOatCAAZJsWWJMX2l5i76VtbUC2yaOZmIRAPVvxNqxsE8Mv1b2AbFONKMjLJAJA''@;'; put 'put ''tplEOw5dkmwLVPri9h7q2cLKNg5AE2g6f33t0ZjxjUC2CYCXhi5AtmkAFURmDIFQspVVf9TI2iGDVKY8469nq5IXvmv76DTYRs4U6l31LGwc/QMu2DuRt5HhNnImPQNkm0m0QVeqEQCyTTWiKZInydal4uU72j7+CZBtikCNU8zC+uqjOEbvAdnGCVyamgPZpglYEJsRBIBsMwJz/Er828gaWra9''@;'; put 'put ''9ZPTgWzjxy8VPW6vrz6KYvQexUrY3R6Is00FyrHLALKNHStomXsIANnmnk/8FvnJVhHPb3d/+lMg2+w4acHa2u8Lyv8JZJsd/EO1Atnmhh/AisQQALJNDLe095q1eowytOzw53e4PxkLZJt2uMMqmLtu1JGE0fcpCb+ydSnlD141EnIjZ8o7QLaZQhr0pAMBINt0oJoCmX6yLR26dIfnszOAbFMA''@;'; put 'put ''aAIigGwTAC2NXYBs0wguiE47AkC2aYc4MQVAtonhlspeCxorjxCcyJWtFk4ulNhLJdrRZQXIln2lUmdhuNaFWn9U+gVRzj33WRZdGrQABDKLAJBtZvGOWZsk20PKhz63s+2zM2FlGzNsKW04t776ewShfwHZphTWhIUB2SYMHXTMAQSAbHPACeFM8JNt2dBnd7o/+xmQbXacdEddzeEc839TooZd''@;'; put 'put ''2Tpp+eLxFcuuyo51fU/rnLqaMoKMzbCy7Xu+z4cRA9nmqBf9ZFt6yLM7PZ9HJFuDmENvqFy/KUeH0OvNmvdmxWGY0v9EIluHWvrAhBEvjO/1A+0lAwCy7SWOAjPDIgBkm6MTI3Bme8iSHZ7Pz4q0sgWyTa/z5jVUDcUCfUCJqofTBGSbXvxDpQPZZhZv0JZaBIBsU4tnyqRJsj249JAlu4BsU4Zp''@;'; put 'put ''vILmvznyYESVj4Bs40UuPe2BbNODK0jNDAJAtpnBOW4tAbI9eMkuzxewso0bvdR0mLNu1EEKwx9TosHKNjWQJiUFyDYp+KBzlhEAss2yAyKp95NtycHP7PJ+cTZsI2fHSQsaqg7kQnysEM0RdhtZKbl/wsgXJ2THur6nFci27/k8n0YMZJuj3gSyzb5j5q6uGIJV8t8eyPbe/pv0ayCuMzO+kmSL''@;'; put 'put ''kfGVRp1F4TRCnG1m/ABaEkMAyDYx3NLeC7aR0w5xh4L5759SoDdRl6X4NKEoBFsWVzkVFjW/bzHj5UhntrpScNfEkSumZM7Svq2pnWw3a5DUom9PhF46eiDbHHUckG36HDNLzCIDGxv7W0T7vqpovyCIVDf5vh3MhRVS3QcjhWgFGHc8Jl2MUnHBoqsrV0xLn6Ug2Y4AkC3Mh96MAJBtjnovFrIV''@;'; put 'put ''iB0yo7rxqxwdQs6ZJVewDq9yJEF4SpN326kq1QsjrVojGS+EQEHydaglD/T/Up8E28iZcTVsI2cGZ9CSHgQ6yPb+98/aBxvia7e5J2ztzoB6OmRa1Rtb02MKSLUjAGSbuvmwZMk4um1Ia42F2uZa3DhaIbozWemSdAv1gV9YyHPRxOEv1ycrD/pHRwDINjpG0CJ3EQCyzVHfANmmxjF3rj9xoEDo''@;'; put 'put ''JsNs/ZVKHQXhpDJuGVyYBhfMFIhzhBDGiGCMqUKxqkfKjSxlCcG/cinlV5q7jDWTf7LSlxqrQUo4BIBsYV70ZgTiIluVa4Ovrnntm9484N5ieyy3kWEbuWdv3t140rEM878IwY4JbSkJ1sfa9jiUwic8vj1rsa69r7jJXspNS7ZlRFWwohRZ1HdMobLPGCZ8Yy1hHBjuZjLjps+plrwqkHXzwK9K''@;'; put 'put ''34Nt5fQ8ZUC26cEVpGYGASDbzOAct5ZAIYKDnt7p/vKccJ2F4BzINjKsi9adeJLg1sMIowPsrSQxqsS5xme1PkQ8npUzf/yvtlids7BxzKEm89wskBgb7kasxX0ehRY8qDIyd1d19bZZeJZcJcMrRQgA2aYISBCTFQSAbLMCe3SlkmwPKjvo6d09kK3J+cHX1zZsji6tb7W4a/3JP6FIeczg7n7B''@;'; put 'put ''kQshuMHcnyjYcd3M2vqXkkFkwcYx/bHJrzTNthmaUlgaKstkPrdCtD9h7Jw3reqV3cnogr6dCADZwmzozQjERbZwQSpzrvaTbemBf9vt2fRzWNnGjvuC9cefbBqtz+hKYVkn0cpzWDzfYZDZE09Y0xq7tJ5bzq2v3k8j+u1MGBcQTGloa8Nq+8ipFF+2p/KN9bMwglVuksAD2SYJIHTPKgJAtlmF''@;'; put 'put ''P7LywAWpA5/a5dk0Dsg2NifdWXfSASbyrKFUOTjYw+I+N+Pm7TeMfueW2KTE32pufcUJROBFhGhH45CgXC4sU8H6S4yJm6fXrn4/funQI4gAkC3Mhd6MAJBtjnovcEHqwKd2eYFsY3HRotVjSlWXc4XB3JXB9gZra1Kx64LpNWtXxCIjmTYy/HZBfc3PKFXvQIh3kH1QpiRdgtSlCKM/TKsqLbZ5''@;'; put 'put ''AAAgAElEQVRa81kyuvpqXyDbvur5/Bh3XGQLt5Ez53Qg2/iwvqvxpMWWMC63ryyFYNOnV9cvjE9Scq3vXl9R7DHFbwUS4zXqKg6VhhHdoSqOuw2L3QfnufFhDWQbH17QOrcQiCuDFJBt5pwHZ7axY333+tOGGFbre4SQ/sFeBCkrzQI6buYxr8Z82zh2jdFb3rZhZD9ikt9hIa5UqcNl7yGQvK7F''@;'; put 'put ''vlKwfptZqDyVLRujjyK3WgTI1veVRl1QiCC3XAPWxIBAXGQLF6RiQDRFTRZvvEJ1EOPpXd4vI5bY4xY+dObxa79MkcpeK+bet8Yu8FnN04MD8FltTQrVTptZ3bgum4OSW8sL62sO8/K2R5xqcXWoLVwwC2H0jiL0q6+pWrURYySyaW+u617YWFluMGsTkG2uewrsC4dAXGSrENf+k0et/BqgTD8C''@;'; put 'put ''kmyd1Fqy0/P5z8Jpk3G2DLHDr61u/Dz91uSuhvsbTtmHaIXvtJm7hgStFEjc01K59ppcuQF894rTdKOkdSzByrxw57kyPpdifSm3xI3w5SnyXJNkazL2lQpVf3L3gQTLIiLQQbb3vjVuEMXm5p5yI2u04HuTKlZ8CnimH4G/rB7jUMuPXLa97cNTI5Etwnj49Kq176XfmtzVcO+Gn17rtZpuw5j4''@;'; put 'put ''Q284t7bpyDUsFzOdSbIQnNxkCvOicDVZiVB2CiJu1i3jiQm19XtyF/XsWCbjm5HP+pZgqoSzIN31bOVOxf31p5eqql7AEHYylfvtoCaxGLG82GG1jv/B3/fCDkV25keua42LbIv0fW8yedsGwRBjwuBCcMEx98vAmGKCBOaYYsyE/z2CSYd8jgPv2YMRWTs63QIUQ1CTMv3yBOvYZpPvhf4eCra0''@;'; put 'put ''Jx0O4Ah32+4T7bYREfiMCy4E7WzXxdYw/YPYBfs7qKvIQUsW7fR+vn94shXCoRT92RLGiwJhU7aRNhBBbBgFfEMxIXYZnAfw9L8oQkF/hfrMP44wfgu1J+ifoI9C/SX9HBxXt75+vIIzAaEgZhKvAM4MCYGEBJTL8bVjyhnFuu4qdpLia5t8X1cF5QqE751etWZSOvyeKplz6iqGOajraoH4ReFk''@;'; put 'put ''Fqj9PjKYd7XAbIVg5h7DP7dMRLDAghHCMcIEUyw4IfK9gJ86fSoZQH4elB18RoO/y2fVrjfcc+KfI1HmRk94yPkf6XP7c2Gfe/45jLAgRPqey1oPQm7fCMFMpCJEGTlYYPZYJLnpIFtJsA+v+3GZ0It/SDC9wKmU/rDJ+93BbdYOnTOG5RQlSOMurcwo1vfZLBD/3GLeNwXz/H2X1vodnMen6qnp''@;'; put 'put ''/XI6HrrFG8/eVyZV77nqT+8fcG8ZgUyKTzDtoQJTbxlJcnbK9IqBP8L+v92hf8AFxaozGNpqccOLED/n2poNaQ/1SW5Ugd5z6ytOxogsoFj9QWh8rvzcYqaJMJdfpOzkiG2/Br7odvkYoXjLBqZiLKmU0ZPPw+WmDupOJdkubBzn1LDnSIrJVYiQMa3Gd0Mo0WKuFmUwT7OmuN5xKcVz3KbvHbh5''@;'; put 'put ''nsoZ0jtlAdn2Tr+B1WEQ0GnhB8jdNiqVWaLSDfSsjcNcDrf6S0u4b3GpZQPD6bPX0E23Pb1ZfirIdvHGsS6DmbWaUjhhj3vzCeG2++PFyG3u3Vag9rvD4L7F19U0tMTbH9rnBwIdZPund8/YT2VkE6xs88OxfXEUClGfmTzq9fN749gXrB7WnynKHwTiF4eLzwXCje7VZMn2rvWnDEMCzfaxluOV''@;'; put 'put ''CKtYIYSwhOHh3PT5t7f9WwtYIVhVKVZ0SlStB0vXaFS5clLFKrj3Et2dedcilGzlNnLYywd5N3IYUK9HoDsB4SnTqtbc1ZsHtqiu5hC3aH3UQYsqg5e+7OMB0o3s3UTJVsa093PqZyKE7zC558BQDXJbW2CxmSCl3sfa1mJufc4x30QJbvVZVLiQ6vAq7oHYoocV6v0rTOY5lxJlcDj/eazmnU61''@;'; put 'put ''ZMaQLQOegFKMvflJjd92INv4MYMeOYJAKPFwbp0zo6bh+RwxLykz5jVUnUMEuRljfAQOueAmBQPpdoc3EbKVRFugmvMF4leGrmZN5nUrWFtrIu9fMNJWxroFLI8GnF71VI26rjKstiqVOgrs1spQL00p+QPnzfdNq1rnSWqiQOdegwCQba9xFRgaikA3smVW7Yzahvp8QWphY6XTYugSk3tnOdXi''@;'; put 'put ''juxYsNIN7+F4yXbJknF02wHNV/uslrn27V/GLUMg9IZA1k3X1WxYn8x8mrd+9GEKx7O5YOeEVobigr2iUP2iKaNWfZeMDujbOxAAsu0dfuqTVsqchh0DxzKODHcJWQklW8HF6ZkoOpBpZ8g0hQQZv8eYjFeI3u1GrB0HSRT+AJowq+HArebA3eVwW5yZHleq9cVDtv7sXg211zNk3Wi/4WxYbXsJ''@;'; put 'put ''Vq+5tnZdxBCjROyeW1d1Yalz37ltxs597f1dSnmDlzdPmDJq1b8SkQt9eg8CcZGtigseNkXbJ0gG2GLBhJDBtpbhDzYLhGe0x9wG4mv9zRD2x8v5fydcYN4Zeyvfw7a4hWD/UPj8f2fDvPziQ16YhIuBDcT8Be0MdpF2SZuCv3eMIyRGEHfEnYSTHWuKPVnOlCDcoY8iab9//FgQLCjFWEYTEhUT''@;'; put 'put ''SnXqGOCgJVe1GNs7CqB3HaoQKil4jTHPGxayWoRgjGNuII4shDmX8Yq43R/y54A/Om2VIZuiPUbT7oOOPu1+kp91vNfuq6A/pL+C/gzKCJ0Dof6Rc8L+nt0nQX8E5oycYkhI1Pw2SHukYv+HiDq1ogOKtIGTdns2l3T4E/Ebp1fVpa2UXrYf6wUNVQd6rNZHnUpJDWlP4mG3iSDFawnfrYbl/ZfA''@;'; put 'put ''FqNIUbhAJibM4DL2XYblYqRiQXSM/JGrCsEyNFsG7WKKBCYEyzhegQnvjCfiBAl7nLQMeu58ZgLPZjAeW/5MOMGcdvbHtudUzvQuNrOuz4/sJ9tLV/vnV/uzT5Di1KnjSB9r+3UkP8RDtgvX/WgsZ+ZThJDCoDyv1bxLxerlM2vfWpYOX8vzeIvwZylWj+v6DNBPKMFnTx616sN06AWZuYFAXGSL''@;'; put 'put ''Ncd+U4e/8m1umJ7/Vjz49nmPtJjbfhP2i4ZM10jxEdeOWvvf/Eci/AgXv33O023mzvOCn+qKa8HEkStn5jsec9cMPxkr2kKKlaPC1c8lSFnq4+7f3VD79hf5hMV9dTVlHkJ2hYtJluOMlWz9dY+xZyMlyoAgPh6zaYdGCsfOrK3fkE7MbltbO6BIcz1ucu+P7XqcStknHqvpymlVq99Mp36QnT0E''@;'; put 'put ''QuNsZbrGiLeRCVEGwflC5pz10Mbz/tJsbLs4EtkiCx80/fi1WzJnUW5pWtgwejrCeEHQqmJ90Evu4uZxkw9b6U+Ekc8vuQ06t6HyCs69tzmU4vLQsTJuGjotfNRQjd/OGL5mZz5gIWsW+xT35kixr7GS7cLGMa8hJE4KYmJxs0WGXF1Xsz4jl+vmv39KAW71LCWYdCFcxs0WlTgvmFK16uV88BeM''@;'; put 'put ''oSsCQLY5PCMeeuf8x5t93/4KyDa8k+6sr/6egdh7wXNMk/l2OEXZUZNHr9yRw25NqWm3bxxWItrQDZjQiVpIgn55SoI5+e5/pxJzplSuujulirMgLEC2bbLEXrc6wbGubBetO+lIw2p5235DWAh807SqNTdlMqdxoO4xflKl+k/tUBbq+7S0+XZOmVq1+pEsQAwq04hAaG7kLT2tbHUF7ztx5Jpt''@;'; put 'put ''abQHRNsQePjdX/2tybslbJIGWfXHosaB143a0GerMN2+8aQS1ef7AmPiX9nJg16FOs++ZtQrL/S1ibSwsfLQVl/T/YX6gI4VWxADmYjBYG0fOdTyK6ZWvtbQW7GR/kaeps3JkO3Cxh+9jhA7MYgBRqTBp9HTrx/+elOmcZn/ytEFPl3c7dLKL7HrNpi7xUFLxk2pev2VTNsE+tKHQAfZPrj+jIGM''@;'; put 'put ''kq+BbNMHdryS//LuhUv2eDePi7Syxdg6YFrVuq3xys2n9netO+VVJnwnB8ek0YKX+C4xbvJP8n8rOdSPizcOU3d58ckO7LoTYXxY6OfyprJGClZalF07vRdmMUp2ZXvn+lOPVjCpN1ibv/i8xQ2PQvSzp1Wt+Ue2nolZApGidTW/sph5v0odrqAdMsaXIHX+zNr6WdmyDfSmFoEOsr3//bP2wYbY''@;'; put 'put ''2hPZwgWp1IIfTdqj7168tKfi8UC2CN297uSLLWH8JYhlsWPQd8J0V15e8dKX0fDN18/9pETdN3BkXe5QispCx6lgRzOhdD73isW9acu9nWzlytZPlqGvaGe2d647ZQUXvtOC/VTifNdttYyJNVlFuuaLPH+/Ze0PLlexNk9XCjtv1wvOHbTkVkXBt185/CV3uvSD3MwgAGSbGZwT0vLYe5cu3+n5''@;'; put 'put ''7MxIK9u+vo0scZHF45lC/2Mwd8fNUodScu/2tuYps05YYyUEfJ50mt9QtQ9BZBbGdHzYOcTZZqroc00nfbQ3lIKT8cYYGV8lckHq7ndPG1CE+v97j3dzZ7EHgWdMq15zR664e279yOEm8/3dpZbuE7RJHgFggZebyLoo218KcgWn3moHkG0Oe+7xf1724g73f8dGItu+fhs5iMud6068iwtrcvB3''@;'; put 'put ''ih07VayfOGHUi30+UYBcNd2+duQJAvM5DqVgZLi5pCuFr3HGbxq4pXB9LufrbU/usVkNuQgWHFNPK9t71p9yssdqfSlYflAI8R1hzmOnjs6tUMbZb/5gNBfsyUJtwBA74TqUoqd9zJoEpfpy+A92FNM6yPaRd8cNMJj5DWwj544zgWxj88W9b40Z1OrzvatSrSM7j0YK3scEnTpx5Aq40Pc/GGet''@;'; put 'put ''HuMoUs1TOMJzKKHfD0VW1gLWSMEKxNlvp9Ss/iQ25DPbKhmyvXvdKeMt4bsvaDHBSuNeLztx1glrvJkdRXRtMnlJi2/HyyWO/f7P3tpjNr2tKfv8dGb1q9ujS4EWuYYAkG2ueaTdHpkg/ZCyw5btdH/aJTSg89su5ybnB19f27A5R4eQUbMWNv7oei6M2fb8sy6l7Am3pV4xrepZSPbe7g0ZKkS8''@;'; put 'put ''2uUOpXiaxb1dUgfKJgQpuzBBf2Zc3Dut6o2cunyXDNne/9bP/uqx9lzUQbZEnT9l1OvXZnSSxqFsbn31fhSTvxFMRtu7CSHe5YhcNLN6zX/iEAdNcwABINsccEI4EyTZHtrv8OXbWz85PdznMvQHyLYTGVn022O2vMyFOCH4LhfMctCSu3YWuX4766hnjRx1dVbMunP9iQOZZd7EkPHrcPmWObc2''@;'; put 'put ''YUJvL9TaHr9y+Ds5cTknGbK9e90p71jC15EmkSD11FwPrVnYWFnuY9Zynbpq7ZOk2bvtC5fe75xrqxv/mZXJA0oTQgDINiHY0t8JyDZ+jO+oqzmGY/EiJcoBwd6yFqlLLb7B7eB/7g2XgOIfdXI95q0dcTylzpsFEtXh8i07SNHrBvLMcyp711w5/J1AsfQsvST5mIx9lciZ7QNvn/WJ29x9uDTd''@;'; put 'put ''ZN42lWo/mlZV91aWhhKzWvkFQyX8MYLVLjtcPrN1K6GOC6+tbliTyWQcMRsODbshAGSbo5MiFrIViB0yo7rxqxwdQlbMmreuthpZ5lKF6p23Tv2W0FUqIlN3VdZ8MAvPkvUN4NWOwN0rTtON4ubTEca3EkyPCAVGfmGh1PkyYvyP02pWf5At4BIl23tXjylsIq1bHGpBqbTdYG3NRC/83rW9JEGP''@;'; put 'put ''zDbVZpiP6Erh2f6yHO0vWThBVwrGT6usfw4IN1uzMna9QLaxY5XRlkC2icN9x9raEwtdAx9tM3YMtktRifNbxn0PKJTcO6li1a7ENeRnT3mei930dwjjCaEFz+WIMSLfUarfYTHxcDZuxSYa+iP7KYhvolT1p3lkzGpSVcf3elue9/n11fMIpjPshRjkFweVOK+ZVlX3KBBubj+XQLY56h8/2ZYd''@;'; put 'put ''vny7O/KZLaxsIztvXn11rcGan3Gp5d0uASGENmrUOVmlOzZme2s0F6ffvIaqoR6j6V6XWjImGCpjt9Ni3o8Ltf4zrF389Uxm6kqUbGWaR+Jxf6VQ1Z8wwmSe1gKtaNikXphF69Y3j1mgUdckSjQ96BOZ3tFFy6bs9hlP5eLt6lyc49mwyVaIYGx/Iei3EPqTDTd01xkg28OWbe/hNrJBzKE3VK7f''@;'; put 'put ''lBsW554V/j/OwnhRU5w1odbJwvQWN9c4ievKydVvfJ571mffornrRh3JTPOvOi0YLgvLhlrkNlveK9RKxu8ddfzbmdiaT5RsFzZWOov0A95p8W07MjgGFevnX1356jPZRzl+CxY21pxqMnOpPb2jlCK4eMxCbBIkv4gf00z0iItsVa4NvrrmtW8yYVhf1wFkm5oZIONLncQ9SxAxIVyaP6/VvLtI''@;'; put 'put ''22+OT2n7a76UoksNcgEpsz74vubYVXARE6Ys5dcvXP1cBy15EjE0a1L1irTeHwiQrU9W/Yk7XeO9G8Zu9LHmYUFsnErJHYRsvaG37mzMqTvuVILUboRbqPZ7TODmyVdmobBCKuddPsoCss1RrwLZptYxc+urizSiPyIQ+3m3VS4Swm3s/tqllM+cXrO2V652UotWd2nyEpW7aPdlQrBbdaWgI39v''@;'; put 'put ''sGXgEpXjHiTU29J1npsM2T688fyHmoxvLw3aq9OiOuRu/cnEE9a0phu7dMmf82blsZSI5QrVO27fy9pXBKsNXDjPn1b1ck7FSacLh94iF8g2Rz0VC9lyCx868/i1fTbhfryukxVWHHUjLmDImu1Uig8M7c8FZw6l9BnBfLdcXfXqx/HK7wvtb68bdoDbar6nVN+vWxpRWT/XYr7/FjnKp0wYsXJl''@;'; put 'put ''qvFoJ9tNiZTYu2v9KXMY910ftKnUMXiTz+OpGF+9rFdnY7q9fsRRXqPphWLHvkPteKvE1aAI8avxlf+AY6ZUT8QE5QHZJghcursB2aYP4Vkbh7mcXvXXgrM/aIprv1BNcpWmK8V/xZjPvbriVfgyEwKQ/0tLw4gjBeMP6WrhqO5fWphlWG3vF6r9Lp9c9fp7qfJkMmS76O0TD7G87vcp1QqlPTIp''@;'; put 'put ''jK4UXDKp4h+Ppsq+bMlZ2Fg5GCP9BYFExza5tAUj/AEl9NzJo1Z9mC3bQG8nAnGRLUJ0SK6lcMtXZwLZpt+zcmtZRcpVjJvXUUXtF6pRJj/QqPNBhavz4a5Cd38EznOLLzV5240FWvmg0BYW93k0WvioMH03Tx1d922yHpVki4T3y3Db2FJ2T4UIAoXa8bsurdSf2EK+CtT+j/t2uC/P5I3qZDGI''@;'; put 'put ''1P/2uuoDkDCWa4rrWHsbjRa8L5hx4dVVr/87XbpBbmwIhJKtLESgRu4KZBsbrMm3ArJNHsNYJcx7s+IwQfFslejnhuujEOcnBKM5ptv7wtQT1uyNVW5faXfb2toBCrb+KBC/OGx8rkDfKIrjLmooD06o/fueRHFJhmylzoWNJxxvce8/FKI55O8GczcV6gPOmDRyxdpEbcqlfrKkomG1vexUS0fY''@;'; put 'put ''7fKaLd8UqCW/vqZq9apcsrev2QJkm6MeX7zxCrVAwc9vd38csRABnNmm1nkL64+vdVt7H3FppYeGSubCMglW/q0QZY6u7H2ht95iTS1indJkKb95DRUVBbT8WkO4zwqnp1Qf8n6LueM+r+X423U1L7bEa4u/eDxt+VJTCv2ZoEJf0YrHL1kyjm4Zsv0NjFBHcn+M6DqdGadPqK1P+EtAvONIZ/u7''@;'; put 'put ''19YO8GH2OKXqj+16MCLfcI4un16zekU69YPsyAgA2ebo7ACyzY5jAreWtUkW902npPvWsixFV6D2W2IS67YpI/6Rk6XosoNcQOvijcPUZsP5UwWpCwTih4SzxamUreKI3bBjxLB34onPTZZspS3zG2pPR4I/T4miBW1TSeEtuzxtN886YY2VTexSpVveSXC51UcURT/PLtNjNu8s0EovnVK5+sVU''@;'; put 'put ''6QI5sSMAZBs7VhltCWSbUbi7KVuwcUx/Byu402e1/BJ3pqPtaOezWvc4lJLHKOELJo9a83V2rc097TJrE/X6rtAV19RwpfwU7GhSqf6UwT2Lrhn12n9jGYEkWw9t/sKhFJWFax9tZSv7yHPmgj1lL1CinBqUQZDahAm96JpRr7wQix29oY0/vpx6F1GqXEYwVYI2y3zKBWr5dIe69ynYncmsJ4Fs''@;'; put 'put ''M4t3zNr8ZKuhZT2V2INt5JjhTKjhXY0/qjK4dzXBihaOcKVQhegfC85vcWjO5VcOfyknStElNNg0dfKX8mPGHy1uXKhSh/8msP2FEf1OUxx3Gm3uB6Kdh8vczdwtvkyGbKXuRevGHNRm7Gq0p/JsNXZtKdIH/Xhq5esfpQmKjIuVuwx7vcoMjMiNwXNqaYT/tj0puG23z5wH6R0z5xYg28xhHZcm''@;'; put 'put ''INu44EpL4/nra49GFnsrmB9YyIPJMKtc+cerRB/0ktdqWqyre9+EFUN3d8ytrxjloEVTfax1bLj6uaX64Hfcxt4HsNf9dKREEwGyRV86lMKEV7ZBy+bVVVxDiLrAvupzKCX/NLn3smtGvfpOWiZUloTOqRs5Dgv2Z/tZNxfMdKjFf24zmm6A9I6ZcQyQbWZwjlsLkG3ckKW8w/y1tUcjwt6mRO04''@;'; put 'put ''35NKIpGuPM91KcVPCSxmQ3xueHfMq6s8lSNztkqcP8SY0NBWLrV8tSV8s/hOsSE0JEduI3tp66ZEQn9C9ciMWE2urQ861eILCKYddhBMP6aEXnh1xWsbUz6hsijwtrXDqy3uW1KolXeJK3epZSuYcF81ceSrW7JoXp9QDWSbo24Gss2+Y9qL0b9lv0wTtCoS4crP3eaebcXqgFm+AvoEFKzv7kdJ''@;'; put 'put ''dN7SljNUpM0TiB0U2kJ+adGJ62VMldm7R1b+O3iJyn9BSmnbnEhu5HCzqf38djbGZBqxEX+bsfubArXsN9Oq176a/VmYOgvmvzn6YA/f+UqhPuAwu1ST+T4qpCVnTKx65bPUaQNJoQgA2ebonJBk61Lx8h1tH/8knIkyAw6c2abXefMaqn6IBZZkGzb2XCUFzxJC93cbu44LXf1Kywim/yGC3mah''@;'; put 'put ''1uXTqtZ50mtt75Mu42YpMq5ngl8ZbrWKEd2hE+c9mJkPjK9+dbskW0Nxb1Gps9vZrxx9LBekQlGSF4kUtPsBh1b8S/uWso+5tzvU4omDN5cvO/fcZ1nvQze8xTL5hdfcubrYMSjkpjj+r44LzpxY+fe8ObPONZ8B2eaaR9rtAbLNvmPmras9jnC+nuDwZIuRdotVgOeqHlbV6t31gFMtOghj0q0U''@;'; put 'put ''ncmNtS5SNmlX5cgP4gl1yT4CmbFgTl3NIaa1589OtXR0uC82QvAtFKvzKKfPe1DLfxWiu8JZlgjZBuXMr6++FCFxr71+rzyLV4h6a5MPz8mXsCA5XpnfGmN9uUrULtmmvGbT9kLHwJ9PrnilLjOe71tagGxz1N+SbAtVvPw7WNlmzUML6mqGISLWRSJbhejzJ4969VppoIxtLPDpl3HOfqtSx8BQ''@;'; put 'put ''o+WFFJ0W/oWZ1q1Tal/fnLVB5bDiW9cMPxkTMVujjmPDYV7mOODjPd7NR0QaQjJkK2XOWTv8HJU67iOY7mPX4VTKHm013dfOrH61VxctsI9J1vi1OH7wf2fU59u30DlnpkacF+2urH4Gvhim9mEJIVvyjdvcC+kaU4txQtKAbBOCLaWdFjQcPwIh1mjfXrQrUIjrjsmjVs6wv3fv6jGFbYpnASHa''@;'; put 'put ''ZfY/YsE2/tWD1n8WwuqTk0etbE6pwXkibEHjmCNMq/kxjRbKovUdf6OCw4t0Xp4s2Ur5i+pOPMQjmt5wKAVdqkK5jb3/LHaUjc23mOpF68b8knP2mH1HRgjBkeD3t1SfNBkIN3UPFZBt6rBMqaQA2ZIXvmv76LRwguHMNqVwhxW2sLF2JBeiISLZUufCyRX/mB6u89z66u8RhG6jRDk79HNZik7B''@;'; put 'put ''2gcCidlTKldB/dwIrpzXUHWOgtQ5CKMuF3oika4kW4GaSpMtnC7jcAlSn2HCGGk3jSDyscXMX82orc+r0KAFDTUXFqgD7vRYu8s7xyuERov+wgWfCl8KU/O3Bsg2NTimXAqQbcohjVvgnXUnVFjErI9EtiouWHR15YppkQTLsNyFDWMq2sydjxTq/Y7sRrqCcyZYg0pdV+ZTMoW4ge6hg7zAVKAZ''@;'; put 'put ''VzDmuylSTuTgSleSbRtlZVOPXZ50sQiZAUvx+p4nhPzIbl6rsXOLQy//2bWVde+mcpzZlrWw4YQzfaz1L7ri6hLD7FCKnkY+MSGZAhLZHluu6AeyzRVPhNgBZJt9x9y57oQKi0cmW10puGviyBVTolkqCcOleH4tELo53HmuP9SFFv3FomjOdIh3jLDLUFluMH4jRuLScLeRJeE6lCKkUMeRVw5f''@;'; put 'put ''+nE0n8TyuTwS8GniPoTRhfb2XrNlm6o4LptZ3fj3WOT0ljYLGqpGmMz3nK4UHmC3WaHOemyy86DMZHKeBLJNDr+09QayTRu0MQuORrYaLf7TpIqXJscqUK6WkLt5Dsb41+FK0bnN3d8WaANuobjtycmjNsB5bgiwcqdg0brKoV7T95hDLaoMh7vgfLOuFV04ccSKOoyRiNU3kdr5V9aqeSMlyg32''@;'; put 'put ''NibzuQlRp8ysrnswWR251H9RXc0hzWz36iJtQBfCJUh5jxDtjMmjVkIe8AQdBmSbIHDp7gZkm26Eo8uPRrZOUnzf+FEvTYwuqWuLhY2VP2CczAp3nssFswii/8IIz3HpLVDKLwy4MimGUdx8OsZUfnHpKAYfbBpMisE4nzWtZvUH8fontL2/fGB9xXiB+O32hBoyNEjFrtl7q16/bRZGPFk9udJ/''@;'; put 'put ''YWPloUIoz2BMjrPb5KBF7wsufgGxuIl5Csg2MdzS3gvINu0QR1UQjWwdaukDE0a8MD6qoDANZJL4Fl9BpdvYdV+h3v+o0CaMWyYTxlqXWjx58qhVHyaiI9/7zH/llAJc4LnC4K2/cyjF/ULHazJPq0KcfyTw2c8AACAASURBVOZIn5ts2I6fcNeOOMtC5gNOtWRAUJescyyPAEwubphW9crufMHc''@;'; put 'put ''X2GJtKx2qIU/7Lqi93xeqAwYC4Qbv6fjIluVa4Nh3z5+kBPp4U/XqNIXt7d92FEKzC4HbiMngmp8faKRrVMpf2j8yGWXxye1a2t5LuhRzcuZsK4Ld55rWK17VVLwEOFi4dTRdd8moytf+857a8wgjeHbuGAXI9Q9VMhixhcqdczVfOKpSEUOYsVmfsPISsMyn3OqxV1yDCMkVmHNeeHU4a/kjY9k''@;'; put 'put ''hi+d4ucRImPs+BiWZ7Ouui6dWrnm9Vhxg3YIAdnm6CyQZFuk0he3AdlmzUPRyLZA7f/IlSOWXpoKA2WoEOe+3xNMfhbuApAs5Yc4noMIWQ6hGOERv72x8seIWbepxHlsaHyu3ClwaaVrOOM3DdxSuD6ZFIxz6o4bZjLvC4XagMF2SwjSGpmCz8+nS25z66uLFEwfxxifaR+rz2prcmllF1wz6rUV''@;'; put 'put ''qZj/fUEGkG2OejkWsjWIOfSGyvWbcnQIvd6saGRbpA149PLhz12cyoEurK8ejqljDuPGCaFJMeSWJUL0HYrobJfe/CqU8uuOvMyMxDgZS4l2O0L84NAWFve5FaQvJ4jcPKVm9SeJ+u62upGHE4SWa9TZJaSLYPVdSsjP86nqk8RUcOVuhNEl9uQXBnM3O9XSSXsqXnsyn86sE50T0foB2UZDKEuf''@;'; put 'put ''A9lmCXib2mhJLQr1QY9/c9yRF6c6y468AetUPL9g3JjlUIu73AqV5skLQE61bAli1pxdPuOzfMrbmyqv3722doCbmDcIbl6sh6l/SwTdqSj6Imqxh2SRg0T03vLmDw8zrZalpc4hP7D3V6nrPcLJL/PtXPP2N0dcjwj+nWYrBGFxn0dXim/cU1Ry96yjnjUSwbGv9Okg27vfHTdAY8bWntI1wplt''@;'; put 'put ''5qbFkg/GaZbV/4WetpEFYofMqG78KnNW9S1N0ci2SBv05FYnvyRdf2TkFh4ldCLi/DpCaGko+l6rZZdTKXuCK/SOfNq6TOUsk1VudKLcZHDvuHDhVoybnyvUdYfmtR5P5Dx3YWNlucXE05RoJ9m3rg3m+dxJS399TdWrjakcT7Zl3VF//Ale1vSM/ZKYtIlztgQ5lIkzhq/ZmW0bc1U/kG2OegbI''@;'; put 'put ''NvuOiZYbudgx+Kli3fzNuWn+Rj+voWooQmIOEuinCtGcocioxPkpFmQ+9rqfToQwso90+i2YVz+y1qX0m+yxmsbaK/sENReq/RpazZ33NfvI87NOWOONx6LbNw4r0c3Suzg3L8QYd1R9Uolzq8HarmmpqluWT9us89bVVmtCeY4jPqgrTniNrqBfTBy5Zls8+PWVtkC2OeppINvsO2Zh/ZjhHFvr''@;'; put 'put ''IqVrLNH3e7rIYV2UbrINIiHPcxXqmm9wb224IgcY4XcQJn9o8vLXYGs5/PxZ2Hj8WYxbswkmR4SWQ2TcMhSivyy4uLG5+viP4jke8Ce/UIz7CKEX2eV6rZY9Gim8rLV67fJ8ItwFddU1hvAsdShFXSokKdixSuXigkS35rP/1KfPAiDb9GGblGRJtobV/4WeQn9gGzkpiKN2jka2xfrgZ4od5q8z''@;'; put 'put ''RbbSYBmfu9en/4pbvlt0tbDLbVj/dp6wTIdS8rTB2M3NlZVfxEMYUQHJkwYLVo/pLxTrUodaNNXk7m7lEAlSdxGCHjF9xp+mH792SzzDXlBf/VuO+B8UojmC/QhWWi1mzDngm0Fzk7kFHY8dmWh725qRlUWO8sUm93Q5s3YqZXXMbL5wUvUbcMRlcwSQbSZmZQI6JNmaVr/lPVX9AbJNANg4ukSr''@;'; put 'put ''ZyvJ1l2856LJh630xSE2JU3lSqpYF1fL+rnhznMNq22vQgsf1hibO3l03Y6UKM0zIQsbfzSYYHSLxX2/Clc/V3C2WRB6a6sPPxLPTsEddTW/Zth6QCF61y1/IWY3V639Yz6tcO+oqzkcEbIUY/x/9ukhb2UjC50FtZs7UQGyzdE/IAGyLV/WU/F4CP1Jr/MWras9jnG+PlLx+BJ98NNtxXsuzgbZ''@;'; put 'put ''dmwtN1Yeagk8nyI6FmNCQxHRaMHnnLGbd1dWPgGr3PDzZX7dqJM4EvMVoh8Trn6uTgpf93HP76ZWvvF2rPmW59QNm0CxuiCUcDXs/MNOr3dBvOfC6Z3pyUlf0Fh5BGfiWYXqXQhXo4Xvc8EvmDxqJWRAQ7akFnAbObkJl+re/gxSGlq2vfWT08PJlhmkgGxTjXpXeXc0jj5WCLYhEtnKC1Luoj2X''@;'; put 'put ''ZJNsgxbPbzi+ss27fXGxc58uW3qBz4VAiL7nIPpvJoz6x7/Si1rvlD7rg+9rzj3FlzDuu9WhFNvqugbGI3NWO2jJY6Zi/T7WLFG3r/3hmQhrj2vUWdSJihA6Lb631SS/va7mxZbeiVZ3qwPZpsgyhPDx9k85Y18rquMXU0a9Xp8vY010HLCyTRS5NPeTZOui7Lkdns/OiES2sI2cXifMX197NGZ8''@;'; put 'put ''YySylXG23uLmy3OBbCUSswQihetqT7ZM78Oa6gpznssZ50adQp2XT6ta81l60eud0mX6TLdmTWTc9zt70YHglxZ5iYpSxz2GSm65fvjrTdFGKW+Su307Xyl27Ds02FYIIQzuqVedBWfnU6hMoCQh+ivC4hw7LvJIQ1eLL5ha+cbKaHjl8+dxkS3WHPvF+q0un0HLxNgk2TpV9uzOts+6pEnrfGA5''@;'; put 'put ''Nzk/+Prahs2ZsKcv6pjfUPV/GOF3I5FtgTrgkW9deHy64mwTxVz+0WtWWmZjRC7pThgIecymnQVq/5s4ok/lU/L8RPEK10+eRbZae+4p0vuf3P1zIQzL+6mmF10+rWJVXTS9t7x59MGG1bqizLn/Efa2Oil43ce9F0+remNrNBm95fNZq8coDsWzWKOOS7oQLnM360rhb6ZWrn6+t4wl1XYC2aYa''@;'; put 'put ''0RTJ869sFb50h/u/YyOtbIFsUwR2BDELG0f/gAv2TiSydWnlD25zKpNyjWyDw7lnw4n9DMu6B2F0fugQueCszdy1tUQdNJvQtmegfm73SSCJo0ixjjKEsVhXnBWhLRg3DbfV9E+HUjrxupqGjT3NxtvW1g5gfO8LBVp5lzq8e73ffliuDT47mdSR6X0K4pe+ZMk4umm/r6cihG6x38o2mbdNU1w3''@;'; put 'put ''Tq1cvTB+qb2/RwfZ3v/+Wftgg3/dUwYpWNlmzuEBskVLd7g/iUi2sI2cXn9E20Z2KCX3Thj54qT0WpG89LsaTzix1dz7oFMt7pYrWJ5FCiHeVhXHVVNGrYLz3DBwy5vfuuK5wGAtfwwtqi6by5SFKnb+1RDG7OtqGr6J5DFJuG2+LS/2KzhwlL2N12j9QNOKfj6jas3HyXs7NyTIkoRzGyp/gYT1''@;'; put 'put ''gH13RX7J0xTXXT6HuHHmMa+25Ya1mbEiLrJViGv/yaNWfp0Z0/q2lrv/e5rez3PQi9+1fnhKpJUts/AR1x6/9r99G6n0jT4QZ2s2RlrZynq221ubro4nLCR91vYsWdYnJbo+zWPtvlRTXCHl4RAymLvFoZQ8TjhfOLn6jc+zZWcu65XpMzEWFxtW2+9camm3+Fyf1bpHIY4HsKkunHFC+LSF8185''@;'; put 'put ''ugC5Cv5KqfZz+1jbjF1bC7SyX06rqnszlzGI17YFDaNHK8TxLBe+juQXQgiOkHhdV7QLJlWs2hWvzN7aPi6ydan9xpm89R1BKUG+QGihhVW/DEp4h6wgGBbu/l6gbaBPtl7UDG+XtIepRATtCrazvxePzQo3RU8BmLpNmEVU7Nen6YgJUxTj0tICvd8jW1v+8/3wZCu4QhxTEBb/wIxxO9bh8I3k''@;'; put 'put ''i2jjybavotkX7XPGzQ5/yraKICL4nv9nDXd8LkzWnmov4Bmd0rEeq2V+uGxN8vNS5+B6w/BcyxjbYREPZlzOna4et+MXaks426VNoe/bbfQ/c7YxKX6dnS/L9hzqluIfD1YUji2LW5wIrtMinSsTLGFexYSvI7VgUIIkDJUWPEKZuAPq54afXfMbqvZhzLgOYXx5uDNxWT+XEm2BJawnrqtp6Hbj''@;'; put 'put ''+O4Vp+m+kj0LKdYn2DXIs3RdcY2fUd34XLR53Zs+n19XU8GEsUxTnPva7VawusYS9Jy+cm8gLrINbDlxFr+jZehBrr1kkWlpV/di052W2j8P/pzsWHrS568vHMRKUKJ2ZKGJhB7jpk/4x5HaV+q+DdnHm3o7kxl1ONDs4yZY1cPFXdp1ymdC/r/rnLG38EtMHZzdfd35ZUHu3XWdXna98hKsbCsU''@;'; put 'put ''ohfIcclfQ9p3GE6x8m/O0c20SXtp8k8yn7QjGb9mqu+CtbXfd/PdfypQ+42x50QO6m8z9mws1vpfs+/X/TaEZo6S58FOpW0CQvhWe/1ig7U1q8R5fUvprodnHfVh3lTRWdhY+YNm354Xi/WBB3X5csiMtxxC+WlfSLwSF9lmahKDHkAAEMgcApFIV5byK9b3e8nH9t7vUPbWQ/3c7j6Rq1R30c5T''@;'; put 'put ''CFZuU4jWJamDbC3r5xKsv4gYv2XG6LpuyR1urx9+GmPscada3C8oXX55w4LciYl547SqdZ7MzYT0apr3ZsVhiuJYijDqEguuEH2jQN4LrhmV30diXW4jq8zY6jH3qumFHKQDAoBALiIQiXQN5m5y0JLHmWLMmz4yvlzBuTjOdNh09/qKYq9JbubI/I1GC4pDdfi354lzseVw3B4an3v7myNGCyxe''@;'; put 'put ''0pXOfjJpDUL4rxibk/KJcBetrd3Xg9r+7lCKjrVj1Grs3FzgHHTy9IpVn6bDP7kgs3Nl23DWPkjlWzzWXi0XDAMbAAFAIDsIRCJdnRZ+6bVaHlaZ+HNf2PZLBP05dccNc+DCySYyxnXLjYwQKtb3e6fZu31Bgb53qX2n4NY3jzlXpQUPKEQtC+qVhOtUSx+iBE29cvhL7kTsycU+d64/cSBj5jMY''@;'; put 'put ''d802JQT6inN23sza+g25aHeyNnWQ7b1v/WQQQepXQLbJQgr9AYHej0BP57kYkX9igWY79cKV+UQCqfTavIaKUyxm3aJR5zCCaZec1bIyk4odL3Bs3jh4y8BPg+e5c+oqhvmspudCzzUxpi9SrF84edTK5lTamE1ZMga8zdf6mKo4fmK3g2L9aySs866peqMxm/alQ7eNbM/cnyD0GZBtOmAGmYBA''@;'; put 'put ''70QgEun6L4Vh9A7i9KZWE0P93DDuDdS49Z2GMb4FY3pkaP1cGZ9LBPkbU7U/XjdqjT+kclFdzSGC0mUIoaPtImUsNCHk3KmVazb1zpnU3WqZ/GLLkB13YSQm2j/1Wi27VFI4YWbN2iX5MlY5jg6yXbxx3AGMez/2Ws1dy0Ll02hhLIAAIJBSBBi3TF0tfJQb7BYopxYeWnme2+IzpyHEJznVko6L''@;'; put 'put ''UMHWFjO+RIjOdlvKU7Ia0Jy6EYcIzl9wqIVdLlwpxPEOo9a5U0es+iKlTsyiMJnPW3nzqPt1pfQ3lCgd94UMy9PkUEuv3G9LyXP5UgO4c2X7wbhCl1d/AGEyCCMZdcwRwYpCEVUxIQQJTAIlvGTQACFEYIwwIQh3DWsQQoaucCHjCrgU5P+5M5Yxkl+7hmFkIEQEd4TYdDNJCNZzKI1/jN1fojNs''@;'; put 'put ''xx/BYy/HxQWPKBMjiU/7xxK99l/8sRo4ACPnXTEhBOP2wI2gI7AI8UUkrIP62uOeutgl38visxdRtYzTSsSuwBixnJb+WK9QGbzDl/4AqsDnsnkgBktI7NsvqwiB5Lyw+0H6gMr/kKA/2r/BRsfQb073lwzIke8G50BAXsD/AnMZIM6FkJNBcIQ5978vAs0xQfJxk591jBPL4cu5wjEm/gdR/kuo''@;'; put 'put ''//32lz9sRVBFzjXGDS9HvCPkRCN6kVMp2adQ22e/7W2f9m/yhU/j6zWbthdo+8zeU1yyOFfTVyYyf1LZ59a1w/ZViToTIzKRErXb3RiDuT/GgvzBU7vh+ZI1Y4oN1feUSrTT7DaYzLdZI/r5U6vfXJdK27Ita97ainMwoU9SotrTDyBC1DudivN3+XBcEf2PQra9APoBAUAgYwg81DiunGraYIHE''@;'; put 'put ''LynVTvWYzUe4rV1d/gD2ZIwQaCOlzkv3Voz6D9TPDY/U3LXDRxrCXOBSiqtDt5YDMdv0OY7M3xNDa+KK93GF6qfaJRGsbGaMnTe9Zs36jE2MDCiaUzdqDOe+5+xhUFKtTgqeRR73JRNPWNOaATPSpgLINm3QgmBAoPcg8KcNYw+mhFzJmfEzg7u/l4zl/rW24I26ql8yKY9DOZLBSPadV1d5KsZk''@;'; put 'put ''PiVKt/hcf7IUbj5MSMEcjShzLeE7z67PazXvduDii6fVvvlSsnbkUv85bw4/liHjJZda1qVEJMFqgyzdN2XUqu9yyd54bAGyjQctaAsI5BkCd68/bQjj3ttM7v05xaojWsaseIYvCUOjroeRQf8wefTKHfH07SttZ20c5lJarMkKVa7TlMJS+7jlcYDPbP1PgV52j4uWXd5i7hjelXBbdzvV4svz''@;'; put 'put ''rWzdbauHHVHo6Pe0JXzH2MfrUEtXM+659OqKV7/sjfMDyLY3eg1sBgSSRODutacNQBr/rdvYc5mmOAsjiTOs1r1MpmlFnBOkcIKpUKiOfFar6r+8gQgJJYlQWbpS8uSATfpF+XLRJUnow3afU1dTRoR5o6o4poQ2kF9a/ld/GPd3HUy3NL/b5WMZRoQQWVSku3+fTxm+5q6vGKJyx1KE0Ej7gBXq''@;'; put 'put ''eI9x9supla9/lA4/pFMmkG060QXZgEAOInB3449H7vFtebJQ6z803ErWbe7d5rNaP3IpJYtVjlcRXWtr9umi3PO1QOgw/4h2Oz24WPfhZs3ArraCwQgbp1Kq/txgnmN0paAkOGyDeVp0pfzoqZX/yJuQlXS51F+Wbu2IWkzIXSp1/DBWPZKMKXHc6lL33JpvhOsU5X+1hPvELitcpfgDg7VeOqVy''@;'; put 'put ''da9KfgFkG+uMhnaAQB4gML9h9CzOvdPtye+Dw/IxTx3B5E4ulNU+S2mJt3SgTK7vKFIKFK/vGou7p8oV7/8KHcyaMmrNzfab+XkAY1qHIPMte4p3ne+z2mYXav2HxKJMEq5K9L8y4Z6cT+kdF6we079NfPtakWNQly8fpuX9zKWUjL266tVeUwMYyDaWmQxtAIFejsD8908p0D3oNpN5rw5dzTZ5''@;'; put 'put ''vv3IpZf/3mM6Vsg4z1QMVf6RtFT3OV7T9WiqZKbCrt4kQ24tC942DWNyta4UduwW9DQGjNQXmGZdNmN4+Hq6vWn8QVtvXV8xULXIEwrRTrLbzzn/XKHKL3vLChfItjfOPrAZEIgDgVliFnE1rHxUIY5f2buZzNOmEsftPs7vvaG2fk8cIqFpBhGYW1+9n8fY9WenWjxGpc6CaKoxIm9iRn+dT0lG''@;'; put 'put ''5EUytZU9qquFZ9nTX7b4tn9VqA84a3rV2vei4ZLtz4Fss+0B0A8IpBEBeQ54z1unX8K5+RATnYXtPWbTdxjR64zR7zw+C8ukGPDKdQRk/VyfaH3QoRRVRrs13uT99jOXs/yM6yrX97qLRJH8MOuD72uFu0vGc4xuV4jWUeu71dj5ta4UnHVdzVsbc9mHQLa57B2wDRBIEoGFDbXnG9z3Z406i2yi''@;'; put 'put ''3uXCvGpGdePbSYqH7hlGwF8/t3jvxabV+sf/b+/M46Oqzj5+lrvMloSEHbVaW1srVqwEkswkmMgmuFYL1drW2triAoEEBKy+bbq4QIAkIChql7eLWql1QUDCkpA9CO5Lbat1X1izzXKXc87bG3rzxoBCktnnmX9aP3PP8/ye77nkN3fmnPO4lazRn5c+qLe/Icuuixb7mt6MssyIpitvyPuOQOLB''@;'; put 'put ''3l2VOGevYkZmLDw/fltAgtlG9LaA4EAgdgQqG3xf1bjZIEuOYbYKzez6J6Xq7MW+phdipwwyD5ZAeaN3BGOhhQKROb1Xf/eNa3LjTSKUHywqqG0YbM54Gr+sIW8uQWQlJVLPsZcycTwhDpGrimdu+f+vcOJINJhtHE0GSAEC4SKwtqbQ00X9z8iSy2fHZJx9LLj5rcWTWhrDlQfixJbA8l05Z2gi''@;'; put 'put ''cL9Tzijo28rPVtalH/zALQ37VrId71je4LNO31r0//e3qTultGvn5j7zSGxn5djZwWzjcVZAExAYJIGKpsk3C2TeY4exjlAkmF5f4q357SBDw/A4JFBen/fN/zQi+QXF0llHGsZ8+hU02g845IybFnp3bYhD+QOSVL51mttwHNjmkNPy7AAydf2TYDzp5ombPx5Q0AgOArONIFwIDQRiQWBdfX5m''@;'; put 'put ''F2bPSUQ5zc4fNNsbnJJzWjLtwYwF23jOaS0gSjs87JsyVctNoZ/SV2unvv9dtxgxflFR8mwLKq/LOcdEvFaVXJl2vQ7qufOmnE23xdtcgdnG24yAHiAwSAKrm6f/1BShO+wwBElvc8Smlnpr/zXI0DA8AQisrisYHqLmbYLz62Xq6N4qZPWJJFj5M22Tfxyvv2kOFO2KxvxfEUxvt8ebTDukyO6z''@;'; put 'put ''4q1pAZjtQGcYxgGBOCRwT+MFp3aa7Y2q7OnumiIEZ0yYSxfnN6+IQ7kgKYIEVjXlnUSxa5nOQrMwwnWmw/Gtpdnb2yOYMiahVzVdcJJutr9in9HNuKkTpHxzYX7N5pgI+oykYLbxNBugBQgMksC61otLQ6xzpR0moLe95VJcE0q9zYcGGRqGJyAB66tl10HXBKHQd5bktr6fgCWckOTyeu8zlMrT''@;'; put 'put ''7YvdcuZv50x44kcnNDhKF4HZRgk0pAECkSawqinPiZGzViDW0ynFYMFlSwp2L410bogPBGJJoLJx0iSOUS1CuNvT3PLQfyHckT0njp7kwWxjeYdAbiAQRgJ3tk4cSjT+uiK5h1thGdc1hHH2Lb6mV8KYBkIBgbgjYP1OHUChN5T/LpQyuRZQkPO8Bfk1b8SLWDDbeJkJ0AEEBkmgvKXgHG5oTfb5''@;'; put 'put ''uX790IcOOe0bt/ia9g0yNAwHAnFNYP2eS1y6abxo8OCXLaHWVjeJKFfNz9v+aLwIB7ONl5kAHUBgkASqmqcuZkJf1hMG06dL83ZeMsiwMBwIxD0B6wzwe/dc+kDIaO/5ndYhpd1708Snb4oX8WC28TIToAMIDILA+j3jZc5OfiLI2mZaYbjgDBF6w6K82gcHERaGAoGEIVDZMmUp58ZdtuDhzi/W''@;'; put 'put ''mW1vT78uTG0jBwsCzHawBGE8EIgDAla/Wt7Z8cp/Goh3H2Rhcj2kIMe58fSbVRxgAglJTKCycdokjrVddolOacghZJCv3eh7PC5+RgGzTeKbD0pLHQLWWcjO9JNebtPe7zZba3EUQ2T80vzGV1OHAlSaygTWNEwd4xdtryvUlf7fD5xBj5p19k0TNr0VD1zAbONhFkADEBgkgdUtM9Iplv6usY7u''@;'; put 'put ''tmvWky2j4mu35rW8PcjQMBwIJASBVU3TsyQiXja5NsYSjJGkUypNKc7ZWh8PBYDZxsMsgAYgMEgC6/dMyQga+A0u9JG22QpEvrQkv/HDQYaG4UAgIQhYK5IRkpv8+sFxtmBVSr/u5okbfx8PBYDZxsMsgAYgMEgC1pOtSh2v+41D3Z/qrSdbWdCxJQUNcfEV2iDLg+FA4LgEyl6dpWR2tD/GhHax''@;'; put 'put ''fXG6MvrX12c/8j/HHRyFC8BsowAZUgCBSBNY1uBLk4n8GkLiZCsX44amSNLX5+fW/TPSuSE+EIgXAlUtU+/8z3qFW209Q92nP3ntuN9dHg/6wGzjYRZAAxAYJIGymkLHUKej0eDB86xQXJgGQerFpb6d1YMMDcOBQMIQqGiefI0Q5p9swVnO017xK4G8m8du6Ip1EWC2sZ4ByA8EwkRgXevF60Ks''@;'; put 'put ''80Y7nISVlcV52xaFKTyEAQJxT2Bl0ySvEKKOYEItsUMcJ30SMIJj5+Y8fjDW4sFsYz0DkB8IhInA2taLfqSxrp5DLDAiL5V4a3oWi4QpDYQBAnFLoKI+/3QNac/b238cNL2LUvkrc7L/9lGsRYPZxnoGID8QCBOB8gbfbILJwxgT0v1VMjeDArtPu8VXHReb+sNUJoQBAp9JYEXN+GEaYX93yhlD''@;'; put 'put ''rYswokFVdsbFXlswW7hxgUCSELD2GcqYvGaIQPf2Hy6YSTCaXepteDxJSoQygMDnErBW5ROMX9KZ/9Qj/wZMQ6LuixbkVm+LNTow21jPAOQHAmEi8LuaQsd+SauXqJJth1Soa83cnC3FYUoBYYBAXBOw9tp2am0vE0xOtz9wuqWhs2/MeTLmHzjBbOP61gFxQKB/BFY1Tb4QIXOLPSpotH/icI6Y''@;'; put 'put ''sHBi9Xv9iwRXA4HEJHBv62V/CLK279nq3fKw++dMeGxOrKsBs431DEB+IBBGAtYZyaZDbmVCP8sKK5AQElbL5+dtWxLGNBAKCMQtgarmaWVMaD+3BY50f23HNePumxJrwWC2sZ4ByA8EwkygovH8xQKjnr62JtcCijrkvAUTnnkjzKkgHBCIOwKrm6ZPNFGo1RZGCG1zSu6T5mRvDMRSLJhtLOlD''@;'; put 'put ''biAQAQLr6vMzkZLZGmIdZ9jhJeKoDZpdly7Jb+yMQEoICQTihkBFc4FPCNJgCxrh/krnoWDg5OLcP3fEUiSYbSzpQ24gECECK5uKbsWI32mHF0IImaq/Ks7d1vP1WoRSQ1ggEFMCFXUFozUUfE2R3EMsIYwbwaHKF776w4mPxHTdAphtTG8LSA4EIkPAaiaPuwKPE0yn2hkoVvxCiCsXeLdvjUxW''@;'; put 'put ''iAoEYk+goqZwiDtt+PNd+r7/9nY2dCyYd1FB695YqgOzjSV9yA0EIkhg+e7CUUbw8EtOechwO43fOPyuU86avshb+/cIpobQQCBmBKy9tkHj4CsydZ5y5MnW1CmSfaX5tXtiJqr7gA14AQEgkLQEltXnfE+mjj98qkCBXsYIf7/EV/tC0hYOhaUsAWu/ecDp2qhxf/cKZCE4l6lrYXHu1spYQgGz''@;'; put 'put ''jSV9yA0EIkzA2ncrhP4ExkTtnUqhnhcpkX9yQ/YTz2KMRIRlQHggEFUClc1T7+ZC79nulqaM+OuPszfMiqqIPsnAbGNJuzpOogAAIABJREFUH3IDgQgQsNrtpcvG2YQ4vxMwDv/AIXsyj5UmZHT826WOvHxB7jMvRUAGhAQCMSOwumnG+SYK1NoChOBvd+r0jLKiWjNWosBsY0Ue8gKBCBAob/SO''@;'; put 'put ''YJzdi5GYJlOn51gpDBbsUojnQ4LpFs3Q1i4+HxrMR2AqIGQMCSxvyJkpEccmW0KaMvqg3vnxaTcX1casry2YbQxvCEgNBMJJYEXj+RM40u+TsNLdQL73y+RaECP6Bsb0Mcz5RhOLt2DPbTjpQ6x4IrB816QzOAnuVagrzdJl3f8SyTi51Lv1UKx0gtnGijzkBQJhIiAEwhUN518c5O2/ccoZPSuP''@;'; put 'put ''j/yR0UMSdTzMuXZvl6q9Wpa9N6an6ISpZAgDBD6XgHWwS4iS1xHC3R2wGDc0WeCvLChofDdW6MBsY0Ue8gKBMBCwjLa8yXst50aV3TDbCmsdYvGf32vfVqnntsUFzQ+HIRWEAAIJQ2BZgy/NZP6XnHJGz15bB/GMm+etjtmWNzDbhLl9QCgQOJpARUPRFZro+l1vo2Xc0AmWH2IyvnXxxNqPgRsQ''@;'; put 'put ''SDUCZa/OUkYH+B/8xoFv99SO6a9L83b+T6xYgNnGijzkBQKDJLCq8YJpOmv/iyJ5uo+ls14GC/kl4rxhoa/2T4MMD8OBQEITWLt7ZqVm+ufbRcjEvWle7uaLY1UUmG2syENeIDAIAiuaCs8M6gd3upWs0XYYnQW7kOA/XjppzyODCA1DgUBSEKhsnlzMhVllF5PpOHn3def9OSdWxYHZxoo85AUC''@;'; put 'put ''AyRw954pGVIo+BQh0iQ7hGb621XivqQ0f1f9AMPCMCCQVARWNRZdhjB/wi4qQx39jinYuDnZG9pjUSiYbSyoQ04gMAgClU0X3MWEuRhjTKww1kpLhsz5S/N3rx9EWBgKBJKKwIqWwnxJ0Houjpxj4ZSGhJDJvnyj9+kPYlEomG0sqENOIDBAApUNRV/tYodqXfKQUXYIxvW/nfrhybNnz97ABhgW''@;'; put 'put ''hgGBpCNQ8ezk07GJnufCTLeK48I03MqQ826csOmVWBQLZhsL6pATCAyQwJrmC8sMEezpSWuw0FuYqxfCKVADBArDkpZAxfOXD3Ex/IpfP3TSEbNlpoN6Lpub+8zmWBQNZhsL6pATCAyAwIr6/PEa79zklId0b9Q3ua6pkusH83N3wIKoAfCEIclNYP2eS1y6aTQZPDjOqtTaey4Reen8vB3LY1E5''@;'; put 'put ''mG0sqENOIDAAAqubp91uCu1X9tAu/cBrTpkW3eJ7ad8AwsEQIJDUBNbvGS9z/oUHguaha+1C3XLW+jkTHr8hFoWD2caCOuQEAv0ksK7+okyuiFqd+c+xhloHV0hYuabEV/vXfoaCy4FAyhCobL7gV//5+vh2u+Asxxc3/uC8318aCwBgtrGgDjmBQD8JVLZMudIwgw9RIinWUM3s+pAQx4Ql+Y0f''@;'; put 'put ''9jMUXA4EUoZARfPka4Qwew54yVJPeYUFO7w/yn+qM9oQwGyjTRzyAYEBELhn98X36GbnzfZQUxgPZ6jatXOy9xoDCAdDgEBKEKhsLspBCLdwcWShvkvK2icM9PUbfY9H/acXMNuUuOWgyEQmsH7PlAzNoC2mCJ1p1WG1C+OM/WDp+c8+msh1gXYgEGkCFXUFo3WsvyJTR5aVy9r+QxXHmSUTdrwV''@;'; put 'put ''6dx944PZRps45AMC/SRQ0Vx4mmZ2vaBQd4Y11K8f+sgphp6zqKj2QD9DweVAIKUIrK0p9Phl7WWJKN3df6ztP4rkvqA4Z2vUT1oDs02pWw+KTUQClY2TJunC2CoRxWHpZ9x8lhJ+fqm3OZiI9YBmIBAtAqs3z1Cdw92bOo39k62cQgiuSmk/nZuzaVm0NNh5wGyjTRzyAYF+Eihv9H6XYvmP9jCF''@;'; put 'put ''ev46N2fTrH6GgcuBQMoRKBNlZOSzz1cEzbZiu3iPMuL3P8necF20YYDZRps45AMC/SRQ1Tz1eib0B+xhEpE3FOdun93PMHA5EEhJAn3//WSoo5t+NP4RX7RhgNlGmzjkAwL9JFDVMmUR40a5PUym7j/My9ncs1G/n+HgciCQUgQqWyZP5dystotOV0a8fX32hi9GGwKYbbSJQz4g0E8Clc2Tf8qF''@;'; put 'put ''eYc9zCGlPXjTxKd/3M8wcDkQSEkCK+p9+YRKPQuiMh2nfcIDh8+I9l5bMNuUvP2g6EQiUNU8uZQJc6WtWaFpDx3wOK8rG7tBT6Q6QCsQiAUBazW/yYyXKZE8Vn5rRbJE1ZMX5O74JJp6wGyjSRtyAYEBEChv8P0IIbTOPj0qTR65sdMQ3y71boDVyAPgCUNSi0BFTeGQIG1/0yGlH9lryzmThHr6''@;'; put 'put ''goLt70aTBJhtNGlDLiAwAAIrmgrPNJm/VaGu7r6cmtn1nioNO7fUu/XQAMLBECCQUgRWNeU5kVAaEEbnWYULwTnF0swF3pqt0QQBZhtN2pALCAyAwPLdhaOEFnpZpuowa7hudrXJ2JmzsKDhHwMIB0OAQEoRePTRWfSTL3StNHhgfrfZou5We3fPz93x02iCALONJm3IBQQGQMDq+CMU3KqxzjOs''@;'; put 'put ''4SbXQ5TQWQu9DU8PIBwMAQIpR6CiqXCRQKJnRb9LHva3GyY8dmU0QYDZRpM25AICAyBgNcEOGoGtXJj59nDO2PJFBQ1LBhAOhgCBlCOwoiH3GkLUnu4/QxwntfzwvIfyogkCzDaatCEXEBgggYrmwp8LIcrs4U4pY1fI33F5SVFt2wBDwjAgkDIEKuunfMHA/n9QoqhW0ZrZtS/LNWbsnOyNUTtf''@;'; put 'put ''HMw2ZW43KDSRCVS1TBsfNDp2KlTtXiSls0CHiw65tNi7bVci1wXagUA0CKxo9J7KOHtepo5MK1+GOiakmV1X35Sz8Ylo5LdygNlGizTkAQKDILCswZfm1/Y/PcQ5epIdRiHO1QeCoYVlRbXmIELDUCCQ9ASsFckBw/+WS84cZRers2CHRx66kuvo3uJJW/ZHGgKYbaQJQ3wgECYCFc1FPs30b1Go''@;'; put 'put ''M80KGTI7Djllz9SSvPrnwpQCwgCBpCRQVlMouSX9aUrl6X0LDBiHPnJKGStkajxYnNvaESkAYLaRIgtxgUCYCVTUnDvkEO+qzXSeNM4OLRPXAweDwZvg6TbMsCFc0hFY1uD7qma0/a8qeb4uU4erb4EhM7DbLWWWHNb058qKakPhBgBmG26iEA8IRJDAquai2SYL/l4iqtNKYzAtoMqe7y/I3f5Y''@;'; put 'put ''BNNCaCCQFASEQLiy6fzcgNmxzimnjUMIH+WBQaOzziFnLSjN2/4CxkiEq3Aw23CRhDhAIAoErKPn2sXH29MdI8fb6QiSXpKEuHSub+c7UZAAKYBAwhO4s3XiUKpL18tEni+wGIX7mK5K0w5yod+vSfqqRdm1YVmxDGab8LcNFJBqBJY3F/iYEdysSu7ulcndLy4andhxxY2+6n2pxgPqBQIDJWCt''@;'; put 'put ''UuYC3Y6Q+K5EFEffOARLbxMk3am5xEO3jKv2DzSPNQ7MdjD0YCwQiBGB5fV590hUubl3eoW6/0h0PP+mgk2HYyQL0gKBhCSwqsE31m+2/9YlZ03A+Oivlk2m7VXl9DnFOdXPDfSrZTDbhLw1QHSqE7h7z/iMYEdXdYZj1ESbhXXmqyp5fm/4A6Vw2EWq3yFQ/0AI3N0wYTbm9A5ZUr/cd7wQgsvU''@;'; put 'put ''+RfMxS/neav/3t/4YLb9JQbXA4E4IXDH9pyRskqelqiS3WO4QgiFurYZXP9hqXfnB3EiFWQAgYQhsLolJz1o4FKM0WJ7IWJv8ToLdqYpQ1czDVX1Z38umG3C3AIgFAgcTWBZg2+MX/9kxxDHSWf2fjdotr/pVob9YEHu9gbgBgSAQP8JLN816Qwi4V8KYV5h95Lu/aGWEvkdgpQ7TdH2p1Jv83F7''@;'; put 'put ''S4PZ9n8OYAQQiCsCdzXlfZky8YhE1Z4VypZAg4X8quR+lGD+s+Lc2vfjSjSIAQIJQMBqz/fvMe9dJGHldozxhL6SueAsUx29q0Pft6bEW/u5Rz+C2SbAhINEIHA8AtZWBjMU/ItHzprc99qQ2XXIIw//BaWhR2+eWPvx8WLB+0AACHyaQFlNocMta1dwwctk6uhuddn7xbihOaS0pwRGdxTnbH3x''@;'; put 'put ''WPzAbOGuAgJJQuDuPVMy0oXrzyGj/aK+JVmLpzTTf3iE60sPBFnb+nk51f9OkrKhDCAQNQJrawo9IUVcTTD5lUB8ZN/E1rdJDinjcS6xn5dM2PFW7/fBbKM2TZAICESWwL3PXjyRmWyDLgJf+LxMlCgvOCQyc0721o8iqwiiA4HkJLCqKe/LHaHDD7iUzNxj7c8VAv3dqaSXhgy9tdS79ZBFAcw2''@;'; put 'put ''Oe8FqCqFCKyrvyjTkMylQfPwjXaTgr7l62ZXm0RdBxXq/JtA4oH5udv+mUKIoFQgEHYCR37P/fAbutm+1q0M7dmCZycyuR7EiP7DrWTOv2nixl1gtmGfAggIBKJHoKJxch7GaC1H5jeO+upYCCFT9V1TmPcLKv/RQ9SDc7I3BqKnDjIBgeQnsH7PeFeX5rkGI/4zhMnJfSt2ShlbjZDxPTDb5L8X''@;'; put 'put ''oMIkJVDVMnWmg6bf5zcOnNK7ROsTdZoy8pWAceARJ0e/u6mgAU6UStJ7AMqKHwIVe6aPdiPPti79wFhbFRa4y6mkffeGCRufBLONn7kCJUDghAmsaZ56qd9s+4NCXRm9B+lm4DVC5RJHe8au4plbtBMOCBcCASAwKAKrm6ZPDPH2Gomo3e37uGDMIaeXzZ24+dfWf4PZDgovDAYC0SdQ0Vh0kcY7''@;'; put 'put ''/6xQd4/RWvv9OGIbXZLz+rk5Ow5GXxVkBAKpS8DaGuSS/Fsk6iq0KXDB3zZV9dyl2dvbwWxT996AyhOUQFXjtLO7zE+2O+UhPdsOdBbskqjjDqXNXQFPswk6sSA7oQlUtUwv0sz2TfbxjlwwUyaO0vl529f0fKWc0BWCeCCQQgRW7CkcxkKhapmoPYuhrH19hMjzbvE1/C6FUECpQCBuCNzbOG2E''@;'; put 'put ''gdlOE5k9v9VKxPmkyduv7n2MI3yNHDdTBkKAwGcTEALhe1ovXG7w4CL7KiE4Rwj/cqGv7hfADggAgdgQqGgqukcg3tPuEgsSoJjmF3u3P99bEZhtbOYHsgKBfhFY2TC5yBSdT8rUmWYPlInz/oPB0PyyotpQv4LBxUAACISFQHnjtBEeSdkbZJ09W34k4niiOHfrN/smALMNC3IIAgQiR6D7iDhV''@;'; put 'put ''bMIITbKzdGr73nHTYTMXTap/LXKZITIQAAKfR2Bt68WLNda5zL7G2uojMPeWeuteBrOFewcIJBiBiqbJlxs88LB9LJzOAh2EyLMW+5qqE6wUkAsEkoZAeeOkCwzm3+CQPFlWUdaiKFVy3zYvZ+vyYxUJT7ZJM/VQSDISWNWU55RJ5lMG90+x6+OCP7HQW38FxkgkY81QExCIdwLWVp8sp/KwybXL''@;'; put 'put ''ba2Ms39LhnReSVFtG5htvM8g6AMCfQisaio432D6Jpk63NZb1ulQBCmXLcrftQ1gAQEgEBsCVS2TrzKY9keCqWQpYNw0JCLNLfHuuv+zFMGTbWzmCrICgRMiUNU87TYmtO4TaI78ozb+JRnKhM/69HxCQeEiIAAEBkxg5e5pp8icbzO58VU7iEKdG2W6/8o52XsNMNsBo4WBQCA2BH5XU+g4JPPt''@;'; put 'put ''mGCfrYAIcucCX81tsVEEWYEAEKhsumANR2xuDwmBOglRpy7Iq279PDrwZAv3DhCIUwIV9ZNPZ1jbQwjNtCTqLNCpUMeUUm/97jiVDLKAQFITWN0y4yyZyNuCZvuYXh+A/zLmg2HXzJ69gYHZJvX0Q3HJSmBZo/c6LMS6nlXIRugDQeSv3wpdfJJ1yqGuOCawfs942WQjH9SY//u2TJNpn2DimHKL''@;'; put 'put ''r/aV40mHJ9vjEYL3gUCMCNy3+5JFfqPtbowJtSRwzjYqHWmz4PzjGE0IpE1pAlVN07xBdniLQl3p3f8eBTMl4lq8IK+64kTAgNmeCCW4BgjEgMDKxvydGNMiOzUV8uXzfdufjIEUSAkEUprA6s0zVGko/WuIdV7c81QrjH96OMk50X7RYLYpfQtB8fFKoHzrNDfxaI0Yo3GWRpNrAUqU/IXeuk+d''@;'; put 'put ''txqv+kEXEEgmAlWt067Vja71lMjqkada0yCC3liaX/ebE60TzPZEScF1QCCKBKxP0n73vlpV9uRaaRk3dAk7C0t8O5qjKANSAYGUJ1DZMnkk4mIHR6ynq49MnE8ZvP2q3l19jgcKzPZ4hOB9IBAjAmtaZ6wxWKBni4EQ4vaFvro7YiQH0gKBlCRwT/OFpboIrrSLF5y3YSJPL/Xu7NeuADDblLx9''@;'; put 'put ''oOhEILCmdfqvDRbq2VMrEUdlce7WkkTQDhqBQDIQuKd15lcwwtUa6zrVrocgeYNTOXzN5x1gcazawWyT4Y6AGpKSQEVz4c+FEGV2cW45a/2cCY/fkJTFQlFAIM4IWD2kVzblbySYXmRLM5m+jyLHtIUFNS/2Vy6YbX+JwfVAIEoEVjYWfJcL9qC9KMMjDd8p+w9cdB30r43SDECaVCawumVKbtDo''@;'; put 'put ''3G6fSy6EEDJWSou92ysHwgXMdiDUYAwQiAKB5XUFPoH1apk6XFa6dGXUOwzxcXOyN7RHIT2kAAIpTeCe3TOe1M3ApTYEnYVeV02nd6DnkoPZpvTtBMXHM4EVjd5TTa6/pFB39yZ6gwXbZeoZW+rd+UE86wZtQCDRCVQ2T/62wQK/p0Rx9NQi0A9Lfbt+N9DawGwHSg7GAYEIE1hXn59pSM43mNCH''@;'; put 'put ''W6msr7Ewki4s9e2EpvERZg/hU5fAPa2ThxqM1Qgkvm5TUGnaZoniWXOyNwYGSgbMdqDkYBwQiAKBquZp1UxoU+1UElFWFuduWxSF1JACCKQkgTXN00p0HlqBMSbdAATqlIkyY17etsbBAAGzHQw9GAsEIkygsmn6XI5Ca+w0CnW/6DfaC5bkN3ZGODWEBwIpR8DqtBXgh1qdcvqwng+4WPnbofQh''@;'; put 'put ''V5eN3aAPBgiY7WDowVggEGECVY2FZwd5V4NC3RlWKoMFuxx0yPT53uqmCKeG8EAg5QhUtUz5DePGD+3CGTMOSJJjeknezucGCwPMdrAEYTwQiCCBsppCaYQ7408hs+3bPX8AuFmd7sj65mB+P4qgZAgNBBKSgLXVJ2C0b7W7+lhFqJL71psmbF6GMRKDLQrMdrAEYTwQiDCBVQ2TfsQxu5dgSbZS''@;'; put 'put ''aaa/PUMZNumm3GdeinBqCA8EUobAsvqJ9TJ15vf6UPsvD3b7bvRV7wsHBDDbcFCEGEAgggSsVclcSd+pM/+5PX8IkLllmCZfAQdcRBA8hE4ZAhXNUwpNFnjGPkCGcVOnVJ1fmrfzvnBBALMNF0mIAwQiSKCiuaiUcWMZwVSy0jBuaAp1fX9+3vZHI5gWQgOBpCewum7GcJMGtiKMvmEXK2PX04Zo''@;'; put 'put ''m92frj7HAwVmezxC8D4QiAMC6/eMd/k1z9MIo55m8n790EcuxfOthd5mWCwVB3MEEhKTwNqWC5eGmP8OjEn3Vh+rqw9CdMbC/NqWcFYEZhtOmhALCESQQHl9fo7OuzY65YzuQy6sF8XSiyY1Llk4se69CKaG0EAgKQks3104Sg8efsElDxlpFyghecMhzfxOWVGtGc6iwWzDSRNiAYEIE6hsmXKl''@;'; put 'put ''yUKP2F8nW+lMpj+HufytW86v+3eE00N4IJBUBNa0Tl2sm9pd9gEWJtP2SVSZUuqteznchYLZhpsoxAMCESRQ9uosxXn4/T/KRJndOw1Byh5dsKsW+3a+GcH0EBoIJA2BypbJ5wT0thqH5Mmyi5KpY8m8nK3LI1EkmG0kqEJMIBBBAssafGkCmU8rxDGpd5oO/ZO30qVR3y7x1e4Nx77ACJYAoYFA''@;'; put 'put ''zAncXZ+9U6HunjUQjJtvojT3uFvGVfsjIQ7MNhJUISYQiDCBu/dMyZBCob8SQqf0TmWtUqZEXoeQ49el3q2HIiwDwgOBhCRgHWBhML0JY9ztgVaTD4LpDSXemvsjVRCYbaTIQlwgEGEC5Vunubmz7VFZcs7smypotL/llrKuW+DbWRdhGRAeCCQUgdV1BcOZRLYLhM6xhTto2tZ9Huelgz3/+PNA''@;'; put 'put ''gNkm1G0CYoHApwms3jxDDbgPlCCCb1Oo09P7XSE4o1ja9p+9DD9b4Nv1LLADAqlOQAiEK5oKKxAW83tYCNyFEZ1W4tvRHEk+YLaRpAuxgUCUCCyvyz3vsPbhg8PdX+zZmG+n7j4NhyhPCEletHBiNWwRitKcQJr4I7B2d+EoJFy7NeY/xVaHkfzoSe9nfmf27A0skorBbCNJF2IDgSgSKHv1LMV5''@;'; put 'put ''OP1ik4Xu670X15Zgci1AkLyBK3Tp4om1H0dRGqQCAjEnYD3V3rvnkltDRscdPR9EmbEfU2XSIm/t3yMtEMw20oQhPhCIMoHKlpyRXaHQgy5lyMXHSh0yO99Jk4YtIJq+/eai2q4oy4N0QCAmBCqaC6cYTNsoEcVhC5CxWjovr7oiGoLAbKNBGXIAgSgTsD7FVzUWfcUkxv8SRHP6pmfcNIJG2z/S''@;'; put 'put ''naNK2nJ27CjDiEdZIqQDAlEjsH7PeNlko57QWFfPYsJIb/XpWxyYbdSmGxIBgegTWFtT6OmS/SWMm/MdUvrQo01X12Ti3oIJXnw4x/dmGS4D043+NEHGCBOobJ78bZOH/mi3qfzvVp/rS7w1v41w6p7wYLbRIg15gEAMCdzZOnGobKhLTR78sSq5M/pK0VmgQyGOJxGWby317vwghlIhNRAIK4E1''@;'; put 'put ''DVPHcCp2MGGcaQdWiXvL/jT35ZHc6gNPtmGdRggGBBKLwN0NE8aqJL3Y4P7vSUR19lU/xHHKv7r0g/cFTfn+JflPdSZWdaAWCHyaQJkoI0Oa66o4YnPtdzAifozR5AV5Na3R5AVPttGkDbmAQJwQWNVUcD5CZJUQ4lz7EPbe0hTqrkPY/J8Dfr0p3N1P4gQByEgBAqsbZ3xJluW6oNk+xi6XYvWx''@;'; put 'put ''+XnV34p2+WC20SYO+YBAnBDoPoHK3XldmjJsccjs6Nl32OsJIOhWsv5imv6Km3KfeSlOZIMMIHBCBKyn2qHNTfcaSPuJPYBzdljG0qT5vtpXTihIGC8Csw0jTAgFBBKRgHXOsqqJn+m88ydyn1OorHo45wcdkms1wubauTk7DiZijaA59QisaZ2a7dfbdijUlW5VL4TgMnUuLs7dujIWNMBsY0Ed''@;'; put 'put ''cgKBOCRwd4NvrEfKWBQ0266mRFb7SsxQxvyjXf9oHULa/aXe5mAclgCSgEA3gVVNeU6ZZm4wmP8iG4nBjH8Ip2vi0uzt7bHABGYbC+qQEwjEMYGVDecXISyWCyS+QTChfaUqxNNoIm1pW9Bsgd9z43giU1haVeu0axnTft/z9bEwDSLoj0vz6/43VljAbGNFHvICgTgnsKr5/Etk7Fxh8OBX+krl''@;'; put 'put ''ghkSkbdxwZaW5NW9Av1z43wyU0jePa2ThzKO6pkwv2aXLRPHU/Nyt14WSwxgtrGkD7mBQJwTKH9xmpv4g7eZTJt3rN9zMSJBgukyJuga6J8b55OZIvJWN19YbIpglV0uFiQgMC4q9e7cHUsEYLaxpA+5gUCCEFjW4BuDEL9fIvJMjI403O79MljoY5mqd5d663r+yCVIaSAziQhUtUw9Q8bqjhDr''@;'; put 'put ''7FldT5Hy1/nebbNiXSaYbaxnAPIDgQQhYJ23fHfDhMma3rYu3TnmjL6yrSPwVMndojNtQayfIhIEKcgMIwGrt7OW3vUEJeTCnrACdSJB8krza14NY6oBhQKzHRA2GAQEUpdAWU2hpNLgZQbvqvAow47an2v1z5Ww8jhiZknJpPqPUpcUVB5NAquaLpios67tCnWm2XkV6lw8N+eZ8mjq+KxcYLbx''@;'; put 'put ''MAugAQgkIIFlDb40wULzEcG3KNTdvZfx0y/sJ5jeGZLx2lhtt0hArCB5AATKagodWU7HIyYP9iyCYpz9W+VpOcWTtuwfQMiwDwGzDTtSCAgEUovA8prCUSFy6D6PnHnM1Z5+/fA/3UpWcUdebTW08kuteyNa1R7p6qP9iWAqWTkZN3QJKTeX5Nc+GC0Nx8sDZns8QvA+EAACxyVg/Z5b3jgxHyO5''@;'; put 'put ''nBLpGP1zDV2hzjqB+O3zc2t2w1ah4yKFC06QwLr6/EydKg0csbPsIRJ1blTp/ivnZO81TjBMxC8Ds404YkgABFKHwJFFKh2XhcyOCreS1XP4u03A5FqAIvlvskRvLc6tfT91yEClkSJQ1TJ1vsFCK3sOYBG4kxA8NdpdfY5XH5jt8QjB+0AACPSbwF31+ZkE6QsFEvPss2l7B2HcOKSQtLWGoq1e''@;'; put 'put ''lF17oN8JYAAQQAhVNBee1qUdaHArQ0+ygVhdfQ6H9Kvi7XQzMFu4ZYEAEIgYAWt/rma236dS92SZOlx9EwWNjn+nKyMXBFhnzZL8RuifG7GZSM7Aq5oK70VI3GBXZ5ihjyXsunBhQc2L8VYxmG28zQjoAQJJSKCiPv90Hem/lYhagDEhfUvs0g6+7paH3nzKhyPqZs/ewJIQAZQUZgKVzUU5QaNz''@;'; put 'put ''qyq5M6zQXHCmUNeSWHX1OV55YLbHIwTvAwEgEDYCyxt839bMjlWf8XtukCD5b5TS2096b/h7YLphw550gcpePUtRDzq3qJLnArs4LsTbbuTIudFXvS8eCwazjcdZAU1AIIkJdP+eK4xbEBbFMnW6+5aqm/42SuTHEE776S1x+ocziacnIUqrapo6WeNdGyWiOI881ZoGxcrcEm/N/fFaAJhtvM4M''@;'; put 'put ''6AICSU7grvqc8RixcooV77H657rkzBd0pi1JCwbrriuqDSU5DijvBAms2FM4jBpouxBinD1EJu5NBj88K577LIPZnuAEw2VAAAhEhkB5o/cCiuVyIfi5x/o9V5XSmgyk3zrm7YxG+Go5MnOQSFHXtMxYZPDA/x/BKEQHEvLFpfk76uO5DjDbeJ4d0AYEUoSAddyeW9ZuSFNHLQkYh0b1LZsgSVel''@;'; put 'put ''9IeDKFBeMmHra3AoRorcGH3KXNZSeLLCjMD4AAALhklEQVQW2t/U+0xuq6sPbpO+WzxzixbPVMBs43l2QBsQSDECa2sKPSFF/I9ArNQ+eq83AoIkTSbOCo0b5dA/N8VuDoRQZfPUn3Kh32FXbjLtE4qk6QsLGuJuq0/f2QGzTb37FSoGAnFPYNmu3K+5HVm3a2bX1Rgf3T830/mFN7u0g2vm5W6G''@;'; put 'put ''/rlxP5vhEVjVMm180Di8Q6Gu7q0+CAlBiVoyP3dbQtwDYLbhuQ8gChAAAmEmYJ23XNU0qQARaS0X7Oy+4a3+uS4la69p+hfMy9vWGOb0EC7OCNxVl12jSu5CW5YQ4l1Vks+bm7PjYJxJPaYcMNtEmCXQCARSmMCqpjwnE+LHHnnELUGz/eS+KAiSdbeS9YhfdNy5YMIzb6QwqqQtfXXr5IKQ4d8q''@;'; put 'put ''EbV7q4/J9RDFSvFC364HEqVoMNtEmSnQCQRSnMDqlpx0zZAXM6TPV6jT0xcHRiQoEccKoaM18dLDNMWnLCzlW119ggRvx5icZwdUafozEkVXzsneGAhLkigEAbONAmRIAQSAQPgIVLbkjNQN8YBEnZccK6rOAh0Sdi0zHTI0rQ8f9phFsrr6mCy0yt4WhhHxYyHPXOCrrouZqAEkBrMdADQYAgSA''@;'; put 'put ''QGwJWL/nLqufODNotlVmOEZ/+VhqVOp5nXHjDhrSn7y5qLYrtooh+0AIlDdOG6EQvosJ40x7vEKdG92B0OxEO+gEzHYgdwCMAQJAIC4IdP+ey9iFIRZc51ayjtqfa4nk3HxepWmlI99Lq4dDMeJi2k5YxLrWi5YEzY477adaxoz9MlIvWVBQ03rCQeLkQjDbOJkIkAEEgMDACayoGT+sU3RVOSXP''@;'; put 'put ''TEXyDOkb6b8LaqpV2fHToCrevmVctX/g2WBkNAgsb/AVcB56qvd8SsSx6FBOXkUZLuPR0BDOHGC24aQJsYAAEIgpgYq6gtFdon2FTByXHmsRlWW6JtdedytDbw+ZgXrooRvT6frc5FXNU/7KhHGlfZHJ2VuyIY0vKapti1/Vn60MzDYRZw00AwEg8LkE7t6V93VMxW1CsJkKdaX1vZhxU8eE/Atj''@;'; put 'put ''6TcKkx4Z+eGQT+Ar5vi5qVa3TMnVzECt3aCCcdOQSHx39TkePTDb4xGC94EAEEhYAlbT+k7WVqlS9wUydRzVzs8qLGR2HFJp2haKXFWyHnodFlPFdrorWyaP5MzcijDq6eqjUs8zGjt0RTx39TkeNTDb4xGC94EAEEh4Aivqcs5iGC3igl2hSu7/Hvf36bKsnqgESW9hgh8mWH5Id+IP4bfd6E/9''@;'; put 'put ''qqYL1iDE5tqZKZI1KkTRXN+O5uirCV9GMNvwsYRIQAAIxDmBZQ2+MUwEf4YFvkqVPMc0XasELphpMv0dh5z2W0rowwpVP0mUAxTW7xkvK51pNICGS1LaYerXHR5V0ok9NViTu0yZM1WSTIQ+NDLfOp3Hy1foFc0XnuakanPAbOtZWW5t9ZHp/ivnZO814vz2+lx5YLaJPHugHQgAgQERuLN14lBq''@;'; put 'put ''8O9xjn5CifxFiSiOzwrEBWecm++7lMxtIda5iZquVpdLabeMKtoGUCbKyOi9G6llpgeyFCoHmYdil4th7RTM8akYo7EuKeNUk7HTTB4cFTQ73IzrMsLCMtvuv/dCCO6WMzWMSGe6Y9TrGvd/4Nf3v0q5a7OJ2z48+f2T9ViZ7z0tM36j88AP7bng3DyIhDJ9UUHN3gFNdBwNArONo8kAKUAACESf''@;'; put 'put ''QHldwTkMB39BsDxdIkr32buf97IaIBg89PEQx+iXQ2Zgl0zlzQiZBw3OdM4DHW5FN62nxddmjRX92aJiGelZG17Fh0/PJFrGewR1onQcMGXmUCVFmE7G6TlEoBxKlXOY4Ke0h97NIogqEnWmEUzo8XQf730hOFcl97syce/UTP8mzFhLNBeOrW6dPk43A3t712Jt9SnO3bryeNoT4X0w20SYJdAI''@;'; put 'put ''BIBAxAlYx0AaJrrao4z+jt848I1j9dP9PBFHjolU/WnqiI8cNO1NnQU/0HnnmxiRF02EOxSBAowbAssSJwxTJoTEEc8iWFYQ5mNV6swiWDqVEPVk3ew8rUPfN5RxXZWp46hzoCMOAyGkM39bmjJyu879a9tDqKGsqNaMVF7rg8aIZ/duCpkdF9o5hODvcI9zbLL8bg5mG6m7B+ICASCQsASWt0w6''@;'; put 'put ''g3B2pYxd15g8dBZCVlfdo/vqxmOBAgmBRI8ygf77HwYLdlj/X6au9CPvdv/5x9b/YPT5taUpI3aGjM5fReoUrqqWaVeZLPSQzdj69oAiac4C386E6epzvHsBzPZ4hOB9IAAEUpaAdQbzL16bJbsOvzvFpQyfyUxtBkP66fECRDe72hQprR0jtE+W0p43WPAjQ/i7DFM7wDF/28XlN3Widmn5De29''@;'; put 'put ''Nac35w3RGP8iY9rpquQ+TZU92UH9cJ5Mnad8Vm3Wb70ydT1nCv2XHSG+JVxPulZXH0N2NDNufNXOrVLP5v0e1zfLxm7Q44X1YHWA2Q6WIIwHAkAgZQiU1RRK6So6jQk91yVnTfDIQ70HAm+fihAfap/fG24Y1lOeRJRPKJU/RAjV+fWDb1Ikv0EpfR8Zos3lChwY7Ipi60PF/XvHS22G/GVqSjN1''@;'; put 'put ''EZjnkNJOPVYtXDAmOGqVZc+NC3KfeWmw9Va1TL2Zcf2eXs/inZSSovm5ib8oqjcbMNvB3ikwHggAgZQlYJnvqeg0qd35XgY32Sk6D54pSdLJEnFmqcQ5XMKOUQLxMRrzp+ksqDJhUowwwRhxmTg1RXL5KZIOcSz2cW7sN5jexkWgyxCsTTD2Eab0X7JKP2nvpIdHp3WyaK1+Xr15hhpKPzhRpWlz''@;'; put 'put ''TK5fhY+xAItxQ3NKQx5CLPSLub6d7wzkJljTMHUMkmmdwYJfssdLyPHkqPfTr4zViuiB1HEiY8BsT4QSXAMEgAAQ6CcBa9EPqq0lZ40YTvz79hM9LY10HNR6/ubStE4uDR/C1fZTeOZbh+Nmr2vfMlc0XnCqybsqJaJcQjA9atVz0Gjfn66OucPgh+/vzwlPFp+s3c3rTRa63s4pOD+MhFS0sKDm''@;'; put 'put ''xX7ijvvLwWzjfopAIBAAAkAgtgS6vz6Xja9yTO5ECF3Ud6uRdQgIwfQlgskvnHLHlhN5Al/dMvkszQw+Z59/bFUoU7V0Xk51RWyrjUx2MNvIcIWoQAAIAIGkI2CdTtUeVC73qCOWhMy28X0L7P5qWc56LGR2rO/SSdNnLaKy4ujmsEcNHrq856lWiHc9asbXEuWkrv5OLphtf4nB9UAACACBFCew''@;'; put 'put ''qinPaXBxreD8Z4rkHN0Xh8GCXQ4p4086xz+/xVe9r+/7lU0XzDK49idKJMV6r3urD5ZvXODdsT5Z0YLZJuvMQl1AAAgAgQgTWN7o/RLnxi8xwpfK1HnU4RsKdb+JEP+VTOUN9hNrRU3hEKTieoH42bY8mbg3iUPiyuKZW7QIS45ZeDDbmKGHxEAACACBxCdg/Z7rlI1sv7ZvXbpjxNkES3LfqgTC''@;'; put 'put ''zzqJ+0Yqaf8KGeT7TGir7WswIn4kRH6Jr/aFxKfx2RWA2Sbz7EJtQAAIAIEoESh79SzFczhzssb89zjljKMO/rAWUXnU4Z/I2JHern2YZsuSiPpEcW71N6MkM2ZpwGxjhh4SAwEgAASSj8CKmsJhTArdiRC/+lhfLX+qYoE6COUFC3LrB304RryTBLON9xkCfUAACACBBCRQ3ug9myD5Lia0yRJR''@;'; put 'put ''j+qmZLUuVKlj4bzcbVUJWF6/JYPZ9hsZDAACQAAIAIETJVDRWHguxnSlKfTze+/PNTl7y21I424uqu060ViJfB2YbSLPHmgHAkAACCQAAWtfrV9PX8C4toQSeShFikGwdNm8vC1bEkB+WCSC2YYFIwQBAkAACACB4xFY0zrtizJx/wYh7NJZcFpx7paO441JlvfBbJNlJqEOIAAEgEACELDORB69''@;'; put 'put ''d68jWU+K+qwp+D9J1vEz+kjcvQAAAABJRU5ErkJggg=='';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=spinner-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA3MiA3MiI+CiAgICA8ZGVmcz4KICAgICAgICA8c3R5bGU+CiAgICAgICAgICAgIC5jbHMtMSwKICAgICAgICAgICAgLmNscy0yIHsKICAg''@;'; put 'put ''ICAgICAgICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgICAgICAgICBzdHJva2UtbWl0ZXJsaW1pdDogMTA7CiAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg6IDVweDsKICAgICAgICAgICAgfQogICAgICAgICAgICAuY2xzLTEgewogICAgICAgICAgICAgICAgc3Ryb2tlOiAjMDAwMDAw''@;'; put 'put ''OwogICAgICAgICAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuMTU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLmNscy0yIHsKICAgICAgICAgICAgICAgIHN0cm9rZTogIzAwNzJhMzsKICAgICAgICAgICAgfQogICAgICAgIDwvc3R5bGU+CiAgICA8L2RlZnM+CiAgICA8dGl0bGU+UHJl''@;'; put 'put ''bG9hZGVyXzcyeDI8L3RpdGxlPgogICAgPGNpcmNsZSBjbGFzcz0iY2xzLTEiIGN4PSIzNiIgY3k9IjM2IiByPSIzMyIvPgogICAgPHBhdGggY2xhc3M9ImNscy0yIiBkPSJNMTQuMyw2MC45QTMzLDMzLDAsMCwxLDM2LDMiPgogICAgPC9wYXRoPgo8L3N2Zz4K'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; options notes; data _null_; format url $256.; rc=METADATA_GETURI("Stored Process Web App",url); url=coalescec(url,"localhost/SASStoredProcess"); urlEscaped = tranwrd(trim(url)," ","%20"); putlog "NOTE: SASjs Streaming App Created! Check it out here:" ; putlog "NOTE- ";putlog "NOTE- ";putlog "NOTE- ";putlog "NOTE- "; putlog "NOTE- " urlEscaped +(-1) "?_program=&appLoc/services/clickme" ; putlog "NOTE- ";putlog "NOTE- ";putlog "NOTE- ";putlog "NOTE- "; run;